ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDlhOTNlM2UuLjI1MjBiYTYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTQxMiw4ICsxNDEyLDggQEAKIEQ6IE5hdGlvbmFsIExhbmd1YWdlIFN1cHBvcnQKIEQ6IExpbnV4IEludGVybmF0aW9uYWxpemF0aW9uIFByb2plY3QKIEQ6IEdlcm1hbiBMb2NhbGl6YXRpb24gZm9yIExpbnV4IGFuZCBHTlUgc29mdHdhcmUKLVM6IEtyaWVtaGlsZHJpbmcgMTJhCi1TOiA2NTc5NSBIYXR0ZXJzaGVpbSBhbSBNYWluCitTOiBBdWYgZGVyIEZpdHRlbCAxOAorUzogNTMzNDcgQWxmdGVyCiBTOiBHZXJtYW55CiAKIE46IENocmlzdG9waCBIZWxsd2lnCkBAIC0zNTgwLDYgKzM1ODAsMTIgQEAKIEQ6IENvLWF1dGhvciBvZiBHZXJtYW4gYm9vayBgYExpbnV4LUtlcm5lbC1Qcm9ncmFtbWllcnVuZycnCiBEOiBDby1mb3VuZGVyIG9mIEJlcmxpbiBMaW51eCBVc2VyIEdyb3VwCiAKK046IFJpa3UgVm9pcGlvCitFOiByaWt1LnZvaXBpb0Bpa2kuZmkKK0Q6IEF1dGhvciBvZiBQQ0E5NTMyIExFRCBhbmQgRmludGVrIGY3NTM3NXMgaHdtb24gZHJpdmVyCitEOiBTb21lIHJhbmRvbSBBUk0gYm9hcmQgcGF0Y2hlcworUzogRmlubGFuZAorCiBOOiBQYXRyaWNrIFZvbGtlcmRpbmcKIEU6IHZvbGtlcmRpQGZ0cC5jZHJvbS5jb20KIEQ6IFByb2R1Y2VkIHRoZSBTbGFja3dhcmUgZGlzdHJpYnV0aW9uLCB1cGRhdGVkIHRoZSBTVkdBbGliCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWAppbmRleCAyYTM5YWViLi5kMDU3MzdhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKQEAgLTg2LDYgKzg2LDggQEAKIAktIGRlc2NyaWJlcyB0aGUgY2FjaGUvVExCIGZsdXNoaW5nIGludGVyZmFjZXMgTGludXggdXNlcy4KIGNkcm9tLwogCS0gZGlyZWN0b3J5IHdpdGggaW5mb3JtYXRpb24gb24gdGhlIENELVJPTSBkcml2ZXJzIHRoYXQgTGludXggaGFzLgorY2dyb3Vwcy8KKwktIGNncm91cHMgZmVhdHVyZXMsIGluY2x1ZGluZyBjcHVzZXRzIGFuZCBtZW1vcnkgY29udHJvbGxlci4KIGNvbm5lY3Rvci8KIAktIGRvY3Mgb24gdGhlIG5ldGxpbmsgYmFzZWQgdXNlcnNwYWNlPC0+a2VybmVsIHNwYWNlIGNvbW11bmljYXRpb24gbW9kLgogY29uc29sZS8KQEAgLTk4LDggKzEwMCw2IEBACiAJLSBkb2N1bWVudCBkZXNjcmliaW5nIGhvdyBDUFUgbG9hZCBzdGF0aXN0aWNzIGFyZSBjb2xsZWN0ZWQuCiBjcHVpZGxlLwogCS0gaW5mbyBvbiBDUFVfSURMRSwgQ1BVIGlkbGUgc3RhdGUgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCi1jcHVzZXRzLnR4dAotCS0gZG9jdW1lbnRzIHRoZSBjcHVzZXRzIGZlYXR1cmU7IGFzc2lnbiBDUFVzIGFuZCBNZW0gdG8gYSBzZXQgb2YgdGFza3MuCiBjcHV0b3BvbG9neS50eHQKIAktIGRvY3VtZW50YXRpb24gb24gaG93IENQVSB0b3BvbG9neSBpbmZvIGlzIGV4cG9ydGVkIHZpYSBzeXNmcy4KIGNyaXMvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWttZW10cmFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTZhOTJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWttZW10cmFjZQpAQCAtMCwwICsxLDcxIEBACitXaGF0OgkJL3N5cy9rZXJuZWwvZGVidWcva21lbXRyYWNlLworRGF0ZToJCUp1bHkgMjAwOAorQ29udGFjdDoJRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudSA8ZWR1YXJkLm11bnRlYW51QGxpbnV4MzYwLnJvPgorRGVzY3JpcHRpb246CisKK0luIGttZW10cmFjZS1lbmFibGVkIGtlcm5lbHMsIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGNyZWF0ZWQ6CisKKy9zeXMva2VybmVsL2RlYnVnL2ttZW10cmFjZS8KKwljcHU8bj4JCSgwNDAwKQlQZXItQ1BVIHRyYWNpbmcgZGF0YSwgc2VlIGJlbG93LiAoYmluYXJ5KQorCXRvdGFsX292ZXJydW5zCSgwNDAwKQlUb3RhbCBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggd2VyZSBkcm9wcGVkIGZyb20KKwkJCQljcHU8bj4gZmlsZXMgYmVjYXVzZSBvZiBmdWxsIGJ1ZmZlciBjb25kaXRpb24sCisJCQkJbm9uLWJpbmFyeS4gKHRleHQpCisJYWJpX3ZlcnNpb24JKDA0MDApCUtlcm5lbCdzIGttZW10cmFjZSBBQkkgdmVyc2lvbi4gKHRleHQpCisKK0VhY2ggcGVyLUNQVSBmaWxlIHNob3VsZCBiZSByZWFkIGFjY29yZGluZyB0byB0aGUgcmVsYXkgaW50ZXJmYWNlLiBUaGF0IGlzLAordGhlIHJlYWRlciBzaG91bGQgc2V0IGFmZmluaXR5IHRvIHRoYXQgc3BlY2lmaWMgQ1BVIGFuZCwgYXMgY3VycmVudGx5IGRvbmUgYnkKK3RoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gKHRob3VnaCB0aGVyZSBhcmUgb3RoZXIgbWV0aG9kcyksIHVzZSBwb2xsKCkgd2l0aAorYW4gaW5maW5pdGUgdGltZW91dCBiZWZvcmUgZXZlcnkgcmVhZCgpLiBPdGhlcndpc2UsIGVycm9uZW91cyBkYXRhIG1heSBiZQorcmVhZC4gVGhlIGJpbmFyeSBkYXRhIGhhcyB0aGUgZm9sbG93aW5nIF9jb3JlXyBmb3JtYXQ6CisKKwlFdmVudCBJRAkoMSBieXRlKQlVbnNpZ25lZCBpbnRlZ2VyLCBvbmUgb2Y6CisJCTAgLSByZXByZXNlbnRzIGFuIGFsbG9jYXRpb24gKEtNRU1UUkFDRV9FVkVOVF9BTExPQykKKwkJMSAtIHJlcHJlc2VudHMgYSBmcmVlaW5nIG9mIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeQorCQkgICAgKEtNRU1UUkFDRV9FVkVOVF9GUkVFKQorCVR5cGUgSUQJCSgxIGJ5dGUpCVVuc2lnbmVkIGludGVnZXIsIG9uZSBvZjoKKwkJMCAtIHRoaXMgaXMgYSBrbWFsbG9jKCkgLyBrZnJlZSgpCisJCTEgLSB0aGlzIGlzIGEga21lbV9jYWNoZV9hbGxvYygpIC8ga21lbV9jYWNoZV9mcmVlKCkKKwkJMiAtIHRoaXMgaXMgYSBfX2dldF9mcmVlX3BhZ2VzKCkgZXQgYWwuCisJRXZlbnQgc2l6ZQkoMiBieXRlcykJVW5zaWduZWQgaW50ZWdlciByZXByZXNlbnRpbmcgdGhlCisJCQkJCXNpemUgb2YgdGhpcyBldmVudC4gVXNlZCB0byBleHRlbmQKKwkJCQkJa21lbXRyYWNlLiBEaXNjYXJkIHRoZSBieXRlcyB5b3UKKwkJCQkJZG9uJ3Qga25vdyBhYm91dC4KKwlTZXF1ZW5jZSBudW1iZXIJKDQgYnl0ZXMpCVNpZ25lZCBpbnRlZ2VyIHVzZWQgdG8gcmVvcmRlciBkYXRhCisJCQkJCWxvZ2dlZCBvbiBTTVAgbWFjaGluZXMuIFdyYXBhcm91bmQKKwkJCQkJbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQsIGFsdGhvdWdoCisJCQkJCWl0IGlzIHVubGlrZWx5LgorCUNhbGxlciBhZGRyZXNzCSg4IGJ5dGVzKQlSZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbGVyLgorCVBvaW50ZXIgdG8gbWVtCSg4IGJ5dGVzKQlQb2ludGVyIHRvIHRhcmdldCBtZW1vcnkgYXJlYS4gQ2FuIGJlCisJCQkJCU5VTEwsIGJ1dCBub3QgYWxsIHN1Y2ggY2FsbHMgbWlnaHQgYmUKKwkJCQkJcmVjb3JkZWQuCisKK0luIGNhc2Ugb2YgS01FTVRSQUNFX0VWRU5UX0FMTE9DIGV2ZW50cywgdGhlIG5leHQgZmllbGRzIGZvbGxvdzoKKworCVJlcXVlc3RlZCBieXRlcwkoOCBieXRlcykJVG90YWwgbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcywKKwkJCQkJdW5zaWduZWQsIG11c3Qgbm90IGJlIHplcm8uCisJQWxsb2NhdGVkIGJ5dGVzICg4IGJ5dGVzKQlUb3RhbCBudW1iZXIgb2YgYWN0dWFsbHkgYWxsb2NhdGVkCisJCQkJCWJ5dGVzLCB1bnNpZ25lZCwgbXVzdCBub3QgYmUgbG93ZXIKKwkJCQkJdGhhbiByZXF1ZXN0ZWQgYnl0ZXMuCisJUmVxdWVzdGVkIGZsYWdzCSg0IGJ5dGVzKQlHRlAgZmxhZ3Mgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4KKwlUYXJnZXQgQ1BVCSg0IGJ5dGVzKQlTaWduZWQgaW50ZWdlciwgdmFsaWQgZm9yIGV2ZW50IGlkIDEuCisJCQkJCUlmIGVxdWFsIHRvIC0xLCB0YXJnZXQgQ1BVIGlzIHRoZSBzYW1lCisJCQkJCWFzIG9yaWdpbiBDUFUsIGJ1dCB0aGUgcmV2ZXJzZSBtaWdodAorCQkJCQlub3QgYmUgdHJ1ZS4KKworVGhlIGRhdGEgaXMgbWFkZSBhdmFpbGFibGUgaW4gdGhlIHNhbWUgZW5kaWFubmVzcyB0aGUgbWFjaGluZSBoYXMuCisKK090aGVyIGV2ZW50IGlkcyBhbmQgdHlwZSBpZHMgbWF5IGJlIGRlZmluZWQgYW5kIGFkZGVkLiBPdGhlciBmaWVsZHMgbWF5IGJlCithZGRlZCBieSBpbmNyZWFzaW5nIGV2ZW50IHNpemUsIGJ1dCBzZWUgYmVsb3cgZm9yIGRldGFpbHMuCitFdmVyeSBtb2RpZmljYXRpb24gdG8gdGhlIEFCSSwgaW5jbHVkaW5nIG5ldyBpZCBkZWZpbml0aW9ucywgYXJlIGZvbGxvd2VkCitieSBidW1waW5nIHRoZSBBQkkgdmVyc2lvbiBieSBvbmUuCisKK0FkZGluZyBuZXcgZGF0YSB0byB0aGUgcGFja2V0IChmZWF0dXJlcykgaXMgZG9uZSBhdCB0aGUgZW5kIG9mIHRoZSBtYW5kYXRvcnkKK2RhdGE6CisJRmVhdHVyZSBzaXplCSgyIGJ5dGUpCisJRmVhdHVyZSBJRAkoMSBieXRlKQorCUZlYXR1cmUgZGF0YQkoRmVhdHVyZSBzaXplIC0gMyBieXRlcykKKworCitVc2VyczoKKwlrbWVtdHJhY2UtdXNlciAtIGdpdDovL3JlcG8ub3IuY3ova21lbXRyYWNlLXVzZXIuZ2l0CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKaW5kZXggODczZWYxZi4uZTA5MWZhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKQEAgLTQsOCArNCw4IEBACiBDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCVNvbWUgcmVndWxhdG9yIGRpcmVjdG9yaWVzIHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAotCQlzdGF0ZS4gVGhpcyByZXBvcnRzIHRoZSByZWd1bGF0b3IgZW5hYmxlIHN0YXR1cywgZm9yCi0JCXJlZ3VsYXRvcnMgd2hpY2ggY2FuIHJlcG9ydCB0aGF0IHZhbHVlLgorCQlzdGF0ZS4gVGhpcyByZXBvcnRzIHRoZSByZWd1bGF0b3IgZW5hYmxlIGNvbnRyb2wsIGZvcgorCQlyZWd1bGF0b3JzIHdoaWNoIGNhbiByZXBvcnQgdGhhdCBpbnB1dCB2YWx1ZS4KIAogCQlUaGlzIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKIApAQCAtMTQsMTYgKzE0LDU0IEBACiAJCSd1bmtub3duJwogCiAJCSdlbmFibGVkJyBtZWFucyB0aGUgcmVndWxhdG9yIG91dHB1dCBpcyBPTiBhbmQgaXMgc3VwcGx5aW5nCi0JCXBvd2VyIHRvIHRoZSBzeXN0ZW0uCisJCXBvd2VyIHRvIHRoZSBzeXN0ZW0gKGFzc3VtaW5nIG5vIGVycm9yIHByZXZlbnRzIGl0KS4KIAogCQknZGlzYWJsZWQnIG1lYW5zIHRoZSByZWd1bGF0b3Igb3V0cHV0IGlzIE9GRiBhbmQgaXMgbm90Ci0JCXN1cHBseWluZyBwb3dlciB0byB0aGUgc3lzdGVtLi4KKwkJc3VwcGx5aW5nIHBvd2VyIHRvIHRoZSBzeXN0ZW0gKHVubGVzcyBzb21lIG5vbi1MaW51eAorCQljb250cm9sIGhhcyBlbmFibGVkIGl0KS4KIAogCQkndW5rbm93bicgbWVhbnMgc29mdHdhcmUgY2Fubm90IGRldGVybWluZSB0aGUgc3RhdGUsIG9yCiAJCXRoZSByZXBvcnRlZCBzdGF0ZSBpcyBpbnZhbGlkLgogCiAJCU5PVEU6IHRoaXMgZmllbGQgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBtaWNyb3ZvbHRzCi0JCWFuZCBtaWNyb2FtcHMgdG8gZGV0ZXJtaW5lIHJlZ3VsYXRvciBvdXRwdXQgbGV2ZWxzLgorCQlvciBtaWNyb2FtcHMgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyZWQgcmVndWxhdG9yIG91dHB1dCBsZXZlbHMuCisKKworV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdGF0dXMKK0Rlc2NyaXB0aW9uOgorCQlTb21lIHJlZ3VsYXRvciBkaXJlY3RvcmllcyB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKKwkJInN0YXR1cyIuIFRoaXMgcmVwb3J0cyB0aGUgY3VycmVudCByZWd1bGF0b3Igc3RhdHVzLCBmb3IKKwkJcmVndWxhdG9ycyB3aGljaCBjYW4gcmVwb3J0IHRoYXQgb3V0cHV0IHZhbHVlLgorCisJCVRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgorCisJCQlvZmYKKwkJCW9uCisJCQllcnJvcgorCQkJZmFzdAorCQkJbm9ybWFsCisJCQlpZGxlCisJCQlzdGFuZGJ5CisKKwkJIm9mZiIgbWVhbnMgdGhlIHJlZ3VsYXRvciBpcyBub3Qgc3VwcGx5aW5nIHBvd2VyIHRvIHRoZQorCQlzeXN0ZW0uCisKKwkJIm9uIiBtZWFucyB0aGUgcmVndWxhdG9yIGlzIHN1cHBseWluZyBwb3dlciB0byB0aGUgc3lzdGVtLAorCQlhbmQgdGhlIHJlZ3VsYXRvciBjYW4ndCByZXBvcnQgYSBkZXRhaWxlZCBvcGVyYXRpb24gbW9kZS4KKworCQkiZXJyb3IiIGluZGljYXRlcyBhbiBvdXQtb2YtcmVndWxhdGlvbiBzdGF0dXMgc3VjaCBhcyBiZWluZworCQlkaXNhYmxlZCBkdWUgdG8gdGhlcm1hbCBzaHV0ZG93biwgb3Igdm9sdGFnZSBiZWluZyB1bnN0YWJsZQorCQliZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggdGhlIGlucHV0IHBvd2VyIHN1cHBseS4KKworCQkiZmFzdCIsICJub3JtYWwiLCAiaWRsZSIsIGFuZCAic3RhbmRieSIgYXJlIGFsbCBkZXRhaWxlZAorCQlyZWd1bGF0b3Igb3BlcmF0aW9uIG1vZGVzIChkZXNjcmliZWQgZWxzZXdoZXJlKS4gIFRoZXkKKwkJaW1wbHkgIm9uIiwgYnV0IHByb3ZpZGUgbW9yZSBkZXRhaWwuCisKKwkJTm90ZSB0aGF0IHJlZ3VsYXRvciBzdGF0dXMgaXMgYSBmdW5jdGlvbiBvZiBtYW55IGlucHV0cywKKwkJbm90IGxpbWl0ZWQgdG8gY29udHJvbCBpbnB1dHMgZnJvbSBMaW51eC4gIEZvciBleGFtcGxlLAorCQl0aGUgYWN0dWFsIGxvYWQgcHJlc2VudGVkIG1heSB0cmlnZ2VyICJlcnJvciIgc3RhdHVzOyBvcgorCQlhIHJlZ3VsYXRvciBtYXkgYmUgZW5hYmxlZCBieSBhbm90aGVyIHVzZXIsIGV2ZW4gdGhvdWdoCisJCUxpbnV4IGRpZCBub3QgZW5hYmxlIGl0LgogCiAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vdHlwZQpAQCAtNTgsNyArOTYsNyBAQAogCQlTb21lIHJlZ3VsYXRvciBkaXJlY3RvcmllcyB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJbWljcm92b2x0cy4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG91dHB1dCB2b2x0YWdlIHNldHRpbmcKIAkJbWVhc3VyZWQgaW4gbWljcm92b2x0cyAoaS5lLiBFLTYgVm9sdHMpLCBmb3IgcmVndWxhdG9ycwotCQl3aGljaCBjYW4gcmVwb3J0IHRoYXQgdm9sdGFnZS4KKwkJd2hpY2ggY2FuIHJlcG9ydCB0aGUgY29udHJvbCBpbnB1dCBmb3Igdm9sdGFnZS4KIAogCQlOT1RFOiBUaGlzIHZhbHVlIHNob3VsZCBub3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ3VsYXRvcgogCQlvdXRwdXQgdm9sdGFnZSBsZXZlbCBhcyB0aGlzIHZhbHVlIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YKQEAgLTczLDcgKzExMSw3IEBACiAJCVNvbWUgcmVndWxhdG9yIGRpcmVjdG9yaWVzIHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQltaWNyb2FtcHMuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvdXRwdXQgY3VycmVudCBsaW1pdAogCQlzZXR0aW5nIG1lYXN1cmVkIGluIG1pY3JvYW1wcyAoaS5lLiBFLTYgQW1wcyksIGZvciByZWd1bGF0b3JzCi0JCXdoaWNoIGNhbiByZXBvcnQgdGhhdCBjdXJyZW50LgorCQl3aGljaCBjYW4gcmVwb3J0IHRoZSBjb250cm9sIGlucHV0IGZvciBhIGN1cnJlbnQgbGltaXQuCiAKIAkJTk9URTogVGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWd1bGF0b3IKIAkJb3V0cHV0IGN1cnJlbnQgbGV2ZWwgYXMgdGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mCkBAIC04Nyw3ICsxMjUsNyBAQAogRGVzY3JpcHRpb246CiAJCVNvbWUgcmVndWxhdG9yIGRpcmVjdG9yaWVzIHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlvcG1vZGUuIFRoaXMgaG9sZHMgdGhlIGN1cnJlbnQgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlLAotCQlmb3IgcmVndWxhdG9ycyB3aGljaCBjYW4gcmVwb3J0IGl0LgorCQlmb3IgcmVndWxhdG9ycyB3aGljaCBjYW4gcmVwb3J0IHRoYXQgY29udHJvbCBpbnB1dCB2YWx1ZS4KIAogCQlUaGUgb3Btb2RlIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgogCkBAIC0xMDEsNyArMTM5LDggQEAKIAogCQlOT1RFOiBUaGlzIHZhbHVlIHNob3VsZCBub3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ3VsYXRvcgogCQlvdXRwdXQgb3BlcmF0aW5nIG1vZGUgYXMgdGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mCi0JCXdoZXRoZXIgdGhlIHJlZ3VsYXRvciBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgorCQl3aGV0aGVyIHRoZSByZWd1bGF0b3IgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gIEEgInN0YXR1cyIKKwkJYXR0cmlidXRlIG1heSBiZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgbW9kZS4KIAogCiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL21pbl9taWNyb3ZvbHRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay8uZ2l0aWdub3JlCmluZGV4IGMxMDJjMDIuLmM2ZGVmMzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay8uZ2l0aWdub3JlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay8uZ2l0aWdub3JlCkBAIC00LDMgKzQsNyBAQAogKi5odG1sCiAqLjkuZ3oKICouOQorKi5hdXgKKyouZHZpCisqLmxvZworKi5vdXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQKaW5kZXggMWZkMTc1My4uNDM0OWMxNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQKQEAgLTExOCw3ICsxMTgsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKIAkJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsICZlLT5ydWxlKSkgewogCQkJCWxpc3RfZGVsX3JjdSgmZS0+bGlzdCk7Ci0JCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKKwkJCQljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGUpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJCQluZS0+cnVsZS5hY3Rpb24gPSBuZXdhY3Rpb247CiAJCQkJbmUtPnJ1bGUuZmlsZV9jb3VudCA9IG5ld2ZpZWxkX2NvdW50OwogCQkJCWxpc3RfcmVwbGFjZV9yY3UoZSwgbmUpOwotCQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZSwgZSk7CisJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMjgzLDcgKzI4Myw3IEBACiAJCQkJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKIAkJCQllLT5kZWxldGVkID0gMTsKIAkJCQlzcGluX3VubG9jaygmZS0+bG9jayk7Ci0JCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKKwkJCQljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGUpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAppbmRleCA5NTgyMWEyLi43YWEyMDAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKQEAgLTgxLDcgKzgxLDcgQEAKIAlUaGlzIHdvcmsgaXMgbGFyZ2VseSBjb21wbGV0ZWQuICBSZWFsdGltZS1mcmllbmRseSBSQ1UgY2FuIGJlCiAJZW5hYmxlZCB2aWEgdGhlIENPTkZJR19QUkVFTVBUX1JDVSBrZXJuZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCiAJSG93ZXZlciwgd29yayBpcyBpbiBwcm9ncmVzcyBmb3IgZW5hYmxpbmcgcHJpb3JpdHkgYm9vc3Rpbmcgb2YKLQlwcmVlbXB0ZWQgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy5UaGlzIGlzIG5lZWRlZCBpZiB5b3UKKwlwcmVlbXB0ZWQgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4gIFRoaXMgaXMgbmVlZGVkIGlmIHlvdQogCWhhdmUgQ1BVLWJvdW5kIHJlYWx0aW1lIHRocmVhZHMuCiAKIG8JV2hlcmUgY2FuIEkgZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIFJDVT8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3JjdWxpc3RfbnVsbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1bGlzdF9udWxscy50eHQKaW5kZXggMjM5ZjU0Mi4uNjM4OWRlYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1bGlzdF9udWxscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1bGlzdF9udWxscy50eHQKQEAgLTIxLDcgKzIxLDcgQEAKICAgLyoKICAgICogQmVjYXVzZSBhIHdyaXRlciBjb3VsZCBkZWxldGUgb2JqZWN0LCBhbmQgYSB3cml0ZXIgY291bGQKICAgICogcmV1c2UgdGhlc2Ugb2JqZWN0IGJlZm9yZSB0aGUgUkNVIGdyYWNlIHBlcmlvZCwgd2UKLSAgICogbXVzdCBjaGVjayBrZXkgYWZ0ZXIgZ2V0aW5nIHRoZSByZWZlcmVuY2Ugb24gb2JqZWN0CisgICAqIG11c3QgY2hlY2sga2V5IGFmdGVyIGdldHRpbmcgdGhlIHJlZmVyZW5jZSBvbiBvYmplY3QKICAgICovCiAgIGlmIChvYmotPmtleSAhPSBrZXkpIHsgLy8gbm90IHRoZSBvYmplY3Qgd2UgZXhwZWN0ZWQKICAgICAgcHV0X3JlZihvYmopOwpAQCAtMTE3LDcgKzExNyw3IEBACiB0byBhbm90aGVyIGNoYWluKSBjaGVja2luZyB0aGUgZmluYWwgJ251bGxzJyB2YWx1ZSBpZgogdGhlIGxvb2t1cCBtZXQgdGhlIGVuZCBvZiBjaGFpbi4gSWYgZmluYWwgJ251bGxzJyB2YWx1ZQogaXMgbm90IHRoZSBzbG90IG51bWJlciwgdGhlbiB3ZSBtdXN0IHJlc3RhcnQgdGhlIGxvb2t1cCBhdAotdGhlIGJlZ2luaW5nLiBJZiB0aGUgb2JqZWN0IHdhcyBtb3ZlZCB0byBzYW1lIGNoYWluLAordGhlIGJlZ2lubmluZy4gSWYgdGhlIG9iamVjdCB3YXMgbW92ZWQgdG8gdGhlIHNhbWUgY2hhaW4sCiB0aGVuIHRoZSByZWFkZXIgZG9lc250IGNhcmUgOiBJdCBtaWdodCBldmVudHVhbGx5CiBzY2FuIHRoZSBsaXN0IGFnYWluIHdpdGhvdXQgaGFybS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLzAwLUlOREVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNThmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvMDAtSU5ERVgKQEAgLTAsMCArMSwxOCBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZQorY2dyb3Vwcy50eHQKKwktIENvbnRyb2wgR3JvdXBzIGRlZmluaXRpb24sIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGV4YW1wbGVzIGFuZCBBUEkuCitjcHVhY2N0LnR4dAorCS0gQ1BVIEFjY291bnRpbmcgQ29udHJvbGxlcjsgYWNjb3VudCBDUFUgdXNhZ2UgZm9yIGdyb3VwcyBvZiB0YXNrcy4KK2NwdXNldHMudHh0CisJLSBkb2N1bWVudHMgdGhlIGNwdXNldHMgZmVhdHVyZTsgYXNzaWduIENQVXMgYW5kIE1lbSB0byBhIHNldCBvZiB0YXNrcy4KK2RldmljZXMudHh0CisJLSBEZXZpY2UgV2hpdGVsaXN0IENvbnRyb2xsZXI7IGRlc2NyaXB0aW9uLCBpbnRlcmZhY2UgYW5kIHNlY3VyaXR5LgorZnJlZXplci1zdWJzeXN0ZW0udHh0CisJLSBjaGVja3BvaW50aW5nOyByYXRpb25hbGUgdG8gbm90IHVzZSBzaWduYWxzLCBpbnRlcmZhY2UuCittZW1jZ190ZXN0LnR4dAorCS0gTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXI7IGltcGxlbWVudGF0aW9uIGRldGFpbHMuCittZW1vcnkudHh0CisJLSBNZW1vcnkgUmVzb3VyY2UgQ29udHJvbGxlcjsgZGVzaWduLCBhY2NvdW50aW5nLCBpbnRlcmZhY2UsIHRlc3RpbmcuCityZXNvdXJjZV9jb3VudGVyLnR4dAorCS0gUmVzb3VyY2UgQ291bnRlciBBUEkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKaW5kZXggOTNmZWI4NC4uNmViMWE5NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApAQCAtNTYsNyArNTYsNyBAQAogc3RhdGUgYXR0YWNoZWQgdG8gZWFjaCBjZ3JvdXAgaW4gdGhlIGhpZXJhcmNoeS4gIEVhY2ggaGllcmFyY2h5IGhhcwogYW4gaW5zdGFuY2Ugb2YgdGhlIGNncm91cCB2aXJ0dWFsIGZpbGVzeXN0ZW0gYXNzb2NpYXRlZCB3aXRoIGl0LgogCi1BdCBhbnkgb25lIHRpbWUgdGhlcmUgbWF5IGJlIG11bHRpcGxlIGFjdGl2ZSBoaWVyYWNoaWVzIG9mIHRhc2sKK0F0IGFueSBvbmUgdGltZSB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgYWN0aXZlIGhpZXJhcmNoaWVzIG9mIHRhc2sKIGNncm91cHMuIEVhY2ggaGllcmFyY2h5IGlzIGEgcGFydGl0aW9uIG9mIGFsbCB0YXNrcyBpbiB0aGUgc3lzdGVtLgogCiBVc2VyIGxldmVsIGNvZGUgbWF5IGNyZWF0ZSBhbmQgZGVzdHJveSBjZ3JvdXBzIGJ5IG5hbWUgaW4gYW4KQEAgLTEyNCwxMCArMTI0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBcCiAgICAgICAgICAgICAgICAgICAgICAgIFByb2YgKDE1JSkgc3R1ZGVudHMgKDUlKQogCi1Ccm93c2VycyBsaWtlIGZpcmVmb3gvbHlueCBnbyBpbnRvIHRoZSBXV1cgbmV0d29yayBjbGFzcywgd2hpbGUgKGspbmZzZCBnbworQnJvd3NlcnMgbGlrZSBGaXJlZm94L0x5bnggZ28gaW50byB0aGUgV1dXIG5ldHdvcmsgY2xhc3MsIHdoaWxlIChrKW5mc2QgZ28KIGludG8gTkZTIG5ldHdvcmsgY2xhc3MuCiAKLUF0IHRoZSBzYW1lIHRpbWUgZmlyZWZveC9seW54IHdpbGwgc2hhcmUgYW4gYXBwcm9wcmlhdGUgQ1BVL01lbW9yeSBjbGFzcworQXQgdGhlIHNhbWUgdGltZSBGaXJlZm94L0x5bnggd2lsbCBzaGFyZSBhbiBhcHByb3ByaWF0ZSBDUFUvTWVtb3J5IGNsYXNzCiBkZXBlbmRpbmcgb24gd2hvIGxhdW5jaGVkIGl0IChwcm9mL3N0dWRlbnQpLgogCiBXaXRoIHRoZSBhYmlsaXR5IHRvIGNsYXNzaWZ5IHRhc2tzIGRpZmZlcmVudGx5IGZvciBkaWZmZXJlbnQgcmVzb3VyY2VzCkBAIC0zMjUsNyArMzI1LDcgQEAKIENyZWF0aW5nLCBtb2RpZnlpbmcsIHVzaW5nIHRoZSBjZ3JvdXBzIGNhbiBiZSBkb25lIHRocm91Z2ggdGhlIGNncm91cAogdmlydHVhbCBmaWxlc3lzdGVtLgogCi1UbyBtb3VudCBhIGNncm91cCBoaWVyYXJjaHkgd2lsbCBhbGwgYXZhaWxhYmxlIHN1YnN5c3RlbXMsIHR5cGU6CitUbyBtb3VudCBhIGNncm91cCBoaWVyYXJjaHkgd2l0aCBhbGwgYXZhaWxhYmxlIHN1YnN5c3RlbXMsIHR5cGU6CiAjIG1vdW50IC10IGNncm91cCB4eHggL2Rldi9jZ3JvdXAKIAogVGhlICJ4eHgiIGlzIG5vdCBpbnRlcnByZXRlZCBieSB0aGUgY2dyb3VwIGNvZGUsIGJ1dCB3aWxsIGFwcGVhciBpbgpAQCAtMzMzLDEyICszMzMsMjMgQEAKIAogVG8gbW91bnQgYSBjZ3JvdXAgaGllcmFyY2h5IHdpdGgganVzdCB0aGUgY3B1c2V0IGFuZCBudW10YXNrcwogc3Vic3lzdGVtcywgdHlwZToKLSMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCxudW10YXNrcyBoaWVyMSAvZGV2L2Nncm91cAorIyBtb3VudCAtdCBjZ3JvdXAgLW8gY3B1c2V0LG1lbW9yeSBoaWVyMSAvZGV2L2Nncm91cAogCiBUbyBjaGFuZ2UgdGhlIHNldCBvZiBzdWJzeXN0ZW1zIGJvdW5kIHRvIGEgbW91bnRlZCBoaWVyYXJjaHksIGp1c3QKIHJlbW91bnQgd2l0aCBkaWZmZXJlbnQgb3B0aW9uczoKKyMgbW91bnQgLW8gcmVtb3VudCxjcHVzZXQsbnMgaGllcjEgL2Rldi9jZ3JvdXAKIAotIyBtb3VudCAtbyByZW1vdW50LGNwdXNldCxucyAgL2Rldi9jZ3JvdXAKK05vdyBtZW1vcnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBoaWVyYXJjaHkgYW5kIG5zIGlzIGFkZGVkLgorCitOb3RlIHRoaXMgd2lsbCBhZGQgbnMgdG8gdGhlIGhpZXJhcmNoeSBidXQgd29uJ3QgcmVtb3ZlIG1lbW9yeSBvcgorY3B1c2V0LCBiZWNhdXNlIHRoZSBuZXcgb3B0aW9ucyBhcmUgYXBwZW5kZWQgdG8gdGhlIG9sZCBvbmVzOgorIyBtb3VudCAtbyByZW1vdW50LG5zIC9kZXYvY2dyb3VwCisKK1RvIFNwZWNpZnkgYSBoaWVyYXJjaHkncyByZWxlYXNlX2FnZW50OgorIyBtb3VudCAtdCBjZ3JvdXAgLW8gY3B1c2V0LHJlbGVhc2VfYWdlbnQ9Ii9zYmluL2NwdXNldF9yZWxlYXNlX2FnZW50IiBcCisgIHh4eCAvZGV2L2Nncm91cAorCitOb3RlIHRoYXQgc3BlY2lmeWluZyAncmVsZWFzZV9hZ2VudCcgbW9yZSB0aGFuIG9uY2Ugd2lsbCByZXR1cm4gZmFpbHVyZS4KIAogTm90ZSB0aGF0IGNoYW5naW5nIHRoZSBzZXQgb2Ygc3Vic3lzdGVtcyBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQKIHdoZW4gdGhlIGhpZXJhcmNoeSBjb25zaXN0cyBvZiBhIHNpbmdsZSAocm9vdCkgY2dyb3VwLiBTdXBwb3J0aW5nCkBAIC0zNDksNiArMzYwLDExIEBACiB0cmVlIG9mIHRoZSBjZ3JvdXBzIGluIHRoZSBzeXN0ZW0uIEZvciBpbnN0YW5jZSwgL2Rldi9jZ3JvdXAKIGlzIHRoZSBjZ3JvdXAgdGhhdCBob2xkcyB0aGUgd2hvbGUgc3lzdGVtLgogCitJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHJlbGVhc2VfYWdlbnQ6CisjIGVjaG8gIi9zYmluL25ld19yZWxlYXNlX2FnZW50IiA+IC9kZXYvY2dyb3VwL3JlbGVhc2VfYWdlbnQKKworSXQgY2FuIGFsc28gYmUgY2hhbmdlZCB2aWEgcmVtb3VudC4KKwogSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGNncm91cCB1bmRlciAvZGV2L2Nncm91cDoKICMgY2QgL2Rldi9jZ3JvdXAKICMgbWtkaXIgbXlfY2dyb3VwCkBAIC00NzYsMTEgKzQ5MiwxMyBAQAogbmV3bHktY3JlYXRlZCBjZ3JvdXAgaWYgYW4gZXJyb3Igb2NjdXJzIGFmdGVyIHRoaXMgc3Vic3lzdGVtJ3MKIGNyZWF0ZSgpIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgZm9yIHRoZSBuZXcgY2dyb3VwKS4KIAotdm9pZCBwcmVfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnApOworaW50IHByZV9kZXN0cm95KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCk7CiAKIENhbGxlZCBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiBlYWNoIHN1YnN5c3RlbS4gVGhpcyBtYXkKIGJlIHVzZWZ1bCBmb3Igc3Vic3lzdGVtcyB3aGljaCBoYXZlIHNvbWUgZXh0cmEgcmVmZXJlbmNlcyBldmVuIGlmCi10aGVyZSBhcmUgbm90IHRhc2tzIGluIHRoZSBjZ3JvdXAuCit0aGVyZSBhcmUgbm90IHRhc2tzIGluIHRoZSBjZ3JvdXAuIElmIHByZV9kZXN0cm95KCkgcmV0dXJucyBlcnJvciBjb2RlLAorcm1kaXIoKSB3aWxsIGZhaWwgd2l0aCBpdC4gRnJvbSB0aGlzIGJlaGF2aW9yLCBwcmVfZGVzdHJveSgpIGNhbiBiZQorY2FsbGVkIG11bHRpcGxlIHRpbWVzIGFnYWluc3QgYSBjZ3JvdXAuCiAKIGludCBjYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCwKIAkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQpAQCAtNTIxLDcgKzUzOSw3IEBACiB2b2lkIHBvc3RfY2xvbmUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQogKGNncm91cF9tdXRleCBoZWxkIGJ5IGNhbGxlcikKIAotQ2FsbGVkIGF0IHRoZSBlbmQgb2YgY2dyb3VwX2Nsb25lKCkgdG8gZG8gYW55IHBhcmFtYXRlcgorQ2FsbGVkIGF0IHRoZSBlbmQgb2YgY2dyb3VwX2Nsb25lKCkgdG8gZG8gYW55IHBhcmFtZXRlcgogaW5pdGlhbGl6YXRpb24gd2hpY2ggbWlnaHQgYmUgcmVxdWlyZWQgYmVmb3JlIGEgdGFzayBjb3VsZCBhdHRhY2guICBGb3IKIGV4YW1wbGUgaW4gY3B1c2V0cywgbm8gdGFzayBtYXkgYXR0YWNoIGJlZm9yZSAnY3B1cycgYW5kICdtZW1zJyBhcmUgc2V0CiB1cC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dAppbmRleCAwNjExZTk1Li5mOWNhMzg5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0CkBAIC0xMzEsNyArMTMxLDcgQEAKICAtIFRoZSBoaWVyYXJjaHkgb2YgY3B1c2V0cyBjYW4gYmUgbW91bnRlZCBhdCAvZGV2L2NwdXNldCwgZm9yCiAgICBicm93c2luZyBhbmQgbWFuaXB1bGF0aW9uIGZyb20gdXNlciBzcGFjZS4KICAtIEEgY3B1c2V0IG1heSBiZSBtYXJrZWQgZXhjbHVzaXZlLCB3aGljaCBlbnN1cmVzIHRoYXQgbm8gb3RoZXIKLSAgIGNwdXNldCAoZXhjZXB0IGRpcmVjdCBhbmNlc3RvcnMgYW5kIGRlc2NlbmRlbnRzKSBtYXkgY29udGFpbgorICAgY3B1c2V0IChleGNlcHQgZGlyZWN0IGFuY2VzdG9ycyBhbmQgZGVzY2VuZGFudHMpIG1heSBjb250YWluCiAgICBhbnkgb3ZlcmxhcHBpbmcgQ1BVcyBvciBNZW1vcnkgTm9kZXMuCiAgLSBZb3UgY2FuIGxpc3QgYWxsIHRoZSB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byBhbnkgY3B1c2V0LgogCkBAIC0yMjYsNyArMjI2LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIElmIGEgY3B1c2V0IGlzIGNwdSBvciBtZW0gZXhjbHVzaXZlLCBubyBvdGhlciBjcHVzZXQsIG90aGVyIHRoYW4KLWEgZGlyZWN0IGFuY2VzdG9yIG9yIGRlc2NlbmRlbnQsIG1heSBzaGFyZSBhbnkgb2YgdGhlIHNhbWUgQ1BVcyBvcgorYSBkaXJlY3QgYW5jZXN0b3Igb3IgZGVzY2VuZGFudCwgbWF5IHNoYXJlIGFueSBvZiB0aGUgc2FtZSBDUFVzIG9yCiBNZW1vcnkgTm9kZXMuCiAKIEEgY3B1c2V0IHRoYXQgaXMgbWVtX2V4Y2x1c2l2ZSAqb3IqIG1lbV9oYXJkd2FsbCBpcyAiaGFyZHdhbGxlZCIsCkBAIC00MjcsNyArNDI3LDcgQEAKIFdoZW4gZG9pbmcgdGhpcywgeW91IGRvbid0IHVzdWFsbHkgd2FudCB0byBsZWF2ZSBhbnkgdW5waW5uZWQgdGFza3MgaW4KIHRoZSB0b3AgY3B1c2V0IHRoYXQgbWlnaHQgdXNlIG5vbi10cml2aWFsIGFtb3VudHMgb2YgQ1BVLCBhcyBzdWNoIHRhc2tzCiBtYXkgYmUgYXJ0aWZpY2lhbGx5IGNvbnN0cmFpbmVkIHRvIHNvbWUgc3Vic2V0IG9mIENQVXMsIGRlcGVuZGluZyBvbgotdGhlIHBhcnRpY3VsYXJzIG9mIHRoaXMgZmxhZyBzZXR0aW5nIGluIGRlc2NlbmRlbnQgY3B1c2V0cy4gIEV2ZW4gaWYKK3RoZSBwYXJ0aWN1bGFycyBvZiB0aGlzIGZsYWcgc2V0dGluZyBpbiBkZXNjZW5kYW50IGNwdXNldHMuICBFdmVuIGlmCiBzdWNoIGEgdGFzayBjb3VsZCB1c2Ugc3BhcmUgQ1BVIGN5Y2xlcyBpbiBzb21lIG90aGVyIENQVXMsIHRoZSBrZXJuZWwKIHNjaGVkdWxlciBtaWdodCBub3QgY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGxvYWQgYmFsYW5jaW5nIHRoYXQKIHRhc2sgdG8gdGhhdCB1bmRlcnVzZWQgQ1BVLgpAQCAtNTMxLDkgKzUzMSw5IEBACiAKIE9mIGNvdXJzZSBpdCB0YWtlcyBzb21lIHNlYXJjaGluZyBjb3N0IHRvIGZpbmQgbW92YWJsZSB0YXNrcyBhbmQvb3IKIGlkbGUgQ1BVcywgdGhlIHNjaGVkdWxlciBtaWdodCBub3Qgc2VhcmNoIGFsbCBDUFVzIGluIHRoZSBkb21haW4KLWV2ZXJ5dGltZS4gIEluIGZhY3QsIGluIHNvbWUgYXJjaGl0ZWN0dXJlcywgdGhlIHNlYXJjaGluZyByYW5nZXMgb24KK2V2ZXJ5IHRpbWUuICBJbiBmYWN0LCBpbiBzb21lIGFyY2hpdGVjdHVyZXMsIHRoZSBzZWFyY2hpbmcgcmFuZ2VzIG9uCiBldmVudHMgYXJlIGxpbWl0ZWQgaW4gdGhlIHNhbWUgc29ja2V0IG9yIG5vZGUgd2hlcmUgdGhlIENQVSBsb2NhdGVzLAotd2hpbGUgdGhlIGxvYWQgYmFsYW5jZSBvbiB0aWNrIHNlYXJjaHMgYWxsLgord2hpbGUgdGhlIGxvYWQgYmFsYW5jZSBvbiB0aWNrIHNlYXJjaGVzIGFsbC4KIAogRm9yIGV4YW1wbGUsIGFzc3VtZSBDUFUgWiBpcyByZWxhdGl2ZWx5IGZhciBmcm9tIENQVSBYLiAgRXZlbiBpZiBDUFUgWgogaXMgaWRsZSB3aGlsZSBDUFUgWCBhbmQgdGhlIHNpYmxpbmdzIGFyZSBidXN5LCBzY2hlZHVsZXIgY2FuJ3QgbWlncmF0ZQpAQCAtNjAxLDcgKzYwMSw3IEBACiBvZiBNUE9MX0JJTkQgbm9kZXMgYXJlIHN0aWxsIGFsbG93ZWQgaW4gdGhlIG5ldyBjcHVzZXQuICBJZiB0aGUgdGFzawogd2FzIHVzaW5nIE1QT0xfQklORCBhbmQgbm93IG5vbmUgb2YgaXRzIE1QT0xfQklORCBub2RlcyBhcmUgYWxsb3dlZAogaW4gdGhlIG5ldyBjcHVzZXQsIHRoZW4gdGhlIHRhc2sgd2lsbCBiZSBlc3NlbnRpYWxseSB0cmVhdGVkIGFzIGlmIGl0Ci13YXMgTVBPTF9CSU5EIGJvdW5kIHRvIHRoZSBuZXcgY3B1c2V0IChldmVuIHRob3VnaCBpdHMgbnVtYSBwbGFjZW1lbnQsCit3YXMgTVBPTF9CSU5EIGJvdW5kIHRvIHRoZSBuZXcgY3B1c2V0IChldmVuIHRob3VnaCBpdHMgTlVNQSBwbGFjZW1lbnQsCiBhcyBxdWVyaWVkIGJ5IGdldF9tZW1wb2xpY3koKSwgZG9lc24ndCBjaGFuZ2UpLiAgSWYgYSB0YXNrIGlzIG1vdmVkCiBmcm9tIG9uZSBjcHVzZXQgdG8gYW5vdGhlciwgdGhlbiB0aGUga2VybmVsIHdpbGwgYWRqdXN0IHRoZSB0YXNrcwogbWVtb3J5IHBsYWNlbWVudCwgYXMgYWJvdmUsIHRoZSBuZXh0IHRpbWUgdGhhdCB0aGUga2VybmVsIGF0dGVtcHRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZGV2aWNlcy50eHQKaW5kZXggN2NjNmU2YS4uNTdjYTRjOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9kZXZpY2VzLnR4dApAQCAtNDIsNyArNDIsNyBAQAogbW92ZW1lbnQgYXMgcGVvcGxlIGdldCBzb21lIGV4cGVyaWVuY2Ugd2l0aCB0aGlzLiAgV2UgbWF5IGp1c3Qgd2FudAogdG8gcmVxdWlyZSBDQVBfU1lTX0FETUlOLCB3aGljaCBhdCBsZWFzdCBpcyBhIHNlcGFyYXRlIGJpdCBmcm9tCiBDQVBfTUtOT0QuICBXZSBtYXkgd2FudCB0byBqdXN0IHJlZnVzZSBtb3ZpbmcgdG8gYSBjZ3JvdXAgd2hpY2gKLWlzbid0IGEgZGVzY2VuZGVudCBvZiB0aGUgY3VycmVudCBvbmUuICBPciB3ZSBtYXkgd2FudCB0byB1c2UKK2lzbid0IGEgZGVzY2VuZGFudCBvZiB0aGUgY3VycmVudCBvbmUuICBPciB3ZSBtYXkgd2FudCB0byB1c2UKIENBUF9NQUNfQURNSU4sIHNpbmNlIHdlIHJlYWxseSBhcmUgdHJ5aW5nIHRvIGxvY2sgZG93biByb290LgogCiBDQVBfU1lTX0FETUlOIGlzIG5lZWRlZCB0byBtb2RpZnkgdGhlIHdoaXRlbGlzdCBvciBtb3ZlIGFub3RoZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1jZ190ZXN0LnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1jZ190ZXN0LnR4dAppbmRleCA1MjNhOWMxLi43MmRiODllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtY2dfdGVzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbWNnX3Rlc3QudHh0CkBAIC0xLDUgKzEsNSBAQAogTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXIoTWVtY2cpICBJbXBsZW1lbnRhdGlvbiBNZW1vLgotTGFzdCBVcGRhdGVkOiAyMDA5LzEvMTkKK0xhc3QgVXBkYXRlZDogMjAwOS8xLzIwCiBCYXNlIEtlcm5lbCBWZXJzaW9uOiBiYXNlZCBvbiAyLjYuMjktcmMyLgogCiBCZWNhdXNlIFZNIGlzIGdldHRpbmcgY29tcGxleCAob25lIG9mIHJlYXNvbnMgaXMgbWVtY2cuLi4pLCBtZW1jZydzIGJlaGF2aW9yCkBAIC0zNTYsNyArMzU2LDI1IEBACiAJKFNoZWxsLUIpCiAJIyBtb3ZlIGFsbCB0YXNrcyBpbiAvY2dyb3VwL3Rlc3QgdG8gL2Nncm91cAogCSMgL3NiaW4vc3dhcG9mZiAtYQotCSMgcm1kaXIgL3Rlc3QvY2dyb3VwCisJIyBybWRpciAvY2dyb3VwL3Rlc3QKIAkjIGtpbGwgbWFsbG9jIHRhc2suCiAKIAlPZiBjb3Vyc2UsIHRtcGZzIHYucy4gc3dhcG9mZiB0ZXN0IHNob3VsZCBiZSB0ZXN0ZWQsIHRvby4KKworIDkuOCBPT00tS2lsbGVyCisJT3V0LW9mLW1lbW9yeSBjYXVzZWQgYnkgbWVtY2cncyBsaW1pdCB3aWxsIGtpbGwgdGFza3MgdW5kZXIKKwl0aGUgbWVtY2cuIFdoZW4gaGllcmFyY2h5IGlzIHVzZWQsIGEgdGFzayB1bmRlciBoaWVyYXJjaHkKKwl3aWxsIGJlIGtpbGxlZCBieSB0aGUga2VybmVsLgorCUluIHRoaXMgY2FzZSwgcGFuaWNfb25fb29tIHNob3VsZG4ndCBiZSBpbnZva2VkIGFuZCB0YXNrcworCWluIG90aGVyIGdyb3VwcyBzaG91bGRuJ3QgYmUga2lsbGVkLgorCisJSXQncyBub3QgZGlmZmljdWx0IHRvIGNhdXNlIE9PTSB1bmRlciBtZW1jZyBhcyBmb2xsb3dpbmcuCisJQ2FzZSBBKSB3aGVuIHlvdSBjYW4gc3dhcG9mZgorCSNzd2Fwb2ZmIC1hCisJI2VjaG8gNTBNID4gL21lbW9yeS5saW1pdF9pbl9ieXRlcworCXJ1biA1MU0gb2YgbWFsbG9jCisKKwlDYXNlIEIpIHdoZW4geW91IHVzZSBtZW0rc3dhcCBsaW1pdGF0aW9uLgorCSNlY2hvIDUwTSA+IG1lbW9yeS5saW1pdF9pbl9ieXRlcworCSNlY2hvIDUwTSA+IG1lbW9yeS5tZW1zdy5saW1pdF9pbl9ieXRlcworCXJ1biA1MU0gb2YgbWFsbG9jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CmluZGV4IGUxNTAxOTYuLmE5OGE3ZmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0CkBAIC0zMDIsNyArMzAyLDcgQEAKIAl1bmV2aWN0YWJsZQkJLSAjIG9mIHBhZ2VzIGNhbm5vdCBiZSByZWNsYWltZWQuKG1sb2NrZWQgZXRjKQogCiAJQmVsb3cgaXMgZGVwZW5kIG9uIENPTkZJR19ERUJVR19WTS4KLQlpbmFjdGl2ZV9yYXRpbwkJLSBWTSBpbmVybmFsIHBhcmFtZXRlci4gKHNlZSBtbS9wYWdlX2FsbG9jLmMpCisJaW5hY3RpdmVfcmF0aW8JCS0gVk0gaW50ZXJuYWwgcGFyYW1ldGVyLiAoc2VlIG1tL3BhZ2VfYWxsb2MuYykKIAlyZWNlbnRfcm90YXRlZF9hbm9uCS0gVk0gaW50ZXJuYWwgcGFyYW1ldGVyLiAoc2VlIG1tL3Ztc2Nhbi5jKQogCXJlY2VudF9yb3RhdGVkX2ZpbGUJLSBWTSBpbnRlcm5hbCBwYXJhbWV0ZXIuIChzZWUgbW0vdm1zY2FuLmMpCiAJcmVjZW50X3NjYW5uZWRfYW5vbiAJLSBWTSBpbnRlcm5hbCBwYXJhbWV0ZXIuIChzZWUgbW0vdm1zY2FuLmMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAppbmRleCA2MjI1NGQ0Li4zMjdkZTE2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKQEAgLTEsNyArMSw3IEBACiAKIAkJICAgIExJTlVYIEFMTE9DQVRFRCBERVZJQ0VTICgyLjYrIHZlcnNpb24pCiAKLQkgICAgIE1haW50YWluZWQgYnkgVG9yYmVuIE1hdGhpYXNlbiA8ZGV2aWNlQGxhbmFuYS5vcmc+CisJICAgICBNYWludGFpbmVkIGJ5IEFsYW4gQ294IDxkZXZpY2VAbGFuYW5hLm9yZz4KIAogCQkgICAgICBMYXN0IHJldmlzZWQ6IDI5IE5vdmVtYmVyIDIwMDYKIApAQCAtNjcsNiArNjcsMTEgQEAKIGluICJiYXRjaCBtb2RlIiwgc28gdGhlcmUgaXMgbGlrZWx5IGFkZGl0aW9uYWwgcmVnaXN0cmF0aW9ucyB0aGF0CiBoYXZlbid0IGJlZW4gbGlzdGVkIHlldC4KIAorRm91cnRoLCByZW1lbWJlciB0aGF0IExpbnV4IG5vdyBoYXMgZXh0ZW5zaXZlIHN1cHBvcnQgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbgorb2YgZGV2aWNlIG51bWJlcmluZyBhbmQgY2FuIHVzZSBzeXNmcyBhbmQgdWRldiB0byBoYW5kbGUgdGhlIG5hbWluZyBuZWVkcy4KK1RoZXJlIGFyZSBzdGlsbCBzb21lIGV4Y2VwdGlvbnMgaW4gdGhlIHNlcmlhbCBhbmQgYm9vdCBkZXZpY2UgYXJlYS4gQmVmb3JlCithc2tpbmcgZm9yIGEgZGV2aWNlIG51bWJlciBtYWtlIHN1cmUgeW91IGFjdHVhbGx5IG5lZWQgb25lLgorCiBGaW5hbGx5LCBzb21ldGltZXMgSSBoYXZlIHRvIHBsYXkgIm5hbWVzcGFjZSBwb2xpY2UuIiAgUGxlYXNlIGRvbid0IGJlCiBvZmZlbmRlZC4gIEkgb2Z0ZW4gZ2V0IHN1Ym1pc3Npb25zIGZvciAvZGV2IG5hbWVzIHRoYXQgd291bGQgYmUgYm91bmQKIHRvIGNhdXNlIGNvbmZsaWN0cyBkb3duIHRoZSByb2FkLiAgSSBhbSB0cnlpbmcgdG8gYXZvaWQgZ2V0dGluZyBpbiBhCkBAIC0xMDEsNyArMTA2LDcgQEAKIAkJICAwID0gL2Rldi9yYW0wCQlGaXJzdCBSQU0gZGlzawogCQkgIDEgPSAvZGV2L3JhbTEJCVNlY29uZCBSQU0gZGlzawogCQkgICAgLi4uCi0JCTI1MCA9IC9kZXYvaW5pdHJkCUluaXRpYWwgUkFNIGRpc2sgezIuNn0KKwkJMjUwID0gL2Rldi9pbml0cmQJSW5pdGlhbCBSQU0gZGlzawogCiAJCU9sZGVyIGtlcm5lbHMgaGFkIC9kZXYvcmFtZGlzayAoMSwgMSkgaGVyZS4KIAkJL2Rldi9pbml0cmQgcmVmZXJzIHRvIGEgUkFNIGRpc2sgd2hpY2ggd2FzIHByZWxvYWRlZApAQCAtMzQwLDcgKzM0NSw3IEBACiAJCSAxNCA9IC9kZXYvdG91Y2hzY3JlZW4vdWNiMXgwMCAgVUNCIDF4MDAgdG91Y2hzY3JlZW4KIAkJIDE1ID0gL2Rldi90b3VjaHNjcmVlbi9tazcxMglNSzcxMiB0b3VjaHNjcmVlbgogCQkxMjggPSAvZGV2L2JlZXAJCUZhbmN5IGJlZXAgZGV2aWNlCi0JCTEyOSA9IC9kZXYvbW9kcmVxCUtlcm5lbCBtb2R1bGUgbG9hZCByZXF1ZXN0IHsyLjZ9CisJCTEyOSA9CiAJCTEzMCA9IC9kZXYvd2F0Y2hkb2cJV2F0Y2hkb2cgdGltZXIgcG9ydAogCQkxMzEgPSAvZGV2L3RlbXBlcmF0dXJlCU1hY2hpbmUgaW50ZXJuYWwgdGVtcGVyYXR1cmUKIAkJMTMyID0gL2Rldi9od3RyYXAJSGFyZHdhcmUgZmF1bHQgdHJhcApAQCAtMzUwLDEwICszNTUsMTAgQEAKIAkJMTM5ID0gL2Rldi9vcGVucHJvbQlTUEFSQyBPcGVuQm9vdCBQUk9NCiAJCTE0MCA9IC9kZXYvcmVsYXk4CUJlcmtzaGlyZSBQcm9kdWN0cyBPY3RhbCByZWxheSBjYXJkCiAJCTE0MSA9IC9kZXYvcmVsYXkxNglCZXJrc2hpcmUgUHJvZHVjdHMgSVNPLTE2IHJlbGF5IGNhcmQKLQkJMTQyID0gL2Rldi9tc3IJCXg4NiBtb2RlbC1zcGVjaWZpYyByZWdpc3RlcnMgezIuNn0KKwkJMTQyID0KIAkJMTQzID0gL2Rldi9wY2ljb25mCVBDSSBjb25maWd1cmF0aW9uIHNwYWNlCiAJCTE0NCA9IC9kZXYvbnZyYW0JTm9uLXZvbGF0aWxlIGNvbmZpZ3VyYXRpb24gUkFNCi0JCTE0NSA9IC9kZXYvaGZtb2RlbQlTb3VuZGNhcmQgc2hvcnR3YXZlIG1vZGVtIGNvbnRyb2wgezIuNn0KKwkJMTQ1ID0gL2Rldi9oZm1vZGVtCVNvdW5kY2FyZCBzaG9ydHdhdmUgbW9kZW0gY29udHJvbAogCQkxNDYgPSAvZGV2L2dyYXBoaWNzCUxpbnV4L1NHSSBncmFwaGljcyBkZXZpY2UKIAkJMTQ3ID0gL2Rldi9vcGVuZ2wJTGludXgvU0dJIE9wZW5HTCBwaXBlCiAJCTE0OCA9IC9kZXYvZ2Z4CQlMaW51eC9TR0kgZ3JhcGhpY3MgZWZmZWN0cyBkZXZpY2UKQEAgLTQzNSw2ICs0NDAsOSBAQAogCQkyMjggPSAvZGV2L2hwZXQJCUhQRVQgZHJpdmVyCiAJCTIyOSA9IC9kZXYvZnVzZQkJRnVzZSAodmlydHVhbCBmaWxlc3lzdGVtIGluIHVzZXItc3BhY2UpCiAJCTIzMCA9IC9kZXYvbWlkaXNoYXJlCU1pZGlTaGFyZSBkcml2ZXIKKwkJMjMxID0gL2Rldi9zbmFwc2hvdAlTeXN0ZW0gbWVtb3J5IHNuYXBzaG90IGRldmljZQorCQkyMzIgPSAvZGV2L2t2bQkJS2VybmVsLWJhc2VkIHZpcnR1YWwgbWFjaGluZSAoaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucykKKwkJMjMzID0gL2Rldi9rbXZpZXcJVmlldy1PUyBBIHByb2Nlc3Mgd2l0aCBhIHZpZXcKIAkJMjQwLTI1NAkJCVJlc2VydmVkIGZvciBsb2NhbCB1c2UKIAkJMjU1CQkJUmVzZXJ2ZWQgZm9yIE1JU0NfRFlOQU1JQ19NSU5PUgogCkBAIC00NjYsMTAgKzQ3NCw3IEBACiAJCVRoZSBkZXZpY2UgbmFtZXMgc3BlY2lmaWVkIGFyZSBwcm9wb3NlZCAtLSBpZiB0aGVyZQogCQlhcmUgInN0YW5kYXJkIiBuYW1lcyBmb3IgdGhlc2UgZGV2aWNlcywgcGxlYXNlIGxldCBtZSBrbm93LgogCi0gMTIgYmxvY2sJTVNDREVYIENELVJPTSBjYWxsYmFjayBzdXBwb3J0IHsyLjZ9Ci0JCSAgMCA9IC9kZXYvZG9zX2NkMAlGaXJzdCBNU0NERVggQ0QtUk9NCi0JCSAgMSA9IC9kZXYvZG9zX2NkMQlTZWNvbmQgTVNDREVYIENELVJPTQotCQkgICAgLi4uCisgMTIgYmxvY2sKIAogIDEzIGNoYXIJSW5wdXQgY29yZQogCQkgIDAgPSAvZGV2L2lucHV0L2pzMAlGaXJzdCBqb3lzdGljawpAQCAtNDk4LDcgKzUwMyw3IEBACiAJCSAgMiA9IC9kZXYvbWlkaTAwCUZpcnN0IE1JREkgcG9ydAogCQkgIDMgPSAvZGV2L2RzcAkJRGlnaXRhbCBhdWRpbwogCQkgIDQgPSAvZGV2L2F1ZGlvCVN1bi1jb21wYXRpYmxlIGRpZ2l0YWwgYXVkaW8KLQkJICA2ID0gL2Rldi9zbmRzdGF0CVNvdW5kIGNhcmQgc3RhdHVzIGluZm9ybWF0aW9uIHsyLjZ9CisJCSAgNiA9CiAJCSAgNyA9IC9kZXYvYXVkaW9jdGwJU1BBUkMgYXVkaW8gY29udHJvbCBkZXZpY2UKIAkJICA4ID0gL2Rldi9zZXF1ZW5jZXIyCVNlcXVlbmNlciAtLSBhbHRlcm5hdGUgZGV2aWNlCiAJCSAxNiA9IC9kZXYvbWl4ZXIxCVNlY29uZCBzb3VuZGNhcmQgbWl4ZXIgY29udHJvbApAQCAtNTEwLDE0ICs1MTUsNyBAQAogCQkgMzQgPSAvZGV2L21pZGkwMglUaGlyZCBNSURJIHBvcnQKIAkJIDUwID0gL2Rldi9taWRpMDMJRm91cnRoIE1JREkgcG9ydAogCi0gMTQgYmxvY2sJQklPUyBoYXJkZHJpdmUgY2FsbGJhY2sgc3VwcG9ydCB7Mi42fQotCQkgIDAgPSAvZGV2L2Rvc19oZGEJRmlyc3QgQklPUyBoYXJkZHJpdmUgd2hvbGUgZGlzawotCQkgNjQgPSAvZGV2L2Rvc19oZGIJU2Vjb25kIEJJT1MgaGFyZGRyaXZlIHdob2xlIGRpc2sKLQkJMTI4ID0gL2Rldi9kb3NfaGRjCVRoaXJkIEJJT1MgaGFyZGRyaXZlIHdob2xlIGRpc2sKLQkJMTkyID0gL2Rldi9kb3NfaGRkCUZvdXJ0aCBCSU9TIGhhcmRkcml2ZSB3aG9sZSBkaXNrCi0KLQkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgSURFIGRpc2tzCi0JCShzZWUgbWFqb3IgbnVtYmVyIDMpLgorIDE0IGJsb2NrCiAKICAxNSBjaGFyCUpveXN0aWNrCiAJCSAgMCA9IC9kZXYvanMwCQlGaXJzdCBhbmFsb2cgam95c3RpY2sKQEAgLTUzNSwxNCArNTMzLDE0IEBACiAgMTYgYmxvY2sJR29sZFN0YXIgQ0QtUk9NCiAJCSAgMCA9IC9kZXYvZ3NjZAkJR29sZFN0YXIgQ0QtUk9NCiAKLSAxNyBjaGFyCUNoYXNlIHNlcmlhbCBjYXJkCisgMTcgY2hhcglPQlNPTEVURSAod2FzIENoYXNlIHNlcmlhbCBjYXJkKQogCQkgIDAgPSAvZGV2L3R0eUgwCUZpcnN0IENoYXNlIHBvcnQKIAkJICAxID0gL2Rldi90dHlIMQlTZWNvbmQgQ2hhc2UgcG9ydAogCQkgICAgLi4uCiAgMTcgYmxvY2sJT3B0aWNzIFN0b3JhZ2UgQ0QtUk9NCiAJCSAgMCA9IC9kZXYvb3B0Y2QJT3B0aWNzIFN0b3JhZ2UgQ0QtUk9NCiAKLSAxOCBjaGFyCUNoYXNlIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKyAxOCBjaGFyCU9CU09MRVRFICh3YXMgQ2hhc2Ugc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcykKIAkJICAwID0gL2Rldi9jdWgwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5SDAKIAkJICAxID0gL2Rldi9jdWgxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5SDEKIAkJICAgIC4uLgpAQCAtNjQ0LDggKzY0Miw3IEBACiAJCSAgMiA9IC9kZXYvc2JwY2QyCVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAwIHVuaXQgMgogCQkgIDMgPSAvZGV2L3NicGNkMwlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMCB1bml0IDMKIAotIDI2IGNoYXIJUXVhbnRhIFdpblZpc2lvbiBmcmFtZSBncmFiYmVyIHsyLjZ9Ci0JCSAgMCA9IC9kZXYvd3Zpc2ZncmFiCVF1YW50YSBXaW5WaXNpb24gZnJhbWUgZ3JhYmJlcgorIDI2IGNoYXIKIAogIDI2IGJsb2NrCVNlY29uZCBNYXRzdXNoaXRhIChQYW5hc29uaWMvU291bmRCbGFzdGVyKSBDRC1ST00KIAkJICAwID0gL2Rldi9zYnBjZDQJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDEgdW5pdCAwCkBAIC04NzIsNyArODY5LDcgQEAKIAkJYW5kICJ1c2VyIGxldmVsIHBhY2tldCBJL08uIiAgVGhpcyBib2FyZCBpcyBhbHNvCiAJCWFjY2Vzc2libGUgYXMgYSBzdGFuZGFyZCBuZXR3b3JraW5nICJldGgiIGRldmljZS4KIAotIDM4IGJsb2NrCVJlc2VydmVkIGZvciBMaW51eC9BUCsKKyAzOCBibG9jawlPQlNPTEVURSAod2FzIExpbnV4L0FQKykKIAogIDM5IGNoYXIJTUwtMTZQIGV4cGVyaW1lbnRhbCBJL08gYm9hcmQKIAkJICAwID0gL2Rldi9tbDE2cGEtYTAJRmlyc3QgY2FyZCwgZmlyc3QgYW5hbG9nIGNoYW5uZWwKQEAgLTg5MiwyOSArODg5LDE2IEBACiAJCSA1MCA9IC9kZXYvbWwxNnBiLWMxCVNlY29uZCBjYXJkLCBzZWNvbmQgY291bnRlci90aW1lcgogCQkgNTEgPSAvZGV2L21sMTZwYi1jMglTZWNvbmQgY2FyZCwgdGhpcmQgY291bnRlci90aW1lcgogCQkgICAgICAuLi4KLSAzOSBibG9jawlSZXNlcnZlZCBmb3IgTGludXgvQVArCisgMzkgYmxvY2sKIAotIDQwIGNoYXIJTWF0cm94IE1ldGVvciBmcmFtZSBncmFiYmVyIHsyLjZ9Ci0JCSAgMCA9IC9kZXYvbW1ldGZncmFiCU1hdHJveCBNZXRlb3IgZnJhbWUgZ3JhYmJlcgorIDQwIGNoYXIKIAotIDQwIGJsb2NrCVN5cXVlc3QgRVoxMzUgcGFyYWxsZWwgcG9ydCByZW1vdmFibGUgZHJpdmUKLQkJICAwID0gL2Rldi9lemEJCVBhcmFsbGVsIEVaMTM1IGRyaXZlLCB3aG9sZSBkaXNrCi0KLQkJVGhpcyBkZXZpY2UgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhCi0JCWZ1dHVyZSB2ZXJzaW9uIG9mIExpbnV4LiAgSXQgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aAotCQl0aGUgcGFyYWxsZWwgcG9ydCBJREUgZGlzayBkcml2ZXIgYXQgbWFqb3IgbnVtYmVyIDQ1LgotCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBJREUgZGlza3MKLQkJKHNlZSBtYWpvciBudW1iZXIgMykuCisgNDAgYmxvY2sKIAogIDQxIGNoYXIJWWV0IEFub3RoZXIgTWljcm8gTW9uaXRvcgogCQkgIDAgPSAvZGV2L3lhbW0JCVlldCBBbm90aGVyIE1pY3JvIE1vbml0b3IKIAotIDQxIGJsb2NrCU1pY3JvU29sdXRpb25zIEJhY2tQYWNrIHBhcmFsbGVsIHBvcnQgQ0QtUk9NCi0JCSAgMCA9IC9kZXYvYnBjZAkJQmFja1BhY2sgQ0QtUk9NCi0KLQkJVGhpcyBkZXZpY2UgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhCi0JCWZ1dHVyZSB2ZXJzaW9uIG9mIExpbnV4LiAgSXQgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aAotCQl0aGUgcGFyYWxsZWwgcG9ydCBBVEFQSSBDRC1ST00gZHJpdmVyIGF0IG1ham9yIG51bWJlciA0Ni4KKyA0MSBibG9jawogCiAgNDIgY2hhcglEZW1vL3NhbXBsZSB1c2UKIApAQCAtMTY4MSwxMyArMTY2NSw3IEBACiAJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgogCQlwYXJ0aXRpb25zIGlzIDE1LgogCi0gOTMgY2hhcglJQk0gU21hcnQgQ2FwdHVyZSBDYXJkIGZyYW1lIGdyYWJiZXIgezIuNn0KLQkJICAwID0gL2Rldi9pc2NjMAlGaXJzdCBTbWFydCBDYXB0dXJlIENhcmQKLQkJICAxID0gL2Rldi9pc2NjMQlTZWNvbmQgU21hcnQgQ2FwdHVyZSBDYXJkCi0JCSAgICAuLi4KLQkJMTI4ID0gL2Rldi9pc2NjY3RsMAlGaXJzdCBTbWFydCBDYXB0dXJlIENhcmQgY29udHJvbAotCQkxMjkgPSAvZGV2L2lzY2NjdGwxCVNlY29uZCBTbWFydCBDYXB0dXJlIENhcmQgY29udHJvbAotCQkgICAgLi4uCisgOTMgY2hhcgogCiAgOTMgYmxvY2sJTkFORCBGbGFzaCBUcmFuc2xhdGlvbiBMYXllciBmaWxlc3lzdGVtCiAJCSAgMCA9IC9kZXYvbmZ0bGEJRmlyc3QgTkZUTCBsYXllcgpAQCAtMTY5NSwxMCArMTY3Myw3IEBACiAJCSAgICAuLi4KIAkJMjQwID0gL2Rldi9uZnRscAkxNnRoIE5URkwgbGF5ZXIKIAotIDk0IGNoYXIJbWlyb1ZJREVPIERDMTAvMzAgY2FwdHVyZS9wbGF5YmFjayBkZXZpY2UgezIuNn0KLQkJICAwID0gL2Rldi9kY3h4MAlGaXJzdCBjYXB0dXJlIGNhcmQKLQkJICAxID0gL2Rldi9kY3h4MQlTZWNvbmQgY2FwdHVyZSBjYXJkCi0JCSAgICAuLi4KKyA5NCBjaGFyCiAKICA5NCBibG9jawlJQk0gUy8zOTAgREFTRCBibG9jayBzdG9yYWdlCiAgICAgCQkgIDAgPSAvZGV2L2Rhc2RhIEZpcnN0IERBU0QgZGV2aWNlLCBtYWpvcgpAQCAtMTc5MSwxMSArMTc2Niw3IEBACiAJCSAgICAuLi4KIAkJIDE1ID0gL2Rldi9hbWlyYWlkL2FyP3AxNSAxNXRoIHBhcnRpdGlvbgogCi0xMDIgY2hhcglQaGlsaXBzIFNBQTUyNDkgVGVsZXRleHQgc2lnbmFsIGRlY29kZXIgezIuNn0KLQkJICAwID0gL2Rldi90bGswCQlGaXJzdCBUZWxldGV4dCBkZWNvZGVyCi0JCSAgMSA9IC9kZXYvdGxrMQkJU2Vjb25kIFRlbGV0ZXh0IGRlY29kZXIKLQkJICAyID0gL2Rldi90bGsyCQlUaGlyZCBUZWxldGV4dCBkZWNvZGVyCi0JCSAgMyA9IC9kZXYvdGxrMwkJRm91cnRoIFRlbGV0ZXh0IGRlY29kZXIKKzEwMiBjaGFyCiAKIDEwMiBibG9jawlDb21wcmVzc2VkIGJsb2NrIGRldmljZQogCQkgIDAgPSAvZGV2L2NiZC9hCUZpcnN0IGNvbXByZXNzZWQgYmxvY2sgZGV2aWNlLCB3aG9sZSBkZXZpY2UKQEAgLTE5MTYsMTAgKzE4ODcsNyBAQAogCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgogCQlwYXJ0aXRpb25zIGlzIDE1LgogCi0xMTEgY2hhcglQaGlsaXBzIFNBQTcxNDYtYmFzZWQgYXVkaW8vdmlkZW8gY2FyZCB7Mi42fQotCQkgIDAgPSAvZGV2L2F2MAkJRmlyc3QgQS9WIGNhcmQKLQkJICAxID0gL2Rldi9hdjEJCVNlY29uZCBBL1YgY2FyZAotCQkgICAgLi4uCisxMTEgY2hhcgogCiAxMTEgYmxvY2sJQ29tcGFxIE5leHQgR2VuZXJhdGlvbiBEcml2ZSBBcnJheSwgZWlnaHRoIGNvbnRyb2xsZXIKIAkJICAwID0gL2Rldi9jY2lzcy9jN2QwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKQEAgLTIwNzksOCArMjA0Nyw4IEBACiAJCSAgICAuLi4KIAogMTE5IGNoYXIJVk13YXJlIHZpcnR1YWwgbmV0d29yayBjb250cm9sCi0JCSAgMCA9IC9kZXYvdm1uZXQwCTFzdCB2aXJ0dWFsIG5ldHdvcmsKLQkJICAxID0gL2Rldi92bW5ldDEJMm5kIHZpcnR1YWwgbmV0d29yaworCQkgIDAgPSAvZGV2L3ZuZXQwCTFzdCB2aXJ0dWFsIG5ldHdvcmsKKwkJICAxID0gL2Rldi92bmV0MQkybmQgdmlydHVhbCBuZXR3b3JrCiAJCSAgICAuLi4KIAogMTIwLTEyNyBjaGFyCUxPQ0FML0VYUEVSSU1FTlRBTCBVU0UKQEAgLTI0NTAsNyArMjQxOCw3IEBACiAJCSAgMiA9IC9kZXYvcmF3L3JhdzIJU2Vjb25kIHJhdyBJL08gZGV2aWNlCiAJCSAgICAuLi4KIAotMTYzIGNoYXIJVU5BU1NJR05FRCAod2FzIFJhZGlvIFRlY2ggQklNLVhYWC1SUzIzMiByYWRpbyBtb2RlbSAtIHNlZSA1MSkKKzE2MyBjaGFyCiAKIDE2NCBjaGFyCUNoYXNlIFJlc2VhcmNoIEFUL1BDSS1GYXN0IHNlcmlhbCBjYXJkCiAJCSAgMCA9IC9kZXYvdHR5Q0gwCUFUL1BDSS1GYXN0IGJvYXJkIDAsIHBvcnQgMApAQCAtMjU0Miw2ICsyNTEwLDEyIEBACiAJCSAgMSA9IC9kZXYvY2xhbnZpMQlTZWNvbmQgY0xBTiBhZGFwdGVyCiAJCSAgICAuLi4KIAorMTc5IGJsb2NrICAgICAgIE1NQyBibG9jayBkZXZpY2VzCisJCSAgMCA9IC9kZXYvbW1jYmxrMCAgICAgIEZpcnN0IFNEL01NQyBjYXJkCisJCSAgMSA9IC9kZXYvbW1jYmxrMHAxICAgIEZpcnN0IHBhcnRpdGlvbiBvbiBmaXJzdCBNTUMgY2FyZAorCQkgIDggPSAvZGV2L21tY2JsazEgICAgICBTZWNvbmQgU0QvTU1DIGNhcmQKKwkJICAgIC4uLgorCiAxNzkgY2hhcglDQ3ViZSBEVlhDaGlwLWJhc2VkIFBDSSBwcm9kdWN0cwogCQkgIDAgPSAvZGV2L2R2eGlycTAJRmlyc3QgRFZYIGRldmljZQogCQkgIDEgPSAvZGV2L2R2eGlycTEJU2Vjb25kIERWWCBkZXZpY2UKQEAgLTI1NjAsNiArMjUzNCw5IEBACiAJCSA5NiA9IC9kZXYvdXNiL2hpZGRldjAJMXN0IFVTQiBISUQgZGV2aWNlCiAJCSAgICAuLi4KIAkJMTExID0gL2Rldi91c2IvaGlkZGV2MTUJMTZ0aCBVU0IgSElEIGRldmljZQorCQkxMTIgPSAvZGV2L3VzYi9hdWVyMAkxc3QgYXVlcnN3YWxkIElTRE4gZGV2aWNlCisJCSAgICAuLi4KKwkJMTI3ID0gL2Rldi91c2IvYXVlcjE1CTE2dGggYXVlcnN3YWxkIElTRE4gZGV2aWNlCiAJCTEyOCA9IC9kZXYvdXNiL2JybHZncjAJRmlyc3QgQnJhaWxsZSBWb3lhZ2VyIGRldmljZQogCQkgICAgLi4uCiAJCTEzMSA9IC9kZXYvdXNiL2JybHZncjMJRm91cnRoIEJyYWlsbGUgVm95YWdlciBkZXZpY2UKQEAgLTI4MTAsNiArMjc4NywxNiBAQAogCQkgICAgLi4uCiAJCSAxOTAgPSAvZGV2L3R0eVVMMwkJWGlsaW54IHVhcnRsaXRlIC0gcG9ydCAzCiAJCSAxOTEgPSAvZGV2L3h2YzAJCVhlbiB2aXJ0dWFsIGNvbnNvbGUgLSBwb3J0IDAKKwkJIDE5MiA9IC9kZXYvdHR5UFowCQlwbWFjX3ppbG9nIC0gcG9ydCAwCisJCSAgICAuLi4KKwkJIDE5NSA9IC9kZXYvdHR5UFozCQlwbWFjX3ppbG9nIC0gcG9ydCAzCisJCSAxOTYgPSAvZGV2L3R0eVRYMAkJVFgzOS80OSBzZXJpYWwgcG9ydCAwCisJCSAgICAuLi4KKwkJIDIwNCA9IC9kZXYvdHR5VFg3CQlUWDM5LzQ5IHNlcmlhbCBwb3J0IDcKKwkJIDIwNSA9IC9kZXYvdHR5U0MwCQlTQzI2eHggc2VyaWFsIHBvcnQgMAorCQkgMjA2ID0gL2Rldi90dHlTQzEJCVNDMjZ4eCBzZXJpYWwgcG9ydCAxCisJCSAyMDcgPSAvZGV2L3R0eVNDMgkJU0MyNnh4IHNlcmlhbCBwb3J0IDIKKwkJIDIwOCA9IC9kZXYvdHR5U0MzCQlTQzI2eHggc2VyaWFsIHBvcnQgMwogCiAyMDUgY2hhcglMb3ctZGVuc2l0eSBzZXJpYWwgcG9ydHMgKGFsdGVybmF0ZSBkZXZpY2UpCiAJCSAgMCA9IC9kZXYvY3VsdTAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlMVTAKQEAgLTMxNDUsNiArMzEzMiwxNCBAQAogCQkgIDEgPSAvZGV2L2Jsb2Nrcm9tMQlTZWNvbmQgUk9NIGNhcmQncyB0cmFuc2xhdGlvbiBsYXllciBpbnRlcmZhY2UKIAkJICAuLi4KIAorMjU5IGJsb2NrCUJsb2NrIEV4dGVuZGVkIE1ham9yCisJCSAgVXNlZCBkeW5hbWljYWxseSB0byBob2xkIGFkZGl0aW9uYWwgcGFydGl0aW9uIG1pbm9yCisJCSAgbnVtYmVycyBhbmQgYWxsb3cgbGFyZ2UgbnVtYmVycyBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UKKworMjU5IGNoYXIJRlBHQSBjb25maWd1cmF0aW9uIGludGVyZmFjZXMKKwkJICAwID0gL2Rldi9pY2FwMAlGaXJzdCBYaWxpbnggaW50ZXJuYWwgY29uZmlndXJhdGlvbgorCQkgIDEgPSAvZGV2L2ljYXAxCVNlY29uZCBYaWxpbnggaW50ZXJuYWwgY29uZmlndXJhdGlvbgorCiAyNjAgY2hhcglPU0QgKE9iamVjdC1iYXNlZC1kZXZpY2UpIFNDU0kgRGV2aWNlCiAJCSAgMCA9IC9kZXYvb3NkMAkJRmlyc3QgT1NEIERldmljZQogCQkgIDEgPSAvZGV2L29zZDEJCVNlY29uZCBPU0QgRGV2aWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggZDBmMzU0Ni4uMzkyNDZmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMjU1LDYgKzI1NSwxNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJR1BJTyBhdXRvcmVxdWVzdCBvbiBncGlvX2RpcmVjdGlvbl97aW5wdXQsb3V0cHV0fSgpIGluIGdwaW9saWIKK1doZW46CUZlYnJ1YXJ5IDIwMTAKK1doeToJQWxsIGNhbGxlcnMgc2hvdWxkIHVzZSBleHBsaWNpdCBncGlvX3JlcXVlc3QoKS9ncGlvX2ZyZWUoKS4KKwlUaGUgYXV0b3JlcXVlc3QgbWVjaGFuaXNtIGluIGdwaW9saWIgd2FzIHByb3ZpZGVkIG1vc3RseSBhcyBhCisJbWlncmF0aW9uIGFpZCBmb3IgbGVnYWN5IEdQSU8gaW50ZXJmYWNlcyAoZm9yIFNPQyBiYXNlZCBHUElPcykuCisJVGhvc2UgdXNlcnMgaGF2ZSBub3cgbGFyZ2VseSBtaWdyYXRlZC4gIFBsYXRmb3JtcyBpbXBsZW1lbnRpbmcKKwl0aGUgR1BJTyBpbnRlcmZhY2VzIHdpdGhvdXQgdXNpbmcgZ3Bpb2xpYiB3aWxsIHNlZSBubyBjaGFuZ2VzLgorV2hvOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OgliNDMgc3VwcG9ydCBmb3IgZmlybXdhcmUgcmV2aXNpb24gPCA0MTAKIFdoZW46CVRoZSBzY2hlZHVsZSB3YXMgSnVseSAyMDA4LCBidXQgaXQgd2FzIGRlY2lkZWQgdGhhdCB3ZSBhcmUgZ29pbmcgdG8ga2VlcCB0aGUKICAgICAgICAgY29kZSBhcyBsb25nIGFzIHRoZXJlIGFyZSBubyBtYWpvciBtYWludGFuYW5jZSBoZWFkYWNoZXMuCkBAIC0yNzMsMTMgKzI4Myw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglyZW1vdmUgSElEIGNvbXBhdCBzdXBwb3J0Ci1XaGVuOgkyLjYuMjkKLVdoeToJbmVlZGVkIG9ubHkgYXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdW50aWwgZGlzdHJvcyBmaXggdGhlbXNlbHZlcyB1cAotV2hvOglKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDogcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woKQogV2hlbjogT2N0b2JlciAyMDA5CiBXaHk6ICBUaGUgJXBGIHZzcHJpbnRmIGZvcm1hdCBwcm92aWRlcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGluIGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9iYWNrZW5kLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MmQ1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0CkBAIC0wLDAgKzEsNjU4IEBACisJCQkgID09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkgIEZTLUNBQ0hFIENBQ0hFIEJBQ0tFTkQgQVBJCisJCQkgID09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBGUy1DYWNoZSBzeXN0ZW0gcHJvdmlkZXMgYW4gQVBJIGJ5IHdoaWNoIGFjdHVhbCBjYWNoZXMgY2FuIGJlIHN1cHBsaWVkIHRvCitGUy1DYWNoZSBmb3IgaXQgdG8gdGhlbiBzZXJ2ZSBvdXQgdG8gbmV0d29yayBmaWxlc3lzdGVtcyBhbmQgb3RoZXIgaW50ZXJlc3RlZAorcGFydGllcy4KKworVGhpcyBBUEkgaXMgZGVjbGFyZWQgaW4gPGxpbnV4L2ZzY2FjaGUtY2FjaGUuaD4uCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJTklUSUFMSVNJTkcgQU5EIFJFR0lTVEVSSU5HIEEgQ0FDSEUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyBzdGFydCBvZmYsIGEgY2FjaGUgZGVmaW5pdGlvbiBtdXN0IGJlIGluaXRpYWxpc2VkIGFuZCByZWdpc3RlcmVkIGZvciBlYWNoCitjYWNoZSB0aGUgYmFja2VuZCB3YW50cyB0byBtYWtlIGF2YWlsYWJsZS4gIEZvciBpbnN0YW5jZSwgQ2FjaGVGUyBkb2VzIHRoaXMgaW4KK3RoZSBmaWxsX3N1cGVyKCkgb3BlcmF0aW9uIG9uIG1vdW50aW5nLgorCitUaGUgY2FjaGUgZGVmaW5pdGlvbiAoc3RydWN0IGZzY2FjaGVfY2FjaGUpIHNob3VsZCBiZSBpbml0aWFsaXNlZCBieSBjYWxsaW5nOgorCisJdm9pZCBmc2NhY2hlX2luaXRfY2FjaGUoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJCXN0cnVjdCBmc2NhY2hlX2NhY2hlX29wcyAqb3BzLAorCQkJCWNvbnN0IGNoYXIgKmlkZm10LAorCQkJCS4uLik7CisKK1doZXJlOgorCisgKCopICJjYWNoZSIgaXMgYSBwb2ludGVyIHRvIHRoZSBjYWNoZSBkZWZpbml0aW9uOworCisgKCopICJvcHMiIGlzIGEgcG9pbnRlciB0byB0aGUgdGFibGUgb2Ygb3BlcmF0aW9ucyB0aGF0IHRoZSBiYWNrZW5kIHN1cHBvcnRzIG9uCisgICAgIHRoaXMgY2FjaGU7IGFuZAorCisgKCopICJpZGZtdCIgaXMgYSBmb3JtYXQgYW5kIHByaW50Zi1zdHlsZSBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdGluZyBhIGxhYmVsCisgICAgIGZvciB0aGUgY2FjaGUuCisKKworVGhlIGNhY2hlIHNob3VsZCB0aGVuIGJlIHJlZ2lzdGVyZWQgd2l0aCBGUy1DYWNoZSBieSBwYXNzaW5nIGEgcG9pbnRlciB0byB0aGUKK3ByZXZpb3VzbHkgaW5pdGlhbGlzZWQgY2FjaGUgZGVmaW5pdGlvbiB0bzoKKworCWludCBmc2NhY2hlX2FkZF9jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkgICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKmZzZGVmLAorCQkJICAgICAgY29uc3QgY2hhciAqdGFnbmFtZSk7CisKK1R3byBleHRyYSBhcmd1bWVudHMgc2hvdWxkIGFsc28gYmUgc3VwcGxpZWQ6CisKKyAoKikgImZzZGVmIiB3aGljaCBzaG91bGQgcG9pbnQgdG8gdGhlIG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIEZTLUNhY2hlCisgICAgIG1hc3RlciBpbmRleCBpbiB0aGlzIGNhY2hlLiAgTmV0ZnMgcHJpbWFyeSBpbmRleCBlbnRyaWVzIHdpbGwgYmUgY3JlYXRlZAorICAgICBoZXJlLiAgRlMtQ2FjaGUga2VlcHMgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byB0aGUgaW5kZXggb2JqZWN0IGlmCisgICAgIHN1Y2Nlc3NmdWwgYW5kIHdpbGwgcmVsZWFzZSBpdCB1cG9uIHdpdGhkcmF3YWwgb2YgdGhlIGNhY2hlLgorCisgKCopICJ0YWduYW1lIiB3aGljaCwgaWYgZ2l2ZW4sIHNob3VsZCBiZSBhIHRleHQgc3RyaW5nIG5hbWluZyB0aGlzIGNhY2hlLiAgSWYKKyAgICAgdGhpcyBpcyBOVUxMLCB0aGUgaWRlbnRpZmllciB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gIEZvciBDYWNoZUZTLCB0aGUKKyAgICAgaWRlbnRpZmllciBpcyBzZXQgdG8gbmFtZSB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIHRoZSB0YWcgY2FuIGJlCisgICAgIHN1cHBsaWVkIGJ5IG1vdW50LgorCitUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gLUVOT01FTSBpZiBpdCByYW4gb3V0IG9mIG1lbW9yeSBvciAtRUVYSVNUIGlmIHRoZSB0YWcKK2lzIGFscmVhZHkgaW4gdXNlLiAgMCB3aWxsIGJlIHJldHVybmVkIG9uIHN1Y2Nlc3MuCisKKworPT09PT09PT09PT09PT09PT09PT09CitVTlJFR0lTVEVSSU5HIEEgQ0FDSEUKKz09PT09PT09PT09PT09PT09PT09PQorCitBIGNhY2hlIGNhbiBiZSB3aXRoZHJhd24gZnJvbSB0aGUgc3lzdGVtIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGEKK3BvaW50ZXIgdG8gdGhlIGNhY2hlIGRlZmluaXRpb246CisKKwl2b2lkIGZzY2FjaGVfd2l0aGRyYXdfY2FjaGUoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKTsKKworSW4gQ2FjaGVGUydzIGNhc2UsIHRoaXMgaXMgY2FsbGVkIGJ5IHB1dF9zdXBlcigpLgorCisKKz09PT09PT09CitTRUNVUklUWQorPT09PT09PT0KKworVGhlIGNhY2hlIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIG9uZSBvZiB0d28gY29udGV4dHM6CisKKyAoMSkgdGhhdCBvZiB0aGUgdXNlcnNwYWNlIHByb2Nlc3MgdGhhdCBpc3N1ZWQgdGhlIG5ldGZzIG9wZXJhdGlvbiB0aGF0IGNhdXNlZAorICAgICB0aGUgY2FjaGUgbWV0aG9kIHRvIGJlIGludm9rZWQsIG9yCisKKyAoMikgdGhhdCBvZiBvbmUgb2YgdGhlIHByb2Nlc3NlcyBpbiB0aGUgRlMtQ2FjaGUgdGhyZWFkIHBvb2wuCisKK0luIGVpdGhlciBjYXNlLCB0aGlzIG1heSBub3QgYmUgYW4gYXBwcm9wcmlhdGUgY29udGV4dCBpbiB3aGljaCB0byBhY2Nlc3MgdGhlCitjYWNoZS4KKworVGhlIGNhbGxpbmcgcHJvY2VzcydzIGZzdWlkLCBmc2dpZCBhbmQgU0VMaW51eCBzZWN1cml0eSBpZGVudGl0aWVzIG1heSBuZWVkIHRvCitiZSBtYXNxdWVyYWRlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWNoZSBkcml2ZXIncyBhY2Nlc3MgdG8gdGhlIGNhY2hlLgorVGhpcyBpcyBsZWZ0IHRvIHRoZSBjYWNoZSB0byBoYW5kbGU7IEZTLUNhY2hlIG1ha2VzIG5vIGVmZm9ydCBpbiB0aGlzIHJlZ2FyZC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ09OVFJPTCBBTkQgU1RBVElTVElDUyBQUkVTRU5UQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBjYWNoZSBtYXkgcHJlc2VudCBkYXRhIHRvIHRoZSBvdXRzaWRlIHdvcmxkIHRocm91Z2ggRlMtQ2FjaGUncyBpbnRlcmZhY2VzCitpbiBzeXNmcyBhbmQgcHJvY2ZzIC0gdGhlIGZvcm1lciBmb3IgY29udHJvbCBhbmQgdGhlIGxhdHRlciBmb3Igc3RhdGlzdGljcy4KKworQSBzeXNmcyBkaXJlY3RvcnkgY2FsbGVkIC9zeXMvZnMvZnNjYWNoZS88Y2FjaGV0YWc+LyBpcyBjcmVhdGVkIGlmIENPTkZJR19TWVNGUworaXMgZW5hYmxlZC4gIFRoaXMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBrb2JqZWN0IHN0cnVjdCBmc2NhY2hlX2NhY2hlOjprb2JqCithbmQgaXMgZm9yIHVzZSBieSB0aGUgY2FjaGUgYXMgaXQgc2VlcyBmaXQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09CitSRUxFVkFOVCBEQVRBIFNUUlVDVFVSRVMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgKCopIEluZGV4L0RhdGEgZmlsZSBGUy1DYWNoZSByZXByZXNlbnRhdGlvbiBjb29raWU6CisKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgeworCQlzdHJ1Y3QgZnNjYWNoZV9vYmplY3RfZGVmCSpkZWY7CisJCXN0cnVjdCBmc2NhY2hlX25ldGZzCQkqbmV0ZnM7CisJCXZvaWQJCQkJKm5ldGZzX2RhdGE7CisJCS4uLgorCX07CisKKyAgICAgVGhlIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIG9mIHVzZSB0byB0aGUgYmFja2VuZCBkZXNjcmliZSB0aGUgb2JqZWN0CisgICAgIGRlZmluaXRpb24sIHRoZSBuZXRmcyBkZWZpbml0aW9uIGFuZCB0aGUgbmV0ZnMncyBkYXRhIGZvciB0aGlzIGNvb2tpZS4KKyAgICAgVGhlIG9iamVjdCBkZWZpbml0aW9uIGNvbnRhaW4gZnVuY3Rpb25zIHN1cHBsaWVkIGJ5IHRoZSBuZXRmcyBmb3IgbG9hZGluZworICAgICBhbmQgbWF0Y2hpbmcgaW5kZXggZW50cmllczsgdGhlc2UgYXJlIHJlcXVpcmVkIHRvIHByb3ZpZGUgc29tZSBvZiB0aGUKKyAgICAgY2FjaGUgb3BlcmF0aW9ucy4KKworCisgKCopIEluLWNhY2hlIG9iamVjdCByZXByZXNlbnRhdGlvbjoKKworCXN0cnVjdCBmc2NhY2hlX29iamVjdCB7CisJCWludAkJCQlkZWJ1Z19pZDsKKwkJZW51bSB7CisJCQlGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkcsCisJCQkuLi4KKwkJfQkJCQlzdGF0ZTsKKwkJc3BpbmxvY2tfdAkJCWxvY2sKKwkJc3RydWN0IGZzY2FjaGVfY2FjaGUJCSpjYWNoZTsKKwkJc3RydWN0IGZzY2FjaGVfY29va2llCQkqY29va2llOworCQkuLi4KKwl9OworCisgICAgIFN0cnVjdHVyZXMgb2YgdGhpcyB0eXBlIHNob3VsZCBiZSBhbGxvY2F0ZWQgYnkgdGhlIGNhY2hlIGJhY2tlbmQgYW5kCisgICAgIHBhc3NlZCB0byBGUy1DYWNoZSB3aGVuIHJlcXVlc3RlZCBieSB0aGUgYXBwcm9wcmlhdGUgY2FjaGUgb3BlcmF0aW9uLiAgSW4KKyAgICAgdGhlIGNhc2Ugb2YgQ2FjaGVGUywgdGhleSdyZSBlbWJlZGRlZCBpbiBDYWNoZUZTJ3MgaW50ZXJuYWwgb2JqZWN0CisgICAgIHN0cnVjdHVyZXMuCisKKyAgICAgVGhlIGRlYnVnX2lkIGlzIGEgc2ltcGxlIGludGVnZXIgdGhhdCBjYW4gYmUgdXNlZCBpbiBkZWJ1Z2dpbmcgbWVzc2FnZXMKKyAgICAgdGhhdCByZWZlciB0byBhIHBhcnRpY3VsYXIgb2JqZWN0LiAgSW4gc3VjaCBhIGNhc2UgaXQgc2hvdWxkIGJlIHByaW50ZWQKKyAgICAgdXNpbmcgIk9CSiV4IiB0byBiZSBjb25zaXN0ZW50IHdpdGggRlMtQ2FjaGUuCisKKyAgICAgRWFjaCBvYmplY3QgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBjb29raWUgdGhhdCByZXByZXNlbnRzIHRoZSBvYmplY3QgaXQKKyAgICAgaXMgYmFja2luZy4gIEFuIG9iamVjdCBzaG91bGQgcmV0aXJlZCB3aGVuIHB1dF9vYmplY3QoKSBpcyBjYWxsZWQgaWYgaXQgaXMKKyAgICAgaW4gc3RhdGUgRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HLiAgVGhlIGZzY2FjaGVfb2JqZWN0IHN0cnVjdCBzaG91bGQgYmUKKyAgICAgaW5pdGlhbGlzZWQgYnkgY2FsbGluZyBmc2NhY2hlX29iamVjdF9pbml0KG9iamVjdCkuCisKKworICgqKSBGUy1DYWNoZSBvcGVyYXRpb24gcmVjb3JkOgorCisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uIHsKKwkJYXRvbWljX3QJCXVzYWdlOworCQlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QJKm9iamVjdDsKKwkJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJI2RlZmluZSBGU0NBQ0hFX09QX0VYQ0xVU0lWRQorCQl2b2lkICgqcHJvY2Vzc29yKShzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKTsKKwkJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApOworCQkuLi4KKwl9OworCisgICAgIEZTLUNhY2hlIGhhcyBhIHBvb2wgb2YgdGhyZWFkcyB0aGF0IGl0IHVzZXMgdG8gZ2l2ZSBDUFUgdGltZSB0byB0aGUKKyAgICAgdmFyaW91cyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZG9uZSBhcyBwYXJ0IG9mIGRyaXZpbmcKKyAgICAgdGhlIGNhY2hlLiAgVGhlc2UgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBhYm92ZSBzdHJ1Y3R1cmUuICBUaGUgcHJvY2Vzc29yCisgICAgIG1ldGhvZCBpcyBjYWxsZWQgdG8gZ2l2ZSB0aGUgb3AgQ1BVIHRpbWUsIGFuZCB0aGUgcmVsZWFzZSBtZXRob2QgdG8gZ2V0CisgICAgIHJpZCBvZiBpdCB3aGVuIGl0cyB1c2FnZSBjb3VudCByZWFjaGVzIDAuCisKKyAgICAgQW4gb3BlcmF0aW9uIGNhbiBiZSBtYWRlIGV4Y2x1c2l2ZSB1cG9uIGFuIG9iamVjdCBieSBzZXR0aW5nIHRoZQorICAgICBhcHByb3ByaWF0ZSBmbGFnIGJlZm9yZSBlbnF1ZXVpbmcgaXQgd2l0aCBmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKCkuICBJZgorICAgICBhbiBvcGVyYXRpb24gbmVlZHMgbW9yZSBwcm9jZXNzaW5nIHRpbWUsIGl0IHNob3VsZCBiZSBlbnF1ZXVlZCBhZ2Fpbi4KKworCisgKCopIEZTLUNhY2hlIHJldHJpZXZhbCBvcGVyYXRpb24gcmVjb3JkOgorCisJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsIHsKKwkJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uIG9wOworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZzsKKwkJc3RydWN0IGxpc3RfaGVhZAkqdG9fZG87CisJCS4uLgorCX07CisKKyAgICAgQSBzdHJ1Y3R1cmUgb2YgdGhpcyB0eXBlIGlzIGFsbG9jYXRlZCBieSBGUy1DYWNoZSB0byByZWNvcmQgcmV0cmlldmFsIGFuZAorICAgICBhbGxvY2F0aW9uIHJlcXVlc3RzIG1hZGUgYnkgdGhlIG5ldGZzLiAgVGhpcyBzdHJ1Y3QgaXMgdGhlbiBwYXNzZWQgdG8gdGhlCisgICAgIGJhY2tlbmQgdG8gZG8gdGhlIG9wZXJhdGlvbi4gIFRoZSBiYWNrZW5kIG1heSBnZXQgZXh0cmEgcmVmcyB0byBpdCBieQorICAgICBjYWxsaW5nIGZzY2FjaGVfZ2V0X3JldHJpZXZhbCgpIGFuZCByZWZzIG1heSBiZSBkaXNjYXJkZWQgYnkgY2FsbGluZworICAgICBmc2NhY2hlX3B1dF9yZXRyaWV2YWwoKS4KKworICAgICBBIHJldHJpZXZhbCBvcGVyYXRpb24gY2FuIGJlIHVzZWQgYnkgdGhlIGJhY2tlbmQgdG8gZG8gcmV0cmlldmFsIHdvcmsuICBUbworICAgICBkbyB0aGlzLCB0aGUgcmV0cmlldmFsLT5vcC5wcm9jZXNzb3IgbWV0aG9kIHBvaW50ZXIgc2hvdWxkIGJlIHNldAorICAgICBhcHByb3ByaWF0ZWx5IGJ5IHRoZSBiYWNrZW5kIGFuZCBmc2NhY2hlX2VucXVldWVfcmV0cmlldmFsKCkgY2FsbGVkIHRvCisgICAgIHN1Ym1pdCBpdCB0byB0aGUgdGhyZWFkIHBvb2wuICBDYWNoZUZpbGVzLCBmb3IgZXhhbXBsZSwgdXNlcyB0aGlzIHRvIHF1ZXVlCisgICAgIHBhZ2UgZXhhbWluYXRpb24gd2hlbiBpdCBkZXRlY3RzIFBHX2xvY2sgYmVpbmcgY2xlYXJlZC4KKworICAgICBUaGUgdG9fZG8gZmllbGQgaXMgYW4gZW1wdHkgbGlzdCBhdmFpbGFibGUgZm9yIHRoZSBjYWNoZSBiYWNrZW5kIHRvIHVzZSBhcworICAgICBpdCBzZWVzIGZpdC4KKworCisgKCopIEZTLUNhY2hlIHN0b3JhZ2Ugb3BlcmF0aW9uIHJlY29yZDoKKworCXN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UgeworCQlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gb3A7CisJCXBnb2ZmX3QJCQlzdG9yZV9saW1pdDsKKwkJLi4uCisJfTsKKworICAgICBBIHN0cnVjdHVyZSBvZiB0aGlzIHR5cGUgaXMgYWxsb2NhdGVkIGJ5IEZTLUNhY2hlIHRvIHJlY29yZCBvdXRzdGFuZGluZworICAgICB3cml0ZXMgdG8gYmUgbWFkZS4gIEZTLUNhY2hlIGl0c2VsZiBlbnF1ZXVlcyB0aGlzIG9wZXJhdGlvbiBhbmQgaW52b2tlcworICAgICB0aGUgd3JpdGVfcGFnZSgpIG1ldGhvZCBvbiB0aGUgb2JqZWN0IGF0IGFwcHJvcHJpYXRlIHRpbWVzIHRvIGVmZmVjdAorICAgICBzdG9yYWdlLgorCisKKz09PT09PT09PT09PT09PT0KK0NBQ0hFIE9QRVJBVElPTlMKKz09PT09PT09PT09PT09PT0KKworVGhlIGNhY2hlIGJhY2tlbmQgcHJvdmlkZXMgRlMtQ2FjaGUgd2l0aCBhIHRhYmxlIG9mIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUKK3BlcmZvcm1lZCBvbiB0aGUgZGVuaXplbnMgb2YgdGhlIGNhY2hlLiAgVGhlc2UgYXJlIGhlbGQgaW4gYSBzdHJ1Y3R1cmUgb2YgdHlwZToKKworCXN0cnVjdCBmc2NhY2hlX2NhY2hlX29wcworCisgKCopIE5hbWUgb2YgY2FjaGUgcHJvdmlkZXIgW21hbmRhdG9yeV06CisKKwljb25zdCBjaGFyICpuYW1lCisKKyAgICAgVGhpcyBpc24ndCBzdHJpY3RseSBhbiBvcGVyYXRpb24sIGJ1dCBzaG91bGQgYmUgcG9pbnRlZCBhdCBhIHN0cmluZyBuYW1pbmcKKyAgICAgdGhlIGJhY2tlbmQuCisKKworICgqKSBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgW21hbmRhdG9yeV06CisKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKigqYWxsb2Nfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkJCSAgICAgICBzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKKworICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFsbG9jYXRlIGEgY2FjaGUgb2JqZWN0IHJlcHJlc2VudGF0aW9uIHRvIGJhY2sgYQorICAgICBjb29raWUgaW4gYSBwYXJ0aWN1bGFyIGNhY2hlLiAgZnNjYWNoZV9vYmplY3RfaW5pdCgpIHNob3VsZCBiZSBjYWxsZWQgb24KKyAgICAgdGhlIG9iamVjdCB0byBpbml0aWFsaXNlIGl0IHByaW9yIHRvIHJldHVybmluZy4KKworICAgICBUaGlzIGZ1bmN0aW9uIG1heSBhbHNvIGJlIHVzZWQgdG8gcGFyc2UgdGhlIGluZGV4IGtleSB0byBiZSB1c2VkIGZvcgorICAgICBtdWx0aXBsZSBsb29rdXAgY2FsbHMgdG8gdHVybiBpdCBpbnRvIGEgbW9yZSBjb252ZW5pZW50IGZvcm0uICBGUy1DYWNoZQorICAgICB3aWxsIGNhbGwgdGhlIGxvb2t1cF9jb21wbGV0ZSgpIG1ldGhvZCB0byBhbGxvdyB0aGUgY2FjaGUgdG8gcmVsZWFzZSB0aGUKKyAgICAgZm9ybSBvbmNlIGxvb2t1cCBpcyBjb21wbGV0ZSBvciBhYm9ydGVkLgorCisKKyAoKikgTG9vayB1cCBhbmQgY3JlYXRlIG9iamVjdCBbbWFuZGF0b3J5XToKKworCXZvaWQgKCpsb29rdXBfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKworICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2sgdXAgYW4gb2JqZWN0LCBnaXZlbiB0aGF0IHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgICBhbGxvY2F0ZWQgYW5kIGF0dGFjaGVkIHRvIHRoZSBjb29raWUuICBUaGlzIHNob3VsZCBpbnN0YW50aWF0ZSB0aGF0IG9iamVjdAorICAgICBpbiB0aGUgY2FjaGUgaWYgaXQgY2FuLgorCisgICAgIFRoZSBtZXRob2Qgc2hvdWxkIGNhbGwgZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKCkgYXMgc29vbiBhcworICAgICBwb3NzaWJsZSBpZiBpdCBkZXRlcm1pbmVzIHRoZSBvYmplY3QgZG9lc24ndCBleGlzdCBpbiB0aGUgY2FjaGUuICBJZiB0aGUKKyAgICAgb2JqZWN0IGlzIGZvdW5kIHRvIGV4aXN0IGFuZCB0aGUgbmV0ZnMgaW5kaWNhdGVzIHRoYXQgaXQgaXMgdmFsaWQgdGhlbgorICAgICBmc2NhY2hlX29idGFpbmVkX29iamVjdCgpIHNob3VsZCBiZSBjYWxsZWQgb25jZSB0aGUgb2JqZWN0IGlzIGluIGEKKyAgICAgcG9zaXRpb24gdG8gaGF2ZSBkYXRhIHN0b3JlZCBpbiBpdC4gIFNpbWlsYXJseSwgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3QoKQorICAgICBzaG91bGQgYWxzbyBiZSBjYWxsZWQgb25jZSBhIG5vbi1wcmVzZW50IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLgorCisgICAgIElmIGEgbG9va3VwIGVycm9yIG9jY3VycywgZnNjYWNoZV9vYmplY3RfbG9va3VwX2Vycm9yKCkgc2hvdWxkIGJlIGNhbGxlZAorICAgICB0byBhYm9ydCB0aGUgbG9va3VwIG9mIHRoYXQgb2JqZWN0LgorCisKKyAoKikgUmVsZWFzZSBsb29rdXAgZGF0YSBbbWFuZGF0b3J5XToKKworCXZvaWQgKCpsb29rdXBfY29tcGxldGUpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCisgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBhc2sgdGhlIGNhY2hlIHRvIHJlbGVhc2UgYW55IHJlc291cmNlcyBpdCB3YXMKKyAgICAgdXNpbmcgdG8gcGVyZm9ybSBhIGxvb2t1cC4KKworCisgKCopIEluY3JlbWVudCBvYmplY3QgcmVmY291bnQgW21hbmRhdG9yeV06CisKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKigqZ3JhYl9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCisgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiBhbiBvYmplY3QuICBJdAorICAgICBtYXkgZmFpbCAoZm9yIGluc3RhbmNlIGlmIHRoZSBjYWNoZSBpcyBiZWluZyB3aXRoZHJhd24pIGJ5IHJldHVybmluZyBOVUxMLgorICAgICBJdCBzaG91bGQgcmV0dXJuIHRoZSBvYmplY3QgcG9pbnRlciBpZiBzdWNjZXNzZnVsLgorCisKKyAoKikgTG9jay9VbmxvY2sgb2JqZWN0IFttYW5kYXRvcnldOgorCisJdm9pZCAoKmxvY2tfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKwl2b2lkICgqdW5sb2NrX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisKKyAgICAgVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBleGNsdXNpdmVseSBsb2NrIGFuIG9iamVjdC4gIEl0IG11c3QgYmUgcG9zc2libGUKKyAgICAgdG8gc2NoZWR1bGUgd2l0aCB0aGUgbG9jayBoZWxkLCBzbyBhIHNwaW5sb2NrIGlzbid0IHN1ZmZpY2llbnQuCisKKworICgqKSBQaW4vVW5waW4gb2JqZWN0IFtvcHRpb25hbF06CisKKwlpbnQgKCpwaW5fb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKwl2b2lkICgqdW5waW5fb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKworICAgICBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIHBpbiBhbiBvYmplY3QgaW50byB0aGUgY2FjaGUuICBPbmNlIHBpbm5lZCBhbgorICAgICBvYmplY3QgY2Fubm90IGJlIHJlY2xhaW1lZCB0byBtYWtlIHNwYWNlLiAgUmV0dXJuIC1FTk9TUEMgaWYgdGhlcmUncyBub3QKKyAgICAgZW5vdWdoIHNwYWNlIGluIHRoZSBjYWNoZSB0byBwZXJtaXQgdGhpcy4KKworCisgKCopIFVwZGF0ZSBvYmplY3QgW21hbmRhdG9yeV06CisKKwlpbnQgKCp1cGRhdGVfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byB1cGRhdGUgdGhlIGluZGV4IGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC4gIFRoZQorICAgICBuZXcgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGluIG9iamVjdC0+Y29va2llLT5uZXRmc19kYXRhLiAgVGhpcyBjYW4gYmUKKyAgICAgb2J0YWluZWQgYnkgY2FsbGluZyBvYmplY3QtPmNvb2tpZS0+ZGVmLT5nZXRfYXV4KCkvZ2V0X2F0dHIoKS4KKworCisgKCopIERpc2NhcmQgb2JqZWN0IFttYW5kYXRvcnldOgorCisJdm9pZCAoKmRyb3Bfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKworICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCBhbiBvYmplY3QgaGFzIGJlZW4gdW5ib3VuZCBmcm9tIGl0cworICAgICBjb29raWUsIGFuZCB0aGF0IHRoZSBjYWNoZSBzaG91bGQgcmVsZWFzZSB0aGUgb2JqZWN0J3MgcmVzb3VyY2VzIGFuZAorICAgICByZXRpcmUgaXQgaWYgaXQncyBpbiBzdGF0ZSBGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkcuCisKKyAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHJlbGVhc2UgYW55IHJlZmVyZW5jZXMgaGVsZCBieSB0aGUKKyAgICAgY2FsbGVyLiAgVGhlIGNhbGxlciB3aWxsIGludm9rZSB0aGUgcHV0X29iamVjdCgpIG1ldGhvZCBhcyBhcHByb3ByaWF0ZS4KKworCisgKCopIFJlbGVhc2Ugb2JqZWN0IHJlZmVyZW5jZSBbbWFuZGF0b3J5XToKKworCXZvaWQgKCpwdXRfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKworICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRpc2NhcmQgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0LiAgVGhlIG9iamVjdCBtYXkKKyAgICAgYmUgZnJlZWQgd2hlbiBhbGwgdGhlIHJlZmVyZW5jZXMgdG8gaXQgYXJlIHJlbGVhc2VkLgorCisKKyAoKikgU3luY2hyb25pc2UgYSBjYWNoZSBbbWFuZGF0b3J5XToKKworCXZvaWQgKCpzeW5jKShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gYXNrIHRoZSBiYWNrZW5kIHRvIHN5bmNocm9uaXNlIGEgY2FjaGUgd2l0aCBpdHMgYmFja2luZworICAgICBkZXZpY2UuCisKKworICgqKSBEaXNzb2NpYXRlIGEgY2FjaGUgW21hbmRhdG9yeV06CisKKwl2b2lkICgqZGlzc29jaWF0ZV9wYWdlcykoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKQorCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIGFzayBhIGNhY2hlIHRvIHBlcmZvcm0gYW55IHBhZ2UgZGlzc29jaWF0aW9ucyBhcyBwYXJ0IG9mCisgICAgIGNhY2hlIHdpdGhkcmF3YWwuCisKKworICgqKSBOb3RpZmljYXRpb24gdGhhdCB0aGUgYXR0cmlidXRlcyBvbiBhIG5ldGZzIGZpbGUgY2hhbmdlZCBbbWFuZGF0b3J5XToKKworCWludCAoKmF0dHJfY2hhbmdlZCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIGluZGljYXRlIHRvIHRoZSBjYWNoZSB0aGF0IGNlcnRhaW4gYXR0cmlidXRlcyBvbiBhIG5ldGZzCisgICAgIGZpbGUgaGF2ZSBjaGFuZ2VkIChmb3IgZXhhbXBsZSB0aGUgbWF4aW11bSBzaXplIGEgZmlsZSBtYXkgcmVhY2gpLiAgVGhlCisgICAgIGNhY2hlIGNhbiByZWFkIHRoZXNlIGZyb20gdGhlIG5ldGZzIGJ5IGNhbGxpbmcgdGhlIGNvb2tpZSdzIGdldF9hdHRyKCkKKyAgICAgbWV0aG9kLgorCisgICAgIFRoZSBjYWNoZSBtYXkgdXNlIHRoZSBmaWxlIHNpemUgaW5mb3JtYXRpb24gdG8gcmVzZXJ2ZSBzcGFjZSBvbiB0aGUgY2FjaGUuCisgICAgIEl0IHNob3VsZCBhbHNvIGNhbGwgZnNjYWNoZV9zZXRfc3RvcmVfbGltaXQoKSB0byBpbmRpY2F0ZSB0byBGUy1DYWNoZSB0aGUKKyAgICAgaGlnaGVzdCBieXRlIGl0J3Mgd2lsbGluZyB0byBzdG9yZSBmb3IgYW4gb2JqZWN0LgorCisgICAgIFRoaXMgbWV0aG9kIG1heSByZXR1cm4gLXZlIGlmIGFuIGVycm9yIG9jY3VycmVkIG9yIHRoZSBjYWNoZSBvYmplY3QgY2Fubm90CisgICAgIGJlIGV4cGFuZGVkLiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBvYmplY3Qgd2lsbCBiZSB3aXRoZHJhd24gZnJvbSBzZXJ2aWNlLgorCisgICAgIFRoaXMgb3BlcmF0aW9uIGlzIHJ1biBhc3luY2hyb25vdXNseSBmcm9tIEZTLUNhY2hlJ3MgdGhyZWFkIHBvb2wsIGFuZAorICAgICBzdG9yYWdlIGFuZCByZXRyaWV2YWwgb3BlcmF0aW9ucyBmcm9tIHRoZSBuZXRmcyBhcmUgZXhjbHVkZWQgZHVyaW5nIHRoZQorICAgICBleGVjdXRpb24gb2YgdGhpcyBvcGVyYXRpb24uCisKKworICgqKSBSZXNlcnZlIGNhY2hlIHNwYWNlIGZvciBhbiBvYmplY3QncyBkYXRhIFtvcHRpb25hbF06CisKKwlpbnQgKCpyZXNlcnZlX3NwYWNlKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwgbG9mZl90IHNpemUpOworCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIHJlcXVlc3QgdGhhdCBjYWNoZSBzcGFjZSBiZSByZXNlcnZlZCB0byBob2xkIHRoZSBkYXRhCisgICAgIGZvciBhbiBvYmplY3QgYW5kIHRoZSBtZXRhZGF0YSB1c2VkIHRvIHRyYWNrIGl0LiAgWmVybyBzaXplIHNob3VsZCBiZQorICAgICB0YWtlbiBhcyByZXF1ZXN0IHRvIGNhbmNlbCBhIHJlc2VydmF0aW9uLgorCisgICAgIFRoaXMgc2hvdWxkIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIC1FTk9TUEMgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlCisgICAgIGF2YWlsYWJsZSwgb3IgLUVOT01FTSBvciAtRUlPIG9uIG90aGVyIGVycm9ycy4KKworICAgICBUaGUgcmVzZXJ2YXRpb24gbWF5IGV4Y2VlZCB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBvYmplY3QsIHRodXMgcGVybWl0dGluZworICAgICBmdXR1cmUgZXhwYW5zaW9uLiAgSWYgdGhlIGFtb3VudCBvZiBzcGFjZSBjb25zdW1lZCBieSBhbiBvYmplY3Qgd291bGQKKyAgICAgZXhjZWVkIHRoZSByZXNlcnZhdGlvbiwgaXQncyBwZXJtaXR0ZWQgdG8gcmVmdXNlIHJlcXVlc3RzIHRvIGFsbG9jYXRlCisgICAgIHBhZ2VzLCBidXQgbm90IHJlcXVpcmVkLiAgQW4gb2JqZWN0IG1heSBiZSBwcnVuZWQgZG93biB0byBpdHMgcmVzZXJ2YXRpb24KKyAgICAgc2l6ZSBpZiBsYXJnZXIgdGhhbiB0aGF0IGFscmVhZHkuCisKKworICgqKSBSZXF1ZXN0IHBhZ2UgYmUgcmVhZCBmcm9tIGNhY2hlIFttYW5kYXRvcnldOgorCisJaW50ICgqcmVhZF9vcl9hbGxvY19wYWdlKShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICBnZnBfdCBnZnApCisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gYXR0ZW1wdCB0byByZWFkIGEgbmV0ZnMgcGFnZSBmcm9tIHRoZSBjYWNoZSwgb3IgdG8KKyAgICAgcmVzZXJ2ZSBhIGJhY2tpbmcgYmxvY2sgaWYgbm90LiAgRlMtQ2FjaGUgd2lsbCBoYXZlIGRvbmUgYXMgbXVjaCBjaGVja2luZworICAgICBhcyBpdCBjYW4gYmVmb3JlIGNhbGxpbmcsIGJ1dCBtb3N0IG9mIHRoZSB3b3JrIGJlbG9uZ3MgdG8gdGhlIGJhY2tlbmQuCisKKyAgICAgSWYgdGhlcmUncyBubyBwYWdlIGluIHRoZSBjYWNoZSwgdGhlbiAtRU5PREFUQSBzaG91bGQgYmUgcmV0dXJuZWQgaWYgdGhlCisgICAgIGJhY2tlbmQgbWFuYWdlZCB0byByZXNlcnZlIGEgYmFja2luZyBibG9jazsgLUVOT0JVRlMgb3IgLUVOT01FTSBpZiBpdAorICAgICBkaWRuJ3QuCisKKyAgICAgSWYgdGhlcmUgaXMgc3VpdGFibGUgZGF0YSBpbiB0aGUgY2FjaGUsIHRoZW4gYSByZWFkIG9wZXJhdGlvbiBzaG91bGQgYmUKKyAgICAgcXVldWVkIGFuZCAwIHJldHVybmVkLiAgV2hlbiB0aGUgcmVhZCBmaW5pc2hlcywgZnNjYWNoZV9lbmRfaW8oKSBzaG91bGQgYmUKKyAgICAgY2FsbGVkLgorCisgICAgIFRoZSBmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKCkgc2hvdWxkIGJlIGNhbGxlZCBmb3IgdGhlIHBhZ2UgaWYgYW55IGNhY2hlCisgICAgIG1ldGFkYXRhIGlzIHJldGFpbmVkLiAgVGhpcyB3aWxsIGluZGljYXRlIHRvIHRoZSBuZXRmcyB0aGF0IHRoZSBwYWdlIG5lZWRzCisgICAgIGV4cGxpY2l0IHVuY2FjaGluZy4gIFRoaXMgb3BlcmF0aW9uIHRha2VzIGEgcGFnZXZlYywgdGh1cyBhbGxvd2luZyBzZXZlcmFsCisgICAgIHBhZ2VzIHRvIGJlIG1hcmtlZCBhdCBvbmNlLgorCisgICAgIFRoZSByZXRyaWV2YWwgcmVjb3JkIHBvaW50ZWQgdG8gYnkgb3Agc2hvdWxkIGJlIHJldGFpbmVkIGZvciBlYWNoIHBhZ2UKKyAgICAgcXVldWVkIGFuZCByZWxlYXNlZCB3aGVuIEkvTyBvbiB0aGUgcGFnZSBoYXMgYmVlbiBmb3JtYWxseSBlbmRlZC4KKyAgICAgZnNjYWNoZV9nZXQvcHV0X3JldHJpZXZhbCgpIGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgcHVycG9zZS4KKworICAgICBUaGUgcmV0cmlldmFsIHJlY29yZCBtYXkgYmUgdXNlZCB0byBnZXQgQ1BVIHRpbWUgdmlhIHRoZSBGUy1DYWNoZSB0aHJlYWQKKyAgICAgcG9vbC4gIElmIHRoaXMgaXMgZGVzaXJlZCwgdGhlIG9wLT5vcC5wcm9jZXNzb3Igc2hvdWxkIGJlIHNldCB0byBwb2ludCB0bworICAgICB0aGUgYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyByb3V0aW5lLCBhbmQgZnNjYWNoZV9lbnF1ZXVlX3JldHJpZXZhbCgpIHNob3VsZAorICAgICBiZSBjYWxsZWQgYXQgYW4gYXBwcm9wcmlhdGUgcG9pbnQgdG8gcmVxdWVzdCBDUFUgdGltZS4gIEZvciBpbnN0YW5jZSwgdGhlCisgICAgIHJldHJpZXZhbCByb3V0aW5lIGNvdWxkIGJlIGVucXVldWVkIHVwb24gdGhlIGNvbXBsZXRpb24gb2YgYSBkaXNrIHJlYWQuCisgICAgIFRoZSB0b19kbyBmaWVsZCBpbiB0aGUgcmV0cmlldmFsIHJlY29yZCBpcyBwcm92aWRlZCB0byBhaWQgaW4gdGhpcy4KKworICAgICBJZiBhbiBJL08gZXJyb3Igb2NjdXJzLCBmc2NhY2hlX2lvX2Vycm9yKCkgc2hvdWxkIGJlIGNhbGxlZCBhbmQgLUVOT0JVRlMKKyAgICAgcmV0dXJuZWQgaWYgcG9zc2libGUgb3IgZnNjYWNoZV9lbmRfaW8oKSBjYWxsZWQgd2l0aCBhIHN1aXRhYmxlIGVycm9yCisgICAgIGNvZGUuLgorCisKKyAoKikgUmVxdWVzdCBwYWdlcyBiZSByZWFkIGZyb20gY2FjaGUgW21hbmRhdG9yeV06CisKKwlpbnQgKCpyZWFkX29yX2FsbG9jX3BhZ2VzKShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCSAgIHVuc2lnbmVkICpucl9wYWdlcywKKwkJCQkgICBnZnBfdCBnZnApCisKKyAgICAgVGhpcyBpcyBsaWtlIHRoZSByZWFkX29yX2FsbG9jX3BhZ2UoKSBtZXRob2QsIGV4Y2VwdCBpdCBpcyBoYW5kZWQgYSBsaXN0CisgICAgIG9mIHBhZ2VzIGluc3RlYWQgb2Ygb25lIHBhZ2UuICBBbnkgcGFnZXMgb24gd2hpY2ggYSByZWFkIG9wZXJhdGlvbiBpcworICAgICBzdGFydGVkIG11c3QgYmUgYWRkZWQgdG8gdGhlIHBhZ2UgY2FjaGUgZm9yIHRoZSBzcGVjaWZpZWQgbWFwcGluZyBhbmQgYWxzbworICAgICB0byB0aGUgTFJVLiAgU3VjaCBwYWdlcyBtdXN0IGFsc28gYmUgcmVtb3ZlZCBmcm9tIHRoZSBwYWdlcyBsaXN0IGFuZAorICAgICAqbnJfcGFnZXMgZGVjcmVtZW50ZWQgcGVyIHBhZ2UuCisKKyAgICAgSWYgdGhlcmUgd2FzIGFuIGVycm9yIHN1Y2ggYXMgLUVOT01FTSwgdGhlbiB0aGF0IHNob3VsZCBiZSByZXR1cm5lZDsgZWxzZQorICAgICBpZiBvbmUgb3IgbW9yZSBwYWdlcyBjb3VsZG4ndCBiZSByZWFkIG9yIGFsbG9jYXRlZCwgdGhlbiAtRU5PQlVGUyBzaG91bGQKKyAgICAgYmUgcmV0dXJuZWQ7IGVsc2UgaWYgb25lIG9yIG1vcmUgcGFnZXMgY291bGRuJ3QgYmUgcmVhZCwgdGhlbiAtRU5PREFUQQorICAgICBzaG91bGQgYmUgcmV0dXJuZWQuICBJZiBhbGwgdGhlIHBhZ2VzIGFyZSBkaXNwYXRjaGVkIHRoZW4gMCBzaG91bGQgYmUKKyAgICAgcmV0dXJuZWQuCisKKworICgqKSBSZXF1ZXN0IHBhZ2UgYmUgYWxsb2NhdGVkIGluIHRoZSBjYWNoZSBbbWFuZGF0b3J5XToKKworCWludCAoKmFsbG9jYXRlX3BhZ2UpKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICBnZnBfdCBnZnApCisKKyAgICAgVGhpcyBpcyBsaWtlIHRoZSByZWFkX29yX2FsbG9jX3BhZ2UoKSBtZXRob2QsIGV4Y2VwdCB0aGF0IGl0IHNob3VsZG4ndAorICAgICByZWFkIGZyb20gdGhlIGNhY2hlLCBldmVuIGlmIHRoZXJlJ3MgZGF0YSB0aGVyZSB0aGF0IGNvdWxkIGJlIHJldHJpZXZlZC4KKyAgICAgSXQgc2hvdWxkLCBob3dldmVyLCBzZXQgdXAgYW55IGludGVybmFsIG1ldGFkYXRhIHJlcXVpcmVkIHN1Y2ggdGhhdAorICAgICB0aGUgd3JpdGVfcGFnZSgpIG1ldGhvZCBjYW4gd3JpdGUgdG8gdGhlIGNhY2hlLgorCisgICAgIElmIHRoZXJlJ3Mgbm8gYmFja2luZyBibG9jayBhdmFpbGFibGUsIHRoZW4gLUVOT0JVRlMgc2hvdWxkIGJlIHJldHVybmVkCisgICAgIChvciAtRU5PTUVNIGlmIHRoZXJlIHdlcmUgb3RoZXIgcHJvYmxlbXMpLiAgSWYgYSBibG9jayBpcyBzdWNjZXNzZnVsbHkKKyAgICAgYWxsb2NhdGVkLCB0aGVuIHRoZSBuZXRmcyBwYWdlIHNob3VsZCBiZSBtYXJrZWQgYW5kIDAgcmV0dXJuZWQuCisKKworICgqKSBSZXF1ZXN0IHBhZ2VzIGJlIGFsbG9jYXRlZCBpbiB0aGUgY2FjaGUgW21hbmRhdG9yeV06CisKKwlpbnQgKCphbGxvY2F0ZV9wYWdlcykoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJICAgICAgdW5zaWduZWQgKm5yX3BhZ2VzLAorCQkJICAgICAgZ2ZwX3QgZ2ZwKQorCisgICAgIFRoaXMgaXMgYW4gbXVsdGlwbGUgcGFnZSB2ZXJzaW9uIG9mIHRoZSBhbGxvY2F0ZV9wYWdlKCkgbWV0aG9kLiAgcGFnZXMgYW5kCisgICAgIG5yX3BhZ2VzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGZvciB0aGUgcmVhZF9vcl9hbGxvY19wYWdlcygpIG1ldGhvZC4KKworCisgKCopIFJlcXVlc3QgcGFnZSBiZSB3cml0dGVuIHRvIGNhY2hlIFttYW5kYXRvcnldOgorCisJaW50ICgqd3JpdGVfcGFnZSkoc3RydWN0IGZzY2FjaGVfc3RvcmFnZSAqb3AsCisJCQkgIHN0cnVjdCBwYWdlICpwYWdlKTsKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byB3cml0ZSBmcm9tIGEgcGFnZSBvbiB3aGljaCB0aGVyZSB3YXMgYSBwcmV2aW91c2x5CisgICAgIHN1Y2Nlc3NmdWwgcmVhZF9vcl9hbGxvY19wYWdlKCkgY2FsbCBvciBzaW1pbGFyLiAgRlMtQ2FjaGUgZmlsdGVycyBvdXQKKyAgICAgcGFnZXMgdGhhdCBkb24ndCBoYXZlIG1hcHBpbmdzLgorCisgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhc3luY2hyb25vdXNseSBmcm9tIHRoZSBGUy1DYWNoZSB0aHJlYWQgcG9vbC4gIEl0IGlzCisgICAgIG5vdCByZXF1aXJlZCB0byBhY3R1YWxseSBzdG9yZSBhbnl0aGluZywgcHJvdmlkZWQgLUVOT0RBVEEgaXMgdGhlbgorICAgICByZXR1cm5lZCB0byB0aGUgbmV4dCByZWFkIG9mIHRoaXMgcGFnZS4KKworICAgICBJZiBhbiBlcnJvciBvY2N1cnJlZCwgdGhlbiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgc2hvdWxkIGJlIHJldHVybmVkLAorICAgICBvdGhlcndpc2UgemVybyBzaG91bGQgYmUgcmV0dXJuZWQuICBGUy1DYWNoZSB3aWxsIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uCisgICAgIGluIHJlc3BvbnNlIHRvIGFuIGVycm9yLCBzdWNoIGFzIHdpdGhkcmF3aW5nIHRoaXMgb2JqZWN0LgorCisgICAgIElmIHRoaXMgbWV0aG9kIHJldHVybnMgc3VjY2VzcyB0aGVuIEZTLUNhY2hlIHdpbGwgaW5mb3JtIHRoZSBuZXRmcworICAgICBhcHByb3ByaWF0ZWx5LgorCisKKyAoKikgRGlzY2FyZCByZXRhaW5lZCBwZXItcGFnZSBtZXRhZGF0YSBbbWFuZGF0b3J5XToKKworCXZvaWQgKCp1bmNhY2hlX3BhZ2UpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKworICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgbmV0ZnMgcGFnZSBpcyBiZWluZyBldmljdGVkIGZyb20gdGhlIHBhZ2VjYWNoZS4gIFRoZQorICAgICBjYWNoZSBiYWNrZW5kIHNob3VsZCB0ZWFyIGRvd24gYW55IGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9yIHRyYWNraW5nIGl0CisgICAgIG1haW50YWlucyBmb3IgdGhpcyBwYWdlLgorCisKKz09PT09PT09PT09PT09PT09PQorRlMtQ0FDSEUgVVRJTElUSUVTCis9PT09PT09PT09PT09PT09PT0KKworRlMtQ2FjaGUgcHJvdmlkZXMgc29tZSB1dGlsaXRpZXMgdGhhdCBhIGNhY2hlIGJhY2tlbmQgbWF5IG1ha2UgdXNlIG9mOgorCisgKCopIE5vdGUgb2NjdXJyZW5jZSBvZiBhbiBJL08gZXJyb3IgaW4gYSBjYWNoZToKKworCXZvaWQgZnNjYWNoZV9pb19lcnJvcihzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCisKKyAgICAgVGhpcyB0ZWxscyBGUy1DYWNoZSB0aGF0IGFuIEkvTyBlcnJvciBvY2N1cnJlZCBpbiB0aGUgY2FjaGUuICBBZnRlciB0aGlzCisgICAgIGhhcyBiZWVuIGNhbGxlZCwgb25seSByZXNvdXJjZSBkaXNzb2NpYXRpb24gb3BlcmF0aW9ucyAob2JqZWN0IGFuZCBwYWdlCisgICAgIHJlbGVhc2UpIHdpbGwgYmUgcGFzc2VkIGZyb20gdGhlIG5ldGZzIHRvIHRoZSBjYWNoZSBiYWNrZW5kIGZvciB0aGUKKyAgICAgc3BlY2lmaWVkIGNhY2hlLgorCisgICAgIFRoaXMgZG9lcyBub3QgYWN0dWFsbHkgd2l0aGRyYXcgdGhlIGNhY2hlLiAgVGhhdCBtdXN0IGJlIGRvbmUgc2VwYXJhdGVseS4KKworCisgKCopIEludm9rZSB0aGUgcmV0cmlldmFsIEkvTyBjb21wbGV0aW9uIGZ1bmN0aW9uOgorCisJdm9pZCBmc2NhY2hlX2VuZF9pbyhzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICBpbnQgZXJyb3IpOworCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIG5vdGUgdGhlIGVuZCBvZiBhbiBhdHRlbXB0IHRvIHJldHJpZXZlIGEgcGFnZS4gIFRoZQorICAgICBlcnJvciB2YWx1ZSBzaG91bGQgYmUgMCBpZiBzdWNjZXNzZnVsIGFuZCBhbiBlcnJvciBvdGhlcndpc2UuCisKKworICgqKSBTZXQgaGlnaGVzdCBzdG9yZSBsaW1pdDoKKworCXZvaWQgZnNjYWNoZV9zZXRfc3RvcmVfbGltaXQoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkJICAgICBsb2ZmX3QgaV9zaXplKTsKKworICAgICBUaGlzIHNldHMgdGhlIGxpbWl0IEZTLUNhY2hlIGltcG9zZXMgb24gdGhlIGhpZ2hlc3QgYnl0ZSBpdCdzIHdpbGxpbmcgdG8KKyAgICAgdHJ5IGFuZCBzdG9yZSBmb3IgYSBuZXRmcy4gIEFueSBwYWdlIG92ZXIgdGhpcyBsaW1pdCBpcyBhdXRvbWF0aWNhbGx5CisgICAgIHJlamVjdGVkIGJ5IGZzY2FjaGVfcmVhZF9hbGxvY19wYWdlKCkgYW5kIGNvIHdpdGggLUVOT0JVRlMuCisKKworICgqKSBNYXJrIHBhZ2VzIGFzIGJlaW5nIGNhY2hlZDoKKworCXZvaWQgZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZChzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCSAgICAgICBzdHJ1Y3QgcGFnZXZlYyAqcGFnZXZlYyk7CisKKyAgICAgVGhpcyBtYXJrcyBhIHNldCBvZiBwYWdlcyBhcyBiZWluZyBjYWNoZWQuICBBZnRlciB0aGlzIGhhcyBiZWVuIGNhbGxlZCwKKyAgICAgdGhlIG5ldGZzIG11c3QgY2FsbCBmc2NhY2hlX3VuY2FjaGVfcGFnZSgpIHRvIHVubWFyayB0aGUgcGFnZXMuCisKKworICgqKSBQZXJmb3JtIGNvaGVyZW5jeSBjaGVjayBvbiBhbiBvYmplY3Q6CisKKwllbnVtIGZzY2FjaGVfY2hlY2thdXggZnNjYWNoZV9jaGVja19hdXgoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkJCQljb25zdCB2b2lkICpkYXRhLAorCQkJCQkJdWludDE2X3QgZGF0YWxlbik7CisKKyAgICAgVGhpcyBhc2tzIHRoZSBuZXRmcyB0byBwZXJmb3JtIGEgY29oZXJlbmN5IGNoZWNrIG9uIGFuIG9iamVjdCB0aGF0IGhhcworICAgICBqdXN0IGJlZW4gbG9va2VkIHVwLiAgVGhlIGNvb2tpZSBhdHRhY2hlZCB0byB0aGUgb2JqZWN0IHdpbGwgZGV0ZXJtaW5lIHRoZQorICAgICBuZXRmcyB0byB1c2UuICBkYXRhIGFuZCBkYXRhbGVuIHNob3VsZCBzcGVjaWZ5IHdoZXJlIHRoZSBhdXhpbGlhcnkgZGF0YQorICAgICByZXRyaWV2ZWQgZnJvbSB0aGUgY2FjaGUgY2FuIGJlIGZvdW5kLgorCisgICAgIE9uZSBvZiB0aHJlZSB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZDoKKworCSgqKSBGU0NBQ0hFX0NIRUNLQVVYX09LQVkKKworCSAgICBUaGUgY29oZXJlbmN5IGRhdGEgaW5kaWNhdGVzIHRoZSBvYmplY3QgaXMgdmFsaWQgYXMgaXMuCisKKwkoKikgRlNDQUNIRV9DSEVDS0FVWF9ORUVEU19VUERBVEUKKworCSAgICBUaGUgY29oZXJlbmN5IGRhdGEgbmVlZHMgdXBkYXRpbmcsIGJ1dCBvdGhlcndpc2UgdGhlIG9iamVjdCBpcworCSAgICB2YWxpZC4KKworCSgqKSBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFCisKKwkgICAgVGhlIGNvaGVyZW5jeSBkYXRhIGluZGljYXRlcyB0aGF0IHRoZSBvYmplY3QgaXMgb2Jzb2xldGUgYW5kIHNob3VsZAorCSAgICBiZSBkaXNjYXJkZWQuCisKKworICgqKSBJbml0aWFsaXNlIGEgZnJlc2hseSBhbGxvY2F0ZWQgb2JqZWN0OgorCisJdm9pZCBmc2NhY2hlX29iamVjdF9pbml0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworICAgICBUaGlzIGluaXRpYWxpc2VzIGFsbCB0aGUgZmllbGRzIGluIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbi4KKworCisgKCopIEluZGljYXRlIHRoZSBkZXN0cnVjdGlvbiBvZiBhbiBvYmplY3Q6CisKKwl2b2lkIGZzY2FjaGVfb2JqZWN0X2Rlc3Ryb3llZChzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpOworCisgICAgIFRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gaW5mb3JtIEZTLUNhY2hlIHRoYXQgYW4gb2JqZWN0IHRoYXQgYmVsb25nZWQgdG8gYQorICAgICBjYWNoZSBoYXMgYmVlbiBkZXN0cm95ZWQgYW5kIGRlYWxsb2NhdGVkLiAgVGhpcyB3aWxsIGFsbG93IGNvbnRpbnVhdGlvbgorICAgICBvZiB0aGUgY2FjaGUgd2l0aGRyYXdhbCBwcm9jZXNzIHdoZW4gaXQgaXMgc3RvcHBlZCBwZW5kaW5nIGRlc3RydWN0aW9uIG9mCisgICAgIGFsbCB0aGUgb2JqZWN0cy4KKworCisgKCopIEluZGljYXRlIG5lZ2F0aXZlIGxvb2t1cCBvbiBhbiBvYmplY3Q6CisKKwl2b2lkIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gaW5kaWNhdGUgdG8gRlMtQ2FjaGUgdGhhdCBhIGxvb2t1cCBwcm9jZXNzIGZvciBhbiBvYmplY3QKKyAgICAgZm91bmQgYSBuZWdhdGl2ZSByZXN1bHQuCisKKyAgICAgVGhpcyBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiBhbiBvYmplY3QgdG8gcGVybWl0IHJlYWRzIHBlbmRpbmcgb24gbG9va3VwCisgICAgIGNvbXBsZXRpb24gdG8gZ28gb2ZmIGFuZCBzdGFydCBmZXRjaGluZyBkYXRhIGZyb20gdGhlIG5ldGZzIHNlcnZlciBhcyBpdCdzCisgICAgIGtub3duIGF0IHRoaXMgcG9pbnQgdGhhdCB0aGVyZSBjYW4ndCBiZSBhbnkgZGF0YSBpbiB0aGUgY2FjaGUuCisKKyAgICAgVGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIGFuIG9iamVjdC4gIE9ubHkgdGhlIGZpcnN0IGNhbGwgaXMKKyAgICAgc2lnbmlmaWNhbnQgLSBhbGwgc3Vic2VxdWVudCBjYWxscyBhcmUgaWdub3JlZC4KKworCisgKCopIEluZGljYXRlIGFuIG9iamVjdCBoYXMgYmVlbiBvYnRhaW5lZDoKKworCXZvaWQgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIGluZGljYXRlIHRvIEZTLUNhY2hlIHRoYXQgYSBsb29rdXAgcHJvY2VzcyBmb3IgYW4gb2JqZWN0CisgICAgIHByb2R1Y2VkIGEgcG9zaXRpdmUgcmVzdWx0LCBvciB0aGF0IGFuIG9iamVjdCB3YXMgY3JlYXRlZC4gIFRoaXMgc2hvdWxkCisgICAgIG9ubHkgYmUgY2FsbGVkIG9uY2UgZm9yIGFueSBwYXJ0aWN1bGFyIG9iamVjdC4KKworICAgICBUaGlzIGNoYW5nZXMgdGhlIHN0YXRlIG9mIGFuIG9iamVjdCB0byBpbmRpY2F0ZToKKworCSgxKSBpZiBubyBjYWxsIHRvIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZSgpIGhhcyBiZWVuIG1hZGUgb24KKwkgICAgdGhpcyBvYmplY3QsIHRoYXQgdGhlcmUgbWF5IGJlIGRhdGEgYXZhaWxhYmxlLCBhbmQgdGhhdCByZWFkcyBjYW4KKwkgICAgbm93IGdvIGFuZCBsb29rIGZvciBpdDsgYW5kCisKKyAgICAgICAgKDIpIHRoYXQgd3JpdGVzIG1heSBub3cgcHJvY2VlZCBhZ2FpbnN0IHRoaXMgb2JqZWN0LgorCisKKyAoKikgSW5kaWNhdGUgdGhhdCBvYmplY3QgbG9va3VwIGZhaWxlZDoKKworCXZvaWQgZnNjYWNoZV9vYmplY3RfbG9va3VwX2Vycm9yKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworICAgICBUaGlzIG1hcmtzIGFuIG9iamVjdCBhcyBoYXZpbmcgZW5jb3VudGVyZWQgYSBmYXRhbCBlcnJvciAodXN1YWxseSBFSU8pCisgICAgIGFuZCBjYXVzZXMgaXQgdG8gbW92ZSBpbnRvIGEgc3RhdGUgd2hlcmVieSBpdCB3aWxsIGJlIHdpdGhkcmF3biBhcyBzb29uCisgICAgIGFzIHBvc3NpYmxlLgorCisKKyAoKikgR2V0IGFuZCByZWxlYXNlIHJlZmVyZW5jZXMgb24gYSByZXRyaWV2YWwgcmVjb3JkOgorCisJdm9pZCBmc2NhY2hlX2dldF9yZXRyaWV2YWwoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCk7CisJdm9pZCBmc2NhY2hlX3B1dF9yZXRyaWV2YWwoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCk7CisKKyAgICAgVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byByZXRhaW4gYSByZXRyaWV2YWwgcmVjb3JkIHdoaWxzdCBkb2luZworICAgICBhc3luY2hyb25vdXMgZGF0YSByZXRyaWV2YWwgYW5kIGJsb2NrIGFsbG9jYXRpb24uCisKKworICgqKSBFbnF1ZXVlIGEgcmV0cmlldmFsIHJlY29yZCBmb3IgcHJvY2Vzc2luZy4KKworCXZvaWQgZnNjYWNoZV9lbnF1ZXVlX3JldHJpZXZhbChzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wKTsKKworICAgICBUaGlzIGVucXVldWVzIGEgcmV0cmlldmFsIHJlY29yZCBmb3IgcHJvY2Vzc2luZyBieSB0aGUgRlMtQ2FjaGUgdGhyZWFkCisgICAgIHBvb2wuICBPbmUgb2YgdGhlIHRocmVhZHMgaW4gdGhlIHBvb2wgd2lsbCBpbnZva2UgdGhlIHJldHJpZXZhbCByZWNvcmQncworICAgICBvcC0+b3AucHJvY2Vzc29yIGNhbGxiYWNrIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20KKyAgICAgd2l0aGluIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKworCisgKCopIExpc3Qgb2Ygb2JqZWN0IHN0YXRlIG5hbWVzOgorCisJY29uc3QgY2hhciAqZnNjYWNoZV9vYmplY3Rfc3RhdGVzW107CisKKyAgICAgRm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgdGhpcyBtYXkgYmUgdXNlZCB0byB0dXJuIHRoZSBzdGF0ZSB0aGF0IGFuIG9iamVjdAorICAgICBpcyBpbiBpbnRvIGEgdGV4dCBzdHJpbmcgZm9yIGRpc3BsYXkgcHVycG9zZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4YTQ5YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9jYWNoZWZpbGVzLnR4dApAQCAtMCwwICsxLDUwMSBAQAorCSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgICAgICBDYWNoZUZpbGVzOiBDQUNIRSBPTiBBTFJFQURZIE1PVU5URUQgRklMRVNZU1RFTQorCSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb250ZW50czoKKworICgqKSBPdmVydmlldy4KKworICgqKSBSZXF1aXJlbWVudHMuCisKKyAoKikgQ29uZmlndXJhdGlvbi4KKworICgqKSBTdGFydGluZyB0aGUgY2FjaGUuCisKKyAoKikgVGhpbmdzIHRvIGF2b2lkLgorCisgKCopIENhY2hlIGN1bGxpbmcuCisKKyAoKikgQ2FjaGUgc3RydWN0dXJlLgorCisgKCopIFNlY3VyaXR5IG1vZGVsIGFuZCBTRUxpbnV4LgorCisgKCopIEEgbm90ZSBvbiBzZWN1cml0eS4KKworICgqKSBTdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4KKworICgqKSBEZWJ1Z2dpbmcuCisKKworPT09PT09PT0KK09WRVJWSUVXCis9PT09PT09PQorCitDYWNoZUZpbGVzIGlzIGEgY2FjaGluZyBiYWNrZW5kIHRoYXQncyBtZWFudCB0byB1c2UgYXMgYSBjYWNoZSBhIGRpcmVjdG9yeSBvbgorYW4gYWxyZWFkeSBtb3VudGVkIGZpbGVzeXN0ZW0gb2YgYSBsb2NhbCB0eXBlIChzdWNoIGFzIEV4dDMpLgorCitDYWNoZUZpbGVzIHVzZXMgYSB1c2Vyc3BhY2UgZGFlbW9uIHRvIGRvIHNvbWUgb2YgdGhlIGNhY2hlIG1hbmFnZW1lbnQgLSBzdWNoIGFzCityZWFwaW5nIHN0YWxlIG5vZGVzIGFuZCBjdWxsaW5nLiAgVGhpcyBpcyBjYWxsZWQgY2FjaGVmaWxlc2QgYW5kIGxpdmVzIGluCisvc2Jpbi4KKworVGhlIGZpbGVzeXN0ZW0gYW5kIGRhdGEgaW50ZWdyaXR5IG9mIHRoZSBjYWNoZSBhcmUgb25seSBhcyBnb29kIGFzIHRob3NlIG9mIHRoZQorZmlsZXN5c3RlbSBwcm92aWRpbmcgdGhlIGJhY2tpbmcgc2VydmljZXMuICBOb3RlIHRoYXQgQ2FjaGVGaWxlcyBkb2VzIG5vdAorYXR0ZW1wdCB0byBqb3VybmFsIGFueXRoaW5nIHNpbmNlIHRoZSBqb3VybmFsbGluZyBpbnRlcmZhY2VzIG9mIHRoZSB2YXJpb3VzCitmaWxlc3lzdGVtcyBhcmUgdmVyeSBzcGVjaWZpYyBpbiBuYXR1cmUuCisKK0NhY2hlRmlsZXMgY3JlYXRlcyBhIG1pc2MgY2hhcmFjdGVyIGRldmljZSAtICIvZGV2L2NhY2hlZmlsZXMiIC0gdGhhdCBpcyB1c2VkCit0byBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGRhZW1vbi4gIE9ubHkgb25lIHRoaW5nIG1heSBoYXZlIHRoaXMgb3BlbiBhdCBvbmNlLAorYW5kIHdoaWxzdCBpdCBpcyBvcGVuLCBhIGNhY2hlIGlzIGF0IGxlYXN0IHBhcnRpYWxseSBpbiBleGlzdGVuY2UuICBUaGUgZGFlbW9uCitvcGVucyB0aGlzIGFuZCBzZW5kcyBjb21tYW5kcyBkb3duIGl0IHRvIGNvbnRyb2wgdGhlIGNhY2hlLgorCitDYWNoZUZpbGVzIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIGEgc2luZ2xlIGNhY2hlLgorCitDYWNoZUZpbGVzIGF0dGVtcHRzIHRvIG1haW50YWluIGF0IGxlYXN0IGEgY2VydGFpbiBwZXJjZW50YWdlIG9mIGZyZWUgc3BhY2Ugb24KK3RoZSBmaWxlc3lzdGVtLCBzaHJpbmtpbmcgdGhlIGNhY2hlIGJ5IGN1bGxpbmcgdGhlIG9iamVjdHMgaXQgY29udGFpbnMgdG8gbWFrZQorc3BhY2UgaWYgbmVjZXNzYXJ5IC0gc2VlIHRoZSAiQ2FjaGUgQ3VsbGluZyIgc2VjdGlvbi4gIFRoaXMgbWVhbnMgaXQgY2FuIGJlCitwbGFjZWQgb24gdGhlIHNhbWUgbWVkaXVtIGFzIGEgbGl2ZSBzZXQgb2YgZGF0YSwgYW5kIHdpbGwgZXhwYW5kIHRvIG1ha2UgdXNlIG9mCitzcGFyZSBzcGFjZSBhbmQgYXV0b21hdGljYWxseSBjb250cmFjdCB3aGVuIHRoZSBzZXQgb2YgZGF0YSByZXF1aXJlcyBtb3JlCitzcGFjZS4KKworCis9PT09PT09PT09PT0KK1JFUVVJUkVNRU5UUworPT09PT09PT09PT09CisKK1RoZSB1c2Ugb2YgQ2FjaGVGaWxlcyBhbmQgaXRzIGRhZW1vbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIHRvIGJlCithdmFpbGFibGUgaW4gdGhlIHN5c3RlbSBhbmQgaW4gdGhlIGNhY2hlIGZpbGVzeXN0ZW06CisKKwktIGRub3RpZnkuCisKKwktIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykuCisKKwktIG9wZW5hdCgpIGFuZCBmcmllbmRzLgorCisJLSBibWFwKCkgc3VwcG9ydCBvbiBmaWxlcyBpbiB0aGUgZmlsZXN5c3RlbSAoRklCTUFQIGlvY3RsKS4KKworCS0gVGhlIHVzZSBvZiBibWFwKCkgdG8gZGV0ZWN0IGEgcGFydGlhbCBwYWdlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisKK0l0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgdGhlICJkaXJfaW5kZXgiIG9wdGlvbiBpcyBlbmFibGVkIG9uIEV4dDMKK2ZpbGVzeXN0ZW1zIGJlaW5nIHVzZWQgYXMgYSBjYWNoZS4KKworCis9PT09PT09PT09PT09CitDT05GSUdVUkFUSU9OCis9PT09PT09PT09PT09CisKK1RoZSBjYWNoZSBpcyBjb25maWd1cmVkIGJ5IGEgc2NyaXB0IGluIC9ldGMvY2FjaGVmaWxlc2QuY29uZi4gIFRoZXNlIGNvbW1hbmRzCitzZXQgdXAgY2FjaGUgcmVhZHkgZm9yIHVzZS4gIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGNvbW1hbmRzIGFyZSBhdmFpbGFibGU6CisKKyAoKikgYnJ1biA8Tj4lCisgKCopIGJjdWxsIDxOPiUKKyAoKikgYnN0b3AgPE4+JQorICgqKSBmcnVuIDxOPiUKKyAoKikgZmN1bGwgPE4+JQorICgqKSBmc3RvcCA8Tj4lCisKKwlDb25maWd1cmUgdGhlIGN1bGxpbmcgbGltaXRzLiAgT3B0aW9uYWwuICBTZWUgdGhlIHNlY3Rpb24gb24gY3VsbGluZworCVRoZSBkZWZhdWx0cyBhcmUgNyUgKHJ1biksIDUlIChjdWxsKSBhbmQgMSUgKHN0b3ApIHJlc3BlY3RpdmVseS4KKworCVRoZSBjb21tYW5kcyBiZWdpbm5pbmcgd2l0aCBhICdiJyBhcmUgZmlsZSBzcGFjZSAoYmxvY2spIGxpbWl0cywgdGhvc2UKKwliZWdpbm5pbmcgd2l0aCBhbiAnZicgYXJlIGZpbGUgY291bnQgbGltaXRzLgorCisgKCopIGRpciA8cGF0aD4KKworCVNwZWNpZnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSByb290IG9mIHRoZSBjYWNoZS4gIE1hbmRhdG9yeS4KKworICgqKSB0YWcgPG5hbWU+CisKKwlTcGVjaWZ5IGEgdGFnIHRvIEZTLUNhY2hlIHRvIHVzZSBpbiBkaXN0aW5ndWlzaGluZyBtdWx0aXBsZSBjYWNoZXMuCisJT3B0aW9uYWwuICBUaGUgZGVmYXVsdCBpcyAiQ2FjaGVGaWxlcyIuCisKKyAoKikgZGVidWcgPG1hc2s+CisKKwlTcGVjaWZ5IGEgbnVtZXJpYyBiaXRtYXNrIHRvIGNvbnRyb2wgZGVidWdnaW5nIGluIHRoZSBrZXJuZWwgbW9kdWxlLgorCU9wdGlvbmFsLiAgVGhlIGRlZmF1bHQgaXMgemVybyAoYWxsIG9mZikuICBUaGUgZm9sbG93aW5nIHZhbHVlcyBjYW4gYmUKKwlPUidkIGludG8gdGhlIG1hc2sgdG8gY29sbGVjdCB2YXJpb3VzIGluZm9ybWF0aW9uOgorCisJCTEJVHVybiBvbiB0cmFjZSBvZiBmdW5jdGlvbiBlbnRyeSAoX2VudGVyKCkgbWFjcm9zKQorCQkyCVR1cm4gb24gdHJhY2Ugb2YgZnVuY3Rpb24gZXhpdCAoX2xlYXZlKCkgbWFjcm9zKQorCQk0CVR1cm4gb24gdHJhY2Ugb2YgaW50ZXJuYWwgZGVidWcgcG9pbnRzIChfZGVidWcoKSkKKworCVRoaXMgbWFzayBjYW4gYWxzbyBiZSBzZXQgdGhyb3VnaCBzeXNmcywgZWc6CisKKwkJZWNobyA1ID4vc3lzL21vZHVsZXMvY2FjaGVmaWxlcy9wYXJhbWV0ZXJzL2RlYnVnCisKKworPT09PT09PT09PT09PT09PT09CitTVEFSVElORyBUSEUgQ0FDSEUKKz09PT09PT09PT09PT09PT09PQorCitUaGUgY2FjaGUgaXMgc3RhcnRlZCBieSBydW5uaW5nIHRoZSBkYWVtb24uICBUaGUgZGFlbW9uIG9wZW5zIHRoZSBjYWNoZSBkZXZpY2UsCitjb25maWd1cmVzIHRoZSBjYWNoZSBhbmQgdGVsbHMgaXQgdG8gYmVnaW4gY2FjaGluZy4gIEF0IHRoYXQgcG9pbnQgdGhlIGNhY2hlCitiaW5kcyB0byBmc2NhY2hlIGFuZCB0aGUgY2FjaGUgYmVjb21lcyBsaXZlLgorCitUaGUgZGFlbW9uIGlzIHJ1biBhcyBmb2xsb3dzOgorCisJL3NiaW4vY2FjaGVmaWxlc2QgWy1kXSogWy1zXSBbLW5dIFstZiA8Y29uZmlnZmlsZT5dCisKK1RoZSBmbGFncyBhcmU6CisKKyAoKikgLWQKKworCUluY3JlYXNlIHRoZSBkZWJ1Z2dpbmcgbGV2ZWwuICBUaGlzIGNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgYW5kCisJaXMgY3VtdWxhdGl2ZSB3aXRoIGl0c2VsZi4KKworICgqKSAtcworCisJU2VuZCBtZXNzYWdlcyB0byBzdGRlcnIgaW5zdGVhZCBvZiBzeXNsb2cuCisKKyAoKikgLW4KKworCURvbid0IGRhZW1vbmlzZSBhbmQgZ28gaW50byBiYWNrZ3JvdW5kLgorCisgKCopIC1mIDxjb25maWdmaWxlPgorCisJVXNlIGFuIGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb24gZmlsZSByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBvbmUuCisKKworPT09PT09PT09PT09PT09CitUSElOR1MgVE8gQVZPSUQKKz09PT09PT09PT09PT09PQorCitEbyBub3QgbW91bnQgb3RoZXIgdGhpbmdzIHdpdGhpbiB0aGUgY2FjaGUgYXMgdGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zLiAgVGhlCitrZXJuZWwgbW9kdWxlIGNvbnRhaW5zIGl0cyBvd24gdmVyeSBjdXQtZG93biBwYXRoIHdhbGtpbmcgZmFjaWxpdHkgdGhhdCBpZ25vcmVzCittb3VudHBvaW50cywgYnV0IHRoZSBkYWVtb24gY2FuJ3QgYXZvaWQgdGhlbS4KKworRG8gbm90IGNyZWF0ZSwgcmVuYW1lIG9yIHVubGluayBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gdGhlIGNhY2hlIHdoaWxzdCB0aGUKK2NhY2hlIGlzIGFjdGl2ZSwgYXMgdGhpcyBtYXkgY2F1c2UgdGhlIHN0YXRlIHRvIGJlY29tZSB1bmNlcnRhaW4uCisKK1JlbmFtaW5nIGZpbGVzIGluIHRoZSBjYWNoZSBtaWdodCBtYWtlIG9iamVjdHMgYXBwZWFyIHRvIGJlIG90aGVyIG9iamVjdHMgKHRoZQorZmlsZW5hbWUgaXMgcGFydCBvZiB0aGUgbG9va3VwIGtleSkuCisKK0RvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGF0dGFjaGVkIHRvIGNhY2hlIGZpbGVzIGJ5IHRoZQorY2FjaGUgYXMgdGhpcyB3aWxsIGNhdXNlIHRoZSBjYWNoZSBzdGF0ZSBtYW5hZ2VtZW50IHRvIGdldCBjb25mdXNlZC4KKworRG8gbm90IGNyZWF0ZSBmaWxlcyBvciBkaXJlY3RvcmllcyBpbiB0aGUgY2FjaGUsIGxlc3QgdGhlIGNhY2hlIGdldCBjb25mdXNlZCBvcgorc2VydmUgaW5jb3JyZWN0IGRhdGEuCisKK0RvIG5vdCBjaG1vZCBmaWxlcyBpbiB0aGUgY2FjaGUuICBUaGUgbW9kdWxlIGNyZWF0ZXMgdGhpbmdzIHdpdGggbWluaW1hbAorcGVybWlzc2lvbnMgdG8gcHJldmVudCByYW5kb20gdXNlcnMgYmVpbmcgYWJsZSB0byBhY2Nlc3MgdGhlbSBkaXJlY3RseS4KKworCis9PT09PT09PT09PT09CitDQUNIRSBDVUxMSU5HCis9PT09PT09PT09PT09CisKK1RoZSBjYWNoZSBtYXkgbmVlZCBjdWxsaW5nIG9jY2FzaW9uYWxseSB0byBtYWtlIHNwYWNlLiAgVGhpcyBpbnZvbHZlcworZGlzY2FyZGluZyBvYmplY3RzIGZyb20gdGhlIGNhY2hlIHRoYXQgaGF2ZSBiZWVuIHVzZWQgbGVzcyByZWNlbnRseSB0aGFuCithbnl0aGluZyBlbHNlLiAgQ3VsbGluZyBpcyBiYXNlZCBvbiB0aGUgYWNjZXNzIHRpbWUgb2YgZGF0YSBvYmplY3RzLiAgRW1wdHkKK2RpcmVjdG9yaWVzIGFyZSBjdWxsZWQgaWYgbm90IGluIHVzZS4KKworQ2FjaGUgY3VsbGluZyBpcyBkb25lIG9uIHRoZSBiYXNpcyBvZiB0aGUgcGVyY2VudGFnZSBvZiBibG9ja3MgYW5kIHRoZQorcGVyY2VudGFnZSBvZiBmaWxlcyBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbS4gIFRoZXJlIGFyZSBzaXgKKyJsaW1pdHMiOgorCisgKCopIGJydW4KKyAoKikgZnJ1bgorCisgICAgIElmIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBhbmQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgZmlsZXMgaW4gdGhlIGNhY2hlCisgICAgIHJpc2VzIGFib3ZlIGJvdGggdGhlc2UgbGltaXRzLCB0aGVuIGN1bGxpbmcgaXMgdHVybmVkIG9mZi4KKworICgqKSBiY3VsbAorICgqKSBmY3VsbAorCisgICAgIElmIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIHNwYWNlIG9yIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGZpbGVzIGluIHRoZQorICAgICBjYWNoZSBmYWxscyBiZWxvdyBlaXRoZXIgb2YgdGhlc2UgbGltaXRzLCB0aGVuIGN1bGxpbmcgaXMgc3RhcnRlZC4KKworICgqKSBic3RvcAorICgqKSBmc3RvcAorCisgICAgIElmIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIHNwYWNlIG9yIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGZpbGVzIGluIHRoZQorICAgICBjYWNoZSBmYWxscyBiZWxvdyBlaXRoZXIgb2YgdGhlc2UgbGltaXRzLCB0aGVuIG5vIGZ1cnRoZXIgYWxsb2NhdGlvbiBvZgorICAgICBkaXNrIHNwYWNlIG9yIGZpbGVzIGlzIHBlcm1pdHRlZCB1bnRpbCBjdWxsaW5nIGhhcyByYWlzZWQgdGhpbmdzIGFib3ZlCisgICAgIHRoZXNlIGxpbWl0cyBhZ2Fpbi4KKworVGhlc2UgbXVzdCBiZSBjb25maWd1cmVkIHRodXNseToKKworCTAgPD0gYnN0b3AgPCBiY3VsbCA8IGJydW4gPCAxMDAKKwkwIDw9IGZzdG9wIDwgZmN1bGwgPCBmcnVuIDwgMTAwCisKK05vdGUgdGhhdCB0aGVzZSBhcmUgcGVyY2VudGFnZXMgb2YgYXZhaWxhYmxlIHNwYWNlIGFuZCBhdmFpbGFibGUgZmlsZXMsIGFuZCBkbworX25vdF8gYXBwZWFyIGFzIDEwMCBtaW51cyB0aGUgcGVyY2VudGFnZSBkaXNwbGF5ZWQgYnkgdGhlICJkZiIgcHJvZ3JhbS4KKworVGhlIHVzZXJzcGFjZSBkYWVtb24gc2NhbnMgdGhlIGNhY2hlIHRvIGJ1aWxkIHVwIGEgdGFibGUgb2YgY3VsbGFibGUgb2JqZWN0cy4KK1RoZXNlIGFyZSB0aGVuIGN1bGxlZCBpbiBsZWFzdCByZWNlbnRseSB1c2VkIG9yZGVyLiAgQSBuZXcgc2NhbiBvZiB0aGUgY2FjaGUgaXMKK3N0YXJ0ZWQgYXMgc29vbiBhcyBzcGFjZSBpcyBtYWRlIGluIHRoZSB0YWJsZS4gIE9iamVjdHMgd2lsbCBiZSBza2lwcGVkIGlmCit0aGVpciBhdGltZXMgaGF2ZSBjaGFuZ2VkIG9yIGlmIHRoZSBrZXJuZWwgbW9kdWxlIHNheXMgaXQgaXMgc3RpbGwgdXNpbmcgdGhlbS4KKworCis9PT09PT09PT09PT09PT0KK0NBQ0hFIFNUUlVDVFVSRQorPT09PT09PT09PT09PT09CisKK1RoZSBDYWNoZUZpbGVzIG1vZHVsZSB3aWxsIGNyZWF0ZSB0d28gZGlyZWN0b3JpZXMgaW4gdGhlIGRpcmVjdG9yeSBpdCB3YXMKK2dpdmVuOgorCisgKCopIGNhY2hlLworCisgKCopIGdyYXZleWFyZC8KKworVGhlIGFjdGl2ZSBjYWNoZSBvYmplY3RzIGFsbCByZXNpZGUgaW4gdGhlIGZpcnN0IGRpcmVjdG9yeS4gIFRoZSBDYWNoZUZpbGVzCitrZXJuZWwgbW9kdWxlIG1vdmVzIGFueSByZXRpcmVkIG9yIGN1bGxlZCBvYmplY3RzIHRoYXQgaXQgY2FuJ3Qgc2ltcGx5IHVubGluawordG8gdGhlIGdyYXZleWFyZCBmcm9tIHdoaWNoIHRoZSBkYWVtb24gd2lsbCBhY3R1YWxseSBkZWxldGUgdGhlbS4KKworVGhlIGRhZW1vbiB1c2VzIGRub3RpZnkgdG8gbW9uaXRvciB0aGUgZ3JhdmV5YXJkIGRpcmVjdG9yeSwgYW5kIHdpbGwgZGVsZXRlCithbnl0aGluZyB0aGF0IGFwcGVhcnMgdGhlcmVpbi4KKworCitUaGUgbW9kdWxlIHJlcHJlc2VudHMgaW5kZXggb2JqZWN0cyBhcyBkaXJlY3RvcmllcyB3aXRoIHRoZSBmaWxlbmFtZSAiSS4uLiIgb3IKKyJKLi4uIi4gIE5vdGUgdGhhdCB0aGUgImNhY2hlLyIgZGlyZWN0b3J5IGlzIGl0c2VsZiBhIHNwZWNpYWwgaW5kZXguCisKK0RhdGEgb2JqZWN0cyBhcmUgcmVwcmVzZW50ZWQgYXMgZmlsZXMgaWYgdGhleSBoYXZlIG5vIGNoaWxkcmVuLCBvciBkaXJlY3RvcmllcworaWYgdGhleSBkby4gIFRoZWlyIGZpbGVuYW1lcyBhbGwgYmVnaW4gIkQuLi4iIG9yICJFLi4uIi4gIElmIHJlcHJlc2VudGVkIGFzIGEKK2RpcmVjdG9yeSwgZGF0YSBvYmplY3RzIHdpbGwgaGF2ZSBhIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBjYWxsZWQgImRhdGEiIHRoYXQKK2FjdHVhbGx5IGhvbGRzIHRoZSBkYXRhLgorCitTcGVjaWFsIG9iamVjdHMgYXJlIHNpbWlsYXIgdG8gZGF0YSBvYmplY3RzLCBleGNlcHQgdGhlaXIgZmlsZW5hbWVzIGJlZ2luCisiUy4uLiIgb3IgIlQuLi4iLgorCisKK0lmIGFuIG9iamVjdCBoYXMgY2hpbGRyZW4sIHRoZW4gaXQgd2lsbCBiZSByZXByZXNlbnRlZCBhcyBhIGRpcmVjdG9yeS4KK0ltbWVkaWF0ZWx5IGluIHRoZSByZXByZXNlbnRhdGl2ZSBkaXJlY3RvcnkgYXJlIGEgY29sbGVjdGlvbiBvZiBkaXJlY3RvcmllcworbmFtZWQgZm9yIGhhc2ggdmFsdWVzIG9mIHRoZSBjaGlsZCBvYmplY3Qga2V5cyB3aXRoIGFuICdAJyBwcmVwZW5kZWQuICBJbnRvCit0aGlzIGRpcmVjdG9yeSwgaWYgcG9zc2libGUsIHdpbGwgYmUgcGxhY2VkIHRoZSByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGNoaWxkCitvYmplY3RzOgorCisJSU5ERVggICAgIElOREVYICAgICAgSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEEgRklMRVMKKwk9PT09PT09PT0gPT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PQorCWNhY2hlL0A0YS9JMDNuZnMvQDMwL0ppMDAwMDAwMDAwMDAwMDAwLS1mSGc4aGk4NDAwCisJY2FjaGUvQDRhL0kwM25mcy9AMzAvSmkwMDAwMDAwMDAwMDAwMDAtLWZIZzhoaTg0MDAvQDc1L0VzMGcwMDB3Li4uREIxcnkKKwljYWNoZS9ANGEvSTAzbmZzL0AzMC9KaTAwMDAwMDAwMDAwMDAwMC0tZkhnOGhpODQwMC9ANzUvRXMwZzAwMHcuLi5OMjJyeQorCWNhY2hlL0A0YS9JMDNuZnMvQDMwL0ppMDAwMDAwMDAwMDAwMDAwLS1mSGc4aGk4NDAwL0A3NS9FczBnMDAwdy4uLkZQMXJ5CisKKworSWYgdGhlIGtleSBpcyBzbyBsb25nIHRoYXQgaXQgZXhjZWVkcyBOQU1FX01BWCB3aXRoIHRoZSBkZWNvcmF0aW9ucyBhZGRlZCBvbiB0bworaXQsIHRoZW4gaXQgd2lsbCBiZSBjdXQgaW50byBwaWVjZXMsIHRoZSBmaXJzdCBmZXcgb2Ygd2hpY2ggd2lsbCBiZSB1c2VkIHRvCittYWtlIGEgbmVzdCBvZiBkaXJlY3RvcmllcywgYW5kIHRoZSBsYXN0IG9uZSBvZiB3aGljaCB3aWxsIGJlIHRoZSBvYmplY3RzCitpbnNpZGUgdGhlIGxhc3QgZGlyZWN0b3J5LiAgVGhlIG5hbWVzIG9mIHRoZSBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgd2lsbCBoYXZlCisnKycgcHJlcGVuZGVkOgorCisJSjEyMjMvQDIzLyt4eS4uLnovK2tsLi4ubS9FcHFyCisKKworTm90ZSB0aGF0IGtleXMgYXJlIHJhdyBkYXRhLCBhbmQgbm90IG9ubHkgbWF5IHRoZXkgZXhjZWVkIE5BTUVfTUFYIGluIHNpemUsCit0aGV5IG1heSBhbHNvIGNvbnRhaW4gdGhpbmdzIGxpa2UgJy8nIGFuZCBOVUwgY2hhcmFjdGVycywgYW5kIHNvIHRoZXkgbWF5IG5vdAorYmUgc3VpdGFibGUgZm9yIHR1cm5pbmcgZGlyZWN0bHkgaW50byBhIGZpbGVuYW1lLgorCitUbyBoYW5kbGUgdGhpcywgQ2FjaGVGaWxlcyB3aWxsIHVzZSBhIHN1aXRhYmx5IHByaW50YWJsZSBmaWxlbmFtZSBkaXJlY3RseSBhbmQKKyJiYXNlLTY0IiBlbmNvZGUgb25lcyB0aGF0IGFyZW4ndCBkaXJlY3RseSBzdWl0YWJsZS4gIFRoZSB0d28gdmVyc2lvbnMgb2YKK29iamVjdCBmaWxlbmFtZXMgaW5kaWNhdGUgdGhlIGVuY29kaW5nOgorCisJT0JKRUNUIFRZUEUJUFJJTlRBQkxFCUVOQ09ERUQKKwk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQorCUluZGV4CQkiSS4uLiIJCSJKLi4uIgorCURhdGEJCSJELi4uIgkJIkUuLi4iCisJU3BlY2lhbAkJIlMuLi4iCQkiVC4uLiIKKworSW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGFyZSBhbHdheXMgIkAiIG9yICIrIiBhcyBhcHByb3ByaWF0ZS4KKworCitFYWNoIG9iamVjdCBpbiB0aGUgY2FjaGUgaGFzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBsYWJlbCB0aGF0IGhvbGRzIHRoZSBvYmplY3QKK3R5cGUgSUQgKHJlcXVpcmVkIHRvIGRpc3Rpbmd1aXNoIHNwZWNpYWwgb2JqZWN0cykgYW5kIHRoZSBhdXhpbGlhcnkgZGF0YSBmcm9tCit0aGUgbmV0ZnMuICBUaGUgbGF0dGVyIGlzIHVzZWQgdG8gZGV0ZWN0IHN0YWxlIG9iamVjdHMgaW4gdGhlIGNhY2hlIGFuZCB1cGRhdGUKK29yIHJldGlyZSB0aGVtLgorCisKK05vdGUgdGhhdCBDYWNoZUZpbGVzIHdpbGwgZXJhc2UgZnJvbSB0aGUgY2FjaGUgYW55IGZpbGUgaXQgZG9lc24ndCByZWNvZ25pc2Ugb3IKK2FueSBmaWxlIG9mIGFuIGluY29ycmVjdCB0eXBlIChzdWNoIGFzIGEgRklGTyBmaWxlIG9yIGEgZGV2aWNlIGZpbGUpLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitTRUNVUklUWSBNT0RFTCBBTkQgU0VMSU5VWAorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ2FjaGVGaWxlcyBpcyBpbXBsZW1lbnRlZCB0byBkZWFsIHByb3Blcmx5IHdpdGggdGhlIExTTSBzZWN1cml0eSBmZWF0dXJlcyBvZgordGhlIExpbnV4IGtlcm5lbCBhbmQgdGhlIFNFTGludXggZmFjaWxpdHkuCisKK09uZSBvZiB0aGUgcHJvYmxlbXMgdGhhdCBDYWNoZUZpbGVzIGZhY2VzIGlzIHRoYXQgaXQgaXMgZ2VuZXJhbGx5IGFjdGluZyBvbgorYmVoYWxmIG9mIGEgcHJvY2VzcywgYW5kIHJ1bm5pbmcgaW4gdGhhdCBwcm9jZXNzJ3MgY29udGV4dCwgYW5kIHRoYXQgaW5jbHVkZXMgYQorc2VjdXJpdHkgY29udGV4dCB0aGF0IGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgYWNjZXNzaW5nIHRoZSBjYWNoZSAtIGVpdGhlcgorYmVjYXVzZSB0aGUgZmlsZXMgaW4gdGhlIGNhY2hlIGFyZSBpbmFjY2Vzc2libGUgdG8gdGhhdCBwcm9jZXNzLCBvciBiZWNhdXNlIGlmCit0aGUgcHJvY2VzcyBjcmVhdGVzIGEgZmlsZSBpbiB0aGUgY2FjaGUsIHRoYXQgZmlsZSBtYXkgYmUgaW5hY2Nlc3NpYmxlIHRvIG90aGVyCitwcm9jZXNzZXMuCisKK1RoZSB3YXkgQ2FjaGVGaWxlcyB3b3JrcyBpcyB0byB0ZW1wb3JhcmlseSBjaGFuZ2UgdGhlIHNlY3VyaXR5IGNvbnRleHQgKGZzdWlkLAorZnNnaWQgYW5kIGFjdG9yIHNlY3VyaXR5IGxhYmVsKSB0aGF0IHRoZSBwcm9jZXNzIGFjdHMgYXMgLSB3aXRob3V0IGNoYW5naW5nIHRoZQorc2VjdXJpdHkgY29udGV4dCBvZiB0aGUgcHJvY2VzcyB3aGVuIGl0IHRoZSB0YXJnZXQgb2YgYW4gb3BlcmF0aW9uIHBlcmZvcm1lZCBieQorc29tZSBvdGhlciBwcm9jZXNzIChzbyBzaWduYWxsaW5nIGFuZCBzdWNobGlrZSBzdGlsbCB3b3JrIGNvcnJlY3RseSkuCisKKworV2hlbiB0aGUgQ2FjaGVGaWxlcyBtb2R1bGUgaXMgYXNrZWQgdG8gYmluZCB0byBpdHMgY2FjaGUsIGl0OgorCisgKDEpIEZpbmRzIHRoZSBzZWN1cml0eSBsYWJlbCBhdHRhY2hlZCB0byB0aGUgcm9vdCBjYWNoZSBkaXJlY3RvcnkgYW5kIHVzZXMKKyAgICAgdGhhdCBhcyB0aGUgc2VjdXJpdHkgbGFiZWwgd2l0aCB3aGljaCBpdCB3aWxsIGNyZWF0ZSBmaWxlcy4gIEJ5IGRlZmF1bHQsCisgICAgIHRoaXMgaXM6CisKKwljYWNoZWZpbGVzX3Zhcl90CisKKyAoMikgRmluZHMgdGhlIHNlY3VyaXR5IGxhYmVsIG9mIHRoZSBwcm9jZXNzIHdoaWNoIGlzc3VlZCB0aGUgYmluZCByZXF1ZXN0CisgICAgIChwcmVzdW1lZCB0byBiZSB0aGUgY2FjaGVmaWxlc2QgZGFlbW9uKSwgd2hpY2ggYnkgZGVmYXVsdCB3aWxsIGJlOgorCisJY2FjaGVmaWxlc2RfdAorCisgICAgIGFuZCBhc2tzIExTTSB0byBzdXBwbHkgYSBzZWN1cml0eSBJRCBhcyB3aGljaCBpdCBzaG91bGQgYWN0IGdpdmVuIHRoZQorICAgICBkYWVtb24ncyBsYWJlbC4gIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBiZToKKworCWNhY2hlZmlsZXNfa2VybmVsX3QKKworICAgICBTRUxpbnV4IHRyYW5zaXRpb25zIHRoZSBkYWVtb24ncyBzZWN1cml0eSBJRCB0byB0aGUgbW9kdWxlJ3Mgc2VjdXJpdHkgSUQKKyAgICAgYmFzZWQgb24gYSBydWxlIG9mIHRoaXMgZm9ybSBpbiB0aGUgcG9saWN5LgorCisJdHlwZV90cmFuc2l0aW9uIDxkYWVtb24ncy1JRD4ga2VybmVsX3QgOiBwcm9jZXNzIDxtb2R1bGUncy1JRD47CisKKyAgICAgRm9yIGluc3RhbmNlOgorCisJdHlwZV90cmFuc2l0aW9uIGNhY2hlZmlsZXNkX3Qga2VybmVsX3QgOiBwcm9jZXNzIGNhY2hlZmlsZXNfa2VybmVsX3Q7CisKKworVGhlIG1vZHVsZSdzIHNlY3VyaXR5IElEIGdpdmVzIGl0IHBlcm1pc3Npb24gdG8gY3JlYXRlLCBtb3ZlIGFuZCByZW1vdmUgZmlsZXMKK2FuZCBkaXJlY3RvcmllcyBpbiB0aGUgY2FjaGUsIHRvIGZpbmQgYW5kIGFjY2VzcyBkaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gdGhlCitjYWNoZSwgdG8gc2V0IGFuZCBhY2Nlc3MgZXh0ZW5kZWQgYXR0cmlidXRlcyBvbiBjYWNoZSBvYmplY3RzLCBhbmQgdG8gcmVhZCBhbmQKK3dyaXRlIGZpbGVzIGluIHRoZSBjYWNoZS4KKworVGhlIGRhZW1vbidzIHNlY3VyaXR5IElEIGdpdmVzIGl0IG9ubHkgYSB2ZXJ5IHJlc3RyaWN0ZWQgc2V0IG9mIHBlcm1pc3Npb25zOiBpdAorbWF5IHNjYW4gZGlyZWN0b3JpZXMsIHN0YXQgZmlsZXMgYW5kIGVyYXNlIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gIEl0IG1heQorbm90IHJlYWQgb3Igd3JpdGUgZmlsZXMgaW4gdGhlIGNhY2hlLCBhbmQgc28gaXQgaXMgcHJlY2x1ZGVkIGZyb20gYWNjZXNzaW5nIHRoZQorZGF0YSBjYWNoZWQgdGhlcmVpbjsgbm9yIGlzIGl0IHBlcm1pdHRlZCB0byBjcmVhdGUgbmV3IGZpbGVzIGluIHRoZSBjYWNoZS4KKworCitUaGVyZSBhcmUgcG9saWN5IHNvdXJjZSBmaWxlcyBhdmFpbGFibGUgaW46CisKKwlodHRwOi8vcGVvcGxlLnJlZGhhdC5jb20vfmRob3dlbGxzL2ZzY2FjaGUvY2FjaGVmaWxlc2QtMC44LnRhci5iejIKKworYW5kIGxhdGVyIHZlcnNpb25zLiAgSW4gdGhhdCB0YXJiYWxsLCBzZWUgdGhlIGZpbGVzOgorCisJY2FjaGVmaWxlc2QudGUKKwljYWNoZWZpbGVzZC5mYworCWNhY2hlZmlsZXNkLmlmCisKK1RoZXkgYXJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgZGlyZWN0bHkgYnkgdGhlIFJQTS4KKworSWYgYSBub24tUlBNIGJhc2VkIHN5c3RlbSBpcyBiZWluZyB1c2VkLCB0aGVuIGNvcHkgdGhlIGFib3ZlIGZpbGVzIHRvIHRoZWlyIG93bgorZGlyZWN0b3J5IGFuZCBydW46CisKKwltYWtlIC1mIC91c3Ivc2hhcmUvc2VsaW51eC9kZXZlbC9NYWtlZmlsZQorCXNlbW9kdWxlIC1pIGNhY2hlZmlsZXNkLnBwCisKK1lvdSB3aWxsIG5lZWQgY2hlY2twb2xpY3kgYW5kIHNlbGludXgtcG9saWN5LWRldmVsIGluc3RhbGxlZCBwcmlvciB0byB0aGUKK2J1aWxkLgorCisKK0J5IGRlZmF1bHQsIHRoZSBjYWNoZSBpcyBsb2NhdGVkIGluIC92YXIvZnNjYWNoZSwgYnV0IGlmIGl0IGlzIGRlc2lyYWJsZSB0aGF0CitpdCBzaG91bGQgYmUgZWxzZXdoZXJlLCB0aGFuIGVpdGhlciB0aGUgYWJvdmUgcG9saWN5IGZpbGVzIG11c3QgYmUgYWx0ZXJlZCwgb3IKK2FuIGF1eGlsaWFyeSBwb2xpY3kgbXVzdCBiZSBpbnN0YWxsZWQgdG8gbGFiZWwgdGhlIGFsdGVybmF0ZSBsb2NhdGlvbiBvZiB0aGUKK2NhY2hlLgorCitGb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBhZGQgYW4gYXV4aWxpYXJ5IHBvbGljeSB0byBlbmFibGUgdGhlIGNhY2hlIHRvIGJlCitsb2NhdGVkIGVsc2V3aGVyZSB3aGVuIFNFTGludXggaXMgaW4gZW5mb3JjaW5nIG1vZGUsIHBsZWFzZSBzZWU6CisKKwkvdXNyL3NoYXJlL2RvYy9jYWNoZWZpbGVzZC0qL21vdmUtY2FjaGUudHh0CisKK1doZW4gdGhlIGNhY2hlZmlsZXNkIHJwbSBpcyBpbnN0YWxsZWQ7IGFsdGVybmF0aXZlbHksIHRoZSBkb2N1bWVudCBjYW4gYmUgZm91bmQKK2luIHRoZSBzb3VyY2VzLgorCisKKz09PT09PT09PT09PT09PT09PQorQSBOT1RFIE9OIFNFQ1VSSVRZCis9PT09PT09PT09PT09PT09PT0KKworQ2FjaGVGaWxlcyBtYWtlcyB1c2Ugb2YgdGhlIHNwbGl0IHNlY3VyaXR5IGluIHRoZSB0YXNrX3N0cnVjdC4gIEl0IGFsbG9jYXRlcworaXRzIG93biB0YXNrX3NlY3VyaXR5IHN0cnVjdHVyZSwgYW5kIHJlZGlyZWN0cyBjdXJyZW50LT5hY3RfYXMgdG8gcG9pbnQgdG8gaXQKK3doZW4gaXQgYWN0cyBvbiBiZWhhbGYgb2YgYW5vdGhlciBwcm9jZXNzLCBpbiB0aGF0IHByb2Nlc3MncyBjb250ZXh0LgorCitUaGUgcmVhc29uIGl0IGRvZXMgdGhpcyBpcyB0aGF0IGl0IGNhbGxzIHZmc19ta2RpcigpIGFuZCBzdWNobGlrZSByYXRoZXIgdGhhbgorYnlwYXNzaW5nIHNlY3VyaXR5IGFuZCBjYWxsaW5nIGlub2RlIG9wcyBkaXJlY3RseS4gIFRoZXJlZm9yZSB0aGUgVkZTIGFuZCBMU00KK21heSBkZW55IHRoZSBDYWNoZUZpbGVzIGFjY2VzcyB0byB0aGUgY2FjaGUgZGF0YSBiZWNhdXNlIHVuZGVyIHNvbWUKK2NpcmN1bXN0YW5jZXMgdGhlIGNhY2hpbmcgY29kZSBpcyBydW5uaW5nIGluIHRoZSBzZWN1cml0eSBjb250ZXh0IG9mIHdoYXRldmVyCitwcm9jZXNzIGlzc3VlZCB0aGUgb3JpZ2luYWwgc3lzY2FsbCBvbiB0aGUgbmV0ZnMuCisKK0Z1cnRoZXJtb3JlLCBzaG91bGQgQ2FjaGVGaWxlcyBjcmVhdGUgYSBmaWxlIG9yIGRpcmVjdG9yeSwgdGhlIHNlY3VyaXR5CitwYXJhbWV0ZXJzIHdpdGggdGhhdCBvYmplY3QgaXMgY3JlYXRlZCAoVUlELCBHSUQsIHNlY3VyaXR5IGxhYmVsKSB3b3VsZCBiZQorZGVyaXZlZCBmcm9tIHRoYXQgcHJvY2VzcyB0aGF0IGlzc3VlZCB0aGUgc3lzdGVtIGNhbGwsIHRodXMgcG90ZW50aWFsbHkKK3ByZXZlbnRpbmcgb3RoZXIgcHJvY2Vzc2VzIGZyb20gYWNjZXNzaW5nIHRoZSBjYWNoZSAtIGluY2x1ZGluZyBDYWNoZUZpbGVzJ3MKK2NhY2hlIG1hbmFnZW1lbnQgZGFlbW9uIChjYWNoZWZpbGVzZCkuCisKK1doYXQgaXMgcmVxdWlyZWQgaXMgdG8gdGVtcG9yYXJpbHkgb3ZlcnJpZGUgdGhlIHNlY3VyaXR5IG9mIHRoZSBwcm9jZXNzIHRoYXQKK2lzc3VlZCB0aGUgc3lzdGVtIGNhbGwuICBXZSBjYW4ndCwgaG93ZXZlciwganVzdCBkbyBhbiBpbi1wbGFjZSBjaGFuZ2Ugb2YgdGhlCitzZWN1cml0eSBkYXRhIGFzIHRoYXQgYWZmZWN0cyB0aGUgcHJvY2VzcyBhcyBhbiBvYmplY3QsIG5vdCBqdXN0IGFzIGEgc3ViamVjdC4KK1RoaXMgbWVhbnMgaXQgbWF5IGxvc2Ugc2lnbmFscyBvciBwdHJhY2UgZXZlbnRzIGZvciBleGFtcGxlLCBhbmQgYWZmZWN0cyB3aGF0Cit0aGUgcHJvY2VzcyBsb29rcyBsaWtlIGluIC9wcm9jLgorCitTbyBDYWNoZUZpbGVzIG1ha2VzIHVzZSBvZiBhIGxvZ2ljYWwgc3BsaXQgaW4gdGhlIHNlY3VyaXR5IGJldHdlZW4gdGhlCitvYmplY3RpdmUgc2VjdXJpdHkgKHRhc2stPnNlYykgYW5kIHRoZSBzdWJqZWN0aXZlIHNlY3VyaXR5ICh0YXNrLT5hY3RfYXMpLiAgVGhlCitvYmplY3RpdmUgc2VjdXJpdHkgaG9sZHMgdGhlIGludHJpbnNpYyBzZWN1cml0eSBwcm9wZXJ0aWVzIG9mIGEgcHJvY2VzcyBhbmQgaXMKK25ldmVyIG92ZXJyaWRkZW4uICBUaGlzIGlzIHdoYXQgYXBwZWFycyBpbiAvcHJvYywgYW5kIGlzIHdoYXQgaXMgdXNlZCB3aGVuIGEKK3Byb2Nlc3MgaXMgdGhlIHRhcmdldCBvZiBhbiBvcGVyYXRpb24gYnkgc29tZSBvdGhlciBwcm9jZXNzIChTSUdLSUxMIGZvcgorZXhhbXBsZSkuCisKK1RoZSBzdWJqZWN0aXZlIHNlY3VyaXR5IGhvbGRzIHRoZSBhY3RpdmUgc2VjdXJpdHkgcHJvcGVydGllcyBvZiBhIHByb2Nlc3MsIGFuZAorbWF5IGJlIG92ZXJyaWRkZW4uICBUaGlzIGlzIG5vdCBzZWVuIGV4dGVybmFsbHksIGFuZCBpcyB1c2VkIHdoYW4gYSBwcm9jZXNzCithY3RzIHVwb24gYW5vdGhlciBvYmplY3QsIGZvciBleGFtcGxlIFNJR0tJTExpbmcgYW5vdGhlciBwcm9jZXNzIG9yIG9wZW5pbmcgYQorZmlsZS4KKworTFNNIGhvb2tzIGV4aXN0IHRoYXQgYWxsb3cgU0VMaW51eCAob3IgU21hY2sgb3Igd2hhdGV2ZXIpIHRvIHJlamVjdCBhIHJlcXVlc3QKK2ZvciBDYWNoZUZpbGVzIHRvIHJ1biBpbiBhIGNvbnRleHQgb2YgYSBzcGVjaWZpYyBzZWN1cml0eSBsYWJlbCwgb3IgdG8gY3JlYXRlCitmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCBhbm90aGVyIHNlY3VyaXR5IGxhYmVsLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09CitTVEFUSVNUSUNBTCBJTkZPUk1BVElPTgorPT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgRlMtQ2FjaGUgaXMgY29tcGlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbiBlbmFibGVkOgorCisJQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNPXkKKwordGhlbiBpdCB3aWxsIGdhdGhlciBjZXJ0YWluIHN0YXRpc3RpY3MgYW5kIGRpc3BsYXkgdGhlbSB0aHJvdWdoIGEgcHJvYyBmaWxlLgorCisgKCopIC9wcm9jL2ZzL2NhY2hlZmlsZXMvaGlzdG9ncmFtCisKKwljYXQgL3Byb2MvZnMvY2FjaGVmaWxlcy9oaXN0b2dyYW0KKwlKSUZTICBTRUNTICBMT09LVVBTICAgTUtESVJTICAgIENSRUFURVMKKwk9PT09PSA9PT09PSA9PT09PT09PT0gPT09PT09PT09ID09PT09PT09PQorCisgICAgIFRoaXMgc2hvd3MgdGhlIGJyZWFrZG93biBvZiB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggYW1vdW50IG9mIHRpbWUKKyAgICAgYmV0d2VlbiAwIGppZmZpZXMgYW5kIEhaLTEgamlmZmllcyBhIHZhcmlldHkgb2YgdGFza3MgdG9vayB0byBydW4uICBUaGUKKyAgICAgY29sdW1ucyBhcmUgYXMgZm9sbG93czoKKworCUNPTFVNTgkJVElNRSBNRUFTVVJFTUVOVAorCT09PT09PT0JCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlMT09LVVBTCQlMZW5ndGggb2YgdGltZSB0byBwZXJmb3JtIGEgbG9va3VwIG9uIHRoZSBiYWNraW5nIGZzCisJTUtESVJTCQlMZW5ndGggb2YgdGltZSB0byBwZXJmb3JtIGEgbWtkaXIgb24gdGhlIGJhY2tpbmcgZnMKKwlDUkVBVEVTCQlMZW5ndGggb2YgdGltZSB0byBwZXJmb3JtIGEgY3JlYXRlIG9uIHRoZSBiYWNraW5nIGZzCisKKyAgICAgRWFjaCByb3cgc2hvd3MgdGhlIG51bWJlciBvZiBldmVudHMgdGhhdCB0b29rIGEgcGFydGljdWxhciByYW5nZSBvZiB0aW1lcy4KKyAgICAgRWFjaCBzdGVwIGlzIDEgamlmZnkgaW4gc2l6ZS4gIFRoZSBKSUZTIGNvbHVtbiBpbmRpY2F0ZXMgdGhlIHBhcnRpY3VsYXIKKyAgICAgamlmZnkgcmFuZ2UgY292ZXJlZCwgYW5kIHRoZSBTRUNTIGZpZWxkIHRoZSBlcXVpdmFsZW50IG51bWJlciBvZiBzZWNvbmRzLgorCisKKz09PT09PT09PQorREVCVUdHSU5HCis9PT09PT09PT0KKworSWYgQ09ORklHX0NBQ0hFRklMRVNfREVCVUcgaXMgZW5hYmxlZCwgdGhlIENhY2hlRmlsZXMgZmFjaWxpdHkgY2FuIGhhdmUgcnVudGltZQorZGVidWdnaW5nIGVuYWJsZWQgYnkgYWRqdXN0aW5nIHRoZSB2YWx1ZSBpbjoKKworCS9zeXMvbW9kdWxlL2NhY2hlZmlsZXMvcGFyYW1ldGVycy9kZWJ1ZworCitUaGlzIGlzIGEgYml0bWFzayBvZiBkZWJ1Z2dpbmcgc3RyZWFtcyB0byBlbmFibGU6CisKKwlCSVQJVkFMVUUJU1RSRUFNCQkJCVBPSU5UCisJPT09PT09PQk9PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0KKwkwCTEJR2VuZXJhbAkJCQlGdW5jdGlvbiBlbnRyeSB0cmFjZQorCTEJMgkJCQkJRnVuY3Rpb24gZXhpdCB0cmFjZQorCTIJNAkJCQkJR2VuZXJhbAorCitUaGUgYXBwcm9wcmlhdGUgc2V0IG9mIHZhbHVlcyBzaG91bGQgYmUgT1InZCB0b2dldGhlciBhbmQgdGhlIHJlc3VsdCB3cml0dGVuIHRvCit0aGUgY29udHJvbCBmaWxlLiAgRm9yIGV4YW1wbGU6CisKKwllY2hvICQoKDF8NHw4KSkgPi9zeXMvbW9kdWxlL2NhY2hlZmlsZXMvcGFyYW1ldGVycy9kZWJ1ZworCit3aWxsIHR1cm4gb24gYWxsIGZ1bmN0aW9uIGVudHJ5IGRlYnVnZ2luZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTk0Yjk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0CkBAIC0wLDAgKzEsMzMzIEBACisJCQkgID09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkgIEdlbmVyYWwgRmlsZXN5c3RlbSBDYWNoaW5nCisJCQkgID09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT09PT09CitPVkVSVklFVworPT09PT09PT0KKworVGhpcyBmYWNpbGl0eSBpcyBhIGdlbmVyYWwgcHVycG9zZSBjYWNoZSBmb3IgbmV0d29yayBmaWxlc3lzdGVtcywgdGhvdWdoIGl0Citjb3VsZCBiZSB1c2VkIGZvciBjYWNoaW5nIG90aGVyIHRoaW5ncyBzdWNoIGFzIElTTzk2NjAgZmlsZXN5c3RlbXMgdG9vLgorCitGUy1DYWNoZSBtZWRpYXRlcyBiZXR3ZWVuIGNhY2hlIGJhY2tlbmRzIChzdWNoIGFzIENhY2hlRlMpIGFuZCBuZXR3b3JrCitmaWxlc3lzdGVtczoKKworCSstLS0tLS0tLS0rCisJfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisJfCAgIE5GUyAgIHwtLSsgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisJfCAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICstLT58ICAgQ2FjaGVGUyAgICB8CisJKy0tLS0tLS0tLSsgIHwgICArLS0tLS0tLS0tLSsgIHwgICB8ICAvZGV2L2hkYTUgICB8CisJICAgICAgICAgICAgIHwgICB8ICAgICAgICAgIHwgIHwgICArLS0tLS0tLS0tLS0tLS0rCisJKy0tLS0tLS0tLSsgICstLT58ICAgICAgICAgIHwgIHwKKwl8ICAgICAgICAgfCAgICAgIHwgICAgICAgICAgfC0tKworCXwgICBBRlMgICB8LS0tLS0+fCBGUy1DYWNoZSB8CisJfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgIHwtLSsKKwkrLS0tLS0tLS0tKyAgKy0tPnwgICAgICAgICAgfCAgfAorCSAgICAgICAgICAgICB8ICAgfCAgICAgICAgICB8ICB8ICAgKy0tLS0tLS0tLS0tLS0tKworCSstLS0tLS0tLS0rICB8ICAgKy0tLS0tLS0tLS0rICB8ICAgfCAgICAgICAgICAgICAgfAorCXwgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICArLS0+fCAgQ2FjaGVGaWxlcyAgfAorCXwgIElTT0ZTICB8LS0rICAgICAgICAgICAgICAgICAgICAgfCAgL3Zhci9jYWNoZSAgfAorCXwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworCSstLS0tLS0tLS0rCisKK09yIHRvIGxvb2sgYXQgaXQgYW5vdGhlciB3YXksIEZTLUNhY2hlIGlzIGEgbW9kdWxlIHRoYXQgcHJvdmlkZXMgYSBjYWNoaW5nCitmYWNpbGl0eSB0byBhIG5ldHdvcmsgZmlsZXN5c3RlbSBzdWNoIHRoYXQgdGhlIGNhY2hlIGlzIHRyYW5zcGFyZW50IHRvIHRoZQordXNlcjoKKworCSstLS0tLS0tLS0rCisJfCAgICAgICAgIHwKKwl8IFNlcnZlciAgfAorCXwgICAgICAgICB8CisJKy0tLS0tLS0tLSsKKwkgICAgIHwgICAgICAgICAgICAgICAgICBORVRXT1JLCisJfn5+fn58fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCSAgICAgfAorCSAgICAgfCAgICAgICAgICAgKy0tLS0tLS0tLS0rCisJICAgICBWICAgICAgICAgICB8ICAgICAgICAgIHwKKwkrLS0tLS0tLS0tKyAgICAgIHwgICAgICAgICAgfAorCXwgICAgICAgICB8ICAgICAgfCAgICAgICAgICB8CisJfCAgIE5GUyAgIHwtLS0tLT58IEZTLUNhY2hlIHwKKwl8ICAgICAgICAgfCAgICAgIHwgICAgICAgICAgfC0tKworCSstLS0tLS0tLS0rICAgICAgfCAgICAgICAgICB8ICB8ICAgKy0tLS0tLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tLS0tLSsKKwkgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgfCAgIHwgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgICAgICB8CisJICAgICBWICAgICAgICAgICArLS0tLS0tLS0tLSsgICstLT58ICBDYWNoZUZpbGVzICB8LS0+fCAgRXh0MyAgICAgICAgfAorCSstLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgfCAgL3Zhci9jYWNoZSAgfCAgIHwgIC9kZXYvc2RhNiAgIHwKKwl8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLS0tLS0rCisJfCAgIFZGUyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeCisJfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisJKy0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICB8CisJICAgICB8ICAgICAgICAgICAgICAgICAgS0VSTkVMIFNQQUNFICAgICAgICAgICAgICAgICAgICAgIHwgICAgICB8CisJfn5+fn58fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnx+fn5+fn58fn5+fgorCSAgICAgfCAgICAgICAgICAgICAgICAgIFVTRVIgU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfAorCSAgICAgViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfAorCSstLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKwl8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisJfCBQcm9jZXNzIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYWNoZWZpbGVzZCAgfAorCXwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKwkrLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisKKworRlMtQ2FjaGUgZG9lcyBub3QgZm9sbG93IHRoZSBpZGVhIG9mIGNvbXBsZXRlbHkgbG9hZGluZyBldmVyeSBuZXRmcyBmaWxlCitvcGVuZWQgaW4gaXRzIGVudGlyZXR5IGludG8gYSBjYWNoZSBiZWZvcmUgcGVybWl0dGluZyBpdCB0byBiZSBhY2Nlc3NlZCBhbmQKK3RoZW4gc2VydmluZyB0aGUgcGFnZXMgb3V0IG9mIHRoYXQgY2FjaGUgcmF0aGVyIHRoYW4gdGhlIG5ldGZzIGlub2RlIGJlY2F1c2U6CisKKyAoMSkgSXQgbXVzdCBiZSBwcmFjdGljYWwgdG8gb3BlcmF0ZSB3aXRob3V0IGEgY2FjaGUuCisKKyAoMikgVGhlIHNpemUgb2YgYW55IGFjY2Vzc2libGUgZmlsZSBtdXN0IG5vdCBiZSBsaW1pdGVkIHRvIHRoZSBzaXplIG9mIHRoZQorICAgICBjYWNoZS4KKworICgzKSBUaGUgY29tYmluZWQgc2l6ZSBvZiBhbGwgb3BlbmVkIGZpbGVzICh0aGlzIGluY2x1ZGVzIG1hcHBlZCBsaWJyYXJpZXMpCisgICAgIG11c3Qgbm90IGJlIGxpbWl0ZWQgdG8gdGhlIHNpemUgb2YgdGhlIGNhY2hlLgorCisgKDQpIFRoZSB1c2VyIHNob3VsZCBub3QgYmUgZm9yY2VkIHRvIGRvd25sb2FkIGFuIGVudGlyZSBmaWxlIGp1c3QgdG8gZG8gYQorICAgICBvbmUtb2ZmIGFjY2VzcyBvZiBhIHNtYWxsIHBvcnRpb24gb2YgaXQgKHN1Y2ggYXMgbWlnaHQgYmUgZG9uZSB3aXRoIHRoZQorICAgICAiZmlsZSIgcHJvZ3JhbSkuCisKK0l0IGluc3RlYWQgc2VydmVzIHRoZSBjYWNoZSBvdXQgaW4gUEFHRV9TSVpFIGNodW5rcyBhcyBhbmQgd2hlbiByZXF1ZXN0ZWQgYnkKK3RoZSBuZXRmcygncykgdXNpbmcgaXQuCisKKworRlMtQ2FjaGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmYWNpbGl0aWVzOgorCisgKDEpIE1vcmUgdGhhbiBvbmUgY2FjaGUgY2FuIGJlIHVzZWQgYXQgb25jZS4gIENhY2hlcyBjYW4gYmUgc2VsZWN0ZWQKKyAgICAgZXhwbGljaXRseSBieSB1c2Ugb2YgdGFncy4KKworICgyKSBDYWNoZXMgY2FuIGJlIGFkZGVkIC8gcmVtb3ZlZCBhdCBhbnkgdGltZS4KKworICgzKSBUaGUgbmV0ZnMgaXMgcHJvdmlkZWQgd2l0aCBhbiBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgZWl0aGVyIHBhcnR5IHRvCisgICAgIHdpdGhkcmF3IGNhY2hpbmcgZmFjaWxpdGllcyBmcm9tIGEgZmlsZSAocmVxdWlyZWQgZm9yICgyKSkuCisKKyAoNCkgVGhlIGludGVyZmFjZSB0byB0aGUgbmV0ZnMgcmV0dXJucyBhcyBmZXcgZXJyb3JzIGFzIHBvc3NpYmxlLCBwcmVmZXJyaW5nCisgICAgIHJhdGhlciB0byBsZXQgdGhlIG5ldGZzIHJlbWFpbiBvYmxpdmlvdXMuCisKKyAoNSkgQ29va2llcyBhcmUgdXNlZCB0byByZXByZXNlbnQgaW5kaWNlcywgZmlsZXMgYW5kIG90aGVyIG9iamVjdHMgdG8gdGhlCisgICAgIG5ldGZzLiAgVGhlIHNpbXBsZXN0IGNvb2tpZSBpcyBqdXN0IGEgTlVMTCBwb2ludGVyIC0gaW5kaWNhdGluZyBub3RoaW5nCisgICAgIGNhY2hlZCB0aGVyZS4KKworICg2KSBUaGUgbmV0ZnMgaXMgYWxsb3dlZCB0byBwcm9wb3NlIC0gZHluYW1pY2FsbHkgLSBhbnkgaW5kZXggaGllcmFyY2h5IGl0CisgICAgIGRlc2lyZXMsIHRob3VnaCBpdCBtdXN0IGJlIGF3YXJlIHRoYXQgdGhlIGluZGV4IHNlYXJjaCBmdW5jdGlvbiBpcworICAgICByZWN1cnNpdmUsIHN0YWNrIHNwYWNlIGlzIGxpbWl0ZWQsIGFuZCBpbmRpY2VzIGNhbiBvbmx5IGJlIGNoaWxkcmVuIG9mCisgICAgIGluZGljZXMuCisKKyAoNykgRGF0YSBJL08gaXMgZG9uZSBkaXJlY3QgdG8gYW5kIGZyb20gdGhlIG5ldGZzJ3MgcGFnZXMuICBUaGUgbmV0ZnMKKyAgICAgaW5kaWNhdGVzIHRoYXQgcGFnZSBBIGlzIGF0IGluZGV4IEIgb2YgdGhlIGRhdGEtZmlsZSByZXByZXNlbnRlZCBieSBjb29raWUKKyAgICAgQywgYW5kIHRoYXQgaXQgc2hvdWxkIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBjYWNoZSBiYWNrZW5kIG1heSBvciBtYXkKKyAgICAgbm90IHN0YXJ0IEkvTyBvbiB0aGF0IHBhZ2UsIGJ1dCBpZiBpdCBkb2VzLCBhIG5ldGZzIGNhbGxiYWNrIHdpbGwgYmUKKyAgICAgaW52b2tlZCB0byBpbmRpY2F0ZSBjb21wbGV0aW9uLiAgVGhlIEkvTyBtYXkgYmUgZWl0aGVyIHN5bmNocm9ub3VzIG9yCisgICAgIGFzeW5jaHJvbm91cy4KKworICg4KSBDb29raWVzIGNhbiBiZSAicmV0aXJlZCIgdXBvbiByZWxlYXNlLiAgQXQgdGhpcyBwb2ludCBGUy1DYWNoZSB3aWxsIG1hcmsKKyAgICAgdGhlbSBhcyBvYnNvbGV0ZSBhbmQgdGhlIGluZGV4IGhpZXJhcmNoeSByb290ZWQgYXQgdGhhdCBwb2ludCB3aWxsIGdldAorICAgICByZWN5Y2xlZC4KKworICg5KSBUaGUgbmV0ZnMgcHJvdmlkZXMgYSAibWF0Y2giIGZ1bmN0aW9uIGZvciBpbmRleCBzZWFyY2hlcy4gIEluIGFkZGl0aW9uIHRvCisgICAgIHNheWluZyB3aGV0aGVyIGEgbWF0Y2ggd2FzIG1hZGUgb3Igbm90LCB0aGlzIGNhbiBhbHNvIHNwZWNpZnkgdGhhdCBhbgorICAgICBlbnRyeSBzaG91bGQgYmUgdXBkYXRlZCBvciBkZWxldGVkLgorCisoMTApIEFzIG11Y2ggYXMgcG9zc2libGUgaXMgZG9uZSBhc3luY2hyb25vdXNseS4KKworCitGUy1DYWNoZSBtYWludGFpbnMgYSB2aXJ0dWFsIGluZGV4aW5nIHRyZWUgaW4gd2hpY2ggYWxsIGluZGljZXMsIGZpbGVzLCBvYmplY3RzCithbmQgcGFnZXMgYXJlIGtlcHQuICBCaXRzIG9mIHRoaXMgdHJlZSBtYXkgYWN0dWFsbHkgcmVzaWRlIGluIG9uZSBvciBtb3JlCitjYWNoZXMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0RFRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIE5GUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRlMKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKKyAgICAgICAgaG9tZWRpciAgICAgICAgICAgICAgICAgICAgIG1pcnJvciAgICAgICAgICBhZnMub3JnICAgcmVkaGF0LmNvbQorICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKy0tLS0tLS0tLS0tLSsgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICArLS0tLS0tLS0tLSsKKyAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgIHwKKyAgIDAwMDAxICAgICAgICAwMDAwMiAgICAgICAwMDAwNyAgICAgICAgICAgMDAxMjUgICAgICAgIHZvbDAwMDAxICAgdm9sMDAwMDIKKyAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tKy0tLSsgICAgICstLS0tLSsgICAgICArLS0tKyAgICAgICstLS0tLS0rLS0tLS0tKyAgICAgICAgICAgICstLS0tLSstLS0tKworIHwgICB8ICAgfCAgICAgfCAgICAgfCAgICAgIHwgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICAgfCAgICAgfCAgICB8CitQRzAgUEcxIFBHMiAgIFBHMCAgWEFUVFIgICBQRzAgUEcxICAgRElSRU5UIERJUkVOVCBESVJFTlQgICAgICAgIFIvVyAgIFIvTyAgQmFrCisgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFBHMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAxICAgMDAwMDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0rLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEcwIFBHMSBQRzIKKworSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHlvdSBjYW4gc2VlIHR3byBuZXRmcydzIGJlaW5nIGJhY2tlZDogTkZTIGFuZCBBRlMuICBUaGVzZQoraGF2ZSBkaWZmZXJlbnQgaW5kZXggaGllcmFyY2hpZXM6CisKKyAoKikgVGhlIE5GUyBwcmltYXJ5IGluZGV4IGNvbnRhaW5zIHBlci1zZXJ2ZXIgaW5kaWNlcy4gIEVhY2ggc2VydmVyIGluZGV4IGlzCisgICAgIGluZGV4ZWQgYnkgTkZTIGZpbGUgaGFuZGxlcyB0byBnZXQgZGF0YSBmaWxlIG9iamVjdHMuICBFYWNoIGRhdGEgZmlsZQorICAgICBvYmplY3RzIGNhbiBoYXZlIGFuIGFycmF5IG9mIHBhZ2VzLCBidXQgbWF5IGFsc28gaGF2ZSBmdXJ0aGVyIGNoaWxkCisgICAgIG9iamVjdHMsIHN1Y2ggYXMgZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgZGlyZWN0b3J5IGVudHJpZXMuICBFeHRlbmRlZAorICAgICBhdHRyaWJ1dGUgb2JqZWN0cyB0aGVtc2VsdmVzIGhhdmUgcGFnZS1hcnJheSBjb250ZW50cy4KKworICgqKSBUaGUgQUZTIHByaW1hcnkgaW5kZXggY29udGFpbnMgcGVyLWNlbGwgaW5kaWNlcy4gIEVhY2ggY2VsbCBpbmRleCBjb250YWlucworICAgICBwZXItbG9naWNhbC12b2x1bWUgaW5kaWNlcy4gIEVhY2ggb2Ygdm9sdW1lIGluZGV4IGNvbnRhaW5zIHVwIHRvIHRocmVlCisgICAgIGluZGljZXMgZm9yIHRoZSByZWFkLXdyaXRlLCByZWFkLW9ubHkgYW5kIGJhY2t1cCBtaXJyb3JzIG9mIHRob3NlIHZvbHVtZXMuCisgICAgIEVhY2ggb2YgdGhlc2UgY29udGFpbnMgdm5vZGUgZGF0YSBmaWxlIG9iamVjdHMsIGVhY2ggb2Ygd2hpY2ggY29udGFpbnMgYW4KKyAgICAgYXJyYXkgb2YgcGFnZXMuCisKK1RoZSB2ZXJ5IHRvcCBpbmRleCBpcyB0aGUgRlMtQ2FjaGUgbWFzdGVyIGluZGV4IGluIHdoaWNoIGluZGl2aWR1YWwgbmV0ZnMncworaGF2ZSBlbnRyaWVzLgorCitBbnkgaW5kZXggb2JqZWN0IG1heSByZXNpZGUgaW4gbW9yZSB0aGFuIG9uZSBjYWNoZSwgcHJvdmlkZWQgaXQgb25seSBoYXMgaW5kZXgKK2NoaWxkcmVuLiAgQW55IGluZGV4IHdpdGggbm9uLWluZGV4IG9iamVjdCBjaGlsZHJlbiB3aWxsIGJlIGFzc3VtZWQgdG8gb25seQorcmVzaWRlIGluIG9uZSBjYWNoZS4KKworCitUaGUgbmV0ZnMgQVBJIHRvIEZTLUNhY2hlIGNhbiBiZSBmb3VuZCBpbjoKKworCURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0CisKK1RoZSBjYWNoZSBiYWNrZW5kIEFQSSB0byBGUy1DYWNoZSBjYW4gYmUgZm91bmQgaW46CisKKwlEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0CisKK0EgZGVzY3JpcHRpb24gb2YgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBhbmQgb2JqZWN0IHN0YXRlIG1hY2hpbmUgY2FuIGJlCitmb3VuZCBpbjoKKworCURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9vYmplY3QudHh0CisKKworPT09PT09PT09PT09PT09PT09PT09PT0KK1NUQVRJU1RJQ0FMIElORk9STUFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PQorCitJZiBGUy1DYWNoZSBpcyBjb21waWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBlbmFibGVkOgorCisJQ09ORklHX0ZTQ0FDSEVfU1RBVFM9eQorCUNPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTT15CisKK3RoZW4gaXQgd2lsbCBnYXRoZXIgY2VydGFpbiBzdGF0aXN0aWNzIGFuZCBkaXNwbGF5IHRoZW0gdGhyb3VnaCBhIG51bWJlciBvZgorcHJvYyBmaWxlcy4KKworICgqKSAvcHJvYy9mcy9mc2NhY2hlL3N0YXRzCisKKyAgICAgVGhpcyBzaG93cyBjb3VudHMgb2YgYSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgY2FuIGhhcHBlbiBpbiBGUy1DYWNoZToKKworCUNMQVNTCUVWRU5UCU1FQU5JTkcKKwk9PT09PT09CT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUNvb2tpZXMJaWR4PU4JTnVtYmVyIG9mIGluZGV4IGNvb2tpZXMgYWxsb2NhdGVkCisJCWRhdD1OCU51bWJlciBvZiBkYXRhIHN0b3JhZ2UgY29va2llcyBhbGxvY2F0ZWQKKwkJc3BjPU4JTnVtYmVyIG9mIHNwZWNpYWwgY29va2llcyBhbGxvY2F0ZWQKKwlPYmplY3RzCWFsYz1OCU51bWJlciBvZiBvYmplY3RzIGFsbG9jYXRlZAorCQluYWw9TglOdW1iZXIgb2Ygb2JqZWN0IGFsbG9jYXRpb24gZmFpbHVyZXMKKwkJYXZsPU4JTnVtYmVyIG9mIG9iamVjdHMgdGhhdCByZWFjaGVkIHRoZSBhdmFpbGFibGUgc3RhdGUKKwkJZGVkPU4JTnVtYmVyIG9mIG9iamVjdHMgdGhhdCByZWFjaGVkIHRoZSBkZWFkIHN0YXRlCisJQ2hrQXV4CW5vbj1OCU51bWJlciBvZiBvYmplY3RzIHRoYXQgZGlkbid0IGhhdmUgYSBjb2hlcmVuY3kgY2hlY2sKKwkJb2s9TglOdW1iZXIgb2Ygb2JqZWN0cyB0aGF0IHBhc3NlZCBhIGNvaGVyZW5jeSBjaGVjaworCQl1cGQ9TglOdW1iZXIgb2Ygb2JqZWN0cyB0aGF0IG5lZWRlZCBhIGNvaGVyZW5jeSBkYXRhIHVwZGF0ZQorCQlvYnM9TglOdW1iZXIgb2Ygb2JqZWN0cyB0aGF0IHdlcmUgZGVjbGFyZWQgb2Jzb2xldGUKKwlQYWdlcwltcms9TglOdW1iZXIgb2YgcGFnZXMgbWFya2VkIGFzIGJlaW5nIGNhY2hlZAorCQl1bmM9TglOdW1iZXIgb2YgdW5jYWNoZSBwYWdlIHJlcXVlc3RzIHNlZW4KKwlBY3F1aXJlCW49TglOdW1iZXIgb2YgYWNxdWlyZSBjb29raWUgcmVxdWVzdHMgc2VlbgorCQludWw9TglOdW1iZXIgb2YgYWNxIHJlcXMgZ2l2ZW4gYSBOVUxMIHBhcmVudAorCQlub2M9TglOdW1iZXIgb2YgYWNxIHJlcXMgcmVqZWN0ZWQgZHVlIHRvIG5vIGNhY2hlIGF2YWlsYWJsZQorCQlvaz1OCU51bWJlciBvZiBhY3EgcmVxcyBzdWNjZWVkZWQKKwkJbmJmPU4JTnVtYmVyIG9mIGFjcSByZXFzIHJlamVjdGVkIGR1ZSB0byBlcnJvcgorCQlvb209TglOdW1iZXIgb2YgYWNxIHJlcXMgZmFpbGVkIG9uIEVOT01FTQorCUxvb2t1cHMJbj1OCU51bWJlciBvZiBsb29rdXAgY2FsbHMgbWFkZSBvbiBjYWNoZSBiYWNrZW5kcworCQluZWc9TglOdW1iZXIgb2YgbmVnYXRpdmUgbG9va3VwcyBtYWRlCisJCXBvcz1OCU51bWJlciBvZiBwb3NpdGl2ZSBsb29rdXBzIG1hZGUKKwkJY3J0PU4JTnVtYmVyIG9mIG9iamVjdHMgY3JlYXRlZCBieSBsb29rdXAKKwlVcGRhdGVzCW49TglOdW1iZXIgb2YgdXBkYXRlIGNvb2tpZSByZXF1ZXN0cyBzZWVuCisJCW51bD1OCU51bWJlciBvZiB1cGQgcmVxcyBnaXZlbiBhIE5VTEwgcGFyZW50CisJCXJ1bj1OCU51bWJlciBvZiB1cGQgcmVxcyBncmFudGVkIENQVSB0aW1lCisJUmVsaW5xcwluPU4JTnVtYmVyIG9mIHJlbGlucXVpc2ggY29va2llIHJlcXVlc3RzIHNlZW4KKwkJbnVsPU4JTnVtYmVyIG9mIHJscSByZXFzIGdpdmVuIGEgTlVMTCBwYXJlbnQKKwkJd2NyPU4JTnVtYmVyIG9mIHJscSByZXFzIHdhaXRlZCBvbiBjb21wbGV0aW9uIG9mIGNyZWF0aW9uCisJQXR0ckNoZwluPU4JTnVtYmVyIG9mIGF0dHJpYnV0ZSBjaGFuZ2VkIHJlcXVlc3RzIHNlZW4KKwkJb2s9TglOdW1iZXIgb2YgYXR0ciBjaGFuZ2VkIHJlcXVlc3RzIHF1ZXVlZAorCQluYmY9TglOdW1iZXIgb2YgYXR0ciBjaGFuZ2VkIHJlamVjdGVkIC1FTk9CVUZTCisJCW9vbT1OCU51bWJlciBvZiBhdHRyIGNoYW5nZWQgZmFpbGVkIC1FTk9NRU0KKwkJcnVuPU4JTnVtYmVyIG9mIGF0dHIgY2hhbmdlZCBvcHMgZ2l2ZW4gQ1BVIHRpbWUKKwlBbGxvY3MJbj1OCU51bWJlciBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHNlZW4KKwkJb2s9TglOdW1iZXIgb2Ygc3VjY2Vzc2Z1bCBhbGxvYyByZXFzCisJCXd0PU4JTnVtYmVyIG9mIGFsbG9jIHJlcXMgdGhhdCB3YWl0ZWQgb24gbG9va3VwIGNvbXBsZXRpb24KKwkJbmJmPU4JTnVtYmVyIG9mIGFsbG9jIHJlcXMgcmVqZWN0ZWQgLUVOT0JVRlMKKwkJb3BzPU4JTnVtYmVyIG9mIGFsbG9jIHJlcXMgc3VibWl0dGVkCisJCW93dD1OCU51bWJlciBvZiBhbGxvYyByZXFzIHdhaXRlZCBmb3IgQ1BVIHRpbWUKKwlSZXRydmxzCW49TglOdW1iZXIgb2YgcmV0cmlldmFsIChyZWFkKSByZXF1ZXN0cyBzZWVuCisJCW9rPU4JTnVtYmVyIG9mIHN1Y2Nlc3NmdWwgcmV0ciByZXFzCisJCXd0PU4JTnVtYmVyIG9mIHJldHIgcmVxcyB0aGF0IHdhaXRlZCBvbiBsb29rdXAgY29tcGxldGlvbgorCQlub2Q9TglOdW1iZXIgb2YgcmV0ciByZXFzIHJldHVybmVkIC1FTk9EQVRBCisJCW5iZj1OCU51bWJlciBvZiByZXRyIHJlcXMgcmVqZWN0ZWQgLUVOT0JVRlMKKwkJaW50PU4JTnVtYmVyIG9mIHJldHIgcmVxcyBhYm9ydGVkIC1FUkVTVEFSVFNZUworCQlvb209TglOdW1iZXIgb2YgcmV0ciByZXFzIGZhaWxlZCAtRU5PTUVNCisJCW9wcz1OCU51bWJlciBvZiByZXRyIHJlcXMgc3VibWl0dGVkCisJCW93dD1OCU51bWJlciBvZiByZXRyIHJlcXMgd2FpdGVkIGZvciBDUFUgdGltZQorCVN0b3JlcwluPU4JTnVtYmVyIG9mIHN0b3JhZ2UgKHdyaXRlKSByZXF1ZXN0cyBzZWVuCisJCW9rPU4JTnVtYmVyIG9mIHN1Y2Nlc3NmdWwgc3RvcmUgcmVxcworCQlhZ249TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyBvbiBhIHBhZ2UgYWxyZWFkeSBwZW5kaW5nIHN0b3JhZ2UKKwkJbmJmPU4JTnVtYmVyIG9mIHN0b3JlIHJlcXMgcmVqZWN0ZWQgLUVOT0JVRlMKKwkJb29tPU4JTnVtYmVyIG9mIHN0b3JlIHJlcXMgZmFpbGVkIC1FTk9NRU0KKwkJb3BzPU4JTnVtYmVyIG9mIHN0b3JlIHJlcXMgc3VibWl0dGVkCisJCXJ1bj1OCU51bWJlciBvZiBzdG9yZSByZXFzIGdyYW50ZWQgQ1BVIHRpbWUKKwlPcHMJcGVuZD1OCU51bWJlciBvZiB0aW1lcyBhc3luYyBvcHMgYWRkZWQgdG8gcGVuZGluZyBxdWV1ZXMKKwkJcnVuPU4JTnVtYmVyIG9mIHRpbWVzIGFzeW5jIG9wcyBnaXZlbiBDUFUgdGltZQorCQllbnE9TglOdW1iZXIgb2YgdGltZXMgYXN5bmMgb3BzIHF1ZXVlZCBmb3IgcHJvY2Vzc2luZworCQlkZnI9TglOdW1iZXIgb2YgYXN5bmMgb3BzIHF1ZXVlZCBmb3IgZGVmZXJyZWQgcmVsZWFzZQorCQlyZWw9TglOdW1iZXIgb2YgYXN5bmMgb3BzIHJlbGVhc2VkCisJCWdjPU4JTnVtYmVyIG9mIGRlZmVycmVkLXJlbGVhc2UgYXN5bmMgb3BzIGdhcmJhZ2UgY29sbGVjdGVkCisKKworICgqKSAvcHJvYy9mcy9mc2NhY2hlL2hpc3RvZ3JhbQorCisJY2F0IC9wcm9jL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtCisJSklGUyAgU0VDUyAgT0JKIElOU1QgIE9QIFJVTlMgICBPQkogUlVOUyAgUkVUUlYgRExZIFJFVFJJRVZMUworCT09PT09ID09PT09ID09PT09PT09PSA9PT09PT09PT0gPT09PT09PT09ID09PT09PT09PSA9PT09PT09PT0KKworICAgICBUaGlzIHNob3dzIHRoZSBicmVha2Rvd24gb2YgdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIGFtb3VudCBvZiB0aW1lCisgICAgIGJldHdlZW4gMCBqaWZmaWVzIGFuZCBIWi0xIGppZmZpZXMgYSB2YXJpZXR5IG9mIHRhc2tzIHRvb2sgdG8gcnVuLiAgVGhlCisgICAgIGNvbHVtbnMgYXJlIGFzIGZvbGxvd3M6CisKKwlDT0xVTU4JCVRJTUUgTUVBU1VSRU1FTlQKKwk9PT09PT09CQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJT0JKIElOU1QJTGVuZ3RoIG9mIHRpbWUgdG8gaW5zdGFudGlhdGUgYW4gb2JqZWN0CisJT1AgUlVOUwkJTGVuZ3RoIG9mIHRpbWUgYSBjYWxsIHRvIHByb2Nlc3MgYW4gb3BlcmF0aW9uIHRvb2sKKwlPQkogUlVOUwlMZW5ndGggb2YgdGltZSBhIGNhbGwgdG8gcHJvY2VzcyBhbiBvYmplY3QgZXZlbnQgdG9vaworCVJFVFJWIERMWQlUaW1lIGJldHdlZW4gYW4gcmVxdWVzdGluZyBhIHJlYWQgYW5kIGxvb2t1cCBjb21wbGV0aW5nCisJUkVUUklFVkxTCVRpbWUgYmV0d2VlbiBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHJldHJpZXZhbAorCisgICAgIEVhY2ggcm93IHNob3dzIHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgdG9vayBhIHBhcnRpY3VsYXIgcmFuZ2Ugb2YgdGltZXMuCisgICAgIEVhY2ggc3RlcCBpcyAxIGppZmZ5IGluIHNpemUuICBUaGUgSklGUyBjb2x1bW4gaW5kaWNhdGVzIHRoZSBwYXJ0aWN1bGFyCisgICAgIGppZmZ5IHJhbmdlIGNvdmVyZWQsIGFuZCB0aGUgU0VDUyBmaWVsZCB0aGUgZXF1aXZhbGVudCBudW1iZXIgb2Ygc2Vjb25kcy4KKworCis9PT09PT09PT0KK0RFQlVHR0lORworPT09PT09PT09CisKK0lmIENPTkZJR19GU0NBQ0hFX0RFQlVHIGlzIGVuYWJsZWQsIHRoZSBGUy1DYWNoZSBmYWNpbGl0eSBjYW4gaGF2ZSBydW50aW1lCitkZWJ1Z2dpbmcgZW5hYmxlZCBieSBhZGp1c3RpbmcgdGhlIHZhbHVlIGluOgorCisJL3N5cy9tb2R1bGUvZnNjYWNoZS9wYXJhbWV0ZXJzL2RlYnVnCisKK1RoaXMgaXMgYSBiaXRtYXNrIG9mIGRlYnVnZ2luZyBzdHJlYW1zIHRvIGVuYWJsZToKKworCUJJVAlWQUxVRQlTVFJFQU0JCQkJUE9JTlQKKwk9PT09PT09CT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCTAJMQlDYWNoZSBtYW5hZ2VtZW50CQlGdW5jdGlvbiBlbnRyeSB0cmFjZQorCTEJMgkJCQkJRnVuY3Rpb24gZXhpdCB0cmFjZQorCTIJNAkJCQkJR2VuZXJhbAorCTMJOAlDb29raWUgbWFuYWdlbWVudAkJRnVuY3Rpb24gZW50cnkgdHJhY2UKKwk0CTE2CQkJCQlGdW5jdGlvbiBleGl0IHRyYWNlCisJNQkzMgkJCQkJR2VuZXJhbAorCTYJNjQJUGFnZSBoYW5kbGluZwkJCUZ1bmN0aW9uIGVudHJ5IHRyYWNlCisJNwkxMjgJCQkJCUZ1bmN0aW9uIGV4aXQgdHJhY2UKKwk4CTI1NgkJCQkJR2VuZXJhbAorCTkJNTEyCU9wZXJhdGlvbiBtYW5hZ2VtZW50CQlGdW5jdGlvbiBlbnRyeSB0cmFjZQorCTEwCTEwMjQJCQkJCUZ1bmN0aW9uIGV4aXQgdHJhY2UKKwkxMQkyMDQ4CQkJCQlHZW5lcmFsCisKK1RoZSBhcHByb3ByaWF0ZSBzZXQgb2YgdmFsdWVzIHNob3VsZCBiZSBPUidkIHRvZ2V0aGVyIGFuZCB0aGUgcmVzdWx0IHdyaXR0ZW4gdG8KK3RoZSBjb250cm9sIGZpbGUuICBGb3IgZXhhbXBsZToKKworCWVjaG8gJCgoMXw4fDY0KSkgPi9zeXMvbW9kdWxlL2ZzY2FjaGUvcGFyYW1ldGVycy9kZWJ1ZworCit3aWxsIHR1cm4gb24gYWxsIGZ1bmN0aW9uIGVudHJ5IGRlYnVnZ2luZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiMTI1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0CkBAIC0wLDAgKzEsNzc4IEBACisJCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQlGUy1DQUNIRSBORVRXT1JLIEZJTEVTWVNURU0gQVBJCisJCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlJ3MgYW4gQVBJIGJ5IHdoaWNoIGEgbmV0d29yayBmaWxlc3lzdGVtIGNhbiBtYWtlIHVzZSBvZiB0aGUgRlMtQ2FjaGUKK2ZhY2lsaXRpZXMuICBUaGlzIGlzIGJhc2VkIGFyb3VuZCBhIG51bWJlciBvZiBwcmluY2lwbGVzOgorCisgKDEpIENhY2hlcyBjYW4gc3RvcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IG9iamVjdCB0eXBlcy4gIFRoZXJlIGFyZSB0d28gbWFpbgorICAgICBvYmplY3QgdHlwZXM6IGluZGljZXMgYW5kIGZpbGVzLiAgVGhlIGZpcnN0IGlzIGEgc3BlY2lhbCB0eXBlIHVzZWQgYnkKKyAgICAgRlMtQ2FjaGUgdG8gbWFrZSBmaW5kaW5nIG9iamVjdHMgZmFzdGVyIGFuZCB0byBtYWtlIHJldGlyaW5nIG9mIGdyb3VwcyBvZgorICAgICBvYmplY3RzIGVhc2llci4KKworICgyKSBFdmVyeSBpbmRleCwgZmlsZSBvciBvdGhlciBvYmplY3QgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb29raWUuICBUaGlzIGNvb2tpZQorICAgICBtYXkgb3IgbWF5IG5vdCBoYXZlIGFueXRoaW5nIGFzc29jaWF0ZWQgd2l0aCBpdCwgYnV0IHRoZSBuZXRmcyBkb2Vzbid0CisgICAgIG5lZWQgdG8gY2FyZS4KKworICgzKSBCYXJyaW5nIHRoZSB0b3AtbGV2ZWwgaW5kZXggKG9uZSBlbnRyeSBwZXIgY2FjaGVkIG5ldGZzKSwgdGhlIGluZGV4CisgICAgIGhpZXJhcmNoeSBmb3IgZWFjaCBuZXRmcyBpcyBzdHJ1Y3R1cmVkIGFjY29yZGluZyB0aGUgd2hpbSBvZiB0aGUgbmV0ZnMuCisKK1RoaXMgQVBJIGlzIGRlY2xhcmVkIGluIDxsaW51eC9mc2NhY2hlLmg+LgorCitUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKwkgKDEpIE5ldHdvcmsgZmlsZXN5c3RlbSBkZWZpbml0aW9uCisJICgyKSBJbmRleCBkZWZpbml0aW9uCisJICgzKSBPYmplY3QgZGVmaW5pdGlvbgorCSAoNCkgTmV0d29yayBmaWxlc3lzdGVtICh1bilyZWdpc3RyYXRpb24KKwkgKDUpIENhY2hlIHRhZyBsb29rdXAKKwkgKDYpIEluZGV4IHJlZ2lzdHJhdGlvbgorCSAoNykgRGF0YSBmaWxlIHJlZ2lzdHJhdGlvbgorCSAoOCkgTWlzY2VsbGFuZW91cyBvYmplY3QgcmVnaXN0cmF0aW9uCisJICg5KSBTZXR0aW5nIHRoZSBkYXRhIGZpbGUgc2l6ZQorCSgxMCkgUGFnZSBhbGxvYy9yZWFkL3dyaXRlCisJKDExKSBQYWdlIHVuY2FjaGluZworCSgxMikgSW5kZXggYW5kIGRhdGEgZmlsZSB1cGRhdGUKKwkoMTMpIE1pc2NlbGxhbmVvdXMgY29va2llIG9wZXJhdGlvbnMKKwkoMTQpIENvb2tpZSB1bnJlZ2lzdHJhdGlvbgorCSgxNSkgSW5kZXggYW5kIGRhdGEgZmlsZSBpbnZhbGlkYXRpb24KKwkoMTYpIEZTLUNhY2hlIHNwZWNpZmljIHBhZ2UgZmxhZ3MuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05FVFdPUksgRklMRVNZU1RFTSBERUZJTklUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGUy1DYWNoZSBuZWVkcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0uICBUaGlzIGlzIHNwZWNpZmllZAordXNpbmcgYSByZWNvcmQgb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisKKwlzdHJ1Y3QgZnNjYWNoZV9uZXRmcyB7CisJCXVpbnQzMl90CQkJdmVyc2lvbjsKKwkJY29uc3QgY2hhcgkJCSpuYW1lOworCQlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJCSpwcmltYXJ5X2luZGV4OworCQkuLi4KKwl9OworCitUaGlzIGZpcnN0IHR3byBmaWVsZHMgc2hvdWxkIGJlIGZpbGxlZCBpbiBiZWZvcmUgcmVnaXN0cmF0aW9uLCBhbmQgdGhlIHRoaXJkCit3aWxsIGJlIGZpbGxlZCBpbiBieSB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uOyBhbnkgb3RoZXIgZmllbGRzIHNob3VsZCBqdXN0IGJlCitpZ25vcmVkIGFuZCBhcmUgZm9yIGludGVybmFsIHVzZSBvbmx5LgorCitUaGUgZmllbGRzIGFyZToKKworICgxKSBUaGUgbmFtZSBvZiB0aGUgbmV0ZnMgKHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgdG9wbGV2ZWwgaW5kZXgpLgorCisgKDIpIFRoZSB2ZXJzaW9uIG9mIHRoZSBuZXRmcyAoaWYgdGhlIG5hbWUgbWF0Y2hlcyBidXQgdGhlIHZlcnNpb24gZG9lc24ndCwgdGhlCisgICAgIGVudGlyZSBpbi1jYWNoZSBoaWVyYXJjaHkgZm9yIHRoaXMgbmV0ZnMgd2lsbCBiZSBzY3JhcHBlZCBhbmQgYmVndW4KKyAgICAgYWZyZXNoKS4KKworICgzKSBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgcHJpbWFyeSBpbmRleCB3aWxsIGJlIGFsbG9jYXRlZCBhY2NvcmRpbmcgdG8KKyAgICAgYW5vdGhlciBwYXJhbWV0ZXIgcGFzc2VkIGludG8gdGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbi4KKworRm9yIGV4YW1wbGUsIGtBRlMgKGxpbnV4L2ZzL2Fmcy8pIHVzZXMgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyB0byBkZXNjcmliZQoraXRzZWxmOgorCisJc3RydWN0IGZzY2FjaGVfbmV0ZnMgYWZzX2NhY2hlX25ldGZzID0geworCQkudmVyc2lvbgk9IDAsCisJCS5uYW1lCQk9ICJhZnMiLAorCX07CisKKworPT09PT09PT09PT09PT09PQorSU5ERVggREVGSU5JVElPTgorPT09PT09PT09PT09PT09PQorCitJbmRpY2VzIGFyZSB1c2VkIGZvciB0d28gcHVycG9zZXM6CisKKyAoMSkgVG8gYWlkIHRoZSBmaW5kaW5nIG9mIGEgZmlsZSBiYXNlZCBvbiBhIHNlcmllcyBvZiBrZXlzIChzdWNoIGFzIEFGUydzCisgICAgICJjZWxsIiwgInZvbHVtZSBJRCIsICJ2bm9kZSBJRCIpLgorCisgKDIpIFRvIG1ha2UgaXQgZWFzaWVyIHRvIGRpc2NhcmQgYSBzdWJzZXQgb2YgYWxsIHRoZSBmaWxlcyBjYWNoZWQgYmFzZWQgYXJvdW5kCisgICAgIGEgcGFydGljdWxhciBrZXkgLSBmb3IgaW5zdGFuY2UgdG8gbWlycm9yIHRoZSByZW1vdmFsIG9mIGFuIEFGUyB2b2x1bWUuCisKK0hvd2V2ZXIsIHNpbmNlIGl0J3MgdW5saWtlbHkgdGhhdCBhbnkgdHdvIG5ldGZzJ3MgYXJlIGdvaW5nIHRvIHdhbnQgdG8gZGVmaW5lCit0aGVpciBpbmRleCBoaWVyYXJjaGllcyBpbiBxdWl0ZSB0aGUgc2FtZSB3YXksIEZTLUNhY2hlIHRyaWVzIHRvIGltcG9zZSBhcyBmZXcKK3Jlc3RyYWludHMgYXMgcG9zc2libGUgb24gaG93IGFuIGluZGV4IGlzIHN0cnVjdHVyZWQgYW5kIHdoZXJlIGl0IGlzIHBsYWNlZCBpbgordGhlIHRyZWUuICBUaGUgbmV0ZnMgY2FuIGV2ZW4gbWl4IGluZGljZXMgYW5kIGRhdGEgZmlsZXMgYXQgdGhlIHNhbWUgbGV2ZWwsIGJ1dAoraXQncyBub3QgcmVjb21tZW5kZWQuCisKK0VhY2ggaW5kZXggZW50cnkgY29uc2lzdHMgb2YgYSBrZXkgb2YgaW5kZXRlcm1pbmF0ZSBsZW5ndGggcGx1cyBzb21lIGF1eGlsbGlhcnkKK2RhdGEsIGFsc28gb2YgaW5kZXRlcm1pbmF0ZSBsZW5ndGguCisKK1RoZXJlIGFyZSBzb21lIGxpbWl0cyBvbiBpbmRpY2VzOgorCisgKDEpIEFueSBpbmRleCBjb250YWluaW5nIG5vbi1pbmRleCBvYmplY3RzIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIGEgc2luZ2xlCisgICAgIGNhY2hlLiAgQW55IHN1Y2ggb2JqZWN0cyBjcmVhdGVkIHdpdGhpbiBhbiBpbmRleCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlCisgICAgIGZpcnN0IGNhY2hlIG9ubHkuICBUaGUgY2FjaGUgaW4gd2hpY2ggYW4gaW5kZXggaXMgY3JlYXRlZCBjYW4gYmUKKyAgICAgY29udHJvbGxlZCBieSBjYWNoZSB0YWdzIChzZWUgYmVsb3cpLgorCisgKDIpIFRoZSBlbnRyeSBkYXRhIG11c3QgYmUgYXRvbWljYWxseSBqb3VybmFsbGFibGUsIHNvIGl0IGlzIGxpbWl0ZWQgdG8gYWJvdXQKKyAgICAgNDAwIGJ5dGVzIGF0IHByZXNlbnQuICBBdCBsZWFzdCA0MDAgYnl0ZXMgd2lsbCBiZSBhdmFpbGFibGUuCisKKyAoMykgVGhlIGRlcHRoIG9mIHRoZSBpbmRleCB0cmVlIHNob3VsZCBiZSBqdWRnZWQgd2l0aCBjYXJlIGFzIHRoZSBzZWFyY2gKKyAgICAgZnVuY3Rpb24gaXMgcmVjdXJzaXZlLiAgVG9vIG1hbnkgbGF5ZXJzIHdpbGwgcnVuIHRoZSBrZXJuZWwgb3V0IG9mIHN0YWNrLgorCisKKz09PT09PT09PT09PT09PT09CitPQkpFQ1QgREVGSU5JVElPTgorPT09PT09PT09PT09PT09PT0KKworVG8gZGVmaW5lIGFuIG9iamVjdCwgYSBzdHJ1Y3R1cmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlIHNob3VsZCBiZSBmaWxsZWQgb3V0OgorCisJc3RydWN0IGZzY2FjaGVfY29va2llX2RlZgorCXsKKwkJdWludDhfdCBuYW1lWzE2XTsKKwkJdWludDhfdCB0eXBlOworCisJCXN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqKCpzZWxlY3RfY2FjaGUpKAorCQkJY29uc3Qgdm9pZCAqcGFyZW50X25ldGZzX2RhdGEsCisJCQljb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSk7CisKKwkJdWludDE2X3QgKCpnZXRfa2V5KShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgdm9pZCAqYnVmZmVyLAorCQkJCSAgICB1aW50MTZfdCBidWZtYXgpOworCisJCXZvaWQgKCpnZXRfYXR0cikoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJIHVpbnQ2NF90ICpzaXplKTsKKworCQl1aW50MTZfdCAoKmdldF9hdXgpKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgICB2b2lkICpidWZmZXIsCisJCQkJICAgIHVpbnQxNl90IGJ1Zm1heCk7CisKKwkJZW51bSBmc2NhY2hlX2NoZWNrYXV4ICgqY2hlY2tfYXV4KSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJCQkgICB1aW50MTZfdCBkYXRhbGVuKTsKKworCQl2b2lkICgqZ2V0X2NvbnRleHQpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB2b2lkICpjb250ZXh0KTsKKworCQl2b2lkICgqcHV0X2NvbnRleHQpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB2b2lkICpjb250ZXh0KTsKKworCQl2b2lkICgqbWFya19wYWdlc19jYWNoZWQpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQkgIHN0cnVjdCBwYWdldmVjICpjYWNoZWRfcHZlYyk7CisKKwkJdm9pZCAoKm5vd191bmNhY2hlZCkodm9pZCAqY29va2llX25ldGZzX2RhdGEpOworCX07CisKK1RoaXMgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorCisgKDEpIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgW21hbmRhdG9yeV0uCisKKyAgICAgVGhpcyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKwkoKikgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWAorCisJICAgIFRoaXMgZGVmaW5lcyBhbiBpbmRleCwgd2hpY2ggaXMgYSBzcGVjaWFsIEZTLUNhY2hlIHR5cGUuCisKKwkoKikgRlNDQUNIRV9DT09LSUVfVFlQRV9EQVRBRklMRQorCisJICAgIFRoaXMgZGVmaW5lcyBhbiBvcmRpbmFyeSBkYXRhIGZpbGUuCisKKwkoKikgQW55IG90aGVyIHZhbHVlIGJldHdlZW4gMiBhbmQgMjU1CisKKwkgICAgVGhpcyBkZWZpbmVzIGFuIGV4dHJhb3JkaW5hcnkgb2JqZWN0IHN1Y2ggYXMgYW4gWEFUVFIuCisKKyAoMikgVGhlIG5hbWUgb2YgdGhlIG9iamVjdCB0eXBlIChOVUwgdGVybWluYXRlZCB1bmxlc3MgYWxsIDE2IGNoYXJzIGFyZSB1c2VkKQorICAgICBbb3B0aW9uYWxdLgorCisgKDMpIEEgZnVuY3Rpb24gdG8gc2VsZWN0IHRoZSBjYWNoZSBpbiB3aGljaCB0byBzdG9yZSBhbiBpbmRleCBbb3B0aW9uYWxdLgorCisgICAgIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aGVuIGFuIGluZGV4IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBpbiBhIGNhY2hlCisgICAgIGR1cmluZyB0aGUgaW5zdGFudGlhdGlvbiBvZiBhIG5vbi1pbmRleCBvYmplY3QuICBPbmx5IHRoZSBpbW1lZGlhdGUgaW5kZXgKKyAgICAgcGFyZW50IGZvciB0aGUgbm9uLWluZGV4IG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQuICBBbnkgaW5kaWNlcyBhYm92ZSB0aGF0CisgICAgIGluIHRoZSBoaWVyYXJjaHkgbWF5IGJlIHN0b3JlZCBpbiBtdWx0aXBsZSBjYWNoZXMuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90CisgICAgIG5lZWQgdG8gYmUgc3VwcGxpZWQgZm9yIGFueSBub24taW5kZXggb2JqZWN0IG9yIGFueSBpbmRleCB0aGF0IHdpbGwgb25seQorICAgICBoYXZlIGluZGV4IGNoaWxkcmVuLgorCisgICAgIElmIHRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBsaWVkIG9yIGlmIGl0IHJldHVybnMgTlVMTCB0aGVuIHRoZSBmaXJzdAorICAgICBjYWNoZSBpbiB0aGUgcGFyZW50J3MgbGlzdCB3aWxsIGJlIGNob3NlZCwgb3IgZmFpbGluZyB0aGF0LCB0aGUgZmlyc3QKKyAgICAgY2FjaGUgaW4gdGhlIG1hc3RlciBsaXN0LgorCisgKDQpIEEgZnVuY3Rpb24gdG8gcmV0cmlldmUgYW4gb2JqZWN0J3Mga2V5IGZyb20gdGhlIG5ldGZzIFttYW5kYXRvcnldLgorCisgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV0ZnMgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlCisgICAgIGNvb2tpZSBhY3F1aXNpdGlvbiBmdW5jdGlvbiBhbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGtleSBkYXRhIHRoYXQgaXQgbWF5CisgICAgIHByb3ZpZGUuICBJdCBzaG91bGQgd3JpdGUgdGhlIHJlcXVpcmVkIGtleSBkYXRhIGludG8gdGhlIGdpdmVuIGJ1ZmZlciBhbmQKKyAgICAgcmV0dXJuIHRoZSBxdWFudGl0eSBpdCB3cm90ZS4KKworICg1KSBBIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGF0dHJpYnV0ZSBkYXRhIGZyb20gdGhlIG5ldGZzIFtvcHRpb25hbF0uCisKKyAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBuZXRmcyBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUKKyAgICAgY29va2llIGFjcXVpc2l0aW9uIGZ1bmN0aW9uLiAgSXQgc2hvdWxkIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBpZgorICAgICB0aGlzIGlzIGEgZGF0YSBmaWxlLiAgVGhlIHNpemUgbWF5IGJlIHVzZWQgdG8gZ292ZXJuIGhvdyBtdWNoIGNhY2hlIG11c3QKKyAgICAgYmUgcmVzZXJ2ZWQgZm9yIHRoaXMgZmlsZSBpbiB0aGUgY2FjaGUuCisKKyAgICAgSWYgdGhlIGZ1bmN0aW9uIGlzIGFic2VudCwgYSBmaWxlIHNpemUgb2YgMCBpcyBhc3N1bWVkLgorCisgKDYpIEEgZnVuY3Rpb24gdG8gcmV0cmlldmUgYXV4aWxsaWFyeSBkYXRhIGZyb20gdGhlIG5ldGZzIFtvcHRpb25hbF0uCisKKyAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBuZXRmcyBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUKKyAgICAgY29va2llIGFjcXVpc2l0aW9uIGZ1bmN0aW9uIGFuZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgYXV4aWxsaWFyeSBkYXRhIHRoYXQKKyAgICAgaXQgbWF5IHByb3ZpZGUuICBJdCBzaG91bGQgd3JpdGUgdGhlIGF1eGlsbGlhcnkgZGF0YSBpbnRvIHRoZSBnaXZlbiBidWZmZXIKKyAgICAgYW5kIHJldHVybiB0aGUgcXVhbnRpdHkgaXQgd3JvdGUuCisKKyAgICAgSWYgdGhpcyBmdW5jdGlvbiBpcyBhYnNlbnQsIHRoZSBhdXhpbGxpYXJ5IGRhdGEgbGVuZ3RoIHdpbGwgYmUgc2V0IHRvIDAuCisKKyAgICAgVGhlIGxlbmd0aCBvZiB0aGUgYXV4aWxsaWFyeSBkYXRhIGJ1ZmZlciBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBrZXkKKyAgICAgbGVuZ3RoLiAgQSBuZXRmcyBtdXN0bid0IHJlbHkgb24gYmVpbmcgYWJsZSB0byBwcm92aWRlIG1vcmUgdGhhbiA0MDAgYnl0ZXMKKyAgICAgZm9yIGJvdGguCisKKyAoNykgQSBmdW5jdGlvbiB0byBjaGVjayB0aGUgYXV4aWxsaWFyeSBkYXRhIFtvcHRpb25hbF0uCisKKyAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBjaGVjayB0aGF0IGEgbWF0Y2ggZm91bmQgaW4gdGhlIGNhY2hlIGZvcgorICAgICB0aGlzIG9iamVjdCBpcyB2YWxpZC4gIEZvciBpbnN0YW5jZSB3aXRoIEFGUyBpdCBjb3VsZCBjaGVjayB0aGUgYXV4aWxsaWFyeQorICAgICBkYXRhIGFnYWluc3QgdGhlIGRhdGEgdmVyc2lvbiBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciB0byBkZXRlcm1pbmUKKyAgICAgd2hldGhlciB0aGUgaW5kZXggZW50cnkgaW4gYSBjYWNoZSBpcyBzdGlsbCB2YWxpZC4KKworICAgICBJZiB0aGlzIGZ1bmN0aW9uIGlzIGFic2VudCwgaXQgd2lsbCBiZSBhc3N1bWVkIHRoYXQgbWF0Y2hpbmcgb2JqZWN0cyBpbiBhCisgICAgIGNhY2hlIGFyZSBhbHdheXMgdmFsaWQuCisKKyAgICAgSWYgcHJlc2VudCwgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisJKCopIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWQkJLSB0aGUgZW50cnkgaXMgb2theSBhcyBpcworCSgqKSBGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURQktIHRoZSBlbnRyeSByZXF1aXJlcyB1cGRhdGUKKwkoKikgRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURQkJLSB0aGUgZW50cnkgc2hvdWxkIGJlIGRlbGV0ZWQKKworICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXh0cmFjdCBkYXRhIGZyb20gdGhlIGF1eGlsbGlhcnkgZGF0YSBpbgorICAgICB0aGUgY2FjaGUgYW5kIGNvcHkgaXQgaW50byB0aGUgbmV0ZnMncyBzdHJ1Y3R1cmVzLgorCisgKDgpIEEgcGFpciBvZiBmdW5jdGlvbnMgdG8gbWFuYWdlIGNvbnRleHRzIGZvciB0aGUgY29tcGxldGlvbiBjYWxsYmFjaworICAgICBbb3B0aW9uYWxdLgorCisgICAgIFRoZSBjYWNoZSByZWFkL3dyaXRlIGZ1bmN0aW9ucyBhcmUgcGFzc2VkIGEgY29udGV4dCB3aGljaCBpcyB0aGVuIHBhc3NlZAorICAgICB0byB0aGUgSS9PIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24uICBUbyBlbnN1cmUgdGhpcyBjb250ZXh0IHJlbWFpbnMKKyAgICAgdmFsaWQgdW50aWwgYWZ0ZXIgdGhlIEkvTyBjb21wbGV0aW9uIGlzIGNhbGxlZCwgdHdvIGZ1bmN0aW9ucyBtYXkgYmUKKyAgICAgcHJvdmlkZWQ6IG9uZSB0byBnZXQgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIHRoZSBjb250ZXh0LCBhbmQgb25lIHRvIGRyb3AgYQorICAgICByZWZlcmVuY2UgdG8gaXQuCisKKyAgICAgSWYgdGhlIGNvbnRleHQgaXMgbm90IHVzZWQgb3IgaXMgYSB0eXBlIG9mIG9iamVjdCB0aGF0IHdvbid0IGdvIG91dCBvZgorICAgICBzY29wZSwgdGhlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCByZXF1aXJlZC4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90CisgICAgIHJlcXVpcmVkIGZvciBpbmRpY2VzIGFzIGluZGljZXMgbWF5IG5vdCBjb250YWluIGRhdGEuICBUaGVzZSBmdW5jdGlvbnMgbWF5CisgICAgIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCBhbmQgc28gbWF5IG5vdCBzbGVlcC4KKworICg5KSBBIGZ1bmN0aW9uIHRvIG1hcmsgYSBwYWdlIGFzIHJldGFpbmluZyBjYWNoZSBtZXRhZGF0YSBbb3B0aW9uYWxdLgorCisgICAgIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBjYWNoZSB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIHJldGFpbmluZyBpbi1tZW1vcnkKKyAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGFnZSBhbmQgdGhhdCB0aGUgbmV0ZnMgc2hvdWxkIHVuY2FjaGUgdGhlIHBhZ2Ugd2hlbgorICAgICBpdCBoYXMgZmluaXNoZWQuICBUaGlzIGRvZXMgbm90IGluZGljYXRlIHdoZXRoZXIgdGhlcmUncyBkYXRhIG9uIHRoZSBkaXNrCisgICAgIG9yIG5vdC4gIE5vdGUgdGhhdCBzZXZlcmFsIHBhZ2VzIGF0IG9uY2UgbWF5IGJlIHByZXNlbnRlZCBmb3IgbWFya2luZy4KKworICAgICBUaGUgUEdfZnNjYWNoZSBiaXQgaXMgc2V0IG9uIHRoZSBwYWdlcyBiZWZvcmUgdGhpcyBmdW5jdGlvbiB3b3VsZCBiZQorICAgICBjYWxsZWQsIHNvIHRoZSBmdW5jdGlvbiBuZWVkIG5vdCBiZSBwcm92aWRlZCBpZiB0aGlzIGlzIHN1ZmZpY2llbnQuCisKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVxdWlyZWQgZm9yIGluZGljZXMgYXMgdGhleSdyZSBub3QgcGVybWl0dGVkIGRhdGEuCisKKygxMCkgQSBmdW5jdGlvbiB0byB1bm1hcmsgYWxsIHRoZSBwYWdlcyByZXRhaW5pbmcgY2FjaGUgbWV0YWRhdGEgW21hbmRhdG9yeV0uCisKKyAgICAgVGhpcyBpcyBjYWxsZWQgYnkgRlMtQ2FjaGUgdG8gaW5kaWNhdGUgdGhhdCBhIGJhY2tpbmcgc3RvcmUgaXMgYmVpbmcKKyAgICAgdW5ib3VuZCBmcm9tIGEgY29va2llIGFuZCB0aGF0IGFsbCB0aGUgbWFya3Mgb24gdGhlIHBhZ2VzIHNob3VsZCBiZQorICAgICBjbGVhcmVkIHRvIHByZXZlbnQgY29uZnVzaW9uLiAgTm90ZSB0aGF0IHRoZSBjYWNoZSB3aWxsIGhhdmUgdG9ybiBkb3duIGFsbAorICAgICBpdHMgdHJhY2tpbmcgaW5mb3JtYXRpb24gc28gdGhhdCB0aGUgcGFnZXMgZG9uJ3QgbmVlZCB0byBiZSBleHBsaWNpdGx5CisgICAgIHVuY2FjaGVkLgorCisgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIGZvciBpbmRpY2VzIGFzIHRoZXkncmUgbm90IHBlcm1pdHRlZCBkYXRhLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitORVRXT1JLIEZJTEVTWVNURU0gKFVOKVJFR0lTVFJBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZpcnN0IHN0ZXAgaXMgdG8gZGVjbGFyZSB0aGUgbmV0d29yayBmaWxlc3lzdGVtIHRvIHRoZSBjYWNoZS4gIFRoaXMgYWxzbworaW52b2x2ZXMgc3BlY2lmeWluZyB0aGUgbGF5b3V0IG9mIHRoZSBwcmltYXJ5IGluZGV4IChmb3IgQUZTLCB0aGlzIHdvdWxkIGJlIHRoZQorImNlbGwiIGxldmVsKS4KKworVGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBpczoKKworCWludCBmc2NhY2hlX3JlZ2lzdGVyX25ldGZzKHN0cnVjdCBmc2NhY2hlX25ldGZzICpuZXRmcyk7CisKK0l0IGp1c3QgdGFrZXMgYSBwb2ludGVyIHRvIHRoZSBuZXRmcyBkZWZpbml0aW9uLiAgSXQgcmV0dXJucyAwIG9yIGFuIGVycm9yIGFzCithcHByb3ByaWF0ZS4KKworRm9yIGtBRlMsIHJlZ2lzdHJhdGlvbiBpcyBkb25lIGFzIGZvbGxvd3M6CisKKwlyZXQgPSBmc2NhY2hlX3JlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMpOworCitUaGUgbGFzdCBzdGVwIGlzLCBvZiBjb3Vyc2UsIHVucmVnaXN0cmF0aW9uOgorCisJdm9pZCBmc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzKTsKKworCis9PT09PT09PT09PT09PT09CitDQUNIRSBUQUcgTE9PS1VQCis9PT09PT09PT09PT09PT09CisKK0ZTLUNhY2hlIHBlcm1pdHMgdGhlIHVzZSBvZiBtb3JlIHRoYW4gb25lIGNhY2hlLiAgVG8gcGVybWl0IHBhcnRpY3VsYXIgaW5kZXgKK3N1YnRyZWVzIHRvIGJlIGJvdW5kIHRvIHBhcnRpY3VsYXIgY2FjaGVzLCB0aGUgc2Vjb25kIHN0ZXAgaXMgdG8gbG9vayB1cCBjYWNoZQorcmVwcmVzZW50YXRpb24gdGFncy4gIFRoaXMgc3RlcCBpcyBvcHRpb25hbDsgaXQgY2FuIGJlIGxlZnQgZW50aXJlbHkgdXAgdG8KK0ZTLUNhY2hlIGFzIHRvIHdoaWNoIGNhY2hlIHNob3VsZCBiZSB1c2VkLiAgVGhlIHByb2JsZW0gd2l0aCBkb2luZyB0aGF0IGlzIHRoYXQKK0ZTLUNhY2hlIHdpbGwgYWx3YXlzIHBpY2sgdGhlIGZpcnN0IGNhY2hlIHRoYXQgd2FzIHJlZ2lzdGVyZWQuCisKK1RvIGdldCB0aGUgcmVwcmVzZW50YXRpb24gZm9yIGEgbmFtZWQgdGFnOgorCisJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICpmc2NhY2hlX2xvb2t1cF9jYWNoZV90YWcoY29uc3QgY2hhciAqbmFtZSk7CisKK1RoaXMgdGFrZXMgYSB0ZXh0IHN0cmluZyBhcyB0aGUgbmFtZSBhbmQgcmV0dXJucyBhIHJlcHJlc2VudGF0aW9uIG9mIGEgdGFnLiAgSXQKK3dpbGwgbmV2ZXIgcmV0dXJuIGFuIGVycm9yLiAgSXQgbWF5IHJldHVybiBhIGR1bW15IHRhZywgaG93ZXZlciwgaWYgaXQgcnVucyBvdXQKK29mIG1lbW9yeTsgdGhpcyB3aWxsIGluaGliaXQgY2FjaGluZyB3aXRoIHRoaXMgdGFnLgorCitBbnkgcmVwcmVzZW50YXRpb24gc28gb2J0YWluZWQgbXVzdCBiZSByZWxlYXNlZCBieSBwYXNzaW5nIGl0IHRvIHRoaXMgZnVuY3Rpb246CisKKwl2b2lkIGZzY2FjaGVfcmVsZWFzZV9jYWNoZV90YWcoc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICp0YWcpOworCitUaGUgdGFnIHdpbGwgYmUgcmV0cmlldmVkIGJ5IEZTLUNhY2hlIHdoZW4gaXQgY2FsbHMgdGhlIG9iamVjdCBkZWZpbml0aW9uCitvcGVyYXRpb24gc2VsZWN0X2NhY2hlKCkuCisKKworPT09PT09PT09PT09PT09PT09CitJTkRFWCBSRUdJU1RSQVRJT04KKz09PT09PT09PT09PT09PT09PQorCitUaGUgdGhpcmQgc3RlcCBpcyB0byBpbmZvcm0gRlMtQ2FjaGUgYWJvdXQgcGFydCBvZiBhbiBpbmRleCBoaWVyYXJjaHkgdGhhdCBjYW4KK2JlIHVzZWQgdG8gbG9jYXRlIGZpbGVzLiAgVGhpcyBpcyBkb25lIGJ5IHJlcXVlc3RpbmcgYSBjb29raWUgZm9yIGVhY2ggaW5kZXggaW4KK3RoZSBwYXRoIHRvIHRoZSBmaWxlOgorCisJc3RydWN0IGZzY2FjaGVfY29va2llICoKKwlmc2NhY2hlX2FjcXVpcmVfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqcGFyZW50LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmc2NhY2hlX29iamVjdF9kZWYgKmRlZiwKKwkJCSAgICAgICB2b2lkICpuZXRmc19kYXRhKTsKKworVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGluZGV4IGVudHJ5IGluIHRoZSBpbmRleCByZXByZXNlbnRlZCBieSBwYXJlbnQsCitmaWxsaW5nIGluIHRoZSBpbmRleCBlbnRyeSBieSBjYWxsaW5nIHRoZSBvcGVyYXRpb25zIHBvaW50ZWQgdG8gYnkgZGVmLgorCitOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBuZXZlciByZXR1cm5zIGFuIGVycm9yIC0gYWxsIGVycm9ycyBhcmUgaGFuZGxlZAoraW50ZXJuYWxseS4gIEl0IG1heSwgaG93ZXZlciwgcmV0dXJuIE5VTEwgdG8gaW5kaWNhdGUgbm8gY29va2llLiAgSXQgaXMgcXVpdGUKK2FjY2VwdGFibGUgdG8gcGFzcyB0aGlzIHRva2VuIGJhY2sgdG8gdGhpcyBmdW5jdGlvbiBhcyB0aGUgcGFyZW50IHRvIGFub3RoZXIKK2FjcXVpc2l0aW9uIChvciBldmVuIHRvIHRoZSByZWxpbnF1aXNoIGNvb2tpZSwgcmVhZCBwYWdlIGFuZCB3cml0ZSBwYWdlCitmdW5jdGlvbnMgLSBzZWUgYmVsb3cpLgorCitOb3RlIGFsc28gdGhhdCBubyBpbmRpY2VzIGFyZSBhY3R1YWxseSBjcmVhdGVkIGluIGEgY2FjaGUgdW50aWwgYSBub24taW5kZXgKK29iamVjdCBuZWVkcyB0byBiZSBjcmVhdGVkIHNvbWV3aGVyZSBkb3duIHRoZSBoaWVyYXJjaHkuICBGdXJ0aGVybW9yZSwgYW4gaW5kZXgKK21heSBiZSBjcmVhdGVkIGluIHNldmVyYWwgZGlmZmVyZW50IGNhY2hlcyBpbmRlcGVuZGVudGx5IGF0IGRpZmZlcmVudCB0aW1lcy4KK1RoaXMgaXMgYWxsIGhhbmRsZWQgdHJhbnNwYXJlbnRseSwgYW5kIHRoZSBuZXRmcyBkb2Vzbid0IHNlZSBhbnkgb2YgaXQuCisKK0ZvciBleGFtcGxlLCB3aXRoIEFGUywgYSBjZWxsIHdvdWxkIGJlIGFkZGVkIHRvIHRoZSBwcmltYXJ5IGluZGV4LiAgVGhpcyBpbmRleAorZW50cnkgd291bGQgaGF2ZSBhIGRlcGVuZGVudCBpbm9kZSBjb250YWluaW5nIGEgdm9sdW1lIGxvY2F0aW9uIGluZGV4IGZvciB0aGUKK3ZvbHVtZSBtYXBwaW5ncyB3aXRoaW4gdGhpcyBjZWxsOgorCisJY2VsbC0+Y2FjaGUgPQorCQlmc2NhY2hlX2FjcXVpcmVfY29va2llKGFmc19jYWNoZV9uZXRmcy5wcmltYXJ5X2luZGV4LAorCQkJCSAgICAgICAmYWZzX2NlbGxfY2FjaGVfaW5kZXhfZGVmLAorCQkJCSAgICAgICBjZWxsKTsKKworVGhlbiB3aGVuIGEgdm9sdW1lIGxvY2F0aW9uIHdhcyBhY2Nlc3NlZCwgaXQgd291bGQgYmUgZW50ZXJlZCBpbnRvIHRoZSBjZWxsJ3MKK2luZGV4IGFuZCBhbiBpbm9kZSB3b3VsZCBiZSBhbGxvY2F0ZWQgdGhhdCBhY3RzIGFzIGEgdm9sdW1lIHR5cGUgYW5kIGhhc2ggY2hhaW4KK2NvbWJpbmF0aW9uOgorCisJdmxvY2F0aW9uLT5jYWNoZSA9CisJCWZzY2FjaGVfYWNxdWlyZV9jb29raWUoY2VsbC0+Y2FjaGUsCisJCQkJICAgICAgICZhZnNfdmxvY2F0aW9uX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkgICAgICAgdmxvY2F0aW9uKTsKKworQW5kIHRoZW4gYSBwYXJ0aWN1bGFyIGZsYXZvdXIgb2Ygdm9sdW1lIChSL08gZm9yIGV4YW1wbGUpIGNvdWxkIGJlIGFkZGVkIHRvCit0aGF0IGluZGV4LCBjcmVhdGluZyBhbm90aGVyIGluZGV4IGZvciB2bm9kZXMgKEFGUyBpbm9kZSBlcXVpdmFsZW50cyk6CisKKwl2b2x1bWUtPmNhY2hlID0KKwkJZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSh2bG9jYXRpb24tPmNhY2hlLAorCQkJCSAgICAgICAmYWZzX3ZvbHVtZV9jYWNoZV9pbmRleF9kZWYsCisJCQkJICAgICAgIHZvbHVtZSk7CisKKworPT09PT09PT09PT09PT09PT09PT09PQorREFUQSBGSUxFIFJFR0lTVFJBVElPTgorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm91cnRoIHN0ZXAgaXMgdG8gcmVxdWVzdCBhIGRhdGEgZmlsZSBiZSBjcmVhdGVkIGluIHRoZSBjYWNoZS4gIFRoaXMgaXMKK2lkZW50aWNhbCB0byBpbmRleCBjb29raWUgYWNxdWlzaXRpb24uICBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIHR5cGUgaW4KK3RoZSBvYmplY3QgZGVmaW5pdGlvbiBzaG91bGQgYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gaW5kZXggdHlwZS4KKworCXZub2RlLT5jYWNoZSA9CisJCWZzY2FjaGVfYWNxdWlyZV9jb29raWUodm9sdW1lLT5jYWNoZSwKKwkJCQkgICAgICAgJmFmc192bm9kZV9jYWNoZV9vYmplY3RfZGVmLAorCQkJCSAgICAgICB2bm9kZSk7CisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitNSVNDRUxMQU5FT1VTIE9CSkVDVCBSRUdJU1RSQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbiBvcHRpb25hbCBzdGVwIGlzIHRvIHJlcXVlc3QgYW4gb2JqZWN0IG9mIG1pc2NlbGxhbmVvdXMgdHlwZSBiZSBjcmVhdGVkIGluCit0aGUgY2FjaGUuICBUaGlzIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gaW5kZXggY29va2llIGFjcXVpc2l0aW9uLiAgVGhlIG9ubHkKK2RpZmZlcmVuY2UgaXMgdGhhdCB0aGUgdHlwZSBpbiB0aGUgb2JqZWN0IGRlZmluaXRpb24gc2hvdWxkIGJlIHNvbWV0aGluZyBvdGhlcgordGhhbiBpbmRleCB0eXBlLiAgV2hpbHN0IHRoZSBwYXJlbnQgb2JqZWN0IGNvdWxkIGJlIGFuIGluZGV4LCBpdCdzIG1vcmUgbGlrZWx5CitpdCB3b3VsZCBiZSBzb21lIG90aGVyIHR5cGUgb2Ygb2JqZWN0IHN1Y2ggYXMgYSBkYXRhIGZpbGUuCisKKwl4YXR0ci0+Y2FjaGUgPQorCQlmc2NhY2hlX2FjcXVpcmVfY29va2llKHZub2RlLT5jYWNoZSwKKwkJCQkgICAgICAgJmFmc194YXR0cl9jYWNoZV9vYmplY3RfZGVmLAorCQkJCSAgICAgICB4YXR0cik7CisKK01pc2NlbGxhbmVvdXMgb2JqZWN0cyBtaWdodCBiZSB1c2VkIHRvIHN0b3JlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb3IgZGlyZWN0b3J5CitlbnRyaWVzIGZvciBleGFtcGxlLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitTRVRUSU5HIFRIRSBEQVRBIEZJTEUgU0laRQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZpZnRoIHN0ZXAgaXMgdG8gc2V0IHRoZSBwaHlzaWNhbCBhdHRyaWJ1dGVzIG9mIHRoZSBmaWxlLCBzdWNoIGFzIGl0cyBzaXplLgorVGhpcyBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgcmVzZXJ2ZSBhbnkgc3BhY2UgaW4gdGhlIGNhY2hlLCBidXQgcGVybWl0cyB0aGUKK2NhY2hlIHRvIGFkanVzdCBpdHMgbWV0YWRhdGEgZm9yIGRhdGEgdHJhY2tpbmcgYXBwcm9wcmlhdGVseToKKworCWludCBmc2NhY2hlX2F0dHJfY2hhbmdlZChzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSk7CisKK1RoZSBjYWNoZSB3aWxsIHJldHVybiAtRU5PQlVGUyBpZiB0aGVyZSBpcyBubyBiYWNraW5nIGNhY2hlIG9yIGlmIHRoZXJlIGlzIG5vCitzcGFjZSB0byBhbGxvY2F0ZSBhbnkgZXh0cmEgbWV0YWRhdGEgcmVxdWlyZWQgaW4gdGhlIGNhY2hlLiAgVGhlIGF0dHJpYnV0ZXMKK3dpbGwgYmUgYWNjZXNzZWQgd2l0aCB0aGUgZ2V0X2F0dHIoKSBjb29raWUgZGVmaW5pdGlvbiBvcGVyYXRpb24uCisKK05vdGUgdGhhdCBhdHRlbXB0cyB0byByZWFkIG9yIHdyaXRlIGRhdGEgcGFnZXMgaW4gdGhlIGNhY2hlIG92ZXIgdGhpcyBzaXplIG1heQorYmUgcmVidWZmZWQgd2l0aCAtRU5PQlVGUy4KKworVGhpcyBvcGVyYXRpb24gc2NoZWR1bGVzIGFuIGF0dHJpYnV0ZSBhZGp1c3RtZW50IHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBhdAorc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCBhbmQgYXMgc3VjaCwgaXQgbWF5IGhhcHBlbiBhZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucwordG8gdGhlIGNhbGxlci4gIFRoZSBhdHRyaWJ1dGUgYWRqdXN0bWVudCBleGNsdWRlcyByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zLgorCisKKz09PT09PT09PT09PT09PT09PT09PQorUEFHRSBSRUFEL0FMTE9DL1dSSVRFCis9PT09PT09PT09PT09PT09PT09PT0KKworQW5kIHRoZSBzaXh0aCBzdGVwIGlzIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBwYWdlcyBpbiB0aGUgY2FjaGUuICBUaGVyZSBhcmUKK3RocmVlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIHRvIGRvIHRoaXMuCisKK05vdGU6CisKKyAoMSkgQSBwYWdlIHNob3VsZCBub3QgYmUgcmUtcmVhZCBvciByZS1hbGxvY2F0ZWQgd2l0aG91dCB1bmNhY2hpbmcgaXQgZmlyc3QuCisKKyAoMikgQSByZWFkIG9yIGFsbG9jYXRlZCBwYWdlIG11c3QgYmUgdW5jYWNoZWQgd2hlbiB0aGUgbmV0ZnMgcGFnZSBpcyByZWxlYXNlZAorICAgICBmcm9tIHRoZSBwYWdlY2FjaGUuCisKKyAoMykgQSBwYWdlIHNob3VsZCBvbmx5IGJlIHdyaXR0ZW4gdG8gdGhlIGNhY2hlIGlmIHByZXZpb3VzIHJlYWQgb3IgYWxsb2NhdGVkLgorCitUaGlzIHBlcm1pdHMgdGhlIGNhY2hlIHRvIG1haW50YWluIGl0cyBwYWdlIHRyYWNraW5nIGluIHByb3BlciBvcmRlci4KKworCitQQUdFIFJFQUQKKy0tLS0tLS0tLQorCitGaXJzdGx5LCB0aGUgbmV0ZnMgc2hvdWxkIGFzayBGUy1DYWNoZSB0byBleGFtaW5lIHRoZSBjYWNoZXMgYW5kIHJlYWQgdGhlCitjb250ZW50cyBjYWNoZWQgZm9yIGEgcGFydGljdWxhciBwYWdlIG9mIGEgcGFydGljdWxhciBmaWxlIGlmIHByZXNlbnQsIG9yIGVsc2UKK2FsbG9jYXRlIHNwYWNlIHRvIHN0b3JlIHRoZSBjb250ZW50cyBpZiBub3Q6CisKKwl0eXBlZGVmCisJdm9pZCAoKmZzY2FjaGVfcndfY29tcGxldGVfdCkoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICAgdm9pZCAqY29udGV4dCwKKwkJCQkgICAgICBpbnQgZXJyb3IpOworCisJaW50IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICAgZnNjYWNoZV9yd19jb21wbGV0ZV90IGVuZF9pb19mdW5jLAorCQkJCSAgICAgICB2b2lkICpjb250ZXh0LAorCQkJCSAgICAgICBnZnBfdCBnZnApOworCitUaGUgY29va2llIGFyZ3VtZW50IG11c3Qgc3BlY2lmeSBhIGNvb2tpZSBmb3IgYW4gb2JqZWN0IHRoYXQgaXNuJ3QgYW4gaW5kZXgsCit0aGUgcGFnZSBzcGVjaWZpZWQgd2lsbCBoYXZlIHRoZSBkYXRhIGxvYWRlZCBpbnRvIGl0IChhbmQgaXMgYWxzbyB1c2VkIHRvCitzcGVjaWZ5IHRoZSBwYWdlIG51bWJlciksIGFuZCB0aGUgZ2ZwIGFyZ3VtZW50IGlzIHVzZWQgdG8gY29udHJvbCBob3cgYW55CittZW1vcnkgYWxsb2NhdGlvbnMgbWFkZSBhcmUgc2F0aXNmaWVkLgorCitJZiB0aGUgY29va2llIGluZGljYXRlcyB0aGUgaW5vZGUgaXMgbm90IGNhY2hlZDoKKworICgxKSBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gLUVOT0JVRlMuCisKK0Vsc2UgaWYgdGhlcmUncyBhIGNvcHkgb2YgdGhlIHBhZ2UgcmVzaWRlbnQgaW4gdGhlIGNhY2hlOgorCisgKDEpIFRoZSBtYXJrX3BhZ2VzX2NhY2hlZCgpIGNvb2tpZSBvcGVyYXRpb24gd2lsbCBiZSBjYWxsZWQgb24gdGhhdCBwYWdlLgorCisgKDIpIFRoZSBmdW5jdGlvbiB3aWxsIHN1Ym1pdCBhIHJlcXVlc3QgdG8gcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBjYWNoZSdzCisgICAgIGJhY2tpbmcgZGV2aWNlIGRpcmVjdGx5IGludG8gdGhlIHBhZ2Ugc3BlY2lmaWVkLgorCisgKDMpIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwLgorCisgKDQpIFdoZW4gdGhlIHJlYWQgaXMgY29tcGxldGUsIGVuZF9pb19mdW5jKCkgd2lsbCBiZSBpbnZva2VkIHdpdGg6CisKKyAgICAgKCopIFRoZSBuZXRmcyBkYXRhIHN1cHBsaWVkIHdoZW4gdGhlIGNvb2tpZSB3YXMgY3JlYXRlZC4KKworICAgICAoKikgVGhlIHBhZ2UgZGVzY3JpcHRvci4KKworICAgICAoKikgVGhlIGNvbnRleHQgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBhYm92ZSBmdW5jdGlvbi4gIFRoaXMgd2lsbCBiZQorICAgICAgICAgbWFpbnRhaW5lZCB3aXRoIHRoZSBnZXRfY29udGV4dC9wdXRfY29udGV4dCBmdW5jdGlvbnMgbWVudGlvbmVkIGFib3ZlLgorCisgICAgICgqKSBBbiBhcmd1bWVudCB0aGF0J3MgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGZvciBhbiBlcnJvciBjb2RlLgorCisgICAgIElmIGFuIGVycm9yIG9jY3VycywgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCB0aGUgcGFnZSBjb250YWlucyBubyB1c2FibGUKKyAgICAgZGF0YS4KKworICAgICBlbmRfaW9fZnVuYygpIHdpbGwgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dCBpZiB0aGUgcmVhZCBpcyByZXN1bHRzIGluCisgICAgIGFuIGVycm9yLCBidXQgaXQgbWlnaHQgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0IGlmIHRoZSByZWFkIGlzCisgICAgIHN1Y2Nlc3NmdWwuCisKK090aGVyd2lzZSwgaWYgdGhlcmUncyBub3QgYSBjb3B5IGF2YWlsYWJsZSBpbiBjYWNoZSwgYnV0IHRoZSBjYWNoZSBtYXkgYmUgYWJsZQordG8gc3RvcmUgdGhlIHBhZ2U6CisKKyAoMSkgVGhlIG1hcmtfcGFnZXNfY2FjaGVkKCkgY29va2llIG9wZXJhdGlvbiB3aWxsIGJlIGNhbGxlZCBvbiB0aGF0IHBhZ2UuCisKKyAoMikgQSBibG9jayBtYXkgYmUgcmVzZXJ2ZWQgaW4gdGhlIGNhY2hlIGFuZCBhdHRhY2hlZCB0byB0aGUgb2JqZWN0IGF0IHRoZQorICAgICBhcHByb3ByaWF0ZSBwbGFjZS4KKworICgzKSBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gLUVOT0RBVEEuCisKK1RoaXMgZnVuY3Rpb24gbWF5IGFsc28gcmV0dXJuIC1FTk9NRU0gb3IgLUVJTlRSLCBpbiB3aGljaCBjYXNlIGl0IHdvbid0IGhhdmUKK3JlYWQgYW55IGRhdGEgZnJvbSB0aGUgY2FjaGUuCisKKworUEFHRSBBTExPQ0FURQorLS0tLS0tLS0tLS0tLQorCitBbHRlcm5hdGl2ZWx5LCBpZiB0aGVyZSdzIG5vdCBleHBlY3RlZCB0byBiZSBhbnkgZGF0YSBpbiB0aGUgY2FjaGUgZm9yIGEgcGFnZQorYmVjYXVzZSB0aGUgZmlsZSBoYXMgYmVlbiBleHRlbmRlZCwgYSBibG9jayBjYW4gc2ltcGx5IGJlIGFsbG9jYXRlZCBpbnN0ZWFkOgorCisJaW50IGZzY2FjaGVfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICBnZnBfdCBnZnApOworCitUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKCkgZnVuY3Rpb24sIGV4Y2VwdCB0aGF0IGl0CituZXZlciByZWFkcyBmcm9tIHRoZSBjYWNoZS4gIEl0IHdpbGwgcmV0dXJuIDAgaWYgYSBibG9jayBoYXMgYmVlbiBhbGxvY2F0ZWQsCityYXRoZXIgdGhhbiAtRU5PREFUQSBhcyB0aGUgb3RoZXIgd291bGQuICBPbmUgb3IgdGhlIG90aGVyIG11c3QgYmUgcGVyZm9ybWVkCitiZWZvcmUgd3JpdGluZyB0byB0aGUgY2FjaGUuCisKK1RoZSBtYXJrX3BhZ2VzX2NhY2hlZCgpIGNvb2tpZSBvcGVyYXRpb24gd2lsbCBiZSBjYWxsZWQgb24gdGhlIHBhZ2UgaWYKK3N1Y2Nlc3NmdWwuCisKKworUEFHRSBXUklURQorLS0tLS0tLS0tLQorCitTZWNvbmRseSwgaWYgdGhlIG5ldGZzIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYWdlIChlaXRoZXIgZHVlIHRvIGFuCitpbml0aWFsIGRvd25sb2FkIG9yIGlmIGEgdXNlciBwZXJmb3JtcyBhIHdyaXRlKSwgdGhlbiB0aGUgcGFnZSBzaG91bGQgYmUKK3dyaXR0ZW4gYmFjayB0byB0aGUgY2FjaGU6CisKKwlpbnQgZnNjYWNoZV93cml0ZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICAgIGdmcF90IGdmcCk7CisKK1RoZSBjb29raWUgYXJndW1lbnQgbXVzdCBzcGVjaWZ5IGEgZGF0YSBmaWxlIGNvb2tpZSwgdGhlIHBhZ2Ugc3BlY2lmaWVkIHNob3VsZAorY29udGFpbiB0aGUgZGF0YSB0byBiZSB3cml0dGVuIChhbmQgaXMgYWxzbyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhZ2UgbnVtYmVyKSwKK2FuZCB0aGUgZ2ZwIGFyZ3VtZW50IGlzIHVzZWQgdG8gY29udHJvbCBob3cgYW55IG1lbW9yeSBhbGxvY2F0aW9ucyBtYWRlIGFyZQorc2F0aXNmaWVkLgorCitUaGUgcGFnZSBtdXN0IGhhdmUgZmlyc3QgYmVlbiByZWFkIG9yIGFsbG9jYXRlZCBzdWNjZXNzZnVsbHkgYW5kIG11c3Qgbm90IGhhdmUKK2JlZW4gdW5jYWNoZWQgYmVmb3JlIHdyaXRpbmcgaXMgcGVyZm9ybWVkLgorCitJZiB0aGUgY29va2llIGluZGljYXRlcyB0aGUgaW5vZGUgaXMgbm90IGNhY2hlZCB0aGVuOgorCisgKDEpIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtRU5PQlVGUy4KKworRWxzZSBpZiBzcGFjZSBjYW4gYmUgYWxsb2NhdGVkIGluIHRoZSBjYWNoZSB0byBob2xkIHRoaXMgcGFnZToKKworICgxKSBQR19mc2NhY2hlX3dyaXRlIHdpbGwgYmUgc2V0IG9uIHRoZSBwYWdlLgorCisgKDIpIFRoZSBmdW5jdGlvbiB3aWxsIHN1Ym1pdCBhIHJlcXVlc3QgdG8gd3JpdGUgdGhlIGRhdGEgdG8gY2FjaGUncyBiYWNraW5nCisgICAgIGRldmljZSBkaXJlY3RseSBmcm9tIHRoZSBwYWdlIHNwZWNpZmllZC4KKworICgzKSBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMC4KKworICg0KSBXaGVuIHRoZSB3cml0ZSBpcyBjb21wbGV0ZSBQR19mc2NhY2hlX3dyaXRlIGlzIGNsZWFyZWQgb24gdGhlIHBhZ2UgYW5kCisgICAgIGFueW9uZSB3YWl0aW5nIGZvciB0aGF0IGJpdCB3aWxsIGJlIHdva2VuIHVwLgorCitFbHNlIGlmIHRoZXJlJ3Mgbm8gc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBjYWNoZSwgLUVOT0JVRlMgd2lsbCBiZSByZXR1cm5lZC4gIEl0CitpcyBhbHNvIHBvc3NpYmxlIGZvciB0aGUgUEdfZnNjYWNoZV93cml0ZSBiaXQgdG8gYmUgY2xlYXJlZCB3aGVuIG5vIHdyaXRlIHRvb2sKK3BsYWNlIGlmIHVuZm9yZXNlZW4gY2lyY3Vtc3RhbmNlcyBhcm9zZSAoc3VjaCBhcyBhIGRpc2sgZXJyb3IpLgorCitXcml0aW5nIHRha2VzIHBsYWNlIGFzeW5jaHJvbm91c2x5LgorCisKK01VTFRJUExFIFBBR0UgUkVBRAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZmFjaWxpdHkgaXMgcHJvdmlkZWQgdG8gcmVhZCBzZXZlcmFsIHBhZ2VzIGF0IG9uY2UsIGFzIHJlcXVlc3RlZCBieSB0aGUKK3JlYWRwYWdlcygpIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9uOgorCisJaW50IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCQlpbnQgKm5yX3BhZ2VzLAorCQkJCQlmc2NhY2hlX3J3X2NvbXBsZXRlX3QgZW5kX2lvX2Z1bmMsCisJCQkJCXZvaWQgKmNvbnRleHQsCisJCQkJCWdmcF90IGdmcCk7CisKK1RoaXMgd29ya3MgaW4gYSBzaW1pbGFyIHdheSB0byBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZSgpLCBleGNlcHQ6CisKKyAoMSkgQW55IHBhZ2UgaXQgY2FuIHJldHJpZXZlIGRhdGEgZm9yIGlzIHJlbW92ZWQgZnJvbSBwYWdlcyBhbmQgbnJfcGFnZXMgYW5kCisgICAgIGRpc3BhdGNoZWQgZm9yIHJlYWRpbmcgdG8gdGhlIGRpc2suICBSZWFkcyBvZiBhZGphY2VudCBwYWdlcyBvbiBkaXNrIG1heQorICAgICBiZSBtZXJnZWQgZm9yIGdyZWF0ZXIgZWZmaWNpZW5jeS4KKworICgyKSBUaGUgbWFya19wYWdlc19jYWNoZWQoKSBjb29raWUgb3BlcmF0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIHNldmVyYWwgcGFnZXMKKyAgICAgYXQgb25jZSBpZiB0aGV5J3JlIGJlaW5nIHJlYWQgb3IgYWxsb2NhdGVkLgorCisgKDMpIElmIHRoZXJlIHdhcyBhbiBnZW5lcmFsIGVycm9yLCB0aGVuIHRoYXQgZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKworICAgICBFbHNlIGlmIHNvbWUgcGFnZXMgY291bGRuJ3QgYmUgYWxsb2NhdGVkIG9yIHJlYWQsIHRoZW4gLUVOT0JVRlMgd2lsbCBiZQorICAgICByZXR1cm5lZC4KKworICAgICBFbHNlIGlmIHNvbWUgcGFnZXMgY291bGRuJ3QgYmUgcmVhZCBidXQgd2VyZSBhbGxvY2F0ZWQsIHRoZW4gLUVOT0RBVEEgd2lsbAorICAgICBiZSByZXR1cm5lZC4KKworICAgICBPdGhlcndpc2UsIGlmIGFsbCBwYWdlcyBoYWQgcmVhZHMgZGlzcGF0Y2hlZCwgdGhlbiAwIHdpbGwgYmUgcmV0dXJuZWQsIHRoZQorICAgICBsaXN0IHdpbGwgYmUgZW1wdHkgYW5kICpucl9wYWdlcyB3aWxsIGJlIDAuCisKKyAoNCkgZW5kX2lvX2Z1bmMgd2lsbCBiZSBjYWxsZWQgb25jZSBmb3IgZWFjaCBwYWdlIGJlaW5nIHJlYWQgYXMgdGhlIHJlYWRzCisgICAgIGNvbXBsZXRlLiAgSXQgd2lsbCBiZSBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0IGlmIGVycm9yICE9IDAsIGJ1dCBpdCBtYXkKKyAgICAgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0IGlmIHRoZXJlIGlzIG5vIGVycm9yLgorCitOb3RlIHRoYXQgYSByZXR1cm4gb2YgLUVOT0RBVEEsIC1FTk9CVUZTIG9yIGFueSBvdGhlciBlcnJvciBkb2VzIG5vdCBwcmVjbHVkZQorc29tZSBvZiB0aGUgcGFnZXMgYmVpbmcgcmVhZCBhbmQgc29tZSBiZWluZyBhbGxvY2F0ZWQuICBUaG9zZSBwYWdlcyB3aWxsIGhhdmUKK2JlZW4gbWFya2VkIGFwcHJvcHJpYXRlbHkgYW5kIHdpbGwgbmVlZCB1bmNhY2hpbmcuCisKKworPT09PT09PT09PT09PT0KK1BBR0UgVU5DQUNISU5HCis9PT09PT09PT09PT09PQorCitUbyB1bmNhY2hlIGEgcGFnZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkOgorCisJdm9pZCBmc2NhY2hlX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlKTsKKworVGhpcyBmdW5jdGlvbiBwZXJtaXRzIHRoZSBjYWNoZSB0byByZWxlYXNlIGFueSBpbi1tZW1vcnkgcmVwcmVzZW50YXRpb24gaXQKK21pZ2h0IGJlIGhvbGRpbmcgZm9yIHRoaXMgbmV0ZnMgcGFnZS4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgb25jZSBmb3IKK2VhY2ggcGFnZSBvbiB3aGljaCB0aGUgcmVhZCBvciB3cml0ZSBwYWdlIGZ1bmN0aW9ucyBhYm92ZSBoYXZlIGJlZW4gY2FsbGVkIHRvCittYWtlIHN1cmUgdGhlIGNhY2hlJ3MgaW4tbWVtb3J5IHRyYWNraW5nIGluZm9ybWF0aW9uIGdldHMgdG9ybiBkb3duLgorCitOb3RlIHRoYXQgcGFnZXMgY2FuJ3QgYmUgZXhwbGljaXRseSBkZWxldGVkIGZyb20gdGhlIGEgZGF0YSBmaWxlLiAgVGhlIHdob2xlCitkYXRhIGZpbGUgbXVzdCBiZSByZXRpcmVkIChzZWUgdGhlIHJlbGlucXVpc2ggY29va2llIGZ1bmN0aW9uIGJlbG93KS4KKworRnVydGhlcm1vcmUsIG5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGNhbmNlbCB0aGUgYXN5bmNocm9ub3VzIHJlYWQgb3Igd3JpdGUKK29wZXJhdGlvbiBzdGFydGVkIGJ5IHRoZSByZWFkL2FsbG9jIGFuZCB3cml0ZSBmdW5jdGlvbnMsIHNvIHRoZSBwYWdlCitpbnZhbGlkYXRpb24gYW5kIHJlbGVhc2UgZnVuY3Rpb25zIG11c3QgdXNlOgorCisJYm9vbCBmc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpOworCit0byBzZWUgaWYgYSBwYWdlIGlzIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGNhY2hlLCBhbmQ6CisKKwl2b2lkIGZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK3RvIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBpZiBpdCBpcy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorSU5ERVggQU5EIERBVEEgRklMRSBVUERBVEUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHJlcXVlc3QgYW4gdXBkYXRlIG9mIHRoZSBpbmRleCBkYXRhIGZvciBhbiBpbmRleCBvciBvdGhlciBvYmplY3QsIHRoZQorZm9sbG93aW5nIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQ6CisKKwl2b2lkIGZzY2FjaGVfdXBkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSk7CisKK1RoaXMgZnVuY3Rpb24gd2lsbCByZWZlciBiYWNrIHRvIHRoZSBuZXRmc19kYXRhIHBvaW50ZXIgc3RvcmVkIGluIHRoZSBjb29raWUgYnkKK3RoZSBhY3F1aXNpdGlvbiBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIGRhdGEgdG8gd3JpdGUgaW50byBlYWNoIHJldmlzZWQgaW5kZXgKK2VudHJ5LiAgVGhlIHVwZGF0ZSBtZXRob2QgaW4gdGhlIHBhcmVudCBpbmRleCBkZWZpbml0aW9uIHdpbGwgYmUgY2FsbGVkIHRvCit0cmFuc2ZlciB0aGUgZGF0YS4KKworTm90ZSB0aGF0IHBhcnRpYWwgdXBkYXRlcyBtYXkgaGFwcGVuIGF1dG9tYXRpY2FsbHkgYXQgb3RoZXIgdGltZXMsIHN1Y2ggYXMgd2hlbgorZGF0YSBibG9ja3MgYXJlIGFkZGVkIHRvIGEgZGF0YSBmaWxlIG9iamVjdC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitNSVNDRUxMQU5FT1VTIENPT0tJRSBPUEVSQVRJT05TCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBvcGVyYXRpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCBjb29raWVzOgorCisgKCopIENvb2tpZSBwaW5uaW5nOgorCisJaW50IGZzY2FjaGVfcGluX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSk7CisJdm9pZCBmc2NhY2hlX3VucGluX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSk7CisKKyAgICAgVGhlc2Ugb3BlcmF0aW9ucyBwZXJtaXQgZGF0YSBjb29raWVzIHRvIGJlIHBpbm5lZCBpbnRvIHRoZSBjYWNoZSBhbmQgdG8KKyAgICAgaGF2ZSB0aGUgcGlubmluZyByZW1vdmVkLiAgVGhleSBhcmUgbm90IHBlcm1pdHRlZCBvbiBpbmRleCBjb29raWVzLgorCisgICAgIFRoZSBwaW5uaW5nIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgLUVOT0JVRlMgaW4gdGhlIGNvb2tpZQorICAgICBpc24ndCBiYWNrZWQgYnkgYSBjYWNoZSwgLUVPUE5PVFNVUFAgaWYgdGhlIGNhY2hlIGRvZXNuJ3Qgc3VwcG9ydCBwaW5uaW5nLAorICAgICAtRU5PU1BDIGlmIHRoZXJlIGlzbid0IGVub3VnaCBzcGFjZSB0byBob25vdXIgdGhlIG9wZXJhdGlvbiwgLUVOT01FTSBvcgorICAgICAtRUlPIGlmIHRoZXJlJ3MgYW55IG90aGVyIHByb2JsZW0uCisKKyAoKikgRGF0YSBzcGFjZSByZXNlcnZhdGlvbjoKKworCWludCBmc2NhY2hlX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIGxvZmZfdCBzaXplKTsKKworICAgICBUaGlzIHBlcm1pdHMgYSBuZXRmcyB0byByZXF1ZXN0IGNhY2hlIHNwYWNlIGJlIHJlc2VydmVkIHRvIHN0b3JlIHVwIHRvIHRoZQorICAgICBnaXZlbiBhbW91bnQgb2YgYSBmaWxlLiAgSXQgaXMgcGVybWl0dGVkIHRvIGFzayBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50CisgICAgIHNpemUgb2YgdGhlIGZpbGUgdG8gYWxsb3cgZm9yIGZ1dHVyZSBmaWxlIGV4cGFuc2lvbi4KKworICAgICBJZiBzaXplIGlzIGdpdmVuIGFzIHplcm8gdGhlbiB0aGUgcmVzZXJ2YXRpb24gd2lsbCBiZSBjYW5jZWxsZWQuCisKKyAgICAgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgLUVOT0JVRlMgaW4gdGhlIGNvb2tpZSBpc24ndAorICAgICBiYWNrZWQgYnkgYSBjYWNoZSwgLUVPUE5PVFNVUFAgaWYgdGhlIGNhY2hlIGRvZXNuJ3Qgc3VwcG9ydCByZXNlcnZhdGlvbnMsCisgICAgIC1FTk9TUEMgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uLCAtRU5PTUVNIG9yCisgICAgIC1FSU8gaWYgdGhlcmUncyBhbnkgb3RoZXIgcHJvYmxlbS4KKworICAgICBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHBpbiBhbiBvYmplY3QgaW4gYSBjYWNoZTsgaXQgY2FuIHN0aWxsIGJlIGN1bGxlZCB0bworICAgICBtYWtlIHNwYWNlIGlmIGl0J3Mgbm90IGluIHVzZS4KKworCis9PT09PT09PT09PT09PT09PT09PT0KK0NPT0tJRSBVTlJFR0lTVFJBVElPTgorPT09PT09PT09PT09PT09PT09PT09CisKK1RvIGdldCByaWQgb2YgYSBjb29raWUsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZC4KKworCXZvaWQgZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkgICAgICAgaW50IHJldGlyZSk7CisKK0lmIHJldGlyZSBpcyBub24temVybywgdGhlbiB0aGUgb2JqZWN0IHdpbGwgYmUgbWFya2VkIGZvciByZWN5Y2xpbmcsIGFuZCBhbGwKK2NvcGllcyBvZiBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhbGwgYWN0aXZlIGNhY2hlcyBpbiB3aGljaCBpdCBpcyBwcmVzZW50LgorTm90IG9ubHkgdGhhdCBidXQgYWxsIGNoaWxkIG9iamVjdHMgd2lsbCBhbHNvIGJlIHJldGlyZWQuCisKK0lmIHJldGlyZSBpcyB6ZXJvLCB0aGVuIHRoZSBvYmplY3QgbWF5IGJlIGF2YWlsYWJsZSBhZ2FpbiB3aGVuIG5leHQgdGhlCithY3F1aXNpdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQuICBSZXRpcmVtZW50IGhlcmUgd2lsbCBvdmVycnVsZSB0aGUgcGlubmluZyBvbiBhCitjb29raWUuCisKK09uZSB2ZXJ5IGltcG9ydGFudCBub3RlIC0gcmVsaW5xdWlzaCBtdXN0IE5PVCBiZSBjYWxsZWQgZm9yIGEgY29va2llIHVubGVzcyBhbGwKK3RoZSBjb29raWVzIGZvciAiY2hpbGQiIGluZGljZXMsIG9iamVjdHMgYW5kIHBhZ2VzIGhhdmUgYmVlbiByZWxpbnF1aXNoZWQKK2ZpcnN0LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJTkRFWCBBTkQgREFUQSBGSUxFIElOVkFMSURBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBpbnZhbGlkYXRlIGFuIGluZGV4IHN1YnRyZWUgb3IgYSBkYXRhIGZpbGUuICBUbyBkbwordGhpcywgdGhlIGNhbGxlciBzaG91bGQgcmVsaW5xdWlzaCBhbmQgcmV0aXJlIHRoZSBjb29raWUgdGhleSBoYXZlLCBhbmQgdGhlbgorYWNxdWlyZSBhIG5ldyBvbmUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CitGUy1DQUNIRSBTUEVDSUZJQyBQQUdFIEZMQUcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGUy1DYWNoZSBtYWtlcyB1c2Ugb2YgYSBwYWdlIGZsYWcsIFBHX3ByaXZhdGVfMiwgZm9yIGl0cyBvd24gcHVycG9zZS4gIFRoaXMgaXMKK2dpdmVuIHRoZSBhbHRlcm5hdGl2ZSBuYW1lIFBHX2ZzY2FjaGUuCisKK1BHX2ZzY2FjaGUgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwYWdlIGlzIGtub3duIGJ5IHRoZSBjYWNoZSwgYW5kIHRoYXQKK3RoZSBjYWNoZSBtdXN0IGJlIGluZm9ybWVkIGlmIHRoZSBwYWdlIGlzIGdvaW5nIHRvIGdvIGF3YXkuICBJdCdzIGFuIGluZGljYXRpb24KK3RvIHRoZSBuZXRmcyB0aGF0IHRoZSBjYWNoZSBoYXMgYW4gaW50ZXJlc3QgaW4gdGhpcyBwYWdlLCB3aGVyZSBhbiBpbnRlcmVzdCBtYXkKK2JlIGEgcG9pbnRlciB0byBpdCwgcmVzb3VyY2VzIGFsbG9jYXRlZCBvciByZXNlcnZlZCBmb3IgaXQsIG9yIEkvTyBpbiBwcm9ncmVzcwordXBvbiBpdC4KKworVGhlIG5ldGZzIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiBpbiBtZXRob2RzIHN1Y2ggYXMgcmVsZWFzZXBhZ2UoKSB0bworZGV0ZXJtaW5lIHdoZXRoZXIgaXQgbmVlZHMgdG8gdW5jYWNoZSBhIHBhZ2Ugb3IgdXBkYXRlIGl0LgorCitGdXJ0aGVybW9yZSwgaWYgdGhpcyBiaXQgaXMgc2V0LCByZWxlYXNlcGFnZSgpIGFuZCBpbnZhbGlkYXRlcGFnZSgpIG9wZXJhdGlvbnMKK3dpbGwgYmUgY2FsbGVkIG9uIGEgcGFnZSB0byBnZXQgcmlkIG9mIGl0LCBldmVuIGlmIFBHX3ByaXZhdGUgaXMgbm90IHNldC4gIFRoaXMKK2FsbG93cyBjYWNoaW5nIHRvIGF0dGVtcHRlZCBvbiBhIHBhZ2UgYmVmb3JlIHJlYWRfY2FjaGVfcGFnZXMoKSB0byBiZSBjYWxsZWQKK2FmdGVyIGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcygpIGFzIHRoZSBmb3JtZXIgd2lsbCB0cnkgYW5kIHJlbGVhc2UgcGFnZXMgaXQKK3dhcyBnaXZlbiB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuCisKK1RoaXMgYml0IGRvZXMgbm90IG92ZXJsYXAgd2l0aCBzdWNoIGFzIFBHX3ByaXZhdGUuICBUaGlzIG1lYW5zIHRoYXQgRlMtQ2FjaGUKK2NhbiBiZSB1c2VkIHdpdGggYSBmaWxlc3lzdGVtIHRoYXQgdXNlcyB0aGUgYmxvY2sgYnVmZmVyaW5nIGNvZGUuCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBvcGVyYXRpb25zIGRlZmluZWQgb24gdGhpcyBmbGFnOgorCisJaW50IFBhZ2VGc0NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKKwl2b2lkIFNldFBhZ2VGc0NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQorCXZvaWQgQ2xlYXJQYWdlRnNDYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKKwlpbnQgVGVzdFNldFBhZ2VGc0NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQorCWludCBUZXN0Q2xlYXJQYWdlRnNDYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKKworVGhlc2UgZnVuY3Rpb25zIGFyZSBiaXQgdGVzdCwgYml0IHNldCwgYml0IGNsZWFyLCBiaXQgdGVzdCBhbmQgc2V0IGFuZCBiaXQKK3Rlc3QgYW5kIGNsZWFyIG9wZXJhdGlvbnMgb24gUEdfZnNjYWNoZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9vYmplY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29iamVjdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMGEzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9vYmplY3QudHh0CkBAIC0wLDAgKzEsMzEzIEBACisJICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgICBJTi1LRVJORUwgQ0FDSEUgT0JKRUNUIFJFUFJFU0VOVEFUSU9OIEFORCBNQU5BR0VNRU5UCisJICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0J5OiBEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgorCitDb250ZW50czoKKworICgqKSBSZXByZXNlbnRhdGlvbgorCisgKCopIE9iamVjdCBtYW5hZ2VtZW50IHN0YXRlIG1hY2hpbmUuCisKKyAgICAgLSBQcm92aXNpb24gb2YgY3B1IHRpbWUuCisgICAgIC0gTG9ja2luZyBzaW1wbGlmaWNhdGlvbi4KKworICgqKSBUaGUgc2V0IG9mIHN0YXRlcy4KKworICgqKSBUaGUgc2V0IG9mIGV2ZW50cy4KKworCis9PT09PT09PT09PT09PQorUkVQUkVTRU5UQVRJT04KKz09PT09PT09PT09PT09CisKK0ZTLUNhY2hlIG1haW50YWlucyBhbiBpbi1rZXJuZWwgcmVwcmVzZW50YXRpb24gb2YgZWFjaCBvYmplY3QgdGhhdCBhIG5ldGZzIGlzCitjdXJyZW50bHkgaW50ZXJlc3RlZCBpbi4gIFN1Y2ggb2JqZWN0cyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGZzY2FjaGVfY29va2llCitzdHJ1Y3QgYW5kIGFyZSByZWZlcnJlZCB0byBhcyBjb29raWVzLgorCitGUy1DYWNoZSBhbHNvIG1haW50YWlucyBhIHNlcGFyYXRlIGluLWtlcm5lbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0cyB0aGF0CithIGNhY2hlIGJhY2tlbmQgaXMgY3VycmVudGx5IGFjdGl2ZWx5IGNhY2hpbmcuICBTdWNoIG9iamVjdHMgYXJlIHJlcHJlc2VudGVkIGJ5Cit0aGUgZnNjYWNoZV9vYmplY3Qgc3RydWN0LiAgVGhlIGNhY2hlIGJhY2tlbmRzIGFsbG9jYXRlIHRoZXNlIHVwb24gcmVxdWVzdCwgYW5kCithcmUgZXhwZWN0ZWQgdG8gZW1iZWQgdGhlbSBpbiB0aGVpciBvd24gcmVwcmVzZW50YXRpb25zLiAgVGhlc2UgYXJlIHJlZmVycmVkIHRvCithcyBvYmplY3RzLgorCitUaGVyZSBpcyBhIDE6TiByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb29raWVzIGFuZCBvYmplY3RzLiAgQSBjb29raWUgbWF5IGJlCityZXByZXNlbnRlZCBieSBtdWx0aXBsZSBvYmplY3RzIC0gYW4gaW5kZXggbWF5IGV4aXN0IGluIG1vcmUgdGhhbiBvbmUgY2FjaGUgLQorb3IgZXZlbiBieSBubyBvYmplY3RzIChpdCBtYXkgbm90IGJlIGNhY2hlZCkuCisKK0Z1cnRoZXJtb3JlLCBib3RoIGNvb2tpZXMgYW5kIG9iamVjdHMgYXJlIGhpZXJhcmNoaWNhbC4gIFRoZSB0d28gaGllcmFyY2hpZXMKK2NvcnJlc3BvbmQsIGJ1dCB0aGUgY29va2llcyB0cmVlIGlzIGEgc3VwZXJzZXQgb2YgdGhlIHVuaW9uIG9mIHRoZSBvYmplY3QgdHJlZXMKK29mIG11bHRpcGxlIGNhY2hlczoKKworCSAgICBORVRGUyBJTkRFWCBUUkVFICAgICAgICAgICAgICAgOiAgICAgIENBQ0hFIDEgICAgIDogICAgICBDQUNIRSAyCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICstLS0tLS0tLS0tLSsgIDoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLT58ICBJT2JqZWN0ICB8ICA6CisJICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICB8ICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKyAgOgorCSAgICAgIHwgIElDb29raWUgIHwtLS0tLS0tKyAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDoKKwkgICAgICArLS0tLS0tLS0tLS0rICAgICAgIHwgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKworCSAgICAgICAgICAgIHwgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58ICBJT2JqZWN0ICB8CisJICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICstLS0tLS0tLS0tLSsKKwkgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICBWICAgICAgICA6ICAgICAgICAgfAorCSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgOiAgICstLS0tLS0tLS0tLSsgIDogICAgICAgICB8CisJICAgICAgICAgICAgViAgICAgICAgICAgICArLS0tLS0tLS0tLS0+fCAgSU9iamVjdCAgfCAgOiAgICAgICAgIHwKKwkgICAgICArLS0tLS0tLS0tLS0rICAgICAgIHwgICAgICAgIDogICArLS0tLS0tLS0tLS0rICA6ICAgICAgICAgfAorCSAgICAgIHwgIElDb29raWUgIHwtLS0tLS0tKyAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICAgICAgICBWCisJICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICB8ICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICstLS0tLS0tLS0tLSsKKwkgICAgICAgICAgICB8ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgSU9iamVjdCAgfAorCSAgICAgICstLS0tLSstLS0tLSsgICAgICAgICAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICArLS0tLS0tLS0tLS0rCisJICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICAgICAgIHwKKwkgICAgICBWICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDogICAgICAgICBWICAgICAgICA6ICAgICAgICAgfAorCSstLS0tLS0tLS0tLSsgICAgIHwgICAgICAgICAgICAgICAgOiAgICstLS0tLS0tLS0tLSsgIDogICAgICAgICB8CisJfCAgSUNvb2tpZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgSU9iamVjdCAgfCAgOiAgICAgICAgIHwKKwkrLS0tLS0tLS0tLS0rICAgICB8ICAgICAgICAgICAgICAgIDogICArLS0tLS0tLS0tLS0rICA6ICAgICAgICAgfAorCSAgICAgIHwgICAgICAgICAgIFYgICAgICAgICAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICAgICAgICBWCisJICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICstLS0tLS0tLS0tLSsKKwkgICAgICB8ICAgICB8ICBJQ29va2llICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgSU9iamVjdCAgfAorCSAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICArLS0tLS0tLS0tLS0rCisJICAgICAgViAgICAgICAgICAgfCAgICAgICAgICAgICAgICA6ICAgICAgICAgViAgICAgICAgOiAgICAgICAgIHwKKwkrLS0tLS0tLS0tLS0rICAgICB8ICAgICAgICAgICAgICAgIDogICArLS0tLS0tLS0tLS0rICA6ICAgICAgICAgfAorCXwgIERDb29raWUgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgIERPYmplY3QgIHwgIDogICAgICAgICB8CisJKy0tLS0tLS0tLS0tKyAgICAgfCAgICAgICAgICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKyAgOiAgICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICA6ICAgICAgICAgfAorCSAgICAgICAgICArLS0tLS0tLSstLS0tLS0tKyAgICAgICAgOiAgICAgICAgICAgICAgICAgIDogICAgICAgICB8CisJICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICA6ICAgICAgICAgICAgICAgICAgOiAgICAgICAgIHwKKwkgICAgICAgICAgViAgICAgICAgICAgICAgIFYgICAgICAgIDogICAgICAgICAgICAgICAgICA6ICAgICAgICAgVgorCSAgICArLS0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0tKyAgOiAgICAgICAgICAgICAgICAgIDogICArLS0tLS0tLS0tLS0rCisJICAgIHwgIERDb29raWUgIHwgICB8ICBEQ29va2llICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgIERPYmplY3QgIHwKKwkgICAgKy0tLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tLSsgIDogICAgICAgICAgICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgIDoKKworSW4gdGhlIGFib3ZlIGlsbHVzdHJhdGlvbiwgSUNvb2tpZSBhbmQgSU9iamVjdCByZXByZXNlbnQgaW5kaWNlcyBhbmQgRENvb2tpZQorYW5kIERPYmplY3QgcmVwcmVzZW50IGRhdGEgc3RvcmFnZSBvYmplY3RzLiAgSW5kaWNlcyBtYXkgaGF2ZSByZXByZXNlbnRhdGlvbiBpbgorbXVsdGlwbGUgY2FjaGVzLCBidXQgY3VycmVudGx5LCBub24taW5kZXggb2JqZWN0cyBtYXkgbm90LiAgT2JqZWN0cyBvZiBhbnkgdHlwZQorbWF5IGFsc28gYmUgZW50aXJlbHkgdW5yZXByZXNlbnRlZC4KKworQXMgZmFyIGFzIHRoZSBuZXRmcyBBUEkgZ29lcywgdGhlIG5ldGZzIGlzIG9ubHkgYWN0dWFsbHkgcGVybWl0dGVkIHRvIHNlZQorcG9pbnRlcnMgdG8gdGhlIGNvb2tpZXMuICBUaGUgY29va2llcyB0aGVtc2VsdmVzIGFuZCBhbnkgb2JqZWN0cyBhdHRhY2hlZCB0bwordGhvc2UgY29va2llcyBhcmUgaGlkZGVuIGZyb20gaXQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorT0JKRUNUIE1BTkFHRU1FTlQgU1RBVEUgTUFDSElORQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaXRoaW4gRlMtQ2FjaGUsIGVhY2ggYWN0aXZlIG9iamVjdCBpcyBtYW5hZ2VkIGJ5IGl0cyBvd24gaW5kaXZpZHVhbCBzdGF0ZQorbWFjaGluZS4gIFRoZSBzdGF0ZSBmb3IgYW4gb2JqZWN0IGlzIGtlcHQgaW4gdGhlIGZzY2FjaGVfb2JqZWN0IHN0cnVjdCwgaW4KK29iamVjdC0+c3RhdGUuICBBIGNvb2tpZSBtYXkgcG9pbnQgdG8gYSBzZXQgb2Ygb2JqZWN0cyB0aGF0IGFyZSBpbiBkaWZmZXJlbnQKK3N0YXRlcy4KKworRWFjaCBzdGF0ZSBoYXMgYW4gYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGF0IGlzIGludm9rZWQgd2hlbiB0aGUgbWFjaGluZQord2FrZXMgdXAgaW4gdGhhdCBzdGF0ZS4gIFRoZXJlIGFyZSBmb3VyIGxvZ2ljYWwgc2V0cyBvZiBzdGF0ZXM6CisKKyAoMSkgUHJlcGFyYXRpb246IHN0YXRlcyB0aGF0IHdhaXQgZm9yIHRoZSBwYXJlbnQgb2JqZWN0cyB0byBiZWNvbWUgcmVhZHkuICBUaGUKKyAgICAgcmVwcmVzZW50YXRpb25zIGFyZSBoaWVyYXJjaGljYWwsIGFuZCBpdCBpcyBleHBlY3RlZCB0aGF0IGFuIG9iamVjdCBtdXN0CisgICAgIGJlIGNyZWF0ZWQgb3IgYWNjZXNzZWQgd2l0aCByZXNwZWN0IHRvIGl0cyBwYXJlbnQgb2JqZWN0LgorCisgKDIpIEluaXRpYWxpc2F0aW9uOiBzdGF0ZXMgdGhhdCBwZXJmb3JtIGxvb2t1cHMgaW4gdGhlIGNhY2hlIGFuZCB2YWxpZGF0ZQorICAgICB3aGF0J3MgZm91bmQgYW5kIHRoYXQgY3JlYXRlIG9uIGRpc2sgYW55IG1pc3NpbmcgbWV0YWRhdGEuCisKKyAoMykgTm9ybWFsIHJ1bm5pbmc6IHN0YXRlcyB0aGF0IGFsbG93IG5ldGZzIG9wZXJhdGlvbnMgb24gb2JqZWN0cyB0byBwcm9jZWVkCisgICAgIGFuZCB0aGF0IHVwZGF0ZSB0aGUgc3RhdGUgb2Ygb2JqZWN0cy4KKworICg0KSBUZXJtaW5hdGlvbjogc3RhdGVzIHRoYXQgZGV0YWNoIG9iamVjdHMgZnJvbSB0aGVpciBuZXRmcyBjb29raWVzLCB0aGF0CisgICAgIGRlbGV0ZSBvYmplY3RzIGZyb20gZGlzaywgdGhhdCBoYW5kbGUgZGlzayBhbmQgc3lzdGVtIGVycm9ycyBhbmQgdGhhdCBmcmVlCisgICAgIHVwIGluLW1lbW9yeSByZXNvdXJjZXMuCisKKworSW4gbW9zdCBjYXNlcywgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcyBpcyBpbiByZXNwb25zZSB0byBzaWduYWxsZWQgZXZlbnRzLgorV2hlbiBhIHN0YXRlIGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nLCBpdCB3aWxsIHVzdWFsbHkgc2V0IHRoZSBtYXNrIG9mIGV2ZW50cyBpbgord2hpY2ggaXQgaXMgaW50ZXJlc3RlZCAob2JqZWN0LT5ldmVudF9tYXNrKSBhbmQgcmVsaW5xdWlzaCB0aGUgd29ya2VyIHRocmVhZC4KK1RoZW4gd2hlbiBhbiBldmVudCBpcyByYWlzZWQgKGJ5IGNhbGxpbmcgZnNjYWNoZV9yYWlzZV9ldmVudCgpKSwgaWYgdGhlIGV2ZW50CitpcyBub3QgbWFza2VkLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVldWVkIGZvciBwcm9jZXNzaW5nIChieSBjYWxsaW5nCitmc2NhY2hlX2VucXVldWVfb2JqZWN0KCkpLgorCisKK1BST1ZJU0lPTiBPRiBDUFUgVElNRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB3b3JrIHRvIGJlIGRvbmUgYnkgdGhlIHZhcmlvdXMgc3RhdGVzIGlzIGdpdmVuIENQVSB0aW1lIGJ5IHRoZSB0aHJlYWRzIG9mCit0aGUgc2xvdyB3b3JrIGZhY2lsaXR5IChzZWUgRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0KS4gIFRoaXMgaXMgdXNlZCBpbgorcHJlZmVyZW5jZSB0byB0aGUgd29ya3F1ZXVlIGZhY2lsaXR5IGJlY2F1c2U6CisKKyAoMSkgVGhyZWFkcyBtYXkgYmUgY29tcGxldGVseSBvY2N1cGllZCBmb3IgdmVyeSBsb25nIHBlcmlvZHMgb2YgdGltZSBieSBhCisgICAgIHBhcnRpY3VsYXIgd29yayBpdGVtLiAgVGhlc2Ugc3RhdGUgYWN0aW9ucyBtYXkgYmUgZG9pbmcgc2VxdWVuY2VzIG9mCisgICAgIHN5bmNocm9ub3VzLCBqb3VybmFsbGVkIGRpc2sgYWNjZXNzZXMgKGxvb2t1cCwgbWtkaXIsIGNyZWF0ZSwgc2V0eGF0dHIsCisgICAgIGdldHhhdHRyLCB0cnVuY2F0ZSwgdW5saW5rLCBybWRpciwgcmVuYW1lKS4KKworICgyKSBUaHJlYWRzIG1heSBkbyBsaXR0bGUgYWN0dWFsIHdvcmssIGJ1dCBtYXkgcmF0aGVyIHNwZW5kIGEgbG90IG9mIHRpbWUKKyAgICAgc2xlZXBpbmcgb24gSS9PLiAgVGhpcyBtZWFucyB0aGF0IHNpbmdsZS10aHJlYWRlZCBhbmQgMS1wZXItQ1BVLXRocmVhZGVkCisgICAgIHdvcmtxdWV1ZXMgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSB0aGUgcmlnaHQgbnVtYmVycyBvZiB0aHJlYWRzLgorCisKK0xPQ0tJTkcgU0lNUExJRklDQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVjYXVzZSBvbmx5IG9uZSB3b3JrZXIgdGhyZWFkIG1heSBiZSBvcGVyYXRpbmcgb24gYW55IHBhcnRpY3VsYXIgb2JqZWN0J3MKK3N0YXRlIG1hY2hpbmUgYXQgb25jZSwgdGhpcyBzaW1wbGlmaWVzIHRoZSBsb2NraW5nLCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0Cit0byBkaXNjb25uZWN0aW5nIHRoZSBuZXRmcydzIHJlcHJlc2VudGF0aW9uIG9mIGEgY2FjaGUgb2JqZWN0IChmc2NhY2hlX2Nvb2tpZSkKK2Zyb20gdGhlIGNhY2hlIGJhY2tlbmQncyByZXByZXNlbnRhdGlvbiAoZnNjYWNoZV9vYmplY3QpIC0gd2hpY2ggbWF5IGJlCityZXF1ZXN0ZWQgZnJvbSBlaXRoZXIgZW5kLgorCisKKz09PT09PT09PT09PT09PT09CitUSEUgU0VUIE9GIFNUQVRFUworPT09PT09PT09PT09PT09PT0KKworVGhlIG9iamVjdCBzdGF0ZSBtYWNoaW5lIGhhcyBhIHNldCBvZiBzdGF0ZXMgdGhhdCBpdCBjYW4gYmUgaW4uICBUaGVyZSBhcmUKK3ByZXBhcmF0aW9uIHN0YXRlcyBpbiB3aGljaCB0aGUgb2JqZWN0IHNldHMgaXRzZWxmIHVwIGFuZCB3YWl0cyBmb3IgaXRzIHBhcmVudAorb2JqZWN0IHRvIHRyYW5zaXQgdG8gYSBzdGF0ZSB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gaXRzIGNoaWxkcmVuOgorCisgKDEpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0lOSVQuCisKKyAgICAgSW5pdGlhbGlzZSB0aGUgb2JqZWN0IGFuZCB3YWl0IGZvciB0aGUgcGFyZW50IG9iamVjdCB0byBiZWNvbWUgYWN0aXZlLiAgSW4KKyAgICAgdGhlIGNhY2hlLCBpdCBpcyBleHBlY3RlZCB0aGF0IGl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGxvb2sgYW4gb2JqZWN0CisgICAgIHVwIGZyb20gdGhlIHBhcmVudCBvYmplY3QsIHVudGlsIHRoYXQgcGFyZW50IG9iamVjdCBpdHNlbGYgaGFzIGJlZW4gbG9va2VkCisgICAgIHVwLgorCitUaGVyZSBhcmUgaW5pdGlhbGlzYXRpb24gc3RhdGVzIGluIHdoaWNoIHRoZSBvYmplY3Qgc2V0cyBpdHNlbGYgdXAgYW5kIGFjY2Vzc2VzCitkaXNrIGZvciB0aGUgb2JqZWN0IG1ldGFkYXRhOgorCisgKDIpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVAuCisKKyAgICAgTG9vayB1cCB0aGUgb2JqZWN0IG9uIGRpc2ssIHVzaW5nIHRoZSBwYXJlbnQgYXMgYSBzdGFydGluZyBwb2ludC4KKyAgICAgRlMtQ2FjaGUgZXhwZWN0cyB0aGUgY2FjaGUgYmFja2VuZCB0byBwcm9iZSB0aGUgY2FjaGUgdG8gc2VlIHdoZXRoZXIgdGhpcworICAgICBvYmplY3QgaXMgcmVwcmVzZW50ZWQgdGhlcmUsIGFuZCBpZiBpdCBpcywgdG8gc2VlIGlmIGl0J3MgdmFsaWQgKGNvaGVyZW5jeQorICAgICBtYW5hZ2VtZW50KS4KKworICAgICBUaGUgY2FjaGUgc2hvdWxkIGNhbGwgZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKCkgdG8gaW5kaWNhdGUgbG9va3VwCisgICAgIGZhaWx1cmUgZm9yIHdoYXRldmVyIHJlYXNvbiwgYW5kIHNob3VsZCBjYWxsIGZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KCkgdG8KKyAgICAgaW5kaWNhdGUgc3VjY2Vzcy4KKworICAgICBBdCB0aGUgY29tcGxldGlvbiBvZiBsb29rdXAsIEZTLUNhY2hlIHdpbGwgbGV0IHRoZSBuZXRmcyBnbyBhaGVhZCB3aXRoCisgICAgIHJlYWQgb3BlcmF0aW9ucywgbm8gbWF0dGVyIHdoZXRoZXIgdGhlIGZpbGUgaXMgeWV0IGNhY2hlZC4gIElmIG5vdCB5ZXQKKyAgICAgY2FjaGVkLCByZWFkIG9wZXJhdGlvbnMgd2lsbCBiZSBpbW1lZGlhdGVseSByZWplY3RlZCB3aXRoIEVOT0RBVEEgdW50aWwKKyAgICAgdGhlIGZpcnN0IGtub3duIHBhZ2UgaXMgdW5jYWNoZWQgLSBhcyB0byB0aGF0IHBvaW50IHRoZXJlIGNhbiBiZSBubyBkYXRhCisgICAgIHRvIGJlIHJlYWQgb3V0IG9mIHRoZSBjYWNoZSBmb3IgdGhhdCBmaWxlIHRoYXQgaXNuJ3QgY3VycmVudGx5IGFsc28gaGVsZAorICAgICBpbiB0aGUgcGFnZWNhY2hlLgorCisgKDMpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HLgorCisgICAgIENyZWF0ZSBhbiBvYmplY3Qgb24gZGlzaywgdXNpbmcgdGhlIHBhcmVudCBhcyBhIHN0YXJ0aW5nIHBvaW50LiAgVGhpcworICAgICBoYXBwZW5zIGlmIHRoZSBsb29rdXAgZmFpbGVkIHRvIGZpbmQgdGhlIG9iamVjdCwgb3IgaWYgdGhlIG9iamVjdCdzCisgICAgIGNvaGVyZW5jeSBkYXRhIGluZGljYXRlZCB3aGF0J3Mgb24gZGlzayBpcyBvdXQgb2YgZGF0ZS4gIEluIHRoaXMgc3RhdGUsCisgICAgIEZTLUNhY2hlIGV4cGVjdHMgdGhlIGNhY2hlIHRvIGNyZWF0ZQorCisgICAgIFRoZSBjYWNoZSBzaG91bGQgY2FsbCBmc2NhY2hlX29idGFpbmVkX29iamVjdCgpIGlmIGNyZWF0aW9uIGNvbXBsZXRlcworICAgICBzdWNjZXNzZnVsbHksIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZSgpIG90aGVyd2lzZS4KKworICAgICBBdCB0aGUgY29tcGxldGlvbiBvZiBjcmVhdGlvbiwgRlMtQ2FjaGUgd2lsbCBzdGFydCBwcm9jZXNzaW5nIHdyaXRlCisgICAgIG9wZXJhdGlvbnMgdGhlIG5ldGZzIGhhcyBxdWV1ZWQgZm9yIGFuIG9iamVjdC4gIElmIGNyZWF0aW9uIGZhaWxlZCwgdGhlCisgICAgIHdyaXRlIG9wcyB3aWxsIGJlIHRyYW5zcGFyZW50bHkgZGlzY2FyZGVkLCBhbmQgbm90aGluZyByZWNvcmRlZCBpbiB0aGUKKyAgICAgY2FjaGUuCisKK1RoZXJlIGFyZSBzb21lIG5vcm1hbCBydW5uaW5nIHN0YXRlcyBpbiB3aGljaCB0aGUgb2JqZWN0IHNwZW5kcyBpdHMgdGltZQorc2VydmljaW5nIG5ldGZzIHJlcXVlc3RzOgorCisgKDQpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRS4KKworICAgICBBIHRyYW5zaWVudCBzdGF0ZSBpbiB3aGljaCBwZW5kaW5nIG9wZXJhdGlvbnMgYXJlIHN0YXJ0ZWQsIGNoaWxkIG9iamVjdHMKKyAgICAgYXJlIHBlcm1pdHRlZCB0byBhZHZhbmNlIGZyb20gRlNDQUNIRV9PQkpFQ1RfSU5JVCBzdGF0ZSwgYW5kIHRlbXBvcmFyeQorICAgICBsb29rdXAgZGF0YSBpcyBmcmVlZC4KKworICg1KSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9BQ1RJVkUuCisKKyAgICAgVGhlIG5vcm1hbCBydW5uaW5nIHN0YXRlLiAgSW4gdGhpcyBzdGF0ZSwgcmVxdWVzdHMgdGhlIG5ldGZzIG1ha2VzIHdpbGwgYmUKKyAgICAgcGFzc2VkIG9uIHRvIHRoZSBjYWNoZS4KKworICg2KSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9VUERBVElORy4KKworICAgICBUaGUgc3RhdGUgbWFjaGluZSBjb21lcyBoZXJlIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IGluIHRoZSBjYWNoZSBmcm9tIHRoZQorICAgICBuZXRmcydzIHJlY29yZHMuICBUaGlzIGludm9sdmVzIHVwZGF0aW5nIHRoZSBhdXhpbGlhcnkgZGF0YSB0aGF0IGlzIHVzZWQKKyAgICAgdG8gbWFpbnRhaW4gY29oZXJlbmN5LgorCitBbmQgdGhlcmUgYXJlIHRlcm1pbmFsIHN0YXRlcyBpbiB3aGljaCBhbiBvYmplY3QgY2xlYW5zIGl0c2VsZiB1cCwgZGVhbGxvY2F0ZXMKK21lbW9yeSBhbmQgcG90ZW50aWFsbHkgZGVsZXRlcyBzdHVmZiBmcm9tIGRpc2s6CisKKyAoNykgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfTENfRFlJTkcuCisKKyAgICAgVGhlIG9iamVjdCBjb21lcyBoZXJlIGlmIGl0IGlzIGR5aW5nIGJlY2F1c2Ugb2YgYSBsb29rdXAgb3IgY3JlYXRpb24KKyAgICAgZXJyb3IuICBUaGlzIHdvdWxkIGJlIGR1ZSB0byBhIGRpc2sgZXJyb3Igb3Igc3lzdGVtIGVycm9yIG9mIHNvbWUgc29ydC4KKyAgICAgVGVtcG9yYXJ5IGRhdGEgaXMgY2xlYW5lZCB1cCwgYW5kIHRoZSBwYXJlbnQgaXMgcmVsZWFzZWQuCisKKyAoOCkgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfRFlJTkcuCisKKyAgICAgVGhlIG9iamVjdCBjb21lcyBoZXJlIGlmIGl0IGlzIGR5aW5nIGR1ZSB0byBhbiBlcnJvciwgYmVjYXVzZSBpdHMgcGFyZW50CisgICAgIGNvb2tpZSBoYXMgYmVlbiByZWxpbnF1aXNoZWQgYnkgdGhlIG5ldGZzIG9yIGJlY2F1c2UgdGhlIGNhY2hlIGlzIGJlaW5nCisgICAgIHdpdGhkcmF3bi4KKworICAgICBBbnkgY2hpbGQgb2JqZWN0cyB3YWl0aW5nIG9uIHRoaXMgb25lIGFyZSBnaXZlbiBDUFUgdGltZSBzbyB0aGF0IHRoZXkgdG9vCisgICAgIGNhbiBkZXN0cm95IHRoZW1zZWx2ZXMuICBUaGlzIG9iamVjdCB3YWl0cyBmb3IgYWxsIGl0cyBjaGlsZHJlbiB0byBnbyBhd2F5CisgICAgIGJlZm9yZSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgc3RhdGUuCisKKyAoOSkgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfQUJPUlRfSU5JVC4KKworICAgICBUaGUgb2JqZWN0IGNvbWVzIHRvIHRoaXMgc3RhdGUgaWYgaXQgd2FzIHdhaXRpbmcgb24gaXRzIHBhcmVudCBpbgorICAgICBGU0NBQ0hFX09CSkVDVF9JTklULCBidXQgaXRzIHBhcmVudCBkaWVkLiAgVGhlIG9iamVjdCB3aWxsIGRlc3Ryb3kgaXRzZWxmCisgICAgIHNvIHRoYXQgdGhlIHBhcmVudCBtYXkgcHJvY2VlZCBmcm9tIHRoZSBGU0NBQ0hFX09CSkVDVF9EWUlORyBzdGF0ZS4KKworKDEwKSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9SRUxFQVNJTkcuCisoMTEpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX1JFQ1lDTElORy4KKworICAgICBUaGUgb2JqZWN0IGNvbWVzIHRvIG9uZSBvZiB0aGVzZSB0d28gc3RhdGVzIHdoZW4gZHlpbmcgb25jZSBpdCBpcyByaWQgb2YKKyAgICAgYWxsIGl0cyBjaGlsZHJlbiwgaWYgaXQgaXMgZHlpbmcgYmVjYXVzZSB0aGUgbmV0ZnMgcmVsaW5xdWlzaGVkIGl0cworICAgICBjb29raWUuICBJbiB0aGUgZmlyc3Qgc3RhdGUsIHRoZSBjYWNoZWQgZGF0YSBpcyBleHBlY3RlZCB0byBwZXJzaXN0LCBhbmQKKyAgICAgaW4gdGhlIHNlY29uZCBpdCB3aWxsIGJlIGRlbGV0ZWQuCisKKygxMikgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkcuCisKKyAgICAgVGhlIG9iamVjdCB0cmFuc2l0cyB0byB0aGlzIHN0YXRlIGlmIHRoZSBjYWNoZSBkZWNpZGVzIGl0IHdhbnRzIHRvCisgICAgIHdpdGhkcmF3IHRoZSBvYmplY3QgZnJvbSBzZXJ2aWNlLCBwZXJoYXBzIHRvIG1ha2Ugc3BhY2UsIGJ1dCBhbHNvIGR1ZSB0bworICAgICBlcnJvciBvciBqdXN0IGJlY2F1c2UgdGhlIHdob2xlIGNhY2hlIGlzIGJlaW5nIHdpdGhkcmF3bi4KKworKDEzKSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9ERUFELgorCisgICAgIFRoZSBvYmplY3QgdHJhbnNpdHMgdG8gdGhpcyBzdGF0ZSB3aGVuIHRoZSBpbi1tZW1vcnkgb2JqZWN0IHJlY29yZCBpcworICAgICByZWFkeSB0byBiZSBkZWxldGVkLiAgVGhlIG9iamVjdCBwcm9jZXNzb3Igc2hvdWxkbid0IGV2ZXIgc2VlIGFuIG9iamVjdCBpbgorICAgICB0aGlzIHN0YXRlLgorCisKK1RIRSBTRVQgT0YgRVZFTlRTCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgY2FuIGJlIHJhaXNlZCB0byBhbiBvYmplY3Qgc3RhdGUgbWFjaGluZToKKworICgqKSBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUKKworICAgICBUaGUgbmV0ZnMgcmVxdWVzdGVkIHRoYXQgYW4gb2JqZWN0IGJlIHVwZGF0ZWQuICBUaGUgc3RhdGUgbWFjaGluZSB3aWxsIGFzaworICAgICB0aGUgY2FjaGUgYmFja2VuZCB0byB1cGRhdGUgdGhlIG9iamVjdCwgYW5kIHRoZSBjYWNoZSBiYWNrZW5kIHdpbGwgYXNrIHRoZQorICAgICBuZXRmcyBmb3IgZGV0YWlscyBvZiB0aGUgY2hhbmdlIHRocm91Z2ggaXRzIGNvb2tpZSBkZWZpbml0aW9uIG9wcy4KKworICgqKSBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVECisKKyAgICAgVGhpcyBpcyBzaWduYWxsZWQgaW4gdHdvIGNpcmN1bXN0YW5jZXM6CisKKyAgICAgKGEpIHdoZW4gYW4gb2JqZWN0J3MgbGFzdCBjaGlsZCBvYmplY3QgaXMgZHJvcHBlZCBhbmQKKworICAgICAoYikgd2hlbiB0aGUgbGFzdCBvcGVyYXRpb24gb3V0c3RhbmRpbmcgb24gYW4gb2JqZWN0IGlzIGNvbXBsZXRlZC4KKworICAgICBUaGlzIGlzIHVzZWQgdG8gcHJvY2VlZCBmcm9tIHRoZSBkeWluZyBzdGF0ZS4KKworICgqKSBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUgorCisgICAgIFRoaXMgaXMgc2lnbmFsbGVkIHdoZW4gYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2Ygc29tZQorICAgICBvYmplY3QuCisKKyAoKikgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRQorICgqKSBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUKKworICAgICBUaGVzZSBhcmUgc2lnbmFsbGVkIHdoZW4gdGhlIG5ldGZzIHJlbGlucXVpc2hlcyBhIGNvb2tpZSBpdCB3YXMgdXNpbmcuCisgICAgIFRoZSBldmVudCBzZWxlY3RlZCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIG5ldGZzIGFza3MgZm9yIHRoZSBiYWNraW5nCisgICAgIG9iamVjdCB0byBiZSByZXRpcmVkIChkZWxldGVkKSBvciByZXRhaW5lZC4KKworICgqKSBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVworCisgICAgIFRoaXMgaXMgc2lnbmFsbGVkIHdoZW4gdGhlIGNhY2hlIGJhY2tlbmQgd2FudHMgdG8gd2l0aGRyYXcgYW4gb2JqZWN0LgorICAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCB3aWxsIGhhdmUgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgbmV0ZnMncworICAgICBjb29raWUuCisKK0JlY2F1c2UgdGhlIHdpdGhkcmF3aW5nIHJlbGVhc2luZy9yZXRpcmluZyBldmVudHMgYXJlIGFsbCBoYW5kbGVkIGJ5IHRoZSBvYmplY3QKK3N0YXRlIG1hY2hpbmUsIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb24gd2l0aCBib3RoIGVuZHMgdHJ5aW5nCit0byBzZXZlciB0aGUgY29ubmVjdGlvbiBhdCB0aGUgc2FtZSB0aW1lLiAgVGhlIHN0YXRlIG1hY2hpbmUgY2FuIGp1c3QgcGljaword2hpY2ggb25lIGl0IHdhbnRzIHRvIGhvbm91ciwgYW5kIHRoYXQgZWZmZWN0cyB0aGUgb3RoZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb3BlcmF0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb3BlcmF0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiMDcwYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9vcGVyYXRpb25zLnR4dApAQCAtMCwwICsxLDIxMyBAQAorCQkgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJICAgICAgIEFTWU5DSFJPTk9VUyBPUEVSQVRJT05TIEhBTkRMSU5HCisJCSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCeTogRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KKworQ29udGVudHM6CisKKyAoKikgT3ZlcnZpZXcuCisKKyAoKikgT3BlcmF0aW9uIHJlY29yZCBpbml0aWFsaXNhdGlvbi4KKworICgqKSBQYXJhbWV0ZXJzLgorCisgKCopIFByb2NlZHVyZS4KKworICgqKSBBc3luY2hyb25vdXMgY2FsbGJhY2suCisKKworPT09PT09PT0KK09WRVJWSUVXCis9PT09PT09PQorCitGUy1DYWNoZSBoYXMgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgaGFuZGxpbmcgZmFjaWxpdHkgdGhhdCBpdCB1c2VzIGZvciBpdHMKK2RhdGEgc3RvcmFnZSBhbmQgcmV0cmlldmFsIHJvdXRpbmVzLiAgSXRzIG9wZXJhdGlvbnMgYXJlIHJlcHJlc2VudGVkIGJ5Citmc2NhY2hlX29wZXJhdGlvbiBzdHJ1Y3RzLCB0aG91Z2ggdGhlc2UgYXJlIHVzdWFsbHkgZW1iZWRkZWQgaW50byBzb21lIG90aGVyCitzdHJ1Y3R1cmUuCisKK1RoaXMgZmFjaWxpdHkgaXMgYXZhaWxhYmxlIHRvIGFuZCBleHBlY3RlZCB0byBiZSBiZSB1c2VkIGJ5IHRoZSBjYWNoZSBiYWNrZW5kcywKK2FuZCBGUy1DYWNoZSB3aWxsIGNyZWF0ZSBvcGVyYXRpb25zIGFuZCBwYXNzIHRoZW0gb2ZmIHRvIHRoZSBhcHByb3ByaWF0ZSBjYWNoZQorYmFja2VuZCBmb3IgY29tcGxldGlvbi4KKworVG8gbWFrZSB1c2Ugb2YgdGhpcyBmYWNpbGl0eSwgPGxpbnV4L2ZzY2FjaGUtY2FjaGUuaD4gc2hvdWxkIGJlICNpbmNsdWRlZC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitPUEVSQVRJT04gUkVDT1JEIElOSVRJQUxJU0FUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FuIG9wZXJhdGlvbiBpcyByZWNvcmRlZCBpbiBhbiBmc2NhY2hlX29wZXJhdGlvbiBzdHJ1Y3Q6CisKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24geworCQl1bmlvbiB7CisJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmFzdF93b3JrOworCQkJc3RydWN0IHNsb3dfd29yayBzbG93X3dvcms7CisJCX07CisJCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCQlmc2NhY2hlX29wZXJhdGlvbl9wcm9jZXNzb3JfdCBwcm9jZXNzb3I7CisJCS4uLgorCX07CisKK1NvbWVvbmUgd2FudGluZyB0byBpc3N1ZSBhbiBvcGVyYXRpb24gc2hvdWxkIGFsbG9jYXRlIHNvbWV0aGluZyB3aXRoIHRoaXMKK3N0cnVjdCBlbWJlZGRlZCBpbiBpdC4gIFRoZXkgc2hvdWxkIGluaXRpYWxpc2UgaXQgYnkgY2FsbGluZzoKKworCXZvaWQgZnNjYWNoZV9vcGVyYXRpb25faW5pdChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wLAorCQkJCSAgICBmc2NhY2hlX29wZXJhdGlvbl9yZWxlYXNlX3QgcmVsZWFzZSk7CisKK3dpdGggdGhlIG9wZXJhdGlvbiB0byBiZSBpbml0aWFsaXNlZCBhbmQgdGhlIHJlbGVhc2UgZnVuY3Rpb24gdG8gdXNlLgorCitUaGUgb3AtPmZsYWdzIHBhcmFtZXRlciBzaG91bGQgYmUgc2V0IHRvIGluZGljYXRlIHRoZSBDUFUgdGltZSBwcm92aXNpb24gYW5kCit0aGUgZXhjbHVzaXZpdHkgKHNlZSB0aGUgUGFyYW1ldGVycyBzZWN0aW9uKS4KKworVGhlIG9wLT5mYXN0X3dvcmssIG9wLT5zbG93X3dvcmsgYW5kIG9wLT5wcm9jZXNzb3IgZmxhZ3Mgc2hvdWxkIGJlIHNldCBhcworYXBwcm9wcmlhdGUgZm9yIHRoZSBDUFUgdGltZSBwcm92aXNpb24gKHNlZSB0aGUgUGFyYW1ldGVycyBzZWN0aW9uKS4KKworRlNDQUNIRV9PUF9XQUlUSU5HIG1heSBiZSBzZXQgaW4gb3AtPmZsYWdzIHByaW9yIHRvIGVhY2ggc3VibWlzc2lvbiBvZiB0aGUKK29wZXJhdGlvbiBhbmQgd2FpdGVkIGZvciBhZnRlcndhcmRzLgorCisKKz09PT09PT09PT0KK1BBUkFNRVRFUlMKKz09PT09PT09PT0KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc2V0IGluIHRoZSBvcGVyYXRpb24gcmVjb3JkJ3MgZmxhZworcGFyYW1ldGVyLiAgVGhlcmUgYXJlIHRocmVlIG9wdGlvbnMgZm9yIHRoZSBwcm92aXNpb24gb2YgQ1BVIHRpbWUgaW4gdGhlc2UKK29wZXJhdGlvbnM6CisKKyAoMSkgVGhlIG9wZXJhdGlvbiBtYXkgYmUgZG9uZSBzeW5jaHJvbm91c2x5IChGU0NBQ0hFX09QX01ZVEhSRUFEKS4gIEEgdGhyZWFkCisgICAgIG1heSBkZWNpZGUgaXQgd2FudHMgdG8gaGFuZGxlIGFuIG9wZXJhdGlvbiBpdHNlbGYgd2l0aG91dCBkZWZlcnJpbmcgaXQgdG8KKyAgICAgYW5vdGhlciB0aHJlYWQuCisKKyAgICAgVGhpcyBpcywgZm9yIGV4YW1wbGUsIHVzZWQgaW4gcmVhZCBvcGVyYXRpb25zIGZvciBjYWxsaW5nIHJlYWRwYWdlcygpIG9uCisgICAgIHRoZSBiYWNraW5nIGZpbGVzeXN0ZW0gaW4gQ2FjaGVGaWxlcy4gIEFsdGhvdWdoIHJlYWRwYWdlcygpIGRvZXMgYW4KKyAgICAgYXN5bmNocm9ub3VzIGRhdGEgZmV0Y2gsIHRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgcGFnZXMgZXhpc3QgaXMgZG9uZQorICAgICBzeW5jaHJvbm91c2x5IC0gYW5kIHRoZSBuZXRmcyBkb2VzIG5vdCBwcm9jZWVkIHVudGlsIHRoaXMgaGFzIGJlZW4KKyAgICAgZGV0ZXJtaW5lZC4KKworICAgICBJZiB0aGlzIG9wdGlvbiBpcyB0byBiZSB1c2VkLCBGU0NBQ0hFX09QX1dBSVRJTkcgbXVzdCBiZSBzZXQgaW4gb3AtPmZsYWdzCisgICAgIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBvcGVyYXRpb24sIGFuZCB0aGUgb3BlcmF0aW5nIHRocmVhZCBtdXN0IHdhaXQgZm9yIGl0CisgICAgIHRvIGJlIGNsZWFyZWQgYmVmb3JlIHByb2NlZWRpbmc6CisKKwkJd2FpdF9vbl9iaXQoJm9wLT5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HLAorCQkJICAgIGZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCisgKDIpIFRoZSBvcGVyYXRpb24gbWF5IGJlIGZhc3QgYXN5bmNocm9ub3VzIChGU0NBQ0hFX09QX0ZBU1QpLCBpbiB3aGljaCBjYXNlIGl0CisgICAgIHdpbGwgYmUgZ2l2ZW4gdG8ga2V2ZW50ZCB0byBwcm9jZXNzLiAgU3VjaCBhbiBvcGVyYXRpb24gaXMgbm90IHBlcm1pdHRlZAorICAgICB0byBzbGVlcCBvbiBJL08uCisKKyAgICAgVGhpcyBpcywgZm9yIGV4YW1wbGUsIHVzZWQgYnkgQ2FjaGVGaWxlcyB0byBjb3B5IGRhdGEgZnJvbSBhIGJhY2tpbmcgZnMKKyAgICAgcGFnZSB0byBhIG5ldGZzIHBhZ2UgYWZ0ZXIgdGhlIGJhY2tpbmcgZnMgaGFzIHJlYWQgdGhlIHBhZ2UgaW4uCisKKyAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCwgb3AtPmZhc3Rfd29yayBhbmQgb3AtPnByb2Nlc3NvciBtdXN0IGJlCisgICAgIGluaXRpYWxpc2VkIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBvcGVyYXRpb246CisKKwkJSU5JVF9XT1JLKCZvcC0+ZmFzdF93b3JrLCBkb19zb21lX3dvcmspOworCisKKyAoMykgVGhlIG9wZXJhdGlvbiBtYXkgYmUgc2xvdyBhc3luY2hyb25vdXMgKEZTQ0FDSEVfT1BfU0xPVyksIGluIHdoaWNoIGNhc2UgaXQKKyAgICAgd2lsbCBiZSBnaXZlbiB0byB0aGUgc2xvdyB3b3JrIGZhY2lsaXR5IHRvIHByb2Nlc3MuICBTdWNoIGFuIG9wZXJhdGlvbiBpcworICAgICBwZXJtaXR0ZWQgdG8gc2xlZXAgb24gSS9PLgorCisgICAgIFRoaXMgaXMsIGZvciBleGFtcGxlLCB1c2VkIGJ5IEZTLUNhY2hlIHRvIGhhbmRsZSBiYWNrZ3JvdW5kIHdyaXRlcyBvZgorICAgICBwYWdlcyB0aGF0IGhhdmUganVzdCBiZWVuIGZldGNoZWQgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIuCisKKyAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCwgb3AtPnNsb3dfd29yayBhbmQgb3AtPnByb2Nlc3NvciBtdXN0IGJlCisgICAgIGluaXRpYWxpc2VkIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBvcGVyYXRpb246CisKKwkJZnNjYWNoZV9vcGVyYXRpb25faW5pdF9zbG93KG9wLCBwcm9jZXNzb3IpCisKKworRnVydGhlcm1vcmUsIG9wZXJhdGlvbnMgbWF5IGJlIG9uZSBvZiB0d28gdHlwZXM6CisKKyAoMSkgRXhjbHVzaXZlIChGU0NBQ0hFX09QX0VYQ0xVU0lWRSkuICBPcGVyYXRpb25zIG9mIHRoaXMgdHlwZSBtYXkgbm90IHJ1biBpbgorICAgICBjb25qdW5jdGlvbiB3aXRoIGFueSBvdGhlciBvcGVyYXRpb24gb24gdGhlIG9iamVjdCBiZWluZyBvcGVyYXRlZCB1cG9uLgorCisgICAgIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgYXR0cmlidXRlIGNoYW5nZSBvcGVyYXRpb24sIGluIHdoaWNoIHRoZSBmaWxlCisgICAgIGJlaW5nIHdyaXR0ZW4gdG8gbWF5IG5lZWQgdHJ1bmNhdGlvbi4KKworICgyKSBTaGFyZWFibGUuICBPcGVyYXRpb25zIG9mIHRoaXMgdHlwZSBtYXkgYmUgcnVubmluZyBzaW11bHRhbmVvdXNseS4gIEl0J3MKKyAgICAgdXAgdG8gdGhlIG9wZXJhdGlvbiBpbXBsZW1lbnRhdGlvbiB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBiZXR3ZWVuIG90aGVyCisgICAgIG9wZXJhdGlvbnMgcnVubmluZyBhdCB0aGUgc2FtZSB0aW1lLgorCisKKz09PT09PT09PQorUFJPQ0VEVVJFCis9PT09PT09PT0KKworT3BlcmF0aW9ucyBhcmUgdXNlZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlOgorCisgKDEpIFRoZSBzdWJtaXR0aW5nIHRocmVhZCBtdXN0IGFsbG9jYXRlIHRoZSBvcGVyYXRpb24gYW5kIGluaXRpYWxpc2UgaXQKKyAgICAgaXRzZWxmLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBwYXJ0IG9mIGEgbW9yZSBzcGVjaWZpYyBzdHJ1Y3R1cmUgd2l0aCB0aGUKKyAgICAgZ2VuZXJpYyBvcCBlbWJlZGRlZCB3aXRoaW4uCisKKyAoMikgVGhlIHN1Ym1pdHRpbmcgdGhyZWFkIG11c3QgdGhlbiBzdWJtaXQgdGhlIG9wZXJhdGlvbiBmb3IgcHJvY2Vzc2luZyB1c2luZworICAgICBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zOgorCisJaW50IGZzY2FjaGVfc3VibWl0X29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJICAgICAgc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCk7CisKKwlpbnQgZnNjYWNoZV9zdWJtaXRfZXhjbHVzaXZlX29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCQlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKTsKKworICAgICBUaGUgZmlyc3QgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gc3VibWl0IG5vbi1leGNsdXNpdmUgb3BzIGFuZCB0aGUKKyAgICAgc2Vjb25kIHRvIHN1Ym1pdCBleGNsdXNpdmUgb25lcy4gIFRoZSBjYWxsZXIgbXVzdCBzdGlsbCBzZXQgdGhlCisgICAgIEZTQ0FDSEVfT1BfRVhDTFVTSVZFIGZsYWcuCisKKyAgICAgSWYgc3VjY2Vzc2Z1bCwgYm90aCBmdW5jdGlvbnMgd2lsbCBhc3NpZ24gdGhlIG9wZXJhdGlvbiB0byB0aGUgc3BlY2lmaWVkCisgICAgIG9iamVjdCBhbmQgcmV0dXJuIDAuICAtRU5PQlVGUyB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBvYmplY3Qgc3BlY2lmaWVkIGlzCisgICAgIHBlcm1hbmVudGx5IHVuYXZhaWxhYmxlLgorCisgICAgIFRoZSBvcGVyYXRpb24gbWFuYWdlciB3aWxsIGRlZmVyIG9wZXJhdGlvbnMgb24gYW4gb2JqZWN0IHRoYXQgaXMgc3RpbGwKKyAgICAgdW5kZXJnb2luZyBsb29rdXAgb3IgY3JlYXRpb24uICBUaGUgb3BlcmF0aW9uIHdpbGwgYWxzbyBiZSBkZWZlcnJlZCBpZiBhbgorICAgICBvcGVyYXRpb24gb2YgY29uZmxpY3RpbmcgZXhjbHVzaXZpdHkgaXMgaW4gcHJvZ3Jlc3Mgb24gdGhlIG9iamVjdC4KKworICAgICBJZiB0aGUgb3BlcmF0aW9uIGlzIGFzeW5jaHJvbm91cywgdGhlIG1hbmFnZXIgd2lsbCByZXRhaW4gYSByZWZlcmVuY2UgdG8KKyAgICAgaXQsIHNvIHRoZSBjYWxsZXIgc2hvdWxkIHB1dCB0aGVpciByZWZlcmVuY2UgdG8gaXQgYnkgcGFzc2luZyBpdCB0bzoKKworCXZvaWQgZnNjYWNoZV9wdXRfb3BlcmF0aW9uKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApOworCisgKDMpIElmIHRoZSBzdWJtaXR0aW5nIHRocmVhZCB3YW50cyB0byBkbyB0aGUgd29yayBpdHNlbGYsIGFuZCBoYXMgbWFya2VkIHRoZQorICAgICBvcGVyYXRpb24gd2l0aCBGU0NBQ0hFX09QX01ZVEhSRUFELCB0aGVuIGl0IHNob3VsZCBtb25pdG9yCisgICAgIEZTQ0FDSEVfT1BfV0FJVElORyBhcyBkZXNjcmliZWQgYWJvdmUgYW5kIGNoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgb2JqZWN0IGlmCisgICAgIG5lY2Vzc2FyeSAodGhlIG9iamVjdCBtaWdodCBoYXZlIGRpZWQgd2hpbHN0IHRoZSB0aHJlYWQgd2FzIHdhaXRpbmcpLgorCisgICAgIFdoZW4gaXQgaGFzIGZpbmlzaGVkIGRvaW5nIGl0cyBwcm9jZXNzaW5nLCBpdCBzaG91bGQgY2FsbAorICAgICBmc2NhY2hlX3B1dF9vcGVyYXRpb24oKSBvbiBpdC4KKworICg0KSBUaGUgb3BlcmF0aW9uIGhvbGRzIGFuIGVmZmVjdGl2ZSBsb2NrIHVwb24gdGhlIG9iamVjdCwgcHJldmVudGluZyBvdGhlcgorICAgICBleGNsdXNpdmUgb3BzIGNvbmZsaWN0aW5nIHVudGlsIGl0IGlzIHJlbGVhc2VkLiAgVGhlIG9wZXJhdGlvbiBjYW4gYmUKKyAgICAgZW5xdWV1ZWQgZm9yIGZ1cnRoZXIgaW1tZWRpYXRlIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nIGJ5IGFkanVzdGluZyB0aGUKKyAgICAgQ1BVIHRpbWUgcHJvdmlzaW9uaW5nIG9wdGlvbiBpZiBuZWNlc3NhcnksIGVnOgorCisJb3AtPmZsYWdzICY9IH5GU0NBQ0hFX09QX1RZUEU7CisJb3AtPmZsYWdzIHw9IH5GU0NBQ0hFX09QX0ZBU1Q7CisKKyAgICAgYW5kIGNhbGxpbmc6CisKKwl2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKKworICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGFsbG93IG90aGVyIHRoaW5ncyB0byBoYXZlIHVzZSBvZiB0aGUgd29ya2VyIHRocmVhZAorICAgICBwb29scy4KKworCis9PT09PT09PT09PT09PT09PT09PT0KK0FTWU5DSFJPTk9VUyBDQUxMQkFDSworPT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gdXNlZCBpbiBhc3luY2hyb25vdXMgbW9kZSwgdGhlIHdvcmtlciB0aHJlYWQgcG9vbCB3aWxsIGludm9rZSB0aGUKK3Byb2Nlc3NvciBtZXRob2Qgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG9wZXJhdGlvbi4gIFRoaXMgc2hvdWxkIHRoZW4gZ2V0IGF0IHRoZQorY29udGFpbmVyIHN0cnVjdCBieSB1c2luZyBjb250YWluZXJfb2YoKToKKworCXN0YXRpYyB2b2lkIGZzY2FjaGVfd3JpdGVfb3Aoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpfb3ApCisJeworCQlzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCA9CisJCQljb250YWluZXJfb2YoX29wLCBzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlLCBvcCk7CisJLi4uCisJfQorCitUaGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIG9uIHRoZSBvcGVyYXRpb24sIGFuZCB3aWxsIGludm9rZQorZnNjYWNoZV9wdXRfb3BlcmF0aW9uKCkgd2hlbiB0aGUgcHJvY2Vzc29yIGZ1bmN0aW9uIHJldHVybnMuICBUaGUgcHJvY2Vzc29yCitmdW5jdGlvbiBpcyBhdCBsaWJlcnR5IHRvIGNhbGwgZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbigpIG9yIHRvIHRha2UgZXh0cmEKK3JlZmVyZW5jZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4b2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXhvZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZWQ3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4b2ZzLnR4dApAQCAtMCwwICsxLDE3NiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorV0hBVCBJUyBFWE9GUz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZXhvZnMgaXMgYSBmaWxlIHN5c3RlbSB0aGF0IHVzZXMgYW4gT1NEIGFuZCBleHBvcnRzIHRoZSBBUEkgb2YgYSBub3JtYWwgTGludXgKK2ZpbGUgc3lzdGVtLiBVc2VycyBhY2Nlc3MgZXhvZnMgbGlrZSBhbnkgb3RoZXIgbG9jYWwgZmlsZSBzeXN0ZW0sIGFuZCBleG9mcword2lsbCBpbiB0dXJuIGlzc3VlIGNvbW1hbmRzIHRvIHRoZSBsb2NhbCBPU0QgaW5pdGlhdG9yLgorCitPU0QgaXMgYSBuZXcgVDEwIGNvbW1hbmQgc2V0IHRoYXQgdmlld3Mgc3RvcmFnZSBkZXZpY2VzIG5vdCBhcyBhIGxhcmdlL2ZsYXQKK2FycmF5IG9mIHNlY3RvcnMgYnV0IGFzIGEgY29udGFpbmVyIG9mIG9iamVjdHMsIGVhY2ggaGF2aW5nIGEgbGVuZ3RoLCBxdW90YSwKK3RpbWUgYXR0cmlidXRlcyBhbmQgbW9yZS4gRWFjaCBvYmplY3QgaXMgYWRkcmVzc2VkIGJ5IGEgNjRiaXQgSUQsIGFuZCBpcworY29udGFpbmVkIGluIGEgNjRiaXQgSUQgcGFydGl0aW9uLiBFYWNoIG9iamVjdCBoYXMgYXNzb2NpYXRlZCBhdHRyaWJ1dGVzCithdHRhY2hlZCB0byBpdCwgd2hpY2ggYXJlIGludGVncmFsIHBhcnQgb2YgdGhlIG9iamVjdCBhbmQgcHJvdmlkZSBtZXRhZGF0YSBhYm91dAordGhlIG9iamVjdC4gVGhlIHN0YW5kYXJkIGRlZmluZXMgc29tZSBjb21tb24gb2JsaWdhdG9yeSBhdHRyaWJ1dGVzLCBidXQgdXNlcgorYXR0cmlidXRlcyBjYW4gYmUgYWRkZWQgYXMgbmVlZGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFTlZJUk9OTUVOVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyB1c2UgdGhpcyBmaWxlIHN5c3RlbSwgeW91IG5lZWQgdG8gaGF2ZSBhbiBvYmplY3Qgc3RvcmUgdG8gcnVuIGl0IG9uLiAgWW91CittYXkgZG93bmxvYWQgYSB0YXJnZXQgZnJvbToKK2h0dHA6Ly9vcGVuLW9zZC5vcmcKKworU2VlIERvY3VtZW50YXRpb24vc2NzaS9vc2QudHh0IGZvciBob3cgdG8gc2V0dXAgYSB3b3JraW5nIG9zZCBlbnZpcm9ubWVudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVVNBR0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gRG93bmxvYWQgYW5kIGNvbXBpbGUgZXhvZnMgYW5kIG9wZW4tb3NkIGluaXRpYXRvcjoKKyAgWW91IG5lZWQgYW4gZXh0ZXJuYWwgS2VybmVsIHNvdXJjZSB0cmVlIG9yIGtlcm5lbCBoZWFkZXJzIGZyb20geW91cgorICBkaXN0cmlidXRpb24uIChhbnl0aGluZyBiYXNlZCBvbiAyLjYuMjYgb3IgbGF0ZXIpLgorCisgIGEuIGRvd25sb2FkIG9wZW4tb3NkIGluY2x1ZGluZyBleG9mcyBzb3VyY2UgdXNpbmc6CisgICAgIFtwYXJlbnQtZGlyZWN0b3J5XSQgZ2l0IGNsb25lIGdpdDovL2dpdC5vcGVuLW9zZC5vcmcvb3Blbi1vc2QuZ2l0CisKKyAgYi4gQnVpbGQgdGhlIGxpYnJhcnkgbW9kdWxlIGxpa2UgdGhpczoKKyAgICAgW3BhcmVudC1kaXJlY3RvcnldJCBtYWtlIC1DIEtTUkM9JChLRVJfRElSKSBvcGVuLW9zZAorCisgICAgIFRoaXMgd2lsbCBidWlsZCBib3RoIHRoZSBvcGVuLW9zZCBpbml0aWF0b3IgYXMgd2VsbCBhcyB0aGUgZXhvZnMga2VybmVsCisgICAgIG1vZHVsZS4gVXNlIHdoYXRldmVyIHBhcmFtZXRlcnMgeW91IGNvbXBpbGVkIHlvdXIgS2VybmVsIHdpdGggYW5kCisgICAgICQoS0VSX0RJUikgYWJvdmUgcG9pbnRpbmcgdG8gdGhlIEtlcm5lbCB5b3UgY29tcGlsZSBhZ2FpbnN0LiBTZWUgdGhlIGZpbGUKKyAgICAgb3Blbi1vc2QvdG9wLWxldmVsLU1ha2VmaWxlIGZvciBhbiBleGFtcGxlLgorCisyLiBHZXQgdGhlIE9TRCBpbml0aWF0b3IgYW5kIHRhcmdldCBzZXQgdXAgcHJvcGVybHksIGFuZCBsb2dpbiB0byB0aGUgdGFyZ2V0LgorICBTZWUgRG9jdW1lbnRhdGlvbi9zY3NpL29zZC50eHQgZm9yIGZhcnRoZXIgaW5zdHJ1Y3Rpb25zLiBBbHNvIHNlZSAuL2RvLW9zZAorICBmb3IgZXhhbXBsZSBzY3JpcHQgdGhhdCBkb2VzIGFsbCB0aGVzZSBzdGVwcy4KKworMy4gSW5zbW9kIHRoZSBleG9mcy5rbyBtb2R1bGU6CisgICBbZXhvZnNdJCBpbnNtb2QgZXhvZnMua28KKworNC4gTWFrZSBzdXJlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdG8gbW91bnQgZXhpc3RzLiBJZiBub3QsIGNyZWF0ZSBpdC4KKyAgIChGb3IgZXhhbXBsZSwgbWtkaXIgL21udC9leG9mcykKKworNS4gQXQgZmlyc3QgcnVuIHlvdSB3aWxsIG5lZWQgdG8gaW52b2tlIHRoZSBta2ZzLmV4b2ZzIGFwcGxpY2F0aW9uCisKKyAgIEFzIGFuIGV4YW1wbGUsIHRoaXMgd2lsbCBjcmVhdGUgdGhlIGZpbGUgc3lzdGVtIG9uOgorICAgL2Rldi9vc2QwIHBhcnRpdGlvbiBJRCA2NTUzNgorCisgICBta2ZzLmV4b2ZzIC0tcGlkPTY1NTM2IC0tZm9ybWF0IC9kZXYvb3NkMAorCisgICBUaGUgLS1mb3JtYXQgaXMgb3B0aW9uYWwgaWYgbm90IHNwZWNpZmllZCBubyBPU0RfRk9STUFUIHdpbGwgYmUKKyAgIHByZWZvcm1lZCBhbmQgYSBjbGVhbiBmaWxlIHN5c3RlbSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIHNwZWNpZmllZCBwaWQsCisgICBpbiB0aGUgYXZhaWxhYmxlIHNwYWNlIG9mIHRoZSB0YXJnZXQuIChVc2UgLS1mb3JtYXQ9c2l6ZV9pbl9tZWcgdG8gbGltaXQKKyAgIHRoZSB0b3RhbCBMVU4gc3BhY2UgYXZhaWxhYmxlKQorCisgICBJZiBwaWQgYWxyZWFkeSBleGlzdCBpdCB3aWxsIGJlIGRlbGV0ZWQgYW5kIGEgbmV3IG9uZSB3aWxsIGJlIGNyZWF0ZWQgaW4gaXQncworICAgcGxhY2UuIEJlIGNhcmVmdWwuCisKKyAgIEFuIGV4b2ZzIGxpdmVzIGluc2lkZSBhIHNpbmdsZSBPU0QgcGFydGl0aW9uLiBZb3UgY2FuIGNyZWF0ZSBtdWx0aXBsZSBleG9mcworICAgZmlsZXN5c3RlbXMgb24gdGhlIHNhbWUgZGV2aWNlIHVzaW5nIG11bHRpcGxlIHBpZHMuCisKKyAgIChydW4gbWtmcy5leG9mcyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzIGZvciB1c2FnZSBoZWxwIG1lc3NhZ2UpCisKKzYuIE1vdW50IHRoZSBmaWxlIHN5c3RlbS4KKworICAgRm9yIGV4YW1wbGUsIHRvIG1vdW50IC9kZXYvb3NkMCwgcGFydGl0aW9uIElEIDB4MTAwMDAgb24gL21udC9leG9mczoKKworCW1vdW50IC10IGV4b2ZzIC1vIHBpZD02NTUzNiAvZGV2L29zZDAgL21udC9leG9mcy8KKworNy4gRm9yIHJlZmVyZW5jZSAoU2VlIGRvLWV4b2ZzIGV4YW1wbGUgc2NyaXB0KToKKwlkby1leG9mcyBzdGFydCAtIGFuIGV4YW1wbGUgb2YgaG93IHRvIHBlcmZvcm0gdGhlIGFib3ZlIHN0ZXBzLgorCWRvLWV4b2ZzIHN0b3AgLSAgYW4gZXhhbXBsZSBvZiBob3cgdG8gdW5tb3VudCB0aGUgZmlsZSBzeXN0ZW0uCisJZG8tZXhvZnMgZm9ybWF0IC0gYW4gZXhhbXBsZSBvZiBob3cgdG8gZm9ybWF0IGFuZCBta2ZzIGEgbmV3IGV4b2ZzLgorCis4LiBFeHRyYSBjb21waWxhdGlvbiBmbGFncyAodW5jb21tZW50IGluIGZzL2V4b2ZzL0tidWlsZCk6CisJQ09ORklHX0VYT0ZTX0RFQlVHIC0gZm9yIGRlYnVnIG1lc3NhZ2VzIGFuZCBleHRyYSBjaGVja3MuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2V4b2ZzIG1vdW50IG9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NpbWlsYXIgdG8gYW55IG1vdW50IGNvbW1hbmQ6CisJbW91bnQgLXQgZXhvZnMgLW8gZXhvZnNfb3B0aW9ucyAvZGV2L29zZFggbW91bnRfZXhvZnNfZGlyZWN0b3J5CisKK1doZXJlOgorICAgIC10IGV4b2ZzOiBzcGVjaWZpZXMgdGhlIGV4b2ZzIGZpbGUgc3lzdGVtCisKKyAgICAvZGV2L29zZFg6IFggaXMgYSBkZWNpbWFsIG51bWJlci4gL2Rldi9vc2RYIHdhcyBjcmVhdGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bAorICAgICAgICAgICAgICAgbG9naW4gaW50byBhbiBPU0QgdGFyZ2V0LgorCisgICAgbW91bnRfZXhvZnNfZGlyZWN0b3J5OiBUaGUgZGlyZWN0b3J5IHRvIG1vdW50IHRoZSBmaWxlIHN5c3RlbSBvbgorCisgICAgZXhvZnMgc3BlY2lmaWMgb3B0aW9uczogT3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcyAoLCkKKwkJcGlkPTxpbnRlZ2VyPiAtIFRoZSBwYXJ0aXRpb24gbnVtYmVyIHRvIG1vdW50L2NyZWF0ZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgb2YgdGhlIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIG1hbmRhdG9yeQorICAgICAgICAgICAgICAgIHRvPTxpbnRlZ2VyPiAgLSBUaW1lb3V0IGluIHRpY2tzIGZvciBhIHNpbmdsZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgKDYwICogSFopIFtmb3IgZGVidWdnaW5nIG9ubHldCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0RFU0lHTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIFRoZSBmaWxlIHN5c3RlbSBjb250cm9sIGJsb2NrIChBS0Egb24tZGlzayBzdXBlcmJsb2NrKSByZXNpZGVzIGluIGFuIG9iamVjdAorICB3aXRoIGEgc3BlY2lhbCBJRCAoZGVmaW5lZCBpbiBjb21tb24uaCkuCisgIEluZm9ybWF0aW9uIGluY2x1ZGVkIGluIHRoZSBmaWxlIHN5c3RlbSBjb250cm9sIGJsb2NrIGlzIHVzZWQgdG8gZmlsbCB0aGUKKyAgaW4tbWVtb3J5IHN1cGVyYmxvY2sgc3RydWN0dXJlIGF0IG1vdW50IHRpbWUuIFRoaXMgb2JqZWN0IGlzIGNyZWF0ZWQgYmVmb3JlCisgIHRoZSBmaWxlIHN5c3RlbSBpcyB1c2VkIGJ5IG1rZXhvZnMuYyBJdCBjb250YWlucyBpbmZvcm1hdGlvbiBzdWNoIGFzOgorCS0gVGhlIGZpbGUgc3lzdGVtJ3MgbWFnaWMgbnVtYmVyCisJLSBUaGUgbmV4dCBpbm9kZSBudW1iZXIgdG8gYmUgYWxsb2NhdGVkCisKKyogRWFjaCBmaWxlIHJlc2lkZXMgaW4gaXRzIG93biBvYmplY3QgYW5kIGNvbnRhaW5zIHRoZSBkYXRhIChhbmQgaXQgd2lsbCBiZQorICBwb3NzaWJsZSB0byBleHRlbmQgdGhlIGZpbGUgb3ZlciBtdWx0aXBsZSBvYmplY3RzLCB0aG91Z2ggdGhpcyBoYXMgbm90IGJlZW4KKyAgaW1wbGVtZW50ZWQgeWV0KS4KKworKiBBIGRpcmVjdG9yeSBpcyB0cmVhdGVkIGFzIGEgZmlsZSwgYW5kIGVzc2VudGlhbGx5IGNvbnRhaW5zIGEgbGlzdCBvZiA8ZmlsZQorICBuYW1lLCBpbm9kZSAjPiBwYWlycyBmb3IgZmlsZXMgdGhhdCBhcmUgZm91bmQgaW4gdGhhdCBkaXJlY3RvcnkuIFRoZSBvYmplY3QKKyAgSURzIGNvcnJlc3BvbmQgdG8gdGhlIGZpbGVzJyBpbm9kZSBudW1iZXJzIGFuZCB3aWxsIGJlIGFsbG9jYXRlZCBhY2NvcmRpbmcgdG8KKyAgYSBiaXRtYXAgKHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVjdCkuIE5vdyB0aGV5IGFyZSBhbGxvY2F0ZWQgdXNpbmcgYQorICBjb3VudGVyLgorCisqIEVhY2ggZmlsZSdzIGNvbnRyb2wgYmxvY2sgKEFLQSBvbi1kaXNrIGlub2RlKSBpcyBzdG9yZWQgaW4gaXRzIG9iamVjdCdzCisgIGF0dHJpYnV0ZXMuIFRoaXMgYXBwbGllcyB0byBib3RoIHJlZ3VsYXIgZmlsZXMgYW5kIG90aGVyIHR5cGVzIChkaXJlY3RvcmllcywKKyAgZGV2aWNlIGZpbGVzLCBzeW1saW5rcywgZXRjLikuCisKKyogQ3JlZGVudGlhbHMgYXJlIGdlbmVyYXRlZCBwZXIgb2JqZWN0IChpbm9kZSBhbmQgc3VwZXJibG9jaykgd2hlbiB0aGV5IGlzCisgIGNyZWF0ZWQgaW4gbWVtb3J5IChyZWFkIG9mZiBkaXNrIG9yIGNyZWF0ZWQpLiBUaGUgY3JlZGVudGlhbCB3b3JrcyBmb3IgYWxsCisgIG9wZXJhdGlvbnMgYW5kIGlzIHVzZWQgYXMgbG9uZyBhcyB0aGUgb2JqZWN0IHJlbWFpbnMgaW4gbWVtb3J5LgorCisqIEFzeW5jIE9TRCBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLCBidXQgdGhlIHRhcmdldCBtYXkgZXhlY3V0ZQorICB0aGVtIG91dCBvZiBvcmRlci4gVGhlIG9wZXJhdGlvbnMgdGhhdCBjb25jZXJuIHVzIGFyZSBjcmVhdGUsIGRlbGV0ZSwKKyAgcmVhZHBhZ2UsIHdyaXRlcGFnZSwgdXBkYXRlX2lub2RlLCBhbmQgdHJ1bmNhdGUuIFRoZSBmb2xsb3dpbmcgcGFpcnMgb2YKKyAgb3BlcmF0aW9ucyBzaG91bGQgZXhlY3V0ZSBpbiB0aGUgb3JkZXIgd3JpdHRlbiwgYW5kIHdlIG5lZWQgdG8gcHJldmVudCB0aGVtCisgIGZyb20gZXhlY3V0aW5nIGluIHJldmVyc2Ugb3JkZXI6CisJLSBUaGUgZm9sbG93aW5nIGFyZSBoYW5kbGVkIHdpdGggdGhlIE9CSl9DUkVBVEVEIGFuZCBPQkpfMkJDUkVBVEVECisJICBmbGFncy4gT0JKX0NSRUFURUQgaXMgc2V0IHdoZW4gd2Uga25vdyB0aGUgb2JqZWN0IGV4aXN0cyBvbiB0aGUgT1NEIC0KKwkgIGluIGNyZWF0ZSdzIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgd2hlbiB3ZSBzdWNjZXNzZnVsbHkgZG8gYSByZWFkX2lub2RlLgorCSAgT0JKXzJCQ1JFQVRFRCBpcyBzZXQgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3JlYXRlIGZ1bmN0aW9uLCBzbyB3ZQorCSAga25vdyB0aGF0IHdlIHNob3VsZCB3YWl0LgorCQktIGNyZWF0ZS9kZWxldGU6IGRlbGV0ZSBzaG91bGQgd2FpdCB1bnRpbCB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQKKwkJICBvbiB0aGUgT1NELgorCQktIGNyZWF0ZS9yZWFkcGFnZTogcmVhZHBhZ2Ugc2hvdWxkIGJlIGFibGUgdG8gcmV0dXJuIGEgcGFnZQorCQkgIGZ1bGwgb2YgemVyb2VzIGluIHRoaXMgY2FzZS4gSWYgdGhlcmUgd2FzIGEgd3JpdGUgYWxyZWFkeQorCQkgIGVuLXJvdXRlIChpLmUuIGNyZWF0ZSwgd3JpdGVwYWdlLCByZWFkcGFnZSkgdGhlbiB0aGUgcGFnZQorCQkgIHdvdWxkIGJlIGxvY2tlZCwgYW5kIHNvIGl0IHdvdWxkIHJlYWxseSBiZSB0aGUgc2FtZSBhcworCQkgIGNyZWF0ZS93cml0ZXBhZ2UuCisJCS0gY3JlYXRlL3dyaXRlcGFnZTogaWYgd3JpdGVwYWdlIGlzIGNhbGxlZCBmb3IgYSBzeW5jIHdyaXRlLCBpdAorCQkgIHNob3VsZCB3YWl0IHVudGlsIHRoZSBvYmplY3QgaXMgY3JlYXRlZCBvbiB0aGUgT1NELgorCQkgIE90aGVyd2lzZSwgaXQgc2hvdWxkIGp1c3QgcmV0dXJuLgorCQktIGNyZWF0ZS90cnVuY2F0ZTogdHJ1bmNhdGUgc2hvdWxkIHdhaXQgdW50aWwgdGhlIG9iamVjdCBpcworCQkgIGNyZWF0ZWQgb24gdGhlIE9TRC4KKwkJLSBjcmVhdGUvdXBkYXRlX2lub2RlOiB1cGRhdGVfaW5vZGUgc2hvdWxkIHdhaXQgdW50aWwgdGhlCisJCSAgb2JqZWN0IGlzIGNyZWF0ZWQgb24gdGhlIE9TRC4KKwktIEhhbmRsZWQgYnkgVkZTIGxvY2tzOgorCQktIHJlYWRwYWdlL2RlbGV0ZTogc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIG9mIHBhZ2UgbG9jay4KKwkJLSB3cml0ZXBhZ2UvZGVsZXRlOiBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2Ugb2YgcGFnZSBsb2NrLgorCQktIHJlYWRwYWdlL3dyaXRlcGFnZTogc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIG9mIHBhZ2UgbG9jay4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTElDRU5TRS9DT1BZUklHSFQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBleG9mcyBmaWxlIHN5c3RlbSBpcyBiYXNlZCBvbiBleHQyIHYwLjViIChkaXN0cmlidXRlZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwKK3ZlcnNpb24gMi42LjEwKS4gIEFsbCBmaWxlcyBpbmNsdWRlIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHRzLCBhbmQgdGhlIGxpY2Vuc2UKK2lzIEdQTCB2ZXJzaW9uIDIgKG9ubHkgdmVyc2lvbiAyLCBhcyBpcyB0cnVlIGZvciB0aGUgTGludXgga2VybmVsKS4gIFRoZQorTGludXgga2VybmVsIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gd3d3Lmtlcm5lbC5vcmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAppbmRleCBlNWYzODMzLi41NzBmOWJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTE0LDYgKzE0LDExIEBACiBXaGVuIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbSwgdGhlIGZvbGxvd2luZyBvcHRpb24gYXJlIGFjY2VwdGVkOgogKCopID09IGRlZmF1bHQKIAorcm8JCQlNb3VudCBmaWxlc3lzdGVtIHJlYWQgb25seS4gTm90ZSB0aGF0IGV4dDMgd2lsbCByZXBsYXkKKwkJCXRoZSBqb3VybmFsIChhbmQgdGh1cyB3cml0ZSB0byB0aGUgcGFydGl0aW9uKSBldmVuIHdoZW4KKwkJCW1vdW50ZWQgInJlYWQgb25seSIuIE1vdW50IG9wdGlvbnMgInJvLG5vbG9hZCIgY2FuIGJlCisJCQl1c2VkIHRvIHByZXZlbnQgd3JpdGVzIHRvIHRoZSBmaWxlc3lzdGVtLgorCiBqb3VybmFsPXVwZGF0ZQkJVXBkYXRlIHRoZSBleHQzIGZpbGUgc3lzdGVtJ3Mgam91cm5hbCB0byB0aGUgY3VycmVudAogCQkJZm9ybWF0LgogCkBAIC0yNyw3ICszMiw5IEBACiAJCQlpZGVudGlmaWVkIHRocm91Z2ggaXRzIG5ldyBtYWpvci9taW5vciBudW1iZXJzIGVuY29kZWQKIAkJCWluIGRldm51bS4KIAotbm9sb2FkCQkJRG9uJ3QgbG9hZCB0aGUgam91cm5hbCBvbiBtb3VudGluZy4KK25vbG9hZAkJCURvbid0IGxvYWQgdGhlIGpvdXJuYWwgb24gbW91bnRpbmcuIE5vdGUgdGhhdCB0aGlzIGZvcmNlcworCQkJbW91bnQgb2YgaW5jb25zaXN0ZW50IGZpbGVzeXN0ZW0sIHdoaWNoIGNhbiBsZWFkIHRvCisJCQl2YXJpb3VzIHByb2JsZW1zLgogCiBkYXRhPWpvdXJuYWwJCUFsbCBkYXRhIGFyZSBjb21taXR0ZWQgaW50byB0aGUgam91cm5hbCBwcmlvciB0byBiZWluZwogCQkJd3JpdHRlbiBpbnRvIHRoZSBtYWluIGZpbGUgc3lzdGVtLgpAQCAtOTIsOSArOTksMTIgQEAKIAogZGVidWcJCQlFeHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgc2VudCB0byBzeXNsb2cuCiAKLWVycm9ycz1yZW1vdW50LXJvKCopCVJlbW91bnQgdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9uIGFuIGVycm9yLgorZXJyb3JzPXJlbW91bnQtcm8JUmVtb3VudCB0aGUgZmlsZXN5c3RlbSByZWFkLW9ubHkgb24gYW4gZXJyb3IuCiBlcnJvcnM9Y29udGludWUJCUtlZXAgZ29pbmcgb24gYSBmaWxlc3lzdGVtIGVycm9yLgogZXJyb3JzPXBhbmljCQlQYW5pYyBhbmQgaGFsdCB0aGUgbWFjaGluZSBpZiBhbiBlcnJvciBvY2N1cnMuCisJCQkoVGhlc2UgbW91bnQgb3B0aW9ucyBvdmVycmlkZSB0aGUgZXJyb3JzIGJlaGF2aW9yCisJCQlzcGVjaWZpZWQgaW4gdGhlIHN1cGVyYmxvY2ssIHdoaWNoIGNhbiBiZQorCQkJY29uZmlndXJlZCB1c2luZyB0dW5lMmZzLikKIAogZGF0YV9lcnI9aWdub3JlKCopCUp1c3QgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMKIAkJCWluIGEgZmlsZSBkYXRhIGJ1ZmZlciBpbiBvcmRlcmVkIG1vZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL2Rlc2lnbl9ub3Rlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL2Rlc2lnbl9ub3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2ZGI2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvZGVzaWduX25vdGVzLnR4dApAQCAtMCwwICsxLDcwIEBACitQT0hNRUxGUzogUGFyYWxsZWwgT3B0aW1pemVkIEhvc3QgTWVzc2FnZSBFeGNoYW5nZSBMYXllcmVkIEZpbGUgU3lzdGVtLgorCisJCUV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKworSG9tZXBhZ2U6IGh0dHA6Ly93d3cuaW9yZW1hcC5uZXQvcHJvamVjdHMvcG9obWVsZnMKKworUE9ITUVMRlMgZmlyc3QgYmVnYW4gYXMgYSBuZXR3b3JrIGZpbGVzeXN0ZW0gd2l0aCBjb2hlcmVudCBsb2NhbCBkYXRhIGFuZAorbWV0YWRhdGEgY2FjaGVzIGJ1dCBpcyBub3cgZXZvbHZpbmcgaW50byBhIHBhcmFsbGVsIGRpc3RyaWJ1dGVkIGZpbGVzeXN0ZW0uCisKK01haW4gZmVhdHVyZXMgb2YgdGhpcyBGUyBpbmNsdWRlOgorICogTG9jYWxseSBjb2hlcmVudCBjYWNoZSBmb3IgZGF0YSBhbmQgbWV0YWRhdGEgd2l0aCAocG90ZW50aWFsbHkpIGJ5dGUtcmFuZ2UgbG9ja3MuCisJU2luY2UgYWxsIExpbnV4IGZpbGVzeXN0ZW1zIGxvY2sgdGhlIHdob2xlIGlub2RlIGR1cmluZyB3cml0aW5nLCBhbGdvcml0aG0KKwlpcyB2ZXJ5IHNpbXBsZSBhbmQgZG9lcyBub3QgdXNlIGJ5dGUtcmFuZ2VzLCBhbHRob3VnaCB0aGV5IGFyZSBzZW50IGluCisJbG9ja2luZyBtZXNzYWdlcy4KKyAqIENvbXBsZXRlbHkgYXN5bmMgcHJvY2Vzc2luZyBvZiBhbGwgZXZlbnRzIGV4Y2VwdCBjcmVhdGlvbiBvZiBoYXJkIGFuZCBzeW1ib2xpYworCWxpbmtzLCBhbmQgcmVuYW1lIGV2ZW50cy4KKwlPYmplY3QgY3JlYXRpb24gYW5kIGRhdGEgcmVhZGluZyBhbmQgd3JpdGluZyBhcmUgcHJvY2Vzc2VkIGFzeW5jaHJvbm91c2x5LgorICogRmxleGlibGUgb2JqZWN0IGFyY2hpdGVjdHVyZSBvcHRpbWl6ZWQgZm9yIG5ldHdvcmsgcHJvY2Vzc2luZy4KKwlBYmlsaXR5IHRvIGNyZWF0ZSBsb25nIHBhdGhzIHRvIG9iamVjdHMgYW5kIHJlbW92ZSBhcmJpdHJhcmlseSBodWdlCisJZGlyZWN0b3JpZXMgd2l0aCBhIHNpbmdsZSBuZXR3b3JrIGNvbW1hbmQuCisJKGxpa2UgcmVtb3ZpbmcgdGhlIHdob2xlIGtlcm5lbCB0cmVlIHZpYSBhIHNpbmdsZSBuZXR3b3JrIGNvbW1hbmQpLgorICogVmVyeSBoaWdoIHBlcmZvcm1hbmNlLgorICogRmFzdCBhbmQgc2NhbGFibGUgbXVsdGl0aHJlYWRlZCB1c2Vyc3BhY2Ugc2VydmVyLiBCZWluZyBpbiB1c2Vyc3BhY2UgaXQgd29ya3MKKwl3aXRoIGFueSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gYW5kIHN0aWxsIGlzIG11Y2ggZmFzdGVyIHRoYW4gYXN5bmMgaW4ta2VybmVsIE5GUyBvbmUuCisgKiBDbGllbnQgaXMgYWJsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgc2VydmVycyAoaWYgb25lIGdvZXMgZG93biwgY2xpZW50CisJYXV0b21hdGljYWxseSByZWNvbm5lY3RzIHRvIHNlY29uZCBhbmQgc28gb24pLgorICogVHJhbnNhY3Rpb25zIHN1cHBvcnQuIEZ1bGwgZmFpbG92ZXIgZm9yIGFsbCBvcGVyYXRpb25zLgorCVJlc2VuZGluZyB0cmFuc2FjdGlvbnMgdG8gZGlmZmVyZW50IHNlcnZlcnMgb24gdGltZW91dCBvciBlcnJvci4KKyAqIFJlYWQgcmVxdWVzdCAoZGF0YSByZWFkLCBkaXJlY3RvcnkgbGlzdGluZywgbG9va3VwIHJlcXVlc3RzKSBiYWxhbmNpbmcgYmV0d2VlbiBtdWx0aXBsZSBzZXJ2ZXJzLgorICogV3JpdGUgcmVxdWVzdHMgYXJlIHJlcGxpY2F0ZWQgdG8gbXVsdGlwbGUgc2VydmVycyBhbmQgY29tcGxldGVkIG9ubHkgd2hlbiBhbGwgb2YgdGhlbSBhcmUgYWNrZWQuCisgKiBBYmlsaXR5IHRvIGFkZCBhbmQvb3IgcmVtb3ZlIHNlcnZlcnMgZnJvbSB0aGUgd29ya2luZyBzZXQgYXQgcnVuLXRpbWUuCisgKiBTdHJvbmcgYXV0aGVudGlmaWNhdGlvbiBhbmQgcG9zc2libGUgZGF0YSBlbmNyeXB0aW9uIGluIG5ldHdvcmsgY2hhbm5lbC4KKyAqIEV4dGVuZGVkIGF0dHJpYnV0ZXMgc3VwcG9ydC4KKworUE9ITUVMRlMgaXMgYmFzZWQgb24gdHJhbnNhY3Rpb25zLCB3aGljaCBhcmUgcG90ZW50aWFsbHkgbG9uZy1zdGFuZGluZyBvYmplY3RzIHRoYXQgbGl2ZQoraW4gdGhlIGNsaWVudCdzIG1lbW9yeS4gRWFjaCB0cmFuc2FjdGlvbiBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBwcm9jZXNzIGEgZ2l2ZW4KK2NvbW1hbmQgKG9yIHNldCBvZiBjb21tYW5kcywgd2hpY2ggaXMgZnJlcXVlbnRseSB1c2VkIGR1cmluZyBkYXRhIHdyaXRpbmc6IHNpbmdsZSB0cmFuc2FjdGlvbnMKK2NhbiBjb250YWluIGNyZWF0aW9uIGFuZCBkYXRhIHdyaXRpbmcgY29tbWFuZHMpLiBUcmFuc2FjdGlvbnMgYXJlIGNvbW1pdHRlZCBieSBhbGwgdGhlIHNlcnZlcnMKK3RvIHdoaWNoIHRoZXkgYXJlIHNlbnQgYW5kLCBpbiBjYXNlIG9mIGZhaWx1cmVzLCBhcmUgZXZlbnR1YWxseSByZXNlbnQgb3IgZHJvcHBlZCB3aXRoIGFuIGVycm9yLgorRm9yIGV4YW1wbGUsIHJlYWRpbmcgd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgbm8gc2VydmVycyBhcmUgYXZhaWxhYmxlLgorCitQT0hNRUxGUyB1c2VzIGEgYXN5bmNocm9ub3VzIGFwcHJvYWNoIHRvIGRhdGEgcHJvY2Vzc2luZy4gQ291cnRlc3kgb2YgdHJhbnNhY3Rpb25zLCBpdCBpcworcG9zc2libGUgdG8gZGV0YWNoIHJlcGxpZXMgZnJvbSByZXF1ZXN0cyBhbmQsIGlmIHRoZSBjb21tYW5kIHJlcXVpcmVzIGRhdGEgdG8gYmUgcmVjZWl2ZWQsIHRoZQorY2FsbGVyIHNsZWVwcyB3YWl0aW5nIGZvciBpdC4gVGh1cywgaXQgaXMgcG9zc2libGUgdG8gaXNzdWUgbXVsdGlwbGUgcmVhZCBjb21tYW5kcyB0byBkaWZmZXJlbnQKK3NlcnZlcnMgYW5kIGFzeW5jIHRocmVhZHMgd2lsbCBwaWNrIHVwIHJlcGxpZXMgaW4gcGFyYWxsZWwsIGZpbmQgYXBwcm9wcmlhdGUgdHJhbnNhY3Rpb25zIGluIHRoZQorc3lzdGVtIGFuZCBwdXQgdGhlIGRhdGEgd2hlcmUgaXQgYmVsb25ncyAobGlrZSB0aGUgcGFnZSBvciBpbm9kZSBjYWNoZSkuCisKK1RoZSBtYWluIGZlYXR1cmUgb2YgUE9ITUVMRlMgaXMgd3JpdGViYWNrIGRhdGEgYW5kIHRoZSBtZXRhZGF0YSBjYWNoZS4KK09ubHkgYSBmZXcgbm9uLXBlcmZvcm1hbmNlIGNyaXRpY2FsIG9wZXJhdGlvbnMgdXNlIHRoZSB3cml0ZS10aHJvdWdoIGNhY2hlIGFuZAorYXJlIHN5bmNocm9ub3VzOiBoYXJkIGFuZCBzeW1ib2xpYyBsaW5rIGNyZWF0aW9uLCBhbmQgb2JqZWN0IHJlbmFtZS4gQ3JlYXRpb24sCityZW1vdmFsIG9mIG9iamVjdHMgYW5kIGRhdGEgd3JpdGluZyBhcmUgYXN5bmNocm9ub3VzIGFuZCBhcmUgc2VudCB0bwordGhlIHNlcnZlciBkdXJpbmcgc3lzdGVtIHdyaXRlYmFjay4gT25seSBvbmUgd3JpdGVyIGF0IGEgdGltZSBpcyBhbGxvd2VkIGZvciBhbnkKK2dpdmVuIGlub2RlLCB3aGljaCBpcyBndWFyZGVkIGJ5IGFuIGFwcHJvcHJpYXRlIGxvY2tpbmcgcHJvdG9jb2wuCitCZWNhdXNlIG9mIHRoaXMgZmVhdHVyZSwgUE9ITUVMRlMgaXMgZXh0cmVtZWx5IGZhc3QgYXQgbWV0YWRhdGEgaW50ZW5zaXZlCit3b3JrbG9hZHMgYW5kIGNhbiBmdWxseSB1dGlsaXplIHRoZSBiYW5kd2lkdGggdG8gdGhlIHNlcnZlcnMgd2hlbiBkb2luZyBidWxrCitkYXRhIHRyYW5zZmVycy4KKworUE9ITUVMRlMgY2xpZW50cyBvcGVyYXRlIHdpdGggYSB3b3JraW5nIHNldCBvZiBzZXJ2ZXJzIGFuZCBhcmUgY2FwYWJsZSBvZiBiYWxhbmNpbmcgcmVhZC1vbmx5CitvcGVyYXRpb25zIChsaWtlIGxvb2t1cHMgb3IgZGlyZWN0b3J5IGxpc3RpbmdzKSBiZXR3ZWVuIHRoZW0uCitBZG1pbmlzdHJhdG9ycyBjYW4gYWRkIG9yIHJlbW92ZSBzZXJ2ZXJzIGZyb20gdGhlIHNldCBhdCBydW4tdGltZSB2aWEgc3BlY2lhbCBjb21tYW5kcyAoZGVzY3JpYmVkCitpbiBEb2N1bWVudGF0aW9uL3BvaG1lbGZzL2luZm8udHh0IGZpbGUpLiBXcml0ZXMgYXJlIHJlcGxpY2F0ZWQgdG8gYWxsIHNlcnZlcnMuCisKK1BPSE1FTEZTIGlzIGNhcGFibGUgb2YgZnVsbCBkYXRhIGNoYW5uZWwgZW5jcnlwdGlvbiBhbmQvb3Igc3Ryb25nIGNyeXB0byBoYXNoaW5nLgorT25lIGNhbiBzZWxlY3QgYW55IGtlcm5lbCBzdXBwb3J0ZWQgY2lwaGVyLCBlbmNyeXB0aW9uIG1vZGUsIGhhc2ggdHlwZSBhbmQgb3BlcmF0aW9uIG1vZGUKKyhobWFjIG9yIGRpZ2VzdCkuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGJvdGggb3IgbmVpdGhlciAoZGVmYXVsdCkuIENyeXB0byBjb25maWd1cmF0aW9uCitpcyBjaGVja2VkIGR1cmluZyBtb3VudCB0aW1lIGFuZCwgaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGl0LCBhcHByb3ByaWF0ZSBjYXBhYmlsaXRpZXMKK3dpbGwgYmUgZGlzYWJsZWQgb3IgbW91bnQgd2lsbCBmYWlsIChpZiAnY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQnIG1vdW50IG9wdGlvbiBpcyBzcGVjaWZpZWQpLgorQ3J5cHRvIHBlcmZvcm1hbmNlIGhlYXZpbHkgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIGNyeXB0byB0aHJlYWRzLCB3aGljaCBhc3luY2hyb25vdXNseSBwZXJmb3JtCitjcnlwdG8gb3BlcmF0aW9ucyBhbmQgc2VuZCB0aGUgcmVzdWx0aW5nIGRhdGEgdG8gc2VydmVyIG9yIHN1Ym1pdCBpdCB1cCB0aGUgc3RhY2suIFRoaXMgbnVtYmVyCitjYW4gYmUgY29udHJvbGxlZCB2aWEgYSBtb3VudCBvcHRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL2luZm8udHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9pbmZvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTNkNTAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9pbmZvLnR4dApAQCAtMCwwICsxLDg2IEBACitQT0hNRUxGUyB1c2FnZSBpbmZvcm1hdGlvbi4KKworTW91bnQgb3B0aW9uczoKK2lkeD0ldQorIEVhY2ggbW91bnRwb2ludCBpcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWFsIGluZGV4IHZpYSB0aGlzIG9wdGlvbi4KKyBBZG1pbmlzdHJhdG9yIGNhbiBhZGQgb3IgcmVtb3ZlIHNlcnZlcnMgZnJvbSB0aGUgZ2l2ZW4gaW5kZXgsIHNvIGFsbCBtb3VudHMsCisgd2hpY2ggd2VyZSBhdHRhY2hlZCB0byBpdCwgYXJlIHVwZGF0ZWQuCisgRGVmYXVsdCBpdCBpcyAwLgorCit0cmFuc19zY2FuX3RpbWVvdXQ9JXUKKyBUaGlzIHRpbWVvdXQsIGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMsIHNwZWNpZmllcyB0aW1lIHRvIHNjYW4gdHJhbnNhY3Rpb24KKyB0cmVlcyBsb29raW5nIGZvciBzdGFsZSByZXF1ZXN0cywgd2hpY2ggaGF2ZSB0byBiZSByZXNlbnQsIG9yIGlmIG51bWJlciBvZgorIHJldHJpZXMgZXhjZWVkIHNwZWNpZmllZCBsaW1pdCwgZHJvcHBlZCB3aXRoIGVycm9yLgorIERlZmF1bHQgaXMgNSBzZWNvbmRzLgorCitkcm9wX3NjYW5fdGltZW91dD0ldQorIEludGVybmFsIHRpbWVvdXQsIGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMsIHdoaWNoIHNwZWNpZmllcyBob3cgZnJlcXVlbnRseQorIGlub2RlcyBtYXJrZWQgdG8gYmUgZHJvcHBlZCBhcmUgZnJlZWQuIEl0IGFsc28gc3BlY2lmaWVzIGhvdyBmcmVxdWVudGx5CisgdGhlIHN5c3RlbSBjaGVja3MgdGhhdCBzZXJ2ZXJzIGhhdmUgdG8gYmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGN1cnJlbnQgd29ya2luZyBzZXQuCisgRGVmYXVsdCBpcyAxIHNlY29uZC4KKword2FpdF9vbl9wYWdlX3RpbWVvdXQ9JXUKKyBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHJlcGx5IGZyb20gcmVtb3RlIHNlcnZlciBmb3IgZGF0YSByZWFkaW5nIGNvbW1hbmQuCisgSWYgdGhpcyB0aW1lb3V0IGlzIGV4Y2VlZGVkLCByZWFkaW5nIHJldHVybnMgYW4gZXJyb3IuCisgRGVmYXVsdCBpcyA1IHNlY29uZHMuCisKK3RyYW5zX3JldHJpZXM9JXUKKyBUaGlzIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBhIHRyYW5zYWN0aW9uIHdpbGwgYmUgcmVzZW50IHRvIGEgc2VydmVyIHRoYXQgZGlkCisgbm90IGFuc3dlciBmb3IgdGhlIGxhc3QgQHRyYW5zX3NjYW5fdGltZW91dCBtaWxsaXNlY29uZHMuCisgV2hlbiB0aGUgbnVtYmVyIG9mIHJlc2VuZHMgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIHdpdGggZXJyb3IuCisgRGVmYXVsdCBpcyA1IHJlc2VuZHMuCisKK2NyeXB0b190aHJlYWRfbnVtPSV1CisgTnVtYmVyIG9mIGNyeXB0byBwcm9jZXNzaW5nIHRocmVhZHMuIFRocmVhZHMgYXJlIHVzZWQgYm90aCBmb3IgUlggYW5kIFRYIHRyYWZmaWMuCisgRGVmYXVsdCBpcyAyLCBvciBubyB0aHJlYWRzIGlmIGNyeXB0byBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLgorCit0cmFuc19tYXhfcGFnZXM9JXUKKyBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVGhpcyBwYXJhbWV0ZXIgYWxzbyBjb250cm9scworIHRoZSBudW1iZXIgb2YgcGFnZXMsICBhbGxvY2F0ZWQgZm9yIGNyeXB0byBwcm9jZXNzaW5nIChlYWNoIGNyeXB0byB0aHJlYWQgaGFzCisgcG9vbCBvZiBwYWdlcywgdGhlIG51bWJlciBvZiB3aGljaCBpcyBlcXVhbCB0byAndHJhbnNfbWF4X3BhZ2VzJy4KKyBEZWZhdWx0IGlzIDEwMCBwYWdlcy4KKworY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQKKyBJZiBzcGVjaWZpZWQsIG1vdW50IHdpbGwgZmFpbCBpZiB0aGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgcmVxdWVzdGVkIGNyeXB0byBvcGVyYXRpb25zLgorIEJ5IGRlZmF1bHQgbW91bnQgd2lsbCBkaXNhYmxlIG5vbi1tYXRjaGluZyBjcnlwdG8gb3BlcmF0aW9ucy4KKworbWNhY2hlX3RpbWVvdXQ9JXUKKyBNYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIG1jYWNoZSBvYmplY3RzIHRvIGJlIHByb2Nlc3NlZC4KKyBNY2FjaGUgaW5jbHVkZXMgbG9ja3MgKGdpdmVuIGxvY2sgc2hvdWxkIGJlIGdyYW50ZWQgYnkgc2VydmVyKSwgYXR0cmlidXRlcyAodGhleSBzaG91bGQgYmUKKyBmdWxseSByZWNlaXZlZCBpbiB0aGUgZ2l2ZW4gdGltZWZyYW1lKS4KKyBEZWZhdWx0IGlzIDUgc2Vjb25kcy4KKworVXNhZ2UgZXhhbXBsZXMuCisKK0FkZCAob3IgcmVtb3ZlIGlmIGl0IGFscmVhZHkgZXhpc3RzKSBzZXJ2ZXIgc2VydmVyMS5uZXQ6MTAyNSBpbnRvIHRoZSB3b3JraW5nIHNldCB3aXRoIGluZGV4ICRpZHgKK3dpdGggYXBwcm9wcmlhdGUgaGFzaCBhbGdvcml0aG0gYW5kIGtleSBmaWxlIGFuZCBjaXBoZXIgYWxnb3JpdGhtLCBtb2RlIGFuZCBrZXkgZmlsZToKKyRjZmcgLWEgc2VydmVyMS5uZXQgLXAgMTAyNSAtaSAkaWR4IC1LICRoYXNoX2tleSAtayAkY2lwaGVyX2tleQorCitNb3VudCBmaWxlc3lzdGVtIHdpdGggZ2l2ZW4gaW5kZXggJGlkeCB0byAvbW50IG1vdW50cG9pbnQuCitDbGllbnQgd2lsbCBjb25uZWN0IHRvIGFsbCBzZXJ2ZXJzIHNwZWNpZmllZCBpbiB0aGUgd29ya2luZyBzZXQgdmlhIHByZXZpb3VzIGNvbW1hbmQ6Cittb3VudCAtdCBwb2htZWwgLW8gaWR4PSRpZHggcSAvbW50CisKK09uZSBjYW4gYWRkIG9yIHJlbW92ZSBzZXJ2ZXJzIGZyb20gd29ya2luZyBzZXQgYWZ0ZXIgbW91bnRpbmcgdG9vLgorCisKK1NlcnZlciBpbnN0YWxsYXRpb24uCisKK0NyZWF0aW5nIGEgc2VydmVyLCB3aGljaCBsaXN0ZW5zIGF0IHBvcnQgMTAyNSBhbmQgMC4wLjAuMCBhZGRyZXNzLgorV29ya2luZyByb290IGRpcmVjdG9yeSAobm90ZSwgdGhhdCBzZXJ2ZXIgY2hyb290cyB0aGVyZSwgc28geW91IGhhdmUgdG8gaGF2ZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucykKK2lzIHNldCB0byAvbW50LCBzZXJ2ZXIgd2lsbCBuZWdvdGlhdGUgaGFzaC9jaXBoZXIgd2l0aCBjbGllbnQsIGluIGNhc2UgY2xpZW50IHJlcXVlc3RlZCBpdCwgdGhlcmUKK2FyZSBhcHByb3ByaWF0ZSBrZXkgZmlsZXMuCitOdW1iZXIgb2Ygd29ya2luZyB0aHJlYWRzIGlzIHNldCB0byAxMC4KKworIyAuL2ZzZXJ2ZXIgLWEgMC4wLjAuMCAtcCAxMDI1IC1yIC9tbnQgLXcgMTAgLUsgaGFzaF9rZXkgLWsgY2lwaGVyX2tleQorCisgLUEgNgkJCSAtIGxpc3RlbiBvbiBpcHY2IGFkZHJlc3MuIERlZmF1bHQ6IERpc2FibGVkLgorIC1yIHJvb3QgICAgICAgICAgICAgICAgIC0gcGF0aCB0byByb290IGRpcmVjdG9yeS4gRGVmYXVsdDogL3RtcC4KKyAtYSBhZGRyICAgICAgICAgICAgICAgICAtIGxpc3RlbiBhZGRyZXNzLiBEZWZhdWx0OiAwLjAuMC4wLgorIC1wIHBvcnQgICAgICAgICAgICAgICAgIC0gbGlzdGVuIHBvcnQuIERlZmF1bHQ6IDEwMjUuCisgLXcgd29ya2VycyAgICAgICAgICAgICAgLSBudW1iZXIgb2Ygd29ya2VycyBwZXIgY29ubmVjdGVkIGNsaWVudC4gRGVmYXVsdDogMS4KKyAtSyBmaWxlCQkgLSBoYXNoIGtleSBzaXplLiBEZWZhdWx0OiBub25lLgorIC1rIGZpbGUJCSAtIGNpcGhlciBrZXkgc2l6ZS4gRGVmYXVsdDogbm9uZS4KKyAtaCAgICAgICAgICAgICAgICAgICAgICAtIHRoaXMgaGVscC4KKworTnVtYmVyIG9mIHdvcmtlciB0aHJlYWRzIHNwZWNpZmllcyBob3cgbWFueSB3b3JrZXJzIHdpbGwgYmUgY3JlYXRlZCBmb3IgZWFjaCBjbGllbnQuCitCdWxrIHNpbmdsZS1jbGllbnQgdHJhbnNhZmVycyB1c3VhbGx5IGFyZSBiZXR0ZXIgaGFuZGxlZCB3aXRoIHNtYWxsZXIgbnVtYmVyIChsaWtlIDEtMykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL25ldHdvcmtfcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9uZXR3b3JrX3Byb3RvY29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVhNmMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9uZXR3b3JrX3Byb3RvY29sLnR4dApAQCAtMCwwICsxLDIyNyBAQAorUE9ITUVMRlMgbmV0d29yayBwcm90b2NvbC4KKworQmFzaWMgc3RydWN0dXJlIHVzZWQgaW4gbmV0d29yayBjb21tdW5pY2F0aW9uIGlzIGZvbGxvd2luZyBjb21tYW5kOgorCitzdHJ1Y3QgbmV0ZnNfY21kCit7CisJX191MTYJCQljbWQ7CS8qIENvbW1hbmQgbnVtYmVyICovCisJX191MTYJCQljc2l6ZTsJLyogQXR0YWNoZWQgY3J5cHRvIGluZm9ybWF0aW9uIHNpemUgKi8KKwlfX3UxNgkJCWNwYWQ7CS8qIEF0dGFjaGVkIHBhZGRpbmcgc2l6ZSAqLworCV9fdTE2CQkJZXh0OwkvKiBFeHRlcm5hbCBmbGFncyAqLworCV9fdTMyCQkJc2l6ZTsJLyogU2l6ZSBvZiB0aGUgYXR0YWNoZWQgZGF0YSAqLworCV9fdTMyCQkJdHJhbnM7CS8qIFRyYW5zYWN0aW9uIGlkICovCisJX191NjQJCQlpZDsJLyogT2JqZWN0IElEIHRvIG9wZXJhdGUgb24uIFVzZWQgZm9yIGZlZWRiYWNrLiovCisJX191NjQJCQlzdGFydDsJLyogU3RhcnQgb2YgdGhlIG9iamVjdC4gKi8KKwlfX3U2NAkJCWl2OwkvKiBJViBzZXF1ZW5jZSAqLworCV9fdTgJCQlkYXRhWzBdOworfTsKKworQ29tbWFuZHMgY2FuIGJlIGVtYmVkZGVkIGludG8gdHJhbnNhY3Rpb24gY29tbWFuZCAod2hpY2ggaW4gdHVybiBoYXMgb3duIGNvbW1hbmQpLAorc28gb25lIGNhbiBleHRlbmQgcHJvdG9jb2wgYXMgbmVlZGVkIHdpdGhvdXQgYnJlYWtpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBsb25nCithcyBvbGQgY29tbWFuZHMgYXJlIHN1cHBvcnRlZC4gQWxsIHN0cmluZyBsZW5ndGhzIGluY2x1ZGUgdGFpbCAwIGJ5dGUuCisKK0FsbCBjb21tYW5zIGFyZSB0cmFuc2ZlcmVkIG92ZXIgdGhlIG5ldHdvcmsgaW4gYmlnLWVuZGlhbi4gQ1BVIGVuZGlhbmVzcyBpcyB1c2VkIGF0IHRoZSBlbmQgcGVlcnMuCisKK0BjbWQgLSBjb21tYW5kIG51bWJlciwgd2hpY2ggc3BlY2lmaWVzIGNvbW1hbmQgdG8gYmUgcHJvY2Vzc2VkLiBGb2xsb3dpbmcKKwljb21tYW5kcyBhcmUgdXNlZCBjdXJyZW50bHk6CisKKwlORVRGU19SRUFERElSCT0gMSwJLyogUmVhZCBkaXJlY3RvcnkgZm9yIGdpdmVuIGlub2RlIG51bWJlciAqLworCU5FVEZTX1JFQURfUEFHRSwJLyogUmVhZCBkYXRhIHBhZ2UgZnJvbSB0aGUgc2VydmVyICovCisJTkVURlNfV1JJVEVfUEFHRSwJLyogV3JpdGUgZGF0YSBwYWdlIHRvIHRoZSBzZXJ2ZXIgKi8KKwlORVRGU19DUkVBVEUsCQkvKiBDcmVhdGUgZGlyZWN0b3J5IGVudHJ5ICovCisJTkVURlNfUkVNT1ZFLAkJLyogUmVtb3ZlIGRpcmVjdG9yeSBlbnRyeSAqLworCU5FVEZTX0xPT0tVUCwJCS8qIExvb2t1cCBzaW5nbGUgb2JqZWN0ICovCisJTkVURlNfTElOSywJCS8qIENyZWF0ZSBhIGxpbmsgKi8KKwlORVRGU19UUkFOUywJCS8qIFRyYW5zYWN0aW9uICovCisJTkVURlNfT1BFTiwJCS8qIE9wZW4gaW50ZW50ICovCisJTkVURlNfSU5PREVfSU5GTywJLyogTWV0YWRhdGEgY2FjaGUgY29oZXJlbmN5IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlICovCisJTkVURlNfUEFHRV9DQUNIRSwJLyogUGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gbWVzc2FnZSAqLworCU5FVEZTX1JFQURfUEFHRVMsCS8qIFJlYWQgbXVsdGlwbGUgY29udGlndW91cyBwYWdlcyBpbiBvbmUgZ28gKi8KKwlORVRGU19SRU5BTUUsCQkvKiBSZW5hbWUgb2JqZWN0ICovCisJTkVURlNfQ0FQQUJJTElUSUVTLAkvKiBDYXBhYmlsaXRpZXMgb2YgdGhlIGNsaWVudCwgZm9yIGV4YW1wbGUgc3VwcG9ydGVkIGNyeXB0byAqLworCU5FVEZTX0xPQ0ssCQkvKiBEaXN0cmlidXRlZCBsb2NrIG1lc3NhZ2UgKi8KKwlORVRGU19YQVRUUl9TRVQsCS8qIFNldCBleHRlbmRlZCBhdHRyaWJ1dGUgKi8KKwlORVRGU19YQVRUUl9HRVQsCS8qIEdldCBleHRlbmRlZCBhdHRyaWJ1dGUgKi8KKworQGV4dCAtIGV4dGVybmFsIGZsYWdzLiBVc2VkIGJ5IGRpZmZlcmVudCBjb21tYW5kcyB0byBzcGVjaWZ5IHNvbWUgZXh0cmEgYXJndW1lbnRzCisJbGlrZSBwYXJ0aWFsIHNpemUgb2YgdGhlIGVtYmVkZGVkIG9iamVjdHMgb3IgY3JlYXRpb24gZmxhZ3MuCisKK0BzaXplIC0gc2l6ZSBvZiB0aGUgYXR0YWNoZWQgZGF0YS4gRm9yIE5FVEZTX1JFQURfUEFHRSBhbmQgTkVURlNfUkVBRF9QQUdFUyBubyBkYXRhIGlzIGF0dGFjaGVkLAorCWJ1dCBzaXplIG9mIHRoZSByZXF1ZXN0ZWQgZGF0YSBpcyBpbmNvcnBvcmF0ZWQgaGVyZS4gSXQgZG9lcyBub3QgaW5jbHVkZSBzaXplIG9mIHRoZSBjb21tYW5kCisJaGVhZGVyIChzdHJ1Y3QgbmV0ZnNfY21kKSBpdHNlbGYuCisKK0BpZCAtIGlkIG9mIHRoZSBvYmplY3QgdGhpcyBjb21tYW5kIG9wZXJhdGVzIG9uLiBFYWNoIGNvbW1hbmQgY2FuIHVzZSBpdCBmb3Igb3duIHB1cnBvc2UuCisKK0BzdGFydCAtIHN0YXJ0IG9mIHRoZSBvYmplY3QgdGhpcyBjb21tYW5kIG9wZXJhdGVzIG9uLiBFYWNoIGNvbW1hbmQgY2FuIHVzZSBpdCBmb3Igb3duIHB1cnBvc2UuCisKK0Bjc2l6ZSwgQGNwYWQgLSBzaXplIGFuZCBwYWRkaW5nIHNpemUgb2YgdGhlIChhdHRhY2hlZCBpZiBuZWVkZWQpIGNyeXB0byBpbmZvcm1hdGlvbi4KKworQ29tbWFuZCBzcGVjaWZpY2F0aW9ucy4KKworQE5FVEZTX1JFQURESVIKK1RoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHN5bmMgY29udGVudCBvZiB0aGUgcmVtb3RlIGRpciB0byB0aGUgY2xpZW50LgorCitAZXh0IC0gbGVuZ3RoIG9mIHRoZSBwYXRoIHRvIG9iamVjdC4KK0BzaXplIC0gdGhlIHNhbWUuCitAaWQgLSBsb2NhbCBpbm9kZSBudW1iZXIgb2YgdGhlIGRpcmVjdG9yeSB0byByZWFkLgorQHN0YXJ0IC0gemVyby4KKworCitATkVURlNfUkVBRF9QQUdFCitUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGRhdGEgZnJvbSByZW1vdGUgc2VydmVyLgorRGF0YSBzaXplIGRvZXMgbm90IGV4Y2VlZCBsb2NhbCBwYWdlIGNhY2hlIHNpemUuCisKK0BpZCAtIGlub2RlIG51bWJlci4KK0BzdGFydCAtIGZpcnN0IGJ5dGUgb2Zmc2V0LgorQHNpemUgLSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBwbHVzIGxlbmd0aCBvZiB0aGUgcGF0aCB0byBvYmplY3QuCitAZXh0IC0gb2JqZWN0IHBhdGggbGVuZ3RoLgorCisKK0BORVRGU19DUkVBVEUKK1VzZWQgdG8gY3JlYXRlIG9iamVjdC4KK0l0IGRvZXMgbm90IHJlcXVpcmUgdGhhdCBhbGwgZGlyZWN0b3JpZXMgb24gdG9wIG9mIHRoZSBvYmplY3Qgd2VyZQorYWxyZWFkeSBjcmVhdGVkLCBpdCB3aWxsIGNyZWF0ZSB0aGVtIGF1dG9tYXRpY2FsbHkuIEVhY2ggb2JqZWN0IGhhcworYXNzb2NpYXRlZCBAbmV0ZnNfcGF0aF9lbnRyeSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggY29udGFpbnMgY3JlYXRpb24KK21vZGUgKHBlcm1pc3Npb25zIGFuZCB0eXBlKSBhbmQgbGVuZ3RoIG9mIHRoZSBuYW1lIGFzIGxvbmcgYXMgbmFtZSBpdHNlbGYuCisKK0BzdGFydCAtIDAKK0BzaXplIC0gc2l6ZSBvZiB0aGUgYWxsIGRhdGEgc3RydWN0dXJlcyBuZWVkZWQgdG8gY3JlYXRlIGEgcGF0aAorQGlkIC0gbG9jYWwgaW5vZGUgbnVtYmVyCitAZXh0IC0gMAorCisKK0BORVRGU19SRU1PVkUKK1VzZWQgdG8gcmVtb3ZlIG9iamVjdC4KKworQGV4dCAtIGxlbmd0aCBvZiB0aGUgcGF0aCB0byBvYmplY3QuCitAc2l6ZSAtIHRoZSBzYW1lLgorQGlkIC0gbG9jYWwgaW5vZGUgbnVtYmVyLgorQHN0YXJ0IC0gemVyby4KKworCitATkVURlNfTE9PS1VQCitMb29rdXAgaW5mb3JtYXRpb24gYWJvdXQgb2JqZWN0IG9uIHNlcnZlci4KKworQGV4dCAtIGxlbmd0aCBvZiB0aGUgcGF0aCB0byBvYmplY3QuCitAc2l6ZSAtIHRoZSBzYW1lLgorQGlkIC0gbG9jYWwgaW5vZGUgbnVtYmVyIG9mIHRoZSBkaXJlY3RvcnkgdG8gbG9vayBvYmplY3QgaW4uCitAc3RhcnQgLSBsb2NhbCBpbm9kZSBudW1iZXIgb2YgdGhlIG9iamVjdCB0byBsb29rIGF0LgorCisKK0BORVRGU19MSU5LCitDcmVhdGUgaGFyZCBvZiBzeW1saW5rLgorQ29tbWFuZCBpcyBzZW50IGFzICJvYmplY3RfcGF0aHx0YXJnZXRfcGF0aCIuCisKK0BzaXplIC0gc2l6ZSBvZiB0aGUgYWJvdmUgc3RyaW5nLgorQGlkIC0gcGFyZW50IGxvY2FsIGlub2RlIG51bWJlci4KK0BzdGFydCAtIDEgZm9yIHN5bWxpbmssIDAgZm9yIGhhcmRsaW5rLgorQGV4dCAtIHNpemUgb2YgdGhlICJvYmplY3RfcGF0aCIgYWJvdmUuCisKKworQE5FVEZTX1RSQU5TCitUcmFuc2FjdGlvbiBoZWFkZXIuCisKK0BzaXplIC0gaW5jb3Jwb3JhdGVzIGFsbCBlbWJlZGRlZCBjb21tYW5kIHNpemVzIGluY2x1ZGluZyB0aGVpcnMgaGVhZGVyIHNpemVzLgorQHN0YXJ0IC0gdHJhbnNhY3Rpb24gZ2VuZXJhdGlvbiBudW1iZXIgLSB1bmlxdWUgaWQgdXNlZCB0byBmaW5kIHRyYW5zYWN0aW9uLgorQGV4dCAtIHRyYW5zYWN0aW9uIGZsYWdzLiBVbnVzZWQgYXQgdGhlIG1vbWVudC4KK0BpZCAtIDAuCisKKworQE5FVEZTX09QRU4KK09wZW4gaW50ZW50IGZvciBnaXZlbiB0cmFuc2FjdGlvbi4KKworQGlkIC0gbG9jYWwgaW5vZGUgbnVtYmVyLgorQHN0YXJ0IC0gMC4KK0BzaXplIC0gcGF0aCBsZW5ndGggdG8gdGhlIG9iamVjdC4KK0BleHQgLSBvcGVuIGZsYWdzIChPX1JEV1IgYW5kIHNvIG9uKS4KKworCitATkVURlNfSU5PREVfSU5GTworTWV0YWRhdGEgdXBkYXRlIGNvbW1hbmQuCitJdCBpcyBzZW50IHRvIHNlcnZlcnMgd2hlbiBhdHRyaWJ1dGVzIG9mIHRoZSBvYmplY3QgYXJlIGNoYW5nZWQgYW5kIHJlY2VpdmVkCit3aGVuIGRhdGEgb3IgbWV0YWRhdGEgd2VyZSB1cGRhdGVkLiBJdCBvcGVyYXRlcyB3aXRoIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorCitzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbworeworCXVuc2lnbmVkIGludAkJbW9kZTsKKwl1bnNpZ25lZCBpbnQJCW5saW5rOworCXVuc2lnbmVkIGludAkJdWlkOworCXVuc2lnbmVkIGludAkJZ2lkOworCXVuc2lnbmVkIGludAkJYmxvY2tzaXplOworCXVuc2lnbmVkIGludAkJcGFkZGluZzsKKwlfX3U2NAkJCWlubzsKKwlfX3U2NAkJCWJsb2NrczsKKwlfX3U2NAkJCXJkZXY7CisJX191NjQJCQlzaXplOworCV9fdTY0CQkJdmVyc2lvbjsKK307CisKK0l0IGVmZmVjdGl2ZWx5IG1pcnJvcnMgc3RhdCgyKSByZXR1cm5lZCBkYXRhLgorCisKK0BleHQgLSBwYXRoIGxlbmd0aCB0byB0aGUgb2JqZWN0LgorQHNpemUgLSB0aGUgc2FtZSBwbHVzIHNpemUgb2YgdGhlIG5ldGZzX2lub2RlX2luZm8gc3RydWN0dXJlLgorQGlkIC0gbG9jYWwgaW5vZGUgbnVtYmVyLgorQHN0YXJ0IC0gMC4KKworCitATkVURlNfUEFHRV9DQUNIRQorQ29tbWFuZCBpcyBvbmx5IHJlY2VpdmVkIGJ5IGNsaWVudHMuIEl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CitwYWdlIHRvIGJlIG1hcmtlZCBhcyBub3QgdXAtdG8tZGF0ZS4KKworQGlkIC0gY2xpZW50J3MgaW5vZGUgbnVtYmVyLgorQHN0YXJ0IC0gbGFzdCBieXRlIG9mIHRoZSBwYWdlIHRvIGJlIGludmFsaWRhdGVkLiBJZiBpdCBpcyBub3QgZXF1YWwgdG8KKwljdXJyZW50IGlub2RlIHNpemUsIGl0IHdpbGwgYmUgdm10cnVuY2F0ZWQoKS4KK0BzaXplIC0gMAorQGV4dCAtIDAKKworCitATkVURlNfUkVBRF9QQUdFUworVXNlZCB0byByZWFkIG11bHRpcGxlIGNvbnRpZ3VvdXMgcGFnZXMgaW4gb25lIGdvLgorCitAc3RhcnQgLSBmaXJzdCBieXRlIG9mIHRoZSBjb250aWd1b3VzIHJlZ2lvbiB0byByZWFkLgorQHNpemUgLSBjb250YWlucyBvZiB0d28gZmllbGRzOiBsb3dlciA4IGJpdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHBhZ2UgY2FjaGUgc2hpZnQKKwl1c2VkIGJ5IGNsaWVudCwgYW5vdGhlciAzIGJ5dGVzIGFyZSB1c2VkIHRvIGdldCBudW1iZXIgb2YgcGFnZXMuCitAaWQgLSBsb2NhbCBpbm9kZSBudW1iZXIuCitAZXh0IC0gcGF0aCBsZW5ndGggdG8gdGhlIG9iamVjdC4KKworCitATkVURlNfUkVOQU1FCitVc2VkIHRvIHJlbmFtZSBvYmplY3QuCitBdHRhY2hlZCBkYXRhIGlzIGZvcm1lZCBpbnRvIGZvbGxvd2luZyBzdHJpbmc6ICJvbGRfcGF0aHxuZXdfcGF0aCIuCisKK0BpZCAtIGxvY2FsIGlub2RlIG51bWJlci4KK0BzdGFydCAtIHBhcmVudCBpbm9kZSBudW1iZXIuCitAc2l6ZSAtIGxlbmd0aCBvZiB0aGUgYWJvdmUgc3RyaW5nLgorQGV4dCAtIGxlbmd0aCBvZiB0aGUgb2xkIHBhdGggcGFydC4KKworCitATkVURlNfQ0FQQUJJTElUSUVTCitVc2VkIHRvIGV4Y2hhbmdlIGNyeXB0byBjYXBhYmlsaXRpZXMgd2l0aCBzZXJ2ZXIuCitJZiBjcnlwdG8gY2FwYWJpbGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlciwgdGhlbiBjbGllbnQgd2lsbCBkaXNhYmxlIGl0CitvciBmYWlsIChpZiAnY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQnIG1vdW50IG9wdGlvbnMgd2FzIHNwZWNpZmllZCkuCisKK0BpZCAtIHN1cGVyYmxvY2sgaW5kZXguIFVzZWQgdG8gc3BlY2lmeSBjcnlwdG8gaW5mb3JtYXRpb24gZm9yIGdyb3VwIG9mIHNlcnZlcnMuCitAc2l6ZSAtIHNpemUgb2YgdGhlIGF0dGFjaGVkIGNhcGFiaWxpdGllcyBzdHJ1Y3R1cmUuCitAc3RhcnQgLSAwLgorQHNpemUgLSAwLgorQHNjc2l6ZSAtIDAuCisKK0BORVRGU19MT0NLCitVc2VkIHRvIHNlbmQgbG9jayByZXF1ZXN0L3JlbGVhc2UgbWVzc2FnZXMuIEFsdGhvdWdoIGl0IHNlbmRzIGJ5dGUgcmFuZ2UgcmVxdWVzdAorYW5kIGlzIGNhcGFibGUgb2YgZmx1c2hpbmcgcGFnZXMgYmFzZWQgb24gdGhhdCwgaXQgaXMgbm90IHVzZWQsIHNpbmNlIGFsbCBMaW51eAorZmlsZXN5c3RlbXMgbG9jayB0aGUgd2hvbGUgaW5vZGUuCisKK0BpZCAtIGxvY2sgZ2VuZXJhdGlvbiBudW1iZXIuCitAc3RhcnQgLSBzdGFydCBvZiB0aGUgbG9ja2VkIHJhbmdlLgorQHNpemUgLSBzaXplIG9mIHRoZSBsb2NrZWQgcmFuZ2UuCitAZXh0IC0gbG9jayB0eXBlOiByZWFkL3dyaXRlLiBOb3QgdXNlZCBhY3R1YWxseS4gMTUndGggYml0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lLAorCWlmIGl0IGlzIGxvY2sgcmVxdWVzdCAoMSkgb3IgcmVsZWFzZSAoMCkuCisKK0BORVRGU19YQVRUUl9TRVQKK0BORVRGU19YQVRUUl9HRVQKK1VzZWQgdG8gc2V0L2dldCBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBnaXZlbiBpbm9kZS4KK0BpZCAtIGF0dHJpYnV0ZSBnZW5lcmF0aW9uIG51bWJlciBvciB4YXR0ciBzZXR0aW5nIHR5cGUKK0BzdGFydCAtIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSAocmVxdWVzdCBvciBhdHRhY2hlZCkKK0BzaXplIC0gbmFtZSBsZW5ndGgsIHBhdGggbGVuIGFuZCBkYXRhIHNpemUgZm9yIGdpdmVuIGF0dHJpYnV0ZQorQGV4dCAtIHBhdGggbGVuZ3RoIGZvciBnaXZlbiBvYmplY3QKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGVmYzRmZDkuLmNlODRjZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtNSw2ICs1LDcgQEAKICAgICAgICAgICAgICAgICAgIEJvZG8gQmF1ZXIgPGJiQHJpY29jaGV0Lm5ldD4KIAogMi40LnggdXBkYXRlCSAgSm9yZ2UgTmVyaW4gPGNvbWFuZGFudGVAemFyYWxpbnV4LmNvbT4gICAgICBOb3ZlbWJlciAxNCAyMDAwCittb3ZlIC9wcm9jL3N5cwkgIFNoZW4gRmVuZyA8c2hlbkBjbi5mdWppdHN1LmNvbT4JCSAgICBBcHJpbCAxIDIwMDkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVmVyc2lvbiAxLjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsIHZlcnNpb24gMi4yLjEyCiAJCQkJCSAgICAgIEtlcm5lbCB2ZXJzaW9uIDIuNC4wLXRlc3QxMS1wcmU0CkBAIC0yNiwyNSArMjcsMTcgQEAKICAgMS42CVBhcmFsbGVsIHBvcnQgaW5mbyBpbiAvcHJvYy9wYXJwb3J0CiAgIDEuNwlUVFkgaW5mbyBpbiAvcHJvYy90dHkKICAgMS44CU1pc2NlbGxhbmVvdXMga2VybmVsIHN0YXRpc3RpY3MgaW4gL3Byb2Mvc3RhdAorICAxLjkgRXh0NCBmaWxlIHN5c3RlbSBwYXJhbWV0ZXJzCiAKICAgMglNb2RpZnlpbmcgU3lzdGVtIFBhcmFtZXRlcnMKLSAgMi4xCS9wcm9jL3N5cy9mcyAtIEZpbGUgc3lzdGVtIGRhdGEKLSAgMi4yCS9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyAtIE1pc2NlbGxhbmVvdXMgYmluYXJ5IGZvcm1hdHMKLSAgMi4zCS9wcm9jL3N5cy9rZXJuZWwgLSBnZW5lcmFsIGtlcm5lbCBwYXJhbWV0ZXJzCi0gIDIuNAkvcHJvYy9zeXMvdm0gLSBUaGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtCi0gIDIuNQkvcHJvYy9zeXMvZGV2IC0gRGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAgMi42CS9wcm9jL3N5cy9zdW5ycGMgLSBSZW1vdGUgcHJvY2VkdXJlIGNhbGxzCi0gIDIuNwkvcHJvYy9zeXMvbmV0IC0gTmV0d29ya2luZyBzdHVmZgotICAyLjgJL3Byb2Mvc3lzL25ldC9pcHY0IC0gSVBWNCBzZXR0aW5ncwotICAyLjkJQXBwbGV0YWxrCi0gIDIuMTAJSVBYCi0gIDIuMTEJL3Byb2Mvc3lzL2ZzL21xdWV1ZSAtIFBPU0lYIG1lc3NhZ2UgcXVldWVzIGZpbGVzeXN0ZW0KLSAgMi4xMgkvcHJvYy88cGlkPi9vb21fYWRqIC0gQWRqdXN0IHRoZSBvb20ta2lsbGVyIHNjb3JlCi0gIDIuMTMJL3Byb2MvPHBpZD4vb29tX3Njb3JlIC0gRGlzcGxheSBjdXJyZW50IG9vbS1raWxsZXIgc2NvcmUKLSAgMi4xNAkvcHJvYy88cGlkPi9pbyAtIERpc3BsYXkgdGhlIElPIGFjY291bnRpbmcgZmllbGRzCi0gIDIuMTUJL3Byb2MvPHBpZD4vY29yZWR1bXBfZmlsdGVyIC0gQ29yZSBkdW1wIGZpbHRlcmluZyBzZXR0aW5ncwotICAyLjE2CS9wcm9jLzxwaWQ+L21vdW50aW5mbyAtIEluZm9ybWF0aW9uIGFib3V0IG1vdW50cwotICAyLjE3CS9wcm9jL3N5cy9mcy9lcG9sbCAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGVwb2xsIGludGVyZmFjZQorCisgIDMJUGVyLVByb2Nlc3MgUGFyYW1ldGVycworICAzLjEJL3Byb2MvPHBpZD4vb29tX2FkaiAtIEFkanVzdCB0aGUgb29tLWtpbGxlciBzY29yZQorICAzLjIJL3Byb2MvPHBpZD4vb29tX3Njb3JlIC0gRGlzcGxheSBjdXJyZW50IG9vbS1raWxsZXIgc2NvcmUKKyAgMy4zCS9wcm9jLzxwaWQ+L2lvIC0gRGlzcGxheSB0aGUgSU8gYWNjb3VudGluZyBmaWVsZHMKKyAgMy40CS9wcm9jLzxwaWQ+L2NvcmVkdW1wX2ZpbHRlciAtIENvcmUgZHVtcCBmaWx0ZXJpbmcgc2V0dGluZ3MKKyAgMy41CS9wcm9jLzxwaWQ+L21vdW50aW5mbyAtIEluZm9ybWF0aW9uIGFib3V0IG1vdW50cworCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUHJlZmFjZQpAQCAtOTkwLDEwMjEgKzk4MywyNCBAQAogVGhpcyBjaGFwdGVyICBpcyAgaGVhdmlseSAgYmFzZWQgIG9uIHRoZSBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluIHRoZSBwcmUgMi4yCiBrZXJuZWxzLCBhbmQgYmVjYW1lIHBhcnQgb2YgaXQgaW4gdmVyc2lvbiAyLjIuMSBvZiB0aGUgTGludXgga2VybmVsLgogCi0yLjEgL3Byb2Mvc3lzL2ZzIC0gRmlsZSBzeXN0ZW0gZGF0YQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBzdWJkaXJlY3RvcnkgIGNvbnRhaW5zICBzcGVjaWZpYyAgZmlsZSBzeXN0ZW0sIGZpbGUgaGFuZGxlLCBpbm9kZSwgZGVudHJ5Ci1hbmQgcXVvdGEgaW5mb3JtYXRpb24uCi0KLUN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy9mczoKLQotZGVudHJ5LXN0YXRlCi0tLS0tLS0tLS0tLS0KLQotU3RhdHVzIG9mICB0aGUgIGRpcmVjdG9yeSAgY2FjaGUuICBTaW5jZSAgZGlyZWN0b3J5ICBlbnRyaWVzICBhcmUgIGR5bmFtaWNhbGx5Ci1hbGxvY2F0ZWQgYW5kICBkZWFsbG9jYXRlZCwgIHRoaXMgIGZpbGUgaW5kaWNhdGVzIHRoZSBjdXJyZW50IHN0YXR1cy4gSXQgaG9sZHMKLXNpeCB2YWx1ZXMsIGluIHdoaWNoIHRoZSBsYXN0IHR3byBhcmUgbm90IHVzZWQgYW5kIGFyZSBhbHdheXMgemVyby4gVGhlIG90aGVycwotYXJlIGxpc3RlZCBpbiB0YWJsZSAyLTEuCi0KLQotVGFibGUgMi0xOiBTdGF0dXMgZmlsZXMgb2YgdGhlIGRpcmVjdG9yeSBjYWNoZSAKLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotIEZpbGUgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIG5yX2RlbnRyeSAgQWxtb3N0IGFsd2F5cyB6ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIG5yX3VudXNlZCAgTnVtYmVyIG9mIHVudXNlZCBjYWNoZSBlbnRyaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotIGFnZV9saW1pdCAgCi0gICAgICAgICAgICBpbiBzZWNvbmRzIGFmdGVyIHRoZSBlbnRyeSBtYXkgYmUgcmVjbGFpbWVkLCB3aGVuIG1lbW9yeSBpcyBzaG9ydCAKLSB3YW50X3BhZ2VzIGludGVybmFsbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1kcXVvdC1uciBhbmQgZHF1b3QtbWF4Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBmaWxlIGRxdW90LW1heCBzaG93cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2FjaGVkIGRpc2sgcXVvdGEgZW50cmllcy4KLQotVGhlIGZpbGUgIGRxdW90LW5yICBzaG93cyAgdGhlICBudW1iZXIgb2YgYWxsb2NhdGVkIGRpc2sgcXVvdGEgZW50cmllcyBhbmQgdGhlCi1udW1iZXIgb2YgZnJlZSBkaXNrIHF1b3RhIGVudHJpZXMuCi0KLUlmIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNhY2hlZCBkaXNrIHF1b3RhcyBpcyB2ZXJ5IGxvdyBhbmQgeW91IGhhdmUgYSBsYXJnZQotbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBzeXN0ZW0gdXNlcnMsIHlvdSBtaWdodCB3YW50IHRvIHJhaXNlIHRoZSBsaW1pdC4KLQotZmlsZS1uciBhbmQgZmlsZS1tYXgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBrZXJuZWwgIGFsbG9jYXRlcyBmaWxlIGhhbmRsZXMgZHluYW1pY2FsbHksIGJ1dCBkb2Vzbid0IGZyZWUgdGhlbSBhZ2FpbiBhdAotdGhpcyB0aW1lLgotCi1UaGUgdmFsdWUgIGluICBmaWxlLW1heCAgZGVub3RlcyAgdGhlICBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGhhbmRsZXMgdGhhdCB0aGUKLUxpbnV4IGtlcm5lbCB3aWxsIGFsbG9jYXRlLiBXaGVuIHlvdSBnZXQgYSBsb3Qgb2YgZXJyb3IgbWVzc2FnZXMgYWJvdXQgcnVubmluZwotb3V0IG9mICBmaWxlIGhhbmRsZXMsIHlvdSBtaWdodCB3YW50IHRvIHJhaXNlIHRoaXMgbGltaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzCi0xMCUgb2YgIFJBTSBpbiBraWxvYnl0ZXMuICBUbyAgY2hhbmdlIGl0LCBqdXN0ICB3cml0ZSB0aGUgbmV3IG51bWJlciAgaW50byB0aGUKLWZpbGU6Ci0KLSAgIyBjYXQgL3Byb2Mvc3lzL2ZzL2ZpbGUtbWF4IAotICA0MDk2IAotICAjIGVjaG8gODE5MiA+IC9wcm9jL3N5cy9mcy9maWxlLW1heCAKLSAgIyBjYXQgL3Byb2Mvc3lzL2ZzL2ZpbGUtbWF4IAotICA4MTkyIAotCi0KLVRoaXMgbWV0aG9kICBvZiAgcmV2aXNpb24gIGlzICB1c2VmdWwgIGZvciAgYWxsIGN1c3RvbWl6YWJsZSBwYXJhbWV0ZXJzIG9mIHRoZQota2VybmVsIC0gc2ltcGx5IGVjaG8gdGhlIG5ldyB2YWx1ZSB0byB0aGUgY29ycmVzcG9uZGluZyBmaWxlLgotCi1IaXN0b3JpY2FsbHksIHRoZSB0aHJlZSB2YWx1ZXMgaW4gZmlsZS1uciBkZW5vdGVkIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIGZpbGUKLWhhbmRsZXMsICB0aGUgbnVtYmVyIG9mICBhbGxvY2F0ZWQgYnV0ICB1bnVzZWQgZmlsZSAgaGFuZGxlcywgYW5kICB0aGUgbWF4aW11bQotbnVtYmVyIG9mIGZpbGUgaGFuZGxlcy4gTGludXggMi42IGFsd2F5cyAgcmVwb3J0cyAwIGFzIHRoZSBudW1iZXIgb2YgZnJlZSBmaWxlCi1oYW5kbGVzIC0tIHRoaXMgIGlzIG5vdCBhbiBlcnJvciwgIGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUgIG51bWJlciBvZiBhbGxvY2F0ZWQKLWZpbGUgaGFuZGxlcyBleGFjdGx5IG1hdGNoZXMgdGhlIG51bWJlciBvZiB1c2VkIGZpbGUgaGFuZGxlcy4KLQotQXR0ZW1wdHMgdG8gIGFsbG9jYXRlIG1vcmUgIGZpbGUgZGVzY3JpcHRvcnMgdGhhbiAgZmlsZS1tYXggYXJlICByZXBvcnRlZCB3aXRoCi1wcmludGssIGxvb2sgZm9yICJWRlM6IGZpbGUtbWF4IGxpbWl0IDxudW1iZXI+IHJlYWNoZWQiLgotCi1pbm9kZS1zdGF0ZSBhbmQgaW5vZGUtbnIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgZmlsZSBpbm9kZS1uciBjb250YWlucyB0aGUgZmlyc3QgdHdvIGl0ZW1zIGZyb20gaW5vZGUtc3RhdGUsIHNvIHdlJ2xsIHNraXAKLXRvIHRoYXQgZmlsZS4uLgotCi1pbm9kZS1zdGF0ZSBjb250YWlucyAgdHdvICBhY3R1YWwgbnVtYmVycyBhbmQgZml2ZSBkdW1teSB2YWx1ZXMuIFRoZSBudW1iZXJzCi1hcmUgbnJfaW5vZGVzIGFuZCBucl9mcmVlX2lub2RlcyAoaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSkuCi0KLW5yX2lub2Rlcwotfn5+fn5+fn5+Ci0KLURlbm90ZXMgdGhlICBudW1iZXIgIG9mICBpbm9kZXMgdGhlIHN5c3RlbSBoYXMgYWxsb2NhdGVkLiBUaGlzIG51bWJlciB3aWxsCi1ncm93IGFuZCBzaHJpbmsgZHluYW1pY2FsbHkuCi0KLW5yX29wZW4KLS0tLS0tLS0KLQotRGVub3RlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZS1oYW5kbGVzIGEgcHJvY2VzcyBjYW4KLWFsbG9jYXRlLiBEZWZhdWx0IHZhbHVlIGlzIDEwMjQqMTAyNCAoMTA0ODU3Nikgd2hpY2ggc2hvdWxkIGJlCi1lbm91Z2ggZm9yIG1vc3QgbWFjaGluZXMuIEFjdHVhbCBsaW1pdCBkZXBlbmRzIG9uIFJMSU1JVF9OT0ZJTEUKLXJlc291cmNlIGxpbWl0LgotCi1ucl9mcmVlX2lub2RlcwotLS0tLS0tLS0tLS0tLS0KLQotUmVwcmVzZW50cyB0aGUgIG51bWJlciBvZiBmcmVlIGlub2Rlcy4gSWUuIFRoZSBudW1iZXIgb2YgaW51c2UgaW5vZGVzIGlzCi0obnJfaW5vZGVzIC0gbnJfZnJlZV9pbm9kZXMpLgotCi1haW8tbnIgYW5kIGFpby1tYXgtbnIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1haW8tbnIgaXMgdGhlIHJ1bm5pbmcgdG90YWwgb2YgdGhlIG51bWJlciBvZiBldmVudHMgc3BlY2lmaWVkIG9uIHRoZQotaW9fc2V0dXAgc3lzdGVtIGNhbGwgZm9yIGFsbCBjdXJyZW50bHkgYWN0aXZlIGFpbyBjb250ZXh0cy4gIElmIGFpby1ucgotcmVhY2hlcyBhaW8tbWF4LW5yIHRoZW4gaW9fc2V0dXAgd2lsbCBmYWlsIHdpdGggRUFHQUlOLiAgTm90ZSB0aGF0Ci1yYWlzaW5nIGFpby1tYXgtbnIgZG9lcyBub3QgcmVzdWx0IGluIHRoZSBwcmUtYWxsb2NhdGlvbiBvciByZS1zaXppbmcKLW9mIGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLgotCi0yLjIgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIC0gTWlzY2VsbGFuZW91cyBiaW5hcnkgZm9ybWF0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQmVzaWRlcyB0aGVzZSAgZmlsZXMsIHRoZXJlIGlzIHRoZSBzdWJkaXJlY3RvcnkgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjLiBUaGlzCi1oYW5kbGVzIHRoZSBrZXJuZWwgc3VwcG9ydCBmb3IgbWlzY2VsbGFuZW91cyBiaW5hcnkgZm9ybWF0cy4KLQotQmluZm10X21pc2MgcHJvdmlkZXMgIHRoZSBhYmlsaXR5IHRvIHJlZ2lzdGVyIGFkZGl0aW9uYWwgYmluYXJ5IGZvcm1hdHMgdG8gdGhlCi1LZXJuZWwgd2l0aG91dCAgY29tcGlsaW5nICBhbiBhZGRpdGlvbmFsIG1vZHVsZS9rZXJuZWwuIFRoZXJlZm9yZSwgYmluZm10X21pc2MKLW5lZWRzIHRvICBrbm93IG1hZ2ljIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyBvciB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIG9mIHRoZQotYmluYXJ5LgotCi1JdCB3b3JrcyBieSBtYWludGFpbmluZyBhIGxpbmtlZCBsaXN0IG9mIHN0cnVjdHMgdGhhdCBjb250YWluIGEgZGVzY3JpcHRpb24gb2YKLWEgYmluYXJ5ICBmb3JtYXQsICBpbmNsdWRpbmcgIGEgIG1hZ2ljICB3aXRoIHNpemUgKG9yIHRoZSBmaWxlbmFtZSBleHRlbnNpb24pLAotb2Zmc2V0IGFuZCAgbWFzaywgIGFuZCAgdGhlICBpbnRlcnByZXRlciBuYW1lLiBPbiByZXF1ZXN0IGl0IGludm9rZXMgdGhlIGdpdmVuCi1pbnRlcnByZXRlciB3aXRoICB0aGUgIG9yaWdpbmFsICBwcm9ncmFtICBhcyAgYXJndW1lbnQsICBhcyAgYmluZm10X2phdmEgIGFuZAotYmluZm10X2VtODYgYW5kICBiaW5mbXRfbXogIGRvLiAgU2luY2UgYmluZm10X21pc2MgZG9lcyBub3QgZGVmaW5lIGFueSBkZWZhdWx0Ci1iaW5hcnktZm9ybWF0cywgeW91IGhhdmUgdG8gcmVnaXN0ZXIgYW4gYWRkaXRpb25hbCBiaW5hcnktZm9ybWF0LgotCi1UaGVyZSBhcmUgdHdvIGdlbmVyYWwgZmlsZXMgaW4gYmluZm10X21pc2MgYW5kIG9uZSBmaWxlIHBlciByZWdpc3RlcmVkIGZvcm1hdC4KLVRoZSB0d28gZ2VuZXJhbCBmaWxlcyBhcmUgcmVnaXN0ZXIgYW5kIHN0YXR1cy4KLQotUmVnaXN0ZXJpbmcgYSBuZXcgYmluYXJ5IGZvcm1hdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UbyByZWdpc3RlciBhIG5ldyBiaW5hcnkgZm9ybWF0IHlvdSBoYXZlIHRvIGlzc3VlIHRoZSBjb21tYW5kCi0KLSAgZWNobyA6bmFtZTp0eXBlOm9mZnNldDptYWdpYzptYXNrOmludGVycHJldGVyOiA+IC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlciAKLQotCi0KLXdpdGggYXBwcm9wcmlhdGUgIG5hbWUgKHRoZSBuYW1lIGZvciB0aGUgL3Byb2MtZGlyIGVudHJ5KSwgb2Zmc2V0IChkZWZhdWx0cyB0bwotMCwgaWYgIG9taXR0ZWQpLCAgbWFnaWMsIG1hc2sgKHdoaWNoIGNhbiBiZSBvbWl0dGVkLCBkZWZhdWx0cyB0byBhbGwgMHhmZikgYW5kCi1sYXN0IGJ1dCAgbm90ICBsZWFzdCwgIHRoZSAgaW50ZXJwcmV0ZXIgdGhhdCBpcyB0byBiZSBpbnZva2VkIChmb3IgZXhhbXBsZSBhbmQKLXRlc3RpbmcgL2Jpbi9lY2hvKS4gIFR5cGUgIGNhbiBiZSBNIGZvciB1c3VhbCBtYWdpYyBtYXRjaGluZyBvciBFIGZvciBmaWxlbmFtZQotZXh0ZW5zaW9uIG1hdGNoaW5nIChnaXZlIGV4dGVuc2lvbiBpbiBwbGFjZSBvZiBtYWdpYykuCi0KLUNoZWNrIG9yIHJlc2V0IHRoZSBzdGF0dXMgb2YgdGhlIGJpbmFyeSBmb3JtYXQgaGFuZGxlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlmIHlvdSAgZG8gYSBjYXQgb24gdGhlIGZpbGUgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3N0YXR1cywgeW91IHdpbGwgZ2V0IHRoZQotY3VycmVudCBzdGF0dXMgKGVuYWJsZWQvZGlzYWJsZWQpIG9mIGJpbmZtdF9taXNjLiBDaGFuZ2UgdGhlIHN0YXR1cyBieSBlY2hvaW5nCi0wIChkaXNhYmxlcykgIG9yICAxICAoZW5hYmxlcykgIG9yICAtMSAgKGNhdXRpb246ICB0aGlzICBjbGVhcnMgYWxsIHByZXZpb3VzbHkKLXJlZ2lzdGVyZWQgYmluYXJ5ICBmb3JtYXRzKSAgdG8gc3RhdHVzLiBGb3IgZXhhbXBsZSBlY2hvIDAgPiBzdGF0dXMgdG8gZGlzYWJsZQotYmluZm10X21pc2MgKHRlbXBvcmFyaWx5KS4KLQotU3RhdHVzIG9mIGEgc2luZ2xlIGhhbmRsZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVhY2ggcmVnaXN0ZXJlZCAgaGFuZGxlciBoYXMgYW4gZW50cnkgaW4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjLiBUaGVzZSBmaWxlcwotcGVyZm9ybSB0aGUgIHNhbWUgZnVuY3Rpb24gYXMgc3RhdHVzLCBidXQgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgYWN0dWFsCi1iaW5hcnkgZm9ybWF0LiAgQnkgIGNhdGluZyB0aGlzIGZpbGUsIHlvdSBhbHNvIHJlY2VpdmUgYWxsIHJlbGF0ZWQgaW5mb3JtYXRpb24KLWFib3V0IHRoZSBpbnRlcnByZXRlci9tYWdpYyBvZiB0aGUgYmluZm10LgotCi1FeGFtcGxlIHVzYWdlIG9mIGJpbmZtdF9taXNjIChlbXVsYXRlIGJpbmZtdF9qYXZhKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBjZCAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgIAotICBlY2hvICc6SmF2YTpNOjpceGNhXHhmZVx4YmFceGJlOjovdXNyL2xvY2FsL2phdmEvYmluL2phdmF3cmFwcGVyOicgPiByZWdpc3RlciAgCi0gIGVjaG8gJzpIVE1MOkU6Omh0bWw6Oi91c3IvbG9jYWwvamF2YS9iaW4vYXBwbGV0dmlld2VyOicgPiByZWdpc3RlciAgCi0gIGVjaG8gJzpBcHBsZXQ6TTo6PCEtLWFwcGxldDo6L3Vzci9sb2NhbC9qYXZhL2Jpbi9hcHBsZXR2aWV3ZXI6JyA+IHJlZ2lzdGVyIAotICBlY2hvICc6REVYRTpNOjpceDBlREVYOjovdXNyL2Jpbi9kb3NleGVjOicgPiByZWdpc3RlciAKLQotCi1UaGVzZSBmb3VyICBsaW5lcyAgYWRkICBzdXBwb3J0ICBmb3IgIEphdmEgIGV4ZWN1dGFibGVzIGFuZCBKYXZhIGFwcGxldHMgKGxpa2UKLWJpbmZtdF9qYXZhLCBhZGRpdGlvbmFsbHkgIHJlY29nbml6aW5nIHRoZSAuaHRtbCBleHRlbnNpb24gd2l0aCBubyBuZWVkIHRvIHB1dAotPCEtLWFwcGxldD4gdG8gIGV2ZXJ5ICBhcHBsZXQgIGZpbGUpLiAgWW91ICBoYXZlICB0byAgaW5zdGFsbCAgdGhlIEpESyBhbmQgdGhlCi1zaGVsbC1zY3JpcHQgL3Vzci9sb2NhbC9qYXZhL2Jpbi9qYXZhd3JhcHBlciAgdG9vLiAgSXQgIHdvcmtzICBhcm91bmQgIHRoZQotYnJva2VubmVzcyBvZiAgdGhlIEphdmEgZmlsZW5hbWUgaGFuZGxpbmcuIFRvIGFkZCBhIEphdmEgYmluYXJ5LCBqdXN0IGNyZWF0ZSBhCi1saW5rIHRvIHRoZSBjbGFzcy1maWxlIHNvbWV3aGVyZSBpbiB0aGUgcGF0aC4KLQotMi4zIC9wcm9jL3N5cy9rZXJuZWwgLSBnZW5lcmFsIGtlcm5lbCBwYXJhbWV0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBkaXJlY3RvcnkgIHJlZmxlY3RzICBnZW5lcmFsICBrZXJuZWwgIGJlaGF2aW9ycy4gQXMgSSd2ZSBzYWlkIGJlZm9yZSwgdGhlCi1jb250ZW50cyBkZXBlbmQgIG9uICB5b3VyICBjb25maWd1cmF0aW9uLiAgSGVyZSB5b3UnbGwgZmluZCB0aGUgbW9zdCBpbXBvcnRhbnQKLWZpbGVzLCBhbG9uZyB3aXRoIGRlc2NyaXB0aW9ucyBvZiB3aGF0IHRoZXkgbWVhbiBhbmQgaG93IHRvIHVzZSB0aGVtLgotCi1hY2N0Ci0tLS0tCi0KLVRoZSBmaWxlIGNvbnRhaW5zIHRocmVlIHZhbHVlczsgaGlnaHdhdGVyLCBsb3d3YXRlciwgYW5kIGZyZXF1ZW5jeS4KLQotSXQgZXhpc3RzICBvbmx5ICB3aGVuICBCU0Qtc3R5bGUgIHByb2Nlc3MgIGFjY291bnRpbmcgaXMgZW5hYmxlZC4gVGhlc2UgdmFsdWVzCi1jb250cm9sIGl0cyBiZWhhdmlvci4gSWYgdGhlIGZyZWUgc3BhY2Ugb24gdGhlIGZpbGUgc3lzdGVtIHdoZXJlIHRoZSBsb2cgbGl2ZXMKLWdvZXMgYmVsb3cgIGxvd3dhdGVyICBwZXJjZW50YWdlLCAgYWNjb3VudGluZyAgc3VzcGVuZHMuICBJZiAgaXQgIGdvZXMgIGFib3ZlCi1oaWdod2F0ZXIgcGVyY2VudGFnZSwgIGFjY291bnRpbmcgIHJlc3VtZXMuIEZyZXF1ZW5jeSBkZXRlcm1pbmVzIGhvdyBvZnRlbiB5b3UKLWNoZWNrIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSAodmFsdWUgaXMgaW4gc2Vjb25kcykuIERlZmF1bHQgc2V0dGluZ3MgYXJlOiA0LAotMiwgYW5kICAzMC4gIFRoYXQgaXMsIHN1c3BlbmQgYWNjb3VudGluZyBpZiB0aGVyZSBpcyBsZXNzIHRoYW4gMiBwZXJjZW50IGZyZWU7Ci1yZXN1bWUgaXQgIGlmIHdlIGhhdmUgYSB2YWx1ZSBvZiAzIG9yIG1vcmUgcGVyY2VudDsgY29uc2lkZXIgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSB2YWxpZCBmb3IgMzAgc2Vjb25kcwotCi1jdHJsLWFsdC1kZWwKLS0tLS0tLS0tLS0tLQotCi1XaGVuIHRoZSB2YWx1ZSBpbiB0aGlzIGZpbGUgaXMgMCwgY3RybC1hbHQtZGVsIGlzIHRyYXBwZWQgYW5kIHNlbnQgdG8gdGhlIGluaXQKLXByb2dyYW0gdG8gIGhhbmRsZSBhIGdyYWNlZnVsIHJlc3RhcnQuIEhvd2V2ZXIsIHdoZW4gdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhdAotemVybywgTGludXgncyAgcmVhY3Rpb24gIHRvICB0aGlzIGtleSBjb21iaW5hdGlvbiB3aWxsIGJlIGFuIGltbWVkaWF0ZSByZWJvb3QsCi13aXRob3V0IHN5bmNpbmcgaXRzIGRpcnR5IGJ1ZmZlcnMuCi0KLVtOT1RFXQotICAgIFdoZW4gYSAgcHJvZ3JhbSAgKGxpa2UgIGRvc2VtdSkgIGhhcyAgdGhlICBrZXlib2FyZCAgaW4gIHJhdyAgbW9kZSwgIHRoZQotICAgIGN0cmwtYWx0LWRlbCBpcyAgaW50ZXJjZXB0ZWQgIGJ5ICB0aGUgIHByb2dyYW0gIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhlCi0gICAga2VybmVsIHR0eSAgbGF5ZXIsICBhbmQgIGl0IGlzIHVwIHRvIHRoZSBwcm9ncmFtIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGgKLSAgICBpdC4KLQotZG9tYWlubmFtZSBhbmQgaG9zdG5hbWUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXNlIGZpbGVzICBjYW4gIGJlIGNvbnRyb2xsZWQgdG8gc2V0IHRoZSBOSVMgZG9tYWlubmFtZSBhbmQgaG9zdG5hbWUgb2YgeW91cgotYm94LiBGb3IgdGhlIGNsYXNzaWMgZGFya3N0YXIuZnJvcC5vcmcgYSBzaW1wbGU6Ci0KLSAgIyBlY2hvICJkYXJrc3RhciIgPiAvcHJvYy9zeXMva2VybmVsL2hvc3RuYW1lIAotICAjIGVjaG8gImZyb3Aub3JnIiA+IC9wcm9jL3N5cy9rZXJuZWwvZG9tYWlubmFtZSAKLQotCi13b3VsZCBzdWZmaWNlIHRvIHNldCB5b3VyIGhvc3RuYW1lIGFuZCBOSVMgZG9tYWlubmFtZS4KLQotb3NyZWxlYXNlLCBvc3R5cGUgYW5kIHZlcnNpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBuYW1lcyBtYWtlIGl0IHByZXR0eSBvYnZpb3VzIHdoYXQgdGhlc2UgZmllbGRzIGNvbnRhaW46Ci0KLSAgPiBjYXQgL3Byb2Mvc3lzL2tlcm5lbC9vc3JlbGVhc2UgCi0gIDIuMi4xMiAKLSAgIAotICA+IGNhdCAvcHJvYy9zeXMva2VybmVsL29zdHlwZSAKLSAgTGludXggCi0gICAKLSAgPiBjYXQgL3Byb2Mvc3lzL2tlcm5lbC92ZXJzaW9uIAotICAjNCBGcmkgT2N0IDEgMTI6NDE6MTQgUERUIDE5OTkgCi0KLQotVGhlIGZpbGVzICBvc3JlbGVhc2UgYW5kIG9zdHlwZSBzaG91bGQgYmUgY2xlYXIgZW5vdWdoLiBWZXJzaW9uIG5lZWRzIGEgbGl0dGxlCi1tb3JlIGNsYXJpZmljYXRpb24uICBUaGUgICM0IG1lYW5zIHRoYXQgdGhpcyBpcyB0aGUgNHRoIGtlcm5lbCBidWlsdCBmcm9tIHRoaXMKLXNvdXJjZSBiYXNlIGFuZCB0aGUgZGF0ZSBhZnRlciBpdCBpbmRpY2F0ZXMgdGhlIHRpbWUgdGhlIGtlcm5lbCB3YXMgYnVpbHQuIFRoZQotb25seSB3YXkgdG8gdHVuZSB0aGVzZSB2YWx1ZXMgaXMgdG8gcmVidWlsZCB0aGUga2VybmVsLgotCi1wYW5pYwotLS0tLS0KLQotVGhlIHZhbHVlICBpbiAgdGhpcyAgZmlsZSAgcmVwcmVzZW50cyAgdGhlICBudW1iZXIgb2Ygc2Vjb25kcyB0aGUga2VybmVsIHdhaXRzCi1iZWZvcmUgcmVib290aW5nICBvbiAgYSAgcGFuaWMuICBXaGVuICB5b3UgIHVzZSAgdGhlICBzb2Z0d2FyZSAgd2F0Y2hkb2csICB0aGUKLXJlY29tbWVuZGVkIHNldHRpbmcgIGlzICA2MC4gSWYgc2V0IHRvIDAsIHRoZSBhdXRvIHJlYm9vdCBhZnRlciBhIGtlcm5lbCBwYW5pYwotaXMgZGlzYWJsZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuCi0KLXByaW50awotLS0tLS0tCi0KLVRoZSBmb3VyIHZhbHVlcyBpbiBwcmludGsgZGVub3RlCi0qIGNvbnNvbGVfbG9nbGV2ZWwsCi0qIGRlZmF1bHRfbWVzc2FnZV9sb2dsZXZlbCwKLSogbWluaW11bV9jb25zb2xlX2xvZ2xldmVsIGFuZAotKiBkZWZhdWx0X2NvbnNvbGVfbG9nbGV2ZWwKLXJlc3BlY3RpdmVseS4KLQotVGhlc2UgdmFsdWVzICBpbmZsdWVuY2UgIHByaW50aygpICBiZWhhdmlvciAgd2hlbiAgcHJpbnRpbmcgIG9yICBsb2dnaW5nIGVycm9yCi1tZXNzYWdlcywgd2hpY2ggIGNvbWUgIGZyb20gIGluc2lkZSAgdGhlICBrZXJuZWwuICBTZWUgIHN5c2xvZygyKSAgZm9yICBtb3JlCi1pbmZvcm1hdGlvbiBvbiB0aGUgZGlmZmVyZW50IGxvZyBsZXZlbHMuCi0KLWNvbnNvbGVfbG9nbGV2ZWwKLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVzc2FnZXMgd2l0aCBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoaXMgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLgotCi1kZWZhdWx0X21lc3NhZ2VfbGV2ZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NZXNzYWdlcyB3aXRob3V0IGFuIGV4cGxpY2l0IHByaW9yaXR5IHdpbGwgYmUgcHJpbnRlZCB3aXRoIHRoaXMgcHJpb3JpdHkuCi0KLW1pbmltdW1fY29uc29sZV9sb2dsZXZlbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1pbmltdW0gKGhpZ2hlc3QpIHZhbHVlIHRvIHdoaWNoIHRoZSBjb25zb2xlX2xvZ2xldmVsIGNhbiBiZSBzZXQuCi0KLWRlZmF1bHRfY29uc29sZV9sb2dsZXZlbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLURlZmF1bHQgdmFsdWUgZm9yIGNvbnNvbGVfbG9nbGV2ZWwuCi0KLXNnLWJpZy1idWZmCi0tLS0tLS0tLS0tLQotCi1UaGlzIGZpbGUgIHNob3dzICB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJpYyBTQ1NJIChzZykgYnVmZmVyLiBBdCB0aGlzIHBvaW50LCB5b3UKLWNhbid0IHR1bmUgIGl0ICB5ZXQsICBidXQgIHlvdSAgY2FuICBjaGFuZ2UgIGl0ICBhdCAgY29tcGlsZSAgdGltZSAgYnkgZWRpdGluZwotaW5jbHVkZS9zY3NpL3NnLmggYW5kIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBTR19CSUdfQlVGRi4KLQotSWYgeW91IHVzZSBhIHNjYW5uZXIgd2l0aCBTQU5FIChTY2FubmVyIEFjY2VzcyBOb3cgRWFzeSkgeW91IG1pZ2h0IHdhbnQgdG8gc2V0Ci10aGlzIHRvIGEgaGlnaGVyIHZhbHVlLiBSZWZlciB0byB0aGUgU0FORSBkb2N1bWVudGF0aW9uIG9uIHRoaXMgaXNzdWUuCi0KLW1vZHByb2JlCi0tLS0tLS0tLQotCi1UaGUgbG9jYXRpb24gIHdoZXJlICB0aGUgIG1vZHByb2JlICBiaW5hcnkgIGlzICBsb2NhdGVkLiAgVGhlIGtlcm5lbCB1c2VzIHRoaXMKLXByb2dyYW0gdG8gbG9hZCBtb2R1bGVzIG9uIGRlbWFuZC4KLQotdW5rbm93bl9ubWlfcGFuaWMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSB2YWx1ZSBpbiB0aGlzIGZpbGUgYWZmZWN0cyBiZWhhdmlvciBvZiBoYW5kbGluZyBOTUkuIFdoZW4gdGhlIHZhbHVlIGlzCi1ub24temVybywgdW5rbm93biBOTUkgaXMgdHJhcHBlZCBhbmQgdGhlbiBwYW5pYyBvY2N1cnMuIEF0IHRoYXQgdGltZSwga2VybmVsCi1kZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkIG9uIGNvbnNvbGUuCi0KLU5NSSBzd2l0Y2ggdGhhdCBtb3N0IElBMzIgc2VydmVycyBoYXZlIGZpcmVzIHVua25vd24gTk1JIHVwLCBmb3IgZXhhbXBsZS4KLUlmIGEgc3lzdGVtIGhhbmdzIHVwLCB0cnkgcHJlc3NpbmcgdGhlIE5NSSBzd2l0Y2guCi0KLXBhbmljX29uX3VucmVjb3ZlcmVkX25taQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBkZWZhdWx0IExpbnV4IGJlaGF2aW91ciBvbiBhbiBOTUkgb2YgZWl0aGVyIG1lbW9yeSBvciB1bmtub3duIGlzIHRvIGNvbnRpbnVlCi1vcGVyYXRpb24uIEZvciBtYW55IGVudmlyb25tZW50cyBzdWNoIGFzIHNjaWVudGlmaWMgY29tcHV0aW5nIGl0IGlzIHByZWZlcmFibGUKLXRoYXQgdGhlIGJveCBpcyB0YWtlbiBvdXQgYW5kIHRoZSBlcnJvciBkZWFsdCB3aXRoIHRoYW4gYW4gdW5jb3JyZWN0ZWQKLXBhcml0eS9FQ0MgZXJyb3IgZ2V0IHByb3BvZ2F0ZWQuCi0KLUEgc21hbGwgbnVtYmVyIG9mIHN5c3RlbXMgZG8gZ2VuZXJhdGUgTk1JJ3MgZm9yIGJpemFycmUgcmFuZG9tIHJlYXNvbnMgc3VjaCBhcwotcG93ZXIgbWFuYWdlbWVudCBzbyB0aGUgZGVmYXVsdCBpcyBvZmYuIFRoYXQgc3lzY3RsIHdvcmtzIGxpa2UgdGhlIGV4aXN0aW5nCi1wYW5pYyBjb250cm9scyBhbHJlYWR5IGluIHRoYXQgZGlyZWN0b3J5LgotCi1ubWlfd2F0Y2hkb2cKLS0tLS0tLS0tLS0tLQotCi1FbmFibGVzL0Rpc2FibGVzIHRoZSBOTUkgd2F0Y2hkb2cgb24geDg2IHN5c3RlbXMuICBXaGVuIHRoZSB2YWx1ZSBpcyBub24temVybwotdGhlIE5NSSB3YXRjaGRvZyBpcyBlbmFibGVkIGFuZCB3aWxsIGNvbnRpbnVvdXNseSB0ZXN0IGFsbCBvbmxpbmUgY3B1cyB0bwotZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIHN0aWxsIGZ1bmN0aW9uaW5nIHByb3Blcmx5LiBDdXJyZW50bHksCi1wYXNzaW5nICJubWlfd2F0Y2hkb2c9IiBwYXJhbWV0ZXIgYXQgYm9vdCB0aW1lIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uCi10byB3b3JrLgotCi1JZiBMQVBJQyBOTUkgd2F0Y2hkb2cgbWV0aG9kIGlzIGluIHVzZSAobm1pX3dhdGNoZG9nPTIga2VybmVsIHBhcmFtZXRlciksIHRoZQotTk1JIHdhdGNoZG9nIHNoYXJlcyByZWdpc3RlcnMgd2l0aCBvcHJvZmlsZS4gQnkgZGlzYWJsaW5nIHRoZSBOTUkgd2F0Y2hkb2csCi1vcHJvZmlsZSBtYXkgaGF2ZSBtb3JlIHJlZ2lzdGVycyB0byB1dGlsaXplLgotCi1tc2dtbmkKLS0tLS0tLQotCi1NYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlIHF1ZXVlIGlkcyBvbiB0aGUgc3lzdGVtLgotVGhpcyB2YWx1ZSBzY2FsZXMgdG8gdGhlIGFtb3VudCBvZiBsb3dtZW0uIEl0IGlzIGF1dG9tYXRpY2FsbHkgcmVjb21wdXRlZAotdXBvbiBtZW1vcnkgYWRkL3JlbW92ZSBvciBpcGMgbmFtZXNwYWNlIGNyZWF0aW9uL3JlbW92YWwuCi1XaGVuIGEgdmFsdWUgaXMgd3JpdHRlbiBpbnRvIHRoaXMgZmlsZSwgbXNnbW5pJ3MgdmFsdWUgYmVjb21lcyBmaXhlZCwgaS5lLiBpdAotaXMgbm90IHJlY29tcHV0ZWQgYW55bW9yZSB3aGVuIG9uZSBvZiB0aGUgYWJvdmUgZXZlbnRzIG9jY3Vycy4KLVVzZSBhdXRvX21zZ21uaSB0byBjaGFuZ2UgdGhpcyBiZWhhdmlvci4KLQotYXV0b19tc2dtbmkKLS0tLS0tLS0tLS0tCi0KLUVuYWJsZXMvRGlzYWJsZXMgYXV0b21hdGljIHJlY29tcHV0aW5nIG9mIG1zZ21uaSB1cG9uIG1lbW9yeSBhZGQvcmVtb3ZlIG9yCi11cG9uIGlwYyBuYW1lc3BhY2UgY3JlYXRpb24vcmVtb3ZhbCAoc2VlIHRoZSBtc2dtbmkgZGVzY3JpcHRpb24gYWJvdmUpLgotRWNob2luZyAiMSIgaW50byB0aGlzIGZpbGUgZW5hYmxlcyBtc2dtbmkgYXV0b21hdGljIHJlY29tcHV0aW5nLgotRWNob2luZyAiMCIgdHVybnMgaXQgb2ZmLgotYXV0b19tc2dtbmkgZGVmYXVsdCB2YWx1ZSBpcyAxLgotCi0KLTIuNCAvcHJvYy9zeXMvdm0gLSBUaGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1QbGVhc2Ugc2VlOiBEb2N1bWVudGF0aW9uL3N5c2N0bHMvdm0udHh0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlCitQbGVhc2Ugc2VlOiBEb2N1bWVudGF0aW9uL3N5c2N0bHMvIGRpcmVjdG9yeSBmb3IgZGVzY3JpcHRpb25zIG9mIHRoZXNlCiBlbnRyaWVzLgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N1bW1hcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGFpbiBhc3BlY3RzICBvZiAga2VybmVsICBiZWhhdmlvciAgY2FuIGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUsIHdpdGhvdXQgdGhlCituZWVkIHRvICByZWNvbXBpbGUgIHRoZSBrZXJuZWwsIG9yIGV2ZW4gdG8gcmVib290IHRoZSBzeXN0ZW0uIFRoZSBmaWxlcyBpbiB0aGUKKy9wcm9jL3N5cyB0cmVlICBjYW4gIG5vdCBvbmx5IGJlIHJlYWQsIGJ1dCBhbHNvIG1vZGlmaWVkLiBZb3UgY2FuIHVzZSB0aGUgZWNobworY29tbWFuZCB0byB3cml0ZSB2YWx1ZSBpbnRvIHRoZXNlIGZpbGVzLCB0aGVyZWJ5IGNoYW5naW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzCitvZiB0aGUga2VybmVsLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLTIuNSAvcHJvYy9zeXMvZGV2IC0gRGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ0hBUFRFUiAzOiBQRVItUFJPQ0VTUyBQQVJBTUVURVJTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ3VycmVudGx5IHRoZXJlIGlzIG9ubHkgc3VwcG9ydCBmb3IgQ0RST00gZHJpdmVzLCBhbmQgZm9yIHRob3NlLCB0aGVyZSBpcyBvbmx5Ci1vbmUgcmVhZC1vbmx5ICBmaWxlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIENELVJPTSBkcml2ZXMgYXR0YWNoZWQgdG8KLXRoZSBzeXN0ZW06Ci0KLSAgPmNhdCAvcHJvYy9zeXMvZGV2L2Nkcm9tL2luZm8gCi0gIENELVJPTSBpbmZvcm1hdGlvbiwgSWQ6IGNkcm9tLmMgMi41NSAxOTk5LzA0LzI1IAotICAgCi0gIGRyaXZlIG5hbWU6ICAgICAgICAgICAgIHNyMCAgICAgaGRiIAotICBkcml2ZSBzcGVlZDogICAgICAgICAgICAzMiAgICAgIDQwIAotICBkcml2ZSAjIG9mIHNsb3RzOiAgICAgICAxICAgICAgIDAgCi0gIENhbiBjbG9zZSB0cmF5OiAgICAgICAgIDEgICAgICAgMSAKLSAgQ2FuIG9wZW4gdHJheTogICAgICAgICAgMSAgICAgICAxIAotICBDYW4gbG9jayB0cmF5OiAgICAgICAgICAxICAgICAgIDEgCi0gIENhbiBjaGFuZ2Ugc3BlZWQ6ICAgICAgIDEgICAgICAgMSAKLSAgQ2FuIHNlbGVjdCBkaXNrOiAgICAgICAgMCAgICAgICAxIAotICBDYW4gcmVhZCBtdWx0aXNlc3Npb246ICAxICAgICAgIDEgCi0gIENhbiByZWFkIE1DTjogICAgICAgICAgIDEgICAgICAgMSAKLSAgUmVwb3J0cyBtZWRpYSBjaGFuZ2VkOiAgMSAgICAgICAxIAotICBDYW4gcGxheSBhdWRpbzogICAgICAgICAxICAgICAgIDEgCi0KLQotWW91IHNlZSB0d28gZHJpdmVzLCBzcjAgYW5kIGhkYiwgYWxvbmcgd2l0aCBhIGxpc3Qgb2YgdGhlaXIgZmVhdHVyZXMuCi0KLTIuNiAvcHJvYy9zeXMvc3VucnBjIC0gUmVtb3RlIHByb2NlZHVyZSBjYWxscwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgZGlyZWN0b3J5ICBjb250YWlucyBmb3VyIGZpbGVzLCB3aGljaCBlbmFibGUgb3IgZGlzYWJsZSBkZWJ1Z2dpbmcgZm9yIHRoZQotUlBDIGZ1bmN0aW9ucyBORlMsIE5GUy1kYWVtb24sIFJQQyBhbmQgTkxNLiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIDAuIFRoZXkgY2FuCi1iZSBzZXQgdG8gb25lIHRvIHR1cm4gZGVidWdnaW5nIG9uLiAoVGhlIGRlZmF1bHQgdmFsdWUgaXMgMCBmb3IgZWFjaCkKLQotMi43IC9wcm9jL3N5cy9uZXQgLSBOZXR3b3JraW5nIHN0dWZmCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGludGVyZmFjZSAgdG8gIHRoZSAgbmV0d29ya2luZyAgcGFydHMgIG9mICB0aGUgIGtlcm5lbCAgaXMgIGxvY2F0ZWQgIGluCi0vcHJvYy9zeXMvbmV0LiBUYWJsZSAgMi0zICBzaG93cyBhbGwgcG9zc2libGUgc3ViZGlyZWN0b3JpZXMuIFlvdSBtYXkgc2VlIG9ubHkKLXNvbWUgb2YgdGhlbSwgZGVwZW5kaW5nIG9uIHlvdXIga2VybmVsJ3MgY29uZmlndXJhdGlvbi4KLQotCi1UYWJsZSAyLTM6IFN1YmRpcmVjdG9yaWVzIGluIC9wcm9jL3N5cy9uZXQgCi0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSBEaXJlY3RvcnkgQ29udGVudCAgICAgICAgICAgICBEaXJlY3RvcnkgIENvbnRlbnQgICAgICAgICAgICAKLSBjb3JlICAgICAgR2VuZXJhbCBwYXJhbWV0ZXIgICBhcHBsZXRhbGsgIEFwcGxldGFsayBwcm90b2NvbCAKLSB1bml4ICAgICAgVW5peCBkb21haW4gc29ja2V0cyBuZXRyb20gICAgIE5FVC9ST00gICAgICAgICAgICAKLSA4MDIgICAgICAgRTgwMiBwcm90b2NvbCAgICAgICBheDI1ICAgICAgIEFYMjUgICAgICAgICAgICAgICAKLSBldGhlcm5ldCAgRXRoZXJuZXQgcHJvdG9jb2wgICByb3NlICAgICAgIFguMjUgUExQIGxheWVyICAgICAKLSBpcHY0ICAgICAgSVAgdmVyc2lvbiA0ICAgICAgICB4MjUgICAgICAgIFguMjUgcHJvdG9jb2wgICAgICAKLSBpcHggICAgICAgSVBYICAgICAgICAgICAgICAgICB0b2tlbi1yaW5nIElCTSB0b2tlbiByaW5nICAgICAKLSBicmlkZ2UgICAgQnJpZGdpbmcgICAgICAgICAgICBkZWNuZXQgICAgIERFQyBuZXQgICAgICAgICAgICAKLSBpcHY2ICAgICAgSVAgdmVyc2lvbiA2ICAgICAgICAgICAgICAgICAgIAotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVdlIHdpbGwgIGNvbmNlbnRyYXRlICBvbiBJUCBuZXR3b3JraW5nIGhlcmUuIFNpbmNlIEFYMTUsIFguMjUsIGFuZCBERUMgTmV0IGFyZQotb25seSBtaW5vciBwbGF5ZXJzIGluIHRoZSBMaW51eCB3b3JsZCwgd2UnbGwgc2tpcCB0aGVtIGluIHRoaXMgY2hhcHRlci4gWW91J2xsCi1maW5kIHNvbWUgIHNob3J0ICBpbmZvIG9uIEFwcGxldGFsayBhbmQgSVBYIGZ1cnRoZXIgb24gaW4gdGhpcyBjaGFwdGVyLiBSZXZpZXcKLXRoZSBvbmxpbmUgIGRvY3VtZW50YXRpb24gIGFuZCB0aGUga2VybmVsIHNvdXJjZSB0byBnZXQgYSBkZXRhaWxlZCB2aWV3IG9mIHRoZQotcGFyYW1ldGVycyBmb3IgIHRob3NlICBwcm90b2NvbHMuICBJbiAgdGhpcyAgc2VjdGlvbiAgd2UnbGwgIGRpc2N1c3MgIHRoZQotc3ViZGlyZWN0b3JpZXMgcHJpbnRlZCAgaW4gIGJvbGQgbGV0dGVycyBpbiB0aGUgdGFibGUgYWJvdmUuIEFzIGRlZmF1bHQgdmFsdWVzCi1hcmUgc3VpdGFibGUgZm9yIG1vc3QgbmVlZHMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZXNlIHZhbHVlcy4KLQotL3Byb2Mvc3lzL25ldC9jb3JlIC0gTmV0d29yayBjb3JlIG9wdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXJtZW1fZGVmYXVsdAotLS0tLS0tLS0tLS0tCi0KLVRoZSBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBpbiBieXRlcy4KLQotcm1lbV9tYXgKLS0tLS0tLS0tCi0KLVRoZSBtYXhpbXVtIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplIGluIGJ5dGVzLgotCi13bWVtX2RlZmF1bHQKLS0tLS0tLS0tLS0tLQotCi1UaGUgZGVmYXVsdCBzZXR0aW5nIChpbiBieXRlcykgb2YgdGhlIHNvY2tldCBzZW5kIGJ1ZmZlci4KLQotd21lbV9tYXgKLS0tLS0tLS0tCi0KLVRoZSBtYXhpbXVtIHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplIGluIGJ5dGVzLgotCi1tZXNzYWdlX2J1cnN0IGFuZCBtZXNzYWdlX2Nvc3QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVzZSBwYXJhbWV0ZXJzICBhcmUgdXNlZCB0byBsaW1pdCB0aGUgd2FybmluZyBtZXNzYWdlcyB3cml0dGVuIHRvIHRoZSBrZXJuZWwKLWxvZyBmcm9tICB0aGUgIG5ldHdvcmtpbmcgIGNvZGUuICBUaGV5ICBlbmZvcmNlICBhICByYXRlICBsaW1pdCAgdG8gIG1ha2UgIGEKLWRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFjayAgaW1wb3NzaWJsZS4gQSBoaWdoZXIgbWVzc2FnZV9jb3N0IGZhY3RvciwgcmVzdWx0cyBpbgotZmV3ZXIgbWVzc2FnZXMgdGhhdCB3aWxsIGJlIHdyaXR0ZW4uIE1lc3NhZ2VfYnVyc3QgY29udHJvbHMgd2hlbiBtZXNzYWdlcyB3aWxsCi1iZSBkcm9wcGVkLiAgVGhlICBkZWZhdWx0ICBzZXR0aW5ncyAgbGltaXQgIHdhcm5pbmcgbWVzc2FnZXMgdG8gb25lIGV2ZXJ5IGZpdmUKLXNlY29uZHMuCi0KLXdhcm5pbmdzCi0tLS0tLS0tLQotCi1UaGlzIGNvbnRyb2xzIGNvbnNvbGUgbWVzc2FnZXMgZnJvbSB0aGUgbmV0d29ya2luZyBzdGFjayB0aGF0IGNhbiBvY2N1ciBiZWNhdXNlCi1vZiBwcm9ibGVtcyBvbiB0aGUgbmV0d29yayBsaWtlIGR1cGxpY2F0ZSBhZGRyZXNzIG9yIGJhZCBjaGVja3N1bXMuIE5vcm1hbGx5LAotdGhpcyBzaG91bGQgYmUgZW5hYmxlZCwgYnV0IGlmIHRoZSBwcm9ibGVtIHBlcnNpc3RzIHRoZSBtZXNzYWdlcyBjYW4gYmUKLWRpc2FibGVkLgotCi1uZXRkZXZfYnVkZ2V0Ci0tLS0tLS0tLS0tLS0tCi0KLU1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdGFrZW4gZnJvbSBhbGwgaW50ZXJmYWNlcyBpbiBvbmUgcG9sbGluZyBjeWNsZSAoTkFQSQotcG9sbCkuIEluIG9uZSBwb2xsaW5nIGN5Y2xlIGludGVyZmFjZXMgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgdG8gcG9sbGluZyBhcmUKLXByb2JlZCBpbiBhIHJvdW5kLXJvYmluIG1hbm5lci4gVGhlIGxpbWl0IG9mIHBhY2tldHMgaW4gb25lIHN1Y2ggcHJvYmUgY2FuIGJlCi1zZXQgcGVyLWRldmljZSB2aWEgc3lzZnMgY2xhc3MvbmV0LzxkZXZpY2U+L3dlaWdodCAuCi0KLW5ldGRldl9tYXhfYmFja2xvZwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1heGltdW0gbnVtYmVyICBvZiAgcGFja2V0cywgIHF1ZXVlZCAgb24gIHRoZSAgSU5QVVQgIHNpZGUsIHdoZW4gdGhlIGludGVyZmFjZQotcmVjZWl2ZXMgcGFja2V0cyBmYXN0ZXIgdGhhbiBrZXJuZWwgY2FuIHByb2Nlc3MgdGhlbS4KLQotb3B0bWVtX21heAotLS0tLS0tLS0tLQotCi1NYXhpbXVtIGFuY2lsbGFyeSBidWZmZXIgc2l6ZSBhbGxvd2VkIHBlciBzb2NrZXQuIEFuY2lsbGFyeSBkYXRhIGlzIGEgc2VxdWVuY2UKLW9mIHN0cnVjdCBjbXNnaGRyIHN0cnVjdHVyZXMgd2l0aCBhcHBlbmRlZCBkYXRhLgotCi0vcHJvYy9zeXMvbmV0L3VuaXggLSBQYXJhbWV0ZXJzIGZvciBVbml4IGRvbWFpbiBzb2NrZXRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGFyZSAgb25seSAgdHdvICBmaWxlcyAgaW4gdGhpcyBzdWJkaXJlY3RvcnkuIFRoZXkgY29udHJvbCB0aGUgZGVsYXlzIGZvcgotZGVsZXRpbmcgYW5kIGRlc3Ryb3lpbmcgc29ja2V0IGRlc2NyaXB0b3JzLgotCi0yLjggL3Byb2Mvc3lzL25ldC9pcHY0IC0gSVBWNCBzZXR0aW5ncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSVAgdmVyc2lvbiAgNCAgaXMgIHN0aWxsIHRoZSBtb3N0IHVzZWQgcHJvdG9jb2wgaW4gVW5peCBuZXR3b3JraW5nLiBJdCB3aWxsIGJlCi1yZXBsYWNlZCBieSAgSVAgdmVyc2lvbiA2IGluIHRoZSBuZXh0IGNvdXBsZSBvZiB5ZWFycywgYnV0IGZvciB0aGUgbW9tZW50IGl0J3MKLXRoZSBkZSAgZmFjdG8gIHN0YW5kYXJkICBmb3IgIHRoZSAgaW50ZXJuZXQgIGFuZCAgaXMgIHVzZWQgIGluIG1vc3QgbmV0d29ya2luZwotZW52aXJvbm1lbnRzIGFyb3VuZCAgdGhlICB3b3JsZC4gIEJlY2F1c2UgIG9mIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgcHJvdG9jb2wsCi13ZSdsbCBoYXZlIGEgZGVlcGVyIGxvb2sgaW50byB0aGUgc3VidHJlZSBjb250cm9sbGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIElQdjQKLXN1YnN5c3RlbSBvZiB0aGUgTGludXgga2VybmVsLgotCi1MZXQncyBzdGFydCB3aXRoIHRoZSBlbnRyaWVzIGluIC9wcm9jL3N5cy9uZXQvaXB2NC4KLQotSUNNUCBzZXR0aW5ncwotLS0tLS0tLS0tLS0tLQotCi1pY21wX2VjaG9faWdub3JlX2FsbCBhbmQgaWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVR1cm4gb24gKDEpIG9yIG9mZiAoMCksIGlmIHRoZSBrZXJuZWwgc2hvdWxkIGlnbm9yZSBhbGwgSUNNUCBFQ0hPIHJlcXVlc3RzLCBvcgotanVzdCB0aG9zZSB0byBicm9hZGNhc3QgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMuCi0KLVBsZWFzZSBub3RlIHRoYXQgaWYgeW91IGFjY2VwdCBJQ01QIGVjaG8gcmVxdWVzdHMgd2l0aCBhIGJyb2FkY2FzdC9tdWx0aVwtY2FzdAotZGVzdGluYXRpb24gYWRkcmVzcyAgeW91ciAgbmV0d29yayAgbWF5ICBiZSAgdXNlZCBhcyBhbiBleHBsb2RlciBmb3IgZGVuaWFsIG9mCi1zZXJ2aWNlIHBhY2tldCBmbG9vZGluZyBhdHRhY2tzIHRvIG90aGVyIGhvc3RzLgotCi1pY21wX2Rlc3R1bnJlYWNoX3JhdGUsIGljbXBfZWNob3JlcGx5X3JhdGUsIGljbXBfcGFyYW1wcm9iX3JhdGUgYW5kIGljbXBfdGltZWV4ZWVkX3JhdGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TZXRzIGxpbWl0cyAgZm9yICBzZW5kaW5nICBJQ01QICBwYWNrZXRzICB0byBzcGVjaWZpYyB0YXJnZXRzLiBBIHZhbHVlIG9mIHplcm8KLWRpc2FibGVzIGFsbCAgbGltaXRpbmcuICBBbnkgIHBvc2l0aXZlICB2YWx1ZSBzZXRzIHRoZSBtYXhpbXVtIHBhY2thZ2UgcmF0ZSBpbgotaHVuZHJlZHRoIG9mIGEgc2Vjb25kIChvbiBJbnRlbCBzeXN0ZW1zKS4KLQotSVAgc2V0dGluZ3MKLS0tLS0tLS0tLS0tCi0KLWlwX2F1dG9jb25maWcKLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBudW1iZXIgb25lIGlmIHRoZSBob3N0IHJlY2VpdmVkIGl0cyBJUCBjb25maWd1cmF0aW9uIGJ5Ci1SQVJQLCBCT09UUCwgREhDUCBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLiBPdGhlcndpc2UgaXQgaXMgemVyby4KLQotaXBfZGVmYXVsdF90dGwKLS0tLS0tLS0tLS0tLS0tCi0KLVRUTCAoVGltZSAgVG8gIExpdmUpIGZvciBJUHY0IGludGVyZmFjZXMuIFRoaXMgaXMgc2ltcGx5IHRoZSBtYXhpbXVtIG51bWJlciBvZgotaG9wcyBhIHBhY2tldCBtYXkgdHJhdmVsLgotCi1pcF9keW5hZGRyCi0tLS0tLS0tLS0tCi0KLUVuYWJsZSBkeW5hbWljICBzb2NrZXQgIGFkZHJlc3MgcmV3cml0aW5nIG9uIGludGVyZmFjZSBhZGRyZXNzIGNoYW5nZS4gVGhpcyBpcwotdXNlZnVsIGZvciBkaWFsdXAgaW50ZXJmYWNlIHdpdGggY2hhbmdpbmcgSVAgYWRkcmVzc2VzLgotCi1pcF9mb3J3YXJkCi0tLS0tLS0tLS0tCi0KLUVuYWJsZSBvciAgZGlzYWJsZSBmb3J3YXJkaW5nIG9mIElQIHBhY2thZ2VzIGJldHdlZW4gaW50ZXJmYWNlcy4gQ2hhbmdpbmcgdGhpcwotdmFsdWUgcmVzZXRzICBhbGwgb3RoZXIgcGFyYW1ldGVycyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4gVGhleSBkaWZmZXIgaWYgdGhlCi1rZXJuZWwgaXMgY29uZmlndXJlZCBhcyBob3N0IG9yIHJvdXRlci4KLQotaXBfbG9jYWxfcG9ydF9yYW5nZQotLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SYW5nZSBvZiAgcG9ydHMgIHVzZWQgIGJ5ICBUQ1AgIGFuZCBVRFAgdG8gY2hvb3NlIHRoZSBsb2NhbCBwb3J0LiBDb250YWlucyB0d28KLW51bWJlcnMsIHRoZSAgZmlyc3QgIG51bWJlciAgaXMgdGhlIGxvd2VzdCBwb3J0LCB0aGUgc2Vjb25kIG51bWJlciB0aGUgaGlnaGVzdAotbG9jYWwgcG9ydC4gIERlZmF1bHQgIGlzICAxMDI0LTQ5OTkuICBTaG91bGQgIGJlICBjaGFuZ2VkICB0byAgMzI3NjgtNjEwMDAgZm9yCi1oaWdoLXVzYWdlIHN5c3RlbXMuCi0KLWlwX25vX3BtdHVfZGlzYwotLS0tLS0tLS0tLS0tLS0tCi0KLUdsb2JhbCBzd2l0Y2ggIHRvICB0dXJuICBwYXRoICBNVFUgIGRpc2NvdmVyeSBvZmYuIEl0IGNhbiBhbHNvIGJlIHNldCBvbiBhIHBlcgotc29ja2V0IGJhc2lzIGJ5IHRoZSBhcHBsaWNhdGlvbnMgb3Igb24gYSBwZXIgcm91dGUgYmFzaXMuCi0KLWlwX21hc3FfZGVidWcKLS0tLS0tLS0tLS0tLS0KLQotRW5hYmxlL2Rpc2FibGUgZGVidWdnaW5nIG9mIElQIG1hc3F1ZXJhZGluZy4KLQotSVAgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pcGZyYWdfaGlnaF90cmFzaCBhbmQgaXBmcmFnX2xvd190cmFzaAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWF4aW11bSBtZW1vcnkgIHVzZWQgdG8gcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMuIFdoZW4gaXBmcmFnX2hpZ2hfdGhyZXNoIGJ5dGVzCi1vZiBtZW1vcnkgIGlzICBhbGxvY2F0ZWQgIGZvciAgdGhpcyAgcHVycG9zZSwgIHRoZSAgZnJhZ21lbnQgaGFuZGxlciB3aWxsIHRvc3MKLXBhY2tldHMgdW50aWwgaXBmcmFnX2xvd190aHJlc2ggaXMgcmVhY2hlZC4KLQotaXBmcmFnX3RpbWUKLS0tLS0tLS0tLS0tCi0KLVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQIGZyYWdtZW50IGluIG1lbW9yeS4KLQotVENQIHNldHRpbmdzCi0tLS0tLS0tLS0tLS0KLQotdGNwX2VjbgotLS0tLS0tLQotCi1UaGlzIGZpbGUgY29udHJvbHMgdGhlIHVzZSBvZiB0aGUgRUNOIGJpdCBpbiB0aGUgSVB2NCBoZWFkZXJzLiBUaGlzIGlzIGEgbmV3Ci1mZWF0dXJlIGFib3V0IEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uLCBidXQgc29tZSByb3V0ZXJzIGFuZCBmaXJld2FsbHMKLWJsb2NrIHRyYWZmaWMgdGhhdCBoYXMgdGhpcyBiaXQgc2V0LCBzbyBpdCBjb3VsZCBiZSBuZWNlc3NhcnkgdG8gZWNobyAwIHRvCi0vcHJvYy9zeXMvbmV0L2lwdjQvdGNwX2VjbiBpZiB5b3Ugd2FudCB0byB0YWxrIHRvIHRoZXNlIHNpdGVzLiBGb3IgbW9yZSBpbmZvCi15b3UgY291bGQgcmVhZCBSRkMyNDgxLgotCi10Y3BfcmV0cmFuc19jb2xsYXBzZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQnVnLXRvLWJ1ZyBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBicm9rZW4gcHJpbnRlcnMuIE9uIHJldHJhbnNtaXQsIHRyeSB0byBzZW5kCi1sYXJnZXIgcGFja2V0cyB0byB3b3JrIGFyb3VuZCBidWdzIGluIGNlcnRhaW4gVENQIHN0YWNrcy4gQ2FuIGJlIHR1cm5lZCBvZmYgYnkKLXNldHRpbmcgaXQgdG8gemVyby4KLQotdGNwX2tlZXBhbGl2ZV9wcm9iZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU51bWJlciBvZiAga2VlcCAgYWxpdmUgIHByb2JlcyAgVENQICBzZW5kcyAgb3V0LCAgdW50aWwgIGl0ICBkZWNpZGVzICB0aGF0IHRoZQotY29ubmVjdGlvbiBpcyBicm9rZW4uCi0KLXRjcF9rZWVwYWxpdmVfdGltZQotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhvdyBvZnRlbiAgVENQICBzZW5kcyBvdXQga2VlcCBhbGl2ZSBtZXNzYWdlcywgd2hlbiBrZWVwIGFsaXZlIGlzIGVuYWJsZWQuIFRoZQotZGVmYXVsdCBpcyAyIGhvdXJzLgotCi10Y3Bfc3luX3JldHJpZXMKLS0tLS0tLS0tLS0tLS0tLQotCi1OdW1iZXIgb2YgIHRpbWVzICBpbml0aWFsICBTWU5zICBmb3IgIGEgIFRDUCAgY29ubmVjdGlvbiAgYXR0ZW1wdCAgd2lsbCAgYmUKLXJldHJhbnNtaXR0ZWQuIFNob3VsZCAgbm90ICBiZSAgaGlnaGVyICB0aGFuIDI1NS4gVGhpcyBpcyBvbmx5IHRoZSB0aW1lb3V0IGZvcgotb3V0Z29pbmcgY29ubmVjdGlvbnMsICBmb3IgIGluY29taW5nICBjb25uZWN0aW9ucyB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXRzIGlzCi1kZWZpbmVkIGJ5IHRjcF9yZXRyaWVzMS4KLQotdGNwX3NhY2sKLS0tLS0tLS0tCi0KLUVuYWJsZSBzZWxlY3QgYWNrbm93bGVkZ21lbnRzIGFmdGVyIFJGQzIwMTguCi0KLXRjcF90aW1lc3RhbXBzCi0tLS0tLS0tLS0tLS0tLQotCi1FbmFibGUgdGltZXN0YW1wcyBhcyBkZWZpbmVkIGluIFJGQzEzMjMuCi0KLXRjcF9zdGR1cmcKLS0tLS0tLS0tLS0KLQotRW5hYmxlIHRoZSAgc3RyaWN0ICBSRkM3OTMgaW50ZXJwcmV0YXRpb24gb2YgdGhlIFRDUCB1cmdlbnQgcG9pbnRlciBmaWVsZC4gVGhlCi1kZWZhdWx0IGlzICB0byAgdXNlICB0aGUgIEJTRCAgY29tcGF0aWJsZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgdXJnZW50IHBvaW50ZXIKLXBvaW50aW5nIHRvIHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSB1cmdlbnQgZGF0YS4gVGhlIFJGQzc5MyBpbnRlcnByZXRhdGlvbiBpcwotdG8gaGF2ZSAgaXQgIHBvaW50ICB0byAgdGhlIGxhc3QgYnl0ZSBvZiB1cmdlbnQgZGF0YS4gRW5hYmxpbmcgdGhpcyBvcHRpb24gbWF5Ci1sZWFkIHRvIGludGVyb3BlcmFiaWxpdHkgcHJvYmxlbXMuIERpc2FibGVkIGJ5IGRlZmF1bHQuCi0KLXRjcF9zeW5jb29raWVzCi0tLS0tLS0tLS0tLS0tLQotCi1Pbmx5IHZhbGlkICB3aGVuICB0aGUgIGtlcm5lbCAgd2FzICBjb21waWxlZCAgd2l0aCBDT05GSUdfU1lOQ09PS0lFUy4gU2VuZCBvdXQKLXN5bmNvb2tpZXMgd2hlbiAgdGhlICBzeW4gYmFja2xvZyBxdWV1ZSBvZiBhIHNvY2tldCBvdmVyZmxvd3MuIFRoaXMgaXMgdG8gd2FyZAotb2ZmIHRoZSBjb21tb24gJ3N5biBmbG9vZCBhdHRhY2snLiBEaXNhYmxlZCBieSBkZWZhdWx0LgotCi1Ob3RlIHRoYXQgIHRoZSAgY29uY2VwdCAgb2YgYSBzb2NrZXQgYmFja2xvZyBpcyBhYmFuZG9uZWQuIFRoaXMgbWVhbnMgdGhlIHBlZXIKLW1heSBub3QgIHJlY2VpdmUgIHJlbGlhYmxlICBlcnJvciAgbWVzc2FnZXMgIGZyb20gIGFuICBvdmVyIGxvYWRlZCBzZXJ2ZXIgd2l0aAotc3luY29va2llcyBlbmFibGVkLgotCi10Y3Bfd2luZG93X3NjYWxpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1FbmFibGUgd2luZG93IHNjYWxpbmcgYXMgZGVmaW5lZCBpbiBSRkMxMzIzLgotCi10Y3BfZmluX3RpbWVvdXQKLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgbGVuZ3RoICBvZiAgdGltZSAgaW4gIHNlY29uZHMgIGl0ICB0YWtlcyB0byByZWNlaXZlIGEgZmluYWwgRklOIGJlZm9yZSB0aGUKLXNvY2tldCBpcyAgYWx3YXlzICBjbG9zZWQuICBUaGlzICBpcyAgc3RyaWN0bHkgIGEgIHZpb2xhdGlvbiAgb2YgIHRoZSAgVENQCi1zcGVjaWZpY2F0aW9uLCBidXQgcmVxdWlyZWQgdG8gcHJldmVudCBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzLgotCi10Y3BfbWF4X2thX3Byb2JlcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotSW5kaWNhdGVzIGhvdyAgbWFueSAga2VlcCBhbGl2ZSBwcm9iZXMgYXJlIHNlbnQgcGVyIHNsb3cgdGltZXIgcnVuLiBTaG91bGQgbm90Ci1iZSBzZXQgdG9vIGhpZ2ggdG8gcHJldmVudCBidXJzdHMuCi0KLXRjcF9tYXhfc3luX2JhY2tsb2cKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTGVuZ3RoIG9mICB0aGUgcGVyIHNvY2tldCBiYWNrbG9nIHF1ZXVlLiBTaW5jZSBMaW51eCAyLjIgdGhlIGJhY2tsb2cgc3BlY2lmaWVkCi1pbiBsaXN0ZW4oMikgIG9ubHkgIHNwZWNpZmllcyAgdGhlICBsZW5ndGggIG9mICB0aGUgIGJhY2tsb2cgIHF1ZXVlIG9mIGFscmVhZHkKLWVzdGFibGlzaGVkIHNvY2tldHMuIFdoZW4gbW9yZSBjb25uZWN0aW9uIHJlcXVlc3RzIGFycml2ZSBMaW51eCBzdGFydHMgdG8gZHJvcAotcGFja2V0cy4gV2hlbiAgc3luY29va2llcyAgYXJlICBlbmFibGVkIHRoZSBwYWNrZXRzIGFyZSBzdGlsbCBhbnN3ZXJlZCBhbmQgdGhlCi1tYXhpbXVtIHF1ZXVlIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuCi0KLXRjcF9yZXRyaWVzMQotLS0tLS0tLS0tLS0tCi0KLURlZmluZXMgaG93ICBvZnRlbiAgYW4gIGFuc3dlciAgdG8gIGEgIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaXMgcmV0cmFuc21pdHRlZAotYmVmb3JlIGdpdmluZyB1cC4KLQotdGNwX3JldHJpZXMyCi0tLS0tLS0tLS0tLS0KLQotRGVmaW5lcyBob3cgb2Z0ZW4gYSBUQ1AgcGFja2V0IGlzIHJldHJhbnNtaXR0ZWQgYmVmb3JlIGdpdmluZyB1cC4KLQotSW50ZXJmYWNlIHNwZWNpZmljIHNldHRpbmdzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSW4gdGhlIGRpcmVjdG9yeSAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZiB5b3UnbGwgZmluZCBvbmUgc3ViZGlyZWN0b3J5IGZvciBlYWNoCi1pbnRlcmZhY2UgdGhlICBzeXN0ZW0gIGtub3dzIGFib3V0IGFuZCBvbmUgZGlyZWN0b3J5IGNhbGxzIGFsbC4gQ2hhbmdlcyBpbiB0aGUKLWFsbCBzdWJkaXJlY3RvcnkgIGFmZmVjdCAgYWxsICBpbnRlcmZhY2VzLCAgd2hlcmVhcyAgY2hhbmdlcyAgaW4gIHRoZSAgb3RoZXIKLXN1YmRpcmVjdG9yaWVzIGFmZmVjdCAgb25seSAgb25lICBpbnRlcmZhY2UuICBBbGwgIGRpcmVjdG9yaWVzICBoYXZlICB0aGUgc2FtZQotZW50cmllczoKLQotYWNjZXB0X3JlZGlyZWN0cwotLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHN3aXRjaCAgZGVjaWRlcyAgaWYgdGhlIGtlcm5lbCBhY2NlcHRzIElDTVAgcmVkaXJlY3QgbWVzc2FnZXMgb3Igbm90LiBUaGUKLWRlZmF1bHQgaXMgJ3llcycgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGZvciBhIHJlZ3VsYXIgaG9zdCBhbmQgJ25vJyBmb3IgYQotcm91dGVyIGNvbmZpZ3VyYXRpb24uCi0KLWFjY2VwdF9zb3VyY2Vfcm91dGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU2hvdWxkIHNvdXJjZSAgcm91dGVkICBwYWNrYWdlcyAgYmUgIGFjY2VwdGVkICBvciAgZGVjbGluZWQuICBUaGUgIGRlZmF1bHQgIGlzCi1kZXBlbmRlbnQgb24gIHRoZSAga2VybmVsICBjb25maWd1cmF0aW9uLiAgSXQncyAneWVzJyBmb3Igcm91dGVycyBhbmQgJ25vJyBmb3IKLWhvc3RzLgotCi1ib290cF9yZWxheQotfn5+fn5+fn5+fn4KLQotQWNjZXB0IHBhY2tldHMgIHdpdGggc291cmNlIGFkZHJlc3MgMC5iLmMuZCB3aXRoIGRlc3RpbmF0aW9ucyBub3QgdG8gdGhpcyBob3N0Ci1hcyBsb2NhbCBvbmVzLiBJdCBpcyBzdXBwb3NlZCB0aGF0IGEgQk9PVFAgcmVsYXkgZGFlbW9uIHdpbGwgY2F0Y2ggYW5kIGZvcndhcmQKLXN1Y2ggcGFja2V0cy4KLQotVGhlIGRlZmF1bHQgIGlzICAwLCAgc2luY2UgdGhpcyBmZWF0dXJlIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKGtlcm5lbCB2ZXJzaW9uCi0yLjIuMTIpLgotCi1mb3J3YXJkaW5nCi0tLS0tLS0tLS0tCi0KLUVuYWJsZSBvciBkaXNhYmxlIElQIGZvcndhcmRpbmcgb24gdGhpcyBpbnRlcmZhY2UuCi0KLWxvZ19tYXJ0aWFucwotLS0tLS0tLS0tLS0tCi0KLUxvZyBwYWNrZXRzIHdpdGggc291cmNlIGFkZHJlc3NlcyB3aXRoIG5vIGtub3duIHJvdXRlIHRvIGtlcm5lbCBsb2cuCi0KLW1jX2ZvcndhcmRpbmcKLS0tLS0tLS0tLS0tLS0KLQotRG8gbXVsdGljYXN0IHJvdXRpbmcuIFRoZSBrZXJuZWwgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBDT05GSUdfTVJPVVRFIGFuZCBhCi1tdWx0aWNhc3Qgcm91dGluZyBkYWVtb24gaXMgcmVxdWlyZWQuCi0KLXByb3h5X2FycAotLS0tLS0tLS0tCi0KLURvZXMgKDEpIG9yIGRvZXMgbm90ICgwKSBwZXJmb3JtIHByb3h5IEFSUC4KLQotcnBfZmlsdGVyCi0tLS0tLS0tLS0KLQotSW50ZWdlciB2YWx1ZSBkZXRlcm1pbmVzIGlmIGEgc291cmNlIHZhbGlkYXRpb24gc2hvdWxkIGJlIG1hZGUuIDEgbWVhbnMgeWVzLCAwCi1tZWFucyBuby4gIERpc2FibGVkIGJ5IGRlZmF1bHQsIGJ1dCBsb2NhbC9icm9hZGNhc3QgYWRkcmVzcyBzcG9vZmluZyBpcyBhbHdheXMKLW9uLgotCi1JZiB5b3UgIHNldCB0aGlzIHRvIDEgb24gYSByb3V0ZXIgdGhhdCBpcyB0aGUgb25seSBjb25uZWN0aW9uIGZvciBhIG5ldHdvcmsgdG8KLXRoZSBuZXQsICBpdCAgd2lsbCAgcHJldmVudCAgc3Bvb2ZpbmcgIGF0dGFja3MgIGFnYWluc3QgeW91ciBpbnRlcm5hbCBuZXR3b3JrcwotKGV4dGVybmFsIGFkZHJlc3NlcyAgY2FuICBzdGlsbCAgYmUgIHNwb29mZWQpLCB3aXRob3V0IHRoZSBuZWVkIGZvciBhZGRpdGlvbmFsCi1maXJld2FsbCBydWxlcy4KLQotc2VjdXJlX3JlZGlyZWN0cwotLS0tLS0tLS0tLS0tLS0tLQotCi1BY2NlcHQgSUNNUCAgcmVkaXJlY3QgIG1lc3NhZ2VzICBvbmx5ICBmb3IgZ2F0ZXdheXMsIGxpc3RlZCBpbiBkZWZhdWx0IGdhdGV3YXkKLWxpc3QuIEVuYWJsZWQgYnkgZGVmYXVsdC4KLQotc2hhcmVkX21lZGlhCi0tLS0tLS0tLS0tLS0KLQotSWYgaXQgIGlzICBub3QgIHNldCAgdGhlIGtlcm5lbCBkb2VzIG5vdCBhc3N1bWUgdGhhdCBkaWZmZXJlbnQgc3VibmV0cyBvbiB0aGlzCi1kZXZpY2UgY2FuIGNvbW11bmljYXRlIGRpcmVjdGx5LiBEZWZhdWx0IHNldHRpbmcgaXMgJ3llcycuCi0KLXNlbmRfcmVkaXJlY3RzCi0tLS0tLS0tLS0tLS0tLQotCi1EZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2VuZCBJQ01QIHJlZGlyZWN0cyB0byBvdGhlciBob3N0cy4KLQotUm91dGluZyBzZXR0aW5ncwotLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgZGlyZWN0b3J5ICAvcHJvYy9zeXMvbmV0L2lwdjQvcm91dGUgIGNvbnRhaW5zICBzZXZlcmFsICBmaWxlICB0byAgY29udHJvbAotcm91dGluZyBpc3N1ZXMuCi0KLWVycm9yX2J1cnN0IGFuZCBlcnJvcl9jb3N0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVzZSAgcGFyYW1ldGVycyAgYXJlIHVzZWQgdG8gbGltaXQgaG93IG1hbnkgSUNNUCBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSB0byAKLXNlbmQgIGZyb20gIHRoZSAgaG9zdCAgaW4gcXVlc3Rpb24uIElDTVAgZGVzdGluYXRpb24gdW5yZWFjaGFibGUgbWVzc2FnZXMgYXJlIAotc2VudCAgd2hlbiAgd2UgIGNhbm5vdCByZWFjaCAgdGhlIG5leHQgaG9wIHdoaWxlIHRyeWluZyB0byB0cmFuc21pdCBhIHBhY2tldC4gCi1JdCAgd2lsbCBhbHNvIHByaW50IHNvbWUgZXJyb3IgbWVzc2FnZXMgdG8ga2VybmVsIGxvZ3MgaWYgc29tZW9uZSBpcyBpZ25vcmluZyAKLW91ciAgIElDTVAgIHJlZGlyZWN0cy4gIFRoZSAgaGlnaGVyICB0aGUgIGVycm9yX2Nvc3QgIGZhY3RvciAgaXMsICB0aGUgIGZld2VyIAotZGVzdGluYXRpb24gIHVucmVhY2hhYmxlICBhbmQgZXJyb3IgbWVzc2FnZXMgd2lsbCBiZSBsZXQgdGhyb3VnaC4gRXJyb3JfYnVyc3QgCi1jb250cm9scyAgd2hlbiAgZGVzdGluYXRpb24gIHVucmVhY2hhYmxlICBtZXNzYWdlcyBhbmQgZXJyb3IgbWVzc2FnZXMgd2lsbCBiZQotZHJvcHBlZC4gVGhlIGRlZmF1bHQgc2V0dGluZ3MgbGltaXQgd2FybmluZyBtZXNzYWdlcyB0byBmaXZlIGV2ZXJ5IHNlY29uZC4KLQotZmx1c2gKLS0tLS0tCi0KLVdyaXRpbmcgdG8gdGhpcyBmaWxlIHJlc3VsdHMgaW4gYSBmbHVzaCBvZiB0aGUgcm91dGluZyBjYWNoZS4KLQotZ2NfZWxhc3RpY2l0eSwgZ2NfaW50ZXJ2YWwsIGdjX21pbl9pbnRlcnZhbF9tcywgZ2NfdGltZW91dCwgZ2NfdGhyZXNoCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVmFsdWVzIHRvICBjb250cm9sICB0aGUgIGZyZXF1ZW5jeSAgYW5kICBiZWhhdmlvciAgb2YgIHRoZSAgZ2FyYmFnZSBjb2xsZWN0aW9uCi1hbGdvcml0aG0gZm9yIHRoZSByb3V0aW5nIGNhY2hlLiBnY19taW5faW50ZXJ2YWwgaXMgZGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQKLWJ5IGdjX21pbl9pbnRlcnZhbF9tcy4KLQotCi1tYXhfc2l6ZQotLS0tLS0tLS0KLQotTWF4aW11bSBzaXplICBvZiAgdGhlIHJvdXRpbmcgY2FjaGUuIE9sZCBlbnRyaWVzIHdpbGwgYmUgcHVyZ2VkIG9uY2UgdGhlIGNhY2hlCi1yZWFjaGVkIGhhcyB0aGlzIHNpemUuCi0KLXJlZGlyZWN0X2xvYWQsIHJlZGlyZWN0X251bWJlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZhY3RvcnMgd2hpY2ggIGRldGVybWluZSAgaWYgIG1vcmUgSUNQTSByZWRpcmVjdHMgc2hvdWxkIGJlIHNlbnQgdG8gYSBzcGVjaWZpYwotaG9zdC4gTm8gIHJlZGlyZWN0cyAgd2lsbCBiZSBzZW50IG9uY2UgdGhlIGxvYWQgbGltaXQgb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mCi1yZWRpcmVjdHMgaGFzIGJlZW4gcmVhY2hlZC4KLQotcmVkaXJlY3Rfc2lsZW5jZQotLS0tLS0tLS0tLS0tLS0tLQotCi1UaW1lb3V0IGZvciByZWRpcmVjdHMuIEFmdGVyIHRoaXMgcGVyaW9kIHJlZGlyZWN0cyB3aWxsIGJlIHNlbnQgYWdhaW4sIGV2ZW4gaWYKLXRoaXMgaGFzIGJlZW4gc3RvcHBlZCwgYmVjYXVzZSB0aGUgbG9hZCBvciBudW1iZXIgbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4KLQotTmV0d29yayBOZWlnaGJvciBoYW5kbGluZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TZXR0aW5ncyBhYm91dCBob3cgdG8gaGFuZGxlIGNvbm5lY3Rpb25zIHdpdGggZGlyZWN0IG5laWdoYm9ycyAobm9kZXMgYXR0YWNoZWQKLXRvIHRoZSBzYW1lIGxpbmspIGNhbiBiZSBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IC9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC4KLQotQXMgd2UgIHNhdyAgaXQgIGluICB0aGUgIGNvbmYgZGlyZWN0b3J5LCB0aGVyZSBpcyBhIGRlZmF1bHQgc3ViZGlyZWN0b3J5IHdoaWNoCi1ob2xkcyB0aGUgIGRlZmF1bHQgIHZhbHVlcywgYW5kIG9uZSBkaXJlY3RvcnkgZm9yIGVhY2ggaW50ZXJmYWNlLiBUaGUgY29udGVudHMKLW9mIHRoZSAgZGlyZWN0b3JpZXMgIGFyZSBpZGVudGljYWwsIHdpdGggdGhlIHNpbmdsZSBleGNlcHRpb24gdGhhdCB0aGUgZGVmYXVsdAotc2V0dGluZ3MgY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gc2V0IGdhcmJhZ2UgY29sbGVjdGlvbiBwYXJhbWV0ZXJzLgotCi1JbiB0aGUgaW50ZXJmYWNlIGRpcmVjdG9yaWVzIHlvdSdsbCBmaW5kIHRoZSBmb2xsb3dpbmcgZW50cmllczoKLQotYmFzZV9yZWFjaGFibGVfdGltZSwgYmFzZV9yZWFjaGFibGVfdGltZV9tcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BIGJhc2UgIHZhbHVlICB1c2VkIGZvciBjb21wdXRpbmcgdGhlIHJhbmRvbSByZWFjaGFibGUgdGltZSB2YWx1ZSBhcyBzcGVjaWZpZWQKLWluIFJGQzI0NjEuCi0KLUV4cHJlc3Npb24gb2YgYmFzZV9yZWFjaGFibGVfdGltZSwgd2hpY2ggaXMgZGVwcmVjYXRlZCwgaXMgaW4gc2Vjb25kcy4KLUV4cHJlc3Npb24gb2YgYmFzZV9yZWFjaGFibGVfdGltZV9tcyBpcyBpbiBtaWxsaXNlY29uZHMuCi0KLXJldHJhbnNfdGltZSwgcmV0cmFuc190aW1lX21zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgdGltZSBiZXR3ZWVuIHJldHJhbnNtaXR0ZWQgTmVpZ2hib3IgU29saWNpdGF0aW9uIG1lc3NhZ2VzLgotVXNlZCBmb3IgYWRkcmVzcyByZXNvbHV0aW9uIGFuZCB0byBkZXRlcm1pbmUgaWYgYSBuZWlnaGJvciBpcwotdW5yZWFjaGFibGUuCi0KLUV4cHJlc3Npb24gb2YgcmV0cmFuc190aW1lLCB3aGljaCBpcyBkZXByZWNhdGVkLCBpcyBpbiAxLzEwMCBzZWNvbmRzIChmb3IKLUlQdjQpIG9yIGluIGppZmZpZXMgKGZvciBJUHY2KS4KLUV4cHJlc3Npb24gb2YgcmV0cmFuc190aW1lX21zIGlzIGluIG1pbGxpc2Vjb25kcy4KLQotdW5yZXNfcWxlbgotLS0tLS0tLS0tLQotCi1NYXhpbXVtIHF1ZXVlICBsZW5ndGggIGZvciBhIHBlbmRpbmcgYXJwIHJlcXVlc3QgLSB0aGUgbnVtYmVyIG9mIHBhY2tldHMgd2hpY2gKLWFyZSBhY2NlcHRlZCBmcm9tIG90aGVyIGxheWVycyB3aGlsZSB0aGUgQVJQIGFkZHJlc3MgaXMgc3RpbGwgcmVzb2x2ZWQuCi0KLWFueWNhc3RfZGVsYXkKLS0tLS0tLS0tLS0tLS0KLQotTWF4aW11bSBmb3IgIHJhbmRvbSAgZGVsYXkgIG9mICBhbnN3ZXJzICB0byAgbmVpZ2hib3Igc29saWNpdGF0aW9uIG1lc3NhZ2VzIGluCi1qaWZmaWVzICgxLzEwMCAgc2VjKS4gTm90IHlldCBpbXBsZW1lbnRlZCAoTGludXggZG9lcyBub3QgaGF2ZSBhbnljYXN0IHN1cHBvcnQKLXlldCkuCi0KLXVjYXN0X3NvbGljaXQKLS0tLS0tLS0tLS0tLS0KLQotTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBmb3IgdW5pY2FzdCBzb2xpY2l0YXRpb24uCi0KLW1jYXN0X3NvbGljaXQKLS0tLS0tLS0tLS0tLS0KLQotTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBmb3IgbXVsdGljYXN0IHNvbGljaXRhdGlvbi4KLQotZGVsYXlfZmlyc3RfcHJvYmVfdGltZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1EZWxheSBmb3IgIHRoZSAgZmlyc3QgIHRpbWUgIHByb2JlICBpZiAgdGhlICBuZWlnaGJvciAgaXMgIHJlYWNoYWJsZS4gIChzZWUKLWdjX3N0YWxlX3RpbWUpCi0KLWxvY2t0aW1lCi0tLS0tLS0tLQotCi1BbiBBUlAvbmVpZ2hib3IgIGVudHJ5ICBpcyBvbmx5IHJlcGxhY2VkIHdpdGggYSBuZXcgb25lIGlmIHRoZSBvbGQgaXMgYXQgbGVhc3QKLWxvY2t0aW1lIG9sZC4gVGhpcyBwcmV2ZW50cyBBUlAgY2FjaGUgdGhyYXNoaW5nLgotCi1wcm94eV9kZWxheQotLS0tLS0tLS0tLS0KLQotTWF4aW11bSB0aW1lICAocmVhbCAgdGltZSBpcyByYW5kb20gWzAuLnByb3h5dGltZV0pIGJlZm9yZSBhbnN3ZXJpbmcgdG8gYW4gQVJQCi1yZXF1ZXN0IGZvciAgd2hpY2ggIHdlIGhhdmUgYW4gcHJveHkgQVJQIGVudHJ5LiBJbiBzb21lIGNhc2VzLCB0aGlzIGlzIHVzZWQgdG8KLXByZXZlbnQgbmV0d29yayBmbG9vZGluZy4KLQotcHJveHlfcWxlbgotLS0tLS0tLS0tLQotCi1NYXhpbXVtIHF1ZXVlIGxlbmd0aCBvZiB0aGUgZGVsYXllZCBwcm94eSBhcnAgdGltZXIuIChzZWUgcHJveHlfZGVsYXkpLgotCi1hcHBfc29saWNpdAotLS0tLS0tLS0tLQotCi1EZXRlcm1pbmVzIHRoZSAgbnVtYmVyIG9mIHJlcXVlc3RzIHRvIHNlbmQgdG8gdGhlIHVzZXIgbGV2ZWwgQVJQIGRhZW1vbi4gVXNlIDAKLXRvIHR1cm4gb2ZmLgotCi1nY19zdGFsZV90aW1lCi0tLS0tLS0tLS0tLS0tCi0KLURldGVybWluZXMgaG93ICBvZnRlbiAgdG8gIGNoZWNrICBmb3Igc3RhbGUgQVJQIGVudHJpZXMuIEFmdGVyIGFuIEFSUCBlbnRyeSBpcwotc3RhbGUgaXQgIHdpbGwgIGJlIHJlc29sdmVkIGFnYWluICh3aGljaCBpcyB1c2VmdWwgd2hlbiBhbiBJUCBhZGRyZXNzIG1pZ3JhdGVzCi10byBhbm90aGVyICBtYWNoaW5lKS4gIFdoZW4gIHVjYXN0X3NvbGljaXQgaXMgZ3JlYXRlciB0aGFuIDAgaXQgZmlyc3QgdHJpZXMgdG8KLXNlbmQgYW4gIEFSUCAgcGFja2V0ICBkaXJlY3RseSAgdG8gIHRoZSAga25vd24gIGhvc3QgIFdoZW4gIHRoYXQgIGZhaWxzICBhbmQKLW1jYXN0X3NvbGljaXQgaXMgZ3JlYXRlciB0aGFuIDAsIGFuIEFSUCByZXF1ZXN0IGlzIGJyb2FkY2FzdGVkLgotCi0yLjkgQXBwbGV0YWxrCi0tLS0tLS0tLS0tLS0tCi0KLVRoZSAvcHJvYy9zeXMvbmV0L2FwcGxldGFsayAgZGlyZWN0b3J5ICBob2xkcyB0aGUgQXBwbGV0YWxrIGNvbmZpZ3VyYXRpb24gZGF0YQotd2hlbiBBcHBsZXRhbGsgaXMgbG9hZGVkLiBUaGUgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgYXJlOgotCi1hYXJwLWV4cGlyeS10aW1lCi0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBhbW91bnQgIG9mICB0aW1lICB3ZSBrZWVwIGFuIEFSUCBlbnRyeSBiZWZvcmUgZXhwaXJpbmcgaXQuIFVzZWQgdG8gYWdlIG91dAotb2xkIGhvc3RzLgotCi1hYXJwLXJlc29sdmUtdGltZQotLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGFtb3VudCBvZiB0aW1lIHdlIHdpbGwgc3BlbmQgdHJ5aW5nIHRvIHJlc29sdmUgYW4gQXBwbGV0YWxrIGFkZHJlc3MuCi0KLWFhcnAtcmV0cmFuc21pdC1saW1pdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBudW1iZXIgb2YgdGltZXMgd2Ugd2lsbCByZXRyYW5zbWl0IGEgcXVlcnkgYmVmb3JlIGdpdmluZyB1cC4KLQotYWFycC10aWNrLXRpbWUKLS0tLS0tLS0tLS0tLS0tCi0KLUNvbnRyb2xzIHRoZSByYXRlIGF0IHdoaWNoIGV4cGlyZXMgYXJlIGNoZWNrZWQuCi0KLVRoZSBkaXJlY3RvcnkgIC9wcm9jL25ldC9hcHBsZXRhbGsgIGhvbGRzIHRoZSBsaXN0IG9mIGFjdGl2ZSBBcHBsZXRhbGsgc29ja2V0cwotb24gYSBtYWNoaW5lLgotCi1UaGUgZmllbGRzICBpbmRpY2F0ZSAgdGhlIEREUCB0eXBlLCB0aGUgbG9jYWwgYWRkcmVzcyAoaW4gbmV0d29yazpub2RlIGZvcm1hdCkKLXRoZSByZW1vdGUgIGFkZHJlc3MsICB0aGUgIHNpemUgb2YgdGhlIHRyYW5zbWl0IHBlbmRpbmcgcXVldWUsIHRoZSBzaXplIG9mIHRoZQotcmVjZWl2ZWQgcXVldWUgIChieXRlcyB3YWl0aW5nIGZvciBhcHBsaWNhdGlvbnMgdG8gcmVhZCkgdGhlIHN0YXRlIGFuZCB0aGUgdWlkCi1vd25pbmcgdGhlIHNvY2tldC4KLQotL3Byb2MvbmV0L2F0YWxrX2lmYWNlIGxpc3RzICBhbGwgIHRoZSAgaW50ZXJmYWNlcyAgY29uZmlndXJlZCBmb3IgYXBwbGV0YWxrLkl0Ci1zaG93cyB0aGUgIG5hbWUgIG9mIHRoZSBpbnRlcmZhY2UsIGl0cyBBcHBsZXRhbGsgYWRkcmVzcywgdGhlIG5ldHdvcmsgcmFuZ2Ugb24KLXRoYXQgYWRkcmVzcyAgKG9yICBuZXR3b3JrIG51bWJlciBmb3IgcGhhc2UgMSBuZXR3b3JrcyksIGFuZCB0aGUgc3RhdHVzIG9mIHRoZQotaW50ZXJmYWNlLgotCi0vcHJvYy9uZXQvYXRhbGtfcm91dGUgbGlzdHMgIGVhY2ggIGtub3duICBuZXR3b3JrICByb3V0ZS4gIEl0IGxpc3RzIHRoZSB0YXJnZXQKLShuZXR3b3JrKSB0aGF0IHRoZSByb3V0ZSBsZWFkcyB0bywgdGhlIHJvdXRlciAobWF5IGJlIGRpcmVjdGx5IGNvbm5lY3RlZCksIHRoZQotcm91dGUgZmxhZ3MsIGFuZCB0aGUgZGV2aWNlIHRoZSByb3V0ZSBpcyB1c2luZy4KLQotMi4xMCBJUFgKLS0tLS0tLS0tCi0KLVRoZSBJUFggcHJvdG9jb2wgaGFzIG5vIHR1bmFibGUgdmFsdWVzIGluIHByb2Mvc3lzL25ldC4KLQotVGhlIElQWCAgcHJvdG9jb2wgIGRvZXMsICBob3dldmVyLCAgcHJvdmlkZSAgcHJvYy9uZXQvaXB4LiBUaGlzIGxpc3RzIGVhY2ggSVBYCi1zb2NrZXQgZ2l2aW5nICB0aGUgIGxvY2FsICBhbmQgIHJlbW90ZSAgYWRkcmVzc2VzICBpbiAgTm92ZWxsICBmb3JtYXQgKHRoYXQgaXMKLW5ldHdvcms6bm9kZTpwb3J0KS4gSW4gIGFjY29yZGFuY2UgIHdpdGggIHRoZSAgc3RyYW5nZSAgTm92ZWxsICB0cmFkaXRpb24sCi1ldmVyeXRoaW5nIGJ1dCB0aGUgcG9ydCBpcyBpbiBoZXguIE5vdF9Db25uZWN0ZWQgaXMgZGlzcGxheWVkIGZvciBzb2NrZXRzIHRoYXQKLWFyZSBub3QgIHRpZWQgdG8gYSBzcGVjaWZpYyByZW1vdGUgYWRkcmVzcy4gVGhlIFR4IGFuZCBSeCBxdWV1ZSBzaXplcyBpbmRpY2F0ZQotdGhlIG51bWJlciAgb2YgIGJ5dGVzICBwZW5kaW5nICBmb3IgIHRyYW5zbWlzc2lvbiAgYW5kICByZWNlcHRpb24uICBUaGUgIHN0YXRlCi1pbmRpY2F0ZXMgdGhlICBzdGF0ZSAgdGhlICBzb2NrZXQgIGlzICBpbiBhbmQgdGhlIHVpZCBpcyB0aGUgb3duaW5nIHVpZCBvZiB0aGUKLXNvY2tldC4KLQotVGhlIC9wcm9jL25ldC9pcHhfaW50ZXJmYWNlICBmaWxlIGxpc3RzIGFsbCBJUFggaW50ZXJmYWNlcy4gRm9yIGVhY2ggaW50ZXJmYWNlCi1pdCBnaXZlcyAgdGhlIG5ldHdvcmsgbnVtYmVyLCB0aGUgbm9kZSBudW1iZXIsIGFuZCBpbmRpY2F0ZXMgaWYgdGhlIG5ldHdvcmsgaXMKLXRoZSBwcmltYXJ5ICBuZXR3b3JrLiAgSXQgIGFsc28gIGluZGljYXRlcyAgd2hpY2ggIGRldmljZSAgaXQgIGlzIGJvdW5kIHRvIChvcgotSW50ZXJuYWwgZm9yICBpbnRlcm5hbCAgbmV0d29ya3MpICBhbmQgIHRoZSAgRnJhbWUgIFR5cGUgaWYgYXBwcm9wcmlhdGUuIExpbnV4Ci1zdXBwb3J0cyA4MDIuMywgIDgwMi4yLCAgODAyLjIgIFNOQVAgIGFuZCBESVggKEJsdWUgQm9vaykgZXRoZXJuZXQgZnJhbWluZyBmb3IKLUlQWC4KLQotVGhlIC9wcm9jL25ldC9pcHhfcm91dGUgIHRhYmxlICBob2xkcyAgYSBsaXN0IG9mIElQWCByb3V0ZXMuIEZvciBlYWNoIHJvdXRlIGl0Ci1naXZlcyB0aGUgIGRlc3RpbmF0aW9uICBuZXR3b3JrLCB0aGUgcm91dGVyIG5vZGUgKG9yIERpcmVjdGx5KSBhbmQgdGhlIG5ldHdvcmsKLWFkZHJlc3Mgb2YgdGhlIHJvdXRlciAob3IgQ29ubmVjdGVkKSBmb3IgaW50ZXJuYWwgbmV0d29ya3MuCi0KLTIuMTEgL3Byb2Mvc3lzL2ZzL21xdWV1ZSAtIFBPU0lYIG1lc3NhZ2UgcXVldWVzIGZpbGVzeXN0ZW0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlICJtcXVldWUiICBmaWxlc3lzdGVtIHByb3ZpZGVzICB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcyB0byBlbmFibGUgdGhlCi1jcmVhdGlvbiBvZiBhICB1c2VyIHNwYWNlICBsaWJyYXJ5IHRoYXQgIGltcGxlbWVudHMgIHRoZSAgUE9TSVggbWVzc2FnZSBxdWV1ZXMKLUFQSSAoYXMgbm90ZWQgYnkgdGhlICBNU0cgdGFnIGluIHRoZSAgUE9TSVggMTAwMy4xLTIwMDEgdmVyc2lvbiAgb2YgdGhlIFN5c3RlbQotSW50ZXJmYWNlcyBzcGVjaWZpY2F0aW9uLikKLQotVGhlICJtcXVldWUiIGZpbGVzeXN0ZW0gY29udGFpbnMgdmFsdWVzIGZvciBkZXRlcm1pbmluZy9zZXR0aW5nICB0aGUgYW1vdW50IG9mCi1yZXNvdXJjZXMgdXNlZCBieSB0aGUgZmlsZSBzeXN0ZW0uCi0KLS9wcm9jL3N5cy9mcy9tcXVldWUvcXVldWVzX21heCBpcyBhIHJlYWQvd3JpdGUgIGZpbGUgZm9yICBzZXR0aW5nL2dldHRpbmcgIHRoZQotbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZSBxdWV1ZXMgYWxsb3dlZCBvbiB0aGUgc3lzdGVtLgotCi0vcHJvYy9zeXMvZnMvbXF1ZXVlL21zZ19tYXggIGlzICBhICByZWFkL3dyaXRlIGZpbGUgIGZvciAgc2V0dGluZy9nZXR0aW5nICB0aGUKLW1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIGluIGEgcXVldWUgdmFsdWUuICBJbiBmYWN0IGl0IGlzIHRoZSBsaW1pdGluZyB2YWx1ZQotZm9yIGFub3RoZXIgKHVzZXIpIGxpbWl0IHdoaWNoIGlzIHNldCBpbiBtcV9vcGVuIGludm9jYXRpb24uIFRoaXMgYXR0cmlidXRlIG9mCi1hIHF1ZXVlIG11c3QgYmUgbGVzcyBvciBlcXVhbCB0aGVuIG1zZ19tYXguCi0KLS9wcm9jL3N5cy9mcy9tcXVldWUvbXNnc2l6ZV9tYXggaXMgIGEgcmVhZC93cml0ZSAgZmlsZSBmb3Igc2V0dGluZy9nZXR0aW5nIHRoZQotbWF4aW11bSAgbWVzc2FnZSBzaXplIHZhbHVlIChpdCBpcyBldmVyeSAgbWVzc2FnZSBxdWV1ZSdzIGF0dHJpYnV0ZSBzZXQgZHVyaW5nCi1pdHMgY3JlYXRpb24pLgotCi0yLjEyIC9wcm9jLzxwaWQ+L29vbV9hZGogLSBBZGp1c3QgdGhlIG9vbS1raWxsZXIgc2NvcmUKKzMuMSAvcHJvYy88cGlkPi9vb21fYWRqIC0gQWRqdXN0IHRoZSBvb20ta2lsbGVyIHNjb3JlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBmaWxlIGNhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgc2NvcmUgdXNlZCB0byBzZWxlY3Qgd2hpY2ggcHJvY2Vzc2VzCkBAIC0yMDQxLDI1ICsxMDM3LDE1IEBACiBhcmUga2lsbGVkLCBwcm9jZXNzIGl0c2VsZiB3aWxsIGJlIGtpbGxlZCBpbiBhbiBPT00gc2l0dWF0aW9uIHdoZW4gaXQgZG9lcwogbm90IGhhdmUgY2hpbGRyZW4gb3Igc29tZSBvZiB0aGVtIGRpc2FibGVkIG9vbSBsaWtlIGRlc2NyaWJlZCBhYm92ZS4KIAotMi4xMyAvcHJvYy88cGlkPi9vb21fc2NvcmUgLSBEaXNwbGF5IGN1cnJlbnQgb29tLWtpbGxlciBzY29yZQorMy4yIC9wcm9jLzxwaWQ+L29vbV9zY29yZSAtIERpc3BsYXkgY3VycmVudCBvb20ta2lsbGVyIHNjb3JlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGhpcyBmaWxlIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoZSBjdXJyZW50IHNjb3JlIHVzZWQgYnkgdGhlIG9vbS1raWxsZXIgaXMgZm9yCiBhbnkgZ2l2ZW4gPHBpZD4uIFVzZSBpdCB0b2dldGhlciB3aXRoIC9wcm9jLzxwaWQ+L29vbV9hZGogdG8gdHVuZSB3aGljaAogcHJvY2VzcyBzaG91bGQgYmUga2lsbGVkIGluIGFuIG91dC1vZi1tZW1vcnkgc2l0dWF0aW9uLgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1bW1hcnkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2VydGFpbiBhc3BlY3RzICBvZiAga2VybmVsICBiZWhhdmlvciAgY2FuIGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUsIHdpdGhvdXQgdGhlCi1uZWVkIHRvICByZWNvbXBpbGUgIHRoZSBrZXJuZWwsIG9yIGV2ZW4gdG8gcmVib290IHRoZSBzeXN0ZW0uIFRoZSBmaWxlcyBpbiB0aGUKLS9wcm9jL3N5cyB0cmVlICBjYW4gIG5vdCBvbmx5IGJlIHJlYWQsIGJ1dCBhbHNvIG1vZGlmaWVkLiBZb3UgY2FuIHVzZSB0aGUgZWNobwotY29tbWFuZCB0byB3cml0ZSB2YWx1ZSBpbnRvIHRoZXNlIGZpbGVzLCB0aGVyZWJ5IGNoYW5naW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzCi1vZiB0aGUga2VybmVsLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLTIuMTQgIC9wcm9jLzxwaWQ+L2lvIC0gRGlzcGxheSB0aGUgSU8gYWNjb3VudGluZyBmaWVsZHMKKzMuMyAgL3Byb2MvPHBpZD4vaW8gLSBEaXNwbGF5IHRoZSBJTyBhY2NvdW50aW5nIGZpZWxkcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIGZpbGUgY29udGFpbnMgSU8gc3RhdGlzdGljcyBmb3IgZWFjaCBydW5uaW5nIHByb2Nlc3MKQEAgLTIxNjEsNyArMTE0Nyw3IEBACiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY2FuIGJlIGZvdW5kIHdpdGhpbiB0aGUgdGFza3N0YXRzIGRvY3VtZW50YXRpb24gaW4KIERvY3VtZW50YXRpb24vYWNjb3VudGluZy4KIAotMi4xNSAvcHJvYy88cGlkPi9jb3JlZHVtcF9maWx0ZXIgLSBDb3JlIGR1bXAgZmlsdGVyaW5nIHNldHRpbmdzCiszLjQgL3Byb2MvPHBpZD4vY29yZWR1bXBfZmlsdGVyIC0gQ29yZSBkdW1wIGZpbHRlcmluZyBzZXR0aW5ncwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBXaGVuIGEgcHJvY2VzcyBpcyBkdW1wZWQsIGFsbCBhbm9ueW1vdXMgbWVtb3J5IGlzIHdyaXR0ZW4gdG8gYSBjb3JlIGZpbGUgYXMKIGxvbmcgYXMgdGhlIHNpemUgb2YgdGhlIGNvcmUgZmlsZSBpc24ndCBsaW1pdGVkLiBCdXQgc29tZXRpbWVzIHdlIGRvbid0IHdhbnQKQEAgLTIyMDUsNyArMTE5MSw3IEBACiAgICQgZWNobyAweDcgPiAvcHJvYy9zZWxmL2NvcmVkdW1wX2ZpbHRlcgogICAkIC4vc29tZV9wcm9ncmFtCiAKLTIuMTYJL3Byb2MvPHBpZD4vbW91bnRpbmZvIC0gSW5mb3JtYXRpb24gYWJvdXQgbW91bnRzCiszLjUJL3Byb2MvPHBpZD4vbW91bnRpbmZvIC0gSW5mb3JtYXRpb24gYWJvdXQgbW91bnRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIGZpbGUgY29udGFpbnMgbGluZXMgb2YgdGhlIGZvcm06CkBAIC0yMjQyLDMwICsxMjI4LDMgQEAKIAogICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NoYXJlZHN1YnRyZWUudHh0CiAKLTIuMTcJL3Byb2Mvc3lzL2ZzL2Vwb2xsIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXBvbGwgaW50ZXJmYWNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBlcG9sbCg3KSBpbnRlcmZhY2UuCi0KLW1heF91c2VyX2luc3RhbmNlcwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVwb2xsIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCBhIHNpbmdsZSB1c2VyIGNhbgotaGF2ZSBvcGVuIGF0IGEgZ2l2ZW4gdGltZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTI4LCBhbmQgc2hvdWxkIGJlIGVub3VnaAotZm9yIG5vcm1hbCB1c2Vycy4KLQotbWF4X3VzZXJfd2F0Y2hlcwotLS0tLS0tLS0tLS0tLS0tLQotCi1FdmVyeSBlcG9sbCBmaWxlIGRlc2NyaXB0b3IgY2FuIHN0b3JlIGEgbnVtYmVyIG9mIGZpbGVzIHRvIGJlIG1vbml0b3JlZAotZm9yIGV2ZW50IHJlYWRpbmVzcy4gRWFjaCBvbmUgb2YgdGhlc2UgbW9uaXRvcmVkIGZpbGVzIGNvbnN0aXR1dGVzIGEgIndhdGNoIi4KLVRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgIndhdGNoZXMiIHRoYXQgYXJlCi1hbGxvd2VkIGZvciBlYWNoIHVzZXIuCi1FYWNoICJ3YXRjaCIgY29zdHMgcm91Z2hseSA5MCBieXRlcyBvbiBhIDMyYml0IGtlcm5lbCwgYW5kIHJvdWdobHkgMTYwIGJ5dGVzCi1vbiBhIDY0Yml0IG9uZS4KLVRoZSBjdXJyZW50IGRlZmF1bHQgdmFsdWUgZm9yICBtYXhfdXNlcl93YXRjaGVzICBpcyB0aGUgMS8zMiBvZiB0aGUgYXZhaWxhYmxlCi1sb3cgbWVtb3J5LCBkaXZpZGVkIGZvciB0aGUgIndhdGNoIiBjb3N0IGluIGJ5dGVzLgotCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQKaW5kZXggZmRlODI5YS4uOTAyYjk1ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dApAQCAtMjQsNiArMjQsOCBAQAogCiAJZ2lkPQkJU2V0IHRoZSBkZWZhdWx0IGdyb3VwLgogCXVtYXNrPQkJU2V0IHRoZSBkZWZhdWx0IHVtYXNrLgorCW1vZGU9CQlTZXQgdGhlIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9ucy4KKwlkbW9kZT0JCVNldCB0aGUgZGVmYXVsdCBkaXJlY3RvcnkgcGVybWlzc2lvbnMuCiAJdWlkPQkJU2V0IHRoZSBkZWZhdWx0IHVzZXIuCiAJYnM9CQlTZXQgdGhlIGJsb2NrIHNpemUuCiAJdW5oaWRlCQlTaG93IG90aGVyd2lzZSBoaWRkZW4gZmlsZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL2Z0cmFjZS50eHQKaW5kZXggODAzYjEzMS4uZmQ5YTNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mdHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZnRyYWNlLnR4dApAQCAtMTUsMzEgKzE1LDMxIEBACiAKIEZ0cmFjZSBpcyBhbiBpbnRlcm5hbCB0cmFjZXIgZGVzaWduZWQgdG8gaGVscCBvdXQgZGV2ZWxvcGVycyBhbmQKIGRlc2lnbmVycyBvZiBzeXN0ZW1zIHRvIGZpbmQgd2hhdCBpcyBnb2luZyBvbiBpbnNpZGUgdGhlIGtlcm5lbC4KLUl0IGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb3IgYW5hbHl6aW5nIGxhdGVuY2llcyBhbmQgcGVyZm9ybWFuY2UKLWlzc3VlcyB0aGF0IHRha2UgcGxhY2Ugb3V0c2lkZSBvZiB1c2VyLXNwYWNlLgorSXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvciBhbmFseXppbmcgbGF0ZW5jaWVzIGFuZAorcGVyZm9ybWFuY2UgaXNzdWVzIHRoYXQgdGFrZSBwbGFjZSBvdXRzaWRlIG9mIHVzZXItc3BhY2UuCiAKIEFsdGhvdWdoIGZ0cmFjZSBpcyB0aGUgZnVuY3Rpb24gdHJhY2VyLCBpdCBhbHNvIGluY2x1ZGVzIGFuCi1pbmZyYXN0cnVjdHVyZSB0aGF0IGFsbG93cyBmb3Igb3RoZXIgdHlwZXMgb2YgdHJhY2luZy4gU29tZSBvZiB0aGUKLXRyYWNlcnMgdGhhdCBhcmUgY3VycmVudGx5IGluIGZ0cmFjZSBpbmNsdWRlIGEgdHJhY2VyIHRvIHRyYWNlCi1jb250ZXh0IHN3aXRjaGVzLCB0aGUgdGltZSBpdCB0YWtlcyBmb3IgYSBoaWdoIHByaW9yaXR5IHRhc2sgdG8KLXJ1biBhZnRlciBpdCB3YXMgd29rZW4gdXAsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBhbmQKLW1vcmUgKGZ0cmFjZSBhbGxvd3MgZm9yIHRyYWNlciBwbHVnaW5zLCB3aGljaCBtZWFucyB0aGF0IHRoZSBsaXN0IG9mCi10cmFjZXJzIGNhbiBhbHdheXMgZ3JvdykuCitpbmZyYXN0cnVjdHVyZSB0aGF0IGFsbG93cyBmb3Igb3RoZXIgdHlwZXMgb2YgdHJhY2luZy4gU29tZSBvZgordGhlIHRyYWNlcnMgdGhhdCBhcmUgY3VycmVudGx5IGluIGZ0cmFjZSBpbmNsdWRlIGEgdHJhY2VyIHRvCit0cmFjZSBjb250ZXh0IHN3aXRjaGVzLCB0aGUgdGltZSBpdCB0YWtlcyBmb3IgYSBoaWdoIHByaW9yaXR5Cit0YXNrIHRvIHJ1biBhZnRlciBpdCB3YXMgd29rZW4gdXAsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlCitkaXNhYmxlZCwgYW5kIG1vcmUgKGZ0cmFjZSBhbGxvd3MgZm9yIHRyYWNlciBwbHVnaW5zLCB3aGljaAorbWVhbnMgdGhhdCB0aGUgbGlzdCBvZiB0cmFjZXJzIGNhbiBhbHdheXMgZ3JvdykuCiAKIAogVGhlIEZpbGUgU3lzdGVtCiAtLS0tLS0tLS0tLS0tLS0KIAotRnRyYWNlIHVzZXMgdGhlIGRlYnVnZnMgZmlsZSBzeXN0ZW0gdG8gaG9sZCB0aGUgY29udHJvbCBmaWxlcyBhcyB3ZWxsCi1hcyB0aGUgZmlsZXMgdG8gZGlzcGxheSBvdXRwdXQuCitGdHJhY2UgdXNlcyB0aGUgZGVidWdmcyBmaWxlIHN5c3RlbSB0byBob2xkIHRoZSBjb250cm9sIGZpbGVzIGFzCit3ZWxsIGFzIHRoZSBmaWxlcyB0byBkaXNwbGF5IG91dHB1dC4KIAogVG8gbW91bnQgdGhlIGRlYnVnZnMgc3lzdGVtOgogCiAgICMgbWtkaXIgL2RlYnVnCiAgICMgbW91bnQgLXQgZGVidWdmcyBub2RldiAvZGVidWcKIAotKE5vdGU6IGl0IGlzIG1vcmUgY29tbW9uIHRvIG1vdW50IGF0IC9zeXMva2VybmVsL2RlYnVnLCBidXQgZm9yIHNpbXBsaWNpdHkKLSB0aGlzIGRvY3VtZW50IHdpbGwgdXNlIC9kZWJ1ZykKKyggTm90ZTogaXQgaXMgbW9yZSBjb21tb24gdG8gbW91bnQgYXQgL3N5cy9rZXJuZWwvZGVidWcsIGJ1dCBmb3IKKyAgc2ltcGxpY2l0eSB0aGlzIGRvY3VtZW50IHdpbGwgdXNlIC9kZWJ1ZykKIAogVGhhdCdzIGl0ISAoYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBmdHJhY2UgY29uZmlndXJlZCBpbnRvIHlvdXIga2VybmVsKQogCkBAIC01MCw5MCArNTAsMTI0IEBACiAKICBOb3RlOiBhbGwgdGltZSB2YWx1ZXMgYXJlIGluIG1pY3Jvc2Vjb25kcy4KIAotICBjdXJyZW50X3RyYWNlcjogVGhpcyBpcyB1c2VkIHRvIHNldCBvciBkaXNwbGF5IHRoZSBjdXJyZW50IHRyYWNlcgotCQl0aGF0IGlzIGNvbmZpZ3VyZWQuCisgIGN1cnJlbnRfdHJhY2VyOgogCi0gIGF2YWlsYWJsZV90cmFjZXJzOiBUaGlzIGhvbGRzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgdHJhY2VycyB0aGF0Ci0JCWhhdmUgYmVlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSB0cmFjZXJzCi0JCWxpc3RlZCBoZXJlIGNhbiBiZSBjb25maWd1cmVkIGJ5IGVjaG9pbmcgdGhlaXIgbmFtZQotCQlpbnRvIGN1cnJlbnRfdHJhY2VyLgorCVRoaXMgaXMgdXNlZCB0byBzZXQgb3IgZGlzcGxheSB0aGUgY3VycmVudCB0cmFjZXIKKwl0aGF0IGlzIGNvbmZpZ3VyZWQuCiAKLSAgdHJhY2luZ19lbmFibGVkOiBUaGlzIHNldHMgb3IgZGlzcGxheXMgd2hldGhlciB0aGUgY3VycmVudF90cmFjZXIKLQkJaXMgYWN0aXZhdGVkIGFuZCB0cmFjaW5nIG9yIG5vdC4gRWNobyAwIGludG8gdGhpcwotCQlmaWxlIHRvIGRpc2FibGUgdGhlIHRyYWNlciBvciAxIHRvIGVuYWJsZSBpdC4KKyAgYXZhaWxhYmxlX3RyYWNlcnM6CiAKLSAgdHJhY2U6IFRoaXMgZmlsZSBob2xkcyB0aGUgb3V0cHV0IG9mIHRoZSB0cmFjZSBpbiBhIGh1bWFuIHJlYWRhYmxlCi0JCWZvcm1hdCAoZGVzY3JpYmVkIGJlbG93KS4KKwlUaGlzIGhvbGRzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgdHJhY2VycyB0aGF0CisJaGF2ZSBiZWVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gVGhlCisJdHJhY2VycyBsaXN0ZWQgaGVyZSBjYW4gYmUgY29uZmlndXJlZCBieQorCWVjaG9pbmcgdGhlaXIgbmFtZSBpbnRvIGN1cnJlbnRfdHJhY2VyLgogCi0gIGxhdGVuY3lfdHJhY2U6IFRoaXMgZmlsZSBzaG93cyB0aGUgc2FtZSB0cmFjZSBidXQgdGhlIGluZm9ybWF0aW9uCi0JCWlzIG9yZ2FuaXplZCBtb3JlIHRvIGRpc3BsYXkgcG9zc2libGUgbGF0ZW5jaWVzCi0JCWluIHRoZSBzeXN0ZW0gKGRlc2NyaWJlZCBiZWxvdykuCisgIHRyYWNpbmdfZW5hYmxlZDoKIAotICB0cmFjZV9waXBlOiBUaGUgb3V0cHV0IGlzIHRoZSBzYW1lIGFzIHRoZSAidHJhY2UiIGZpbGUgYnV0IHRoaXMKLQkJZmlsZSBpcyBtZWFudCB0byBiZSBzdHJlYW1lZCB3aXRoIGxpdmUgdHJhY2luZy4KLQkJUmVhZHMgZnJvbSB0aGlzIGZpbGUgd2lsbCBibG9jayB1bnRpbCBuZXcgZGF0YQotCQlpcyByZXRyaWV2ZWQuIFVubGlrZSB0aGUgInRyYWNlIiBhbmQgImxhdGVuY3lfdHJhY2UiCi0JCWZpbGVzLCB0aGlzIGZpbGUgaXMgYSBjb25zdW1lci4gVGhpcyBtZWFucyByZWFkaW5nCi0JCWZyb20gdGhpcyBmaWxlIGNhdXNlcyBzZXF1ZW50aWFsIHJlYWRzIHRvIGRpc3BsYXkKLQkJbW9yZSBjdXJyZW50IGRhdGEuIE9uY2UgZGF0YSBpcyByZWFkIGZyb20gdGhpcwotCQlmaWxlLCBpdCBpcyBjb25zdW1lZCwgYW5kIHdpbGwgbm90IGJlIHJlYWQKLQkJYWdhaW4gd2l0aCBhIHNlcXVlbnRpYWwgcmVhZC4gVGhlICJ0cmFjZSIgYW5kCi0JCSJsYXRlbmN5X3RyYWNlIiBmaWxlcyBhcmUgc3RhdGljLCBhbmQgaWYgdGhlCi0JCXRyYWNlciBpcyBub3QgYWRkaW5nIG1vcmUgZGF0YSwgdGhleSB3aWxsIGRpc3BsYXkKLQkJdGhlIHNhbWUgaW5mb3JtYXRpb24gZXZlcnkgdGltZSB0aGV5IGFyZSByZWFkLgorCVRoaXMgc2V0cyBvciBkaXNwbGF5cyB3aGV0aGVyIHRoZSBjdXJyZW50X3RyYWNlcgorCWlzIGFjdGl2YXRlZCBhbmQgdHJhY2luZyBvciBub3QuIEVjaG8gMCBpbnRvIHRoaXMKKwlmaWxlIHRvIGRpc2FibGUgdGhlIHRyYWNlciBvciAxIHRvIGVuYWJsZSBpdC4KIAotICB0cmFjZV9vcHRpb25zOiBUaGlzIGZpbGUgbGV0cyB0aGUgdXNlciBjb250cm9sIHRoZSBhbW91bnQgb2YgZGF0YQotCQl0aGF0IGlzIGRpc3BsYXllZCBpbiBvbmUgb2YgdGhlIGFib3ZlIG91dHB1dAotCQlmaWxlcy4KKyAgdHJhY2U6CiAKLSAgdHJhY2VfbWF4X2xhdGVuY3k6IFNvbWUgb2YgdGhlIHRyYWNlcnMgcmVjb3JkIHRoZSBtYXggbGF0ZW5jeS4KLQkJRm9yIGV4YW1wbGUsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgotCQlUaGlzIHRpbWUgaXMgc2F2ZWQgaW4gdGhpcyBmaWxlLiBUaGUgbWF4IHRyYWNlCi0JCXdpbGwgYWxzbyBiZSBzdG9yZWQsIGFuZCBkaXNwbGF5ZWQgYnkgZWl0aGVyCi0JCSJ0cmFjZSIgb3IgImxhdGVuY3lfdHJhY2UiLiAgQSBuZXcgbWF4IHRyYWNlIHdpbGwKLQkJb25seSBiZSByZWNvcmRlZCBpZiB0aGUgbGF0ZW5jeSBpcyBncmVhdGVyIHRoYW4KLQkJdGhlIHZhbHVlIGluIHRoaXMgZmlsZS4gKGluIG1pY3Jvc2Vjb25kcykKKwlUaGlzIGZpbGUgaG9sZHMgdGhlIG91dHB1dCBvZiB0aGUgdHJhY2UgaW4gYSBodW1hbgorCXJlYWRhYmxlIGZvcm1hdCAoZGVzY3JpYmVkIGJlbG93KS4KIAotICBidWZmZXJfc2l6ZV9rYjogVGhpcyBzZXRzIG9yIGRpc3BsYXlzIHRoZSBudW1iZXIgb2Yga2lsb2J5dGVzIGVhY2ggQ1BVCi0JCWJ1ZmZlciBjYW4gaG9sZC4gVGhlIHRyYWNlciBidWZmZXJzIGFyZSB0aGUgc2FtZSBzaXplCi0JCWZvciBlYWNoIENQVS4gVGhlIGRpc3BsYXllZCBudW1iZXIgaXMgdGhlIHNpemUgb2YgdGhlCi0JCUNQVSBidWZmZXIgYW5kIG5vdCB0b3RhbCBzaXplIG9mIGFsbCBidWZmZXJzLiBUaGUKLQkJdHJhY2UgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGluIHBhZ2VzIChibG9ja3Mgb2YgbWVtb3J5Ci0JCXRoYXQgdGhlIGtlcm5lbCB1c2VzIGZvciBhbGxvY2F0aW9uLCB1c3VhbGx5IDQgS0IgaW4gc2l6ZSkuCi0JCUlmIHRoZSBsYXN0IHBhZ2UgYWxsb2NhdGVkIGhhcyByb29tIGZvciBtb3JlIGJ5dGVzCi0JCXRoYW4gcmVxdWVzdGVkLCB0aGUgcmVzdCBvZiB0aGUgcGFnZSB3aWxsIGJlIHVzZWQsCi0JCW1ha2luZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gYmlnZ2VyIHRoYW4gcmVxdWVzdGVkLgotCQkoTm90ZSwgdGhlIHNpemUgbWF5IG5vdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUgZHVlCi0JCXRvIGJ1ZmZlciBtYW5hZ21lbnQgb3ZlcmhlYWQuKQorICBsYXRlbmN5X3RyYWNlOgogCi0JCVRoaXMgY2FuIG9ubHkgYmUgdXBkYXRlZCB3aGVuIHRoZSBjdXJyZW50X3RyYWNlcgotCQlpcyBzZXQgdG8gIm5vcCIuCisJVGhpcyBmaWxlIHNob3dzIHRoZSBzYW1lIHRyYWNlIGJ1dCB0aGUgaW5mb3JtYXRpb24KKwlpcyBvcmdhbml6ZWQgbW9yZSB0byBkaXNwbGF5IHBvc3NpYmxlIGxhdGVuY2llcworCWluIHRoZSBzeXN0ZW0gKGRlc2NyaWJlZCBiZWxvdykuCiAKLSAgdHJhY2luZ19jcHVtYXNrOiBUaGlzIGlzIGEgbWFzayB0aGF0IGxldHMgdGhlIHVzZXIgb25seSB0cmFjZQotCQlvbiBzcGVjaWZpZWQgQ1BVUy4gVGhlIGZvcm1hdCBpcyBhIGhleCBzdHJpbmcKLQkJcmVwcmVzZW50aW5nIHRoZSBDUFVTLgorICB0cmFjZV9waXBlOgogCi0gIHNldF9mdHJhY2VfZmlsdGVyOiBXaGVuIGR5bmFtaWMgZnRyYWNlIGlzIGNvbmZpZ3VyZWQgaW4gKHNlZSB0aGUKLQkJc2VjdGlvbiBiZWxvdyAiZHluYW1pYyBmdHJhY2UiKSwgdGhlIGNvZGUgaXMgZHluYW1pY2FsbHkKLQkJbW9kaWZpZWQgKGNvZGUgdGV4dCByZXdyaXRlKSB0byBkaXNhYmxlIGNhbGxpbmcgb2YgdGhlCi0JCWZ1bmN0aW9uIHByb2ZpbGVyIChtY291bnQpLiBUaGlzIGxldHMgdHJhY2luZyBiZSBjb25maWd1cmVkCi0JCWluIHdpdGggcHJhY3RpY2FsbHkgbm8gb3ZlcmhlYWQgaW4gcGVyZm9ybWFuY2UuICBUaGlzIGFsc28KLQkJaGFzIGEgc2lkZSBlZmZlY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHNwZWNpZmljIGZ1bmN0aW9ucwotCQl0byBiZSB0cmFjZWQuIEVjaG9pbmcgbmFtZXMgb2YgZnVuY3Rpb25zIGludG8gdGhpcyBmaWxlCi0JCXdpbGwgbGltaXQgdGhlIHRyYWNlIHRvIG9ubHkgdGhvc2UgZnVuY3Rpb25zLgorCVRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlICJ0cmFjZSIgZmlsZSBidXQgdGhpcworCWZpbGUgaXMgbWVhbnQgdG8gYmUgc3RyZWFtZWQgd2l0aCBsaXZlIHRyYWNpbmcuCisJUmVhZHMgZnJvbSB0aGlzIGZpbGUgd2lsbCBibG9jayB1bnRpbCBuZXcgZGF0YQorCWlzIHJldHJpZXZlZC4gVW5saWtlIHRoZSAidHJhY2UiIGFuZCAibGF0ZW5jeV90cmFjZSIKKwlmaWxlcywgdGhpcyBmaWxlIGlzIGEgY29uc3VtZXIuIFRoaXMgbWVhbnMgcmVhZGluZworCWZyb20gdGhpcyBmaWxlIGNhdXNlcyBzZXF1ZW50aWFsIHJlYWRzIHRvIGRpc3BsYXkKKwltb3JlIGN1cnJlbnQgZGF0YS4gT25jZSBkYXRhIGlzIHJlYWQgZnJvbSB0aGlzCisJZmlsZSwgaXQgaXMgY29uc3VtZWQsIGFuZCB3aWxsIG5vdCBiZSByZWFkCisJYWdhaW4gd2l0aCBhIHNlcXVlbnRpYWwgcmVhZC4gVGhlICJ0cmFjZSIgYW5kCisJImxhdGVuY3lfdHJhY2UiIGZpbGVzIGFyZSBzdGF0aWMsIGFuZCBpZiB0aGUKKwl0cmFjZXIgaXMgbm90IGFkZGluZyBtb3JlIGRhdGEsIHRoZXkgd2lsbCBkaXNwbGF5CisJdGhlIHNhbWUgaW5mb3JtYXRpb24gZXZlcnkgdGltZSB0aGV5IGFyZSByZWFkLgogCi0gIHNldF9mdHJhY2Vfbm90cmFjZTogVGhpcyBoYXMgYW4gZWZmZWN0IG9wcG9zaXRlIHRvIHRoYXQgb2YKLQkJc2V0X2Z0cmFjZV9maWx0ZXIuIEFueSBmdW5jdGlvbiB0aGF0IGlzIGFkZGVkIGhlcmUgd2lsbCBub3QKLQkJYmUgdHJhY2VkLiBJZiBhIGZ1bmN0aW9uIGV4aXN0cyBpbiBib3RoIHNldF9mdHJhY2VfZmlsdGVyCi0JCWFuZCBzZXRfZnRyYWNlX25vdHJhY2UsCXRoZSBmdW5jdGlvbiB3aWxsIF9ub3RfIGJlIHRyYWNlZC4KKyAgdHJhY2Vfb3B0aW9uczoKIAotICBzZXRfZnRyYWNlX3BpZDogSGF2ZSB0aGUgZnVuY3Rpb24gdHJhY2VyIG9ubHkgdHJhY2UgYSBzaW5nbGUgdGhyZWFkLgorCVRoaXMgZmlsZSBsZXRzIHRoZSB1c2VyIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBkYXRhCisJdGhhdCBpcyBkaXNwbGF5ZWQgaW4gb25lIG9mIHRoZSBhYm92ZSBvdXRwdXQKKwlmaWxlcy4KIAotICBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9uczogVGhpcyBsaXN0cyB0aGUgZnVuY3Rpb25zIHRoYXQgZnRyYWNlCi0JCWhhcyBwcm9jZXNzZWQgYW5kIGNhbiB0cmFjZS4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbgotCQluYW1lcyB0aGF0IHlvdSBjYW4gcGFzcyB0byAic2V0X2Z0cmFjZV9maWx0ZXIiIG9yCi0JCSJzZXRfZnRyYWNlX25vdHJhY2UiLiAoU2VlIHRoZSBzZWN0aW9uICJkeW5hbWljIGZ0cmFjZSIKLQkJYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4pCisgIHRyYWNpbmdfbWF4X2xhdGVuY3k6CisKKwlTb21lIG9mIHRoZSB0cmFjZXJzIHJlY29yZCB0aGUgbWF4IGxhdGVuY3kuCisJRm9yIGV4YW1wbGUsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgorCVRoaXMgdGltZSBpcyBzYXZlZCBpbiB0aGlzIGZpbGUuIFRoZSBtYXggdHJhY2UKKwl3aWxsIGFsc28gYmUgc3RvcmVkLCBhbmQgZGlzcGxheWVkIGJ5IGVpdGhlcgorCSJ0cmFjZSIgb3IgImxhdGVuY3lfdHJhY2UiLiAgQSBuZXcgbWF4IHRyYWNlIHdpbGwKKwlvbmx5IGJlIHJlY29yZGVkIGlmIHRoZSBsYXRlbmN5IGlzIGdyZWF0ZXIgdGhhbgorCXRoZSB2YWx1ZSBpbiB0aGlzIGZpbGUuIChpbiBtaWNyb3NlY29uZHMpCisKKyAgYnVmZmVyX3NpemVfa2I6CisKKwlUaGlzIHNldHMgb3IgZGlzcGxheXMgdGhlIG51bWJlciBvZiBraWxvYnl0ZXMgZWFjaCBDUFUKKwlidWZmZXIgY2FuIGhvbGQuIFRoZSB0cmFjZXIgYnVmZmVycyBhcmUgdGhlIHNhbWUgc2l6ZQorCWZvciBlYWNoIENQVS4gVGhlIGRpc3BsYXllZCBudW1iZXIgaXMgdGhlIHNpemUgb2YgdGhlCisJQ1BVIGJ1ZmZlciBhbmQgbm90IHRvdGFsIHNpemUgb2YgYWxsIGJ1ZmZlcnMuIFRoZQorCXRyYWNlIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBpbiBwYWdlcyAoYmxvY2tzIG9mIG1lbW9yeQorCXRoYXQgdGhlIGtlcm5lbCB1c2VzIGZvciBhbGxvY2F0aW9uLCB1c3VhbGx5IDQgS0IgaW4gc2l6ZSkuCisJSWYgdGhlIGxhc3QgcGFnZSBhbGxvY2F0ZWQgaGFzIHJvb20gZm9yIG1vcmUgYnl0ZXMKKwl0aGFuIHJlcXVlc3RlZCwgdGhlIHJlc3Qgb2YgdGhlIHBhZ2Ugd2lsbCBiZSB1c2VkLAorCW1ha2luZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gYmlnZ2VyIHRoYW4gcmVxdWVzdGVkLgorCSggTm90ZSwgdGhlIHNpemUgbWF5IG5vdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUKKwkgIGR1ZSB0byBidWZmZXIgbWFuYWdtZW50IG92ZXJoZWFkLiApCisKKwlUaGlzIGNhbiBvbmx5IGJlIHVwZGF0ZWQgd2hlbiB0aGUgY3VycmVudF90cmFjZXIKKwlpcyBzZXQgdG8gIm5vcCIuCisKKyAgdHJhY2luZ19jcHVtYXNrOgorCisJVGhpcyBpcyBhIG1hc2sgdGhhdCBsZXRzIHRoZSB1c2VyIG9ubHkgdHJhY2UKKwlvbiBzcGVjaWZpZWQgQ1BVUy4gVGhlIGZvcm1hdCBpcyBhIGhleCBzdHJpbmcKKwlyZXByZXNlbnRpbmcgdGhlIENQVVMuCisKKyAgc2V0X2Z0cmFjZV9maWx0ZXI6CisKKwlXaGVuIGR5bmFtaWMgZnRyYWNlIGlzIGNvbmZpZ3VyZWQgaW4gKHNlZSB0aGUKKwlzZWN0aW9uIGJlbG93ICJkeW5hbWljIGZ0cmFjZSIpLCB0aGUgY29kZSBpcyBkeW5hbWljYWxseQorCW1vZGlmaWVkIChjb2RlIHRleHQgcmV3cml0ZSkgdG8gZGlzYWJsZSBjYWxsaW5nIG9mIHRoZQorCWZ1bmN0aW9uIHByb2ZpbGVyIChtY291bnQpLiBUaGlzIGxldHMgdHJhY2luZyBiZSBjb25maWd1cmVkCisJaW4gd2l0aCBwcmFjdGljYWxseSBubyBvdmVyaGVhZCBpbiBwZXJmb3JtYW5jZS4gIFRoaXMgYWxzbworCWhhcyBhIHNpZGUgZWZmZWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzcGVjaWZpYyBmdW5jdGlvbnMKKwl0byBiZSB0cmFjZWQuIEVjaG9pbmcgbmFtZXMgb2YgZnVuY3Rpb25zIGludG8gdGhpcyBmaWxlCisJd2lsbCBsaW1pdCB0aGUgdHJhY2UgdG8gb25seSB0aG9zZSBmdW5jdGlvbnMuCisKKyAgc2V0X2Z0cmFjZV9ub3RyYWNlOgorCisJVGhpcyBoYXMgYW4gZWZmZWN0IG9wcG9zaXRlIHRvIHRoYXQgb2YKKwlzZXRfZnRyYWNlX2ZpbHRlci4gQW55IGZ1bmN0aW9uIHRoYXQgaXMgYWRkZWQgaGVyZSB3aWxsIG5vdAorCWJlIHRyYWNlZC4gSWYgYSBmdW5jdGlvbiBleGlzdHMgaW4gYm90aCBzZXRfZnRyYWNlX2ZpbHRlcgorCWFuZCBzZXRfZnRyYWNlX25vdHJhY2UsCXRoZSBmdW5jdGlvbiB3aWxsIF9ub3RfIGJlIHRyYWNlZC4KKworICBzZXRfZnRyYWNlX3BpZDoKKworCUhhdmUgdGhlIGZ1bmN0aW9uIHRyYWNlciBvbmx5IHRyYWNlIGEgc2luZ2xlIHRocmVhZC4KKworICBzZXRfZ3JhcGhfZnVuY3Rpb246CisKKwlTZXQgYSAidHJpZ2dlciIgZnVuY3Rpb24gd2hlcmUgdHJhY2luZyBzaG91bGQgc3RhcnQKKwl3aXRoIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgKFNlZSB0aGUgc2VjdGlvbgorCSJkeW5hbWljIGZ0cmFjZSIgZm9yIG1vcmUgZGV0YWlscykuCisKKyAgYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnM6CisKKwlUaGlzIGxpc3RzIHRoZSBmdW5jdGlvbnMgdGhhdCBmdHJhY2UKKwloYXMgcHJvY2Vzc2VkIGFuZCBjYW4gdHJhY2UuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb24KKwluYW1lcyB0aGF0IHlvdSBjYW4gcGFzcyB0byAic2V0X2Z0cmFjZV9maWx0ZXIiIG9yCisJInNldF9mdHJhY2Vfbm90cmFjZSIuIChTZWUgdGhlIHNlY3Rpb24gImR5bmFtaWMgZnRyYWNlIgorCWJlbG93IGZvciBtb3JlIGRldGFpbHMuKQogCiAKIFRoZSBUcmFjZXJzCkBAIC0xNDEsMzYgKzE3NSw2NiBAQAogCiBIZXJlIGlzIHRoZSBsaXN0IG9mIGN1cnJlbnQgdHJhY2VycyB0aGF0IG1heSBiZSBjb25maWd1cmVkLgogCi0gIGZ1bmN0aW9uIC0gZnVuY3Rpb24gdHJhY2VyIHRoYXQgdXNlcyBtY291bnQgdG8gdHJhY2UgYWxsIGZ1bmN0aW9ucy4KKyAgImZ1bmN0aW9uIgogCi0gIHNjaGVkX3N3aXRjaCAtIHRyYWNlcyB0aGUgY29udGV4dCBzd2l0Y2hlcyBiZXR3ZWVuIHRhc2tzLgorCUZ1bmN0aW9uIGNhbGwgdHJhY2VyIHRvIHRyYWNlIGFsbCBrZXJuZWwgZnVuY3Rpb25zLgogCi0gIGlycXNvZmYgLSB0cmFjZXMgdGhlIGFyZWFzIHRoYXQgZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBzYXZlcwotICAJCXRoZSB0cmFjZSB3aXRoIHRoZSBsb25nZXN0IG1heCBsYXRlbmN5LgotCQlTZWUgdHJhY2luZ19tYXhfbGF0ZW5jeS4gIFdoZW4gYSBuZXcgbWF4IGlzIHJlY29yZGVkLAotCQlpdCByZXBsYWNlcyB0aGUgb2xkIHRyYWNlLiBJdCBpcyBiZXN0IHRvIHZpZXcgdGhpcwotCQl0cmFjZSB2aWEgdGhlIGxhdGVuY3lfdHJhY2UgZmlsZS4KKyAgImZ1bmN0aW9uX2dyYXBoX3RyYWNlciIKIAotICBwcmVlbXB0b2ZmIC0gU2ltaWxhciB0byBpcnFzb2ZmIGJ1dCB0cmFjZXMgYW5kIHJlY29yZHMgdGhlIGFtb3VudCBvZgotCQl0aW1lIGZvciB3aGljaCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLgorCVNpbWlsYXIgdG8gdGhlIGZ1bmN0aW9uIHRyYWNlciBleGNlcHQgdGhhdCB0aGUKKwlmdW5jdGlvbiB0cmFjZXIgcHJvYmVzIHRoZSBmdW5jdGlvbnMgb24gdGhlaXIgZW50cnkKKwl3aGVyZWFzIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgdHJhY2VzIG9uIGJvdGggZW50cnkKKwlhbmQgZXhpdCBvZiB0aGUgZnVuY3Rpb25zLiBJdCB0aGVuIHByb3ZpZGVzIHRoZSBhYmlsaXR5CisJdG8gZHJhdyBhIGdyYXBoIG9mIGZ1bmN0aW9uIGNhbGxzIHNpbWlsYXIgdG8gQyBjb2RlCisJc291cmNlLgogCi0gIHByZWVtcHRpcnFzb2ZmIC0gU2ltaWxhciB0byBpcnFzb2ZmIGFuZCBwcmVlbXB0b2ZmLCBidXQgdHJhY2VzIGFuZAotCQkgcmVjb3JkcyB0aGUgbGFyZ2VzdCB0aW1lIGZvciB3aGljaCBpcnFzIGFuZC9vciBwcmVlbXB0aW9uCi0JCSBpcyBkaXNhYmxlZC4KKyAgInNjaGVkX3N3aXRjaCIKIAotICB3YWtldXAgLSBUcmFjZXMgYW5kIHJlY29yZHMgdGhlIG1heCBsYXRlbmN5IHRoYXQgaXQgdGFrZXMgZm9yCi0JCXRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdG8gZ2V0IHNjaGVkdWxlZCBhZnRlcgotCQlpdCBoYXMgYmVlbiB3b2tlbiB1cC4KKwlUcmFjZXMgdGhlIGNvbnRleHQgc3dpdGNoZXMgYW5kIHdha2V1cHMgYmV0d2VlbiB0YXNrcy4KIAotICBub3AgLSBUaGlzIGlzIG5vdCBhIHRyYWNlci4gVG8gcmVtb3ZlIGFsbCB0cmFjZXJzIGZyb20gdHJhY2luZwotCQlzaW1wbHkgZWNobyAibm9wIiBpbnRvIGN1cnJlbnRfdHJhY2VyLgorICAiaXJxc29mZiIKKworCVRyYWNlcyB0aGUgYXJlYXMgdGhhdCBkaXNhYmxlIGludGVycnVwdHMgYW5kIHNhdmVzCisJdGhlIHRyYWNlIHdpdGggdGhlIGxvbmdlc3QgbWF4IGxhdGVuY3kuCisJU2VlIHRyYWNpbmdfbWF4X2xhdGVuY3kuIFdoZW4gYSBuZXcgbWF4IGlzIHJlY29yZGVkLAorCWl0IHJlcGxhY2VzIHRoZSBvbGQgdHJhY2UuIEl0IGlzIGJlc3QgdG8gdmlldyB0aGlzCisJdHJhY2UgdmlhIHRoZSBsYXRlbmN5X3RyYWNlIGZpbGUuCisKKyAgInByZWVtcHRvZmYiCisKKwlTaW1pbGFyIHRvIGlycXNvZmYgYnV0IHRyYWNlcyBhbmQgcmVjb3JkcyB0aGUgYW1vdW50IG9mCisJdGltZSBmb3Igd2hpY2ggcHJlZW1wdGlvbiBpcyBkaXNhYmxlZC4KKworICAicHJlZW1wdGlycXNvZmYiCisKKwlTaW1pbGFyIHRvIGlycXNvZmYgYW5kIHByZWVtcHRvZmYsIGJ1dCB0cmFjZXMgYW5kCisJcmVjb3JkcyB0aGUgbGFyZ2VzdCB0aW1lIGZvciB3aGljaCBpcnFzIGFuZC9vciBwcmVlbXB0aW9uCisJaXMgZGlzYWJsZWQuCisKKyAgIndha2V1cCIKKworCVRyYWNlcyBhbmQgcmVjb3JkcyB0aGUgbWF4IGxhdGVuY3kgdGhhdCBpdCB0YWtlcyBmb3IKKwl0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRvIGdldCBzY2hlZHVsZWQgYWZ0ZXIKKwlpdCBoYXMgYmVlbiB3b2tlbiB1cC4KKworICAiaHctYnJhbmNoLXRyYWNlciIKKworCVVzZXMgdGhlIEJUUyBDUFUgZmVhdHVyZSBvbiB4ODYgQ1BVcyB0byB0cmFjZXMgYWxsCisJYnJhbmNoZXMgZXhlY3V0ZWQuCisKKyAgIm5vcCIKKworCVRoaXMgaXMgdGhlICJ0cmFjZSBub3RoaW5nIiB0cmFjZXIuIFRvIHJlbW92ZSBhbGwKKwl0cmFjZXJzIGZyb20gdHJhY2luZyBzaW1wbHkgZWNobyAibm9wIiBpbnRvCisJY3VycmVudF90cmFjZXIuCiAKIAogRXhhbXBsZXMgb2YgdXNpbmcgdGhlIHRyYWNlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IZXJlIGFyZSB0eXBpY2FsIGV4YW1wbGVzIG9mIHVzaW5nIHRoZSB0cmFjZXJzIHdoZW4gY29udHJvbGxpbmcgdGhlbSBvbmx5Ci13aXRoIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSAod2l0aG91dCB1c2luZyBhbnkgdXNlci1sYW5kIHV0aWxpdGllcykuCitIZXJlIGFyZSB0eXBpY2FsIGV4YW1wbGVzIG9mIHVzaW5nIHRoZSB0cmFjZXJzIHdoZW4gY29udHJvbGxpbmcKK3RoZW0gb25seSB3aXRoIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSAod2l0aG91dCB1c2luZyBhbnkKK3VzZXItbGFuZCB1dGlsaXRpZXMpLgogCiBPdXRwdXQgZm9ybWF0OgogLS0tLS0tLS0tLS0tLS0KQEAgLTE4NywxNiArMjUxLDE2IEBACiAgICAgICAgICAgICBiYXNoLTQyNTEgIFswMV0gMTAxNTIuNTgzODU1OiBfYXRvbWljX2RlY19hbmRfbG9jayA8LWRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0KIAotQSBoZWFkZXIgaXMgcHJpbnRlZCB3aXRoIHRoZSB0cmFjZXIgbmFtZSB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSB0cmFjZS4KLUluIHRoaXMgY2FzZSB0aGUgdHJhY2VyIGlzICJmdW5jdGlvbiIuIFRoZW4gYSBoZWFkZXIgc2hvd2luZyB0aGUgZm9ybWF0LiBUYXNrCi1uYW1lICJiYXNoIiwgdGhlIHRhc2sgUElEICI0MjUxIiwgdGhlIENQVSB0aGF0IGl0IHdhcyBydW5uaW5nIG9uCi0iMDEiLCB0aGUgdGltZXN0YW1wIGluIDxzZWNzPi48dXNlY3M+IGZvcm1hdCwgdGhlIGZ1bmN0aW9uIG5hbWUgdGhhdCB3YXMKLXRyYWNlZCAicGF0aF9wdXQiIGFuZCB0aGUgcGFyZW50IGZ1bmN0aW9uIHRoYXQgY2FsbGVkIHRoaXMgZnVuY3Rpb24KLSJwYXRoX3dhbGsiLiBUaGUgdGltZXN0YW1wIGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMKLWVudGVyZWQuCitBIGhlYWRlciBpcyBwcmludGVkIHdpdGggdGhlIHRyYWNlciBuYW1lIHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkKK3RoZSB0cmFjZS4gSW4gdGhpcyBjYXNlIHRoZSB0cmFjZXIgaXMgImZ1bmN0aW9uIi4gVGhlbiBhIGhlYWRlcgorc2hvd2luZyB0aGUgZm9ybWF0LiBUYXNrIG5hbWUgImJhc2giLCB0aGUgdGFzayBQSUQgIjQyNTEiLCB0aGUKK0NQVSB0aGF0IGl0IHdhcyBydW5uaW5nIG9uICIwMSIsIHRoZSB0aW1lc3RhbXAgaW4gPHNlY3M+Ljx1c2Vjcz4KK2Zvcm1hdCwgdGhlIGZ1bmN0aW9uIG5hbWUgdGhhdCB3YXMgdHJhY2VkICJwYXRoX3B1dCIgYW5kIHRoZQorcGFyZW50IGZ1bmN0aW9uIHRoYXQgY2FsbGVkIHRoaXMgZnVuY3Rpb24gInBhdGhfd2FsayIuIFRoZQordGltZXN0YW1wIGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZW50ZXJlZC4KIAotVGhlIHNjaGVkX3N3aXRjaCB0cmFjZXIgYWxzbyBpbmNsdWRlcyB0cmFjaW5nIG9mIHRhc2sgd2FrZXVwcyBhbmQKLWNvbnRleHQgc3dpdGNoZXMuCitUaGUgc2NoZWRfc3dpdGNoIHRyYWNlciBhbHNvIGluY2x1ZGVzIHRyYWNpbmcgb2YgdGFzayB3YWtldXBzCithbmQgY29udGV4dCBzd2l0Y2hlcy4KIAogICAgICBrc29mdGlycWQvMS03ICAgICBbMDFdICAxNDUzLjA3MDAxMzogICAgICA3OjExNTpSICAgKyAgMjkxNjoxMTU6UwogICAgICBrc29mdGlycWQvMS03ICAgICBbMDFdICAxNDUzLjA3MDAxMzogICAgICA3OjExNTpSICAgKyAgICAxMDoxMTU6UwpAQCAtMjA1LDggKzI2OSw4IEBACiAgICAgIGtvbmRlbWFuZC8xLTI5MTYgIFswMV0gIDE0NTMuMDcwMDEzOiAgIDI5MTY6MTE1OlMgPT0+ICAgICA3OjExNTpSCiAgICAgIGtzb2Z0aXJxZC8xLTcgICAgIFswMV0gIDE0NTMuMDcwMDEzOiAgICAgIDc6MTE1OlMgPT0+ICAgICAwOjE0MDpSCiAKLVdha2UgdXBzIGFyZSByZXByZXNlbnRlZCBieSBhICIrIiBhbmQgdGhlIGNvbnRleHQgc3dpdGNoZXMgYXJlIHNob3duIGFzCi0iPT0+Ii4gIFRoZSBmb3JtYXQgaXM6CitXYWtlIHVwcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSAiKyIgYW5kIHRoZSBjb250ZXh0IHN3aXRjaGVzIGFyZQorc2hvd24gYXMgIj09PiIuICBUaGUgZm9ybWF0IGlzOgogCiAgQ29udGV4dCBzd2l0Y2hlczoKIApAQCAtMjIwLDE5ICsyODQsMjAgQEAKIAogICA8cGlkPjo8cHJpbz46PHN0YXRlPiAgICArICA8cGlkPjo8cHJpbz46PHN0YXRlPgogCi1UaGUgcHJpbyBpcyB0aGUgaW50ZXJuYWwga2VybmVsIHByaW9yaXR5LCB3aGljaCBpcyB0aGUgaW52ZXJzZSBvZiB0aGUKLXByaW9yaXR5IHRoYXQgaXMgdXN1YWxseSBkaXNwbGF5ZWQgYnkgdXNlci1zcGFjZSB0b29scy4gWmVybyByZXByZXNlbnRzCi10aGUgaGlnaGVzdCBwcmlvcml0eSAoOTkpLiBQcmlvIDEwMCBzdGFydHMgdGhlICJuaWNlIiBwcmlvcml0aWVzIHdpdGgKLTEwMCBiZWluZyBlcXVhbCB0byBuaWNlIC0yMCBhbmQgMTM5IGJlaW5nIG5pY2UgMTkuIFRoZSBwcmlvICIxNDAiIGlzCi1yZXNlcnZlZCBmb3IgdGhlIGlkbGUgdGFzayB3aGljaCBpcyB0aGUgbG93ZXN0IHByaW9yaXR5IHRocmVhZCAocGlkIDApLgorVGhlIHByaW8gaXMgdGhlIGludGVybmFsIGtlcm5lbCBwcmlvcml0eSwgd2hpY2ggaXMgdGhlIGludmVyc2UKK29mIHRoZSBwcmlvcml0eSB0aGF0IGlzIHVzdWFsbHkgZGlzcGxheWVkIGJ5IHVzZXItc3BhY2UgdG9vbHMuCitaZXJvIHJlcHJlc2VudHMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgKDk5KS4gUHJpbyAxMDAgc3RhcnRzIHRoZQorIm5pY2UiIHByaW9yaXRpZXMgd2l0aCAxMDAgYmVpbmcgZXF1YWwgdG8gbmljZSAtMjAgYW5kIDEzOSBiZWluZworbmljZSAxOS4gVGhlIHByaW8gIjE0MCIgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBpZGxlIHRhc2sgd2hpY2ggaXMKK3RoZSBsb3dlc3QgcHJpb3JpdHkgdGhyZWFkIChwaWQgMCkuCiAKIAogTGF0ZW5jeSB0cmFjZSBmb3JtYXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZvciB0cmFjZXMgdGhhdCBkaXNwbGF5IGxhdGVuY3kgdGltZXMsIHRoZSBsYXRlbmN5X3RyYWNlIGZpbGUgZ2l2ZXMKLXNvbWV3aGF0IG1vcmUgaW5mb3JtYXRpb24gdG8gc2VlIHdoeSBhIGxhdGVuY3kgaGFwcGVuZWQuIEhlcmUgaXMgYSB0eXBpY2FsCi10cmFjZS4KK0ZvciB0cmFjZXMgdGhhdCBkaXNwbGF5IGxhdGVuY3kgdGltZXMsIHRoZSBsYXRlbmN5X3RyYWNlIGZpbGUKK2dpdmVzIHNvbWV3aGF0IG1vcmUgaW5mb3JtYXRpb24gdG8gc2VlIHdoeSBhIGxhdGVuY3kgaGFwcGVuZWQuCitIZXJlIGlzIGEgdHlwaWNhbCB0cmFjZS4KIAogIyB0cmFjZXI6IGlycXNvZmYKICMKQEAgLTI1OSwyMCArMzI0LDIwIEBACiAgIDxpZGxlPi0wICAgICAwZC5zMSAgIDk4dXMgOiB0cmFjZV9oYXJkaXJxc19vbiAoZG9fc29mdGlycSkKIAogCitUaGlzIHNob3dzIHRoYXQgdGhlIGN1cnJlbnQgdHJhY2VyIGlzICJpcnFzb2ZmIiB0cmFjaW5nIHRoZSB0aW1lCitmb3Igd2hpY2ggaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkLiBJdCBnaXZlcyB0aGUgdHJhY2UgdmVyc2lvbgorYW5kIHRoZSB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwgdXBvbiB3aGljaCB0aGlzIHdhcyBleGVjdXRlZCBvbgorKDIuNi4yNi1yYzgpLiBUaGVuIGl0IGRpc3BsYXlzIHRoZSBtYXggbGF0ZW5jeSBpbiBtaWNyb3NlY3MgKDk3Cit1cykuIFRoZSBudW1iZXIgb2YgdHJhY2UgZW50cmllcyBkaXNwbGF5ZWQgYW5kIHRoZSB0b3RhbCBudW1iZXIKK3JlY29yZGVkIChib3RoIGFyZSB0aHJlZTogIzMvMykuIFRoZSB0eXBlIG9mIHByZWVtcHRpb24gdGhhdCB3YXMKK3VzZWQgKFBSRUVNUFQpLiBWUCwgS1AsIFNQLCBhbmQgSFAgYXJlIGFsd2F5cyB6ZXJvIGFuZCBhcmUKK3Jlc2VydmVkIGZvciBsYXRlciB1c2UuICNQIGlzIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVVMgKCNQOjIpLgogCi1UaGlzIHNob3dzIHRoYXQgdGhlIGN1cnJlbnQgdHJhY2VyIGlzICJpcnFzb2ZmIiB0cmFjaW5nIHRoZSB0aW1lIGZvciB3aGljaAotaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkLiBJdCBnaXZlcyB0aGUgdHJhY2UgdmVyc2lvbiBhbmQgdGhlIHZlcnNpb24KLW9mIHRoZSBrZXJuZWwgdXBvbiB3aGljaCB0aGlzIHdhcyBleGVjdXRlZCBvbiAoMi42LjI2LXJjOCkuIFRoZW4gaXQgZGlzcGxheXMKLXRoZSBtYXggbGF0ZW5jeSBpbiBtaWNyb3NlY3MgKDk3IHVzKS4gVGhlIG51bWJlciBvZiB0cmFjZSBlbnRyaWVzIGRpc3BsYXllZAotYW5kIHRoZSB0b3RhbCBudW1iZXIgcmVjb3JkZWQgKGJvdGggYXJlIHRocmVlOiAjMy8zKS4gVGhlIHR5cGUgb2YKLXByZWVtcHRpb24gdGhhdCB3YXMgdXNlZCAoUFJFRU1QVCkuIFZQLCBLUCwgU1AsIGFuZCBIUCBhcmUgYWx3YXlzIHplcm8KLWFuZCBhcmUgcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZS4gI1AgaXMgdGhlIG51bWJlciBvZiBvbmxpbmUgQ1BVUyAoI1A6MikuCitUaGUgdGFzayBpcyB0aGUgcHJvY2VzcyB0aGF0IHdhcyBydW5uaW5nIHdoZW4gdGhlIGxhdGVuY3kKK29jY3VycmVkLiAoc3dhcHBlciBwaWQ6IDApLgogCi1UaGUgdGFzayBpcyB0aGUgcHJvY2VzcyB0aGF0IHdhcyBydW5uaW5nIHdoZW4gdGhlIGxhdGVuY3kgb2NjdXJyZWQuCi0oc3dhcHBlciBwaWQ6IDApLgotCi1UaGUgc3RhcnQgYW5kIHN0b3AgKHRoZSBmdW5jdGlvbnMgaW4gd2hpY2ggdGhlIGludGVycnVwdHMgd2VyZSBkaXNhYmxlZCBhbmQKLWVuYWJsZWQgcmVzcGVjdGl2ZWx5KSB0aGF0IGNhdXNlZCB0aGUgbGF0ZW5jaWVzOgorVGhlIHN0YXJ0IGFuZCBzdG9wICh0aGUgZnVuY3Rpb25zIGluIHdoaWNoIHRoZSBpbnRlcnJ1cHRzIHdlcmUKK2Rpc2FibGVkIGFuZCBlbmFibGVkIHJlc3BlY3RpdmVseSkgdGhhdCBjYXVzZWQgdGhlIGxhdGVuY2llczoKIAogICBhcGljX3RpbWVyX2ludGVycnVwdCBpcyB3aGVyZSB0aGUgaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkLgogICBkb19zb2Z0aXJxIGlzIHdoZXJlIHRoZXkgd2VyZSBlbmFibGVkIGFnYWluLgpAQCAtMzA4LDEyICszNzMsMTIgQEAKIAlsYXRlbmN5X3RyYWNlIGZpbGUgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0cmFjZS4KIAogICBkZWxheTogVGhpcyBpcyBqdXN0IHRvIGhlbHAgY2F0Y2ggeW91ciBleWUgYSBiaXQgYmV0dGVyLiBBbmQKLQluZWVkcyB0byBiZSBmaXhlZCB0byBiZSBvbmx5IHJlbGF0aXZlIHRvIHRoZSBzYW1lIENQVS4KLQlUaGUgbWFya3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzCi0JY3VycmVudCB0cmFjZSBhbmQgdGhlIG5leHQgdHJhY2UuCi0JICchJyAtIGdyZWF0ZXIgdGhhbiBwcmVlbXB0X21hcmtfdGhyZXNoIChkZWZhdWx0IDEwMCkKLQkgJysnIC0gZ3JlYXRlciB0aGFuIDEgbWljcm9zZWNvbmQKLQkgJyAnIC0gbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEgbWljcm9zZWNvbmQuCisJIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGJlIG9ubHkgcmVsYXRpdmUgdG8gdGhlIHNhbWUgQ1BVLgorCSBUaGUgbWFya3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzCisJIGN1cnJlbnQgdHJhY2UgYW5kIHRoZSBuZXh0IHRyYWNlLgorCSAgJyEnIC0gZ3JlYXRlciB0aGFuIHByZWVtcHRfbWFya190aHJlc2ggKGRlZmF1bHQgMTAwKQorCSAgJysnIC0gZ3JlYXRlciB0aGFuIDEgbWljcm9zZWNvbmQKKwkgICcgJyAtIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxIG1pY3Jvc2Vjb25kLgogCiAgIFRoZSByZXN0IGlzIHRoZSBzYW1lIGFzIHRoZSAndHJhY2UnIGZpbGUuCiAKQEAgLTMyMSwxNCArMzg2LDE1IEBACiB0cmFjZV9vcHRpb25zCiAtLS0tLS0tLS0tLS0tCiAKLVRoZSB0cmFjZV9vcHRpb25zIGZpbGUgaXMgdXNlZCB0byBjb250cm9sIHdoYXQgZ2V0cyBwcmludGVkIGluIHRoZSB0cmFjZQotb3V0cHV0LiBUbyBzZWUgd2hhdCBpcyBhdmFpbGFibGUsIHNpbXBseSBjYXQgdGhlIGZpbGU6CitUaGUgdHJhY2Vfb3B0aW9ucyBmaWxlIGlzIHVzZWQgdG8gY29udHJvbCB3aGF0IGdldHMgcHJpbnRlZCBpbgordGhlIHRyYWNlIG91dHB1dC4gVG8gc2VlIHdoYXQgaXMgYXZhaWxhYmxlLCBzaW1wbHkgY2F0IHRoZSBmaWxlOgogCiAgIGNhdCAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCiAgIHByaW50LXBhcmVudCBub3N5bS1vZmZzZXQgbm9zeW0tYWRkciBub3ZlcmJvc2Ugbm9yYXcgbm9oZXggbm9iaW4gXAotIG5vYmxvY2sgbm9zdGFja3RyYWNlIG5vc2NoZWQtdHJlZSBub3VzZXJzdGFja3RyYWNlIG5vc3ltLXVzZXJvYmoKKyAgbm9ibG9jayBub3N0YWNrdHJhY2Ugbm9zY2hlZC10cmVlIG5vdXNlcnN0YWNrdHJhY2Ugbm9zeW0tdXNlcm9iagogCi1UbyBkaXNhYmxlIG9uZSBvZiB0aGUgb3B0aW9ucywgZWNobyBpbiB0aGUgb3B0aW9uIHByZXBlbmRlZCB3aXRoICJubyIuCitUbyBkaXNhYmxlIG9uZSBvZiB0aGUgb3B0aW9ucywgZWNobyBpbiB0aGUgb3B0aW9uIHByZXBlbmRlZCB3aXRoCisibm8iLgogCiAgIGVjaG8gbm9wcmludC1wYXJlbnQgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCiAKQEAgLTMzOCw4ICs0MDQsOCBAQAogCiBIZXJlIGFyZSB0aGUgYXZhaWxhYmxlIG9wdGlvbnM6CiAKLSAgcHJpbnQtcGFyZW50IC0gT24gZnVuY3Rpb24gdHJhY2VzLCBkaXNwbGF5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0JCWFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uIGJlaW5nIHRyYWNlZC4KKyAgcHJpbnQtcGFyZW50IC0gT24gZnVuY3Rpb24gdHJhY2VzLCBkaXNwbGF5IHRoZSBjYWxsaW5nIChwYXJlbnQpCisJCSBmdW5jdGlvbiBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvbiBiZWluZyB0cmFjZWQuCiAKICAgcHJpbnQtcGFyZW50OgogICAgYmFzaC00MDAwICBbMDFdICAxNDc3LjYwNjY5NDogc2ltcGxlX3N0cnRvdWwgPC1zdHJpY3Rfc3RydG91bApAQCAtMzQ4LDE1ICs0MTQsMTYgQEAKICAgIGJhc2gtNDAwMCAgWzAxXSAgMTQ3Ny42MDY2OTQ6IHNpbXBsZV9zdHJ0b3VsCiAKIAotICBzeW0tb2Zmc2V0IC0gRGlzcGxheSBub3Qgb25seSB0aGUgZnVuY3Rpb24gbmFtZSwgYnV0IGFsc28gdGhlIG9mZnNldAotCQlpbiB0aGUgZnVuY3Rpb24uIEZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIHNlZWluZyBqdXN0Ci0JCSJrdGltZV9nZXQiLCB5b3Ugd2lsbCBzZWUgImt0aW1lX2dldCsweGIvMHgyMCIuCisgIHN5bS1vZmZzZXQgLSBEaXNwbGF5IG5vdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lLCBidXQgYWxzbyB0aGUKKwkgICAgICAgb2Zmc2V0IGluIHRoZSBmdW5jdGlvbi4gRm9yIGV4YW1wbGUsIGluc3RlYWQgb2YKKwkgICAgICAgc2VlaW5nIGp1c3QgImt0aW1lX2dldCIsIHlvdSB3aWxsIHNlZQorCSAgICAgICAia3RpbWVfZ2V0KzB4Yi8weDIwIi4KIAogICBzeW0tb2Zmc2V0OgogICAgYmFzaC00MDAwICBbMDFdICAxNDc3LjYwNjY5NDogc2ltcGxlX3N0cnRvdWwrMHg2LzB4YTAKIAotICBzeW0tYWRkciAtIHRoaXMgd2lsbCBhbHNvIGRpc3BsYXkgdGhlIGZ1bmN0aW9uIGFkZHJlc3MgYXMgd2VsbCBhcwotCQl0aGUgZnVuY3Rpb24gbmFtZS4KKyAgc3ltLWFkZHIgLSB0aGlzIHdpbGwgYWxzbyBkaXNwbGF5IHRoZSBmdW5jdGlvbiBhZGRyZXNzIGFzIHdlbGwKKwkgICAgIGFzIHRoZSBmdW5jdGlvbiBuYW1lLgogCiAgIHN5bS1hZGRyOgogICAgYmFzaC00MDAwICBbMDFdICAxNDc3LjYwNjY5NDogc2ltcGxlX3N0cnRvdWwgPGMwMzM5MzQ2PgpAQCAtMzY2LDM1ICs0MzMsNDEgQEAKICAgICBiYXNoICA0MDAwIDEgMCAwMDAwMDAwMCAwMDAxMGE5NSBbNTgxMjdkMjZdIDE3MjAuNDE1bXMgXAogICAgICgrMC4wMDBtcyk6IHNpbXBsZV9zdHJ0b3VsIChzdHJpY3Rfc3RydG91bCkKIAotICByYXcgLSBUaGlzIHdpbGwgZGlzcGxheSByYXcgbnVtYmVycy4gVGhpcyBvcHRpb24gaXMgYmVzdCBmb3IgdXNlIHdpdGgKLQl1c2VyIGFwcGxpY2F0aW9ucyB0aGF0IGNhbiB0cmFuc2xhdGUgdGhlIHJhdyBudW1iZXJzIGJldHRlciB0aGFuCi0JaGF2aW5nIGl0IGRvbmUgaW4gdGhlIGtlcm5lbC4KKyAgcmF3IC0gVGhpcyB3aWxsIGRpc3BsYXkgcmF3IG51bWJlcnMuIFRoaXMgb3B0aW9uIGlzIGJlc3QgZm9yCisJdXNlIHdpdGggdXNlciBhcHBsaWNhdGlvbnMgdGhhdCBjYW4gdHJhbnNsYXRlIHRoZSByYXcKKwludW1iZXJzIGJldHRlciB0aGFuIGhhdmluZyBpdCBkb25lIGluIHRoZSBrZXJuZWwuCiAKLSAgaGV4IC0gU2ltaWxhciB0byByYXcsIGJ1dCB0aGUgbnVtYmVycyB3aWxsIGJlIGluIGEgaGV4YWRlY2ltYWwgZm9ybWF0LgorICBoZXggLSBTaW1pbGFyIHRvIHJhdywgYnV0IHRoZSBudW1iZXJzIHdpbGwgYmUgaW4gYSBoZXhhZGVjaW1hbAorCWZvcm1hdC4KIAogICBiaW4gLSBUaGlzIHdpbGwgcHJpbnQgb3V0IHRoZSBmb3JtYXRzIGluIHJhdyBiaW5hcnkuCiAKICAgYmxvY2sgLSBUQkQgKG5lZWRzIHVwZGF0ZSkKIAotICBzdGFja3RyYWNlIC0gVGhpcyBpcyBvbmUgb2YgdGhlIG9wdGlvbnMgdGhhdCBjaGFuZ2VzIHRoZSB0cmFjZSBpdHNlbGYuCi0JCVdoZW4gYSB0cmFjZSBpcyByZWNvcmRlZCwgc28gaXMgdGhlIHN0YWNrIG9mIGZ1bmN0aW9ucy4KLQkJVGhpcyBhbGxvd3MgZm9yIGJhY2sgdHJhY2VzIG9mIHRyYWNlIHNpdGVzLgorICBzdGFja3RyYWNlIC0gVGhpcyBpcyBvbmUgb2YgdGhlIG9wdGlvbnMgdGhhdCBjaGFuZ2VzIHRoZSB0cmFjZQorCSAgICAgICBpdHNlbGYuIFdoZW4gYSB0cmFjZSBpcyByZWNvcmRlZCwgc28gaXMgdGhlIHN0YWNrCisJICAgICAgIG9mIGZ1bmN0aW9ucy4gVGhpcyBhbGxvd3MgZm9yIGJhY2sgdHJhY2VzIG9mCisJICAgICAgIHRyYWNlIHNpdGVzLgogCi0gIHVzZXJzdGFja3RyYWNlIC0gVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgdHJhY2UuCi0JCSAgIEl0IHJlY29yZHMgYSBzdGFja3RyYWNlIG9mIHRoZSBjdXJyZW50IHVzZXJzcGFjZSB0aHJlYWQuCisgIHVzZXJzdGFja3RyYWNlIC0gVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgdHJhY2UuIEl0IHJlY29yZHMgYQorCQkgICBzdGFja3RyYWNlIG9mIHRoZSBjdXJyZW50IHVzZXJzcGFjZSB0aHJlYWQuCiAKLSAgc3ltLXVzZXJvYmogLSB3aGVuIHVzZXIgc3RhY2t0cmFjZSBhcmUgZW5hYmxlZCwgbG9vayB1cCB3aGljaCBvYmplY3QgdGhlCi0JCWFkZHJlc3MgYmVsb25ncyB0bywgYW5kIHByaW50IGEgcmVsYXRpdmUgYWRkcmVzcwotCQlUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gQVNMUiBpcyBvbiwgb3RoZXJ3aXNlIHlvdSBkb24ndAotCQlnZXQgYSBjaGFuY2UgdG8gcmVzb2x2ZSB0aGUgYWRkcmVzcyB0byBvYmplY3QvZmlsZS9saW5lIGFmdGVyIHRoZSBhcHAgaXMgbm8KLQkJbG9uZ2VyIHJ1bm5pbmcKKyAgc3ltLXVzZXJvYmogLSB3aGVuIHVzZXIgc3RhY2t0cmFjZSBhcmUgZW5hYmxlZCwgbG9vayB1cCB3aGljaAorCQlvYmplY3QgdGhlIGFkZHJlc3MgYmVsb25ncyB0bywgYW5kIHByaW50IGEKKwkJcmVsYXRpdmUgYWRkcmVzcy4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuCisJCUFTTFIgaXMgb24sIG90aGVyd2lzZSB5b3UgZG9uJ3QgZ2V0IGEgY2hhbmNlIHRvCisJCXJlc29sdmUgdGhlIGFkZHJlc3MgdG8gb2JqZWN0L2ZpbGUvbGluZSBhZnRlcgorCQl0aGUgYXBwIGlzIG5vIGxvbmdlciBydW5uaW5nCiAKLQkJVGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgd2hlbiB5b3UgcmVhZCB0cmFjZSx0cmFjZV9waXBlLGxhdGVuY3lfdHJhY2UuIEV4YW1wbGU6CisJCVRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIHdoZW4geW91IHJlYWQKKwkJdHJhY2UsdHJhY2VfcGlwZSxsYXRlbmN5X3RyYWNlLiBFeGFtcGxlOgogCiAJCWEub3V0LTE2MjMgIFswMDBdIDQwODc0LjQ2NTA2ODogL3Jvb3QvYS5vdXRbKzB4NDgwXSA8LS9yb290L2Eub3V0WyswCiB4NDk0XSA8LSAvcm9vdC9hLm91dFsrMHg0YThdIDwtIC9saWIvbGliYy0yLjcuc29bKzB4MWUxYTZdCiAKLSAgc2NoZWQtdHJlZSAtIFRCRCAoYW55IHVzZXJzPz8pCisgIHNjaGVkLXRyZWUgLSB0cmFjZSBhbGwgdGFza3MgdGhhdCBhcmUgb24gdGhlIHJ1bnF1ZXVlLCBhdAorCSAgICAgICBldmVyeSBzY2hlZHVsaW5nIGV2ZW50LiBXaWxsIGFkZCBvdmVyaGVhZCBpZgorCSAgICAgICB0aGVyZSdzIGEgbG90IG9mIHRhc2tzIHJ1bm5pbmcgYXQgb25jZS4KIAogCiBzY2hlZF9zd2l0Y2gKQEAgLTQzMSwxOCArNTA0LDE5IEBACiAgWy4uLl0KIAogCi1BcyB3ZSBoYXZlIGRpc2N1c3NlZCBwcmV2aW91c2x5IGFib3V0IHRoaXMgZm9ybWF0LCB0aGUgaGVhZGVyIHNob3dzCi10aGUgbmFtZSBvZiB0aGUgdHJhY2UgYW5kIHBvaW50cyB0byB0aGUgb3B0aW9ucy4gVGhlICJGVU5DVElPTiIKLWlzIGEgbWlzbm9tZXIgc2luY2UgaGVyZSBpdCByZXByZXNlbnRzIHRoZSB3YWtlIHVwcyBhbmQgY29udGV4dAotc3dpdGNoZXMuCitBcyB3ZSBoYXZlIGRpc2N1c3NlZCBwcmV2aW91c2x5IGFib3V0IHRoaXMgZm9ybWF0LCB0aGUgaGVhZGVyCitzaG93cyB0aGUgbmFtZSBvZiB0aGUgdHJhY2UgYW5kIHBvaW50cyB0byB0aGUgb3B0aW9ucy4gVGhlCisiRlVOQ1RJT04iIGlzIGEgbWlzbm9tZXIgc2luY2UgaGVyZSBpdCByZXByZXNlbnRzIHRoZSB3YWtlIHVwcworYW5kIGNvbnRleHQgc3dpdGNoZXMuCiAKLVRoZSBzY2hlZF9zd2l0Y2ggZmlsZSBvbmx5IGxpc3RzIHRoZSB3YWtlIHVwcyAocmVwcmVzZW50ZWQgd2l0aCAnKycpCi1hbmQgY29udGV4dCBzd2l0Y2hlcyAoJz09PicpIHdpdGggdGhlIHByZXZpb3VzIHRhc2sgb3IgY3VycmVudCB0YXNrCi1maXJzdCBmb2xsb3dlZCBieSB0aGUgbmV4dCB0YXNrIG9yIHRhc2sgd2FraW5nIHVwLiBUaGUgZm9ybWF0IGZvciBib3RoCi1vZiB0aGVzZSBpcyBQSUQ6S0VSTkVMLVBSSU86VEFTSy1TVEFURS4gUmVtZW1iZXIgdGhhdCB0aGUgS0VSTkVMLVBSSU8KLWlzIHRoZSBpbnZlcnNlIG9mIHRoZSBhY3R1YWwgcHJpb3JpdHkgd2l0aCB6ZXJvICgwKSBiZWluZyB0aGUgaGlnaGVzdAotcHJpb3JpdHkgYW5kIHRoZSBuaWNlIHZhbHVlcyBzdGFydGluZyBhdCAxMDAgKG5pY2UgLTIwKS4gQmVsb3cgaXMKLWEgcXVpY2sgY2hhcnQgdG8gbWFwIHRoZSBrZXJuZWwgcHJpb3JpdHkgdG8gdXNlciBsYW5kIHByaW9yaXRpZXMuCitUaGUgc2NoZWRfc3dpdGNoIGZpbGUgb25seSBsaXN0cyB0aGUgd2FrZSB1cHMgKHJlcHJlc2VudGVkIHdpdGgKKycrJykgYW5kIGNvbnRleHQgc3dpdGNoZXMgKCc9PT4nKSB3aXRoIHRoZSBwcmV2aW91cyB0YXNrIG9yCitjdXJyZW50IHRhc2sgZmlyc3QgZm9sbG93ZWQgYnkgdGhlIG5leHQgdGFzayBvciB0YXNrIHdha2luZyB1cC4KK1RoZSBmb3JtYXQgZm9yIGJvdGggb2YgdGhlc2UgaXMgUElEOktFUk5FTC1QUklPOlRBU0stU1RBVEUuCitSZW1lbWJlciB0aGF0IHRoZSBLRVJORUwtUFJJTyBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgYWN0dWFsCitwcmlvcml0eSB3aXRoIHplcm8gKDApIGJlaW5nIHRoZSBoaWdoZXN0IHByaW9yaXR5IGFuZCB0aGUgbmljZQordmFsdWVzIHN0YXJ0aW5nIGF0IDEwMCAobmljZSAtMjApLiBCZWxvdyBpcyBhIHF1aWNrIGNoYXJ0IHRvIG1hcAordGhlIGtlcm5lbCBwcmlvcml0eSB0byB1c2VyIGxhbmQgcHJpb3JpdGllcy4KIAogICBLZXJuZWwgcHJpb3JpdHk6IDAgdG8gOTkgICAgPT0+IHVzZXIgUlQgcHJpb3JpdHkgOTkgdG8gMAogICBLZXJuZWwgcHJpb3JpdHk6IDEwMCB0byAxMzkgPT0+IHVzZXIgbmljZSAtMjAgdG8gMTkKQEAgLTQ2MywxMCArNTM3LDEwIEBACiBmdHJhY2VfZW5hYmxlZAogLS0tLS0tLS0tLS0tLS0KIAotVGhlIGZvbGxvd2luZyB0cmFjZXJzIChsaXN0ZWQgYmVsb3cpIGdpdmUgZGlmZmVyZW50IG91dHB1dCBkZXBlbmRpbmcKLW9uIHdoZXRoZXIgb3Igbm90IHRoZSBzeXNjdGwgZnRyYWNlX2VuYWJsZWQgaXMgc2V0LiBUbyBzZXQgZnRyYWNlX2VuYWJsZWQsCi1vbmUgY2FuIGVpdGhlciB1c2UgdGhlIHN5c2N0bCBmdW5jdGlvbiBvciBzZXQgaXQgdmlhIHRoZSBwcm9jCi1maWxlIHN5c3RlbSBpbnRlcmZhY2UuCitUaGUgZm9sbG93aW5nIHRyYWNlcnMgKGxpc3RlZCBiZWxvdykgZ2l2ZSBkaWZmZXJlbnQgb3V0cHV0CitkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhlIHN5c2N0bCBmdHJhY2VfZW5hYmxlZCBpcyBzZXQuIFRvCitzZXQgZnRyYWNlX2VuYWJsZWQsIG9uZSBjYW4gZWl0aGVyIHVzZSB0aGUgc3lzY3RsIGZ1bmN0aW9uIG9yCitzZXQgaXQgdmlhIHRoZSBwcm9jIGZpbGUgc3lzdGVtIGludGVyZmFjZS4KIAogICBzeXNjdGwga2VybmVsLmZ0cmFjZV9lbmFibGVkPTEKIApAQCAtNDc0LDEyICs1NDgsMTIgQEAKIAogICBlY2hvIDEgPiAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkCiAKLVRvIGRpc2FibGUgZnRyYWNlX2VuYWJsZWQgc2ltcGx5IHJlcGxhY2UgdGhlICcxJyB3aXRoICcwJyBpbgotdGhlIGFib3ZlIGNvbW1hbmRzLgorVG8gZGlzYWJsZSBmdHJhY2VfZW5hYmxlZCBzaW1wbHkgcmVwbGFjZSB0aGUgJzEnIHdpdGggJzAnIGluIHRoZQorYWJvdmUgY29tbWFuZHMuCiAKLVdoZW4gZnRyYWNlX2VuYWJsZWQgaXMgc2V0IHRoZSB0cmFjZXJzIHdpbGwgYWxzbyByZWNvcmQgdGhlIGZ1bmN0aW9ucwotdGhhdCBhcmUgd2l0aGluIHRoZSB0cmFjZS4gVGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgdHJhY2Vycwotd2lsbCBhbHNvIHNob3cgYW4gZXhhbXBsZSB3aXRoIGZ0cmFjZSBlbmFibGVkLgorV2hlbiBmdHJhY2VfZW5hYmxlZCBpcyBzZXQgdGhlIHRyYWNlcnMgd2lsbCBhbHNvIHJlY29yZCB0aGUKK2Z1bmN0aW9ucyB0aGF0IGFyZSB3aXRoaW4gdGhlIHRyYWNlLiBUaGUgZGVzY3JpcHRpb25zIG9mIHRoZQordHJhY2VycyB3aWxsIGFsc28gc2hvdyBhbiBleGFtcGxlIHdpdGggZnRyYWNlIGVuYWJsZWQuCiAKIAogaXJxc29mZgpAQCAtNDg3LDE3ICs1NjEsMTggQEAKIAogV2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgdGhlIENQVSBjYW4gbm90IHJlYWN0IHRvIGFueSBvdGhlcgogZXh0ZXJuYWwgZXZlbnQgKGJlc2lkZXMgTk1JcyBhbmQgU01JcykuIFRoaXMgcHJldmVudHMgdGhlIHRpbWVyCi1pbnRlcnJ1cHQgZnJvbSB0cmlnZ2VyaW5nIG9yIHRoZSBtb3VzZSBpbnRlcnJ1cHQgZnJvbSBsZXR0aW5nIHRoZQota2VybmVsIGtub3cgb2YgYSBuZXcgbW91c2UgZXZlbnQuIFRoZSByZXN1bHQgaXMgYSBsYXRlbmN5IHdpdGggdGhlCi1yZWFjdGlvbiB0aW1lLgoraW50ZXJydXB0IGZyb20gdHJpZ2dlcmluZyBvciB0aGUgbW91c2UgaW50ZXJydXB0IGZyb20gbGV0dGluZwordGhlIGtlcm5lbCBrbm93IG9mIGEgbmV3IG1vdXNlIGV2ZW50LiBUaGUgcmVzdWx0IGlzIGEgbGF0ZW5jeQord2l0aCB0aGUgcmVhY3Rpb24gdGltZS4KIAotVGhlIGlycXNvZmYgdHJhY2VyIHRyYWNrcyB0aGUgdGltZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCi1XaGVuIGEgbmV3IG1heGltdW0gbGF0ZW5jeSBpcyBoaXQsIHRoZSB0cmFjZXIgc2F2ZXMgdGhlIHRyYWNlIGxlYWRpbmcgdXAKLXRvIHRoYXQgbGF0ZW5jeSBwb2ludCBzbyB0aGF0IGV2ZXJ5IHRpbWUgYSBuZXcgbWF4aW11bSBpcyByZWFjaGVkLCB0aGUgb2xkCi1zYXZlZCB0cmFjZSBpcyBkaXNjYXJkZWQgYW5kIHRoZSBuZXcgdHJhY2UgaXMgc2F2ZWQuCitUaGUgaXJxc29mZiB0cmFjZXIgdHJhY2tzIHRoZSB0aW1lIGZvciB3aGljaCBpbnRlcnJ1cHRzIGFyZQorZGlzYWJsZWQuIFdoZW4gYSBuZXcgbWF4aW11bSBsYXRlbmN5IGlzIGhpdCwgdGhlIHRyYWNlciBzYXZlcwordGhlIHRyYWNlIGxlYWRpbmcgdXAgdG8gdGhhdCBsYXRlbmN5IHBvaW50IHNvIHRoYXQgZXZlcnkgdGltZSBhCituZXcgbWF4aW11bSBpcyByZWFjaGVkLCB0aGUgb2xkIHNhdmVkIHRyYWNlIGlzIGRpc2NhcmRlZCBhbmQgdGhlCituZXcgdHJhY2UgaXMgc2F2ZWQuCiAKLVRvIHJlc2V0IHRoZSBtYXhpbXVtLCBlY2hvIDAgaW50byB0cmFjaW5nX21heF9sYXRlbmN5LiBIZXJlIGlzIGFuCi1leGFtcGxlOgorVG8gcmVzZXQgdGhlIG1heGltdW0sIGVjaG8gMCBpbnRvIHRyYWNpbmdfbWF4X2xhdGVuY3kuIEhlcmUgaXMKK2FuIGV4YW1wbGU6CiAKICAjIGVjaG8gaXJxc29mZiA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDAgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CkBAIC01MzIsMTAgKzYwNywxMSBAQAogCiAKIEhlcmUgd2Ugc2VlIHRoYXQgdGhhdCB3ZSBoYWQgYSBsYXRlbmN5IG9mIDEyIG1pY3Jvc2VjcyAod2hpY2ggaXMKLXZlcnkgZ29vZCkuIFRoZSBfd3JpdGVfbG9ja19pcnEgaW4gc3lzX3NldHBnaWQgZGlzYWJsZWQgaW50ZXJydXB0cy4KLVRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIDEyIGFuZCB0aGUgZGlzcGxheWVkIHRpbWVzdGFtcCAxNHVzIG9jY3VycmVkCi1iZWNhdXNlIHRoZSBjbG9jayB3YXMgaW5jcmVtZW50ZWQgYmV0d2VlbiB0aGUgdGltZSBvZiByZWNvcmRpbmcgdGhlIG1heAotbGF0ZW5jeSBhbmQgdGhlIHRpbWUgb2YgcmVjb3JkaW5nIHRoZSBmdW5jdGlvbiB0aGF0IGhhZCB0aGF0IGxhdGVuY3kuCit2ZXJ5IGdvb2QpLiBUaGUgX3dyaXRlX2xvY2tfaXJxIGluIHN5c19zZXRwZ2lkIGRpc2FibGVkCitpbnRlcnJ1cHRzLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAxMiBhbmQgdGhlIGRpc3BsYXllZAordGltZXN0YW1wIDE0dXMgb2NjdXJyZWQgYmVjYXVzZSB0aGUgY2xvY2sgd2FzIGluY3JlbWVudGVkCitiZXR3ZWVuIHRoZSB0aW1lIG9mIHJlY29yZGluZyB0aGUgbWF4IGxhdGVuY3kgYW5kIHRoZSB0aW1lIG9mCityZWNvcmRpbmcgdGhlIGZ1bmN0aW9uIHRoYXQgaGFkIHRoYXQgbGF0ZW5jeS4KIAogTm90ZSB0aGUgYWJvdmUgZXhhbXBsZSBoYWQgZnRyYWNlX2VuYWJsZWQgbm90IHNldC4gSWYgd2Ugc2V0IHRoZQogZnRyYWNlX2VuYWJsZWQsIHdlIGdldCBhIG11Y2ggbGFyZ2VyIG91dHB1dDoKQEAgLTU4NiwyNCArNjYyLDI0IEBACiAKIAogSGVyZSB3ZSB0cmFjZWQgYSA1MCBtaWNyb3NlY29uZCBsYXRlbmN5LiBCdXQgd2UgYWxzbyBzZWUgYWxsIHRoZQotZnVuY3Rpb25zIHRoYXQgd2VyZSBjYWxsZWQgZHVyaW5nIHRoYXQgdGltZS4gTm90ZSB0aGF0IGJ5IGVuYWJsaW5nCi1mdW5jdGlvbiB0cmFjaW5nLCB3ZSBpbmN1ciBhbiBhZGRlZCBvdmVyaGVhZC4gVGhpcyBvdmVyaGVhZCBtYXkKLWV4dGVuZCB0aGUgbGF0ZW5jeSB0aW1lcy4gQnV0IG5ldmVydGhlbGVzcywgdGhpcyB0cmFjZSBoYXMgcHJvdmlkZWQKLXNvbWUgdmVyeSBoZWxwZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KK2Z1bmN0aW9ucyB0aGF0IHdlcmUgY2FsbGVkIGR1cmluZyB0aGF0IHRpbWUuIE5vdGUgdGhhdCBieQorZW5hYmxpbmcgZnVuY3Rpb24gdHJhY2luZywgd2UgaW5jdXIgYW4gYWRkZWQgb3ZlcmhlYWQuIFRoaXMKK292ZXJoZWFkIG1heSBleHRlbmQgdGhlIGxhdGVuY3kgdGltZXMuIEJ1dCBuZXZlcnRoZWxlc3MsIHRoaXMKK3RyYWNlIGhhcyBwcm92aWRlZCBzb21lIHZlcnkgaGVscGZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCiAKIAogcHJlZW1wdG9mZgogLS0tLS0tLS0tLQogCi1XaGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQsIHdlIG1heSBiZSBhYmxlIHRvIHJlY2VpdmUgaW50ZXJydXB0cyBidXQKLXRoZSB0YXNrIGNhbm5vdCBiZSBwcmVlbXB0ZWQgYW5kIGEgaGlnaGVyIHByaW9yaXR5IHRhc2sgbXVzdCB3YWl0Ci1mb3IgcHJlZW1wdGlvbiB0byBiZSBlbmFibGVkIGFnYWluIGJlZm9yZSBpdCBjYW4gcHJlZW1wdCBhIGxvd2VyCi1wcmlvcml0eSB0YXNrLgorV2hlbiBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLCB3ZSBtYXkgYmUgYWJsZSB0byByZWNlaXZlCitpbnRlcnJ1cHRzIGJ1dCB0aGUgdGFzayBjYW5ub3QgYmUgcHJlZW1wdGVkIGFuZCBhIGhpZ2hlcgorcHJpb3JpdHkgdGFzayBtdXN0IHdhaXQgZm9yIHByZWVtcHRpb24gdG8gYmUgZW5hYmxlZCBhZ2FpbgorYmVmb3JlIGl0IGNhbiBwcmVlbXB0IGEgbG93ZXIgcHJpb3JpdHkgdGFzay4KIAogVGhlIHByZWVtcHRvZmYgdHJhY2VyIHRyYWNlcyB0aGUgcGxhY2VzIHRoYXQgZGlzYWJsZSBwcmVlbXB0aW9uLgotTGlrZSB0aGUgaXJxc29mZiB0cmFjZXIsIGl0IHJlY29yZHMgdGhlIG1heGltdW0gbGF0ZW5jeSBmb3Igd2hpY2ggcHJlZW1wdGlvbgotd2FzIGRpc2FibGVkLiBUaGUgY29udHJvbCBvZiBwcmVlbXB0b2ZmIHRyYWNlciBpcyBtdWNoIGxpa2UgdGhlIGlycXNvZmYKLXRyYWNlci4KK0xpa2UgdGhlIGlycXNvZmYgdHJhY2VyLCBpdCByZWNvcmRzIHRoZSBtYXhpbXVtIGxhdGVuY3kgZm9yCit3aGljaCBwcmVlbXB0aW9uIHdhcyBkaXNhYmxlZC4gVGhlIGNvbnRyb2wgb2YgcHJlZW1wdG9mZiB0cmFjZXIKK2lzIG11Y2ggbGlrZSB0aGUgaXJxc29mZiB0cmFjZXIuCiAKICAjIGVjaG8gcHJlZW1wdG9mZiA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDAgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CkBAIC02MzcsMTEgKzcxMywxMiBAQAogICAgIHNzaGQtNDI2MSAgMGQuczEgICAzMHVzIDogdHJhY2VfcHJlZW1wdF9vbiAoX19kb19zb2Z0aXJxKQogCiAKLVRoaXMgaGFzIHNvbWUgbW9yZSBjaGFuZ2VzLiBQcmVlbXB0aW9uIHdhcyBkaXNhYmxlZCB3aGVuIGFuIGludGVycnVwdAotY2FtZSBpbiAobm90aWNlIHRoZSAnaCcpLCBhbmQgd2FzIGVuYWJsZWQgd2hpbGUgZG9pbmcgYSBzb2Z0aXJxLgotKG5vdGljZSB0aGUgJ3MnKS4gQnV0IHdlIGFsc28gc2VlIHRoYXQgaW50ZXJydXB0cyBoYXZlIGJlZW4gZGlzYWJsZWQKLXdoZW4gZW50ZXJpbmcgdGhlIHByZWVtcHQgb2ZmIHNlY3Rpb24gYW5kIGxlYXZpbmcgaXQgKHRoZSAnZCcpLgotV2UgZG8gbm90IGtub3cgaWYgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQgaW4gdGhlIG1lYW4gdGltZS4KK1RoaXMgaGFzIHNvbWUgbW9yZSBjaGFuZ2VzLiBQcmVlbXB0aW9uIHdhcyBkaXNhYmxlZCB3aGVuIGFuCitpbnRlcnJ1cHQgY2FtZSBpbiAobm90aWNlIHRoZSAnaCcpLCBhbmQgd2FzIGVuYWJsZWQgd2hpbGUgZG9pbmcKK2Egc29mdGlycS4gKG5vdGljZSB0aGUgJ3MnKS4gQnV0IHdlIGFsc28gc2VlIHRoYXQgaW50ZXJydXB0cworaGF2ZSBiZWVuIGRpc2FibGVkIHdoZW4gZW50ZXJpbmcgdGhlIHByZWVtcHQgb2ZmIHNlY3Rpb24gYW5kCitsZWF2aW5nIGl0ICh0aGUgJ2QnKS4gV2UgZG8gbm90IGtub3cgaWYgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQKK2luIHRoZSBtZWFuIHRpbWUuCiAKICMgdHJhY2VyOiBwcmVlbXB0b2ZmCiAjCkBAIC03MDAsMjggKzc3NywzMCBAQAogICAgIHNzaGQtNDI2MSAgMGQuczEgICA2NHVzIDogdHJhY2VfcHJlZW1wdF9vbiAoX19kb19zb2Z0aXJxKQogCiAKLVRoZSBhYm92ZSBpcyBhbiBleGFtcGxlIG9mIHRoZSBwcmVlbXB0b2ZmIHRyYWNlIHdpdGggZnRyYWNlX2VuYWJsZWQKLXNldC4gSGVyZSB3ZSBzZWUgdGhhdCBpbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQgdGhlIGVudGlyZSB0aW1lLgotVGhlIGlycV9lbnRlciBjb2RlIGxldHMgdXMga25vdyB0aGF0IHdlIGVudGVyZWQgYW4gaW50ZXJydXB0ICdoJy4KLUJlZm9yZSB0aGF0LCB0aGUgZnVuY3Rpb25zIGJlaW5nIHRyYWNlZCBzdGlsbCBzaG93IHRoYXQgaXQgaXMgbm90Ci1pbiBhbiBpbnRlcnJ1cHQsIGJ1dCB3ZSBjYW4gc2VlIGZyb20gdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIHRoYXQKLXRoaXMgaXMgbm90IHRoZSBjYXNlLgorVGhlIGFib3ZlIGlzIGFuIGV4YW1wbGUgb2YgdGhlIHByZWVtcHRvZmYgdHJhY2Ugd2l0aAorZnRyYWNlX2VuYWJsZWQgc2V0LiBIZXJlIHdlIHNlZSB0aGF0IGludGVycnVwdHMgd2VyZSBkaXNhYmxlZAordGhlIGVudGlyZSB0aW1lLiBUaGUgaXJxX2VudGVyIGNvZGUgbGV0cyB1cyBrbm93IHRoYXQgd2UgZW50ZXJlZAorYW4gaW50ZXJydXB0ICdoJy4gQmVmb3JlIHRoYXQsIHRoZSBmdW5jdGlvbnMgYmVpbmcgdHJhY2VkIHN0aWxsCitzaG93IHRoYXQgaXQgaXMgbm90IGluIGFuIGludGVycnVwdCwgYnV0IHdlIGNhbiBzZWUgZnJvbSB0aGUKK2Z1bmN0aW9ucyB0aGVtc2VsdmVzIHRoYXQgdGhpcyBpcyBub3QgdGhlIGNhc2UuCiAKLU5vdGljZSB0aGF0IF9fZG9fc29mdGlycSB3aGVuIGNhbGxlZCBkb2VzIG5vdCBoYXZlIGEgcHJlZW1wdF9jb3VudC4KLUl0IG1heSBzZWVtIHRoYXQgd2UgbWlzc2VkIGEgcHJlZW1wdCBlbmFibGluZy4gV2hhdCByZWFsbHkgaGFwcGVuZWQKLWlzIHRoYXQgdGhlIHByZWVtcHQgY291bnQgaXMgaGVsZCBvbiB0aGUgdGhyZWFkJ3Mgc3RhY2sgYW5kIHdlCi1zd2l0Y2hlZCB0byB0aGUgc29mdGlycSBzdGFjayAoNEsgc3RhY2tzIGluIGVmZmVjdCkuIFRoZSBjb2RlCi1kb2VzIG5vdCBjb3B5IHRoZSBwcmVlbXB0IGNvdW50LCBidXQgYmVjYXVzZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwKLXdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LiBIYXZpbmcgYSB0cmFjZXIgbGlrZSB0aGlzIGlzIGdvb2QKLWZvciBsZXR0aW5nIHBlb3BsZSBrbm93IHdoYXQgcmVhbGx5IGhhcHBlbnMgaW5zaWRlIHRoZSBrZXJuZWwuCitOb3RpY2UgdGhhdCBfX2RvX3NvZnRpcnEgd2hlbiBjYWxsZWQgZG9lcyBub3QgaGF2ZSBhCitwcmVlbXB0X2NvdW50LiBJdCBtYXkgc2VlbSB0aGF0IHdlIG1pc3NlZCBhIHByZWVtcHQgZW5hYmxpbmcuCitXaGF0IHJlYWxseSBoYXBwZW5lZCBpcyB0aGF0IHRoZSBwcmVlbXB0IGNvdW50IGlzIGhlbGQgb24gdGhlCit0aHJlYWQncyBzdGFjayBhbmQgd2Ugc3dpdGNoZWQgdG8gdGhlIHNvZnRpcnEgc3RhY2sgKDRLIHN0YWNrcworaW4gZWZmZWN0KS4gVGhlIGNvZGUgZG9lcyBub3QgY29weSB0aGUgcHJlZW1wdCBjb3VudCwgYnV0CitiZWNhdXNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB3ZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dAoraXQuIEhhdmluZyBhIHRyYWNlciBsaWtlIHRoaXMgaXMgZ29vZCBmb3IgbGV0dGluZyBwZW9wbGUga25vdword2hhdCByZWFsbHkgaGFwcGVucyBpbnNpZGUgdGhlIGtlcm5lbC4KIAogCiBwcmVlbXB0aXJxc29mZgogLS0tLS0tLS0tLS0tLS0KIAotS25vd2luZyB0aGUgbG9jYXRpb25zIHRoYXQgaGF2ZSBpbnRlcnJ1cHRzIGRpc2FibGVkIG9yIHByZWVtcHRpb24KLWRpc2FibGVkIGZvciB0aGUgbG9uZ2VzdCB0aW1lcyBpcyBoZWxwZnVsLiBCdXQgc29tZXRpbWVzIHdlIHdvdWxkCi1saWtlIHRvIGtub3cgd2hlbiBlaXRoZXIgcHJlZW1wdGlvbiBhbmQvb3IgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCitLbm93aW5nIHRoZSBsb2NhdGlvbnMgdGhhdCBoYXZlIGludGVycnVwdHMgZGlzYWJsZWQgb3IKK3ByZWVtcHRpb24gZGlzYWJsZWQgZm9yIHRoZSBsb25nZXN0IHRpbWVzIGlzIGhlbHBmdWwuIEJ1dAorc29tZXRpbWVzIHdlIHdvdWxkIGxpa2UgdG8ga25vdyB3aGVuIGVpdGhlciBwcmVlbXB0aW9uIGFuZC9vcgoraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCiAKIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZToKIApAQCAtNzQxLDExICs4MjAsMTMgQEAKIGNhbGxfZnVuY3Rpb25fd2l0aF9pcnFzX2FuZF9wcmVlbXB0aW9uX29mZigpIGFuZAogY2FsbF9mdW5jdGlvbl93aXRoX3ByZWVtcHRpb25fb2ZmKCkuCiAKLUJ1dCBuZWl0aGVyIHdpbGwgdHJhY2UgdGhlIHRpbWUgdGhhdCBpbnRlcnJ1cHRzIGFuZC9vciBwcmVlbXB0aW9uCi1pcyBkaXNhYmxlZC4gVGhpcyB0b3RhbCB0aW1lIGlzIHRoZSB0aW1lIHRoYXQgd2UgY2FuIG5vdCBzY2hlZHVsZS4KLVRvIHJlY29yZCB0aGlzIHRpbWUsIHVzZSB0aGUgcHJlZW1wdGlycXNvZmYgdHJhY2VyLgorQnV0IG5laXRoZXIgd2lsbCB0cmFjZSB0aGUgdGltZSB0aGF0IGludGVycnVwdHMgYW5kL29yCitwcmVlbXB0aW9uIGlzIGRpc2FibGVkLiBUaGlzIHRvdGFsIHRpbWUgaXMgdGhlIHRpbWUgdGhhdCB3ZSBjYW4KK25vdCBzY2hlZHVsZS4gVG8gcmVjb3JkIHRoaXMgdGltZSwgdXNlIHRoZSBwcmVlbXB0aXJxc29mZgordHJhY2VyLgogCi1BZ2FpbiwgdXNpbmcgdGhpcyB0cmFjZSBpcyBtdWNoIGxpa2UgdGhlIGlycXNvZmYgYW5kIHByZWVtcHRvZmYgdHJhY2Vycy4KK0FnYWluLCB1c2luZyB0aGlzIHRyYWNlIGlzIG11Y2ggbGlrZSB0aGUgaXJxc29mZiBhbmQgcHJlZW1wdG9mZgordHJhY2Vycy4KIAogICMgZWNobyBwcmVlbXB0aXJxc29mZiA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDAgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CkBAIC03ODEsOSArODYyLDEwIEBACiAKIAogVGhlIHRyYWNlX2hhcmRpcnFzX29mZl90aHVuayBpcyBjYWxsZWQgZnJvbSBhc3NlbWJseSBvbiB4ODYgd2hlbgotaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaW4gdGhlIGFzc2VtYmx5IGNvZGUuIFdpdGhvdXQgdGhlIGZ1bmN0aW9uCi10cmFjaW5nLCB3ZSBkbyBub3Qga25vdyBpZiBpbnRlcnJ1cHRzIHdlcmUgZW5hYmxlZCB3aXRoaW4gdGhlIHByZWVtcHRpb24KLXBvaW50cy4gV2UgZG8gc2VlIHRoYXQgaXQgc3RhcnRlZCB3aXRoIHByZWVtcHRpb24gZW5hYmxlZC4KK2ludGVycnVwdHMgYXJlIGRpc2FibGVkIGluIHRoZSBhc3NlbWJseSBjb2RlLiBXaXRob3V0IHRoZQorZnVuY3Rpb24gdHJhY2luZywgd2UgZG8gbm90IGtub3cgaWYgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQKK3dpdGhpbiB0aGUgcHJlZW1wdGlvbiBwb2ludHMuIFdlIGRvIHNlZSB0aGF0IGl0IHN0YXJ0ZWQgd2l0aAorcHJlZW1wdGlvbiBlbmFibGVkLgogCiBIZXJlIGlzIGEgdHJhY2Ugd2l0aCBmdHJhY2VfZW5hYmxlZCBzZXQ6CiAKQEAgLTg3MSw0MCArOTUzLDQyIEBACiAgICAgc3NoZC00MjYxICAwZC5zMSAgMTA1dXMgOiB0cmFjZV9wcmVlbXB0X29uIChfX2RvX3NvZnRpcnEpCiAKIAotVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgdHJhY2UuIEl0IHN0YXJ0ZWQgd2l0aCB0aGUgcHJlZW1wdGlvbiBvZgotdGhlIGxzIHRhc2suIFdlIHNlZSB0aGF0IHRoZSB0YXNrIGhhZCB0aGUgIm5lZWRfcmVzY2hlZCIgYml0IHNldAotdmlhIHRoZSAnTicgaW4gdGhlIHRyYWNlLiAgSW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkIGJlZm9yZSB0aGUgc3Bpbl9sb2NrCi1hdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFjZS4gV2Ugc2VlIHRoYXQgYSBzY2hlZHVsZSB0b29rIHBsYWNlIHRvIHJ1bgotc3NoZC4gIFdoZW4gdGhlIGludGVycnVwdHMgd2VyZSBlbmFibGVkLCB3ZSB0b29rIGFuIGludGVycnVwdC4KLU9uIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgdGhlIHNvZnRpcnEgcmFuLiBXZSB0b29rIGFub3RoZXIKLWludGVycnVwdCB3aGlsZSBydW5uaW5nIHRoZSBzb2Z0aXJxIGFzIHdlIHNlZSBmcm9tIHRoZSBjYXBpdGFsICdIJy4KK1RoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHRyYWNlLiBJdCBzdGFydGVkIHdpdGggdGhlIHByZWVtcHRpb24KK29mIHRoZSBscyB0YXNrLiBXZSBzZWUgdGhhdCB0aGUgdGFzayBoYWQgdGhlICJuZWVkX3Jlc2NoZWQiIGJpdAorc2V0IHZpYSB0aGUgJ04nIGluIHRoZSB0cmFjZS4gIEludGVycnVwdHMgd2VyZSBkaXNhYmxlZCBiZWZvcmUKK3RoZSBzcGluX2xvY2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhY2UuIFdlIHNlZSB0aGF0IGEKK3NjaGVkdWxlIHRvb2sgcGxhY2UgdG8gcnVuIHNzaGQuICBXaGVuIHRoZSBpbnRlcnJ1cHRzIHdlcmUKK2VuYWJsZWQsIHdlIHRvb2sgYW4gaW50ZXJydXB0LiBPbiByZXR1cm4gZnJvbSB0aGUgaW50ZXJydXB0CitoYW5kbGVyLCB0aGUgc29mdGlycSByYW4uIFdlIHRvb2sgYW5vdGhlciBpbnRlcnJ1cHQgd2hpbGUKK3J1bm5pbmcgdGhlIHNvZnRpcnEgYXMgd2Ugc2VlIGZyb20gdGhlIGNhcGl0YWwgJ0gnLgogCiAKIHdha2V1cAogLS0tLS0tCiAKLUluIGEgUmVhbC1UaW1lIGVudmlyb25tZW50IGl0IGlzIHZlcnkgaW1wb3J0YW50IHRvIGtub3cgdGhlIHdha2V1cAotdGltZSBpdCB0YWtlcyBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHdva2VuIHVwIHRvIHRoZQotdGltZSB0aGF0IGl0IGV4ZWN1dGVzLiBUaGlzIGlzIGFsc28ga25vd24gYXMgInNjaGVkdWxlIGxhdGVuY3kiLgotSSBzdHJlc3MgdGhlIHBvaW50IHRoYXQgdGhpcyBpcyBhYm91dCBSVCB0YXNrcy4gSXQgaXMgYWxzbyBpbXBvcnRhbnQKLXRvIGtub3cgdGhlIHNjaGVkdWxpbmcgbGF0ZW5jeSBvZiBub24tUlQgdGFza3MsIGJ1dCB0aGUgYXZlcmFnZQotc2NoZWR1bGUgbGF0ZW5jeSBpcyBiZXR0ZXIgZm9yIG5vbi1SVCB0YXNrcy4gVG9vbHMgbGlrZQotTGF0ZW5jeVRvcCBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3Igc3VjaCBtZWFzdXJlbWVudHMuCitJbiBhIFJlYWwtVGltZSBlbnZpcm9ubWVudCBpdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBrbm93IHRoZQord2FrZXVwIHRpbWUgaXQgdGFrZXMgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdGhhdCBpcyB3b2tlbgordXAgdG8gdGhlIHRpbWUgdGhhdCBpdCBleGVjdXRlcy4gVGhpcyBpcyBhbHNvIGtub3duIGFzICJzY2hlZHVsZQorbGF0ZW5jeSIuIEkgc3RyZXNzIHRoZSBwb2ludCB0aGF0IHRoaXMgaXMgYWJvdXQgUlQgdGFza3MuIEl0IGlzCithbHNvIGltcG9ydGFudCB0byBrbm93IHRoZSBzY2hlZHVsaW5nIGxhdGVuY3kgb2Ygbm9uLVJUIHRhc2tzLAorYnV0IHRoZSBhdmVyYWdlIHNjaGVkdWxlIGxhdGVuY3kgaXMgYmV0dGVyIGZvciBub24tUlQgdGFza3MuCitUb29scyBsaWtlIExhdGVuY3lUb3AgYXJlIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHN1Y2gKK21lYXN1cmVtZW50cy4KIAogUmVhbC1UaW1lIGVudmlyb25tZW50cyBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgd29yc3QgY2FzZSBsYXRlbmN5LgotVGhhdCBpcyB0aGUgbG9uZ2VzdCBsYXRlbmN5IGl0IHRha2VzIGZvciBzb21ldGhpbmcgdG8gaGFwcGVuLCBhbmQKLW5vdCB0aGUgYXZlcmFnZS4gV2UgY2FuIGhhdmUgYSB2ZXJ5IGZhc3Qgc2NoZWR1bGVyIHRoYXQgbWF5IG9ubHkKLWhhdmUgYSBsYXJnZSBsYXRlbmN5IG9uY2UgaW4gYSB3aGlsZSwgYnV0IHRoYXQgd291bGQgbm90IHdvcmsgd2VsbAotd2l0aCBSZWFsLVRpbWUgdGFza3MuICBUaGUgd2FrZXVwIHRyYWNlciB3YXMgZGVzaWduZWQgdG8gcmVjb3JkCi10aGUgd29yc3QgY2FzZSB3YWtldXBzIG9mIFJUIHRhc2tzLiBOb24tUlQgdGFza3MgYXJlIG5vdCByZWNvcmRlZAotYmVjYXVzZSB0aGUgdHJhY2VyIG9ubHkgcmVjb3JkcyBvbmUgd29yc3QgY2FzZSBhbmQgdHJhY2luZyBub24tUlQKLXRhc2tzIHRoYXQgYXJlIHVucHJlZGljdGFibGUgd2lsbCBvdmVyd3JpdGUgdGhlIHdvcnN0IGNhc2UgbGF0ZW5jeQotb2YgUlQgdGFza3MuCitUaGF0IGlzIHRoZSBsb25nZXN0IGxhdGVuY3kgaXQgdGFrZXMgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4sCithbmQgbm90IHRoZSBhdmVyYWdlLiBXZSBjYW4gaGF2ZSBhIHZlcnkgZmFzdCBzY2hlZHVsZXIgdGhhdCBtYXkKK29ubHkgaGF2ZSBhIGxhcmdlIGxhdGVuY3kgb25jZSBpbiBhIHdoaWxlLCBidXQgdGhhdCB3b3VsZCBub3QKK3dvcmsgd2VsbCB3aXRoIFJlYWwtVGltZSB0YXNrcy4gIFRoZSB3YWtldXAgdHJhY2VyIHdhcyBkZXNpZ25lZAordG8gcmVjb3JkIHRoZSB3b3JzdCBjYXNlIHdha2V1cHMgb2YgUlQgdGFza3MuIE5vbi1SVCB0YXNrcyBhcmUKK25vdCByZWNvcmRlZCBiZWNhdXNlIHRoZSB0cmFjZXIgb25seSByZWNvcmRzIG9uZSB3b3JzdCBjYXNlIGFuZAordHJhY2luZyBub24tUlQgdGFza3MgdGhhdCBhcmUgdW5wcmVkaWN0YWJsZSB3aWxsIG92ZXJ3cml0ZSB0aGUKK3dvcnN0IGNhc2UgbGF0ZW5jeSBvZiBSVCB0YXNrcy4KIAotU2luY2UgdGhpcyB0cmFjZXIgb25seSBkZWFscyB3aXRoIFJUIHRhc2tzLCB3ZSB3aWxsIHJ1biB0aGlzIHNsaWdodGx5Ci1kaWZmZXJlbnRseSB0aGFuIHdlIGRpZCB3aXRoIHRoZSBwcmV2aW91cyB0cmFjZXJzLiBJbnN0ZWFkIG9mIHBlcmZvcm1pbmcKLWFuICdscycsIHdlIHdpbGwgcnVuICdzbGVlcCAxJyB1bmRlciAnY2hydCcgd2hpY2ggY2hhbmdlcyB0aGUKLXByaW9yaXR5IG9mIHRoZSB0YXNrLgorU2luY2UgdGhpcyB0cmFjZXIgb25seSBkZWFscyB3aXRoIFJUIHRhc2tzLCB3ZSB3aWxsIHJ1biB0aGlzCitzbGlnaHRseSBkaWZmZXJlbnRseSB0aGFuIHdlIGRpZCB3aXRoIHRoZSBwcmV2aW91cyB0cmFjZXJzLgorSW5zdGVhZCBvZiBwZXJmb3JtaW5nIGFuICdscycsIHdlIHdpbGwgcnVuICdzbGVlcCAxJyB1bmRlcgorJ2NocnQnIHdoaWNoIGNoYW5nZXMgdGhlIHByaW9yaXR5IG9mIHRoZSB0YXNrLgogCiAgIyBlY2hvIHdha2V1cCA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCiAgIyBlY2hvIDAgPiAvZGVidWcvdHJhY2luZy90cmFjaW5nX21heF9sYXRlbmN5CkBAIC05MzQsMTcgKzEwMTgsMTYgQEAKICAgPGlkbGU+LTAgICAgIDFkLi40ICAgIDR1cyA6IHNjaGVkdWxlIChjcHVfaWRsZSkKIAogCitSdW5uaW5nIHRoaXMgb24gYW4gaWRsZSBzeXN0ZW0sIHdlIHNlZSB0aGF0IGl0IG9ubHkgdG9vayA0CittaWNyb3NlY29uZHMgdG8gcGVyZm9ybSB0aGUgdGFzayBzd2l0Y2guICBOb3RlLCBzaW5jZSB0aGUgdHJhY2UKK21hcmtlciBpbiB0aGUgc2NoZWR1bGUgaXMgYmVmb3JlIHRoZSBhY3R1YWwgInN3aXRjaCIsIHdlIHN0b3AKK3RoZSB0cmFjaW5nIHdoZW4gdGhlIHJlY29yZGVkIHRhc2sgaXMgYWJvdXQgdG8gc2NoZWR1bGUgaW4uIFRoaXMKK21heSBjaGFuZ2UgaWYgd2UgYWRkIGEgbmV3IG1hcmtlciBhdCB0aGUgZW5kIG9mIHRoZSBzY2hlZHVsZXIuCiAKLVJ1bm5pbmcgdGhpcyBvbiBhbiBpZGxlIHN5c3RlbSwgd2Ugc2VlIHRoYXQgaXQgb25seSB0b29rIDQgbWljcm9zZWNvbmRzCi10byBwZXJmb3JtIHRoZSB0YXNrIHN3aXRjaC4gIE5vdGUsIHNpbmNlIHRoZSB0cmFjZSBtYXJrZXIgaW4gdGhlCi1zY2hlZHVsZSBpcyBiZWZvcmUgdGhlIGFjdHVhbCAic3dpdGNoIiwgd2Ugc3RvcCB0aGUgdHJhY2luZyB3aGVuCi10aGUgcmVjb3JkZWQgdGFzayBpcyBhYm91dCB0byBzY2hlZHVsZSBpbi4gVGhpcyBtYXkgY2hhbmdlIGlmCi13ZSBhZGQgYSBuZXcgbWFya2VyIGF0IHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlci4KLQotTm90aWNlIHRoYXQgdGhlIHJlY29yZGVkIHRhc2sgaXMgJ3NsZWVwJyB3aXRoIHRoZSBQSUQgb2YgNDkwMSBhbmQgaXQKLWhhcyBhbiBydF9wcmlvIG9mIDUuIFRoaXMgcHJpb3JpdHkgaXMgdXNlci1zcGFjZSBwcmlvcml0eSBhbmQgbm90Ci10aGUgaW50ZXJuYWwga2VybmVsIHByaW9yaXR5LiBUaGUgcG9saWN5IGlzIDEgZm9yIFNDSEVEX0ZJRk8gYW5kIDIKLWZvciBTQ0hFRF9SUi4KK05vdGljZSB0aGF0IHRoZSByZWNvcmRlZCB0YXNrIGlzICdzbGVlcCcgd2l0aCB0aGUgUElEIG9mIDQ5MDEKK2FuZCBpdCBoYXMgYW4gcnRfcHJpbyBvZiA1LiBUaGlzIHByaW9yaXR5IGlzIHVzZXItc3BhY2UgcHJpb3JpdHkKK2FuZCBub3QgdGhlIGludGVybmFsIGtlcm5lbCBwcmlvcml0eS4gVGhlIHBvbGljeSBpcyAxIGZvcgorU0NIRURfRklGTyBhbmQgMiBmb3IgU0NIRURfUlIuCiAKIERvaW5nIHRoZSBzYW1lIHdpdGggY2hydCAtciA1IGFuZCBmdHJhY2VfZW5hYmxlZCBzZXQuCiAKQEAgLTEwMDEsMjQgKzEwODQsMjUgQEAKIGtzb2Z0aXJxLTcgICAgIDFkLi42ICAgNDl1cyA6IHN1Yl9wcmVlbXB0X2NvdW50IChfc3Bpbl91bmxvY2spCiBrc29mdGlycS03ICAgICAxZC4uNCAgIDUwdXMgOiBzY2hlZHVsZSAoX19jb25kX3Jlc2NoZWQpCiAKLVRoZSBpbnRlcnJ1cHQgd2VudCBvZmYgd2hpbGUgcnVubmluZyBrc29mdGlycWQuIFRoaXMgdGFzayBydW5zIGF0Ci1TQ0hFRF9PVEhFUi4gV2h5IGRpZCBub3Qgd2Ugc2VlIHRoZSAnTicgc2V0IGVhcmx5PyBUaGlzIG1heSBiZQotYSBoYXJtbGVzcyBidWcgd2l0aCB4ODZfMzIgYW5kIDRLIHN0YWNrcy4gT24geDg2XzMyIHdpdGggNEsgc3RhY2tzCi1jb25maWd1cmVkLCB0aGUgaW50ZXJydXB0IGFuZCBzb2Z0aXJxIHJ1biB3aXRoIHRoZWlyIG93biBzdGFjay4KLVNvbWUgaW5mb3JtYXRpb24gaXMgaGVsZCBvbiB0aGUgdG9wIG9mIHRoZSB0YXNrJ3Mgc3RhY2sgKG5lZWRfcmVzY2hlZAotYW5kIHByZWVtcHRfY291bnQgYXJlIGJvdGggc3RvcmVkIHRoZXJlKS4gVGhlIHNldHRpbmcgb2YgdGhlIE5FRURfUkVTQ0hFRAotYml0IGlzIGRvbmUgZGlyZWN0bHkgdG8gdGhlIHRhc2sncyBzdGFjaywgYnV0IHRoZSByZWFkaW5nIG9mIHRoZQotTkVFRF9SRVNDSEVEIGlzIGRvbmUgYnkgbG9va2luZyBhdCB0aGUgY3VycmVudCBzdGFjaywgd2hpY2ggaW4gdGhpcyBjYXNlCi1pcyB0aGUgc3RhY2sgZm9yIHRoZSBoYXJkIGludGVycnVwdC4gVGhpcyBoaWRlcyB0aGUgZmFjdCB0aGF0IE5FRURfUkVTQ0hFRAotaGFzIGJlZW4gc2V0LiBXZSBkbyBub3Qgc2VlIHRoZSAnTicgdW50aWwgd2Ugc3dpdGNoIGJhY2sgdG8gdGhlIHRhc2sncworVGhlIGludGVycnVwdCB3ZW50IG9mZiB3aGlsZSBydW5uaW5nIGtzb2Z0aXJxZC4gVGhpcyB0YXNrIHJ1bnMKK2F0IFNDSEVEX09USEVSLiBXaHkgZGlkIG5vdCB3ZSBzZWUgdGhlICdOJyBzZXQgZWFybHk/IFRoaXMgbWF5CitiZSBhIGhhcm1sZXNzIGJ1ZyB3aXRoIHg4Nl8zMiBhbmQgNEsgc3RhY2tzLiBPbiB4ODZfMzIgd2l0aCA0Sworc3RhY2tzIGNvbmZpZ3VyZWQsIHRoZSBpbnRlcnJ1cHQgYW5kIHNvZnRpcnEgcnVuIHdpdGggdGhlaXIgb3duCitzdGFjay4gU29tZSBpbmZvcm1hdGlvbiBpcyBoZWxkIG9uIHRoZSB0b3Agb2YgdGhlIHRhc2sncyBzdGFjaworKG5lZWRfcmVzY2hlZCBhbmQgcHJlZW1wdF9jb3VudCBhcmUgYm90aCBzdG9yZWQgdGhlcmUpLiBUaGUKK3NldHRpbmcgb2YgdGhlIE5FRURfUkVTQ0hFRCBiaXQgaXMgZG9uZSBkaXJlY3RseSB0byB0aGUgdGFzaydzCitzdGFjaywgYnV0IHRoZSByZWFkaW5nIG9mIHRoZSBORUVEX1JFU0NIRUQgaXMgZG9uZSBieSBsb29raW5nIGF0Cit0aGUgY3VycmVudCBzdGFjaywgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSBzdGFjayBmb3IgdGhlIGhhcmQKK2ludGVycnVwdC4gVGhpcyBoaWRlcyB0aGUgZmFjdCB0aGF0IE5FRURfUkVTQ0hFRCBoYXMgYmVlbiBzZXQuCitXZSBkbyBub3Qgc2VlIHRoZSAnTicgdW50aWwgd2Ugc3dpdGNoIGJhY2sgdG8gdGhlIHRhc2sncwogYXNzaWduZWQgc3RhY2suCiAKIGZ1bmN0aW9uCiAtLS0tLS0tLQogCiBUaGlzIHRyYWNlciBpcyB0aGUgZnVuY3Rpb24gdHJhY2VyLiBFbmFibGluZyB0aGUgZnVuY3Rpb24gdHJhY2VyCi1jYW4gYmUgZG9uZSBmcm9tIHRoZSBkZWJ1ZyBmaWxlIHN5c3RlbS4gTWFrZSBzdXJlIHRoZSBmdHJhY2VfZW5hYmxlZCBpcwotc2V0OyBvdGhlcndpc2UgdGhpcyB0cmFjZXIgaXMgYSBub3AuCitjYW4gYmUgZG9uZSBmcm9tIHRoZSBkZWJ1ZyBmaWxlIHN5c3RlbS4gTWFrZSBzdXJlIHRoZQorZnRyYWNlX2VuYWJsZWQgaXMgc2V0OyBvdGhlcndpc2UgdGhpcyB0cmFjZXIgaXMgYSBub3AuCiAKICAjIHN5c2N0bCBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MQogICMgZWNobyBmdW5jdGlvbiA+IC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyCkBAIC0xMDQ4LDE0ICsxMTMyLDE1IEBACiBbLi4uXQogCiAKLU5vdGU6IGZ1bmN0aW9uIHRyYWNlciB1c2VzIHJpbmcgYnVmZmVycyB0byBzdG9yZSB0aGUgYWJvdmUgZW50cmllcy4KLVRoZSBuZXdlc3QgZGF0YSBtYXkgb3ZlcndyaXRlIHRoZSBvbGRlc3QgZGF0YS4gU29tZXRpbWVzIHVzaW5nIGVjaG8gdG8KLXN0b3AgdGhlIHRyYWNlIGlzIG5vdCBzdWZmaWNpZW50IGJlY2F1c2UgdGhlIHRyYWNpbmcgY291bGQgaGF2ZSBvdmVyd3JpdHRlbgotdGhlIGRhdGEgdGhhdCB5b3Ugd2FudGVkIHRvIHJlY29yZC4gRm9yIHRoaXMgcmVhc29uLCBpdCBpcyBzb21ldGltZXMgYmV0dGVyIHRvCi1kaXNhYmxlIHRyYWNpbmcgZGlyZWN0bHkgZnJvbSBhIHByb2dyYW0uIFRoaXMgYWxsb3dzIHlvdSB0byBzdG9wIHRoZQotdHJhY2luZyBhdCB0aGUgcG9pbnQgdGhhdCB5b3UgaGl0IHRoZSBwYXJ0IHRoYXQgeW91IGFyZSBpbnRlcmVzdGVkIGluLgotVG8gZGlzYWJsZSB0aGUgdHJhY2luZyBkaXJlY3RseSBmcm9tIGEgQyBwcm9ncmFtLCBzb21ldGhpbmcgbGlrZSBmb2xsb3dpbmcKLWNvZGUgc25pcHBldCBjYW4gYmUgdXNlZDoKK05vdGU6IGZ1bmN0aW9uIHRyYWNlciB1c2VzIHJpbmcgYnVmZmVycyB0byBzdG9yZSB0aGUgYWJvdmUKK2VudHJpZXMuIFRoZSBuZXdlc3QgZGF0YSBtYXkgb3ZlcndyaXRlIHRoZSBvbGRlc3QgZGF0YS4KK1NvbWV0aW1lcyB1c2luZyBlY2hvIHRvIHN0b3AgdGhlIHRyYWNlIGlzIG5vdCBzdWZmaWNpZW50IGJlY2F1c2UKK3RoZSB0cmFjaW5nIGNvdWxkIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIGRhdGEgdGhhdCB5b3Ugd2FudGVkIHRvCityZWNvcmQuIEZvciB0aGlzIHJlYXNvbiwgaXQgaXMgc29tZXRpbWVzIGJldHRlciB0byBkaXNhYmxlCit0cmFjaW5nIGRpcmVjdGx5IGZyb20gYSBwcm9ncmFtLiBUaGlzIGFsbG93cyB5b3UgdG8gc3RvcCB0aGUKK3RyYWNpbmcgYXQgdGhlIHBvaW50IHRoYXQgeW91IGhpdCB0aGUgcGFydCB0aGF0IHlvdSBhcmUKK2ludGVyZXN0ZWQgaW4uIFRvIGRpc2FibGUgdGhlIHRyYWNpbmcgZGlyZWN0bHkgZnJvbSBhIEMgcHJvZ3JhbSwKK3NvbWV0aGluZyBsaWtlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgY2FuIGJlIHVzZWQ6CiAKIGludCB0cmFjZV9mZDsKIFsuLi5dCkBAIC0xMDcwLDEwICsxMTU1LDEwIEBACiB9CiAKIE5vdGU6IEhlcmUgd2UgaGFyZCBjb2RlZCB0aGUgcGF0aCBuYW1lLiBUaGUgZGVidWdmcyBtb3VudCBpcyBub3QKLWd1YXJhbnRlZWQgdG8gYmUgYXQgL2RlYnVnIChhbmQgaXMgbW9yZSBjb21tb25seSBhdCAvc3lzL2tlcm5lbC9kZWJ1ZykuCi1Gb3Igc2ltcGxlIG9uZSB0aW1lIHRyYWNlcywgdGhlIGFib3ZlIGlzIHN1ZmZpY2VudC4gRm9yIGFueXRoaW5nIGVsc2UsCi1hIHNlYXJjaCB0aHJvdWdoIC9wcm9jL21vdW50cyBtYXkgYmUgbmVlZGVkIHRvIGZpbmQgd2hlcmUgdGhlIGRlYnVnZnMKLWZpbGUtc3lzdGVtIGlzIG1vdW50ZWQuCitndWFyYW50ZWVkIHRvIGJlIGF0IC9kZWJ1ZyAoYW5kIGlzIG1vcmUgY29tbW9ubHkgYXQKKy9zeXMva2VybmVsL2RlYnVnKS4gRm9yIHNpbXBsZSBvbmUgdGltZSB0cmFjZXMsIHRoZSBhYm92ZSBpcworc3VmZmljZW50LiBGb3IgYW55dGhpbmcgZWxzZSwgYSBzZWFyY2ggdGhyb3VnaCAvcHJvYy9tb3VudHMgbWF5CitiZSBuZWVkZWQgdG8gZmluZCB3aGVyZSB0aGUgZGVidWdmcyBmaWxlLXN5c3RlbSBpcyBtb3VudGVkLgogCiAKIFNpbmdsZSB0aHJlYWQgdHJhY2luZwpAQCAtMTE1Miw0OSArMTIzNywyOTcgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKworaHctYnJhbmNoLXRyYWNlciAoeDg2IG9ubHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0cmFjZXIgdXNlcyB0aGUgeDg2IGxhc3QgYnJhbmNoIHRyYWNpbmcgaGFyZHdhcmUgZmVhdHVyZSB0bworY29sbGVjdCBhIGJyYW5jaCB0cmFjZSBvbiBhbGwgY3B1cyB3aXRoIHJlbGF0aXZlbHkgbG93IG92ZXJoZWFkLgorCitUaGUgdHJhY2VyIHVzZXMgYSBmaXhlZC1zaXplIGNpcmN1bGFyIGJ1ZmZlciBwZXIgY3B1IGFuZCBvbmx5Cit0cmFjZXMgcmluZyAwIGJyYW5jaGVzLiBUaGUgdHJhY2UgZmlsZSBkdW1wcyB0aGF0IGJ1ZmZlciBpbiB0aGUKK2ZvbGxvd2luZyBmb3JtYXQ6CisKKyMgdHJhY2VyOiBody1icmFuY2gtdHJhY2VyCisjCisjIENQVSMgICAgICAgIFRPICA8LSAgRlJPTQorICAgMCAgc2NoZWR1bGVyX3RpY2srMHhiNS8weDFiZgkgIDwtICB0YXNrX3RpY2tfaWRsZSsweDUvMHg2CisgICAyICBydW5fcG9zaXhfY3B1X3RpbWVycysweDJiLzB4NzJhCSAgPC0gIHJ1bl9wb3NpeF9jcHVfdGltZXJzKzB4MjUvMHg3MmEKKyAgIDAgIHNjaGVkdWxlcl90aWNrKzB4MTM5LzB4MWJmCSAgPC0gIHNjaGVkdWxlcl90aWNrKzB4ZWQvMHgxYmYKKyAgIDAgIHNjaGVkdWxlcl90aWNrKzB4MTdjLzB4MWJmCSAgPC0gIHNjaGVkdWxlcl90aWNrKzB4MTQ4LzB4MWJmCisgICAyICBydW5fcG9zaXhfY3B1X3RpbWVycysweDllLzB4NzJhCSAgPC0gIHJ1bl9wb3NpeF9jcHVfdGltZXJzKzB4NWUvMHg3MmEKKyAgIDAgIHNjaGVkdWxlcl90aWNrKzB4MWI2LzB4MWJmCSAgPC0gIHNjaGVkdWxlcl90aWNrKzB4MWFhLzB4MWJmCisKKworVGhlIHRyYWNlciBtYXkgYmUgdXNlZCB0byBkdW1wIHRoZSB0cmFjZSBmb3IgdGhlIG9vcHMnaW5nIGNwdSBvbgorYSBrZXJuZWwgb29wcyBpbnRvIHRoZSBzeXN0ZW0gbG9nLiBUbyBlbmFibGUgdGhpcywKK2Z0cmFjZV9kdW1wX29uX29vcHMgbXVzdCBiZSBzZXQuIFRvIHNldCBmdHJhY2VfZHVtcF9vbl9vb3BzLCBvbmUKK2NhbiBlaXRoZXIgdXNlIHRoZSBzeXNjdGwgZnVuY3Rpb24gb3Igc2V0IGl0IHZpYSB0aGUgcHJvYyBzeXN0ZW0KK2ludGVyZmFjZS4KKworICBzeXNjdGwga2VybmVsLmZ0cmFjZV9kdW1wX29uX29vcHM9MQorCitvcgorCisgIGVjaG8gMSA+IC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2R1bXBfb25fb29wcworCisKK0hlcmUncyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBkdW1wIGFmdGVyIGEgbnVsbCBwb2ludGVyCitkZXJlZmVyZW5jZSBpbiBhIGtlcm5lbCBtb2R1bGU6CisKK1s1Nzg0OC4xMDU5MjFdIEJVRzogdW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGF0IDAwMDAwMDAwMDAwMDAwMDAKK1s1Nzg0OC4xMDYwMTldIElQOiBbPGZmZmZmZmZmYTAwMDAwMDY+XSBvcGVuKzB4Ni8weDE0IFtvb3BzXQorWzU3ODQ4LjEwNjAxOV0gUEdEIDIzNTRlOTA2NyBQVUQgMjM3NWU3MDY3IFBNRCAwCitbNTc4NDguMTA2MDE5XSBPb3BzOiAwMDAyIFsjMV0gU01QCitbNTc4NDguMTA2MDE5XSBsYXN0IHN5c2ZzIGZpbGU6IC9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MWUuMC8wMDAwOjIwOjA1LjAvbG9jYWxfY3B1cworWzU3ODQ4LjEwNjAxOV0gRHVtcGluZyBmdHJhY2UgYnVmZmVyOgorWzU3ODQ4LjEwNjAxOV0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbLi4uXQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgY2hyZGV2X29wZW4rMHhlNi8weDE2NQkgIDwtICBjZGV2X3B1dCsweDIzLzB4MjQKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGNocmRldl9vcGVuKzB4MTE3LzB4MTY1CSAgPC0gIGNocmRldl9vcGVuKzB4ZmEvMHgxNjUKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGNocmRldl9vcGVuKzB4MTIwLzB4MTY1CSAgPC0gIGNocmRldl9vcGVuKzB4MTFjLzB4MTY1CitbNTc4NDguMTA2MDE5XSAgICAwICBjaHJkZXZfb3BlbisweDEzNC8weDE2NQkgIDwtICBjaHJkZXZfb3BlbisweDEyYi8weDE2NQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgb3BlbisweDAvMHgxNCBbb29wc10JICA8LSAgY2hyZGV2X29wZW4rMHgxNDQvMHgxNjUKK1s1Nzg0OC4xMDYwMTldICAgIDAgIHBhZ2VfZmF1bHQrMHgwLzB4MzAJICA8LSAgb3BlbisweDYvMHgxNCBbb29wc10KK1s1Nzg0OC4xMDYwMTldICAgIDAgIGVycm9yX2VudHJ5KzB4MC8weDViCSAgPC0gIHBhZ2VfZmF1bHQrMHg0LzB4MzAKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGVycm9yX2tlcm5lbHNwYWNlKzB4MC8weDMxCSAgPC0gIGVycm9yX2VudHJ5KzB4NTkvMHg1YgorWzU3ODQ4LjEwNjAxOV0gICAgMCAgZXJyb3Jfc3RpKzB4MC8weDEJICA8LSAgZXJyb3Jfa2VybmVsc3BhY2UrMHgyZC8weDMxCitbNTc4NDguMTA2MDE5XSAgICAwICBwYWdlX2ZhdWx0KzB4OS8weDMwCSAgPC0gIGVycm9yX3N0aSsweDAvMHgxCitbNTc4NDguMTA2MDE5XSAgICAwICBkb19wYWdlX2ZhdWx0KzB4MC8weDg4MQkgIDwtICBwYWdlX2ZhdWx0KzB4MWEvMHgzMAorWy4uLl0KK1s1Nzg0OC4xMDYwMTldICAgIDAgIGRvX3BhZ2VfZmF1bHQrMHg2NmIvMHg4ODEJICA8LSAgaXNfcHJlZmV0Y2grMHgxZWUvMHgxZjIKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGRvX3BhZ2VfZmF1bHQrMHg2ZTAvMHg4ODEJICA8LSAgZG9fcGFnZV9mYXVsdCsweDY3YS8weDg4MQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgb29wc19iZWdpbisweDAvMHg5NgkgIDwtICBkb19wYWdlX2ZhdWx0KzB4NmUwLzB4ODgxCitbNTc4NDguMTA2MDE5XSAgICAwICB0cmFjZV9od19icmFuY2hfb29wcysweDAvMHgyZAkgIDwtICBvb3BzX2JlZ2luKzB4OS8weDk2CitbLi4uXQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgZHNfc3VzcGVuZF9idHMrMHgyYS8weGUzCSAgPC0gIGRzX3N1c3BlbmRfYnRzKzB4MWEvMHhlMworWzU3ODQ4LjEwNjAxOV0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbNTc4NDguMTA2MDE5XSBDUFUgMAorWzU3ODQ4LjEwNjAxOV0gTW9kdWxlcyBsaW5rZWQgaW46IG9vcHMKK1s1Nzg0OC4xMDYwMTldIFBpZDogNTU0MiwgY29tbTogY2F0IFRhaW50ZWQ6IEcgICAgICAgIFcgIDIuNi4yOCAjMjMKK1s1Nzg0OC4xMDYwMTldIFJJUDogMDAxMDpbPGZmZmZmZmZmYTAwMDAwMDY+XSAgWzxmZmZmZmZmZmEwMDAwMDA2Pl0gb3BlbisweDYvMHgxNCBbb29wc10KK1s1Nzg0OC4xMDYwMTldIFJTUDogMDAxODpmZmZmODgwMjM1NDU3ZDQ4ICBFRkxBR1M6IDAwMDEwMjQ2CitbLi4uXQorCisKK2Z1bmN0aW9uIGdyYXBoIHRyYWNlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdHJhY2VyIGlzIHNpbWlsYXIgdG8gdGhlIGZ1bmN0aW9uIHRyYWNlciBleGNlcHQgdGhhdCBpdAorcHJvYmVzIGEgZnVuY3Rpb24gb24gaXRzIGVudHJ5IGFuZCBpdHMgZXhpdC4gVGhpcyBpcyBkb25lIGJ5Cit1c2luZyBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGluIGVhY2gKK3Rhc2tfc3RydWN0LiBPbiBmdW5jdGlvbiBlbnRyeSB0aGUgdHJhY2VyIG92ZXJ3cml0ZXMgdGhlIHJldHVybgorYWRkcmVzcyBvZiBlYWNoIGZ1bmN0aW9uIHRyYWNlZCB0byBzZXQgYSBjdXN0b20gcHJvYmUuIFRodXMgdGhlCitvcmlnaW5hbCByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgb24gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRyZXNzCitpbiB0aGUgdGFza19zdHJ1Y3QuCisKK1Byb2Jpbmcgb24gYm90aCBlbmRzIG9mIGEgZnVuY3Rpb24gbGVhZHMgdG8gc3BlY2lhbCBmZWF0dXJlcworc3VjaCBhczoKKworLSBtZWFzdXJlIG9mIGEgZnVuY3Rpb24ncyB0aW1lIGV4ZWN1dGlvbgorLSBoYXZpbmcgYSByZWxpYWJsZSBjYWxsIHN0YWNrIHRvIGRyYXcgZnVuY3Rpb24gY2FsbHMgZ3JhcGgKKworVGhpcyB0cmFjZXIgaXMgdXNlZnVsIGluIHNldmVyYWwgc2l0dWF0aW9uczoKKworLSB5b3Ugd2FudCB0byBmaW5kIHRoZSByZWFzb24gb2YgYSBzdHJhbmdlIGtlcm5lbCBiZWhhdmlvciBhbmQKKyAgbmVlZCB0byBzZWUgd2hhdCBoYXBwZW5zIGluIGRldGFpbCBvbiBhbnkgYXJlYXMgKG9yIHNwZWNpZmljCisgIG9uZXMpLgorCistIHlvdSBhcmUgZXhwZXJpZW5jaW5nIHdlaXJkIGxhdGVuY2llcyBidXQgaXQncyBkaWZmaWN1bHQgdG8KKyAgZmluZCBpdHMgb3JpZ2luLgorCistIHlvdSB3YW50IHRvIGZpbmQgcXVpY2tseSB3aGljaCBwYXRoIGlzIHRha2VuIGJ5IGEgc3BlY2lmaWMKKyAgZnVuY3Rpb24KKworLSB5b3UganVzdCB3YW50IHRvIHBlZWsgaW5zaWRlIGEgd29ya2luZyBrZXJuZWwgYW5kIHdhbnQgdG8gc2VlCisgIHdoYXQgaGFwcGVucyB0aGVyZS4KKworIyB0cmFjZXI6IGZ1bmN0aW9uX2dyYXBoCisjCisjIENQVSAgRFVSQVRJT04gICAgICAgICAgICAgICAgICBGVU5DVElPTiBDQUxMUworIyB8ICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKworIDApICAgICAgICAgICAgICAgfCAgc3lzX29wZW4oKSB7CisgMCkgICAgICAgICAgICAgICB8ICAgIGRvX3N5c19vcGVuKCkgeworIDApICAgICAgICAgICAgICAgfCAgICAgIGdldG5hbWUoKSB7CisgMCkgICAgICAgICAgICAgICB8ICAgICAgICBrbWVtX2NhY2hlX2FsbG9jKCkgeworIDApICAgMS4zODIgdXMgICAgfCAgICAgICAgICBfX21pZ2h0X3NsZWVwKCk7CisgMCkgICAyLjQ3OCB1cyAgICB8ICAgICAgICB9CisgMCkgICAgICAgICAgICAgICB8ICAgICAgICBzdHJuY3B5X2Zyb21fdXNlcigpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICAgICAgbWlnaHRfZmF1bHQoKSB7CisgMCkgICAxLjM4OSB1cyAgICB8ICAgICAgICAgICAgX19taWdodF9zbGVlcCgpOworIDApICAgMi41NTMgdXMgICAgfCAgICAgICAgICB9CisgMCkgICAzLjgwNyB1cyAgICB8ICAgICAgICB9CisgMCkgICA3Ljg3NiB1cyAgICB8ICAgICAgfQorIDApICAgICAgICAgICAgICAgfCAgICAgIGFsbG9jX2ZkKCkgeworIDApICAgMC42NjggdXMgICAgfCAgICAgICAgX3NwaW5fbG9jaygpOworIDApICAgMC41NzAgdXMgICAgfCAgICAgICAgZXhwYW5kX2ZpbGVzKCk7CisgMCkgICAwLjU4NiB1cyAgICB8ICAgICAgICBfc3Bpbl91bmxvY2soKTsKKworCitUaGVyZSBhcmUgc2V2ZXJhbCBjb2x1bW5zIHRoYXQgY2FuIGJlIGR5bmFtaWNhbGx5CitlbmFibGVkL2Rpc2FibGVkLiBZb3UgY2FuIHVzZSBldmVyeSBjb21iaW5hdGlvbiBvZiBvcHRpb25zIHlvdQord2FudCwgZGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMuCisKKy0gVGhlIGNwdSBudW1iZXIgb24gd2hpY2ggdGhlIGZ1bmN0aW9uIGV4ZWN1dGVkIGlzIGRlZmF1bHQKKyAgZW5hYmxlZC4gIEl0IGlzIHNvbWV0aW1lcyBiZXR0ZXIgdG8gb25seSB0cmFjZSBvbmUgY3B1IChzZWUKKyAgdHJhY2luZ19jcHVfbWFzayBmaWxlKSBvciB5b3UgbWlnaHQgc29tZXRpbWVzIHNlZSB1bm9yZGVyZWQKKyAgZnVuY3Rpb24gY2FsbHMgd2hpbGUgY3B1IHRyYWNpbmcgc3dpdGNoLgorCisJaGlkZTogZWNobyBub2Z1bmNncmFwaC1jcHUgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJc2hvdzogZWNobyBmdW5jZ3JhcGgtY3B1ID4gL2RlYnVnL3RyYWNpbmcvdHJhY2Vfb3B0aW9ucworCistIFRoZSBkdXJhdGlvbiAoZnVuY3Rpb24ncyB0aW1lIG9mIGV4ZWN1dGlvbikgaXMgZGlzcGxheWVkIG9uCisgIHRoZSBjbG9zaW5nIGJyYWNrZXQgbGluZSBvZiBhIGZ1bmN0aW9uIG9yIG9uIHRoZSBzYW1lIGxpbmUKKyAgdGhhbiB0aGUgY3VycmVudCBmdW5jdGlvbiBpbiBjYXNlIG9mIGEgbGVhZiBvbmUuIEl0IGlzIGRlZmF1bHQKKyAgZW5hYmxlZC4KKworCWhpZGU6IGVjaG8gbm9mdW5jZ3JhcGgtZHVyYXRpb24gPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJc2hvdzogZWNobyBmdW5jZ3JhcGgtZHVyYXRpb24gPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisKKy0gVGhlIG92ZXJoZWFkIGZpZWxkIHByZWNlZGVzIHRoZSBkdXJhdGlvbiBmaWVsZCBpbiBjYXNlIG9mCisgIHJlYWNoZWQgZHVyYXRpb24gdGhyZXNob2xkcy4KKworCWhpZGU6IGVjaG8gbm9mdW5jZ3JhcGgtb3ZlcmhlYWQgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJc2hvdzogZWNobyBmdW5jZ3JhcGgtb3ZlcmhlYWQgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJZGVwZW5kcyBvbjogZnVuY2dyYXBoLWR1cmF0aW9uCisKKyAgaWU6CisKKyAgMCkgICAgICAgICAgICAgICB8ICAgIHVwX3dyaXRlKCkgeworICAwKSAgIDAuNjQ2IHVzICAgIHwgICAgICBfc3Bpbl9sb2NrX2lycXNhdmUoKTsKKyAgMCkgICAwLjY4NCB1cyAgICB8ICAgICAgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoKTsKKyAgMCkgICAzLjEyMyB1cyAgICB8ICAgIH0KKyAgMCkgICAwLjU0OCB1cyAgICB8ICAgIGZwdXQoKTsKKyAgMCkgKyA1OC42MjggdXMgICB8ICB9CisKKyAgWy4uLl0KKworICAwKSAgICAgICAgICAgICAgIHwgICAgICBwdXRuYW1lKCkgeworICAwKSAgICAgICAgICAgICAgIHwgICAgICAgIGttZW1fY2FjaGVfZnJlZSgpIHsKKyAgMCkgICAwLjUxOCB1cyAgICB8ICAgICAgICAgIF9fcGh5c19hZGRyKCk7CisgIDApICAgMS43NTcgdXMgICAgfCAgICAgICAgfQorICAwKSAgIDIuODYxIHVzICAgIHwgICAgICB9CisgIDApICEgMTE1LjMwNSB1cyAgfCAgICB9CisgIDApICEgMTE2LjQwMiB1cyAgfCAgfQorCisgICsgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gZXhjZWVkZWQgMTAgdXNlY3MuCisgICEgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gZXhjZWVkZWQgMTAwIHVzZWNzLgorCisKKy0gVGhlIHRhc2svcGlkIGZpZWxkIGRpc3BsYXlzIHRoZSB0aHJlYWQgY21kbGluZSBhbmQgcGlkIHdoaWNoCisgIGV4ZWN1dGVkIHRoZSBmdW5jdGlvbi4gSXQgaXMgZGVmYXVsdCBkaXNhYmxlZC4KKworCWhpZGU6IGVjaG8gbm9mdW5jZ3JhcGgtcHJvYyA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKwlzaG93OiBlY2hvIGZ1bmNncmFwaC1wcm9jID4gL2RlYnVnL3RyYWNpbmcvdHJhY2Vfb3B0aW9ucworCisgIGllOgorCisgICMgdHJhY2VyOiBmdW5jdGlvbl9ncmFwaAorICAjCisgICMgQ1BVICBUQVNLL1BJRCAgICAgICAgRFVSQVRJT04gICAgICAgICAgICAgICAgICBGVU5DVElPTiBDQUxMUworICAjIHwgICAgfCAgICB8ICAgICAgICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICBkX2ZyZWUoKSB7CisgIDApICAgIHNoLTQ4MDIgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBjYWxsX3JjdSgpIHsKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgX19jYWxsX3JjdSgpIHsKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgIDAuNjE2IHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICByY3VfcHJvY2Vzc19ncF9lbmQoKTsKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgIDAuNTg2IHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19mb3JfbmV3X2dyYWNlX3BlcmlvZCgpOworICAwKSAgICBzaC00ODAyICAgICB8ICAgMi44OTkgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICB9CisgIDApICAgIHNoLTQ4MDIgICAgIHwgICA0LjA0MCB1cyAgICB8ICAgICAgICAgICAgICAgICAgICB9CisgIDApICAgIHNoLTQ4MDIgICAgIHwgICA1LjE1MSB1cyAgICB8ICAgICAgICAgICAgICAgICAgfQorICAwKSAgICBzaC00ODAyICAgICB8ICsgNDkuMzcwIHVzICAgfCAgICAgICAgICAgICAgICB9CisKKworLSBUaGUgYWJzb2x1dGUgdGltZSBmaWVsZCBpcyBhbiBhYnNvbHV0ZSB0aW1lc3RhbXAgZ2l2ZW4gYnkgdGhlCisgIHN5c3RlbSBjbG9jayBzaW5jZSBpdCBzdGFydGVkLiBBIHNuYXBzaG90IG9mIHRoaXMgdGltZSBpcworICBnaXZlbiBvbiBlYWNoIGVudHJ5L2V4aXQgb2YgZnVuY3Rpb25zCisKKwloaWRlOiBlY2hvIG5vZnVuY2dyYXBoLWFic3RpbWUgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisJc2hvdzogZWNobyBmdW5jZ3JhcGgtYWJzdGltZSA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKworICBpZToKKworICAjCisgICMgICAgICBUSU1FICAgICAgIENQVSAgRFVSQVRJT04gICAgICAgICAgICAgICAgICBGVU5DVElPTiBDQUxMUworICAjICAgICAgIHwgICAgICAgICB8ICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKyAgMzYwLjc3NDUyMiB8ICAgMSkgICAwLjU0MSB1cyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTIyIHwgICAxKSAgIDQuNjYzIHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTIzIHwgICAxKSAgIDAuNTQxIHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193YWtlX3VwX2JpdCgpOworICAzNjAuNzc0NTI0IHwgICAxKSAgIDYuNzk2IHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgMzYwLjc3NDUyNCB8ICAgMSkgICA3Ljk1MiB1cyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTI1IHwgICAxKSAgIDkuMDYzIHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTI1IHwgICAxKSAgIDAuNjE1IHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam91cm5hbF9tYXJrX2RpcnR5KCk7CisgIDM2MC43NzQ1MjcgfCAgIDEpICAgMC41NzggdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JyZWxzZSgpOworICAzNjAuNzc0NTI4IHwgICAxKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbCgpIHsKKyAgMzYwLjc3NDUyOCB8ICAgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5sb2NrX2J1ZmZlcigpIHsKKyAgMzYwLjc3NDUyOSB8ICAgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWtlX3VwX2JpdCgpIHsKKyAgMzYwLjc3NDUyOSB8ICAgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF93YWl0cXVldWUoKSB7CisgIDM2MC43NzQ1MzAgfCAgIDEpICAgMC41OTQgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGh5c19hZGRyKCk7CisKKworWW91IGNhbiBwdXQgc29tZSBjb21tZW50cyBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgYnkgdXNpbmcKK3RyYWNlX3ByaW50aygpIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBwdXQgYSBjb21tZW50IGluc2lkZQordGhlIF9fbWlnaHRfc2xlZXAoKSBmdW5jdGlvbiwgeW91IGp1c3QgaGF2ZSB0byBpbmNsdWRlCis8bGludXgvZnRyYWNlLmg+IGFuZCBjYWxsIHRyYWNlX3ByaW50aygpIGluc2lkZSBfX21pZ2h0X3NsZWVwKCkKKwordHJhY2VfcHJpbnRrKCJJJ20gYSBjb21tZW50IVxuIikKKword2lsbCBwcm9kdWNlOgorCisgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIF9fbWlnaHRfc2xlZXAoKSB7CisgMSkgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIC8qIEknbSBhIGNvbW1lbnQhICovCisgMSkgICAxLjQ0OSB1cyAgICB8ICAgICAgICAgICAgIH0KKworCitZb3UgbWlnaHQgZmluZCBvdGhlciB1c2VmdWwgZmVhdHVyZXMgZm9yIHRoaXMgdHJhY2VyIGluIHRoZQorZm9sbG93aW5nICJkeW5hbWljIGZ0cmFjZSIgc2VjdGlvbiBzdWNoIGFzIHRyYWNpbmcgb25seSBzcGVjaWZpYworZnVuY3Rpb25zIG9yIHRhc2tzLgorCiBkeW5hbWljIGZ0cmFjZQogLS0tLS0tLS0tLS0tLS0KIAogSWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFIGlzIHNldCwgdGhlIHN5c3RlbSB3aWxsIHJ1biB3aXRoCiB2aXJ0dWFsbHkgbm8gb3ZlcmhlYWQgd2hlbiBmdW5jdGlvbiB0cmFjaW5nIGlzIGRpc2FibGVkLiBUaGUgd2F5CiB0aGlzIHdvcmtzIGlzIHRoZSBtY291bnQgZnVuY3Rpb24gY2FsbCAocGxhY2VkIGF0IHRoZSBzdGFydCBvZgotZXZlcnkga2VybmVsIGZ1bmN0aW9uLCBwcm9kdWNlZCBieSB0aGUgLXBnIHN3aXRjaCBpbiBnY2MpLCBzdGFydHMKLW9mIHBvaW50aW5nIHRvIGEgc2ltcGxlIHJldHVybi4gKEVuYWJsaW5nIEZUUkFDRSB3aWxsIGluY2x1ZGUgdGhlCi0tcGcgc3dpdGNoIGluIHRoZSBjb21waWxpbmcgb2YgdGhlIGtlcm5lbC4pCitldmVyeSBrZXJuZWwgZnVuY3Rpb24sIHByb2R1Y2VkIGJ5IHRoZSAtcGcgc3dpdGNoIGluIGdjYyksCitzdGFydHMgb2YgcG9pbnRpbmcgdG8gYSBzaW1wbGUgcmV0dXJuLiAoRW5hYmxpbmcgRlRSQUNFIHdpbGwKK2luY2x1ZGUgdGhlIC1wZyBzd2l0Y2ggaW4gdGhlIGNvbXBpbGluZyBvZiB0aGUga2VybmVsLikKIAogQXQgY29tcGlsZSB0aW1lIGV2ZXJ5IEMgZmlsZSBvYmplY3QgaXMgcnVuIHRocm91Z2ggdGhlCiByZWNvcmRtY291bnQucGwgc2NyaXB0IChsb2NhdGVkIGluIHRoZSBzY3JpcHRzIGRpcmVjdG9yeSkuIFRoaXMKIHNjcmlwdCB3aWxsIHByb2Nlc3MgdGhlIEMgb2JqZWN0IHVzaW5nIG9iamR1bXAgdG8gZmluZCBhbGwgdGhlCi1sb2NhdGlvbnMgaW4gdGhlIC50ZXh0IHNlY3Rpb24gdGhhdCBjYWxsIG1jb3VudC4gKE5vdGUsIG9ubHkKLXRoZSAudGV4dCBzZWN0aW9uIGlzIHByb2Nlc3NlZCwgc2luY2UgcHJvY2Vzc2luZyBvdGhlciBzZWN0aW9ucwotbGlrZSAuaW5pdC50ZXh0IG1heSBjYXVzZSByYWNlcyBkdWUgdG8gdGhvc2Ugc2VjdGlvbnMgYmVpbmcgZnJlZWQpLgorbG9jYXRpb25zIGluIHRoZSAudGV4dCBzZWN0aW9uIHRoYXQgY2FsbCBtY291bnQuIChOb3RlLCBvbmx5IHRoZQorLnRleHQgc2VjdGlvbiBpcyBwcm9jZXNzZWQsIHNpbmNlIHByb2Nlc3Npbmcgb3RoZXIgc2VjdGlvbnMgbGlrZQorLmluaXQudGV4dCBtYXkgY2F1c2UgcmFjZXMgZHVlIHRvIHRob3NlIHNlY3Rpb25zIGJlaW5nIGZyZWVkKS4KIAotQSBuZXcgc2VjdGlvbiBjYWxsZWQgIl9fbWNvdW50X2xvYyIgaXMgY3JlYXRlZCB0aGF0IGhvbGRzIHJlZmVyZW5jZXMKLXRvIGFsbCB0aGUgbWNvdW50IGNhbGwgc2l0ZXMgaW4gdGhlIC50ZXh0IHNlY3Rpb24uIFRoaXMgc2VjdGlvbiBpcwotY29tcGlsZWQgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCBvYmplY3QuIFRoZSBmaW5hbCBsaW5rZXIgd2lsbCBhZGQKLWFsbCB0aGVzZSByZWZlcmVuY2VzIGludG8gYSBzaW5nbGUgdGFibGUuCitBIG5ldyBzZWN0aW9uIGNhbGxlZCAiX19tY291bnRfbG9jIiBpcyBjcmVhdGVkIHRoYXQgaG9sZHMKK3JlZmVyZW5jZXMgdG8gYWxsIHRoZSBtY291bnQgY2FsbCBzaXRlcyBpbiB0aGUgLnRleHQgc2VjdGlvbi4KK1RoaXMgc2VjdGlvbiBpcyBjb21waWxlZCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIG9iamVjdC4gVGhlCitmaW5hbCBsaW5rZXIgd2lsbCBhZGQgYWxsIHRoZXNlIHJlZmVyZW5jZXMgaW50byBhIHNpbmdsZSB0YWJsZS4KIAogT24gYm9vdCB1cCwgYmVmb3JlIFNNUCBpcyBpbml0aWFsaXplZCwgdGhlIGR5bmFtaWMgZnRyYWNlIGNvZGUKLXNjYW5zIHRoaXMgdGFibGUgYW5kIHVwZGF0ZXMgYWxsIHRoZSBsb2NhdGlvbnMgaW50byBub3BzLiBJdCBhbHNvCi1yZWNvcmRzIHRoZSBsb2NhdGlvbnMsIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgYXZhaWxhYmxlX2ZpbHRlcl9mdW5jdGlvbnMKLWxpc3QuICBNb2R1bGVzIGFyZSBwcm9jZXNzZWQgYXMgdGhleSBhcmUgbG9hZGVkIGFuZCBiZWZvcmUgdGhleSBhcmUKLWV4ZWN1dGVkLiAgV2hlbiBhIG1vZHVsZSBpcyB1bmxvYWRlZCwgaXQgYWxzbyByZW1vdmVzIGl0cyBmdW5jdGlvbnMgZnJvbQotdGhlIGZ0cmFjZSBmdW5jdGlvbiBsaXN0LiBUaGlzIGlzIGF1dG9tYXRpYyBpbiB0aGUgbW9kdWxlIHVubG9hZAotY29kZSwgYW5kIHRoZSBtb2R1bGUgYXV0aG9yIGRvZXMgbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgaXQuCitzY2FucyB0aGlzIHRhYmxlIGFuZCB1cGRhdGVzIGFsbCB0aGUgbG9jYXRpb25zIGludG8gbm9wcy4gSXQKK2Fsc28gcmVjb3JkcyB0aGUgbG9jYXRpb25zLCB3aGljaCBhcmUgYWRkZWQgdG8gdGhlCithdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucyBsaXN0LiAgTW9kdWxlcyBhcmUgcHJvY2Vzc2VkIGFzIHRoZXkKK2FyZSBsb2FkZWQgYW5kIGJlZm9yZSB0aGV5IGFyZSBleGVjdXRlZC4gIFdoZW4gYSBtb2R1bGUgaXMKK3VubG9hZGVkLCBpdCBhbHNvIHJlbW92ZXMgaXRzIGZ1bmN0aW9ucyBmcm9tIHRoZSBmdHJhY2UgZnVuY3Rpb24KK2xpc3QuIFRoaXMgaXMgYXV0b21hdGljIGluIHRoZSBtb2R1bGUgdW5sb2FkIGNvZGUsIGFuZCB0aGUKK21vZHVsZSBhdXRob3IgZG9lcyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdC4KIAotV2hlbiB0cmFjaW5nIGlzIGVuYWJsZWQsIGtzdG9wX21hY2hpbmUgaXMgY2FsbGVkIHRvIHByZXZlbnQgcmFjZXMKLXdpdGggdGhlIENQVVMgZXhlY3V0aW5nIGNvZGUgYmVpbmcgbW9kaWZpZWQgKHdoaWNoIGNhbiBjYXVzZSB0aGUKLUNQVSB0byBkbyB1bmRlc2lyZWFibGUgdGhpbmdzKSwgYW5kIHRoZSBub3BzIGFyZSBwYXRjaGVkIGJhY2sKLXRvIGNhbGxzLiBCdXQgdGhpcyB0aW1lLCB0aGV5IGRvIG5vdCBjYWxsIG1jb3VudCAod2hpY2ggaXMganVzdAotYSBmdW5jdGlvbiBzdHViKS4gVGhleSBub3cgY2FsbCBpbnRvIHRoZSBmdHJhY2UgaW5mcmFzdHJ1Y3R1cmUuCitXaGVuIHRyYWNpbmcgaXMgZW5hYmxlZCwga3N0b3BfbWFjaGluZSBpcyBjYWxsZWQgdG8gcHJldmVudAorcmFjZXMgd2l0aCB0aGUgQ1BVUyBleGVjdXRpbmcgY29kZSBiZWluZyBtb2RpZmllZCAod2hpY2ggY2FuCitjYXVzZSB0aGUgQ1BVIHRvIGRvIHVuZGVzaXJlYWJsZSB0aGluZ3MpLCBhbmQgdGhlIG5vcHMgYXJlCitwYXRjaGVkIGJhY2sgdG8gY2FsbHMuIEJ1dCB0aGlzIHRpbWUsIHRoZXkgZG8gbm90IGNhbGwgbWNvdW50Cisod2hpY2ggaXMganVzdCBhIGZ1bmN0aW9uIHN0dWIpLiBUaGV5IG5vdyBjYWxsIGludG8gdGhlIGZ0cmFjZQoraW5mcmFzdHJ1Y3R1cmUuCiAKIE9uZSBzcGVjaWFsIHNpZGUtZWZmZWN0IHRvIHRoZSByZWNvcmRpbmcgb2YgdGhlIGZ1bmN0aW9ucyBiZWluZwogdHJhY2VkIGlzIHRoYXQgd2UgY2FuIG5vdyBzZWxlY3RpdmVseSBjaG9vc2Ugd2hpY2ggZnVuY3Rpb25zIHdlCi13aXNoIHRvIHRyYWNlIGFuZCB3aGljaCBvbmVzIHdlIHdhbnQgdGhlIG1jb3VudCBjYWxscyB0byByZW1haW4gYXMKLW5vcHMuCit3aXNoIHRvIHRyYWNlIGFuZCB3aGljaCBvbmVzIHdlIHdhbnQgdGhlIG1jb3VudCBjYWxscyB0byByZW1haW4KK2FzIG5vcHMuCiAKLVR3byBmaWxlcyBhcmUgdXNlZCwgb25lIGZvciBlbmFibGluZyBhbmQgb25lIGZvciBkaXNhYmxpbmcgdGhlIHRyYWNpbmcKLW9mIHNwZWNpZmllZCBmdW5jdGlvbnMuIFRoZXkgYXJlOgorVHdvIGZpbGVzIGFyZSB1c2VkLCBvbmUgZm9yIGVuYWJsaW5nIGFuZCBvbmUgZm9yIGRpc2FibGluZyB0aGUKK3RyYWNpbmcgb2Ygc3BlY2lmaWVkIGZ1bmN0aW9ucy4gVGhleSBhcmU6CiAKICAgc2V0X2Z0cmFjZV9maWx0ZXIKIApAQCAtMTIwMiw4ICsxNTM1LDggQEAKIAogICBzZXRfZnRyYWNlX25vdHJhY2UKIAotQSBsaXN0IG9mIGF2YWlsYWJsZSBmdW5jdGlvbnMgdGhhdCB5b3UgY2FuIGFkZCB0byB0aGVzZSBmaWxlcyBpcyBsaXN0ZWQKLWluOgorQSBsaXN0IG9mIGF2YWlsYWJsZSBmdW5jdGlvbnMgdGhhdCB5b3UgY2FuIGFkZCB0byB0aGVzZSBmaWxlcyBpcworbGlzdGVkIGluOgogCiAgICBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucwogCkBAIC0xMjQwLDggKzE1NzMsOCBAQAogc3lzX25hbm9zbGVlcAogCiAKLVBlcmhhcHMgdGhpcyBpcyBub3QgZW5vdWdoLiBUaGUgZmlsdGVycyBhbHNvIGFsbG93IHNpbXBsZSB3aWxkIGNhcmRzLgotT25seSB0aGUgZm9sbG93aW5nIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlCitQZXJoYXBzIHRoaXMgaXMgbm90IGVub3VnaC4gVGhlIGZpbHRlcnMgYWxzbyBhbGxvdyBzaW1wbGUgd2lsZAorY2FyZHMuIE9ubHkgdGhlIGZvbGxvd2luZyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZQogCiAgIDxtYXRjaD4qICAtIHdpbGwgbWF0Y2ggZnVuY3Rpb25zIHRoYXQgYmVnaW4gd2l0aCA8bWF0Y2g+CiAgICo8bWF0Y2g+ICAtIHdpbGwgbWF0Y2ggZnVuY3Rpb25zIHRoYXQgZW5kIHdpdGggPG1hdGNoPgpAQCAtMTI1MSw5ICsxNTg0LDkgQEAKIAogICA8bWF0Y2g+KjxtYXRjaD4gd2lsbCBub3Qgd29yay4KIAotTm90ZTogSXQgaXMgYmV0dGVyIHRvIHVzZSBxdW90ZXMgdG8gZW5jbG9zZSB0aGUgd2lsZCBjYXJkcywgb3RoZXJ3aXNlCi0gIHRoZSBzaGVsbCBtYXkgZXhwYW5kIHRoZSBwYXJhbWV0ZXJzIGludG8gbmFtZXMgb2YgZmlsZXMgaW4gdGhlIGxvY2FsCi0gIGRpcmVjdG9yeS4KK05vdGU6IEl0IGlzIGJldHRlciB0byB1c2UgcXVvdGVzIHRvIGVuY2xvc2UgdGhlIHdpbGQgY2FyZHMsCisgICAgICBvdGhlcndpc2UgdGhlIHNoZWxsIG1heSBleHBhbmQgdGhlIHBhcmFtZXRlcnMgaW50byBuYW1lcworICAgICAgb2YgZmlsZXMgaW4gdGhlIGxvY2FsIGRpcmVjdG9yeS4KIAogICMgZWNobyAnaHJ0aW1lcl8qJyA+IC9kZWJ1Zy90cmFjaW5nL3NldF9mdHJhY2VfZmlsdGVyCiAKQEAgLTEyOTksNyArMTYzMiw4IEBACiBUbyByZXdyaXRlIHRoZSBmaWx0ZXJzLCB1c2UgJz4nCiBUbyBhcHBlbmQgdG8gdGhlIGZpbHRlcnMsIHVzZSAnPj4nCiAKLVRvIGNsZWFyIG91dCBhIGZpbHRlciBzbyB0aGF0IGFsbCBmdW5jdGlvbnMgd2lsbCBiZSByZWNvcmRlZCBhZ2FpbjoKK1RvIGNsZWFyIG91dCBhIGZpbHRlciBzbyB0aGF0IGFsbCBmdW5jdGlvbnMgd2lsbCBiZSByZWNvcmRlZAorYWdhaW46CiAKICAjIGVjaG8gPiAvZGVidWcvdHJhY2luZy9zZXRfZnRyYWNlX2ZpbHRlcgogICMgY2F0IC9kZWJ1Zy90cmFjaW5nL3NldF9mdHJhY2VfZmlsdGVyCkBAIC0xMzMxLDcgKzE2NjUsOCBAQAogaHJ0aW1lcl9pbml0X3NsZWVwZXIKIAogCi1UaGUgc2V0X2Z0cmFjZV9ub3RyYWNlIHByZXZlbnRzIHRob3NlIGZ1bmN0aW9ucyBmcm9tIGJlaW5nIHRyYWNlZC4KK1RoZSBzZXRfZnRyYWNlX25vdHJhY2UgcHJldmVudHMgdGhvc2UgZnVuY3Rpb25zIGZyb20gYmVpbmcKK3RyYWNlZC4KIAogICMgZWNobyAnKnByZWVtcHQqJyAnKmxvY2sqJyA+IC9kZWJ1Zy90cmFjaW5nL3NldF9mdHJhY2Vfbm90cmFjZQogCkBAIC0xMzUzLDEzICsxNjg4LDc1IEBACiAKIFdlIGNhbiBzZWUgdGhhdCB0aGVyZSdzIG5vIG1vcmUgbG9jayBvciBwcmVlbXB0IHRyYWNpbmcuCiAKKworRHluYW1pYyBmdHJhY2Ugd2l0aCB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0aG91Z2ggd2hhdCBoYXMgYmVlbiBleHBsYWluZWQgYWJvdmUgY29uY2VybnMgYm90aCB0aGUKK2Z1bmN0aW9uIHRyYWNlciBhbmQgdGhlIGZ1bmN0aW9uLWdyYXBoLXRyYWNlciwgdGhlcmUgYXJlIHNvbWUKK3NwZWNpYWwgZmVhdHVyZXMgb25seSBhdmFpbGFibGUgaW4gdGhlIGZ1bmN0aW9uLWdyYXBoIHRyYWNlci4KKworSWYgeW91IHdhbnQgdG8gdHJhY2Ugb25seSBvbmUgZnVuY3Rpb24gYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4sCit5b3UganVzdCBoYXZlIHRvIGVjaG8gaXRzIG5hbWUgaW50byBzZXRfZ3JhcGhfZnVuY3Rpb246CisKKyBlY2hvIF9fZG9fZmF1bHQgPiBzZXRfZ3JhcGhfZnVuY3Rpb24KKword2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgImV4cGFuZGVkIiB0cmFjZSBvZiB0aGUgX19kb19mYXVsdCgpCitmdW5jdGlvbjoKKworIDApICAgICAgICAgICAgICAgfCAgX19kb19mYXVsdCgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgZmlsZW1hcF9mYXVsdCgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICBmaW5kX2xvY2tfcGFnZSgpIHsKKyAwKSAgIDAuODA0IHVzICAgIHwgICAgICAgIGZpbmRfZ2V0X3BhZ2UoKTsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICAgIF9fbWlnaHRfc2xlZXAoKSB7CisgMCkgICAxLjMyOSB1cyAgICB8ICAgICAgICB9CisgMCkgICAzLjkwNCB1cyAgICB8ICAgICAgfQorIDApICAgNC45NzkgdXMgICAgfCAgICB9CisgMCkgICAwLjY1MyB1cyAgICB8ICAgIF9zcGluX2xvY2soKTsKKyAwKSAgIDAuNTc4IHVzICAgIHwgICAgcGFnZV9hZGRfZmlsZV9ybWFwKCk7CisgMCkgICAwLjUyNSB1cyAgICB8ICAgIG5hdGl2ZV9zZXRfcHRlX2F0KCk7CisgMCkgICAwLjU4NSB1cyAgICB8ICAgIF9zcGluX3VubG9jaygpOworIDApICAgICAgICAgICAgICAgfCAgICB1bmxvY2tfcGFnZSgpIHsKKyAwKSAgIDAuNTQxIHVzICAgIHwgICAgICBwYWdlX3dhaXRxdWV1ZSgpOworIDApICAgMC42MzkgdXMgICAgfCAgICAgIF9fd2FrZV91cF9iaXQoKTsKKyAwKSAgIDIuNzg2IHVzICAgIHwgICAgfQorIDApICsgMTQuMjM3IHVzICAgfCAgfQorIDApICAgICAgICAgICAgICAgfCAgX19kb19mYXVsdCgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgZmlsZW1hcF9mYXVsdCgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICBmaW5kX2xvY2tfcGFnZSgpIHsKKyAwKSAgIDAuNjk4IHVzICAgIHwgICAgICAgIGZpbmRfZ2V0X3BhZ2UoKTsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICAgIF9fbWlnaHRfc2xlZXAoKSB7CisgMCkgICAxLjQxMiB1cyAgICB8ICAgICAgICB9CisgMCkgICAzLjk1MCB1cyAgICB8ICAgICAgfQorIDApICAgNS4wOTggdXMgICAgfCAgICB9CisgMCkgICAwLjYzMSB1cyAgICB8ICAgIF9zcGluX2xvY2soKTsKKyAwKSAgIDAuNTcxIHVzICAgIHwgICAgcGFnZV9hZGRfZmlsZV9ybWFwKCk7CisgMCkgICAwLjUyNiB1cyAgICB8ICAgIG5hdGl2ZV9zZXRfcHRlX2F0KCk7CisgMCkgICAwLjU4NiB1cyAgICB8ICAgIF9zcGluX3VubG9jaygpOworIDApICAgICAgICAgICAgICAgfCAgICB1bmxvY2tfcGFnZSgpIHsKKyAwKSAgIDAuNTMzIHVzICAgIHwgICAgICBwYWdlX3dhaXRxdWV1ZSgpOworIDApICAgMC42MzggdXMgICAgfCAgICAgIF9fd2FrZV91cF9iaXQoKTsKKyAwKSAgIDIuNzkzIHVzICAgIHwgICAgfQorIDApICsgMTQuMDEyIHVzICAgfCAgfQorCitZb3UgY2FuIGFsc28gZXhwYW5kIHNldmVyYWwgZnVuY3Rpb25zIGF0IG9uY2U6CisKKyBlY2hvIHN5c19vcGVuID4gc2V0X2dyYXBoX2Z1bmN0aW9uCisgZWNobyBzeXNfY2xvc2UgPj4gc2V0X2dyYXBoX2Z1bmN0aW9uCisKK05vdyBpZiB5b3Ugd2FudCB0byBnbyBiYWNrIHRvIHRyYWNlIGFsbCBmdW5jdGlvbnMgeW91IGNhbiBjbGVhcgordGhpcyBzcGVjaWFsIGZpbHRlciB2aWE6CisKKyBlY2hvID4gc2V0X2dyYXBoX2Z1bmN0aW9uCisKKwogdHJhY2VfcGlwZQogLS0tLS0tLS0tLQogCi1UaGUgdHJhY2VfcGlwZSBvdXRwdXRzIHRoZSBzYW1lIGNvbnRlbnQgYXMgdGhlIHRyYWNlIGZpbGUsIGJ1dCB0aGUgZWZmZWN0Ci1vbiB0aGUgdHJhY2luZyBpcyBkaWZmZXJlbnQuIEV2ZXJ5IHJlYWQgZnJvbSB0cmFjZV9waXBlIGlzIGNvbnN1bWVkLgotVGhpcyBtZWFucyB0aGF0IHN1YnNlcXVlbnQgcmVhZHMgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSB0cmFjZQotaXMgbGl2ZS4KK1RoZSB0cmFjZV9waXBlIG91dHB1dHMgdGhlIHNhbWUgY29udGVudCBhcyB0aGUgdHJhY2UgZmlsZSwgYnV0Cit0aGUgZWZmZWN0IG9uIHRoZSB0cmFjaW5nIGlzIGRpZmZlcmVudC4gRXZlcnkgcmVhZCBmcm9tCit0cmFjZV9waXBlIGlzIGNvbnN1bWVkLiBUaGlzIG1lYW5zIHRoYXQgc3Vic2VxdWVudCByZWFkcyB3aWxsIGJlCitkaWZmZXJlbnQuIFRoZSB0cmFjZSBpcyBsaXZlLgogCiAgIyBlY2hvIGZ1bmN0aW9uID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKICAjIGNhdCAvZGVidWcvdHJhY2luZy90cmFjZV9waXBlID4gL3RtcC90cmFjZS5vdXQgJgpAQCAtMTM4NywzOCArMTc4NCw0NSBAQAogICAgICAgICAgICAgYmFzaC00MDQzICBbMDBdIDQxLjI2NzExMTogc2VsZWN0X3Rhc2tfcnFfcnQgPC10cnlfdG9fd2FrZV91cAogCiAKLU5vdGUsIHJlYWRpbmcgdGhlIHRyYWNlX3BpcGUgZmlsZSB3aWxsIGJsb2NrIHVudGlsIG1vcmUgaW5wdXQgaXMgYWRkZWQuCi1CeSBjaGFuZ2luZyB0aGUgdHJhY2VyLCB0cmFjZV9waXBlIHdpbGwgaXNzdWUgYW4gRU9GLiBXZSBuZWVkZWQKLXRvIHNldCB0aGUgZnVuY3Rpb24gdHJhY2VyIF9iZWZvcmVfIHdlICJjYXQiIHRoZSB0cmFjZV9waXBlIGZpbGUuCitOb3RlLCByZWFkaW5nIHRoZSB0cmFjZV9waXBlIGZpbGUgd2lsbCBibG9jayB1bnRpbCBtb3JlIGlucHV0IGlzCithZGRlZC4gQnkgY2hhbmdpbmcgdGhlIHRyYWNlciwgdHJhY2VfcGlwZSB3aWxsIGlzc3VlIGFuIEVPRi4gV2UKK25lZWRlZCB0byBzZXQgdGhlIGZ1bmN0aW9uIHRyYWNlciBfYmVmb3JlXyB3ZSAiY2F0IiB0aGUKK3RyYWNlX3BpcGUgZmlsZS4KIAogCiB0cmFjZSBlbnRyaWVzCiAtLS0tLS0tLS0tLS0tCiAKLUhhdmluZyB0b28gbXVjaCBvciBub3QgZW5vdWdoIGRhdGEgY2FuIGJlIHRyb3VibGVzb21lIGluIGRpYWdub3NpbmcKLWFuIGlzc3VlIGluIHRoZSBrZXJuZWwuIFRoZSBmaWxlIGJ1ZmZlcl9zaXplX2tiIGlzIHVzZWQgdG8gbW9kaWZ5Ci10aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgdHJhY2UgYnVmZmVycy4gVGhlIG51bWJlciBsaXN0ZWQKLWlzIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0IGNhbiBiZSByZWNvcmRlZCBwZXIgQ1BVLiBUbyBrbm93Ci10aGUgZnVsbCBzaXplLCBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIENQVVMgd2l0aCB0aGUKLW51bWJlciBvZiBlbnRyaWVzLgorSGF2aW5nIHRvbyBtdWNoIG9yIG5vdCBlbm91Z2ggZGF0YSBjYW4gYmUgdHJvdWJsZXNvbWUgaW4KK2RpYWdub3NpbmcgYW4gaXNzdWUgaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGUgYnVmZmVyX3NpemVfa2IgaXMKK3VzZWQgdG8gbW9kaWZ5IHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCB0cmFjZSBidWZmZXJzLiBUaGUKK251bWJlciBsaXN0ZWQgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgY2FuIGJlIHJlY29yZGVkIHBlcgorQ1BVLiBUbyBrbm93IHRoZSBmdWxsIHNpemUsIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgcG9zc2libGUgQ1BVUword2l0aCB0aGUgbnVtYmVyIG9mIGVudHJpZXMuCiAKICAjIGNhdCAvZGVidWcvdHJhY2luZy9idWZmZXJfc2l6ZV9rYgogMTQwOCAodW5pdHMga2lsb2J5dGVzKQogCi1Ob3RlLCB0byBtb2RpZnkgdGhpcywgeW91IG11c3QgaGF2ZSB0cmFjaW5nIGNvbXBsZXRlbHkgZGlzYWJsZWQuIFRvIGRvIHRoYXQsCi1lY2hvICJub3AiIGludG8gdGhlIGN1cnJlbnRfdHJhY2VyLiBJZiB0aGUgY3VycmVudF90cmFjZXIgaXMgbm90IHNldAotdG8gIm5vcCIsIGFuIEVJTlZBTCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorTm90ZSwgdG8gbW9kaWZ5IHRoaXMsIHlvdSBtdXN0IGhhdmUgdHJhY2luZyBjb21wbGV0ZWx5IGRpc2FibGVkLgorVG8gZG8gdGhhdCwgZWNobyAibm9wIiBpbnRvIHRoZSBjdXJyZW50X3RyYWNlci4gSWYgdGhlCitjdXJyZW50X3RyYWNlciBpcyBub3Qgc2V0IHRvICJub3AiLCBhbiBFSU5WQUwgZXJyb3Igd2lsbCBiZQorcmV0dXJuZWQuCiAKICAjIGVjaG8gbm9wID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKICAjIGVjaG8gMTAwMDAgPiAvZGVidWcvdHJhY2luZy9idWZmZXJfc2l6ZV9rYgogICMgY2F0IC9kZWJ1Zy90cmFjaW5nL2J1ZmZlcl9zaXplX2tiCiAxMDAwMCAodW5pdHMga2lsb2J5dGVzKQogCi1UaGUgbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIHdpbGwgYmUgYWxsb2NhdGVkIGlzIGxpbWl0ZWQgdG8gYSBwZXJjZW50YWdlCi1vZiBhdmFpbGFibGUgbWVtb3J5LiBBbGxvY2F0aW5nIHRvbyBtdWNoIHdpbGwgcHJvZHVjZSBhbiBlcnJvci4KK1RoZSBudW1iZXIgb2YgcGFnZXMgd2hpY2ggd2lsbCBiZSBhbGxvY2F0ZWQgaXMgbGltaXRlZCB0byBhCitwZXJjZW50YWdlIG9mIGF2YWlsYWJsZSBtZW1vcnkuIEFsbG9jYXRpbmcgdG9vIG11Y2ggd2lsbCBwcm9kdWNlCithbiBlcnJvci4KIAogICMgZWNobyAxMDAwMDAwMDAwMDAwID4gL2RlYnVnL3RyYWNpbmcvYnVmZmVyX3NpemVfa2IKIC1iYXNoOiBlY2hvOiB3cml0ZSBlcnJvcjogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeQogICMgY2F0IC9kZWJ1Zy90cmFjaW5nL2J1ZmZlcl9zaXplX2tiCiA4NQogCistLS0tLS0tLS0tLQorCitNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgY29kZSwgaW4gdGhlCitrZXJuZWwvdHJhY2luZy8qLmMgZmlsZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAppbmRleCBiMWI5ODg3Li4xNDVjMjVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKQEAgLTEyMyw3ICsxMjMsMTAgQEAKIAogVXNpbmcgR1BJT3MKIC0tLS0tLS0tLS0tCi1PbmUgb2YgdGhlIGZpcnN0IHRoaW5ncyB0byBkbyB3aXRoIGEgR1BJTywgb2Z0ZW4gaW4gYm9hcmQgc2V0dXAgY29kZSB3aGVuCitUaGUgZmlyc3QgdGhpbmcgYSBzeXN0ZW0gc2hvdWxkIGRvIHdpdGggYSBHUElPIGlzIGFsbG9jYXRlIGl0LCB1c2luZwordGhlIGdwaW9fcmVxdWVzdCgpIGNhbGw7IHNlZSBsYXRlci4KKworT25lIG9mIHRoZSBuZXh0IHRoaW5ncyB0byBkbyB3aXRoIGEgR1BJTywgb2Z0ZW4gaW4gYm9hcmQgc2V0dXAgY29kZSB3aGVuCiBzZXR0aW5nIHVwIGEgcGxhdGZvcm1fZGV2aWNlIHVzaW5nIHRoZSBHUElPLCBpcyBtYXJrIGl0cyBkaXJlY3Rpb246CiAKIAkvKiBzZXQgYXMgaW5wdXQgb3Igb3V0cHV0LCByZXR1cm5pbmcgMCBvciBuZWdhdGl2ZSBlcnJubyAqLwpAQCAtMTQxLDggKzE0NCw4IEBACiAKIEZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IGludGVyZmFjZXMgdG8gR1BJT3MsIHNldHRpbmcgdGhlIGRpcmVjdGlvbgogb2YgYSBHUElPIGltcGxpY2l0bHkgcmVxdWVzdHMgdGhhdCBHUElPIChzZWUgYmVsb3cpIGlmIGl0IGhhcyBub3QgYmVlbgotcmVxdWVzdGVkIGFscmVhZHkuICBUaGF0IGNvbXBhdGliaWxpdHkgbWF5IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZTsKLWV4cGxpY2l0bHkgcmVxdWVzdGluZyBHUElPcyBpcyBzdHJvbmdseSBwcmVmZXJyZWQuCityZXF1ZXN0ZWQgYWxyZWFkeS4gIFRoYXQgY29tcGF0aWJpbGl0eSBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIG9wdGlvbmFsCitncGlvbGliIGZyYW1ld29yay4KIAogU2V0dGluZyB0aGUgZGlyZWN0aW9uIGNhbiBmYWlsIGlmIHRoZSBHUElPIG51bWJlciBpcyBpbnZhbGlkLCBvciB3aGVuCiB0aGF0IHBhcnRpY3VsYXIgR1BJTyBjYW4ndCBiZSB1c2VkIGluIHRoYXQgbW9kZS4gIEl0J3MgZ2VuZXJhbGx5IGEgYmFkCkBAIC0xOTUsNyArMTk4LDcgQEAKIAogUGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGlzIHR5cGUgb2YgR1BJTyBkaXN0aW5ndWlzaCB0aGVtIGZyb20gb3RoZXIgR1BJT3MKIGJ5IHJldHVybmluZyBub256ZXJvIGZyb20gdGhpcyBjYWxsICh3aGljaCByZXF1aXJlcyBhIHZhbGlkIEdQSU8gbnVtYmVyLAotZWl0aGVyIGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSByZXF1ZXN0ZWQpOgord2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIGdwaW9fcmVxdWVzdCk6CiAKIAlpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBncGlvKTsKIApAQCAtMjEyLDEwICsyMTUsOSBAQAogc2FtZSBhcyB0aGUgc3BpbmxvY2stc2FmZSBjYWxscy4KIAogCi1DbGFpbWluZyBhbmQgUmVsZWFzaW5nIEdQSU9zIChPUFRJT05BTCkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhaW1pbmcgYW5kIFJlbGVhc2luZyBHUElPcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVG8gaGVscCBjYXRjaCBzeXN0ZW0gY29uZmlndXJhdGlvbiBlcnJvcnMsIHR3byBjYWxscyBhcmUgZGVmaW5lZC4KLUhvd2V2ZXIsIG1hbnkgcGxhdGZvcm1zIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHRoaXMgbWVjaGFuaXNtLgogCiAJLyogcmVxdWVzdCBHUElPLCByZXR1cm5pbmcgMCBvciBuZWdhdGl2ZSBlcnJuby4KIAkgKiBub24tbnVsbCBsYWJlbHMgbWF5IGJlIHVzZWZ1bCBmb3IgZGlhZ25vc3RpY3MuCkBAIC0yNDQsMTMgKzI0Niw2IEBACiBwb3dlciBtYW5hZ2VtZW50LCBzdWNoIGFzIGJ5IHBvd2VyaW5nIGRvd24gdW51c2VkIGNoaXAgc2VjdG9ycyBhbmQsIG1vcmUKIGVhc2lseSwgZ2F0aW5nIG9mZiB1bnVzZWQgY2xvY2tzLgogCi1UaGVzZSB0d28gY2FsbHMgYXJlIG9wdGlvbmFsIGJlY2F1c2Ugbm90IG5vdCBhbGwgY3VycmVudCBMaW51eCBwbGF0Zm9ybXMKLW9mZmVyIHN1Y2ggZnVuY3Rpb25hbGl0eSBpbiB0aGVpciBHUElPIHN1cHBvcnQ7IGEgdmFsaWQgaW1wbGVtZW50YXRpb24KLWNvdWxkIHJldHVybiBzdWNjZXNzIGZvciBhbGwgZ3Bpb19yZXF1ZXN0KCkgY2FsbHMuICBVbmxpa2UgdGhlIG90aGVyIGNhbGxzLAotdGhlIHN0YXRlIHRoZXkgcmVwcmVzZW50IGRvZXNuJ3Qgbm9ybWFsbHkgbWF0Y2ggYW55dGhpbmcgZnJvbSBhIGhhcmR3YXJlCi1yZWdpc3RlcjsgaXQncyBqdXN0IGEgc29mdHdhcmUgYml0bWFwIHdoaWNoIGNsZWFybHkgaXMgbm90IG5lY2Vzc2FyeSBmb3IKLWNvcnJlY3Qgb3BlcmF0aW9uIG9mIGhhcmR3YXJlIG9yIChidWcgZnJlZSkgZHJpdmVycy4KLQogTm90ZSB0aGF0IHJlcXVlc3RpbmcgYSBHUElPIGRvZXMgTk9UIGNhdXNlIGl0IHRvIGJlIGNvbmZpZ3VyZWQgaW4gYW55CiB3YXk7IGl0IGp1c3QgbWFya3MgdGhhdCBHUElPIGFzIGluIHVzZS4gIFNlcGFyYXRlIGNvZGUgbXVzdCBoYW5kbGUgYW55CiBwaW4gc2V0dXAgKGUuZy4gY29udHJvbGxpbmcgd2hpY2ggcGluIHRoZSBHUElPIHVzZXMsIHB1bGx1cC9wdWxsZG93bikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQva3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CmluZGV4IDg0ZjdjYjMuLmZmYjVjODAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CkBAIC00Miw3ICs0Miw3IEBACiAJCWhnIGNsb25lIGh0dHA6Ly94ZW5iaXRzLnhlbnNvdXJjZS5jb20vZXh0L2VmaS12ZmlybXdhcmUuaGcKIAkgICAgeW91IGNhbiBnZXQgdGhlIGZpcm13YXJlJ3MgYmluYXJ5IGluIHRoZSBkaXJlY3Rvcnkgb2YgZWZpLXZmaXJtd2FyZS5oZy9iaW5hcmllcy4KIAotCSgzKSBSZW5hbWUgdGhlIGZpcndhcmUgeW91IG93bmVkIHRvIEZsYXNoLmZkLCBhbmQgY29weSBpdCB0byAvdXNyL2xvY2FsL3NoYXJlL3FlbXUKKwkoMykgUmVuYW1lIHRoZSBmaXJtd2FyZSB5b3Ugb3duZWQgdG8gRmxhc2guZmQsIGFuZCBjb3B5IGl0IHRvIC91c3IvbG9jYWwvc2hhcmUvcWVtdQogCiA0LiBCb290IHVwIExpbnV4IG9yIFdpbmRvd3MgZ3Vlc3RzOgogCTQuMSBDcmVhdGUgb3IgaW5zdGFsbCBhIGltYWdlIGZvciBndWVzdCBib290LiBJZiB5b3UgaGF2ZSB4ZW4gZXhwZXJpZW5jZSwgaXQgc2hvdWxkIGJlIGVhc3kuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDhiMjA2N2MuLjhlM2Y2ZTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC01MCw2ICs1MCw3IEBACiAJSVNBUE5QCUlTQSBQblAgY29kZSBpcyBlbmFibGVkLgogCUlTRE4JQXBwcm9wcmlhdGUgSVNETiBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJSk9ZCUFwcHJvcHJpYXRlIGpveXN0aWNrIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlLTUVNVFJBQ0Uga21lbXRyYWNlIGlzIGVuYWJsZWQuCiAJTElCQVRBICBMaWJhdGEgZHJpdmVyIGlzIGVuYWJsZWQKIAlMUAlQcmludGVyIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlMT09QCUxvb3BiYWNrIGRldmljZSBzdXBwb3J0IGlzIGVuYWJsZWQuCkBAIC02MTcsNiArNjE4LDkgQEAKIAogCWRlYnVnX29iamVjdHMJW0tOTF0gRW5hYmxlIG9iamVjdCBkZWJ1Z2dpbmcKIAorCW5vX2RlYnVnX29iamVjdHMKKwkJCVtLTkxdIERpc2FibGUgb2JqZWN0IGRlYnVnZ2luZworCiAJZGVidWdwYXQJW1g4Nl0gRW5hYmxlIFBBVCBkZWJ1Z2dpbmcKIAogCWRlY25ldC5hZGRyPQlbSFcsTkVUXQpAQCAtMTA3OCw2ICsxMDgyLDE1IEBACiAJCQl1c2UgdGhlIEhpZ2hNZW0gem9uZSBpZiBpdCBleGlzdHMsIGFuZCB0aGUgTm9ybWFsCiAJCQl6b25lIGlmIGl0IGRvZXMgbm90LgogCisJa21lbXRyYWNlLmVuYWJsZT0JW0tOTCxLTUVNVFJBQ0VdIEZvcm1hdDogeyB5ZXMgfCBubyB9CisJCQkJQ29udHJvbHMgd2hldGhlciBrbWVtdHJhY2UgaXMgZW5hYmxlZAorCQkJCWF0IGJvb3QtdGltZS4KKworCWttZW10cmFjZS5zdWJidWZzPW4JW0tOTCxLTUVNVFJBQ0VdIE92ZXJyaWRlcyB0aGUgbnVtYmVyIG9mCisJCQlzdWJidWZzIGttZW10cmFjZSdzIHJlbGF5IGNoYW5uZWwgaGFzLiBTZXQgdGhpcworCQkJaGlnaGVyIHRoYW4gZGVmYXVsdCAoS01FTVRSQUNFX05fU1VCQlVGUyBpbiBjb2RlKSBpZgorCQkJeW91IGV4cGVyaWVuY2UgYnVmZmVyIG92ZXJydW5zLgorCiAJbW92YWJsZWNvcmU9bm5bS01HXQlbS05MLFg4Ni0zMixJQS02NCxQUEMsWDg2LTY0XSBUaGlzIHBhcmFtZXRlcgogCQkJaXMgc2ltaWxhciB0byBrZXJuZWxjb3JlIGV4Y2VwdCBpdCBzcGVjaWZpZXMgdGhlCiAJCQlhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIG1pZ3JhdGFibGUgYWxsb2NhdGlvbnMuCkBAIC0xNTIzLDcgKzE1MzYsOSBAQAogCiAJbm9jbGZsdXNoCVtCVUdTPVg4Nl0gRG9uJ3QgdXNlIHRoZSBDTEZMVVNIIGluc3RydWN0aW9uCiAKLQlub2hsdAkJW0JVR1M9QVJNLFNIXQorCW5vaGx0CQlbQlVHUz1BUk0sU0hdIFRlbGxzIHRoZSBrZXJuZWwgdGhhdCB0aGUgc2xlZXAoU0gpIG9yCisJCQl3ZmkoQVJNKSBpbnN0cnVjdGlvbiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGFuZCBub3QgdG8KKwkJCXVzZSBpdC4gVGhpcyBpcyBhbHNvIHVzZWZ1bCB3aGVuIHVzaW5nIEpUQUcgZGVidWdnZXIuCiAKIAluby1obHQJCVtCVUdTPVg4Ni0zMl0gVGVsbHMgdGhlIGtlcm5lbCB0aGF0IHRoZSBobHQKIAkJCWluc3RydWN0aW9uIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgYW5kIG5vdCB0bwpAQCAtMTYwNSw3ICsxNjIwLDcgQEAKIAlub3NvZnRsb2NrdXAJW0tOTF0gRGlzYWJsZSB0aGUgc29mdC1sb2NrdXAgZGV0ZWN0b3IuCiAKIAlub3N3YXBhY2NvdW50CVtLTkxdIERpc2FibGUgYWNjb3VudGluZyBvZiBzd2FwIGluIG1lbW9yeSByZXNvdXJjZQotCQkJY29udHJvbGxlci4gKFNlZSBEb2N1bWVudGF0aW9uL2NvbnRyb2xsZXJzL21lbW9yeS50eHQpCisJCQljb250cm9sbGVyLiAoU2VlIERvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0KQogCiAJbm9zeW5jCQlbSFcsTTY4S10gRGlzYWJsZXMgc3luYyBuZWdvdGlhdGlvbiBmb3IgYWxsIGRldmljZXMuCiAKQEAgLTE5NTUsNyArMTk3MCw3IEBACiAKIAlyZWxheF9kb21haW5fbGV2ZWw9CiAJCQlbS05MLCBTTVBdIFNldCBzY2hlZHVsZXIncyBkZWZhdWx0IHJlbGF4X2RvbWFpbl9sZXZlbC4KLQkJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXNldHMudHh0LgorCQkJU2VlIERvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dC4KIAogCXJlc2VydmU9CVtLTkwsQlVHU10gRm9yY2UgdGhlIGtlcm5lbCB0byBpZ25vcmUgc29tZSBpb21lbSBhcmVhCiAKQEAgLTIzNjQsNiArMjM3OSw4IEBACiAKIAl0cDcyMD0JCVtIVyxQUzJdCiAKKwl0cmFjZV9idWZfc2l6ZT1ubltLTUddIFtmdHJhY2VdIHdpbGwgc2V0IHRyYWNpbmcgYnVmZmVyIHNpemUuCisKIAl0cml4PQkJW0hXLE9TU10gTWVkaWFUcml4IEF1ZGlvVHJpeCBQcm8KIAkJCUZvcm1hdDoKIAkJCTxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxzYl9pbz4sPHNiX2lycT4sPHNiX2RtYT4sPG1wdV9pbz4sPG1wdV9pcnE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21kLnR4dCBiL0RvY3VtZW50YXRpb24vbWQudHh0CmluZGV4IDFkYTlkMWIuLjRlZGQzOWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWQudHh0CkBAIC0xNjQsMTUgKzE2NCwxOSBAQAogICByYWlkX2Rpc2tzCiAgICAgIGEgdGV4dCBmaWxlIHdpdGggYSBzaW1wbGUgbnVtYmVyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkZXZpY2VzCiAgICAgIGluIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJheS4gIElmIHRoaXMgaXMgbm90IHlldCBrbm93biwgdGhlIGZpbGUKLSAgICAgd2lsbCBiZSBlbXB0eS4gIElmIGFuIGFycmF5IGlzIGJlaW5nIHJlc2l6ZWQgKG5vdCBjdXJyZW50bHkKLSAgICAgcG9zc2libGUpIHRoaXMgd2lsbCBjb250YWluIHRoZSBsYXJnZXIgb2YgdGhlIG9sZCBhbmQgbmV3IHNpemVzLgotICAgICBTb21lIHJhaWQgbGV2ZWwgKFJBSUQxKSBhbGxvdyB0aGlzIHZhbHVlIHRvIGJlIHNldCB3aGlsZSB0aGUKLSAgICAgYXJyYXkgaXMgYWN0aXZlLiAgVGhpcyB3aWxsIHJlY29uZmlndXJlIHRoZSBhcnJheS4gICBPdGhlcndpc2UKLSAgICAgaXQgY2FuIG9ubHkgYmUgc2V0IHdoaWxlIGFzc2VtYmxpbmcgYW4gYXJyYXkuCisgICAgIHdpbGwgYmUgZW1wdHkuICBJZiBhbiBhcnJheSBpcyBiZWluZyByZXNpemVkIHRoaXMgd2lsbCBjb250YWluCisgICAgIHRoZSBuZXcgbnVtYmVyIG9mIGRldmljZXMuCisgICAgIFNvbWUgcmFpZCBsZXZlbHMgYWxsb3cgdGhpcyB2YWx1ZSB0byBiZSBzZXQgd2hpbGUgdGhlIGFycmF5IGlzCisgICAgIGFjdGl2ZS4gIFRoaXMgd2lsbCByZWNvbmZpZ3VyZSB0aGUgYXJyYXkuICAgT3RoZXJ3aXNlIGl0IGNhbiBvbmx5CisgICAgIGJlIHNldCB3aGlsZSBhc3NlbWJsaW5nIGFuIGFycmF5LgorICAgICBBIGNoYW5nZSB0byB0aGlzIGF0dHJpYnV0ZSB3aWxsIG5vdCBiZSBwZXJtaXR0ZWQgaWYgaXQgd291bGQKKyAgICAgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBhcnJheS4gIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGRyaXZlcworICAgICBpbiBhbiBlLmcuIHJhaWQ1LCB0aGUgYXJyYXkgc2l6ZSBtdXN0IGZpcnN0IGJlIHJlZHVjZWQgYnkKKyAgICAgc2V0dGluZyB0aGUgJ2FycmF5X3NpemUnIGF0dHJpYnV0ZS4KIAogICBjaHVua19zaXplCi0gICAgIFRoaXMgaXMgdGhlIHNpemUgaWYgYnl0ZXMgZm9yICdjaHVua3MnIGFuZCBpcyBvbmx5IHJlbGV2YW50IHRvCi0gICAgIHJhaWQgbGV2ZWxzIHRoYXQgaW52b2x2ZSBzdHJpcGluZyAoMSw0LDUsNiwxMCkuIFRoZSBhZGRyZXNzIHNwYWNlCisgICAgIFRoaXMgaXMgdGhlIHNpemUgaW4gYnl0ZXMgZm9yICdjaHVua3MnIGFuZCBpcyBvbmx5IHJlbGV2YW50IHRvCisgICAgIHJhaWQgbGV2ZWxzIHRoYXQgaW52b2x2ZSBzdHJpcGluZyAoMCw0LDUsNiwxMCkuIFRoZSBhZGRyZXNzIHNwYWNlCiAgICAgIG9mIHRoZSBhcnJheSBpcyBjb25jZXB0dWFsbHkgZGl2aWRlZCBpbnRvIGNodW5rcyBhbmQgY29uc2VjdXRpdmUKICAgICAgY2h1bmtzIGFyZSBzdHJpcGVkIG9udG8gbmVpZ2hib3VyaW5nIGRldmljZXMuCiAgICAgIFRoZSBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCBQQUdFX1NJWkUgKDRrKSBhbmQgc2hvdWxkIGJlIGEgcG93ZXIKQEAgLTE4Myw2ICsxODcsMjAgQEAKICAgICAgc2ltcGx5IGEgbnVtYmVyIHRoYXQgaXMgaW50ZXJwcmV0dGVkIGRpZmZlcmVudGx5IGJ5IGRpZmZlcmVudAogICAgICBsZXZlbHMuICBJdCBjYW4gYmUgd3JpdHRlbiB3aGlsZSBhc3NlbWJsaW5nIGFuIGFycmF5LgogCisgIGFycmF5X3NpemUKKyAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBhcnRpZmljaWFsbHkgY29uc3RyYWluIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4KKyAgICAgdGhlIGFycmF5IHRvIGJlIGxlc3MgdGhhbiBpcyBhY3R1YWxseSBhdmFpbGFibGUgb24gdGhlIGNvbWJpbmVkCisgICAgIGRldmljZXMuICBXcml0aW5nIGEgbnVtYmVyIChpbiBLaWxvYnl0ZXMpIHdoaWNoIGlzIGxlc3MgdGhhbgorICAgICB0aGUgYXZhaWxhYmxlIHNpemUgd2lsbCBzZXQgdGhlIHNpemUuICBBbnkgcmVjb25maWd1cmF0aW9uIG9mIHRoZQorICAgICBhcnJheSAoZS5nLiBhZGRpbmcgZGV2aWNlcykgd2lsbCBub3QgY2F1c2UgdGhlIHNpemUgdG8gY2hhbmdlLgorICAgICBXcml0aW5nIHRoZSB3b3JkICdkZWZhdWx0JyB3aWxsIGNhdXNlIHRoZSBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUKKyAgICAgYXJyYXkgdG8gYmUgd2hhdGV2ZXIgc2l6ZSBpcyBhY3R1YWxseSBhdmFpbGFibGUgYmFzZWQgb24KKyAgICAgJ2xldmVsJywgJ2NodW5rX3NpemUnIGFuZCAnY29tcG9uZW50X3NpemUnLgorCisgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBhcnJheSBiZWZvcmUgcmVkdWNpbmcKKyAgICAgdGhlIG51bWJlciBvZiBkZXZpY2VzIGluIGEgcmFpZDQvNS82LCBvciB0byBzdXBwb3J0IGV4dGVybmFsCisgICAgIG1ldGFkYXRhIGZvcm1hdHMgd2hpY2ggbWFuZGF0ZSBzdWNoIGNsaXBwaW5nLgorCiAgIHJlc2hhcGVfcG9zaXRpb24KICAgICAgVGhpcyBpcyBlaXRoZXIgIm5vbmUiIG9yIGEgc2VjdG9yIG51bWJlciB3aXRoaW4gdGhlIGRldmljZXMgb2YKICAgICAgdGhlIGFycmF5IHdoZXJlICJyZXNoYXBlIiBpcyB1cCB0by4gIElmIHRoaXMgaXMgc2V0LCB0aGUgdGhyZWUKQEAgLTIwNyw2ICsyMjUsMTEgQEAKICAgICAgYWJvdXQgdGhlIGFycmF5LiAgSXQgY2FuIGJlIDAuOTAgKHRyYWRpdGlvbmFsIGZvcm1hdCksIDEuMCwgMS4xLAogICAgICAxLjIgKG5ld2VyIGZvcm1hdCBpbiB2YXJ5aW5nIGxvY2F0aW9ucykgb3IgIm5vbmUiIGluZGljYXRpbmcgdGhhdAogICAgICB0aGUga2VybmVsIGlzbid0IG1hbmFnaW5nIG1ldGFkYXRhIGF0IGFsbC4KKyAgICAgQWx0ZXJuYXRlbHkgaXQgY2FuIGJlICJleHRlcm5hbDoiIGZvbGxvd2VkIGJ5IGEgc3RyaW5nIHdoaWNoCisgICAgIGlzIHNldCBieSB1c2VyLXNwYWNlLiAgVGhpcyBpbmRpY2F0ZXMgdGhhdCBtZXRhZGF0YSBpcyBtYW5hZ2VkCisgICAgIGJ5IGEgdXNlci1zcGFjZSBwcm9ncmFtLiAgQW55IGRldmljZSBmYWlsdXJlIG9yIG90aGVyIGV2ZW50IHRoYXQKKyAgICAgcmVxdWlyZXMgYSBtZXRhZGF0YSB1cGRhdGUgd2lsbCBjYXVzZSBhcnJheSBhY3Rpdml0eSB0byBiZQorICAgICBzdXNwZW5kZWQgdW50aWwgdGhlIGV2ZW50IGlzIGFja25vd2xlZGdlZC4KIAogICByZXN5bmNfc3RhcnQKICAgICAgVGhlIHBvaW50IGF0IHdoaWNoIHJlc3luYyBzaG91bGQgc3RhcnQuICBJZiBubyByZXN5bmMgaXMgbmVlZGVkLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Z4Z2UudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Z4Z2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTI5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdnhnZS50eHQKQEAgLTAsMCArMSwxMDAgQEAKK05ldGVyaW9uJ3MgKEZvcm1lcmx5IFMyaW8pIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIFNlcnZlciBBZGFwdGVyIExpbnV4IGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbnRlbnRzCistLS0tLS0tLQorCisxKSBJbnRyb2R1Y3Rpb24KKzIpIEZlYXR1cmVzIHN1cHBvcnRlZAorMykgQ29uZmlndXJhYmxlIGRyaXZlciBwYXJhbWV0ZXJzCis0KSBUcm91Ymxlc2hvb3RpbmcKKworMSkgSW50cm9kdWN0aW9uOgorLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBMaW51eCBkcml2ZXIgc3VwcG9ydHMgYWxsIE5ldGVyaW9uJ3MgWDMxMDAgc2VyaWVzIDEwIEdiRSBQQ0llIEkvTworVmlydHVhbGl6ZWQgU2VydmVyIGFkYXB0ZXJzLgorVGhlIFgzMTAwIHNlcmllcyBzdXBwb3J0cyBmb3VyIG1vZGVzIG9mIG9wZXJhdGlvbiwgY29uZmlndXJhYmxlIHZpYQorZmlybXdhcmUgLQorCVNpbmdsZSBmdW5jdGlvbiBtb2RlCisJTXVsdGkgZnVuY3Rpb24gbW9kZQorCVNSSU9WIG1vZGUKKwlNUklPViBtb2RlCitUaGUgZnVuY3Rpb25zIHNoYXJlIGEgMTBHYkUgbGluayBhbmQgdGhlIHBjaS1lIGJ1cywgYnV0IGhhcmRseSBhbnl0aGluZyBlbHNlCitpbnNpZGUgdGhlIEFTSUMuIEZlYXR1cmVzIGxpa2UgaW5kZXBlbmRlbnQgaHcgcmVzZXQsIHN0YXRpc3RpY3MsIGJhbmR3aWR0aC8KK3ByaW9yaXR5IGFsbG9jYXRpb24gYW5kIGd1YXJhbnRlZXMsIEdSTywgVFNPLCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBldGMgYXJlCitzdXBwb3J0ZWQgaW5kZXBlbmRlbnRseSBvbiBlYWNoIGZ1bmN0aW9uLgorCisoU2VlIGJlbG93IGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGZvciBib3RoIElQdjQgYW5kIElQdjYpCisKKzIpIEZlYXR1cmVzIHN1cHBvcnRlZDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaSkgICBTaW5nbGUgZnVuY3Rpb24gbW9kZSAodXAgdG8gMTcgcXVldWVzKQorCitpaSkgIE11bHRpIGZ1bmN0aW9uIG1vZGUgKHVwIHRvIDE3IGZ1bmN0aW9ucykKKworaWlpKSBQQ0ktU0lHJ3MgSS9PIFZpcnR1YWxpemF0aW9uCisgICAgICAgLSBTaW5nbGUgUm9vdCBtb2RlOiB2MS4wICh1cCB0byAxNyBmdW5jdGlvbnMpCisgICAgICAgLSBNdWx0aS1Sb290IG1vZGU6IHYxLjAgKHVwIHRvIDE3IGZ1bmN0aW9ucykKKworaXYpICBKdW1ibyBmcmFtZXMKKyAgICAgICBYMzEwMCBTZXJpZXMgc3VwcG9ydHMgTVRVIHVwIHRvIDk2MDAgYnl0ZXMsIG1vZGlmaWFibGUgdXNpbmcKKyAgICAgICBpZmNvbmZpZyBjb21tYW5kLgorCit2KSAgIE9mZmxvYWRzIHN1cHBvcnRlZDogKEVuYWJsZWQgYnkgZGVmYXVsdCkKKyAgICAgICBDaGVja3N1bSBvZmZsb2FkIChUQ1AvVURQL0lQKSBvbiB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocworICAgICAgIFRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZCAoVFNPKSBvbiB0cmFuc21pdCBwYXRoCisgICAgICAgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gcmVjZWl2ZSBwYXRoCisKK3ZpKSAgTVNJLVg6IChFbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgICAgUmVzdWx0aW5nIGluIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgKHVwIHRvIDclIG9uIGNlcnRhaW4KKyAgICAgICBwbGF0Zm9ybXMpLgorCit2aWkpIE5BUEk6IChFbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgICAgRm9yIGJldHRlciBSeCBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4KKwordmlpaSlSVEggKFJlY2VpdmUgVHJhZmZpYyBIYXNoKTogKEVuYWJsZWQgYnkgZGVmYXVsdCkKKyAgICAgICBSZWNlaXZlIHNpZGUgc3RlZXJpbmcgZm9yIGJldHRlciBzY2FsaW5nLgorCitpeCkgIFN0YXRpc3RpY3MKKyAgICAgICBDb21wcmVoZW5zaXZlIE1BQy1sZXZlbCBhbmQgc29mdHdhcmUgc3RhdGlzdGljcyBkaXNwbGF5ZWQgdXNpbmcKKyAgICAgICAiZXRodG9vbCAtUyIgb3B0aW9uLgorCit4KSAgIE11bHRpcGxlIGhhcmR3YXJlIHF1ZXVlczogKEVuYWJsZWQgYnkgZGVmYXVsdCkKKyAgICAgICBVcCB0byAxNyBoYXJkd2FyZSBiYXNlZCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBkYXRhIGNoYW5uZWxzLCB3aXRoCisgICAgICAgbXVsdGlwbGUgc3RlZXJpbmcgb3B0aW9ucyAodHJhbnNtaXQgbXVsdGlxdWV1ZSBlbmFibGVkIGJ5IGRlZmF1bHQpLgorCiszKSBDb25maWd1cmFibGUgZHJpdmVyIHBhcmFtZXRlcnM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2kpICBtYXhfY29uZmlnX2RldgorICAgICAgIFNwZWNpZmllcyBtYXhpbXVtIGRldmljZSBmdW5jdGlvbnMgdG8gYmUgZW5hYmxlZC4KKyAgICAgICBWYWxpZCByYW5nZTogMS04CisKK2lpKSBtYXhfY29uZmlnX3BvcnQKKyAgICAgICBTcGVjaWZpZXMgbnVtYmVyIG9mIHBvcnRzIHRvIGJlIGVuYWJsZWQuCisgICAgICAgVmFsaWQgcmFuZ2U6IDEsMgorICAgICAgIERlZmF1bHQ6IDEKKworaWlpKW1heF9jb25maWdfdnBhdGgKKyAgICAgICBTcGVjaWZpZXMgbWF4aW11bSBWUEFUSChzKSBjb25maWd1cmVkIGZvciBlYWNoIGRldmljZSBmdW5jdGlvbi4KKyAgICAgICBWYWxpZCByYW5nZTogMS0xNworCitpdikgdmxhbl90YWdfc3RyaXAKKyAgICAgICBFbmFibGVzL2Rpc2FibGVzIHZsYW4gdGFnIHN0cmlwcGluZyBmcm9tIGFsbCByZWNlaXZlZCB0YWdnZWQgZnJhbWVzIHRoYXQKKyAgICAgICBhcmUgbm90IHJlcGxpY2F0ZWQgYXQgdGhlIGludGVybmFsIEwyIHN3aXRjaC4KKyAgICAgICBWYWxpZCByYW5nZTogMCwxIChkaXNhYmxlZCwgZW5hYmxlZCByZXNwZWN0aXZlbHkpCisgICAgICAgRGVmYXVsdDogMQorCit2KSAgYWRkcl9sZWFybl9lbgorICAgICAgIEVuYWJsZSBsZWFybmluZyB0aGUgbWFjIGFkZHJlc3Mgb2YgdGhlIGd1ZXN0IE9TIGludGVyZmFjZSBpbgorICAgICAgIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LgorICAgICAgIFZhbGlkIHJhbmdlOiAwLDEgKGRpc2FibGVkLCBlbmFibGVkIHJlc3BlY3RpdmVseSkKKyAgICAgICBEZWZhdWx0OiAwCisKKzQpIFRyb3VibGVzaG9vdGluZzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gcmVzb2x2ZSBhbiBpc3N1ZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBvciBYMzEwMCBzZXJpZXMgYWRhcHRlciwgcGxlYXNlIGNvbGxlY3QKK3RoZSBzdGF0aXN0aWNzLCByZWdpc3RlciBkdW1wcyB1c2luZyBldGhvb2wsIHJlbGV2YW50IGxvZ3MgYW5kIGVtYWlsIHRoZW0gdG8KK3N1cHBvcnRAbmV0ZXJpb24uY29tLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQKaW5kZXggNmMyMzhmNS4uMjQ5ZGIzYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvZmlybXdhcmUudHh0CkBAIC0xLDYgKzEsNiBAQAogKiBVcGxvYWRlZCBRRSBmaXJtd2FyZQogCi0gICAgICBJZiBhIG5ldyBmaXJ3bWFyZSBoYXMgYmVlbiB1cGxvYWRlZCB0byB0aGUgUUUgKHVzdWFsbHkgYnkgdGhlCisgICAgICBJZiBhIG5ldyBmaXJtd2FyZSBoYXMgYmVlbiB1cGxvYWRlZCB0byB0aGUgUUUgKHVzdWFsbHkgYnkgdGhlCiAgICAgICBib290IGxvYWRlciksIHRoZW4gYSAnZmlybXdhcmUnIGNoaWxkIG5vZGUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBRRQogICAgICAgbm9kZS4gIFRoaXMgbm9kZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB0aGUgdXBsb2FkZWQgZmlybXdhcmUgdGhhdAogICAgICAgZGV2aWNlIGRyaXZlcnMgbWF5IG5lZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQKaW5kZXggM2VmMzM5Zi4uNWJhNGQzZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dApAQCAtMTI2LDcgKzEyNiw3IEBACiB0byBjb250cm9sIHRoZSBDUFUgdGltZSByZXNlcnZlZCBmb3IgZWFjaCBjb250cm9sIGdyb3VwIGluc3RlYWQuCiAKIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHdvcmtpbmcgd2l0aCBjb250cm9sIGdyb3VwcywgeW91IHNob3VsZCByZWFkCi1Eb2N1bWVudGF0aW9uL2Nncm91cHMudHh0IGFzIHdlbGwuCitEb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYXMgd2VsbC4KIAogR3JvdXAgc2V0dGluZ3MgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgZm9sbG93aW5nIGxpbWl0cyBpbiBvcmRlciB0byBrZWVwIHRoZSBjb25maWd1cmF0aW9uCiBzY2hlZHVsYWJsZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dCBiL0RvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmM1MGY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0CkBAIC0wLDAgKzEsMTc0IEBACisJCSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCSAgICAgU0xPVyBXT1JLIElURU0gRVhFQ1VUSU9OIFRIUkVBRCBQT09MCisJCSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0J5OiBEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgorCitUaGUgc2xvdyB3b3JrIGl0ZW0gZXhlY3V0aW9uIHRocmVhZCBwb29sIGlzIGEgcG9vbCBvZiB0aHJlYWRzIGZvciBwZXJmb3JtaW5nCit0aGluZ3MgdGhhdCB0YWtlIGEgcmVsYXRpdmVseSBsb25nIHRpbWUsIHN1Y2ggYXMgbWFraW5nIG1rZGlyIGNhbGxzLgorVHlwaWNhbGx5LCB3aGVuIHByb2Nlc3Npbmcgc29tZXRoaW5nLCB0aGVzZSBpdGVtcyB3aWxsIHNwZW5kIGEgbG90IG9mIHRpbWUKK2Jsb2NraW5nIGEgdGhyZWFkIG9uIEkvTywgdGh1cyBtYWtpbmcgdGhhdCB0aHJlYWQgdW5hdmFpbGFibGUgZm9yIGRvaW5nIG90aGVyCit3b3JrLgorCitUaGUgc3RhbmRhcmQgd29ya3F1ZXVlIG1vZGVsIGlzIHVuc3VpdGFibGUgZm9yIHRoaXMgY2xhc3Mgb2Ygd29yayBpdGVtIGFzIHRoYXQKK2xpbWl0cyB0aGUgb3duZXIgdG8gYSBzaW5nbGUgdGhyZWFkIG9yIGEgc2luZ2xlIHRocmVhZCBwZXIgQ1BVLiAgRm9yIHNvbWUKK3Rhc2tzLCBob3dldmVyLCBtb3JlIHRocmVhZHMgLSBvciBmZXdlciAtIGFyZSByZXF1aXJlZC4KKworVGhlcmUgaXMganVzdCBvbmUgcG9vbCBwZXIgc3lzdGVtLiAgSXQgY29udGFpbnMgbm8gdGhyZWFkcyB1bmxlc3Mgc29tZXRoaW5nCit3YW50cyB0byB1c2UgaXQgLSBhbmQgdGhhdCBzb21ldGhpbmcgbXVzdCByZWdpc3RlciBpdHMgaW50ZXJlc3QgZmlyc3QuICBXaGVuCit0aGUgcG9vbCBpcyBhY3RpdmUsIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBpdCBjb250YWlucyBpcyBkeW5hbWljLCB2YXJ5aW5nCitiZXR3ZWVuIGEgbWF4aW11bSBhbmQgbWluaW11bSBzZXR0aW5nLCBkZXBlbmRpbmcgb24gdGhlIGxvYWQuCisKKworPT09PT09PT09PT09PT09PT09PT0KK0NMQVNTRVMgT0YgV09SSyBJVEVNCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHBvb2wgc3VwcG9ydCB0d28gY2xhc3NlcyBvZiB3b3JrIGl0ZW1zOgorCisgKCopIFNsb3cgd29yayBpdGVtcy4KKworICgqKSBWZXJ5IHNsb3cgd29yayBpdGVtcy4KKworVGhlIGZvcm1lciBhcmUgZXhwZWN0ZWQgdG8gZmluaXNoIG11Y2ggcXVpY2tlciB0aGFuIHRoZSBsYXR0ZXIuCisKK0FuIG9wZXJhdGlvbiBvZiB0aGUgdmVyeSBzbG93IGNsYXNzIG1heSBkbyBhIGJhdGNoIGNvbWJpbmF0aW9uIG9mIHNldmVyYWwKK2xvb2t1cHMsIG1rZGlycywgYW5kIGEgY3JlYXRlIGZvciBpbnN0YW5jZS4KKworQW4gb3BlcmF0aW9uIG9mIHRoZSBvcmRpbmFyaWx5IHNsb3cgY2xhc3MgbWF5LCBmb3IgZXhhbXBsZSwgd3JpdGUgc3R1ZmYgb3IKK2V4cGFuZCBmaWxlcywgcHJvdmlkZWQgdGhlIHRpbWUgdGFrZW4gdG8gZG8gc28gaXNuJ3QgdG9vIGxvbmcuCisKK09wZXJhdGlvbnMgb2YgYm90aCB0eXBlcyBtYXkgc2xlZXAgZHVyaW5nIGV4ZWN1dGlvbiwgdGh1cyB0eWluZyB1cCB0aGUgdGhyZWFkCitsb2FuZWQgdG8gaXQuCisKKworVEhSRUFELVRPLUNMQVNTIEFMTE9DQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdCBhbGwgdGhlIHRocmVhZHMgaW4gdGhlIHBvb2wgYXJlIGF2YWlsYWJsZSB0byB3b3JrIG9uIHZlcnkgc2xvdyB3b3JrIGl0ZW1zLgorVGhlIG51bWJlciB3aWxsIGJlIGJldHdlZW4gb25lIGFuZCBvbmUgZmV3ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB0aHJlYWRzLgorVGhpcyBpcyBjb25maWd1cmFibGUgKHNlZSB0aGUgIlBvb2wgQ29uZmlndXJhdGlvbiIgc2VjdGlvbikuCisKK0FsbCB0aGUgdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHRvIHdvcmsgb24gb3JkaW5hcmlseSBzbG93IHdvcmsgaXRlbXMsIGJ1dCBhCitwZXJjZW50YWdlIG9mIHRoZSB0aHJlYWRzIHdpbGwgcHJlZmVyIHRvIHdvcmsgb24gdmVyeSBzbG93IHdvcmsgaXRlbXMuCisKK1RoZSBjb25maWd1cmF0aW9uIGVuc3VyZXMgdGhhdCBhdCBsZWFzdCBvbmUgdGhyZWFkIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHdvcmsgb24KK3Zlcnkgc2xvdyB3b3JrIGl0ZW1zLCBhbmQgYXQgbGVhc3Qgb25lIHRocmVhZCB3aWxsIGJlIGF2YWlsYWJsZSB0aGF0IHdvbid0IHdvcmsKK29uIHZlcnkgc2xvdyB3b3JrIGl0ZW1zIGF0IGFsbC4KKworCis9PT09PT09PT09PT09PT09PT09PT0KK1VTSU5HIFNMT1cgV09SSyBJVEVNUworPT09PT09PT09PT09PT09PT09PT09CisKK0ZpcnN0bHksIGEgbW9kdWxlIG9yIHN1YnN5c3RlbSB3YW50aW5nIHRvIG1ha2UgdXNlIG9mIHNsb3cgd29yayBpdGVtcyBtdXN0CityZWdpc3RlciBpdHMgaW50ZXJlc3Q6CisKKwkgaW50IHJldCA9IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKCk7CisKK1RoaXMgd2lsbCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBhIC12ZSBlcnJvciB1cG9uIGZhaWx1cmUuCisKKworU2xvdyB3b3JrIGl0ZW1zIG1heSB0aGVuIGJlIHNldCB1cCBieToKKworICgxKSBEZWNsYXJpbmcgYSBzbG93X3dvcmsgc3RydWN0IHR5cGUgdmFyaWFibGU6CisKKwkjaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+CisKKwlzdHJ1Y3Qgc2xvd193b3JrIG15aXRlbTsKKworICgyKSBEZWNsYXJpbmcgdGhlIG9wZXJhdGlvbnMgdG8gYmUgdXNlZCBmb3IgdGhpcyBpdGVtOgorCisJc3RydWN0IHNsb3dfd29ya19vcHMgbXlpdGVtX29wcyA9IHsKKwkJLmdldF9yZWYgPSBteWl0ZW1fZ2V0X3JlZiwKKwkJLnB1dF9yZWYgPSBteWl0ZW1fcHV0X3JlZiwKKwkJLmV4ZWN1dGUgPSBteWl0ZW1fZXhlY3V0ZSwKKwl9OworCisgICAgIFsqXSBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3BzLCBzZWUgc2VjdGlvbiAiSXRlbSBPcGVyYXRpb25zIi4KKworICgzKSBJbml0aWFsaXNpbmcgdGhlIGl0ZW06CisKKwlzbG93X3dvcmtfaW5pdCgmbXlpdGVtLCAmbXlpdGVtX29wcyk7CisKKyAgICAgb3I6CisKKwl2c2xvd193b3JrX2luaXQoJm15aXRlbSwgJm15aXRlbV9vcHMpOworCisgICAgIGRlcGVuZGluZyBvbiBpdHMgY2xhc3MuCisKK0Egc3VpdGFibHkgc2V0IHVwIHdvcmsgaXRlbSBjYW4gdGhlbiBiZSBlbnF1ZXVlZCBmb3IgcHJvY2Vzc2luZzoKKworCWludCByZXQgPSBzbG93X3dvcmtfZW5xdWV1ZSgmbXlpdGVtKTsKKworVGhpcyB3aWxsIHJldHVybiBhIC12ZSBlcnJvciBpZiB0aGUgdGhyZWFkIHBvb2wgaXMgdW5hYmxlIHRvIGdhaW4gYSByZWZlcmVuY2UKK29uIHRoZSBpdGVtLCAwIG90aGVyd2lzZS4KKworCitUaGUgaXRlbXMgYXJlIHJlZmVyZW5jZSBjb3VudGVkLCBzbyB0aGVyZSBvdWdodCB0byBiZSBubyBuZWVkIGZvciBhIGZsdXNoCitvcGVyYXRpb24uICBXaGVuIGFsbCBhIG1vZHVsZSdzIHNsb3cgd29yayBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBhbmQgdGhlCittb2R1bGUgaGFzIG5vIGZ1cnRoZXIgaW50ZXJlc3QgaW4gdGhlIGZhY2lsaXR5LCBpdCBzaG91bGQgdW5yZWdpc3RlciBpdHMKK2ludGVyZXN0OgorCisJc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcigpOworCisKKz09PT09PT09PT09PT09PQorSVRFTSBPUEVSQVRJT05TCis9PT09PT09PT09PT09PT0KKworRWFjaCB3b3JrIGl0ZW0gcmVxdWlyZXMgYSB0YWJsZSBvZiBvcGVyYXRpb25zIG9mIHR5cGUgc3RydWN0IHNsb3dfd29ya19vcHMuCitBbGwgbWVtYmVycyBhcmUgcmVxdWlyZWQ6CisKKyAoKikgR2V0IGEgcmVmZXJlbmNlIG9uIGFuIGl0ZW06CisKKwlpbnQgKCpnZXRfcmVmKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKKworICAgICBUaGlzIGFsbG93cyB0aGUgdGhyZWFkIHBvb2wgdG8gYXR0ZW1wdCB0byBwaW4gYW4gaXRlbSBieSBnZXR0aW5nIGEKKyAgICAgcmVmZXJlbmNlIG9uIGl0LiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIDAgaWYgdGhlIHJlZmVyZW5jZSB3YXMKKyAgICAgZ3JhbnRlZCwgb3IgYSAtdmUgZXJyb3Igb3RoZXJ3aXNlLiAgSWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsCisgICAgIHNsb3dfd29ya19lbnF1ZXVlKCkgd2lsbCBmYWlsLgorCisgICAgIFRoZSByZWZlcmVuY2UgaXMgaGVsZCB3aGlsc3QgdGhlIGl0ZW0gaXMgcXVldWVkIGFuZCB3aGlsc3QgaXQgaXMgYmVpbmcKKyAgICAgZXhlY3V0ZWQuICBUaGUgaXRlbSBtYXkgdGhlbiBiZSByZXF1ZXVlZCB3aXRoIHRoZSBzYW1lIHJlZmVyZW5jZSBoZWxkLCBvcgorICAgICB0aGUgcmVmZXJlbmNlIHdpbGwgYmUgcmVsZWFzZWQuCisKKyAoKikgUmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBhbiBpdGVtOgorCisJdm9pZCAoKnB1dF9yZWYpKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworCisgICAgIFRoaXMgYWxsb3dzIHRoZSB0aHJlYWQgcG9vbCB0byB1bnBpbiBhbiBpdGVtIGJ5IHJlbGVhc2luZyB0aGUgcmVmZXJlbmNlIG9uCisgICAgIGl0LiAgVGhlIHRocmVhZCBwb29sIHdpbGwgbm90IHRvdWNoIHRoZSBpdGVtIGFnYWluIG9uY2UgdGhpcyBoYXMgYmVlbgorICAgICBjYWxsZWQuCisKKyAoKikgRXhlY3V0ZSBhbiBpdGVtOgorCisJdm9pZCAoKmV4ZWN1dGUpKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworCisgICAgIFRoaXMgc2hvdWxkIHBlcmZvcm0gdGhlIHdvcmsgcmVxdWlyZWQgb2YgdGhlIGl0ZW0uICBJdCBtYXkgc2xlZXAsIGl0IG1heQorICAgICBwZXJmb3JtIGRpc2sgSS9PIGFuZCBpdCBtYXkgd2FpdCBmb3IgbG9ja3MuCisKKworPT09PT09PT09PT09PT09PT09CitQT09MIENPTkZJR1VSQVRJT04KKz09PT09PT09PT09PT09PT09PQorCitUaGUgc2xvdy13b3JrIHRocmVhZCBwb29sIGhhcyBhIG51bWJlciBvZiBjb25maWd1cmFibGVzOgorCisgKCopIC9wcm9jL3N5cy9rZXJuZWwvc2xvdy13b3JrL21pbi10aHJlYWRzCisKKyAgICAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIHRocmVhZHMgdGhhdCBzaG91bGQgYmUgaW4gdGhlIHBvb2wgd2hpbHN0IGl0IGlzIGluCisgICAgIHVzZS4gIFRoaXMgbWF5IGJlIGFueXdoZXJlIGJldHdlZW4gMiBhbmQgbWF4LXRocmVhZHMuCisKKyAoKikgL3Byb2Mvc3lzL2tlcm5lbC9zbG93LXdvcmsvbWF4LXRocmVhZHMKKworICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyB0aGF0IHNob3VsZCBpbiB0aGUgcG9vbC4gIFRoaXMgbWF5IGJlCisgICAgIGFueXdoZXJlIGJldHdlZW4gbWluLXRocmVhZHMgYW5kIDI1NSBvciBOUl9DUFVTICogMiwgd2hpY2hldmVyIGlzIGdyZWF0ZXIuCisKKyAoKikgL3Byb2Mvc3lzL2tlcm5lbC9zbG93LXdvcmsvdnNsb3ctcGVyY2VudGFnZQorCisgICAgIFRoZSBwZXJjZW50YWdlIG9mIGFjdGl2ZSB0aHJlYWRzIGluIHRoZSBwb29sIHRoYXQgbWF5IGJlIHVzZWQgdG8gZXhlY3V0ZQorICAgICB2ZXJ5IHNsb3cgd29yayBpdGVtcy4gIFRoaXMgbWF5IGJlIGJldHdlZW4gMSBhbmQgOTkuICBUaGUgcmVzdWx0YW50IG51bWJlcgorICAgICBpcyBib3VuZGVkIHRvIGJldHdlZW4gMSBhbmQgb25lIGZld2VyIHRoYW4gdGhlIG51bWJlciBvZiBhY3RpdmUgdGhyZWFkcy4KKyAgICAgVGhpcyBlbnN1cmVzIHRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgdGhyZWFkIHRoYXQgY2FuIHByb2Nlc3MgdmVyeQorICAgICBzbG93IHdvcmsgaXRlbXMsIGFuZCBhbHdheXMgYXQgbGVhc3Qgb25lIHRocmVhZCB0aGF0IHdvbid0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC8wMC1JTkRFWAppbmRleCBhMjBhOTA2Li4xMjg2ZjQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC8wMC1JTkRFWApAQCAtMTAsNiArMTAsOCBAQAogCS0gZG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL2ZzLyouCiBrZXJuZWwudHh0CiAJLSBkb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMva2VybmVsLyouCituZXQudHh0CisJLSBkb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvbmV0LyouCiBzdW5ycGMudHh0CiAJLSBkb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvc3VucnBjLyouCiB2bS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2ZzLnR4dAppbmRleCBmOTkyNTQzLi4xNDU4NDQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9mcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvZnMudHh0CkBAIC0xLDUgKzEsNiBAQAogRG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL2ZzLyoJa2VybmVsIHZlcnNpb24gMi4yLjEwCiAJKGMpIDE5OTgsIDE5OTksICBSaWsgdmFuIFJpZWwgPHJpZWxAbmwubGludXgub3JnPgorCShjKSAyMDA5LCAgICAgICAgU2hlbiBGZW5nPHNoZW5AY24uZnVqaXRzdS5jb20+CiAKIEZvciBnZW5lcmFsIGluZm8gYW5kIGxlZ2FsIGJsdXJiLCBwbGVhc2UgbG9vayBpbiBSRUFETUUuCiAKQEAgLTE0LDcgKzE1LDEyIEBACiBzeXN0ZW0sIGl0IGlzIGFkdmlzYWJsZSB0byByZWFkIGJvdGggZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlCiBiZWZvcmUgYWN0dWFsbHkgbWFraW5nIGFkanVzdG1lbnRzLgogCisxLiAvcHJvYy9zeXMvZnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL2ZzOgorLSBhaW8tbWF4LW5yCistIGFpby1ucgogLSBkZW50cnktc3RhdGUKIC0gZHF1b3QtbWF4CiAtIGRxdW90LW5yCkBAIC0zMCw4ICszNiwxNSBAQAogLSBzdXBlci1tYXgKIC0gc3VwZXItbnIKIAotRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZpbGVzIGluIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyBpcwotaW4gRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCithaW8tbnIgJiBhaW8tbWF4LW5yOgorCithaW8tbnIgaXMgdGhlIHJ1bm5pbmcgdG90YWwgb2YgdGhlIG51bWJlciBvZiBldmVudHMgc3BlY2lmaWVkIG9uIHRoZQoraW9fc2V0dXAgc3lzdGVtIGNhbGwgZm9yIGFsbCBjdXJyZW50bHkgYWN0aXZlIGFpbyBjb250ZXh0cy4gIElmIGFpby1ucgorcmVhY2hlcyBhaW8tbWF4LW5yIHRoZW4gaW9fc2V0dXAgd2lsbCBmYWlsIHdpdGggRUFHQUlOLiAgTm90ZSB0aGF0CityYWlzaW5nIGFpby1tYXgtbnIgZG9lcyBub3QgcmVzdWx0IGluIHRoZSBwcmUtYWxsb2NhdGlvbiBvciByZS1zaXppbmcKK29mIGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xNzgsMyArMTkxLDYwIEBACiBhaW8tbnIgY2FuIGdyb3cgdG8uCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworMi4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RvY3VtZW50YXRpb24gZm9yIHRoZSBmaWxlcyBpbiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgaXMKK2luIERvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0LgorCisKKzMuIC9wcm9jL3N5cy9mcy9tcXVldWUgLSBQT1NJWCBtZXNzYWdlIHF1ZXVlcyBmaWxlc3lzdGVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAibXF1ZXVlIiAgZmlsZXN5c3RlbSBwcm92aWRlcyAgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgZmVhdHVyZXMgdG8gZW5hYmxlIHRoZQorY3JlYXRpb24gb2YgYSAgdXNlciBzcGFjZSAgbGlicmFyeSB0aGF0ICBpbXBsZW1lbnRzICB0aGUgIFBPU0lYIG1lc3NhZ2UgcXVldWVzCitBUEkgKGFzIG5vdGVkIGJ5IHRoZSAgTVNHIHRhZyBpbiB0aGUgIFBPU0lYIDEwMDMuMS0yMDAxIHZlcnNpb24gIG9mIHRoZSBTeXN0ZW0KK0ludGVyZmFjZXMgc3BlY2lmaWNhdGlvbi4pCisKK1RoZSAibXF1ZXVlIiBmaWxlc3lzdGVtIGNvbnRhaW5zIHZhbHVlcyBmb3IgZGV0ZXJtaW5pbmcvc2V0dGluZyAgdGhlIGFtb3VudCBvZgorcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGZpbGUgc3lzdGVtLgorCisvcHJvYy9zeXMvZnMvbXF1ZXVlL3F1ZXVlc19tYXggaXMgYSByZWFkL3dyaXRlICBmaWxlIGZvciAgc2V0dGluZy9nZXR0aW5nICB0aGUKK21heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2UgcXVldWVzIGFsbG93ZWQgb24gdGhlIHN5c3RlbS4KKworL3Byb2Mvc3lzL2ZzL21xdWV1ZS9tc2dfbWF4ICBpcyAgYSAgcmVhZC93cml0ZSBmaWxlICBmb3IgIHNldHRpbmcvZ2V0dGluZyAgdGhlCittYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyBpbiBhIHF1ZXVlIHZhbHVlLiAgSW4gZmFjdCBpdCBpcyB0aGUgbGltaXRpbmcgdmFsdWUKK2ZvciBhbm90aGVyICh1c2VyKSBsaW1pdCB3aGljaCBpcyBzZXQgaW4gbXFfb3BlbiBpbnZvY2F0aW9uLiBUaGlzIGF0dHJpYnV0ZSBvZgorYSBxdWV1ZSBtdXN0IGJlIGxlc3Mgb3IgZXF1YWwgdGhlbiBtc2dfbWF4LgorCisvcHJvYy9zeXMvZnMvbXF1ZXVlL21zZ3NpemVfbWF4IGlzICBhIHJlYWQvd3JpdGUgIGZpbGUgZm9yIHNldHRpbmcvZ2V0dGluZyB0aGUKK21heGltdW0gIG1lc3NhZ2Ugc2l6ZSB2YWx1ZSAoaXQgaXMgZXZlcnkgIG1lc3NhZ2UgcXVldWUncyBhdHRyaWJ1dGUgc2V0IGR1cmluZworaXRzIGNyZWF0aW9uKS4KKworCis0LiAvcHJvYy9zeXMvZnMvZXBvbGwgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBlcG9sbCBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGVwb2xsKDcpIGludGVyZmFjZS4KKworbWF4X3VzZXJfaW5zdGFuY2VzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXBvbGwgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGEgc2luZ2xlIHVzZXIgY2FuCitoYXZlIG9wZW4gYXQgYSBnaXZlbiB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMjgsIGFuZCBzaG91bGQgYmUgZW5vdWdoCitmb3Igbm9ybWFsIHVzZXJzLgorCittYXhfdXNlcl93YXRjaGVzCistLS0tLS0tLS0tLS0tLS0tCisKK0V2ZXJ5IGVwb2xsIGZpbGUgZGVzY3JpcHRvciBjYW4gc3RvcmUgYSBudW1iZXIgb2YgZmlsZXMgdG8gYmUgbW9uaXRvcmVkCitmb3IgZXZlbnQgcmVhZGluZXNzLiBFYWNoIG9uZSBvZiB0aGVzZSBtb25pdG9yZWQgZmlsZXMgY29uc3RpdHV0ZXMgYSAid2F0Y2giLgorVGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiAid2F0Y2hlcyIgdGhhdCBhcmUKK2FsbG93ZWQgZm9yIGVhY2ggdXNlci4KK0VhY2ggIndhdGNoIiBjb3N0cyByb3VnaGx5IDkwIGJ5dGVzIG9uIGEgMzJiaXQga2VybmVsLCBhbmQgcm91Z2hseSAxNjAgYnl0ZXMKK29uIGEgNjRiaXQgb25lLgorVGhlIGN1cnJlbnQgZGVmYXVsdCB2YWx1ZSBmb3IgIG1heF91c2VyX3dhdGNoZXMgIGlzIHRoZSAxLzMyIG9mIHRoZSBhdmFpbGFibGUKK2xvdyBtZW1vcnksIGRpdmlkZWQgZm9yIHRoZSAid2F0Y2giIGNvc3QgaW4gYnl0ZXMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CmluZGV4IGE0Y2NkZDEuLmYxMWNhNzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtMSw1ICsxLDYgQEAKIERvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9rZXJuZWwvKglrZXJuZWwgdmVyc2lvbiAyLjIuMTAKIAkoYykgMTk5OCwgMTk5OSwgIFJpayB2YW4gUmllbCA8cmllbEBubC5saW51eC5vcmc+CisJKGMpIDIwMDksICAgICAgICBTaGVuIEZlbmc8c2hlbkBjbi5mdWppdHN1LmNvbT4KIAogRm9yIGdlbmVyYWwgaW5mbyBhbmQgbGVnYWwgYmx1cmIsIHBsZWFzZSBsb29rIGluIFJFQURNRS4KIApAQCAtMTgsNiArMTksNyBAQAogc2hvdyB1cCBpbiAvcHJvYy9zeXMva2VybmVsOgogLSBhY3BpX3ZpZGVvX2ZsYWdzCiAtIGFjY3QKKy0gYXV0b19tc2dtbmkKIC0gY29yZV9wYXR0ZXJuCiAtIGNvcmVfdXNlc19waWQKIC0gY3RybC1hbHQtZGVsCkBAIC0zMyw2ICszNSw3IEBACiAtIG1zZ21heAogLSBtc2dtbmIKIC0gbXNnbW5pCistIG5taV93YXRjaGRvZwogLSBvc3JlbGVhc2UKIC0gb3N0eXBlCiAtIG92ZXJmbG93Z2lkCkBAIC00MCw2ICs0Myw3IEBACiAtIHBhbmljCiAtIHBpZF9tYXgKIC0gcG93ZXJzYXZlLW5hcCAgICAgICAgICAgICAgIFsgUFBDIG9ubHkgXQorLSBwYW5pY19vbl91bnJlY292ZXJlZF9ubWkKIC0gcHJpbnRrCiAtIHJhbmRvbWl6ZV92YV9zcGFjZQogLSByZWFsLXJvb3QtZGV2ICAgICAgICAgICAgICAgPT0+IERvY3VtZW50YXRpb24vaW5pdHJkLnR4dApAQCAtNTUsNiArNTksNyBAQAogLSBzeXNycSAgICAgICAgICAgICAgICAgICAgICAgPT0+IERvY3VtZW50YXRpb24vc3lzcnEudHh0CiAtIHRhaW50ZWQKIC0gdGhyZWFkcy1tYXgKKy0gdW5rbm93bl9ubWlfcGFuaWMKIC0gdmVyc2lvbgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzgxLDMgKzM4Niw1MSBAQAogIDUxMiAtIEEga2VybmVsIHdhcm5pbmcgaGFzIG9jY3VycmVkLgogMTAyNCAtIEEgbW9kdWxlIGZyb20gZHJpdmVycy9zdGFnaW5nIHdhcyBsb2FkZWQuCiAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2F1dG9fbXNnbW5pOgorCitFbmFibGVzL0Rpc2FibGVzIGF1dG9tYXRpYyByZWNvbXB1dGluZyBvZiBtc2dtbmkgdXBvbiBtZW1vcnkgYWRkL3JlbW92ZSBvcgordXBvbiBpcGMgbmFtZXNwYWNlIGNyZWF0aW9uL3JlbW92YWwgKHNlZSB0aGUgbXNnbW5pIGRlc2NyaXB0aW9uIGFib3ZlKS4KK0VjaG9pbmcgIjEiIGludG8gdGhpcyBmaWxlIGVuYWJsZXMgbXNnbW5pIGF1dG9tYXRpYyByZWNvbXB1dGluZy4KK0VjaG9pbmcgIjAiIHR1cm5zIGl0IG9mZi4KK2F1dG9fbXNnbW5pIGRlZmF1bHQgdmFsdWUgaXMgMS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworbm1pX3dhdGNoZG9nOgorCitFbmFibGVzL0Rpc2FibGVzIHRoZSBOTUkgd2F0Y2hkb2cgb24geDg2IHN5c3RlbXMuICBXaGVuIHRoZSB2YWx1ZSBpcyBub24temVybwordGhlIE5NSSB3YXRjaGRvZyBpcyBlbmFibGVkIGFuZCB3aWxsIGNvbnRpbnVvdXNseSB0ZXN0IGFsbCBvbmxpbmUgY3B1cyB0bworZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIHN0aWxsIGZ1bmN0aW9uaW5nIHByb3Blcmx5LiBDdXJyZW50bHksCitwYXNzaW5nICJubWlfd2F0Y2hkb2c9IiBwYXJhbWV0ZXIgYXQgYm9vdCB0aW1lIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uCit0byB3b3JrLgorCitJZiBMQVBJQyBOTUkgd2F0Y2hkb2cgbWV0aG9kIGlzIGluIHVzZSAobm1pX3dhdGNoZG9nPTIga2VybmVsIHBhcmFtZXRlciksIHRoZQorTk1JIHdhdGNoZG9nIHNoYXJlcyByZWdpc3RlcnMgd2l0aCBvcHJvZmlsZS4gQnkgZGlzYWJsaW5nIHRoZSBOTUkgd2F0Y2hkb2csCitvcHJvZmlsZSBtYXkgaGF2ZSBtb3JlIHJlZ2lzdGVycyB0byB1dGlsaXplLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit1bmtub3duX25taV9wYW5pYzoKKworVGhlIHZhbHVlIGluIHRoaXMgZmlsZSBhZmZlY3RzIGJlaGF2aW9yIG9mIGhhbmRsaW5nIE5NSS4gV2hlbiB0aGUgdmFsdWUgaXMKK25vbi16ZXJvLCB1bmtub3duIE5NSSBpcyB0cmFwcGVkIGFuZCB0aGVuIHBhbmljIG9jY3Vycy4gQXQgdGhhdCB0aW1lLCBrZXJuZWwKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQgb24gY29uc29sZS4KKworTk1JIHN3aXRjaCB0aGF0IG1vc3QgSUEzMiBzZXJ2ZXJzIGhhdmUgZmlyZXMgdW5rbm93biBOTUkgdXAsIGZvciBleGFtcGxlLgorSWYgYSBzeXN0ZW0gaGFuZ3MgdXAsIHRyeSBwcmVzc2luZyB0aGUgTk1JIHN3aXRjaC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pOgorCitUaGUgZGVmYXVsdCBMaW51eCBiZWhhdmlvdXIgb24gYW4gTk1JIG9mIGVpdGhlciBtZW1vcnkgb3IgdW5rbm93biBpcyB0byBjb250aW51ZQorb3BlcmF0aW9uLiBGb3IgbWFueSBlbnZpcm9ubWVudHMgc3VjaCBhcyBzY2llbnRpZmljIGNvbXB1dGluZyBpdCBpcyBwcmVmZXJhYmxlCit0aGF0IHRoZSBib3ggaXMgdGFrZW4gb3V0IGFuZCB0aGUgZXJyb3IgZGVhbHQgd2l0aCB0aGFuIGFuIHVuY29ycmVjdGVkCitwYXJpdHkvRUNDIGVycm9yIGdldCBwcm9wb2dhdGVkLgorCitBIHNtYWxsIG51bWJlciBvZiBzeXN0ZW1zIGRvIGdlbmVyYXRlIE5NSSdzIGZvciBiaXphcnJlIHJhbmRvbSByZWFzb25zIHN1Y2ggYXMKK3Bvd2VyIG1hbmFnZW1lbnQgc28gdGhlIGRlZmF1bHQgaXMgb2ZmLiBUaGF0IHN5c2N0bCB3b3JrcyBsaWtlIHRoZSBleGlzdGluZworcGFuaWMgY29udHJvbHMgYWxyZWFkeSBpbiB0aGF0IGRpcmVjdG9yeS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvbmV0LnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL25ldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0ZDU1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL25ldC50eHQKQEAgLTAsMCArMSwxNzUgQEAKK0RvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9uZXQvKglrZXJuZWwgdmVyc2lvbiAyLjQuMC10ZXN0MTEtcHJlNAorCShjKSAxOTk5CQlUZXJyZWhvbiBCb3dkZW4gPHRlcnJlaG9uQHBhY2JlbGwubmV0PgorCQkJCUJvZG8gQmF1ZXIgPGJiQHJpY29jaGV0Lm5ldD4KKwkoYykgMjAwMAkJSm9yZ2UgTmVyaW4gPGNvbWFuZGFudGVAemFyYWxpbnV4LmNvbT4KKwkoYykgMjAwOQkJU2hlbiBGZW5nIDxzaGVuQGNuLmZ1aml0c3UuY29tPgorCitGb3IgZ2VuZXJhbCBpbmZvIGFuZCBsZWdhbCBibHVyYiwgcGxlYXNlIGxvb2sgaW4gUkVBRE1FLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzeXNjdGwgZmlsZXMgaW4KKy9wcm9jL3N5cy9uZXQgYW5kIGlzIHZhbGlkIGZvciBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjQuMC10ZXN0MTEtcHJlNC4KKworVGhlIGludGVyZmFjZSAgdG8gIHRoZSAgbmV0d29ya2luZyAgcGFydHMgIG9mICB0aGUgIGtlcm5lbCAgaXMgIGxvY2F0ZWQgIGluCisvcHJvYy9zeXMvbmV0LiBUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIGFsbCBwb3NzaWJsZSBzdWJkaXJlY3Rvcmllcy5Zb3UgbWF5CitzZWUgb25seSBzb21lIG9mIHRoZW0sIGRlcGVuZGluZyBvbiB5b3VyIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uCisKKworVGFibGUgOiBTdWJkaXJlY3RvcmllcyBpbiAvcHJvYy9zeXMvbmV0CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBEaXJlY3RvcnkgQ29udGVudCAgICAgICAgICAgICBEaXJlY3RvcnkgIENvbnRlbnQKKyBjb3JlICAgICAgR2VuZXJhbCBwYXJhbWV0ZXIgICBhcHBsZXRhbGsgIEFwcGxldGFsayBwcm90b2NvbAorIHVuaXggICAgICBVbml4IGRvbWFpbiBzb2NrZXRzIG5ldHJvbSAgICAgTkVUL1JPTQorIDgwMiAgICAgICBFODAyIHByb3RvY29sICAgICAgIGF4MjUgICAgICAgQVgyNQorIGV0aGVybmV0ICBFdGhlcm5ldCBwcm90b2NvbCAgIHJvc2UgICAgICAgWC4yNSBQTFAgbGF5ZXIKKyBpcHY0ICAgICAgSVAgdmVyc2lvbiA0ICAgICAgICB4MjUgICAgICAgIFguMjUgcHJvdG9jb2wKKyBpcHggICAgICAgSVBYICAgICAgICAgICAgICAgICB0b2tlbi1yaW5nIElCTSB0b2tlbiByaW5nCisgYnJpZGdlICAgIEJyaWRnaW5nICAgICAgICAgICAgZGVjbmV0ICAgICBERUMgbmV0CisgaXB2NiAgICAgIElQIHZlcnNpb24gNgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKKzEuIC9wcm9jL3N5cy9uZXQvY29yZSAtIE5ldHdvcmsgY29yZSBvcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3JtZW1fZGVmYXVsdAorLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBpbiBieXRlcy4KKworcm1lbV9tYXgKKy0tLS0tLS0tCisKK1RoZSBtYXhpbXVtIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplIGluIGJ5dGVzLgorCit3bWVtX2RlZmF1bHQKKy0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBzZXR0aW5nIChpbiBieXRlcykgb2YgdGhlIHNvY2tldCBzZW5kIGJ1ZmZlci4KKword21lbV9tYXgKKy0tLS0tLS0tCisKK1RoZSBtYXhpbXVtIHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplIGluIGJ5dGVzLgorCittZXNzYWdlX2J1cnN0IGFuZCBtZXNzYWdlX2Nvc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBwYXJhbWV0ZXJzICBhcmUgdXNlZCB0byBsaW1pdCB0aGUgd2FybmluZyBtZXNzYWdlcyB3cml0dGVuIHRvIHRoZSBrZXJuZWwKK2xvZyBmcm9tICB0aGUgIG5ldHdvcmtpbmcgIGNvZGUuICBUaGV5ICBlbmZvcmNlICBhICByYXRlICBsaW1pdCAgdG8gIG1ha2UgIGEKK2RlbmlhbC1vZi1zZXJ2aWNlIGF0dGFjayAgaW1wb3NzaWJsZS4gQSBoaWdoZXIgbWVzc2FnZV9jb3N0IGZhY3RvciwgcmVzdWx0cyBpbgorZmV3ZXIgbWVzc2FnZXMgdGhhdCB3aWxsIGJlIHdyaXR0ZW4uIE1lc3NhZ2VfYnVyc3QgY29udHJvbHMgd2hlbiBtZXNzYWdlcyB3aWxsCitiZSBkcm9wcGVkLiAgVGhlICBkZWZhdWx0ICBzZXR0aW5ncyAgbGltaXQgIHdhcm5pbmcgbWVzc2FnZXMgdG8gb25lIGV2ZXJ5IGZpdmUKK3NlY29uZHMuCisKK3dhcm5pbmdzCistLS0tLS0tLQorCitUaGlzIGNvbnRyb2xzIGNvbnNvbGUgbWVzc2FnZXMgZnJvbSB0aGUgbmV0d29ya2luZyBzdGFjayB0aGF0IGNhbiBvY2N1ciBiZWNhdXNlCitvZiBwcm9ibGVtcyBvbiB0aGUgbmV0d29yayBsaWtlIGR1cGxpY2F0ZSBhZGRyZXNzIG9yIGJhZCBjaGVja3N1bXMuIE5vcm1hbGx5LAordGhpcyBzaG91bGQgYmUgZW5hYmxlZCwgYnV0IGlmIHRoZSBwcm9ibGVtIHBlcnNpc3RzIHRoZSBtZXNzYWdlcyBjYW4gYmUKK2Rpc2FibGVkLgorCituZXRkZXZfYnVkZ2V0CistLS0tLS0tLS0tLS0tCisKK01heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdGFrZW4gZnJvbSBhbGwgaW50ZXJmYWNlcyBpbiBvbmUgcG9sbGluZyBjeWNsZSAoTkFQSQorcG9sbCkuIEluIG9uZSBwb2xsaW5nIGN5Y2xlIGludGVyZmFjZXMgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgdG8gcG9sbGluZyBhcmUKK3Byb2JlZCBpbiBhIHJvdW5kLXJvYmluIG1hbm5lci4gVGhlIGxpbWl0IG9mIHBhY2tldHMgaW4gb25lIHN1Y2ggcHJvYmUgY2FuIGJlCitzZXQgcGVyLWRldmljZSB2aWEgc3lzZnMgY2xhc3MvbmV0LzxkZXZpY2U+L3dlaWdodCAuCisKK25ldGRldl9tYXhfYmFja2xvZworLS0tLS0tLS0tLS0tLS0tLS0tCisKK01heGltdW0gbnVtYmVyICBvZiAgcGFja2V0cywgIHF1ZXVlZCAgb24gIHRoZSAgSU5QVVQgIHNpZGUsIHdoZW4gdGhlIGludGVyZmFjZQorcmVjZWl2ZXMgcGFja2V0cyBmYXN0ZXIgdGhhbiBrZXJuZWwgY2FuIHByb2Nlc3MgdGhlbS4KKworb3B0bWVtX21heAorLS0tLS0tLS0tLQorCitNYXhpbXVtIGFuY2lsbGFyeSBidWZmZXIgc2l6ZSBhbGxvd2VkIHBlciBzb2NrZXQuIEFuY2lsbGFyeSBkYXRhIGlzIGEgc2VxdWVuY2UKK29mIHN0cnVjdCBjbXNnaGRyIHN0cnVjdHVyZXMgd2l0aCBhcHBlbmRlZCBkYXRhLgorCisyLiAvcHJvYy9zeXMvbmV0L3VuaXggLSBQYXJhbWV0ZXJzIGZvciBVbml4IGRvbWFpbiBzb2NrZXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG9ubHkgb25lIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkuCit1bml4X2RncmFtX3FsZW4gbGltaXRzIHRoZSBtYXggbnVtYmVyIG9mIGRhdGFncmFtcyBxdWV1ZWQgaW4gVW5peCBkb21haW4KK3NvY2tldCdzIGJ1ZmZlci4gSXQgd2lsbCBub3QgdGFrZSBlZmZlY3QgdW5sZXNzIFBGX1VOSVggZmxhZyBpcyBzcGljaWZpZWQuCisKKworMy4gL3Byb2Mvc3lzL25ldC9pcHY0IC0gSVBWNCBzZXR0aW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGxlYXNlIHNlZTogRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYW5kIGlwdnMtc3lzY3RsLnR4dCBmb3IKK2Rlc2NyaXB0aW9ucyBvZiB0aGVzZSBlbnRyaWVzLgorCisKKzQuIEFwcGxldGFsaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgL3Byb2Mvc3lzL25ldC9hcHBsZXRhbGsgIGRpcmVjdG9yeSAgaG9sZHMgdGhlIEFwcGxldGFsayBjb25maWd1cmF0aW9uIGRhdGEKK3doZW4gQXBwbGV0YWxrIGlzIGxvYWRlZC4gVGhlIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIGFyZToKKworYWFycC1leHBpcnktdGltZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYW1vdW50ICBvZiAgdGltZSAgd2Uga2VlcCBhbiBBUlAgZW50cnkgYmVmb3JlIGV4cGlyaW5nIGl0LiBVc2VkIHRvIGFnZSBvdXQKK29sZCBob3N0cy4KKworYWFycC1yZXNvbHZlLXRpbWUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhbW91bnQgb2YgdGltZSB3ZSB3aWxsIHNwZW5kIHRyeWluZyB0byByZXNvbHZlIGFuIEFwcGxldGFsayBhZGRyZXNzLgorCithYXJwLXJldHJhbnNtaXQtbGltaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbnVtYmVyIG9mIHRpbWVzIHdlIHdpbGwgcmV0cmFuc21pdCBhIHF1ZXJ5IGJlZm9yZSBnaXZpbmcgdXAuCisKK2FhcnAtdGljay10aW1lCistLS0tLS0tLS0tLS0tLQorCitDb250cm9scyB0aGUgcmF0ZSBhdCB3aGljaCBleHBpcmVzIGFyZSBjaGVja2VkLgorCitUaGUgZGlyZWN0b3J5ICAvcHJvYy9uZXQvYXBwbGV0YWxrICBob2xkcyB0aGUgbGlzdCBvZiBhY3RpdmUgQXBwbGV0YWxrIHNvY2tldHMKK29uIGEgbWFjaGluZS4KKworVGhlIGZpZWxkcyAgaW5kaWNhdGUgIHRoZSBERFAgdHlwZSwgdGhlIGxvY2FsIGFkZHJlc3MgKGluIG5ldHdvcms6bm9kZSBmb3JtYXQpCit0aGUgcmVtb3RlICBhZGRyZXNzLCAgdGhlICBzaXplIG9mIHRoZSB0cmFuc21pdCBwZW5kaW5nIHF1ZXVlLCB0aGUgc2l6ZSBvZiB0aGUKK3JlY2VpdmVkIHF1ZXVlICAoYnl0ZXMgd2FpdGluZyBmb3IgYXBwbGljYXRpb25zIHRvIHJlYWQpIHRoZSBzdGF0ZSBhbmQgdGhlIHVpZAorb3duaW5nIHRoZSBzb2NrZXQuCisKKy9wcm9jL25ldC9hdGFsa19pZmFjZSBsaXN0cyAgYWxsICB0aGUgIGludGVyZmFjZXMgIGNvbmZpZ3VyZWQgZm9yIGFwcGxldGFsay5JdAorc2hvd3MgdGhlICBuYW1lICBvZiB0aGUgaW50ZXJmYWNlLCBpdHMgQXBwbGV0YWxrIGFkZHJlc3MsIHRoZSBuZXR3b3JrIHJhbmdlIG9uCit0aGF0IGFkZHJlc3MgIChvciAgbmV0d29yayBudW1iZXIgZm9yIHBoYXNlIDEgbmV0d29ya3MpLCBhbmQgdGhlIHN0YXR1cyBvZiB0aGUKK2ludGVyZmFjZS4KKworL3Byb2MvbmV0L2F0YWxrX3JvdXRlIGxpc3RzICBlYWNoICBrbm93biAgbmV0d29yayAgcm91dGUuICBJdCBsaXN0cyB0aGUgdGFyZ2V0CisobmV0d29yaykgdGhhdCB0aGUgcm91dGUgbGVhZHMgdG8sIHRoZSByb3V0ZXIgKG1heSBiZSBkaXJlY3RseSBjb25uZWN0ZWQpLCB0aGUKK3JvdXRlIGZsYWdzLCBhbmQgdGhlIGRldmljZSB0aGUgcm91dGUgaXMgdXNpbmcuCisKKworNS4gSVBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBJUFggcHJvdG9jb2wgaGFzIG5vIHR1bmFibGUgdmFsdWVzIGluIHByb2Mvc3lzL25ldC4KKworVGhlIElQWCAgcHJvdG9jb2wgIGRvZXMsICBob3dldmVyLCAgcHJvdmlkZSAgcHJvYy9uZXQvaXB4LiBUaGlzIGxpc3RzIGVhY2ggSVBYCitzb2NrZXQgZ2l2aW5nICB0aGUgIGxvY2FsICBhbmQgIHJlbW90ZSAgYWRkcmVzc2VzICBpbiAgTm92ZWxsICBmb3JtYXQgKHRoYXQgaXMKK25ldHdvcms6bm9kZTpwb3J0KS4gSW4gIGFjY29yZGFuY2UgIHdpdGggIHRoZSAgc3RyYW5nZSAgTm92ZWxsICB0cmFkaXRpb24sCitldmVyeXRoaW5nIGJ1dCB0aGUgcG9ydCBpcyBpbiBoZXguIE5vdF9Db25uZWN0ZWQgaXMgZGlzcGxheWVkIGZvciBzb2NrZXRzIHRoYXQKK2FyZSBub3QgIHRpZWQgdG8gYSBzcGVjaWZpYyByZW1vdGUgYWRkcmVzcy4gVGhlIFR4IGFuZCBSeCBxdWV1ZSBzaXplcyBpbmRpY2F0ZQordGhlIG51bWJlciAgb2YgIGJ5dGVzICBwZW5kaW5nICBmb3IgIHRyYW5zbWlzc2lvbiAgYW5kICByZWNlcHRpb24uICBUaGUgIHN0YXRlCitpbmRpY2F0ZXMgdGhlICBzdGF0ZSAgdGhlICBzb2NrZXQgIGlzICBpbiBhbmQgdGhlIHVpZCBpcyB0aGUgb3duaW5nIHVpZCBvZiB0aGUKK3NvY2tldC4KKworVGhlIC9wcm9jL25ldC9pcHhfaW50ZXJmYWNlICBmaWxlIGxpc3RzIGFsbCBJUFggaW50ZXJmYWNlcy4gRm9yIGVhY2ggaW50ZXJmYWNlCitpdCBnaXZlcyAgdGhlIG5ldHdvcmsgbnVtYmVyLCB0aGUgbm9kZSBudW1iZXIsIGFuZCBpbmRpY2F0ZXMgaWYgdGhlIG5ldHdvcmsgaXMKK3RoZSBwcmltYXJ5ICBuZXR3b3JrLiAgSXQgIGFsc28gIGluZGljYXRlcyAgd2hpY2ggIGRldmljZSAgaXQgIGlzIGJvdW5kIHRvIChvcgorSW50ZXJuYWwgZm9yICBpbnRlcm5hbCAgbmV0d29ya3MpICBhbmQgIHRoZSAgRnJhbWUgIFR5cGUgaWYgYXBwcm9wcmlhdGUuIExpbnV4CitzdXBwb3J0cyA4MDIuMywgIDgwMi4yLCAgODAyLjIgIFNOQVAgIGFuZCBESVggKEJsdWUgQm9vaykgZXRoZXJuZXQgZnJhbWluZyBmb3IKK0lQWC4KKworVGhlIC9wcm9jL25ldC9pcHhfcm91dGUgIHRhYmxlICBob2xkcyAgYSBsaXN0IG9mIElQWCByb3V0ZXMuIEZvciBlYWNoIHJvdXRlIGl0CitnaXZlcyB0aGUgIGRlc3RpbmF0aW9uICBuZXR3b3JrLCB0aGUgcm91dGVyIG5vZGUgKG9yIERpcmVjdGx5KSBhbmQgdGhlIG5ldHdvcmsKK2FkZHJlc3Mgb2YgdGhlIHJvdXRlciAob3IgQ29ubmVjdGVkKSBmb3IgaW50ZXJuYWwgbmV0d29ya3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CmluZGV4IGFmYTI5NDYuLmNmNDJiODIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CkBAIC0xMTUsNiArMTE1LDggQEAKIAogJ3gnCS0gVXNlZCBieSB4bW9uIGludGVyZmFjZSBvbiBwcGMvcG93ZXJwYyBwbGF0Zm9ybXMuCiAKKyd6JwktIER1bXAgdGhlIGZ0cmFjZSBidWZmZXIKKwogJzAnLSc5JyAtIFNldHMgdGhlIGNvbnNvbGUgbG9nIGxldmVsLCBjb250cm9sbGluZyB3aGljaCBrZXJuZWwgbWVzc2FnZXMKICAgICAgICAgICB3aWxsIGJlIHByaW50ZWQgdG8geW91ciBjb25zb2xlLiAoJzAnLCBmb3IgZXhhbXBsZSB3b3VsZCBtYWtlCiAgICAgICAgICAgaXQgc28gdGhhdCBvbmx5IGVtZXJnZW5jeSBtZXNzYWdlcyBsaWtlIFBBTklDcyBvciBPT1BTZXMgd291bGQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZXBvaW50cy50eHQKaW5kZXggNmYwYTA0NC4uYzBlMWNlZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZXBvaW50cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZXBvaW50cy50eHQKQEAgLTQ1LDggKzQ1LDggQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKIERFQ0xBUkVfVFJBQ0Uoc3Vic3lzX2V2ZW50bmFtZSwKLQlUUFBST1RPKGludCBmaXJzdGFyZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKLQlUUEFSR1MoZmlyc3RhcmcsIHApKTsKKwlUUF9QUk9UTyhpbnQgZmlyc3RhcmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJVFBfQVJHUyhmaXJzdGFyZywgcCkpOwogCiBJbiBzdWJzeXMvZmlsZS5jICh3aGVyZSB0aGUgdHJhY2luZyBzdGF0ZW1lbnQgbXVzdCBiZSBhZGRlZCkgOgogCkBAIC02NiwxMCArNjYsMTAgQEAKICAgICAtIHN1YnN5cyBpcyB0aGUgbmFtZSBvZiB5b3VyIHN1YnN5c3RlbS4KICAgICAtIGV2ZW50bmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gdHJhY2UuCiAKLS0gVFBQUk9UTyhpbnQgZmlyc3RhcmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgaXMgdGhlIHByb3RvdHlwZSBvZiB0aGUKKy0gVFBfUFJPVE8oaW50IGZpcnN0YXJnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIGlzIHRoZSBwcm90b3R5cGUgb2YgdGhlCiAgIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGlzIHRyYWNlcG9pbnQuCiAKLS0gVFBBUkdTKGZpcnN0YXJnLCBwKSBhcmUgdGhlIHBhcmFtZXRlcnMgbmFtZXMsIHNhbWUgYXMgZm91bmQgaW4gdGhlCistIFRQX0FSR1MoZmlyc3RhcmcsIHApIGFyZSB0aGUgcGFyYW1ldGVycyBuYW1lcywgc2FtZSBhcyBmb3VuZCBpbiB0aGUKICAgcHJvdG90eXBlLgogCiBDb25uZWN0aW5nIGEgZnVuY3Rpb24gKHByb2JlKSB0byBhIHRyYWNlcG9pbnQgaXMgZG9uZSBieSBwcm92aWRpbmcgYQpAQCAtMTAzLDEzICsxMDMsMTQgQEAKIAogKiBQcm9iZSAvIHRyYWNlcG9pbnQgZXhhbXBsZQogCi1TZWUgdGhlIGV4YW1wbGUgcHJvdmlkZWQgaW4gc2FtcGxlcy90cmFjZXBvaW50cy9zcmMKK1NlZSB0aGUgZXhhbXBsZSBwcm92aWRlZCBpbiBzYW1wbGVzL3RyYWNlcG9pbnRzCiAKLUNvbXBpbGUgdGhlbSB3aXRoIHlvdXIga2VybmVsLgorQ29tcGlsZSB0aGVtIHdpdGggeW91ciBrZXJuZWwuICBUaGV5IGFyZSBidWlsdCBkdXJpbmcgJ21ha2UnIChub3QKKydtYWtlIG1vZHVsZXMnKSB3aGVuIENPTkZJR19TQU1QTEVfVFJBQ0VQT0lOVFM9bS4KIAogUnVuLCBhcyByb290IDoKLW1vZHByb2JlIHRyYWNlcG9pbnQtZXhhbXBsZSAoaW5zbW9kIG9yZGVyIGlzIG5vdCBpbXBvcnRhbnQpCi1tb2Rwcm9iZSB0cmFjZXBvaW50LXByb2JlLWV4YW1wbGUKLWNhdCAvcHJvYy90cmFjZXBvaW50LWV4YW1wbGUgKHJldHVybnMgYW4gZXhwZWN0ZWQgZXJyb3IpCi1ybW1vZCB0cmFjZXBvaW50LWV4YW1wbGUgdHJhY2Vwb2ludC1wcm9iZS1leGFtcGxlCittb2Rwcm9iZSB0cmFjZXBvaW50LXNhbXBsZSAoaW5zbW9kIG9yZGVyIGlzIG5vdCBpbXBvcnRhbnQpCittb2Rwcm9iZSB0cmFjZXBvaW50LXByb2JlLXNhbXBsZQorY2F0IC9wcm9jL3RyYWNlcG9pbnQtc2FtcGxlIChyZXR1cm5zIGFuIGV4cGVjdGVkIGVycm9yKQorcm1tb2QgdHJhY2Vwb2ludC1zYW1wbGUgdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUKIGRtZXNnCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2ttZW10cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2ttZW10cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1NmQ5YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0va21lbXRyYWNlLnR4dApAQCAtMCwwICsxLDEyNiBAQAorCQkJa21lbXRyYWNlIC0gS2VybmVsIE1lbW9yeSBUcmFjZXIKKworCQkJICBieSBFZHVhcmQgLSBHYWJyaWVsIE11bnRlYW51CisJCQkgICAgIDxlZHVhcmQubXVudGVhbnVAbGludXgzNjAucm8+CisKK0kuIEludHJvZHVjdGlvbgorPT09PT09PT09PT09PT09CisKK2ttZW10cmFjZSBoZWxwcyBrZXJuZWwgZGV2ZWxvcGVycyBmaWd1cmUgb3V0IHR3byB0aGluZ3M6CisxKSBob3cgZGlmZmVyZW50IGFsbG9jYXRvcnMgKFNMQUIsIFNMVUIgZXRjLikgcGVyZm9ybQorMikgaG93IGtlcm5lbCBjb2RlIGFsbG9jYXRlcyBtZW1vcnkgYW5kIGhvdyBtdWNoCisKK1RvIGRvIHRoaXMsIHdlIHRyYWNlIGV2ZXJ5IGFsbG9jYXRpb24gYW5kIGV4cG9ydCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlcnNwYWNlCit0aHJvdWdoIHRoZSByZWxheSBpbnRlcmZhY2UuIFdlIGV4cG9ydCB0aGluZ3Mgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIHJlcXVlc3RlZAorYnl0ZXMsIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgYWxsb2NhdGVkIChpLmUuIGluY2x1ZGluZyBpbnRlcm5hbAorZnJhZ21lbnRhdGlvbiksIHdoZXRoZXIgdGhpcyBpcyBhIHNsYWIgYWxsb2NhdGlvbiBvciBhIHBsYWluIGttYWxsb2MoKSBhbmQgc28KK29uLgorCitUaGUgYWN0dWFsIGFuYWx5c2lzIGlzIHBlcmZvcm1lZCBieSBhIHVzZXJzcGFjZSB0b29sIChzZWUgc2VjdGlvbiBJSUkgZm9yCitkZXRhaWxzIG9uIHdoZXJlIHRvIGdldCBpdCBmcm9tKS4gSXQgbG9ncyB0aGUgZGF0YSBleHBvcnRlZCBieSB0aGUga2VybmVsLAorcHJvY2Vzc2VzIGl0IGFuZCAoYXMgb2Ygd3JpdGluZyB0aGlzKSBjYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorLSB0aGUgdG90YWwgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGZyYWdtZW50YXRpb24gcGVyIGNhbGwtc2l0ZQorLSB0aGUgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGZyYWdtZW50YXRpb24gcGVyIGFsbG9jYXRpb24KKy0gdG90YWwgbWVtb3J5IGFsbG9jYXRlZCBhbmQgZnJhZ21lbnRhdGlvbiBpbiB0aGUgY29sbGVjdGVkIGRhdGFzZXQKKy0gbnVtYmVyIG9mIGNyb3NzLUNQVSBhbGxvY2F0aW9uIGFuZCBmcmVlcyAobWFrZXMgc2Vuc2UgaW4gTlVNQSBlbnZpcm9ubWVudHMpCisKK01vcmVvdmVyLCBpdCBjYW4gcG90ZW50aWFsbHkgZmluZCBpbmNvbnNpc3RlbnQgYW5kIGVycm9uZW91cyBiZWhhdmlvciBpbgora2VybmVsIGNvZGUsIHN1Y2ggYXMgdXNpbmcgc2xhYiBmcmVlIGZ1bmN0aW9ucyBvbiBrbWFsbG9jJ2VkIG1lbW9yeSBvcgorYWxsb2NhdGluZyBsZXNzIG1lbW9yeSB0aGFuIHJlcXVlc3RlZCAoYnV0IG5vdCB0cnVseSBmYWlsZWQgYWxsb2NhdGlvbnMpLgorCitrbWVtdHJhY2UgYWxzbyBtYWtlcyBwcm92aXNpb25zIGZvciB0cmFjaW5nIG9uIHNvbWUgYXJjaCBhbmQgYW5hbHlzaW5nIHRoZQorZGF0YSBvbiBhbm90aGVyLgorCitJSS4gRGVzaWduIGFuZCBnb2FscworPT09PT09PT09PT09PT09PT09PT0KKwora21lbXRyYWNlIHdhcyBkZXNpZ25lZCB0byBoYW5kbGUgcmF0aGVyIGxhcmdlIGFtb3VudHMgb2YgZGF0YS4gVGh1cywgaXQgdXNlcwordGhlIHJlbGF5IGludGVyZmFjZSB0byBleHBvcnQgd2hhdGV2ZXIgaXMgbG9nZ2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggdGhlbgorc3RvcmVzIGl0LiBBbmFseXNpcyBhbmQgcmVwb3J0aW5nIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIHRoYXQgaXMsIGFmdGVyIHRoZQorZGF0YSBpcyBjb2xsZWN0ZWQgYW5kIHN0b3JlZC4gQnkgZGVzaWduLCBpdCBhbGxvd3Mgb25lIHRvIGxvZyBhbmQgYW5hbHlzZQorb24gZGlmZmVyZW50IG1hY2hpbmVzIGFuZCBkaWZmZXJlbnQgYXJjaGVzLgorCitBcyBvZiB3cml0aW5nIHRoaXMsIHRoZSBBQkkgaXMgbm90IGNvbnNpZGVyZWQgc3RhYmxlLCB0aG91Z2ggaXQgbWlnaHQgbm90CitjaGFuZ2UgbXVjaC4gSG93ZXZlciwgbm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCBjb21wYXRpYmlsaXR5IHlldC4gV2hlbgorZGVlbWVkIHN0YWJsZSwgdGhlIEFCSSBzaG91bGQgc3RpbGwgYWxsb3cgZWFzeSBleHRlbnNpb24gd2hpbGUgbWFpbnRhaW5pbmcKK2JhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFRoaXMgaXMgZGVzY3JpYmVkIGZ1cnRoZXIgaW4gRG9jdW1lbnRhdGlvbi9BQkkuCisKK1N1bW1hcnkgb2YgZGVzaWduIGdvYWxzOgorCS0gYWxsb3cgbG9nZ2luZyBhbmQgYW5hbHlzaXMgdG8gYmUgZG9uZSBhY3Jvc3MgZGlmZmVyZW50IG1hY2hpbmVzCisJLSBiZSBmYXN0IGFuZCBhbnRpY2lwYXRlIHVzYWdlIGluIGhpZ2gtbG9hZCBlbnZpcm9ubWVudHMgKCopCisJLSBiZSByZWFzb25hYmx5IGV4dGVuc2libGUKKwktIG1ha2UgaXQgcG9zc2libGUgZm9yIEdOVS9MaW51eCBkaXN0cmlidXRpb25zIHRvIGhhdmUga21lbXRyYWNlCisJaW5jbHVkZWQgaW4gdGhlaXIgcmVwb3NpdG9yaWVzCisKKygqKSAtIG9uZSBvZiB0aGUgcmVhc29ucyBQZWtrYSBFbmJlcmcncyBvcmlnaW5hbCB1c2Vyc3BhY2UgZGF0YSBhbmFseXNpcworICAgIHRvb2wncyBjb2RlIHdhcyByZXdyaXR0ZW4gZnJvbSBQZXJsIHRvIEMgKGFsdGhvdWdoIHRoaXMgaXMgbW9yZSB0aGFuIGEKKyAgICBzaW1wbGUgY29udmVyc2lvbikKKworCitJSUkuIFF1aWNrIHVzYWdlIGd1aWRlCis9PT09PT09PT09PT09PT09PT09PT09CisKKzEpIEdldCBhIGtlcm5lbCB0aGF0IHN1cHBvcnRzIGttZW10cmFjZSBhbmQgYnVpbGQgaXQgYWNjb3JkaW5nbHkgKGkuZS4gZW5hYmxlCitDT05GSUdfS01FTVRSQUNFKS4KKworMikgR2V0IHRoZSB1c2Vyc3BhY2UgdG9vbCBhbmQgYnVpbGQgaXQ6CiskIGdpdC1jbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L2ttZW10cmFjZS11c2VyLmdpdAkJIyBjdXJyZW50IHJlcG9zaXRvcnkKKyQgY2Qga21lbXRyYWNlLXVzZXIvCiskIC4vYXV0b2dlbi5zaAorJCAuL2NvbmZpZ3VyZQorJCBtYWtlCisKKzMpIEJvb3QgdGhlIGttZW10cmFjZS1lbmFibGVkIGtlcm5lbCBpZiB5b3UgaGF2ZW4ndCwgcHJlZmVyYWJseSBpbiB0aGUKKydzaW5nbGUnIHJ1bmxldmVsIChzbyB0aGF0IHJlbGF5IGJ1ZmZlcnMgZG9uJ3QgZmlsbCB1cCBlYXNpbHkpLCBhbmQgcnVuCitrbWVtdHJhY2U6CisjICckJyBkb2VzIG5vdCBtZWFuIHVzZXIsIGJ1dCByb290IGhlcmUuCiskIG1vdW50IC10IGRlYnVnZnMgbm9uZSAvc3lzL2tlcm5lbC9kZWJ1ZworJCBtb3VudCAtdCBwcm9jIG5vbmUgL3Byb2MKKyQgY2QgcGF0aC90by9rbWVtdHJhY2UtdXNlci8KKyQgLi9rbWVtdHJhY2VkCitXYWl0IGEgYml0LCB0aGVuIHN0b3AgaXQgd2l0aCBDVFJMK0MuCiskIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtdHJhY2UvdG90YWxfb3ZlcnJ1bnMJIyBDaGVjayBpZiB3ZSBkaWRuJ3QKKwkJCQkJCQkjIG92ZXJydW4sIHNob3VsZAorCQkJCQkJCSMgYmUgemVyby4KKyQgKE9wdGlvbmFsbHkpIFtSdW4ga21lbXRyYWNlX2NoZWNrIHNlcGFyYXRlbHkgb24gZWFjaCBjcHVbMC05XSoub3V0IGZpbGUgdG8KKwkJY2hlY2sgaXRzIGNvcnJlY3RuZXNzXQorJCAuL2ttZW10cmFjZS1yZXBvcnQKKworTm93IHlvdSBzaG91bGQgaGF2ZSBhIG5pY2UgYW5kIHNob3J0IHN1bW1hcnkgb2YgaG93IHRoZSBhbGxvY2F0b3IgcGVyZm9ybXMuCisKK0lWLiBGQVEgYW5kIGtub3duIGlzc3VlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1E6ICdjYXQgL3N5cy9rZXJuZWwvZGVidWcva21lbXRyYWNlL3RvdGFsX292ZXJydW5zJyBpcyBub24temVybywgaG93IGRvIEkgZml4Cit0aGlzPyBTaG91bGQgSSB3b3JyeT8KK0E6IElmIGl0J3Mgbm9uLXplcm8sIHRoaXMgYWZmZWN0cyBrbWVtdHJhY2UncyBhY2N1cmFjeSwgZGVwZW5kaW5nIG9uIGhvdworbGFyZ2UgdGhlIG51bWJlciBpcy4gWW91IGNhbiBmaXggaXQgYnkgc3VwcGx5aW5nIGEgaGlnaGVyCisna21lbXRyYWNlLnN1YmJ1ZnM9Ticga2VybmVsIHBhcmFtZXRlci4KKy0tLQorCitROiBrbWVtdHJhY2VfY2hlY2sgcmVwb3J0cyBlcnJvcnMsIGhvdyBkbyBJIGZpeCB0aGlzPyBTaG91bGQgSSB3b3JyeT8KK0E6IFRoaXMgaXMgYSBidWcgYW5kIHNob3VsZCBiZSByZXBvcnRlZC4gSXQgY2FuIG9jY3VyIGZvciBhIHZhcmlldHkgb2YKK3JlYXNvbnM6CisJLSBwb3NzaWJsZSBidWdzIGluIHJlbGF5IGNvZGUKKwktIHBvc3NpYmxlIG1pc3VzZSBvZiByZWxheSBieSBrbWVtdHJhY2UKKwktIHRpbWVzdGFtcHMgYmVpbmcgY29sbGVjdGVkIHVub3JkZXJseQorT3IgeW91IG1heSBmaXggaXQgeW91cnNlbGYgYW5kIHNlbmQgdXMgYSBwYXRjaC4KKy0tLQorCitROiBrbWVtdHJhY2VfcmVwb3J0IHNob3dzIG1hbnkgZXJyb3JzLCBob3cgZG8gSSBmaXggdGhpcz8gU2hvdWxkIEkgd29ycnk/CitBOiBUaGlzIGlzIGEga25vd24gaXNzdWUgYW5kIEknbSB3b3JraW5nIG9uIGl0LiBUaGVzZSBtaWdodCBiZSB0cnVlIGVycm9ycworaW4ga2VybmVsIGNvZGUsIHdoaWNoIG1heSBoYXZlIGluY29uc2lzdGVudCBiZWhhdmlvciAoZS5nLiBhbGxvY2F0aW5nIG1lbW9yeQord2l0aCBrbWVtX2NhY2hlX2FsbG9jKCkgYW5kIGZyZWVpbmcgaXQgd2l0aCBrZnJlZSgpKS4gUGVra2EgRW5iZXJnIHBvaW50ZWQKK291dCB0aGlzIGJlaGF2aW9yIG1heSB3b3JrIHdpdGggU0xBQiwgYnV0IG1heSBmYWlsIHdpdGggb3RoZXIgYWxsb2NhdG9ycy4KKworSXQgbWF5IGFsc28gYmUgZHVlIHRvIGxhY2sgb2YgdHJhY2luZyBpbiBzb21lIHVudXN1YWwgYWxsb2NhdG9yIGZ1bmN0aW9ucy4KKworV2UgZG9uJ3Qgd2FudCBidWcgcmVwb3J0cyByZWdhcmRpbmcgdGhpcyBpc3N1ZSB5ZXQuCistLS0KKworVi4gU2VlIGFsc28KKz09PT09PT09PT09CisKK0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CitEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vbnVtYV9tZW1vcnlfcG9saWN5LnR4dCBiL0RvY3VtZW50YXRpb24vdm0vbnVtYV9tZW1vcnlfcG9saWN5LnR4dAppbmRleCA2YWFhZWIzLi5iZTQ1ZGJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL251bWFfbWVtb3J5X3BvbGljeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9udW1hX21lbW9yeV9wb2xpY3kudHh0CkBAIC04LDcgKzgsOCBAQAogZG9jdW1lbnQgYXR0ZW1wdHMgdG8gZGVzY3JpYmUgdGhlIGNvbmNlcHRzIGFuZCBBUElzIG9mIHRoZSAyLjYgbWVtb3J5IHBvbGljeQogc3VwcG9ydC4KIAotTWVtb3J5IHBvbGljaWVzIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCBjcHVzZXRzIChEb2N1bWVudGF0aW9uL2NwdXNldHMudHh0KQorTWVtb3J5IHBvbGljaWVzIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCBjcHVzZXRzCisoRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0KQogd2hpY2ggaXMgYW4gYWRtaW5pc3RyYXRpdmUgbWVjaGFuaXNtIGZvciByZXN0cmljdGluZyB0aGUgbm9kZXMgZnJvbSB3aGljaAogbWVtb3J5IG1heSBiZSBhbGxvY2F0ZWQgYnkgYSBzZXQgb2YgcHJvY2Vzc2VzLiBNZW1vcnkgcG9saWNpZXMgYXJlIGEKIHByb2dyYW1taW5nIGludGVyZmFjZSB0aGF0IGEgTlVNQS1hd2FyZSBhcHBsaWNhdGlvbiBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YuICBXaGVuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VfbWlncmF0aW9uIGIvRG9jdW1lbnRhdGlvbi92bS9wYWdlX21pZ3JhdGlvbgppbmRleCBkNWZkZmQzLi42NTEzZmUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VfbWlncmF0aW9uCisrKyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZV9taWdyYXRpb24KQEAgLTM3LDcgKzM3LDggQEAKIAogTGFyZ2VyIGluc3RhbGxhdGlvbnMgdXN1YWxseSBwYXJ0aXRpb24gdGhlIHN5c3RlbSB1c2luZyBjcHVzZXRzIGludG8KIHNlY3Rpb25zIG9mIG5vZGVzLiBQYXVsIEphY2tzb24gaGFzIGVxdWlwcGVkIGNwdXNldHMgd2l0aCB0aGUgYWJpbGl0eSB0bwotbW92ZSBwYWdlcyB3aGVuIGEgdGFzayBpcyBtb3ZlZCB0byBhbm90aGVyIGNwdXNldCAoU2VlIC4uL2NwdXNldHMudHh0KS4KK21vdmUgcGFnZXMgd2hlbiBhIHRhc2sgaXMgbW92ZWQgdG8gYW5vdGhlciBjcHVzZXQgKFNlZQorRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0KS4KIENwdXNldHMgYWxsb3dzIHRoZSBhdXRvbWF0aW9uIG9mIHByb2Nlc3MgbG9jYWxpdHkuIElmIGEgdGFzayBpcyBtb3ZlZCB0bwogYSBuZXcgY3B1c2V0IHRoZW4gYWxzbyBhbGwgaXRzIHBhZ2VzIGFyZSBtb3ZlZCB3aXRoIGl0IHNvIHRoYXQgdGhlCiBwZXJmb3JtYW5jZSBvZiB0aGUgcHJvY2VzcyBkb2VzIG5vdCBzaW5rIGRyYW1hdGljYWxseS4gQWxzbyB0aGUgcGFnZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9mYWtlLW51bWEtZm9yLWNwdXNldHMgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvZmFrZS1udW1hLWZvci1jcHVzZXRzCmluZGV4IDMzYmI1NjYuLjBmMTFkOWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9mYWtlLW51bWEtZm9yLWNwdXNldHMKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Zha2UtbnVtYS1mb3ItY3B1c2V0cwpAQCAtNyw3ICs3LDggQEAKIGFzc2lnbiB0aGVtIHRvIGNwdXNldHMgYW5kIHRoZWlyIGF0dGFjaGVkIHRhc2tzLiAgVGhpcyBpcyBhIHdheSBvZiBsaW1pdGluZyB0aGUKIGFtb3VudCBvZiBzeXN0ZW0gbWVtb3J5IHRoYXQgYXJlIGF2YWlsYWJsZSB0byBhIGNlcnRhaW4gY2xhc3Mgb2YgdGFza3MuCiAKLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmZWF0dXJlcyBvZiBjcHVzZXRzLCBzZWUgRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dC4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmZWF0dXJlcyBvZiBjcHVzZXRzLCBzZWUKK0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dC4KIFRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgeW91IGNhbiB1c2UgZm9yIHlvdXIgbmVlZHMuICBGb3IKIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG51bWE9ZmFrZSBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBpdHMgdmFyaW91cyB3YXlzIG9mCiBjb25maWd1cmluZyBmYWtlIG5vZGVzLCBzZWUgRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQuCkBAIC0zMiw3ICszMyw3IEBACiAJT24gbm9kZSAzIHRvdGFscGFnZXM6IDEzMTA3MgogCiBOb3cgZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgZm9yIG1vdW50aW5nIHRoZSBjcHVzZXRzIGZpbGVzeXN0ZW0gZnJvbQotRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dCwgeW91IGNhbiBhc3NpZ24gZmFrZSBub2RlcyAoaS5lLiBjb250aWd1b3VzIG1lbW9yeQorRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0LCB5b3UgY2FuIGFzc2lnbiBmYWtlIG5vZGVzIChpLmUuIGNvbnRpZ3VvdXMgbWVtb3J5CiBhZGRyZXNzIHNwYWNlcykgdG8gaW5kaXZpZHVhbCBjcHVzZXRzOgogCiAJW3Jvb3RAeHJvYWRzIC9dIyBta2RpciBleGFtcGxlc2V0CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDA2OGY1ZmIuLjMwNjc3MTkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNzYzLDYgKzE3NjMsMTIgQEAKIEw6CWxpbnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK0ZJTlRFSyBGNzUzNzVTIEhBUkRXQVJFIE1PTklUT1IgQU5EIEZBTiBDT05UUk9MTEVSIERSSVZFUgorUDoJUmlrdSBWb2lwaW8KK006CXJpa3UudmlwaW9AaWtpLmZpCitMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCitTOglNYWludGFpbmVkCisKIEZJUkVXSVJFIFNVQlNZU1RFTSAoZHJpdmVycy9maXJld2lyZSwgPGxpbnV4L2ZpcmV3aXJlKi5oPikKIFA6CUtyaXN0aWFuIEhvZWdzYmVyZywgU3RlZmFuIFJpY2h0ZXIKIE06CWtyaEByZWRoYXQuY29tLCBzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlCkBAIC0xOTQ1LDYgKzE5NTEsMTIgQEAKIFc6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9mc2VpZGVsL2hkYXBzLwogUzoJTWFpbnRhaW5lZAogCitIWVBFUlZJU09SIFZJUlRVQUwgQ09OU09MRSBEUklWRVIKK0w6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitTOglPZGQgRml4ZXMKK0Y6CWRyaXZlcnMvY2hhci9odmNfKgorCiBHU1BDQSBGSU5FUElYIFNVQkRSSVZFUgogUDoJRnJhbmsgWmFnbwogTToJZnJhbmtAemFnby5uZXQKQEAgLTI2NDIsNiArMjY1NCwxMiBAQAogTDoJa2dkYi1idWdyZXBvcnRAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKK0tNRU1UUkFDRQorUDoJRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQorTToJZWR1YXJkLm11bnRlYW51QGxpbnV4MzYwLnJvCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCisKIEtQUk9CRVMKIFA6CUFuYW50aCBOIE1hdmluYWtheWFuYWhhbGxpCiBNOglhbmFudGhAaW4uaWJtLmNvbQpAQCAtMjkxMiw2ICsyOTMwLDEyIEBACiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIAorTUFSVkVMTCBTT0MgTU1DL1NEL1NESU8gQ09OVFJPTExFUiBEUklWRVIKK1A6CU5pY29sYXMgUGl0cmUKK006CW5pY29AY2FtLm9yZworTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBNQVJWRUxMIFlVS09OIC8gU1lTS09OTkVDVCBEUklWRVIKIFA6CU1pcmtvIExpbmRuZXIKIE06CW1saW5kbmVyQHN5c2tvbm5lY3QuZGUKQEAgLTMwOTgsNyArMzEyMiw3IEBACiBMOgluZXRlbUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwogUzoJTWFpbnRhaW5lZAogCi1ORVRFUklPTiAoUzJJTykgWGZyYW1lIDEwR2JFIERSSVZFUgorTkVURVJJT04gKFMySU8pIDEwR2JFIERSSVZFUiAoeGZyYW1lL3Z4Z2UpCiBQOglSYW1rcmlzaG5hIFZlcGEKIE06CXJhbS52ZXBhQG5ldGVyaW9uLmNvbQogUDoJUmFzdGFwdXIgU2FudG9zaApAQCAtMzEwNyw4ICszMTMxLDExIEBACiBNOglzaXZha3VtYXIuc3VicmFtYW5pQG5ldGVyaW9uLmNvbQogUDoJU3JlZW5pdmFzYSBIb25udXIKIE06CXNyZWVuaXZhc2EuaG9ubnVyQG5ldGVyaW9uLmNvbQorUDoJQW5pbCBNdXJ0aHkKK006CWFuaWwubXVydGh5QG5ldGVyaW9uLmNvbQogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3RyYWMubmV0ZXJpb24uY29tL2NnaS1iaW4vdHJhYy5jZ2kvd2lraS9UaXRsZUluZGV4P2Fub255bW91cworVzoJaHR0cDovL3RyYWMubmV0ZXJpb24uY29tL2NnaS1iaW4vdHJhYy5jZ2kvd2lraS9MaW51eD9Bbm9ueW1vdXMKK1c6CWh0dHA6Ly90cmFjLm5ldGVyaW9uLmNvbS9jZ2ktYmluL3RyYWMuY2dpL3dpa2kvWDMxMDBMaW51eD9Bbm9ueW1vdXMKIFM6CVN1cHBvcnRlZAogCiBORVRGSUxURVIvSVBUQUJMRVMvSVBDSEFJTlMKQEAgLTMzOTksNiArMzQyNiwxMSBAQAogTToJamltLmNyb21pZUBnbWFpbC5jb20KIFM6CU1haW50YWluZWQKIAorUENBOTUzMiBMRUQgRFJJVkVSCitQOglSaWt1IFZvaXBpbworTToJcmlrdS52b2lwaW9AaWtpLmZpCitTOglNYWludGFpbmVkCisKIFBDSSBFUlJPUiBSRUNPVkVSWQogUDoJTGluYXMgVmVwc3RhcwogTToJbGluYXNAYXVzdGluLmlibS5jb20KQEAgLTM4OTYsNyArMzkyOCwxNCBAQAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIERSSVZFUgogUDoJUGllcnJlIE9zc21hbgogTToJZHJ6ZXVzLXNkaGNpQGRyemV1cy5jeAotTDoJc2RoY2ktZGV2ZWxAbGlzdC5kcnpldXMuY3gKK0w6CXNkaGNpLWRldmVsQGxpc3RzLm9zc21hbi5ldQorUzoJTWFpbnRhaW5lZAorCitTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFLCBPUEVOIEZJUk1XQVJFIEJJTkRJTkdTIChTREhDSS1PRikKK1A6CUFudG9uIFZvcm9udHNvdgorTToJYXZvcm9udHNvdkBydS5tdmlzdGEuY29tCitMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZworTDoJc2RoY2ktZGV2ZWxAbGlzdHMub3NzbWFuLmV1CiBTOglNYWludGFpbmVkCiAKIFNFQ1VSSVRZIFNVQlNZU1RFTQpAQCAtNDM3NCw2ICs0NDEzLDExIEBACiBXOglodHRwOi8vd3d3LmJ1enphcmQub3JnLnVrL3Rvc2hpYmEvCiBTOglNYWludGFpbmVkCiAKK1RNSU8gTU1DIERSSVZFUgorUDoJSWFuIE1vbHRvbgorTToJaWFuQG1uZW1lbnRoLmNvLnVrCitTOglNYWludGFpbmVkCisKIFRQTSBERVZJQ0UgRFJJVkVSCiBQOglEZWJvcmEgVmVsYXJkZQogTToJZGVib3JhQGxpbnV4LnZuZXQuaWJtLmNvbQpAQCAtNDgzOCw3ICs0ODgyLDcgQEAKIFA6CU1hcmsgQnJvd24KIE06CWJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tCiBXOglodHRwOi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL25vZGUvMTUKLVc6CWh0dHA6Ly93d3cuc2xpbWxvZ2ljLmNvLnVrLz9wYWdlX2lkPTUKK1c6CWh0dHA6Ly93d3cuc2xpbWxvZ2ljLmNvLnVrLz9wPTQ4CiBUOglnaXQga2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbHJnL3ZvbHRhZ2UtMi42LmdpdAogUzoJU3VwcG9ydGVkCiAKQEAgLTQ5NjAsNyArNTAwNCw4IEBACiAKIFhGUyBGSUxFU1lTVEVNCiBQOglTaWxpY29uIEdyYXBoaWNzIEluYwotUDoJQmlsbCBPJ0Rvbm5lbGwKK1A6CUZlbGl4IEJseWFraGVyCitNOglmZWxpeGJAc2dpLmNvbQogTToJeGZzLW1hc3RlcnNAb3NzLnNnaS5jb20KIEw6CXhmc0Bvc3Muc2dpLmNvbQogVzoJaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcwpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IDgzMGMxNmEuLmRjODFiMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAJdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmcgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBQUk9GSUxJTkcKIAlkZXBlbmRzIG9uIEhBVkVfT1BST0ZJTEUKKwlkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVAogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IFJJTkdfQlVGRkVSCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggZDk1M2UyMy4uODg5NzE0NiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTE0LDE3ICsxNCw0IEBACiAKIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKLSNkZWZpbmUgSEFSRElSUV9CSVRTCTEyCi0KLS8qCi0gKiBUaGUgaGFyZGlycSBtYXNrIGhhcyB0byBiZSBsYXJnZSBlbm91Z2ggdG8gaGF2ZQotICogc3BhY2UgZm9yIHBvdGVudGlhbGx5IG5lc3RhYmxlIElSUSBzb3VyY2VzIGluIHRoZSBzeXN0ZW0KLSAqIHRvIG5lc3Qgb24gYSBzaW5nbGUgQ1BVLiBPbiBBbHBoYSwgaW50ZXJydXB0cyBhcmUgbWFza2VkIGF0IHRoZSBDUFUKLSAqIGJ5IElQTCBhcyB3ZWxsIGFzIGF0IHRoZSBzeXN0ZW0gbGV2ZWwuIFdlIG9ubHkgaGF2ZSA4IElQTHMgKFVOSVggUEFMY29kZSkKLSAqIHNvIHdlIHJlYWxseSBvbmx5IGhhdmUgOCBuZXN0YWJsZSBJUlFzLCBidXQgYWxsb3cgc29tZSBvdmVyaGVhZAotICovCi0jaWYgKDEgPDwgSEFSRElSUV9CSVRTKSA8IDE2Ci0jZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCi0jZW5kaWYKLQogI2VuZGlmIC8qIF9BTFBIQV9IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBhZWViMTI1Li5lMzhmYjk1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xNjYsNiArMTY2LDkgQEAKIAlsb2NrLT5sb2NrID0gMDsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOGQwMDk3Zi4uM2EyZmI3YSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAgKi8KIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJICAgIHVuc2lnbmVkIGxvbmcgdW51c2VkLAogCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAzOTNjODE2Li45ZTZlNTEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTE4LDcgKzE4LDEwIEBACiAKIHVuc2lnbmVkIGludCBfX21hY2hpbmVfYXJjaF90eXBlOwogCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogZm9yIGlubGluZSAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CS8qIGZvciBzaXplX3QgKi8KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogZm9yIE5VTEwgKi8KKyNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAKICNpZmRlZiBTVEFOREFMT05FX0RFQlVHCiAjZGVmaW5lIHB1dHN0ciBwcmludGYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKaW5kZXggYWE5ZDM0Zi4uNjc5YTRhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKQEAgLTQ3NCwxNCArNDc0LDM0IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAotQ09ORklHX1NNQzkxMVg9eQorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CitDT05GSUdfU01TQzkxMVg9eQogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wY20wMzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wY20wMzdfZGVmY29uZmlnCmluZGV4IDYyNzQ3NDUuLjZlMzdjNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BjbTAzN19kZWZjb25maWcKQEAgLTQ2NSwxMiArNDY1LDMzIEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZwppbmRleCBjZDI5ODI0Li4yMWRiNGIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCkBAIC00OTYsMTMgKzQ5NiwzMyBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU01DOTExWD15CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXdfZGVmY29uZmlnCmluZGV4IDdlMjUzZjUuLjlhNzVjMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXdfZGVmY29uZmlnCkBAIC00OTAsMTMgKzQ5MCwzMyBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfU01DOTExWD15CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAyYjQxZWJiLi5jMTM2ODFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTIxNyw2ICsyMTcsOSBAQAogLyogcmVhZF9jYW5fbG9jayAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/ICovCiAjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2soeCkJCSgoeCktPmxvY2sgPCAweDgwMDAwMDAwKQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDJkZTE0ZTIuLmMzMjY1YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBfX2FzbV9fKCJyZXRfZnJvbV9mb3JrIik7CiAKIGludAotY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0LAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzdGFja19zdGFydCwKIAkgICAgdW5zaWduZWQgbG9uZyBzdGtfc3osIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB0YXNrX3RocmVhZF9pbmZvKHApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwppbmRleCA3YWM4MTJkLi5lMjZjNGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwpAQCAtMTk4LDE3ICsxOTgsMTcgQEAKIAkvKiBVU0IgbXVzdCBub3QgYmUgdXNpbmcgUExMQiAqLwogCWlmIChjcHVfaXNfYXQ5MXJtOTIwMCgpKSB7CiAJCWlmICgoc2NzciAmIChBVDkxUk05MjAwX1BNQ19VSFAgfCBBVDkxUk05MjAwX1BNQ19VRFApKSAhPSAwKSB7Ci0JCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSBTdXNwZW5kLXRvLVJBTSB3aXRoIFVTQiBzdGlsbCBhY3RpdmVcbiIpOworCQkJcHJfZXJyKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggVVNCIHN0aWxsIGFjdGl2ZVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYxKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkgfHwgY3B1X2lzX2F0OTFzYW05ZzIwKCkpIHsKIAkJaWYgKChzY3NyICYgKEFUOTFTQU05MjZ4X1BNQ19VSFAgfCBBVDkxU0FNOTI2eF9QTUNfVURQKSkgIT0gMCkgewotCQkJcHJfZGVidWcoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBVU0Igc3RpbGwgYWN0aXZlXG4iKTsKKwkJCXByX2VycigiQVQ5MTogUE0gLSBTdXNwZW5kLXRvLVJBTSB3aXRoIFVTQiBzdGlsbCBhY3RpdmVcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgaWYgKGNwdV9pc19hdDkxY2FwOSgpKSB7CiAJCWlmICgoc2NzciAmIEFUOTFDQVA5X1BNQ19VSFApICE9IDApIHsKLQkJCXByX2RlYnVnKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggVVNCIHN0aWxsIGFjdGl2ZVxuIik7CisJCQlwcl9lcnIoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBVU0Igc3RpbGwgYWN0aXZlXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMjIzLDcgKzIyMyw3IEBACiAKIAkJY3NzID0gYXQ5MV9zeXNfcmVhZChBVDkxX1BNQ19QQ0tSKGkpKSAmIEFUOTFfUE1DX0NTUzsKIAkJaWYgKGNzcyAhPSBBVDkxX1BNQ19DU1NfU0xPVykgewotCQkJcHJfZGVidWcoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBQQ0slZCBzcmMgJWRcbiIsIGksIGNzcyk7CisJCQlwcl9lcnIoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBQQ0slZCBzcmMgJWRcbiIsIGksIGNzcyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBiYmJkNzI3Li40ZDljMWY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yOCw3ICsyOCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJX19yYXdfd3JpdGVsKFJFU0VUX0dMT0JBTCB8IFJFU0VUX0NQVTEsCiAJCSAgICAgSU9fQUREUkVTUyhHRU1JTklfR0xPQkFMX0JBU0UpICsgR0xPQkFMX1JFU0VUKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAwMDFlZGZlLi40ZjViMGUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNCw3ICsxNCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwppbmRleCA1ZmNlMDIyLi5jMzY0OGVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgpAQCAtNzAsNyArNzAsNyBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxMXhfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtc2M5MTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CQk9IENTMV9CQVNFX0FERFIgKyAweDMwMCwKIAkJLmVuZAkJPSBDUzFfQkFTRV9BRERSICsgMHgzMDAgKyBTWl82NEsgLSAxLApAQCAtNzksMjIgKzc5LDI1IEBACiAJWzFdID0gewogCQkuc3RhcnQJCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8zXzEpLAogCQkuZW5kCQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPM18xKSwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbWM5MTF4X3BsYXRkYXRhIHNtYzkxMXhfaW5mbyA9IHsKLQkuZmxhZ3MJCT0gU01DOTExWF9VU0VfMzJCSVQsCi0JLmlycV9mbGFncwk9IElSUUZfU0hBUkVEIHwgSVJRRl9UUklHR0VSX0xPVywKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2luZm8gPSB7CisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCB8IFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSB8CisJCQkgIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MsCisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM3X2V0aCA9IHsKLQkubmFtZQkJPSAic21jOTExeCIsCisJLm5hbWUJCT0gInNtc2M5MTF4IiwKIAkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxMXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBzbWM5MTF4X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21zYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbXNjOTExeF9yZXNvdXJjZXMsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnNtYzkxMXhfaW5mbywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21zYzkxMXhfaW5mbywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9uZXR4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvbmV0eC1yZWdzLmgKaW5kZXggMDhjNjBmZi4uNWEwM2U3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9uZXR4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL25ldHgtcmVncy5oCkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIE5FVFhfUEFfWFBFQyhubykgKE5FVFhfSU9fUEhZUyArIE5FVFhfT0ZTX1hQRUMobm8pKQogI2RlZmluZSBORVRYX1BBX1ZJQyAgICAgIChORVRYX0lPX1BIWVMgKyBORVRYX09GU19WSUMpCiAKLS8qIHZpcnVhbCBhZGRyZXNzZXMgKi8KKy8qIHZpcnR1YWwgYWRkcmVzc2VzICovCiAjZGVmaW5lIE5FVFhfVkFfU1lTVEVNICAgKE5FVFhfSU9fVklSVCArIE5FVFhfT0ZTX1NZU1RFTSkKICNkZWZpbmUgTkVUWF9WQV9NRU1DUiAgICAoTkVUWF9JT19WSVJUICsgTkVUWF9PRlNfTUVNQ1IpCiAjZGVmaW5lIE5FVFhfVkFfRFBNQVMgICAgKE5FVFhfSU9fVklSVCArIE5FVFhfT0ZTX0RQTUFTKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCmluZGV4IDNmMzI1ZDMuLmNkOGRlODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKQEAgLTEwOSw3ICsxMDksNyBAQAogCWhlbHAKIAkgU3VwcG9ydCBmb3IgdGhlIFBhbG0gWmlyZTcxIFBEQS4gVG8gYm9vdCB0aGUga2VybmVsLAogCSB5b3UnbGwgbmVlZCBhIFBhbG1PUyBjb21wYXRpYmxlIGJvb3Rsb2FkZXI7IGNoZWNrIG91dAotCSBodHRwOi8vaGFja25kZXYuY29tL3BhbG0vejcxIGZvciBtb3JlIGluZm9ybWF0aW9ucy4KKwkgaHR0cDovL2hhY2tuZGV2LmNvbS9wYWxtL3o3MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAkgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoIGEgUERBLCBzYXkgTiBvdGhlcndpc2UuCiAKIGNvbmZpZyBNQUNIX09NQVBfUEFMTVRUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQppbmRleCBhMmMzZmNjLi5jNDlkOWJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTQ3LDYgKzQ3LDggQEAKIAogb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfUlg1MSkJCSs9IGJvYXJkLXJ4NTEubyBcCiAJCQkJCSAgIGJvYXJkLXJ4NTEtcGVyaXBoZXJhbHMubyBcCisJCQkJCSAgIG1tYy10d2w0MDMwLm8KKwogIyBQbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdCBjb2RlCiBpZmVxICgkKENPTkZJR19VU0JfTVVTQl9TT0MpLHkpCiBvYmoteQkJCQkJKz0gdXNiLW11c2IubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggZTA5NmY3Ny4uZGE1N2IwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNDEsMTIgKzQyLDEyIEBACiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCi0jZGVmaW5lIExEUF9TTUM5MTFYX0NTCQkxCi0jZGVmaW5lIExEUF9TTUM5MTFYX0dQSU8JMTUyCisjZGVmaW5lIExEUF9TTVNDOTExWF9DUwkJMQorI2RlZmluZSBMRFBfU01TQzkxMVhfR1BJTwkxNTIKICNkZWZpbmUgREVCVUdfQkFTRQkJMHgwODAwMDAwMAogI2RlZmluZSBMRFBfRVRIUl9TVEFSVAkJREVCVUdfQkFTRQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGxkcF9zbWM5MTF4X3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsZHBfc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBMRFBfRVRIUl9TVEFSVCwKIAkJLmVuZAk9IExEUF9FVEhSX1NUQVJUICsgU1pfNEssCkBAIC01OSw0MCArNjAsNTAgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGRwX3NtYzkxMXhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbWM5MTF4IiwKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIGxkcF9zbXNjOTExeF9jb25maWcgPSB7CisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKKwkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZHBfc21zYzkxMXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbXNjOTExeCIsCiAJLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsZHBfc21jOTExeF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGxkcF9zbWM5MTF4X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGRwX3Ntc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbGRwX3Ntc2M5MTF4X3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbGRwX3Ntc2M5MTF4X2NvbmZpZywKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxkcF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmbGRwX3NtYzkxMXhfZGV2aWNlLAorCSZsZHBfc21zYzkxMXhfZGV2aWNlLAogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBsZHBfaW5pdF9zbWM5MTF4KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGxkcF9pbml0X3Ntc2M5MTF4KHZvaWQpCiB7CiAJaW50IGV0aF9jczsKIAl1bnNpZ25lZCBsb25nIGNzX21lbV9iYXNlOwogCWludCBldGhfZ3BpbyA9IDA7CiAKLQlldGhfY3MgPSBMRFBfU01DOTExWF9DUzsKKwlldGhfY3MgPSBMRFBfU01TQzkxMVhfQ1M7CiAKIAlpZiAoZ3BtY19jc19yZXF1ZXN0KGV0aF9jcywgU1pfMTZNLCAmY3NfbWVtX2Jhc2UpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQTUMgbWVtIGZvciBzbWM5MTF4XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUE1DIG1lbSBmb3Igc21zYzkxMXhcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JbGRwX3NtYzkxMXhfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gY3NfbWVtX2Jhc2UgKyAweDA7Ci0JbGRwX3NtYzkxMXhfcmVzb3VyY2VzWzBdLmVuZCAgID0gY3NfbWVtX2Jhc2UgKyAweGZmOworCWxkcF9zbXNjOTExeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MDsKKwlsZHBfc21zYzkxMXhfcmVzb3VyY2VzWzBdLmVuZCAgID0gY3NfbWVtX2Jhc2UgKyAweGZmOwogCXVkZWxheSgxMDApOwogCi0JZXRoX2dwaW8gPSBMRFBfU01DOTExWF9HUElPOworCWV0aF9ncGlvID0gTERQX1NNU0M5MTFYX0dQSU87CiAKLQlsZHBfc21jOTExeF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBPTUFQX0dQSU9fSVJRKGV0aF9ncGlvKTsKKwlsZHBfc21zYzkxMXhfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gT01BUF9HUElPX0lSUShldGhfZ3Bpbyk7CiAKLQlpZiAoZ3Bpb19yZXF1ZXN0KGV0aF9ncGlvLCAic21jOTExeCBpcnEiKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxMXggSVJRXG4iLAorCWlmIChncGlvX3JlcXVlc3QoZXRoX2dwaW8sICJzbXNjOTExeCBpcnEiKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtc2M5MTF4IElSUVxuIiwKIAkJCQlldGhfZ3Bpbyk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDQsNyArMTE1LDcgQEAKIAlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKLQlsZHBfaW5pdF9zbWM5MTF4KCk7CisJbGRwX2luaXRfc21zYzkxMXgoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGxkcF91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IGIzZjZlOWQ4Li5iMWYyM2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC01Nyw2ICs1Nyw5IEBACiAjZGVmaW5lIEdQTUNfQ1MwX0JBU0UgIDB4NjAKICNkZWZpbmUgR1BNQ19DU19TSVpFICAgMHgzMAogCisjZGVmaW5lIE9WRVJPX1NNU0M5MTFYX0NTICAgICAgNQorI2RlZmluZSBPVkVST19TTVNDOTExWF9HUElPICAgIDE3NgorCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikgfHwgXAogCWRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQogCkBAIC0xMTYsNiArMTE5LDY3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG92ZXJvX2Fkczc4NDZfaW5pdCh2b2lkKSB7IHJldHVybjsgfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTVNDOTExWCkgfHwgZGVmaW5lZChDT05GSUdfU01TQzkxMVhfTU9EVUxFKQorCisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvdmVyb19zbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInNtc2M5MTF4LW1lbW9yeSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBvdmVyb19zbXNjOTExeF9jb25maWcgPSB7CisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCAsCisJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Zlcm9fc21zYzkxMXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbXNjOTExeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdmVyb19zbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9ICZvdmVyb19zbXNjOTExeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm92ZXJvX3Ntc2M5MTF4X2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvdmVyb19pbml0X3Ntc2M5MTF4KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZTsKKworCWlmIChncG1jX2NzX3JlcXVlc3QoT1ZFUk9fU01TQzkxMVhfQ1MsIFNaXzE2TSwgJmNzX21lbV9iYXNlKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVxdWVzdCBmb3IgR1BNQyBtZW0gZm9yIHNtc2M5MTF4XG4iKTsKKwkJcmV0dXJuOworCX0KKworCW92ZXJvX3Ntc2M5MTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGNzX21lbV9iYXNlICsgMHgwOworCW92ZXJvX3Ntc2M5MTF4X3Jlc291cmNlc1swXS5lbmQgICA9IGNzX21lbV9iYXNlICsgMHhmZjsKKworCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX1NNU0M5MTFYX0dQSU8sICJTTVNDOTExWCBJUlEiKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25faW5wdXQoT1ZFUk9fU01TQzkxMVhfR1BJTykgPT0gMCkpIHsKKwkJZ3Bpb19leHBvcnQoT1ZFUk9fU01TQzkxMVhfR1BJTywgMCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIFNNU0M5MTFYIElSUVxuIik7CisJCXJldHVybjsKKwl9CisKKwlvdmVyb19zbXNjOTExeF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBPTUFQX0dQSU9fSVJRKE9WRVJPX1NNU0M5MTFYX0dQSU8pOworCW92ZXJvX3Ntc2M5MTF4X3Jlc291cmNlc1sxXS5lbmQJICA9IDA7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm92ZXJvX3Ntc2M5MTF4X2RldmljZSk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG92ZXJvX2luaXRfc21zYzkxMXgodm9pZCkgeyByZXR1cm47IH0KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb3Zlcm9fbmFuZF9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZSAgICAgICAgICAgPSAieGxvYWRlciIsCkBAIC0yOTAsNiArMzU0LDcgQEAKIAlvdmVyb19mbGFzaF9pbml0KCk7CiAJdXNiX211c2JfaW5pdCgpOwogCW92ZXJvX2Fkczc4NDZfaW5pdCgpOworCW92ZXJvX2luaXRfc21zYzkxMXgoKTsKIAogCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwKIAkJCSAgIk9WRVJPX0dQSU9fVzJXX05SRVNFVCIpID09IDApICYmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IGQ2NzY2NjguLjlhYjk0N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KQEAgLTEyOCwxNCArMTI4LDE1IEBACiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfZmxhc2hfZGV2aWNlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbWM5MTF4X3BsYXRkYXRhIHJlYWx2aWV3X3NtYzkxMXhfcGxhdGRhdGEgPSB7Ci0JLmZsYWdzCQk9IFNNQzkxMVhfVVNFXzMyQklULAotCS5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRCwKLQkuaXJxX3BvbGFyaXR5CT0gMSwKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0hJR0gsCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2V0aF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNtYzkxMXgiLAorCS5uYW1lCQk9ICJzbXNjOTExeCIsCiAJLmlkCQk9IDAsCiAJLm51bV9yZXNvdXJjZXMJPSAyLAogfTsKQEAgLTE0NSw4ICsxNDYsOCBAQAogCWlmIChuYW1lKQogCQlyZWFsdmlld19ldGhfZGV2aWNlLm5hbWUgPSBuYW1lOwogCXJlYWx2aWV3X2V0aF9kZXZpY2UucmVzb3VyY2UgPSByZXM7Ci0JaWYgKHN0cmNtcChyZWFsdmlld19ldGhfZGV2aWNlLm5hbWUsICJzbWM5MTF4IikgPT0gMCkKLQkJcmVhbHZpZXdfZXRoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9ICZyZWFsdmlld19zbWM5MTF4X3BsYXRkYXRhOworCWlmIChzdHJjbXAocmVhbHZpZXdfZXRoX2RldmljZS5uYW1lLCAic21zYzkxMXgiKSA9PSAwKQorCQlyZWFsdmlld19ldGhfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2NvbmZpZzsKIAogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2V0aF9kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYwppbmRleCA2N2Q2ZDljLi5kMGQzOWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYwpAQCAtMTkxLDYgKzE5MSw3IEBACiAJY2xrLT5uYW1lCQk9ICJkdW1teV90aW1lciI7CiAJY2xrLT5mZWF0dXJlcwkJPSBDTE9DS19FVlRfRkVBVF9EVU1NWTsKIAljbGstPnJhdGluZwkJPSAyMDA7CisJY2xrLT5tdWx0ICAgICAgICAgICAgICAgPSAxOwogCWNsay0+c2V0X21vZGUJCT0gZHVtbXlfdGltZXJfc2V0X21vZGU7CiAJY2xrLT5icm9hZGNhc3QJCT0gc21wX3RpbWVyX2Jyb2FkY2FzdDsKIAljbGstPmNwdW1hc2sJCT0gY3B1bWFza19vZihjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwppbmRleCA5NDA3N2ZiLi42ZjdlNzA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUworKysgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwpAQCAtMjksMTAgKzI5LDEwIEBACiAJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBnZXQgRlNSCiAJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBnZXQgRkFSCiAvKgotICogRmF1bHR5IFNXUCBpbnN0cnVjdGlvbiBvbiAxMTM2IGRvZXNuJ3Qgc2V0IGJpdCAxMSBpbiBERlNSLgorICogRmF1bHR5IFNXUCBpbnN0cnVjdGlvbiBvbiAxMTM2IGRvZXNuJ3Qgc2V0IGJpdCAxMSBpbiBERlNSIChlcnJhdHVtIDMyNjEwMykuCiAgKiBUaGUgdGVzdCBiZWxvdyBjb3ZlcnMgYWxsIHRoZSB3cml0ZSBzaXR1YXRpb25zLCBpbmNsdWRpbmcgSmF2YSBieXRlY29kZXMKICAqLwotCWJpYwlyMSwgcjEsICMxIDw8IDExIHwgMSA8PCAxMAlAIGNsZWFyIGJpdHMgMTEgYW5kIDEwIG9mIEZTUgorCWJpYwlyMSwgcjEsICMxIDw8IDExCQlAIGNsZWFyIGJpdCAxMSBvZiBGU1IKIAl0c3QJcjMsICNQU1JfSl9CSVQJCQlAIEphdmE/CiAJbW92bmUJcGMsIGxyCiAJZG9fdGh1bWJfYWJvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1mZXJvY2Vvbi1sMi5jCmluZGV4IGQ2ZGQ4MzguLjZlNzdjMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmVyb2Nlb24tbDIuYwpAQCAtMTE1LDYgKzExNSwxMCBAQAogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMl9pbnZfYWxsKHZvaWQpCit7CisJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzExLCAwIiA6IDogInIiICgwKSk7Cit9CiAKIC8qCiAgKiBMaW51eCBwcmltaXRpdmVzLgpAQCAtMjU0LDkgKzI1OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX2ludmFsaWRhdGVfaWNhY2hlKHZvaWQpCiB7Ci0JaW50IGR1bW15OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDAiIDogIj1yIiAoZHVtbXkpKTsKKwlfX2FzbV9fKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCAwIiA6IDogInIiICgwKSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGludmFsaWRhdGVfYW5kX2Rpc2FibGVfaWNhY2hlKHZvaWQpCkBAIC0zMjEsNiArMzIzLDcgQEAKIAogCQlkID0gZmx1c2hfYW5kX2Rpc2FibGVfZGNhY2hlKCk7CiAJCWkgPSBpbnZhbGlkYXRlX2FuZF9kaXNhYmxlX2ljYWNoZSgpOworCQlsMl9pbnZfYWxsKCk7CiAJCXdyaXRlX2V4dHJhX2ZlYXR1cmVzKHUgfCAweDAwNDAwMDAwKTsKIAkJaWYgKGkpCiAJCQllbmFibGVfaWNhY2hlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvZW50cnkuUyBiL2FyY2gvYXJtL3ZmcC9lbnRyeS5TCmluZGV4IGJhNTkyYTkuLmEyYmVkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC9lbnRyeS5TCisrKyBiL2FyY2gvYXJtL3ZmcC9lbnRyeS5TCkBAIC0xNSwxMyArMTUsMTYgQEAKICAqICByMTAgPSB0aHJlYWRfaW5mbyBzdHJ1Y3R1cmUKICAqICBsciAgPSBmYWlsdXJlIHJldHVybgogICovCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLSNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3ZmcG1hY3Jvcy5oPgorI2luY2x1ZGUgIi4uL2tlcm5lbC9lbnRyeS1oZWFkZXIuUyIKIAogRU5UUlkoZG9fdmZwKQorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJbGRyCXI0LCBbcjEwLCAjVElfUFJFRU1QVF0JQCBnZXQgcHJlZW1wdCBjb3VudAorCWFkZAlyMTEsIHI0LCAjMQkJQCBpbmNyZW1lbnQgaXQKKwlzdHIJcjExLCBbcjEwLCAjVElfUFJFRU1QVF0KKyNlbmRpZgogCWVuYWJsZV9pcnEKICAJbGRyCXI0LCAuTEN2ZnAKIAlsZHIJcjExLCBbcjEwLCAjVElfQ1BVXQlAIENQVSBudW1iZXIKQEAgLTMwLDYgKzMzLDEyIEBACiBFTkRQUk9DKGRvX3ZmcCkKIAogRU5UUlkodmZwX251bGxfZW50cnkpCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwlnZXRfdGhyZWFkX2luZm8JcjEwCisJbGRyCXI0LCBbcjEwLCAjVElfUFJFRU1QVF0JQCBnZXQgcHJlZW1wdCBjb3VudAorCXN1YglyMTEsIHI0LCAjMQkJQCBkZWNyZW1lbnQgaXQKKwlzdHIJcjExLCBbcjEwLCAjVElfUFJFRU1QVF0KKyNlbmRpZgogCW1vdglwYywgbHIKIEVORFBST0ModmZwX251bGxfZW50cnkpCiAKQEAgLTQxLDYgKzUwLDEyIEBACiAKIAlfX0lOSVQKIEVOVFJZKHZmcF90ZXN0aW5nX2VudHJ5KQorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJZ2V0X3RocmVhZF9pbmZvCXIxMAorCWxkcglyNCwgW3IxMCwgI1RJX1BSRUVNUFRdCUAgZ2V0IHByZWVtcHQgY291bnQKKwlzdWIJcjExLCByNCwgIzEJCUAgZGVjcmVtZW50IGl0CisJc3RyCXIxMSwgW3IxMCwgI1RJX1BSRUVNUFRdCisjZW5kaWYKIAlsZHIJcjAsIFZGUF9hcmNoX2FkZHJlc3MKIAlzdHIJcjUsIFtyMF0JCUAga25vd24gbm9uLXplcm8gdmFsdWUKIAltb3YJcGMsIHI5CQkJQCB3ZSBoYXZlIGhhbmRsZWQgdGhlIGZhdWx0CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwaHcuUyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCmluZGV4IGE1YTRlNTcuLjgzYzRlMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBody5TCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCkBAIC0xMzcsNiArMTM3LDEyIEBACiAJVkZQRk1YUglGUEVYQywgcjEJCUAgcmVzdG9yZSBGUEVYQyBsYXN0CiAJc3ViCXIyLCByMiwgIzQKIAlzdHIJcjIsIFtzcCwgI1NfUENdCQlAIHJldHJ5IHRoZSBpbnN0cnVjdGlvbgorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJZ2V0X3RocmVhZF9pbmZvCXIxMAorCWxkcglyNCwgW3IxMCwgI1RJX1BSRUVNUFRdCUAgZ2V0IHByZWVtcHQgY291bnQKKwlzdWIJcjExLCByNCwgIzEJCUAgZGVjcmVtZW50IGl0CisJc3RyCXIxMSwgW3IxMCwgI1RJX1BSRUVNUFRdCisjZW5kaWYKIAltb3YJcGMsIHI5CQkJQCB3ZSB0aGluayB3ZSBoYXZlIGhhbmRsZWQgdGhpbmdzCiAKIApAQCAtMTU1LDYgKzE2MSwxMiBAQAogCUAgbm90IHJlY29nbmlzZWQgYnkgVkZQCiAKIAlEQkdTVFIJIm5vdCBWRlAiCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwlnZXRfdGhyZWFkX2luZm8JcjEwCisJbGRyCXI0LCBbcjEwLCAjVElfUFJFRU1QVF0JQCBnZXQgcHJlZW1wdCBjb3VudAorCXN1YglyMTEsIHI0LCAjMQkJQCBkZWNyZW1lbnQgaXQKKwlzdHIJcjExLCBbcjEwLCAjVElfUFJFRU1QVF0KKyNlbmRpZgogCW1vdglwYywgbHIKIAogcHJvY2Vzc19leGNlcHRpb246CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggNzU0NTdiMy4uMDE1OTljNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCSAqIG9uIFZGUCBzdWJhcmNoIDEuCiAJCSAqLwogCQkgdmZwX3JhaXNlX2V4Y2VwdGlvbnMoVkZQX0VYQ0VQVElPTl9FUlJPUiwgdHJpZ2dlciwgZnBzY3IsIHJlZ3MpOwotCQkgcmV0dXJuOworCQlnb3RvIGV4aXQ7CiAJfQogCiAJLyoKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCSAqIHRoZSBGUEVYQy5GUDJWIGJpdCBpcyB2YWxpZCBvbmx5IGlmIEZQRVhDLkVYIGlzIDEuCiAJICovCiAJaWYgKGZwZXhjIF4gKEZQRVhDX0VYIHwgRlBFWENfRlAyVikpCi0JCXJldHVybjsKKwkJZ290byBleGl0OwogCiAJLyoKIAkgKiBUaGUgYmFycmllcigpIGhlcmUgcHJldmVudHMgZnBpbnN0MiBiZWluZyByZWFkCkBAIC0zMTAsNiArMzEwLDggQEAKIAlleGNlcHRpb25zID0gdmZwX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odHJpZ2dlciwgb3JpZ19mcHNjciwgcmVncyk7CiAJaWYgKGV4Y2VwdGlvbnMpCiAJCXZmcF9yYWlzZV9leGNlcHRpb25zKGV4Y2VwdGlvbnMsIHRyaWdnZXIsIG9yaWdfZnBzY3IsIHJlZ3MpOworIGV4aXQ6CisJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAogc3RhdGljIHZvaWQgdmZwX2VuYWJsZSh2b2lkICp1bnVzZWQpCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL0tjb25maWcgYi9hcmNoL2F2cjMyL0tjb25maWcKaW5kZXggMDVmZTMwNS4uMzVlM2JkOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9LY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvS2NvbmZpZwpAQCAtMTI3LDEzICsxMjcsMTMgQEAKIAlzZWxlY3QgQ1BVX0FUMzJBUDcwMDAKIAlzZWxlY3QgVVNCX0FSQ0hfSEFTX0hDRAogCWhlbHAKLQkgIFRoZSBIYW1tZXJoZWFkIHBsYXRmb3JtIGlzIGJ1aWx0IGFyb3VuZCBhIEFWUjMyIDMyLWJpdCBtaWNyb2NvbnRyb2xsZXIgZnJvbSBBdG1lbC4KKwkgIFRoZSBIYW1tZXJoZWFkIHBsYXRmb3JtIGlzIGJ1aWx0IGFyb3VuZCBhbiBBVlIzMiAzMi1iaXQgbWljcm9jb250cm9sbGVyIGZyb20gQXRtZWwuCiAJICBJdCBvZmZlcnMgdmVyc2F0aWxlIHBlcmlwaGVyYWxzLCBzdWNoIGFzIGV0aGVybmV0LCB1c2IgZGV2aWNlLCB1c2IgaG9zdCBldGMuCiAKLQkgIFRoZSBib2FyZCBhbHNvIGluY29vcGVyYXRlcyBhIHBvd2VyIHN1cHBseSBhbmQgaXMgYSBQb3dlciBvdmVyIEV0aGVybmV0IChQb0UpIFBvd2VyZWQKKwkgIFRoZSBib2FyZCBhbHNvIGluY29ycG9yYXRlcyBhIHBvd2VyIHN1cHBseSBhbmQgaXMgYSBQb3dlciBvdmVyIEV0aGVybmV0IChQb0UpIFBvd2VyZWQKIAkgIERldmljZSAoUEQpLgogCi0JICBBZGRpdG9uYWxseSwgYSBDeWNsb25lIElJSSBGUEdBIGZyb20gQWx0ZXJhIGlzIGludGVncmF0ZWQgb24gdGhlIGJvYXJkLiBUaGUgRlBHQSBpcworCSAgQWRkaXRpb25hbGx5LCBhIEN5Y2xvbmUgSUlJIEZQR0EgZnJvbSBBbHRlcmEgaXMgaW50ZWdyYXRlZCBvbiB0aGUgYm9hcmQuIFRoZSBGUEdBIGlzCiAJICBtYXBwZWQgaW50byB0aGUgMzItYml0IEFWUiBtZW1vcnkgYnVzLiBUaGUgRlBHQSBvZmZlcnMgdHdvIEREUjIgU0RSQU0gaW50ZXJmYWNlcywgd2hpY2gKIAkgIHdpbGwgY292ZXIgZXZlbiB0aGUgbW9zdCBleGNlcHRpb25hbCBuZWVkIG9mIG1lbW9yeSBiYW5kd2lkdGguIFRvZ2V0aGVyIHdpdGggdGhlIG9uYm9hcmQKIAkgIHZpZGVvIGRlY29kZXIgdGhlIGJvYXJkIGlzIHJlYWR5IGZvciB2aWRlbyBwcm9jZXNzaW5nLgpAQCAtMTQ0LDYgKzE0NCwxOSBAQAogCWJvb2wgIkZhdnItMzIgTENELWJvYXJkIgogCXNlbGVjdCBDUFVfQVQzMkFQNzAwMAogCitjb25maWcgQk9BUkRfTUVSSVNDCisJYm9vbCAiTWVyaXNjIGJvYXJkIgorCXNlbGVjdCBDUFVfQVQzMkFQNzAwMAorCWhlbHAKKwkgIE1lcmlzYyBpcyB0aGUgZmFtaWx5IG5hbWUgZm9yIGEgcmFuZ2Ugb2YgQVZSMzItYmFzZWQgYm9hcmRzLgorCisJICBUaGUgYm9hcmRzIGFyZSBkZXNpZ25lZCB0byBiZSB1c2VkIGluIGEgbWFuLW1hY2hpbmUKKwkgIGludGVyZmFjaW5nIGVudmlyb25tZW50LCB1dGlsaXppbmcgYSB0b3VjaC1iYXNlZCBncmFwaGljYWwKKwkgIHVzZXIgaW50ZXJmYWNlLiBUaGV5IGhvc3QgYSB2YXN0IHJhbmdlIG9mIEkvTyBwZXJpcGhlcmFscyBhcworCSAgd2VsbCBhcyBhIGxhcmdlIFNEUkFNICYgRmxhc2ggbWVtb3J5IGJhbmsuCisKKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5tYXJ0aW5zc29uLnNlL21lcmlzYworCiBjb25maWcgQk9BUkRfTUlNQzIwMAogCWJvb2wgIk1JTUMyMDAgQ1BVIGJvYXJkIgogCXNlbGVjdCBDUFVfQVQzMkFQNzAwMApAQCAtMTUzLDYgKzE2Niw3IEBACiBzb3VyY2UgImFyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL0tjb25maWciCiBzb3VyY2UgImFyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9LY29uZmlnIgorc291cmNlICJhcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvS2NvbmZpZyIKIAogY2hvaWNlCiAJcHJvbXB0ICJCb290IGxvYWRlciB0eXBlIgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9NYWtlZmlsZSBiL2FyY2gvYXZyMzIvTWFrZWZpbGUKaW5kZXggZjNlZjNiYi4uMGI5N2UxNCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9NYWtlZmlsZQorKysgYi9hcmNoL2F2cjMyL01ha2VmaWxlCkBAIC0zNSw2ICszNSw3IEBACiBjb3JlLSQoQ09ORklHX0JPQVJEX0FUTkdXMTAwKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvCiBjb3JlLSQoQ09ORklHX0JPQVJEX0hBTU1FUkhFQUQpCQkrPSBhcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkLwogY29yZS0kKENPTkZJR19CT0FSRF9GQVZSXzMyKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi8KK2NvcmUtJChDT05GSUdfQk9BUkRfTUVSSVNDKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjLwogY29yZS0kKENPTkZJR19CT0FSRF9NSU1DMjAwKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC8KIGNvcmUtJChDT05GSUdfTE9BREVSX1VfQk9PVCkJCSs9IGFyY2gvYXZyMzIvYm9vdC91LWJvb3QvCiBjb3JlLXkJCQkJCSs9IGFyY2gvYXZyMzIva2VybmVsLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvZXZrbGNkMTB4LmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYwppbmRleCA4MTQwYjIyLi4wMDMzNzExIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9ldmtsY2QxMHguYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIApAQCAtMTksMjYgKzIwLDI2IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKICNpbmNsdWRlIDxtYWNoL2F0MzJhcDcwMHguaD4KKyNpbmNsdWRlIDxtYWNoL3BvcnRtdXguaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYzk3Yy5oPgorCiBzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBhYzk3YzBfZGF0YSA9IHsKLQkuZG1hX3J4X3BlcmlwaF9pZAk9IDMsCi0JLmRtYV90eF9wZXJpcGhfaWQJPSA0LAotCS5kbWFfY29udHJvbGxlcl9pZAk9IDAsCi0JLnJlc2V0X3BpbgkJPSBHUElPX1BJTl9QQigxOSksCisJLnJlc2V0X3BpbiA9IEdQSU9fUElOX1BCKDE5KSwKIH07CiAKICNpZmRlZiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1ZHQQogc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgX19pbml0ZGF0YSB0Y2cwNTd2Z2xhZF9tb2Rlc1tdID0gewogCXsKLQkJLm5hbWUJCT0gIjY0MHg0ODAgQCA2MCIsCi0JCS5yZWZyZXNoCT0gNjAsCisJCS5uYW1lCQk9ICI2NDB4NDgwIEAgNTAiLAorCQkucmVmcmVzaAk9IDUwLAogCQkueHJlcwkJPSA2NDAsCQkueXJlcwkJPSA0ODAsCiAJCS5waXhjbG9jawk9IEtIWjJQSUNPUygyNTE4MCksCiAKLQkJLmxlZnRfbWFyZ2luCT0gNjQsCQkucmlnaHRfbWFyZ2luCT0gMzEsCi0JCS51cHBlcl9tYXJnaW4JPSAzNCwJCS5sb3dlcl9tYXJnaW4JPSAyLAotCQkuaHN5bmNfbGVuCT0gOTYsCQkudnN5bmNfbGVuCT0gNCwKKwkJLmxlZnRfbWFyZ2luCT0gNjQsCQkucmlnaHRfbWFyZ2luCT0gOTYsCisJCS51cHBlcl9tYXJnaW4JPSAzNCwJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJLmhzeW5jX2xlbgk9IDY0LAkJLnZzeW5jX2xlbgk9IDE1LAogCiAJCS5zeW5jCQk9IDAsCiAJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELApAQCAtNjksMTQgKzcwLDE0IEBACiAjZWxpZiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1FWR0EKIHN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIF9faW5pdGRhdGEgdGNnMDU3cXZsYWRfbW9kZXNbXSA9IHsKIAl7Ci0JCS5uYW1lCQk9ICIzMjB4MjQwIEAgNjAiLAotCQkucmVmcmVzaAk9IDYwLAorCQkubmFtZQkJPSAiMzIweDI0MCBAIDUwIiwKKwkJLnJlZnJlc2gJPSA1MCwKIAkJLnhyZXMJCT0gMzIwLAkJLnlyZXMJCT0gMjQwLAogCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNjMwMCksCiAKLQkJLmxlZnRfbWFyZ2luCT0gNTIsCQkucmlnaHRfbWFyZ2luCT0gMjgsCi0JCS51cHBlcl9tYXJnaW4JPSA3LAkJLmxvd2VyX21hcmdpbgk9IDIsCi0JCS5oc3luY19sZW4JPSA5NiwJCS52c3luY19sZW4JPSA0LAorCQkubGVmdF9tYXJnaW4JPSAzNCwJCS5yaWdodF9tYXJnaW4JPSA0NiwKKwkJLnVwcGVyX21hcmdpbgk9IDcsCQkubG93ZXJfbWFyZ2luCT0gMTUsCisJCS5oc3luY19sZW4JPSA2NCwJCS52c3luY19sZW4JPSAxMiwKIAogCQkuc3luYwkJPSAwLAogCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKQEAgLTE0NCwxMiArMTQ1LDI5IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGF0ZXZrbGNkMTB4X2xjZGNfcG93ZXJfY29udHJvbChpbnQgb24pCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QSU5fUEIoMTUpLCBvbik7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGF0ZXZrbGNkMTB4X2luaXQodm9pZCkKIHsKLQlhdDMyX2FkZF9kZXZpY2VfYWM5N2MoMCwgJmFjOTdjMF9kYXRhKTsKKwkvKiBQQjE1IGlzIGNvbm5lY3RlZCB0byB0aGUgZW5hYmxlIGxpbmUgb24gdGhlIGJvb3N0IHJlZ3VsYXRvcgorCSAqIGNvbnRyb2xsaW5nIHRoZSBiYWNrbGlnaHQgZm9yIHRoZSBMQ0QgcGFuZWwuCisJICovCisJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQigxNSksIEFUMzJfR1BJT0ZfT1VUUFVUKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QSU5fUEIoMTUpLCAiYmFja2xpZ2h0Iik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUElOX1BCKDE1KSwgMCk7CisKKwlhdGV2a2xjZDEweF9sY2RjX2RhdGEuYXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbCA9CisJCWF0ZXZrbGNkMTB4X2xjZGNfcG93ZXJfY29udHJvbDsKIAogCWF0MzJfYWRkX2RldmljZV9sY2RjKDAsICZhdGV2a2xjZDEweF9sY2RjX2RhdGEsCi0JCQlmYm1lbV9zdGFydCwgZmJtZW1fc2l6ZSwgMSk7CisJCQlmYm1lbV9zdGFydCwgZmJtZW1fc2l6ZSwKKwkJCUFUTUVMX0xDRENfQUxUXzE4QklUIHwgQVRNRUxfTENEQ19QRV9EVkFMKTsKKworCWF0MzJfYWRkX2RldmljZV9hYzk3YygwLCAmYWM5N2MwX2RhdGEsIEFDOTdDX0JPVEgpOworCiAJcmV0dXJuIDA7CiB9CiBwb3N0Y29yZV9pbml0Y2FsbChhdGV2a2xjZDEweF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9zZXR1cC5jCmluZGV4IDA1ZDM3MjIuLjViMDIyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL3NldHVwLmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvc2V0dXAuYwpAQCAtNTYsMTMgKzU2LDggQEAKIHN0YXRpYyBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBtY2kwX2RhdGEgPSB7CiAJLnNsb3RbMF0gPSB7CiAJCS5idXNfd2lkdGgJPSA0LAotI2lmbmRlZiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYCiAJCS5kZXRlY3RfcGluCT0gR1BJT19QSU5fUEMoMjUpLAogCQkud3BfcGluCQk9IEdQSU9fUElOX1BFKDApLAotI2Vsc2UKLQkJLmRldGVjdF9waW4JPSBHUElPX1BJTl9OT05FLAotCQkud3BfcGluCQk9IEdQSU9fUElOX05PTkUsCi0jZW5kaWYKIAl9LAogfTsKIApAQCAtMTIzLDcgKzExOCw3IEBACiAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7Ci0JYXQzMl9tYXBfdXNhcnQoMSwgMCk7CS8qIFVTQVJUIDE6IC9kZXYvdHR5UzAsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDEsIDAsIDApOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMwLCBEQjkgKi8KIAlhdDMyX3NldHVwX3NlcmlhbF9jb25zb2xlKDApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMKaW5kZXggMWYzM2ExMC4uMmFkYzI2MSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDIuYwpAQCAtMjUyLDEyICsyNTIsMTIgQEAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7CiAjaWZkZWYJQ09ORklHX0JPQVJEX0FUU1RLMTAwWF9TVzJfQ1VTVE9NCi0JYXQzMl9tYXBfdXNhcnQoMCwgMSk7CS8qIFVTQVJUIDAvQjogL2Rldi90dHlTMSwgSVJEQSAqLworCWF0MzJfbWFwX3VzYXJ0KDAsIDEsIDApOwkvKiBVU0FSVCAwL0I6IC9kZXYvdHR5UzEsIElSREEgKi8KICNlbHNlCi0JYXQzMl9tYXBfdXNhcnQoMSwgMCk7CS8qIFVTQVJUIDEvQTogL2Rldi90dHlTMCwgREI5ICovCisJYXQzMl9tYXBfdXNhcnQoMSwgMCwgMCk7CS8qIFVTQVJUIDEvQTogL2Rldi90dHlTMCwgREI5ICovCiAjZW5kaWYKIAkvKiBVU0FSVCAyL3VudXNlZDogZXhwYW5zaW9uIGNvbm5lY3RvciAqLwotCWF0MzJfbWFwX3VzYXJ0KDMsIDIpOwkvKiBVU0FSVCAzL0M6IC9kZXYvdHR5UzIsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDMsIDIsIDApOwkvKiBVU0FSVCAzL0M6IC9kZXYvdHR5UzIsIERCOSAqLwogCiAJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDMuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDMuYwppbmRleCBiM2EyM2M4Li5mZjdlMjMyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAzLmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMy5jCkBAIC0xMTUsMTIgKzExNSwxMiBAQAogdm9pZCBfX2luaXQgc2V0dXBfYm9hcmQodm9pZCkKIHsKICNpZmRlZglDT05GSUdfQk9BUkRfQVRTVEsxMDBYX1NXMl9DVVNUT00KLQlhdDMyX21hcF91c2FydCgwLCAxKTsJLyogVVNBUlQgMC9COiAvZGV2L3R0eVMxLCBJUkRBICovCisJYXQzMl9tYXBfdXNhcnQoMCwgMSwgMCk7CS8qIFVTQVJUIDAvQjogL2Rldi90dHlTMSwgSVJEQSAqLwogI2Vsc2UKLQlhdDMyX21hcF91c2FydCgxLCAwKTsJLyogVVNBUlQgMS9BOiAvZGV2L3R0eVMwLCBEQjkgKi8KKwlhdDMyX21hcF91c2FydCgxLCAwLCAwKTsJLyogVVNBUlQgMS9BOiAvZGV2L3R0eVMwLCBEQjkgKi8KICNlbmRpZgogCS8qIFVTQVJUIDIvdW51c2VkOiBleHBhbnNpb24gY29ubmVjdG9yICovCi0JYXQzMl9tYXBfdXNhcnQoMywgMik7CS8qIFVTQVJUIDMvQzogL2Rldi90dHlTMiwgREI5ICovCisJYXQzMl9tYXBfdXNhcnQoMywgMiwgMCk7CS8qIFVTQVJUIDMvQzogL2Rldi90dHlTMiwgREI5ICovCiAKIAlhdDMyX3NldHVwX3NlcmlhbF9jb25zb2xlKDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jCmluZGV4IDI5YjM1YWMuLjY5YTlmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDQuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDA0LmMKQEAgLTEyMCwxMiArMTIwLDEyIEBACiB2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQogewogI2lmZGVmCUNPTkZJR19CT0FSRF9BVFNUSzEwMFhfU1cyX0NVU1RPTQotCWF0MzJfbWFwX3VzYXJ0KDAsIDEpOwkvKiBVU0FSVCAwL0I6IC9kZXYvdHR5UzEsIElSREEgKi8KKwlhdDMyX21hcF91c2FydCgwLCAxLCAwKTsJLyogVVNBUlQgMC9COiAvZGV2L3R0eVMxLCBJUkRBICovCiAjZWxzZQotCWF0MzJfbWFwX3VzYXJ0KDEsIDApOwkvKiBVU0FSVCAxL0E6IC9kZXYvdHR5UzAsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDEsIDAsIDApOwkvKiBVU0FSVCAxL0E6IC9kZXYvdHR5UzAsIERCOSAqLwogI2VuZGlmCiAJLyogVVNBUlQgMi91bnVzZWQ6IGV4cGFuc2lvbiBjb25uZWN0b3IgKi8KLQlhdDMyX21hcF91c2FydCgzLCAyKTsJLyogVVNBUlQgMy9DOiAvZGV2L3R0eVMyLCBEQjkgKi8KKwlhdDMyX21hcF91c2FydCgzLCAyLCAwKTsJLyogVVNBUlQgMy9DOiAvZGV2L3R0eVMyLCBEQjkgKi8KIAogCWF0MzJfc2V0dXBfc2VyaWFsX2NvbnNvbGUoMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL3NldHVwLmMKaW5kZXggNzQ1YzQwOC4uNDZjOWIwYSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9zZXR1cC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2ZhdnItMzIvc2V0dXAuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogCisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWJkYWMuaD4KKwogI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDEsNiArNDMsOSBAQAogLyogSW5pdGlhbGl6ZWQgYnkgYm9vdGxvYWRlci1zcGVjaWZpYyBzdGFydHVwIGNvZGUuICovCiBzdHJ1Y3QgdGFnICpib290bG9hZGVyX3RhZ3MgX19pbml0ZGF0YTsKIAorc3RhdGljIHN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSBfX2luaXRkYXRhIGFiZGFjMF9kYXRhID0geworfTsKKwogc3RydWN0IGV0aF9hZGRyIHsKIAl1OCBhZGRyWzZdOwogfTsKQEAgLTI0NSw3ICsyNTAsNyBAQAogCiB2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQogewotCWF0MzJfbWFwX3VzYXJ0KDMsIDApOwkvKiBVU0FSVCAzID0+IC9kZXYvdHR5UzAgKi8KKwlhdDMyX21hcF91c2FydCgzLCAwLCAwKTsJLyogVVNBUlQgMyA9PiAvZGV2L3R0eVMwICovCiAJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgwKTsKIH0KIApAQCAtMzI2LDcgKzMzMSw3IEBACiAKIAlzcGkxX2JvYXJkX2luZm9bMF0uaXJxID0gZ3Bpb190b19pcnEoR1BJT19QSU5fUEIoMykpOwogCi0Jc2V0X2FiZGFjX3JhdGUoYXQzMl9hZGRfZGV2aWNlX2FiZGFjKDApKTsKKwlzZXRfYWJkYWNfcmF0ZShhdDMyX2FkZF9kZXZpY2VfYWJkYWMoMCwgJmFiZGFjMF9kYXRhKSk7CiAKIAlhdDMyX2FkZF9kZXZpY2VfcHdtKDEgPDwgYXRtZWxfcHdtX2JsX3BkYXRhLnB3bV9jaGFubmVsKTsKIAlhdDMyX2FkZF9kZXZpY2Vfc3BpKDEsIHNwaTFfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGkxX2JvYXJkX2luZm8pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvc2V0dXAuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvc2V0dXAuYwppbmRleCA0ZDJmZTgyLi5kZDAwOTg3NSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9zZXR1cC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvc2V0dXAuYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgPG1hY2gvaW5pdC5oPgogI2luY2x1ZGUgPG1hY2gvcG9ydG11eC5oPgogCisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWM5N2MuaD4KKwogI2luY2x1ZGUgIi4uLy4uL21hY2gtYXQzMmFwL2Nsb2NrLmgiCiAjaW5jbHVkZSAiZmxhc2guaCIKIApAQCAtMTYzLDcgKzE2NSw3IEBACiAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7Ci0JYXQzMl9tYXBfdXNhcnQoMSwgMCk7CS8qIFVTQVJUIDE6IC9kZXYvdHR5UzAsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDEsIDAsIDApOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMwLCBEQjkgKi8KIAlhdDMyX3NldHVwX3NlcmlhbF9jb25zb2xlKDApOwogfQogCkBAIC0yMzMsNyArMjM1LDcgQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfaW5mbywgQVJSQVlfU0laRShpMmNfaW5mbykpOwogCiAjaWZkZWYgQ09ORklHX0JPQVJEX0hBTU1FUkhFQURfU05ECi0JYXQzMl9hZGRfZGV2aWNlX2FjOTdjKDAsICZhYzk3Y19kYXRhKTsKKwlhdDMyX2FkZF9kZXZpY2VfYWM5N2MoMCwgJmFjOTdjX2RhdGEsIEFDOTdDX0JPVEgpOwogI2VuZGlmCiAKIAkvKiBTZWxlY3QgdGhlIFRvdWNoc2NyZWVuIGludGVycnVwdCBwaW4gbW9kZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL0tjb25maWcgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTA0MzI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL0tjb25maWcKQEAgLTAsMCArMSw1IEBACisjIE1lcmlzYyBjdXN0b21pemF0aW9uCisKK2lmIEJPQVJEX01FUklTQworCitlbmRpZgkjIEJPQVJEX01FUklTQwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL01ha2VmaWxlIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGM3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkJCQkJCSs9IHNldHVwLm8gZmxhc2gubyBkaXNwbGF5Lm8gbWVyaXNjX3N5c2ZzLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9kaXNwbGF5LmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvZGlzcGxheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTU0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvZGlzcGxheS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBEaXNwbGF5IHNldHVwIGNvZGUgZm9yIHRoZSBNZXJpc2MgYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluc3NvbiBFbGVrdHJvbmlrIEFCCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSAibWVyaXNjLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1lcmlzY19mYl92aWRlb21vZGVbXSA9IHsKKwl7CisJCS5yZWZyZXNoCT0gNDQsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkubGVmdF9tYXJnaW4JPSA5NiwKKwkJLnJpZ2h0X21hcmdpbgk9IDk2LAorCQkudXBwZXJfbWFyZ2luCT0gMzQsCisJCS5sb3dlcl9tYXJnaW4JPSA4LAorCQkuaHN5bmNfbGVuCT0gNjQsCisJCS52c3luY19sZW4JPSA2NCwKKwkJLm5hbWUJCT0gIjY0MHg0ODAgQCA0NCIsCisJCS5waXhjbG9jawk9IEtIWjJQSUNPUygyNTE4MCksCisJCS5zeW5jCQk9IDAsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIG1lcmlzY19mYl9tb25zcGVjcyA9IHsKKwkubWFudWZhY3R1cmVyCT0gIkt5byIsCisJLm1vbml0b3IJPSAiVENHMDc1VkcyQUQiLAorCS5tb2RlZGIJCT0gbWVyaXNjX2ZiX3ZpZGVvbW9kZSwKKwkubW9kZWRiX2xlbgk9IEFSUkFZX1NJWkUobWVyaXNjX2ZiX3ZpZGVvbW9kZSksCisJLmhmbWluCQk9IDMwMDAwLAorCS5oZm1heAkJPSAzMzMzMywKKwkudmZtaW4JCT0gNjAsCisJLnZmbWF4CQk9IDkwLAorCS5kY2xrbWF4CT0gMzAwMDAwMDAsCit9OworCitzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBtZXJpc2NfbGNkY19kYXRhID0geworCS5kZWZhdWx0X2JwcAkJPSAyNCwKKwkuZGVmYXVsdF9kbWFjb24JCT0gQVRNRUxfTENEQ19ETUFFTiB8IEFUTUVMX0xDRENfRE1BMkRFTiwKKwkuZGVmYXVsdF9sY2Rjb24yCT0gKEFUTUVMX0xDRENfRElTVFlQRV9URlQKKwkJCQkgICB8IEFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRQorCQkJCSAgIHwgQVRNRUxfTENEQ19NRU1PUl9CSUcpLAorCS5kZWZhdWx0X21vbnNwZWNzCT0gJm1lcmlzY19mYl9tb25zcGVjcywKKwkuZ3VhcmRfdGltZQkJPSAyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWVyaXNjX2Rpc3BsYXlfaW5pdCh2b2lkKQoreworCWF0MzJfYWRkX2RldmljZV9sY2RjKDAsICZtZXJpc2NfbGNkY19kYXRhLCBmYm1lbV9zdGFydCwKKwkJCSAgICAgZmJtZW1fc2l6ZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChtZXJpc2NfZGlzcGxheV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9mbGFzaC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4NTZmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9mbGFzaC5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogTWVyaXNjIGJvYXJkLXNwZWNpZmljIGZsYXNoIGluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbnNzb24gRWxla3Ryb25payBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3NtYy5oPgorCisvKiBXaWxsIGJlIHRyYW5zbGF0ZWQgdG8gdW5pdHMgb2YgMTQuMyBucywgcm91bmRlZCB1cCAqLworc3RhdGljIHN0cnVjdCBzbWNfdGltaW5nIGZsYXNoX3RpbWluZyBfX2luaXRkYXRhID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAxICogMTQsCisJLm5yZF9zZXR1cAkJPSA1ICogMTQsCisJLm5jc193cml0ZV9zZXR1cAk9IDEgKiAxNCwKKwkubndlX3NldHVwCQk9IDIgKiAxNCwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAxMiAqIDE0LAorCS5ucmRfcHVsc2UJCT0gNyAqIDE0LAorCS5uY3Nfd3JpdGVfcHVsc2UJPSA4ICogMTQsCisJLm53ZV9wdWxzZQkJPSA0ICogMTQsCisKKwkucmVhZF9jeWNsZQkJPSAxNCAqIDE0LAorCS53cml0ZV9jeWNsZQkJPSAxMCAqIDE0LAorfTsKKworc3RhdGljIHN0cnVjdCBzbWNfY29uZmlnIGZsYXNoX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5idXNfd2lkdGgJPSAyLAorCS5ucmRfY29udHJvbGxlZAk9IDEsCisJLm53ZV9jb250cm9sbGVkCT0gMSwKKwkuYnl0ZV93cml0ZQk9IDEsCisJLnRkZl9jeWNsZXMJPSAzLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGZsYXNoXzBfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJib290IiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSAweDAwMDYwMDAwLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CQk9IDB4MDAwNjAwMDAsCisJCS5zaXplCQk9IDB4MDAyMDAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gMCwKKwl9LAorCXsKKwkJLm5hbWUJCT0gInJvb3QiLAorCQkub2Zmc2V0CQk9IDB4MDAyNjAwMDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGZsYXNoXzFfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICIybmRmbGFzaCIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBmbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gMiwKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShmbGFzaF8wX3BhcnRzKSwKKwkJLnBhcnRzCQk9IGZsYXNoXzBfcGFydHMsCisJfSwKKwl7CisJCS53aWR0aAkJPSAyLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGZsYXNoXzFfcGFydHMpLAorCQkucGFydHMJCT0gZmxhc2hfMV9wYXJ0cywKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlW10gPSB7CisJeworCQkuc3RhcnQJCT0gMHgwMDAwMDAwMCwKKwkJLmVuZAkJPSAweDAzZmZmZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSAweDA0MDAwMDAwLAorCQkuZW5kCQk9IDB4MDdmZmZmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlW10gPSB7CisJeworCQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJCS5pZAkJPSAwLAorCQkucmVzb3VyY2UJPSAmZmxhc2hfcmVzb3VyY2VbMF0sCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLmRldgkJPSB7CisJCQkucGxhdGZvcm1fZGF0YQk9ICZmbGFzaF9kYXRhWzBdLAorCQl9LAorCX0sCisJeworCQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJCS5pZAkJPSAxLAorCQkucmVzb3VyY2UJPSAmZmxhc2hfcmVzb3VyY2VbMV0sCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLmRldgkJPSB7CisJCQkucGxhdGZvcm1fZGF0YQk9ICZmbGFzaF9kYXRhWzFdLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtZXJpc2NfZmxhc2hfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJc21jX3NldF90aW1pbmcoJmZsYXNoX2NvbmZpZywgJmZsYXNoX3RpbWluZyk7CisKKwlyZXQgPSBzbWNfc2V0X2NvbmZpZ3VyYXRpb24oMCwgJmZsYXNoX2NvbmZpZyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNZXJpc2M6IGZhaWxlZCB0byBzZXQgTk9SIGZsYXNoIHRpbWluZyAjMFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc21jX3NldF9jb25maWd1cmF0aW9uKDQsICZmbGFzaF9jb25maWcpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVyaXNjOiBmYWlsZWQgdG8gc2V0IE5PUiBmbGFzaCB0aW1pbmcgIzFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZmxhc2hfZGV2aWNlWzBdKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmZsYXNoX2RldmljZVsxXSk7CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwobWVyaXNjX2ZsYXNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL21lcmlzYy5oIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL21lcmlzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZmZiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvbWVyaXNjLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIE1lcmlzYyBleHBvcnRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbnNzb24gRWxla3Ryb25payBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BUkNIX0FWUjMyX0JPQVJEU19NRVJJU0NfTUVSSVNDX0gKKyNkZWZpbmUgX19BUkNIX0FWUjMyX0JPQVJEU19NRVJJU0NfTUVSSVNDX0gKKworY29uc3QgY2hhciAqbWVyaXNjX3JldmlzaW9uKHZvaWQpOworY29uc3QgY2hhciAqbWVyaXNjX21vZGVsKHZvaWQpOworCitleHRlcm4gc3RydWN0IGNsYXNzIG1lcmlzY19jbGFzczsKKworI2VuZGlmIC8qIF9fQVJDSF9BVlIzMl9CT0FSRFNfTUVSSVNDX01FUklTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvbWVyaXNjX3N5c2ZzLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvbWVyaXNjX3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0MzFmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9tZXJpc2Nfc3lzZnMuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogTWVyaXNjIHN5c2ZzIGV4cG9ydHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluc3NvbiBFbGVrdHJvbmlrIEFCCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSAibWVyaXNjLmgiCisKK3N0YXRpYyBzc2l6ZV90IG1lcmlzY19tb2RlbF9zaG93KHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJldCA9IDA7CisKKwlzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtZXJpc2NfbW9kZWwoKSk7CisJcmV0ID0gc3RybGVuKGJ1ZikgKyAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgbWVyaXNjX3JldmlzaW9uX3Nob3coc3RydWN0IGNsYXNzICpjbGFzcywgY2hhciAqYnVmKQoreworCXNzaXplX3QgcmV0ID0gMDsKKworCXNwcmludGYoYnVmLCAiJXNcbiIsIG1lcmlzY19yZXZpc2lvbigpKTsKKwlyZXQgPSBzdHJsZW4oYnVmKSArIDE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSBtZXJpc2NfY2xhc3NfYXR0cnNbXSA9IHsKKwlfX0FUVFIobW9kZWwsIFNfSVJVR08sIG1lcmlzY19tb2RlbF9zaG93LCBOVUxMKSwKKwlfX0FUVFIocmV2aXNpb24sIFNfSVJVR08sIG1lcmlzY19yZXZpc2lvbl9zaG93LCBOVUxMKSwKKwlfX0FUVFJfTlVMTCwKK307CisKK3N0cnVjdCBjbGFzcyBtZXJpc2NfY2xhc3MgPSB7CisJLm5hbWUgPQkJIm1lcmlzYyIsCisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmNsYXNzX2F0dHJzID0JbWVyaXNjX2NsYXNzX2F0dHJzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWVyaXNjX3N5c2ZzX2luaXQodm9pZCkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gY2xhc3NfcmVnaXN0ZXIoJm1lcmlzY19jbGFzcyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwobWVyaXNjX3N5c2ZzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2Mvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGIzMDBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL3NldHVwLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBCb2FyZC1zcGVjaWZpYyBzZXR1cCBjb2RlIGZvciB0aGUgTWVyaXNjCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbnNzb24gRWxla3Ryb25payBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1lbC1tY2kuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2F0MzJhcDcwMHguaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bWFjaC9pbml0Lmg+CisjaW5jbHVkZSA8bWFjaC9wb3J0bXV4Lmg+CisKKyNpbmNsdWRlICJtZXJpc2MuaCIKKworLyogSG9sZHMgdGhlIGF1dG9kZXRlY3RlZCBib2FyZCBtb2RlbCBhbmQgcmV2aXNpb24gKi8KK3N0YXRpYyBpbnQgbWVyaXNjX2JvYXJkX2lkOworCisvKiBJbml0aWFsaXplZCBieSBib290bG9hZGVyLXNwZWNpZmljIHN0YXJ0dXAgY29kZS4gKi8KK3N0cnVjdCB0YWcgKmJvb3Rsb2FkZXJfdGFncyBfX2luaXRkYXRhOworCisvKiBPc2NpbGxhdG9yIGZyZXF1ZW5jaWVzLiBUaGVzZSBhcmUgYm9hcmQgc3BlY2lmaWMgKi8KK3Vuc2lnbmVkIGxvbmcgYXQzMl9ib2FyZF9vc2NfcmF0ZXNbM10gPSB7CisJWzBdCT0gMzI3NjgsCS8qIDMyLjc2OCBrSHogb24gUlRDIG9zYyAqLworCVsxXQk9IDIwMDAwMDAwLAkvKiAyMCBNSHogb24gb3NjMCAqLworCVsyXQk9IDEyMDAwMDAwLAkvKiAxMiBNSHogb24gb3NjMSAqLworfTsKKworc3RydWN0IGV0aF9hZGRyIHsKKwl1OCBhZGRyWzZdOworfTsKKworc3RhdGljIHN0cnVjdCBldGhfYWRkciBfX2luaXRkYXRhIGh3X2FkZHJbMl07CitzdGF0aWMgc3RydWN0IGV0aF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZXRoX2RhdGFbMl07CisKK3N0YXRpYyBpbnQgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZV9QQjI2KHZvaWQpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPX1BJTl9QQigyNikpOworfQorCitzdGF0aWMgaW50IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGVfUEIyOCh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEIoMjgpKTsKK30KKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBhZHM3ODQ2X2RhdGEgPSB7CisJLm1vZGVsCQkJCT0gNzg0NiwKKwkudnJlZl9kZWxheV91c2VjcwkJPSAxMDAsCisJLnZyZWZfbXYJCQk9IDAsCisJLmtlZXBfdnJlZl9vbgkJCT0gMCwKKwkuc2V0dGxlX2RlbGF5X3VzZWNzCQk9IDE1MCwKKwkucGVuaXJxX3JlY2hlY2tfZGVsYXlfdXNlY3MJPSAxLAorCS54X3BsYXRlX29obXMJCQk9IDgwMCwKKwkuZGVib3VuY2VfcmVwCQkJPSA0LAorCS5kZWJvdW5jZV9tYXgJCQk9IDEwLAorCS5kZWJvdW5jZV90b2wJCQk9IDUwLAorCS5nZXRfcGVuZG93bl9zdGF0ZQkJPSBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlX1BCMjYsCisJLmZpbHRlcl9pbml0CQkJPSBOVUxMLAorCS5maWx0ZXIJCQkJPSBOVUxMLAorCS5maWx0ZXJfY2xlYW51cAkJCT0gTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzcGkwX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKKwkJLm1heF9zcGVlZF9oegk9IDMyNTAwMDAsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5idXNfbnVtCT0gMCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYWRzNzg0Nl9kYXRhLAorCQkubW9kZQkJPSBTUElfTU9ERV8wLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMF9kYXRhID0geworCS5zbG90WzBdID0geworCQkuYnVzX3dpZHRoCT0gNCwKKwkJLmRldGVjdF9waW4JPSBHUElPX1BJTl9QRSgxOSksCisJCS53cF9waW4JCT0gR1BJT19QSU5fUEUoMjApLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfZXRoZXJuZXQoc3RydWN0IHRhZyAqdGFnKQoreworCWludCBpOworCisJaSA9IHRhZy0+dS5ldGhlcm5ldC5tYWNfaW5kZXg7CisJaWYgKGkgPCBBUlJBWV9TSVpFKGh3X2FkZHIpKSB7CisJCW1lbWNweShod19hZGRyW2ldLmFkZHIsIHRhZy0+dS5ldGhlcm5ldC5od19hZGRyZXNzLAorCQkgICAgICAgc2l6ZW9mKGh3X2FkZHJbaV0uYWRkcikpOworCX0KKworCXJldHVybiAwOworfQorX190YWd0YWJsZShBVEFHX0VUSEVSTkVULCBwYXJzZV90YWdfZXRoZXJuZXQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2h3X2FkZHIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY29uc3QgdTggKmFkZHI7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKnBjbGs7CisKKwlpZiAoIXJlcykKKwkJcmV0dXJuOworCisJaWYgKHBkZXYtPmlkID49IEFSUkFZX1NJWkUoaHdfYWRkcikpCisJCXJldHVybjsKKworCWFkZHIgPSBod19hZGRyW3BkZXYtPmlkXS5hZGRyOworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkKKwkJcmV0dXJuOworCisJcmVncyA9ICh2b2lkIF9faW9tZW0gX19mb3JjZSAqKXJlcy0+c3RhcnQ7CisJcGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInBjbGsiKTsKKwlpZiAoIXBjbGspCisJCXJldHVybjsKKworCWNsa19lbmFibGUocGNsayk7CisJX19yYXdfd3JpdGVsKChhZGRyWzNdIDw8IDI0KSB8IChhZGRyWzJdIDw8IDE2KQorCQkgICAgIHwgKGFkZHJbMV0gPDwgOCkgfCBhZGRyWzBdLCByZWdzICsgMHg5OCk7CisJX19yYXdfd3JpdGVsKChhZGRyWzVdIDw8IDgpIHwgYWRkcls0XSwgcmVncyArIDB4OWMpOworCWNsa19kaXNhYmxlKHBjbGspOworCWNsa19wdXQocGNsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBpMmNfZ3Bpb19kYXRhID0geworCS5zZGFfcGluCQk9IEdQSU9fUElOX1BBKDYpLAorCS5zY2xfcGluCQk9IEdQSU9fUElOX1BBKDcpLAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDEsCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKKwkudWRlbGF5CQkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2dwaW9fZGV2aWNlID0geworCS5uYW1lCT0gImkyYy1ncGlvIiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19ncGlvX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBpMmNfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKQorCX0sCit9OworCisjaWZkZWYgQ09ORklHX0xFRFNfQVRNRUxfUFdNCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHN0a19wd21fbGVkW10gPSB7CisJeworCQkubmFtZQk9ICJiYWNrbGlnaHQiLAorCQkuZ3Bpbwk9IDAsCQkvKiBQV00gY2hhbm5lbCAwIChMQ0QgYmFja2xpZ2h0KSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgc3RrX3B3bV9sZWRfZGF0YSA9IHsKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHN0a19wd21fbGVkKSwKKwkubGVkcwkJPSBzdGtfcHdtX2xlZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0a19wd21fbGVkX2RldiA9IHsKKwkubmFtZQk9ICJsZWRzLWF0bWVsLXB3bSIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3RrX3B3bV9sZWRfZGF0YSwKKwl9LAorfTsKKyNlbmRpZgorCitjb25zdCBjaGFyICptZXJpc2NfbW9kZWwodm9pZCkKK3sKKwlzd2l0Y2ggKG1lcmlzY19ib2FyZF9pZCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJldHVybiAiNTAwLTAxIjsKKwljYXNlIDI6CisJCXJldHVybiAiQlQiOworCWRlZmF1bHQ6CisJCXJldHVybiAiVW5rbm93biI7CisJfQorfQorCitjb25zdCBjaGFyICptZXJpc2NfcmV2aXNpb24odm9pZCkKK3sKKwlzd2l0Y2ggKG1lcmlzY19ib2FyZF9pZCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICJCIjsKKwljYXNlIDE6CisJCXJldHVybiAiRCI7CisJY2FzZSAyOgorCQlyZXR1cm4gIkEiOworCWRlZmF1bHQ6CisJCXJldHVybiAiVW5rbm93biI7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZXRlY3RfbWVyaXNjX2JvYXJkX2lkKHZvaWQpCit7CisJLyogQm9hcmQgSUQgcGlucyBNVVNUIGJlIHNldCBhcyBpbnB1dCBvciB0aGUgYm9hcmQgbWF5IGJlIGRhbWFnZWQgKi8KKwlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BBKDI0KSwgQVQzMl9HUElPRl9QVUxMVVApOworCWF0MzJfc2VsZWN0X2dwaW8oR1BJT19QSU5fUEEoMjUpLCBBVDMyX0dQSU9GX1BVTExVUCk7CisJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQSgyNiksIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKwlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BBKDI3KSwgQVQzMl9HUElPRl9QVUxMVVApOworCisJbWVyaXNjX2JvYXJkX2lkID0gIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fUElOX1BBKDI0KSkgKworCQkhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEEoMjUpKSAqIDIgKworCQkhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEEoMjYpKSAqIDQgKworCQkhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEEoMjcpKSAqIDg7Cit9CisKK3ZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCit7CisJYXQzMl9tYXBfdXNhcnQoMCwgMCwgMCk7CisJYXQzMl9tYXBfdXNhcnQoMSwgMSwgMCk7CisJYXQzMl9tYXBfdXNhcnQoMywgMywgMCk7CisJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgxKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbWVyaXNjX2luaXQodm9pZCkKK3sKKwlkZXRlY3RfbWVyaXNjX2JvYXJkX2lkKCk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkJPQVJEOiBNZXJpc2MgJXMgcmV2aXNpb24gJXNcbiIsIG1lcmlzY19tb2RlbCgpLAorCSAgICAgICBtZXJpc2NfcmV2aXNpb24oKSk7CisKKwkvKiBSZXNlcnZlIHBpbnMgZm9yIFNEUkFNICovCisJYXQzMl9yZXNlcnZlX3BpbihHUElPX1BJT0VfQkFTRSwgQVRNRUxfRUJJX1BFX0RBVEFfQUxMIHwgKDEgPDwgMjYpKTsKKworCWlmIChtZXJpc2NfYm9hcmRfaWQgPj0gMSkKKwkJYXQzMl9tYXBfdXNhcnQoMiwgMiwgMCk7CisKKwlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMCk7CisJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDEpOworCWlmIChtZXJpc2NfYm9hcmRfaWQgPj0gMSkKKwkJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDIpOworCWF0MzJfYWRkX2RldmljZV91c2FydCgzKTsKKwlzZXRfaHdfYWRkcihhdDMyX2FkZF9kZXZpY2VfZXRoKDAsICZldGhfZGF0YVswXSkpOworCisJLyogQURTNzg0NiBQRU5JUlEgKi8KKwlpZiAobWVyaXNjX2JvYXJkX2lkID09IDApIHsKKwkJYWRzNzg0Nl9kYXRhLmdldF9wZW5kb3duX3N0YXRlID0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZV9QQjI2OworCQlhdDMyX3NlbGVjdF9wZXJpcGgoR1BJT19QSU9CX0JBU0UsIDEgPDwgMjYsCisJCQkJICAgR1BJT19QRVJJUEhfQSwgQVQzMl9HUElPRl9QVUxMVVApOworCQlzcGkwX2JvYXJkX2luZm9bMF0uaXJxID0gQVQzMl9FWFRJTlQoMSk7CisJfSBlbHNlIHsKKwkJYWRzNzg0Nl9kYXRhLmdldF9wZW5kb3duX3N0YXRlID0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZV9QQjI4OworCQlhdDMyX3NlbGVjdF9wZXJpcGgoR1BJT19QSU9CX0JBU0UsIDEgPDwgMjgsIEdQSU9fUEVSSVBIX0EsCisJCQkJICAgQVQzMl9HUElPRl9QVUxMVVApOworCQlzcGkwX2JvYXJkX2luZm9bMF0uaXJxID0gQVQzMl9FWFRJTlQoMyk7CisJfQorCisJLyogQURTNzg0NiBidXN5IHBpbiAqLworCWF0MzJfc2VsZWN0X2dwaW8oR1BJT19QSU5fUEEoNCksIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKworCWF0MzJfYWRkX2RldmljZV9zcGkoMCwgc3BpMF9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKHNwaTBfYm9hcmRfaW5mbykpOworCisJYXQzMl9hZGRfZGV2aWNlX21jaSgwLCAmbWNpMF9kYXRhKTsKKworI2lmZGVmIENPTkZJR19MRURTX0FUTUVMX1BXTQorCWF0MzJfYWRkX2RldmljZV9wd20oKDEgPDwgMCkgfCAoMSA8PCAyKSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzdGtfcHdtX2xlZF9kZXYpOworI2Vsc2UKKwlhdDMyX2FkZF9kZXZpY2VfcHdtKCgxIDw8IDIpKTsKKyNlbmRpZgorCisJYXQzMl9zZWxlY3RfZ3BpbyhpMmNfZ3Bpb19kYXRhLnNkYV9waW4sCisJCUFUMzJfR1BJT0ZfTVVMVElEUlYgfCBBVDMyX0dQSU9GX09VVFBVVCB8IEFUMzJfR1BJT0ZfSElHSCk7CisJYXQzMl9zZWxlY3RfZ3BpbyhpMmNfZ3Bpb19kYXRhLnNjbF9waW4sCisJCUFUMzJfR1BJT0ZfTVVMVElEUlYgfCBBVDMyX0dQSU9GX09VVFBVVCB8IEFUMzJfR1BJT0ZfSElHSCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpMmNfZ3Bpb19kZXZpY2UpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjX2luZm8sIEFSUkFZX1NJWkUoaTJjX2luZm8pKTsKKworCXJldHVybiAwOworfQorcG9zdGNvcmVfaW5pdGNhbGwobWVyaXNjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9zZXR1cC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9zZXR1cC5jCmluZGV4IDJiNThkNjEuLmMxYjIxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL21pbWMyMDAvc2V0dXAuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL3NldHVwLmMKQEAgLTE3NSwxMCArMTc1LDEwIEBACiAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7Ci0JYXQzMl9tYXBfdXNhcnQoMCwgMCk7CS8qIFVTQVJUIDA6IC9kZXYvdHR5UzAgKFRUTCAtLT4gQWx0ZXJhKSAqLwotCWF0MzJfbWFwX3VzYXJ0KDEsIDEpOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMxIChSUzIzMikgKi8KLQlhdDMyX21hcF91c2FydCgyLCAyKTsJLyogVVNBUlQgMjogL2Rldi90dHlTMiAoUlM0ODUpICovCi0JYXQzMl9tYXBfdXNhcnQoMywgMyk7CS8qIFVTQVJUIDM6IC9kZXYvdHR5UzMgKFJTNDIyIE11bHRpZHJvcCkgKi8KKwlhdDMyX21hcF91c2FydCgwLCAwLCAwKTsJLyogVVNBUlQgMDogL2Rldi90dHlTMCAoVFRMIC0tPiBBbHRlcmEpICovCisJYXQzMl9tYXBfdXNhcnQoMSwgMSwgMCk7CS8qIFVTQVJUIDE6IC9kZXYvdHR5UzEgKFJTMjMyKSAqLworCWF0MzJfbWFwX3VzYXJ0KDIsIDIsIDApOwkvKiBVU0FSVCAyOiAvZGV2L3R0eVMyIChSUzQ4NSkgKi8KKwlhdDMyX21hcF91c2FydCgzLCAzLCAwKTsJLyogVVNBUlQgMzogL2Rldi90dHlTMyAoUlM0MjIgTXVsdGlkcm9wKSAqLwogfQogCiBzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgaTJjX2dwaW9fZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9tZXJpc2NfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL21lcmlzY19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1NTRkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9tZXJpc2NfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTIzNyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMQorIyBXZWQgTWFyIDI1IDE0OjA2OjE1IDIwMDkKKyMKK0NPTkZJR19BVlIzMj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTEKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUgYW5kIGZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19TVUJBUkNIX0FWUjMyQj15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QRVJGT1JNQU5DRV9DT1VOVEVSUz15CitDT05GSUdfUExBVEZPUk1fQVQzMkFQPXkKK0NPTkZJR19DUFVfQVQzMkFQNzAwWD15CitDT05GSUdfQ1BVX0FUMzJBUDcwMDA9eQorIyBDT05GSUdfQk9BUkRfQVRTVEsxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0FUTkdXMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0hBTU1FUkhFQUQgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfRkFWUl8zMiBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9NSU1DMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9NRVJJU0M9eQorQ09ORklHX0xPQURFUl9VX0JPT1Q9eQorCisjCisjIEF0bWVsIEFWUjMyIEFQIG9wdGlvbnMKKyMKK0NPTkZJR19BUDcwMFhfMzJfQklUX1NNQz15CisjIENPTkZJR19BUDcwMFhfMTZfQklUX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUDcwMFhfOF9CSVRfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FEX0FERFJFU1M9MHgxMDAwMDAwMAorQ09ORklHX0VOVFJZX0FERFJFU1M9MHg5MDAwMDAwMAorQ09ORklHX1BIWVNfT0ZGU0VUPTB4MTAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUVVJQ0tMSVNUPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9CT09UTUVNX05PREUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVZFX01FTU9SWV9QUkVTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfTk9ERV9NRU1NQVBfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTk1JX0RFQlVHR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19DTURMSU5FPSIiCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD15CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKKyMgQ09ORklHX0lQX1BJTVNNX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPXkKK0NPTkZJR19JTkVUX0VTUD15CitDT05GSUdfSU5FVF9JUENPTVA9eQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9eQorQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19DQU49eQorQ09ORklHX0NBTl9SQVc9eQorQ09ORklHX0NBTl9CQ009eQorCisjCisjIENBTiBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfQ0FOX1ZDQU4gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQUJTRU5UPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorQ09ORklHX01URF9CTE9DSzJNVEQ9eQorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorQ09ORklHX0FUTUVMX1BXTT15CisjIENPTkZJR19BVE1FTF9UQ0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUxfU1NDPXkKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9VSU5QVVQ9eQorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorIyBDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlMgaXMgbm90IHNldAorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0FUTUVMPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0FUTUVMX1BEQz15CisjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfR1BJTz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FUTUVMPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorQ09ORklHX1NQSV9TUElERVY9eQorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMzJBUDcwMFhfV0RUIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BVE1FTD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVE1FTE1DST15CitDT05GSUdfTU1DX0FUTUVMTUNJX0RNQT15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKK0NPTkZJR19MRURTX0FUTUVMX1BXTT15CisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisjIENPTkZJR19MRURTX1RSSUdHRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUENGODU2Mz15CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0FUMzJBUDcwMFggaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCitDT05GSUdfRFdfRE1BQz15CitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKyMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVUlPPXkKKyMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QRFJWX0dFTklSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCAyNjczNTQzLi4wMTViYzc1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMjAsMTUgKzIwLDQgQEAKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZGVmaW5lIEhBUkRJUlFfQklUUwkxMgotCi0vKgotICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUKLSAqIHNwYWNlIGZvciBwb3RlbnRpYWxseSBhbGwgSVJRIHNvdXJjZXMgaW4gdGhlIHN5c3RlbQotICogbmVzdGluZyBvbiBhIHNpbmdsZSBDUFU6Ci0gKi8KLSNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTlJfSVJRUwotIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKLSNlbmRpZgotCiAjZW5kaWYgLyogX19BU01fQVZSMzJfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNDNhZTU1NS4uMWJiZTFkYSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3Byb2Nlc3MuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOwogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCmluZGV4IDNmYmZkMWUuLjdjYzY1MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSA8bWFjaC9wb3J0bXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CiAKKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYmRhYy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFjOTdjLmg+CisKICNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtOTYzLDU2ICs5NjYsNjggQEAKIERFRklORV9ERVZfREFUQShhdG1lbF91c2FydCwgMyk7CiBERVZfQ0xLKHVzYXJ0LCBhdG1lbF91c2FydDMsIHBiYSwgNik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnMoaW50IGZsYWdzKQogewogCXUzMiBwaW5fbWFzayA9ICgxIDw8IDgpIHwgKDEgPDwgOSk7IC8qIFJYRCAmIFRYRCAqLworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX1JUUykJcGluX21hc2sgfD0gKDEgPDwgNik7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ1RTKQlwaW5fbWFzayB8PSAoMSA8PCA3KTsKKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9DTEspCXBpbl9tYXNrIHw9ICgxIDw8IDEwKTsKIAogCXNlbGVjdF9wZXJpcGhlcmFsKFBJT0EsIHBpbl9tYXNrLCBQRVJJUEhfQiwgQVQzMl9HUElPRl9QVUxMVVApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKGludCBmbGFncykKIHsKIAl1MzIgcGluX21hc2sgPSAoMSA8PCAxNykgfCAoMSA8PCAxOCk7IC8qIFJYRCAmIFRYRCAqLworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX1JUUykJcGluX21hc2sgfD0gKDEgPDwgMTkpOworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX0NUUykJcGluX21hc2sgfD0gKDEgPDwgMjApOworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX0NMSykJcGluX21hc2sgfD0gKDEgPDwgMTYpOwogCiAJc2VsZWN0X3BlcmlwaGVyYWwoUElPQSwgcGluX21hc2ssIFBFUklQSF9BLCBBVDMyX0dQSU9GX1BVTExVUCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnMoaW50IGZsYWdzKQogewogCXUzMiBwaW5fbWFzayA9ICgxIDw8IDI2KSB8ICgxIDw8IDI3KTsgLyogUlhEICYgVFhEICovCisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfUlRTKQlwaW5fbWFzayB8PSAoMSA8PCAzMCk7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ1RTKQlwaW5fbWFzayB8PSAoMSA8PCAyOSk7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ0xLKQlwaW5fbWFzayB8PSAoMSA8PCAyOCk7CiAKIAlzZWxlY3RfcGVyaXBoZXJhbChQSU9CLCBwaW5fbWFzaywgUEVSSVBIX0IsIEFUMzJfR1BJT0ZfUFVMTFVQKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDNfcGlucyh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDNfcGlucyhpbnQgZmxhZ3MpCiB7CiAJdTMyIHBpbl9tYXNrID0gKDEgPDwgMTgpIHwgKDEgPDwgMTcpOyAvKiBSWEQgJiBUWEQgKi8KKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9SVFMpCXBpbl9tYXNrIHw9ICgxIDw8IDE2KTsKKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9DVFMpCXBpbl9tYXNrIHw9ICgxIDw8IDE1KTsKKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9DTEspCXBpbl9tYXNrIHw9ICgxIDw8IDE5KTsKIAogCXNlbGVjdF9wZXJpcGhlcmFsKFBJT0IsIHBpbl9tYXNrLCBQRVJJUEhfQiwgQVQzMl9HUElPRl9QVUxMVVApOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDMyX3VzYXJ0c1s0XTsKIAotdm9pZCBfX2luaXQgYXQzMl9tYXBfdXNhcnQodW5zaWduZWQgaW50IGh3X2lkLCB1bnNpZ25lZCBpbnQgbGluZSkKK3ZvaWQgX19pbml0IGF0MzJfbWFwX3VzYXJ0KHVuc2lnbmVkIGludCBod19pZCwgdW5zaWduZWQgaW50IGxpbmUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCiAJc3dpdGNoIChod19pZCkgewogCWNhc2UgMDoKIAkJcGRldiA9ICZhdG1lbF91c2FydDBfZGV2aWNlOwotCQljb25maWd1cmVfdXNhcnQwX3BpbnMoKTsKKwkJY29uZmlndXJlX3VzYXJ0MF9waW5zKGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlwZGV2ID0gJmF0bWVsX3VzYXJ0MV9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV91c2FydDFfcGlucygpOworCQljb25maWd1cmVfdXNhcnQxX3BpbnMoZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIDI6CiAJCXBkZXYgPSAmYXRtZWxfdXNhcnQyX2RldmljZTsKLQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKCk7CisJCWNvbmZpZ3VyZV91c2FydDJfcGlucyhmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgMzoKIAkJcGRldiA9ICZhdG1lbF91c2FydDNfZGV2aWNlOwotCQljb25maWd1cmVfdXNhcnQzX3BpbnMoKTsKKwkJY29uZmlndXJlX3VzYXJ0M19waW5zKGZsYWdzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwpAQCAtMTc1Myw3ICsxNzY4LDcgQEAKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemVvZih1c2JhX2RhdGEpKSkKIAkJZ290byBvdXRfZnJlZV9wZGV2OwogCi0JaWYgKGRhdGEtPnZidXNfcGluID49IDApCisJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+dmJ1c19waW4pKQogCQlhdDMyX3NlbGVjdF9ncGlvKGRhdGEtPnZidXNfcGluLCAwKTsKIAogCXVzYmEwX3BjbGsuZGV2ID0gJnBkZXYtPmRldjsKQEAgLTE5ODAsMTEgKzE5OTUsMTQgQEAKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdAotYXQzMl9hZGRfZGV2aWNlX2FjOTdjKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCithdDMyX2FkZF9kZXZpY2VfYWM5N2ModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgX2RhdGE7Ci0JdTMyIHBpbl9tYXNrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OworCXN0cnVjdCBkd19kbWFfc2xhdmUJCSpyeF9kd3M7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQkJKnR4X2R3czsKKwlzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YQlfZGF0YTsKKwl1MzIJCQkJcGluX21hc2s7CiAKIAlpZiAoaWQgIT0gMCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xOTk1LDM3ICsyMDEzLDUyIEBACiAKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgYXRtZWxfYWM5N2MwX3Jlc291cmNlLAogCQkJCUFSUkFZX1NJWkUoYXRtZWxfYWM5N2MwX3Jlc291cmNlKSkpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CiAKIAlpZiAoIWRhdGEpIHsKIAkJZGF0YSA9ICZfZGF0YTsKIAkJbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSkpOwotCQlkYXRhLT5yZXNldF9waW4gPSBHUElPX1BJTl9OT05FOworCQlkYXRhLT5yZXNldF9waW4gPSAtRU5PREVWOwogCX0KIAotCWRhdGEtPmRtYV9yeF9wZXJpcGhfaWQgPSAzOwotCWRhdGEtPmRtYV90eF9wZXJpcGhfaWQgPSA0OwotCWRhdGEtPmRtYV9jb250cm9sbGVyX2lkID0gMDsKKwlyeF9kd3MgPSAmZGF0YS0+cnhfZHdzOworCXR4X2R3cyA9ICZkYXRhLT50eF9kd3M7CisKKwkvKiBDaGVjayBpZiBETUEgc2xhdmUgaW50ZXJmYWNlIGZvciBjYXB0dXJlIHNob3VsZCBiZSBjb25maWd1cmVkLiAqLworCWlmIChmbGFncyAmIEFDOTdDX0NBUFRVUkUpIHsKKwkJcnhfZHdzLT5kbWFfZGV2ID0gJmR3X2RtYWMwX2RldmljZS5kZXY7CisJCXJ4X2R3cy0+cmVnX3dpZHRoID0gRFdfRE1BX1NMQVZFX1dJRFRIXzE2QklUOworCQlyeF9kd3MtPmNmZ19oaSA9IERXQ19DRkdIX1NSQ19QRVIoMyk7CisJCXJ4X2R3cy0+Y2ZnX2xvICY9IH4oRFdDX0NGR0xfSFNfRFNUX1BPTCB8IERXQ19DRkdMX0hTX1NSQ19QT0wpOworCX0KKworCS8qIENoZWNrIGlmIERNQSBzbGF2ZSBpbnRlcmZhY2UgZm9yIHBsYXliYWNrIHNob3VsZCBiZSBjb25maWd1cmVkLiAqLworCWlmIChmbGFncyAmIEFDOTdDX1BMQVlCQUNLKSB7CisJCXR4X2R3cy0+ZG1hX2RldiA9ICZkd19kbWFjMF9kZXZpY2UuZGV2OworCQl0eF9kd3MtPnJlZ193aWR0aCA9IERXX0RNQV9TTEFWRV9XSURUSF8xNkJJVDsKKwkJdHhfZHdzLT5jZmdfaGkgPSBEV0NfQ0ZHSF9EU1RfUEVSKDQpOworCQl0eF9kd3MtPmNmZ19sbyAmPSB+KERXQ19DRkdMX0hTX0RTVF9QT0wgfCBEV0NfQ0ZHTF9IU19TUkNfUE9MKTsKKwl9CiAKIAlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsCiAJCQkJc2l6ZW9mKHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhKSkpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CiAKLQlwaW5fbWFzayAgPSAoMSA8PCAyMCkgfCAoMSA8PCAyMSk7CS8qIFNETyAmIFNZTkMgKi8KLQlwaW5fbWFzayB8PSAoMSA8PCAyMikgfCAoMSA8PCAyMyk7CS8qIFNDTEsgJiBTREkgKi8KKwkvKiBTRE8gfCBTWU5DIHwgU0NMSyB8IFNESSAqLworCXBpbl9tYXNrID0gKDEgPDwgMjApIHwgKDEgPDwgMjEpIHwgKDEgPDwgMjIpIHwgKDEgPDwgMjMpOwogCiAJc2VsZWN0X3BlcmlwaGVyYWwoUElPQiwgcGluX21hc2ssIFBFUklQSF9CLCAwKTsKIAotCS8qIFRPRE86IGdwaW9faXNfdmFsaWQoZGF0YS0+cmVzZXRfcGluKSB3aXRoIGtlcm5lbCAyLjYuMjYuICovCi0JaWYgKGRhdGEtPnJlc2V0X3BpbiAhPSBHUElPX1BJTl9OT05FKQotCQlhdDMyX3NlbGVjdF9ncGlvKGRhdGEtPnJlc2V0X3BpbiwgMCk7CisJaWYgKGdwaW9faXNfdmFsaWQoZGF0YS0+cmVzZXRfcGluKSkKKwkJYXQzMl9zZWxlY3RfZ3BpbyhkYXRhLT5yZXNldF9waW4sIEFUMzJfR1BJT0ZfT1VUUFVUCisJCQkJfCBBVDMyX0dQSU9GX0hJR0gpOwogCiAJYXRtZWxfYWM5N2MwX3BjbGsuZGV2ID0gJnBkZXYtPmRldjsKIAogCXBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJcmV0dXJuIHBkZXY7CiAKLWZhaWw6CitvdXRfZnJlZV9yZXNvdXJjZXM6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTIwNTMsMjEgKzIwODYsMzQgQEAKIAkuaW5kZXgJCT0gNiwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBhdDMyX2FkZF9kZXZpY2VfYWJkYWModW5zaWduZWQgaW50IGlkKQorc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0CithdDMyX2FkZF9kZXZpY2VfYWJkYWModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQl1MzIgcGluX21hc2s7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCSpkd3M7CisJdTMyCQkJcGluX21hc2s7CiAKLQlpZiAoaWQgIT0gMCkKKwlpZiAoaWQgIT0gMCB8fCAhZGF0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJhYmRhYyIsIGlkKTsKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJhdG1lbF9hYmRhYyIsIGlkKTsKIAlpZiAoIXBkZXYpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIGFiZGFjMF9yZXNvdXJjZSwKIAkJCQlBUlJBWV9TSVpFKGFiZGFjMF9yZXNvdXJjZSkpKQotCQlnb3RvIGVycl9hZGRfcmVzb3VyY2VzOworCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKworCWR3cyA9ICZkYXRhLT5kd3M7CisKKwlkd3MtPmRtYV9kZXYgPSAmZHdfZG1hYzBfZGV2aWNlLmRldjsKKwlkd3MtPnJlZ193aWR0aCA9IERXX0RNQV9TTEFWRV9XSURUSF8zMkJJVDsKKwlkd3MtPmNmZ19oaSA9IERXQ19DRkdIX0RTVF9QRVIoMik7CisJZHdzLT5jZmdfbG8gJj0gfihEV0NfQ0ZHTF9IU19EU1RfUE9MIHwgRFdDX0NGR0xfSFNfU1JDX1BPTCk7CisKKwlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsCisJCQkJc2l6ZW9mKHN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSkpKQorCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKIAogCXBpbl9tYXNrICA9ICgxIDw8IDIwKSB8ICgxIDw8IDIyKTsJLyogREFUQTEgJiBEQVRBTjEgKi8KIAlwaW5fbWFzayB8PSAoMSA8PCAyMSkgfCAoMSA8PCAyMyk7CS8qIERBVEEwICYgREFUQU4wICovCkBAIC0yMDgwLDcgKzIxMjYsNyBAQAogCXBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJcmV0dXJuIHBkZXY7CiAKLWVycl9hZGRfcmVzb3VyY2VzOgorb3V0X2ZyZWVfcmVzb3VyY2VzOgogCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdDMyYXA3MDB4LmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdDMyYXA3MDB4LmgKaW5kZXggNWM0Yzk3MS4uYjkyMjJiZiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYXQzMmFwNzAweC5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2F0MzJhcDcwMHguaApAQCAtMTcxLDI1ICsxNzEsNDkgQEAKIAkJQVRNRUxfTENEQyhQRSwgREFUQTIwKSB8IEFUTUVMX0xDREMoUEUsIERBVEEyMSkgfAlcCiAJCUFUTUVMX0xDREMoUEQsIERBVEEyMikgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMjMpKQogCi0jZGVmaW5lIEFUTUVMX0xDRENfUFJJXzE1Ql9EQVRBICgJCQkJCVwKLQkJQVRNRUxfTENEQyhQQywgREFUQTApICB8IEFUTUVMX0xDREMoUEMsIERBVEExKSAgfAlcCisjZGVmaW5lIEFUTUVMX0xDRENfUFJJXzE4Ql9EQVRBICgJCQkJCVwKIAkJQVRNRUxfTENEQyhQQywgREFUQTIpICB8IEFUTUVMX0xDREMoUEMsIERBVEEzKSAgfAlcCiAJCUFUTUVMX0xDREMoUEMsIERBVEE0KSAgfCBBVE1FTF9MQ0RDKFBDLCBEQVRBNSkgIHwJXAotCQlBVE1FTF9MQ0RDKFBELCBEQVRBOCkgIHwgQVRNRUxfTENEQyhQRCwgREFUQTkpICB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTYpICB8IEFUTUVMX0xDREMoUEQsIERBVEE3KSAgfAlcCiAJCUFUTUVMX0xDREMoUEQsIERBVEExMCkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTEpIHwJXAotCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTIpIHwgQVRNRUxfTENEQyhQRCwgREFUQTE2KSB8CVwKLQkJQVRNRUxfTENEQyhQRCwgREFUQTE3KSB8IEFUTUVMX0xDREMoUEQsIERBVEExOCkgfAlcCi0JCUFUTUVMX0xDREMoUEQsIERBVEExOSkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMjApKQorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTIpIHwgQVRNRUxfTENEQyhQRCwgREFUQTEzKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTE0KSB8IEFUTUVMX0xDREMoUEQsIERBVEExNSkgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEExOCkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTkpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMjApIHwgQVRNRUxfTENEQyhQRCwgREFUQTIxKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTIyKSB8IEFUTUVMX0xDREMoUEQsIERBVEEyMykpCiAKLSNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMTVCX0RBVEEJKAkJCQkJXAotCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMCkgIHwgQVRNRUxfTENEQyhQRSwgREFUQTEpICB8CVwKKyNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMThCX0RBVEEJKAkJCQkJXAogCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMikgIHwgQVRNRUxfTENEQyhQRSwgREFUQTMpICB8CVwKIAkJQVRNRUxfTENEQyhQRSwgREFUQTQpICB8IEFUTUVMX0xDREMoUEMsIERBVEE1KSAgfAlcCi0JCUFUTUVMX0xDREMoUEUsIERBVEE4KSAgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBOSkgIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBNikgIHwgQVRNRUxfTENEQyhQRCwgREFUQTcpICB8CVwKIAkJQVRNRUxfTENEQyhQRSwgREFUQTEwKSB8IEFUTUVMX0xDREMoUEUsIERBVEExMSkgfAlcCi0JCUFUTUVMX0xDREMoUEUsIERBVEExMikgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMTYpIHwJXAotCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMTcpIHwgQVRNRUxfTENEQyhQRSwgREFUQTE4KSB8CVwKLQkJQVRNRUxfTENEQyhQRSwgREFUQTE5KSB8IEFUTUVMX0xDREMoUEUsIERBVEEyMCkpCisJCUFUTUVMX0xDREMoUEUsIERBVEExMikgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTMpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTQpIHwgQVRNRUxfTENEQyhQRCwgREFUQTE1KSB8CVwKKwkJQVRNRUxfTENEQyhQRSwgREFUQTE4KSB8IEFUTUVMX0xDREMoUEUsIERBVEExOSkgfAlcCisJCUFUTUVMX0xDREMoUEUsIERBVEEyMCkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMjEpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMjIpIHwgQVRNRUxfTENEQyhQRCwgREFUQTIzKSkKKworI2RlZmluZSBBVE1FTF9MQ0RDX1BSSV8xNUJfREFUQSAoCQkJCQlcCisJCUFUTUVMX0xDREMoUEMsIERBVEEzKSAgfCBBVE1FTF9MQ0RDKFBDLCBEQVRBNCkgIHwJXAorCQlBVE1FTF9MQ0RDKFBDLCBEQVRBNSkgIHwgQVRNRUxfTENEQyhQRCwgREFUQTYpICB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTcpICB8CQkJCVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTExKSB8IEFUTUVMX0xDREMoUEQsIERBVEExMikgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEExMykgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTQpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTUpIHwJCQkJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTkpIHwgQVRNRUxfTENEQyhQRCwgREFUQTIwKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTIxKSB8IEFUTUVMX0xDREMoUEQsIERBVEEyMikgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEEyMykpCisKKyNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMTVCX0RBVEEJKAkJCQkJXAorCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMykgIHwgQVRNRUxfTENEQyhQRSwgREFUQTQpICB8CVwKKwkJQVRNRUxfTENEQyhQQywgREFUQTUpICB8IEFUTUVMX0xDREMoUEQsIERBVEE2KSAgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEE3KSAgfAkJCQlcCisJCUFUTUVMX0xDREMoUEUsIERBVEExMSkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMTIpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTMpIHwgQVRNRUxfTENEQyhQRCwgREFUQTE0KSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTE1KSB8CQkJCVwKKwkJQVRNRUxfTENEQyhQRSwgREFUQTE5KSB8IEFUTUVMX0xDREMoUEUsIERBVEEyMCkgfAlcCisJCUFUTUVMX0xDREMoUEUsIERBVEEyMSkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMjIpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMjMpKQogCiAjZGVmaW5lIEFUTUVMX0xDRENfUFJJX0NPTlRST0wgKAkJCQkJXAogCQlBVE1FTF9MQ0RDKFBDLCBDQykgICB8IEFUTUVMX0xDREMoUEMsIERWQUwpIHwJCVwKQEAgLTIwNyw2ICsyMzEsMTAgQEAKIAogI2RlZmluZSBBVE1FTF9MQ0RDX0FMVF8yNEJJVAkoQVRNRUxfTENEQ19DT05UUk9MIHwgQVRNRUxfTENEQ19BTFRfMjRCX0RBVEEpCiAKKyNkZWZpbmUgQVRNRUxfTENEQ19QUklfMThCSVQJKEFUTUVMX0xDRENfQ09OVFJPTCB8IEFUTUVMX0xDRENfUFJJXzE4Ql9EQVRBKQorCisjZGVmaW5lIEFUTUVMX0xDRENfQUxUXzE4QklUCShBVE1FTF9MQ0RDX0NPTlRST0wgfCBBVE1FTF9MQ0RDX0FMVF8xOEJfREFUQSkKKwogI2RlZmluZSBBVE1FTF9MQ0RDX1BSSV8xNUJJVAkoQVRNRUxfTENEQ19DT05UUk9MIHwgQVRNRUxfTENEQ19QUklfMTVCX0RBVEEpCiAKICNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMTVCSVQJKEFUTUVMX0xDRENfQ09OVFJPTCB8IEFUTUVMX0xDRENfQUxUXzE1Ql9EQVRBKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKaW5kZXggY2ZmOGU4NC4uMGI4MTY0MiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC0xMyw3ICsxMyw3IEBACiAgKiBpbiB0aGlzIGFycmF5IGlzIGNoaXAtZGVwZW5kZW50LgogICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBhdDMyX2JvYXJkX29zY19yYXRlc1tdOwotICAKKwogLyoKICAqIFRoaXMgdXNlZCB0byBhZGQgZXNzZW50aWFsIHN5c3RlbSBkZXZpY2VzLCBidXQgdGhpcyBpcyBub3cgZG9uZQogICogYXV0b21hdGljYWxseS4gUGxlYXNlIGRvbid0IHVzZSBpdCBpbiBuZXcgYm9hcmQgY29kZS4KQEAgLTI2LDEyICsyNiwxNyBAQAogI2RlZmluZSBBVE1FTF9NQVhfVUFSVAk0CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsKIAorLyogRmxhZ3MgZm9yIHNlbGVjdGluZyBVU0FSVCBleHRyYSBwaW5zICovCisjZGVmaW5lCUFUTUVMX1VTQVJUX1JUUwkJMHgwMQorI2RlZmluZQlBVE1FTF9VU0FSVF9DVFMJCTB4MDIKKyNkZWZpbmUJQVRNRUxfVVNBUlRfQ0xLCQkweDAzCisKIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgewogCXNob3J0CQl1c2VfZG1hX3R4OwkvKiB1c2UgdHJhbnNtaXQgRE1BPyAqLwogCXNob3J0CQl1c2VfZG1hX3J4OwkvKiB1c2UgcmVjZWl2ZSBETUE/ICovCiAJdm9pZCBfX2lvbWVtCSpyZWdzOwkJLyogdmlydHVhbCBiYXNlIGFkZHJlc3MsIGlmIGFueSAqLwogfTsKLXZvaWQgYXQzMl9tYXBfdXNhcnQodW5zaWduZWQgaW50IGh3X2lkLCB1bnNpZ25lZCBpbnQgbGluZSk7Cit2b2lkIGF0MzJfbWFwX3VzYXJ0KHVuc2lnbmVkIGludCBod19pZCwgdW5zaWduZWQgaW50IGxpbmUsIGludCBmbGFncyk7CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDMyX2FkZF9kZXZpY2VfdXNhcnQodW5zaWduZWQgaW50IGlkKTsKIAogc3RydWN0IGV0aF9wbGF0Zm9ybV9kYXRhIHsKQEAgLTg4LDE2ICs5MywxNSBAQAogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqCiBhdDMyX2FkZF9kZXZpY2VfbWNpKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhICpkYXRhKTsKIAotc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgewotCXVuc2lnbmVkIHNob3J0IGRtYV9yeF9wZXJpcGhfaWQ7Ci0JdW5zaWduZWQgc2hvcnQgZG1hX3R4X3BlcmlwaF9pZDsKLQl1bnNpZ25lZCBzaG9ydCBkbWFfY29udHJvbGxlcl9pZDsKLQlpbnQgcmVzZXRfcGluOwotfTsKK3N0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhOwogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqCi1hdDMyX2FkZF9kZXZpY2VfYWM5N2ModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSk7CithdDMyX2FkZF9kZXZpY2VfYWM5N2ModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQzMl9hZGRfZGV2aWNlX2FiZGFjKHVuc2lnbmVkIGludCBpZCk7CitzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGE7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKK2F0MzJfYWRkX2RldmljZV9hYmRhYyh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSAqZGF0YSk7CisKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0MzJfYWRkX2RldmljZV9wc2lmKHVuc2lnbmVkIGludCBpZCk7CiAKIHN0cnVjdCBjZl9wbGF0Zm9ybV9kYXRhIHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwppbmRleCAwYzFmODZlLi4zNjQwY2RjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCkBAIC03NzcsNyArNzc3LDcgQEAKIAlkZWZhdWx0IG4gaWYgQkY1NHgKIAlkZXBlbmRzIG9uICFCRjUzMQogCWhlbHAKLQkgIElmIGVuYWJsZWQsIGNhY2hlbGluZV9hbmxpZ25lZCBkYXRhIGlzIGxpbmtlZAorCSAgSWYgZW5hYmxlZCwgY2FjaGVsaW5lX2FsaWduZWQgZGF0YSBpcyBsaW5rZWQKIAkgIGludG8gTDEgZGF0YSBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCiAKIGNvbmZpZyBTWVNDQUxMX1RBQl9MMQpAQCAtOTU3LDcgKzk1Nyw3IEBACiAJICBtZW1vcnkgdGhleSBkbyBub3Qgb3duLiAgVGhpcyBjb21lcyBhdCBhIHBlcmZvcm1hbmNlIHBlbmFsdHkKIAkgIGFuZCBpcyByZWNvbW1lbmRlZCBvbmx5IGZvciBkZWJ1Z2dpbmcuCiAKLWNvbW1lbnQgIkFzeW5jaG9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uIgorY29tbWVudCAiQXN5bmNocm9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uIgogCiBtZW51ICJFQklVX0FNR0NUTCBHbG9iYWwgQ29udHJvbCIKIGNvbmZpZyBDX0FNQ0tFTgpAQCAtOTg5LDcgKzk4OSw3IEBACiAJZGVmYXVsdCBuCiAKIGNob2ljZQotCXByb21wdCJFbmFibGUgQXN5bmNob25vdXMgTWVtb3J5IEJhbmtzIgorCXByb21wdCAiRW5hYmxlIEFzeW5jaHJvbm91cyBNZW1vcnkgQmFua3MiCiAJZGVmYXVsdCBDX0FNQkVOX0FMTAogCiBjb25maWcgQ19BTUJFTgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwppbmRleCAzM2UyZTg5Li5mNDk0MjcyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIH0KIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCitjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAogCSAgICB1bnNpZ25lZCBsb25nIHVzcCwgdW5zaWduZWQgbG9uZyB0b3BzdGssCiAJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvS2NvbmZpZyBiL2FyY2gvY3Jpcy9LY29uZmlnCmluZGV4IDM0NjIyNDUuLjdhZGFjMzggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9LY29uZmlnCkBAIC00MzgsNyArNDM4LDcgQEAKIAloZWxwCiAJICBFbmFibGVzIHRoZSBETUExIGlucHV0IGNoYW5uZWwgZm9yIHNlcjAgKHR0eVMwKS4KIAkgIElmIHlvdSBkbyBub3QgZW5hYmxlIERNQSwgYW4gaW50ZXJydXB0IGZvciBlYWNoIGNoYXJhY3RlciB3aWxsIGJlCi0JICB1c2VkIHdoZW4gcmVjZWl2ZWluZyBkYXRhLgorCSAgdXNlZCB3aGVuIHJlY2VpdmluZyBkYXRhLgogCSAgTm9ybWFsbHkgeW91IHdhbnQgdG8gdXNlIERNQSwgdW5sZXNzIHlvdSB1c2UgdGhlIERNQSBjaGFubmVsIGZvcgogCSAgc29tZXRoaW5nIGVsc2UuCiAKQEAgLTU2NSw3ICs1NjUsNyBAQAogCWhlbHAKIAkgIEVuYWJsZXMgdGhlIERNQTcgaW5wdXQgY2hhbm5lbCBmb3Igc2VyMiAodHR5UzIpLgogCSAgSWYgeW91IGRvIG5vdCBlbmFibGUgRE1BLCBhbiBpbnRlcnJ1cHQgZm9yIGVhY2ggY2hhcmFjdGVyIHdpbGwgYmUKLQkgIHVzZWQgd2hlbiByZWNlaXZlaW5nIGRhdGEuCisJICB1c2VkIHdoZW4gcmVjZWl2aW5nIGRhdGEuCiAJICBOb3JtYWxseSB5b3Ugd2FudCB0byB1c2UgRE1BLCB1bmxlc3MgeW91IHVzZSB0aGUgRE1BIGNoYW5uZWwgZm9yCiAJICBzb21ldGhpbmcgZWxzZS4KIApAQCAtNjA0LDcgKzYwNCw3IEBACiAJaGVscAogCSAgRW5hYmxlcyB0aGUgRE1BMyBpbnB1dCBjaGFubmVsIGZvciBzZXIzICh0dHlTMykuCiAJICBJZiB5b3UgZG8gbm90IGVuYWJsZSBETUEsIGFuIGludGVycnVwdCBmb3IgZWFjaCBjaGFyYWN0ZXIgd2lsbCBiZQotCSAgdXNlZCB3aGVuIHJlY2VpdmVpbmcgZGF0YS4KKwkgIHVzZWQgd2hlbiByZWNlaXZpbmcgZGF0YS4KIAkgIE5vcm1hbGx5IHlvdSB3YW50IHRvIHVzZSBETUEsIHVubGVzcyB5b3UgdXNlIHRoZSBETUEgY2hhbm5lbCBmb3IKIAkgIHNvbWV0aGluZyBlbHNlLgogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGJkOWIzZmYuLmM0YzY5Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAqLwogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9LY29uZmlnIGIvYXJjaC9jcmlzL2FyY2gtdjMyL0tjb25maWcKaW5kZXggMDA1ZWQyYi4uMjFiYmQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL0tjb25maWcKQEAgLTI4LDcgKzI4LDcgQEAKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCBvbmUgRXRoZXJuZXQgTEVEIGdyb3VwLiBUaGlzIExFRCBncm91cAogCSAgY2FuIGJlIHVzZWQgZm9yIG9uZSBvciBtb3JlIEV0aGVybmV0IGludGVyZmFjZXMuIEhvd2V2ZXIsIGl0IGlzCi0JICByZWNvbWVuZGVkIHRoYXQgZWFjaCBFdGhlcm5ldCBpbnRlcmZhY2UgdXNlIGEgZGVkaWNhdGVkIExFRCBncm91cC4KKwkgIHJlY29tbWVuZGVkIHRoYXQgZWFjaCBFdGhlcm5ldCBpbnRlcmZhY2UgdXNlIGEgZGVkaWNhdGVkIExFRCBncm91cC4KIAogY29uZmlnCUVUUkFYX05CUl9MRURfR1JQX1RXTwogCWJvb2wgIlVzZSB0d28gTEVEIGdyb3VwcyIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL0tjb25maWcgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9LY29uZmlnCmluZGV4IDdhNjRmY2UuLmI5ZTMyOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvS2NvbmZpZwpAQCAtMzQyLDcgKzM0Miw3IEBACiAJaGVscAogCSAgRW5hYmxlcyB0aGUgRE1BOSBpbnB1dCBjaGFubmVsIGZvciBzZXI0ICh0dHlTNCkuCiAJICBJZiB5b3UgZG8gbm90IGVuYWJsZSBETUEsIGFuIGludGVycnVwdCBmb3IgZWFjaCBjaGFyYWN0ZXIgd2lsbCBiZQotCSAgdXNlZCB3aGVuIHJlY2VpdmVpbmcgZGF0YS4KKwkgIHVzZWQgd2hlbiByZWNlaXZpbmcgZGF0YS4KIAkgIE5vcm1hbGx5IHlvdSB3YW50IHRvIHVzZSBETUEsIHVubGVzcyB5b3UgdXNlIHRoZSBETUEgY2hhbm5lbCBmb3IKIAkgIHNvbWV0aGluZyBlbHNlLgogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGNlZDViNzIuLjEyMGU3ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL0tjb25maWcgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9LY29uZmlnCmluZGV4IGY2ZDc0NDcuLjc3NGRlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvS2NvbmZpZwpAQCAtNTksNyArNTksNyBAQAogCWRlcGVuZHMgb24gRVRSQVhfQVJDSF9WMzIKIAlkZWZhdWx0ICIwIgogCWhlbHAKLQkgIFNEUkFNIGNvbmZpZ3VyYXRpb24gZm9yIGdyb3VwIDEuIFRoZSBkZWZ1bHQgdmFsdWUgaXMgMAorCSAgU0RSQU0gY29uZmlndXJhdGlvbiBmb3IgZ3JvdXAgMS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMAogCSAgYmVjYXVzZSBncm91cCAxIGlzIG5vdCB1c2VkIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sCiAJICBkZXNjcmliZWQgaW4gdGhlIGhlbHAgZm9yIFNEUkFNX0dSUDBfQ09ORklHLgogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL3NwaW5sb2NrLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL3NwaW5sb2NrLmgKaW5kZXggMGQ1NzA5Yi4uMTI5NzU2YiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9zcGlubG9jay5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvc3BpbmxvY2suaApAQCAtMTIxLDYgKzEyMSw4IEBACiAJcmV0dXJuIDE7CiB9CiAKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd193cml0ZV9sb2NrKGxvY2spCiAKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9jcmlzL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNjA4MTZlOC4uNGRmMGIzMiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5NTgzYTMzLi4wZGU1MGRmIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogLyoKICAqIHNldCB1cCB0aGUga2VybmVsIHN0YWNrIGFuZCBleGNlcHRpb24gZnJhbWVzIGZvciBhIG5ldyBwcm9jZXNzCiAgKi8KLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKIAkJdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgdG9wc3RrLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBhOGVmNjU0Li5lMmYzM2QwIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgdG9wc3RrLAogCQkgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYwppbmRleCBhZDM4M2NhLi5lN2M2ZTYxIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYwpAQCAtNjcsNyArNjcsNyBAQAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIH07CiAKLWNvbnN0IHN0YXRpYyBpbnQgX19pbml0ZGF0YSBkaXZpZGVfcmF0ZVtdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGRpdmlkZV9yYXRlW10gPSB7CiAjaWYgQ09ORklHX0g4MzAwX1RQVV9DSCA9PSAwCiAJMSw0LDE2LDY0LDAsMCwwLDAsCiAjZWxpZiAoQ09ORklHX0g4MzAwX1RQVV9DSCA9PSAxKSB8fCAoQ09ORklHX0g4MzAwX1RQVV9DSCA9PSA1KQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCAxNTNlNzI3Li4yOTRhM2IxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtMjIsNiArMjIsOSBAQAogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfS1BST0JFUwogCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAorCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFIGlmICghSVRBTklVTSkKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgSEFWRV9ETUFfQVRUUlMKIAlzZWxlY3QgSEFWRV9LVk0KIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZwppbmRleCBhMTA5ZGIzLi43NTY0NTQ5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMTkzLDcgKzE5Myw2IEBACiBDT05GSUdfTlJfUVVJQ0s9MQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX01NVV9OT1RJRklFUj15CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtNDE2LDggKzQxNSw2IEBACiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogQ09ORklHX1NHSV9YUD1tCiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotQ09ORklHX1NHSV9HUlU9bQotIyBDT05GSUdfU0dJX0dSVV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMGRiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfRlRSQUNFX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0ZUUkFDRV9ICisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUgICAgICAgIDMyIC8qIHNpemVvZiBtY291bnQgY2FsbCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgX21jb3VudCh1bnNpZ25lZCBsb25nIHBmcywgdW5zaWduZWQgbG9uZyByMSwgdW5zaWduZWQgbG9uZyBiMCwgdW5zaWduZWQgbG9uZyByMCk7CisjZGVmaW5lIG1jb3VudCBfbWNvdW50CisKKyNpbmNsdWRlIDxhc20va3Byb2Jlcy5oPgorLyogSW4gSUE2NCwgTUNPVU5UX0FERFIgaXMgc2V0IGluIGxpbmsgdGltZSwgc28gaXQncyBub3QgYSBjb25zdGFudCBhdCBjb21waWxlIHRpbWUgKi8KKyNkZWZpbmUgTUNPVU5UX0FERFIgKCgoc3RydWN0IGZucHRyICopbWNvdW50KS0+aXApCisjZGVmaW5lIEZUUkFDRV9BRERSICgoKHN0cnVjdCBmbnB0ciAqKWZ0cmFjZV9jYWxsZXIpLT5pcCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJLyogc2Vjb25kIGJ1bmRsZSwgaW5zbiAyICovCisJcmV0dXJuIGFkZHIgLSAweDEyOworfQorCitzdHJ1Y3QgZHluX2FyY2hfZnRyYWNlIHsKK307CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggMTQwZTQ5NS4uZDUxNGNkOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0yMCwxNiArMjAsNiBAQAogCiAjZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpCQkobG9jYWxfY3B1X2RhdGEtPnNvZnRpcnFfcGVuZGluZykKIAotI2RlZmluZSBIQVJESVJRX0JJVFMJMTQKLQotLyoKLSAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlIHNwYWNlIGZvciBwb3RlbnRpYWxseSBhbGwgSVJRIHNvdXJjZXMKLSAqIGluIHRoZSBzeXN0ZW0gbmVzdGluZyBvbiBhIHNpbmdsZSBDUFU6Ci0gKi8KLSNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTlJfSVJRUwotIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKLSNlbmRpZgotCiBleHRlcm4gdm9pZCBfX2lvbWVtICppcGlfYmFzZV9hZGRyOwogCiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAwMjI5ZmI5Li4xM2FiNzE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTIwLDYgKzEyMCwzOCBAQAogI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHJ3KQkJKCoodm9sYXRpbGUgaW50ICopKHJ3KSA+PSAwKQogI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhydykJKCoodm9sYXRpbGUgaW50ICopKHJ3KSA9PSAwKQogCisjaWZkZWYgQVNNX1NVUFBPUlRFRAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKK19fcmF3X3JlYWRfbG9ja19mbGFncyhyYXdfcndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkidGJpdC5ueiBwNiwgcDAgPSAlMSwlMlxuIgorCQkiYnIuZmV3IDNmXG4iCisJCSIxOlxuIgorCQkiZmV0Y2hhZGQ0LnJlbCByMiA9IFslMF0sIC0xOztcbiIKKwkJIihwNikgc3NtIHBzci5pXG4iCisJCSIyOlxuIgorCQkiaGludCBAcGF1c2VcbiIKKwkJImxkNCByMiA9IFslMF07O1xuIgorCQkiY21wNC5sdCBwNyxwMCA9IHIyLCByMFxuIgorCQkiKHA3KSBici5jb25kLnNwbnQuZmV3IDJiXG4iCisJCSIocDYpIHJzbSBwc3IuaVxuIgorCQkiOztcbiIKKwkJIjM6XG4iCisJCSJmZXRjaGFkZDQuYWNxIHIyID0gWyUwXSwgMTs7XG4iCisJCSJjbXA0Lmx0IHA3LHAwID0gcjIsIHIwXG4iCisJCSIocDcpIGJyLmNvbmQuc3BudC5mZXcgMWJcbiIKKwkJOiA6ICJyIihsb2NrKSwgInIiKGZsYWdzKSwgImkiKElBNjRfUFNSX0lfQklUKQorCQk6ICJwNiIsICJwNyIsICJyMiIsICJtZW1vcnkiKTsKK30KKworI2RlZmluZSBfX3Jhd19yZWFkX2xvY2sobG9jaykgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIDApCisKKyNlbHNlIC8qICFBU01fU1VQUE9SVEVEICovCisKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgX19yYXdfcmVhZF9sb2NrKHJ3KQorCiAjZGVmaW5lIF9fcmF3X3JlYWRfbG9jayhydykJCQkJCQkJCVwKIGRvIHsJCQkJCQkJCQkJCVwKIAlyYXdfcndsb2NrX3QgKl9fcmVhZF9sb2NrX3B0ciA9IChydyk7CQkJCQkJXApAQCAtMTMxLDYgKzE2Myw4IEBACiAJfQkJCQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCisjZW5kaWYgLyogIUFTTV9TVVBQT1JURUQgKi8KKwogI2RlZmluZSBfX3Jhd19yZWFkX3VubG9jayhydykJCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlyYXdfcndsb2NrX3QgKl9fcmVhZF9sb2NrX3B0ciA9IChydyk7CQkJXApAQCAtMTM4LDIwICsxNzIsMzMgQEAKIH0gd2hpbGUgKDApCiAKICNpZmRlZiBBU01fU1VQUE9SVEVECi0jZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2socncpCQkJCQkJCVwKLWRvIHsJCQkJCQkJCQkJXAotIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCVwKLQkJIm1vdiBhci5jY3YgPSByMFxuIgkJCQkJCVwKLQkJImRlcCByMjkgPSAtMSwgcjAsIDMxLCAxOztcbiIJCQkJCVwKLQkJIjE6XG4iCQkJCQkJCQlcCi0JCSJsZDQgcjIgPSBbJTBdOztcbiIJCQkJCQlcCi0JCSJjbXA0LmVxIHAwLHA3ID0gcjAscjJcbiIJCQkJCVwKLQkJIihwNykgYnIuY29uZC5zcG50LmZldyAxYiBcbiIJCQkJCVwKLQkJImNtcHhjaGc0LmFjcSByMiA9IFslMF0sIHIyOSwgYXIuY2N2OztcbiIJCQlcCi0JCSJjbXA0LmVxIHAwLHA3ID0gcjAsIHIyXG4iCQkJCQlcCi0JCSIocDcpIGJyLmNvbmQuc3BudC5mZXcgMWI7O1xuIgkJCQkJXAotCQk6OiAiciIocncpIDogImFyLmNjdiIsICJwNyIsICJyMiIsICJyMjkiLCAibWVtb3J5Iik7CQlcCi19IHdoaWxlKDApCisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorX19yYXdfd3JpdGVfbG9ja19mbGFncyhyYXdfcndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkidGJpdC5ueiBwNiwgcDAgPSAlMSwgJTJcbiIKKwkJIm1vdiBhci5jY3YgPSByMFxuIgorCQkiZGVwIHIyOSA9IC0xLCByMCwgMzEsIDFcbiIKKwkJImJyLmZldyAzZjs7XG4iCisJCSIxOlxuIgorCQkiKHA2KSBzc20gcHNyLmlcbiIKKwkJIjI6XG4iCisJCSJoaW50IEBwYXVzZVxuIgorCQkibGQ0IHIyID0gWyUwXTs7XG4iCisJCSJjbXA0LmVxIHAwLHA3ID0gcjAsIHIyXG4iCisJCSIocDcpIGJyLmNvbmQuc3BudC5mZXcgMmJcbiIKKwkJIihwNikgcnNtIHBzci5pXG4iCisJCSI7O1xuIgorCQkiMzpcbiIKKwkJImNtcHhjaGc0LmFjcSByMiA9IFslMF0sIHIyOSwgYXIuY2N2OztcbiIKKwkJImNtcDQuZXEgcDAscDcgPSByMCwgcjJcbiIKKwkJIihwNykgYnIuY29uZC5zcG50LmZldyAxYjs7XG4iCisJCTogOiAiciIobG9jayksICJyIihmbGFncyksICJpIihJQTY0X1BTUl9JX0JJVCkKKwkJOiAiYXIuY2N2IiwgInA2IiwgInA3IiwgInIyIiwgInIyOSIsICJtZW1vcnkiKTsKK30KKworI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrKHJ3KSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKHJ3LCAwKQogCiAjZGVmaW5lIF9fcmF3X3dyaXRlX3RyeWxvY2socncpCQkJCQkJCVwKICh7CQkJCQkJCQkJCVwKQEAgLTE3NCw2ICsyMjEsOCBAQAogCiAjZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLwogCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobCwgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobCkKKwogI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrKGwpCQkJCQkJCQlcCiAoewkJCQkJCQkJCQkJXAogCV9fdTY0IGlhNjRfdmFsLCBpYTY0X3NldF92YWwgPSBpYTY0X2RlcF9taSgtMSwgMCwgMzEsIDEpOwkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91dl9odWIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCBmNjA3MDE4Li41M2U5ZGZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCkBAIC0zMDUsNSArMzA1LDExIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1dl9odWJfc2VuZF9pcGkoaW50IHBub2RlLCBpbnQgYXBpY2lkLCBpbnQgdmVjdG9yKQoreworCS8qIG5vdCBjdXJyZW50bHkgbmVlZGVkIG9uIGlhNjQgKi8KK30KKworCiAjZW5kaWYgLyogX19BU01fSUE2NF9VVl9IVUJfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaAppbmRleCBjMTQ5ZWYwLi5mZTBiOGYwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKQEAgLTgsOCArOCw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9JQTY0X1VWX01NUlNfXwotI2RlZmluZSBfX0FTTV9JQTY0X1VWX01NUlNfXworI2lmbmRlZiBfQVNNX0lBNjRfVVZfVVZfTU1SU19ICisjZGVmaW5lIF9BU01fSUE2NF9VVl9VVl9NTVJTX0gKIAogI2RlZmluZSBVVl9NTVJfRU5BQkxFCQkoMVVMIDw8IDYzKQogCkBAIC0yNDMsNiArMjQzLDE1OCBAQAogI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0FMSUFTXzMyIDB4MDA1ZjAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJRyAweDYxYjAwVUwKKworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ncjBfdGxiX2ludDBfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2dyMF90bGJfaW50MF9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJRyAweDYxYjQwVUwKKworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ncjBfdGxiX2ludDFfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2dyMF90bGJfaW50MV9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJRyAweDYxZjAwVUwKKworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ncjFfdGxiX2ludDBfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2dyMV90bGJfaW50MF9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJRyAweDYxZjQwVUwKKworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ncjFfdGxiX2ludDFfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2dyMV90bGJfaW50MV9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0lOVF9DTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogI2RlZmluZSBVVkhfSU5UX0NNUEIgMHgyMjA4MFVMCkBAIC02NzAsNCArODIyLDQgQEAKIH07CiAKIAotI2VuZGlmIC8qIF9fQVNNX0lBNjRfVVZfTU1SU19fICovCisjZW5kaWYgLyogX0FTTV9JQTY0X1VWX1VWX01NUlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNTYyOGU5YS4uNmI3ZWRjYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC0yLDYgKzIsMTAgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCiAKK2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorQ0ZMQUdTX1JFTU9WRV9mdHJhY2UubyA9IC1wZworZW5kaWYKKwogZXh0cmEteQk6PSBoZWFkLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKIAogb2JqLXkgOj0gYWNwaS5vIGVudHJ5Lm8gZWZpLm8gZWZpX3N0dWIubyBnYXRlLWRhdGEubyBmc3lzLm8gaWE2NF9rc3ltcy5vIGlycS5vIGlycV9pYTY0Lm8JXApAQCAtMjgsNiArMzIsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9GUkVRKQkJKz0gY3B1ZnJlcS8KIG9iai0kKENPTkZJR19JQTY0X01DQV9SRUNPVkVSWSkJKz0gbWNhX3JlY292ZXJ5Lm8KIG9iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vIGpwcm9iZXMubworb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vIHJlbG9jYXRlX2tlcm5lbC5vIGNyYXNoLm8KIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wLm8KIG9iai0kKENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUikJKz0gdW5jYWNoZWQubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IGNjZmRlZWUuLjhkYzY5NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KIAogI2luY2x1ZGUgIm1pbnN0YXRlLmgiCiAKQEAgLTE0MDQsNiArMTQwNSwxMDUgQEAKIAlici5yZXQuc3B0ay5tYW55IHJwCiBFTkQodW53X2luaXRfcnVubmluZykKIAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK0dMT0JBTF9FTlRSWShfbWNvdW50KQorCWJyIGZ0cmFjZV9zdHViCitFTkQoX21jb3VudCkKKworLmhlcmU6CisJYnIucmV0LnNwdGsubWFueSBiMAorCitHTE9CQUxfRU5UUlkoZnRyYWNlX2NhbGxlcikKKwlhbGxvYyBvdXQwID0gYXIucGZzLCA4LCAwLCA0LCAwCisJbW92IG91dDMgPSByMAorCTs7CisJbW92IG91dDIgPSBiMAorCWFkZCByMyA9IDB4MjAsIHIzCisJbW92IG91dDEgPSByMTsKKwlici5jYWxsLnNwdGsubWFueSBiMCA9IGZ0cmFjZV9wYXRjaF9ncAorCS8vdGhpcyBtaWdodCBiZSBjYWxsZWQgZnJvbSBtb2R1bGUsIHNvIHdlIG11c3QgcGF0Y2ggZ3AKK2Z0cmFjZV9wYXRjaF9ncDoKKwltb3ZsIGdwPV9fZ3AKKwltb3YgYjAgPSByMworCTs7CisuZ2xvYmFsIGZ0cmFjZV9jYWxsOworZnRyYWNlX2NhbGw6Cit7CisJLm1seAorCW5vcC5tIDB4MAorCW1vdmwgcjMgPSAuaGVyZTs7Cit9CisJYWxsb2MgbG9jMCA9IGFyLnBmcywgNCwgNCwgMiwgMAorCTs7CisJbW92IGxvYzEgPSBiMAorCW1vdiBvdXQwID0gYjAKKwltb3YgbG9jMiA9IHI4CisJbW92IGxvYzMgPSByMTUKKwk7OworCWFkZHMgb3V0MCA9IC1NQ09VTlRfSU5TTl9TSVpFLCBvdXQwCisJbW92IG91dDEgPSBpbjIKKwltb3YgYjYgPSByMworCisJYnIuY2FsbC5zcHRrLm1hbnkgYjAgPSBiNgorCTs7CisJbW92IGFyLnBmcyA9IGxvYzAKKwltb3YgYjAgPSBsb2MxCisJbW92IHI4ID0gbG9jMgorCW1vdiByMTUgPSBsb2MzCisJYnIgZnRyYWNlX3N0dWIKKwk7OworRU5EKGZ0cmFjZV9jYWxsZXIpCisKKyNlbHNlCitHTE9CQUxfRU5UUlkoX21jb3VudCkKKwltb3ZsIHIyID0gZnRyYWNlX3N0dWIKKwltb3ZsIHIzID0gZnRyYWNlX3RyYWNlX2Z1bmN0aW9uOzsKKwlsZDggcjMgPSBbcjNdOzsKKwlsZDggcjMgPSBbcjNdOzsKKwljbXAuZXEgcDcscDAgPSByMiwgcjMKKyhwNykJYnIuc3B0ay5tYW55IGZ0cmFjZV9zdHViCisJOzsKKworCWFsbG9jIGxvYzAgPSBhci5wZnMsIDQsIDQsIDIsIDAKKwk7OworCW1vdiBsb2MxID0gYjAKKwltb3Ygb3V0MCA9IGIwCisJbW92IGxvYzIgPSByOAorCW1vdiBsb2MzID0gcjE1CisJOzsKKwlhZGRzIG91dDAgPSAtTUNPVU5UX0lOU05fU0laRSwgb3V0MAorCW1vdiBvdXQxID0gaW4yCisJbW92IGI2ID0gcjMKKworCWJyLmNhbGwuc3B0ay5tYW55IGIwID0gYjYKKwk7OworCW1vdiBhci5wZnMgPSBsb2MwCisJbW92IGIwID0gbG9jMQorCW1vdiByOCA9IGxvYzIKKwltb3YgcjE1ID0gbG9jMworCWJyIGZ0cmFjZV9zdHViCisJOzsKK0VORChfbWNvdW50KQorI2VuZGlmCisKK0dMT0JBTF9FTlRSWShmdHJhY2Vfc3R1YikKKwltb3YgcjMgPSBiMAorCW1vdmwgcjIgPSBfbWNvdW50X3JldF9oZWxwZXIKKwk7OworCW1vdiBiNiA9IHIyCisJbW92IGI3ID0gcjMKKwlici5yZXQuc3B0ay5tYW55IGI2CisKK19tY291bnRfcmV0X2hlbHBlcjoKKwltb3YgYjAgPSByNDIKKwltb3YgcjEgPSByNDEKKwltb3YgYXIucGZzID0gcjQwCisJYnIgYjcKK0VORChmdHJhY2Vfc3R1YikKKworI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KKwogCS5yb2RhdGEKIAkuYWxpZ24gOAogCS5nbG9ibCBzeXNfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZnRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjOGM5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZnRyYWNlLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBEeW5hbWljIGZ1bmN0aW9uIHRyYWNpbmcgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2hhb2h1YSBMaSA8c2hhb2h1YS5saUBpbnRlbC5jb20+CisgKgorICogRm9yIGxpY2VuY2luZyBkZXRhaWxzLCBzZWUgQ09QWUlORy4KKyAqCisgKiBEZWZpbmVzIGxvdy1sZXZlbCBoYW5kbGluZyBvZiBtY291bnQgY2FsbHMgd2hlbiB0aGUga2VybmVsCisgKiBpcyBjb21waWxlZCB3aXRoIHRoZSAtcGcgZmxhZy4gV2hlbiB1c2luZyBkeW5hbWljIGZ0cmFjZSwgdGhlCisgKiBtY291bnQgY2FsbC1zaXRlcyBnZXQgcGF0Y2hlZCBsYXppbHkgd2l0aCBOT1AgdGlsbCB0aGV5IGFyZQorICogZW5hYmxlZC4gQWxsIGNvZGUgbXV0YXRpb24gcm91dGluZXMgaGVyZSB0YWtlIGVmZmVjdCBhdG9taWNhbGx5LgorICovCisKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wYXRjaC5oPgorCisvKiBJbiBJQTY0LCBlYWNoIGZ1bmN0aW9uIHdpbGwgYmUgYWRkZWQgYmVsb3cgdHdvIGJ1bmRsZXMgd2l0aCAtcGcgb3B0aW9uICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKK2Z0cmFjZV9vcmlnX2NvZGVbTUNPVU5UX0lOU05fU0laRV0gPSB7CisJMHgwMiwgMHg0MCwgMHgzMSwgMHgxMCwgMHg4MCwgMHgwNSwgLyogYWxsb2MgcjQwPWFyLnBmcywxMiw4LDAgKi8KKwkweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDQyLCAweDQwLCAvKiBtb3YgcjQzPXIwOzsgKi8KKwkweDA1LCAweDAwLCAweGM0LCAweDAwLCAgICAgICAgICAgICAvKiBtb3YgcjQyPWIwICovCisJMHgxMSwgMHg0OCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgyMSwgLyogbW92IHI0MT1yMSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIC8qIG5vcC5pIDB4MCAqLworCTB4MDgsIDB4MDAsIDB4MDAsIDB4NTAgICAgICAgICAgICAgIC8qIGJyLmNhbGwuc3B0ay5tYW55IGIwID0gX21jb3VudDs7ICovCit9OworCitzdHJ1Y3QgZnRyYWNlX29yaWdfaW5zbiB7CisJdTY0IGR1bW15MSwgZHVtbXkyLCBkdW1teTM7CisJdTY0IGR1bW15NDo2NC00MSsxMzsKKwl1NjQgaW1tMjA6MjA7CisJdTY0IGR1bW15NTozOworCXU2NCBzaWduOjE7CisJdTY0IGR1bW15Njo0OworfTsKKworLyogbWNvdW50IHN0dWIgd2lsbCBiZSBjb252ZXJ0ZWQgYmVsb3cgZm9yIG5vcCAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZnRyYWNlX25vcF9jb2RlW01DT1VOVF9JTlNOX1NJWkVdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIC8qIFtNSUldIG5vcC5tIDB4MCAqLworCTB4MzAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIC8qIG1vdiByMz1pcCAqLworCTB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsICAgICAgICAgICAgIC8qIG5vcC5pIDB4MCAqLworCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIC8qIFtNTFhdIG5vcC5tIDB4MCAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIG5vcC54IDB4MDs7ICovCisJMHgwMCwgMHgwMCwgMHgwNCwgMHgwMAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQoreworCXJldHVybiBmdHJhY2Vfbm9wX2NvZGU7Cit9CisKKy8qCisgKiBtY291bnQgc3R1YiB3aWxsIGJlIGNvbnZlcnRlZCBiZWxvdyBmb3IgY2FsbAorICogTm90ZTogSnVzdCB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpcyBjaGFuZ2VkIGFnYWluc3Qgbm9wCisgKiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCitmdHJhY2VfY2FsbF9jb2RlW01DT1VOVF9JTlNOX1NJWkVdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIC8qIFtNSUldIG5vcC5tIDB4MCAqLworCTB4MzAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIC8qIG1vdiByMz1pcCAqLworCTB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsICAgICAgICAgICAgIC8qIG5vcC5pIDB4MCAqLworCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIC8qIFtNTFhdIG5vcC5tIDB4MCAqLworCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4MDAsIC8qIGJybC5tYW55IC47OyovCisJMHhmOCwgMHhmZiwgMHhmZiwgMHhjOAorfTsKKworc3RydWN0IGZ0cmFjZV9jYWxsX2luc24geworCXU2NCBkdW1teTEsIGR1bW15MjsKKwl1NjQgZHVtbXkzOjQ4OworCXU2NCBpbW0zOV9sOjE2OworCXU2NCBpbW0zOV9oOjIzOworCXU2NCBkdW1teTQ6MTM7CisJdTY0IGltbTIwOjIwOworCXU2NCBkdW1teTU6MzsKKwl1NjQgaToxOworCXU2NCBkdW1teTY6NDsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2VfY2FsbF9yZXBsYWNlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgZnRyYWNlX2NhbGxfaW5zbiAqY29kZSA9ICh2b2lkICopZnRyYWNlX2NhbGxfY29kZTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFkZHIgLSAoaXAgKyAweDEwKTsKKworCWNvZGUtPmltbTM5X2wgPSBvZmZzZXQgPj4gMjQ7CisJY29kZS0+aW1tMzlfaCA9IG9mZnNldCA+PiA0MDsKKwljb2RlLT5pbW0yMCA9IG9mZnNldCA+PiA0OworCWNvZGUtPmkgPSBvZmZzZXQgPj4gNjM7CisJcmV0dXJuIGZ0cmFjZV9jYWxsX2NvZGU7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBjaGFyICpvbGRfY29kZSwKKwkJICAgdW5zaWduZWQgY2hhciAqbmV3X2NvZGUsIGludCBkb19jaGVjaykKK3sKKwl1bnNpZ25lZCBjaGFyIHJlcGxhY2VkW01DT1VOVF9JTlNOX1NJWkVdOworCisJLyoKKwkgKiBOb3RlOiBEdWUgdG8gbW9kdWxlcyBhbmQgX19pbml0LCBjb2RlIGNhbgorCSAqICBkaXNhcHBlYXIgYW5kIGNoYW5nZSwgd2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgZmF1bHRpbmcKKwkgKiAgYXMgd2VsbCBhcyBjb2RlIGNoYW5naW5nLiBXZSBkbyB0aGlzIGJ5IHVzaW5nIHRoZQorCSAqICBwcm9iZV9rZXJuZWxfKiBmdW5jdGlvbnMuCisJICoKKwkgKiBObyByZWFsIGxvY2tpbmcgbmVlZGVkLCB0aGlzIGNvZGUgaXMgcnVuIHRocm91Z2gKKwkgKiBrc3RvcF9tYWNoaW5lLCBvciBiZWZvcmUgU01QIHN0YXJ0cy4KKwkgKi8KKworCWlmICghZG9fY2hlY2spCisJCWdvdG8gc2tpcF9jaGVjazsKKworCS8qIHJlYWQgdGhlIHRleHQgd2Ugd2FudCB0byBtb2RpZnkgKi8KKwlpZiAocHJvYmVfa2VybmVsX3JlYWQocmVwbGFjZWQsICh2b2lkICopaXAsIE1DT1VOVF9JTlNOX1NJWkUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIE1ha2Ugc3VyZSBpdCBpcyB3aGF0IHdlIGV4cGVjdCBpdCB0byBiZSAqLworCWlmIChtZW1jbXAocmVwbGFjZWQsIG9sZF9jb2RlLCBNQ09VTlRfSU5TTl9TSVpFKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworc2tpcF9jaGVjazoKKwkvKiByZXBsYWNlIHRoZSB0ZXh0IHdpdGggdGhlIG5ldyB0ZXh0ICovCisJaWYgKHByb2JlX2tlcm5lbF93cml0ZSgoKHZvaWQgKilpcCksIG5ld19jb2RlLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoaXAsIGlwICsgTUNPVU5UX0lOU05fU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmdHJhY2VfbWFrZV9ub3BfY2hlY2soc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpIHJlcGxhY2VkW01DT1VOVF9JTlNOX1NJWkVdOworCXVuc2lnbmVkIGxvbmcgaXAgPSByZWMtPmlwOworCisJaWYgKHByb2JlX2tlcm5lbF9yZWFkKHJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfQ09OVkVSVEVEKSB7CisJCXN0cnVjdCBmdHJhY2VfY2FsbF9pbnNuICpjYWxsX2luc24sICp0bXBfY2FsbDsKKworCQljYWxsX2luc24gPSAodm9pZCAqKWZ0cmFjZV9jYWxsX2NvZGU7CisJCXRtcF9jYWxsID0gKHZvaWQgKilyZXBsYWNlZDsKKwkJY2FsbF9pbnNuLT5pbW0zOV9sID0gdG1wX2NhbGwtPmltbTM5X2w7CisJCWNhbGxfaW5zbi0+aW1tMzlfaCA9IHRtcF9jYWxsLT5pbW0zOV9oOworCQljYWxsX2luc24tPmltbTIwID0gdG1wX2NhbGwtPmltbTIwOworCQljYWxsX2luc24tPmkgPSB0bXBfY2FsbC0+aTsKKwkJaWYgKG1lbWNtcChyZXBsYWNlZCwgZnRyYWNlX2NhbGxfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZnRyYWNlX29yaWdfaW5zbiAqY2FsbF9pbnNuLCAqdG1wX2NhbGw7CisKKwkJY2FsbF9pbnNuID0gKHZvaWQgKilmdHJhY2Vfb3JpZ19jb2RlOworCQl0bXBfY2FsbCA9ICh2b2lkICopcmVwbGFjZWQ7CisJCWNhbGxfaW5zbi0+c2lnbiA9IHRtcF9jYWxsLT5zaWduOworCQljYWxsX2luc24tPmltbTIwID0gdG1wX2NhbGwtPmltbTIwOworCQlpZiAobWVtY21wKHJlcGxhY2VkLCBmdHJhY2Vfb3JpZ19jb2RlLCBNQ09VTlRfSU5TTl9TSVpFKSAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworCX0KK30KKworaW50IGZ0cmFjZV9tYWtlX25vcChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCSAgICBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaW50IHJldDsKKwljaGFyICpuZXc7CisKKwlyZXQgPSBmdHJhY2VfbWFrZV9ub3BfY2hlY2socmVjLCBhZGRyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCW5ldyA9IGZ0cmFjZV9ub3BfcmVwbGFjZSgpOworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocmVjLT5pcCwgTlVMTCwgbmV3LCAwKTsKK30KKworaW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgaXAgPSByZWMtPmlwOworCXVuc2lnbmVkIGNoYXIgKm9sZCwgKm5ldzsKKworCW9sZD0gIGZ0cmFjZV9ub3BfcmVwbGFjZSgpOworCW5ldyA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsIGFkZHIpOworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3LCAxKTsKK30KKworLyogaW4gSUE2NCwgX21jb3VudCBjYW4ndCBkaXJlY3RseSBjYWxsIGZ0cmFjZV9zdHViLiBPbmx5IGp1bXAgaXMgb2sgKi8KK2ludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYykKK3sKKwl1bnNpZ25lZCBsb25nIGlwOworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICgoc3RydWN0IGZucHRyICopZnRyYWNlX2NhbGwpLT5pcDsKKworCWlmIChmdW5jID09IGZ0cmFjZV9zdHViKQorCQlyZXR1cm4gMDsKKwlpcCA9ICgoc3RydWN0IGZucHRyICopZnVuYyktPmlwOworCisJaWE2NF9wYXRjaF9pbW02NChhZGRyICsgMiwgaXApOworCisJZmx1c2hfaWNhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyAxNik7CisJcmV0dXJuIDA7Cit9CisKKy8qIHJ1biBmcm9tIGtzdG9wX21hY2hpbmUgKi8KK2ludCBfX2luaXQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSkKK3sKKwkqKHVuc2lnbmVkIGxvbmcgKilkYXRhID0gMDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwppbmRleCA2ZGExZjIwLi4yZDMxMTg2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwpAQCAtMTEyLDMgKzExMiw5IEBACiAjZW5kaWYKIGV4dGVybiBjaGFyIGlhNjRfaXZ0W107CiBFWFBPUlRfU1lNQk9MKGlhNjRfaXZ0KTsKKworI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisvKiBtY291bnQgaXMgZGVmaW5lZCBpbiBhc3NlbWJseSAqLworRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCBjNTcxNjI3Li41ZDdjMGU1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDEzLDcgKzQxMyw3IEBACiAgKiBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIHdvcnJ5IGFib3V0LgogICovCiBpbnQKLWNvcHlfdGhyZWFkIChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCitjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAogCSAgICAgdW5zaWduZWQgbG9uZyB1c2VyX3N0YWNrX2Jhc2UsIHVuc2lnbmVkIGxvbmcgdXNlcl9zdGFja19zaXplLAogCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNzEwM2Q5MS4uM2U4NzZmMCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCXJldHVybiAwOyAvKiBUYXNrIGRpZG4ndCB1c2UgdGhlIGZwdSBhdCBhbGwuICovCiB9CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3B1LAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3B1LAogCXVuc2lnbmVkIGxvbmcgdW51c2VkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVncyA9IHRhc2tfcHRfcmVncyh0c2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm8uaAppbmRleCBmZWRmM2UzLi5mYjhhMDZiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm8uaApAQCAtMSw1ICsxLDM3OCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiYm9vdGluZm9fbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAiYm9vdGluZm9fbW0uaCIKKy8qCisqKiBhc20vYm9vdGluZm8uaCAtLSBEZWZpbml0aW9uIG9mIHRoZSBMaW51eC9tNjhrIGJvb3QgaW5mb3JtYXRpb24gc3RydWN0dXJlCisqKgorKiogQ29weXJpZ2h0IDE5OTIgYnkgR3JlZyBIYXJwCisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisqKiBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyoqIENyZWF0ZWQgMDkvMjkvOTIgYnkgR3JlZyBIYXJwCisqKgorKiogNS8yLzk0IFJvbWFuIEhvZGVrOgorKiogICBBZGRlZCBiaV9hdGFyaSBwYXJ0IG9mIHRoZSBtYWNoaW5lIGRlcGVuZGVudCB1bmlvbiBiaV91bjsgZm9yIG5vdyBpdAorKiogICBjb250YWlucyBqdXN0IGEgbW9kZWwgZmllbGQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBUVCBhbmQgRmFsY29uLgorKiogMjYvNy85NiBSb21hbiBaaXBwZWw6CisqKiAgIFJlbmFtZWQgdG8gc2V0dXAuaDsgYWRkZWQgc29tZSB1c2VmdWwgbWFjcm9zIHRvIGFsbG93IGdjYyBzb21lCisqKiAgIG9wdGltaXphdGlvbnMgaWYgcG9zc2libGUuCisqKiA1LzEwLzk2IEdlZXJ0IFV5dHRlcmhvZXZlbjoKKyoqICAgUmVkZXNpZ24gb2YgdGhlIGJvb3QgaW5mb3JtYXRpb24gc3RydWN0dXJlOyByZW5hbWVkIHRvIGJvb3RpbmZvLmggYWdhaW4KKyoqIDI3LzExLzk2IEdlZXJ0IFV5dHRlcmhvZXZlbjoKKyoqICAgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBib290aW5mbyBpbnRlcmZhY2UgdmVyc2lvbiAxLjAKKyovCisKKyNpZm5kZWYgX002OEtfQk9PVElORk9fSAorI2RlZmluZSBfTTY4S19CT09USU5GT19ICisKKworICAgIC8qCisgICAgICogIEJvb3RpbmZvIGRlZmluaXRpb25zCisgICAgICoKKyAgICAgKiAgVGhpcyBpcyBhbiBlYXNpbHkgcGFyc2FibGUgYW5kIGV4dGVuZGFibGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgYWxsCisgICAgICogIGluZm9ybWF0aW9uIHRvIGJlIHBhc3NlZCBmcm9tIHRoZSBib290c3RyYXAgdG8gdGhlIGtlcm5lbC4KKyAgICAgKgorICAgICAqICBUaGlzIHdheSBJIGhvcGUgdG8ga2VlcCBhbGwgZnV0dXJlIGNoYW5nZXMgYmFjay9mb3Jld2FyZHMgY29tcGF0aWJsZS4KKyAgICAgKiAgVGh1cywga2VlcCB5b3VyIGZpbmdlcnMgY3Jvc3NlZC4uLgorICAgICAqCisgICAgICogIFRoaXMgc3RydWN0dXJlIGlzIGNvcGllZCByaWdodCBhZnRlciB0aGUga2VybmVsIGJzcyBieSB0aGUgYm9vdHN0cmFwCisgICAgICogIHJvdXRpbmUuCisgICAgICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBiaV9yZWNvcmQgeworICAgIHVuc2lnbmVkIHNob3J0IHRhZzsJCQkvKiB0YWcgSUQgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBzaXplOwkJLyogc2l6ZSBvZiByZWNvcmQgKGluIGJ5dGVzKSAqLworICAgIHVuc2lnbmVkIGxvbmcgZGF0YVswXTsJCS8qIGRhdGEgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisgICAgLyoKKyAgICAgKiAgVGFnIERlZmluaXRpb25zCisgICAgICoKKyAgICAgKiAgTWFjaGluZSBpbmRlcGVuZGVudCB0YWdzIHN0YXJ0IGNvdW50aW5nIGZyb20gMHgwMDAwCisgICAgICogIE1hY2hpbmUgZGVwZW5kZW50IHRhZ3Mgc3RhcnQgY291bnRpbmcgZnJvbSAweDgwMDAKKyAgICAgKi8KKworI2RlZmluZSBCSV9MQVNUCQkJMHgwMDAwCS8qIGxhc3QgcmVjb3JkIChzZW50aW5lbCkgKi8KKyNkZWZpbmUgQklfTUFDSFRZUEUJCTB4MDAwMQkvKiBtYWNoaW5lIHR5cGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQ1BVVFlQRQkJMHgwMDAyCS8qIGNwdSB0eXBlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0ZQVVRZUEUJCTB4MDAwMwkvKiBmcHUgdHlwZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9NTVVUWVBFCQkweDAwMDQJLyogbW11IHR5cGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfTUVNQ0hVTksJCTB4MDAwNQkvKiBtZW1vcnkgY2h1bmsgYWRkcmVzcyBhbmQgc2l6ZSAqLworCQkJCQkvKiAoc3RydWN0IG1lbV9pbmZvKSAqLworI2RlZmluZSBCSV9SQU1ESVNLCQkweDAwMDYJLyogcmFtZGlzayBhZGRyZXNzIGFuZCBzaXplICovCisJCQkJCS8qIChzdHJ1Y3QgbWVtX2luZm8pICovCisjZGVmaW5lIEJJX0NPTU1BTkRfTElORQkJMHgwMDA3CS8qIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyAqLworCQkJCQkvKiAoc3RyaW5nKSAqLworCisgICAgLyoKKyAgICAgKiAgQW1pZ2Etc3BlY2lmaWMgdGFncworICAgICAqLworCisjZGVmaW5lIEJJX0FNSUdBX01PREVMCQkweDgwMDAJLyogbW9kZWwgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQU1JR0FfQVVUT0NPTgkweDgwMDEJLyogQXV0b0NvbmZpZyBkZXZpY2UgKi8KKwkJCQkJLyogKHN0cnVjdCBDb25maWdEZXYpICovCisjZGVmaW5lIEJJX0FNSUdBX0NISVBfU0laRQkweDgwMDIJLyogc2l6ZSBvZiBDaGlwIFJBTSAodV9sb25nKSAqLworI2RlZmluZSBCSV9BTUlHQV9WQkxBTksJCTB4ODAwMwkvKiBWQkxBTksgZnJlcXVlbmN5ICh1X2NoYXIpICovCisjZGVmaW5lIEJJX0FNSUdBX1BTRlJFUQkJMHg4MDA0CS8qIHBvd2VyIHN1cHBseSBmcmVxdWVuY3kgKHVfY2hhcikgKi8KKyNkZWZpbmUgQklfQU1JR0FfRUNMT0NLCQkweDgwMDUJLyogRUNsb2NrIGZyZXF1ZW5jeSAodV9sb25nKSAqLworI2RlZmluZSBCSV9BTUlHQV9DSElQU0VUCTB4ODAwNgkvKiBuYXRpdmUgY2hpcHNldCBwcmVzZW50ICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0FNSUdBX1NFUlBFUgkJMHg4MDA3CS8qIHNlcmlhbCBwb3J0IHBlcmlvZCAodV9zaG9ydCkgKi8KKworICAgIC8qCisgICAgICogIEF0YXJpLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9BVEFSSV9NQ0hfQ09PS0lFCTB4ODAwMAkvKiBfTUNIIGNvb2tpZSBmcm9tIFRPUyAodV9sb25nKSAqLworI2RlZmluZSBCSV9BVEFSSV9NQ0hfVFlQRQkweDgwMDEJLyogc3BlY2lhbCBtYWNoaW5lIHR5cGUgKHVfbG9uZykgKi8KKwkJCQkJLyogKHZhbHVlcyBhcmUgQVRBUklfTUFDSF8qIGRlZmluZXMgKi8KKworLyogbWNoX2Nvb2tpZSB2YWx1ZXMgKHVwcGVyIHdvcmQpICovCisjZGVmaW5lIEFUQVJJX01DSF9TVAkJMAorI2RlZmluZSBBVEFSSV9NQ0hfU1RFCQkxCisjZGVmaW5lIEFUQVJJX01DSF9UVAkJMgorI2RlZmluZSBBVEFSSV9NQ0hfRkFMQ09OCTMKKworLyogbWNoX3R5cGUgdmFsdWVzICovCisjZGVmaW5lIEFUQVJJX01BQ0hfTk9STUFMCTAJLyogbm8gc3BlY2lhbCBtYWNoaW5lIHR5cGUgKi8KKyNkZWZpbmUgQVRBUklfTUFDSF9NRURVU0EJMQkvKiBNZWR1c2EgMDQwICovCisjZGVmaW5lIEFUQVJJX01BQ0hfSEFERVMJMgkvKiBIYWRlcyAwNDAgb3IgMDYwICovCisjZGVmaW5lIEFUQVJJX01BQ0hfQUI0MAkJMwkvKiBBZnRlcmJ1cm5lcjA0MCBvbiBGYWxjb24gKi8KKworICAgIC8qCisgICAgICogIFZNRS1zcGVjaWZpYyB0YWdzCisgICAgICovCisKKyNkZWZpbmUgQklfVk1FX1RZUEUJCTB4ODAwMAkvKiBWTUUgc3ViLWFyY2hpdGVjdHVyZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9WTUVfQlJESU5GTwkJMHg4MDAxCS8qIFZNRSBib2FyZCBpbmZvcm1hdGlvbiAoc3RydWN0KSAqLworCisvKiBCSV9WTUVfVFlQRSBjb2RlcyAqLworI2RlZmluZQlWTUVfVFlQRV9UUDM0VgkJMHgwMDM0CS8qIFRhZHBvbGUgVFAzNFYgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE0NwkweDAxNDcJLyogTW90b3JvbGEgTVZNRTE0NyAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTYyCTB4MDE2MgkvKiBNb3Rvcm9sYSBNVk1FMTYyICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNjYJMHgwMTY2CS8qIE1vdG9yb2xhIE1WTUUxNjYgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE2NwkweDAxNjcJLyogTW90b3JvbGEgTVZNRTE2NyAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTcyCTB4MDE3MgkvKiBNb3Rvcm9sYSBNVk1FMTcyICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNzcJMHgwMTc3CS8qIE1vdG9yb2xhIE1WTUUxNzcgKi8KKyNkZWZpbmUgVk1FX1RZUEVfQlZNRTQwMDAJMHg0MDAwCS8qIEJWTSBMdGQuIEJWTUU0MDAwICovCisjZGVmaW5lIFZNRV9UWVBFX0JWTUU2MDAwCTB4NjAwMAkvKiBCVk0gTHRkLiBCVk1FNjAwMCAqLworCisvKiBCSV9WTUVfQlJESU5GTyBpcyBhIDMyIGJ5dGUgc3RydWN0IGFzIHJldHVybmVkIGJ5IHRoZSBCdWcgY29kZSBvbgorICogTW90b3JvbGEgVk1FIGJvYXJkcy4gIENvbnRhaW5zIGJvYXJkIG51bWJlciwgQnVnIHZlcnNpb24sIGJvYXJkCisgKiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGV0Yy4gIFNlZSBpbmNsdWRlL2FzbS9tdm1lMTZ4aHcuaCBmb3IgZGV0YWlscy4KKyAqLworCisKKyAgICAvKgorICAgICAqICBNYWNpbnRvc2gtc3BlY2lmaWMgdGFncyAoYWxsIHVfbG9uZykKKyAgICAgKi8KKworI2RlZmluZSBCSV9NQUNfTU9ERUwJCTB4ODAwMAkvKiBNYWMgR2VzdGFsdCBJRCAobW9kZWwgdHlwZSkgKi8KKyNkZWZpbmUgQklfTUFDX1ZBRERSCQkweDgwMDEJLyogTWFjIHZpZGVvIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfVkRFUFRICQkweDgwMDIJLyogTWFjIHZpZGVvIGRlcHRoICovCisjZGVmaW5lIEJJX01BQ19WUk9XCQkweDgwMDMJLyogTWFjIHZpZGVvIHJvd2J5dGVzICovCisjZGVmaW5lIEJJX01BQ19WRElNCQkweDgwMDQJLyogTWFjIHZpZGVvIGRpbWVuc2lvbnMgKi8KKyNkZWZpbmUgQklfTUFDX1ZMT0dJQ0FMCQkweDgwMDUJLyogTWFjIHZpZGVvIGxvZ2ljYWwgYmFzZSAqLworI2RlZmluZSBCSV9NQUNfU0NDQkFTRQkJMHg4MDA2CS8qIE1hYyBTQ0MgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJJX01BQ19CVElNRQkJMHg4MDA3CS8qIE1hYyBib290IHRpbWUgKi8KKyNkZWZpbmUgQklfTUFDX0dNVEJJQVMJCTB4ODAwOAkvKiBNYWMgR01UIHRpbWV6b25lIG9mZnNldCAqLworI2RlZmluZSBCSV9NQUNfTUVNU0laRQkJMHg4MDA5CS8qIE1hYyBSQU0gc2l6ZSAoc2FuaXR5IGNoZWNrKSAqLworI2RlZmluZSBCSV9NQUNfQ1BVSUQJCTB4ODAwYQkvKiBNYWMgQ1BVIHR5cGUgKHNhbml0eSBjaGVjaykgKi8KKyNkZWZpbmUgQklfTUFDX1JPTUJBU0UJCTB4ODAwYgkvKiBNYWMgc3lzdGVtIFJPTSBiYXNlIGFkZHJlc3MgKi8KKworICAgIC8qCisgICAgICogIE1hY2ludG9zaCBoYXJkd2FyZSBwcm9maWxlIGRhdGEgLSB1bnVzZWQsIHNlZSBtYWNpbnRvc2guaCBmb3IKKyAgICAgKiAgcmVzb25hYmxlIHR5cGUgdmFsdWVzCisgICAgICovCisKKyNkZWZpbmUgQklfTUFDX1ZJQTFCQVNFCQkweDgwMTAJLyogTWFjIFZJQTEgYmFzZSBhZGRyZXNzIChhbHdheXMgcHJlc2VudCkgKi8KKyNkZWZpbmUgQklfTUFDX1ZJQTJCQVNFCQkweDgwMTEJLyogTWFjIFZJQTIgYmFzZSBhZGRyZXNzICh0eXBlIHZhcmllcykgKi8KKyNkZWZpbmUgQklfTUFDX1ZJQTJUWVBFCQkweDgwMTIJLyogTWFjIFZJQTIgdHlwZSAoVklBLCBSQlYsIE9TUykgKi8KKyNkZWZpbmUgQklfTUFDX0FEQlRZUEUJCTB4ODAxMwkvKiBNYWMgQURCIGludGVyZmFjZSB0eXBlICovCisjZGVmaW5lIEJJX01BQ19BU0NCQVNFCQkweDgwMTQJLyogTWFjIEFwcGxlIFNvdW5kIENoaXAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJJX01BQ19TQ1NJNTM4MAkJMHg4MDE1CS8qIE1hYyBOQ1IgNTM4MCBTQ1NJIChiYXNlIGFkZHJlc3MsIG11bHRpKSAqLworI2RlZmluZSBCSV9NQUNfU0NTSURNQQkJMHg4MDE2CS8qIE1hYyBTQ1NJIERNQSAoYmFzZSBhZGRyZXNzKSAqLworI2RlZmluZSBCSV9NQUNfU0NTSTUzOTYJCTB4ODAxNwkvKiBNYWMgTkNSIDUzQzk2IFNDU0kgKGJhc2UgYWRkcmVzcywgbXVsdGkpICovCisjZGVmaW5lIEJJX01BQ19JREVUWVBFCQkweDgwMTgJLyogTWFjIElERSBpbnRlcmZhY2UgdHlwZSAqLworI2RlZmluZSBCSV9NQUNfSURFQkFTRQkJMHg4MDE5CS8qIE1hYyBJREUgaW50ZXJmYWNlIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfTlVCVVMJCTB4ODAxYQkvKiBNYWMgTnVidXMgdHlwZSAobm9uZSwgcmVndWxhciwgcHNldWRvKSAqLworI2RlZmluZSBCSV9NQUNfU0xPVE1BU0sJCTB4ODAxYgkvKiBNYWMgTnVidXMgc2xvdHMgcHJlc2VudCAqLworI2RlZmluZSBCSV9NQUNfU0NDVFlQRQkJMHg4MDFjCS8qIE1hYyBTQ0Mgc2VyaWFsIHR5cGUgKG5vcm1hbCwgSU9QKSAqLworI2RlZmluZSBCSV9NQUNfRVRIVFlQRQkJMHg4MDFkCS8qIE1hYyBidWlsdGluIGV0aGVybmV0IHR5cGUgKFNvbmljLCBNQUNFICovCisjZGVmaW5lIEJJX01BQ19FVEhCQVNFCQkweDgwMWUJLyogTWFjIGJ1aWx0aW4gZXRoZXJuZXQgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJJX01BQ19QTVUJCTB4ODAxZgkvKiBNYWMgcG93ZXIgbWFuYWdlbWVudCAvIHBvd2Vyb2ZmIGhhcmR3YXJlICovCisjZGVmaW5lIEJJX01BQ19JT1BfU1dJTQkJMHg4MDIwCS8qIE1hYyBTV0lNIGZsb3BweSBJT1AgKi8KKyNkZWZpbmUgQklfTUFDX0lPUF9BREIJCTB4ODAyMQkvKiBNYWMgQURCIElPUCAqLworCisgICAgLyoKKyAgICAgKiBNYWM6IGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgYm9vdGVyIGRhdGEgZm9ybWF0ICh0ZW1wb3JhcmlseSkKKyAgICAgKiBGaWVsZHMgdW51c2VkIHdpdGggdGhlIG5ldyBib290aW5mbyBjYW4gYmUgZGVsZXRlZCBub3c7IGluc3RlYWQgb2YKKyAgICAgKiBhZGRpbmcgbmV3IGZpZWxkcyB0aGUgc3RydWN0IG1pZ2h0IGJlIHNwbGl0dGVkIGludG8gYSBoYXJkd2FyZSBhZGRyZXNzCisgICAgICogcGFydCBhbmQgYSBoYXJkd2FyZSB0eXBlIHBhcnQKKyAgICAgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IG1hY19ib290ZXJfZGF0YQoreworCXVuc2lnbmVkIGxvbmcgdmlkZW9hZGRyOworCXVuc2lnbmVkIGxvbmcgdmlkZW9yb3c7CisJdW5zaWduZWQgbG9uZyB2aWRlb2RlcHRoOworCXVuc2lnbmVkIGxvbmcgZGltZW5zaW9uczsKKwl1bnNpZ25lZCBsb25nIGFyZ3M7CisJdW5zaWduZWQgbG9uZyBib290dGltZTsKKwl1bnNpZ25lZCBsb25nIGdtdGJpYXM7CisJdW5zaWduZWQgbG9uZyBib290dmVyOworCXVuc2lnbmVkIGxvbmcgdmlkZW9sb2dpY2FsOworCXVuc2lnbmVkIGxvbmcgc2NjYmFzZTsKKwl1bnNpZ25lZCBsb25nIGlkOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbG1mOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsaHNrOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsZ3BpOworCXVuc2lnbmVkIGxvbmcgcHJpbnRtZjsKKwl1bnNpZ25lZCBsb25nIHByaW50aHNrOworCXVuc2lnbmVkIGxvbmcgcHJpbnRncGk7CisJdW5zaWduZWQgbG9uZyBjcHVpZDsKKwl1bnNpZ25lZCBsb25nIHJvbWJhc2U7CisJdW5zaWduZWQgbG9uZyBhZGJkZWxheTsKKwl1bnNpZ25lZCBsb25nIHRpbWVkYnJhOworfTsKKworZXh0ZXJuIHN0cnVjdCBtYWNfYm9vdGVyX2RhdGEKKwltYWNfYmlfZGF0YTsKKwogI2VuZGlmCisKKyAgICAvKgorICAgICAqICBBcG9sbG8tc3BlY2lmaWMgdGFncworICAgICAqLworCisjZGVmaW5lIEJJX0FQT0xMT19NT0RFTCAgICAgICAgIDB4ODAwMCAgLyogbW9kZWwgKHVfbG9uZykgKi8KKworICAgIC8qCisgICAgICogIEhQMzAwLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9IUDMwMF9NT0RFTAkJMHg4MDAwCS8qIG1vZGVsICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0hQMzAwX1VBUlRfU0NPREUJMHg4MDAxCS8qIFVBUlQgc2VsZWN0IGNvZGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfSFAzMDBfVUFSVF9BRERSCTB4ODAwMgkvKiBwaHlzLiBhZGRyIG9mIFVBUlQgKHVfbG9uZykgKi8KKworICAgIC8qCisgICAgICogU3R1ZmYgZm9yIGJvb3RpbmZvIGludGVyZmFjZSB2ZXJzaW9uaW5nCisgICAgICoKKyAgICAgKiBBdCB0aGUgc3RhcnQgb2Yga2VybmVsIGNvZGUsIGEgJ3N0cnVjdCBib290dmVyc2lvbicgaXMgbG9jYXRlZC4KKyAgICAgKiBib290c3RyYXAgY2hlY2tzIGZvciBhIG1hdGNoaW5nIHZlcnNpb24gb2YgdGhlIGludGVyZmFjZSBiZWZvcmUgYm9vdGluZworICAgICAqIGEga2VybmVsLCB0byBhdm9pZCB1c2VyIGNvbmZ1c2lvbiBpZiBrZXJuZWwgYW5kIGJvb3RzdHJhcCBkb24ndCB3b3JrCisgICAgICogdG9nZXRoZXIgOi0pCisgICAgICoKKyAgICAgKiBJZiBpbmNvbXBhdGlibGUgY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgYm9vdGluZm8gaW50ZXJmYWNlLCB0aGUgbWFqb3IKKyAgICAgKiBudW1iZXIgYmVsb3cgc2hvdWxkIGJlIHN0ZXBwZWQgKGFuZCB0aGUgbWlub3IgcmVzZXQgdG8gMCkgZm9yIHRoZQorICAgICAqIGFwcHJvcHJpYXRlIG1hY2hpbmUuIElmIGEgY2hhbmdlIGlzIGJhY2t3YXJkLWNvbXBhdGlibGUsIHRoZSBtaW5vcgorICAgICAqIHNob3VsZCBiZSBzdGVwcGVkLiAiQmFja3dhcmRzLWNvbXBhdGlibGUiIG1lYW5zIHRoYXQgYm9vdGluZyB3aWxsIHdvcmssCisgICAgICogYnV0IGNlcnRhaW4gZmVhdHVyZXMgbWF5IG5vdC4KKyAgICAgKi8KKworI2RlZmluZSBCT09USU5GT1ZfTUFHSUMJCQkweDQyNDk1NjFBCS8qICdCSVZeWicgKi8KKyNkZWZpbmUgTUtfQklfVkVSU0lPTihtYWpvcixtaW5vcikJKCgobWFqb3IpPDwxNikrKG1pbm9yKSkKKyNkZWZpbmUgQklfVkVSU0lPTl9NQUpPUih2KQkJKCgodikgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBCSV9WRVJTSU9OX01JTk9SKHYpCQkoKHYpICYgMHhmZmZmKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgYm9vdHZlcnNpb24geworICAgIHVuc2lnbmVkIHNob3J0IGJyYW5jaDsKKyAgICB1bnNpZ25lZCBsb25nIG1hZ2ljOworICAgIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBtYWNodHlwZTsKKwl1bnNpZ25lZCBsb25nIHZlcnNpb247CisgICAgfSBtYWNodmVyc2lvbnNbMF07Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgQU1JR0FfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgQVRBUklfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAyLCAxICkKKyNkZWZpbmUgTUFDX0JPT1RJX1ZFUlNJT04gICAgICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgTVZNRTE0N19CT09USV9WRVJTSU9OICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgTVZNRTE2eF9CT09USV9WRVJTSU9OICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgQlZNRTYwMDBfQk9PVElfVkVSU0lPTiBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgUTQwX0JPT1RJX1ZFUlNJT04gICAgICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgSFAzMDBfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKworI2lmZGVmIEJPT1RJTkZPX0NPTVBBVF8xXzAKKworICAgIC8qCisgICAgICogIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggYm9vdGluZm8gaW50ZXJmYWNlIHZlcnNpb24gMS4wCisgICAgICovCisKKyNkZWZpbmUgQ09NUEFUX0FNSUdBX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMSwgMCApCisjZGVmaW5lIENPTVBBVF9BVEFSSV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDEsIDAgKQorI2RlZmluZSBDT01QQVRfTUFDX0JPT1RJX1ZFUlNJT04gICAgICBNS19CSV9WRVJTSU9OKCAxLCAwICkKKworI2luY2x1ZGUgPGxpbnV4L3pvcnJvLmg+CisKKyNkZWZpbmUgQ09NUEFUX05VTV9BVVRPICAgIDE2CisKK3N0cnVjdCBjb21wYXRfYmlfQW1pZ2EgeworICAgIGludCBtb2RlbDsKKyAgICBpbnQgbnVtX2F1dG9jb247CisgICAgc3RydWN0IENvbmZpZ0RldiBhdXRvY29uW0NPTVBBVF9OVU1fQVVUT107CisgICAgdW5zaWduZWQgbG9uZyBjaGlwX3NpemU7CisgICAgdW5zaWduZWQgY2hhciB2Ymxhbms7CisgICAgdW5zaWduZWQgY2hhciBwc2ZyZXE7CisgICAgdW5zaWduZWQgbG9uZyBlY2xvY2s7CisgICAgdW5zaWduZWQgbG9uZyBjaGlwc2V0OworICAgIHVuc2lnbmVkIGxvbmcgaHdfcHJlc2VudDsKK307CisKK3N0cnVjdCBjb21wYXRfYmlfQXRhcmkgeworICAgIHVuc2lnbmVkIGxvbmcgaHdfcHJlc2VudDsKKyAgICB1bnNpZ25lZCBsb25nIG1jaF9jb29raWU7Cit9OworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgY29tcGF0X2JpX01hY2ludG9zaAoreworCXVuc2lnbmVkIGxvbmcgdmlkZW9hZGRyOworCXVuc2lnbmVkIGxvbmcgdmlkZW9yb3c7CisJdW5zaWduZWQgbG9uZyB2aWRlb2RlcHRoOworCXVuc2lnbmVkIGxvbmcgZGltZW5zaW9uczsKKwl1bnNpZ25lZCBsb25nIGFyZ3M7CisJdW5zaWduZWQgbG9uZyBib290dGltZTsKKwl1bnNpZ25lZCBsb25nIGdtdGJpYXM7CisJdW5zaWduZWQgbG9uZyBib290dmVyOworCXVuc2lnbmVkIGxvbmcgdmlkZW9sb2dpY2FsOworCXVuc2lnbmVkIGxvbmcgc2NjYmFzZTsKKwl1bnNpZ25lZCBsb25nIGlkOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbG1mOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsaHNrOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsZ3BpOworCXVuc2lnbmVkIGxvbmcgcHJpbnRtZjsKKwl1bnNpZ25lZCBsb25nIHByaW50aHNrOworCXVuc2lnbmVkIGxvbmcgcHJpbnRncGk7CisJdW5zaWduZWQgbG9uZyBjcHVpZDsKKwl1bnNpZ25lZCBsb25nIHJvbWJhc2U7CisJdW5zaWduZWQgbG9uZyBhZGJkZWxheTsKKwl1bnNpZ25lZCBsb25nIHRpbWVkYnJhOworfTsKKworI2VuZGlmCisKK3N0cnVjdCBjb21wYXRfbWVtX2luZm8geworICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKyAgICB1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCisjZGVmaW5lIENPTVBBVF9OVU1fTUVNSU5GTyAgNAorCisjZGVmaW5lIENPTVBBVF9DUFVCXzY4MDIwIDAKKyNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwMzAgMQorI2RlZmluZSBDT01QQVRfQ1BVQl82ODA0MCAyCisjZGVmaW5lIENPTVBBVF9DUFVCXzY4MDYwIDMKKyNkZWZpbmUgQ09NUEFUX0ZQVUJfNjg4ODEgNQorI2RlZmluZSBDT01QQVRfRlBVQl82ODg4MiA2CisjZGVmaW5lIENPTVBBVF9GUFVCXzY4MDQwIDcKKyNkZWZpbmUgQ09NUEFUX0ZQVUJfNjgwNjAgOAorCisjZGVmaW5lIENPTVBBVF9DUFVfNjgwMjAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDIwKQorI2RlZmluZSBDT01QQVRfQ1BVXzY4MDMwICAgICgxPDxDT01QQVRfQ1BVQl82ODAzMCkKKyNkZWZpbmUgQ09NUEFUX0NQVV82ODA0MCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwNDApCisjZGVmaW5lIENPTVBBVF9DUFVfNjgwNjAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDYwKQorI2RlZmluZSBDT01QQVRfQ1BVX01BU0sgICAgICgzMSkKKyNkZWZpbmUgQ09NUEFUX0ZQVV82ODg4MSAgICAoMTw8Q09NUEFUX0ZQVUJfNjg4ODEpCisjZGVmaW5lIENPTVBBVF9GUFVfNjg4ODIgICAgKDE8PENPTVBBVF9GUFVCXzY4ODgyKQorI2RlZmluZSBDT01QQVRfRlBVXzY4MDQwICAgICgxPDxDT01QQVRfRlBVQl82ODA0MCkKKyNkZWZpbmUgQ09NUEFUX0ZQVV82ODA2MCAgICAoMTw8Q09NUEFUX0ZQVUJfNjgwNjApCisjZGVmaW5lIENPTVBBVF9GUFVfTUFTSyAgICAgKDB4ZmUwKQorCisjZGVmaW5lIENPTVBBVF9DTF9TSVpFICAgICAgKDI1NikKKworc3RydWN0IGNvbXBhdF9ib290aW5mbyB7CisgICAgdW5zaWduZWQgbG9uZyBtYWNodHlwZTsKKyAgICB1bnNpZ25lZCBsb25nIGNwdXR5cGU7CisgICAgc3RydWN0IGNvbXBhdF9tZW1faW5mbyBtZW1vcnlbQ09NUEFUX05VTV9NRU1JTkZPXTsKKyAgICBpbnQgbnVtX21lbW9yeTsKKyAgICB1bnNpZ25lZCBsb25nIHJhbWRpc2tfc2l6ZTsKKyAgICB1bnNpZ25lZCBsb25nIHJhbWRpc2tfYWRkcjsKKyAgICBjaGFyIGNvbW1hbmRfbGluZVtDT01QQVRfQ0xfU0laRV07CisgICAgdW5pb24geworCXN0cnVjdCBjb21wYXRfYmlfQW1pZ2EgICAgIGJpX2FtaTsKKwlzdHJ1Y3QgY29tcGF0X2JpX0F0YXJpICAgICBiaV9hdGE7CisJc3RydWN0IGNvbXBhdF9iaV9NYWNpbnRvc2ggYmlfbWFjOworICAgIH0gYmlfdW47Cit9OworCisjZGVmaW5lIGJpX2FtaWdhCWJpX3VuLmJpX2FtaQorI2RlZmluZSBiaV9hdGFyaQliaV91bi5iaV9hdGEKKyNkZWZpbmUgYmlfbWFjCQliaV91bi5iaV9tYWMKKworI2VuZGlmIC8qIEJPT1RJTkZPX0NPTVBBVF8xXzAgKi8KKworCisjZW5kaWYgLyogX002OEtfQk9PVElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm9fbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI4YTA2Yi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm9fbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKgotKiogYXNtL2Jvb3RpbmZvLmggLS0gRGVmaW5pdGlvbiBvZiB0aGUgTGludXgvbTY4ayBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZQotKioKLSoqIENvcHlyaWdodCAxOTkyIGJ5IEdyZWcgSGFycAotKioKLSoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0qKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotKiogZm9yIG1vcmUgZGV0YWlscy4KLSoqCi0qKiBDcmVhdGVkIDA5LzI5LzkyIGJ5IEdyZWcgSGFycAotKioKLSoqIDUvMi85NCBSb21hbiBIb2RlazoKLSoqICAgQWRkZWQgYmlfYXRhcmkgcGFydCBvZiB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdW5pb24gYmlfdW47IGZvciBub3cgaXQKLSoqICAgY29udGFpbnMganVzdCBhIG1vZGVsIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gVFQgYW5kIEZhbGNvbi4KLSoqIDI2LzcvOTYgUm9tYW4gWmlwcGVsOgotKiogICBSZW5hbWVkIHRvIHNldHVwLmg7IGFkZGVkIHNvbWUgdXNlZnVsIG1hY3JvcyB0byBhbGxvdyBnY2Mgc29tZQotKiogICBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgotKiogNS8xMC85NiBHZWVydCBVeXR0ZXJob2V2ZW46Ci0qKiAgIFJlZGVzaWduIG9mIHRoZSBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZTsgcmVuYW1lZCB0byBib290aW5mby5oIGFnYWluCi0qKiAyNy8xMS85NiBHZWVydCBVeXR0ZXJob2V2ZW46Ci0qKiAgIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggYm9vdGluZm8gaW50ZXJmYWNlIHZlcnNpb24gMS4wCi0qLwotCi0jaWZuZGVmIF9NNjhLX0JPT1RJTkZPX0gKLSNkZWZpbmUgX002OEtfQk9PVElORk9fSAotCi0KLSAgICAvKgotICAgICAqICBCb290aW5mbyBkZWZpbml0aW9ucwotICAgICAqCi0gICAgICogIFRoaXMgaXMgYW4gZWFzaWx5IHBhcnNhYmxlIGFuZCBleHRlbmRhYmxlIHN0cnVjdHVyZSBjb250YWluaW5nIGFsbAotICAgICAqICBpbmZvcm1hdGlvbiB0byBiZSBwYXNzZWQgZnJvbSB0aGUgYm9vdHN0cmFwIHRvIHRoZSBrZXJuZWwuCi0gICAgICoKLSAgICAgKiAgVGhpcyB3YXkgSSBob3BlIHRvIGtlZXAgYWxsIGZ1dHVyZSBjaGFuZ2VzIGJhY2svZm9yZXdhcmRzIGNvbXBhdGlibGUuCi0gICAgICogIFRodXMsIGtlZXAgeW91ciBmaW5nZXJzIGNyb3NzZWQuLi4KLSAgICAgKgotICAgICAqICBUaGlzIHN0cnVjdHVyZSBpcyBjb3BpZWQgcmlnaHQgYWZ0ZXIgdGhlIGtlcm5lbCBic3MgYnkgdGhlIGJvb3RzdHJhcAotICAgICAqICByb3V0aW5lLgotICAgICAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1zdHJ1Y3QgYmlfcmVjb3JkIHsKLSAgICB1bnNpZ25lZCBzaG9ydCB0YWc7CQkJLyogdGFnIElEICovCi0gICAgdW5zaWduZWQgc2hvcnQgc2l6ZTsJCS8qIHNpemUgb2YgcmVjb3JkIChpbiBieXRlcykgKi8KLSAgICB1bnNpZ25lZCBsb25nIGRhdGFbMF07CQkvKiBkYXRhICovCi19OwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLQotICAgIC8qCi0gICAgICogIFRhZyBEZWZpbml0aW9ucwotICAgICAqCi0gICAgICogIE1hY2hpbmUgaW5kZXBlbmRlbnQgdGFncyBzdGFydCBjb3VudGluZyBmcm9tIDB4MDAwMAotICAgICAqICBNYWNoaW5lIGRlcGVuZGVudCB0YWdzIHN0YXJ0IGNvdW50aW5nIGZyb20gMHg4MDAwCi0gICAgICovCi0KLSNkZWZpbmUgQklfTEFTVAkJCTB4MDAwMAkvKiBsYXN0IHJlY29yZCAoc2VudGluZWwpICovCi0jZGVmaW5lIEJJX01BQ0hUWVBFCQkweDAwMDEJLyogbWFjaGluZSB0eXBlICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0NQVVRZUEUJCTB4MDAwMgkvKiBjcHUgdHlwZSAodV9sb25nKSAqLwotI2RlZmluZSBCSV9GUFVUWVBFCQkweDAwMDMJLyogZnB1IHR5cGUgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfTU1VVFlQRQkJMHgwMDA0CS8qIG1tdSB0eXBlICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX01FTUNIVU5LCQkweDAwMDUJLyogbWVtb3J5IGNodW5rIGFkZHJlc3MgYW5kIHNpemUgKi8KLQkJCQkJLyogKHN0cnVjdCBtZW1faW5mbykgKi8KLSNkZWZpbmUgQklfUkFNRElTSwkJMHgwMDA2CS8qIHJhbWRpc2sgYWRkcmVzcyBhbmQgc2l6ZSAqLwotCQkJCQkvKiAoc3RydWN0IG1lbV9pbmZvKSAqLwotI2RlZmluZSBCSV9DT01NQU5EX0xJTkUJCTB4MDAwNwkvKiBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKi8KLQkJCQkJLyogKHN0cmluZykgKi8KLQotICAgIC8qCi0gICAgICogIEFtaWdhLXNwZWNpZmljIHRhZ3MKLSAgICAgKi8KLQotI2RlZmluZSBCSV9BTUlHQV9NT0RFTAkJMHg4MDAwCS8qIG1vZGVsICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0FNSUdBX0FVVE9DT04JMHg4MDAxCS8qIEF1dG9Db25maWcgZGV2aWNlICovCi0JCQkJCS8qIChzdHJ1Y3QgQ29uZmlnRGV2KSAqLwotI2RlZmluZSBCSV9BTUlHQV9DSElQX1NJWkUJMHg4MDAyCS8qIHNpemUgb2YgQ2hpcCBSQU0gKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfQU1JR0FfVkJMQU5LCQkweDgwMDMJLyogVkJMQU5LIGZyZXF1ZW5jeSAodV9jaGFyKSAqLwotI2RlZmluZSBCSV9BTUlHQV9QU0ZSRVEJCTB4ODAwNAkvKiBwb3dlciBzdXBwbHkgZnJlcXVlbmN5ICh1X2NoYXIpICovCi0jZGVmaW5lIEJJX0FNSUdBX0VDTE9DSwkJMHg4MDA1CS8qIEVDbG9jayBmcmVxdWVuY3kgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfQU1JR0FfQ0hJUFNFVAkweDgwMDYJLyogbmF0aXZlIGNoaXBzZXQgcHJlc2VudCAodV9sb25nKSAqLwotI2RlZmluZSBCSV9BTUlHQV9TRVJQRVIJCTB4ODAwNwkvKiBzZXJpYWwgcG9ydCBwZXJpb2QgKHVfc2hvcnQpICovCi0KLSAgICAvKgotICAgICAqICBBdGFyaS1zcGVjaWZpYyB0YWdzCi0gICAgICovCi0KLSNkZWZpbmUgQklfQVRBUklfTUNIX0NPT0tJRQkweDgwMDAJLyogX01DSCBjb29raWUgZnJvbSBUT1MgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfQVRBUklfTUNIX1RZUEUJMHg4MDAxCS8qIHNwZWNpYWwgbWFjaGluZSB0eXBlICh1X2xvbmcpICovCi0JCQkJCS8qICh2YWx1ZXMgYXJlIEFUQVJJX01BQ0hfKiBkZWZpbmVzICovCi0KLS8qIG1jaF9jb29raWUgdmFsdWVzICh1cHBlciB3b3JkKSAqLwotI2RlZmluZSBBVEFSSV9NQ0hfU1QJCTAKLSNkZWZpbmUgQVRBUklfTUNIX1NURQkJMQotI2RlZmluZSBBVEFSSV9NQ0hfVFQJCTIKLSNkZWZpbmUgQVRBUklfTUNIX0ZBTENPTgkzCi0KLS8qIG1jaF90eXBlIHZhbHVlcyAqLwotI2RlZmluZSBBVEFSSV9NQUNIX05PUk1BTAkwCS8qIG5vIHNwZWNpYWwgbWFjaGluZSB0eXBlICovCi0jZGVmaW5lIEFUQVJJX01BQ0hfTUVEVVNBCTEJLyogTWVkdXNhIDA0MCAqLwotI2RlZmluZSBBVEFSSV9NQUNIX0hBREVTCTIJLyogSGFkZXMgMDQwIG9yIDA2MCAqLwotI2RlZmluZSBBVEFSSV9NQUNIX0FCNDAJCTMJLyogQWZ0ZXJidXJuZXIwNDAgb24gRmFsY29uICovCi0KLSAgICAvKgotICAgICAqICBWTUUtc3BlY2lmaWMgdGFncwotICAgICAqLwotCi0jZGVmaW5lIEJJX1ZNRV9UWVBFCQkweDgwMDAJLyogVk1FIHN1Yi1hcmNoaXRlY3R1cmUgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfVk1FX0JSRElORk8JCTB4ODAwMQkvKiBWTUUgYm9hcmQgaW5mb3JtYXRpb24gKHN0cnVjdCkgKi8KLQotLyogQklfVk1FX1RZUEUgY29kZXMgKi8KLSNkZWZpbmUJVk1FX1RZUEVfVFAzNFYJCTB4MDAzNAkvKiBUYWRwb2xlIFRQMzRWICovCi0jZGVmaW5lIFZNRV9UWVBFX01WTUUxNDcJMHgwMTQ3CS8qIE1vdG9yb2xhIE1WTUUxNDcgKi8KLSNkZWZpbmUgVk1FX1RZUEVfTVZNRTE2MgkweDAxNjIJLyogTW90b3JvbGEgTVZNRTE2MiAqLwotI2RlZmluZSBWTUVfVFlQRV9NVk1FMTY2CTB4MDE2NgkvKiBNb3Rvcm9sYSBNVk1FMTY2ICovCi0jZGVmaW5lIFZNRV9UWVBFX01WTUUxNjcJMHgwMTY3CS8qIE1vdG9yb2xhIE1WTUUxNjcgKi8KLSNkZWZpbmUgVk1FX1RZUEVfTVZNRTE3MgkweDAxNzIJLyogTW90b3JvbGEgTVZNRTE3MiAqLwotI2RlZmluZSBWTUVfVFlQRV9NVk1FMTc3CTB4MDE3NwkvKiBNb3Rvcm9sYSBNVk1FMTc3ICovCi0jZGVmaW5lIFZNRV9UWVBFX0JWTUU0MDAwCTB4NDAwMAkvKiBCVk0gTHRkLiBCVk1FNDAwMCAqLwotI2RlZmluZSBWTUVfVFlQRV9CVk1FNjAwMAkweDYwMDAJLyogQlZNIEx0ZC4gQlZNRTYwMDAgKi8KLQotLyogQklfVk1FX0JSRElORk8gaXMgYSAzMiBieXRlIHN0cnVjdCBhcyByZXR1cm5lZCBieSB0aGUgQnVnIGNvZGUgb24KLSAqIE1vdG9yb2xhIFZNRSBib2FyZHMuICBDb250YWlucyBib2FyZCBudW1iZXIsIEJ1ZyB2ZXJzaW9uLCBib2FyZAotICogY29uZmlndXJhdGlvbiBvcHRpb25zLCBldGMuICBTZWUgaW5jbHVkZS9hc20vbXZtZTE2eGh3LmggZm9yIGRldGFpbHMuCi0gKi8KLQotCi0gICAgLyoKLSAgICAgKiAgTWFjaW50b3NoLXNwZWNpZmljIHRhZ3MgKGFsbCB1X2xvbmcpCi0gICAgICovCi0KLSNkZWZpbmUgQklfTUFDX01PREVMCQkweDgwMDAJLyogTWFjIEdlc3RhbHQgSUQgKG1vZGVsIHR5cGUpICovCi0jZGVmaW5lIEJJX01BQ19WQUREUgkJMHg4MDAxCS8qIE1hYyB2aWRlbyBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQklfTUFDX1ZERVBUSAkJMHg4MDAyCS8qIE1hYyB2aWRlbyBkZXB0aCAqLwotI2RlZmluZSBCSV9NQUNfVlJPVwkJMHg4MDAzCS8qIE1hYyB2aWRlbyByb3dieXRlcyAqLwotI2RlZmluZSBCSV9NQUNfVkRJTQkJMHg4MDA0CS8qIE1hYyB2aWRlbyBkaW1lbnNpb25zICovCi0jZGVmaW5lIEJJX01BQ19WTE9HSUNBTAkJMHg4MDA1CS8qIE1hYyB2aWRlbyBsb2dpY2FsIGJhc2UgKi8KLSNkZWZpbmUgQklfTUFDX1NDQ0JBU0UJCTB4ODAwNgkvKiBNYWMgU0NDIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBCSV9NQUNfQlRJTUUJCTB4ODAwNwkvKiBNYWMgYm9vdCB0aW1lICovCi0jZGVmaW5lIEJJX01BQ19HTVRCSUFTCQkweDgwMDgJLyogTWFjIEdNVCB0aW1lem9uZSBvZmZzZXQgKi8KLSNkZWZpbmUgQklfTUFDX01FTVNJWkUJCTB4ODAwOQkvKiBNYWMgUkFNIHNpemUgKHNhbml0eSBjaGVjaykgKi8KLSNkZWZpbmUgQklfTUFDX0NQVUlECQkweDgwMGEJLyogTWFjIENQVSB0eXBlIChzYW5pdHkgY2hlY2spICovCi0jZGVmaW5lIEJJX01BQ19ST01CQVNFCQkweDgwMGIJLyogTWFjIHN5c3RlbSBST00gYmFzZSBhZGRyZXNzICovCi0KLSAgICAvKgotICAgICAqICBNYWNpbnRvc2ggaGFyZHdhcmUgcHJvZmlsZSBkYXRhIC0gdW51c2VkLCBzZWUgbWFjaW50b3NoLmggZm9yCi0gICAgICogIHJlc29uYWJsZSB0eXBlIHZhbHVlcwotICAgICAqLwotCi0jZGVmaW5lIEJJX01BQ19WSUExQkFTRQkJMHg4MDEwCS8qIE1hYyBWSUExIGJhc2UgYWRkcmVzcyAoYWx3YXlzIHByZXNlbnQpICovCi0jZGVmaW5lIEJJX01BQ19WSUEyQkFTRQkJMHg4MDExCS8qIE1hYyBWSUEyIGJhc2UgYWRkcmVzcyAodHlwZSB2YXJpZXMpICovCi0jZGVmaW5lIEJJX01BQ19WSUEyVFlQRQkJMHg4MDEyCS8qIE1hYyBWSUEyIHR5cGUgKFZJQSwgUkJWLCBPU1MpICovCi0jZGVmaW5lIEJJX01BQ19BREJUWVBFCQkweDgwMTMJLyogTWFjIEFEQiBpbnRlcmZhY2UgdHlwZSAqLwotI2RlZmluZSBCSV9NQUNfQVNDQkFTRQkJMHg4MDE0CS8qIE1hYyBBcHBsZSBTb3VuZCBDaGlwIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBCSV9NQUNfU0NTSTUzODAJCTB4ODAxNQkvKiBNYWMgTkNSIDUzODAgU0NTSSAoYmFzZSBhZGRyZXNzLCBtdWx0aSkgKi8KLSNkZWZpbmUgQklfTUFDX1NDU0lETUEJCTB4ODAxNgkvKiBNYWMgU0NTSSBETUEgKGJhc2UgYWRkcmVzcykgKi8KLSNkZWZpbmUgQklfTUFDX1NDU0k1Mzk2CQkweDgwMTcJLyogTWFjIE5DUiA1M0M5NiBTQ1NJIChiYXNlIGFkZHJlc3MsIG11bHRpKSAqLwotI2RlZmluZSBCSV9NQUNfSURFVFlQRQkJMHg4MDE4CS8qIE1hYyBJREUgaW50ZXJmYWNlIHR5cGUgKi8KLSNkZWZpbmUgQklfTUFDX0lERUJBU0UJCTB4ODAxOQkvKiBNYWMgSURFIGludGVyZmFjZSBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQklfTUFDX05VQlVTCQkweDgwMWEJLyogTWFjIE51YnVzIHR5cGUgKG5vbmUsIHJlZ3VsYXIsIHBzZXVkbykgKi8KLSNkZWZpbmUgQklfTUFDX1NMT1RNQVNLCQkweDgwMWIJLyogTWFjIE51YnVzIHNsb3RzIHByZXNlbnQgKi8KLSNkZWZpbmUgQklfTUFDX1NDQ1RZUEUJCTB4ODAxYwkvKiBNYWMgU0NDIHNlcmlhbCB0eXBlIChub3JtYWwsIElPUCkgKi8KLSNkZWZpbmUgQklfTUFDX0VUSFRZUEUJCTB4ODAxZAkvKiBNYWMgYnVpbHRpbiBldGhlcm5ldCB0eXBlIChTb25pYywgTUFDRSAqLwotI2RlZmluZSBCSV9NQUNfRVRIQkFTRQkJMHg4MDFlCS8qIE1hYyBidWlsdGluIGV0aGVybmV0IGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBCSV9NQUNfUE1VCQkweDgwMWYJLyogTWFjIHBvd2VyIG1hbmFnZW1lbnQgLyBwb3dlcm9mZiBoYXJkd2FyZSAqLwotI2RlZmluZSBCSV9NQUNfSU9QX1NXSU0JCTB4ODAyMAkvKiBNYWMgU1dJTSBmbG9wcHkgSU9QICovCi0jZGVmaW5lIEJJX01BQ19JT1BfQURCCQkweDgwMjEJLyogTWFjIEFEQiBJT1AgKi8KLQotICAgIC8qCi0gICAgICogTWFjOiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGJvb3RlciBkYXRhIGZvcm1hdCAodGVtcG9yYXJpbHkpCi0gICAgICogRmllbGRzIHVudXNlZCB3aXRoIHRoZSBuZXcgYm9vdGluZm8gY2FuIGJlIGRlbGV0ZWQgbm93OyBpbnN0ZWFkIG9mCi0gICAgICogYWRkaW5nIG5ldyBmaWVsZHMgdGhlIHN0cnVjdCBtaWdodCBiZSBzcGxpdHRlZCBpbnRvIGEgaGFyZHdhcmUgYWRkcmVzcwotICAgICAqIHBhcnQgYW5kIGEgaGFyZHdhcmUgdHlwZSBwYXJ0Ci0gICAgICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCBtYWNfYm9vdGVyX2RhdGEKLXsKLQl1bnNpZ25lZCBsb25nIHZpZGVvYWRkcjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvcm93OwotCXVuc2lnbmVkIGxvbmcgdmlkZW9kZXB0aDsKLQl1bnNpZ25lZCBsb25nIGRpbWVuc2lvbnM7Ci0JdW5zaWduZWQgbG9uZyBhcmdzOwotCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7Ci0JdW5zaWduZWQgbG9uZyBnbXRiaWFzOwotCXVuc2lnbmVkIGxvbmcgYm9vdHZlcjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvbG9naWNhbDsKLQl1bnNpZ25lZCBsb25nIHNjY2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBpZDsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemU7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWxtZjsKLQl1bnNpZ25lZCBsb25nIHNlcmlhbGhzazsKLQl1bnNpZ25lZCBsb25nIHNlcmlhbGdwaTsKLQl1bnNpZ25lZCBsb25nIHByaW50bWY7Ci0JdW5zaWduZWQgbG9uZyBwcmludGhzazsKLQl1bnNpZ25lZCBsb25nIHByaW50Z3BpOwotCXVuc2lnbmVkIGxvbmcgY3B1aWQ7Ci0JdW5zaWduZWQgbG9uZyByb21iYXNlOwotCXVuc2lnbmVkIGxvbmcgYWRiZGVsYXk7Ci0JdW5zaWduZWQgbG9uZyB0aW1lZGJyYTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhCi0JbWFjX2JpX2RhdGE7Ci0KLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiAgQXBvbGxvLXNwZWNpZmljIHRhZ3MKLSAgICAgKi8KLQotI2RlZmluZSBCSV9BUE9MTE9fTU9ERUwgICAgICAgICAweDgwMDAgIC8qIG1vZGVsICh1X2xvbmcpICovCi0KLSAgICAvKgotICAgICAqICBIUDMwMC1zcGVjaWZpYyB0YWdzCi0gICAgICovCi0KLSNkZWZpbmUgQklfSFAzMDBfTU9ERUwJCTB4ODAwMAkvKiBtb2RlbCAodV9sb25nKSAqLwotI2RlZmluZSBCSV9IUDMwMF9VQVJUX1NDT0RFCTB4ODAwMQkvKiBVQVJUIHNlbGVjdCBjb2RlICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0hQMzAwX1VBUlRfQUREUgkweDgwMDIJLyogcGh5cy4gYWRkciBvZiBVQVJUICh1X2xvbmcpICovCi0KLSAgICAvKgotICAgICAqIFN0dWZmIGZvciBib290aW5mbyBpbnRlcmZhY2UgdmVyc2lvbmluZwotICAgICAqCi0gICAgICogQXQgdGhlIHN0YXJ0IG9mIGtlcm5lbCBjb2RlLCBhICdzdHJ1Y3QgYm9vdHZlcnNpb24nIGlzIGxvY2F0ZWQuCi0gICAgICogYm9vdHN0cmFwIGNoZWNrcyBmb3IgYSBtYXRjaGluZyB2ZXJzaW9uIG9mIHRoZSBpbnRlcmZhY2UgYmVmb3JlIGJvb3RpbmcKLSAgICAgKiBhIGtlcm5lbCwgdG8gYXZvaWQgdXNlciBjb25mdXNpb24gaWYga2VybmVsIGFuZCBib290c3RyYXAgZG9uJ3Qgd29yawotICAgICAqIHRvZ2V0aGVyIDotKQotICAgICAqCi0gICAgICogSWYgaW5jb21wYXRpYmxlIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIGJvb3RpbmZvIGludGVyZmFjZSwgdGhlIG1ham9yCi0gICAgICogbnVtYmVyIGJlbG93IHNob3VsZCBiZSBzdGVwcGVkIChhbmQgdGhlIG1pbm9yIHJlc2V0IHRvIDApIGZvciB0aGUKLSAgICAgKiBhcHByb3ByaWF0ZSBtYWNoaW5lLiBJZiBhIGNoYW5nZSBpcyBiYWNrd2FyZC1jb21wYXRpYmxlLCB0aGUgbWlub3IKLSAgICAgKiBzaG91bGQgYmUgc3RlcHBlZC4gIkJhY2t3YXJkcy1jb21wYXRpYmxlIiBtZWFucyB0aGF0IGJvb3Rpbmcgd2lsbCB3b3JrLAotICAgICAqIGJ1dCBjZXJ0YWluIGZlYXR1cmVzIG1heSBub3QuCi0gICAgICovCi0KLSNkZWZpbmUgQk9PVElORk9WX01BR0lDCQkJMHg0MjQ5NTYxQQkvKiAnQklWXlonICovCi0jZGVmaW5lIE1LX0JJX1ZFUlNJT04obWFqb3IsbWlub3IpCSgoKG1ham9yKTw8MTYpKyhtaW5vcikpCi0jZGVmaW5lIEJJX1ZFUlNJT05fTUFKT1IodikJCSgoKHYpID4+IDE2KSAmIDB4ZmZmZikKLSNkZWZpbmUgQklfVkVSU0lPTl9NSU5PUih2KQkJKCh2KSAmIDB4ZmZmZikKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IGJvb3R2ZXJzaW9uIHsKLSAgICB1bnNpZ25lZCBzaG9ydCBicmFuY2g7Ci0gICAgdW5zaWduZWQgbG9uZyBtYWdpYzsKLSAgICBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgbWFjaHR5cGU7Ci0JdW5zaWduZWQgbG9uZyB2ZXJzaW9uOwotICAgIH0gbWFjaHZlcnNpb25zWzBdOwotfTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIEFNSUdBX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIEFUQVJJX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMSApCi0jZGVmaW5lIE1BQ19CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIE1WTUUxNDdfQk9PVElfVkVSU0lPTiAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIE1WTUUxNnhfQk9PVElfVkVSU0lPTiAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIEJWTUU2MDAwX0JPT1RJX1ZFUlNJT04gTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIFE0MF9CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIEhQMzAwX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0KLSNpZmRlZiBCT09USU5GT19DT01QQVRfMV8wCi0KLSAgICAvKgotICAgICAqICBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGJvb3RpbmZvIGludGVyZmFjZSB2ZXJzaW9uIDEuMAotICAgICAqLwotCi0jZGVmaW5lIENPTVBBVF9BTUlHQV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDEsIDAgKQotI2RlZmluZSBDT01QQVRfQVRBUklfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAxLCAwICkKLSNkZWZpbmUgQ09NUEFUX01BQ19CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMSwgMCApCi0KLSNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgotCi0jZGVmaW5lIENPTVBBVF9OVU1fQVVUTyAgICAxNgotCi1zdHJ1Y3QgY29tcGF0X2JpX0FtaWdhIHsKLSAgICBpbnQgbW9kZWw7Ci0gICAgaW50IG51bV9hdXRvY29uOwotICAgIHN0cnVjdCBDb25maWdEZXYgYXV0b2NvbltDT01QQVRfTlVNX0FVVE9dOwotICAgIHVuc2lnbmVkIGxvbmcgY2hpcF9zaXplOwotICAgIHVuc2lnbmVkIGNoYXIgdmJsYW5rOwotICAgIHVuc2lnbmVkIGNoYXIgcHNmcmVxOwotICAgIHVuc2lnbmVkIGxvbmcgZWNsb2NrOwotICAgIHVuc2lnbmVkIGxvbmcgY2hpcHNldDsKLSAgICB1bnNpZ25lZCBsb25nIGh3X3ByZXNlbnQ7Ci19OwotCi1zdHJ1Y3QgY29tcGF0X2JpX0F0YXJpIHsKLSAgICB1bnNpZ25lZCBsb25nIGh3X3ByZXNlbnQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtY2hfY29va2llOwotfTsKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IGNvbXBhdF9iaV9NYWNpbnRvc2gKLXsKLQl1bnNpZ25lZCBsb25nIHZpZGVvYWRkcjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvcm93OwotCXVuc2lnbmVkIGxvbmcgdmlkZW9kZXB0aDsKLQl1bnNpZ25lZCBsb25nIGRpbWVuc2lvbnM7Ci0JdW5zaWduZWQgbG9uZyBhcmdzOwotCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7Ci0JdW5zaWduZWQgbG9uZyBnbXRiaWFzOwotCXVuc2lnbmVkIGxvbmcgYm9vdHZlcjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvbG9naWNhbDsKLQl1bnNpZ25lZCBsb25nIHNjY2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBpZDsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemU7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWxtZjsKLQl1bnNpZ25lZCBsb25nIHNlcmlhbGhzazsKLQl1bnNpZ25lZCBsb25nIHNlcmlhbGdwaTsKLQl1bnNpZ25lZCBsb25nIHByaW50bWY7Ci0JdW5zaWduZWQgbG9uZyBwcmludGhzazsKLQl1bnNpZ25lZCBsb25nIHByaW50Z3BpOwotCXVuc2lnbmVkIGxvbmcgY3B1aWQ7Ci0JdW5zaWduZWQgbG9uZyByb21iYXNlOwotCXVuc2lnbmVkIGxvbmcgYWRiZGVsYXk7Ci0JdW5zaWduZWQgbG9uZyB0aW1lZGJyYTsKLX07Ci0KLSNlbmRpZgotCi1zdHJ1Y3QgY29tcGF0X21lbV9pbmZvIHsKLSAgICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0gICAgdW5zaWduZWQgbG9uZyBzaXplOwotfTsKLQotI2RlZmluZSBDT01QQVRfTlVNX01FTUlORk8gIDQKLQotI2RlZmluZSBDT01QQVRfQ1BVQl82ODAyMCAwCi0jZGVmaW5lIENPTVBBVF9DUFVCXzY4MDMwIDEKLSNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwNDAgMgotI2RlZmluZSBDT01QQVRfQ1BVQl82ODA2MCAzCi0jZGVmaW5lIENPTVBBVF9GUFVCXzY4ODgxIDUKLSNkZWZpbmUgQ09NUEFUX0ZQVUJfNjg4ODIgNgotI2RlZmluZSBDT01QQVRfRlBVQl82ODA0MCA3Ci0jZGVmaW5lIENPTVBBVF9GUFVCXzY4MDYwIDgKLQotI2RlZmluZSBDT01QQVRfQ1BVXzY4MDIwICAgICgxPDxDT01QQVRfQ1BVQl82ODAyMCkKLSNkZWZpbmUgQ09NUEFUX0NQVV82ODAzMCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwMzApCi0jZGVmaW5lIENPTVBBVF9DUFVfNjgwNDAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDQwKQotI2RlZmluZSBDT01QQVRfQ1BVXzY4MDYwICAgICgxPDxDT01QQVRfQ1BVQl82ODA2MCkKLSNkZWZpbmUgQ09NUEFUX0NQVV9NQVNLICAgICAoMzEpCi0jZGVmaW5lIENPTVBBVF9GUFVfNjg4ODEgICAgKDE8PENPTVBBVF9GUFVCXzY4ODgxKQotI2RlZmluZSBDT01QQVRfRlBVXzY4ODgyICAgICgxPDxDT01QQVRfRlBVQl82ODg4MikKLSNkZWZpbmUgQ09NUEFUX0ZQVV82ODA0MCAgICAoMTw8Q09NUEFUX0ZQVUJfNjgwNDApCi0jZGVmaW5lIENPTVBBVF9GUFVfNjgwNjAgICAgKDE8PENPTVBBVF9GUFVCXzY4MDYwKQotI2RlZmluZSBDT01QQVRfRlBVX01BU0sgICAgICgweGZlMCkKLQotI2RlZmluZSBDT01QQVRfQ0xfU0laRSAgICAgICgyNTYpCi0KLXN0cnVjdCBjb21wYXRfYm9vdGluZm8gewotICAgIHVuc2lnbmVkIGxvbmcgbWFjaHR5cGU7Ci0gICAgdW5zaWduZWQgbG9uZyBjcHV0eXBlOwotICAgIHN0cnVjdCBjb21wYXRfbWVtX2luZm8gbWVtb3J5W0NPTVBBVF9OVU1fTUVNSU5GT107Ci0gICAgaW50IG51bV9tZW1vcnk7Ci0gICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX3NpemU7Ci0gICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX2FkZHI7Ci0gICAgY2hhciBjb21tYW5kX2xpbmVbQ09NUEFUX0NMX1NJWkVdOwotICAgIHVuaW9uIHsKLQlzdHJ1Y3QgY29tcGF0X2JpX0FtaWdhICAgICBiaV9hbWk7Ci0Jc3RydWN0IGNvbXBhdF9iaV9BdGFyaSAgICAgYmlfYXRhOwotCXN0cnVjdCBjb21wYXRfYmlfTWFjaW50b3NoIGJpX21hYzsKLSAgICB9IGJpX3VuOwotfTsKLQotI2RlZmluZSBiaV9hbWlnYQliaV91bi5iaV9hbWkKLSNkZWZpbmUgYmlfYXRhcmkJYmlfdW4uYmlfYXRhCi0jZGVmaW5lIGJpX21hYwkJYmlfdW4uYmlfbWFjCi0KLSNlbmRpZiAvKiBCT09USU5GT19DT01QQVRfMV8wICovCi0KLQotI2VuZGlmIC8qIF9NNjhLX0JPT1RJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290aW5mb19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMmU1MjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLQotLyogTm90aGluZyBmb3IgbTY4a25vbW11ICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggOTk3ZTA5NC4uZWY5YTJlNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Zy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWcuaApAQCAtMSw1ICsxLDMwIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJidWdfbm8uaCIKKyNpZm5kZWYgX002OEtfQlVHX0gKKyNkZWZpbmUgX002OEtfQlVHX0gKKworI2lmZGVmIENPTkZJR19NTVUKKyNpZmRlZiBDT05GSUdfQlVHCisjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCV9fYnVpbHRpbl90cmFwKCk7IFwKK30gd2hpbGUgKDApCiAjZWxzZQotI2luY2x1ZGUgImJ1Z19tbS5oIgorI2RlZmluZSBCVUcoKSBkbyB7IFwKKwlwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisJcGFuaWMoIkJVRyEiKTsgXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJX19idWlsdGluX3RyYXAoKTsgXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViNTI4ZC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jaWZuZGVmIF9NNjhLX0JVR19ICi0jZGVmaW5lIF9NNjhLX0JVR19ICi0KLQotI2lmZGVmIENPTkZJR19CVUcKLSNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQotI2lmbmRlZiBDT05GSUdfU1VOMwotI2RlZmluZSBCVUcoKSBkbyB7IFwKLQlwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCi0JX19idWlsdGluX3RyYXAoKTsgXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIEJVRygpIGRvIHsgXAotCXByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKLQlwYW5pYygiQlVHISIpOyBcCi19IHdoaWxlICgwKQotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBCVUcoKSBkbyB7IFwKLQlfX2J1aWx0aW5fdHJhcCgpOyBcCi19IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgSEFWRV9BUkNIX0JVRwotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZTdkYzAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z19uby5oCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIF9NNjhLTk9NTVVfQlVHX0gKLSNkZWZpbmUgX002OEtOT01NVV9CVUdfSAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVncy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3MuaAppbmRleCAwMWYwNDdkLi5kMDYyMDdiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVncy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdzLmgKQEAgLTEsNSArMSwyMCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiYnVnc19uby5oIgorLyoKKyAqICBpbmNsdWRlL2FzbS1tNjhrL2J1Z3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQgIExpbnVzIFRvcnZhbGRzCisgKi8KKworLyoKKyAqIFRoaXMgaXMgaW5jbHVkZWQgYnkgaW5pdC9tYWluLmMgdG8gY2hlY2sgZm9yIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgYnVncy4KKyAqCisgKiBOZWVkczoKKyAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKKyAqLworCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIHZvaWQgY2hlY2tfYnVncyh2b2lkKTsJLyogaW4gYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jICovCiAjZWxzZQotI2luY2x1ZGUgImJ1Z3NfbW0uaCIKK3N0YXRpYyB2b2lkIGNoZWNrX2J1Z3Modm9pZCkKK3sKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3NfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdzX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMTkzNTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3NfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qCi0gKiAgaW5jbHVkZS9hc20tbTY4ay9idWdzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcwotICovCi0KLS8qCi0gKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCi0gKgotICogTmVlZHM6Ci0gKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7Ci0gKi8KLQotZXh0ZXJuIHZvaWQgY2hlY2tfYnVncyh2b2lkKTsJLyogaW4gYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnc19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3Nfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzODJkYS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnc19uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoKLSAqICBpbmNsdWRlL2FzbS1tNjhrL2J1Z3MuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTQgIExpbnVzIFRvcnZhbGRzCi0gKi8KLQotLyoKLSAqIFRoaXMgaXMgaW5jbHVkZWQgYnkgaW5pdC9tYWluLmMgdG8gY2hlY2sgZm9yIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgYnVncy4KLSAqCi0gKiBOZWVkczoKLSAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKLSAqLwotCi1zdGF0aWMgdm9pZCBjaGVja19idWdzKHZvaWQpCi17Ci19CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IDU5OWMyOWIuLmZlZDNmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0xLDUgKzEsMTEgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImNhY2hlX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgImNhY2hlX21tLmgiCisvKgorICogaW5jbHVkZS9hc20tbTY4ay9jYWNoZS5oCisgKi8KKyNpZm5kZWYgX19BUkNIX002OEtfQ0FDSEVfSAorI2RlZmluZSBfX0FSQ0hfTTY4S19DQUNIRV9ICisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjZGVmaW5lICAgICAgICBMMV9DQUNIRV9TSElGVCAgNAorI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfQllURVMgICgxPDwgTDFfQ0FDSEVfU0hJRlQpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NhY2hlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGVfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkM2ZkMy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGVfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1tNjhrL2NhY2hlLmgKLSAqLwotI2lmbmRlZiBfX0FSQ0hfTTY4S19DQUNIRV9ICi0jZGVmaW5lIF9fQVJDSF9NNjhLX0NBQ0hFX0gKLQotLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KLSNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX1NISUZUICA0Ci0jZGVmaW5lICAgICAgICBMMV9DQUNIRV9CWVRFUyAgKDE8PCBMMV9DQUNIRV9TSElGVCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGVfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGU5ZWFjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfX0FSQ0hfTTY4S05PTU1VX0NBQ0hFX0gKLSNkZWZpbmUgX19BUkNIX002OEtOT01NVV9DQUNIRV9ICi0KLS8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCi0jZGVmaW5lICAgICAgICBMMV9DQUNIRV9CWVRFUyAgMTYJLyogdGhpcyBuZWVkIHRvIGJlIGF0IGxlYXN0IDEgKi8KLQotLyogbTY4ay1lbGYtZ2NjICAyLjk1LjIgZG9lc24ndCBsaWtlIHRoZXNlICovCi0KLSNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZAotI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnQuaAppbmRleCA1MWIwNTZkLi45MWZjYzUzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jdXJyZW50LmgKQEAgLTEsNSArMSwyOCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiY3VycmVudF9uby5oIgorI2lmbmRlZiBfTTY4S19DVVJSRU5UX0gKKyNkZWZpbmUgX002OEtfQ1VSUkVOVF9ICisKKyNpZmRlZiBDT05GSUdfTU1VCisKK3JlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBfX2FzbV9fKCIlYTIiKTsKKwogI2Vsc2UKLSNpbmNsdWRlICJjdXJyZW50X21tLmgiCi0jZW5kaWYKKworLyoKKyAqCVJhdGhlciB0aGFuIGRlZGljYXRlIGEgcmVnaXN0ZXIgKGFzIHRoZSBtNjhrIHNvdXJjZSBkb2VzKSwgd2UKKyAqCWp1c3Qga2VlcCBhIGdsb2JhbCwgIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNoYW5nZSBpdCBhbGwgdG8gYmUKKyAqCWN1cnJlbnQgYW5kIGxvc2UgX2N1cnJlbnRfdGFzay4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9jdXJyZW50KHZvaWQpCit7CisJcmV0dXJuKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dGFzayk7Cit9CisKKyNkZWZpbmUJY3VycmVudAlnZXRfY3VycmVudCgpCisKKyNlbmRpZiAvKiBDT05GTklHX01NVSAqLworCisjZW5kaWYgLyogIShfTTY4S19DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRlOGY4Yy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9NNjhLX0NVUlJFTlRfSAotI2RlZmluZSBfTTY4S19DVVJSRU5UX0gKLQotcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50IF9fYXNtX18oIiVhMiIpOwotCi0jZW5kaWYgLyogIShfTTY4S19DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlZTBmOS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX0NVUlJFTlRfSAotI2RlZmluZSBfTTY4S05PTU1VX0NVUlJFTlRfSAotLyoKLSAqCWN1cnJlbnQuaAotICoJKEMpIENvcHlyaWdodCAyMDAwLCBMaW5lbywgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHVjbGludXgub3JnPgotICoJKEMpIENvcHlyaWdodCAyMDAyLCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQotICoKLSAqCXJhdGhlciB0aGFuIGRlZGljYXRlIGEgcmVnaXN0ZXIgKGFzIHRoZSBtNjhrIHNvdXJjZSBkb2VzKSwgd2UKLSAqCWp1c3Qga2VlcCBhIGdsb2JhbCwgIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNoYW5nZSBpdCBhbGwgdG8gYmUKLSAqCWN1cnJlbnQgYW5kIGxvc2UgX2N1cnJlbnRfdGFzay4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLQotc3RydWN0IHRhc2tfc3RydWN0OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKLXsKLQlyZXR1cm4oY3VycmVudF90aHJlYWRfaW5mbygpLT50YXNrKTsKLX0KLQotI2RlZmluZQljdXJyZW50CWdldF9jdXJyZW50KCkKLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfQ1VSUkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NC5oCmluZGV4IGQyMTFkOWYuLmVkYjY2MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NC5oCkBAIC0xLDUgKzEsMzQgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImRpdjY0X25vLmgiCisjaWZuZGVmIF9NNjhLX0RJVjY0X0gKKyNkZWZpbmUgX002OEtfRElWNjRfSAorCisjaWZkZWYgQ09ORklHX01NVQorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogbiA9IG4gLyBiYXNlOyByZXR1cm4gcmVtOyAqLworCisjZGVmaW5lIGRvX2RpdihuLCBiYXNlKSAoewkJCQkJXAorCXVuaW9uIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIG4zMlsyXTsJCQkJXAorCQl1bnNpZ25lZCBsb25nIGxvbmcgbjY0OwkJCQlcCisJfSBfX247CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fcmVtLCBfX3VwcGVyOwkJCQlcCisJCQkJCQkJCVwKKwlfX24ubjY0ID0gKG4pOwkJCQkJCVwKKwlpZiAoKF9fdXBwZXIgPSBfX24ubjMyWzBdKSkgewkJCQlcCisJCWFzbSAoImRpdnVsLmwgJTIsJTE6JTAiCQkJCVwKKwkJCTogIj1kIiAoX19uLm4zMlswXSksICI9ZCIgKF9fdXBwZXIpCVwKKwkJCTogImQiIChiYXNlKSwgIjAiIChfX24ubjMyWzBdKSk7CVwKKwl9CQkJCQkJCVwKKwlhc20gKCJkaXZ1LmwgJTIsJTE6JTAiCQkJCQlcCisJCTogIj1kIiAoX19uLm4zMlsxXSksICI9ZCIgKF9fcmVtKQkJXAorCQk6ICJkIiAoYmFzZSksICIxIiAoX191cHBlciksICIwIiAoX19uLm4zMlsxXSkpOwlcCisJKG4pID0gX19uLm42NDsJCQkJCQlcCisJX19yZW07CQkJCQkJCVwKK30pCisKICNlbHNlCi0jaW5jbHVkZSAiZGl2NjRfbW0uaCIKLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZW5kaWYgLyogX002OEtfRElWNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RpdjY0X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI0M2M5My4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjRfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpZm5kZWYgX002OEtfRElWNjRfSAotI2RlZmluZSBfTTY4S19ESVY2NF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKiBuID0gbiAvIGJhc2U7IHJldHVybiByZW07ICovCi0KLSNkZWZpbmUgZG9fZGl2KG4sIGJhc2UpICh7CQkJCQlcCi0JdW5pb24gewkJCQkJCQlcCi0JCXVuc2lnbmVkIGxvbmcgbjMyWzJdOwkJCQlcCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyBuNjQ7CQkJCVwKLQl9IF9fbjsJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19yZW0sIF9fdXBwZXI7CQkJCVwKLQkJCQkJCQkJXAotCV9fbi5uNjQgPSAobik7CQkJCQkJXAotCWlmICgoX191cHBlciA9IF9fbi5uMzJbMF0pKSB7CQkJCVwKLQkJYXNtICgiZGl2dWwubCAlMiwlMTolMCIJCQkJXAotCQkJOiAiPWQiIChfX24ubjMyWzBdKSwgIj1kIiAoX191cHBlcikJXAotCQkJOiAiZCIgKGJhc2UpLCAiMCIgKF9fbi5uMzJbMF0pKTsJXAotCX0JCQkJCQkJXAotCWFzbSAoImRpdnUubCAlMiwlMTolMCIJCQkJCVwKLQkJOiAiPWQiIChfX24ubjMyWzFdKSwgIj1kIiAoX19yZW0pCQlcCi0JCTogImQiIChiYXNlKSwgIjEiIChfX3VwcGVyKSwgIjAiIChfX24ubjMyWzFdKSk7CVwKLQkobikgPSBfX24ubjY0OwkJCQkJCVwKLQlfX3JlbTsJCQkJCQkJXAotfSkKLQotI2VuZGlmIC8qIF9NNjhLX0RJVjY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RpdjY0X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZDk3OGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RpdjY0X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGl2NjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggZjRhNGM3Ni4uMjZmNTA1NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTEsNSArMSwxMTIgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImRtYS1tYXBwaW5nX25vLmgiCisjaWZuZGVmIF9NNjhLX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgX002OEtfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisKK3N0cnVjdCBzY2F0dGVybGlzdDsKKworI2lmbmRlZiBDT05GSUdfTU1VX1NVTjMKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCit7CisJcmV0dXJuIDEgPDwgTDFfQ0FDSEVfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9pc19jb25zaXN0ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwKKwkJCQlkbWFfYWRkcl90ICosIGdmcF90KTsKK2V4dGVybiB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LAorCQkJICAgICAgdm9pZCAqLCBkbWFfYWRkcl90KTsKKworc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2Nfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICBkbWFfYWRkcl90ICpoYW5kbGUsIGdmcF90IGZsYWcpCit7CisJcmV0dXJuIGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGhhbmRsZSwgZmxhZyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJdm9pZCAqYWRkciwgZG1hX2FkZHJfdCBoYW5kbGUpCit7CisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBhZGRyLCBoYW5kbGUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCS8qIHdlIHVzZSBjb2hlcmVudCBhbGxvY2F0aW9uLCBzbyBub3QgbXVjaCB0byBkbyBoZXJlLiAqLworfQorCitleHRlcm4gZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKiwgc2l6ZV90LAorCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHBhZ2UgKiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHJlc3MsCisJCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworfQorCitleHRlcm4gaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LAorCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQlpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworfQorCitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwKKwkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsCisJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nIGZvciBub3cgKi8KKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCArIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLAorCQkJCQkgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICAgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nIGZvciBub3cgKi8KKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCArIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbHNlCi0jaW5jbHVkZSAiZG1hLW1hcHBpbmdfbW0uaCIKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaD4KICNlbmRpZgorCisjZW5kaWYgIC8qIF9NNjhLX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZ19tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZjUwNTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19ETUFfTUFQUElOR19ICi0jZGVmaW5lIF9NNjhLX0RNQV9NQVBQSU5HX0gKLQotI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotCi1zdHJ1Y3Qgc2NhdHRlcmxpc3Q7Ci0KLSNpZm5kZWYgQ09ORklHX01NVV9TVU4zCi1zdGF0aWMgaW5saW5lIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCXJldHVybiAxIDw8IEwxX0NBQ0hFX1NISUZUOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfaXNfY29uc2lzdGVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWV4dGVybiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsCi0JCQkJZG1hX2FkZHJfdCAqLCBnZnBfdCk7Ci1leHRlcm4gdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwKLQkJCSAgICAgIHZvaWQgKiwgZG1hX2FkZHJfdCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJCSAgZG1hX2FkZHJfdCAqaGFuZGxlLCBnZnBfdCBmbGFnKQotewotCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIGZsYWcpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJCXZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgaGFuZGxlKQotewotCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgYWRkciwgaGFuZGxlKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKLQkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLQkvKiB3ZSB1c2UgY29oZXJlbnQgYWxsb2NhdGlvbiwgc28gbm90IG11Y2ggdG8gZG8gaGVyZS4gKi8KLX0KLQotZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLCB2b2lkICosIHNpemVfdCwKLQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCi0JCQkJICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLWV4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBwYWdlICosCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZywgc2l6ZV90IHNpemUsCi0JCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyZXNzLAotCQkJCSAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLX0KLQotZXh0ZXJuIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwKLQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLX0KLQotZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsCi0JCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKLWV4dGVybiB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LAotCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwKLQkJCQkJICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCSAgICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlKQotewotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLWJyb2tlbi5oPgotI2VuZGlmCi0KLSNlbmRpZiAgLyogX002OEtfRE1BX01BUFBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmdfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc0OGYyYi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmdfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX0RNQV9NQVBQSU5HX0gKLSNkZWZpbmUgX002OEtOT01NVV9ETUFfTUFQUElOR19ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaD4KLQotI2VuZGlmICAvKiBfTTY4S05PTU1VX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAwNGNlNDg4Li4wYjBmNDllIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xLDUgKzEsMTE5IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJlbGZfbm8uaCIKKyNpZm5kZWYgX19BU01tNjhrX0VMRl9ICisjZGVmaW5lIF9fQVNNbTY4a19FTEZfSAorCisvKgorICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKKy8qCisgKiA2OGsgRUxGIHJlbG9jYXRpb24gdHlwZXMKKyAqLworI2RlZmluZSBSXzY4S19OT05FCTAKKyNkZWZpbmUgUl82OEtfMzIJMQorI2RlZmluZSBSXzY4S18xNgkyCisjZGVmaW5lIFJfNjhLXzgJCTMKKyNkZWZpbmUgUl82OEtfUEMzMgk0CisjZGVmaW5lIFJfNjhLX1BDMTYJNQorI2RlZmluZSBSXzY4S19QQzgJNgorI2RlZmluZSBSXzY4S19HT1QzMgk3CisjZGVmaW5lIFJfNjhLX0dPVDE2CTgKKyNkZWZpbmUgUl82OEtfR09UOAk5CisjZGVmaW5lIFJfNjhLX0dPVDMyTwkxMAorI2RlZmluZSBSXzY4S19HT1QxNk8JMTEKKyNkZWZpbmUgUl82OEtfR09UOE8JMTIKKyNkZWZpbmUgUl82OEtfUExUMzIJMTMKKyNkZWZpbmUgUl82OEtfUExUMTYJMTQKKyNkZWZpbmUgUl82OEtfUExUOAkxNQorI2RlZmluZSBSXzY4S19QTFQzMk8JMTYKKyNkZWZpbmUgUl82OEtfUExUMTZPCTE3CisjZGVmaW5lIFJfNjhLX1BMVDhPCTE4CisjZGVmaW5lIFJfNjhLX0NPUFkJMTkKKyNkZWZpbmUgUl82OEtfR0xPQl9EQVQJMjAKKyNkZWZpbmUgUl82OEtfSk1QX1NMT1QJMjEKKyNkZWZpbmUgUl82OEtfUkVMQVRJVkUJMjIKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0IGVsZl9mcHJlZ3NldF90OworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fNjhLKQorCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCisgKi8KKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKKyNkZWZpbmUgRUxGX0FSQ0gJRU1fNjhLCisKKy8qIEZvciBTVlI0L202OGsgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGBhdGV4aXQnIGlzCisgICBwYXNzZWQgaW4gJWExLiAgQWx0aG91Z2ggbXkgY29weSBvZiB0aGUgQUJJIGhhcyBubyBzdWNoIHN0YXRlbWVudCwgaXQKKyAgIGlzIGFjdHVhbGx5IHVzZWQgb24gQVNWLiAgKi8KKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQlfci0+YTEgPSAwCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgogI2Vsc2UKLSNpbmNsdWRlICJlbGZfbW0uaCIKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJODE5MgorI2VuZGlmCisKKy8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCisgICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCisgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLworCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4RDAwMDAwMDBVTAorI2Vsc2UKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgMHgwRDgwMDAwMFVMCisjZW5kaWYKKworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQkJCQlcCisJLyogQmxlZWNoLiAqLwkJCQkJCQlcCisJcHJfcmVnWzBdID0gcmVncy0+ZDE7CQkJCQkJXAorCXByX3JlZ1sxXSA9IHJlZ3MtPmQyOwkJCQkJCVwKKwlwcl9yZWdbMl0gPSByZWdzLT5kMzsJCQkJCQlcCisJcHJfcmVnWzNdID0gcmVncy0+ZDQ7CQkJCQkJXAorCXByX3JlZ1s0XSA9IHJlZ3MtPmQ1OwkJCQkJCVwKKwlwcl9yZWdbN10gPSByZWdzLT5hMDsJCQkJCQlcCisJcHJfcmVnWzhdID0gcmVncy0+YTE7CQkJCQkJXAorCXByX3JlZ1s5XSA9IHJlZ3MtPmEyOwkJCQkJCVwKKwlwcl9yZWdbMTRdID0gcmVncy0+ZDA7CQkJCQkJXAorCXByX3JlZ1sxNV0gPSByZHVzcCgpOwkJCQkJCVwKKwlwcl9yZWdbMTZdID0gcmVncy0+b3JpZ19kMDsJCQkJCVwKKwlwcl9yZWdbMTddID0gcmVncy0+c3I7CQkJCQkJXAorCXByX3JlZ1sxOF0gPSByZWdzLT5wYzsJCQkJCQlcCisJcHJfcmVnWzE5XSA9IChyZWdzLT5mb3JtYXQgPDwgMTIpIHwgcmVncy0+dmVjdG9yOwkJXAorCXsJCQkJCQkJCVwKKwkgIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncykgLSAxOwlcCisJICBwcl9yZWdbNV0gPSBzdy0+ZDY7CQkJCQkJXAorCSAgcHJfcmVnWzZdID0gc3ctPmQ3OwkJCQkJCVwKKwkgIHByX3JlZ1sxMF0gPSBzdy0+YTM7CQkJCQkJXAorCSAgcHJfcmVnWzExXSA9IHN3LT5hNDsJCQkJCQlcCisJICBwcl9yZWdbMTJdID0gc3ctPmE1OwkJCQkJCVwKKwkgIHByX3JlZ1sxM10gPSBzdy0+YTY7CQkJCQkJXAorCX0KKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgKi8KKworI2RlZmluZSBFTEZfSFdDQVAJKDApCisKKy8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAgKi8KKworI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQorCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGY0OWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLSNpZm5kZWYgX19BU01tNjhrX0VMRl9ICi0jZGVmaW5lIF9fQVNNbTY4a19FTEZfSAotCi0vKgotICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91c2VyLmg+Ci0KLS8qCi0gKiA2OGsgRUxGIHJlbG9jYXRpb24gdHlwZXMKLSAqLwotI2RlZmluZSBSXzY4S19OT05FCTAKLSNkZWZpbmUgUl82OEtfMzIJMQotI2RlZmluZSBSXzY4S18xNgkyCi0jZGVmaW5lIFJfNjhLXzgJCTMKLSNkZWZpbmUgUl82OEtfUEMzMgk0Ci0jZGVmaW5lIFJfNjhLX1BDMTYJNQotI2RlZmluZSBSXzY4S19QQzgJNgotI2RlZmluZSBSXzY4S19HT1QzMgk3Ci0jZGVmaW5lIFJfNjhLX0dPVDE2CTgKLSNkZWZpbmUgUl82OEtfR09UOAk5Ci0jZGVmaW5lIFJfNjhLX0dPVDMyTwkxMAotI2RlZmluZSBSXzY4S19HT1QxNk8JMTEKLSNkZWZpbmUgUl82OEtfR09UOE8JMTIKLSNkZWZpbmUgUl82OEtfUExUMzIJMTMKLSNkZWZpbmUgUl82OEtfUExUMTYJMTQKLSNkZWZpbmUgUl82OEtfUExUOAkxNQotI2RlZmluZSBSXzY4S19QTFQzMk8JMTYKLSNkZWZpbmUgUl82OEtfUExUMTZPCTE3Ci0jZGVmaW5lIFJfNjhLX1BMVDhPCTE4Ci0jZGVmaW5lIFJfNjhLX0NPUFkJMTkKLSNkZWZpbmUgUl82OEtfR0xPQl9EQVQJMjAKLSNkZWZpbmUgUl82OEtfSk1QX1NMT1QJMjEKLSNkZWZpbmUgUl82OEtfUkVMQVRJVkUJMjIKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Ci0KLSNkZWZpbmUgRUxGX05HUkVHIChzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQotdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKLQotdHlwZWRlZiBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0IGVsZl9mcHJlZ3NldF90OwotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KLSAqLwotI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fNjhLKQotCi0vKgotICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCi0gKi8KLSNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKLSNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKLSNkZWZpbmUgRUxGX0FSQ0gJRU1fNjhLCi0KLS8qIEZvciBTVlI0L202OGsgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGBhdGV4aXQnIGlzCi0gICBwYXNzZWQgaW4gJWExLiAgQWx0aG91Z2ggbXkgY29weSBvZiB0aGUgQUJJIGhhcyBubyBzdWNoIHN0YXRlbWVudCwgaXQKLSAgIGlzIGFjdHVhbGx5IHVzZWQgb24gQVNWLiAgKi8KLSNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQlfci0+YTEgPSAwCi0KLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKLSNpZm5kZWYgQ09ORklHX1NVTjMKLSNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgotI2Vsc2UKLSNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJODE5MgotI2VuZGlmCi0KLS8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCi0gICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKLSAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCi0gICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLwotCi0jaWZuZGVmIENPTkZJR19TVU4zCi0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4RDAwMDAwMDBVTAotI2Vsc2UKLSNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgMHgwRDgwMDAwMFVMCi0jZW5kaWYKLQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQkJCQlcCi0JLyogQmxlZWNoLiAqLwkJCQkJCQlcCi0JcHJfcmVnWzBdID0gcmVncy0+ZDE7CQkJCQkJXAotCXByX3JlZ1sxXSA9IHJlZ3MtPmQyOwkJCQkJCVwKLQlwcl9yZWdbMl0gPSByZWdzLT5kMzsJCQkJCQlcCi0JcHJfcmVnWzNdID0gcmVncy0+ZDQ7CQkJCQkJXAotCXByX3JlZ1s0XSA9IHJlZ3MtPmQ1OwkJCQkJCVwKLQlwcl9yZWdbN10gPSByZWdzLT5hMDsJCQkJCQlcCi0JcHJfcmVnWzhdID0gcmVncy0+YTE7CQkJCQkJXAotCXByX3JlZ1s5XSA9IHJlZ3MtPmEyOwkJCQkJCVwKLQlwcl9yZWdbMTRdID0gcmVncy0+ZDA7CQkJCQkJXAotCXByX3JlZ1sxNV0gPSByZHVzcCgpOwkJCQkJCVwKLQlwcl9yZWdbMTZdID0gcmVncy0+b3JpZ19kMDsJCQkJCVwKLQlwcl9yZWdbMTddID0gcmVncy0+c3I7CQkJCQkJXAotCXByX3JlZ1sxOF0gPSByZWdzLT5wYzsJCQkJCQlcCi0JcHJfcmVnWzE5XSA9IChyZWdzLT5mb3JtYXQgPDwgMTIpIHwgcmVncy0+dmVjdG9yOwkJXAotCXsJCQkJCQkJCVwKLQkgIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncykgLSAxOwlcCi0JICBwcl9yZWdbNV0gPSBzdy0+ZDY7CQkJCQkJXAotCSAgcHJfcmVnWzZdID0gc3ctPmQ3OwkJCQkJCVwKLQkgIHByX3JlZ1sxMF0gPSBzdy0+YTM7CQkJCQkJXAotCSAgcHJfcmVnWzExXSA9IHN3LT5hNDsJCQkJCQlcCi0JICBwcl9yZWdbMTJdID0gc3ctPmE1OwkJCQkJCVwKLQkgIHByX3JlZ1sxM10gPSBzdy0+YTY7CQkJCQkJXAotCX0KLQotLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAotICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgKi8KLQotI2RlZmluZSBFTEZfSFdDQVAJKDApCi0KLS8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgotICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KLSAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAgKi8KLQotI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQotCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MDQ2ODMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSNpZm5kZWYgX19BU01tNjhrX0VMRl9ICi0jZGVmaW5lIF9fQVNNbTY4a19FTEZfSAotCi0vKgotICogRUxGIHJlZ2lzdGVyIGRlZmluaXRpb25zLi4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91c2VyLmg+Ci0KLS8qCi0gKiA2OGsgRUxGIHJlbG9jYXRpb24gdHlwZXMKLSAqLwotI2RlZmluZSBSXzY4S19OT05FICAwCi0jZGVmaW5lIFJfNjhLXzMyICAgIDEKLSNkZWZpbmUgUl82OEtfMTYgICAgMgotI2RlZmluZSBSXzY4S184ICAgICAzCi0jZGVmaW5lIFJfNjhLX1BDMzIgIDQKLSNkZWZpbmUgUl82OEtfUEMxNiAgNQotI2RlZmluZSBSXzY4S19QQzggICA2Ci0jZGVmaW5lIFJfNjhLX0dPVDMyIDcKLSNkZWZpbmUgUl82OEtfR09UMTYgOAotI2RlZmluZSBSXzY4S19HT1Q4ICA5Ci0jZGVmaW5lIFJfNjhLX0dPVDMyTyAgICAxMAotI2RlZmluZSBSXzY4S19HT1QxNk8gICAgMTEKLSNkZWZpbmUgUl82OEtfR09UOE8gMTIKLSNkZWZpbmUgUl82OEtfUExUMzIgMTMKLSNkZWZpbmUgUl82OEtfUExUMTYgMTQKLSNkZWZpbmUgUl82OEtfUExUOCAgMTUKLSNkZWZpbmUgUl82OEtfUExUMzJPICAgIDE2Ci0jZGVmaW5lIFJfNjhLX1BMVDE2TyAgICAxNwotI2RlZmluZSBSXzY4S19QTFQ4TyAxOAotI2RlZmluZSBSXzY4S19DT1BZICAxOQotI2RlZmluZSBSXzY4S19HTE9CX0RBVCAgMjAKLSNkZWZpbmUgUl82OEtfSk1QX1NMT1QgIDIxCi0jZGVmaW5lIFJfNjhLX1JFTEFUSVZFICAyMgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKLQotI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZihzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXplb2YoZWxmX2dyZWdfdCkpCi10eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOwotCi10eXBlZGVmIHN0cnVjdCB1c2VyX202OGtmcF9zdHJ1Y3QgZWxmX2ZwcmVnc2V0X3Q7Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgotICovCi0jZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICgoeCktPmVfbWFjaGluZSA9PSBFTV82OEspCi0KLS8qCi0gKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KLSAqLwotI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgotI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMk1TQgotI2RlZmluZSBFTEZfQVJDSAlFTV82OEsKLQotLyogRm9yIFNWUjQvbTY4ayB0aGUgZnVuY3Rpb24gcG9pbnRlciB0byBiZSByZWdpc3RlcmVkIHdpdGggYGF0ZXhpdCcgaXMKLSAgIHBhc3NlZCBpbiAlYTEuICBBbHRob3VnaCBteSBjb3B5IG9mIHRoZSBBQkkgaGFzIG5vIHN1Y2ggc3RhdGVtZW50LCBpdAotICAgaXMgYWN0dWFsbHkgdXNlZCBvbiBBU1YuICAqLwotI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCV9yLT5hMSA9IDAKLQotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAotI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2Ci0KLS8qIFRoaXMgaXMgdGhlIGxvY2F0aW9uIHRoYXQgYW4gRVRfRFlOIHByb2dyYW0gaXMgbG9hZGVkIGlmIGV4ZWMnZWQuICBUeXBpY2FsCi0gICB1c2Ugb2YgdGhpcyBpcyB0byBpbnZva2UgIi4vbGQuc28gc29tZXByb2ciIHRvIHRlc3Qgb3V0IGEgbmV3IHZlcnNpb24gb2YKLSAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCi0gICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLwotCi0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4RDAwMDAwMDBVTAotCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpCQkJCVwKLQkvKiBCbGVlY2guICovCQkJCQkJCVwKLQlwcl9yZWdbMF0gPSByZWdzLT5kMTsJCQkJCQlcCi0JcHJfcmVnWzFdID0gcmVncy0+ZDI7CQkJCQkJXAotCXByX3JlZ1syXSA9IHJlZ3MtPmQzOwkJCQkJCVwKLQlwcl9yZWdbM10gPSByZWdzLT5kNDsJCQkJCQlcCi0JcHJfcmVnWzRdID0gcmVncy0+ZDU7CQkJCQkJXAotCXByX3JlZ1s3XSA9IHJlZ3MtPmEwOwkJCQkJCVwKLQlwcl9yZWdbOF0gPSByZWdzLT5hMTsJCQkJCQlcCi0JcHJfcmVnWzE0XSA9IHJlZ3MtPmQwOwkJCQkJCVwKLQlwcl9yZWdbMTVdID0gcmR1c3AoKTsJCQkJCQlcCi0JcHJfcmVnWzE2XSA9IDAgLyogcmVncy0+b3JpZ19kMCAqLzsJCQkJXAotCXByX3JlZ1sxN10gPSByZWdzLT5zcjsJCQkJCQlcCi0JcHJfcmVnWzE4XSA9IHJlZ3MtPnBjOwkJCQkJCVwKLQkvKiBwcl9yZWdbMTldID0gKHJlZ3MtPmZvcm1hdCA8PCAxMikgfCByZWdzLT52ZWN0b3I7ICovCQlcCi0JewkJCQkJCQkJXAotCSAgc3RydWN0IHN3aXRjaF9zdGFjayAqc3cgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzKSAtIDE7CVwKLQkgIHByX3JlZ1s1XSA9IHN3LT5kNjsJCQkJCQlcCi0JICBwcl9yZWdbNl0gPSBzdy0+ZDc7CQkJCQkJXAotCSAgcHJfcmVnWzEwXSA9IHN3LT5hMzsJCQkJCQlcCi0JICBwcl9yZWdbMTFdID0gc3ctPmE0OwkJCQkJCVwKLQkgIHByX3JlZ1sxMl0gPSBzdy0+YTU7CQkJCQkJXAotCSAgcHJfcmVnWzEzXSA9IHN3LT5hNjsJCQkJCQlcCi0JfQotCi0vKiBUaGlzIHlpZWxkcyBhIG1hc2sgdGhhdCB1c2VyIHByb2dyYW1zIGNhbiB1c2UgdG8gZmlndXJlIG91dCB3aGF0Ci0gICBpbnN0cnVjdGlvbiBzZXQgdGhpcyBjcHUgc3VwcG9ydHMuICAqLwotCi0jZGVmaW5lIEVMRl9IV0NBUAkoMCkKLQotLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCi0gICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgotICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uICAqLwotCi0jZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCi0KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYi5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiLmgKaW5kZXggOTdiY2FlZi4uYmU0ZTRjNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiLmgKQEAgLTEsNSArMSwzOCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiZmJfbm8uaCIKKyNpZm5kZWYgX0FTTV9GQl9IXworI2RlZmluZSBfQVNNX0ZCX0hfCisKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2lmZGVmIENPTkZJR19NTVUKKyNpZmRlZiBDT05GSUdfU1VOMworc3RhdGljIGlubGluZSB2b2lkIGZiX3BncHJvdGVjdChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJdW5zaWduZWQgbG9uZyBvZmYpCit7CisJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gU1VOM19QQUdFX05PQ0FDSEU7Cit9CiAjZWxzZQotI2luY2x1ZGUgImZiX21tLmgiCi0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYl9wZ3Byb3RlY3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgb2ZmKQoreworCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKKwkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9DQUNIRTAzMDsKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKKwkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJj0gX0NBQ0hFTUFTSzA0MDsKKwkJLyogVXNlIG5vLWNhY2hlIG1vZGUsIHNlcmlhbGl6ZWQgKi8KKwkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9DQUNIRV9TOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfU1VOMyAqLworI2Vsc2UKKyNkZWZpbmUgZmJfcGdwcm90ZWN0KC4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCitzdGF0aWMgaW5saW5lIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9BU01fRkJfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYl9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MGI5N2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jaWZuZGVmIF9BU01fRkJfSF8KLSNkZWZpbmUgX0FTTV9GQl9IXwotCi0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLSNpZmRlZiBDT05GSUdfU1VOMwotc3RhdGljIGlubGluZSB2b2lkIGZiX3BncHJvdGVjdChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJdW5zaWduZWQgbG9uZyBvZmYpCi17Ci0JcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gU1VOM19QQUdFX05PQ0FDSEU7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGZiX3BncHJvdGVjdChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJdW5zaWduZWQgbG9uZyBvZmYpCi17Ci0JaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9OT0NBQ0hFMDMwOwotCWlmIChDUFVfSVNfMDQwX09SXzA2MCkgewotCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmPSBfQ0FDSEVNQVNLMDQwOwotCQkvKiBVc2Ugbm8tY2FjaGUgbW9kZSwgc2VyaWFsaXplZCAqLwotCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9OT0NBQ0hFX1M7Ci0JfQotfQotI2VuZGlmIC8qIENPTkZJR19TVU4zICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogX0FTTV9GQl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZmJfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdkZjM4MC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZmJfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgX0FTTV9GQl9IXwotI2RlZmluZSBfQVNNX0ZCX0hfCi0jaW5jbHVkZSA8bGludXgvZmIuaD4KLQotI2RlZmluZSBmYl9wZ3Byb3RlY3QoLi4uKSBkbyB7fSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSBpbnQgZmJfaXNfcHJpbWFyeV9kZXZpY2Uoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX0ZCX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1LmgKaW5kZXggZTE5YmM1ZS4uZmZiNmI4YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mcHUuaApAQCAtMSw1ICsxLDIxIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJmcHVfbm8uaCIKKyNpZm5kZWYgX19NNjhLX0ZQVV9ICisjZGVmaW5lIF9fTTY4S19GUFVfSAorCisKKy8qCisgKiBNQVggZmxvYXRpbmcgcG9pbnQgdW5pdCBzdGF0ZSBzaXplIChGU0FWRS9GUkVTVE9SRSkKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApCisjZGVmaW5lIEZQU1RBVEVTSVpFICgyMTYpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwNDApCisjZGVmaW5lIEZQU1RBVEVTSVpFICg5NikKKyNlbGlmIGRlZmluZWQoQ09ORklHX002OEtGUFVfRU1VKQorI2RlZmluZSBGUFNUQVRFU0laRSAoMjgpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjZGVmaW5lIEZQU1RBVEVTSVpFICgxMikKICNlbHNlCi0jaW5jbHVkZSAiZnB1X21tLmgiCisjZGVmaW5lIEZQU1RBVEVTSVpFICgwKQogI2VuZGlmCisKKyNlbmRpZiAvKiBfX002OEtfRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mcHVfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mcHVfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZiNmI4Yy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jaWZuZGVmIF9fTTY4S19GUFVfSAotI2RlZmluZSBfX002OEtfRlBVX0gKLQotCi0vKgotICogTUFYIGZsb2F0aW5nIHBvaW50IHVuaXQgc3RhdGUgc2l6ZSAoRlNBVkUvRlJFU1RPUkUpCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKQotI2RlZmluZSBGUFNUQVRFU0laRSAoMjE2KQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDQwKQotI2RlZmluZSBGUFNUQVRFU0laRSAoOTYpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjhLRlBVX0VNVSkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDI4KQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDYwKQotI2RlZmluZSBGUFNUQVRFU0laRSAoMTIpCi0jZWxzZQotI2RlZmluZSBGUFNUQVRFU0laRSAoMCkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19NNjhLX0ZQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNmIyZTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotI2lmbmRlZiBfX002OEtOT01NVV9GUFVfSAotI2RlZmluZSBfX002OEtOT01NVV9GUFVfSAotCi0KLS8qCi0gKiBNQVggZmxvYXRpbmcgcG9pbnQgdW5pdCBzdGF0ZSBzaXplIChGU0FWRS9GUkVTVE9SRSkKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKQotI2RlZmluZSBGUFNUQVRFU0laRSAoMjE2L3NpemVvZih1bnNpZ25lZCBjaGFyKSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODA0MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDk2L3NpemVvZih1bnNpZ25lZCBjaGFyKSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002OEtGUFVfRU1VKQotI2RlZmluZSBGUFNUQVRFU0laRSAoMjgvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDYwKQotI2RlZmluZSBGUFNUQVRFU0laRSAoMTIvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKQotI2Vsc2UKLS8qIEFzc3VtZSBubyBGUCB1bml0IHByZXNlbnQgdGhlbi4uLiAqLwotI2RlZmluZSBGUFNUQVRFU0laRSAoMikgLyogZHVtbXkgc2l6ZSAqLwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX002OEtfRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZTE5NTI2MC4uZWFjZWYwOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMSw1ICsxLDYgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImh3X2lycV9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJod19pcnFfbW0uaCIKKyNpZm5kZWYgX19BU01fTTY4S19IV19JUlFfSAorI2RlZmluZSBfX0FTTV9NNjhLX0hXX0lSUV9ICisKKy8qIER1bW15IGluY2x1ZGUuICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycV9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWNlZjA5Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9od19pcnFfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9NNjhLX0hXX0lSUV9ICi0jZGVmaW5lIF9fQVNNX002OEtfSFdfSVJRX0gKLQotLyogRHVtbXkgaW5jbHVkZS4gKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZWM5ZTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIF9fTTY4S05PTU1VX0hXX0lSUV9IX18KLSNkZWZpbmUgX19NNjhLTk9NTVVfSFdfSVJRX0hfXwotCi0jZW5kaWYgLyogX19NNjhLTk9NTVVfSFdfSVJRX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKaW5kZXggMDQ1ZDlmZC4uYzg0M2M2MyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlcy5oCkBAIC0xLDUgKzEsMjEgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImttYXBfdHlwZXNfbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAia21hcF90eXBlc19tbS5oIgotI2VuZGlmCisjaWZuZGVmIF9fQVNNX002OEtfS01BUF9UWVBFU19ICisjZGVmaW5lIF9fQVNNX002OEtfS01BUF9UWVBFU19ICisKK2VudW0ga21fdHlwZSB7CisJS01fQk9VTkNFX1JFQUQsCisJS01fU0tCX1NVTlJQQ19EQVRBLAorCUtNX1NLQl9EQVRBX1NPRlRJUlEsCisJS01fVVNFUjAsCisJS01fVVNFUjEsCisJS01fQklPX1NSQ19JUlEsCisJS01fQklPX0RTVF9JUlEsCisJS01fUFRFMCwKKwlLTV9QVEUxLAorCUtNX0lSUTAsCisJS01fSVJRMSwKKwlLTV9TT0ZUSVJRMCwKKwlLTV9TT0ZUSVJRMSwKKwlLTV9UWVBFX05SCit9OworCisjZW5kaWYJLyogX19BU01fTTY4S19LTUFQX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlc19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQzYzYzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX002OEtfS01BUF9UWVBFU19ICi0jZGVmaW5lIF9fQVNNX002OEtfS01BUF9UWVBFU19ICi0KLWVudW0ga21fdHlwZSB7Ci0JS01fQk9VTkNFX1JFQUQsCi0JS01fU0tCX1NVTlJQQ19EQVRBLAotCUtNX1NLQl9EQVRBX1NPRlRJUlEsCi0JS01fVVNFUjAsCi0JS01fVVNFUjEsCi0JS01fQklPX1NSQ19JUlEsCi0JS01fQklPX0RTVF9JUlEsCi0JS01fUFRFMCwKLQlLTV9QVEUxLAotCUtNX0lSUTAsCi0JS01fSVJRMSwKLQlLTV9TT0ZUSVJRMCwKLQlLTV9TT0ZUSVJRMSwKLQlLTV9UWVBFX05SCi19OwotCi0jZW5kaWYJLyogX19BU01fTTY4S19LTUFQX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlc19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmI2NzA3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX002OEtfS01BUF9UWVBFU19ICi0jZGVmaW5lIF9fQVNNX002OEtfS01BUF9UWVBFU19ICi0KLWVudW0ga21fdHlwZSB7Ci0JS01fQk9VTkNFX1JFQUQsCi0JS01fU0tCX1NVTlJQQ19EQVRBLAotCUtNX1NLQl9EQVRBX1NPRlRJUlEsCi0JS01fVVNFUjAsCi0JS01fVVNFUjEsCi0JS01fQklPX1NSQ19JUlEsCi0JS01fQklPX0RTVF9JUlEsCi0JS01fUFRFMCwKLQlLTV9QVEUxLAotCUtNX0lSUTAsCi0JS01fSVJRMSwKLQlLTV9TT0ZUSVJRMCwKLQlLTV9TT0ZUSVJRMSwKLQlLTV9UWVBFX05SCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTMyeHNpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzJ4c2ltLmgKaW5kZXggMTgzNWZkMi4uY2U2MDM0NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzJ4c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzJ4c2ltLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgTUNGSU5UX1ZFQ0JBU0UgICAgICA2NAogI2RlZmluZSBNQ0ZJTlRfVUFSVDAgICAgICAgIDI2ICAgICAgICAgIC8qIEludGVycnVwdCBudW1iZXIgZm9yIFVBUlQwICovCiAjZGVmaW5lIE1DRklOVF9VQVJUMSAgICAgICAgMjcgICAgICAgICAgLyogSW50ZXJydXB0IG51bWJlciBmb3IgVUFSVDEgKi8KKyNkZWZpbmUgTUNGSU5UX1VBUlQyICAgICAgICAyOCAgICAgICAgICAvKiBJbnRlcnJ1cHQgbnVtYmVyIGZvciBVQVJUMiAqLwogCiAjZGVmaW5lIE1DRl9XVE1fV0NSCU1DRl9SRUcxNigweEZDMDk4MDAwKQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Yy5oCmluZGV4IGZiOTBkY2YuLjlmNzBhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Yy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Yy5oCkBAIC0xLDUgKzEsMjYgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgIm1jMTQ2ODE4cnRjX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgIm1jMTQ2ODE4cnRjX21tLmgiCi0jZW5kaWYKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgorICovCisjaWZuZGVmIF9BU01fTUMxNDY4MThSVENfSAorI2RlZmluZSBfQVNNX01DMTQ2ODE4UlRDX0gKKworCisjaWZkZWYgQ09ORklHX0FUQVJJCisvKiBSVEMgaW4gQXRhcmkgbWFjaGluZXMgKi8KKworI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CisKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKFRUX1JUQ19CQVMgKyAyKih4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMAorCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCithdGFyaV9vdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAorYXRhcmlfaW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorYXRhcmlfb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK2F0YXJpX291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisjZW5kaWYgLyogQ09ORklHX0FUQVJJICovCisKKyNlbmRpZiAvKiBfQVNNX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Y19tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jMTQ2ODE4cnRjX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNzBhMDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jMTQ2ODE4cnRjX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKgotICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KLSAqLwotI2lmbmRlZiBfQVNNX01DMTQ2ODE4UlRDX0gKLSNkZWZpbmUgX0FTTV9NQzE0NjgxOFJUQ19ICi0KLQotI2lmZGVmIENPTkZJR19BVEFSSQotLyogUlRDIGluIEF0YXJpIG1hY2hpbmVzICovCi0KLSNpbmNsdWRlIDxhc20vYXRhcmlody5oPgotCi0jZGVmaW5lIFJUQ19QT1JUKHgpCShUVF9SVENfQkFTICsgMiooeCkpCi0jZGVmaW5lIFJUQ19BTFdBWVNfQkNECTAKLQotI2RlZmluZSBDTU9TX1JFQUQoYWRkcikgKHsgXAotYXRhcmlfb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKLWF0YXJpX2luYl9wKFJUQ19QT1JUKDEpKTsgXAotfSkKLSNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpICh7IFwKLWF0YXJpX291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCi1hdGFyaV9vdXRiX3AoKHZhbCksUlRDX1BPUlQoMSkpOyBcCi19KQotI2VuZGlmIC8qIENPTkZJR19BVEFSSSAqLwotCi0jZW5kaWYgLyogX0FTTV9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGNfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Y19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDdhMDQ4MS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGNfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotLyoKLSAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCi0gKi8KLSNpZm5kZWYgX002OEtOT01NVV9NQzE0NjgxOFJUQ19ICi0jZGVmaW5lIF9NNjhLTk9NTVVfTUMxNDY4MThSVENfSAotCi0vKiBlbXB0eSBpbmNsdWRlIGZpbGUgdG8gc2F0aXNmeSB0aGUgaW5jbHVkZSBpbiBnZW5ydGMuYy9pZGUtZ2VvbWV0cnkuYyAqLwotCi0jZW5kaWYgLyogX002OEtOT01NVV9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmcGNpLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmcGNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNTA3ZGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnBjaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICoJbWNmcGNpLmggLS0gUENJIGJyaWRnZSBvbiBDb2xkRmlyZSBldmFsIGJvYXJkcy4KLSAqCi0gKgkoQykgQ29weXJpZ2h0IDIwMDAsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCi0gKgkoQykgQ29weXJpZ2h0IDIwMDAsIExpbmVvIEluYy4gKHd3dy5saW5lby5jb20pCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCW1jZnBjaV9oCi0jZGVmaW5lCW1jZnBjaV9oCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZkZWYgQ09ORklHX1BDSQotCi0vKgotICoJQWRkcmVzcyByZWdpb25zIGluIHRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBhcmUgbm90IG1hcHBlZCBpbnRvIHRoZQotICoJbm9ybWFsIG1lbW9yeSBzcGFjZSBvZiB0aGUgQ29sZEZpcmUuIFRoZXkgbXVzdCBiZSBhY2Nlc3NlZCB2aWEKLSAqCWhhbmRsZXIgcm91dGluZXMuIFRoaXMgaXMgZWFzeSBmb3IgSS9PIHNwYWNlIChpbmIvb3V0Yi9ldGMpIGJ1dAotICoJbmVlZHMgc29tZSBjb2RlIGNoYW5nZXMgdG8gc3VwcG9ydCBvcmRpbmFyeSBtZW1vcnkuIEludGVycnVwdHMKLSAqCWFsc28gbmVlZCB0byBiZSB2ZWN0b3JlZCB0aHJvdWdoIHRoZSBQQ0kgaGFuZGxlciBmaXJzdCwgdGhlbiBpdAotICoJd2lsbCBjYWxsIHRoZSBhY3R1YWwgZHJpdmVyIHN1Yi1oYW5kbGVycy4KLSAqLwotCi0vKgotICoJVW4tZGVmaW5lIGFsbCB0aGUgc3RhbmRhcmQgSS9PIGFjY2VzcyByb3V0aW5lcy4KLSAqLwotI3VuZGVmCWluYgotI3VuZGVmCWludwotI3VuZGVmCWlubAotI3VuZGVmCWluYl9wCi0jdW5kZWYJaW53X3AKLSN1bmRlZglpbnNiCi0jdW5kZWYJaW5zdwotI3VuZGVmCWluc2wKLSN1bmRlZglvdXRiCi0jdW5kZWYJb3V0dwotI3VuZGVmCW91dGwKLSN1bmRlZglvdXRiX3AKLSN1bmRlZglvdXR3X3AKLSN1bmRlZglvdXRzYgotI3VuZGVmCW91dHN3Ci0jdW5kZWYJb3V0c2wKLQotI3VuZGVmCXJlcXVlc3RfaXJxCi0jdW5kZWYJZnJlZV9pcnEKLQotI3VuZGVmCWJ1c190b192aXJ0Ci0jdW5kZWYJdmlydF90b19idXMKLQotCi0vKgotICoJUmUtZGlyZWN0IGFsbCBJL08gbWVtb3J5IGFjY2Vzc2VzIGZ1bmN0aW9ucyB0byBQQ0kgc3BlY2lmaWMgb25lcy4KLSAqLwotI2RlZmluZQlpbmIJcGNpX2luYgotI2RlZmluZQlpbncJcGNpX2ludwotI2RlZmluZQlpbmwJcGNpX2lubAotI2RlZmluZQlpbmJfcAlwY2lfaW5iCi0jZGVmaW5lCWlud19wCXBjaV9pbncKLSNkZWZpbmUJaW5zYglwY2lfaW5zYgotI2RlZmluZQlpbnN3CXBjaV9pbnN3Ci0jZGVmaW5lCWluc2wJcGNpX2luc2wKLQotI2RlZmluZQlvdXRiCXBjaV9vdXRiCi0jZGVmaW5lCW91dHcJcGNpX291dHcKLSNkZWZpbmUJb3V0bAlwY2lfb3V0bAotI2RlZmluZQlvdXRiX3AJcGNpX291dGIKLSNkZWZpbmUJb3V0d19wCXBjaV9vdXR3Ci0jZGVmaW5lCW91dHNiCXBjaV9vdXRzYgotI2RlZmluZQlvdXRzdwlwY2lfb3V0c3cKLSNkZWZpbmUJb3V0c2wJcGNpX291dHNsCi0KLSNkZWZpbmUJcmVxdWVzdF9pcnEJcGNpX3JlcXVlc3RfaXJxCi0jZGVmaW5lCWZyZWVfaXJxCXBjaV9mcmVlX2lycQotCi0jZGVmaW5lCXZpcnRfdG9fYnVzCXBjaV92aXJ0X3RvX2J1cwotI2RlZmluZQlidXNfdG9fdmlydAlwY2lfYnVzX3RvX3ZpcnQKLQotI2RlZmluZQlDT05GSUdfQ09NRU1QQ0kJMQotCi0KLS8qCi0gKglQcm90b3R5cGVzIG9mIHRoZSByZWFsIFBDSSBmdW5jdGlvbnMgKGRlZmluZWQgaW4gYmlvczMyLmMpLgotICovCi11bnNpZ25lZCBjaGFyCXBjaV9pbmIodW5zaWduZWQgaW50IGFkZHIpOwotdW5zaWduZWQgc2hvcnQJcGNpX2ludyh1bnNpZ25lZCBpbnQgYWRkcik7Ci11bnNpZ25lZCBpbnQJcGNpX2lubCh1bnNpZ25lZCBpbnQgYWRkcik7Ci12b2lkCQlwY2lfaW5zYih2b2lkICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pOwotdm9pZAkJcGNpX2luc3codm9pZCAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKLXZvaWQJCXBjaV9pbnNsKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7Ci0KLXZvaWQJCXBjaV9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcik7Ci12b2lkCQlwY2lfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKTsKLXZvaWQJCXBjaV9vdXRsKHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKTsKLXZvaWQJCXBjaV9vdXRzYih2b2lkICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pOwotdm9pZAkJcGNpX291dHN3KHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7Ci12b2lkCQlwY2lfb3V0c2wodm9pZCAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKLQotaW50CQlwY2lfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKLQkJCXZvaWQgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCi0JCQl1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJY29uc3QgY2hhciAqZGV2aWNlLAotCQkJdm9pZCAqZGV2X2lkKTsKLXZvaWQJCXBjaV9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotCi12b2lkCQkqcGNpX2JtYWxsb2MoaW50IHNpemUpOwotdm9pZAkJcGNpX2JtZnJlZSh2b2lkICpibXAsIGludCBsZW4pOwotdm9pZAkJcGNpX2NvcHl0b3NobWVtKHVuc2lnbmVkIGxvbmcgYm1wLCB2b2lkICpzcmMsIGludCBzaXplKTsKLXZvaWQJCXBjaV9jb3B5ZnJvbXNobWVtKHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBibXAsIGludCBzaXplKTsKLXVuc2lnbmVkIGxvbmcJcGNpX3ZpcnRfdG9fYnVzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpOwotdm9pZAkJKnBjaV9idXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwotdm9pZAkJcGNpX2JtY3B5dG8odm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pOwotdm9pZAkJcGNpX2JtY3B5ZnJvbSh2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbik7Ci0KLSNlbmRpZiAvKiBDT05GSUdfUENJICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNlbmRpZgkvKiBtY2ZwY2lfaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGE4MWQzOTQuLjhhMTFhNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11LmgKQEAgLTEsNSArMSwxMyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAibW11X25vLmgiCisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisjaWZkZWYgQ09ORklHX01NVQorLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKICNlbHNlCi0jaW5jbHVkZSAibW11X21tLmgiCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZwkJZW5kX2JyazsKK30gbW1fY29udGV4dF90OworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBiNDQwOTI4Li43ZDQzNDFlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMSw1ICsxLDE3NSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAibW11X2NvbnRleHRfbm8uaCIKKyNpZm5kZWYgX19NNjhLX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19NNjhLX01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKyNpZmRlZiBDT05GSUdfTU1VCisjaWZuZGVmIENPTkZJR19TVU4zCisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJbW0tPmNvbnRleHQgPSB2aXJ0X3RvX3BoeXMobW0tPnBnZCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQkJZG8geyB9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW1fMDIzMChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIGNycFsyXSA9IHsKKwkJMHg4MDAwMDAwMCB8IF9QQUdFX1RBQkxFLCBtbS0+Y29udGV4dAorCX07CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2ODAzMCIpOworCisJLyogZmx1c2ggTUM2ODAzMC9NQzY4MDIwIGNhY2hlcyAodGhleSBhcmUgdmlydHVhbGx5IGFkZHJlc3NlZCkgKi8KKwlhc20gdm9sYXRpbGUgKAorCQkibW92ZWMgJSVjYWNyLCUwOyIKKwkJIm9ydyAlMSwlMDsgIgorCQkibW92ZWMgJTAsJSVjYWNyIgorCQk6ICI9ZCIgKHRtcCkgOiAiZGkiIChGTFVTSF9JX0FORF9EKSk7CisKKwkvKiBTd2l0Y2ggdGhlIHJvb3QgcG9pbnRlci4gRm9yIGEgMDMwLW9ubHkga2VybmVsLAorCSAqIGF2b2lkIGZsdXNoaW5nIHRoZSB3aG9sZSBBVEMsIHdlIG9ubHkgbmVlZCB0bworCSAqIGZsdXNoIHRoZSB1c2VyIGVudHJpZXMuIFRoZSA2ODg1MSBkb2VzIHRoaXMgYnkKKwkgKiBpdHNlbGYuIEF2b2lkIGEgcnVudGltZSBjaGVjayBoZXJlLgorCSAqLworCWFzbSB2b2xhdGlsZSAoCisjaWZkZWYgQ1BVX002ODAzMF9PTkxZCisJCSJwbW92ZWZkICUwLCUlY3JwOyAiCisJCSJwZmx1c2ggIzAsIzQiCiAjZWxzZQotI2luY2x1ZGUgIm1tdV9jb250ZXh0X21tLmgiCisJCSJwbW92ZSAlMCwlJWNycCIKICNlbmRpZgorCQk6IDogIm0iIChjcnBbMF0pKTsKKworCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4ayIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tXzA0NjAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwNDAiKTsKKworCS8qIGZsdXNoIGFkZHJlc3MgdHJhbnNsYXRpb24gY2FjaGUgKHVzZXIgZW50cmllcykgKi8KKwlhc20gdm9sYXRpbGUgKCJwZmx1c2hhbiIpOworCisJLyogc3dpdGNoIHRoZSByb290IHBvaW50ZXIgKi8KKwlhc20gdm9sYXRpbGUgKCJtb3ZlYyAlMCwlJXVycCIgOiA6ICJyIiAobW0tPmNvbnRleHQpKTsKKworCWlmIChDUFVfSVNfMDYwKSB7CisJCXVuc2lnbmVkIGxvbmcgdG1wOworCisJCS8qIGNsZWFyIHVzZXIgZW50cmllcyBpbiB0aGUgYnJhbmNoIGNhY2hlICovCisJCWFzbSB2b2xhdGlsZSAoCisJCQkibW92ZWMgJSVjYWNyLCUwOyAiCisJCSAgICAgICAgIm9ybCAlMSwlMDsgIgorCQkgICAgICAgICJtb3ZlYyAlMCwlJWNhY3IiCisJCQk6ICI9ZCIgKHRtcCk6ICJkaSIgKDB4MDAyMDAwMDApKTsKKwl9CisKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2OGsiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAocHJldiAhPSBuZXh0KSB7CisJCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKKwkJCXN3aXRjaF9tbV8wMjMwKG5leHQpOworCQllbHNlCisJCQlzd2l0Y2hfbW1fMDQ2MChuZXh0KTsKKwl9Cit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sCisJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKK3sKKwluZXh0X21tLT5jb250ZXh0ID0gdmlydF90b19waHlzKG5leHRfbW0tPnBnZCk7CisKKwlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCisJCXN3aXRjaF9tbV8wMjMwKG5leHRfbW0pOworCWVsc2UKKwkJc3dpdGNoX21tXzA0NjAobmV4dF9tbSk7Cit9CisKKyNlbHNlICAvKiBDT05GSUdfU1VOMyAqLworI2luY2x1ZGUgPGFzbS9zdW4zbW11Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2ZyZWVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBjbGVhcl9jb250ZXh0KHVuc2lnbmVkIGxvbmcgY29udGV4dCk7CisKKy8qIHNldCB0aGUgY29udGV4dCBmb3IgYSBuZXcgdGFzayB0byB1bm1hcHBlZCAqLworc3RhdGljIGlubGluZSBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJbW0tPmNvbnRleHQgPSBTVU4zX0lOVkFMSURfQ09OVEVYVDsKKwlyZXR1cm4gMDsKK30KKworLyogZmluZCB0aGUgY29udGV4dCBnaXZlbiB0byB0aGlzIHByb2Nlc3MsIGFuZCBpZiBpdCBoYXNuJ3QgYWxyZWFkeQorICAgZ290IG9uZSwgZ28gZ2V0IG9uZSBmb3IgaXQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmKG1tLT5jb250ZXh0ID09IFNVTjNfSU5WQUxJRF9DT05URVhUKQorCQltbS0+Y29udGV4dCA9IGdldF9mcmVlX2NvbnRleHQobW0pOworfQorCisvKiBmbHVzaCBjb250ZXh0IGlmIGFsbG9jYXRlZC4uLiAqLworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZihtbS0+Y29udGV4dCAhPSBTVU4zX0lOVkFMSURfQ09OVEVYVCkKKwkJY2xlYXJfY29udGV4dChtbS0+Y29udGV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWdldF9tbXVfY29udGV4dChtbSk7CisJc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJYWN0aXZhdGVfY29udGV4dCh0c2stPm1tKTsKK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwKKwkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tKQoreworCWFjdGl2YXRlX2NvbnRleHQobmV4dF9tbSk7Cit9CisKKyNlbmRpZgorI2Vsc2UgLyogIUNPTkZJR19NTVUgKi8KKworc3RhdGljIGlubGluZSBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworI2RlZmluZSBkZXN0cm95X2NvbnRleHQobW0pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisjZW5kaWYgLyogX19NNjhLX01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NGRhY2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotI2lmbmRlZiBfX002OEtfTU1VX0NPTlRFWFRfSAotI2RlZmluZSBfX002OEtfTU1VX0NPTlRFWFRfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1faG9va3MuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLX0KLQotI2lmbmRlZiBDT05GSUdfU1VOMwotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotCi1zdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAotCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCW1tLT5jb250ZXh0ID0gdmlydF90b19waHlzKG1tLT5wZ2QpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tXzAyMzAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JdW5zaWduZWQgbG9uZyBjcnBbMl0gPSB7Ci0JCTB4ODAwMDAwMDAgfCBfUEFHRV9UQUJMRSwgbW0tPmNvbnRleHQKLQl9OwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwMzAiKTsKLQotCS8qIGZsdXNoIE1DNjgwMzAvTUM2ODAyMCBjYWNoZXMgKHRoZXkgYXJlIHZpcnR1YWxseSBhZGRyZXNzZWQpICovCi0JYXNtIHZvbGF0aWxlICgKLQkJIm1vdmVjICUlY2FjciwlMDsiCi0JCSJvcncgJTEsJTA7ICIKLQkJIm1vdmVjICUwLCUlY2FjciIKLQkJOiAiPWQiICh0bXApIDogImRpIiAoRkxVU0hfSV9BTkRfRCkpOwotCi0JLyogU3dpdGNoIHRoZSByb290IHBvaW50ZXIuIEZvciBhIDAzMC1vbmx5IGtlcm5lbCwKLQkgKiBhdm9pZCBmbHVzaGluZyB0aGUgd2hvbGUgQVRDLCB3ZSBvbmx5IG5lZWQgdG8KLQkgKiBmbHVzaCB0aGUgdXNlciBlbnRyaWVzLiBUaGUgNjg4NTEgZG9lcyB0aGlzIGJ5Ci0JICogaXRzZWxmLiBBdm9pZCBhIHJ1bnRpbWUgY2hlY2sgaGVyZS4KLQkgKi8KLQlhc20gdm9sYXRpbGUgKAotI2lmZGVmIENQVV9NNjgwMzBfT05MWQotCQkicG1vdmVmZCAlMCwlJWNycDsgIgotCQkicGZsdXNoICMwLCM0IgotI2Vsc2UKLQkJInBtb3ZlICUwLCUlY3JwIgotI2VuZGlmCi0JCTogOiAibSIgKGNycFswXSkpOwotCi0JYXNtIHZvbGF0aWxlICgiLmNoaXAgNjhrIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW1fMDQ2MChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlhc20gdm9sYXRpbGUgKCIuY2hpcCA2ODA0MCIpOwotCi0JLyogZmx1c2ggYWRkcmVzcyB0cmFuc2xhdGlvbiBjYWNoZSAodXNlciBlbnRyaWVzKSAqLwotCWFzbSB2b2xhdGlsZSAoInBmbHVzaGFuIik7Ci0KLQkvKiBzd2l0Y2ggdGhlIHJvb3QgcG9pbnRlciAqLwotCWFzbSB2b2xhdGlsZSAoIm1vdmVjICUwLCUldXJwIiA6IDogInIiIChtbS0+Y29udGV4dCkpOwotCi0JaWYgKENQVV9JU18wNjApIHsKLQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQkJLyogY2xlYXIgdXNlciBlbnRyaWVzIGluIHRoZSBicmFuY2ggY2FjaGUgKi8KLQkJYXNtIHZvbGF0aWxlICgKLQkJCSJtb3ZlYyAlJWNhY3IsJTA7ICIKLQkJICAgICAgICAib3JsICUxLCUwOyAiCi0JCSAgICAgICAgIm1vdmVjICUwLCUlY2FjciIKLQkJCTogIj1kIiAodG1wKTogImRpIiAoMHgwMDIwMDAwMCkpOwotCX0KLQotCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4ayIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmIChwcmV2ICE9IG5leHQpIHsKLQkJaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQkJc3dpdGNoX21tXzAyMzAobmV4dCk7Ci0JCWVsc2UKLQkJCXN3aXRjaF9tbV8wNDYwKG5leHQpOwotCX0KLX0KLQotI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwKLQkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tKQotewotCW5leHRfbW0tPmNvbnRleHQgPSB2aXJ0X3RvX3BoeXMobmV4dF9tbS0+cGdkKTsKLQotCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKLQkJc3dpdGNoX21tXzAyMzAobmV4dF9tbSk7Ci0JZWxzZQotCQlzd2l0Y2hfbW1fMDQ2MChuZXh0X21tKTsKLX0KLQotI2Vsc2UgIC8qIENPTkZJR19TVU4zICovCi0jaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfZnJlZV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLWV4dGVybiB2b2lkIGNsZWFyX2NvbnRleHQodW5zaWduZWQgbG9uZyBjb250ZXh0KTsKLQotLyogc2V0IHRoZSBjb250ZXh0IGZvciBhIG5ldyB0YXNrIHRvIHVubWFwcGVkICovCi1zdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQltbS0+Y29udGV4dCA9IFNVTjNfSU5WQUxJRF9DT05URVhUOwotCXJldHVybiAwOwotfQotCi0vKiBmaW5kIHRoZSBjb250ZXh0IGdpdmVuIHRvIHRoaXMgcHJvY2VzcywgYW5kIGlmIGl0IGhhc24ndCBhbHJlYWR5Ci0gICBnb3Qgb25lLCBnbyBnZXQgb25lIGZvciBpdC4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JaWYobW0tPmNvbnRleHQgPT0gU1VOM19JTlZBTElEX0NPTlRFWFQpCi0JCW1tLT5jb250ZXh0ID0gZ2V0X2ZyZWVfY29udGV4dChtbSk7Ci19Ci0KLS8qIGZsdXNoIGNvbnRleHQgaWYgYWxsb2NhdGVkLi4uICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCWlmKG1tLT5jb250ZXh0ICE9IFNVTjNfSU5WQUxJRF9DT05URVhUKQotCQljbGVhcl9jb250ZXh0KG1tLT5jb250ZXh0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JZ2V0X21tdV9jb250ZXh0KG1tKTsKLQlzdW4zX3B1dF9jb250ZXh0KG1tLT5jb250ZXh0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlhY3RpdmF0ZV9jb250ZXh0KHRzay0+bW0pOwotfQotCi0jZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLAotCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCi17Ci0JYWN0aXZhdGVfY29udGV4dChuZXh0X21tKTsKLX0KLQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljY2VlNDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jaWZuZGVmIF9fTTY4S05PTU1VX01NVV9DT05URVhUX0gKLSNkZWZpbmUgX19NNjhLTk9NTVVfTU1VX0NPTlRFWFRfSAotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQkvLyBtbS0+Y29udGV4dCA9IHZpcnRfdG9fcGh5cyhtbS0+cGdkKTsKLQlyZXR1cm4oMCk7Ci19Ci0KLSNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQkJZG8geyB9IHdoaWxlKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sCi0JCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKLXsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZDM2ZDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9fTU1VX0gKLSNkZWZpbmUgX19NTVVfSAotCi0vKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF90OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJkYTFlNi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIF9fTTY4S05PTU1VX01NVV9ICi0jZGVmaW5lIF9fTTY4S05PTU1VX01NVV9ICi0KLS8qIENvcHlyaWdodCAoQykgMjAwMiwgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7Ci19IG1tX2NvbnRleHRfdDsKLQotI2VuZGlmIC8qIF9fTTY4S05PTU1VX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggNzliNTlkMS4uNWYyMWUxMSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtMSw1ICsxLDQ4IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJtb2R1bGVfbm8uaCIKKyNpZm5kZWYgX0FTTV9NNjhLX01PRFVMRV9ICisjZGVmaW5lIF9BU01fTTY4S19NT0RVTEVfSAorCisjaWZkZWYgQ09ORklHX01NVQorCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeworCXN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKmZpeHVwX3N0YXJ0LCAqZml4dXBfZW5kOworfTsKKworI2RlZmluZSBNT0RVTEVfQVJDSF9JTklUIHsJCQkJXAorCS5maXh1cF9zdGFydAkJPSBfX3N0YXJ0X2ZpeHVwLAlcCisJLmZpeHVwX2VuZAkJPSBfX3N0b3BfZml4dXAsCQlcCit9CisKKworZW51bSBtNjhrX2ZpeHVwX3R5cGUgeworCW02OGtfZml4dXBfbWVtb2Zmc2V0LAorCW02OGtfZml4dXBfdm5vZGVfc2hpZnQsCit9OworCitzdHJ1Y3QgbTY4a19maXh1cF9pbmZvIHsKKwllbnVtIG02OGtfZml4dXBfdHlwZSB0eXBlOworCXZvaWQgKmFkZHI7Cit9OworCisjZGVmaW5lIG02OGtfZml4dXAodHlwZSwgYWRkcikJCQlcCisJIgkuc2VjdGlvbiBcIi5tNjhrX2ZpeHVwXCIsXCJhd1wiXG4iCVwKKwkiCS5sb25nICIgI3R5cGUgIiwiICNhZGRyICJcbiIJXAorCSIJLnByZXZpb3VzXG4iCisKK2V4dGVybiBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvIF9fc3RhcnRfZml4dXBbXSwgX19zdG9wX2ZpeHVwW107CisKK3N0cnVjdCBtb2R1bGU7CitleHRlcm4gdm9pZCBtb2R1bGVfZml4dXAoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICpzdGFydCwKKwkJCSBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICplbmQpOworCiAjZWxzZQotI2luY2x1ZGUgIm1vZHVsZV9tbS5oIgotI2VuZGlmCisKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7Cit9OworCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorCisjZW5kaWYgLyogX0FTTV9NNjhLX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MmQyMGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZV9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotI2lmbmRlZiBfQVNNX002OEtfTU9EVUxFX0gKLSNkZWZpbmUgX0FTTV9NNjhLX01PRFVMRV9ICi0KLXN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7Ci0Jc3RydWN0IG02OGtfZml4dXBfaW5mbyAqZml4dXBfc3RhcnQsICpmaXh1cF9lbmQ7Ci19OwotCi0jZGVmaW5lIE1PRFVMRV9BUkNIX0lOSVQgewkJCQlcCi0JLmZpeHVwX3N0YXJ0CQk9IF9fc3RhcnRfZml4dXAsCVwKLQkuZml4dXBfZW5kCQk9IF9fc3RvcF9maXh1cCwJCVwKLX0KLQotI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCi0jZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCi0jZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKLQotCi1lbnVtIG02OGtfZml4dXBfdHlwZSB7Ci0JbTY4a19maXh1cF9tZW1vZmZzZXQsCi0JbTY4a19maXh1cF92bm9kZV9zaGlmdCwKLX07Ci0KLXN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gewotCWVudW0gbTY4a19maXh1cF90eXBlIHR5cGU7Ci0Jdm9pZCAqYWRkcjsKLX07Ci0KLSNkZWZpbmUgbTY4a19maXh1cCh0eXBlLCBhZGRyKQkJCVwKLQkiCS5zZWN0aW9uIFwiLm02OGtfZml4dXBcIixcImF3XCJcbiIJXAotCSIJLmxvbmcgIiAjdHlwZSAiLCIgI2FkZHIgIlxuIglcCi0JIgkucHJldmlvdXNcbiIKLQotZXh0ZXJuIHN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gX19zdGFydF9maXh1cFtdLCBfX3N0b3BfZml4dXBbXTsKLQotc3RydWN0IG1vZHVsZTsKLWV4dGVybiB2b2lkIG1vZHVsZV9maXh1cChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKnN0YXJ0LAotCQkJIHN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKmVuZCk7Ci0KLSNlbmRpZiAvKiBfQVNNX002OEtfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb2R1bGVfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb2R1bGVfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU0NWFiNS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jaWZuZGVmIEFTTV9NNjhLTk9NTVVfTU9EVUxFX0gKLSNkZWZpbmUgQVNNX002OEtOT01NVV9NT0RVTEVfSAotCi1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgewotfTsKLQotI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCi0jZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCi0jZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKLQotI2VuZGlmIC8qIEFTTV9NNjhLTk9NTVVfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKaW5kZXggNjY0NTVjOC4uMTc4MDE1MiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKQEAgLTEsNSArMSwxMSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAicGFnZV9vZmZzZXRfbm8uaCIKKy8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCisKKyNpZmRlZiBDT05GSUdfTU1VCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMAogI2Vsc2UKLSNpbmNsdWRlICJwYWdlX29mZnNldF9tbS5oIgorI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MEUwMDAwMDAKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUJUEFHRV9PRkZTRVRfUkFXCQlDT05GSUdfUkFNQkFTRQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2JkYjdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0KLS8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCi0jaWZuZGVmIENPTkZJR19TVU4zCi0jZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMAotI2Vsc2UKLSNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDBFMDAwMDAwCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlNzNlMC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotCi0KLS8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCi0jZGVmaW5lCVBBR0VfT0ZGU0VUX1JBVwkJQ09ORklHX1JBTUJBU0UKLQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IGRiZWE5NTMuLjRhZDBhZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTEsNSArMSwxMiBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAicGNpX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInBjaV9tbS5oIgotI2VuZGlmCisjaWZuZGVmIF9BU01fTTY4S19QQ0lfSAorI2RlZmluZSBfQVNNX002OEtfUENJX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKKworI2VuZGlmIC8qIF9BU01fTTY4S19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaV9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWQwYWVhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2lfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NNjhLX1BDSV9ICi0jZGVmaW5lIF9BU01fTTY4S19QQ0lfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KLQotLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeQotICogYWRkcmVzcyBzcGFjZS4gIFRoZSBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZQotICogdGhpcyBib29sZWFuIGZvciBib3VuY2UgYnVmZmVyIGRlY2lzaW9ucy4KLSAqLwotI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgxKQotCi0jZW5kaWYgLyogX0FTTV9NNjhLX1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGNpX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGNpX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYmJjMDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotI2lmbmRlZiBNNjhLTk9NTVVfUENJX0gKLSNkZWZpbmUJTTY4S05PTU1VX1BDSV9ICi0KLSNpbmNsdWRlIDxhc20vcGNpX21tLmg+Ci0KLSNpZmRlZiBDT05GSUdfQ09NRU1QQ0kKLS8qCi0gKglUaGVzZSBhcmUgcHJldHR5IG11Y2ggYXJiaXRhcnkgd2l0aCB0aGUgQ29NRU0gaW1wbGVtZW50YXRpb24uCi0gKglXZSBoYXZlIHRoZSB3aG9sZSBhZGRyZXNzIHNwYWNlIHRvIG91cnNlbHZlcy4KLSAqLwotI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHgxMDAKLSNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkweDAwMDEwMDAwCi0KLSNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAotCi0vKgotICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIFBDSSBkZXZpY2UgRE1BIGFkZHJlc3MgbWFzayBjYW4KLSAqIGJlIHN1cHBvcnRlZCBwcm9wZXJseS4gIEZvciBleGFtcGxlLCBpZiB5b3VyIGRldmljZSBjYW4KLSAqIG9ubHkgZHJpdmUgdGhlIGxvdyAyNC1iaXRzIGR1cmluZyBQQ0kgYnVzIG1hc3RlcmluZywgdGhlbgotICogeW91IHdvdWxkIHBhc3MgMHgwMGZmZmZmZiBhcyB0aGUgbWFzayB0byB0aGlzIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHU2NCBtYXNrKQotewotCXJldHVybiAxOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0NPTUVNUENJICovCi0KLSNlbmRpZiAvKiBNNjhLTk9NTVVfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDA1OWNiNzMuLmMyOTRhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMSw1ICsxLDE5IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJwZ2FsbG9jX25vLmgiCisjaWZuZGVmIE02OEtfUEdBTExPQ19ICisjZGVmaW5lIE02OEtfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2lmZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KKyNpZmRlZiBDT05GSUdfU1VOMworI2luY2x1ZGUgPGFzbS9zdW4zX3BnYWxsb2MuaD4KICNlbHNlCi0jaW5jbHVkZSAicGdhbGxvY19tbS5oIgorI2luY2x1ZGUgPGFzbS9tb3Rvcm9sYV9wZ2FsbG9jLmg+CiAjZW5kaWYKKworZXh0ZXJuIHZvaWQgbTY4a19zZXR1cF9ub2RlKGludCBub2RlKTsKKyNlbmRpZgorCisjZW5kaWYgLyogTTY4S19QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvY19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2IxYTU3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0KLSNpZm5kZWYgTTY4S19QR0FMTE9DX0gKLSNkZWZpbmUgTTY4S19QR0FMTE9DX0gKLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgotCi0KLSNpZmRlZiBDT05GSUdfU1VOMwotI2luY2x1ZGUgPGFzbS9zdW4zX3BnYWxsb2MuaD4KLSNlbHNlCi0jaW5jbHVkZSA8YXNtL21vdG9yb2xhX3BnYWxsb2MuaD4KLSNlbmRpZgotCi1leHRlcm4gdm9pZCBtNjhrX3NldHVwX25vZGUoaW50IG5vZGUpOwotCi0jZW5kaWYgLyogTTY4S19QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvY19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjM1MmY2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9QR0FMTE9DX0gKLSNkZWZpbmUgX002OEtOT01NVV9QR0FMTE9DX0gKLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0jZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbm8uaAppbmRleCA0NjI1MTAxLi5iZjg2YjI5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9uby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX25vLmgKQEAgLTY3LDQgKzY3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KIAorI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCisKICNlbmRpZiAvKiBfTTY4S05PTU1VX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3J0Yy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3J0Yy5oCmluZGV4IDVkM2UwMzguLmE0ZDA4ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ydGMuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcnRjLmgKQEAgLTM2LDEzICszNiwxNiBAQAogCSAqIFJUQyBoYXMgUlRDX0RBWV9PRl9XRUVLLCB3ZSBpZ25vcmUgaXQsIGFzIGl0IGlzIG9ubHkgdXBkYXRlZAogCSAqIGJ5IHRoZSBSVEMgd2hlbiBpbml0aWFsbHkgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUuCiAJICovCi0JbWFjaF9od2NsaygwLCB0aW1lKTsKKwlpZiAobWFjaF9od2NsaykKKwkJbWFjaF9od2NsaygwLCB0aW1lKTsKIAlyZXR1cm4gUlRDXzI0SDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKIHsKLQlyZXR1cm4gbWFjaF9od2NsaygxLCB0aW1lKTsKKwlpZiAobWFjaF9od2NsaykKKwkJcmV0dXJuIG1hY2hfaHdjbGsoMSwgdGltZSk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9ydGNfc3Modm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggYjdlNTI4Ni4uZTI3YWQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTEsNSArMSwyMyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic2NhdHRlcmxpc3Rfbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAic2NhdHRlcmxpc3RfbW0uaCIKKyNpZm5kZWYgX002OEtfU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfTTY4S19TQ0FUVEVSTElTVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworI2lmZGVmIENPTkZJR19ERUJVR19TRworCXVuc2lnbmVkIGxvbmcgc2dfbWFnaWM7CiAjZW5kaWYKKwl1bnNpZ25lZCBsb25nIHBhZ2VfbGluazsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBsZW5ndGg7CisKKwlkbWFfYWRkcl90IGRtYV9hZGRyZXNzOwkvKiBBIHBsYWNlIHRvIGhhbmcgaG9zdC1zcGVjaWZpYyBhZGRyZXNzZXMgYXQuICovCit9OworCisvKiBUaGlzIGlzIGJvZ3VzIGFuZCBzaG91bGQgZ28gYXdheS4gKi8KKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCisKKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCisKKyNlbmRpZiAvKiAhKF9NNjhLX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3RfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2E3YTBlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19TQ0FUVEVSTElTVF9ICi0jZGVmaW5lIF9NNjhLX1NDQVRURVJMSVNUX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCBzY2F0dGVybGlzdCB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NHCi0JdW5zaWduZWQgbG9uZyBzZ19tYWdpYzsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcgcGFnZV9saW5rOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JdW5zaWduZWQgaW50IGxlbmd0aDsKLQotCV9fdTMyIGRtYV9hZGRyZXNzOwkvKiBBIHBsYWNlIHRvIGhhbmcgaG9zdC1zcGVjaWZpYyBhZGRyZXNzZXMgYXQuICovCi19OwotCi0vKiBUaGlzIGlzIGJvZ3VzIGFuZCBzaG91bGQgZ28gYXdheS4gKi8KLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCi0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKLSNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCi0KLSNlbmRpZiAvKiAhKF9NNjhLX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3Rfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmM0Nzg4Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1NDQVRURVJMSVNUX0gKLSNkZWZpbmUgX002OEtOT01NVV9TQ0FUVEVSTElTVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi1zdHJ1Y3Qgc2NhdHRlcmxpc3QgewotI2lmZGVmIENPTkZJR19ERUJVR19TRwotCXVuc2lnbmVkIGxvbmcJc2dfbWFnaWM7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nCXBhZ2VfbGluazsKLQl1bnNpZ25lZCBpbnQJb2Zmc2V0OwotCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7Ci0JdW5zaWduZWQgaW50CWxlbmd0aDsKLX07Ci0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICAgICAgKChzZyktPmRtYV9hZGRyZXNzKQotI2RlZmluZSBzZ19kbWFfbGVuKHNnKSAgICAgICAgICAoKHNnKS0+bGVuZ3RoKQotCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECSgweGZmZmZmZmZmKQotCi0jZW5kaWYgLyogIShfTTY4S05PTU1VX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnQuaAppbmRleCA4MjU4M2JjLi5lZTk1OTIxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50LmgKQEAgLTEsNSArMSw2MyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic2VnbWVudF9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJzZWdtZW50X21tLmgiCisjaWZuZGVmIF9NNjhLX1NFR01FTlRfSAorI2RlZmluZSBfTTY4S19TRUdNRU5UX0gKKworLyogZGVmaW5lIGNvbnN0YW50cyAqLworLyogQWRkcmVzcyBzcGFjZXMgKEZDMC1GQzIpICovCisjZGVmaW5lIFVTRVJfREFUQSAgICAgKDEpCisjaWZuZGVmIF9fVVNFUl9EUworI2RlZmluZSBfX1VTRVJfRFMgICAgIChVU0VSX0RBVEEpCiAjZW5kaWYKKyNkZWZpbmUgVVNFUl9QUk9HUkFNICAoMikKKyNkZWZpbmUgU1VQRVJfREFUQSAgICAoNSkKKyNpZm5kZWYgX19LRVJORUxfRFMKKyNkZWZpbmUgX19LRVJORUxfRFMgICAoU1VQRVJfREFUQSkKKyNlbmRpZgorI2RlZmluZSBTVVBFUl9QUk9HUkFNICg2KQorI2RlZmluZSBDUFVfU1BBQ0UgICAgICg3KQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzZWc7Cit9IG1tX3NlZ21lbnRfdDsKKworI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoX19VU0VSX0RTKQorI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoX19LRVJORUxfRFMpCisKKy8qCisgKiBHZXQvc2V0IHRoZSBTRkMvREZDIHJlZ2lzdGVycyBmb3IgTU9WRVMgaW5zdHJ1Y3Rpb25zCisgKi8KKworc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX01NVQorCW1tX3NlZ21lbnRfdCBfdjsKKwlfX2FzbV9fICgibW92ZWMgJS9kZmMsJTAiOiI9ciIgKF92LnNlZyk6KTsKKworCXJldHVybiBfdjsKKyNlbHNlCisJcmV0dXJuIFVTRVJfRFM7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCit7CisgICAgLyogcmV0dXJuIHRoZSBzdXBlcnZpc29yIGRhdGEgc3BhY2UgY29kZSAqLworICAgIHJldHVybiBLRVJORUxfRFM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHZhbCkKK3sKKyNpZmRlZiBDT05GSUdfTU1VCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlYyAlMCwlL3NmY1xuXHQiCisJCQkgICAgICAibW92ZWMgJTAsJS9kZmNcblx0IgorCQkJICAgICAgOiAvKiBubyBvdXRwdXRzICovIDogInIiICh2YWwuc2VnKSA6ICJtZW1vcnkiKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfTTY4S19TRUdNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjBiMmQzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1NFR01FTlRfSAotI2RlZmluZSBfTTY4S19TRUdNRU5UX0gKLQotLyogZGVmaW5lIGNvbnN0YW50cyAqLwotLyogQWRkcmVzcyBzcGFjZXMgKEZDMC1GQzIpICovCi0jZGVmaW5lIFVTRVJfREFUQSAgICAgKDEpCi0jaWZuZGVmIF9fVVNFUl9EUwotI2RlZmluZSBfX1VTRVJfRFMgICAgIChVU0VSX0RBVEEpCi0jZW5kaWYKLSNkZWZpbmUgVVNFUl9QUk9HUkFNICAoMikKLSNkZWZpbmUgU1VQRVJfREFUQSAgICAoNSkKLSNpZm5kZWYgX19LRVJORUxfRFMKLSNkZWZpbmUgX19LRVJORUxfRFMgICAoU1VQRVJfREFUQSkKLSNlbmRpZgotI2RlZmluZSBTVVBFUl9QUk9HUkFNICg2KQotI2RlZmluZSBDUFVfU1BBQ0UgICAgICg3KQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBzZWc7Ci19IG1tX3NlZ21lbnRfdDsKLQotI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKLSNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoX19VU0VSX0RTKQotI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoX19LRVJORUxfRFMpCi0KLS8qCi0gKiBHZXQvc2V0IHRoZSBTRkMvREZDIHJlZ2lzdGVycyBmb3IgTU9WRVMgaW5zdHJ1Y3Rpb25zCi0gKi8KLQotc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCi17Ci0JbW1fc2VnbWVudF90IF92OwotCV9fYXNtX18gKCJtb3ZlYyAlL2RmYywlMCI6Ij1yIiAoX3Yuc2VnKTopOwotCi0JcmV0dXJuIF92OwotfQotCi1zdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZHModm9pZCkKLXsKLSAgICAvKiByZXR1cm4gdGhlIHN1cGVydmlzb3IgZGF0YSBzcGFjZSBjb2RlICovCi0gICAgcmV0dXJuIEtFUk5FTF9EUzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9mcyhtbV9zZWdtZW50X3QgdmFsKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZWMgJTAsJS9zZmNcblx0IgotCQkJICAgICAgIm1vdmVjICUwLCUvZGZjXG5cdCIKLQkJCSAgICAgIDogLyogbm8gb3V0cHV0cyAqLyA6ICJyIiAodmFsLnNlZykgOiAibWVtb3J5Iik7Ci19Ci0KLSNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9NNjhLX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzE4ZWIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSNpZm5kZWYgX002OEtfU0VHTUVOVF9ICi0jZGVmaW5lIF9NNjhLX1NFR01FTlRfSAotCi0vKiBkZWZpbmUgY29uc3RhbnRzICovCi0vKiBBZGRyZXNzIHNwYWNlcyAoRkMwLUZDMikgKi8KLSNkZWZpbmUgVVNFUl9EQVRBICAgICAoMSkKLSNpZm5kZWYgX19VU0VSX0RTCi0jZGVmaW5lIF9fVVNFUl9EUyAgICAgKFVTRVJfREFUQSkKLSNlbmRpZgotI2RlZmluZSBVU0VSX1BST0dSQU0gICgyKQotI2RlZmluZSBTVVBFUl9EQVRBICAgICg1KQotI2lmbmRlZiBfX0tFUk5FTF9EUwotI2RlZmluZSBfX0tFUk5FTF9EUyAgIChTVVBFUl9EQVRBKQotI2VuZGlmCi0jZGVmaW5lIFNVUEVSX1BST0dSQU0gKDYpCi0jZGVmaW5lIENQVV9TUEFDRSAgICAgKDcpCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIHNlZzsKLX0gbW1fc2VnbWVudF90OwotCi0jZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQotI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRyhfX1VTRVJfRFMpCi0jZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRyhfX0tFUk5FTF9EUykKLQotLyoKLSAqIEdldC9zZXQgdGhlIFNGQy9ERkMgcmVnaXN0ZXJzIGZvciBNT1ZFUyBpbnN0cnVjdGlvbnMKLSAqLwotCi1zdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZnModm9pZCkKLXsKLSAgICByZXR1cm4gVVNFUl9EUzsKLX0KLQotc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCi17Ci0gICAgLyogcmV0dXJuIHRoZSBzdXBlcnZpc29yIGRhdGEgc3BhY2UgY29kZSAqLwotICAgIHJldHVybiBLRVJORUxfRFM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHZhbCkKLXsKLX0KLQotI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX002OEtfU0VHTUVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leC5oCmluZGV4IDcxOTc2MjkuLmI4N2YyZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC0xLDUgKzEsMTggQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInRpbWV4X25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInRpbWV4X21tLmgiCisvKgorICogbGludXgvaW5jbHVkZS9hc20tbTY4ay90aW1leC5oCisgKgorICogbTY4ayBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworI2lmbmRlZiBfQVNNbTY4a19USU1FWF9ICisjZGVmaW5lIF9BU01tNjhrX1RJTUVYX0gKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RpbWV4X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXhfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg3ZjJmMi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXhfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1tNjhrL3RpbWV4LmgKLSAqCi0gKiBtNjhrIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwotICovCi0jaWZuZGVmIF9BU01tNjhrX1RJTUVYX0gKLSNkZWZpbmUgX0FTTW02OGtfVElNRVhfSAotCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OwotCi1zdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXhfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDkwNTBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLW02OGtub21tdS90aW1leC5oCi0gKgotICogbTY4a25vbW11IGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwotICovCi0jaWZuZGVmIF9BU01fTTY4S05PTU1VX1RJTUVYX0gKLSNkZWZpbmUgX0FTTV9NNjhLTk9NTVVfVElNRVhfSAotCi0jaWZkZWYgQ09ORklHX0NPTERGSVJFCi0jaW5jbHVkZSA8YXNtL2NvbGRmaXJlLmg+Ci0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQlNQ0ZfQ0xLCi0jZWxzZQotI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCi0jZW5kaWYKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OwotCi1zdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGI2ZjkzYjMuLmE2YjRlZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0xLDUgKzEsMjY3IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJ0bGJmbHVzaF9uby5oIgorI2lmbmRlZiBfTTY4S19UTEJGTFVTSF9ICisjZGVmaW5lIF9NNjhLX1RMQkZMVVNIX0gKKworI2lmZGVmIENPTkZJR19NTVUKKyNpZm5kZWYgQ09ORklHX1NVTjMKKworI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2Uodm9pZCAqYWRkcikKK3sKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKKwkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCisJCQkJICAgICAiLmNoaXAgNjhrIgorCQkJCSAgICAgOiA6ICJhIiAoYWRkcikpOworCQlzZXRfZnMob2xkX2ZzKTsKKwl9IGVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICM0LCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKK30KKworLyoKKyAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKK3sKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICAicGZsdXNoYW5cblx0IgorCQkJCSAgICAgIi5jaGlwIDY4ayIpOworCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICMwLCM0Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYjA0MF9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCisJCQkgICAgICIuY2hpcCA2OGsiCisJCQkgICAgIDogOiAiYSIgKGFkZHIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKQorCQlfX2ZsdXNoX3RsYjA0MF9vbmUoYWRkcik7CisJZWxzZSBpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJwZmx1c2ggIzAsIzQsKCUwKSIgOiA6ICJhIiAoYWRkcikpOworfQorCisjZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKworLyoKKyAqIGZsdXNoIGFsbCBhdGMgZW50cmllcyAoYm90aCBrZXJuZWwgYW5kIHVzZXItc3BhY2UgZW50cmllcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAgInBmbHVzaGFcblx0IgorCQkJCSAgICAgIi5jaGlwIDY4ayIpOworCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoYSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCV9fZmx1c2hfdGxiKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkgeworCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhVU0VSX0RTKTsKKwkJX19mbHVzaF90bGJfb25lKGFkZHIpOworCQlzZXRfZnMob2xkX2ZzKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlfX2ZsdXNoX3RsYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKICNlbHNlCi0jaW5jbHVkZSAidGxiZmx1c2hfbW0uaCIKKworCisvKiBSZXNlcnZlZCBQTUVHcy4gKi8KK2V4dGVybiBjaGFyIHN1bjNfcmVzZXJ2ZWRfcG1lZ1tTVU4zX1BNRUdTX05VTV07CitleHRlcm4gdW5zaWduZWQgbG9uZyBwbWVnX3ZhZGRyW1NVTjNfUE1FR1NfTlVNXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHBtZWdfYWxsb2NbU1VOM19QTUVHU19OVU1dOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcG1lZ19jdHhbU1VOM19QTUVHU19OVU1dOworCisvKiBGbHVzaCBhbGwgdXNlcnNwYWNlIG1hcHBpbmdzIG9uZSBieSBvbmUuLi4gICh3aHkgbm8gZmx1c2ggY29tbWFuZCwKKyAgIHN1bj8pICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKyAgICAgICB1bnNpZ25lZCBjaGFyIGN0eCwgb2xkY3R4OworCisgICAgICAgb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworICAgICAgIGZvcihhZGRyID0gMHgwMDAwMDAwMDsgYWRkciA8IFRBU0tfU0laRTsgYWRkciArPSBTVU4zX1BNRUdfU0laRSkgeworCSAgICAgICBmb3IoY3R4ID0gMDsgY3R4IDwgODsgY3R4KyspIHsKKwkJICAgICAgIHN1bjNfcHV0X2NvbnRleHQoY3R4KTsKKwkJICAgICAgIHN1bjNfcHV0X3NlZ21hcChhZGRyLCBTVU4zX0lOVkFMSURfUE1FRyk7CisJICAgICAgIH0KKyAgICAgICB9CisKKyAgICAgICBzdW4zX3B1dF9jb250ZXh0KG9sZGN0eCk7CisgICAgICAgLyogZXJhc2UgYWxsIG9mIHRoZSB1c2Vyc3BhY2UgcG1lZyBtYXBzLCB3ZSd2ZSBjbG9iYmVyZWQgdGhlbQorCSAgYWxsIGFueXdheSAqLworICAgICAgIGZvcihhZGRyID0gMDsgYWRkciA8IFNVTjNfSU5WQUxJRF9QTUVHOyBhZGRyKyspIHsKKwkgICAgICAgaWYocG1lZ19hbGxvY1thZGRyXSA9PSAxKSB7CisJCSAgICAgICBwbWVnX2FsbG9jW2FkZHJdID0gMDsKKwkJICAgICAgIHBtZWdfY3R4W2FkZHJdID0gMDsKKwkJICAgICAgIHBtZWdfdmFkZHJbYWRkcl0gPSAwOworCSAgICAgICB9CisgICAgICAgfQorCit9CisKKy8qIENsZWFyIHVzZXIgVExCIGVudHJpZXMgd2l0aGluIHRoZSBjb250ZXh0IG5hbWVkIGluIG1tICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tIChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKyAgICAgdW5zaWduZWQgY2hhciBvbGRjdHg7CisgICAgIHVuc2lnbmVkIGNoYXIgc2VnOworICAgICB1bnNpZ25lZCBsb25nIGk7CisKKyAgICAgb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworICAgICBzdW4zX3B1dF9jb250ZXh0KG1tLT5jb250ZXh0KTsKKworICAgICBmb3IoaSA9IDA7IGkgPCBUQVNLX1NJWkU7IGkgKz0gU1VOM19QTUVHX1NJWkUpIHsKKwkgICAgIHNlZyA9IHN1bjNfZ2V0X3NlZ21hcChpKTsKKwkgICAgIGlmKHNlZyA9PSBTVU4zX0lOVkFMSURfUE1FRykKKwkJICAgICBjb250aW51ZTsKKworCSAgICAgc3VuM19wdXRfc2VnbWFwKGksIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwkgICAgIHBtZWdfYWxsb2Nbc2VnXSA9IDA7CisJICAgICBwbWVnX2N0eFtzZWddID0gMDsKKwkgICAgIHBtZWdfdmFkZHJbc2VnXSA9IDA7CisgICAgIH0KKworICAgICBzdW4zX3B1dF9jb250ZXh0KG9sZGN0eCk7CisKK30KKworLyogRmx1c2ggYSBzaW5nbGUgVExCIHBhZ2UuIEluIHRoaXMgY2FzZSwgd2UncmUgbGltaXRlZCB0byBmbHVzaGluZyBhCisgICBzaW5nbGUgUE1FRyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgY2hhciBvbGRjdHg7CisJdW5zaWduZWQgY2hhciBpOworCisJb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworCXN1bjNfcHV0X2NvbnRleHQodm1hLT52bV9tbS0+Y29udGV4dCk7CisJYWRkciAmPSB+U1VOM19QTUVHX01BU0s7CisJaWYoKGkgPSBzdW4zX2dldF9zZWdtYXAoYWRkcikpICE9IFNVTjNfSU5WQUxJRF9QTUVHKQorCXsKKwkJcG1lZ19hbGxvY1tpXSA9IDA7CisJCXBtZWdfY3R4W2ldID0gMDsKKwkJcG1lZ192YWRkcltpXSA9IDA7CisJCXN1bjNfcHV0X3NlZ21hcCAoYWRkciwgIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwl9CisJc3VuM19wdXRfY29udGV4dChvbGRjdHgpOworCit9CisvKiBGbHVzaCBhIHJhbmdlIG9mIHBhZ2VzIGZyb20gVExCLiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCXVuc2lnbmVkIGNoYXIgc2VnLCBvbGRjdHg7CisKKwlzdGFydCAmPSB+U1VOM19QTUVHX01BU0s7CisKKwlvbGRjdHggPSBzdW4zX2dldF9jb250ZXh0KCk7CisJc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7CisKKwl3aGlsZShzdGFydCA8IGVuZCkKKwl7CisJCWlmKChzZWcgPSBzdW4zX2dldF9zZWdtYXAoc3RhcnQpKSA9PSBTVU4zX0lOVkFMSURfUE1FRykKKwkJICAgICBnb3RvIG5leHQ7CisJCWlmKHBtZWdfY3R4W3NlZ10gPT0gbW0tPmNvbnRleHQpIHsKKwkJCXBtZWdfYWxsb2Nbc2VnXSA9IDA7CisJCQlwbWVnX2N0eFtzZWddID0gMDsKKwkJCXBtZWdfdmFkZHJbc2VnXSA9IDA7CisJCX0KKwkJc3VuM19wdXRfc2VnbWFwKHN0YXJ0LCBTVU4zX0lOVkFMSURfUE1FRyk7CisJbmV4dDoKKwkJc3RhcnQgKz0gU1VOM19QTUVHX1NJWkU7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKKy8qIEZsdXNoIGtlcm5lbCBwYWdlIGZyb20gVExCLiAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcGFnZSAodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN1bjNfcHV0X3NlZ21hcCAoYWRkciAmIH4oU1VOM19QTUVHX1NJWkUgLSAxKSwgU1VOM19JTlZBTElEX1BNRUcpOworfQorCiAjZW5kaWYKKworI2Vsc2UgLyogIUNPTkZJR19NTVUgKi8KKworLyoKKyAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJQlVHKCk7Cit9CisKKyNkZWZpbmUgZmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQorCisvKgorICogZmx1c2ggYWxsIGF0YyBlbnRyaWVzIChib3RoIGtlcm5lbCBhbmQgdXNlci1zcGFjZSBlbnRyaWVzKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQoreworCUJVRygpOworfQorCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZW5kaWYgLyogX002OEtfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RsYmZsdXNoX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2hfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiNmJmMi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2hfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1RMQkZMVVNIX0gKLSNkZWZpbmUgX002OEtfVExCRkxVU0hfSAotCi0KLSNpZm5kZWYgQ09ORklHX1NVTjMKLQotI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2Uodm9pZCAqYWRkcikKLXsKLQlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKLQkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKLQkJCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCi0JCQkJICAgICAiLmNoaXAgNjhrIgotCQkJCSAgICAgOiA6ICJhIiAoYWRkcikpOwotCQlzZXRfZnMob2xkX2ZzKTsKLQl9IGVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICM0LCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKLX0KLQotLyoKLSAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKLXsKLQlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCi0JCQkJICAgICAicGZsdXNoYW5cblx0IgotCQkJCSAgICAgIi5jaGlwIDY4ayIpOwotCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICMwLCM0Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYjA0MF9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCi0JCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCi0JCQkgICAgICIuY2hpcCA2OGsiCi0JCQkgICAgIDogOiAiYSIgKGFkZHIpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaWYgKENQVV9JU18wNDBfT1JfMDYwKQotCQlfX2ZsdXNoX3RsYjA0MF9vbmUoYWRkcik7Ci0JZWxzZSBpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJwZmx1c2ggIzAsIzQsKCUwKSIgOiA6ICJhIiAoYWRkcikpOwotfQotCi0jZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKLQotLyoKLSAqIGZsdXNoIGFsbCBhdGMgZW50cmllcyAoYm90aCBrZXJuZWwgYW5kIHVzZXItc3BhY2UgZW50cmllcykuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCi17Ci0JaWYgKENQVV9JU18wNDBfT1JfMDYwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgotCQkJCSAgICAgInBmbHVzaGFcblx0IgotCQkJCSAgICAgIi5jaGlwIDY4ayIpOwotCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoYSIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCi0JCV9fZmx1c2hfdGxiKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkgewotCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JCXNldF9mcyhVU0VSX0RTKTsKLQkJX19mbHVzaF90bGJfb25lKGFkZHIpOwotCQlzZXRfZnMob2xkX2ZzKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQotCQlfX2ZsdXNoX3RsYigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlmbHVzaF90bGJfYWxsKCk7Ci19Ci0KLSNlbHNlCi0KLQotLyogUmVzZXJ2ZWQgUE1FR3MuICovCi1leHRlcm4gY2hhciBzdW4zX3Jlc2VydmVkX3BtZWdbU1VOM19QTUVHU19OVU1dOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcG1lZ192YWRkcltTVU4zX1BNRUdTX05VTV07Ci1leHRlcm4gdW5zaWduZWQgY2hhciBwbWVnX2FsbG9jW1NVTjNfUE1FR1NfTlVNXTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIHBtZWdfY3R4W1NVTjNfUE1FR1NfTlVNXTsKLQotLyogRmx1c2ggYWxsIHVzZXJzcGFjZSBtYXBwaW5ncyBvbmUgYnkgb25lLi4uICAod2h5IG5vIGZsdXNoIGNvbW1hbmQsCi0gICBzdW4/KSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKLXsKLSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0gICAgICAgdW5zaWduZWQgY2hhciBjdHgsIG9sZGN0eDsKLQotICAgICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKLSAgICAgICBmb3IoYWRkciA9IDB4MDAwMDAwMDA7IGFkZHIgPCBUQVNLX1NJWkU7IGFkZHIgKz0gU1VOM19QTUVHX1NJWkUpIHsKLQkgICAgICAgZm9yKGN0eCA9IDA7IGN0eCA8IDg7IGN0eCsrKSB7Ci0JCSAgICAgICBzdW4zX3B1dF9jb250ZXh0KGN0eCk7Ci0JCSAgICAgICBzdW4zX3B1dF9zZWdtYXAoYWRkciwgU1VOM19JTlZBTElEX1BNRUcpOwotCSAgICAgICB9Ci0gICAgICAgfQotCi0gICAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOwotICAgICAgIC8qIGVyYXNlIGFsbCBvZiB0aGUgdXNlcnNwYWNlIHBtZWcgbWFwcywgd2UndmUgY2xvYmJlcmVkIHRoZW0KLQkgIGFsbCBhbnl3YXkgKi8KLSAgICAgICBmb3IoYWRkciA9IDA7IGFkZHIgPCBTVU4zX0lOVkFMSURfUE1FRzsgYWRkcisrKSB7Ci0JICAgICAgIGlmKHBtZWdfYWxsb2NbYWRkcl0gPT0gMSkgewotCQkgICAgICAgcG1lZ19hbGxvY1thZGRyXSA9IDA7Ci0JCSAgICAgICBwbWVnX2N0eFthZGRyXSA9IDA7Ci0JCSAgICAgICBwbWVnX3ZhZGRyW2FkZHJdID0gMDsKLQkgICAgICAgfQotICAgICAgIH0KLQotfQotCi0vKiBDbGVhciB1c2VyIFRMQiBlbnRyaWVzIHdpdGhpbiB0aGUgY29udGV4dCBuYW1lZCBpbiBtbSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbSAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0gICAgIHVuc2lnbmVkIGNoYXIgb2xkY3R4OwotICAgICB1bnNpZ25lZCBjaGFyIHNlZzsKLSAgICAgdW5zaWduZWQgbG9uZyBpOwotCi0gICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKLSAgICAgc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7Ci0KLSAgICAgZm9yKGkgPSAwOyBpIDwgVEFTS19TSVpFOyBpICs9IFNVTjNfUE1FR19TSVpFKSB7Ci0JICAgICBzZWcgPSBzdW4zX2dldF9zZWdtYXAoaSk7Ci0JICAgICBpZihzZWcgPT0gU1VOM19JTlZBTElEX1BNRUcpCi0JCSAgICAgY29udGludWU7Ci0KLQkgICAgIHN1bjNfcHV0X3NlZ21hcChpLCBTVU4zX0lOVkFMSURfUE1FRyk7Ci0JICAgICBwbWVnX2FsbG9jW3NlZ10gPSAwOwotCSAgICAgcG1lZ19jdHhbc2VnXSA9IDA7Ci0JICAgICBwbWVnX3ZhZGRyW3NlZ10gPSAwOwotICAgICB9Ci0KLSAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOwotCi19Ci0KLS8qIEZsdXNoIGEgc2luZ2xlIFRMQiBwYWdlLiBJbiB0aGlzIGNhc2UsIHdlJ3JlIGxpbWl0ZWQgdG8gZmx1c2hpbmcgYQotICAgc2luZ2xlIFBNRUcgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXVuc2lnbmVkIGNoYXIgb2xkY3R4OwotCXVuc2lnbmVkIGNoYXIgaTsKLQotCW9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKLQlzdW4zX3B1dF9jb250ZXh0KHZtYS0+dm1fbW0tPmNvbnRleHQpOwotCWFkZHIgJj0gflNVTjNfUE1FR19NQVNLOwotCWlmKChpID0gc3VuM19nZXRfc2VnbWFwKGFkZHIpKSAhPSBTVU4zX0lOVkFMSURfUE1FRykKLQl7Ci0JCXBtZWdfYWxsb2NbaV0gPSAwOwotCQlwbWVnX2N0eFtpXSA9IDA7Ci0JCXBtZWdfdmFkZHJbaV0gPSAwOwotCQlzdW4zX3B1dF9zZWdtYXAgKGFkZHIsICBTVU4zX0lOVkFMSURfUE1FRyk7Ci0JfQotCXN1bjNfcHV0X2NvbnRleHQob2xkY3R4KTsKLQotfQotLyogRmx1c2ggYSByYW5nZSBvZiBwYWdlcyBmcm9tIFRMQi4gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKLQl1bnNpZ25lZCBjaGFyIHNlZywgb2xkY3R4OwotCi0Jc3RhcnQgJj0gflNVTjNfUE1FR19NQVNLOwotCi0Jb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOwotCXN1bjNfcHV0X2NvbnRleHQobW0tPmNvbnRleHQpOwotCi0Jd2hpbGUoc3RhcnQgPCBlbmQpCi0JewotCQlpZigoc2VnID0gc3VuM19nZXRfc2VnbWFwKHN0YXJ0KSkgPT0gU1VOM19JTlZBTElEX1BNRUcpCi0JCSAgICAgZ290byBuZXh0OwotCQlpZihwbWVnX2N0eFtzZWddID09IG1tLT5jb250ZXh0KSB7Ci0JCQlwbWVnX2FsbG9jW3NlZ10gPSAwOwotCQkJcG1lZ19jdHhbc2VnXSA9IDA7Ci0JCQlwbWVnX3ZhZGRyW3NlZ10gPSAwOwotCQl9Ci0JCXN1bjNfcHV0X3NlZ21hcChzdGFydCwgU1VOM19JTlZBTElEX1BNRUcpOwotCW5leHQ6Ci0JCXN0YXJ0ICs9IFNVTjNfUE1FR19TSVpFOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JZmx1c2hfdGxiX2FsbCgpOwotfQotCi0vKiBGbHVzaCBrZXJuZWwgcGFnZSBmcm9tIFRMQi4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UgKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdW4zX3B1dF9zZWdtYXAgKGFkZHIgJiB+KFNVTjNfUE1FR19TSVpFIC0gMSksIFNVTjNfSU5WQUxJRF9QTUVHKTsKLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfTTY4S19UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2hfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDcwY2ZiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1RMQkZMVVNIX0gKLSNkZWZpbmUgX002OEtOT01NVV9UTEJGTFVTSF9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGluZW8sIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUB1Y2xpbnV4Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgotICovCi0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotLyoKLSAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JQlVHKCk7Ci19Ci0KLSNkZWZpbmUgZmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQotCi0vKgotICogZmx1c2ggYWxsIGF0YyBlbnRyaWVzIChib3RoIGtlcm5lbCBhbmQgdXNlci1zcGFjZSBlbnRyaWVzKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQotewotCUJVRygpOwotfQotCi0jZW5kaWYgLyogX002OEtOT01NVV9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCmluZGV4IGI1M2NkMTYuLmU0ZTIyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCkBAIC0xLDUgKzEsMzAgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInVjb250ZXh0X25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInVjb250ZXh0X21tLmgiCisjaWZuZGVmIF9NNjhLX1VDT05URVhUX0gKKyNkZWZpbmUgX002OEtfVUNPTlRFWFRfSAorCit0eXBlZGVmIGludCBncmVnX3Q7CisjZGVmaW5lIE5HUkVHIDE4Cit0eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOworCit0eXBlZGVmIHN0cnVjdCBmcHJlZ3NldCB7CisJaW50IGZfZnBjbnRsWzNdOworCWludCBmX2ZwcmVnc1s4KjNdOworfSBmcHJlZ3NldF90OworCitzdHJ1Y3QgbWNvbnRleHQgeworCWludCB2ZXJzaW9uOworCWdyZWdzZXRfdCBncmVnczsKKwlmcHJlZ3NldF90IGZwcmVnczsKK307CisKKyNkZWZpbmUgTUNPTlRFWFRfVkVSU0lPTiAyCisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3QgbWNvbnRleHQJICB1Y19tY29udGV4dDsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmlsbGVyWzgwXTsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGUyMjY2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19VQ09OVEVYVF9ICi0jZGVmaW5lIF9NNjhLX1VDT05URVhUX0gKLQotdHlwZWRlZiBpbnQgZ3JlZ190OwotI2RlZmluZSBOR1JFRyAxOAotdHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90W05HUkVHXTsKLQotdHlwZWRlZiBzdHJ1Y3QgZnByZWdzZXQgewotCWludCBmX2ZwY250bFszXTsKLQlpbnQgZl9mcHJlZ3NbOCozXTsKLX0gZnByZWdzZXRfdDsKLQotc3RydWN0IG1jb250ZXh0IHsKLQlpbnQgdmVyc2lvbjsKLQlncmVnc2V0X3QgZ3JlZ3M7Ci0JZnByZWdzZXRfdCBmcHJlZ3M7Ci19OwotCi0jZGVmaW5lIE1DT05URVhUX1ZFUlNJT04gMgotCi1zdHJ1Y3QgdWNvbnRleHQgewotCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKLQlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOwotCXN0YWNrX3QJCSAgdWNfc3RhY2s7Ci0Jc3RydWN0IG1jb250ZXh0CSAgdWNfbWNvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZwkgIHVjX2ZpbGxlcls4MF07Ci0Jc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEzYTI3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9VQ09OVEVYVF9ICi0jZGVmaW5lIF9NNjhLTk9NTVVfVUNPTlRFWFRfSAotCi10eXBlZGVmIGludCBncmVnX3Q7Ci0jZGVmaW5lIE5HUkVHIDE4Ci10eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOwotCi10eXBlZGVmIHN0cnVjdCBmcHJlZ3NldCB7Ci0JaW50IGZfcGNyOwotCWludCBmX3BzcjsKLQlpbnQgZl9mcGlhZGRyOwotCWludCBmX2ZwcmVnc1s4XVszXTsKLX0gZnByZWdzZXRfdDsKLQotc3RydWN0IG1jb250ZXh0IHsKLQlpbnQgdmVyc2lvbjsKLQlncmVnc2V0X3QgZ3JlZ3M7Ci0JZnByZWdzZXRfdCBmcHJlZ3M7Ci19OwotCi0jZGVmaW5lIE1DT05URVhUX1ZFUlNJT04gMgotCi1zdHJ1Y3QgdWNvbnRleHQgewotCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKLQlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOwotCXN0YWNrX3QJCSAgdWNfc3RhY2s7Ci0Jc3RydWN0IG1jb250ZXh0CSAgdWNfbWNvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZwkgIHVjX2ZpbGxlcls4MF07Ci0Jc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCmluZGV4IGM2NDBiYmEuLjAxOWNhYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKQEAgLTEsNSArMSwyNSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAidW5hbGlnbmVkX25vLmgiCisjaWZuZGVmIF9BU01fTTY4S19VTkFMSUdORURfSAorI2RlZmluZSBfQVNNX002OEtfVU5BTElHTkVEX0gKKworCisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisjaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9sZV9ieXRlc2hpZnQuaD4KKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgorCisjZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCisjZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCisKICNlbHNlCi0jaW5jbHVkZSAidW5hbGlnbmVkX21tLmgiCisvKgorICogVGhlIG02OGsgY2FuIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyBpdHNlbGYuIAorICovCisjaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2FjY2Vzc19vay5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+CisKKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKKwogI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX002OEtfVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc2OThmMi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5hbGlnbmVkX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S19VTkFMSUdORURfSAotI2RlZmluZSBfQVNNX002OEtfVU5BTElHTkVEX0gKLQotLyoKLSAqIFRoZSBtNjhrIGNhbiBkbyB1bmFsaWduZWQgYWNjZXNzZXMgaXRzZWxmLgotICovCi0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2FjY2Vzc19vay5oPgotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+Ci0KLSNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKLSNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKLQotI2VuZGlmIC8qIF9BU01fTTY4S19VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjFlYTRjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NNjhLTk9NTVVfVU5BTElHTkVEX0gKLSNkZWZpbmUgX0FTTV9NNjhLTk9NTVVfVU5BTElHTkVEX0gKLQotCi0jaWZkZWYgQ09ORklHX0NPTERGSVJFCi0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX3N0cnVjdC5oPgotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9sZV9ieXRlc2hpZnQuaD4KLSNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgotCi0jZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCi0jZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCi0KLSNlbHNlCi0vKgotICogVGhlIG02OGsgY2FuIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyBpdHNlbGYuIAotICovCi0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2FjY2Vzc19vay5oPgotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+Ci0KLSNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKLSNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQVNNX002OEtOT01NVV9VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2MzJjZTAxLi5lYzM3ZmI1NiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCQkgICAgICAgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJCSB1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKaW5kZXggN2RiNDE1OS4uNTRkOTgwNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTE1OSwzICsxNjAsMjAgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOworCisKK3N0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCWlmICghbWFjaF9od2NsaykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicnRjLWdlbmVyaWMiLCAtMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQocnRjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvTWFrZWZpbGUgYi9hcmNoL202OGtub21tdS9NYWtlZmlsZQppbmRleCBmZDBmYjMwLi5jZTQwNGJjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9NYWtlZmlsZQorKysgYi9hcmNoL202OGtub21tdS9NYWtlZmlsZQpAQCAtODgsMTggKzg4LDE4IEBACiAjCiAjIFNvbWUgQ0ZMQUcgYWRkaXRpb25zIGJhc2VkIG9uIHNwZWNpZmljIENQVSB0eXBlLgogIwotY2ZsYWdzLSQoQ09ORklHX001MjA2KQkJOj0gLW01MjAwCi1jZmxhZ3MtJChDT05GSUdfTTUyMDZlKQkJOj0gLW01MjAwCi1jZmxhZ3MtJChDT05GSUdfTTUyMHgpCQk6PSAtbTUzMDcKK2NmbGFncy0kKENPTkZJR19NNTIwNikJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTIwNiwtbTUyMDApCitjZmxhZ3MtJChDT05GSUdfTTUyMDZlKQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbTUyMDZlLC1tNTIwMCkKK2NmbGFncy0kKENPTkZJR19NNTIweCkJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTIwOCwtbTUyMDApCiBjZmxhZ3MtJChDT05GSUdfTTUyM3gpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTUyM3gsLW01MzA3KQotY2ZsYWdzLSQoQ09ORklHX001MjQ5KQkJOj0gLW01MjAwCitjZmxhZ3MtJChDT05GSUdfTTUyNDkpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTUyNDksLW01MjAwKQogY2ZsYWdzLSQoQ09ORklHX001MjcxKQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbWNwdT01MjcxLC1tNTMwNykKLWNmbGFncy0kKENPTkZJR19NNTI3MikJCTo9IC1tNTMwNworY2ZsYWdzLSQoQ09ORklHX001MjcyKQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbWNwdT01MjcxLC1tNTIwMCkKIGNmbGFncy0kKENPTkZJR19NNTI3NSkJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTI3NSwtbTUzMDcpCiBjZmxhZ3MtJChDT05GSUdfTTUyOHgpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tNTI4eCwtbTUzMDcpCi1jZmxhZ3MtJChDT05GSUdfTTUzMDcpCQk6PSAtbTUzMDcKK2NmbGFncy0kKENPTkZJR19NNTMwNykJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW01MzA3LC1tNTIwMCkKIGNmbGFncy0kKENPTkZJR19NNTMyeCkJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTMyeCwtbTUzMDcpCi1jZmxhZ3MtJChDT05GSUdfTTU0MDcpCQk6PSAtbTUyMDAKK2NmbGFncy0kKENPTkZJR19NNTQwNykJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW01NDA3LC1tNTIwMCkKIGNmbGFncy0kKENPTkZJR19NNjgzMjgpCQk6PSAtbTY4MDAwCiBjZmxhZ3MtJChDT05GSUdfTTY4RVozMjgpCTo9IC1tNjgwMDAKIGNmbGFncy0kKENPTkZJR19NNjhWWjMyOCkJOj0gLW02ODAwMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2RtYS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2RtYS5jCmluZGV4IGUxMGVhZmMuLjkzNjEyNTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9kbWEuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZG1hLmMKQEAgLTksMTAgKzksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgaW50IGdmcCkKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCkKIHsKIAl2b2lkICpyZXQ7CiAJLyogaWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzICovCkBAIC0zNCwzICszNSw4IEBACiB7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKIH0KKwordm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvaXJxLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvaXJxLmMKaW5kZXggYmJhMWJiNC4uNTZlMGY0YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9pcnEuYwpAQCAtMjMsNyArMjMsNyBAQAogCXN0cnVjdCBwdF9yZWdzICpvbGRyZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCiAJaXJxX2VudGVyKCk7Ci0JX19kb19JUlEoaXJxKTsKKwlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKIAlpcnFfZXhpdCgpOwogCiAJc2V0X2lycV9yZWdzKG9sZHJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggM2YyZDc3NC4uMWU5NmM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCByZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAogCQl1bnNpZ25lZCBsb25nIHVzcCwgdW5zaWduZWQgbG9uZyB0b3BzdGssCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L21tL2luaXQuYyBiL2FyY2gvbTY4a25vbW11L21tL2luaXQuYwppbmRleCAzYmYyNDljLi43YmVmYzBjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9tbS9pbml0LmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCkBAIC0xMTEsMTEgKzExMSw3IEBACiAJewogCQl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHswLCB9OwogCi0JCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gMCA+PiBQQUdFX1NISUZUOwotCQl6b25lc19zaXplW1pPTkVfTk9STUFMXSA9IChlbmRfbWVtIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQ7Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJem9uZXNfc2l6ZVtaT05FX0hJR0hNRU1dID0gMDsKLSNlbmRpZgorCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IChlbmRfbWVtIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQ7CiAJCWZyZWVfYXJlYV9pbml0KHpvbmVzX3NpemUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2NvbmZpZy5jCmluZGV4IGQyOTlmN2IuLjllYWIxOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9jb25maWcuYwpAQCAtMzIsNyArMzIsOCBAQAogCXsKIAkJLm1hcGJhc2UgCT0gTUNGX01CQVIgKyBNQ0ZVQVJUX0JBU0UyLAogCQkuaXJxCQk9IDc0LAotCX0KKwl9LAorCXsgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjQ5X3VhcnQgPSB7CkBAIC01MCwxMiArNTEsMTIgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBtNTI0OV91YXJ0X2luaXRfbGluZShpbnQgbGluZSwgaW50IGlycSkKIHsKIAlpZiAobGluZSA9PSAwKSB7Ci0JCXdyaXRlbChNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMSwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDFJQ1IpOwotCQl3cml0ZWIoaXJxLCBNQ0ZVQVJUX0JBU0UxICsgTUNGVUFSVF9VSVZSKTsKKwkJd3JpdGViKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkxLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMUlDUik7CisJCXdyaXRlYihpcnEsIE1DRl9NQkFSICsgTUNGVUFSVF9CQVNFMSArIE1DRlVBUlRfVUlWUik7CiAJCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfVUFSVDEpOwogCX0gZWxzZSBpZiAobGluZSA9PSAxKSB7Ci0JCXdyaXRlbChNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMiwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDJJQ1IpOwotCQl3cml0ZWIoaXJxLCBNQ0ZVQVJUX0JBU0UyICsgTUNGVUFSVF9VSVZSKTsKKwkJd3JpdGViKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkyLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMklDUik7CisJCXdyaXRlYihpcnEsIE1DRl9NQkFSICsgTUNGVUFSVF9CQVNFMiArIE1DRlVBUlRfVUlWUik7CiAJCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfVUFSVDIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2NvbmZpZy5jCmluZGV4IDcyNGZhZjAuLjQ0ODAzYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9jb25maWcuYwpAQCAtNjUsMTIgKzY1LDEyIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbTUzMDdfdWFydF9pbml0X2xpbmUoaW50IGxpbmUsIGludCBpcnEpCiB7CiAJaWYgKGxpbmUgPT0gMCkgewotCQl3cml0ZWwoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTEsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQxSUNSKTsKLQkJd3JpdGViKGlycSwgTUNGVUFSVF9CQVNFMSArIE1DRlVBUlRfVUlWUik7CisJCXdyaXRlYihNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMSwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDFJQ1IpOworCQl3cml0ZWIoaXJxLCBNQ0ZfTUJBUiArIE1DRlVBUlRfQkFTRTEgKyBNQ0ZVQVJUX1VJVlIpOwogCQltY2Zfc2V0aW1yKG1jZl9nZXRpbXIoKSAmIH5NQ0ZTSU1fSU1SX1VBUlQxKTsKIAl9IGVsc2UgaWYgKGxpbmUgPT0gMSkgewotCQl3cml0ZWwoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTIsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQySUNSKTsKLQkJd3JpdGViKGlycSwgTUNGVUFSVF9CQVNFMiArIE1DRlVBUlRfVUlWUik7CisJCXdyaXRlYihNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMiwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDJJQ1IpOworCQl3cml0ZWIoaXJxLCBNQ0ZfTUJBUiArIE1DRlVBUlRfQkFTRTIgKyBNQ0ZVQVJUX1VJVlIpOwogCQltY2Zfc2V0aW1yKG1jZl9nZXRpbXIoKSAmIH5NQ0ZTSU1fSU1SX1VBUlQyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81NDA3L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTQwNy9jb25maWcuYwppbmRleCA2NDhiOGI3Li4wZWU4YzFhIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81NDA3L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzU0MDcvY29uZmlnLmMKQEAgLTU2LDEyICs1NiwxMiBAQAogc3RhdGljIHZvaWQgX19pbml0IG01NDA3X3VhcnRfaW5pdF9saW5lKGludCBsaW5lLCBpbnQgaXJxKQogewogCWlmIChsaW5lID09IDApIHsKLQkJd3JpdGVsKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkxLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMUlDUik7Ci0JCXdyaXRlYihpcnEsIE1DRlVBUlRfQkFTRTEgKyBNQ0ZVQVJUX1VJVlIpOworCQl3cml0ZWIoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTEsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQxSUNSKTsKKwkJd3JpdGViKGlycSwgTUNGX01CQVIgKyBNQ0ZVQVJUX0JBU0UxICsgTUNGVUFSVF9VSVZSKTsKIAkJbWNmX3NldGltcihtY2ZfZ2V0aW1yKCkgJiB+TUNGU0lNX0lNUl9VQVJUMSk7CiAJfSBlbHNlIGlmIChsaW5lID09IDEpIHsKLQkJd3JpdGVsKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkyLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMklDUik7Ci0JCXdyaXRlYihpcnEsIE1DRlVBUlRfQkFTRTIgKyBNQ0ZVQVJUX1VJVlIpOworCQl3cml0ZWIoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTIsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQySUNSKTsKKwkJd3JpdGViKGlycSwgTUNGX01CQVIgKyBNQ0ZVQVJUX0JBU0UyICsgTUNGVUFSVF9VSVZSKTsKIAkJbWNmX3NldGltcihtY2ZfZ2V0aW1yKCkgJiB+TUNGU0lNX0lNUl9VQVJUMik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvTWFrZWZpbGUgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9NYWtlZmlsZQppbmRleCA0ZjQxNmE5Li4xYmNiOTM3IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9NYWtlZmlsZQorKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9NYWtlZmlsZQpAQCAtMTQsNyArMTQsNyBAQAogCiBhc2ZsYWdzLSQoQ09ORklHX0ZVTExERUJVRykgOj0gLURERUJVR0dFUl9DT01QQVRJQkxFX0NBQ0hFPTEKIAotb2JqLSQoQ09ORklHX0NPTERGSVJFKQkrPSBkbWEubyBlbnRyeS5vIHZlY3RvcnMubworb2JqLSQoQ09ORklHX0NPTERGSVJFKQkrPSBjbGsubyBkbWEubyBlbnRyeS5vIHZlY3RvcnMubwogb2JqLSQoQ09ORklHX001MjA2KQkrPSB0aW1lcnMubwogb2JqLSQoQ09ORklHX001MjA2ZSkJKz0gdGltZXJzLm8KIG9iai0kKENPTkZJR19NNTIweCkJKz0gcGl0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2Nsay5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvY2xrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkYmY0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2Nsay5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgljbGsuYyAtLSBnZW5lcmFsIENvbGRGaXJlIENQVSBrZXJuZWwgY2xrIGhhbmRsaW5nCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDA5LCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXJldHVybiBOVUxMOworfQorCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworfQorCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworfQorCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIE1DRl9DTEs7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGRjNzg3MTkuLjk5OGU1ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xMzQsNyArMTM0LDcgQEAKIAloZWxwCiAJIFRoaXMgYSBmYW1pbHkgb2YgbWFjaGluZXMgYmFzZWQgb24gdGhlIE1JUFMgUjQwMzAgY2hpcHNldCB3aGljaCB3YXMKIAkgdXNlZCBieSBzZXZlcmFsIHZlbmRvcnMgdG8gYnVpbGQgUklTQy9vcyBhbmQgV2luZG93cyBOVCB3b3Jrc3RhdGlvbnMuCi0JIE1lbWJlcnMgaW5jbHVkZSB0aGUgQWNlciBQSUNBLCBNSVBTIE1hZ251bSA0MDAwLCBNSVBTIE1pbGxlbml1bSBhbmQKKwkgTWVtYmVycyBpbmNsdWRlIHRoZSBBY2VyIFBJQ0EsIE1JUFMgTWFnbnVtIDQwMDAsIE1JUFMgTWlsbGVubml1bSBhbmQKIAkgT2xpdmV0dGkgTTcwMC0xMCB3b3Jrc3RhdGlvbnMuCiAKIGNvbmZpZyBMQVNBVApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMTBlODI0NC4uNWI2MGEwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTQ4MCw2ICs0ODAsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQogCiAjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBhNzNlMTUzLi40MDAwNTAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNTAsMTYgKzM1MCwxOCBAQAogI2RlZmluZSBfX05SX2R1cDMJCQkoX19OUl9MaW51eCArIDMyNykKICNkZWZpbmUgX19OUl9waXBlMgkJCShfX05SX0xpbnV4ICsgMzI4KQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCShfX05SX0xpbnV4ICsgMzI5KQorI2RlZmluZSBfX05SX3ByZWFkdgkJCShfX05SX0xpbnV4ICsgMzMwKQorI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9MaW51eCArIDMzMSkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCBvMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzMjkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzMxCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCiAKICNkZWZpbmUgX19OUl9PMzJfTGludXgJCQk0MDAwCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMjkKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMJCTMzMQogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAogCkBAIC02NTYsMTYgKzY1OCwxOCBAQAogI2RlZmluZSBfX05SX2R1cDMJCQkoX19OUl9MaW51eCArIDI4NikKICNkZWZpbmUgX19OUl9waXBlMgkJCShfX05SX0xpbnV4ICsgMjg3KQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCShfX05SX0xpbnV4ICsgMjg4KQorI2RlZmluZSBfX05SX3ByZWFkdgkJCShfX05SX0xpbnV4ICsgMjg5KQorI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9MaW51eCArIDI5MCkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCA2NC1iaXQgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyODgKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjkwCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCiAKICNkZWZpbmUgX19OUl82NF9MaW51eAkJCTUwMDAKLSNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjg4CisjZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTI5MAogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIApAQCAtOTY2LDE2ICs5NzAsMTggQEAKICNkZWZpbmUgX19OUl9kdXAzCQkJKF9fTlJfTGludXggKyAyOTApCiAjZGVmaW5lIF9fTlJfcGlwZTIJCQkoX19OUl9MaW51eCArIDI5MSkKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCQkoX19OUl9MaW51eCArIDI5MikKKyNkZWZpbmUgX19OUl9wcmVhZHYJCQkoX19OUl9MaW51eCArIDI5MykKKyNkZWZpbmUgX19OUl9wd3JpdGV2CQkJKF9fTlJfTGludXggKyAyOTQpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTjMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjkyCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI5NAogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIgKi8KIAogI2RlZmluZSBfX05SX04zMl9MaW51eAkJCTYwMDAKLSNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI5MgorI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscwkJMjk0CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggY2EyZTQwMi4uMWVhYWE0NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTk5LDcgKzk5LDcgQEAKIHsKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJdW5zaWduZWQgbG9uZyB1bnVzZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggOWFiNzBjMy4uMGIzMWI5YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNjUwLDYgKzY1MCw4IEBACiAJc3lzCXN5c19kdXAzCQkzCiAJc3lzCXN5c19waXBlMgkJMgogCXN5cwlzeXNfaW5vdGlmeV9pbml0MQkxCisJc3lzCXN5c19wcmVhZHYJCTYJLyogNDMzMCAqLworCXN5cwlzeXNfcHdyaXRldgkJNgogCS5lbmRtCiAKIAkvKiBXZSBwcmUtY29tcHV0ZSB0aGUgbnVtYmVyIG9mIF9pbnN0cnVjdGlvbl8gYnl0ZXMgbmVlZGVkIHRvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IDliNDY5ODYuLmM2NDdmZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00ODcsNCArNDg3LDYgQEAKIAlQVFIJc3lzX2R1cDMKIAlQVFIJc3lzX3BpcGUyCiAJUFRSCXN5c19pbm90aWZ5X2luaXQxCisJUFRSCXN5c19wcmVhZHYKKwlQVFIJc3lzX3B3cml0ZXYJCQkvKiA1MzkwICovCiAJLnNpemUJc3lzX2NhbGxfdGFibGUsLi1zeXNfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IGY2MWQ2YjAuLmMyYzE2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTQxMyw0ICs0MTMsNiBAQAogCVBUUglzeXNfZHVwMwkJCS8qIDUyOTAgKi8KIAlQVFIJc3lzX3BpcGUyCiAJUFRSCXN5c19pbm90aWZ5X2luaXQxCisJUFRSCXN5c19wcmVhZHYKKwlQVFIJc3lzX3B3cml0ZXYKIAkuc2l6ZQlzeXNuMzJfY2FsbF90YWJsZSwuLXN5c24zMl9jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggNjA5OTdmMS4uMDAyZmFjMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtNTMzLDQgKzUzMyw2IEBACiAJUFRSCXN5c19kdXAzCiAJUFRSCXN5c19waXBlMgogCVBUUglzeXNfaW5vdGlmeV9pbml0MQorCVBUUgljb21wYXRfc3lzX3ByZWFkdgkJLyogNDMzMCAqLworCVBUUgljb21wYXRfc3lzX3B3cml0ZXYKIAkuc2l6ZQlzeXNfY2FsbF90YWJsZSwuLXN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCmluZGV4IDViNDdkNmIuLmNiY2Q3ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkgKiBBc3N1bXB0aW9uIHRvIGJlIGZpeGVkOiB3ZSdyZSBhbHdheXMgYm9vdGVkIG9uIGxvZ2ljYWwgLyBwaHlzaWNhbAogCSAqIHByb2Nlc3NvciAwLiAgV2hpbGUgd2UncmUgYWx3YXlzIHJ1bm5pbmcgb24gbG9naWNhbCBwcm9jZXNzb3IgMAogCSAqIHRoaXMgc3RpbGwgbWVhbnMgdGhpcyBpcyBwaHlzaWNhbCBwcm9jZXNzb3IgemVybzsgaXQgbWlnaHQgZm9yCi0JICogZXhhbXBsZSBiZSBkaXNhYmxlZCBpbiB0aGUgZmlyd3dhcmUuCisJICogZXhhbXBsZSBiZSBkaXNhYmxlZCBpbiB0aGUgZmlybXdhcmUuCiAJICovCiAJYWxsb2NfY3B1cGRhKDAsIDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiMjhjOWE2Li4yMzRjZjM0IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAgKiBzZXQgdXAgdGhlIGtlcm5lbCBzdGFjayBmb3IgYSBuZXcgdGhyZWFkIGFuZCBjb3B5IGFyY2gtc3BlY2lmaWMgdGhyZWFkCiAgKiBjb250cm9sIGluZm9ybWF0aW9uCiAgKi8KLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKIAkJdW5zaWduZWQgbG9uZyBjX3VzcCwgdW5zaWduZWQgbG9uZyB1c3RrX3NpemUsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKmtyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggYWFjZjExZC4uOTAzOGYzOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC05LDkgKzksMTMgQEAKIAlkZWZfYm9vbCB5CiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgNjRCSVQKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIgaWYgNjRCSVQKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVCBpZiA2NEJJVAogCXNlbGVjdCBSVENfQ0xBU1MKLQlzZWxlY3QgUlRDX0RSVl9QQVJJU0MKKwlzZWxlY3QgUlRDX0RSVl9HRU5FUklDCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCisJc2VsZWN0IEJVRwogCWhlbHAKIAkgIFRoZSBQQS1SSVNDIG1pY3JvcHJvY2Vzc29yIGlzIGRlc2lnbmVkIGJ5IEhld2xldHQtUGFja2FyZCBhbmQgdXNlZAogCSAgaW4gbWFueSBvZiB0aGVpciB3b3Jrc3RhdGlvbnMgJiBzZXJ2ZXJzIChIUDkwMDAgNzAwIGFuZCA4MDAgc2VyaWVzLApAQCAtNzUsNiArNzksOSBAQAogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQKKyAgICAgICAgZGVmX2Jvb2wgeQorCiBjb25maWcgSVJRX1BFUl9DUFUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC04Myw2ICs5MCw5IEBACiBjb25maWcgUE0KIAlib29sCiAKK2NvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlQKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBJU0FfRE1BX0FQSQogCWJvb2wKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvTWFrZWZpbGUgYi9hcmNoL3BhcmlzYy9NYWtlZmlsZQppbmRleCAwZDQyODI3Li5kYTZmNjY5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9NYWtlZmlsZQorKysgYi9hcmNoL3BhcmlzYy9NYWtlZmlsZQpAQCAtNTYsNyArNTYsOSBAQAogCiAjIFdpdGhvdXQgdGhpcywgImxkIC1yIiByZXN1bHRzIGluIC50ZXh0IHNlY3Rpb25zIHRoYXQgYXJlIHRvbyBiaWcKICMgKD4gMHg0MDAwMCkgZm9yIGJyYW5jaGVzIHRvIHJlYWNoIHN0dWJzLgotY2ZsYWdzLXkJKz0gLWZmdW5jdGlvbi1zZWN0aW9ucworaWZuZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyAgY2ZsYWdzLXkJKz0gLWZmdW5jdGlvbi1zZWN0aW9ucworZW5kaWYKIAogIyBzZWxlY3Qgd2hpY2ggcHJvY2Vzc29yIHRvIG9wdGltaXNlIGZvcgogY2ZsYWdzLSQoQ09ORklHX1BBNzEwMCkJCSs9IC1tYXJjaD0xLjEgLW1zY2hlZHVsZT03MTAwCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGVkYmZlMjUuLmFkYTNlNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBTaW5jZSAiYSIgaXMgdXN1YWxseSBhbiBhZGRyZXNzLCB1c2Ugb25lIHNwaW5sb2NrIHBlciBjYWNoZWxpbmUuCiAgKi8KICMgIGRlZmluZSBBVE9NSUNfSEFTSF9TSVpFIDQKLSMgIGRlZmluZSBBVE9NSUNfSEFTSChhKSAoJihfX2F0b21pY19oYXNoWyAoKCh1bnNpZ25lZCBsb25nKSBhKS9MMV9DQUNIRV9CWVRFUykgJiAoQVRPTUlDX0hBU0hfU0laRS0xKSBdKSkKKyMgIGRlZmluZSBBVE9NSUNfSEFTSChhKSAoJihfX2F0b21pY19oYXNoWyAoKCh1bnNpZ25lZCBsb25nKSAoYSkpL0wxX0NBQ0hFX0JZVEVTKSAmIChBVE9NSUNfSEFTSF9TSVpFLTEpIF0pKQogCiBleHRlcm4gcmF3X3NwaW5sb2NrX3QgX19hdG9taWNfaGFzaFtBVE9NSUNfSEFTSF9TSVpFXSBfX2xvY2tfYWxpZ25lZDsKIApAQCAtMjIyLDEzICsyMjIsMTMgQEAKIAogI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAotI2RlZmluZSBhdG9taWNfYWRkKGksdikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAoKGludClpKSwodikpKSkKLSNkZWZpbmUgYXRvbWljX3N1YihpLHYpCSgodm9pZCkoX19hdG9taWNfYWRkX3JldHVybigtKChpbnQpaSksKHYpKSkpCisjZGVmaW5lIGF0b21pY19hZGQoaSx2KQkoKHZvaWQpKF9fYXRvbWljX2FkZF9yZXR1cm4oICgoaW50KShpKSksKHYpKSkpCisjZGVmaW5lIGF0b21pY19zdWIoaSx2KQkoKHZvaWQpKF9fYXRvbWljX2FkZF9yZXR1cm4oLSgoaW50KShpKSksKHYpKSkpCiAjZGVmaW5lIGF0b21pY19pbmModikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAgIDEsKHYpKSkpCiAjZGVmaW5lIGF0b21pY19kZWModikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAgLTEsKHYpKSkpCiAKLSNkZWZpbmUgYXRvbWljX2FkZF9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybiggKChpbnQpaSksKHYpKSkKLSNkZWZpbmUgYXRvbWljX3N1Yl9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybigtKChpbnQpaSksKHYpKSkKKyNkZWZpbmUgYXRvbWljX2FkZF9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybiggKChpbnQpKGkpKSwodikpKQorI2RlZmluZSBhdG9taWNfc3ViX3JldHVybihpLHYpCShfX2F0b21pY19hZGRfcmV0dXJuKC0oKGludCkoaSkpLCh2KSkpCiAjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpCShfX2F0b21pY19hZGRfcmV0dXJuKCAgIDEsKHYpKSkKICNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJKF9fYXRvbWljX2FkZF9yZXR1cm4oICAtMSwodikpKQogCkBAIC0yODksMTMgKzI4OSwxMyBAQAogCXJldHVybiB2LT5jb3VudGVyOwogfQogCi0jZGVmaW5lIGF0b21pYzY0X2FkZChpLHYpCSgodm9pZCkoX19hdG9taWM2NF9hZGRfcmV0dXJuKCAoKHM2NClpKSwodikpKSkKLSNkZWZpbmUgYXRvbWljNjRfc3ViKGksdikJKCh2b2lkKShfX2F0b21pYzY0X2FkZF9yZXR1cm4oLSgoczY0KWkpLCh2KSkpKQorI2RlZmluZSBhdG9taWM2NF9hZGQoaSx2KQkoKHZvaWQpKF9fYXRvbWljNjRfYWRkX3JldHVybiggKChzNjQpKGkpKSwodikpKSkKKyNkZWZpbmUgYXRvbWljNjRfc3ViKGksdikJKCh2b2lkKShfX2F0b21pYzY0X2FkZF9yZXR1cm4oLSgoczY0KShpKSksKHYpKSkpCiAjZGVmaW5lIGF0b21pYzY0X2luYyh2KQkJKCh2b2lkKShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICAgMSwodikpKSkKICNkZWZpbmUgYXRvbWljNjRfZGVjKHYpCQkoKHZvaWQpKF9fYXRvbWljNjRfYWRkX3JldHVybiggIC0xLCh2KSkpKQogCi0jZGVmaW5lIGF0b21pYzY0X2FkZF9yZXR1cm4oaSx2KQkoX19hdG9taWM2NF9hZGRfcmV0dXJuKCAoKHM2NClpKSwodikpKQotI2RlZmluZSBhdG9taWM2NF9zdWJfcmV0dXJuKGksdikJKF9fYXRvbWljNjRfYWRkX3JldHVybigtKChzNjQpaSksKHYpKSkKKyNkZWZpbmUgYXRvbWljNjRfYWRkX3JldHVybihpLHYpCShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICgoczY0KShpKSksKHYpKSkKKyNkZWZpbmUgYXRvbWljNjRfc3ViX3JldHVybihpLHYpCShfX2F0b21pYzY0X2FkZF9yZXR1cm4oLSgoczY0KShpKSksKHYpKSkKICNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KQkJKF9fYXRvbWljNjRfYWRkX3JldHVybiggICAxLCh2KSkpCiAjZGVmaW5lIGF0b21pYzY0X2RlY19yZXR1cm4odikJCShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICAtMSwodikpKQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggYjdjYTZkYy4uNzI0Mzk1MSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtOTcsNiArOTcsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BBOFgwMAogLyogT25seSBwYTg4MDAsIHBhODkwMCBuZWVkcyB0aGlzICovCisKKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorCiAjZGVmaW5lIEFSQ0hfSEFTX0tNQVAKIAogdm9pZCBrdW5tYXBfcGFyaXNjKHZvaWQgKmFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3ZmE2NzU3Li45YzgwMmViIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTY4LDYgKzE2OCwxNiBAQAogCV9fdTY0CWdwOwogfSBFbGY2NF9GZGVzYzsKIAorI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBFbGZfRmRlc2MJRWxmNjRfRmRlc2MKKyNlbHNlCisjZGVmaW5lIEVsZl9GZGVzYwlFbGYzMl9GZGVzYworI2VuZGlmIC8qQ09ORklHXzY0QklUKi8KKworI2VuZGlmIC8qX19LRVJORUxfXyovCisKIC8qIExlZ2FsIHZhbHVlcyBmb3IgcF90eXBlIGZpZWxkIG9mIEVsZjMyX1BoZHIvRWxmNjRfUGhkci4gICovCiAKICNkZWZpbmUgUFRfSFBfVExTCQkoUFRfTE9PUyArIDB4MCkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhMDVkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX0FTTV9QQVJJU0NfRlRSQUNFX0gKKyNkZWZpbmUgX0FTTV9QQVJJU0NfRlRSQUNFX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIG1jb3VudCh2b2lkKTsKKworLyoKKyAqIFN0YWNrIG9mIHJldHVybiBhZGRyZXNzZXMgZm9yIGZ1bmN0aW9ucyBvZiBhIHRocmVhZC4KKyAqIFVzZWQgaW4gc3RydWN0IHRocmVhZF9pbmZvCisgKi8KK3N0cnVjdCBmdHJhY2VfcmV0X3N0YWNrIHsKKwl1bnNpZ25lZCBsb25nIHJldDsKKwl1bnNpZ25lZCBsb25nIGZ1bmM7CisJdW5zaWduZWQgbG9uZyBsb25nIGNhbGx0aW1lOworfTsKKworLyoKKyAqIFByaW1hcnkgaGFuZGxlciBvZiBhIGZ1bmN0aW9uIHJldHVybi4KKyAqIEl0IHJlbGF5cyBvbiBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIuCisgKiBEZWZpbmVkIGluIGVudHJ5LlMKKyAqLworZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1BBUklTQ19GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGMzOTQxZjAuLjdiYzUxMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTM2LDE2ICszNiw3IEBACiAgKi8KICNkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MKICNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUwotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsKLSNpZiAhZGVmaW5lZChDT05GSUdfNjRCSVQpCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZnV0dXJlX2ZsYWdzOwotIC8qIFhYWDogaXQncyBwb3NzaWJsZSB0byByZW1vdmUgZnV0dXJlX2ZsYWdzIGFuZCBjaGFuZ2UgQklUU19QRVJfUFRFX0VOVFJZCi0JIHRvIDIsIGJ1dCB0aGVuIHN0cmFuZ2VseSB0aGUgaWRlbnRpY2FsIDMyYml0IGtlcm5lbCBib290cyBvbiBhCi0JIGMzMDAwKHBhMjApLCBidXQgbm90IGFueSBsb25nZXIgb24gYSA3MTUocGExMSkuCi0JIFN0aWxsIGludmVzdGlnYXRpbmcuLi4gSGVsZ2VELgotICAqLwotI2VuZGlmCi19IHB0ZV90OyAvKiBlaXRoZXIgMzIgb3IgNjRiaXQgKi8KK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7IC8qIGVpdGhlciAzMiBvciA2NGJpdCAqLwogCiAvKiBOT1RFOiBldmVuIG9uIDY0IGJpdHMsIHRoZXNlIGVudHJpZXMgYXJlIF9fdTMyIGJlY2F1c2Ugd2UgYWxsb2NhdGUKICAqIHRoZSBwbWQgYW5kIHBnZCBpbiBaT05FX0RNQSAoaS5lLiB1bmRlciA0R0IpICovCkBAIC0xMTEsNyArMTAyLDcgQEAKICNkZWZpbmUgQklUU19QRVJfUE1EX0VOVFJZCTIKICNkZWZpbmUgQklUU19QRVJfUEdEX0VOVFJZCTIKICNlbHNlCi0jZGVmaW5lIEJJVFNfUEVSX1BURV9FTlRSWQkzCisjZGVmaW5lIEJJVFNfUEVSX1BURV9FTlRSWQkyCiAjZGVmaW5lIEJJVFNfUEVSX1BNRF9FTlRSWQkyCiAjZGVmaW5lIEJJVFNfUEVSX1BHRF9FTlRSWQlCSVRTX1BFUl9QTURfRU5UUlkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaAppbmRleCA0MzBmMWFlLi40Y2E1MTBiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaApAQCAtNDksNiArNDksOCBAQAogI2RlZmluZSBQRENfTU9ERUxfQ1BVX0lECTYJLyogcmV0dXJucyBjcHUtaWQgKG9ubHkgbmV3ZXIgbWFjaGluZXMhKSAqLwogI2RlZmluZSBQRENfTU9ERUxfQ0FQQUJJTElUSUVTCTcJLyogcmV0dXJucyBPUzMyL09TNjQtZmxhZ3MJKi8KIC8qIFZhbHVlcyBmb3IgUERDX01PREVMX0NBUEFCSUxJVElFUyBub24tZXF1aXZhbGVudCB2aXJ0dWFsIGFsaWFzaW5nIHN1cHBvcnQgKi8KKyNkZWZpbmUgIFBEQ19NT0RFTF9PUzY0CQkJKDEgPDwgMCkKKyNkZWZpbmUgIFBEQ19NT0RFTF9PUzMyCQkJKDEgPDwgMSkKICNkZWZpbmUgIFBEQ19NT0RFTF9JT1BESVJfRkRDCQkoMSA8PCAyKQogI2RlZmluZSAgUERDX01PREVMX05WQV9NQVNLCQkoMyA8PCA0KQogI2RlZmluZSAgUERDX01PREVMX05WQV9TVVBQT1JURUQJKDAgPDwgNCkKQEAgLTM0MSw2ICszNDMsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gLyogZm9yIF9fUEFHRV9PRkZTRVQgKi8KKwogZXh0ZXJuIGludCBwZGNfdHlwZTsKIAogLyogVmFsdWVzIGZvciBwZGNfdHlwZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDQ3MGE0YjguLmEyN2QyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTUwLDExICs1MCw3IEBACiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHVuc2lnbmVkIGxvbmcpcGdkX3ZhbChlKSkKIAogLyogVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbGx5IG1hcHBlZCBrZXJuZWwgbWVtb3J5ICovCi0jaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIEtFUk5FTF9JTklUSUFMX09SREVSCTI0CS8qIDAgdG8gMTw8MjQgPSAxNk1CICovCi0jZWxzZQotI2RlZmluZSBLRVJORUxfSU5JVElBTF9PUkRFUgkyMwkvKiAwIHRvIDE8PDIzID0gOE1CICovCi0jZW5kaWYKICNkZWZpbmUgS0VSTkVMX0lOSVRJQUxfU0laRQkoMSA8PCBLRVJORUxfSU5JVElBTF9PUkRFUikKIAogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQikKQEAgLTkxLDE2ICs4NywyNSBAQAogCiAvKiBEZWZpbml0aW9ucyBmb3IgMXN0IGxldmVsICovCiAjZGVmaW5lIFBHRElSX1NISUZUCShQTURfU0hJRlQgKyBCSVRTX1BFUl9QTUQpCisjaWYgKFBHRElSX1NISUZUICsgUEFHRV9TSElGVCArIFBHRF9PUkRFUiAtIEJJVFNfUEVSX1BHRF9FTlRSWSkgPiBCSVRTX1BFUl9MT05HCisjZGVmaW5lIEJJVFNfUEVSX1BHRAkoQklUU19QRVJfTE9ORyAtIFBHRElSX1NISUZUKQorI2Vsc2UKICNkZWZpbmUgQklUU19QRVJfUEdECShQQUdFX1NISUZUICsgUEdEX09SREVSIC0gQklUU19QRVJfUEdEX0VOVFJZKQorI2VuZGlmCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogI2RlZmluZSBQVFJTX1BFUl9QR0QgICAgKDFVTCA8PCBCSVRTX1BFUl9QR0QpCiAjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEICAgICAgIFBUUlNfUEVSX1BHRAogCisjaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIE1BWF9BRERSQklUUwkoUEdESVJfU0hJRlQgKyBCSVRTX1BFUl9QR0QpCiAjZGVmaW5lIE1BWF9BRERSRVNTCSgxVUwgPDwgTUFYX0FERFJCSVRTKQotCiAjZGVmaW5lIFNQQUNFSURfU0hJRlQJKE1BWF9BRERSQklUUyAtIDMyKQorI2Vsc2UKKyNkZWZpbmUgTUFYX0FERFJCSVRTCShCSVRTX1BFUl9MT05HKQorI2RlZmluZSBNQVhfQUREUkVTUwkoMVVMIDw8IE1BWF9BRERSQklUUykKKyNkZWZpbmUgU1BBQ0VJRF9TSElGVAkwCisjZW5kaWYKIAogLyogVGhpcyBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgaW5pdGlhbCBwYWdlcyB3ZSBuZWVkIGZvciB0aGUgaW5pdGlhbAogICogcGFnZSB0YWJsZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggNmVmNGI3OC4uMjFlYjQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc21wLmgKQEAgLTI5LDcgKzI5LDggQEAKIGV4dGVybiB2b2lkIHNtcF9zZW5kX2FsbF9ub3Aodm9pZCk7CiAKIGV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spOworZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOworI2RlZmluZSBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzawogCiAjZW5kaWYgLyogIUFTU0VNQkxZICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IGYzZDIwOTAuLmZhZTAzZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTg3LDYgKzE4Nyw5IEBACiAJcmV0dXJuICFydy0+Y291bnRlcjsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMDE2ZDNmYy4uNjdkYjA3MiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTEsMTAgKzExLDI1IEBACiAJCSAgIHByb2Nlc3MubyBwcm9jZXNzb3IubyBwZGNfY29ucy5vIHBkY19jaGFzc2lzLm8gdW53aW5kLm8gXAogCQkgICB0b3BvbG9neS5vCiAKK2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyMgRG8gbm90IHByb2ZpbGUgZGVidWcgYW5kIGxvd2xldmVsIHV0aWxpdGllcworQ0ZMQUdTX1JFTU9WRV9mdHJhY2UubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9jYWNoZS5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2lycS5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX3BhY2FjaGUubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9wZXJmLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfdHJhcHMubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV91bmFsaWduZWQubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV91bndpbmQubyA9IC1wZworZW5kaWYKKwogb2JqLSQoQ09ORklHX1NNUCkJKz0gc21wLm8KIG9iai0kKENPTkZJR19QQTExKQkrPSBwY2ktZG1hLm8KIG9iai0kKENPTkZJR19QQ0kpCSs9IHBjaS5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJKz0gbW9kdWxlLm8KIG9iai0kKENPTkZJR182NEJJVCkJKz0gYmluZm10X2VsZjMyLm8gc3lzX3BhcmlzYzMyLm8gc2lnbmFsMzIubworb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpKz0gc3RhY2t0cmFjZS5vCiAjIG9ubHkgc3VwcG9ydGVkIGZvciBQQ1gtVy9VIGluIDY0LWJpdCBtb2RlIGF0IHRoZSBtb21lbnQKIG9iai0kKENPTkZJR182NEJJVCkJKz0gcGVyZi5vIHBlcmZfYXNtLm8KK29iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpCQkrPSBmdHJhY2Uubworb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikJKz0gZnRyYWNlLm8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggMGRiOWZkYy4uYWUzZTcwYyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKQEAgLTUwNSw2ICs1MDUsMTggQEAKIAlTVFJFRwkJXHB0ZSwwKFxwdGVwKQogCS5lbmRtCiAKKwkvKiBiaXRzaGlmdCBkaWZmZXJlbmNlIGJldHdlZW4gYSBQRk4gKGJhc2VkIG9uIGtlcm5lbCdzIFBBR0VfU0laRSkKKwkgKiB0byBhIENQVSBUTEIgNGsgUEZOICg0ayA9PiAxMiBiaXRzIHRvIHNoaWZ0KSAqLworCSNkZWZpbmUgUEFHRV9BRERfU0hJRlQgIChQQUdFX1NISUZULTEyKQorCisJLyogRHJvcCBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpaXRsYnQgYW5kIGlkdGxidCAqLworCS5tYWNybwkJY29udmVydF9mb3JfdGxiX2luc2VydDIwIHB0ZQorCWV4dHJkLHUJCVxwdGUsKDYzLUFTTV9QRk5fUFRFX1NISUZUKSsoNjMtNTgpK1BBR0VfQUREX1NISUZULFwKKwkJCQk2NC1QQUdFX1NISUZULVBBR0VfQUREX1NISUZULFxwdGUKKwlkZXBkaQkJX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxULDYzLFwKKwkJCQkoNjMtNTgpK1BBR0VfQUREX1NISUZULFxwdGUKKwkuZW5kbQorCiAJLyogQ29udmVydCB0aGUgcHRlIGFuZCBwcm90IHRvIHRsYiBpbnNlcnRpb24gdmFsdWVzLiAgSG93CiAJICogdGhpcyBoYXBwZW5zIGlzIHF1aXRlIHN1YnRsZSwgcmVhZCBiZWxvdyAqLwogCS5tYWNybwkJbWFrZV9pbnNlcnRfdGxiCXNwYyxwdGUscHJvdApAQCAtNTQ0LDggKzU1Niw3IEBACiAJZGVwaQkJMSwxMiwxLFxwcm90CiAKIAkvKiBEcm9wIHByb3QgYml0cyBhbmQgY29udmVydCB0byBwYWdlIGFkZHIgZm9yIGlpdGxidCBhbmQgaWR0bGJ0ICovCi0JZXh0cmQsdQkJXHB0ZSwoNjMtQVNNX1BGTl9QVEVfU0hJRlQpKyg2My01OCksNjQtUEFHRV9TSElGVCxccHRlCi0JZGVwZGkJCV9QQUdFX1NJWkVfRU5DT0RJTkdfREVGQVVMVCw2Myw2My01OCxccHRlCisJY29udmVydF9mb3JfdGxiX2luc2VydDIwIFxwdGUKIAkuZW5kbQogCiAJLyogSWRlbnRpY2FsIG1hY3JvIHRvIG1ha2VfaW5zZXJ0X3RsYiBhYm92ZSwgZXhjZXB0IGl0CkBAIC01NjMsOCArNTc0LDggQEAKIAogCS8qIEdldCByaWQgb2YgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWl0bGJhICovCiAKLQlkZXBpCQlfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQsMzEsQVNNX1BGTl9QVEVfU0hJRlQsXHB0ZQotCWV4dHJ1CQlccHRlLDI0LDI1LFxwdGUKKwlkZXBpCQkwLDMxLEFTTV9QRk5fUFRFX1NISUZULFxwdGUKKwlTSFJSRUcJCVxwdGUsKEFTTV9QRk5fUFRFX1NISUZULSgzMS0yNikpLFxwdGUKIAkuZW5kbQogCiAJLyogVGhpcyBpcyBmb3IgSUxQMzIgUEEyLjAgb25seS4gIFRoZSBUTEIgaW5zZXJ0aW9uIG5lZWRzCkBAIC0xMjQ0LDEwICsxMjU1LDkgQEAKIAlkZXBkaSx6ICAgICAgICAgNyw3LDMscHJvdAogCWRlcGRpICAgICAgICAgICAxLDEwLDEscHJvdAogCi0JLyogR2V0IHJpZCBvZiBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpZHRsYnQgKi8KKwkvKiBEcm9wIHByb3QgYml0cyBmcm9tIHB0ZSBhbmQgY29udmVydCB0byBwYWdlIGFkZHIgZm9yIGlkdGxidCAqLworCWNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUKIAotCWRlcGRpCQkwLDYzLDEyLHB0ZQotCWV4dHJkLHUgICAgICAgICBwdGUsNTYsNTIscHRlCiAJaWR0bGJ0ICAgICAgICAgIHB0ZSxwcm90CiAKIAlyZmlyCkBAIC0xMzM3LDggKzEzNDcsOCBAQAogCiAJLyogR2V0IHJpZCBvZiBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpZHRsYmEgKi8KIAotCWRlcGkJCTAsMzEsMTIscHRlCi0JZXh0cnUJCXB0ZSwyNCwyNSxwdGUKKwlkZXBpCQkwLDMxLEFTTV9QRk5fUFRFX1NISUZULHB0ZQorCVNIUlJFRwkJcHRlLChBU01fUEZOX1BURV9TSElGVC0oMzEtMjYpKSxwdGUKIAogCW1mc3AJCSVzcjEsdDAgIC8qIFNhdmUgc3IxIHNvIHdlIGNhbiB1c2UgaXQgaW4gdGxiIGluc2VydHMgKi8KIAltdHNwCQlzcGMsJXNyMQpAQCAtMTQwMywxMCArMTQxMyw5IEBACiAJZGVwZGkseiAgICAgICAgIDcsNywzLHByb3QKIAlkZXBkaSAgICAgICAgICAgMSwxMCwxLHByb3QKIAotCS8qIEdldCByaWQgb2YgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWR0bGJ0ICovCisJLyogRHJvcCBwcm90IGJpdHMgZnJvbSBwdGUgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpZHRsYnQgKi8KKwljb252ZXJ0X2Zvcl90bGJfaW5zZXJ0MjAgcHRlCiAKLQlkZXBkaQkJMCw2MywxMixwdGUKLQlleHRyZCx1ICAgICAgICAgcHRlLDU2LDMyLHB0ZQogCWlkdGxidCAgICAgICAgICBwdGUscHJvdAogCiAJcmZpcgpAQCAtMjE3Niw2ICsyMTg1LDMzIEBACiBFTkRQUk9DKHN5c2NhbGxfZXhpdCkKIAogCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorCS5pbXBvcnQgZnRyYWNlX2Z1bmN0aW9uX3RyYW1wb2xpbmUsY29kZQorRU5UUlkoX21jb3VudCkKKwljb3B5CSVyMywgJWFyZzIKKwliCWZ0cmFjZV9mdW5jdGlvbl90cmFtcG9saW5lCisJbm9wCitFTkRQUk9DKF9tY291bnQpCisKK0VOVFJZKHJldHVybl90b19oYW5kbGVyKQorCWxvYWQzMglyZXR1cm5fdHJhbXBvbGluZSwgJXJwCisJY29weQklcmV0MCwgJWFyZzAKKwljb3B5CSVyZXQxLCAlYXJnMQorCWIJZnRyYWNlX3JldHVybl90b19oYW5kbGVyCisJbm9wCityZXR1cm5fdHJhbXBvbGluZToKKwljb3B5CSVyZXQwLCAlcnAKKwljb3B5CSVyMjMsICVyZXQwCisJY29weQklcjI0LCAlcmV0MQorCisuZ2xvYmwgZnRyYWNlX3N0dWIKK2Z0cmFjZV9zdHViOgorCWJ2CSVyMCglcnApCisJbm9wCitFTkRQUk9DKHJldHVybl90b19oYW5kbGVyKQorI2VuZGlmCS8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KKworCiBnZXRfcmVnaXN0ZXI6CiAJLyoKIAkgKiBnZXRfcmVnaXN0ZXIgaXMgdXNlZCBieSB0aGUgbm9uIGFjY2VzcyB0bGIgbWlzcyBoYW5kbGVycyB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCBmNmQyNDEyLi40YzI0N2UwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwpAQCAtNTI3LDcgKzUyNywxMSBAQAogICAgICAgICBwZGNfcmVzdWx0WzBdID0gMDsgLyogcHJlc2V0IHplcm8gKGNhbGwgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCEpICovCiAgICAgICAgIHJldHZhbCA9IG1lbV9wZGNfY2FsbChQRENfTU9ERUwsIFBEQ19NT0RFTF9DQVBBQklMSVRJRVMsIF9fcGEocGRjX3Jlc3VsdCksIDApOwogICAgICAgICBjb252ZXJ0X3RvX3dpZGUocGRjX3Jlc3VsdCk7Ci0gICAgICAgICpjYXBhYmlsaXRpZXMgPSBwZGNfcmVzdWx0WzBdOworICAgICAgICBpZiAocmV0dmFsID09IFBEQ19PSykgeworICAgICAgICAgICAgICAgICpjYXBhYmlsaXRpZXMgPSBwZGNfcmVzdWx0WzBdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpjYXBhYmlsaXRpZXMgPSBQRENfTU9ERUxfT1MzMjsKKyAgICAgICAgfQogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGNfbG9jaywgZmxhZ3MpOwogCiAgICAgICAgIHJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NzM3MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYwpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvZGUgZm9yIHRyYWNpbmcgY2FsbHMgaW4gTGludXgga2VybmVsLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KKyAqCisgKiBiYXNlZCBvbiBjb2RlIGZvciB4ODYgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCisgKiBmdXR1cmUgcG9zc2libGUgZW5oYW5jZW1lbnRzOgorICogCS0gYWRkIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorICoJLSBhZGQgQ09ORklHX1NUQUNLX1RSQUNFUgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CisKKworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCisvKiBBZGQgYSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyB0byB0aGUgdHJhY2Ugc3RhY2sgb24gdGhyZWFkIGluZm8uKi8KK3N0YXRpYyBpbnQgcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAorCQkJCXVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpZiAoIWN1cnJlbnQtPnJldF9zdGFjaykKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFRoZSByZXR1cm4gdHJhY2Ugc3RhY2sgaXMgZnVsbCAqLworCWlmIChjdXJyZW50LT5jdXJyX3JldF9zdGFjayA9PSBGVFJBQ0VfUkVURlVOQ19ERVBUSCAtIDEpIHsKKwkJYXRvbWljX2luYygmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW5kZXggPSArK2N1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCWJhcnJpZXIoKTsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldCA9IHJldDsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmMgPSBmdW5jOworCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSB0aW1lOworCSpkZXB0aCA9IGluZGV4OworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHJpZXZlIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCitzdGF0aWMgdm9pZCBwb3BfcmV0dXJuX3RyYWNlKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgdW5zaWduZWQgbG9uZyAqcmV0KQoreworCWludCBpbmRleDsKKworCWluZGV4ID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CisKKwlpZiAodW5saWtlbHkoaW5kZXggPCAwKSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLCBvdGhlcndpc2Ugd2UgaGF2ZSBubyB3aGVyZSB0byBnbyAqLworCQkqcmV0ID0gKHVuc2lnbmVkIGxvbmcpCisJCQlkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKCZwYW5pYyk7CisJCXJldHVybjsKKwl9CisKKwkqcmV0ID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5yZXQ7CisJdHJhY2UtPmZ1bmMgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmM7CisJdHJhY2UtPmNhbGx0aW1lID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZTsKKwl0cmFjZS0+b3ZlcnJ1biA9IGF0b21pY19yZWFkKCZjdXJyZW50LT50cmFjZV9vdmVycnVuKTsKKwl0cmFjZS0+ZGVwdGggPSBpbmRleDsKKwliYXJyaWVyKCk7CisJY3VycmVudC0+Y3Vycl9yZXRfc3RhY2stLTsKKworfQorCisvKgorICogU2VuZCB0aGUgdHJhY2UgdG8gdGhlIHJpbmctYnVmZmVyLgorICogQHJldHVybiB0aGUgb3JpZ2luYWwgcmV0dXJuIGFkZHJlc3MuCisgKi8KK3Vuc2lnbmVkIGxvbmcgZnRyYWNlX3JldHVybl90b19oYW5kbGVyKHVuc2lnbmVkIGxvbmcgcmV0dmFsMCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZXR2YWwxKQoreworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0IHRyYWNlOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcG9wX3JldHVybl90cmFjZSgmdHJhY2UsICZyZXQpOworCXRyYWNlLnJldHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJZnRyYWNlX2dyYXBoX3JldHVybigmdHJhY2UpOworCisJaWYgKHVubGlrZWx5KCFyZXQpKSB7CisJCWZ0cmFjZV9ncmFwaF9zdG9wKCk7CisJCVdBUk5fT04oMSk7CisJCS8qIE1pZ2h0IGFzIHdlbGwgcGFuaWMuIFdoYXQgZWxzZSB0byBkbz8gKi8KKwkJcmV0ID0gKHVuc2lnbmVkIGxvbmcpCisJCQlkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKCZwYW5pYyk7CisJfQorCisJLyogSEFDSzogd2UgaGFuZCBvdmVyIHRoZSBvbGQgZnVuY3Rpb25zJyByZXR1cm4gdmFsdWVzCisJICAgaW4gJXIyMyBhbmQgJXIyNC4gQXNzZW1ibHkgaW4gZW50cnkuUyB3aWxsIHRha2UgY2FyZQorCSAgIGFuZCBtb3ZlIHRob3NlIHRvIHRoZWlyIGZpbmFsIHJlZ2lzdGVycyAlcmV0MCBhbmQgJXJldDEgKi8KKwlhc20oICJjb3B5ICUwLCAlJXIyMyBcblx0IgorCSAgICAgImNvcHkgJTEsICUlcjI0IFxuIiA6IDogInIiIChyZXR2YWwwKSwgInIiIChyZXR2YWwxKSApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEhvb2sgdGhlIHJldHVybiBhZGRyZXNzIGFuZCBwdXNoIGl0IGluIHRoZSBzdGFjayBvZiByZXR1cm4gYWRkcnMKKyAqIGluIGN1cnJlbnQgdGhyZWFkIGluZm8uCisgKi8KK3ZvaWQgcHJlcGFyZV9mdHJhY2VfcmV0dXJuKHVuc2lnbmVkIGxvbmcgKnBhcmVudCwgdW5zaWduZWQgbG9uZyBzZWxmX2FkZHIpCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGNhbGx0aW1lOworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50IHRyYWNlOworCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZjdXJyZW50LT50cmFjaW5nX2dyYXBoX3BhdXNlKSkpCisJCXJldHVybjsKKworCW9sZCA9ICpwYXJlbnQ7CisJKnBhcmVudCA9ICh1bnNpZ25lZCBsb25nKQorCQkgIGRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3IoJnJldHVybl90b19oYW5kbGVyKTsKKworCWlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKG9sZCkpKSB7CisJCWZ0cmFjZV9ncmFwaF9zdG9wKCk7CisJCSpwYXJlbnQgPSBvbGQ7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwljYWxsdGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCWlmIChwdXNoX3JldHVybl90cmFjZShvbGQsIGNhbGx0aW1lLAorCQkJCXNlbGZfYWRkciwgJnRyYWNlLmRlcHRoKSA9PSAtRUJVU1kpIHsKKwkJKnBhcmVudCA9IG9sZDsKKwkJcmV0dXJuOworCX0KKworCXRyYWNlLmZ1bmMgPSBzZWxmX2FkZHI7CisKKwkvKiBPbmx5IHRyYWNlIGlmIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGV4cGVjdHMgdG8gKi8KKwlpZiAoIWZ0cmFjZV9ncmFwaF9lbnRyeSgmdHJhY2UpKSB7CisJCWN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrLS07CisJCSpwYXJlbnQgPSBvbGQ7CisJfQorfQorCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCisKK3ZvaWQgZnRyYWNlX2Z1bmN0aW9uX3RyYW1wb2xpbmUodW5zaWduZWQgbG9uZyBwYXJlbnQsCisJCQkJdW5zaWduZWQgbG9uZyBzZWxmX2FkZHIsCisJCQkJdW5zaWduZWQgbG9uZyBvcmdfc3BfZ3IzKQoreworCWV4dGVybiBmdHJhY2VfZnVuY190IGZ0cmFjZV90cmFjZV9mdW5jdGlvbjsKKworCWlmIChmdW5jdGlvbl90cmFjZV9zdG9wKQorCQlyZXR1cm47CisKKwlpZiAoZnRyYWNlX3RyYWNlX2Z1bmN0aW9uICE9IGZ0cmFjZV9zdHViKSB7CisJCWZ0cmFjZV90cmFjZV9mdW5jdGlvbihwYXJlbnQsIHNlbGZfYWRkcik7CisJCXJldHVybjsKKwl9CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCWlmIChmdHJhY2VfZ3JhcGhfZW50cnkgJiYgZnRyYWNlX2dyYXBoX3JldHVybikgeworCQl1bnNpZ25lZCBsb25nIHNwOworCQl1bnNpZ25lZCBsb25nICpwYXJlbnRfcnA7CisKKyAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjb3B5ICUlcjMwLCAlMCIgOiAiPXIiKHNwKSk7CisJCS8qIHNhbml0eSBjaGVjazogaXMgc3RhY2sgcG9pbnRlciB3aGljaCB3ZSBnb3QgZnJvbQorCQkgICBhc3NlbWJsZXIgZnVuY3Rpb24gaW4gZW50cnkuUyBpbiBhIHJlYXNvbmFibGUKKwkJICAgcmFuZ2UgY29tcGFyZWQgdG8gY3VycmVudCBzdGFjayBwb2ludGVyPyAqLworCQlpZiAoKHNwIC0gb3JnX3NwX2dyMykgPiAweDQwMCkKKwkJCXJldHVybjsKKworCQkvKiBjYWxjdWxhdGUgcG9pbnRlciB0byAlcnAgaW4gc3RhY2sgKi8KKwkJcGFyZW50X3JwID0gKHVuc2lnbmVkIGxvbmcgKikgb3JnX3NwX2dyMyAtIDB4MTA7CisJCS8qIHNhbml0eSBjaGVjazogcGFyZW50X3JwIHNob3VsZCBob2xkIHBhcmVudCAqLworCQlpZiAoKnBhcmVudF9ycCAhPSBwYXJlbnQpCisJCQlyZXR1cm47CisJCQorCQlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4ocGFyZW50X3JwLCBzZWxmX2FkZHIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwppbmRleCAxYzc0MGY1Li40ZWE0MjI5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCkBAIC0zMTEsMTIgKzMxMSwxMiBAQAogCW5leHRfY3B1Kys7IC8qIGFzc2lnbiB0byAibmV4dCIgQ1BVIHdlIHdhbnQgdGhpcyBidWdnZXIgb24gKi8KIAogCS8qIHZhbGlkYXRlIGVudHJ5ICovCi0Jd2hpbGUgKChuZXh0X2NwdSA8IE5SX0NQVVMpICYmCisJd2hpbGUgKChuZXh0X2NwdSA8IG5yX2NwdV9pZHMpICYmCiAJCSghcGVyX2NwdShjcHVfZGF0YSwgbmV4dF9jcHUpLnR4bl9hZGRyIHx8CiAJCSAhY3B1X29ubGluZShuZXh0X2NwdSkpKQogCQluZXh0X2NwdSsrOwogCi0JaWYgKG5leHRfY3B1ID49IE5SX0NQVVMpIAorCWlmIChuZXh0X2NwdSA+PSBucl9jcHVfaWRzKSAKIAkJbmV4dF9jcHUgPSAwOwkvKiBub3RoaW5nIGVsc2UsIGFzc2lnbiBtb25hcmNoICovCiAKIAlyZXR1cm4gdHhuX2FmZmluaXR5X2FkZHIodmlydF9pcnEsIG5leHRfY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA5MDEzMjQzLi5lY2QxYzUwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCkBAIC02MSw5ICs2MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaWYgMApAQCAtMTE1LDggKzExMyw2IEBACiAJRWxmMzJfQWRkciBhZGRyOwogfTsKIAotI2RlZmluZSBFbGZfRmRlc2MJRWxmMzJfRmRlc2MKLQogc3RydWN0IHN0dWJfZW50cnkgewogCUVsZjMyX1dvcmQgaW5zbnNbMl07IC8qIGVhY2ggc3R1YiBlbnRyeSBoYXMgdHdvIGluc25zICovCiB9OwpAQCAtMTI1LDggKzEyMSw2IEBACiAJRWxmNjRfQWRkciBhZGRyOwogfTsKIAotI2RlZmluZSBFbGZfRmRlc2MJRWxmNjRfRmRlc2MKLQogc3RydWN0IHN0dWJfZW50cnkgewogCUVsZjY0X1dvcmQgaW5zbnNbNF07IC8qIGVhY2ggc3R1YiBlbnRyeSBoYXMgZm91ciBpbnNucyAqLwogfTsKQEAgLTkxNiwxNSArOTEwLDMgQEAKIAlkZXJlZ2lzdGVyX3Vud2luZF90YWJsZShtb2QpOwogCW1vZHVsZV9idWdfY2xlYW51cChtb2QpOwogfQotCi0jaWZkZWYgQ09ORklHXzY0QklUCi12b2lkICpkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKHZvaWQgKnB0cikKLXsKLQlFbGY2NF9GZGVzYyAqZGVzYyA9IHB0cjsKLQl2b2lkICpwOwotCi0JaWYgKCFwcm9iZV9rZXJuZWxfYWRkcmVzcygmZGVzYy0+YWRkciwgcCkpCi0JCXB0ciA9IHA7Ci0JcmV0dXJuIHB0cjsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jCmluZGV4IDBlZWNmYmIuLmRmNjUzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKQEAgLTE1Myw1ICsxNTMsMTAgQEAKIEVYUE9SVF9TWU1CT0wocGZubmlkX21hcCk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKK2V4dGVybiB2b2lkIF9tY291bnQodm9pZCk7CitFWFBPUlRfU1lNQk9MKF9tY291bnQpOworI2VuZGlmCisKIC8qIGZyb20gcGFjYWNoZS5TIC0tIG5lZWRlZCBmb3IgY29weV9wYWdlICovCiBFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9wYWdlX2FzbSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiODBlMDJhLi42ZjY5MTAxIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQ2LDE0ICs0NiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3BkYy5oPgogI2luY2x1ZGUgPGFzbS9wZGNfY2hhc3Npcy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKIC8qCiAgKiBUaGUgaWRsZSB0aHJlYWQuIFRoZXJlJ3Mgbm8gdXNlZnVsIHdvcmsgdG8gYmUKQEAgLTIzMSw4ICsyMzIsOCBAQAogCSAgIAogCSAgIEhvd2V2ZXIsIHRoZXNlIGxhc3QgMyBhcmdzIGFyZSBvbmx5IGV4YW1pbmVkCiAJICAgaWYgdGhlIHByb3BlciBmbGFncyBhcmUgc2V0LiAqLwotCWludCBfX3VzZXIgKmNoaWxkX3RpZHB0cjsKLQlpbnQgX191c2VyICpwYXJlbnRfdGlkcHRyOworCWludCBfX3VzZXIgKnBhcmVudF90aWRwdHIgPSAoaW50IF9fdXNlciAqKXJlZ3MtPmdyWzI0XTsKKwlpbnQgX191c2VyICpjaGlsZF90aWRwdHIgID0gKGludCBfX3VzZXIgKilyZWdzLT5nclsyMl07CiAKIAkvKiB1c3AgbXVzdCBiZSB3b3JkIGFsaWduZWQuICBUaGlzIGFsc28gcHJldmVudHMgdXNlcnMgZnJvbQogCSAqIHBhc3NpbmcgaW4gdGhlIHZhbHVlIDEgKHdoaWNoIGlzIHRoZSBzaWduYWwgZm9yIGEgc3BlY2lhbApAQCAtMjQzLDE2ICsyNDQsNiBAQAogCWlmICh1c3AgPT0gMCkKIAkgIHVzcCA9IHJlZ3MtPmdyWzMwXTsKIAotCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1BBUkVOVF9TRVRUSUQpCi0JICBwYXJlbnRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLT5nclsyNF07Ci0JZWxzZQotCSAgcGFyZW50X3RpZHB0ciA9IE5VTEw7Ci0JCi0JaWYgKGNsb25lX2ZsYWdzICYgKENMT05FX0NISUxEX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEKSkKLQkgIGNoaWxkX3RpZHB0ciA9IChpbnQgX191c2VyICopcmVncy0+Z3JbMjJdOwotCWVsc2UKLQkgIGNoaWxkX3RpZHB0ciA9IE5VTEw7Ci0KIAlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgdXNwLCByZWdzLCAwLCBwYXJlbnRfdGlkcHRyLCBjaGlsZF90aWRwdHIpOwogfQogCkBAIC0yNjMsNyArMjU0LDcgQEAKIH0KIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJICAgIHVuc2lnbmVkIGxvbmcgdW51c2VkLAkvKiBpbiBpYTY0IHRoaXMgaXMgInVzZXJfc3RhY2tfc2l6ZSIgKi8KIAkgICAgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiBwcmVncykKIHsKQEAgLTQwMCwzICszOTEsMTUgQEAKIAl9IHdoaWxlIChjb3VudCsrIDwgMTYpOwogCXJldHVybiAwOwogfQorCisjaWZkZWYgQ09ORklHXzY0QklUCit2b2lkICpkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKHZvaWQgKnB0cikKK3sKKwlFbGY2NF9GZGVzYyAqZGVzYyA9IHB0cjsKKwl2b2lkICpwOworCisJaWYgKCFwcm9iZV9rZXJuZWxfYWRkcmVzcygmZGVzYy0+YWRkciwgcCkpCisJCXB0ciA9IHA7CisJcmV0dXJuIHB0cjsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IGVjYjYwOTMuLmUwOWQwZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMKQEAgLTEwMCw4ICsxMDAsOCBAQAogCXN0cnVjdCBjcHVpbmZvX3BhcmlzYyAqcDsKIAogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAobnVtX29ubGluZV9jcHVzKCkgPj0gTlJfQ1BVUykgewotCQlwcmludGsoS0VSTl9JTkZPICJudW1fb25saW5lX2NwdXMoKSA+PSBOUl9DUFVTXG4iKTsKKwlpZiAobnVtX29ubGluZV9jcHVzKCkgPj0gbnJfY3B1X2lkcykgeworCQlwcmludGsoS0VSTl9JTkZPICJudW1fb25saW5lX2NwdXMoKSA+PSBucl9jcHVfaWRzXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogI2Vsc2UKQEAgLTIxNCw3ICsyMTQsNyBAQAogCSAqLwogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoY3B1aWQpIHsKLQkJY3B1X3NldChjcHVpZCwgY3B1X3ByZXNlbnRfbWFwKTsKKwkJc2V0X2NwdV9wcmVzZW50KGNwdWlkLCB0cnVlKTsKIAkJY3B1X3VwKGNwdWlkKTsKIAl9CiAjZW5kaWYKQEAgLTM2NCw2ICszNjQsMTMgQEAKIAkJCQkgYm9vdF9jcHVfZGF0YS5jcHVfaHogLyAxMDAwMDAwLAogCQkJCSBib290X2NwdV9kYXRhLmNwdV9oeiAlIDEwMDAwMDAgICk7CiAKKwkJc2VxX3ByaW50ZihtLCAiY2FwYWJpbGl0aWVzXHQ6Iik7CisJCWlmIChib290X2NwdV9kYXRhLnBkYy5jYXBhYmlsaXRpZXMgJiBQRENfTU9ERUxfT1MzMikKKwkJCXNlcV9wcmludGYobSwgIiBvczMyIik7CisJCWlmIChib290X2NwdV9kYXRhLnBkYy5jYXBhYmlsaXRpZXMgJiBQRENfTU9ERUxfT1M2NCkKKwkJCXNlcV9wcmludGYobSwgIiBvczY0Iik7CisJCXNlcV9wcmludGYobSwgIlxuIik7CisKIAkJc2VxX3ByaW50ZihtLCAibW9kZWxcdFx0OiAlc1xuIgogCQkJCSJtb2RlbCBuYW1lXHQ6ICVzXG4iLAogCQkJCSBib290X2NwdV9kYXRhLnBkYy5zeXNfbW9kZWxfbmFtZSwKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwppbmRleCA5OTk1ZDdlLi4xZmQwZjBjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC0xMTMsMTQgKzExNCwxNCBAQAogewogCS8qIFJFVklTSVQgOiByZWRpcmVjdCBJL08gSW50ZXJydXB0cyB0byBhbm90aGVyIENQVT8gKi8KIAkvKiBSRVZJU0lUIDogZG9lcyBQTSAqa25vdyogdGhpcyBDUFUgaXNuJ3QgYXZhaWxhYmxlPyAqLwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKwlzZXRfY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCksIGZhbHNlKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWZvciAoOzspCiAJCTsKIH0KIAogCi1pcnFyZXR1cm5fdAoraXJxcmV0dXJuX3QgX19pcnFfZW50cnkKIGlwaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKSAKIHsKIAlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0yMTQsMTEgKzIxNSwxMSBAQAogfQogCiBzdGF0aWMgdm9pZAotc2VuZF9JUElfbWFzayhjcHVtYXNrX3QgbWFzaywgZW51bSBpcGlfbWVzc2FnZV90eXBlIG9wKQorc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgZW51bSBpcGlfbWVzc2FnZV90eXBlIG9wKQogewogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spCisJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykKIAkJaXBpX3NlbmQoY3B1LCBvcCk7CiB9CiAKQEAgLTI1Nyw3ICsyNTgsNyBAQAogCXNlbmRfSVBJX2FsbGJ1dHNlbGYoSVBJX05PUCk7CiB9CiAKLXZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKQordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKIAlzZW5kX0lQSV9tYXNrKG1hc2ssIElQSV9DQUxMX0ZVTkMpOwogfQpAQCAtMjk2LDEzICsyOTcsMTQgQEAKIAltYigpOwogCiAJLyogV2VsbCwgc3VwcG9ydCAyLjQgbGludXggc2NoZW1lIGFzIHdlbGwuICovCi0JaWYgKGNwdV90ZXN0X2FuZF9zZXQoY3B1bnVtLCBjcHVfb25saW5lX21hcCkpCisJaWYgKGNwdV9pc3NldChjcHVudW0sIGNwdV9vbmxpbmVfbWFwKSkKIAl7CiAJCWV4dGVybiB2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKTsgLyogYXJjaC9wYXJpc2MuLi4vcHJvY2Vzcy5jICovCiAKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVIyVkIGFscmVhZHkgaW5pdGlhbGl6ZWQhXG4iLCBjcHVudW0pOwogCQltYWNoaW5lX2hhbHQoKTsKIAl9ICAKKwlzZXRfY3B1X29ubGluZShjcHVudW0sIHRydWUpOwogCiAJLyogSW5pdGlhbGlzZSB0aGUgaWRsZSB0YXNrIGZvciB0aGlzIENQVSAqLwogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwpAQCAtNDI0LDggKzQyNiw4IEBACiAJLyogU2V0dXAgQlNQIG1hcHBpbmdzICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiU01QOiBib290c3RyYXAgQ1BVIElEIGlzICVkXG4iLCBib290c3RyYXBfcHJvY2Vzc29yKTsKIAotCWNwdV9zZXQoYm9vdHN0cmFwX3Byb2Nlc3NvciwgY3B1X29ubGluZV9tYXApOwotCWNwdV9zZXQoYm9vdHN0cmFwX3Byb2Nlc3NvciwgY3B1X3ByZXNlbnRfbWFwKTsKKwlzZXRfY3B1X29ubGluZShib290c3RyYXBfcHJvY2Vzc29yLCB0cnVlKTsKKwlzZXRfY3B1X3ByZXNlbnQoYm9vdHN0cmFwX3Byb2Nlc3NvciwgdHJ1ZSk7CiB9CiAKIApAQCAtNDM2LDggKzQzOCw3IEBACiAqLwogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7Ci0JY3B1c19jbGVhcihjcHVfcHJlc2VudF9tYXApOwotCWNwdV9zZXQoMCwgY3B1X3ByZXNlbnRfbWFwKTsKKwlpbml0X2NwdV9wcmVzZW50KGNwdW1hc2tfb2YoMCkpOwogCiAJcGFyaXNjX21heF9jcHVzID0gbWF4X2NwdXM7CiAJaWYgKCFtYXhfY3B1cykKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3RhY2t0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTkxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBTdGFjayB0cmFjZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSGVsZ2UgRGVsbGVyIDxkZWxsZXJAZ214LmRlPgorICogIGJhc2VkIG9uIGFyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMgYnkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKiAgYW5kIHBhcmlzYyB1bndpbmQgZnVuY3Rpb25zIGJ5IFJhbmRvbHBoIENodW5nIDx0YXVzcUBkZWJpYW4ub3JnPgorICoKKyAqICBUT0RPOiBVc2Vyc3BhY2Ugc3RhY2t0cmFjZSAoQ09ORklHX1VTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUKQorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgorCitzdGF0aWMgdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwlzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gaW5mbzsKKworCS8qIGluaXRpYWxpemUgdW53aW5kIGluZm8gKi8KKwlpZiAodGFzayA9PSBjdXJyZW50KSB7CisJCXVuc2lnbmVkIGxvbmcgc3A7CisJCXN0cnVjdCBwdF9yZWdzIHI7CitIRVJFOgorCQlhc20gdm9sYXRpbGUgKCJjb3B5ICUlcjMwLCAlMCIgOiAiPXIiKHNwKSk7CisJCW1lbXNldCgmciwgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJCXIuaWFvcVswXSA9ICh1bnNpZ25lZCBsb25nKSYmSEVSRTsKKwkJci5nclsyXSA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwkJci5nclszMF0gPSBzcDsKKwkJdW53aW5kX2ZyYW1lX2luaXQoJmluZm8sIHRhc2ssICZyKTsKKwl9IGVsc2UgeworCQl1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmaW5mbywgdGFzayk7CisJfQorCisJLyogdW53aW5kIHN0YWNrIGFuZCBzYXZlIGVudHJpZXMgaW4gc3RhY2tfdHJhY2Ugc3RydWN0ICovCisJdHJhY2UtPm5yX2VudHJpZXMgPSAwOworCXdoaWxlICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcykgeworCQlpZiAodW53aW5kX29uY2UoJmluZm8pIDwgMCB8fCBpbmZvLmlwID09IDApCisJCQlicmVhazsKKworCQlpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKGluZm8uaXApKQorCQkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBpbmZvLmlwOworCX0KK30KKworCisvKgorICogU2F2ZSBzdGFjay1iYWNrdHJhY2UgYWRkcmVzc2VzIGludG8gYSBzdGFja190cmFjZSBidWZmZXIuCisgKi8KK3ZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQoreworCWR1bXBfdHJhY2UoY3VycmVudCwgdHJhY2UpOworCWlmICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcykKKwkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBVTE9OR19NQVg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlKTsKKwordm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwlkdW1wX3RyYWNlKHRzaywgdHJhY2UpOworCWlmICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcykKKwkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBVTE9OR19NQVg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlX3Rzayk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwppbmRleCA2OWI2ZWViLi41OWZjMWE0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKQEAgLTM2NSwxNyArMzY1LDUxIEBACiAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQkJTGlnaHQtd2VpZ2h0LXN5c2NhbGwgY29kZQorCQkzMi82NC1iaXQgTGlnaHQtV2VpZ2h0LVN5c2NhbGwgQUJJCiAKLQkJcjIwIC0gbHdzIG51bWJlcgotCQlyMjYscjI1LHIyNCxyMjMscjIyIC0gSW5wdXQgcmVnaXN0ZXJzCi0JCXIyOCAtIEZ1bmN0aW9uIHJldHVybiByZWdpc3RlcgotCQlyMjEgLSBFcnJvciBjb2RlLgorCQkqIC0gSW5kaWNhdGVzIGEgaGludCBmb3IgdXNlcnNwYWNlIGlubGluZSBhc20KKwkJaW1wbGVtZW50YXRpb25zLgogCi0JCVNjcmFjdGg6IEFueSBvZiB0aGUgYWJvdmUgdGhhdCBhcmVuJ3QgYmVpbmcKLQkJY3VycmVudGx5IHVzZWQsIGluY2x1ZGluZyByMS4gCisJCVN5c2NhbGwgbnVtYmVyIChjYWxsZXItc2F2ZXMpCisJICAgICAgICAtICVyMjAKKwkgICAgICAgICogSW4gYXNtIGNsb2JiZXIuCiAKLQkJUmV0dXJuIHBvaW50ZXI6IHIzMSAoTm90IHVzYWJsZSkKKwkJQXJndW1lbnQgcmVnaXN0ZXJzIChjYWxsZXItc2F2ZXMpCisJICAgICAgICAtICVyMjYsICVyMjUsICVyMjQsICVyMjMsICVyMjIKKwkgICAgICAgICogSW4gYXNtIGlucHV0LgorCisJCVJldHVybiByZWdpc3RlcnMgKGNhbGxlci1zYXZlcykKKwkgICAgICAgIC0gJXIyOCAocmV0dXJuKSwgJXIyMSAoZXJybm8pCisJICAgICAgICAqIEluIGFzbSBvdXRwdXQuCisKKwkJQ2FsbGVyLXNhdmVzIHJlZ2lzdGVycworCSAgICAgICAgLSAlcjEsICVyMjcsICVyMjkKKwkgICAgICAgIC0gJXIyIChyZXR1cm4gcG9pbnRlcikKKwkgICAgICAgIC0gJXIzMSAoYmxlIGxpbmsgcmVnaXN0ZXIpCisJICAgICAgICAqIEluIGFzbSBjbG9iYmVyLgorCisJCUNhbGxlZS1zYXZlcyByZWdpc3RlcnMKKwkgICAgICAgIC0gJXIzLSVyMTgKKwkgICAgICAgIC0gJXIzMCAoc3RhY2sgcG9pbnRlcikKKwkgICAgICAgICogTm90IGluIGFzbSBjbG9iYmVyLgorCisJCUlmIHVzZXJzcGFjZSBpcyAzMi1iaXQ6CisJCUNhbGxlZS1zYXZlcyByZWdpc3RlcnMKKwkgICAgICAgIC0gJXIxOSAoMzItYml0IFBJQyByZWdpc3RlcikKKworCQlEaWZmZXJlbmNlcyBmcm9tIDMyLWJpdCBjYWxsaW5nIGNvbnZlbnRpb246CisJCS0gU3lzY2FsbCBudW1iZXIgaW4gJXIyMAorCQktIEFkZGl0aW9uYWwgYXJndW1lbnQgcmVnaXN0ZXIgJXIyMiAoYXJnNCkKKwkJLSBDYWxsZWUtc2F2ZXMgJXIxOS4KKworCQlJZiB1c2Vyc3BhY2UgaXMgNjQtYml0OgorCQlDYWxsZWUtc2F2ZXMgcmVnaXN0ZXJzCisJCS0gJXIyNyAoNjQtYml0IFBJQyByZWdpc3RlcikKKworCQlEaWZmZXJlbmNlcyBmcm9tIDY0LWJpdCBjYWxsaW5nIGNvbnZlbnRpb246CisJCS0gU3lzY2FsbCBudW1iZXIgaW4gJXIyMAorCQktIEFkZGl0aW9uYWwgYXJndW1lbnQgcmVnaXN0ZXIgJXIyMiAoYXJnNCkKKwkJLSBDYWxsZWUtc2F2ZXMgJXIyNy4KIAogCQlFcnJvciBjb2RlcyByZXR1cm5lZCBieSBlbnRyeSBwYXRoOgogCkBAIC00NzMsNyArNTA3LDggQEAKIAliLG4JbHdzX2NvbXBhcmVfYW5kX3N3YXAKICNlbHNlCiAJLyogSWYgd2UgYXJlIG5vdCBhIDY0LWJpdCBrZXJuZWwsIHRoZW4gd2UgZG9uJ3QKLQkgKiBpbXBsZW1lbnQgaGF2aW5nIDY0LWJpdCBpbnB1dCByZWdpc3RlcnMKKwkgKiBoYXZlIDY0LWJpdCBpbnB1dCByZWdpc3RlcnMsIGFuZCBjYWxsaW5nCisJICogdGhlIDY0LWJpdCBMV1MgQ0FTIHJldHVybnMgRU5PU1lTLgogCSAqLwogCWIsbglsd3NfZXhpdF9ub3N5cwogI2VuZGlmCkBAIC02MzUsMTIgKzY3MCwxNSBAQAogCS8qCiAJCUFsbCBsaWdodC13ZWlnaHQtc3lzY2FsbCBhdG9taWMgb3BlcmF0aW9ucyAKIAkJd2lsbCB1c2UgdGhpcyBzZXQgb2YgbG9ja3MgCisKKwkJTk9URTogVGhlIGx3c19sb2NrX3N0YXJ0IHN5bWJvbCBtdXN0IGJlCisJCWF0IGxlYXN0IDE2LWJ5dGUgYWxpZ25lZCBmb3Igc2FmZSB1c2UKKwkJd2l0aCBsZGN3LgogCSovCiAJLnNlY3Rpb24gLmRhdGEKIAkuYWxpZ24JUEFHRV9TSVpFCiBFTlRSWShsd3NfbG9ja19zdGFydCkKIAkvKiBsd3MgbG9ja3MgKi8KLQkuYWxpZ24gMTYKIAkucmVwdCAxNgogCS8qIEtlZXAgbG9ja3MgYWxpZ25lZCBhdCAxNi1ieXRlcyAqLwogCS53b3JkIDEKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCmluZGV4IGU3NWNhZTYuLmQ0ZGQwNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTUzLDcgKzU0LDcgQEAKICAqIGhlbGQgb2ZmIGZvciBhbiBhcmJpdHJhcmlseSBsb25nIHBlcmlvZCBvZiB0aW1lIGJ5IGludGVycnVwdHMgYmVpbmcKICAqIGRpc2FibGVkLCBzbyB3ZSBtYXkgbWlzcyBvbmUgb3IgbW9yZSB0aWNrcy4KICAqLwotaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK2lycXJldHVybl90IF9faXJxX2VudHJ5IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBub3c7CiAJdW5zaWduZWQgbG9uZyBuZXh0X3RpY2s7CkBAIC0yMTYsMTQgKzIxNywxNCBAQAogCXBlcl9jcHUoY3B1X2RhdGEsIGNwdSkuaXRfdmFsdWUgPSBuZXh0X3RpY2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19wYXJpc2NfZGV2ID0gewotCS5uYW1lID0gInJ0Yy1wYXJpc2MiLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX2dlbmVyaWNfZGV2ID0geworCS5uYW1lID0gInJ0Yy1nZW5lcmljIiwKIAkuaWQgPSAtMSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCiB7Ci0JaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnRjX3BhcmlzY19kZXYpIDwgMCkKKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydGNfZ2VuZXJpY19kZXYpIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVnaXN0ZXIgcnRjIGRldmljZS4uLlxuIik7CiAKIAkvKiBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RyYXBzLmMKaW5kZXggYmE2NThkMi4uYzMyZjVkNiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RyYXBzLmMKQEAgLTI0Nyw2ICsyNDcsOCBAQAogCiAJb29wc19pbl9wcm9ncmVzcyA9IDE7CiAKKwlvb3BzX2VudGVyKCk7CisKIAkvKiBBbXVzZSB0aGUgdXNlciBpbiBhIFNQQVJDIGZhc2hpb24gKi8KIAlpZiAoZXJyKSBwcmludGsoCiBLRVJOX0NSSVQgIiAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gXG4iCkBAIC0yOTMsNiArMjk1LDcgQEAKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOwogCX0KIAorCW9vcHNfZXhpdCgpOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKQEAgLTQ5NCw3ICs0OTcsNyBAQAogCXBhbmljKG1zZyk7CiB9CiAKLXZvaWQgaGFuZGxlX2ludGVycnVwdGlvbihpbnQgY29kZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIG5vdHJhY2UgaGFuZGxlX2ludGVycnVwdGlvbihpbnQgY29kZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyZXNzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZhdWx0X3NwYWNlID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMWEzYjZjYy4uZmQyY2M0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTU0LDYgKzU0LDggQEAKIAkJVEVYVF9URVhUCiAJCVNDSEVEX1RFWFQKIAkJTE9DS19URVhUCisJCUtQUk9CRVNfVEVYVAorCQlJUlFFTlRSWV9URVhUCiAJCSooLnRleHQuZG9fc29mdGlycSkKIAkJKigudGV4dC5zeXNfZXhpdCkKIAkJKigudGV4dC5kb19zaWdhbHRzdGFjaykKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCA5ZDcwNGQ5Li40MzU2Y2ViIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC00NTYsNiArNDU2LDEzIEBACiB7CiAJaW50IGNvZGVzaXplLCByZXNlcnZlZHBhZ2VzLCBkYXRhc2l6ZSwgaW5pdHNpemU7CiAKKwkvKiBEbyBzYW5pdHkgY2hlY2tzIG9uIHBhZ2UgdGFibGUgY29uc3RhbnRzICovCisJQlVJTERfQlVHX09OKFBURV9FTlRSWV9TSVpFICE9IHNpemVvZihwdGVfdCkpOworCUJVSUxEX0JVR19PTihQTURfRU5UUllfU0laRSAhPSBzaXplb2YocG1kX3QpKTsKKwlCVUlMRF9CVUdfT04oUEdEX0VOVFJZX1NJWkUgIT0gc2l6ZW9mKHBnZF90KSk7CisJQlVJTERfQlVHX09OKFBBR0VfU0hJRlQgKyBCSVRTX1BFUl9QVEUgKyBCSVRTX1BFUl9QTUQgKyBCSVRTX1BFUl9QR0QKKwkJCT4gQklUU19QRVJfTE9ORyk7CisKIAloaWdoX21lbW9yeSA9IF9fdmEoKG1heF9wZm4gPDwgUEFHRV9TSElGVCkpOwogCiAjaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggNDUxOTJkYy4uOWUwOGQ4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTM0Niw3ICszNDYsNyBAQAogCWhlbHAKIAkgIEh5cGVydmlzb3ItYXNzaXN0ZWQgZHVtcCBpcyBtZWFudCB0byBiZSBhIGtkdW1wIHJlcGxhY2VtZW50CiAJICBvZmZlcmluZyByb2J1c3RuZXNzIGFuZCBzcGVlZCBub3QgcG9zc2libGUgd2l0aG91dCBzeXN0ZW0KLQkgIGh5cGVydmlzb3IgYXNzaXN0ZW5jZS4KKwkgIGh5cGVydmlzb3IgYXNzaXN0YW5jZS4KIAogCSAgSWYgdW5zdXJlLCBzYXkgIk4iCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKaW5kZXggNmFhMGI1ZS4uYTEwOThlMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKQEAgLTI3LDE2ICsyNyw2IEBACiAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgc2xvdyBkb3duIHByb2Nlc3MgY3JlYXRpb24gc29tZXdoYXQuCiAKLWNvbmZpZyBERUJVR19QQUdFQUxMT0MKLSAgICAgICAgYm9vbCAiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMiCi0gICAgICAgIGRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFISUJFUk5BVElPTgotCWRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKLSAgICAgICAgaGVscAotICAgICAgICAgIFVubWFwIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyBhZnRlciBmcmVlX3BhZ2VzKCkuCi0gICAgICAgICAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKLSAgICAgICAgICBvZiBtZW1vcnkgY29ycnVwdGlvbnMuCi0KLQogY29uZmlnIEhDQUxMX1NUQVRTCiAJYm9vbCAiSHlwZXJ2aXNvciBjYWxsIGluc3RydW1lbnRhdGlvbiIKIAlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTICYmIERFQlVHX0ZTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW16b25lLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW16b25lLmgKaW5kZXggMTlmMjk5Yi4uMzVhY2FjOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tem9uZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXpvbmUuaApAQCAtOCw2ICs4LDcgQEAKICNkZWZpbmUgX0FTTV9NTVpPTkVfSF8KICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAKIC8qCiAgKiBnZW5lcmljIG5vbi1saW5lYXIgbWVtb3J5IHN1cHBvcnQ6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzLmgKaW5kZXggNjdmMTgxMi4uY2RiNmZkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzMy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczMuaApAQCAtNTAsNiArNTAsOSBAQAogCiBlbnVtIHBzM19wYXJhbV9hdl9tdWx0aV9vdXQgcHMzX29zX2FyZWFfZ2V0X2F2X211bHRpX291dCh2b2lkKTsKIAorZXh0ZXJuIHU2NCBwczNfb3NfYXJlYV9nZXRfcnRjX2RpZmYodm9pZCk7CitleHRlcm4gdm9pZCBwczNfb3NfYXJlYV9zZXRfcnRjX2RpZmYodTY0IHJ0Y19kaWZmKTsKKwogLyogZG1hIHJvdXRpbmVzICovCiAKIGVudW0gcHMzX2RtYV9wYWdlX3NpemUgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAzNjg2NDM2Li5jM2IxOTMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjg3LDYgKzI4Nyw5IEBACiAJcnctPmxvY2sgPSAwOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJX19zcGluX3lpZWxkKGxvY2spCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQlfX3J3X3lpZWxkKGxvY2spCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJX19yd195aWVsZChsb2NrKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMKaW5kZXggNWI1ZDE2Yi4uNTQ1NTk0MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jCkBAIC01NTcsNyArNTU3LDYgQEAKIHZvaWQgcHJlcGFyZV9mdHJhY2VfcmV0dXJuKHVuc2lnbmVkIGxvbmcgKnBhcmVudCwgdW5zaWduZWQgbG9uZyBzZWxmX2FkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBvbGQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGNhbGx0aW1lOwogCWludCBmYXVsdGVkOwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50IHRyYWNlOwogCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2hvb2tlciA9ICh1bnNpZ25lZCBsb25nKSZyZXR1cm5fdG9faGFuZGxlcjsKQEAgLTYwNiwxMCArNjA1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWNhbGx0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JaWYgKGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZShvbGQsIGNhbGx0aW1lLAotCQkJCXNlbGZfYWRkciwgJnRyYWNlLmRlcHRoKSA9PSAtRUJVU1kpIHsKKwlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgewogCQkqcGFyZW50ID0gb2xkOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCBlYWMwNjQ5Li43YjQ0YTMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtNTk4LDcgKzU5OCw3IEBACiAvKgogICogQ29weSBhIHRocmVhZC4uCiAgKi8KLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKaW5kZXggYzk1NjQwMy4uOTI2ZWE4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTExMjcsMyArMTEyNywxOSBAQAogCWRyLT5yZXN1bHRfbG93ICA9ICgodTY0KXkgPDwgMzIpICsgejsKIAogfQorCitzdGF0aWMgaW50IF9faW5pdCBydGNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlpZiAoIXBwY19tZC5nZXRfcnRjX3RpbWUpCisJCXJldHVybiAtRU5PREVWOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1nZW5lcmljIiwgLTEsIE5VTEwsIDApOworCWlmIChJU19FUlIocGRldikpCisJCXJldHVybiBQVFJfRVJSKHBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KHJ0Y19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCmluZGV4IGQzNjk0NDkuLjgxOWU1OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJY21vLT5leGNlc3Muc2l6ZSA9IGNtby0+ZW50aXRsZWQgLSBjbW8tPnJlc2VydmUuc2l6ZTsKIAljbW8tPmV4Y2Vzcy5mcmVlID0gY21vLT5leGNlc3Muc2l6ZSAtIG5lZWQ7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKSk7CisJY2FuY2VsX2RlbGF5ZWRfd29yayh0b19kZWxheWVkX3dvcmsod29yaykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpb19jbW8ubG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKaW5kZXggZmZhMmE5Zi4uZTNlODcwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwpAQCAtMjkzLDcgKzI5Myw3IEBACiBjb25maWcgT0ZfUlRDCiAJYm9vbAogCWhlbHAKLQkgIFVzZXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgT0Ygb3IgZmxhdHRlbmVkIGRldmljZSB0cmVlIHRvIGluc3RhdGlhdGUKKwkgIFVzZXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgT0Ygb3IgZmxhdHRlbmVkIGRldmljZSB0cmVlIHRvIGluc3RhbnRpYXRlCiAJICBwbGF0Zm9ybSBkZXZpY2VzIGZvciBkaXJlY3QgbWFwcGVkIFJUQyBjaGlwcyBsaWtlIHRoZSBEUzE3NDIgb3IgRFMxNzQzLgogCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggNjRmMDY4NS4uNzA2ZWI1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTYzNSw3ICs2MzUsNyBAQAogCWlmIChkZW50cnktPmRfaW5vZGUpCiAJCWdvdG8gb3V0X2RwdXQ7CiAKLQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCiAJaWYgKGZsYWdzICYgU1BVX0NSRUFURV9HQU5HKQogCQlyZXQgPSBzcHVmc19jcmVhdGVfZ2FuZyhuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9vcy1hcmVhLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9vcy1hcmVhLmMKaW5kZXggZTFjODNjMi4uODZlMzkyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL29zLWFyZWEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9vcy1hcmVhLmMKQEAgLTgwOCw2ICs4MDgsNyBAQAogewogCXJldHVybiBzYXZlZF9wYXJhbXMucnRjX2RpZmY7CiB9CitFWFBPUlRfU1lNQk9MKHBzM19vc19hcmVhX2dldF9ydGNfZGlmZik7CiAKIC8qKgogICogcHMzX29zX2FyZWFfc2V0X3J0Y19kaWZmIC0gU2V0IHRoZSBydGMgZGlmZiB2YWx1ZS4KQEAgLTgyMyw2ICs4MjQsNyBAQAogCQlvc19hcmVhX3F1ZXVlX3dvcmsoKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHBzM19vc19hcmVhX3NldF9ydGNfZGlmZik7CiAKIC8qKgogICogcHMzX29zX2FyZWFfZ2V0X2F2X211bHRpX291dCAtIFJldHVybnMgdGhlIGRlZmF1bHQgdmlkZW8gbW9kZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3BsYXRmb3JtLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9wbGF0Zm9ybS5oCmluZGV4IDIzNWMxM2UuLjEzNmFhMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvcGxhdGZvcm0uaApAQCAtNjQsOCArNjQsNiBAQAogCiB2b2lkIF9faW5pdCBwczNfb3NfYXJlYV9zYXZlX3BhcmFtcyh2b2lkKTsKIHZvaWQgX19pbml0IHBzM19vc19hcmVhX2luaXQodm9pZCk7Ci11NjQgcHMzX29zX2FyZWFfZ2V0X3J0Y19kaWZmKHZvaWQpOwotdm9pZCBwczNfb3NfYXJlYV9zZXRfcnRjX2RpZmYodTY0IHJ0Y19kaWZmKTsKIAogLyogc3B1ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jCmluZGV4IDMzMzFjY2IuLjY2MTgxODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYwpAQCAtMjcwLDggKzI3MCw2IEBACiAJLmluaXRfSVJRCQkJPSBwczNfaW5pdF9JUlEsCiAJLnBhbmljCQkJCT0gcHMzX3BhbmljLAogCS5nZXRfYm9vdF90aW1lCQkJPSBwczNfZ2V0X2Jvb3RfdGltZSwKLQkuc2V0X3J0Y190aW1lCQkJPSBwczNfc2V0X3J0Y190aW1lLAotCS5nZXRfcnRjX3RpbWUJCQk9IHBzM19nZXRfcnRjX3RpbWUsCiAJLnNldF9kYWJyCQkJPSBwczNfc2V0X2RhYnIsCiAJLmNhbGlicmF0ZV9kZWNyCQkJPSBwczNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQkJPSBwczNfcHJvZ3Jlc3MsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy90aW1lLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy90aW1lLmMKaW5kZXggZDBkYWY3ZC4uYjE3OGExZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3RpbWUuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9ydGMuaD4KICNpbmNsdWRlIDxhc20vbHYxY2FsbC5oPgpAQCAtNzQsMjMgKzc1LDIwIEBACiAJcmV0dXJuIHJ0Y192YWw7CiB9CiAKLWludCBwczNfc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0JdTY0IG5vdyA9IG1rdGltZSh0bS0+dG1feWVhciArIDE5MDAsIHRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSwKLQkJdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMpOwotCi0JcHMzX29zX2FyZWFfc2V0X3J0Y19kaWZmKG5vdyAtIHJlYWRfcnRjKCkpOwotCXJldHVybiAwOwotfQotCi12b2lkIHBzM19nZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQl0b190bShyZWFkX3J0YygpICsgcHMzX29zX2FyZWFfZ2V0X3J0Y19kaWZmKCksIHRtKTsKLQl0bS0+dG1feWVhciAtPSAxOTAwOwotCXRtLT50bV9tb24gLT0gMTsKLX0KLQogdW5zaWduZWQgbG9uZyBfX2luaXQgcHMzX2dldF9ib290X3RpbWUodm9pZCkKIHsKIAlyZXR1cm4gcmVhZF9ydGMoKSArIHBzM19vc19hcmVhX2dldF9ydGNfZGlmZigpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBwczNfcnRjX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1wczMiLCAtMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQocHMzX3J0Y19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vS2NvbmZpZwppbmRleCAwYjE5MmExLi4yOWU0MjcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9LY29uZmlnCkBAIC05LDggKzksOCBAQAogCXNlbGVjdCBQUENfTElCX1JIRUFQCiAJaGVscAogCSAgQmVzdENvbW0gaXMgdGhlIG5hbWUgb2YgdGhlIGNvbW11bmljYXRpb24gY29wcm9jZXNzb3IgZm91bmQKLQkgIG9uIHRoZSBGcmVlc2NhbGUgTVBDNTIwMCBmYW1pbHkgb2YgcHJvY2Vzc29yLiBJdCdzIHVzYWdlIGlzCi0JICBvcHRpb25uYWwgZm9yIHNvbWUgZHJpdmVycyAobGlrZSBBVEEpLCBidXQgcmVxdWlyZWQgZm9yCisJICBvbiB0aGUgRnJlZXNjYWxlIE1QQzUyMDAgZmFtaWx5IG9mIHByb2Nlc3Nvci4gIEl0cyB1c2FnZSBpcworCSAgb3B0aW9uYWwgZm9yIHNvbWUgZHJpdmVycyAobGlrZSBBVEEpLCBidXQgcmVxdWlyZWQgZm9yCiAJICBvdGhlcnMgKGxpa2UgRkVDKS4KIAogCSAgSWYgeW91IHdhbnQgdG8gdXNlIGRyaXZlcnMgdGhhdCByZXF1aXJlIERNQSBvcGVyYXRpb25zLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwppbmRleCA3ZTI5N2EzLi4yMjgzOTMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwpAQCAtNiwxMyArNiw0IEBACiAKIHNvdXJjZSAibGliL0tjb25maWcuZGVidWciCiAKLWNvbmZpZyBERUJVR19QQUdFQUxMT0MKLQlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKLQloZWxwCi0JICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgotCSAgVGhpcyByZXN1bHRzIGluIGEgc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMgb2YKLQkgIG1lbW9yeSBjb3JydXB0aW9ucy4KLQogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDIwMDkxNTguLjcyMTM3YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKQEAgLTkyLDEyICs5Miw2IEBACiAjZW5kaWYKIAogI2lmbmRlZiBDT05GSUdfU01QCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQotewotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMvbWFjaGluZSBjaGVja3MgKi8KLQlfX2xvYWRfcHN3X21hc2socHN3X2tlcm5lbF9iaXRzICYgflBTV19NQVNLX01DSEVDSyk7Ci19Ci0KICNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCTAKICNkZWZpbmUgc21wX2NwdV9ub3RfcnVubmluZyhjcHUpCTEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBkZjg0YWU5Li5mMzg2MWIwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTcyLDYgKzE3Miw5IEBACiAJcmV0dXJuIF9yYXdfd3JpdGVfdHJ5bG9ja19yZXRyeShydyk7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYjQ4ZTk2MS4uYTNhY2Q4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogewogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIG5ld19zdGFja3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdfc3RhY2twLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCA2YTFlNzliLi41ZTRiYWJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC02NDQsMTAgKzY0NCwxMCBAQAogCWRlcGVuZHMgb24gR1VTQSAmJiBDUFVfU0gzIHx8IChDUFVfU0g0ICYmICFDUFVfU0g0QSkKIAloZWxwCiAJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IHRoZSBrZXJuZWwgdG8gaW1wbGVtZW50IHNvbWUKLQkgIGF0b21pYyBvcGVyYXRpb25zIHVzaW5nIGEgc29mdHdhcmUgaW1wbGVtZW50aW9uIG9mIGxvYWQtbG9ja2VkLworCSAgYXRvbWljIG9wZXJhdGlvbnMgdXNpbmcgYSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBvZiBsb2FkLWxvY2tlZC8KIAkgIHN0b3JlLWNvbmRpdGlvbmFsIChMTFNDKS4gT24gbWFjaGluZXMgd2hpY2ggZG8gbm90IGhhdmUgaGFyZHdhcmUKIAkgIExMU0MsIHRoaXMgc2hvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG90aGVyIGFsdGVybmF0aXZlIG9mCi0JICBkaXNhYmxpbmcgaW5zdGVycnVwdHMgYXJvdW5kIHRoZSBhdG9taWMgc2VxdWVuY2UuCisJICBkaXNhYmxpbmcgaW50ZXJydXB0cyBhcm91bmQgdGhlIGF0b21pYyBzZXF1ZW5jZS4KIAogZW5kbWVudQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZTc5MzE4MS4uNjAyODM1NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjE2LDYgKzIxNiw5IEBACiAJcmV0dXJuIChvbGR2YWwgPiAoUldfTE9DS19CSUFTIC0gMSkpOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCAwNzQ3ZmFiLi42ZDk0NzI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBjOTBjN2U1Li45NmJlODM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC00MjUsNyArNDI1LDcgQEAKIAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZwppbmRleCBkMDAxYjQyLi45MGQ1ZmUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnCkBAIC0yMiwxNSArMjIsNiBAQAogY29uZmlnIFNUQUNLX0RFQlVHCiAJYm9vbCAiU3RhY2sgT3ZlcmZsb3cgRGV0ZWN0aW9uIFN1cHBvcnQiCiAKLWNvbmZpZyBERUJVR19QQUdFQUxMT0MKLQlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAhSElCRVJOQVRJT04KLQlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCi0JaGVscAotCSAgVW5tYXAgcGFnZXMgZnJvbSB0aGUga2VybmVsIGxpbmVhciBtYXBwaW5nIGFmdGVyIGZyZWVfcGFnZXMoKS4KLQkgIFRoaXMgcmVzdWx0cyBpbiBhIGxhcmdlIHNsb3dkb3duLCBidXQgaGVscHMgdG8gZmluZCBjZXJ0YWluIHR5cGVzCi0JICBvZiBtZW1vcnkgY29ycnVwdGlvbnMuCi0KIGNvbmZpZyBNQ09VTlQKIAlib29sCiAJZGVwZW5kcyBvbiBTUEFSQzY0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tem9uZS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXpvbmUuaAppbmRleCBlYmY1OTg2Li5lOGM2NDg3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tem9uZS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW16b25lLmgKQEAgLTMsNiArMyw4IEBACiAKICNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCiBleHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTsKIAogI2RlZmluZSBOT0RFX0RBVEEobmlkKQkJKG5vZGVfZGF0YVtuaWRdKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCmluZGV4IGJmMmQ1MzIuLjQ2ZjkxYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmgKQEAgLTE3Nyw2ICsxNzcsOCBAQAogI2RlZmluZSBfX3Jhd193cml0ZV91bmxvY2socncpCWRvIHsgKHJ3KS0+bG9jayA9IDA7IH0gd2hpbGUoMCkKIAogI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MocncsIGZsYWdzKSAgIF9fcmF3X3JlYWRfbG9jayhydykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhydywgZmxhZ3MpICBfX3Jhd193cml0ZV9sb2NrKHJ3KQogCiAjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaAppbmRleCBjNGQyNzRkLi5mNmIyYjkyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oCkBAIC0yMTEsOSArMjExLDExIEBACiB9CiAKICNkZWZpbmUgX19yYXdfcmVhZF9sb2NrKHApCV9fcmVhZF9sb2NrKHApCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhwLCBmKSBfX3JlYWRfbG9jayhwKQogI2RlZmluZSBfX3Jhd19yZWFkX3RyeWxvY2socCkJX19yZWFkX3RyeWxvY2socCkKICNkZWZpbmUgX19yYXdfcmVhZF91bmxvY2socCkJX19yZWFkX3VubG9jayhwKQogI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrKHApCV9fd3JpdGVfbG9jayhwKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKHAsIGYpIF9fd3JpdGVfbG9jayhwKQogI2RlZmluZSBfX3Jhd193cml0ZV91bmxvY2socCkJX193cml0ZV91bmxvY2socCkKICNkZWZpbmUgX19yYXdfd3JpdGVfdHJ5bG9jayhwKQlfX3dyaXRlX3RyeWxvY2socCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IGE0NmMzYTIuLjNhMWI3YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTY4Niw3ICs2ODYsNyBAQAogCSAqIHBvaW50LgogCSAqCiAJICogVGhlcmUgdXNlZCB0byBiZSBlbm9ybW91cyBjb21wbGV4aXR5IHdydC4gdHJhbnNmZXJyaW5nCi0JICogb3ZlciBmcm9tIHRoZSBmaXJ3bWFyZSdzIHRyYXAgdGFibGUgdG8gdGhlIExpbnV4IGtlcm5lbCdzLgorCSAqIG92ZXIgZnJvbSB0aGUgZmlybXdhcmUncyB0cmFwIHRhYmxlIHRvIHRoZSBMaW51eCBrZXJuZWwncy4KIAkgKiBGb3IgZXhhbXBsZSwgdGhlcmUgd2FzIGEgY2hpY2tlbiAmIGVnZyBwcm9ibGVtIHdydC4gYnVpbGRpbmcKIAkgKiB0aGUgT0JQIHBhZ2UgdGFibGVzLCB5ZXQgbmVlZGluZyB0byBiZSBvbiB0aGUgTGludXgga2VybmVsCiAJICogdHJhcCB0YWJsZSAodG8gdHJhbnNsYXRlIFBBR0VfT0ZGU0VUIGFkZHJlc3NlcykgaW4gb3JkZXIgdG8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCBmNGJlZTM1Li4yODMwYjQxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC00NTUsNyArNDU1LDcgQEAKICAqLwogZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBhNzM5NTRiLi40MDQxZjk0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC01NjEsNyArNTYxLDcgQEAKICAqIFBhcmVudCAtLT4gICVvMCA9PSBjaGlsZHMgIHBpZCwgJW8xID09IDAKICAqIENoaWxkICAtLT4gICVvMCA9PSBwYXJlbnRzIHBpZCwgJW8xID09IDEKICAqLwotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKaW5kZXggNDM0MjI0ZS4uNDM0YmExMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKQEAgLTc1Nyw3ICs3NTcsNyBAQAogCXZvaWQgKCpwcm9jKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdm9pZCAqKTsKIAl1bnNpZ25lZCBjaGFyIGFkZHJfYnVmWzRdLCBuZXRtYXNrX2J1Zls0XTsKIAotCWlmIChkZXYtPm9wZW4gIT0gdW1sX25ldF9vcGVuKQorCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuICE9IHVtbF9uZXRfb3BlbikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwppbmRleCBkNDJmODI2Li5mOTM0MjI1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImxpbnV4L2tlcm5lbC5oIgogI2luY2x1ZGUgImxpbnV4L21vZHVsZS5oIgogI2luY2x1ZGUgImxpbnV4L2Jsa2Rldi5oIgorI2luY2x1ZGUgImxpbnV4L2F0YS5oIgogI2luY2x1ZGUgImxpbnV4L2hkcmVnLmgiCiAjaW5jbHVkZSAibGludXgvaW5pdC5oIgogI2luY2x1ZGUgImxpbnV4L2Nkcm9tLmgiCkBAIC0xMzA4LDE2ICsxMzA5LDE1IEBACiAJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHViZCAqdWJkX2RldiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCB1YmRfaWQgPSB7Ci0JCS5jeWxzCQk9IDAsCi0JCS5oZWFkcwkJPSAxMjgsCi0JCS5zZWN0b3JzCT0gMzIsCi0JfTsKKwl1MTYgdWJkX2lkW0FUQV9JRF9XT1JEU107CiAKIAlzd2l0Y2ggKGNtZCkgewogCQlzdHJ1Y3QgY2Ryb21fdm9sY3RybCB2b2x1bWU7CiAJY2FzZSBIRElPX0dFVF9JREVOVElUWToKLQkJdWJkX2lkLmN5bHMgPSB1YmRfZGV2LT5zaXplIC8gKDEyOCAqIDMyICogNTEyKTsKKwkJbWVtc2V0KCZ1YmRfaWQsIDAsIEFUQV9JRF9XT1JEUyAqIDIpOworCQl1YmRfaWRbQVRBX0lEX0NZTFNdCT0gdWJkX2Rldi0+c2l6ZSAvICgxMjggKiAzMiAqIDUxMik7CisJCXViZF9pZFtBVEFfSURfSEVBRFNdCT0gMTI4OworCQl1YmRfaWRbQVRBX0lEX1NFQ1RPUlNdCT0gMzI7CiAJCWlmKGNvcHlfdG9fdXNlcigoY2hhciBfX3VzZXIgKikgYXJnLCAoY2hhciAqKSAmdWJkX2lkLAogCQkJCSBzaXplb2YodWJkX2lkKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYTFjNmQwNy4uNGEyOGExNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJdXNlcnNwYWNlKCZjdXJyZW50LT50aHJlYWQucmVncy5yZWdzKTsKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAogCQl1bnNpZ25lZCBsb25nIHN0YWNrX3RvcCwgc3RydWN0IHRhc2tfc3RydWN0ICogcCwKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggYzRkZjcwNS4uYTQ2MjVjNyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc3lzY2FsbC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3N5c2NhbGwuYwpAQCAtMTI3LDcgKzEyNyw4IEBACiAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IHVtX2V4ZWN2ZShmaWxlbmFtZSwgYXJndiwgZW52cCk7CisJcmV0ID0gdW1fZXhlY3ZlKChjaGFyICopZmlsZW5hbWUsIChjaGFyIF9fdXNlciAqX191c2VyICopYXJndiwKKwkJCShjaGFyIF9fdXNlciAqX191c2VyICopIGVudnApOwogCXNldF9mcyhmcyk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TIGIvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TCmluZGV4IDAwZTVmNTIwLi5jNjI2MGRkIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3N5c19jYWxsX3RhYmxlLlMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TCkBAIC05LDYgKzksMTcgQEAKIAogI2RlZmluZSBvbGRfbW1hcCBvbGRfbW1hcF9pMzg2CiAKKyNkZWZpbmUgcHRyZWdzX2Zvcmsgc3lzX2ZvcmsKKyNkZWZpbmUgcHRyZWdzX2V4ZWN2ZSBzeXNfZXhlY3ZlCisjZGVmaW5lIHB0cmVnc19pb3BsIHN5c19pb3BsCisjZGVmaW5lIHB0cmVnc192bTg2b2xkIHN5c192bTg2b2xkCisjZGVmaW5lIHB0cmVnc19zaWdyZXR1cm4gc3lzX3NpZ3JldHVybgorI2RlZmluZSBwdHJlZ3NfY2xvbmUgc3lzX2Nsb25lCisjZGVmaW5lIHB0cmVnc192bTg2IHN5c192bTg2CisjZGVmaW5lIHB0cmVnc19ydF9zaWdyZXR1cm4gc3lzX3J0X3NpZ3JldHVybgorI2RlZmluZSBwdHJlZ3Nfc2lnYWx0c3RhY2sgc3lzX3NpZ2FsdHN0YWNrCisjZGVmaW5lIHB0cmVnc192Zm9yayBzeXNfdmZvcmsKKwogLnNlY3Rpb24gLnJvZGF0YSwiYSIKIAogI2luY2x1ZGUgIi4uLy4uL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggNzQ4ZTUwYS4uNWIyMTk2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0zNCw2ICszNCw4IEBACiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKKwlzZWxlY3QgSEFWRV9GVFJBQ0VfTk1JX0VOVEVSIGlmIERZTkFNSUNfRlRSQUNFCisJc2VsZWN0IEhBVkVfRlRSQUNFX1NZU0NBTExTCiAJc2VsZWN0IEhBVkVfS1ZNCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKQEAgLTExNDQsNyArMTE0Niw3IEBACiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAJLS0taGVscC0tLQogCSAgU3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgTlVNQSBOb2RlcyBhdmFpbGFibGUgb24gdGhlIHRhcmdldAotCSAgc3lzdGVtLiAgSW5jcmVhc2VzIG1lbW9yeSByZXNlcnZlZCB0byBhY2NvbW9kYXRlIHZhcmlvdXMgdGFibGVzLgorCSAgc3lzdGVtLiAgSW5jcmVhc2VzIG1lbW9yeSByZXNlcnZlZCB0byBhY2NvbW1vZGF0ZSB2YXJpb3VzIHRhYmxlcy4KIAogY29uZmlnIEhBVkVfQVJDSF9CT09UTUVNCiAJZGVmX2Jvb2wgeQpAQCAtMTMyMiw3ICsxMzI0LDcgQEAKIAkgIGFkZCB3cml0ZWJhY2sgZW50cmllcy4KIAogCSAgQ2FuIGJlIGRpc2FibGVkIHdpdGggZGlzYWJsZV9tdHJyX2NsZWFudXAgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0JICBUaGUgbGFyZ2VzdCBtdHJyIGVudHJ5IHNpemUgZm9yIGEgY29udGlub3VzIGJsb2NrIGNhbiBiZSBzZXQgd2l0aAorCSAgVGhlIGxhcmdlc3QgbXRyciBlbnRyeSBzaXplIGZvciBhIGNvbnRpbnVvdXMgYmxvY2sgY2FuIGJlIHNldCB3aXRoCiAJICBtdHJyX2NodW5rX3NpemUuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCkBAIC0xODM3LDggKzE4MzksOCBAQAogCiBjb25maWcgRE1BUgogCWJvb2wgIlN1cHBvcnQgZm9yIERNQSBSZW1hcHBpbmcgRGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFg4Nl82NCAmJiBQQ0lfTVNJICYmIEFDUEkgJiYgRVhQRVJJTUVOVEFMCi0JLS0taGVscC0tLQorCWRlcGVuZHMgb24gUENJX01TSSAmJiBBQ1BJICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKIAkgIERNQSByZW1hcHBpbmcgKERNQVIpIGRldmljZXMgc3VwcG9ydCBlbmFibGVzIGluZGVwZW5kZW50IGFkZHJlc3MKIAkgIHRyYW5zbGF0aW9ucyBmb3IgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgZnJvbSBkZXZpY2VzLgogCSAgVGhlc2UgRE1BIHJlbWFwcGluZyBkZXZpY2VzIGFyZSByZXBvcnRlZCB2aWEgQUNQSSB0YWJsZXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuZGVidWcgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCmluZGV4IGEzNDVjYjUuLmQ4MzU5ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwpAQCAtNzIsMTUgKzcyLDYgQEAKIAogCSAgVGhpcyBvcHRpb24gd2lsbCBzbG93IGRvd24gcHJvY2VzcyBjcmVhdGlvbiBzb21ld2hhdC4KIAotY29uZmlnIERFQlVHX1BBR0VBTExPQwotCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwotCS0tLWhlbHAtLS0KLQkgIFVubWFwIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyBhZnRlciBmcmVlX3BhZ2VzKCkuCi0JICBUaGlzIHJlc3VsdHMgaW4gYSBsYXJnZSBzbG93ZG93biwgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcwotCSAgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLgotCiBjb25maWcgREVCVUdfUEVSX0NQVV9NQVBTCiAJYm9vbCAiRGVidWcgYWNjZXNzIHRvIHBlcl9jcHUgbWFwcyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKaW5kZXggZmI3MzdjZS4uNjYzM2I2ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCkBAIC01Nyw2ICs1Nyw3IEBACiAjIEhvdyB0byBjb21waWxlIHRoZSAxNi1iaXQgY29kZS4gIE5vdGUgd2UgYWx3YXlzIGNvbXBpbGUgZm9yIC1tYXJjaD1pMzg2LAogIyB0aGF0IHdheSB3ZSBjYW4gY29tcGxhaW4gdG8gdGhlIHVzZXIgaWYgdGhlIENQVSBpcyBpbnN1ZmZpY2llbnQuCiBLQlVJTERfQ0ZMQUdTCTo9ICQoTElOVVhJTkNMVURFKSAtZyAtT3MgLURfU0VUVVAgLURfX0tFUk5FTF9fIFwKKwkJICAgLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkcgXAogCQkgICAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIFwKIAkJICAgLW1hcmNoPWkzODYgLW1yZWdwYXJtPTMgXAogCQkgICAtaW5jbHVkZSAkKHNyY3RyZWUpLyQoc3JjKS9jb2RlMTZnY2MuaCBcCkBAIC02Niw3ICs2Nyw3IEBACiAJCQkkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXVuaXQtYXQtYS10aW1lKSkgXAogCQkgICAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikgXAogCQkgICAkKGNhbGwgY2Mtb3B0aW9uLCAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0yKQotS0JVSUxEX0NGTEFHUyArPSAgICQoY2FsbCBjYy1vcHRpb24sLW0zMikKK0tCVUlMRF9DRkxBR1MJKz0gJChjYWxsIGNjLW9wdGlvbiwgLW0zMikKIEtCVUlMRF9BRkxBR1MJOj0gJChLQlVJTERfQ0ZMQUdTKSAtRF9fQVNTRU1CTFlfXwogCiAkKG9iaikvYnpJbWFnZTogYXNmbGFncy15ICA6PSAkKFNWR0FfTU9ERSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCAzY2E0YzE5Li42NTU1MWM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogCiBLQlVJTERfQ0ZMQUdTIDo9IC1tJChCSVRTKSAtRF9fS0VSTkVMX18gJChMSU5VWF9JTkNMVURFKSAtTzIKIEtCVUlMRF9DRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZQSUMKK0tCVUlMRF9DRkxBR1MgKz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkcKIGNmbGFncy0kKENPTkZJR19YODZfNjQpIDo9IC1tY21vZGVsPXNtYWxsCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLWZmcmVlc3RhbmRpbmcpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwppbmRleCBkYjBjODAzLi5hNTA1MjAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTgyOCw0ICs4MjgsNiBAQAogCS5xdWFkIHN5c19kdXAzCQkJLyogMzMwICovCiAJLnF1YWQgc3lzX3BpcGUyCiAJLnF1YWQgc3lzX2lub3RpZnlfaW5pdDEKKwkucXVhZCBjb21wYXRfc3lzX3ByZWFkdgorCS5xdWFkIGNvbXBhdF9zeXNfcHdyaXRldgogaWEzMl9zeXNjYWxsX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBiMzg5NGJmLi5lNTVkZmMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xMjYsNiArMTI2LDExIEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKTsKIGV4dGVybiBjb25zdCBpbnQgcm9kYXRhX3Rlc3RfZGF0YTsKK3ZvaWQgc2V0X2tlcm5lbF90ZXh0X3J3KHZvaWQpOwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9rZXJuZWxfdGV4dF9ydyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkgeyB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19ST0RBVEFfVEVTVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1bWFzay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1bWFzay5oCmluZGV4IGE3ZjNjNzUuLjYxYzg1MmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdW1hc2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVtYXNrLmgKQEAgLTMsOCArMyw2IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQogZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2NhbGxpbl9tYXNrOwogZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2NhbGxvdXRfbWFzazsKIGV4dGVybiBjcHVtYXNrX3Zhcl90IGNwdV9pbml0aWFsaXplZF9tYXNrOwpAQCAtMTIsMjEgKzEwLDUgQEAKIAogZXh0ZXJuIHZvaWQgc2V0dXBfY3B1X2xvY2FsX21hc2tzKHZvaWQpOwogCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7Ci1leHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKLWV4dGVybiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci0KLSNkZWZpbmUgY3B1X2NhbGxpbl9tYXNrCQkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9jYWxsaW5fbWFwKQotI2RlZmluZSBjcHVfY2FsbG91dF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2NhbGxvdXRfbWFwKQotI2RlZmluZSBjcHVfaW5pdGlhbGl6ZWRfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9pbml0aWFsaXplZCkKLSNkZWZpbmUgY3B1X3NpYmxpbmdfc2V0dXBfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9zaWJsaW5nX3NldHVwX21hcCkKLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2NwdV9sb2NhbF9tYXNrcyh2b2lkKSB7IH0KLQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9BU01fWDg2X0NQVU1BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCA2M2E3OWM3Li44MTkzN2E1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMTExLDYgKzExMSw4IEBACiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiAJRklYX1BBUkFWSVJUX0JPT1RNQVAsCiAjZW5kaWYKKwlGSVhfVEVYVF9QT0tFMCwJLyogcmVzZXJ2ZSAyIHBhZ2VzIGZvciB0ZXh0X3Bva2UoKSAqLworCUZJWF9URVhUX1BPS0UxLAogCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCiAjaWZkZWYgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKIAlGSVhfT0hDSTEzOTRfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggZGIyNGMyMi4uYmQyYzY1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTI4LDYgKzI4LDEzIEBACiAKICNlbmRpZgogCisvKiBGSVhNRTogSSBkb24ndCB3YW50IHRvIHN0YXkgaGFyZGNvZGVkICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorIyBkZWZpbmUgRlRSQUNFX1NZU0NBTExfTUFYICAgICAyOTYKKyNlbHNlCisjIGRlZmluZSBGVFJBQ0VfU1lTQ0FMTF9NQVggICAgIDMzMworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCiAjZGVmaW5lIE1DT1VOVF9BRERSCQkoKGxvbmcpKG1jb3VudCkpCiAjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUJNSAvKiBzaXplb2YgbWNvdW50IGNhbGwgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggYTAzMDFiZi4uYjUxYTFlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTg5LDEyICs4OSw0MCBAQAogLyogTVNJIGFyY2ggaG9vayAqLwogI2RlZmluZSBhcmNoX3NldHVwX21zaV9pcnFzIGFyY2hfc2V0dXBfbXNpX2lycXMKIAorI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTIChkbWFfb3BzLT5pc19waHlzKQorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19ETUFfQVBJX0RFQlVHKQorCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKSAgICAgICBcCisJICAgICAgICBkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKSAgICAgICAgIFwKKwkgICAgICAgIF9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAoKFBUUiktPkFERFJfTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpICAgICAgICAgXAorCSAgICAgICAgKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpICAgICAgICAgICBcCisJICAgICAgICAoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKKworI2Vsc2UKKworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkgICAgICAgZG1hX2FkZHJfdCBBRERSX05BTUVbMF07CisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkgdW5zaWduZWQgTEVOX05BTUVbMF07CisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKSAgc2l6ZW9mKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKSBcCisJICAgICAgICBkbyB7IGJyZWFrOyB9IHdoaWxlIChwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkpCisjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkgICAgICAgICAgICBzaXplb2YoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpIFwKKwkgICAgICAgIGRvIHsgYnJlYWs7IH0gd2hpbGUgKHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkpCisKKyNlbmRpZgorCiAjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KIAotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgaW5jbHVkZSAicGNpXzMyLmgiCi0jZWxzZQotIyBpbmNsdWRlICJwY2lfNjQuaCIKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjaW5jbHVkZSAicGNpXzY0LmgiCiAjZW5kaWYKIAogLyogaW1wbGVtZW50IHRoZSBwY2lfIERNQSBBUEkgaW4gdGVybXMgb2YgdGhlIGdlbmVyaWMgZGV2aWNlIGRtYV8gb25lICovCkBAIC0xMTIsMTEgKzE0MCw2IEBACiAJcmV0dXJuIHNkLT5ub2RlOwogfQogCi1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBfX3BjaWJ1c190b19jcHVtYXNrKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0JcmV0dXJuIG5vZGVfdG9fY3B1bWFzayhfX3BjaWJ1c190b19ub2RlKGJ1cykpOwotfQotCiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICoKIGNwdW1hc2tfb2ZfcGNpYnVzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjEyMTNhLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9QQ0lfMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9QQ0lfMzJfSAotCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLQotLyogRHluYW1pYyBETUEgbWFwcGluZyBzdHVmZi4KLSAqIGkzODYgaGFzIGV2ZXJ5dGhpbmcgbWFwcGVkIHN0YXRpY2FsbHkuCi0gKi8KLQotc3RydWN0IHBjaV9kZXY7Ci0KLS8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKLSAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKLSAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCi0gKi8KLSNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKLQotLyogcGNpX3VubWFwX3twYWdlLHNpbmdsZX0gaXMgYSBub3Agc28uLi4gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCWRtYV9hZGRyX3QgQUREUl9OQU1FWzBdOwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCXVuc2lnbmVkIExFTl9OQU1FWzBdOwotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJc2l6ZW9mKChQVFIpLT5BRERSX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKSBcCi0JZG8geyBicmVhazsgfSB3aGlsZSAocGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQlzaXplb2YoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpIFwKLQlkbyB7IGJyZWFrOyB9IHdoaWxlIChwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpKQotCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLQotI2VuZGlmIC8qIF9BU01fWDg2X1BDSV8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCmluZGV4IDRkYTIwNzkuLmFlNWU0MGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCkBAIC0yNCwyOCArMjQsNiBAQAogCiBleHRlcm4gdm9pZCBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0odm9pZCk7CiAKLS8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKLSAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKLSAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMKLSAqCi0gKiBPbiBBTUQ2NCBpdCBtb3N0bHkgZXF1YWxzLCBidXQgd2Ugc2V0IGl0IHRvIHplcm8gaWYgYSBoYXJkd2FyZQotICogSU9NTVUgKGdhcnQpIG9mIHNvdHdhcmUgSU9NTVUgKHN3aW90bGIpIGlzIGF2YWlsYWJsZS4KLSAqLwotI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTIChkbWFfb3BzLT5pc19waHlzKQotCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlcCi0JZG1hX2FkZHJfdCBBRERSX05BTUU7Ci0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCVwKLQlfX3UzMiBMRU5fTkFNRTsKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkJXAotCSgoUFRSKS0+QUREUl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJCVwKLQkoKChQVFIpLT5BRERSX05BTUUpID0gKFZBTCkpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCQlcCi0JKChQVFIpLT5MRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQkJXAotCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9YODZfUENJXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggYWU4NWE4ZC4uMzRjNTIzNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTk0LDcgKzk0LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlsb29wc19wZXJfamlmZnk7CiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIGNwdXMgc2hhcmluZyB0aGUgbGFzdCBsZXZlbCBjYWNoZTogKi8KLQljcHVtYXNrX3QJCWxsY19zaGFyZWRfbWFwOworCWNwdW1hc2tfdmFyX3QJCWxsY19zaGFyZWRfbWFwOwogI2VuZGlmCiAJLyogY3B1aWQgcmV0dXJuZWQgbWF4IGNvcmVzIHZhbHVlOiAqLwogCXUxNgkJCSB4ODZfbWF4X2NvcmVzOwpAQCAtNzM2LDYgKzczNiw3IEBACiBleHRlcm4gdm9pZCBtd2FpdF9pZGxlX3dpdGhfaGludHModW5zaWduZWQgbG9uZyBlYXgsIHVuc2lnbmVkIGxvbmcgZWN4KTsKIAogZXh0ZXJuIHZvaWQgc2VsZWN0X2lkbGVfcm91dGluZShjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworZXh0ZXJuIHZvaWQgaW5pdF9jMWVfbWFzayh2b2lkKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCWJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGU7CiBleHRlcm4gdW5zaWduZWQgbG9uZwkJaWRsZV9oYWx0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLWFiaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLWFiaS5oCmluZGV4IDhlMGY4ZDEuLjg2NzIzMDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS1hYmkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UtYWJpLmgKQEAgLTgwLDggKzgwLDYgQEAKIAogI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMzMJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLwogCi0jaWZkZWYgQ09ORklHX1g4Nl9QVFJBQ0VfQlRTCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIApAQCAtMTQwLDYgKzEzOCw1IEBACiAgICBCVFMgcmVjb3JkcyBhcmUgcmVhZCBmcm9tIG9sZGVzdCB0byBuZXdlc3QuCiAgICBSZXR1cm5zIG51bWJlciBvZiBCVFMgcmVjb3JkcyBkcmFpbmVkLgogKi8KLSNlbmRpZiAvKiBDT05GSUdfWDg2X1BUUkFDRV9CVFMgKi8KIAogI2VuZGlmIC8qIF9BU01fWDg2X1BUUkFDRV9BQklfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA0N2QwZTIxLi4xOWUwZDg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMjEsMTkgKzIxLDE5IEBACiBleHRlcm4gaW50IHNtcF9udW1fc2libGluZ3M7CiBleHRlcm4gdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwogCi1ERUNMQVJFX1BFUl9DUFUoY3B1bWFza190LCBjcHVfc2libGluZ19tYXApOwotREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X2NvcmVfbWFwKTsKK0RFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBjcHVfc2libGluZ19tYXApOworREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIGNwdV9jb3JlX21hcCk7CiBERUNMQVJFX1BFUl9DUFUodTE2LCBjcHVfbGxjX2lkKTsKIERFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9udW1iZXIpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjcHVtYXNrICpjcHVfc2libGluZ19tYXNrKGludCBjcHUpCiB7Ci0JcmV0dXJuICZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KTsKKwlyZXR1cm4gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNwdW1hc2sgKmNwdV9jb3JlX21hc2soaW50IGNwdSkKIHsKLQlyZXR1cm4gJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpOworCXJldHVybiBwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KTsKIH0KIAogREVDTEFSRV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2NwdV90b19hcGljaWQpOwpAQCAtMTIxLDkgKzEyMSwxMCBAQAogCXNtcF9vcHMuc2VuZF9jYWxsX2Z1bmNfc2luZ2xlX2lwaShjcHUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKQorI2RlZmluZSBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzaworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCXNtcF9vcHMuc2VuZF9jYWxsX2Z1bmNfaXBpKCZtYXNrKTsKKwlzbXBfb3BzLnNlbmRfY2FsbF9mdW5jX2lwaShtYXNrKTsKIH0KIAogdm9pZCBjcHVfZGlzYWJsZV9jb21tb24odm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAzYTU2OTY2Li5lNWU2Y2FmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTI5NSw2ICsyOTUsOSBAQAogCQkgICAgIDogIittIiAocnctPmxvY2spIDogImkiIChSV19MT0NLX0JJQVMpIDogIm1lbW9yeSIpOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGRmOWQ1ZjcuLjg4MjBhNzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTQsNiArOTQsNyBAQAogI2RlZmluZSBUSUZfRk9SQ0VEX1RGCQkyNAkvKiB0cnVlIGlmIFRGIGluIGVmbGFncyBhcnRpZmljaWFsbHkgKi8KICNkZWZpbmUgVElGX0RFQlVHQ1RMTVNSCQkyNQkvKiB1c2VzIHRocmVhZF9zdHJ1Y3QuZGVidWdjdGxtc3IgKi8KICNkZWZpbmUgVElGX0RTX0FSRUFfTVNSCQkyNiAgICAgIC8qIHVzZXMgdGhyZWFkX3N0cnVjdC5kc19hcmVhX21zciAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9GVFJBQ0UJMjcJLyogZm9yIGZ0cmFjZSBzeXNjYWxsIGluc3RydW1lbnRhdGlvbiAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxIDw8IFRJRl9OT1RJRllfUkVTVU1FKQpAQCAtMTE1LDE1ICsxMTYsMTcgQEAKICNkZWZpbmUgX1RJRl9GT1JDRURfVEYJCSgxIDw8IFRJRl9GT1JDRURfVEYpCiAjZGVmaW5lIF9USUZfREVCVUdDVExNU1IJKDEgPDwgVElGX0RFQlVHQ1RMTVNSKQogI2RlZmluZSBfVElGX0RTX0FSRUFfTVNSCSgxIDw8IFRJRl9EU19BUkVBX01TUikKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0ZUUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9GVFJBQ0UpCiAKIC8qIHdvcmsgdG8gZG8gaW4gc3lzY2FsbF90cmFjZV9lbnRlcigpICovCiAjZGVmaW5lIF9USUZfV09SS19TWVNDQUxMX0VOVFJZCVwKLQkoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0VNVSB8IFwKKwkoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0VNVSB8IF9USUZfU1lTQ0FMTF9GVFJBQ0UgfAlcCiAJIF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0VDQ09NUCB8IF9USUZfU0lOR0xFU1RFUCkKIAogLyogd29yayB0byBkbyBpbiBzeXNjYWxsX3RyYWNlX2xlYXZlKCkgKi8KICNkZWZpbmUgX1RJRl9XT1JLX1NZU0NBTExfRVhJVAlcCi0JKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0lOR0xFU1RFUCkKKwkoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0FVRElUIHwgX1RJRl9TSU5HTEVTVEVQIHwJXAorCSBfVElGX1NZU0NBTExfRlRSQUNFKQogCiAvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkJCQkJCVwKQEAgLTEzMiw3ICsxMzUsNyBAQAogCSAgIF9USUZfU0lOR0xFU1RFUHxfVElGX1NFQ0NPTVB8X1RJRl9TWVNDQUxMX0VNVSkpCiAKIC8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1c2VyIHNwYWNlICovCi0jZGVmaW5lIF9USUZfQUxMV09SS19NQVNLICgweDAwMDBGRkZGICYgfl9USUZfU0VDQ09NUCkKKyNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sgKCgweDAwMDBGRkZGICYgfl9USUZfU0VDQ09NUCkgfCBfVElGX1NZU0NBTExfRlRSQUNFKQogCiAvKiBPbmx5IHVzZWQgZm9yIDY0IGJpdCAqLwogI2RlZmluZSBfVElGX0RPX05PVElGWV9NQVNLCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggNzQ0Mjk5Yy4uODkyYjExOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC00NCw5ICs0NCw2IEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAKLS8qIE1hcHBpbmdzIGJldHdlZW4gbm9kZSBudW1iZXIgYW5kIGNwdXMgb24gdGhhdCBub2RlLiAqLwotZXh0ZXJuIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2tfbWFwW107Ci0KIC8qIE1hcHBpbmdzIGJldHdlZW4gbG9naWNhbCBjcHUgbnVtYmVyIGFuZCBub2RlIG51bWJlciAqLwogZXh0ZXJuIGludCBjcHVfdG9fbm9kZV9tYXBbXTsKIApAQCAtNTcsMzAgKzU0LDggQEAKIH0KICNkZWZpbmUgZWFybHlfY3B1X3RvX25vZGUoY3B1KQljcHVfdG9fbm9kZShjcHUpCiAKLS8qIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCi0gKgotICogU2lkZSBub3RlOiB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIHJldHVybmVkIGNwdW1hc2sgb24gdGhlIHN0YWNrCi0gKiBzbyB3aXRoIGEgaGlnaCBOUl9DUFVTIGNvdW50LCBleGNlc3NpdmUgc3RhY2sgc3BhY2UgaXMgdXNlZC4gIFRoZQotICogY3B1bWFza19vZl9ub2RlIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLgotICovCi1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCi17Ci0JcmV0dXJuIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Ci19Ci0KLS8qIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuICovCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCi17Ci0JcmV0dXJuICZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKSB7IH0KLQogI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwogCi0vKiBNYXBwaW5ncyBiZXR3ZWVuIG5vZGUgbnVtYmVyIGFuZCBjcHVzIG9uIHRoYXQgbm9kZS4gKi8KLWV4dGVybiBjcHVtYXNrX3QgKm5vZGVfdG9fY3B1bWFza19tYXA7Ci0KIC8qIE1hcHBpbmdzIGJldHdlZW4gbG9naWNhbCBjcHUgbnVtYmVyIGFuZCBub2RlIG51bWJlciAqLwogREVDTEFSRV9FQVJMWV9QRVJfQ1BVKGludCwgeDg2X2NwdV90b19ub2RlX21hcCk7CiAKQEAgLTkxLDggKzY2LDYgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTCiBleHRlcm4gaW50IGNwdV90b19ub2RlKGludCBjcHUpOwogZXh0ZXJuIGludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KTsKLWV4dGVybiBjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSk7Ci1leHRlcm4gY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSk7CiAKICNlbHNlCS8qICFDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCiAKQEAgLTEwOCw0MiArODEsMzIgQEAKIAlyZXR1cm4gZWFybHlfcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpOwogfQogCi0vKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3B1bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLwotc3RhdGljIGlubGluZSBjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSkKLXsKLQlyZXR1cm4gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Ci19CisjZW5kaWYgLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KIAotLyogUmV0dXJucyBhIGJpdG1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4gKi8KLXN0YXRpYyBpbmxpbmUgY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKKy8qIE1hcHBpbmdzIGJldHdlZW4gbm9kZSBudW1iZXIgYW5kIGNwdXMgb24gdGhhdCBub2RlLiAqLworZXh0ZXJuIGNwdW1hc2tfdmFyX3Qgbm9kZV90b19jcHVtYXNrX21hcFtNQVhfTlVNTk9ERVNdOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpOworI2Vsc2UKKy8qIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjcHVtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuICovCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCiB7CiAJcmV0dXJuIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07CiB9Ci0KLSNlbmRpZiAvKiAhQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLworI2VuZGlmCiAKIGV4dGVybiB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCk7CiAKIC8qCi0gKiBSZXBsYWNlIGRlZmF1bHQgbm9kZV90b19jcHVtYXNrX3B0ciB3aXRoIG9wdGltaXplZCB2ZXJzaW9uCi0gKiBEZXByZWNhdGVkOiB1c2UgImNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrID0gY3B1bWFza19vZl9ub2RlKG5vZGUpIgotICovCi0jZGVmaW5lIG5vZGVfdG9fY3B1bWFza19wdHIodiwgbm9kZSkJCVwKLQkJY29uc3QgY3B1bWFza190ICp2ID0gY3B1bWFza19vZl9ub2RlKG5vZGUpCi0KLSNkZWZpbmUgbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KHYsIG5vZGUpCVwKLQkJCSAgIHYgPSBjcHVtYXNrX29mX25vZGUobm9kZSkKLQotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQotLyoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbm9kZSBjb250YWluaW5nIE5vZGUgJ25vZGUnLiBUaGlzCiAgKiBhcmNoaXRlY3R1cmUgaXMgZmxhdCwgc28gaXQgaXMgYSBwcmV0dHkgc2ltcGxlIGZ1bmN0aW9uIQogICovCiAjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpIChub2RlKQogCiAjZGVmaW5lIHBjaWJ1c190b19ub2RlKGJ1cykgX19wY2lidXNfdG9fbm9kZShidXMpCi0jZGVmaW5lIHBjaWJ1c190b19jcHVtYXNrKGJ1cykgX19wY2lidXNfdG9fY3B1bWFzayhidXMpCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiBleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X3BmbltdOwpAQCAtMjA5LDQwICsxNzIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSkKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSkKIHsKLQlyZXR1cm4gJmNwdV9vbmxpbmVfbWFwOwotfQotc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQotewotCXJldHVybiBjcHVfb25saW5lX21hcDsKKwlyZXR1cm4gY3B1X29ubGluZV9tYXNrOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKSB7IH0KIAotLyoKLSAqIFJlcGxhY2UgZGVmYXVsdCBub2RlX3RvX2NwdW1hc2tfcHRyIHdpdGggb3B0aW1pemVkIHZlcnNpb24KLSAqIERlcHJlY2F0ZWQ6IHVzZSAiY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVtYXNrX29mX25vZGUobm9kZSkiCi0gKi8KLSNkZWZpbmUgbm9kZV90b19jcHVtYXNrX3B0cih2LCBub2RlKQkJXAotCQljb25zdCBjcHVtYXNrX3QgKnYgPSBjcHVtYXNrX29mX25vZGUobm9kZSkKLQotI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodiwgbm9kZSkJXAotCQkJICAgdiA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKQogI2VuZGlmCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgogCi1leHRlcm4gY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKGludCBjcHUpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfY29yZWdyb3VwX21hc2soaW50IGNwdSk7CiAKICNpZmRlZiBFTkFCTEVfVE9QT19ERUZJTkVTCiAjZGVmaW5lIHRvcG9sb2d5X3BoeXNpY2FsX3BhY2thZ2VfaWQoY3B1KQkoY3B1X2RhdGEoY3B1KS5waHlzX3Byb2NfaWQpCiAjZGVmaW5lIHRvcG9sb2d5X2NvcmVfaWQoY3B1KQkJCShjcHVfZGF0YShjcHUpLmNwdV9jb3JlX2lkKQotI2RlZmluZSB0b3BvbG9neV9jb3JlX3NpYmxpbmdzKGNwdSkJCShwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSkKLSNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX3NpYmxpbmdzKGNwdSkJCShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKLSNkZWZpbmUgdG9wb2xvZ3lfY29yZV9jcHVtYXNrKGNwdSkJCSgmcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpCi0jZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSkJCSgmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCisjZGVmaW5lIHRvcG9sb2d5X2NvcmVfY3B1bWFzayhjcHUpCQkocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpCisjZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSkJCShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKIAogLyogaW5kaWNhdGVzIHRoYXQgcG9pbnRlcnMgdG8gdGhlIHRvcG9sb2d5IGNwdW1hc2tfdCBtYXBzIGFyZSB2YWxpZCAqLwogI2RlZmluZSBhcmNoX3Byb3ZpZGVzX3RvcG9sb2d5X3BvaW50ZXJzCQl5ZXMKQEAgLTI1Niw3ICsyMDMsNyBAQAogdm9pZCBzZXRfcGNpX2J1c19yZXNvdXJjZXNfYXJjaF9kZWZhdWx0KHN0cnVjdCBwY2lfYnVzICpiKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgbWNfY2FwYWJsZSgpCShjcHVzX3dlaWdodChwZXJfY3B1KGNwdV9jb3JlX21hcCwgMCkpICE9IG5yX2NwdV9pZHMpCisjZGVmaW5lIG1jX2NhcGFibGUoKQkoY3B1bWFza193ZWlnaHQoY3B1X2NvcmVfbWFzaygwKSkgIT0gbnJfY3B1X2lkcykKICNkZWZpbmUgc210X2NhcGFibGUoKQkJCShzbXBfbnVtX3NpYmxpbmdzID4gMSkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCmluZGV4IGYyYmJhNzguLjZlNzJkNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCkBAIC0zMzgsNiArMzM4LDggQEAKICNkZWZpbmUgX19OUl9kdXAzCQkzMzAKICNkZWZpbmUgX19OUl9waXBlMgkJMzMxCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMzIKKyNkZWZpbmUgX19OUl9wcmVhZHYJCTMzMworI2RlZmluZSBfX05SX3B3cml0ZXYJCTMzNAogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IGQyZTQxNWUuLmY4MTgyOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC02NTMsNiArNjUzLDEwIEBACiBfX1NZU0NBTEwoX19OUl9waXBlMiwgc3lzX3BpcGUyKQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCQkyOTQKIF9fU1lTQ0FMTChfX05SX2lub3RpZnlfaW5pdDEsIHN5c19pbm90aWZ5X2luaXQxKQorI2RlZmluZSBfX05SX3ByZWFkdgkJCQkyOTUKK19fU1lTQ0FMTChfX05SX3ByZWFkdiwgc3lzX3ByZWFkdikKKyNkZWZpbmUgX19OUl9wd3JpdGV2CQkJCTI5NgorX19TWVNDQUxMKF9fTlJfcHdyaXRldiwgc3lzX3B3cml0ZXYpCiAKIAogI2lmbmRlZiBfX05PX1NUVUJTCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCmluZGV4IDlmNGRmYmEuLmQzYTk4ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCkBAIC0xMSwxMSArMTEsMTMgQEAKICNpZm5kZWYgX0FTTV9YODZfVVZfVVZfSFVCX0gKICNkZWZpbmUgX0FTTV9YODZfVVZfVVZfSFVCX0gKIAorI2lmZGVmIENPTkZJR19YODZfNjQKICNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KIAogCiAvKgpAQCAtMzk3LDYgKzM5OSw3IEBACiAJCXV2X3dyaXRlX2xvY2FsX21tcjgodXZfaHViX2luZm8tPnNjaXIub2Zmc2V0LCB2YWx1ZSk7CiAJfQogfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdXZfc2V0X2NwdV9zY2lyX2JpdHMoaW50IGNwdSwgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKIAlpZiAodXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIuc3RhdGUgIT0gdmFsdWUpIHsKQEAgLTQwNSw0ICs0MDgsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1dl9odWJfc2VuZF9pcGkoaW50IHBub2RlLCBpbnQgYXBpY2lkLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwKKwkJCSgoYXBpY2lkICYgMHgzZikgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJCQkodmVjdG9yIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKTsKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOworfQorCisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogI2VuZGlmIC8qIF9BU01fWDg2X1VWX1VWX0hVQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKaW5kZXggZGQ2Mjc3OS4uZGI2OGFjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaApAQCAtMSwzICsxLDQgQEAKKwogLyoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yNDMsNiArMjQ0LDE1OCBAQAogI2RlZmluZSBVVkhfRVZFTlRfT0NDVVJSRUQwX0FMSUFTXzMyIDB4MDA1ZjAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJRyAweDYxYjAwVUwKKworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ncjBfdGxiX2ludDBfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2dyMF90bGJfaW50MF9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJRyAweDYxYjQwVUwKKworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ncjBfdGxiX2ludDFfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2dyMF90bGJfaW50MV9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJRyAweDYxZjAwVUwKKworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ncjFfdGxiX2ludDBfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2dyMV90bGJfaW50MF9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJRyAweDYxZjQwVUwKKworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19WRUNUT1JfU0hGVCAwCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1ZFQ1RPUl9NQVNLIDB4MDAwMDAwMDAwMDAwMDBmZlVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0RNX1NIRlQgOAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19ETV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19TVEFUVVNfU0hGVCAxMgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19TVEFUVVNfTUFTSyAweDAwMDAwMDAwMDAwMDEwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19QX1NIRlQgMTMKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfUF9NQVNLIDB4MDAwMDAwMDAwMDAwMjAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1RfU0hGVCAxNQorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19UX01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfTV9TSEZUIDE2CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX01fTUFTSyAweDAwMDAwMDAwMDAwMTAwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19BUElDX0lEX1NIRlQgMzIKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfQVBJQ19JRF9NQVNLIDB4ZmZmZmZmZmYwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9ncjFfdGxiX2ludDFfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2dyMV90bGJfaW50MV9jb25maWdfcyB7CisJdW5zaWduZWQgbG9uZwl2ZWN0b3JfICA6ICA4OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRtICAgICAgIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlzdGF0dXMgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXAgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNCAgOiAgMTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwl0ICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCW0gICAgICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xN18zMTogMTU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYXBpY19pZCAgOiAzMjsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX0lOVF9DTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogI2RlZmluZSBVVkhfSU5UX0NNUEIgMHgyMjA4MFVMCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYzYxMWFkNi4uMTQ1Y2NlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtNjYsNyArNjYsOCBAQAogb2JqLXkJCQkJKz0gYXBpYy8KIG9iai0kKENPTkZJR19YODZfUkVCT09URklYVVBTKQkrPSByZWJvb3RfZml4dXBzXzMyLm8KIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KLW9iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCitvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSBmdHJhY2Uubworb2JqLSQoQ09ORklHX0ZUUkFDRV9TWVNDQUxMUykJKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19LRVhFQykJCSs9IG1hY2hpbmVfa2V4ZWNfJChCSVRTKS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSByZWxvY2F0ZV9rZXJuZWxfJChCSVRTKS5vIGNyYXNoLm8KIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wXyQoQklUUykubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCA0YzgwZjE1Li5mNTc2NTg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTEyLDcgKzEzLDkgQEAKICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKICNkZWZpbmUgTUFYX1BBVENIX0xFTiAoMjU1LTEpCiAKQEAgLTIyNiw2ICsyMjksNyBAQAogewogCXU4ICoqcHRyOwogCisJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJZm9yIChwdHIgPSBzdGFydDsgcHRyIDwgZW5kOyBwdHIrKykgewogCQlpZiAoKnB0ciA8IHRleHQpCiAJCQljb250aW51ZTsKQEAgLTIzNCw2ICsyMzgsNyBAQAogCQkvKiB0dXJuIERTIHNlZ21lbnQgb3ZlcnJpZGUgcHJlZml4IGludG8gbG9jayBwcmVmaXggKi8KIAkJdGV4dF9wb2tlKCpwdHIsICgodW5zaWduZWQgY2hhciBbXSl7MHhmMH0pLCAxKTsKIAl9OworCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsdGVybmF0aXZlc19zbXBfdW5sb2NrKHU4ICoqc3RhcnQsIHU4ICoqZW5kLCB1OCAqdGV4dCwgdTggKnRleHRfZW5kKQpAQCAtMjQzLDYgKzI0OCw3IEBACiAJaWYgKG5vcmVwbGFjZV9zbXApCiAJCXJldHVybjsKIAorCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCWZvciAocHRyID0gc3RhcnQ7IHB0ciA8IGVuZDsgcHRyKyspIHsKIAkJaWYgKCpwdHIgPCB0ZXh0KQogCQkJY29udGludWU7CkBAIC0yNTEsNiArMjU3LDcgQEAKIAkJLyogdHVybiBsb2NrIHByZWZpeCBpbnRvIERTIHNlZ21lbnQgb3ZlcnJpZGUgcHJlZml4ICovCiAJCXRleHRfcG9rZSgqcHRyLCAoKHVuc2lnbmVkIGNoYXIgW10pezB4M0V9KSwgMSk7CiAJfTsKKwltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOwogfQogCiBzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgewpAQCAtNTAwLDE1ICs1MDcsMTYgQEAKICAqIEl0IG1lYW5zIHRoZSBzaXplIG11c3QgYmUgd3JpdGFibGUgYXRvbWljYWxseSBhbmQgdGhlIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkCiAgKiBpbiBhIHdheSB0aGF0IHBlcm1pdHMgYW4gYXRvbWljIHdyaXRlLiBJdCBhbHNvIG1ha2VzIHN1cmUgd2UgZml0IG9uIGEgc2luZ2xlCiAgKiBwYWdlLgorICoKKyAqIE5vdGU6IE11c3QgYmUgY2FsbGVkIHVuZGVyIHRleHRfbXV0ZXguCiAgKi8KIHZvaWQgKl9fa3Byb2JlcyB0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY2hhciAqdmFkZHI7Ci0JaW50IG5yX3BhZ2VzID0gMjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbMl07CiAJaW50IGk7CiAKLQltaWdodF9zbGVlcCgpOwogCWlmICghY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkgewogCQlwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKIAkJcGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciArIFBBR0VfU0laRSk7CkBAIC01MTgsMTggKzUyNiwyMSBAQAogCQlwYWdlc1sxXSA9IHZpcnRfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKTsKIAl9CiAJQlVHX09OKCFwYWdlc1swXSk7Ci0JaWYgKCFwYWdlc1sxXSkKLQkJbnJfcGFnZXMgPSAxOwotCXZhZGRyID0gdm1hcChwYWdlcywgbnJfcGFnZXMsIFZNX01BUCwgUEFHRV9LRVJORUwpOwotCUJVR19PTighdmFkZHIpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNldF9maXhtYXAoRklYX1RFWFRfUE9LRTAsIHBhZ2VfdG9fcGh5cyhwYWdlc1swXSkpOworCWlmIChwYWdlc1sxXSkKKwkJc2V0X2ZpeG1hcChGSVhfVEVYVF9QT0tFMSwgcGFnZV90b19waHlzKHBhZ2VzWzFdKSk7CisJdmFkZHIgPSAoY2hhciAqKWZpeF90b192aXJ0KEZJWF9URVhUX1BPS0UwKTsKIAltZW1jcHkoJnZhZGRyWyh1bnNpZ25lZCBsb25nKWFkZHIgJiB+UEFHRV9NQVNLXSwgb3Bjb2RlLCBsZW4pOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQl2dW5tYXAodmFkZHIpOworCWNsZWFyX2ZpeG1hcChGSVhfVEVYVF9QT0tFMCk7CisJaWYgKHBhZ2VzWzFdKQorCQljbGVhcl9maXhtYXAoRklYX1RFWFRfUE9LRTEpOworCWxvY2FsX2ZsdXNoX3RsYigpOwogCXN5bmNfY29yZSgpOwogCS8qIENvdWxkIGFsc28gZG8gYSBDTEZMVVNIIGhlcmUgdG8gc3BlZWQgdXAgQ1BVIHJlY292ZXJ5OyBidXQKIAkgICB0aGF0IGNhdXNlcyBoYW5ncyBvbiBzb21lIFZJQSBDUFVzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKIAkJQlVHX09OKCgoY2hhciAqKWFkZHIpW2ldICE9ICgoY2hhciAqKW9wY29kZSlbaV0pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gYWRkcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCBjNTk2MmZlLi5hOTdkYjk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0xOTI4LDYgKzE5MjgsMTIgQEAKIAlyZXR1cm4gcGFkZHI7CiB9CiAKK3N0YXRpYyBpbnQgYW1kX2lvbW11X2RvbWFpbl9oYXNfY2FwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBjYXApCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3BzIGFtZF9pb21tdV9vcHMgPSB7CiAJLmRvbWFpbl9pbml0ID0gYW1kX2lvbW11X2RvbWFpbl9pbml0LAogCS5kb21haW5fZGVzdHJveSA9IGFtZF9pb21tdV9kb21haW5fZGVzdHJveSwKQEAgLTE5MzYsNSArMTk0Miw2IEBACiAJLm1hcCA9IGFtZF9pb21tdV9tYXBfcmFuZ2UsCiAJLnVubWFwID0gYW1kX2lvbW11X3VubWFwX3JhbmdlLAogCS5pb3ZhX3RvX3BoeXMgPSBhbWRfaW9tbXVfaW92YV90b19waHlzLAorCS5kb21haW5faGFzX2NhcCA9IGFtZF9pb21tdV9kb21haW5faGFzX2NhcCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKaW5kZXggZDgwNmVjYS4uNjc2Y2RhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKQEAgLTI2LDEyICsyNiwxMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgY29uc3QgY3B1bWFza190ICpiaWdzbXBfdGFyZ2V0X2NwdXModm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYmlnc21wX3RhcmdldF9jcHVzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiAmY3B1X29ubGluZV9tYXA7CisJcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKICNlbHNlCi0JcmV0dXJuICZjcHVtYXNrX29mX2NwdSgwKTsKKwlyZXR1cm4gY3B1bWFza19vZigwKTsKICNlbmRpZgogfQogCkBAIC0xMTgsOSArMTE4LDkgQEAKIH0KIAogLyogQXMgd2UgYXJlIHVzaW5nIHNpbmdsZSBDUFUgYXMgZGVzdGluYXRpb24sIHBpY2sgb25seSBvbmUgQ1BVIGhlcmUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmlnc21wX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCitzdGF0aWMgdW5zaWduZWQgaW50IGJpZ3NtcF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCiB7Ci0JcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoZmlyc3RfY3B1KCpjcHVtYXNrKSk7CisJcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1bWFza19maXJzdChjcHVtYXNrKSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmlnc21wX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCkBAIC0xODgsMTAgKzE4OCwxMCBAQAogCXsgfSAvKiBOVUxMIGVudHJ5IHN0b3BzIERNSSBzY2FubmluZyAqLwogfTsKIAotc3RhdGljIHZvaWQgYmlnc21wX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCitzdGF0aWMgdm9pZCBiaWdzbXBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQogewotCWNwdXNfY2xlYXIoKnJldG1hc2spOwotCWNwdV9zZXQoY3B1LCAqcmV0bWFzayk7CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCByZXRtYXNrKTsKIH0KIAogc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKaW5kZXggMTk1ODhmMi4uMWMxMWI4MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCQlXQVJOKDEsICJDb21tYW5kIGZhaWxlZCwgc3RhdHVzID0gJXhcbiIsIG1pcF9zdGF0dXMpOwogfQogCi1zdGF0aWMgdm9pZCBlczcwMDBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKK3N0YXRpYyB2b2lkIGVzNzAwMF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCiB7CiAJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKIAkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdApAQCAtNDIwLDcgKzQyMCw4IEBACiAJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCiAJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KIAkgKi8KLQkqcmV0bWFzayA9IChjcHVtYXNrX3QpeyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfYml0cyhyZXRtYXNrKVswXSA9IEFQSUNfQUxMX0NQVVM7CiB9CiAKIApAQCAtNDU1LDE0ICs0NTYsMTQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXNfY2x1c3Rlcih2b2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp0YXJnZXRfY3B1c19jbHVzdGVyKHZvaWQpCiB7Ci0JcmV0dXJuICZDUFVfTUFTS19BTEw7CisJcmV0dXJuIGNwdV9hbGxfbWFzazsKIH0KIAotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqZXM3MDAwX3RhcmdldF9jcHVzKHZvaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmVzNzAwMF90YXJnZXRfY3B1cyh2b2lkKQogewotCXJldHVybiAmY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwpAQCAtNTE3LDcgKzUxOCw3IEBACiAJICAiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuIFVzaW5nICVkIEkvTyBBUElDcywgdGFyZ2V0IGNwdXMgJWx4XG4iLAogCQkoYXBpY192ZXJzaW9uW2FwaWNdID09IDB4MTQpID8KIAkJCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLAotCQlucl9pb2FwaWNzLCBjcHVzX2FkZHIoKmVzNzAwMF90YXJnZXRfY3B1cygpKVswXSk7CisJCW5yX2lvYXBpY3MsIGNwdW1hc2tfYml0cyhlczcwMDBfdGFyZ2V0X2NwdXMoKSlbMF0pOwogfQogCiBzdGF0aWMgaW50IGVzNzAwMF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCkBAIC01NzIsNyArNTczLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBlczcwMDBfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXM3MDAwX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgcm91bmQgPSAwOwogCWludCBjcHUsIHVuaW5pdGlhbGl6ZWRfdmFyKGFwaWNpZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCmluZGV4IGJkZmFkODAuLmQ2YmQ2MjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgdW5rbm93bl9ubWlfcGFuaWM7CiBpbnQgbm1pX3dhdGNoZG9nX2VuYWJsZWQ7CiAKLXN0YXRpYyBjcHVtYXNrX3QgYmFja3RyYWNlX21hc2sgPSBDUFVfTUFTS19OT05FOworc3RhdGljIGNwdW1hc2tfdmFyX3QgYmFja3RyYWNlX21hc2s7CiAKIC8qIG5taV9hY3RpdmU6CiAgKiA+MDogdGhlIGxhcGljIE5NSSB3YXRjaGRvZyBpcyBhY3RpdmUsIGJ1dCBjYW4gYmUgZGlzYWJsZWQKQEAgLTEzOCw2ICsxMzgsNyBAQAogCWlmICghcHJldl9ubWlfY291bnQpCiAJCWdvdG8gZXJyb3I7CiAKKwlhbGxvY19jcHVtYXNrX3ZhcigmYmFja3RyYWNlX21hc2ssIEdGUF9LRVJORUwpOwogCXByaW50ayhLRVJOX0lORk8gIlRlc3RpbmcgTk1JIHdhdGNoZG9nIC4uLiAiKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTQxMywxNCArNDE0LDE0IEBACiAJCXRvdWNoZWQgPSAxOwogCX0KIAotCWlmIChjcHVfaXNzZXQoY3B1LCBiYWNrdHJhY2VfbWFzaykpIHsKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGJhY2t0cmFjZV9tYXNrKSkgewogCQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOwkvKiBTZXJpYWxpc2UgdGhlIHByaW50a3MgKi8KIAogCQlzcGluX2xvY2soJmxvY2spOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJOTUkgYmFja3RyYWNlIGZvciBjcHUgJWRcbiIsIGNwdSk7CiAJCWR1bXBfc3RhY2soKTsKIAkJc3Bpbl91bmxvY2soJmxvY2spOwotCQljcHVfY2xlYXIoY3B1LCBiYWNrdHJhY2VfbWFzayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgYmFja3RyYWNlX21hc2spOwogCX0KIAogCS8qIENvdWxkIGNoZWNrIG9vcHNfaW5fcHJvZ3Jlc3MgaGVyZSB0b28sIGJ1dCBpdCdzIHNhZmVyIG5vdCB0byAqLwpAQCAtNTU0LDEwICs1NTUsMTAgQEAKIHsKIAlpbnQgaTsKIAotCWJhY2t0cmFjZV9tYXNrID0gY3B1X29ubGluZV9tYXA7CisJY3B1bWFza19jb3B5KGJhY2t0cmFjZV9tYXNrLCBjcHVfb25saW5lX21hc2spOwogCS8qIFdhaXQgZm9yIHVwIHRvIDEwIHNlY29uZHMgZm9yIGFsbCBDUFVzIHRvIGRvIHRoZSBiYWNrdHJhY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAgKiAxMDAwOyBpKyspIHsKLQkJaWYgKGNwdXNfZW1wdHkoYmFja3RyYWNlX21hc2spKQorCQlpZiAoY3B1bWFza19lbXB0eShiYWNrdHJhY2VfbWFzaykpCiAJCQlicmVhazsKIAkJbWRlbGF5KDEpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCmluZGV4IGJhMmZjNjQuLjUzM2U1OWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwpAQCAtMzM0LDkgKzMzNCw5IEBACiAJY2xlYXJfbG9jYWxfQVBJQygpOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNwdW1hc2tfdCAqbnVtYXFfdGFyZ2V0X2NwdXModm9pZCkKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm51bWFxX3RhcmdldF9jcHVzKHZvaWQpCiB7Ci0JcmV0dXJuICZDUFVfTUFTS19BTEw7CisJcmV0dXJuIGNwdV9hbGxfbWFzazsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCkBAIC00MjcsNyArNDI3LDcgQEAKICAqIFdlIHVzZSBwaHlzaWNhbCBhcGljaWRzIGhlcmUsIG5vdCBsb2dpY2FsLCBzbyBqdXN0IHJldHVybiB0aGUgZGVmYXVsdAogICogcGh5c2ljYWwgYnJvYWRjYXN0IHRvIHN0b3AgcGVvcGxlIGZyb20gYnJlYWtpbmcgdXMKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtYXFfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtYXFfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQogewogCXJldHVybiAweDBGOwogfQpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcmV0dXJuIGZvdW5kX251bWFxOwogfQogCi1zdGF0aWMgdm9pZCBudW1hcV92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgY3B1bWFza190ICpyZXRtYXNrKQorc3RhdGljIHZvaWQgbnVtYXFfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQogewogCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCiAJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKQEAgLTQ3Miw3ICs0NzIsOCBAQAogCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQogCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCiAJICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX2JpdHMocmV0bWFzaylbMF0gPSBBUElDX0FMTF9DUFVTOwogfQogCiBzdGF0aWMgdm9pZCBudW1hcV9zZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCmluZGV4IDE0MWM5OWEuLjAxZWRhMmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYwpAQCAtODMsNyArODMsOCBAQAogCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQogCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCiAJICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUyB9IH07CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX2JpdHMocmV0bWFzaylbMF0gPSBBUElDX0FMTF9DUFVTOwogfQogCiAvKiBzaG91bGQgYmUgY2FsbGVkIGxhc3QuICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3N1bW1pdF8zMi5jCmluZGV4IGFhYzUyZmEuLjljZmUxZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3N1bW1pdF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3N1bW1pdF8zMi5jCkBAIC01MywyMyArNTMsMTkgQEAKIAlyZXR1cm4gKHggPj4gMjQpICYgMHhGRjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN1bW1pdF9zZW5kX0lQSV9tYXNrKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgaW50IHZlY3RvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdW1taXRfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3RvcikKIHsKIAlkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfbG9naWNhbChtYXNrLCB2ZWN0b3IpOwogfQogCiBzdGF0aWMgdm9pZCBzdW1taXRfc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQogewotCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7Ci0KLQlpZiAoIWNwdXNfZW1wdHkobWFzaykpCi0JCXN1bW1pdF9zZW5kX0lQSV9tYXNrKCZtYXNrLCB2ZWN0b3IpOworCWRlZmF1bHRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmX2xvZ2ljYWwoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwogfQogCiBzdGF0aWMgdm9pZCBzdW1taXRfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCiB7Ci0Jc3VtbWl0X3NlbmRfSVBJX21hc2soJmNwdV9vbmxpbmVfbWFwLCB2ZWN0b3IpOworCXN1bW1pdF9zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKIH0KIAogI2luY2x1ZGUgPGFzbS90c2MuaD4KQEAgLTE4NiwxMyArMTgyLDEzIEBACiAKICNkZWZpbmUgU1VNTUlUX0FQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9DTFVTVEVSKQogCi1zdGF0aWMgY29uc3QgY3B1bWFza190ICpzdW1taXRfdGFyZ2V0X2NwdXModm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqc3VtbWl0X3RhcmdldF9jcHVzKHZvaWQpCiB7CiAJLyogQ1BVX01BU0tfQUxMICgweGZmKSBoYXMgdW5kZWZpbmVkIGJlaGF2aW91ciB3aXRoCiAJICogZGVzdF9Mb3dlc3RQcmlvIG1vZGUgbG9naWNhbCBjbHVzdGVyZWQgYXBpYyBpbnRlcnJ1cHQgcm91dGluZwogCSAqIEp1c3Qgc3RhcnQgb24gY3B1IDAuICBJUlEgYmFsYW5jaW5nIHdpbGwgc3ByZWFkIGxvYWQKIAkgKi8KLQlyZXR1cm4gJmNwdW1hc2tfb2ZfY3B1KDApOworCXJldHVybiBjcHVtYXNrX29mKDApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdW1taXRfY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCkBAIC0yODksNyArMjg1LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBzdW1taXRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VtbWl0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgcm91bmQgPSAwOwogCWludCBjcHUsIGFwaWNpZCA9IDA7CkBAIC0zNDYsNyArMzQyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3VtbWl0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCitzdGF0aWMgdm9pZCBzdW1taXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQogewogCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCiAJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKQEAgLTM1Niw3ICszNTIsOCBAQAogCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQogCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCiAJICovCi0JKnJldG1hc2sgPSAoY3B1bWFza190KXsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX2JpdHMocmV0bWFzaylbMF0gPSBBUElDX0FMTF9DUFVTOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl9TVU1NSVRfTlVNQQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggMWJkNmRhMS4uMTI0ODMxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0xMTgsMTcgKzExOCwxMiBAQAogCiBzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9vbmUoaW50IGNwdSwgaW50IHZlY3RvcikKIHsKLQl1bnNpZ25lZCBsb25nIHZhbCwgYXBpY2lkOworCXVuc2lnbmVkIGxvbmcgYXBpY2lkOwogCWludCBwbm9kZTsKIAogCWFwaWNpZCA9IHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CiAJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUoYXBpY2lkKTsKLQotCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8Ci0JICAgICAgKGFwaWNpZCA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKLQkgICAgICAodmVjdG9yIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKTsKLQotCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7CisJdXZfaHViX3NlbmRfaXBpKHBub2RlLCBhcGljaWQsIHZlY3Rvcik7CiB9CiAKIHN0YXRpYyB2b2lkIHV2X3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggYWM3NzgzYS4uNDllMDkzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAgKglAZXJyOiBBUE0gQklPUyByZXR1cm4gY29kZQogICoKICAqCVdyaXRlIGEgbWVhbmluZ2Z1bCBsb2cgZW50cnkgdG8gdGhlIGtlcm5lbCBsb2cgaW4gdGhlIGV2ZW50IG9mCi0gKglhbiBBUE0gZXJyb3IuCisgKglhbiBBUE0gZXJyb3IuICBOb3RlIHRoYXQgdGhpcyBhbHNvIGhhbmRsZXMgKG5lZ2F0aXZlKSBrZXJuZWwgZXJyb3JzLgogICovCiAKIHN0YXRpYyB2b2lkIGFwbV9lcnJvcihjaGFyICpzdHIsIGludCBlcnIpCkBAIC00NzgsNDMgKzQ3OCwxNCBAQAogCQkJYnJlYWs7CiAJaWYgKGkgPCBFUlJPUl9DT1VOVCkKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJhcG06ICVzOiAlc1xuIiwgc3RyLCBlcnJvcl90YWJsZVtpXS5tc2cpOworCWVsc2UgaWYgKGVyciA8IDApCisJCXByaW50ayhLRVJOX05PVElDRSAiYXBtOiAlczogbGludXggZXJyb3IgY29kZSAlaVxuIiwgc3RyLCBlcnIpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJhcG06ICVzOiB1bmtub3duIGVycm9yIGNvZGUgJSMyLjJ4XG4iLAogCQkgICAgICAgc3RyLCBlcnIpOwogfQogCiAvKgotICogTG9jayBBUE0gZnVuY3Rpb25hbGl0eSB0byBwaHlzaWNhbCBDUFUgMAotICovCi0KLSNpZmRlZiBDT05GSUdfU01QCi0KLXN0YXRpYyBjcHVtYXNrX3QgYXBtX3NhdmVfY3B1cyh2b2lkKQotewotCWNwdW1hc2tfdCB4ID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCS8qIFNvbWUgYmlvc2VzIGRvbid0IGxpa2UgYmVpbmcgY2FsbGVkIGZyb20gQ1BVICE9IDAgKi8KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KDApKTsKLQlCVUdfT04oc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDApOwotCXJldHVybiB4OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBtX3Jlc3RvcmVfY3B1cyhjcHVtYXNrX3QgbWFzaykKLXsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG1hc2spOwotfQotCi0jZWxzZQotCi0vKgotICoJTm8gQ1BVIGxvY2tkb3duIG5lZWRlZCBvbiBhIHVuaXByb2Nlc3NvcgotICovCi0KLSNkZWZpbmUgYXBtX3NhdmVfY3B1cygpCQkoY3VycmVudC0+Y3B1c19hbGxvd2VkKQotI2RlZmluZSBhcG1fcmVzdG9yZV9jcHVzKHgpCSh2b2lkKSh4KQotCi0jZW5kaWYKLQotLyoKICAqIFRoZXNlIGFyZSB0aGUgYWN0dWFsIEJJT1MgY2FsbHMuICBEZXBlbmRpbmcgb24gQVBNX1pFUk9fU0VHUyBhbmQKICAqIGFwbV9pbmZvLmFsbG93X2ludHMsIHdlIGFyZSBiZWluZyByZWFsbHkgcGFyYW5vaWQgaGVyZSEgIE5vdCBvbmx5CiAgKiBhcmUgaW50ZXJydXB0cyBkaXNhYmxlZCwgYnV0IGFsbCB0aGUgc2VnbWVudCByZWdpc3RlcnMgKGV4Y2VwdCBTUykKQEAgLTU2OCwxNiArNTM5LDIzIEBACiAjCWRlZmluZSBBUE1fRE9fUkVTVE9SRV9TRUdTCiAjZW5kaWYKIAorc3RydWN0IGFwbV9iaW9zX2NhbGwgeworCXUzMiBmdW5jOworCS8qIEluIGFuZCBvdXQgKi8KKwl1MzIgZWJ4OworCXUzMiBlY3g7CisJLyogT3V0IG9ubHkgKi8KKwl1MzIgZWF4OworCXUzMiBlZHg7CisJdTMyIGVzaTsKKworCS8qIEVycm9yOiAtRU5PTUVNLCBvciBiaXRzIDgtMTUgb2YgZWF4ICovCisJaW50IGVycjsKK307CisKIC8qKgotICoJYXBtX2Jpb3NfY2FsbAktCU1ha2UgYW4gQVBNIEJJT1MgMzJiaXQgY2FsbAotICoJQGZ1bmM6IEFQTSBmdW5jdGlvbiB0byBleGVjdXRlCi0gKglAZWJ4X2luOiBFQlggcmVnaXN0ZXIgZm9yIGNhbGwgZW50cnkKLSAqCUBlY3hfaW46IEVDWCByZWdpc3RlciBmb3IgY2FsbCBlbnRyeQotICoJQGVheDogRUFYIHJlZ2lzdGVyIHJldHVybgotICoJQGVieDogRUJYIHJlZ2lzdGVyIHJldHVybgotICoJQGVjeDogRUNYIHJlZ2lzdGVyIHJldHVybgotICoJQGVkeDogRURYIHJlZ2lzdGVyIHJldHVybgotICoJQGVzaTogRVNJIHJlZ2lzdGVyIHJldHVybgorICoJX19hcG1fYmlvc19jYWxsIC0gTWFrZSBhbiBBUE0gQklPUyAzMmJpdCBjYWxsCisgKglAX2NhbGw6IHBvaW50ZXIgdG8gc3RydWN0IGFwbV9iaW9zX2NhbGwuCiAgKgogICoJTWFrZSBhbiBBUE0gY2FsbCB1c2luZyB0aGUgMzJiaXQgcHJvdGVjdGVkIG1vZGUgaW50ZXJmYWNlLiBUaGUKICAqCWNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Iga25vd2luZyBpZiBBUE0gQklPUyBpcyBjb25maWd1cmVkIGFuZApAQCAtNTg2LDM1ICs1NjQsMTA5IEBACiAgKglmbGFnIGlzIGxvYWRlZCBpbnRvIEFMLiAgSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZW4gdGhlIGVycm9yCiAgKgljb2RlIGlzIHJldHVybmVkIGluIEFIIChiaXRzIDgtMTUgb2YgZWF4KSBhbmQgdGhpcyBmdW5jdGlvbgogICoJcmV0dXJucyBub24temVyby4KKyAqCisgKglOb3RlOiB0aGlzIG1ha2VzIHRoZSBjYWxsIG9uIHRoZSBjdXJyZW50IENQVS4KICAqLwotCi1zdGF0aWMgdTggYXBtX2Jpb3NfY2FsbCh1MzIgZnVuYywgdTMyIGVieF9pbiwgdTMyIGVjeF9pbiwKLQl1MzIgKmVheCwgdTMyICplYngsIHUzMiAqZWN4LCB1MzIgKmVkeCwgdTMyICplc2kpCitzdGF0aWMgbG9uZyBfX2FwbV9iaW9zX2NhbGwodm9pZCAqX2NhbGwpCiB7CiAJQVBNX0RFQ0xfU0VHUwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCWNwdW1hc2tfdAkJY3B1czsKIAlpbnQJCQljcHU7CiAJc3RydWN0IGRlc2Nfc3RydWN0CXNhdmVfZGVzY180MDsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QJKmdkdDsKLQotCWNwdXMgPSBhcG1fc2F2ZV9jcHVzKCk7CisJc3RydWN0IGFwbV9iaW9zX2NhbGwJKmNhbGwgPSBfY2FsbDsKIAogCWNwdSA9IGdldF9jcHUoKTsKKwlCVUdfT04oY3B1ICE9IDApOwogCWdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CiAJc2F2ZV9kZXNjXzQwID0gZ2R0WzB4NDAgLyA4XTsKIAlnZHRbMHg0MCAvIDhdID0gYmFkX2Jpb3NfZGVzYzsKIAogCWFwbV9pcnFfc2F2ZShmbGFncyk7CiAJQVBNX0RPX1NBVkVfU0VHUzsKLQlhcG1fYmlvc19jYWxsX2FzbShmdW5jLCBlYnhfaW4sIGVjeF9pbiwgZWF4LCBlYngsIGVjeCwgZWR4LCBlc2kpOworCWFwbV9iaW9zX2NhbGxfYXNtKGNhbGwtPmZ1bmMsIGNhbGwtPmVieCwgY2FsbC0+ZWN4LAorCQkJICAmY2FsbC0+ZWF4LCAmY2FsbC0+ZWJ4LCAmY2FsbC0+ZWN4LCAmY2FsbC0+ZWR4LAorCQkJICAmY2FsbC0+ZXNpKTsKIAlBUE1fRE9fUkVTVE9SRV9TRUdTOwogCWFwbV9pcnFfcmVzdG9yZShmbGFncyk7CiAJZ2R0WzB4NDAgLyA4XSA9IHNhdmVfZGVzY180MDsKIAlwdXRfY3B1KCk7Ci0JYXBtX3Jlc3RvcmVfY3B1cyhjcHVzKTsKIAotCXJldHVybiAqZWF4ICYgMHhmZjsKKwlyZXR1cm4gY2FsbC0+ZWF4ICYgMHhmZjsKK30KKworLyogUnVuIF9fYXBtX2Jpb3NfY2FsbCBvciBfX2FwbV9iaW9zX2NhbGxfc2ltcGxlIG9uIENQVSAwICovCitzdGF0aWMgaW50IG9uX2NwdTAobG9uZyAoKmZuKSh2b2lkICopLCBzdHJ1Y3QgYXBtX2Jpb3NfY2FsbCAqY2FsbCkKK3sKKwlpbnQgcmV0OworCisJLyogRG9uJ3QgYm90aGVyIHdpdGggd29ya19vbl9jcHUgaW4gdGhlIGNvbW1vbiBjYXNlLCBzbyB3ZSBkb24ndAorCSAqIGhhdmUgdG8gd29ycnkgYWJvdXQgT09NIG9yIG92ZXJoZWFkLiAqLworCWlmIChnZXRfY3B1KCkgPT0gMCkgeworCQlyZXQgPSBmbihjYWxsKTsKKwkJcHV0X2NwdSgpOworCX0gZWxzZSB7CisJCXB1dF9jcHUoKTsKKwkJcmV0ID0gd29ya19vbl9jcHUoMCwgZm4sIGNhbGwpOworCX0KKworCS8qIHdvcmtfb25fY3B1IGNhbiBmYWlsIHdpdGggLUVOT01FTSAqLworCWlmIChyZXQgPCAwKQorCQljYWxsLT5lcnIgPSByZXQ7CisJZWxzZQorCQljYWxsLT5lcnIgPSAoY2FsbC0+ZWF4ID4+IDgpICYgMHhmZjsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJYXBtX2Jpb3NfY2FsbAktCU1ha2UgYW4gQVBNIEJJT1MgMzJiaXQgY2FsbCAob24gQ1BVIDApCisgKglAY2FsbDogdGhlIGFwbV9iaW9zX2NhbGwgcmVnaXN0ZXJzLgorICoKKyAqCUlmIHRoZXJlIGlzIGFuIGVycm9yLCBpdCBpcyByZXR1cm5lZCBpbiBAY2FsbC5lcnIuCisgKi8KK3N0YXRpYyBpbnQgYXBtX2Jpb3NfY2FsbChzdHJ1Y3QgYXBtX2Jpb3NfY2FsbCAqY2FsbCkKK3sKKwlyZXR1cm4gb25fY3B1MChfX2FwbV9iaW9zX2NhbGwsIGNhbGwpOworfQorCisvKioKKyAqCV9fYXBtX2Jpb3NfY2FsbF9zaW1wbGUgLSBNYWtlIGFuIEFQTSBCSU9TIDMyYml0IGNhbGwgKG9uIENQVSAwKQorICoJQF9jYWxsOiBwb2ludGVyIHRvIHN0cnVjdCBhcG1fYmlvc19jYWxsLgorICoKKyAqCU1ha2UgYSBCSU9TIGNhbGwgdGhhdCByZXR1cm5zIG9uZSB2YWx1ZSBvbmx5LCBvciBqdXN0IHN0YXR1cy4KKyAqCUlmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHRoZSBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluIEFICisgKgkoYml0cyA4LTE1IG9mIGVheCkgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24temVybyAoaXQgY2FuCisgKglhbHNvIHJldHVybiAtRU5PTUVNKS4gVGhpcyBpcyB1c2VkIGZvciBzaW1wbGVyIEJJT1Mgb3BlcmF0aW9ucy4KKyAqCVRoaXMgY2FsbCBtYXkgaG9sZCBpbnRlcnJ1cHRzIG9mZiBmb3IgYSBsb25nIHRpbWUgb24gc29tZSBsYXB0b3BzLgorICoKKyAqCU5vdGU6IHRoaXMgbWFrZXMgdGhlIGNhbGwgb24gdGhlIGN1cnJlbnQgQ1BVLgorICovCitzdGF0aWMgbG9uZyBfX2FwbV9iaW9zX2NhbGxfc2ltcGxlKHZvaWQgKl9jYWxsKQoreworCXU4CQkJZXJyb3I7CisJQVBNX0RFQ0xfU0VHUworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCWNwdTsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QJc2F2ZV9kZXNjXzQwOworCXN0cnVjdCBkZXNjX3N0cnVjdAkqZ2R0OworCXN0cnVjdCBhcG1fYmlvc19jYWxsCSpjYWxsID0gX2NhbGw7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJQlVHX09OKGNwdSAhPSAwKTsKKwlnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShjcHUpOworCXNhdmVfZGVzY180MCA9IGdkdFsweDQwIC8gOF07CisJZ2R0WzB4NDAgLyA4XSA9IGJhZF9iaW9zX2Rlc2M7CisKKwlhcG1faXJxX3NhdmUoZmxhZ3MpOworCUFQTV9ET19TQVZFX1NFR1M7CisJZXJyb3IgPSBhcG1fYmlvc19jYWxsX3NpbXBsZV9hc20oY2FsbC0+ZnVuYywgY2FsbC0+ZWJ4LCBjYWxsLT5lY3gsCisJCQkJCSAmY2FsbC0+ZWF4KTsKKwlBUE1fRE9fUkVTVE9SRV9TRUdTOworCWFwbV9pcnFfcmVzdG9yZShmbGFncyk7CisJZ2R0WzB4NDAgLyA4XSA9IHNhdmVfZGVzY180MDsKKwlwdXRfY3B1KCk7CisJcmV0dXJuIGVycm9yOwogfQogCiAvKioKQEAgLTYyMyw0MCArNjc1LDI4IEBACiAgKglAZWJ4X2luOiBFQlggcmVnaXN0ZXIgdmFsdWUgZm9yIEJJT1MgY2FsbAogICoJQGVjeF9pbjogRUNYIHJlZ2lzdGVyIHZhbHVlIGZvciBCSU9TIGNhbGwKICAqCUBlYXg6IEVBWCByZWdpc3RlciBvbiByZXR1cm4gZnJvbSB0aGUgQklPUyBjYWxsCisgKglAZXJyOiBiaXRzCiAgKgogICoJTWFrZSBhIEJJT1MgY2FsbCB0aGF0IHJldHVybnMgb25lIHZhbHVlIG9ubHksIG9yIGp1c3Qgc3RhdHVzLgotICoJSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZW4gdGhlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQgaW4gQUgKLSAqCShiaXRzIDgtMTUgb2YgZWF4KSBhbmQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvLiBUaGlzIGlzCi0gKgl1c2VkIGZvciBzaW1wbGVyIEJJT1Mgb3BlcmF0aW9ucy4gVGhpcyBjYWxsIG1heSBob2xkIGludGVycnVwdHMKLSAqCW9mZiBmb3IgYSBsb25nIHRpbWUgb24gc29tZSBsYXB0b3BzLgorICoJSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZW4gdGhlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQgaW4gQGVycgorICoJYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24temVyby4gVGhpcyBpcyB1c2VkIGZvciBzaW1wbGVyCisgKglCSU9TIG9wZXJhdGlvbnMuICBUaGlzIGNhbGwgbWF5IGhvbGQgaW50ZXJydXB0cyBvZmYgZm9yIGEgbG9uZworICoJdGltZSBvbiBzb21lIGxhcHRvcHMuCiAgKi8KLQotc3RhdGljIHU4IGFwbV9iaW9zX2NhbGxfc2ltcGxlKHUzMiBmdW5jLCB1MzIgZWJ4X2luLCB1MzIgZWN4X2luLCB1MzIgKmVheCkKK3N0YXRpYyBpbnQgYXBtX2Jpb3NfY2FsbF9zaW1wbGUodTMyIGZ1bmMsIHUzMiBlYnhfaW4sIHUzMiBlY3hfaW4sIHUzMiAqZWF4LAorCQkJCWludCAqZXJyKQogewotCXU4CQkJZXJyb3I7Ci0JQVBNX0RFQ0xfU0VHUwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCWNwdW1hc2tfdAkJY3B1czsKLQlpbnQJCQljcHU7Ci0Jc3RydWN0IGRlc2Nfc3RydWN0CXNhdmVfZGVzY180MDsKLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QJKmdkdDsKKwlzdHJ1Y3QgYXBtX2Jpb3NfY2FsbCBjYWxsOworCWludCByZXQ7CiAKLQljcHVzID0gYXBtX3NhdmVfY3B1cygpOworCWNhbGwuZnVuYyA9IGZ1bmM7CisJY2FsbC5lYnggPSBlYnhfaW47CisJY2FsbC5lY3ggPSBlY3hfaW47CiAKLQljcHUgPSBnZXRfY3B1KCk7Ci0JZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKLQlzYXZlX2Rlc2NfNDAgPSBnZHRbMHg0MCAvIDhdOwotCWdkdFsweDQwIC8gOF0gPSBiYWRfYmlvc19kZXNjOwotCi0JYXBtX2lycV9zYXZlKGZsYWdzKTsKLQlBUE1fRE9fU0FWRV9TRUdTOwotCWVycm9yID0gYXBtX2Jpb3NfY2FsbF9zaW1wbGVfYXNtKGZ1bmMsIGVieF9pbiwgZWN4X2luLCBlYXgpOwotCUFQTV9ET19SRVNUT1JFX1NFR1M7Ci0JYXBtX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlnZHRbMHg0MCAvIDhdID0gc2F2ZV9kZXNjXzQwOwotCXB1dF9jcHUoKTsKLQlhcG1fcmVzdG9yZV9jcHVzKGNwdXMpOwotCXJldHVybiBlcnJvcjsKKwlyZXQgPSBvbl9jcHUwKF9fYXBtX2Jpb3NfY2FsbF9zaW1wbGUsICZjYWxsKTsKKwkqZWF4ID0gY2FsbC5lYXg7CisJKmVyciA9IGNhbGwuZXJyOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNjc4LDkgKzcxOCwxMCBAQAogc3RhdGljIGludCBhcG1fZHJpdmVyX3ZlcnNpb24odV9zaG9ydCAqdmFsKQogewogCXUzMiBlYXg7CisJaW50IGVycjsKIAotCWlmIChhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19WRVJTSU9OLCAwLCAqdmFsLCAmZWF4KSkKLQkJcmV0dXJuIChlYXggPj4gOCkgJiAweGZmOworCWlmIChhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19WRVJTSU9OLCAwLCAqdmFsLCAmZWF4LCAmZXJyKSkKKwkJcmV0dXJuIGVycjsKIAkqdmFsID0gZWF4OwogCXJldHVybiBBUE1fU1VDQ0VTUzsKIH0KQEAgLTcwMSwyMiArNzQyLDIxIEBACiAgKgl0aGF0IEFQTSAxLjIgaXMgaW4gdXNlLiBJZiBubyBtZXNzZ2VzIGFyZSBwZW5kaW5nIHRoZSB2YWx1ZSAweDgwCiAgKglpcyByZXR1cm5lZCAoTm8gcG93ZXIgbWFuYWdlbWVudCBldmVudHMgcGVuZGluZykuCiAgKi8KLQogc3RhdGljIGludCBhcG1fZ2V0X2V2ZW50KGFwbV9ldmVudF90ICpldmVudCwgYXBtX2V2ZW50aW5mb190ICppbmZvKQogewotCXUzMiBlYXg7Ci0JdTMyIGVieDsKLQl1MzIgZWN4OwotCXUzMiBkdW1teTsKKwlzdHJ1Y3QgYXBtX2Jpb3NfY2FsbCBjYWxsOwogCi0JaWYgKGFwbV9iaW9zX2NhbGwoQVBNX0ZVTkNfR0VUX0VWRU5ULCAwLCAwLCAmZWF4LCAmZWJ4LCAmZWN4LAotCQkJICAmZHVtbXksICZkdW1teSkpCi0JCXJldHVybiAoZWF4ID4+IDgpICYgMHhmZjsKLQkqZXZlbnQgPSBlYng7CisJY2FsbC5mdW5jID0gQVBNX0ZVTkNfR0VUX0VWRU5UOworCWNhbGwuZWJ4ID0gY2FsbC5lY3ggPSAwOworCisJaWYgKGFwbV9iaW9zX2NhbGwoJmNhbGwpKQorCQlyZXR1cm4gY2FsbC5lcnI7CisKKwkqZXZlbnQgPSBjYWxsLmVieDsKIAlpZiAoYXBtX2luZm8uY29ubmVjdGlvbl92ZXJzaW9uIDwgMHgwMTAyKQogCQkqaW5mbyA9IH4wOyAvKiBpbmRpY2F0ZSBpbmZvIG5vdCB2YWxpZCAqLwogCWVsc2UKLQkJKmluZm8gPSBlY3g7CisJCSppbmZvID0gY2FsbC5lY3g7CiAJcmV0dXJuIEFQTV9TVUNDRVNTOwogfQogCkBAIC03MzcsOSArNzc3LDEwIEBACiBzdGF0aWMgaW50IHNldF9wb3dlcl9zdGF0ZSh1X3Nob3J0IHdoYXQsIHVfc2hvcnQgc3RhdGUpCiB7CiAJdTMyIGVheDsKKwlpbnQgZXJyOwogCi0JaWYgKGFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX1NFVF9TVEFURSwgd2hhdCwgc3RhdGUsICZlYXgpKQotCQlyZXR1cm4gKGVheCA+PiA4KSAmIDB4ZmY7CisJaWYgKGFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX1NFVF9TVEFURSwgd2hhdCwgc3RhdGUsICZlYXgsICZlcnIpKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiBBUE1fU1VDQ0VTUzsKIH0KIApAQCAtNzcwLDYgKzgxMSw3IEBACiAJdTggcmV0ID0gMDsKIAlpbnQgaWRsZWQgPSAwOwogCWludCBwb2xsaW5nOworCWludCBlcnI7CiAKIAlwb2xsaW5nID0gISEoY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJiBUU19QT0xMSU5HKTsKIAlpZiAocG9sbGluZykgewpAQCAtNzgyLDcgKzgyNCw3IEBACiAJfQogCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKIAkJaWRsZWQgPSAxOwotCQlyZXQgPSBhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19JRExFLCAwLCAwLCAmZWF4KTsKKwkJcmV0ID0gYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfSURMRSwgMCwgMCwgJmVheCwgJmVycik7CiAJfQogCWlmIChwb2xsaW5nKQogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOwpAQCAtNzk3LDggKzgzOSw3IEBACiAJCSAqIE9ubHkgcmVwb3J0IHRoZSBmYWlsdXJlIHRoZSBmaXJzdCA1IHRpbWVzLgogCQkgKi8KIAkJaWYgKCsrdCA8IDUpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJhcG1fZG9faWRsZSBmYWlsZWQgKCVkKVxuIiwKLQkJCSAgICAgICAoZWF4ID4+IDgpICYgMHhmZik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiYXBtX2RvX2lkbGUgZmFpbGVkICglZClcbiIsIGVycik7CiAJCQl0ID0gamlmZmllczsKIAkJfQogCQlyZXR1cm4gLTE7CkBAIC04MTYsOSArODU3LDEwIEBACiBzdGF0aWMgdm9pZCBhcG1fZG9fYnVzeSh2b2lkKQogewogCXUzMiBkdW1teTsKKwlpbnQgZXJyOwogCiAJaWYgKGNsb2NrX3Nsb3dlZCB8fCBBTFdBWVNfQ0FMTF9CVVNZKSB7Ci0JCSh2b2lkKWFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX0JVU1ksIDAsIDAsICZkdW1teSk7CisJCSh2b2lkKWFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX0JVU1ksIDAsIDAsICZkdW1teSwgJmVycik7CiAJCWNsb2NrX3Nsb3dlZCA9IDA7CiAJfQogfQpAQCAtOTM3LDcgKzk3OSw3IEBACiAKIAkvKiBTb21lIGJpb3NlcyBkb24ndCBsaWtlIGJlaW5nIGNhbGxlZCBmcm9tIENQVSAhPSAwICovCiAJaWYgKGFwbV9pbmZvLnJlYWxtb2RlX3Bvd2VyX29mZikgewotCQkodm9pZClhcG1fc2F2ZV9jcHVzKCk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdW1hc2tfb2YoMCkpOwogCQltYWNoaW5lX3JlYWxfcmVzdGFydChwb19iaW9zX2NhbGwsIHNpemVvZihwb19iaW9zX2NhbGwpKTsKIAl9IGVsc2UgewogCQkodm9pZClzZXRfc3lzdGVtX3Bvd2VyX3N0YXRlKEFQTV9TVEFURV9PRkYpOwpAQCAtOTU2LDEyICs5OTgsMTMgQEAKIHN0YXRpYyBpbnQgYXBtX2VuYWJsZV9wb3dlcl9tYW5hZ2VtZW50KGludCBlbmFibGUpCiB7CiAJdTMyIGVheDsKKwlpbnQgZXJyOwogCiAJaWYgKChlbmFibGUgPT0gMCkgJiYgKGFwbV9pbmZvLmJpb3MuZmxhZ3MgJiBBUE1fQklPU19ESVNFTkdBR0VEKSkKIAkJcmV0dXJuIEFQTV9OT1RfRU5HQUdFRDsKIAlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfRU5BQkxFX1BNLCBBUE1fREVWSUNFX0JBTEwsCi0JCQkJIGVuYWJsZSwgJmVheCkpCi0JCXJldHVybiAoZWF4ID4+IDgpICYgMHhmZjsKKwkJCQkgZW5hYmxlLCAmZWF4LCAmZXJyKSkKKwkJcmV0dXJuIGVycjsKIAlpZiAoZW5hYmxlKQogCQlhcG1faW5mby5iaW9zLmZsYWdzICY9IH5BUE1fQklPU19ESVNBQkxFRDsKIAllbHNlCkBAIC05ODYsMjQgKzEwMjksMjMgQEAKIAogc3RhdGljIGludCBhcG1fZ2V0X3Bvd2VyX3N0YXR1cyh1X3Nob3J0ICpzdGF0dXMsIHVfc2hvcnQgKmJhdCwgdV9zaG9ydCAqbGlmZSkKIHsKLQl1MzIgZWF4OwotCXUzMiBlYng7Ci0JdTMyIGVjeDsKLQl1MzIgZWR4OwotCXUzMiBkdW1teTsKKwlzdHJ1Y3QgYXBtX2Jpb3NfY2FsbCBjYWxsOworCisJY2FsbC5mdW5jID0gQVBNX0ZVTkNfR0VUX1NUQVRVUzsKKwljYWxsLmVieCA9IEFQTV9ERVZJQ0VfQUxMOworCWNhbGwuZWN4ID0gMDsKIAogCWlmIChhcG1faW5mby5nZXRfcG93ZXJfc3RhdHVzX2Jyb2tlbikKIAkJcmV0dXJuIEFQTV8zMl9VTlNVUFBPUlRFRDsKLQlpZiAoYXBtX2Jpb3NfY2FsbChBUE1fRlVOQ19HRVRfU1RBVFVTLCBBUE1fREVWSUNFX0FMTCwgMCwKLQkJCSAgJmVheCwgJmVieCwgJmVjeCwgJmVkeCwgJmR1bW15KSkKLQkJcmV0dXJuIChlYXggPj4gOCkgJiAweGZmOwotCSpzdGF0dXMgPSBlYng7Ci0JKmJhdCA9IGVjeDsKKwlpZiAoYXBtX2Jpb3NfY2FsbCgmY2FsbCkpCisJCXJldHVybiBjYWxsLmVycjsKKwkqc3RhdHVzID0gY2FsbC5lYng7CisJKmJhdCA9IGNhbGwuZWN4OwogCWlmIChhcG1faW5mby5nZXRfcG93ZXJfc3RhdHVzX3N3YWJpbm1pbnV0ZXMpIHsKLQkJKmxpZmUgPSBzd2FiMTYoKHUxNillZHgpOworCQkqbGlmZSA9IHN3YWIxNigodTE2KWNhbGwuZWR4KTsKIAkJKmxpZmUgfD0gMHg4MDAwOwogCX0gZWxzZQotCQkqbGlmZSA9IGVkeDsKKwkJKmxpZmUgPSBjYWxsLmVkeDsKIAlyZXR1cm4gQVBNX1NVQ0NFU1M7CiB9CiAKQEAgLTEwNDgsMTIgKzEwOTAsMTQgQEAKIHN0YXRpYyBpbnQgYXBtX2VuZ2FnZV9wb3dlcl9tYW5hZ2VtZW50KHVfc2hvcnQgZGV2aWNlLCBpbnQgZW5hYmxlKQogewogCXUzMiBlYXg7CisJaW50IGVycjsKIAogCWlmICgoZW5hYmxlID09IDApICYmIChkZXZpY2UgPT0gQVBNX0RFVklDRV9BTEwpCiAJICAgICYmIChhcG1faW5mby5iaW9zLmZsYWdzICYgQVBNX0JJT1NfRElTQUJMRUQpKQogCQlyZXR1cm4gQVBNX0RJU0FCTEVEOwotCWlmIChhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19FTkdBR0VfUE0sIGRldmljZSwgZW5hYmxlLCAmZWF4KSkKLQkJcmV0dXJuIChlYXggPj4gOCkgJiAweGZmOworCWlmIChhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19FTkdBR0VfUE0sIGRldmljZSwgZW5hYmxlLAorCQkJCSAmZWF4LCAmZXJyKSkKKwkJcmV0dXJuIGVycjsKIAlpZiAoZGV2aWNlID09IEFQTV9ERVZJQ0VfQUxMKSB7CiAJCWlmIChlbmFibGUpCiAJCQlhcG1faW5mby5iaW9zLmZsYWdzICY9IH5BUE1fQklPU19ESVNFTkdBR0VEOwpAQCAtMTY4OSwxNiArMTczMywxNCBAQAogCWNoYXIgCQkqcG93ZXJfc3RhdDsKIAljaGFyIAkJKmJhdF9zdGF0OwogCi0jaWZkZWYgQ09ORklHX1NNUAogCS8qIDIwMDIvMDgvMDEgLSBXVAogCSAqIFRoaXMgaXMgdG8gYXZvaWQgcmFuZG9tIGNyYXNoZXMgYXQgYm9vdCB0aW1lIGR1cmluZyBpbml0aWFsaXphdGlvbgogCSAqIG9uIFNNUCBzeXN0ZW1zIGluIGNhc2Ugb2YgImFwbT1wb3dlci1vZmYiIG1vZGUuIFNlZW4gb24gQVNVUyBBN00yNjZELgogCSAqIFNvbWUgYmlvc2VzIGRvbid0IGxpa2UgYmVpbmcgY2FsbGVkIGZyb20gQ1BVICE9IDAuCiAJICogTWV0aG9kIHN1Z2dlc3RlZCBieSBJbmdvIE1vbG5hci4KIAkgKi8KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KDApKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKDApKTsKIAlCVUdfT04oc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDApOwotI2VuZGlmCiAKIAlpZiAoYXBtX2luZm8uY29ubmVjdGlvbl92ZXJzaW9uID09IDApIHsKIAkJYXBtX2luZm8uY29ubmVjdGlvbl92ZXJzaW9uID0gYXBtX2luZm8uYmlvcy52ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggZTI5NjJjYy4uYzRmNjY3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC00MSw4ICs0MSw2IEBACiAKICNpbmNsdWRlICJjcHUuaCIKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQogLyogYWxsIG9mIHRoZXNlIG1hc2tzIGFyZSBpbml0aWFsaXplZCBpbiBzZXR1cF9jcHVfbG9jYWxfbWFza3MoKSAqLwogY3B1bWFza192YXJfdCBjcHVfaW5pdGlhbGl6ZWRfbWFzazsKIGNwdW1hc2tfdmFyX3QgY3B1X2NhbGxvdXRfbWFzazsKQEAgLTYwLDE2ICs1OCw2IEBACiAJYWxsb2NfYm9vdG1lbV9jcHVtYXNrX3ZhcigmY3B1X3NpYmxpbmdfc2V0dXBfbWFzayk7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KLQotY3B1bWFza190IGNwdV9zaWJsaW5nX3NldHVwX21hcDsKLWNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7Ci1jcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwotCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiAqdGhpc19jcHUgX19jcHVpbml0ZGF0YTsKIAogREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKHN0cnVjdCBnZHRfcGFnZSwgZ2R0X3BhZ2UpID0geyAuZ2R0ID0gewpAQCAtODU5LDYgKzg0Nyw3IEBACiB2b2lkIF9faW5pdCBpZGVudGlmeV9ib290X2NwdSh2b2lkKQogewogCWlkZW50aWZ5X2NwdSgmYm9vdF9jcHVfZGF0YSk7CisJaW5pdF9jMWVfbWFzaygpOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAlzeXNlbnRlcl9zZXR1cCgpOwogCWVuYWJsZV9zZXBfY3B1KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggMjNkYTk2ZS4uMDUyMDliNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPHRyYWNlL3Bvd2VyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTcyLDYgKzcyLDggQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqLCBkcnZfZGF0YSk7CiAKK0RFRklORV9UUkFDRShwb3dlcl9tYXJrKTsKKwogLyogYWNwaV9wZXJmX2RhdGEgaXMgYSBwb2ludGVyIHRvIHBlcmNwdSBkYXRhLiAqLwogc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZSAqYWNwaV9wZXJmX2RhdGE7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKaW5kZXggNDFlZDk0OS4uNmFjNTViZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCWNwdW1hc2tfY29weShwb2xpY3ktPmNwdXMsICZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgcG9saWN5LT5jcHUpKTsKKwljcHVtYXNrX2NvcHkocG9saWN5LT5jcHVzLCBjcHVfc2libGluZ19tYXNrKHBvbGljeS0+Y3B1KSk7CiAjZW5kaWYKIAogCS8qIEVycmF0YSB3b3JrYXJvdW5kICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IGExNWFjOTQuLjQ3MDllYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC01NCw3ICs1NCwxMCBAQAogc3RhdGljIGludCBjcHVfZmFtaWx5ID0gQ1BVX09QVEVST047CiAKICNpZm5kZWYgQ09ORklHX1NNUAotREVGSU5FX1BFUl9DUFUoY3B1bWFza190LCBjcHVfY29yZV9tYXApOworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVfbWFzayhpbnQgY3B1KQoreworCXJldHVybiBjcHVtYXNrX29mKDApOworfQogI2VuZGlmCiAKIC8qIFJldHVybiBhIGZyZXF1ZW5jeSBpbiBNSHosIGdpdmVuIGFuIGlucHV0IGZpZCAqLwpAQCAtNjk5LDcgKzcwMiw3IEBACiAKIAlkcHJpbnRrKCJjZmlkIDB4JXgsIGN2aWQgMHgleFxuIiwgZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJZGF0YS0+cG93ZXJub3dfdGFibGUgPSBwb3dlcm5vd190YWJsZTsKLQlpZiAoZmlyc3RfY3B1KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBkYXRhLT5jcHUpKSA9PSBkYXRhLT5jcHUpCisJaWYgKGNwdW1hc2tfZmlyc3QoY3B1X2NvcmVfbWFzayhkYXRhLT5jcHUpKSA9PSBkYXRhLT5jcHUpCiAJCXByaW50X2Jhc2ljcyhkYXRhKTsKIAogCWZvciAoaiA9IDA7IGogPCBkYXRhLT5udW1wczsgaisrKQpAQCAtODYyLDcgKzg2NSw3IEBACiAKIAkvKiBmaWxsIGluIGRhdGEgKi8KIAlkYXRhLT5udW1wcyA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudDsKLQlpZiAoZmlyc3RfY3B1KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBkYXRhLT5jcHUpKSA9PSBkYXRhLT5jcHUpCisJaWYgKGNwdW1hc2tfZmlyc3QoY3B1X2NvcmVfbWFzayhkYXRhLT5jcHUpKSA9PSBkYXRhLT5jcHUpCiAJCXByaW50X2Jhc2ljcyhkYXRhKTsKIAlwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoZGF0YSwgMCk7CiAKQEAgLTEzMDAsNyArMTMwMyw3IEBACiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKIAkJY3B1bWFza19jb3B5KHBvbC0+Y3B1cywgY3B1bWFza19vZihwb2wtPmNwdSkpOwogCWVsc2UKLQkJY3B1bWFza19jb3B5KHBvbC0+Y3B1cywgJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBwb2wtPmNwdSkpOworCQljcHVtYXNrX2NvcHkocG9sLT5jcHVzLCBjcHVfY29yZV9tYXNrKHBvbC0+Y3B1KSk7CiAJZGF0YS0+YXZhaWxhYmxlX2NvcmVzID0gcG9sLT5jcHVzOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKQEAgLTEzNjUsNyArMTM2OCw3IEBACiAJdW5zaWduZWQgaW50IGtoeiA9IDA7CiAJdW5zaWduZWQgaW50IGZpcnN0OwogCi0JZmlyc3QgPSBmaXJzdF9jcHUocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpOworCWZpcnN0ID0gY3B1bWFza19maXJzdChjcHVfY29yZV9tYXNrKGNwdSkpOwogCWRhdGEgPSBwZXJfY3B1KHBvd2Vybm93X2RhdGEsIGZpcnN0KTsKIAogCWlmICghZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IDhiYmIxMWEuLjAxNmMxYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAKIAkvKiBvbmx5IHJ1biBvbiBDUFUgdG8gYmUgc2V0LCBvciBvbiBpdHMgc2libGluZyAqLwogI2lmZGVmIENPTkZJR19TTVAKLQljcHVtYXNrX2NvcHkocG9saWN5LT5jcHVzLCAmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIHBvbGljeS0+Y3B1KSk7CisJY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgY3B1X3NpYmxpbmdfbWFzayhwb2xpY3ktPmNwdSkpOwogI2VuZGlmCiAKIAljcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCBjNDcxZWIxLi40ODNlZGE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCXVuc2lnbmVkIGxvbmcgY2FuX2Rpc2FibGU7CiB9OwogCi0jaWZkZWYgQ09ORklHX1BDSQorI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTRlMpCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgazhfbmJfaWRbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTEwMykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTIwMykgfSwKQEAgLTMyNCwxNSArMzI0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotX19jcHVpbml0IGNwdWlkNF9jYWNoZV9sb29rdXAoaW50IGluZGV4LCBzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYpCi17Ci0Jc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICpsZWFmX3JlZ3MgPQotCQkoc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICopdGhpc19sZWFmOwotCi0JcmV0dXJuIGNwdWlkNF9jYWNoZV9sb29rdXBfcmVncyhpbmRleCwgbGVhZl9yZWdzKTsKLX0KLQogc3RhdGljIGludCBfX2NwdWluaXQgZmluZF9udW1fY2FjaGVfbGVhdmVzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50CQllYXgsIGVieCwgZWN4LCBlZHg7CkBAIC01MDgsNiArNDk5LDggQEAKIAlyZXR1cm4gbDI7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1lTRlMKKwogLyogcG9pbnRlciB0byBfY3B1aWQ0X2luZm8gYXJyYXkgKGZvciBlYWNoIGNhY2hlIGxlYWYpICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjcHVpZDRfaW5mbyk7CiAjZGVmaW5lIENQVUlENF9JTkZPX0lEWCh4LCB5KQkoJigocGVyX2NwdShjcHVpZDRfaW5mbywgeCkpW3ldKSkKQEAgLTU3MSw2ICs1NjQsMTUgQEAKIAlwZXJfY3B1KGNwdWlkNF9pbmZvLCBjcHUpID0gTlVMTDsKIH0KIAorc3RhdGljIGludAorX19jcHVpbml0IGNwdWlkNF9jYWNoZV9sb29rdXAoaW50IGluZGV4LCBzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYpCit7CisJc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICpsZWFmX3JlZ3MgPQorCQkoc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICopdGhpc19sZWFmOworCisJcmV0dXJuIGNwdWlkNF9jYWNoZV9sb29rdXBfcmVncyhpbmRleCwgbGVhZl9yZWdzKTsKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0IGdldF9jcHVfbGVhdmVzKHZvaWQgKl9yZXR2YWwpCiB7CiAJaW50IGosICpyZXR2YWwgPSBfcmV0dmFsLCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC02MTIsOCArNjE0LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0jaWZkZWYgQ09ORklHX1NZU0ZTCi0KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYwppbmRleCBjYTE0NjA0Li44NjNmODk1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYwpAQCAtOTkwLDcgKzk5MCw3IEBACiAJTlVMTAogfTsKIAotc3RhdGljIGNwdW1hc2tfdCBtY2VfZGV2aWNlX2luaXRpYWxpemVkID0gQ1BVX01BU0tfTk9ORTsKK3N0YXRpYyBjcHVtYXNrX3Zhcl90IG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQ7CiAKIC8qIFBlciBjcHUgc3lzZGV2IGluaXQuICBBbGwgb2YgdGhlIGNwdXMgc3RpbGwgc2hhcmUgdGhlIHNhbWUgY3RsIGJhbmsgKi8KIHN0YXRpYyBfX2NwdWluaXQgaW50IG1jZV9jcmVhdGVfZGV2aWNlKHVuc2lnbmVkIGludCBjcHUpCkBAIC0xMDIxLDcgKzEwMjEsNyBAQAogCQlpZiAoZXJyKQogCQkJZ290byBlcnJvcjI7CiAJfQotCWNwdV9zZXQoY3B1LCBtY2VfZGV2aWNlX2luaXRpYWxpemVkKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCBtY2VfZGV2aWNlX2luaXRpYWxpemVkKTsKIAogCXJldHVybiAwOwogZXJyb3IyOgpAQCAtMTA0Myw3ICsxMDQzLDcgQEAKIHsKIAlpbnQgaTsKIAotCWlmICghY3B1X2lzc2V0KGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCkpCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCkpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IG1jZV9hdHRyaWJ1dGVzW2ldOyBpKyspCkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSwgY3B1KSwKIAkJCSZiYW5rX2F0dHJzW2ldKTsKIAlzeXNkZXZfdW5yZWdpc3RlcigmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSkpOwotCWNwdV9jbGVhcihjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCk7CiB9CiAKIC8qIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbWFjaGluZSBjaGVja3Mgb24gb2ZmbGluZWQgQ1BVcy4gKi8KQEAgLTExNjIsNiArMTE2Miw4IEBACiAJaWYgKCFtY2VfYXZhaWxhYmxlKCZib290X2NwdV9kYXRhKSkKIAkJcmV0dXJuIC1FSU87CiAKKwlhbGxvY19jcHVtYXNrX3ZhcigmbWNlX2RldmljZV9pbml0aWFsaXplZCwgR0ZQX0tFUk5FTCk7CisKIAllcnIgPSBtY2VfaW5pdF9iYW5rcygpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKaW5kZXggN2QwMWJlOC4uNTZkZGU5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKGNwdV9kYXRhKGNwdSkuY3B1X2NvcmVfaWQgJiYgc2hhcmVkX2JhbmtbYmFua10pIHsJLyogc3ltbGluayAqLwotCQlpID0gY3B1bWFza19maXJzdCgmcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpOworCQlpID0gY3B1bWFza19maXJzdChjcHVfY29yZV9tYXNrKGNwdSkpOwogCiAJCS8qIGZpcnN0IGNvcmUgbm90IHVwIHlldCAqLwogCQlpZiAoY3B1X2RhdGEoaSkuY3B1X2NvcmVfaWQpCkBAIC01MDUsNyArNTA1LDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCi0JCWNwdW1hc2tfY29weShiLT5jcHVzLCAmcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpOworCQljcHVtYXNrX2NvcHkoYi0+Y3B1cywgY3B1X2NvcmVfbWFzayhjcHUpKTsKIAkJcGVyX2NwdSh0aHJlc2hvbGRfYmFua3MsIGNwdSlbYmFua10gPSBiOwogCQlnb3RvIG91dDsKIAl9CkBAIC01MjksNyArNTI5LDcgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCWNwdW1hc2tfc2V0YWxsKGItPmNwdXMpOwogI2Vsc2UKLQljcHVtYXNrX2NvcHkoYi0+Y3B1cywgJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwljcHVtYXNrX2NvcHkoYi0+Y3B1cywgY3B1X2NvcmVfbWFzayhjcHUpKTsKICNlbmRpZgogCiAJcGVyX2NwdSh0aHJlc2hvbGRfYmFua3MsIGNwdSlbYmFua10gPSBiOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYwppbmRleCA1N2RmM2QzLi5kNmI3MmRmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJZm9yX2VhY2hfb25saW5lX2NwdSAoY3B1KSB7CiAJCWlmIChjcHUgPT0gZHlpbmcpCiAJCQljb250aW51ZTsKLQkJaWYgKHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKSkKKwkJaWYgKHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdW1hc2tfb2YoY3B1KSkpCiAJCQljb250aW51ZTsKIAkJLyogUmVjaGVjayBiYW5rcyBpbiBjYXNlIENQVXMgZG9uJ3QgYWxsIGhhdmUgdGhlIHNhbWUgKi8KIAkJaWYgKGNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwppbmRleCAzN2YyOGZjLi4wYjc3NmMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKQEAgLTQ2Miw5ICs0NjIsNiBAQAogCSpiYXNlID0gYmFzZV9oaSA8PCAoMzIgLSBQQUdFX1NISUZUKSB8IGJhc2VfbG8gPj4gUEFHRV9TSElGVDsKIAkqdHlwZSA9IGJhc2VfbG8gJiAweGZmOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiAgZ2V0X210cnI6IGNwdSVkIHJlZyUwMmQgYmFzZT0lMDEwbHggc2l6ZT0lMDEwbHggJXNcbiIsCi0JCQljcHUsIHJlZywgKmJhc2UsICpzaXplLAotCQkJbXRycl9hdHRyaWJfdG9fc3RyKCp0eXBlICYgMHhmZikpOwogb3V0X3B1dF9jcHU6CiAJcHV0X2NwdSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwppbmRleCBkNjdlMGU0Li5mOTMwNDdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwpAQCAtMTQsNyArMTQsNyBAQAogCWlmIChjLT54ODZfbWF4X2NvcmVzICogc21wX251bV9zaWJsaW5ncyA+IDEpIHsKIAkJc2VxX3ByaW50ZihtLCAicGh5c2ljYWwgaWRcdDogJWRcbiIsIGMtPnBoeXNfcHJvY19pZCk7CiAJCXNlcV9wcmludGYobSwgInNpYmxpbmdzXHQ6ICVkXG4iLAotCQkJICAgY3B1c193ZWlnaHQocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpKTsKKwkJCSAgIGNwdW1hc2tfd2VpZ2h0KGNwdV9zaWJsaW5nX21hc2soY3B1KSkpOwogCQlzZXFfcHJpbnRmKG0sICJjb3JlIGlkXHRcdDogJWRcbiIsIGMtPmNwdV9jb3JlX2lkKTsKIAkJc2VxX3ByaW50ZihtLCAiY3B1IGNvcmVzXHQ6ICVkXG4iLCBjLT5ib290ZWRfY29yZXMpOwogCQlzZXFfcHJpbnRmKG0sICJhcGljaWRcdFx0OiAlZFxuIiwgYy0+YXBpY2lkKTsKQEAgLTE0Myw5ICsxNDMsOSBAQAogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKIAlpZiAoKnBvcyA9PSAwKQkvKiBqdXN0IGluIGNhc2UsIGNwdSAwIGlzIG5vdCB0aGUgZmlyc3QgKi8KLQkJKnBvcyA9IGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7CisJCSpwb3MgPSBjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayk7CiAJZWxzZQotCQkqcG9zID0gbmV4dF9jcHVfbnIoKnBvcyAtIDEsIGNwdV9vbmxpbmVfbWFwKTsKKwkJKnBvcyA9IGNwdW1hc2tfbmV4dCgqcG9zIC0gMSwgY3B1X29ubGluZV9tYXNrKTsKIAlpZiAoKCpwb3MpIDwgbnJfY3B1X2lkcykKIAkJcmV0dXJuICZjcHVfZGF0YSgqcG9zKTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCBkZDIxMzBiLi45NWVhNWZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKQEAgLTE5Niw2ICsxOTcsMTEgQEAKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwkvKiBub3RpZnkgdGhlIGh3LWJyYW5jaCB0cmFjZXIgc28gaXQgbWF5IGRpc2FibGUgdHJhY2luZyBhbmQKKwkgICBhZGQgdGhlIGxhc3QgdHJhY2UgdG8gdGhlIHRyYWNlIGJ1ZmZlciAtCisJICAgdGhlIGVhcmxpZXIgdGhpcyBoYXBwZW5zLCB0aGUgbW9yZSB1c2VmdWwgdGhlIHRyYWNlLiAqLworCXRyYWNlX2h3X2JyYW5jaF9vb3BzKCk7CisKIAlvb3BzX2VudGVyKCk7CiAKIAkvKiByYWN5LCBidXQgYmV0dGVyIHRoYW4gcmlza2luZyBkZWFkbG9jay4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwppbmRleCA3NmY3MTQxLi42MWRmNzc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9ub3BzLmg+CkBAIC0yNiw2ICsyNywxOCBAQAogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKK2ludCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpCit7CisJc2V0X2tlcm5lbF90ZXh0X3J3KCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wb3N0X3Byb2Nlc3Modm9pZCkKK3sKKwlzZXRfa2VybmVsX3RleHRfcm8oKTsKKwlyZXR1cm4gMDsKK30KKwogdW5pb24gZnRyYWNlX2NvZGVfdW5pb24gewogCWNoYXIgY29kZVtNQ09VTlRfSU5TTl9TSVpFXTsKIAlzdHJ1Y3QgewpAQCAtNjYsMTEgKzc5LDExIEBACiAgKgogICogMSkgUHV0IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGludG8gdGhlIElQIGJ1ZmZlcgogICogICAgYW5kIHRoZSBuZXcgY29kZSBpbnRvIHRoZSAiY29kZSIgYnVmZmVyLgotICogMikgU2V0IGEgZmxhZyB0aGF0IHNheXMgd2UgYXJlIG1vZGlmeWluZyBjb2RlCi0gKiAzKSBXYWl0IGZvciBhbnkgcnVubmluZyBOTUlzIHRvIGZpbmlzaC4KLSAqIDQpIFdyaXRlIHRoZSBjb2RlCi0gKiA1KSBjbGVhciB0aGUgZmxhZy4KLSAqIDYpIFdhaXQgZm9yIGFueSBydW5uaW5nIE5NSXMgdG8gZmluaXNoLgorICogMikgV2FpdCBmb3IgYW55IHJ1bm5pbmcgTk1JcyB0byBmaW5pc2ggYW5kIHNldCBhIGZsYWcgdGhhdCBzYXlzCisgKiAgICB3ZSBhcmUgbW9kaWZ5aW5nIGNvZGUsIGl0IGlzIGRvbmUgaW4gYW4gYXRvbWljIG9wZXJhdGlvbi4KKyAqIDMpIFdyaXRlIHRoZSBjb2RlCisgKiA0KSBjbGVhciB0aGUgZmxhZy4KKyAqIDUpIFdhaXQgZm9yIGFueSBydW5uaW5nIE5NSXMgdG8gZmluaXNoLgogICoKICAqIElmIGFuIE5NSSBpcyBleGVjdXRlZCwgdGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgdG8gY2FsbAogICogImZ0cmFjZV9ubWlfZW50ZXIiLiBUaGlzIHdpbGwgY2hlY2sgaWYgdGhlIGZsYWcgaXMgc2V0IHRvIHdyaXRlCkBAIC04Miw5ICs5NSw5IEBACiAgKiBhcmUgdGhlIHNhbWUgYXMgd2hhdCBleGlzdHMuCiAgKi8KIAotc3RhdGljIGF0b21pY190IGluX25taSA9IEFUT01JQ19JTklUKDApOworI2RlZmluZSBNT0RfQ09ERV9XUklURV9GTEFHICgxIDw8IDMxKQkvKiBzZXQgd2hlbiBOTUkgc2hvdWxkIGRvIHRoZSB3cml0ZSAqLworc3RhdGljIGF0b21pY190IG5taV9ydW5uaW5nID0gQVRPTUlDX0lOSVQoMCk7CiBzdGF0aWMgaW50IG1vZF9jb2RlX3N0YXR1czsJCS8qIGhvbGRzIHJldHVybiB2YWx1ZSBvZiB0ZXh0IHdyaXRlICovCi1zdGF0aWMgaW50IG1vZF9jb2RlX3dyaXRlOwkJLyogc2V0IHdoZW4gTk1JIHNob3VsZCBkbyB0aGUgd3JpdGUgKi8KIHN0YXRpYyB2b2lkICptb2RfY29kZV9pcDsJCS8qIGhvbGRzIHRoZSBJUCB0byB3cml0ZSB0byAqLwogc3RhdGljIHZvaWQgKm1vZF9jb2RlX25ld2NvZGU7CQkvKiBob2xkcyB0aGUgdGV4dCB0byB3cml0ZSB0byB0aGUgSVAgKi8KIApAQCAtMTAxLDYgKzExNCwyMCBAQAogCXJldHVybiByOwogfQogCitzdGF0aWMgdm9pZCBjbGVhcl9tb2RfZmxhZyh2b2lkKQoreworCWludCBvbGQgPSBhdG9taWNfcmVhZCgmbm1pX3J1bm5pbmcpOworCisJZm9yICg7OykgeworCQlpbnQgbmV3ID0gb2xkICYgfk1PRF9DT0RFX1dSSVRFX0ZMQUc7CisKKwkJaWYgKG9sZCA9PSBuZXcpCisJCQlicmVhazsKKworCQlvbGQgPSBhdG9taWNfY21weGNoZygmbm1pX3J1bm5pbmcsIG9sZCwgbmV3KTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGZ0cmFjZV9tb2RfY29kZSh2b2lkKQogewogCS8qCkBAIC0xMTEsMzcgKzEzOCw1MiBAQAogCSAqLwogCW1vZF9jb2RlX3N0YXR1cyA9IHByb2JlX2tlcm5lbF93cml0ZShtb2RfY29kZV9pcCwgbW9kX2NvZGVfbmV3Y29kZSwKIAkJCQkJICAgICBNQ09VTlRfSU5TTl9TSVpFKTsKKworCS8qIGlmIHdlIGZhaWwsIHRoZW4ga2lsbCBhbnkgbmV3IHdyaXRlcnMgKi8KKwlpZiAobW9kX2NvZGVfc3RhdHVzKQorCQljbGVhcl9tb2RfZmxhZygpOwogfQogCiB2b2lkIGZ0cmFjZV9ubWlfZW50ZXIodm9pZCkKIHsKLQlhdG9taWNfaW5jKCZpbl9ubWkpOwotCS8qIE11c3QgaGF2ZSBpbl9ubWkgc2VlbiBiZWZvcmUgcmVhZGluZyB3cml0ZSBmbGFnICovCi0Jc21wX21iKCk7Ci0JaWYgKG1vZF9jb2RlX3dyaXRlKSB7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZubWlfcnVubmluZykgJiBNT0RfQ09ERV9XUklURV9GTEFHKSB7CisJCXNtcF9ybWIoKTsKIAkJZnRyYWNlX21vZF9jb2RlKCk7CiAJCWF0b21pY19pbmMoJm5taV91cGRhdGVfY291bnQpOwogCX0KKwkvKiBNdXN0IGhhdmUgcHJldmlvdXMgY2hhbmdlcyBzZWVuIGJlZm9yZSBleGVjdXRpb25zICovCisJc21wX21iKCk7CiB9CiAKIHZvaWQgZnRyYWNlX25taV9leGl0KHZvaWQpCiB7Ci0JLyogRmluaXNoIGFsbCBleGVjdXRpb25zIGJlZm9yZSBjbGVhcmluZyBpbl9ubWkgKi8KLQlzbXBfd21iKCk7Ci0JYXRvbWljX2RlYygmaW5fbm1pKTsKKwkvKiBGaW5pc2ggYWxsIGV4ZWN1dGlvbnMgYmVmb3JlIGNsZWFyaW5nIG5taV9ydW5uaW5nICovCisJc21wX21iKCk7CisJYXRvbWljX2RlYygmbm1pX3J1bm5pbmcpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9ubWlfYW5kX3NldF9tb2RfZmxhZyh2b2lkKQoreworCWlmICghYXRvbWljX2NtcHhjaGcoJm5taV9ydW5uaW5nLCAwLCBNT0RfQ09ERV9XUklURV9GTEFHKSkKKwkJcmV0dXJuOworCisJZG8geworCQljcHVfcmVsYXgoKTsKKwl9IHdoaWxlIChhdG9taWNfY21weGNoZygmbm1pX3J1bm5pbmcsIDAsIE1PRF9DT0RFX1dSSVRFX0ZMQUcpKTsKKworCW5taV93YWl0X2NvdW50Kys7CiB9CiAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX25taSh2b2lkKQogewotCWludCB3YWl0ZWQgPSAwOworCWlmICghYXRvbWljX3JlYWQoJm5taV9ydW5uaW5nKSkKKwkJcmV0dXJuOwogCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZpbl9ubWkpKSB7Ci0JCXdhaXRlZCA9IDE7CisJZG8gewogCQljcHVfcmVsYXgoKTsKLQl9CisJfSB3aGlsZSAoYXRvbWljX3JlYWQoJm5taV9ydW5uaW5nKSk7CiAKLQlpZiAod2FpdGVkKQotCQlubWlfd2FpdF9jb3VudCsrOworCW5taV93YWl0X2NvdW50Kys7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE1MSwxNCArMTkzLDkgQEAKIAltb2RfY29kZV9uZXdjb2RlID0gbmV3X2NvZGU7CiAKIAkvKiBUaGUgYnVmZmVycyBuZWVkIHRvIGJlIHZpc2libGUgYmVmb3JlIHdlIGxldCBOTUlzIHdyaXRlIHRoZW0gKi8KLQlzbXBfd21iKCk7Ci0KLQltb2RfY29kZV93cml0ZSA9IDE7Ci0KLQkvKiBNYWtlIHN1cmUgd3JpdGUgYml0IGlzIHZpc2libGUgYmVmb3JlIHdlIHdhaXQgb24gTk1JcyAqLwogCXNtcF9tYigpOwogCi0Jd2FpdF9mb3Jfbm1pKCk7CisJd2FpdF9mb3Jfbm1pX2FuZF9zZXRfbW9kX2ZsYWcoKTsKIAogCS8qIE1ha2Ugc3VyZSBhbGwgcnVubmluZyBOTUlzIGhhdmUgZmluaXNoZWQgYmVmb3JlIHdlIHdyaXRlIHRoZSBjb2RlICovCiAJc21wX21iKCk7CkBAIC0xNjYsMTMgKzIwMyw5IEBACiAJZnRyYWNlX21vZF9jb2RlKCk7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHdyaXRlIGhhcHBlbnMgYmVmb3JlIGNsZWFyaW5nIHRoZSBiaXQgKi8KLQlzbXBfd21iKCk7Ci0KLQltb2RfY29kZV93cml0ZSA9IDA7Ci0KLQkvKiBtYWtlIHN1cmUgTk1JcyBzZWUgdGhlIGNsZWFyZWQgYml0ICovCiAJc21wX21iKCk7CiAKKwljbGVhcl9tb2RfZmxhZygpOwogCXdhaXRfZm9yX25taSgpOwogCiAJcmV0dXJuIG1vZF9jb2RlX3N0YXR1czsKQEAgLTM2OCwyNSArNDAxLDYgQEAKIAlyZXR1cm4gZnRyYWNlX21vZF9qbXAoaXAsIG9sZF9vZmZzZXQsIG5ld19vZmZzZXQpOwogfQogCi0jZWxzZSAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KLQotLyoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcGlja2VkIGZyb20gdGhvc2UgdXNlZCBvbgotICogdGhpcyBwYWdlIGZvciBkeW5hbWljIGZ0cmFjZS4gVGhleSBoYXZlIGJlZW4KLSAqIHNpbXBsaWZpZWQgdG8gaWdub3JlIGFsbCB0cmFjZXMgaW4gTk1JIGNvbnRleHQuCi0gKi8KLXN0YXRpYyBhdG9taWNfdCBpbl9ubWk7Ci0KLXZvaWQgZnRyYWNlX25taV9lbnRlcih2b2lkKQotewotCWF0b21pY19pbmMoJmluX25taSk7Ci19Ci0KLXZvaWQgZnRyYWNlX25taV9leGl0KHZvaWQpCi17Ci0JYXRvbWljX2RlYygmaW5fbm1pKTsKLX0KLQogI2VuZGlmIC8qICFDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAogLyoKQEAgLTM5NiwxNCArNDEwLDEzIEBACiB2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgb2xkOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKIAlpbnQgZmF1bHRlZDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKIAl1bnNpZ25lZCBsb25nIHJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykKIAkJCQkmcmV0dXJuX3RvX2hhbmRsZXI7CiAKIAkvKiBObWkncyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZpbl9ubWkpKSkKKwlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQogCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKQEAgLTQzOSwxNyArNDUyLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKG9sZCkpKSB7Ci0JCWZ0cmFjZV9ncmFwaF9zdG9wKCk7Ci0JCSpwYXJlbnQgPSBvbGQ7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljYWxsdGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWlmIChmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBjYWxsdGltZSwKLQkJCQlzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCkgPT0gLUVCVVNZKSB7CisJaWYgKGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZShvbGQsIHNlbGZfYWRkciwgJnRyYWNlLmRlcHRoKSA9PSAtRUJVU1kpIHsKIAkJKnBhcmVudCA9IG9sZDsKIAkJcmV0dXJuOwogCX0KQEAgLTQ2MywzICs0NjYsNjYgQEAKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhW107CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGFbXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nICpzeXNfY2FsbF90YWJsZTsKKworc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoqc3lzY2FsbHNfbWV0YWRhdGE7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZmluZF9zeXNjYWxsX21ldGEodW5zaWduZWQgbG9uZyAqc3lzY2FsbCkKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RhcnQ7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0b3A7CisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKworCisJc3RhcnQgPSAoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKilfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhOworCXN0b3AgPSAoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKilfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGE7CisJa2FsbHN5bXNfbG9va3VwKCh1bnNpZ25lZCBsb25nKSBzeXNjYWxsLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOworCisJZm9yICggOyBzdGFydCA8IHN0b3A7IHN0YXJ0KyspIHsKKwkJaWYgKHN0YXJ0LT5uYW1lICYmICFzdHJjbXAoc3RhcnQtPm5hbWUsIHN0cikpCisJCQlyZXR1cm4gc3RhcnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzY2FsbF9ucl90b19tZXRhKGludCBucikKK3sKKwlpZiAoIXN5c2NhbGxzX21ldGFkYXRhIHx8IG5yID49IEZUUkFDRV9TWVNDQUxMX01BWCB8fCBuciA8IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN5c2NhbGxzX21ldGFkYXRhW25yXTsKK30KKwordm9pZCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGE7CisJdW5zaWduZWQgbG9uZyAqKnBzeXNfc3lzY2FsbF90YWJsZSA9ICZzeXNfY2FsbF90YWJsZTsKKwlzdGF0aWMgYXRvbWljX3QgcmVmczsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmcmVmcykgIT0gMSkKKwkJZ290byBlbmQ7CisKKwlzeXNjYWxsc19tZXRhZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpzeXNjYWxsc19tZXRhZGF0YSkgKgorCQkJCQlGVFJBQ0VfU1lTQ0FMTF9NQVgsIEdGUF9LRVJORUwpOworCWlmICghc3lzY2FsbHNfbWV0YWRhdGEpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1lTQ0FMTF9NQVg7IGkrKykgeworCQltZXRhID0gZmluZF9zeXNjYWxsX21ldGEocHN5c19zeXNjYWxsX3RhYmxlW2ldKTsKKwkJc3lzY2FsbHNfbWV0YWRhdGFbaV0gPSBtZXRhOworCX0KKwlyZXR1cm47CisKKwkvKiBQYXJhbm9pZDogYXZvaWQgb3ZlcmZsb3cgKi8KK2VuZDoKKwlhdG9taWNfZGVjKCZyZWZzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNTViOTQ2MS4uN2I1MTY5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC02MzgsMTMgKzYzOCwxMyBAQAogI2Vsc2UKIAkJCSIJcHVzaGZcbiIKIAkJCS8qCi0JCQkgKiBTa2lwIGNzLCBpcCwgb3JpZ19heC4KKwkJCSAqIFNraXAgY3MsIGlwLCBvcmlnX2F4IGFuZCBncy4KIAkJCSAqIHRyYW1wb2xpbmVfaGFuZGxlcigpIHdpbGwgcGx1ZyBpbiB0aGVzZSB2YWx1ZXMKIAkJCSAqLwotCQkJIglzdWJsICQxMiwgJWVzcFxuIgorCQkJIglzdWJsICQxNiwgJWVzcFxuIgogCQkJIglwdXNobCAlZnNcbiIKLQkJCSIJcHVzaGwgJWRzXG4iCiAJCQkiCXB1c2hsICVlc1xuIgorCQkJIglwdXNobCAlZHNcbiIKIAkJCSIJcHVzaGwgJWVheFxuIgogCQkJIglwdXNobCAlZWJwXG4iCiAJCQkiCXB1c2hsICVlZGlcbiIKQEAgLTY1NSwxMCArNjU1LDEwIEBACiAJCQkiCW1vdmwgJWVzcCwgJWVheFxuIgogCQkJIgljYWxsIHRyYW1wb2xpbmVfaGFuZGxlclxuIgogCQkJLyogTW92ZSBmbGFncyB0byBjcyAqLwotCQkJIgltb3ZsIDUyKCVlc3ApLCAlZWR4XG4iCi0JCQkiCW1vdmwgJWVkeCwgNDgoJWVzcClcbiIKKwkJCSIJbW92bCA1NiglZXNwKSwgJWVkeFxuIgorCQkJIgltb3ZsICVlZHgsIDUyKCVlc3ApXG4iCiAJCQkvKiBSZXBsYWNlIHNhdmVkIGZsYWdzIHdpdGggdHJ1ZSByZXR1cm4gYWRkcmVzcy4gKi8KLQkJCSIJbW92bCAlZWF4LCA1MiglZXNwKVxuIgorCQkJIgltb3ZsICVlYXgsIDU2KCVlc3ApXG4iCiAJCQkiCXBvcGwgJWVieFxuIgogCQkJIglwb3BsICVlY3hcbiIKIAkJCSIJcG9wbCAlZWR4XG4iCkBAIC02NjYsOCArNjY2LDggQEAKIAkJCSIJcG9wbCAlZWRpXG4iCiAJCQkiCXBvcGwgJWVicFxuIgogCQkJIglwb3BsICVlYXhcbiIKLQkJCS8qIFNraXAgaXAsIG9yaWdfYXgsIGVzLCBkcywgZnMgKi8KLQkJCSIJYWRkbCAkMjAsICVlc3BcbiIKKwkJCS8qIFNraXAgZHMsIGVzLCBmcywgZ3MsIG9yaWdfYXggYW5kIGlwICovCisJCQkiCWFkZGwgJDI0LCAlZXNwXG4iCiAJCQkiCXBvcGZcbiIKICNlbmRpZgogCQkJIglyZXRcbiIpOwpAQCAtNjkxLDYgKzY5MSw3IEBACiAJcmVncy0+Y3MgPSBfX0tFUk5FTF9DUzsKICNlbHNlCiAJcmVncy0+Y3MgPSBfX0tFUk5FTF9DUyB8IGdldF9rZXJuZWxfcnBsKCk7CisJcmVncy0+Z3MgPSAwOwogI2VuZGlmCiAJcmVncy0+aXAgPSB0cmFtcG9saW5lX2FkZHJlc3M7CiAJcmVncy0+b3JpZ19heCA9IH4wVUw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYwppbmRleCBjMjVmZGIzLi40NTNiNTc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKQEAgLTEyLDMxICsxMiwzMCBAQAogICoKICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UgdmVyc2lvbiAyLiBTZWUgZmlsZSBDT1BZSU5HIGZvciBkZXRhaWxzLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorICovCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21pY3JvY29kZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQU1EIE1pY3JvY29kZSBVcGRhdGUgRHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJQZXRlciBPcnViYSIpOwpAQCAtNzIsOCArNzEsOCBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG1pY3JvY29kZV9hbWQgewotCXN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyX2FtZCBoZHI7Ci0JdW5zaWduZWQgaW50IG1wYlswXTsKKwlzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlcl9hbWQJaGRyOworCXVuc2lnbmVkIGludAkJCW1wYlswXTsKIH07CiAKICNkZWZpbmUgVUNPREVfTUFYX1NJWkUJCQkyMDQ4CkBAIC0xODQsOCArMTgzLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgKmdldF9uZXh0X3Vjb2RlKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBzaXplLAotCQkJICAgIHVuc2lnbmVkIGludCAqbWNfc2l6ZSkKK3N0YXRpYyB2b2lkICoKK2dldF9uZXh0X3Vjb2RlKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgKm1jX3NpemUpCiB7CiAJdW5zaWduZWQgaW50IHRvdGFsX3NpemU7CiAJdTggc2VjdGlvbl9oZHJbVUNPREVfQ09OVEFJTkVSX1NFQ1RJT05fSERSXTsKQEAgLTIyMyw3ICsyMjIsNiBAQAogCXJldHVybiBtYzsKIH0KIAotCiBzdGF0aWMgaW50IGluc3RhbGxfZXF1aXZfY3B1X3RhYmxlKGNvbnN0IHU4ICpidWYpCiB7CiAJdTggKmNvbnRhaW5lcl9oZHJbVUNPREVfQ09OVEFJTkVSX0hFQURFUl9TSVpFXTsKQEAgLTM3Miw0ICszNzAsMyBAQAogewogCXJldHVybiAmbWljcm9jb2RlX2FtZF9vcHM7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKaW5kZXggYzliNzIxYi4uYTBmMzg1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKQEAgLTcwLDY3ICs3MCw3OCBAQAogICoJCUZpeCBzaWdtYXRjaCgpIG1hY3JvIHRvIGhhbmRsZSBvbGQgQ1BVcyB3aXRoIHBmID09IDAuCiAgKgkJVGhhbmtzIHRvIFN0dWFydCBTd2FsZXMgZm9yIHBvaW50aW5nIG91dCB0aGlzIGJ1Zy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21pY3JvY29kZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiTWljcm9jb2RlIFVwZGF0ZSBEcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlRpZ3JhbiBBaXZhemlhbiA8dGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIE1JQ1JPQ09ERV9WRVJTSU9OIAkiMi4wMCIKKyNkZWZpbmUgTUlDUk9DT0RFX1ZFUlNJT04JIjIuMDAiCiAKLXN0YXRpYyBzdHJ1Y3QgbWljcm9jb2RlX29wcyAqbWljcm9jb2RlX29wczsKK3N0YXRpYyBzdHJ1Y3QgbWljcm9jb2RlX29wcwkqbWljcm9jb2RlX29wczsKIAogLyogbm8gY29uY3VycmVudCAtPndyaXRlKClzIGFyZSBhbGxvd2VkIG9uIC9kZXYvY3B1L21pY3JvY29kZSAqLwogc3RhdGljIERFRklORV9NVVRFWChtaWNyb2NvZGVfbXV0ZXgpOwogCi1zdHJ1Y3QgdWNvZGVfY3B1X2luZm8gdWNvZGVfY3B1X2luZm9bTlJfQ1BVU107CitzdHJ1Y3QgdWNvZGVfY3B1X2luZm8JCXVjb2RlX2NwdV9pbmZvW05SX0NQVVNdOwogRVhQT1JUX1NZTUJPTF9HUEwodWNvZGVfY3B1X2luZm8pOwogCiAjaWZkZWYgQ09ORklHX01JQ1JPQ09ERV9PTERfSU5URVJGQUNFCitzdHJ1Y3QgdXBkYXRlX2Zvcl9jcHUgeworCWNvbnN0IHZvaWQgX191c2VyCSpidWY7CisJc2l6ZV90CQkJc2l6ZTsKK307CisKK3N0YXRpYyBsb25nIHVwZGF0ZV9mb3JfY3B1KHZvaWQgKl91ZmMpCit7CisJc3RydWN0IHVwZGF0ZV9mb3JfY3B1ICp1ZmMgPSBfdWZjOworCWludCBlcnJvcjsKKworCWVycm9yID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfdXNlcihzbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCQkgICAgICB1ZmMtPmJ1ZiwgdWZjLT5zaXplKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKCFlcnJvcikKKwkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGVycm9yOworfQorCiBzdGF0aWMgaW50IGRvX21pY3JvY29kZV91cGRhdGUoY29uc3Qgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7Ci0JY3B1bWFza190IG9sZDsKIAlpbnQgZXJyb3IgPSAwOwogCWludCBjcHU7Ci0KLQlvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CisJc3RydWN0IHVwZGF0ZV9mb3JfY3B1IHVmYyA9IHsgLmJ1ZiA9IGJ1ZiwgLnNpemUgPSBzaXplIH07CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OwogCiAJCWlmICghdWNpLT52YWxpZCkKIAkJCWNvbnRpbnVlOwotCi0JCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKLQkJZXJyb3IgPSBtaWNyb2NvZGVfb3BzLT5yZXF1ZXN0X21pY3JvY29kZV91c2VyKGNwdSwgYnVmLCBzaXplKTsKKwkJZXJyb3IgPSB3b3JrX29uX2NwdShjcHUsIHVwZGF0ZV9mb3JfY3B1LCAmdWZjKTsKIAkJaWYgKGVycm9yIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlpZiAoIWVycm9yKQotCQkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKGNwdSk7CisJCQlicmVhazsKIAl9Ci1vdXQ6Ci0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xOTgsMTggKzIwOSwzMyBAQAogCiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihNSUNST0NPREVfTUlOT1IpOwogI2Vsc2UKLSNkZWZpbmUgbWljcm9jb2RlX2Rldl9pbml0KCkgMAotI2RlZmluZSBtaWNyb2NvZGVfZGV2X2V4aXQoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1pY3JvY29kZV9kZXZfaW5pdCgpCTAKKyNkZWZpbmUgbWljcm9jb2RlX2Rldl9leGl0KCkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIGZha2UgZGV2aWNlIGZvciByZXF1ZXN0X2Zpcm13YXJlICovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWljcm9jb2RlX3BkZXY7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZQkqbWljcm9jb2RlX3BkZXY7CisKK3N0YXRpYyBsb25nIHJlbG9hZF9mb3JfY3B1KHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmbWljcm9jb2RlX211dGV4KTsKKwlpZiAodWNpLT52YWxpZCkgeworCQllcnIgPSBtaWNyb2NvZGVfb3BzLT5yZXF1ZXN0X21pY3JvY29kZV9mdyhzbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCQkJICAmbWljcm9jb2RlX3BkZXYtPmRldik7CisJCWlmICghZXJyKQorCQkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCW11dGV4X3VubG9jaygmbWljcm9jb2RlX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQogCiBzdGF0aWMgc3NpemVfdCByZWxvYWRfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzeikKIHsKLQlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgZGV2LT5pZDsKIAljaGFyICplbmQ7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmQsIDApOwogCWludCBlcnIgPSAwOwpAQCAtMjE4LDIxICsyNDQsOSBAQAogCWlmIChlbmQgPT0gYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodmFsID09IDEpIHsKLQkJY3B1bWFza190IG9sZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQogCQlnZXRfb25saW5lX2NwdXMoKTsKLQkJaWYgKGNwdV9vbmxpbmUoY3B1KSkgewotCQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOwotCQkJbXV0ZXhfbG9jaygmbWljcm9jb2RlX211dGV4KTsKLQkJCWlmICh1Y2ktPnZhbGlkKSB7Ci0JCQkJZXJyID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfZncoY3B1LAotCQkJCQkJJm1pY3JvY29kZV9wZGV2LT5kZXYpOwotCQkJCWlmICghZXJyKQotCQkJCQltaWNyb2NvZGVfb3BzLT5hcHBseV9taWNyb2NvZGUoY3B1KTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmbWljcm9jb2RlX211dGV4KTsKLQkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGQpOwotCQl9CisJCWlmIChjcHVfb25saW5lKGNwdSkpCisJCQllcnIgPSB3b3JrX29uX2NwdShjcHUsIHJlbG9hZF9mb3JfY3B1LCBOVUxMKTsKIAkJcHV0X29ubGluZV9jcHVzKCk7CiAJfQogCWlmIChlcnIpCkBAIC0yNjgsOCArMjgyLDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1jX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gbWNfZGVmYXVsdF9hdHRycywKLQkubmFtZSA9ICJtaWNyb2NvZGUiLAorCS5hdHRycwkJPSBtY19kZWZhdWx0X2F0dHJzLAorCS5uYW1lCQk9ICJtaWNyb2NvZGUiLAogfTsKIAogc3RhdGljIHZvaWQgX19taWNyb2NvZGVfZmluaV9jcHUoaW50IGNwdSkKQEAgLTMyOCw5ICszNDIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtaWNyb2NvZGVfdXBkYXRlX2NwdShpbnQgY3B1KQorc3RhdGljIGxvbmcgbWljcm9jb2RlX3VwZGF0ZV9jcHUodm9pZCAqdW51c2VkKQogewotCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHU7CisJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgZXJyID0gMDsKIAogCS8qCkBAIC0zMzgsMzAgKzM1MiwyNyBAQAogCSAqIG90aGVyd2lzZSBqdXN0IHJlcXVlc3QgYSBmaXJtd2FyZToKIAkgKi8KIAlpZiAodWNpLT52YWxpZCkgewotCQllcnIgPSBtaWNyb2NvZGVfcmVzdW1lX2NwdShjcHUpOwotCX0gZWxzZSB7CQotCQljb2xsZWN0X2NwdV9pbmZvKGNwdSk7CisJCWVyciA9IG1pY3JvY29kZV9yZXN1bWVfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfSBlbHNlIHsKKwkJY29sbGVjdF9jcHVfaW5mbyhzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQlpZiAodWNpLT52YWxpZCAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpCi0JCQllcnIgPSBtaWNyb2NvZGVfb3BzLT5yZXF1ZXN0X21pY3JvY29kZV9mdyhjcHUsCisJCQllcnIgPSBtaWNyb2NvZGVfb3BzLT5yZXF1ZXN0X21pY3JvY29kZV9mdygKKwkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQkJCQkmbWljcm9jb2RlX3BkZXYtPmRldik7CiAJfQogCWlmICghZXJyKQotCQltaWNyb2NvZGVfb3BzLT5hcHBseV9taWNyb2NvZGUoY3B1KTsKKwkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgbWljcm9jb2RlX2luaXRfY3B1KGludCBjcHUpCitzdGF0aWMgaW50IG1pY3JvY29kZV9pbml0X2NwdShpbnQgY3B1KQogewotCWNwdW1hc2tfdCBvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0KLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSk7Ci0JLyogV2Ugc2hvdWxkIGJpbmQgdGhlIHRhc2sgdG8gdGhlIENQVSAqLwotCUJVR19PTihyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdSk7Ci0KKwlpbnQgZXJyOwogCW11dGV4X2xvY2soJm1pY3JvY29kZV9tdXRleCk7Ci0JbWljcm9jb2RlX3VwZGF0ZV9jcHUoY3B1KTsKKwllcnIgPSB3b3JrX29uX2NwdShjcHUsIG1pY3JvY29kZV91cGRhdGVfY3B1LCBOVUxMKTsKIAltdXRleF91bmxvY2soJm1pY3JvY29kZV9tdXRleCk7CiAKLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG1jX3N5c2Rldl9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYpCkBAIC0zNzksOCArMzkwLDExIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCW1pY3JvY29kZV9pbml0X2NwdShjcHUpOwotCXJldHVybiAwOworCWVyciA9IG1pY3JvY29kZV9pbml0X2NwdShjcHUpOworCWlmIChlcnIpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJm1jX2F0dHJfZ3JvdXApOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBtY19zeXNkZXZfcmVtb3ZlKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2KQpAQCAtNDA0LDE0ICs0MTgsMTQgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBvbmx5IENQVSAwIHdpbGwgYXBwbHkgdWNvZGUgaGVyZSAqLwotCW1pY3JvY29kZV91cGRhdGVfY3B1KDApOworCW1pY3JvY29kZV91cGRhdGVfY3B1KE5VTEwpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgbWNfc3lzZGV2X2RyaXZlciA9IHsKLQkuYWRkID0gbWNfc3lzZGV2X2FkZCwKLQkucmVtb3ZlID0gbWNfc3lzZGV2X3JlbW92ZSwKLQkucmVzdW1lID0gbWNfc3lzZGV2X3Jlc3VtZSwKKwkuYWRkCQk9IG1jX3N5c2Rldl9hZGQsCisJLnJlbW92ZQkJPSBtY19zeXNkZXZfcmVtb3ZlLAorCS5yZXN1bWUJCT0gbWNfc3lzZGV2X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBfX2NwdWluaXQgaW50CkBAIC00MjQsNyArNDM4LDkgQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKIAljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCQltaWNyb2NvZGVfaW5pdF9jcHUoY3B1KTsKKwkJaWYgKG1pY3JvY29kZV9pbml0X2NwdShjcHUpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGZhaWxlZCB0byBpbml0IENQVSVkXG4iLAorCQkJICAgICAgIGNwdSk7CiAJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CiAJY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgogCQlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCBhZGRlZFxuIiwgY3B1KTsKQEAgLTQ0OCw3ICs0NjQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fcmVmZGF0YSBtY19jcHVfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBtY19jcHVfY2FsbGJhY2ssCisJLm5vdGlmaWVyX2NhbGwJPSBtY19jcHVfY2FsbGJhY2ssCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtaWNyb2NvZGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCmluZGV4IDVlOWY0ZmMuLjE0OWI5ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKQEAgLTcwLDI4ICs3MCwyOCBAQAogICoJCUZpeCBzaWdtYXRjaCgpIG1hY3JvIHRvIGhhbmRsZSBvbGQgQ1BVcyB3aXRoIHBmID09IDAuCiAgKgkJVGhhbmtzIHRvIFN0dWFydCBTd2FsZXMgZm9yIHBvaW50aW5nIG91dCB0aGlzIGJ1Zy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9taWNyb2NvZGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvY29kZSBVcGRhdGUgRHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51az4iKTsKQEAgLTEyOSwxMiArMTI5LDEzIEBACiAJc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSBzaWdzWzBdOwogfTsKIAotI2RlZmluZSBERUZBVUxUX1VDT0RFX0RBVEFTSVpFIAkoMjAwMCkKKyNkZWZpbmUgREVGQVVMVF9VQ09ERV9EQVRBU0laRQkoMjAwMCkKICNkZWZpbmUgTUNfSEVBREVSX1NJWkUJCShzaXplb2Yoc3RydWN0IG1pY3JvY29kZV9oZWFkZXJfaW50ZWwpKQogI2RlZmluZSBERUZBVUxUX1VDT0RFX1RPVEFMU0laRSAoREVGQVVMVF9VQ09ERV9EQVRBU0laRSArIE1DX0hFQURFUl9TSVpFKQogI2RlZmluZSBFWFRfSEVBREVSX1NJWkUJCShzaXplb2Yoc3RydWN0IGV4dGVuZGVkX3NpZ3RhYmxlKSkKICNkZWZpbmUgRVhUX1NJR05BVFVSRV9TSVpFCShzaXplb2Yoc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSkpCiAjZGVmaW5lIERXU0laRQkJCShzaXplb2YodTMyKSkKKwogI2RlZmluZSBnZXRfdG90YWxzaXplKG1jKSBcCiAJKCgoc3RydWN0IG1pY3JvY29kZV9pbnRlbCAqKW1jKS0+aGRyLnRvdGFsc2l6ZSA/IFwKIAkgKChzdHJ1Y3QgbWljcm9jb2RlX2ludGVsICopbWMpLT5oZHIudG90YWxzaXplIDogXApAQCAtMTk3LDMwICsxOTgsMzEgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLXVwZGF0ZV9tYXRjaF9yZXZpc2lvbihzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlcl9pbnRlbCAqbWNfaGVhZGVyLAlpbnQgcmV2KQordXBkYXRlX21hdGNoX3JldmlzaW9uKHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyX2ludGVsICptY19oZWFkZXIsIGludCByZXYpCiB7CiAJcmV0dXJuIChtY19oZWFkZXItPnJldiA8PSByZXYpID8gMCA6IDE7CiB9CiAKIHN0YXRpYyBpbnQgbWljcm9jb2RlX3Nhbml0eV9jaGVjayh2b2lkICptYykKIHsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemUsIGRhdGFfc2l6ZSwgZXh0X3RhYmxlX3NpemU7CiAJc3RydWN0IG1pY3JvY29kZV9oZWFkZXJfaW50ZWwgKm1jX2hlYWRlciA9IG1jOwogCXN0cnVjdCBleHRlbmRlZF9zaWd0YWJsZSAqZXh0X2hlYWRlciA9IE5VTEw7Ci0Jc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSAqZXh0X3NpZzsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemUsIGRhdGFfc2l6ZSwgZXh0X3RhYmxlX3NpemU7CiAJaW50IHN1bSwgb3JpZ19zdW0sIGV4dF9zaWdjb3VudCA9IDAsIGk7CisJc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSAqZXh0X3NpZzsKIAogCXRvdGFsX3NpemUgPSBnZXRfdG90YWxzaXplKG1jX2hlYWRlcik7CiAJZGF0YV9zaXplID0gZ2V0X2RhdGFzaXplKG1jX2hlYWRlcik7CisKIAlpZiAoZGF0YV9zaXplICsgTUNfSEVBREVSX1NJWkUgPiB0b3RhbF9zaXplKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgIgotCQkJIkJhZCBkYXRhIHNpemUgaW4gbWljcm9jb2RlIGRhdGEgZmlsZVxuIik7CisJCQkJIkJhZCBkYXRhIHNpemUgaW4gbWljcm9jb2RlIGRhdGEgZmlsZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChtY19oZWFkZXItPmxkcnZlciAhPSAxIHx8IG1jX2hlYWRlci0+aGRydmVyICE9IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGVycm9yISAiCi0JCQkiVW5rbm93biBtaWNyb2NvZGUgdXBkYXRlIGZvcm1hdFxuIik7CisJCQkJIlVua25vd24gbWljcm9jb2RlIHVwZGF0ZSBmb3JtYXRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZXh0X3RhYmxlX3NpemUgPSB0b3RhbF9zaXplIC0gKE1DX0hFQURFUl9TSVpFICsgZGF0YV9zaXplKTsKQEAgLTMxOCwxMSArMzIwLDE1IEBACiAKIHN0YXRpYyB2b2lkIGFwcGx5X21pY3JvY29kZShpbnQgY3B1KQogeworCXN0cnVjdCBtaWNyb2NvZGVfaW50ZWwgKm1jX2ludGVsOworCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHZhbFsyXTsKLQlpbnQgY3B1X251bSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKLQlzdHJ1Y3QgbWljcm9jb2RlX2ludGVsICptY19pbnRlbCA9IHVjaS0+bWM7CisJaW50IGNwdV9udW07CisKKwljcHVfbnVtID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwl1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKKwltY19pbnRlbCA9IHVjaS0+bWM7CiAKIAkvKiBXZSBzaG91bGQgYmluZCB0aGUgdGFzayB0byB0aGUgQ1BVICovCiAJQlVHX09OKGNwdV9udW0gIT0gY3B1KTsKQEAgLTM0OCwxNSArMzU0LDE3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWljcm9jb2RlX3VwZGF0ZV9sb2NrLCBmbGFncyk7CiAJaWYgKHZhbFsxXSAhPSBtY19pbnRlbC0+aGRyLnJldikgewogCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogQ1BVJWQgdXBkYXRlIGZyb20gcmV2aXNpb24gIgotCQkJIjB4JXggdG8gMHgleCBmYWlsZWRcbiIsIGNwdV9udW0sIHVjaS0+Y3B1X3NpZy5yZXYsIHZhbFsxXSk7CisJCQkJIjB4JXggdG8gMHgleCBmYWlsZWRcbiIsCisJCQljcHVfbnVtLCB1Y2ktPmNwdV9zaWcucmV2LCB2YWxbMV0pOwogCQlyZXR1cm47CiAJfQogCXByaW50ayhLRVJOX0lORk8gIm1pY3JvY29kZTogQ1BVJWQgdXBkYXRlZCBmcm9tIHJldmlzaW9uICIKLQkgICAgICAgIjB4JXggdG8gMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4IFxuIiwKKwkJCSAiMHgleCB0byAweCV4LCBkYXRlID0gJTA0eC0lMDJ4LSUwMnggXG4iLAogCQljcHVfbnVtLCB1Y2ktPmNwdV9zaWcucmV2LCB2YWxbMV0sCiAJCW1jX2ludGVsLT5oZHIuZGF0ZSAmIDB4ZmZmZiwKIAkJbWNfaW50ZWwtPmhkci5kYXRlID4+IDI0LAogCQkobWNfaW50ZWwtPmhkci5kYXRlID4+IDE2KSAmIDB4ZmYpOworCiAJdWNpLT5jcHVfc2lnLnJldiA9IHZhbFsxXTsKIH0KIApAQCAtNDA0LDE4ICs0MTIsMjMgQEAKIAkJbGVmdG92ZXIgIC09IG1jX3NpemU7CiAJfQogCi0JaWYgKG5ld19tYykgewotCQlpZiAoIWxlZnRvdmVyKSB7Ci0JCQlpZiAodWNpLT5tYykKLQkJCQl2ZnJlZSh1Y2ktPm1jKTsKLQkJCXVjaS0+bWMgPSAoc3RydWN0IG1pY3JvY29kZV9pbnRlbCAqKW5ld19tYzsKLQkJCXByX2RlYnVnKCJtaWNyb2NvZGU6IENQVSVkIGZvdW5kIGEgbWF0Y2hpbmcgbWljcm9jb2RlIHVwZGF0ZSB3aXRoIgotCQkJCSAiIHZlcnNpb24gMHgleCAoY3VycmVudD0weCV4KVxuIiwKLQkJCQljcHUsIG5ld19yZXYsIHVjaS0+Y3B1X3NpZy5yZXYpOwotCQl9IGVsc2UKLQkJCXZmcmVlKG5ld19tYyk7CisJaWYgKCFuZXdfbWMpCisJCWdvdG8gb3V0OworCisJaWYgKGxlZnRvdmVyKSB7CisJCXZmcmVlKG5ld19tYyk7CisJCWdvdG8gb3V0OwogCX0KIAorCWlmICh1Y2ktPm1jKQorCQl2ZnJlZSh1Y2ktPm1jKTsKKwl1Y2ktPm1jID0gKHN0cnVjdCBtaWNyb2NvZGVfaW50ZWwgKiluZXdfbWM7CisKKwlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCBmb3VuZCBhIG1hdGNoaW5nIG1pY3JvY29kZSB1cGRhdGUgd2l0aCIKKwkJICIgdmVyc2lvbiAweCV4IChjdXJyZW50PTB4JXgpXG4iLAorCQkJY3B1LCBuZXdfcmV2LCB1Y2ktPmNwdV9zaWcucmV2KTsKKworIG91dDoKIAlyZXR1cm4gKGludClsZWZ0b3ZlcjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMTU2Zjg3NS4uY2E5ODkxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPHRyYWNlL3Bvd2VyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KQEAgLTIyLDYgKzIyLDkgQEAKIAogc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcDsKIAorREVGSU5FX1RSQUNFKHBvd2VyX3N0YXJ0KTsKK0RFRklORV9UUkFDRShwb3dlcl9lbmQpOworCiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKQogewogCSpkc3QgPSAqc3JjOwpAQCAtMzI1LDcgKzMyOCw3IEBACiAJLyoKIAkgKiBSZW1vdmUgdGhpcyBDUFU6CiAJICovCi0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOworCXNldF9jcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSwgZmFsc2UpOwogCWRpc2FibGVfbG9jYWxfQVBJQygpOwogCiAJZm9yICg7OykgewpAQCAtNDc1LDEyICs0NzgsMTMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGNwdW1hc2tfdCBjMWVfbWFzayA9IENQVV9NQVNLX05PTkU7CitzdGF0aWMgY3B1bWFza192YXJfdCBjMWVfbWFzazsKIHN0YXRpYyBpbnQgYzFlX2RldGVjdGVkOwogCiB2b2lkIGMxZV9yZW1vdmVfY3B1KGludCBjcHUpCiB7Ci0JY3B1X2NsZWFyKGNwdSwgYzFlX21hc2spOworCWlmIChjMWVfbWFzayAhPSBOVUxMKQorCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIGMxZV9tYXNrKTsKIH0KIAogLyoKQEAgLTUwOSw4ICs1MTMsOCBAQAogCWlmIChjMWVfZGV0ZWN0ZWQpIHsKIAkJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCQlpZiAoIWNwdV9pc3NldChjcHUsIGMxZV9tYXNrKSkgewotCQkJY3B1X3NldChjcHUsIGMxZV9tYXNrKTsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYzFlX21hc2spKSB7CisJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBjMWVfbWFzayk7CiAJCQkvKgogCQkJICogRm9yY2UgYnJvYWRjYXN0IHNvIEFDUEkgY2FuIG5vdCBpbnRlcmZlcmUuIE5lZWRzCiAJCQkgKiB0byBydW4gd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgYXMgaXQgdXNlcwpAQCAtNTYyLDYgKzU2NiwxNSBAQAogCQlwbV9pZGxlID0gZGVmYXVsdF9pZGxlOwogfQogCit2b2lkIF9faW5pdCBpbml0X2MxZV9tYXNrKHZvaWQpCit7CisJLyogSWYgd2UncmUgdXNpbmcgYzFlX2lkbGUsIHdlIG5lZWQgdG8gYWxsb2NhdGUgYzFlX21hc2suICovCisJaWYgKHBtX2lkbGUgPT0gYzFlX2lkbGUpIHsKKwkJYWxsb2NfY3B1bWFza192YXIoJmMxZV9tYXNrLCBHRlBfS0VSTkVMKTsKKwkJY3B1bWFza19jbGVhcihjMWVfbWFzayk7CisJfQorfQorCiBzdGF0aWMgaW50IF9faW5pdCBpZGxlX3NldHVwKGNoYXIgKnN0cikKIHsKIAlpZiAoIXN0cikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDE0MDE0ZDcuLjc2ZjhmODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJdW5sYXp5X2ZwdSh0c2spOwogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCiAJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGFiYjdlNmEuLmI3NTFhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJdW5sYXp5X2ZwdSh0c2spOwogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCiAJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMTkzNzg3MS4uZmU5MzQ1YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtMTQxNSw2ICsxNDE2LDkgQEAKIAkgICAgdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpKQogCQlyZXQgPSAtMUw7CiAKKwlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9GVFJBQ0UpKSkKKwkJZnRyYWNlX3N5c2NhbGxfZW50ZXIocmVncyk7CisKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpIHsKIAkJaWYgKElTX0lBMzIpCiAJCQlhdWRpdF9zeXNjYWxsX2VudHJ5KEFVRElUX0FSQ0hfSTM4NiwKQEAgLTE0MzgsNiArMTQ0Miw5IEBACiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQogCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+YXgpLCByZWdzLT5heCk7CiAKKwlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9GVFJBQ0UpKSkKKwkJZnRyYWNlX3N5c2NhbGxfZXhpdChyZWdzKTsKKwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgMCk7CiAKQEAgLTE0NTUsNiArMTQ2Miw2IEBACiAJICogc3lzdGVtIGNhbGwgaW5zdHJ1Y3Rpb24uCiAJICovCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApICYmCi0JICAgIHRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwoY3VycmVudCwgU0lHVFJBUCwgU0lHX0RGTCkpCisJICAgIHRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwoY3VycmVudCwgU0lHVFJBUCkpCiAJCXNlbmRfc2lndHJhcChjdXJyZW50LCByZWdzLCAwLCBUUkFQX0JSS1BUKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwppbmRleCA0MDAzMzFiLi4zYTk3YTRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCkBAIC0xNTMsNyArMTUzLDYgQEAKIHN0YXRpYyBzc2l6ZV90IF9faW5pdCBzZXR1cF9wY3B1X3JlbWFwKHNpemVfdCBzdGF0aWNfc2l6ZSkKIHsKIAlzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCB2bTsKLQlwZ19kYXRhX3QgKmxhc3Q7CiAJc2l6ZV90IHB0cnNfc2l6ZSwgZHluX3NpemU7CiAJdW5zaWduZWQgaW50IGNwdTsKIAlzc2l6ZV90IHJldDsKQEAgLTE2MiwyMiArMTYxLDkgQEAKIAkgKiBJZiBsYXJnZSBwYWdlIGlzbid0IHN1cHBvcnRlZCwgdGhlcmUncyBubyBiZW5lZml0IGluIGRvaW5nCiAJICogdGhpcy4gIEFsc28sIG9uIG5vbi1OVU1BLCBlbWJlZGRpbmcgaXMgYmV0dGVyLgogCSAqLwotCWlmICghY3B1X2hhc19wc2UgfHwgcGNwdV9uZWVkX251bWEoKSkKKwlpZiAoIWNwdV9oYXNfcHNlIHx8ICFwY3B1X25lZWRfbnVtYSgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxhc3QgPSBOVUxMOwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwotCi0JCWlmIChub2RlX29ubGluZShub2RlKSAmJiBOT0RFX0RBVEEobm9kZSkgJiYKLQkJICAgIGxhc3QgJiYgbGFzdCAhPSBOT0RFX0RBVEEobm9kZSkpCi0JCQlnb3RvIHByb2NlZWQ7Ci0KLQkJbGFzdCA9IE5PREVfREFUQShub2RlKTsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci0KLXByb2NlZWQ6CiAJLyoKIAkgKiBDdXJyZW50bHkgc3VwcG9ydHMgb25seSBzaW5nbGUgcGFnZS4gIFN1cHBvcnRpbmcgbXVsdGlwbGUKIAkgKiBwYWdlcyB3b24ndCBiZSB0b28gZGlmZmljdWx0IGlmIGl0IGV2ZXIgYmVjb21lcyBuZWNlc3NhcnkuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZGZjYzc0YS4uMTQ0MjUxNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJaWYgKCFvbnNpZ3N0YWNrKSB7CiAJCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLwogCQlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgewotCQkJaWYgKHNhc19zc19mbGFncyhzcCkgPT0gMCkKKwkJCWlmIChjdXJyZW50LT5zYXNfc3Nfc2l6ZSkKIAkJCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwogCQl9IGVsc2UgewogI2lmZGVmIENPTkZJR19YODZfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGVmN2QxMDEuLjU4ZDI0ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMTAxLDExICsxMDEsMTEgQEAKIERFRklORV9QRVJfQ1BVKHUxNiwgY3B1X2xsY19pZCkgPSBCQURfQVBJQ0lEOwogCiAvKiByZXByZXNlbnRpbmcgSFQgc2libGluZ3Mgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotREVGSU5FX1BFUl9DUFUoY3B1bWFza190LCBjcHVfc2libGluZ19tYXApOworREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X3NpYmxpbmdfbWFwKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfc2libGluZ19tYXApOwogCiAvKiByZXByZXNlbnRpbmcgSFQgYW5kIGNvcmUgc2libGluZ3Mgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotREVGSU5FX1BFUl9DUFUoY3B1bWFza190LCBjcHVfY29yZV9tYXApOworREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X2NvcmVfbWFwKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfY29yZV9tYXApOwogCiAvKiBQZXIgQ1BVIGJvZ29taXBzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCkBAIC0xMTUsMTEgKzExNSw2IEBACiBhdG9taWNfdCBpbml0X2RlYXNzZXJ0ZWQ7CiAKICNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCi0KLS8qIHdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMgKi8KLWNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2tfbWFwW01BWF9OVU1OT0RFU10gX19yZWFkX21vc3RseSA9Ci0JCQkJeyBbMCAuLi4gTUFYX05VTU5PREVTLTFdID0gQ1BVX01BU0tfTk9ORSB9OwotRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2tfbWFwKTsKIC8qIHdoaWNoIG5vZGUgZWFjaCBsb2dpY2FsIENQVSBpcyBvbiAqLwogaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5ID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IDAgfTsKIEVYUE9SVF9TWU1CT0woY3B1X3RvX25vZGVfbWFwKTsKQEAgLTEyOCw3ICsxMjMsNyBAQAogc3RhdGljIHZvaWQgbWFwX2NwdV90b19ub2RlKGludCBjcHUsIGludCBub2RlKQogewogCXByaW50ayhLRVJOX0lORk8gIk1hcHBpbmcgY3B1ICVkIHRvIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7Ci0JY3B1bWFza19zZXRfY3B1KGNwdSwgJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pOwogCWNwdV90b19ub2RlX21hcFtjcHVdID0gbm9kZTsKIH0KIApAQCAtMTM5LDcgKzEzNCw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJVbm1hcHBpbmcgY3B1ICVkIGZyb20gYWxsIG5vZGVzXG4iLCBjcHUpOwogCWZvciAobm9kZSA9IDA7IG5vZGUgPCBNQVhfTlVNTk9ERVM7IG5vZGUrKykKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CiAJY3B1X3RvX25vZGVfbWFwW2NwdV0gPSAwOwogfQogI2Vsc2UgLyogIShDT05GSUdfTlVNQSAmJiBDT05GSUdfWDg2XzMyKSAqLwpAQCAtMzAxLDcgKzI5Niw3IEBACiAJX19mbHVzaF90bGJfYWxsKCk7CiAjZW5kaWYKIAotCS8qIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBzZXR0aW5nIGNwdV9vbmxpbmVfbWFwICovCisJLyogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgY3B1X29ubGluZV9tYXNrICovCiAJc2V0X2NwdV9zaWJsaW5nX21hcChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl3bWIoKTsKIApAQCAtMzM0LDYgKzMyOSwyMyBAQAogCWNwdV9pZGxlKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSworLyogSW4gdGhpcyBjYXNlLCBsbGNfc2hhcmVkX21hcCBpcyBhIHBvaW50ZXIgdG8gYSBjcHVtYXNrLiAqLworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfY3B1aW5mb194ODYoc3RydWN0IGNwdWluZm9feDg2ICpkc3QsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqc3JjKQoreworCXN0cnVjdCBjcHVtYXNrICpsbGMgPSBkc3QtPmxsY19zaGFyZWRfbWFwOworCSpkc3QgPSAqc3JjOworCWRzdC0+bGxjX3NoYXJlZF9tYXAgPSBsbGM7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlfY3B1aW5mb194ODYoc3RydWN0IGNwdWluZm9feDg2ICpkc3QsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqc3JjKQoreworCSpkc3QgPSAqc3JjOworfQorI2VuZGlmIC8qIENPTkZJR19DUFVNQVNLX09GRlNUQUNLICovCisKIC8qCiAgKiBUaGUgYm9vdHN0cmFwIGtlcm5lbCBlbnRyeSBjb2RlIGhhcyBzZXQgdGhlc2UgdXAuIFNhdmUgdGhlbSBmb3IKICAqIGEgZ2l2ZW4gQ1BVCkBAIC0zNDMsNyArMzU1LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoaWQpOwogCi0JKmMgPSBib290X2NwdV9kYXRhOworCWNvcHlfY3B1aW5mb194ODYoYywgJmJvb3RfY3B1X2RhdGEpOwogCWMtPmNwdV9pbmRleCA9IGlkOwogCWlmIChpZCAhPSAwKQogCQlpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGMpOwpAQCAtMzY3LDE1ICszNzksMTUgQEAKIAkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBjcHVfc2libGluZ19tYXNrKGkpKTsKIAkJCQljcHVtYXNrX3NldF9jcHUoaSwgY3B1X2NvcmVfbWFzayhjcHUpKTsKIAkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBjcHVfY29yZV9tYXNrKGkpKTsKLQkJCQljcHVtYXNrX3NldF9jcHUoaSwgJmMtPmxsY19zaGFyZWRfbWFwKTsKLQkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmby0+bGxjX3NoYXJlZF9tYXApOworCQkJCWNwdW1hc2tfc2V0X2NwdShpLCBjLT5sbGNfc2hhcmVkX21hcCk7CisJCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgby0+bGxjX3NoYXJlZF9tYXApOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJY3B1bWFza19zZXRfY3B1KGNwdSwgY3B1X3NpYmxpbmdfbWFzayhjcHUpKTsKIAl9CiAKLQljcHVtYXNrX3NldF9jcHUoY3B1LCAmYy0+bGxjX3NoYXJlZF9tYXApOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIGMtPmxsY19zaGFyZWRfbWFwKTsKIAogCWlmIChjdXJyZW50X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMgPT0gMSkgewogCQljcHVtYXNrX2NvcHkoY3B1X2NvcmVfbWFzayhjcHUpLCBjcHVfc2libGluZ19tYXNrKGNwdSkpOwpAQCAtMzg2LDggKzM5OCw4IEBACiAJZm9yX2VhY2hfY3B1KGksIGNwdV9zaWJsaW5nX3NldHVwX21hc2spIHsKIAkJaWYgKHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSAhPSBCQURfQVBJQ0lEICYmCiAJCSAgICBwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPT0gcGVyX2NwdShjcHVfbGxjX2lkLCBpKSkgewotCQkJY3B1bWFza19zZXRfY3B1KGksICZjLT5sbGNfc2hhcmVkX21hcCk7Ci0JCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOworCQkJY3B1bWFza19zZXRfY3B1KGksIGMtPmxsY19zaGFyZWRfbWFwKTsKKwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNwdV9kYXRhKGkpLmxsY19zaGFyZWRfbWFwKTsKIAkJfQogCQlpZiAoYy0+cGh5c19wcm9jX2lkID09IGNwdV9kYXRhKGkpLnBoeXNfcHJvY19pZCkgewogCQkJY3B1bWFza19zZXRfY3B1KGksIGNwdV9jb3JlX21hc2soY3B1KSk7CkBAIC00MjUsMTIgKzQzNyw3IEBACiAJaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgfHwgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCiAJCXJldHVybiBjcHVfY29yZV9tYXNrKGNwdSk7CiAJZWxzZQotCQlyZXR1cm4gJmMtPmxsY19zaGFyZWRfbWFwOwotfQotCi1jcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAoaW50IGNwdSkKLXsKLQlyZXR1cm4gKmNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpOworCQlyZXR1cm4gYy0+bGxjX3NoYXJlZF9tYXA7CiB9CiAKIHN0YXRpYyB2b2lkIGltcHJlc3NfZnJpZW5kcyh2b2lkKQpAQCAtODk3LDkgKzkwNCw4IEBACiAgKi8KIHN0YXRpYyBfX2luaXQgdm9pZCBkaXNhYmxlX3NtcCh2b2lkKQogewotCS8qIHVzZSB0aGUgcmVhZC93cml0ZSBwb2ludGVycyB0byB0aGUgcHJlc2VudCBhbmQgcG9zc2libGUgbWFwcyAqLwotCWNwdW1hc2tfY29weSgmY3B1X3ByZXNlbnRfbWFwLCBjcHVtYXNrX29mKDApKTsKLQljcHVtYXNrX2NvcHkoJmNwdV9wb3NzaWJsZV9tYXAsIGNwdW1hc2tfb2YoMCkpOworCWluaXRfY3B1X3ByZXNlbnQoY3B1bWFza19vZigwKSk7CisJaW5pdF9jcHVfcG9zc2libGUoY3B1bWFza19vZigwKSk7CiAJc21wYm9vdF9jbGVhcl9pb19hcGljX2lycXMoKTsKIAogCWlmIChzbXBfZm91bmRfY29uZmlnKQpAQCAtMTAzMSw2ICsxMDM3LDggQEAKICAqLwogdm9pZCBfX2luaXQgbmF0aXZlX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogeworCXVuc2lnbmVkIGludCBpOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc21wX2NwdV9pbmRleF9kZWZhdWx0KCk7CiAJY3VycmVudF9jcHVfZGF0YSA9IGJvb3RfY3B1X2RhdGE7CkBAIC0xMDQ0LDYgKzEwNTIsMTQgQEAKIAlib290X2NwdV9sb2dpY2FsX2FwaWNpZCA9IGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOwogI2VuZGlmCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSAwOyAgLyogbmVlZGVkPyAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCWFsbG9jX2NwdW1hc2tfdmFyKCZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSksIEdGUF9LRVJORUwpOworCQlhbGxvY19jcHVtYXNrX3ZhcigmcGVyX2NwdShjcHVfY29yZV9tYXAsIGkpLCBHRlBfS0VSTkVMKTsKKwkJYWxsb2NfY3B1bWFza192YXIoJmNwdV9kYXRhKGkpLmxsY19zaGFyZWRfbWFwLCBHRlBfS0VSTkVMKTsKKwkJY3B1bWFza19jbGVhcihwZXJfY3B1KGNwdV9jb3JlX21hcCwgaSkpOworCQljcHVtYXNrX2NsZWFyKHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSk7CisJCWNwdW1hc2tfY2xlYXIoY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOworCX0KIAlzZXRfY3B1X3NpYmxpbmdfbWFwKDApOwogCiAJZW5hYmxlX0lSX3gyYXBpYygpOwpAQCAtMTEzMiwxMSArMTE0OCwxMSBAQAogCiAKIC8qCi0gKiBjcHVfcG9zc2libGVfbWFwIHNob3VsZCBiZSBzdGF0aWMsIGl0IGNhbm5vdCBjaGFuZ2UgYXMgY3B1J3MKKyAqIGNwdV9wb3NzaWJsZV9tYXNrIHNob3VsZCBiZSBzdGF0aWMsIGl0IGNhbm5vdCBjaGFuZ2UgYXMgY3B1J3MKICAqIGFyZSBvbmxpbmVkLCBvciBvZmZsaW5lZC4gVGhlIHJlYXNvbiBpcyBwZXItY3B1IGRhdGEtc3RydWN0dXJlcwogICogYXJlIGFsbG9jYXRlZCBieSBzb21lIG1vZHVsZXMgYXQgaW5pdCB0aW1lLCBhbmQgZG9udCBleHBlY3QgdG8KICAqIGRvIHRoaXMgZHluYW1pY2FsbHkgb24gY3B1IGFycml2YWwvZGVwYXJ0dXJlLgotICogY3B1X3ByZXNlbnRfbWFwIG9uIHRoZSBvdGhlciBoYW5kIGNhbiBjaGFuZ2UgZHluYW1pY2FsbHkuCisgKiBjcHVfcHJlc2VudF9tYXNrIG9uIHRoZSBvdGhlciBoYW5kIGNhbiBjaGFuZ2UgZHluYW1pY2FsbHkuCiAgKiBJbiBjYXNlIHdoZW4gY3B1X2hvdHBsdWcgaXMgbm90IGNvbXBpbGVkLCB0aGVuIHdlIHJlc29ydCB0byBjdXJyZW50CiAgKiBiZWhhdmlvdXIsIHdoaWNoIGlzIGNwdV9wb3NzaWJsZSA9PSBjcHVfcHJlc2VudC4KICAqIC0gQXNob2sgUmFqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUwppbmRleCAzYmRiNjQ4Li5mZjVjODczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKQEAgLTMzMiwzICszMzIsNSBAQAogCS5sb25nIHN5c19kdXAzCQkJLyogMzMwICovCiAJLmxvbmcgc3lzX3BpcGUyCiAJLmxvbmcgc3lzX2lub3RpZnlfaW5pdDEKKwkubG9uZyBzeXNfcHJlYWR2CisJLmxvbmcgc3lzX3B3cml0ZXYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwppbmRleCA3OWMwNzMyLi5kZWI1ZWJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCkBAIC0yNzUsNiArMjc1LDggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIHV2X2ZsdXNoX3RsYl9tYXNrKTsKKwogLyoqCiAgKiB1dl9mbHVzaF90bGJfb3RoZXJzIC0gZ2xvYmFsbHkgcHVyZ2UgdHJhbnNsYXRpb24gY2FjaGUgb2YgYSB2aXJ0dWFsCiAgKiBhZGRyZXNzIG9yIGFsbCBUTEIncwpAQCAtMzA0LDggKzMwNiw3IEBACiAJCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyB2YSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza190LCBmbHVzaF90bGJfbWFzayk7Ci0Jc3RydWN0IGNwdW1hc2sgKmZsdXNoX21hc2sgPSAmX19nZXRfY3B1X3ZhcihmbHVzaF90bGJfbWFzayk7CisJc3RydWN0IGNwdW1hc2sgKmZsdXNoX21hc2sgPSBfX2dldF9jcHVfdmFyKHV2X2ZsdXNoX3RsYl9tYXNrKTsKIAlpbnQgaTsKIAlpbnQgYml0OwogCWludCBibGFkZTsKQEAgLTc1NSw2ICs3NTYsMTAgQEAKIAlpZiAoIWlzX3V2X3N5c3RlbSgpKQogCQlyZXR1cm4gMDsKIAorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjdXJfY3B1KQorCQlhbGxvY19jcHVtYXNrX3Zhcl9ub2RlKCZwZXJfY3B1KHV2X2ZsdXNoX3RsYl9tYXNrLCBjdXJfY3B1KSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3VyX2NwdSkpOworCiAJdXZfYmF1X3JldHJ5X2xpbWl0ID0gMTsKIAl1dl9uc2hpZnQgPSB1dl9odWJfaW5mby0+bl92YWw7CiAJdXZfbW1hc2sgPSAoMVVMIDw8IHV2X2h1Yl9pbmZvLT5uX3ZhbCkgLSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCAwYTMwM2MzLi5hNTg1MDRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwpAQCAtNTksNyArNTksOCBAQAogCiBjb25maWcgS1ZNX1RSQUNFCiAJYm9vbCAiS1ZNIHRyYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBLVk0gJiYgTUFSS0VSUyAmJiBTWVNGUworCWRlcGVuZHMgb24gS1ZNICYmIFNZU0ZTCisJc2VsZWN0IE1BUktFUlMKIAlzZWxlY3QgUkVMQVkKIAlzZWxlY3QgREVCVUdfRlMKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL01ha2VmaWxlIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKaW5kZXggMDg1Mzc3NC4uZmRkMzBkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAKIG1taW90cmFjZS15CQkJOj0ga21taW8ubyBwZl9pbi5vIG1taW8tbW9kLm8KIG9iai0kKENPTkZJR19NTUlPVFJBQ0VfVEVTVCkJKz0gdGVzdG1taW90cmFjZS5vCiAKLW9iai0kKENPTkZJR19OVU1BKQkJKz0gbnVtYV8kKEJJVFMpLm8KK29iai0kKENPTkZJR19OVU1BKQkJKz0gbnVtYS5vIG51bWFfJChCSVRTKS5vCiBvYmotJChDT05GSUdfSzhfTlVNQSkJCSs9IGs4dG9wb2xvZ3lfNjQubwogb2JqLSQoQ09ORklHX0FDUElfTlVNQSkJCSs9IHNyYXRfJChCSVRTKS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwppbmRleCA1YmM1ZDE2Li44MTI2ZThkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCkBAIC00MCw3ICs0MCw2IEBACiAKIAlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAotCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOwogCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SKnNtcF9wcm9jZXNzb3JfaWQoKTsKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOwogCUJVR19PTighcHRlX25vbmUoKihrbWFwX3B0ZS1pZHgpKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggZGI4MWU5YS4uNzQ5NTU5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtMTA1NCwxNyArMTA1NCw0NyBAQAogY29uc3QgaW50IHJvZGF0YV90ZXN0X2RhdGEgPSAweEMzOwogRVhQT1JUX1NZTUJPTF9HUEwocm9kYXRhX3Rlc3RfZGF0YSk7CiAKK3N0YXRpYyBpbnQga2VybmVsX3NldF90b19yZWFkb25seTsKKwordm9pZCBzZXRfa2VybmVsX3RleHRfcncodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF90ZXh0KTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBQRk5fQUxJR04oX2V0ZXh0KSAtIHN0YXJ0OworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgd3JpdGVcbiIsCisJCSBzdGFydCwgc3RhcnQrc2l6ZSk7CisKKwlzZXRfcGFnZXNfcncodmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZSA+PiBQQUdFX1NISUZUKTsKK30KKwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF90ZXh0KTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBQRk5fQUxJR04oX2V0ZXh0KSAtIHN0YXJ0OworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgb25seVxuIiwKKwkJIHN0YXJ0LCBzdGFydCtzaXplKTsKKworCXNldF9wYWdlc19ybyh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplID4+IFBBR0VfU0hJRlQpOworfQorCiB2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IFBGTl9BTElHTihfdGV4dCk7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gUEZOX0FMSUdOKF9ldGV4dCkgLSBzdGFydDsKIAotI2lmbmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLQkvKiBEeW5hbWljIHRyYWNpbmcgbW9kaWZpZXMgdGhlIGtlcm5lbCB0ZXh0IHNlY3Rpb24gKi8KIAlzZXRfcGFnZXNfcm8odmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAlwcmludGsoS0VSTl9JTkZPICJXcml0ZSBwcm90ZWN0aW5nIHRoZSBrZXJuZWwgdGV4dDogJWx1a1xuIiwKIAkJc2l6ZSA+PiAxMCk7CiAKKwlrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gMTsKKwogI2lmZGVmIENPTkZJR19DUEFfREVCVUcKIAlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIENQQTogUmV2ZXJ0aW5nICVseC0lbHhcbiIsCiAJCXN0YXJ0LCBzdGFydCtzaXplKTsKQEAgLTEwNzMsNyArMTEwMyw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiVGVzdGluZyBDUEE6IHdyaXRlIHByb3RlY3RpbmcgYWdhaW5cbiIpOwogCXNldF9wYWdlc19ybyh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplPj5QQUdFX1NISUZUKTsKICNlbmRpZgotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCiAJc3RhcnQgKz0gc2l6ZTsKIAlzaXplID0gKHVuc2lnbmVkIGxvbmcpX19lbmRfcm9kYXRhIC0gc3RhcnQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggNTRlZmE1N2QuLjE3NTNlODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTczNCwyMSArNzM0LDQ4IEBACiBjb25zdCBpbnQgcm9kYXRhX3Rlc3RfZGF0YSA9IDB4QzM7CiBFWFBPUlRfU1lNQk9MX0dQTChyb2RhdGFfdGVzdF9kYXRhKTsKIAorc3RhdGljIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5OworCit2b2lkIHNldF9rZXJuZWxfdGV4dF9ydyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fQUxJR04oX3N0ZXh0KTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IFBGTl9BTElHTihfX3N0YXJ0X3JvZGF0YSk7CisKKwlpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpCisJCXJldHVybjsKKworCXByX2RlYnVnKCJTZXQga2VybmVsIHRleHQ6ICVseCAtICVseCBmb3IgcmVhZCB3cml0ZVxuIiwKKwkJIHN0YXJ0LCBlbmQpOworCisJc2V0X21lbW9yeV9ydyhzdGFydCwgKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKTsKK30KKwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF9zdGV4dCk7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBQRk5fQUxJR04oX19zdGFydF9yb2RhdGEpOworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgb25seVxuIiwKKwkJIHN0YXJ0LCBlbmQpOworCisJc2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKTsKK30KKwogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fQUxJR04oX3N0ZXh0KSwgZW5kID0gUEZOX0FMSUdOKF9fZW5kX3JvZGF0YSk7CiAJdW5zaWduZWQgbG9uZyByb2RhdGFfc3RhcnQgPQogCQkoKHVuc2lnbmVkIGxvbmcpX19zdGFydF9yb2RhdGEgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSzsKIAotI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotCS8qIER5bmFtaWMgdHJhY2luZyBtb2RpZmllcyB0aGUga2VybmVsIHRleHQgc2VjdGlvbiAqLwotCXN0YXJ0ID0gcm9kYXRhX3N0YXJ0OwotI2VuZGlmCi0KIAlwcmludGsoS0VSTl9JTkZPICJXcml0ZSBwcm90ZWN0aW5nIHRoZSBrZXJuZWwgcmVhZC1vbmx5IGRhdGE6ICVsdWtcbiIsCiAJICAgICAgIChlbmQgLSBzdGFydCkgPj4gMTApOwogCXNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCk7CiAKKwlrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gMTsKKwogCS8qCiAJICogVGhlIHJvZGF0YSBzZWN0aW9uIChidXQgbm90IHRoZSBrZXJuZWwgdGV4dCEpIHNob3VsZCBhbHNvIGJlCiAJICogbm90LWV4ZWN1dGFibGUuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwppbmRleCBiZmYwYzkwLi44MDU2NTQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAogaW50IGlzX2lvX21hcHBpbmdfcG9zc2libGUocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLSNpZm5kZWYgQ09ORklHX1g4Nl9QQUUKKyNpZiAhZGVmaW5lZChDT05GSUdfWDg2X1BBRSkgJiYgZGVmaW5lZChDT05GSUdfUEhZU19BRERSX1RfNjRCSVQpCiAJLyogVGhlcmUgaXMgbm8gd2F5IHRvIG1hcCBncmVhdGVyIHRoYW4gMSA8PCAzMiBhZGRyZXNzIHdpdGhvdXQgUEFFICovCiAJaWYgKGJhc2UgKyBzaXplID4gMHgxMDAwMDAwMDBVTEwpCiAJCXJldHVybiAwOwpAQCAtMzksNiArMzksNyBAQAogCiAJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAorCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOwogCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CiAJc2V0X3B0ZShrbWFwX3B0ZSAtIGlkeCwgcGZuX3B0ZShwZm4sIHByb3QpKTsKQEAgLTcyLDcgKzczLDYgQEAKIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGt2YWRkciAmIFBBR0VfTUFTSzsKIAllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAkvKgogCSAqIEZvcmNlIG90aGVyIG1hcHBpbmdzIHRvIE9vcHMgaWYgdGhleSdsbCB0cnkgdG8gYWNjZXNzIHRoaXMgcHRlCiAJICogd2l0aG91dCBmaXJzdCByZW1hcCBpdC4gIEtlZXBpbmcgc3RhbGUgbWFwcGluZ3MgYXJvdW5kIGlzIGEgYmFkIGlkZWEKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21taW8tbW9kLmMgYi9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jCmluZGV4IDJjNGJhYTguLmM5MzQyZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21taW8tbW9kLmMKKysrIGIvYXJjaC94ODYvbW0vbW1pby1tb2QuYwpAQCAtMzc4LDI3ICszNzgsMzQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIGNwdW1hc2tfdCBkb3duZWRfY3B1czsKK3N0YXRpYyBjcHVtYXNrX3Zhcl90IGRvd25lZF9jcHVzOwogCiBzdGF0aWMgdm9pZCBlbnRlcl91bmlwcm9jZXNzb3Iodm9pZCkKIHsKIAlpbnQgY3B1OwogCWludCBlcnI7CiAKKwlpZiAoZG93bmVkX2NwdXMgPT0gTlVMTCAmJgorCSAgICAhYWxsb2NfY3B1bWFza192YXIoJmRvd25lZF9jcHVzLCBHRlBfS0VSTkVMKSkgeworCQlwcl9ub3RpY2UoTkFNRSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1hc2tcbiIpOworCQlnb3RvIG91dDsKKwl9CisKIAlnZXRfb25saW5lX2NwdXMoKTsKLQlkb3duZWRfY3B1cyA9IGNwdV9vbmxpbmVfbWFwOwotCWNwdV9jbGVhcihmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApLCBkb3duZWRfY3B1cyk7CisJY3B1bWFza19jb3B5KGRvd25lZF9jcHVzLCBjcHVfb25saW5lX21hc2spOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKSwgZG93bmVkX2NwdXMpOwogCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpCiAJCXByX25vdGljZShOQU1FICJEaXNhYmxpbmcgbm9uLWJvb3QgQ1BVcy4uLlxuIik7CiAJcHV0X29ubGluZV9jcHVzKCk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGRvd25lZF9jcHVzKSB7CisJZm9yX2VhY2hfY3B1KGNwdSwgZG93bmVkX2NwdXMpIHsKIAkJZXJyID0gY3B1X2Rvd24oY3B1KTsKIAkJaWYgKCFlcnIpCiAJCQlwcl9pbmZvKE5BTUUgIkNQVSVkIGlzIGRvd24uXG4iLCBjcHUpOwogCQllbHNlCiAJCQlwcl9lcnIoTkFNRSAiRXJyb3IgdGFraW5nIENQVSVkIGRvd246ICVkXG4iLCBjcHUsIGVycik7CiAJfQorb3V0OgogCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpCiAJCXByX3dhcm5pbmcoTkFNRSAibXVsdGlwbGUgQ1BVcyBzdGlsbCBvbmxpbmUsICIKIAkJCQkJCSJtYXkgbWlzcyBldmVudHMuXG4iKTsKQEAgLTQxMSwxMCArNDE4LDEwIEBACiAJaW50IGNwdTsKIAlpbnQgZXJyOwogCi0JaWYgKGNwdXNfd2VpZ2h0KGRvd25lZF9jcHVzKSA9PSAwKQorCWlmIChkb3duZWRfY3B1cyA9PSBOVUxMIHx8IGNwdW1hc2tfd2VpZ2h0KGRvd25lZF9jcHVzKSA9PSAwKQogCQlyZXR1cm47CiAJcHJfbm90aWNlKE5BTUUgIlJlLWVuYWJsaW5nIENQVXMuLi5cbiIpOwotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgZG93bmVkX2NwdXMpIHsKKwlmb3JfZWFjaF9jcHUoY3B1LCBkb3duZWRfY3B1cykgewogCQllcnIgPSBjcHVfdXAoY3B1KTsKIAkJaWYgKCFlcnIpCiAJCQlwcl9pbmZvKE5BTUUgImVuYWJsZWQgQ1BVJWQuXG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYS5jIGIvYXJjaC94ODYvbW0vbnVtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MGRmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9tbS9udW1hLmMKQEAgLTAsMCArMSw2NyBAQAorLyogQ29tbW9uIGNvZGUgZm9yIDMyIGFuZCA2NC1iaXQgTlVNQSAqLworI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUworIyBkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCisjZWxzZQorIyBkZWZpbmUgREJHKHguLi4pCisjZW5kaWYKKworLyoKKyAqIFdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMKKyAqLworY3B1bWFza192YXJfdCBub2RlX3RvX2NwdW1hc2tfbWFwW01BWF9OVU1OT0RFU107CitFWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFza19tYXApOworCisvKgorICogQWxsb2NhdGUgbm9kZV90b19jcHVtYXNrX21hcCBiYXNlZCBvbiBudW1iZXIgb2YgYXZhaWxhYmxlIG5vZGVzCisgKiBSZXF1aXJlcyBub2RlX3Bvc3NpYmxlX21hcCB0byBiZSB2YWxpZC4KKyAqCisgKiBOb3RlOiBub2RlX3RvX2NwdW1hc2soKSBpcyBub3QgdmFsaWQgdW50aWwgYWZ0ZXIgdGhpcyBpcyBkb25lLgorICogKFVzZSBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTIHRvIGNoZWNrIHRoaXMuKQorICovCit2b2lkIF9faW5pdCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IG5vZGUsIG51bSA9IDA7CisKKwkvKiBzZXR1cCBucl9ub2RlX2lkcyBpZiBub3QgZG9uZSB5ZXQgKi8KKwlpZiAobnJfbm9kZV9pZHMgPT0gTUFYX05VTU5PREVTKSB7CisJCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlX3Bvc3NpYmxlX21hcCkKKwkJCW51bSA9IG5vZGU7CisJCW5yX25vZGVfaWRzID0gbnVtICsgMTsKKwl9CisKKwkvKiBhbGxvY2F0ZSB0aGUgbWFwICovCisJZm9yIChub2RlID0gMDsgbm9kZSA8IG5yX25vZGVfaWRzOyBub2RlKyspCisJCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pOworCisJLyogY3B1bWFza19vZl9ub2RlKCkgd2lsbCBub3cgd29yayAqLworCXByX2RlYnVnKCJOb2RlIHRvIGNwdW1hc2sgbWFwIGZvciAlZCBub2Rlc1xuIiwgbnJfbm9kZV9pZHMpOworfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUworLyoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCisgKi8KK2NvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCit7CisJaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImNwdW1hc2tfb2Zfbm9kZSglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCisJCQlub2RlLCBucl9ub2RlX2lkcyk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIGNwdV9ub25lX21hc2s7CisJfQorCWlmIChub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImNwdW1hc2tfb2Zfbm9kZSglZCk6IG5vIG5vZGVfdG9fY3B1bWFza19tYXAhXG4iLAorCQkJbm9kZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKKwl9CisJcmV0dXJuIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Cit9CitFWFBPUlRfU1lNQk9MKGNwdW1hc2tfb2Zfbm9kZSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfNjQuYyBiL2FyY2gveDg2L21tL251bWFfNjQuYwppbmRleCA2NGM5Y2YwLi5kNzNhYWE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCkBAIC0yMCwxMiArMjAsNiBAQAogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2s4Lmg+CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTCi0jIGRlZmluZSBEQkcoeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgeCkKLSNlbHNlCi0jIGRlZmluZSBEQkcoeC4uLikKLSNlbmRpZgotCiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtNQVhfTlVNTk9ERVNdIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7CiAKQEAgLTQ5LDEyICs0Myw2IEBACiBFWFBPUlRfRUFSTFlfUEVSX0NQVV9TWU1CT0woeDg2X2NwdV90b19ub2RlX21hcCk7CiAKIC8qCi0gKiBXaGljaCBsb2dpY2FsIENQVXMgYXJlIG9uIHdoaWNoIG5vZGVzCi0gKi8KLWNwdW1hc2tfdCAqbm9kZV90b19jcHVtYXNrX21hcDsKLUVYUE9SVF9TWU1CT0wobm9kZV90b19jcHVtYXNrX21hcCk7Ci0KLS8qCiAgKiBHaXZlbiBhIHNoaWZ0IHZhbHVlLCB0cnkgdG8gcG9wdWxhdGUgbWVtbm9kZW1hcFtdCiAgKiBSZXR1cm5zIDoKICAqIDEgaWYgT0sKQEAgLTY2MSwzNiArNjQ5LDYgQEAKICNlbmRpZgogCiAKLS8qCi0gKiBBbGxvY2F0ZSBub2RlX3RvX2NwdW1hc2tfbWFwIGJhc2VkIG9uIG51bWJlciBvZiBhdmFpbGFibGUgbm9kZXMKLSAqIFJlcXVpcmVzIG5vZGVfcG9zc2libGVfbWFwIHRvIGJlIHZhbGlkLgotICoKLSAqIE5vdGU6IG5vZGVfdG9fY3B1bWFzaygpIGlzIG5vdCB2YWxpZCB1bnRpbCBhZnRlciB0aGlzIGlzIGRvbmUuCi0gKiAoVXNlIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgdG8gY2hlY2sgdGhpcy4pCi0gKi8KLXZvaWQgX19pbml0IHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgbm9kZSwgbnVtID0gMDsKLQljcHVtYXNrX3QgKm1hcDsKLQotCS8qIHNldHVwIG5yX25vZGVfaWRzIGlmIG5vdCBkb25lIHlldCAqLwotCWlmIChucl9ub2RlX2lkcyA9PSBNQVhfTlVNTk9ERVMpIHsKLQkJZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG5vZGVfcG9zc2libGVfbWFwKQotCQkJbnVtID0gbm9kZTsKLQkJbnJfbm9kZV9pZHMgPSBudW0gKyAxOwotCX0KLQotCS8qIGFsbG9jYXRlIHRoZSBtYXAgKi8KLQltYXAgPSBhbGxvY19ib290bWVtX2xvdyhucl9ub2RlX2lkcyAqIHNpemVvZihjcHVtYXNrX3QpKTsKLQlEQkcoIm5vZGVfdG9fY3B1bWFza19tYXAgYXQgJXAgZm9yICVkIG5vZGVzXG4iLCBtYXAsIG5yX25vZGVfaWRzKTsKLQotCXByX2RlYnVnKCJOb2RlIHRvIGNwdW1hc2sgbWFwIGF0ICVwIGZvciAlZCBub2Rlc1xuIiwKLQkJIG1hcCwgbnJfbm9kZV9pZHMpOwotCi0JLyogbm9kZV90b19jcHVtYXNrKCkgd2lsbCBub3cgd29yayAqLwotCW5vZGVfdG9fY3B1bWFza19tYXAgPSBtYXA7Ci19Ci0KIHZvaWQgX19jcHVpbml0IG51bWFfc2V0X25vZGUoaW50IGNwdSwgaW50IG5vZGUpCiB7CiAJaW50ICpjcHVfdG9fbm9kZV9tYXAgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX25vZGVfbWFwKTsKQEAgLTcyMywxMiArNjgxLDEyIEBACiAKIHZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KQogewotCWNwdV9zZXQoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW2Vhcmx5X2NwdV90b19ub2RlKGNwdSldKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW2Vhcmx5X2NwdV90b19ub2RlKGNwdSldKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpCiB7Ci0JY3B1X2NsZWFyKGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7CisJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW2Vhcmx5X2NwdV90b19ub2RlKGNwdSldKTsKIH0KIAogI2Vsc2UgLyogQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLwpAQCAtNzM5LDIwICs2OTcsMjAgQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9jcHVtYXNrKGludCBjcHUsIGludCBlbmFibGUpCiB7CiAJaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwotCWNwdW1hc2tfdCAqbWFzazsKKwlzdHJ1Y3QgY3B1bWFzayAqbWFzazsKIAljaGFyIGJ1Zls2NF07CiAKLQlpZiAobm9kZV90b19jcHVtYXNrX21hcCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibm9kZV90b19jcHVtYXNrX21hcCBOVUxMXG4iKTsKKwltYXNrID0gbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKKwlpZiAobWFzayA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAibm9kZV90b19jcHVtYXNrX21hcFslaV0gTlVMTFxuIiwgbm9kZSk7CiAJCWR1bXBfc3RhY2soKTsKIAkJcmV0dXJuOwogCX0KIAotCW1hc2sgPSAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKIAlpZiAoZW5hYmxlKQotCQljcHVfc2V0KGNwdSwgKm1hc2spOworCQljcHVtYXNrX3NldF9jcHUoY3B1LCBtYXNrKTsKIAllbHNlCi0JCWNwdV9jbGVhcihjcHUsICptYXNrKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtYXNrKTsKIAogCWNwdWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1hc2spOwogCXByaW50ayhLRVJOX0RFQlVHICIlcyBjcHUgJWQgbm9kZSAlZDogbWFzayBub3cgJXNcbiIsCkBAIC03OTksNTkgKzc1Nyw2IEBACiAJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKIH0KIAotCi0vKiBlbXB0eSBjcHVtYXNrICovCi1zdGF0aWMgY29uc3QgY3B1bWFza190IGNwdV9tYXNrX25vbmU7Ci0KLS8qCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgotICovCi1jb25zdCBjcHVtYXNrX3QgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSkKLXsKLQlpZiAobm9kZV90b19jcHVtYXNrX21hcCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJjcHVtYXNrX29mX25vZGUoJWQpOiBubyBub2RlX3RvX2NwdW1hc2tfbWFwIVxuIiwKLQkJCW5vZGUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiAoY29uc3QgY3B1bWFza190ICopJmNwdV9vbmxpbmVfbWFwOwotCX0KLQlpZiAobm9kZSA+PSBucl9ub2RlX2lkcykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY3B1bWFza19vZl9ub2RlKCVkKTogbm9kZSA+IG5yX25vZGVfaWRzKCVkKVxuIiwKLQkJCW5vZGUsIG5yX25vZGVfaWRzKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gJmNwdV9tYXNrX25vbmU7Ci0JfQotCXJldHVybiAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKLX0KLUVYUE9SVF9TWU1CT0woY3B1bWFza19vZl9ub2RlKTsKLQotLyoKLSAqIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCi0gKgotICogU2lkZSBub3RlOiB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIHJldHVybmVkIGNwdW1hc2sgb24gdGhlIHN0YWNrCi0gKiBzbyB3aXRoIGEgaGlnaCBOUl9DUFVTIGNvdW50LCBleGNlc3NpdmUgc3RhY2sgc3BhY2UgaXMgdXNlZC4gIFRoZQotICogbm9kZV90b19jcHVtYXNrX3B0ciBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZS4KLSAqLwotY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKLXsKLQlpZiAobm9kZV90b19jcHVtYXNrX21hcCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJub2RlX3RvX2NwdW1hc2soJWQpOiBubyBub2RlX3RvX2NwdW1hc2tfbWFwIVxuIiwgbm9kZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIGNwdV9vbmxpbmVfbWFwOwotCX0KLQlpZiAobm9kZSA+PSBucl9ub2RlX2lkcykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkibm9kZV90b19jcHVtYXNrKCVkKTogbm9kZSA+IG5yX25vZGVfaWRzKCVkKVxuIiwKLQkJCW5vZGUsIG5yX25vZGVfaWRzKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gY3B1X21hc2tfbm9uZTsKLQl9Ci0JcmV0dXJuIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Ci19Ci1FWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFzayk7Ci0KIC8qCiAgKiAtLS0tLS0tLS0gZW5kIG9mIGRlYnVnIHZlcnNpb25zIG9mIHRoZSBudW1hIGZ1bmN0aW9ucyAtLS0tLS0tLS0KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKaW5kZXggNGM0YTUxYy4uODE5YjEzMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCkBAIC0zODAsNyArMzgwLDcgQEAKIHsKICNpZmRlZiBDT05GSUdfU01QCiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlyZXR1cm4gKGNwdSAhPSBmaXJzdF9jcHUocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpKTsKKwlyZXR1cm4gY3B1ICE9IGNwdW1hc2tfZmlyc3QoX19nZXRfY3B1X3ZhcihjcHVfc2libGluZ19tYXApKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2kzODYuYyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKaW5kZXggZjIzNGEzNy4uZjE4MTdmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC0yNTgsMjQgKzI1OCw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIGxhdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjaV91bm1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXU2NCBhZGRyID0gKHU2NCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JZnJlZV9tZW10eXBlKGFkZHIsIGFkZHIgKyB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOwotfQotCi1zdGF0aWMgdm9pZCBwY2lfdHJhY2tfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXU2NCBhZGRyID0gKHU2NCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpCi0JCQkJCQkmIF9QQUdFX0NBQ0hFX01BU0s7Ci0KLQlyZXNlcnZlX21lbXR5cGUoYWRkciwgYWRkciArIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgZmxhZ3MsIE5VTEwpOwotfQotCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9tbWFwX29wcyA9IHsKLQkub3BlbiAgPSBwY2lfdHJhY2tfbW1hcF9wYWdlX3JhbmdlLAotCS5jbG9zZSA9IHBjaV91bm1hcF9wYWdlX3JhbmdlLAogCS5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLAogfTsKIApAQCAtMjgzLDExICsyNjYsNiBAQAogCQkJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSkKIHsKIAl1bnNpZ25lZCBsb25nIHByb3Q7Ci0JdTY0IGFkZHIgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBsZW4gPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFnczsKLQlpbnQgcmV0dmFsOwogCiAJLyogSS9PIHNwYWNlIGNhbm5vdCBiZSBhY2Nlc3NlZCB2aWEgbm9ybWFsIHByb2Nlc3NvciBsb2FkcyBhbmQKIAkgKiBzdG9yZXMgb24gdGhpcyBwbGF0Zm9ybS4KQEAgLTMwOCwzMCArMjg2LDYgQEAKIAogCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocHJvdCk7CiAKLQlmbGFncyA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICYgX1BBR0VfQ0FDSEVfTUFTSzsKLQlyZXR2YWwgPSByZXNlcnZlX21lbXR5cGUoYWRkciwgYWRkciArIGxlbiwgZmxhZ3MsICZuZXdfZmxhZ3MpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlpZiAoZmxhZ3MgIT0gbmV3X2ZsYWdzKSB7Ci0JCWlmICghaXNfbmV3X21lbXR5cGVfYWxsb3dlZChmbGFncywgbmV3X2ZsYWdzKSkgewotCQkJZnJlZV9tZW10eXBlKGFkZHIsIGFkZHIrbGVuKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWZsYWdzID0gbmV3X2ZsYWdzOwotCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IF9fcGdwcm90KAotCQkJKHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICYgfl9QQUdFX0NBQ0hFX01BU0spIHwKLQkJCWZsYWdzKTsKLQl9Ci0KLQlpZiAoKCh2bWEtPnZtX3Bnb2ZmIDwgbWF4X2xvd19wZm5fbWFwcGVkKSB8fAotCSAgICAgKHZtYS0+dm1fcGdvZmYgPj0gKDFVTDw8KDMyIC0gUEFHRV9TSElGVCkpICYmCi0JICAgICAgdm1hLT52bV9wZ29mZiA8IG1heF9wZm5fbWFwcGVkKSkgJiYKLQkgICAgaW9yZW1hcF9jaGFuZ2VfYXR0cigodW5zaWduZWQgbG9uZylfX3ZhKGFkZHIpLCBsZW4sIGZsYWdzKSkgewotCQlmcmVlX21lbXR5cGUoYWRkciwgYWRkciArIGxlbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3Bnb2ZmLAogCQkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKIAkJCSAgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCkpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wb3dlci9NYWtlZmlsZSBiL2FyY2gveDg2L3Bvd2VyL01ha2VmaWxlCmluZGV4IDlmZjRkNWIuLjU4YjMyZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L3Bvd2VyL01ha2VmaWxlCkBAIC0xLDIgKzEsNyBAQAorIyBfX3Jlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCkgcmVzdG9yZXMgJWdzIGFmdGVyIFMzIHJlc3VtZSBhbmQgc28gc2hvdWxkIG5vdAorIyBpdHNlbGYgYmUgc3RhY2stcHJvdGVjdGVkCitub3N0YWNrcCA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKK0NGTEFHU19jcHVfJChCSVRTKS5vCTo9ICQobm9zdGFja3ApCisKIG9iai0kKENPTkZJR19QTV9TTEVFUCkJCSs9IGNwdV8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gaGliZXJuYXRlXyQoQklUUykubyBoaWJlcm5hdGVfYXNtXyQoQklUUykubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NtcC5jIGIvYXJjaC94ODYveGVuL3NtcC5jCmluZGV4IDhkNDcwNTYuLjU4NWE2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zbXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc21wLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCQlyYyA9IEhZUEVSVklTT1JfdmNwdV9vcChWQ1BVT1BfaXNfdXAsIGksIE5VTEwpOwogCQlpZiAocmMgPj0gMCkgewogCQkJbnVtX3Byb2Nlc3NvcnMrKzsKLQkJCWNwdV9zZXQoaSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCQlzZXRfY3B1X3Bvc3NpYmxlKGksIHRydWUpOwogCQl9CiAJfQogfQpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJd2hpbGUgKChudW1fcG9zc2libGVfY3B1cygpID4gMSkgJiYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiBtYXhfY3B1cykpIHsKIAkJZm9yIChjcHUgPSBucl9jcHVfaWRzIC0gMTsgIWNwdV9wb3NzaWJsZShjcHUpOyBjcHUtLSkKIAkJCWNvbnRpbnVlOwotCQljcHVfY2xlYXIoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKKwkJc2V0X2NwdV9wb3NzaWJsZShjcHUsIGZhbHNlKTsKIAl9CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUgKGNwdSkgewpAQCAtMjEwLDcgKzIxMCw3IEBACiAJCWlmIChJU19FUlIoaWRsZSkpCiAJCQlwYW5pYygiZmFpbGVkIGZvcmsgZm9yIENQVSAlZCIsIGNwdSk7CiAKLQkJY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7CisJCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvS2NvbmZpZyBiL2FyY2gveHRlbnNhL0tjb25maWcKaW5kZXggOTgxMjAwOC4uZmE2ZGM0ZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvS2NvbmZpZworKysgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCkBAIC00LDE2ICs0LDEzIEBACiBtYWlubWVudSAiTGludXgvWHRlbnNhIEtlcm5lbCBDb25maWd1cmF0aW9uIgogCiBjb25maWcgRlJBTUVfUE9JTlRFUgotCWJvb2wKLQlkZWZhdWx0IG4KKwlkZWZfYm9vbCBuCiAKIGNvbmZpZyBaT05FX0RNQQotCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBYVEVOU0EKLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCXNlbGVjdCBIQVZFX0lERQogCWhlbHAKIAkgIFh0ZW5zYSBwcm9jZXNzb3JzIGFyZSAzMi1iaXQgUklTQyBtYWNoaW5lcyBkZXNpZ25lZCBieSBUZW5zaWxpY2EKQEAgLTI0LDI4ICsyMSwyNSBAQAogCSAgYSBob21lIHBhZ2UgYXQgPGh0dHA6Ly94dGVuc2Euc291cmNlZm9yZ2UubmV0Lz4uCiAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQotCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBHRU5FUklDX0ZJTkRfTkVYVF9CSVQKLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19IV0VJR0hUCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAogY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQorCitjb25maWcgR0VORVJJQ19HUElPCisJZGVmX2Jvb2wgeQogCiBjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCi0JYm9vbAotCWRlZmF1bHQgbgorCWRlZl9ib29sIG4KIAogY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAotCWJvb2wKLQlkZWZhdWx0IG4KKwlkZWZfYm9vbCBuCiAKIGNvbmZpZyBOT19JT1BPUlQKIAlkZWZfYm9vbCB5CkBAIC01NCw5ICs0OCwxOCBAQAogCWludAogCWRlZmF1bHQgMTAwCiAKK2NvbmZpZyBHRU5FUklDX1RJTUUKKwlkZWZfYm9vbCB5CisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCitjb25maWcgTU1VCisJZGVmX2Jvb2wgbgorCitjb25maWcgVkFSSUFOVF9JUlFfU1dJVENICisJZGVmX2Jvb2wgbgorCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKIGNob2ljZQpAQCAtNjUsMzggKzY4LDQxIEBACiAKIGNvbmZpZyBYVEVOU0FfVkFSSUFOVF9GU0YKIAlib29sICJmc2YgLSBkZWZhdWx0IChub3QgZ2VuZXJpYykgY29uZmlndXJhdGlvbiIKKwlzZWxlY3QgTU1VCiAKIGNvbmZpZyBYVEVOU0FfVkFSSUFOVF9EQzIzMkIKIAlib29sICJkYzIzMmIgLSBEaWFtb25kIDIzMkwgU3RhbmRhcmQgQ29yZSBSZXYuQiAoTEUpIgorCXNlbGVjdCBNTVUKIAloZWxwCi0JVGhpcyB2YXJpYW50IHJlZmVycyB0byBUZW5zaWxpY2EncyBEaWFtb25kIDIzMkwgU3RhbmRhcmQgY29yZSBSZXYuQiAoTEUpLgotZW5kY2hvaWNlCisJICBUaGlzIHZhcmlhbnQgcmVmZXJzIHRvIFRlbnNpbGljYSdzIERpYW1vbmQgMjMyTCBTdGFuZGFyZCBjb3JlIFJldi5CIChMRSkuCiAKLWNvbmZpZyBNTVUKLQlib29sCi0JZGVmYXVsdCB5Citjb25maWcgWFRFTlNBX1ZBUklBTlRfUzYwMDAKKwlib29sICJzNjAwMCAtIFN0cmV0Y2ggc29mdHdhcmUgY29uZmlndXJhYmxlIHByb2Nlc3NvciIKKwlzZWxlY3QgVkFSSUFOVF9JUlFfU1dJVENICisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCitlbmRjaG9pY2UKIAogY29uZmlnIFhURU5TQV9VTkFMSUdORURfVVNFUgogCWJvb2wgIlVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGluIHVzZSBzcGFjZSIKLQktLS1oZWxwLS0tCi0JICAgVGhlIFh0ZW5zYSBhcmNoaXRlY3R1cmUgY3VycmVudGx5IGRvZXMgbm90IGhhbmRsZSB1bmFsaWduZWQKLQkgICBtZW1vcnkgYWNjZXNzZXMgaW4gaGFyZHdhcmUgYnV0IHRocm91Z2ggYW4gZXhjZXB0aW9uIGhhbmRsZXIuCi0JICAgUGVyIGRlZmF1bHQsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMgYXJlIGRpc2FibGVkIGluIHVzZXIgc3BhY2UuCisJaGVscAorCSAgVGhlIFh0ZW5zYSBhcmNoaXRlY3R1cmUgY3VycmVudGx5IGRvZXMgbm90IGhhbmRsZSB1bmFsaWduZWQKKwkgIG1lbW9yeSBhY2Nlc3NlcyBpbiBoYXJkd2FyZSBidXQgdGhyb3VnaCBhbiBleGNlcHRpb24gaGFuZGxlci4KKwkgIFBlciBkZWZhdWx0LCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZSBkaXNhYmxlZCBpbiB1c2VyIHNwYWNlLgogCi0JICAgU2F5IFkgaGVyZSB0byBlbmFibGUgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaW4gdXNlciBzcGFjZS4KKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGluIHVzZXIgc3BhY2UuCiAKIGNvbmZpZyBQUkVFTVBUCiAJYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIgotCS0tLWhlbHAtLS0KLSAgICAgICAgICAgVGhpcyBvcHRpb24gcmVkdWNlcyB0aGUgbGF0ZW5jeSBvZiB0aGUga2VybmVsIHdoZW4gcmVhY3RpbmcgdG8KLSAgICAgICAgICAgcmVhbC10aW1lIG9yIGludGVyYWN0aXZlIGV2ZW50cyBieSBhbGxvd2luZyBhIGxvdyBwcmlvcml0eSBwcm9jZXNzIHRvCi0gICAgICAgICAgIGJlIHByZWVtcHRlZCBldmVuIGlmIGl0IGlzIGluIGtlcm5lbCBtb2RlIGV4ZWN1dGluZyBhIHN5c3RlbSBjYWxsLgotICAgICAgICAgICBVbmZvcnR1bmF0ZWx5IHRoZSBrZXJuZWwgY29kZSBoYXMgc29tZSByYWNlIGNvbmRpdGlvbnMgaWYgYm90aAotICAgICAgICAgICBDT05GSUdfU01QIGFuZCBDT05GSUdfUFJFRU1QVCBhcmUgZW5hYmxlZCwgc28gdGhpcyBvcHRpb24gaXMKLSAgICAgICAgICAgY3VycmVudGx5IGRpc2FibGVkIGlmIHlvdSBhcmUgYnVpbGRpbmcgYW4gU01QIGtlcm5lbC4KKwloZWxwCisgICAgICAgICAgVGhpcyBvcHRpb24gcmVkdWNlcyB0aGUgbGF0ZW5jeSBvZiB0aGUga2VybmVsIHdoZW4gcmVhY3RpbmcgdG8KKyAgICAgICAgICByZWFsLXRpbWUgb3IgaW50ZXJhY3RpdmUgZXZlbnRzIGJ5IGFsbG93aW5nIGEgbG93IHByaW9yaXR5IHByb2Nlc3MgdG8KKyAgICAgICAgICBiZSBwcmVlbXB0ZWQgZXZlbiBpZiBpdCBpcyBpbiBrZXJuZWwgbW9kZSBleGVjdXRpbmcgYSBzeXN0ZW0gY2FsbC4KKyAgICAgICAgICBVbmZvcnR1bmF0ZWx5IHRoZSBrZXJuZWwgY29kZSBoYXMgc29tZSByYWNlIGNvbmRpdGlvbnMgaWYgYm90aAorICAgICAgICAgIENPTkZJR19TTVAgYW5kIENPTkZJR19QUkVFTVBUIGFyZSBlbmFibGVkLCBzbyB0aGlzIG9wdGlvbiBpcworICAgICAgICAgIGN1cnJlbnRseSBkaXNhYmxlZCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGFuIFNNUCBrZXJuZWwuCiAKLSAgICAgICAgICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEga2VybmVsIGZvciBhIGRlc2t0b3AsIGVtYmVkZGVkCi0gICAgICAgICAgIG9yIHJlYWwtdGltZSBzeXN0ZW0uICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKyAgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIGEgZGVza3RvcCwgZW1iZWRkZWQKKyAgICAgICAgICBvciByZWFsLXRpbWUgc3lzdGVtLiAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKIGNvbmZpZyBNQVRIX0VNVUxBVElPTgogCWJvb2wgIk1hdGggZW11bGF0aW9uIgpAQCAtMTA1LDYgKzExMSwzMiBAQAogCiBlbmRtZW51CiAKK2NvbmZpZyBYVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAorCWRlZl9ib29sIG4KKwloZWxwCisJICBPbiBzb21lIHBsYXRmb3JtcyAoWFQyMDAwLCBmb3IgZXhhbXBsZSksIHRoZSBDUFUgY2xvY2sgcmF0ZSBjYW4KKwkgIHZhcnkuICBUaGUgZnJlcXVlbmN5IGNhbiBiZSBkZXRlcm1pbmVkLCBob3dldmVyLCBieSBtZWFzdXJpbmcKKwkgIGFnYWluc3QgYSB3ZWxsIGtub3duLCBmaXhlZCBmcmVxdWVuY3ksIHN1Y2ggYXMgYW4gVUFSVCBvc2NpbGxhdG9yLgorCitjb25maWcgU0VSSUFMX0NPTlNPTEUKKwlkZWZfYm9vbCBuCisKK2NvbmZpZyBYVEVOU0FfSVNTX05FVFdPUksKKwlkZWZfYm9vbCBuCisKK21lbnUgIkJ1cyBvcHRpb25zIgorCitjb25maWcgUENJCisJYm9vbCAiUENJIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJaGVscAorCSAgRmluZCBvdXQgd2hldGhlciB5b3UgaGF2ZSBhIFBDSSBtb3RoZXJib2FyZC4gUENJIGlzIHRoZSBuYW1lIG9mIGEKKwkgIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZiBpbnNpZGUKKwkgIHlvdXIgYm94LiBPdGhlciBidXMgc3lzdGVtcyBhcmUgSVNBLCBFSVNBLCBNaWNyb0NoYW5uZWwgKE1DQSkgb3IKKwkgIFZFU0EuIElmIHlvdSBoYXZlIFBDSSwgc2F5IFksIG90aGVyd2lzZSBOLgorCitzb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCisKIG1lbnUgIlBsYXRmb3JtIG9wdGlvbnMiCiAKIGNob2ljZQpAQCAtMTEzLDMzICsxNDUsMzUgQEAKIAogY29uZmlnIFhURU5TQV9QTEFURk9STV9JU1MKIAlib29sICJJU1MiCisJc2VsZWN0IFhURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCisJc2VsZWN0IFNFUklBTF9DT05TT0xFCisJc2VsZWN0IFhURU5TQV9JU1NfTkVUV09SSwogCWhlbHAKIAkgIElTUyBpcyBhbiBhY3JvbnltIGZvciBUZW5zaWxpY2EncyBJbnN0cnVjdGlvbiBTZXQgU2ltdWxhdG9yLgogCiBjb25maWcgWFRFTlNBX1BMQVRGT1JNX1hUMjAwMAogCWJvb2wgIlhUMjAwMCIKKwlzZWxlY3QgWFRFTlNBX0NBTElCUkFURV9DQ09VTlQKKwlzZWxlY3QgUENJCiAJaGVscAogCSAgWFQyMDAwIGlzIHRoZSBuYW1lIG9mIFRlbnNpbGljYSdzIGZlYXR1cmUtcmljaCBlbXVsYXRpb24gcGxhdGZvcm0uCiAJICBUaGlzIGhhcmR3YXJlIGlzIGNhcGFibGUgb2YgcnVubmluZyBhIGZ1bGwgTGludXggZGlzdHJpYnV0aW9uLgogCitjb25maWcgWFRFTlNBX1BMQVRGT1JNX1M2MTA1CisJYm9vbCAiUzYxMDUiCisJc2VsZWN0IFNFUklBTF9DT05TT0xFCisKIGVuZGNob2ljZQogCiAKLWNvbmZpZyBYVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAotCWJvb2wgIkF1dG8gY2FsaWJyYXRpb24gb2YgdGhlIENQVSBjbG9jayByYXRlIgotCS0tLWhlbHAtLS0KLQkgIE9uIHNvbWUgcGxhdGZvcm1zIChYVDIwMDAsIGZvciBleGFtcGxlKSwgdGhlIENQVSBjbG9jayByYXRlIGNhbgotCSAgdmFyeS4gIFRoZSBmcmVxdWVuY3kgY2FuIGJlIGRldGVybWluZWQsIGhvd2V2ZXIsIGJ5IG1lYXN1cmluZwotCSAgYWdhaW5zdCBhIHdlbGwga25vd24sIGZpeGVkIGZyZXF1ZW5jeSwgc3VjaCBhcyBhbiBVQVJUIG9zY2lsbGF0b3IuCi0KIGNvbmZpZyBYVEVOU0FfQ1BVX0NMT0NLCiAJaW50ICJDUFUgY2xvY2sgcmF0ZSBbTUh6XSIKIAlkZXBlbmRzIG9uICFYVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAotCWRlZmF1bHQgIjE2IgorCWRlZmF1bHQgMTYKIAogY29uZmlnIEdFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZCiAJYm9vbCAiQXV0byBjYWxpYnJhdGlvbiBvZiB0aGUgQm9nb01JUFMgdmFsdWUiCi0JLS0taGVscC0tLQorCWhlbHAKIAkgIFRoZSBCb2dvTUlQUyB2YWx1ZSBjYW4gZWFzaWx5IGJlIGRlcml2ZWQgZnJvbSB0aGUgQ1BVIGZyZXF1ZW5jeS4KIAogY29uZmlnIENNRExJTkVfQk9PTApAQCAtMTU2LDUyICsxOTAsMjcgQEAKIAkgIHRpbWUgYnkgZW50ZXJpbmcgdGhlbSBoZXJlLiBBcyBhIG1pbmltdW0sIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUKIAkgIG1lbW9yeSBzaXplIGFuZCB0aGUgcm9vdCBkZXZpY2UgKGUuZy4sIG1lbT02NE0gcm9vdD0vZGV2L25mcykuCiAKLWNvbmZpZyBTRVJJQUxfQ09OU09MRQotCWJvb2wKLQlkZXBlbmRzIG9uIFhURU5TQV9QTEFURk9STV9JU1MKLQlkZWZhdWx0IHkKLQotY29uZmlnIFhURU5TQV9JU1NfTkVUV09SSwotCWJvb2wKLQlkZXBlbmRzIG9uIFhURU5TQV9QTEFURk9STV9JU1MKLQlkZWZhdWx0IHkKLQogc291cmNlICJtbS9LY29uZmlnIgogCiBlbmRtZW51CiAKLW1lbnUgIkJ1cyBvcHRpb25zIgotCi1jb25maWcgUENJCi0JYm9vbCAiUENJIHN1cHBvcnQiIGlmICFYVEVOU0FfUExBVEZPUk1fSVNTCi0JZGVwZW5kcyBvbiAhWFRFTlNBX1BMQVRGT1JNX0lTUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgYSBQQ0kgbW90aGVyYm9hcmQuIFBDSSBpcyB0aGUgbmFtZSBvZiBhCi0JICBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCi0JICB5b3VyIGJveC4gT3RoZXIgYnVzIHN5c3RlbXMgYXJlIElTQSwgRUlTQSwgTWljcm9DaGFubmVsIChNQ0EpIG9yCi0JICBWRVNBLiBJZiB5b3UgaGF2ZSBQQ0ksIHNheSBZLCBvdGhlcndpc2UgTi4KLQotc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgotCiBjb25maWcgSE9UUExVRwotCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBkZXZpY2VzIgotCS0tLWhlbHAtLS0KLQlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHBsdWcgZGV2aWNlcyBpbnRvIHlvdXIgY29tcHV0ZXIgd2hpbGUKLQl0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIGFuZCBiZSBhYmxlIHRvIHVzZSB0aGVtIHF1aWNrbHkuICBJbiBtYW55Ci0JY2FzZXMsIHRoZSBkZXZpY2VzIGNhbiBsaWtld2lzZSBiZSB1bnBsdWdnZWQgYXQgYW55IHRpbWUgdG9vLgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gcGx1ZyBkZXZpY2VzIGludG8geW91ciBjb21wdXRlciB3aGlsZQorCSAgdGhlIHN5c3RlbSBpcyBydW5uaW5nLCBhbmQgYmUgYWJsZSB0byB1c2UgdGhlbSBxdWlja2x5LiAgSW4gbWFueQorCSAgY2FzZXMsIHRoZSBkZXZpY2VzIGNhbiBsaWtld2lzZSBiZSB1bnBsdWdnZWQgYXQgYW55IHRpbWUgdG9vLgogCi0JT25lIHdlbGwga25vd24gZXhhbXBsZSBvZiB0aGlzIGlzIFBDTUNJQS0gb3IgUEMtY2FyZHMsIGNyZWRpdC1jYXJkCi0Jc2l6ZSBkZXZpY2VzIHN1Y2ggYXMgbmV0d29yayBjYXJkcywgbW9kZW1zIG9yIGhhcmQgZHJpdmVzIHdoaWNoIGFyZQotCXBsdWdnZWQgaW50byBzbG90cyBmb3VuZCBvbiBhbGwgbW9kZXJuIGxhcHRvcCBjb21wdXRlcnMuICBBbm90aGVyCi0JZXhhbXBsZSwgdXNlZCBvbiBtb2Rlcm4gZGVza3RvcHMgYXMgd2VsbCBhcyBsYXB0b3BzLCBpcyBVU0IuCisJICBPbmUgd2VsbCBrbm93biBleGFtcGxlIG9mIHRoaXMgaXMgUENNQ0lBLSBvciBQQy1jYXJkcywgY3JlZGl0LWNhcmQKKwkgIHNpemUgZGV2aWNlcyBzdWNoIGFzIG5ldHdvcmsgY2FyZHMsIG1vZGVtcyBvciBoYXJkIGRyaXZlcyB3aGljaCBhcmUKKwkgIHBsdWdnZWQgaW50byBzbG90cyBmb3VuZCBvbiBhbGwgbW9kZXJuIGxhcHRvcCBjb21wdXRlcnMuICBBbm90aGVyCisJICBleGFtcGxlLCB1c2VkIG9uIG1vZGVybiBkZXNrdG9wcyBhcyB3ZWxsIGFzIGxhcHRvcHMsIGlzIFVTQi4KIAotCUVuYWJsZSBIT1RQTFVHIGFuZCBidWlsZCBhIG1vZHVsYXIga2VybmVsLiAgR2V0IGFnZW50IHNvZnR3YXJlCi0JKGZyb20gPGh0dHA6Ly9saW51eC1ob3RwbHVnLnNvdXJjZWZvcmdlLm5ldC8+KSBhbmQgaW5zdGFsbCBpdC4KLQlUaGVuIHlvdXIga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIG91dCB0byBhIHVzZXIgbW9kZSAicG9saWN5Ci0JYWdlbnQiICgvc2Jpbi9ob3RwbHVnKSB0byBsb2FkIG1vZHVsZXMgYW5kIHNldCB1cCBzb2Z0d2FyZSBuZWVkZWQKLQl0byB1c2UgZGV2aWNlcyBhcyB5b3UgaG90cGx1ZyB0aGVtLgorCSAgRW5hYmxlIEhPVFBMVUcgYW5kIGJ1aWxkIGEgbW9kdWxhciBrZXJuZWwuICBHZXQgYWdlbnQgc29mdHdhcmUKKwkgIChmcm9tIDxodHRwOi8vbGludXgtaG90cGx1Zy5zb3VyY2Vmb3JnZS5uZXQvPikgYW5kIGluc3RhbGwgaXQuCisJICBUaGVuIHlvdXIga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIG91dCB0byBhIHVzZXIgbW9kZSAicG9saWN5CisJICBhZ2VudCIgKC9zYmluL2hvdHBsdWcpIHRvIGxvYWQgbW9kdWxlcyBhbmQgc2V0IHVwIHNvZnR3YXJlIG5lZWRlZAorCSAgdG8gdXNlIGRldmljZXMgYXMgeW91IGhvdHBsdWcgdGhlbS4KIAogc291cmNlICJkcml2ZXJzL3BjbWNpYS9LY29uZmlnIgogCkBAIC0yMTMsOSArMjIyLDggQEAKIAogIyBvbmx5IGVsZiBzdXBwb3J0ZWQKIGNvbmZpZyBLQ09SRV9FTEYKLSAgICAgICAgYm9vbAorCWRlZl9ib29sIHkKICAgICAgICAgZGVwZW5kcyBvbiBQUk9DX0ZTCi0gICAgICAgIGRlZmF1bHQgeQogICAgICAgICBoZWxwCiAgICAgICAgICAgSWYgeW91IGVuYWJsZWQgc3VwcG9ydCBmb3IgL3Byb2MgZmlsZSBzeXN0ZW0gdGhlbiB0aGUgZmlsZQogICAgICAgICAgIC9wcm9jL2tjb3JlIHdpbGwgY29udGFpbiB0aGUga2VybmVsIGNvcmUgaW1hZ2UgaW4gRUxGIGZvcm1hdC4gVGhpcwpAQCAtMjQwLDcgKzI0OCw3IEBACiBtZW51ICJYdGVuc2EgaW5pdHJkIG9wdGlvbnMiCiAJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAogCi0JY29uZmlnIEVNQkVEREVEX1JBTURJU0sKK2NvbmZpZyBFTUJFRERFRF9SQU1ESVNLCiAJYm9vbCAiRW1iZWQgcm9vdCBmaWxlc3lzdGVtIHJhbWRpc2sgaW50byB0aGUga2VybmVsIgogCiBjb25maWcgRU1CRURERURfUkFNRElTS19JTUFHRQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvTWFrZWZpbGUgYi9hcmNoL3h0ZW5zYS9NYWtlZmlsZQppbmRleCAxZGE1NWZlLi40Y2FmZmFjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9NYWtlZmlsZQorKysgYi9hcmNoL3h0ZW5zYS9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQAogCiB2YXJpYW50LSQoQ09ORklHX1hURU5TQV9WQVJJQU5UX0ZTRikJCTo9IGZzZgogdmFyaWFudC0kKENPTkZJR19YVEVOU0FfVkFSSUFOVF9EQzIzMkIpCQk6PSBkYzIzMmIKK3ZhcmlhbnQtJChDT05GSUdfWFRFTlNBX1ZBUklBTlRfUzYwMDApCQk6PSBzNjAwMAogdmFyaWFudC0kKENPTkZJR19YVEVOU0FfVkFSSUFOVF9MSU5VWF9DVVNUT00pCTo9IGN1c3RvbQogCiBWQVJJQU5UID0gJCh2YXJpYW50LXkpCkBAIC0yNCw2ICsyNSw3IEBACiAKIHBsYXRmb3JtLSQoQ09ORklHX1hURU5TQV9QTEFURk9STV9YVDIwMDApCTo9IHh0MjAwMAogcGxhdGZvcm0tJChDT05GSUdfWFRFTlNBX1BMQVRGT1JNX0lTUykJCTo9IGlzcworcGxhdGZvcm0tJChDT05GSUdfWFRFTlNBX1BMQVRGT1JNX1M2MTA1KQk6PSBzNjEwNQogCiBQTEFURk9STSA9ICQocGxhdGZvcm0teSkKIGV4cG9ydCBQTEFURk9STQpAQCAtNjIsMjAgKzY0LDIzIEBACiAgIGVuZGlmCiBlbmRpZgogCi0jCisjIE9ubHkgYnVpbGQgdmFyaWFudCBhbmQvb3IgcGxhdGZvcm0gaWYgaXQgaW5jbHVkZXMgYSBNYWtlZmlsZQorCitidWlsZHZhciA6PSAkKHNoZWxsIHRlc3QgLWEgJChzcmN0cmVlKS9hcmNoL3h0ZW5zYS92YXJpYW50cy8kKFZBUklBTlQpL01ha2VmaWxlICYmIGVjaG8gYXJjaC94dGVuc2EvdmFyaWFudHMvJChWQVJJQU5UKS8pCitidWlsZHBsZiA6PSAkKHNoZWxsIHRlc3QgLWEgJChzcmN0cmVlKS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvJChQTEFURk9STSkvTWFrZWZpbGUgJiYgZWNobyBhcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvJChQTEFURk9STSkvKQorCisjIEZpbmQgbGliZ2NjLmEKIAogTElCR0NDIDo9ICQoc2hlbGwgJChDQykgJChLQlVJTERfQ0ZMQUdTKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZSkKIAogaGVhZC15CQk6PSBhcmNoL3h0ZW5zYS9rZXJuZWwvaGVhZC5vCiBjb3JlLXkJCSs9IGFyY2gveHRlbnNhL2tlcm5lbC8gYXJjaC94dGVuc2EvbW0vCi1pZm5lcSAoJChQTEFURk9STSksKQotY29yZS15CQkrPSBhcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvJChQTEFURk9STSkvCi1lbmRpZgorY29yZS15CQkrPSAkKGJ1aWxkdmFyKSAkKGJ1aWxkcGxmKQorCiBsaWJzLXkJCSs9IGFyY2gveHRlbnNhL2xpYi8gJChMSUJHQ0MpCiAKIGJvb3QJCTo9IGFyY2gveHRlbnNhL2Jvb3QKIAotCiBhbGw6IHpJbWFnZQogCiBiekltYWdlIDogekltYWdlCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9jb25maWdzL3M2MTA1X2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMWRlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9jb25maWdzL3M2MTA1X2RlZmNvbmZpZwpAQCAtMCwwICsxLDUzMCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNy1zNgorIyBUdWUgTWFyIDEwIDExOjA5OjI2IDIwMDkKKyMKKyMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19YVEVOU0E9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX05PX0lPUE9SVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1JDVT15CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NVSBpcyBub3Qgc2V0CitDT05GSUdfVkFSSUFOVF9JUlFfU1dJVENIPXkKKworIworIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKKyMKKyMgQ09ORklHX1hURU5TQV9WQVJJQU5UX0ZTRiBpcyBub3Qgc2V0CisjIENPTkZJR19YVEVOU0FfVkFSSUFOVF9EQzIzMkIgaXMgbm90IHNldAorQ09ORklHX1hURU5TQV9WQVJJQU5UX1M2MDAwPXkKKyMgQ09ORklHX1hURU5TQV9VTkFMSUdORURfVVNFUiBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hURU5TQV9DQUxJQlJBVEVfQ0NPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09OU09MRT15CisjIENPTkZJR19YVEVOU0FfSVNTX05FVFdPUksgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIG9wdGlvbnMKKyMKKyMgQ09ORklHX1hURU5TQV9QTEFURk9STV9JU1MgaXMgbm90IHNldAorIyBDT05GSUdfWFRFTlNBX1BMQVRGT1JNX1hUMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfWFRFTlNBX1BMQVRGT1JNX1M2MTA1PXkKK0NPTkZJR19YVEVOU0FfQ1BVX0NMT0NLPTMwMAorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzEsMzg0MDAgZGVidWcgYm9vdG1lbV9kZWJ1ZyBsb2dsZXZlbD03IgorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0tDT1JFX0VMRj15CitDT05GSUdfQklORk1UX0ZMQVQ9eQorIyBDT05GSUdfQklORk1UX1pGTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9TSEFSRURfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIFh0ZW5zYSBpbml0cmQgb3B0aW9ucworIworIyBDT05GSUdfRU1CRURERURfUkFNRElTSyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX05PTU1VX1JFR0lPTlM9eQorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDk0YzRjNTMuLjhmYzFjMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTY1LDEzICs2NSwxNyBAQAogIyBkZWZpbmUgX19mbHVzaF9pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZShwLHMpCV9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UocCxzKQogI2VuZGlmCiAKLSNpZiAoRENBQ0hFX1dBWV9TSVpFID4gUEFHRV9TSVpFKQorI2lmIGRlZmluZWQoQ09ORklHX01NVSkgJiYgKERDQUNIRV9XQVlfU0laRSA+IFBBR0VfU0laRSkKIGV4dGVybiB2b2lkIF9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcGFnZV9hbGlhcyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF9pbnZhbGlkYXRlX2RjYWNoZV9wYWdlX2FsaWFzKHVuc2lnbmVkIGxvbmcgdmlydCwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIHBoeXMpIHsgfQogI2VuZGlmCi0jaWYgKElDQUNIRV9XQVlfU0laRSA+IFBBR0VfU0laRSkKKyNpZiBkZWZpbmVkKENPTkZJR19NTVUpICYmIChJQ0FDSEVfV0FZX1NJWkUgPiBQQUdFX1NJWkUpCiBleHRlcm4gdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX3BhZ2VfYWxpYXModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAjZWxzZQotIyBkZWZpbmUgX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlX2FsaWFzKHYscCkJZG8geyB9IHdoaWxlKDApCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlX2FsaWFzKHVuc2lnbmVkIGxvbmcgdmlydCwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgcGh5cykgeyB9CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2RtYS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLmgKaW5kZXggZTMwZjNhYi4uMTM3Y2EzOSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLmgKQEAgLTQ0LDggKzQ0LDkgQEAKICAqCXRoZSB2YWx1ZSBkZXNpcmVkKS4KICAqLwogCisjaWZuZGVmIE1BWF9ETUFfQUREUkVTUwogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCArIFhDSEFMX0tJT19TSVpFIC0gMSkKLQorI2VuZGlmCiAKIC8qIFJlc2VydmUgYW5kIHJlbGVhc2UgYSBETUEgY2hhbm5lbCAqLwogZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZmxhdC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZmxhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YzQ0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9mbGF0LmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0FTTV9YVEVOU0FfRkxBVF9ICisjZGVmaW5lIF9fQVNNX1hURU5TQV9GTEFUX0gKKworI2RlZmluZSBmbGF0X2FyZ3ZwX2VudnBfb25fc3RhY2soKQkJCTAKKyNkZWZpbmUgZmxhdF9vbGRfcmFtX2ZsYWcoZmxhZ3MpCQkJKGZsYWdzKQorI2RlZmluZSBmbGF0X3JlbG9jX3ZhbGlkKHJlbG9jLCBzaXplKQkJCSgocmVsb2MpIDw9IChzaXplKSkKKyNkZWZpbmUgZmxhdF9nZXRfYWRkcl9mcm9tX3JwKHJwLCByZWx2YWwsIGZsYWdzLCBwKQlnZXRfdW5hbGlnbmVkKHJwKQorI2RlZmluZSBmbGF0X3B1dF9hZGRyX2F0X3JwKHJwLCB2YWwsIHJlbHZhbAkpCXB1dF91bmFsaWduZWQodmFsLCBycCkKKyNkZWZpbmUgZmxhdF9nZXRfcmVsb2NhdGVfYWRkcihyZWwpCQkJKHJlbCkKKyNkZWZpbmUgZmxhdF9zZXRfcGVyc2lzdGVudChyZWx2YWwsIHApCQkJMAorCisjZW5kaWYgLyogX19BU01fWFRFTlNBX0ZMQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzYzYjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBHZW5lcmljIEdQSU8gQVBJIGltcGxlbWVudGF0aW9uIGZvciB4dGVuc2EuCisgKgorICogU3RvbGVuIGZyb20geDg2LCB3aGljaCBpcyBkZXJpdmVkIGZyb20gdGhlIGdlbmVyaWMgR1BJTyBBUEkgZm9yIHBvd2VycGM6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3I6IEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1hURU5TQV9HUElPX0gKKyNkZWZpbmUgX0FTTV9YVEVOU0FfR1BJT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorCisvKgorICogSnVzdCBjYWxsIGdwaW9saWIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgaW50IGdwaW8sIGludCB2YWx1ZSkKK3sKKwlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX2NhbnNsZWVwKGdwaW8pOworfQorCisvKgorICogTm90IGltcGxlbWVudGVkLCB5ZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYgLyogQ09ORklHX0dQSU9MSUIgKi8KKworI2VuZGlmIC8qIF9BU01fWFRFTlNBX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMDdiNzI5OS4uZDA0Y2QzYSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oCkBAIC02OSwyMSArNjksMjggQEAKIAogc3RhdGljIGlubGluZSB2b2lkICppb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisjaWZkZWYgQ09ORklHX01NVQogCWlmIChvZmZzZXQgPj0gWENIQUxfS0lPX1BBRERSCiAJICAgICYmIG9mZnNldCA8IFhDSEFMX0tJT19QQUREUiArIFhDSEFMX0tJT19TSVpFKQogCQlyZXR1cm4gKHZvaWQqKShvZmZzZXQtWENIQUxfS0lPX1BBRERSK1hDSEFMX0tJT19CWVBBU1NfVkFERFIpOwotCiAJZWxzZQogCQlCVUcoKTsKKyNlbHNlCisJcmV0dXJuICh2b2lkICopb2Zmc2V0OworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisjaWZkZWYgQ09ORklHX01NVQogCWlmIChvZmZzZXQgPj0gWENIQUxfS0lPX1BBRERSCiAJICAgICYmIG9mZnNldCA8IFhDSEFMX0tJT19QQUREUiArIFhDSEFMX0tJT19TSVpFKQogCQlyZXR1cm4gKHZvaWQqKShvZmZzZXQtWENIQUxfS0lPX1BBRERSK1hDSEFMX0tJT19DQUNIRURfVkFERFIpOwogCWVsc2UKIAkJQlVHKCk7CisjZWxzZQorCXJldHVybiAodm9pZCAqKW9mZnNldDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCAxNjIwZDFlLi5kZmFjODJkIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMTQsNiArMTQsMTMgQEAKICNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgogCisjaWZkZWYgQ09ORklHX1ZBUklBTlRfSVJRX1NXSVRDSAorI2luY2x1ZGUgPHZhcmlhbnQvaXJxLmg+CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZhcmlhbnRfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB2YXJpYW50X2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpIHsgfQorI2VuZGlmCisKICNpZm5kZWYgUExBVEZPUk1fTlJfSVJRUwogIyBkZWZpbmUgUExBVEZPUk1fTlJfSVJRUyAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggNDRjNWJiMC4uMDQ4OTBkNiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11LmgKQEAgLTExLDcgKzExLDEyIEBACiAjaWZuZGVmIF9YVEVOU0FfTU1VX0gKICNkZWZpbmUgX1hURU5TQV9NTVVfSAogCisjaWZuZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vbm9tbXUuaD4KKyNlbHNlCisKIC8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3Q7CiAKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAjZW5kaWYJLyogX1hURU5TQV9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggYzBmZDhlNS4uZGJkODczMSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xMywxNiArMTMsMjAgQEAKICNpZm5kZWYgX1hURU5TQV9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9YVEVOU0FfTU1VX0NPTlRFWFRfSAogCisjaWZuZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vbm9tbXVfY29udGV4dC5oPgorI2Vsc2UKKwogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKKyNpbmNsdWRlIDx2YXJpYW50L2NvcmUuaD4KKwogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgogCi0jZGVmaW5lIFhDSEFMX01NVV9BU0lEX0JJVFMJOAotCiAjaWYgKFhDSEFMX0hBVkVfVExCUyAhPSAxKQogIyBlcnJvciAiTGludXggbXVzdCBoYXZlIGFuIE1NVSEiCiAjZW5kaWYKQEAgLTEzMyw0ICsxMzcsNSBAQAogCiB9CiAKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAjZW5kaWYgLyogX1hURU5TQV9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9ub21tdS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbm9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2UyYzQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbm9tbXUuaApAQCAtMCwwICsxLDMgQEAKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGVuZF9icms7Cit9IG1tX2NvbnRleHRfdDsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL25vbW11X2NvbnRleHQuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL25vbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTllN2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbm9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsMjUgQEAKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAorCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVhY3RpdmF0ZV9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggMTFmN2RjMi4uMTdlMGM1MyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgogCiAvKgogICogRml4ZWQgVExCIHRyYW5zbGF0aW9ucyBpbiB0aGUgcHJvY2Vzc29yLgpAQCAtMzIsOCArMzMsMTQgQEAKICNkZWZpbmUgUEFHRV9TSVpFCQkoX19YVEVOU0FfVUxfQ09OU1QoMSkgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLCQkofihQQUdFX1NJWkUtMSkpCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIFBBR0VfT0ZGU0VUCQlYQ0hBTF9LU0VHX0NBQ0hFRF9WQUREUgogI2RlZmluZSBNQVhfTUVNX1BGTgkJWENIQUxfS1NFR19TSVpFCisjZWxzZQorI2RlZmluZSBQQUdFX09GRlNFVAkJMAorI2RlZmluZSBNQVhfTUVNX1BGTgkJKFBMQVRGT1JNX0RFRkFVTFRfTUVNX1NUQVJUICsgUExBVEZPUk1fREVGQVVMVF9NRU1fU0laRSkKKyNlbmRpZgorCiAjZGVmaW5lIFBHVEFCTEVfU1RBUlQJCTB4ODAwMDAwMDAKIAogLyoKQEAgLTE1MCw5ICsxNTcsMTEgQEAKICAqIGFkZHJlc3Nlcy4KICAqLwogCisjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJKFBMQVRGT1JNX0RFRkFVTFRfTUVNX1NUQVJUID4+IFBBR0VfU0hJRlQpCisKICNkZWZpbmUgX19wYSh4KQkJCSgodW5zaWduZWQgbG9uZykgKHgpIC0gUEFHRV9PRkZTRVQpCiAjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpICh4KSArIFBBR0VfT0ZGU0VUKSkKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgodW5zaWduZWQgbG9uZylwZm4gPCBtYXhfbWFwbnIpCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gQVJDSF9QRk5fT0ZGU0VUICYmICgocGZuKSAtIEFSQ0hfUEZOX09GRlNFVCkgPCBtYXhfbWFwbnIpCiAjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQogIyBlcnJvciBDT05GSUdfRElTQ09OVElHTUVNIG5vdCBzdXBwb3J0ZWQKICNlbmRpZgpAQCAtMTYyLDggKzE3MSw5IEBACiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKIAorI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgV0FOVF9QQUdFX1ZJUlRVQUwKLQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDgwMTRkOTYuLmExMzg3NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4Myw3ICsxODMsMTUgQEAKIAogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpICh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlKSkKIAorI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQQUdFX1NJWkUvc2l6ZW9mKHBnZF90KV07CitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKKyNlbHNlCisjIGRlZmluZSBzd2FwcGVyX3BnX2RpciBOVUxMCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnaW5nX2luaXQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpIHsgfQorI2VuZGlmCiAKIC8qCiAgKiBUaGUgcG1kIGNvbnRhaW5zIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwdGUgcGFnZS4KQEAgLTM4Myw4ICszOTEsNiBAQAogCiAjZWxzZQogCi1leHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKLQogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCiAKIGV4dGVybiAgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKQEAgLTM5OCw5ICs0MDQsNiBAQAogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLGZyb20scGZuLHNpemUscHJvdCkgXAogICAgICAgICAgICAgICAgIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIGZyb20sIHBmbiwgc2l6ZSwgcHJvdCkKIAotCi1leHRlcm4gdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7Ci0KIHR5cGVkZWYgcHRlX3QgKnB0ZV9hZGRyX3Q7CiAKICNlbmRpZiAvKiAhZGVmaW5lZCAoX19BU1NFTUJMWV9fKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGxhdGZvcm0uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BsYXRmb3JtLmgKaW5kZXggZTNkNWE0OC4uN2Q5MzZlNSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGxhdGZvcm0uaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wbGF0Zm9ybS5oCkBAIC03NCwxNiArNzQsNSBAQAogICovCiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9jYWxpYnJhdGVfY2NvdW50ICh2b2lkKTsKIAotLyoKLSAqIHBsYXRmb3JtX2dldF9ydGNfdGltZSByZXR1cm5zIFJUQyBzZWNvbmRzIChyZXR1cm5zIDAgZm9yIG5vIGVycm9yKQotICovCi1leHRlcm4gaW50IHBsYXRmb3JtX2dldF9ydGNfdGltZSh0aW1lX3QqKTsKLQotLyoKLSAqIHBsYXRmb3JtX3NldF9ydGNfdGltZSBzZXQgUlRDIHNlY29uZHMgKHJldHVybnMgMCBmb3Igbm8gZXJyb3IpCi0gKi8KLWV4dGVybiBpbnQgcGxhdGZvcm1fc2V0X3J0Y190aW1lKHRpbWVfdCk7Ci0KLQogI2VuZGlmCS8qIF9YVEVOU0FfUExBVEZPUk1fSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDA3Mzg3ZDMuLjBlYTQ5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDx2YXJpYW50L2NvcmUuaD4KICNpbmNsdWRlIDxhc20vY29wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC0yNSw2ICsyNiw4IEBACiAjIGVycm9yIExpbnV4IHJlcXVpcmVzIHRoZSBYdGVuc2EgV2luZG93ZWQgUmVnaXN0ZXJzIE9wdGlvbi4KICNlbmRpZgogCisjZGVmaW5lIEFSQ0hfU0xBQl9NSU5BTElHTglYQ0hBTF9EQVRBX1dJRFRICisKIC8qCiAgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogMSBHQi4KICAqIFdpbmRvd2VkIGNhbGwgQUJJIHJlcXVpcmVzIGNhbGxlciBhbmQgY2FsbGVlIHRvIGJlIGxvY2F0ZWQgd2l0aGluIHRoZSBzYW1lCkBAIC0zMyw3ICszNiwxMiBAQAogICogdGhlIDEgR0IgcmVxdWlyZW1lbnQgYXBwbGllcyB0byB0aGUgc3RhY2sgYXMgd2VsbC4KICAqLwogCisjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSBUQVNLX1NJWkUJX19YVEVOU0FfVUxfQ09OU1QoMHg0MDAwMDAwMCkKKyNlbHNlCisjZGVmaW5lIFRBU0tfU0laRQkoUExBVEZPUk1fREVGQVVMVF9NRU1fU1RBUlQgKyBQTEFURk9STV9ERUZBVUxUX01FTV9TSVpFKQorI2VuZGlmCisKICNkZWZpbmUgU1RBQ0tfVE9QCVRBU0tfU0laRQogI2RlZmluZSBTVEFDS19UT1BfTUFYCVNUQUNLX1RPUAogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCmluZGV4IGE1MWQzNmEuLjgwZDI0YzQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCkBAIC0xNDYzLDYgKzE0NjMsNyBAQAogCWNhbGx4MAlhMAkJIyBzaG91bGQgbm90IHJldHVybgogMToJagkxYgogCisjaWZkZWYgQ09ORklHX01NVQogLyoKICAqIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZS4gQmFpbCBvdXQhCiAgKi8KQEAgLTE3NzUsNyArMTc3Niw3IEBACiAJYmJzaS5sCWEyLCBQU19VTV9CSVQsIDFmCiAJaglfa2VybmVsX2V4Y2VwdGlvbgogMToJaglfdXNlcl9leGNlcHRpb24KLQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAogLyoKICAqIFN5c3RlbSBDYWxscy4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaGVhZC5TCmluZGV4IDY3ZTY5MTMuLjA4MTdmOWQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2hlYWQuUwpAQCAtNTMsNyArNTMsNyBAQAogMjoJbDMycglhMCwgMWIKIAlqeAlhMAogCi0JLnRleHQKKwkuc2VjdGlvbiAuaW5pdC50ZXh0LCAiYXgiCiAJLmFsaWduIDQKIF9zdGFydHVwOgogCkBAIC0yMzUsOCArMjM1LDkgQEAKICAqLwogCQogLnNlY3Rpb24gIi5ic3MucGFnZV9hbGlnbmVkIiwgInciCisjaWZkZWYgQ09ORklHX01NVQogRU5UUlkoc3dhcHBlcl9wZ19kaXIpCiAJLmZpbGwJUEFHRV9TSVpFLCAxLCAwCisjZW5kaWYKIEVOVFJZKGVtcHR5X3plcm9fcGFnZSkKIAkuZmlsbAlQQUdFX1NJWkUsIDEsIDAKLQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IGYzYjY2ZmIuLmEzNmM4NWUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTEzMiw2ICsxMzIsMTggQEAKIAlzZXRfc3IgKGNhY2hlZF9pcnFfbWFzaywgSU5URU5BQkxFKTsKIH0KIAorc3RhdGljIHZvaWQgeHRlbnNhX2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwl2YXJpYW50X2lycV9lbmFibGUoaXJxKTsKKwl4dGVuc2FfaXJxX3VubWFzayhpcnEpOworfQorCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwl4dGVuc2FfaXJxX21hc2soaXJxKTsKKwl2YXJpYW50X2lycV9kaXNhYmxlKGlycSk7Cit9CisKIHN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc2V0X3NyKDEgPDwgaXJxLCBJTlRDTEVBUik7CkBAIC0xNDYsNiArMTU4LDggQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4dGVuc2FfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCT0gInh0ZW5zYSIsCisJLmVuYWJsZQkJPSB4dGVuc2FfaXJxX2VuYWJsZSwKKwkuZGlzYWJsZQk9IHh0ZW5zYV9pcnFfZGlzYWJsZSwKIAkubWFzawkJPSB4dGVuc2FfaXJxX21hc2ssCiAJLnVubWFzawkJPSB4dGVuc2FfaXJxX3VubWFzaywKIAkuYWNrCQk9IHh0ZW5zYV9pcnFfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYwppbmRleCA2OTY3NWYyLi4xYjkxYTk3IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYwpAQCAtMzYsOCArMzYsNiBAQAogX0Yodm9pZCwgaWRsZSwgKHZvaWQpLCB7IF9fYXNtX18gX192b2xhdGlsZV9fICgid2FpdGkgMCIgOjo6ICJtZW1vcnkiKTsgfSk7CiBfRih2b2lkLCBoZWFydGJlYXQsICh2b2lkKSwgeyB9KTsKIF9GKGludCwgIHBjaWJpb3NfZml4dXAsICh2b2lkKSwgeyByZXR1cm4gMDsgfSk7Ci1fRihpbnQsIGdldF9ydGNfdGltZSwgKHRpbWVfdCogdCksIHsgcmV0dXJuIDA7IH0pOwotX0YoaW50LCBzZXRfcnRjX3RpbWUsICh0aW1lX3QgdCksIHsgcmV0dXJuIDA7IH0pOwogCiAjaWZkZWYgQ09ORklHX1hURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCiBfRih2b2lkLCBjYWxpYnJhdGVfY2NvdW50LCAodm9pZCksCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5MTg1NTk3Li4wMzFmMzY2IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogICogICAgICAgY2hpbGRyZWdzLgogICovCiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCmluZGV4IDRlYzE2MzMuLjFlNWEwMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCkBAIC04NCw3ICs4NCwxMyBAQAogaW50IGluaXRyZF9pc19tYXBwZWQ7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiB2b2lkIGluaXRfbW11KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X21tdSh2b2lkKSB7IH0KKyNlbmRpZgorCitleHRlcm4gdm9pZCB6b25lc19pbml0KHZvaWQpOwogCiAvKgogICogQm9vdCBwYXJhbWV0ZXIgcGFyc2luZy4KQEAgLTI4Niw2ICsyOTIsNyBAQAogCiAKIAlwYWdpbmdfaW5pdCgpOworCXpvbmVzX2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19WVAogIyBpZiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCmluZGV4IDhkZjFlODQuLjg4NDgxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYwpAQCAtMTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI1LDI3ICsyNSwzMSBAQAogI2luY2x1ZGUgPGFzbS90aW1leC5oPgogI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS5oPgogCi0KLURFRklORV9TUElOTE9DSyhydGNfbG9jayk7Ci1FWFBPUlRfU1lNQk9MKHJ0Y19sb2NrKTsKLQotCiAjaWZkZWYgQ09ORklHX1hURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCiB1bnNpZ25lZCBsb25nIGNjb3VudF9wZXJfamlmZnk7CQkvKiBwZXIgMS9IWiAqLwogdW5zaWduZWQgbG9uZyBuc2VjX3Blcl9jY291bnQ7CQkvKiBuc2VjIHBlciBjY291bnQgaW5jcmVtZW50ICovCiAjZW5kaWYKIAotc3RhdGljIGxvbmcgbGFzdF9ydGNfdXBkYXRlID0gMDsKLQotLyoKLSAqIFNjaGVkdWxlciBjbG9jayAtIHJldHVybnMgY3VycmVudCB0aW0gaW4gbmFub3NlYyB1bml0cy4KLSAqLwotCi11bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3N0YXRpYyBjeWNsZV90IGNjb3VudF9yZWFkKHZvaWQpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqICgxMDAwMDAwMDAwIC8gSFopOworCXJldHVybiAoY3ljbGVfdClnZXRfY2NvdW50KCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2NvdW50X2Nsb2Nrc291cmNlID0geworCS5uYW1lID0gImNjb3VudCIsCisJLnJhdGluZyA9IDIwMCwKKwkucmVhZCA9IGNjb3VudF9yZWFkLAorCS5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLyoKKwkgKiBXaXRoIGEgc2hpZnQgb2YgMjIgdGhlIGxvd2VyIGxpbWl0IG9mIHRoZSBjcHUgY2xvY2sgaXMKKwkgKiAxTUh6LCB3aGVyZSBOU0VDX1BFUl9DQ09VTlQgaXMgMTAwMCBvciBhIGJpdCBsZXNzIHRoYW4KKwkgKiAyXjEwOiBTaW5jZSB3ZSBoYXZlIDMyIGJpdHMgYW5kIHRoZSBtdWx0aXBsaWNhdG9yIGNhbgorCSAqIGFscmVhZHkgdGFrZSB1cCBhcyBtdWNoIGFzIDEwIGJpdHMsIHRoaXMgbGVhdmVzIHVzIHdpdGgKKwkgKiByZW1haW5pbmcgdXBwZXIgMjIgYml0cy4KKwkgKi8KKwkuc2hpZnQgPSAyMiwKK307CisKIHN0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9CXRpbWVyX2ludGVycnVwdCwKQEAgLTU1LDExICs1OSwxMSBAQAogCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKLQl0aW1lX3Qgc2VjX28sIHNlY19uID0gMDsKKwl4dGltZS50dl9uc2VjID0gMDsKKwl4dGltZS50dl9zZWMgPSByZWFkX3BlcnNpc3RlbnRfY2xvY2soKTsKIAotCS8qIFRoZSBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYSBmdW5jdGlvbiB0byBjYWxpYnJhdGUgdGhlIHByb2Nlc3NvcgotCSAqIHNwZWVkIGZvciB0aGUgQ0FMSUJSQVRFLgotCSAqLworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKKwkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwogCiAjaWZkZWYgQ09ORklHX1hURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCiAJcHJpbnRrKCJDYWxpYnJhdGluZyBDUFUgZnJlcXVlbmN5ICIpOwpAQCAtNjcsMTkgKzcxLDEwIEBACiAJcHJpbnRrKCIlZC4lMDJkIE1IelxuIiwgKGludCljY291bnRfcGVyX2ppZmZ5LygxMDAwMDAwL0haKSwKIAkJCShpbnQpKGNjb3VudF9wZXJfamlmZnkvKDEwMDAwL0haKSklMTAwKTsKICNlbmRpZgotCi0JLyogU2V0IHRpbWUgZnJvbSBSVEMgKGlmIHByb3ZpZGVkKSAqLwotCi0JaWYgKHBsYXRmb3JtX2dldF9ydGNfdGltZSgmc2VjX28pID09IDApCi0JCXdoaWxlIChwbGF0Zm9ybV9nZXRfcnRjX3RpbWUoJnNlY19uKSkKLQkJCWlmIChzZWNfbyAhPSBzZWNfbikKLQkJCQlicmVhazsKLQotCXh0aW1lLnR2X25zZWMgPSAwOwotCWxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYyA9IHNlY19uOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAotCQkteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CisJY2NvdW50X2Nsb2Nrc291cmNlLm11bHQgPQorCQljbG9ja3NvdXJjZV9oejJtdWx0KENDT1VOVF9QRVJfSklGRlkgKiBIWiwKKwkJCQljY291bnRfY2xvY2tzb3VyY2Uuc2hpZnQpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjY291bnRfY2xvY2tzb3VyY2UpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgbGludXggdGltZXIgaW50ZXJydXB0LiAqLwogCkBAIC04Nyw2OSArODIsNiBAQAogCXNldF9saW51eF90aW1lcihnZXRfY2NvdW50KCkgKyBDQ09VTlRfUEVSX0pJRkZZKTsKIH0KIAotCi1pbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0JbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwotCXVuc2lnbmVkIGxvbmcgZGVsdGE7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQotCS8qIFRoaXMgaXMgcmV2b2x0aW5nLiBXZSBuZWVkIHRvIHNldCAieHRpbWUiIGNvcnJlY3RseS4gSG93ZXZlciwgdGhlCi0JICogdmFsdWUgaW4gdGhpcyBsb2NhdGlvbiBpcyB0aGUgdmFsdWUgYXQgdGhlIG1vc3QgcmVjZW50IHVwZGF0ZSBvZgotCSAqIHdhbGwgdGltZS4gIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkoKSB3b3VsZCBoYXZlCi0JICogbWFkZSwgYW5kIHRoZW4gdW5kbyBpdCEKLQkgKi8KLQotCWRlbHRhID0gQ0NPVU5UX1BFUl9KSUZGWTsKLQlkZWx0YSArPSBnZXRfY2NvdW50KCkgLSBnZXRfbGludXhfdGltZXIoKTsKLQluc2VjIC09IGRlbHRhICogTlNFQ19QRVJfQ0NPVU5UOwotCi0Jd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKLQotCi12b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHNlYywgdXNlYywgZGVsdGEsIHNlcTsKLQotCWRvIHsKLQkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0KLQkJc2VjID0geHRpbWUudHZfc2VjOwotCQl1c2VjID0gKHh0aW1lLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDKTsKLQotCQlkZWx0YSA9IGdldF9saW51eF90aW1lcigpIC0gZ2V0X2Njb3VudCgpOwotCi0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7Ci0KLQl1c2VjICs9ICgoKHVuc2lnbmVkIGxvbmcpIENDT1VOVF9QRVJfSklGRlkgLSBkZWx0YSkKLQkJICogKHVuc2lnbmVkIGxvbmcpIE5TRUNfUEVSX0NDT1VOVCkgLyBOU0VDX1BFUl9VU0VDOwotCi0JZm9yICg7IHVzZWMgPj0gMTAwMDAwMDsgc2VjKyssIHVzZWMgLT0gMTAwMDAwMCkKLQkJOwotCi0JdHYtPnR2X3NlYyA9IHNlYzsKLQl0di0+dHZfdXNlYyA9IHVzZWM7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKLQogLyoKICAqIFRoZSB0aW1lciBpbnRlcnJ1cHQgaXMgY2FsbGVkIEhaIHRpbWVzIHBlciBzZWNvbmQuCiAgKi8KQEAgLTE3OCwxNiArMTEwLDYgQEAKIAkJbmV4dCArPSBDQ09VTlRfUEVSX0pJRkZZOwogCQlzZXRfbGludXhfdGltZXIobmV4dCk7CiAKLQkJaWYgKG50cF9zeW5jZWQoKSAmJgotCQkgICAgeHRpbWUudHZfc2VjIC0gbGFzdF9ydGNfdXBkYXRlID49IDY1OSAmJgotCQkgICAgYWJzKCh4dGltZS50dl9uc2VjLzEwMDApLSgxMDAwMDAwLTEwMDAwMDAvSFopKTw1MDAwMDAwL0haKSB7Ci0KLQkJCWlmIChwbGF0Zm9ybV9zZXRfcnRjX3RpbWUoeHRpbWUudHZfc2VjKzEpID09IDApCi0JCQkJbGFzdF9ydGNfdXBkYXRlID0geHRpbWUudHZfc2VjKzE7Ci0JCQllbHNlCi0JCQkJLyogRG8gaXQgYWdhaW4gaW4gNjAgcyAqLwotCQkJCWxhc3RfcnRjX3VwZGF0ZSArPSA2MDsKLQkJfQogCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogCX0KIApAQCAtMjEzLDQgKzEzNSwzIEBACiAJICAgICAgIChsb29wc19wZXJfamlmZnkvKDEwMDAwL0haKSkgJSAxMDApOwogfQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKaW5kZXggYzQ0ZjgzMC4uOWYwYjcxMSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2VuZGlmCiB7IEVYQ0NBVVNFX1VOQUxJR05FRCwJCUtSTkwsCSAgIGZhc3RfdW5hbGlnbmVkIH0sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTU1VCiB7IEVYQ0NBVVNFX0lUTEJfTUlTUywJCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKIHsgRVhDQ0FVU0VfSVRMQl9NSVNTLAkJVVNFUnxLUk5MLCBmYXN0X3NlY29uZF9sZXZlbF9taXNzfSwKIHsgRVhDQ0FVU0VfSVRMQl9NVUxUSUhJVCwJCTAsCSAgIGRvX211bHRpaGl0IH0sCkBAIC0xMTgsNiArMTE5LDcgQEAKIHsgRVhDQ0FVU0VfU1RPUkVfQ0FDSEVfQVRUUklCVVRFLAlVU0VSfEtSTkwsIGZhc3Rfc3RvcmVfcHJvaGliaXRlZCB9LAogeyBFWENDQVVTRV9TVE9SRV9DQUNIRV9BVFRSSUJVVEUsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKIHsgRVhDQ0FVU0VfTE9BRF9DQUNIRV9BVFRSSUJVVEUsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAvKiBYQ0NIQUxfRVhDQ0FVU0VfRkxPQVRJTkdfUE9JTlQgdW5oYW5kbGVkICovCiAjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1IoMCkKIENPUFJPQ0VTU09SKDApLApAQCAtMzcyLDExICszNzQsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGEwLCBhMSwgcGM7CiAJdW5zaWduZWQgbG9uZyBzcF9zdGFydCwgc3BfZW5kOwogCi0JYTEgPSAodW5zaWduZWQgbG9uZylzcDsKLQotCWlmIChhMSA9PSAwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdiAlMCwgYTFcbiIgOiAiPWEiKGExKSk7Ci0KKwlpZiAoc3ApCisJCWExID0gKHVuc2lnbmVkIGxvbmcpc3A7CisJZWxzZQorCQlhMSA9IHRhc2stPnRocmVhZC5zcDsKIAogCXNwX3N0YXJ0ID0gYTEgJiB+KFRIUkVBRF9TSVpFLTEpOwogCXNwX2VuZCA9IHNwX3N0YXJ0ICsgVEhSRUFEX1NJWkU7CkBAIC00MTgsOSArNDE5LDggQEAKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgbG9uZyAqc3RhY2s7CiAKLQlpZiAoc3AgPT0gMCkKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3YgJTAsIGExXG4iIDogIj1hIihzcCkpOwotCisJaWYgKCFzcCkKKwkJc3AgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKICAJc3RhY2sgPSBzcDsKIAogCXByaW50aygiXG5TdGFjazogIik7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdmVjdG9ycy5TIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZlY3RvcnMuUwppbmRleCBlYjJkN2JiLi43NGE3NTE4IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdmVjdG9ycy5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC92ZWN0b3JzLlMKQEAgLTMwOSw2ICszMDksNyBAQAogCSAqIEFsbCBvdGhlciBleGNlcHRpb25zIGFyZSB1bmV4cGVjdGVkIGFuZCB0aHVzIHVucmVjb3ZlcmFibGUhCiAJICovCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAJLmV4dGVybiBmYXN0X3NlY29uZF9sZXZlbF9taXNzX2RvdWJsZV9rZXJuZWwKIAogLkxrc3A6CS8qIGEwOiBhMCwgYTE6IGExLCBhMjogYTIsIGEzOiB0cmFzaGVkLCBkZXBjOiBkZXBjLCBleGNzYXZlOiBhMyAqLwpAQCAtMzE5LDYgKzMyMCw5IEBACiAJYm5leglhMywgLkx1bnJlY292ZXJhYmxlCiAxOgltb3ZpCWEzLCBmYXN0X3NlY29uZF9sZXZlbF9taXNzX2RvdWJsZV9rZXJuZWwKIAlqeAlhMworI2Vsc2UKKy5lcXUJLkxrc3AsCS5MdW5yZWNvdmVyYWJsZQorI2VuZGlmCiAKIAkvKiBDcml0aWNhbCEgV2UgY2FuJ3QgaGFuZGxlIHRoaXMgc2l0dWF0aW9uLiBQQU5JQyEgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBkNTA2Nzc0Li5jMWJlOWE0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKICNpbmNsdWRlIDx2YXJpYW50L2NvcmUuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgogT1VUUFVUX0FSQ0goeHRlbnNhKQogRU5UUlkoX3N0YXJ0KQogCkBAIC0yNiw3ICsyNyw5IEBACiBqaWZmaWVzID0gamlmZmllc182NDsKICNlbmRpZgogCisjaWZuZGVmIEtFUk5FTE9GRlNFVAogI2RlZmluZSBLRVJORUxPRkZTRVQgMHhkMDAwMTAwMAorI2VuZGlmCiAKIC8qIE5vdGU6IEluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBpdCB3b3VsZCBiZSBuaWNlIHRvIHNwZWNpZnkgb25seSB0aGUKICAgIHZlY3RvciBuYW1lIGFuZCBzZWN0aW9uIGtpbmQgYW5kIGNvbnN0cnVjdCAic3ltIiBhbmQgInNlY3Rpb24iIHVzaW5nCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL21tL01ha2VmaWxlCmluZGV4IDY0ZTMwNGEuLmYwYjY0NmQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL21tL01ha2VmaWxlCisrKyBiL2FyY2gveHRlbnNhL21tL01ha2VmaWxlCkBAIC0yLDQgKzIsNSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L1h0ZW5zYS1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCiAjCiAKLW9iai15CSA6PSBpbml0Lm8gZmF1bHQubyB0bGIubyBtaXNjLm8gY2FjaGUubworb2JqLXkJCQk6PSBpbml0Lm8gY2FjaGUubyBtaXNjLm8KK29iai0kKENPTkZJR19NTVUpCSs9IGZhdWx0Lm8gbW11Lm8gdGxiLm8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL2luaXQuYyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwppbmRleCAzNDE2M2NmLi40MjdlMTRmIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKKysrIGIvYXJjaC94dGVuc2EvbW0vaW5pdC5jCkBAIC0yNCwxNSArMjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+Ci0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLQotCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCiAvKiBSZWZlcmVuY2VzIHRvIHNlY3Rpb24gYm91bmRhcmllcyAqLwogCkBAIC0xMzAsNyArMTIzLDggQEAKIAogCS8qIEZpbmQgYW4gYXJlYSB0byB1c2UgZm9yIHRoZSBib290bWVtIGJpdG1hcC4gKi8KIAotCWJvb3RtYXBfc2l6ZSA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhtYXhfbG93X3BmbikgPDwgUEFHRV9TSElGVDsKKwlib290bWFwX3NpemUgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMobWF4X2xvd19wZm4gLSBtaW5fbG93X3Bmbik7CisJYm9vdG1hcF9zaXplIDw8PSBQQUdFX1NISUZUOwogCWJvb3RtYXBfc3RhcnQgPSB+MDsKIAogCWZvciAoaT0wOyBpPHN5c21lbS5ucl9iYW5rczsgaSsrKQpAQCAtMTQ1LDggKzEzOSw5IEBACiAJLyogUmVzZXJ2ZSB0aGUgYm9vdG1lbSBiaXRtYXAgYXJlYSAqLwogCiAJbWVtX3Jlc2VydmUoYm9vdG1hcF9zdGFydCwgYm9vdG1hcF9zdGFydCArIGJvb3RtYXBfc2l6ZSwgMSk7Ci0JYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBtaW5fbG93X3BmbiwKKwlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksCiAJCQkJCSBib290bWFwX3N0YXJ0ID4+IFBBR0VfU0hJRlQsCisJCQkJCSBtaW5fbG93X3BmbiwKIAkJCQkJIG1heF9sb3dfcGZuKTsKIAogCS8qIEFkZCBhbGwgcmVtYWluaW5nIG1lbW9yeSBwaWVjZXMgaW50byB0aGUgYm9vdG1lbSBtYXAgKi8KQEAgLTE1OCwxNCArMTUzLDE0IEBACiB9CiAKIAotdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHpvbmVzX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKIAlpbnQgaTsKIAogCS8qIEFsbCBwYWdlcyBhcmUgRE1BLWFibGUsIHNvIHdlIHB1dCB0aGVtIGFsbCBpbiB0aGUgRE1BIHpvbmUuICovCiAKLQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9sb3dfcGZuOworCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbWF4X2xvd19wZm4gLSBBUkNIX1BGTl9PRkZTRVQ7CiAJZm9yIChpID0gMTsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKQogCQl6b25lc19zaXplW2ldID0gMDsKIApAQCAtMTczLDQwICsxNjgsNyBAQAogCXpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSA9IG1heF9wZm4gLSBtYXhfbG93X3BmbjsKICNlbmRpZgogCi0JLyogSW5pdGlhbGl6ZSB0aGUga2VybmVsJ3MgcGFnZSB0YWJsZXMuICovCi0KLQltZW1zZXQoc3dhcHBlcl9wZ19kaXIsIDAsIFBBR0VfU0laRSk7Ci0KLQlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKLX0KLQotLyoKLSAqIEZsdXNoIHRoZSBtbXUgYW5kIHJlc2V0IGFzc29jaWF0ZWQgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZXMuCi0gKi8KLQotdm9pZCBfX2luaXQgaW5pdF9tbXUgKHZvaWQpCi17Ci0JLyogV3JpdGluZyB6ZXJvcyB0byB0aGUgPHQ+VExCQ0ZHIHNwZWNpYWwgcmVnaXN0ZXJzIGVuc3VyZQotCSAqIHRoYXQgdmFsaWQgdmFsdWVzIGV4aXN0IGluIHRoZSByZWdpc3Rlci4gIEZvciBleGlzdGluZwotCSAqIFBHU1pJRDx3PiBmaWVsZHMsIHplcm8gc2VsZWN0cyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUKLQkgKiBwYWdlLXNpemUgYXJyYXkuICBGb3Igbm9uZXhpc3RlbnQgUEdTWklEPHc+IGZpZWxkcywgemVybyBpcwotCSAqIHRoZSBiZXN0IHZhbHVlIHRvIHdyaXRlLiAgQWxzbywgd2hlbiBjaGFuZ2luZyBQR1NaSUQ8dz4KLQkgKiBmaWVsZHMsIHRoZSBjb3JyZXNwb25kaW5nIFRMQiBtdXN0IGJlIGZsdXNoZWQuCi0JICovCi0Jc2V0X2l0bGJjZmdfcmVnaXN0ZXIgKDApOwotCXNldF9kdGxiY2ZnX3JlZ2lzdGVyICgwKTsKLQlmbHVzaF90bGJfYWxsICgpOwotCi0JLyogU2V0IHJhc2lkIHJlZ2lzdGVyIHRvIGEga25vd24gdmFsdWUuICovCi0KLQlzZXRfcmFzaWRfcmVnaXN0ZXIgKEFTSURfVVNFUl9GSVJTVCk7Ci0KLQkvKiBTZXQgUFRFVkFERFIgc3BlY2lhbCByZWdpc3RlciB0byB0aGUgc3RhcnQgb2YgdGhlIHBhZ2UKLQkgKiB0YWJsZSwgd2hpY2ggaXMgaW4ga2VybmVsIG1hcHBhYmxlIHNwYWNlIChpZS4gbm90Ci0JICogc3RhdGljYWxseSBtYXBwZWQpLiAgVGhpcyByZWdpc3RlcidzIHZhbHVlIGlzIHVuZGVmaW5lZCBvbgotCSAqIHJlc2V0LgotCSAqLwotCXNldF9wdGV2YWRkcl9yZWdpc3RlciAoUEdUQUJMRV9TVEFSVCk7CisJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCB6b25lc19zaXplLCBBUkNIX1BGTl9PRkZTRVQsIE5VTEwpOwogfQogCiAvKgpAQCAtMjE4LDggKzE4MCw4IEBACiAJdW5zaWduZWQgbG9uZyBjb2Rlc2l6ZSwgcmVzZXJ2ZWRwYWdlcywgZGF0YXNpemUsIGluaXRzaXplOwogCXVuc2lnbmVkIGxvbmcgaGlnaG1lbXNpemUsIHRtcCwgcmFtOwogCi0JbWF4X21hcG5yID0gbnVtX3BoeXNwYWdlcyA9IG1heF9sb3dfcGZuOwotCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKikgX192YShtYXhfbWFwbnIgPDwgUEFHRV9TSElGVCk7CisJbWF4X21hcG5yID0gbnVtX3BoeXNwYWdlcyA9IG1heF9sb3dfcGZuIC0gQVJDSF9QRk5fT0ZGU0VUOworCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKikgX192YShtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKTsKIAloaWdobWVtc2l6ZSA9IDA7CiAKICNpZmRlZiBDT05GSUdfSElHSE1FTQpAQCAtMjI5LDcgKzE5MSw3IEBACiAJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hbGxfYm9vdG1lbSgpOwogCiAJcmVzZXJ2ZWRwYWdlcyA9IHJhbSA9IDA7Ci0JZm9yICh0bXAgPSAwOyB0bXAgPCBtYXhfbG93X3BmbjsgdG1wKyspIHsKKwlmb3IgKHRtcCA9IDA7IHRtcCA8IG1heF9tYXBucjsgdG1wKyspIHsKIAkJcmFtKys7CiAJCWlmIChQYWdlUmVzZXJ2ZWQobWVtX21hcCt0bXApKQogCQkJcmVzZXJ2ZWRwYWdlcysrOwpAQCAtMjc5LDIzICsyNDEsMyBAQAogCXByaW50aygiRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeTogJWRrIGZyZWVkXG4iLAogCSAgICAgICAoJl9faW5pdF9lbmQgLSAmX19pbml0X2JlZ2luKSA+PiAxMCk7CiB9Ci0KLXN0cnVjdCBrbWVtX2NhY2hlICpwZ3RhYmxlX2NhY2hlIF9fcmVhZF9tb3N0bHk7Ci0KLXN0YXRpYyB2b2lkIHBnZF9jdG9yKHZvaWQqIGFkZHIpCi17Ci0JcHRlX3QqIHB0ZXAgPSAocHRlX3QqKWFkZHI7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrLCBwdGVwKyspCi0JCXB0ZV9jbGVhcihOVUxMLCAwLCBwdGVwKTsKLQotfQotCi12b2lkIF9faW5pdCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkKLXsKLQlwZ3RhYmxlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBnZCIsCi0JCQlQQUdFX1NJWkUsIFBBR0VfU0laRSwKLQkJCVNMQUJfSFdDQUNIRV9BTElHTiwKLQkJCXBnZF9jdG9yKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL21pc2MuUyBiL2FyY2gveHRlbnNhL21tL21pc2MuUwppbmRleCBjODg1NjY0Li5iMDQ4NDA2IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9taXNjLlMKKysrIGIvYXJjaC94dGVuc2EvbW0vbWlzYy5TCkBAIC04NCw2ICs4NCw3IEBACiAKIAlyZXR3CiAKKyNpZmRlZiBDT05GSUdfTU1VCiAvKgogICogSWYgd2UgaGF2ZSB0byBkZWFsIHdpdGggY2FjaGUgYWxpYXNpbmcsIHdlIHVzZSB0ZW1wb3JhcnkgbWVtb3J5IG1hcHBpbmdzCiAgKiB0byBlbnN1cmUgdGhhdCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwYWdlcyBoYXZlIHRoZSBzYW1lIGNvbG9yIGFzCkBAIC0zMTEsNiArMzEyLDcgQEAKIC8qIEVuZCBvZiBzcGVjaWFsIHRyZWF0bWVudCBpbiB0bGIgbWlzcyBleGNlcHRpb24gKi8KIAogRU5UUlkoX190bGJ0ZW1wX21hcHBpbmdfZW5kKQorI2VuZGlmIC8qIENPTkZJR19NTVUKIAogLyoKICAqIHZvaWQgX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlKHVsb25nIHN0YXJ0KQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vbW11LmMgYi9hcmNoL3h0ZW5zYS9tbS9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmI5MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvbW0vbW11LmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIHh0ZW5zYSBtbXUgc3R1ZmYKKyAqCisgKiBFeHRyYWN0ZWQgZnJvbSBpbml0LmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKworI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOworCit2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQoreworCW1lbXNldChzd2FwcGVyX3BnX2RpciwgMCwgUEFHRV9TSVpFKTsKK30KKworLyoKKyAqIEZsdXNoIHRoZSBtbXUgYW5kIHJlc2V0IGFzc29jaWF0ZWQgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZXMuCisgKi8KK3ZvaWQgX19pbml0IGluaXRfbW11KHZvaWQpCit7CisJLyogV3JpdGluZyB6ZXJvcyB0byB0aGUgPHQ+VExCQ0ZHIHNwZWNpYWwgcmVnaXN0ZXJzIGVuc3VyZQorCSAqIHRoYXQgdmFsaWQgdmFsdWVzIGV4aXN0IGluIHRoZSByZWdpc3Rlci4gIEZvciBleGlzdGluZworCSAqIFBHU1pJRDx3PiBmaWVsZHMsIHplcm8gc2VsZWN0cyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUKKwkgKiBwYWdlLXNpemUgYXJyYXkuICBGb3Igbm9uZXhpc3RlbnQgUEdTWklEPHc+IGZpZWxkcywgemVybyBpcworCSAqIHRoZSBiZXN0IHZhbHVlIHRvIHdyaXRlLiAgQWxzbywgd2hlbiBjaGFuZ2luZyBQR1NaSUQ8dz4KKwkgKiBmaWVsZHMsIHRoZSBjb3JyZXNwb25kaW5nIFRMQiBtdXN0IGJlIGZsdXNoZWQuCisJICovCisJc2V0X2l0bGJjZmdfcmVnaXN0ZXIoMCk7CisJc2V0X2R0bGJjZmdfcmVnaXN0ZXIoMCk7CisJZmx1c2hfdGxiX2FsbCgpOworCisJLyogU2V0IHJhc2lkIHJlZ2lzdGVyIHRvIGEga25vd24gdmFsdWUuICovCisKKwlzZXRfcmFzaWRfcmVnaXN0ZXIoQVNJRF9VU0VSX0ZJUlNUKTsKKworCS8qIFNldCBQVEVWQUREUiBzcGVjaWFsIHJlZ2lzdGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgcGFnZQorCSAqIHRhYmxlLCB3aGljaCBpcyBpbiBrZXJuZWwgbWFwcGFibGUgc3BhY2UgKGllLiBub3QKKwkgKiBzdGF0aWNhbGx5IG1hcHBlZCkuICBUaGlzIHJlZ2lzdGVyJ3MgdmFsdWUgaXMgdW5kZWZpbmVkIG9uCisJICogcmVzZXQuCisJICovCisJc2V0X3B0ZXZhZGRyX3JlZ2lzdGVyKFBHVEFCTEVfU1RBUlQpOworfQorCitzdHJ1Y3Qga21lbV9jYWNoZSAqcGd0YWJsZV9jYWNoZSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgdm9pZCBwZ2RfY3Rvcih2b2lkICphZGRyKQoreworCXB0ZV90ICpwdGVwID0gKHB0ZV90ICopYWRkcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyssIHB0ZXArKykKKwkJcHRlX2NsZWFyKE5VTEwsIDAsIHB0ZXApOworCit9CisKK3ZvaWQgX19pbml0IHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKQoreworCXBndGFibGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicGdkIiwKKwkJCVBBR0VfU0laRSwgUEFHRV9TSVpFLAorCQkJU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJcGdkX2N0b3IpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L01ha2VmaWxlIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTYxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACisjIE1ha2VmaWxlIGZvciB0aGUgU3RyZXRjaCBTNjEwNSBldmFsIGJvYXJkCisKK29iai15CQk6PSBzZXR1cC5vIGRldmljZS5vCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvZGV2aWNlLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiMDhiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9kZXZpY2UuYwpAQCAtMCwwICsxLDY3IEBACisvKgorICogczYxMDUgcGxhdGZvcm0gZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBlbWxpeCBHbWJICisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8dmFyaWFudC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIFVBUlRfSU5UTlVNCQk0CisKK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciB1YXJ0X2lycV9tYXBwaW5nc1tdID0geworCVM2X0lOVENfVUFSVCgwKSwKKwlTNl9JTlRDX1VBUlQoMSksCisJLTEsCit9OworCitjb25zdCBzaWduZWQgY2hhciAqcGxhdGZvcm1faXJxX21hcHBpbmdzW05SX0lSUVNdID0geworCVtVQVJUX0lOVE5VTV0gPSB1YXJ0X2lycV9tYXBwaW5ncywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlID0gKHZvaWQgKilTNl9SRUdfVUFSVCArIDB4MDAwMCwKKwkJLm1hcGJhc2UgPSBTNl9SRUdfVUFSVCArIDB4MDAwMCwKKwkJLmlycSA9IFVBUlRfSU5UTlVNLAorCQkudWFydGNsayA9IFM2X1NDTEssCisJCS5yZWdzaGlmdCA9IDIsCisJCS5pb3R5cGUgPSBTRVJJQUxfSU9fTUVNLAorCQkuZmxhZ3MgPSBBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNULAorCX0sCisJeworCQkubWVtYmFzZSA9ICh2b2lkICopUzZfUkVHX1VBUlQgKyAweDEwMDAsCisJCS5tYXBiYXNlID0gUzZfUkVHX1VBUlQgKyAweDEwMDAsCisJCS5pcnEgPSBVQVJUX0lOVE5VTSwKKwkJLnVhcnRjbGsgPSBTNl9TQ0xLLAorCQkucmVnc2hpZnQgPSAyLAorCQkuaW90eXBlID0gU0VSSUFMX0lPX01FTSwKKwkJLmZsYWdzID0gQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCwKKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBsYXRmb3JtX2RldmljZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gInNlcmlhbDgyNTAiLAorCQkuaWQgPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJCS5kZXYgPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZXZpY2VfaW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcyk7IGkrKykKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwbGF0Zm9ybV9kZXZpY2VzW2ldKTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGxfc3luYyhkZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9ncGlvLmggYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExMWFhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL2dwaW8uaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fQVNNX1hURU5TQV9TNjEwNV9HUElPX0gKKyNkZWZpbmUgX19BU01fWFRFTlNBX1M2MTA1X0dQSU9fSAorCisjZGVmaW5lIEdQSU9fQlBfVEVNUF9BTEFSTQkwCisjZGVmaW5lIEdQSU9fUEJfUkVTRVRfSU4JMQorI2RlZmluZSBHUElPX0VYUF9JUlEJCTIKKyNkZWZpbmUgR1BJT19UUklHR0VSX0lSUQkzCisjZGVmaW5lIEdQSU9fUlRDX0lSUQkJNAorI2RlZmluZSBHUElPX1BIWV9JUlEJCTUKKyNkZWZpbmUgR1BJT19JTUFHRVJfUkVTRVQJNgorI2RlZmluZSBHUElPX1NEX0lSUQkJNworI2RlZmluZSBHUElPX01JTklfQk9PVF9JTkgJOAorI2RlZmluZSBHUElPX0JPQVJEX1JFU0VUCTkKKyNkZWZpbmUgR1BJT19FWFBfUFJFU0VOVAkxMAorI2RlZmluZSBHUElPX0xFRDFfTkdSRUVOCTEyCisjZGVmaW5lIEdQSU9fTEVEMV9SRUQJCTEzCisjZGVmaW5lIEdQSU9fTEVEMF9OR1JFRU4JMTQKKyNkZWZpbmUgR1BJT19MRUQwX05SRUQJCTE1CisjZGVmaW5lIEdQSU9fU1BJX0NTMAkJMTYKKyNkZWZpbmUgR1BJT19TUElfQ1MxCQkxNworI2RlZmluZSBHUElPX1NQSV9DUzMJCTE5CisjZGVmaW5lIEdQSU9fU1BJX0NTNAkJMjAKKyNkZWZpbmUgR1BJT19TRF9XUAkJMjEKKyNkZWZpbmUgR1BJT19CUF9SRVNFVAkJMjIKKyNkZWZpbmUgR1BJT19BTEFSTV9PVVQJCTIzCisKKyNlbmRpZiAvKiBfX0FTTV9YVEVOU0FfUzYxMDVfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9oYXJkd2FyZS5oIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjI4ZWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vaGFyZHdhcmUuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fWFRFTlNBX1M2MTA1X0hBUkRXQVJFX0gKKyNkZWZpbmUgX19YVEVOU0FfUzYxMDVfSEFSRFdBUkVfSAorCisjZGVmaW5lIFBMQVRGT1JNX0RFRkFVTFRfTUVNX1NUQVJUCTB4NDAwMDAwMDAKKyNkZWZpbmUgUExBVEZPUk1fREVGQVVMVF9NRU1fU0laRQkweDA4MDAwMDAwCisKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkJMAorCisjZGVmaW5lIEtFUk5FTE9GRlNFVAkJCShQTEFURk9STV9ERUZBVUxUX01FTV9TVEFSVCArIDB4MTAwMCkKKworI2VuZGlmIC8qIF9fWFRFTlNBX1M2MTA1X0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL3NlcmlhbC5oIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhNzcxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL3NlcmlhbC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9YVEVOU0FfUzYxMDVfU0VSSUFMX0gKKyNkZWZpbmUgX19BU01fWFRFTlNBX1M2MTA1X1NFUklBTF9ICisKKyNpbmNsdWRlIDx2YXJpYW50L2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgQkFTRV9CQVVEIChTNl9TQ0xLIC8gMTYpCisKKyNlbmRpZiAvKiBfX0FTTV9YVEVOU0FfUzYxMDVfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9zZXR1cC5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwNDFkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9zZXR1cC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBzNjEwNSBjb250cm9sIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IGVtbGl4IEdtYkgKKyAqLworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgorCisjaW5jbHVkZSA8dmFyaWFudC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPHBsYXRmb3JtL2dwaW8uaD4KKwordm9pZCBwbGF0Zm9ybV9oYWx0KHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwl3aGlsZSAoMSkKKwkJOworfQorCit2b2lkIHBsYXRmb3JtX3Bvd2VyX29mZih2b2lkKQoreworCXBsYXRmb3JtX2hhbHQoKTsKK30KKwordm9pZCBwbGF0Zm9ybV9yZXN0YXJ0KHZvaWQpCit7CisJcGxhdGZvcm1faGFsdCgpOworfQorCit2b2lkIF9faW5pdCBwbGF0Zm9ybV9zZXR1cChjaGFyICoqY21kbGluZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZzsKKworCXJlZyA9IHJlYWRsKFM2X1JFR19HUkVHMSArIFM2X0dSRUcxX0NMS0dBVEUpOworCXJlZyAmPSB+KDEgPDwgUzZfR1JFRzFfQkxPQ0tfU0IpOworCXdyaXRlbChyZWcsIFM2X1JFR19HUkVHMSArIFM2X0dSRUcxX0NMS0dBVEUpOworCisJcmVnID0gcmVhZGwoUzZfUkVHX0dSRUcxICsgUzZfR1JFRzFfQkxPQ0tFTkEpOworCXJlZyB8PSAxIDw8IFM2X0dSRUcxX0JMT0NLX1NCOworCXdyaXRlbChyZWcsIFM2X1JFR19HUkVHMSArIFM2X0dSRUcxX0JMT0NLRU5BKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiUzYxMDUgb24gU3RyZXRjaCBTNjAwMCAtICIKKwkJIkNvcHlyaWdodCAoQykgMjAwOSBlbWxpeCBHbWJIIDxpbmZvQGVtbGl4LmNvbT5cbiIpOworfQorCit2b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KGJwX3RhZ190ICpmaXJzdCkKK3sKKwlncGlvX3JlcXVlc3QoR1BJT19MRUQxX05HUkVFTiwgImxlZDFfZ3JlZW4iKTsKKwlncGlvX3JlcXVlc3QoR1BJT19MRUQxX1JFRCwgImxlZDFfcmVkIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTEVEMV9OR1JFRU4sIDEpOworfQorCit2b2lkIHBsYXRmb3JtX2hlYXJ0YmVhdCh2b2lkKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgYzsKKworCWlmICghKCsrYyAmIDB4NEYpKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MRUQxX1JFRCwgIShjICYgMHgxMCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3h0MjAwMC9pbmNsdWRlL3BsYXRmb3JtL2hhcmR3YXJlLmggYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMveHQyMDAwL2luY2x1ZGUvcGxhdGZvcm0vaGFyZHdhcmUuaAppbmRleCA0MTQ1OWFkLi44ODZlZjE1IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMveHQyMDAwL2luY2x1ZGUvcGxhdGZvcm0vaGFyZHdhcmUuaAorKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMveHQyMDAwL2luY2x1ZGUvcGxhdGZvcm0vaGFyZHdhcmUuaApAQCAtMTYsNyArMTYsNiBAQAogI2RlZmluZSBfWFRFTlNBX1hUMjAwMF9IQVJEV0FSRV9ICiAKICNpbmNsdWRlIDx2YXJpYW50L2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogCiAgKiBNZW1vcnkgY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL01ha2VmaWxlIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiMzk3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorIyBzNjAwMCBNYWtlZmlsZQorCitvYmoteQkJKz0gaXJxLm8gZ3Bpby5vCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9ncGlvLmMgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhOGQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2dwaW8uYwpAQCAtMCwwICsxLDcxIEBACisvKgorICogczYwMDAgZ3BpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgZW1saXggR21iSAorICogQXV0aG9yczoJT3NrYXIgU2NoaXJtZXIgPG9zQGVtbGl4LmNvbT4KKyAqCQlKb2hhbm5lcyBXZWluZXIgPGp3QGVtbGl4LmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPHZhcmlhbnQvaGFyZHdhcmUuaD4KKworI2RlZmluZSBTNl9HUElPX0RBVEEJCTB4MDAwCisjZGVmaW5lIFM2X0dQSU9fSVMJCTB4NDA0CisjZGVmaW5lIFM2X0dQSU9fSUJFCQkweDQwOAorI2RlZmluZSBTNl9HUElPX0lFVgkJMHg0MEMKKyNkZWZpbmUgUzZfR1BJT19JRQkJMHg0MTAKKyNkZWZpbmUgUzZfR1BJT19SSVMJCTB4NDE0CisjZGVmaW5lIFM2X0dQSU9fTUlTCQkweDQxOAorI2RlZmluZSBTNl9HUElPX0lDCQkweDQxQworI2RlZmluZSBTNl9HUElPX0FGU0VMCQkweDQyMAorI2RlZmluZSBTNl9HUElPX0RJUgkJMHg4MDAKKyNkZWZpbmUgUzZfR1BJT19CQU5LKG5yKQkoKG5yKSAqIDB4MTAwMCkKKyNkZWZpbmUgUzZfR1BJT19NQVNLKG5yKQkoNCA8PCAobnIpKQorI2RlZmluZSBTNl9HUElPX09GRlNFVChucikgXAorCQkoUzZfR1BJT19CQU5LKChucikgPj4gMykgKyBTNl9HUElPX01BU0soKG5yKSAmIDcpKQorCitzdGF0aWMgaW50IGRpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXdyaXRlYigwLCBTNl9SRUdfR1BJTyArIFM2X0dQSU9fRElSICsgUzZfR1BJT19PRkZTRVQob2ZmKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmYpCit7CisJcmV0dXJuIHJlYWRiKFM2X1JFR19HUElPICsgUzZfR1BJT19EQVRBICsgUzZfR1BJT19PRkZTRVQob2ZmKSk7Cit9CisKK3N0YXRpYyBpbnQgZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2ZmLCBpbnQgdmFsKQoreworCXVuc2lnbmVkIHJlbCA9IFM2X0dQSU9fT0ZGU0VUKG9mZik7CisJd3JpdGViKH4wLCBTNl9SRUdfR1BJTyArIFM2X0dQSU9fRElSICsgcmVsKTsKKwl3cml0ZWIodmFsID8gfjAgOiAwLCBTNl9SRUdfR1BJTyArIFM2X0dQSU9fREFUQSArIHJlbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2ZmLCBpbnQgdmFsKQoreworCXdyaXRlYih2YWwgPyB+MCA6IDAsIFM2X1JFR19HUElPICsgUzZfR1BJT19EQVRBICsgUzZfR1BJT19PRkZTRVQob2ZmKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW9jaGlwID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kaXJlY3Rpb25faW5wdXQgPSBkaXJlY3Rpb25faW5wdXQsCisJLmdldCA9IGdldCwKKwkuZGlyZWN0aW9uX291dHB1dCA9IGRpcmVjdGlvbl9vdXRwdXQsCisJLnNldCA9IHNldCwKKwkuYmFzZSA9IDAsCisJLm5ncGlvID0gMjQsCisJLmNhbl9zbGVlcCA9IDAsIC8qIG5vIGJsb2NraW5nIGlvIG5lZWRlZCAqLworCS5leHBvcnRlZCA9IDAsIC8qIG5vIGV4cG9ydGluZyB0byB1c2Vyc3BhY2UgKi8KK307CisKK3N0YXRpYyBpbnQgZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIGdwaW9jaGlwX2FkZCgmZ3Bpb2NoaXApOworfQorZGV2aWNlX2luaXRjYWxsKGdwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvY29yZS5oIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjAwNzk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2NvcmUuaApAQCAtMCwwICsxLDQzMSBAQAorLyoKKyAqIFh0ZW5zYSBwcm9jZXNzb3IgY29yZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IFRlbnNpbGljYSBJbmMuCisgKi8KKworI2lmbmRlZiBfWFRFTlNBX0NPUkVfQ09ORklHVVJBVElPTl9ICisjZGVmaW5lIF9YVEVOU0FfQ09SRV9DT05GSUdVUkFUSU9OX0gKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAgICBQYXJhbWV0ZXJzIFVzZWZ1bCBmb3IgQW55IENvZGUsIFVTRVIgb3IgUFJJVklMRUdFRAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAgTm90ZTogIE1hY3JvcyBvZiB0aGUgZm9ybSBYQ0hBTF9IQVZFXyoqKiBoYXZlIGEgdmFsdWUgb2YgMSBpZiB0aGUgb3B0aW9uIGlzCisgKiAgY29uZmlndXJlZCwgYW5kIGEgdmFsdWUgb2YgMCBvdGhlcndpc2UuICBUaGVzZSBtYWNyb3MgYXJlIGFsd2F5cyBkZWZpbmVkLgorICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJSVNBCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX0hBVkVfQkUJCQkwCS8qIGJpZy1lbmRpYW4gYnl0ZSBvcmRlcmluZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1dJTkRPV0VECQkxCS8qIHdpbmRvd2VkIHJlZ2lzdGVycyBvcHRpb24gKi8KKyNkZWZpbmUgWENIQUxfTlVNX0FSRUdTCQkJNjQJLyogbnVtIG9mIHBoeXNpY2FsIGFkZHIgcmVncyAqLworI2RlZmluZSBYQ0hBTF9OVU1fQVJFR1NfTE9HMgkJNgkvKiBsb2cyKFhDSEFMX05VTV9BUkVHUykgKi8KKyNkZWZpbmUgWENIQUxfTUFYX0lOU1RSVUNUSU9OX1NJWkUJOAkvKiBtYXggaW5zdHIgYnl0ZXMgKDMuLjgpICovCisjZGVmaW5lIFhDSEFMX0hBVkVfREVCVUcJCTEJLyogZGVidWcgb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfREVOU0lUWQkJMQkvKiAxNi1iaXQgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTE9PUFMJCTEJLyogemVyby1vdmVyaGVhZCBsb29wcyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX05TQQkJCTEJLyogTlNBL05TQVUgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTUlOTUFYCQkxCS8qIE1JTi9NQVggaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfU0VYVAkJCTEJLyogU0VYVCBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NMQU1QUwkJMQkvKiBDTEFNUFMgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NVUwxNgkJMQkvKiBNVUwxNlMvTVVMMTZVIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01VTDMyCQkxCS8qIE1VTEwgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NVUwzMl9ISUdICQkxCS8qIE1VTFVIL01VTFNIIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0RJVjMyCQkwCS8qIFFVT1MvUVVPVS9SRU1TL1JFTVUgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTDMyUgkJCTEJLyogTDMyUiBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0FCU09MVVRFX0xJVEVSQUxTCTEJLyogbm9uLVBDLXJlbCAoZXh0ZW5kZWQpIEwzMlIgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DT05TVDE2CQkwCS8qIENPTlNUMTYgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9BRERYCQkJMQkvKiBBRERYIy9TVUJYIyBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9XSURFX0JSQU5DSEVTCTAJLyogQiouVzE4IG9yIEIqLlcxNSBpbnN0cidzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUFJFRElDVEVEX0JSQU5DSEVTCTAJLyogQltFUS9FUVovTkUvTkVaXVQgaW5zdHIncyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NBTEw0QU5EMTIJCTEJLyogKG9ic29sZXRlIG9wdGlvbikgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9BQlMJCQkxCS8qIEFCUyBpbnN0cnVjdGlvbiAqLworLyojZGVmaW5lIFhDSEFMX0hBVkVfUE9QQwkJMCovCS8qIFBPUEMgaW5zdHJ1Y3Rpb24gKi8KKy8qI2RlZmluZSBYQ0hBTF9IQVZFX0NSQwkJMCovCS8qIENSQyBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1JFTEVBU0VfU1lOQwkJMAkvKiBMMzJBSS9TMzJSSSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9TMzJDMUkJCTAJLyogUzMyQzFJIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfU1BFQ1VMQVRJT04JCTAJLyogc3BlY3VsYXRpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9GVUxMX1JFU0VUCQkwCS8qIGFsbCByZWdzL3N0YXRlIHJlc2V0ICovCisjZGVmaW5lIFhDSEFMX05VTV9DT05URVhUUwkJMQkvKiAqLworI2RlZmluZSBYQ0hBTF9OVU1fTUlTQ19SRUdTCQk0CS8qIG51bSBvZiBzY3JhdGNoIHJlZ3MgKDAuLjQpICovCisjZGVmaW5lIFhDSEFMX0hBVkVfVEFQX01BU1RFUgkJMAkvKiBKVEFHIFRBUCBjb250cm9sIGluc3RyJ3MgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9QUklECQkJMAkvKiBwcm9jZXNzb3IgSUQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9USFJFQURQVFIJCTAJLyogVEhSRUFEUFRSIHJlZ2lzdGVyICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQk9PTEVBTlMJCTEJLyogYm9vbGVhbiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DUAkJCTEJLyogQ1BFTkFCTEUgcmVnIChjb3Byb2Nlc3NvcikgKi8KKyNkZWZpbmUgWENIQUxfQ1BfTUFYQ0ZHCQkJOAkvKiBtYXggYWxsb3dlZCBjcCBpZCBwbHVzIG9uZSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01BQzE2CQkwCS8qIE1BQzE2IHBhY2thZ2UgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9WRUNUT1JGUFUyMDA1CTAJLyogdmVjdG9yIGZsb2F0aW5nLXBvaW50IHBrZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0ZQCQkJMQkvKiBmbG9hdGluZyBwb2ludCBwa2cgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9WRUNUUkExCQkwCS8qIFZlY3RyYSBJICBwa2cgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9WRUNUUkFMWAkJMAkvKiBWZWN0cmEgTFggcGtnICovCisjZGVmaW5lIFhDSEFMX0hBVkVfSElGSTIJCTAJLyogSGlGaTIgQXVkaW8gRW5naW5lIHBrZyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCU1JU0MKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfTlVNX1dSSVRFQlVGRkVSX0VOVFJJRVMJOAkvKiBzaXplIG9mIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSBYQ0hBTF9JTlNUX0ZFVENIX1dJRFRICQk4CS8qIGluc3RyLWZldGNoIHdpZHRoIGluIGJ5dGVzICovCisjZGVmaW5lIFhDSEFMX0RBVEFfV0lEVEgJCTE2CS8qIGRhdGEgd2lkdGggaW4gYnl0ZXMgKi8KKy8qICBJbiBUMTA1MCwgYXBwbGllcyB0byBzZWxlY3RlZCBjb3JlIGxvYWQgYW5kIHN0b3JlIGluc3RydWN0aW9ucyAoc2VlIElTQSk6ICovCisjZGVmaW5lIFhDSEFMX1VOQUxJR05FRF9MT0FEX0VYQ0VQVElPTgkxCS8qIHVuYWxpZ25lZCBsb2FkcyBjYXVzZSBleGMuICovCisjZGVmaW5lIFhDSEFMX1VOQUxJR05FRF9TVE9SRV9FWENFUFRJT04JMQkvKiB1bmFsaWduZWQgc3RvcmVzIGNhdXNlIGV4Yy4qLworCisjZGVmaW5lIFhDSEFMX1NXX1ZFUlNJT04JCTcwMTAwMQkvKiBzdyB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyICovCisKKyNkZWZpbmUgWENIQUxfQ09SRV9JRAkJCSJzdHJldGNoX2JhbGkiCS8qIGFscGhhbnVtIGNvcmUgbmFtZQorCQkJCQkJICAgKENvcmVJRCkgc2V0IGluIHRoZSBYdGVuc2EKKwkJCQkJCSAgIFByb2Nlc3NvciBHZW5lcmF0b3IgKi8KKworI2RlZmluZSBYQ0hBTF9CVUlMRF9VTklRVUVfSUQJCTB4MDAwMTA0QjkJLyogMjItYml0IHN3IGJ1aWxkIElEICovCisKKy8qCisgKiAgVGhlc2UgZGVmaW5pdGlvbnMgZGVzY3JpYmUgdGhlIGhhcmR3YXJlIHRhcmdldGVkIGJ5IHRoaXMgc29mdHdhcmUuCisgKi8KKyNkZWZpbmUgWENIQUxfSFdfQ09ORklHSUQwCQkweEMyRjNGOUZFCS8qIENvbmZpZ0lEIGhpIDMyIGJpdHMqLworI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRDEJCTB4MDU0MTA0QjkJLyogQ29uZmlnSUQgbG8gMzIgYml0cyovCisjZGVmaW5lIFhDSEFMX0hXX1ZFUlNJT05fTkFNRQkJIkxYMS4wLjIiCS8qIGZ1bGwgdmVyc2lvbiBuYW1lICovCisjZGVmaW5lIFhDSEFMX0hXX1ZFUlNJT05fTUFKT1IJCTIxMDAJLyogbWFqb3IgdmVyIyBvZiB0YXJnZXRlZCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19WRVJTSU9OX01JTk9SCQkyCS8qIG1pbm9yIHZlciMgb2YgdGFyZ2V0ZWQgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfVkVSU0lPTgkJMjEwMDAyCS8qIG1ham9yKjEwMCttaW5vciAqLworI2RlZmluZSBYQ0hBTF9IV19SRUxfTFgxCQkxCisjZGVmaW5lIFhDSEFMX0hXX1JFTF9MWDFfMAkJMQorI2RlZmluZSBYQ0hBTF9IV19SRUxfTFgxXzBfMgkJMQorI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRF9SRUxJQUJMRQkxCisvKiAgSWYgc29mdHdhcmUgdGFyZ2V0cyBhICpyYW5nZSogb2YgaGFyZHdhcmUgdmVyc2lvbnMsIHRoZXNlIGFyZSB0aGUgYm91bmRzOiAqLworI2RlZmluZSBYQ0hBTF9IV19NSU5fVkVSU0lPTl9NQUpPUgkyMTAwCS8qIG1ham9yIHYgb2YgZWFybGllc3QgdGd0IGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01JTl9WRVJTSU9OX01JTk9SCTIJLyogbWlub3IgdiBvZiBlYXJsaWVzdCB0Z3QgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfTUlOX1ZFUlNJT04JCTIxMDAwMgkvKiBlYXJsaWVzdCB0YXJnZXRlZCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19NQVhfVkVSU0lPTl9NQUpPUgkyMTAwCS8qIG1ham9yIHYgb2YgbGF0ZXN0IHRndCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19NQVhfVkVSU0lPTl9NSU5PUgkyCS8qIG1pbm9yIHYgb2YgbGF0ZXN0IHRndCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19NQVhfVkVSU0lPTgkJMjEwMDAyCS8qIGxhdGVzdCB0YXJnZXRlZCBodyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCUNBQ0hFCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9MSU5FU0laRQkJMTYJLyogSS1jYWNoZSBsaW5lIHNpemUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgWENIQUxfRENBQ0hFX0xJTkVTSVpFCQkxNgkvKiBELWNhY2hlIGxpbmUgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBYQ0hBTF9JQ0FDSEVfTElORVdJRFRICQk0CS8qIGxvZzIoSSBsaW5lIHNpemUgaW4gYnl0ZXMpICovCisjZGVmaW5lIFhDSEFMX0RDQUNIRV9MSU5FV0lEVEgJCTQJLyogbG9nMihEIGxpbmUgc2l6ZSBpbiBieXRlcykgKi8KKworI2RlZmluZSBYQ0hBTF9JQ0FDSEVfU0laRQkJMzI3NjgJLyogSS1jYWNoZSBzaXplIGluIGJ5dGVzIG9yIDAgKi8KKyNkZWZpbmUgWENIQUxfRENBQ0hFX1NJWkUJCTMyNzY4CS8qIEQtY2FjaGUgc2l6ZSBpbiBieXRlcyBvciAwICovCisKKyNkZWZpbmUgWENIQUxfRENBQ0hFX0lTX1dSSVRFQkFDSwkxCS8qIHdyaXRlYmFjayBmZWF0dXJlICovCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgUGFyYW1ldGVycyBVc2VmdWwgZm9yIFBSSVZJTEVHRUQgKFN1cGVydmlzb3J5IG9yIE5vbi1WaXJ0dWFsaXplZCkgQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBYVEVOU0FfSEFMX05PTl9QUklWSUxFR0VEX09OTFkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJQ0FDSEUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9QSUYJCQkxCS8qIGFueSBvdXRib3VuZCBQSUYgcHJlc2VudCAqLworCisvKiAgSWYgcHJlc2VudCwgY2FjaGUgc2l6ZSBpbiBieXRlcyA9PSAod2F5cyAqIDJeKGxpbmV3aWR0aCArIHNldHdpZHRoKSkuICAqLworCisvKiAgTnVtYmVyIG9mIGNhY2hlIHNldHMgaW4gbG9nMihsaW5lcyBwZXIgd2F5KTogICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9TRVRXSURUSAkJOQorI2RlZmluZSBYQ0hBTF9EQ0FDSEVfU0VUV0lEVEgJCTEwCisKKy8qICBDYWNoZSBzZXQgYXNzb2NpYXRpdml0eSAobnVtYmVyIG9mIHdheXMpOiAgKi8KKyNkZWZpbmUgWENIQUxfSUNBQ0hFX1dBWVMJCTQKKyNkZWZpbmUgWENIQUxfRENBQ0hFX1dBWVMJCTIKKworLyogIENhY2hlIGZlYXR1cmVzOiAgKi8KKyNkZWZpbmUgWENIQUxfSUNBQ0hFX0xJTkVfTE9DS0FCTEUJMQorI2RlZmluZSBYQ0hBTF9EQ0FDSEVfTElORV9MT0NLQUJMRQkwCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9FQ0NfUEFSSVRZCQkwCisjZGVmaW5lIFhDSEFMX0RDQUNIRV9FQ0NfUEFSSVRZCQkwCisKKy8qICBOdW1iZXIgb2YgZW5jb2RlZCBjYWNoZSBhdHRyIGJpdHMgKHNlZSA8eHRlbnNhL2hhbC5oPiBmb3IgZGVjb2RlZCBiaXRzKTogICovCisjZGVmaW5lIFhDSEFMX0NBX0JJVFMJCQk0CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQlJTlRFUk5BTCBJL0QgUkFNL1JPTXMgYW5kIFhMTUkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfTlVNX0lOU1RST00JCTAJLyogbnVtYmVyIG9mIGNvcmUgaW5zdHIuIFJPTXMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lOU1RSQU0JCTAJLyogbnVtYmVyIG9mIGNvcmUgaW5zdHIuIFJBTXMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0RBVEFST00JCTAJLyogbnVtYmVyIG9mIGNvcmUgZGF0YSBST01zICovCisjZGVmaW5lIFhDSEFMX05VTV9EQVRBUkFNCQkxCS8qIG51bWJlciBvZiBjb3JlIGRhdGEgUkFNcyAqLworI2RlZmluZSBYQ0hBTF9OVU1fVVJBTQkJCTAJLyogbnVtYmVyIG9mIGNvcmUgdW5pZmllZCBSQU1zKi8KKyNkZWZpbmUgWENIQUxfTlVNX1hMTUkJCQkxCS8qIG51bWJlciBvZiBjb3JlIFhMTUkgcG9ydHMgKi8KKworLyogIERhdGEgUkFNIDA6ICAqLworI2RlZmluZSBYQ0hBTF9EQVRBUkFNMF9WQUREUgkJMHgzRkZGMDAwMAorI2RlZmluZSBYQ0hBTF9EQVRBUkFNMF9QQUREUgkJMHgzRkZGMDAwMAorI2RlZmluZSBYQ0hBTF9EQVRBUkFNMF9TSVpFCQk2NTUzNgorI2RlZmluZSBYQ0hBTF9EQVRBUkFNMF9FQ0NfUEFSSVRZCTAKKworLyogIFhMTUkgUG9ydCAwOiAgKi8KKyNkZWZpbmUgWENIQUxfWExNSTBfVkFERFIJCTB4MzdGODAwMDAKKyNkZWZpbmUgWENIQUxfWExNSTBfUEFERFIJCTB4MzdGODAwMDAKKyNkZWZpbmUgWENIQUxfWExNSTBfU0laRQkJMjYyMTQ0CisjZGVmaW5lIFhDSEFMX1hMTUkwX0VDQ19QQVJJVFkJMAorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJSU5URVJSVVBUUyBhbmQgVElNRVJTCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX0hBVkVfSU5URVJSVVBUUwkJMQkvKiBpbnRlcnJ1cHQgb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfSElHSFBSSV9JTlRFUlJVUFRTCTEJLyogbWVkL2hpZ2gtcHJpLiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTk1JCQkJMQkvKiBub24tbWFza2FibGUgaW50ZXJydXB0ICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ0NPVU5UCQkxCS8qIENDT1VOVCByZWcuICh0aW1lciBvcHRpb24pICovCisjZGVmaW5lIFhDSEFMX05VTV9USU1FUlMJCTMJLyogbnVtYmVyIG9mIENDT01QQVJFbiByZWdzICovCisjZGVmaW5lIFhDSEFMX05VTV9JTlRFUlJVUFRTCQkyNwkvKiBudW1iZXIgb2YgaW50ZXJydXB0cyAqLworI2RlZmluZSBYQ0hBTF9OVU1fSU5URVJSVVBUU19MT0cyCTUJLyogY2VpbChsb2cyKE5VTV9JTlRFUlJVUFRTKSkgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0VYVElOVEVSUlVQVFMJCTIwCS8qIG51bSBvZiBleHRlcm5hbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFhDSEFMX05VTV9JTlRMRVZFTFMJCTQJLyogbnVtYmVyIG9mIGludGVycnVwdCBsZXZlbHMKKwkJCQkJCSAgIChub3QgaW5jbHVkaW5nIGxldmVsIHplcm8pICovCisjZGVmaW5lIFhDSEFMX0VYQ01fTEVWRUwJCTEJLyogbGV2ZWwgbWFza2VkIGJ5IFBTLkVYQ00gKi8KKwkvKiAoYWx3YXlzIDEgaW4gWEVBMTsgbGV2ZWxzIDIgLi4gRVhDTV9MRVZFTCBhcmUgIm1lZGl1bSBwcmlvcml0eSIpICovCisKKy8qICBNYXNrcyBvZiBpbnRlcnJ1cHRzIGF0IGVhY2ggaW50ZXJydXB0IGxldmVsOiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwxX01BU0sJCTB4MDFGMDdGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX01BU0sJCTB4MDIwMTgwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwzX01BU0sJCTB4MDQwNjAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw0X01BU0sJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X01BU0sJCTB4MDAwODAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw2X01BU0sJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw3X01BU0sJCTB4MDAwMDAwMDAKKworLyogIE1hc2tzIG9mIGludGVycnVwdHMgYXQgZWFjaCByYW5nZSAxLi5uIG9mIGludGVycnVwdCBsZXZlbHM6ICAqLworI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDFfQU5EQkVMT1dfTUFTSwkweDAxRjA3RkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMl9BTkRCRUxPV19NQVNLCTB4MDNGMUZGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwzX0FOREJFTE9XX01BU0sJMHgwN0Y3RkZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfQU5EQkVMT1dfTUFTSwkweDA3RjdGRkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNV9BTkRCRUxPV19NQVNLCTB4MDdGRkZGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw2X0FOREJFTE9XX01BU0sJMHgwN0ZGRkZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDdfQU5EQkVMT1dfTUFTSwkweDA3RkZGRkZGCisKKy8qICBMZXZlbCBvZiBlYWNoIGludGVycnVwdDogICovCisjZGVmaW5lIFhDSEFMX0lOVDBfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMV9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQyX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDNfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UNF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ1X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDZfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UN19MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ4X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDlfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMTBfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMTFfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMTJfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMTNfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMTRfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMTVfTEVWRUwJCTIKKyNkZWZpbmUgWENIQUxfSU5UMTZfTEVWRUwJCTIKKyNkZWZpbmUgWENIQUxfSU5UMTdfTEVWRUwJCTMKKyNkZWZpbmUgWENIQUxfSU5UMThfTEVWRUwJCTMKKyNkZWZpbmUgWENIQUxfSU5UMTlfTEVWRUwJCTUKKyNkZWZpbmUgWENIQUxfSU5UMjBfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMjFfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMjJfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMjNfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMjRfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMjVfTEVWRUwJCTIKKyNkZWZpbmUgWENIQUxfSU5UMjZfTEVWRUwJCTMKKyNkZWZpbmUgWENIQUxfREVCVUdMRVZFTAkJNAkvKiBkZWJ1ZyBpbnRlcnJ1cHQgbGV2ZWwgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ERUJVR19FWFRFUk5fSU5UCTEJLyogT0NEIGV4dGVybmFsIGRiIGludGVycnVwdCAqLworI2RlZmluZSBYQ0hBTF9OTUlMRVZFTAkJCTUJLyogTk1JICJsZXZlbCIgKGZvciB1c2Ugd2l0aAorCQkJCQkJICAgRVhDU0FWRS9FUFMvRVBDX24sIFJGSSBuKSAqLworCisvKiAgVHlwZSBvZiBlYWNoIGludGVycnVwdDogICovCisjZGVmaW5lIFhDSEFMX0lOVDBfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMV9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQyX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDNfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UNF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ1X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDZfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UN19UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ4X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDlfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTBfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTFfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTJfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTNfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTRfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTVfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTZfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTdfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMThfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMTlfVFlQRSAJWFRIQUxfSU5UVFlQRV9OTUkKKyNkZWZpbmUgWENIQUxfSU5UMjBfVFlQRSAJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRQorI2RlZmluZSBYQ0hBTF9JTlQyMV9UWVBFIAlYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCisjZGVmaW5lIFhDSEFMX0lOVDIyX1RZUEUgCVhUSEFMX0lOVFRZUEVfU09GVFdBUkUKKyNkZWZpbmUgWENIQUxfSU5UMjNfVFlQRSAJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRQorI2RlZmluZSBYQ0hBTF9JTlQyNF9UWVBFIAlYVEhBTF9JTlRUWVBFX1RJTUVSCisjZGVmaW5lIFhDSEFMX0lOVDI1X1RZUEUgCVhUSEFMX0lOVFRZUEVfVElNRVIKKyNkZWZpbmUgWENIQUxfSU5UMjZfVFlQRSAJWFRIQUxfSU5UVFlQRV9USU1FUgorCisvKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBmb3IgZWFjaCB0eXBlIG9mIGludGVycnVwdDogICovCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19VTkNPTkZJR1VSRUQJMHhGODAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfU09GVFdBUkUJMHgwMEYwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfRVhURVJOX0VER0UJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfRVhURVJOX0xFVkVMCTB4MDAwN0ZGRkYKKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX1RJTUVSCTB4MDcwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX05NSQkJMHgwMDA4MDAwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfV1JJVEVfRVJST1IJMHgwMDAwMDAwMAorCisvKiAgSW50ZXJydXB0IG51bWJlcnMgYXNzaWduZWQgdG8gc3BlY2lmaWMgaW50ZXJydXB0IHNvdXJjZXM6ICAqLworI2RlZmluZSBYQ0hBTF9USU1FUjBfSU5URVJSVVBUCQkyNAkvKiBDQ09NUEFSRTAgKi8KKyNkZWZpbmUgWENIQUxfVElNRVIxX0lOVEVSUlVQVAkJMjUJLyogQ0NPTVBBUkUxICovCisjZGVmaW5lIFhDSEFMX1RJTUVSMl9JTlRFUlJVUFQJCTI2CS8qIENDT01QQVJFMiAqLworI2RlZmluZSBYQ0hBTF9USU1FUjNfSU5URVJSVVBUCQlYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQKKyNkZWZpbmUgWENIQUxfTk1JX0lOVEVSUlVQVAkJMTkJLyogbm9uLW1hc2thYmxlIGludGVycnVwdCAqLworCisvKiAgSW50ZXJydXB0IG51bWJlcnMgZm9yIGxldmVscyBhdCB3aGljaCBvbmx5IG9uZSBpbnRlcnJ1cHQgaXMgY29uZmlndXJlZDogICovCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNV9OVU0JCTE5CisvKiAgKFRoZXJlIGFyZSBtYW55IGludGVycnVwdHMgZWFjaCBhdCBsZXZlbChzKSAxLCAyLCAzLikgICovCisKKworLyoKKyAqICBFeHRlcm5hbCBpbnRlcnJ1cHQgdmVjdG9ycy9sZXZlbHMuCisgKiAgVGhlc2UgbWFjcm9zIGRlc2NyaWJlIGhvdyBYdGVuc2EgcHJvY2Vzc29yIGludGVycnVwdCBudW1iZXJzCisgKiAgKGFzIG51bWJlcmVkIGludGVybmFsbHksIGVnLiBpbiBJTlRFUlJVUFQgYW5kIElOVEVOQUJMRSByZWdpc3RlcnMpCisgKiAgbWFwIHRvIGV4dGVybmFsIEJJbnRlcnJ1cHQ8bj4gcGlucywgZm9yIHRob3NlIGludGVycnVwdHMKKyAqICBjb25maWd1cmVkIGFzIGV4dGVybmFsIChsZXZlbC10cmlnZ2VyZWQsIGVkZ2UtdHJpZ2dlcmVkLCBvciBOTUkpLgorICogIFNlZSB0aGUgWHRlbnNhIHByb2Nlc3NvciBkYXRhYm9vayBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qICBDb3JlIGludGVycnVwdCBudW1iZXJzIG1hcHBlZCB0byBlYWNoIEVYVEVSTkFMIGludGVycnVwdCBudW1iZXI6ICAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQwX05VTQkJMAkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMV9OVU0JCTEJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDJfTlVNCQkyCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQzX05VTQkJMwkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UNF9OVU0JCTQJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDVfTlVNCQk1CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ2X05VTQkJNgkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UN19OVU0JCTcJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDhfTlVNCQk4CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ5X05VTQkJOQkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTBfTlVNCQkxMAkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTFfTlVNCQkxMQkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTJfTlVNCQkxMgkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTNfTlVNCQkxMwkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTRfTlVNCQkxNAkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTVfTlVNCQkxNQkvKiAoaW50bGV2ZWwgMikgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTZfTlVNCQkxNgkvKiAoaW50bGV2ZWwgMikgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTdfTlVNCQkxNwkvKiAoaW50bGV2ZWwgMykgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMThfTlVNCQkxOAkvKiAoaW50bGV2ZWwgMykgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMTlfTlVNCQkxOQkvKiAoaW50bGV2ZWwgNSkgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCUVYQ0VQVElPTlMgYW5kIFZFQ1RPUlMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfWEVBX1ZFUlNJT04JCTIJLyogWHRlbnNhIEV4Y2VwdGlvbiBBcmNoaXRlY3R1cmUKKwkJCQkJCSAgIG51bWJlcjogMSA9PSBYRUExIChvbGQpCisJCQkJCQkJICAgMiA9PSBYRUEyIChuZXcpCisJCQkJCQkJICAgMCA9PSBYRUFYIChleHRlcm4pICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBMQkJCTAJLyogRXhjZXB0aW9uIEFyY2hpdGVjdHVyZSAxICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBMgkJCTEJLyogRXhjZXB0aW9uIEFyY2hpdGVjdHVyZSAyICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBWAkJCTAJLyogRXh0ZXJuYWwgRXhjZXB0aW9uIEFyY2guICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRVhDRVBUSU9OUwkJMQkvKiBleGNlcHRpb24gb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTUVNX0VDQ19QQVJJVFkJMAkvKiBsb2NhbCBtZW1vcnkgRUNDL3Bhcml0eSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RPUl9TRUxFQ1QJMAkvKiByZWxvY2F0YWJsZSB2ZWN0b3JzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfVkVDQkFTRQkJMAkvKiByZWxvY2F0YWJsZSB2ZWN0b3JzICovCisKKyNkZWZpbmUgWENIQUxfUkVTRVRfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX1JFU0VUX1ZFQ1RPUl9WQUREUgkweDNGRkUwM0QwCisjZGVmaW5lIFhDSEFMX1JFU0VUX1ZFQ1RPUl9QQUREUgkweDNGRkUwM0QwCisjZGVmaW5lIFhDSEFMX1VTRVJfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX1VTRVJfVkVDVE9SX1ZBRERSCQkweDQwMDAwMjIwCisjZGVmaW5lIFhDSEFMX1VTRVJfVkVDVE9SX1BBRERSCQkweDQwMDAwMjIwCisjZGVmaW5lIFhDSEFMX0tFUk5FTF9WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfS0VSTkVMX1ZFQ1RPUl9WQUREUgkweDQwMDAwMjAwCisjZGVmaW5lIFhDSEFMX0tFUk5FTF9WRUNUT1JfUEFERFIJMHg0MDAwMDIwMAorI2RlZmluZSBYQ0hBTF9ET1VCTEVFWENfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0RPVUJMRUVYQ19WRUNUT1JfVkFERFIJMHg0MDAwMDJBMAorI2RlZmluZSBYQ0hBTF9ET1VCTEVFWENfVkVDVE9SX1BBRERSCTB4NDAwMDAyQTAKKyNkZWZpbmUgWENIQUxfV0lORE9XX09GNF9WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfV0lORE9XX1VGNF9WRUNPRlMJCTB4MDAwMDAwNDAKKyNkZWZpbmUgWENIQUxfV0lORE9XX09GOF9WRUNPRlMJCTB4MDAwMDAwODAKKyNkZWZpbmUgWENIQUxfV0lORE9XX1VGOF9WRUNPRlMJCTB4MDAwMDAwQzAKKyNkZWZpbmUgWENIQUxfV0lORE9XX09GMTJfVkVDT0ZTCTB4MDAwMDAxMDAKKyNkZWZpbmUgWENIQUxfV0lORE9XX1VGMTJfVkVDT0ZTCTB4MDAwMDAxNDAKKyNkZWZpbmUgWENIQUxfV0lORE9XX1ZFQ1RPUlNfVkFERFIJMHg0MDAwMDAwMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVkVDVE9SU19QQUREUgkweDQwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMl9WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX1ZFQ1RPUl9WQUREUgkweDQwMDAwMjQwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMl9WRUNUT1JfUEFERFIJMHg0MDAwMDI0MAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMM19WRUNUT1JfVkFERFIJMHg0MDAwMDI2MAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfVkVDVE9SX1BBRERSCTB4NDAwMDAyNjAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw0X1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfVkVDVE9SX1ZBRERSCTB4NDAwMDAzOTAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9QQUREUgkweDQwMDAwMzkwCisjZGVmaW5lIFhDSEFMX0RFQlVHX1ZFQ09GUwkJWENIQUxfSU5UTEVWRUw0X1ZFQ09GUworI2RlZmluZSBYQ0hBTF9ERUJVR19WRUNUT1JfVkFERFIJWENIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9WQUREUgorI2RlZmluZSBYQ0hBTF9ERUJVR19WRUNUT1JfUEFERFIJWENIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9QQUREUgorI2RlZmluZSBYQ0hBTF9OTUlfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX05NSV9WRUNUT1JfVkFERFIJCTB4NDAwMDAzQjAKKyNkZWZpbmUgWENIQUxfTk1JX1ZFQ1RPUl9QQUREUgkJMHg0MDAwMDNCMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfVkVDT0ZTCQlYQ0hBTF9OTUlfVkVDT0ZTCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNV9WRUNUT1JfVkFERFIJWENIQUxfTk1JX1ZFQ1RPUl9WQUREUgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfVkVDVE9SX1BBRERSCVhDSEFMX05NSV9WRUNUT1JfUEFERFIKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlERUJVRworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX09DRAkJCTEJLyogT25DaGlwRGVidWcgb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX05VTV9JQlJFQUsJCTIJLyogbnVtYmVyIG9mIElCUkVBS24gcmVncyAqLworI2RlZmluZSBYQ0hBTF9OVU1fREJSRUFLCQkyCS8qIG51bWJlciBvZiBEQlJFQUtuIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9PQ0RfRElSX0FSUkFZCTEJLyogZmFzdGVyIE9DRCBvcHRpb24gKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlNTVUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qICBTZWUgY29yZS1tYXRtYXAuaCBoZWFkZXIgZmlsZSBmb3IgbW9yZSBkZXRhaWxzLiAgKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX1RMQlMJCQkxCS8qIGludmVyc2Ugb2YgSEFWRV9DQUNIRUFUVFIgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9TUEFOTklOR19XQVkJCTEJLyogb25lIHdheSBtYXBzIEkrRCA0R0IgdmFkZHIgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9JREVOVElUWV9NQVAJCTEJLyogdmFkZHIgPT0gcGFkZHIgYWx3YXlzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ0FDSEVBVFRSCQkwCS8qIENBQ0hFQVRUUiByZWdpc3RlciBwcmVzZW50ICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTUlNSUNfQ0FDSEVBVFRSCTEJLyogcmVnaW9uIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9YTFRfQ0FDSEVBVFRSCTAJLyogcmVnaW9uIHByb3QuIHcvdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9QVFBfTU1VCQkwCS8qIGZ1bGwgTU1VICh3aXRoIHBhZ2UgdGFibGUKKwkJCQkJCSAgIFthdXRvcmVmaWxsXSBhbmQgcHJvdGVjdGlvbikKKwkJCQkJCSAgIHVzYWJsZSBmb3IgYW4gTU1VLWJhc2VkIE9TICovCisvKiAgSWYgbm9uZSBvZiB0aGUgYWJvdmUgbGFzdCA0IGFyZSBzZXQsIGl0J3MgYSBjdXN0b20gVExCIGNvbmZpZ3VyYXRpb24uICAqLworCisjZGVmaW5lIFhDSEFMX01NVV9BU0lEX0JJVFMJCTAJLyogbnVtYmVyIG9mIGJpdHMgaW4gQVNJRHMgKi8KKyNkZWZpbmUgWENIQUxfTU1VX1JJTkdTCQkJMQkvKiBudW1iZXIgb2YgcmluZ3MgKDEuLjQpICovCisjZGVmaW5lIFhDSEFMX01NVV9SSU5HX0JJVFMJCTAJLyogbnVtIG9mIGJpdHMgaW4gUklORyBmaWVsZCAqLworCisjZW5kaWYgLyogIVhURU5TQV9IQUxfTk9OX1BSSVZJTEVHRURfT05MWSAqLworCisKKyNlbmRpZiAvKiBfWFRFTlNBX0NPUkVfQ09ORklHVVJBVElPTl9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9oYXJkd2FyZS5oIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5YmEwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMjU5IEBACisjaWZuZGVmIF9fWFRFTlNBX1M2MDAwX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19YVEVOU0FfUzYwMDBfSEFSRFdBUkVfSAorCisjZGVmaW5lIFM2X1NDTEsJCQkxODQzMjAwCisKKyNkZWZpbmUgUzZfTUVNX1JFRyAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBTNl9NRU1fRUZJICAgICAgICAgICAgICAweDMzRjAwMDAwCisjZGVmaW5lIFM2X01FTV9QQ0lFX0RBVEFSQU0xICAgIDB4MzQwMDAwMDAKKyNkZWZpbmUgUzZfTUVNX1hMTUkgICAgICAgICAgICAgMHgzN0Y4MDAwMAorI2RlZmluZSBTNl9NRU1fUElGX0RBVEFSQU0xICAgICAweDM3RkZDMDAwCisjZGVmaW5lIFM2X01FTV9HTUFDICAgICAgICAgICAgIDB4MzgwMDAwMDAKKyNkZWZpbmUgUzZfTUVNX0kyUyAgICAgICAgICAgICAgMHgzQTAwMDAwMAorI2RlZmluZSBTNl9NRU1fRUdJQiAgICAgICAgICAgICAweDNDMDAwMDAwCisjZGVmaW5lIFM2X01FTV9QQ0lFX0NGRyAgICAgICAgIDB4M0UwMDAwMDAKKyNkZWZpbmUgUzZfTUVNX1BJRl9EQVRBUkFNICAgICAgMHgzRkZFMDAwMAorI2RlZmluZSBTNl9NRU1fWExNSV9EQVRBUkFNICAgICAweDNGRkYwMDAwCisjZGVmaW5lIFM2X01FTV9ERFIgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgUzZfTUVNX1BDSUVfQVBFUiAgICAgICAgMHhDMDAwMDAwMAorI2RlZmluZSBTNl9NRU1fQVVYICAgICAgICAgICAgICAweEYwMDAwMDAwCisKKy8qIERldmljZSBhZGRyZXNzZXMgKi8KKworI2RlZmluZSBTNl9SRUdfU0NCICAgICAgICAgICAgICBTNl9NRU1fUkVHCisjZGVmaW5lIFM2X1JFR19OQiAgICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHgxMDAwMCkKKyNkZWZpbmUgUzZfUkVHX0xNU0RNQSAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDIwMDAwKQorI2RlZmluZSBTNl9SRUdfTkkgICAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4MzAwMDApCisjZGVmaW5lIFM2X1JFR19OSURNQSAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHg0MDAwMCkKKyNkZWZpbmUgUzZfUkVHX05TICAgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDUwMDAwKQorI2RlZmluZSBTNl9SRUdfRERSICAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4NjAwMDApCisjZGVmaW5lIFM2X1JFR19HUkVHMSAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHg3MDAwMCkKKyNkZWZpbmUgUzZfUkVHX0RQICAgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDgwMDAwKQorI2RlZmluZSBTNl9SRUdfRFBETUEgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4OTAwMDApCisjZGVmaW5lIFM2X1JFR19FR0lCICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHhBMDAwMCkKKyNkZWZpbmUgUzZfUkVHX1BDSUUgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweEIwMDAwKQorI2RlZmluZSBTNl9SRUdfSTJTICAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4QzAwMDApCisjZGVmaW5lIFM2X1JFR19HTUFDICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHhEMDAwMCkKKyNkZWZpbmUgUzZfUkVHX0hJRkRNQSAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweEUwMDAwKQorI2RlZmluZSBTNl9SRUdfR1JFRzIgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4RjAwMDApCisKKyNkZWZpbmUgUzZfUkVHX0FQQiAgICAgICAgICAgICAgUzZfUkVHX1NDQgorI2RlZmluZSBTNl9SRUdfVUFSVCAgICAgICAgICAgICAoUzZfUkVHX0FQQiArIDB4MDAwMCkKKyNkZWZpbmUgUzZfUkVHX0lOVEMgICAgICAgICAgICAgKFM2X1JFR19BUEIgKyAweDIwMDApCisjZGVmaW5lIFM2X1JFR19TUEkgICAgICAgICAgICAgIChTNl9SRUdfQVBCICsgMHgzMDAwKQorI2RlZmluZSBTNl9SRUdfSTJDICAgICAgICAgICAgICAoUzZfUkVHX0FQQiArIDB4NDAwMCkKKyNkZWZpbmUgUzZfUkVHX0dQSU8gICAgICAgICAgICAgKFM2X1JFR19BUEIgKyAweDgwMDApCisKKy8qIEdsb2JhbCByZWdpc3RlciBibG9jayAqLworCisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLQ0xFQVIJMHgwMDAKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tfU1lTCQkwCisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLX0lPCQkxCisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLX0FJTQkJMgorI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS19EUDAJCTMKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tfRFAyCQk0CisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLX0REUgkJNQorI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS1NUQVQJMHgwMDQKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tTVEFUX0NVUkxPQ0sJMAorI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS1NUQVRfRVZFUlVOTENLCTgKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMCQkweDAxMAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNCQkwCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fRERSMgkJMAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNXzMwME1IWgkJMQorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNXzI0ME1IWgkJMgorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNXzIwME1IWgkJMworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNXzE1ME1IWgkJNAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNXzEyME1IWgkJNQorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNXzQwTUhaCQk2CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fUExMQUlNUkVGCQk3CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fTUFTSwkJNworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSCQk4CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfSFMJCQkwCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfMzMzTUhaCQkxCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfMjUwTUhaCQkyCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfMjAwTUhaCQkzCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfMTY3TUhaCQk0CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfMTAwTUhaCQk1CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfMzNNSFoJCTYKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl9QTExJT1JFRgkJNworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSX01BU0sJCTcKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNQUMJCTE2CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUFDXzEyNU1IWgkJMAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01BQ18yNU1IWgkJMQorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01BQ18yNTAwS0haCQkyCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUFDX0VYVEVSTgkJMworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01BQ19NQVNLCQkzCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUlJCQkxOAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01JSV8xMTFNSFoJCTAKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNSUlfSU9SRUYJCTEKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNSUlfTk9ORQkJMgorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01JSV8xMjVNSFoJCTMKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNSUlfTUFTSwkJMworI2RlZmluZSBTNl9HUkVHMV9TWVNVTkxPQ0tDTlQJMHgwMjAKKyNkZWZpbmUgUzZfR1JFRzFfSU9VTkxPQ0tDTlQJMHgwMjQKKyNkZWZpbmUgUzZfR1JFRzFfQUlNVU5MT0NLQ05UCTB4MDI4CisjZGVmaW5lIFM2X0dSRUcxX0RQMFVOTE9DS0NOVAkweDAyQworI2RlZmluZSBTNl9HUkVHMV9EUDJVTkxPQ0tDTlQJMHgwMzAKKyNkZWZpbmUgUzZfR1JFRzFfRERSVU5MT0NLQ05UCTB4MDM0CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDAJMHgwNDAKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMF9MU0dCCQkwCisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDBfTFNQWAkJOAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwwX01FTURPCQkxNgorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwwX0hTWFQxCQkyNAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwxCTB4MDQ0CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDFfSFNJU0VGCQkwCisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDFfSFNOSQkJOAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwxX0hTTlMJCTE2CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDFfSFNJU0VGQ0ZHCTI0CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDIJMHgwNDgKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMl9MU05CCQkwCisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDJfTFNTQgkJOAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwyX0xTUkVTVAkJMjQKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMwkweDA0QworI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwzX0lTRUZYQUQJMAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwzX0lTRUZMTVMJOAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwzX0lTRUZJU0VGCTE2CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDNfRERSREQJCTI0CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDQJMHgwNTAKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMNF9ERFJEUAkJMAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUw0X0REUkRPCQk4CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDRfRERSTkIJCTE2CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDRfRERSTE1TCQkyNAorI2RlZmluZSBTNl9HUkVHMV9CTE9DS0VOQQkweDEwMAorI2RlZmluZSBTNl9HUkVHMV9CTE9DS19ERFIJCTAKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfRFAJCTEKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfTlNOSQkJMgorI2RlZmluZSBTNl9HUkVHMV9CTE9DS19QQ0lFCQkzCisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX0dNQUMJCTQKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfSTJTCQk1CisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX0VHSUIJCTYKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfU0IJCTcKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfWFQxCQk4CisjZGVmaW5lIFM2X0dSRUcxX0NMS0dBVEUJMHgxMDQKKyNkZWZpbmUgUzZfR1JFRzFfQkdBVEVfQUlNTk9SVEgJCTkKKyNkZWZpbmUgUzZfR1JFRzFfQkdBVEVfQUlNRUFTVAkJMTAKKyNkZWZpbmUgUzZfR1JFRzFfQkdBVEVfQUlNV0VTVAkJMTEKKyNkZWZpbmUgUzZfR1JFRzFfQkdBVEVfQUlNU09VVEgJCTEyCisjZGVmaW5lIFM2X0dSRUcxX0NISVBSRVMJMHgxMDgKKyNkZWZpbmUgUzZfR1JFRzFfQ0hJUFJFU19TT0ZUUkVTCTAKKyNkZWZpbmUgUzZfR1JFRzFfQ0hJUFJFU19MT1NUTE9DSwkxCisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUQ0FVU0UJMHgxMEMKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRDQVVTRV9SRVNFVE4JMAorI2RlZmluZSBTNl9HUkVHMV9SRVNFVENBVVNFX0dMT0JBTAkxCisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUQ0FVU0VfV0RPR1RJTUVSCTIKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRDQVVTRV9TV0NISVAJMworI2RlZmluZSBTNl9HUkVHMV9SRVNFVENBVVNFX1BMTFNZU0xPU1MJNAorI2RlZmluZSBTNl9HUkVHMV9SRVNFVENBVVNFX1BDSUUJNQorI2RlZmluZSBTNl9HUkVHMV9SRVNFVENBVVNFX0NSRUFURURHTE9CCTYKKyNkZWZpbmUgUzZfR1JFRzFfUkVGQ0xPQ0tDTlQJMHgxMTAKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRUSU1FUgkweDExNAorI2RlZmluZSBTNl9HUkVHMV9OTUlUSU1FUgkweDExOAorI2RlZmluZSBTNl9HUkVHMV9HTE9CQUxfVElNRVIJMHgxMUMKKyNkZWZpbmUgUzZfR1JFRzFfVElNRVIwCQkweDE4MAorI2RlZmluZSBTNl9HUkVHMV9USU1FUjEJCTB4MTg0CisjZGVmaW5lIFM2X0dSRUcxX1VBUlRDTE9DS1NFTAkweDIwNAorI2RlZmluZSBTNl9HUkVHMV9DSElQVkVSU1BBQ0tHCTB4MjA4CisjZGVmaW5lIFM2X0dSRUcxX0NISVBWRVJTUEFDS0dfQ0hJUFZJRAkwCisjZGVmaW5lIFM2X0dSRUcxX0NISVBWRVJTUEFDS0dfUEFDS1NFTAk4CisjZGVmaW5lIFM2X0dSRUcxX09ORElFVEVSTUNUUkwJMHgyMEMKKyNkZWZpbmUgUzZfR1JFRzFfT05ESUVURVJNQ1RSTF9XRVNUCTAKKyNkZWZpbmUgUzZfR1JFRzFfT05ESUVURVJNQ1RSTF9OT1JUSAkyCisjZGVmaW5lIFM2X0dSRUcxX09ORElFVEVSTUNUUkxfRUFTVAk0CisjZGVmaW5lIFM2X0dSRUcxX09ORElFVEVSTUNUUkxfU09VVEgJNgorI2RlZmluZSBTNl9HUkVHMV9PTkRJRVRFUk1DVFJMX05PTkUJCTAKKyNkZWZpbmUgUzZfR1JFRzFfT05ESUVURVJNQ1RSTF83NU9ITQkJMgorI2RlZmluZSBTNl9HUkVHMV9PTkRJRVRFUk1DVFJMX01BU0sJCTMKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwCTB4MjEwCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9BSU1TVFJPTkcJMQorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfTUlOSUJPT1RETAkyCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9PQ0RHUElPOFNFVAk1CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9PQ0RHUElPRU5BCTYKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX0RPV05TVFJFQU0JNworI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfUExMU1lTRElWCTgKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX1BMTFNZU0RJVl8zMDBNSFoJMQorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfUExMU1lTRElWXzI0ME1IWgkyCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9QTExTWVNESVZfMjAwTUhaCTMKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX1BMTFNZU0RJVl8xNTBNSFoJNAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfUExMU1lTRElWXzEyME1IWgk1CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9QTExTWVNESVZfNDBNSFoJNgorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfUExMU1lTRElWX01BU0sJNworI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfQkFMSFNMTVMJMTIKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX0JBTEhTTkIJMTgKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX0JBTEhTWEFECTI0CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMQkweDIxNAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzFfUENJRTFMQU5FCTEKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcxX01QTExQUkVTQ0FMRQkyCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMV9NUExMTkNZCTQKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcxX01QTExOQ1k1CTkKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcxX0JBTEhTUkVTVAkxNAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzFfQkFMSFNQU01FTVMJMjAKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcxX0JBTExTR0kJMjYKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcyCTB4MjE4CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMl9QRUlECQkwCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMwkweDIxQworI2RlZmluZSBTNl9HUkVHMV9EUkFNQlVTWUhPTERPRgkweDIyMAorI2RlZmluZSBTNl9HUkVHMV9EUkFNQlVTWUhPTERPRl9YVDAJMAorI2RlZmluZSBTNl9HUkVHMV9EUkFNQlVTWUhPTERPRl9YVDEJNAorI2RlZmluZSBTNl9HUkVHMV9EUkFNQlVTWUhPTERPRl9YVF9NQVNLCQk3CisjZGVmaW5lIFM2X0dSRUcxX1BDSUVCQVIxU0laRQkweDIyNAorI2RlZmluZSBTNl9HUkVHMV9QQ0lFQkFSMlNJWkUJMHgyMjgKKyNkZWZpbmUgUzZfR1JFRzFfUENJRVZFTkRPUgkweDIyQworI2RlZmluZSBTNl9HUkVHMV9QQ0lFREVWSUNFCTB4MjMwCisjZGVmaW5lIFM2X0dSRUcxX1BDSUVSRVYJMHgyMzQKKyNkZWZpbmUgUzZfR1JFRzFfUENJRUNMQVNTCTB4MjM4CisjZGVmaW5lIFM2X0dSRUcxX1hUMURDQUNIRU1JU1MJMHgyNDAKKyNkZWZpbmUgUzZfR1JFRzFfWFQxSUNBQ0hFTUlTUwkweDI0NAorI2RlZmluZSBTNl9HUkVHMV9IV1NFTUFQSE9SRShuKQkoMHg0MDAgKyA0ICogKG4pKQorI2RlZmluZSBTNl9HUkVHMV9IV1NFTUFQSE9SRV9OQgkJMTYKKworLyogcGVyaXBoZXJhbCBpbnRlcnJ1cHQgbnVtYmVycyAqLworCisjZGVmaW5lIFM2X0lOVENfR1BJTyhuKQkJCShuKQkJLyogMC4uMyAqLworI2RlZmluZSBTNl9JTlRDX0kyQwkJCTQKKyNkZWZpbmUgUzZfSU5UQ19TUEkJCQk1CisjZGVmaW5lIFM2X0lOVENfTkJfRVJSCQkJNgorI2RlZmluZSBTNl9JTlRDX0RNQV9MTVNFUlIJCTcKKyNkZWZpbmUgUzZfSU5UQ19ETUFfTE1TTE9XV01SSyhuKQkoOCArIChuKSkJLyogMC4uMTEgKi8KKyNkZWZpbmUgUzZfSU5UQ19ETUFfTE1TUEVORENOVChuKQkoMjAgKyAobikpCS8qIDAuLjExICovCisjZGVmaW5lIFM2X0lOVENfRE1BIEhPU1RMT1dXTVJLKG4pCSgzMiArIChuKSkJLyogMC4uNiAqLworI2RlZmluZSBTNl9JTlRDX0RNQV9IT1NUUEVORENOVChuKQkoMzkgKyAobikpCS8qIDAuLjYgKi8KKyNkZWZpbmUgUzZfSU5UQ19ETUFfSE9TVEVSUgkJNDYKKyNkZWZpbmUgUzZfSU5UQ19VQVJUKG4pCQkJKDQ3ICsgKG4pKQkvKiAwLi4xICovCisjZGVmaW5lIFM2X0lOVENfWEFECQkJNDkKKyNkZWZpbmUgUzZfSU5UQ19OSV9FUlIJCQk1MAorI2RlZmluZSBTNl9JTlRDX05JX0lORklGT0ZVTEwJCTUxCisjZGVmaW5lIFM2X0lOVENfRE1BX05JRVJSCQk1MgorI2RlZmluZSBTNl9JTlRDX0RNQV9OSUxPV1dNUksobikJKDUzICsgKG4pKQkvKiAwLi4zICovCisjZGVmaW5lIFM2X0lOVENfRE1BX05JUEVORENOVChuKQkoNTcgKyAobikpCS8qIDAuLjMgKi8KKyNkZWZpbmUgUzZfSU5UQ19ERFIJCQk2MQorI2RlZmluZSBTNl9JTlRDX05TX0VSUgkJCTYyCisjZGVmaW5lIFM2X0lOVENfRUZJX0NGR0VSUgkJNjMKKyNkZWZpbmUgUzZfSU5UQ19FRklfSVNFRlRFU1QJCTY0CisjZGVmaW5lIFM2X0lOVENfRUZJX1dSSVRFRVJSCQk2NQorI2RlZmluZSBTNl9JTlRDX05NSV9USU1FUgkJNjYKKyNkZWZpbmUgUzZfSU5UQ19QTExMT0NLX1NZUwkJNjcKKyNkZWZpbmUgUzZfSU5UQ19QTExMT0NLX0lPCQk2OAorI2RlZmluZSBTNl9JTlRDX1BMTExPQ0tfQUlNCQk2OQorI2RlZmluZSBTNl9JTlRDX1BMTExPQ0tfRFAwCQk3MAorI2RlZmluZSBTNl9JTlRDX1BMTExPQ0tfRFAyCQk3MQorI2RlZmluZSBTNl9JTlRDX0kyU19FUlIJCQk3MgorI2RlZmluZSBTNl9JTlRDX0dNQUNfU1RBVAkJNzMKKyNkZWZpbmUgUzZfSU5UQ19HTUFDX0VSUgkJNzQKKyNkZWZpbmUgUzZfSU5UQ19HSUJfRVJSCQkJNzUKKyNkZWZpbmUgUzZfSU5UQ19QQ0lFX0VSUgkJNzYKKyNkZWZpbmUgUzZfSU5UQ19QQ0lFX01TSShuKQkJKDc3ICsgKG4pKQkvKiAwLi4zICovCisjZGVmaW5lIFM2X0lOVENfUENJRV9JTlRBCQk4MQorI2RlZmluZSBTNl9JTlRDX1BDSUVfSU5UQgkJODIKKyNkZWZpbmUgUzZfSU5UQ19QQ0lFX0lOVEMJCTgzCisjZGVmaW5lIFM2X0lOVENfUENJRV9JTlRECQk4NAorI2RlZmluZSBTNl9JTlRDX1NXKG4pCQkJKDg1ICsgKG4pKQkvKiAwLi45ICovCisjZGVmaW5lIFM2X0lOVENfU1dfRU5BQkxFKG4pCQkoODUgKyAyNTYgKyAobikpCisjZGVmaW5lIFM2X0lOVENfRE1BX0RQX0VSUgkJOTUKKyNkZWZpbmUgUzZfSU5UQ19ETUFfRFBMT1dXTVJLKG4pCSg5NiArIChuKSkJLyogMC4uMyAqLworI2RlZmluZSBTNl9JTlRDX0RNQV9EUFBFTkRDTlQobikJKDEwMCArIChuKSkJLyogMC4uMyAqLworI2RlZmluZSBTNl9JTlRDX0RNQV9EUFRFUk1DTlQobikJKDEwNCArIChuKSkJLyogMC4uMyAqLworI2RlZmluZSBTNl9JTlRDX1RJTUVSMAkJCTEwOAorI2RlZmluZSBTNl9JTlRDX1RJTUVSMQkJCTEwOQorI2RlZmluZSBTNl9JTlRDX0RNQV9IT1NUVEVSTUNOVChuKQkoMTEwICsgKG4pKQkvKiAwLi42ICovCisKKyNlbmRpZiAvKiBfX1hURU5TQV9TNjAwMF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvaXJxLmggYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwMzFjYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9pcnEuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX19YVEVOU0FfUzYwMDBfSVJRX0gKKyNkZWZpbmUgX19YVEVOU0FfUzYwMDBfSVJRX0gKKworI2RlZmluZSBOT19JUlEJCSgtMSkKKworZXh0ZXJuIHZvaWQgdmFyaWFudF9pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgdmFyaWFudF9pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKTsKKworI2VuZGlmIC8qIF9fWFRFTlNBX1M2MDAwX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvdGllLWFzbS5oIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L3RpZS1hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDJkMGEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L3RpZS1hc20uaApAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgYXNzZW1ibHktbGFuZ3VhZ2UgZGVmaW5pdGlvbnMgKGFzc2VtYmx5CisgKiBtYWNyb3MsIGV0Yy4pIGZvciB0aGlzIHNwZWNpZmljIFh0ZW5zYSBwcm9jZXNzb3IncyBUSUUgZXh0ZW5zaW9ucworICogYW5kIG9wdGlvbnMuICBJdCBpcyBjdXN0b21pemVkIHRvIHRoaXMgWHRlbnNhIHByb2Nlc3NvciBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA4IFRlbnNpbGljYSBJbmMuCisgKi8KKworI2lmbmRlZiBfWFRFTlNBX0NPUkVfVElFX0FTTV9ICisjZGVmaW5lIF9YVEVOU0FfQ09SRV9USUVfQVNNX0gKKworLyogIFNlbGVjdGlvbiBwYXJhbWV0ZXIgdmFsdWVzIGZvciBzYXZlLWFyZWEgc2F2ZS9yZXN0b3JlIG1hY3JvczogICovCisvKiAgT3B0aW9uIHZzLiBUSUU6ICAqLworI2RlZmluZSBYVEhBTF9TQVNfVElFCTB4MDAwMQkvKiBjdXN0b20gZXh0ZW5zaW9uIG9yIGNvcHJvY2Vzc29yICovCisjZGVmaW5lIFhUSEFMX1NBU19PUFQJMHgwMDAyCS8qIG9wdGlvbmFsIChhbmQgbm90IGEgY29wcm9jZXNzb3IpICovCisvKiAgV2hldGhlciB1c2VkIGF1dG9tYXRpY2FsbHkgYnkgY29tcGlsZXI6ICAqLworI2RlZmluZSBYVEhBTF9TQVNfTk9DQwkweDAwMDQJLyogbm90IHVzZWQgYnkgY29tcGlsZXIgdy9vIHNwZWNpYWwgb3B0cy9jb2RlICovCisjZGVmaW5lIFhUSEFMX1NBU19DQwkweDAwMDgJLyogdXNlZCBieSBjb21waWxlciB3aXRob3V0IHNwZWNpYWwgb3B0cy9jb2RlICovCisvKiAgQUJJIGhhbmRsaW5nIGFjcm9zcyBmdW5jdGlvbiBjYWxsczogICovCisjZGVmaW5lIFhUSEFMX1NBU19DQUxSCTB4MDAxMAkvKiBjYWxsZXItc2F2ZWQgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX0NBTEUJMHgwMDIwCS8qIGNhbGxlZS1zYXZlZCAqLworI2RlZmluZSBYVEhBTF9TQVNfR0xPQgkweDAwNDAJLyogZ2xvYmFsIGFjcm9zcyBmdW5jdGlvbiBjYWxscyAoaW4gdGhyZWFkKSAqLworLyogIE1pc2MgICovCisjZGVmaW5lIFhUSEFMX1NBU19BTEwJMHhGRkZGCS8qIGluY2x1ZGUgYWxsIGRlZmF1bHQgTkNQIGNvbnRlbnRzICovCisKKworCisvKiBNYWNybyB0byBzYXZlIGFsbCBub24tY29wcm9jZXNzb3IgKGV4dHJhKSBjdXN0b20gVElFIGFuZCBvcHRpb25hbCBzdGF0ZQorICogKG5vdCBpbmNsdWRpbmcgemVyby1vdmVyaGVhZCBsb29wIHJlZ2lzdGVycykuCisgKiBTYXZlIGFyZWEgcHRyIChjbG9iYmVyZWQpOiAgcHRyICAoMTYgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9OQ1BfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworCS5tYWNybyB4Y2hhbF9uY3Bfc3RvcmUgIHB0ciBhdDEgYXQyIGF0MyBhdDQgIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD1YVEhBTF9TQVNfQUxMCisJeGNoYWxfc2Ffc3RhcnQJXGNvbnRpbnVlLCBcb2ZzCisJLmlmZXEgKFhUSEFMX1NBU19PUFQgfCBYVEhBTF9TQVNfTk9DQyB8IFhUSEFMX1NBU19DQUxSKSAmIH5cc2VsZWN0CisJeGNoYWxfc2FfYWxpZ24JXHB0ciwgMCwgMTAyNC00LCA0LCA0CisJcnNyCVxhdDEsIEJSCQkvLyBib29sZWFuIG9wdGlvbgorCXMzMmkJXGF0MSwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgMAorCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyA0CisJLmVuZGlmCisJLmVuZG0JLy8geGNoYWxfbmNwX3N0b3JlCisKKy8qIE1hY3JvIHRvIHNhdmUgYWxsIG5vbi1jb3Byb2Nlc3NvciAoZXh0cmEpIGN1c3RvbSBUSUUgYW5kIG9wdGlvbmFsIHN0YXRlCisgKiAobm90IGluY2x1ZGluZyB6ZXJvLW92ZXJoZWFkIGxvb3AgcmVnaXN0ZXJzKS4KKyAqIFNhdmUgYXJlYSBwdHIgKGNsb2JiZXJlZCk6ICBwdHIgICgxNiBieXRlIGFsaWduZWQpCisgKiBTY3JhdGNoIHJlZ3MgIChjbG9iYmVyZWQpOiAgYXQxLi5hdDQgIChvbmx5IGZpcnN0IFhDSEFMX05DUF9OVU1fQVRNUFMgbmVlZGVkKQorICovCisJLm1hY3JvIHhjaGFsX25jcF9sb2FkICBwdHIgYXQxIGF0MiBhdDMgYXQ0ICBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9WFRIQUxfU0FTX0FMTAorCXhjaGFsX3NhX3N0YXJ0CVxjb250aW51ZSwgXG9mcworCS5pZmVxIChYVEhBTF9TQVNfT1BUIHwgWFRIQUxfU0FTX05PQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDEwMjQtNCwgNCwgNAorCWwzMmkJXGF0MSwgXHB0ciwgLkx4Y2hhbF9vZnNfICsgMAorCXdzcglcYXQxLCBCUgkJLy8gYm9vbGVhbiBvcHRpb24KKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNAorCS5lbmRpZgorCS5lbmRtCS8vIHhjaGFsX25jcF9sb2FkCisKKworCisjZGVmaW5lIFhDSEFMX05DUF9OVU1fQVRNUFMJMQorCisKKworLyogTWFjcm8gdG8gc2F2ZSB0aGUgc3RhdGUgb2YgVElFIGNvcHJvY2Vzc29yIEZQVS4KKyAqIFNhdmUgYXJlYSBwdHIgKGNsb2JiZXJlZCk6ICBwdHIgICgxNiBieXRlIGFsaWduZWQpCisgKiBTY3JhdGNoIHJlZ3MgIChjbG9iYmVyZWQpOiAgYXQxLi5hdDQgIChvbmx5IGZpcnN0IFhDSEFMX0NQMF9OVU1fQVRNUFMgbmVlZGVkKQorICovCisjZGVmaW5lIHhjaGFsX2NwX0ZQVV9zdG9yZQl4Y2hhbF9jcDBfc3RvcmUKKy8qICNkZWZpbmUgeGNoYWxfY3BfRlBVX3N0b3JlX2EyCXhjaGFsX2NwMF9zdG9yZSBhMiBhMyBhNCBhNSBhNiAqLworCS5tYWNybwl4Y2hhbF9jcDBfc3RvcmUgIHB0ciBhdDEgYXQyIGF0MyBhdDQgIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD1YVEhBTF9TQVNfQUxMCisJeGNoYWxfc2Ffc3RhcnQgXGNvbnRpbnVlLCBcb2ZzCisJLmlmZXEgKFhUSEFMX1NBU19USUUgfCBYVEhBTF9TQVNfTk9DQyB8IFhUSEFMX1NBU19DQUxSKSAmIH5cc2VsZWN0CisJeGNoYWxfc2FfYWxpZ24JXHB0ciwgMCwgMCwgMSwgMTYKKwlydXIyMzIJXGF0MQkJLy8gRkNSCisJczMyaQlcYXQxLCBccHRyLCAwCisJcnVyMjMzCVxhdDEJCS8vIEZTUgorCXMzMmkJXGF0MSwgXHB0ciwgNAorCVNTSSBmMCwgXHB0ciwgIDgKKwlTU0kgZjEsIFxwdHIsICAxMgorCVNTSSBmMiwgXHB0ciwgIDE2CisJU1NJIGYzLCBccHRyLCAgMjAKKwlTU0kgZjQsIFxwdHIsICAyNAorCVNTSSBmNSwgXHB0ciwgIDI4CisJU1NJIGY2LCBccHRyLCAgMzIKKwlTU0kgZjcsIFxwdHIsICAzNgorCVNTSSBmOCwgXHB0ciwgIDQwCisJU1NJIGY5LCBccHRyLCAgNDQKKwlTU0kgZjEwLCBccHRyLCAgNDgKKwlTU0kgZjExLCBccHRyLCAgNTIKKwlTU0kgZjEyLCBccHRyLCAgNTYKKwlTU0kgZjEzLCBccHRyLCAgNjAKKwlTU0kgZjE0LCBccHRyLCAgNjQKKwlTU0kgZjE1LCBccHRyLCAgNjgKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNzIKKwkuZW5kaWYKKwkuZW5kbQkvLyB4Y2hhbF9jcDBfc3RvcmUKKworLyogTWFjcm8gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgVElFIGNvcHJvY2Vzc29yIEZQVS4KKyAqIFNhdmUgYXJlYSBwdHIgKGNsb2JiZXJlZCk6ICBwdHIgICgxNiBieXRlIGFsaWduZWQpCisgKiBTY3JhdGNoIHJlZ3MgIChjbG9iYmVyZWQpOiAgYXQxLi5hdDQgIChvbmx5IGZpcnN0IFhDSEFMX0NQMF9OVU1fQVRNUFMgbmVlZGVkKQorICovCisjZGVmaW5lIHhjaGFsX2NwX0ZQVV9sb2FkCXhjaGFsX2NwMF9sb2FkCisvKiAjZGVmaW5lIHhjaGFsX2NwX0ZQVV9sb2FkX2EyCXhjaGFsX2NwMF9sb2FkIGEyIGEzIGE0IGE1IGE2ICovCisJLm1hY3JvCXhjaGFsX2NwMF9sb2FkICBwdHIgYXQxIGF0MiBhdDMgYXQ0ICBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9WFRIQUxfU0FTX0FMTAorCXhjaGFsX3NhX3N0YXJ0IFxjb250aW51ZSwgXG9mcworCS5pZmVxIChYVEhBTF9TQVNfVElFIHwgWFRIQUxfU0FTX05PQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDAsIDEsIDE2CisJbDMyaQlcYXQxLCBccHRyLCAwCisJd3VyMjMyCVxhdDEJCS8vIEZDUgorCWwzMmkJXGF0MSwgXHB0ciwgNAorCXd1cjIzMwlcYXQxCQkvLyBGU1IKKwlMU0kgZjAsIFxwdHIsICA4CisJTFNJIGYxLCBccHRyLCAgMTIKKwlMU0kgZjIsIFxwdHIsICAxNgorCUxTSSBmMywgXHB0ciwgIDIwCisJTFNJIGY0LCBccHRyLCAgMjQKKwlMU0kgZjUsIFxwdHIsICAyOAorCUxTSSBmNiwgXHB0ciwgIDMyCisJTFNJIGY3LCBccHRyLCAgMzYKKwlMU0kgZjgsIFxwdHIsICA0MAorCUxTSSBmOSwgXHB0ciwgIDQ0CisJTFNJIGYxMCwgXHB0ciwgIDQ4CisJTFNJIGYxMSwgXHB0ciwgIDUyCisJTFNJIGYxMiwgXHB0ciwgIDU2CisJTFNJIGYxMywgXHB0ciwgIDYwCisJTFNJIGYxNCwgXHB0ciwgIDY0CisJTFNJIGYxNSwgXHB0ciwgIDY4CisJLnNldAkuTHhjaGFsX29mc18sIC5MeGNoYWxfb2ZzXyArIDcyCisJLmVuZGlmCisJLmVuZG0JLy8geGNoYWxfY3AwX2xvYWQKKworI2RlZmluZSBYQ0hBTF9DUDBfTlVNX0FUTVBTCTEKKworLyogTWFjcm8gdG8gc2F2ZSB0aGUgc3RhdGUgb2YgVElFIGNvcHJvY2Vzc29yIFhBRC4KKyAqIFNhdmUgYXJlYSBwdHIgKGNsb2JiZXJlZCk6ICBwdHIgICgxNiBieXRlIGFsaWduZWQpCisgKiBTY3JhdGNoIHJlZ3MgIChjbG9iYmVyZWQpOiAgYXQxLi5hdDQgIChvbmx5IGZpcnN0IFhDSEFMX0NQNl9OVU1fQVRNUFMgbmVlZGVkKQorICovCisjZGVmaW5lIHhjaGFsX2NwX1hBRF9zdG9yZQl4Y2hhbF9jcDZfc3RvcmUKKy8qICNkZWZpbmUgeGNoYWxfY3BfWEFEX3N0b3JlX2EyCXhjaGFsX2NwNl9zdG9yZSBhMiBhMyBhNCBhNSBhNiAqLworCS5tYWNybwl4Y2hhbF9jcDZfc3RvcmUgIHB0ciBhdDEgYXQyIGF0MyBhdDQgIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD1YVEhBTF9TQVNfQUxMCisJeGNoYWxfc2Ffc3RhcnQgXGNvbnRpbnVlLCBcb2ZzCisJLmlmZXEgKFhUSEFMX1NBU19USUUgfCBYVEhBTF9TQVNfTk9DQyB8IFhUSEFMX1NBU19DQUxSKSAmIH5cc2VsZWN0CisJeGNoYWxfc2FfYWxpZ24JXHB0ciwgMCwgMCwgMSwgMTYKKwlydXIwCVxhdDEJCS8vIExEQ0JISQorCXMzMmkJXGF0MSwgXHB0ciwgMAorCXJ1cjEJXGF0MQkJLy8gTERDQkxPCisJczMyaQlcYXQxLCBccHRyLCA0CisJcnVyMglcYXQxCQkvLyBTVENCSEkKKwlzMzJpCVxhdDEsIFxwdHIsIDgKKwlydXIzCVxhdDEJCS8vIFNUQ0JMTworCXMzMmkJXGF0MSwgXHB0ciwgMTIKKwlydXI4CVxhdDEJCS8vIExEQlJCQVNFCisJczMyaQlcYXQxLCBccHRyLCAxNgorCXJ1cjkJXGF0MQkJLy8gTERCUk9GRgorCXMzMmkJXGF0MSwgXHB0ciwgMjAKKwlydXIxMAlcYXQxCQkvLyBMREJSSU5DCisJczMyaQlcYXQxLCBccHRyLCAyNAorCXJ1cjExCVxhdDEJCS8vIFNUQlJCQVNFCisJczMyaQlcYXQxLCBccHRyLCAyOAorCXJ1cjEyCVxhdDEJCS8vIFNUQlJPRkYKKwlzMzJpCVxhdDEsIFxwdHIsIDMyCisJcnVyMTMJXGF0MQkJLy8gU1RCUklOQworCXMzMmkJXGF0MSwgXHB0ciwgMzYKKwlydXIyNAlcYXQxCQkvLyBTQ1JBVENIMAorCXMzMmkJXGF0MSwgXHB0ciwgNDAKKwlydXIyNQlcYXQxCQkvLyBTQ1JBVENIMQorCXMzMmkJXGF0MSwgXHB0ciwgNDQKKwlydXIyNglcYXQxCQkvLyBTQ1JBVENIMgorCXMzMmkJXGF0MSwgXHB0ciwgNDgKKwlydXIyNwlcYXQxCQkvLyBTQ1JBVENIMworCXMzMmkJXGF0MSwgXHB0ciwgNTIKKwlXUkFTMTI4SSB3cmEwLCBccHRyLCAgNjQKKwlXUkFTMTI4SSB3cmExLCBccHRyLCAgODAKKwlXUkFTMTI4SSB3cmEyLCBccHRyLCAgOTYKKwlXUkFTMTI4SSB3cmEzLCBccHRyLCAgMTEyCisJV1JBUzEyOEkgd3JhNCwgXHB0ciwgIDEyOAorCVdSQVMxMjhJIHdyYTUsIFxwdHIsICAxNDQKKwlXUkFTMTI4SSB3cmE2LCBccHRyLCAgMTYwCisJV1JBUzEyOEkgd3JhNywgXHB0ciwgIDE3NgorCVdSQVMxMjhJIHdyYTgsIFxwdHIsICAxOTIKKwlXUkFTMTI4SSB3cmE5LCBccHRyLCAgMjA4CisJV1JBUzEyOEkgd3JhMTAsIFxwdHIsICAyMjQKKwlXUkFTMTI4SSB3cmExMSwgXHB0ciwgIDI0MAorCVdSQVMxMjhJIHdyYTEyLCBccHRyLCAgMjU2CisJV1JBUzEyOEkgd3JhMTMsIFxwdHIsICAyNzIKKwlXUkFTMTI4SSB3cmExNCwgXHB0ciwgIDI4OAorCVdSQVMxMjhJIHdyYTE1LCBccHRyLCAgMzA0CisJV1JCUzEyOEkgd3JiMCwgXHB0ciwgIDMyMAorCVdSQlMxMjhJIHdyYjEsIFxwdHIsICAzMzYKKwlXUkJTMTI4SSB3cmIyLCBccHRyLCAgMzUyCisJV1JCUzEyOEkgd3JiMywgXHB0ciwgIDM2OAorCVdSQlMxMjhJIHdyYjQsIFxwdHIsICAzODQKKwlXUkJTMTI4SSB3cmI1LCBccHRyLCAgNDAwCisJV1JCUzEyOEkgd3JiNiwgXHB0ciwgIDQxNgorCVdSQlMxMjhJIHdyYjcsIFxwdHIsICA0MzIKKwlXUkJTMTI4SSB3cmI4LCBccHRyLCAgNDQ4CisJV1JCUzEyOEkgd3JiOSwgXHB0ciwgIDQ2NAorCVdSQlMxMjhJIHdyYjEwLCBccHRyLCAgNDgwCisJV1JCUzEyOEkgd3JiMTEsIFxwdHIsICA0OTYKKwlXUkJTMTI4SSB3cmIxMiwgXHB0ciwgIDUxMgorCVdSQlMxMjhJIHdyYjEzLCBccHRyLCAgNTI4CisJV1JCUzEyOEkgd3JiMTQsIFxwdHIsICA1NDQKKwlXUkJTMTI4SSB3cmIxNSwgXHB0ciwgIDU2MAorCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyA1NzYKKwkuZW5kaWYKKwkuZW5kbQkvLyB4Y2hhbF9jcDZfc3RvcmUKKworLyogTWFjcm8gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgVElFIGNvcHJvY2Vzc29yIFhBRC4KKyAqIFNhdmUgYXJlYSBwdHIgKGNsb2JiZXJlZCk6ICBwdHIgICgxNiBieXRlIGFsaWduZWQpCisgKiBTY3JhdGNoIHJlZ3MgIChjbG9iYmVyZWQpOiAgYXQxLi5hdDQgIChvbmx5IGZpcnN0IFhDSEFMX0NQNl9OVU1fQVRNUFMgbmVlZGVkKQorICovCisjZGVmaW5lIHhjaGFsX2NwX1hBRF9sb2FkCXhjaGFsX2NwNl9sb2FkCisvKiAjZGVmaW5lIHhjaGFsX2NwX1hBRF9sb2FkX2EyCXhjaGFsX2NwNl9sb2FkIGEyIGEzIGE0IGE1IGE2ICovCisJLm1hY3JvCXhjaGFsX2NwNl9sb2FkICBwdHIgYXQxIGF0MiBhdDMgYXQ0ICBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9WFRIQUxfU0FTX0FMTAorCXhjaGFsX3NhX3N0YXJ0IFxjb250aW51ZSwgXG9mcworCS5pZmVxIChYVEhBTF9TQVNfVElFIHwgWFRIQUxfU0FTX05PQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDAsIDEsIDE2CisJbDMyaQlcYXQxLCBccHRyLCAwCisJd3VyMAlcYXQxCQkvLyBMRENCSEkKKwlsMzJpCVxhdDEsIFxwdHIsIDQKKwl3dXIxCVxhdDEJCS8vIExEQ0JMTworCWwzMmkJXGF0MSwgXHB0ciwgOAorCXd1cjIJXGF0MQkJLy8gU1RDQkhJCisJbDMyaQlcYXQxLCBccHRyLCAxMgorCXd1cjMJXGF0MQkJLy8gU1RDQkxPCisJbDMyaQlcYXQxLCBccHRyLCAxNgorCXd1cjgJXGF0MQkJLy8gTERCUkJBU0UKKwlsMzJpCVxhdDEsIFxwdHIsIDIwCisJd3VyOQlcYXQxCQkvLyBMREJST0ZGCisJbDMyaQlcYXQxLCBccHRyLCAyNAorCXd1cjEwCVxhdDEJCS8vIExEQlJJTkMKKwlsMzJpCVxhdDEsIFxwdHIsIDI4CisJd3VyMTEJXGF0MQkJLy8gU1RCUkJBU0UKKwlsMzJpCVxhdDEsIFxwdHIsIDMyCisJd3VyMTIJXGF0MQkJLy8gU1RCUk9GRgorCWwzMmkJXGF0MSwgXHB0ciwgMzYKKwl3dXIxMwlcYXQxCQkvLyBTVEJSSU5DCisJbDMyaQlcYXQxLCBccHRyLCA0MAorCXd1cjI0CVxhdDEJCS8vIFNDUkFUQ0gwCisJbDMyaQlcYXQxLCBccHRyLCA0NAorCXd1cjI1CVxhdDEJCS8vIFNDUkFUQ0gxCisJbDMyaQlcYXQxLCBccHRyLCA0OAorCXd1cjI2CVxhdDEJCS8vIFNDUkFUQ0gyCisJbDMyaQlcYXQxLCBccHRyLCA1MgorCXd1cjI3CVxhdDEJCS8vIFNDUkFUQ0gzCisJV1JCTDEyOEkgd3JiMCwgXHB0ciwgIDMyMAorCVdSQkwxMjhJIHdyYjEsIFxwdHIsICAzMzYKKwlXUkJMMTI4SSB3cmIyLCBccHRyLCAgMzUyCisJV1JCTDEyOEkgd3JiMywgXHB0ciwgIDM2OAorCVdSQkwxMjhJIHdyYjQsIFxwdHIsICAzODQKKwlXUkJMMTI4SSB3cmI1LCBccHRyLCAgNDAwCisJV1JCTDEyOEkgd3JiNiwgXHB0ciwgIDQxNgorCVdSQkwxMjhJIHdyYjcsIFxwdHIsICA0MzIKKwlXUkJMMTI4SSB3cmI4LCBccHRyLCAgNDQ4CisJV1JCTDEyOEkgd3JiOSwgXHB0ciwgIDQ2NAorCVdSQkwxMjhJIHdyYjEwLCBccHRyLCAgNDgwCisJV1JCTDEyOEkgd3JiMTEsIFxwdHIsICA0OTYKKwlXUkJMMTI4SSB3cmIxMiwgXHB0ciwgIDUxMgorCVdSQkwxMjhJIHdyYjEzLCBccHRyLCAgNTI4CisJV1JCTDEyOEkgd3JiMTQsIFxwdHIsICA1NDQKKwlXUkJMMTI4SSB3cmIxNSwgXHB0ciwgIDU2MAorCVdSQUwxMjhJIHdyYTAsIFxwdHIsICA2NAorCVdSQUwxMjhJIHdyYTEsIFxwdHIsICA4MAorCVdSQUwxMjhJIHdyYTIsIFxwdHIsICA5NgorCVdSQUwxMjhJIHdyYTMsIFxwdHIsICAxMTIKKwlXUkFMMTI4SSB3cmE0LCBccHRyLCAgMTI4CisJV1JBTDEyOEkgd3JhNSwgXHB0ciwgIDE0NAorCVdSQUwxMjhJIHdyYTYsIFxwdHIsICAxNjAKKwlXUkFMMTI4SSB3cmE3LCBccHRyLCAgMTc2CisJV1JBTDEyOEkgd3JhOCwgXHB0ciwgIDE5MgorCVdSQUwxMjhJIHdyYTksIFxwdHIsICAyMDgKKwlXUkFMMTI4SSB3cmExMCwgXHB0ciwgIDIyNAorCVdSQUwxMjhJIHdyYTExLCBccHRyLCAgMjQwCisJV1JBTDEyOEkgd3JhMTIsIFxwdHIsICAyNTYKKwlXUkFMMTI4SSB3cmExMywgXHB0ciwgIDI3MgorCVdSQUwxMjhJIHdyYTE0LCBccHRyLCAgMjg4CisJV1JBTDEyOEkgd3JhMTUsIFxwdHIsICAzMDQKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNTc2CisJLmVuZGlmCisJLmVuZG0JLy8geGNoYWxfY3A2X2xvYWQKKworI2RlZmluZSBYQ0hBTF9DUDZfTlVNX0FUTVBTCTEKKyNkZWZpbmUgWENIQUxfU0FfTlVNX0FUTVBTCTEKKworCS8qICBFbXB0eSBtYWNyb3MgZm9yIHVuY29uZmlndXJlZCBjb3Byb2Nlc3NvcnM6ICAqLworCS5tYWNybyB4Y2hhbF9jcDFfc3RvcmUJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwMV9sb2FkCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDJfc3RvcmUJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwMl9sb2FkCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDNfc3RvcmUJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwM19sb2FkCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDRfc3RvcmUJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwNF9sb2FkCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDVfc3RvcmUJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwNV9sb2FkCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDdfc3RvcmUJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwN19sb2FkCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCisjZW5kaWYgLypfWFRFTlNBX0NPUkVfVElFX0FTTV9IKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L3RpZS5oIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L3RpZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlN2VhODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvdGllLmgKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBUaGlzIGhlYWRlciBmaWxlIGRlc2NyaWJlcyB0aGlzIHNwZWNpZmljIFh0ZW5zYSBwcm9jZXNzb3IncyBUSUUgZXh0ZW5zaW9ucworICogdGhhdCBleHRlbmQgYmFzaWMgWHRlbnNhIGNvcmUgZnVuY3Rpb25hbGl0eS4gIEl0IGlzIGN1c3RvbWl6ZWQgdG8gdGhpcworICogWHRlbnNhIHByb2Nlc3NvciBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA4IFRlbnNpbGljYSBJbmMuCisgKi8KKworI2lmbmRlZiBfWFRFTlNBX0NPUkVfVElFX0gKKyNkZWZpbmUgX1hURU5TQV9DT1JFX1RJRV9ICisKKyNkZWZpbmUgWENIQUxfQ1BfTlVNCQkJMgkvKiBudW1iZXIgb2YgY29wcm9jZXNzb3JzICovCisjZGVmaW5lIFhDSEFMX0NQX01BWAkJCTcJLyogbWF4IENQIElEICsgMSAoMCBpZiBub25lKSAqLworI2RlZmluZSBYQ0hBTF9DUF9NQVNLCQkJMHg0MQkvKiBiaXRtYXNrIG9mIGFsbCBDUHMgYnkgSUQgKi8KKyNkZWZpbmUgWENIQUxfQ1BfUE9SVF9NQVNLCQkweDAwCS8qIGJpdG1hc2sgb2Ygb25seSBwb3J0IENQcyAqLworCisvKiAgQmFzaWMgcGFyYW1ldGVycyBvZiBlYWNoIGNvcHJvY2Vzc29yOiAgKi8KKyNkZWZpbmUgWENIQUxfQ1AwX05BTUUJCQkiRlBVIgorI2RlZmluZSBYQ0hBTF9DUDBfSURFTlQJCQlGUFUKKyNkZWZpbmUgWENIQUxfQ1AwX1NBX1NJWkUJCTcyCS8qIHNpemUgb2Ygc3RhdGUgc2F2ZSBhcmVhICovCisjZGVmaW5lIFhDSEFMX0NQMF9TQV9BTElHTgkJNAkvKiBtaW4gYWxpZ25tZW50IG9mIHNhdmUgYXJlYSAqLworI2RlZmluZSBYQ0hBTF9DUF9JRF9GUFUJCQkwCS8qIGNvcHJvY2Vzc29yIElEICgwLi43KSAqLworI2RlZmluZSBYQ0hBTF9DUDZfTkFNRQkJCSJYQUQiCisjZGVmaW5lIFhDSEFMX0NQNl9JREVOVAkJCVhBRAorI2RlZmluZSBYQ0hBTF9DUDZfU0FfU0laRQkJNTc2CS8qIHNpemUgb2Ygc3RhdGUgc2F2ZSBhcmVhICovCisjZGVmaW5lIFhDSEFMX0NQNl9TQV9BTElHTgkJMTYJLyogbWluIGFsaWdubWVudCBvZiBzYXZlIGFyZWEgKi8KKyNkZWZpbmUgWENIQUxfQ1BfSURfWEFECQkJNgkvKiBjb3Byb2Nlc3NvciBJRCAoMC4uNykgKi8KKworLyogIEZpbGxlciBpbmZvIGZvciB1bmFzc2lnbmVkIGNvcHJvY2Vzc29ycywgdG8gc2ltcGxpZnkgYXJyYXlzIGV0YzogICovCisjZGVmaW5lIFhDSEFMX0NQMV9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQMV9TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDJfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDJfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1AzX1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1AzX1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQNF9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQNF9TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDVfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDVfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1A3X1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1A3X1NBX0FMSUdOCQkxCisKKy8qICBTYXZlIGFyZWEgZm9yIG5vbi1jb3Byb2Nlc3NvciBvcHRpb25hbCBhbmQgY3VzdG9tIChUSUUpIHN0YXRlOiAgKi8KKyNkZWZpbmUgWENIQUxfTkNQX1NBX1NJWkUJCTQKKyNkZWZpbmUgWENIQUxfTkNQX1NBX0FMSUdOCQk0CisKKy8qICBUb3RhbCBzYXZlIGFyZWEgZm9yIG9wdGlvbmFsIGFuZCBjdXN0b20gc3RhdGUgKE5DUCArIENQbik6ICAqLworI2RlZmluZSBYQ0hBTF9UT1RBTF9TQV9TSVpFCQk2NzIJLyogd2l0aCAxNi1ieXRlIGFsaWduIHBhZGRpbmcgKi8KKyNkZWZpbmUgWENIQUxfVE9UQUxfU0FfQUxJR04JCTE2CS8qIGFjdHVhbCBtaW5pbXVtIGFsaWdubWVudCAqLworCisvKgorICogRGV0YWlsZWQgY29udGVudHMgb2Ygc2F2ZSBhcmVhcy4KKyAqIE5PVEU6ICBjYWxsZXIgbXVzdCBkZWZpbmUgdGhlIFhDSEFMX1NBX1JFRyBtYWNybyAobm90IGRlZmluZWQgaGVyZSkKKyAqIGJlZm9yZSBleHBhbmRpbmcgdGhlIFhDSEFMX3h4eF9TQV9MSVNUKCkgbWFjcm9zLgorICoKKyAqIFhDSEFMX1NBX1JFRyhzLGNjdXNlZCxhYmlraW5kLGtpbmQsb3B0LG5hbWUsZ2FsaWduLGFsaWduLGFzaXplLAorICoJCWRibnVtLGJhc2UscmVnbnVtLGJpdHN6LGdhcHN6LHJlc2V0LHguLi4pCisgKgorICoJcyA9IHBhc3NlZCBmcm9tIFhDSEFMXypfTElTVChzKSwgZWcuIHRvIHNlbGVjdCBob3cgdG8gZXhwYW5kCisgKgljY3VzZWQgPSBzZXQgaWYgdXNlZCBieSBjb21waWxlciB3aXRob3V0IHNwZWNpYWwgb3B0aW9ucyBvciBjb2RlCisgKglhYmlraW5kID0gMCAoY2FsbGVyLXNhdmVkKSwgMSAoY2FsbGVlLXNhdmVkKSwgb3IgMiAodGhyZWFkLWdsb2JhbCkKKyAqCWtpbmQgPSAwIChzcGVjaWFsIHJlZyksIDEgKFRJRSB1c2VyIHJlZyksIG9yIDIgKFRJRSByZWdmaWxlIHJlZykKKyAqCW9wdCA9IDAgKGN1c3RvbSBUSUUgZXh0ZW5zaW9uIG9yIGNvcHJvY2Vzc29yKSwgb3IgMSAob3B0aW9uYWwgcmVnKQorICoJbmFtZSA9IGxvd2VyY2FzZSByZWcgbmFtZSAobm8gcXVvdGVzKQorICoJZ2FsaWduID0gZ3JvdXAgYnl0ZSBhbGlnbm1lbnQgKHBvd2VyIG9mIDIpIChnYWxpZ24gPj0gYWxpZ24pCisgKglhbGlnbiA9IHJlZ2lzdGVyIGJ5dGUgYWxpZ25tZW50IChwb3dlciBvZiAyKQorICoJYXNpemUgPSBhbGxvY2F0ZWQgc2l6ZSBpbiBieXRlcyAoYXNpemUqOCA9PSBiaXRzeiArIGdhcHN6ICsgcGFkc3opCisgKgkgIChub3QgaW5jbHVkaW5nIGFueSBwYWQgYnl0ZXMgcmVxdWlyZWQgdG8gZ2FsaWduIHRoaXMgb3IgbmV4dCByZWcpCisgKglkYm51bSA9IHVuaXF1ZSB0YXJnZXQgbnVtYmVyIGYvZGVidWcgKHNlZSA8eHRlbnNhLWxpYmRiLW1hY3Jvcy5oPikKKyAqCWJhc2UgPSByZWcgc2hvcnRuYW1lIHcvbyBpbmRleCAob3Igc3I9c3BlY2lhbCwgdXI9VElFIHVzZXIgcmVnKQorICoJcmVnbnVtID0gcmVnIGluZGV4IGluIHJlZ2ZpbGUsIG9yIHNwZWNpYWwvVElFLXVzZXIgcmVnIG51bWJlcgorICoJYml0c3ogPSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYml0cyAocmVnZmlsZSB3aWR0aCwgb3IgdXIvc3IgbWFzayBiaXRzKQorICoJZ2Fwc3ogPSBpbnRlcnZlbmluZyBiaXRzLCBpZiBiaXRzeiBiaXRzIG5vdCBzdG9yZWQgY29udGlndW91c2x5CisgKgkocGFkc3ogPSBwYWQgYml0cyBhdCBlbmQgW1RJRSByZWdmaWxlXSBvciBhdCBtc2JpdHMgW3VyLHNyXSBvZiBhc2l6ZSkKKyAqCXJlc2V0ID0gcmVnaXN0ZXIgcmVzZXQgdmFsdWUgKG9yIDAgaWYgdW5kZWZpbmVkIGF0IHJlc2V0KQorICoJeCA9IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICgwIHVudGlsIHRoZW4pCisgKgorICogIFRvIGZpbHRlciBvdXQgY2VydGFpbiByZWdpc3RlcnMsIGUuZy4gdG8gZXhwYW5kIG9ubHkgdGhlIG5vbi1nbG9iYWwKKyAqICByZWdpc3RlcnMgdXNlZCBieSB0aGUgY29tcGlsZXIsIHlvdSBjYW4gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKyAqCisgKiAgI2RlZmluZSBYQ0hBTF9TQV9SRUcocyxjY3VzZWQscC4uLikJU0VMQ0MjI2NjdXNlZChwKQorICogICNkZWZpbmUgU0VMQ0MwKHAuLi4pCisgKiAgI2RlZmluZSBTRUxDQzEoYWJpa2luZCxwLi4uKQlTRUxBSyMjYWJpa2luZChwKQorICogICNkZWZpbmUgU0VMQUswKHAuLi4pCQlSRUcocCkKKyAqICAjZGVmaW5lIFNFTEFLMShwLi4uKQkJUkVHKHApCisgKiAgI2RlZmluZSBTRUxBSzIocC4uLikKKyAqICAjZGVmaW5lIFJFRyhraW5kLHRpZSxuYW1lLGdhbG4sYWxuLGFzeixjc3osZGJudW0sYmFzZSxybnVtLGJzeixyc3QseC4uLikgXAorICoJCS4uLndoYXQgeW91IHdhbnQgdG8gZXhwYW5kLi4uCisgKi8KKworI2RlZmluZSBYQ0hBTF9OQ1BfU0FfTlVNCTEKKyNkZWZpbmUgWENIQUxfTkNQX1NBX0xJU1QocykJXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwwLDEsICAgICAgICAgICAgIGJyLCA0LCA0LCA0LDB4MDIwNCwgIHNyLDQgICwgMTYsMCwwLDApCisKKyNkZWZpbmUgWENIQUxfQ1AwX1NBX05VTQkxOAorI2RlZmluZSBYQ0hBTF9DUDBfU0FfTElTVChzKQlcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgICAgICBmY3IsIDQsIDQsIDQsMHgwM0U4LCAgdXIsMjMyLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICAgICAgZnNyLCA0LCA0LCA0LDB4MDNFOSwgIHVyLDIzMywgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmMCwgNCwgNCwgNCwweDAwMzAsICAgZiwwICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjEsIDQsIDQsIDQsMHgwMDMxLCAgIGYsMSAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGYyLCA0LCA0LCA0LDB4MDAzMiwgICBmLDIgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmMywgNCwgNCwgNCwweDAwMzMsICAgZiwzICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjQsIDQsIDQsIDQsMHgwMDM0LCAgIGYsNCAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGY1LCA0LCA0LCA0LDB4MDAzNSwgICBmLDUgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmNiwgNCwgNCwgNCwweDAwMzYsICAgZiw2ICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjcsIDQsIDQsIDQsMHgwMDM3LCAgIGYsNyAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGY4LCA0LCA0LCA0LDB4MDAzOCwgICBmLDggICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmOSwgNCwgNCwgNCwweDAwMzksICAgZiw5ICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICBmMTAsIDQsIDQsIDQsMHgwMDNBLCAgIGYsMTAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgZjExLCA0LCA0LCA0LDB4MDAzQiwgICBmLDExICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgIGYxMiwgNCwgNCwgNCwweDAwM0MsICAgZiwxMiAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICBmMTMsIDQsIDQsIDQsMHgwMDNELCAgIGYsMTMgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgZjE0LCA0LCA0LCA0LDB4MDAzRSwgICBmLDE0ICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgIGYxNSwgNCwgNCwgNCwweDAwM0YsICAgZiwxNSAsIDMyLDAsMCwwKQorCisjZGVmaW5lIFhDSEFMX0NQMV9TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDFfU0FfTElTVChzKQkvKiBlbXB0eSAqLworCisjZGVmaW5lIFhDSEFMX0NQMl9TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDJfU0FfTElTVChzKQkvKiBlbXB0eSAqLworCisjZGVmaW5lIFhDSEFMX0NQM19TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDNfU0FfTElTVChzKQkvKiBlbXB0eSAqLworCisjZGVmaW5lIFhDSEFMX0NQNF9TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDRfU0FfTElTVChzKQkvKiBlbXB0eSAqLworCisjZGVmaW5lIFhDSEFMX0NQNV9TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDVfU0FfTElTVChzKQkvKiBlbXB0eSAqLworCisjZGVmaW5lIFhDSEFMX0NQNl9TQV9OVU0JNDYKKyNkZWZpbmUgWENIQUxfQ1A2X1NBX0xJU1QocykJXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICAgbGRjYmhpLDE2LCA0LCA0LDB4MDMwMCwgIHVyLDAgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgIGxkY2JsbywgNCwgNCwgNCwweDAzMDEsICB1ciwxICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgICBzdGNiaGksIDQsIDQsIDQsMHgwMzAyLCAgdXIsMiAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICAgc3RjYmxvLCA0LCA0LCA0LDB4MDMwMywgIHVyLDMgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICBsZGJyYmFzZSwgNCwgNCwgNCwweDAzMDgsICB1ciw4ICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgIGxkYnJvZmYsIDQsIDQsIDQsMHgwMzA5LCAgdXIsOSAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICBsZGJyaW5jLCA0LCA0LCA0LDB4MDMwQSwgIHVyLDEwICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICBzdGJyYmFzZSwgNCwgNCwgNCwweDAzMEIsICB1ciwxMSAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgIHN0YnJvZmYsIDQsIDQsIDQsMHgwMzBDLCAgdXIsMTIgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICBzdGJyaW5jLCA0LCA0LCA0LDB4MDMwRCwgIHVyLDEzICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICBzY3JhdGNoMCwgNCwgNCwgNCwweDAzMTgsICB1ciwyNCAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgc2NyYXRjaDEsIDQsIDQsIDQsMHgwMzE5LCAgdXIsMjUgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgIHNjcmF0Y2gyLCA0LCA0LCA0LDB4MDMxQSwgIHVyLDI2ICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICBzY3JhdGNoMywgNCwgNCwgNCwweDAzMUIsICB1ciwyNyAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTAsMTYsMTYsMTYsMHgxMDEwLCB3cmEsMCAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmExLDE2LDE2LDE2LDB4MTAxMSwgd3JhLDEgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhMiwxNiwxNiwxNiwweDEwMTIsIHdyYSwyICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTMsMTYsMTYsMTYsMHgxMDEzLCB3cmEsMyAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmE0LDE2LDE2LDE2LDB4MTAxNCwgd3JhLDQgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhNSwxNiwxNiwxNiwweDEwMTUsIHdyYSw1ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTYsMTYsMTYsMTYsMHgxMDE2LCB3cmEsNiAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmE3LDE2LDE2LDE2LDB4MTAxNywgd3JhLDcgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhOCwxNiwxNiwxNiwweDEwMTgsIHdyYSw4ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTksMTYsMTYsMTYsMHgxMDE5LCB3cmEsOSAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYTEwLDE2LDE2LDE2LDB4MTAxQSwgd3JhLDEwICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmExMSwxNiwxNiwxNiwweDEwMUIsIHdyYSwxMSAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JhMTIsMTYsMTYsMTYsMHgxMDFDLCB3cmEsMTIgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYTEzLDE2LDE2LDE2LDB4MTAxRCwgd3JhLDEzICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmExNCwxNiwxNiwxNiwweDEwMUUsIHdyYSwxNCAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JhMTUsMTYsMTYsMTYsMHgxMDFGLCB3cmEsMTUgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmIwLDE2LDE2LDE2LDB4MTAyMCwgd3JiLDAgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiMSwxNiwxNiwxNiwweDEwMjEsIHdyYiwxICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjIsMTYsMTYsMTYsMHgxMDIyLCB3cmIsMiAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmIzLDE2LDE2LDE2LDB4MTAyMywgd3JiLDMgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiNCwxNiwxNiwxNiwweDEwMjQsIHdyYiw0ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjUsMTYsMTYsMTYsMHgxMDI1LCB3cmIsNSAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmI2LDE2LDE2LDE2LDB4MTAyNiwgd3JiLDYgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiNywxNiwxNiwxNiwweDEwMjcsIHdyYiw3ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjgsMTYsMTYsMTYsMHgxMDI4LCB3cmIsOCAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmI5LDE2LDE2LDE2LDB4MTAyOSwgd3JiLDkgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmIxMCwxNiwxNiwxNiwweDEwMkEsIHdyYiwxMCAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JiMTEsMTYsMTYsMTYsMHgxMDJCLCB3cmIsMTEgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYjEyLDE2LDE2LDE2LDB4MTAyQywgd3JiLDEyICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmIxMywxNiwxNiwxNiwweDEwMkQsIHdyYiwxMyAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JiMTQsMTYsMTYsMTYsMHgxMDJFLCB3cmIsMTQgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYjE1LDE2LDE2LDE2LDB4MTAyRiwgd3JiLDE1ICwxMjgsMCwwLDApCisKKyNkZWZpbmUgWENIQUxfQ1A3X1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQN19TQV9MSVNUKHMpCS8qIGVtcHR5ICovCisKKy8qIEJ5dGUgbGVuZ3RoIG9mIGluc3RydWN0aW9uIGZyb20gaXRzIGZpcnN0IG5pYmJsZSAob3AwIGZpZWxkKSwgcGVyIEZMSVguICAqLworI2RlZmluZSBYQ0hBTF9PUDBfRk9STUFUX0xFTkdUSFMJMywzLDMsMywzLDMsMywzLDIsMiwyLDIsMiwyLDgsOAorCisjZW5kaWYgLypfWFRFTlNBX0NPUkVfVElFX0gqLworCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pcnEuYyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NTFlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pcnEuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogczYwMDAgaXJxIGNyb3NzYmFyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IGVtbGl4IEdtYkgKKyAqIEF1dGhvcnM6CUpvaGFubmVzIFdlaW5lciA8andAZW1saXguY29tPgorICoJCU9za2FyIFNjaGlybWVyIDxvc0BlbWxpeC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDx2YXJpYW50L2hhcmR3YXJlLmg+CisKKy8qIFM2X1JFR19JTlRDICovCisjZGVmaW5lIElOVENfU1RBVFVTCTB4MDAwCisjZGVmaW5lIElOVENfUkFXCTB4MDEwCisjZGVmaW5lIElOVENfU1RBVFVTX0FHCTB4MTAwCisjZGVmaW5lIElOVENfQ0ZHKG4pCSgweDIwMCArIDQgKiAobikpCisKKy8qCisgKiBUaGUgczYwMDAgaGFzIGEgY3Jvc3NiYXIgdGhhdCBtdWx0aXBsZXhlcyBpbnRlcnJ1cHQgb3V0cHV0IGxpbmVzCisgKiBmcm9tIHRoZSBwZXJpcGhlcmFscyB0byBpbnB1dCBsaW5lcyBvbiB0aGUgeHRlbnNhIGNvcmUuCisgKgorICogV2UgbGVhdmUgdGhlIG1hcHBpbmcgZGVjaXNpb25zIHRvIHRoZSBwbGF0Zm9ybSBhcyBpdCBkZXBlbmRzIG9uIHRoZQorICogYWN0dWFsbHkgY29ubmVjdGVkIHBlcmlwaGVyYWxzIHdoaWNoIGRpc3RyaWJ1dGlvbiBtYWtlcyBzZW5zZS4KKyAqLworZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyICpwbGF0Zm9ybV9pcnFfbWFwcGluZ3NbTlJfSVJRU107CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNjcF90b19pbnRjX2VuYWJsZVtdID0geworI2RlZmluZQlUT19JTlRDX0VOQUJMRShuKQkoKChuKSA8PCAxKSArIDEpCisJVE9fSU5UQ19FTkFCTEUoMCksCisJVE9fSU5UQ19FTkFCTEUoMSksCisJVE9fSU5UQ19FTkFCTEUoMiksCisJVE9fSU5UQ19FTkFCTEUoMyksCisJVE9fSU5UQ19FTkFCTEUoNCksCisJVE9fSU5UQ19FTkFCTEUoNSksCisJVE9fSU5UQ19FTkFCTEUoNiksCisJVE9fSU5UQ19FTkFCTEUoNyksCisJVE9fSU5UQ19FTkFCTEUoOCksCisJVE9fSU5UQ19FTkFCTEUoOSksCisJVE9fSU5UQ19FTkFCTEUoMTApLAorCVRPX0lOVENfRU5BQkxFKDExKSwKKwlUT19JTlRDX0VOQUJMRSgxMiksCisJLTEsCisJLTEsCisJVE9fSU5UQ19FTkFCTEUoMTMpLAorCS0xLAorCVRPX0lOVENfRU5BQkxFKDE0KSwKKwktMSwKKwlUT19JTlRDX0VOQUJMRSgxNSksCisjdW5kZWYJVE9fSU5UQ19FTkFCTEUKK307CisKK3N0YXRpYyB2b2lkIGlycV9zZXQodW5zaWduZWQgaW50IGlycSwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGVuOworCWNvbnN0IHNpZ25lZCBjaGFyICptID0gcGxhdGZvcm1faXJxX21hcHBpbmdzW2lycV07CisKKwlpZiAoIW0pCisJCXJldHVybjsKKwllbiA9IGVuYWJsZSA/IHNjcF90b19pbnRjX2VuYWJsZVtpcnFdIDogMDsKKwl3aGlsZSAoKm0gPj0gMCkgeworCQl3cml0ZWwoZW4sIFM2X1JFR19JTlRDICsgSU5UQ19DRkcoKm0pKTsKKwkJbSsrOworCX0KK30KKwordm9pZCB2YXJpYW50X2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfc2V0KGlycSwgMSk7Cit9CisKK3ZvaWQgdmFyaWFudF9pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycV9zZXQoaXJxLCAwKTsKK30KZGlmZiAtLWdpdCBhL2Jsb2NrL0tjb25maWcgYi9ibG9jay9LY29uZmlnCmluZGV4IDBjYmIzYjguLmU3ZDEyNzggMTAwNjQ0Ci0tLSBhL2Jsb2NrL0tjb25maWcKKysrIGIvYmxvY2svS2NvbmZpZwpAQCAtNDQsMjIgKzQ0LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIEJMS19ERVZfSU9fVFJBQ0UKLQlib29sICJTdXBwb3J0IGZvciB0cmFjaW5nIGJsb2NrIGlvIGFjdGlvbnMiCi0JZGVwZW5kcyBvbiBTWVNGUwotCXNlbGVjdCBSRUxBWQotCXNlbGVjdCBERUJVR19GUwotCXNlbGVjdCBUUkFDRVBPSU5UUwotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0cmFjZSB0aGUgYmxvY2sgbGF5ZXIgYWN0aW9ucwotCSAgb24gYSBnaXZlbiBxdWV1ZS4gVHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSBhbnkgdHJhZmZpYyBoYXBwZW5pbmcKLQkgIG9uIGEgYmxvY2sgZGV2aWNlIHF1ZXVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiAoYW5kIHRoZSB1c2Vyc3BhY2UKLQkgIHN1cHBvcnQgdG9vbHMgbmVlZGVkKSwgZmV0Y2ggdGhlIGJsa3RyYWNlIHRvb2xzIGZyb206Ci0KLQkgIGdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0Ci0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBCTEtfREVWX0JTRwogCWJvb2wgIkJsb2NrIGxheWVyIFNHIHN1cHBvcnQgdjQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGUKaW5kZXggYmZlNzMwNC4uZTlmYTRkZCAxMDA2NDQKLS0tIGEvYmxvY2svTWFrZWZpbGUKKysrIGIvYmxvY2svTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDUgQEAKIG9iai0kKENPTkZJR19JT1NDSEVEX0RFQURMSU5FKQkrPSBkZWFkbGluZS1pb3NjaGVkLm8KIG9iai0kKENPTkZJR19JT1NDSEVEX0NGUSkJKz0gY2ZxLWlvc2NoZWQubwogCi1vYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkJKz0gYmxrdHJhY2Uubwogb2JqLSQoQ09ORklHX0JMT0NLX0NPTVBBVCkJKz0gY29tcGF0X2lvY3RsLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkJKz0gYmxrLWludGVncml0eS5vCmRpZmYgLS1naXQgYS9ibG9jay9ibGstc29mdGlycS5jIGIvYmxvY2svYmxrLXNvZnRpcnEuYwppbmRleCBjZTBlZmM2Li5lZTljMjE2IDEwMDY0NAotLS0gYS9ibG9jay9ibGstc29mdGlycS5jCisrKyBiL2Jsb2NrL2Jsay1zb2Z0aXJxLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAkJZGF0YS0+aW5mbyA9IHJxOwogCQlkYXRhLT5mbGFncyA9IDA7CiAKLQkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBkYXRhKTsKKwkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBkYXRhLCAwKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IDBkY2U5MmMuLjNlZTk0MzUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCisrKyBiL2Jsb2NrL2Jsay5oCkBAIC0xMDIsNyArMTAyLDcgQEAKIAljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpOwogCXJldHVybiBjcHVtYXNrX2ZpcnN0KG1hc2spOwogI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCXJldHVybiBmaXJzdF9jcHUocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpOworCXJldHVybiBjcHVtYXNrX2ZpcnN0KHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSkpOwogI2Vsc2UKIAlyZXR1cm4gY3B1OwogI2VuZGlmCmRpZmYgLS1naXQgYS9ibG9jay9ibGt0cmFjZS5jIGIvYmxvY2svYmxrdHJhY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4MTIwYS4uMDAwMDAwMAotLS0gYS9ibG9jay9ibGt0cmFjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDx0cmFjZS9ibG9jay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmxrdHJhY2Vfc2VxIF9fcmVhZF9tb3N0bHkgPSAxOwotCi0vKiBHbG9iYWwgcmVmZXJlbmNlIGNvdW50IG9mIHByb2JlcyAqLwotc3RhdGljIERFRklORV9NVVRFWChibGtfcHJvYmVfbXV0ZXgpOwotc3RhdGljIGF0b21pY190IGJsa19wcm9iZXNfcmVmID0gQVRPTUlDX0lOSVQoMCk7Ci0KLXN0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwotc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7Ci0KLS8qCi0gKiBTZW5kIG91dCBhIG5vdGlmeSBtZXNzYWdlLgotICovCi1zdGF0aWMgdm9pZCB0cmFjZV9ub3RlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBwaWRfdCBwaWQsIGludCBhY3Rpb24sCi0JCSAgICAgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7Ci0KLQl0ID0gcmVsYXlfcmVzZXJ2ZShidC0+cmNoYW4sIHNpemVvZigqdCkgKyBsZW4pOwotCWlmICh0KSB7Ci0JCWNvbnN0IGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkJdC0+bWFnaWMgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTjsKLQkJdC0+dGltZSA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKLQkJdC0+ZGV2aWNlID0gYnQtPmRldjsKLQkJdC0+YWN0aW9uID0gYWN0aW9uOwotCQl0LT5waWQgPSBwaWQ7Ci0JCXQtPmNwdSA9IGNwdTsKLQkJdC0+cGR1X2xlbiA9IGxlbjsKLQkJbWVtY3B5KCh2b2lkICopIHQgKyBzaXplb2YoKnQpLCBkYXRhLCBsZW4pOwotCX0KLX0KLQotLyoKLSAqIFNlbmQgb3V0IGEgbm90aWZ5IGZvciB0aGlzIHByb2Nlc3MsIGlmIHdlIGhhdmVuJ3QgZG9uZSBzbyBzaW5jZSBhIHRyYWNlCi0gKiBzdGFydGVkCi0gKi8KLXN0YXRpYyB2b2lkIHRyYWNlX25vdGVfdHNrKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQl0c2stPmJ0cmFjZV9zZXEgPSBibGt0cmFjZV9zZXE7Ci0JdHJhY2Vfbm90ZShidCwgdHNrLT5waWQsIEJMS19UTl9QUk9DRVNTLCB0c2stPmNvbW0sIHNpemVvZih0c2stPmNvbW0pKTsKLX0KLQotc3RhdGljIHZvaWQgdHJhY2Vfbm90ZV90aW1lKHN0cnVjdCBibGtfdHJhY2UgKmJ0KQotewotCXN0cnVjdCB0aW1lc3BlYyBub3c7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgd29yZHNbMl07Ci0KLQlnZXRuc3RpbWVvZmRheSgmbm93KTsKLQl3b3Jkc1swXSA9IG5vdy50dl9zZWM7Ci0Jd29yZHNbMV0gPSBub3cudHZfbnNlYzsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0cmFjZV9ub3RlKGJ0LCAwLCBCTEtfVE5fVElNRVNUQU1QLCB3b3Jkcywgc2l6ZW9mKHdvcmRzKSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi12b2lkIF9fdHJhY2Vfbm90ZV9tZXNzYWdlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgbjsKLQl2YV9saXN0IGFyZ3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyICpidWY7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JYnVmID0gcGVyX2NwdV9wdHIoYnQtPm1zZ19kYXRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JbiA9IHZzY25wcmludGYoYnVmLCBCTEtfVE5fTUFYX01TRywgZm10LCBhcmdzKTsKLQl2YV9lbmQoYXJncyk7Ci0KLQl0cmFjZV9ub3RlKGJ0LCAwLCBCTEtfVE5fTUVTU0FHRSwgYnVmLCBuKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChfX3RyYWNlX25vdGVfbWVzc2FnZSk7Ci0KLXN0YXRpYyBpbnQgYWN0X2xvZ19jaGVjayhzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdTMyIHdoYXQsIHNlY3Rvcl90IHNlY3RvciwKLQkJCSBwaWRfdCBwaWQpCi17Ci0JaWYgKCgoYnQtPmFjdF9tYXNrIDw8IEJMS19UQ19TSElGVCkgJiB3aGF0KSA9PSAwKQotCQlyZXR1cm4gMTsKLQlpZiAoc2VjdG9yIDwgYnQtPnN0YXJ0X2xiYSB8fCBzZWN0b3IgPiBidC0+ZW5kX2xiYSkKLQkJcmV0dXJuIDE7Ci0JaWYgKGJ0LT5waWQgJiYgcGlkICE9IGJ0LT5waWQpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBEYXRhIGRpcmVjdGlvbiBiaXQgbG9va3VwCi0gKi8KLXN0YXRpYyB1MzIgZGRpcl9hY3RbMl0gX19yZWFkX21vc3RseSA9IHsgQkxLX1RDX0FDVChCTEtfVENfUkVBRCksIEJMS19UQ19BQ1QoQkxLX1RDX1dSSVRFKSB9OwotCi0vKiBUaGUgaWxvZzIoKSBjYWxscyBmYWxsIG91dCBiZWNhdXNlIHRoZXkncmUgY29uc3RhbnQgKi8KLSNkZWZpbmUgTUFTS19UQ19CSVQocncsIF9fbmFtZSkgKCAocncgJiAoMSA8PCBCSU9fUldfICMjIF9fbmFtZSkpIDw8IFwKLQkgIChpbG9nMihCTEtfVENfICMjIF9fbmFtZSkgKyBCTEtfVENfU0hJRlQgLSBCSU9fUldfICMjIF9fbmFtZSkgKQotCi0vKgotICogVGhlIHdvcmtlciBmb3IgdGhlIHZhcmlvdXMgYmxrX2FkZF90cmFjZSooKSB0eXBlcy4gRmlsbHMgb3V0IGEKLSAqIGJsa19pb190cmFjZSBzdHJ1Y3R1cmUgYW5kIHBsYWNlcyBpdCBpbiBhIHBlci1jcHUgc3ViYnVmZmVyLgotICovCi1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLAotCQkgICAgIGludCBydywgdTMyIHdoYXQsIGludCBlcnJvciwgaW50IHBkdV9sZW4sIHZvaWQgKnBkdV9kYXRhKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyAqc2VxdWVuY2U7Ci0JcGlkX3QgcGlkOwotCWludCBjcHU7Ci0KLQlpZiAodW5saWtlbHkoYnQtPnRyYWNlX3N0YXRlICE9IEJsa3RyYWNlX3J1bm5pbmcpKQotCQlyZXR1cm47Ci0KLQl3aGF0IHw9IGRkaXJfYWN0W3J3ICYgV1JJVEVdOwotCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIEJBUlJJRVIpOwotCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIFNZTkNJTyk7Ci0Jd2hhdCB8PSBNQVNLX1RDX0JJVChydywgQUhFQUQpOwotCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIE1FVEEpOwotCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIERJU0NBUkQpOwotCi0JcGlkID0gdHNrLT5waWQ7Ci0JaWYgKHVubGlrZWx5KGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSkpCi0JCXJldHVybjsKLQotCS8qCi0JICogQSB3b3JkIGFib3V0IHRoZSBsb2NraW5nIGhlcmUgLSB3ZSBkaXNhYmxlIGludGVycnVwdHMgdG8gcmVzZXJ2ZQotCSAqIHNvbWUgc3BhY2UgaW4gdGhlIHJlbGF5IHBlci1jcHUgYnVmZmVyLCB0byBwcmV2ZW50IGFuIGlycQotCSAqIGZyb20gY29taW5nIGluIGFuZCBzdGVwcGluZyBvbiBvdXIgdG9lcy4KLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlpZiAodW5saWtlbHkodHNrLT5idHJhY2Vfc2VxICE9IGJsa3RyYWNlX3NlcSkpCi0JCXRyYWNlX25vdGVfdHNrKGJ0LCB0c2spOwotCi0JdCA9IHJlbGF5X3Jlc2VydmUoYnQtPnJjaGFuLCBzaXplb2YoKnQpICsgcGR1X2xlbik7Ci0JaWYgKHQpIHsKLQkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlzZXF1ZW5jZSA9IHBlcl9jcHVfcHRyKGJ0LT5zZXF1ZW5jZSwgY3B1KTsKLQotCQl0LT5tYWdpYyA9IEJMS19JT19UUkFDRV9NQUdJQyB8IEJMS19JT19UUkFDRV9WRVJTSU9OOwotCQl0LT5zZXF1ZW5jZSA9ICsrKCpzZXF1ZW5jZSk7Ci0JCXQtPnRpbWUgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7Ci0JCXQtPnNlY3RvciA9IHNlY3RvcjsKLQkJdC0+Ynl0ZXMgPSBieXRlczsKLQkJdC0+YWN0aW9uID0gd2hhdDsKLQkJdC0+cGlkID0gcGlkOwotCQl0LT5kZXZpY2UgPSBidC0+ZGV2OwotCQl0LT5jcHUgPSBjcHU7Ci0JCXQtPmVycm9yID0gZXJyb3I7Ci0JCXQtPnBkdV9sZW4gPSBwZHVfbGVuOwotCi0JCWlmIChwZHVfbGVuKQotCQkJbWVtY3B5KCh2b2lkICopIHQgKyBzaXplb2YoKnQpLCBwZHVfZGF0YSwgcGR1X2xlbik7Ci0JfQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmxrX3RyZWVfcm9vdDsKLXN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3RyZWVfbXV0ZXgpOwotCi1zdGF0aWMgdm9pZCBibGtfdHJhY2VfY2xlYW51cChzdHJ1Y3QgYmxrX3RyYWNlICpidCkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZShidC0+bXNnX2ZpbGUpOwotCWRlYnVnZnNfcmVtb3ZlKGJ0LT5kcm9wcGVkX2ZpbGUpOwotCXJlbGF5X2Nsb3NlKGJ0LT5yY2hhbik7Ci0JZnJlZV9wZXJjcHUoYnQtPnNlcXVlbmNlKTsKLQlmcmVlX3BlcmNwdShidC0+bXNnX2RhdGEpOwotCWtmcmVlKGJ0KTsKLQltdXRleF9sb2NrKCZibGtfcHJvYmVfbXV0ZXgpOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZibGtfcHJvYmVzX3JlZikpCi0JCWJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7Ci0JbXV0ZXhfdW5sb2NrKCZibGtfcHJvYmVfbXV0ZXgpOwotfQotCi1pbnQgYmxrX3RyYWNlX3JlbW92ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKLXsKLQlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKLQotCWJ0ID0geGNoZygmcS0+YmxrX3RyYWNlLCBOVUxMKTsKLQlpZiAoIWJ0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2Vfc2V0dXAgfHwKLQkgICAgYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3N0b3BwZWQpCi0JCWJsa190cmFjZV9jbGVhbnVwKGJ0KTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3JlbW92ZSk7Ci0KLXN0YXRpYyBpbnQgYmxrX2Ryb3BwZWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJsa19kcm9wcGVkX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMTZdOwotCi0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBhdG9taWNfcmVhZCgmYnQtPmRyb3BwZWQpKTsKLQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHN0cmxlbihidWYpKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmxrX2Ryb3BwZWRfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkub3BlbiA9CQlibGtfZHJvcHBlZF9vcGVuLAotCS5yZWFkID0JCWJsa19kcm9wcGVkX3JlYWQsCi19OwotCi1zdGF0aWMgaW50IGJsa19tc2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJsa19tc2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JY2hhciAqbXNnOwotCXN0cnVjdCBibGtfdHJhY2UgKmJ0OwotCi0JaWYgKGNvdW50ID4gQkxLX1ROX01BWF9NU0cpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbXNnID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1zZyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihtc2csIGJ1ZmZlciwgY291bnQpKSB7Ci0JCWtmcmVlKG1zZyk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWJ0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCV9fdHJhY2Vfbm90ZV9tZXNzYWdlKGJ0LCAiJXMiLCBtc2cpOwotCWtmcmVlKG1zZyk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJsa19tc2dfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkub3BlbiA9CQlibGtfbXNnX29wZW4sCi0JLndyaXRlID0JYmxrX21zZ193cml0ZSwKLX07Ci0KLS8qCi0gKiBLZWVwIHRyYWNrIG9mIGhvdyBtYW55IHRpbWVzIHdlIGVuY291bnRlcmVkIGEgZnVsbCBzdWJidWZmZXIsIHRvIGFpZAotICogdGhlIHVzZXIgc3BhY2UgYXBwIGluIHRlbGxpbmcgaG93IG1hbnkgbG9zdCBldmVudHMgdGhlcmUgd2VyZS4KLSAqLwotc3RhdGljIGludCBibGtfc3ViYnVmX3N0YXJ0X2NhbGxiYWNrKHN0cnVjdCByY2hhbl9idWYgKmJ1Ziwgdm9pZCAqc3ViYnVmLAotCQkJCSAgICAgdm9pZCAqcHJldl9zdWJidWYsIHNpemVfdCBwcmV2X3BhZGRpbmcpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQ7Ci0KLQlpZiAoIXJlbGF5X2J1Zl9mdWxsKGJ1ZikpCi0JCXJldHVybiAxOwotCi0JYnQgPSBidWYtPmNoYW4tPnByaXZhdGVfZGF0YTsKLQlhdG9taWNfaW5jKCZidC0+ZHJvcHBlZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmxrX3JlbW92ZV9idWZfZmlsZV9jYWxsYmFjayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQlkZWJ1Z2ZzX3JlbW92ZShkZW50cnkpOwotCi0JLyoKLQkqIHRoaXMgd2lsbCBmYWlsIGZvciBhbGwgYnV0IHRoZSBsYXN0IGZpbGUsIGJ1dCB0aGF0IGlzIG9rLiB3aGF0IHdlCi0JKiBjYXJlIGFib3V0IGlzIHRoZSB0b3AgbGV2ZWwgYnV0cy0+bmFtZSBkaXJlY3RvcnkgZ29pbmcgYXdheSwgd2hlbgotCSogdGhlIGxhc3QgdHJhY2UgZmlsZSBpcyBnb25lLiBUaGVuIHdlIGRvbid0IGhhdmUgdG8gcm1kaXIoKSB0aGF0Ci0JKiBtYW51YWxseSBvbiB0cmFjZSBzdG9wLCBzbyBpdCBuaWNlbHkgc29sdmVzIHRoZSBpc3N1ZSB3aXRoCi0JKiBmb3JjZSBraWxsaW5nIG9mIHJ1bm5pbmcgdHJhY2VzLgotCSovCi0KLQlkZWJ1Z2ZzX3JlbW92ZShwYXJlbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmxrX2NyZWF0ZV9idWZfZmlsZV9jYWxsYmFjayhjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKLQkJCQkJCSAgIGludCBtb2RlLAotCQkJCQkJICAgc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAotCQkJCQkJICAgaW50ICppc19nbG9iYWwpCi17Ci0JcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2ZpbGUoZmlsZW5hbWUsIG1vZGUsIHBhcmVudCwgYnVmLAotCQkJCQkmcmVsYXlfZmlsZV9vcGVyYXRpb25zKTsKLX0KLQotc3RhdGljIHN0cnVjdCByY2hhbl9jYWxsYmFja3MgYmxrX3JlbGF5X2NhbGxiYWNrcyA9IHsKLQkuc3ViYnVmX3N0YXJ0CQk9IGJsa19zdWJidWZfc3RhcnRfY2FsbGJhY2ssCi0JLmNyZWF0ZV9idWZfZmlsZQk9IGJsa19jcmVhdGVfYnVmX2ZpbGVfY2FsbGJhY2ssCi0JLnJlbW92ZV9idWZfZmlsZQk9IGJsa19yZW1vdmVfYnVmX2ZpbGVfY2FsbGJhY2ssCi19OwotCi0vKgotICogU2V0dXAgZXZlcnl0aGluZyByZXF1aXJlZCB0byBzdGFydCB0cmFjaW5nCi0gKi8KLWludCBkb19ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKLQkJCXN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCAqYnV0cykKLXsKLQlzdHJ1Y3QgYmxrX3RyYWNlICpvbGRfYnQsICpidCA9IE5VTEw7Ci0Jc3RydWN0IGRlbnRyeSAqZGlyID0gTlVMTDsKLQlpbnQgcmV0LCBpOwotCi0JaWYgKCFidXRzLT5idWZfc2l6ZSB8fCAhYnV0cy0+YnVmX25yKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cm5jcHkoYnV0cy0+bmFtZSwgbmFtZSwgQkxLVFJBQ0VfQkRFVl9TSVpFKTsKLQlidXRzLT5uYW1lW0JMS1RSQUNFX0JERVZfU0laRSAtIDFdID0gJ1wwJzsKLQotCS8qCi0JICogc29tZSBkZXZpY2UgbmFtZXMgaGF2ZSBsYXJnZXIgcGF0aHMgLSBjb252ZXJ0IHRoZSBzbGFzaGVzCi0JICogdG8gdW5kZXJzY29yZXMgZm9yIHRoaXMgdG8gd29yayBhcyBleHBlY3RlZAotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzdHJsZW4oYnV0cy0+bmFtZSk7IGkrKykKLQkJaWYgKGJ1dHMtPm5hbWVbaV0gPT0gJy8nKQotCQkJYnV0cy0+bmFtZVtpXSA9ICdfJzsKLQotCXJldCA9IC1FTk9NRU07Ci0JYnQgPSBremFsbG9jKHNpemVvZigqYnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ0KQotCQlnb3RvIGVycjsKLQotCWJ0LT5zZXF1ZW5jZSA9IGFsbG9jX3BlcmNwdSh1bnNpZ25lZCBsb25nKTsKLQlpZiAoIWJ0LT5zZXF1ZW5jZSkKLQkJZ290byBlcnI7Ci0KLQlidC0+bXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpOwotCWlmICghYnQtPm1zZ19kYXRhKQotCQlnb3RvIGVycjsKLQotCXJldCA9IC1FTk9FTlQ7Ci0KLQlpZiAoIWJsa190cmVlX3Jvb3QpIHsKLQkJYmxrX3RyZWVfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYmxvY2siLCBOVUxMKTsKLQkJaWYgKCFibGtfdHJlZV9yb290KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGJ1dHMtPm5hbWUsIGJsa190cmVlX3Jvb3QpOwotCi0JaWYgKCFkaXIpCi0JCWdvdG8gZXJyOwotCi0JYnQtPmRpciA9IGRpcjsKLQlidC0+ZGV2ID0gZGV2OwotCWF0b21pY19zZXQoJmJ0LT5kcm9wcGVkLCAwKTsKLQotCXJldCA9IC1FSU87Ci0JYnQtPmRyb3BwZWRfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRyb3BwZWQiLCAwNDQ0LCBkaXIsIGJ0LCAmYmxrX2Ryb3BwZWRfZm9wcyk7Ci0JaWYgKCFidC0+ZHJvcHBlZF9maWxlKQotCQlnb3RvIGVycjsKLQotCWJ0LT5tc2dfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1zZyIsIDAyMjIsIGRpciwgYnQsICZibGtfbXNnX2ZvcHMpOwotCWlmICghYnQtPm1zZ19maWxlKQotCQlnb3RvIGVycjsKLQotCWJ0LT5yY2hhbiA9IHJlbGF5X29wZW4oInRyYWNlIiwgZGlyLCBidXRzLT5idWZfc2l6ZSwKLQkJCQlidXRzLT5idWZfbnIsICZibGtfcmVsYXlfY2FsbGJhY2tzLCBidCk7Ci0JaWYgKCFidC0+cmNoYW4pCi0JCWdvdG8gZXJyOwotCi0JYnQtPmFjdF9tYXNrID0gYnV0cy0+YWN0X21hc2s7Ci0JaWYgKCFidC0+YWN0X21hc2spCi0JCWJ0LT5hY3RfbWFzayA9ICh1MTYpIC0xOwotCi0JYnQtPnN0YXJ0X2xiYSA9IGJ1dHMtPnN0YXJ0X2xiYTsKLQlidC0+ZW5kX2xiYSA9IGJ1dHMtPmVuZF9sYmE7Ci0JaWYgKCFidC0+ZW5kX2xiYSkKLQkJYnQtPmVuZF9sYmEgPSAtMVVMTDsKLQotCWJ0LT5waWQgPSBidXRzLT5waWQ7Ci0JYnQtPnRyYWNlX3N0YXRlID0gQmxrdHJhY2Vfc2V0dXA7Ci0KLQltdXRleF9sb2NrKCZibGtfcHJvYmVfbXV0ZXgpOwotCWlmIChhdG9taWNfYWRkX3JldHVybigxLCAmYmxrX3Byb2Jlc19yZWYpID09IDEpIHsKLQkJcmV0ID0gYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIHByb2JlX2VycjsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZibGtfcHJvYmVfbXV0ZXgpOwotCi0JcmV0ID0gLUVCVVNZOwotCW9sZF9idCA9IHhjaGcoJnEtPmJsa190cmFjZSwgYnQpOwotCWlmIChvbGRfYnQpIHsKLQkJKHZvaWQpIHhjaGcoJnEtPmJsa190cmFjZSwgb2xkX2J0KTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci1wcm9iZV9lcnI6Ci0JYXRvbWljX2RlYygmYmxrX3Byb2Jlc19yZWYpOwotCW11dGV4X3VubG9jaygmYmxrX3Byb2JlX211dGV4KTsKLWVycjoKLQlpZiAoYnQpIHsKLQkJaWYgKGJ0LT5tc2dfZmlsZSkKLQkJCWRlYnVnZnNfcmVtb3ZlKGJ0LT5tc2dfZmlsZSk7Ci0JCWlmIChidC0+ZHJvcHBlZF9maWxlKQotCQkJZGVidWdmc19yZW1vdmUoYnQtPmRyb3BwZWRfZmlsZSk7Ci0JCWZyZWVfcGVyY3B1KGJ0LT5zZXF1ZW5jZSk7Ci0JCWZyZWVfcGVyY3B1KGJ0LT5tc2dfZGF0YSk7Ci0JCWlmIChidC0+cmNoYW4pCi0JCQlyZWxheV9jbG9zZShidC0+cmNoYW4pOwotCQlrZnJlZShidCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKLQkJICAgIGNoYXIgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwIGJ1dHM7Ci0JaW50IHJldDsKLQotCXJldCA9IGNvcHlfZnJvbV91c2VyKCZidXRzLCBhcmcsIHNpemVvZihidXRzKSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXQgPSBkb19ibGtfdHJhY2Vfc2V0dXAocSwgbmFtZSwgZGV2LCAmYnV0cyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYnV0cywgc2l6ZW9mKGJ1dHMpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zZXR1cCk7Ci0KLWludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQ7Ci0JaW50IHJldDsKLQotCWlmICgoYnQgPSBxLT5ibGtfdHJhY2UpID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBGb3Igc3RhcnRpbmcgYSB0cmFjZSwgd2UgY2FuIHRyYW5zaXRpb24gZnJvbSBhIHNldHVwIG9yIHN0b3BwZWQKLQkgKiB0cmFjZS4gRm9yIHN0b3BwaW5nIGEgdHJhY2UsIHRoZSBzdGF0ZSBtdXN0IGJlIHJ1bm5pbmcKLQkgKi8KLQlyZXQgPSAtRUlOVkFMOwotCWlmIChzdGFydCkgewotCQlpZiAoYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3NldHVwIHx8Ci0JCSAgICBidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2Vfc3RvcHBlZCkgewotCQkJYmxrdHJhY2Vfc2VxKys7Ci0JCQlzbXBfbWIoKTsKLQkJCWJ0LT50cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3J1bm5pbmc7Ci0KLQkJCXRyYWNlX25vdGVfdGltZShidCk7Ci0JCQlyZXQgPSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9ydW5uaW5nKSB7Ci0JCQlidC0+dHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9zdG9wcGVkOwotCQkJcmVsYXlfZmx1c2goYnQtPnJjaGFuKTsKLQkJCXJldCA9IDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3N0YXJ0c3RvcCk7Ci0KLS8qKgotICogYmxrX3RyYWNlX2lvY3RsOiAtIGhhbmRsZSB0aGUgaW9jdGxzIGFzc29jaWF0ZWQgd2l0aCB0cmFjaW5nCi0gKiBAYmRldjoJdGhlIGJsb2NrIGRldmljZQotICogQGNtZDogCXRoZSBpb2N0bCBjbWQKLSAqIEBhcmc6CXRoZSBhcmd1bWVudCBkYXRhLCBpZiBhbnkKLSAqCi0gKiovCi1pbnQgYmxrX3RyYWNlX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGNtZCwgY2hhciBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKLQlpbnQgcmV0LCBzdGFydCA9IDA7Ci0JY2hhciBiW0JERVZOQU1FX1NJWkVdOwotCi0JcSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwotCWlmICghcSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBCTEtUUkFDRVNFVFVQOgotCQliZGV2bmFtZShiZGV2LCBiKTsKLQkJcmV0ID0gYmxrX3RyYWNlX3NldHVwKHEsIGIsIGJkZXYtPmJkX2RldiwgYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBCTEtUUkFDRVNUQVJUOgotCQlzdGFydCA9IDE7Ci0JY2FzZSBCTEtUUkFDRVNUT1A6Ci0JCXJldCA9IGJsa190cmFjZV9zdGFydHN0b3AocSwgc3RhcnQpOwotCQlicmVhazsKLQljYXNlIEJMS1RSQUNFVEVBUkRPV046Ci0JCXJldCA9IGJsa190cmFjZV9yZW1vdmUocSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9UVFk7Ci0JCWJyZWFrOwotCX0KLQotCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogYmxrX3RyYWNlX3NodXRkb3duOiAtIHN0b3AgYW5kIGNsZWFudXAgdHJhY2Ugc3RydWN0dXJlcwotICogQHE6ICAgIHRoZSByZXF1ZXN0IHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlCi0gKgotICoqLwotdm9pZCBibGtfdHJhY2Vfc2h1dGRvd24oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0JaWYgKHEtPmJsa190cmFjZSkgewotCQlibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIDApOwotCQlibGtfdHJhY2VfcmVtb3ZlKHEpOwotCX0KLX0KLQotLyoKLSAqIGJsa3RyYWNlIHByb2JlcwotICovCi0KLS8qKgotICogYmxrX2FkZF90cmFjZV9ycSAtIEFkZCBhIHRyYWNlIGZvciBhIHJlcXVlc3Qgb3JpZW50ZWQgYWN0aW9uCi0gKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKLSAqIEBycToJCXRoZSBzb3VyY2UgcmVxdWVzdAotICogQHdoYXQ6CXRoZSBhY3Rpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICBSZWNvcmRzIGFuIGFjdGlvbiBhZ2FpbnN0IGEgcmVxdWVzdC4gV2lsbCBsb2cgdGhlIGJpbyBvZmZzZXQgKyBzaXplLgotICoKLSAqKi8KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCQkgICAgdTMyIHdoYXQpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0JaW50IHJ3ID0gcnEtPmNtZF9mbGFncyAmIDB4MDM7Ci0KLQlpZiAobGlrZWx5KCFidCkpCi0JCXJldHVybjsKLQotCWlmIChibGtfZGlzY2FyZF9ycShycSkpCi0JCXJ3IHw9ICgxIDw8IEJJT19SV19ESVNDQVJEKTsKLQotCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKLQkJd2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19QQyk7Ci0JCV9fYmxrX2FkZF90cmFjZShidCwgMCwgcnEtPmRhdGFfbGVuLCBydywgd2hhdCwgcnEtPmVycm9ycywKLQkJCQlzaXplb2YocnEtPmNtZCksIHJxLT5jbWQpOwotCX0gZWxzZSAgewotCQl3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX0ZTKTsKLQkJX19ibGtfYWRkX3RyYWNlKGJ0LCBycS0+aGFyZF9zZWN0b3IsIHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOSwKLQkJCQlydywgd2hhdCwgcnEtPmVycm9ycywgMCwgTlVMTCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2Fib3J0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0FCT1JUKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfSU5TRVJUKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9pc3N1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9JU1NVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9SRVFVRVVFKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9DT01QTEVURSk7Ci19Ci0KLS8qKgotICogYmxrX2FkZF90cmFjZV9iaW8gLSBBZGQgYSB0cmFjZSBmb3IgYSBiaW8gb3JpZW50ZWQgYWN0aW9uCi0gKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKLSAqIEBiaW86CXRoZSBzb3VyY2UgYmlvCi0gKiBAd2hhdDoJdGhlIGFjdGlvbgotICoKLSAqIERlc2NyaXB0aW9uOgotICogICAgIFJlY29yZHMgYW4gYWN0aW9uIGFnYWluc3QgYSBiaW8uIFdpbGwgbG9nIHRoZSBiaW8gb2Zmc2V0ICsgc2l6ZS4KLSAqCi0gKiovCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2JpbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAotCQkJCSAgICAgdTMyIHdoYXQpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAobGlrZWx5KCFidCkpCi0JCXJldHVybjsKLQotCV9fYmxrX2FkZF90cmFjZShidCwgYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywgd2hhdCwKLQkJCSFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSksIDAsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19ib3VuY2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9CT1VOQ0UpOwotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQotewotCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0NPTVBMRVRFKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfQkFDS01FUkdFKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQotewotCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0ZST05UTUVSR0UpOwotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQotewotCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX1FVRVVFKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9nZXRycShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpCi17Ci0JaWYgKGJpbykKLQkJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfR0VUUlEpOwotCWVsc2UgewotCQlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKLQotCQlpZiAoYnQpCi0JCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIHJ3LCBCTEtfVEFfR0VUUlEsIDAsIDAsIE5VTEwpOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3NsZWVwcnEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KQotewotCWlmIChiaW8pCi0JCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX1NMRUVQUlEpOwotCWVsc2UgewotCQlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKLQotCQlpZiAoYnQpCi0JCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIHJ3LCBCTEtfVEFfU0xFRVBSUSwgMCwgMCwgTlVMTCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3BsdWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAoYnQpCi0JCV9fYmxrX2FkZF90cmFjZShidCwgMCwgMCwgMCwgQkxLX1RBX1BMVUcsIDAsIDAsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3VucGx1Z19pbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKLXsKLQlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKLQotCWlmIChidCkgewotCQl1bnNpZ25lZCBpbnQgcGR1ID0gcS0+cnEuY291bnRbUkVBRF0gKyBxLT5ycS5jb3VudFtXUklURV07Ci0JCV9fYmU2NCBycGR1ID0gY3B1X3RvX2JlNjQocGR1KTsKLQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9VTlBMVUdfSU8sIDAsCi0JCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3VucGx1Z190aW1lcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKLXsKLQlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKLQotCWlmIChidCkgewotCQl1bnNpZ25lZCBpbnQgcGR1ID0gcS0+cnEuY291bnRbUkVBRF0gKyBxLT5ycS5jb3VudFtXUklURV07Ci0JCV9fYmU2NCBycGR1ID0gY3B1X3RvX2JlNjQocGR1KTsKLQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9VTlBMVUdfVElNRVIsIDAsCi0JCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3NwbGl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sCi0JCQkJdW5zaWduZWQgaW50IHBkdSkKLXsKLQlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKLQotCWlmIChidCkgewotCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7Ci0KLQkJX19ibGtfYWRkX3RyYWNlKGJ0LCBiaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLCBiaW8tPmJpX3J3LAotCQkJCUJMS19UQV9TUExJVCwgIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwKLQkJCQlzaXplb2YocnBkdSksICZycGR1KTsKLQl9Ci19Ci0KLS8qKgotICogYmxrX2FkZF90cmFjZV9yZW1hcCAtIEFkZCBhIHRyYWNlIGZvciBhIHJlbWFwIG9wZXJhdGlvbgotICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCi0gKiBAYmlvOgl0aGUgc291cmNlIGJpbwotICogQGRldjoJdGFyZ2V0IGRldmljZQotICogQGZyb206CXNvdXJjZSBzZWN0b3IKLSAqIEB0bzoJCXRhcmdldCBzZWN0b3IKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICBEZXZpY2UgbWFwcGVyIG9yIHJhaWQgdGFyZ2V0IHNvbWV0aW1lcyBuZWVkIHRvIHNwbGl0IGEgYmlvIGJlY2F1c2UKLSAqICAgICBpdCBzcGFucyBhIHN0cmlwZSAob3Igc2ltaWxhcikuIEFkZCBhIHRyYWNlIGZvciB0aGF0IGFjdGlvbi4KLSAqCi0gKiovCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JlbWFwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sCi0JCQkJICAgICAgIGRldl90IGRldiwgc2VjdG9yX3QgZnJvbSwgc2VjdG9yX3QgdG8pCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0Jc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByOwotCi0JaWYgKGxpa2VseSghYnQpKQotCQlyZXR1cm47Ci0KLQlyLmRldmljZSA9IGNwdV90b19iZTMyKGRldik7Ci0Jci5kZXZpY2VfZnJvbSA9IGNwdV90b19iZTMyKGJpby0+YmlfYmRldi0+YmRfZGV2KTsKLQlyLnNlY3RvciA9IGNwdV90b19iZTY0KHRvKTsKLQotCV9fYmxrX2FkZF90cmFjZShidCwgZnJvbSwgYmlvLT5iaV9zaXplLCBiaW8tPmJpX3J3LCBCTEtfVEFfUkVNQVAsCi0JCQkhYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpLCBzaXplb2YociksICZyKTsKLX0KLQotLyoqCi0gKiBibGtfYWRkX2RyaXZlcl9kYXRhIC0gQWRkIGJpbmFyeSBtZXNzYWdlIHdpdGggZHJpdmVyLXNwZWNpZmljIGRhdGEKLSAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgotICogQHJxOgkJaW8gcmVxdWVzdAotICogQGRhdGE6CWRyaXZlci1zcGVjaWZpYyBkYXRhCi0gKiBAbGVuOglsZW5ndGggb2YgZHJpdmVyLXNwZWNpZmljIGRhdGEKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICBTb21lIGRyaXZlcnMgbWlnaHQgd2FudCB0byB3cml0ZSBkcml2ZXItc3BlY2lmaWMgZGF0YSBwZXIgcmVxdWVzdC4KLSAqCi0gKiovCi12b2lkIGJsa19hZGRfZHJpdmVyX2RhdGEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAobGlrZWx5KCFidCkpCi0JCXJldHVybjsKLQotCWlmIChibGtfcGNfcmVxdWVzdChycSkpCi0JCV9fYmxrX2FkZF90cmFjZShidCwgMCwgcnEtPmRhdGFfbGVuLCAwLCBCTEtfVEFfRFJWX0RBVEEsCi0JCQkJcnEtPmVycm9ycywgbGVuLCBkYXRhKTsKLQllbHNlCi0JCV9fYmxrX2FkZF90cmFjZShidCwgcnEtPmhhcmRfc2VjdG9yLCBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDksCi0JCQkJMCwgQkxLX1RBX0RSVl9EQVRBLCBycS0+ZXJyb3JzLCBsZW4sIGRhdGEpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2FkZF9kcml2ZXJfZGF0YSk7Ci0KLXN0YXRpYyBpbnQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2Fib3J0KGJsa19hZGRfdHJhY2VfcnFfYWJvcnQpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JvdW5jZShibGtfYWRkX3RyYWNlX2Jpb19ib3VuY2UpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19nZXRycShibGtfYWRkX3RyYWNlX2dldHJxKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfc2xlZXBycShibGtfYWRkX3RyYWNlX3NsZWVwcnEpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1Zyk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z190aW1lcihibGtfYWRkX3RyYWNlX3VucGx1Z190aW1lcik7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z19pbyhibGtfYWRkX3RyYWNlX3VucGx1Z19pbyk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19yZW1hcChibGtfYWRkX3RyYWNlX3JlbWFwKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19yZW1hcChibGtfYWRkX3RyYWNlX3JlbWFwKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnX2lvKGJsa19hZGRfdHJhY2VfdW5wbHVnX2lvKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z190aW1lcihibGtfYWRkX3RyYWNlX3VucGx1Z190aW1lcik7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1Zyk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zbGVlcHJxKGJsa19hZGRfdHJhY2Vfc2xlZXBycSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19nZXRycShibGtfYWRkX3RyYWNlX2dldHJxKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYm91bmNlKGJsa19hZGRfdHJhY2VfYmlvX2JvdW5jZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0KTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2Fib3J0KGJsa19hZGRfdHJhY2VfcnFfYWJvcnQpOwotCi0JdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7Ci19CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYyBiL2NyeXB0by9hc3luY190eC9hc3luY190eC5jCmluZGV4IGYyMTE0N2YuLjA2ZWI2Y2MgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY190eC5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY190eC5jCkBAIC0zMCw3ICszMCw3IEBACiAjaWZkZWYgQ09ORklHX0RNQV9FTkdJTkUKIHN0YXRpYyBpbnQgX19pbml0IGFzeW5jX3R4X2luaXQodm9pZCkKIHsKLQlkbWFlbmdpbmVfZ2V0KCk7CisJYXN5bmNfZG1hZW5naW5lX2dldCgpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiYXN5bmNfdHg6IGFwaSBpbml0aWFsaXplZCAoYXN5bmMpXG4iKTsKIApAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXN5bmNfdHhfZXhpdCh2b2lkKQogewotCWRtYWVuZ2luZV9wdXQoKTsKKwlhc3luY19kbWFlbmdpbmVfcHV0KCk7CiB9CiAKIC8qKgpAQCAtNTYsNyArNTYsNyBAQAogCWlmIChkZXBlbmRfdHggJiYKIAkgICAgZG1hX2hhc19jYXAodHhfdHlwZSwgZGVwZW5kX3R4LT5jaGFuLT5kZXZpY2UtPmNhcF9tYXNrKSkKIAkJcmV0dXJuIGRlcGVuZF90eC0+Y2hhbjsKLQlyZXR1cm4gZG1hX2ZpbmRfY2hhbm5lbCh0eF90eXBlKTsKKwlyZXR1cm4gYXN5bmNfZG1hX2ZpbmRfY2hhbm5lbCh0eF90eXBlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fYXN5bmNfdHhfZmluZF9jaGFubmVsKTsKICNlbHNlCmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKaW5kZXggNTk1Yjc4Ni4uOTVmZTJjOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwpAQCAtMzAsMTEgKzMwLDggQEAKICNpbmNsdWRlIDxsaW51eC9yYWlkL3hvci5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jX3R4Lmg+CiAKLS8qIGRvX2FzeW5jX3hvciAtIGRtYSBtYXAgdGhlIHBhZ2VzIGFuZCBwZXJmb3JtIHRoZSB4b3Igd2l0aCBhbiBlbmdpbmUuCi0gKiAJVGhpcyByb3V0aW5lIGlzIG1hcmtlZCBfX2Fsd2F5c19pbmxpbmUgc28gaXQgY2FuIGJlIGNvbXBpbGVkIGF3YXkKLSAqIAl3aGVuIENPTkZJR19ETUFfRU5HSU5FPW4KLSAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgorLyogZG9fYXN5bmNfeG9yIC0gZG1hIG1hcCB0aGUgcGFnZXMgYW5kIHBlcmZvcm0gdGhlIHhvciB3aXRoIGFuIGVuZ2luZSAqLworc3RhdGljIF9fYXN5bmNfaW5saW5lIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCiBkb19hc3luY194b3Ioc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgcGFnZSAqZGVzdCwgc3RydWN0IHBhZ2UgKipzcmNfbGlzdCwKIAkgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBzcmNfY250LCBzaXplX3QgbGVuLAogCSAgICAgZW51bSBhc3luY190eF9mbGFncyBmbGFncywKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGFzaC5jIGIvY3J5cHRvL3NoYXNoLmMKaW5kZXggN2E2NTk3My4uMmNjYzhiMCAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYXNoLmMKKysrIGIvY3J5cHRvL3NoYXNoLmMKQEAgLTc3LDYgKzc3LDkgQEAKIAl1OCBidWZbc2hhc2hfYWxpZ25fYnVmZmVyX3NpemUodW5hbGlnbmVkX2xlbiwgYWxpZ25tYXNrKV0KIAkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQpKTsKIAorCWlmICh1bmFsaWduZWRfbGVuID4gbGVuKQorCQl1bmFsaWduZWRfbGVuID0gbGVuOworCiAJbWVtY3B5KGJ1ZiwgZGF0YSwgdW5hbGlnbmVkX2xlbik7CiAKIAlyZXR1cm4gc2hhc2gtPnVwZGF0ZShkZXNjLCBidWYsIHVuYWxpZ25lZF9sZW4pID86CmRpZmYgLS1naXQgYS9jcnlwdG8veG9yLmMgYi9jcnlwdG8veG9yLmMKaW5kZXggYjJlNmRiMC4uOTk2YjZlZSAxMDA2NDQKLS0tIGEvY3J5cHRvL3hvci5jCisrKyBiL2NyeXB0by94b3IuYwpAQCAtMTgsOCArMTgsOCBAQAogCiAjZGVmaW5lIEJIX1RSQUNFIDAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC94b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8YXNtL3hvci5oPgogCiAvKiBUaGUgeG9yIHJvdXRpbmVzIHRvIHVzZS4gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwppbmRleCBjMTFmOWFlLi4xYmE5ZDYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC0zNjcsNyArMzY3LDcgQEAKIAkJLyoKIAkJICogVHJlYXQgZnJlZXppbmcgdGVtcGVyYXR1cmVzIGFzIGludmFsaWQgYXMgd2VsbDsgc29tZQogCQkgKiBCSU9TZXMgcmV0dXJuIHJlYWxseSBsb3cgdmFsdWVzIGFuZCBjYXVzZSByZWJvb3RzIGF0IHN0YXJ0dXAuCi0JCSAqIEJlbG93IHplcm8gKENlbGNpdXMpIHZhbHVlcyBjbGVhcmx5IGFyZW4ndCByaWdodCBmb3Igc3VyZS4uCisJCSAqIEJlbG93IHplcm8gKENlbHNpdXMpIHZhbHVlcyBjbGVhcmx5IGFyZW4ndCByaWdodCBmb3Igc3VyZS4uCiAJCSAqIC4uLiBzbyBsZXRzIGRpc2NhcmQgdGhvc2UgYXMgaW52YWxpZC4KIAkJICovCiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggMGJjZjI2NC4uOTEyMDcxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC04Niw3ICs4Niw3IEBACiAKIAkgIEZvciB1c2VycyB3aXRoIGV4Y2x1c2l2ZWx5IG1vZGVybiBjb250cm9sbGVycyBsaWtlIEFIQ0ksCiAJICBTaWxpY29uIEltYWdlIDMxMjQsIG9yIE1hcnZlbGwgNjQ0MCwgeW91IG1heSBjaG9vc2UgdG8KLQkgIGRpc2FibGUgdGhpcyB1bmVlZGVkIFNGRiBzdXBwb3J0LgorCSAgZGlzYWJsZSB0aGlzIHVubmVlZGVkIFNGRiBzdXBwb3J0LgogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvaW9tbXUuYyBiL2RyaXZlcnMvYmFzZS9pb21tdS5jCmluZGV4IGMyZDFlZWQuLjlmMGU2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9pb21tdS5jCisrKyBiL2RyaXZlcnMvYmFzZS9pb21tdS5jCkBAIC05OCwzICs5OCwxMCBAQAogCXJldHVybiBpb21tdV9vcHMtPmlvdmFfdG9fcGh5cyhkb21haW4sIGlvdmEpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tbXVfaW92YV90b19waHlzKTsKKworaW50IGlvbW11X2RvbWFpbl9oYXNfY2FwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCSB1bnNpZ25lZCBsb25nIGNhcCkKK3sKKwlyZXR1cm4gaW9tbXVfb3BzLT5kb21haW5faGFzX2NhcChkb21haW4sIGNhcCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpb21tdV9kb21haW5faGFzX2NhcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCBmOGY1NzhhLi40MGI4MDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTI0LDcgKzI0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IG5vZGVfcmVhZF9jcHVtYXAoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgaW50IHR5cGUsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgbm9kZSAqbm9kZV9kZXYgPSB0b19ub2RlKGRldik7Ci0Jbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBub2RlX2Rldi0+c3lzZGV2LmlkKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShub2RlX2Rldi0+c3lzZGV2LmlkKTsKIAlpbnQgbGVuOwogCiAJLyogMjAwOC8wNC8wNzogYnVmIGN1cnJlbnRseSBQQUdFX1NJWkUsIG5lZWQgOSBjaGFycyBwZXIgMzIgYml0cy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCA3NmNlNzViLi4zMjM2YjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC0zMDAsNyArMzAwLDcgQEAKICAqCWFuZCB0aGUgY2xhc3MgZHJpdmVyLgogICoKICAqCU5vdGU6IFRoZSBsaXN0IGlzIGl0ZXJhdGVkIGluIHJldmVyc2Ugb3JkZXIsIHNvIHRoYXQgd2Ugc2h1dCBkb3duCi0gKgljaGlsZCBkZXZpY2VzIGJlZm9yZSB3ZSBzaHV0IGRvd24gdGhpZXIgcGFyZW50cy4gVGhlIGxpc3Qgb3JkZXJpbmcKKyAqCWNoaWxkIGRldmljZXMgYmVmb3JlIHdlIHNodXQgZG93biB0aGVpciBwYXJlbnRzLiBUaGUgbGlzdCBvcmRlcmluZwogICoJaXMgZ3VhcmFudGVlZCBieSB2aXJ0dWUgb2YgdGhlIGZhY3QgdGhhdCBjaGlsZCBkZXZpY2VzIGFyZSByZWdpc3RlcmVkCiAgKglhZnRlciB0aGVpciBwYXJlbnRzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCmluZGV4IDQ1YzVhMzMuLjMxNjkzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCkBAIC00LDYgKzQsNyBAQAogICogRmlsZXN5c3RlbSByZXF1ZXN0IGhhbmRsaW5nIG1ldGhvZHMKICAqLwogCisjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTI2Nyw3ICsyNjgsNyBAQAogCQl3cml0ZWJpdCA9IDA7CiAJfQogCi0JYWgtPmNtZHN0YXQgPSBXSU5fUkVBRCB8IHdyaXRlYml0IHwgZXh0Yml0OworCWFoLT5jbWRzdGF0ID0gQVRBX0NNRF9QSU9fUkVBRCB8IHdyaXRlYml0IHwgZXh0Yml0OwogCiAJLyogbWFyayBhbGwgdHJhY2tpbmcgZmllbGRzIGFuZCBsb2FkIG91dCAqLwogCWJ1Zi0+bmZyYW1lc291dCArPSAxOwpAQCAtMzYyLDEwICszNjMsMTAgQEAKIAlzd2l0Y2ggKGFoLT5jbWRzdGF0KSB7CiAJZGVmYXVsdDoKIAkJYnJlYWs7Ci0JY2FzZSBXSU5fUkVBRDoKLQljYXNlIFdJTl9SRUFEX0VYVDoKLQljYXNlIFdJTl9XUklURToKLQljYXNlIFdJTl9XUklURV9FWFQ6CisJY2FzZSBBVEFfQ01EX1BJT19SRUFEOgorCWNhc2UgQVRBX0NNRF9QSU9fUkVBRF9FWFQ6CisJY2FzZSBBVEFfQ01EX1BJT19XUklURToKKwljYXNlIEFUQV9DTURfUElPX1dSSVRFX0VYVDoKIAkJcHV0X2xiYShhaCwgZi0+bGJhKTsKIAogCQluID0gZi0+YmNudDsKQEAgLTgxMiw4ICs4MTMsOCBAQAogCQkJZC0+aHRndCA9IE5VTEw7CiAJCW4gPSBhaG91dC0+c2NudCA8PCA5OwogCQlzd2l0Y2ggKGFob3V0LT5jbWRzdGF0KSB7Ci0JCWNhc2UgV0lOX1JFQUQ6Ci0JCWNhc2UgV0lOX1JFQURfRVhUOgorCQljYXNlIEFUQV9DTURfUElPX1JFQUQ6CisJCWNhc2UgQVRBX0NNRF9QSU9fUkVBRF9FWFQ6CiAJCQlpZiAoc2tiLT5sZW4gLSBzaXplb2YgKmhpbiAtIHNpemVvZiAqYWhpbiA8IG4pIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJImFvZTogJXMuICBza2ItPmxlbj0lZCBuZWVkPSVsZFxuIiwKQEAgLTgyMyw4ICs4MjQsOCBAQAogCQkJCXJldHVybjsKIAkJCX0KIAkJCW1lbWNweShmLT5idWZhZGRyLCBhaGluKzEsIG4pOwotCQljYXNlIFdJTl9XUklURToKLQkJY2FzZSBXSU5fV1JJVEVfRVhUOgorCQljYXNlIEFUQV9DTURfUElPX1dSSVRFOgorCQljYXNlIEFUQV9DTURfUElPX1dSSVRFX0VYVDoKIAkJCWlmcCA9IGdldGlmKHQsIHNrYi0+ZGV2KTsKIAkJCWlmIChpZnApIHsKIAkJCQlpZnAtPmxvc3QgPSAwOwpAQCAtODM4LDcgKzgzOSw3IEBACiAJCQkJZ290byB4bWl0OwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgV0lOX0lERU5USUZZOgorCQljYXNlIEFUQV9DTURfSURfQVRBOgogCQkJaWYgKHNrYi0+bGVuIC0gc2l6ZW9mICpoaW4gLSBzaXplb2YgKmFoaW4gPCA1MTIpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkJCSJhb2U6IHJ1bnQgZGF0YSBzaXplIGluIGF0YWlkLiAgc2tiLT5sZW49JWRcbiIsCkBAIC05MTQsNyArOTE1LDcgQEAKIAogCS8qIHNldCB1cCBhdGEgaGVhZGVyICovCiAJYWgtPnNjbnQgPSAxOwotCWFoLT5jbWRzdGF0ID0gV0lOX0lERU5USUZZOworCWFoLT5jbWRzdGF0ID0gQVRBX0NNRF9JRF9BVEE7CiAJYWgtPmxiYTMgPSAweGEwOwogCiAJc2tiLT5kZXYgPSB0LT5pZnAtPm5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggYzJjOTVlNi4uMTMwMGRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0xNzcsNiArMTc3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4JLyogZm9yIGludmFsaWRhdGVfYnVmZmVycygpICovCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApAQCAtNDU5Nyw2ICs0NTk4LDEzIEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiZmQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorLyogVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGdldCB1c2VkIG90aGVyIHRoYW4gZm9yIG1vZHVsZSBpbmZvcm1hdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIGZsb3BweV9wbnBpZHNbXSA9IHsKKwl7ICJQTlAwNzAwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBmbG9wcHlfcG5waWRzKTsKKwogI2Vsc2UKIAogX19zZXR1cCgiZmxvcHB5PSIsIGZsb3BweV9zZXR1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2hkLmMgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKaW5kZXggNDgyYzBjNC4uM2MxMWYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9oZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svaGQuYwpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAKKyNkZWZpbmUgSERfSVJRIDE0CisKICNkZWZpbmUgUkVBTExZX1NMT1dfSU8KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCA4Mjk5ZTJkLi40ZDZkZTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTQsNyArNCw3IEBACiAgKiBOb3RlIHRoYXQgeW91IGNhbiBub3Qgc3dhcCBvdmVyIHRoaXMgdGhpbmcsIHlldC4gU2VlbXMgdG8gd29yayBidXQKICAqIGRlYWRsb2NrcyBzb21ldGltZXMgLSB5b3UgY2FuIG5vdCBzd2FwIG92ZXIgVENQIGluIGdlbmVyYWwuCiAgKiAKLSAqIENvcHlyaWdodCAxOTk3LTIwMDAgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CisgKiBDb3B5cmlnaHQgMTk5Ny0yMDAwLCAyMDA4IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KICAqIFBhcnRzIGNvcHlyaWdodCAyMDAxIFN0ZXZlbiBXaGl0ZWhvdXNlIDxzdGV2ZUBjaHlnd3luLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgR1BMdjIgb3IgbGF0ZXIuCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3Jfb3V0OgotCXJldHVybiAxOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKm5iZF9maW5kX3JlcXVlc3Qoc3RydWN0IG5iZF9kZXZpY2UgKmxvLApAQCAtNDY3LDkgKzQ2Nyw3IEBACiAJCW11dGV4X3VubG9jaygmbG8tPnR4X2xvY2spOwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBdHRlbXB0ZWQgc2VuZCBvbiBjbG9zZWQgc29ja2V0XG4iLAogCQkgICAgICAgbG8tPmRpc2stPmRpc2tfbmFtZSk7Ci0JCXJlcS0+ZXJyb3JzKys7Ci0JCW5iZF9lbmRfcmVxdWVzdChyZXEpOwotCQlyZXR1cm47CisJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAogCWxvLT5hY3RpdmVfcmVxID0gcmVxOwpAQCAtNTMxLDcgKzUyOSw3IEBACiAgKiAgIHsgcHJpbnRrKCAiV2FybmluZzogSWdub3JpbmcgcmVzdWx0IVxuIik7IG5iZF9lbmRfcmVxdWVzdCggcmVxICk7IH0KICAqLwogCi1zdGF0aWMgdm9pZCBkb19uYmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHEpCitzdGF0aWMgdm9pZCBkb19uYmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCQpAQCAtNTY4LDI3ICs1NjYsMTcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggdHhfbG9jayBoZWxkICovCisKK3N0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKmxvLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IG5iZF9kZXZpY2UgKmxvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBmaWxlICpmaWxlOwotCWludCBlcnJvcjsKLQlzdHJ1Y3QgcmVxdWVzdCBzcmVxIDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKLQotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCUJVR19PTihsby0+bWFnaWMgIT0gTE9fTUFHSUMpOwotCi0JLyogQW55b25lIGNhcGFibGUgb2YgdGhpcyBzeXNjYWxsIGNhbiBkbyAqcmVhbCBiYWQqIHRoaW5ncyAqLwotCWRwcmludGsoREJHX0lPQ1RMLCAiJXM6IG5iZF9pb2N0bCBjbWQ9JXMoMHgleCkgYXJnPSVsdVxuIiwKLQkJCWxvLT5kaXNrLT5kaXNrX25hbWUsIGlvY3RsX2NtZF90b19hc2NpaShjbWQpLCBjbWQsIGFyZyk7Ci0KIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTkJEX0RJU0NPTk5FQ1Q6CisJY2FzZSBOQkRfRElTQ09OTkVDVDogeworCQlzdHJ1Y3QgcmVxdWVzdCBzcmVxOworCiAJICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTkJEX0RJU0NPTk5FQ1RcbiIsIGxvLT5kaXNrLT5kaXNrX25hbWUpOworCiAJCWJsa19ycV9pbml0KE5VTEwsICZzcmVxKTsKIAkJc3JlcS5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CiAJCW5iZF9jbWQoJnNyZXEpID0gTkJEX0NNRF9ESVNDOwpAQCAtNTk5LDI5ICs1ODcsMjkgQEAKIAkJICovCiAJCXNyZXEuc2VjdG9yID0gMDsKIAkJc3JlcS5ucl9zZWN0b3JzID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWxvLT5zb2NrKQorCQlpZiAoIWxvLT5zb2NrKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKLSAgICAgICAgICAgICAgICBuYmRfc2VuZF9yZXEobG8sICZzcmVxKTsKLQkJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CisJCW5iZF9zZW5kX3JlcShsbywgJnNyZXEpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOworCX0KICAKLQljYXNlIE5CRF9DTEVBUl9TT0NLOgotCQllcnJvciA9IDA7Ci0JCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKKwljYXNlIE5CRF9DTEVBUl9TT0NLOiB7CisJCXN0cnVjdCBmaWxlICpmaWxlOworCiAJCWxvLT5zb2NrID0gTlVMTDsKLQkJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CiAJCWZpbGUgPSBsby0+ZmlsZTsKIAkJbG8tPmZpbGUgPSBOVUxMOwogCQluYmRfY2xlYXJfcXVlKGxvKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZsby0+cXVldWVfaGVhZCkpOwogCQlpZiAoZmlsZSkKIAkJCWZwdXQoZmlsZSk7Ci0JCXJldHVybiBlcnJvcjsKLQljYXNlIE5CRF9TRVRfU09DSzoKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBOQkRfU0VUX1NPQ0s6IHsKKwkJc3RydWN0IGZpbGUgKmZpbGU7CiAJCWlmIChsby0+ZmlsZSkKIAkJCXJldHVybiAtRUJVU1k7Ci0JCWVycm9yID0gLUVJTlZBTDsKIAkJZmlsZSA9IGZnZXQoYXJnKTsKIAkJaWYgKGZpbGUpIHsKIAkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwpAQCAtNjMwLDEyICs2MTgsMTQgQEAKIAkJCQlsby0+c29jayA9IFNPQ0tFVF9JKGlub2RlKTsKIAkJCQlpZiAobWF4X3BhcnQgPiAwKQogCQkJCQliZGV2LT5iZF9pbnZhbGlkYXRlZCA9IDE7Ci0JCQkJZXJyb3IgPSAwOworCQkJCXJldHVybiAwOwogCQkJfSBlbHNlIHsKIAkJCQlmcHV0KGZpbGUpOwogCQkJfQogCQl9Ci0JCXJldHVybiBlcnJvcjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJY2FzZSBOQkRfU0VUX0JMS1NJWkU6CiAJCWxvLT5ibGtzaXplID0gYXJnOwogCQlsby0+Ynl0ZXNpemUgJj0gfihsby0+Ymxrc2l6ZS0xKTsKQEAgLTY0MywzNSArNjMzLDUwIEBACiAJCXNldF9ibG9ja3NpemUoYmRldiwgbG8tPmJsa3NpemUpOwogCQlzZXRfY2FwYWNpdHkobG8tPmRpc2ssIGxvLT5ieXRlc2l6ZSA+PiA5KTsKIAkJcmV0dXJuIDA7CisKIAljYXNlIE5CRF9TRVRfU0laRToKIAkJbG8tPmJ5dGVzaXplID0gYXJnICYgfihsby0+Ymxrc2l6ZS0xKTsKIAkJYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA9IGxvLT5ieXRlc2l6ZTsKIAkJc2V0X2Jsb2Nrc2l6ZShiZGV2LCBsby0+Ymxrc2l6ZSk7CiAJCXNldF9jYXBhY2l0eShsby0+ZGlzaywgbG8tPmJ5dGVzaXplID4+IDkpOwogCQlyZXR1cm4gMDsKKwogCWNhc2UgTkJEX1NFVF9USU1FT1VUOgogCQlsby0+eG1pdF90aW1lb3V0ID0gYXJnICogSFo7CiAJCXJldHVybiAwOworCiAJY2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOgogCQlsby0+Ynl0ZXNpemUgPSAoKHU2NCkgYXJnKSAqIGxvLT5ibGtzaXplOwogCQliZGV2LT5iZF9pbm9kZS0+aV9zaXplID0gbG8tPmJ5dGVzaXplOwogCQlzZXRfYmxvY2tzaXplKGJkZXYsIGxvLT5ibGtzaXplKTsKIAkJc2V0X2NhcGFjaXR5KGxvLT5kaXNrLCBsby0+Ynl0ZXNpemUgPj4gOSk7CiAJCXJldHVybiAwOwotCWNhc2UgTkJEX0RPX0lUOgorCisJY2FzZSBOQkRfRE9fSVQ6IHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CisJCXN0cnVjdCBmaWxlICpmaWxlOworCQlpbnQgZXJyb3I7CisKIAkJaWYgKGxvLT5waWQpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlpZiAoIWxvLT5maWxlKQogCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CisKIAkJdGhyZWFkID0ga3RocmVhZF9jcmVhdGUobmJkX3RocmVhZCwgbG8sIGxvLT5kaXNrLT5kaXNrX25hbWUpOwotCQlpZiAoSVNfRVJSKHRocmVhZCkpCisJCWlmIChJU19FUlIodGhyZWFkKSkgeworCQkJbXV0ZXhfbG9jaygmbG8tPnR4X2xvY2spOwogCQkJcmV0dXJuIFBUUl9FUlIodGhyZWFkKTsKKwkJfQogCQl3YWtlX3VwX3Byb2Nlc3ModGhyZWFkKTsKIAkJZXJyb3IgPSBuYmRfZG9faXQobG8pOwogCQlrdGhyZWFkX3N0b3AodGhyZWFkKTsKKworCQltdXRleF9sb2NrKCZsby0+dHhfbG9jayk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJc29ja19zaHV0ZG93bihsbywgMSk7CisJCXNvY2tfc2h1dGRvd24obG8sIDApOwogCQlmaWxlID0gbG8tPmZpbGU7CiAJCWxvLT5maWxlID0gTlVMTDsKIAkJbmJkX2NsZWFyX3F1ZShsbyk7CkBAIC02ODQsNiArNjg5LDggQEAKIAkJaWYgKG1heF9wYXJ0ID4gMCkKIAkJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKIAkJcmV0dXJuIGxvLT5oYXJkZXJyb3I7CisJfQorCiAJY2FzZSBOQkRfQ0xFQVJfUVVFOgogCQkvKgogCQkgKiBUaGlzIGlzIGZvciBjb21wYXRpYmlsaXR5IG9ubHkuICBUaGUgcXVldWUgaXMgYWx3YXlzIGNsZWFyZWQKQEAgLTY5MSw2ICs2OTgsNyBAQAogCQkgKi8KIAkJQlVHX09OKCFsby0+c29jayAmJiAhbGlzdF9lbXB0eSgmbG8tPnF1ZXVlX2hlYWQpKTsKIAkJcmV0dXJuIDA7CisKIAljYXNlIE5CRF9QUklOVF9ERUJVRzoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5leHQgPSAlcCwgcHJldiA9ICVwLCBoZWFkID0gJXBcbiIsCiAJCQliZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUsCkBAIC02OTgsNyArNzA2LDI5IEBACiAJCQkmbG8tPnF1ZXVlX2hlYWQpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7Cit9CisKK3N0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbmJkX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IGVycm9yOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJQlVHX09OKGxvLT5tYWdpYyAhPSBMT19NQUdJQyk7CisKKwkvKiBBbnlvbmUgY2FwYWJsZSBvZiB0aGlzIHN5c2NhbGwgY2FuIGRvICpyZWFsIGJhZCogdGhpbmdzICovCisJZHByaW50ayhEQkdfSU9DVEwsICIlczogbmJkX2lvY3RsIGNtZD0lcygweCV4KSBhcmc9JWx1XG4iLAorCQkJbG8tPmRpc2stPmRpc2tfbmFtZSwgaW9jdGxfY21kX3RvX2FzY2lpKGNtZCksIGNtZCwgYXJnKTsKKworCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKKwllcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIGxvLCBjbWQsIGFyZyk7CisJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwppbmRleCAxMTliZTM0Li42Y2NjZGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwpAQCAtODksNiArODksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfT0YpCkBAIC0yMDgsNyArMjA5LDcgQEAKIAlzdHJ1Y3QgZ2VuZGlzayAqZ2Q7CiAKIAkvKiBJbnNlcnRlZCBDRiBjYXJkIHBhcmFtZXRlcnMgKi8KLQlzdHJ1Y3QgaGRfZHJpdmVpZCBjZl9pZDsKKwl1MTYgY2ZfaWRbQVRBX0lEX1dPUkRTXTsKIH07CiAKIHN0YXRpYyBpbnQgYWNlX21ham9yOwpAQCAtNDAyLDIxICs0MDMsMTQgQEAKIAkJIGFjZV9pbjMyKGFjZSwgQUNFX0NGR0xCQSksIGFjZV9pbihhY2UsIEFDRV9GQVRTVEFUKSk7CiB9CiAKLXZvaWQgYWNlX2ZpeF9kcml2ZWlkKHN0cnVjdCBoZF9kcml2ZWlkICppZCkKK3ZvaWQgYWNlX2ZpeF9kcml2ZWlkKHUxNiAqaWQpCiB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2ICpidWYgPSAodm9pZCAqKWlkOwogCWludCBpOwogCiAJLyogQWxsIGhhbGYgd29yZHMgaGF2ZSB3cm9uZyBieXRlIG9yZGVyOyBzd2FwIHRoZSBieXRlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpOyBpICs9IDIsIGJ1ZisrKQotCQkqYnVmID0gbGUxNl90b19jcHUoKmJ1Zik7Ci0KLQkvKiBTb21lIG9mIHRoZSBkYXRhIHZhbHVlcyBhcmUgMzJiaXQ7IHN3YXAgdGhlIGhhbGYgd29yZHMgICovCi0JaWQtPmxiYV9jYXBhY2l0eSA9ICgoaWQtPmxiYV9jYXBhY2l0eSA+PiAxNikgJiAweDAwMDBGRkZGKSB8Ci0JICAgICgoaWQtPmxiYV9jYXBhY2l0eSA8PCAxNikgJiAweEZGRkYwMDAwKTsKLQlpZC0+c3BnID0gKChpZC0+c3BnID4+IDE2KSAmIDB4MDAwMEZGRkYpIHwKLQkgICAgKChpZC0+c3BnIDw8IDE2KSAmIDB4RkZGRjAwMDApOworCWZvciAoaSA9IDA7IGkgPCBBVEFfSURfV09SRFM7IGkrKywgaWQrKykKKwkJKmlkID0gbGUxNl90b19jcHUoKmlkKTsKICNlbmRpZgogfQogCkBAIC02MTQsNyArNjA4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEFDRV9GU01fU1RBVEVfSURFTlRJRllfQ09NUExFVEU6Ci0JCWFjZV9maXhfZHJpdmVpZCgmYWNlLT5jZl9pZCk7CisJCWFjZV9maXhfZHJpdmVpZCgmYWNlLT5jZl9pZFswXSk7CiAJCWFjZV9kdW1wX21lbSgmYWNlLT5jZl9pZCwgNTEyKTsJLyogRGVidWc6IER1bXAgb3V0IGRpc2sgSUQgKi8KIAogCQlpZiAoYWNlLT5kYXRhX3Jlc3VsdCkgewpAQCAtNjI3LDkgKzYyMSwxMCBAQAogCQkJYWNlLT5tZWRpYV9jaGFuZ2UgPSAwOwogCiAJCQkvKiBSZWNvcmQgZGlzayBwYXJhbWV0ZXJzICovCi0JCQlzZXRfY2FwYWNpdHkoYWNlLT5nZCwgYWNlLT5jZl9pZC5sYmFfY2FwYWNpdHkpOworCQkJc2V0X2NhcGFjaXR5KGFjZS0+Z2QsCisJCQkJYXRhX2lkX3UzMigmYWNlLT5jZl9pZCwgQVRBX0lEX0xCQV9DQVBBQ0lUWSkpOwogCQkJZGV2X2luZm8oYWNlLT5kZXYsICJjYXBhY2l0eTogJWkgc2VjdG9yc1xuIiwKLQkJCQkgYWNlLT5jZl9pZC5sYmFfY2FwYWNpdHkpOworCQkJCWF0YV9pZF91MzIoJmFjZS0+Y2ZfaWQsIEFUQV9JRF9MQkFfQ0FQQUNJVFkpKTsKIAkJfQogCiAJCS8qIFdlJ3JlIGRvbmUsIGRyb3AgdG8gSURMRSBzdGF0ZSBhbmQgbm90aWZ5IHdhaXRlcnMgKi8KQEAgLTkyOCwxMiArOTIzLDEzIEBACiBzdGF0aWMgaW50IGFjZV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCiB7CiAJc3RydWN0IGFjZV9kZXZpY2UgKmFjZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwl1MTYgKmNmX2lkID0gJmFjZS0+Y2ZfaWRbMF07CiAKIAlkZXZfZGJnKGFjZS0+ZGV2LCAiYWNlX2dldGdlbygpXG4iKTsKIAotCWdlby0+aGVhZHMgPSBhY2UtPmNmX2lkLmhlYWRzOwotCWdlby0+c2VjdG9ycyA9IGFjZS0+Y2ZfaWQuc2VjdG9yczsKLQlnZW8tPmN5bGluZGVycyA9IGFjZS0+Y2ZfaWQuY3lsczsKKwlnZW8tPmhlYWRzCT0gY2ZfaWRbQVRBX0lEX0hFQURTXTsKKwlnZW8tPnNlY3RvcnMJPSBjZl9pZFtBVEFfSURfU0VDVE9SU107CisJZ2VvLT5jeWxpbmRlcnMJPSBjZl9pZFtBVEFfSURfQ1lMU107CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ic3IuYyBiL2RyaXZlcnMvY2hhci9ic3IuYwppbmRleCBmNjA5NGFlLi4xNDBlYTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYnNyLmMKKysrIGIvZHJpdmVycy9jaGFyL2Jzci5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnNyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBic3JfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubW1hcCAgPSBic3JfbW1hcCwKIAkub3BlbiAgPSBic3Jfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ocGV0LmMgYi9kcml2ZXJzL2NoYXIvaHBldC5jCmluZGV4IDMyYjhiYmYuLjUwZGZhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ocGV0LmMKKysrIGIvZHJpdmVycy9jaGFyL2hwZXQuYwpAQCAtNzEzLDcgKzcxMyw3IEBACiAgKi8KICNkZWZpbmUJVElDS19DQUxJQlJBVEUJKDEwMDBVTCkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBldF9jYWxpYnJhdGUoc3RydWN0IGhwZXRzICpocGV0cCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faHBldF9jYWxpYnJhdGUoc3RydWN0IGhwZXRzICpocGV0cCkKIHsKIAlzdHJ1Y3QgaHBldF90aW1lciBfX2lvbWVtICp0aW1lciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyB0LCBtLCBjb3VudCwgaSwgZmxhZ3MsIHN0YXJ0OwpAQCAtNzUwLDYgKzc1MCwyNiBAQAogCXJldHVybiAobSAtIHN0YXJ0KSAvIGk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfY2FsaWJyYXRlKHN0cnVjdCBocGV0cyAqaHBldHApCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSAtMTsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCS8qCisJICogVHJ5IHRvIGNhbGlicmF0ZSB1bnRpbCByZXR1cm4gdmFsdWUgYmVjb21lcyBzdGFibGUgc21hbGwgdmFsdWUuCisJICogSWYgU01JIGludGVycnVwdGlvbiBvY2N1cnMgaW4gY2FsaWJyYXRpb24gbG9vcCwgdGhlIHJldHVybiB2YWx1ZQorCSAqIHdpbGwgYmUgYmlnLiBUaGlzIGF2b2lkcyBpdHMgaW1wYWN0LgorCSAqLworCWZvciAoIDsgOyApIHsKKwkJdG1wID0gX19ocGV0X2NhbGlicmF0ZShocGV0cCk7CisJCWlmIChyZXQgPD0gdG1wKQorCQkJYnJlYWs7CisJCXJldCA9IHRtcDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgaHBldF9hbGxvYyhzdHJ1Y3QgaHBldF9kYXRhICpoZHApCiB7CiAJdTY0IGNhcCwgbWNmZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYwppbmRleCAxMGFkNDFiLi5kY2QzNTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jCkBAIC05MCwxMCArOTAsMzAgQEAKIAogc3RhdGljIGludCBfX2luaXQgdGltZXJpb21lbV9ybmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKm1lbTsKIAlpbnQgcmV0OwogCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAorCQkJCSBwZGV2LT5uYW1lKTsKKwlpZiAobWVtID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWVtKTsKKwogCXRpbWVyaW9tZW1fcm5nX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAorCXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsCisJCQkJCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKIAlpZiAodGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kICE9IDAKIAkJJiYgdXNlY3NfdG9famlmZmllcyh0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpID4gMCkgewogCQl0aW1lcmlvbWVtX3JuZ190aW1lci5leHBpcmVzID0gamlmZmllczsKQEAgLTEwNCwyMyArMTI0LDM0IEBACiAJdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCA9IDE7CiAKIAlyZXQgPSBod3JuZ19yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfb3BzKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gcmVnaXN0ZXJpbmdcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWdpc3RlcjsKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIzMmJpdHMgZnJvbSAweCVwIEAgJWR1c1xuIiwKIAkJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MsCiAJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3RlcjoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9ibGVtIHJlZ2lzdGVyaW5nXG4iKTsKKwlpb3VubWFwKHRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpOworZXJyX2lvcmVtYXA6CisJcmVsZWFzZV9yZXNvdXJjZShtZW0pOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgdGltZXJpb21lbV9ybmdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHJlc291cmNlICptZW0gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKIAlkZWxfdGltZXJfc3luYygmdGltZXJpb21lbV9ybmdfdGltZXIpOwogCWh3cm5nX3VucmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX29wcyk7CiAKKwlpb3VubWFwKHRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpOworCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggN2M0M2FlNy4uZjgyNGVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMTQ4OCw3ICsxNDg4LDggQEAKIAlrZXlwdHItPmNvdW50ID0gKGlwX2NudCAmIENPVU5UX01BU0spIDw8IEhBU0hfQklUUzsKIAlzbXBfd21iKCk7CiAJaXBfY250Kys7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZWtleV93b3JrLCBSRUtFWV9JTlRFUlZBTCk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZWtleV93b3JrLAorCQkJICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShSRUtFWV9JTlRFUlZBTCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrZXlkYXRhICpnZXRfa2V5cHRyKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IDZlYzZlMTMuLjVlMjU2NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC0yOTgsNiArMjk4LDcgQEAKIAogCXVuc2lnbmVkIGludCByYnVmX2ZpbGxfbGV2ZWw7CiAJdW5zaWduZWQgaW50IGlmX21vZGU7CisJdW5zaWduZWQgaW50IGJhc2VfY2xvY2s7CiAKIAkvKiBkZXZpY2Ugc3RhdHVzICovCiAKQEAgLTExNTYsMjIgKzExNTcsMjYgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOwotCWluZm8tPnBhcmFtcy5tb2RlICAgICAgICAgICAgPSB0bXBfcGFyYW1zLm1vZGU7Ci0JaW5mby0+cGFyYW1zLmxvb3BiYWNrICAgICAgICA9IHRtcF9wYXJhbXMubG9vcGJhY2s7Ci0JaW5mby0+cGFyYW1zLmZsYWdzICAgICAgICAgICA9IHRtcF9wYXJhbXMuZmxhZ3M7Ci0JaW5mby0+cGFyYW1zLmVuY29kaW5nICAgICAgICA9IHRtcF9wYXJhbXMuZW5jb2Rpbmc7Ci0JaW5mby0+cGFyYW1zLmNsb2NrX3NwZWVkICAgICA9IHRtcF9wYXJhbXMuY2xvY2tfc3BlZWQ7Ci0JaW5mby0+cGFyYW1zLmFkZHJfZmlsdGVyICAgICA9IHRtcF9wYXJhbXMuYWRkcl9maWx0ZXI7Ci0JaW5mby0+cGFyYW1zLmNyY190eXBlICAgICAgICA9IHRtcF9wYXJhbXMuY3JjX3R5cGU7Ci0JaW5mby0+cGFyYW1zLnByZWFtYmxlX2xlbmd0aCA9IHRtcF9wYXJhbXMucHJlYW1ibGVfbGVuZ3RoOwotCWluZm8tPnBhcmFtcy5wcmVhbWJsZSAgICAgICAgPSB0bXBfcGFyYW1zLnByZWFtYmxlOwotCWluZm8tPnBhcmFtcy5kYXRhX3JhdGUgICAgICAgPSB0bXBfcGFyYW1zLmRhdGFfcmF0ZTsKLQlpbmZvLT5wYXJhbXMuZGF0YV9iaXRzICAgICAgID0gdG1wX3BhcmFtcy5kYXRhX2JpdHM7Ci0JaW5mby0+cGFyYW1zLnN0b3BfYml0cyAgICAgICA9IHRtcF9wYXJhbXMuc3RvcF9iaXRzOwotCWluZm8tPnBhcmFtcy5wYXJpdHkgICAgICAgICAgPSB0bXBfcGFyYW1zLnBhcml0eTsKKwlpZiAodG1wX3BhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9CQVNFX0NMT0NLKSB7CisJCWluZm8tPmJhc2VfY2xvY2sgPSB0bXBfcGFyYW1zLmNsb2NrX3NwZWVkOworCX0gZWxzZSB7CisJCWluZm8tPnBhcmFtcy5tb2RlICAgICAgICAgICAgPSB0bXBfcGFyYW1zLm1vZGU7CisJCWluZm8tPnBhcmFtcy5sb29wYmFjayAgICAgICAgPSB0bXBfcGFyYW1zLmxvb3BiYWNrOworCQlpbmZvLT5wYXJhbXMuZmxhZ3MgICAgICAgICAgID0gdG1wX3BhcmFtcy5mbGFnczsKKwkJaW5mby0+cGFyYW1zLmVuY29kaW5nICAgICAgICA9IHRtcF9wYXJhbXMuZW5jb2Rpbmc7CisJCWluZm8tPnBhcmFtcy5jbG9ja19zcGVlZCAgICAgPSB0bXBfcGFyYW1zLmNsb2NrX3NwZWVkOworCQlpbmZvLT5wYXJhbXMuYWRkcl9maWx0ZXIgICAgID0gdG1wX3BhcmFtcy5hZGRyX2ZpbHRlcjsKKwkJaW5mby0+cGFyYW1zLmNyY190eXBlICAgICAgICA9IHRtcF9wYXJhbXMuY3JjX3R5cGU7CisJCWluZm8tPnBhcmFtcy5wcmVhbWJsZV9sZW5ndGggPSB0bXBfcGFyYW1zLnByZWFtYmxlX2xlbmd0aDsKKwkJaW5mby0+cGFyYW1zLnByZWFtYmxlICAgICAgICA9IHRtcF9wYXJhbXMucHJlYW1ibGU7CisJCWluZm8tPnBhcmFtcy5kYXRhX3JhdGUgICAgICAgPSB0bXBfcGFyYW1zLmRhdGFfcmF0ZTsKKwkJaW5mby0+cGFyYW1zLmRhdGFfYml0cyAgICAgICA9IHRtcF9wYXJhbXMuZGF0YV9iaXRzOworCQlpbmZvLT5wYXJhbXMuc3RvcF9iaXRzICAgICAgID0gdG1wX3BhcmFtcy5zdG9wX2JpdHM7CisJCWluZm8tPnBhcmFtcy5wYXJpdHkgICAgICAgICAgPSB0bXBfcGFyYW1zLnBhcml0eTsKKwl9CiAJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwogCi0gCWNoYW5nZV9wYXJhbXMoaW5mbyk7CisJcHJvZ3JhbV9odyhpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjU1OSwxMCArMjU2NCwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7Ci0JbWVtY3B5KCZpbmZvLT5wYXJhbXMsICZ0bXBfcGFyYW1zLCBzaXplb2YoTUdTTF9QQVJBTVMpKTsKKwlpZiAodG1wX3BhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9CQVNFX0NMT0NLKQorCQlpbmZvLT5iYXNlX2Nsb2NrID0gdG1wX3BhcmFtcy5jbG9ja19zcGVlZDsKKwllbHNlCisJCW1lbWNweSgmaW5mby0+cGFyYW1zLCAmdG1wX3BhcmFtcywgc2l6ZW9mKE1HU0xfUEFSQU1TKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCi0gCWNoYW5nZV9wYXJhbXMoaW5mbyk7CisJcHJvZ3JhbV9odyhpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQzMiw2ICszNDQwLDcgQEAKIAkJaW5mby0+bWFnaWMgPSBNR1NMX01BR0lDOwogCQlJTklUX1dPUksoJmluZm8tPnRhc2ssIGJoX2hhbmRsZXIpOwogCQlpbmZvLT5tYXhfZnJhbWVfc2l6ZSA9IDQwOTY7CisJCWluZm8tPmJhc2VfY2xvY2sgPSAxNDc0NTYwMDsKIAkJaW5mby0+cmJ1Zl9maWxsX2xldmVsID0gRE1BQlVGU0laRTsKIAkJaW5mby0+cG9ydC5jbG9zZV9kZWxheSA9IDUqSFovMTA7CiAJCWluZm8tPnBvcnQuY2xvc2luZ193YWl0ID0gMzAqSFo7CkBAIC0zNzc5LDcgKzM3ODgsNyBAQAogc3RhdGljIHZvaWQgc2V0X3JhdGUoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbywgdTMyIHJhdGUpCiB7CiAJdW5zaWduZWQgaW50IGRpdjsKLQlzdGF0aWMgdW5zaWduZWQgaW50IG9zYyA9IDE0NzQ1NjAwOworCXVuc2lnbmVkIGludCBvc2MgPSBpbmZvLT5iYXNlX2Nsb2NrOwogCiAJLyogZGl2ID0gb3NjL3JhdGUgLSAxCiAJICoKQEAgLTQwODMsMTggKzQwOTIsMjcgQEAKIAkgKiAwNiAgQ1RTICAgICAgSVJRIGVuYWJsZQogCSAqIDA1ICBEQ0QgICAgICBJUlEgZW5hYmxlCiAJICogMDQgIFJJICAgICAgIElSUSBlbmFibGUKLQkgKiAwMyAgcmVzZXJ2ZWQsIG11c3QgYmUgemVybworCSAqIDAzICAwPTE2eCBzYW1wbGluZywgMT04eCBzYW1wbGluZwogCSAqIDAyICAxPXR4ZC0+cnhkIGludGVybmFsIGxvb3BiYWNrIGVuYWJsZQogCSAqIDAxICByZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCiAJICogMDAgIDE9bWFzdGVyIElSUSBlbmFibGUKIAkgKi8KIAl2YWwgPSBCSVQxNSArIEJJVDE0ICsgQklUMDsKKwkvKiBKQ1JbOF0gOiAxID0geDggYXN5bmMgbW9kZSBmZWF0dXJlIGF2YWlsYWJsZSAqLworCWlmICgocmRfcmVnMzIoaW5mbywgSkNSKSAmIEJJVDgpICYmIGluZm8tPnBhcmFtcy5kYXRhX3JhdGUgJiYKKwkgICAgKChpbmZvLT5iYXNlX2Nsb2NrIDwgKGluZm8tPnBhcmFtcy5kYXRhX3JhdGUgKiAxNikpIHx8CisJICAgICAoaW5mby0+YmFzZV9jbG9jayAlIChpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICogMTYpKSkpIHsKKwkJLyogdXNlIDh4IHNhbXBsaW5nICovCisJCXZhbCB8PSBCSVQzOworCQlzZXRfcmF0ZShpbmZvLCBpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICogOCk7CisJfSBlbHNlIHsKKwkJLyogdXNlIDE2eCBzYW1wbGluZyAqLworCQlzZXRfcmF0ZShpbmZvLCBpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICogMTYpOworCX0KIAl3cl9yZWcxNihpbmZvLCBTQ1IsIHZhbCk7CiAKIAlzbGd0X2lycV9vbihpbmZvLCBJUlFfUlhCUkVBSyB8IElSUV9SWE9WRVIpOwogCi0Jc2V0X3JhdGUoaW5mbywgaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSAqIDE2KTsKLQogCWlmIChpbmZvLT5wYXJhbXMubG9vcGJhY2spCiAJCWVuYWJsZV9sb29wYmFjayhpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeXNycS5jIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKaW5kZXggZWJlYTliMi4uNmRlMDIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5c3JxLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKQEAgLTI4Myw3ICsyODMsNyBAQAogfQogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfZnRyYWNlX2R1bXBfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9mdHJhY2VfZHVtcCwKLQkuaGVscF9tc2cJPSAiZHVtcFotZnRyYWNlLWJ1ZmZlciIsCisJLmhlbHBfbXNnCT0gImR1bXAtZnRyYWNlLWJ1ZmZlcihaKSIsCiAJLmFjdGlvbl9tc2cJPSAiRHVtcCBmdHJhY2UgYnVmZmVyIiwKIAkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfRFVNUCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2F1ZGl0LmMgYi9kcml2ZXJzL2NoYXIvdHR5X2F1ZGl0LmMKaW5kZXggMzRhYjZkNy4uNTViYTZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9hdWRpdC5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfYXVkaXQuYwpAQCAtMTAsOCArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mZHRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKIHN0cnVjdCB0dHlfYXVkaXRfYnVmIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCAzM2RhYzk0Li42NmI5OWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0xNzU4LDcgKzE3NTgsNyBAQAogCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXI7CiAJaW50IGluZGV4OwogCWRldl90IGRldmljZSA9IGlub2RlLT5pX3JkZXY7Ci0JdW5zaWduZWQgc2hvcnQgc2F2ZWRfZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzOworCXVuc2lnbmVkIHNhdmVkX2ZsYWdzID0gZmlscC0+Zl9mbGFnczsKIAogCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOwogCkBAIC0yNjgxLDcgKzI2ODEsNyBAQAogCS8qIEtpbGwgdGhlIGVudGlyZSBzZXNzaW9uICovCiAJZG9fZWFjaF9waWRfdGFzayhzZXNzaW9uLCBQSURUWVBFX1NJRCwgcCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNBSzoga2lsbGVkIHByb2Nlc3MgJWQiCi0JCQkiICglcyk6IHRhc2tfc2Vzc2lvbl9ucihwKT09dHR5LT5zZXNzaW9uXG4iLAorCQkJIiAoJXMpOiB0YXNrX3Nlc3Npb24ocCk9PXR0eS0+c2Vzc2lvblxuIiwKIAkJCXRhc2tfcGlkX25yKHApLCBwLT5jb21tKTsKIAkJc2VuZF9zaWcoU0lHS0lMTCwgcCwgMSk7CiAJfSB3aGlsZV9lYWNoX3BpZF90YXNrKHNlc3Npb24sIFBJRFRZUEVfU0lELCBwKTsKQEAgLTI2OTEsNyArMjY5MSw3IEBACiAJZG9fZWFjaF90aHJlYWQoZywgcCkgewogCQlpZiAocC0+c2lnbmFsLT50dHkgPT0gdHR5KSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNBSzoga2lsbGVkIHByb2Nlc3MgJWQiCi0JCQkgICAgIiAoJXMpOiB0YXNrX3Nlc3Npb25fbnIocCk9PXR0eS0+c2Vzc2lvblxuIiwKKwkJCSAgICAiICglcyk6IHRhc2tfc2Vzc2lvbihwKT09dHR5LT5zZXNzaW9uXG4iLAogCQkJICAgIHRhc2tfcGlkX25yKHApLCBwLT5jb21tKTsKIAkJCXNlbmRfc2lnKFNJR0tJTEwsIHAsIDEpOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKaW5kZXggN2E4NGI0MC4uZjc4ZjViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2cHRzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vaGlmbl83OTV4LmMgYi9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYwppbmRleCAwYzc5ZmU3Li40ZDg1NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYworKysgYi9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYwpAQCAtMTg4Miw3ICsxODgyLDcgQEAKIAogc3RhdGljIHZvaWQgaGlmbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaGlmbl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkdywgc3RydWN0IGhpZm5fZGV2aWNlLCB3b3JrKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXNldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMgYi9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMKaW5kZXggZDllNzUxYi4uYWY5NzYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vaXhwNHh4X2NyeXB0by5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2l4cDR4eF9jcnlwdG8uYwpAQCAtMTAxLDYgKzEwMSw3IEBACiAJdTMyIHBoeXNfYWRkcjsKIAl1MzIgX19yZXNlcnZlZFs0XTsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKm5leHQ7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwogfTsKIAogc3RydWN0IGNyeXB0X2N0bCB7CkBAIC0xMzIsMTQgKzEzMywxMCBAQAogc3RydWN0IGFibGtfY3R4IHsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKnNyYzsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmRzdDsKLQl1bnNpZ25lZCBzcmNfbmVudHM7Ci0JdW5zaWduZWQgZHN0X25lbnRzOwogfTsKIAogc3RydWN0IGFlYWRfY3R4IHsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZmZlcjsKLQl1bnNpZ25lZCBzaG9ydCBhc3NvY19uZW50czsKLQl1bnNpZ25lZCBzaG9ydCBzcmNfbmVudHM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGl2bGlzdDsKIAkvKiB1c2VkIHdoZW4gdGhlIGhtYWMgaXMgbm90IG9uIG9uZSBzZyBlbnRyeSAqLwogCXU4ICpobWFjX3ZpcnQ7CkBAIC0zMTIsNyArMzA5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfYnVmX2NoYWluKHN0cnVjdCBidWZmZXJfZGVzYyAqYnVmLCB1MzIgcGh5cykKK3N0YXRpYyB2b2lkIGZyZWVfYnVmX2NoYWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJ1ZmZlcl9kZXNjICpidWYsdTMyIHBoeXMpCiB7CiAJd2hpbGUgKGJ1ZikgewogCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZjE7CkBAIC0zMjAsNiArMzE3LDcgQEAKIAogCQlidWYxID0gYnVmLT5uZXh0OwogCQlwaHlzMSA9IGJ1Zi0+cGh5c19uZXh0OworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgYnVmLT5waHlzX25leHQsIGJ1Zi0+YnVmX2xlbiwgYnVmLT5kaXIpOwogCQlkbWFfcG9vbF9mcmVlKGJ1ZmZlcl9wb29sLCBidWYsIHBoeXMpOwogCQlidWYgPSBidWYxOwogCQlwaHlzID0gcGh5czE7CkBAIC0zNDgsNyArMzQ2LDYgQEAKIAlzdHJ1Y3QgY3J5cHRfY3RsICpjcnlwdDsKIAlzdHJ1Y3QgaXhwX2N0eCAqY3R4OwogCWludCBmYWlsZWQ7Ci0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc3JjX2RpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwogCiAJZmFpbGVkID0gcGh5cyAmIDB4MSA/IC1FQkFETVNHIDogMDsKIAlwaHlzICY9IH4weDM7CkBAIC0zNTgsMTMgKzM1NSw4IEBACiAJY2FzZSBDVExfRkxBR19QRVJGT1JNX0FFQUQ6IHsKIAkJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gY3J5cHQtPmRhdGEuYWVhZF9yZXE7CiAJCXN0cnVjdCBhZWFkX2N0eCAqcmVxX2N0eCA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5hc3NvYywgcmVxX2N0eC0+YXNzb2NfbmVudHMsCi0JCQkJRE1BX1RPX0RFVklDRSk7Ci0JCWRtYV91bm1hcF9zZyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIDEsIERNQV9CSURJUkVDVElPTkFMKTsKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPnNyY19uZW50cywKLQkJCQlETUFfQklESVJFQ1RJT05BTCk7CiAKLQkJZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+YnVmZmVyLCBjcnlwdC0+c3JjX2J1Zik7CisJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+YnVmZmVyLCBjcnlwdC0+c3JjX2J1Zik7CiAJCWlmIChyZXFfY3R4LT5obWFjX3ZpcnQpIHsKIAkJCWZpbmlzaF9zY2F0dGVyZWRfaG1hYyhjcnlwdCk7CiAJCX0KQEAgLTM3NCwxNiArMzY2LDExIEBACiAJY2FzZSBDVExfRkxBR19QRVJGT1JNX0FCTEs6IHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gY3J5cHQtPmRhdGEuYWJsa19yZXE7CiAJCXN0cnVjdCBhYmxrX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKLQkJaW50IG5lbnRzOworCiAJCWlmIChyZXFfY3R4LT5kc3QpIHsKLQkJCW5lbnRzID0gcmVxX2N0eC0+ZHN0X25lbnRzOwotCQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5kc3QsIG5lbnRzLCBETUFfRlJPTV9ERVZJQ0UpOwotCQkJZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7Ci0JCQlzcmNfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwkJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7CiAJCX0KLQkJbmVudHMgPSByZXFfY3R4LT5zcmNfbmVudHM7Ci0JCWRtYV91bm1hcF9zZyhkZXYsIHJlcS0+c3JjLCBuZW50cywgc3JjX2RpcmVjdGlvbik7Ci0JCWZyZWVfYnVmX2NoYWluKHJlcV9jdHgtPnNyYywgY3J5cHQtPnNyY19idWYpOworCQlmcmVlX2J1Zl9jaGFpbihkZXYsIHJlcV9jdHgtPnNyYywgY3J5cHQtPnNyY19idWYpOwogCQlyZXEtPmJhc2UuY29tcGxldGUoJnJlcS0+YmFzZSwgZmFpbGVkKTsKIAkJYnJlYWs7CiAJfQpAQCAtNzUwLDU2ICs3MzcsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3VudF9zZyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmJ5dGVzKQorc3RhdGljIHN0cnVjdCBidWZmZXJfZGVzYyAqY2hhaW51cF9idWZmZXJzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywJdW5zaWduZWQgbmJ5dGVzLAorCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZiwgZ2ZwX3QgZmxhZ3MsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBuYnl0ZXMgPiAwOyBpKyssIHNnID0gc2dfbmV4dChzZykpCi0JCW5ieXRlcyAtPSBzZy0+bGVuZ3RoOwotCXJldHVybiBpOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9kZXNjICpjaGFpbnVwX2J1ZmZlcnMoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCXVuc2lnbmVkIG5ieXRlcywgc3RydWN0IGJ1ZmZlcl9kZXNjICpidWYsIGdmcF90IGZsYWdzKQotewotCWludCBuZW50cyA9IDA7Ci0KLQl3aGlsZSAobmJ5dGVzID4gMCkgeworCWZvciAoO25ieXRlcyA+IDA7IHNnID0gc2NhdHRlcndhbGtfc2dfbmV4dChzZykpIHsKKwkJdW5zaWduZWQgbGVuID0gbWluKG5ieXRlcywgc2ctPmxlbmd0aCk7CiAJCXN0cnVjdCBidWZmZXJfZGVzYyAqbmV4dF9idWY7CiAJCXUzMiBuZXh0X2J1Zl9waHlzOwotCQl1bnNpZ25lZCBsZW4gPSBtaW4obmJ5dGVzLCBzZ19kbWFfbGVuKHNnKSk7CisJCXZvaWQgKnB0cjsKIAotCQluZW50cysrOwogCQluYnl0ZXMgLT0gbGVuOwotCQlpZiAoIWJ1Zi0+cGh5c19hZGRyKSB7Ci0JCQlidWYtPnBoeXNfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKLQkJCWJ1Zi0+YnVmX2xlbiA9IGxlbjsKLQkJCWJ1Zi0+bmV4dCA9IE5VTEw7Ci0JCQlidWYtPnBoeXNfbmV4dCA9IDA7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQkJLyogVHdvIGNvbnNlY3V0aXZlIGNodW5rcyBvbiBvbmUgcGFnZSBtYXkgYmUgaGFuZGxlZCBieSB0aGUgb2xkCi0JCSAqIGJ1ZmZlciBkZXNjcmlwdG9yLCBpbmNyZWFzZWQgYnkgdGhlIGxlbmd0aCBvZiB0aGUgbmV3IG9uZQotCQkgKi8KLQkJaWYgKHNnX2RtYV9hZGRyZXNzKHNnKSA9PSBidWYtPnBoeXNfYWRkciArIGJ1Zi0+YnVmX2xlbikgewotCQkJYnVmLT5idWZfbGVuICs9IGxlbjsKLQkJCWdvdG8gbmV4dDsKLQkJfQorCQlwdHIgPSBwYWdlX2FkZHJlc3Moc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKIAkJbmV4dF9idWYgPSBkbWFfcG9vbF9hbGxvYyhidWZmZXJfcG9vbCwgZmxhZ3MsICZuZXh0X2J1Zl9waHlzKTsKLQkJaWYgKCFuZXh0X2J1ZikKLQkJCXJldHVybiBOVUxMOworCQlpZiAoIW5leHRfYnVmKSB7CisJCQlidWYgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJc2dfZG1hX2FkZHJlc3Moc2cpID0gZG1hX21hcF9zaW5nbGUoZGV2LCBwdHIsIGxlbiwgZGlyKTsKIAkJYnVmLT5uZXh0ID0gbmV4dF9idWY7CiAJCWJ1Zi0+cGh5c19uZXh0ID0gbmV4dF9idWZfcGh5czsKLQogCQlidWYgPSBuZXh0X2J1ZjsKLQkJYnVmLT5uZXh0ID0gTlVMTDsKLQkJYnVmLT5waHlzX25leHQgPSAwOworCiAJCWJ1Zi0+cGh5c19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwogCQlidWYtPmJ1Zl9sZW4gPSBsZW47Ci1uZXh0OgotCQlpZiAobmJ5dGVzID4gMCkgewotCQkJc2cgPSBzZ19uZXh0KHNnKTsKLQkJfQorCQlidWYtPmRpciA9IGRpcjsKIAl9CisJYnVmLT5uZXh0ID0gTlVMTDsKKwlidWYtPnBoeXNfbmV4dCA9IDA7CiAJcmV0dXJuIGJ1ZjsKIH0KIApAQCAtODYwLDEyICs4MjYsMTIgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBpeHBfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAl1bnNpZ25lZCBpdnNpemUgPSBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUodGZtKTsKLQlpbnQgcmV0ID0gLUVOT01FTTsKIAlzdHJ1Y3QgaXhfc2FfZGlyICpkaXI7CiAJc3RydWN0IGNyeXB0X2N0bCAqY3J5cHQ7Ci0JdW5zaWduZWQgaW50IG5ieXRlcyA9IHJlcS0+bmJ5dGVzLCBuZW50czsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gcmVxLT5uYnl0ZXM7CiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc3JjX2RpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwogCXN0cnVjdCBhYmxrX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgYnVmZmVyX2Rlc2Mgc3JjX2hvb2s7CiAJZ2ZwX3QgZmxhZ3MgPSByZXEtPmJhc2UuZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAgPwogCQkJCUdGUF9LRVJORUwgOiBHRlBfQVRPTUlDOwogCkBAIC04NzgsNyArODQ0LDcgQEAKIAogCWNyeXB0ID0gZ2V0X2NyeXB0X2Rlc2MoKTsKIAlpZiAoIWNyeXB0KQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVOT01FTTsKIAogCWNyeXB0LT5kYXRhLmFibGtfcmVxID0gcmVxOwogCWNyeXB0LT5jcnlwdG9fY3R4ID0gZGlyLT5ucGVfY3R4X3BoeXM7CkBAIC04OTEsNTMgKzg1Nyw0MSBAQAogCUJVR19PTihpdnNpemUgJiYgIXJlcS0+aW5mbyk7CiAJbWVtY3B5KGNyeXB0LT5pdiwgcmVxLT5pbmZvLCBpdnNpemUpOwogCWlmIChyZXEtPnNyYyAhPSByZXEtPmRzdCkgeworCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgZHN0X2hvb2s7CiAJCWNyeXB0LT5tb2RlIHw9IE5QRV9PUF9OT1RfSU5fUExBQ0U7Ci0JCW5lbnRzID0gY291bnRfc2cocmVxLT5kc3QsIG5ieXRlcyk7CiAJCS8qIFRoaXMgd2FzIG5ldmVyIHRlc3RlZCBieSBJbnRlbAogCQkgKiBmb3IgbW9yZSB0aGFuIG9uZSBkc3QgYnVmZmVyLCBJIHRoaW5rLiAqLwotCQlCVUdfT04obmVudHMgIT0gMSk7Ci0JCXJlcV9jdHgtPmRzdF9uZW50cyA9IG5lbnRzOwotCQlkbWFfbWFwX3NnKGRldiwgcmVxLT5kc3QsIG5lbnRzLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlyZXFfY3R4LT5kc3QgPSBkbWFfcG9vbF9hbGxvYyhidWZmZXJfcG9vbCwgZmxhZ3MsJmNyeXB0LT5kc3RfYnVmKTsKLQkJaWYgKCFyZXFfY3R4LT5kc3QpCi0JCQlnb3RvIHVubWFwX3NnX2Rlc3Q7Ci0JCXJlcV9jdHgtPmRzdC0+cGh5c19hZGRyID0gMDsKLQkJaWYgKCFjaGFpbnVwX2J1ZmZlcnMocmVxLT5kc3QsIG5ieXRlcywgcmVxX2N0eC0+ZHN0LCBmbGFncykpCisJCUJVR19PTihyZXEtPmRzdC0+bGVuZ3RoIDwgbmJ5dGVzKTsKKwkJcmVxX2N0eC0+ZHN0ID0gTlVMTDsKKwkJaWYgKCFjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPmRzdCwgbmJ5dGVzLCAmZHN0X2hvb2ssCisJCQkJCWZsYWdzLCBETUFfRlJPTV9ERVZJQ0UpKQogCQkJZ290byBmcmVlX2J1Zl9kZXN0OwogCQlzcmNfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwkJcmVxX2N0eC0+ZHN0ID0gZHN0X2hvb2submV4dDsKKwkJY3J5cHQtPmRzdF9idWYgPSBkc3RfaG9vay5waHlzX25leHQ7CiAJfSBlbHNlIHsKIAkJcmVxX2N0eC0+ZHN0ID0gTlVMTDsKLQkJcmVxX2N0eC0+ZHN0X25lbnRzID0gMDsKIAl9Ci0JbmVudHMgPSBjb3VudF9zZyhyZXEtPnNyYywgbmJ5dGVzKTsKLQlyZXFfY3R4LT5zcmNfbmVudHMgPSBuZW50czsKLQlkbWFfbWFwX3NnKGRldiwgcmVxLT5zcmMsIG5lbnRzLCBzcmNfZGlyZWN0aW9uKTsKLQotCXJlcV9jdHgtPnNyYyA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywgJmNyeXB0LT5zcmNfYnVmKTsKLQlpZiAoIXJlcV9jdHgtPnNyYykKLQkJZ290byB1bm1hcF9zZ19zcmM7Ci0JcmVxX2N0eC0+c3JjLT5waHlzX2FkZHIgPSAwOwotCWlmICghY2hhaW51cF9idWZmZXJzKHJlcS0+c3JjLCBuYnl0ZXMsIHJlcV9jdHgtPnNyYywgZmxhZ3MpKQorCXJlcV9jdHgtPnNyYyA9IE5VTEw7CisJaWYgKCFjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPnNyYywgbmJ5dGVzLCAmc3JjX2hvb2ssCisJCQkJZmxhZ3MsIHNyY19kaXJlY3Rpb24pKQogCQlnb3RvIGZyZWVfYnVmX3NyYzsKIAorCXJlcV9jdHgtPnNyYyA9IHNyY19ob29rLm5leHQ7CisJY3J5cHQtPnNyY19idWYgPSBzcmNfaG9vay5waHlzX25leHQ7CiAJY3J5cHQtPmN0bF9mbGFncyB8PSBDVExfRkxBR19QRVJGT1JNX0FCTEs7CiAJcW1ncl9wdXRfZW50cnkoU0VORF9RSUQsIGNyeXB0X3ZpcnQycGh5cyhjcnlwdCkpOwogCUJVR19PTihxbWdyX3N0YXRfb3ZlcmZsb3coU0VORF9RSUQpKTsKIAlyZXR1cm4gLUVJTlBST0dSRVNTOwogCiBmcmVlX2J1Zl9zcmM6Ci0JZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+c3JjLCBjcnlwdC0+c3JjX2J1Zik7Ci11bm1hcF9zZ19zcmM6Ci0JZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPnNyY19uZW50cywgc3JjX2RpcmVjdGlvbik7CisJZnJlZV9idWZfY2hhaW4oZGV2LCByZXFfY3R4LT5zcmMsIGNyeXB0LT5zcmNfYnVmKTsKIGZyZWVfYnVmX2Rlc3Q6CiAJaWYgKHJlcS0+c3JjICE9IHJlcS0+ZHN0KSB7Ci0JCWZyZWVfYnVmX2NoYWluKHJlcV9jdHgtPmRzdCwgY3J5cHQtPmRzdF9idWYpOwotdW5tYXBfc2dfZGVzdDoKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPmRzdF9uZW50cywKLQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7CiAJfQogCWNyeXB0LT5jdGxfZmxhZ3MgPSBDVExfRkxBR19VTlVTRUQ7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBhYmxrX2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQpAQCAtOTg1LDcgKzkzOSw3IEBACiAJCQlicmVhazsKIAogCQlvZmZzZXQgKz0gc2ctPmxlbmd0aDsKLQkJc2cgPSBzZ19uZXh0KHNnKTsKKwkJc2cgPSBzY2F0dGVyd2Fsa19zZ19uZXh0KHNnKTsKIAl9CiAJcmV0dXJuIChzdGFydCArIG5ieXRlcyA+IG9mZnNldCArIHNnLT5sZW5ndGgpOwogfQpAQCAtOTk3LDExICs5NTEsMTAgQEAKIAlzdHJ1Y3QgaXhwX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHRmbSk7CiAJdW5zaWduZWQgaXZzaXplID0gY3J5cHRvX2FlYWRfaXZzaXplKHRmbSk7CiAJdW5zaWduZWQgYXV0aHNpemUgPSBjcnlwdG9fYWVhZF9hdXRoc2l6ZSh0Zm0pOwotCWludCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBpeF9zYV9kaXIgKmRpcjsKIAlzdHJ1Y3QgY3J5cHRfY3RsICpjcnlwdDsKLQl1bnNpZ25lZCBpbnQgY3J5cHRsZW4sIG5lbnRzOwotCXN0cnVjdCBidWZmZXJfZGVzYyAqYnVmOworCXVuc2lnbmVkIGludCBjcnlwdGxlbjsKKwlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1Ziwgc3JjX2hvb2s7CiAJc3RydWN0IGFlYWRfY3R4ICpyZXFfY3R4ID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOwogCWdmcF90IGZsYWdzID0gcmVxLT5iYXNlLmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQID8KIAkJCQlHRlBfS0VSTkVMIDogR0ZQX0FUT01JQzsKQEAgLTEwMjIsNyArOTc1LDcgQEAKIAl9CiAJY3J5cHQgPSBnZXRfY3J5cHRfZGVzYygpOwogCWlmICghY3J5cHQpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRU5PTUVNOwogCiAJY3J5cHQtPmRhdGEuYWVhZF9yZXEgPSByZXE7CiAJY3J5cHQtPmNyeXB0b19jdHggPSBkaXItPm5wZV9jdHhfcGh5czsKQEAgLTEwNDEsMzEgKzk5NCwyNyBAQAogCQlCVUcoKTsgLyogLUVOT1RTVVAgYmVjYXVzZSBvZiBteSBsYXp5bmVzcyAqLwogCX0KIAotCXJlcV9jdHgtPmJ1ZmZlciA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywgJmNyeXB0LT5zcmNfYnVmKTsKLQlpZiAoIXJlcV9jdHgtPmJ1ZmZlcikKLQkJZ290byBvdXQ7Ci0JcmVxX2N0eC0+YnVmZmVyLT5waHlzX2FkZHIgPSAwOwogCS8qIEFTU09DIGRhdGEgKi8KLQluZW50cyA9IGNvdW50X3NnKHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOwotCXJlcV9jdHgtPmFzc29jX25lbnRzID0gbmVudHM7Ci0JZG1hX21hcF9zZyhkZXYsIHJlcS0+YXNzb2MsIG5lbnRzLCBETUFfVE9fREVWSUNFKTsKLQlidWYgPSBjaGFpbnVwX2J1ZmZlcnMocmVxLT5hc3NvYywgcmVxLT5hc3NvY2xlbiwgcmVxX2N0eC0+YnVmZmVyLGZsYWdzKTsKKwlidWYgPSBjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuLCAmc3JjX2hvb2ssCisJCWZsYWdzLCBETUFfVE9fREVWSUNFKTsKKwlyZXFfY3R4LT5idWZmZXIgPSBzcmNfaG9vay5uZXh0OworCWNyeXB0LT5zcmNfYnVmID0gc3JjX2hvb2sucGh5c19uZXh0OwogCWlmICghYnVmKQotCQlnb3RvIHVubWFwX3NnX2Fzc29jOworCQlnb3RvIG91dDsKIAkvKiBJViAqLwogCXNnX2luaXRfdGFibGUoJnJlcV9jdHgtPml2bGlzdCwgMSk7CiAJc2dfc2V0X2J1ZigmcmVxX2N0eC0+aXZsaXN0LCBpdiwgaXZzaXplKTsKLQlkbWFfbWFwX3NnKGRldiwgJnJlcV9jdHgtPml2bGlzdCwgMSwgRE1BX0JJRElSRUNUSU9OQUwpOwotCWJ1ZiA9IGNoYWludXBfYnVmZmVycygmcmVxX2N0eC0+aXZsaXN0LCBpdnNpemUsIGJ1ZiwgZmxhZ3MpOworCWJ1ZiA9IGNoYWludXBfYnVmZmVycyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIGl2c2l6ZSwgYnVmLCBmbGFncywKKwkJCURNQV9CSURJUkVDVElPTkFMKTsKIAlpZiAoIWJ1ZikKLQkJZ290byB1bm1hcF9zZ19pdjsKKwkJZ290byBmcmVlX2NoYWluOwogCWlmICh1bmxpa2VseShobWFjX2luY29uc2lzdGVudChyZXEtPnNyYywgY3J5cHRsZW4sIGF1dGhzaXplKSkpIHsKIAkJLyogVGhlIDEyIGhtYWMgYnl0ZXMgYXJlIHNjYXR0ZXJlZCwKIAkJICogd2UgbmVlZCB0byBjb3B5IHRoZW0gaW50byBhIHNhZmUgYnVmZmVyICovCiAJCXJlcV9jdHgtPmhtYWNfdmlydCA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywKIAkJCQkmY3J5cHQtPmljdl9yZXZfYWVzKTsKIAkJaWYgKHVubGlrZWx5KCFyZXFfY3R4LT5obWFjX3ZpcnQpKQotCQkJZ290byB1bm1hcF9zZ19pdjsKKwkJCWdvdG8gZnJlZV9jaGFpbjsKIAkJaWYgKCFlbmNyeXB0KSB7CiAJCQlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkocmVxX2N0eC0+aG1hY192aXJ0LAogCQkJCXJlcS0+c3JjLCBjcnlwdGxlbiwgYXV0aHNpemUsIDApOwpAQCAtMTA3NSwzMyArMTAyNCwyOCBAQAogCQlyZXFfY3R4LT5obWFjX3ZpcnQgPSBOVUxMOwogCX0KIAkvKiBDcnlwdCAqLwotCW5lbnRzID0gY291bnRfc2cocmVxLT5zcmMsIGNyeXB0bGVuICsgYXV0aHNpemUpOwotCXJlcV9jdHgtPnNyY19uZW50cyA9IG5lbnRzOwotCWRtYV9tYXBfc2coZGV2LCByZXEtPnNyYywgbmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsKLQlidWYgPSBjaGFpbnVwX2J1ZmZlcnMocmVxLT5zcmMsIGNyeXB0bGVuICsgYXV0aHNpemUsIGJ1ZiwgZmxhZ3MpOworCWJ1ZiA9IGNoYWludXBfYnVmZmVycyhkZXYsIHJlcS0+c3JjLCBjcnlwdGxlbiArIGF1dGhzaXplLCBidWYsIGZsYWdzLAorCQkJRE1BX0JJRElSRUNUSU9OQUwpOwogCWlmICghYnVmKQotCQlnb3RvIHVubWFwX3NnX3NyYzsKKwkJZ290byBmcmVlX2htYWNfdmlydDsKIAlpZiAoIXJlcV9jdHgtPmhtYWNfdmlydCkgewogCQljcnlwdC0+aWN2X3Jldl9hZXMgPSBidWYtPnBoeXNfYWRkciArIGJ1Zi0+YnVmX2xlbiAtIGF1dGhzaXplOwogCX0KKwogCWNyeXB0LT5jdGxfZmxhZ3MgfD0gQ1RMX0ZMQUdfUEVSRk9STV9BRUFEOwogCXFtZ3JfcHV0X2VudHJ5KFNFTkRfUUlELCBjcnlwdF92aXJ0MnBoeXMoY3J5cHQpKTsKIAlCVUdfT04ocW1ncl9zdGF0X292ZXJmbG93KFNFTkRfUUlEKSk7CiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsKLXVubWFwX3NnX3NyYzoKLQlkbWFfdW5tYXBfc2coZGV2LCByZXEtPnNyYywgcmVxX2N0eC0+c3JjX25lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CitmcmVlX2htYWNfdmlydDoKIAlpZiAocmVxX2N0eC0+aG1hY192aXJ0KSB7CiAJCWRtYV9wb29sX2ZyZWUoYnVmZmVyX3Bvb2wsIHJlcV9jdHgtPmhtYWNfdmlydCwKIAkJCQljcnlwdC0+aWN2X3Jldl9hZXMpOwogCX0KLXVubWFwX3NnX2l2OgotCWRtYV91bm1hcF9zZyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIDEsIERNQV9CSURJUkVDVElPTkFMKTsKLXVubWFwX3NnX2Fzc29jOgotCWRtYV91bm1hcF9zZyhkZXYsIHJlcS0+YXNzb2MsIHJlcV9jdHgtPmFzc29jX25lbnRzLCBETUFfVE9fREVWSUNFKTsKLQlmcmVlX2J1Zl9jaGFpbihyZXFfY3R4LT5idWZmZXIsIGNyeXB0LT5zcmNfYnVmKTsKK2ZyZWVfY2hhaW46CisJZnJlZV9idWZfY2hhaW4oZGV2LCByZXFfY3R4LT5idWZmZXIsIGNyeXB0LT5zcmNfYnVmKTsKIG91dDoKIAljcnlwdC0+Y3RsX2ZsYWdzID0gQ1RMX0ZMQUdfVU5VU0VEOwotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBpbnQgYWVhZF9zZXR1cChzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggNDhlYTU5ZS4uM2IzYzAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC05OCw2ICs5OCwxNyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgZW5hYmxlZCBJTlRFTF9JT0FURE1BIG9yIEZTTF9ETUEsIG90aGVyd2lzZQogCSAgc2F5IE4uCiAKK2NvbmZpZyBBU1lOQ19UWF9ETUEKKwlib29sICJBc3luY190eDogT2ZmbG9hZCBzdXBwb3J0IGZvciB0aGUgYXN5bmNfdHggYXBpIgorCWRlcGVuZHMgb24gRE1BX0VOR0lORQorCWhlbHAKKwkgIFRoaXMgYWxsb3dzIHRoZSBhc3luY190eCBhcGkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygb2ZmbG9hZCBlbmdpbmVzIGZvcgorCSAgbWVtY3B5LCBtZW1zZXQsIHhvciwgYW5kIHJhaWQ2IHArcSBvcGVyYXRpb25zLiAgSWYgeW91ciBwbGF0Zm9ybSBoYXMKKwkgIGEgZG1hIGVuZ2luZSB0aGF0IGNhbiBwZXJmb3JtIHJhaWQgb3BlcmF0aW9ucyBhbmQgeW91IGhhdmUgZW5hYmxlZAorCSAgTURfUkFJRDQ1NiBzYXkgWS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIERNQVRFU1QKIAl0cmlzdGF0ZSAiRE1BIFRlc3QgY2xpZW50IgogCWRlcGVuZHMgb24gRE1BX0VOR0lORQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwppbmRleCAyODBhOWQyLi45MjQzOGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYworKysgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwpAQCAtNTA3LDYgKzUwNyw3IEBACiAJCQkgKiBwdWJsaXNoZWQgaW4gdGhlIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IKIAkJCSAqLwogCQkJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIGRldmljZS0+Y2FwX21hc2spOworCQkJZGV2aWNlLT5wcml2YXRlY250Kys7CiAJCQllcnIgPSBkbWFfY2hhbl9nZXQoY2hhbik7CiAKIAkJCWlmIChlcnIgPT0gLUVOT0RFVikgewpAQCAtNTE4LDYgKzUxOSw4IEBACiAJCQkJICAgICAgIGRtYV9jaGFuX25hbWUoY2hhbiksIGVycik7CiAJCQllbHNlCiAJCQkJYnJlYWs7CisJCQlpZiAoLS1kZXZpY2UtPnByaXZhdGVjbnQgPT0gMCkKKwkJCQlkbWFfY2FwX2NsZWFyKERNQV9QUklWQVRFLCBkZXZpY2UtPmNhcF9tYXNrKTsKIAkJCWNoYW4tPnByaXZhdGUgPSBOVUxMOwogCQkJY2hhbiA9IE5VTEw7CiAJCX0KQEAgLTUzNyw2ICs1NDAsOSBAQAogCVdBUk5fT05DRShjaGFuLT5jbGllbnRfY291bnQgIT0gMSwKIAkJICAiY2hhbiByZWZlcmVuY2UgY291bnQgJWQgIT0gMVxuIiwgY2hhbi0+Y2xpZW50X2NvdW50KTsKIAlkbWFfY2hhbl9wdXQoY2hhbik7CisJLyogZHJvcCBQUklWQVRFIGNhcCBlbmFibGVkIGJ5IF9fZG1hX3JlcXVlc3RfY2hhbm5lbCgpICovCisJaWYgKC0tY2hhbi0+ZGV2aWNlLT5wcml2YXRlY250ID09IDApCisJCWRtYV9jYXBfY2xlYXIoRE1BX1BSSVZBVEUsIGNoYW4tPmRldmljZS0+Y2FwX21hc2spOwogCWNoYW4tPnByaXZhdGUgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOwogfQpAQCAtNjAyLDYgKzYwOCwyNCBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFlbmdpbmVfcHV0KTsKIAorc3RhdGljIGludCBnZXRfZG1hX2lkKHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJjOworCisgaWRyX3JldHJ5OgorCWlmICghaWRyX3ByZV9nZXQoJmRtYV9pZHIsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisJcmMgPSBpZHJfZ2V0X25ldygmZG1hX2lkciwgTlVMTCwgJmRldmljZS0+ZGV2X2lkKTsKKwltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKKwlpZiAocmMgPT0gLUVBR0FJTikKKwkJZ290byBpZHJfcmV0cnk7CisJZWxzZSBpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVycyBETUEgZGV2aWNlcyBmb3VuZAogICogQGRldmljZTogJmRtYV9kZXZpY2UKQEAgLTY0MCwyNyArNjY0LDI1IEBACiAJaWRyX3JlZiA9IGttYWxsb2Moc2l6ZW9mKCppZHJfcmVmKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpZHJfcmVmKQogCQlyZXR1cm4gLUVOT01FTTsKLQlhdG9taWNfc2V0KGlkcl9yZWYsIDApOwotIGlkcl9yZXRyeToKLQlpZiAoIWlkcl9wcmVfZ2V0KCZkbWFfaWRyLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOwotCXJjID0gaWRyX2dldF9uZXcoJmRtYV9pZHIsIE5VTEwsICZkZXZpY2UtPmRldl9pZCk7Ci0JbXV0ZXhfdW5sb2NrKCZkbWFfbGlzdF9tdXRleCk7Ci0JaWYgKHJjID09IC1FQUdBSU4pCi0JCWdvdG8gaWRyX3JldHJ5OwotCWVsc2UgaWYgKHJjICE9IDApCisJcmMgPSBnZXRfZG1hX2lkKGRldmljZSk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUoaWRyX3JlZik7CiAJCXJldHVybiByYzsKKwl9CisKKwlhdG9taWNfc2V0KGlkcl9yZWYsIDApOwogCiAJLyogcmVwcmVzZW50IGNoYW5uZWxzIGluIHN5c2ZzLiBQcm9iYWJseSB3YW50IGRldnMgdG9vICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmZGV2aWNlLT5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKKwkJcmMgPSAtRU5PTUVNOwogCQljaGFuLT5sb2NhbCA9IGFsbG9jX3BlcmNwdSh0eXBlb2YoKmNoYW4tPmxvY2FsKSk7CiAJCWlmIChjaGFuLT5sb2NhbCA9PSBOVUxMKQotCQkJY29udGludWU7CisJCQlnb3RvIGVycl9vdXQ7CiAJCWNoYW4tPmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpjaGFuLT5kZXYpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGNoYW4tPmRldiA9PSBOVUxMKSB7CiAJCQlmcmVlX3BlcmNwdShjaGFuLT5sb2NhbCk7Ci0JCQljb250aW51ZTsKKwkJCWNoYW4tPmxvY2FsID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dDsKIAkJfQogCiAJCWNoYW4tPmNoYW5faWQgPSBjaGFuY250Kys7CkBAIC02NzcsNiArNjk5LDggQEAKIAkJaWYgKHJjKSB7CiAJCQlmcmVlX3BlcmNwdShjaGFuLT5sb2NhbCk7CiAJCQljaGFuLT5sb2NhbCA9IE5VTEw7CisJCQlrZnJlZShjaGFuLT5kZXYpOworCQkJYXRvbWljX2RlYyhpZHJfcmVmKTsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQogCQljaGFuLT5jbGllbnRfY291bnQgPSAwOwpAQCAtNzAxLDEyICs3MjUsMjMgQEAKIAkJCX0KIAkJfQogCWxpc3RfYWRkX3RhaWxfcmN1KCZkZXZpY2UtPmdsb2JhbF9ub2RlLCAmZG1hX2RldmljZV9saXN0KTsKKwlpZiAoZG1hX2hhc19jYXAoRE1BX1BSSVZBVEUsIGRldmljZS0+Y2FwX21hc2spKQorCQlkZXZpY2UtPnByaXZhdGVjbnQrKzsJLyogQWx3YXlzIHByaXZhdGUgKi8KIAlkbWFfY2hhbm5lbF9yZWJhbGFuY2UoKTsKIAltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKIAogCXJldHVybiAwOwogCiBlcnJfb3V0OgorCS8qIGlmIHdlIG5ldmVyIHJlZ2lzdGVyZWQgYSBjaGFubmVsIGp1c3QgcmVsZWFzZSB0aGUgaWRyICovCisJaWYgKGF0b21pY19yZWFkKGlkcl9yZWYpID09IDApIHsKKwkJbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCQlpZHJfcmVtb3ZlKCZkbWFfaWRyLCBkZXZpY2UtPmRldl9pZCk7CisJCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCQlrZnJlZShpZHJfcmVmKTsKKwkJcmV0dXJuIHJjOworCX0KKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJmRldmljZS0+Y2hhbm5lbHMsIGRldmljZV9ub2RlKSB7CiAJCWlmIChjaGFuLT5sb2NhbCA9PSBOVUxMKQogCQkJY29udGludWU7CkBAIC04OTMsNiArOTI4LDcgQEAKIHsKIAl0eC0+Y2hhbiA9IGNoYW47CiAJc3Bpbl9sb2NrX2luaXQoJnR4LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdHgtPnR4X2xpc3QpOwogfQogRVhQT1JUX1NZTUJPTChkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCmluZGV4IGUxOTBkOGIuLmEyN2MwZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYworKysgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKQEAgLTM4LDYgKzM4LDExIEBACiBNT0RVTEVfUEFSTV9ERVNDKG1heF9jaGFubmVscywKIAkJIk1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHVzZSAoZGVmYXVsdDogYWxsKSIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IHhvcl9zb3VyY2VzID0gMzsKK21vZHVsZV9wYXJhbSh4b3Jfc291cmNlcywgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHhvcl9zb3VyY2VzLAorCQkiTnVtYmVyIG9mIHhvciBzb3VyY2UgYnVmZmVycyAoZGVmYXVsdDogMykiKTsKKwogLyoKICAqIEluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBBbGwgYnl0ZXMgaW4gdGhlIHNvdXJjZSBidWZmZXIgaGFzIGJpdCA3CiAgKiBzZXQsIGFsbCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGhhcyBiaXQgNyBjbGVhcmVkLgpAQCAtNTksOCArNjQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CiAJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKLQl1OAkJCSpzcmNidWY7Ci0JdTgJCQkqZHN0YnVmOworCXU4CQkJKipzcmNzOworCXU4CQkJKipkc3RzOworCWVudW0gZG1hX3RyYW5zYWN0aW9uX3R5cGUgdHlwZTsKIH07CiAKIHN0cnVjdCBkbWF0ZXN0X2NoYW4gewpAQCAtOTgsMzAgKzEwNCwzNyBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyB2b2lkIGRtYXRlc3RfaW5pdF9zcmNidWYodTggKmJ1ZiwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG1hdGVzdF9pbml0X3NyY3ModTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdTggKmJ1ZjsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX1NSQyB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7Ci0JZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFkKLQkJCXwgKH5pICYgUEFUVEVSTl9DT1VOVF9NQVNLKTs7Ci0JZm9yICggOyBpIDwgdGVzdF9idWZfc2l6ZTsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX1NSQyB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJZm9yICg7IChidWYgPSAqYnVmcyk7IGJ1ZnMrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RhcnQ7IGkrKykKKwkJCWJ1ZltpXSA9IFBBVFRFUk5fU1JDIHwgKH5pICYgUEFUVEVSTl9DT1VOVF9NQVNLKTsKKwkJZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKKwkJCWJ1ZltpXSA9IFBBVFRFUk5fU1JDIHwgUEFUVEVSTl9DT1BZCisJCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOzsKKwkJZm9yICggOyBpIDwgdGVzdF9idWZfc2l6ZTsgaSsrKQorCQkJYnVmW2ldID0gUEFUVEVSTl9TUkMgfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCQlidWYrKzsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGRtYXRlc3RfaW5pdF9kc3RidWYodTggKmJ1ZiwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG1hdGVzdF9pbml0X2RzdHModTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdTggKmJ1ZjsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7Ci0JZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9EU1QgfCBQQVRURVJOX09WRVJXUklURQotCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOwotCWZvciAoIDsgaSA8IHRlc3RfYnVmX3NpemU7IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9EU1QgfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCWZvciAoOyAoYnVmID0gKmJ1ZnMpOyBidWZzKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHN0YXJ0OyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJCWZvciAoIDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8IFBBVFRFUk5fT1ZFUldSSVRFCisJCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCQlmb3IgKCA7IGkgPCB0ZXN0X2J1Zl9zaXplOyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBkbWF0ZXN0X21pc21hdGNoKHU4IGFjdHVhbCwgdTggcGF0dGVybiwgdW5zaWduZWQgaW50IGluZGV4LApAQCAtMTUwLDIzICsxNjMsMzAgQEAKIAkJCQl0aHJlYWRfbmFtZSwgaW5kZXgsIGV4cGVjdGVkLCBhY3R1YWwpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRtYXRlc3RfdmVyaWZ5KHU4ICpidWYsIHVuc2lnbmVkIGludCBzdGFydCwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZG1hdGVzdF92ZXJpZnkodTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsCiAJCXVuc2lnbmVkIGludCBlbmQsIHVuc2lnbmVkIGludCBjb3VudGVyLCB1OCBwYXR0ZXJuLAogCQlib29sIGlzX3NyY2J1ZikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgZXJyb3JfY291bnQgPSAwOwogCXU4IGFjdHVhbDsKKwl1OCBleHBlY3RlZDsKKwl1OCAqYnVmOworCXVuc2lnbmVkIGludCBjb3VudGVyX29yaWcgPSBjb3VudGVyOwogCi0JZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotCQlhY3R1YWwgPSBidWZbaV07Ci0JCWlmIChhY3R1YWwgIT0gKHBhdHRlcm4gfCAofmNvdW50ZXIgJiBQQVRURVJOX0NPVU5UX01BU0spKSkgewotCQkJaWYgKGVycm9yX2NvdW50IDwgMzIpCi0JCQkJZG1hdGVzdF9taXNtYXRjaChhY3R1YWwsIHBhdHRlcm4sIGksIGNvdW50ZXIsCi0JCQkJCQlpc19zcmNidWYpOwotCQkJZXJyb3JfY291bnQrKzsKKwlmb3IgKDsgKGJ1ZiA9ICpidWZzKTsgYnVmcysrKSB7CisJCWNvdW50ZXIgPSBjb3VudGVyX29yaWc7CisJCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKwkJCWFjdHVhbCA9IGJ1ZltpXTsKKwkJCWV4cGVjdGVkID0gcGF0dGVybiB8ICh+Y291bnRlciAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJCQlpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSB7CisJCQkJaWYgKGVycm9yX2NvdW50IDwgMzIpCisJCQkJCWRtYXRlc3RfbWlzbWF0Y2goYWN0dWFsLCBwYXR0ZXJuLCBpLAorCQkJCQkJCSBjb3VudGVyLCBpc19zcmNidWYpOworCQkJCWVycm9yX2NvdW50Kys7CisJCQl9CisJCQljb3VudGVyKys7CiAJCX0KLQkJY291bnRlcisrOwogCX0KIAogCWlmIChlcnJvcl9jb3VudCA+IDMyKQpAQCAtMTc2LDEyICsxOTYsMTcgQEAKIAlyZXR1cm4gZXJyb3JfY291bnQ7CiB9CiAKK3N0YXRpYyB2b2lkIGRtYXRlc3RfY2FsbGJhY2sodm9pZCAqY29tcGxldGlvbikKK3sKKwljb21wbGV0ZShjb21wbGV0aW9uKTsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSB0ZXN0cyBETUEgdHJhbnNmZXJzIG9mIHZhcmlvdXMgbGVuZ3RocyBhbmQKLSAqIG9mZnNldHMgdW50aWwgaXQgaXMgdG9sZCB0byBleGl0IGJ5IGt0aHJlYWRfc3RvcCgpLiBUaGVyZSBtYXkgYmUKLSAqIG11bHRpcGxlIHRocmVhZHMgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGluIHBhcmFsbGVsIGZvciBhIHNpbmdsZQotICogY2hhbm5lbCwgYW5kIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBjaGFubmVscyBiZWluZyB0ZXN0ZWQgaW4KLSAqIHBhcmFsbGVsLgorICogb2Zmc2V0cyBmb3IgYSBnaXZlbiBvcGVyYXRpb24gdHlwZSB1bnRpbCBpdCBpcyB0b2xkIHRvIGV4aXQgYnkKKyAqIGt0aHJlYWRfc3RvcCgpLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgdGhyZWFkcyBydW5uaW5nIHRoaXMgZnVuY3Rpb24KKyAqIGluIHBhcmFsbGVsIGZvciBhIHNpbmdsZSBjaGFubmVsLCBhbmQgdGhlcmUgbWF5IGJlIG11bHRpcGxlIGNoYW5uZWxzCisgKiBiZWluZyB0ZXN0ZWQgaW4gcGFyYWxsZWwuCiAgKgogICogQmVmb3JlIGVhY2ggdGVzdCwgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVmZmVyIGlzIGluaXRpYWxpemVkCiAgKiB3aXRoIGEga25vd24gcGF0dGVybi4gVGhpcyBwYXR0ZXJuIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24KQEAgLTIwMSwyNSArMjI2LDU3IEBACiAJdW5zaWduZWQgaW50CQl0b3RhbF90ZXN0cyA9IDA7CiAJZG1hX2Nvb2tpZV90CQljb29raWU7CiAJZW51bSBkbWFfc3RhdHVzCQlzdGF0dXM7CisJZW51bSBkbWFfY3RybF9mbGFncyAJZmxhZ3M7CiAJaW50CQkJcmV0OworCWludAkJCXNyY19jbnQ7CisJaW50CQkJZHN0X2NudDsKKwlpbnQJCQlpOwogCiAJdGhyZWFkX25hbWUgPSBjdXJyZW50LT5jb21tOwogCiAJcmV0ID0gLUVOT01FTTsKLQl0aHJlYWQtPnNyY2J1ZiA9IGttYWxsb2ModGVzdF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0aHJlYWQtPnNyY2J1ZikKLQkJZ290byBlcnJfc3JjYnVmOwotCXRocmVhZC0+ZHN0YnVmID0ga21hbGxvYyh0ZXN0X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRocmVhZC0+ZHN0YnVmKQotCQlnb3RvIGVycl9kc3RidWY7CiAKIAlzbXBfcm1iKCk7CiAJY2hhbiA9IHRocmVhZC0+Y2hhbjsKKwlpZiAodGhyZWFkLT50eXBlID09IERNQV9NRU1DUFkpCisJCXNyY19jbnQgPSBkc3RfY250ID0gMTsKKwllbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX1hPUikgeworCQlzcmNfY250ID0geG9yX3NvdXJjZXMgfCAxOyAvKiBmb3JjZSBvZGQgdG8gZW5zdXJlIGRzdCA9IHNyYyAqLworCQlkc3RfY250ID0gMTsKKwl9IGVsc2UKKwkJZ290byBlcnJfc3JjczsKKworCXRocmVhZC0+c3JjcyA9IGtjYWxsb2Moc3JjX2NudCsxLCBzaXplb2YodTggKiksIEdGUF9LRVJORUwpOworCWlmICghdGhyZWFkLT5zcmNzKQorCQlnb3RvIGVycl9zcmNzOworCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspIHsKKwkJdGhyZWFkLT5zcmNzW2ldID0ga21hbGxvYyh0ZXN0X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0aHJlYWQtPnNyY3NbaV0pCisJCQlnb3RvIGVycl9zcmNidWY7CisJfQorCXRocmVhZC0+c3Jjc1tpXSA9IE5VTEw7CisKKwl0aHJlYWQtPmRzdHMgPSBrY2FsbG9jKGRzdF9jbnQrMSwgc2l6ZW9mKHU4ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRocmVhZC0+ZHN0cykKKwkJZ290byBlcnJfZHN0czsKKwlmb3IgKGkgPSAwOyBpIDwgZHN0X2NudDsgaSsrKSB7CisJCXRocmVhZC0+ZHN0c1tpXSA9IGttYWxsb2ModGVzdF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGhyZWFkLT5kc3RzW2ldKQorCQkJZ290byBlcnJfZHN0YnVmOworCX0KKwl0aHJlYWQtPmRzdHNbaV0gPSBOVUxMOworCisJc2V0X3VzZXJfbmljZShjdXJyZW50LCAxMCk7CisKKwlmbGFncyA9IERNQV9DVFJMX0FDSyB8IERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVAgfCBETUFfUFJFUF9JTlRFUlJVUFQ7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2aWNlOwotCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OwotCQlkbWFfYWRkcl90IGRtYV9zcmMsIGRtYV9kZXN0OworCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKKwkJZG1hX2FkZHJfdCBkbWFfc3Jjc1tzcmNfY250XTsKKwkJZG1hX2FkZHJfdCBkbWFfZHN0c1tkc3RfY250XTsKKwkJc3RydWN0IGNvbXBsZXRpb24gY21wOworCQl1bnNpZ25lZCBsb25nIHRtbyA9IG1zZWNzX3RvX2ppZmZpZXMoMzAwMCk7CiAKIAkJdG90YWxfdGVzdHMrKzsKIApAQCAtMjI3LDIyICsyODQsNDEgQEAKIAkJc3JjX29mZiA9IGRtYXRlc3RfcmFuZG9tKCkgJSAodGVzdF9idWZfc2l6ZSAtIGxlbiArIDEpOwogCQlkc3Rfb2ZmID0gZG1hdGVzdF9yYW5kb20oKSAlICh0ZXN0X2J1Zl9zaXplIC0gbGVuICsgMSk7CiAKLQkJZG1hdGVzdF9pbml0X3NyY2J1Zih0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiwgbGVuKTsKLQkJZG1hdGVzdF9pbml0X2RzdGJ1Zih0aHJlYWQtPmRzdGJ1ZiwgZHN0X29mZiwgbGVuKTsKKwkJZG1hdGVzdF9pbml0X3NyY3ModGhyZWFkLT5zcmNzLCBzcmNfb2ZmLCBsZW4pOworCQlkbWF0ZXN0X2luaXRfZHN0cyh0aHJlYWQtPmRzdHMsIGRzdF9vZmYsIGxlbik7CiAKLQkJZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LCB0aHJlYWQtPnNyY2J1ZiArIHNyY19vZmYsCi0JCQkJbGVuLCBETUFfVE9fREVWSUNFKTsKKwkJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgeworCQkJdTggKmJ1ZiA9IHRocmVhZC0+c3Jjc1tpXSArIHNyY19vZmY7CisKKwkJCWRtYV9zcmNzW2ldID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIGJ1ZiwgbGVuLAorCQkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwkJfQogCQkvKiBtYXAgd2l0aCBETUFfQklESVJFQ1RJT05BTCB0byBmb3JjZSB3cml0ZWJhY2svaW52YWxpZGF0ZSAqLwotCQlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LCB0aHJlYWQtPmRzdGJ1ZiwKLQkJCQl0ZXN0X2J1Zl9zaXplLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWZvciAoaSA9IDA7IGkgPCBkc3RfY250OyBpKyspIHsKKwkJCWRtYV9kc3RzW2ldID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIHRocmVhZC0+ZHN0c1tpXSwKKwkJCQkJCSAgICAgdGVzdF9idWZfc2l6ZSwKKwkJCQkJCSAgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCQl9CiAKLQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QgKyBkc3Rfb2ZmLAotCQkJCWRtYV9zcmMsIGxlbiwKLQkJCQlETUFfQ1RSTF9BQ0sgfCBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQKTsKKwkJaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfTUVNQ1BZKQorCQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hhbiwKKwkJCQkJCQkgZG1hX2RzdHNbMF0gKyBkc3Rfb2ZmLAorCQkJCQkJCSBkbWFfc3Jjc1swXSwgbGVuLAorCQkJCQkJCSBmbGFncyk7CisJCWVsc2UgaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfWE9SKQorCQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV94b3IoY2hhbiwKKwkJCQkJCSAgICAgIGRtYV9kc3RzWzBdICsgZHN0X29mZiwKKwkJCQkJCSAgICAgIGRtYV9zcmNzLCB4b3Jfc291cmNlcywKKwkJCQkJCSAgICAgIGxlbiwgZmxhZ3MpOworCiAJCWlmICghdHgpIHsKLQkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9zcmMsIGxlbiwgRE1BX1RPX0RFVklDRSk7Ci0JCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfZGVzdCwKLQkJCQkJdGVzdF9idWZfc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOworCQkJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfc3Jjc1tpXSwgbGVuLAorCQkJCQkJIERNQV9UT19ERVZJQ0UpOworCQkJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQ7IGkrKykKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfZHN0c1tpXSwKKwkJCQkJCSB0ZXN0X2J1Zl9zaXplLAorCQkJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKIAkJCXByX3dhcm5pbmcoIiVzOiAjJXU6IHByZXAgZXJyb3Igd2l0aCBzcmNfb2ZmPTB4JXggIgogCQkJCQkiZHN0X29mZj0weCV4IGxlbj0weCV4XG4iLAogCQkJCQl0aHJlYWRfbmFtZSwgdG90YWxfdGVzdHMgLSAxLApAQCAtMjUxLDcgKzMyNywxMCBAQAogCQkJZmFpbGVkX3Rlc3RzKys7CiAJCQljb250aW51ZTsKIAkJfQotCQl0eC0+Y2FsbGJhY2sgPSBOVUxMOworCisJCWluaXRfY29tcGxldGlvbigmY21wKTsKKwkJdHgtPmNhbGxiYWNrID0gZG1hdGVzdF9jYWxsYmFjazsKKwkJdHgtPmNhbGxiYWNrX3BhcmFtID0gJmNtcDsKIAkJY29va2llID0gdHgtPnR4X3N1Ym1pdCh0eCk7CiAKIAkJaWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSkgewpAQCAtMjYzLDQ0ICszNDIsNTAgQEAKIAkJCWZhaWxlZF90ZXN0cysrOwogCQkJY29udGludWU7CiAJCX0KLQkJZG1hX2FzeW5jX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhjaGFuKTsKIAotCQlkbyB7Ci0JCQltc2xlZXAoMSk7Ci0JCQlzdGF0dXMgPSBkbWFfYXN5bmNfbWVtY3B5X2NvbXBsZXRlKAotCQkJCQljaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpOwotCQl9IHdoaWxlIChzdGF0dXMgPT0gRE1BX0lOX1BST0dSRVNTKTsKKwkJdG1vID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbXAsIHRtbyk7CisJCXN0YXR1cyA9IGRtYV9hc3luY19pc190eF9jb21wbGV0ZShjaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpOwogCi0JCWlmIChzdGF0dXMgPT0gRE1BX0VSUk9SKSB7Ci0JCQlwcl93YXJuaW5nKCIlczogIyV1OiBlcnJvciBkdXJpbmcgY29weVxuIiwKLQkJCQkJdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSk7CisJCWlmICh0bW8gPT0gMCkgeworCQkJcHJfd2FybmluZygiJXM6ICMldTogdGVzdCB0aW1lZCBvdXRcbiIsCisJCQkJICAgdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSk7CisJCQlmYWlsZWRfdGVzdHMrKzsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHN0YXR1cyAhPSBETUFfU1VDQ0VTUykgeworCQkJcHJfd2FybmluZygiJXM6ICMldTogZ290IGNvbXBsZXRpb24gY2FsbGJhY2ssIgorCQkJCSAgICIgYnV0IHN0YXR1cyBpcyBcJyVzXCdcbiIsCisJCQkJICAgdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSwKKwkJCQkgICBzdGF0dXMgPT0gRE1BX0VSUk9SID8gImVycm9yIiA6ICJpbiBwcm9ncmVzcyIpOwogCQkJZmFpbGVkX3Rlc3RzKys7CiAJCQljb250aW51ZTsKIAkJfQorCiAJCS8qIFVubWFwIGJ5IG15c2VsZiAoc2VlIERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVAgYWJvdmUpICovCi0JCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9kZXN0LAotCQkJCXRlc3RfYnVmX3NpemUsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQ7IGkrKykKKwkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9kc3RzW2ldLCB0ZXN0X2J1Zl9zaXplLAorCQkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJCWVycm9yX2NvdW50ID0gMDsKIAogCQlwcl9kZWJ1ZygiJXM6IHZlcmlmeWluZyBzb3VyY2UgYnVmZmVyLi4uXG4iLCB0aHJlYWRfbmFtZSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+c3JjYnVmLCAwLCBzcmNfb2ZmLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY3MsIDAsIHNyY19vZmYsCiAJCQkJMCwgUEFUVEVSTl9TUkMsIHRydWUpOwotCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiwKKwkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5zcmNzLCBzcmNfb2ZmLAogCQkJCXNyY19vZmYgKyBsZW4sIHNyY19vZmYsCiAJCQkJUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFksIHRydWUpOwotCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiArIGxlbiwKKwkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5zcmNzLCBzcmNfb2ZmICsgbGVuLAogCQkJCXRlc3RfYnVmX3NpemUsIHNyY19vZmYgKyBsZW4sCiAJCQkJUEFUVEVSTl9TUkMsIHRydWUpOwogCiAJCXByX2RlYnVnKCIlczogdmVyaWZ5aW5nIGRlc3QgYnVmZmVyLi4uXG4iLAogCQkJCXRocmVhZC0+dGFzay0+Y29tbSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0YnVmLCAwLCBkc3Rfb2ZmLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdHMsIDAsIGRzdF9vZmYsCiAJCQkJMCwgUEFUVEVSTl9EU1QsIGZhbHNlKTsKLQkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5kc3RidWYsIGRzdF9vZmYsCisJCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0cywgZHN0X29mZiwKIAkJCQlkc3Rfb2ZmICsgbGVuLCBzcmNfb2ZmLAogCQkJCVBBVFRFUk5fU1JDIHwgUEFUVEVSTl9DT1BZLCBmYWxzZSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0YnVmLCBkc3Rfb2ZmICsgbGVuLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdHMsIGRzdF9vZmYgKyBsZW4sCiAJCQkJdGVzdF9idWZfc2l6ZSwgZHN0X29mZiArIGxlbiwKIAkJCQlQQVRURVJOX0RTVCwgZmFsc2UpOwogCkBAIC0zMTksMTAgKzQwNCwxNiBAQAogCX0KIAogCXJldCA9IDA7Ci0Ja2ZyZWUodGhyZWFkLT5kc3RidWYpOworCWZvciAoaSA9IDA7IHRocmVhZC0+ZHN0c1tpXTsgaSsrKQorCQlrZnJlZSh0aHJlYWQtPmRzdHNbaV0pOwogZXJyX2RzdGJ1ZjoKLQlrZnJlZSh0aHJlYWQtPnNyY2J1Zik7CisJa2ZyZWUodGhyZWFkLT5kc3RzKTsKK2Vycl9kc3RzOgorCWZvciAoaSA9IDA7IHRocmVhZC0+c3Jjc1tpXTsgaSsrKQorCQlrZnJlZSh0aHJlYWQtPnNyY3NbaV0pOwogZXJyX3NyY2J1ZjoKKwlrZnJlZSh0aHJlYWQtPnNyY3MpOworZXJyX3NyY3M6CiAJcHJfbm90aWNlKCIlczogdGVybWluYXRpbmcgYWZ0ZXIgJXUgdGVzdHMsICV1IGZhaWx1cmVzIChzdGF0dXMgJWQpXG4iLAogCQkJdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzLCBmYWlsZWRfdGVzdHMsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTM0NCwxMSArNDM1LDU0IEBACiAJa2ZyZWUoZHRjKTsKIH0KIAorc3RhdGljIGludCBkbWF0ZXN0X2FkZF90aHJlYWRzKHN0cnVjdCBkbWF0ZXN0X2NoYW4gKmR0YywgZW51bSBkbWFfdHJhbnNhY3Rpb25fdHlwZSB0eXBlKQoreworCXN0cnVjdCBkbWF0ZXN0X3RocmVhZCAqdGhyZWFkOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGR0Yy0+Y2hhbjsKKwljaGFyICpvcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICh0eXBlID09IERNQV9NRU1DUFkpCisJCW9wID0gImNvcHkiOworCWVsc2UgaWYgKHR5cGUgPT0gRE1BX1hPUikKKwkJb3AgPSAieG9yIjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IHRocmVhZHNfcGVyX2NoYW47IGkrKykgeworCQl0aHJlYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF90aHJlYWQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0aHJlYWQpIHsKKwkJCXByX3dhcm5pbmcoImRtYXRlc3Q6IE5vIG1lbW9yeSBmb3IgJXMtJXMldVxuIiwKKwkJCQkgICBkbWFfY2hhbl9uYW1lKGNoYW4pLCBvcCwgaSk7CisKKwkJCWJyZWFrOworCQl9CisJCXRocmVhZC0+Y2hhbiA9IGR0Yy0+Y2hhbjsKKwkJdGhyZWFkLT50eXBlID0gdHlwZTsKKwkJc21wX3dtYigpOworCQl0aHJlYWQtPnRhc2sgPSBrdGhyZWFkX3J1bihkbWF0ZXN0X2Z1bmMsIHRocmVhZCwgIiVzLSVzJXUiLAorCQkJCWRtYV9jaGFuX25hbWUoY2hhbiksIG9wLCBpKTsKKwkJaWYgKElTX0VSUih0aHJlYWQtPnRhc2spKSB7CisJCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBGYWlsZWQgdG8gcnVuIHRocmVhZCAlcy0lcyV1XG4iLAorCQkJCQlkbWFfY2hhbl9uYW1lKGNoYW4pLCBvcCwgaSk7CisJCQlrZnJlZSh0aHJlYWQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzcmNidWYgYW5kIGRzdGJ1ZiBhcmUgYWxsb2NhdGVkIGJ5IHRoZSB0aHJlYWQgaXRzZWxmICovCisKKwkJbGlzdF9hZGRfdGFpbCgmdGhyZWFkLT5ub2RlLCAmZHRjLT50aHJlYWRzKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKwogc3RhdGljIGludCBkbWF0ZXN0X2FkZF9jaGFubmVsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3QgZG1hdGVzdF9jaGFuCSpkdGM7Ci0Jc3RydWN0IGRtYXRlc3RfdGhyZWFkCSp0aHJlYWQ7Ci0JdW5zaWduZWQgaW50CQlpOworCXN0cnVjdCBkbWFfZGV2aWNlCSpkbWFfZGV2ID0gY2hhbi0+ZGV2aWNlOworCXVuc2lnbmVkIGludAkJdGhyZWFkX2NvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQJCWNudDsKIAogCWR0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWF0ZXN0X2NoYW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR0YykgewpAQCAtMzU5LDMwICs0OTMsMTcgQEAKIAlkdGMtPmNoYW4gPSBjaGFuOwogCUlOSVRfTElTVF9IRUFEKCZkdGMtPnRocmVhZHMpOwogCi0JZm9yIChpID0gMDsgaSA8IHRocmVhZHNfcGVyX2NoYW47IGkrKykgewotCQl0aHJlYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF90aHJlYWQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aHJlYWQpIHsKLQkJCXByX3dhcm5pbmcoImRtYXRlc3Q6IE5vIG1lbW9yeSBmb3IgJXMtdGVzdCV1XG4iLAotCQkJCSAgIGRtYV9jaGFuX25hbWUoY2hhbiksIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdGhyZWFkLT5jaGFuID0gZHRjLT5jaGFuOwotCQlzbXBfd21iKCk7Ci0JCXRocmVhZC0+dGFzayA9IGt0aHJlYWRfcnVuKGRtYXRlc3RfZnVuYywgdGhyZWFkLCAiJXMtdGVzdCV1IiwKLQkJCQlkbWFfY2hhbl9uYW1lKGNoYW4pLCBpKTsKLQkJaWYgKElTX0VSUih0aHJlYWQtPnRhc2spKSB7Ci0JCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBGYWlsZWQgdG8gcnVuIHRocmVhZCAlcy10ZXN0JXVcbiIsCi0JCQkJCWRtYV9jaGFuX25hbWUoY2hhbiksIGkpOwotCQkJa2ZyZWUodGhyZWFkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogc3JjYnVmIGFuZCBkc3RidWYgYXJlIGFsbG9jYXRlZCBieSB0aGUgdGhyZWFkIGl0c2VsZiAqLwotCi0JCWxpc3RfYWRkX3RhaWwoJnRocmVhZC0+bm9kZSwgJmR0Yy0+dGhyZWFkcyk7CisJaWYgKGRtYV9oYXNfY2FwKERNQV9NRU1DUFksIGRtYV9kZXYtPmNhcF9tYXNrKSkgeworCQljbnQgPSBkbWF0ZXN0X2FkZF90aHJlYWRzKGR0YywgRE1BX01FTUNQWSk7CisJCXRocmVhZF9jb3VudCArPSBjbnQgPiAwID86IDA7CisJfQorCWlmIChkbWFfaGFzX2NhcChETUFfWE9SLCBkbWFfZGV2LT5jYXBfbWFzaykpIHsKKwkJY250ID0gZG1hdGVzdF9hZGRfdGhyZWFkcyhkdGMsIERNQV9YT1IpOworCQl0aHJlYWRfY291bnQgKz0gY250ID4gMCA/OiAwOwogCX0KIAotCXByX2luZm8oImRtYXRlc3Q6IFN0YXJ0ZWQgJXUgdGhyZWFkcyB1c2luZyAlc1xuIiwgaSwgZG1hX2NoYW5fbmFtZShjaGFuKSk7CisJcHJfaW5mbygiZG1hdGVzdDogU3RhcnRlZCAldSB0aHJlYWRzIHVzaW5nICVzXG4iLAorCQl0aHJlYWRfY291bnQsIGRtYV9jaGFuX25hbWUoY2hhbikpOwogCiAJbGlzdF9hZGRfdGFpbCgmZHRjLT5ub2RlLCAmZG1hdGVzdF9jaGFubmVscyk7CiAJbnJfY2hhbm5lbHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCAyMGFkM2QyLi45OGM5YTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0zNjMsNiArMzYzLDgyIEBACiAJZHdjX2Rlc2NyaXB0b3JfY29tcGxldGUoZHdjLCBiYWRfZGVzYyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDeWNsaWMgRE1BIEFQSSBleHRlbnNpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2lubGluZSBkbWFfYWRkcl90IGR3X2RtYV9nZXRfc3JjX2FkZHIoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBkd19kbWFfY2hhbiAqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJcmV0dXJuIGNoYW5uZWxfcmVhZGwoZHdjLCBTQVIpOworfQorRVhQT1JUX1NZTUJPTChkd19kbWFfZ2V0X3NyY19hZGRyKTsKKworaW5saW5lIGRtYV9hZGRyX3QgZHdfZG1hX2dldF9kc3RfYWRkcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuICpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlyZXR1cm4gY2hhbm5lbF9yZWFkbChkd2MsIERBUik7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9nZXRfZHN0X2FkZHIpOworCisvKiBjYWxsZWQgd2l0aCBkd2MtPmxvY2sgaGVsZCBhbmQgYWxsIERNQUMgaW50ZXJydXB0cyBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgZHdjX2hhbmRsZV9jeWNsaWMoc3RydWN0IGR3X2RtYSAqZHcsIHN0cnVjdCBkd19kbWFfY2hhbiAqZHdjLAorCQl1MzIgc3RhdHVzX2Jsb2NrLCB1MzIgc3RhdHVzX2VyciwgdTMyIHN0YXR1c194ZmVyKQoreworCWlmIChzdGF0dXNfYmxvY2sgJiBkd2MtPm1hc2spIHsKKwkJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpwYXJhbSk7CisJCXZvaWQgKmNhbGxiYWNrX3BhcmFtOworCisJCWRldl92ZGJnKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAibmV3IGN5Y2xpYyBwZXJpb2QgbGxwIDB4JTA4eFxuIiwKKwkJCQljaGFubmVsX3JlYWRsKGR3YywgTExQKSk7CisJCWRtYV93cml0ZWwoZHcsIENMRUFSLkJMT0NLLCBkd2MtPm1hc2spOworCisJCWNhbGxiYWNrID0gZHdjLT5jZGVzYy0+cGVyaW9kX2NhbGxiYWNrOworCQljYWxsYmFja19wYXJhbSA9IGR3Yy0+Y2Rlc2MtPnBlcmlvZF9jYWxsYmFja19wYXJhbTsKKwkJaWYgKGNhbGxiYWNrKSB7CisJCQlzcGluX3VubG9jaygmZHdjLT5sb2NrKTsKKwkJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKwkJCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKKwkJfQorCX0KKworCS8qCisJICogRXJyb3IgYW5kIHRyYW5zZmVyIGNvbXBsZXRlIGFyZSBoaWdobHkgdW5saWtlbHksIGFuZCB3aWxsIG1vc3QKKwkgKiBsaWtlbHkgYmUgZHVlIHRvIGEgY29uZmlndXJhdGlvbiBlcnJvciBieSB0aGUgdXNlci4KKwkgKi8KKwlpZiAodW5saWtlbHkoc3RhdHVzX2VyciAmIGR3Yy0+bWFzaykgfHwKKwkJCXVubGlrZWx5KHN0YXR1c194ZmVyICYgZHdjLT5tYXNrKSkgeworCQlpbnQgaTsKKworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAiY3ljbGljIERNQSB1bmV4cGVjdGVkICVzICIKKwkJCQkiaW50ZXJydXB0LCBzdG9wcGluZyBETUEgdHJhbnNmZXJcbiIsCisJCQkJc3RhdHVzX3hmZXIgPyAieGZlciIgOiAiZXJyb3IiKTsKKwkJZGV2X2VycihjaGFuMmRldigmZHdjLT5jaGFuKSwKKwkJCSIgIFNBUjogMHgleCBEQVI6IDB4JXggTExQOiAweCV4IENUTDogMHgleDolMDh4XG4iLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIFNBUiksCisJCQljaGFubmVsX3JlYWRsKGR3YywgREFSKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBMTFApLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIENUTF9ISSksCisJCQljaGFubmVsX3JlYWRsKGR3YywgQ1RMX0xPKSk7CisKKwkJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCQl3aGlsZSAoZG1hX3JlYWRsKGR3LCBDSF9FTikgJiBkd2MtPm1hc2spCisJCQljcHVfcmVsYXgoKTsKKworCQkvKiBtYWtlIHN1cmUgRE1BIGRvZXMgbm90IHJlc3RhcnQgYnkgbG9hZGluZyBhIG5ldyBsaXN0ICovCisJCWNoYW5uZWxfd3JpdGVsKGR3YywgTExQLCAwKTsKKwkJY2hhbm5lbF93cml0ZWwoZHdjLCBDVExfTE8sIDApOworCQljaGFubmVsX3dyaXRlbChkd2MsIENUTF9ISSwgMCk7CisKKwkJZG1hX3dyaXRlbChkdywgQ0xFQVIuQkxPQ0ssIGR3Yy0+bWFzayk7CisJCWRtYV93cml0ZWwoZHcsIENMRUFSLkVSUk9SLCBkd2MtPm1hc2spOworCQlkbWFfd3JpdGVsKGR3LCBDTEVBUi5YRkVSLCBkd2MtPm1hc2spOworCisJCWZvciAoaSA9IDA7IGkgPCBkd2MtPmNkZXNjLT5wZXJpb2RzOyBpKyspCisJCQlkd2NfZHVtcF9sbGkoZHdjLCAmZHdjLT5jZGVzYy0+ZGVzY1tpXS0+bGxpKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIHZvaWQgZHdfZG1hX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBkd19kbWEgKmR3ID0gKHN0cnVjdCBkd19kbWEgKilkYXRhOwpAQCAtMzgyLDcgKzQ1OCwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBkdy0+ZG1hLmNoYW5jbnQ7IGkrKykgewogCQlkd2MgPSAmZHctPmNoYW5baV07CiAJCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKLQkJaWYgKHN0YXR1c19lcnIgJiAoMSA8PCBpKSkKKwkJaWYgKHRlc3RfYml0KERXX0RNQV9JU19DWUNMSUMsICZkd2MtPmZsYWdzKSkKKwkJCWR3Y19oYW5kbGVfY3ljbGljKGR3LCBkd2MsIHN0YXR1c19ibG9jaywgc3RhdHVzX2VyciwKKwkJCQkJc3RhdHVzX3hmZXIpOworCQllbHNlIGlmIChzdGF0dXNfZXJyICYgKDEgPDwgaSkpCiAJCQlkd2NfaGFuZGxlX2Vycm9yKGR3LCBkd2MpOwogCQllbHNlIGlmICgoc3RhdHVzX2Jsb2NrIHwgc3RhdHVzX3hmZXIpICYgKDEgPDwgaSkpCiAJCQlkd2Nfc2Nhbl9kZXNjcmlwdG9ycyhkdywgZHdjKTsKQEAgLTgyNiw3ICs5MDUsNiBAQAogCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNjLT50eGQsIGNoYW4pOwogCQlkZXNjLT50eGQudHhfc3VibWl0ID0gZHdjX3R4X3N1Ym1pdDsKIAkJZGVzYy0+dHhkLmZsYWdzID0gRE1BX0NUUkxfQUNLOwotCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+dHhkLnR4X2xpc3QpOwogCQlkZXNjLT50eGQucGh5cyA9IGRtYV9tYXBfc2luZ2xlKGNoYW4ycGFyZW50KGNoYW4pLCAmZGVzYy0+bGxpLAogCQkJCXNpemVvZihkZXNjLT5sbGkpLCBETUFfVE9fREVWSUNFKTsKIAkJZHdjX2Rlc2NfcHV0KGR3YywgZGVzYyk7CkBAIC04ODQsNiArOTYyLDI1NyBAQAogCWRldl92ZGJnKGNoYW4yZGV2KGNoYW4pLCAiZnJlZV9jaGFuX3Jlc291cmNlcyBkb25lXG4iKTsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEN5Y2xpYyBETUEgQVBJIGV4dGVuc2lvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBkd19kbWFfY3ljbGljX3N0YXJ0IC0gc3RhcnQgdGhlIGN5Y2xpYyBETUEgdHJhbnNmZXIKKyAqIEBjaGFuOiB0aGUgRE1BIGNoYW5uZWwgdG8gc3RhcnQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNvZnQgaW50ZXJydXB0cyBkaXNhYmxlZC4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IKKyAqIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgZHdfZG1hX2N5Y2xpY19zdGFydChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCSpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZHdfZG1hCQkqZHcgPSB0b19kd19kbWEoZHdjLT5jaGFuLmRldmljZSk7CisKKwlpZiAoIXRlc3RfYml0KERXX0RNQV9JU19DWUNMSUMsICZkd2MtPmZsYWdzKSkgeworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAibWlzc2luZyBwcmVwIGZvciBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3Bpbl9sb2NrKCZkd2MtPmxvY2spOworCisJLyogYXNzZXJ0IGNoYW5uZWwgaXMgaWRsZSAqLworCWlmIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykgeworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLAorCQkJIkJVRzogQXR0ZW1wdGVkIHRvIHN0YXJ0IG5vbi1pZGxlIGNoYW5uZWxcbiIpOworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLAorCQkJIiAgU0FSOiAweCV4IERBUjogMHgleCBMTFA6IDB4JXggQ1RMOiAweCV4OiUwOHhcbiIsCisJCQljaGFubmVsX3JlYWRsKGR3YywgU0FSKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBEQVIpLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIExMUCksCisJCQljaGFubmVsX3JlYWRsKGR3YywgQ1RMX0hJKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBDVExfTE8pKTsKKwkJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZG1hX3dyaXRlbChkdywgQ0xFQVIuQkxPQ0ssIGR3Yy0+bWFzayk7CisJZG1hX3dyaXRlbChkdywgQ0xFQVIuRVJST1IsIGR3Yy0+bWFzayk7CisJZG1hX3dyaXRlbChkdywgQ0xFQVIuWEZFUiwgZHdjLT5tYXNrKTsKKworCS8qIHNldHVwIERNQUMgY2hhbm5lbCByZWdpc3RlcnMgKi8KKwljaGFubmVsX3dyaXRlbChkd2MsIExMUCwgZHdjLT5jZGVzYy0+ZGVzY1swXS0+dHhkLnBoeXMpOworCWNoYW5uZWxfd3JpdGVsKGR3YywgQ1RMX0xPLCBEV0NfQ1RMTF9MTFBfRF9FTiB8IERXQ19DVExMX0xMUF9TX0VOKTsKKwljaGFubmVsX3dyaXRlbChkd2MsIENUTF9ISSwgMCk7CisKKwljaGFubmVsX3NldF9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCisJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHdfZG1hX2N5Y2xpY19zdGFydCk7CisKKy8qKgorICogZHdfZG1hX2N5Y2xpY19zdG9wIC0gc3RvcCB0aGUgY3ljbGljIERNQSB0cmFuc2ZlcgorICogQGNoYW46IHRoZSBETUEgY2hhbm5lbCB0byBzdG9wCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzb2Z0IGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3ZvaWQgZHdfZG1hX2N5Y2xpY19zdG9wKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZHdfZG1hX2NoYW4JKmR3YyA9IHRvX2R3X2RtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBkd19kbWEJCSpkdyA9IHRvX2R3X2RtYShkd2MtPmNoYW4uZGV2aWNlKTsKKworCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKKworCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBDSF9FTiwgZHdjLT5tYXNrKTsKKwl3aGlsZSAoZG1hX3JlYWRsKGR3LCBDSF9FTikgJiBkd2MtPm1hc2spCisJCWNwdV9yZWxheCgpOworCisJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9jeWNsaWNfc3RvcCk7CisKKy8qKgorICogZHdfZG1hX2N5Y2xpY19wcmVwIC0gcHJlcGFyZSB0aGUgY3ljbGljIERNQSB0cmFuc2ZlcgorICogQGNoYW46IHRoZSBETUEgY2hhbm5lbCB0byBwcmVwYXJlCisgKiBAYnVmX2FkZHI6IHBoeXNpY2FsIERNQSBhZGRyZXNzIHdoZXJlIHRoZSBidWZmZXIgc3RhcnRzCisgKiBAYnVmX2xlbjogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGZvciB0aGUgZW50aXJlIGJ1ZmZlcgorICogQHBlcmlvZF9sZW46IG51bWJlciBvZiBieXRlcyBmb3IgZWFjaCBwZXJpb2QKKyAqIEBkaXJlY3Rpb246IHRyYW5zZmVyIGRpcmVjdGlvbiwgdG8gb3IgZnJvbSBkZXZpY2UKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdHJ5aW5nIHRvIHN0YXJ0IHRoZSB0cmFuc2Zlci4gUmV0dXJucyBhIHZhbGlkIHN0cnVjdAorICogZHdfY3ljbGljX2Rlc2MgaWYgc3VjY2Vzc2Z1bCBvciBhbiBFUlJfUFRSKC1lcnJubykgaWYgbm90IHN1Y2Nlc3NmdWwuCisgKi8KK3N0cnVjdCBkd19jeWNsaWNfZGVzYyAqZHdfZG1hX2N5Y2xpY19wcmVwKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJZG1hX2FkZHJfdCBidWZfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sIHNpemVfdCBwZXJpb2RfbGVuLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCQkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqY2Rlc2M7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqcmV0dmFsID0gTlVMTDsKKwlzdHJ1Y3QgZHdfZGVzYwkJCSpkZXNjOworCXN0cnVjdCBkd19kZXNjCQkJKmxhc3QgPSBOVUxMOworCXN0cnVjdCBkd19kbWFfc2xhdmUJCSpkd3MgPSBjaGFuLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcJCQl3YXNfY3ljbGljOworCXVuc2lnbmVkIGludAkJCXJlZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQlwZXJpb2RzOworCXVuc2lnbmVkIGludAkJCWk7CisKKwlzcGluX2xvY2tfYmgoJmR3Yy0+bG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZkd2MtPnF1ZXVlKSB8fCAhbGlzdF9lbXB0eSgmZHdjLT5hY3RpdmVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisJCWRldl9kYmcoY2hhbjJkZXYoJmR3Yy0+Y2hhbiksCisJCQkJInF1ZXVlIGFuZC9vciBhY3RpdmUgbGlzdCBhcmUgbm90IGVtcHR5XG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwl3YXNfY3ljbGljID0gdGVzdF9hbmRfc2V0X2JpdChEV19ETUFfSVNfQ1lDTElDLCAmZHdjLT5mbGFncyk7CisJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisJaWYgKHdhc19jeWNsaWMpIHsKKwkJZGV2X2RiZyhjaGFuMmRldigmZHdjLT5jaGFuKSwKKwkJCQkiY2hhbm5lbCBhbHJlYWR5IHByZXBhcmVkIGZvciBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwlyZXR2YWwgPSBFUlJfUFRSKC1FSU5WQUwpOworCXJlZ193aWR0aCA9IGR3cy0+cmVnX3dpZHRoOworCXBlcmlvZHMgPSBidWZfbGVuIC8gcGVyaW9kX2xlbjsKKworCS8qIENoZWNrIGZvciB0b28gYmlnL3VuYWxpZ25lZCBwZXJpb2RzIGFuZCB1bmFsaWduZWQgRE1BIGJ1ZmZlci4gKi8KKwlpZiAocGVyaW9kX2xlbiA+IChEV0NfTUFYX0NPVU5UIDw8IHJlZ193aWR0aCkpCisJCWdvdG8gb3V0X2VycjsKKwlpZiAodW5saWtlbHkocGVyaW9kX2xlbiAmICgoMSA8PCByZWdfd2lkdGgpIC0gMSkpKQorCQlnb3RvIG91dF9lcnI7CisJaWYgKHVubGlrZWx5KGJ1Zl9hZGRyICYgKCgxIDw8IHJlZ193aWR0aCkgLSAxKSkpCisJCWdvdG8gb3V0X2VycjsKKwlpZiAodW5saWtlbHkoIShkaXJlY3Rpb24gJiAoRE1BX1RPX0RFVklDRSB8IERNQV9GUk9NX0RFVklDRSkpKSkKKwkJZ290byBvdXRfZXJyOworCisJcmV0dmFsID0gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmIChwZXJpb2RzID4gTlJfREVTQ1NfUEVSX0NIQU5ORUwpCisJCWdvdG8gb3V0X2VycjsKKworCWNkZXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGR3X2N5Y2xpY19kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZGVzYykKKwkJZ290byBvdXRfZXJyOworCisJY2Rlc2MtPmRlc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHdfZGVzYyAqKSAqIHBlcmlvZHMsIEdGUF9LRVJORUwpOworCWlmICghY2Rlc2MtPmRlc2MpCisJCWdvdG8gb3V0X2Vycl9hbGxvYzsKKworCWZvciAoaSA9IDA7IGkgPCBwZXJpb2RzOyBpKyspIHsKKwkJZGVzYyA9IGR3Y19kZXNjX2dldChkd2MpOworCQlpZiAoIWRlc2MpCisJCQlnb3RvIG91dF9lcnJfZGVzY19nZXQ7CisKKwkJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwkJY2FzZSBETUFfVE9fREVWSUNFOgorCQkJZGVzYy0+bGxpLmRhciA9IGR3cy0+dHhfcmVnOworCQkJZGVzYy0+bGxpLnNhciA9IGJ1Zl9hZGRyICsgKHBlcmlvZF9sZW4gKiBpKTsKKwkJCWRlc2MtPmxsaS5jdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTworCQkJCQl8IERXQ19DVExMX0RTVF9XSURUSChyZWdfd2lkdGgpCisJCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKKwkJCQkJfCBEV0NfQ1RMTF9EU1RfRklYCisJCQkJCXwgRFdDX0NUTExfU1JDX0lOQworCQkJCQl8IERXQ19DVExMX0ZDX00yUAorCQkJCQl8IERXQ19DVExMX0lOVF9FTik7CisJCQlicmVhazsKKwkJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCQlkZXNjLT5sbGkuZGFyID0gYnVmX2FkZHIgKyAocGVyaW9kX2xlbiAqIGkpOworCQkJZGVzYy0+bGxpLnNhciA9IGR3cy0+cnhfcmVnOworCQkJZGVzYy0+bGxpLmN0bGxvID0gKERXQ19ERUZBVUxUX0NUTExPCisJCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKKwkJCQkJfCBEV0NfQ1RMTF9EU1RfV0lEVEgocmVnX3dpZHRoKQorCQkJCQl8IERXQ19DVExMX0RTVF9JTkMKKwkJCQkJfCBEV0NfQ1RMTF9TUkNfRklYCisJCQkJCXwgRFdDX0NUTExfRkNfUDJNCisJCQkJCXwgRFdDX0NUTExfSU5UX0VOKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlkZXNjLT5sbGkuY3RsaGkgPSAocGVyaW9kX2xlbiA+PiByZWdfd2lkdGgpOworCQljZGVzYy0+ZGVzY1tpXSA9IGRlc2M7CisKKwkJaWYgKGxhc3QpIHsKKwkJCWxhc3QtPmxsaS5sbHAgPSBkZXNjLT50eGQucGh5czsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4ycGFyZW50KGNoYW4pLAorCQkJCQlsYXN0LT50eGQucGh5cywgc2l6ZW9mKGxhc3QtPmxsaSksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCQl9CisKKwkJbGFzdCA9IGRlc2M7CisJfQorCisJLyogbGV0cyBtYWtlIGEgY3ljbGljIGxpc3QgKi8KKwlsYXN0LT5sbGkubGxwID0gY2Rlc2MtPmRlc2NbMF0tPnR4ZC5waHlzOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4ycGFyZW50KGNoYW4pLCBsYXN0LT50eGQucGh5cywKKwkJCXNpemVvZihsYXN0LT5sbGkpLCBETUFfVE9fREVWSUNFKTsKKworCWRldl9kYmcoY2hhbjJkZXYoJmR3Yy0+Y2hhbiksICJjeWNsaWMgcHJlcGFyZWQgYnVmIDB4JTA4eCBsZW4gJXp1ICIKKwkJCSJwZXJpb2QgJXp1IHBlcmlvZHMgJWRcbiIsIGJ1Zl9hZGRyLCBidWZfbGVuLAorCQkJcGVyaW9kX2xlbiwgcGVyaW9kcyk7CisKKwljZGVzYy0+cGVyaW9kcyA9IHBlcmlvZHM7CisJZHdjLT5jZGVzYyA9IGNkZXNjOworCisJcmV0dXJuIGNkZXNjOworCitvdXRfZXJyX2Rlc2NfZ2V0OgorCXdoaWxlIChpLS0pCisJCWR3Y19kZXNjX3B1dChkd2MsIGNkZXNjLT5kZXNjW2ldKTsKK291dF9lcnJfYWxsb2M6CisJa2ZyZWUoY2Rlc2MpOworb3V0X2VycjoKKwljbGVhcl9iaXQoRFdfRE1BX0lTX0NZQ0xJQywgJmR3Yy0+ZmxhZ3MpOworCXJldHVybiAoc3RydWN0IGR3X2N5Y2xpY19kZXNjICopcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTChkd19kbWFfY3ljbGljX3ByZXApOworCisvKioKKyAqIGR3X2RtYV9jeWNsaWNfZnJlZSAtIGZyZWUgYSBwcmVwYXJlZCBjeWNsaWMgRE1BIHRyYW5zZmVyCisgKiBAY2hhbjogdGhlIERNQSBjaGFubmVsIHRvIGZyZWUKKyAqLwordm9pZCBkd19kbWFfY3ljbGljX2ZyZWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBkd19kbWFfY2hhbgkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGR3X2RtYQkJKmR3ID0gdG9fZHdfZG1hKGR3Yy0+Y2hhbi5kZXZpY2UpOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkqY2Rlc2MgPSBkd2MtPmNkZXNjOworCWludAkJCWk7CisKKwlkZXZfZGJnKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAiY3ljbGljIGZyZWVcbiIpOworCisJaWYgKCFjZGVzYykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2JoKCZkd2MtPmxvY2spOworCisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCXdoaWxlIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykKKwkJY3B1X3JlbGF4KCk7CisKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5CTE9DSywgZHdjLT5tYXNrKTsKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5FUlJPUiwgZHdjLT5tYXNrKTsKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5YRkVSLCBkd2MtPm1hc2spOworCisJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2Rlc2MtPnBlcmlvZHM7IGkrKykKKwkJZHdjX2Rlc2NfcHV0KGR3YywgY2Rlc2MtPmRlc2NbaV0pOworCisJa2ZyZWUoY2Rlc2MtPmRlc2MpOworCWtmcmVlKGNkZXNjKTsKKworCWNsZWFyX2JpdChEV19ETUFfSVNfQ1lDTElDLCAmZHdjLT5mbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9jeWNsaWNfZnJlZSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkIGR3X2RtYV9vZmYoc3RydWN0IGR3X2RtYSAqZHcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kd19kbWFjX3JlZ3MuaCBiL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCmluZGV4IGIyNTJiMjAuLjEzYTU4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCisrKyBiL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCkBAIC0xMjYsNiArMTI2LDEwIEBACiAKICNkZWZpbmUgRFdfUkVHTEVOCQkweDQwMAogCitlbnVtIGR3X2RtYWNfZmxhZ3MgeworCURXX0RNQV9JU19DWUNMSUMgPSAwLAorfTsKKwogc3RydWN0IGR3X2RtYV9jaGFuIHsKIAlzdHJ1Y3QgZG1hX2NoYW4JCWNoYW47CiAJdm9pZCBfX2lvbWVtCQkqY2hfcmVnczsKQEAgLTEzNCwxMCArMTM4LDEyIEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAogCS8qIHRoZXNlIG90aGVyIGVsZW1lbnRzIGFyZSBhbGwgcHJvdGVjdGVkIGJ5IGxvY2sgKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlkbWFfY29va2llX3QJCWNvbXBsZXRlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCSpjZGVzYzsKIAogCXVuc2lnbmVkIGludAkJZGVzY3NfYWxsb2NhdGVkOwogfTsKQEAgLTE1OCw3ICsxNjQsNiBAQAogCXJldHVybiBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGR3X2RtYV9jaGFuLCBjaGFuKTsKIH0KIAotCiBzdHJ1Y3QgZHdfZG1hIHsKIAlzdHJ1Y3QgZG1hX2RldmljZQlkbWE7CiAJdm9pZCBfX2lvbWVtCQkqcmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKaW5kZXggODZkNmRhNC4uZGE4YThlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKQEAgLTM1NCw3ICszNTQsNiBAQAogCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNjX3N3LT5hc3luY190eCwKIAkJCQkJCSZmc2xfY2hhbi0+Y29tbW9uKTsKIAkJZGVzY19zdy0+YXN5bmNfdHgudHhfc3VibWl0ID0gZnNsX2RtYV90eF9zdWJtaXQ7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZXNjX3N3LT5hc3luY190eC50eF9saXN0KTsKIAkJZGVzY19zdy0+YXN5bmNfdHgucGh5cyA9IHBkZXNjOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdF9kbWEuYyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKaW5kZXggNTkwNWNkMy4uZTRmYzMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdF9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCkBAIC02OTMsNyArNjkzLDYgQEAKIAkJZGVzY19zdy0+YXN5bmNfdHgudHhfc3VibWl0ID0gaW9hdDJfdHhfc3VibWl0OwogCQlicmVhazsKIAl9Ci0JSU5JVF9MSVNUX0hFQUQoJmRlc2Nfc3ctPmFzeW5jX3R4LnR4X2xpc3QpOwogCiAJZGVzY19zdy0+aHcgPSBkZXNjOwogCWRlc2Nfc3ctPmFzeW5jX3R4LnBoeXMgPSBwaHlzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYyBiL2RyaXZlcnMvZG1hL2lvcC1hZG1hLmMKaW5kZXggMTZhZGJlNi4uMmYwNTIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb3AtYWRtYS5jCkBAIC00OTgsNyArNDk4LDYgQEAKIAkJc2xvdC0+YXN5bmNfdHgudHhfc3VibWl0ID0gaW9wX2FkbWFfdHhfc3VibWl0OwogCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+Y2hhaW5fbm9kZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZzbG90LT5zbG90X25vZGUpOwotCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+YXN5bmNfdHgudHhfbGlzdCk7CiAJCWh3X2Rlc2MgPSAoY2hhciAqKSBpb3BfY2hhbi0+ZGV2aWNlLT5kbWFfZGVzY19wb29sOwogCQlzbG90LT5hc3luY190eC5waHlzID0KIAkJCShkbWFfYWRkcl90KSAmaHdfZGVzY1tpZHggKiBJT1BfQURNQV9TTE9UX1NJWkVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCmluZGV4IGRhNzgxZDEuLmUyMDJhNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKQEAgLTI4LDYgKzI4LDkgQEAKICNkZWZpbmUgRlNfVkZfSU5fVkFMSUQJMHgwMDAwMDAwMgogI2RlZmluZSBGU19FTkNfSU5fVkFMSUQJMHgwMDAwMDAwMQogCitzdGF0aWMgaW50IGlwdV9kaXNhYmxlX2NoYW5uZWwoc3RydWN0IGlkbWFjICppZG1hYywgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAorCQkJICAgICAgIGJvb2wgd2FpdF9mb3Jfc3RvcCk7CisKIC8qCiAgKiBUaGVyZSBjYW4gYmUgb25seSBvbmUsIHdlIGNvdWxkIGFsbG9jYXRlIGl0IGR5bmFtaWNhbGx5LCBidXQgdGhlbiB3ZSdkIGhhdmUKICAqIHRvIGFkZCBhbiBleHRyYSBwYXJhbWV0ZXIgdG8gc29tZSBmdW5jdGlvbnMsIGFuZCB1c2Ugc29tZXRoaW5nIGFzIHVnbHkgYXMKQEAgLTEwNyw3ICsxMTAsNyBAQAogCX0KIH0KIAotLyogRW5hYmxlIC8gZGlzYWJsZSBkaXJlY3Qgd3JpdGUgdG8gbWVtb3J5IGJ5IHRoZSBDYW1lcmEgU2Vuc29yIEludGVyZmFjZSAqLworLyogRW5hYmxlIGRpcmVjdCB3cml0ZSB0byBtZW1vcnkgYnkgdGhlIENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlICovCiBzdGF0aWMgdm9pZCBpcHVfaWNfZW5hYmxlX3Rhc2soc3RydWN0IGlwdSAqaXB1LCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwpCiB7CiAJdWludDMyX3QgaWNfY29uZiwgbWFzazsKQEAgLTEyNiw2ICsxMjksNyBAQAogCWlkbWFjX3dyaXRlX2ljcmVnKGlwdSwgaWNfY29uZiwgSUNfQ09ORik7CiB9CiAKKy8qIENhbGxlZCB1bmRlciBzcGluX2xvY2tfaXJxc2F2ZSgmaXB1X2RhdGEubG9jaykgKi8KIHN0YXRpYyB2b2lkIGlwdV9pY19kaXNhYmxlX3Rhc2soc3RydWN0IGlwdSAqaXB1LCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwpCiB7CiAJdWludDMyX3QgaWNfY29uZiwgbWFzazsKQEAgLTQyMiw3ICs0MjYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGlwdV9kYXRhLmRldiwKLQkJCSJteGMgaXB1OiB1bmltcGxlbWVudGVkIHBpeGVsIGZvcm1hdCAlZFxuIiwgcGl4ZWxfZm10KTsKKwkJCSJteDMgaXB1OiB1bmltcGxlbWVudGVkIHBpeGVsIGZvcm1hdCAlZFxuIiwgcGl4ZWxfZm10KTsKIAkJYnJlYWs7CiAJfQogCkBAIC00MzMsMjAgKzQzNywyMCBAQAogCQkJCQl1aW50MTZfdCBidXJzdF9waXhlbHMpCiB7CiAJcGFyYW1zLT5wcC5ucGIgPSBidXJzdF9waXhlbHMgLSAxOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoX3BhcmFtX3NldF9idWZmZXIodW5pb24gY2hhbl9wYXJhbV9tZW0gKnBhcmFtcywKIAkJCQkgICAgZG1hX2FkZHJfdCBidWYwLCBkbWFfYWRkcl90IGJ1ZjEpCiB7CiAJcGFyYW1zLT5wcC5lYmEwID0gYnVmMDsKIAlwYXJhbXMtPnBwLmViYTEgPSBidWYxOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoX3BhcmFtX3NldF9yb3RhdGlvbih1bmlvbiBjaGFuX3BhcmFtX21lbSAqcGFyYW1zLAogCQkJCSAgICAgIGVudW0gaXB1X3JvdGF0ZV9tb2RlIHJvdGF0ZSkKIHsKIAlwYXJhbXMtPnBwLmJhbSA9IHJvdGF0ZTsKLX07Cit9CiAKIHN0YXRpYyB2b2lkIGlwdV93cml0ZV9wYXJhbV9tZW0odWludDMyX3QgYWRkciwgdWludDMyX3QgKmRhdGEsCiAJCQkJdWludDMyX3QgbnVtX3dvcmRzKQpAQCAtNTcxLDcgKzU3NSw3IEBACiB7CiAJLyogQ2hhbm5lbCBQYXJhbWV0ZXIgTWVtb3J5ICovCiAJcmV0dXJuIDB4MTAwMDAgfCAoZG1hX2NoIDw8IDQpOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoYW5uZWxfc2V0X3ByaW9yaXR5KHN0cnVjdCBpcHUgKmlwdSwgZW51bSBpcHVfY2hhbm5lbCBjaGFubmVsLAogCQkJCSAgICAgYm9vbCBwcmlvKQpAQCAtNjExLDcgKzYxNSw4IEBACiAKIC8qKgogICogaXB1X2VuYWJsZV9jaGFubmVsKCkgLSBlbmFibGUgYW4gSVBVIGNoYW5uZWwuCi0gKiBAY2hhbm5lbDoJY2hhbm5lbCBJRC4KKyAqIEBpZG1hYzoJSVBVIERNQUMgY29udGV4dC4KKyAqIEBpY2hhbjoJSURNQUMgY2hhbm5lbC4KICAqIEByZXR1cm46CTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgaXB1X2VuYWJsZV9jaGFubmVsKHN0cnVjdCBpZG1hYyAqaWRtYWMsIHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbikKQEAgLTY0OSw3ICs2NTQsNyBAQAogCiAvKioKICAqIGlwdV9pbml0X2NoYW5uZWxfYnVmZmVyKCkgLSBpbml0aWFsaXplIGEgYnVmZmVyIGZvciBsb2dpY2FsIElQVSBjaGFubmVsLgotICogQGNoYW5uZWw6CWNoYW5uZWwgSUQuCisgKiBAaWNoYW46CUlETUFDIGNoYW5uZWwuCiAgKiBAcGl4ZWxfZm10OglwaXhlbCBmb3JtYXQgb2YgYnVmZmVyLiBQaXhlbCBmb3JtYXQgaXMgYSBGT1VSQ0MgQVNDSUkgY29kZS4KICAqIEB3aWR0aDoJd2lkdGggb2YgYnVmZmVyIGluIHBpeGVscy4KICAqIEBoZWlnaHQ6CWhlaWdodCBvZiBidWZmZXIgaW4gcGl4ZWxzLgpAQCAtNjg3LDcgKzY5Miw3IEBACiAJfQogCiAJLyogSUMgY2hhbm5lbCdzIHN0cmlkZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBwaXhlbHMgKi8KLQlpZiAoKGNoYW5uZWwgPD0gMTMpICYmIChzdHJpZGUgJSA4KSkgeworCWlmICgoY2hhbm5lbCA8PSBJRE1BQ19JQ18xMykgJiYgKHN0cmlkZSAlIDgpKSB7CiAJCWRldl9lcnIoaXB1LT5kZXYsICJTdHJpZGUgbXVzdCBiZSA4IHBpeGVsIG11bHRpcGxlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzUyLDcgKzc1Nyw3IEBACiAKIC8qKgogICogaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcigpIC0gdXBkYXRlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBjaGFubmVsIGJ1ZmZlci4KLSAqIEBjaGFubmVsOgljaGFubmVsIElELgorICogQGljaGFuOglJRE1BQyBjaGFubmVsLgogICogQGJ1ZmZlcl9uOglidWZmZXIgbnVtYmVyIHRvIHVwZGF0ZS4KICAqCQkwIG9yIDEgYXJlIHRoZSBvbmx5IHZhbGlkIHZhbHVlcy4KICAqIEBwaHlhZGRyOglidWZmZXIgcGh5c2ljYWwgYWRkcmVzcy4KQEAgLTc2MCw5ICs3NjUsMTAgQEAKICAqICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgdGhlIGJ1ZmZlciBpcyBzZXQgdG8gcmVhZHkuCiAgKi8KIC8qIENhbGxlZCB1bmRlciBzcGluX2xvY2soX2lycXNhdmUpKCZpY2hhbi0+bG9jaykgKi8KLXN0YXRpYyBpbnQgaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwsCitzdGF0aWMgaW50IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAogCQkJCSAgICAgaW50IGJ1ZmZlcl9uLCBkbWFfYWRkcl90IHBoeWFkZHIpCiB7CisJZW51bSBpcHVfY2hhbm5lbCBjaGFubmVsID0gaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQ7CiAJdWludDMyX3QgcmVnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTc3MSw4ICs3NzcsOCBAQAogCWlmIChidWZmZXJfbiA9PSAwKSB7CiAJCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYwX1JEWSk7CiAJCWlmIChyZWcgJiAoMVVMIDw8IGNoYW5uZWwpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLUVBQ0NFUzsKKwkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFubmVsKTsKKwkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJfQogCiAJCS8qIDQ0LjMuMy4xLjkgLSBSb3cgTnVtYmVyIDEgKFdPUkQxLCBvZmZzZXQgMCkgKi8KQEAgLTc4Miw4ICs3ODgsOCBAQAogCX0gZWxzZSB7CiAJCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYxX1JEWSk7CiAJCWlmIChyZWcgJiAoMVVMIDw8IGNoYW5uZWwpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLUVBQ0NFUzsKKwkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFubmVsKTsKKwkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJfQogCiAJCS8qIENoZWNrIGlmIGRvdWJsZS1idWZmZXJpbmcgaXMgYWxyZWFkeSBlbmFibGVkICovCkBAIC04MDUsNiArODExLDM5IEBACiB9CiAKIC8qIENhbGxlZCB1bmRlciBzcGluX2xvY2tfaXJxc2F2ZSgmaWNoYW4tPmxvY2spICovCitzdGF0aWMgaW50IGlwdV9zdWJtaXRfYnVmZmVyKHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiwKKwlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IGJ1Zl9pZHgpCit7CisJdW5zaWduZWQgaW50IGNoYW5faWQgPSBpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWNoYW4tPmRtYV9jaGFuLmRldi0+ZGV2aWNlOworCWludCByZXQ7CisKKwlpZiAoYXN5bmNfdHhfdGVzdF9hY2soJmRlc2MtPnR4ZCkpCisJCXJldHVybiAtRUlOVFI7CisKKwkvKgorCSAqIE9uIGZpcnN0IGludm9jYXRpb24gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCB0aGUgY2FsbCB0bworCSAqIGlwdV9pbml0X2NoYW5uZWxfYnVmZmVyKCkgYWJvdmUgd2lsbCBzZXQgYWRkcmVzc2VzIGZvciB1cywgc28gd2UKKwkgKiBjb3VsZCBtYWtlIGl0IGNvbmRpdGlvbmFsIG9uIHN0YXR1cyA+PSBJUFVfQ0hBTk5FTF9FTkFCTEVELCBidXQKKwkgKiBkb2luZyBpdCBhZ2FpbiBzaG91bGRuJ3QgaHVydCBlaXRoZXIuCisJICovCisJcmV0ID0gaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihpY2hhbiwgYnVmX2lkeCwKKwkJCQkJc2dfZG1hX2FkZHJlc3Moc2cpKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiVXBkYXRpbmcgc2cgJXAgb24gY2hhbm5lbCAweCV4IGJ1ZmZlciAlZCBmYWlsZWQhXG4iLAorCQkJc2csIGNoYW5faWQsIGJ1Zl9pZHgpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlwdV9zZWxlY3RfYnVmZmVyKGNoYW5faWQsIGJ1Zl9pZHgpOworCWRldl9kYmcoZGV2LCAiVXBkYXRlZCBzZyAlcCBvbiBjaGFubmVsIDB4JXggYnVmZmVyICVkXG4iLAorCQlzZywgY2hhbl9pZCwgYnVmX2lkeCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHVuZGVyIHNwaW5fbG9ja19pcnFzYXZlKCZpY2hhbi0+bG9jaykgKi8KIHN0YXRpYyBpbnQgaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAogCQkJCSAgICAgIHN0cnVjdCBpZG1hY190eF9kZXNjICpkZXNjKQogewpAQCAtODE1LDIwICs4NTQsMTAgQEAKIAkJaWYgKCFpY2hhbi0+c2dbaV0pIHsKIAkJCWljaGFuLT5zZ1tpXSA9IHNnOwogCi0JCQkvKgotCQkJICogT24gZmlyc3QgaW52b2NhdGlvbiB0aGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIHRoZQotCQkJICogY2FsbCB0byBpcHVfaW5pdF9jaGFubmVsX2J1ZmZlcigpIGFib3ZlIHdpbGwgc2V0Ci0JCQkgKiBhZGRyZXNzZXMgZm9yIHVzLCBzbyB3ZSBjb3VsZCBtYWtlIGl0IGNvbmRpdGlvbmFsCi0JCQkgKiBvbiBzdGF0dXMgPj0gSVBVX0NIQU5ORUxfRU5BQkxFRCwgYnV0IGRvaW5nIGl0IGFnYWluCi0JCQkgKiBzaG91bGRuJ3QgaHVydCBlaXRoZXIuCi0JCQkgKi8KLQkJCXJldCA9IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQsIGksCi0JCQkJCQkJc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCXJldCA9IGlwdV9zdWJtaXRfYnVmZmVyKGljaGFuLCBkZXNjLCBzZywgaSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwogCi0JCQlpcHVfc2VsZWN0X2J1ZmZlcihpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCwgaSk7Ci0KIAkJCXNnID0gc2dfbmV4dChzZyk7CiAJCX0KIAl9CkBAIC04NDIsMTkgKzg3MSwyMiBAQAogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IHRvX2lkbWFjX2NoYW4odHgtPmNoYW4pOwogCXN0cnVjdCBpZG1hYyAqaWRtYWMgPSB0b19pZG1hYyh0eC0+Y2hhbi0+ZGV2aWNlKTsKIAlzdHJ1Y3QgaXB1ICppcHUgPSB0b19pcHUoaWRtYWMpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2U7CiAJZG1hX2Nvb2tpZV90IGNvb2tpZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKIAkvKiBTYW5pdHkgY2hlY2sgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmRlc2MtPmxpc3QpKSB7CiAJCS8qIFRoZSBkZXNjcmlwdG9yIGRvZXNuJ3QgYmVsb25nIHRvIGNsaWVudCAqLwotCQlkZXZfZXJyKCZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2UsCi0JCQkiRGVzY3JpcHRvciAlcCBub3QgcHJlcGFyZWQhXG4iLCB0eCk7CisJCWRldl9lcnIoZGV2LCAiRGVzY3JpcHRvciAlcCBub3QgcHJlcGFyZWQhXG4iLCB0eCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJbXV0ZXhfbG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogCisJYXN5bmNfdHhfY2xlYXJfYWNrKHR4KTsKKwogCWlmIChpY2hhbi0+c3RhdHVzIDwgSVBVX0NIQU5ORUxfUkVBRFkpIHsKIAkJc3RydWN0IGlkbWFjX3ZpZGVvX3BhcmFtICp2aWRlbyA9ICZpY2hhbi0+cGFyYW1zLnZpZGVvOwogCQkvKgpAQCAtODc4LDE2ICs5MTAsNyBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JLyogaXB1LT5sb2NrIGNhbiBiZSB0YWtlbiB1bmRlciBpY2hhbi0+bG9jaywgYnV0IG5vdCB2LnYuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBzdWJtaXRfYnVmZmVycygpIGF0b21pY2FsbHkgdmVyaWZpZXMgYW5kIGZpbGxzIGVtcHR5IHNnIHNsb3RzICovCi0JY29va2llID0gaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoaWNoYW4sIGRlc2MpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKLQotCWlmIChjb29raWUgPCAwKQotCQlnb3RvIG91dDsKKwlkZXZfZGJnKGRldiwgIlN1Ym1pdHRpbmcgc2cgJXBcbiIsICZkZXNjLT5zZ1swXSk7CiAKIAljb29raWUgPSBpY2hhbi0+ZG1hX2NoYW4uY29va2llOwogCkBAIC04OTcsMjQgKzkyMCw0MCBAQAogCS8qIGZyb20gZG1hZW5naW5lLmg6ICJsYXN0IGNvb2tpZSB2YWx1ZSByZXR1cm5lZCB0byBjbGllbnQiICovCiAJaWNoYW4tPmRtYV9jaGFuLmNvb2tpZSA9IGNvb2tpZTsKIAl0eC0+Y29va2llID0gY29va2llOworCisJLyogaXB1LT5sb2NrIGNhbiBiZSB0YWtlbiB1bmRlciBpY2hhbi0+bG9jaywgYnV0IG5vdCB2LnYuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7CisKIAlsaXN0X2FkZF90YWlsKCZkZXNjLT5saXN0LCAmaWNoYW4tPnF1ZXVlKTsKKwkvKiBzdWJtaXRfYnVmZmVycygpIGF0b21pY2FsbHkgdmVyaWZpZXMgYW5kIGZpbGxzIGVtcHR5IHNnIHNsb3RzICovCisJcmV0ID0gaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoaWNoYW4sIGRlc2MpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKIAorCWlmIChyZXQgPCAwKSB7CisJCWNvb2tpZSA9IHJldDsKKwkJZ290byBkZXF1ZXVlOworCX0KKwogCWlmIChpY2hhbi0+c3RhdHVzIDwgSVBVX0NIQU5ORUxfRU5BQkxFRCkgewotCQlpbnQgcmV0ID0gaXB1X2VuYWJsZV9jaGFubmVsKGlkbWFjLCBpY2hhbik7CisJCXJldCA9IGlwdV9lbmFibGVfY2hhbm5lbChpZG1hYywgaWNoYW4pOwogCQlpZiAocmV0IDwgMCkgewogCQkJY29va2llID0gcmV0OwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0JCQlsaXN0X2RlbF9pbml0KCZkZXNjLT5saXN0KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0JCQl0eC0+Y29va2llID0gY29va2llOwotCQkJaWNoYW4tPmRtYV9jaGFuLmNvb2tpZSA9IGNvb2tpZTsKKwkJCWdvdG8gZGVxdWV1ZTsKIAkJfQogCX0KIAogCWR1bXBfaWRtYWNfcmVnKGlwdSk7CiAKK2RlcXVldWU6CisJaWYgKGNvb2tpZSA8IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7CisJCWxpc3RfZGVsX2luaXQoJmRlc2MtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2hhbi0+bG9jaywgZmxhZ3MpOworCQl0eC0+Y29va2llID0gY29va2llOworCQlpY2hhbi0+ZG1hX2NoYW4uY29va2llID0gY29va2llOworCX0KKwogb3V0OgogCW11dGV4X3VubG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogCkBAIC05NDQsOCArOTgzLDYgQEAKIAkJbWVtc2V0KHR4ZCwgMCwgc2l6ZW9mKCp0eGQpKTsKIAkJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCh0eGQsICZpY2hhbi0+ZG1hX2NoYW4pOwogCQl0eGQtPnR4X3N1Ym1pdAkJPSBpZG1hY190eF9zdWJtaXQ7Ci0JCXR4ZC0+Y2hhbgkJPSAmaWNoYW4tPmRtYV9jaGFuOwotCQlJTklUX0xJU1RfSEVBRCgmdHhkLT50eF9saXN0KTsKIAogCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOwogCkBAIC0xMTYxLDYgKzExOTgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCAqaWRtYWNfc2dfbmV4dChzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4sCisJc3RydWN0IGlkbWFjX3R4X2Rlc2MgKipkZXNjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2duZXcgPSBzZyA/IHNnX25leHQoc2cpIDogTlVMTDsKKworCWlmIChzZ25ldykKKwkJLyogbmV4dCBzZy1lbGVtZW50IGluIHRoaXMgbGlzdCAqLworCQlyZXR1cm4gc2duZXc7CisKKwlpZiAoKCpkZXNjKS0+bGlzdC5uZXh0ID09ICZpY2hhbi0+cXVldWUpCisJCS8qIE5vIG1vcmUgZGVzY3JpcHRvcnMgb24gdGhlIHF1ZXVlICovCisJCXJldHVybiBOVUxMOworCisJLyogRmV0Y2ggbmV4dCBkZXNjcmlwdG9yICovCisJKmRlc2MgPSBsaXN0X2VudHJ5KCgqZGVzYyktPmxpc3QubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOworCXJldHVybiAoKmRlc2MpLT5zZzsKK30KKwogLyoKICAqIFdlIGhhdmUgc2V2ZXJhbCBwb3NzaWJpbGl0aWVzIGhlcmU6CiAgKiBjdXJyZW50IEJVRgkJbmV4dCBCVUYKQEAgLTExNzYsMjMgKzEyMzEsNDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZG1hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IGRldl9pZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWNoYW4tPmRtYV9jaGFuLmRldi0+ZGV2aWNlOwogCXVuc2lnbmVkIGludCBjaGFuX2lkID0gaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICoqc2csICpzZ25leHQsICpzZ25ldyA9IE5VTEw7CiAJLyogTmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yICovCi0Jc3RydWN0IGlkbWFjX3R4X2Rlc2MgKmRlc2MgPSBOVUxMLCAqZGVzY25ldzsKKwlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYywgKmRlc2NuZXc7CiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNhbGxiYWNrOwogCXZvaWQgKmNhbGxiYWNrX3BhcmFtOwogCWJvb2wgZG9uZSA9IGZhbHNlOwotCXUzMglyZWFkeTAgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMF9SRFkpLAotCQlyZWFkeTEgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMV9SRFkpLAotCQljdXJidWYgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQ1VSX0JVRik7CisJdTMyIHJlYWR5MCwgcmVhZHkxLCBjdXJidWYsIGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogSURNQUMgaGFzIGNsZWFyZWQgdGhlIHJlc3BlY3RpdmUgQlVGeF9SRFkgYml0LCB3ZSBtYW5hZ2UgdGhlIGJ1ZmZlciAqLwogCi0JcHJfZGVidWcoIklETUFDIGlycSAlZFxuIiwgaXJxKTsKKwlkZXZfZGJnKGRldiwgIklETUFDIGlycSAlZCwgYnVmICVkXG4iLCBpcnEsIGljaGFuLT5hY3RpdmVfYnVmZmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisKKwlyZWFkeTAJPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMF9SRFkpOworCXJlYWR5MQk9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYxX1JEWSk7CisJY3VyYnVmCT0gaWRtYWNfcmVhZF9pcHVyZWcoJmlwdV9kYXRhLCBJUFVfQ0hBX0NVUl9CVUYpOworCWVycgk9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0lOVF9TVEFUXzQpOworCisJaWYgKGVyciAmICgxIDw8IGNoYW5faWQpKSB7CisJCWlkbWFjX3dyaXRlX2lwdXJlZygmaXB1X2RhdGEsIDEgPDwgY2hhbl9pZCwgSVBVX0lOVF9TVEFUXzQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisJCS8qCisJCSAqIERvaW5nIHRoaXMKKwkJICogaWNoYW4tPnNnWzBdID0gaWNoYW4tPnNnWzFdID0gTlVMTDsKKwkJICogeW91IGNhbiBmb3JjZSBjaGFubmVsIHJlLWVuYWJsZSBvbiB0aGUgbmV4dCB0eF9zdWJtaXQoKSwgYnV0CisJCSAqIHRoaXMgaXMgZGlydHkgLSB0aGluayBhYm91dCBkZXNjcmlwdG9ycyB3aXRoIG11bHRpcGxlCisJCSAqIHNnIGVsZW1lbnRzLgorCQkgKi8KKwkJZGV2X3dhcm4oZGV2LCAiTkZCNEVPRiBvbiBjaGFubmVsICVkLCByZWFkeSAleCwgJXgsIGN1ciAleFxuIiwKKwkJCSBjaGFuX2lkLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisKIAkvKiBPdGhlciBpbnRlcnJ1cHRzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGlzIGNoYW5uZWwgKi8KIAlzcGluX2xvY2soJmljaGFuLT5sb2NrKTsKLQogCWlmICh1bmxpa2VseShjaGFuX2lkICE9IElETUFDX1NEQ18wICYmIGNoYW5faWQgIT0gSURNQUNfU0RDXzEgJiYKIAkJICAgICAoKGN1cmJ1ZiA+PiBjaGFuX2lkKSAmIDEpID09IGljaGFuLT5hY3RpdmVfYnVmZmVyKSkgewogCQlpbnQgaSA9IDEwMDsKQEAgLTEyMDcsMTkgKzEyODUsMjMgQEAKIAogCQlpZiAoIWkpIHsKIAkJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7Ci0JCQlkZXZfZGJnKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJCWRldl9kYmcoZGV2LAogCQkJCSJJUlEgb24gYWN0aXZlIGJ1ZmZlciBvbiBjaGFubmVsICV4LCBhY3RpdmUgIgogCQkJCSIlZCwgcmVhZHkgJXgsICV4LCBjdXJyZW50ICV4IVxuIiwgY2hhbl9pZCwKIAkJCQlpY2hhbi0+YWN0aXZlX2J1ZmZlciwgcmVhZHkwLCByZWFkeTEsIGN1cmJ1Zik7CiAJCQlyZXR1cm4gSVJRX05PTkU7Ci0JCX0KKwkJfSBlbHNlCisJCQlkZXZfZGJnKGRldiwKKwkJCQkiQnVmZmVyIGRlYWN0aXZhdGVkIG9uIGNoYW5uZWwgJXgsIGFjdGl2ZSAiCisJCQkJIiVkLCByZWFkeSAleCwgJXgsIGN1cnJlbnQgJXgsIHJlc3QgJWQhXG4iLCBjaGFuX2lkLAorCQkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmLCBpKTsKIAl9CiAKIAlpZiAodW5saWtlbHkoKGljaGFuLT5hY3RpdmVfYnVmZmVyICYmIChyZWFkeTEgPj4gY2hhbl9pZCkgJiAxKSB8fAogCQkgICAgICghaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYgKHJlYWR5MCA+PiBjaGFuX2lkKSAmIDEpCiAJCSAgICAgKSkgewogCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQlkZXZfZGJnKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJZGV2X2RiZyhkZXYsCiAJCQkiSVJRIHdpdGggYWN0aXZlIGJ1ZmZlciBzdGlsbCByZWFkeSBvbiBjaGFubmVsICV4LCAiCiAJCQkiYWN0aXZlICVkLCByZWFkeSAleCwgJXghXG4iLCBjaGFuX2lkLAogCQkJaWNoYW4tPmFjdGl2ZV9idWZmZXIsIHJlYWR5MCwgcmVhZHkxKTsKQEAgLTEyMjcsOCArMTMwOSw5IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmljaGFuLT5xdWV1ZSkpKSB7CisJCWljaGFuLT5zZ1tpY2hhbi0+YWN0aXZlX2J1ZmZlcl0gPSBOVUxMOwogCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQlkZXZfZXJyKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJZGV2X2VycihkZXYsCiAJCQkiSVJRIHdpdGhvdXQgcXVldWVkIGJ1ZmZlcnMgb24gY2hhbm5lbCAleCwgYWN0aXZlICVkLCAiCiAJCQkicmVhZHkgJXgsICV4IVxuIiwgY2hhbl9pZCwKIAkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSk7CkBAIC0xMjQzLDQwICsxMzI2LDQ0IEBACiAJc2cgPSAmaWNoYW4tPnNnW2ljaGFuLT5hY3RpdmVfYnVmZmVyXTsKIAlzZ25leHQgPSBpY2hhbi0+c2dbIWljaGFuLT5hY3RpdmVfYnVmZmVyXTsKIAorCWlmICghKnNnKSB7CisJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlkZXNjID0gbGlzdF9lbnRyeShpY2hhbi0+cXVldWUubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOworCWRlc2NuZXcgPSBkZXNjOworCisJZGV2X2RiZyhkZXYsICJJRE1BQyBpcnEgJWQsIGRtYSAweCUwOHgsIG5leHQgZG1hIDB4JTA4eCwgY3VycmVudCAlZCwgY3VyYnVmIDB4JTA4eFxuIiwKKwkJaXJxLCBzZ19kbWFfYWRkcmVzcygqc2cpLCBzZ25leHQgPyBzZ19kbWFfYWRkcmVzcyhzZ25leHQpIDogMCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIsIGN1cmJ1Zik7CisKKwkvKiBGaW5kIHRoZSBkZXNjcmlwdG9yIG9mIHNnbmV4dCAqLworCXNnbmV3ID0gaWRtYWNfc2dfbmV4dChpY2hhbiwgJmRlc2NuZXcsICpzZyk7CisJaWYgKHNnbmV4dCAhPSBzZ25ldykKKwkJZGV2X2VycihkZXYsICJTdWJtaXR0ZWQgYnVmZmVyICVwLCBuZXh0IGJ1ZmZlciAlcFxuIiwgc2duZXh0LCBzZ25ldyk7CisKIAkvKgogCSAqIGlmIHNnbmV4dCA9PSBOVUxMIHNnIG11c3QgYmUgdGhlIGxhc3QgZWxlbWVudCBpbiBhIHNjYXR0ZXJsaXN0IGFuZAogCSAqIHF1ZXVlIG11c3QgYmUgZW1wdHkKIAkgKi8KIAlpZiAodW5saWtlbHkoIXNnbmV4dCkpIHsKLQkJaWYgKHVubGlrZWx5KHNnX25leHQoKnNnKSkpIHsKLQkJCWRldl9lcnIoaWNoYW4tPmRtYV9jaGFuLmRldmljZS0+ZGV2LAotCQkJCSJCcm9rZW4gYnVmZmVyLXVwZGF0ZSBsb2NraW5nIG9uIGNoYW5uZWwgJXghXG4iLAotCQkJCWNoYW5faWQpOwotCQkJLyogV2UnbGwgbGV0IHRoZSB1c2VyIGNhdGNoIHVwICovCisJCWlmICghV0FSTl9PTihzZ19uZXh0KCpzZykpKQorCQkJZGV2X2RiZyhkZXYsICJVbmRlcnJ1biBvbiBjaGFubmVsICV4XG4iLCBjaGFuX2lkKTsKKwkJaWNoYW4tPnNnWyFpY2hhbi0+YWN0aXZlX2J1ZmZlcl0gPSBzZ25ldzsKKworCQlpZiAodW5saWtlbHkoc2duZXcpKSB7CisJCQlpcHVfc3VibWl0X2J1ZmZlcihpY2hhbiwgZGVzY25ldywgc2duZXcsICFpY2hhbi0+YWN0aXZlX2J1ZmZlcik7CiAJCX0gZWxzZSB7Ci0JCQkvKiBVbmRlcnJ1biAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwdV9kYXRhLmxvY2ssIGZsYWdzKTsKIAkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFuX2lkKTsKLQkJCWRldl9kYmcoaWNoYW4tPmRtYV9jaGFuLmRldmljZS0+ZGV2LAotCQkJCSJVbmRlcnJ1biBvbiBjaGFubmVsICV4XG4iLCBjaGFuX2lkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdV9kYXRhLmxvY2ssIGZsYWdzKTsKIAkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJCS8qIENvbnRpbnVlIHRvIGNoZWNrIGZvciBjb21wbGV0ZSBkZXNjcmlwdG9yICovCiAJCX0KIAl9CiAKLQlkZXNjID0gbGlzdF9lbnRyeShpY2hhbi0+cXVldWUubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOwotCi0JLyogRmlyc3QgY2FsY3VsYXRlIGFuZCBzdWJtaXQgdGhlIG5leHQgc2cgZWxlbWVudCAqLwotCWlmIChsaWtlbHkoc2duZXh0KSkKLQkJc2duZXcgPSBzZ19uZXh0KHNnbmV4dCk7Ci0KLQlpZiAodW5saWtlbHkoIXNnbmV3KSkgewotCQkvKiBTdGFydCBhIG5ldyBzY2F0dGVybGlzdCwgaWYgYW55IHF1ZXVlZCAqLwotCQlpZiAobGlrZWx5KGRlc2MtPmxpc3QubmV4dCAhPSAmaWNoYW4tPnF1ZXVlKSkgewotCQkJZGVzY25ldyA9IGxpc3RfZW50cnkoZGVzYy0+bGlzdC5uZXh0LAotCQkJCQkgICAgIHN0cnVjdCBpZG1hY190eF9kZXNjLCBsaXN0KTsKLQkJCXNnbmV3ID0gJmRlc2NuZXctPnNnWzBdOwotCQl9Ci0JfQorCS8qIENhbGN1bGF0ZSBhbmQgc3VibWl0IHRoZSBuZXh0IHNnIGVsZW1lbnQgKi8KKwlzZ25ldyA9IGlkbWFjX3NnX25leHQoaWNoYW4sICZkZXNjbmV3LCBzZ25ldyk7CiAKIAlpZiAodW5saWtlbHkoIXNnX25leHQoKnNnKSkgfHwgIXNnbmV4dCkgewogCQkvKgpAQCAtMTI4OSwxNyArMTM3NiwxMyBAQAogCiAJKnNnID0gc2duZXc7CiAKLQlpZiAobGlrZWx5KHNnbmV3KSkgewotCQlpbnQgcmV0OwotCi0JCXJldCA9IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoY2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIsCi0JCQkJCQlzZ19kbWFfYWRkcmVzcygqc2cpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlkZXZfZXJyKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKLQkJCQkiRmFpbGVkIHRvIHVwZGF0ZSBidWZmZXIgb24gY2hhbm5lbCAleCBidWZmZXIgJWQhXG4iLAotCQkJCWNoYW5faWQsIGljaGFuLT5hY3RpdmVfYnVmZmVyKTsKLQkJZWxzZQotCQkJaXB1X3NlbGVjdF9idWZmZXIoY2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIpOworCWlmIChsaWtlbHkoc2duZXcpICYmCisJICAgIGlwdV9zdWJtaXRfYnVmZmVyKGljaGFuLCBkZXNjbmV3LCBzZ25ldywgaWNoYW4tPmFjdGl2ZV9idWZmZXIpIDwgMCkgeworCQljYWxsYmFjayA9IGRlc2MtPnR4ZC5jYWxsYmFjazsKKwkJY2FsbGJhY2tfcGFyYW0gPSBkZXNjLT50eGQuY2FsbGJhY2tfcGFyYW07CisJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7CisJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKwkJc3Bpbl9sb2NrKCZpY2hhbi0+bG9jayk7CiAJfQogCiAJLyogRmxpcCB0aGUgYWN0aXZlIGJ1ZmZlciAtIGV2ZW4gaWYgdXBkYXRlIGFib3ZlIGZhaWxlZCAqLwpAQCAtMTMyNywxMyArMTQxMCwyMCBAQAogCQlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBpcHUtPmNoYW5uZWwgKyBpOwogCQlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYzsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJaW50IGo7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJCWludCBqLCBrOwogCiAJCWZvciAoaiA9IDA7IGogPCBpY2hhbi0+bl90eF9kZXNjOyBqKyspIHsKIAkJCWRlc2MgPSBpY2hhbi0+ZGVzYyArIGo7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKIAkJCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+dHhkKSkgewogCQkJCWxpc3RfbW92ZSgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOworCQkJCWZvcl9lYWNoX3NnKGRlc2MtPnNnLCBzZywgZGVzYy0+c2dfbGVuLCBrKSB7CisJCQkJCWlmIChpY2hhbi0+c2dbMF0gPT0gc2cpCisJCQkJCQlpY2hhbi0+c2dbMF0gPSBOVUxMOworCQkJCQllbHNlIGlmIChpY2hhbi0+c2dbMV0gPT0gc2cpCisJCQkJCQlpY2hhbi0+c2dbMV0gPSBOVUxMOworCQkJCX0KIAkJCQlhc3luY190eF9jbGVhcl9hY2soJmRlc2MtPnR4ZCk7CiAJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2hhbi0+bG9jaywgZmxhZ3MpOwpAQCAtMTM0MSwxMyArMTQzMSw3IEBACiAJfQogfQogCi0vKgotICogQXQgdGhlIHRpbWUgLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcygpIG1ldGhvZCBpcyBjYWxsZWQsIHdlIGNhbm5vdCBrbm93LAotICogd2hldGhlciB0aGUgY2xpZW50IHdpbGwgYWNjZXB0IHRoZSBjaGFubmVsLiBUaHVzIHdlIG11c3Qgb25seSBjaGVjaywgaWYgd2UKLSAqIGNhbiBzYXRpc2Z5IGNsaWVudCdzIHJlcXVlc3QgYnV0IHRoZSBvbmx5IHJlYWwgY3JpdGVyaW9uIHRvIHZlcmlmeSwgd2hldGhlcgotICogdGhlIGNsaWVudCBoYXMgYWNjZXB0ZWQgb3VyIG9mZmVyIGlzIHRoZSBjbGllbnRfY291bnQuIFRoYXQncyB3aHkgd2UgaGF2ZSB0bwotICogcGVyZm9ybSB0aGUgcmVzdCBvZiBvdXIgYWxsb2NhdGlvbiB0YXNrcyBvbiB0aGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICovCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIHRyYW5zZmVyIGRlc2NyaXB0b3IuICovCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICppZG1hY19wcmVwX3NsYXZlX3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBzZ19sZW4sCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbG9uZyB0eF9mbGFncykKQEAgLTEzNTgsOCArMTQ0Miw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFdlIG9ubHkgY2FuIGhhbmRsZSB0aGVzZSB0aHJlZSBjaGFubmVscyBzbyBmYXIgKi8KLQlpZiAoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfU0RDXzAgJiYgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfU0RDXzEgJiYKLQkgICAgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfSUNfNykKKwlpZiAoY2hhbi0+Y2hhbl9pZCAhPSBJRE1BQ19TRENfMCAmJiBjaGFuLT5jaGFuX2lkICE9IElETUFDX1NEQ18xICYmCisJICAgIGNoYW4tPmNoYW5faWQgIT0gSURNQUNfSUNfNykKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSAmJiBkaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSkgewpAQCAtMTQwMCw3ICsxNDg0LDcgQEAKIAogCS8qIFRoaXMgaXMgbm90IGFsd2F5cyBuZWVkZWQsIGJ1dCBkb2Vzbid0IGh1cnQgZWl0aGVyICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlwdS0+bG9jaywgZmxhZ3MpOwotCWlwdV9zZWxlY3RfYnVmZmVyKGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkLCBpY2hhbi0+YWN0aXZlX2J1ZmZlcik7CisJaXB1X3NlbGVjdF9idWZmZXIoY2hhbi0+Y2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdS0+bG9jaywgZmxhZ3MpOwogCiAJLyoKQEAgLTE0MzIsOCArMTUxNiw3IEBACiAJCQlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYyA9IGljaGFuLT5kZXNjICsgaTsKIAkJCWlmIChsaXN0X2VtcHR5KCZkZXNjLT5saXN0KSkKIAkJCQkvKiBEZXNjcmlwdG9yIHdhcyBwcmVwYXJlZCwgYnV0IG5vdCBzdWJtaXR0ZWQgKi8KLQkJCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwKLQkJCQkJICZpY2hhbi0+ZnJlZV9saXN0KTsKKwkJCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOwogCiAJCQlhc3luY190eF9jbGVhcl9hY2soJmRlc2MtPnR4ZCk7CiAJCX0KQEAgLTE0NTgsNiArMTU0MSwyOCBAQAogCW11dGV4X3VubG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogfQogCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpcnFyZXR1cm5fdCBpY19zb2ZfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBkZXZfaWQ7CisJcHJpbnRrKEtFUk5fREVCVUcgIkdvdCBTT0YgSVJRICVkIG9uIENoYW5uZWwgJWRcbiIsCisJICAgICAgIGlycSwgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQpOworCWRpc2FibGVfaXJxKGlycSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaWNfZW9mX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gZGV2X2lkOworCXByaW50ayhLRVJOX0RFQlVHICJHb3QgRU9GIElSUSAlZCBvbiBDaGFubmVsICVkXG4iLAorCSAgICAgICBpcnEsIGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkKTsKKwlkaXNhYmxlX2lycShpcnEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBpY19zb2YgPSAtRUlOVkFMLCBpY19lb2YgPSAtRUlOVkFMOworI2VuZGlmCisKIHN0YXRpYyBpbnQgaWRtYWNfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQogewogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CkBAIC0xNDcxLDMxICsxNTc2LDQ5IEBACiAJY2hhbi0+Y29va2llCQk9IDE7CiAJaWNoYW4tPmNvbXBsZXRlZAk9IC1FTlhJTzsKIAotCXJldCA9IGlwdV9pcnFfbWFwKGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkKTsKKwlyZXQgPSBpcHVfaXJxX21hcChjaGFuLT5jaGFuX2lkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlaW1hcDsKIAogCWljaGFuLT5lb2ZfaXJxID0gcmV0OwotCXJldCA9IHJlcXVlc3RfaXJxKGljaGFuLT5lb2ZfaXJxLCBpZG1hY19pbnRlcnJ1cHQsIDAsCi0JCQkgIGljaGFuLT5lb2ZfbmFtZSwgaWNoYW4pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVyaXJxOworCisJLyoKKwkgKiBJbXBvcnRhbnQgdG8gZmlyc3QgZGlzYWJsZSB0aGUgY2hhbm5lbCwgYmVjYXVzZSBtYXliZSBzb21lb25lCisJICogdXNlZCBpdCBiZWZvcmUgdXMsIGUuZy4sIHRoZSBib290bG9hZGVyCisJICovCisJaXB1X2Rpc2FibGVfY2hhbm5lbChpZG1hYywgaWNoYW4sIHRydWUpOwogCiAJcmV0ID0gaXB1X2luaXRfY2hhbm5lbChpZG1hYywgaWNoYW4pOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVpY2hhbjsKIAorCXJldCA9IHJlcXVlc3RfaXJxKGljaGFuLT5lb2ZfaXJxLCBpZG1hY19pbnRlcnJ1cHQsIDAsCisJCQkgIGljaGFuLT5lb2ZfbmFtZSwgaWNoYW4pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVyaXJxOworCisjaWZkZWYgREVCVUcKKwlpZiAoY2hhbi0+Y2hhbl9pZCA9PSBJRE1BQ19JQ183KSB7CisJCWljX3NvZiA9IGlwdV9pcnFfbWFwKDY5KTsKKwkJaWYgKGljX3NvZiA+IDApCisJCQlyZXF1ZXN0X2lycShpY19zb2YsIGljX3NvZl9pcnEsIDAsICJJQyBTT0YiLCBpY2hhbik7CisJCWljX2VvZiA9IGlwdV9pcnFfbWFwKDcwKTsKKwkJaWYgKGljX2VvZiA+IDApCisJCQlyZXF1ZXN0X2lycShpY19lb2YsIGljX2VvZl9pcnEsIDAsICJJQyBFT0YiLCBpY2hhbik7CisJfQorI2VuZGlmCisKIAlpY2hhbi0+c3RhdHVzID0gSVBVX0NIQU5ORUxfSU5JVElBTElaRUQ7CiAKLQlkZXZfZGJnKCZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2UsICJGb3VuZCBjaGFubmVsIDB4JXgsIGlycSAlZFxuIiwKLQkJaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQsIGljaGFuLT5lb2ZfaXJxKTsKKwlkZXZfZGJnKCZjaGFuLT5kZXYtPmRldmljZSwgIkZvdW5kIGNoYW5uZWwgMHgleCwgaXJxICVkXG4iLAorCQljaGFuLT5jaGFuX2lkLCBpY2hhbi0+ZW9mX2lycSk7CiAKIAlyZXR1cm4gcmV0OwogCi1laWNoYW46Ci0JZnJlZV9pcnEoaWNoYW4tPmVvZl9pcnEsIGljaGFuKTsKIGVyaXJxOgotCWlwdV9pcnFfdW5tYXAoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQpOworCWlwdV91bmluaXRfY2hhbm5lbChpZG1hYywgaWNoYW4pOworZWljaGFuOgorCWlwdV9pcnFfdW5tYXAoY2hhbi0+Y2hhbl9pZCk7CiBlaW1hcDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUxMCw4ICsxNjMzLDIyIEBACiAJX19pZG1hY190ZXJtaW5hdGVfYWxsKGNoYW4pOwogCiAJaWYgKGljaGFuLT5zdGF0dXMgPiBJUFVfQ0hBTk5FTF9GUkVFKSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKGNoYW4tPmNoYW5faWQgPT0gSURNQUNfSUNfNykgeworCQkJaWYgKGljX3NvZiA+IDApIHsKKwkJCQlmcmVlX2lycShpY19zb2YsIGljaGFuKTsKKwkJCQlpcHVfaXJxX3VubWFwKDY5KTsKKwkJCQlpY19zb2YgPSAtRUlOVkFMOworCQkJfQorCQkJaWYgKGljX2VvZiA+IDApIHsKKwkJCQlmcmVlX2lycShpY19lb2YsIGljaGFuKTsKKwkJCQlpcHVfaXJxX3VubWFwKDcwKTsKKwkJCQlpY19lb2YgPSAtRUlOVkFMOworCQkJfQorCQl9CisjZW5kaWYKIAkJZnJlZV9pcnEoaWNoYW4tPmVvZl9pcnEsIGljaGFuKTsKLQkJaXB1X2lycV91bm1hcChpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCk7CisJCWlwdV9pcnFfdW5tYXAoY2hhbi0+Y2hhbl9pZCk7CiAJfQogCiAJaWNoYW4tPnN0YXR1cyA9IElQVV9DSEFOTkVMX0ZSRUU7CkBAIC0xNTczLDcgKzE3MTAsNyBAQAogCQlkbWFfY2hhbi0+ZGV2aWNlCT0gJmlkbWFjLT5kbWE7CiAJCWRtYV9jaGFuLT5jb29raWUJPSAxOwogCQlkbWFfY2hhbi0+Y2hhbl9pZAk9IGk7Ci0JCWxpc3RfYWRkX3RhaWwoJmljaGFuLT5kbWFfY2hhbi5kZXZpY2Vfbm9kZSwgJmRtYS0+Y2hhbm5lbHMpOworCQlsaXN0X2FkZF90YWlsKCZkbWFfY2hhbi0+ZGV2aWNlX25vZGUsICZkbWEtPmNoYW5uZWxzKTsKIAl9CiAKIAlpZG1hY193cml0ZV9pY3JlZyhpcHUsIDB4MDAwMDAwNzAsIElETUFDX0NPTkYpOwpAQCAtMTU4MSw3ICsxNzE4LDcgQEAKIAlyZXR1cm4gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmaWRtYWMtPmRtYSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwdV9pZG1hY19leGl0KHN0cnVjdCBpcHUgKmlwdSkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcHVfaWRtYWNfZXhpdChzdHJ1Y3QgaXB1ICppcHUpCiB7CiAJaW50IGk7CiAJc3RydWN0IGlkbWFjICppZG1hYyA9ICZpcHUtPmlkbWFjOwpAQCAtMTYwMCw3ICsxNzM3LDcgQEAKICAqIElQVSBjb21tb24gcHJvYmUgLyByZW1vdmUKICAqLwogCi1zdGF0aWMgaW50IGlwdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2luaXQgaXB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGlwdV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtX2lwdSwgKm1lbV9pYzsKQEAgLTE3MDAsNyArMTgzNyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpcHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBpcHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGlwdSAqaXB1ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKQEAgLTE3MjUsNyArMTg2Miw3IEBACiAJCS5uYW1lCT0gImlwdS1jb3JlIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKLQkucmVtb3ZlCQk9IGlwdV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChpcHVfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlwdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lycS5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pcnEuYwppbmRleCA4M2Y1MzJjLi5kZDhlYmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lycS5jCisrKyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaXJxLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogfTsKIAogLyogSW5zdGFsbCB0aGUgSVJRIGhhbmRsZXIgKi8KLWludCBpcHVfaXJxX2F0dGFjaF9pcnEoc3RydWN0IGlwdSAqaXB1LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitpbnQgX19pbml0IGlwdV9pcnFfYXR0YWNoX2lycShzdHJ1Y3QgaXB1ICppcHUsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXB1X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBpbnQgaXJxLCBpcnFfYmFzZSwgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL212X3hvci5jIGIvZHJpdmVycy9kbWEvbXZfeG9yLmMKaW5kZXggY2I3ZjI2Zi4uZGRhYjk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvbXZfeG9yLmMKKysrIGIvZHJpdmVycy9kbWEvbXZfeG9yLmMKQEAgLTYzMiw3ICs2MzIsNiBAQAogCQlzbG90LT5hc3luY190eC50eF9zdWJtaXQgPSBtdl94b3JfdHhfc3VibWl0OwogCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+Y2hhaW5fbm9kZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZzbG90LT5zbG90X25vZGUpOwotCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+YXN5bmNfdHgudHhfbGlzdCk7CiAJCWh3X2Rlc2MgPSAoY2hhciAqKSBtdl9jaGFuLT5kZXZpY2UtPmRtYV9kZXNjX3Bvb2w7CiAJCXNsb3QtPmFzeW5jX3R4LnBoeXMgPQogCQkJKGRtYV9hZGRyX3QpICZod19kZXNjW2lkeCAqIE1WX1hPUl9TTE9UX1NJWkVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCBlZWU0N2ZkLi5lNWY1YzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtMSwxMyArMSwxMiBAQAogIwogIwlFREFDIEtjb25maWcKLSMJQ29weXJpZ2h0IChjKSAyMDAzIExpbnV4IE5ldHdvcngKKyMJQ29weXJpZ2h0IChjKSAyMDA4IERvdWcgVGhvbXBzb24gd3d3LnNvZnR3YXJlYml0bWFrZXIuY29tCiAjCUxpY2Vuc2VkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMCiAjCiAKIG1lbnVjb25maWcgRURBQwotCWJvb2wgIkVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmciCiAJZGVwZW5kcyBvbiBIQVNfSU9NRU0KLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlcGVuZHMgb24gWDg2IHx8IFBQQwogCWhlbHAKIAkgIEVEQUMgaXMgZGVzaWduZWQgdG8gcmVwb3J0IGVycm9ycyBpbiB0aGUgY29yZSBzeXN0ZW0uCkBAIC00MCw2ICszOSwxNCBAQAogCSAgdGhlcmUncmUgZm91ciBkZWJ1ZyBsZXZlbHMgKHg9MCwxLDIsMyBmcm9tIGxvdyB0byBoaWdoKS4KIAkgIFVzdWFsbHkgeW91IHNob3VsZCBzZWxlY3QgJ04nLgogCitjb25maWcgRURBQ19ERUJVR19WRVJCT1NFCisJYm9vbCAiTW9yZSB2ZXJib3NlIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIEVEQUNfREVCVUcKKwloZWxwCisJICBUaGlzIG9wdGlvbiBtYWtlcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbW9yZSB2ZXJib3NlLgorCSAgU291cmNlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgd2hlcmUgZGVidWdnaW5nIG1lc3NhZ2UKKwkgIHByaW50ZWQgd2lsbCBiZSBhZGRlZCB0byBkZWJ1Z2dpbmcgbWVzc2FnZS4KKwogY29uZmlnIEVEQUNfTU1fRURBQwogCXRyaXN0YXRlICJNYWluIE1lbW9yeSBFREFDIChFcnJvciBEZXRlY3Rpb24gQW5kIENvcnJlY3Rpb24pIHJlcG9ydGluZyIKIAlkZWZhdWx0IHkKQEAgLTE3NCw0ICsxODEsMjcgQEAKIAkgIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBpbnRlcm5hbCBtZW1vcnkgY29udHJvbGxlcgogCSAgb24gcGxhdGZvcm0gd2l0aG91dCBhIGh5cGVydmlzb3IKIAorY29uZmlnIEVEQUNfUFBDNFhYCisJdHJpc3RhdGUgIlBQQzR4eCBJQk0gRERSMiBNZW1vcnkgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiA0eHgKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgRURBQyBvbiB0aGUgRUNDIG1lbW9yeSB1c2VkCisJICB3aXRoIHRoZSBJQk0gRERSMiBtZW1vcnkgY29udHJvbGxlciBmb3VuZCBpbiB2YXJpb3VzCisJICBQb3dlclBDIDR4eCBlbWJlZGRlZCBwcm9jZXNzb3JzIHN1Y2ggYXMgdGhlIDQwNUVYW3JdLAorCSAgNDQwU1AsIDQ0MFNQZSwgNDYwRVgsIDQ2MEdUIGFuZCA0NjBTWC4KKworY29uZmlnIEVEQUNfQU1EODEzMQorCXRyaXN0YXRlICJBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBQQ0kKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCisJICBBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCBjaGlwLgorCitjb25maWcgRURBQ19BTUQ4MTExCisJdHJpc3RhdGUgIkFNRDgxMTEgSHlwZXJUcmFuc3BvcnQgSS9PIEh1YiIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBQQ0kKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCisJICBBTUQ4MTExIEh5cGVyVHJhbnNwb3J0IEkvTyBIdWIgY2hpcC4KKwogZW5kaWYgIyBFREFDCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKaW5kZXggYjc1MTk2OS4uYTVmZGNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQpAQCAtMzQsNCArMzQsNCBAQAogb2JqLSQoQ09ORklHX0VEQUNfTVBDODVYWCkJCSs9IG1wYzg1eHhfZWRhYy5vCiBvYmotJChDT05GSUdfRURBQ19NVjY0WDYwKQkJKz0gbXY2NHg2MF9lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX0NFTEwpCQkJKz0gY2VsbF9lZGFjLm8KLQorb2JqLSQoQ09ORklHX0VEQUNfUFBDNFhYKQkJKz0gcHBjNHh4X2VkYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDY5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvYW1kODExMV9lZGFjLmMKQEAgLTAsMCArMSw1OTUgQEAKKy8qCisgKiBhbWQ4MTExX2VkYWMuYywgQU1EODExMSBIeXBlciBUcmFuc3BvcnQgY2hpcCBFREFDIGtlcm5lbCBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJlZGFjX2NvcmUuaCIKKyNpbmNsdWRlICJlZGFjX21vZHVsZS5oIgorI2luY2x1ZGUgImFtZDgxMTFfZWRhYy5oIgorCisjZGVmaW5lIEFNRDgxMTFfRURBQ19SRVZJU0lPTgkiIFZlcjogMS4wLjAgIiBfX0RBVEVfXworI2RlZmluZSBBTUQ4MTExX0VEQUNfTU9EX1NUUgkiYW1kODExMV9lZGFjIgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJCTB4NzQ2MAorc3RhdGljIGludCBlZGFjX2Rldl9pZHg7CisKK2VudW0gYW1kODExMV9lZGFjX2RldnMgeworCUxQQ19CUklER0UgPSAwLAorfTsKKworZW51bSBhbWQ4MTExX2VkYWNfcGNpcyB7CisJUENJX0JSSURHRSA9IDAsCit9OworCisvKiBXcmFwcGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCitzdGF0aWMgaW50IGVkYWNfcGNpX3JlYWRfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyICp2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBSZWFkIEVycm9yIGF0IDB4JXhcbiIsIHJlZyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBlZGFjX3BjaV9yZWFkX2J5dGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTggKnZhbDgpCit7CisJaW50IHJldDsKKworCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcmVnLCB2YWw4KTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50ayhLRVJOX0VSUiBBTUQ4MTExX0VEQUNfTU9EX1NUUgorCQkJIiBQQ0kgQWNjZXNzIFJlYWQgRXJyb3IgYXQgMHgleFxuIiwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZWRhY19wY2lfd3JpdGVfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyIHZhbDMyKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBXcml0ZSBFcnJvciBhdCAweCV4XG4iLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBlZGFjX3BjaV93cml0ZV9ieXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZWcsIHU4IHZhbDgpCit7CisJaW50IHJldDsKKworCXJldCA9IHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHJlZywgdmFsOCk7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBXcml0ZSBFcnJvciBhdCAweCV4XG4iLCByZWcpOworfQorCisvKgorICogZGV2aWNlLXNwZWNpZmljIG1ldGhvZHMgZm9yIGFtZDgxMTEgUENJIEJyaWRnZSBDb250cm9sbGVyCisgKgorICogRXJyb3IgUmVwb3J0aW5nIGFuZCBIYW5kbGluZyBmb3IgYW1kODExMSBjaGlwc2V0IGNvdWxkIGJlIGZvdW5kCisgKiBpbiBpdHMgZGF0YXNoZWV0IDMuMS4yIHNlY3Rpb24sIFAzNworICovCitzdGF0aWMgdm9pZCBhbWQ4MTExX3BjaV9icmlkZ2VfaW5pdChzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyAqcGNpX2luZm8pCit7CisJdTMyIHZhbDMyOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwY2lfaW5mby0+ZGV2OworCisJLyogRmlyc3QgY2xlYXIgZXJyb3IgZGV0ZWN0aW9uIGZsYWdzIG9uIHRoZSBob3N0IGludGVyZmFjZSAqLworCisJLyogQ2xlYXIgU1NFL1NNQS9TVEEgZmxhZ3MgaW4gdGhlIGdsb2JhbCBzdGF0dXMgcmVnaXN0ZXIqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBQQ0lfU1RTQ01EX0NMRUFSX01BU0spCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCS8qIENsZWFyIENSQyBhbmQgTGluayBGYWlsIGZsYWdzIGluIEhUIExpbmsgQ29udHJvbCByZWcgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0hUX0xJTkssICZ2YWwzMik7CisJaWYgKHZhbDMyICYgSFRfTElOS19DTEVBUl9NQVNLKQorCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkvKiBTZWNvbmQgY2xlYXIgYWxsIGZhdWx0IG9uIHRoZSBzZWNvbmRhcnkgaW50ZXJmYWNlICovCisKKwkvKiBDbGVhciBlcnJvciBmbGFncyBpbiB0aGUgbWVtb3J5LWJhc2UgbGltaXQgcmVnLiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfQ0xFQVJfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgdmFsMzIpOworCisJLyogQ2xlYXIgRGlzY2FyZCBUaW1lciBFeHBpcmVkIGZsYWcgaW4gSW50ZXJydXB0L0JyaWRnZSBDb250cm9sIHJlZyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCWlmICh2YWwzMiAmIFBDSV9JTlRCUkdfQ1RSTF9DTEVBUl9NQVNLKQorCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19QQ0lfSU5UQlJHX0NUUkwsIHZhbDMyKTsKKworCS8qIExhc3QgZW5hYmxlIGVycm9yIGRldGVjdGlvbnMgKi8KKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkgeworCQkvKiBFbmFibGUgU3lzdGVtIEVycm9yIHJlcG9ydGluZyBpbiBnbG9iYWwgc3RhdHVzIHJlZ2lzdGVyICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgJnZhbDMyKTsKKwkJdmFsMzIgfD0gUENJX1NUU0NNRF9TRVJSRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCQkvKiBFbmFibGUgQ1JDIFN5bmMgZmxvb2QgcGFja2V0cyB0byBIeXBlclRyYW5zcG9ydCBMaW5rICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwkJdmFsMzIgfD0gSFRfTElOS19DUkNGRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0hUX0xJTkssIHZhbDMyKTsKKworCQkvKiBFbmFibGUgU1NFIHJlcG9ydGluZyBldGMgaW4gSW50ZXJydXB0IGNvbnRyb2wgcmVnICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCQl2YWwzMiB8PSBQQ0lfSU5UQlJHX0NUUkxfUE9MTF9NQVNLOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19QQ0lfSU5UQlJHX0NUUkwsIHZhbDMyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfcGNpX2JyaWRnZV9leGl0KHN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbykKK3sKKwl1MzIgdmFsMzI7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHBjaV9pbmZvLT5kZXY7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkgeworCQkvKiBEaXNhYmxlIFN5c3RlbSBFcnJvciByZXBvcnRpbmcgKi8KKwkJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19QQ0lfU1RTQ01ELCAmdmFsMzIpOworCQl2YWwzMiAmPSB+UENJX1NUU0NNRF9TRVJSRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCQkvKiBEaXNhYmxlIENSQyBmbG9vZCBwYWNrZXRzICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwkJdmFsMzIgJj0gfkhUX0xJTktfQ1JDRkVOOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkJLyogRGlzYWJsZSBEVFNFUlJFTi9NQVJTUC9TRVJSRU4gaW4gSW50ZXJydXB0IENvbnRyb2wgcmVnICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCQl2YWwzMiAmPSB+UENJX0lOVEJSR19DVFJMX1BPTExfTUFTSzsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCB2YWwzMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbWQ4MTExX3BjaV9icmlkZ2VfY2hlY2soc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2RldikKK3sKKwlzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyAqcGNpX2luZm8gPSBlZGFjX2Rldi0+cHZ0X2luZm87CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHBjaV9pbmZvLT5kZXY7CisJdTMyIHZhbDMyOworCisJLyogQ2hlY2sgb3V0IFBDSSBCcmlkZ2UgU3RhdHVzIGFuZCBDb21tYW5kIFJlZ2lzdGVyICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19QQ0lfU1RTQ01ELCAmdmFsMzIpOworCWlmICh2YWwzMiAmIFBDSV9TVFNDTURfQ0xFQVJfTUFTSykgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBQQ0kgYnJpZGdlIHN0YXR1cyBhbmQgY29tbWFuZCIKKwkJCSJyZWdpc3RlciBvbiBkZXZpY2UgJXNcbiIsIHBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIlNTRTogJWQsIFJNQTogJWQsIFJUQTogJWRcbiIsCisJCQkodmFsMzIgJiBQQ0lfU1RTQ01EX1NTRSkgIT0gMCwKKwkJCSh2YWwzMiAmIFBDSV9TVFNDTURfUk1BKSAhPSAwLAorCQkJKHZhbDMyICYgUENJX1NUU0NNRF9SVEEpICE9IDApOworCisJCXZhbDMyIHw9IFBDSV9TVFNDTURfQ0xFQVJfTUFTSzsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorCisJLyogQ2hlY2sgb3V0IEh5cGVyVHJhbnNwb3J0IExpbmsgQ29udHJvbCBSZWdpc3RlciAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBIVF9MSU5LX0xLRkFJTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBoeXBlcnRyYW5zcG9ydCBsaW5rIGNvbnRyb2wiCisJCQkicmVnaXN0ZXIgb24gZGV2aWNlICVzXG4iLCBwY2lfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJMS0ZBSUw6ICVkXG4iLAorCQkJKHZhbDMyICYgSFRfTElOS19MS0ZBSUwpICE9IDApOworCisJCXZhbDMyIHw9IEhUX0xJTktfTEtGQUlMOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9CisKKwkvKiBDaGVjayBvdXQgUENJIEludGVycnVwdCBhbmQgQnJpZGdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX1BDSV9JTlRCUkdfQ1RSTCwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBQQ0lfSU5UQlJHX0NUUkxfRFRTVEFUKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVycm9yKHMpIGluIFBDSSBpbnRlcnJ1cHQgYW5kIGJyaWRnZSBjb250cm9sIgorCQkJInJlZ2lzdGVyIG9uIGRldmljZSAlc1xuIiwgcGNpX2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRFRTVEFUOiAlZFxuIiwKKwkJCSh2YWwzMiAmIFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQpICE9IDApOworCisJCXZhbDMyIHw9IFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQ7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9JTlRCUkdfQ1RSTCwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorCisJLyogQ2hlY2sgb3V0IFBDSSBCcmlkZ2UgTWVtb3J5IEJhc2UtTGltaXQgUmVnaXN0ZXIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX01FTV9MSU0sICZ2YWwzMik7CisJaWYgKHZhbDMyICYgTUVNX0xJTUlUX0NMRUFSX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkVycm9yKHMpIGluIG1lbSBsaW1pdCByZWdpc3RlciBvbiAlcyBkZXZpY2VcbiIsCisJCQlwY2lfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJEUEU6ICVkLCBSU0U6ICVkLCBSTUE6ICVkXG4iCisJCQkiUlRBOiAlZCwgU1RBOiAlZCwgTURQRTogJWRcbiIsCisJCQkodmFsMzIgJiBNRU1fTElNSVRfRFBFKSAgIT0gMCwKKwkJCSh2YWwzMiAmIE1FTV9MSU1JVF9SU0UpICAhPSAwLAorCQkJKHZhbDMyICYgTUVNX0xJTUlUX1JNQSkgICE9IDAsCisJCQkodmFsMzIgJiBNRU1fTElNSVRfUlRBKSAgIT0gMCwKKwkJCSh2YWwzMiAmIE1FTV9MSU1JVF9TVEEpICAhPSAwLAorCQkJKHZhbDMyICYgTUVNX0xJTUlUX01EUEUpICE9IDApOworCisJCXZhbDMyIHw9IE1FTV9MSU1JVF9DTEVBUl9NQVNLOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19NRU1fTElNLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmxlZ2FjeV9pb19yZXM7CitzdGF0aWMgaW50IGF0X2NvbXBhdF9yZWdfYnJva2VuOworI2RlZmluZSBMRUdBQ1lfTlJfUE9SVFMJMQorCisvKiBkZXZpY2Utc3BlY2lmaWMgbWV0aG9kcyBmb3IgYW1kODExMSBMUEMgQnJpZGdlIGRldmljZSAqLworc3RhdGljIHZvaWQgYW1kODExMV9scGNfYnJpZGdlX2luaXQoc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gKmRldl9pbmZvKQoreworCXU4IHZhbDg7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRldl9pbmZvLT5kZXY7CisKKwkvKiBGaXJzdCBjbGVhciBSRUdfQVRfQ09NUEFUW1NFUlIsIElPQ0hLXSBpZiBuZWNlc3NhcnkgKi8KKwlsZWdhY3lfaW9fcmVzID0gcmVxdWVzdF9yZWdpb24oUkVHX0FUX0NPTVBBVCwgTEVHQUNZX05SX1BPUlRTLAorCQkJCQlBTUQ4MTExX0VEQUNfTU9EX1NUUik7CisJaWYgKCFsZWdhY3lfaW9fcmVzKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIHJlcXVlc3QgbGVnYWN5IEkvTyByZWdpb24gIgorCQkJInN0YXJ0ICVkLCBsZW4gJWRcbiIsIF9fZnVuY19fLAorCQkJUkVHX0FUX0NPTVBBVCwgTEVHQUNZX05SX1BPUlRTKTsKKwllbHNlIHsKKwkJdmFsOCA9IF9fZG9faW5iKFJFR19BVF9DT01QQVQpOworCQlpZiAodmFsOCA9PSAweGZmKSB7IC8qIGJ1Z2d5IHBvcnQgKi8KKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwb3J0ICVkIGlzIGJ1Z2d5LCBub3Qgc3VwcG9ydGVkIgorCQkJCSIgYnkgaGFyZHdhcmU/XG4iLCBfX2Z1bmNfXywgUkVHX0FUX0NPTVBBVCk7CisJCQlhdF9jb21wYXRfcmVnX2Jyb2tlbiA9IDE7CisJCQlyZWxlYXNlX3JlZ2lvbihSRUdfQVRfQ09NUEFULCBMRUdBQ1lfTlJfUE9SVFMpOworCQkJbGVnYWN5X2lvX3JlcyA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQl1OCBvdXQ4ID0gMDsKKwkJCWlmICh2YWw4ICYgQVRfQ09NUEFUX1NFUlIpCisJCQkJb3V0OCA9IEFUX0NPTVBBVF9DTFJTRVJSOworCQkJaWYgKHZhbDggJiBBVF9DT01QQVRfSU9DSEspCisJCQkJb3V0OCB8PSBBVF9DT01QQVRfQ0xSSU9DSEs7CisJCQlpZiAob3V0OCA+IDApCisJCQkJX19kb19vdXRiKG91dDgsIFJFR19BVF9DT01QQVQpOworCQl9CisJfQorCisJLyogU2Vjb25kIGNsZWFyIGVycm9yIGZsYWdzIG9uIExQQyBicmlkZ2UgKi8KKwllZGFjX3BjaV9yZWFkX2J5dGUoZGV2LCBSRUdfSU9fQ1RSTF8xLCAmdmFsOCk7CisJaWYgKHZhbDggJiBJT19DVFJMXzFfQ0xFQVJfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfYnl0ZShkZXYsIFJFR19JT19DVFJMXzEsIHZhbDgpOworfQorCitzdGF0aWMgdm9pZCBhbWQ4MTExX2xwY19icmlkZ2VfZXhpdChzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pCit7CisJaWYgKGxlZ2FjeV9pb19yZXMpCisJCXJlbGVhc2VfcmVnaW9uKFJFR19BVF9DT01QQVQsIExFR0FDWV9OUl9QT1JUUyk7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfbHBjX2JyaWRnZV9jaGVjayhzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNfZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX2Rldl9pbmZvICpkZXZfaW5mbyA9IGVkYWNfZGV2LT5wdnRfaW5mbzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKwl1OCB2YWw4OworCisJZWRhY19wY2lfcmVhZF9ieXRlKGRldiwgUkVHX0lPX0NUUkxfMSwgJnZhbDgpOworCWlmICh2YWw4ICYgSU9fQ1RSTF8xX0NMRUFSX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkVycm9yKHMpIGluIElPIGNvbnRyb2wgcmVnaXN0ZXIgb24gJXMgZGV2aWNlXG4iLAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTFBDIEVSUjogJWQsIFBXMkxQQzogJWRcbiIsCisJCQkodmFsOCAmIElPX0NUUkxfMV9MUENfRVJSKSAhPSAwLAorCQkJKHZhbDggJiBJT19DVFJMXzFfUFcyTFBDKSAhPSAwKTsKKworCQl2YWw4IHw9IElPX0NUUkxfMV9DTEVBUl9NQVNLOworCQllZGFjX3BjaV93cml0ZV9ieXRlKGRldiwgUkVHX0lPX0NUUkxfMSwgdmFsOCk7CisKKwkJZWRhY19kZXZpY2VfaGFuZGxlX3VlKGVkYWNfZGV2LCAwLCAwLCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCWlmIChhdF9jb21wYXRfcmVnX2Jyb2tlbiA9PSAwKSB7CisJCXU4IG91dDggPSAwOworCQl2YWw4ID0gX19kb19pbmIoUkVHX0FUX0NPTVBBVCk7CisJCWlmICh2YWw4ICYgQVRfQ09NUEFUX1NFUlIpCisJCQlvdXQ4ID0gQVRfQ09NUEFUX0NMUlNFUlI7CisJCWlmICh2YWw4ICYgQVRfQ09NUEFUX0lPQ0hLKQorCQkJb3V0OCB8PSBBVF9DT01QQVRfQ0xSSU9DSEs7CisJCWlmIChvdXQ4ID4gMCkgeworCQkJX19kb19vdXRiKG91dDgsIFJFR19BVF9DT01QQVQpOworCQkJZWRhY19kZXZpY2VfaGFuZGxlX3VlKGVkYWNfZGV2LCAwLCAwLAorCQkJCQkJZWRhY19kZXYtPmN0bF9uYW1lKTsKKwkJfQorCX0KK30KKworLyogR2VuZXJhbCBkZXZpY2VzIHJlcHJlc2VudGVkIGJ5IGVkYWNfZGV2aWNlX2N0bF9pbmZvICovCitzdGF0aWMgc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gYW1kODExMV9kZXZpY2VzW10gPSB7CisJW0xQQ19CUklER0VdID0geworCQkuZXJyX2RldiA9IFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfTFBDLAorCQkuY3RsX25hbWUgPSAibHBjIiwKKwkJLmluaXQgPSBhbWQ4MTExX2xwY19icmlkZ2VfaW5pdCwKKwkJLmV4aXQgPSBhbWQ4MTExX2xwY19icmlkZ2VfZXhpdCwKKwkJLmNoZWNrID0gYW1kODExMV9scGNfYnJpZGdlX2NoZWNrLAorCX0sCisJezB9LAorfTsKKworLyogUENJIGNvbnRyb2xsZXJzIHJlcHJlc2VudGVkIGJ5IGVkYWNfcGNpX2N0bF9pbmZvICovCitzdGF0aWMgc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gYW1kODExMV9wY2lzW10gPSB7CisJW1BDSV9CUklER0VdID0geworCQkuZXJyX2RldiA9IFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJLAorCQkuY3RsX25hbWUgPSAiQU1EODExMV9QQ0lfQ29udHJvbGxlciIsCisJCS5pbml0ID0gYW1kODExMV9wY2lfYnJpZGdlX2luaXQsCisJCS5leGl0ID0gYW1kODExMV9wY2lfYnJpZGdlX2V4aXQsCisJCS5jaGVjayA9IGFtZDgxMTFfcGNpX2JyaWRnZV9jaGVjaywKKwl9LAorCXswfSwKK307CisKK3N0YXRpYyBpbnQgYW1kODExMV9kZXZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gKmRldl9pbmZvID0gJmFtZDgxMTFfZGV2aWNlc1tpZC0+ZHJpdmVyX2RhdGFdOworCisJZGV2X2luZm8tPmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELAorCQkJCQlkZXZfaW5mby0+ZXJyX2RldiwgTlVMTCk7CisKKwlpZiAoIWRldl9pbmZvLT5kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFREFDIGRldmljZSBub3QgZm91bmQ6IgorCQkJInZlbmRvciAleCwgZGV2aWNlICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9pbmZvLT5kZXYpKSB7CisJCXBjaV9kZXZfcHV0KGRldl9pbmZvLT5kZXYpOworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBlbmFibGU6IgorCQkJInZlbmRvciAleCwgZGV2aWNlICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyoKKwkgKiB3ZSBkbyBub3QgYWxsb2NhdGUgZXh0cmEgcHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yCisJICogZWRhY19kZXZpY2VfY3RsX2luZm8sIGJ1dCBtYWtlIHVzZSBvZiBleGlzdGluZworCSAqIG9uZSBpbnN0ZWFkLgorCSovCisJZGV2X2luZm8tPmVkYWNfaWR4ID0gZWRhY19kZXZfaWR4Kys7CisJZGV2X2luZm8tPmVkYWNfZGV2ID0KKwkJZWRhY19kZXZpY2VfYWxsb2NfY3RsX2luZm8oMCwgZGV2X2luZm8tPmN0bF9uYW1lLCAxLAorCQkJCQkgICBOVUxMLCAwLCAwLAorCQkJCQkgICBOVUxMLCAwLCBkZXZfaW5mby0+ZWRhY19pZHgpOworCWlmICghZGV2X2luZm8tPmVkYWNfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9pbmZvLT5lZGFjX2Rldi0+cHZ0X2luZm8gPSBkZXZfaW5mbzsKKwlkZXZfaW5mby0+ZWRhY19kZXYtPmRldiA9ICZkZXZfaW5mby0+ZGV2LT5kZXY7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5tb2RfbmFtZSA9IEFNRDgxMTFfRURBQ19NT0RfU1RSOworCWRldl9pbmZvLT5lZGFjX2Rldi0+Y3RsX25hbWUgPSBkZXZfaW5mby0+Y3RsX25hbWU7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9pbmZvLT5kZXYtPmRldi5idXNfaWQ7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkKKwkJZGV2X2luZm8tPmVkYWNfZGV2LT5lZGFjX2NoZWNrID0gZGV2X2luZm8tPmNoZWNrOworCisJaWYgKGRldl9pbmZvLT5pbml0KQorCQlkZXZfaW5mby0+aW5pdChkZXZfaW5mbyk7CisKKwlpZiAoZWRhY19kZXZpY2VfYWRkX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYpID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhZGQgZWRhY19kZXYgZm9yICVzXG4iLAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJZWRhY19kZXZpY2VfZnJlZV9jdGxfaW5mbyhkZXZfaW5mby0+ZWRhY19kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJhZGRlZCBvbmUgZWRhY19kZXYgb24gQU1EODExMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQlkZXZfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfZGV2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX2Rldl9pbmZvICpkZXZfaW5mbzsKKworCWZvciAoZGV2X2luZm8gPSBhbWQ4MTExX2RldmljZXM7IGRldl9pbmZvLT5lcnJfZGV2OyBkZXZfaW5mbysrKQorCQlpZiAoZGV2X2luZm8tPmRldi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlKQorCQkJYnJlYWs7CisKKwlpZiAoIWRldl9pbmZvLT5lcnJfZGV2KQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybjsKKworCWlmIChkZXZfaW5mby0+ZWRhY19kZXYpIHsKKwkJZWRhY19kZXZpY2VfZGVsX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYtPmRldik7CisJCWVkYWNfZGV2aWNlX2ZyZWVfY3RsX2luZm8oZGV2X2luZm8tPmVkYWNfZGV2KTsKKwl9CisKKwlpZiAoZGV2X2luZm8tPmV4aXQpCisJCWRldl9pbmZvLT5leGl0KGRldl9pbmZvKTsKKworCXBjaV9kZXZfcHV0KGRldl9pbmZvLT5kZXYpOworfQorCitzdGF0aWMgaW50IGFtZDgxMTFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbyA9ICZhbWQ4MTExX3BjaXNbaWQtPmRyaXZlcl9kYXRhXTsKKworCXBjaV9pbmZvLT5kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKKwkJCQkJcGNpX2luZm8tPmVycl9kZXYsIE5VTEwpOworCisJaWYgKCFwY2lfaW5mby0+ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRURBQyBkZXZpY2Ugbm90IGZvdW5kOiIKKwkJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJCVBDSV9WRU5ET1JfSURfQU1ELCBwY2lfaW5mby0+ZXJyX2RldiwKKwkJCXBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfaW5mby0+ZGV2KSkgeworCQlwY2lfZGV2X3B1dChwY2lfaW5mby0+ZGV2KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZW5hYmxlOiIKKwkJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJCVBDSV9WRU5ET1JfSURfQU1ELCBwY2lfaW5mby0+ZXJyX2RldiwKKwkJCXBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogd2UgZG8gbm90IGFsbG9jYXRlIGV4dHJhIHByaXZhdGUgc3RydWN0dXJlIGZvcgorCSAqIGVkYWNfcGNpX2N0bF9pbmZvLCBidXQgbWFrZSB1c2Ugb2YgZXhpc3RpbmcKKwkgKiBvbmUgaW5zdGVhZC4KKwkqLworCXBjaV9pbmZvLT5lZGFjX2lkeCA9IGVkYWNfcGNpX2FsbG9jX2luZGV4KCk7CisJcGNpX2luZm8tPmVkYWNfZGV2ID0gZWRhY19wY2lfYWxsb2NfY3RsX2luZm8oMCwgcGNpX2luZm8tPmN0bF9uYW1lKTsKKwlpZiAoIXBjaV9pbmZvLT5lZGFjX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2lfaW5mby0+ZWRhY19kZXYtPnB2dF9pbmZvID0gcGNpX2luZm87CisJcGNpX2luZm8tPmVkYWNfZGV2LT5kZXYgPSAmcGNpX2luZm8tPmRldi0+ZGV2OworCXBjaV9pbmZvLT5lZGFjX2Rldi0+bW9kX25hbWUgPSBBTUQ4MTExX0VEQUNfTU9EX1NUUjsKKwlwY2lfaW5mby0+ZWRhY19kZXYtPmN0bF9uYW1lID0gcGNpX2luZm8tPmN0bF9uYW1lOworCXBjaV9pbmZvLT5lZGFjX2Rldi0+ZGV2X25hbWUgPSBwY2lfaW5mby0+ZGV2LT5kZXYuYnVzX2lkOworCisJaWYgKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX1BPTEwpCisJCXBjaV9pbmZvLT5lZGFjX2Rldi0+ZWRhY19jaGVjayA9IHBjaV9pbmZvLT5jaGVjazsKKworCWlmIChwY2lfaW5mby0+aW5pdCkKKwkJcGNpX2luZm8tPmluaXQocGNpX2luZm8pOworCisJaWYgKGVkYWNfcGNpX2FkZF9kZXZpY2UocGNpX2luZm8tPmVkYWNfZGV2LCBwY2lfaW5mby0+ZWRhY19pZHgpID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhZGQgZWRhY19wY2kgZm9yICVzXG4iLAorCQkJcGNpX2luZm8tPmN0bF9uYW1lKTsKKwkJZWRhY19wY2lfZnJlZV9jdGxfaW5mbyhwY2lfaW5mby0+ZWRhY19kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJhZGRlZCBvbmUgZWRhY19wY2kgb24gQU1EODExMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJUENJX1ZFTkRPUl9JRF9BTUQsIHBjaV9pbmZvLT5lcnJfZGV2LAorCQlwY2lfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbzsKKworCWZvciAocGNpX2luZm8gPSBhbWQ4MTExX3BjaXM7IHBjaV9pbmZvLT5lcnJfZGV2OyBwY2lfaW5mbysrKQorCQlpZiAocGNpX2luZm8tPmRldi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlKQorCQkJYnJlYWs7CisKKwlpZiAoIXBjaV9pbmZvLT5lcnJfZGV2KQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybjsKKworCWlmIChwY2lfaW5mby0+ZWRhY19kZXYpIHsKKwkJZWRhY19wY2lfZGVsX2RldmljZShwY2lfaW5mby0+ZWRhY19kZXYtPmRldik7CisJCWVkYWNfcGNpX2ZyZWVfY3RsX2luZm8ocGNpX2luZm8tPmVkYWNfZGV2KTsKKwl9CisKKwlpZiAocGNpX2luZm8tPmV4aXQpCisJCXBjaV9pbmZvLT5leGl0KHBjaV9pbmZvKTsKKworCXBjaV9kZXZfcHV0KHBjaV9pbmZvLT5kZXYpOworfQorCisvKiBQQ0kgRGV2aWNlIElEIHRhbGJlIGZvciBnZW5lcmFsIEVEQUMgZGV2aWNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kODExMV9lZGFjX2Rldl90YmxbXSA9IHsKKwl7CisJUENJX1ZFTkRfREVWKEFNRCwgODExMV9MUEMpLAorCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCS5jbGFzcyA9IDAsCisJLmNsYXNzX21hc2sgPSAwLAorCS5kcml2ZXJfZGF0YSA9IExQQ19CUklER0UsCisJfSwKKwl7CisJMCwKKwl9CQkJLyogdGFibGUgaXMgTlVMTC10ZXJtaW5hdGVkICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZDgxMTFfZWRhY19kZXZfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDgxMTFfZWRhY19kZXZfZHJpdmVyID0geworCS5uYW1lID0gIkFNRDgxMTFfRURBQ19ERVYiLAorCS5wcm9iZSA9IGFtZDgxMTFfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBhbWQ4MTExX2Rldl9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODExMV9lZGFjX2Rldl90YmwsCit9OworCisvKiBQQ0kgRGV2aWNlIElEIHRhYmxlIGZvciBFREFDIFBDSSBjb250cm9sbGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kODExMV9lZGFjX3BjaV90YmxbXSA9IHsKKwl7CisJUENJX1ZFTkRfREVWKEFNRCwgODExMV9QQ0kpLAorCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCS5jbGFzcyA9IDAsCisJLmNsYXNzX21hc2sgPSAwLAorCS5kcml2ZXJfZGF0YSA9IFBDSV9CUklER0UsCisJfSwKKwl7CisJMCwKKwl9CQkJLyogdGFibGUgaXMgTlVMTC10ZXJtaW5hdGVkICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZDgxMTFfZWRhY19wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDgxMTFfZWRhY19wY2lfZHJpdmVyID0geworCS5uYW1lID0gIkFNRDgxMTFfRURBQ19QQ0kiLAorCS5wcm9iZSA9IGFtZDgxMTFfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBhbWQ4MTExX3BjaV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODExMV9lZGFjX3BjaV90YmwsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbWQ4MTExX2VkYWNfaW5pdCh2b2lkKQoreworCWludCB2YWw7CisKKwlwcmludGsoS0VSTl9JTkZPICJBTUQ4MTExIEVEQUMgZHJpdmVyICIJQU1EODExMV9FREFDX1JFVklTSU9OICJcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlx0KGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuXG4iKTsKKworCS8qIE9ubHkgUE9MTCBtb2RlIHN1cHBvcnRlZCBzbyBmYXIgKi8KKwllZGFjX29wX3N0YXRlID0gRURBQ19PUFNUQVRFX1BPTEw7CisKKwl2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTExX2VkYWNfZGV2X2RyaXZlcik7CisJdmFsIHw9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFtZDgxMTFfZWRhY19wY2lfZHJpdmVyKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbWQ4MTExX2VkYWNfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kODExMV9lZGFjX3BjaV9kcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kODExMV9lZGFjX2Rldl9kcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0KGFtZDgxMTFfZWRhY19pbml0KTsKK21vZHVsZV9leGl0KGFtZDgxMTFfZWRhY19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+XG4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQU1EODExMSBIeXBlclRyYW5zcG9ydCBJL08gSHViIEVEQUMga2VybmVsIG1vZHVsZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Nzk0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvYW1kODExMV9lZGFjLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBhbWQ4MTExX2VkYWMuaCwgRURBQyBkZWZzIGZvciBBTUQ4MTExIGh5cGVydHJhbnNwb3J0IGNoaXAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BTUQ4MTExX0VEQUNfSF8KKyNkZWZpbmUgX0FNRDgxMTFfRURBQ19IXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0kgQnJpZGdlIFN0YXR1cyBhbmQgQ29tbWFuZCBSZWdpc3RlciwgRGV2QToweDA0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfUENJX1NUU0NNRAkweDA0CitlbnVtIHBjaV9zdHNjbWRfYml0cyB7CisJUENJX1NUU0NNRF9TU0UJCT0gQklUKDMwKSwKKwlQQ0lfU1RTQ01EX1JNQQkJPSBCSVQoMjkpLAorCVBDSV9TVFNDTURfUlRBCQk9IEJJVCgyOCksCisJUENJX1NUU0NNRF9TRVJSRU4JPSBCSVQoOCksCisJUENJX1NUU0NNRF9DTEVBUl9NQVNLCT0gKFBDSV9TVFNDTURfU1NFIHwKKwkJCQkgICBQQ0lfU1RTQ01EX1JNQSB8CisJCQkJICAgUENJX1NUU0NNRF9SVEEpCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0kgQnJpZGdlIE1lbW9yeSBCYXNlLUxpbWl0IFJlZ2lzdGVyLCBEZXZBOjB4MWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19NRU1fTElNICAgICAweDFjCitlbnVtIG1lbV9saW1pdF9iaXRzIHsKKwlNRU1fTElNSVRfRFBFICAgPSBCSVQoMzEpLAorCU1FTV9MSU1JVF9SU0UgICA9IEJJVCgzMCksCisJTUVNX0xJTUlUX1JNQSAgID0gQklUKDI5KSwKKwlNRU1fTElNSVRfUlRBICAgPSBCSVQoMjgpLAorCU1FTV9MSU1JVF9TVEEgICA9IEJJVCgyNyksCisJTUVNX0xJTUlUX01EUEUgID0gQklUKDI0KSwKKwlNRU1fTElNSVRfQ0xFQVJfTUFTSyAgPSAoTUVNX0xJTUlUX0RQRSB8CisJCQkJIE1FTV9MSU1JVF9SU0UgfAorCQkJCSBNRU1fTElNSVRfUk1BIHwKKwkJCQkgTUVNX0xJTUlUX1JUQSB8CisJCQkJIE1FTV9MSU1JVF9TVEEgfAorCQkJCSBNRU1fTElNSVRfTURQRSkKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCUh5cGVyVHJhbnNwb3J0IExpbmsgQ29udHJvbCBSZWdpc3RlciwgRGV2QToweGM0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfSFRfTElOSwkweGM0CitlbnVtIGh0X2xpbmtfYml0cyB7CisJSFRfTElOS19MS0ZBSUwJPSBCSVQoNCksCisJSFRfTElOS19DUkNGRU4JPSBCSVQoMSksCisJSFRfTElOS19DTEVBUl9NQVNLID0gKEhUX0xJTktfTEtGQUlMKQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJUENJIEJyaWRnZSBJbnRlcnJ1cHQgYW5kIEJyaWRnZSBDb250cm9sLCBEZXZBOjB4M2MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19QQ0lfSU5UQlJHX0NUUkwJMHgzYworZW51bSBwY2lfaW50YnJnX2N0cmxfYml0cyB7CisJUENJX0lOVEJSR19DVFJMX0RUU0VSUkVOCT0gQklUKDI3KSwKKwlQQ0lfSU5UQlJHX0NUUkxfRFRTVEFUCQk9IEJJVCgyNiksCisJUENJX0lOVEJSR19DVFJMX01BUlNQCQk9IEJJVCgyMSksCisJUENJX0lOVEJSR19DVFJMX1NFUlJFTgkJPSBCSVQoMTcpLAorCVBDSV9JTlRCUkdfQ1RSTF9QRVJFTgkJPSBCSVQoMTYpLAorCVBDSV9JTlRCUkdfQ1RSTF9DTEVBUl9NQVNLCT0gKFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQpLAorCVBDSV9JTlRCUkdfQ1RSTF9QT0xMX01BU0sJPSAoUENJX0lOVEJSR19DVFJMX0RUU0VSUkVOIHwKKwkJCQkJICAgUENJX0lOVEJSR19DVFJMX01BUlNQIHwKKwkJCQkJICAgUENJX0lOVEJSR19DVFJMX1NFUlJFTikKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlJL08gQ29udHJvbCAxIFJlZ2lzdGVyLCBEZXZCOjB4NDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19JT19DVFJMXzEgMHg0MAorZW51bSBpb19jdHJsXzFfYml0cyB7CisJSU9fQ1RSTF8xX05NSU9ORVJSCT0gQklUKDcpLAorCUlPX0NUUkxfMV9MUENfRVJSCT0gQklUKDYpLAorCUlPX0NUUkxfMV9QVzJMUEMJPSBCSVQoMSksCisJSU9fQ1RSTF8xX0NMRUFSX01BU0sJPSAoSU9fQ1RSTF8xX0xQQ19FUlIgfCBJT19DVFJMXzFfUFcyTFBDKQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCUxlZ2FjeSBJL08gU3BhY2UgUmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfQVRfQ09NUEFUIDB4NjEKK2VudW0gYXRfY29tcGF0X2JpdHMgeworCUFUX0NPTVBBVF9TRVJSCQk9IEJJVCg3KSwKKwlBVF9DT01QQVRfSU9DSEsJCT0gQklUKDYpLAorCUFUX0NPTVBBVF9DTFJJT0NISwk9IEJJVCgzKSwKKwlBVF9DT01QQVRfQ0xSU0VSUgk9IEJJVCgyKSwKK307CisKK3N0cnVjdCBhbWQ4MTExX2Rldl9pbmZvIHsKKwl1MTYgZXJyX2RldjsJLyogUENJIERldmljZSBJRCAqLworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJaW50IGVkYWNfaWR4OwkvKiBkZXZpY2UgaW5kZXggKi8KKwljaGFyICpjdGxfbmFtZTsKKwlzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNfZGV2OworCXZvaWQgKCppbml0KShzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpleGl0KShzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpjaGVjaykoc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGFjX2Rldik7Cit9OworCitzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyB7CisJdTE2IGVycl9kZXY7CS8qIFBDSSBEZXZpY2UgSUQgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWludCBlZGFjX2lkeDsJLyogcGNpIGluZGV4ICovCisJY29uc3QgY2hhciAqY3RsX25hbWU7CisJc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2RldjsKKwl2b2lkICgqaW5pdCkoc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gKmRldl9pbmZvKTsKKwl2b2lkICgqZXhpdCkoc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gKmRldl9pbmZvKTsKKwl2b2lkICgqY2hlY2spKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqZWRhY19kZXYpOworfTsKKworI2VuZGlmIC8qIF9BTUQ4MTExX0VEQUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDgzYjMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL2FtZDgxMzFfZWRhYy5jCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogYW1kODEzMV9lZGFjLmMsIEFNRDgxMzEgaHlwZXJ0cmFuc3BvcnQgY2hpcCBFREFDIGtlcm5lbCBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZWRhYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKworI2luY2x1ZGUgImVkYWNfY29yZS5oIgorI2luY2x1ZGUgImVkYWNfbW9kdWxlLmgiCisjaW5jbHVkZSAiYW1kODEzMV9lZGFjLmgiCisKKyNkZWZpbmUgQU1EODEzMV9FREFDX1JFVklTSU9OCSIgVmVyOiAxLjAuMCAiIF9fREFURV9fCisjZGVmaW5lIEFNRDgxMzFfRURBQ19NT0RfU1RSCSJhbWQ4MTMxX2VkYWMiCisKKy8qIFdyYXBwZXIgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KK3N0YXRpYyB2b2lkIGVkYWNfcGNpX3JlYWRfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyICp2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODEzMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBSZWFkIEVycm9yIGF0IDB4JXhcbiIsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVkYWNfcGNpX3dyaXRlX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZWcsIHUzMiB2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJlZywgdmFsMzIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSIEFNRDgxMzFfRURBQ19NT0RfU1RSCisJCQkiIFBDSSBBY2Nlc3MgV3JpdGUgRXJyb3IgYXQgMHgleFxuIiwgcmVnKTsKK30KKworc3RhdGljIGNoYXIgKiBjb25zdCBicmlkZ2Vfc3RyW10gPSB7CisJW05PUlRIX0FdID0gIk5PUlRIIEEiLAorCVtOT1JUSF9CXSA9ICJOT1JUSCBCIiwKKwlbU09VVEhfQV0gPSAiU09VVEggQSIsCisJW1NPVVRIX0JdID0gIlNPVVRIIEIiLAorCVtOT19CUklER0VdID0gIk5PIEJSSURHRSIsCit9OworCisvKiBTdXBwb3J0IHVwIHRvIHR3byBBTUQ4MTMxIGNoaXBzZXRzIG9uIGEgcGxhdGZvcm0gKi8KK3N0YXRpYyBzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyBhbWQ4MTMxX2RldmljZXNbXSA9IHsKKwl7CisJLmluc3QgPSBOT1JUSF9BLAorCS5kZXZmbiA9IERFVkZOX1BDSVhfQlJJREdFX05PUlRIX0EsCisJLmN0bF9uYW1lID0gIkFNRDgxMzFfUENJWF9OT1JUSF9BIiwKKwl9LAorCXsKKwkuaW5zdCA9IE5PUlRIX0IsCisJLmRldmZuID0gREVWRk5fUENJWF9CUklER0VfTk9SVEhfQiwKKwkuY3RsX25hbWUgPSAiQU1EODEzMV9QQ0lYX05PUlRIX0IiLAorCX0sCisJeworCS5pbnN0ID0gU09VVEhfQSwKKwkuZGV2Zm4gPSBERVZGTl9QQ0lYX0JSSURHRV9TT1VUSF9BLAorCS5jdGxfbmFtZSA9ICJBTUQ4MTMxX1BDSVhfU09VVEhfQSIsCisJfSwKKwl7CisJLmluc3QgPSBTT1VUSF9CLAorCS5kZXZmbiA9IERFVkZOX1BDSVhfQlJJREdFX1NPVVRIX0IsCisJLmN0bF9uYW1lID0gIkFNRDgxMzFfUENJWF9TT1VUSF9CIiwKKwl9LAorCXsuaW5zdCA9IE5PX0JSSURHRSx9LAorfTsKKworc3RhdGljIHZvaWQgYW1kODEzMV9wY2l4X2luaXQoc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvKQoreworCXUzMiB2YWwzMjsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKworCS8qIEZpcnN0IGNsZWFyIGVycm9yIGRldGVjdGlvbiBmbGFncyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgdmFsMzIpOworCisJLyogQ2xlYXIgRGlzY2FyZCBUaW1lciBUaW1lZG91dCBmbGFnICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBJTlRfQ1RMUl9EVFMpCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkvKiBDbGVhciBDUkMgRXJyb3IgZmxhZyBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSkKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgdmFsMzIpOworCisJLyogQ2xlYXIgQ1JDIEVycm9yIGZsYWcgb24gbGluayBzaWRlIEIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsICZ2YWwzMik7CisJaWYgKHZhbDMyICYgTE5LX0NUUkxfQ1JDRVJSX0IpCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsIHZhbDMyKTsKKworCS8qCisJICogVGhlbiBlbmFibGUgYWxsIGVycm9yIGRldGVjdGlvbnMuCisJICoKKwkgKiBTZXR1cCBEaXNjYXJkIFRpbWVyIFN5bmMgRmxvb2QgRW5hYmxlLAorCSAqIFN5c3RlbSBFcnJvciBFbmFibGUgYW5kIFBhcml0eSBFcnJvciBFbmFibGUuCisJICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwl2YWwzMiB8PSBJTlRfQ1RMUl9QRVJSIHwgSU5UX0NUTFJfU0VSUiB8IElOVF9DVExSX0RUU0U7CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfSU5UX0NUTFIsIHZhbDMyKTsKKworCS8qIEVuYWJsZSBvdmVyYWxsIFNFUlIgRXJyb3IgZGV0ZWN0aW9uICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19TVFNfQ01ELCAmdmFsMzIpOworCXZhbDMyIHw9IFNUU19DTURfU0VSUkVOOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1NUU19DTUQsIHZhbDMyKTsKKworCS8qIFNldHVwIENSQyBGbG9vZCBFbmFibGUgZm9yIGxpbmsgc2lkZSBBICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9BLCAmdmFsMzIpOworCXZhbDMyIHw9IExOS19DVFJMX0NSQ0ZFTjsKKwllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9BLCB2YWwzMik7CisKKwkvKiBTZXR1cCBDUkMgRmxvb2QgRW5hYmxlIGZvciBsaW5rIHNpZGUgQiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgJnZhbDMyKTsKKwl2YWwzMiB8PSBMTktfQ1RSTF9DUkNGRU47CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgdmFsMzIpOworfQorCitzdGF0aWMgdm9pZCBhbWQ4MTMxX3BjaXhfZXhpdChzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pCit7CisJdTMyIHZhbDMyOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkZXZfaW5mby0+ZGV2OworCisJLyogRGlzYWJsZSBTRVJSLCBQRVJSIGFuZCBEVFNFIEVycm9yIGRldGVjdGlvbiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSU5UX0NUTFIsICZ2YWwzMik7CisJdmFsMzIgJj0gfihJTlRfQ1RMUl9QRVJSIHwgSU5UX0NUTFJfU0VSUiB8IElOVF9DVExSX0RUU0UpOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkvKiBEaXNhYmxlIG92ZXJhbGwgU3lzdGVtIEVycm9yIGRldGVjdGlvbiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfU1RTX0NNRCwgJnZhbDMyKTsKKwl2YWwzMiAmPSB+U1RTX0NNRF9TRVJSRU47CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfU1RTX0NNRCwgdmFsMzIpOworCisJLyogRGlzYWJsZSBDUkMgU3luYyBGbG9vZCBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwl2YWwzMiAmPSB+TE5LX0NUUkxfQ1JDRkVOOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0EsIHZhbDMyKTsKKworCS8qIERpc2FibGUgQ1JDIFN5bmMgRmxvb2Qgb24gbGluayBzaWRlIEIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsICZ2YWwzMik7CisJdmFsMzIgJj0gfkxOS19DVFJMX0NSQ0ZFTjsKKwllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9CLCB2YWwzMik7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMzFfcGNpeF9jaGVjayhzdHJ1Y3QgZWRhY19wY2lfY3RsX2luZm8gKmVkYWNfZGV2KQoreworCXN0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvICpkZXZfaW5mbyA9IGVkYWNfZGV2LT5wdnRfaW5mbzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKwl1MzIgdmFsMzI7CisKKwkvKiBDaGVjayBQQ0ktWCBCcmlkZ2UgTWVtb3J5IEJhc2UtTGltaXQgUmVnaXN0ZXIgZm9yIGVycm9ycyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfTUFTSykgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBtZW0gbGltaXQgcmVnaXN0ZXIgIgorCQkJIm9uICVzIGJyaWRnZVxuIiwgZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRFBFOiAlZCwgUlNFOiAlZCwgUk1BOiAlZFxuIgorCQkJIlJUQTogJWQsIFNUQTogJWQsIE1EUEU6ICVkXG4iLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfRFBFLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUlNFLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUk1BLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUlRBLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfU1RBLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfTURQRSk7CisKKwkJdmFsMzIgfD0gTUVNX0xJTUlUX01BU0s7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX01FTV9MSU0sIHZhbDMyKTsKKworCQllZGFjX3BjaV9oYW5kbGVfbnBlKGVkYWNfZGV2LCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCS8qIENoZWNrIGlmIERpc2NhcmQgVGltZXIgdGltZWQgb3V0ICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBJTlRfQ1RMUl9EVFMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRXJyb3IocykgaW4gaW50ZXJydXB0IGFuZCBjb250cm9sIHJlZ2lzdGVyICIKKwkJCSJvbiAlcyBicmlkZ2VcbiIsIGRldl9pbmZvLT5jdGxfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIkRUUzogJWRcbiIsIHZhbDMyICYgSU5UX0NUTFJfRFRTKTsKKworCQl2YWwzMiB8PSBJTlRfQ1RMUl9EVFM7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9CisKKwkvKiBDaGVjayBpZiBDUkMgZXJyb3IgaGFwcGVucyBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSkgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBsaW5rIGNvbmYgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgIgorCQkJIm9uICVzIGJyaWRnZVxuIiwgZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1JDRVJSOiAlZFxuIiwgdmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSk7CisKKwkJdmFsMzIgfD0gTE5LX0NUUkxfQ1JDRVJSX0E7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0EsIHZhbDMyKTsKKworCQllZGFjX3BjaV9oYW5kbGVfbnBlKGVkYWNfZGV2LCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCS8qIENoZWNrIGlmIENSQyBlcnJvciBoYXBwZW5zIG9uIGxpbmsgc2lkZSBCICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9CLCAmdmFsMzIpOworCWlmICh2YWwzMiAmIExOS19DVFJMX0NSQ0VSUl9CKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVycm9yKHMpIGluIGxpbmsgY29uZiBhbmQgY29udHJvbCByZWdpc3RlciAiCisJCQkib24gJXMgYnJpZGdlXG4iLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJDUkNFUlI6ICVkXG4iLCB2YWwzMiAmIExOS19DVFJMX0NSQ0VSUl9CKTsKKworCQl2YWwzMiB8PSBMTktfQ1RSTF9DUkNFUlJfQjsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGFtZDgxMzFfaW5mbyBhbWQ4MTMxX2NoaXBzZXQgPSB7CisJLmVycl9kZXYgPSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMsCisJLmRldmljZXMgPSBhbWQ4MTMxX2RldmljZXMsCisJLmluaXQgPSBhbWQ4MTMxX3BjaXhfaW5pdCwKKwkuZXhpdCA9IGFtZDgxMzFfcGNpeF9leGl0LAorCS5jaGVjayA9IGFtZDgxMzFfcGNpeF9jaGVjaywKK307CisKKy8qCisgKiBUaGVyZSBhcmUgNCBQQ0lYIEJyaWRnZXMgb24gQVRDQS02MTAxIHRoYXQgc2hhcmUgdGhlIHNhbWUgUENJIERldmljZSBJRCwKKyAqIHNvIGFtZDgxMzFfcHJvYmUoKSB3b3VsZCBiZSBjYWxsZWQgYnkga2VybmVsIDQgdGltZXMsIHdpdGggZGlmZmVyZW50CisgKiBhZGRyZXNzIG9mIHBjaV9kZXYgZm9yIGVhY2ggb2YgdGhlbSBlYWNoIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQgYW1kODEzMV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvOworCisJZm9yIChkZXZfaW5mbyA9IGFtZDgxMzFfY2hpcHNldC5kZXZpY2VzOyBkZXZfaW5mby0+aW5zdCAhPSBOT19CUklER0U7CisJCWRldl9pbmZvKyspCisJCWlmIChkZXZfaW5mby0+ZGV2Zm4gPT0gZGV2LT5kZXZmbikKKwkJCWJyZWFrOworCisJaWYgKGRldl9pbmZvLT5pbnN0ID09IE5PX0JSSURHRSkgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogV2UgY2FuJ3QgY2FsbCBwY2lfZ2V0X2RldmljZSgpIGFzIHdlIGFyZSB1c2VkIHRvIGRvIGJlY2F1c2UKKwkgKiB0aGVyZSBhcmUgNCBvZiB0aGVtIGJ1dCBwY2lfZGV2X2dldCgpIGluc3RlYWQuCisJICovCisJZGV2X2luZm8tPmRldiA9IHBjaV9kZXZfZ2V0KGRldik7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2luZm8tPmRldikpIHsKKwkJcGNpX2Rldl9wdXQoZGV2X2luZm8tPmRldik7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGVuYWJsZToiCisJCQkidmVuZG9yICV4LCBkZXZpY2UgJXgsIGRldmZuICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGFtZDgxMzFfY2hpcHNldC5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmRldmZuLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIHdlIGRvIG5vdCBhbGxvY2F0ZSBleHRyYSBwcml2YXRlIHN0cnVjdHVyZSBmb3IKKwkgKiBlZGFjX3BjaV9jdGxfaW5mbywgYnV0IG1ha2UgdXNlIG9mIGV4aXN0aW5nCisJICogb25lIGluc3RlYWQuCisJICovCisJZGV2X2luZm8tPmVkYWNfaWR4ID0gZWRhY19wY2lfYWxsb2NfaW5kZXgoKTsKKwlkZXZfaW5mby0+ZWRhY19kZXYgPSBlZGFjX3BjaV9hbGxvY19jdGxfaW5mbygwLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCWlmICghZGV2X2luZm8tPmVkYWNfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9pbmZvLT5lZGFjX2Rldi0+cHZ0X2luZm8gPSBkZXZfaW5mbzsKKwlkZXZfaW5mby0+ZWRhY19kZXYtPmRldiA9ICZkZXZfaW5mby0+ZGV2LT5kZXY7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5tb2RfbmFtZSA9IEFNRDgxMzFfRURBQ19NT0RfU1RSOworCWRldl9pbmZvLT5lZGFjX2Rldi0+Y3RsX25hbWUgPSBkZXZfaW5mby0+Y3RsX25hbWU7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9pbmZvLT5kZXYtPmRldi5idXNfaWQ7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkKKwkJZGV2X2luZm8tPmVkYWNfZGV2LT5lZGFjX2NoZWNrID0gYW1kODEzMV9jaGlwc2V0LmNoZWNrOworCisJaWYgKGFtZDgxMzFfY2hpcHNldC5pbml0KQorCQlhbWQ4MTMxX2NoaXBzZXQuaW5pdChkZXZfaW5mbyk7CisKKwlpZiAoZWRhY19wY2lfYWRkX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYsIGRldl9pbmZvLT5lZGFjX2lkeCkgPiAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIGVkYWNfcGNpX2FkZF9kZXZpY2UoKSBmb3IgJXNcbiIsCisJCQlkZXZfaW5mby0+Y3RsX25hbWUpOworCQllZGFjX3BjaV9mcmVlX2N0bF9pbmZvKGRldl9pbmZvLT5lZGFjX2Rldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImFkZGVkIG9uZSBkZXZpY2Ugb24gQU1EODEzMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgZGV2Zm4gJXgsIG5hbWUgJXNcbiIsCisJCVBDSV9WRU5ET1JfSURfQU1ELCBhbWQ4MTMxX2NoaXBzZXQuZXJyX2RldiwKKwkJZGV2X2luZm8tPmRldmZuLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMzFfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvOworCisJZm9yIChkZXZfaW5mbyA9IGFtZDgxMzFfY2hpcHNldC5kZXZpY2VzOyBkZXZfaW5mby0+aW5zdCAhPSBOT19CUklER0U7CisJCWRldl9pbmZvKyspCisJCWlmIChkZXZfaW5mby0+ZGV2Zm4gPT0gZGV2LT5kZXZmbikKKwkJCWJyZWFrOworCisJaWYgKGRldl9pbmZvLT5pbnN0ID09IE5PX0JSSURHRSkgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm47CisKKwlpZiAoZGV2X2luZm8tPmVkYWNfZGV2KSB7CisJCWVkYWNfcGNpX2RlbF9kZXZpY2UoZGV2X2luZm8tPmVkYWNfZGV2LT5kZXYpOworCQllZGFjX3BjaV9mcmVlX2N0bF9pbmZvKGRldl9pbmZvLT5lZGFjX2Rldik7CisJfQorCisJaWYgKGFtZDgxMzFfY2hpcHNldC5leGl0KQorCQlhbWQ4MTMxX2NoaXBzZXQuZXhpdChkZXZfaW5mbyk7CisKKwlwY2lfZGV2X3B1dChkZXZfaW5mby0+ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFtZDgxMzFfZWRhY19wY2lfdGJsW10gPSB7CisJeworCVBDSV9WRU5EX0RFVihBTUQsIDgxMzFfQlJJREdFKSwKKwkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkuY2xhc3MgPSAwLAorCS5jbGFzc19tYXNrID0gMCwKKwkuZHJpdmVyX2RhdGEgPSAwLAorCX0sCisJeworCTAsCisJfQkJCS8qIHRhYmxlIGlzIE5VTEwtdGVybWluYXRlZCAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ4MTMxX2VkYWNfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWQ4MTMxX2VkYWNfZHJpdmVyID0geworCS5uYW1lID0gQU1EODEzMV9FREFDX01PRF9TVFIsCisJLnByb2JlID0gYW1kODEzMV9wcm9iZSwKKwkucmVtb3ZlID0gYW1kODEzMV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODEzMV9lZGFjX3BjaV90YmwsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbWQ4MTMxX2VkYWNfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkFNRDgxMzEgRURBQyBkcml2ZXIgIiBBTUQ4MTMxX0VEQUNfUkVWSVNJT04gIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXHQoYykgMjAwOCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy5cbiIpOworCisJLyogT25seSBQT0xMIG1vZGUgc3VwcG9ydGVkIHNvIGZhciAqLworCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfUE9MTDsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTMxX2VkYWNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFtZDgxMzFfZWRhY19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTMxX2VkYWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYW1kODEzMV9lZGFjX2luaXQpOworbW9kdWxlX2V4aXQoYW1kODEzMV9lZGFjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDYW8gUWluZ3RhbyA8cWluZ3Rhby5jYW9Ad2luZHJpdmVyLmNvbT5cbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCBFREFDIGtlcm5lbCBtb2R1bGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGUwZDFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL2FtZDgxMzFfZWRhYy5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogYW1kODEzMV9lZGFjLmgsIEVEQUMgZGVmcyBmb3IgQU1EODEzMSBoeXBlcnRyYW5zcG9ydCBjaGlwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIEF1dGhvcnM6CUNhbyBRaW5ndGFvIDxxaW5ndGFvLmNhb0B3aW5kcml2ZXIuY29tPgorICogCQlCZW5qYW1pbiBXYWxzaCA8YmVuamFtaW4ud2Fsc2hAd2luZHJpdmVyLmNvbT4KKyAqIAkJSHUgWW9uZ3FpIDx5b25ncWkuaHVAd2luZHJpdmVyLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQU1EODEzMV9FREFDX0hfCisjZGVmaW5lIF9BTUQ4MTMxX0VEQUNfSF8KKworI2RlZmluZSBERVZGTl9QQ0lYX0JSSURHRV9OT1JUSF9BCTgKKyNkZWZpbmUgREVWRk5fUENJWF9CUklER0VfTk9SVEhfQgkxNgorI2RlZmluZSBERVZGTl9QQ0lYX0JSSURHRV9TT1VUSF9BCTI0CisjZGVmaW5lIERFVkZOX1BDSVhfQlJJREdFX1NPVVRIX0IJMzIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJUENJLVggQnJpZGdlIFN0YXR1cyBhbmQgQ29tbWFuZCBSZWdpc3RlciwgRGV2QToweDA0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfU1RTX0NNRAkweDA0CitlbnVtIHN0c19jbWRfYml0cyB7CisJU1RTX0NNRF9TU0UJPSBCSVQoMzApLAorCVNUU19DTURfU0VSUkVOCT0gQklUKDgpCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0ktWCBCcmlkZ2UgSW50ZXJydXB0IGFuZCBCcmlkZ2UgQ29udHJvbCBSZWdpc3RlciwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19JTlRfQ1RMUgkweDNjCitlbnVtIGludF9jdGxyX2JpdHMgeworCUlOVF9DVExSX0RUU0UJPSBCSVQoMjcpLAorCUlOVF9DVExSX0RUUwk9IEJJVCgyNiksCisJSU5UX0NUTFJfU0VSUgk9IEJJVCgxNyksCisJSU5UX0NUTFJfUEVSUgk9IEJJVCgxNikKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCVBDSS1YIEJyaWRnZSBNZW1vcnkgQmFzZS1MaW1pdCBSZWdpc3RlciwgRGV2QToweDFDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfTUVNX0xJTQkweDFjCitlbnVtIG1lbV9saW1pdF9iaXRzIHsKKwlNRU1fTElNSVRfRFBFIAk9IEJJVCgzMSksCisJTUVNX0xJTUlUX1JTRSAJPSBCSVQoMzApLAorCU1FTV9MSU1JVF9STUEgCT0gQklUKDI5KSwKKwlNRU1fTElNSVRfUlRBIAk9IEJJVCgyOCksCisJTUVNX0xJTUlUX1NUQQk9IEJJVCgyNyksCisJTUVNX0xJTUlUX01EUEUJPSBCSVQoMjQpLAorCU1FTV9MSU1JVF9NQVNLCT0gTUVNX0xJTUlUX0RQRXxNRU1fTElNSVRfUlNFfE1FTV9MSU1JVF9STUF8CisJCQkJTUVNX0xJTUlUX1JUQXxNRU1fTElNSVRfU1RBfE1FTV9MSU1JVF9NRFBFCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglMaW5rIENvbmZpZ3VyYXRpb24gQW5kIENvbnRyb2wgUmVnaXN0ZXIsIHNpZGUgQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUkVHX0xOS19DVFJMX0EJMHhjNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglMaW5rIENvbmZpZ3VyYXRpb24gQW5kIENvbnRyb2wgUmVnaXN0ZXIsIHNpZGUgQgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUkVHX0xOS19DVFJMX0IgIDB4YzgKKworZW51bSBsbmtfY3RybF9iaXRzIHsKKwlMTktfQ1RSTF9DUkNFUlJfQQk9IEJJVCg5KSwKKwlMTktfQ1RSTF9DUkNFUlJfQgk9IEJJVCg4KSwKKwlMTktfQ1RSTF9DUkNGRU4JCT0gQklUKDEpCit9OworCitlbnVtIHBjaXhfYnJpZGdlX2luc3QgeworCU5PUlRIX0EgPSAwLAorCU5PUlRIX0IgPSAxLAorCVNPVVRIX0EgPSAyLAorCVNPVVRIX0IgPSAzLAorCU5PX0JSSURHRSA9IDQKK307CisKK3N0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvIHsKKwlpbnQgZGV2Zm47CisJZW51bSBwY2l4X2JyaWRnZV9pbnN0IGluc3Q7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgZWRhY19pZHg7CS8qIHBjaSBkZXZpY2UgaW5kZXggKi8KKwljaGFyICpjdGxfbmFtZTsKKwlzdHJ1Y3QgZWRhY19wY2lfY3RsX2luZm8gKmVkYWNfZGV2OworfTsKKworLyoKKyAqIEFNRDgxMzEgY2hpcHNldCBoYXMgdHdvIHBhaXJzIG9mIFBDSVggQnJpZGdlIGFuZCByZWxhdGVkIElPQVBJQworICogQ29udHJvbGVyLCBhbmQgQVRDQS02MTAxIGhhcyB0d28gQU1EODEzMSBjaGlwc2V0cywgc28gdGhlcmUgYXJlCisgKiBmb3VyIFBDSVggQnJpZGdlcyBvbiBBVENBLTYxMDEgYWx0b2dldGhlci4KKyAqCisgKiBUaGVzZSBQQ0lYIEJyaWRnZXMgc2hhcmUgdGhlIHNhbWUgUENJIERldmljZSBJRCBhbmQgYXJlIGFsbCBvZgorICogRnVuY3Rpb24gWmVybywgdGhleSBjb3VsZCBiZSBkaXNjcmltYXRlZCBieSB0aGVpciBwY2lfZGV2LT5kZXZmbi4KKyAqIFRoZXkgc2hhcmUgdGhlIHNhbWUgc2V0IG9mIGluaXQvY2hlY2svZXhpdCBtZXRob2RzLCBhbmQgdGhlaXIKKyAqIHByaXZhdGUgc3RydWN0dXJlcyBhcmUgY29sbGVjdGVkIGluIHRoZSBkZXZpY2VzW10gYXJyYXkuCisgKi8KK3N0cnVjdCBhbWQ4MTMxX2luZm8geworCXUxNiBlcnJfZGV2OwkvKiBQQ0kgRGV2aWNlIElEIGZvciBBTUQ4MTMxIEFQSUMqLworCXN0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvICpkZXZpY2VzOworCXZvaWQgKCppbml0KShzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpleGl0KShzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpjaGVjaykoc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2Rldik7Cit9OworCisjZW5kaWYgLyogX0FNRDgxMzFfRURBQ19IXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmggYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKaW5kZXggNGI1NWVjNi4uMjhmMmMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaApAQCAtNDksNiArNDksMTAgQEAKICNkZWZpbmUgZWRhY19wcmludGsobGV2ZWwsIHByZWZpeCwgZm10LCBhcmcuLi4pIFwKIAlwcmludGsobGV2ZWwgIkVEQUMgIiBwcmVmaXggIjogIiBmbXQsICMjYXJnKQogCisjZGVmaW5lIGVkYWNfcHJpbnRrX3ZlcmJvc2UobGV2ZWwsIHByZWZpeCwgZm10LCBhcmcuLi4pIFwKKwlwcmludGsobGV2ZWwgIkVEQUMgIiBwcmVmaXggIjogIiAiaW4gJXMsIGxpbmUgYXQgJWQ6ICIgZm10LAlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgIyNhcmcpCisKICNkZWZpbmUgZWRhY19tY19wcmludGsobWNpLCBsZXZlbCwgZm10LCBhcmcuLi4pIFwKIAlwcmludGsobGV2ZWwgIkVEQUMgTUMlZDogIiBmbXQsIG1jaS0+bWNfaWR4LCAjI2FyZykKIApAQCAtNzEsMTEgKzc1LDIwIEBACiAjaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKIGV4dGVybiBpbnQgZWRhY19kZWJ1Z19sZXZlbDsKIAorI2lmbmRlZiBDT05GSUdfRURBQ19ERUJVR19WRVJCT1NFCiAjZGVmaW5lIGVkYWNfZGVidWdfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQlpZiAobGV2ZWwgPD0gZWRhY19kZWJ1Z19sZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX0RFQlVHLCBmbXQsICMjYXJnKTsgXAotCX0gd2hpbGUoMCkKKwl9IHdoaWxlICgwKQorI2Vsc2UgIC8qIENPTkZJR19FREFDX0RFQlVHX1ZFUkJPU0UgKi8KKyNkZWZpbmUgZWRhY19kZWJ1Z19wcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChsZXZlbCA8PSBlZGFjX2RlYnVnX2xldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWVkYWNfcHJpbnRrX3ZlcmJvc2UoS0VSTl9ERUJVRywgRURBQ19ERUJVRywgZm10LCBcCisJCQkJCSAgICAjI2FyZyk7CQkJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKIAogI2RlZmluZSBkZWJ1Z2YwKCAuLi4gKSBlZGFjX2RlYnVnX3ByaW50aygwLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIGRlYnVnZjEoIC4uLiApIGVkYWNfZGVidWdfcHJpbnRrKDEsIF9fVkFfQVJHU19fICkKQEAgLTgzMSw2ICs4NDQsNyBAQAogZXh0ZXJuIHZvaWQgZWRhY19wY2lfcmVzZXRfZGVsYXlfcGVyaW9kKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqcGNpLAogCQkJCXVuc2lnbmVkIGxvbmcgdmFsdWUpOwogCitleHRlcm4gaW50IGVkYWNfcGNpX2FsbG9jX2luZGV4KHZvaWQpOwogZXh0ZXJuIGludCBlZGFjX3BjaV9hZGRfZGV2aWNlKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqcGNpLCBpbnQgZWRhY19pZHgpOwogZXh0ZXJuIHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqZWRhY19wY2lfZGVsX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19wY2kuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCmluZGV4IDVkM2M4MDguLjViMTUwYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCkBAIC0zMCw2ICszMCw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZWRhY19wY2lfY3Rsc19tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGVkYWNfcGNpX2xpc3QpOworc3RhdGljIGF0b21pY190IHBjaV9pbmRleGVzID0gQVRPTUlDX0lOSVQoMCk7CiAKIC8qCiAgKiBlZGFjX3BjaV9hbGxvY19jdGxfaW5mbwpAQCAtMzE4LDYgKzMxOSwxOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZWRhY19wY2lfcmVzZXRfZGVsYXlfcGVyaW9kKTsKIAogLyoKKyAqIGVkYWNfcGNpX2FsbG9jX2luZGV4OiBBbGxvY2F0ZSBhIHVuaXF1ZSBQQ0kgaW5kZXggbnVtYmVyCisgKgorICogUmV0dXJuOgorICogICAgICBhbGxvY2F0ZWQgaW5kZXggbnVtYmVyCisgKgorICovCitpbnQgZWRhY19wY2lfYWxsb2NfaW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gYXRvbWljX2luY19yZXR1cm4oJnBjaV9pbmRleGVzKSAtIDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlZGFjX3BjaV9hbGxvY19pbmRleCk7CisKKy8qCiAgKiBlZGFjX3BjaV9hZGRfZGV2aWNlOiBJbnNlcnQgdGhlICdlZGFjX2Rldicgc3RydWN0dXJlIGludG8gdGhlCiAgKiBlZGFjX3BjaSBnbG9iYWwgbGlzdCBhbmQgY3JlYXRlIHN5c2ZzIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoCiAgKiBlZGFjX3BjaSBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjIxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYwpAQCAtMCwwICsxLDE0NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnVvdmF0aW9uIFN5c3RlbSBEZXNpZ25zLCBMTEMKKyAqICAgR3JhbnQgRXJpY2tzb24gPGdlcmlja3NvbkBudW92YXRpb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vZGNyLmg+CisKKyNpbmNsdWRlICJlZGFjX2NvcmUuaCIKKyNpbmNsdWRlICJwcGM0eHhfZWRhYy5oIgorCisvKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgYSBkcml2ZXIgZm9yIG1vbml0b3JpbmcgYW5kIGhhbmRsaW5nIGV2ZW50cworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBJTUIgRERSMiBFQ0MgY29udHJvbGxlciBmb3VuZCBpbiB0aGUgQU1DQy9JQk0KKyAqIDQwNUVYW3JdLCA0NDBTUCwgNDQwU1BlLCA0NjBFWCwgNDYwR1QgYW5kIDQ2MFNYLgorICoKKyAqIEFzIHJlYWxpemVkIGluIHRoZSA0MDVFWFtyXSwgdGhpcyBjb250cm9sbGVyIGZlYXR1cmVzOgorICoKKyAqICAgLSBTdXBwb3J0IGZvciByZWdpc3RlcmVkLSBhbmQgbm9uLXJlZ2lzdGVyZWQgRERSMSBhbmQgRERSMiBtZW1vcnkuCisgKiAgIC0gMzItYml0IG9yIDE2LWJpdCBtZW1vcnkgaW50ZXJmYWNlIHdpdGggb3B0aW9uYWwgRUNDLgorICoKKyAqICAgICBvIEVDQyBzdXBwb3J0IGluY2x1ZGVzOgorICoKKyAqICAgICAgIC0gNC1iaXQgU0VDL0RFRAorICogICAgICAgLSBBbGlnbmVkLW5pYmJsZSBlcnJvciBkZXRlY3QKKyAqICAgICAgIC0gQnlwYXNzIG1vZGUKKyAqCisgKiAgIC0gVHdvICgyKSBtZW1vcnkgYmFua3MvcmFua3MuCisgKiAgIC0gVXAgdG8gMSBHaUIgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZSBhbmQgdXAgdG8gNTEyIE1pQiBwZXIKKyAqICAgICBiYW5rL3JhbmsgaW4gMTYtYml0IG1vZGUuCisgKgorICogQXMgcmVhbGl6ZWQgaW4gdGhlIDQ0MFNQIGFuZCA0NDBTUGUsIHRoaXMgY29udHJvbGxlciBjaGFuZ2VzL2FkZHM6CisgKgorICogICAtIDY0LWJpdCBvciAzMi1iaXQgbWVtb3J5IGludGVyZmFjZSB3aXRoIG9wdGlvbmFsIEVDQy4KKyAqCisgKiAgICAgbyBFQ0Mgc3VwcG9ydCBpbmNsdWRlczoKKyAqCisgKiAgICAgICAtIDgtYml0IFNFQy9ERUQKKyAqICAgICAgIC0gQWxpZ25lZC1uaWJibGUgZXJyb3IgZGV0ZWN0CisgKiAgICAgICAtIEJ5cGFzcyBtb2RlCisgKgorICogICAtIFVwIHRvIDQgR2lCIHBlciBiYW5rL3JhbmsgaW4gNjQtYml0IG1vZGUgYW5kIHVwIHRvIDIgR2lCCisgKiAgICAgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZS4KKyAqCisgKiBBcyByZWFsaXplZCBpbiB0aGUgNDYwRVggYW5kIDQ2MEdULCB0aGlzIGNvbnRyb2xsZXIgY2hhbmdlcy9hZGRzOgorICoKKyAqICAgLSA2NC1iaXQgb3IgMzItYml0IG1lbW9yeSBpbnRlcmZhY2Ugd2l0aCBvcHRpb25hbCBFQ0MuCisgKgorICogICAgIG8gRUNDIHN1cHBvcnQgaW5jbHVkZXM6CisgKgorICogICAgICAgLSA4LWJpdCBTRUMvREVECisgKiAgICAgICAtIEFsaWduZWQtbmliYmxlIGVycm9yIGRldGVjdAorICogICAgICAgLSBCeXBhc3MgbW9kZQorICoKKyAqICAgLSBGb3VyICg0KSBtZW1vcnkgYmFua3MvcmFua3MuCisgKiAgIC0gVXAgdG8gMTYgR2lCIHBlciBiYW5rL3JhbmsgaW4gNjQtYml0IG1vZGUgYW5kIHVwIHRvIDggR2lCCisgKiAgICAgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZS4KKyAqCisgKiBBdCBwcmVzZW50LCB0aGlzIGRyaXZlciBoYXMgT05MWSBiZWVuIHRlc3RlZCBhZ2FpbnN0IHRoZSBjb250cm9sbGVyCisgKiByZWFsaXphdGlvbiBpbiB0aGUgNDA1RVhbcl0gb24gdGhlIEFNQ0MgS2lsYXVlYSBhbmQgSGFsZWFrYWxhCisgKiBib2FyZHMgKDI1NiBNaUIgdy9vIEVDQyBtZW1vcnkgc29sZGVyZWQgb250byB0aGUgYm9hcmQpIGFuZCBhCisgKiBwcm9wcmlldGFyeSBib2FyZCBiYXNlZCBvbiB0aG9zZSBkZXNpZ25zICgxMjggTWlCIEVDQyBtZW1vcnksIGFsc28KKyAqIHNvbGRlcmVkIG9udG8gdGhlIGJvYXJkKS4KKyAqCisgKiBEeW5hbWljIGZlYXR1cmUgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZyBuZWVkcyB0byBiZSBhZGRlZCBmb3IgdGhlCisgKiBvdGhlciByZWFsaXphdGlvbnMgb2YgdGhpcyBjb250cm9sbGVyIGxpc3RlZCBhYm92ZS4KKyAqCisgKiBFdmVudHVhbGx5LCB0aGlzIGRyaXZlciB3aWxsIGxpa2VseSBiZSBhZGFwdGVkIHRvIHRoZSBhYm92ZSB2YXJpYW50CisgKiByZWFsaXphdGlvbnMgb2YgdGhpcyBjb250cm9sbGVyIGFzIHdlbGwgYXMgYnJva2VuIGFwYXJ0IHRvIGhhbmRsZQorICogdGhlIG90aGVyIGtub3duIEVDQy1jYXBhYmxlIGNvbnRyb2xsZXJzIHByZXZhbGVudCBpbiBvdGhlciA0eHgKKyAqIHByb2Nlc3NvcnM6CisgKgorICogICAtIElCTSBTRFJBTSAoNDA1R1AsIDQwNUNSIGFuZCA0MDVFUCkgImlibSxzZHJhbS00eHgiCisgKiAgIC0gSUJNIEREUjEgKDQ0MEdQLCA0NDBHWCwgNDQwRVAgYW5kIDQ0MEdSKSAiaWJtLHNkcmFtLTR4eC1kZHIiCisgKiAgIC0gRGVuYWxpIEREUjEvRERSMiAoNDQwRVBYIGFuZCA0NDBHUlgpICJkZW5hbGksc2RyYW0tNHh4LWRkcjIiCisgKgorICogRm9yIHRoaXMgY29udHJvbGxlciwgdW5mb3J0dW5hdGVseSwgY29ycmVjdGFibGUgZXJyb3JzIHJlcG9ydAorICogbm90aGluZyBtb3JlIHRoYW4gdGhlIGJlYXQvY3ljbGUgYW5kIGJ5dGUvbGFuZSB0aGUgY29ycmVjdGlvbgorICogb2NjdXJyZWQgb24gYW5kIHRoZSBjaGVjayBiaXQgZ3JvdXAgdGhhdCBjb3ZlcmVkIHRoZSBlcnJvci4KKyAqCisgKiBJbiBjb250cmFzdCwgdW5jb3JyZWN0YWJsZSBlcnJvcnMgYWxzbyByZXBvcnQgdGhlIGZhaWxpbmcgYWRkcmVzcywKKyAqIHRoZSBidXMgbWFzdGVyIGFuZCB0aGUgdHJhbnNhY3Rpb24gZGlyZWN0aW9uIChpLmUuIHJlYWQgb3Igd3JpdGUpCisgKgorICogUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBlcnJvciBpcyBhIENFIG9yIGEgVUUsIHdlIHJlcG9ydCB0aGUKKyAqIGZvbGxvd2luZyBwaWVjZXMgb2YgaW5mb3JtYXRpb24gaW4gdGhlIGRyaXZlci11bmlxdWUgbWVzc2FnZSB0byB0aGUKKyAqIEVEQUMgc3Vic3lzdGVtOgorICoKKyAqICAgLSBEZXZpY2UgdHJlZSBwYXRoCisgKiAgIC0gQmFuayhzKQorICogICAtIENoZWNrIGJpdCBlcnJvciBncm91cAorICogICAtIEJlYXQocykvbGFuZShzKQorICovCisKKy8qIFByZXByb2Nlc3NvciBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIEVEQUNfT1BTVEFURV9JTlRfU1RSCQkiaW50ZXJydXB0IgorI2RlZmluZSBFREFDX09QU1RBVEVfUE9MTF9TVFIJCSJwb2xsZWQiCisjZGVmaW5lIEVEQUNfT1BTVEFURV9VTktOT1dOX1NUUgkidW5rbm93biIKKworI2RlZmluZSBQUEM0WFhfRURBQ19NT0RVTEVfTkFNRQkJInBwYzR4eF9lZGFjIgorI2RlZmluZSBQUEM0WFhfRURBQ19NT0RVTEVfUkVWSVNJT04JInYxLjAuMCAiIF9fREFURV9fCisKKyNkZWZpbmUgUFBDNFhYX0VEQUNfTUVTU0FHRV9TSVpFCTI1NgorCisvKgorICogS2VybmVsIGxvZ2dpbmcgd2l0aG91dCBhbiBFREFDIGluc3RhbmNlCisgKi8KKyNkZWZpbmUgcHBjNHh4X2VkYWNfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgXAorCWVkYWNfcHJpbnRrKGxldmVsLCAiUFBDNHh4IE1DIiwgZm10LCAjI2FyZykKKworLyoKKyAqIEtlcm5lbCBsb2dnaW5nIHdpdGggYW4gRURBQyBpbnN0YW5jZQorICovCisjZGVmaW5lIHBwYzR4eF9lZGFjX21jX3ByaW50ayhsZXZlbCwgbWNpLCBmbXQsIGFyZy4uLikgXAorCWVkYWNfbWNfY2hpcHNldF9wcmludGsobWNpLCBsZXZlbCwgIlBQQzR4eCIsIGZtdCwgIyNhcmcpCisKKy8qCisgKiBNYWNyb3MgdG8gY29udmVydCBiYW5rIGNvbmZpZ3VyYXRpb24gc2l6ZSBlbnVtZXJhdGlvbnMgaW50byBNaUIgYW5kCisgKiBwYWdlIHZhbHVlcy4KKyAqLworI2RlZmluZSBTRFJBTV9NQkNGX1NaX01pQl9NSU4JCTQKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl9UT19NaUIobikJCShTRFJBTV9NQkNGX1NaX01pQl9NSU4gXAorCQkJCQkgPDwgKFNEUkFNX01CQ0ZfU1pfREVDT0RFKG4pKSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl9UT19QQUdFUyhuKQkoU0RSQU1fTUJDRl9TWl9NaUJfTUlOIFwKKwkJCQkJIDw8ICgyMCAtIFBBR0VfU0hJRlQgKyBcCisJCQkJCSAgICAgU0RSQU1fTUJDRl9TWl9ERUNPREUobikpKQorCisvKgorICogVGhlIGlibSxzZHJhbS00eHgtZGRyMiBEZXZpY2UgQ29udHJvbCBSZWdpc3RlcnMgKERDUnMpIGFyZQorICogaW5kaXJlY3RseSBhY2NjZXNzZWQgYW5kIGhhdmUgYSBiYXNlIGFuZCBsZW5ndGggZGVmaW5lZCBieSB0aGUKKyAqIGRldmljZSB0cmVlLiBUaGUgYmFzZSBjYW4gYmUgYW55dGhpbmc7IGhvd2V2ZXIsIHdlIGV4cGVjdCB0aGUKKyAqIGxlbmd0aCB0byBiZSBwcmVjaXNlbHkgdHdvIHJlZ2lzdGVycywgdGhlIGZpcnN0IGZvciB0aGUgYWRkcmVzcworICogd2luZG93IGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgZGF0YSB3aW5kb3cuCisgKi8KKyNkZWZpbmUgU0RSQU1fRENSX1JFU09VUkNFX0xFTgkJMgorI2RlZmluZSBTRFJBTV9EQ1JfQUREUl9PRkZTRVQJCTAKKyNkZWZpbmUgU0RSQU1fRENSX0RBVEFfT0ZGU0VUCQkxCisKKy8qCisgKiBEZXZpY2UgdHJlZSBpbnRlcnJ1cHQgaW5kaWNlcworICovCisjZGVmaW5lIElOVE1BUF9FQ0NERURfSU5ERVgJCTAJLyogRG91YmxlLWJpdCBFcnJvciBEZXRlY3QgKi8KKyNkZWZpbmUgSU5UTUFQX0VDQ1NFQ19JTkRFWAkJMQkvKiBTaW5nbGUtYml0IEVycm9yIENvcnJlY3QgKi8KKworLyogVHlwZSBEZWZpbml0aW9ucyAqLworCisvKgorICogUFBDNHh4IFNEUkFNIG1lbW9yeSBjb250cm9sbGVyIHByaXZhdGUgaW5zdGFuY2UgZGF0YQorICovCitzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgeworCWRjcl9ob3N0X3QgZGNyX2hvc3Q7CS8qIEluZGlyZWN0IERDUiBhZGRyZXNzL2RhdGEgd2luZG93IG1hcHBpbmcgKi8KKwlzdHJ1Y3QgeworCQlpbnQgc2VjOwkvKiBTaW5nbGUtYml0IGNvcnJlY3RhYmxlIGVycm9yIElSUSBhc3NpZ25lZCAqLworCQlpbnQgZGVkOwkvKiBEb3VibGUtYml0IGRldGVjdGFibGUgZXJyb3IgSVJRIGFzc2lnbmVkICovCisJfSBpcnFzOworfTsKKworLyoKKyAqIFZhcmlvdXMgc3RhdHVzIGRhdGEgZ2F0aGVyZWQgYW5kIG1hbmlwdWxhdGVkIHdoZW4gY2hlY2tpbmcgYW5kCisgKiByZXBvcnRpbmcgRUNDIHN0YXR1cy4KKyAqLworc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzIHsKKwl1MzIgZWNjZXM7CisJdTMyIGJlc3I7CisJdTMyIGJlYXJoOworCXUzMiBiZWFybDsKKwl1MzIgd21pcnE7Cit9OworCisvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCisKK3N0YXRpYyBpbnQgcHBjNHh4X2VkYWNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpkZXZpY2VfaWQpOworc3RhdGljIGludCBwcGM0eHhfZWRhY19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlKTsKKworLyogR2xvYmFsIFZhcmlhYmxlcyAqLworCisvKgorICogRGV2aWNlIHRyZWUgbm9kZSB0eXBlIGFuZCBjb21wYXRpYmxlIHR1cGxlcyB0aGlzIGRyaXZlciBjYW4gbWF0Y2gKKyAqIG9uLgorICovCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwcGM0eHhfZWRhY19tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUJPSAiaWJtLHNkcmFtLTR4eC1kZHIyIgorCX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBwcGM0eHhfZWRhY19kcml2ZXIgPSB7CisJLm1hdGNoX3RhYmxlCQk9IHBwYzR4eF9lZGFjX21hdGNoLAorCS5wcm9iZQkJCT0gcHBjNHh4X2VkYWNfcHJvYmUsCisJLnJlbW92ZQkJCT0gcHBjNHh4X2VkYWNfcmVtb3ZlLAorCS5kcml2ZXIJCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gUFBDNFhYX0VEQUNfTU9EVUxFX05BTUUKKwl9Cit9OworCisvKgorICogVE9ETzogVGhlIHJvdyBhbmQgY2hhbm5lbCBwYXJhbWV0ZXJzIGxpa2VseSBuZWVkIHRvIGJlIGR5bmFtaWNhbGx5CisgKiBzZXQgYmFzZWQgb24gdGhlIGFmb3JlbWVudGlvbmVkIHZhcmlhbnQgY29udHJvbGxlciByZWFsaXphdGlvbnMuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBwcGM0eHhfZWRhY19ucl9jc3Jvd3MgPSAyOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBwYzR4eF9lZGFjX25yX2NoYW5zID0gMTsKKworLyoKKyAqIFN0cmluZ3MgYXNzb2NpYXRlZCB3aXRoIFBMQiBtYXN0ZXIgSURzIGNhcGFibGUgb2YgYmVpbmcgcG9zdGVkIGluCisgKiBTRFJBTV9CRVNSIG9yIFNEUkFNX1dNSVJRIG9uIHVuY29ycmVjdGFibGUgRUNDIGVycm9ycy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcGM0eHhfcGxiX21hc3RlcnNbOV0gPSB7CisJW1NEUkFNX1BMQl9NMElEX0lDVV0JPSAiSUNVIiwKKwlbU0RSQU1fUExCX00wSURfUENJRTBdCT0gIlBDSS1FIDAiLAorCVtTRFJBTV9QTEJfTTBJRF9QQ0lFMV0JPSAiUENJLUUgMSIsCisJW1NEUkFNX1BMQl9NMElEX0RNQV0JPSAiRE1BIiwKKwlbU0RSQU1fUExCX00wSURfRENVXQk9ICJEQ1UiLAorCVtTRFJBTV9QTEJfTTBJRF9PUEJdCT0gIk9QQiIsCisJW1NEUkFNX1BMQl9NMElEX01BTF0JPSAiTUFMIiwKKwlbU0RSQU1fUExCX00wSURfU0VDXQk9ICJTRUMiLAorCVtTRFJBTV9QTEJfTTBJRF9BSEJdCT0gIkFIQiIKK307CisKKy8qKgorICogbWZzZHJhbSAtIHJlYWQgYW5kIHJldHVybiBjb250cm9sbGVyIHJlZ2lzdGVyIGRhdGEKKyAqIEBkY3JfaG9zdDogQSBwb2ludGVyIHRvIHRoZSBEQ1IgbWFwcGluZy4KKyAqIEBpZGNyX246IFRoZSBpbmRpcmVjdCBEQ1IgcmVnaXN0ZXIgdG8gcmVhZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgYW5kIHJldHVybnMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogY29udHJvbGxlcidzIHNwZWNpZmllZCBpbmRpcmVjdCBEQ1IgcmVnaXN0ZXIuCisgKgorICogUmV0dXJucyB0aGUgcmVhZCBkYXRhLgorICovCitzdGF0aWMgaW5saW5lIHUzMgorbWZzZHJhbShjb25zdCBkY3JfaG9zdF90ICpkY3JfaG9zdCwgdW5zaWduZWQgaW50IGlkY3JfbikKK3sKKwlyZXR1cm4gX19tZmRjcmkoZGNyX2hvc3QtPmJhc2UgKyBTRFJBTV9EQ1JfQUREUl9PRkZTRVQsCisJCQlkY3JfaG9zdC0+YmFzZSArIFNEUkFNX0RDUl9EQVRBX09GRlNFVCwKKwkJCWlkY3Jfbik7Cit9CisKKy8qKgorICogbXRzZHJhbSAtIHdyaXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXIgZGF0YQorICogQGRjcl9ob3N0OiBBIHBvaW50ZXIgdG8gdGhlIERDUiBtYXBwaW5nLgorICogQGlkY3JfbjogVGhlIGluZGlyZWN0IERDUiByZWdpc3RlciB0byB3cml0ZS4KKyAqIEB2YWx1ZTogVGhlIGRhdGEgdG8gd3JpdGUuCisgKgorICogVGhpcyByb3V0aW5lIHdyaXRlcyB0aGUgcHJvdmlkZWQgZGF0YSB0byB0aGUgY29udHJvbGxlcidzIHNwZWNpZmllZAorICogaW5kaXJlY3QgRENSIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK210c2RyYW0oY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QsIHVuc2lnbmVkIGludCBpZGNyX24sIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gX19tdGRjcmkoZGNyX2hvc3QtPmJhc2UgKyBTRFJBTV9EQ1JfQUREUl9PRkZTRVQsCisJCQlkY3JfaG9zdC0+YmFzZSArIFNEUkFNX0RDUl9EQVRBX09GRlNFVCwKKwkJCWlkY3JfbiwKKwkJCXZhbHVlKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19jaGVja19iYW5rX2Vycm9yIC0gY2hlY2sgYSBiYW5rIGZvciBhbiBFQ0MgYmFuayBlcnJvcgorICogQHN0YXR1czogQSBwb2ludGVyIHRvIHRoZSBFQ0Mgc3RhdHVzIHN0cnVjdHVyZSB0byBjaGVjayBmb3IgYW4KKyAqICAgICAgICAgIEVDQyBiYW5rIGVycm9yLgorICogQGJhbms6IFRoZSBiYW5rIHRvIGNoZWNrIGZvciBhbiBFQ0MgZXJyb3IuCisgKgorICogVGhpcyByb3V0aW5lIGRldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGJhbmsgaGFzIGFuIEVDQworICogZXJyb3IuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgYmFuayBoYXMgYW4gRUNDIGVycm9yOyBvdGhlcndpc2UsCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGJvb2wKK3BwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3IoY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkgICAgIHVuc2lnbmVkIGludCBiYW5rKQoreworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJcmV0dXJuIHN0YXR1cy0+ZWNjZXMgJiBTRFJBTV9FQ0NFU19CSzBFUjsKKwljYXNlIDE6CisJCXJldHVybiBzdGF0dXMtPmVjY2VzICYgU0RSQU1fRUNDRVNfQksxRVI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9iYW5rX21lc3NhZ2UgLSBnZW5lcmF0ZSBpbnRlcnByZXR0ZWQgYmFuayBzdGF0dXMgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIGJhbmsgbWVzc2FnZSBiZWluZyBnZW5lcmF0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgbWVzc2FnZSBmcm9tLgorICogQGJ1ZmZlcjogQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaW4gd2hpY2ggdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlLgorICogQHNpemU6IFRoZSBzaXplLCBpbiBieXRlcywgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIGJ1ZmZlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2VuZXJhdGVzIHRvIHRoZSBwcm92aWRlZCBidWZmZXIgdGhlIHBvcnRpb24gb2YgdGhlCisgKiBkcml2ZXItdW5pcXVlIHJlcG9ydCBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUNDRVNTW0JLTkVSXQorICogZmllbGQgb2YgdGhlIHNwZWNpZmllZCBFQ0Mgc3RhdHVzLgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGdlbmVyYXRlZCBvbiBzdWNjZXNzOyBvdGhlcndpc2UsIDwKKyAqIDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK3BwYzR4eF9lZGFjX2dlbmVyYXRlX2JhbmtfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJICBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCQkgIGNoYXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBzaXplKQoreworCWludCBuLCB0b3RhbCA9IDA7CisJdW5zaWduZWQgaW50IHJvdywgcm93czsKKworCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsICIlczogQmFua3M6ICIsIG1jaS0+ZGV2X25hbWUpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKwlmb3IgKHJvd3MgPSAwLCByb3cgPSAwOyByb3cgPCBtY2ktPm5yX2Nzcm93czsgcm93KyspIHsKKwkJaWYgKHBwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3Ioc3RhdHVzLCByb3cpKSB7CisJCQluID0gc25wcmludGYoYnVmZmVyLCBzaXplLCAiJXMldSIsCisJCQkJCShyb3dzKysgPyAiLCAiIDogIiIpLCByb3cpOworCisJCQlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQkJCWdvdG8gZmFpbDsKKworCQkJYnVmZmVyICs9IG47CisJCQlzaXplIC09IG47CisJCQl0b3RhbCArPSBuOworCQl9CisJfQorCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzOyAiLCByb3dzID8gIiIgOiAiTm9uZSIpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKyBmYWlsOgorCXJldHVybiB0b3RhbDsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9jaGVja2JpdF9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIGNoZWNrYml0IG1lc3NhZ2UKKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZSBhc3NvY2lhdGVkCisgKiAgICAgICB3aXRoIHRoZSBjaGVja2JpdCBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQ0NFU1NbQ0tCRVJdCisgKiBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIEVDQyBzdGF0dXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZ2VuZXJhdGVkIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSwgPAorICogMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfZ2VuZXJhdGVfY2hlY2tiaXRfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkJICAgICAgY2hhciAqYnVmZmVyLAorCQkJCSAgICAgIHNpemVfdCBzaXplKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWNvbnN0IGNoYXIgKmNrYmVyID0gTlVMTDsKKworCXN3aXRjaCAoc3RhdHVzLT5lY2NlcyAmIFNEUkFNX0VDQ0VTX0NLQkVSX01BU0spIHsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSX05PTkU6CisJCWNrYmVyID0gIk5vbmUiOworCQlicmVhazsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzM6CisJCWNrYmVyID0gIkVDQzA6MyI7CisJCWJyZWFrOworCWNhc2UgU0RSQU1fRUNDRVNfQ0tCRVJfMzJfRUNDXzRfODoKKwkJc3dpdGNoIChtZnNkcmFtKCZwZGF0YS0+ZGNyX2hvc3QsIFNEUkFNX01DT1BUMSkgJgorCQkJU0RSQU1fTUNPUFQxX1dEVEhfTUFTSykgeworCQljYXNlIFNEUkFNX01DT1BUMV9XRFRIXzE2OgorCQkJY2tiZXIgPSAiRUNDMDozIjsKKwkJCWJyZWFrOworCQljYXNlIFNEUkFNX01DT1BUMV9XRFRIXzMyOgorCQkJY2tiZXIgPSAiRUNDNDo4IjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY2tiZXIgPSAiVW5rbm93biI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzg6CisJCWNrYmVyID0gIkVDQzA6OCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNrYmVyID0gIlVua25vd24iOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc25wcmludGYoYnVmZmVyLCBzaXplLCAiQ2hlY2tiaXQgRXJyb3I6ICVzIiwgY2tiZXIpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dlbmVyYXRlX2xhbmVfbWVzc2FnZSAtIGdlbmVyYXRlIGludGVycHJldHRlZCBieXRlIGxhbmUgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIGJ5dGUgbGFuZSBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQ0NFU1NbQk5DRV0KKyAqIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBnZW5lcmF0ZWQgb24gc3VjY2Vzczsgb3RoZXJ3aXNlLCA8CisgKiAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50CitwcGM0eHhfZWRhY19nZW5lcmF0ZV9sYW5lX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCSAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkJICBjaGFyICpidWZmZXIsCisJCQkJICBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbiwgdG90YWwgPSAwOworCXVuc2lnbmVkIGludCBsYW5lLCBsYW5lczsKKwljb25zdCB1bnNpZ25lZCBpbnQgZmlyc3RfbGFuZSA9IDA7CisJY29uc3QgdW5zaWduZWQgaW50IGxhbmVfY291bnQgPSAxNjsKKworCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsICI7IEJ5dGUgTGFuZSBFcnJvcnM6ICIpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKwlmb3IgKGxhbmVzID0gMCwgbGFuZSA9IGZpcnN0X2xhbmU7IGxhbmUgPCBsYW5lX2NvdW50OyBsYW5lKyspIHsKKwkJaWYgKChzdGF0dXMtPmVjY2VzICYgU0RSQU1fRUNDRVNfQk5DRV9FTkNPREUobGFuZSkpICE9IDApIHsKKwkJCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsCisJCQkJICAgICAiJXMldSIsCisJCQkJICAgICAobGFuZXMrKyA/ICIsICIgOiAiIiksIGxhbmUpOworCisJCQlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQkJCWdvdG8gZmFpbDsKKworCQkJYnVmZmVyICs9IG47CisJCQlzaXplIC09IG47CisJCQl0b3RhbCArPSBuOworCQl9CisJfQorCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzOyAiLCBsYW5lcyA/ICIiIDogIk5vbmUiKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCWdvdG8gZmFpbDsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKwl0b3RhbCArPSBuOworCisgZmFpbDoKKwlyZXR1cm4gdG90YWw7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfZ2VuZXJhdGVfZWNjX21lc3NhZ2UgLSBnZW5lcmF0ZSBpbnRlcnByZXR0ZWQgRUNDIHN0YXR1cyBtZXNzYWdlCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYXNzb2NpYXRlZAorICogICAgICAgd2l0aCB0aGUgRUNDRVMgbWVzc2FnZSBiZWluZyBnZW5lcmF0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgbWVzc2FnZSBmcm9tLgorICogQGJ1ZmZlcjogQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaW4gd2hpY2ggdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlLgorICogQHNpemU6IFRoZSBzaXplLCBpbiBieXRlcywgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIGJ1ZmZlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2VuZXJhdGVzIHRvIHRoZSBwcm92aWRlZCBidWZmZXIgdGhlIHBvcnRpb24gb2YgdGhlCisgKiBkcml2ZXItdW5pcXVlIHJlcG9ydCBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUNDRVNTIHJlZ2lzdGVyIG9mCisgKiB0aGUgc3BlY2lmaWVkIEVDQyBzdGF0dXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZ2VuZXJhdGVkIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSwgPAorICogMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfZ2VuZXJhdGVfZWNjX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCSBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCQkgY2hhciAqYnVmZmVyLAorCQkJCSBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbiwgdG90YWwgPSAwOworCisJbiA9IHBwYzR4eF9lZGFjX2dlbmVyYXRlX2JhbmtfbWVzc2FnZShtY2ksIHN0YXR1cywgYnVmZmVyLCBzaXplKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCWdvdG8gZmFpbDsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKwl0b3RhbCArPSBuOworCisJbiA9IHBwYzR4eF9lZGFjX2dlbmVyYXRlX2NoZWNrYml0X21lc3NhZ2UobWNpLCBzdGF0dXMsIGJ1ZmZlciwgc2l6ZSk7CisKKwlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQlnb3RvIGZhaWw7CisKKwlidWZmZXIgKz0gbjsKKwlzaXplIC09IG47CisJdG90YWwgKz0gbjsKKworCW4gPSBwcGM0eHhfZWRhY19nZW5lcmF0ZV9sYW5lX21lc3NhZ2UobWNpLCBzdGF0dXMsIGJ1ZmZlciwgc2l6ZSk7CisKKwlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQlnb3RvIGZhaWw7CisKKwlidWZmZXIgKz0gbjsKKwlzaXplIC09IG47CisJdG90YWwgKz0gbjsKKworIGZhaWw6CisJcmV0dXJuIHRvdGFsOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dlbmVyYXRlX3BsYl9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIFBMQiBzdGF0dXMgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIFBMQiBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBQTEItcmVsYXRlZCBCRVNSCisgKiBhbmQvb3IgV01JUlEgcmVnaXN0ZXJzIG9mIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBnZW5lcmF0ZWQgb24gc3VjY2Vzczsgb3RoZXJ3aXNlLCA8CisgKiAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50CitwcGM0eHhfZWRhY19nZW5lcmF0ZV9wbGJfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJIGNvbnN0IHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzLAorCQkJCSBjaGFyICpidWZmZXIsCisJCQkJIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGludCBtYXN0ZXI7CisJYm9vbCByZWFkOworCisJaWYgKChzdGF0dXMtPmJlc3IgJiBTRFJBTV9CRVNSX01BU0spID09IDApCisJCXJldHVybiAwOworCisJaWYgKChzdGF0dXMtPmJlc3IgJiBTRFJBTV9CRVNSX00wRVRfTUFTSykgPT0gU0RSQU1fQkVTUl9NMEVUX05PTkUpCisJCXJldHVybiAwOworCisJcmVhZCA9ICgoc3RhdHVzLT5iZXNyICYgU0RSQU1fQkVTUl9NMFJXX01BU0spID09IFNEUkFNX0JFU1JfTTBSV19SRUFEKTsKKworCW1hc3RlciA9IFNEUkFNX0JFU1JfTTBJRF9ERUNPREUoc3RhdHVzLT5iZXNyKTsKKworCXJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsCisJCQkiJXMgZXJyb3Igdy8gUExCIG1hc3RlciAldSBcIiVzXCI7ICIsCisJCQkocmVhZCA/ICJSZWFkIiA6ICJXcml0ZSIpLAorCQkJbWFzdGVyLAorCQkJKCgobWFzdGVyID49IFNEUkFNX1BMQl9NMElEX0ZJUlNUKSAmJgorCQkJICAobWFzdGVyIDw9IFNEUkFNX1BMQl9NMElEX0xBU1QpKSA/CisJCQkgcHBjNHh4X3BsYl9tYXN0ZXJzW21hc3Rlcl0gOiAiVU5LTk9XTiIpKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIHN0YXR1cyBtZXNzYWdlCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYXNzb2NpYXRlZAorICogICAgICAgd2l0aCB0aGUgZHJpdmVyLXVuaXF1ZSBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgZHJpdmVyLXVuaXF1ZQorICogRURBQyByZXBvcnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lZGFjX2dlbmVyYXRlX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCSAgICAgY2hhciAqYnVmZmVyLAorCQkJICAgICBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbjsKKworCWlmIChidWZmZXIgPT0gTlVMTCB8fCBzaXplID09IDApCisJCXJldHVybjsKKworCW4gPSBwcGM0eHhfZWRhY19nZW5lcmF0ZV9lY2NfbWVzc2FnZShtY2ksIHN0YXR1cywgYnVmZmVyLCBzaXplKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCXJldHVybjsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKworCXBwYzR4eF9lZGFjX2dlbmVyYXRlX3BsYl9tZXNzYWdlKG1jaSwgc3RhdHVzLCBidWZmZXIsIHNpemUpOworfQorCisjaWZkZWYgREVCVUcKKy8qKgorICogcHBjNHh4X2VjY19kdW1wX3N0YXR1cyAtIGR1bXAgY29udHJvbGxlciBFQ0Mgc3RhdHVzIHJlZ2lzdGVycworICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBiZWluZyBkdW1wZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgZHVtcCBmcm9tLgorICoKKyAqIFRoaXMgcm91dGluZSBkdW1wcyB0byB0aGUga2VybmVsIGxvZyBidWZmZXIgdGhlIHJhdyBhbmQKKyAqIGludGVycHJldHRlZCBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lY2NfZHVtcF9zdGF0dXMoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY2hhciBtZXNzYWdlW1BQQzRYWF9FREFDX01FU1NBR0VfU0laRV07CisKKwlwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlKG1jaSwgc3RhdHVzLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSkpOworCisJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fSU5GTywgbWNpLAorCQkJICAgICAgIlxuIgorCQkJICAgICAgIlx0RUNDRVM6IDB4JTA4eFxuIgorCQkJICAgICAgIlx0V01JUlE6IDB4JTA4eFxuIgorCQkJICAgICAgIlx0QkVTUjogIDB4JTA4eFxuIgorCQkJICAgICAgIlx0QkVBUjogIDB4JTA4eCUwOHhcbiIKKwkJCSAgICAgICJcdCVzXG4iLAorCQkJICAgICAgc3RhdHVzLT5lY2NlcywKKwkJCSAgICAgIHN0YXR1cy0+d21pcnEsCisJCQkgICAgICBzdGF0dXMtPmJlc3IsCisJCQkgICAgICBzdGF0dXMtPmJlYXJoLAorCQkJICAgICAgc3RhdHVzLT5iZWFybCwKKwkJCSAgICAgIG1lc3NhZ2UpOworfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qKgorICogcHBjNHh4X2VjY19nZXRfc3RhdHVzIC0gZ2V0IGNvbnRyb2xsZXIgRUNDIHN0YXR1cworICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBiZWluZyByZXRyaWV2ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIHBvcHVsYXRlIHRoZQorICogICAgICAgICAgRUNDIHN0YXR1cyB3aXRoLgorICoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBhbmQgbWFza3MsIGFzIGFwcHJvcHJpYXRlLCBhbGwgdGhlIHJlbGV2YW50CisgKiBzdGF0dXMgcmVnaXN0ZXJzIHRoYXQgZGVhbCB3aXRoIGlibSxzZHJhbS00eHgtZGRyMiBFQ0MgZXJyb3JzLgorICogV2hpbGUgd2UgcmVhZCBhbGwgb2YgdGhlbSwgZm9yIGNvcnJlY3RhYmxlIGVycm9ycywgd2Ugb25seSBleHBlY3QKKyAqIHRvIGRlYWwgd2l0aCBFQ0NFUy4gRm9yIHVuY29ycmVjdGFibGUgZXJyb3JzLCB3ZSBleHBlY3QgdG8gZGVhbAorICogd2l0aCBhbGwgb2YgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lY2NfZ2V0X3N0YXR1cyhjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICAgIHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWNvbnN0IGRjcl9ob3N0X3QgKmRjcl9ob3N0ID0gJnBkYXRhLT5kY3JfaG9zdDsKKworCXN0YXR1cy0+ZWNjZXMgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9FQ0NFUykgJiBTRFJBTV9FQ0NFU19NQVNLOworCXN0YXR1cy0+d21pcnEgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9XTUlSUSkgJiBTRFJBTV9XTUlSUV9NQVNLOworCXN0YXR1cy0+YmVzciAgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9CRVNSKSAgJiBTRFJBTV9CRVNSX01BU0s7CisJc3RhdHVzLT5iZWFybCA9IG1mc2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFQVJMKTsKKwlzdGF0dXMtPmJlYXJoID0gbWZzZHJhbShkY3JfaG9zdCwgU0RSQU1fQkVBUkgpOworfQorCisvKioKKyAqIHBwYzR4eF9lY2NfY2xlYXJfc3RhdHVzIC0gY2xlYXIgY29udHJvbGxlciBFQ0Mgc3RhdHVzCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIGJlaW5nIGNsZWFyZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlCisgKiAgICAgICAgICB2YWx1ZXMgdG8gd3JpdGUgdG8gY2xlYXIgdGhlIEVDQyBzdGF0dXMuCisgKgorICogVGhpcyByb3V0aW5lIGNsZWFycy0tYnkgd3JpdGluZyB0aGUgbWFza2VkIChhcyBhcHByb3ByaWF0ZSkgc3RhdHVzCisgKiB2YWx1ZXMgYmFjayB0by0tdGhlIHN0YXR1cyByZWdpc3RlcnMgdGhhdCBkZWFsIHdpdGgKKyAqIGlibSxzZHJhbS00eHgtZGRyMiBFQ0MgZXJyb3JzLgorICovCitzdGF0aWMgdm9pZAorcHBjNHh4X2VjY19jbGVhcl9zdGF0dXMoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY29uc3Qgc3RydWN0IHBwYzR4eF9lZGFjX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CisJY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QgPSAmcGRhdGEtPmRjcl9ob3N0OworCisJbXRzZHJhbShkY3JfaG9zdCwgU0RSQU1fRUNDRVMsCXN0YXR1cy0+ZWNjZXMgJiBTRFJBTV9FQ0NFU19NQVNLKTsKKwltdHNkcmFtKGRjcl9ob3N0LCBTRFJBTV9XTUlSUSwJc3RhdHVzLT53bWlycSAmIFNEUkFNX1dNSVJRX01BU0spOworCW10c2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFU1IsCXN0YXR1cy0+YmVzciAmIFNEUkFNX0JFU1JfTUFTSyk7CisJbXRzZHJhbShkY3JfaG9zdCwgU0RSQU1fQkVBUkwsCTApOworCW10c2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFQVJILAkwKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19oYW5kbGVfY2UgLSBoYW5kbGUgY29udHJvbGxlciBjb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKENFKQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlY3RhYmxlIGVycm9yIGJlaW5nIGhhbmRsZWQgYW5kIHJlcG9ydGVkLgorICogQHN0YXR1czogQSBwb2ludGVyIHRvIHRoZSBFQ0Mgc3RhdHVzIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGgKKyAqICAgICAgICAgIHRoZSBjb3JyZWN0YWJsZSBlcnJvciBiZWluZyBoYW5kbGVkIGFuZCByZXBvcnRlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBhbiBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBFQ0MKKyAqIGNvcnJlY3RhYmxlIGVycm9yLiBQZXIgdGhlIGFmb3JlbWVudGlvbmVkIGRpc2N1c3Npb24sIHRoZXJlJ3Mgbm90CisgKiBlbm91Z2ggc3RhdHVzIGF2YWlsYWJsZSB0byB1c2UgdGhlIGZ1bGwgRURBQyBjb3JyZWN0YWJsZSBlcnJvcgorICogaW50ZXJmYWNlLCBzbyB3ZSBqdXN0IHBhc3MgZHJpdmVyLXVuaXF1ZSBtZXNzYWdlIHRvIHRoZSAibm8gaW5mbyIKKyAqIGludGVyZmFjZS4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lZGFjX2hhbmRsZV9jZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzKQoreworCWludCByb3c7CisJY2hhciBtZXNzYWdlW1BQQzRYWF9FREFDX01FU1NBR0VfU0laRV07CisKKwlwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlKG1jaSwgc3RhdHVzLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSkpOworCisJZm9yIChyb3cgPSAwOyByb3cgPCBtY2ktPm5yX2Nzcm93czsgcm93KyspCisJCWlmIChwcGM0eHhfZWRhY19jaGVja19iYW5rX2Vycm9yKHN0YXR1cywgcm93KSkKKwkJCWVkYWNfbWNfaGFuZGxlX2NlX25vX2luZm8obWNpLCBtZXNzYWdlKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19oYW5kbGVfdWUgLSBoYW5kbGUgY29udHJvbGxlciB1bmNvcnJlY3RhYmxlIEVDQyBlcnJvciAoVUUpCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5jb3JyZWN0YWJsZSBlcnJvciBiZWluZyBoYW5kbGVkIGFuZAorICogICAgICAgcmVwb3J0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aAorICogICAgICAgICAgdGhlIHVuY29ycmVjdGFibGUgZXJyb3IgYmVpbmcgaGFuZGxlZCBhbmQgcmVwb3J0ZWQuCisgKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgYW4gaWJtLHNkcmFtLTR4eC1kZHIyIGNvbnRyb2xsZXIgRUNDCisgKiB1bmNvcnJlY3RhYmxlIGVycm9yLgorICovCitzdGF0aWMgdm9pZAorcHBjNHh4X2VkYWNfaGFuZGxlX3VlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY29uc3QgdTY0IGJlYXIgPSAoKHU2NClzdGF0dXMtPmJlYXJoIDw8IDMyIHwgc3RhdHVzLT5iZWFybCk7CisJY29uc3QgdW5zaWduZWQgbG9uZyBwYWdlID0gYmVhciA+PiBQQUdFX1NISUZUOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYmVhciAmIH5QQUdFX01BU0s7CisJaW50IHJvdzsKKwljaGFyIG1lc3NhZ2VbUFBDNFhYX0VEQUNfTUVTU0FHRV9TSVpFXTsKKworCXBwYzR4eF9lZGFjX2dlbmVyYXRlX21lc3NhZ2UobWNpLCBzdGF0dXMsIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSk7CisKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IG1jaS0+bnJfY3Nyb3dzOyByb3crKykKKwkJaWYgKHBwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3Ioc3RhdHVzLCByb3cpKQorCQkJZWRhY19tY19oYW5kbGVfdWUobWNpLCBwYWdlLCBvZmZzZXQsIHJvdywgbWVzc2FnZSk7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfY2hlY2sgLSBjaGVjayBjb250cm9sbGVyIGZvciBFQ0MgZXJyb3JzCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWJtLHNkcmFtLTR4eC1kZHIyIGNvbnRyb2xsZXIgYmVpbmcKKyAqICAgICAgIGNoZWNrZWQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gY2hlY2sgYW5kIHBvc3QgRUNDIGVycm9ycyBhbmQgaXMgY2FsbGVkIGJ5CisgKiBib3RoIHRoZSBFREFDIHBvbGxpbmcgdGhyZWFkIGFuZCB0aGlzIGRyaXZlcidzIENFIGFuZCBVRSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwcGM0eHhfZWRhY19jaGVjayhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCit7CisjaWZkZWYgREVCVUcKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50OworI2VuZGlmCisJc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzIHN0YXR1czsKKworCXBwYzR4eF9lY2NfZ2V0X3N0YXR1cyhtY2ksICZzdGF0dXMpOworCisjaWZkZWYgREVCVUcKKwlpZiAoY291bnQrKyAlIDMwID09IDApCisJCXBwYzR4eF9lY2NfZHVtcF9zdGF0dXMobWNpLCAmc3RhdHVzKTsKKyNlbmRpZgorCisJaWYgKHN0YXR1cy5lY2NlcyAmIFNEUkFNX0VDQ0VTX1VFKQorCQlwcGM0eHhfZWRhY19oYW5kbGVfdWUobWNpLCAmc3RhdHVzKTsKKworCWlmIChzdGF0dXMuZWNjZXMgJiBTRFJBTV9FQ0NFU19DRSkKKwkJcHBjNHh4X2VkYWNfaGFuZGxlX2NlKG1jaSwgJnN0YXR1cyk7CisKKwlwcGM0eHhfZWNjX2NsZWFyX3N0YXR1cyhtY2ksICZzdGF0dXMpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2lzciAtIFNFQyAoQ0UpIGFuZCBERUQgKFVFKSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCisgKiBAaXJxOiAgICBUaGUgdmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVyIGJlaW5nIHNlcnZpY2VkLgorICogQGRldl9pZDogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVycnVwdCBiZWluZyBoYW5kbGVkLgorICoKKyAqIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYm90aCBjb3JyZWN0YWJsZQorICogKENFKSBhbmQgdW5jb3JyZWN0YWJsZSAoVUUpIEVDQyBlcnJvcnMgZm9yIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIKKyAqIGNvbnRyb2xsZXIuIEl0IHNpbXBseSBjYWxscyB0aHJvdWdoIHRvIHRoZSBzYW1lIHJvdXRpbmUgdXNlZCBkdXJpbmcKKyAqIHBvbGxpbmcgdG8gY2hlY2ssIHJlcG9ydCBhbmQgY2xlYXIgdGhlIEVDQyBzdGF0dXMuCisgKgorICogVW5jb25kaXRpb25hbGx5IHJldHVybnMgSVJRX0hBTkRMRUQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAorcHBjNHh4X2VkYWNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBkZXZfaWQ7CisKKwlwcGM0eHhfZWRhY19jaGVjayhtY2kpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dldF9kdHlwZSAtIHJldHVybiB0aGUgY29udHJvbGxlciBtZW1vcnkgd2lkdGgKKyAqIEBtY29wdDE6IFRoZSAzMi1iaXQgTWVtb3J5IENvbnRyb2xsZXIgT3B0aW9uIDEgcmVnaXN0ZXIgdmFsdWUKKyAqICAgICAgICAgIGN1cnJlbnRseSBzZXQgZm9yIHRoZSBjb250cm9sbGVyLCBmcm9tIHdoaWNoIHRoZSB3aWR0aAorICogICAgICAgICAgaXMgZGVyaXZlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgRURBQyBkZXZpY2UgdHlwZSB3aWR0aCBhcHByb3ByaWF0ZSBmb3IgdGhlCisgKiBjdXJyZW50IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUT0RPOiBUaGlzIG5lZWRzIHRvIGJlIGNvbmRpdGlvbmVkIGR5bmFtaWNhbGx5IHRocm91Z2ggZmVhdHVyZQorICogZmxhZ3Mgb3Igc29tZSBzdWNoIHdoZW4gb3RoZXIgY29udHJvbGxlciB2YXJpYW50cyBhcmUgc3VwcG9ydGVkIGFzCisgKiB0aGUgNDA1RVhbcl0gaXMgMTYtLzMyLWJpdCBhbmQgdGhlIG90aGVycyBhcmUgMzItLzY0LWJpdCB3aXRoIHRoZQorICogMTYtIGFuZCA2NC1iaXQgZmllbGQgZGVmaW5pdGlvbi92YWx1ZS9lbnVtZXJhdGlvbiAoYjEpIG92ZXJsb2FkZWQKKyAqIGFtb25nIHRoZW0uCisgKgorICogUmV0dXJucyBhIGRldmljZSB0eXBlIHdpZHRoIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMgZW51bSBkZXZfdHlwZSBfX2RldmluaXQKK3BwYzR4eF9lZGFjX2dldF9kdHlwZSh1MzIgbWNvcHQxKQoreworCXN3aXRjaCAobWNvcHQxICYgU0RSQU1fTUNPUFQxX1dEVEhfTUFTSykgeworCWNhc2UgU0RSQU1fTUNPUFQxX1dEVEhfMTY6CisJCXJldHVybiBERVZfWDI7CisJY2FzZSBTRFJBTV9NQ09QVDFfV0RUSF8zMjoKKwkJcmV0dXJuIERFVl9YNDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gREVWX1VOS05PV047CisJfQorfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dldF9tdHlwZSAtIHJldHVybiBjb250cm9sbGVyIG1lbW9yeSB0eXBlCisgKiBAbWNvcHQxOiBUaGUgMzItYml0IE1lbW9yeSBDb250cm9sbGVyIE9wdGlvbiAxIHJlZ2lzdGVyIHZhbHVlCisgKiAgICAgICAgICBjdXJyZW50bHkgc2V0IGZvciB0aGUgY29udHJvbGxlciwgZnJvbSB3aGljaCB0aGUgbWVtb3J5IHR5cGUKKyAqICAgICAgICAgIGlzIGRlcml2ZWQuCisgKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIEVEQUMgbWVtb3J5IHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZQorICogY3VycmVudCBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogUmV0dXJucyBhIG1lbW9yeSB0eXBlIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMgZW51bSBtZW1fdHlwZSBfX2RldmluaXQKK3BwYzR4eF9lZGFjX2dldF9tdHlwZSh1MzIgbWNvcHQxKQoreworCWJvb2wgcmRlbiA9ICgobWNvcHQxICYgU0RSQU1fTUNPUFQxX1JERU5fTUFTSykgPT0gU0RSQU1fTUNPUFQxX1JERU4pOworCisJc3dpdGNoIChtY29wdDEgJiBTRFJBTV9NQ09QVDFfRERSX1RZUEVfTUFTSykgeworCWNhc2UgU0RSQU1fTUNPUFQxX0REUjJfVFlQRToKKwkJcmV0dXJuIHJkZW4gPyBNRU1fUkREUjIgOiBNRU1fRERSMjsKKwljYXNlIFNEUkFNX01DT1BUMV9ERFIxX1RZUEU6CisJCXJldHVybiByZGVuID8gTUVNX1JERFIgOiBNRU1fRERSOworCWRlZmF1bHQ6CisJCXJldHVybiBNRU1fVU5LTk9XTjsKKwl9Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfaW5pdF9jc3Jvd3MgLSBpbnRpYWxpemUgZHJpdmVyIGluc3RhbmNlIHJvd3MKKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQorICogICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBmb3Igd2hpY2gKKyAqICAgICAgIHRoZSBjc3Jvd3MgKGkuZS4gYmFua3MvcmFua3MpIGFyZSBiZWluZyBpbml0aWFsaXplZC4KKyAqIEBtY29wdDE6IFRoZSAzMi1iaXQgTWVtb3J5IENvbnRyb2xsZXIgT3B0aW9uIDEgcmVnaXN0ZXIgdmFsdWUKKyAqICAgICAgICAgIGN1cnJlbnRseSBzZXQgZm9yIHRoZSBjb250cm9sbGVyLCBmcm9tIHdoaWNoIGJhbmsgd2lkdGgKKyAqICAgICAgICAgIGFuZCBtZW1vcnkgdHlwIGluZm9ybWF0aW9uIGlzIGRlcml2ZWQuCisgKgorICogVGhpcyByb3V0aW5lIGludGlhbGl6ZXMgdGhlIHZpcnR1YWwgImNoaXAgc2VsZWN0IHJvd3MiIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UuIEFuIGlibSxzZHJhbS00eHgtZGRyMgorICogY29udHJvbGxlciBiYW5rL3JhbmsgaXMgbWFwcGVkIHRvIGEgcm93LgorICoKKyAqIFJldHVybnMgMCBpZiBPSzsgb3RoZXJ3aXNlLCAtRUlOVkFMIGlmIHRoZSBtZW1vcnkgYmFuayBzaXplCisgKiBjb25maWd1cmF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHBjNHh4X2VkYWNfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1MzIgbWNvcHQxKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWludCBzdGF0dXMgPSAwOworCWVudW0gbWVtX3R5cGUgbXR5cGU7CisJZW51bSBkZXZfdHlwZSBkdHlwZTsKKwllbnVtIGVkYWNfdHlwZSBlZGFjX21vZGU7CisJaW50IHJvdzsKKwl1MzIgbWJ4Y2YsIHNpemU7CisJc3RhdGljIHUzMiBwcGM0eHhfbGFzdF9wYWdlOworCisJLyogRXN0YWJsaXNoIHRoZSBtZW1vcnkgdHlwZSBhbmQgd2lkdGggKi8KKworCW10eXBlID0gcHBjNHh4X2VkYWNfZ2V0X210eXBlKG1jb3B0MSk7CisJZHR5cGUgPSBwcGM0eHhfZWRhY19nZXRfZHR5cGUobWNvcHQxKTsKKworCS8qIEVzdGFibGlzaCBFREFDIG1vZGUgKi8KKworCWlmIChtY2ktPmVkYWNfY2FwICYgRURBQ19GTEFHX1NFQ0RFRCkKKwkJZWRhY19tb2RlID0gRURBQ19TRUNERUQ7CisJZWxzZSBpZiAobWNpLT5lZGFjX2NhcCAmIEVEQUNfRkxBR19FQykKKwkJZWRhY19tb2RlID0gRURBQ19FQzsKKwllbHNlCisJCWVkYWNfbW9kZSA9IEVEQUNfTk9ORTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBlYWNoIGNoaXAgc2VsZWN0IHJvdyBzdHJ1Y3R1cmUgd2hpY2ggY29ycmVzcG9uZAorCSAqIDE6MSB3aXRoIGEgY29udHJvbGxlciBiYW5rL3JhbmsuCisJICovCisKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IG1jaS0+bnJfY3Nyb3dzOyByb3crKykgeworCQlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3NpID0gJm1jaS0+Y3Nyb3dzW3Jvd107CisKKwkJLyoKKwkJICogR2V0IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGlzCisJCSAqIHJvdy9iYW5rL3JhbmsgYW5kIHNraXAgZGlzYWJsZWQgYmFua3MuCisJCSAqLworCisJCW1ieGNmID0gbWZzZHJhbSgmcGRhdGEtPmRjcl9ob3N0LCBTRFJBTV9NQlhDRihyb3cpKTsKKworCQlpZiAoKG1ieGNmICYgU0RSQU1fTUJDRl9CRV9NQVNLKSAhPSBTRFJBTV9NQkNGX0JFX0VOQUJMRSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE1hcCB0aGUgYmFuayBjb25maWd1cmF0aW9uIHNpemUgc2V0dGluZyB0byBwYWdlcy4gKi8KKworCQlzaXplID0gbWJ4Y2YgJiBTRFJBTV9NQkNGX1NaX01BU0s7CisKKwkJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgU0RSQU1fTUJDRl9TWl80TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl84TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xNk1COgorCQljYXNlIFNEUkFNX01CQ0ZfU1pfMzJNQjoKKwkJY2FzZSBTRFJBTV9NQkNGX1NaXzY0TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xMjhNQjoKKwkJY2FzZSBTRFJBTV9NQkNGX1NaXzI1Nk1COgorCQljYXNlIFNEUkFNX01CQ0ZfU1pfNTEyTUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xR0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8yR0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl80R0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl84R0I6CisJCQljc2ktPm5yX3BhZ2VzID0gU0RSQU1fTUJDRl9TWl9UT19QQUdFUyhzaXplKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJCSAgICAgICJVbnJlY29nbml6ZWQgbWVtb3J5IGJhbmsgJWQgIgorCQkJCQkgICAgICAic2l6ZSAweCUwOHhcbiIsCisJCQkJCSAgICAgIHJvdywgU0RSQU1fTUJDRl9TWl9ERUNPREUoc2l6ZSkpOworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNzaS0+Zmlyc3RfcGFnZSA9IHBwYzR4eF9sYXN0X3BhZ2U7CisJCWNzaS0+bGFzdF9wYWdlCT0gY3NpLT5maXJzdF9wYWdlICsgY3NpLT5ucl9wYWdlcyAtIDE7CisJCWNzaS0+cGFnZV9tYXNrCT0gMDsKKworCQkvKgorCQkgKiBJdCdzIHVuY2xlYXIgZXhhY3RseSB3aGF0IGdyYWluIHNob3VsZCBiZSBzZXQgdG8KKwkJICogaGVyZS4gVGhlIFNEUkFNX0VDQ0VTIHJlZ2lzdGVyIGFsbG93cyByZXNvbHV0aW9uIG9mCisJCSAqIGFuIGVycm9yIGRvd24gdG8gYSBuaWJibGUgd2hpY2ggd291bGQgcG90ZW50aWFsbHkKKwkJICogYXJndWUgZm9yIGEgZ3JhaW4gb2YgJzEnIGJ5dGUsIGV2ZW4gdGhvdWdoIHdlIG9ubHkKKwkJICoga25vdyB0aGUgYXNzb2NpYXRlZCBhZGRyZXNzIGZvciB1bmNvcnJlY3RhYmxlCisJCSAqIGVycm9ycy4gVGhpcyB2YWx1ZSBpcyBub3QgdXNlZCBhdCBwcmVzZW50IGZvcgorCQkgKiBhbnl0aGluZyBvdGhlciB0aGFuIGVycm9yIHJlcG9ydGluZyBzbyBnZXR0aW5nIGl0CisJCSAqIHdyb25nIHNob3VsZCBiZSBvZiBsaXR0bGUgY29uc2VxdWVuY2UuIE90aGVyCisJCSAqIHBvc3NpYmxlIHZhbHVlcyB3b3VsZCBiZSB0aGUgUExCIHdpZHRoICgxNiksIHRoZQorCQkgKiBwYWdlIHNpemUgKFBBR0VfU0laRSkgb3IgdGhlIG1lbW9yeSB3aWR0aCAoMiBvciA0KS4KKwkJICovCisKKwkJY3NpLT5ncmFpbgk9IDE7CisKKwkJY3NpLT5tdHlwZQk9IG10eXBlOworCQljc2ktPmR0eXBlCT0gZHR5cGU7CisKKwkJY3NpLT5lZGFjX21vZGUJPSBlZGFjX21vZGU7CisKKwkJcHBjNHh4X2xhc3RfcGFnZSArPSBjc2ktPm5yX3BhZ2VzOworCX0KKworIGRvbmU6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19tY19pbml0IC0gaW50aWFsaXplIGRyaXZlciBpbnN0YW5jZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGJlaW5nCisgKiAgICAgICBpbml0aWFsaXplZC4KKyAqIEBvcDogQSBwb2ludGVyIHRvIHRoZSBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBhc3NvY2lhdGVkCisgKiAgICAgIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlIGlzIGJvdW5kIHRvLgorICogQG1hdGNoOiBBIHBvaW50ZXIgdG8gdGhlIE9wZW5GaXJtd2FyZSBkZXZpY2UgdHJlZSBtYXRjaAorICogICAgICAgICBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlCisgKiAgICAgICAgIGlzIGJvdW5kIHRvLgorICogQGRjcl9ob3N0OiBBIHBvaW50ZXIgdG8gdGhlIERDUiBkYXRhIGNvbnRhaW5pbmcgdGhlIERDUiBtYXBwaW5nCisgKiAgICAgICAgICAgIGZvciB0aGlzIGNvbnRyb2xsZXIgaW5zdGFuY2UuCisgKiBAbWNvcHQxOiBUaGUgMzItYml0IE1lbW9yeSBDb250cm9sbGVyIE9wdGlvbiAxIHJlZ2lzdGVyIHZhbHVlCisgKiAgICAgICAgICBjdXJyZW50bHkgc2V0IGZvciB0aGUgY29udHJvbGxlciwgZnJvbSB3aGljaCBFQ0MgY2FwYWJpbGl0aWVzCisgKiAgICAgICAgICBhbmQgc2NydWIgbW9kZSBhcmUgZGVyaXZlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIKKyAqIGluc3RhbmNlIGFuZCByZWxhdGVkIGRyaXZlci1wcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogaWJtLHNkcmFtLTR4eC1kZHIyIG1lbW9yeSBjb250cm9sbGVyIHRoZSBpbnN0YW5jZSBpcyBib3VuZCB0by4KKyAqCisgKiBSZXR1cm5zIDAgaWYgT0s7IG90aGVyd2lzZSwgPCAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHBjNHh4X2VkYWNfbWNfaW5pdChzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKKwkJICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoLAorCQkgICAgY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QsCisJCSAgICB1MzIgbWNvcHQxKQoreworCWludCBzdGF0dXMgPSAwOworCWNvbnN0IHUzMiBtZW1jaGVjayA9IChtY29wdDEgJiBTRFJBTV9NQ09QVDFfTUNIS19NQVNLKTsKKwlzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgKnBkYXRhID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb3AtPm5vZGU7CisKKwlpZiAobWF0Y2ggPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJbml0aWFsIGRyaXZlciBwb2ludGVycyBhbmQgcHJpdmF0ZSBkYXRhICovCisKKwltY2ktPmRldgkJPSAmb3AtPmRldjsKKworCWRldl9zZXRfZHJ2ZGF0YShtY2ktPmRldiwgbWNpKTsKKworCXBkYXRhCQkJPSBtY2ktPnB2dF9pbmZvOworCisJcGRhdGEtPmRjcl9ob3N0CQk9ICpkY3JfaG9zdDsKKwlwZGF0YS0+aXJxcy5zZWMJCT0gTk9fSVJROworCXBkYXRhLT5pcnFzLmRlZAkJPSBOT19JUlE7CisKKwkvKiBJbml0aWFsaXplIGNvbnRyb2xsZXIgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uICovCisKKwltY2ktPm10eXBlX2NhcAkJPSAoTUVNX0ZMQUdfRERSIHwgTUVNX0ZMQUdfUkREUiB8CisJCQkJICAgTUVNX0ZMQUdfRERSMiB8IE1FTV9GTEFHX1JERFIyKTsKKworCW1jaS0+ZWRhY19jdGxfY2FwCT0gKEVEQUNfRkxBR19OT05FIHwKKwkJCQkgICBFREFDX0ZMQUdfRUMgfAorCQkJCSAgIEVEQUNfRkxBR19TRUNERUQpOworCisJbWNpLT5zY3J1Yl9jYXAJCT0gU0NSVUJfTk9ORTsKKwltY2ktPnNjcnViX21vZGUJCT0gU0NSVUJfTk9ORTsKKworCS8qCisJICogVXBkYXRlIHRoZSBhY3R1YWwgY2FwYWJpbGl0ZXMgYmFzZWQgb24gdGhlIE1DT1BUMVtNQ0hLXQorCSAqIHNldHRpbmdzLiBTY3J1YmJpbmcgaXMgb25seSB1c2VmdWwgaWYgcmVwb3J0aW5nIGlzIGVuYWJsZWQuCisJICovCisKKwlzd2l0Y2ggKG1lbWNoZWNrKSB7CisJY2FzZSBTRFJBTV9NQ09QVDFfTUNIS19DSEs6CisJCW1jaS0+ZWRhY19jYXAJPSBFREFDX0ZMQUdfRUM7CisJCWJyZWFrOworCWNhc2UgU0RSQU1fTUNPUFQxX01DSEtfQ0hLX1JFUDoKKwkJbWNpLT5lZGFjX2NhcAk9IChFREFDX0ZMQUdfRUMgfCBFREFDX0ZMQUdfU0VDREVEKTsKKwkJbWNpLT5zY3J1Yl9tb2RlCT0gU0NSVUJfU1dfU1JDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltY2ktPmVkYWNfY2FwCT0gRURBQ19GTEFHX05PTkU7CisJCWJyZWFrOworCX0KKworCS8qIEluaXRpYWxpemUgc3RyaW5ncyAqLworCisJbWNpLT5tb2RfbmFtZQkJPSBQUEM0WFhfRURBQ19NT0RVTEVfTkFNRTsKKwltY2ktPm1vZF92ZXIJCT0gUFBDNFhYX0VEQUNfTU9EVUxFX1JFVklTSU9OOworCW1jaS0+Y3RsX25hbWUJCT0gbWF0Y2gtPmNvbXBhdGlibGUsCisJbWNpLT5kZXZfbmFtZQkJPSBucC0+ZnVsbF9uYW1lOworCisJLyogSW5pdGlhbGl6ZSBjYWxsYmFja3MgKi8KKworCW1jaS0+ZWRhY19jaGVjawkJPSBwcGM0eHhfZWRhY19jaGVjazsKKwltY2ktPmN0bF9wYWdlX3RvX3BoeXMJPSBOVUxMOworCisJLyogSW5pdGlhbGl6ZSBjaGlwIHNlbGVjdCByb3dzICovCisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19pbml0X2Nzcm93cyhtY2ksIG1jb3B0MSk7CisKKwlpZiAoc3RhdHVzKQorCQlwcGM0eHhfZWRhY19tY19wcmludGsoS0VSTl9FUlIsIG1jaSwKKwkJCQkgICAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgcm93cyFcbiIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19yZWdpc3Rlcl9pcnEgLSBzZXR1cCBhbmQgcmVnaXN0ZXIgY29udHJvbGxlciBpbnRlcnJ1cHRzCisgKiBAb3A6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG5vZGUgYXNzb2NpYXRlZAorICogICAgICB3aXRoIHRoZSBjb250cm9sbGVyIHRoaXMgRURBQyBpbnN0YW5jZSBpcyBib3VuZCB0by4KKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQorICogICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBmb3Igd2hpY2gKKyAqICAgICAgIGludGVycnVwdHMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQuCisgKgorICogVGhpcyByb3V0aW5lIHBhcnNlcyB0aGUgY29ycmVjdGFibGUgKENFKSBhbmQgdW5jb3JyZWN0YWJsZSBlcnJvciAoVUUpCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIGRldmljZSB0cmVlIG5vZGUgYW5kIG1hcHMgYW5kIGFzc2lnbnMgdGhlbSB0bworICogdGhlIGFzc29jaWF0ZWQgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgT0s7IG90aGVyd2lzZSwgLUVOT0RFViBpZiB0aGUgaW50ZXJydXB0cyBjb3VsZCBub3QgYmUKKyAqIG1hcHBlZCBhbmQgYXNzaWduZWQuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwcGM0eHhfZWRhY19yZWdpc3Rlcl9pcnEoc3RydWN0IG9mX2RldmljZSAqb3AsIHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgZGVkX2lycSwgc2VjX2lycTsKKwlzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgKnBkYXRhID0gbWNpLT5wdnRfaW5mbzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb3AtPm5vZGU7CisKKwlkZWRfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIElOVE1BUF9FQ0NERURfSU5ERVgpOworCXNlY19pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgSU5UTUFQX0VDQ1NFQ19JTkRFWCk7CisKKwlpZiAoZGVkX2lycSA9PSBOT19JUlEgfHwgc2VjX2lycSA9PSBOT19JUlEpIHsKKwkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJICAgICAgIlVuYWJsZSB0byBtYXAgaW50ZXJydXB0cy5cbiIpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJc3RhdHVzID0gcmVxdWVzdF9pcnEoZGVkX2lycSwKKwkJCSAgICAgcHBjNHh4X2VkYWNfaXNyLAorCQkJICAgICBJUlFGX0RJU0FCTEVELAorCQkJICAgICAiW0VEQUNdIE1DIEVDQ0RFRCIsCisJCQkgICAgIG1jaSk7CisKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcGM0eHhfZWRhY19tY19wcmludGsoS0VSTl9FUlIsIG1jaSwKKwkJCQkgICAgICAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxICVkIGZvciBFQ0MgREVEIiwKKwkJCQkgICAgICBkZWRfaXJxKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsMTsKKwl9CisKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShzZWNfaXJxLAorCQkJICAgICBwcGM0eHhfZWRhY19pc3IsCisJCQkgICAgIElSUUZfRElTQUJMRUQsCisJCQkgICAgICJbRURBQ10gTUMgRUNDU0VDIiwKKwkJCSAgICAgbWNpKTsKKworCWlmIChzdGF0dXMgPCAwKSB7CisJCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0VSUiwgbWNpLAorCQkJCSAgICAgICJVbmFibGUgdG8gcmVxdWVzdCBpcnEgJWQgZm9yIEVDQyBTRUMiLAorCQkJCSAgICAgIHNlY19pcnEpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWwyOworCX0KKworCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0lORk8sIG1jaSwgIkVDQ0RFRCBpcnEgaXMgJWRcbiIsIGRlZF9pcnEpOworCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0lORk8sIG1jaSwgIkVDQ1NFQyBpcnEgaXMgJWRcbiIsIHNlY19pcnEpOworCisJcGRhdGEtPmlycXMuZGVkID0gZGVkX2lycTsKKwlwZGF0YS0+aXJxcy5zZWMgPSBzZWNfaXJxOworCisJcmV0dXJuIDA7CisKKyBmYWlsMjoKKwlmcmVlX2lycShzZWNfaXJxLCBtY2kpOworCisgZmFpbDE6CisJZnJlZV9pcnEoZGVkX2lycSwgbWNpKTsKKworIGZhaWw6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19tYXBfZGNycyAtIGxvY2F0ZSBhbmQgbWFwIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKiBAbnA6IEEgcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgbm9kZSBjb250YWluaW5nIHRoZSBEQ1IKKyAqICAgICAgcmVzb3VyY2VzIHRvIG1hcC4KKyAqIEBkY3JfaG9zdDogQSBwb2ludGVyIHRvIHRoZSBEQ1IgZGF0YSB0byBwb3B1bGF0ZSB3aXRoIHRoZQorICogICAgICAgICAgICBEQ1IgbWFwcGluZy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8gbG9jYXRlIGluIHRoZSBkZXZpY2UgdHJlZSBhbmQgbWFwIHRoZSBEQ1IKKyAqIHJlZ2lzdGVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRyb2xsZXIncyBpbmRpcmVjdCBEQ1IKKyAqIGFkZHJlc3MgYW5kIGRhdGEgd2luZG93cy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIERDUnMgd2VyZSBzdWNjZXNzZnVsbHkgbWFwcGVkOyBvdGhlcndpc2UsIDwgMCBvbgorICogZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwcGM0eHhfZWRhY19tYXBfZGNycyhjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBkY3JfaG9zdF90ICpkY3JfaG9zdCkKK3sKKwl1bnNpZ25lZCBpbnQgZGNyX2Jhc2UsIGRjcl9sZW47CisKKwlpZiAobnAgPT0gTlVMTCB8fCBkY3JfaG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEdldCB0aGUgRENSIHJlc291cmNlIGV4dGVudCBhbmQgc2FuaXR5IGNoZWNrIHRoZSB2YWx1ZXMuICovCisKKwlkY3JfYmFzZSA9IGRjcl9yZXNvdXJjZV9zdGFydChucCwgMCk7CisJZGNyX2xlbiA9IGRjcl9yZXNvdXJjZV9sZW4obnAsIDApOworCisJaWYgKGRjcl9iYXNlID09IDAgfHwgZGNyX2xlbiA9PSAwKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0VSUiwKKwkJCQkgICAiRmFpbGVkIHRvIG9idGFpbiBEQ1IgcHJvcGVydHkuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRjcl9sZW4gIT0gU0RSQU1fRENSX1JFU09VUkNFX0xFTikgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9FUlIsCisJCQkJICAgIlVuZXhwZWN0ZWQgRENSIGxlbmd0aCAlZCwgZXhwZWN0ZWQgJWQuXG4iLAorCQkJCSAgIGRjcl9sZW4sIFNEUkFNX0RDUl9SRVNPVVJDRV9MRU4pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiAgQXR0ZW1wdCB0byBtYXAgdGhlIERDUiBleHRlbnQuICovCisKKwkqZGNyX2hvc3QgPSBkY3JfbWFwKG5wLCBkY3JfYmFzZSwgZGNyX2xlbik7CisKKwlpZiAoIURDUl9NQVBfT0soKmRjcl9ob3N0KSkgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9JTkZPLCAiRmFpbGVkIHRvIG1hcCBEQ1JzLlxuIik7CisJCSAgICByZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19wcm9iZSAtIGNoZWNrIGNvbnRyb2xsZXIgYW5kIGJpbmQgZHJpdmVyCisgKiBAb3A6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG5vZGUgYXNzb2NpYXRlZAorICogICAgICB3aXRoIHRoZSBjb250cm9sbGVyIGJlaW5nIHByb2JlZCBmb3IgZHJpdmVyIGJpbmRpbmcuCisgKiBAbWF0Y2g6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG1hdGNoCisgKiAgICAgICAgIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udHJvbGxlciBiZWluZyBwcm9iZWQKKyAqICAgICAgICAgZm9yIGRyaXZlciBiaW5kaW5nLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9iZXMgYSBzcGVjaWZpYyBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlcgorICogaW5zdGFuY2UgZm9yIGJpbmRpbmcgd2l0aCB0aGUgZHJpdmVyLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgY29udHJvbGxlciBpbnN0YW5jZSB3YXMgc3VjY2Vzc2Z1bGx5IGJvdW5kIHRvIHRoZQorICogZHJpdmVyOyBvdGhlcndpc2UsIDwgMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK3BwYzR4eF9lZGFjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgbWNvcHQxLCBtZW1jaGVjazsKKwlkY3JfaG9zdF90IGRjcl9ob3N0OworCWNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvcC0+bm9kZTsKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBOVUxMOworCXN0YXRpYyBpbnQgcHBjNHh4X2VkYWNfaW5zdGFuY2U7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHdlIG9ubHkgc3VwcG9ydCB0aGUgY29udHJvbGxlciByZWFsaXplZCBvbgorCSAqIHRoZSBBTUNDIFBQQyA0MDVFWFtyXS4gUmVqZWN0IGFueXRoaW5nIGVsc2UuCisJICovCisKKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLHNkcmFtLTQwNWV4IikgJiYKKwkgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLHNkcmFtLTQwNWV4ciIpKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX05PVElDRSwKKwkJCQkgICAiT25seSB0aGUgUFBDNDA1RVhbcl0gaXMgc3VwcG9ydGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogTmV4dCwgZ2V0IHRoZSBEQ1IgcHJvcGVydHkgYW5kIGF0dGVtcHQgdG8gbWFwIGl0IHNvIHRoYXQgd2UKKwkgKiBjYW4gcHJvYmUgdGhlIGNvbnRyb2xsZXIuCisJICovCisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19tYXBfZGNycyhucCwgJmRjcl9ob3N0KTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKgorCSAqIEZpcnN0IGRldGVybWluZSB3aGV0aGVyIEVDQyBpcyBlbmFibGVkIGF0IGFsbC4gSWYgbm90LAorCSAqIHRoZXJlIGlzIG5vIHVzZWZ1bCBjaGVja2luZyBvciBtb25pdG9yaW5nIHRoYXQgY2FuIGJlIGRvbmUKKwkgKiBmb3IgdGhpcyBjb250cm9sbGVyLgorCSAqLworCisJbWNvcHQxID0gbWZzZHJhbSgmZGNyX2hvc3QsIFNEUkFNX01DT1BUMSk7CisJbWVtY2hlY2sgPSAobWNvcHQxICYgU0RSQU1fTUNPUFQxX01DSEtfTUFTSyk7CisKKwlpZiAobWVtY2hlY2sgPT0gU0RSQU1fTUNPUFQxX01DSEtfTk9OKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0lORk8sICIlczogTm8gRUNDIG1lbW9yeSBkZXRlY3RlZCBvciAiCisJCQkJICAgIkVDQyBpcyBkaXNhYmxlZC5cbiIsIG5wLT5mdWxsX25hbWUpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IEVDQyBpcyBlbmFibGVkLCBhbGxvY2F0ZSBhbiBFREFDCisJICogY29udHJvbGxlciBpbnN0YW5jZSBhbmQgcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUKKwkgKiBpbml0aWFsaXphdGlvbi4KKwkgKi8KKworCW1jaSA9IGVkYWNfbWNfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSksCisJCQkgICAgcHBjNHh4X2VkYWNfbnJfY3Nyb3dzLAorCQkJICAgIHBwYzR4eF9lZGFjX25yX2NoYW5zLAorCQkJICAgIHBwYzR4eF9lZGFjX2luc3RhbmNlKTsKKworCWlmIChtY2kgPT0gTlVMTCkgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9FUlIsICIlczogIgorCQkJCSAgICJGYWlsZWQgdG8gYWxsb2NhdGUgRURBQyBNQyBpbnN0YW5jZSFcbiIsCisJCQkJICAgbnAtPmZ1bGxfbmFtZSk7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19tY19pbml0KG1jaSwgb3AsIG1hdGNoLCAmZGNyX2hvc3QsIG1jb3B0MSk7CisKKwlpZiAoc3RhdHVzKSB7CisJCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0VSUiwgbWNpLAorCQkJCSAgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBpbnN0YW5jZSFcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIGEgdmFsaWQsIGluaXRpYWxpemVkIEVEQUMgaW5zdGFuY2UgYm91bmQgdG8gdGhlCisJICogY29udHJvbGxlci4gQXR0ZW1wdCB0byByZWdpc3RlciBpdCB3aXRoIHRoZSBFREFDIHN1YnN5c3RlbQorCSAqIGFuZCwgaWYgbmVjZXNzYXJ5LCByZWdpc3RlciBpbnRlcnJ1cHRzLgorCSAqLworCisJaWYgKGVkYWNfbWNfYWRkX21jKG1jaSkpIHsKKwkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJICAgICAgIkZhaWxlZCB0byBhZGQgaW5zdGFuY2UhXG4iKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChlZGFjX29wX3N0YXRlID09IEVEQUNfT1BTVEFURV9JTlQpIHsKKwkJc3RhdHVzID0gcHBjNHh4X2VkYWNfcmVnaXN0ZXJfaXJxKG9wLCBtY2kpOworCisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZhaWwxOworCX0KKworCXBwYzR4eF9lZGFjX2luc3RhbmNlKys7CisKKwlyZXR1cm4gMDsKKworIGZhaWwxOgorCWVkYWNfbWNfZGVsX21jKG1jaS0+ZGV2KTsKKworIGZhaWw6CisJZWRhY19tY19mcmVlKG1jaSk7CisKKyBkb25lOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfcmVtb3ZlIC0gdW5iaW5kIGRyaXZlciBmcm9tIGNvbnRyb2xsZXIKKyAqIEBvcDogQSBwb2ludGVyIHRvIHRoZSBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBhc3NvY2lhdGVkCisgKiAgICAgIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlIGlzIHRvIGJlIHVuYm91bmQvcmVtb3ZlZAorICogICAgICBmcm9tLgorICoKKyAqIFRoaXMgcm91dGluZSB1bmJpbmRzIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHNwZWNpZmllZCBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBkZXNjcmliZWQgYnkgdGhlCisgKiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgKgorICogVW5jb25kaXRpb25hbGx5IHJldHVybnMgMC4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CisJc3RydWN0IHBwYzR4eF9lZGFjX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKSB7CisJCWZyZWVfaXJxKHBkYXRhLT5pcnFzLnNlYywgbWNpKTsKKwkJZnJlZV9pcnEocGRhdGEtPmlycXMuZGVkLCBtY2kpOworCX0KKworCWRjcl91bm1hcChwZGF0YS0+ZGNyX2hvc3QsIFNEUkFNX0RDUl9SRVNPVVJDRV9MRU4pOworCisJZWRhY19tY19kZWxfbWMobWNpLT5kZXYpOworCWVkYWNfbWNfZnJlZShtY2kpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfb3BzdGF0ZV9pbml0IC0gaW5pdGlhbGl6ZSBFREFDIHJlcG9ydGluZyBtZXRob2QKKyAqCisgKiBUaGlzIHJvdXRpbmUgZW5zdXJlcyB0aGF0IHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIHJlcG9ydGluZworICogbWV0aG9kIGlzIG1hcHBlZCB0byBhIHNhbmUgdmFsdWUgYXMgdGhlIEVEQUMgY29yZSBkZWZpbmVzIHRoZSB2YWx1ZQorICogdG8gRURBQ19PUFNUQVRFX0lOVkFMIGJ5IGRlZmF1bHQuIFdlIGRvbid0IGNhbGwgdGhlIGdsb2JhbAorICogb3BzdGF0ZV9pbml0IGFzIHRoYXQgZGVmYXVsdHMgdG8gcG9sbGluZyBhbmQgd2Ugd2FudCBpbnRlcnJ1cHQgYXMKKyAqIHRoZSBkZWZhdWx0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0CitwcGM0eHhfZWRhY19vcHN0YXRlX2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKGVkYWNfb3Bfc3RhdGUpIHsKKwljYXNlIEVEQUNfT1BTVEFURV9QT0xMOgorCWNhc2UgRURBQ19PUFNUQVRFX0lOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZWRhY19vcF9zdGF0ZSA9IEVEQUNfT1BTVEFURV9JTlQ7CisJCWJyZWFrOworCX0KKworCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0lORk8sICJSZXBvcnRpbmcgdHlwZTogJXNcbiIsCisJCQkgICAoKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX1BPTEwpID8KKwkJCSAgICBFREFDX09QU1RBVEVfUE9MTF9TVFIgOgorCQkJICAgICgoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKSA/CisJCQkgICAgIEVEQUNfT1BTVEFURV9JTlRfU1RSIDoKKwkJCSAgICAgRURBQ19PUFNUQVRFX1VOS05PV05fU1RSKSkpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2luaXQgLSBkcml2ZXIvbW9kdWxlIGluc2VydGlvbiBlbnRyeSBwb2ludAorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZHJpdmVyL21vZHVsZSBpbnNlcnRpb24gZW50cnkgcG9pbnQuIEl0CisgKiBpbml0aWFsaXplcyB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciByZXBvcnRpbmcgc3RhdGUgYW5kCisgKiByZWdpc3RlcnMgdGhlIGRyaXZlciBhcyBhbiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgcGxhdGZvcm0KKyAqIGRyaXZlci4KKyAqLworc3RhdGljIGludCBfX2luaXQKK3BwYzR4eF9lZGFjX2luaXQodm9pZCkKK3sKKwlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9JTkZPLCBQUEM0WFhfRURBQ19NT0RVTEVfUkVWSVNJT04gIlxuIik7CisKKwlwcGM0eHhfZWRhY19vcHN0YXRlX2luaXQoKTsKKworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnBwYzR4eF9lZGFjX2RyaXZlcik7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfZXhpdCAtIGRyaXZlci9tb2R1bGUgcmVtb3ZhbCBlbnRyeSBwb2ludAorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZHJpdmVyL21vZHVsZSByZW1vdmFsIGVudHJ5IHBvaW50LiBJdAorICogdW5yZWdpc3RlcnMgdGhlIGRyaXZlciBhcyBhbiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgcGxhdGZvcm0KKyAqIGRyaXZlci4KKyAqLworc3RhdGljIHZvaWQgX19leGl0CitwcGM0eHhfZWRhY19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnBwYzR4eF9lZGFjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBwYzR4eF9lZGFjX2luaXQpOworbW9kdWxlX2V4aXQocHBjNHh4X2VkYWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkdyYW50IEVyaWNrc29uIDxnZXJpY2tzb25AbnVvdmF0aW9ucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVEQUMgTUMgRHJpdmVyIGZvciB0aGUgUFBDNHh4IElCTSBERFIyIE1lbW9yeSBDb250cm9sbGVyIik7Cittb2R1bGVfcGFyYW0oZWRhY19vcF9zdGF0ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZWRhY19vcF9zdGF0ZSwgIkVEQUMgRXJyb3IgUmVwb3J0aW5nIFN0YXRlOiAiCisJCSAiMD0iIEVEQUNfT1BTVEFURV9QT0xMX1NUUiAiLCAyPSIgRURBQ19PUFNUQVRFX0lOVF9TVFIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE1NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnVvdmF0aW9uIFN5c3RlbSBEZXNpZ25zLCBMTEMKKyAqICAgR3JhbnQgRXJpY2tzb24gPGdlcmlja3NvbkBudW92YXRpb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBwcm9jZXNzb3IgbW5lbW9uaWNzIGZvciBhY2Nlc3NpbmcgYW5kIG1hbmFnaW5nCisgKiB0aGUgSUJNIEREUjEvRERSMiBFQ0MgY29udHJvbGxlciBmb3VuZCBpbiB0aGUgNDA1RVhbcl0sIDQ0MFNQLAorICogNDQwU1BlLCA0NjBFWCwgNDYwR1QgYW5kIDQ2MFNYLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX1BQQzRYWF9FREFDX0gKKyNkZWZpbmUgX19QUEM0WFhfRURBQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogTWFjcm8gZm9yIGdlbmVyYXRpbmcgcmVnaXN0ZXIgZmllbGQgbW5lbW9uaWNzCisgKi8KKyNkZWZpbmUgUFBDX1JFR19CSVRTCQkJMzIKKyNkZWZpbmUgUFBDX1JFR19WQUwoYml0LCB2YWwpCQkoKHZhbCkgPDwgKChQUENfUkVHX0JJVFMgLSAxKSAtIChiaXQpKSkKKyNkZWZpbmUgUFBDX1JFR19ERUNPREUoYml0LCB2YWwpCSgodmFsKSA+PiAoKFBQQ19SRUdfQklUUyAtIDEpIC0gKGJpdCkpKQorCisvKgorICogSUJNIDR4eCBERFIxL0REUjIgU0RSQU0gbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzIChhdCBsZWFzdCB0aG9zZQorICogcmVsZXZhbnQgdG8gRUNDKQorICovCisjZGVmaW5lIFNEUkFNX0JFU1IJCQkweDAwCS8qIEVycm9yIHN0YXR1cyAocmVhZC9jbGVhcikgKi8KKyNkZWZpbmUgU0RSQU1fQkVTUlQJCQkweDAxCS8qIEVycm9yIHN0YXR1c3MgKHRlc3Qvc2V0KSAgKi8KKyNkZWZpbmUgU0RSQU1fQkVBUkwJCQkweDAyCS8qIEVycm9yIGFkZHJlc3MgbG93CSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fQkVBUkgJCQkweDAzCS8qIEVycm9yIGFkZHJlc3MgaGlnaAkgICAgICovCisjZGVmaW5lIFNEUkFNX1dNSVJRCQkJMHgwNgkvKiBXcml0ZSBtYXN0ZXIgKHJlYWQvY2xlYXIpICovCisjZGVmaW5lIFNEUkFNX1dNSVJRVAkJCTB4MDcJLyogV3JpdGUgbWFzdGVyICh0ZXN0L3NldCkgICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDEJCQkweDIwCS8qIENvbnRyb2xsZXIgb3B0aW9ucyAxCSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTUJYQ0ZfQkFTRQkJMHg0MAkvKiBCYW5rIG4gY29uZmlndXJhdGlvbiBiYXNlICovCisjZGVmaW5lCVNEUkFNX01CWENGKG4pCQkJKFNEUkFNX01CWENGX0JBU0UgKyAoNCAqIChuKSkpCisjZGVmaW5lIFNEUkFNX01CMENGCQkJU0RSQU1fTUJYQ0YoMCkKKyNkZWZpbmUgU0RSQU1fTUIxQ0YJCQlTRFJBTV9NQlhDRigxKQorI2RlZmluZSBTRFJBTV9NQjJDRgkJCVNEUkFNX01CWENGKDIpCisjZGVmaW5lIFNEUkFNX01CM0NGCQkJU0RSQU1fTUJYQ0YoMykKKyNkZWZpbmUgU0RSQU1fRUNDQ1IJCQkweDk4CS8qIEVDQyBlcnJvciBzdGF0dXMJICAgICAqLworI2RlZmluZSBTRFJBTV9FQ0NFUwkJCVNEUkFNX0VDQ0NSCisKKy8qCisgKiBQTEIgTWFzdGVyIElEcworICovCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0ZJUlNUCQkwCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0lDVQkJU0RSQU1fUExCX00wSURfRklSU1QKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfUENJRTAJCTEKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfUENJRTEJCTIKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfRE1BCQkzCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0RDVQkJNAorI2RlZmluZQlTRFJBTV9QTEJfTTBJRF9PUEIJCTUKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfTUFMCQk2CisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX1NFQwkJNworI2RlZmluZQlTRFJBTV9QTEJfTTBJRF9BSEIJCTgKKyNkZWZpbmUgU0RSQU1fUExCX00wSURfTEFTVAkJU0RSQU1fUExCX00wSURfQUhCCisjZGVmaW5lIFNEUkFNX1BMQl9NMElEX0NPVU5UCQkoU0RSQU1fUExCX00wSURfTEFTVCAtIFwKKwkJCQkJIFNEUkFNX1BMQl9NMElEX0ZJUlNUICsgMSkKKworLyoKKyAqIE1lbW9yeSBDb250cm9sbGVyIEJ1cyBFcnJvciBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9CRVNSX01BU0sJCQlQUENfUkVHX1ZBTCg3LCAweEZGKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfTUFTSwkJUFBDX1JFR19WQUwoMywgMHhGKQorI2RlZmluZQlTRFJBTV9CRVNSX00wSURfREVDT0RFKG4pCVBQQ19SRUdfREVDT0RFKDMsIG4pCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9JQ1UJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX0lDVSkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX1BDSUUwCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9QQ0lFMCkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX1BDSUUxCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9QQ0lFMSkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX0RNQQkJUFBDX1JFR19WQUwoMywgU0RSQU1fUExCX00wSURfRE1BKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfRENVCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9EQ1UpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9PUEIJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX09QQikKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX01BTAkJUFBDX1JFR19WQUwoMywgU0RSQU1fUExCX00wSURfTUFMKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfU0VDCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9TRUMpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9BSEIJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX0FIQikKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMEVUX01BU0sJCVBQQ19SRUdfVkFMKDYsIDB4NykKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMEVUX05PTkUJCVBQQ19SRUdfVkFMKDYsIDApCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBFVF9FQ0MJCVBQQ19SRUdfVkFMKDYsIDEpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBSV19NQVNLCQlQUENfUkVHX1ZBTCg3LCAxKQorI2RlZmluZSBTRFJBTV9CRVNSX00wUldfV1JJVEUJCVBQQ19SRUdfVkFMKDcsIDApCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBSV19SRUFECQlQUENfUkVHX1ZBTCg3LCAxKQorCisvKgorICogTWVtb3J5IENvbnRyb2xsZXIgUExCIFdyaXRlIE1hc3RlciBJbnRlcnJ1cHQgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9XTUlSUV9NQVNLCQlQUENfUkVHX1ZBTCg4LCAweDFGRikKKyNkZWZpbmUJU0RSQU1fV01JUlFfRU5DT0RFKGlkKQkJUFBDX1JFR19WQUwoKGlkICUgXAorCQkJCQkJICAgICBTRFJBTV9QTEJfTTBJRF9DT1VOVCksIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX0lDVQkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX0lDVSwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfUENJRTAJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX1BDSUUwLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9QQ0lFMQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfUENJRTEsIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX0RNQQkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX0RNQSwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfRENVCQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfRENVLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9PUEIJCQlQUENfUkVHX1ZBTChTRFJBTV9QTEJfTTBJRF9PUEIsIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX01BTAkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX01BTCwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfU0VDCQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfU0VDLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9BSEIJCQlQUENfUkVHX1ZBTChTRFJBTV9QTEJfTTBJRF9BSEIsIDEpCisKKy8qCisgKiBNZW1vcnkgQ29udHJvbGxlciBPcHRpb25zIDEgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19NQVNLCSAgICBQUENfUkVHX1ZBTCgzLCAweDMpCSAvKiBFQ0MgbWFzawkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX05PTgkgICAgUFBDX1JFR19WQUwoMywgMHgwKQkgLyogTm8gRUNDIGdlbgkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX0dFTgkgICAgUFBDX1JFR19WQUwoMywgMHgyKQkgLyogRUNDIGdlbgkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX0NISwkgICAgUFBDX1JFR19WQUwoMywgMHgxKQkgLyogRUNDIGdlbiBhbmQgY2hrICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19DSEtfUkVQICAgUFBDX1JFR19WQUwoMywgMHgzKQkgLyogRUNDIGdlbi9jaGsvcnB0ICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19ERUNPREUobikgKCgoKHUzMikobikpID4+IDI4KSAmIDB4MykKKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1JERU5fTUFTSwkgICAgUFBDX1JFR19WQUwoNCwgMHgxKQkgLyogUmdzdHJkIERJTU0gbWFzayAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfUkRFTgkgICAgUFBDX1JFR19WQUwoNCwgMHgxKQkgLyogUmdzdHJkIERJTU0gZW5ibCAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfV0RUSF9NQVNLCSAgICBQUENfUkVHX1ZBTCg3LCAweDEpCSAvKiBXaWR0aCBtYXNrCSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1dEVEhfMzIJICAgIFBQQ19SRUdfVkFMKDcsIDB4MCkJIC8qIDMyIGJpdHMJICAgICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfV0RUSF8xNgkgICAgUFBDX1JFR19WQUwoNywgMHgxKQkgLyogMTYgYml0cwkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFJfVFlQRV9NQVNLICBQUENfUkVHX1ZBTCgxMSwgMHgxKSAvKiBERFIgdHlwZSBtYXNrICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFIxX1RZUEUJICAgIFBQQ19SRUdfVkFMKDExLCAweDApIC8qIEREUjEgdHlwZQkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFIyX1RZUEUJICAgIFBQQ19SRUdfVkFMKDExLCAweDEpIC8qIEREUjIgdHlwZQkgICAgICovCisKKy8qCisgKiBNZW1vcnkgQmFuayAwIC0gbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU0RSQU1fTUJDRl9CQV9NQVNLCQlQUENfUkVHX1ZBTCgxMiwgMHgxRkZGKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaX01BU0sJCVBQQ19SRUdfVkFMKDE5LCAweEYpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfREVDT0RFKG1ieGNmKQlQUENfUkVHX0RFQ09ERSgxOSwgbWJ4Y2YpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfNE1CCQlQUENfUkVHX1ZBTCgxOSwgMHgwKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzhNQgkJUFBDX1JFR19WQUwoMTksIDB4MSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xNk1CCQlQUENfUkVHX1ZBTCgxOSwgMHgyKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzMyTUIJCVBQQ19SRUdfVkFMKDE5LCAweDMpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfNjRNQgkJUFBDX1JFR19WQUwoMTksIDB4NCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xMjhNQgkJUFBDX1JFR19WQUwoMTksIDB4NSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8yNTZNQgkJUFBDX1JFR19WQUwoMTksIDB4NikKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl81MTJNQgkJUFBDX1JFR19WQUwoMTksIDB4NykKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xR0IJCVBQQ19SRUdfVkFMKDE5LCAweDgpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfMkdCCQlQUENfUkVHX1ZBTCgxOSwgMHg5KQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzRHQgkJUFBDX1JFR19WQUwoMTksIDB4QSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl84R0IJCVBQQ19SRUdfVkFMKDE5LCAweEIpCisjZGVmaW5lIFNEUkFNX01CQ0ZfQU1fTUFTSwkJUFBDX1JFR19WQUwoMjMsIDB4RikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMAkJUFBDX1JFR19WQUwoMjMsIDB4MCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMQkJUFBDX1JFR19WQUwoMjMsIDB4MSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMgkJUFBDX1JFR19WQUwoMjMsIDB4MikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMwkJUFBDX1JFR19WQUwoMjMsIDB4MykKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNAkJUFBDX1JFR19WQUwoMjMsIDB4NCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNQkJUFBDX1JFR19WQUwoMjMsIDB4NSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNgkJUFBDX1JFR19WQUwoMjMsIDB4NikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNwkJUFBDX1JFR19WQUwoMjMsIDB4NykKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFOAkJUFBDX1JFR19WQUwoMjMsIDB4OCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFOQkJUFBDX1JFR19WQUwoMjMsIDB4OSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9CRV9NQVNLCQlQUENfUkVHX1ZBTCgzMSwgMHgxKQorI2RlZmluZSBTRFJBTV9NQkNGX0JFX0RJU0FCTEUJCVBQQ19SRUdfVkFMKDMxLCAweDApCisjZGVmaW5lIFNEUkFNX01CQ0ZfQkVfRU5BQkxFCQlQUENfUkVHX1ZBTCgzMSwgMHgxKQorCisvKgorICogRUNDIEVycm9yIFN0YXR1cworICovCisjZGVmaW5lIFNEUkFNX0VDQ0VTX01BU0sJCVBQQ19SRUdfVkFMKDIxLCAweDNGRkZGRikKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQk5DRV9NQVNLCQlQUENfUkVHX1ZBTCgxNSwgMHhGRkZGKQorI2RlZmluZSBTRFJBTV9FQ0NFU19CTkNFX0VOQ09ERShsYW5lKQlQUENfUkVHX1ZBTCgoKGxhbmUpICYgMHhGKSwgMSkKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQ0tCRVJfTUFTSwkJUFBDX1JFR19WQUwoMTcsIDB4MykKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQ0tCRVJfTk9ORQkJUFBDX1JFR19WQUwoMTcsIDApCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzE2X0VDQ18wXzMJUFBDX1JFR19WQUwoMTcsIDIpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzMJUFBDX1JFR19WQUwoMTcsIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ180XzgJUFBDX1JFR19WQUwoMTcsIDIpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzgJUFBDX1JFR19WQUwoMTcsIDMpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NFCQkJUFBDX1JFR19WQUwoMTgsIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX1VFCQkJUFBDX1JFR19WQUwoMTksIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0JLTkVSX01BU0sJCVBQQ19SRUdfVkFMKDIxLCAweDMpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0JLMEVSCQlQUENfUkVHX1ZBTCgyMCwgMSkKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQksxRVIJCVBQQ19SRUdfVkFMKDIxLCAxKQorCisjZW5kaWYgLyogX19QUEM0WFhfRURBQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDNkMjU2NTQuLmVkYjAyNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC00Miw5ICs0Miw5IEBACiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGFkZCBzb21lIGV4dHJhIGNoZWNrcyBhbmQgZGlhZ25vc3RpY3MgdG8gR1BJTyBjYWxscy4KLQkgIFRoZSBjaGVja3MgaGVscCBlbnN1cmUgdGhhdCBHUElPcyBoYXZlIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQKLQkgIGJlZm9yZSB0aGV5IGFyZSB1c2VkIGFuZCB0aGF0IHNsZWVwaW5nIGNhbGxzIGFyZW4gbm90IG1hZGUgZnJvbQotCSAgbm9uc2xlZXBpbmcgY29udGV4dHMuICBUaGV5IGNhbiBtYWtlIGJpdGJhbmdlZCBzZXJpYWwgcHJvdG9jb2xzCisJICBUaGVzZSBjaGVja3MgaGVscCBlbnN1cmUgdGhhdCBHUElPcyBoYXZlIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQKKwkgIGJlZm9yZSB0aGV5IGFyZSB1c2VkLCBhbmQgdGhhdCBzbGVlcGluZyBjYWxscyBhcmUgbm90IG1hZGUgZnJvbQorCSAgbm9uLXNsZWVwaW5nIGNvbnRleHRzLiAgVGhleSBjYW4gbWFrZSBiaXRiYW5nZWQgc2VyaWFsIHByb3RvY29scwogCSAgc2xvd2VyLiAgVGhlIGRpYWdub3N0aWNzIGhlbHAgY2F0Y2ggdGhlIHR5cGUgb2Ygc2V0dXAgZXJyb3JzCiAJICB0aGF0IGFyZSBtb3N0IGNvbW1vbiB3aGVuIHNldHRpbmcgdXAgbmV3IHBsYXRmb3JtcyBvciBib2FyZHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDQyZmIyZmQuLjUxYThkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNjksMjAgKzY5LDI0IEBACiAgKiB0aG9zZSBjYWxscyBoYXZlIG5vIHRlZXRoKSB3ZSBjYW4ndCBhdm9pZCBhdXRvcmVxdWVzdGluZy4gIFRoaXMgbmFnCiAgKiBtZXNzYWdlIHNob3VsZCBtb3RpdmF0ZSBzd2l0Y2hpbmcgdG8gZXhwbGljaXQgcmVxdWVzdHMuLi4gc28gc2hvdWxkCiAgKiB0aGUgd2Vha2VyIGNsZWFudXAgYWZ0ZXIgZmF1bHRzLCBjb21wYXJlZCB0byBncGlvX3JlcXVlc3QoKS4KKyAqCisgKiBOT1RFOiB0aGUgYXV0b3JlcXVlc3QgbWVjaGFuaXNtIGlzIGdvaW5nIGF3YXk7IGF0IHRoaXMgcG9pbnQgaXQncworICogb25seSAibGVnYWwiIGluIHRoZSBzZW5zZSB0aGF0IChvbGQpIGNvZGUgdXNpbmcgaXQgd29uJ3QgYnJlYWsgeWV0LAorICogYnV0IGluc3RlYWQgb25seSB0cmlnZ2VycyBhIFdBUk4oKSBzdGFjayBkdW1wLgogICovCiBzdGF0aWMgaW50IGdwaW9fZW5zdXJlX3JlcXVlc3RlZChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykgPT0gMCkgewotCQlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwID0gZGVzYy0+Y2hpcDsKLQkJaW50IGdwaW8gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OworCWNvbnN0IHN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSBkZXNjLT5jaGlwOworCWNvbnN0IGludCBncGlvID0gY2hpcC0+YmFzZSArIG9mZnNldDsKIAorCWlmIChXQVJOKHRlc3RfYW5kX3NldF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykgPT0gMCwKKwkJCSJhdXRvcmVxdWVzdCBHUElPLSVkXG4iLCBncGlvKSkgewogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNoaXAtPm93bmVyKSkgewogCQkJcHJfZXJyKCJHUElPLSVkOiBtb2R1bGUgY2FuJ3QgYmUgZ290dGVuIFxuIiwgZ3Bpbyk7CiAJCQljbGVhcl9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncyk7CiAJCQkvKiBsb3NlICovCiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlwcl93YXJuaW5nKCJHUElPLSVkIGF1dG9yZXF1ZXN0ZWRcbiIsIGdwaW8pOwogCQlkZXNjX3NldF9sYWJlbChkZXNjLCAiW2F1dG9dIik7CiAJCS8qIGNhbGxlciBtdXN0IGNoaXAtPnJlcXVlc3QoKSB3L28gc3BpbmxvY2sgKi8KIAkJaWYgKGNoaXAtPnJlcXVlc3QpCkBAIC00MzgsNiArNDQyLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjOwogCWludAkJCXN0YXR1cyA9IC1FSU5WQUw7CisJY2hhcgkJCSppb25hbWUgPSBOVUxMOwogCiAJLyogY2FuJ3QgZXhwb3J0IHVudGlsIHN5c2ZzIGlzIGF2YWlsYWJsZSAuLi4gKi8KIAlpZiAoIWdwaW9fY2xhc3MucCkgewpAQCAtNDYxLDExICs0NjYsMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAKKwlpZiAoZGVzYy0+Y2hpcC0+bmFtZXMgJiYgZGVzYy0+Y2hpcC0+bmFtZXNbZ3BpbyAtIGRlc2MtPmNoaXAtPmJhc2VdKQorCQlpb25hbWUgPSBkZXNjLT5jaGlwLT5uYW1lc1tncGlvIC0gZGVzYy0+Y2hpcC0+YmFzZV07CisKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3RydWN0IGRldmljZQkqZGV2OwogCiAJCWRldiA9IGRldmljZV9jcmVhdGUoJmdwaW9fY2xhc3MsIGRlc2MtPmNoaXAtPmRldiwgTUtERVYoMCwgMCksCi0JCQkJCWRlc2MsICJncGlvJWQiLCBncGlvKTsKKwkJCQkgICAgZGVzYywgaW9uYW1lID8gaW9uYW1lIDogImdwaW8lZCIsIGdwaW8pOwogCQlpZiAoZGV2KSB7CiAJCQlpZiAoZGlyZWN0aW9uX21heV9jaGFuZ2UpCiAJCQkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCkBAIC01MTMsNiArNTIxLDcgQEAKIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKIAogCWRlc2MgPSAmZ3Bpb19kZXNjW2dwaW9dOworCiAJaWYgKHRlc3RfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpKSB7CiAJCXN0cnVjdCBkZXZpY2UJKmRldiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwppbmRleCAxYzNhOGM1Li5hMDQ2MzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC00Miw2ICs0MiwyNiBAQAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAogfTsKIAorc3RhdGljIHZvaWQgZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKnQ7CisKKwlpZiAoZmxhZ3MgPT0gKERSTV9NT0RFX0ZMQUdfREJMU0NBTiB8IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CisJCWlmICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkgJiYKKwkJCQkhKGZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQorCQkJbW9kZS0+c3RhdHVzID0gTU9ERV9OT19JTlRFUkxBQ0U7CisJCWlmICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pICYmCisJCQkJIShmbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikpCisJCQltb2RlLT5zdGF0dXMgPSBNT0RFX05PX0RCTEVTQ0FOOworCX0KKworCXJldHVybjsKK30KKwogLyoqCiAgKiBkcm1faGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyAtIGdldCBjb21wbGV0ZSBzZXQgb2YgZGlzcGxheSBtb2RlcwogICogQGRldjogRFJNIGRldmljZQpAQCAtNzIsNiArOTIsNyBAQAogCXN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqY29ubmVjdG9yX2Z1bmNzID0KIAkJY29ubmVjdG9yLT5oZWxwZXJfcHJpdmF0ZTsKIAlpbnQgY291bnQgPSAwOworCWludCBtb2RlX2ZsYWdzID0gMDsKIAogCURSTV9ERUJVRygiJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJLyogc2V0IGFsbCBtb2RlcyB0byB0aGUgdW52ZXJpZmllZCBzdGF0ZSAqLwpAQCAtOTYsNiArMTE3LDEzIEBACiAJaWYgKG1heFggJiYgbWF4WSkKIAkJZHJtX21vZGVfdmFsaWRhdGVfc2l6ZShkZXYsICZjb25uZWN0b3ItPm1vZGVzLCBtYXhYLAogCQkJCSAgICAgICBtYXhZLCAwKTsKKworCWlmIChjb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkKQorCQltb2RlX2ZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCWlmIChjb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCkKKwkJbW9kZV9mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CisJZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhjb25uZWN0b3IsIG1vZGVfZmxhZ3MpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CiAJCWlmIChtb2RlLT5zdGF0dXMgPT0gTU9ERV9PSykKIAkJCW1vZGUtPnN0YXR1cyA9IGNvbm5lY3Rvcl9mdW5jcy0+bW9kZV92YWxpZChjb25uZWN0b3IsCkBAIC04ODUsNyArOTEzLDYgQEAKIC8qKgogICogZHJtX2luaXRpYWxfY29uZmlnIC0gc2V0dXAgYSBzYW5lIGluaXRpYWwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24KICAqIEBkZXY6IERSTSBkZXZpY2UKLSAqIEBjYW5fZ3JvdzogdGhpcyBjb25maWd1cmF0aW9uIGlzIGdyb3dhYmxlCiAgKgogICogTE9DS0lORzoKICAqIENhbGxlZCBhdCBpbml0IHRpbWUsIG11c3QgdGFrZSBtb2RlIGNvbmZpZyBsb2NrLgpAQCAtODk3LDcgKzkyNCw3IEBACiAgKiBSRVRVUk5TOgogICogWmVybyBpZiBldmVyeXRoaW5nIHdlbnQgb2ssIG5vbnplcm8gb3RoZXJ3aXNlLgogICovCi1ib29sIGRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBjYW5fZ3JvdykKK2Jvb2wgZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJaW50IGNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggYzY3NDAwMC4uY2E5YzYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTEyNSwxMCArMTI1LDggQEAKIAkJRFJNX0VSUk9SKCJFRElEIGhhcyBtYWpvciB2ZXJzaW9uICVkLCBpbnN0ZWFkIG9mIDFcbiIsIGVkaWQtPnZlcnNpb24pOwogCQlnb3RvIGJhZDsKIAl9Ci0JaWYgKGVkaWQtPnJldmlzaW9uID4gMykgewotCQlEUk1fRVJST1IoIkVESUQgaGFzIG1pbm9yIHZlcnNpb24gJWQsIHdoaWNoIGlzIG5vdCBiZXR3ZWVuIDAtM1xuIiwgZWRpZC0+cmV2aXNpb24pOwotCQlnb3RvIGJhZDsKLQl9CisJaWYgKGVkaWQtPnJldmlzaW9uID4gNCkKKwkJRFJNX0RFQlVHKCJFRElEIG1pbm9yID4gNCwgYXNzdW1pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRURJRF9MRU5HVEg7IGkrKykKIAkJY3N1bSArPSByYXdfZWRpZFtpXTsKQEAgLTE2Miw3ICsxNjAsNyBAQAogCWVkaWRfdmVuZG9yWzBdID0gKChlZGlkLT5tZmdfaWRbMF0gJiAweDdjKSA+PiAyKSArICdAJzsKIAllZGlkX3ZlbmRvclsxXSA9ICgoKGVkaWQtPm1mZ19pZFswXSAmIDB4MykgPDwgMykgfAogCQkJICAoKGVkaWQtPm1mZ19pZFsxXSAmIDB4ZTApID4+IDUpKSArICdAJzsKLQllZGlkX3ZlbmRvclsyXSA9IChlZGlkLT5tZmdfaWRbMl0gJiAweDFmKSArICdAJzsKKwllZGlkX3ZlbmRvclsyXSA9IChlZGlkLT5tZmdfaWRbMV0gJiAweDFmKSArICdAJzsKIAogCXJldHVybiAhc3RybmNtcChlZGlkX3ZlbmRvciwgdmVuZG9yLCAzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCmluZGV4IGMxMTczZDguLjQ5ODRhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtNTA1LDcgKzUwNSw2IEBACiAJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9oYXNoX2l0ZW0gKmhhc2g7Ci0JdW5zaWduZWQgbG9uZyBwcm90OwogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtNTM4LDExICs1MzcsNyBAQAogCXZtYS0+dm1fb3BzID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ZtX29wczsKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcC0+aGFuZGxlOwogCS8qIEZJWE1FOiB1c2UgcGdwcm90X3dyaXRlY29tYmluZSB3aGVuIGF2YWlsYWJsZSAqLwotCXByb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KTsKLSNpZmRlZiBDT05GSUdfWDg2Ci0JcHJvdCB8PSBfUEFHRV9DQUNIRV9XQzsKLSNlbmRpZgotCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocHJvdCk7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKIAogCS8qIFRha2UgYSByZWYgZm9yIHRoaXMgbWFwcGluZyBvZiB0aGUgb2JqZWN0LCBzbyB0aGF0IHRoZSBmYXVsdAogCSAqIGhhbmRsZXIgY2FuIGRlcmVmZXJlbmNlIHRoZSBtbWFwIG9mZnNldCdzIHBvaW50ZXIgdG8gdGhlIG9iamVjdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCA1ZGU1NzNhLi5iYzBjNjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC00NTEsNiArNDUxLDcgQEAKIAogCWtvYmplY3RfdWV2ZW50X2VudigmZGV2LT5wcmltYXJ5LT5rZGV2LmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX3N5c2ZzX2hvdHBsdWdfZXZlbnQpOwogCiAvKioKICAqIGRybV9zeXNmc19kZXZpY2VfYWRkIC0gYWRkcyBhIGNsYXNzIGRldmljZSB0byBzeXNmcyBmb3IgYSBjaGFyYWN0ZXIgZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA4NTU0OWY2Li5jMjNiM2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogCSAqIFNvbWUgb2YgdGhlIHByZWFsbG9jYXRlZCBzcGFjZSBpcyB0YWtlbiBieSB0aGUgR1RUCiAJICogYW5kIHBvcHVwLiAgR1RUIGlzIDFLIHBlciBNQiBvZiBhcGVydHVyZSBzaXplLCBhbmQgcG9wdXAgaXMgNEsuCiAJICovCi0JaWYgKElTX0c0WChkZXYpKQorCWlmIChJU19HNFgoZGV2KSB8fCBJU19JR0QoZGV2KSkKIAkJb3ZlcmhlYWQgPSA0MDk2OwogCWVsc2UKIAkJb3ZlcmhlYWQgPSAoKmFwZXJ0dXJlX3NpemUgLyAxMDI0KSArIDQwOTY7CkBAIC0xMDMwLDEzICsxMDMwLDYgQEAKIAlpZiAocmV0KQogCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKIAotCS8qIEZJWE1FOiByZS1hZGQgaG90cGx1ZyBzdXBwb3J0ICovCi0jaWYgMAotCXJldCA9IGRybV9ob3RwbHVnX2luaXQoZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKLSNlbmRpZgotCiAJLyogQWx3YXlzIHNhZmUgaW4gdGhlIG1vZGUgc2V0dGluZyBjYXNlLiAqLwogCS8qIEZJWE1FOiBkbyBwcmUvcG9zdC1tb2RlIHNldCBzdHVmZiBpbiBjb3JlIEtNUyBjb2RlICovCiAJZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gMTsKQEAgLTEwNDksNyArMTA0Miw3IEBACiAKIAlpbnRlbF9tb2Rlc2V0X2luaXQoZGV2KTsKIAotCWRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoZGV2LCBmYWxzZSk7CisJZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhkZXYpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGMxNjg1ZDAuLjMxN2IxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTU5LDYgKzE1OSw5IEBACiAJdTMyIGlycV9tYXNrX3JlZzsKIAl1MzIgcGlwZXN0YXRbMl07CiAKKwl1MzIgaG90cGx1Z19zdXBwb3J0ZWRfbWFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaG90cGx1Z193b3JrOworCiAJaW50IHRleF9scnVfbG9nX2dyYW51bGFyaXR5OwogCWludCBhbGxvd19iYXRjaGJ1ZmZlcjsKIAlzdHJ1Y3QgbWVtX2Jsb2NrICphZ3BfaGVhcDsKQEAgLTI5Nyw2ICszMDAsNyBAQAogCQkgKgogCQkgKiBBIHJlZmVyZW5jZSBpcyBoZWxkIG9uIHRoZSBidWZmZXIgd2hpbGUgb24gdGhpcyBsaXN0LgogCQkgKi8KKwkJc3BpbmxvY2tfdCBhY3RpdmVfbGlzdF9sb2NrOwogCQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0OwogCiAJCS8qKgpAQCAtODEwLDYgKzgxNCw3IEBACiAjZGVmaW5lIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpIChJU19JOVhYKGRldikgJiYgIShJU19JOTE1RyhkZXYpIHx8IFwKIAkJCQkJCSAgICAgIElTX0k5MTVHTShkZXYpKSkKICNkZWZpbmUgU1VQUE9SVFNfSU5URUdSQVRFRF9IRE1JKGRldikJKElTX0c0WChkZXYpKQorI2RlZmluZSBJOTE1X0hBU19IT1RQTFVHKGRldikgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUcoZGV2KSkKIAogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggZTAzODlhZC4uMTQ0OWI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0xMDcyLDYgKzEwNzIsNyBAQAogCWNhc2UgLUVBR0FJTjoKIAkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAljYXNlIC1FRkFVTFQ6CisJY2FzZSAtRUlOVkFMOgogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCWRlZmF1bHQ6CiAJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7CkBAIC0xMzI0LDggKzEzMjUsMTAgQEAKIAkJb2JqX3ByaXYtPmFjdGl2ZSA9IDE7CiAJfQogCS8qIE1vdmUgZnJvbSB3aGF0ZXZlciBsaXN0IHdlIHdlcmUgb24gdG8gdGhlIHRhaWwgb2YgZXhlY3V0aW9uLiAqLworCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwogCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKIAkJICAgICAgICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID0gc2Vxbm87CiB9CiAKQEAgLTE0NjcsNiArMTQ3MCw3IEBACiAJLyogTW92ZSBhbnkgYnVmZmVycyBvbiB0aGUgYWN0aXZlIGxpc3QgdGhhdCBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQKIAkgKiBieSB0aGUgcmluZ2J1ZmZlciB0byB0aGUgZmx1c2hpbmcvaW5hY3RpdmUgbGlzdHMgYXMgYXBwcm9wcmlhdGUuCiAJICovCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKSB7CiAJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CkBAIC0xNDgxLDcgKzE0ODUsNyBAQAogCQkgKiB0aGlzIHNlcW5vLgogCQkgKi8KIAkJaWYgKG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyAhPSByZXF1ZXN0LT5zZXFubykKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCiAjaWYgV0FUQ0hfTFJVCiAJCURSTV9JTkZPKCIlczogcmV0aXJlICVkIG1vdmVzIHRvIGluYWN0aXZlIGxpc3QgJXBcbiIsCkBAIC0xNDkzLDYgKzE0OTcsOCBAQAogCQllbHNlCiAJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOwogCX0KK291dDoKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwogfQogCiAvKioKQEAgLTE5OTAsMjAgKzE5OTYsMjMgQEAKIAlpbnQgcmVnbnVtID0gb2JqX3ByaXYtPmZlbmNlX3JlZzsKIAl1aW50MzJfdCB2YWw7CiAJdWludDMyX3QgcGl0Y2hfdmFsOworCXVpbnQzMl90IGZlbmNlX3NpemVfYml0czsKIAotCWlmICgob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STkxNV9GRU5DRV9TVEFSVF9NQVNLKSB8fAorCWlmICgob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STgzMF9GRU5DRV9TVEFSVF9NQVNLKSB8fAogCSAgICAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiAob2JqLT5zaXplIC0gMSkpKSB7Ci0JCVdBUk4oMSwgIiVzOiBvYmplY3QgMHglMDh4IG5vdCAxTSBvciBzaXplIGFsaWduZWRcbiIsCisJCVdBUk4oMSwgIiVzOiBvYmplY3QgMHglMDh4IG5vdCA1MTJLIG9yIHNpemUgYWxpZ25lZFxuIiwKIAkJICAgICBfX2Z1bmNfXywgb2JqX3ByaXYtPmd0dF9vZmZzZXQpOwogCQlyZXR1cm47CiAJfQogCiAJcGl0Y2hfdmFsID0gKG9ial9wcml2LT5zdHJpZGUgLyAxMjgpIC0gMTsKLQorCVdBUk5fT04ocGl0Y2hfdmFsICYgfjB4MDAwMDAwMGYpOwogCXZhbCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OwogCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKIAkJdmFsIHw9IDEgPDwgSTgzMF9GRU5DRV9USUxJTkdfWV9TSElGVDsKLQl2YWwgfD0gSTgzMF9GRU5DRV9TSVpFX0JJVFMob2JqLT5zaXplKTsKKwlmZW5jZV9zaXplX2JpdHMgPSBJODMwX0ZFTkNFX1NJWkVfQklUUyhvYmotPnNpemUpOworCVdBUk5fT04oZmVuY2Vfc2l6ZV9iaXRzICYgfjB4MDAwMDBmMDApOworCXZhbCB8PSBmZW5jZV9zaXplX2JpdHM7CiAJdmFsIHw9IHBpdGNoX3ZhbCA8PCBJODMwX0ZFTkNFX1BJVENIX1NISUZUOwogCXZhbCB8PSBJODMwX0ZFTkNFX1JFR19WQUxJRDsKIApAQCAtMjE5NCw3ICsyMjAzLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoYWxpZ25tZW50ID09IDApCiAJCWFsaWdubWVudCA9IGk5MTVfZ2VtX2dldF9ndHRfYWxpZ25tZW50KG9iaik7Ci0JaWYgKGFsaWdubWVudCAmIChQQUdFX1NJWkUgLSAxKSkgeworCWlmIChhbGlnbm1lbnQgJiAoaTkxNV9nZW1fZ2V0X2d0dF9hbGlnbm1lbnQob2JqKSAtIDEpKSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgYWxpZ25tZW50IHJlcXVlc3RlZCAldVxuIiwgYWxpZ25tZW50KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjIxMSwxNSArMjIyMCwyMCBAQAogCQl9CiAJfQogCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJYm9vbCBsaXN0c19lbXB0eTsKKwogCQkvKiBJZiB0aGUgZ3R0IGlzIGVtcHR5IGFuZCB3ZSdyZSBzdGlsbCBoYXZpbmcgdHJvdWJsZQogCQkgKiBmaXR0aW5nIG91ciBvYmplY3QgaW4sIHdlJ3JlIG91dCBvZiBtZW1vcnkuCiAJCSAqLwogI2lmIFdBVENIX0xSVQogCQlEUk1fSU5GTygiJXM6IEdUVCBmdWxsLCBldmljdGluZyBzb21ldGhpbmdcbiIsIF9fZnVuY19fKTsKICNlbmRpZgotCQlpZiAobGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpICYmCi0JCSAgICBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkgJiYKLQkJICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpIHsKKwkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisJCWxpc3RzX2VtcHR5ID0gKGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSAmJgorCQkJICAgICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgorCQkJICAgICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOworCQlpZiAobGlzdHNfZW1wdHkpIHsKIAkJCURSTV9FUlJPUigiR1RUIGZ1bGwsIGJ1dCBMUlUgbGlzdCBlbXB0eVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMzY3NSw2ICszNjg5LDcgQEAKIAogCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwogCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJaWYgKCFkZXZfcHJpdi0+bW0ud2VkZ2VkKSB7CiAJCS8qIEFjdGl2ZSBhbmQgZmx1c2hpbmcgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZQogCQkgKiB3YWl0ZWQgZm9yIGEgc2VxdWVuY2UgaGlnaGVyIHRoYW4gYW55IHBlbmRpbmcgZXhlY2J1ZmZlcgpAQCAtMzcwMSw2ICszNzE2LDcgQEAKIAkJb2JqX3ByaXYtPm9iai0+d3JpdGVfZG9tYWluICY9IH5JOTE1X0dFTV9HUFVfRE9NQUlOUzsKIAkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqX3ByaXYtPm9iaik7CiAJfQorCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSkgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CkBAIC0zOTQ5LDcgKzM5NjUsMTAgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKKwlzcGluX2xvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOwogCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOwpAQCAtMzk5Myw2ICs0MDEyLDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKaW5kZXggMTMxYzA4OC4uOGQwYjk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCkBAIC0xMDUsMTIgKzEwNSwxNCBAQAogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdjsKIAogCURSTV9JTkZPKCJhY3RpdmUgbGlzdCAlcyB7XG4iLCB3aGVyZSk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwKIAkJCSAgICBsaXN0KQogCXsKIAkJRFJNX0lORk8oIiAgICAlcDogJTA4eFxuIiwgb2JqX3ByaXYsCiAJCQkgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKIAl9CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKIAlEUk1fSU5GTygifVxuIik7CiAJRFJNX0lORk8oImZsdXNoaW5nIGxpc3QgJXMge1xuIiwgd2hlcmUpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYwppbmRleCA0NTVlYzk3Li5hMWFjMGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWdmcy5jCkBAIC02OSwxMCArNjksMTMgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3BpbmxvY2tfdCAqbG9jayA9IE5VTEw7CiAKIAlzd2l0Y2ggKGxpc3QpIHsKIAljYXNlIEFDVElWRV9MSVNUOgogCQlzZXFfcHJpbnRmKG0sICJBY3RpdmU6XG4iKTsKKwkJbG9jayA9ICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jazsKKwkJc3Bpbl9sb2NrKGxvY2spOwogCQloZWFkID0gJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdDsKIAkJYnJlYWs7CiAJY2FzZSBJTkFDVElWRV9MSVNUOgpAQCAtMTA0LDYgKzEwNyw5IEBACiAJCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZFxuIiwgb2JqX3ByaXYtPmZlbmNlX3JlZyk7CiAJCXNlcV9wcmludGYobSwgIlxuIik7CiAJfQorCisJaWYgKGxvY2spCisJICAgIHNwaW5fdW5sb2NrKGxvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IDRjY2UxYWUuLjZiZTNmOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC0yMTYsNiArMjE2LDIyIEBACiAJZWxzZQogCQl0aWxlX3dpZHRoID0gNTEyOwogCisJLyogY2hlY2sgbWF4aW11bSBzdHJpZGUgJiBvYmplY3Qgc2l6ZSAqLworCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCS8qIGk5NjUgc3RvcmVzIHRoZSBlbmQgYWRkcmVzcyBvZiB0aGUgZ3R0IG1hcHBpbmcgaW4gdGhlIGZlbmNlCisJCSAqIHJlZywgc28gZG9udCBib3RoZXIgdG8gY2hlY2sgdGhlIHNpemUgKi8KKwkJaWYgKHN0cmlkZSAvIDEyOCA+IEk5NjVfRkVOQ0VfTUFYX1BJVENIX1ZBTCkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKElTX0k5WFgoZGV2KSkgeworCQlpZiAoc3RyaWRlIC8gdGlsZV93aWR0aCA+IEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTCB8fAorCQkgICAgc2l6ZSA+IChJODMwX0ZFTkNFX01BWF9TSVpFX1ZBTCA8PCAyMCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJaWYgKHN0cmlkZSAvIDEyOCA+IEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTCB8fAorCQkgICAgc2l6ZSA+IChJODMwX0ZFTkNFX01BWF9TSVpFX1ZBTCA8PCAxOSkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCiAJLyogOTY1KyBqdXN0IG5lZWRzIG11bHRpcGxlcyBvZiB0aWxlIHdpZHRoICovCiAJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJaWYgKHN0cmlkZSAmICh0aWxlX3dpZHRoIC0gMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA4N2I2YjYwLi5lZTdjZTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTQ4LDEwICs0OCw2IEBACiAvKiogSW50ZXJydXB0cyB0aGF0IHdlIG1hc2sgYW5kIHVubWFzayBhdCBydW50aW1lLiAqLwogI2RlZmluZSBJOTE1X0lOVEVSUlVQVF9FTkFCTEVfVkFSIChJOTE1X1VTRVJfSU5URVJSVVBUKQogCi0vKiogVGhlc2UgYXJlIGFsbCBvZiB0aGUgaW50ZXJydXB0cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KLSNkZWZpbmUgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0sgKEk5MTVfSU5URVJSVVBUX0VOQUJMRV9GSVggfCBcCi0JCQkJICAgIEk5MTVfSU5URVJSVVBUX0VOQUJMRV9WQVIpCi0KICNkZWZpbmUgSTkxNV9QSVBFX1ZCTEFOS19TVEFUVVMJKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMgfFwKIAkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUykKIApAQCAtMTg3LDYgKzE4MywxOSBAQAogCXJldHVybiBJOTE1X1JFQUQocmVnKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBob3RwbHVnIGV2ZW50cyBvdXRzaWRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBwcm9wZXIuCisgKi8KK3N0YXRpYyB2b2lkIGk5MTVfaG90cGx1Z193b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBjb250YWluZXJfb2Yod29yaywgZHJtX2k5MTVfcHJpdmF0ZV90LAorCQkJCQkJICAgIGhvdHBsdWdfd29yayk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisKKwkvKiBKdXN0IGZpcmUgb2ZmIGEgdWV2ZW50IGFuZCBsZXQgdXNlcnNwYWNlIHRlbGwgdXMgd2hhdCB0byBkbyAqLworCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldik7Cit9CisKIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKQEAgLTI0NCw2ICsyNTMsMjAgQEAKIAogCQlyZXQgPSBJUlFfSEFORExFRDsKIAorCQkvKiBDb25zdW1lIHBvcnQuICBUaGVuIGNsZWFyIElJUiBvciB3ZSdsbCBtaXNzIGV2ZW50cyAqLworCQlpZiAoKEk5MTVfSEFTX0hPVFBMVUcoZGV2KSkgJiYKKwkJICAgIChpaXIgJiBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQpKSB7CisJCQl1MzIgaG90cGx1Z19zdGF0dXMgPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpOworCisJCQlEUk1fREVCVUcoImhvdHBsdWcgZXZlbnQgcmVjZWl2ZWQsIHN0YXQgMHglMDh4XG4iLAorCQkJCSAgaG90cGx1Z19zdGF0dXMpOworCQkJaWYgKGhvdHBsdWdfc3RhdHVzICYgZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2spCisJCQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmhvdHBsdWdfd29yayk7CisKKwkJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX1NUQVQsIGhvdHBsdWdfc3RhdHVzKTsKKwkJCUk5MTVfUkVBRChQT1JUX0hPVFBMVUdfU1RBVCk7CisJCX0KKwogCQlJOTE1X1dSSVRFKElJUiwgaWlyKTsKIAkJbmV3X2lpciA9IEk5MTVfUkVBRChJSVIpOyAvKiBGbHVzaCBwb3N0ZWQgd3JpdGVzICovCiAKQEAgLTUyOCwxNyArNTUxLDI0IEBACiAKIAlhdG9taWNfc2V0KCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkLCAwKTsKIAorCWlmIChJOTE1X0hBU19IT1RQTFVHKGRldikpIHsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIDApOworCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19TVEFULCBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpKTsKKwl9CisKIAlJOTE1X1dSSVRFKEhXU1RBTSwgMHhlZmZlKTsKIAlJOTE1X1dSSVRFKFBJUEVBU1RBVCwgMCk7CiAJSTkxNV9XUklURShQSVBFQlNUQVQsIDApOwogCUk5MTVfV1JJVEUoSU1SLCAweGZmZmZmZmZmKTsKIAlJOTE1X1dSSVRFKElFUiwgMHgwKTsKIAkodm9pZCkgSTkxNV9SRUFEKElFUik7CisJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aG90cGx1Z193b3JrLCBpOTE1X2hvdHBsdWdfd29ya19mdW5jKTsKIH0KIAogaW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGVuYWJsZV9tYXNrID0gSTkxNV9JTlRFUlJVUFRfRU5BQkxFX0ZJWCB8IEk5MTVfSU5URVJSVVBUX0VOQUJMRV9WQVI7CiAKIAlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQjsKIApAQCAtNTUwLDEzICs1ODAsMzUgQEAKIAlkZXZfcHJpdi0+cGlwZXN0YXRbMF0gPSAwOwogCWRldl9wcml2LT5waXBlc3RhdFsxXSA9IDA7CiAKKwlpZiAoSTkxNV9IQVNfSE9UUExVRyhkZXYpKSB7CisJCXUzMiBob3RwbHVnX2VuID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19FTik7CisKKwkJLyogTGVhdmUgb3RoZXIgYml0cyBhbG9uZSAqLworCQlob3RwbHVnX2VuIHw9IEhPVFBMVUdfRU5fTUFTSzsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIGhvdHBsdWdfZW4pOworCisJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrID0gQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUyB8CisJCQlUVl9IT1RQTFVHX0lOVF9TVEFUVVMgfCBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVMgfAorCQkJU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTOworCQlpZiAoSVNfRzRYKGRldikpIHsKKwkJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9CisJCQkJSERNSUJfSE9UUExVR19JTlRfU1RBVFVTIHwKKwkJCQlIRE1JQ19IT1RQTFVHX0lOVF9TVEFUVVMgfAorCQkJCUhETUlEX0hPVFBMVUdfSU5UX1NUQVRVUzsKKwkJfQorCQkvKiBFbmFibGUgaW4gSUVSLi4uICovCisJCWVuYWJsZV9tYXNrIHw9IEk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVDsKKwkJLyogYW5kIHVubWFzayBpbiBJTVIgKi8KKwkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQpOworCX0KKwogCS8qIERpc2FibGUgcGlwZSBpbnRlcnJ1cHQgZW5hYmxlcywgY2xlYXIgcGVuZGluZyBwaXBlIHN0YXR1cyAqLwogCUk5MTVfV1JJVEUoUElQRUFTVEFULCBJOTE1X1JFQUQoUElQRUFTVEFUKSAmIDB4ODAwMGZmZmYpOwogCUk5MTVfV1JJVEUoUElQRUJTVEFULCBJOTE1X1JFQUQoUElQRUJTVEFUKSAmIDB4ODAwMGZmZmYpOwogCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyAqLwogCUk5MTVfV1JJVEUoSUlSLCBJOTE1X1JFQUQoSUlSKSk7CiAKLQlJOTE1X1dSSVRFKElFUiwgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0spOworCUk5MTVfV1JJVEUoSUVSLCBlbmFibGVfbWFzayk7CiAJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOwogCSh2b2lkKSBJOTE1X1JFQUQoSUVSKTsKIApAQCAtNTc1LDYgKzYyNywxMSBAQAogCiAJZGV2X3ByaXYtPnZibGFua19waXBlID0gMDsKIAorCWlmIChJOTE1X0hBU19IT1RQTFVHKGRldikpIHsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIDApOworCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19TVEFULCBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpKTsKKwl9CisKIAlJOTE1X1dSSVRFKEhXU1RBTSwgMHhmZmZmZmZmZik7CiAJSTkxNV9XUklURShQSVBFQVNUQVQsIDApOwogCUk5MTVfV1JJVEUoUElQRUJTVEFULCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDM3N2NjNTguLmU4MDViNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMTkwLDYgKzE5MCw4IEBACiAjZGVmaW5lICAgSTgzMF9GRU5DRV9TSVpFX0JJVFMoc2l6ZSkJKChmZnMoKHNpemUpID4+IDE5KSAtIDEpIDw8IDgpCiAjZGVmaW5lICAgSTgzMF9GRU5DRV9QSVRDSF9TSElGVAk0CiAjZGVmaW5lICAgSTgzMF9GRU5DRV9SRUdfVkFMSUQJCSgxPDwwKQorI2RlZmluZSAgIEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTAkweDEwCisjZGVmaW5lICAgSTgzMF9GRU5DRV9NQVhfU0laRV9WQUwJKDE8PDgpCiAKICNkZWZpbmUgICBJOTE1X0ZFTkNFX1NUQVJUX01BU0sJCTB4MGZmMDAwMDAKICNkZWZpbmUgICBJOTE1X0ZFTkNFX1NJWkVfQklUUyhzaXplKQkoKGZmcygoc2l6ZSkgPj4gMjApIC0gMSkgPDwgOCkKQEAgLTE5OCw2ICsyMDAsNyBAQAogI2RlZmluZSAgIEk5NjVfRkVOQ0VfUElUQ0hfU0hJRlQJMgogI2RlZmluZSAgIEk5NjVfRkVOQ0VfVElMSU5HX1lfU0hJRlQJMQogI2RlZmluZSAgIEk5NjVfRkVOQ0VfUkVHX1ZBTElECQkoMTw8MCkKKyNkZWZpbmUgICBJOTY1X0ZFTkNFX01BWF9QSVRDSF9WQUwJMHgwNDAwCiAKIC8qCiAgKiBJbnN0cnVjdGlvbiBhbmQgaW50ZXJydXB0IGNvbnRyb2wgcmVncwpAQCAtNjQ4LDYgKzY1MSwxNCBAQAogI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfVk9MVEFHRV8zMjVNVgkoMCA8PCAyKQogI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfVk9MVEFHRV80NzVNVgkoMSA8PCAyKQogI2RlZmluZSBDUlRfSE9UUExVR19NQVNLCQkJKDB4M2ZjKSAvKiBCaXRzIDktMiAqLworI2RlZmluZSBDUlRfRk9SQ0VfSE9UUExVR19NQVNLCQkJMHhmZmZmZmUxZgorI2RlZmluZSBIT1RQTFVHX0VOX01BU0sgKEhETUlCX0hPVFBMVUdfSU5UX0VOIHwgXAorCQkJIEhETUlDX0hPVFBMVUdfSU5UX0VOIHwJICBcCisJCQkgSERNSURfSE9UUExVR19JTlRfRU4gfAkgIFwKKwkJCSBTRFZPQl9IT1RQTFVHX0lOVF9FTiB8CSAgXAorCQkJIFNEVk9DX0hPVFBMVUdfSU5UX0VOIHwJICBcCisJCQkgVFZfSE9UUExVR19JTlRfRU4gfAkgIFwKKwkJCSBDUlRfSE9UUExVR19JTlRfRU4pCiAKIAogI2RlZmluZSBQT1JUX0hPVFBMVUdfU1RBVAkweDYxMTE0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDJiNmQ0NDMuLjliZGQ5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC00MSw3ICs0MSw3IEBACiAKIAl0ZW1wID0gSTkxNV9SRUFEKEFEUEEpOwogCXRlbXAgJj0gfihBRFBBX0hTWU5DX0NOVExfRElTQUJMRSB8IEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFKTsKLQl0ZW1wICY9IH5BRFBBX0RBQ19FTkFCTEU7CisJdGVtcCB8PSBBRFBBX0RBQ19FTkFCTEU7CiAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKQEAgLTE1OCw3ICsxNTgsNyBAQAogCWVsc2UKIAkJdHJpZXMgPSAxOwogCWhvdHBsdWdfZW4gPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKLQlob3RwbHVnX2VuICY9IH4oQ1JUX0hPVFBMVUdfTUFTSyk7CisJaG90cGx1Z19lbiAmPSBDUlRfRk9SQ0VfSE9UUExVR19NQVNLOwogCWhvdHBsdWdfZW4gfD0gQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUOwogCiAJaWYgKElTX0dNNDUoZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBkOWM1MGZmLi42NDc3M2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC02MzYsNyArNjM2LDcgQEAKIGludGVsX3dhaXRfZm9yX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCS8qIFdhaXQgZm9yIDIwbXMsIGkuZS4gb25lIGN5Y2xlIGF0IDUwaHouICovCi0JdWRlbGF5KDIwMDAwKTsKKwltZGVsYXkoMjApOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMTA2LDYgKzExMDYsMjYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogU0RWTyBUViBoYXMgZml4ZWQgUExMIHZhbHVlcyBkZXBlbmQgb24gaXRzIGNsb2NrIHJhbmdlLAorCSAgIHRoaXMgbWlycm9ycyB2YmlvcyBzZXR0aW5nLiAqLworCWlmIChpc19zZHZvICYmIGlzX3R2KSB7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5jbG9jayA+PSAxMDAwMDAKKwkJCQkmJiBhZGp1c3RlZF9tb2RlLT5jbG9jayA8IDE0MDUwMCkgeworCQkJY2xvY2sucDEgPSAyOworCQkJY2xvY2sucDIgPSAxMDsKKwkJCWNsb2NrLm4gPSAzOworCQkJY2xvY2subTEgPSAxNjsKKwkJCWNsb2NrLm0yID0gODsKKwkJfSBlbHNlIGlmIChhZGp1c3RlZF9tb2RlLT5jbG9jayA+PSAxNDA1MDAKKwkJCQkmJiBhZGp1c3RlZF9tb2RlLT5jbG9jayA8PSAyMDAwMDApIHsKKwkJCWNsb2NrLnAxID0gMTsKKwkJCWNsb2NrLnAyID0gMTA7CisJCQljbG9jay5uID0gNjsKKwkJCWNsb2NrLm0xID0gMTI7CisJCQljbG9jay5tMiA9IDg7CisJCX0KKwl9CisKIAlpZiAoSVNfSUdEKGRldikpCiAJCWZwID0gKDEgPDwgY2xvY2subikgPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMKaW5kZXggZTQyMDE5ZS4uMDdkN2VjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCkBAIC03Niw2ICs3Niw3IEBACiAJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmaW50ZWxfb3V0cHV0LT5iYXNlLAogCQkJCQkJCWVkaWQpOwogCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJmludGVsX291dHB1dC0+YmFzZSwgZWRpZCk7CisJCWludGVsX291dHB1dC0+YmFzZS5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSBOVUxMOwogCQlrZnJlZShlZGlkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCBmYmU2ZjM5Li43YjMxZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0yNzMsMjAgKzI3MywyMCBAQAogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAJaW50IGk7CiAKLQlEUk1fREVCVUcoIiVzOiBXOiAlMDJYICIsIFNEVk9fTkFNRShzZHZvX3ByaXYpLCBjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogVzogJTAyWCAiLCBTRFZPX05BTUUoc2R2b19wcml2KSwgY21kKTsKIAlmb3IgKGkgPSAwOyBpIDwgYXJnc19sZW47IGkrKykKLQkJcHJpbnRrKCIlMDJYICIsICgodTggKilhcmdzKVtpXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlMDJYICIsICgodTggKilhcmdzKVtpXSk7CiAJZm9yICg7IGkgPCA4OyBpKyspCi0JCXByaW50aygiICAgIik7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNkdm9fY21kX25hbWVzKSAvIHNpemVvZihzZHZvX2NtZF9uYW1lc1swXSk7IGkrKykgewogCQlpZiAoY21kID09IHNkdm9fY21kX25hbWVzW2ldLmNtZCkgewotCQkJcHJpbnRrKCIoJXMpIiwgc2R2b19jbWRfbmFtZXNbaV0ubmFtZSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiKCVzKSIsIHNkdm9fY21kX25hbWVzW2ldLm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKGkgPT0gc2l6ZW9mKHNkdm9fY21kX25hbWVzKS8gc2l6ZW9mKHNkdm9fY21kX25hbWVzWzBdKSkKLQkJcHJpbnRrKCIoJTAyWCkiLGNtZCk7Ci0JcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiKCUwMlgpIiwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKIH0KICNlbHNlCiAjZGVmaW5lIGludGVsX3Nkdm9fZGVidWdfd3JpdGUobywgYywgYSwgbCkKQEAgLTMyMywxNyArMzIzLDE4IEBACiAJCQkJICAgICAgdTggc3RhdHVzKQogewogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJaW50IGk7CiAKLQlEUk1fREVCVUcoIiVzOiBSOiAiLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSOiAiLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CiAJZm9yIChpID0gMDsgaSA8IHJlc3BvbnNlX2xlbjsgaSsrKQotCQlwcmludGsoIiUwMlggIiwgKCh1OCAqKXJlc3BvbnNlKVtpXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlMDJYICIsICgodTggKilyZXNwb25zZSlbaV0pOwogCWZvciAoOyBpIDwgODsgaSsrKQotCQlwcmludGsoIiAgICIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIik7CiAJaWYgKHN0YXR1cyA8PSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUCkKLQkJcHJpbnRrKCIoJXMpIiwgY21kX3N0YXR1c19uYW1lc1tzdGF0dXNdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiglcykiLCBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10pOwogCWVsc2UKLQkJcHJpbnRrKCIoPz8/ICVkKSIsIHN0YXR1cyk7Ci0JcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiKD8/PyAlZCkiLCBzdGF0dXMpOworCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwogfQogI2Vsc2UKICNkZWZpbmUgaW50ZWxfc2R2b19kZWJ1Z19yZXNwb25zZShvLCByLCBsLCBzKQpAQCAtNTg4LDkgKzU4OSwxMiBAQAogCXN0cnVjdCBpbnRlbF9zZHZvX3ByZWZlcnJlZF9pbnB1dF90aW1pbmdfYXJncyBhcmdzOwogCXVpbnQ4X3Qgc3RhdHVzOwogCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCWFyZ3MuY2xvY2sgPSBjbG9jazsKIAlhcmdzLndpZHRoID0gd2lkdGg7CiAJYXJncy5oZWlnaHQgPSBoZWlnaHQ7CisJYXJncy5pbnRlcmxhY2UgPSAwOworCWFyZ3Muc2NhbGVkID0gMDsKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0NSRUFURV9QUkVGRVJSRURfSU5QVVRfVElNSU5HLAogCQkJICAgICAmYXJncywgc2l6ZW9mKGFyZ3MpKTsKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKQEAgLTY4Myw3ICs2ODcsNyBAQAogCWR0ZC0+cGFydDEudl9oaWdoID0gKCgoaGVpZ2h0ID4+IDgpICYgMHhmKSA8PCA0KSB8CiAJCSgodl9ibGFua19sZW4gPj4gOCkgJiAweGYpOwogCi0JZHRkLT5wYXJ0Mi5oX3N5bmNfb2ZmID0gaF9zeW5jX29mZnNldDsKKwlkdGQtPnBhcnQyLmhfc3luY19vZmYgPSBoX3N5bmNfb2Zmc2V0ICYgMHhmZjsKIAlkdGQtPnBhcnQyLmhfc3luY193aWR0aCA9IGhfc3luY19sZW4gJiAweGZmOwogCWR0ZC0+cGFydDIudl9zeW5jX29mZl93aWR0aCA9ICh2X3N5bmNfb2Zmc2V0ICYgMHhmKSA8PCA0IHwKIAkJKHZfc3luY19sZW4gJiAweGYpOwpAQCAtNzA1LDI3ICs3MDksMTAgQEAKIHN0YXRpYyB2b2lkIGludGVsX3Nkdm9fZ2V0X21vZGVfZnJvbV9kdGQoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiBtb2RlLAogCQkJCQkgc3RydWN0IGludGVsX3Nkdm9fZHRkICpkdGQpCiB7Ci0JdWludDE2X3Qgd2lkdGgsIGhlaWdodDsKLQl1aW50MTZfdCBoX2JsYW5rX2xlbiwgaF9zeW5jX2xlbiwgdl9ibGFua19sZW4sIHZfc3luY19sZW47Ci0JdWludDE2X3QgaF9zeW5jX29mZnNldCwgdl9zeW5jX29mZnNldDsKLQotCXdpZHRoID0gbW9kZS0+Y3J0Y19oZGlzcGxheTsKLQloZWlnaHQgPSBtb2RlLT5jcnRjX3ZkaXNwbGF5OwotCi0JLyogZG8gc29tZSBtb2RlIHRyYW5zbGF0aW9ucyAqLwotCWhfYmxhbmtfbGVuID0gbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQ7Ci0JaF9zeW5jX2xlbiA9IG1vZGUtPmNydGNfaHN5bmNfZW5kIC0gbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQotCXZfYmxhbmtfbGVuID0gbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQ7Ci0Jdl9zeW5jX2xlbiA9IG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydDsKLQotCWhfc3luY19vZmZzZXQgPSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQ7Ci0Jdl9zeW5jX29mZnNldCA9IG1vZGUtPmNydGNfdnN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX3ZibGFua19zdGFydDsKLQogCW1vZGUtPmhkaXNwbGF5ID0gZHRkLT5wYXJ0MS5oX2FjdGl2ZTsKIAltb2RlLT5oZGlzcGxheSArPSAoKGR0ZC0+cGFydDEuaF9oaWdoID4+IDQpICYgMHgwZikgPDwgODsKIAltb2RlLT5oc3luY19zdGFydCA9IG1vZGUtPmhkaXNwbGF5ICsgZHRkLT5wYXJ0Mi5oX3N5bmNfb2ZmOwotCW1vZGUtPmhzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweGEwKSA8PCAyOworCW1vZGUtPmhzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweGMwKSA8PCAyOwogCW1vZGUtPmhzeW5jX2VuZCA9IG1vZGUtPmhzeW5jX3N0YXJ0ICsgZHRkLT5wYXJ0Mi5oX3N5bmNfd2lkdGg7CiAJbW9kZS0+aHN5bmNfZW5kICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDMwKSA8PCA0OwogCW1vZGUtPmh0b3RhbCA9IG1vZGUtPmhkaXNwbGF5ICsgZHRkLT5wYXJ0MS5oX2JsYW5rOwpAQCAtNzM1LDcgKzcyMiw3IEBACiAJbW9kZS0+dmRpc3BsYXkgKz0gKChkdGQtPnBhcnQxLnZfaGlnaCA+PiA0KSAmIDB4MGYpIDw8IDg7CiAJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheTsKIAltb2RlLT52c3luY19zdGFydCArPSAoZHRkLT5wYXJ0Mi52X3N5bmNfb2ZmX3dpZHRoID4+IDQpICYgMHhmOwotCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDBhKSA8PCAyOworCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDBjKSA8PCAyOwogCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IGR0ZC0+cGFydDIudl9zeW5jX29mZl9oaWdoICYgMHhjMDsKIAltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCArCiAJCShkdGQtPnBhcnQyLnZfc3luY19vZmZfd2lkdGggJiAweGYpOwpAQCAtNzQ1LDcgKzczMiw3IEBACiAKIAltb2RlLT5jbG9jayA9IGR0ZC0+cGFydDEuY2xvY2sgKiAxMDsKIAotCW1vZGUtPmZsYWdzICY9IChEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsKKwltb2RlLT5mbGFncyAmPSB+KERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpOwogCWlmIChkdGQtPnBhcnQyLmR0ZF9mbGFncyAmIDB4MikKIAkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7CiAJaWYgKGR0ZC0+cGFydDIuZHRkX2ZsYWdzICYgMHg0KQpAQCAtOTI0LDYgKzkxMSwyNyBAQAogCQkJCVNEVk9fSEJVRl9UWF9WU1lOQyk7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX3Nkdm9fc2V0X3R2X2Zvcm1hdChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICpvdXRwdXQpCit7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gb3V0cHV0LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfc2R2b190dl9mb3JtYXQgKmZvcm1hdCwgdW5zZXQ7CisJdTggc3RhdHVzOworCisJZm9ybWF0ID0gJnNkdm9fcHJpdi0+dHZfZm9ybWF0OworCW1lbXNldCgmdW5zZXQsIDAsIHNpemVvZih1bnNldCkpOworCWlmIChtZW1jbXAoZm9ybWF0LCAmdW5zZXQsIHNpemVvZigqZm9ybWF0KSkpIHsKKwkJRFJNX0RFQlVHKCIlczogQ2hvb3NpbmcgZGVmYXVsdCBUViBmb3JtYXQgb2YgTlRTQy1NXG4iLAorCQkJCVNEVk9fTkFNRShzZHZvX3ByaXYpKTsKKwkJZm9ybWF0LT5udHNjX20gPSAxOworCQlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX1NFVF9UVl9GT1JNQVQsIGZvcm1hdCwKKwkJCQlzaXplb2YoKmZvcm1hdCkpOworCQlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKKwkJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJCURSTV9ERUJVRygiJXM6IEZhaWxlZCB0byBzZXQgVFYgZm9ybWF0XG4iLAorCQkJCQlTRFZPX05BTUUoc2R2b19wcml2KSk7CisJfQorfQorCiBzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKQEAgLTk2OCw2ICs5NzYsMTIgQEAKIAkJCQkJCQkgICAgICZpbnB1dF9kdGQpOwogCQkJaW50ZWxfc2R2b19nZXRfbW9kZV9mcm9tX2R0ZChhZGp1c3RlZF9tb2RlLCAmaW5wdXRfZHRkKTsKIAorCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOworCisJCQltb2RlLT5jbG9jayA9IGFkanVzdGVkX21vZGUtPmNsb2NrOworCisJCQlhZGp1c3RlZF9tb2RlLT5jbG9jayAqPQorCQkJCWludGVsX3Nkdm9fZ2V0X3BpeGVsX211bHRpcGxpZXIobW9kZSk7CiAJCX0gZWxzZSB7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KQEAgLTEwMTIsNyArMTAyNiwxMiBAQAogCQlzZHZveCB8PSBTRFZPX0FVRElPX0VOQUJMRTsKIAl9CiAKLQlpbnRlbF9zZHZvX2dldF9kdGRfZnJvbV9tb2RlKCZpbnB1dF9kdGQsIG1vZGUpOworCS8qIFdlIGhhdmUgdHJpZWQgdG8gZ2V0IGlucHV0IHRpbWluZyBpbiBtb2RlX2ZpeHVwLCBhbmQgZmlsbGVkIGludG8KKwkgICBhZGp1c3RlZF9tb2RlICovCisJaWYgKHNkdm9fcHJpdi0+aXNfdHYpCisJCWludGVsX3Nkdm9fZ2V0X2R0ZF9mcm9tX21vZGUoJmlucHV0X2R0ZCwgYWRqdXN0ZWRfbW9kZSk7CisJZWxzZQorCQlpbnRlbF9zZHZvX2dldF9kdGRfZnJvbV9tb2RlKCZpbnB1dF9kdGQsIG1vZGUpOwogCiAJLyogSWYgaXQncyBhIFRWLCB3ZSBhbHJlYWR5IHNldCB0aGUgb3V0cHV0IHRpbWluZyBpbiBtb2RlX2ZpeHVwLgogCSAqIE90aGVyd2lzZSwgdGhlIG91dHB1dCB0aW1pbmcgaXMgZXF1YWwgdG8gdGhlIGlucHV0IHRpbWluZy4KQEAgLTEwMjcsNiArMTA0Niw5IEBACiAJLyogU2V0IHRoZSBpbnB1dCB0aW1pbmcgdG8gdGhlIHNjcmVlbi4gQXNzdW1lIGFsd2F5cyBpbnB1dCAwLiAqLwogCWludGVsX3Nkdm9fc2V0X3RhcmdldF9pbnB1dChvdXRwdXQsIHRydWUsIGZhbHNlKTsKIAorCWlmIChzZHZvX3ByaXYtPmlzX3R2KQorCQlpbnRlbF9zZHZvX3NldF90dl9mb3JtYXQob3V0cHV0KTsKKwogCS8qIFdlIHdvdWxkIGxpa2UgdG8gdXNlIGludGVsX3Nkdm9fY3JlYXRlX3ByZWZlcnJlZF9pbnB1dF90aW1pbmcoKSB0bwogCSAqIHByb3ZpZGUgdGhlIGRldmljZSB3aXRoIGEgdGltaW5nIGl0IGNhbiBzdXBwb3J0LCBpZiBpdCBzdXBwb3J0cyB0aGF0CiAJICogZmVhdHVyZS4gIEhvd2V2ZXIsIHByZXN1bWFibHkgd2Ugd291bGQgbmVlZCB0byBhZGp1c3QgdGhlIENSVEMgdG8KQEAgLTEzOTUsNyArMTQxNyw3IEBACiBpbnRlbF9zZHZvX2NoZWNrX3R2X2Zvcm1hdChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICpvdXRwdXQpCiB7CiAJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqZGV2X3ByaXYgPSBvdXRwdXQtPmRldl9wcml2OwotCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCBmb3JtYXQsIHVuc2V0OworCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCBmb3JtYXQ7CiAJdWludDhfdCBzdGF0dXM7CiAKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0dFVF9UVl9GT1JNQVQsIE5VTEwsIDApOwpAQCAtMTQwMywxNSArMTQyNSw3IEBACiAJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKIAkJcmV0dXJuOwogCi0JbWVtc2V0KCZ1bnNldCwgMCwgc2l6ZW9mKHVuc2V0KSk7Ci0JaWYgKG1lbWNtcCgmZm9ybWF0LCAmdW5zZXQsIHNpemVvZihmb3JtYXQpKSkgewotCQlEUk1fREVCVUcoIiVzOiBDaG9vc2luZyBkZWZhdWx0IFRWIGZvcm1hdCBvZiBOVFNDLU1cbiIsCi0JCQkgIFNEVk9fTkFNRShkZXZfcHJpdikpOwotCi0JCWZvcm1hdC5udHNjX20gPSB0cnVlOwotCQlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX1NFVF9UVl9GT1JNQVQsIE5VTEwsIDApOwotCQlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKLQl9CisJbWVtY3B5KCZkZXZfcHJpdi0+dHZfZm9ybWF0LCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSk7CiB9CiAKIC8qCkBAIC0xNDIwLDY4ICsxNDM0LDcwIEBACiAgKiBYWFg6IGFsbCA2MEh6IHJlZnJlc2g/CiAgKi8KIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHNkdm9fdHZfbW9kZXNbXSA9IHsKLQl7IERSTV9NT0RFKCIzMjB4MjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDU4MTU2ODAsIDMyMSwgMzg0LCA0MTYsCi0JCSAgIDIwMCwgMCwgMjMyLCAyMDEsIDIzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIzMjB4MjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDU4MTUsIDMyMCwgMzIxLCAzODQsCisJCSAgIDQxNiwgMCwgMjAwLCAyMDEsIDIzMiwgMjMzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjMyMHgyNDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjgxNDA4MCwgMzIxLCAzODQsIDQxNiwKLQkJICAgMjQwLCAwLCAyNzIsIDI0MSwgMjczLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjMyMHgyNDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjgxNCwgMzIwLCAzMjEsIDM4NCwKKwkJICAgNDE2LCAwLCAyNDAsIDI0MSwgMjcyLCAyNzMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNDAweDMwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA5OTEwMDgwLCA0MDEsIDQ2NCwgNDk2LAotCQkgICAzMDAsIDAsIDMzMiwgMzAxLCAzMzMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNDAweDMwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA5OTEwLCA0MDAsIDQwMSwgNDY0LAorCQkgICA0OTYsIDAsIDMwMCwgMzAxLCAzMzIsIDMzMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI2NDB4MzUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE2OTEzMjgwLCA2NDEsIDcwNCwgNzM2LAotCQkgICAzNTAsIDAsIDM4MiwgMzUxLCAzODMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNjQweDM1MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNjkxMywgNjQwLCA2NDEsIDcwNCwKKwkJICAgNzM2LCAwLCAzNTAsIDM1MSwgMzgyLCAzODMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNjQweDQwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxOTEyMTI4MCwgNjQxLCA3MDQsIDczNiwKLQkJICAgNDAwLCAwLCA0MzIsIDQwMSwgNDMzLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjY0MHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTkxMjEsIDY0MCwgNjQxLCA3MDQsCisJCSAgIDczNiwgMCwgNDAwLCA0MDEsIDQzMiwgNDMzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjY0MHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTkxMjEyODAsIDY0MSwgNzA0LCA3MzYsCi0JCSAgIDQwMCwgMCwgNDMyLCA0MDEsIDQzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI2NDB4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIyNjU0LCA2NDAsIDY0MSwgNzA0LAorCQkgICA3MzYsIDAsIDQ4MCwgNDgxLCA1MTIsIDUxMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MDR4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI0NjI0MDAwLCA3MDUsIDc2OCwgODAwLAotCQkgICA0ODAsIDAsIDUxMiwgNDgxLCA1MTMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzA0eDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyNDYyNCwgNzA0LCA3MDUsIDc2OCwKKwkJICAgODAwLCAwLCA0ODAsIDQ4MSwgNTEyLCA1MTMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzA0eDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyOTIzMjAwMCwgNzA1LCA3NjgsIDgwMCwKLQkJICAgNTc2LCAwLCA2MDgsIDU3NywgNjA5LCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjcwNHg1NzYiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjkyMzIsIDcwNCwgNzA1LCA3NjgsCisJCSAgIDgwMCwgMCwgNTc2LCA1NzcsIDYwOCwgNjA5LCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjcyMHgzNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTg3NTE2ODAsIDcyMSwgNzg0LCA4MTYsCi0JCSAgIDM1MCwgMCwgMzgyLCAzNTEsIDM4MywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI3MjB4MzUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE4NzUxLCA3MjAsIDcyMSwgNzg0LAorCQkgICA4MTYsIDAsIDM1MCwgMzUxLCAzODIsIDM4MywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MjB4NDAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIxMTk5NjgwLCA3MjEsIDc4NCwgODE2LAotCQkgICA0MDAsIDAsIDQzMiwgNDAxLCA0MzMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzIweDQwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMTE5OSwgNzIwLCA3MjEsIDc4NCwKKwkJICAgODE2LCAwLCA0MDAsIDQwMSwgNDMyLCA0MzMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzIweDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyNTExNjQ4MCwgNzIxLCA3ODQsIDgxNiwKLQkJICAgNDgwLCAwLCA1MTIsIDQ4MSwgNTEzLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjcyMHg0ODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjUxMTYsIDcyMCwgNzIxLCA3ODQsCisJCSAgIDgxNiwgMCwgNDgwLCA0ODEsIDUxMiwgNTEzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjcyMHg1NDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjgwNTQwODAsIDcyMSwgNzg0LCA4MTYsCi0JCSAgIDU0MCwgMCwgNTcyLCA1NDEsIDU3MywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI3MjB4NTQwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI4MDU0LCA3MjAsIDcyMSwgNzg0LAorCQkgICA4MTYsIDAsIDU0MCwgNTQxLCA1NzIsIDU3MywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MjB4NTc2IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI5ODE2NjQwLCA3MjEsIDc4NCwgODE2LAotCQkgICA1NzYsIDAsIDYwOCwgNTc3LCA2MDksIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzIweDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyOTgxNiwgNzIwLCA3MjEsIDc4NCwKKwkJICAgODE2LCAwLCA1NzYsIDU3NywgNjA4LCA2MDksIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzY4eDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMTU3MDU2MCwgNzY5LCA4MzIsIDg2NCwKLQkJICAgNTc2LCAwLCA2MDgsIDU3NywgNjA5LCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjc2OHg1NzYiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzE1NzAsIDc2OCwgNzY5LCA4MzIsCisJCSAgIDg2NCwgMCwgNTc2LCA1NzcsIDYwOCwgNjA5LCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjgwMHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzQwMzAwODAsIDgwMSwgODY0LCA4OTYsCi0JCSAgIDYwMCwgMCwgNjMyLCA2MDEsIDYzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI4MDB4NjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDM0MDMwLCA4MDAsIDgwMSwgODY0LAorCQkgICA4OTYsIDAsIDYwMCwgNjAxLCA2MzIsIDYzMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI4MzJ4NjI0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDM2NTgxNzYwLCA4MzMsIDg5NiwgOTI4LAotCQkgICA2MjQsIDAsIDY1NiwgNjI1LCA2NTcsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiODMyeDYyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzNjU4MSwgODMyLCA4MzMsIDg5NiwKKwkJICAgOTI4LCAwLCA2MjQsIDYyNSwgNjU2LCA2NTcsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiOTIweDc2NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA0ODcwNzA0MCwgOTIxLCA5ODQsIDEwMTYsCi0JCSAgIDc2NiwgMCwgNzk4LCA3NjcsIDc5OSwgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI5MjB4NzY2IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDQ4NzA3LCA5MjAsIDkyMSwgOTg0LAorCQkgICAxMDE2LCAwLCA3NjYsIDc2NywgNzk4LCA3OTksIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNTM4MjcyMDAsIDEwMjUsIDEwODgsIDExMjAsCi0JCSAgIDc2OCwgMCwgODAwLCA3NjksIDgwMSwgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIxMDI0eDc2OCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1MzgyNywgMTAyNCwgMTAyNSwgMTA4OCwKKwkJICAgMTEyMCwgMCwgNzY4LCA3NjksIDgwMCwgODAxLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjEyODB4MTAyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA4NzI2NTkyMCwgMTI4MSwgMTM0NCwgMTM3NiwKLQkJICAgMTAyNCwgMCwgMTA1NiwgMTAyNSwgMTA1NywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIxMjgweDEwMjQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgODcyNjUsIDEyODAsIDEyODEsIDEzNDQsCisJCSAgIDEzNzYsIDAsIDEwMjQsIDEwMjUsIDEwNTYsIDEwNTcsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX2dldF90dl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBpbnRlbF9vdXRwdXQgKm91dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IG91dHB1dC0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3Nkdm9fc2R0dl9yZXNvbHV0aW9uX3JlcXVlc3QgdHZfcmVzOwogCXVpbnQzMl90IHJlcGx5ID0gMDsKIAl1aW50OF90IHN0YXR1czsKIAlpbnQgaSA9IDA7CkBAIC0xNDkxLDE1ICsxNTA3LDIyIEBACiAJLyogUmVhZCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW5wdXQgcmVzb2x1dGlvbnMgZm9yIHRoZSBzZWxlY3RlZCBUVgogCSAqIGZvcm1hdC4KIAkgKi8KKwltZW1zZXQoJnR2X3JlcywgMCwgc2l6ZW9mKHR2X3JlcykpOworCW1lbWNweSgmdHZfcmVzLCAmc2R2b19wcml2LT50dl9mb3JtYXQsIHNpemVvZih0dl9yZXMpKTsKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0dFVF9TRFRWX1JFU09MVVRJT05fU1VQUE9SVCwKLQkJCSAgICAgTlVMTCwgMCk7CisJCQkgICAgICZ0dl9yZXMsIHNpemVvZih0dl9yZXMpKTsKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCAmcmVwbHksIDMpOwogCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkdm9fdHZfbW9kZXMpOyBpKyspCi0JCWlmIChyZXBseSAmICgxIDw8IGkpKQotCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsICZzZHZvX3R2X21vZGVzW2ldKTsKKwkJaWYgKHJlcGx5ICYgKDEgPDwgaSkpIHsKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpubW9kZTsKKwkJCW5tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGNvbm5lY3Rvci0+ZGV2LAorCQkJCQkmc2R2b190dl9tb2Rlc1tpXSk7CisJCQlpZiAobm1vZGUpCisJCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5tb2RlKTsKKwkJfQogfQogCiBzdGF0aWMgaW50IGludGVsX3Nkdm9fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCmluZGV4IDExMTdiOWMuLjE5MzkzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCkBAIC0xMDAsNiArMTAwLDkgQEAKICAgICB1MTYgY2xvY2s7CiAgICAgdTE2IHdpZHRoOwogICAgIHUxNiBoZWlnaHQ7CisgICAgdTgJaW50ZXJsYWNlOjE7CisgICAgdTgJc2NhbGVkOjE7CisgICAgdTgJcGFkOjY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBJMkMgcmVnaXN0ZXJzIGZvciBTRFZPICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwppbmRleCBjZWNhOTQ3Li5kMmMzMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKQEAgLTE1NzAsMzMgKzE1NzAsNDkgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CiAJc3RydWN0IGludGVsX3R2X3ByaXYgKnR2X3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF9vdXRwdXQtPmVuYzsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBlbmNvZGVyLT5jcnRjOwogCWludCByZXQgPSAwOworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCiAJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoY29ubmVjdG9yLCBwcm9wZXJ0eSwgdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSkKKwlpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSAmJgorCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0xFRlRdICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0xFRlRdID0gdmFsOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5KQorCQljaGFuZ2VkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5ICYmCisJCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fUklHSFRdICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX1JJR0hUXSA9IHZhbDsKLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLnR2X3RvcF9tYXJnaW5fcHJvcGVydHkpCisJCWNoYW5nZWQgPSB0cnVlOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl90b3BfbWFyZ2luX3Byb3BlcnR5ICYmCisJCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fVE9QXSAhPSB2YWwpIHsKIAkJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9UT1BdID0gdmFsOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkKKwkJY2hhbmdlZCA9IHRydWU7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkgJiYKKwkJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9CT1RUT01dICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0JPVFRPTV0gPSB2YWw7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5KSB7CisJCWNoYW5nZWQgPSB0cnVlOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5KSB7CiAJCWlmICh2YWwgPj0gTlVNX1RWX01PREVTKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJaWYgKCFzdHJjbXAodHZfcHJpdi0+dHZfZm9ybWF0LCB0dl9tb2Rlc1t2YWxdLm5hbWUpKQorCQkJZ290byBvdXQ7CisKIAkJdHZfcHJpdi0+dHZfZm9ybWF0ID0gdHZfbW9kZXNbdmFsXS5uYW1lOwotCQlpbnRlbF90dl9tb2RlX3NldCgmaW50ZWxfb3V0cHV0LT5lbmMsIE5VTEwsIE5VTEwpOworCQljaGFuZ2VkID0gdHJ1ZTsKIAl9IGVsc2UgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpbnRlbF90dl9tb2RlX3NldCgmaW50ZWxfb3V0cHV0LT5lbmMsIE5VTEwsIE5VTEwpOworCWlmIChjaGFuZ2VkICYmIGNydGMpCisJCWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShjcnRjLCAmY3J0Yy0+bW9kZSwgY3J0Yy0+eCwKKwkJCQljcnRjLT55LCBjcnRjLT5mYik7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKaW5kZXggOWQxNGVlZS4uYmM5ZDA5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKQEAgLTM4OCwxNyArMzg4LDE3IEBACiAJCURSTV9JTkZPKCJMb2FkaW5nIFJTNzgwIENQIE1pY3JvY29kZVxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7CiAJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjcwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCQkJICAgICBSUzc4MF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJCSAgICAgUlM3ODBfY3BfbWljcm9jb2RlW2ldWzFdKTsKIAkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzJdKTsKKwkJCQkgICAgIFJTNzgwX2NwX21pY3JvY29kZVtpXVsyXSk7CiAJCX0KIAogCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFJTNzgwIFBGUCBNaWNyb2NvZGVcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjY3MF9wZnBfbWljcm9jb2RlW2ldKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSUzc4MF9wZnBfbWljcm9jb2RlW2ldKTsKIAl9CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwogCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCBlODVjOGZlLi43ZTY3ZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTI5LDExICsyOSwxMSBAQAogCiAJICBGb3IgZG9jcyBhbmQgc3BlY3MsIHNlZSBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9oaWRwYWdlLwogCi0JICBJZiB1bnN1cmUsIHNheSBZCisJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgSElEX0RFQlVHCiAJYm9vbCAiSElEIGRlYnVnZ2luZyBzdXBwb3J0IgotCWRlZmF1bHQgeSBpZiAhRU1CRURERUQKKwlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEhJRAogCS0tLWhlbHAtLS0KIAlUaGlzIG9wdGlvbiBsZXRzIHRoZSBISUQgbGF5ZXIgb3V0cHV0IGRpYWdub3N0aWNzIGFib3V0IGl0cyBpbnRlcm5hbApAQCAtNDQsNyArNDQsNyBAQAogCVRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgZm9yIHRob3NlIHdobyBhcmUgZWl0aGVyIGRlYnVnZ2luZyB0aGUgSElEIHBhcnNlcgogCW9yIGFueSBISUQgaGFyZHdhcmUgZGV2aWNlLgogCi0JSWYgdW5zdXJlLCBzYXkgTgorCUlmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBISURSQVcKIAlib29sICIvZGV2L2hpZHJhdyByYXcgSElEIGRldmljZSBzdXBwb3J0IgpAQCAtNzAsMTggKzcwLDYgQEAKIG1lbnUgIlNwZWNpYWwgSElEIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBISUQKIAotY29uZmlnIEhJRF9DT01QQVQKLQlib29sICJMb2FkIGFsbCBISUQgZHJpdmVycyBvbiBoaWQgY29yZSBsb2FkIgotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQlDb21wYXRpYmxlIG9wdGlvbiBmb3Igb2xkZXIgdXNlcnNwYWNlLiBJZiB5b3UgaGF2ZSBzeXN0ZW0gd2l0aG91dCB1ZGV2Ci0Jc3VwcG9ydCBvZiBtb2R1bGUgbG9hZGluZyB0aHJvdWdoIGFsaWFzZXMgYW5kIGFsc28gb2xkCi0JbW9kdWxlLWluaXQtdG9vbHMgd2hpY2ggY2FuJ3QgaGFuZGxlIGhpZCBidXMsIGNob29zZSBZIGhlcmUuIE90aGVyd2lzZQotCXNheSBOLiBJZiB5b3Ugc2F5IE4gYW5kIHlvdXIgdXNlcnNwYWNlIGlzIG9sZCBlbm91Z2gsIHRoZSBvbmx5Ci0JZnVuY3Rpb25hbGl0eSB5b3UgbG9zZSBpcyBtb2R1bGVzIGF1dG9sb2FkaW5nLgotCi0JSWYgdW5zdXJlLCBzYXkgWS4KLQogY29uZmlnIEhJRF9BNFRFQ0gKIAl0cmlzdGF0ZSAiQTQgdGVjaCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTEyOCw2ICsxMTYsMTQgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgY3lwcmVzcyBtb3VzZSBhbmQgYmFyY29kZSByZWFkZXJzLgogCitjb25maWcgRFJBR09OUklTRV9GRgorCXRyaXN0YXRlICJEcmFnb25SaXNlIEluYy4gZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUworCS0tLWhlbHAtLS0KKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBEcmFnb25SaXNlIEluYy4KKwlnYW1lIGNvbnRyb2xsZXJzLgorCiBjb25maWcgSElEX0VaS0VZCiAJdHJpc3RhdGUgIkV6a2V5IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTM1LDYgKzEzMSwxMyBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBFemtleSBCVEMgODE5MyBrZXlib2FyZC4KIAorY29uZmlnIEhJRF9LWUUKKwl0cmlzdGF0ZSAiS3llIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgIUVNQkVEREVECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIEt5ZS9HZW5pdXMgRXJnbyBNb3VzZS4KKwogY29uZmlnIEhJRF9HWVJBVElPTgogCXRyaXN0YXRlICJHeXJhdGlvbiIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTE0Miw2ICsxNDUsMTMgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgR3lyYXRpb24gcmVtb3RlIGNvbnRyb2wuCiAKK2NvbmZpZyBISURfS0VOU0lOR1RPTgorCXRyaXN0YXRlICJLZW5zaW5ndG9uIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgIUVNQkVEREVECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIEtlbnNpbmd0b24gU2xpbWJsYWRlIFRyYWNrYmFsbC4KKwogY29uZmlnIEhJRF9MT0dJVEVDSAogCXRyaXN0YXRlICJMb2dpdGVjaCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTI0Myw3ICsyNTMsNyBAQAogCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCiAJLS0taGVscC0tLQogCVNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBHcmVlbkFzaWEgKFByb2R1Y3QgSUQgMHgxMikgYmFzZWQgZ2FtZSBjb250cm9sbGVyCi0JKGxpa2UgTUFOVEEgV2FyaW9yIE1NODE2IGFuZCBTcGVlZExpbmsgU3RyaWtlMiBTTC02NjM1KSBvciBhZGFwdGVyCisJKGxpa2UgTUFOVEEgV2FycmlvciBNTTgxNiBhbmQgU3BlZWRMaW5rIFN0cmlrZTIgU0wtNjYzNSkgb3IgYWRhcHRlcgogCWFuZCB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBpdC4KIAogY29uZmlnIEhJRF9UT1BTRUVECmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IGZiZDAyMWYuLjFmN2NiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC04LDEwICs4LDYgQEAKIGhpZC0kKENPTkZJR19ISURfREVCVUcpCQkrPSBoaWQtZGVidWcubwogaGlkLSQoQ09ORklHX0hJRFJBVykJCSs9IGhpZHJhdy5vCiAKLWlmZGVmIENPTkZJR19ISURfQ09NUEFUCi1vYmotbQkJCQkrPSBoaWQtZHVtbXkubwotZW5kaWYKLQogaGlkLWxvZ2l0ZWNoLW9ianMJCTo9IGhpZC1sZy5vCiBpZmRlZiBDT05GSUdfTE9HSVRFQ0hfRkYKIAloaWQtbG9naXRlY2gtb2JqcwkrPSBoaWQtbGdmZi5vCkBAIC0yNiw4ICsyMiwxMSBAQAogb2JqLSQoQ09ORklHX0hJRF9DSEVSUlkpCSs9IGhpZC1jaGVycnkubwogb2JqLSQoQ09ORklHX0hJRF9DSElDT05ZKQkrPSBoaWQtY2hpY29ueS5vCiBvYmotJChDT05GSUdfSElEX0NZUFJFU1MpCSs9IGhpZC1jeXByZXNzLm8KK29iai0kKENPTkZJR19EUkFHT05SSVNFX0ZGKQkrPSBoaWQtZHJmZi5vCiBvYmotJChDT05GSUdfSElEX0VaS0VZKQkJKz0gaGlkLWV6a2V5Lm8KIG9iai0kKENPTkZJR19ISURfR1lSQVRJT04pCSs9IGhpZC1neXJhdGlvbi5vCitvYmotJChDT05GSUdfSElEX0tFTlNJTkdUT04pCSs9IGhpZC1rZW5zaW5ndG9uLm8KK29iai0kKENPTkZJR19ISURfS1lFKQkJKz0gaGlkLWt5ZS5vCiBvYmotJChDT05GSUdfSElEX0xPR0lURUNIKQkrPSBoaWQtbG9naXRlY2gubwogb2JqLSQoQ09ORklHX0hJRF9NSUNST1NPRlQpCSs9IGhpZC1taWNyb3NvZnQubwogb2JqLSQoQ09ORklHX0hJRF9NT05URVJFWSkJKz0gaGlkLW1vbnRlcmV5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYyBiL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYwppbmRleCBlYmNhMDBlLi40MmVhMzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYTR0ZWNoLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWE0dGVjaC5jCkBAIC0xNTgsNSArMTU4LDMgQEAKIG1vZHVsZV9pbml0KGE0X2luaXQpOwogbW9kdWxlX2V4aXQoYTRfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoYTR0ZWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jIGIvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKaW5kZXggYWEyOGFlZC4uNzM1OWQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAl1OCBmbGFnczsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2ZuX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2ZuX2tleXNbXSA9IHsKIAl7IEtFWV9CQUNLU1BBQ0UsIEtFWV9ERUxFVEUgfSwKIAl7IEtFWV9FTlRFUiwJS0VZX0lOU0VSVCB9LAogCXsgS0VZX0YxLAlLRVlfQlJJR0hUTkVTU0RPV04sIEFQUExFX0ZMQUdfRktFWSB9LApAQCAtNzUsNyArNzUsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gcG93ZXJib29rX2ZuX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19mbl9rZXlzW10gPSB7CiAJeyBLRVlfQkFDS1NQQUNFLCBLRVlfREVMRVRFIH0sCiAJeyBLRVlfRjEsCUtFWV9CUklHSFRORVNTRE9XTiwgICAgIEFQUExFX0ZMQUdfRktFWSB9LAogCXsgS0VZX0YyLAlLRVlfQlJJR0hUTkVTU1VQLCAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKQEAgLTk0LDcgKzk0LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19udW1sb2NrX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19udW1sb2NrX2tleXNbXSA9IHsKIAl7IEtFWV9KLAlLRVlfS1AxIH0sCiAJeyBLRVlfSywJS0VZX0tQMiB9LAogCXsgS0VZX0wsCUtFWV9LUDMgfSwKQEAgLTExNywxNiArMTE3LDE2IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBhcHBsZV9pc29fa2V5Ym9hcmRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2lzb19rZXlib2FyZFtdID0gewogCXsgS0VZX0dSQVZFLAlLRVlfMTAyTkQgfSwKIAl7IEtFWV8xMDJORCwJS0VZX0dSQVZFIH0sCiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqYXBwbGVfZmluZF90cmFuc2xhdGlvbigKLQkJc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdGFibGUsIHUxNiBmcm9tKQorc3RhdGljIGNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKmFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oCisJCWNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRhYmxlLCB1MTYgZnJvbSkKIHsKLQlzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uICp0cmFuczsKKwljb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uICp0cmFuczsKIAogCS8qIExvb2sgZm9yIHRoZSB0cmFuc2xhdGlvbiAqLwogCWZvciAodHJhbnMgPSB0YWJsZTsgdHJhbnMtPmZyb207IHRyYW5zKyspCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQogewogCXN0cnVjdCBhcHBsZV9zYyAqYXNjID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7Ci0Jc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CisJY29uc3Qgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CiAKIAlpZiAodXNhZ2UtPmNvZGUgPT0gS0VZX0ZOKSB7CiAJCWFzYy0+Zm5fb24gPSAhIXZhbHVlOwpAQCAtMjUzLDcgKzI1Myw3IEBACiAKIHN0YXRpYyB2b2lkIGFwcGxlX3NldHVwX2lucHV0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQogewotCXN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOworCWNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwogCiAJc2V0X2JpdChLRVlfTlVNTE9DSywgaW5wdXQtPmtleWJpdCk7CiAKQEAgLTM4Nyw2ICszODcsMTIgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMpLAogCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CiAJCQlBUFBMRV9SREVTQ19KSVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfTUlOSV9JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfSklTKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9BTlNJKSwKIAkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9JU08pLApAQCAtNDY4LDUgKzQ3NCwzIEBACiBtb2R1bGVfaW5pdChhcHBsZV9pbml0KTsKIG1vZHVsZV9leGl0KGFwcGxlX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGFwcGxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYyBiL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYwppbmRleCAxMmM4YTliLi4yZjY3MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYmVsa2luLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWJlbGtpbi5jCkBAIC0xMDEsNSArMTAxLDMgQEAKIG1vZHVsZV9pbml0KGJlbGtpbl9pbml0KTsKIG1vZHVsZV9leGl0KGJlbGtpbl9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihiZWxraW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jIGIvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jCmluZGV4IGI4MzNiOTcuLmFiODIwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY2hlcnJ5LmMKQEAgLTgzLDUgKzgzLDMgQEAKIG1vZHVsZV9pbml0KGNoX2luaXQpOwogbW9kdWxlX2V4aXQoY2hfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoY2hlcnJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtY2hpY29ueS5jCmluZGV4IGE1NGQ0MDkuLjdmOTEwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNoaWNvbnkuYwpAQCAtNzYsNSArNzYsMyBAQAogbW9kdWxlX2luaXQoY2hfaW5pdCk7CiBtb2R1bGVfZXhpdChjaF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihjaGljb255KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IDFjYzk2NzQuLjU3NDZhNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTIzNiw2ICsxMjM2LDkgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0lTTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0lTTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfSklTKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfQU5TSSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0pJUykgfSwKQEAgLTEyNjIsNiArMTI2NSw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19NT1VTRSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFJBR09OUklTRSwgMHgwMDA2KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0FNRVJPTiwgVVNCX0RFVklDRV9JRF9HQU1FUk9OX0RVQUxfUFNYX0FEQVBUT1IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BDU19BREFQVE9SKSB9LApAQCAtMTI2OSw2ICsxMjczLDggQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1JFRU5BU0lBLCAweDAwMTIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dZUkFUSU9OLCBVU0JfREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tFTlNJTkdUT04sIFVTQl9ERVZJQ0VfSURfS1NfU0xJTUJMQURFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX0VSR09fNTI1VikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEFCVEVDLCBVU0JfREVWSUNFX0lEX0xBQlRFQ19XSVJFTEVTU19LRVlCT0FSRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSKSB9LApAQCAtMTgxMywxNCArMTgxOSwyMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3VucmVnaXN0ZXJfZHJpdmVyKTsKIAotI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCi1zdGF0aWMgdm9pZCBoaWRfY29tcGF0X2xvYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKK2ludCBoaWRfY2hlY2tfa2V5c19wcmVzc2VkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7Ci0JcmVxdWVzdF9tb2R1bGUoImhpZC1kdW1teSIpOworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0OworCWludCBpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShoaWRpbnB1dCwgJmhpZC0+aW5wdXRzLCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBCSVRTX1RPX0xPTkdTKEtFWV9NQVgpOyBpKyspCisJCQlpZiAoaGlkaW5wdXQtPmlucHV0LT5rZXlbaV0pCisJCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgREVDTEFSRV9XT1JLKGhpZF9jb21wYXRfd29yaywgaGlkX2NvbXBhdF9sb2FkKTsKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaGlkX2NvbXBhdF93cTsKLSNlbmRpZgorCitFWFBPUlRfU1lNQk9MX0dQTChoaWRfY2hlY2tfa2V5c19wcmVzc2VkKTsKIAogc3RhdGljIGludCBfX2luaXQgaGlkX2luaXQodm9pZCkKIHsKQEAgLTE4MzYsMTUgKzE4NDksNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2J1czsKIAotI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCi0JaGlkX2NvbXBhdF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJoaWRfY29tcGF0Iik7Ci0JaWYgKCFoaWRfY29tcGF0X3dxKSB7Ci0JCWhpZHJhd19leGl0KCk7Ci0JCWdvdG8gZXJyOwotCX0KLQlxdWV1ZV93b3JrKGhpZF9jb21wYXRfd3EsICZoaWRfY29tcGF0X3dvcmspOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIGVycl9idXM6CiAJYnVzX3VucmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CkBAIC0xODU0LDkgKzE4NTgsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGlkX2V4aXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSElEX0NPTVBBVAotCWRlc3Ryb3lfd29ya3F1ZXVlKGhpZF9jb21wYXRfd3EpOwotI2VuZGlmCiAJaGlkcmF3X2V4aXQoKTsKIAlidXNfdW5yZWdpc3RlcigmaGlkX2J1c190eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMgYi9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jCmluZGV4IDVkNjlkMjcuLjlkNmQzYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYwpAQCAtMTU0LDUgKzE1NCwzIEBACiBtb2R1bGVfaW5pdChjcF9pbml0KTsKIG1vZHVsZV9leGl0KGNwX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGN5cHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRyZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1kcmZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmM2ViNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtZHJmZi5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgRHJhZ29uUmlzZSBJbmMuIGdhbWUgY29udHJvbGxlcnMKKyAqCisgKiBGcm9tIHdoYXQgSSBoYXZlIGdhdGhlcmVkLCB0aGVzZSBkZXZpY2VzIGFyZSBtYXNzIHByb2R1Y2VkIGluIENoaW5hIGFuZCBhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHNldmVyYWwgdmVuZG9ycy4gVGhleSBvZnRlbiBzaGFyZSB0aGUgc2FtZSBkZXNpZ24gYXMKKyAqIHRoZSBvcmlnaW5hbCBQbGF5U3RhdGlvbiBEdWFsU2hvY2sgY29udHJvbGxlci4KKyAqCisgKiAwMDc5OjAwMDYgIkRyYWdvblJpc2UgSW5jLiAgIEdlbmVyaWMgICBVU0IgIEpveXN0aWNrICAiCisgKiAgLSB0ZXN0ZWQgd2l0aCBhIFRlc3VuIFVTQi03MDMgZ2FtZSBjb250cm9sbGVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBSaWNoYXJkIFdhbG1zbGV5IDxyaWNod2FsbUBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorCitzdHJ1Y3QgZHJmZl9kZXZpY2UgeworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Cit9OworCitzdGF0aWMgaW50IGRyZmZfcGxheShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJmZl9kZXZpY2UgKmRyZmYgPSBkYXRhOworCWludCBzdHJvbmcsIHdlYWs7CisKKwlzdHJvbmcgPSBlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7CisJd2VhayA9IGVmZmVjdC0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisKKwlkYmdfaGlkKCJjYWxsZWQgd2l0aCAweCUwNHggMHglMDR4Iiwgc3Ryb25nLCB3ZWFrKTsKKworCWlmIChzdHJvbmcgfHwgd2VhaykgeworCQlzdHJvbmcgPSBzdHJvbmcgKiAweGZmIC8gMHhmZmZmOworCQl3ZWFrID0gd2VhayAqIDB4ZmYgLyAweGZmZmY7CisKKwkJLyogV2hpbGUgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGlzIGRldmljZSwgSSBmb3VuZCB0aGF0IHdoZW4KKwkJICAgdGhpcyB2YWx1ZSBpcyBzZXQsIGl0IGNhdXNlcyB0aGUgc3Ryb25nIHJ1bWJsZSB0byBmdW5jdGlvbgorCQkgICBhdCBhIG5lYXIgbWF4aW11bSBzcGVlZCwgc28gd2UnbGwgYnlwYXNzIGl0LiAqLworCQlpZiAod2VhayA9PSAweDBhKQorCQkJd2VhayA9IDB4MGI7CisKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gd2VhazsKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNF0gPSBzdHJvbmc7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZHJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweGZhOworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4ZmU7CisJfSBlbHNlIHsKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweGYzOworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJfQorCisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gMHgwMDsKKwlkYmdfaGlkKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeCIsIHN0cm9uZywgd2Vhayk7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBkcmZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRyZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBkcmZmX2RldmljZSAqZHJmZjsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0ID0gbGlzdF9maXJzdF9lbnRyeSgmaGlkLT5pbnB1dHMsCisJCQkJCQlzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9CisJCQkmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gaGlkaW5wdXQtPmlucHV0OworCWludCBlcnJvcjsKKworCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vIG91dHB1dCByZXBvcnRzIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmVwb3J0ID0gbGlzdF9maXJzdF9lbnRyeShyZXBvcnRfbGlzdCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgMSkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vIGZpZWxkcyBpbiB0aGUgcmVwb3J0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCA8IDcpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkcmZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRyZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcmZmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKKworCWVycm9yID0gaW5wdXRfZmZfY3JlYXRlX21lbWxlc3MoZGV2LCBkcmZmLCBkcmZmX3BsYXkpOworCWlmIChlcnJvcikgeworCQlrZnJlZShkcmZmKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWRyZmYtPnJlcG9ydCA9IHJlcG9ydDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gMHgwMDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNF0gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzVdID0gMHgwMDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs2XSA9IDB4MDA7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBkcmZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCWRldl9pbmZvKCZoaWQtPmRldiwgIkZvcmNlIEZlZWRiYWNrIGZvciBEcmFnb25SaXNlIEluYy4gZ2FtZSAiCisJICAgICAgICJjb250cm9sbGVycyBieSBSaWNoYXJkIFdhbG1zbGV5IDxyaWNod2FsbUBnbWFpbC5jb20+XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRyX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCWRldl9kYmcoJmhkZXYtPmRldiwgIkRyYWdvblJpc2UgSW5jLiBISUQgaGFyZHdhcmUgcHJvYmUuLi4iKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUICYgfkhJRF9DT05ORUNUX0ZGKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWRyZmZfaW5pdChoZGV2KTsKKworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBkcl9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RSQUdPTlJJU0UsIDB4MDAwNiksICB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBkcl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGRyX2RyaXZlciA9IHsKKwkubmFtZSA9ICJkcmFnb25yaXNlIiwKKwkuaWRfdGFibGUgPSBkcl9kZXZpY2VzLAorCS5wcm9iZSA9IGRyX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZkcl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmZHJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZHJfaW5pdCk7Cittb2R1bGVfZXhpdChkcl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1kdW1teS5jIGIvZHJpdmVycy9oaWQvaGlkLWR1bW15LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0Y2MwZjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWR1bW15LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLQotc3RhdGljIGludCBfX2luaXQgaGlkX2R1bW15X2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfSElEX0E0VEVDSF9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGE0dGVjaCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX0FQUExFX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoYXBwbGUpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9CRUxLSU5fTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihiZWxraW4pOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9CUklHSFRfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihicmlnaHQpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9DSEVSUllfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihjaGVycnkpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9DSElDT05ZX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoY2hpY29ueSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX0NZUFJFU1NfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihjeXByZXNzKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfREVMTF9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGRlbGwpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9FWktFWV9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGV6a2V5KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfR1lSQVRJT05fTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihneXJhdGlvbik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX0xPR0lURUNIX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIobG9naXRlY2gpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9NSUNST1NPRlRfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihtaWNyb3NvZnQpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9NT05URVJFWV9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKG1vbnRlcmV5KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfTlRSSUdfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihudHJpZyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX1BBTlRIRVJMT1JEX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIocGFudGhlcmxvcmQpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9QRVRBTFlOWF9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKHBldGFseW54KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfU0FNU1VOR19NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKHNhbXN1bmcpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9TT05ZX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoc29ueSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX1NVTlBMVVNfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihzdW5wbHVzKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19HUkVFTkFTSUFfRkZfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihncmVlbmFzaWEpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1RIUlVTVE1BU1RFUl9GRl9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKHRocnVzdG1hc3Rlcik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWkVST1BMVVNfRkZfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUih6ZXJvcGx1cyk7Ci0jZW5kaWYKLQotCXJldHVybiAtRUlPOwotfQotbW9kdWxlX2luaXQoaGlkX2R1bW15X2luaXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1lemtleS5jCmluZGV4IGRlYjQyZjkuLjBhMWZlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1lemtleS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1lemtleS5jCkBAIC05MSw1ICs5MSwzIEBACiBtb2R1bGVfaW5pdChlel9pbml0KTsKIG1vZHVsZV9leGl0KGV6X2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGV6a2V5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1nYWZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtZ2FmZi5jCmluZGV4IDcxMjExZjYuLjUxMGFkM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1nYWZmLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWdhZmYuYwpAQCAtMTgxLDUgKzE4MSwzIEBACiBtb2R1bGVfaW5pdChnYV9pbml0KTsKIG1vZHVsZV9leGl0KGdhX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGdyZWVuYXNpYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYyBiL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCmluZGV4IDA0YTBhZmUuLmQ0MmQyMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCkBAIC05NCw1ICs5NCwzIEBACiBtb2R1bGVfaW5pdChneXJhdGlvbl9pbml0KTsKIG1vZHVsZV9leGl0KGd5cmF0aW9uX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGd5cmF0aW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCA4ODUxMTk3Li5iZGVkYTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC02Nyw2ICs2Nyw5IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJCTB4MDIxYQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSVNPCTB4MDIxYgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSklTCTB4MDIxYworI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0FOU0kJMHgwMjFkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfSVNPCTB4MDIxZQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0pJUwkweDAyMWYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfQU5TSQkweDAyMjAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSVNPCTB4MDIyMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9KSVMJMHgwMjIyCkBAIC0xNDgsNiArMTUxLDggQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ETUkJCTB4MGMwYgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0RNSV9FTkMJCTB4NWZhYgogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfRFJBR09OUklTRQkweDAwNzkKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VMTwkJMHgwNEU3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUxPX1RTMjcwMAkweDAwMjAKIApAQCAtMjcyLDYgKzI3Nyw5IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfUE9XRVJDT05UUk9MCTB4MjAzMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01BQ0hJTkVURVNUCTB4MjA0MAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfS0VOU0lOR1RPTgkweDA0N2QKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9LU19TTElNQkxBREUJMHgyMDQxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSAkJMHgwNDZkCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIJMHhjMTAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9GSVJTVCAgMHhjMTEwCkBAIC00MTgsNiArNDI2LDggQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9aRVJPUExVUwkJMHgwYzEyCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LWUUJCTB4MDQ1OAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9FUkdPXzUyNVYJMHgwMDg3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1lFX0dQRU5fNTYwCTB4NTAwMwogCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWtlbnNpbmd0b24uYyBiL2RyaXZlcnMvaGlkL2hpZC1rZW5zaW5ndG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1M2JkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1rZW5zaW5ndG9uLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBLZW5zaWd0b24gU2xpbWJsYWRlIFRyYWNrYmFsbAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgSmlyaSBLb3NpbmEKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBrc19tYXBfa2V5KGMpCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCAoYykpCisKK3N0YXRpYyBpbnQga3NfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9NU1ZFTkRPUikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwljYXNlIDB4MDE6IGtzX21hcF9rZXkoQlROX01JRERMRSk7CWJyZWFrOworCWNhc2UgMHgwMjoga3NfbWFwX2tleShCVE5fU0lERSk7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGtzX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS0VOU0lOR1RPTiwgVVNCX0RFVklDRV9JRF9LU19TTElNQkxBREUpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGtzX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIga3NfZHJpdmVyID0geworCS5uYW1lID0gImtlbnNpbmd0b24iLAorCS5pZF90YWJsZSA9IGtzX2RldmljZXMsCisJLmlucHV0X21hcHBpbmcgPSBrc19pbnB1dF9tYXBwaW5nLAorfTsKKworc3RhdGljIGludCBrc19pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmtzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGtzX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmtzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGtzX2luaXQpOworbW9kdWxlX2V4aXQoa3NfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQta3llLmMgYi9kcml2ZXJzL2hpZC9oaWQta3llLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlZTNmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1reWUuYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIEt5ZS9HZW5pdXMgZGV2aWNlcyBub3QgZnVsbHkgY29tcGxpYW50IHdpdGggSElEIHN0YW5kYXJkCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwOSBUb21hcyBIYW5haworICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworLyogdGhlIGZpeHVwcyB0aGF0IG5lZWQgdG8gYmUgZG9uZToKKyAqICAgLSBjaGFuZ2UgbGVkIHVzYWdlIHBhZ2UgdG8gYnV0dG9uIGZvciBleHRyYSBidXR0b25zCisgKiAgIC0gcmVwb3J0IHNpemUgOCBjb3VudCAxIG11c3QgYmUgc2l6ZSAxIGNvdW50IDggZm9yIGJ1dHRvbiBiaXRmaWVsZAorICogICAtIGNoYW5nZSB0aGUgYnV0dG9uIHVzYWdlIHJhbmdlIHRvIDQtNyBmb3IgdGhlIGV4dHJhIGJ1dHRvbnMKKyAqLworc3RhdGljIHZvaWQga3llX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gNzQgJiYKKwkJcmRlc2NbNjFdID09IDB4MDUgJiYgcmRlc2NbNjJdID09IDB4MDggJiYKKwkJcmRlc2NbNjNdID09IDB4MTkgJiYgcmRlc2NbNjRdID09IDB4MDggJiYKKwkJcmRlc2NbNjVdID09IDB4MjkgJiYgcmRlc2NbNjZdID09IDB4MGYgJiYKKwkJcmRlc2NbNzFdID09IDB4NzUgJiYgcmRlc2NbNzJdID09IDB4MDggJiYKKwkJcmRlc2NbNzNdID09IDB4OTUgJiYgcmRlc2NbNzRdID09IDB4MDEpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBLeWUvR2VuaXVzIEVyZ28gTW91c2UgcmVwb3J0ICIKKwkJCQkiZGVzY3JpcHRvclxuIik7CisJCXJkZXNjWzYyXSA9IDB4MDk7CisJCXJkZXNjWzY0XSA9IDB4MDQ7CisJCXJkZXNjWzY2XSA9IDB4MDc7CisJCXJkZXNjWzcyXSA9IDB4MDE7CisJCXJkZXNjWzc0XSA9IDB4MDg7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQga3llX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9FUkdPXzUyNVYpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGt5ZV9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGt5ZV9kcml2ZXIgPSB7CisJLm5hbWUgPSAia3llIiwKKwkuaWRfdGFibGUgPSBreWVfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0ga3llX3JlcG9ydF9maXh1cCwKK307CisKK3N0YXRpYyBpbnQga3llX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigma3llX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGt5ZV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZreWVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa3llX2luaXQpOworbW9kdWxlX2V4aXQoa3llX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwppbmRleCA4M2UwN2M5Li43YjgwY2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtMzI2LDUgKzMyNiwzIEBACiBtb2R1bGVfaW5pdChsZ19pbml0KTsKIG1vZHVsZV9leGl0KGxnX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGxvZ2l0ZWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYyBiL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYwppbmRleCAyNWIxMGRjLi41ZTllMzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCkBAIC0yMTAsNSArMjEwLDMgQEAKIG1vZHVsZV9pbml0KG1zX2luaXQpOwogbW9kdWxlX2V4aXQobXNfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIobWljcm9zb2Z0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jIGIvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKaW5kZXggZjNhODVhMC4uMjQwZjg3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKQEAgLTc4LDUgKzc4LDMgQEAKIG1vZHVsZV9pbml0KG1yX2luaXQpOwogbW9kdWxlX2V4aXQobXJfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIobW9udGVyZXkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYwppbmRleCBkYjQ0ZmJkLi5jNWIyNTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYwpAQCAtNzgsNSArNzgsMyBAQAogbW9kdWxlX2luaXQobnRyaWdfaW5pdCk7CiBtb2R1bGVfZXhpdChudHJpZ19leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihudHJpZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYyBiL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCmluZGV4IDEwOTQ1ZmUuLjJlODNlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCkBAIC0xMTgsNSArMTE4LDMgQEAKIG1vZHVsZV9pbml0KHBsX2luaXQpOwogbW9kdWxlX2V4aXQocGxfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIocGV0YWx5bngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBsLmMgYi9kcml2ZXJzL2hpZC9oaWQtcGwuYwppbmRleCA0Njk0MWY5Li40ZGI5YTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGwuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcGwuYwpAQCAtOSw5ICs5LDEyIEBACiAgKiAgIC0gY29udGFpbnMgdHdvIHJlcG9ydHMsIG9uZSBmb3IgZWFjaCBwb3J0IChISURfUVVJUktfTVVMVElfSU5QVVQpCiAgKgogICogIDBlOGY6MDAwMyAiR3JlZW5Bc2lhIEluYy4gICAgVVNCIEpveXN0aWNrICAgICAiCi0gKiAgIC0gdGVzdGVkIHdpdGggSz8/bmcgR2FtaW5nIGdhbWVwYWQKKyAqICAgLSB0ZXN0ZWQgd2l0aCBL9m5pZyBHYW1pbmcgZ2FtZXBhZAogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDcgQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+CisgKiAgMGU4ZjowMDAzICJHQVNJQSBVU0IgR2FtZXBhZCIKKyAqICAgLSBhbm90aGVyIHZlcnNpb24gb2YgdGhlIEv2bmlnIGdhbWVwYWQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgogICovCiAKIC8qCkBAIC00Niw2ICs0OSw4IEBACiAKIHN0cnVjdCBwbGZmX2RldmljZSB7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzMzIgKnN0cm9uZzsKKwlzMzIgKndlYWs7CiB9OwogCiBzdGF0aWMgaW50IGhpZF9wbGZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLApAQCAtNjIsOCArNjcsOCBAQAogCWxlZnQgPSBsZWZ0ICogMHg3ZiAvIDB4ZmZmZjsKIAlyaWdodCA9IHJpZ2h0ICogMHg3ZiAvIDB4ZmZmZjsKIAotCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gbGVmdDsKLQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHJpZ2h0OworCSpwbGZmLT5zdHJvbmcgPSBsZWZ0OworCSpwbGZmLT53ZWFrID0gcmlnaHQ7CiAJZGVidWcoInJ1bm5pbmcgd2l0aCAweCUwMnggMHglMDJ4IiwgbGVmdCwgcmlnaHQpOwogCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CiAKQEAgLTgwLDYgKzg1LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfcHRyID0gcmVwb3J0X2xpc3Q7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCWludCBlcnJvcjsKKwlzMzIgKnN0cm9uZzsKKwlzMzIgKndlYWs7CiAKIAkvKiBUaGUgZGV2aWNlIGNvbnRhaW5zIG9uZSBvdXRwdXQgcmVwb3J0IHBlciBwaHlzaWNhbCBkZXZpY2UsIGFsbAogCSAgIGNvbnRhaW5pbmcgMSBmaWVsZCwgd2hpY2ggY29udGFpbnMgNCBmZjAwLjAwMDIgdXNhZ2VzIGFuZCA0IDE2Yml0CkBAIC04Nyw3ICs5NCwxMiBAQAogCiAJICAgVGhlIGlucHV0IHJlcG9ydHMgYWxzbyBjb250YWluIGEgZmllbGQgd2hpY2ggY29udGFpbnMKIAkgICA4IGZmMDAuMDAwMSB1c2FnZXMgYW5kIDggYm9vbGVhbiB2YWx1ZXMuIFRoZWlyIG1lYW5pbmcgaXMKLQkgICBjdXJyZW50bHkgdW5rbm93bi4gKi8KKwkgICBjdXJyZW50bHkgdW5rbm93bi4KKwkgICAKKwkgICBBIHZlcnNpb24gb2YgdGhlIDBlOGY6MDAwMyBleGlzdHMgdGhhdCBoYXMgYWxsIHRoZSB2YWx1ZXMgaW4KKwkgICBzZXBhcmF0ZSBmaWVsZHMgYW5kIG1pc3NlcyB0aGUgZXh0cmEgaW5wdXQgZmllbGQsIHRodXMgcmVzZW1ibGluZworCSAgIFplcm9wbHVzIChoaWQtenBmZikgZGV2aWNlcy4KKwkqLwogCiAJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CiAJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gb3V0cHV0IHJlcG9ydHMgZm91bmRcbiIpOwpAQCAtMTEwLDggKzEyMiwyMSBAQAogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAotCQlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgNCkgewotCQkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50ID49IDQpIHsKKwkJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKKwkJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwkJCXN0cm9uZyA9ICZyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXTsKKwkJCXdlYWsgPSAmcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM107CisJCQlkZWJ1ZygiZGV0ZWN0ZWQgc2luZ2xlLWZpZWxkIGRldmljZSIpOworCQl9IGVsc2UgaWYgKHJlcG9ydC0+bWF4ZmllbGQgPj0gNCAmJiByZXBvcnQtPmZpZWxkWzBdLT5tYXh1c2FnZSA9PSAxICYmCisJCQkJcmVwb3J0LT5maWVsZFswXS0+dXNhZ2VbMF0uaGlkID09IChISURfVVBfTEVEIHwgMHg0MykpIHsKKwkJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKKwkJCXJlcG9ydC0+ZmllbGRbMV0tPnZhbHVlWzBdID0gMHgwMDsKKwkJCXN0cm9uZyA9ICZyZXBvcnQtPmZpZWxkWzJdLT52YWx1ZVswXTsKKwkJCXdlYWsgPSAmcmVwb3J0LT5maWVsZFszXS0+dmFsdWVbMF07CisJCQlkZWJ1ZygiZGV0ZWN0ZWQgNC1maWVsZCBkZXZpY2UiKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm90IGVub3VnaCBmaWVsZHMgb3IgdmFsdWVzXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKQEAgLTEzMCwxMCArMTU1LDExIEBACiAJCX0KIAogCQlwbGZmLT5yZXBvcnQgPSByZXBvcnQ7Ci0JCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKLQkJcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOwotCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7Ci0JCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gMHgwMDsKKwkJcGxmZi0+c3Ryb25nID0gc3Ryb25nOworCQlwbGZmLT53ZWFrID0gd2VhazsKKworCQkqc3Ryb25nID0gMHgwMDsKKwkJKndlYWsgPSAweDAwOwogCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHBsZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCX0KIApAQCAtMTgwLDcgKzIwNiw3IEBACiAJCS5kcml2ZXJfZGF0YSA9IDEgfSwgLyogVHdpbiBVU0IgSm95c3RpY2sgKi8KIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0FNRVJPTiwgVVNCX0RFVklDRV9JRF9HQU1FUk9OX0RVQUxfUENTX0FEQVBUT1IpLAogCQkuZHJpdmVyX2RhdGEgPSAxIH0sIC8qIFR3aW4gVVNCIEpveXN0aWNrICovCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSRUVOQVNJQSwgMHgwMDAzKSwgfSwgLyogR3JlZW5Bc2lhIEluYy4gVVNCIEpveXN0aWNrICovCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSRUVOQVNJQSwgMHgwMDAzKSwgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgcGxfZGV2aWNlcyk7CkBAIC0yMDQsNSArMjMwLDMgQEAKIG1vZHVsZV9pbml0KHBsX2luaXQpOwogbW9kdWxlX2V4aXQocGxfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIocGFudGhlcmxvcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYyBiL2RyaXZlcnMvaGlkL2hpZC1zYW1zdW5nLmMKaW5kZXggMTVmM2MwNC4uMDcwODNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jCkBAIC05Niw1ICs5NiwzIEBACiBtb2R1bGVfaW5pdChzYW1zdW5nX2luaXQpOwogbW9kdWxlX2V4aXQoc2Ftc3VuZ19leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihzYW1zdW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCmluZGV4IGRkNWEzOTcuLmMyNTk5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpAQCAtMTQ4LDUgKzE0OCwzIEBACiBtb2R1bGVfaW5pdChzb255X2luaXQpOwogbW9kdWxlX2V4aXQoc29ueV9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihzb255KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zdW5wbHVzLmMgYi9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jCmluZGV4IDViYTY4ZjcuLmUwYThmZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zdW5wbHVzLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYwpAQCAtNzgsNSArNzgsMyBAQAogbW9kdWxlX2luaXQoc3BfaW5pdCk7CiBtb2R1bGVfZXhpdChzcF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihzdW5wbHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC10bWZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jCmluZGV4IDFiN2NiYTAuLjdjMWY3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC10bWZmLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwpAQCAtMjY1LDUgKzI2NSwzIEBACiBtb2R1bGVfaW5pdCh0bV9pbml0KTsKIG1vZHVsZV9leGl0KHRtX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKHRocnVzdG1hc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jIGIvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYwppbmRleCBjY2E2NGEwLi4xNTJjY2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10b3BzZWVkLmMKQEAgLTczLDUgKzczLDMgQEAKIG1vZHVsZV9pbml0KHRzX2luaXQpOwogbW9kdWxlX2V4aXQodHNfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIodG9wc2VlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtenBmZi5jIGIvZHJpdmVycy9oaWQvaGlkLXpwZmYuYwppbmRleCBlYTgyZjM3Li44NWExOThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC16cGZmLmMKQEAgLTE1OCw1ICsxNTgsMyBAQAogbW9kdWxlX2luaXQoenBfaW5pdCk7CiBtb2R1bGVfZXhpdCh6cF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUih6ZXJvcGx1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDAyYjE5ZGIuLmUyNjNkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0xODEsOSArMTgxLDE3IEBACiAKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghZGV2LT5vcGVuKyspIHsKKwkJaWYgKGRldi0+aGlkLT5sbF9kcml2ZXItPnBvd2VyKSB7CisJCQllcnIgPSBkZXYtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcihkZXYtPmhpZCwgUE1fSElOVF9GVUxMT04pOworCQkJaWYgKGVyciA8IDApCisJCQkJZ290byBvdXRfdW5sb2NrOworCQl9CiAJCWVyciA9IGRldi0+aGlkLT5sbF9kcml2ZXItPm9wZW4oZGV2LT5oaWQpOwotCQlpZiAoZXJyIDwgMCkKKwkJaWYgKGVyciA8IDApIHsKKwkJCWlmIChkZXYtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcikKKwkJCQlkZXYtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcihkZXYtPmhpZCwgUE1fSElOVF9OT1JNQUwpOwogCQkJZGV2LT5vcGVuLS07CisJCX0KIAl9CiAKIG91dF91bmxvY2s6CkBAIC0yMDksMTAgKzIxNywxMyBAQAogCWxpc3RfZGVsKCZsaXN0LT5ub2RlKTsKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghLS1kZXYtPm9wZW4pIHsKLQkJaWYgKGxpc3QtPmhpZHJhdy0+ZXhpc3QpCisJCWlmIChsaXN0LT5oaWRyYXctPmV4aXN0KSB7CisJCQlpZiAoZGV2LT5oaWQtPmxsX2RyaXZlci0+cG93ZXIpCisJCQkJZGV2LT5oaWQtPmxsX2RyaXZlci0+cG93ZXIoZGV2LT5oaWQsIFBNX0hJTlRfTk9STUFMKTsKIAkJCWRldi0+aGlkLT5sbF9kcml2ZXItPmNsb3NlKGRldi0+aGlkKTsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJa2ZyZWUobGlzdC0+aGlkcmF3KTsKKwkJfQogCX0KIAogCWtmcmVlKGxpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCBmMGEwZjcyLi40MzA2Y2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtNSw2ICs1LDcgQEAKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgogICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYwogICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggT2xpdmVyIE5ldWt1bQogICovCiAKIC8qCkBAIC0yNyw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKQEAgLTUzLDYgKzU1LDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobW91c2Vwb2xsLCBoaWRfbW91c2Vwb2xsX2ludGVydmFsLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobW91c2Vwb2xsLCAiUG9sbGluZyBpbnRlcnZhbCBvZiBtaWNlIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWdub3JlbGVkOworbW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZWxlZCwgaWdub3JlbGVkLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWdub3JlbGVkLCAiQXV0b3N1c3BlbmQgd2l0aCBhY3RpdmUgbGVkcyIpOworCiAvKiBRdWlya3Mgc3BlY2lmaWVkIGF0IG1vZHVsZSBsb2FkIHRpbWUgKi8KIHN0YXRpYyBjaGFyICpxdWlya3NfcGFyYW1bTUFYX1VTQkhJRF9CT09UX1FVSVJLU10gPSB7IFsgMCAuLi4gKE1BWF9VU0JISURfQk9PVF9RVUlSS1MgLSAxKSBdID0gTlVMTCB9OwogbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKHF1aXJrcywgcXVpcmtzX3BhcmFtLCBjaGFycCwgTlVMTCwgMDQ0NCk7CkBAIC02Myw4ICs2OSwxMyBAQAogLyoKICAqIElucHV0IHN1Ym1pc3Npb24gYW5kIEkvTyBlcnJvciBoYW5kbGVyLgogICovCitzdGF0aWMgREVGSU5FX01VVEVYKGhpZF9vcGVuX211dCk7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc3VtcHRpb25fd2FrZXI7CiAKIHN0YXRpYyB2b2lkIGhpZF9pb19lcnJvcihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3N0YXRpYyBpbnQgaGlkX3N1Ym1pdF9vdXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CitzdGF0aWMgaW50IGhpZF9zdWJtaXRfY3RybChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3N0YXRpYyB2b2lkIGhpZF9jYW5jZWxfZGVsYXllZF9zdHVmZihzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKTsKIAogLyogU3RhcnQgdXAgdGhlIGlucHV0IFVSQiAqLwogc3RhdGljIGludCBoaWRfc3RhcnRfaW4oc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKQEAgLTczLDE1ICs4NCwxNiBAQAogCWludCByYyA9IDA7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKLQlpZiAoaGlkLT5vcGVuID4gMCAmJiAhdGVzdF9iaXQoSElEX1NVU1BFTkRFRCwgJnVzYmhpZC0+aW9mbCkgJiYKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CisJaWYgKGhpZC0+b3BlbiA+IDAgJiYKIAkJCSF0ZXN0X2JpdChISURfRElTQ09OTkVDVEVELCAmdXNiaGlkLT5pb2ZsKSAmJgorCQkJIXRlc3RfYml0KEhJRF9SRVBPUlRFRF9JRExFLCAmdXNiaGlkLT5pb2ZsKSAmJgogCQkJIXRlc3RfYW5kX3NldF9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKSB7CiAJCXJjID0gdXNiX3N1Ym1pdF91cmIodXNiaGlkLT51cmJpbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyYyAhPSAwKQogCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE0NSw3ICsxNTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBTdG9wIHdoZW4gZGlzY29ubmVjdGVkICovCiAJaWYgKHRlc3RfYml0KEhJRF9ESVNDT05ORUNURUQsICZ1c2JoaWQtPmlvZmwpKQpAQCAtMTc1LDcgKzE4Nyw1MSBAQAogCW1vZF90aW1lcigmdXNiaGlkLT5pb19yZXRyeSwKIAkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHVzYmhpZC0+cmV0cnlfZGVsYXkpKTsKIGRvbmU6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdXNiaGlkX21hcmtfYnVzeShzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdXNiaGlkLT5pbnRmOworCisJdXNiX21hcmtfbGFzdF9idXN5KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworfQorCitzdGF0aWMgaW50IHVzYmhpZF9yZXN0YXJ0X291dF9xdWV1ZShzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYmhpZC0+aW50Zik7CisJaW50IGtpY2tlZDsKKworCWlmICghaGlkKQorCQlyZXR1cm4gMDsKKworCWlmICgoa2lja2VkID0gKHVzYmhpZC0+b3V0aGVhZCAhPSB1c2JoaWQtPm91dHRhaWwpKSkgeworCQlkYmcoIktpY2tpbmcgaGVhZCAlZCB0YWlsICVkIiwgdXNiaGlkLT5vdXRoZWFkLCB1c2JoaWQtPm91dHRhaWwpOworCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkgeworCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CisJCQl3YWtlX3VwKCZ1c2JoaWQtPndhaXQpOworCQl9CisJfQorCXJldHVybiBraWNrZWQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiaGlkX3Jlc3RhcnRfY3RybF9xdWV1ZShzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYmhpZC0+aW50Zik7CisJaW50IGtpY2tlZDsKKworCVdBUk5fT04oaGlkID09IE5VTEwpOworCWlmICghaGlkKQorCQlyZXR1cm4gMDsKKworCWlmICgoa2lja2VkID0gKHVzYmhpZC0+Y3RybGhlYWQgIT0gdXNiaGlkLT5jdHJsdGFpbCkpKSB7CisJCWRiZygiS2lja2luZyBoZWFkICVkIHRhaWwgJWQiLCB1c2JoaWQtPmN0cmxoZWFkLCB1c2JoaWQtPmN0cmx0YWlsKTsKKwkJaWYgKGhpZF9zdWJtaXRfY3RybChoaWQpKSB7CisJCQljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CisJCQl3YWtlX3VwKCZ1c2JoaWQtPndhaXQpOworCQl9CisJfQorCXJldHVybiBraWNrZWQ7CiB9CiAKIC8qCkBAIC0xOTAsMTIgKzI0NiwyMyBAQAogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKIAkJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7CiAJCWhpZF9pbnB1dF9yZXBvcnQodXJiLT5jb250ZXh0LCBISURfSU5QVVRfUkVQT1JULAogCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoLCAxKTsKKwkJLyoKKwkJICogYXV0b3N1c3BlbmQgcmVmdXNlZCB3aGlsZSBrZXlzIGFyZSBwcmVzc2VkCisJCSAqIGJlY2F1c2UgbW9zdCBrZXlib2FyZHMgZG9uJ3Qgd2FrZSB1cCB3aGVuCisJCSAqIGEga2V5IGlzIHJlbGVhc2VkCisJCSAqLworCQlpZiAoaGlkX2NoZWNrX2tleXNfcHJlc3NlZChoaWQpKQorCQkJc2V0X2JpdChISURfS0VZU19QUkVTU0VELCAmdXNiaGlkLT5pb2ZsKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KEhJRF9LRVlTX1BSRVNTRUQsICZ1c2JoaWQtPmlvZmwpOwogCQlicmVhazsKIAljYXNlIC1FUElQRToJCS8qIHN0YWxsICovCisJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKIAkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAkJc2V0X2JpdChISURfQ0xFQVJfSEFMVCwgJnVzYmhpZC0+aW9mbCk7CiAJCXNjaGVkdWxlX3dvcmsoJnVzYmhpZC0+cmVzZXRfd29yayk7CkBAIC0yMDksNiArMjc2LDcgQEAKIAljYXNlIC1FUFJPVE86CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KIAljYXNlIC1FVElNRToJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwogCWNhc2UgLUVUSU1FRE9VVDoJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0Li4uICovCisJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKIAkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAkJaGlkX2lvX2Vycm9yKGhpZCk7CiAJCXJldHVybjsKQEAgLTIzOSwxNiArMzA3LDI1IEBACiAJcmVwb3J0ID0gdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXR0YWlsXS5yZXBvcnQ7CiAJcmF3X3JlcG9ydCA9IHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0dGFpbF0ucmF3X3JlcG9ydDsKIAotCXVzYmhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOwotCXVzYmhpZC0+dXJib3V0LT5kZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOwotCW1lbWNweSh1c2JoaWQtPm91dGJ1ZiwgcmF3X3JlcG9ydCwgdXNiaGlkLT51cmJvdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwotCWtmcmVlKHJhd19yZXBvcnQpOworCWlmICghdGVzdF9iaXQoSElEX1JFUE9SVEVEX0lETEUsICZ1c2JoaWQtPmlvZmwpKSB7CisJCXVzYmhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOworCQl1c2JoaWQtPnVyYm91dC0+ZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKKwkJbWVtY3B5KHVzYmhpZC0+b3V0YnVmLCByYXdfcmVwb3J0LCB1c2JoaWQtPnVyYm91dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCWtmcmVlKHJhd19yZXBvcnQpOwogCi0JZGJnX2hpZCgic3VibWl0dGluZyBvdXQgdXJiXG4iKTsKKwkJZGJnX2hpZCgic3VibWl0dGluZyBvdXQgdXJiXG4iKTsKIAotCWlmICh1c2Jfc3VibWl0X3VyYih1c2JoaWQtPnVyYm91dCwgR0ZQX0FUT01JQykpIHsKLQkJZXJyX2hpZCgidXNiX3N1Ym1pdF91cmIob3V0KSBmYWlsZWQiKTsKLQkJcmV0dXJuIC0xOworCQlpZiAodXNiX3N1Ym1pdF91cmIodXNiaGlkLT51cmJvdXQsIEdGUF9BVE9NSUMpKSB7CisJCQllcnJfaGlkKCJ1c2Jfc3VibWl0X3VyYihvdXQpIGZhaWxlZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogcXVldWUgd29yayB0byB3YWtlIHVwIHRoZSBkZXZpY2UuCisJCSAqIGFzIHRoZSB3b3JrIHF1ZXVlIGlzIGZyZWV6ZWFibGUsIHRoaXMgaXMgc2FmZQorCQkgKiB3aXRoIHJlc3BlY3QgdG8gU1REIGFuZCBTVFIKKwkJICovCisJCXF1ZXVlX3dvcmsocmVzdW1wdGlvbl93YWtlciwgJnVzYmhpZC0+cmVzdGFydF93b3JrKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI2Niw0MSArMzQzLDUwIEBACiAJcmF3X3JlcG9ydCA9IHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5yYXdfcmVwb3J0OwogCWRpciA9IHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5kaXI7CiAKLQlsZW4gPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIChyZXBvcnQtPmlkID4gMCk7Ci0JaWYgKGRpciA9PSBVU0JfRElSX09VVCkgewotCQl1c2JoaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaGlkX3RvX3VzYl9kZXYoaGlkKSwgMCk7Ci0JCXVzYmhpZC0+dXJiY3RybC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKLQkJbWVtY3B5KHVzYmhpZC0+Y3RybGJ1ZiwgcmF3X3JlcG9ydCwgbGVuKTsKLQkJa2ZyZWUocmF3X3JlcG9ydCk7CisJaWYgKCF0ZXN0X2JpdChISURfUkVQT1JURURfSURMRSwgJnVzYmhpZC0+aW9mbCkpIHsKKwkJbGVuID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOworCQlpZiAoZGlyID09IFVTQl9ESVJfT1VUKSB7CisJCQl1c2JoaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaGlkX3RvX3VzYl9kZXYoaGlkKSwgMCk7CisJCQl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJCQltZW1jcHkodXNiaGlkLT5jdHJsYnVmLCByYXdfcmVwb3J0LCBsZW4pOworCQkJa2ZyZWUocmF3X3JlcG9ydCk7CisJCX0gZWxzZSB7CisJCQlpbnQgbWF4cGFja2V0LCBwYWRsZW47CisKKwkJCXVzYmhpZC0+dXJiY3RybC0+cGlwZSA9IHVzYl9yY3ZjdHJscGlwZShoaWRfdG9fdXNiX2RldihoaWQpLCAwKTsKKwkJCW1heHBhY2tldCA9IHVzYl9tYXhwYWNrZXQoaGlkX3RvX3VzYl9kZXYoaGlkKSwgdXNiaGlkLT51cmJjdHJsLT5waXBlLCAwKTsKKwkJCWlmIChtYXhwYWNrZXQgPiAwKSB7CisJCQkJcGFkbGVuID0gRElWX1JPVU5EX1VQKGxlbiwgbWF4cGFja2V0KTsKKwkJCQlwYWRsZW4gKj0gbWF4cGFja2V0OworCQkJCWlmIChwYWRsZW4gPiB1c2JoaWQtPmJ1ZnNpemUpCisJCQkJCXBhZGxlbiA9IHVzYmhpZC0+YnVmc2l6ZTsKKwkJCX0gZWxzZQorCQkJCXBhZGxlbiA9IDA7CisJCQl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwYWRsZW47CisJCX0KKwkJdXNiaGlkLT51cmJjdHJsLT5kZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOworCisJCXVzYmhpZC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IGRpcjsKKwkJdXNiaGlkLT5jci0+YlJlcXVlc3QgPSAoZGlyID09IFVTQl9ESVJfT1VUKSA/IEhJRF9SRVFfU0VUX1JFUE9SVCA6IEhJRF9SRVFfR0VUX1JFUE9SVDsKKwkJdXNiaGlkLT5jci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoKChyZXBvcnQtPnR5cGUgKyAxKSA8PCA4KSB8IHJlcG9ydC0+aWQpOworCQl1c2JoaWQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNih1c2JoaWQtPmlmbnVtKTsKKwkJdXNiaGlkLT5jci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KGxlbik7CisKKwkJZGJnX2hpZCgic3VibWl0dGluZyBjdHJsIHVyYjogJXMgd1ZhbHVlPTB4JTA0eCB3SW5kZXg9MHglMDR4IHdMZW5ndGg9JXVcbiIsCisJCQl1c2JoaWQtPmNyLT5iUmVxdWVzdCA9PSBISURfUkVRX1NFVF9SRVBPUlQgPyAiU2V0X1JlcG9ydCIgOiAiR2V0X1JlcG9ydCIsCisJCQl1c2JoaWQtPmNyLT53VmFsdWUsIHVzYmhpZC0+Y3ItPndJbmRleCwgdXNiaGlkLT5jci0+d0xlbmd0aCk7CisKKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHVzYmhpZC0+dXJiY3RybCwgR0ZQX0FUT01JQykpIHsKKwkJCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKGN0cmwpIGZhaWxlZCIpOworCQkJcmV0dXJuIC0xOworCQl9CiAJfSBlbHNlIHsKLQkJaW50IG1heHBhY2tldCwgcGFkbGVuOwotCi0JCXVzYmhpZC0+dXJiY3RybC0+cGlwZSA9IHVzYl9yY3ZjdHJscGlwZShoaWRfdG9fdXNiX2RldihoaWQpLCAwKTsKLQkJbWF4cGFja2V0ID0gdXNiX21heHBhY2tldChoaWRfdG9fdXNiX2RldihoaWQpLCB1c2JoaWQtPnVyYmN0cmwtPnBpcGUsIDApOwotCQlpZiAobWF4cGFja2V0ID4gMCkgewotCQkJcGFkbGVuID0gRElWX1JPVU5EX1VQKGxlbiwgbWF4cGFja2V0KTsKLQkJCXBhZGxlbiAqPSBtYXhwYWNrZXQ7Ci0JCQlpZiAocGFkbGVuID4gdXNiaGlkLT5idWZzaXplKQotCQkJCXBhZGxlbiA9IHVzYmhpZC0+YnVmc2l6ZTsKLQkJfSBlbHNlCi0JCQlwYWRsZW4gPSAwOwotCQl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwYWRsZW47Ci0JfQotCXVzYmhpZC0+dXJiY3RybC0+ZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKLQotCXVzYmhpZC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IGRpcjsKLQl1c2JoaWQtPmNyLT5iUmVxdWVzdCA9IChkaXIgPT0gVVNCX0RJUl9PVVQpID8gSElEX1JFUV9TRVRfUkVQT1JUIDogSElEX1JFUV9HRVRfUkVQT1JUOwotCXVzYmhpZC0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCgocmVwb3J0LT50eXBlICsgMSkgPDwgOCkgfCByZXBvcnQtPmlkKTsKLQl1c2JoaWQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNih1c2JoaWQtPmlmbnVtKTsKLQl1c2JoaWQtPmNyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKLQotCWRiZ19oaWQoInN1Ym1pdHRpbmcgY3RybCB1cmI6ICVzIHdWYWx1ZT0weCUwNHggd0luZGV4PTB4JTA0eCB3TGVuZ3RoPSV1XG4iLAotCQl1c2JoaWQtPmNyLT5iUmVxdWVzdCA9PSBISURfUkVRX1NFVF9SRVBPUlQgPyAiU2V0X1JlcG9ydCIgOiAiR2V0X1JlcG9ydCIsCi0JCXVzYmhpZC0+Y3ItPndWYWx1ZSwgdXNiaGlkLT5jci0+d0luZGV4LCB1c2JoaWQtPmNyLT53TGVuZ3RoKTsKLQotCWlmICh1c2Jfc3VibWl0X3VyYih1c2JoaWQtPnVyYmN0cmwsIEdGUF9BVE9NSUMpKSB7Ci0JCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKGN0cmwpIGZhaWxlZCIpOwotCQlyZXR1cm4gLTE7CisJCS8qCisJCSAqIHF1ZXVlIHdvcmsgdG8gd2FrZSB1cCB0aGUgZGV2aWNlLgorCQkgKiBhcyB0aGUgd29yayBxdWV1ZSBpcyBmcmVlemVhYmxlLCB0aGlzIGlzIHNhZmUKKwkJICogd2l0aCByZXNwZWN0IHRvIFNURCBhbmQgU1RSCisJCSAqLworCQlxdWV1ZV93b3JrKHJlc3VtcHRpb25fd2FrZXIsICZ1c2JoaWQtPnJlc3RhcnRfd29yayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMzIsNyArNDE4LDcgQEAKIAkJCQkicmVjZWl2ZWRcbiIsIHVyYi0+c3RhdHVzKTsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHVucGx1ZykKIAkJdXNiaGlkLT5vdXR0YWlsID0gdXNiaGlkLT5vdXRoZWFkOwpAQCAtMzQ0LDEyICs0MzAsMTIgQEAKIAkJCWNsZWFyX2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOwogCQkJd2FrZV91cCgmdXNiaGlkLT53YWl0KTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKIAljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKIAl3YWtlX3VwKCZ1c2JoaWQtPndhaXQpOwogfQogCkBAIC0zNjEsMTIgKzQ0NywxMSBAQAogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdW5wbHVnID0gMDsKKwlpbnQgdW5wbHVnID0gMCwgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmdXNiaGlkLT5sb2NrKTsKIAotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCiAJCWlmICh1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0uZGlyID09IFVTQl9ESVJfSU4pCiAJCQloaWRfaW5wdXRfcmVwb3J0KHVyYi0+Y29udGV4dCwKQEAgLTM4Myw3ICs0NjgsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgkJLyogZXJyb3IgKi8KIAkJZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJjdHJsIHVyYiBzdGF0dXMgJWQgIgotCQkJCSJyZWNlaXZlZFxuIiwgdXJiLT5zdGF0dXMpOworCQkJCSJyZWNlaXZlZFxuIiwgc3RhdHVzKTsKIAl9CiAKIAlpZiAodW5wbHVnKQpAQCAtMzk2LDE5ICs0ODEsMTggQEAKIAkJCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAkJCXdha2VfdXAoJnVzYmhpZC0+d2FpdCk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9jaygmdXNiaGlkLT5sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAogCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJnVzYmhpZC0+bG9jayk7CiAJd2FrZV91cCgmdXNiaGlkLT53YWl0KTsKIH0KIAotdm9pZCB1c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKK3ZvaWQgX191c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKIHsKIAlpbnQgaGVhZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCWludCBsZW4gPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIChyZXBvcnQtPmlkID4gMCk7CiAKQEAgLTQxNiwxOCArNTAwLDEzIEBACiAJCXJldHVybjsKIAogCWlmICh1c2JoaWQtPnVyYm91dCAmJiBkaXIgPT0gVVNCX0RJUl9PVVQgJiYgcmVwb3J0LT50eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSB7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+b3V0bG9jaywgZmxhZ3MpOwotCiAJCWlmICgoaGVhZCA9ICh1c2JoaWQtPm91dGhlYWQgKyAxKSAmIChISURfT1VUUFVUX0ZJRk9fU0laRSAtIDEpKSA9PSB1c2JoaWQtPm91dHRhaWwpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+b3V0bG9jaywgZmxhZ3MpOwogCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAib3V0cHV0IHF1ZXVlIGZ1bGxcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoIXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CiAJCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWVpbmcgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNDM4LDE1ICs1MTcsMTAgQEAKIAkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCiAJCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkKIAkJCQljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPmN0cmxsb2NrLCBmbGFncyk7Ci0KIAlpZiAoKGhlYWQgPSAodXNiaGlkLT5jdHJsaGVhZCArIDEpICYgKEhJRF9DT05UUk9MX0ZJRk9fU0laRSAtIDEpKSA9PSB1c2JoaWQtPmN0cmx0YWlsKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiY29udHJvbCBxdWV1ZSBmdWxsXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ1NCw3ICs1MjgsNiBAQAogCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKIAkJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAkJCWRldl93YXJuKCZoaWQtPmRldiwgImNvbnRyb2wgcXVldWVpbmcgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNDY3LDE1ICs1NDAsMjUgQEAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCiAJCWlmIChoaWRfc3VibWl0X2N0cmwoaGlkKSkKIAkJCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKK30KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKK3ZvaWQgdXNiaGlkX3N1Ym1pdF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdW5zaWduZWQgY2hhciBkaXIpCit7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKKwlfX3VzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBkaXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiaGlkX3N1Ym1pdF9yZXBvcnQpOwogCiBzdGF0aWMgaW50IHVzYl9oaWRpbnB1dF9pbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9mZnNldDsKIAogCWlmICh0eXBlID09IEVWX0ZGKQpAQCAtNDkwLDYgKzU3MywxNSBAQAogCX0KIAogCWhpZF9zZXRfZmllbGQoZmllbGQsIG9mZnNldCwgdmFsdWUpOworCWlmICh2YWx1ZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CisJCXVzYmhpZC0+bGVkY291bnQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOworCQl1c2JoaWQtPmxlZGNvdW50LS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOworCX0KIAl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIGZpZWxkLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKIAogCXJldHVybiAwOwpAQCAtNTM4LDE1ICs2MzAsMjIgQEAKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAlpbnQgcmVzOwogCisJbXV0ZXhfbG9jaygmaGlkX29wZW5fbXV0KTsKIAlpZiAoIWhpZC0+b3BlbisrKSB7CiAJCXJlcyA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSh1c2JoaWQtPmludGYpOworCQkvKiB0aGUgZGV2aWNlIG11c3QgYmUgYXdha2UgdG8gcmVsaWFibGUgcmVxdWVzdCByZW1vdGUgd2FrZXVwICovCiAJCWlmIChyZXMgPCAwKSB7CiAJCQloaWQtPm9wZW4tLTsKKwkJCW11dGV4X3VubG9jaygmaGlkX29wZW5fbXV0KTsKIAkJCXJldHVybiAtRUlPOwogCQl9CisJCXVzYmhpZC0+aW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CisJCWlmIChoaWRfc3RhcnRfaW4oaGlkKSkKKwkJCWhpZF9pb19lcnJvcihoaWQpOworIAorCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodXNiaGlkLT5pbnRmKTsKIAl9Ci0JaWYgKGhpZF9zdGFydF9pbihoaWQpKQotCQloaWRfaW9fZXJyb3IoaGlkKTsKKwltdXRleF91bmxvY2soJmhpZF9vcGVuX211dCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1NCwxMCArNjUzLDIyIEBACiB7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKKwltdXRleF9sb2NrKCZoaWRfb3Blbl9tdXQpOworCisJLyogcHJvdGVjdGluZyBoaWQtPm9wZW4gdG8gbWFrZSBzdXJlIHdlIGRvbid0IHJlc3RhcnQKKwkgKiBkYXRhIGFjcXVpc3Rpb24gZHVlIHRvIGEgcmVzdW1wdGlvbiB3ZSBubyBsb25nZXIKKwkgKiBjYXJlIGFib3V0CisJICovCisJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKIAlpZiAoIS0taGlkLT5vcGVuKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKIAkJdXNiX2tpbGxfdXJiKHVzYmhpZC0+dXJiaW4pOwotCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodXNiaGlkLT5pbnRmKTsKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJdXNiaGlkLT5pbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CiAJfQorCW11dGV4X3VubG9jaygmaGlkX29wZW5fbXV0KTsKIH0KIAogLyoKQEAgLTY4Nyw2ICs3OTgsMjUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB1c2JoaWRfcmVzdGFydF9xdWV1ZXMoc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCkKK3sKKwlpZiAodXNiaGlkLT51cmJvdXQpCisJCXVzYmhpZF9yZXN0YXJ0X291dF9xdWV1ZSh1c2JoaWQpOworCXVzYmhpZF9yZXN0YXJ0X2N0cmxfcXVldWUodXNiaGlkKTsKK30KKworc3RhdGljIHZvaWQgX191c2JoaWRfcmVzdGFydF9xdWV1ZXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYmhpZF9kZXZpY2UsIHJlc3RhcnRfd29yayk7CisJaW50IHI7CisKKwlyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHVzYmhpZC0+aW50Zik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm47CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHVzYmhpZC0+aW50Zik7Cit9CisKIHN0YXRpYyB2b2lkIGhpZF9mcmVlX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKQEAgLTcxMSw2ICs4NDEsOSBAQAogCXF1aXJrcyA9IHVzYmhpZF9sb29rdXBfcXVpcmsobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAorCWlmIChxdWlya3MgJiBISURfUVVJUktfSUdOT1JFKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIE1hbnkga2V5Ym9hcmRzIGFuZCBtaWNlIGRvbid0IGxpa2UgdG8gYmUgcG9sbGVkIGZvciByZXBvcnRzLAogCSAqIHNvIHdlIHdpbGwgYWx3YXlzIHNldCB0aGUgSElEX1FVSVJLX05PR0VUIGZsYWcgZm9yIHRoZW0uICovCiAJaWYgKGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gVVNCX0lOVEVSRkFDRV9TVUJDTEFTU19CT09UKSB7CkBAIC04NTAsMTEgKzk4MywxMSBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNiaGlkLT53YWl0KTsKIAlJTklUX1dPUksoJnVzYmhpZC0+cmVzZXRfd29yaywgaGlkX3Jlc2V0KTsKKwlJTklUX1dPUksoJnVzYmhpZC0+cmVzdGFydF93b3JrLCBfX3VzYmhpZF9yZXN0YXJ0X3F1ZXVlcyk7CiAJc2V0dXBfdGltZXIoJnVzYmhpZC0+aW9fcmV0cnksIGhpZF9yZXRyeV90aW1lb3V0LCAodW5zaWduZWQgbG9uZykgaGlkKTsKIAotCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmlubG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+b3V0bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+Y3RybGxvY2spOworCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmxvY2spOwogCiAJdXNiaGlkLT5pbnRmID0gaW50ZjsKIAl1c2JoaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CkBAIC05MDYsMTUgKzEwMzksMTQgQEAKIAkJcmV0dXJuOwogCiAJY2xlYXJfYml0KEhJRF9TVEFSVEVELCAmdXNiaGlkLT5pb2ZsKTsKLQlzcGluX2xvY2tfaXJxKCZ1c2JoaWQtPmlubG9jayk7CS8qIFN5bmMgd2l0aCBlcnJvciBoYW5kbGVyICovCisJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsJLyogU3luYyB3aXRoIGVycm9yIGhhbmRsZXIgKi8KIAlzZXRfYml0KEhJRF9ESVNDT05ORUNURUQsICZ1c2JoaWQtPmlvZmwpOwotCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5pbmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKIAl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJpbik7CiAJdXNiX2tpbGxfdXJiKHVzYmhpZC0+dXJib3V0KTsKIAl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJjdHJsKTsKIAotCWRlbF90aW1lcl9zeW5jKCZ1c2JoaWQtPmlvX3JldHJ5KTsKLQljYW5jZWxfd29ya19zeW5jKCZ1c2JoaWQtPnJlc2V0X3dvcmspOworCWhpZF9jYW5jZWxfZGVsYXllZF9zdHVmZih1c2JoaWQpOwogCiAJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQogCQloaWRpbnB1dF9kaXNjb25uZWN0KGhpZCk7CkBAIC05MzUsMTIgKzEwNjcsMjggQEAKIAloaWRfZnJlZV9idWZmZXJzKGhpZF90b191c2JfZGV2KGhpZCksIGhpZCk7CiB9CiAKK3N0YXRpYyBpbnQgdXNiaGlkX3Bvd2VyKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCBsdmwpCit7CisJaW50IHIgPSAwOworCisJc3dpdGNoIChsdmwpIHsKKwljYXNlIFBNX0hJTlRfRlVMTE9OOgorCQlyID0gdXNiaGlkX2dldF9wb3dlcihoaWQpOworCQlicmVhazsKKwljYXNlIFBNX0hJTlRfTk9STUFMOgorCQl1c2JoaWRfcHV0X3Bvd2VyKGhpZCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcjsKK30KKwogc3RhdGljIHN0cnVjdCBoaWRfbGxfZHJpdmVyIHVzYl9oaWRfZHJpdmVyID0gewogCS5wYXJzZSA9IHVzYmhpZF9wYXJzZSwKIAkuc3RhcnQgPSB1c2JoaWRfc3RhcnQsCiAJLnN0b3AgPSB1c2JoaWRfc3RvcCwKIAkub3BlbiA9IHVzYmhpZF9vcGVuLAogCS5jbG9zZSA9IHVzYmhpZF9jbG9zZSwKKwkucG93ZXIgPSB1c2JoaWRfcG93ZXIsCiAJLmhpZGlucHV0X2lucHV0X2V2ZW50ID0gdXNiX2hpZGlucHV0X2lucHV0X2V2ZW50LAogfTsKIApAQCAtMTA0OSwxOSArMTE5NywxMjYgQEAKIAlrZnJlZSh1c2JoaWQpOwogfQogCi1zdGF0aWMgaW50IGhpZF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyB2b2lkIGhpZF9jYW5jZWxfZGVsYXllZF9zdHVmZihzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlkZWxfdGltZXJfc3luYygmdXNiaGlkLT5pb19yZXRyeSk7CisJY2FuY2VsX3dvcmtfc3luYygmdXNiaGlkLT5yZXN0YXJ0X3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnVzYmhpZC0+cmVzZXRfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9jZWFzZV9pbyhzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQoreworCWRlbF90aW1lcigmdXNiaGlkLT5pb19yZXRyeSk7CisJdXNiX2tpbGxfdXJiKHVzYmhpZC0+dXJiaW4pOworCXVzYl9raWxsX3VyYih1c2JoaWQtPnVyYmN0cmwpOworCXVzYl9raWxsX3VyYih1c2JoaWQtPnVyYm91dCk7Cit9CisKKy8qIFRyZWF0IFVTQiByZXNldCBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyBzdXNwZW5kL3Jlc3VtZSAqLworc3RhdGljIGludCBoaWRfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCi0JaWYgKCF0ZXN0X2JpdChISURfU1RBUlRFRCwgJnVzYmhpZC0+aW9mbCkpCi0JCXJldHVybiAwOworCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CisJc2V0X2JpdChISURfUkVTRVRfUEVORElORywgJnVzYmhpZC0+aW9mbCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JoaWQtPmxvY2spOworCWNhbmNlbF93b3JrX3N5bmMoJnVzYmhpZC0+cmVzdGFydF93b3JrKTsKKwloaWRfY2Vhc2VfaW8odXNiaGlkKTsKIAotCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+aW5sb2NrKTsJLyogU3luYyB3aXRoIGVycm9yIGhhbmRsZXIgKi8KLQlzZXRfYml0KEhJRF9TVVNQRU5ERUQsICZ1c2JoaWQtPmlvZmwpOwotCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5pbmxvY2spOwotCWRlbF90aW1lcl9zeW5jKCZ1c2JoaWQtPmlvX3JldHJ5KTsKLQl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJpbik7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNhbWUgcm91dGluZSB1c2VkIGZvciBwb3N0X3Jlc2V0IGFuZCByZXNldF9yZXN1bWUgKi8KK3N0YXRpYyBpbnQgaGlkX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOworCWludCBzdGF0dXM7CisgCisJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwljbGVhcl9iaXQoSElEX1JFU0VUX1BFTkRJTkcsICZ1c2JoaWQtPmlvZmwpOworCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwloaWRfc2V0X2lkbGUoZGV2LCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwLCAwKTsKKwkvKiBGSVhNRTogQW55IG1vcmUgcmVpbml0aWFsaXphdGlvbiBuZWVkZWQ/ICovCisJc3RhdHVzID0gaGlkX3N0YXJ0X2luKGhpZCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWhpZF9pb19lcnJvcihoaWQpOworCXVzYmhpZF9yZXN0YXJ0X3F1ZXVlcyh1c2JoaWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JoaWRfZ2V0X3Bvd2VyKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CisgCisJcmV0dXJuIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSh1c2JoaWQtPmludGYpOworfQorCit2b2lkIHVzYmhpZF9wdXRfcG93ZXIoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKyAKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodXNiaGlkLT5pbnRmKTsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGhpZF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJaW50IHN0YXR1czsKKworCWlmICh1ZGV2LT5hdXRvX3BtKSB7CisJCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CS8qIFN5bmMgd2l0aCBlcnJvciBoYW5kbGVyICovCisJCWlmICghdGVzdF9iaXQoSElEX1JFU0VUX1BFTkRJTkcsICZ1c2JoaWQtPmlvZmwpCisJCSAgICAmJiAhdGVzdF9iaXQoSElEX0NMRUFSX0hBTFQsICZ1c2JoaWQtPmlvZmwpCisJCSAgICAmJiAhdGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKQorCQkgICAgJiYgIXRlc3RfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpCisJCSAgICAmJiAhdGVzdF9iaXQoSElEX0tFWVNfUFJFU1NFRCwgJnVzYmhpZC0+aW9mbCkKKwkJICAgICYmICghdXNiaGlkLT5sZWRjb3VudCB8fCBpZ25vcmVsZWQpKQorCQl7CisJCQlzZXRfYml0KEhJRF9SRVBPUlRFRF9JRExFLCAmdXNiaGlkLT5pb2ZsKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CisJCXNldF9iaXQoSElEX1JFUE9SVEVEX0lETEUsICZ1c2JoaWQtPmlvZmwpOworCQlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CisJCWlmICh1c2JoaWRfd2FpdF9pbyhoaWQpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCX0KKworCWlmICghaWdub3JlbGVkICYmIHVkZXYtPmF1dG9fcG0pIHsKKwkJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwkJaWYgKHRlc3RfYml0KEhJRF9MRURfT04sICZ1c2JoaWQtPmlvZmwpKSB7CisJCQlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CisJCQl1c2JoaWRfbWFya19idXN5KHVzYmhpZCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwl9CisKKwloaWRfY2FuY2VsX2RlbGF5ZWRfc3R1ZmYodXNiaGlkKTsKKwloaWRfY2Vhc2VfaW8odXNiaGlkKTsKKworCWlmICh1ZGV2LT5hdXRvX3BtICYmIHRlc3RfYml0KEhJRF9LRVlTX1BSRVNTRUQsICZ1c2JoaWQtPmlvZmwpKSB7CisJCS8qIGxvc3QgcmFjZSBhZ2FpbnN0IGtleXByZXNzZXMgKi8KKwkJc3RhdHVzID0gaGlkX3N0YXJ0X2luKGhpZCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJaGlkX2lvX2Vycm9yKGhpZCk7CisJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAic3VzcGVuZFxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDc1LDMyICsxMzMwLDMzIEBACiAJaWYgKCF0ZXN0X2JpdChISURfU1RBUlRFRCwgJnVzYmhpZC0+aW9mbCkpCiAJCXJldHVybiAwOwogCi0JY2xlYXJfYml0KEhJRF9TVVNQRU5ERUQsICZ1c2JoaWQtPmlvZmwpOworCWNsZWFyX2JpdChISURfUkVQT1JURURfSURMRSwgJnVzYmhpZC0+aW9mbCk7CisJdXNiaGlkX21hcmtfYnVzeSh1c2JoaWQpOworCisJaWYgKHRlc3RfYml0KEhJRF9DTEVBUl9IQUxULCAmdXNiaGlkLT5pb2ZsKSB8fAorCSAgICB0ZXN0X2JpdChISURfUkVTRVRfUEVORElORywgJnVzYmhpZC0+aW9mbCkpCisJCXNjaGVkdWxlX3dvcmsoJnVzYmhpZC0+cmVzZXRfd29yayk7CiAJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7CiAJc3RhdHVzID0gaGlkX3N0YXJ0X2luKGhpZCk7Ci0JZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQorCWlmIChzdGF0dXMgPCAwKQorCQloaWRfaW9fZXJyb3IoaGlkKTsKKwl1c2JoaWRfcmVzdGFydF9xdWV1ZXModXNiaGlkKTsKIAotLyogVHJlYXQgVVNCIHJlc2V0IHByZXR0eSBtdWNoIHRoZSBzYW1lIGFzIHN1c3BlbmQvcmVzdW1lICovCi1zdGF0aWMgaW50IGhpZF9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0JLyogRklYTUU6IFdoYXQgaWYgdGhlIGludGVyZmFjZSBpcyBhbHJlYWR5IHN1c3BlbmRlZD8gKi8KLQloaWRfc3VzcGVuZChpbnRmLCBQTVNHX09OKTsKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICJyZXN1bWUgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCXJldHVybiAwOwogfQogCi0vKiBTYW1lIHJvdXRpbmUgdXNlZCBmb3IgcG9zdF9yZXNldCBhbmQgcmVzZXRfcmVzdW1lICovCi1zdGF0aWMgaW50IGhpZF9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIGludCBoaWRfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAotCWhpZF9zZXRfaWRsZShkZXYsIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDAsIDApOwotCS8qIEZJWE1FOiBBbnkgbW9yZSByZWluaXRpYWxpemF0aW9uIG5lZWRlZD8gKi8KLQotCXJldHVybiBoaWRfcmVzdW1lKGludGYpOworCWNsZWFyX2JpdChISURfUkVQT1JURURfSURMRSwgJnVzYmhpZC0+aW9mbCk7CisJcmV0dXJuIGhpZF9wb3N0X3Jlc2V0KGludGYpOwogfQogCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoaWRfdXNiX2lkcyBbXSA9IHsKIAl7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTLAogCQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0lOVEVSRkFDRV9DTEFTU19ISUQgfSwKQEAgLTExMTMsOSArMTM2OSwxMSBAQAogCS5uYW1lID0JCSJ1c2JoaWQiLAogCS5wcm9iZSA9CWhpZF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CWhpZF9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kID0JaGlkX3N1c3BlbmQsCiAJLnJlc3VtZSA9CWhpZF9yZXN1bWUsCi0JLnJlc2V0X3Jlc3VtZSA9CWhpZF9wb3N0X3Jlc2V0LAorCS5yZXNldF9yZXN1bWUgPQloaWRfcmVzZXRfcmVzdW1lLAorI2VuZGlmCiAJLnByZV9yZXNldCA9CWhpZF9wcmVfcmVzZXQsCiAJLnBvc3RfcmVzZXQgPQloaWRfcG9zdF9yZXNldCwKIAkuaWRfdGFibGUgPQloaWRfdXNiX2lkcywKQEAgLTExMzQsNyArMTM5MiwxMSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBoaWRfaW5pdCh2b2lkKQogewotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlyZXN1bXB0aW9uX3dha2VyID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJ1c2JoaWRfcmVzdW1lciIpOworCWlmICghcmVzdW1wdGlvbl93YWtlcikKKwkJZ290byBub19xdWV1ZTsKIAlyZXR2YWwgPSBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZoaWRfdXNiX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBoaWRfcmVnaXN0ZXJfZmFpbDsKQEAgLTExNTgsNiArMTQyMCw4IEBACiB1c2JoaWRfcXVpcmtzX2luaXRfZmFpbDoKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmhpZF91c2JfZHJpdmVyKTsKIGhpZF9yZWdpc3Rlcl9mYWlsOgorCWRlc3Ryb3lfd29ya3F1ZXVlKHJlc3VtcHRpb25fd2FrZXIpOworbm9fcXVldWU6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTE2Nyw2ICsxNDMxLDcgQEAKIAloaWRkZXZfZXhpdCgpOwogCXVzYmhpZF9xdWlya3NfZXhpdCgpOwogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmaGlkX3VzYl9kcml2ZXIpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHJlc3VtcHRpb25fd2FrZXIpOwogfQogCiBtb2R1bGVfaW5pdChoaWRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKaW5kZXggYWEyMTQxNy4uZTliNDM2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwpAQCAtMjQ2LDEwICsyNDYsMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5oaWRkZXYtPmxpc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCEtLWxpc3QtPmhpZGRldi0+b3BlbikgewotCQlpZiAobGlzdC0+aGlkZGV2LT5leGlzdCkKKwkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKIAkJCXVzYmhpZF9jbG9zZShsaXN0LT5oaWRkZXYtPmhpZCk7Ci0JCWVsc2UKKwkJCXVzYmhpZF9wdXRfcG93ZXIobGlzdC0+aGlkZGV2LT5oaWQpOworCQl9IGVsc2UgewogCQkJa2ZyZWUobGlzdC0+aGlkZGV2KTsKKwkJfQogCX0KIAogCWtmcmVlKGxpc3QpOwpAQCAtMzAwLDYgKzMwMiwxNyBAQAogCWxpc3RfYWRkX3RhaWwoJmxpc3QtPm5vZGUsICZoaWRkZXZfdGFibGVbaV0tPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycSgmbGlzdC0+aGlkZGV2LT5saXN0X2xvY2spOwogCisJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykKKwkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKKwkJCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBoaWRkZXZfdGFibGVbaV0tPmhpZDsKKwkJCXJlcyA9IHVzYmhpZF9nZXRfcG93ZXIoaGlkKTsKKwkJCWlmIChyZXMgPCAwKSB7CisJCQkJcmVzID0gLUVJTzsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQl1c2JoaWRfb3BlbihoaWQpOworCQl9CisKIAlyZXR1cm4gMDsKIGJhaWw6CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKQEAgLTg3NSwxNiArODg4LDIxIEBACiAJaGlkZGV2LT5oaWQgPSBoaWQ7CiAJaGlkZGV2LT5leGlzdCA9IDE7CiAKKwkvKiB3aGVuIGxvY2tfa2VybmVsKCkgdXNhZ2UgaXMgZml4ZWQgaW4gdXNiX29wZW4oKSwKKwkgKiB3ZSBjb3VsZCBhbHNvIGZpeCBpdCBoZXJlICovCisJbG9ja19rZXJuZWwoKTsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KHVzYmhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CiAJaWYgKHJldHZhbCkgewogCQllcnJfaGlkKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CiAJCWhpZC0+aGlkZGV2ID0gTlVMTDsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZShoaWRkZXYpOwogCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKIAkJaGlkLT5taW5vciA9IHVzYmhpZC0+aW50Zi0+bWlub3I7CiAJCWhpZGRldl90YWJsZVt1c2JoaWQtPmludGYtPm1pbm9yIC0gSElEREVWX01JTk9SX0JBU0VdID0gaGlkZGV2OwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaCBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaAppbmRleCA5ZWIzMDU2Li4wOGY1MDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCkBAIC0zOCw3ICszOCwxMCBAQAogdm9pZCB1c2JoaWRfY2xvc2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiBpbnQgdXNiaGlkX29wZW4oc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiB2b2lkIHVzYmhpZF9pbml0X3JlcG9ydHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7Ci12b2lkIHVzYmhpZF9zdWJtaXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHVuc2lnbmVkIGNoYXIgZGlyKTsKK3ZvaWQgdXNiaGlkX3N1Ym1pdF9yZXBvcnQKKyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcik7CitpbnQgdXNiaGlkX2dldF9wb3dlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3ZvaWQgdXNiaGlkX3B1dF9wb3dlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKIAogLyogaW9mbCBmbGFncyAqLwogI2RlZmluZSBISURfQ1RSTF9SVU5OSU5HCTEKQEAgLTQ5LDYgKzUyLDkgQEAKICNkZWZpbmUgSElEX0NMRUFSX0hBTFQJCTYKICNkZWZpbmUgSElEX0RJU0NPTk5FQ1RFRAk3CiAjZGVmaW5lIEhJRF9TVEFSVEVECQk4CisjZGVmaW5lIEhJRF9SRVBPUlRFRF9JRExFCTkKKyNkZWZpbmUgSElEX0tFWVNfUFJFU1NFRAkxMAorI2RlZmluZSBISURfTEVEX09OCQkxMQogCiAvKgogICogVVNCLXNwZWNpZmljIEhJRCBzdHJ1Y3QsIHRvIGJlIHBvaW50ZWQgdG8KQEAgLTY2LDcgKzcyLDYgQEAKIAlzdHJ1Y3QgdXJiICp1cmJpbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgVVJCICovCiAJY2hhciAqaW5idWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGJ1ZmZlciAqLwogCWRtYV9hZGRyX3QgaW5idWZfZG1hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBidWZmZXIgZG1hICovCi0Jc3BpbmxvY2tfdCBpbmxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGZpZm8gc3BpbmxvY2sgKi8KIAogCXN0cnVjdCB1cmIgKnVyYmN0cmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIFVSQiAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIHJlcXVlc3Qgc3RydWN0ICovCkBAIC03NSwyMSArODAsMjIgQEAKIAl1bnNpZ25lZCBjaGFyIGN0cmxoZWFkLCBjdHJsdGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBmaWZvIGhlYWQgJiB0YWlsICovCiAJY2hhciAqY3RybGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBjdHJsYnVmX2RtYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgYnVmZmVyIGRtYSAqLwotCXNwaW5sb2NrX3QgY3RybGxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGZpZm8gc3BpbmxvY2sgKi8KIAogCXN0cnVjdCB1cmIgKnVyYm91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgVVJCICovCiAJc3RydWN0IGhpZF9vdXRwdXRfZmlmbyBvdXRbSElEX0NPTlRST0xfRklGT19TSVpFXTsgICAgICAgICAgICAgIC8qIE91dHB1dCBwaXBlIGZpZm8gKi8KIAl1bnNpZ25lZCBjaGFyIG91dGhlYWQsIG91dHRhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IHBpcGUgZmlmbyBoZWFkICYgdGFpbCAqLwogCWNoYXIgKm91dGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBvdXRidWZfZG1hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgZG1hICovCi0Jc3BpbmxvY2tfdCBvdXRsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBmaWZvIHNwaW5sb2NrICovCiAKKwlzcGlubG9ja190IGxvY2s7CQkJCQkJLyogZmlmbyBzcGlubG9jayAqLwogCXVuc2lnbmVkIGxvbmcgaW9mbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJL08gZmxhZ3MgKENUUkxfUlVOTklORywgT1VUX1JVTk5JTkcpICovCiAJc3RydWN0IHRpbWVyX2xpc3QgaW9fcmV0cnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHJ5IHRpbWVyICovCiAJdW5zaWduZWQgbG9uZyBzdG9wX3JldHJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgdG8gZ2l2ZSB1cCwgaW4gamlmZmllcyAqLwogCXVuc2lnbmVkIGludCByZXRyeV9kZWxheTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBsZW5ndGggaW4gbXMgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFzayBjb250ZXh0IGZvciByZXNldHMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydF93b3JrOwkJCQkvKiB3YWtpbmcgdXAgZm9yIG91dHB1dCB0byBiZSBkb25lIGluIGEgdGFzayAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CQkJCQkJLyogRm9yIHNsZWVwaW5nICovCisJaW50IGxlZGNvdW50OwkJCQkJCQkvKiBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBsZWRzICovCiB9OwogCiAjZGVmaW5lCWhpZF90b191c2JfZGV2KGhpZF9kZXYpIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZjc1Mzc1cy5jIGIvZHJpdmVycy9od21vbi9mNzUzNzVzLmMKaW5kZXggMThhMWJhOC4uZTIxMDdlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mNzUzNzVzLmMKKysrIGIvZHJpdmVycy9od21vbi9mNzUzNzVzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogZjc1Mzc1cy5jIC0gZHJpdmVyIGZvciB0aGUgRmludGVrIEY3NTM3NS9TUCBhbmQgRjc1MzczCiAgKiAgICAgICAgICAgICBoYXJkd2FyZSBtb25pdG9yaW5nIGZlYXR1cmVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyAgUmlrdSBWb2lwaW8gPHJpa3Uudm9pcGlvQG1vdmlhbC5maT4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3ICBSaWt1IFZvaXBpbwogICoKICAqIERhdGFzaGVldHMgYXZhaWxhYmxlIGF0OgogICoKQEAgLTcyMSw3ICs3MjEsNyBAQAogCWkyY19kZWxfZHJpdmVyKCZmNzUzNzVfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiUmlrdSBWb2lwaW8gPHJpa3Uudm9pcGlvQG1vdmlhbC5maT4iKTsKK01PRFVMRV9BVVRIT1IoIlJpa3UgVm9pcGlvIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkY3NTM3My9GNzUzNzUgaGFyZHdhcmUgbW9uaXRvcmluZyBkcml2ZXIiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9LY29uZmlnCmluZGV4IDVmOWQ4NjAuLmNkNTBjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L0tjb25maWcKQEAgLTE0Myw3ICsxNDMsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VzcGVuZCBrZXkgZXZlbnRzIHRvIHRyaWdnZXIgYSB1c2VyCiAJICByZXF1ZXN0ZWQgc3VzcGVuZCB0aHJvdWdoIEFQTS4gVGhpcyBpcyB1c2VmdWwgb24gZW1iZWRkZWQKLQkgIHN5c3RlbXMgd2hlcmUgc3VjaCBiZWh2aW91ciBpcyBkZXNpcmVkIHdpdGhvdXQgdXNlcnNwYWNlCisJICBzeXN0ZW1zIHdoZXJlIHN1Y2ggYmVoYXZpb3VyIGlzIGRlc2lyZWQgd2l0aG91dCB1c2Vyc3BhY2UKIAkgIGludGVyYWN0aW9uLiBJZiB1bnN1cmUsIHNheSBOLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZ3Bpb19tb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ncGlvX21vdXNlLmMKaW5kZXggMGRiOGQxNi4uNWU1ZWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9ncGlvX21vdXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ncGlvX21vdXNlLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoKICAqIFRpbWVyIGZ1bmN0aW9uIHdoaWNoIGlzIHJ1biBldmVyeSBzY2FuX21zIG1zIHdoZW4gdGhlIGRldmljZSBpcyBvcGVuZWQuCi0gKiBUaGUgZGV2IGlucHV0IHZhcmFpYmxlIGlzIHNldCB0byB0aGUgdGhlIGlucHV0X2RldiBwb2ludGVyLgorICogVGhlIGRldiBpbnB1dCB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHRoZSBpbnB1dF9kZXYgcG9pbnRlci4KICAqLwogc3RhdGljIHZvaWQgZ3Bpb19tb3VzZV9zY2FuKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCmluZGV4IDgxZTZlYmYuLjU1Y2QwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAogc3RhdGljIHZvaWQgaGdwa19yZWNhbGliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKncgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqdyA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBoZ3BrX2RhdGEsIHJlY2FsaWJfd3EpOwogCXN0cnVjdCBwc21vdXNlICpwc21vdXNlID0gcHJpdi0+cHNtb3VzZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCA3YzI3YzhiLi4wNTZhYzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgbmFtZSAjIyBfc2hvdywgTlVMTCk7CiAKIAotLyogU3lzZnMgY29udmVudGlvbnMgcmVwb3J0IHRlbXBlcmF0dXJlcyBpbiBtaWxsaWRlZ3JlZXMgQ2VsY2l1cy4KKy8qIFN5c2ZzIGNvbnZlbnRpb25zIHJlcG9ydCB0ZW1wZXJhdHVyZXMgaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMuCiAgKiBBRFM3ODQ2IGNvdWxkIHVzZSB0aGUgbG93LWFjY3VyYWN5IHR3by1zYW1wbGUgc2NoZW1lLCBidXQgY2FuJ3QgZG8gdGhlIGhpZ2gKICAqIGFjY3VyYWN5IHNjaGVtZSB3aXRob3V0IGNhbGlicmF0aW9uIGRhdGEuICBGb3Igbm93IHdlIHdvbid0IHRyeSBlaXRoZXI7CiAgKiB1c2Vyc3BhY2Ugc2VlcyByYXcgc2Vuc29yIHZhbHVlcywgYW5kIG11c3Qgc2NhbGUvY2FsaWJyYXRlIGFwcHJvcHJpYXRlbHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9tSVNETi9LY29uZmlnCmluZGV4IDQ5MzgzNTUuLjE3NDdhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9LY29uZmlnCkBAIC0xNCwxMyArMTQsMTUgQEAKIAlkZXBlbmRzIG9uIE1JU0ROCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGRpZ2l0YWwgYXVkaW8gcHJvY2Vzc2luZyBjYXBhYmlsaXR5LgorCiAJICBUaGlzIG1vZHVsZSBtYXkgYmUgdXNlZCBmb3Igc3BlY2lhbCBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlCi0JICBjcm9zcyBjb25uZWN0aW5nIG9mIGJjaGFubmVscywgY29uZmVyZW5jaW5nLCBkdG1mIGRlY29kaW5nCisJICBjcm9zcyBjb25uZWN0aW5nIG9mIGJjaGFubmVscywgY29uZmVyZW5jaW5nLCBkdG1mIGRlY29kaW5nLAogCSAgZWNobyBjYW5jZWxhdGlvbiwgdG9uZSBnZW5lcmF0aW9uLCBhbmQgQmxvd2Zpc2ggZW5jcnlwdGlvbiBhbmQKLQkgIGRlY3J5cHRpb24uCi0JICBJdCBtYXkgdXNlIGhhcmR3YXJlIGZlYXR1cmVzIGlmIGF2YWlsYWJsZS4KKwkgIGRlY3J5cHRpb24uIEl0IG1heSB1c2UgaGFyZHdhcmUgZmVhdHVyZXMgaWYgYXZhaWxhYmxlLgorCiAJICBFLmcuIGl0IGlzIHJlcXVpcmVkIGZvciBQQlg0TGludXguIEdvIHRvIGh0dHA6Ly9pc2RuLmV2ZXJzYmVyZy5ldQotCSAgYW5kIGdldCBtb3JlIGluZm9ybWF0aW9ucyBhYm91dCB0aGlzIG1vZHVsZSBhbmQgaXQncyB1c2FnZS4KKwkgIGFuZCBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG1vZHVsZSBhbmQgaXRzIHVzYWdlLgorCiAJICBJZiB1bnN1cmUsIHNheSAnTicuCiAKIGNvbmZpZyBNSVNETl9MMU9JUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvZGVjLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29kZWMuYwppbmRleCAyZWM0YjI4Li5lNGVjYmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29kZWMuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29kZWMuYwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJLyogYWxsb2MgY29udmVyc2lvbiB0YWJsZXMgKi8KIAl0YWJsZV9jb20gPSB2bWFsbG9jKDY1NTM2KTsKIAl0YWJsZV9kZWMgPSB2bWFsbG9jKDUxMik7Ci0JaWYgKCF0YWJsZV9jb20gfCAhdGFibGVfZGVjKSB7CisJaWYgKCF0YWJsZV9jb20gfHwgIXRhYmxlX2RlYykgewogCQlsMW9pcF80Yml0X2ZyZWUoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCA1NTZhZWNhLi5kOWRiMTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciB0aGUgSFAgSm9ybmFkYSA2eHgiCiAJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIFNIX0hQNlhYCiAJaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBsZWQgc3VwcG9ydCBmb3IgdGhlIGhhbmRoZWxkCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIExFRCBzdXBwb3J0IGZvciB0aGUgaGFuZGhlbGQKIAkgIEhQIEpvcm5hZGEgNjIwLzY2MC82ODAvNjkwLgogCiBjb25maWcgTEVEU19QQ0E5NTMyCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgSTJDICYmIElOUFVUICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgTlhQIHBjYTk1MzIKLQkgIGxlZCBjb250cm9sbGVyLiBJdCBpcyBnZW5lcmFsbHkgb25seSB1c2VmdWxsCisJICBMRUQgY29udHJvbGxlci4gSXQgaXMgZ2VuZXJhbGx5IG9ubHkgdXNlZnVsCiAJICBhcyBhIHBsYXRmb3JtIGRyaXZlcgogCiBjb25maWcgTEVEU19HUElPCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAkgIAlQb3NpdGl2byBNb2JpbGUgKENsZXZvIE01eDBWKQogCiAJICBJZiB5b3VyIG1vZGVsIGlzIG5vdCBsaXN0ZWQgaGVyZSB5b3UgY2FuIHRyeSB0aGUgIm5vZGV0ZWN0IgotCSAgbW9kdWxlIHBhcmFtdGVyLgorCSAgbW9kdWxlIHBhcmFtZXRlci4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGVkcy1jbGV2by1tYWlsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCmluZGV4IDc2ZWM3NDkuLmJkM2I0MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogcGNhOTUzMi5jIC0gMTYtYml0IExlZCBkaW1tZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggUmlrdSBWb2lwaW8gPHJpa3Uudm9pcGlvQG1vdmlhbC5maT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBSaWt1IFZvaXBpbwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJaTJjX2RlbF9kcml2ZXIoJnBjYTk1MzJfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiUmlrdSBWb2lwaW8gPHJpa3Uudm9pcGlvQG1vdmlhbC5maT4iKTsKK01PRFVMRV9BVVRIT1IoIlJpa3UgVm9pcGlvIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBDQSA5NTMyIExFRCBkaW1tZXIiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9LY29uZmlnIGIvZHJpdmVycy9tZC9LY29uZmlnCmluZGV4IDIyODFiNTAuLjM2ZTA2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvS2NvbmZpZworKysgYi9kcml2ZXJzL21kL0tjb25maWcKQEAgLTEyMSw2ICsxMjEsNyBAQAogY29uZmlnIE1EX1JBSUQ0NTYKIAl0cmlzdGF0ZSAiUkFJRC00L1JBSUQtNS9SQUlELTYgbW9kZSIKIAlkZXBlbmRzIG9uIEJMS19ERVZfTUQKKwlzZWxlY3QgTURfUkFJRDZfUFEKIAlzZWxlY3QgQVNZTkNfTUVNQ1BZCiAJc2VsZWN0IEFTWU5DX1hPUgogCS0tLWhlbHAtLS0KQEAgLTE1MSwzNCArMTUyLDggQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAotY29uZmlnIE1EX1JBSUQ1X1JFU0hBUEUKLQlib29sICJTdXBwb3J0IGFkZGluZyBkcml2ZXMgdG8gYSByYWlkLTUgYXJyYXkiCi0JZGVwZW5kcyBvbiBNRF9SQUlENDU2Ci0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgQSBSQUlELTUgc2V0IGNhbiBiZSBleHBhbmRlZCBieSBhZGRpbmcgZXh0cmEgZHJpdmVzLiBUaGlzCi0JICByZXF1aXJlcyAicmVzdHJpcGluZyIgdGhlIGFycmF5IHdoaWNoIG1lYW5zIChhbG1vc3QpIGV2ZXJ5Ci0JICBibG9jayBtdXN0IGJlIHdyaXR0ZW4gdG8gYSBkaWZmZXJlbnQgcGxhY2UuCi0KLSAgICAgICAgICBUaGlzIG9wdGlvbiBhbGxvd3Mgc3VjaCByZXN0cmlwaW5nIHRvIGJlIGRvbmUgd2hpbGUgdGhlIGFycmF5Ci0JICBpcyBvbmxpbmUuCi0KLQkgIFlvdSB3aWxsIG5lZWQgbWRhZG0gdmVyc2lvbiAyLjQuMSBvciBsYXRlciB0byB1c2UgdGhpcwotCSAgZmVhdHVyZSBzYWZlbHkuICBEdXJpbmcgdGhlIGVhcmx5IHN0YWdlIG9mIHJlc2hhcGUgdGhlcmUgaXMKLQkgIGEgY3JpdGljYWwgc2VjdGlvbiB3aGVyZSBsaXZlIGRhdGEgaXMgYmVpbmcgb3Zlci13cml0dGVuLiAgQQotCSAgY3Jhc2ggZHVyaW5nIHRoaXMgdGltZSBuZWVkcyBleHRyYSBjYXJlIGZvciByZWNvdmVyeS4gIFRoZQotCSAgbmV3ZXIgbWRhZG0gdGFrZXMgYSBjb3B5IG9mIHRoZSBkYXRhIGluIHRoZSBjcml0aWNhbCBzZWN0aW9uCi0JICBhbmQgd2lsbCByZXN0b3JlIGl0LCBpZiBuZWNlc3NhcnksIGFmdGVyIGEgY3Jhc2guCi0KLQkgIFRoZSBtZGFkbSB1c2FnZSBpcyBlLmcuCi0JICAgICAgIG1kYWRtIC0tZ3JvdyAvZGV2L21kMSAtLXJhaWQtZGlza3M9NgotCSAgdG8gZ3JvdyAnL2Rldi9tZDEnIHRvIGhhdmluZyA2IGRpc2tzLgotCi0JICBOb3RlOiBUaGUgYXJyYXkgY2FuIG9ubHkgYmUgZXhwYW5kZWQsIG5vdCBjb250cmFjdGVkLgotCSAgVGhlcmUgc2hvdWxkIGJlIGVub3VnaCBzcGFyZXMgYWxyZWFkeSBwcmVzZW50IHRvIG1ha2UgdGhlIG5ldwotCSAgYXJyYXkgd29ya2FibGUuCi0KLQkgIElmIHVuc3VyZSwgc2F5IFkuCitjb25maWcgTURfUkFJRDZfUFEKKwl0cmlzdGF0ZQogCiBjb25maWcgTURfTVVMVElQQVRICiAJdHJpc3RhdGUgIk11bHRpcGF0aCBJL08gc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IDcyODgwYjcuLjQ1Y2M1OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtMiwyMCArMiwyMSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBzb2Z0d2FyZSBSQUlEIGFuZCBMVk0gZHJpdmVycy4KICMKIAotZG0tbW9kLW9ianMJOj0gZG0ubyBkbS10YWJsZS5vIGRtLXRhcmdldC5vIGRtLWxpbmVhci5vIGRtLXN0cmlwZS5vIFwKK2RtLW1vZC15CSs9IGRtLm8gZG0tdGFibGUubyBkbS10YXJnZXQubyBkbS1saW5lYXIubyBkbS1zdHJpcGUubyBcCiAJCSAgIGRtLWlvY3RsLm8gZG0taW8ubyBkbS1rY29weWQubyBkbS1zeXNmcy5vCi1kbS1tdWx0aXBhdGgtb2JqcyA6PSBkbS1wYXRoLXNlbGVjdG9yLm8gZG0tbXBhdGgubwotZG0tc25hcHNob3Qtb2JqcyA6PSBkbS1zbmFwLm8gZG0tZXhjZXB0aW9uLXN0b3JlLm8gZG0tc25hcC10cmFuc2llbnQubyBcCitkbS1tdWx0aXBhdGgteQkrPSBkbS1wYXRoLXNlbGVjdG9yLm8gZG0tbXBhdGgubworZG0tc25hcHNob3QteQkrPSBkbS1zbmFwLm8gZG0tZXhjZXB0aW9uLXN0b3JlLm8gZG0tc25hcC10cmFuc2llbnQubyBcCiAJCSAgICBkbS1zbmFwLXBlcnNpc3RlbnQubwotZG0tbWlycm9yLW9ianMJOj0gZG0tcmFpZDEubwotbWQtbW9kLW9ianMgICAgIDo9IG1kLm8gYml0bWFwLm8KLXJhaWQ0NTYtb2Jqcwk6PSByYWlkNS5vIHJhaWQ2YWxnb3MubyByYWlkNnJlY292Lm8gcmFpZDZ0YWJsZXMubyBcCitkbS1taXJyb3IteQkrPSBkbS1yYWlkMS5vCittZC1tb2QteQkrPSBtZC5vIGJpdG1hcC5vCityYWlkNDU2LXkJKz0gcmFpZDUubworcmFpZDZfcHEteQkrPSByYWlkNmFsZ29zLm8gcmFpZDZyZWNvdi5vIHJhaWQ2dGFibGVzLm8gXAogCQkgICByYWlkNmludDEubyByYWlkNmludDIubyByYWlkNmludDQubyBcCiAJCSAgIHJhaWQ2aW50OC5vIHJhaWQ2aW50MTYubyByYWlkNmludDMyLm8gXAogCQkgICByYWlkNmFsdGl2ZWMxLm8gcmFpZDZhbHRpdmVjMi5vIHJhaWQ2YWx0aXZlYzQubyBcCiAJCSAgIHJhaWQ2YWx0aXZlYzgubyBcCiAJCSAgIHJhaWQ2bW14Lm8gcmFpZDZzc2UxLm8gcmFpZDZzc2UyLm8KLWhvc3Rwcm9ncy15CTo9IG1rdGFibGVzCitob3N0cHJvZ3MteQkrPSBta3RhYmxlcwogCiAjIE5vdGU6IGxpbmsgb3JkZXIgaXMgaW1wb3J0YW50LiAgQWxsIHJhaWQgcGVyc29uYWxpdGllcwogIyBhbmQgbXVzdCBjb21lIGJlZm9yZSBtZC5vLCBhcyB0aGV5IGVhY2ggaW5pdGlhbGlzZSAKQEAgLTI2LDYgKzI3LDcgQEAKIG9iai0kKENPTkZJR19NRF9SQUlEMCkJCSs9IHJhaWQwLm8KIG9iai0kKENPTkZJR19NRF9SQUlEMSkJCSs9IHJhaWQxLm8KIG9iai0kKENPTkZJR19NRF9SQUlEMTApCQkrPSByYWlkMTAubworb2JqLSQoQ09ORklHX01EX1JBSUQ2X1BRKQkrPSByYWlkNl9wcS5vCiBvYmotJChDT05GSUdfTURfUkFJRDQ1NikJKz0gcmFpZDQ1Ni5vCiBvYmotJChDT05GSUdfTURfTVVMVElQQVRIKQkrPSBtdWx0aXBhdGgubwogb2JqLSQoQ09ORklHX01EX0ZBVUxUWSkJCSs9IGZhdWx0eS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCA3MTk5NDM3Li5mOGE5ZjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTE2LDYgKzE2LDcgQEAKICAqIHdhaXQgaWYgY291bnQgZ2V0cyB0b28gaGlnaCwgd2FrZSB3aGVuIGl0IGRyb3BzIHRvIGhhbGYuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMjYsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJiaXRtYXAuaCIKIAogLyogZGVidWcgbWFjcm9zICovCiAKQEAgLTExMSw5ICsxMTIsMTAgQEAKIAl1bnNpZ25lZCBjaGFyICptYXBwYWdlOwogCiAJaWYgKHBhZ2UgPj0gYml0bWFwLT5wYWdlcykgewotCQlwcmludGsoS0VSTl9BTEVSVAotCQkJIiVzOiBpbnZhbGlkIGJpdG1hcCBwYWdlIHJlcXVlc3Q6ICVsdSAoPiAlbHUpXG4iLAotCQkJYm1uYW1lKGJpdG1hcCksIHBhZ2UsIGJpdG1hcC0+cGFnZXMtMSk7CisJCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiBiaXRtYXBfc3RhcnRfc3luYyBnb2VzIGJleW9uZAorCQkgKiBFbmQtb2YtZGV2aWNlIHdoaWxlIGxvb2tpbmcgZm9yIGEgd2hvbGUgcGFnZS4KKwkJICogSXQgaXMgaGFybWxlc3MuCisJCSAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI2NSw3ICsyNjcsNiBAQAogCWxpc3RfZm9yX2VhY2hfY29udGludWVfcmN1KHBvcywgJm1kZGV2LT5kaXNrcykgewogCQlyZGV2ID0gbGlzdF9lbnRyeShwb3MsIG1ka19yZGV2X3QsIHNhbWVfc2V0KTsKIAkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCi0JCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpICYmCiAJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQkvKiB0aGlzIGlzIGEgdXNhYmxlIGRldmljZXMgKi8KIAkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOwpAQCAtMjk3LDcgKzI5OCw3IEBACiAJCQkJICAgICsgc2l6ZS81MTIgPiAwKQogCQkJCQkvKiBiaXRtYXAgcnVucyBpbiB0byBtZXRhZGF0YSAqLwogCQkJCQlnb3RvIGJhZF9hbGlnbm1lbnQ7Ci0JCQkJaWYgKHJkZXYtPmRhdGFfb2Zmc2V0ICsgbWRkZXYtPnNpemUqMgorCQkJCWlmIChyZGV2LT5kYXRhX29mZnNldCArIG1kZGV2LT5kZXZfc2VjdG9ycwogCQkJCSAgICA+IHJkZXYtPnNiX3N0YXJ0ICsgYml0bWFwLT5vZmZzZXQpCiAJCQkJCS8qIGRhdGEgcnVucyBpbiB0byBiaXRtYXAgKi8KIAkJCQkJZ290byBiYWRfYWxpZ25tZW50OwpAQCAtNTcwLDcgKzU3MSw3IEBACiAJZWxzZSBpZiAobGUzMl90b19jcHUoc2ItPnZlcnNpb24pIDwgQklUTUFQX01BSk9SX0xPIHx8CiAJCSBsZTMyX3RvX2NwdShzYi0+dmVyc2lvbikgPiBCSVRNQVBfTUFKT1JfSEkpCiAJCXJlYXNvbiA9ICJ1bnJlY29nbml6ZWQgc3VwZXJibG9jayB2ZXJzaW9uIjsKLQllbHNlIGlmIChjaHVua3NpemUgPCBQQUdFX1NJWkUpCisJZWxzZSBpZiAoY2h1bmtzaXplIDwgNTEyKQogCQlyZWFzb24gPSAiYml0bWFwIGNodW5rc2l6ZSB0b28gc21hbGwiOwogCWVsc2UgaWYgKCgxIDw8IGZmeih+Y2h1bmtzaXplKSkgIT0gY2h1bmtzaXplKQogCQlyZWFzb24gPSAiYml0bWFwIGNodW5rc2l6ZSBub3QgYSBwb3dlciBvZiAyIjsKQEAgLTEzMDYsNiArMTMwNyw5IEBACiAJCVBSSU5USyhLRVJOX0RFQlVHICJkZWMgd3JpdGUtYmVoaW5kIGNvdW50ICVkLyVkXG4iLAogCQkgIGF0b21pY19yZWFkKCZiaXRtYXAtPmJlaGluZF93cml0ZXMpLCBiaXRtYXAtPm1heF93cml0ZV9iZWhpbmQpOwogCX0KKwlpZiAoYml0bWFwLT5tZGRldi0+ZGVncmFkZWQpCisJCS8qIE5ldmVyIGNsZWFyIGJpdHMgb3IgdXBkYXRlIGV2ZW50c19jbGVhcmVkIHdoZW4gZGVncmFkZWQgKi8KKwkJc3VjY2VzcyA9IDA7CiAKIAl3aGlsZSAoc2VjdG9ycykgewogCQlpbnQgYmxvY2tzOwpAQCAtMTM0NSw4ICsxMzQ5LDggQEAKIAl9CiB9CiAKLWludCBiaXRtYXBfc3RhcnRfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgaW50ICpibG9ja3MsCi0JCQlpbnQgZGVncmFkZWQpCitzdGF0aWMgaW50IF9fYml0bWFwX3N0YXJ0X3N5bmMoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIGludCAqYmxvY2tzLAorCQkJICAgICAgIGludCBkZWdyYWRlZCkKIHsKIAliaXRtYXBfY291bnRlcl90ICpibWM7CiAJaW50IHJ2OwpAQCAtMTM3NCw2ICsxMzc4LDI5IEBACiAJcmV0dXJuIHJ2OwogfQogCitpbnQgYml0bWFwX3N0YXJ0X3N5bmMoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIGludCAqYmxvY2tzLAorCQkgICAgICBpbnQgZGVncmFkZWQpCit7CisJLyogYml0bWFwX3N0YXJ0X3N5bmMgbXVzdCBhbHdheXMgcmVwb3J0IG9uIG11bHRpcGxlcyBvZiB3aG9sZQorCSAqIHBhZ2VzLCBvdGhlcndpc2UgcmVzeW5jICh3aGljaCBpcyB2ZXJ5IFBBR0VfU0laRSBiYXNlZCkgd2lsbAorCSAqIGdldCBjb25mdXNlZC4KKwkgKiBTbyBjYWxsIF9fYml0bWFwX3N0YXJ0X3N5bmMgcmVwZWF0ZWRseSAoaWYgbmVlZGVkKSB1bnRpbAorCSAqIEF0IGxlYXN0IFBBR0VfU0laRT4+OSBibG9ja3MgYXJlIGNvdmVyZWQuCisJICogUmV0dXJuIHRoZSAnb3InIG9mIHRoZSByZXN1bHQuCisJICovCisJaW50IHJ2ID0gMDsKKwlpbnQgYmxvY2tzMTsKKworCSpibG9ja3MgPSAwOworCXdoaWxlICgqYmxvY2tzIDwgKFBBR0VfU0laRT4+OSkpIHsKKwkJcnYgfD0gX19iaXRtYXBfc3RhcnRfc3luYyhiaXRtYXAsIG9mZnNldCwKKwkJCQkJICAmYmxvY2tzMSwgZGVncmFkZWQpOworCQlvZmZzZXQgKz0gYmxvY2tzMTsKKwkJKmJsb2NrcyArPSBibG9ja3MxOworCX0KKwlyZXR1cm4gcnY7Cit9CisKIHZvaWQgYml0bWFwX2VuZF9zeW5jKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgb2Zmc2V0LCBpbnQgKmJsb2NrcywgaW50IGFib3J0ZWQpCiB7CiAJYml0bWFwX2NvdW50ZXJfdCAqYm1jOwpAQCAtMTQ0Myw2ICsxNDcwLDggQEAKIAl3YWl0X2V2ZW50KGJpdG1hcC0+bWRkZXYtPnJlY292ZXJ5X3dhaXQsCiAJCSAgIGF0b21pY19yZWFkKCZiaXRtYXAtPm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpID09IDApOwogCisJYml0bWFwLT5tZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gYml0bWFwLT5tZGRldi0+Y3Vycl9yZXN5bmM7CisJc2V0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZiaXRtYXAtPm1kZGV2LT5mbGFncyk7CiAJc2VjdG9yICY9IH4oKDFVTEwgPDwgQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSkgLSAxKTsKIAlzID0gMDsKIAl3aGlsZSAocyA8IHNlY3RvciAmJiBzIDwgYml0bWFwLT5tZGRldi0+cmVzeW5jX21heF9zZWN0b3JzKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmggYi9kcml2ZXJzL21kL2JpdG1hcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWQvYml0bWFwLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaCBiL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaAppbmRleCBkNDUwOWJlLi4zNDUwOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgKKysrIGIvZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oCkBAIC01Miw2ICs1MiwxNiBAQAogCWJsLT50YWlsID0gYmlvOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2xpc3RfYWRkX2hlYWQoc3RydWN0IGJpb19saXN0ICpibCwgc3RydWN0IGJpbyAqYmlvKQoreworCWJpby0+YmlfbmV4dCA9IGJsLT5oZWFkOworCisJYmwtPmhlYWQgPSBiaW87CisKKwlpZiAoIWJsLT50YWlsKQorCQlibC0+dGFpbCA9IGJpbzsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGJpb19saXN0X21lcmdlKHN0cnVjdCBiaW9fbGlzdCAqYmwsIHN0cnVjdCBiaW9fbGlzdCAqYmwyKQogewogCWlmICghYmwyLT5oZWFkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1iaW8tcmVjb3JkLmggYi9kcml2ZXJzL21kL2RtLWJpby1yZWNvcmQuaAppbmRleCBkM2VjMjE3Li4zYThjZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJpby1yZWNvcmQuaAorKysgYi9kcml2ZXJzL21kL2RtLWJpby1yZWNvcmQuaApAQCAtMTYsMzAgKzE2LDU2IEBACiAgKiBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGhlbHAgdGhlIHRhcmdldCByZWNvcmQgYW5kIHJlc3RvcmUgdGhlCiAgKiBvcmlnaW5hbCBiaW8gc3RhdGUuCiAgKi8KKworc3RydWN0IGRtX2Jpb192ZWNfZGV0YWlscyB7CisjaWYgUEFHRV9TSVpFIDwgNjU1MzYKKwlfX3UxNiBidl9sZW47CisJX191MTYgYnZfb2Zmc2V0OworI2Vsc2UKKwl1bnNpZ25lZCBidl9sZW47CisJdW5zaWduZWQgYnZfb2Zmc2V0OworI2VuZGlmCit9OworCiBzdHJ1Y3QgZG1fYmlvX2RldGFpbHMgewogCXNlY3Rvcl90IGJpX3NlY3RvcjsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiaV9iZGV2OwogCXVuc2lnbmVkIGludCBiaV9zaXplOwogCXVuc2lnbmVkIHNob3J0IGJpX2lkeDsKIAl1bnNpZ25lZCBsb25nIGJpX2ZsYWdzOworCXN0cnVjdCBkbV9iaW9fdmVjX2RldGFpbHMgYmlfaW9fdmVjW0JJT19NQVhfUEFHRVNdOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRtX2Jpb19yZWNvcmQoc3RydWN0IGRtX2Jpb19kZXRhaWxzICpiZCwgc3RydWN0IGJpbyAqYmlvKQogeworCXVuc2lnbmVkIGk7CisKIAliZC0+Ymlfc2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CiAJYmQtPmJpX2JkZXYgPSBiaW8tPmJpX2JkZXY7CiAJYmQtPmJpX3NpemUgPSBiaW8tPmJpX3NpemU7CiAJYmQtPmJpX2lkeCA9IGJpby0+YmlfaWR4OwogCWJkLT5iaV9mbGFncyA9IGJpby0+YmlfZmxhZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmlvLT5iaV92Y250OyBpKyspIHsKKwkJYmQtPmJpX2lvX3ZlY1tpXS5idl9sZW4gPSBiaW8tPmJpX2lvX3ZlY1tpXS5idl9sZW47CisJCWJkLT5iaV9pb192ZWNbaV0uYnZfb2Zmc2V0ID0gYmlvLT5iaV9pb192ZWNbaV0uYnZfb2Zmc2V0OworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtX2Jpb19yZXN0b3JlKHN0cnVjdCBkbV9iaW9fZGV0YWlscyAqYmQsIHN0cnVjdCBiaW8gKmJpbykKIHsKKwl1bnNpZ25lZCBpOworCiAJYmlvLT5iaV9zZWN0b3IgPSBiZC0+Ymlfc2VjdG9yOwogCWJpby0+YmlfYmRldiA9IGJkLT5iaV9iZGV2OwogCWJpby0+Ymlfc2l6ZSA9IGJkLT5iaV9zaXplOwogCWJpby0+YmlfaWR4ID0gYmQtPmJpX2lkeDsKIAliaW8tPmJpX2ZsYWdzID0gYmQtPmJpX2ZsYWdzOworCisJZm9yIChpID0gMDsgaSA8IGJpby0+YmlfdmNudDsgaSsrKSB7CisJCWJpby0+YmlfaW9fdmVjW2ldLmJ2X2xlbiA9IGJkLT5iaV9pb192ZWNbaV0uYnZfbGVuOworCQliaW8tPmJpX2lvX3ZlY1tpXS5idl9vZmZzZXQgPSBiZC0+YmlfaW9fdmVjW2ldLmJ2X29mZnNldDsKKwl9CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCmluZGV4IGJmZWZkMDcuLjUzMzk0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYworKysgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKQEAgLTExNTYsOCArMTE1Niw3IEBACiAJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcih0Zm0pOwogYmFkX2NpcGhlcjoKIAkvKiBNdXN0IHplcm8ga2V5IG1hdGVyaWFsIGJlZm9yZSBmcmVlaW5nICovCi0JbWVtc2V0KGNjLCAwLCBzaXplb2YoKmNjKSArIGNjLT5rZXlfc2l6ZSAqIHNpemVvZih1OCkpOwotCWtmcmVlKGNjKTsKKwlremZyZWUoY2MpOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC0xMTgzLDggKzExODIsNyBAQAogCWRtX3B1dF9kZXZpY2UodGksIGNjLT5kZXYpOwogCiAJLyogTXVzdCB6ZXJvIGtleSBtYXRlcmlhbCBiZWZvcmUgZnJlZWluZyAqLwotCW1lbXNldChjYywgMCwgc2l6ZW9mKCpjYykgKyBjYy0+a2V5X3NpemUgKiBzaXplb2YodTgpKTsKLQlrZnJlZShjYyk7CisJa3pmcmVlKGNjKTsKIH0KIAogc3RhdGljIGludCBjcnlwdF9tYXAoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCmluZGV4IGRjY2JmYjAuLmEyZTI2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwpAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgImRtLWV4Y2VwdGlvbi1zdG9yZS5oIgogCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0xNCw2ICsxNSwyNTcgQEAKIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJzbmFwc2hvdCBleGNlcHRpb24gc3RvcmVzIgogCitzdGF0aWMgTElTVF9IRUFEKF9leGNlcHRpb25fc3RvcmVfdHlwZXMpOworc3RhdGljIERFRklORV9TUElOTE9DSyhfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKl9fZmluZF9leGNlcHRpb25fc3RvcmVfdHlwZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodHlwZSwgJl9leGNlcHRpb25fc3RvcmVfdHlwZXMsIGxpc3QpCisJCWlmICghc3RyY21wKG5hbWUsIHR5cGUtPm5hbWUpKQorCQkJcmV0dXJuIHR5cGU7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqX2dldF9leGNlcHRpb25fc3RvcmVfdHlwZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZTsKKworCXNwaW5fbG9jaygmX2xvY2spOworCisJdHlwZSA9IF9fZmluZF9leGNlcHRpb25fc3RvcmVfdHlwZShuYW1lKTsKKworCWlmICh0eXBlICYmICF0cnlfbW9kdWxlX2dldCh0eXBlLT5tb2R1bGUpKQorCQl0eXBlID0gTlVMTDsKKworCXNwaW5fdW5sb2NrKCZfbG9jayk7CisKKwlyZXR1cm4gdHlwZTsKK30KKworLyoKKyAqIGdldF90eXBlCisgKiBAdHlwZV9uYW1lCisgKgorICogQXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgYnkgbmFtZS4gIElmIG5vdCBhbHJlYWR5CisgKiBhdmFpbGFibGUsIGF0dGVtcHQgdG8gbG9hZCB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlLgorICoKKyAqIEV4c3RvcmUgbW9kdWxlcyBhcmUgbmFtZWQgImRtLWV4c3RvcmUtIiBmb2xsb3dlZCBieSB0aGUgJ3R5cGVfbmFtZScuCisgKiBNb2R1bGVzIG1heSBjb250YWluIG11bHRpcGxlIHR5cGVzLgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGZpcnN0IHRyeSB0aGUgbW9kdWxlICJkbS1leHN0b3JlLTx0eXBlX25hbWU+IiwKKyAqIHRoZW4gdHJ1bmNhdGUgJ3R5cGVfbmFtZScgb24gdGhlIGxhc3QgJy0nIGFuZCB0cnkgYWdhaW4uCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHR5cGVfbmFtZSB3YXMgImNsdXN0ZXJlZC1zaGFyZWQiLCBpdCB3b3VsZCBzZWFyY2gKKyAqICdkbS1leHN0b3JlLWNsdXN0ZXJlZC1zaGFyZWQnIHRoZW4gJ2RtLWV4c3RvcmUtY2x1c3RlcmVkJy4KKyAqCisgKiAnZG0tZXhjZXB0aW9uLXN0b3JlLTx0eXBlX25hbWU+JyBpcyB0b28gbG9uZyBvZiBhIG5hbWUgaW4gbXkKKyAqIG9waW5pb24sIHdoaWNoIGlzIHdoeSBJJ3ZlIGNob3NlbiB0byBoYXZlIHRoZSBmaWxlcworICogY29udGFpbmluZyBleGNlcHRpb24gc3RvcmUgaW1wbGVtZW50YXRpb25zIGJlICdkbS1leHN0b3JlLTx0eXBlX25hbWU+Jy4KKyAqIElmIHlvdSB3YW50IHlvdXIgbW9kdWxlIHRvIGJlIGF1dG9sb2FkZWQsIHlvdSB3aWxsIGZvbGxvdyB0aGlzCisgKiBuYW1pbmcgY29udmVudGlvbi4KKyAqCisgKiBSZXR1cm5zOiBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSogb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKmdldF90eXBlKGNvbnN0IGNoYXIgKnR5cGVfbmFtZSkKK3sKKwljaGFyICpwLCAqdHlwZV9uYW1lX2R1cDsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGU7CisKKwl0eXBlID0gX2dldF9leGNlcHRpb25fc3RvcmVfdHlwZSh0eXBlX25hbWUpOworCWlmICh0eXBlKQorCQlyZXR1cm4gdHlwZTsKKworCXR5cGVfbmFtZV9kdXAgPSBrc3RyZHVwKHR5cGVfbmFtZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0eXBlX25hbWVfZHVwKSB7CisJCURNRVJSKCJObyBtZW1vcnkgbGVmdCB0byBhdHRlbXB0IGxvYWQgZm9yIFwiJXNcIiIsIHR5cGVfbmFtZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXdoaWxlIChyZXF1ZXN0X21vZHVsZSgiZG0tZXhzdG9yZS0lcyIsIHR5cGVfbmFtZV9kdXApIHx8CisJICAgICAgICEodHlwZSA9IF9nZXRfZXhjZXB0aW9uX3N0b3JlX3R5cGUodHlwZV9uYW1lKSkpIHsKKwkJcCA9IHN0cnJjaHIodHlwZV9uYW1lX2R1cCwgJy0nKTsKKwkJaWYgKCFwKQorCQkJYnJlYWs7CisJCXBbMF0gPSAnXDAnOworCX0KKworCWlmICghdHlwZSkKKwkJRE1XQVJOKCJNb2R1bGUgZm9yIGV4c3RvcmUgdHlwZSBcIiVzXCIgbm90IGZvdW5kLiIsIHR5cGVfbmFtZSk7CisKKwlrZnJlZSh0eXBlX25hbWVfZHVwKTsKKworCXJldHVybiB0eXBlOworfQorCitzdGF0aWMgdm9pZCBwdXRfdHlwZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpCit7CisJc3Bpbl9sb2NrKCZfbG9jayk7CisJbW9kdWxlX3B1dCh0eXBlLT5tb2R1bGUpOworCXNwaW5fdW5sb2NrKCZfbG9jayk7Cit9CisKK2ludCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV9yZWdpc3RlcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpCit7CisJaW50IHIgPSAwOworCisJc3Bpbl9sb2NrKCZfbG9jayk7CisJaWYgKCFfX2ZpbmRfZXhjZXB0aW9uX3N0b3JlX3R5cGUodHlwZS0+bmFtZSkpCisJCWxpc3RfYWRkKCZ0eXBlLT5saXN0LCAmX2V4Y2VwdGlvbl9zdG9yZV90eXBlcyk7CisJZWxzZQorCQlyID0gLUVFWElTVDsKKwlzcGluX3VubG9jaygmX2xvY2spOworCisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MKGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3JlZ2lzdGVyKTsKKworaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlKQoreworCXNwaW5fbG9jaygmX2xvY2spOworCisJaWYgKCFfX2ZpbmRfZXhjZXB0aW9uX3N0b3JlX3R5cGUodHlwZS0+bmFtZSkpIHsKKwkJc3Bpbl91bmxvY2soJl9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGlzdF9kZWwoJnR5cGUtPmxpc3QpOworCisJc3Bpbl91bmxvY2soJl9sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKTsKKworLyoKKyAqIFJvdW5kIGEgbnVtYmVyIHVwIHRvIHRoZSBuZWFyZXN0ICdzaXplJyBib3VuZGFyeS4gIHNpemUgbXVzdAorICogYmUgYSBwb3dlciBvZiAyLgorICovCitzdGF0aWMgdWxvbmcgcm91bmRfdXAodWxvbmcgbiwgdWxvbmcgc2l6ZSkKK3sKKwlzaXplLS07CisJcmV0dXJuIChuICsgc2l6ZSkgJiB+c2l6ZTsKK30KKworc3RhdGljIGludCBzZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKKwkJCSAgY29uc3QgY2hhciAqY2h1bmtfc2l6ZV9hcmcsIGNoYXIgKiplcnJvcikKK3sKKwl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVfdWxvbmc7CisJY2hhciAqdmFsdWU7CisKKwljaHVua19zaXplX3Vsb25nID0gc2ltcGxlX3N0cnRvdWwoY2h1bmtfc2l6ZV9hcmcsICZ2YWx1ZSwgMTApOworCWlmICgqY2h1bmtfc2l6ZV9hcmcgPT0gJ1wwJyB8fCAqdmFsdWUgIT0gJ1wwJykgeworCQkqZXJyb3IgPSAiSW52YWxpZCBjaHVuayBzaXplIjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjaHVua19zaXplX3Vsb25nKSB7CisJCXN0b3JlLT5jaHVua19zaXplID0gc3RvcmUtPmNodW5rX21hc2sgPSBzdG9yZS0+Y2h1bmtfc2hpZnQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIENodW5rIHNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiBwYWdlIHNpemUuICBTaWxlbnRseQorCSAqIHJvdW5kIHVwIGlmIGl0J3Mgbm90LgorCSAqLworCWNodW5rX3NpemVfdWxvbmcgPSByb3VuZF91cChjaHVua19zaXplX3Vsb25nLCBQQUdFX1NJWkUgPj4gOSk7CisKKwkvKiBDaGVjayBjaHVua19zaXplIGlzIGEgcG93ZXIgb2YgMiAqLworCWlmICghaXNfcG93ZXJfb2ZfMihjaHVua19zaXplX3Vsb25nKSkgeworCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiAyIjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVmFsaWRhdGUgdGhlIGNodW5rIHNpemUgYWdhaW5zdCB0aGUgZGV2aWNlIGJsb2NrIHNpemUgKi8KKwlpZiAoY2h1bmtfc2l6ZV91bG9uZyAlIChiZGV2X2hhcmRzZWN0X3NpemUoc3RvcmUtPmNvdy0+YmRldikgPj4gOSkpIHsKKwkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgZGV2aWNlIGJsb2Nrc2l6ZSI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN0b3JlLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZV91bG9uZzsKKwlzdG9yZS0+Y2h1bmtfbWFzayA9IGNodW5rX3NpemVfdWxvbmcgLSAxOworCXN0b3JlLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplX3Vsb25nKSAtIDE7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUoc3RydWN0IGRtX3RhcmdldCAqdGksIGludCBhcmdjLCBjaGFyICoqYXJndiwKKwkJCSAgICAgIHVuc2lnbmVkICphcmdzX3VzZWQsCisJCQkgICAgICBzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICoqc3RvcmUpCit7CisJaW50IHIgPSAwOworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZTsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICp0bXBfc3RvcmU7CisJY2hhciBwZXJzaXN0ZW50OworCisJaWYgKGFyZ2MgPCAzKSB7CisJCXRpLT5lcnJvciA9ICJJbnN1ZmZpY2llbnQgZXhjZXB0aW9uIHN0b3JlIGFyZ3VtZW50cyI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXRtcF9zdG9yZSA9IGttYWxsb2Moc2l6ZW9mKCp0bXBfc3RvcmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcF9zdG9yZSkgeworCQl0aS0+ZXJyb3IgPSAiRXhjZXB0aW9uIHN0b3JlIGFsbG9jYXRpb24gZmFpbGVkIjsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGVyc2lzdGVudCA9IHRvdXBwZXIoKmFyZ3ZbMV0pOworCWlmIChwZXJzaXN0ZW50ICE9ICdQJyAmJiBwZXJzaXN0ZW50ICE9ICdOJykgeworCQl0aS0+ZXJyb3IgPSAiUGVyc2lzdGVudCBmbGFnIGlzIG5vdCBQIG9yIE4iOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl0eXBlID0gZ2V0X3R5cGUoYXJndlsxXSk7CisJaWYgKCF0eXBlKSB7CisJCXRpLT5lcnJvciA9ICJFeGNlcHRpb24gc3RvcmUgdHlwZSBub3QgcmVjb2duaXNlZCI7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIGJhZF90eXBlOworCX0KKworCXRtcF9zdG9yZS0+dHlwZSA9IHR5cGU7CisJdG1wX3N0b3JlLT50aSA9IHRpOworCisJciA9IGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIDAsIDAsCisJCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJnRtcF9zdG9yZS0+Y293KTsKKwlpZiAocikgeworCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IGdldCBDT1cgZGV2aWNlIjsKKwkJZ290byBiYWRfY293OworCX0KKworCXIgPSBzZXRfY2h1bmtfc2l6ZSh0bXBfc3RvcmUsIGFyZ3ZbMl0sICZ0aS0+ZXJyb3IpOworCWlmIChyKQorCQlnb3RvIGJhZF9jb3c7CisKKwlyID0gdHlwZS0+Y3RyKHRtcF9zdG9yZSwgMCwgTlVMTCk7CisJaWYgKHIpIHsKKwkJdGktPmVycm9yID0gIkV4Y2VwdGlvbiBzdG9yZSB0eXBlIGNvbnN0cnVjdG9yIGZhaWxlZCI7CisJCWdvdG8gYmFkX2N0cjsKKwl9CisKKwkqYXJnc191c2VkID0gMzsKKwkqc3RvcmUgPSB0bXBfc3RvcmU7CisJcmV0dXJuIDA7CisKK2JhZF9jdHI6CisJZG1fcHV0X2RldmljZSh0aSwgdG1wX3N0b3JlLT5jb3cpOworYmFkX2NvdzoKKwlwdXRfdHlwZSh0eXBlKTsKK2JhZF90eXBlOgorCWtmcmVlKHRtcF9zdG9yZSk7CisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MKGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUpOworCit2b2lkIGRtX2V4Y2VwdGlvbl9zdG9yZV9kZXN0cm95KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKQoreworCXN0b3JlLT50eXBlLT5kdHIoc3RvcmUpOworCWRtX3B1dF9kZXZpY2Uoc3RvcmUtPnRpLCBzdG9yZS0+Y293KTsKKwlwdXRfdHlwZShzdG9yZS0+dHlwZSk7CisJa2ZyZWUoc3RvcmUpOworfQorRVhQT1JUX1NZTUJPTChkbV9leGNlcHRpb25fc3RvcmVfZGVzdHJveSk7CisKIGludCBkbV9leGNlcHRpb25fc3RvcmVfaW5pdCh2b2lkKQogewogCWludCByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaCBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKaW5kZXggYmI5ZjMzZC4uMGEyZTZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaAorKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCkBAIC0zNywxMSArMzcsMTggQEAKICAqIEFic3RyYWN0aW9uIHRvIGhhbmRsZSB0aGUgbWV0YS9sYXlvdXQgb2YgZXhjZXB0aW9uIHN0b3JlcyAodGhlCiAgKiBDT1cgZGV2aWNlKS4KICAqLwotc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSB7CitzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlOworc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKKworCWludCAoKmN0cikgKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkgICAgdW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpOworCiAJLyoKIAkgKiBEZXN0cm95cyB0aGlzIG9iamVjdCB3aGVuIHlvdSd2ZSBmaW5pc2hlZCB3aXRoIGl0LgogCSAqLwotCXZvaWQgKCpkZXN0cm95KSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpOworCXZvaWQgKCpkdHIpIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSk7CiAKIAkvKgogCSAqIFRoZSB0YXJnZXQgc2hvdWxkbid0IHJlYWQgdGhlIENPVyBkZXZpY2UgdW50aWwgdGhpcyBpcwpAQCAtNzIsOCArNzksOSBAQAogCSAqLwogCXZvaWQgKCpkcm9wX3NuYXBzaG90KSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpOwogCi0JaW50ICgqc3RhdHVzKSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsIHN0YXR1c190eXBlX3Qgc3RhdHVzLAotCQkgICAgICAgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuKTsKKwl1bnNpZ25lZCAoKnN0YXR1cykgKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJICAgIHN0YXR1c190eXBlX3Qgc3RhdHVzLCBjaGFyICpyZXN1bHQsCisJCQkgICAgdW5zaWduZWQgbWF4bGVuKTsKIAogCS8qCiAJICogUmV0dXJuIGhvdyBmdWxsIHRoZSBzbmFwc2hvdCBpcy4KQEAgLTgyLDcgKzkwLDIxIEBACiAJCQkgICAgICAgc2VjdG9yX3QgKm51bWVyYXRvciwKIAkJCSAgICAgICBzZWN0b3JfdCAqZGVub21pbmF0b3IpOwogCi0Jc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwOworCS8qIEZvciBpbnRlcm5hbCBkZXZpY2UtbWFwcGVyIHVzZSBvbmx5LiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgeworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZTsKKwlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsKKworCXN0cnVjdCBkbV9kZXYgKmNvdzsKKworCS8qIFNpemUgb2YgZGF0YSBibG9ja3Mgc2F2ZWQgLSBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLworCWNodW5rX3QgY2h1bmtfc2l6ZTsKKwljaHVua190IGNodW5rX21hc2s7CisJY2h1bmtfdCBjaHVua19zaGlmdDsKKwogCXZvaWQgKmNvbnRleHQ7CiB9OwogCkBAIC0xMjksNiArMTUxLDI4IEBACiAKICMgIGVuZGlmCiAKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzZWN0b3JzIGluIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2VjdG9yX3QgZ2V0X2Rldl9zaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIGJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gU0VDVE9SX1NISUZUOworfQorCitzdGF0aWMgaW5saW5lIGNodW5rX3Qgc2VjdG9yX3RvX2NodW5rKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJCSAgICAgIHNlY3Rvcl90IHNlY3RvcikKK3sKKwlyZXR1cm4gKHNlY3RvciAmIH5zdG9yZS0+Y2h1bmtfbWFzaykgPj4gc3RvcmUtPmNodW5rX3NoaWZ0OworfQorCitpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfcmVnaXN0ZXIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlKTsKK2ludCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZSk7CisKK2ludCBkbV9leGNlcHRpb25fc3RvcmVfY3JlYXRlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCisJCQkgICAgICB1bnNpZ25lZCAqYXJnc191c2VkLAorCQkJICAgICAgc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqKnN0b3JlKTsKK3ZvaWQgZG1fZXhjZXB0aW9uX3N0b3JlX2Rlc3Ryb3koc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpOworCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX2luaXQodm9pZCk7CiB2b2lkIGRtX2V4Y2VwdGlvbl9zdG9yZV9leGl0KHZvaWQpOwogCkBAIC0xNDEsOCArMTg1LDQgQEAKIGludCBkbV90cmFuc2llbnRfc25hcHNob3RfaW5pdCh2b2lkKTsKIHZvaWQgZG1fdHJhbnNpZW50X3NuYXBzaG90X2V4aXQodm9pZCk7CiAKLWludCBkbV9jcmVhdGVfcGVyc2lzdGVudChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSk7Ci0KLWludCBkbV9jcmVhdGVfdHJhbnNpZW50KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKTsKLQogI2VuZGlmIC8qIF9MSU5VWF9ETV9FWENFUFRJT05fU1RPUkUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uYyBiL2RyaXZlcnMvbWQvZG0taW8uYwppbmRleCAzNmUyYjVlLi5lNzNhYWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pby5jCkBAIC0zNzAsMTYgKzM3MCwxMyBAQAogCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAoIWF0b21pY19yZWFkKCZpby5jb3VudCkgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCWlmICghYXRvbWljX3JlYWQoJmlvLmNvdW50KSkKIAkJCWJyZWFrOwogCiAJCWlvX3NjaGVkdWxlKCk7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmlvLmNvdW50KSkKLQkJcmV0dXJuIC1FSU5UUjsKLQogCWlmIChlcnJvcl9iaXRzKQogCQkqZXJyb3JfYml0cyA9IGlvLmVycm9yX2JpdHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbG9nLmMgYi9kcml2ZXJzL21kL2RtLWxvZy5jCmluZGV4IDczNzk2MWYuLmJlMjMzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbG9nLmMKKysrIGIvZHJpdmVycy9tZC9kbS1sb2cuYwpAQCAtMTYsNDAgKzE2LDI5IEBACiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAiZGlydHkgcmVnaW9uIGxvZyIKIAotc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCB7Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ190eXBlICp0eXBlOwotCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWxvbmcgdXNlOwotfTsKLQogc3RhdGljIExJU1RfSEVBRChfbG9nX3R5cGVzKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soX2xvY2spOwogCi1zdGF0aWMgc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqX19maW5kX2RpcnR5X2xvZ190eXBlKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc3RydWN0IGRtX2RpcnR5X2xvZ190eXBlICpfX2ZpbmRfZGlydHlfbG9nX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZTsKKwlzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKmxvZ190eXBlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2dfdHlwZSwgJl9sb2dfdHlwZXMsIGxpc3QpCi0JCWlmICghc3RyY21wKG5hbWUsIGxvZ190eXBlLT50eXBlLT5uYW1lKSkKKwkJaWYgKCFzdHJjbXAobmFtZSwgbG9nX3R5cGUtPm5hbWUpKQogCQkJcmV0dXJuIGxvZ190eXBlOwogCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpfZ2V0X2RpcnR5X2xvZ190eXBlKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc3RydWN0IGRtX2RpcnR5X2xvZ190eXBlICpfZ2V0X2RpcnR5X2xvZ190eXBlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqbG9nX3R5cGU7CisJc3RydWN0IGRtX2RpcnR5X2xvZ190eXBlICpsb2dfdHlwZTsKIAogCXNwaW5fbG9jaygmX2xvY2spOwogCiAJbG9nX3R5cGUgPSBfX2ZpbmRfZGlydHlfbG9nX3R5cGUobmFtZSk7Ci0JaWYgKGxvZ190eXBlKSB7Ci0JCWlmICghbG9nX3R5cGUtPnVzZSAmJiAhdHJ5X21vZHVsZV9nZXQobG9nX3R5cGUtPnR5cGUtPm1vZHVsZSkpCi0JCQlsb2dfdHlwZSA9IE5VTEw7Ci0JCWVsc2UKLQkJCWxvZ190eXBlLT51c2UrKzsKLQl9CisJaWYgKGxvZ190eXBlICYmICF0cnlfbW9kdWxlX2dldChsb2dfdHlwZS0+bW9kdWxlKSkKKwkJbG9nX3R5cGUgPSBOVUxMOwogCiAJc3Bpbl91bmxvY2soJl9sb2NrKTsKIApAQCAtNzYsMTQgKzY1LDE0IEBACiBzdGF0aWMgc3RydWN0IGRtX2RpcnR5X2xvZ190eXBlICpnZXRfdHlwZShjb25zdCBjaGFyICp0eXBlX25hbWUpCiB7CiAJY2hhciAqcCwgKnR5cGVfbmFtZV9kdXA7Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqbG9nX3R5cGU7CisJc3RydWN0IGRtX2RpcnR5X2xvZ190eXBlICpsb2dfdHlwZTsKIAogCWlmICghdHlwZV9uYW1lKQogCQlyZXR1cm4gTlVMTDsKIAogCWxvZ190eXBlID0gX2dldF9kaXJ0eV9sb2dfdHlwZSh0eXBlX25hbWUpOwogCWlmIChsb2dfdHlwZSkKLQkJcmV0dXJuIGxvZ190eXBlLT50eXBlOworCQlyZXR1cm4gbG9nX3R5cGU7CiAKIAl0eXBlX25hbWVfZHVwID0ga3N0cmR1cCh0eXBlX25hbWUsIEdGUF9LRVJORUwpOwogCWlmICghdHlwZV9uYW1lX2R1cCkgewpAQCAtMTA1LDU2ICs5NCwzMyBAQAogCiAJa2ZyZWUodHlwZV9uYW1lX2R1cCk7CiAKLQlyZXR1cm4gbG9nX3R5cGUgPyBsb2dfdHlwZS0+dHlwZSA6IE5VTEw7CisJcmV0dXJuIGxvZ190eXBlOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfdHlwZShzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGUpCiB7Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqbG9nX3R5cGU7Ci0KIAlpZiAoIXR5cGUpCiAJCXJldHVybjsKIAogCXNwaW5fbG9jaygmX2xvY2spOwotCWxvZ190eXBlID0gX19maW5kX2RpcnR5X2xvZ190eXBlKHR5cGUtPm5hbWUpOwotCWlmICghbG9nX3R5cGUpCisJaWYgKCFfX2ZpbmRfZGlydHlfbG9nX3R5cGUodHlwZS0+bmFtZSkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCEtLWxvZ190eXBlLT51c2UpCi0JCW1vZHVsZV9wdXQodHlwZS0+bW9kdWxlKTsKLQotCUJVR19PTihsb2dfdHlwZS0+dXNlIDwgMCk7CisJbW9kdWxlX3B1dCh0eXBlLT5tb2R1bGUpOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2soJl9sb2NrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkbV9kaXJ0eV9sb2dfaW50ZXJuYWwgKl9hbGxvY19kaXJ0eV9sb2dfdHlwZShzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGUpCi17Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqbG9nX3R5cGUgPSBremFsbG9jKHNpemVvZigqbG9nX3R5cGUpLAotCQkJCQkJCSBHRlBfS0VSTkVMKTsKLQotCWlmIChsb2dfdHlwZSkKLQkJbG9nX3R5cGUtPnR5cGUgPSB0eXBlOwotCi0JcmV0dXJuIGxvZ190eXBlOwotfQotCiBpbnQgZG1fZGlydHlfbG9nX3R5cGVfcmVnaXN0ZXIoc3RydWN0IGRtX2RpcnR5X2xvZ190eXBlICp0eXBlKQogewotCXN0cnVjdCBkbV9kaXJ0eV9sb2dfaW50ZXJuYWwgKmxvZ190eXBlID0gX2FsbG9jX2RpcnR5X2xvZ190eXBlKHR5cGUpOwogCWludCByID0gMDsKIAotCWlmICghbG9nX3R5cGUpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJc3Bpbl9sb2NrKCZfbG9jayk7CiAJaWYgKCFfX2ZpbmRfZGlydHlfbG9nX3R5cGUodHlwZS0+bmFtZSkpCi0JCWxpc3RfYWRkKCZsb2dfdHlwZS0+bGlzdCwgJl9sb2dfdHlwZXMpOwotCWVsc2UgewotCQlrZnJlZShsb2dfdHlwZSk7CisJCWxpc3RfYWRkKCZ0eXBlLT5saXN0LCAmX2xvZ190eXBlcyk7CisJZWxzZQogCQlyID0gLUVFWElTVDsKLQl9CiAJc3Bpbl91bmxvY2soJl9sb2NrKTsKIAogCXJldHVybiByOwpAQCAtMTYzLDI1ICsxMjksMTYgQEAKIAogaW50IGRtX2RpcnR5X2xvZ190eXBlX3VucmVnaXN0ZXIoc3RydWN0IGRtX2RpcnR5X2xvZ190eXBlICp0eXBlKQogewotCXN0cnVjdCBkbV9kaXJ0eV9sb2dfaW50ZXJuYWwgKmxvZ190eXBlOwotCiAJc3Bpbl9sb2NrKCZfbG9jayk7CiAKLQlsb2dfdHlwZSA9IF9fZmluZF9kaXJ0eV9sb2dfdHlwZSh0eXBlLT5uYW1lKTsKLQlpZiAoIWxvZ190eXBlKSB7CisJaWYgKCFfX2ZpbmRfZGlydHlfbG9nX3R5cGUodHlwZS0+bmFtZSkpIHsKIAkJc3Bpbl91bmxvY2soJl9sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGxvZ190eXBlLT51c2UpIHsKLQkJc3Bpbl91bmxvY2soJl9sb2NrKTsKLQkJcmV0dXJuIC1FVFhUQlNZOwotCX0KLQotCWxpc3RfZGVsKCZsb2dfdHlwZS0+bGlzdCk7CisJbGlzdF9kZWwoJnR5cGUtPmxpc3QpOwogCiAJc3Bpbl91bmxvY2soJl9sb2NrKTsKLQlrZnJlZShsb2dfdHlwZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5jIGIvZHJpdmVycy9tZC9kbS1wYXRoLXNlbGVjdG9yLmMKaW5kZXggOTZlYTIyNi4uNDJjMDRmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1wYXRoLXNlbGVjdG9yLmMKKysrIGIvZHJpdmVycy9tZC9kbS1wYXRoLXNlbGVjdG9yLmMKQEAgLTE3LDkgKzE3LDcgQEAKIAogc3RydWN0IHBzX2ludGVybmFsIHsKIAlzdHJ1Y3QgcGF0aF9zZWxlY3Rvcl90eXBlIHBzdDsKLQogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlsb25nIHVzZTsKIH07CiAKICNkZWZpbmUgcHN0X3RvX3BzaShfX3BzdCkgY29udGFpbmVyX29mKChfX3BzdCksIHN0cnVjdCBwc19pbnRlcm5hbCwgcHN0KQpAQCAtNDUsMTIgKzQzLDggQEAKIAogCWRvd25fcmVhZCgmX3BzX2xvY2spOwogCXBzaSA9IF9fZmluZF9wYXRoX3NlbGVjdG9yX3R5cGUobmFtZSk7Ci0JaWYgKHBzaSkgewotCQlpZiAoKHBzaS0+dXNlID09IDApICYmICF0cnlfbW9kdWxlX2dldChwc2ktPnBzdC5tb2R1bGUpKQotCQkJcHNpID0gTlVMTDsKLQkJZWxzZQotCQkJcHNpLT51c2UrKzsKLQl9CisJaWYgKHBzaSAmJiAhdHJ5X21vZHVsZV9nZXQocHNpLT5wc3QubW9kdWxlKSkKKwkJcHNpID0gTlVMTDsKIAl1cF9yZWFkKCZfcHNfbG9jayk7CiAKIAlyZXR1cm4gcHNpOwpAQCAtODQsMTEgKzc4LDcgQEAKIAlpZiAoIXBzaSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoLS1wc2ktPnVzZSA9PSAwKQotCQltb2R1bGVfcHV0KHBzaS0+cHN0Lm1vZHVsZSk7Ci0KLQlCVUdfT04ocHNpLT51c2UgPCAwKTsKLQorCW1vZHVsZV9wdXQocHNpLT5wc3QubW9kdWxlKTsKIG91dDoKIAl1cF9yZWFkKCZfcHNfbG9jayk7CiB9CkBAIC0xMzYsMTEgKzEyNiw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwc2ktPnVzZSkgewotCQl1cF93cml0ZSgmX3BzX2xvY2spOwotCQlyZXR1cm4gLUVUWFRCU1k7Ci0JfQotCiAJbGlzdF9kZWwoJnBzaS0+bGlzdCk7CiAKIAl1cF93cml0ZSgmX3BzX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IDRkNmJjMTAuLjUzNmVmMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTE0NSw2ICsxNDUsOCBAQAogCXN0cnVjdCBkbV9iaW9fZGV0YWlscyBkZXRhaWxzOwogfTsKIAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpfZG1fcmFpZDFfcmVhZF9yZWNvcmRfY2FjaGU7CisKIC8qCiAgKiBFdmVyeSBtaXJyb3Igc2hvdWxkIGxvb2sgbGlrZSB0aGlzIG9uZS4KICAqLwpAQCAtNTg2LDYgKzU4OCw5IEBACiAJaW50IHN0YXRlOwogCXN0cnVjdCBiaW8gKmJpbzsKIAlzdHJ1Y3QgYmlvX2xpc3Qgc3luYywgbm9zeW5jLCByZWNvdmVyLCAqdGhpc19saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgYmlvX2xpc3QgcmVxdWV1ZTsKKwlzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cgPSBkbV9yaF9kaXJ0eV9sb2cobXMtPnJoKTsKKwlyZWdpb25fdCByZWdpb247CiAKIAlpZiAoIXdyaXRlcy0+aGVhZCkKIAkJcmV0dXJuOwpAQCAtNTk2LDEwICs2MDEsMTggQEAKIAliaW9fbGlzdF9pbml0KCZzeW5jKTsKIAliaW9fbGlzdF9pbml0KCZub3N5bmMpOwogCWJpb19saXN0X2luaXQoJnJlY292ZXIpOworCWJpb19saXN0X2luaXQoJnJlcXVldWUpOwogCiAJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3Aod3JpdGVzKSkpIHsKLQkJc3RhdGUgPSBkbV9yaF9nZXRfc3RhdGUobXMtPnJoLAotCQkJCQlkbV9yaF9iaW9fdG9fcmVnaW9uKG1zLT5yaCwgYmlvKSwgMSk7CisJCXJlZ2lvbiA9IGRtX3JoX2Jpb190b19yZWdpb24obXMtPnJoLCBiaW8pOworCisJCWlmIChsb2ctPnR5cGUtPmlzX3JlbW90ZV9yZWNvdmVyaW5nICYmCisJCSAgICBsb2ctPnR5cGUtPmlzX3JlbW90ZV9yZWNvdmVyaW5nKGxvZywgcmVnaW9uKSkgeworCQkJYmlvX2xpc3RfYWRkKCZyZXF1ZXVlLCBiaW8pOworCQkJY29udGludWU7CisJCX0KKworCQlzdGF0ZSA9IGRtX3JoX2dldF9zdGF0ZShtcy0+cmgsIHJlZ2lvbiwgMSk7CiAJCXN3aXRjaCAoc3RhdGUpIHsKIAkJY2FzZSBETV9SSF9DTEVBTjoKIAkJY2FzZSBETV9SSF9ESVJUWToKQEAgLTYxOSw2ICs2MzIsMTYgQEAKIAl9CiAKIAkvKgorCSAqIEFkZCBiaW9zIHRoYXQgYXJlIGRlbGF5ZWQgZHVlIHRvIHJlbW90ZSByZWNvdmVyeQorCSAqIGJhY2sgb24gdG8gdGhlIHdyaXRlIHF1ZXVlCisJICovCisJaWYgKHVubGlrZWx5KHJlcXVldWUuaGVhZCkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmbXMtPmxvY2spOworCQliaW9fbGlzdF9tZXJnZSgmbXMtPndyaXRlcywgJnJlcXVldWUpOworCQlzcGluX3VubG9ja19pcnEoJm1zLT5sb2NrKTsKKwl9CisKKwkvKgogCSAqIEluY3JlbWVudCB0aGUgcGVuZGluZyBjb3VudHMgZm9yIGFueSByZWdpb25zIHRoYXQgd2lsbAogCSAqIGJlIHdyaXR0ZW4gdG8gKHdyaXRlcyB0byByZWNvdmVyIHJlZ2lvbnMgYXJlIGdvaW5nIHRvCiAJICogYmUgZGVsYXllZCkuCkBAIC03NjQsOSArNzg3LDkgQEAKIAlhdG9taWNfc2V0KCZtcy0+c3VzcGVuZCwgMCk7CiAJYXRvbWljX3NldCgmbXMtPmRlZmF1bHRfbWlycm9yLCBERUZBVUxUX01JUlJPUik7CiAKLQlsZW4gPSBzaXplb2Yoc3RydWN0IGRtX3JhaWQxX3JlYWRfcmVjb3JkKTsKLQltcy0+cmVhZF9yZWNvcmRfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChNSU5fUkVBRF9SRUNPUkRTLAotCQkJCQkJCSAgIGxlbik7CisJbXMtPnJlYWRfcmVjb3JkX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUlOX1JFQURfUkVDT1JEUywKKwkJCQkJCV9kbV9yYWlkMV9yZWFkX3JlY29yZF9jYWNoZSk7CisKIAlpZiAoIW1zLT5yZWFkX3JlY29yZF9wb29sKSB7CiAJCXRpLT5lcnJvciA9ICJFcnJvciBjcmVhdGluZyBtaXJyb3IgcmVhZF9yZWNvcmRfcG9vbCI7CiAJCWtmcmVlKG1zKTsKQEAgLTEyNzksMTYgKzEzMDIsMzEgQEAKIHsKIAlpbnQgcjsKIAotCXIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJm1pcnJvcl90YXJnZXQpOwotCWlmIChyIDwgMCkKLQkJRE1FUlIoIkZhaWxlZCB0byByZWdpc3RlciBtaXJyb3IgdGFyZ2V0Iik7CisJX2RtX3JhaWQxX3JlYWRfcmVjb3JkX2NhY2hlID0gS01FTV9DQUNIRShkbV9yYWlkMV9yZWFkX3JlY29yZCwgMCk7CisJaWYgKCFfZG1fcmFpZDFfcmVhZF9yZWNvcmRfY2FjaGUpIHsKKwkJRE1FUlIoIkNhbid0IGFsbG9jYXRlIGRtX3JhaWQxX3JlYWRfcmVjb3JkIGNhY2hlIik7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGJhZF9jYWNoZTsKKwl9CiAKKwlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZtaXJyb3JfdGFyZ2V0KTsKKwlpZiAociA8IDApIHsKKwkJRE1FUlIoIkZhaWxlZCB0byByZWdpc3RlciBtaXJyb3IgdGFyZ2V0Iik7CisJCWdvdG8gYmFkX3RhcmdldDsKKwl9CisKKwlyZXR1cm4gMDsKKworYmFkX3RhcmdldDoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koX2RtX3JhaWQxX3JlYWRfcmVjb3JkX2NhY2hlKTsKK2JhZF9jYWNoZToKIAlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRtX21pcnJvcl9leGl0KHZvaWQpCiB7CiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJm1pcnJvcl90YXJnZXQpOworCWttZW1fY2FjaGVfZGVzdHJveShfZG1fcmFpZDFfcmVhZF9yZWNvcmRfY2FjaGUpOwogfQogCiAvKiBNb2R1bGUgaG9va3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCmluZGV4IDkzNmIzNGUuLmU3NWM2ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwpAQCAtNiw3ICs2LDYgQEAKICAqLwogCiAjaW5jbHVkZSAiZG0tZXhjZXB0aW9uLXN0b3JlLmgiCi0jaW5jbHVkZSAiZG0tc25hcC5oIgogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CkBAIC04OSw3ICs4OCw3IEBACiAgKiBUaGUgdG9wIGxldmVsIHN0cnVjdHVyZSBmb3IgYSBwZXJzaXN0ZW50IGV4Y2VwdGlvbiBzdG9yZS4KICAqLwogc3RydWN0IHBzdG9yZSB7Ci0Jc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwOwkvKiB1cCBwb2ludGVyIHRvIG15IHNuYXBzaG90ICovCisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmU7CiAJaW50IHZlcnNpb247CiAJaW50IHZhbGlkOwogCXVpbnQzMl90IGV4Y2VwdGlvbnNfcGVyX2FyZWE7CkBAIC0xNDEsNyArMTQwLDcgQEAKIAlpbnQgciA9IC1FTk9NRU07CiAJc2l6ZV90IGxlbjsKIAotCWxlbiA9IHBzLT5zbmFwLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVDsKKwlsZW4gPSBwcy0+c3RvcmUtPmNodW5rX3NpemUgPDwgU0VDVE9SX1NISUZUOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgY2h1bmtfc2l6ZSBibG9jayBvZiBtZW1vcnkgdGhhdCB3aWxsIGhvbGQKQEAgLTE2Myw5ICsxNjIsMTIgQEAKIAogc3RhdGljIHZvaWQgZnJlZV9hcmVhKHN0cnVjdCBwc3RvcmUgKnBzKQogewotCXZmcmVlKHBzLT5hcmVhKTsKKwlpZiAocHMtPmFyZWEpCisJCXZmcmVlKHBzLT5hcmVhKTsKIAlwcy0+YXJlYSA9IE5VTEw7Ci0JdmZyZWUocHMtPnplcm9fYXJlYSk7CisKKwlpZiAocHMtPnplcm9fYXJlYSkKKwkJdmZyZWUocHMtPnplcm9fYXJlYSk7CiAJcHMtPnplcm9fYXJlYSA9IE5VTEw7CiB9CiAKQEAgLTE4OSw5ICsxOTEsOSBAQAogc3RhdGljIGludCBjaHVua19pbyhzdHJ1Y3QgcHN0b3JlICpwcywgY2h1bmtfdCBjaHVuaywgaW50IHJ3LCBpbnQgbWV0YWRhdGEpCiB7CiAJc3RydWN0IGRtX2lvX3JlZ2lvbiB3aGVyZSA9IHsKLQkJLmJkZXYgPSBwcy0+c25hcC0+Y293LT5iZGV2LAotCQkuc2VjdG9yID0gcHMtPnNuYXAtPmNodW5rX3NpemUgKiBjaHVuaywKLQkJLmNvdW50ID0gcHMtPnNuYXAtPmNodW5rX3NpemUsCisJCS5iZGV2ID0gcHMtPnN0b3JlLT5jb3ctPmJkZXYsCisJCS5zZWN0b3IgPSBwcy0+c3RvcmUtPmNodW5rX3NpemUgKiBjaHVuaywKKwkJLmNvdW50ID0gcHMtPnN0b3JlLT5jaHVua19zaXplLAogCX07CiAJc3RydWN0IGRtX2lvX3JlcXVlc3QgaW9fcmVxID0gewogCQkuYmlfcncgPSBydywKQEAgLTI0NywxNSArMjQ5LDE1IEBACiAKIHN0YXRpYyB2b2lkIHplcm9fbWVtb3J5X2FyZWEoc3RydWN0IHBzdG9yZSAqcHMpCiB7Ci0JbWVtc2V0KHBzLT5hcmVhLCAwLCBwcy0+c25hcC0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQpOworCW1lbXNldChwcy0+YXJlYSwgMCwgcHMtPnN0b3JlLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCk7CiB9CiAKIHN0YXRpYyBpbnQgemVyb19kaXNrX2FyZWEoc3RydWN0IHBzdG9yZSAqcHMsIGNodW5rX3QgYXJlYSkKIHsKIAlzdHJ1Y3QgZG1faW9fcmVnaW9uIHdoZXJlID0gewotCQkuYmRldiA9IHBzLT5zbmFwLT5jb3ctPmJkZXYsCi0JCS5zZWN0b3IgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSAqIGFyZWFfbG9jYXRpb24ocHMsIGFyZWEpLAotCQkuY291bnQgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSwKKwkJLmJkZXYgPSBwcy0+c3RvcmUtPmNvdy0+YmRldiwKKwkJLnNlY3RvciA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSAqIGFyZWFfbG9jYXRpb24ocHMsIGFyZWEpLAorCQkuY291bnQgPSBwcy0+c3RvcmUtPmNodW5rX3NpemUsCiAJfTsKIAlzdHJ1Y3QgZG1faW9fcmVxdWVzdCBpb19yZXEgPSB7CiAJCS5iaV9ydyA9IFdSSVRFLApAQCAtMjc4LDE1ICsyODAsMTUgQEAKIAkvKgogCSAqIFVzZSBkZWZhdWx0IGNodW5rIHNpemUgKG9yIGhhcmRzZWN0X3NpemUsIGlmIGxhcmdlcikgaWYgbm9uZSBzdXBwbGllZAogCSAqLwotCWlmICghcHMtPnNuYXAtPmNodW5rX3NpemUpIHsKLQkJcHMtPnNuYXAtPmNodW5rX3NpemUgPSBtYXgoRE1fQ0hVTktfU0laRV9ERUZBVUxUX1NFQ1RPUlMsCi0JCSAgICBiZGV2X2hhcmRzZWN0X3NpemUocHMtPnNuYXAtPmNvdy0+YmRldikgPj4gOSk7Ci0JCXBzLT5zbmFwLT5jaHVua19tYXNrID0gcHMtPnNuYXAtPmNodW5rX3NpemUgLSAxOwotCQlwcy0+c25hcC0+Y2h1bmtfc2hpZnQgPSBmZnMocHMtPnNuYXAtPmNodW5rX3NpemUpIC0gMTsKKwlpZiAoIXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSkgeworCQlwcy0+c3RvcmUtPmNodW5rX3NpemUgPSBtYXgoRE1fQ0hVTktfU0laRV9ERUZBVUxUX1NFQ1RPUlMsCisJCSAgICBiZGV2X2hhcmRzZWN0X3NpemUocHMtPnN0b3JlLT5jb3ctPmJkZXYpID4+IDkpOworCQlwcy0+c3RvcmUtPmNodW5rX21hc2sgPSBwcy0+c3RvcmUtPmNodW5rX3NpemUgLSAxOworCQlwcy0+c3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSkgLSAxOwogCQljaHVua19zaXplX3N1cHBsaWVkID0gMDsKIAl9CiAKLQlwcy0+aW9fY2xpZW50ID0gZG1faW9fY2xpZW50X2NyZWF0ZShzZWN0b3JzX3RvX3BhZ2VzKHBzLT5zbmFwLT4KKwlwcy0+aW9fY2xpZW50ID0gZG1faW9fY2xpZW50X2NyZWF0ZShzZWN0b3JzX3RvX3BhZ2VzKHBzLT5zdG9yZS0+CiAJCQkJCQkJICAgICBjaHVua19zaXplKSk7CiAJaWYgKElTX0VSUihwcy0+aW9fY2xpZW50KSkKIAkJcmV0dXJuIFBUUl9FUlIocHMtPmlvX2NsaWVudCk7CkBAIC0zMTcsMjIgKzMxOSwyMiBAQAogCXBzLT52ZXJzaW9uID0gbGUzMl90b19jcHUoZGgtPnZlcnNpb24pOwogCWNodW5rX3NpemUgPSBsZTMyX3RvX2NwdShkaC0+Y2h1bmtfc2l6ZSk7CiAKLQlpZiAoIWNodW5rX3NpemVfc3VwcGxpZWQgfHwgcHMtPnNuYXAtPmNodW5rX3NpemUgPT0gY2h1bmtfc2l6ZSkKKwlpZiAoIWNodW5rX3NpemVfc3VwcGxpZWQgfHwgcHMtPnN0b3JlLT5jaHVua19zaXplID09IGNodW5rX3NpemUpCiAJCXJldHVybiAwOwogCiAJRE1XQVJOKCJjaHVuayBzaXplICVsbHUgaW4gZGV2aWNlIG1ldGFkYXRhIG92ZXJyaWRlcyAiCiAJICAgICAgICJ0YWJsZSBjaHVuayBzaXplIG9mICVsbHUuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaHVua19zaXplLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzLT5zbmFwLT5jaHVua19zaXplKTsKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwcy0+c3RvcmUtPmNodW5rX3NpemUpOwogCiAJLyogV2UgaGFkIGEgYm9ndXMgY2h1bmtfc2l6ZS4gRml4IHN0dWZmIHVwLiAqLwogCWZyZWVfYXJlYShwcyk7CiAKLQlwcy0+c25hcC0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemU7Ci0JcHMtPnNuYXAtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKLQlwcy0+c25hcC0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZSkgLSAxOworCXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemU7CisJcHMtPnN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZSAtIDE7CisJcHMtPnN0b3JlLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplKSAtIDE7CiAKLQlyID0gZG1faW9fY2xpZW50X3Jlc2l6ZShzZWN0b3JzX3RvX3BhZ2VzKHBzLT5zbmFwLT5jaHVua19zaXplKSwKKwlyID0gZG1faW9fY2xpZW50X3Jlc2l6ZShzZWN0b3JzX3RvX3BhZ2VzKHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSksCiAJCQkJcHMtPmlvX2NsaWVudCk7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtMzQ5LDEzICszNTEsMTMgQEAKIHsKIAlzdHJ1Y3QgZGlza19oZWFkZXIgKmRoOwogCi0JbWVtc2V0KHBzLT5hcmVhLCAwLCBwcy0+c25hcC0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQpOworCW1lbXNldChwcy0+YXJlYSwgMCwgcHMtPnN0b3JlLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCk7CiAKIAlkaCA9IChzdHJ1Y3QgZGlza19oZWFkZXIgKikgcHMtPmFyZWE7CiAJZGgtPm1hZ2ljID0gY3B1X3RvX2xlMzIoU05BUF9NQUdJQyk7CiAJZGgtPnZhbGlkID0gY3B1X3RvX2xlMzIocHMtPnZhbGlkKTsKIAlkaC0+dmVyc2lvbiA9IGNwdV90b19sZTMyKHBzLT52ZXJzaW9uKTsKLQlkaC0+Y2h1bmtfc2l6ZSA9IGNwdV90b19sZTMyKHBzLT5zbmFwLT5jaHVua19zaXplKTsKKwlkaC0+Y2h1bmtfc2l6ZSA9IGNwdV90b19sZTMyKHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CiAKIAlyZXR1cm4gY2h1bmtfaW8ocHMsIDAsIFdSSVRFLCAxKTsKIH0KQEAgLTQ3NCwxOCArNDc2LDI1IEBACiBzdGF0aWMgdm9pZCBwZXJzaXN0ZW50X2ZyYWN0aW9uX2Z1bGwoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCiAJCQkJICAgICBzZWN0b3JfdCAqbnVtZXJhdG9yLCBzZWN0b3JfdCAqZGVub21pbmF0b3IpCiB7Ci0JKm51bWVyYXRvciA9IGdldF9pbmZvKHN0b3JlKS0+bmV4dF9mcmVlICogc3RvcmUtPnNuYXAtPmNodW5rX3NpemU7Ci0JKmRlbm9taW5hdG9yID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5zbmFwLT5jb3ctPmJkZXYpOworCSpudW1lcmF0b3IgPSBnZXRfaW5mbyhzdG9yZSktPm5leHRfZnJlZSAqIHN0b3JlLT5jaHVua19zaXplOworCSpkZW5vbWluYXRvciA9IGdldF9kZXZfc2l6ZShzdG9yZS0+Y293LT5iZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgcGVyc2lzdGVudF9kZXN0cm95KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKQorc3RhdGljIHZvaWQgcGVyc2lzdGVudF9kdHIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCiB7CiAJc3RydWN0IHBzdG9yZSAqcHMgPSBnZXRfaW5mbyhzdG9yZSk7CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShwcy0+bWV0YWRhdGFfd3EpOwotCWRtX2lvX2NsaWVudF9kZXN0cm95KHBzLT5pb19jbGllbnQpOwotCXZmcmVlKHBzLT5jYWxsYmFja3MpOworCisJLyogQ3JlYXRlZCBpbiByZWFkX2hlYWRlciAqLworCWlmIChwcy0+aW9fY2xpZW50KQorCQlkbV9pb19jbGllbnRfZGVzdHJveShwcy0+aW9fY2xpZW50KTsKIAlmcmVlX2FyZWEocHMpOworCisJLyogQWxsb2NhdGVkIGluIHBlcnNpc3RlbnRfcmVhZF9tZXRhZGF0YSAqLworCWlmIChwcy0+Y2FsbGJhY2tzKQorCQl2ZnJlZShwcy0+Y2FsbGJhY2tzKTsKKwogCWtmcmVlKHBzKTsKIH0KIApAQCAtNTA3LDcgKzUxNiw3IEBACiAJLyoKIAkgKiBOb3cgd2Uga25vdyBjb3JyZWN0IGNodW5rX3NpemUsIGNvbXBsZXRlIHRoZSBpbml0aWFsaXNhdGlvbi4KIAkgKi8KLQlwcy0+ZXhjZXB0aW9uc19wZXJfYXJlYSA9IChwcy0+c25hcC0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQpIC8KKwlwcy0+ZXhjZXB0aW9uc19wZXJfYXJlYSA9IChwcy0+c3RvcmUtPmNodW5rX3NpemUgPDwgU0VDVE9SX1NISUZUKSAvCiAJCQkJICBzaXplb2Yoc3RydWN0IGRpc2tfZXhjZXB0aW9uKTsKIAlwcy0+Y2FsbGJhY2tzID0gZG1fdmNhbGxvYyhwcy0+ZXhjZXB0aW9uc19wZXJfYXJlYSwKIAkJCXNpemVvZigqcHMtPmNhbGxiYWNrcykpOwpAQCAtNTY0LDEwICs1NzMsMTAgQEAKIAlzdHJ1Y3QgcHN0b3JlICpwcyA9IGdldF9pbmZvKHN0b3JlKTsKIAl1aW50MzJfdCBzdHJpZGU7CiAJY2h1bmtfdCBuZXh0X2ZyZWU7Ci0Jc2VjdG9yX3Qgc2l6ZSA9IGdldF9kZXZfc2l6ZShzdG9yZS0+c25hcC0+Y293LT5iZGV2KTsKKwlzZWN0b3JfdCBzaXplID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5jb3ctPmJkZXYpOwogCiAJLyogSXMgdGhlcmUgZW5vdWdoIHJvb20gPyAqLwotCWlmIChzaXplIDwgKChwcy0+bmV4dF9mcmVlICsgMSkgKiBzdG9yZS0+c25hcC0+Y2h1bmtfc2l6ZSkpCisJaWYgKHNpemUgPCAoKHBzLT5uZXh0X2ZyZWUgKyAxKSAqIHN0b3JlLT5jaHVua19zaXplKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAllLT5uZXdfY2h1bmsgPSBwcy0+bmV4dF9mcmVlOwpAQCAtNjU2LDE2ICs2NjUsMTcgQEAKIAkJRE1XQVJOKCJ3cml0ZSBoZWFkZXIgZmFpbGVkIik7CiB9CiAKLWludCBkbV9jcmVhdGVfcGVyc2lzdGVudChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSkKK3N0YXRpYyBpbnQgcGVyc2lzdGVudF9jdHIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkgIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXN0cnVjdCBwc3RvcmUgKnBzOwogCiAJLyogYWxsb2NhdGUgdGhlIHBzdG9yZSAqLwotCXBzID0ga21hbGxvYyhzaXplb2YoKnBzKSwgR0ZQX0tFUk5FTCk7CisJcHMgPSBremFsbG9jKHNpemVvZigqcHMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBzLT5zbmFwID0gc3RvcmUtPnNuYXA7CisJcHMtPnN0b3JlID0gc3RvcmU7CiAJcHMtPnZhbGlkID0gMTsKIAlwcy0+dmVyc2lvbiA9IFNOQVBTSE9UX0RJU0tfVkVSU0lPTjsKIAlwcy0+YXJlYSA9IE5VTEw7CkBAIC02ODMsMjIgKzY5Myw3NyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzdG9yZS0+ZGVzdHJveSA9IHBlcnNpc3RlbnRfZGVzdHJveTsKLQlzdG9yZS0+cmVhZF9tZXRhZGF0YSA9IHBlcnNpc3RlbnRfcmVhZF9tZXRhZGF0YTsKLQlzdG9yZS0+cHJlcGFyZV9leGNlcHRpb24gPSBwZXJzaXN0ZW50X3ByZXBhcmVfZXhjZXB0aW9uOwotCXN0b3JlLT5jb21taXRfZXhjZXB0aW9uID0gcGVyc2lzdGVudF9jb21taXRfZXhjZXB0aW9uOwotCXN0b3JlLT5kcm9wX3NuYXBzaG90ID0gcGVyc2lzdGVudF9kcm9wX3NuYXBzaG90OwotCXN0b3JlLT5mcmFjdGlvbl9mdWxsID0gcGVyc2lzdGVudF9mcmFjdGlvbl9mdWxsOwogCXN0b3JlLT5jb250ZXh0ID0gcHM7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIHBlcnNpc3RlbnRfc3RhdHVzKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJCSAgc3RhdHVzX3R5cGVfdCBzdGF0dXMsIGNoYXIgKnJlc3VsdCwKKwkJCQkgIHVuc2lnbmVkIG1heGxlbikKK3sKKwl1bnNpZ25lZCBzeiA9IDA7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgorCQlicmVhazsKKwljYXNlIFNUQVRVU1RZUEVfVEFCTEU6CisJCURNRU1JVCgiICVzIFAgJWxsdSIsIHN0b3JlLT5jb3ctPm5hbWUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXN0b3JlLT5jaHVua19zaXplKTsKKwl9CisKKwlyZXR1cm4gc3o7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgX3BlcnNpc3RlbnRfdHlwZSA9IHsKKwkubmFtZSA9ICJwZXJzaXN0ZW50IiwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmN0ciA9IHBlcnNpc3RlbnRfY3RyLAorCS5kdHIgPSBwZXJzaXN0ZW50X2R0ciwKKwkucmVhZF9tZXRhZGF0YSA9IHBlcnNpc3RlbnRfcmVhZF9tZXRhZGF0YSwKKwkucHJlcGFyZV9leGNlcHRpb24gPSBwZXJzaXN0ZW50X3ByZXBhcmVfZXhjZXB0aW9uLAorCS5jb21taXRfZXhjZXB0aW9uID0gcGVyc2lzdGVudF9jb21taXRfZXhjZXB0aW9uLAorCS5kcm9wX3NuYXBzaG90ID0gcGVyc2lzdGVudF9kcm9wX3NuYXBzaG90LAorCS5mcmFjdGlvbl9mdWxsID0gcGVyc2lzdGVudF9mcmFjdGlvbl9mdWxsLAorCS5zdGF0dXMgPSBwZXJzaXN0ZW50X3N0YXR1cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgX3BlcnNpc3RlbnRfY29tcGF0X3R5cGUgPSB7CisJLm5hbWUgPSAiUCIsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5jdHIgPSBwZXJzaXN0ZW50X2N0ciwKKwkuZHRyID0gcGVyc2lzdGVudF9kdHIsCisJLnJlYWRfbWV0YWRhdGEgPSBwZXJzaXN0ZW50X3JlYWRfbWV0YWRhdGEsCisJLnByZXBhcmVfZXhjZXB0aW9uID0gcGVyc2lzdGVudF9wcmVwYXJlX2V4Y2VwdGlvbiwKKwkuY29tbWl0X2V4Y2VwdGlvbiA9IHBlcnNpc3RlbnRfY29tbWl0X2V4Y2VwdGlvbiwKKwkuZHJvcF9zbmFwc2hvdCA9IHBlcnNpc3RlbnRfZHJvcF9zbmFwc2hvdCwKKwkuZnJhY3Rpb25fZnVsbCA9IHBlcnNpc3RlbnRfZnJhY3Rpb25fZnVsbCwKKwkuc3RhdHVzID0gcGVyc2lzdGVudF9zdGF0dXMsCit9OworCiBpbnQgZG1fcGVyc2lzdGVudF9zbmFwc2hvdF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJaW50IHI7CisKKwlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfcmVnaXN0ZXIoJl9wZXJzaXN0ZW50X3R5cGUpOworCWlmIChyKSB7CisJCURNRVJSKCJVbmFibGUgdG8gcmVnaXN0ZXIgcGVyc2lzdGVudCBleGNlcHRpb24gc3RvcmUgdHlwZSIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfcmVnaXN0ZXIoJl9wZXJzaXN0ZW50X2NvbXBhdF90eXBlKTsKKwlpZiAocikgeworCQlETUVSUigiVW5hYmxlIHRvIHJlZ2lzdGVyIG9sZC1zdHlsZSBwZXJzaXN0ZW50IGV4Y2VwdGlvbiAiCisJCSAgICAgICJzdG9yZSB0eXBlIik7CisJCWRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoJl9wZXJzaXN0ZW50X3R5cGUpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gcjsKIH0KIAogdm9pZCBkbV9wZXJzaXN0ZW50X3NuYXBzaG90X2V4aXQodm9pZCkKIHsKKwlkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKCZfcGVyc2lzdGVudF90eXBlKTsKKwlkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKCZfcGVyc2lzdGVudF9jb21wYXRfdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAtdHJhbnNpZW50LmMgYi9kcml2ZXJzL21kL2RtLXNuYXAtdHJhbnNpZW50LmMKaW5kZXggN2Y2ZTJlNi4uY2RlNWFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLXRyYW5zaWVudC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC10cmFuc2llbnQuYwpAQCAtNiw3ICs2LDYgQEAKICAqLwogCiAjaW5jbHVkZSAiZG0tZXhjZXB0aW9uLXN0b3JlLmgiCi0jaW5jbHVkZSAiZG0tc25hcC5oIgogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CkBAIC0yMyw3ICsyMiw3IEBACiAJc2VjdG9yX3QgbmV4dF9mcmVlOwogfTsKIAotc3RhdGljIHZvaWQgdHJhbnNpZW50X2Rlc3Ryb3koc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCitzdGF0aWMgdm9pZCB0cmFuc2llbnRfZHRyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKQogewogCWtmcmVlKHN0b3JlLT5jb250ZXh0KTsKIH0KQEAgLTM5LDE0ICszOCwxNCBAQAogc3RhdGljIGludCB0cmFuc2llbnRfcHJlcGFyZV9leGNlcHRpb24oc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCiAJCQkJICAgICAgIHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSkKIHsKLQlzdHJ1Y3QgdHJhbnNpZW50X2MgKnRjID0gKHN0cnVjdCB0cmFuc2llbnRfYyAqKSBzdG9yZS0+Y29udGV4dDsKLQlzZWN0b3JfdCBzaXplID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5zbmFwLT5jb3ctPmJkZXYpOworCXN0cnVjdCB0cmFuc2llbnRfYyAqdGMgPSBzdG9yZS0+Y29udGV4dDsKKwlzZWN0b3JfdCBzaXplID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5jb3ctPmJkZXYpOwogCi0JaWYgKHNpemUgPCAodGMtPm5leHRfZnJlZSArIHN0b3JlLT5zbmFwLT5jaHVua19zaXplKSkKKwlpZiAoc2l6ZSA8ICh0Yy0+bmV4dF9mcmVlICsgc3RvcmUtPmNodW5rX3NpemUpKQogCQlyZXR1cm4gLTE7CiAKLQllLT5uZXdfY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsoc3RvcmUtPnNuYXAsIHRjLT5uZXh0X2ZyZWUpOwotCXRjLT5uZXh0X2ZyZWUgKz0gc3RvcmUtPnNuYXAtPmNodW5rX3NpemU7CisJZS0+bmV3X2NodW5rID0gc2VjdG9yX3RvX2NodW5rKHN0b3JlLCB0Yy0+bmV4dF9mcmVlKTsKKwl0Yy0+bmV4dF9mcmVlICs9IHN0b3JlLT5jaHVua19zaXplOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NCwyMCArNjMsMTQgQEAKIAkJCQkgICAgc2VjdG9yX3QgKm51bWVyYXRvciwgc2VjdG9yX3QgKmRlbm9taW5hdG9yKQogewogCSpudW1lcmF0b3IgPSAoKHN0cnVjdCB0cmFuc2llbnRfYyAqKSBzdG9yZS0+Y29udGV4dCktPm5leHRfZnJlZTsKLQkqZGVub21pbmF0b3IgPSBnZXRfZGV2X3NpemUoc3RvcmUtPnNuYXAtPmNvdy0+YmRldik7CisJKmRlbm9taW5hdG9yID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5jb3ctPmJkZXYpOwogfQogCi1pbnQgZG1fY3JlYXRlX3RyYW5zaWVudChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSkKK3N0YXRpYyBpbnQgdHJhbnNpZW50X2N0cihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKKwkJCSB1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgdHJhbnNpZW50X2MgKnRjOwogCi0Jc3RvcmUtPmRlc3Ryb3kgPSB0cmFuc2llbnRfZGVzdHJveTsKLQlzdG9yZS0+cmVhZF9tZXRhZGF0YSA9IHRyYW5zaWVudF9yZWFkX21ldGFkYXRhOwotCXN0b3JlLT5wcmVwYXJlX2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9wcmVwYXJlX2V4Y2VwdGlvbjsKLQlzdG9yZS0+Y29tbWl0X2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9jb21taXRfZXhjZXB0aW9uOwotCXN0b3JlLT5kcm9wX3NuYXBzaG90ID0gTlVMTDsKLQlzdG9yZS0+ZnJhY3Rpb25fZnVsbCA9IHRyYW5zaWVudF9mcmFjdGlvbl9mdWxsOwotCiAJdGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHJhbnNpZW50X2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRjKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTg4LDExICs4MSw3MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgdHJhbnNpZW50X3N0YXR1cyhzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKKwkJCQkgc3RhdHVzX3R5cGVfdCBzdGF0dXMsIGNoYXIgKnJlc3VsdCwKKwkJCQkgdW5zaWduZWQgbWF4bGVuKQoreworCXVuc2lnbmVkIHN6ID0gMDsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBTVEFUVVNUWVBFX0lORk86CisJCWJyZWFrOworCWNhc2UgU1RBVFVTVFlQRV9UQUJMRToKKwkJRE1FTUlUKCIgJXMgTiAlbGx1Iiwgc3RvcmUtPmNvdy0+bmFtZSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3RvcmUtPmNodW5rX3NpemUpOworCX0KKworCXJldHVybiBzejsKK30KKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSBfdHJhbnNpZW50X3R5cGUgPSB7CisJLm5hbWUgPSAidHJhbnNpZW50IiwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmN0ciA9IHRyYW5zaWVudF9jdHIsCisJLmR0ciA9IHRyYW5zaWVudF9kdHIsCisJLnJlYWRfbWV0YWRhdGEgPSB0cmFuc2llbnRfcmVhZF9tZXRhZGF0YSwKKwkucHJlcGFyZV9leGNlcHRpb24gPSB0cmFuc2llbnRfcHJlcGFyZV9leGNlcHRpb24sCisJLmNvbW1pdF9leGNlcHRpb24gPSB0cmFuc2llbnRfY29tbWl0X2V4Y2VwdGlvbiwKKwkuZnJhY3Rpb25fZnVsbCA9IHRyYW5zaWVudF9mcmFjdGlvbl9mdWxsLAorCS5zdGF0dXMgPSB0cmFuc2llbnRfc3RhdHVzLAorfTsKKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSBfdHJhbnNpZW50X2NvbXBhdF90eXBlID0geworCS5uYW1lID0gIk4iLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkuY3RyID0gdHJhbnNpZW50X2N0ciwKKwkuZHRyID0gdHJhbnNpZW50X2R0ciwKKwkucmVhZF9tZXRhZGF0YSA9IHRyYW5zaWVudF9yZWFkX21ldGFkYXRhLAorCS5wcmVwYXJlX2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9wcmVwYXJlX2V4Y2VwdGlvbiwKKwkuY29tbWl0X2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9jb21taXRfZXhjZXB0aW9uLAorCS5mcmFjdGlvbl9mdWxsID0gdHJhbnNpZW50X2ZyYWN0aW9uX2Z1bGwsCisJLnN0YXR1cyA9IHRyYW5zaWVudF9zdGF0dXMsCit9OworCiBpbnQgZG1fdHJhbnNpZW50X3NuYXBzaG90X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gMDsKKwlpbnQgcjsKKworCXIgPSBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV9yZWdpc3RlcigmX3RyYW5zaWVudF90eXBlKTsKKwlpZiAocikgeworCQlETVdBUk4oIlVuYWJsZSB0byByZWdpc3RlciB0cmFuc2llbnQgZXhjZXB0aW9uIHN0b3JlIHR5cGUiKTsKKwkJcmV0dXJuIHI7CisJfQorCisJciA9IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3JlZ2lzdGVyKCZfdHJhbnNpZW50X2NvbXBhdF90eXBlKTsKKwlpZiAocikgeworCQlETVdBUk4oIlVuYWJsZSB0byByZWdpc3RlciBvbGQtc3R5bGUgdHJhbnNpZW50ICIKKwkJICAgICAgICJleGNlcHRpb24gc3RvcmUgdHlwZSIpOworCQlkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKCZfdHJhbnNpZW50X3R5cGUpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gcjsKIH0KIAogdm9pZCBkbV90cmFuc2llbnRfc25hcHNob3RfZXhpdCh2b2lkKQogeworCWRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoJl90cmFuc2llbnRfdHlwZSk7CisJZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcigmX3RyYW5zaWVudF9jb21wYXRfdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC5jCmluZGV4IDY1ZmY4MmYuLjk4MWEwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC5jCkBAIC03LDcgKzcsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0yMCw5ICsxOSw5IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9kbS1rY29weWQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgImRtLWV4Y2VwdGlvbi1zdG9yZS5oIgotI2luY2x1ZGUgImRtLXNuYXAuaCIKICNpbmNsdWRlICJkbS1iaW8tbGlzdC5oIgogCiAjZGVmaW5lIERNX01TR19QUkVGSVggInNuYXBzaG90cyIKQEAgLTQ3LDkgKzQ2LDc2IEBACiAgKi8KICNkZWZpbmUgTUlOX0lPUyAyNTYKIAorI2RlZmluZSBETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRQkxNgorI2RlZmluZSBETV9UUkFDS0VEX0NIVU5LX0hBU0goeCkJKCh1bnNpZ25lZCBsb25nKSh4KSAmIFwKKwkJCQkJIChETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRSAtIDEpKQorCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlIHsKKwl1aW50MzJfdCBoYXNoX21hc2s7CisJdW5zaWduZWQgaGFzaF9zaGlmdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0YWJsZTsKK307CisKK3N0cnVjdCBkbV9zbmFwc2hvdCB7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSBsb2NrOworCisJc3RydWN0IGRtX2RldiAqb3JpZ2luOworCisJLyogTGlzdCBvZiBzbmFwc2hvdHMgcGVyIE9yaWdpbiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFlvdSBjYW4ndCB1c2UgYSBzbmFwc2hvdCBpZiB0aGlzIGlzIDAgKGUuZy4gaWYgZnVsbCkgKi8KKwlpbnQgdmFsaWQ7CisKKwkvKiBPcmlnaW4gd3JpdGVzIGRvbid0IHRyaWdnZXIgZXhjZXB0aW9ucyB1bnRpbCB0aGlzIGlzIHNldCAqLworCWludCBhY3RpdmU7CisKKwltZW1wb29sX3QgKnBlbmRpbmdfcG9vbDsKKworCWF0b21pY190IHBlbmRpbmdfZXhjZXB0aW9uc19jb3VudDsKKworCXN0cnVjdCBleGNlcHRpb25fdGFibGUgcGVuZGluZzsKKwlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlIGNvbXBsZXRlOworCisJLyoKKwkgKiBwZV9sb2NrIHByb3RlY3RzIGFsbCBwZW5kaW5nX2V4Y2VwdGlvbiBvcGVyYXRpb25zIGFuZCBhY2Nlc3MKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzbmFwc2hvdF9iaW9zIGxpc3QuCisJICovCisJc3BpbmxvY2tfdCBwZV9sb2NrOworCisJLyogVGhlIG9uIGRpc2sgbWV0YWRhdGEgaGFuZGxlciAqLworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlOworCisJc3RydWN0IGRtX2tjb3B5ZF9jbGllbnQgKmtjb3B5ZF9jbGllbnQ7CisKKwkvKiBRdWV1ZSBvZiBzbmFwc2hvdCB3cml0ZXMgZm9yIGtzbmFwZCB0byBmbHVzaCAqLworCXN0cnVjdCBiaW9fbGlzdCBxdWV1ZWRfYmlvczsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcXVldWVkX2Jpb3Nfd29yazsKKworCS8qIENodW5rcyB3aXRoIG91dHN0YW5kaW5nIHJlYWRzICovCisJbWVtcG9vbF90ICp0cmFja2VkX2NodW5rX3Bvb2w7CisJc3BpbmxvY2tfdCB0cmFja2VkX2NodW5rX2xvY2s7CisJc3RydWN0IGhsaXN0X2hlYWQgdHJhY2tlZF9jaHVua19oYXNoW0RNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFXTsKK307CisKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa3NuYXBkOwogc3RhdGljIHZvaWQgZmx1c2hfcXVldWVkX2Jpb3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAorc3RhdGljIHNlY3Rvcl90IGNodW5rX3RvX3NlY3RvcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKKwkJCQljaHVua190IGNodW5rKQoreworCXJldHVybiBjaHVuayA8PCBzdG9yZS0+Y2h1bmtfc2hpZnQ7Cit9CisKK3N0YXRpYyBpbnQgYmRldl9lcXVhbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpsaHMsIHN0cnVjdCBibG9ja19kZXZpY2UgKnJocykKK3sKKwkvKgorCSAqIFRoZXJlIGlzIG9ubHkgZXZlciBvbmUgaW5zdGFuY2Ugb2YgYSBwYXJ0aWN1bGFyIGJsb2NrCisJICogZGV2aWNlIHNvIHdlIGNhbiBjb21wYXJlIHBvaW50ZXJzIHNhZmVseS4KKwkgKi8KKwlyZXR1cm4gbGhzID09IHJoczsKK30KKwogc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gewogCXN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiBlOwogCkBAIC00NzYsMTEgKzU0MiwxMSBAQAogCSAqIENhbGN1bGF0ZSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgdm9sdW1lIG9yCiAJICogdGhlIENPVyB2b2x1bWUuLi4KIAkgKi8KLQljb3dfZGV2X3NpemUgPSBnZXRfZGV2X3NpemUocy0+Y293LT5iZGV2KTsKKwljb3dfZGV2X3NpemUgPSBnZXRfZGV2X3NpemUocy0+c3RvcmUtPmNvdy0+YmRldik7CiAJb3JpZ2luX2Rldl9zaXplID0gZ2V0X2Rldl9zaXplKHMtPm9yaWdpbi0+YmRldik7CiAJbWF4X2J1Y2tldHMgPSBjYWxjX21heF9idWNrZXRzKCk7CiAKLQloYXNoX3NpemUgPSBtaW4ob3JpZ2luX2Rldl9zaXplLCBjb3dfZGV2X3NpemUpID4+IHMtPmNodW5rX3NoaWZ0OworCWhhc2hfc2l6ZSA9IG1pbihvcmlnaW5fZGV2X3NpemUsIGNvd19kZXZfc2l6ZSkgPj4gcy0+c3RvcmUtPmNodW5rX3NoaWZ0OwogCWhhc2hfc2l6ZSA9IG1pbihoYXNoX3NpemUsIG1heF9idWNrZXRzKTsKIAogCWhhc2hfc2l6ZSA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKGhhc2hfc2l6ZSk7CkBAIC01MDUsNTggKzU3MSw2IEBACiB9CiAKIC8qCi0gKiBSb3VuZCBhIG51bWJlciB1cCB0byB0aGUgbmVhcmVzdCAnc2l6ZScgYm91bmRhcnkuICBzaXplIG11c3QKLSAqIGJlIGEgcG93ZXIgb2YgMi4KLSAqLwotc3RhdGljIHVsb25nIHJvdW5kX3VwKHVsb25nIG4sIHVsb25nIHNpemUpCi17Ci0Jc2l6ZS0tOwotCXJldHVybiAobiArIHNpemUpICYgfnNpemU7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX3NuYXBzaG90ICpzLCBjb25zdCBjaGFyICpjaHVua19zaXplX2FyZywKLQkJCSAgY2hhciAqKmVycm9yKQotewotCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZTsKLQljaGFyICp2YWx1ZTsKLQotCWNodW5rX3NpemUgPSBzaW1wbGVfc3RydG91bChjaHVua19zaXplX2FyZywgJnZhbHVlLCAxMCk7Ci0JaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnKSB7Ci0JCSplcnJvciA9ICJJbnZhbGlkIGNodW5rIHNpemUiOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNodW5rX3NpemUpIHsKLQkJcy0+Y2h1bmtfc2l6ZSA9IHMtPmNodW5rX21hc2sgPSBzLT5jaHVua19zaGlmdCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogQ2h1bmsgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIHBhZ2Ugc2l6ZS4gIFNpbGVudGx5Ci0JICogcm91bmQgdXAgaWYgaXQncyBub3QuCi0JICovCi0JY2h1bmtfc2l6ZSA9IHJvdW5kX3VwKGNodW5rX3NpemUsIFBBR0VfU0laRSA+PiA5KTsKLQotCS8qIENoZWNrIGNodW5rX3NpemUgaXMgYSBwb3dlciBvZiAyICovCi0JaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemUpKSB7Ci0JCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIDIiOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBWYWxpZGF0ZSB0aGUgY2h1bmsgc2l6ZSBhZ2FpbnN0IHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSAqLwotCWlmIChjaHVua19zaXplICUgKGJkZXZfaGFyZHNlY3Rfc2l6ZShzLT5jb3ctPmJkZXYpID4+IDkpKSB7Ci0JCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIG11bHRpcGxlIG9mIGRldmljZSBibG9ja3NpemUiOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsKLQlzLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZSAtIDE7Ci0Jcy0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZSkgLSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBDb25zdHJ1Y3QgYSBzbmFwc2hvdCBtYXBwaW5nOiA8b3JpZ2luX2Rldj4gPENPVy1kZXY+IDxwL24+IDxjaHVuay1zaXplPgogICovCiBzdGF0aWMgaW50IHNuYXBzaG90X2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQpAQCAtNTY0LDkxICs1NzgsNjggQEAKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnM7CiAJaW50IGk7CiAJaW50IHIgPSAtRUlOVkFMOwotCWNoYXIgcGVyc2lzdGVudDsKIAljaGFyICpvcmlnaW5fcGF0aDsKLQljaGFyICpjb3dfcGF0aDsKKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZTsKKwl1bnNpZ25lZCBhcmdzX3VzZWQ7CiAKIAlpZiAoYXJnYyAhPSA0KSB7CiAJCXRpLT5lcnJvciA9ICJyZXF1aXJlcyBleGFjdGx5IDQgYXJndW1lbnRzIjsKIAkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkMTsKKwkJZ290byBiYWRfYXJnczsKIAl9CiAKIAlvcmlnaW5fcGF0aCA9IGFyZ3ZbMF07Ci0JY293X3BhdGggPSBhcmd2WzFdOwotCXBlcnNpc3RlbnQgPSB0b3VwcGVyKCphcmd2WzJdKTsKKwlhcmd2Kys7CisJYXJnYy0tOwogCi0JaWYgKHBlcnNpc3RlbnQgIT0gJ1AnICYmIHBlcnNpc3RlbnQgIT0gJ04nKSB7Ci0JCXRpLT5lcnJvciA9ICJQZXJzaXN0ZW50IGZsYWcgaXMgbm90IFAgb3IgTiI7CisJciA9IGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUodGksIGFyZ2MsIGFyZ3YsICZhcmdzX3VzZWQsICZzdG9yZSk7CisJaWYgKHIpIHsKKwkJdGktPmVycm9yID0gIkNvdWxkbid0IGNyZWF0ZSBleGNlcHRpb24gc3RvcmUiOwogCQlyID0gLUVJTlZBTDsKLQkJZ290byBiYWQxOworCQlnb3RvIGJhZF9hcmdzOwogCX0KIAorCWFyZ3YgKz0gYXJnc191c2VkOworCWFyZ2MgLT0gYXJnc191c2VkOworCiAJcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHMgPT0gTlVMTCkgeworCWlmICghcykgewogCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IGFsbG9jYXRlIHNuYXBzaG90IGNvbnRleHQgcHJpdmF0ZSAiCiAJCSAgICAic3RydWN0dXJlIjsKIAkJciA9IC1FTk9NRU07Ci0JCWdvdG8gYmFkMTsKKwkJZ290byBiYWRfc25hcDsKIAl9CiAKIAlyID0gZG1fZ2V0X2RldmljZSh0aSwgb3JpZ2luX3BhdGgsIDAsIHRpLT5sZW4sIEZNT0RFX1JFQUQsICZzLT5vcmlnaW4pOwogCWlmIChyKSB7CiAJCXRpLT5lcnJvciA9ICJDYW5ub3QgZ2V0IG9yaWdpbiBkZXZpY2UiOwotCQlnb3RvIGJhZDI7CisJCWdvdG8gYmFkX29yaWdpbjsKIAl9CiAKLQlyID0gZG1fZ2V0X2RldmljZSh0aSwgY293X3BhdGgsIDAsIDAsCi0JCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJnMtPmNvdyk7Ci0JaWYgKHIpIHsKLQkJZG1fcHV0X2RldmljZSh0aSwgcy0+b3JpZ2luKTsKLQkJdGktPmVycm9yID0gIkNhbm5vdCBnZXQgQ09XIGRldmljZSI7Ci0JCWdvdG8gYmFkMjsKLQl9Ci0KLQlyID0gc2V0X2NodW5rX3NpemUocywgYXJndlszXSwgJnRpLT5lcnJvcik7Ci0JaWYgKHIpCi0JCWdvdG8gYmFkMzsKLQotCXMtPnR5cGUgPSBwZXJzaXN0ZW50OwotCisJcy0+c3RvcmUgPSBzdG9yZTsKIAlzLT52YWxpZCA9IDE7CiAJcy0+YWN0aXZlID0gMDsKIAlhdG9taWNfc2V0KCZzLT5wZW5kaW5nX2V4Y2VwdGlvbnNfY291bnQsIDApOwogCWluaXRfcndzZW0oJnMtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZzLT5wZV9sb2NrKTsKLQlzLT50aSA9IHRpOwogCiAJLyogQWxsb2NhdGUgaGFzaCB0YWJsZSBmb3IgQ09XIGRhdGEgKi8KIAlpZiAoaW5pdF9oYXNoX3RhYmxlcyhzKSkgewogCQl0aS0+ZXJyb3IgPSAiVW5hYmxlIHRvIGFsbG9jYXRlIGhhc2ggdGFibGUgc3BhY2UiOwogCQlyID0gLUVOT01FTTsKLQkJZ290byBiYWQzOwotCX0KLQotCXMtPnN0b3JlLnNuYXAgPSBzOwotCi0JaWYgKHBlcnNpc3RlbnQgPT0gJ1AnKQotCQlyID0gZG1fY3JlYXRlX3BlcnNpc3RlbnQoJnMtPnN0b3JlKTsKLQllbHNlCi0JCXIgPSBkbV9jcmVhdGVfdHJhbnNpZW50KCZzLT5zdG9yZSk7Ci0KLQlpZiAocikgewotCQl0aS0+ZXJyb3IgPSAiQ291bGRuJ3QgY3JlYXRlIGV4Y2VwdGlvbiBzdG9yZSI7Ci0JCXIgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDQ7CisJCWdvdG8gYmFkX2hhc2hfdGFibGVzOwogCX0KIAogCXIgPSBkbV9rY29weWRfY2xpZW50X2NyZWF0ZShTTkFQU0hPVF9QQUdFUywgJnMtPmtjb3B5ZF9jbGllbnQpOwogCWlmIChyKSB7CiAJCXRpLT5lcnJvciA9ICJDb3VsZCBub3QgY3JlYXRlIGtjb3B5ZCBjbGllbnQiOwotCQlnb3RvIGJhZDU7CisJCWdvdG8gYmFkX2tjb3B5ZDsKIAl9CiAKIAlzLT5wZW5kaW5nX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUlOX0lPUywgcGVuZGluZ19jYWNoZSk7CiAJaWYgKCFzLT5wZW5kaW5nX3Bvb2wpIHsKIAkJdGktPmVycm9yID0gIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1wb29sIGZvciBwZW5kaW5nIGV4Y2VwdGlvbnMiOwotCQlnb3RvIGJhZDY7CisJCWdvdG8gYmFkX3BlbmRpbmdfcG9vbDsKIAl9CiAKIAlzLT50cmFja2VkX2NodW5rX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUlOX0lPUywKQEAgLTY2NSw3ICs2NTYsOCBAQAogCXNwaW5fbG9ja19pbml0KCZzLT50cmFja2VkX2NodW5rX2xvY2spOwogCiAJLyogTWV0YWRhdGEgbXVzdCBvbmx5IGJlIGxvYWRlZCBpbnRvIG9uZSB0YWJsZSBhdCBvbmNlICovCi0JciA9IHMtPnN0b3JlLnJlYWRfbWV0YWRhdGEoJnMtPnN0b3JlLCBkbV9hZGRfZXhjZXB0aW9uLCAodm9pZCAqKXMpOworCXIgPSBzLT5zdG9yZS0+dHlwZS0+cmVhZF9tZXRhZGF0YShzLT5zdG9yZSwgZG1fYWRkX2V4Y2VwdGlvbiwKKwkJCQkJICAodm9pZCAqKXMpOwogCWlmIChyIDwgMCkgewogCQl0aS0+ZXJyb3IgPSAiRmFpbGVkIHRvIHJlYWQgc25hcHNob3QgbWV0YWRhdGEiOwogCQlnb3RvIGJhZF9sb2FkX2FuZF9yZWdpc3RlcjsKQEAgLTY4NiwzNCArNjc4LDMzIEBACiAJfQogCiAJdGktPnByaXZhdGUgPSBzOwotCXRpLT5zcGxpdF9pbyA9IHMtPmNodW5rX3NpemU7CisJdGktPnNwbGl0X2lvID0gcy0+c3RvcmUtPmNodW5rX3NpemU7CiAKIAlyZXR1cm4gMDsKIAotIGJhZF9sb2FkX2FuZF9yZWdpc3RlcjoKK2JhZF9sb2FkX2FuZF9yZWdpc3RlcjoKIAltZW1wb29sX2Rlc3Ryb3kocy0+dHJhY2tlZF9jaHVua19wb29sKTsKIAotIGJhZF90cmFja2VkX2NodW5rX3Bvb2w6CitiYWRfdHJhY2tlZF9jaHVua19wb29sOgogCW1lbXBvb2xfZGVzdHJveShzLT5wZW5kaW5nX3Bvb2wpOwogCi0gYmFkNjoKK2JhZF9wZW5kaW5nX3Bvb2w6CiAJZG1fa2NvcHlkX2NsaWVudF9kZXN0cm95KHMtPmtjb3B5ZF9jbGllbnQpOwogCi0gYmFkNToKLQlzLT5zdG9yZS5kZXN0cm95KCZzLT5zdG9yZSk7Ci0KLSBiYWQ0OgorYmFkX2tjb3B5ZDoKIAlleGl0X2V4Y2VwdGlvbl90YWJsZSgmcy0+cGVuZGluZywgcGVuZGluZ19jYWNoZSk7CiAJZXhpdF9leGNlcHRpb25fdGFibGUoJnMtPmNvbXBsZXRlLCBleGNlcHRpb25fY2FjaGUpOwogCi0gYmFkMzoKLQlkbV9wdXRfZGV2aWNlKHRpLCBzLT5jb3cpOworYmFkX2hhc2hfdGFibGVzOgogCWRtX3B1dF9kZXZpY2UodGksIHMtPm9yaWdpbik7CiAKLSBiYWQyOgorYmFkX29yaWdpbjoKIAlrZnJlZShzKTsKIAotIGJhZDE6CitiYWRfc25hcDoKKwlkbV9leGNlcHRpb25fc3RvcmVfZGVzdHJveShzdG9yZSk7CisKK2JhZF9hcmdzOgogCXJldHVybiByOwogfQogCkBAIC03MjQsOCArNzE1LDYgQEAKIAogCWV4aXRfZXhjZXB0aW9uX3RhYmxlKCZzLT5wZW5kaW5nLCBwZW5kaW5nX2NhY2hlKTsKIAlleGl0X2V4Y2VwdGlvbl90YWJsZSgmcy0+Y29tcGxldGUsIGV4Y2VwdGlvbl9jYWNoZSk7Ci0KLQlzLT5zdG9yZS5kZXN0cm95KCZzLT5zdG9yZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNuYXBzaG90X2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKQEAgLTc2MSw3ICs3NTAsOCBAQAogCW1lbXBvb2xfZGVzdHJveShzLT5wZW5kaW5nX3Bvb2wpOwogCiAJZG1fcHV0X2RldmljZSh0aSwgcy0+b3JpZ2luKTsKLQlkbV9wdXRfZGV2aWNlKHRpLCBzLT5jb3cpOworCisJZG1fZXhjZXB0aW9uX3N0b3JlX2Rlc3Ryb3kocy0+c3RvcmUpOwogCiAJa2ZyZWUocyk7CiB9CkBAIC04MjAsMTIgKzgxMCwxMiBAQAogCWVsc2UgaWYgKGVyciA9PSAtRU5PTUVNKQogCQlETUVSUigiSW52YWxpZGF0aW5nIHNuYXBzaG90OiBVbmFibGUgdG8gYWxsb2NhdGUgZXhjZXB0aW9uLiIpOwogCi0JaWYgKHMtPnN0b3JlLmRyb3Bfc25hcHNob3QpCi0JCXMtPnN0b3JlLmRyb3Bfc25hcHNob3QoJnMtPnN0b3JlKTsKKwlpZiAocy0+c3RvcmUtPnR5cGUtPmRyb3Bfc25hcHNob3QpCisJCXMtPnN0b3JlLT50eXBlLT5kcm9wX3NuYXBzaG90KHMtPnN0b3JlKTsKIAogCXMtPnZhbGlkID0gMDsKIAotCWRtX3RhYmxlX2V2ZW50KHMtPnRpLT50YWJsZSk7CisJZG1fdGFibGVfZXZlbnQocy0+c3RvcmUtPnRpLT50YWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldF9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGUpCkBAIC05NDMsOCArOTMzLDggQEAKIAogCWVsc2UKIAkJLyogVXBkYXRlIHRoZSBtZXRhZGF0YSBpZiB3ZSBhcmUgcGVyc2lzdGVudCAqLwotCQlzLT5zdG9yZS5jb21taXRfZXhjZXB0aW9uKCZzLT5zdG9yZSwgJnBlLT5lLCBjb21taXRfY2FsbGJhY2ssCi0JCQkJCSAgcGUpOworCQlzLT5zdG9yZS0+dHlwZS0+Y29tbWl0X2V4Y2VwdGlvbihzLT5zdG9yZSwgJnBlLT5lLAorCQkJCQkJIGNvbW1pdF9jYWxsYmFjaywgcGUpOwogfQogCiAvKgpAQCAtOTYwLDExICs5NTAsMTEgQEAKIAlkZXZfc2l6ZSA9IGdldF9kZXZfc2l6ZShiZGV2KTsKIAogCXNyYy5iZGV2ID0gYmRldjsKLQlzcmMuc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMsIHBlLT5lLm9sZF9jaHVuayk7Ci0Jc3JjLmNvdW50ID0gbWluKHMtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CisJc3JjLnNlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLT5zdG9yZSwgcGUtPmUub2xkX2NodW5rKTsKKwlzcmMuY291bnQgPSBtaW4ocy0+c3RvcmUtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CiAKLQlkZXN0LmJkZXYgPSBzLT5jb3ctPmJkZXY7Ci0JZGVzdC5zZWN0b3IgPSBjaHVua190b19zZWN0b3IocywgcGUtPmUubmV3X2NodW5rKTsKKwlkZXN0LmJkZXYgPSBzLT5zdG9yZS0+Y293LT5iZGV2OworCWRlc3Quc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBwZS0+ZS5uZXdfY2h1bmspOwogCWRlc3QuY291bnQgPSBzcmMuY291bnQ7CiAKIAkvKiBIYW5kIG92ZXIgdG8ga2NvcHlkICovCkBAIC05NzIsNiArOTYyLDE3IEBACiAJCSAgICAmc3JjLCAxLCAmZGVzdCwgMCwgY29weV9jYWxsYmFjaywgcGUpOwogfQogCitzdGF0aWMgc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKgorX19sb29rdXBfcGVuZGluZ19leGNlcHRpb24oc3RydWN0IGRtX3NuYXBzaG90ICpzLCBjaHVua190IGNodW5rKQoreworCXN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSA9IGxvb2t1cF9leGNlcHRpb24oJnMtPnBlbmRpbmcsIGNodW5rKTsKKworCWlmICghZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gY29udGFpbmVyX29mKGUsIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uLCBlKTsKK30KKwogLyoKICAqIExvb2tzIHRvIHNlZSBpZiB0aGlzIHNuYXBzaG90IGFscmVhZHkgaGFzIGEgcGVuZGluZyBleGNlcHRpb24KICAqIGZvciB0aGlzIGNodW5rLCBvdGhlcndpc2UgaXQgYWxsb2NhdGVzIGEgbmV3IG9uZSBhbmQgaW5zZXJ0cwpAQCAtOTgxLDQwICs5ODIsMTUgQEAKICAqIHRoaXMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqCi1fX2ZpbmRfcGVuZGluZ19leGNlcHRpb24oc3RydWN0IGRtX3NuYXBzaG90ICpzLCBzdHJ1Y3QgYmlvICpiaW8pCitfX2ZpbmRfcGVuZGluZ19leGNlcHRpb24oc3RydWN0IGRtX3NuYXBzaG90ICpzLAorCQkJIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwZSwgY2h1bmtfdCBjaHVuaykKIHsKLQlzdHJ1Y3QgZG1fc25hcF9leGNlcHRpb24gKmU7Ci0Jc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlOwotCWNodW5rX3QgY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsocywgYmlvLT5iaV9zZWN0b3IpOworCXN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwZTI7CiAKLQkvKgotCSAqIElzIHRoZXJlIGEgcGVuZGluZyBleGNlcHRpb24gZm9yIHRoaXMgYWxyZWFkeSA/Ci0JICovCi0JZSA9IGxvb2t1cF9leGNlcHRpb24oJnMtPnBlbmRpbmcsIGNodW5rKTsKLQlpZiAoZSkgewotCQkvKiBjYXN0IHRoZSBleGNlcHRpb24gdG8gYSBwZW5kaW5nIGV4Y2VwdGlvbiAqLwotCQlwZSA9IGNvbnRhaW5lcl9vZihlLCBzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiwgZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogQ3JlYXRlIGEgbmV3IHBlbmRpbmcgZXhjZXB0aW9uLCB3ZSBkb24ndCB3YW50Ci0JICogdG8gaG9sZCB0aGUgbG9jayB3aGlsZSB3ZSBkbyB0aGlzLgotCSAqLwotCXVwX3dyaXRlKCZzLT5sb2NrKTsKLQlwZSA9IGFsbG9jX3BlbmRpbmdfZXhjZXB0aW9uKHMpOwotCWRvd25fd3JpdGUoJnMtPmxvY2spOwotCi0JaWYgKCFzLT52YWxpZCkgeworCXBlMiA9IF9fbG9va3VwX3BlbmRpbmdfZXhjZXB0aW9uKHMsIGNodW5rKTsKKwlpZiAocGUyKSB7CiAJCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQllID0gbG9va3VwX2V4Y2VwdGlvbigmcy0+cGVuZGluZywgY2h1bmspOwotCWlmIChlKSB7Ci0JCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOwotCQlwZSA9IGNvbnRhaW5lcl9vZihlLCBzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiwgZSk7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gcGUyOwogCX0KIAogCXBlLT5lLm9sZF9jaHVuayA9IGNodW5rOwpAQCAtMTAyNCw3ICsxMDAwLDcgQEAKIAlhdG9taWNfc2V0KCZwZS0+cmVmX2NvdW50LCAwKTsKIAlwZS0+c3RhcnRlZCA9IDA7CiAKLQlpZiAocy0+c3RvcmUucHJlcGFyZV9leGNlcHRpb24oJnMtPnN0b3JlLCAmcGUtPmUpKSB7CisJaWYgKHMtPnN0b3JlLT50eXBlLT5wcmVwYXJlX2V4Y2VwdGlvbihzLT5zdG9yZSwgJnBlLT5lKSkgewogCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTAzMiwxNyArMTAwOCwxOCBAQAogCWdldF9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7CiAJaW5zZXJ0X2V4Y2VwdGlvbigmcy0+cGVuZGluZywgJnBlLT5lKTsKIAotIG91dDoKIAlyZXR1cm4gcGU7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbWFwX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIHN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZSwKIAkJCSAgICBzdHJ1Y3QgYmlvICpiaW8sIGNodW5rX3QgY2h1bmspCiB7Ci0JYmlvLT5iaV9iZGV2ID0gcy0+Y293LT5iZGV2OwotCWJpby0+Ymlfc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMsIGRtX2NodW5rX251bWJlcihlLT5uZXdfY2h1bmspICsKLQkJCSAoY2h1bmsgLSBlLT5vbGRfY2h1bmspKSArCi0JCQkgKGJpby0+Ymlfc2VjdG9yICYgcy0+Y2h1bmtfbWFzayk7CisJYmlvLT5iaV9iZGV2ID0gcy0+c3RvcmUtPmNvdy0+YmRldjsKKwliaW8tPmJpX3NlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLT5zdG9yZSwKKwkJCQkJIGRtX2NodW5rX251bWJlcihlLT5uZXdfY2h1bmspICsKKwkJCQkJIChjaHVuayAtIGUtPm9sZF9jaHVuaykpICsKKwkJCQkJIChiaW8tPmJpX3NlY3RvciAmCisJCQkJCSAgcy0+c3RvcmUtPmNodW5rX21hc2spOwogfQogCiBzdGF0aWMgaW50IHNuYXBzaG90X21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvLApAQCAtMTA1NCw3ICsxMDMxLDcgQEAKIAljaHVua190IGNodW5rOwogCXN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwZSA9IE5VTEw7CiAKLQljaHVuayA9IHNlY3Rvcl90b19jaHVuayhzLCBiaW8tPmJpX3NlY3Rvcik7CisJY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsocy0+c3RvcmUsIGJpby0+Ymlfc2VjdG9yKTsKIAogCS8qIEZ1bGwgc25hcHNob3RzIGFyZSBub3QgdXNhYmxlICovCiAJLyogVG8gZ2V0IGhlcmUgdGhlIHRhYmxlIG11c3QgYmUgbGl2ZSBzbyBzLT5hY3RpdmUgaXMgYWx3YXlzIHNldC4gKi8KQEAgLTEwODMsMTEgKzEwNjAsMzEgQEAKIAkgKiB3cml0ZWFibGUuCiAJICovCiAJaWYgKGJpb19ydyhiaW8pID09IFdSSVRFKSB7Ci0JCXBlID0gX19maW5kX3BlbmRpbmdfZXhjZXB0aW9uKHMsIGJpbyk7CisJCXBlID0gX19sb29rdXBfcGVuZGluZ19leGNlcHRpb24ocywgY2h1bmspOwogCQlpZiAoIXBlKSB7Ci0JCQlfX2ludmFsaWRhdGVfc25hcHNob3QocywgLUVOT01FTSk7Ci0JCQlyID0gLUVJTzsKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCXVwX3dyaXRlKCZzLT5sb2NrKTsKKwkJCXBlID0gYWxsb2NfcGVuZGluZ19leGNlcHRpb24ocyk7CisJCQlkb3duX3dyaXRlKCZzLT5sb2NrKTsKKworCQkJaWYgKCFzLT52YWxpZCkgeworCQkJCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOworCQkJCXIgPSAtRUlPOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKworCQkJZSA9IGxvb2t1cF9leGNlcHRpb24oJnMtPmNvbXBsZXRlLCBjaHVuayk7CisJCQlpZiAoZSkgeworCQkJCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOworCQkJCXJlbWFwX2V4Y2VwdGlvbihzLCBlLCBiaW8sIGNodW5rKTsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisKKwkJCXBlID0gX19maW5kX3BlbmRpbmdfZXhjZXB0aW9uKHMsIHBlLCBjaHVuayk7CisJCQlpZiAoIXBlKSB7CisJCQkJX19pbnZhbGlkYXRlX3NuYXBzaG90KHMsIC1FTk9NRU0pOworCQkJCXIgPSAtRUlPOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KIAkJfQogCiAJCXJlbWFwX2V4Y2VwdGlvbihzLCAmcGUtPmUsIGJpbywgY2h1bmspOwpAQCAtMTEzNywyNCArMTEzNCwyNSBAQAogc3RhdGljIGludCBzbmFwc2hvdF9zdGF0dXMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0YXR1c190eXBlX3QgdHlwZSwKIAkJCSAgIGNoYXIgKnJlc3VsdCwgdW5zaWduZWQgaW50IG1heGxlbikKIHsKKwl1bnNpZ25lZCBzeiA9IDA7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwID0gdGktPnByaXZhdGU7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFNUQVRVU1RZUEVfSU5GTzoKIAkJaWYgKCFzbmFwLT52YWxpZCkKLQkJCXNucHJpbnRmKHJlc3VsdCwgbWF4bGVuLCAiSW52YWxpZCIpOworCQkJRE1FTUlUKCJJbnZhbGlkIik7CiAJCWVsc2UgewotCQkJaWYgKHNuYXAtPnN0b3JlLmZyYWN0aW9uX2Z1bGwpIHsKKwkJCWlmIChzbmFwLT5zdG9yZS0+dHlwZS0+ZnJhY3Rpb25fZnVsbCkgewogCQkJCXNlY3Rvcl90IG51bWVyYXRvciwgZGVub21pbmF0b3I7Ci0JCQkJc25hcC0+c3RvcmUuZnJhY3Rpb25fZnVsbCgmc25hcC0+c3RvcmUsCi0JCQkJCQkJICAmbnVtZXJhdG9yLAotCQkJCQkJCSAgJmRlbm9taW5hdG9yKTsKLQkJCQlzbnByaW50ZihyZXN1bHQsIG1heGxlbiwgIiVsbHUvJWxsdSIsCi0JCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbnVtZXJhdG9yLAotCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWRlbm9taW5hdG9yKTsKKwkJCQlzbmFwLT5zdG9yZS0+dHlwZS0+ZnJhY3Rpb25fZnVsbChzbmFwLT5zdG9yZSwKKwkJCQkJCQkJICZudW1lcmF0b3IsCisJCQkJCQkJCSAmZGVub21pbmF0b3IpOworCQkJCURNRU1JVCgiJWxsdS8lbGx1IiwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyludW1lcmF0b3IsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGVub21pbmF0b3IpOwogCQkJfQogCQkJZWxzZQotCQkJCXNucHJpbnRmKHJlc3VsdCwgbWF4bGVuLCAiVW5rbm93biIpOworCQkJCURNRU1JVCgiVW5rbm93biIpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0xMTY0LDEwICsxMTYyLDkgQEAKIAkJICogdG8gbWFrZSBwcml2YXRlIGNvcGllcyBpZiB0aGUgb3V0cHV0IGlzIHRvCiAJCSAqIG1ha2Ugc2Vuc2UuCiAJCSAqLwotCQlzbnByaW50ZihyZXN1bHQsIG1heGxlbiwgIiVzICVzICVjICVsbHUiLAotCQkJIHNuYXAtPm9yaWdpbi0+bmFtZSwgc25hcC0+Y293LT5uYW1lLAotCQkJIHNuYXAtPnR5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylzbmFwLT5jaHVua19zaXplKTsKKwkJRE1FTUlUKCIlcyIsIHNuYXAtPm9yaWdpbi0+bmFtZSk7CisJCXNuYXAtPnN0b3JlLT50eXBlLT5zdGF0dXMoc25hcC0+c3RvcmUsIHR5cGUsIHJlc3VsdCArIHN6LAorCQkJCQkgIG1heGxlbiAtIHN6KTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMTk2LDE0ICsxMTkzLDE0IEBACiAJCQlnb3RvIG5leHRfc25hcHNob3Q7CiAKIAkJLyogTm90aGluZyB0byBkbyBpZiB3cml0aW5nIGJleW9uZCBlbmQgb2Ygc25hcHNob3QgKi8KLQkJaWYgKGJpby0+Ymlfc2VjdG9yID49IGRtX3RhYmxlX2dldF9zaXplKHNuYXAtPnRpLT50YWJsZSkpCisJCWlmIChiaW8tPmJpX3NlY3RvciA+PSBkbV90YWJsZV9nZXRfc2l6ZShzbmFwLT5zdG9yZS0+dGktPnRhYmxlKSkKIAkJCWdvdG8gbmV4dF9zbmFwc2hvdDsKIAogCQkvKgogCQkgKiBSZW1lbWJlciwgZGlmZmVyZW50IHNuYXBzaG90cyBjYW4gaGF2ZQogCQkgKiBkaWZmZXJlbnQgY2h1bmsgc2l6ZXMuCiAJCSAqLwotCQljaHVuayA9IHNlY3Rvcl90b19jaHVuayhzbmFwLCBiaW8tPmJpX3NlY3Rvcik7CisJCWNodW5rID0gc2VjdG9yX3RvX2NodW5rKHNuYXAtPnN0b3JlLCBiaW8tPmJpX3NlY3Rvcik7CiAKIAkJLyoKIAkJICogQ2hlY2sgZXhjZXB0aW9uIHRhYmxlIHRvIHNlZSBpZiBibG9jawpAQCAtMTIxNywxMCArMTIxNCwyOCBAQAogCQlpZiAoZSkKIAkJCWdvdG8gbmV4dF9zbmFwc2hvdDsKIAotCQlwZSA9IF9fZmluZF9wZW5kaW5nX2V4Y2VwdGlvbihzbmFwLCBiaW8pOworCQlwZSA9IF9fbG9va3VwX3BlbmRpbmdfZXhjZXB0aW9uKHNuYXAsIGNodW5rKTsKIAkJaWYgKCFwZSkgewotCQkJX19pbnZhbGlkYXRlX3NuYXBzaG90KHNuYXAsIC1FTk9NRU0pOwotCQkJZ290byBuZXh0X3NuYXBzaG90OworCQkJdXBfd3JpdGUoJnNuYXAtPmxvY2spOworCQkJcGUgPSBhbGxvY19wZW5kaW5nX2V4Y2VwdGlvbihzbmFwKTsKKwkJCWRvd25fd3JpdGUoJnNuYXAtPmxvY2spOworCisJCQlpZiAoIXNuYXAtPnZhbGlkKSB7CisJCQkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7CisJCQkJZ290byBuZXh0X3NuYXBzaG90OworCQkJfQorCisJCQllID0gbG9va3VwX2V4Y2VwdGlvbigmc25hcC0+Y29tcGxldGUsIGNodW5rKTsKKwkJCWlmIChlKSB7CisJCQkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7CisJCQkJZ290byBuZXh0X3NuYXBzaG90OworCQkJfQorCisJCQlwZSA9IF9fZmluZF9wZW5kaW5nX2V4Y2VwdGlvbihzbmFwLCBwZSwgY2h1bmspOworCQkJaWYgKCFwZSkgeworCQkJCV9faW52YWxpZGF0ZV9zbmFwc2hvdChzbmFwLCAtRU5PTUVNKTsKKwkJCQlnb3RvIG5leHRfc25hcHNob3Q7CisJCQl9CiAJCX0KIAogCQlpZiAoIXByaW1hcnlfcGUpIHsKQEAgLTEzNjAsNyArMTM3NSw4IEBACiAJbyA9IF9fbG9va3VwX29yaWdpbihkZXYtPmJkZXYpOwogCWlmIChvKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChzbmFwLCAmby0+c25hcHNob3RzLCBsaXN0KQotCQkJY2h1bmtfc2l6ZSA9IG1pbl9ub3RfemVybyhjaHVua19zaXplLCBzbmFwLT5jaHVua19zaXplKTsKKwkJCWNodW5rX3NpemUgPSBtaW5fbm90X3plcm8oY2h1bmtfc2l6ZSwKKwkJCQkJCSAgc25hcC0+c3RvcmUtPmNodW5rX3NpemUpOwogCXVwX3JlYWQoJl9vcmlnaW5zX2xvY2spOwogCiAJdGktPnNwbGl0X2lvID0gY2h1bmtfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5oIGIvZHJpdmVycy9tZC9kbS1zbmFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZTYyYjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIFNpc3RpbmEgU29mdHdhcmUgKFVLKSBMaW1pdGVkLgotICoKLSAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgotICovCi0KLSNpZm5kZWYgRE1fU05BUFNIT1RfSAotI2RlZmluZSBETV9TTkFQU0hPVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UtbWFwcGVyLmg+Ci0jaW5jbHVkZSAiZG0tZXhjZXB0aW9uLXN0b3JlLmgiCi0jaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLQotc3RydWN0IGV4Y2VwdGlvbl90YWJsZSB7Ci0JdWludDMyX3QgaGFzaF9tYXNrOwotCXVuc2lnbmVkIGhhc2hfc2hpZnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdGFibGU7Ci19OwotCi0jZGVmaW5lIERNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFCTE2Ci0jZGVmaW5lIERNX1RSQUNLRURfQ0hVTktfSEFTSCh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpICYgXAotCQkJCQkgKERNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFIC0gMSkpCi0KLXN0cnVjdCBkbV9zbmFwc2hvdCB7Ci0Jc3RydWN0IHJ3X3NlbWFwaG9yZSBsb2NrOwotCXN0cnVjdCBkbV90YXJnZXQgKnRpOwotCi0Jc3RydWN0IGRtX2RldiAqb3JpZ2luOwotCXN0cnVjdCBkbV9kZXYgKmNvdzsKLQotCS8qIExpc3Qgb2Ygc25hcHNob3RzIHBlciBPcmlnaW4gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQkvKiBTaXplIG9mIGRhdGEgYmxvY2tzIHNhdmVkIC0gbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KLQljaHVua190IGNodW5rX3NpemU7Ci0JY2h1bmtfdCBjaHVua19tYXNrOwotCWNodW5rX3QgY2h1bmtfc2hpZnQ7Ci0KLQkvKiBZb3UgY2FuJ3QgdXNlIGEgc25hcHNob3QgaWYgdGhpcyBpcyAwIChlLmcuIGlmIGZ1bGwpICovCi0JaW50IHZhbGlkOwotCi0JLyogT3JpZ2luIHdyaXRlcyBkb24ndCB0cmlnZ2VyIGV4Y2VwdGlvbnMgdW50aWwgdGhpcyBpcyBzZXQgKi8KLQlpbnQgYWN0aXZlOwotCi0JLyogVXNlZCBmb3IgZGlzcGxheSBvZiB0YWJsZSAqLwotCWNoYXIgdHlwZTsKLQotCW1lbXBvb2xfdCAqcGVuZGluZ19wb29sOwotCi0JYXRvbWljX3QgcGVuZGluZ19leGNlcHRpb25zX2NvdW50OwotCi0Jc3RydWN0IGV4Y2VwdGlvbl90YWJsZSBwZW5kaW5nOwotCXN0cnVjdCBleGNlcHRpb25fdGFibGUgY29tcGxldGU7Ci0KLQkvKgotCSAqIHBlX2xvY2sgcHJvdGVjdHMgYWxsIHBlbmRpbmdfZXhjZXB0aW9uIG9wZXJhdGlvbnMgYW5kIGFjY2VzcwotCSAqIGFzIHdlbGwgYXMgdGhlIHNuYXBzaG90X2Jpb3MgbGlzdC4KLQkgKi8KLQlzcGlubG9ja190IHBlX2xvY2s7Ci0KLQkvKiBUaGUgb24gZGlzayBtZXRhZGF0YSBoYW5kbGVyICovCi0Jc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSBzdG9yZTsKLQotCXN0cnVjdCBkbV9rY29weWRfY2xpZW50ICprY29weWRfY2xpZW50OwotCi0JLyogUXVldWUgb2Ygc25hcHNob3Qgd3JpdGVzIGZvciBrc25hcGQgdG8gZmx1c2ggKi8KLQlzdHJ1Y3QgYmlvX2xpc3QgcXVldWVkX2Jpb3M7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHF1ZXVlZF9iaW9zX3dvcms7Ci0KLQkvKiBDaHVua3Mgd2l0aCBvdXRzdGFuZGluZyByZWFkcyAqLwotCW1lbXBvb2xfdCAqdHJhY2tlZF9jaHVua19wb29sOwotCXNwaW5sb2NrX3QgdHJhY2tlZF9jaHVua19sb2NrOwotCXN0cnVjdCBobGlzdF9oZWFkIHRyYWNrZWRfY2h1bmtfaGFzaFtETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRV07Ci19OwotCi0vKgotICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VjdG9ycyBpbiB0aGUgZGV2aWNlLgotICovCi1zdGF0aWMgaW5saW5lIHNlY3Rvcl90IGdldF9kZXZfc2l6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQotewotCXJldHVybiBiZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IFNFQ1RPUl9TSElGVDsKLX0KLQotc3RhdGljIGlubGluZSBjaHVua190IHNlY3Rvcl90b19jaHVuayhzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIHNlY3Rvcl90IHNlY3RvcikKLXsKLQlyZXR1cm4gKHNlY3RvciAmIH5zLT5jaHVua19tYXNrKSA+PiBzLT5jaHVua19zaGlmdDsKLX0KLQotc3RhdGljIGlubGluZSBzZWN0b3JfdCBjaHVua190b19zZWN0b3Ioc3RydWN0IGRtX3NuYXBzaG90ICpzLCBjaHVua190IGNodW5rKQotewotCXJldHVybiBjaHVuayA8PCBzLT5jaHVua19zaGlmdDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYmRldl9lcXVhbChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpsaHMsIHN0cnVjdCBibG9ja19kZXZpY2UgKnJocykKLXsKLQkvKgotCSAqIFRoZXJlIGlzIG9ubHkgZXZlciBvbmUgaW5zdGFuY2Ugb2YgYSBwYXJ0aWN1bGFyIGJsb2NrCi0JICogZGV2aWNlIHNvIHdlIGNhbiBjb21wYXJlIHBvaW50ZXJzIHNhZmVseS4KLQkgKi8KLQlyZXR1cm4gbGhzID09IHJoczsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKaW5kZXggMmZkNjZjMy4uZTgzNjFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10YWJsZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwpAQCAtMzk5LDI4ICszOTksMzAgQEAKIH0KIAogLyoKLSAqIFRoaXMgdXBncmFkZXMgdGhlIG1vZGUgb24gYW4gYWxyZWFkeSBvcGVuIGRtX2Rldi4gIEJlaW5nCisgKiBUaGlzIHVwZ3JhZGVzIHRoZSBtb2RlIG9uIGFuIGFscmVhZHkgb3BlbiBkbV9kZXYsIGJlaW5nCiAgKiBjYXJlZnVsIHRvIGxlYXZlIHRoaW5ncyBhcyB0aGV5IHdlcmUgaWYgd2UgZmFpbCB0byByZW9wZW4gdGhlCi0gKiBkZXZpY2UuCisgKiBkZXZpY2UgYW5kIG5vdCB0byB0b3VjaCB0aGUgZXhpc3RpbmcgYmRldiBmaWVsZCBpbiBjYXNlCisgKiBpdCBpcyBhY2Nlc3NlZCBjb25jdXJyZW50bHkgaW5zaWRlIGRtX3RhYmxlX2FueV9jb25nZXN0ZWQoKS4KICAqLwogc3RhdGljIGludCB1cGdyYWRlX21vZGUoc3RydWN0IGRtX2Rldl9pbnRlcm5hbCAqZGQsIGZtb2RlX3QgbmV3X21vZGUsCiAJCQlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7CiAJaW50IHI7Ci0Jc3RydWN0IGRtX2Rldl9pbnRlcm5hbCBkZF9jb3B5OwotCWRldl90IGRldiA9IGRkLT5kbV9kZXYuYmRldi0+YmRfZGV2OworCXN0cnVjdCBkbV9kZXZfaW50ZXJuYWwgZGRfbmV3LCBkZF9vbGQ7CiAKLQlkZF9jb3B5ID0gKmRkOworCWRkX25ldyA9IGRkX29sZCA9ICpkZDsKKworCWRkX25ldy5kbV9kZXYubW9kZSB8PSBuZXdfbW9kZTsKKwlkZF9uZXcuZG1fZGV2LmJkZXYgPSBOVUxMOworCisJciA9IG9wZW5fZGV2KCZkZF9uZXcsIGRkLT5kbV9kZXYuYmRldi0+YmRfZGV2LCBtZCk7CisJaWYgKHIpCisJCXJldHVybiByOwogCiAJZGQtPmRtX2Rldi5tb2RlIHw9IG5ld19tb2RlOwotCWRkLT5kbV9kZXYuYmRldiA9IE5VTEw7Ci0JciA9IG9wZW5fZGV2KGRkLCBkZXYsIG1kKTsKLQlpZiAoIXIpCi0JCWNsb3NlX2RldigmZGRfY29weSwgbWQpOwotCWVsc2UKLQkJKmRkID0gZGRfY29weTsKKwljbG9zZV9kZXYoJmRkX29sZCwgbWQpOwogCi0JcmV0dXJuIHI7CisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRhcmdldC5jIGIvZHJpdmVycy9tZC9kbS10YXJnZXQuYwppbmRleCA3ZGVjZjEwLi4wNGZlY2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhcmdldC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGFyZ2V0LmMKQEAgLTE0LDQ1ICsxNCwzNCBAQAogCiAjZGVmaW5lIERNX01TR19QUkVGSVggInRhcmdldCIKIAotc3RydWN0IHR0X2ludGVybmFsIHsKLQlzdHJ1Y3QgdGFyZ2V0X3R5cGUgdHQ7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JbG9uZyB1c2U7Ci19OwotCiBzdGF0aWMgTElTVF9IRUFEKF90YXJnZXRzKTsKIHN0YXRpYyBERUNMQVJFX1JXU0VNKF9sb2NrKTsKIAogI2RlZmluZSBETV9NT0RfTkFNRV9TSVpFIDMyCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHR0X2ludGVybmFsICpfX2ZpbmRfdGFyZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhcmdldF90eXBlICpfX2ZpbmRfdGFyZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpOworCXN0cnVjdCB0YXJnZXRfdHlwZSAqdHQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh0aSwgJl90YXJnZXRzLCBsaXN0KQotCQlpZiAoIXN0cmNtcChuYW1lLCB0aS0+dHQubmFtZSkpCi0JCQlyZXR1cm4gdGk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dCwgJl90YXJnZXRzLCBsaXN0KQorCQlpZiAoIXN0cmNtcChuYW1lLCB0dC0+bmFtZSkpCisJCQlyZXR1cm4gdHQ7CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCB0dF9pbnRlcm5hbCAqZ2V0X3RhcmdldF90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlICpnZXRfdGFyZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpOworCXN0cnVjdCB0YXJnZXRfdHlwZSAqdHQ7CiAKIAlkb3duX3JlYWQoJl9sb2NrKTsKIAotCXRpID0gX19maW5kX3RhcmdldF90eXBlKG5hbWUpOwotCWlmICh0aSkgewotCQlpZiAoKHRpLT51c2UgPT0gMCkgJiYgIXRyeV9tb2R1bGVfZ2V0KHRpLT50dC5tb2R1bGUpKQotCQkJdGkgPSBOVUxMOwotCQllbHNlCi0JCQl0aS0+dXNlKys7Ci0JfQorCXR0ID0gX19maW5kX3RhcmdldF90eXBlKG5hbWUpOworCWlmICh0dCAmJiAhdHJ5X21vZHVsZV9nZXQodHQtPm1vZHVsZSkpCisJCXR0ID0gTlVMTDsKIAogCXVwX3JlYWQoJl9sb2NrKTsKLQlyZXR1cm4gdGk7CisJcmV0dXJuIHR0OwogfQogCiBzdGF0aWMgdm9pZCBsb2FkX21vZHVsZShjb25zdCBjaGFyICpuYW1lKQpAQCAtNjIsOTIgKzUxLDU5IEBACiAKIHN0cnVjdCB0YXJnZXRfdHlwZSAqZG1fZ2V0X3RhcmdldF90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IHR0X2ludGVybmFsICp0aSA9IGdldF90YXJnZXRfdHlwZShuYW1lKTsKKwlzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnR0ID0gZ2V0X3RhcmdldF90eXBlKG5hbWUpOwogCi0JaWYgKCF0aSkgeworCWlmICghdHQpIHsKIAkJbG9hZF9tb2R1bGUobmFtZSk7Ci0JCXRpID0gZ2V0X3RhcmdldF90eXBlKG5hbWUpOworCQl0dCA9IGdldF90YXJnZXRfdHlwZShuYW1lKTsKIAl9CiAKLQlyZXR1cm4gdGkgPyAmdGktPnR0IDogTlVMTDsKKwlyZXR1cm4gdHQ7CiB9CiAKLXZvaWQgZG1fcHV0X3RhcmdldF90eXBlKHN0cnVjdCB0YXJnZXRfdHlwZSAqdCkKK3ZvaWQgZG1fcHV0X3RhcmdldF90eXBlKHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQpCiB7Ci0Jc3RydWN0IHR0X2ludGVybmFsICp0aSA9IChzdHJ1Y3QgdHRfaW50ZXJuYWwgKikgdDsKLQogCWRvd25fcmVhZCgmX2xvY2spOwotCWlmICgtLXRpLT51c2UgPT0gMCkKLQkJbW9kdWxlX3B1dCh0aS0+dHQubW9kdWxlKTsKLQotCUJVR19PTih0aS0+dXNlIDwgMCk7CisJbW9kdWxlX3B1dCh0dC0+bW9kdWxlKTsKIAl1cF9yZWFkKCZfbG9jayk7Ci0KLQlyZXR1cm47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdHRfaW50ZXJuYWwgKmFsbG9jX3RhcmdldChzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnQpCi17Ci0Jc3RydWN0IHR0X2ludGVybmFsICp0aSA9IGt6YWxsb2Moc2l6ZW9mKCp0aSksIEdGUF9LRVJORUwpOwotCi0JaWYgKHRpKQotCQl0aS0+dHQgPSAqdDsKLQotCXJldHVybiB0aTsKLX0KLQotCiBpbnQgZG1fdGFyZ2V0X2l0ZXJhdGUodm9pZCAoKml0ZXJfZnVuYykoc3RydWN0IHRhcmdldF90eXBlICp0dCwKIAkJCQkJdm9pZCAqcGFyYW0pLCB2b2lkICpwYXJhbSkKIHsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpOworCXN0cnVjdCB0YXJnZXRfdHlwZSAqdHQ7CiAKIAlkb3duX3JlYWQoJl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh0aSwgJl90YXJnZXRzLCBsaXN0KQotCQlpdGVyX2Z1bmMoJnRpLT50dCwgcGFyYW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkodHQsICZfdGFyZ2V0cywgbGlzdCkKKwkJaXRlcl9mdW5jKHR0LCBwYXJhbSk7CiAJdXBfcmVhZCgmX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBkbV9yZWdpc3Rlcl90YXJnZXQoc3RydWN0IHRhcmdldF90eXBlICp0KQoraW50IGRtX3JlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnR0KQogewogCWludCBydiA9IDA7Ci0Jc3RydWN0IHR0X2ludGVybmFsICp0aSA9IGFsbG9jX3RhcmdldCh0KTsKLQotCWlmICghdGkpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJZG93bl93cml0ZSgmX2xvY2spOwotCWlmIChfX2ZpbmRfdGFyZ2V0X3R5cGUodC0+bmFtZSkpCisJaWYgKF9fZmluZF90YXJnZXRfdHlwZSh0dC0+bmFtZSkpCiAJCXJ2ID0gLUVFWElTVDsKIAllbHNlCi0JCWxpc3RfYWRkKCZ0aS0+bGlzdCwgJl90YXJnZXRzKTsKKwkJbGlzdF9hZGQoJnR0LT5saXN0LCAmX3RhcmdldHMpOwogCiAJdXBfd3JpdGUoJl9sb2NrKTsKLQlpZiAocnYpCi0JCWtmcmVlKHRpKTsKIAlyZXR1cm4gcnY7CiB9CiAKLXZvaWQgZG1fdW5yZWdpc3Rlcl90YXJnZXQoc3RydWN0IHRhcmdldF90eXBlICp0KQordm9pZCBkbV91bnJlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnR0KQogewotCXN0cnVjdCB0dF9pbnRlcm5hbCAqdGk7Ci0KIAlkb3duX3dyaXRlKCZfbG9jayk7Ci0JaWYgKCEodGkgPSBfX2ZpbmRfdGFyZ2V0X3R5cGUodC0+bmFtZSkpKSB7Ci0JCURNQ1JJVCgiVW5yZWdpc3RlcmluZyB1bnJlY29nbmlzZWQgdGFyZ2V0OiAlcyIsIHQtPm5hbWUpOworCWlmICghX19maW5kX3RhcmdldF90eXBlKHR0LT5uYW1lKSkgeworCQlETUNSSVQoIlVucmVnaXN0ZXJpbmcgdW5yZWNvZ25pc2VkIHRhcmdldDogJXMiLCB0dC0+bmFtZSk7CiAJCUJVRygpOwogCX0KIAotCWlmICh0aS0+dXNlKSB7Ci0JCURNQ1JJVCgiQXR0ZW1wdCB0byB1bnJlZ2lzdGVyIHRhcmdldCBzdGlsbCBpbiB1c2U6ICVzIiwKLQkJICAgICAgIHQtPm5hbWUpOwotCQlCVUcoKTsKLQl9Ci0KLQlsaXN0X2RlbCgmdGktPmxpc3QpOwotCWtmcmVlKHRpKTsKKwlsaXN0X2RlbCgmdHQtPmxpc3QpOwogCiAJdXBfd3JpdGUoJl9sb2NrKTsKIH0KQEAgLTE1NiwxNyArMTEyLDE3IEBACiAgKiBpby1lcnI6IGFsd2F5cyBmYWlscyBhbiBpbywgdXNlZnVsIGZvciBicmluZ2luZwogICogdXAgTFZzIHRoYXQgaGF2ZSBob2xlcyBpbiB0aGVtLgogICovCi1zdGF0aWMgaW50IGlvX2Vycl9jdHIoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJncykKK3N0YXRpYyBpbnQgaW9fZXJyX2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0dCwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmdzKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpb19lcnJfZHRyKHN0cnVjdCBkbV90YXJnZXQgKnRpKQorc3RhdGljIHZvaWQgaW9fZXJyX2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0dCkKIHsKIAkvKiBlbXB0eSAqLwogfQogCi1zdGF0aWMgaW50IGlvX2Vycl9tYXAoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKK3N0YXRpYyBpbnQgaW9fZXJyX21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0dCwgc3RydWN0IGJpbyAqYmlvLAogCQkgICAgICB1bmlvbiBtYXBfaW5mbyAqbWFwX2NvbnRleHQpCiB7CiAJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggOGQ0MGYyNy4uNzg4YmE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtOTksMTkgKzk5LDkgQEAKIC8qCiAgKiBXb3JrIHByb2Nlc3NlZCBieSBwZXItZGV2aWNlIHdvcmtxdWV1ZS4KICAqLwotc3RydWN0IGRtX3dxX3JlcSB7Ci0JZW51bSB7Ci0JCURNX1dRX0ZMVVNIX0RFRkVSUkVELAotCX0gdHlwZTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQ7Ci0Jdm9pZCAqY29udGV4dDsKLX07Ci0KIHN0cnVjdCBtYXBwZWRfZGV2aWNlIHsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGlvX2xvY2s7CiAJc3RydWN0IG11dGV4IHN1c3BlbmRfbG9jazsKLQlzcGlubG9ja190IHB1c2hiYWNrX2xvY2s7CiAJcndsb2NrX3QgbWFwX2xvY2s7CiAJYXRvbWljX3QgaG9sZGVyczsKIAlhdG9taWNfdCBvcGVuX2NvdW50OwpAQCAtMTI5LDggKzExOSw5IEBACiAJICovCiAJYXRvbWljX3QgcGVuZGluZzsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBiaW9fbGlzdCBkZWZlcnJlZDsKLQlzdHJ1Y3QgYmlvX2xpc3QgcHVzaGJhY2s7CisJc3BpbmxvY2tfdCBkZWZlcnJlZF9sb2NrOwogCiAJLyoKIAkgKiBQcm9jZXNzaW5nIHF1ZXVlIChmbHVzaC9iYXJyaWVycykKQEAgLTQ1Myw3ICs0NDQsOSBAQAogCQlyZXR1cm4gMTsKIAl9CiAKKwlzcGluX2xvY2tfaXJxKCZtZC0+ZGVmZXJyZWRfbG9jayk7CiAJYmlvX2xpc3RfYWRkKCZtZC0+ZGVmZXJyZWQsIGJpbyk7CisJc3Bpbl91bmxvY2tfaXJxKCZtZC0+ZGVmZXJyZWRfbG9jayk7CiAKIAl1cF93cml0ZSgmbWQtPmlvX2xvY2spOwogCXJldHVybiAwOwkJLyogZGVmZXJyZWQgc3VjY2Vzc2Z1bGx5ICovCkBAIC01MzcsMTYgKzUzMCwxNCBAQAogCQlpZiAoaW8tPmVycm9yID09IERNX0VORElPX1JFUVVFVUUpIHsKIAkJCS8qCiAJCQkgKiBUYXJnZXQgcmVxdWVzdGVkIHB1c2hpbmcgYmFjayB0aGUgSS9PLgotCQkJICogVGhpcyBtdXN0IGJlIGhhbmRsZWQgYmVmb3JlIHRoZSBzbGVlcGVyIG9uCi0JCQkgKiBzdXNwZW5kIHF1ZXVlIG1lcmdlcyB0aGUgcHVzaGJhY2sgbGlzdC4KIAkJCSAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWQtPmRlZmVycmVkX2xvY2ssIGZsYWdzKTsKIAkJCWlmIChfX25vZmx1c2hfc3VzcGVuZGluZyhtZCkpCi0JCQkJYmlvX2xpc3RfYWRkKCZtZC0+cHVzaGJhY2ssIGlvLT5iaW8pOworCQkJCWJpb19saXN0X2FkZCgmbWQtPmRlZmVycmVkLCBpby0+YmlvKTsKIAkJCWVsc2UKIAkJCQkvKiBub2ZsdXNoIHN1c3BlbmQgd2FzIGludGVycnVwdGVkLiAqLwogCQkJCWlvLT5lcnJvciA9IC1FSU87Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWQtPmRlZmVycmVkX2xvY2ssIGZsYWdzKTsKIAkJfQogCiAJCWVuZF9pb19hY2N0KGlvKTsKQEAgLTgzNCwyMCArODI1LDIyIEBACiB9CiAKIC8qCi0gKiBTcGxpdCB0aGUgYmlvIGludG8gc2V2ZXJhbCBjbG9uZXMuCisgKiBTcGxpdCB0aGUgYmlvIGludG8gc2V2ZXJhbCBjbG9uZXMgYW5kIHN1Ym1pdCBpdCB0byB0YXJnZXRzLgogICovCi1zdGF0aWMgaW50IF9fc3BsaXRfYmlvKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGJpbyAqYmlvKQorc3RhdGljIHZvaWQgX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGNsb25lX2luZm8gY2k7CiAJaW50IGVycm9yID0gMDsKIAogCWNpLm1hcCA9IGRtX2dldF90YWJsZShtZCk7Ci0JaWYgKHVubGlrZWx5KCFjaS5tYXApKQotCQlyZXR1cm4gLUVJTzsKKwlpZiAodW5saWtlbHkoIWNpLm1hcCkpIHsKKwkJYmlvX2lvX2Vycm9yKGJpbyk7CisJCXJldHVybjsKKwl9CiAJaWYgKHVubGlrZWx5KGJpb19iYXJyaWVyKGJpbykgJiYgIWRtX3RhYmxlX2JhcnJpZXJfb2soY2kubWFwKSkpIHsKIAkJZG1fdGFibGVfcHV0KGNpLm1hcCk7CiAJCWJpb19lbmRpbyhiaW8sIC1FT1BOT1RTVVBQKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9CiAJY2kubWQgPSBtZDsKIAljaS5iaW8gPSBiaW87CkBAIC04NjcsOCArODYwLDYgQEAKIAkvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgY291bnQgKi8KIAlkZWNfcGVuZGluZyhjaS5pbywgZXJyb3IpOwogCWRtX3RhYmxlX3B1dChjaS5tYXApOwotCi0JcmV0dXJuIDA7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDUlVEIEVORApAQCAtOTU5LDggKzk1MCw5IEBACiAJCWRvd25fcmVhZCgmbWQtPmlvX2xvY2spOwogCX0KIAotCXIgPSBfX3NwbGl0X2JpbyhtZCwgYmlvKTsKKwlfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyhtZCwgYmlvKTsKIAl1cF9yZWFkKCZtZC0+aW9fbG9jayk7CisJcmV0dXJuIDA7CiAKIG91dF9yZXE6CiAJaWYgKHIgPCAwKQpAQCAtMTA3NCw2ICsxMDY2LDggQEAKIAogc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkbV9ibGtfZG9wczsKIAorc3RhdGljIHZvaWQgZG1fd3Ffd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCiAvKgogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBibGFuayBkZXZpY2Ugd2l0aCBhIGdpdmVuIG1pbm9yLgogICovCkBAIC0xMTAxLDcgKzEwOTUsNyBAQAogCiAJaW5pdF9yd3NlbSgmbWQtPmlvX2xvY2spOwogCW11dGV4X2luaXQoJm1kLT5zdXNwZW5kX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZtZC0+cHVzaGJhY2tfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm1kLT5kZWZlcnJlZF9sb2NrKTsKIAlyd2xvY2tfaW5pdCgmbWQtPm1hcF9sb2NrKTsKIAlhdG9taWNfc2V0KCZtZC0+aG9sZGVycywgMSk7CiAJYXRvbWljX3NldCgmbWQtPm9wZW5fY291bnQsIDApOwpAQCAtMTExOCw2ICsxMTEyLDcgQEAKIAltZC0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gZG1fYW55X2Nvbmdlc3RlZDsKIAltZC0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZDsKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KG1kLT5xdWV1ZSwgZG1fcmVxdWVzdCk7CisJYmxrX3F1ZXVlX29yZGVyZWQobWQtPnF1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KG1kLT5xdWV1ZSwgQkxLX0JPVU5DRV9BTlkpOwogCW1kLT5xdWV1ZS0+dW5wbHVnX2ZuID0gZG1fdW5wbHVnX2FsbDsKIAlibGtfcXVldWVfbWVyZ2VfYnZlYyhtZC0+cXVldWUsIGRtX21lcmdlX2J2ZWMpOwpAQCAtMTE0MCw2ICsxMTM1LDcgQEAKIAogCWF0b21pY19zZXQoJm1kLT5wZW5kaW5nLCAwKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZC0+d2FpdCk7CisJSU5JVF9XT1JLKCZtZC0+d29yaywgZG1fd3Ffd29yayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbWQtPmV2ZW50cSk7CiAKIAltZC0+ZGlzay0+bWFqb3IgPSBfbWFqb3I7CkBAIC0xMzc5LDE4ICsxMzc1LDI0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9wdXQpOwogCi1zdGF0aWMgaW50IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQorc3RhdGljIGludCBkbV93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgaW50IGludGVycnVwdGlibGUpCiB7CiAJaW50IHIgPSAwOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJZG1fdW5wbHVnX2FsbChtZC0+cXVldWUpOworCisJYWRkX3dhaXRfcXVldWUoJm1kLT53YWl0LCAmd2FpdCk7CiAKIAl3aGlsZSAoMSkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzZXRfY3VycmVudF9zdGF0ZShpbnRlcnJ1cHRpYmxlKTsKIAogCQlzbXBfbWIoKTsKIAkJaWYgKCFhdG9taWNfcmVhZCgmbWQtPnBlbmRpbmcpKQogCQkJYnJlYWs7CiAKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCWlmIChpbnRlcnJ1cHRpYmxlID09IFRBU0tfSU5URVJSVVBUSUJMRSAmJgorCQkgICAgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCXIgPSAtRUlOVFI7CiAJCQlicmVhazsKIAkJfQpAQCAtMTM5OSw2NyArMTQwMSw0MCBAQAogCX0KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCisJcmVtb3ZlX3dhaXRfcXVldWUoJm1kLT53YWl0LCAmd2FpdCk7CisKIAlyZXR1cm4gcjsKIH0KIAogLyoKICAqIFByb2Nlc3MgdGhlIGRlZmVycmVkIGJpb3MKICAqLwotc3RhdGljIHZvaWQgX19mbHVzaF9kZWZlcnJlZF9pbyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCitzdGF0aWMgdm9pZCBkbV93cV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1hcHBlZF9kZXZpY2UsCisJCQkJCQl3b3JrKTsKIAlzdHJ1Y3QgYmlvICpjOwogCi0Jd2hpbGUgKChjID0gYmlvX2xpc3RfcG9wKCZtZC0+ZGVmZXJyZWQpKSkgewotCQlpZiAoX19zcGxpdF9iaW8obWQsIGMpKQotCQkJYmlvX2lvX2Vycm9yKGMpOworCWRvd25fd3JpdGUoJm1kLT5pb19sb2NrKTsKKworbmV4dF9iaW86CisJc3Bpbl9sb2NrX2lycSgmbWQtPmRlZmVycmVkX2xvY2spOworCWMgPSBiaW9fbGlzdF9wb3AoJm1kLT5kZWZlcnJlZCk7CisJc3Bpbl91bmxvY2tfaXJxKCZtZC0+ZGVmZXJyZWRfbG9jayk7CisKKwlpZiAoYykgeworCQlfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyhtZCwgYyk7CisJCWdvdG8gbmV4dF9iaW87CiAJfQogCiAJY2xlYXJfYml0KERNRl9CTE9DS19JTywgJm1kLT5mbGFncyk7Ci19CiAKLXN0YXRpYyB2b2lkIF9fbWVyZ2VfcHVzaGJhY2tfbGlzdChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOwotCWNsZWFyX2JpdChETUZfTk9GTFVTSF9TVVNQRU5ESU5HLCAmbWQtPmZsYWdzKTsKLQliaW9fbGlzdF9tZXJnZV9oZWFkKCZtZC0+ZGVmZXJyZWQsICZtZC0+cHVzaGJhY2spOwotCWJpb19saXN0X2luaXQoJm1kLT5wdXNoYmFjayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWQtPnB1c2hiYWNrX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZG1fd3Ffd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGRtX3dxX3JlcSAqcmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbV93cV9yZXEsIHdvcmspOwotCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IHJlcS0+bWQ7Ci0KLQlkb3duX3dyaXRlKCZtZC0+aW9fbG9jayk7Ci0Jc3dpdGNoIChyZXEtPnR5cGUpIHsKLQljYXNlIERNX1dRX0ZMVVNIX0RFRkVSUkVEOgotCQlfX2ZsdXNoX2RlZmVycmVkX2lvKG1kKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRE1FUlIoImRtX3dxX3dvcms6IHVucmVjb2duaXNlZCB3b3JrIHR5cGUgJWQiLCByZXEtPnR5cGUpOwotCQlCVUcoKTsKLQl9CiAJdXBfd3JpdGUoJm1kLT5pb19sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgZG1fd3FfcXVldWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgdHlwZSwgdm9pZCAqY29udGV4dCwKLQkJCXN0cnVjdCBkbV93cV9yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIGRtX3F1ZXVlX2ZsdXNoKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKIHsKLQlyZXEtPnR5cGUgPSB0eXBlOwotCXJlcS0+bWQgPSBtZDsKLQlyZXEtPmNvbnRleHQgPSBjb250ZXh0OwotCUlOSVRfV09SSygmcmVxLT53b3JrLCBkbV93cV93b3JrKTsKLQlxdWV1ZV93b3JrKG1kLT53cSwgJnJlcS0+d29yayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtX3F1ZXVlX2ZsdXNoKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgaW50IHR5cGUsIHZvaWQgKmNvbnRleHQpCi17Ci0Jc3RydWN0IGRtX3dxX3JlcSByZXE7Ci0KLQlkbV93cV9xdWV1ZShtZCwgdHlwZSwgY29udGV4dCwgJnJlcSk7CisJcXVldWVfd29yayhtZC0+d3EsICZtZC0+d29yayk7CiAJZmx1c2hfd29ya3F1ZXVlKG1kLT53cSk7CiB9CiAKQEAgLTE1MzQsNyArMTUwOSw2IEBACiBpbnQgZG1fc3VzcGVuZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHVuc2lnbmVkIHN1c3BlbmRfZmxhZ3MpCiB7CiAJc3RydWN0IGRtX3RhYmxlICptYXAgPSBOVUxMOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCWludCByID0gMDsKIAlpbnQgZG9fbG9ja2ZzID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTE9DS0ZTX0ZMQUcgPyAxIDogMDsKIAlpbnQgbm9mbHVzaCA9IHN1c3BlbmRfZmxhZ3MgJiBETV9TVVNQRU5EX05PRkxVU0hfRkxBRyA/IDEgOiAwOwpAQCAtMTU4NCwyOCArMTU1OCwyMiBAQAogCWRvd25fd3JpdGUoJm1kLT5pb19sb2NrKTsKIAlzZXRfYml0KERNRl9CTE9DS19JTywgJm1kLT5mbGFncyk7CiAKLQlhZGRfd2FpdF9xdWV1ZSgmbWQtPndhaXQsICZ3YWl0KTsKIAl1cF93cml0ZSgmbWQtPmlvX2xvY2spOwogCi0JLyogdW5wbHVnICovCi0JaWYgKG1hcCkKLQkJZG1fdGFibGVfdW5wbHVnX2FsbChtYXApOwotCiAJLyoKIAkgKiBXYWl0IGZvciB0aGUgYWxyZWFkeS1tYXBwZWQgaW9zIHRvIGNvbXBsZXRlLgogCSAqLwotCXIgPSBkbV93YWl0X2Zvcl9jb21wbGV0aW9uKG1kKTsKKwlyID0gZG1fd2FpdF9mb3JfY29tcGxldGlvbihtZCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCWRvd25fd3JpdGUoJm1kLT5pb19sb2NrKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmbWQtPndhaXQsICZ3YWl0KTsKIAogCWlmIChub2ZsdXNoKQotCQlfX21lcmdlX3B1c2hiYWNrX2xpc3QobWQpOworCQljbGVhcl9iaXQoRE1GX05PRkxVU0hfU1VTUEVORElORywgJm1kLT5mbGFncyk7CiAJdXBfd3JpdGUoJm1kLT5pb19sb2NrKTsKIAogCS8qIHdlcmUgd2UgaW50ZXJydXB0ZWQgPyAqLwogCWlmIChyIDwgMCkgewotCQlkbV9xdWV1ZV9mbHVzaChtZCwgRE1fV1FfRkxVU0hfREVGRVJSRUQsIE5VTEwpOworCQlkbV9xdWV1ZV9mbHVzaChtZCk7CiAKIAkJdW5sb2NrX2ZzKG1kKTsKIAkJZ290byBvdXQ7IC8qIHB1c2hiYWNrIGxpc3QgaXMgYWxyZWFkeSBmbHVzaGVkLCBzbyBza2lwIGZsdXNoICovCkBAIC0xNjQ1LDcgKzE2MTMsNyBAQAogCWlmIChyKQogCQlnb3RvIG91dDsKIAotCWRtX3F1ZXVlX2ZsdXNoKG1kLCBETV9XUV9GTFVTSF9ERUZFUlJFRCwgTlVMTCk7CisJZG1fcXVldWVfZmx1c2gobWQpOwogCiAJdW5sb2NrX2ZzKG1kKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5oIGIvZHJpdmVycy9tZC9kbS5oCmluZGV4IDIwMTk0ZTAuLmI0ODM5N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uaAorKysgYi9kcml2ZXJzL21kL2RtLmgKQEAgLTYwLDcgKzYwLDcgQEAKIGludCBkbV90YXJnZXRfaW5pdCh2b2lkKTsKIHZvaWQgZG1fdGFyZ2V0X2V4aXQodm9pZCk7CiBzdHJ1Y3QgdGFyZ2V0X3R5cGUgKmRtX2dldF90YXJnZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgZG1fcHV0X3RhcmdldF90eXBlKHN0cnVjdCB0YXJnZXRfdHlwZSAqdCk7Cit2b2lkIGRtX3B1dF90YXJnZXRfdHlwZShzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnR0KTsKIGludCBkbV90YXJnZXRfaXRlcmF0ZSh2b2lkICgqaXRlcl9mdW5jKShzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnR0LAogCQkJCQl2b2lkICpwYXJhbSksIHZvaWQgKnBhcmFtKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9mYXVsdHkuYyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKaW5kZXggODZkOWFkZi4uODY5NTgwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9mYXVsdHkuYworKysgYi9kcml2ZXJzL21kL2ZhdWx0eS5jCkBAIC02Miw3ICs2MiwxMCBAQAogI2RlZmluZQlNb2RlU2hpZnQJNQogCiAjZGVmaW5lIE1heEZhdWx0CTUwCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogCiBzdGF0aWMgdm9pZCBmYXVsdHlfZmFpbChzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcikKQEAgLTI4MCw2ICsyODMsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHNlY3Rvcl90IGZhdWx0eV9zaXplKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzLCBpbnQgcmFpZF9kaXNrcykKK3sKKwlXQVJOX09OQ0UocmFpZF9kaXNrcywKKwkJICAiJXMgZG9lcyBub3Qgc3VwcG9ydCBnZW5lcmljIHJlc2hhcGVcbiIsIF9fZnVuY19fKTsKKworCWlmIChzZWN0b3JzID09IDApCisJCXJldHVybiBtZGRldi0+ZGV2X3NlY3RvcnM7CisKKwlyZXR1cm4gc2VjdG9yczsKK30KKwogc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCiB7CiAJbWRrX3JkZXZfdCAqcmRldjsKQEAgLTI5OCw3ICszMTIsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCiAJCWNvbmYtPnJkZXYgPSByZGV2OwogCi0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSAqIDI7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIGZhdWx0eV9zaXplKG1kZGV2LCAwLCAwKSk7CiAJbWRkZXYtPnByaXZhdGUgPSBjb25mOwogCiAJcmVjb25maWcobWRkZXYsIG1kZGV2LT5sYXlvdXQsIC0xKTsKQEAgLTMyNSw2ICszMzksNyBAQAogCS5zdG9wCQk9IHN0b3AsCiAJLnN0YXR1cwkJPSBzdGF0dXMsCiAJLnJlY29uZmlnCT0gcmVjb25maWcsCisJLnNpemUJCT0gZmF1bHR5X3NpemUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByYWlkX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbGluZWFyLmMgYi9kcml2ZXJzL21kL2xpbmVhci5jCmluZGV4IDA5NjU4YjIuLjdhMzZlMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbGluZWFyLmMKKysrIGIvZHJpdmVycy9tZC9saW5lYXIuYwpAQCAtMTYsNyArMTYsMTEgQEAKICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCiAqLwogCi0jaW5jbHVkZSA8bGludXgvcmFpZC9saW5lYXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSAibGluZWFyLmgiCiAKIC8qCiAgKiBmaW5kIHdoaWNoIGRldmljZSBob2xkcyBhIHBhcnRpY3VsYXIgb2Zmc2V0IApAQCAtOTcsNiArMTAxLDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNlY3Rvcl90IGxpbmVhcl9zaXplKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzLCBpbnQgcmFpZF9kaXNrcykKK3sKKwlsaW5lYXJfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisKKwlXQVJOX09OQ0Uoc2VjdG9ycyB8fCByYWlkX2Rpc2tzLAorCQkgICIlcyBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyaWMgcmVzaGFwZVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIGNvbmYtPmFycmF5X3NlY3RvcnM7Cit9CisKIHN0YXRpYyBsaW5lYXJfY29uZl90ICpsaW5lYXJfY29uZihtZGRldl90ICptZGRldiwgaW50IHJhaWRfZGlza3MpCiB7CiAJbGluZWFyX2NvbmZfdCAqY29uZjsKQEAgLTEzNSw4ICsxNDksOCBAQAogCQkgICAgbWRkZXYtPnF1ZXVlLT5tYXhfc2VjdG9ycyA+IChQQUdFX1NJWkU+PjkpKQogCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAotCQlkaXNrLT5udW1fc2VjdG9ycyA9IHJkZXYtPnNpemUgKiAyOwotCQljb25mLT5hcnJheV9zZWN0b3JzICs9IHJkZXYtPnNpemUgKiAyOworCQlkaXNrLT5udW1fc2VjdG9ycyA9IHJkZXYtPnNlY3RvcnM7CisJCWNvbmYtPmFycmF5X3NlY3RvcnMgKz0gcmRldi0+c2VjdG9yczsKIAogCQljbnQrKzsKIAl9CkBAIC0yNDksNyArMjYzLDcgQEAKIAlpZiAoIWNvbmYpCiAJCXJldHVybiAxOwogCW1kZGV2LT5wcml2YXRlID0gY29uZjsKLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IGNvbmYtPmFycmF5X3NlY3RvcnM7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIGxpbmVhcl9zaXplKG1kZGV2LCAwLCAwKSk7CiAKIAlibGtfcXVldWVfbWVyZ2VfYnZlYyhtZGRldi0+cXVldWUsIGxpbmVhcl9tZXJnZWFibGVfYnZlYyk7CiAJbWRkZXYtPnF1ZXVlLT51bnBsdWdfZm4gPSBsaW5lYXJfdW5wbHVnOwpAQCAtMjgzLDcgKzI5Nyw3IEBACiAJbmV3Y29uZi0+cHJldiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwogCW1kZGV2LT5wcml2YXRlID0gbmV3Y29uZjsKIAltZGRldi0+cmFpZF9kaXNrcysrOwotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gbmV3Y29uZi0+YXJyYXlfc2VjdG9yczsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgbGluZWFyX3NpemUobWRkZXYsIDAsIDApKTsKIAlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM4MSw2ICszOTUsNyBAQAogCS5zdG9wCQk9IGxpbmVhcl9zdG9wLAogCS5zdGF0dXMJCT0gbGluZWFyX3N0YXR1cywKIAkuaG90X2FkZF9kaXNrCT0gbGluZWFyX2FkZCwKKwkuc2l6ZQkJPSBsaW5lYXJfc2l6ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGxpbmVhcl9pbml0ICh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuaCBiL2RyaXZlcnMvbWQvbGluZWFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4MTc5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvbGluZWFyLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfTElORUFSX0gKKyNkZWZpbmUgX0xJTkVBUl9ICisKK3N0cnVjdCBkZXZfaW5mbyB7CisJbWRrX3JkZXZfdAkqcmRldjsKKwlzZWN0b3JfdAludW1fc2VjdG9yczsKKwlzZWN0b3JfdAlzdGFydF9zZWN0b3I7Cit9OworCit0eXBlZGVmIHN0cnVjdCBkZXZfaW5mbyBkZXZfaW5mb190OworCitzdHJ1Y3QgbGluZWFyX3ByaXZhdGVfZGF0YQoreworCXN0cnVjdCBsaW5lYXJfcHJpdmF0ZV9kYXRhICpwcmV2OwkvKiBlYXJsaWVyIHZlcnNpb24gKi8KKwlkZXZfaW5mb190CQkqKmhhc2hfdGFibGU7CisJc2VjdG9yX3QJCXNwYWNpbmc7CisJc2VjdG9yX3QJCWFycmF5X3NlY3RvcnM7CisJaW50CQkJc2VjdG9yX3NoaWZ0OwkvKiBzaGlmdCBiZWZvcmUgZGl2aWRpbmcKKwkJCQkJCSAqIGJ5IHNwYWNpbmcKKwkJCQkJCSAqLworCWRldl9pbmZvX3QJCWRpc2tzWzBdOworfTsKKworCit0eXBlZGVmIHN0cnVjdCBsaW5lYXJfcHJpdmF0ZV9kYXRhIGxpbmVhcl9jb25mX3Q7CisKKyNkZWZpbmUgbWRkZXZfdG9fY29uZihtZGRldikgKChsaW5lYXJfY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBhMzA3Zjg3Li5lZDU3MjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0zMyw5ICszMyw5IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4gLyogZm9yIGludmFsaWRhdGVfYmRldiAqLwogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgpAQCAtNDUsMTEgKzQ1LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNkZWZpbmUgTUFKT1JfTlIgTURfTUFKT1IKLQotLyogNjMgcGFydGl0aW9ucyB3aXRoIHRoZSBhbHRlcm5hdGUgbWFqb3IgbnVtYmVyIChtZHApICovCi0jZGVmaW5lIE1kcE1pbm9yU2hpZnQgNgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSAiYml0bWFwLmgiCiAKICNkZWZpbmUgREVCVUcgMAogI2RlZmluZSBkcHJpbnRrKHguLi4pICgodm9pZCkoREVCVUcgJiYgcHJpbnRrKHgpKSkKQEAgLTIwMiwxMiArMjAxLDY4IEBACiAJCSkKIAogCi1zdGF0aWMgaW50IG1kX2ZhaWxfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQorLyogUmF0aGVyIHRoYW4gY2FsbGluZyBkaXJlY3RseSBpbnRvIHRoZSBwZXJzb25hbGl0eSBtYWtlX3JlcXVlc3QgZnVuY3Rpb24sCisgKiBJTyByZXF1ZXN0cyBjb21lIGhlcmUgZmlyc3Qgc28gdGhhdCB3ZSBjYW4gY2hlY2sgaWYgdGhlIGRldmljZSBpcworICogYmVpbmcgc3VzcGVuZGVkIHBlbmRpbmcgYSByZWNvbmZpZ3VyYXRpb24uCisgKiBXZSBob2xkIGEgcmVmY291bnQgb3ZlciB0aGUgY2FsbCB0byAtPm1ha2VfcmVxdWVzdC4gIEJ5IHRoZSB0aW1lIHRoYXQKKyAqIGNhbGwgaGFzIGZpbmlzaGVkLCB0aGUgYmlvIGhhcyBiZWVuIGxpbmtlZCBpbnRvIHNvbWUgaW50ZXJuYWwgc3RydWN0dXJlCisgKiBhbmQgc28gaXMgdmlzaWJsZSB0byAtPnF1aWVzY2UoKSwgc28gd2UgZG9uJ3QgbmVlZCB0aGUgcmVmY291bnQgYW55IG1vcmUuCisgKi8KK3N0YXRpYyBpbnQgbWRfbWFrZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JYmlvX2lvX2Vycm9yKGJpbyk7Ci0JcmV0dXJuIDA7CisJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CisJaW50IHJ2OworCWlmIChtZGRldiA9PSBOVUxMIHx8IG1kZGV2LT5wZXJzID09IE5VTEwpIHsKKwkJYmlvX2lvX2Vycm9yKGJpbyk7CisJCXJldHVybiAwOworCX0KKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKG1kZGV2LT5zdXNwZW5kZWQpIHsKKwkJREVGSU5FX1dBSVQoX193YWl0KTsKKwkJZm9yICg7OykgeworCQkJcHJlcGFyZV90b193YWl0KCZtZGRldi0+c2Jfd2FpdCwgJl9fd2FpdCwKKwkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJaWYgKCFtZGRldi0+c3VzcGVuZGVkKQorCQkJCWJyZWFrOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlzY2hlZHVsZSgpOworCQkJcmN1X3JlYWRfbG9jaygpOworCQl9CisJCWZpbmlzaF93YWl0KCZtZGRldi0+c2Jfd2FpdCwgJl9fd2FpdCk7CisJfQorCWF0b21pY19pbmMoJm1kZGV2LT5hY3RpdmVfaW8pOworCXJjdV9yZWFkX3VubG9jaygpOworCXJ2ID0gbWRkZXYtPnBlcnMtPm1ha2VfcmVxdWVzdChxLCBiaW8pOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtZGRldi0+YWN0aXZlX2lvKSAmJiBtZGRldi0+c3VzcGVuZGVkKQorCQl3YWtlX3VwKCZtZGRldi0+c2Jfd2FpdCk7CisKKwlyZXR1cm4gcnY7CiB9CiAKK3N0YXRpYyB2b2lkIG1kZGV2X3N1c3BlbmQobWRkZXZfdCAqbWRkZXYpCit7CisJQlVHX09OKG1kZGV2LT5zdXNwZW5kZWQpOworCW1kZGV2LT5zdXNwZW5kZWQgPSAxOworCXN5bmNocm9uaXplX3JjdSgpOworCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsIGF0b21pY19yZWFkKCZtZGRldi0+YWN0aXZlX2lvKSA9PSAwKTsKKwltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMSk7CisJbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRkZXYtPnRocmVhZCk7CisJbWRkZXYtPnRocmVhZCA9IE5VTEw7CisJLyogd2Ugbm93IGtub3cgdGhhdCBubyBjb2RlIGlzIGV4ZWN1dGluZyBpbiB0aGUgcGVyc29uYWxpdHkgbW9kdWxlLAorCSAqIGV4Y2VwdCBwb3NzaWJseSB0aGUgdGFpbCBlbmQgb2YgYSAtPmJpX2VuZF9pbyBmdW5jdGlvbiwgYnV0IHRoYXQKKwkgKiBpcyBjZXJ0YWluIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUgbW9kdWxlIGhhcyBhIGNoYW5jZSB0byBnZXQKKwkgKiB1bmxvYWRlZAorCSAqLworfQorCitzdGF0aWMgdm9pZCBtZGRldl9yZXN1bWUobWRkZXZfdCAqbWRkZXYpCit7CisJbWRkZXYtPnN1c3BlbmRlZCA9IDA7CisJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOworCW1kZGV2LT5wZXJzLT5xdWllc2NlKG1kZGV2LCAwKTsKK30KKworCiBzdGF0aWMgaW5saW5lIG1kZGV2X3QgKm1kZGV2X2dldChtZGRldl90ICptZGRldikKIHsKIAlhdG9taWNfaW5jKCZtZGRldi0+YWN0aXZlKTsKQEAgLTMxMCw2ICszNjUsNyBAQAogCWluaXRfdGltZXIoJm5ldy0+c2FmZW1vZGVfdGltZXIpOwogCWF0b21pY19zZXQoJm5ldy0+YWN0aXZlLCAxKTsKIAlhdG9taWNfc2V0KCZuZXctPm9wZW5lcnMsIDApOworCWF0b21pY19zZXQoJm5ldy0+YWN0aXZlX2lvLCAwKTsKIAlzcGluX2xvY2tfaW5pdCgmbmV3LT53cml0ZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuZXctPnNiX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5ldy0+cmVjb3Zlcnlfd2FpdCk7CkBAIC0zMjYsNiArMzgyLDExIEBACiAJcmV0dXJuIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbWRkZXYtPnJlY29uZmlnX211dGV4KTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbWRkZXZfaXNfbG9ja2VkKG1kZGV2X3QgKm1kZGV2KQoreworCXJldHVybiBtdXRleF9pc19sb2NrZWQoJm1kZGV2LT5yZWNvbmZpZ19tdXRleCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG1kZGV2X3RyeWxvY2sobWRkZXZfdCAqIG1kZGV2KQogewogCXJldHVybiBtdXRleF90cnlsb2NrKCZtZGRldi0+cmVjb25maWdfbXV0ZXgpOwpAQCAtNDA5LDcgKzQ3MCw3IEBACiAJCXJkZXYtPnNiX2xvYWRlZCA9IDA7CiAJCXJkZXYtPnNiX3BhZ2UgPSBOVUxMOwogCQlyZGV2LT5zYl9zdGFydCA9IDA7Ci0JCXJkZXYtPnNpemUgPSAwOworCQlyZGV2LT5zZWN0b3JzID0gMDsKIAl9CiB9CiAKQEAgLTc3NSw5ICs4MzYsOSBAQAogCQllbHNlIAogCQkJcmV0ID0gMDsKIAl9Ci0JcmRldi0+c2l6ZSA9IGNhbGNfbnVtX3NlY3RvcnMocmRldiwgc2ItPmNodW5rX3NpemUpIC8gMjsKKwlyZGV2LT5zZWN0b3JzID0gY2FsY19udW1fc2VjdG9ycyhyZGV2LCBzYi0+Y2h1bmtfc2l6ZSk7CiAKLQlpZiAocmRldi0+c2l6ZSA8IHNiLT5zaXplICYmIHNiLT5sZXZlbCA+IDEpCisJaWYgKHJkZXYtPnNlY3RvcnMgPCBzYi0+c2l6ZSAqIDIgJiYgc2ItPmxldmVsID4gMSkKIAkJLyogInRoaXMgY2Fubm90IHBvc3NpYmx5IGhhcHBlbiIgLi4uICovCiAJCXJldCA9IC1FSU5WQUw7CiAKQEAgLTgxMiw3ICs4NzMsNyBAQAogCQltZGRldi0+Y2xldmVsWzBdID0gMDsKIAkJbWRkZXYtPmxheW91dCA9IHNiLT5sYXlvdXQ7CiAJCW1kZGV2LT5yYWlkX2Rpc2tzID0gc2ItPnJhaWRfZGlza3M7Ci0JCW1kZGV2LT5zaXplID0gc2ItPnNpemU7CisJCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHNiLT5zaXplICogMjsKIAkJbWRkZXYtPmV2ZW50cyA9IGV2MTsKIAkJbWRkZXYtPmJpdG1hcF9vZmZzZXQgPSAwOwogCQltZGRldi0+ZGVmYXVsdF9iaXRtYXBfb2Zmc2V0ID0gTURfU0JfQllURVMgPj4gOTsKQEAgLTkyNiw3ICs5ODcsNyBAQAogCiAJc2ItPmN0aW1lID0gbWRkZXYtPmN0aW1lOwogCXNiLT5sZXZlbCA9IG1kZGV2LT5sZXZlbDsKLQlzYi0+c2l6ZSAgPSBtZGRldi0+c2l6ZTsKKwlzYi0+c2l6ZSA9IG1kZGV2LT5kZXZfc2VjdG9ycyAvIDI7CiAJc2ItPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKIAlzYi0+bWRfbWlub3IgPSBtZGRldi0+bWRfbWlub3I7CiAJc2ItPm5vdF9wZXJzaXN0ZW50ID0gMDsKQEAgLTEwMjQsNyArMTA4NSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nCiBzdXBlcl85MF9yZGV2X3NpemVfY2hhbmdlKG1ka19yZGV2X3QgKnJkZXYsIHNlY3Rvcl90IG51bV9zZWN0b3JzKQogewotCWlmIChudW1fc2VjdG9ycyAmJiBudW1fc2VjdG9ycyA8IHJkZXYtPm1kZGV2LT5zaXplICogMikKKwlpZiAobnVtX3NlY3RvcnMgJiYgbnVtX3NlY3RvcnMgPCByZGV2LT5tZGRldi0+ZGV2X3NlY3RvcnMpCiAJCXJldHVybiAwOyAvKiBjb21wb25lbnQgbXVzdCBmaXQgZGV2aWNlICovCiAJaWYgKHJkZXYtPm1kZGV2LT5iaXRtYXBfb2Zmc2V0KQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgbW92ZSBiaXRtYXAgKi8KQEAgLTExODAsMTYgKzEyNDEsMTcgQEAKIAkJCXJldCA9IDA7CiAJfQogCWlmIChtaW5vcl92ZXJzaW9uKQotCQlyZGV2LT5zaXplID0gKChyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplPj45KSAtIGxlNjRfdG9fY3B1KHNiLT5kYXRhX29mZnNldCkpIC8gMjsKKwkJcmRldi0+c2VjdG9ycyA9IChyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDkpIC0KKwkJCWxlNjRfdG9fY3B1KHNiLT5kYXRhX29mZnNldCk7CiAJZWxzZQotCQlyZGV2LT5zaXplID0gcmRldi0+c2Jfc3RhcnQgLyAyOwotCWlmIChyZGV2LT5zaXplIDwgbGU2NF90b19jcHUoc2ItPmRhdGFfc2l6ZSkvMikKKwkJcmRldi0+c2VjdG9ycyA9IHJkZXYtPnNiX3N0YXJ0OworCWlmIChyZGV2LT5zZWN0b3JzIDwgbGU2NF90b19jcHUoc2ItPmRhdGFfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCXJkZXYtPnNpemUgPSBsZTY0X3RvX2NwdShzYi0+ZGF0YV9zaXplKS8yOworCXJkZXYtPnNlY3RvcnMgPSBsZTY0X3RvX2NwdShzYi0+ZGF0YV9zaXplKTsKIAlpZiAobGUzMl90b19jcHUoc2ItPmNodW5rc2l6ZSkpCi0JCXJkZXYtPnNpemUgJj0gfigoc2VjdG9yX3QpbGUzMl90b19jcHUoc2ItPmNodW5rc2l6ZSkvMiAtIDEpOworCQlyZGV2LT5zZWN0b3JzICY9IH4oKHNlY3Rvcl90KWxlMzJfdG9fY3B1KHNiLT5jaHVua3NpemUpIC0gMSk7CiAKLQlpZiAobGU2NF90b19jcHUoc2ItPnNpemUpID4gcmRldi0+c2l6ZSoyKQorCWlmIChsZTY0X3RvX2NwdShzYi0+c2l6ZSkgPiByZGV2LT5zZWN0b3JzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTIxNiw3ICsxMjc4LDcgQEAKIAkJbWRkZXYtPmNsZXZlbFswXSA9IDA7CiAJCW1kZGV2LT5sYXlvdXQgPSBsZTMyX3RvX2NwdShzYi0+bGF5b3V0KTsKIAkJbWRkZXYtPnJhaWRfZGlza3MgPSBsZTMyX3RvX2NwdShzYi0+cmFpZF9kaXNrcyk7Ci0JCW1kZGV2LT5zaXplID0gbGU2NF90b19jcHUoc2ItPnNpemUpLzI7CisJCW1kZGV2LT5kZXZfc2VjdG9ycyA9IGxlNjRfdG9fY3B1KHNiLT5zaXplKTsKIAkJbWRkZXYtPmV2ZW50cyA9IGV2MTsKIAkJbWRkZXYtPmJpdG1hcF9vZmZzZXQgPSAwOwogCQltZGRldi0+ZGVmYXVsdF9iaXRtYXBfb2Zmc2V0ID0gMTAyNCA+PiA5OwpAQCAtMTMxMiw3ICsxMzc0LDcgQEAKIAlzYi0+Y250X2NvcnJlY3RlZF9yZWFkID0gY3B1X3RvX2xlMzIoYXRvbWljX3JlYWQoJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMpKTsKIAogCXNiLT5yYWlkX2Rpc2tzID0gY3B1X3RvX2xlMzIobWRkZXYtPnJhaWRfZGlza3MpOwotCXNiLT5zaXplID0gY3B1X3RvX2xlNjQobWRkZXYtPnNpemU8PDEpOworCXNiLT5zaXplID0gY3B1X3RvX2xlNjQobWRkZXYtPmRldl9zZWN0b3JzKTsKIAogCWlmIChtZGRldi0+Yml0bWFwICYmIG1kZGV2LT5iaXRtYXBfZmlsZSA9PSBOVUxMKSB7CiAJCXNiLT5iaXRtYXBfb2Zmc2V0ID0gY3B1X3RvX2xlMzIoKF9fdTMyKW1kZGV2LT5iaXRtYXBfb2Zmc2V0KTsKQEAgLTEzMjAsMTAgKzEzODIsMTUgQEAKIAl9CiAKIAlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKLQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKLQkgICAgcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID4gMCkgewotCQlzYi0+ZmVhdHVyZV9tYXAgfD0gY3B1X3RvX2xlMzIoTURfRkVBVFVSRV9SRUNPVkVSWV9PRkZTRVQpOwotCQlzYi0+cmVjb3Zlcnlfb2Zmc2V0ID0gY3B1X3RvX2xlNjQocmRldi0+cmVjb3Zlcnlfb2Zmc2V0KTsKKwkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKKwkJaWYgKG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgPiByZGV2LT5yZWNvdmVyeV9vZmZzZXQpCisJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkOworCQlpZiAocmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID4gMCkgeworCQkJc2ItPmZlYXR1cmVfbWFwIHw9CisJCQkJY3B1X3RvX2xlMzIoTURfRkVBVFVSRV9SRUNPVkVSWV9PRkZTRVQpOworCQkJc2ItPnJlY292ZXJ5X29mZnNldCA9CisJCQkJY3B1X3RvX2xlNjQocmRldi0+cmVjb3Zlcnlfb2Zmc2V0KTsKKwkJfQogCX0KIAogCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHsKQEAgLTEzNjUsNyArMTQzMiw3IEBACiB7CiAJc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgKnNiOwogCXNlY3Rvcl90IG1heF9zZWN0b3JzOwotCWlmIChudW1fc2VjdG9ycyAmJiBudW1fc2VjdG9ycyA8IHJkZXYtPm1kZGV2LT5zaXplICogMikKKwlpZiAobnVtX3NlY3RvcnMgJiYgbnVtX3NlY3RvcnMgPCByZGV2LT5tZGRldi0+ZGV2X3NlY3RvcnMpCiAJCXJldHVybiAwOyAvKiBjb21wb25lbnQgbXVzdCBmaXQgZGV2aWNlICovCiAJaWYgKHJkZXYtPnNiX3N0YXJ0IDwgcmRldi0+ZGF0YV9vZmZzZXQpIHsKIAkJLyogbWlub3IgdmVyc2lvbnMgMSBhbmQgMjsgc3VwZXJibG9jayBiZWZvcmUgZGF0YSAqLwpAQCAtMTM4MSw3ICsxNDQ4LDcgQEAKIAkJc2VjdG9yX3Qgc2Jfc3RhcnQ7CiAJCXNiX3N0YXJ0ID0gKHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gOSkgLSA4KjI7CiAJCXNiX3N0YXJ0ICY9IH4oc2VjdG9yX3QpKDQqMiAtIDEpOwotCQltYXhfc2VjdG9ycyA9IHJkZXYtPnNpemUgKiAyICsgc2Jfc3RhcnQgLSByZGV2LT5zYl9zdGFydDsKKwkJbWF4X3NlY3RvcnMgPSByZGV2LT5zZWN0b3JzICsgc2Jfc3RhcnQgLSByZGV2LT5zYl9zdGFydDsKIAkJaWYgKCFudW1fc2VjdG9ycyB8fCBudW1fc2VjdG9ycyA+IG1heF9zZWN0b3JzKQogCQkJbnVtX3NlY3RvcnMgPSBtYXhfc2VjdG9yczsKIAkJcmRldi0+c2Jfc3RhcnQgPSBzYl9zdGFydDsKQEAgLTE0MzMsNiArMTUwMCwzOCBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHBlbmRpbmdfcmFpZF9kaXNrcyk7CiAKK3N0YXRpYyB2b2lkIG1kX2ludGVncml0eV9jaGVjayhtZGtfcmRldl90ICpyZGV2LCBtZGRldl90ICptZGRldikKK3sKKwlzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5ICpwZXJzID0gbWRkZXYtPnBlcnM7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBtZGRldi0+Z2VuZGlzazsKKwlzdHJ1Y3QgYmxrX2ludGVncml0eSAqYmlfcmRldiA9IGJkZXZfZ2V0X2ludGVncml0eShyZGV2LT5iZGV2KTsKKwlzdHJ1Y3QgYmxrX2ludGVncml0eSAqYmlfbWRkZXYgPSBibGtfZ2V0X2ludGVncml0eShkaXNrKTsKKworCS8qIERhdGEgaW50ZWdyaXR5IHBhc3N0aHJvdWdoIG5vdCBzdXBwb3J0ZWQgb24gUkFJRCA0LCA1IGFuZCA2ICovCisJaWYgKHBlcnMgJiYgcGVycy0+bGV2ZWwgPj0gNCAmJiBwZXJzLT5sZXZlbCA8PSA2KQorCQlyZXR1cm47CisKKwkvKiBJZiByZGV2IGlzIGludGVncml0eSBjYXBhYmxlLCByZWdpc3RlciBwcm9maWxlIGZvciBtZGRldiAqLworCWlmICghYmlfbWRkZXYgJiYgYmlfcmRldikgeworCQlpZiAoYmxrX2ludGVncml0eV9yZWdpc3RlcihkaXNrLCBiaV9yZGV2KSkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIENvdWxkIG5vdCByZWdpc3RlciBpbnRlZ3JpdHkhXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBkaXNrLT5kaXNrX25hbWUpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkVuYWJsaW5nIGRhdGEgaW50ZWdyaXR5IG9uICVzXG4iLAorCQkJICAgICAgIGRpc2stPmRpc2tfbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayB0aGF0IG1kZGV2IGFuZCByZGV2IGhhdmUgbWF0Y2hpbmcgcHJvZmlsZXMgKi8KKwlpZiAoYmxrX2ludGVncml0eV9jb21wYXJlKGRpc2ssIHJkZXYtPmJkZXYtPmJkX2Rpc2spIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcy8lcyBpbnRlZ3JpdHkgbWlzbWF0Y2ghXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgIGRpc2stPmRpc2tfbmFtZSwgcmRldi0+YmRldi0+YmRfZGlzay0+ZGlza19uYW1lKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJEaXNhYmxpbmcgZGF0YSBpbnRlZ3JpdHkgb24gJXNcbiIsCisJCSAgICAgICBkaXNrLT5kaXNrX25hbWUpOworCQlibGtfaW50ZWdyaXR5X3VucmVnaXN0ZXIoZGlzayk7CisJfQorfQorCiBzdGF0aWMgaW50IGJpbmRfcmRldl90b19hcnJheShtZGtfcmRldl90ICogcmRldiwgbWRkZXZfdCAqIG1kZGV2KQogewogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKQEAgLTE0NDksOCArMTU0OCw5IEBACiAJaWYgKGZpbmRfcmRldihtZGRldiwgcmRldi0+YmRldi0+YmRfZGV2KSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKLQkvKiBtYWtlIHN1cmUgcmRldi0+c2l6ZSBleGNlZWRzIG1kZGV2LT5zaXplICovCi0JaWYgKHJkZXYtPnNpemUgJiYgKG1kZGV2LT5zaXplID09IDAgfHwgcmRldi0+c2l6ZSA8IG1kZGV2LT5zaXplKSkgeworCS8qIG1ha2Ugc3VyZSByZGV2LT5zZWN0b3JzIGV4Y2VlZHMgbWRkZXYtPmRldl9zZWN0b3JzICovCisJaWYgKHJkZXYtPnNlY3RvcnMgJiYgKG1kZGV2LT5kZXZfc2VjdG9ycyA9PSAwIHx8CisJCQlyZGV2LT5zZWN0b3JzIDwgbWRkZXYtPmRldl9zZWN0b3JzKSkgewogCQlpZiAobWRkZXYtPnBlcnMpIHsKIAkJCS8qIENhbm5vdCBjaGFuZ2Ugc2l6ZSwgc28gZmFpbAogCQkJICogSWYgbWRkZXYtPmxldmVsIDw9IDAsIHRoZW4gd2UgZG9uJ3QgY2FyZQpAQCAtMTQ1OSw3ICsxNTU5LDcgQEAKIAkJCWlmIChtZGRldi0+bGV2ZWwgPiAwKQogCQkJCXJldHVybiAtRU5PU1BDOwogCQl9IGVsc2UKLQkJCW1kZGV2LT5zaXplID0gcmRldi0+c2l6ZTsKKwkJCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHJkZXYtPnNlY3RvcnM7CiAJfQogCiAJLyogVmVyaWZ5IHJkZXYtPmRlc2NfbnIgaXMgdW5pcXVlLgpAQCAtMTUwMyw2ICsxNjAzLDggQEAKIAogCS8qIE1heSBhcyB3ZWxsIGFsbG93IHJlY292ZXJ5IHRvIGJlIHJldHJpZWQgb25jZSAqLwogCW1kZGV2LT5yZWNvdmVyeV9kaXNhYmxlZCA9IDA7CisKKwltZF9pbnRlZ3JpdHlfY2hlY2socmRldiwgbWRkZXYpOwogCXJldHVybiAwOwogCiAgZmFpbDoKQEAgLTE3MTMsOCArMTgxNSw4IEBACiBzdGF0aWMgdm9pZCBwcmludF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIGludCBtYWpvcl92ZXJzaW9uKQogewogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKLQlwcmludGsoS0VSTl9JTkZPICJtZDogcmRldiAlcywgU1o6JTA4bGx1IEY6JWQgUzolZCBETjoldVxuIiwKLQkJYmRldm5hbWUocmRldi0+YmRldixiKSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zaXplLAorCXByaW50ayhLRVJOX0lORk8gIm1kOiByZGV2ICVzLCBTZWN0OiUwOGxsdSBGOiVkIFM6JWQgRE46JXVcbiIsCisJCWJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpLCAodW5zaWduZWQgbG9uZyBsb25nKXJkZXYtPnNlY3RvcnMsCiAJICAgICAgICB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyksIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyksCiAJICAgICAgICByZGV2LT5kZXNjX25yKTsKIAlpZiAocmRldi0+c2JfbG9hZGVkKSB7CkBAIC0yMTUzLDcgKzIyNTUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocmRldi0+bWRkZXYtPnBlcnMgJiYgcmRldi0+cmFpZF9kaXNrID49IDApCiAJCXJldHVybiAtRUJVU1k7Ci0JaWYgKHJkZXYtPnNpemUgJiYgcmRldi0+bWRkZXYtPmV4dGVybmFsKQorCWlmIChyZGV2LT5zZWN0b3JzICYmIHJkZXYtPm1kZGV2LT5leHRlcm5hbCkKIAkJLyogTXVzdCBzZXQgb2Zmc2V0IGJlZm9yZSBzaXplLCBzbyBvdmVybGFwIGNoZWNrcwogCQkgKiBjYW4gYmUgc2FuZSAqLwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjE2Nyw3ICsyMjY5LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiByZGV2X3NpemVfc2hvdyhtZGtfcmRldl90ICpyZGV2LCBjaGFyICpwYWdlKQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXJkZXYtPnNpemUpOworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXJkZXYtPnNlY3RvcnMgLyAyKTsKIH0KIAogc3RhdGljIGludCBvdmVybGFwcyhzZWN0b3JfdCBzMSwgc2VjdG9yX3QgbDEsIHNlY3Rvcl90IHMyLCBzZWN0b3JfdCBsMikKQEAgLTIxODAsMzQgKzIyODIsNTIgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBzdHJpY3RfYmxvY2tzX3RvX3NlY3RvcnMoY29uc3QgY2hhciAqYnVmLCBzZWN0b3JfdCAqc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2tzOworCXNlY3Rvcl90IG5ldzsKKworCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAxMCwgJmJsb2NrcykgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChibG9ja3MgJiAxVUxMIDw8ICg4ICogc2l6ZW9mKGJsb2NrcykgLSAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIHNlY3RvciBjb252ZXJzaW9uIG92ZXJmbG93ICovCisKKwluZXcgPSBibG9ja3MgKiAyOworCWlmIChuZXcgIT0gYmxvY2tzICogMikKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIHVuc2lnbmVkIGxvbmcgbG9uZyB0byBzZWN0b3JfdCBvdmVyZmxvdyAqLworCisJKnNlY3RvcnMgPSBuZXc7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90CiByZGV2X3NpemVfc3RvcmUobWRrX3JkZXZfdCAqcmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvbGRzaXplID0gcmRldi0+c2l6ZTsKIAltZGRldl90ICpteV9tZGRldiA9IHJkZXYtPm1kZGV2OworCXNlY3Rvcl90IG9sZHNlY3RvcnMgPSByZGV2LT5zZWN0b3JzOworCXNlY3Rvcl90IHNlY3RvcnM7CiAKLQlpZiAoc3RyaWN0X3N0cnRvdWxsKGJ1ZiwgMTAsICZzaXplKSA8IDApCisJaWYgKHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhidWYsICZzZWN0b3JzKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChteV9tZGRldi0+cGVycyAmJiByZGV2LT5yYWlkX2Rpc2sgPj0gMCkgewogCQlpZiAobXlfbWRkZXYtPnBlcnNpc3RlbnQpIHsKLQkJCXNpemUgPSBzdXBlcl90eXBlc1tteV9tZGRldi0+bWFqb3JfdmVyc2lvbl0uCi0JCQkJcmRldl9zaXplX2NoYW5nZShyZGV2LCBzaXplICogMik7Ci0JCQlpZiAoIXNpemUpCisJCQlzZWN0b3JzID0gc3VwZXJfdHlwZXNbbXlfbWRkZXYtPm1ham9yX3ZlcnNpb25dLgorCQkJCXJkZXZfc2l6ZV9jaGFuZ2UocmRldiwgc2VjdG9ycyk7CisJCQlpZiAoIXNlY3RvcnMpCiAJCQkJcmV0dXJuIC1FQlVTWTsKLQkJfSBlbHNlIGlmICghc2l6ZSkgewotCQkJc2l6ZSA9IChyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDEwKTsKLQkJCXNpemUgLT0gcmRldi0+ZGF0YV9vZmZzZXQvMjsKLQkJfQorCQl9IGVsc2UgaWYgKCFzZWN0b3JzKQorCQkJc2VjdG9ycyA9IChyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDkpIC0KKwkJCQlyZGV2LT5kYXRhX29mZnNldDsKIAl9Ci0JaWYgKHNpemUgPCBteV9tZGRldi0+c2l6ZSkKKwlpZiAoc2VjdG9ycyA8IG15X21kZGV2LT5kZXZfc2VjdG9ycykKIAkJcmV0dXJuIC1FSU5WQUw7IC8qIGNvbXBvbmVudCBtdXN0IGZpdCBkZXZpY2UgKi8KIAotCXJkZXYtPnNpemUgPSBzaXplOwotCWlmIChzaXplID4gb2xkc2l6ZSAmJiBteV9tZGRldi0+ZXh0ZXJuYWwpIHsKKwlyZGV2LT5zZWN0b3JzID0gc2VjdG9yczsKKwlpZiAoc2VjdG9ycyA+IG9sZHNlY3RvcnMgJiYgbXlfbWRkZXYtPmV4dGVybmFsKSB7CiAJCS8qIG5lZWQgdG8gY2hlY2sgdGhhdCBhbGwgb3RoZXIgcmRldnMgd2l0aCB0aGUgc2FtZSAtPmJkZXYKIAkJICogZG8gbm90IG92ZXJsYXAuICBXZSBuZWVkIHRvIHVubG9jayB0aGUgbWRkZXYgdG8gYXZvaWQKLQkJICogYSBkZWFkbG9jay4gIFdlIGhhdmUgYWxyZWFkeSBjaGFuZ2VkIHJkZXYtPnNpemUsIGFuZCBpZgorCQkgKiBhIGRlYWRsb2NrLiAgV2UgaGF2ZSBhbHJlYWR5IGNoYW5nZWQgcmRldi0+c2VjdG9ycywgYW5kIGlmCiAJCSAqIHdlIGhhdmUgdG8gY2hhbmdlIGl0IGJhY2ssIHdlIHdpbGwgaGF2ZSB0aGUgbG9jayBhZ2Fpbi4KIAkJICovCiAJCW1kZGV2X3QgKm1kZGV2OwpAQCAtMjIyMyw5ICsyMzQzLDkgQEAKIAkJCQlpZiAodGVzdF9iaXQoQWxsUmVzZXJ2ZWQsICZyZGV2Mi0+ZmxhZ3MpIHx8CiAJCQkJICAgIChyZGV2LT5iZGV2ID09IHJkZXYyLT5iZGV2ICYmCiAJCQkJICAgICByZGV2ICE9IHJkZXYyICYmCi0JCQkJICAgICBvdmVybGFwcyhyZGV2LT5kYXRhX29mZnNldCwgcmRldi0+c2l6ZSAqIDIsCisJCQkJICAgICBvdmVybGFwcyhyZGV2LT5kYXRhX29mZnNldCwgcmRldi0+c2VjdG9ycywKIAkJCQkJICAgICAgcmRldjItPmRhdGFfb2Zmc2V0LAotCQkJCQkgICAgICByZGV2Mi0+c2l6ZSAqIDIpKSkgeworCQkJCQkgICAgICByZGV2Mi0+c2VjdG9ycykpKSB7CiAJCQkJCW92ZXJsYXAgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC0yMjM5LDExICsyMzU5LDExIEBACiAJCWlmIChvdmVybGFwKSB7CiAJCQkvKiBTb21lb25lIGVsc2UgY291bGQgaGF2ZSBzbGlwcGVkIGluIGEgc2l6ZQogCQkJICogY2hhbmdlIGhlcmUsIGJ1dCBkb2luZyBzbyBpcyBqdXN0IHNpbGx5LgotCQkJICogV2UgcHV0IG9sZHNpemUgYmFjayBiZWNhdXNlIHdlICprbm93KiBpdCBpcworCQkJICogV2UgcHV0IG9sZHNlY3RvcnMgYmFjayBiZWNhdXNlIHdlICprbm93KiBpdCBpcwogCQkJICogc2FmZSwgYW5kIHRydXN0IHVzZXJzcGFjZSBub3QgdG8gcmFjZSB3aXRoCiAJCQkgKiBpdHNlbGYKIAkJCSAqLwotCQkJcmRldi0+c2l6ZSA9IG9sZHNpemU7CisJCQlyZGV2LT5zZWN0b3JzID0gb2xkc2VjdG9yczsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAl9CkBAIC0yNTQ3LDE4ICsyNjY3LDEwMSBAQAogc3RhdGljIHNzaXplX3QKIGxldmVsX3N0b3JlKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CisJY2hhciBsZXZlbFsxNl07CiAJc3NpemVfdCBydiA9IGxlbjsKLQlpZiAobWRkZXYtPnBlcnMpCisJc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcGVyczsKKwl2b2lkICpwcml2OworCisJaWYgKG1kZGV2LT5wZXJzID09IE5VTEwpIHsKKwkJaWYgKGxlbiA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWlmIChsZW4gPj0gc2l6ZW9mKG1kZGV2LT5jbGV2ZWwpKQorCQkJcmV0dXJuIC1FTk9TUEM7CisJCXN0cm5jcHkobWRkZXYtPmNsZXZlbCwgYnVmLCBsZW4pOworCQlpZiAobWRkZXYtPmNsZXZlbFtsZW4tMV0gPT0gJ1xuJykKKwkJCWxlbi0tOworCQltZGRldi0+Y2xldmVsW2xlbl0gPSAwOworCQltZGRldi0+bGV2ZWwgPSBMRVZFTF9OT05FOworCQlyZXR1cm4gcnY7CisJfQorCisJLyogcmVxdWVzdCB0byBjaGFuZ2UgdGhlIHBlcnNvbmFsaXR5LiAgTmVlZCB0byBlbnN1cmU6CisJICogIC0gYXJyYXkgaXMgbm90IGVuZ2FnZWQgaW4gcmVzeW5jL3JlY292ZXJ5L3Jlc2hhcGUKKwkgKiAgLSBvbGQgcGVyc29uYWxpdHkgY2FuIGJlIHN1c3BlbmRlZAorCSAqICAtIG5ldyBwZXJzb25hbGl0eSB3aWxsIGFjY2VzcyBvdGhlciBhcnJheS4KKwkgKi8KKworCWlmIChtZGRldi0+c3luY190aHJlYWQgfHwgbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKQogCQlyZXR1cm4gLUVCVVNZOwotCWlmIChsZW4gPT0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGxlbiA+PSBzaXplb2YobWRkZXYtPmNsZXZlbCkpCi0JCXJldHVybiAtRU5PU1BDOwotCXN0cm5jcHkobWRkZXYtPmNsZXZlbCwgYnVmLCBsZW4pOwotCWlmIChtZGRldi0+Y2xldmVsW2xlbi0xXSA9PSAnXG4nKQorCisJaWYgKCFtZGRldi0+cGVycy0+cXVpZXNjZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogJXM6ICVzIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHBlcnNvbmFsaXR5IGNoYW5nZVxuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldiksIG1kZGV2LT5wZXJzLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTm93IGZpbmQgdGhlIG5ldyBwZXJzb25hbGl0eSAqLworCWlmIChsZW4gPT0gMCB8fCBsZW4gPj0gc2l6ZW9mKGxldmVsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3RybmNweShsZXZlbCwgYnVmLCBsZW4pOworCWlmIChsZXZlbFtsZW4tMV0gPT0gJ1xuJykKIAkJbGVuLS07Ci0JbWRkZXYtPmNsZXZlbFtsZW5dID0gMDsKLQltZGRldi0+bGV2ZWwgPSBMRVZFTF9OT05FOworCWxldmVsW2xlbl0gPSAwOworCisJcmVxdWVzdF9tb2R1bGUoIm1kLSVzIiwgbGV2ZWwpOworCXNwaW5fbG9jaygmcGVyc19sb2NrKTsKKwlwZXJzID0gZmluZF9wZXJzKExFVkVMX05PTkUsIGxldmVsKTsKKwlpZiAoIXBlcnMgfHwgIXRyeV9tb2R1bGVfZ2V0KHBlcnMtPm93bmVyKSkgeworCQlzcGluX3VubG9jaygmcGVyc19sb2NrKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibWQ6IHBlcnNvbmFsaXR5ICVzIG5vdCBsb2FkZWRcbiIsIGxldmVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrKCZwZXJzX2xvY2spOworCisJaWYgKHBlcnMgPT0gbWRkZXYtPnBlcnMpIHsKKwkJLyogTm90aGluZyB0byBkbyEgKi8KKwkJbW9kdWxlX3B1dChwZXJzLT5vd25lcik7CisJCXJldHVybiBydjsKKwl9CisJaWYgKCFwZXJzLT50YWtlb3ZlcikgeworCQltb2R1bGVfcHV0KHBlcnMtPm93bmVyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibWQ6ICVzOiAlcyBkb2VzIG5vdCBzdXBwb3J0IHBlcnNvbmFsaXR5IHRha2VvdmVyXG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgbGV2ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiAtPnRha2VvdmVyIG11c3Qgc2V0IG5ld18qIGFuZC9vciBkZWx0YV9kaXNrcworCSAqIGlmIGl0IHN1Y2NlZWRzLCBhbmQgbWF5IHNldCB0aGVtIHdoZW4gaXQgZmFpbHMuCisJICovCisJcHJpdiA9IHBlcnMtPnRha2VvdmVyKG1kZGV2KTsKKwlpZiAoSVNfRVJSKHByaXYpKSB7CisJCW1kZGV2LT5uZXdfbGV2ZWwgPSBtZGRldi0+bGV2ZWw7CisJCW1kZGV2LT5uZXdfbGF5b3V0ID0gbWRkZXYtPmxheW91dDsKKwkJbWRkZXYtPm5ld19jaHVuayA9IG1kZGV2LT5jaHVua19zaXplOworCQltZGRldi0+cmFpZF9kaXNrcyAtPSBtZGRldi0+ZGVsdGFfZGlza3M7CisJCW1kZGV2LT5kZWx0YV9kaXNrcyA9IDA7CisJCW1vZHVsZV9wdXQocGVycy0+b3duZXIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogJXM6ICVzIHdvdWxkIG5vdCBhY2NlcHQgYXJyYXlcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpLCBsZXZlbCk7CisJCXJldHVybiBQVFJfRVJSKHByaXYpOworCX0KKworCS8qIExvb2tzIGxpa2Ugd2UgaGF2ZSBhIHdpbm5lciAqLworCW1kZGV2X3N1c3BlbmQobWRkZXYpOworCW1kZGV2LT5wZXJzLT5zdG9wKG1kZGV2KTsKKwltb2R1bGVfcHV0KG1kZGV2LT5wZXJzLT5vd25lcik7CisJbWRkZXYtPnBlcnMgPSBwZXJzOworCW1kZGV2LT5wcml2YXRlID0gcHJpdjsKKwlzdHJsY3B5KG1kZGV2LT5jbGV2ZWwsIHBlcnMtPm5hbWUsIHNpemVvZihtZGRldi0+Y2xldmVsKSk7CisJbWRkZXYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKKwltZGRldi0+bGF5b3V0ID0gbWRkZXYtPm5ld19sYXlvdXQ7CisJbWRkZXYtPmNodW5rX3NpemUgPSBtZGRldi0+bmV3X2NodW5rOworCW1kZGV2LT5kZWx0YV9kaXNrcyA9IDA7CisJcGVycy0+cnVuKG1kZGV2KTsKKwltZGRldl9yZXN1bWUobWRkZXYpOworCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOworCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKKwltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCXJldHVybiBydjsKIH0KIApAQCAtMjU4NiwxMiArMjc4OSwxOCBAQAogCWlmICghKmJ1ZiB8fCAoKmUgJiYgKmUgIT0gJ1xuJykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG1kZGV2LT5wZXJzKQotCQlyZXR1cm4gLUVCVVNZOwotCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpCisJaWYgKG1kZGV2LT5wZXJzKSB7CisJCWludCBlcnI7CisJCWlmIChtZGRldi0+cGVycy0+cmVjb25maWcgPT0gTlVMTCkKKwkJCXJldHVybiAtRUJVU1k7CisJCWVyciA9IG1kZGV2LT5wZXJzLT5yZWNvbmZpZyhtZGRldiwgbiwgLTEpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgewogCQltZGRldi0+bmV3X2xheW91dCA9IG47Ci0JZWxzZQotCQltZGRldi0+bGF5b3V0ID0gbjsKKwkJaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvcikKKwkJCW1kZGV2LT5sYXlvdXQgPSBuOworCX0KIAlyZXR1cm4gbGVuOwogfQogc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9sYXlvdXQgPQpAQCAtMjY0OCwxOSArMjg1NywyNCBAQAogc3RhdGljIHNzaXplX3QKIGNodW5rX3NpemVfc3RvcmUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQkvKiBjYW4gb25seSBzZXQgY2h1bmtfc2l6ZSBpZiBhcnJheSBpcyBub3QgeWV0IGFjdGl2ZSAqLwogCWNoYXIgKmU7CiAJdW5zaWduZWQgbG9uZyBuID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZSwgMTApOwogCiAJaWYgKCEqYnVmIHx8ICgqZSAmJiAqZSAhPSAnXG4nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobWRkZXYtPnBlcnMpCi0JCXJldHVybiAtRUJVU1k7Ci0JZWxzZSBpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKQorCWlmIChtZGRldi0+cGVycykgeworCQlpbnQgZXJyOworCQlpZiAobWRkZXYtPnBlcnMtPnJlY29uZmlnID09IE5VTEwpCisJCQlyZXR1cm4gLUVCVVNZOworCQllcnIgPSBtZGRldi0+cGVycy0+cmVjb25maWcobWRkZXYsIC0xLCBuKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKIAkJbWRkZXYtPm5ld19jaHVuayA9IG47Ci0JZWxzZQotCQltZGRldi0+Y2h1bmtfc2l6ZSA9IG47CisJCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IpCisJCQltZGRldi0+Y2h1bmtfc2l6ZSA9IG47CisJfQogCXJldHVybiBsZW47CiB9CiBzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IG1kX2NodW5rX3NpemUgPQpAQCAtMjY2OSw2ICsyODgzLDggQEAKIHN0YXRpYyBzc2l6ZV90CiByZXN5bmNfc3RhcnRfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKIHsKKwlpZiAobWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIm5vbmVcbiIpOwogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKW1kZGV2LT5yZWNvdmVyeV9jcCk7CiB9CiAKQEAgLTI3NjYsNyArMjk4Miw3IEBACiAJZWxzZSB7CiAJCWlmIChsaXN0X2VtcHR5KCZtZGRldi0+ZGlza3MpICYmCiAJCSAgICBtZGRldi0+cmFpZF9kaXNrcyA9PSAwICYmCi0JCSAgICBtZGRldi0+c2l6ZSA9PSAwKQorCQkgICAgbWRkZXYtPmRldl9zZWN0b3JzID09IDApCiAJCQlzdCA9IGNsZWFyOwogCQllbHNlCiAJCQlzdCA9IGluYWN0aXZlOwpAQCAtMjk3Myw3ICszMTg5LDggQEAKIHN0YXRpYyBzc2l6ZV90CiBzaXplX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPnNpemUpOworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKW1kZGV2LT5kZXZfc2VjdG9ycyAvIDIpOwogfQogCiBzdGF0aWMgaW50IHVwZGF0ZV9zaXplKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBudW1fc2VjdG9ycyk7CkBAIC0yOTg1LDIwICszMjAyLDE4IEBACiAJICogbm90IGluY3JlYXNlIGl0IChleGNlcHQgZnJvbSAwKS4KIAkgKiBJZiBhcnJheSBpcyBhY3RpdmUsIHdlIGNhbiB0cnkgYW4gb24tbGluZSByZXNpemUKIAkgKi8KLQljaGFyICplOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZiwgJmUsIDEwKTsKLQlpZiAoISpidWYgfHwgKmJ1ZiA9PSAnXG4nIHx8Ci0JICAgICgqZSAmJiAqZSAhPSAnXG4nKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc2VjdG9yX3Qgc2VjdG9yczsKKwlpbnQgZXJyID0gc3RyaWN0X2Jsb2Nrc190b19zZWN0b3JzKGJ1ZiwgJnNlY3RvcnMpOwogCisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKG1kZGV2LT5wZXJzKSB7Ci0JCWVyciA9IHVwZGF0ZV9zaXplKG1kZGV2LCBzaXplICogMik7CisJCWVyciA9IHVwZGF0ZV9zaXplKG1kZGV2LCBzZWN0b3JzKTsKIAkJbWRfdXBkYXRlX3NiKG1kZGV2LCAxKTsKIAl9IGVsc2UgewotCQlpZiAobWRkZXYtPnNpemUgPT0gMCB8fAotCQkgICAgbWRkZXYtPnNpemUgPiBzaXplKQotCQkJbWRkZXYtPnNpemUgPSBzaXplOworCQlpZiAobWRkZXYtPmRldl9zZWN0b3JzID09IDAgfHwKKwkJICAgIG1kZGV2LT5kZXZfc2VjdG9ycyA+IHNlY3RvcnMpCisJCQltZGRldi0+ZGV2X3NlY3RvcnMgPSBzZWN0b3JzOwogCQllbHNlCiAJCQllcnIgPSAtRU5PU1BDOwogCX0KQEAgLTMyNTEsNiArMzQ2Niw4IEBACiBzeW5jX3NwZWVkX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyByZXN5bmMsIGR0LCBkYjsKKwlpZiAobWRkZXYtPmN1cnJfcmVzeW5jID09IDApCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJub25lXG4iKTsKIAlyZXN5bmMgPSBtZGRldi0+Y3Vycl9tYXJrX2NudCAtIGF0b21pY19yZWFkKCZtZGRldi0+cmVjb3ZlcnlfYWN0aXZlKTsKIAlkdCA9IChqaWZmaWVzIC0gbWRkZXYtPnJlc3luY19tYXJrKSAvIEhaOwogCWlmICghZHQpIGR0Kys7CkBAIC0zMjYzLDE1ICszNDgwLDE1IEBACiBzdGF0aWMgc3NpemVfdAogc3luY19jb21wbGV0ZWRfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKIHsKLQl1bnNpZ25lZCBsb25nIG1heF9ibG9ja3MsIHJlc3luYzsKKwl1bnNpZ25lZCBsb25nIG1heF9zZWN0b3JzLCByZXN5bmM7CiAKIAlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkpCi0JCW1heF9ibG9ja3MgPSBtZGRldi0+cmVzeW5jX21heF9zZWN0b3JzOworCQltYXhfc2VjdG9ycyA9IG1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnM7CiAJZWxzZQotCQltYXhfYmxvY2tzID0gbWRkZXYtPnNpemUgPDwgMTsKKwkJbWF4X3NlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAKIAlyZXN5bmMgPSAobWRkZXYtPmN1cnJfcmVzeW5jIC0gYXRvbWljX3JlYWQoJm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpKTsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWx1IC8gJWx1XG4iLCByZXN5bmMsIG1heF9ibG9ja3MpOworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbHUgLyAlbHVcbiIsIHJlc3luYywgbWF4X3NlY3RvcnMpOwogfQogCiBzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IG1kX3N5bmNfY29tcGxldGVkID0gX19BVFRSX1JPKHN5bmNfY29tcGxldGVkKTsKQEAgLTM0MzEsNiArMzY0OCw1NyBAQAogX19BVFRSKHJlc2hhcGVfcG9zaXRpb24sIFNfSVJVR098U19JV1VTUiwgcmVzaGFwZV9wb3NpdGlvbl9zaG93LAogICAgICAgIHJlc2hhcGVfcG9zaXRpb25fc3RvcmUpOwogCitzdGF0aWMgc3NpemVfdAorYXJyYXlfc2l6ZV9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCWlmIChtZGRldi0+ZXh0ZXJuYWxfc2l6ZSkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsbHVcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+YXJyYXlfc2VjdG9ycy8yKTsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJkZWZhdWx0XG4iKTsKK30KKworc3RhdGljIHNzaXplX3QKK2FycmF5X3NpemVfc3RvcmUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzZWN0b3JfdCBzZWN0b3JzOworCisJaWYgKHN0cm5jbXAoYnVmLCAiZGVmYXVsdCIsIDcpID09IDApIHsKKwkJaWYgKG1kZGV2LT5wZXJzKQorCQkJc2VjdG9ycyA9IG1kZGV2LT5wZXJzLT5zaXplKG1kZGV2LCAwLCAwKTsKKwkJZWxzZQorCQkJc2VjdG9ycyA9IG1kZGV2LT5hcnJheV9zZWN0b3JzOworCisJCW1kZGV2LT5leHRlcm5hbF9zaXplID0gMDsKKwl9IGVsc2UgeworCQlpZiAoc3RyaWN0X2Jsb2Nrc190b19zZWN0b3JzKGJ1ZiwgJnNlY3RvcnMpIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobWRkZXYtPnBlcnMgJiYgbWRkZXYtPnBlcnMtPnNpemUobWRkZXYsIDAsIDApIDwgc2VjdG9ycykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1kZGV2LT5leHRlcm5hbF9zaXplID0gMTsKKwl9CisKKwltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNlY3RvcnM7CisJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CisJaWYgKG1kZGV2LT5wZXJzKSB7CisJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBiZGdldF9kaXNrKG1kZGV2LT5nZW5kaXNrLCAwKTsKKworCQlpZiAoYmRldikgeworCQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLAorCQkJCSAgICAgKGxvZmZfdCltZGRldi0+YXJyYXlfc2VjdG9ycyA8PCA5KTsKKwkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJYmRwdXQoYmRldik7CisJCX0KKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IG1kX2FycmF5X3NpemUgPQorX19BVFRSKGFycmF5X3NpemUsIFNfSVJVR098U19JV1VTUiwgYXJyYXlfc2l6ZV9zaG93LAorICAgICAgIGFycmF5X3NpemVfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWRfZGVmYXVsdF9hdHRyc1tdID0gewogCSZtZF9sZXZlbC5hdHRyLApAQCAtMzQ0NCw2ICszNzEyLDcgQEAKIAkmbWRfc2FmZV9kZWxheS5hdHRyLAogCSZtZF9hcnJheV9zdGF0ZS5hdHRyLAogCSZtZF9yZXNoYXBlX3Bvc2l0aW9uLmF0dHIsCisJJm1kX2FycmF5X3NpemUuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMzYwMiwxMCArMzg3MSwxMiBAQAogCQltZGRldl9wdXQobWRkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbWRkZXYtPnF1ZXVlLT5xdWV1ZWRhdGEgPSBtZGRldjsKKwogCS8qIENhbiBiZSB1bmxvY2tlZCBiZWNhdXNlIHRoZSBxdWV1ZSBpcyBuZXc6IG5vIGNvbmN1cnJlbmN5ICovCiAJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19DTFVTVEVSLCBtZGRldi0+cXVldWUpOwogCi0JYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChtZGRldi0+cXVldWUsIG1kX2ZhaWxfcmVxdWVzdCk7CisJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChtZGRldi0+cXVldWUsIG1kX21ha2VfcmVxdWVzdCk7CiAKIAlkaXNrID0gYWxsb2NfZGlzaygxIDw8IHNoaWZ0KTsKIAlpZiAoIWRpc2spIHsKQEAgLTM3MzEsMTMgKzQwMDIsMTMgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewogCQkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChyZGV2LT5zaXplIDwgY2h1bmtfc2l6ZSAvIDEwMjQpIHsKKwkJCWlmIChyZGV2LT5zZWN0b3JzIDwgY2h1bmtfc2l6ZSAvIDUxMikgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJIm1kOiBEZXYgJXMgc21hbGxlciB0aGFuIGNodW5rX3NpemU6IgotCQkJCQkiICVsbHVrIDwgJWRrXG4iLAorCQkJCQkiICVsbHUgPCAlZFxuIiwKIAkJCQkJYmRldm5hbWUocmRldi0+YmRldixiKSwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zaXplLAotCQkJCQljaHVua19zaXplIC8gMTAyNCk7CisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2VjdG9ycywKKwkJCQkJY2h1bmtfc2l6ZSAvIDUxMik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KQEAgLTM3NjEsMTEgKzQwMzIsMTEgQEAKIAogCQkvKiBwZXJmb3JtIHNvbWUgY29uc2lzdGVuY3kgdGVzdHMgb24gdGhlIGRldmljZS4KIAkJICogV2UgZG9uJ3Qgd2FudCB0aGUgZGF0YSB0byBvdmVybGFwIHRoZSBtZXRhZGF0YSwKLQkJICogSW50ZXJuYWwgQml0bWFwIGlzc3VlcyBoYXMgaGFuZGxlZCBlbHNld2hlcmUuCisJCSAqIEludGVybmFsIEJpdG1hcCBpc3N1ZXMgaGF2ZSBiZWVuIGhhbmRsZWQgZWxzZXdoZXJlLgogCQkgKi8KIAkJaWYgKHJkZXYtPmRhdGFfb2Zmc2V0IDwgcmRldi0+c2Jfc3RhcnQpIHsKLQkJCWlmIChtZGRldi0+c2l6ZSAmJgotCQkJICAgIHJkZXYtPmRhdGFfb2Zmc2V0ICsgbWRkZXYtPnNpemUqMgorCQkJaWYgKG1kZGV2LT5kZXZfc2VjdG9ycyAmJgorCQkJICAgIHJkZXYtPmRhdGFfb2Zmc2V0ICsgbWRkZXYtPmRldl9zZWN0b3JzCiAJCQkgICAgPiByZGV2LT5zYl9zdGFydCkgewogCQkJCXByaW50aygibWQ6ICVzOiBkYXRhIG92ZXJsYXBzIG1ldGFkYXRhXG4iLAogCQkJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKQEAgLTM4MDEsOSArNDA3MiwxNiBAQAogCX0KIAltZGRldi0+cGVycyA9IHBlcnM7CiAJc3Bpbl91bmxvY2soJnBlcnNfbG9jayk7Ci0JbWRkZXYtPmxldmVsID0gcGVycy0+bGV2ZWw7CisJaWYgKG1kZGV2LT5sZXZlbCAhPSBwZXJzLT5sZXZlbCkgeworCQltZGRldi0+bGV2ZWwgPSBwZXJzLT5sZXZlbDsKKwkJbWRkZXYtPm5ld19sZXZlbCA9IHBlcnMtPmxldmVsOworCX0KIAlzdHJsY3B5KG1kZGV2LT5jbGV2ZWwsIHBlcnMtPm5hbWUsIHNpemVvZihtZGRldi0+Y2xldmVsKSk7CiAKKwlpZiAocGVycy0+bGV2ZWwgPj0gNCAmJiBwZXJzLT5sZXZlbCA8PSA2KQorCQkvKiBDYW5ub3Qgc3VwcG9ydCBpbnRlZ3JpdHkgKHlldCkgKi8KKwkJYmxrX2ludGVncml0eV91bnJlZ2lzdGVyKG1kZGV2LT5nZW5kaXNrKTsKKwogCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IgJiYKIAkgICAgcGVycy0+c3RhcnRfcmVzaGFwZSA9PSBOVUxMKSB7CiAJCS8qIFRoaXMgcGVyc29uYWxpdHkgY2Fubm90IGhhbmRsZSByZXNoYXBpbmcuLi4gKi8KQEAgLTM4NDMsNyArNDEyMSw5IEBACiAJfQogCiAJbWRkZXYtPnJlY292ZXJ5ID0gMDsKLQltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gbWRkZXYtPnNpemUgPDwgMTsgLyogbWF5IGJlIG92ZXItcmlkZGVuIGJ5IHBlcnNvbmFsaXR5ICovCisJLyogbWF5IGJlIG92ZXItcmlkZGVuIGJ5IHBlcnNvbmFsaXR5ICovCisJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKKwogCW1kZGV2LT5iYXJyaWVyc193b3JrID0gMTsKIAltZGRldi0+b2tfc3RhcnRfZGVncmFkZWQgPSBzdGFydF9kaXJ0eV9kZWdyYWRlZDsKIApAQCAtMzg1Myw3ICs0MTMzLDE3IEBACiAJZXJyID0gbWRkZXYtPnBlcnMtPnJ1bihtZGRldik7CiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fRVJSICJtZDogcGVycy0+cnVuKCkgZmFpbGVkIC4uLlxuIik7Ci0JZWxzZSBpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCkgeworCWVsc2UgaWYgKG1kZGV2LT5wZXJzLT5zaXplKG1kZGV2LCAwLCAwKSA8IG1kZGV2LT5hcnJheV9zZWN0b3JzKSB7CisJCVdBUk5fT05DRSghbWRkZXYtPmV4dGVybmFsX3NpemUsICIlczogZGVmYXVsdCBzaXplIHRvbyBzbWFsbCwiCisJCQkgICIgYnV0ICdleHRlcm5hbF9zaXplJyBub3QgaW4gZWZmZWN0P1xuIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZDogaW52YWxpZCBhcnJheV9zaXplICVsbHUgPiBkZWZhdWx0IHNpemUgJWxsdVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPmFycmF5X3NlY3RvcnMgLyAyLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+cGVycy0+c2l6ZShtZGRldiwgMCwgMCkgLyAyKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJbWRkZXYtPnBlcnMtPnN0b3AobWRkZXYpOworCX0KKwlpZiAoZXJyID09IDAgJiYgbWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCkgewogCQllcnIgPSBiaXRtYXBfY3JlYXRlKG1kZGV2KTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBiaXRtYXAgKCVkKVxuIiwKQEAgLTM4OTksMTYgKzQxODksNiBAQAogCiAJc2V0X2NhcGFjaXR5KGRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAotCS8qIElmIHdlIGNhbGwgYmxrX3F1ZXVlX21ha2VfcmVxdWVzdCBoZXJlLCBpdCB3aWxsCi0JICogcmUtaW5pdGlhbGlzZSBtYXhfc2VjdG9ycyBldGMgd2hpY2ggbWF5IGhhdmUgYmVlbgotCSAqIHJlZmluZWQgaW5zaWRlIC0+IHJ1bi4gIFNvIGp1c3Qgc2V0IHRoZSBiaXRzIHdlIG5lZWQgdG8gc2V0LgotCSAqIE1vc3QgaW5pdGlhbGlzYXRpb24gaGFwcGVuZGVkIHdoZW4gd2UgY2FsbGVkCi0JICogYmxrX3F1ZXVlX21ha2VfcmVxdWVzdCguLi4sIG1kX2ZhaWxfcmVxdWVzdCkKLQkgKiBlYXJsaWVyLgotCSAqLwotCW1kZGV2LT5xdWV1ZS0+cXVldWVkYXRhID0gbWRkZXY7Ci0JbWRkZXYtPnF1ZXVlLT5tYWtlX3JlcXVlc3RfZm4gPSBtZGRldi0+cGVycy0+bWFrZV9yZXF1ZXN0OwotCiAJLyogSWYgdGhlcmUgaXMgYSBwYXJ0aWFsbHktcmVjb3ZlcmVkIGRyaXZlIHdlIG5lZWQgdG8KIAkgKiBzdGFydCByZWNvdmVyeSBoZXJlLiAgSWYgd2UgbGVhdmUgaXQgdG8gbWRfY2hlY2tfcmVjb3ZlcnksCiAJICogaXQgd2lsbCByZW1vdmUgdGhlIGRyaXZlcyBhbmQgbm90IGRvIHRoZSByaWdodCB0aGluZwpAQCAtNDAzOCw3ICs0MzE4LDcgQEAKIAkJCW1kX3N1cGVyX3dhaXQobWRkZXYpOwogCQkJaWYgKG1kZGV2LT5ybykKIAkJCQlzZXRfZGlza19ybyhkaXNrLCAwKTsKLQkJCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QobWRkZXYtPnF1ZXVlLCBtZF9mYWlsX3JlcXVlc3QpOworCiAJCQltZGRldi0+cGVycy0+c3RvcChtZGRldik7CiAJCQltZGRldi0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gPSBOVUxMOwogCQkJbWRkZXYtPnF1ZXVlLT51bnBsdWdfZm4gPSBOVUxMOwpAQCAtNDA5NSw3ICs0Mzc1LDggQEAKIAkJZXhwb3J0X2FycmF5KG1kZGV2KTsKIAogCQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IDA7Ci0JCW1kZGV2LT5zaXplID0gMDsKKwkJbWRkZXYtPmV4dGVybmFsX3NpemUgPSAwOworCQltZGRldi0+ZGV2X3NlY3RvcnMgPSAwOwogCQltZGRldi0+cmFpZF9kaXNrcyA9IDA7CiAJCW1kZGV2LT5yZWNvdmVyeV9jcCA9IDA7CiAJCW1kZGV2LT5yZXN5bmNfbWluID0gMDsKQEAgLTQxMzUsNiArNDQxNiw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBzd2l0Y2hlZCB0byByZWFkLW9ubHkgbW9kZS5cbiIsCiAJCQltZG5hbWUobWRkZXYpKTsKIAllcnIgPSAwOworCWJsa19pbnRlZ3JpdHlfdW5yZWdpc3RlcihkaXNrKTsKIAltZF9uZXdfZXZlbnQobWRkZXYpOwogCXN5c2ZzX25vdGlmeV9kaXJlbnQobWRkZXYtPnN5c2ZzX3N0YXRlKTsKIG91dDoKQEAgLTQzMDAsOCArNDU4Miw4IEBACiAJaW5mby5wYXRjaF92ZXJzaW9uID0gTURfUEFUQ0hMRVZFTF9WRVJTSU9OOwogCWluZm8uY3RpbWUgICAgICAgICA9IG1kZGV2LT5jdGltZTsKIAlpbmZvLmxldmVsICAgICAgICAgPSBtZGRldi0+bGV2ZWw7Ci0JaW5mby5zaXplICAgICAgICAgID0gbWRkZXYtPnNpemU7Ci0JaWYgKGluZm8uc2l6ZSAhPSBtZGRldi0+c2l6ZSkgLyogb3ZlcmZsb3cgKi8KKwlpbmZvLnNpemUgICAgICAgICAgPSBtZGRldi0+ZGV2X3NlY3RvcnMgLyAyOworCWlmIChpbmZvLnNpemUgIT0gbWRkZXYtPmRldl9zZWN0b3JzIC8gMikgLyogb3ZlcmZsb3cgKi8KIAkJaW5mby5zaXplID0gLTE7CiAJaW5mby5ucl9kaXNrcyAgICAgID0gbnI7CiAJaW5mby5yYWlkX2Rpc2tzICAgID0gbWRkZXYtPnJhaWRfZGlza3M7CkBAIC00NDgwLDYgKzQ3NjIsOCBAQAogCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsgLyoganVzdCB0byBiZSBzdXJlICovCiAJCWlmIChpbmZvLT5zdGF0ZSAmICgxPDxNRF9ESVNLX1dSSVRFTU9TVExZKSkKIAkJCXNldF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKTsKIAogCQlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKIAkJZXJyID0gYmluZF9yZGV2X3RvX2FycmF5KHJkZXYsIG1kZGV2KTsKQEAgLTQ1NDMsNyArNDgyNyw3IEBACiAJCQlyZGV2LT5zYl9zdGFydCA9IHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgLyA1MTI7CiAJCX0gZWxzZSAKIAkJCXJkZXYtPnNiX3N0YXJ0ID0gY2FsY19kZXZfc2JvZmZzZXQocmRldi0+YmRldik7Ci0JCXJkZXYtPnNpemUgPSBjYWxjX251bV9zZWN0b3JzKHJkZXYsIG1kZGV2LT5jaHVua19zaXplKSAvIDI7CisJCXJkZXYtPnNlY3RvcnMgPSBjYWxjX251bV9zZWN0b3JzKHJkZXYsIG1kZGV2LT5jaHVua19zaXplKTsKIAogCQllcnIgPSBiaW5kX3JkZXZfdG9fYXJyYXkocmRldiwgbWRkZXYpOwogCQlpZiAoZXJyKSB7CkBAIC00NjEzLDcgKzQ4OTcsNyBAQAogCWVsc2UKIAkJcmRldi0+c2Jfc3RhcnQgPSByZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplIC8gNTEyOwogCi0JcmRldi0+c2l6ZSA9IGNhbGNfbnVtX3NlY3RvcnMocmRldiwgbWRkZXYtPmNodW5rX3NpemUpIC8gMjsKKwlyZGV2LT5zZWN0b3JzID0gY2FsY19udW1fc2VjdG9ycyhyZGV2LCBtZGRldi0+Y2h1bmtfc2l6ZSk7CiAKIAlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgCkBAIC00NzQ5LDcgKzUwMzMsNyBAQAogCiAJbWRkZXYtPmxldmVsICAgICAgICAgPSBpbmZvLT5sZXZlbDsKIAltZGRldi0+Y2xldmVsWzBdICAgICA9IDA7Ci0JbWRkZXYtPnNpemUgICAgICAgICAgPSBpbmZvLT5zaXplOworCW1kZGV2LT5kZXZfc2VjdG9ycyAgID0gMiAqIChzZWN0b3JfdClpbmZvLT5zaXplOwogCW1kZGV2LT5yYWlkX2Rpc2tzICAgID0gaW5mby0+cmFpZF9kaXNrczsKIAkvKiBkb24ndCBzZXQgbWRfbWlub3IsIGl0IGlzIGRldGVybWluZWQgYnkgd2hpY2ggL2Rldi9tZCogd2FzCiAJICogb3Blbm5lZApAQCAtNDc4OCw2ICs1MDcyLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IGFycmF5X3NlY3RvcnMpCit7CisJV0FSTighbWRkZXZfaXNfbG9ja2VkKG1kZGV2KSwgIiVzOiB1bmxvY2tlZCBtZGRldiFcbiIsIF9fZnVuY19fKTsKKworCWlmIChtZGRldi0+ZXh0ZXJuYWxfc2l6ZSkKKwkJcmV0dXJuOworCisJbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBhcnJheV9zZWN0b3JzOworfQorRVhQT1JUX1NZTUJPTChtZF9zZXRfYXJyYXlfc2VjdG9ycyk7CisKIHN0YXRpYyBpbnQgdXBkYXRlX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IG51bV9zZWN0b3JzKQogewogCW1ka19yZGV2X3QgKnJkZXY7CkBAIC00ODE0LDggKzUxMDksNyBAQAogCQkgKi8KIAkJcmV0dXJuIC1FQlVTWTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7Ci0JCXNlY3Rvcl90IGF2YWlsOwotCQlhdmFpbCA9IHJkZXYtPnNpemUgKiAyOworCQlzZWN0b3JfdCBhdmFpbCA9IHJkZXYtPnNlY3RvcnM7CiAKIAkJaWYgKGZpdCAmJiAobnVtX3NlY3RvcnMgPT0gMCB8fCBudW1fc2VjdG9ycyA+IGF2YWlsKSkKIAkJCW51bV9zZWN0b3JzID0gYXZhaWw7CkBAIC00ODg3LDEyICs1MTgxLDE4IEBACiAJCSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyogQ2hlY2sgdGhlcmUgaXMgb25seSBvbmUgY2hhbmdlICovCi0JaWYgKGluZm8tPnNpemUgPj0gMCAmJiBtZGRldi0+c2l6ZSAhPSBpbmZvLT5zaXplKSBjbnQrKzsKLQlpZiAobWRkZXYtPnJhaWRfZGlza3MgIT0gaW5mby0+cmFpZF9kaXNrcykgY250Kys7Ci0JaWYgKG1kZGV2LT5sYXlvdXQgIT0gaW5mby0+bGF5b3V0KSBjbnQrKzsKLQlpZiAoKHN0YXRlIF4gaW5mby0+c3RhdGUpICYgKDE8PE1EX1NCX0JJVE1BUF9QUkVTRU5UKSkgY250Kys7Ci0JaWYgKGNudCA9PSAwKSByZXR1cm4gMDsKLQlpZiAoY250ID4gMSkgcmV0dXJuIC1FSU5WQUw7CisJaWYgKGluZm8tPnNpemUgPj0gMCAmJiBtZGRldi0+ZGV2X3NlY3RvcnMgLyAyICE9IGluZm8tPnNpemUpCisJCWNudCsrOworCWlmIChtZGRldi0+cmFpZF9kaXNrcyAhPSBpbmZvLT5yYWlkX2Rpc2tzKQorCQljbnQrKzsKKwlpZiAobWRkZXYtPmxheW91dCAhPSBpbmZvLT5sYXlvdXQpCisJCWNudCsrOworCWlmICgoc3RhdGUgXiBpbmZvLT5zdGF0ZSkgJiAoMTw8TURfU0JfQklUTUFQX1BSRVNFTlQpKQorCQljbnQrKzsKKwlpZiAoY250ID09IDApCisJCXJldHVybiAwOworCWlmIChjbnQgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChtZGRldi0+bGF5b3V0ICE9IGluZm8tPmxheW91dCkgewogCQkvKiBDaGFuZ2UgbGF5b3V0CkBAIC00OTA0LDcgKzUyMDQsNyBAQAogCQllbHNlCiAJCQlyZXR1cm4gbWRkZXYtPnBlcnMtPnJlY29uZmlnKG1kZGV2LCBpbmZvLT5sYXlvdXQsIC0xKTsKIAl9Ci0JaWYgKGluZm8tPnNpemUgPj0gMCAmJiBtZGRldi0+c2l6ZSAhPSBpbmZvLT5zaXplKQorCWlmIChpbmZvLT5zaXplID49IDAgJiYgbWRkZXYtPmRldl9zZWN0b3JzIC8gMiAhPSBpbmZvLT5zaXplKQogCQlydiA9IHVwZGF0ZV9zaXplKG1kZGV2LCAoc2VjdG9yX3QpaW5mby0+c2l6ZSAqIDIpOwogCiAJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzICAgICE9IGluZm8tPnJhaWRfZGlza3MpCkBAIC01MzMxLDYgKzU2MzEsOCBAQAogCiB2b2lkIG1kX3VucmVnaXN0ZXJfdGhyZWFkKG1ka190aHJlYWRfdCAqdGhyZWFkKQogeworCWlmICghdGhyZWFkKQorCQlyZXR1cm47CiAJZHByaW50aygiaW50ZXJydXB0aW5nIE1ELXRocmVhZCBwaWQgJWRcbiIsIHRhc2tfcGlkX25yKHRocmVhZC0+dHNrKSk7CiAKIAlrdGhyZWFkX3N0b3AodGhyZWFkLT50c2spOwpAQCAtNTQwNCw3ICs1NzA2LDcgQEAKIAlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCW1heF9ibG9ja3MgPSBtZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID4+IDE7CiAJZWxzZQotCQltYXhfYmxvY2tzID0gbWRkZXYtPnNpemU7CisJCW1heF9ibG9ja3MgPSBtZGRldi0+ZGV2X3NlY3RvcnMgLyAyOwogCiAJLyoKIAkgKiBTaG91bGQgbm90IGhhcHBlbi4KQEAgLTU1MzcsNyArNTgzOSw3IEBACiBzdGF0aWMgaW50IG1kX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCW1kZGV2X3QgKm1kZGV2ID0gdjsKLQlzZWN0b3JfdCBzaXplOworCXNlY3Rvcl90IHNlY3RvcnM7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAlzdHJ1Y3QgbWRzdGF0X2luZm8gKm1pID0gc2VxLT5wcml2YXRlOwogCXN0cnVjdCBiaXRtYXAgKmJpdG1hcDsKQEAgLTU1NzMsNyArNTg3NSw3IEBACiAJCQlzZXFfcHJpbnRmKHNlcSwgIiAlcyIsIG1kZGV2LT5wZXJzLT5uYW1lKTsKIAkJfQogCi0JCXNpemUgPSAwOworCQlzZWN0b3JzID0gMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewogCQkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCQkJc2VxX3ByaW50ZihzZXEsICIgJXNbJWRdIiwKQEAgLTU1ODUsNyArNTg4Nyw3IEBACiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgaWYgKHJkZXYtPnJhaWRfZGlzayA8IDApCiAJCQkJc2VxX3ByaW50ZihzZXEsICIoUykiKTsgLyogc3BhcmUgKi8KLQkJCXNpemUgKz0gcmRldi0+c2l6ZTsKKwkJCXNlY3RvcnMgKz0gcmRldi0+c2VjdG9yczsKIAkJfQogCiAJCWlmICghbGlzdF9lbXB0eSgmbWRkZXYtPmRpc2tzKSkgewpAQCAtNTU5NSw3ICs1ODk3LDcgQEAKIAkJCQkJICAgbWRkZXYtPmFycmF5X3NlY3RvcnMgLyAyKTsKIAkJCWVsc2UKIAkJCQlzZXFfcHJpbnRmKHNlcSwgIlxuICAgICAgJWxsdSBibG9ja3MiLAotCQkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXNpemUpOworCQkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXNlY3RvcnMgLyAyKTsKIAkJfQogCQlpZiAobWRkZXYtPnBlcnNpc3RlbnQpIHsKIAkJCWlmIChtZGRldi0+bWFqb3JfdmVyc2lvbiAhPSAwIHx8CkBAIC01NzIyLDE5ICs2MDI0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXNfbWRkZXZfaWRsZShtZGRldl90ICptZGRldikKK3N0YXRpYyBpbnQgaXNfbWRkZXZfaWRsZShtZGRldl90ICptZGRldiwgaW50IGluaXQpCiB7CiAJbWRrX3JkZXZfdCAqIHJkZXY7CiAJaW50IGlkbGU7Ci0JbG9uZyBjdXJyX2V2ZW50czsKKwlpbnQgY3Vycl9ldmVudHM7CiAKIAlpZGxlID0gMTsKIAlyY3VfcmVhZF9sb2NrKCk7CiAJcmRldl9mb3JfZWFjaF9yY3UocmRldiwgbWRkZXYpIHsKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSByZGV2LT5iZGV2LT5iZF9jb250YWlucy0+YmRfZGlzazsKLQkJY3Vycl9ldmVudHMgPSBwYXJ0X3N0YXRfcmVhZCgmZGlzay0+cGFydDAsIHNlY3RvcnNbMF0pICsKLQkJCQlwYXJ0X3N0YXRfcmVhZCgmZGlzay0+cGFydDAsIHNlY3RvcnNbMV0pIC0KLQkJCQlhdG9taWNfcmVhZCgmZGlzay0+c3luY19pbyk7CisJCWN1cnJfZXZlbnRzID0gKGludClwYXJ0X3N0YXRfcmVhZCgmZGlzay0+cGFydDAsIHNlY3RvcnNbMF0pICsKKwkJCSAgICAgIChpbnQpcGFydF9zdGF0X3JlYWQoJmRpc2stPnBhcnQwLCBzZWN0b3JzWzFdKSAtCisJCQkgICAgICBhdG9taWNfcmVhZCgmZGlzay0+c3luY19pbyk7CiAJCS8qIHN5bmMgSU8gd2lsbCBjYXVzZSBzeW5jX2lvIHRvIGluY3JlYXNlIGJlZm9yZSB0aGUgZGlza19zdGF0cwogCQkgKiBhcyBzeW5jX2lvIGlzIGNvdW50ZWQgd2hlbiBhIHJlcXVlc3Qgc3RhcnRzLCBhbmQKIAkJICogZGlza19zdGF0cyBpcyBjb3VudGVkIHdoZW4gaXQgY29tcGxldGVzLgpAQCAtNTc1Nyw3ICs2MDU5LDcgQEAKIAkJICogYWx3YXlzIG1ha2UgY3Vycl9ldmVudHMgbGVzcyB0aGFuIGxhc3RfZXZlbnRzLgogCQkgKgogCQkgKi8KLQkJaWYgKGN1cnJfZXZlbnRzIC0gcmRldi0+bGFzdF9ldmVudHMgPiA0MDk2KSB7CisJCWlmIChpbml0IHx8IGN1cnJfZXZlbnRzIC0gcmRldi0+bGFzdF9ldmVudHMgPiA2NCkgewogCQkJcmRldi0+bGFzdF9ldmVudHMgPSBjdXJyX2V2ZW50czsKIAkJCWlkbGUgPSAwOwogCQl9CkBAIC01OTgwLDEwICs2MjgyLDEwIEBACiAJCQlqID0gbWRkZXYtPnJlY292ZXJ5X2NwOwogCiAJfSBlbHNlIGlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVNIQVBFLCAmbWRkZXYtPnJlY292ZXJ5KSkKLQkJbWF4X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSA8PCAxOworCQltYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAllbHNlIHsKIAkJLyogcmVjb3ZlcnkgZm9sbG93cyB0aGUgcGh5c2ljYWwgc2l6ZSBvZiBkZXZpY2VzICovCi0JCW1heF9zZWN0b3JzID0gbWRkZXYtPnNpemUgPDwgMTsKKwkJbWF4X3NlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJCWogPSBNYXhTZWN0b3I7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCiAJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKQEAgLTYwMDAsNyArNjMwMiw3IEBACiAJICAgICAgICIoYnV0IG5vdCBtb3JlIHRoYW4gJWQgS0Ivc2VjKSBmb3IgJXMuXG4iLAogCSAgICAgICBzcGVlZF9tYXgobWRkZXYpLCBkZXNjKTsKIAotCWlzX21kZGV2X2lkbGUobWRkZXYpOyAvKiB0aGlzIGFsc28gaW5pdGlhbGl6ZXMgSU8gZXZlbnQgY291bnRlcnMgKi8KKwlpc19tZGRldl9pZGxlKG1kZGV2LCAxKTsgLyogdGhpcyBpbml0aWFsaXplcyBJTyBldmVudCBjb3VudGVycyAqLwogCiAJaW9fc2VjdG9ycyA9IDA7CiAJZm9yIChtID0gMDsgbSA8IFNZTkNfTUFSS1M7IG0rKykgewpAQCAtNjA0MCw2ICs2MzQyLDE4IEBACiAJCX0KIAkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWdvdG8gaW50ZXJydXB0ZWQ7CisKKwkJaWYgKG1kZGV2LT5jdXJyX3Jlc3luYyA+IG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgJiYKKwkJICAgIChtZGRldi0+Y3Vycl9yZXN5bmMgLSBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkKQorCQkgICAgPiAobWF4X3NlY3RvcnMgPj4gNCkpIHsKKwkJCS8qIHRpbWUgdG8gdXBkYXRlIGN1cnJfcmVzeW5jX2NvbXBsZXRlZCAqLworCQkJYmxrX3VucGx1ZyhtZGRldi0+cXVldWUpOworCQkJd2FpdF9ldmVudChtZGRldi0+cmVjb3Zlcnlfd2FpdCwKKwkJCQkgICBhdG9taWNfcmVhZCgmbWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSkgPT0gMCk7CisJCQltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0KKwkJCQltZGRldi0+Y3Vycl9yZXN5bmM7CisJCQlzZXRfYml0KE1EX0NIQU5HRV9DTEVBTiwgJm1kZGV2LT5mbGFncyk7CisJCX0KIAkJc2VjdG9ycyA9IG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QobWRkZXYsIGosICZza2lwcGVkLAogCQkJCQkJICBjdXJyc3BlZWQgPCBzcGVlZF9taW4obWRkZXYpKTsKIAkJaWYgKHNlY3RvcnMgPT0gMCkgewpAQCAtNjEwMiw3ICs2NDE2LDcgQEAKIAogCQlpZiAoY3VycnNwZWVkID4gc3BlZWRfbWluKG1kZGV2KSkgewogCQkJaWYgKChjdXJyc3BlZWQgPiBzcGVlZF9tYXgobWRkZXYpKSB8fAotCQkJCQkhaXNfbWRkZXZfaWRsZShtZGRldikpIHsKKwkJCQkJIWlzX21kZGV2X2lkbGUobWRkZXYsIDApKSB7CiAJCQkJbXNsZWVwKDUwMCk7CiAJCQkJZ290byByZXBlYXQ7CiAJCQl9CkBAIC02MTczLDYgKzY0ODcsOCBAQAogCW1ka19yZGV2X3QgKnJkZXY7CiAJaW50IHNwYXJlcyA9IDA7CiAKKwltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gMDsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCiAJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgogCQkgICAgIXRlc3RfYml0KEJsb2NrZWQsICZyZGV2LT5mbGFncykgJiYKQEAgLTYzMjcsNiArNjY0Myw5IEBACiAJCQkJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsCiAJCQkJCQkgICAgICJkZWdyYWRlZCIpOwogCQkJfQorCQkJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JFU0hBUEUsICZtZGRldi0+cmVjb3ZlcnkpICYmCisJCQkgICAgbWRkZXYtPnBlcnMtPmZpbmlzaF9yZXNoYXBlKQorCQkJCW1kZGV2LT5wZXJzLT5maW5pc2hfcmVzaGFwZShtZGRldik7CiAJCQltZF91cGRhdGVfc2IobWRkZXYsIDEpOwogCiAJCQkvKiBpZiBhcnJheSBpcyBuby1sb25nZXIgZGVncmFkZWQsIHRoZW4gYW55IHNhdmVkX3JhaWRfZGlzawpAQCAtNjQ3MCwxMyArNjc4OSwxMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHJlZ2lzdGVyX2Jsa2RldihNQUpPUl9OUiwgIm1kIikpCisJaWYgKHJlZ2lzdGVyX2Jsa2RldihNRF9NQUpPUiwgIm1kIikpCiAJCXJldHVybiAtMTsKIAlpZiAoKG1kcF9tYWpvcj1yZWdpc3Rlcl9ibGtkZXYoMCwgIm1kcCIpKTw9MCkgewotCQl1bnJlZ2lzdGVyX2Jsa2RldihNQUpPUl9OUiwgIm1kIik7CisJCXVucmVnaXN0ZXJfYmxrZGV2KE1EX01BSk9SLCAibWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKE1BSk9SX05SLCAwKSwgMVVMPDxNSU5PUkJJVFMsIFRISVNfTU9EVUxFLAorCWJsa19yZWdpc3Rlcl9yZWdpb24oTUtERVYoTURfTUFKT1IsIDApLCAxVUw8PE1JTk9SQklUUywgVEhJU19NT0RVTEUsCiAJCQkgICAgbWRfcHJvYmUsIE5VTEwsIE5VTEwpOwogCWJsa19yZWdpc3Rlcl9yZWdpb24oTUtERVYobWRwX21ham9yLCAwKSwgMVVMPDxNSU5PUkJJVFMsIFRISVNfTU9EVUxFLAogCQkJICAgIG1kX3Byb2JlLCBOVUxMLCBOVUxMKTsKQEAgLTY1NjIsMTAgKzY4ODEsMTAgQEAKIAltZGRldl90ICptZGRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAKLQlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYoTUFKT1JfTlIsMCksIDFVIDw8IE1JTk9SQklUUyk7CisJYmxrX3VucmVnaXN0ZXJfcmVnaW9uKE1LREVWKE1EX01BSk9SLDApLCAxVSA8PCBNSU5PUkJJVFMpOwogCWJsa191bnJlZ2lzdGVyX3JlZ2lvbihNS0RFVihtZHBfbWFqb3IsMCksIDFVIDw8IE1JTk9SQklUUyk7CiAKLQl1bnJlZ2lzdGVyX2Jsa2RldihNQUpPUl9OUiwibWQiKTsKKwl1bnJlZ2lzdGVyX2Jsa2RldihNRF9NQUpPUiwibWQiKTsKIAl1bnJlZ2lzdGVyX2Jsa2RldihtZHBfbWFqb3IsICJtZHAiKTsKIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmbWRfbm90aWZpZXIpOwogCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHJhaWRfdGFibGVfaGVhZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWI3ZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICAgbWRfay5oIDoga2VybmVsIGludGVybmFsIHN0cnVjdHVyZSBvZiB0aGUgTGludXggTUQgZHJpdmVyCisgICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk2LTk4IEluZ28gTW9sbmFyLCBHYWRpIE94bWFuCisJICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCisqLworCisjaWZuZGVmIF9NRF9LX0gKKyNkZWZpbmUgX01EX0tfSAorCisjaWZkZWYgQ09ORklHX0JMT0NLCisKKyNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApCisKK3R5cGVkZWYgc3RydWN0IG1kZGV2X3MgbWRkZXZfdDsKK3R5cGVkZWYgc3RydWN0IG1ka19yZGV2X3MgbWRrX3JkZXZfdDsKKworLyoKKyAqIG9wdGlvbnMgcGFzc2VkIGluIHJhaWRydW46CisgKi8KKworLyogQ3VycmVudGx5IHRoaXMgbXVzdCBmaXQgaW4gYW4gJ2ludCcgKi8KKyNkZWZpbmUgTUFYX0NIVU5LX1NJWkUgKDE8PDMwKQorCisvKgorICogTUQncyAnZXh0ZW5kZWQnIGRldmljZQorICovCitzdHJ1Y3QgbWRrX3JkZXZfcworeworCXN0cnVjdCBsaXN0X2hlYWQgc2FtZV9zZXQ7CS8qIFJBSUQgZGV2aWNlcyB3aXRoaW4gdGhlIHNhbWUgc2V0ICovCisKKwlzZWN0b3JfdCBzZWN0b3JzOwkJLyogRGV2aWNlIHNpemUgKGluIDUxMmJ5dGVzIHNlY3RvcnMpICovCisJbWRkZXZfdCAqbWRkZXY7CQkJLyogUkFJRCBhcnJheSBpZiBydW5uaW5nICovCisJaW50IGxhc3RfZXZlbnRzOwkJLyogSU8gZXZlbnQgdGltZXN0YW1wICovCisKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwkvKiBibG9jayBkZXZpY2UgaGFuZGxlICovCisKKwlzdHJ1Y3QgcGFnZQkqc2JfcGFnZTsKKwlpbnQJCXNiX2xvYWRlZDsKKwlfX3U2NAkJc2JfZXZlbnRzOworCXNlY3Rvcl90CWRhdGFfb2Zmc2V0OwkvKiBzdGFydCBvZiBkYXRhIGluIGFycmF5ICovCisJc2VjdG9yX3QgCXNiX3N0YXJ0OwkvKiBvZmZzZXQgb2YgdGhlIHN1cGVyIGJsb2NrIChpbiA1MTJieXRlIHNlY3RvcnMpICovCisJaW50CQlzYl9zaXplOwkvKiBieXRlcyBpbiB0aGUgc3VwZXJibG9jayAqLworCWludAkJcHJlZmVycmVkX21pbm9yOwkvKiBhdXRvcnVuIHN1cHBvcnQgKi8KKworCXN0cnVjdCBrb2JqZWN0CWtvYmo7CisKKwkvKiBBIGRldmljZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlcyBiYXNlZCBvbiB0d28gZmxhZ3M6CisJICogTm90IHdvcmtpbmc6ICAgZmF1bHR5PT0xIGluX3N5bmM9PTAKKwkgKiBGdWxseSB3b3JraW5nOiBmYXVsdHk9PTAgaW5fc3luYz09MQorCSAqIFdvcmtpbmcsIGJ1dCBub3QKKwkgKiBpbiBzeW5jIHdpdGggYXJyYXkKKwkgKiAgICAgICAgICAgICAgICBmYXVsdHk9PTAgaW5fc3luYz09MAorCSAqCisJICogSXQgY2FuIG5ldmVyIGhhdmUgZmF1bHR5PT0xLCBpbl9zeW5jPT0xCisJICogVGhpcyByZWR1Y2VzIHRoZSBidXJkZW4gb2YgdGVzdGluZyBtdWx0aXBsZSBmbGFncyBpbiBtYW55IGNhc2VzCisJICovCisKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworI2RlZmluZQlGYXVsdHkJCTEJCS8qIGRldmljZSBpcyBrbm93biB0byBoYXZlIGEgZmF1bHQgKi8KKyNkZWZpbmUJSW5fc3luYwkJMgkJLyogZGV2aWNlIGlzIGluX3N5bmMgd2l0aCByZXN0IG9mIGFycmF5ICovCisjZGVmaW5lCVdyaXRlTW9zdGx5CTQJCS8qIEF2b2lkIHJlYWRpbmcgaWYgYXQgYWxsIHBvc3NpYmxlICovCisjZGVmaW5lCUJhcnJpZXJzTm90c3VwcAk1CQkvKiBCSU9fUldfQkFSUklFUiBpcyBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUFsbFJlc2VydmVkCTYJCS8qIElmIHdob2xlIGRldmljZSBpcyByZXNlcnZlZCBmb3IKKwkJCQkJICogb25lIGFycmF5ICovCisjZGVmaW5lCUF1dG9EZXRlY3RlZAk3CQkvKiBhZGRlZCBieSBhdXRvLWRldGVjdCAqLworI2RlZmluZSBCbG9ja2VkCQk4CQkvKiBBbiBlcnJvciBvY2N1cmVkIG9uIGFuIGV4dGVybmFsbHkKKwkJCQkJICogbWFuYWdlZCBhcnJheSwgZG9uJ3QgYWxsb3cgd3JpdGVzCisJCQkJCSAqIHVudGlsIGl0IGlzIGNsZWFyZWQgKi8KKyNkZWZpbmUgU3RhdGVDaGFuZ2VkCTkJCS8qIEZhdWx0eSBvciBCbG9ja2VkIGhhcyBjaGFuZ2VkIGR1cmluZworCQkJCQkgKiBpbnRlcnJ1cHQsIHNvIGl0IG5lZWRzIHRvIGJlCisJCQkJCSAqIG5vdGlmaWVkIGJ5IHRoZSB0aHJlYWQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBibG9ja2VkX3dhaXQ7CisKKwlpbnQgZGVzY19ucjsJCQkvKiBkZXNjcmlwdG9yIGluZGV4IGluIHRoZSBzdXBlcmJsb2NrICovCisJaW50IHJhaWRfZGlzazsJCQkvKiByb2xlIG9mIGRldmljZSBpbiBhcnJheSAqLworCWludCBzYXZlZF9yYWlkX2Rpc2s7CQkvKiByb2xlIHRoYXQgZGV2aWNlIHVzZWQgdG8gaGF2ZSBpbiB0aGUKKwkJCQkJICogYXJyYXkgYW5kIGNvdWxkIGFnYWluIGlmIHdlIGRpZCBhIHBhcnRpYWwKKwkJCQkJICogcmVzeW5jIGZyb20gdGhlIGJpdG1hcAorCQkJCQkgKi8KKwlzZWN0b3JfdAlyZWNvdmVyeV9vZmZzZXQ7LyogSWYgdGhpcyBkZXZpY2UgaGFzIGJlZW4gcGFydGlhbGx5CisJCQkJCSAqIHJlY292ZXJlZCwgdGhpcyBpcyB3aGVyZSB3ZSB3ZXJlCisJCQkJCSAqIHVwIHRvLgorCQkJCQkgKi8KKworCWF0b21pY190CW5yX3BlbmRpbmc7CS8qIG51bWJlciBvZiBwZW5kaW5nIHJlcXVlc3RzLgorCQkJCQkgKiBvbmx5IG1haW50YWluZWQgZm9yIGFycmF5cyB0aGF0CisJCQkJCSAqIHN1cHBvcnQgaG90IHJlbW92YWwKKwkJCQkJICovCisJYXRvbWljX3QJcmVhZF9lcnJvcnM7CS8qIG51bWJlciBvZiBjb25zZWN1dGl2ZSByZWFkIGVycm9ycyB0aGF0CisJCQkJCSAqIHdlIGhhdmUgdHJpZWQgdG8gaWdub3JlLgorCQkJCQkgKi8KKwlhdG9taWNfdAljb3JyZWN0ZWRfZXJyb3JzOyAvKiBudW1iZXIgb2YgY29ycmVjdGVkIHJlYWQgZXJyb3JzLAorCQkJCQkgICAqIGZvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIGFuZCBzdG9yaW5nCisJCQkJCSAgICogaW4gc3VwZXJibG9jay4KKwkJCQkJICAgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVsX3dvcms7CS8qIHVzZWQgZm9yIGRlbGF5ZWQgc3lzZnMgcmVtb3ZhbCAqLworCisJc3RydWN0IHN5c2ZzX2RpcmVudCAqc3lzZnNfc3RhdGU7IC8qIGhhbmRsZSBmb3IgJ3N0YXRlJworCQkJCQkgICAqIHN5c2ZzIGVudHJ5ICovCit9OworCitzdHJ1Y3QgbWRkZXZfcworeworCXZvaWQJCQkJKnByaXZhdGU7CisJc3RydWN0IG1ka19wZXJzb25hbGl0eQkJKnBlcnM7CisJZGV2X3QJCQkJdW5pdDsKKwlpbnQJCQkJbWRfbWlub3I7CisJc3RydWN0IGxpc3RfaGVhZCAJCWRpc2tzOworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKKyNkZWZpbmUgTURfQ0hBTkdFX0RFVlMJMAkvKiBTb21lIGRldmljZSBzdGF0dXMgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUgTURfQ0hBTkdFX0NMRUFOIDEJLyogdHJhbnNpdGlvbiB0byBvciBmcm9tICdjbGVhbicgKi8KKyNkZWZpbmUgTURfQ0hBTkdFX1BFTkRJTkcgMgkvKiBzdXBlcmJsb2NrIHVwZGF0ZSBpbiBwcm9ncmVzcyAqLworCisJaW50CQkJCXN1c3BlbmRlZDsKKwlhdG9taWNfdAkJCWFjdGl2ZV9pbzsKKwlpbnQJCQkJcm87CisKKwlzdHJ1Y3QgZ2VuZGlzawkJCSpnZW5kaXNrOworCisJc3RydWN0IGtvYmplY3QJCQlrb2JqOworCWludAkJCQlob2xkX2FjdGl2ZTsKKyNkZWZpbmUJVU5USUxfSU9DVEwJMQorI2RlZmluZQlVTlRJTF9TVE9QCTIKKworCS8qIFN1cGVyYmxvY2sgaW5mb3JtYXRpb24gKi8KKwlpbnQJCQkJbWFqb3JfdmVyc2lvbiwKKwkJCQkJbWlub3JfdmVyc2lvbiwKKwkJCQkJcGF0Y2hfdmVyc2lvbjsKKwlpbnQJCQkJcGVyc2lzdGVudDsKKwlpbnQgCQkJCWV4dGVybmFsOwkvKiBtZXRhZGF0YSBpcworCQkJCQkJCSAqIG1hbmFnZWQgZXh0ZXJuYWxseSAqLworCWNoYXIJCQkJbWV0YWRhdGFfdHlwZVsxN107IC8qIGV4dGVybmFsbHkgc2V0Ki8KKwlpbnQJCQkJY2h1bmtfc2l6ZTsKKwl0aW1lX3QJCQkJY3RpbWUsIHV0aW1lOworCWludAkJCQlsZXZlbCwgbGF5b3V0OworCWNoYXIJCQkJY2xldmVsWzE2XTsKKwlpbnQJCQkJcmFpZF9kaXNrczsKKwlpbnQJCQkJbWF4X2Rpc2tzOworCXNlY3Rvcl90CQkJZGV2X3NlY3RvcnM7IAkvKiB1c2VkIHNpemUgb2YKKwkJCQkJCQkgKiBjb21wb25lbnQgZGV2aWNlcyAqLworCXNlY3Rvcl90CQkJYXJyYXlfc2VjdG9yczsgLyogZXhwb3J0ZWQgYXJyYXkgc2l6ZSAqLworCWludAkJCQlleHRlcm5hbF9zaXplOyAvKiBzaXplIG1hbmFnZWQKKwkJCQkJCQkqIGV4dGVybmFsbHkgKi8KKwlfX3U2NAkJCQlldmVudHM7CisKKwljaGFyCQkJCXV1aWRbMTZdOworCisJLyogSWYgdGhlIGFycmF5IGlzIGJlaW5nIHJlc2hhcGVkLCB3ZSBuZWVkIHRvIHJlY29yZCB0aGUKKwkgKiBuZXcgc2hhcGUgYW5kIGFuIGluZGljYXRpb24gb2Ygd2hlcmUgd2UgYXJlIHVwIHRvLgorCSAqIFRoaXMgaXMgd3JpdHRlbiB0byB0aGUgc3VwZXJibG9jay4KKwkgKiBJZiByZXNoYXBlX3Bvc2l0aW9uIGlzIE1heFNlY3RvciwgdGhlbiBubyByZXNoYXBlIGlzIGhhcHBlbmluZyAoeWV0KS4KKwkgKi8KKwlzZWN0b3JfdAkJCXJlc2hhcGVfcG9zaXRpb247CisJaW50CQkJCWRlbHRhX2Rpc2tzLCBuZXdfbGV2ZWwsIG5ld19sYXlvdXQsIG5ld19jaHVuazsKKworCXN0cnVjdCBtZGtfdGhyZWFkX3MJCSp0aHJlYWQ7CS8qIG1hbmFnZW1lbnQgdGhyZWFkICovCisJc3RydWN0IG1ka190aHJlYWRfcwkJKnN5bmNfdGhyZWFkOwkvKiBkb2luZyByZXN5bmMgb3IgcmVjb25zdHJ1Y3QgKi8KKwlzZWN0b3JfdAkJCWN1cnJfcmVzeW5jOwkvKiBsYXN0IGJsb2NrIHNjaGVkdWxlZCAqLworCS8qIEFzIHJlc3luYyByZXF1ZXN0cyBjYW4gY29tcGxldGUgb3V0IG9mIG9yZGVyLCB3ZSBjYW5ub3QgZWFzaWx5IHRyYWNrCisJICogaG93IG11Y2ggcmVzeW5jIGhhcyBiZWVuIGNvbXBsZXRlZC4gIFNvIHdlIG9jY2FzaW9uYWxseSBwYXVzZSB1bnRpbAorCSAqIGV2ZXJ5dGhpbmcgY29tcGxldGVzLCB0aGVuIHNldCBjdXJyX3Jlc3luY19jb21wbGV0ZWQgdG8gY3Vycl9yZXN5bmMuCisJICogQXMgc3VjaCBpdCBtYXkgYmUgd2VsbCBiZWhpbmQgdGhlIHJlYWwgcmVzeW5jIG1hcmssIGJ1dCBpdCBpcyBhIHZhbHVlCisJICogd2UgYXJlIGNlcnRhaW4gb2YuCisJICovCisJc2VjdG9yX3QJCQljdXJyX3Jlc3luY19jb21wbGV0ZWQ7CisJdW5zaWduZWQgbG9uZwkJCXJlc3luY19tYXJrOwkvKiBhIHJlY2VudCB0aW1lc3RhbXAgKi8KKwlzZWN0b3JfdAkJCXJlc3luY19tYXJrX2NudDsvKiBibG9ja3Mgd3JpdHRlbiBhdCByZXN5bmNfbWFyayAqLworCXNlY3Rvcl90CQkJY3Vycl9tYXJrX2NudDsgLyogYmxvY2tzIHNjaGVkdWxlZCBub3cgKi8KKworCXNlY3Rvcl90CQkJcmVzeW5jX21heF9zZWN0b3JzOyAvKiBtYXkgYmUgc2V0IGJ5IHBlcnNvbmFsaXR5ICovCisKKwlzZWN0b3JfdAkJCXJlc3luY19taXNtYXRjaGVzOyAvKiBjb3VudCBvZiBzZWN0b3JzIHdoZXJlCisJCQkJCQkJICAgICogcGFyaXR5L3JlcGxpY2EgbWlzbWF0Y2ggZm91bmQKKwkJCQkJCQkgICAgKi8KKworCS8qIGFsbG93IHVzZXItc3BhY2UgdG8gcmVxdWVzdCBzdXNwZW5zaW9uIG9mIElPIHRvIHJlZ2lvbnMgb2YgdGhlIGFycmF5ICovCisJc2VjdG9yX3QJCQlzdXNwZW5kX2xvOworCXNlY3Rvcl90CQkJc3VzcGVuZF9oaTsKKwkvKiBpZiB6ZXJvLCB1c2UgdGhlIHN5c3RlbS13aWRlIGRlZmF1bHQgKi8KKwlpbnQJCQkJc3luY19zcGVlZF9taW47CisJaW50CQkJCXN5bmNfc3BlZWRfbWF4OworCisJLyogcmVzeW5jIGV2ZW4gdGhvdWdoIHRoZSBzYW1lIGRpc2tzIGFyZSBzaGFyZWQgYW1vbmcgbWQtZGV2aWNlcyAqLworCWludAkJCQlwYXJhbGxlbF9yZXN5bmM7CisKKwlpbnQJCQkJb2tfc3RhcnRfZGVncmFkZWQ7CisJLyogcmVjb3ZlcnkvcmVzeW5jIGZsYWdzIAorCSAqIE5FRURFRDogICB3ZSBtaWdodCBuZWVkIHRvIHN0YXJ0IGEgcmVzeW5jL3JlY292ZXIKKwkgKiBSVU5OSU5HOiAgYSB0aHJlYWQgaXMgcnVubmluZywgb3IgYWJvdXQgdG8gYmUgc3RhcnRlZAorCSAqIFNZTkM6ICAgICBhY3R1YWxseSBkb2luZyBhIHJlc3luYywgbm90IGEgcmVjb3ZlcnkKKwkgKiBSRUNPVkVSOiAgZG9pbmcgcmVjb3ZlcnksIG9yIG5lZWQgdG8gdHJ5IGl0LgorCSAqIElOVFI6ICAgICByZXN5bmMgbmVlZHMgdG8gYmUgYWJvcnRlZCBmb3Igc29tZSByZWFzb24KKwkgKiBET05FOiAgICAgdGhyZWFkIGlzIGRvbmUgYW5kIGlzIHdhaXRpbmcgdG8gYmUgcmVhcGVkCisJICogUkVRVUVTVDogIHVzZXItc3BhY2UgaGFzIHJlcXVlc3RlZCBhIHN5bmMgKHVzZWQgd2l0aCBTWU5DKQorCSAqIENIRUNLOiAgICB1c2VyLXNwYWNlIHJlcXVlc3QgZm9yIGZvciBjaGVjay1vbmx5LCBubyByZXBhaXIKKwkgKiBSRVNIQVBFOiAgQSByZXNoYXBlIGlzIGhhcHBlbmluZworCSAqCisJICogSWYgbmVpdGhlciBTWU5DIG9yIFJFU0hBUEUgYXJlIHNldCwgdGhlbiBpdCBpcyBhIHJlY292ZXJ5LgorCSAqLworI2RlZmluZQlNRF9SRUNPVkVSWV9SVU5OSU5HCTAKKyNkZWZpbmUJTURfUkVDT1ZFUllfU1lOQwkxCisjZGVmaW5lCU1EX1JFQ09WRVJZX1JFQ09WRVIJMgorI2RlZmluZQlNRF9SRUNPVkVSWV9JTlRSCTMKKyNkZWZpbmUJTURfUkVDT1ZFUllfRE9ORQk0CisjZGVmaW5lCU1EX1JFQ09WRVJZX05FRURFRAk1CisjZGVmaW5lCU1EX1JFQ09WRVJZX1JFUVVFU1RFRAk2CisjZGVmaW5lCU1EX1JFQ09WRVJZX0NIRUNLCTcKKyNkZWZpbmUgTURfUkVDT1ZFUllfUkVTSEFQRQk4CisjZGVmaW5lCU1EX1JFQ09WRVJZX0ZST1pFTgk5CisKKwl1bnNpZ25lZCBsb25nCQkJcmVjb3Zlcnk7CisJaW50CQkJCXJlY292ZXJ5X2Rpc2FibGVkOyAvKiBpZiB3ZSBkZXRlY3QgdGhhdCByZWNvdmVyeQorCQkJCQkJCSAgICAqIHdpbGwgYWx3YXlzIGZhaWwsIHNldCB0aGlzCisJCQkJCQkJICAgICogc28gd2UgZG9uJ3QgbG9vcCB0cnlpbmcgKi8KKworCWludAkJCQlpbl9zeW5jOwkvKiBrbm93IHRvIG5vdCBuZWVkIHJlc3luYyAqLworCXN0cnVjdCBtdXRleAkJCXJlY29uZmlnX211dGV4OworCWF0b21pY190CQkJYWN0aXZlOwkJLyogZ2VuZXJhbCByZWZjb3VudCAqLworCWF0b21pY190CQkJb3BlbmVyczsJLyogbnVtYmVyIG9mIGFjdGl2ZSBvcGVucyAqLworCisJaW50CQkJCWNoYW5nZWQ7CS8qIHRydWUgaWYgd2UgbWlnaHQgbmVlZCB0byByZXJlYWQgcGFydGl0aW9uIGluZm8gKi8KKwlpbnQJCQkJZGVncmFkZWQ7CS8qIHdoZXRoZXIgbWQgc2hvdWxkIGNvbnNpZGVyCisJCQkJCQkJICogYWRkaW5nIGEgc3BhcmUKKwkJCQkJCQkgKi8KKwlpbnQJCQkJYmFycmllcnNfd29yazsJLyogaW5pdGlhbGlzZWQgdG8gdHJ1ZSwgY2xlYXJlZCBhcyBzb29uCisJCQkJCQkJICogYXMgYSBiYXJyaWVyIHJlcXVlc3QgdG8gc2xhdmUKKwkJCQkJCQkgKiBmYWlscy4gIE9ubHkgc3VwcG9ydGVkCisJCQkJCQkJICovCisJc3RydWN0IGJpbwkJCSpiaW9saXN0OyAJLyogYmlvcyB0aGF0IG5lZWQgdG8gYmUgcmV0cmllZAorCQkJCQkJCSAqIGJlY2F1c2UgQklPX1JXX0JBUlJJRVIgaXMgbm90IHN1cHBvcnRlZAorCQkJCQkJCSAqLworCisJYXRvbWljX3QJCQlyZWNvdmVyeV9hY3RpdmU7IC8qIGJsb2NrcyBzY2hlZHVsZWQsIGJ1dCBub3Qgd3JpdHRlbiAqLworCXdhaXRfcXVldWVfaGVhZF90CQlyZWNvdmVyeV93YWl0OworCXNlY3Rvcl90CQkJcmVjb3ZlcnlfY3A7CisJc2VjdG9yX3QJCQlyZXN5bmNfbWluOwkvKiB1c2VyIHJlcXVlc3RlZCBzeW5jCisJCQkJCQkJICogc3RhcnRzIGhlcmUgKi8KKwlzZWN0b3JfdAkJCXJlc3luY19tYXg7CS8qIHJlc3luYyBzaG91bGQgcGF1c2UKKwkJCQkJCQkgKiB3aGVuIGl0IGdldHMgaGVyZSAqLworCisJc3RydWN0IHN5c2ZzX2RpcmVudAkJKnN5c2ZzX3N0YXRlOwkvKiBoYW5kbGUgZm9yICdhcnJheV9zdGF0ZScKKwkJCQkJCQkgKiBmaWxlIGluIHN5c2ZzLgorCQkJCQkJCSAqLworCXN0cnVjdCBzeXNmc19kaXJlbnQJCSpzeXNmc19hY3Rpb247ICAvKiBoYW5kbGUgZm9yICdzeW5jX2FjdGlvbicgKi8KKworCXN0cnVjdCB3b3JrX3N0cnVjdCBkZWxfd29yazsJLyogdXNlZCBmb3IgZGVsYXllZCBzeXNmcyByZW1vdmFsICovCisKKwlzcGlubG9ja190CQkJd3JpdGVfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJc2Jfd2FpdDsJLyogZm9yIHdhaXRpbmcgb24gc3VwZXJibG9jayB1cGRhdGVzICovCisJYXRvbWljX3QJCQlwZW5kaW5nX3dyaXRlczsJLyogbnVtYmVyIG9mIGFjdGl2ZSBzdXBlcmJsb2NrIHdyaXRlcyAqLworCisJdW5zaWduZWQgaW50CQkJc2FmZW1vZGU7CS8qIGlmIHNldCwgdXBkYXRlICJjbGVhbiIgc3VwZXJibG9jaworCQkJCQkJCSAqIHdoZW4gbm8gd3JpdGVzIHBlbmRpbmcuCisJCQkJCQkJICovIAorCXVuc2lnbmVkIGludAkJCXNhZmVtb2RlX2RlbGF5OworCXN0cnVjdCB0aW1lcl9saXN0CQlzYWZlbW9kZV90aW1lcjsKKwlhdG9taWNfdAkJCXdyaXRlc19wZW5kaW5nOyAKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkJKnF1ZXVlOwkvKiBmb3IgcGx1Z2dpbmcgLi4uICovCisKKwlhdG9taWNfdCAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2JlaGluZDsgLyogb3V0c3RhbmRpbmcgYXN5bmMgSU8gKi8KKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIG1heF93cml0ZV9iZWhpbmQ7IC8qIDAgPSBzeW5jICovCisKKwlzdHJ1Y3QgYml0bWFwICAgICAgICAgICAgICAgICAgICpiaXRtYXA7IC8qIHRoZSBiaXRtYXAgZm9yIHRoZSBkZXZpY2UgKi8KKwlzdHJ1Y3QgZmlsZQkJCSpiaXRtYXBfZmlsZTsgLyogdGhlIGJpdG1hcCBmaWxlICovCisJbG9uZwkJCQliaXRtYXBfb2Zmc2V0OyAvKiBvZmZzZXQgZnJvbSBzdXBlcmJsb2NrIG9mCisJCQkJCQkJKiBzdGFydCBvZiBiaXRtYXAuIE1heSBiZQorCQkJCQkJCSogbmVnYXRpdmUsIGJ1dCBub3QgJzAnCisJCQkJCQkJKi8KKwlsb25nCQkJCWRlZmF1bHRfYml0bWFwX29mZnNldDsgLyogdGhpcyBpcyB0aGUgb2Zmc2V0IHRvIHVzZSB3aGVuCisJCQkJCQkJCSogaG90LWFkZGluZyBhIGJpdG1hcC4gIEl0IHNob3VsZAorCQkJCQkJCQkqIGV2ZW50dWFsbHkgYmUgc2V0dGFibGUgYnkgc3lzZnMuCisJCQkJCQkJCSovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlhbGxfbWRkZXZzOworfTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQgcmRldl9kZWNfcGVuZGluZyhtZGtfcmRldl90ICpyZGV2LCBtZGRldl90ICptZGRldikKK3sKKwlpbnQgZmF1bHR5ID0gdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZGV2LT5ucl9wZW5kaW5nKSAmJiBmYXVsdHkpCisJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1kX3N5bmNfYWNjdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBsb25nIG5yX3NlY3RvcnMpCit7CisgICAgICAgIGF0b21pY19hZGQobnJfc2VjdG9ycywgJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9kaXNrLT5zeW5jX2lvKTsKK30KKworc3RydWN0IG1ka19wZXJzb25hbGl0eQoreworCWNoYXIgKm5hbWU7CisJaW50IGxldmVsOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlpbnQgKCptYWtlX3JlcXVlc3QpKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pOworCWludCAoKnJ1bikobWRkZXZfdCAqbWRkZXYpOworCWludCAoKnN0b3ApKG1kZGV2X3QgKm1kZGV2KTsKKwl2b2lkICgqc3RhdHVzKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbWRkZXZfdCAqbWRkZXYpOworCS8qIGVycm9yX2hhbmRsZXIgbXVzdCBzZXQgLT5mYXVsdHkgYW5kIGNsZWFyIC0+aW5fc3luYworCSAqIGlmIGFwcHJvcHJpYXRlLCBhbmQgc2hvdWxkIGFib3J0IHJlY292ZXJ5IGlmIG5lZWRlZCAKKwkgKi8KKwl2b2lkICgqZXJyb3JfaGFuZGxlcikobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpOworCWludCAoKmhvdF9hZGRfZGlzaykgKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKKwlpbnQgKCpob3RfcmVtb3ZlX2Rpc2spIChtZGRldl90ICptZGRldiwgaW50IG51bWJlcik7CisJaW50ICgqc3BhcmVfYWN0aXZlKSAobWRkZXZfdCAqbWRkZXYpOworCXNlY3Rvcl90ICgqc3luY19yZXF1ZXN0KShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpOworCWludCAoKnJlc2l6ZSkgKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTsKKwlzZWN0b3JfdCAoKnNpemUpIChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpOworCWludCAoKmNoZWNrX3Jlc2hhcGUpIChtZGRldl90ICptZGRldik7CisJaW50ICgqc3RhcnRfcmVzaGFwZSkgKG1kZGV2X3QgKm1kZGV2KTsKKwl2b2lkICgqZmluaXNoX3Jlc2hhcGUpIChtZGRldl90ICptZGRldik7CisJaW50ICgqcmVjb25maWcpIChtZGRldl90ICptZGRldiwgaW50IGxheW91dCwgaW50IGNodW5rX3NpemUpOworCS8qIHF1aWVzY2UgbW92ZXMgYmV0d2VlbiBxdWllc2NlbmNlIHN0YXRlcworCSAqIDAgLSBmdWxseSBhY3RpdmUKKwkgKiAxIC0gbm8gbmV3IHJlcXVlc3RzIGFsbG93ZWQKKwkgKiBvdGhlcnMgLSByZXNlcnZlZAorCSAqLworCXZvaWQgKCpxdWllc2NlKSAobWRkZXZfdCAqbWRkZXYsIGludCBzdGF0ZSk7CisJLyogdGFrZW92ZXIgaXMgdXNlZCB0byB0cmFuc2l0aW9uIGFuIGFycmF5IGZyb20gb25lCisJICogcGVyc29uYWxpdHkgdG8gYW5vdGhlci4gIFRoZSBuZXcgcGVyc29uYWxpdHkgbXVzdCBiZSBhYmxlCisJICogdG8gaGFuZGxlIHRoZSBkYXRhIGluIHRoZSBjdXJyZW50IGxheW91dC4KKwkgKiBlLmcuIDJkcml2ZSByYWlkMSAtPiAyZHJpdmUgcmFpZDUKKwkgKiAgICAgIG5kcml2ZSByYWlkNSAtPiBkZWdyYWRlZCBuKzFkcml2ZSByYWlkNiB3aXRoIHNwZWNpYWwgbGF5b3V0CisJICogSWYgdGhlIHRha2VvdmVyIHN1Y2NlZWRzLCBhIG5ldyAncHJpdmF0ZScgc3RydWN0dXJlIGlzIHJldHVybmVkLgorCSAqIFRoaXMgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGFuZCB0aGVuIC0+cnVuIHVzZWQgdG8gYWN0aXZhdGUgdGhlCisJICogYXJyYXkuCisJICovCisJdm9pZCAqKCp0YWtlb3ZlcikgKG1kZGV2X3QgKm1kZGV2KTsKK307CisKKworc3RydWN0IG1kX3N5c2ZzX2VudHJ5IHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKG1kZGV2X3QgKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKG1kZGV2X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworCitzdGF0aWMgaW5saW5lIGNoYXIgKiBtZG5hbWUgKG1kZGV2X3QgKiBtZGRldikKK3sKKwlyZXR1cm4gbWRkZXYtPmdlbmRpc2sgPyBtZGRldi0+Z2VuZGlzay0+ZGlza19uYW1lIDogIm1kWCI7Cit9CisKKy8qCisgKiBpdGVyYXRlcyB0aHJvdWdoIHNvbWUgcmRldiByaW5nbGlzdC4gSXQncyBzYWZlIHRvIHJlbW92ZSB0aGUKKyAqIGN1cnJlbnQgJ3JkZXYnLiBEb250IHRvdWNoICd0bXAnIHRob3VnaC4KKyAqLworI2RlZmluZSByZGV2X2Zvcl9lYWNoX2xpc3QocmRldiwgdG1wLCBoZWFkKQkJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJkZXYsIHRtcCwgaGVhZCwgc2FtZV9zZXQpCisKKy8qCisgKiBpdGVyYXRlcyB0aHJvdWdoIHRoZSAnc2FtZSBhcnJheSBkaXNrcycgcmluZ2xpc3QKKyAqLworI2RlZmluZSByZGV2X2Zvcl9lYWNoKHJkZXYsIHRtcCwgbWRkZXYpCQkJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmRldiwgdG1wLCAmKChtZGRldiktPmRpc2tzKSwgc2FtZV9zZXQpCisKKyNkZWZpbmUgcmRldl9mb3JfZWFjaF9yY3UocmRldiwgbWRkZXYpCQkJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZGV2LCAmKChtZGRldiktPmRpc2tzKSwgc2FtZV9zZXQpCisKK3R5cGVkZWYgc3RydWN0IG1ka190aHJlYWRfcyB7CisJdm9pZAkJCSgqcnVuKSAobWRkZXZfdCAqbWRkZXYpOworCW1kZGV2X3QJCQkqbWRkZXY7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd3F1ZXVlOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIGZsYWdzOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdHNrOworCXVuc2lnbmVkIGxvbmcJCXRpbWVvdXQ7Cit9IG1ka190aHJlYWRfdDsKKworI2RlZmluZSBUSFJFQURfV0FLRVVQICAwCisKKyNkZWZpbmUgX193YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCkgCQlcCitkbyB7CQkJCQkJCQkJXAorCXdhaXRfcXVldWVfdCBfX3dhaXQ7CQkJCQkJXAorCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOwkJCQlcCisJCQkJCQkJCQlcCisJYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJCVwKKwlmb3IgKDs7KSB7CQkJCQkJCVwKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwkJXAorCQlpZiAoY29uZGl0aW9uKQkJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJc3Bpbl91bmxvY2tfaXJxKCZsb2NrKTsJCQkJCVwKKwkJY21kOwkJCQkJCQlcCisJCXNjaGVkdWxlKCk7CQkJCQkJXAorCQlzcGluX2xvY2tfaXJxKCZsb2NrKTsJCQkJCVwKKwl9CQkJCQkJCQlcCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQkJCQlcCisJcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSB3YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCkgCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoY29uZGl0aW9uKQkgCQkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCV9fd2FpdF9ldmVudF9sb2NrX2lycSh3cSwgY29uZGl0aW9uLCBsb2NrLCBjbWQpOwkJXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNhZmVfcHV0X3BhZ2Uoc3RydWN0IHBhZ2UgKnApCit7CisJaWYgKHApIHB1dF9wYWdlKHApOworfQorCisjZW5kaWYgLyogQ09ORklHX0JMT0NLICovCisjZW5kaWYKKworCitleHRlcm4gaW50IHJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOworZXh0ZXJuIG1ka190aHJlYWRfdCAqIG1kX3JlZ2lzdGVyX3RocmVhZCh2b2lkICgqcnVuKSAobWRkZXZfdCAqbWRkZXYpLAorCQkJCW1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIG1kX3VucmVnaXN0ZXJfdGhyZWFkKG1ka190aHJlYWRfdCAqdGhyZWFkKTsKK2V4dGVybiB2b2lkIG1kX3dha2V1cF90aHJlYWQobWRrX3RocmVhZF90ICp0aHJlYWQpOworZXh0ZXJuIHZvaWQgbWRfY2hlY2tfcmVjb3ZlcnkobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfd3JpdGVfc3RhcnQobWRkZXZfdCAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpKTsKK2V4dGVybiB2b2lkIG1kX3dyaXRlX2VuZChtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF9kb25lX3N5bmMobWRkZXZfdCAqbWRkZXYsIGludCBibG9ja3MsIGludCBvayk7CitleHRlcm4gdm9pZCBtZF9lcnJvcihtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7CisKK2V4dGVybiB2b2lkIG1kX3N1cGVyX3dyaXRlKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2LAorCQkJICAgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgbWRfc3VwZXJfd2FpdChtZGRldl90ICptZGRldik7CitleHRlcm4gaW50IHN5bmNfcGFnZV9pbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIGludCBzaXplLAorCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBydyk7CitleHRlcm4gdm9pZCBtZF9kb19zeW5jKG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiB2b2lkIG1kX25ld19ldmVudChtZGRldl90ICptZGRldik7CitleHRlcm4gaW50IG1kX2FsbG93X3dyaXRlKG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiB2b2lkIG1kX3dhaXRfZm9yX2Jsb2NrZWRfcmRldihtZGtfcmRldl90ICpyZGV2LCBtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldl90ICptZGRldiwgc2VjdG9yX3QgYXJyYXlfc2VjdG9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21rdGFibGVzLmMgYi9kcml2ZXJzL21kL21rdGFibGVzLmMKaW5kZXggYjYxZDU3Ni4uM2IxNTAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9ta3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvbWQvbWt0YWJsZXMuYwpAQCAtNTksNyArNTksNyBAQAogCXVpbnQ4X3QgdjsKIAl1aW50OF90IGV4cHRibFsyNTZdLCBpbnZ0YmxbMjU2XTsKIAotCXByaW50ZigiI2luY2x1ZGUgXCJyYWlkNi5oXCJcbiIpOworCXByaW50ZigiI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD5cbiIpOwogCiAJLyogQ29tcHV0ZSBtdWx0aXBsaWNhdGlvbiB0YWJsZSAqLwogCXByaW50ZigiXG5jb25zdCB1OCAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSlcbiIKQEAgLTc2LDYgKzc2LDkgQEAKIAkJcHJpbnRmKCJcdH0sXG4iKTsKIAl9CiAJcHJpbnRmKCJ9O1xuIik7CisJcHJpbnRmKCIjaWZkZWYgX19LRVJORUxfX1xuIik7CisJcHJpbnRmKCJFWFBPUlRfU1lNQk9MKHJhaWQ2X2dmbXVsKTtcbiIpOworCXByaW50ZigiI2VuZGlmXG4iKTsKIAogCS8qIENvbXB1dGUgcG93ZXItb2YtMiB0YWJsZSAoZXhwb25lbnQpICovCiAJdiA9IDE7CkBAIC05Miw2ICs5NSw5IEBACiAJCX0KIAl9CiAJcHJpbnRmKCJ9O1xuIik7CisJcHJpbnRmKCIjaWZkZWYgX19LRVJORUxfX1xuIik7CisJcHJpbnRmKCJFWFBPUlRfU1lNQk9MKHJhaWQ2X2dmZXhwKTtcbiIpOworCXByaW50ZigiI2VuZGlmXG4iKTsKIAogCS8qIENvbXB1dGUgaW52ZXJzZSB0YWJsZSB4Xi0xID09IHheMjU0ICovCiAJcHJpbnRmKCJcbmNvbnN0IHU4IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpXG4iCkBAIC0xMDQsNiArMTEwLDkgQEAKIAkJfQogCX0KIAlwcmludGYoIn07XG4iKTsKKwlwcmludGYoIiNpZmRlZiBfX0tFUk5FTF9fXG4iKTsKKwlwcmludGYoIkVYUE9SVF9TWU1CT0wocmFpZDZfZ2ZpbnYpO1xuIik7CisJcHJpbnRmKCIjZW5kaWZcbiIpOwogCiAJLyogQ29tcHV0ZSBpbnYoMl54ICsgMSkgKGV4cG9uZW50LXhvci1pbnZlcnNlKSB0YWJsZSAqLwogCXByaW50ZigiXG5jb25zdCB1OCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKVxuIgpAQCAtMTE1LDYgKzEyNCw5IEBACiAJCQkgICAgICAgKGogPT0gNykgPyAnXG4nIDogJyAnKTsKIAl9CiAJcHJpbnRmKCJ9O1xuIik7CisJcHJpbnRmKCIjaWZkZWYgX19LRVJORUxfX1xuIik7CisJcHJpbnRmKCJFWFBPUlRfU1lNQk9MKHJhaWQ2X2dmZXhpKTtcbiIpOworCXByaW50ZigiI2VuZGlmXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggZjZkMDhmMi4uNDFjZWQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC0xOSw3ICsxOSwxMSBAQAogICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbXVsdGlwYXRoLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgIm11bHRpcGF0aC5oIgogCiAjZGVmaW5lIE1BWF9XT1JLX1BFUl9ESVNLIDEyOAogCkBAIC00MDIsNiArNDA2LDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHNlY3Rvcl90IG11bHRpcGF0aF9zaXplKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzLCBpbnQgcmFpZF9kaXNrcykKK3sKKwlXQVJOX09OQ0Uoc2VjdG9ycyB8fCByYWlkX2Rpc2tzLAorCQkgICIlcyBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyaWMgcmVzaGFwZVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIG1kZGV2LT5kZXZfc2VjdG9yczsKK30KKwogc3RhdGljIGludCBtdWx0aXBhdGhfcnVuIChtZGRldl90ICptZGRldikKIHsKIAltdWx0aXBhdGhfY29uZl90ICpjb25mOwpAQCAtNDk4LDcgKzUxMCw3IEBACiAJLyoKIAkgKiBPaywgZXZlcnl0aGluZyBpcyBqdXN0IGZpbmUgbm93CiAJICovCi0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSAqIDI7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIG11bHRpcGF0aF9zaXplKG1kZGV2LCAwLCAwKSk7CiAKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IG11bHRpcGF0aF91bnBsdWc7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IG11bHRpcGF0aF9jb25nZXN0ZWQ7CkBAIC01NDMsNiArNTU1LDcgQEAKIAkuZXJyb3JfaGFuZGxlcgk9IG11bHRpcGF0aF9lcnJvciwKIAkuaG90X2FkZF9kaXNrCT0gbXVsdGlwYXRoX2FkZF9kaXNrLAogCS5ob3RfcmVtb3ZlX2Rpc2s9IG11bHRpcGF0aF9yZW1vdmVfZGlzaywKKwkuc2l6ZQkJPSBtdWx0aXBhdGhfc2l6ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG11bHRpcGF0aF9pbml0ICh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguaCBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhNzBiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBfTVVMVElQQVRIX0gKKyNkZWZpbmUgX01VTFRJUEFUSF9ICisKK3N0cnVjdCBtdWx0aXBhdGhfaW5mbyB7CisJbWRrX3JkZXZfdAkqcmRldjsKK307CisKK3N0cnVjdCBtdWx0aXBhdGhfcHJpdmF0ZV9kYXRhIHsKKwltZGRldl90CQkJKm1kZGV2OworCXN0cnVjdCBtdWx0aXBhdGhfaW5mbwkqbXVsdGlwYXRoczsKKwlpbnQJCQlyYWlkX2Rpc2tzOworCWludAkJCXdvcmtpbmdfZGlza3M7CisJc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OworCisJbWVtcG9vbF90CQkqcG9vbDsKK307CisKK3R5cGVkZWYgc3RydWN0IG11bHRpcGF0aF9wcml2YXRlX2RhdGEgbXVsdGlwYXRoX2NvbmZfdDsKKworLyoKKyAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCisgKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgorICovCisjZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgobXVsdGlwYXRoX2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKKworLyoKKyAqIHRoaXMgaXMgb3VyICdwcml2YXRlJyAnY29sbGVjdGl2ZScgTVVMVElQQVRIIGJ1ZmZlciBoZWFkLgorICogaXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBraW5kIG9mIElPIG9wZXJhdGlvbnMgd2VyZSBzdGFydGVkCisgKiBmb3IgdGhpcyBNVUxUSVBBVEggb3BlcmF0aW9uLCBhbmQgYWJvdXQgdGhlaXIgc3RhdHVzOgorICovCisKK3N0cnVjdCBtdWx0aXBhdGhfYmggeworCW1kZGV2X3QJCQkqbWRkZXY7CisJc3RydWN0IGJpbwkJKm1hc3Rlcl9iaW87CisJc3RydWN0IGJpbwkJYmlvOworCWludAkJCXBhdGg7CisJc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IGM2MDViYTguLmMwOGQ3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTE4LDcgKzE4LDEwIEBACiAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gIAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDAuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSAicmFpZDAuaCIKIAogc3RhdGljIHZvaWQgcmFpZDBfdW5wbHVnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewpAQCAtNzMsMTYgKzc2LDE1IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldjIsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJyYWlkMDogICBjb21wYXJpbmcgJXMoJWxsdSkiLAogCQkJICAgICAgIGJkZXZuYW1lKHJkZXYxLT5iZGV2LGIpLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmRldjEtPnNpemUpOworCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmRldjEtPnNlY3RvcnMpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiIHdpdGggJXMoJWxsdSlcbiIsCiAJCQkgICAgICAgYmRldm5hbWUocmRldjItPmJkZXYsYiksCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2Mi0+c2l6ZSk7CisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2Mi0+c2VjdG9ycyk7CiAJCQlpZiAocmRldjIgPT0gcmRldjEpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJyYWlkMDogICBFTkRcbiIpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKHJkZXYyLT5zaXplID09IHJkZXYxLT5zaXplKQotCQkJeworCQkJaWYgKHJkZXYyLT5zZWN0b3JzID09IHJkZXYxLT5zZWN0b3JzKSB7CiAJCQkJLyoKIAkJCQkgKiBOb3QgdW5pcXVlLCBkb24ndCBjb3VudCBpdCBhcyBhIG5ldwogCQkJCSAqIGdyb3VwCkBAIC0xNDUsNyArMTQ3LDcgQEAKIAkJICAgIG1kZGV2LT5xdWV1ZS0+bWF4X3NlY3RvcnMgPiAoUEFHRV9TSVpFPj45KSkKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKLQkJaWYgKCFzbWFsbGVzdCB8fCAocmRldjEtPnNpemUgPHNtYWxsZXN0LT5zaXplKSkKKwkJaWYgKCFzbWFsbGVzdCB8fCAocmRldjEtPnNlY3RvcnMgPCBzbWFsbGVzdC0+c2VjdG9ycykpCiAJCQlzbWFsbGVzdCA9IHJkZXYxOwogCQljbnQrKzsKIAl9CkBAIC0xNTUsMTAgKzE1NywxMCBAQAogCQlnb3RvIGFib3J0OwogCX0KIAl6b25lLT5uYl9kZXYgPSBjbnQ7Ci0Jem9uZS0+c2VjdG9ycyA9IHNtYWxsZXN0LT5zaXplICogY250ICogMjsKKwl6b25lLT5zZWN0b3JzID0gc21hbGxlc3QtPnNlY3RvcnMgKiBjbnQ7CiAJem9uZS0+em9uZV9zdGFydCA9IDA7CiAKLQljdXJyZW50X3N0YXJ0ID0gc21hbGxlc3QtPnNpemUgKiAyOworCWN1cnJlbnRfc3RhcnQgPSBzbWFsbGVzdC0+c2VjdG9yczsKIAljdXJyX3pvbmVfc3RhcnQgPSB6b25lLT5zZWN0b3JzOwogCiAJLyogbm93IGRvIHRoZSBvdGhlciB6b25lcyAqLwpAQCAtMTc3LDI5ICsxNzksMjkgQEAKIAkJCXJkZXYgPSBjb25mLT5zdHJpcF96b25lWzBdLmRldltqXTsKIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQwOiBjaGVja2luZyAlcyAuLi4iLAogCQkJCWJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKLQkJCWlmIChyZGV2LT5zaXplID4gY3VycmVudF9zdGFydCAvIDIpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIgY29udGFpbmVkIGFzIGRldmljZSAlZFxuIiwKLQkJCQkJYyk7Ci0JCQkJem9uZS0+ZGV2W2NdID0gcmRldjsKLQkJCQljKys7Ci0JCQkJaWYgKCFzbWFsbGVzdCB8fCAocmRldi0+c2l6ZSA8c21hbGxlc3QtPnNpemUpKSB7Ci0JCQkJCXNtYWxsZXN0ID0gcmRldjsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAoJWxsdSkgaXMgc21hbGxlc3QhLlxuIiwKLQkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2l6ZSk7Ci0JCQkJfQotCQkJfSBlbHNlCisJCQlpZiAocmRldi0+c2VjdG9ycyA8PSBjdXJyZW50X3N0YXJ0KSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiIG5vcGUuXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0lORk8gIiBjb250YWluZWQgYXMgZGV2aWNlICVkXG4iLCBjKTsKKwkJCXpvbmUtPmRldltjXSA9IHJkZXY7CisJCQljKys7CisJCQlpZiAoIXNtYWxsZXN0IHx8IHJkZXYtPnNlY3RvcnMgPCBzbWFsbGVzdC0+c2VjdG9ycykgeworCQkJCXNtYWxsZXN0ID0gcmRldjsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIgICglbGx1KSBpcyBzbWFsbGVzdCEuXG4iLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJkZXYtPnNlY3RvcnMpOworCQkJfQogCQl9CiAKIAkJem9uZS0+bmJfZGV2ID0gYzsKLQkJem9uZS0+c2VjdG9ycyA9IChzbWFsbGVzdC0+c2l6ZSAqIDIgLSBjdXJyZW50X3N0YXJ0KSAqIGM7CisJCXpvbmUtPnNlY3RvcnMgPSAoc21hbGxlc3QtPnNlY3RvcnMgLSBjdXJyZW50X3N0YXJ0KSAqIGM7CiAJCXByaW50ayhLRVJOX0lORk8gInJhaWQwOiB6b25lLT5uYl9kZXY6ICVkLCBzZWN0b3JzOiAlbGx1XG4iLAogCQkJem9uZS0+bmJfZGV2LCAodW5zaWduZWQgbG9uZyBsb25nKXpvbmUtPnNlY3RvcnMpOwogCiAJCXpvbmUtPnpvbmVfc3RhcnQgPSBjdXJyX3pvbmVfc3RhcnQ7CiAJCWN1cnJfem9uZV9zdGFydCArPSB6b25lLT5zZWN0b3JzOwogCi0JCWN1cnJlbnRfc3RhcnQgPSBzbWFsbGVzdC0+c2l6ZSAqIDI7CisJCWN1cnJlbnRfc3RhcnQgPSBzbWFsbGVzdC0+c2VjdG9yczsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDA6IGN1cnJlbnQgem9uZSBzdGFydDogJWxsdVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudF9zdGFydCk7CiAJfQpAQCAtMjYxLDEyICsyNjMsMjUgQEAKIAkJcmV0dXJuIG1heDsKIH0KIAorc3RhdGljIHNlY3Rvcl90IHJhaWQwX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCXNlY3Rvcl90IGFycmF5X3NlY3RvcnMgPSAwOworCW1ka19yZGV2X3QgKnJkZXY7CisKKwlXQVJOX09OQ0Uoc2VjdG9ycyB8fCByYWlkX2Rpc2tzLAorCQkgICIlcyBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyaWMgcmVzaGFwZVxuIiwgX19mdW5jX18pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKKwkJYXJyYXlfc2VjdG9ycyArPSByZGV2LT5zZWN0b3JzOworCisJcmV0dXJuIGFycmF5X3NlY3RvcnM7Cit9CisKIHN0YXRpYyBpbnQgcmFpZDBfcnVuIChtZGRldl90ICptZGRldikKIHsKIAl1bnNpZ25lZCAgY3VyPTAsIGk9MCwgbmJfem9uZTsKIAlzNjQgc2VjdG9yczsKIAlyYWlkMF9jb25mX3QgKmNvbmY7Ci0JbWRrX3JkZXZfdCAqcmRldjsKIAogCWlmIChtZGRldi0+Y2h1bmtfc2l6ZSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWQvcmFpZDA6IG5vbi16ZXJvIGNodW5rIHNpemUgcmVxdWlyZWQuXG4iKTsKQEAgLTI5MSwxNiArMzA2LDE0IEBACiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAogCS8qIGNhbGN1bGF0ZSBhcnJheSBkZXZpY2Ugc2l6ZSAqLwotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQotCQltZGRldi0+YXJyYXlfc2VjdG9ycyArPSByZGV2LT5zaXplICogMjsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDBfc2l6ZShtZGRldiwgMCwgMCkpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDAgOiBtZF9zaXplIGlzICVsbHUgc2VjdG9ycy5cbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCXByaW50ayhLRVJOX0lORk8gInJhaWQwIDogY29uZi0+c3BhY2luZyBpcyAlbGx1IHNlY3RvcnMuXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWNvbmYtPnNwYWNpbmcpOwogCXsKLQkJc2VjdG9yX3QgcyA9IG1kZGV2LT5hcnJheV9zZWN0b3JzOworCQlzZWN0b3JfdCBzID0gcmFpZDBfc2l6ZShtZGRldiwgMCwgMCk7CiAJCXNlY3Rvcl90IHNwYWNlID0gY29uZi0+c3BhY2luZzsKIAkJaW50IHJvdW5kOwogCQljb25mLT5zZWN0b3Jfc2hpZnQgPSAwOwpAQCAtNTA5LDYgKzUyMiw3IEBACiAJLnJ1bgkJPSByYWlkMF9ydW4sCiAJLnN0b3AJCT0gcmFpZDBfc3RvcCwKIAkuc3RhdHVzCQk9IHJhaWQwX3N0YXR1cywKKwkuc2l6ZQkJPSByYWlkMF9zaXplLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcmFpZDBfaW5pdCAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuaCBiL2RyaXZlcnMvbWQvcmFpZDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjRiMTJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX1JBSUQwX0gKKyNkZWZpbmUgX1JBSUQwX0gKKworc3RydWN0IHN0cmlwX3pvbmUKK3sKKwlzZWN0b3JfdCB6b25lX3N0YXJ0OwkvKiBab25lIG9mZnNldCBpbiBtZF9kZXYgKGluIHNlY3RvcnMpICovCisJc2VjdG9yX3QgZGV2X3N0YXJ0OwkvKiBab25lIG9mZnNldCBpbiByZWFsIGRldiAoaW4gc2VjdG9ycykgKi8KKwlzZWN0b3JfdCBzZWN0b3JzOwkvKiBab25lIHNpemUgaW4gc2VjdG9ycyAqLworCWludCBuYl9kZXY7CQkvKiAjIG9mIGRldmljZXMgYXR0YWNoZWQgdG8gdGhlIHpvbmUgKi8KKwltZGtfcmRldl90ICoqZGV2OwkvKiBEZXZpY2VzIGF0dGFjaGVkIHRvIHRoZSB6b25lICovCit9OworCitzdHJ1Y3QgcmFpZDBfcHJpdmF0ZV9kYXRhCit7CisJc3RydWN0IHN0cmlwX3pvbmUgKipoYXNoX3RhYmxlOyAvKiBUYWJsZSBvZiBpbmRleGVzIGludG8gc3RyaXBfem9uZSAqLworCXN0cnVjdCBzdHJpcF96b25lICpzdHJpcF96b25lOworCW1ka19yZGV2X3QgKipkZXZsaXN0OyAvKiBsaXN0cyBvZiByZGV2cywgcG9pbnRlZCB0byBieSBzdHJpcF96b25lLT5kZXYgKi8KKwlpbnQgbnJfc3RyaXBfem9uZXM7CisKKwlzZWN0b3JfdCBzcGFjaW5nOworCWludCBzZWN0b3Jfc2hpZnQ7IC8qIHNoaWZ0IHRoaXMgYmVmb3JlIGRpdmlkZSBieSBzcGFjaW5nICovCit9OworCit0eXBlZGVmIHN0cnVjdCByYWlkMF9wcml2YXRlX2RhdGEgcmFpZDBfY29uZl90OworCisjZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgocmFpZDBfY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBlMjQ2NjQyLi5iNGY0YmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0zMSwxMCArMzEsMTMgQEAKICAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlICJkbS1iaW8tbGlzdC5oIgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9yYWlkMS5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCisjaW5jbHVkZSAicmFpZDEuaCIKKyNpbmNsdWRlICJiaXRtYXAuaCIKIAogI2RlZmluZSBERUJVRyAwCiAjaWYgREVCVUcKQEAgLTE3MjMsNyArMTcyNiw3IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQltYXhfc2VjdG9yID0gbWRkZXYtPnNpemUgPDwgMTsKKwltYXhfc2VjdG9yID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCWlmIChzZWN0b3JfbnIgPj0gbWF4X3NlY3RvcikgewogCQkvKiBJZiB3ZSBhYm9ydGVkLCB3ZSBuZWVkIHRvIGFib3J0IHRoZQogCQkgKiBzeW5jIG9uIHRoZSAnY3VycmVudCcgYml0bWFwIGNodW5rICh0aGVyZSB3aWxsCkBAIC0xOTE5LDYgKzE5MjIsMTQgQEAKIAlyZXR1cm4gbnJfc2VjdG9yczsKIH0KIAorc3RhdGljIHNlY3Rvcl90IHJhaWQxX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCWlmIChzZWN0b3JzKQorCQlyZXR1cm4gc2VjdG9yczsKKworCXJldHVybiBtZGRldi0+ZGV2X3NlY3RvcnM7Cit9CisKIHN0YXRpYyBpbnQgcnVuKG1kZGV2X3QgKm1kZGV2KQogewogCWNvbmZfdCAqY29uZjsKQEAgLTIwNDgsNyArMjA1OSw3IEBACiAJLyoKIAkgKiBPaywgZXZlcnl0aGluZyBpcyBqdXN0IGZpbmUgbm93CiAJICovCi0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSAqIDI7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIHJhaWQxX3NpemUobWRkZXYsIDAsIDApKTsKIAogCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gcmFpZDFfdW5wbHVnOwogCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSByYWlkMV9jb25nZXN0ZWQ7CkBAIC0yMDg5LDYgKzIxMDAsOSBAQAogCQkvKiBuZWVkIHRvIGtpY2sgc29tZXRoaW5nIGhlcmUgdG8gbWFrZSBzdXJlIEkvTyBnb2VzPyAqLwogCX0KIAorCXJhaXNlX2JhcnJpZXIoY29uZik7CisJbG93ZXJfYmFycmllcihjb25mKTsKKwogCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCW1kZGV2LT50aHJlYWQgPSBOVUxMOwogCWJsa19zeW5jX3F1ZXVlKG1kZGV2LT5xdWV1ZSk7IC8qIHRoZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLwpAQCAtMjExMCwxNSArMjEyNCwxNyBAQAogCSAqIGFueSBpbyBpbiB0aGUgcmVtb3ZlZCBzcGFjZSBjb21wbGV0ZXMsIGJ1dCBpdCBoYXJkbHkgc2VlbXMKIAkgKiB3b3J0aCBpdC4KIAkgKi8KLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNlY3RvcnM7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIHJhaWQxX3NpemUobWRkZXYsIHNlY3RvcnMsIDApKTsKKwlpZiAobWRkZXYtPmFycmF5X3NlY3RvcnMgPiByYWlkMV9zaXplKG1kZGV2LCBzZWN0b3JzLCAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJbWRkZXYtPmNoYW5nZWQgPSAxOwotCWlmIChtZGRldi0+YXJyYXlfc2VjdG9ycyAvIDIgPiBtZGRldi0+c2l6ZSAmJgorCWlmIChzZWN0b3JzID4gbWRkZXYtPmRldl9zZWN0b3JzICYmCiAJICAgIG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpIHsKLQkJbWRkZXYtPnJlY292ZXJ5X2NwID0gbWRkZXYtPnNpemUgPDwgMTsKKwkJbWRkZXYtPnJlY292ZXJ5X2NwID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJfQotCW1kZGV2LT5zaXplID0gbWRkZXYtPmFycmF5X3NlY3RvcnMgLyAyOworCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHNlY3RvcnM7CiAJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IHNlY3RvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjY0LDYgKzIyODAsNyBAQAogCS5zcGFyZV9hY3RpdmUJPSByYWlkMV9zcGFyZV9hY3RpdmUsCiAJLnN5bmNfcmVxdWVzdAk9IHN5bmNfcmVxdWVzdCwKIAkucmVzaXplCQk9IHJhaWQxX3Jlc2l6ZSwKKwkuc2l6ZQkJPSByYWlkMV9zaXplLAogCS5jaGVja19yZXNoYXBlCT0gcmFpZDFfcmVzaGFwZSwKIAkucXVpZXNjZQk9IHJhaWQxX3F1aWVzY2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5oIGIvZHJpdmVycy9tZC9yYWlkMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjBlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21kL3JhaWQxLmgKQEAgLTAsMCArMSwxMzIgQEAKKyNpZm5kZWYgX1JBSUQxX0gKKyNkZWZpbmUgX1JBSUQxX0gKKwordHlwZWRlZiBzdHJ1Y3QgbWlycm9yX2luZm8gbWlycm9yX2luZm9fdDsKKworc3RydWN0IG1pcnJvcl9pbmZvIHsKKwltZGtfcmRldl90CSpyZGV2OworCXNlY3Rvcl90CWhlYWRfcG9zaXRpb247Cit9OworCisvKgorICogbWVtb3J5IHBvb2xzIG5lZWQgYSBwb2ludGVyIHRvIHRoZSBtZGRldiwgc28gdGhleSBjYW4gZm9yY2UgYW4gdW5wbHVnCisgKiB3aGVuIG1lbW9yeSBpcyB0aWdodCwgYW5kIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBkcml2ZXMgdGhhdCB0aGUKKyAqIHBvb2wgd2FzIGFsbG9jYXRlZCBmb3IsIHNvIHRoZXkga25vdyBob3cgbXVjaCB0byBhbGxvY2F0ZSBhbmQgZnJlZS4KKyAqIG1kZGV2LT5yYWlkX2Rpc2tzIGNhbm5vdCBiZSB1c2VkLCBhcyBpdCBjYW4gY2hhbmdlIHdoaWxlIGEgcG9vbCBpcyBhY3RpdmUKKyAqIFRoZXNlIHR3byBkYXR1bXMgYXJlIHN0b3JlZCBpbiBhIGttYWxsb2NlZCBzdHJ1Y3QuCisgKi8KKworc3RydWN0IHBvb2xfaW5mbyB7CisJbWRkZXZfdCAqbWRkZXY7CisJaW50CXJhaWRfZGlza3M7Cit9OworCisKK3R5cGVkZWYgc3RydWN0IHIxYmlvX3MgcjFiaW9fdDsKKworc3RydWN0IHIxX3ByaXZhdGVfZGF0YV9zIHsKKwltZGRldl90CQkJKm1kZGV2OworCW1pcnJvcl9pbmZvX3QJCSptaXJyb3JzOworCWludAkJCXJhaWRfZGlza3M7CisJaW50CQkJbGFzdF91c2VkOworCXNlY3Rvcl90CQluZXh0X3NlcV9zZWN0OworCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOworCisJc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OworCS8qIHF1ZXVlIHBlbmRpbmcgd3JpdGVzIGFuZCBzdWJtaXQgdGhlbSBvbiB1bnBsdWcgKi8KKwlzdHJ1Y3QgYmlvX2xpc3QJCXBlbmRpbmdfYmlvX2xpc3Q7CisJLyogcXVldWUgb2Ygd3JpdGVzIHRoYXQgaGF2ZSBiZWVuIHVucGx1Z2dlZCAqLworCXN0cnVjdCBiaW9fbGlzdAkJZmx1c2hpbmdfYmlvX2xpc3Q7CisKKwkvKiBmb3IgdXNlIHdoZW4gc3luY2luZyBtaXJyb3JzOiAqLworCisJc3BpbmxvY2tfdAkJcmVzeW5jX2xvY2s7CisJaW50CQkJbnJfcGVuZGluZzsKKwlpbnQJCQlucl93YWl0aW5nOworCWludAkJCW5yX3F1ZXVlZDsKKwlpbnQJCQliYXJyaWVyOworCXNlY3Rvcl90CQluZXh0X3Jlc3luYzsKKwlpbnQJCQlmdWxsc3luYzsgIC8qIHNldCB0byAxIGlmIGEgZnVsbCBzeW5jIGlzIG5lZWRlZCwKKwkJCQkJICAgICogKGZyZXNoIGRldmljZSBhZGRlZCkuCisJCQkJCSAgICAqIENsZWFyZWQgd2hlbiBhIHN5bmMgY29tcGxldGVzLgorCQkJCQkgICAgKi8KKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfYmFycmllcjsKKworCXN0cnVjdCBwb29sX2luZm8JKnBvb2xpbmZvOworCisJc3RydWN0IHBhZ2UJCSp0bXBwYWdlOworCisJbWVtcG9vbF90ICpyMWJpb19wb29sOworCW1lbXBvb2xfdCAqcjFidWZfcG9vbDsKK307CisKK3R5cGVkZWYgc3RydWN0IHIxX3ByaXZhdGVfZGF0YV9zIGNvbmZfdDsKKworLyoKKyAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCisgKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgorICovCisjZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgoY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQorCisvKgorICogdGhpcyBpcyBvdXIgJ3ByaXZhdGUnIFJBSUQxIGJpby4KKyAqCisgKiBpdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGtpbmQgb2YgSU8gb3BlcmF0aW9ucyB3ZXJlIHN0YXJ0ZWQKKyAqIGZvciB0aGlzIFJBSUQxIG9wZXJhdGlvbiwgYW5kIGFib3V0IHRoZWlyIHN0YXR1czoKKyAqLworCitzdHJ1Y3QgcjFiaW9fcyB7CisJYXRvbWljX3QJCXJlbWFpbmluZzsgLyogJ2hhdmUgd2UgZmluaXNoZWQnIGNvdW50LAorCQkJCQkgICAgKiB1c2VkIGZyb20gSVJRIGhhbmRsZXJzCisJCQkJCSAgICAqLworCWF0b21pY190CQliZWhpbmRfcmVtYWluaW5nOyAvKiBudW1iZXIgb2Ygd3JpdGUtYmVoaW5kIGlvcyByZW1haW5pbmcKKwkJCQkJCSAqIGluIHRoaXMgQmVoaW5kSU8gcmVxdWVzdAorCQkJCQkJICovCisJc2VjdG9yX3QJCXNlY3RvcjsKKwlpbnQJCQlzZWN0b3JzOworCXVuc2lnbmVkIGxvbmcJCXN0YXRlOworCW1kZGV2X3QJCQkqbWRkZXY7CisJLyoKKwkgKiBvcmlnaW5hbCBiaW8gZ29pbmcgdG8gL2Rldi9tZHgKKwkgKi8KKwlzdHJ1Y3QgYmlvCQkqbWFzdGVyX2JpbzsKKwkvKgorCSAqIGlmIHRoZSBJTyBpcyBpbiBSRUFEIGRpcmVjdGlvbiwgdGhlbiB0aGlzIGlzIHdoZXJlIHdlIHJlYWQKKwkgKi8KKwlpbnQJCQlyZWFkX2Rpc2s7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7CisJc3RydWN0IGJpdG1hcF91cGRhdGUJKmJpdG1hcF91cGRhdGU7CisJLyoKKwkgKiBpZiB0aGUgSU8gaXMgaW4gV1JJVEUgZGlyZWN0aW9uLCB0aGVuIG11bHRpcGxlIGJpb3MgYXJlIHVzZWQuCisJICogV2UgY2hvb3NlIHRoZSBudW1iZXIgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQuCisJICovCisJc3RydWN0IGJpbwkJKmJpb3NbMF07CisJLyogRE8gTk9UIFBVVCBBTlkgTkVXIEZJRUxEUyBIRVJFIC0gYmlvcyBhcnJheSBpcyBjb250aWd1b3VzbHkgYWxsb2NlZCovCit9OworCisvKiB3aGVuIHdlIGdldCBhIHJlYWQgZXJyb3Igb24gYSByZWFkLW9ubHkgYXJyYXksIHdlIHJlZGlyZWN0IHRvIGFub3RoZXIKKyAqIGRldmljZSB3aXRob3V0IGZhaWxpbmcgdGhlIGZpcnN0IGRldmljZSwgb3IgdHJ5aW5nIHRvIG92ZXItd3JpdGUgdG8KKyAqIGNvcnJlY3QgdGhlIHJlYWQgZXJyb3IuICBUbyBrZWVwIHRyYWNrIG9mIGJhZCBibG9ja3Mgb24gYSBwZXItYmlvCisgKiBsZXZlbCwgd2Ugc3RvcmUgSU9fQkxPQ0tFRCBpbiB0aGUgYXBwcm9wcmlhdGUgJ2Jpb3MnIHBvaW50ZXIKKyAqLworI2RlZmluZSBJT19CTE9DS0VEICgoc3RydWN0IGJpbyopMSkKKworLyogYml0cyBmb3IgcjFiaW8uc3RhdGUgKi8KKyNkZWZpbmUJUjFCSU9fVXB0b2RhdGUJMAorI2RlZmluZQlSMUJJT19Jc1N5bmMJMQorI2RlZmluZQlSMUJJT19EZWdyYWRlZAkyCisjZGVmaW5lCVIxQklPX0JlaGluZElPCTMKKyNkZWZpbmUJUjFCSU9fQmFycmllcgk0CisjZGVmaW5lIFIxQklPX0JhcnJpZXJSZXRyeSA1CisvKiBGb3Igd3JpdGUtYmVoaW5kIHJlcXVlc3RzLCB3ZSBjYWxsIGJpX2VuZF9pbyB3aGVuCisgKiB0aGUgbGFzdCBub24td3JpdGUtYmVoaW5kIGRldmljZSBjb21wbGV0ZXMsIHByb3ZpZGluZworICogYW55IHdyaXRlIHdhcyBzdWNjZXNzZnVsLiAgT3RoZXJ3aXNlIHdlIGNhbGwgd2hlbgorICogYW55IHdyaXRlLWJlaGluZCB3cml0ZSBzdWNjZWVkcywgb3RoZXJ3aXNlIHdlIGNhbGwKKyAqIHdpdGggZmFpbHVyZSB3aGVuIGxhc3Qgd3JpdGUgY29tcGxldGVzIChhbmQgYWxsIGZhaWxlZCkuCisgKiBSZWNvcmQgdGhhdCBiaV9lbmRfaW8gd2FzIGNhbGxlZCB3aXRoIHRoaXMgZmxhZy4uLgorICovCisjZGVmaW5lCVIxQklPX1JldHVybmVkIDYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA3MzAxNjMxLi5lMjkzZDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTE4LDEwICsxOCwxMyBAQAogICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQxMC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCisjaW5jbHVkZSAicmFpZDEwLmgiCisjaW5jbHVkZSAiYml0bWFwLmgiCiAKIC8qCiAgKiBSQUlEMTAgcHJvdmlkZXMgYSBjb21iaW5hdGlvbiBvZiBSQUlEMCBhbmQgUkFJRDEgZnVuY3Rpb25hbGl0eS4KQEAgLTE2OTUsNyArMTY5OCw3IEBACiAJCQlyZXR1cm4gMDsKIAogIHNraXBwZWQ6Ci0JbWF4X3NlY3RvciA9IG1kZGV2LT5zaXplIDw8IDE7CisJbWF4X3NlY3RvciA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCW1heF9zZWN0b3IgPSBtZGRldi0+cmVzeW5jX21heF9zZWN0b3JzOwogCWlmIChzZWN0b3JfbnIgPj0gbWF4X3NlY3RvcikgewpAQCAtMjAyMCw2ICsyMDIzLDI1IEBACiAJZ290byBza2lwcGVkOwogfQogCitzdGF0aWMgc2VjdG9yX3QKK3JhaWQxMF9zaXplKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzLCBpbnQgcmFpZF9kaXNrcykKK3sKKwlzZWN0b3JfdCBzaXplOworCWNvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOworCisJaWYgKCFyYWlkX2Rpc2tzKQorCQlyYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CisJaWYgKCFzZWN0b3JzKQorCQlzZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOworCisJc2l6ZSA9IHNlY3RvcnMgPj4gY29uZi0+Y2h1bmtfc2hpZnQ7CisJc2VjdG9yX2RpdihzaXplLCBjb25mLT5mYXJfY29waWVzKTsKKwlzaXplID0gc2l6ZSAqIHJhaWRfZGlza3M7CisJc2VjdG9yX2RpdihzaXplLCBjb25mLT5uZWFyX2NvcGllcyk7CisKKwlyZXR1cm4gc2l6ZSA8PCBjb25mLT5jaHVua19zaGlmdDsKK30KKwogc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCiB7CiAJY29uZl90ICpjb25mOwpAQCAtMjA3Niw3ICsyMDk4LDcgQEAKIAljb25mLT5mYXJfb2Zmc2V0ID0gZm87CiAJY29uZi0+Y2h1bmtfbWFzayA9IChzZWN0b3JfdCkobWRkZXYtPmNodW5rX3NpemU+PjkpLTE7CiAJY29uZi0+Y2h1bmtfc2hpZnQgPSBmZnoofm1kZGV2LT5jaHVua19zaXplKSAtIDk7Ci0Jc2l6ZSA9IG1kZGV2LT5zaXplID4+IChjb25mLT5jaHVua19zaGlmdC0xKTsKKwlzaXplID0gbWRkZXYtPmRldl9zZWN0b3JzID4+IGNvbmYtPmNodW5rX3NoaWZ0OwogCXNlY3Rvcl9kaXYoc2l6ZSwgZmMpOwogCXNpemUgPSBzaXplICogY29uZi0+cmFpZF9kaXNrczsKIAlzZWN0b3JfZGl2KHNpemUsIG5jKTsKQEAgLTIwODksNyArMjExMSw3IEBACiAJICovCiAJc3RyaWRlICs9IGNvbmYtPnJhaWRfZGlza3MgLSAxOwogCXNlY3Rvcl9kaXYoc3RyaWRlLCBjb25mLT5yYWlkX2Rpc2tzKTsKLQltZGRldi0+c2l6ZSA9IHN0cmlkZSAgPDwgKGNvbmYtPmNodW5rX3NoaWZ0LTEpOworCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHN0cmlkZSA8PCBjb25mLT5jaHVua19zaGlmdDsKIAogCWlmIChmbykKIAkJc3RyaWRlID0gMTsKQEAgLTIxNzEsOCArMjE5Myw4IEBACiAJLyoKIAkgKiBPaywgZXZlcnl0aGluZyBpcyBqdXN0IGZpbmUgbm93CiAJICovCi0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBzaXplIDw8IGNvbmYtPmNodW5rX3NoaWZ0OwotCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSBzaXplIDw8IGNvbmYtPmNodW5rX3NoaWZ0OworCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCByYWlkMTBfc2l6ZShtZGRldiwgMCwgMCkpOworCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSByYWlkMTBfc2l6ZShtZGRldiwgMCwgMCk7CiAKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQxMF91bnBsdWc7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQxMF9jb25nZXN0ZWQ7CkBAIC0yMjA4LDYgKzIyMzAsOSBAQAogewogCWNvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwogCisJcmFpc2VfYmFycmllcihjb25mLCAwKTsKKwlsb3dlcl9iYXJyaWVyKGNvbmYpOworCiAJbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJbWRkZXYtPnRocmVhZCA9IE5VTEw7CiAJYmxrX3N5bmNfcXVldWUobWRkZXYtPnF1ZXVlKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCkBAIC0yMjU1LDYgKzIyODAsNyBAQAogCS5zcGFyZV9hY3RpdmUJPSByYWlkMTBfc3BhcmVfYWN0aXZlLAogCS5zeW5jX3JlcXVlc3QJPSBzeW5jX3JlcXVlc3QsCiAJLnF1aWVzY2UJPSByYWlkMTBfcXVpZXNjZSwKKwkuc2l6ZQkJPSByYWlkMTBfc2l6ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJhaWRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuaCBiL2RyaXZlcnMvbWQvcmFpZDEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0ZGJlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmgKQEAgLTAsMCArMSwxMjEgQEAKKyNpZm5kZWYgX1JBSUQxMF9ICisjZGVmaW5lIF9SQUlEMTBfSAorCit0eXBlZGVmIHN0cnVjdCBtaXJyb3JfaW5mbyBtaXJyb3JfaW5mb190OworCitzdHJ1Y3QgbWlycm9yX2luZm8geworCW1ka19yZGV2X3QJKnJkZXY7CisJc2VjdG9yX3QJaGVhZF9wb3NpdGlvbjsKK307CisKK3R5cGVkZWYgc3RydWN0IHIxMGJpb19zIHIxMGJpb190OworCitzdHJ1Y3QgcjEwX3ByaXZhdGVfZGF0YV9zIHsKKwltZGRldl90CQkJKm1kZGV2OworCW1pcnJvcl9pbmZvX3QJCSptaXJyb3JzOworCWludAkJCXJhaWRfZGlza3M7CisJc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7CisKKwkvKiBnZW9tZXRyeSAqLworCWludAkJCW5lYXJfY29waWVzOyAgLyogbnVtYmVyIG9mIGNvcGllcyBsYXllZCBvdXQgcmFpZDAgc3R5bGUgKi8KKwlpbnQgCQkJZmFyX2NvcGllczsgICAvKiBudW1iZXIgb2YgY29waWVzIGxheWVkIG91dAorCQkJCQkgICAgICAgKiBhdCBsYXJnZSBzdHJpZGVzIGFjcm9zcyBkcml2ZXMKKwkJCQkJICAgICAgICovCisJaW50CQkJZmFyX29mZnNldDsgICAvKiBmYXJfY29waWVzIGFyZSBvZmZzZXQgYnkgMSBzdHJpcGUKKwkJCQkJICAgICAgICogaW5zdGVhZCBvZiBtYW55CisJCQkJCSAgICAgICAqLworCWludAkJCWNvcGllczsJICAgICAgLyogbmVhcl9jb3BpZXMgKiBmYXJfY29waWVzLgorCQkJCQkgICAgICAgKiBtdXN0IGJlIDw9IHJhaWRfZGlza3MKKwkJCQkJICAgICAgICovCisJc2VjdG9yX3QJCXN0cmlkZTsJICAgICAgLyogZGlzdGFuY2UgYmV0d2VlbiBmYXIgY29waWVzLgorCQkJCQkgICAgICAgKiBUaGlzIGlzIHNpemUgLyBmYXJfY29waWVzIHVubGVzcworCQkJCQkgICAgICAgKiBmYXJfb2Zmc2V0LCBpbiB3aGljaCBjYXNlIGl0IGlzCisJCQkJCSAgICAgICAqIDEgc3RyaXBlLgorCQkJCQkgICAgICAgKi8KKworCWludCBjaHVua19zaGlmdDsgLyogc2hpZnQgZnJvbSBjaHVua3MgdG8gc2VjdG9ycyAqLworCXNlY3Rvcl90IGNodW5rX21hc2s7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7CisJLyogcXVldWUgcGVuZGluZyB3cml0ZXMgYW5kIHN1Ym1pdCB0aGVtIG9uIHVucGx1ZyAqLworCXN0cnVjdCBiaW9fbGlzdAkJcGVuZGluZ19iaW9fbGlzdDsKKworCisJc3BpbmxvY2tfdAkJcmVzeW5jX2xvY2s7CisJaW50IG5yX3BlbmRpbmc7CisJaW50IG5yX3dhaXRpbmc7CisJaW50IG5yX3F1ZXVlZDsKKwlpbnQgYmFycmllcjsKKwlzZWN0b3JfdAkJbmV4dF9yZXN5bmM7CisJaW50CQkJZnVsbHN5bmM7ICAvKiBzZXQgdG8gMSBpZiBhIGZ1bGwgc3luYyBpcyBuZWVkZWQsCisJCQkJCSAgICAqIChmcmVzaCBkZXZpY2UgYWRkZWQpLgorCQkJCQkgICAgKiBDbGVhcmVkIHdoZW4gYSBzeW5jIGNvbXBsZXRlcy4KKwkJCQkJICAgICovCisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2JhcnJpZXI7CisKKwltZW1wb29sX3QgKnIxMGJpb19wb29sOworCW1lbXBvb2xfdCAqcjEwYnVmX3Bvb2w7CisJc3RydWN0IHBhZ2UJCSp0bXBwYWdlOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcjEwX3ByaXZhdGVfZGF0YV9zIGNvbmZfdDsKKworLyoKKyAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCisgKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgorICovCisjZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgoY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQorCisvKgorICogdGhpcyBpcyBvdXIgJ3ByaXZhdGUnIFJBSUQxMCBiaW8uCisgKgorICogaXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBraW5kIG9mIElPIG9wZXJhdGlvbnMgd2VyZSBzdGFydGVkCisgKiBmb3IgdGhpcyBSQUlEMTAgb3BlcmF0aW9uLCBhbmQgYWJvdXQgdGhlaXIgc3RhdHVzOgorICovCisKK3N0cnVjdCByMTBiaW9fcyB7CisJYXRvbWljX3QJCXJlbWFpbmluZzsgLyogJ2hhdmUgd2UgZmluaXNoZWQnIGNvdW50LAorCQkJCQkgICAgKiB1c2VkIGZyb20gSVJRIGhhbmRsZXJzCisJCQkJCSAgICAqLworCXNlY3Rvcl90CQlzZWN0b3I7CS8qIHZpcnR1YWwgc2VjdG9yIG51bWJlciAqLworCWludAkJCXNlY3RvcnM7CisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CisJbWRkZXZfdAkJCSptZGRldjsKKwkvKgorCSAqIG9yaWdpbmFsIGJpbyBnb2luZyB0byAvZGV2L21keAorCSAqLworCXN0cnVjdCBiaW8JCSptYXN0ZXJfYmlvOworCS8qCisJICogaWYgdGhlIElPIGlzIGluIFJFQUQgZGlyZWN0aW9uLCB0aGVuIHRoaXMgaXMgd2hlcmUgd2UgcmVhZAorCSAqLworCWludAkJCXJlYWRfc2xvdDsKKworCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKKwkvKgorCSAqIGlmIHRoZSBJTyBpcyBpbiBXUklURSBkaXJlY3Rpb24sIHRoZW4gbXVsdGlwbGUgYmlvcyBhcmUgdXNlZCwKKwkgKiBvbmUgZm9yIGVhY2ggY29weS4KKwkgKiBXaGVuIHJlc3luY2luZyB3ZSBhbHNvIHVzZSBvbmUgZm9yIGVhY2ggY29weS4KKwkgKiBXaGVuIHJlY29uc3RydWN0aW5nLCB3ZSB1c2UgMiBiaW9zLCBvbmUgZm9yIHJlYWQsIG9uZSBmb3Igd3JpdGUuCisJICogV2UgY2hvb3NlIHRoZSBudW1iZXIgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQuCisJICovCisJc3RydWN0IHsKKwkJc3RydWN0IGJpbwkJKmJpbzsKKwkJc2VjdG9yX3QgYWRkcjsKKwkJaW50IGRldm51bTsKKwl9IGRldnNbMF07Cit9OworCisvKiB3aGVuIHdlIGdldCBhIHJlYWQgZXJyb3Igb24gYSByZWFkLW9ubHkgYXJyYXksIHdlIHJlZGlyZWN0IHRvIGFub3RoZXIKKyAqIGRldmljZSB3aXRob3V0IGZhaWxpbmcgdGhlIGZpcnN0IGRldmljZSwgb3IgdHJ5aW5nIHRvIG92ZXItd3JpdGUgdG8KKyAqIGNvcnJlY3QgdGhlIHJlYWQgZXJyb3IuICBUbyBrZWVwIHRyYWNrIG9mIGJhZCBibG9ja3Mgb24gYSBwZXItYmlvCisgKiBsZXZlbCwgd2Ugc3RvcmUgSU9fQkxPQ0tFRCBpbiB0aGUgYXBwcm9wcmlhdGUgJ2Jpb3MnIHBvaW50ZXIKKyAqLworI2RlZmluZSBJT19CTE9DS0VEICgoc3RydWN0IGJpbyopMSkKKworLyogYml0cyBmb3IgcjEwYmlvLnN0YXRlICovCisjZGVmaW5lCVIxMEJJT19VcHRvZGF0ZQkwCisjZGVmaW5lCVIxMEJJT19Jc1N5bmMJMQorI2RlZmluZQlSMTBCSU9fSXNSZWNvdmVyIDIKKyNkZWZpbmUJUjEwQklPX0RlZ3JhZGVkIDMKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGE1YmEwODAuLjNiYmM2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTQzLDExICs0MywxNCBAQAogICogbWlzcyBhbnkgYml0cy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgInJhaWQ2LmgiCi0KLSNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJyYWlkNS5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogCiAvKgogICogU3RyaXBlIGNhY2hlCkBAIC05MSwxMSArOTQsNiBAQAogCiAjZGVmaW5lIHByaW50a19ybChhcmdzLi4uKSAoKHZvaWQpIChwcmludGtfcmF0ZWxpbWl0KCkgJiYgcHJpbnRrKGFyZ3MpKSkKIAotI2lmICFSQUlENl9VU0VfRU1QVFlfWkVST19QQUdFCi0vKiBJbiAuYnNzIHNvIGl0J3MgemVyb2VkICovCi1jb25zdCBjaGFyIHJhaWQ2X2VtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOwotI2VuZGlmCi0KIC8qCiAgKiBXZSBtYWludGFpbiBhIGJpYXNlZCBjb3VudCBvZiBhY3RpdmUgc3RyaXBlcyBpbiB0aGUgYm90dG9tIDE2IGJpdHMgb2YKICAqIGJpX3BoeXNfc2VnbWVudHMsIGFuZCBhIGNvdW50IG9mIHByb2Nlc3NlZCBzdHJpcGVzIGluIHRoZSB1cHBlciAxNiBiaXRzCkBAIC0xMzAsMTIgKzEyOCw0MiBAQAogCWJpby0+YmlfcGh5c19zZWdtZW50cyA9IHJhaWQ1X2JpX3BoeXNfc2VnbWVudHMoYmlvKSB8fCAoY250IDw8IDE2KTsKIH0KIAorLyogRmluZCBmaXJzdCBkYXRhIGRpc2sgaW4gYSByYWlkNiBzdHJpcGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJhaWQ2X2QwKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCit7CisJaWYgKHNoLT5kZGZfbGF5b3V0KQorCQkvKiBkZGYgYWx3YXlzIHN0YXJ0IGZyb20gZmlyc3QgZGV2aWNlICovCisJCXJldHVybiAwOworCS8qIG1kIHN0YXJ0cyBqdXN0IGFmdGVyIFEgYmxvY2sgKi8KKwlpZiAoc2gtPnFkX2lkeCA9PSBzaC0+ZGlza3MgLSAxKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBzaC0+cWRfaWR4ICsgMTsKK30KIHN0YXRpYyBpbmxpbmUgaW50IHJhaWQ2X25leHRfZGlzayhpbnQgZGlzaywgaW50IHJhaWRfZGlza3MpCiB7CiAJZGlzaysrOwogCXJldHVybiAoZGlzayA8IHJhaWRfZGlza3MpID8gZGlzayA6IDA7CiB9CiAKKy8qIFdoZW4gd2Fsa2luZyB0aHJvdWdoIHRoZSBkaXNrcyBpbiBhIHJhaWQ1LCBzdGFydGluZyBhdCByYWlkNl9kMCwKKyAqIFdlIG5lZWQgdG8gbWFwIGVhY2ggZGlzayB0byBhICdzbG90Jywgd2hlcmUgdGhlIGRhdGEgZGlza3MgYXJlIHNsb3QKKyAqIDAgLi4gcmFpZF9kaXNrcy0zLCB0aGUgcGFyaXR5IGRpc2sgaXMgcmFpZF9kaXNrcy0yIGFuZCB0aGUgUSBkaXNrCisgKiBpcyByYWlkX2Rpc2tzLTEuICBUaGlzIGhlbHAgZG9lcyB0aGF0IG1hcHBpbmcuCisgKi8KK3N0YXRpYyBpbnQgcmFpZDZfaWR4X3RvX3Nsb3QoaW50IGlkeCwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCwKKwkJCSAgICAgaW50ICpjb3VudCwgaW50IHN5bmRyb21lX2Rpc2tzKQoreworCWludCBzbG90OworCisJaWYgKGlkeCA9PSBzaC0+cGRfaWR4KQorCQlyZXR1cm4gc3luZHJvbWVfZGlza3M7CisJaWYgKGlkeCA9PSBzaC0+cWRfaWR4KQorCQlyZXR1cm4gc3luZHJvbWVfZGlza3MgKyAxOworCXNsb3QgPSAoKmNvdW50KSsrOworCXJldHVybiBzbG90OworfQorCiBzdGF0aWMgdm9pZCByZXR1cm5faW8oc3RydWN0IGJpbyAqcmV0dXJuX2JpKQogewogCXN0cnVjdCBiaW8gKmJpID0gcmV0dXJuX2JpOwpAQCAtMTkzLDYgKzIyMSw3IEBACiAJCX0KIAl9CiB9CisKIHN0YXRpYyB2b2lkIHJlbGVhc2Vfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKQEAgLTI3MCw5ICsyOTksMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2soc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGkpOworc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2soc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGksIGludCBwcmV2aW91cyk7CitzdGF0aWMgdm9pZCBzdHJpcGVfc2V0X2lkeChzZWN0b3JfdCBzdHJpcGUsIHJhaWQ1X2NvbmZfdCAqY29uZiwgaW50IHByZXZpb3VzLAorCQkJICAgIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpOwogCi1zdGF0aWMgdm9pZCBpbml0X3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzZWN0b3JfdCBzZWN0b3IsIGludCBwZF9pZHgsIGludCBkaXNrcykKK3N0YXRpYyB2b2lkIGluaXRfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHNlY3Rvcl90IHNlY3RvciwgaW50IHByZXZpb3VzKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGk7CkBAIC0yODcsMTEgKzMxOCwxMiBAQAogCiAJcmVtb3ZlX2hhc2goc2gpOwogCisJc2gtPmdlbmVyYXRpb24gPSBjb25mLT5nZW5lcmF0aW9uIC0gcHJldmlvdXM7CisJc2gtPmRpc2tzID0gcHJldmlvdXMgPyBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzIDogY29uZi0+cmFpZF9kaXNrczsKIAlzaC0+c2VjdG9yID0gc2VjdG9yOwotCXNoLT5wZF9pZHggPSBwZF9pZHg7CisJc3RyaXBlX3NldF9pZHgoc2VjdG9yLCBjb25mLCBwcmV2aW91cywgc2gpOwogCXNoLT5zdGF0ZSA9IDA7CiAKLQlzaC0+ZGlza3MgPSBkaXNrczsKIAogCWZvciAoaSA9IHNoLT5kaXNrczsgaS0tOyApIHsKIAkJc3RydWN0IHI1ZGV2ICpkZXYgPSAmc2gtPmRldltpXTsKQEAgLTMwNSwxMiArMzM3LDEzIEBACiAJCQlCVUcoKTsKIAkJfQogCQlkZXYtPmZsYWdzID0gMDsKLQkJcmFpZDVfYnVpbGRfYmxvY2soc2gsIGkpOworCQlyYWlkNV9idWlsZF9ibG9jayhzaCwgaSwgcHJldmlvdXMpOwogCX0KIAlpbnNlcnRfaGFzaChjb25mLCBzaCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKl9fZmluZF9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mLCBzZWN0b3JfdCBzZWN0b3IsIGludCBkaXNrcykKK3N0YXRpYyBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKl9fZmluZF9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mLCBzZWN0b3JfdCBzZWN0b3IsCisJCQkJCSBzaG9ydCBnZW5lcmF0aW9uKQogewogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAJc3RydWN0IGhsaXN0X25vZGUgKmhuOwpAQCAtMzE4LDcgKzM1MSw3IEBACiAJQ0hFQ0tfREVWTE9DSygpOwogCXByX2RlYnVnKCJfX2ZpbmRfc3RyaXBlLCBzZWN0b3IgJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWN0b3IpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNoLCBobiwgc3RyaXBlX2hhc2goY29uZiwgc2VjdG9yKSwgaGFzaCkKLQkJaWYgKHNoLT5zZWN0b3IgPT0gc2VjdG9yICYmIHNoLT5kaXNrcyA9PSBkaXNrcykKKwkJaWYgKHNoLT5zZWN0b3IgPT0gc2VjdG9yICYmIHNoLT5nZW5lcmF0aW9uID09IGdlbmVyYXRpb24pCiAJCQlyZXR1cm4gc2g7CiAJcHJfZGVidWcoIl9fc3RyaXBlICVsbHUgbm90IGluIGNhY2hlXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXNlY3Rvcik7CiAJcmV0dXJuIE5VTEw7CkBAIC0zMjcsOCArMzYwLDkgQEAKIHN0YXRpYyB2b2lkIHVucGx1Z19zbGF2ZXMobWRkZXZfdCAqbWRkZXYpOwogc3RhdGljIHZvaWQgcmFpZDVfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKmdldF9hY3RpdmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZiwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgZGlza3MsCi0JCQkJCSAgICAgaW50IHBkX2lkeCwgaW50IG5vYmxvY2spCitzdGF0aWMgc3RydWN0IHN0cmlwZV9oZWFkICoKK2dldF9hY3RpdmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZiwgc2VjdG9yX3Qgc2VjdG9yLAorCQkgIGludCBwcmV2aW91cywgaW50IG5vYmxvY2spCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIApAQCAtMzQwLDcgKzM3NCw3IEBACiAJCXdhaXRfZXZlbnRfbG9ja19pcnEoY29uZi0+d2FpdF9mb3Jfc3RyaXBlLAogCQkJCSAgICBjb25mLT5xdWllc2NlID09IDAsCiAJCQkJICAgIGNvbmYtPmRldmljZV9sb2NrLCAvKiBub3RoaW5nICovKTsKLQkJc2ggPSBfX2ZpbmRfc3RyaXBlKGNvbmYsIHNlY3RvciwgZGlza3MpOworCQlzaCA9IF9fZmluZF9zdHJpcGUoY29uZiwgc2VjdG9yLCBjb25mLT5nZW5lcmF0aW9uIC0gcHJldmlvdXMpOwogCQlpZiAoIXNoKSB7CiAJCQlpZiAoIWNvbmYtPmluYWN0aXZlX2Jsb2NrZWQpCiAJCQkJc2ggPSBnZXRfZnJlZV9zdHJpcGUoY29uZik7CkBAIC0zNTgsMTAgKzM5MiwxMSBAQAogCQkJCQkpOwogCQkJCWNvbmYtPmluYWN0aXZlX2Jsb2NrZWQgPSAwOwogCQkJfSBlbHNlCi0JCQkJaW5pdF9zdHJpcGUoc2gsIHNlY3RvciwgcGRfaWR4LCBkaXNrcyk7CisJCQkJaW5pdF9zdHJpcGUoc2gsIHNlY3RvciwgcHJldmlvdXMpOwogCQl9IGVsc2UgewogCQkJaWYgKGF0b21pY19yZWFkKCZzaC0+Y291bnQpKSB7Ci0JCQkgIEJVR19PTighbGlzdF9lbXB0eSgmc2gtPmxydSkpOworCQkJCUJVR19PTighbGlzdF9lbXB0eSgmc2gtPmxydSkKKwkJCQkgICAgJiYgIXRlc3RfYml0KFNUUklQRV9FWFBBTkRJTkcsICZzaC0+c3RhdGUpKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKCF0ZXN0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKSkKIAkJCQkJYXRvbWljX2luYygmY29uZi0+YWN0aXZlX3N0cmlwZXMpOwpAQCAtODk1LDggKzkzMCwxMCBAQAogCXN0cnVjdCBrbWVtX2NhY2hlICpzYzsKIAlpbnQgZGV2cyA9IGNvbmYtPnJhaWRfZGlza3M7CiAKLQlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sICJyYWlkNS0lcyIsIG1kbmFtZShjb25mLT5tZGRldikpOwotCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVsxXSwgInJhaWQ1LSVzLWFsdCIsIG1kbmFtZShjb25mLT5tZGRldikpOworCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVswXSwKKwkJInJhaWQlZC0lcyIsIGNvbmYtPmxldmVsLCBtZG5hbWUoY29uZi0+bWRkZXYpKTsKKwlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMV0sCisJCSJyYWlkJWQtJXMtYWx0IiwgY29uZi0+bGV2ZWwsIG1kbmFtZShjb25mLT5tZGRldikpOwogCWNvbmYtPmFjdGl2ZV9uYW1lID0gMDsKIAlzYyA9IGttZW1fY2FjaGVfY3JlYXRlKGNvbmYtPmNhY2hlX25hbWVbY29uZi0+YWN0aXZlX25hbWVdLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpKyhkZXZzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpLApAQCAtOTExLDcgKzk0OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRQogc3RhdGljIGludCByZXNpemVfc3RyaXBlcyhyYWlkNV9jb25mX3QgKmNvbmYsIGludCBuZXdzaXplKQogewogCS8qIE1ha2UgYWxsIHRoZSBzdHJpcGVzIGFibGUgdG8gaG9sZCAnbmV3c2l6ZScgZGV2aWNlcy4KQEAgLTEwMzYsNyArMTA3Miw2IEBACiAJY29uZi0+cG9vbF9zaXplID0gbmV3c2l6ZTsKIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgZHJvcF9vbmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKQEAgLTEwNjYsNyArMTEwMSw3IEBACiAKIHN0YXRpYyB2b2lkIHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Qoc3RydWN0IGJpbyAqIGJpLCBpbnQgZXJyb3IpCiB7Ci0gCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBiaS0+YmlfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoID0gYmktPmJpX3ByaXZhdGU7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3MsIGk7CiAJaW50IHVwdG9kYXRlID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmktPmJpX2ZsYWdzKTsKQEAgLTExNDgsNyArMTE4Myw3IEBACiAKIHN0YXRpYyB2b2lkIHJhaWQ1X2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpLCBpbnQgZXJyb3IpCiB7Ci0gCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBiaS0+YmlfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoID0gYmktPmJpX3ByaXZhdGU7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3MsIGk7CiAJaW50IHVwdG9kYXRlID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmktPmJpX2ZsYWdzKTsKQEAgLTExNzYsOSArMTIxMSw5IEBACiB9CiAKIAotc3RhdGljIHNlY3Rvcl90IGNvbXB1dGVfYmxvY2tucihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSk7CitzdGF0aWMgc2VjdG9yX3QgY29tcHV0ZV9ibG9ja25yKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpLCBpbnQgcHJldmlvdXMpOwogCQotc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2soc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGkpCitzdGF0aWMgdm9pZCByYWlkNV9idWlsZF9ibG9jayhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSwgaW50IHByZXZpb3VzKQogewogCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07CiAKQEAgLTExOTQsNyArMTIyOSw3IEBACiAJZGV2LT5yZXEuYmlfcHJpdmF0ZSA9IHNoOwogCiAJZGV2LT5mbGFncyA9IDA7Ci0JZGV2LT5zZWN0b3IgPSBjb21wdXRlX2Jsb2NrbnIoc2gsIGkpOworCWRldi0+c2VjdG9yID0gY29tcHV0ZV9ibG9ja25yKHNoLCBpLCBwcmV2aW91cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVycm9yKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KQpAQCAtMTIyNywxNSArMTI2MiwyMyBAQAogICogSW5wdXQ6IGEgJ2JpZycgc2VjdG9yIG51bWJlciwKICAqIE91dHB1dDogaW5kZXggb2YgdGhlIGRhdGEgYW5kIHBhcml0eSBkaXNrLCBhbmQgdGhlIHNlY3RvciAjIGluIHRoZW0uCiAgKi8KLXN0YXRpYyBzZWN0b3JfdCByYWlkNV9jb21wdXRlX3NlY3RvcihzZWN0b3JfdCByX3NlY3RvciwgdW5zaWduZWQgaW50IHJhaWRfZGlza3MsCi0JCQl1bnNpZ25lZCBpbnQgZGF0YV9kaXNrcywgdW5zaWduZWQgaW50ICogZGRfaWR4LAotCQkJdW5zaWduZWQgaW50ICogcGRfaWR4LCByYWlkNV9jb25mX3QgKmNvbmYpCitzdGF0aWMgc2VjdG9yX3QgcmFpZDVfY29tcHV0ZV9zZWN0b3IocmFpZDVfY29uZl90ICpjb25mLCBzZWN0b3JfdCByX3NlY3RvciwKKwkJCQkgICAgIGludCBwcmV2aW91cywgaW50ICpkZF9pZHgsCisJCQkJICAgICBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCWxvbmcgc3RyaXBlOwogCXVuc2lnbmVkIGxvbmcgY2h1bmtfbnVtYmVyOwogCXVuc2lnbmVkIGludCBjaHVua19vZmZzZXQ7CisJaW50IHBkX2lkeCwgcWRfaWR4OworCWludCBkZGZfbGF5b3V0ID0gMDsKIAlzZWN0b3JfdCBuZXdfc2VjdG9yOwotCWludCBzZWN0b3JzX3Blcl9jaHVuayA9IGNvbmYtPmNodW5rX3NpemUgPj4gOTsKKwlpbnQgYWxnb3JpdGhtID0gcHJldmlvdXMgPyBjb25mLT5wcmV2X2FsZ28KKwkJCQkgOiBjb25mLT5hbGdvcml0aG07CisJaW50IHNlY3RvcnNfcGVyX2NodW5rID0gcHJldmlvdXMgPyAoY29uZi0+cHJldl9jaHVuayA+PiA5KQorCQkJCQkgOiAoY29uZi0+Y2h1bmtfc2l6ZSA+PiA5KTsKKwlpbnQgcmFpZF9kaXNrcyA9IHByZXZpb3VzID8gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcworCQkJCSAgOiBjb25mLT5yYWlkX2Rpc2tzOworCWludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAogCS8qIEZpcnN0IGNvbXB1dGUgdGhlIGluZm9ybWF0aW9uIG9uIHRoaXMgc2VjdG9yICovCiAKQEAgLTEyNTksNjggKzEzMDIsMTcwIEBACiAJLyoKIAkgKiBTZWxlY3QgdGhlIHBhcml0eSBkaXNrIGJhc2VkIG9uIHRoZSB1c2VyIHNlbGVjdGVkIGFsZ29yaXRobS4KIAkgKi8KKwlwZF9pZHggPSBxZF9pZHggPSB+MDsKIAlzd2l0Y2goY29uZi0+bGV2ZWwpIHsKIAljYXNlIDQ6Ci0JCSpwZF9pZHggPSBkYXRhX2Rpc2tzOworCQlwZF9pZHggPSBkYXRhX2Rpc2tzOwogCQlicmVhazsKIAljYXNlIDU6Ci0JCXN3aXRjaCAoY29uZi0+YWxnb3JpdGhtKSB7CisJCXN3aXRjaCAoYWxnb3JpdGhtKSB7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQzoKLQkJCSpwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCWlmICgqZGRfaWR4ID49ICpwZF9pZHgpCisJCQlwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCWlmICgqZGRfaWR4ID49IHBkX2lkeCkKIAkJCQkoKmRkX2lkeCkrKzsKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOgotCQkJKnBkX2lkeCA9IHN0cmlwZSAlIHJhaWRfZGlza3M7Ci0JCQlpZiAoKmRkX2lkeCA+PSAqcGRfaWR4KQorCQkJcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCWlmICgqZGRfaWR4ID49IHBkX2lkeCkKIAkJCQkoKmRkX2lkeCkrKzsKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQzoKLQkJCSpwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCSpkZF9pZHggPSAoKnBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCSpkZF9pZHggPSAocGRfaWR4ICsgMSArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCSpkZF9pZHggPSAoKnBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlwZF9pZHggPSBzdHJpcGUgJSByYWlkX2Rpc2tzOworCQkJKmRkX2lkeCA9IChwZF9pZHggKyAxICsgKmRkX2lkeCkgJSByYWlkX2Rpc2tzOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wOgorCQkJcGRfaWR4ID0gMDsKKwkJCSgqZGRfaWR4KSsrOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgorCQkJcGRfaWR4ID0gZGF0YV9kaXNrczsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAotCQkJCWNvbmYtPmFsZ29yaXRobSk7CisJCQkJYWxnb3JpdGhtKTsKKwkJCUJVRygpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgNjoKIAotCQkvKioqKiBGSVggVEhJUyAqKioqLwotCQlzd2l0Y2ggKGNvbmYtPmFsZ29yaXRobSkgeworCQlzd2l0Y2ggKGFsZ29yaXRobSkgewogCQljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gcmFpZF9kaXNrcyAtIDEgLSAoc3RyaXBlICUgcmFpZF9kaXNrcyk7Ci0JCQlpZiAoKnBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpCi0JCQkJKCpkZF9pZHgpKys7IAkvKiBRIEQgRCBEIFAgKi8KLQkJCWVsc2UgaWYgKCpkZF9pZHggPj0gKnBkX2lkeCkKKwkJCXBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKHN0cmlwZSAlIHJhaWRfZGlza3MpOworCQkJcWRfaWR4ID0gcGRfaWR4ICsgMTsKKwkJCWlmIChwZF9pZHggPT0gcmFpZF9kaXNrcy0xKSB7CisJCQkJKCpkZF9pZHgpKys7CS8qIFEgRCBEIEQgUCAqLworCQkJCXFkX2lkeCA9IDA7CisJCQl9IGVsc2UgaWYgKCpkZF9pZHggPj0gcGRfaWR4KQogCQkJCSgqZGRfaWR4KSArPSAyOyAvKiBEIEQgUCBRIEQgKi8KIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOgotCQkJKnBkX2lkeCA9IHN0cmlwZSAlIHJhaWRfZGlza3M7Ci0JCQlpZiAoKnBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpCi0JCQkJKCpkZF9pZHgpKys7IAkvKiBRIEQgRCBEIFAgKi8KLQkJCWVsc2UgaWYgKCpkZF9pZHggPj0gKnBkX2lkeCkKKwkJCXBkX2lkeCA9IHN0cmlwZSAlIHJhaWRfZGlza3M7CisJCQlxZF9pZHggPSBwZF9pZHggKyAxOworCQkJaWYgKHBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpIHsKKwkJCQkoKmRkX2lkeCkrKzsJLyogUSBEIEQgRCBQICovCisJCQkJcWRfaWR4ID0gMDsKKwkJCX0gZWxzZSBpZiAoKmRkX2lkeCA+PSBwZF9pZHgpCiAJCQkJKCpkZF9pZHgpICs9IDI7IC8qIEQgRCBQIFEgRCAqLwogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDOgotCQkJKnBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKHN0cmlwZSAlIHJhaWRfZGlza3MpOwotCQkJKmRkX2lkeCA9ICgqcGRfaWR4ICsgMiArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKKwkJCXBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKHN0cmlwZSAlIHJhaWRfZGlza3MpOworCQkJcWRfaWR4ID0gKHBkX2lkeCArIDEpICUgcmFpZF9kaXNrczsKKwkJCSpkZF9pZHggPSAocGRfaWR4ICsgMiArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCSpkZF9pZHggPSAoKnBkX2lkeCArIDIgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlwZF9pZHggPSBzdHJpcGUgJSByYWlkX2Rpc2tzOworCQkJcWRfaWR4ID0gKHBkX2lkeCArIDEpICUgcmFpZF9kaXNrczsKKwkJCSpkZF9pZHggPSAocGRfaWR4ICsgMiArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKIAkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wOgorCQkJcGRfaWR4ID0gMDsKKwkJCXFkX2lkeCA9IDE7CisJCQkoKmRkX2lkeCkgKz0gMjsKKwkJCWJyZWFrOworCQljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKKwkJCXBkX2lkeCA9IGRhdGFfZGlza3M7CisJCQlxZF9pZHggPSBkYXRhX2Rpc2tzICsgMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX1pFUk9fUkVTVEFSVDoKKwkJCS8qIEV4YWN0bHkgdGhlIHNhbWUgYXMgUklHSFRfQVNZTU1FVFJJQywgYnV0IG9yCisJCQkgKiBvZiBibG9ja3MgZm9yIGNvbXB1dGluZyBRIGlzIGRpZmZlcmVudC4KKwkJCSAqLworCQkJcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCXFkX2lkeCA9IHBkX2lkeCArIDE7CisJCQlpZiAocGRfaWR4ID09IHJhaWRfZGlza3MtMSkgeworCQkJCSgqZGRfaWR4KSsrOwkvKiBRIEQgRCBEIFAgKi8KKwkJCQlxZF9pZHggPSAwOworCQkJfSBlbHNlIGlmICgqZGRfaWR4ID49IHBkX2lkeCkKKwkJCQkoKmRkX2lkeCkgKz0gMjsgLyogRCBEIFAgUSBEICovCisJCQlkZGZfbGF5b3V0ID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX05fUkVTVEFSVDoKKwkJCS8qIFNhbWUgYSBsZWZ0X2FzeW1tZXRyaWMsIGJ5IGZpcnN0IHN0cmlwZSBpcworCQkJICogRCBEIEQgUCBRICByYXRoZXIgdGhhbgorCQkJICogUSBEIEQgRCBQCisJCQkgKi8KKwkJCXBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKChzdHJpcGUgKyAxKSAlIHJhaWRfZGlza3MpOworCQkJcWRfaWR4ID0gcGRfaWR4ICsgMTsKKwkJCWlmIChwZF9pZHggPT0gcmFpZF9kaXNrcy0xKSB7CisJCQkJKCpkZF9pZHgpKys7CS8qIFEgRCBEIEQgUCAqLworCQkJCXFkX2lkeCA9IDA7CisJCQl9IGVsc2UgaWYgKCpkZF9pZHggPj0gcGRfaWR4KQorCQkJCSgqZGRfaWR4KSArPSAyOyAvKiBEIEQgUCBRIEQgKi8KKwkJCWRkZl9sYXlvdXQgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUk9UQVRJTkdfTl9DT05USU5VRToKKwkJCS8qIFNhbWUgYXMgbGVmdF9zeW1tZXRyaWMgYnV0IFEgaXMgYmVmb3JlIFAgKi8KKwkJCXBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKHN0cmlwZSAlIHJhaWRfZGlza3MpOworCQkJcWRfaWR4ID0gKHBkX2lkeCArIHJhaWRfZGlza3MgLSAxKSAlIHJhaWRfZGlza3M7CisJCQkqZGRfaWR4ID0gKHBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlkZGZfbGF5b3V0ID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182OgorCQkJLyogUkFJRDUgbGVmdF9hc3ltbWV0cmljLCB3aXRoIFEgb24gbGFzdCBkZXZpY2UgKi8KKwkJCXBkX2lkeCA9IGRhdGFfZGlza3MgLSBzdHJpcGUgJSAocmFpZF9kaXNrcy0xKTsKKwkJCWlmICgqZGRfaWR4ID49IHBkX2lkeCkKKwkJCQkoKmRkX2lkeCkrKzsKKwkJCXFkX2lkeCA9IHJhaWRfZGlza3MgLSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182OgorCQkJcGRfaWR4ID0gc3RyaXBlICUgKHJhaWRfZGlza3MtMSk7CisJCQlpZiAoKmRkX2lkeCA+PSBwZF9pZHgpCisJCQkJKCpkZF9pZHgpKys7CisJCQlxZF9pZHggPSByYWlkX2Rpc2tzIC0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDXzY6CisJCQlwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgKHJhaWRfZGlza3MtMSk7CisJCQkqZGRfaWR4ID0gKHBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIChyYWlkX2Rpc2tzLTEpOworCQkJcWRfaWR4ID0gcmFpZF9kaXNrcyAtIDE7CisJCQlicmVhazsKKworCQljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUNfNjoKKwkJCXBkX2lkeCA9IHN0cmlwZSAlIChyYWlkX2Rpc2tzLTEpOworCQkJKmRkX2lkeCA9IChwZF9pZHggKyAxICsgKmRkX2lkeCkgJSAocmFpZF9kaXNrcy0xKTsKKwkJCXFkX2lkeCA9IHJhaWRfZGlza3MgLSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzBfNjoKKwkJCXBkX2lkeCA9IDA7CisJCQkoKmRkX2lkeCkrKzsKKwkJCXFkX2lkeCA9IHJhaWRfZGlza3MgLSAxOworCQkJYnJlYWs7CisKKwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fQ1JJVCAicmFpZDY6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKLQkJCSAgICAgICBjb25mLT5hbGdvcml0aG0pOworCQkJICAgICAgIGFsZ29yaXRobSk7CisJCQlCVUcoKTsKIAkJfQogCQlicmVhazsKIAl9CiAKKwlpZiAoc2gpIHsKKwkJc2gtPnBkX2lkeCA9IHBkX2lkeDsKKwkJc2gtPnFkX2lkeCA9IHFkX2lkeDsKKwkJc2gtPmRkZl9sYXlvdXQgPSBkZGZfbGF5b3V0OworCX0KIAkvKgogCSAqIEZpbmFsbHksIGNvbXB1dGUgdGhlIG5ldyBzZWN0b3IgbnVtYmVyCiAJICovCkBAIC0xMzI5LDE3ICsxNDc0LDIxIEBACiB9CiAKIAotc3RhdGljIHNlY3Rvcl90IGNvbXB1dGVfYmxvY2tucihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSkKK3N0YXRpYyBzZWN0b3JfdCBjb21wdXRlX2Jsb2NrbnIoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGksIGludCBwcmV2aW91cykKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCByYWlkX2Rpc2tzID0gc2gtPmRpc2tzOwogCWludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAlzZWN0b3JfdCBuZXdfc2VjdG9yID0gc2gtPnNlY3RvciwgY2hlY2s7Ci0JaW50IHNlY3RvcnNfcGVyX2NodW5rID0gY29uZi0+Y2h1bmtfc2l6ZSA+PiA5OworCWludCBzZWN0b3JzX3Blcl9jaHVuayA9IHByZXZpb3VzID8gKGNvbmYtPnByZXZfY2h1bmsgPj4gOSkKKwkJCQkJIDogKGNvbmYtPmNodW5rX3NpemUgPj4gOSk7CisJaW50IGFsZ29yaXRobSA9IHByZXZpb3VzID8gY29uZi0+cHJldl9hbGdvCisJCQkJIDogY29uZi0+YWxnb3JpdGhtOwogCXNlY3Rvcl90IHN0cmlwZTsKIAlpbnQgY2h1bmtfb2Zmc2V0OwotCWludCBjaHVua19udW1iZXIsIGR1bW15MSwgZHVtbXkyLCBkZF9pZHggPSBpOworCWludCBjaHVua19udW1iZXIsIGR1bW15MSwgZGRfaWR4ID0gaTsKIAlzZWN0b3JfdCByX3NlY3RvcjsKKwlzdHJ1Y3Qgc3RyaXBlX2hlYWQgc2gyOwogCiAKIAljaHVua19vZmZzZXQgPSBzZWN0b3JfZGl2KG5ld19zZWN0b3IsIHNlY3RvcnNfcGVyX2NodW5rKTsKQEAgLTEzNTEsNyArMTUwMCw3IEBACiAJc3dpdGNoKGNvbmYtPmxldmVsKSB7CiAJY2FzZSA0OiBicmVhazsKIAljYXNlIDU6Ci0JCXN3aXRjaCAoY29uZi0+YWxnb3JpdGhtKSB7CisJCXN3aXRjaCAoYWxnb3JpdGhtKSB7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQzoKIAkJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQzoKIAkJCWlmIChpID4gc2gtPnBkX2lkeCkKQEAgLTEzNjMsMTkgKzE1MTIsMjcgQEAKIAkJCQlpICs9IHJhaWRfZGlza3M7CiAJCQlpIC09IChzaC0+cGRfaWR4ICsgMSk7CiAJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzA6CisJCQlpIC09IDE7CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZX046CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKLQkJCSAgICAgICBjb25mLT5hbGdvcml0aG0pOworCQkJICAgICAgIGFsZ29yaXRobSk7CisJCQlCVUcoKTsKIAkJfQogCQlicmVhazsKIAljYXNlIDY6Ci0JCWlmIChpID09IHJhaWQ2X25leHRfZGlzayhzaC0+cGRfaWR4LCByYWlkX2Rpc2tzKSkKKwkJaWYgKGkgPT0gc2gtPnFkX2lkeCkKIAkJCXJldHVybiAwOyAvKiBJdCBpcyB0aGUgUSBkaXNrICovCi0JCXN3aXRjaCAoY29uZi0+YWxnb3JpdGhtKSB7CisJCXN3aXRjaCAoYWxnb3JpdGhtKSB7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQzoKIAkJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQzoKLQkJICAJaWYgKHNoLT5wZF9pZHggPT0gcmFpZF9kaXNrcy0xKQotCQkJCWktLTsgCS8qIFEgRCBEIEQgUCAqLworCQljYXNlIEFMR09SSVRITV9ST1RBVElOR19aRVJPX1JFU1RBUlQ6CisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX05fUkVTVEFSVDoKKwkJCWlmIChzaC0+cGRfaWR4ID09IHJhaWRfZGlza3MtMSkKKwkJCQlpLS07CS8qIFEgRCBEIEQgUCAqLwogCQkJZWxzZSBpZiAoaSA+IHNoLT5wZF9pZHgpCiAJCQkJaSAtPSAyOyAvKiBEIEQgUCBRIEQgKi8KIAkJCWJyZWFrOwpAQCAtMTM5MCw5ICsxNTQ3LDM1IEBACiAJCQkJaSAtPSAoc2gtPnBkX2lkeCArIDIpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wOgorCQkJaSAtPSAyOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgorCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX05fQ09OVElOVUU6CisJCQlpZiAoc2gtPnBkX2lkeCA9PSAwKQorCQkJCWktLTsJLyogUCBEIEQgRCBRICovCisJCQllbHNlIGlmIChpID4gc2gtPnBkX2lkeCkKKwkJCQlpIC09IDI7IC8qIEQgRCBRIFAgRCAqLworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182OgorCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDXzY6CisJCQlpZiAoaSA+IHNoLT5wZF9pZHgpCisJCQkJaS0tOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDXzY6CisJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQ182OgorCQkJaWYgKGkgPCBzaC0+cGRfaWR4KQorCQkJCWkgKz0gZGF0YV9kaXNrcyArIDE7CisJCQlpIC09IChzaC0+cGRfaWR4ICsgMSk7CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzBfNjoKKwkJCWkgLT0gMTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fQ1JJVCAicmFpZDY6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKLQkJCSAgICAgICBjb25mLT5hbGdvcml0aG0pOworCQkJICAgICAgIGFsZ29yaXRobSk7CisJCQlCVUcoKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xNDAwLDggKzE1ODMsMTAgQEAKIAljaHVua19udW1iZXIgPSBzdHJpcGUgKiBkYXRhX2Rpc2tzICsgaTsKIAlyX3NlY3RvciA9IChzZWN0b3JfdCljaHVua19udW1iZXIgKiBzZWN0b3JzX3Blcl9jaHVuayArIGNodW5rX29mZnNldDsKIAotCWNoZWNrID0gcmFpZDVfY29tcHV0ZV9zZWN0b3Iocl9zZWN0b3IsIHJhaWRfZGlza3MsIGRhdGFfZGlza3MsICZkdW1teTEsICZkdW1teTIsIGNvbmYpOwotCWlmIChjaGVjayAhPSBzaC0+c2VjdG9yIHx8IGR1bW15MSAhPSBkZF9pZHggfHwgZHVtbXkyICE9IHNoLT5wZF9pZHgpIHsKKwljaGVjayA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIHJfc2VjdG9yLAorCQkJCSAgICAgcHJldmlvdXMsICZkdW1teTEsICZzaDIpOworCWlmIChjaGVjayAhPSBzaC0+c2VjdG9yIHx8IGR1bW15MSAhPSBkZF9pZHggfHwgc2gyLnBkX2lkeCAhPSBzaC0+cGRfaWR4CisJCXx8IHNoMi5xZF9pZHggIT0gc2gtPnFkX2lkeCkgewogCQlwcmludGsoS0VSTl9FUlIgImNvbXB1dGVfYmxvY2tucjogbWFwIG5vdCBjb3JyZWN0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQ2OCwxNCArMTY1MywxNiBAQAogCiBzdGF0aWMgdm9pZCBjb21wdXRlX3Bhcml0eTYoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IG1ldGhvZCkKIHsKLQlyYWlkNl9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwotCWludCBpLCBwZF9pZHggPSBzaC0+cGRfaWR4LCBxZF9pZHgsIGQwX2lkeCwgZGlza3MgPSBzaC0+ZGlza3MsIGNvdW50OworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CisJaW50IGksIHBkX2lkeCwgcWRfaWR4LCBkMF9pZHgsIGRpc2tzID0gc2gtPmRpc2tzLCBjb3VudDsKKwlpbnQgc3luZHJvbWVfZGlza3MgPSBzaC0+ZGRmX2xheW91dCA/IGRpc2tzIDogKGRpc2tzIC0gMik7CiAJc3RydWN0IGJpbyAqY2hvc2VuOwogCS8qKioqIEZJWCBUSElTOiBUaGlzIGNvdWxkIGJlIHZlcnkgYmFkIGlmIGRpc2tzIGlzIGNsb3NlIHRvIDI1NiAqKioqLwotCXZvaWQgKnB0cnNbZGlza3NdOworCXZvaWQgKnB0cnNbc3luZHJvbWVfZGlza3MrMl07CiAKLQlxZF9pZHggPSByYWlkNl9uZXh0X2Rpc2socGRfaWR4LCBkaXNrcyk7Ci0JZDBfaWR4ID0gcmFpZDZfbmV4dF9kaXNrKHFkX2lkeCwgZGlza3MpOworCXBkX2lkeCA9IHNoLT5wZF9pZHg7CisJcWRfaWR4ID0gc2gtPnFkX2lkeDsKKwlkMF9pZHggPSByYWlkNl9kMChzaCk7CiAKIAlwcl9kZWJ1ZygiY29tcHV0ZV9wYXJpdHksIHN0cmlwZSAlbGx1LCBtZXRob2QgJWRcbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgbWV0aG9kKTsKQEAgLTE1MTMsMjQgKzE3MDAsMjkgQEAKIAkJCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsKIAkJfQogCi0vLwlzd2l0Y2gobWV0aG9kKSB7Ci0vLwljYXNlIFJFQ09OU1RSVUNUX1dSSVRFOgotLy8JY2FzZSBDSEVDS19QQVJJVFk6Ci0vLwljYXNlIFVQREFURV9QQVJJVFk6Ci0JCS8qIE5vdGUgdGhhdCB1bmxpa2UgUkFJRC01LCB0aGUgb3JkZXJpbmcgb2YgdGhlIGRpc2tzIG1hdHRlcnMgZ3JlYXRseS4gKi8KLQkJLyogRklYOiBJcyB0aGlzIG9yZGVyaW5nIG9mIGRyaXZlcyBldmVuIHJlbW90ZWx5IG9wdGltYWw/ICovCi0JCWNvdW50ID0gMDsKLQkJaSA9IGQwX2lkeDsKLQkJZG8gewotCQkJcHRyc1tjb3VudCsrXSA9IHBhZ2VfYWRkcmVzcyhzaC0+ZGV2W2ldLnBhZ2UpOwotCQkJaWYgKGNvdW50IDw9IGRpc2tzLTIgJiYgIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltpXS5mbGFncykpCi0JCQkJcHJpbnRrKCJibG9jayAlZC8lZCBub3QgdXB0b2RhdGUgb24gcGFyaXR5IGNhbGNcbiIsIGksY291bnQpOwotCQkJaSA9IHJhaWQ2X25leHRfZGlzayhpLCBkaXNrcyk7Ci0JCX0gd2hpbGUgKCBpICE9IGQwX2lkeCApOwotLy8JCWJyZWFrOwotLy8JfQorCS8qIE5vdGUgdGhhdCB1bmxpa2UgUkFJRC01LCB0aGUgb3JkZXJpbmcgb2YgdGhlIGRpc2tzIG1hdHRlcnMgZ3JlYXRseS4qLwogCi0JcmFpZDZfY2FsbC5nZW5fc3luZHJvbWUoZGlza3MsIFNUUklQRV9TSVpFLCBwdHJzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKKwkJcHRyc1tpXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCisJY291bnQgPSAwOworCWkgPSBkMF9pZHg7CisJZG8geworCQlpbnQgc2xvdCA9IHJhaWQ2X2lkeF90b19zbG90KGksIHNoLCAmY291bnQsIHN5bmRyb21lX2Rpc2tzKTsKKworCQlwdHJzW3Nsb3RdID0gcGFnZV9hZGRyZXNzKHNoLT5kZXZbaV0ucGFnZSk7CisJCWlmIChzbG90IDwgc3luZHJvbWVfZGlza3MgJiYKKwkJICAgICF0ZXN0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImJsb2NrICVkLyVkIG5vdCB1cHRvZGF0ZSAiCisJCQkgICAgICAgIm9uIHBhcml0eSBjYWxjXG4iLCBpLCBjb3VudCk7CisJCQlCVUcoKTsKKwkJfQorCisJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOworCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKKwlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOworCisJcmFpZDZfY2FsbC5nZW5fc3luZHJvbWUoc3luZHJvbWVfZGlza3MrMiwgU1RSSVBFX1NJWkUsIHB0cnMpOwogCiAJc3dpdGNoKG1ldGhvZCkgewogCWNhc2UgUkVDT05TVFJVQ1RfV1JJVEU6CkBAIC0xNTUyLDggKzE3NDQsNyBAQAogewogCWludCBpLCBjb3VudCwgZGlza3MgPSBzaC0+ZGlza3M7CiAJdm9pZCAqcHRyW01BWF9YT1JfQkxPQ0tTXSwgKmRlc3QsICpwOwotCWludCBwZF9pZHggPSBzaC0+cGRfaWR4OwotCWludCBxZF9pZHggPSByYWlkNl9uZXh0X2Rpc2socGRfaWR4LCBkaXNrcyk7CisJaW50IHFkX2lkeCA9IHNoLT5xZF9pZHg7CiAKIAlwcl9kZWJ1ZygiY29tcHV0ZV9ibG9ja18xLCBzdHJpcGUgJWxsdSwgaWR4ICVkXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IsIGRkX2lkeCk7CkBAIC0xNTg5LDYzICsxNzgwLDY1IEBACiBzdGF0aWMgdm9pZCBjb21wdXRlX2Jsb2NrXzIoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGRkX2lkeDEsIGludCBkZF9pZHgyKQogewogCWludCBpLCBjb3VudCwgZGlza3MgPSBzaC0+ZGlza3M7Ci0JaW50IHBkX2lkeCA9IHNoLT5wZF9pZHg7Ci0JaW50IHFkX2lkeCA9IHJhaWQ2X25leHRfZGlzayhwZF9pZHgsIGRpc2tzKTsKLQlpbnQgZDBfaWR4ID0gcmFpZDZfbmV4dF9kaXNrKHFkX2lkeCwgZGlza3MpOwotCWludCBmYWlsYSwgZmFpbGI7CisJaW50IHN5bmRyb21lX2Rpc2tzID0gc2gtPmRkZl9sYXlvdXQgPyBkaXNrcyA6IGRpc2tzLTI7CisJaW50IGQwX2lkeCA9IHJhaWQ2X2QwKHNoKTsKKwlpbnQgZmFpbGEgPSAtMSwgZmFpbGIgPSAtMTsKKwkvKioqKiBGSVggVEhJUzogVGhpcyBjb3VsZCBiZSB2ZXJ5IGJhZCBpZiBkaXNrcyBpcyBjbG9zZSB0byAyNTYgKioqKi8KKwl2b2lkICpwdHJzW3N5bmRyb21lX2Rpc2tzKzJdOwogCi0JLyogZmFpbGEgYW5kIGZhaWxiIGFyZSBkaXNrIG51bWJlcnMgcmVsYXRpdmUgdG8gZDBfaWR4ICovCi0JLyogcGRfaWR4IGJlY29tZSBkaXNrcy0yIGFuZCBxZF9pZHggYmVjb21lIGRpc2tzLTEgKi8KLQlmYWlsYSA9IChkZF9pZHgxIDwgZDBfaWR4KSA/IGRkX2lkeDErKGRpc2tzLWQwX2lkeCkgOiBkZF9pZHgxLWQwX2lkeDsKLQlmYWlsYiA9IChkZF9pZHgyIDwgZDBfaWR4KSA/IGRkX2lkeDIrKGRpc2tzLWQwX2lkeCkgOiBkZF9pZHgyLWQwX2lkeDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MgOyBpKyspCisJCXB0cnNbaV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwljb3VudCA9IDA7CisJaSA9IGQwX2lkeDsKKwlkbyB7CisJCWludCBzbG90ID0gcmFpZDZfaWR4X3RvX3Nsb3QoaSwgc2gsICZjb3VudCwgc3luZHJvbWVfZGlza3MpOworCisJCXB0cnNbc2xvdF0gPSBwYWdlX2FkZHJlc3Moc2gtPmRldltpXS5wYWdlKTsKKworCQlpZiAoaSA9PSBkZF9pZHgxKQorCQkJZmFpbGEgPSBzbG90OworCQlpZiAoaSA9PSBkZF9pZHgyKQorCQkJZmFpbGIgPSBzbG90OworCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKKwl9IHdoaWxlIChpICE9IGQwX2lkeCk7CisJQlVHX09OKGNvdW50ICE9IHN5bmRyb21lX2Rpc2tzKTsKIAogCUJVR19PTihmYWlsYSA9PSBmYWlsYik7CiAJaWYgKCBmYWlsYiA8IGZhaWxhICkgeyBpbnQgdG1wID0gZmFpbGE7IGZhaWxhID0gZmFpbGI7IGZhaWxiID0gdG1wOyB9CiAKIAlwcl9kZWJ1ZygiY29tcHV0ZV9ibG9ja18yLCBzdHJpcGUgJWxsdSwgaWR4ICVkLCVkICglZCwlZClcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgZGRfaWR4MSwgZGRfaWR4MiwgZmFpbGEsIGZhaWxiKTsKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgZGRfaWR4MSwgZGRfaWR4MiwKKwkJIGZhaWxhLCBmYWlsYik7CiAKLQlpZiAoIGZhaWxiID09IGRpc2tzLTEgKSB7CisJaWYgKGZhaWxiID09IHN5bmRyb21lX2Rpc2tzKzEpIHsKIAkJLyogUSBkaXNrIGlzIG9uZSBvZiB0aGUgbWlzc2luZyBkaXNrcyAqLwotCQlpZiAoIGZhaWxhID09IGRpc2tzLTIgKSB7CisJCWlmIChmYWlsYSA9PSBzeW5kcm9tZV9kaXNrcykgewogCQkJLyogTWlzc2luZyBQK1EsIGp1c3QgcmVjb21wdXRlICovCiAJCQljb21wdXRlX3Bhcml0eTYoc2gsIFVQREFURV9QQVJJVFkpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgewogCQkJLyogV2UncmUgbWlzc2luZyBEK1E7IHJlY29tcHV0ZSBEIGZyb20gUCAqLwotCQkJY29tcHV0ZV9ibG9ja18xKHNoLCAoZGRfaWR4MSA9PSBxZF9pZHgpID8gZGRfaWR4MiA6IGRkX2lkeDEsIDApOworCQkJY29tcHV0ZV9ibG9ja18xKHNoLCAoKGRkX2lkeDEgPT0gc2gtPnFkX2lkeCkgPworCQkJCQkgICAgIGRkX2lkeDIgOiBkZF9pZHgxKSwKKwkJCQkJMCk7CiAJCQljb21wdXRlX3Bhcml0eTYoc2gsIFVQREFURV9QQVJJVFkpOyAvKiBJcyB0aGlzIG5lY2Vzc2FyeT8gKi8KIAkJCXJldHVybjsKIAkJfQogCX0KIAotCS8qIFdlJ3JlIG1pc3NpbmcgRCtQIG9yIEQrRDsgYnVpbGQgcG9pbnRlciB0YWJsZSAqLwotCXsKLQkJLyoqKiogRklYIFRISVM6IFRoaXMgY291bGQgYmUgdmVyeSBiYWQgaWYgZGlza3MgaXMgY2xvc2UgdG8gMjU2ICoqKiovCi0JCXZvaWQgKnB0cnNbZGlza3NdOwotCi0JCWNvdW50ID0gMDsKLQkJaSA9IGQwX2lkeDsKLQkJZG8gewotCQkJcHRyc1tjb3VudCsrXSA9IHBhZ2VfYWRkcmVzcyhzaC0+ZGV2W2ldLnBhZ2UpOwotCQkJaSA9IHJhaWQ2X25leHRfZGlzayhpLCBkaXNrcyk7Ci0JCQlpZiAoaSAhPSBkZF9pZHgxICYmIGkgIT0gZGRfaWR4MiAmJgotCQkJICAgICF0ZXN0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpKQotCQkJCXByaW50aygiY29tcHV0ZV8yIHdpdGggbWlzc2luZyBibG9jayAlZC8lZFxuIiwgY291bnQsIGkpOwotCQl9IHdoaWxlICggaSAhPSBkMF9pZHggKTsKLQotCQlpZiAoIGZhaWxiID09IGRpc2tzLTIgKSB7Ci0JCQkvKiBXZSdyZSBtaXNzaW5nIEQrUC4gKi8KLQkJCXJhaWQ2X2RhdGFwX3JlY292KGRpc2tzLCBTVFJJUEVfU0laRSwgZmFpbGEsIHB0cnMpOwotCQl9IGVsc2UgewotCQkJLyogV2UncmUgbWlzc2luZyBEK0QuICovCi0JCQlyYWlkNl8yZGF0YV9yZWNvdihkaXNrcywgU1RSSVBFX1NJWkUsIGZhaWxhLCBmYWlsYiwgcHRycyk7Ci0JCX0KLQotCQkvKiBCb3RoIHRoZSBhYm92ZSB1cGRhdGUgYm90aCBtaXNzaW5nIGJsb2NrcyAqLwotCQlzZXRfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltkZF9pZHgxXS5mbGFncyk7Ci0JCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2RkX2lkeDJdLmZsYWdzKTsKKwkvKiBXZSdyZSBtaXNzaW5nIEQrUCBvciBEK0Q7ICovCisJaWYgKGZhaWxiID09IHN5bmRyb21lX2Rpc2tzKSB7CisJCS8qIFdlJ3JlIG1pc3NpbmcgRCtQLiAqLworCQlyYWlkNl9kYXRhcF9yZWNvdihzeW5kcm9tZV9kaXNrcysyLCBTVFJJUEVfU0laRSwgZmFpbGEsIHB0cnMpOworCX0gZWxzZSB7CisJCS8qIFdlJ3JlIG1pc3NpbmcgRCtELiAqLworCQlyYWlkNl8yZGF0YV9yZWNvdihzeW5kcm9tZV9kaXNrcysyLCBTVFJJUEVfU0laRSwgZmFpbGEsIGZhaWxiLAorCQkJCSAgcHRycyk7CiAJfQorCisJLyogQm90aCB0aGUgYWJvdmUgdXBkYXRlIGJvdGggbWlzc2luZyBibG9ja3MgKi8KKwlzZXRfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltkZF9pZHgxXS5mbGFncyk7CisJc2V0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbZGRfaWR4Ml0uZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTgwMCwxNyArMTk5MywyMSBAQAogCQltZW1jbXAoYSwgYSs0LCBTVFJJUEVfU0laRS00KT09MCk7CiB9CiAKLXN0YXRpYyBpbnQgc3RyaXBlX3RvX3BkaWR4KHNlY3Rvcl90IHN0cmlwZSwgcmFpZDVfY29uZl90ICpjb25mLCBpbnQgZGlza3MpCitzdGF0aWMgdm9pZCBzdHJpcGVfc2V0X2lkeChzZWN0b3JfdCBzdHJpcGUsIHJhaWQ1X2NvbmZfdCAqY29uZiwgaW50IHByZXZpb3VzLAorCQkJICAgIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7Ci0JaW50IHNlY3RvcnNfcGVyX2NodW5rID0gY29uZi0+Y2h1bmtfc2l6ZSA+PiA5OwotCWludCBwZF9pZHgsIGRkX2lkeDsKKwlpbnQgc2VjdG9yc19wZXJfY2h1bmsgPQorCQlwcmV2aW91cyA/IChjb25mLT5wcmV2X2NodW5rID4+IDkpCisJCQkgOiAoY29uZi0+Y2h1bmtfc2l6ZSA+PiA5KTsKKwlpbnQgZGRfaWR4OwogCWludCBjaHVua19vZmZzZXQgPSBzZWN0b3JfZGl2KHN0cmlwZSwgc2VjdG9yc19wZXJfY2h1bmspOworCWludCBkaXNrcyA9IHByZXZpb3VzID8gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA6IGNvbmYtPnJhaWRfZGlza3M7CiAKLQlyYWlkNV9jb21wdXRlX3NlY3RvcihzdHJpcGUgKiAoZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQpCisJcmFpZDVfY29tcHV0ZV9zZWN0b3IoY29uZiwKKwkJCSAgICAgc3RyaXBlICogKGRpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkKQogCQkJICAgICAqc2VjdG9yc19wZXJfY2h1bmsgKyBjaHVua19vZmZzZXQsCi0JCQkgICAgIGRpc2tzLCBkaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCwKLQkJCSAgICAgJmRkX2lkeCwgJnBkX2lkeCwgY29uZik7Ci0JcmV0dXJuIHBkX2lkeDsKKwkJCSAgICAgcHJldmlvdXMsCisJCQkgICAgICZkZF9pZHgsIHNoKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIxODEsNyArMjM3OCw3IEBACiAJCXN0cnVjdCByNl9zdGF0ZSAqcjZzLCBpbnQgZGlza3MpCiB7CiAJaW50IHJjdyA9IDAsIG11c3RfY29tcHV0ZSA9IDAsIHBkX2lkeCA9IHNoLT5wZF9pZHgsIGk7Ci0JaW50IHFkX2lkeCA9IHI2cy0+cWRfaWR4OworCWludCBxZF9pZHggPSBzaC0+cWRfaWR4OwogCWZvciAoaSA9IGRpc2tzOyBpLS07ICkgewogCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W2ldOwogCQkvKiBXb3VsZCBJIGhhdmUgdG8gcmVhZCB0aGlzIGJ1ZmZlciBmb3IgcmVjb25zdHJ1Y3Rfd3JpdGUgKi8KQEAgLTIzNzEsNyArMjU2OCw3IEBACiAJaW50IHVwZGF0ZV9wID0gMCwgdXBkYXRlX3EgPSAwOwogCXN0cnVjdCByNWRldiAqZGV2OwogCWludCBwZF9pZHggPSBzaC0+cGRfaWR4OwotCWludCBxZF9pZHggPSByNnMtPnFkX2lkeDsKKwlpbnQgcWRfaWR4ID0gc2gtPnFkX2lkeDsKIAogCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7CiAKQEAgLTI0NjcsMTcgKzI2NjQsMTQgQEAKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAljbGVhcl9iaXQoU1RSSVBFX0VYUEFORF9TT1VSQ0UsICZzaC0+c3RhdGUpOwogCWZvciAoaSA9IDA7IGkgPCBzaC0+ZGlza3M7IGkrKykKLQkJaWYgKGkgIT0gc2gtPnBkX2lkeCAmJiAoIXI2cyB8fCBpICE9IHI2cy0+cWRfaWR4KSkgewotCQkJaW50IGRkX2lkeCwgcGRfaWR4LCBqOworCQlpZiAoaSAhPSBzaC0+cGRfaWR4ICYmIGkgIT0gc2gtPnFkX2lkeCkgeworCQkJaW50IGRkX2lkeCwgajsKIAkJCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2gyOwogCi0JCQlzZWN0b3JfdCBibiA9IGNvbXB1dGVfYmxvY2tucihzaCwgaSk7Ci0JCQlzZWN0b3JfdCBzID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IoYm4sIGNvbmYtPnJhaWRfZGlza3MsCi0JCQkJCQljb25mLT5yYWlkX2Rpc2tzIC0KLQkJCQkJCWNvbmYtPm1heF9kZWdyYWRlZCwgJmRkX2lkeCwKLQkJCQkJCSZwZF9pZHgsIGNvbmYpOwotCQkJc2gyID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgcywgY29uZi0+cmFpZF9kaXNrcywKLQkJCQkJCXBkX2lkeCwgMSk7CisJCQlzZWN0b3JfdCBibiA9IGNvbXB1dGVfYmxvY2tucihzaCwgaSwgMSk7CisJCQlzZWN0b3JfdCBzID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IoY29uZiwgYm4sIDAsCisJCQkJCQkJICAmZGRfaWR4LCBOVUxMKTsKKwkJCXNoMiA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHMsIDAsIDEpOwogCQkJaWYgKHNoMiA9PSBOVUxMKQogCQkJCS8qIHNvIGZhciBvbmx5IHRoZSBlYXJseSBibG9ja3Mgb2YgdGhpcyBzdHJpcGUKIAkJCQkgKiBoYXZlIGJlZW4gcmVxdWVzdGVkLiAgV2hlbiBsYXRlciBibG9ja3MKQEAgLTI1MDAsOCArMjY5NCw3IEBACiAJCQlzZXRfYml0KFI1X1VQVE9EQVRFLCAmc2gyLT5kZXZbZGRfaWR4XS5mbGFncyk7CiAJCQlmb3IgKGogPSAwOyBqIDwgY29uZi0+cmFpZF9kaXNrczsgaisrKQogCQkJCWlmIChqICE9IHNoMi0+cGRfaWR4ICYmCi0JCQkJICAgICghcjZzIHx8IGogIT0gcmFpZDZfbmV4dF9kaXNrKHNoMi0+cGRfaWR4LAotCQkJCQkJCQkgc2gyLT5kaXNrcykpICYmCisJCQkJICAgICghcjZzIHx8IGogIT0gc2gyLT5xZF9pZHgpICYmCiAJCQkJICAgICF0ZXN0X2JpdChSNV9FeHBhbmRlZCwgJnNoMi0+ZGV2W2pdLmZsYWdzKSkKIAkJCQkJYnJlYWs7CiAJCQlpZiAoaiA9PSBjb25mLT5yYWlkX2Rpc2tzKSB7CkBAIC0yNzUwLDYgKzI5NDMsMjMgQEAKIAogCS8qIEZpbmlzaCByZWNvbnN0cnVjdCBvcGVyYXRpb25zIGluaXRpYXRlZCBieSB0aGUgZXhwYW5zaW9uIHByb2Nlc3MgKi8KIAlpZiAoc2gtPnJlY29uc3RydWN0X3N0YXRlID09IHJlY29uc3RydWN0X3N0YXRlX3Jlc3VsdCkgeworCQlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoMgorCQkJPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzaC0+c2VjdG9yLCAxLCAxKTsKKwkJaWYgKHNoMiAmJiB0ZXN0X2JpdChTVFJJUEVfRVhQQU5EX1NPVVJDRSwgJnNoMi0+c3RhdGUpKSB7CisJCQkvKiBzaCBjYW5ub3QgYmUgd3JpdHRlbiB1bnRpbCBzaDIgaGFzIGJlZW4gcmVhZC4KKwkJCSAqIHNvIGFycmFuZ2UgZm9yIHNoIHRvIGJlIGRlbGF5ZWQgYSBsaXR0bGUKKwkJCSAqLworCQkJc2V0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSk7CisJCQlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwKKwkJCQkJICAgICAgJnNoMi0+c3RhdGUpKQorCQkJCWF0b21pY19pbmMoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpOworCQkJcmVsZWFzZV9zdHJpcGUoc2gyKTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCWlmIChzaDIpCisJCQlyZWxlYXNlX3N0cmlwZShzaDIpOworCiAJCXNoLT5yZWNvbnN0cnVjdF9zdGF0ZSA9IHJlY29uc3RydWN0X3N0YXRlX2lkbGU7CiAJCWNsZWFyX2JpdChTVFJJUEVfRVhQQU5ESU5HLCAmc2gtPnN0YXRlKTsKIAkJZm9yIChpID0gY29uZi0+cmFpZF9kaXNrczsgaS0tOyApIHsKQEAgLTI3NjMsOCArMjk3Myw3IEBACiAJICAgICFzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUpIHsKIAkJLyogTmVlZCB0byB3cml0ZSBvdXQgYWxsIGJsb2NrcyBhZnRlciBjb21wdXRpbmcgcGFyaXR5ICovCiAJCXNoLT5kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7Ci0JCXNoLT5wZF9pZHggPSBzdHJpcGVfdG9fcGRpZHgoc2gtPnNlY3RvciwgY29uZiwKLQkJCWNvbmYtPnJhaWRfZGlza3MpOworCQlzdHJpcGVfc2V0X2lkeChzaC0+c2VjdG9yLCBjb25mLCAwLCBzaCk7CiAJCXNjaGVkdWxlX3JlY29uc3RydWN0aW9uNShzaCwgJnMsIDEsIDEpOwogCX0gZWxzZSBpZiAocy5leHBhbmRlZCAmJiAhc2gtPnJlY29uc3RydWN0X3N0YXRlICYmIHMubG9ja2VkID09IDApIHsKIAkJY2xlYXJfYml0KFNUUklQRV9FWFBBTkRfUkVBRFksICZzaC0+c3RhdGUpOwpAQCAtMjc5NiwyMCArMzAwNSwxOSBAQAogCiBzdGF0aWMgYm9vbCBoYW5kbGVfc3RyaXBlNihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2UpCiB7Ci0JcmFpZDZfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCBkaXNrcyA9IHNoLT5kaXNrczsKIAlzdHJ1Y3QgYmlvICpyZXR1cm5fYmkgPSBOVUxMOwotCWludCBpLCBwZF9pZHggPSBzaC0+cGRfaWR4OworCWludCBpLCBwZF9pZHggPSBzaC0+cGRfaWR4LCBxZF9pZHggPSBzaC0+cWRfaWR4OwogCXN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSBzOwogCXN0cnVjdCByNl9zdGF0ZSByNnM7CiAJc3RydWN0IHI1ZGV2ICpkZXYsICpwZGV2LCAqcWRldjsKIAltZGtfcmRldl90ICpibG9ja2VkX3JkZXYgPSBOVUxMOwogCi0JcjZzLnFkX2lkeCA9IHJhaWQ2X25leHRfZGlzayhwZF9pZHgsIGRpc2tzKTsKIAlwcl9kZWJ1ZygiaGFuZGxpbmcgc3RyaXBlICVsbHUsIHN0YXRlPSUjbHggY250PSVkLCAiCiAJCSJwZF9pZHg9JWQsIHFkX2lkeD0lZFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLCBzaC0+c3RhdGUsCi0JICAgICAgIGF0b21pY19yZWFkKCZzaC0+Y291bnQpLCBwZF9pZHgsIHI2cy5xZF9pZHgpOworCSAgICAgICBhdG9taWNfcmVhZCgmc2gtPmNvdW50KSwgcGRfaWR4LCBxZF9pZHgpOwogCW1lbXNldCgmcywgMCwgc2l6ZW9mKHMpKTsKIAogCXNwaW5fbG9jaygmc2gtPmxvY2spOwpAQCAtMjkyMCw5ICszMTI4LDkgQEAKIAlwZGV2ID0gJnNoLT5kZXZbcGRfaWR4XTsKIAlyNnMucF9mYWlsZWQgPSAocy5mYWlsZWQgPj0gMSAmJiByNnMuZmFpbGVkX251bVswXSA9PSBwZF9pZHgpCiAJCXx8IChzLmZhaWxlZCA+PSAyICYmIHI2cy5mYWlsZWRfbnVtWzFdID09IHBkX2lkeCk7Ci0JcWRldiA9ICZzaC0+ZGV2W3I2cy5xZF9pZHhdOwotCXI2cy5xX2ZhaWxlZCA9IChzLmZhaWxlZCA+PSAxICYmIHI2cy5mYWlsZWRfbnVtWzBdID09IHI2cy5xZF9pZHgpCi0JCXx8IChzLmZhaWxlZCA+PSAyICYmIHI2cy5mYWlsZWRfbnVtWzFdID09IHI2cy5xZF9pZHgpOworCXFkZXYgPSAmc2gtPmRldltxZF9pZHhdOworCXI2cy5xX2ZhaWxlZCA9IChzLmZhaWxlZCA+PSAxICYmIHI2cy5mYWlsZWRfbnVtWzBdID09IHFkX2lkeCkKKwkJfHwgKHMuZmFpbGVkID49IDIgJiYgcjZzLmZhaWxlZF9udW1bMV0gPT0gcWRfaWR4KTsKIAogCWlmICggcy53cml0dGVuICYmCiAJICAgICAoIHI2cy5wX2ZhaWxlZCB8fCAoKHRlc3RfYml0KFI1X0luc3luYywgJnBkZXYtPmZsYWdzKQpAQCAtMjk4MCwxMCArMzE4OCwyNiBAQAogCQl9CiAKIAlpZiAocy5leHBhbmRlZCAmJiB0ZXN0X2JpdChTVFJJUEVfRVhQQU5ESU5HLCAmc2gtPnN0YXRlKSkgeworCQlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoMgorCQkJPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzaC0+c2VjdG9yLCAxLCAxKTsKKwkJaWYgKHNoMiAmJiB0ZXN0X2JpdChTVFJJUEVfRVhQQU5EX1NPVVJDRSwgJnNoMi0+c3RhdGUpKSB7CisJCQkvKiBzaCBjYW5ub3QgYmUgd3JpdHRlbiB1bnRpbCBzaDIgaGFzIGJlZW4gcmVhZC4KKwkJCSAqIHNvIGFycmFuZ2UgZm9yIHNoIHRvIGJlIGRlbGF5ZWQgYSBsaXR0bGUKKwkJCSAqLworCQkJc2V0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSk7CisJCQlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwKKwkJCQkJICAgICAgJnNoMi0+c3RhdGUpKQorCQkJCWF0b21pY19pbmMoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpOworCQkJcmVsZWFzZV9zdHJpcGUoc2gyKTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCWlmIChzaDIpCisJCQlyZWxlYXNlX3N0cmlwZShzaDIpOworCiAJCS8qIE5lZWQgdG8gd3JpdGUgb3V0IGFsbCBibG9ja3MgYWZ0ZXIgY29tcHV0aW5nIFAmUSAqLwogCQlzaC0+ZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQlzaC0+cGRfaWR4ID0gc3RyaXBlX3RvX3BkaWR4KHNoLT5zZWN0b3IsIGNvbmYsCi0JCQkJCSAgICAgY29uZi0+cmFpZF9kaXNrcyk7CisJCXN0cmlwZV9zZXRfaWR4KHNoLT5zZWN0b3IsIGNvbmYsIDAsIHNoKTsKIAkJY29tcHV0ZV9wYXJpdHk2KHNoLCBSRUNPTlNUUlVDVF9XUklURSk7CiAJCWZvciAoaSA9IGNvbmYtPnJhaWRfZGlza3MgOyBpLS0gOyAgKSB7CiAJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJnNoLT5kZXZbaV0uZmxhZ3MpOwpAQCAtMzEzNCw2ICszMzU4LDggQEAKIAlpZiAoKGJ2bS0+YmlfcncgJiAxKSA9PSBXUklURSkKIAkJcmV0dXJuIGJpb3ZlYy0+YnZfbGVuOyAvKiBhbHdheXMgYWxsb3cgd3JpdGVzIHRvIGJlIG1lcmdlYWJsZSAqLwogCisJaWYgKG1kZGV2LT5uZXdfY2h1bmsgPCBtZGRldi0+Y2h1bmtfc2l6ZSkKKwkJY2h1bmtfc2VjdG9ycyA9IG1kZGV2LT5uZXdfY2h1bmsgPj4gOTsKIAltYXggPSAgKGNodW5rX3NlY3RvcnMgLSAoKHNlY3RvciAmIChjaHVua19zZWN0b3JzIC0gMSkpICsgYmlvX3NlY3RvcnMpKSA8PCA5OwogCWlmIChtYXggPCAwKSBtYXggPSAwOwogCWlmIChtYXggPD0gYmlvdmVjLT5idl9sZW4gJiYgYmlvX3NlY3RvcnMgPT0gMCkKQEAgLTMxNDksNiArMzM3NSw4IEBACiAJdW5zaWduZWQgaW50IGNodW5rX3NlY3RvcnMgPSBtZGRldi0+Y2h1bmtfc2l6ZSA+PiA5OwogCXVuc2lnbmVkIGludCBiaW9fc2VjdG9ycyA9IGJpby0+Ymlfc2l6ZSA+PiA5OwogCisJaWYgKG1kZGV2LT5uZXdfY2h1bmsgPCBtZGRldi0+Y2h1bmtfc2l6ZSkKKwkJY2h1bmtfc2VjdG9ycyA9IG1kZGV2LT5uZXdfY2h1bmsgPj4gOTsKIAlyZXR1cm4gIGNodW5rX3NlY3RvcnMgPj0KIAkJKChzZWN0b3IgJiAoY2h1bmtfc2VjdG9ycyAtIDEpKSArIGJpb19zZWN0b3JzKTsKIH0KQEAgLTMyNTUsOSArMzQ4Myw3IEBACiB7CiAJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7Ci0JY29uc3QgdW5zaWduZWQgaW50IHJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCWNvbnN0IHVuc2lnbmVkIGludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKLQl1bnNpZ25lZCBpbnQgZGRfaWR4LCBwZF9pZHg7CisJdW5zaWduZWQgaW50IGRkX2lkeDsKIAlzdHJ1Y3QgYmlvKiBhbGlnbl9iaTsKIAltZGtfcmRldl90ICpyZGV2OwogCkBAIC0zMjY2LDcgKzM0OTIsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJLyoKLSAJICogdXNlIGJpb19jbG9uZSB0byBtYWtlIGEgY29weSBvZiB0aGUgYmlvCisJICogdXNlIGJpb19jbG9uZSB0byBtYWtlIGEgY29weSBvZiB0aGUgYmlvCiAJICovCiAJYWxpZ25fYmkgPSBiaW9fY2xvbmUocmFpZF9iaW8sIEdGUF9OT0lPKTsKIAlpZiAoIWFsaWduX2JpKQpAQCAtMzI4MCwxMiArMzUwNiw5IEBACiAJLyoKIAkgKgljb21wdXRlIHBvc2l0aW9uCiAJICovCi0JYWxpZ25fYmktPmJpX3NlY3RvciA9ICByYWlkNV9jb21wdXRlX3NlY3RvcihyYWlkX2Jpby0+Ymlfc2VjdG9yLAotCQkJCQlyYWlkX2Rpc2tzLAotCQkJCQlkYXRhX2Rpc2tzLAotCQkJCQkmZGRfaWR4LAotCQkJCQkmcGRfaWR4LAotCQkJCQljb25mKTsKKwlhbGlnbl9iaS0+Ymlfc2VjdG9yID0gIHJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIHJhaWRfYmlvLT5iaV9zZWN0b3IsCisJCQkJCQkgICAgMCwKKwkJCQkJCSAgICAmZGRfaWR4LCBOVUxMKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2RkX2lkeF0ucmRldik7CkBAIC0zMzc3LDcgKzM2MDAsNyBAQAogewogCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOwogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwotCXVuc2lnbmVkIGludCBkZF9pZHgsIHBkX2lkeDsKKwlpbnQgZGRfaWR4OwogCXNlY3Rvcl90IG5ld19zZWN0b3I7CiAJc2VjdG9yX3QgbG9naWNhbF9zZWN0b3IsIGxhc3Rfc2VjdG9yOwogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CkBAIC0zNDAwLDcgKzM2MjMsNyBAQAogCWlmIChydyA9PSBSRUFEICYmCiAJICAgICBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IgJiYKIAkgICAgIGNodW5rX2FsaWduZWRfcmVhZChxLGJpKSkKLSAgICAgICAgICAgIAlyZXR1cm4gMDsKKwkJcmV0dXJuIDA7CiAKIAlsb2dpY2FsX3NlY3RvciA9IGJpLT5iaV9zZWN0b3IgJiB+KChzZWN0b3JfdClTVFJJUEVfU0VDVE9SUy0xKTsKIAlsYXN0X3NlY3RvciA9IGJpLT5iaV9zZWN0b3IgKyAoYmktPmJpX3NpemU+PjkpOwpAQCAtMzQxMCwyNiArMzYzMywzMSBAQAogCWZvciAoO2xvZ2ljYWxfc2VjdG9yIDwgbGFzdF9zZWN0b3I7IGxvZ2ljYWxfc2VjdG9yICs9IFNUUklQRV9TRUNUT1JTKSB7CiAJCURFRklORV9XQUlUKHcpOwogCQlpbnQgZGlza3MsIGRhdGFfZGlza3M7CisJCWludCBwcmV2aW91czsKIAogCXJldHJ5OgorCQlwcmV2aW91cyA9IDA7CisJCWRpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKIAkJcHJlcGFyZV90b193YWl0KCZjb25mLT53YWl0X2Zvcl9vdmVybGFwLCAmdywgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQlpZiAobGlrZWx5KGNvbmYtPmV4cGFuZF9wcm9ncmVzcyA9PSBNYXhTZWN0b3IpKQotCQkJZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQllbHNlIHsKLQkJCS8qIHNwaW5sb2NrIGlzIG5lZWRlZCBhcyBleHBhbmRfcHJvZ3Jlc3MgbWF5IGJlCisJCWlmICh1bmxpa2VseShjb25mLT5yZXNoYXBlX3Byb2dyZXNzICE9IE1heFNlY3RvcikpIHsKKwkJCS8qIHNwaW5sb2NrIGlzIG5lZWRlZCBhcyByZXNoYXBlX3Byb2dyZXNzIG1heSBiZQogCQkJICogNjRiaXQgb24gYSAzMmJpdCBwbGF0Zm9ybSwgYW5kIHNvIGl0IG1pZ2h0IGJlCiAJCQkgKiBwb3NzaWJsZSB0byBzZWUgYSBoYWxmLXVwZGF0ZWQgdmFsdWUKLQkJCSAqIE9mY291cnNlIGV4cGFuZF9wcm9ncmVzcyBjb3VsZCBjaGFuZ2UgYWZ0ZXIKKwkJCSAqIE9mY291cnNlIHJlc2hhcGVfcHJvZ3Jlc3MgY291bGQgY2hhbmdlIGFmdGVyCiAJCQkgKiB0aGUgbG9jayBpcyBkcm9wcGVkLCBzbyBvbmNlIHdlIGdldCBhIHJlZmVyZW5jZQogCQkJICogdG8gdGhlIHN0cmlwZSB0aGF0IHdlIHRoaW5rIGl0IGlzLCB3ZSB3aWxsIGhhdmUKIAkJCSAqIHRvIGNoZWNrIGFnYWluLgogCQkJICovCiAJCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7Ci0JCQlkaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7Ci0JCQlpZiAobG9naWNhbF9zZWN0b3IgPj0gY29uZi0+ZXhwYW5kX3Byb2dyZXNzKQorCQkJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDAKKwkJCSAgICA/IGxvZ2ljYWxfc2VjdG9yIDwgY29uZi0+cmVzaGFwZV9wcm9ncmVzcworCQkJICAgIDogbG9naWNhbF9zZWN0b3IgPj0gY29uZi0+cmVzaGFwZV9wcm9ncmVzcykgewogCQkJCWRpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKLQkJCWVsc2UgewotCQkJCWlmIChsb2dpY2FsX3NlY3RvciA+PSBjb25mLT5leHBhbmRfbG8pIHsKKwkJCQlwcmV2aW91cyA9IDE7CisJCQl9IGVsc2UgeworCQkJCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPCAwCisJCQkJICAgID8gbG9naWNhbF9zZWN0b3IgPCBjb25mLT5yZXNoYXBlX3NhZmUKKwkJCQkgICAgOiBsb2dpY2FsX3NlY3RvciA+PSBjb25mLT5yZXNoYXBlX3NhZmUpIHsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCQkJCXNjaGVkdWxlKCk7CiAJCQkJCWdvdG8gcmV0cnk7CkBAIC0zNDM5LDE1ICszNjY3LDE3IEBACiAJCX0KIAkJZGF0YV9kaXNrcyA9IGRpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkOwogCi0gCQluZXdfc2VjdG9yID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IobG9naWNhbF9zZWN0b3IsIGRpc2tzLCBkYXRhX2Rpc2tzLAotCQkJCQkJICAmZGRfaWR4LCAmcGRfaWR4LCBjb25mKTsKKwkJbmV3X3NlY3RvciA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIGxvZ2ljYWxfc2VjdG9yLAorCQkJCQkJICBwcmV2aW91cywKKwkJCQkJCSAgJmRkX2lkeCwgTlVMTCk7CiAJCXByX2RlYnVnKCJyYWlkNTogbWFrZV9yZXF1ZXN0LCBzZWN0b3IgJWxsdSBsb2dpY2FsICVsbHVcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW5ld19zZWN0b3IsIAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsb2dpY2FsX3NlY3Rvcik7CiAKLQkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBuZXdfc2VjdG9yLCBkaXNrcywgcGRfaWR4LCAoYmktPmJpX3J3JlJXQV9NQVNLKSk7CisJCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgbmV3X3NlY3RvciwgcHJldmlvdXMsCisJCQkJICAgICAgIChiaS0+YmlfcncmUldBX01BU0spKTsKIAkJaWYgKHNoKSB7Ci0JCQlpZiAodW5saWtlbHkoY29uZi0+ZXhwYW5kX3Byb2dyZXNzICE9IE1heFNlY3RvcikpIHsKKwkJCWlmICh1bmxpa2VseShwcmV2aW91cykpIHsKIAkJCQkvKiBleHBhbnNpb24gbWlnaHQgaGF2ZSBtb3ZlZCBvbiB3aGlsZSB3YWl0aW5nIGZvciBhCiAJCQkJICogc3RyaXBlLCBzbyB3ZSBtdXN0IGRvIHRoZSByYW5nZSBjaGVjayBhZ2Fpbi4KIAkJCQkgKiBFeHBhbnNpb24gY291bGQgc3RpbGwgbW92ZSBwYXN0IGFmdGVyIHRoaXMKQEAgLTM0NTgsOCArMzY4OCw5IEBACiAJCQkJICovCiAJCQkJaW50IG11c3RfcmV0cnkgPSAwOwogCQkJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJCQlpZiAobG9naWNhbF9zZWN0b3IgPCAgY29uZi0+ZXhwYW5kX3Byb2dyZXNzICYmCi0JCQkJICAgIGRpc2tzID09IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQkJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDAKKwkJCQkgICAgPyBsb2dpY2FsX3NlY3RvciA+PSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzCisJCQkJICAgIDogbG9naWNhbF9zZWN0b3IgPCBjb25mLT5yZXNoYXBlX3Byb2dyZXNzKQogCQkJCQkvKiBtaXNtYXRjaCwgbmVlZCB0byB0cnkgYWdhaW4gKi8KIAkJCQkJbXVzdF9yZXRyeSA9IDE7CiAJCQkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CkBAIC0zNTE0LDYgKzM3NDUsOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc2VjdG9yX3QgcmFpZDVfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpOworCiBzdGF0aWMgc2VjdG9yX3QgcmVzaGFwZV9yZXF1ZXN0KG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsIGludCAqc2tpcHBlZCkKIHsKIAkvKiByZXNoYXBpbmcgaXMgcXVpdGUgZGlmZmVyZW50IHRvIHJlY292ZXJ5L3Jlc3luYyBzbyBpdCBpcwpAQCAtMzUyNyw2MSArMzc2MCwxMTggQEAKIAkgKi8KIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlOwogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7Ci0JaW50IHBkX2lkeDsKIAlzZWN0b3JfdCBmaXJzdF9zZWN0b3IsIGxhc3Rfc2VjdG9yOwogCWludCByYWlkX2Rpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKIAlpbnQgZGF0YV9kaXNrcyA9IHJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQ7CiAJaW50IG5ld19kYXRhX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAlpbnQgaTsKIAlpbnQgZGRfaWR4OwotCXNlY3Rvcl90IHdyaXRlcG9zLCBzYWZlcG9zLCBnYXA7CisJc2VjdG9yX3Qgd3JpdGVwb3MsIHJlYWRwb3MsIHNhZmVwb3M7CisJc2VjdG9yX3Qgc3RyaXBlX2FkZHI7CisJaW50IHJlc2hhcGVfc2VjdG9yczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmlwZXM7CiAKLQlpZiAoc2VjdG9yX25yID09IDAgJiYKLQkgICAgY29uZi0+ZXhwYW5kX3Byb2dyZXNzICE9IDApIHsKLQkJLyogcmVzdGFydGluZyBpbiB0aGUgbWlkZGxlLCBza2lwIHRoZSBpbml0aWFsIHNlY3RvcnMgKi8KLQkJc2VjdG9yX25yID0gY29uZi0+ZXhwYW5kX3Byb2dyZXNzOworCWlmIChzZWN0b3JfbnIgPT0gMCkgeworCQkvKiBJZiByZXN0YXJ0aW5nIGluIHRoZSBtaWRkbGUsIHNraXAgdGhlIGluaXRpYWwgc2VjdG9ycyAqLworCQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMCAmJgorCQkgICAgY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA8IHJhaWQ1X3NpemUobWRkZXYsIDAsIDApKSB7CisJCQlzZWN0b3JfbnIgPSByYWlkNV9zaXplKG1kZGV2LCAwLCAwKQorCQkJCS0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKKwkJfSBlbHNlIGlmIChtZGRldi0+ZGVsdGFfZGlza3MgPiAwICYmCisJCQkgICBjb25mLT5yZXNoYXBlX3Byb2dyZXNzID4gMCkKKwkJCXNlY3Rvcl9uciA9IGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3M7CiAJCXNlY3Rvcl9kaXYoc2VjdG9yX25yLCBuZXdfZGF0YV9kaXNrcyk7Ci0JCSpza2lwcGVkID0gMTsKLQkJcmV0dXJuIHNlY3Rvcl9ucjsKKwkJaWYgKHNlY3Rvcl9ucikgeworCQkJKnNraXBwZWQgPSAxOworCQkJcmV0dXJuIHNlY3Rvcl9ucjsKKwkJfQogCX0KIAorCS8qIFdlIG5lZWQgdG8gcHJvY2VzcyBhIGZ1bGwgY2h1bmsgYXQgYSB0aW1lLgorCSAqIElmIG9sZCBhbmQgbmV3IGNodW5rIHNpemVzIGRpZmZlciwgd2UgbmVlZCB0byBwcm9jZXNzIHRoZQorCSAqIGxhcmdlc3Qgb2YgdGhlc2UKKwkgKi8KKwlpZiAobWRkZXYtPm5ld19jaHVuayA+IG1kZGV2LT5jaHVua19zaXplKQorCQlyZXNoYXBlX3NlY3RvcnMgPSBtZGRldi0+bmV3X2NodW5rIC8gNTEyOworCWVsc2UKKwkJcmVzaGFwZV9zZWN0b3JzID0gbWRkZXYtPmNodW5rX3NpemUgLyA1MTI7CisKIAkvKiB3ZSB1cGRhdGUgdGhlIG1ldGFkYXRhIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIDNNZWcKIAkgKiBpbiB0aGUgYmxvY2sgcmFuZ2UgKHRoYXQgaXMgcmF0aGVyIGFyYml0cmFyeSwgc2hvdWxkCiAJICogcHJvYmFibHkgYmUgdGltZSBiYXNlZCkgb3Igd2hlbiB0aGUgZGF0YSBhYm91dCB0byBiZQogCSAqIGNvcGllZCB3b3VsZCBvdmVyLXdyaXRlIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEgYXQKIAkgKiB0aGUgZnJvbnQgb2YgdGhlIHJhbmdlLgotCSAqIGkuZS4gb25lIG5ld19zdHJpcGUgZm9yd2FyZCBmcm9tIGV4cGFuZF9wcm9ncmVzcyBuZXdfbWFwcwotCSAqIHRvIGFmdGVyIHdoZXJlIGV4cGFuZF9sbyBvbGRfbWFwcyB0bworCSAqIGkuZS4gb25lIG5ld19zdHJpcGUgYWxvbmcgZnJvbSByZXNoYXBlX3Byb2dyZXNzIG5ld19tYXBzCisJICogdG8gYWZ0ZXIgd2hlcmUgcmVzaGFwZV9zYWZlIG9sZF9tYXBzIHRvCiAJICovCi0Jd3JpdGVwb3MgPSBjb25mLT5leHBhbmRfcHJvZ3Jlc3MgKwotCQljb25mLT5jaHVua19zaXplLzUxMioobmV3X2RhdGFfZGlza3MpOworCXdyaXRlcG9zID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKIAlzZWN0b3JfZGl2KHdyaXRlcG9zLCBuZXdfZGF0YV9kaXNrcyk7Ci0Jc2FmZXBvcyA9IGNvbmYtPmV4cGFuZF9sbzsKKwlyZWFkcG9zID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKKwlzZWN0b3JfZGl2KHJlYWRwb3MsIGRhdGFfZGlza3MpOworCXNhZmVwb3MgPSBjb25mLT5yZXNoYXBlX3NhZmU7CiAJc2VjdG9yX2RpdihzYWZlcG9zLCBkYXRhX2Rpc2tzKTsKLQlnYXAgPSBjb25mLT5leHBhbmRfcHJvZ3Jlc3MgLSBjb25mLT5leHBhbmRfbG87CisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDApIHsKKwkJd3JpdGVwb3MgLT0gcmVzaGFwZV9zZWN0b3JzOworCQlyZWFkcG9zICs9IHJlc2hhcGVfc2VjdG9yczsKKwkJc2FmZXBvcyArPSByZXNoYXBlX3NlY3RvcnM7CisJfSBlbHNlIHsKKwkJd3JpdGVwb3MgKz0gcmVzaGFwZV9zZWN0b3JzOworCQlyZWFkcG9zIC09IHJlc2hhcGVfc2VjdG9yczsKKwkJc2FmZXBvcyAtPSByZXNoYXBlX3NlY3RvcnM7CisJfQogCi0JaWYgKHdyaXRlcG9zID49IHNhZmVwb3MgfHwKLQkgICAgZ2FwID4gKG5ld19kYXRhX2Rpc2tzKSozMDAwKjIgLyozTWVnKi8pIHsKKwkvKiAnd3JpdGVwb3MnIGlzIHRoZSBtb3N0IGFkdmFuY2VkIGRldmljZSBhZGRyZXNzIHdlIG1pZ2h0IHdyaXRlLgorCSAqICdyZWFkcG9zJyBpcyB0aGUgbGVhc3QgYWR2YW5jZWQgZGV2aWNlIGFkZHJlc3Mgd2UgbWlnaHQgcmVhZC4KKwkgKiAnc2FmZXBvcycgaXMgdGhlIGxlYXN0IGFkZHJlc3MgcmVjb3JkZWQgaW4gdGhlIG1ldGFkYXRhIGFzIGhhdmluZworCSAqICAgICBiZWVuIHJlc2hhcGVkLgorCSAqIElmICdyZWFkcG9zJyBpcyBiZWhpbmQgJ3dyaXRlcG9zJywgdGhlbiB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4KKwkgKiBlbnN1cmUgc2FmZXR5IGluIHRoZSBmYWNlIG9mIGEgY3Jhc2ggLSB0aGF0IG11c3QgYmUgZG9uZSBieSB1c2Vyc3BhY2UKKwkgKiBtYWtpbmcgYSBiYWNrdXAgb2YgdGhlIGRhdGEuICBTbyBpbiB0aGF0IGNhc2UgdGhlcmUgaXMgbm8gcGFydGljdWxhcgorCSAqIHJ1c2ggdG8gdXBkYXRlIG1ldGFkYXRhLgorCSAqIE90aGVyd2lzZSBpZiAnc2FmZXBvcycgaXMgYmVoaW5kICd3cml0ZXBvcycsIHRoZW4gd2UgcmVhbGx5IG5lZWQgdG8KKwkgKiB1cGRhdGUgdGhlIG1ldGFkYXRhIHRvIGFkdmFuY2UgJ3NhZmVwb3MnIHRvIG1hdGNoICdyZWFkcG9zJyBzbyB0aGF0CisJICogd2UgY2FuIGJlIHNhZmUgaW4gdGhlIGV2ZW50IG9mIGEgY3Jhc2guCisJICogU28gd2UgaW5zaXN0IG9uIHVwZGF0aW5nIG1ldGFkYXRhIGlmIHNhZmVwb3MgaXMgYmVoaW5kIHdyaXRlcG9zIGFuZAorCSAqIHJlYWRwb3MgaXMgYmV5b25kIHdyaXRlcG9zLgorCSAqIEluIGFueSBjYXNlLCB1cGRhdGUgdGhlIG1ldGFkYXRhIGV2ZXJ5IDEwIHNlY29uZHMuCisJICogTWF5YmUgdGhhdCBudW1iZXIgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSwgYnV0IEknbSBub3Qgc3VyZSBpdCBpcworCSAqIHdvcnRoIGl0Li4uLiBtYXliZSBpdCBjb3VsZCBiZSBhIG11bHRpcGxlIG9mIHNhZmVtb2RlX2RlbGF5Pz8/CisJICovCisJaWYgKChtZGRldi0+ZGVsdGFfZGlza3MgPCAwCisJICAgICA/IChzYWZlcG9zID4gd3JpdGVwb3MgJiYgcmVhZHBvcyA8IHdyaXRlcG9zKQorCSAgICAgOiAoc2FmZXBvcyA8IHdyaXRlcG9zICYmIHJlYWRwb3MgPiB3cml0ZXBvcykpIHx8CisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgY29uZi0+cmVzaGFwZV9jaGVja3BvaW50ICsgMTAqSFopKSB7CiAJCS8qIENhbm5vdCBwcm9jZWVkIHVudGlsIHdlJ3ZlIHVwZGF0ZWQgdGhlIHN1cGVyYmxvY2suLi4gKi8KIAkJd2FpdF9ldmVudChjb25mLT53YWl0X2Zvcl9vdmVybGFwLAogCQkJICAgYXRvbWljX3JlYWQoJmNvbmYtPnJlc2hhcGVfc3RyaXBlcyk9PTApOwotCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IGNvbmYtPmV4cGFuZF9wcm9ncmVzczsKKwkJbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOworCQljb25mLT5yZXNoYXBlX2NoZWNrcG9pbnQgPSBqaWZmaWVzOwogCQlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKIAkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJd2FpdF9ldmVudChtZGRldi0+c2Jfd2FpdCwgbWRkZXYtPmZsYWdzID09IDAgfHwKIAkJCSAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJY29uZi0+ZXhwYW5kX2xvID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CisJCWNvbmYtPnJlc2hhcGVfc2FmZSA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7CiAJfQogCi0JZm9yIChpPTA7IGkgPCBjb25mLT5jaHVua19zaXplLzUxMjsgaSs9IFNUUklQRV9TRUNUT1JTKSB7CisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDApIHsKKwkJQlVHX09OKGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgPT0gMCk7CisJCXN0cmlwZV9hZGRyID0gd3JpdGVwb3M7CisJCUJVR19PTigobWRkZXYtPmRldl9zZWN0b3JzICYKKwkJCX4oKHNlY3Rvcl90KXJlc2hhcGVfc2VjdG9ycyAtIDEpKQorCQkgICAgICAgLSByZXNoYXBlX3NlY3RvcnMgLSBzdHJpcGVfYWRkcgorCQkgICAgICAgIT0gc2VjdG9yX25yKTsKKwl9IGVsc2UgeworCQlCVUdfT04od3JpdGVwb3MgIT0gc2VjdG9yX25yICsgcmVzaGFwZV9zZWN0b3JzKTsKKwkJc3RyaXBlX2FkZHIgPSBzZWN0b3JfbnI7CisJfQorCUlOSVRfTElTVF9IRUFEKCZzdHJpcGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVzaGFwZV9zZWN0b3JzOyBpICs9IFNUUklQRV9TRUNUT1JTKSB7CiAJCWludCBqOwogCQlpbnQgc2tpcHBlZCA9IDA7Ci0JCXBkX2lkeCA9IHN0cmlwZV90b19wZGlkeChzZWN0b3JfbnIraSwgY29uZiwgY29uZi0+cmFpZF9kaXNrcyk7Ci0JCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc2VjdG9yX25yK2ksCi0JCQkJICAgICAgIGNvbmYtPnJhaWRfZGlza3MsIHBkX2lkeCwgMCk7CisJCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc3RyaXBlX2FkZHIraSwgMCwgMCk7CiAJCXNldF9iaXQoU1RSSVBFX0VYUEFORElORywgJnNoLT5zdGF0ZSk7CiAJCWF0b21pY19pbmMoJmNvbmYtPnJlc2hhcGVfc3RyaXBlcyk7CiAJCS8qIElmIGFueSBvZiB0aGlzIHN0cmlwZSBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgb2xkCkBAIC0zNTkyLDEwICszODgyLDEwIEBACiAJCQlpZiAoaiA9PSBzaC0+cGRfaWR4KQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGNvbmYtPmxldmVsID09IDYgJiYKLQkJCSAgICBqID09IHJhaWQ2X25leHRfZGlzayhzaC0+cGRfaWR4LCBzaC0+ZGlza3MpKQorCQkJICAgIGogPT0gc2gtPnFkX2lkeCkKIAkJCQljb250aW51ZTsKLQkJCXMgPSBjb21wdXRlX2Jsb2NrbnIoc2gsIGopOwotCQkJaWYgKHMgPCBtZGRldi0+YXJyYXlfc2VjdG9ycykgeworCQkJcyA9IGNvbXB1dGVfYmxvY2tucihzaCwgaiwgMCk7CisJCQlpZiAocyA8IHJhaWQ1X3NpemUobWRkZXYsIDAsIDApKSB7CiAJCQkJc2tpcHBlZCA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0zNjA3LDEwICszODk3LDEzIEBACiAJCQlzZXRfYml0KFNUUklQRV9FWFBBTkRfUkVBRFksICZzaC0+c3RhdGUpOwogCQkJc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKIAkJfQotCQlyZWxlYXNlX3N0cmlwZShzaCk7CisJCWxpc3RfYWRkKCZzaC0+bHJ1LCAmc3RyaXBlcyk7CiAJfQogCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQljb25mLT5leHBhbmRfcHJvZ3Jlc3MgPSAoc2VjdG9yX25yICsgaSkgKiBuZXdfZGF0YV9kaXNrczsKKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMCkKKwkJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyAtPSByZXNoYXBlX3NlY3RvcnMgKiBuZXdfZGF0YV9kaXNrczsKKwllbHNlCisJCWNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgKz0gcmVzaGFwZV9zZWN0b3JzICogbmV3X2RhdGFfZGlza3M7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJLyogT2ssIHRob3NlIHN0cmlwZSBhcmUgcmVhZHkuIFdlIGNhbiBzdGFydCBzY2hlZHVsaW5nCiAJICogcmVhZHMgb24gdGhlIHNvdXJjZSBzdHJpcGVzLgpAQCAtMzYxOCw0NiArMzkxMSw1MCBAQAogCSAqIGJsb2NrIG9uIHRoZSBkZXN0aW5hdGlvbiBzdHJpcGVzLgogCSAqLwogCWZpcnN0X3NlY3RvciA9Ci0JCXJhaWQ1X2NvbXB1dGVfc2VjdG9yKHNlY3Rvcl9ucioobmV3X2RhdGFfZGlza3MpLAotCQkJCSAgICAgcmFpZF9kaXNrcywgZGF0YV9kaXNrcywKLQkJCQkgICAgICZkZF9pZHgsICZwZF9pZHgsIGNvbmYpOworCQlyYWlkNV9jb21wdXRlX3NlY3Rvcihjb25mLCBzdHJpcGVfYWRkcioobmV3X2RhdGFfZGlza3MpLAorCQkJCSAgICAgMSwgJmRkX2lkeCwgTlVMTCk7CiAJbGFzdF9zZWN0b3IgPQotCQlyYWlkNV9jb21wdXRlX3NlY3Rvcigoc2VjdG9yX25yK2NvbmYtPmNodW5rX3NpemUvNTEyKQotCQkJCSAgICAgKihuZXdfZGF0YV9kaXNrcykgLTEsCi0JCQkJICAgICByYWlkX2Rpc2tzLCBkYXRhX2Rpc2tzLAotCQkJCSAgICAgJmRkX2lkeCwgJnBkX2lkeCwgY29uZik7Ci0JaWYgKGxhc3Rfc2VjdG9yID49IChtZGRldi0+c2l6ZTw8MSkpCi0JCWxhc3Rfc2VjdG9yID0gKG1kZGV2LT5zaXplPDwxKS0xOworCQlyYWlkNV9jb21wdXRlX3NlY3Rvcihjb25mLCAoKHN0cmlwZV9hZGRyK2NvbmYtPmNodW5rX3NpemUvNTEyKQorCQkJCQkgICAgKihuZXdfZGF0YV9kaXNrcykgLSAxKSwKKwkJCQkgICAgIDEsICZkZF9pZHgsIE5VTEwpOworCWlmIChsYXN0X3NlY3RvciA+PSBtZGRldi0+ZGV2X3NlY3RvcnMpCisJCWxhc3Rfc2VjdG9yID0gbWRkZXYtPmRldl9zZWN0b3JzIC0gMTsKIAl3aGlsZSAoZmlyc3Rfc2VjdG9yIDw9IGxhc3Rfc2VjdG9yKSB7Ci0JCXBkX2lkeCA9IHN0cmlwZV90b19wZGlkeChmaXJzdF9zZWN0b3IsIGNvbmYsCi0JCQkJCSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKLQkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBmaXJzdF9zZWN0b3IsCi0JCQkJICAgICAgIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MsIHBkX2lkeCwgMCk7CisJCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgZmlyc3Rfc2VjdG9yLCAxLCAwKTsKIAkJc2V0X2JpdChTVFJJUEVfRVhQQU5EX1NPVVJDRSwgJnNoLT5zdGF0ZSk7CiAJCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7CiAJCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIAkJZmlyc3Rfc2VjdG9yICs9IFNUUklQRV9TRUNUT1JTOwogCX0KKwkvKiBOb3cgdGhhdCB0aGUgc291cmNlcyBhcmUgY2xlYXJseSBtYXJrZWQsIHdlIGNhbiByZWxlYXNlCisJICogdGhlIGRlc3RpbmF0aW9uIHN0cmlwZXMKKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0cmlwZXMpKSB7CisJCXNoID0gbGlzdF9lbnRyeShzdHJpcGVzLm5leHQsIHN0cnVjdCBzdHJpcGVfaGVhZCwgbHJ1KTsKKwkJbGlzdF9kZWxfaW5pdCgmc2gtPmxydSk7CisJCXJlbGVhc2Vfc3RyaXBlKHNoKTsKKwl9CiAJLyogSWYgdGhpcyB0YWtlcyB1cyB0byB0aGUgcmVzeW5jX21heCBwb2ludCB3aGVyZSB3ZSBoYXZlIHRvIHBhdXNlLAogCSAqIHRoZW4gd2UgbmVlZCB0byB3cml0ZSBvdXQgdGhlIHN1cGVyYmxvY2suCiAJICovCi0Jc2VjdG9yX25yICs9IGNvbmYtPmNodW5rX3NpemU+Pjk7CisJc2VjdG9yX25yICs9IHJlc2hhcGVfc2VjdG9yczsKIAlpZiAoc2VjdG9yX25yID49IG1kZGV2LT5yZXN5bmNfbWF4KSB7CiAJCS8qIENhbm5vdCBwcm9jZWVkIHVudGlsIHdlJ3ZlIHVwZGF0ZWQgdGhlIHN1cGVyYmxvY2suLi4gKi8KIAkJd2FpdF9ldmVudChjb25mLT53YWl0X2Zvcl9vdmVybGFwLAogCQkJICAgYXRvbWljX3JlYWQoJmNvbmYtPnJlc2hhcGVfc3RyaXBlcykgPT0gMCk7Ci0JCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gY29uZi0+ZXhwYW5kX3Byb2dyZXNzOworCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3M7CisJCWNvbmYtPnJlc2hhcGVfY2hlY2twb2ludCA9IGppZmZpZXM7CiAJCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOwogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCQl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LAogCQkJICAgIXRlc3RfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKQogCQkJICAgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwotCQljb25mLT5leHBhbmRfbG8gPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKKwkJY29uZi0+cmVzaGFwZV9zYWZlID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9vdmVybGFwKTsKIAl9Ci0JcmV0dXJuIGNvbmYtPmNodW5rX3NpemU+Pjk7CisJcmV0dXJuIHJlc2hhcGVfc2VjdG9yczsKIH0KIAogLyogRklYTUUgZ29fZmFzdGVyIGlzbid0IHVzZWQgKi8KQEAgLTM2NjUsOSArMzk2Miw3IEBACiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOwotCWludCBwZF9pZHg7Ci0JaW50IHJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCXNlY3Rvcl90IG1heF9zZWN0b3IgPSBtZGRldi0+c2l6ZSA8PCAxOworCXNlY3Rvcl90IG1heF9zZWN0b3IgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJaW50IHN5bmNfYmxvY2tzOwogCWludCBzdGlsbF9kZWdyYWRlZCA9IDA7CiAJaW50IGk7CkBAIC0zNjc1LDYgKzM5NzAsNyBAQAogCWlmIChzZWN0b3JfbnIgPj0gbWF4X3NlY3RvcikgewogCQkvKiBqdXN0IGJlaW5nIHRvbGQgdG8gZmluaXNoIHVwIC4uIG5vdGhpbmcgbXVjaCB0byBkbyAqLwogCQl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKKwogCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVTSEFQRSwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKIAkJCWVuZF9yZXNoYXBlKGNvbmYpOwogCQkJcmV0dXJuIDA7CkBAIC0zNzA1LDcgKzQwMDEsNyBAQAogCSAqLwogCWlmIChtZGRldi0+ZGVncmFkZWQgPj0gY29uZi0+bWF4X2RlZ3JhZGVkICYmCiAJICAgIHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKSB7Ci0JCXNlY3Rvcl90IHJ2ID0gKG1kZGV2LT5zaXplIDw8IDEpIC0gc2VjdG9yX25yOworCQlzZWN0b3JfdCBydiA9IG1kZGV2LT5kZXZfc2VjdG9ycyAtIHNlY3Rvcl9ucjsKIAkJKnNraXBwZWQgPSAxOwogCQlyZXR1cm4gcnY7CiAJfQpAQCAtMzcyMSwxMCArNDAxNyw5IEBACiAKIAliaXRtYXBfY29uZF9lbmRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0b3JfbnIpOwogCi0JcGRfaWR4ID0gc3RyaXBlX3RvX3BkaWR4KHNlY3Rvcl9uciwgY29uZiwgcmFpZF9kaXNrcyk7Ci0Jc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzZWN0b3JfbnIsIHJhaWRfZGlza3MsIHBkX2lkeCwgMSk7CisJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzZWN0b3JfbnIsIDAsIDEpOwogCWlmIChzaCA9PSBOVUxMKSB7Ci0JCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc2VjdG9yX25yLCByYWlkX2Rpc2tzLCBwZF9pZHgsIDApOworCQlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNlY3Rvcl9uciwgMCwgMCk7CiAJCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBzd2FtcCB0aGUgc3RyaXBlIGNhY2hlIGlmIHNvbWVvbmUgZWxzZQogCQkgKiBpcyB0cnlpbmcgdG8gZ2V0IGFjY2VzcwogCQkgKi8KQEAgLTM3NjYsMTkgKzQwNjEsMTUgQEAKIAkgKiBpdCB3aWxsIGJlIG9ubHkgb25lICdkZF9pZHgnIGFuZCBvbmx5IG5lZWQgb25lIGNhbGwgdG8gcmFpZDVfY29tcHV0ZV9zZWN0b3IuCiAJICovCiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKLQlpbnQgZGRfaWR4LCBwZF9pZHg7CisJaW50IGRkX2lkeDsKIAlzZWN0b3JfdCBzZWN0b3IsIGxvZ2ljYWxfc2VjdG9yLCBsYXN0X3NlY3RvcjsKIAlpbnQgc2NudCA9IDA7CiAJaW50IHJlbWFpbmluZzsKIAlpbnQgaGFuZGxlZCA9IDA7CiAKIAlsb2dpY2FsX3NlY3RvciA9IHJhaWRfYmlvLT5iaV9zZWN0b3IgJiB+KChzZWN0b3JfdClTVFJJUEVfU0VDVE9SUy0xKTsKLQlzZWN0b3IgPSByYWlkNV9jb21wdXRlX3NlY3RvcigJbG9naWNhbF9zZWN0b3IsCi0JCQkJCWNvbmYtPnJhaWRfZGlza3MsCi0JCQkJCWNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQsCi0JCQkJCSZkZF9pZHgsCi0JCQkJCSZwZF9pZHgsCi0JCQkJCWNvbmYpOworCXNlY3RvciA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIGxvZ2ljYWxfc2VjdG9yLAorCQkJCSAgICAgIDAsICZkZF9pZHgsIE5VTEwpOwogCWxhc3Rfc2VjdG9yID0gcmFpZF9iaW8tPmJpX3NlY3RvciArIChyYWlkX2Jpby0+Ymlfc2l6ZT4+OSk7CiAKIAlmb3IgKDsgbG9naWNhbF9zZWN0b3IgPCBsYXN0X3NlY3RvcjsKQEAgLTM3OTAsNyArNDA4MSw3IEBACiAJCQkvKiBhbHJlYWR5IGRvbmUgdGhpcyBzdHJpcGUgKi8KIAkJCWNvbnRpbnVlOwogCi0JCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc2VjdG9yLCBjb25mLT5yYWlkX2Rpc2tzLCBwZF9pZHgsIDEpOworCQlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNlY3RvciwgMCwgMSk7CiAKIAkJaWYgKCFzaCkgewogCQkJLyogZmFpbGVkIHRvIGdldCBhIHN0cmlwZSAtIG11c3Qgd2FpdCAqLwpAQCAtMzk5Miw4OSArNDI4Myw2OSBAQAogCS5hdHRycyA9IHJhaWQ1X2F0dHJzLAogfTsKIAotc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCitzdGF0aWMgc2VjdG9yX3QKK3JhaWQ1X3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOworCisJaWYgKCFzZWN0b3JzKQorCQlzZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOworCWlmICghcmFpZF9kaXNrcykgeworCQkvKiBzaXplIGlzIGRlZmluZWQgYnkgdGhlIHNtYWxsZXN0IG9mIHByZXZpb3VzIGFuZCBuZXcgc2l6ZSAqLworCQlpZiAoY29uZi0+cmFpZF9kaXNrcyA8IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQlyYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKKwkJZWxzZQorCQkJcmFpZF9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3M7CisJfQorCisJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+Y2h1bmtfc2l6ZS81MTIgLSAxKTsKKwlzZWN0b3JzICY9IH4oKHNlY3Rvcl90KW1kZGV2LT5uZXdfY2h1bmsvNTEyIC0gMSk7CisJcmV0dXJuIHNlY3RvcnMgKiAocmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCk7Cit9CisKK3N0YXRpYyByYWlkNV9jb25mX3QgKnNldHVwX2NvbmYobWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mOwogCWludCByYWlkX2Rpc2ssIG1lbW9yeTsKIAltZGtfcmRldl90ICpyZGV2OwogCXN0cnVjdCBkaXNrX2luZm8gKmRpc2s7Ci0JaW50IHdvcmtpbmdfZGlza3MgPSAwOwogCi0JaWYgKG1kZGV2LT5sZXZlbCAhPSA1ICYmIG1kZGV2LT5sZXZlbCAhPSA0ICYmIG1kZGV2LT5sZXZlbCAhPSA2KSB7CisJaWYgKG1kZGV2LT5uZXdfbGV2ZWwgIT0gNQorCSAgICAmJiBtZGRldi0+bmV3X2xldmVsICE9IDQKKwkgICAgJiYgbWRkZXYtPm5ld19sZXZlbCAhPSA2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6ICVzOiByYWlkIGxldmVsIG5vdCBzZXQgdG8gNC81LzYgKCVkKVxuIiwKLQkJICAgICAgIG1kbmFtZShtZGRldiksIG1kZGV2LT5sZXZlbCk7Ci0JCXJldHVybiAtRUlPOworCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgbWRkZXYtPm5ld19sZXZlbCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlpZiAoKG1kZGV2LT5uZXdfbGV2ZWwgPT0gNQorCSAgICAgJiYgIWFsZ29yaXRobV92YWxpZF9yYWlkNShtZGRldi0+bmV3X2xheW91dCkpIHx8CisJICAgIChtZGRldi0+bmV3X2xldmVsID09IDYKKwkgICAgICYmICFhbGdvcml0aG1fdmFsaWRfcmFpZDYobWRkZXYtPm5ld19sYXlvdXQpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiAlczogbGF5b3V0ICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpLCBtZGRldi0+bmV3X2xheW91dCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlpZiAobWRkZXYtPm5ld19sZXZlbCA9PSA2ICYmIG1kZGV2LT5yYWlkX2Rpc2tzIDwgNCkgeworCQlwcmludGsoS0VSTl9FUlIgInJhaWQ2OiBub3QgZW5vdWdoIGNvbmZpZ3VyZWQgZGV2aWNlcyBmb3IgJXMgKCVkLCBtaW5pbXVtIDQpXG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgbWRkZXYtPnJhaWRfZGlza3MpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlpZiAobWRkZXYtPmNodW5rX3NpemUgPCBQQUdFX1NJWkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkNTogY2h1bmtfc2l6ZSBtdXN0IGJlIGF0IGxlYXN0ICIKLQkJICAgICAgICJQQUdFX1NJWkUgYnV0ICVkIDwgJWxkXG4iLAotCQkgICAgICAgbWRkZXYtPmNodW5rX3NpemUsIFBBR0VfU0laRSk7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmICghbWRkZXYtPm5ld19jaHVuayB8fCBtZGRldi0+bmV3X2NodW5rICUgUEFHRV9TSVpFKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6IGludmFsaWQgY2h1bmsgc2l6ZSAlZCBmb3IgJXNcbiIsCisJCQltZGRldi0+bmV3X2NodW5rLCBtZG5hbWUobWRkZXYpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikgewotCQkvKiBDaGVjayB0aGF0IHdlIGNhbiBjb250aW51ZSB0aGUgcmVzaGFwZS4KLQkJICogQ3VycmVudGx5IG9ubHkgZGlza3MgY2FuIGNoYW5nZSwgaXQgbXVzdAotCQkgKiBpbmNyZWFzZSwgYW5kIHdlIG11c3QgYmUgcGFzdCB0aGUgcG9pbnQgd2hlcmUKLQkJICogYSBzdHJpcGUgb3Zlci13cml0ZXMgaXRzZWxmCi0JCSAqLwotCQlzZWN0b3JfdCBoZXJlX25ldywgaGVyZV9vbGQ7Ci0JCWludCBvbGRfZGlza3M7Ci0JCWludCBtYXhfZGVncmFkZWQgPSAobWRkZXYtPmxldmVsID09IDUgPyAxIDogMik7Ci0KLQkJaWYgKG1kZGV2LT5uZXdfbGV2ZWwgIT0gbWRkZXYtPmxldmVsIHx8Ci0JCSAgICBtZGRldi0+bmV3X2xheW91dCAhPSBtZGRldi0+bGF5b3V0IHx8Ci0JCSAgICBtZGRldi0+bmV3X2NodW5rICE9IG1kZGV2LT5jaHVua19zaXplKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiAlczogdW5zdXBwb3J0ZWQgcmVzaGFwZSAiCi0JCQkgICAgICAgInJlcXVpcmVkIC0gYWJvcnRpbmcuXG4iLAotCQkJICAgICAgIG1kbmFtZShtZGRldikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiAlczogdW5zdXBwb3J0ZWQgcmVzaGFwZSAiCi0JCQkgICAgICAgIihyZWR1Y2UgZGlza3MpIHJlcXVpcmVkIC0gYWJvcnRpbmcuXG4iLAotCQkJICAgICAgIG1kbmFtZShtZGRldikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJb2xkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7Ci0JCS8qIHJlc2hhcGVfcG9zaXRpb24gbXVzdCBiZSBvbiBhIG5ldy1zdHJpcGUgYm91bmRhcnksIGFuZCBvbmUKLQkJICogZnVydGhlciB1cCBpbiBuZXcgZ2VvbWV0cnkgbXVzdCBtYXAgYWZ0ZXIgaGVyZSBpbiBvbGQKLQkJICogZ2VvbWV0cnkuCi0JCSAqLwotCQloZXJlX25ldyA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOwotCQlpZiAoc2VjdG9yX2RpdihoZXJlX25ldywgKG1kZGV2LT5jaHVua19zaXplPj45KSoKLQkJCSAgICAgICAobWRkZXYtPnJhaWRfZGlza3MgLSBtYXhfZGVncmFkZWQpKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogcmVzaGFwZV9wb3NpdGlvbiBub3QgIgotCQkJICAgICAgICJvbiBhIHN0cmlwZSBib3VuZGFyeVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQkvKiBoZXJlX25ldyBpcyB0aGUgc3RyaXBlIHdlIHdpbGwgd3JpdGUgdG8gKi8KLQkJaGVyZV9vbGQgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKLQkJc2VjdG9yX2RpdihoZXJlX29sZCwgKG1kZGV2LT5jaHVua19zaXplPj45KSoKLQkJCSAgIChvbGRfZGlza3MtbWF4X2RlZ3JhZGVkKSk7Ci0JCS8qIGhlcmVfb2xkIGlzIHRoZSBmaXJzdCBzdHJpcGUgdGhhdCB3ZSBtaWdodCBuZWVkIHRvIHJlYWQKLQkJICogZnJvbSAqLwotCQlpZiAoaGVyZV9uZXcgPj0gaGVyZV9vbGQpIHsKLQkJCS8qIFJlYWRpbmcgZnJvbSB0aGUgc2FtZSBzdHJpcGUgYXMgd3JpdGluZyB0byAtIGJhZCAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogcmVzaGFwZV9wb3NpdGlvbiB0b28gZWFybHkgZm9yICIKLQkJCSAgICAgICAiYXV0by1yZWNvdmVyeSAtIGFib3J0aW5nLlxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICJyYWlkNTogcmVzaGFwZSB3aWxsIGNvbnRpbnVlXG4iKTsKLQkJLyogT0ssIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNvbnRpbnVlOyAqLwotCX0KLQotCi0JbWRkZXYtPnByaXZhdGUgPSBremFsbG9jKHNpemVvZiAocmFpZDVfY29uZl90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKChjb25mID0gbWRkZXYtPnByaXZhdGUpID09IE5VTEwpCisJY29uZiA9IGt6YWxsb2Moc2l6ZW9mKHJhaWQ1X2NvbmZfdCksIEdGUF9LRVJORUwpOworCWlmIChjb25mID09IE5VTEwpCiAJCWdvdG8gYWJvcnQ7Ci0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvcikgewotCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCX0gZWxzZSB7Ci0JCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKworCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CisJZWxzZQogCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7Ci0JfQogCiAJY29uZi0+ZGlza3MgPSBremFsbG9jKGNvbmYtPnJhaWRfZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2tfaW5mbyksCiAJCQkgICAgICBHRlBfS0VSTkVMKTsKQEAgLTQwODYsMTMgKzQzNTcsMTIgQEAKIAlpZiAoKGNvbmYtPnN0cmlwZV9oYXNodGJsID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlnb3RvIGFib3J0OwogCi0JaWYgKG1kZGV2LT5sZXZlbCA9PSA2KSB7CisJaWYgKG1kZGV2LT5uZXdfbGV2ZWwgPT0gNikgewogCQljb25mLT5zcGFyZV9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAkJaWYgKCFjb25mLT5zcGFyZV9wYWdlKQogCQkJZ290byBhYm9ydDsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY29uZi0+d2FpdF9mb3Jfc3RyaXBlKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2Zvcl9vdmVybGFwKTsKIAlJTklUX0xJU1RfSEVBRCgmY29uZi0+aGFuZGxlX2xpc3QpOwpAQCAtNDEyMSw0NyArNDM5MSwxMzQgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiBkZXZpY2UgJXMgb3BlcmF0aW9uYWwgYXMgcmFpZCIKIAkJCQkiIGRpc2sgJWRcbiIsIGJkZXZuYW1lKHJkZXYtPmJkZXYsYiksCiAJCQkJcmFpZF9kaXNrKTsKLQkJCXdvcmtpbmdfZGlza3MrKzsKIAkJfSBlbHNlCiAJCQkvKiBDYW5ub3QgcmVseSBvbiBiaXRtYXAgdG8gY29tcGxldGUgcmVjb3ZlcnkgKi8KIAkJCWNvbmYtPmZ1bGxzeW5jID0gMTsKIAl9CiAKLQkvKgotCSAqIDAgZm9yIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJheSwgMSBvciAyIGZvciBhIGRlZ3JhZGVkIGFycmF5LgotCSAqLwotCW1kZGV2LT5kZWdyYWRlZCA9IGNvbmYtPnJhaWRfZGlza3MgLSB3b3JraW5nX2Rpc2tzOwotCWNvbmYtPm1kZGV2ID0gbWRkZXY7Ci0JY29uZi0+Y2h1bmtfc2l6ZSA9IG1kZGV2LT5jaHVua19zaXplOwotCWNvbmYtPmxldmVsID0gbWRkZXYtPmxldmVsOworCWNvbmYtPmNodW5rX3NpemUgPSBtZGRldi0+bmV3X2NodW5rOworCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKIAlpZiAoY29uZi0+bGV2ZWwgPT0gNikKIAkJY29uZi0+bWF4X2RlZ3JhZGVkID0gMjsKIAllbHNlCiAJCWNvbmYtPm1heF9kZWdyYWRlZCA9IDE7Ci0JY29uZi0+YWxnb3JpdGhtID0gbWRkZXYtPmxheW91dDsKKwljb25mLT5hbGdvcml0aG0gPSBtZGRldi0+bmV3X2xheW91dDsKIAljb25mLT5tYXhfbnJfc3RyaXBlcyA9IE5SX1NUUklQRVM7Ci0JY29uZi0+ZXhwYW5kX3Byb2dyZXNzID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CisJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOworCWlmIChjb25mLT5yZXNoYXBlX3Byb2dyZXNzICE9IE1heFNlY3RvcikgeworCQljb25mLT5wcmV2X2NodW5rID0gbWRkZXYtPmNodW5rX3NpemU7CisJCWNvbmYtPnByZXZfYWxnbyA9IG1kZGV2LT5sYXlvdXQ7CisJfQogCi0JLyogZGV2aWNlIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGNodW5rIHNpemUgKi8KLQltZGRldi0+c2l6ZSAmPSB+KG1kZGV2LT5jaHVua19zaXplLzEwMjQgLTEpOwotCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSA8PCAxOworCW1lbW9yeSA9IGNvbmYtPm1heF9ucl9zdHJpcGVzICogKHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpICsKKwkJIGNvbmYtPnJhaWRfZGlza3MgKiAoKHNpemVvZihzdHJ1Y3QgYmlvKSArIFBBR0VfU0laRSkpKSAvIDEwMjQ7CisJaWYgKGdyb3dfc3RyaXBlcyhjb25mLCBjb25mLT5tYXhfbnJfc3RyaXBlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkicmFpZDU6IGNvdWxkbid0IGFsbG9jYXRlICVka0IgZm9yIGJ1ZmZlcnNcbiIsIG1lbW9yeSk7CisJCWdvdG8gYWJvcnQ7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiBhbGxvY2F0ZWQgJWRrQiBmb3IgJXNcbiIsCisJCQltZW1vcnksIG1kbmFtZShtZGRldikpOwogCi0JaWYgKGNvbmYtPmxldmVsID09IDYgJiYgY29uZi0+cmFpZF9kaXNrcyA8IDQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNjogbm90IGVub3VnaCBjb25maWd1cmVkIGRldmljZXMgZm9yICVzICglZCwgbWluaW11bSA0KVxuIiwKLQkJICAgICAgIG1kbmFtZShtZGRldiksIGNvbmYtPnJhaWRfZGlza3MpOworCWNvbmYtPnRocmVhZCA9IG1kX3JlZ2lzdGVyX3RocmVhZChyYWlkNWQsIG1kZGV2LCAiJXNfcmFpZDUiKTsKKwlpZiAoIWNvbmYtPnRocmVhZCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgdGhyZWFkIGZvciAlc1xuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldikpOwogCQlnb3RvIGFib3J0OwogCX0KLQlpZiAoIWNvbmYtPmNodW5rX3NpemUgfHwgY29uZi0+Y2h1bmtfc2l6ZSAlIDQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogaW52YWxpZCBjaHVuayBzaXplICVkIGZvciAlc1xuIiwKLQkJCWNvbmYtPmNodW5rX3NpemUsIG1kbmFtZShtZGRldikpOwotCQlnb3RvIGFib3J0OworCisJcmV0dXJuIGNvbmY7CisKKyBhYm9ydDoKKwlpZiAoY29uZikgeworCQlzaHJpbmtfc3RyaXBlcyhjb25mKTsKKwkJc2FmZV9wdXRfcGFnZShjb25mLT5zcGFyZV9wYWdlKTsKKwkJa2ZyZWUoY29uZi0+ZGlza3MpOworCQlrZnJlZShjb25mLT5zdHJpcGVfaGFzaHRibCk7CisJCWtmcmVlKGNvbmYpOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9IGVsc2UKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyBpbnQgcnVuKG1kZGV2X3QgKm1kZGV2KQoreworCXJhaWQ1X2NvbmZfdCAqY29uZjsKKwlpbnQgd29ya2luZ19kaXNrcyA9IDA7CisJbWRrX3JkZXZfdCAqcmRldjsKKworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHsKKwkJLyogQ2hlY2sgdGhhdCB3ZSBjYW4gY29udGludWUgdGhlIHJlc2hhcGUuCisJCSAqIEN1cnJlbnRseSBvbmx5IGRpc2tzIGNhbiBjaGFuZ2UsIGl0IG11c3QKKwkJICogaW5jcmVhc2UsIGFuZCB3ZSBtdXN0IGJlIHBhc3QgdGhlIHBvaW50IHdoZXJlCisJCSAqIGEgc3RyaXBlIG92ZXItd3JpdGVzIGl0c2VsZgorCQkgKi8KKwkJc2VjdG9yX3QgaGVyZV9uZXcsIGhlcmVfb2xkOworCQlpbnQgb2xkX2Rpc2tzOworCQlpbnQgbWF4X2RlZ3JhZGVkID0gKG1kZGV2LT5sZXZlbCA9PSA2ID8gMiA6IDEpOworCisJCWlmIChtZGRldi0+bmV3X2xldmVsICE9IG1kZGV2LT5sZXZlbCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogJXM6IHVuc3VwcG9ydGVkIHJlc2hhcGUgIgorCQkJICAgICAgICJyZXF1aXJlZCAtIGFib3J0aW5nLlxuIiwKKwkJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW9sZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlbHRhX2Rpc2tzOworCQkvKiByZXNoYXBlX3Bvc2l0aW9uIG11c3QgYmUgb24gYSBuZXctc3RyaXBlIGJvdW5kYXJ5LCBhbmQgb25lCisJCSAqIGZ1cnRoZXIgdXAgaW4gbmV3IGdlb21ldHJ5IG11c3QgbWFwIGFmdGVyIGhlcmUgaW4gb2xkCisJCSAqIGdlb21ldHJ5LgorCQkgKi8KKwkJaGVyZV9uZXcgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKKwkJaWYgKHNlY3Rvcl9kaXYoaGVyZV9uZXcsIChtZGRldi0+bmV3X2NodW5rPj45KSoKKwkJCSAgICAgICAobWRkZXYtPnJhaWRfZGlza3MgLSBtYXhfZGVncmFkZWQpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogcmVzaGFwZV9wb3NpdGlvbiBub3QgIgorCQkJICAgICAgICJvbiBhIHN0cmlwZSBib3VuZGFyeVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBoZXJlX25ldyBpcyB0aGUgc3RyaXBlIHdlIHdpbGwgd3JpdGUgdG8gKi8KKwkJaGVyZV9vbGQgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKKwkJc2VjdG9yX2RpdihoZXJlX29sZCwgKG1kZGV2LT5jaHVua19zaXplPj45KSoKKwkJCSAgIChvbGRfZGlza3MtbWF4X2RlZ3JhZGVkKSk7CisJCS8qIGhlcmVfb2xkIGlzIHRoZSBmaXJzdCBzdHJpcGUgdGhhdCB3ZSBtaWdodCBuZWVkIHRvIHJlYWQKKwkJICogZnJvbSAqLworCQlpZiAoaGVyZV9uZXcgPj0gaGVyZV9vbGQpIHsKKwkJCS8qIFJlYWRpbmcgZnJvbSB0aGUgc2FtZSBzdHJpcGUgYXMgd3JpdGluZyB0byAtIGJhZCAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogcmVzaGFwZV9wb3NpdGlvbiB0b28gZWFybHkgZm9yICIKKwkJCSAgICAgICAiYXV0by1yZWNvdmVyeSAtIGFib3J0aW5nLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlwcmludGsoS0VSTl9JTkZPICJyYWlkNTogcmVzaGFwZSB3aWxsIGNvbnRpbnVlXG4iKTsKKwkJLyogT0ssIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNvbnRpbnVlOyAqLworCX0gZWxzZSB7CisJCUJVR19PTihtZGRldi0+bGV2ZWwgIT0gbWRkZXYtPm5ld19sZXZlbCk7CisJCUJVR19PTihtZGRldi0+bGF5b3V0ICE9IG1kZGV2LT5uZXdfbGF5b3V0KTsKKwkJQlVHX09OKG1kZGV2LT5jaHVua19zaXplICE9IG1kZGV2LT5uZXdfY2h1bmspOworCQlCVUdfT04obWRkZXYtPmRlbHRhX2Rpc2tzICE9IDApOwogCX0KLQlpZiAoY29uZi0+YWxnb3JpdGhtID4gQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQykgewotCQlwcmludGsoS0VSTl9FUlIgCi0JCQkicmFpZDU6IHVuc3VwcG9ydGVkIHBhcml0eSBhbGdvcml0aG0gJWQgZm9yICVzXG4iLAotCQkJY29uZi0+YWxnb3JpdGhtLCBtZG5hbWUobWRkZXYpKTsKLQkJZ290byBhYm9ydDsKLQl9CisKKwlpZiAobWRkZXYtPnByaXZhdGUgPT0gTlVMTCkKKwkJY29uZiA9IHNldHVwX2NvbmYobWRkZXYpOworCWVsc2UKKwkJY29uZiA9IG1kZGV2LT5wcml2YXRlOworCisJaWYgKElTX0VSUihjb25mKSkKKwkJcmV0dXJuIFBUUl9FUlIoY29uZik7CisKKwltZGRldi0+dGhyZWFkID0gY29uZi0+dGhyZWFkOworCWNvbmYtPnRocmVhZCA9IE5VTEw7CisJbWRkZXYtPnByaXZhdGUgPSBjb25mOworCisJLyoKKwkgKiAwIGZvciBhIGZ1bGx5IGZ1bmN0aW9uYWwgYXJyYXksIDEgb3IgMiBmb3IgYSBkZWdyYWRlZCBhcnJheS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKKwkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCisJCQl3b3JraW5nX2Rpc2tzKys7CisKKwltZGRldi0+ZGVncmFkZWQgPSBjb25mLT5yYWlkX2Rpc2tzIC0gd29ya2luZ19kaXNrczsKKwogCWlmIChtZGRldi0+ZGVncmFkZWQgPiBjb25mLT5tYXhfZGVncmFkZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogbm90IGVub3VnaCBvcGVyYXRpb25hbCBkZXZpY2VzIGZvciAlcyIKIAkJCSIgKCVkLyVkIGZhaWxlZClcbiIsCkBAIC00MTY5LDYgKzQ1MjYsMTAgQEAKIAkJZ290byBhYm9ydDsKIAl9CiAKKwkvKiBkZXZpY2Ugc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgY2h1bmsgc2l6ZSAqLworCW1kZGV2LT5kZXZfc2VjdG9ycyAmPSB+KG1kZGV2LT5jaHVua19zaXplIC8gNTEyIC0gMSk7CisJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKKwogCWlmIChtZGRldi0+ZGVncmFkZWQgPiAwICYmCiAJICAgIG1kZGV2LT5yZWNvdmVyeV9jcCAhPSBNYXhTZWN0b3IpIHsKIAkJaWYgKG1kZGV2LT5va19zdGFydF9kZWdyYWRlZCkKQEAgLTQxODQsNDMgKzQ1NDUsMjIgQEAKIAkJfQogCX0KIAotCXsKLQkJbWRkZXYtPnRocmVhZCA9IG1kX3JlZ2lzdGVyX3RocmVhZChyYWlkNWQsIG1kZGV2LCAiJXNfcmFpZDUiKTsKLQkJaWYgKCFtZGRldi0+dGhyZWFkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgCi0JCQkJInJhaWQ1OiBjb3VsZG4ndCBhbGxvY2F0ZSB0aHJlYWQgZm9yICVzXG4iLAotCQkJCW1kbmFtZShtZGRldikpOwotCQkJZ290byBhYm9ydDsKLQkJfQotCX0KLQltZW1vcnkgPSBjb25mLT5tYXhfbnJfc3RyaXBlcyAqIChzaXplb2Yoc3RydWN0IHN0cmlwZV9oZWFkKSArCi0JCSBjb25mLT5yYWlkX2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0OwotCWlmIChncm93X3N0cmlwZXMoY29uZiwgY29uZi0+bWF4X25yX3N0cmlwZXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAKLQkJCSJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgJWRrQiBmb3IgYnVmZmVyc1xuIiwgbWVtb3J5KTsKLQkJc2hyaW5rX3N0cmlwZXMoY29uZik7Ci0JCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotCQlnb3RvIGFib3J0OwotCX0gZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJyYWlkNTogYWxsb2NhdGVkICVka0IgZm9yICVzXG4iLAotCQkJbWVtb3J5LCBtZG5hbWUobWRkZXYpKTsKLQogCWlmIChtZGRldi0+ZGVncmFkZWQgPT0gMCkKIAkJcHJpbnRrKCJyYWlkNTogcmFpZCBsZXZlbCAlZCBzZXQgJXMgYWN0aXZlIHdpdGggJWQgb3V0IG9mICVkIgotCQkJIiBkZXZpY2VzLCBhbGdvcml0aG0gJWRcbiIsIGNvbmYtPmxldmVsLCBtZG5hbWUobWRkZXYpLCAKLQkJCW1kZGV2LT5yYWlkX2Rpc2tzLW1kZGV2LT5kZWdyYWRlZCwgbWRkZXYtPnJhaWRfZGlza3MsCi0JCQljb25mLT5hbGdvcml0aG0pOworCQkgICAgICAgIiBkZXZpY2VzLCBhbGdvcml0aG0gJWRcbiIsIGNvbmYtPmxldmVsLCBtZG5hbWUobWRkZXYpLAorCQkgICAgICAgbWRkZXYtPnJhaWRfZGlza3MtbWRkZXYtPmRlZ3JhZGVkLCBtZGRldi0+cmFpZF9kaXNrcywKKwkJICAgICAgIG1kZGV2LT5uZXdfbGF5b3V0KTsKIAllbHNlCiAJCXByaW50ayhLRVJOX0FMRVJUICJyYWlkNTogcmFpZCBsZXZlbCAlZCBzZXQgJXMgYWN0aXZlIHdpdGggJWQiCiAJCQkiIG91dCBvZiAlZCBkZXZpY2VzLCBhbGdvcml0aG0gJWRcbiIsIGNvbmYtPmxldmVsLAogCQkJbWRuYW1lKG1kZGV2KSwgbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQsCi0JCQltZGRldi0+cmFpZF9kaXNrcywgY29uZi0+YWxnb3JpdGhtKTsKKwkJCW1kZGV2LT5yYWlkX2Rpc2tzLCBtZGRldi0+bmV3X2xheW91dCk7CiAKIAlwcmludF9yYWlkNV9jb25mKGNvbmYpOwogCi0JaWYgKGNvbmYtPmV4cGFuZF9wcm9ncmVzcyAhPSBNYXhTZWN0b3IpIHsKKwlpZiAoY29uZi0+cmVzaGFwZV9wcm9ncmVzcyAhPSBNYXhTZWN0b3IpIHsKIAkJcHJpbnRrKCIuLi5vayBzdGFydCByZXNoYXBlIHRocmVhZFxuIik7Ci0JCWNvbmYtPmV4cGFuZF9sbyA9IGNvbmYtPmV4cGFuZF9wcm9ncmVzczsKKwkJY29uZi0+cmVzaGFwZV9zYWZlID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKIAkJYXRvbWljX3NldCgmY29uZi0+cmVzaGFwZV9zdHJpcGVzLCAwKTsKIAkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOwogCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssICZtZGRldi0+cmVjb3ZlcnkpOwpAQCAtNDI0NywxOCArNDU4NywyMiBAQAogCQkgICAgICAgInJhaWQ1OiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZXMgZm9yICVzXG4iLAogCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7CiAKKwltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CisKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQ1X3VucGx1Z19kZXZpY2U7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9kYXRhID0gbWRkZXY7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQ1X2Nvbmdlc3RlZDsKIAotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gMiAqIG1kZGV2LT5zaXplICogKGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgLQotCQkJCQkgICAgY29uZi0+bWF4X2RlZ3JhZGVkKTsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDVfc2l6ZShtZGRldiwgMCwgMCkpOwogCiAJYmxrX3F1ZXVlX21lcmdlX2J2ZWMobWRkZXYtPnF1ZXVlLCByYWlkNV9tZXJnZWFibGVfYnZlYyk7CiAKIAlyZXR1cm4gMDsKIGFib3J0OgorCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCW1kZGV2LT50aHJlYWQgPSBOVUxMOwogCWlmIChjb25mKSB7CisJCXNocmlua19zdHJpcGVzKGNvbmYpOwogCQlwcmludF9yYWlkNV9jb25mKGNvbmYpOwogCQlzYWZlX3B1dF9wYWdlKGNvbmYtPnNwYXJlX3BhZ2UpOwogCQlrZnJlZShjb25mLT5kaXNrcyk7CkBAIC00Mzk2LDYgKzQ3NDAsMTAgQEAKIAlwcmludF9yYWlkNV9jb25mKGNvbmYpOwogCXJkZXYgPSBwLT5yZGV2OwogCWlmIChyZGV2KSB7CisJCWlmIChudW1iZXIgPj0gY29uZi0+cmFpZF9kaXNrcyAmJgorCQkgICAgY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9PSBNYXhTZWN0b3IpCisJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwogCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSB8fAogCQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQllcnIgPSAtRUJVU1k7CkBAIC00NDA1LDcgKzQ3NTMsOCBAQAogCQkgKiBpc24ndCBwb3NzaWJsZS4KIAkJICovCiAJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmCi0JCSAgICBtZGRldi0+ZGVncmFkZWQgPD0gY29uZi0+bWF4X2RlZ3JhZGVkKSB7CisJCSAgICBtZGRldi0+ZGVncmFkZWQgPD0gY29uZi0+bWF4X2RlZ3JhZGVkICYmCisJCSAgICBudW1iZXIgPCBjb25mLT5yYWlkX2Rpc2tzKSB7CiAJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIGFib3J0OwogCQl9CkBAIC00NDcyLDM2ICs0ODIxLDQ4IEBACiAJICogYW55IGlvIGluIHRoZSByZW1vdmVkIHNwYWNlIGNvbXBsZXRlcywgYnV0IGl0IGhhcmRseSBzZWVtcwogCSAqIHdvcnRoIGl0LgogCSAqLwotCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwotCiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+Y2h1bmtfc2l6ZS81MTIgLSAxKTsKLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNlY3RvcnMgKiAobWRkZXYtPnJhaWRfZGlza3MKLQkJCQkJICAtIGNvbmYtPm1heF9kZWdyYWRlZCk7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIHJhaWQ1X3NpemUobWRkZXYsIHNlY3RvcnMsCisJCQkJCSAgICAgICBtZGRldi0+cmFpZF9kaXNrcykpOworCWlmIChtZGRldi0+YXJyYXlfc2VjdG9ycyA+CisJICAgIHJhaWQ1X3NpemUobWRkZXYsIHNlY3RvcnMsIG1kZGV2LT5yYWlkX2Rpc2tzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJbWRkZXYtPmNoYW5nZWQgPSAxOwotCWlmIChzZWN0b3JzLzIgID4gbWRkZXYtPnNpemUgJiYgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgewotCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+c2l6ZSA8PCAxOworCWlmIChzZWN0b3JzID4gbWRkZXYtPmRldl9zZWN0b3JzICYmIG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpIHsKKwkJbWRkZXYtPnJlY292ZXJ5X2NwID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJfQotCW1kZGV2LT5zaXplID0gc2VjdG9ycyAvMjsKKwltZGRldi0+ZGV2X3NlY3RvcnMgPSBzZWN0b3JzOwogCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSBzZWN0b3JzOwogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUKIHN0YXRpYyBpbnQgcmFpZDVfY2hlY2tfcmVzaGFwZShtZGRldl90ICptZGRldikKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKLQlpbnQgZXJyOwogCi0JaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDAgfHwKLQkgICAgbWRkZXYtPm5ld19sZXZlbCAhPSBtZGRldi0+bGV2ZWwpCi0JCXJldHVybiAtRUlOVkFMOyAvKiBDYW5ub3Qgc2hyaW5rIGFycmF5IG9yIGNoYW5nZSBsZXZlbCB5ZXQgKi8KLQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID09IDApCi0JCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGRvICovCisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA9PSAwICYmCisJICAgIG1kZGV2LT5uZXdfbGF5b3V0ID09IG1kZGV2LT5sYXlvdXQgJiYKKwkgICAgbWRkZXYtPm5ld19jaHVuayA9PSBtZGRldi0+Y2h1bmtfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdGhpbmcgdG8gZG8gKi8KIAlpZiAobWRkZXYtPmJpdG1hcCkKIAkJLyogQ2Fubm90IGdyb3cgYSBiaXRtYXAgeWV0ICovCiAJCXJldHVybiAtRUJVU1k7CisJaWYgKG1kZGV2LT5kZWdyYWRlZCA+IGNvbmYtPm1heF9kZWdyYWRlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDApIHsKKwkJLyogV2UgbWlnaHQgYmUgYWJsZSB0byBzaHJpbmssIGJ1dCB0aGUgZGV2aWNlcyBtdXN0CisJCSAqIGJlIG1hZGUgYmlnZ2VyIGZpcnN0LgorCQkgKiBGb3IgcmFpZDYsIDQgaXMgdGhlIG1pbmltdW0gc2l6ZS4KKwkJICogT3RoZXJ3aXNlIDIgaXMgdGhlIG1pbmltdW0KKwkJICovCisJCWludCBtaW4gPSAyOworCQlpZiAobWRkZXYtPmxldmVsID09IDYpCisJCQltaW4gPSA0OworCQlpZiAobWRkZXYtPnJhaWRfZGlza3MgKyBtZGRldi0+ZGVsdGFfZGlza3MgPCBtaW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBDYW4gb25seSBwcm9jZWVkIGlmIHRoZXJlIGFyZSBwbGVudHkgb2Ygc3RyaXBlX2hlYWRzLgogCSAqIFdlIG5lZWQgYSBtaW5pbXVtIG9mIG9uZSBmdWxsIHN0cmlwZSwsIGFuZCBmb3Igc2Vuc2libGUgcHJvZ3Jlc3MKQEAgLTQ1MTQsMTggKzQ4NzUsMTIgQEAKIAlpZiAoKG1kZGV2LT5jaHVua19zaXplIC8gU1RSSVBFX1NJWkUpICogNCA+IGNvbmYtPm1heF9ucl9zdHJpcGVzIHx8CiAJICAgIChtZGRldi0+bmV3X2NodW5rIC8gU1RSSVBFX1NJWkUpICogNCA+IGNvbmYtPm1heF9ucl9zdHJpcGVzKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJhaWQ1OiByZXNoYXBlOiBub3QgZW5vdWdoIHN0cmlwZXMuICBOZWVkZWQgJWx1XG4iLAotCQkgICAgICAgKG1kZGV2LT5jaHVua19zaXplIC8gU1RSSVBFX1NJWkUpKjQpOworCQkgICAgICAgKG1heChtZGRldi0+Y2h1bmtfc2l6ZSwgbWRkZXYtPm5ld19jaHVuaykKKwkJCS8gU1RSSVBFX1NJWkUpKjQpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQllcnIgPSByZXNpemVfc3RyaXBlcyhjb25mLCBjb25mLT5yYWlkX2Rpc2tzICsgbWRkZXYtPmRlbHRhX2Rpc2tzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKG1kZGV2LT5kZWdyYWRlZCA+IGNvbmYtPm1heF9kZWdyYWRlZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JLyogbG9va3MgbGlrZSB3ZSBtaWdodCBiZSBhYmxlIHRvIG1hbmFnZSB0aGlzICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlc2l6ZV9zdHJpcGVzKGNvbmYsIGNvbmYtPnJhaWRfZGlza3MgKyBtZGRldi0+ZGVsdGFfZGlza3MpOwogfQogCiBzdGF0aWMgaW50IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUobWRkZXZfdCAqbWRkZXYpCkBAIC00NTUwLDEyICs0OTA1LDMxIEBACiAJCSAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIFJlZnVzZSB0byByZWR1Y2Ugc2l6ZSBvZiB0aGUgYXJyYXkuICBBbnkgcmVkdWN0aW9ucyBpbgorCSAqIGFycmF5IHNpemUgbXVzdCBiZSB0aHJvdWdoIGV4cGxpY2l0IHNldHRpbmcgb2YgYXJyYXlfc2l6ZQorCSAqIGF0dHJpYnV0ZS4KKwkgKi8KKwlpZiAocmFpZDVfc2l6ZShtZGRldiwgMCwgY29uZi0+cmFpZF9kaXNrcyArIG1kZGV2LT5kZWx0YV9kaXNrcykKKwkgICAgPCBtZGRldi0+YXJyYXlfc2VjdG9ycykgeworCQlwcmludGsoS0VSTl9FUlIgIm1kOiAlczogYXJyYXkgc2l6ZSBtdXN0IGJlIHJlZHVjZWQgIgorCQkgICAgICAgImJlZm9yZSBudW1iZXIgb2YgZGlza3NcbiIsIG1kbmFtZShtZGRldikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlhdG9taWNfc2V0KCZjb25mLT5yZXNoYXBlX3N0cmlwZXMsIDApOwogCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKIAljb25mLT5yYWlkX2Rpc2tzICs9IG1kZGV2LT5kZWx0YV9kaXNrczsKLQljb25mLT5leHBhbmRfcHJvZ3Jlc3MgPSAwOwotCWNvbmYtPmV4cGFuZF9sbyA9IDA7CisJY29uZi0+cHJldl9jaHVuayA9IGNvbmYtPmNodW5rX3NpemU7CisJY29uZi0+Y2h1bmtfc2l6ZSA9IG1kZGV2LT5uZXdfY2h1bms7CisJY29uZi0+cHJldl9hbGdvID0gY29uZi0+YWxnb3JpdGhtOworCWNvbmYtPmFsZ29yaXRobSA9IG1kZGV2LT5uZXdfbGF5b3V0OworCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPCAwKQorCQljb25mLT5yZXNoYXBlX3Byb2dyZXNzID0gcmFpZDVfc2l6ZShtZGRldiwgMCwgMCk7CisJZWxzZQorCQljb25mLT5yZXNoYXBlX3Byb2dyZXNzID0gMDsKKwljb25mLT5yZXNoYXBlX3NhZmUgPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOworCWNvbmYtPmdlbmVyYXRpb24rKzsKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAogCS8qIEFkZCBzb21lIG5ldyBkcml2ZXMsIGFzIG1hbnkgYXMgd2lsbCBmaXQuCkBAIC00NTgwLDkgKzQ5NTQsMTIgQEAKIAkJCQlicmVhazsKIAkJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7Ci0JbWRkZXYtPmRlZ3JhZGVkID0gKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKSAtIGFkZGVkX2RldmljZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID4gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJbWRkZXYtPmRlZ3JhZGVkID0gKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQorCQkJLSBhZGRlZF9kZXZpY2VzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCX0KIAltZGRldi0+cmFpZF9kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7CiAJbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPSAwOwogCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOwpAQCAtNDU5Nyw1MiArNDk3NCw4NiBAQAogCQltZGRldi0+cmVjb3ZlcnkgPSAwOwogCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCW1kZGV2LT5yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3M7Ci0JCWNvbmYtPmV4cGFuZF9wcm9ncmVzcyA9IE1heFNlY3RvcjsKKwkJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9IE1heFNlY3RvcjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KKwljb25mLT5yZXNoYXBlX2NoZWNrcG9pbnQgPSBqaWZmaWVzOwogCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsKIAltZF9uZXdfZXZlbnQobWRkZXYpOwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKKy8qIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIHJlc2hhcGUgdGhyZWFkIGFuZCBzaG91bGQgbWFrZSBhbnkKKyAqIGNoYW5nZXMgbmVlZGVkIGluICdjb25mJworICovCiBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShyYWlkNV9jb25mX3QgKmNvbmYpCiB7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAogCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJmNvbmYtPm1kZGV2LT5yZWNvdmVyeSkpIHsKLQkJY29uZi0+bWRkZXYtPmFycmF5X3NlY3RvcnMgPSAyICogY29uZi0+bWRkZXYtPnNpemUgKgotCQkJKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQpOwotCQlzZXRfY2FwYWNpdHkoY29uZi0+bWRkZXYtPmdlbmRpc2ssIGNvbmYtPm1kZGV2LT5hcnJheV9zZWN0b3JzKTsKLQkJY29uZi0+bWRkZXYtPmNoYW5nZWQgPSAxOwogCi0JCWJkZXYgPSBiZGdldF9kaXNrKGNvbmYtPm1kZGV2LT5nZW5kaXNrLCAwKTsKLQkJaWYgKGJkZXYpIHsKLQkJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKLQkJCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwKLQkJCQkgICAgIChsb2ZmX3QpY29uZi0+bWRkZXYtPmFycmF5X3NlY3RvcnMgPDwgOSk7Ci0JCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKLQkJCWJkcHV0KGJkZXYpOwotCQl9CiAJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJY29uZi0+ZXhwYW5kX3Byb2dyZXNzID0gTWF4U2VjdG9yOworCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKKwkJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9IE1heFNlY3RvcjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7Ci0JCWNvbmYtPm1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gTWF4U2VjdG9yOworCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9vdmVybGFwKTsKIAogCQkvKiByZWFkLWFoZWFkIHNpemUgbXVzdCBjb3ZlciB0d28gd2hvbGUgc3RyaXBlcywgd2hpY2ggaXMKIAkJICogMiAqIChkYXRhZGlza3MpICogY2h1bmtzaXplIHdoZXJlICduJyBpcyB0aGUgbnVtYmVyIG9mIHJhaWQgZGV2aWNlcwogCQkgKi8KIAkJewotCQkJaW50IGRhdGFfZGlza3MgPSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkOwotCQkJaW50IHN0cmlwZSA9IGRhdGFfZGlza3MgKgotCQkJCShjb25mLT5tZGRldi0+Y2h1bmtfc2l6ZSAvIFBBR0VfU0laRSk7CisJCQlpbnQgZGF0YV9kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQ7CisJCQlpbnQgc3RyaXBlID0gZGF0YV9kaXNrcyAqIChjb25mLT5jaHVua19zaXplCisJCQkJCQkgICAvIFBBR0VfU0laRSk7CiAJCQlpZiAoY29uZi0+bWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLnJhX3BhZ2VzIDwgMiAqIHN0cmlwZSkKIAkJCQljb25mLT5tZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSAyICogc3RyaXBlOwogCQl9CiAJfQogfQogCisvKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSByYWlkNWQgdGhyZWFkIHdpdGggbWRkZXZfbG9jayBoZWxkLgorICogSXQgbWFrZXMgY29uZmlnIGNoYW5nZXMgdG8gdGhlIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgcmFpZDVfZmluaXNoX3Jlc2hhcGUobWRkZXZfdCAqbWRkZXYpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKKworCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKKworCQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID4gMCkgeworCQkJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIHJhaWQ1X3NpemUobWRkZXYsIDAsIDApKTsKKwkJCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOworCQkJbWRkZXYtPmNoYW5nZWQgPSAxOworCisJCQliZGV2ID0gYmRnZXRfZGlzayhtZGRldi0+Z2VuZGlzaywgMCk7CisJCQlpZiAoYmRldikgeworCQkJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKKwkJCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsCisJCQkJCSAgICAgKGxvZmZfdCltZGRldi0+YXJyYXlfc2VjdG9ycyA8PCA5KTsKKwkJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKKwkJCQliZHB1dChiZGV2KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBkOworCQkJbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrczsKKwkJCWZvciAoZCA9IDA7IGQgPCBjb25mLT5yYWlkX2Rpc2tzIDsgZCsrKQorCQkJCWlmIChjb25mLT5kaXNrc1tkXS5yZGV2ICYmCisJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsCisJCQkJCSAgICAgJmNvbmYtPmRpc2tzW2RdLnJkZXYtPmZsYWdzKSkKKwkJCQkJbWRkZXYtPmRlZ3JhZGVkLS07CisJCQlmb3IgKGQgPSBjb25mLT5yYWlkX2Rpc2tzIDsKKwkJCSAgICAgZCA8IGNvbmYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7CisJCQkgICAgIGQrKykKKwkJCQlyYWlkNV9yZW1vdmVfZGlzayhtZGRldiwgZCk7CisJCX0KKwkJbWRkZXYtPmxheW91dCA9IGNvbmYtPmFsZ29yaXRobTsKKwkJbWRkZXYtPmNodW5rX3NpemUgPSBjb25mLT5jaHVua19zaXplOworCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IE1heFNlY3RvcjsKKwkJbWRkZXYtPmRlbHRhX2Rpc2tzID0gMDsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJhaWQ1X3F1aWVzY2UobWRkZXZfdCAqbWRkZXYsIGludCBzdGF0ZSkKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKQEAgLTQ2NzIsNiArNTA4MywyMTIgQEAKIAl9CiB9CiAKKworc3RhdGljIHZvaWQgKnJhaWQ1X3Rha2VvdmVyX3JhaWQxKG1kZGV2X3QgKm1kZGV2KQoreworCWludCBjaHVua3NlY3Q7CisKKwlpZiAobWRkZXYtPnJhaWRfZGlza3MgIT0gMiB8fAorCSAgICBtZGRldi0+ZGVncmFkZWQgPiAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIFNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgd3JpdGUtYmVoaW5kIGRldmljZXM/ICovCisKKwljaHVua3NlY3QgPSA2NCoyOyAvKiA2NEsgYnkgZGVmYXVsdCAqLworCisJLyogVGhlIGFycmF5IG11c3QgYmUgYW4gZXhhY3QgbXVsdGlwbGUgb2YgY2h1bmtzaXplICovCisJd2hpbGUgKGNodW5rc2VjdCAmJiAobWRkZXYtPmFycmF5X3NlY3RvcnMgJiAoY2h1bmtzZWN0LTEpKSkKKwkJY2h1bmtzZWN0ID4+PSAxOworCisJaWYgKChjaHVua3NlY3Q8PDkpIDwgU1RSSVBFX1NJWkUpCisJCS8qIGFycmF5IHNpemUgZG9lcyBub3QgYWxsb3cgYSBzdWl0YWJsZSBjaHVuayBzaXplICovCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJbWRkZXYtPm5ld19sZXZlbCA9IDU7CisJbWRkZXYtPm5ld19sYXlvdXQgPSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUM7CisJbWRkZXYtPm5ld19jaHVuayA9IGNodW5rc2VjdCA8PCA5OworCisJcmV0dXJuIHNldHVwX2NvbmYobWRkZXYpOworfQorCitzdGF0aWMgdm9pZCAqcmFpZDVfdGFrZW92ZXJfcmFpZDYobWRkZXZfdCAqbWRkZXYpCit7CisJaW50IG5ld19sYXlvdXQ7CisKKwlzd2l0Y2ggKG1kZGV2LT5sYXlvdXQpIHsKKwljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUNfNjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUM7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQ182OgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUNfNjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUM7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wXzY6CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fUEFSSVRZXzA7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1BBUklUWV9OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisJbWRkZXYtPm5ld19sZXZlbCA9IDU7CisJbWRkZXYtPm5ld19sYXlvdXQgPSBuZXdfbGF5b3V0OworCW1kZGV2LT5kZWx0YV9kaXNrcyA9IC0xOworCW1kZGV2LT5yYWlkX2Rpc2tzIC09IDE7CisJcmV0dXJuIHNldHVwX2NvbmYobWRkZXYpOworfQorCisKK3N0YXRpYyBpbnQgcmFpZDVfcmVjb25maWcobWRkZXZfdCAqbWRkZXYsIGludCBuZXdfbGF5b3V0LCBpbnQgbmV3X2NodW5rKQoreworCS8qIEZvciBhIDItZHJpdmUgYXJyYXksIHRoZSBsYXlvdXQgYW5kIGNodW5rIHNpemUgY2FuIGJlIGNoYW5nZWQKKwkgKiBpbW1lZGlhdGVseSBhcyBub3QgcmVzdHJpcGluZyBpcyBuZWVkZWQuCisJICogRm9yIGxhcmdlciBhcnJheXMgd2UgcmVjb3JkIHRoZSBuZXcgdmFsdWUgLSBhZnRlciB2YWxpZGF0aW9uCisJICogdG8gYmUgdXNlZCBieSBhIHJlc2hhcGUgcGFzcy4KKwkgKi8KKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKKworCWlmIChuZXdfbGF5b3V0ID49IDAgJiYgIWFsZ29yaXRobV92YWxpZF9yYWlkNShuZXdfbGF5b3V0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5ld19jaHVuayA+IDApIHsKKwkJaWYgKG5ld19jaHVuayAmIChuZXdfY2h1bmstMSkpCisJCQkvKiBub3QgYSBwb3dlciBvZiAyICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG5ld19jaHVuayA8IFBBR0VfU0laRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobWRkZXYtPmFycmF5X3NlY3RvcnMgJiAoKG5ld19jaHVuaz4+OSktMSkpCisJCQkvKiBub3QgZmFjdG9yIG9mIGFycmF5IHNpemUgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRoZXkgbG9vayB2YWxpZCAqLworCisJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzID09IDIpIHsKKworCQlpZiAobmV3X2xheW91dCA+PSAwKSB7CisJCQljb25mLT5hbGdvcml0aG0gPSBuZXdfbGF5b3V0OworCQkJbWRkZXYtPmxheW91dCA9IG1kZGV2LT5uZXdfbGF5b3V0ID0gbmV3X2xheW91dDsKKwkJfQorCQlpZiAobmV3X2NodW5rID4gMCkgeworCQkJY29uZi0+Y2h1bmtfc2l6ZSA9IG5ld19jaHVuazsKKwkJCW1kZGV2LT5jaHVua19zaXplID0gbWRkZXYtPm5ld19jaHVuayA9IG5ld19jaHVuazsKKwkJfQorCQlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwl9IGVsc2UgeworCQlpZiAobmV3X2xheW91dCA+PSAwKQorCQkJbWRkZXYtPm5ld19sYXlvdXQgPSBuZXdfbGF5b3V0OworCQlpZiAobmV3X2NodW5rID4gMCkKKwkJCW1kZGV2LT5uZXdfY2h1bmsgPSBuZXdfY2h1bms7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhaWQ2X3JlY29uZmlnKG1kZGV2X3QgKm1kZGV2LCBpbnQgbmV3X2xheW91dCwgaW50IG5ld19jaHVuaykKK3sKKwlpZiAobmV3X2xheW91dCA+PSAwICYmICFhbGdvcml0aG1fdmFsaWRfcmFpZDYobmV3X2xheW91dCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChuZXdfY2h1bmsgPiAwKSB7CisJCWlmIChuZXdfY2h1bmsgJiAobmV3X2NodW5rLTEpKQorCQkJLyogbm90IGEgcG93ZXIgb2YgMiAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChuZXdfY2h1bmsgPCBQQUdFX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG1kZGV2LT5hcnJheV9zZWN0b3JzICYgKChuZXdfY2h1bms+PjkpLTEpKQorCQkJLyogbm90IGZhY3RvciBvZiBhcnJheSBzaXplICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGV5IGxvb2sgdmFsaWQgKi8KKworCWlmIChuZXdfbGF5b3V0ID49IDApCisJCW1kZGV2LT5uZXdfbGF5b3V0ID0gbmV3X2xheW91dDsKKwlpZiAobmV3X2NodW5rID4gMCkKKwkJbWRkZXYtPm5ld19jaHVuayA9IG5ld19jaHVuazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqcmFpZDVfdGFrZW92ZXIobWRkZXZfdCAqbWRkZXYpCit7CisJLyogcmFpZDUgY2FuIHRha2Ugb3ZlcjoKKwkgKiAgcmFpZDAgLSBpZiBhbGwgZGV2aWNlcyBhcmUgdGhlIHNhbWUgLSBtYWtlIGl0IGEgcmFpZDQgbGF5b3V0CisJICogIHJhaWQxIC0gaWYgdGhlcmUgYXJlIHR3byBkcml2ZXMuICBXZSBuZWVkIHRvIGtub3cgdGhlIGNodW5rIHNpemUKKwkgKiAgcmFpZDQgLSB0cml2aWFsIC0ganVzdCB1c2UgYSByYWlkNCBsYXlvdXQuCisJICogIHJhaWQ2IC0gUHJvdmlkaW5nIGl0IGlzIGEgKl82IGxheW91dAorCSAqCisJICogRm9yIG5vdywganVzdCBkbyByYWlkMQorCSAqLworCisJaWYgKG1kZGV2LT5sZXZlbCA9PSAxKQorCQlyZXR1cm4gcmFpZDVfdGFrZW92ZXJfcmFpZDEobWRkZXYpOworCWlmIChtZGRldi0+bGV2ZWwgPT0gNCkgeworCQltZGRldi0+bmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfTjsKKwkJbWRkZXYtPm5ld19sZXZlbCA9IDU7CisJCXJldHVybiBzZXR1cF9jb25mKG1kZGV2KTsKKwl9CisJaWYgKG1kZGV2LT5sZXZlbCA9PSA2KQorCQlyZXR1cm4gcmFpZDVfdGFrZW92ZXJfcmFpZDYobWRkZXYpOworCisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKKworc3RhdGljIHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgcmFpZDVfcGVyc29uYWxpdHk7CisKK3N0YXRpYyB2b2lkICpyYWlkNl90YWtlb3ZlcihtZGRldl90ICptZGRldikKK3sKKwkvKiBDdXJyZW50bHkgY2FuIG9ubHkgdGFrZSBvdmVyIGEgcmFpZDUuICBXZSBtYXAgdGhlCisJICogcGVyc29uYWxpdHkgdG8gYW4gZXF1aXZhbGVudCByYWlkNiBwZXJzb25hbGl0eQorCSAqIHdpdGggdGhlIFEgYmxvY2sgYXQgdGhlIGVuZC4KKwkgKi8KKwlpbnQgbmV3X2xheW91dDsKKworCWlmIChtZGRldi0+cGVycyAhPSAmcmFpZDVfcGVyc29uYWxpdHkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChtZGRldi0+ZGVncmFkZWQgPiAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlpZiAobWRkZXYtPnJhaWRfZGlza3MgPiAyNTMpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChtZGRldi0+cmFpZF9kaXNrcyA8IDMpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJc3dpdGNoIChtZGRldi0+bGF5b3V0KSB7CisJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182OworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUM6CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUNfNjsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQ182OworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfMDoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfMF82OworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCW1kZGV2LT5uZXdfbGV2ZWwgPSA2OworCW1kZGV2LT5uZXdfbGF5b3V0ID0gbmV3X2xheW91dDsKKwltZGRldi0+ZGVsdGFfZGlza3MgPSAxOworCW1kZGV2LT5yYWlkX2Rpc2tzICs9IDE7CisJcmV0dXJuIHNldHVwX2NvbmYobWRkZXYpOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5IHJhaWQ2X3BlcnNvbmFsaXR5ID0KIHsKIAkubmFtZQkJPSAicmFpZDYiLApAQCAtNDY4NywxMSArNTMwNCwxMyBAQAogCS5zcGFyZV9hY3RpdmUJPSByYWlkNV9zcGFyZV9hY3RpdmUsCiAJLnN5bmNfcmVxdWVzdAk9IHN5bmNfcmVxdWVzdCwKIAkucmVzaXplCQk9IHJhaWQ1X3Jlc2l6ZSwKLSNpZmRlZiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRQorCS5zaXplCQk9IHJhaWQ1X3NpemUsCiAJLmNoZWNrX3Jlc2hhcGUJPSByYWlkNV9jaGVja19yZXNoYXBlLAogCS5zdGFydF9yZXNoYXBlICA9IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUsCi0jZW5kaWYKKwkuZmluaXNoX3Jlc2hhcGUgPSByYWlkNV9maW5pc2hfcmVzaGFwZSwKIAkucXVpZXNjZQk9IHJhaWQ1X3F1aWVzY2UsCisJLnRha2VvdmVyCT0gcmFpZDZfdGFrZW92ZXIsCisJLnJlY29uZmlnCT0gcmFpZDZfcmVjb25maWcsCiB9Owogc3RhdGljIHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgcmFpZDVfcGVyc29uYWxpdHkgPQogewpAQCAtNDcwOCwxMSArNTMyNywxMyBAQAogCS5zcGFyZV9hY3RpdmUJPSByYWlkNV9zcGFyZV9hY3RpdmUsCiAJLnN5bmNfcmVxdWVzdAk9IHN5bmNfcmVxdWVzdCwKIAkucmVzaXplCQk9IHJhaWQ1X3Jlc2l6ZSwKLSNpZmRlZiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRQorCS5zaXplCQk9IHJhaWQ1X3NpemUsCiAJLmNoZWNrX3Jlc2hhcGUJPSByYWlkNV9jaGVja19yZXNoYXBlLAogCS5zdGFydF9yZXNoYXBlICA9IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUsCi0jZW5kaWYKKwkuZmluaXNoX3Jlc2hhcGUgPSByYWlkNV9maW5pc2hfcmVzaGFwZSwKIAkucXVpZXNjZQk9IHJhaWQ1X3F1aWVzY2UsCisJLnRha2VvdmVyCT0gcmFpZDVfdGFrZW92ZXIsCisJLnJlY29uZmlnCT0gcmFpZDVfcmVjb25maWcsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1ka19wZXJzb25hbGl0eSByYWlkNF9wZXJzb25hbGl0eSA9CkBAIC00NzMwLDIwICs1MzUxLDE1IEBACiAJLnNwYXJlX2FjdGl2ZQk9IHJhaWQ1X3NwYXJlX2FjdGl2ZSwKIAkuc3luY19yZXF1ZXN0CT0gc3luY19yZXF1ZXN0LAogCS5yZXNpemUJCT0gcmFpZDVfcmVzaXplLAotI2lmZGVmIENPTkZJR19NRF9SQUlENV9SRVNIQVBFCisJLnNpemUJCT0gcmFpZDVfc2l6ZSwKIAkuY2hlY2tfcmVzaGFwZQk9IHJhaWQ1X2NoZWNrX3Jlc2hhcGUsCiAJLnN0YXJ0X3Jlc2hhcGUgID0gcmFpZDVfc3RhcnRfcmVzaGFwZSwKLSNlbmRpZgorCS5maW5pc2hfcmVzaGFwZSA9IHJhaWQ1X2ZpbmlzaF9yZXNoYXBlLAogCS5xdWllc2NlCT0gcmFpZDVfcXVpZXNjZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJhaWQ1X2luaXQodm9pZCkKIHsKLQlpbnQgZTsKLQotCWUgPSByYWlkNl9zZWxlY3RfYWxnbygpOwotCWlmICggZSApCi0JCXJldHVybiBlOwogCXJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KCZyYWlkNl9wZXJzb25hbGl0eSk7CiAJcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoJnJhaWQ1X3BlcnNvbmFsaXR5KTsKIAlyZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSgmcmFpZDRfcGVyc29uYWxpdHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5oIGIvZHJpdmVycy9tZC9yYWlkNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYmE5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21kL3JhaWQ1LmgKQEAgLTAsMCArMSw0NzQgQEAKKyNpZm5kZWYgX1JBSUQ1X0gKKyNkZWZpbmUgX1JBSUQ1X0gKKworI2luY2x1ZGUgPGxpbnV4L3JhaWQveG9yLmg+CisKKy8qCisgKgorICogRWFjaCBzdHJpcGUgY29udGFpbnMgb25lIGJ1ZmZlciBwZXIgZGlzYy4gIEVhY2ggYnVmZmVyIGNhbiBiZSBpbgorICogb25lIG9mIGEgbnVtYmVyIG9mIHN0YXRlcyBzdG9yZWQgaW4gImZsYWdzIi4gIENoYW5nZXMgYmV0d2VlbgorICogdGhlc2Ugc3RhdGVzIGhhcHBlbiAqYWxtb3N0KiBleGNsdXNpdmVseSB1bmRlciBhIHBlci1zdHJpcGUKKyAqIHNwaW5sb2NrLiAgU29tZSB2ZXJ5IHNwZWNpZmljIGNoYW5nZXMgY2FuIGhhcHBlbiBpbiBiaV9lbmRfaW8sIGFuZAorICogdGhlc2UgYXJlIG5vdCBwcm90ZWN0ZWQgYnkgdGhlIHNwaW4gbG9jay4KKyAqCisgKiBUaGUgZmxhZyBiaXRzIHRoYXQgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIHN0YXRlcyBhcmU6CisgKiAgIFI1X1VQVE9EQVRFIGFuZCBSNV9MT0NLRUQKKyAqCisgKiBTdGF0ZSBFbXB0eSA9PSAhVVBUT0RBVEUsICFMT0NLCisgKiAgICAgICAgV2UgaGF2ZSBubyBkYXRhLCBhbmQgdGhlcmUgaXMgbm8gYWN0aXZlIHJlcXVlc3QKKyAqIFN0YXRlIFdhbnQgPT0gIVVQVE9EQVRFLCBMT0NLCisgKiAgICAgICAgQSByZWFkIHJlcXVlc3QgaXMgYmVpbmcgc3VibWl0dGVkIGZvciB0aGlzIGJsb2NrCisgKiBTdGF0ZSBEaXJ0eSA9PSBVUFRPREFURSwgTE9DSworICogICAgICAgIFNvbWUgbmV3IGRhdGEgaXMgaW4gdGhpcyBidWZmZXIsIGFuZCBpdCBpcyBiZWluZyB3cml0dGVuIG91dAorICogU3RhdGUgQ2xlYW4gPT0gVVBUT0RBVEUsICFMT0NLCisgKiAgICAgICAgV2UgaGF2ZSB2YWxpZCBkYXRhIHdoaWNoIGlzIHRoZSBzYW1lIGFzIG9uIGRpc2MKKyAqCisgKiBUaGUgcG9zc2libGUgc3RhdGUgdHJhbnNpdGlvbnMgYXJlOgorICoKKyAqICBFbXB0eSAtPiBXYW50ICAgLSBvbiByZWFkIG9yIHdyaXRlIHRvIGdldCBvbGQgZGF0YSBmb3IgIHBhcml0eSBjYWxjCisgKiAgRW1wdHkgLT4gRGlydHkgIC0gb24gY29tcHV0ZV9wYXJpdHkgdG8gc2F0aXNmeSB3cml0ZS9zeW5jIHJlcXVlc3QuKFJFQ09OU1RSVUNUX1dSSVRFKQorICogIEVtcHR5IC0+IENsZWFuICAtIG9uIGNvbXB1dGVfYmxvY2sgd2hlbiBjb21wdXRpbmcgYSBibG9jayBmb3IgZmFpbGVkIGRyaXZlCisgKiAgV2FudCAgLT4gRW1wdHkgIC0gb24gZmFpbGVkIHJlYWQKKyAqICBXYW50ICAtPiBDbGVhbiAgLSBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgcmVhZCByZXF1ZXN0CisgKiAgRGlydHkgLT4gQ2xlYW4gIC0gb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHdyaXRlIHJlcXVlc3QKKyAqICBEaXJ0eSAtPiBDbGVhbiAgLSBvbiBmYWlsZWQgd3JpdGUKKyAqICBDbGVhbiAtPiBEaXJ0eSAgLSBvbiBjb21wdXRlX3Bhcml0eSB0byBzYXRpc2Z5IHdyaXRlL3N5bmMgKFJFQ09OU1RSVUNUIG9yIFJNVykKKyAqCisgKiBUaGUgV2FudC0+RW1wdHksIFdhbnQtPkNsZWFuLCBEaXJ0eS0+Q2xlYW4sIHRyYW5zaXRpb25zCisgKiBhbGwgaGFwcGVuIGluIGJfZW5kX2lvIGF0IGludGVycnVwdCB0aW1lLgorICogRWFjaCBzZXRzIHRoZSBVcHRvZGF0ZSBiaXQgYmVmb3JlIHJlbGVhc2luZyB0aGUgTG9jayBiaXQuCisgKiBUaGlzIGxlYXZlcyBvbmUgbXVsdGktc3RhZ2UgdHJhbnNpdGlvbjoKKyAqICAgIFdhbnQtPkRpcnR5LT5DbGVhbgorICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgdGhpbmtpbmcgdGhhdCBhIENsZWFuIGJ1ZmZlciBpcyBhY3R1YWxseSBkaXJ0eQorICogd2lsbCBhdCB3b3JzdCBkZWxheSBzb21lIGFjdGlvbiwgYW5kIHRoZSBzdHJpcGUgd2lsbCBiZSBzY2hlZHVsZWQKKyAqIGZvciBhdHRlbnRpb24gYWZ0ZXIgdGhlIHRyYW5zaXRpb24gaXMgY29tcGxldGUuCisgKgorICogVGhlcmUgaXMgb25lIHBvc3NpYmlsaXR5IHRoYXQgaXMgbm90IGNvdmVyZWQgYnkgdGhlc2Ugc3RhdGVzLiAgVGhhdAorICogaXMgaWYgb25lIGRyaXZlIGhhcyBmYWlsZWQgYW5kIHRoZXJlIGlzIGEgc3BhcmUgYmVpbmcgcmVidWlsdC4gIFdlCisgKiBjYW4ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgY2xlYW4gYmxvY2sgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQKKyAqIGZyb20gcGFyaXR5IGNhbGN1bGF0aW9ucywgYW5kIGEgY2xlYW4gYmxvY2sgdGhhdCBoYXMgYmVlbgorICogc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlIHNwYXJlICggb3IgdG8gcGFyaXR5IHdoZW4gcmVzeW5jaW5nKS4KKyAqIFRvIGRpc3Rpbmd1c2ggdGhlc2Ugc3RhdGVzIHdlIGhhdmUgYSBzdHJpcGUgYml0IFNUUklQRV9JTlNZTkMgdGhhdAorICogaXMgc2V0IHdoZW5ldmVyIGEgd3JpdGUgaXMgc2NoZWR1bGVkIHRvIHRoZSBzcGFyZSwgb3IgdG8gdGhlIHBhcml0eQorICogZGlzYyBpZiB0aGVyZSBpcyBubyBzcGFyZS4gIEEgc3luYyByZXF1ZXN0IGNsZWFycyB0aGlzIGJpdCwgYW5kCisgKiB3aGVuIHdlIGZpbmQgaXQgc2V0IHdpdGggbm8gYnVmZmVycyBsb2NrZWQsIHdlIGtub3cgdGhlIHN5bmMgaXMKKyAqIGNvbXBsZXRlLgorICoKKyAqIEJ1ZmZlcnMgZm9yIHRoZSBtZCBkZXZpY2UgdGhhdCBhcnJpdmUgdmlhIG1ha2VfcmVxdWVzdCBhcmUgYXR0YWNoZWQKKyAqIHRvIHRoZSBhcHByb3ByaWF0ZSBzdHJpcGUgaW4gb25lIG9mIHR3byBsaXN0cyBsaW5rZWQgb24gYl9yZXFuZXh0LgorICogT25lIGxpc3QgKGJoX3JlYWQpIGZvciByZWFkIHJlcXVlc3RzLCBvbmUgKGJoX3dyaXRlKSBmb3Igd3JpdGUuCisgKiBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0aGFuIG9uZSBidWZmZXIgb24gdGhlIHR3byBsaXN0cworICogdG9nZXRoZXIsIGJ1dCB3ZSBhcmUgbm90IGd1YXJhbnRlZWQgb2YgdGhhdCBzbyB3ZSBhbGxvdyBmb3IgbW9yZS4KKyAqCisgKiBJZiBhIGJ1ZmZlciBpcyBvbiB0aGUgcmVhZCBsaXN0IHdoZW4gdGhlIGFzc29jaWF0ZWQgY2FjaGUgYnVmZmVyIGlzCisgKiBVcHRvZGF0ZSwgdGhlIGRhdGEgaXMgY29waWVkIGludG8gdGhlIHJlYWQgYnVmZmVyIGFuZCBpdCdzIGJfZW5kX2lvCisgKiByb3V0aW5lIGlzIGNhbGxlZC4gIFRoaXMgbWF5IGhhcHBlbiBpbiB0aGUgZW5kX3JlcXVlc3Qgcm91dGluZSBvbmx5CisgKiBpZiB0aGUgYnVmZmVyIGhhcyBqdXN0IHN1Y2Nlc3NmdWxseSBiZWVuIHJlYWQuICBlbmRfcmVxdWVzdCBzaG91bGQKKyAqIHJlbW92ZSB0aGUgYnVmZmVycyBmcm9tIHRoZSBsaXN0IGFuZCB0aGVuIHNldCB0aGUgVXB0b2RhdGUgYml0IG9uCisgKiB0aGUgYnVmZmVyLiAgT3RoZXIgdGhyZWFkcyBtYXkgZG8gdGhpcyBvbmx5IGlmIHRoZXkgZmlyc3QgY2hlY2sKKyAqIHRoYXQgdGhlIFVwdG9kYXRlIGJpdCBpcyBzZXQuICBPbmNlIHRoZXkgaGF2ZSBjaGVja2VkIHRoYXQgdGhleSBtYXkKKyAqIHRha2UgYnVmZmVycyBvZmYgdGhlIHJlYWQgcXVldWUuCisgKgorICogV2hlbiBhIGJ1ZmZlciBvbiB0aGUgd3JpdGUgbGlzdCBpcyBjb21taXR0ZWQgZm9yIHdyaXRlIGl0IGlzIGNvcGllZAorICogaW50byB0aGUgY2FjaGUgYnVmZmVyLCB3aGljaCBpcyB0aGVuIG1hcmtlZCBkaXJ0eSwgYW5kIG1vdmVkIG9udG8gYQorICogdGhpcmQgbGlzdCwgdGhlIHdyaXR0ZW4gbGlzdCAoYmhfd3JpdHRlbikuICBPbmNlIGJvdGggdGhlIHBhcml0eQorICogYmxvY2sgYW5kIHRoZSBjYWNoZWQgYnVmZmVyIGFyZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiwgYW55IGJ1ZmZlciBvbgorICogYSB3cml0dGVuIGxpc3QgY2FuIGJlIHJldHVybmVkIHdpdGggYl9lbmRfaW8uCisgKgorICogVGhlIHdyaXRlIGxpc3QgYW5kIHJlYWQgbGlzdCBib3RoIGFjdCBhcyBmaWZvcy4gIFRoZSByZWFkIGxpc3QgaXMKKyAqIHByb3RlY3RlZCBieSB0aGUgZGV2aWNlX2xvY2suICBUaGUgd3JpdGUgYW5kIHdyaXR0ZW4gbGlzdHMgYXJlCisgKiBwcm90ZWN0ZWQgYnkgdGhlIHN0cmlwZSBsb2NrLiAgVGhlIGRldmljZV9sb2NrLCB3aGljaCBjYW4gYmUKKyAqIGNsYWltZWQgd2hpbGUgdGhlIHN0aXBlIGxvY2sgaXMgaGVsZCwgaXMgb25seSBmb3IgbGlzdAorICogbWFuaXB1bGF0aW9ucyBhbmQgd2lsbCBvbmx5IGJlIGhlbGQgZm9yIGEgdmVyeSBzaG9ydCB0aW1lLiAgSXQgY2FuCisgKiBiZSBjbGFpbWVkIGZyb20gaW50ZXJydXB0cy4KKyAqCisgKgorICogU3RyaXBlcyBpbiB0aGUgc3RyaXBlIGNhY2hlIGNhbiBiZSBvbiBvbmUgb2YgdHdvIGxpc3RzIChvciBvbgorICogbmVpdGhlcikuICBUaGUgImluYWN0aXZlX2xpc3QiIGNvbnRhaW5zIHN0cmlwZXMgd2hpY2ggYXJlIG5vdAorICogY3VycmVudGx5IGJlaW5nIHVzZWQgZm9yIGFueSByZXF1ZXN0LiAgVGhleSBjYW4gZnJlZWx5IGJlIHJldXNlZAorICogZm9yIGFub3RoZXIgc3RyaXBlLiAgVGhlICJoYW5kbGVfbGlzdCIgY29udGFpbnMgc3RyaXBlcyB0aGF0IG5lZWQKKyAqIHRvIGJlIGhhbmRsZWQgaW4gc29tZSB3YXkuICBCb3RoIG9mIHRoZXNlIGFyZSBmaWZvIHF1ZXVlcy4gIEVhY2gKKyAqIHN0cmlwZSBpcyBhbHNvIChwb3RlbnRpYWxseSkgbGlua2VkIHRvIGEgaGFzaCBidWNrZXQgaW4gdGhlIGhhc2gKKyAqIHRhYmxlIHNvIHRoYXQgaXQgY2FuIGJlIGZvdW5kIGJ5IHNlY3RvciBudW1iZXIuICBTdHJpcGVzIHRoYXQgYXJlCisgKiBub3QgaGFzaGVkIG11c3QgYmUgb24gdGhlIGluYWN0aXZlX2xpc3QsIGFuZCB3aWxsIG5vcm1hbGx5IGJlIGF0CisgKiB0aGUgZnJvbnQuICBBbGwgc3RyaXBlcyBzdGFydCBsaWZlIHRoaXMgd2F5LgorICoKKyAqIFRoZSBpbmFjdGl2ZV9saXN0LCBoYW5kbGVfbGlzdCBhbmQgaGFzaCBidWNrZXQgbGlzdHMgYXJlIGFsbCBwcm90ZWN0ZWQgYnkgdGhlCisgKiBkZXZpY2VfbG9jay4KKyAqICAtIHN0cmlwZXMgb24gdGhlIGluYWN0aXZlX2xpc3QgbmV2ZXIgaGF2ZSB0aGVpciBzdHJpcGVfbG9jayBoZWxkLgorICogIC0gc3RyaXBlcyBoYXZlIGEgcmVmZXJlbmNlIGNvdW50ZXIuIElmIGNvdW50PT0wLCB0aGV5IGFyZSBvbiBhIGxpc3QuCisgKiAgLSBJZiBhIHN0cmlwZSBtaWdodCBuZWVkIGhhbmRsaW5nLCBTVFJJUEVfSEFORExFIGlzIHNldC4KKyAqICAtIFdoZW4gcmVmY291bnQgcmVhY2hlcyB6ZXJvLCB0aGVuIGlmIFNUUklQRV9IQU5ETEUgaXQgaXMgcHV0IG9uCisgKiAgICBoYW5kbGVfbGlzdCBlbHNlIGluYWN0aXZlX2xpc3QKKyAqCisgKiBUaGlzLCBjb21iaW5lZCB3aXRoIHRoZSBmYWN0IHRoYXQgU1RSSVBFX0hBTkRMRSBpcyBvbmx5IGV2ZXIKKyAqIGNsZWFyZWQgd2hpbGUgYSBzdHJpcGUgaGFzIGEgbm9uLXplcm8gY291bnQgbWVhbnMgdGhhdCBpZiB0aGUKKyAqIHJlZmNvdW50IGlzIDAgYW5kIFNUUklQRV9IQU5ETEUgaXMgc2V0LCB0aGVuIGl0IGlzIG9uIHRoZQorICogaGFuZGxlX2xpc3QgYW5kIGlmIHJlY291bnQgaXMgMCBhbmQgU1RSSVBFX0hBTkRMRSBpcyBub3Qgc2V0LCB0aGVuCisgKiB0aGUgc3RyaXBlIGlzIG9uIGluYWN0aXZlX2xpc3QuCisgKgorICogVGhlIHBvc3NpYmxlIHRyYW5zaXRpb25zIGFyZToKKyAqICBhY3RpdmF0ZSBhbiB1bmhhc2hlZC9pbmFjdGl2ZSBzdHJpcGUgKGdldF9hY3RpdmVfc3RyaXBlKCkpCisgKiAgICAgbG9ja2RldiBjaGVjay1oYXNoIHVubGluay1zdHJpcGUgY250KysgY2xlYW4tc3RyaXBlIGhhc2gtc3RyaXBlIHVubG9ja2RldgorICogIGFjdGl2YXRlIGEgaGFzaGVkLCBwb3NzaWJseSBhY3RpdmUgc3RyaXBlIChnZXRfYWN0aXZlX3N0cmlwZSgpKQorICogICAgIGxvY2tkZXYgY2hlY2staGFzaCBpZighY250KyspdW5saW5rLXN0cmlwZSB1bmxvY2tkZXYKKyAqICBhdHRhY2ggYSByZXF1ZXN0IHRvIGFuIGFjdGl2ZSBzdHJpcGUgKGFkZF9zdHJpcGVfYmgoKSkKKyAqICAgICBsb2NrZGV2IGF0dGFjaC1idWZmZXIgdW5sb2NrZGV2CisgKiAgaGFuZGxlIGEgc3RyaXBlIChoYW5kbGVfc3RyaXBlKCkpCisgKiAgICAgbG9ja3N0cmlwZSBjbHJTVFJJUEVfSEFORExFIC4uLgorICoJCShsb2NrZGV2IGNoZWNrLWJ1ZmZlcnMgdW5sb2NrZGV2KSAuLgorICoJCWNoYW5nZS1zdGF0ZSAuLgorICoJCXJlY29yZCBpby9vcHMgbmVlZGVkIHVubG9ja3N0cmlwZSBzY2hlZHVsZSBpby9vcHMKKyAqICByZWxlYXNlIGFuIGFjdGl2ZSBzdHJpcGUgKHJlbGVhc2Vfc3RyaXBlKCkpCisgKiAgICAgbG9ja2RldiBpZiAoIS0tY250KSB7IGlmICBTVFJJUEVfSEFORExFLCBhZGQgdG8gaGFuZGxlX2xpc3QgZWxzZSBhZGQgdG8gaW5hY3RpdmUtbGlzdCB9IHVubG9ja2RldgorICoKKyAqIFRoZSByZWZjb3VudCBjb3VudHMgZWFjaCB0aHJlYWQgdGhhdCBoYXZlIGFjdGl2YXRlZCB0aGUgc3RyaXBlLAorICogcGx1cyByYWlkNWQgaWYgaXQgaXMgaGFuZGxpbmcgaXQsIHBsdXMgb25lIGZvciBlYWNoIGFjdGl2ZSByZXF1ZXN0CisgKiBvbiBhIGNhY2hlZCBidWZmZXIsIGFuZCBwbHVzIG9uZSBpZiB0aGUgc3RyaXBlIGlzIHVuZGVyZ29pbmcgc3RyaXBlCisgKiBvcGVyYXRpb25zLgorICoKKyAqIFN0cmlwZSBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgb3V0c2lkZSB0aGUgc3RyaXBlIGxvY2ssCisgKiB0aGUgc3RyaXBlIG9wZXJhdGlvbnMgYXJlOgorICogLWNvcHlpbmcgZGF0YSBiZXR3ZWVuIHRoZSBzdHJpcGUgY2FjaGUgYW5kIHVzZXIgYXBwbGljYXRpb24gYnVmZmVycworICogLWNvbXB1dGluZyBibG9ja3MgdG8gc2F2ZSBhIGRpc2sgYWNjZXNzLCBvciB0byByZWNvdmVyIGEgbWlzc2luZyBibG9jaworICogLXVwZGF0aW5nIHRoZSBwYXJpdHkgb24gYSB3cml0ZSBvcGVyYXRpb24gKHJlY29uc3RydWN0IHdyaXRlIGFuZAorICogIHJlYWQtbW9kaWZ5LXdyaXRlKQorICogLWNoZWNraW5nIHBhcml0eSBjb3JyZWN0bmVzcworICogLXJ1bm5pbmcgaS9vIHRvIGRpc2sKKyAqIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGNhcnJpZWQgb3V0IGJ5IHJhaWQ1X3J1bl9vcHMgd2hpY2ggdXNlcyB0aGUgYXN5bmNfdHgKKyAqIGFwaSB0byAob3B0aW9uYWxseSkgb2ZmbG9hZCBvcGVyYXRpb25zIHRvIGRlZGljYXRlZCBoYXJkd2FyZSBlbmdpbmVzLgorICogV2hlbiByZXF1ZXN0aW5nIGFuIG9wZXJhdGlvbiBoYW5kbGVfc3RyaXBlIHNldHMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUKKyAqIG9wZXJhdGlvbiBhbmQgaW5jcmVtZW50cyB0aGUgY291bnQuICByYWlkNV9ydW5fb3BzIGlzIHRoZW4gcnVuIHdoZW5ldmVyCisgKiB0aGUgY291bnQgaXMgbm9uLXplcm8uCisgKiBUaGVyZSBhcmUgc29tZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgb3BlcmF0aW9ucyB0aGF0IHByZXZlbnQgc29tZQorICogZnJvbSBiZWluZyByZXF1ZXN0ZWQgd2hpbGUgYW5vdGhlciBpcyBpbiBmbGlnaHQuCisgKiAxLyBQYXJpdHkgY2hlY2sgb3BlcmF0aW9ucyBkZXN0cm95IHRoZSBpbiBjYWNoZSB2ZXJzaW9uIG9mIHRoZSBwYXJpdHkgYmxvY2ssCisgKiAgICBzbyB3ZSBwcmV2ZW50IHBhcml0eSBkZXBlbmRlbnQgb3BlcmF0aW9ucyBsaWtlIHdyaXRlcyBhbmQgY29tcHV0ZV9ibG9ja3MKKyAqICAgIGZyb20gc3RhcnRpbmcgd2hpbGUgYSBjaGVjayBpcyBpbiBwcm9ncmVzcy4gIFNvbWUgZG1hIGVuZ2luZXMgY2FuIHBlcmZvcm0KKyAqICAgIHRoZSBjaGVjayB3aXRob3V0IGRhbWFnaW5nIHRoZSBwYXJpdHkgYmxvY2ssIGluIHRoZXNlIGNhc2VzIHRoZSBwYXJpdHkKKyAqICAgIGJsb2NrIGlzIHJlLW1hcmtlZCB1cCB0byBkYXRlIChhc3N1bWluZyB0aGUgY2hlY2sgd2FzIHN1Y2Nlc3NmdWwpIGFuZCBpcworICogICAgbm90IHJlLXJlYWQgZnJvbSBkaXNrLgorICogMi8gV2hlbiBhIHdyaXRlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgd2UgaW1tZWRpYXRlbHkgbG9jayB0aGUgYWZmZWN0ZWQKKyAqICAgIGJsb2NrcywgYW5kIG1hcmsgdGhlbSBhcyBub3QgdXAgdG8gZGF0ZS4gIFRoaXMgY2F1c2VzIG5ldyByZWFkIHJlcXVlc3RzCisgKiAgICB0byBiZSBoZWxkIG9mZiwgYXMgd2VsbCBhcyBwYXJpdHkgY2hlY2tzIGFuZCBjb21wdXRlIGJsb2NrIG9wZXJhdGlvbnMuCisgKiAzLyBPbmNlIGEgY29tcHV0ZSBibG9jayBvcGVyYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkIGhhbmRsZV9zdHJpcGUgdHJlYXRzCisgKiAgICB0aGF0IGJsb2NrIGFzIGlmIGl0IGlzIHVwIHRvIGRhdGUuICByYWlkNV9ydW5fb3BzIGd1YXJ1bnRlZXMgdGhhdCBhbnkKKyAqICAgIG9wZXJhdGlvbiB0aGF0IGlzIGRlcGVuZGVudCBvbiB0aGUgY29tcHV0ZSBibG9jayByZXN1bHQgaXMgaW5pdGlhdGVkIGFmdGVyCisgKiAgICB0aGUgY29tcHV0ZSBibG9jayBjb21wbGV0ZXMuCisgKi8KKworLyoKKyAqIE9wZXJhdGlvbnMgc3RhdGUgLSBpbnRlcm1lZGlhdGUgc3RhdGVzIHRoYXQgYXJlIHZpc2libGUgb3V0c2lkZSBvZiBzaC0+bG9jaworICogSW4gZ2VuZXJhbCBfaWRsZSBpbmRpY2F0ZXMgbm90aGluZyBpcyBydW5uaW5nLCBfcnVuIGluZGljYXRlcyBhIGRhdGEKKyAqIHByb2Nlc3Npbmcgb3BlcmF0aW9uIGlzIGFjdGl2ZSwgYW5kIF9yZXN1bHQgbWVhbnMgdGhlIGRhdGEgcHJvY2Vzc2luZyByZXN1bHQKKyAqIGlzIHN0YWJsZSBhbmQgY2FuIGJlIGFjdGVkIHVwb24uICBGb3Igc2ltcGxlIG9wZXJhdGlvbnMgbGlrZSBiaW9maWxsIGFuZAorICogY29tcHV0ZSB0aGF0IG9ubHkgaGF2ZSBhbiBfaWRsZSBhbmQgX3J1biBzdGF0ZSB0aGV5IGFyZSBpbmRpY2F0ZWQgd2l0aAorICogc2gtPnN0YXRlIGZsYWdzIChTVFJJUEVfQklPRklMTF9SVU4gYW5kIFNUUklQRV9DT01QVVRFX1JVTikKKyAqLworLyoqCisgKiBlbnVtIGNoZWNrX3N0YXRlcyAtIGhhbmRsZXMgc3luY2luZyAvIHJlcGFpcmluZyBhIHN0cmlwZQorICogQGNoZWNrX3N0YXRlX2lkbGUgLSBjaGVjayBvcGVyYXRpb25zIGFyZSBxdWllc2NlZAorICogQGNoZWNrX3N0YXRlX3J1biAtIGNoZWNrIG9wZXJhdGlvbiBpcyBydW5uaW5nCisgKiBAY2hlY2tfc3RhdGVfcmVzdWx0IC0gc2V0IG91dHNpZGUgbG9jayB3aGVuIGNoZWNrIHJlc3VsdCBpcyB2YWxpZAorICogQGNoZWNrX3N0YXRlX2NvbXB1dGVfcnVuIC0gY2hlY2sgZmFpbGVkIGFuZCB3ZSBhcmUgcmVwYWlyaW5nCisgKiBAY2hlY2tfc3RhdGVfY29tcHV0ZV9yZXN1bHQgLSBzZXQgb3V0c2lkZSBsb2NrIHdoZW4gY29tcHV0ZSByZXN1bHQgaXMgdmFsaWQKKyAqLworZW51bSBjaGVja19zdGF0ZXMgeworCWNoZWNrX3N0YXRlX2lkbGUgPSAwLAorCWNoZWNrX3N0YXRlX3J1biwgLyogcGFyaXR5IGNoZWNrICovCisJY2hlY2tfc3RhdGVfY2hlY2tfcmVzdWx0LAorCWNoZWNrX3N0YXRlX2NvbXB1dGVfcnVuLCAvKiBwYXJpdHkgcmVwYWlyICovCisJY2hlY2tfc3RhdGVfY29tcHV0ZV9yZXN1bHQsCit9OworCisvKioKKyAqIGVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIC0gaGFuZGxlcyB3cml0aW5nIG9yIGV4cGFuZGluZyBhIHN0cmlwZQorICovCitlbnVtIHJlY29uc3RydWN0X3N0YXRlcyB7CisJcmVjb25zdHJ1Y3Rfc3RhdGVfaWRsZSA9IDAsCisJcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3J1biwJLyogcHJleG9yLXdyaXRlICovCisJcmVjb25zdHJ1Y3Rfc3RhdGVfZHJhaW5fcnVuLAkJLyogd3JpdGUgKi8KKwlyZWNvbnN0cnVjdF9zdGF0ZV9ydW4sCQkJLyogZXhwYW5kICovCisJcmVjb25zdHJ1Y3Rfc3RhdGVfcHJleG9yX2RyYWluX3Jlc3VsdCwKKwlyZWNvbnN0cnVjdF9zdGF0ZV9kcmFpbl9yZXN1bHQsCisJcmVjb25zdHJ1Y3Rfc3RhdGVfcmVzdWx0LAorfTsKKworc3RydWN0IHN0cmlwZV9oZWFkIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQloYXNoOworCXN0cnVjdCBsaXN0X2hlYWQJbHJ1OwkgICAgICAvKiBpbmFjdGl2ZV9saXN0IG9yIGhhbmRsZV9saXN0ICovCisJc3RydWN0IHJhaWQ1X3ByaXZhdGVfZGF0YSAqcmFpZF9jb25mOworCXNob3J0CQkJZ2VuZXJhdGlvbjsJLyogaW5jcmVtZW50cyB3aXRoIGV2ZXJ5CisJCQkJCQkgKiByZXNoYXBlICovCisJc2VjdG9yX3QJCXNlY3RvcjsJCS8qIHNlY3RvciBvZiB0aGlzIHJvdyAqLworCXNob3J0CQkJcGRfaWR4OwkJLyogcGFyaXR5IGRpc2sgaW5kZXggKi8KKwlzaG9ydAkJCXFkX2lkeDsJCS8qICdRJyBkaXNrIGluZGV4IGZvciByYWlkNiAqLworCXNob3J0CQkJZGRmX2xheW91dDsvKiB1c2UgRERGIG9yZGVyaW5nIHRvIGNhbGN1bGF0ZSBRICovCisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CQkvKiBzdGF0ZSBmbGFncyAqLworCWF0b21pY190CQljb3VudDsJICAgICAgLyogbnIgb2YgYWN0aXZlIHRocmVhZC9yZXF1ZXN0cyAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisJaW50CQkJYm1fc2VxOwkvKiBzZXF1ZW5jZSBudW1iZXIgZm9yIGJpdG1hcCBmbHVzaGVzICovCisJaW50CQkJZGlza3M7CQkvKiBkaXNrcyBpbiBzdHJpcGUgKi8KKwllbnVtIGNoZWNrX3N0YXRlcwljaGVja19zdGF0ZTsKKwllbnVtIHJlY29uc3RydWN0X3N0YXRlcyByZWNvbnN0cnVjdF9zdGF0ZTsKKwkvKiBzdHJpcGVfb3BlcmF0aW9ucworCSAqIEB0YXJnZXQgLSBTVFJJUEVfT1BfQ09NUFVURV9CTEsgdGFyZ2V0CisJICovCisJc3RydWN0IHN0cmlwZV9vcGVyYXRpb25zIHsKKwkJaW50CQkgICB0YXJnZXQ7CisJCXUzMgkJICAgemVyb19zdW1fcmVzdWx0OworCX0gb3BzOworCXN0cnVjdCByNWRldiB7CisJCXN0cnVjdCBiaW8JcmVxOworCQlzdHJ1Y3QgYmlvX3ZlYwl2ZWM7CisJCXN0cnVjdCBwYWdlCSpwYWdlOworCQlzdHJ1Y3QgYmlvCSp0b3JlYWQsICpyZWFkLCAqdG93cml0ZSwgKndyaXR0ZW47CisJCXNlY3Rvcl90CXNlY3RvcjsJCQkvKiBzZWN0b3Igb2YgdGhpcyBwYWdlICovCisJCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJfSBkZXZbMV07IC8qIGFsbG9jYXRlZCB3aXRoIGV4dHJhIHNwYWNlIGRlcGVuZGluZyBvZiBSQUlEIGdlb21ldHJ5ICovCit9OworCisvKiBzdHJpcGVfaGVhZF9zdGF0ZSAtIGNvbGxlY3RzIGFuZCB0cmFja3MgdGhlIGR5bmFtaWMgc3RhdGUgb2YgYSBzdHJpcGVfaGVhZAorICogICAgIGZvciBoYW5kbGVfc3RyaXBlLiAgSXQgaXMgb25seSB2YWxpZCB1bmRlciBzcGluX2xvY2soc2gtPmxvY2spOworICovCitzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgeworCWludCBzeW5jaW5nLCBleHBhbmRpbmcsIGV4cGFuZGVkOworCWludCBsb2NrZWQsIHVwdG9kYXRlLCB0b19yZWFkLCB0b193cml0ZSwgZmFpbGVkLCB3cml0dGVuOworCWludCB0b19maWxsLCBjb21wdXRlLCByZXFfY29tcHV0ZSwgbm9uX292ZXJ3cml0ZTsKKwlpbnQgZmFpbGVkX251bTsKKwl1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0OworfTsKKworLyogcjZfc3RhdGUgLSBleHRyYSBzdGF0ZSBkYXRhIG9ubHkgcmVsZXZhbnQgdG8gcjYgKi8KK3N0cnVjdCByNl9zdGF0ZSB7CisJaW50IHBfZmFpbGVkLCBxX2ZhaWxlZCwgZmFpbGVkX251bVsyXTsKK307CisKKy8qIEZsYWdzICovCisjZGVmaW5lCVI1X1VQVE9EQVRFCTAJLyogcGFnZSBjb250YWlucyBjdXJyZW50IGRhdGEgKi8KKyNkZWZpbmUJUjVfTE9DS0VECTEJLyogSU8gaGFzIGJlZW4gc3VibWl0dGVkIG9uICJyZXEiICovCisjZGVmaW5lCVI1X09WRVJXUklURQkyCS8qIHRvd3JpdGUgY292ZXJzIHdob2xlIHBhZ2UgKi8KKy8qIGFuZCBzb21lIHRoYXQgYXJlIGludGVybmFsIHRvIGhhbmRsZV9zdHJpcGUgKi8KKyNkZWZpbmUJUjVfSW5zeW5jCTMJLyogcmRldiAmJiByZGV2LT5pbl9zeW5jIGF0IHN0YXJ0ICovCisjZGVmaW5lCVI1X1dhbnRyZWFkCTQJLyogd2FudCB0byBzY2hlZHVsZSBhIHJlYWQgKi8KKyNkZWZpbmUJUjVfV2FudHdyaXRlCTUKKyNkZWZpbmUJUjVfT3ZlcmxhcAk3CS8qIFRoZXJlIGlzIGEgcGVuZGluZyBvdmVybGFwcGluZyByZXF1ZXN0IG9uIHRoaXMgYmxvY2sgKi8KKyNkZWZpbmUJUjVfUmVhZEVycm9yCTgJLyogc2VlbiBhIHJlYWQgZXJyb3IgaGVyZSByZWNlbnRseSAqLworI2RlZmluZQlSNV9SZVdyaXRlCTkJLyogaGF2ZSB0cmllZCB0byBvdmVyLXdyaXRlIHRoZSByZWFkZXJyb3IgKi8KKworI2RlZmluZQlSNV9FeHBhbmRlZAkxMAkvKiBUaGlzIGJsb2NrIG5vdyBoYXMgcG9zdC1leHBhbmQgZGF0YSAqLworI2RlZmluZQlSNV9XYW50Y29tcHV0ZQkxMSAvKiBjb21wdXRlX2Jsb2NrIGluIHByb2dyZXNzIHRyZWF0IGFzCisJCQkJICAgICogdXB0b2RhdGUKKwkJCQkgICAgKi8KKyNkZWZpbmUJUjVfV2FudGZpbGwJMTIgLyogZGV2LT50b3JlYWQgY29udGFpbnMgYSBiaW8gdGhhdCBuZWVkcworCQkJCSAgICAqIGZpbGxpbmcKKwkJCQkgICAgKi8KKyNkZWZpbmUgUjVfV2FudGRyYWluCTEzIC8qIGRldi0+dG93cml0ZSBuZWVkcyB0byBiZSBkcmFpbmVkICovCisvKgorICogV3JpdGUgbWV0aG9kCisgKi8KKyNkZWZpbmUgUkVDT05TVFJVQ1RfV1JJVEUJMQorI2RlZmluZSBSRUFEX01PRElGWV9XUklURQkyCisvKiBub3QgYSB3cml0ZSBtZXRob2QsIGJ1dCBhIGNvbXB1dGVfcGFyaXR5IG1vZGUgKi8KKyNkZWZpbmUJQ0hFQ0tfUEFSSVRZCQkzCisvKiBBZGRpdGlvbmFsIGNvbXB1dGVfcGFyaXR5IG1vZGUgLS0gdXBkYXRlcyB0aGUgcGFyaXR5IHcvbyBMT0NLSU5HICovCisjZGVmaW5lIFVQREFURV9QQVJJVFkJCTQKKworLyoKKyAqIFN0cmlwZSBzdGF0ZQorICovCisjZGVmaW5lIFNUUklQRV9IQU5ETEUJCTIKKyNkZWZpbmUJU1RSSVBFX1NZTkNJTkcJCTMKKyNkZWZpbmUJU1RSSVBFX0lOU1lOQwkJNAorI2RlZmluZQlTVFJJUEVfUFJFUkVBRF9BQ1RJVkUJNQorI2RlZmluZQlTVFJJUEVfREVMQVlFRAkJNgorI2RlZmluZQlTVFJJUEVfREVHUkFERUQJCTcKKyNkZWZpbmUJU1RSSVBFX0JJVF9ERUxBWQk4CisjZGVmaW5lCVNUUklQRV9FWFBBTkRJTkcJOQorI2RlZmluZQlTVFJJUEVfRVhQQU5EX1NPVVJDRQkxMAorI2RlZmluZQlTVFJJUEVfRVhQQU5EX1JFQURZCTExCisjZGVmaW5lCVNUUklQRV9JT19TVEFSVEVECTEyIC8qIGRvIG5vdCBjb3VudCB0b3dhcmRzICdieXBhc3NfY291bnQnICovCisjZGVmaW5lCVNUUklQRV9GVUxMX1dSSVRFCTEzIC8qIGFsbCBibG9ja3MgYXJlIHNldCB0byBiZSBvdmVyd3JpdHRlbiAqLworI2RlZmluZQlTVFJJUEVfQklPRklMTF9SVU4JMTQKKyNkZWZpbmUJU1RSSVBFX0NPTVBVVEVfUlVOCTE1CisvKgorICogT3BlcmF0aW9uIHJlcXVlc3QgZmxhZ3MKKyAqLworI2RlZmluZSBTVFJJUEVfT1BfQklPRklMTAkwCisjZGVmaW5lIFNUUklQRV9PUF9DT01QVVRFX0JMSwkxCisjZGVmaW5lIFNUUklQRV9PUF9QUkVYT1IJMgorI2RlZmluZSBTVFJJUEVfT1BfQklPRFJBSU4JMworI2RlZmluZSBTVFJJUEVfT1BfUE9TVFhPUgk0CisjZGVmaW5lIFNUUklQRV9PUF9DSEVDSwk1CisKKy8qCisgKiBQbHVnZ2luZzoKKyAqCisgKiBUbyBpbXByb3ZlIHdyaXRlIHRocm91Z2hwdXQsIHdlIG5lZWQgdG8gZGVsYXkgdGhlIGhhbmRsaW5nIG9mIHNvbWUKKyAqIHN0cmlwZXMgdW50aWwgdGhlcmUgaGFzIGJlZW4gYSBjaGFuY2UgdGhhdCBzZXZlcmFsIHdyaXRlIHJlcXVlc3RzCisgKiBmb3IgdGhlIG9uZSBzdHJpcGUgaGF2ZSBhbGwgYmVlbiBjb2xsZWN0ZWQuCisgKiBJbiBwYXJ0aWN1bGFyLCBhbnkgd3JpdGUgcmVxdWVzdCB0aGF0IHdvdWxkIHJlcXVpcmUgcHJlLXJlYWRpbmcKKyAqIGlzIHB1dCBvbiBhICJkZWxheWVkIiBxdWV1ZSB1bnRpbCB0aGVyZSBhcmUgbm8gc3RyaXBlcyBjdXJyZW50bHkKKyAqIGluIGEgcHJlLXJlYWQgcGhhc2UuICBGdXJ0aGVyLCBpZiB0aGUgImRlbGF5ZWQiIHF1ZXVlIGlzIGVtcHR5IHdoZW4KKyAqIGEgc3RyaXBlIGlzIHB1dCBvbiBpdCB0aGVuIHdlICJwbHVnIiB0aGUgcXVldWUgYW5kIGRvIG5vdCBwcm9jZXNzIGl0CisgKiB1bnRpbCBhbiB1bnBsdWcgY2FsbCBpcyBtYWRlLiAodGhlIHVucGx1Z19pb19mbigpIGlzIGNhbGxlZCkuCisgKgorICogV2hlbiBwcmVyZWFkIGlzIGluaXRpYXRlZCBvbiBhIHN0cmlwZSwgd2Ugc2V0IFBSRVJFQURfQUNUSVZFIGFuZCBhZGQKKyAqIGl0IHRvIHRoZSBjb3VudCBvZiBwcmVyZWFkaW5nIHN0cmlwZXMuCisgKiBXaGVuIHdyaXRlIGlzIGluaXRpYXRlZCwgb3IgdGhlIHN0cmlwZSByZWZjbnQgPT0gMCAoanVzdCBpbiBjYXNlKSB3ZQorICogY2xlYXIgdGhlIFBSRVJFQURfQUNUSVZFIGZsYWcgYW5kIGRlY3JlbWVudCB0aGUgY291bnQKKyAqIFdoZW5ldmVyIHRoZSAnaGFuZGxlJyBxdWV1ZSBpcyBlbXB0eSBhbmQgdGhlIGRldmljZSBpcyBub3QgcGx1Z2dlZCwgd2UKKyAqIG1vdmUgYW55IHN0cmlwcyBmcm9tIGRlbGF5ZWQgdG8gaGFuZGxlIGFuZCBjbGVhciB0aGUgREVMQVlFRCBmbGFnIGFuZCBzZXQKKyAqIFBSRVJFQURfQUNUSVZFLgorICogSW4gc3RyaXBlX2hhbmRsZSwgaWYgd2UgZmluZCBwcmUtcmVhZGluZyBpcyBuZWNlc3NhcnksIHdlIGRvIGl0IGlmCisgKiBQUkVSRUFEX0FDVElWRSBpcyBzZXQsIGVsc2Ugd2Ugc2V0IERFTEFZRUQgd2hpY2ggd2lsbCBzZW5kIGl0IHRvIHRoZSBkZWxheWVkIHF1ZXVlLgorICogSEFORExFIGdldHMgY2xlYXJlZCBpZiBzdHJpcGVfaGFuZGxlIGxlYXZlIG5vdGhpbmcgbG9ja2VkLgorICovCisKKworc3RydWN0IGRpc2tfaW5mbyB7CisJbWRrX3JkZXZfdAkqcmRldjsKK307CisKK3N0cnVjdCByYWlkNV9wcml2YXRlX2RhdGEgeworCXN0cnVjdCBobGlzdF9oZWFkCSpzdHJpcGVfaGFzaHRibDsKKwltZGRldl90CQkJKm1kZGV2OworCXN0cnVjdCBkaXNrX2luZm8JKnNwYXJlOworCWludAkJCWNodW5rX3NpemUsIGxldmVsLCBhbGdvcml0aG07CisJaW50CQkJbWF4X2RlZ3JhZGVkOworCWludAkJCXJhaWRfZGlza3M7CisJaW50CQkJbWF4X25yX3N0cmlwZXM7CisKKwkvKiByZXNoYXBlX3Byb2dyZXNzIGlzIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgYSAncmVzaGFwZScKKwkgKiBJdCBoYXMgdmFsdWUgTWF4U2VjdG9yIHdoZW4gbm8gcmVzaGFwZSBpcyBoYXBwZW5pbmcKKwkgKiBJZiBkZWx0YV9kaXNrcyA8IDAsIGl0IGlzIHRoZSBsYXN0IHNlY3RvciB3ZSBzdGFydGVkIHdvcmsgb24sCisJICogZWxzZSBpcyBpdCB0aGUgbmV4dCBzZWN0b3IgdG8gd29yayBvbi4KKwkgKi8KKwlzZWN0b3JfdAkJcmVzaGFwZV9wcm9ncmVzczsKKwkvKiByZXNoYXBlX3NhZmUgaXMgdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgYSByZXNoYXBlLiAgV2Uga25vdyB0aGF0CisJICogYmVmb3JlIChvciBhZnRlcikgdGhpcyBhZGRyZXNzLCBhbGwgcmVzaGFwZSBoYXMgY29tcGxldGVkLgorCSAqLworCXNlY3Rvcl90CQlyZXNoYXBlX3NhZmU7CisJaW50CQkJcHJldmlvdXNfcmFpZF9kaXNrczsKKwlpbnQJCQlwcmV2X2NodW5rLCBwcmV2X2FsZ287CisJc2hvcnQJCQlnZW5lcmF0aW9uOyAvKiBpbmNyZW1lbnRzIHdpdGggZXZlcnkgcmVzaGFwZSAqLworCXVuc2lnbmVkIGxvbmcJCXJlc2hhcGVfY2hlY2twb2ludDsgLyogVGltZSB3ZSBsYXN0IHVwZGF0ZWQKKwkJCQkJCSAgICAgKiBtZXRhZGF0YSAqLworCisJc3RydWN0IGxpc3RfaGVhZAloYW5kbGVfbGlzdDsgLyogc3RyaXBlcyBuZWVkaW5nIGhhbmRsaW5nICovCisJc3RydWN0IGxpc3RfaGVhZAlob2xkX2xpc3Q7IC8qIHByZXJlYWQgcmVhZHkgc3RyaXBlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGVsYXllZF9saXN0OyAvKiBzdHJpcGVzIHRoYXQgaGF2ZSBwbHVnZ2VkIHJlcXVlc3RzICovCisJc3RydWN0IGxpc3RfaGVhZAliaXRtYXBfbGlzdDsgLyogc3RyaXBlcyBkZWxheWluZyBhd2FpdGluZyBiaXRtYXAgdXBkYXRlICovCisJc3RydWN0IGJpbwkJKnJldHJ5X3JlYWRfYWxpZ25lZDsgLyogY3VycmVudGx5IHJldHJ5aW5nIGFsaWduZWQgYmlvcyAgICovCisJc3RydWN0IGJpbwkJKnJldHJ5X3JlYWRfYWxpZ25lZF9saXN0OyAvKiBhbGlnbmVkIGJpb3MgcmV0cnkgbGlzdCAgKi8KKwlhdG9taWNfdAkJcHJlcmVhZF9hY3RpdmVfc3RyaXBlczsgLyogc3RyaXBlcyB3aXRoIHNjaGVkdWxlZCBpbyAqLworCWF0b21pY190CQlhY3RpdmVfYWxpZ25lZF9yZWFkczsKKwlhdG9taWNfdAkJcGVuZGluZ19mdWxsX3dyaXRlczsgLyogZnVsbCB3cml0ZSBiYWNrbG9nICovCisJaW50CQkJYnlwYXNzX2NvdW50OyAvKiBieXBhc3NlZCBwcmVyZWFkcyAqLworCWludAkJCWJ5cGFzc190aHJlc2hvbGQ7IC8qIHByZXJlYWQgbmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJKmxhc3RfaG9sZDsgLyogZGV0ZWN0IGhvbGRfbGlzdCBwcm9tb3Rpb25zICovCisKKwlhdG9taWNfdAkJcmVzaGFwZV9zdHJpcGVzOyAvKiBzdHJpcGVzIHdpdGggcGVuZGluZyB3cml0ZXMgZm9yIHJlc2hhcGUgKi8KKwkvKiB1bmZvcnR1bmF0ZWx5IHdlIG5lZWQgdHdvIGNhY2hlIG5hbWVzIGFzIHdlIHRlbXBvcmFyaWx5IGhhdmUKKwkgKiB0d28gY2FjaGVzLgorCSAqLworCWludAkJCWFjdGl2ZV9uYW1lOworCWNoYXIJCQljYWNoZV9uYW1lWzJdWzIwXTsKKwlzdHJ1Y3Qga21lbV9jYWNoZQkJKnNsYWJfY2FjaGU7IC8qIGZvciBhbGxvY2F0aW5nIHN0cmlwZXMgKi8KKworCWludAkJCXNlcV9mbHVzaCwgc2VxX3dyaXRlOworCWludAkJCXF1aWVzY2U7CisKKwlpbnQJCQlmdWxsc3luYzsgIC8qIHNldCB0byAxIGlmIGEgZnVsbCBzeW5jIGlzIG5lZWRlZCwKKwkJCQkJICAgICogKGZyZXNoIGRldmljZSBhZGRlZCkuCisJCQkJCSAgICAqIENsZWFyZWQgd2hlbiBhIHN5bmMgY29tcGxldGVzLgorCQkJCQkgICAgKi8KKworCXN0cnVjdCBwYWdlIAkJKnNwYXJlX3BhZ2U7IC8qIFVzZWQgd2hlbiBjaGVja2luZyBQL1EgaW4gcmFpZDYgKi8KKworCS8qCisJICogRnJlZSBzdHJpcGVzIHBvb2wKKwkgKi8KKwlhdG9taWNfdAkJYWN0aXZlX3N0cmlwZXM7CisJc3RydWN0IGxpc3RfaGVhZAlpbmFjdGl2ZV9saXN0OworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfZm9yX3N0cmlwZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2Zvcl9vdmVybGFwOworCWludAkJCWluYWN0aXZlX2Jsb2NrZWQ7CS8qIHJlbGVhc2Ugb2YgaW5hY3RpdmUgc3RyaXBlcyBibG9ja2VkLAorCQkJCQkJCSAqIHdhaXRpbmcgZm9yIDI1JSB0byBiZSBmcmVlCisJCQkJCQkJICovCisJaW50CQkJcG9vbF9zaXplOyAvKiBudW1iZXIgb2YgZGlza3MgaW4gc3RyaXBlaGVhZHMgaW4gcG9vbCAqLworCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOworCXN0cnVjdCBkaXNrX2luZm8JKmRpc2tzOworCisJLyogV2hlbiB0YWtpbmcgb3ZlciBhbiBhcnJheSBmcm9tIGEgZGlmZmVyZW50IHBlcnNvbmFsaXR5LCB3ZSBzdG9yZQorCSAqIHRoZSBuZXcgdGhyZWFkIGhlcmUgdW50aWwgd2UgZnVsbHkgYWN0aXZhdGUgdGhlIGFycmF5LgorCSAqLworCXN0cnVjdCBtZGtfdGhyZWFkX3MJKnRocmVhZDsKK307CisKK3R5cGVkZWYgc3RydWN0IHJhaWQ1X3ByaXZhdGVfZGF0YSByYWlkNV9jb25mX3Q7CisKKyNkZWZpbmUgbWRkZXZfdG9fY29uZihtZGRldikgKChyYWlkNV9jb25mX3QgKikgbWRkZXYtPnByaXZhdGUpCisKKy8qCisgKiBPdXIgc3VwcG9ydGVkIGFsZ29yaXRobXMKKyAqLworI2RlZmluZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDCTAgLyogUm90YXRpbmcgUGFyaXR5IE4gd2l0aCBEYXRhIFJlc3RhcnQgKi8KKyNkZWZpbmUgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUMJMSAvKiBSb3RhdGluZyBQYXJpdHkgMCB3aXRoIERhdGEgUmVzdGFydCAqLworI2RlZmluZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUMJMiAvKiBSb3RhdGluZyBQYXJpdHkgTiB3aXRoIERhdGEgQ29udGludWF0aW9uICovCisjZGVmaW5lIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUMJMyAvKiBSb3RhdGluZyBQYXJpdHkgMCB3aXRoIERhdGEgQ29udGludWF0aW9uICovCisKKy8qIERlZmluZSBub24tcm90YXRpbmcgKHJhaWQ0KSBhbGdvcml0aG1zLiAgVGhlc2UgYWxsb3cKKyAqIGNvbnZlcnNpb24gb2YgcmFpZDQgdG8gcmFpZDUuCisgKi8KKyNkZWZpbmUgQUxHT1JJVEhNX1BBUklUWV8wCQk0IC8qIFAgb3IgUCxRIGFyZSBpbml0aWFsIGRldmljZXMgKi8KKyNkZWZpbmUgQUxHT1JJVEhNX1BBUklUWV9OCQk1IC8qIFAgb3IgUCxRIGFyZSBmaW5hbCBkZXZpY2VzLiAqLworCisvKiBEREYgUkFJRDYgbGF5b3V0cyBkaWZmZXIgZnJvbSBtZC9yYWlkNiBsYXlvdXRzIGluIHR3byB3YXlzLgorICogRmlyc3RseSwgdGhlIGV4YWN0IHBvc2l0aW9uaW5nIG9mIHRoZSBwYXJpdHkgYmxvY2sgaXMgc2xpZ2h0bHkKKyAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSAnTEVGVF8qJyBtb2RlcyBvZiBtZCBhbmQgdGhlICJfTl8qIiBtb2RlcworICogb2YgRERGLgorICogU2Vjb25kbHksIG9yIG9yZGVyIG9mIGRhdGFibG9ja3Mgb3ZlciB3aGljaCB0aGUgUSBzeW5kcm9tZSBpcyBjb21wdXRlZAorICogaXMgZGlmZmVyZW50LgorICogQ29uc2VxdWVudGx5IHdlIGhhdmUgZGlmZmVyZW50IGxheW91dHMgZm9yIERERi9yYWlkNiB0aGFuIG1kL3JhaWQ2LgorICogVGhlc2UgbGF5b3V0cyBhcmUgZnJvbSB0aGUgRERGdjEuMiBzcGVjLgorICogSW50ZXJlc3RpbmdseSBEREZ2MS4yLUVycmF0YS1BIGRvZXMgbm90IHNwZWNpZnkgTl9DT05USU5VRSBidXQKKyAqIGxlYXZlcyBSTFE9MyBhcyAnVmVuZG9yIFNwZWNpZmljJworICovCisKKyNkZWZpbmUgQUxHT1JJVEhNX1JPVEFUSU5HX1pFUk9fUkVTVEFSVAk4IC8qIERERiBQUkw9NiBSTFE9MSAqLworI2RlZmluZSBBTEdPUklUSE1fUk9UQVRJTkdfTl9SRVNUQVJUCTkgLyogRERGIFBSTD02IFJMUT0yICovCisjZGVmaW5lIEFMR09SSVRITV9ST1RBVElOR19OX0NPTlRJTlVFCTEwIC8qRERGIFBSTD02IFJMUT0zICovCisKKworLyogRm9yIGV2ZXJ5IFJBSUQ1IGFsZ29yaXRobSB3ZSBkZWZpbmUgYSBSQUlENiBhbGdvcml0aG0KKyAqIHdpdGggZXhhY3RseSB0aGUgc2FtZSBsYXlvdXQgZm9yIGRhdGEgYW5kIHBhcml0eSwgYW5kCisgKiB3aXRoIHRoZSBRIGJsb2NrIGFsd2F5cyBvbiB0aGUgbGFzdCBkZXZpY2UgKE4tMSkuCisgKiBUaGlzIGFsbG93cyB0cml2aWFsIGNvbnZlcnNpb24gZnJvbSBSQUlENSB0byBSQUlENgorICovCisjZGVmaW5lIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUNfNgkxNgorI2RlZmluZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182CTE3CisjZGVmaW5lIEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQ182CTE4CisjZGVmaW5lIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUNfNgkxOQorI2RlZmluZSBBTEdPUklUSE1fUEFSSVRZXzBfNgkJMjAKKyNkZWZpbmUgQUxHT1JJVEhNX1BBUklUWV9OXzYJCUFMR09SSVRITV9QQVJJVFlfTgorCitzdGF0aWMgaW5saW5lIGludCBhbGdvcml0aG1fdmFsaWRfcmFpZDUoaW50IGxheW91dCkKK3sKKwlyZXR1cm4gKGxheW91dCA+PSAwKSAmJgorCQkobGF5b3V0IDw9IDUpOworfQorc3RhdGljIGlubGluZSBpbnQgYWxnb3JpdGhtX3ZhbGlkX3JhaWQ2KGludCBsYXlvdXQpCit7CisJcmV0dXJuIChsYXlvdXQgPj0gMCAmJiBsYXlvdXQgPD0gNSkKKwkJfHwKKwkJKGxheW91dCA9PSA4IHx8IGxheW91dCA9PSAxMCkKKwkJfHwKKwkJKGxheW91dCA+PSAxNiAmJiBsYXlvdXQgPD0gMjApOworfQorCitzdGF0aWMgaW5saW5lIGludCBhbGdvcml0aG1faXNfRERGKGludCBsYXlvdXQpCit7CisJcmV0dXJuIGxheW91dCA+PSA4ICYmIGxheW91dCA8PSAxMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNi5oIGIvZHJpdmVycy9tZC9yYWlkNi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGRjZGU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWQvcmFpZDYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKiAtKi0gbGludXgtYyAtKi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCi0gKgotICogICBDb3B5cmlnaHQgMjAwMyBILiBQZXRlciBBbnZpbiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KLSAqCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZuZGVmIExJTlVYX1JBSURfUkFJRDZfSAotI2RlZmluZSBMSU5VWF9SQUlEX1JBSUQ2X0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotLyogU2V0IHRvIDEgdG8gdXNlIGtlcm5lbC13aWRlIGVtcHR5X3plcm9fcGFnZSAqLwotI2RlZmluZSBSQUlENl9VU0VfRU1QVFlfWkVST19QQUdFIDAKLQotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQ1Lmg+Ci0KLXR5cGVkZWYgcmFpZDVfY29uZl90IHJhaWQ2X2NvbmZfdDsgLyogU2FtZSBjb25maWd1cmF0aW9uICovCi0KLS8qIEFkZGl0aW9uYWwgY29tcHV0ZV9wYXJpdHkgbW9kZSAtLSB1cGRhdGVzIHRoZSBwYXJpdHkgdy9vIExPQ0tJTkcgKi8KLSNkZWZpbmUgVVBEQVRFX1BBUklUWQk0Ci0KLS8qIFdlIG5lZWQgYSBwcmUtemVyb2VkIHBhZ2UuLi4gaWYgd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGtlcm5lbC1wcm92aWRlZAotICAgb25lIGRlZmluZSBpdCBoZXJlICovCi0jaWYgUkFJRDZfVVNFX0VNUFRZX1pFUk9fUEFHRQotIyBkZWZpbmUgcmFpZDZfZW1wdHlfemVyb19wYWdlIGVtcHR5X3plcm9fcGFnZQotI2Vsc2UKLWV4dGVybiBjb25zdCBjaGFyIHJhaWQ2X2VtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdOwotI2VuZGlmCi0KLSNlbHNlIC8qICEgX19LRVJORUxfXyAqLwotLyogVXNlZCBmb3IgdGVzdGluZyBpbiB1c2VyIHNwYWNlICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotLyogTm90IHN0YW5kYXJkLCBidXQgZ2xpYmMgZGVmaW5lcyBpdCAqLwotI2RlZmluZSBCSVRTX1BFUl9MT05HIF9fV09SRFNJWkUKLQotdHlwZWRlZiB1aW50OF90ICB1ODsKLXR5cGVkZWYgdWludDE2X3QgdTE2OwotdHlwZWRlZiB1aW50MzJfdCB1MzI7Ci10eXBlZGVmIHVpbnQ2NF90IHU2NDsKLQotI2lmbmRlZiBQQUdFX1NJWkUKLSMgZGVmaW5lIFBBR0VfU0laRSA0MDk2Ci0jZW5kaWYKLWV4dGVybiBjb25zdCBjaGFyIHJhaWQ2X2VtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdOwotCi0jZGVmaW5lIF9faW5pdAotI2RlZmluZSBfX2V4aXQKLSNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX2F0dHJpYnV0ZV9fKChjb25zdCkpCi0jZGVmaW5lIG5vaW5saW5lIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKLQotI2RlZmluZSBwcmVlbXB0X2VuYWJsZSgpCi0jZGVmaW5lIHByZWVtcHRfZGlzYWJsZSgpCi0jZGVmaW5lIGNwdV9oYXNfZmVhdHVyZSh4KSAxCi0jZGVmaW5lIGVuYWJsZV9rZXJuZWxfYWx0aXZlYygpCi0jZGVmaW5lIGRpc2FibGVfa2VybmVsX2FsdGl2ZWMoKQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0vKiBSb3V0aW5lIGNob2ljZXMgKi8KLXN0cnVjdCByYWlkNl9jYWxscyB7Ci0Jdm9pZCAoKmdlbl9zeW5kcm9tZSkoaW50LCBzaXplX3QsIHZvaWQgKiopOwotCWludCAgKCp2YWxpZCkodm9pZCk7CS8qIFJldHVybnMgMSBpZiB0aGlzIHJvdXRpbmUgc2V0IGlzIHVzYWJsZSAqLwotCWNvbnN0IGNoYXIgKm5hbWU7CS8qIE5hbWUgb2YgdGhpcyByb3V0aW5lIHNldCAqLwotCWludCBwcmVmZXI7CQkvKiBIYXMgc3BlY2lhbCBwZXJmb3JtYW5jZSBhdHRyaWJ1dGUgKi8KLX07Ci0KLS8qIFNlbGVjdGVkIGFsZ29yaXRobSAqLwotZXh0ZXJuIHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9jYWxsOwotCi0vKiBBbGdvcml0aG0gbGlzdCAqLwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyAqIGNvbnN0IHJhaWQ2X2FsZ29zW107Ci1pbnQgcmFpZDZfc2VsZWN0X2FsZ28odm9pZCk7Ci0KLS8qIFJldHVybiB2YWx1ZXMgZnJvbSBjaGtfc3luZHJvbWUgKi8KLSNkZWZpbmUgUkFJRDZfT0sJMAotI2RlZmluZSBSQUlENl9QX0JBRAkxCi0jZGVmaW5lIFJBSUQ2X1FfQkFECTIKLSNkZWZpbmUgUkFJRDZfUFFfQkFECTMKLQotLyogR2Fsb2lzIGZpZWxkIHRhYmxlcyAqLwotZXh0ZXJuIGNvbnN0IHU4IHJhaWQ2X2dmbXVsWzI1Nl1bMjU2XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKTsKLWV4dGVybiBjb25zdCB1OCByYWlkNl9nZmV4cFsyNTZdICAgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7Ci1leHRlcm4gY29uc3QgdTggcmFpZDZfZ2ZpbnZbMjU2XSAgICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOwotZXh0ZXJuIGNvbnN0IHU4IHJhaWQ2X2dmZXhpWzI1Nl0gICAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKTsKLQotLyogUmVjb3Zlcnkgcm91dGluZXMgKi8KLXZvaWQgcmFpZDZfMmRhdGFfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLCB2b2lkICoqcHRycyk7Ci12b2lkIHJhaWQ2X2RhdGFwX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIHZvaWQgKipwdHJzKTsKLXZvaWQgcmFpZDZfZHVhbF9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHZvaWQgKipwdHJzKTsKLQotLyogU29tZSBkZWZpbml0aW9ucyB0byBhbGxvdyBjb2RlIHRvIGJlIGNvbXBpbGVkIGZvciB0ZXN0aW5nIGluIHVzZXJzcGFjZSAqLwotI2lmbmRlZiBfX0tFUk5FTF9fCi0KLSMgZGVmaW5lIGppZmZpZXMJcmFpZDZfamlmZmllcygpCi0jIGRlZmluZSBwcmludGsgCXByaW50ZgotIyBkZWZpbmUgR0ZQX0tFUk5FTAkwCi0jIGRlZmluZSBfX2dldF9mcmVlX3BhZ2VzKHgseSkJKCh1bnNpZ25lZCBsb25nKW1tYXAoTlVMTCwgUEFHRV9TSVpFIDw8ICh5KSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIDAsIDApKQotIyBkZWZpbmUgZnJlZV9wYWdlcyh4LHkpCW11bm1hcCgodm9pZCAqKSh4KSwgKHkpKlBBR0VfU0laRSkKLQotc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKQotewotCS8qIE5vdGhpbmcgKi8KLX0KLQotI3VuZGVmICBIWgotI2RlZmluZSBIWiAxMDAwCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IHJhaWQ2X2ppZmZpZXModm9pZCkKLXsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKLQlyZXR1cm4gdHYudHZfc2VjKjEwMDAgKyB0di50dl91c2VjLzEwMDA7Ci19Ci0KLSNlbmRpZiAvKiAhIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIExJTlVYX1JBSURfUkFJRDZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmFsZ29zLmMgYi9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYwppbmRleCAyMTk4N2UzLi44NjYyMTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYworKysgYi9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNiwxMyArMTYsMjAgQEAKICAqIEFsZ29yaXRobSBsaXN0IGFuZCBhbGdvcml0aG0gc2VsZWN0aW9uIGZvciBSQUlELTYKICAqLwogCi0jaW5jbHVkZSAicmFpZDYuaCIKKyNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CiAjaWZuZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CisjZWxzZQorI2lmICFSQUlENl9VU0VfRU1QVFlfWkVST19QQUdFCisvKiBJbiAuYnNzIHNvIGl0J3MgemVyb2VkICovCitjb25zdCBjaGFyIHJhaWQ2X2VtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOworRVhQT1JUX1NZTUJPTChyYWlkNl9lbXB0eV96ZXJvX3BhZ2UpOworI2VuZGlmCiAjZW5kaWYKIAogc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2NhbGw7CitFWFBPUlRfU1lNQk9MX0dQTChyYWlkNl9jYWxsKTsKIAogLyogVmFyaW91cyByb3V0aW5lIHNldHMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfaW50eDE7CkBAIC03OSw2ICs4Niw3IEBACiAjZWxzZQogLyogTmVlZCBtb3JlIHRpbWUgdG8gYmUgc3RhYmxlIGluIHVzZXJzcGFjZSAqLwogI2RlZmluZSBSQUlENl9USU1FX0pJRkZJRVNfTEcyCTkKKyNkZWZpbmUgdGltZV9iZWZvcmUoeCwgeSkgKCh4KSA8ICh5KSkKICNlbmRpZgogCiAvKiBUcnkgdG8gcGljayB0aGUgYmVzdCBhbGdvcml0aG0gKi8KQEAgLTE1MiwzICsxNjAsMTIgQEAKIAogCXJldHVybiBiZXN0ID8gMCA6IC1FSU5WQUw7CiB9CisKK3N0YXRpYyB2b2lkIHJhaWQ2X2V4aXQodm9pZCkKK3sKKwlkbyB7IH0gd2hpbGUgKDApOworfQorCitzdWJzeXNfaW5pdGNhbGwocmFpZDZfc2VsZWN0X2FsZ28pOworbW9kdWxlX2V4aXQocmFpZDZfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCmluZGV4IGI5YWZkMzUuLjY5OWRmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCkBAIC01LDcgKzUsNyBAQAogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MyBUZW1wbGUgUGxhY2UgU3RlIDMzMCwKLSAqICAgQm9zdG9tIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbjsgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIyLDcgKzIyLDcgQEAKICAqIGJyYWNrZWQgdGhpcyB3aXRoIHByZWVtcHRfZGlzYWJsZS9lbmFibGUgb3IgaW4gYSBsb2NrKQogICovCiAKLSNpbmNsdWRlICJyYWlkNi5oIgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KIAogI2lmZGVmIENPTkZJR19BTFRJVkVDCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMgYi9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCmluZGV4IGFkMDA0Y2UuLmY5YmY5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmludC51YwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwucGwKICAqLwogCi0jaW5jbHVkZSAicmFpZDYuaCIKKyNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBDIGRhdGEgdHlwZSB0byB1c2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZtbXguYyBiL2RyaXZlcnMvbWQvcmFpZDZtbXguYwppbmRleCBkNGU0YTFiLi5lN2Y2YzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2bW14LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNm1teC5jCkBAIC01LDcgKzUsNyBAQAogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MyBUZW1wbGUgUGxhY2UgU3RlIDMzMCwKLSAqICAgQm9zdG9tIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbjsgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE4LDcgKzE4LDcgQEAKIAogI2lmIGRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKF9fYXJjaF91bV9fKQogCi0jaW5jbHVkZSAicmFpZDYuaCIKKyNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CiAjaW5jbHVkZSAicmFpZDZ4ODYuaCIKIAogLyogU2hhcmVkIHdpdGggcmFpZDZzc2UxLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZyZWNvdi5jIGIvZHJpdmVycy9tZC9yYWlkNnJlY292LmMKaW5kZXggYThjNGQ5NC4uMjYwOWYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNnJlY292LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNnJlY292LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTgsNyArMTgsNyBAQAogICogdGhlIHN5bmRyb21lLikKICAqLwogCi0jaW5jbHVkZSAicmFpZDYuaCIKKyNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CiAKIC8qIFJlY292ZXIgdHdvIGZhaWxlZCBkYXRhIGJsb2Nrcy4gKi8KIHZvaWQgcmFpZDZfMmRhdGFfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLApAQCAtNjMsOSArNjMsNyBAQAogCQlwKys7IHErKzsKIAl9CiB9Ci0KLQotCitFWFBPUlRfU1lNQk9MX0dQTChyYWlkNl8yZGF0YV9yZWNvdik7CiAKIC8qIFJlY292ZXIgZmFpbHVyZSBvZiBvbmUgZGF0YSBibG9jayBwbHVzIHRoZSBQIGJsb2NrICovCiB2b2lkIHJhaWQ2X2RhdGFwX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIHZvaWQgKipwdHJzKQpAQCAtOTcsOSArOTUsMTAgQEAKIAkJcSsrOyBkcSsrOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJhaWQ2X2RhdGFwX3JlY292KTsKIAotCi0jaWZuZGVmIF9fS0VSTkVMX18JCS8qIFRlc3Rpbmcgb25seSAqLworI2lmbmRlZiBfX0tFUk5FTF9fCisvKiBUZXN0aW5nIG9ubHkgKi8KIAogLyogUmVjb3ZlciB0d28gZmFpbGVkIGJsb2Nrcy4gKi8KIHZvaWQgcmFpZDZfZHVhbF9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHZvaWQgKipwdHJzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnNzZTEuYyBiL2RyaXZlcnMvbWQvcmFpZDZzc2UxLmMKaW5kZXggMDY2NjIzNy4uYjI3NGRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNnNzZTEuYworKysgYi9kcml2ZXJzL21kL3JhaWQ2c3NlMS5jCkBAIC01LDcgKzUsNyBAQAogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MyBUZW1wbGUgUGxhY2UgU3RlIDMzMCwKLSAqICAgQm9zdG9tIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbjsgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIzLDcgKzIzLDcgQEAKIAogI2lmIGRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKF9fYXJjaF91bV9fKQogCi0jaW5jbHVkZSAicmFpZDYuaCIKKyNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CiAjaW5jbHVkZSAicmFpZDZ4ODYuaCIKIAogLyogRGVmaW5lZCBpbiByYWlkNm1teC5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2c3NlMi5jIGIvZHJpdmVycy9tZC9yYWlkNnNzZTIuYwppbmRleCBiMDM0YWQ4Li42ZWQ2YzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2c3NlMi5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZzc2UyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTksNyArMTksNyBAQAogCiAjaWYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpICYmICFkZWZpbmVkKF9fYXJjaF91bV9fKQogCi0jaW5jbHVkZSAicmFpZDYuaCIKKyNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CiAjaW5jbHVkZSAicmFpZDZ4ODYuaCIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByYWlkNl9zc2VfY29uc3RhbnRzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKaW5kZXggNzhlMDM5Ni4uNThmZmRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAKIENDCSA9IGdjYwogT1BURkxBR1MgPSAtTzIJCQkjIEFkanVzdCBhcyBkZXNpcmVkCi1DRkxBR1MJID0gLUkuLiAtZyAkKE9QVEZMQUdTKQorQ0ZMQUdTCSA9IC1JLi4gLUkgLi4vLi4vLi4vaW5jbHVkZSAtZyAkKE9QVEZMQUdTKQogTEQJID0gbGQKIFBFUkwJID0gcGVybAogQVIJID0gYXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L3Rlc3QuYyBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L3Rlc3QuYwppbmRleCA1NTljYzQxLi43YTkzMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC90ZXN0LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvdGVzdC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJyYWlkNi5oIgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KIAogI2RlZmluZSBORElTS1MJCTE2CS8qIEluY2x1ZGluZyBQIGFuZCBRICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZ4ODYuaCBiL2RyaXZlcnMvbWQvcmFpZDZ4ODYuaAppbmRleCA5OWZlYTdhLi40YzIyYzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2eDg2LmgKKysrIGIvZHJpdmVycy9tZC9yYWlkNng4Ni5oCkBAIC01LDcgKzUsNyBAQAogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MyBUZW1wbGUgUGxhY2UgU3RlIDMzMCwKLSAqICAgQm9zdG9tIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbjsgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKaW5kZXggNTJjM2Y2NS4uNjA3ZDMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKQEAgLTE0OCw3ICsxNDgsNyBAQAogCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gdHVuZXIgWEM1MDAwIGZyb20gWGNlaXZlLgotCSAgVGhpcyBkZXZpY2UgaXMgb25seSB1c2VkIGluc2lkZSBhIFNpUCBjYWxsZWQgdG9ndGhlciB3aXRoIGEKKwkgIFRoaXMgZGV2aWNlIGlzIG9ubHkgdXNlZCBpbnNpZGUgYSBTaVAgY2FsbGVkIHRvZ2V0aGVyIHdpdGggYQogCSAgZGVtb2R1bGF0b3IgZm9yIG5vdy4KIAogY29uZmlnIE1FRElBX1RVTkVSX01YTDUwMDVTCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IGEyMDZjZWUuLmE0ODZhN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC00NzksNyArNDc5LDcgQEAKIAlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiBiYXNlYmFuZCB0dW5lciBEaUIwMDcwIGZyb20gRGlCY29tLgotCSAgVGhpcyBkZXZpY2UgaXMgb25seSB1c2VkIGluc2lkZSBhIFNpUCBjYWxsZWQgdG9ndGhlciB3aXRoIGEKKwkgIFRoaXMgZGV2aWNlIGlzIG9ubHkgdXNlZCBpbnNpZGUgYSBTaVAgY2FsbGVkIHRvZ2V0aGVyIHdpdGggYQogCSAgZGVtb2R1bGF0b3IgZm9yIG5vdy4KIAogY29tbWVudCAiU0VDIGNvbnRyb2wgZGV2aWNlcyBmb3IgRFZCLVMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4Mzk3eEQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCmluZGV4IDFlODFlNzEuLjE3MmYxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCkBAIC03NCw3ICs3NCw3IEBACiB9IGZ3W10gPSB7CiAjZGVmaW5lIF9GV19FTlRSWShhLCBiLCBjKQl7CQkJCQlcCiAJCQkubmFtZQk9IGEsCQkJCQlcCi0JCQkuZmlsZQk9IDAsCQkJCQlcCisJCQkuZmlsZQk9IE5VTEwsCQkJCQlcCiAJCQkubG9jawk9IF9fUldfTE9DS19VTkxPQ0tFRChmd1tjXS5sb2NrKSwJXAogCQkJLnJlZmNudCA9IDAsCQkJCQlcCiAJCQkuZGF0YQk9IHsgfQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggMDZhMmIwZi4uNzVmMzVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC04OCw3ICs4OCw3IEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cwogCSAgVFdMOTIzMzAvTWVuZWxhdXMgUG93ZXIgTWFuYWdlbWVudCBjaGlwLiBUaGlzIGluY2x1ZGUgdm9sdGFnZQotCSAgcmVndWxhdG9ycywgRHVhbCBzbG90IG1lbW9yeSBjYXJkIHRyYW5jZWl2ZXJzLCByZWFsLXRpbWUgY2xvY2sKKwkgIHJlZ3VsYXRvcnMsIER1YWwgc2xvdCBtZW1vcnkgY2FyZCB0cmFuc2NlaXZlcnMsIHJlYWwtdGltZSBjbG9jawogCSAgYW5kIG90aGVyIGZlYXR1cmVzIHRoYXQgYXJlIG9mdGVuIHVzZWQgaW4gcG9ydGFibGUgZGV2aWNlcyBsaWtlCiAJICBjZWxsIHBob25lcyBhbmQgUERBcy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwppbmRleCA2ODgyNmYxLi5lYzkwZTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpAQCAtNTkyLDExICs1OTIsOSBAQAogCiAJLyogbWF5YmUgYWRkIExET3MgdGhhdCBhcmUgb21pdHRlZCBvbiBjb3N0LXJlZHVjZWQgcGFydHMgKi8KIAlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiAhKGZlYXR1cmVzICYgVFBTX1NVQlNFVCkpIHsKLQkJLyoKIAkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZQTEwyLCBwZGF0YS0+dnBsbDIpOwogCQlpZiAoSVNfRVJSKGNoaWxkKSkKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQkJKi8KIAogCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVk1NQzIsIHBkYXRhLT52bW1jMik7CiAJCWlmIChJU19FUlIoY2hpbGQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCA1ZjNiZmY0Li42ZDFhYzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMTgsOCArMTgsOCBAQAogCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxU0FNOTI2MyB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxQ0FQOQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZGV2aWNlIGRyaXZlciBzdXBwb3J0IGZvciB0aGUgUFdNIGNoYW5uZWxzCi0JICBvbiBjZXJ0YWluIEF0bWVsIHByY29lc3NvcnMuICBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIGlzIHVzZWQgZm9yCi0JICBwdXJwb3NlcyBpbmNsdWRpbmcgc29mdHdhcmUgY29udHJvbGxlZCBwb3dlci1lZmZpY2VudCBiYWNrbGlnaHRzCisJICBvbiBjZXJ0YWluIEF0bWVsIHByb2Nlc3NvcnMuICBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIGlzIHVzZWQgZm9yCisJICBwdXJwb3NlcyBpbmNsdWRpbmcgc29mdHdhcmUgY29udHJvbGxlZCBwb3dlci1lZmZpY2llbnQgYmFja2xpZ2h0cwogCSAgb24gTENEIGRpc3BsYXlzLCBtb3RvciBjb250cm9sLCBhbmQgd2F2ZWZvcm0gZ2VuZXJhdGlvbi4KIAogY29uZmlnIEFUTUVMX1RDTElCCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl0cmlzdGF0ZSAiRGV2aWNlIGRyaXZlciBmb3IgQXRtZWwgU1NDIHBlcmlwaGVyYWwiCiAJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTEKIAktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIGRldmljZSBkcml2ZXIgc3VwcG9ydCBmb3IgQXRtZWwgU3luY3Jvbml6ZWQKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZGV2aWNlIGRyaXZlciBzdXBwb3J0IGZvciBBdG1lbCBTeW5jaHJvbml6ZWQKIAkgIFNlcmlhbCBDb21tdW5pY2F0aW9uIHBlcmlwaGVyYWwgKFNTQykuCiAKIAkgIFRoZSBTU0MgcGVyaXBoZXJhbCBzdXBwb3J0cyBhIHdpZGUgdmFyaWV0eSBvZiBzZXJpYWwgZnJhbWUgYmFzZWQKQEAgLTE2NSw3ICsxNjUsNyBAQAogCWRlcGVuZHMgb24gKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIgfHwgSUE2NF9TR0lfVVYgfHwgWDg2X1VWKSAmJiBTTVAKIAlzZWxlY3QgSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IgaWYgSUE2NF9HRU5FUklDIHx8IElBNjRfU0dJX1NOMgogCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUiBpZiBJQTY0X0dFTkVSSUMgfHwgSUE2NF9TR0lfU04yCi0Jc2VsZWN0IFNHSV9HUlUgaWYgKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9VViB8fCBYODZfNjQpICYmIFNNUAorCXNlbGVjdCBTR0lfR1JVIGlmIFg4Nl82NCAmJiBTTVAKIAktLS1oZWxwLS0tCiAJICBBbiBTR0kgbWFjaGluZSBjYW4gYmUgZGl2aWRlZCBpbnRvIG11bHRpcGxlIFNpbmdsZSBTeXN0ZW0KIAkgIEltYWdlcyB3aGljaCBhY3QgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyIGFuZCBoYXZlCkBAIC0xODksNyArMTg5LDcgQEAKIAogY29uZmlnIFNHSV9HUlUKIAl0cmlzdGF0ZSAiU0dJIEdSVSBkcml2ZXIiCi0JZGVwZW5kcyBvbiAoWDg2X1VWIHx8IElBNjRfU0dJX1VWIHx8IElBNjRfR0VORVJJQykgJiYgU01QCisJZGVwZW5kcyBvbiBYODZfVVYgJiYgU01QCiAJZGVmYXVsdCBuCiAJc2VsZWN0IE1NVV9OT1RJRklFUgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNC5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKaW5kZXggZDQ3NzU1Mi4uZDE4NGRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKQEAgLTUzLDYgKzUzLDcgQEAKIAogc3RydWN0IGF0MjRfZGF0YSB7CiAJc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBjaGlwOworCXN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgbWFjYzsKIAlib29sIHVzZV9zbWJ1czsKIAogCS8qCkBAIC0yMjUsMTQgKzIyNiwxMSBAQAogCQlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3NpemVfdCBhdDI0X2Jpbl9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGF0MjRfcmVhZChzdHJ1Y3QgYXQyNF9kYXRhICphdDI0LAogCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgYXQyNF9kYXRhICphdDI0OwogCXNzaXplX3QgcmV0dmFsID0gMDsKIAotCWF0MjQgPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQogCWlmICh1bmxpa2VseSghY291bnQpKQogCQlyZXR1cm4gY291bnQ7CiAKQEAgLTI2MiwxMiArMjYwLDE0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHNzaXplX3QgYXQyNF9iaW5fcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQ7CiAKLS8qCi0gKiBSRVZJU0lUOiBleHBvcnQgYXQyNF9iaW57cmVhZCx3cml0ZX0oKSB0byBsZXQgb3RoZXIga2VybmVsIGNvZGUgdXNlCi0gKiBlZXByb20gZGF0YS4gRm9yIGV4YW1wbGUsIGl0IG1pZ2h0IGhvbGQgYSBib2FyZCdzIEV0aGVybmV0IGFkZHJlc3MsIG9yCi0gKiBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhIGdlbmVyYXRlZCBvbiB0aGUgbWFudWZhY3R1cmluZyBmbG9vci4KLSAqLworCWF0MjQgPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKwlyZXR1cm4gYXQyNF9yZWFkKGF0MjQsIGJ1Ziwgb2ZmLCBjb3VudCk7Cit9CiAKIAogLyoKQEAgLTM0NywxNCArMzQ3LDExIEBACiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGF0MjRfYmluX3dyaXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGF0MjRfd3JpdGUoc3RydWN0IGF0MjRfZGF0YSAqYXQyNCwKIAkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGF0MjRfZGF0YSAqYXQyNDsKIAlzc2l6ZV90IHJldHZhbCA9IDA7CiAKLQlhdDI0ID0gZGV2X2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7Ci0KIAlpZiAodW5saWtlbHkoIWNvdW50KSkKIAkJcmV0dXJuIGNvdW50OwogCkBAIC0zODQsNiArMzgxLDM5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHNzaXplX3QgYXQyNF9iaW5fd3JpdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYXQyNF9kYXRhICphdDI0OworCisJYXQyNCA9IGRldl9nZXRfZHJ2ZGF0YShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOworCXJldHVybiBhdDI0X3dyaXRlKGF0MjQsIGJ1Ziwgb2ZmLCBjb3VudCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGlzIGxldHMgb3RoZXIga2VybmVsIGNvZGUgYWNjZXNzIHRoZSBlZXByb20gZGF0YS4gRm9yIGV4YW1wbGUsIGl0CisgKiBtaWdodCBob2xkIGEgYm9hcmQncyBFdGhlcm5ldCBhZGRyZXNzLCBvciBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbgorICogZGF0YSBnZW5lcmF0ZWQgb24gdGhlIG1hbnVmYWN0dXJpbmcgZmxvb3IuCisgKi8KKworc3RhdGljIHNzaXplX3QgYXQyNF9tYWNjX3JlYWQoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqbWFjYywgY2hhciAqYnVmLAorCQkJIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQgPSBjb250YWluZXJfb2YobWFjYywgc3RydWN0IGF0MjRfZGF0YSwgbWFjYyk7CisKKwlyZXR1cm4gYXQyNF9yZWFkKGF0MjQsIGJ1Ziwgb2Zmc2V0LCBjb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF0MjRfbWFjY193cml0ZShzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICptYWNjLCBjaGFyICpidWYsCisJCQkgIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQgPSBjb250YWluZXJfb2YobWFjYywgc3RydWN0IGF0MjRfZGF0YSwgbWFjYyk7CisKKwlyZXR1cm4gYXQyNF93cml0ZShhdDI0LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IGF0MjRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQpAQCAtNDEzLDYgKzQ0Myw5IEBACiAJCSAqIGlzIHJlY29tbWVuZGVkIGFueWhvdy4KIAkJICovCiAJCWNoaXAucGFnZV9zaXplID0gMTsKKworCQljaGlwLnNldHVwID0gTlVMTDsKKwkJY2hpcC5jb250ZXh0ID0gTlVMTDsKIAl9CiAKIAlpZiAoIWlzX3Bvd2VyX29mXzIoY2hpcC5ieXRlX2xlbikpCkBAIC00NjMsNiArNDk2LDggQEAKIAlhdDI0LT5iaW4ucmVhZCA9IGF0MjRfYmluX3JlYWQ7CiAJYXQyNC0+YmluLnNpemUgPSBjaGlwLmJ5dGVfbGVuOwogCisJYXQyNC0+bWFjYy5yZWFkID0gYXQyNF9tYWNjX3JlYWQ7CisKIAl3cml0YWJsZSA9ICEoY2hpcC5mbGFncyAmIEFUMjRfRkxBR19SRUFET05MWSk7CiAJaWYgKHdyaXRhYmxlKSB7CiAJCWlmICghdXNlX3NtYnVzIHx8IGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKQEAgLTQ3MCw2ICs1MDUsOCBAQAogCiAJCQl1bnNpZ25lZCB3cml0ZV9tYXggPSBjaGlwLnBhZ2Vfc2l6ZTsKIAorCQkJYXQyNC0+bWFjYy53cml0ZSA9IGF0MjRfbWFjY193cml0ZTsKKwogCQkJYXQyNC0+YmluLndyaXRlID0gYXQyNF9iaW5fd3JpdGU7CiAJCQlhdDI0LT5iaW4uYXR0ci5tb2RlIHw9IFNfSVdVU1I7CiAKQEAgLTUyMCw2ICs1NTcsMTAgQEAKIAkJYXQyNC0+d3JpdGVfbWF4LAogCQl1c2Vfc21idXMgPyAiLCB1c2Vfc21idXMiIDogIiIpOwogCisJLyogZXhwb3J0IGRhdGEgdG8ga2VybmVsIGNvZGUgKi8KKwlpZiAoY2hpcC5zZXR1cCkKKwkJY2hpcC5zZXR1cCgmYXQyNC0+bWFjYywgY2hpcC5jb250ZXh0KTsKKwogCXJldHVybiAwOwogCiBlcnJfY2xpZW50czoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNS5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKaW5kZXggMjkwZGJlOS4uNmJjMGRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogc3RydWN0IGF0MjVfZGF0YSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJKnNwaTsKKwlzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yCW1lbTsKIAlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAJc3RydWN0IHNwaV9lZXByb20JY2hpcDsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQliaW47CkBAIC03NSw2ICs3NiwxMyBAQAogCXN0cnVjdCBzcGlfdHJhbnNmZXIJdFsyXTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKIAorCWlmICh1bmxpa2VseShvZmZzZXQgPj0gYXQyNS0+YmluLnNpemUpKQorCQlyZXR1cm4gMDsKKwlpZiAoKG9mZnNldCArIGNvdW50KSA+IGF0MjUtPmJpbi5zaXplKQorCQljb3VudCA9IGF0MjUtPmJpbi5zaXplIC0gb2Zmc2V0OworCWlmICh1bmxpa2VseSghY291bnQpKQorCQlyZXR1cm4gY291bnQ7CisKIAljcCA9IGNvbW1hbmQ7CiAJKmNwKysgPSBBVDI1X1JFQUQ7CiAKQEAgLTEyNywxMyArMTM1LDYgQEAKIAlkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CiAJYXQyNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKHVubGlrZWx5KG9mZiA+PSBhdDI1LT5iaW4uc2l6ZSkpCi0JCXJldHVybiAwOwotCWlmICgob2ZmICsgY291bnQpID4gYXQyNS0+YmluLnNpemUpCi0JCWNvdW50ID0gYXQyNS0+YmluLnNpemUgLSBvZmY7Ci0JaWYgKHVubGlrZWx5KCFjb3VudCkpCi0JCXJldHVybiBjb3VudDsKLQogCXJldHVybiBhdDI1X2VlX3JlYWQoYXQyNSwgYnVmLCBvZmYsIGNvdW50KTsKIH0KIApAQCAtMTQ2LDYgKzE0NywxMyBAQAogCXVuc2lnbmVkCQlidWZfc2l6ZTsKIAl1OAkJCSpib3VuY2U7CiAKKwlpZiAodW5saWtlbHkob2ZmID49IGF0MjUtPmJpbi5zaXplKSkKKwkJcmV0dXJuIC1FRkJJRzsKKwlpZiAoKG9mZiArIGNvdW50KSA+IGF0MjUtPmJpbi5zaXplKQorCQljb3VudCA9IGF0MjUtPmJpbi5zaXplIC0gb2ZmOworCWlmICh1bmxpa2VseSghY291bnQpKQorCQlyZXR1cm4gY291bnQ7CisKIAkvKiBUZW1wIGJ1ZmZlciBzdGFydHMgd2l0aCBjb21tYW5kIGFuZCBhZGRyZXNzICovCiAJYnVmX3NpemUgPSBhdDI1LT5jaGlwLnBhZ2Vfc2l6ZTsKIAlpZiAoYnVmX3NpemUgPiBpb19saW1pdCkKQEAgLTI1MywxOCArMjYxLDMxIEBACiAJZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOwogCWF0MjUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmICh1bmxpa2VseShvZmYgPj0gYXQyNS0+YmluLnNpemUpKQotCQlyZXR1cm4gLUVGQklHOwotCWlmICgob2ZmICsgY291bnQpID4gYXQyNS0+YmluLnNpemUpCi0JCWNvdW50ID0gYXQyNS0+YmluLnNpemUgLSBvZmY7Ci0JaWYgKHVubGlrZWx5KCFjb3VudCkpCi0JCXJldHVybiBjb3VudDsKLQogCXJldHVybiBhdDI1X2VlX3dyaXRlKGF0MjUsIGJ1Ziwgb2ZmLCBjb3VudCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIExldCBpbi1rZXJuZWwgY29kZSBhY2Nlc3MgdGhlIGVlcHJvbSBkYXRhLiAqLworCitzdGF0aWMgc3NpemVfdCBhdDI1X21lbV9yZWFkKHN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgKm1lbSwgY2hhciAqYnVmLAorCQkJIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI1X2RhdGEgKmF0MjUgPSBjb250YWluZXJfb2YobWVtLCBzdHJ1Y3QgYXQyNV9kYXRhLCBtZW0pOworCisJcmV0dXJuIGF0MjVfZWVfcmVhZChhdDI1LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCitzdGF0aWMgc3NpemVfdCBhdDI1X21lbV93cml0ZShzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICptZW0sIGNoYXIgKmJ1ZiwKKwkJCSAgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGF0MjVfZGF0YSAqYXQyNSA9IGNvbnRhaW5lcl9vZihtZW0sIHN0cnVjdCBhdDI1X2RhdGEsIG1lbSk7CisKKwlyZXR1cm4gYXQyNV9lZV93cml0ZShhdDI1LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW50IGF0MjVfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYXQyNV9kYXRhCSphdDI1ID0gTlVMTDsKQEAgLTMxNyw2ICszMzgsMTAgQEAKIAlhdDI1LT5hZGRybGVuID0gYWRkcmxlbjsKIAogCS8qIEV4cG9ydCB0aGUgRUVQUk9NIGJ5dGVzIHRocm91Z2ggc3lzZnMsIHNpbmNlIHRoYXQncyBjb252ZW5pZW50LgorCSAqIEFuZCBtYXliZSB0byBvdGhlciBrZXJuZWwgY29kZTsgaXQgbWlnaHQgaG9sZCBhIGJvYXJkJ3MgRXRoZXJuZXQKKwkgKiBhZGRyZXNzLCBvciBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhIGdlbmVyYXRlZCBvbiB0aGUKKwkgKiBtYW51ZmFjdHVyaW5nIGZsb29yLgorCSAqCiAJICogRGVmYXVsdCB0byByb290LW9ubHkgYWNjZXNzIHRvIHRoZSBkYXRhOyBFRVBST01zIG9mdGVuIGhvbGQgZGF0YQogCSAqIHRoYXQncyBzZW5zaXRpdmUgZm9yIHJlYWQgYW5kL29yIHdyaXRlLCBsaWtlIGV0aGVybmV0IGFkZHJlc3NlcywKIAkgKiBzZWN1cml0eSBjb2RlcywgYm9hcmQtc3BlY2lmaWMgbWFudWZhY3R1cmluZyBjYWxpYnJhdGlvbnMsIGV0Yy4KQEAgLTMyNCwxNyArMzQ5LDIyIEBACiAJYXQyNS0+YmluLmF0dHIubmFtZSA9ICJlZXByb20iOwogCWF0MjUtPmJpbi5hdHRyLm1vZGUgPSBTX0lSVVNSOwogCWF0MjUtPmJpbi5yZWFkID0gYXQyNV9iaW5fcmVhZDsKKwlhdDI1LT5tZW0ucmVhZCA9IGF0MjVfbWVtX3JlYWQ7CiAKIAlhdDI1LT5iaW4uc2l6ZSA9IGF0MjUtPmNoaXAuYnl0ZV9sZW47CiAJaWYgKCEoY2hpcC0+ZmxhZ3MgJiBFRV9SRUFET05MWSkpIHsKIAkJYXQyNS0+YmluLndyaXRlID0gYXQyNV9iaW5fd3JpdGU7CiAJCWF0MjUtPmJpbi5hdHRyLm1vZGUgfD0gU19JV1VTUjsKKwkJYXQyNS0+bWVtLndyaXRlID0gYXQyNV9tZW1fd3JpdGU7CiAJfQogCiAJZXJyID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZzcGktPmRldi5rb2JqLCAmYXQyNS0+YmluKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CiAKKwlpZiAoY2hpcC0+c2V0dXApCisJCWNoaXAtPnNldHVwKCZhdDI1LT5tZW0sIGNoaXAtPmNvbnRleHQpOworCiAJZGV2X2luZm8oJnNwaS0+ZGV2LCAiJVpkICVzICVzIGVlcHJvbSVzLCBwYWdlc2l6ZSAldVxuIiwKIAkJKGF0MjUtPmJpbi5zaXplIDwgMTAyNCkKIAkJCT8gYXQyNS0+YmluLnNpemUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L01ha2VmaWxlIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvTWFrZWZpbGUKaW5kZXggOWU5MTcwYi4uYmNkODEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvTWFrZWZpbGUKQEAgLTMsNSArMyw1IEBACiBlbmRpZgogCiBvYmotJChDT05GSUdfU0dJX0dSVSkgOj0gZ3J1Lm8KLWdydS15IDo9IGdydWZpbGUubyBncnVtYWluLm8gZ3J1ZmF1bHQubyBncnV0bGJwdXJnZS5vIGdydXByb2Nmcy5vIGdydWtzZXJ2aWNlcy5vCitncnUteSA6PSBncnVmaWxlLm8gZ3J1bWFpbi5vIGdydWZhdWx0Lm8gZ3J1dGxicHVyZ2UubyBncnVwcm9jZnMubyBncnVrc2VydmljZXMubyBncnVoYW5kbGVzLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oCmluZGV4IDQ4NzYyZTcuLjNmZGUzM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydV9pbnN0cnVjdGlvbnMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmgKQEAgLTE5LDggKzE5LDExIEBACiAjaWZuZGVmIF9fR1JVX0lOU1RSVUNUSU9OU19IX18KICNkZWZpbmUgX19HUlVfSU5TVFJVQ1RJT05TX0hfXwogCi0jZGVmaW5lIGdydV9mbHVzaF9jYWNoZV9ob29rKHApCi0jZGVmaW5lIGdydV9lbXVsYXRvcl93YWl0X2hvb2socCwgdykKK2V4dGVybiBpbnQgZ3J1X2NoZWNrX3N0YXR1c19wcm9jKHZvaWQgKmNiKTsKK2V4dGVybiBpbnQgZ3J1X3dhaXRfcHJvYyh2b2lkICpjYik7CitleHRlcm4gdm9pZCBncnVfd2FpdF9hYm9ydF9wcm9jKHZvaWQgKmNiKTsKKworCiAKIC8qCiAgKiBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IGZ1bmN0aW9ucwpAQCAtMjksMTYgKzMyLDE2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSUE2NCkKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+Ci0jZGVmaW5lIF9fZmx1c2hfY2FjaGUocCkJCWlhNjRfZmMocCkKKyNkZWZpbmUgX19mbHVzaF9jYWNoZShwKQkJaWE2NF9mYygodW5zaWduZWQgbG9uZylwKQogLyogVXNlIHZvbGF0aWxlIG9uIElBNjQgdG8gZW5zdXJlIG9yZGVyaW5nIHZpYSBzdDQucmVsICovCi0jZGVmaW5lIGdydV9vcmRlcmVkX3N0b3JlX2ludChwLHYpCQkJCQlcCisjZGVmaW5lIGdydV9vcmRlcmVkX3N0b3JlX2ludChwLCB2KQkJCQkJXAogCQlkbyB7CQkJCQkJCVwKIAkJCWJhcnJpZXIoKTsJCQkJCVwKIAkJCSooKHZvbGF0aWxlIGludCAqKShwKSkgPSB2OyAvKiBmb3JjZSBzdC5yZWwgKi8JXAogCQl9IHdoaWxlICgwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQogI2RlZmluZSBfX2ZsdXNoX2NhY2hlKHApCQljbGZsdXNoKHApCi0jZGVmaW5lIGdydV9vcmRlcmVkX3N0b3JlX2ludChwLHYpCQkJCQlcCisjZGVmaW5lIGdydV9vcmRlcmVkX3N0b3JlX2ludChwLCB2KQkJCQkJXAogCQlkbyB7CQkJCQkJCVwKIAkJCWJhcnJpZXIoKTsJCQkJCVwKIAkJCSooaW50ICopcCA9IHY7CQkJCQlcCkBAIC01NTgsMjAgKzU2MSwxOSBAQAogCiAjZGVmaW5lIEdSVV9FWENfU1RSX1NJWkUJCTI1NgogCi1leHRlcm4gaW50IGdydV9jaGVja19zdGF0dXNfcHJvYyh2b2lkICpjYik7Ci1leHRlcm4gaW50IGdydV93YWl0X3Byb2Modm9pZCAqY2IpOwotZXh0ZXJuIHZvaWQgZ3J1X3dhaXRfYWJvcnRfcHJvYyh2b2lkICpjYik7CiAKIC8qCiAgKiBDb250cm9sIGJsb2NrIGRlZmluaXRpb24gZm9yIGNoZWNraW5nIHN0YXR1cwogICovCiBzdHJ1Y3QgZ3J1X2NvbnRyb2xfYmxvY2tfc3RhdHVzIHsKIAl1bnNpZ25lZCBpbnQJaWNtZAkJOjE7Ci0JdW5zaWduZWQgaW50CXVudXNlZDEJCTozMTsKKwl1bnNpZ25lZCBpbnQJaW1hCQk6MzsKKwl1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQwCTo0OworCXVuc2lnbmVkIGludAl1bnVzZWQxCQk6MjQ7CiAJdW5zaWduZWQgaW50CXVudXNlZDIJCToyNDsKIAl1bnNpZ25lZCBpbnQJaXN0YXR1cwkJOjI7CiAJdW5zaWduZWQgaW50CWlzdWJzdGF0dXMJOjQ7Ci0JdW5zaWduZWQgaW50CWludXNlZDMJCToyOworCXVuc2lnbmVkIGludAl1bnVzZWQzCQk6MjsKIH07CiAKIC8qIEdldCBDQiBzdGF0dXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCmluZGV4IDNlZTY5OGEuLmFiMTE4NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlICJncnUuaCIKICNpbmNsdWRlICJncnV0YWJsZXMuaCIKQEAgLTI2Niw2ICsyNjcsNDQgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBncnVfdnRvcChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkgICAgaW50IHdyaXRlLCBpbnQgYXRvbWljLCB1bnNpZ25lZCBsb25nICpncGEsIGludCAqcGFnZXNoaWZ0KQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ3RzLT50c19tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwl1bnNpZ25lZCBsb25nIHBhZGRyOworCWludCByZXQsIHBzOworCisJdm1hID0gZmluZF92bWEobW0sIHZhZGRyKTsKKwlpZiAoIXZtYSkKKwkJZ290byBpbnZhbDsKKworCS8qCisJICogQXRvbWljIGxvb2t1cCBpcyBmYXN0ZXIgJiB1c3VhbGx5IHdvcmtzIGV2ZW4gaWYgY2FsbGVkIGluIG5vbi1hdG9taWMKKwkgKiBjb250ZXh0LgorCSAqLworCXJtYigpOwkvKiBNdXN0L2NoZWNrIG1zX3JhbmdlX2FjdGl2ZSBiZWZvcmUgbG9hZGluZyBQVEVzICovCisJcmV0ID0gYXRvbWljX3B0ZV9sb29rdXAodm1hLCB2YWRkciwgd3JpdGUsICZwYWRkciwgJnBzKTsKKwlpZiAocmV0KSB7CisJCWlmIChhdG9taWMpCisJCQlnb3RvIHVwbTsKKwkJaWYgKG5vbl9hdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLCAmcHMpKQorCQkJZ290byBpbnZhbDsKKwl9CisJaWYgKGlzX2dydV9wYWRkcihwYWRkcikpCisJCWdvdG8gaW52YWw7CisJcGFkZHIgPSBwYWRkciAmIH4oKDFVTCA8PCBwcykgLSAxKTsKKwkqZ3BhID0gdXZfc29jX3BoeXNfcmFtX3RvX2dwYShwYWRkcik7CisJKnBhZ2VzaGlmdCA9IHBzOworCXJldHVybiAwOworCitpbnZhbDoKKwlyZXR1cm4gLTE7Cit1cG06CisJcmV0dXJuIC0yOworfQorCisKIC8qCiAgKiBEcm9wIGEgVExCIGVudHJ5IGludG8gdGhlIEdSVS4gVGhlIGZhdWx0IGlzIGRlc2NyaWJlZCBieSBpbmZvIGluIGFuIFRGSC4KICAqCUlucHV0OgpAQCAtMjgwLDEwICszMTksOCBAQAogCQkJICBzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwKIAkJCSAgdW5zaWduZWQgbG9uZyBfX3VzZXIgKmNiKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ3RzLT50c19tbTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlpbnQgcGFnZXNoaWZ0LCBhc2lkLCB3cml0ZSwgcmV0OwotCXVuc2lnbmVkIGxvbmcgcGFkZHIsIGdwYSwgdmFkZHI7CisJaW50IHBhZ2VzaGlmdCA9IDAsIGFzaWQsIHdyaXRlLCByZXQsIGF0b21pYyA9ICFjYjsKKwl1bnNpZ25lZCBsb25nIGdwYSA9IDAsIHZhZGRyID0gMDsKIAogCS8qCiAJICogTk9URTogVGhlIEdSVSBjb250YWlucyBtYWdpYyBoYXJkd2FyZSB0aGF0IGVsaW1pbmF0ZXMgcmFjZXMgYmV0d2VlbgpAQCAtMzE3LDI4ICszNTQsMTkgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmd0cy0+dHNfZ21zLT5tc19yYW5nZV9hY3RpdmUpKQogCQlnb3RvIGZhaWxhY3RpdmU7CiAKLQl2bWEgPSBmaW5kX3ZtYShtbSwgdmFkZHIpOwotCWlmICghdm1hKQorCXJldCA9IGdydV92dG9wKGd0cywgdmFkZHIsIHdyaXRlLCBhdG9taWMsICZncGEsICZwYWdlc2hpZnQpOworCWlmIChyZXQgPT0gLTEpCiAJCWdvdG8gZmFpbGludmFsOworCWlmIChyZXQgPT0gLTIpCisJCWdvdG8gZmFpbHVwbTsKIAotCS8qCi0JICogQXRvbWljIGxvb2t1cCBpcyBmYXN0ZXIgJiB1c3VhbGx5IHdvcmtzIGV2ZW4gaWYgY2FsbGVkIGluIG5vbi1hdG9taWMKLQkgKiBjb250ZXh0LgotCSAqLwotCXJtYigpOwkvKiBNdXN0L2NoZWNrIG1zX3JhbmdlX2FjdGl2ZSBiZWZvcmUgbG9hZGluZyBQVEVzICovCi0JcmV0ID0gYXRvbWljX3B0ZV9sb29rdXAodm1hLCB2YWRkciwgd3JpdGUsICZwYWRkciwgJnBhZ2VzaGlmdCk7Ci0JaWYgKHJldCkgewotCQlpZiAoIWNiKQorCWlmICghKGd0cy0+dHNfc2l6ZWF2YWlsICYgR1JVX1NJWkVBVkFJTChwYWdlc2hpZnQpKSkgeworCQlndHMtPnRzX3NpemVhdmFpbCB8PSBHUlVfU0laRUFWQUlMKHBhZ2VzaGlmdCk7CisJCWlmIChhdG9taWMgfHwgIWdydV91cGRhdGVfY2NoKGd0cywgMCkpIHsKKwkJCWd0cy0+dHNfZm9yY2VfY2NoX3JlbG9hZCA9IDE7CiAJCQlnb3RvIGZhaWx1cG07Ci0JCWlmIChub25fYXRvbWljX3B0ZV9sb29rdXAodm1hLCB2YWRkciwgd3JpdGUsICZwYWRkciwKLQkJCQkJICAmcGFnZXNoaWZ0KSkKLQkJCWdvdG8gZmFpbGludmFsOworCQl9CiAJfQotCWlmIChpc19ncnVfcGFkZHIocGFkZHIpKQotCQlnb3RvIGZhaWxpbnZhbDsKLQotCXBhZGRyID0gcGFkZHIgJiB+KCgxVUwgPDwgcGFnZXNoaWZ0KSAtIDEpOwotCWdwYSA9IHV2X3NvY19waHlzX3JhbV90b19ncGEocGFkZHIpOwogCWdydV9jYl9zZXRfaXN0YXR1c19hY3RpdmUoY2IpOwogCXRmaF93cml0ZV9yZXN0YXJ0KHRmaCwgZ3BhLCBHQUFfUkFNLCB2YWRkciwgYXNpZCwgd3JpdGUsCiAJCQkgIEdSVV9QQUdFU0laRShwYWdlc2hpZnQpKTsKQEAgLTM2OCw2ICszOTYsNyBAQAogCiBmYWlsZm1tOgogCS8qIEZNTSBzdGF0ZSBvbiBVUE0gY2FsbCAqLworCWdydV9mbHVzaF9jYWNoZSh0ZmgpOwogCVNUQVQodGxiX2Ryb3Bpbl9mYWlsX2ZtbSk7CiAJZ3J1X2RiZyhncnVkZXYsICJGQUlMRUQgZm1tIHRmaDogMHglcCwgc3RhdGUgJWRcbiIsIHRmaCwgdGZoLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CkBAIC00NDgsNiArNDc3LDcgQEAKIAkJCXVwX3JlYWQoJmd0cy0+dHNfbW0tPm1tYXBfc2VtKTsKIAkJfSBlbHNlIHsKIAkJCXRmaF91c2VyX3BvbGxpbmdfbW9kZSh0ZmgpOworCQkJU1RBVChpbnRyX21tX2xvY2tfZmFpbGVkKTsKIAkJfQogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00OTcsMTAgKzUyNyw4IEBACiAJaWYgKCFndHMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHVjYm51bSA+PSBndHMtPnRzX2Nicl9hdV9jb3VudCAqIEdSVV9DQlJfQVVfU0laRSkgewotCQlyZXQgPSAtRUlOVkFMOworCWlmICh1Y2JudW0gPj0gZ3RzLT50c19jYnJfYXVfY291bnQgKiBHUlVfQ0JSX0FVX1NJWkUpCiAJCWdvdG8gZXhpdDsKLQl9CiAKIAkvKgogCSAqIElmIGZvcmNlX3VubG9hZCBpcyBzZXQsIHRoZSBVUE0gVExCIGZhdWx0IGlzIHBob255LiBUaGUgdGFzawpAQCAtNTA4LDYgKzUzNiwyMCBAQAogCSAqIHVubG9hZCB0aGUgY29udGV4dC4gVGhlIHRhc2sgd2lsbCBwYWdlIGZhdWx0IGFuZCBhc3NpZ24gYSBuZXcKIAkgKiBjb250ZXh0LgogCSAqLworCWlmIChndHMtPnRzX3RnaWRfb3duZXIgPT0gY3VycmVudC0+dGdpZCAmJiBndHMtPnRzX2JsYWRlID49IDAgJiYKKwkJCQlndHMtPnRzX2JsYWRlICE9IHV2X251bWFfYmxhZGVfaWQoKSkgeworCQlTVEFUKGNhbGxfb3Nfb2Zmbm9kZV9yZWZlcmVuY2UpOworCQlndHMtPnRzX2ZvcmNlX3VubG9hZCA9IDE7CisJfQorCisJLyoKKwkgKiBDQ0ggbWF5IGNvbnRhaW4gc3RhbGUgZGF0YSBpZiB0c19mb3JjZV9jY2hfcmVsb2FkIGlzIHNldC4KKwkgKi8KKwlpZiAoZ3RzLT50c19ncnUgJiYgZ3RzLT50c19mb3JjZV9jY2hfcmVsb2FkKSB7CisJCWdydV91cGRhdGVfY2NoKGd0cywgMCk7CisJCWd0cy0+dHNfZm9yY2VfY2NoX3JlbG9hZCA9IDA7CisJfQorCiAJcmV0ID0gLUVBR0FJTjsKIAljYnJudW0gPSB0aHJlYWRfY2JyX251bWJlcihndHMsIHVjYm51bSk7CiAJaWYgKGd0cy0+dHNfZm9yY2VfdW5sb2FkKSB7CkBAIC01NDEsMTEgKzU4MywxMyBAQAogCWlmICghZ3RzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChndHMtPnRzX2dydSkgewotCQl1Y2JudW0gPSBnZXRfY2JfbnVtYmVyKCh2b2lkICopZXhjZGV0LmNiKTsKKwl1Y2JudW0gPSBnZXRfY2JfbnVtYmVyKCh2b2lkICopZXhjZGV0LmNiKTsKKwlpZiAodWNibnVtID49IGd0cy0+dHNfY2JyX2F1X2NvdW50ICogR1JVX0NCUl9BVV9TSVpFKSB7CisJCXJldCA9IC1FSU5WQUw7CisJfSBlbHNlIGlmIChndHMtPnRzX2dydSkgewogCQljYnJudW0gPSB0aHJlYWRfY2JyX251bWJlcihndHMsIHVjYm51bSk7CiAJCWNiZSA9IGdldF9jYmVfYnlfaW5kZXgoZ3RzLT50c19ncnUsIGNicm51bSk7Ci0JCXByZWZldGNodyhjYmUpOwkJLyogSGFybWxlc3Mgb24gaGFyZHdhcmUsIHJlcXVpcmVkIGZvciBlbXVsYXRvciAqLworCQlwcmVmZXRjaHcoY2JlKTsvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCiAJCWV4Y2RldC5vcGMgPSBjYmUtPm9wY2NweTsKIAkJZXhjZGV0LmV4b3BjID0gY2JlLT5leG9wY2NweTsKIAkJZXhjZGV0LmVjYXVzZSA9IGNiZS0+ZWNhdXNlOwpAQCAtNTY3LDYgKzYxMSwzMSBAQAogLyoKICAqIFVzZXIgcmVxdWVzdCB0byB1bmxvYWQgYSBjb250ZXh0LiBDb250ZW50IGlzIHNhdmVkIGZvciBwb3NzaWJsZSByZWxvYWQuCiAgKi8KK3N0YXRpYyBpbnQgZ3J1X3VubG9hZF9hbGxfY29udGV4dHModm9pZCkKK3sKKwlzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzOworCXN0cnVjdCBncnVfc3RhdGUgKmdydTsKKwlpbnQgZ2lkLCBjdHhudW07CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJZm9yZWFjaF9naWQoZ2lkKSB7CisJCWdydSA9IEdJRF9UT19HUlUoZ2lkKTsKKwkJc3Bpbl9sb2NrKCZncnUtPmdzX2xvY2spOworCQlmb3IgKGN0eG51bSA9IDA7IGN0eG51bSA8IEdSVV9OVU1fQ0NIOyBjdHhudW0rKykgeworCQkJZ3RzID0gZ3J1LT5nc19ndHNbY3R4bnVtXTsKKwkJCWlmIChndHMgJiYgbXV0ZXhfdHJ5bG9jaygmZ3RzLT50c19jdHhsb2NrKSkgeworCQkJCXNwaW5fdW5sb2NrKCZncnUtPmdzX2xvY2spOworCQkJCWdydV91bmxvYWRfY29udGV4dChndHMsIDEpOworCQkJCWdydV91bmxvY2tfZ3RzKGd0cyk7CisJCQkJc3Bpbl9sb2NrKCZncnUtPmdzX2xvY2spOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZncnUtPmdzX2xvY2spOworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IGdydV91c2VyX3VubG9hZF9jb250ZXh0KHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHM7CkBAIC01NzgsNiArNjQ3LDkgQEAKIAogCWdydV9kYmcoZ3J1ZGV2LCAiZ3NlZyAweCVseFxuIiwgcmVxLmdzZWcpOwogCisJaWYgKCFyZXEuZ3NlZykKKwkJcmV0dXJuIGdydV91bmxvYWRfYWxsX2NvbnRleHRzKCk7CisKIAlndHMgPSBncnVfZmluZF9sb2NrX2d0cyhyZXEuZ3NlZyk7CiAJaWYgKCFndHMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjA5LDcgKzY4MSw3IEBACiAJaWYgKCFndHMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZ3J1X2ZsdXNoX3RsYl9yYW5nZShndHMtPnRzX2dtcywgcmVxLnZhZGRyLCByZXEudmFkZHIgKyByZXEubGVuKTsKKwlncnVfZmx1c2hfdGxiX3JhbmdlKGd0cy0+dHNfZ21zLCByZXEudmFkZHIsIHJlcS5sZW4pOwogCWdydV91bmxvY2tfZ3RzKGd0cyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYwppbmRleCBjNjdlNGU4Li4zZTZlNDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCkBAIC00NSw3ICs0NSw5IEBACiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KIAogc3RydWN0IGdydV9ibGFkZV9zdGF0ZSAqZ3J1X2Jhc2VbR1JVX01BWF9CTEFERVNdIF9fcmVhZF9tb3N0bHk7Ci11bnNpZ25lZCBsb25nIGdydV9zdGFydF9wYWRkciwgZ3J1X2VuZF9wYWRkciBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgbG9uZyBncnVfc3RhcnRfcGFkZHIgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGxvbmcgZ3J1X2VuZF9wYWRkciBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgaW50IGdydV9tYXhfZ2lkcyBfX3JlYWRfbW9zdGx5Owogc3RydWN0IGdydV9zdGF0c19zIGdydV9zdGF0czsKIAogLyogR3VhcmFudGVlZCB1c2VyIGF2YWlsYWJsZSByZXNvdXJjZXMgb24gZWFjaCBub2RlICovCkBAIC0xMDEsNyArMTAzLDcgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh2bWEtPnZtX3N0YXJ0ICYgKEdSVV9HU0VHX1BBR0VTSVpFIC0gMSkgfHwKLQkgICAgCQkJdm1hLT52bV9lbmQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSkKKwkJCQl2bWEtPnZtX2VuZCAmIChHUlVfR1NFR19QQUdFU0laRSAtIDEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZtYS0+dm1fZmxhZ3MgfD0KQEAgLTI3Myw4ICsyNzUsMTEgQEAKIAlncnUtPmdzX2JsYWRlX2lkID0gYmlkOwogCWdydS0+Z3NfY2JyX21hcCA9IChHUlVfQ0JSX0FVID09IDY0KSA/IH4wIDogKDFVTCA8PCBHUlVfQ0JSX0FVKSAtIDE7CiAJZ3J1LT5nc19kc3JfbWFwID0gKDFVTCA8PCBHUlVfRFNSX0FVKSAtIDE7CisJZ3J1LT5nc19hc2lkX2xpbWl0ID0gTUFYX0FTSUQ7CiAJZ3J1X3RnaF9mbHVzaF9pbml0KGdydSk7Ci0JZ3J1X2RiZyhncnVkZXYsICJiaWQgJWQsIG5pZCAlZCwgZ3J1ICV4LCB2YWRkciAlcCAoMHglbHgpXG4iLAorCWlmIChncnUtPmdzX2dpZCA+PSBncnVfbWF4X2dpZHMpCisJCWdydV9tYXhfZ2lkcyA9IGdydS0+Z3NfZ2lkICsgMTsKKwlncnVfZGJnKGdydWRldiwgImJpZCAlZCwgbmlkICVkLCBnaWQgJWQsIHZhZGRyICVwICgweCVseClcbiIsCiAJCWJpZCwgbmlkLCBncnUtPmdzX2dpZCwgZ3J1LT5nc19ncnVfYmFzZV92YWRkciwKIAkJZ3J1LT5nc19ncnVfYmFzZV9wYWRkcik7CiAJZ3J1X2tzZXJ2aWNlc19pbml0KGdydSk7CkBAIC0yOTUsNyArMzAwLDcgQEAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKIAkJYmlkID0gdXZfbm9kZV90b19ibGFkZV9pZChuaWQpOwogCQlwbm9kZSA9IHV2X25vZGVfdG9fcG5vZGUobmlkKTsKLQkJaWYgKGdydV9iYXNlW2JpZF0pCisJCWlmIChiaWQgPCAwIHx8IGdydV9iYXNlW2JpZF0pCiAJCQljb250aW51ZTsKIAkJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobmlkLCBHRlBfS0VSTkVMLCBvcmRlcik7CiAJCWlmICghcGFnZSkKQEAgLTMwOCwxMSArMzEzLDExIEBACiAJCWRzcmJ5dGVzID0gMDsKIAkJY2JycyA9IDA7CiAJCWZvciAoZ3J1ID0gZ3J1X2Jhc2VbYmlkXS0+YnNfZ3J1cywgY2hpcCA9IDA7Ci0JCSAgICAgCQljaGlwIDwgR1JVX0NISVBMRVRTX1BFUl9CTEFERTsKKwkJCQljaGlwIDwgR1JVX0NISVBMRVRTX1BFUl9CTEFERTsKIAkJCQljaGlwKyssIGdydSsrKSB7CiAJCQlwYWRkciA9IGdydV9jaGlwbGV0X3BhZGRyKGdydV9iYXNlX3BhZGRyLCBwbm9kZSwgY2hpcCk7CiAJCQl2YWRkciA9IGdydV9jaGlwbGV0X3ZhZGRyKGdydV9iYXNlX3ZhZGRyLCBwbm9kZSwgY2hpcCk7Ci0JCQlncnVfaW5pdF9jaGlwbGV0KGdydSwgcGFkZHIsIHZhZGRyLCBiaWQsIG5pZCwgY2hpcCk7CisJCQlncnVfaW5pdF9jaGlwbGV0KGdydSwgcGFkZHIsIHZhZGRyLCBuaWQsIGJpZCwgY2hpcCk7CiAJCQluID0gaHdlaWdodDY0KGdydS0+Z3NfY2JyX21hcCkgKiBHUlVfQ0JSX0FVX1NJWkU7CiAJCQljYnJzID0gbWF4KGNicnMsIG4pOwogCQkJbiA9IGh3ZWlnaHQ2NChncnUtPmdzX2Rzcl9tYXApICogR1JVX0RTUl9BVV9CWVRFUzsKQEAgLTM3MCwyNiArMzc1LDI2IEBACiAJdm9pZCAqZ3J1X3N0YXJ0X3ZhZGRyOwogCiAJaWYgKCFpc191dl9zeXN0ZW0oKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PREVWOwogCiAjaWYgZGVmaW5lZCBDT05GSUdfSUE2NAogCWdydV9zdGFydF9wYWRkciA9IDB4ZDAwMDAwMDAwMFVMOyAvKiBaWlpaWlpaWlpaWlpaWlpaWlpaIGZpeG1lICovCiAjZWxzZQogCWdydV9zdGFydF9wYWRkciA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUikgJgogCQkJCTB4N2ZmZmZmZmZmZmZmVUw7Ci0KICNlbmRpZgogCWdydV9zdGFydF92YWRkciA9IF9fdmEoZ3J1X3N0YXJ0X3BhZGRyKTsKLQlncnVfZW5kX3BhZGRyID0gZ3J1X3N0YXJ0X3BhZGRyICsgTUFYX05VTU5PREVTICogR1JVX1NJWkU7CisJZ3J1X2VuZF9wYWRkciA9IGdydV9zdGFydF9wYWRkciArIEdSVV9NQVhfQkxBREVTICogR1JVX1NJWkU7CiAJcHJpbnRrKEtFUk5fSU5GTyAiR1JVIHNwYWNlOiAweCVseCAtIDB4JWx4XG4iLAogCSAgICAgICBncnVfc3RhcnRfcGFkZHIsIGdydV9lbmRfcGFkZHIpOwogCWlycSA9IGdldF9iYXNlX2lycSgpOwogCWZvciAoY2hpcCA9IDA7IGNoaXAgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOyBjaGlwKyspIHsKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxICsgY2hpcCwgZ3J1X2ludHIsIDAsIGlkLCBOVUxMKTsKLQkJLyogVE9ETzogZml4IGlycSBoYW5kbGluZyBvbiB4ODYuIEZvciBub3cgaWdub3JlIGZhaWx1cmVzIGJlY2F1c2UKKwkJLyogVE9ETzogZml4IGlycSBoYW5kbGluZyBvbiB4ODYuIEZvciBub3cgaWdub3JlIGZhaWx1cmUgYmVjYXVzZQogCQkgKiBpbnRlcnJ1cHRzIGFyZSBub3QgcmVxdWlyZWQgJiBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZCAqLwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoIiEhIVdBUk5JTkc6IEdSVSBpZ25vcmluZyByZXF1ZXN0IGZhaWx1cmUhISFcbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIhISFXQVJOSU5HOiBHUlUgaWdub3JpbmcgcmVxdWVzdCBmYWlsdXJlISEhXG4iKTsKIAkJCXJldCA9IDA7CiAJCX0KIAkJaWYgKHJldCkgewpAQCAtNDM1LDcgKzQ0MCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBncnVfZXhpdCh2b2lkKQogewotCWludCBpLCBiaWQ7CisJaW50IGksIGJpZCwgZ2lkOwogCWludCBvcmRlciA9IGdldF9vcmRlcihzaXplb2Yoc3RydWN0IGdydV9zdGF0ZSkgKgogCQkJICAgICAgR1JVX0NISVBMRVRTX1BFUl9CTEFERSk7CiAKQEAgLTQ0NSw2ICs0NTAsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOyBpKyspCiAJCWZyZWVfaXJxKElSUV9HUlUgKyBpLCBOVUxMKTsKIAorCWZvcmVhY2hfZ2lkKGdpZCkKKwkJZ3J1X2tzZXJ2aWNlc19leGl0KEdJRF9UT19HUlUoZ2lkKSk7CisKIAlmb3IgKGJpZCA9IDA7IGJpZCA8IEdSVV9NQVhfQkxBREVTOyBiaWQrKykKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylncnVfYmFzZVtiaWRdLCBvcmRlcik7CiAKQEAgLTQ2OSw3ICs0NzcsMTEgQEAKIAkuZmF1bHQJCT0gZ3J1X2ZhdWx0LAogfTsKIAorI2lmbmRlZiBNT0RVTEUKIGZzX2luaXRjYWxsKGdydV9pbml0KTsKKyNlbHNlCittb2R1bGVfaW5pdChncnVfaW5pdCk7CisjZW5kaWYKIG1vZHVsZV9leGl0KGdydV9leGl0KTsKIAogbW9kdWxlX3BhcmFtKGdydV9vcHRpb25zLCB1bG9uZywgMDY0NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3Y2NiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqICAgICAgICAgICAgICBHUlUgS0VSTkVMIE1DUyBJTlNUUlVDVElPTlMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSAiZ3J1LmgiCisjaW5jbHVkZSAiZ3J1bGliLmgiCisjaW5jbHVkZSAiZ3J1dGFibGVzLmgiCisKKy8qIDEwIHNlYyAqLworI2lmZGVmIENPTkZJR19JQTY0CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2RlZmluZSBHUlVfT1BFUkFUSU9OX1RJTUVPVVQJKCgoY3ljbGVzX3QpIGxvY2FsX2NwdV9kYXRhLT5pdGNfZnJlcSkqMTApCisjZWxzZQorI2luY2x1ZGUgPGFzbS90c2MuaD4KKyNkZWZpbmUgR1JVX09QRVJBVElPTl9USU1FT1VUCSgoY3ljbGVzX3QpIHRzY19raHoqMTAqMTAwMCkKKyNlbmRpZgorCisvKiBFeHRyYWN0IHRoZSBzdGF0dXMgZmllbGQgZnJvbSBhIGtlcm5lbCBoYW5kbGUgKi8KKyNkZWZpbmUgR0VUX01TRUdfSEFORExFX1NUQVRVUyhoKQkoKCgqKHVuc2lnbmVkIGxvbmcgKikoaCkpID4+IDE2KSAmIDMpCisKK3N0cnVjdCBtY3Nfb3Bfc3RhdGlzdGljIG1jc19vcF9zdGF0aXN0aWNzW21jc29wX2xhc3RdOworCitzdGF0aWMgdm9pZCB1cGRhdGVfbWNzX3N0YXRzKGVudW0gbWNzX29wIG9wLCB1bnNpZ25lZCBsb25nIGNsa3MpCit7CisJYXRvbWljX2xvbmdfaW5jKCZtY3Nfb3Bfc3RhdGlzdGljc1tvcF0uY291bnQpOworCWF0b21pY19sb25nX2FkZChjbGtzLCAmbWNzX29wX3N0YXRpc3RpY3Nbb3BdLnRvdGFsKTsKKwlpZiAobWNzX29wX3N0YXRpc3RpY3Nbb3BdLm1heCA8IGNsa3MpCisJCW1jc19vcF9zdGF0aXN0aWNzW29wXS5tYXggPSBjbGtzOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9pbnN0cnVjdGlvbih2b2lkICpoKQoreworCXVuc2lnbmVkIGxvbmcgKncwID0gaDsKKworCXdtYigpOwkJLyogc2V0dGluZyBDTUQgYml0IG11c3QgYmUgbGFzdCAqLworCSp3MCA9ICp3MCB8IDE7CisJZ3J1X2ZsdXNoX2NhY2hlKGgpOworfQorCitzdGF0aWMgaW50IHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUodm9pZCAqaCwgZW51bSBtY3Nfb3Agb3BjKQoreworCWludCBzdGF0dXM7CisJY3ljbGVzX3Qgc3RhcnRfdGltZSA9IGdldF9jeWNsZXMoKTsKKworCXdoaWxlICgxKSB7CisJCWNwdV9yZWxheCgpOworCQlzdGF0dXMgPSBHRVRfTVNFR19IQU5ETEVfU1RBVFVTKGgpOworCQlpZiAoc3RhdHVzICE9IENDSFNUQVRVU19BQ1RJVkUpCisJCQlicmVhazsKKwkJaWYgKEdSVV9PUEVSQVRJT05fVElNRU9VVCA8IChnZXRfY3ljbGVzKCkgLSBzdGFydF90aW1lKSkKKwkJCXBhbmljKCJHUlUgJXAgaXMgbWFsZnVuY3Rpb25pbmdcbiIsIGgpOworCX0KKwlpZiAoZ3J1X29wdGlvbnMgJiBPUFRfU1RBVFMpCisJCXVwZGF0ZV9tY3Nfc3RhdHMob3BjLCBnZXRfY3ljbGVzKCkgLSBzdGFydF90aW1lKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgY2NoX2FsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoLAorCQlpbnQgYXNpZHZhbCwgaW50IHNpemVhdmFpbCwgdW5zaWduZWQgbG9uZyBjYnJtYXAsCisJCXVuc2lnbmVkIGxvbmcgZHNybWFwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQljY2gtPmFzaWRbaV0gPSAoYXNpZHZhbCsrKTsKKwkJY2NoLT5zaXplYXZhaWxbaV0gPSBzaXplYXZhaWw7CisJfQorCWNjaC0+ZHNyX2FsbG9jYXRpb25fbWFwID0gZHNybWFwOworCWNjaC0+Y2JyX2FsbG9jYXRpb25fbWFwID0gY2JybWFwOworCWNjaC0+b3BjID0gQ0NIT1BfQUxMT0NBVEU7CisJc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKKwlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX2FsbG9jYXRlKTsKK30KKworaW50IGNjaF9zdGFydChzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKK3sKKwljY2gtPm9wYyA9IENDSE9QX1NUQVJUOworCXN0YXJ0X2luc3RydWN0aW9uKGNjaCk7CisJcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUoY2NoLCBjY2hvcF9zdGFydCk7Cit9CisKK2ludCBjY2hfaW50ZXJydXB0KHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKQoreworCWNjaC0+b3BjID0gQ0NIT1BfSU5URVJSVVBUOworCXN0YXJ0X2luc3RydWN0aW9uKGNjaCk7CisJcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUoY2NoLCBjY2hvcF9pbnRlcnJ1cHQpOworfQorCitpbnQgY2NoX2RlYWxsb2NhdGUoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpCit7CisJY2NoLT5vcGMgPSBDQ0hPUF9ERUFMTE9DQVRFOworCXN0YXJ0X2luc3RydWN0aW9uKGNjaCk7CisJcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUoY2NoLCBjY2hvcF9kZWFsbG9jYXRlKTsKK30KKworaW50IGNjaF9pbnRlcnJ1cHRfc3luYyhzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUKKwkJCQkgICAgICpjY2gpCit7CisJY2NoLT5vcGMgPSBDQ0hPUF9JTlRFUlJVUFRfU1lOQzsKKwlzdGFydF9pbnN0cnVjdGlvbihjY2gpOworCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCwgY2Nob3BfaW50ZXJydXB0X3N5bmMpOworfQorCitpbnQgdGdoX2ludmFsaWRhdGUoc3RydWN0IGdydV90bGJfZ2xvYmFsX2hhbmRsZSAqdGdoLAorCQkJCSB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRybWFzaywKKwkJCQkgaW50IGFzaWQsIGludCBwYWdlc2l6ZSwgaW50IGdsb2JhbCwgaW50IG4sCisJCQkJIHVuc2lnbmVkIHNob3J0IGN0eGJpdG1hcCkKK3sKKwl0Z2gtPnZhZGRyID0gdmFkZHI7CisJdGdoLT5hc2lkID0gYXNpZDsKKwl0Z2gtPnBhZ2VzaXplID0gcGFnZXNpemU7CisJdGdoLT5uID0gbjsKKwl0Z2gtPmdsb2JhbCA9IGdsb2JhbDsKKwl0Z2gtPnZhZGRybWFzayA9IHZhZGRybWFzazsKKwl0Z2gtPmN0eGJpdG1hcCA9IGN0eGJpdG1hcDsKKwl0Z2gtPm9wYyA9IFRHSE9QX1RMQklOVjsKKwlzdGFydF9pbnN0cnVjdGlvbih0Z2gpOworCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKHRnaCwgdGdob3BfaW52YWxpZGF0ZSk7Cit9CisKK3ZvaWQgdGZoX3dyaXRlX29ubHkoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsCisJCQkJICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwkJCQkgIGludCBhc2lkLCBpbnQgZGlydHksIGludCBwYWdlc2l6ZSkKK3sKKwl0ZmgtPmZpbGxhc2lkID0gYXNpZDsKKwl0ZmgtPmZpbGx2YWRkciA9IHZhZGRyOworCXRmaC0+cGZuID0gcGZuOworCXRmaC0+ZGlydHkgPSBkaXJ0eTsKKwl0ZmgtPnBhZ2VzaXplID0gcGFnZXNpemU7CisJdGZoLT5vcGMgPSBURkhPUF9XUklURV9PTkxZOworCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Cit9CisKK3ZvaWQgdGZoX3dyaXRlX3Jlc3RhcnQoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHBhZGRyLCBpbnQgZ2FhLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWRkciwgaW50IGFzaWQsIGludCBkaXJ0eSwKKwkJCQkgICAgIGludCBwYWdlc2l6ZSkKK3sKKwl0ZmgtPmZpbGxhc2lkID0gYXNpZDsKKwl0ZmgtPmZpbGx2YWRkciA9IHZhZGRyOworCXRmaC0+cGZuID0gcGFkZHIgPj4gR1JVX1BBRERSX1NISUZUOworCXRmaC0+Z2FhID0gZ2FhOworCXRmaC0+ZGlydHkgPSBkaXJ0eTsKKwl0ZmgtPnBhZ2VzaXplID0gcGFnZXNpemU7CisJdGZoLT5vcGMgPSBURkhPUF9XUklURV9SRVNUQVJUOworCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Cit9CisKK3ZvaWQgdGZoX3Jlc3RhcnQoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpCit7CisJdGZoLT5vcGMgPSBURkhPUF9SRVNUQVJUOworCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Cit9CisKK3ZvaWQgdGZoX3VzZXJfcG9sbGluZ19tb2RlKHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKQoreworCXRmaC0+b3BjID0gVEZIT1BfVVNFUl9QT0xMSU5HX01PREU7CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwordm9pZCB0ZmhfZXhjZXB0aW9uKHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKQoreworCXRmaC0+b3BjID0gVEZIT1BfRVhDRVBUSU9OOworCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaAppbmRleCBiNjMwMThkLi4xZWQ3NGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oCkBAIC00ODksMTcwICs0ODksMjggQEAKICAqIAkgNjRtCQkJMjYJOAogICogCS4uLgogICovCi0jZGVmaW5lIEdSVV9QQUdFU0laRShzaCkJKCgoKHNoKSA+IDIwID8gKHNoKSArIDI6IChzaCkpID4+IDEpIC0gNikKKyNkZWZpbmUgR1JVX1BBR0VTSVpFKHNoKQkoKCgoc2gpID4gMjAgPyAoc2gpICsgMiA6IChzaCkpID4+IDEpIC0gNikKICNkZWZpbmUgR1JVX1NJWkVBVkFJTChzaCkJKDFVTCA8PCBHUlVfUEFHRVNJWkUoc2gpKQogCiAvKiBtaW5pbXVtIFRMQiBwdXJnZSBjb3VudCB0byBlbnN1cmUgYSBmdWxsIHB1cmdlICovCiAjZGVmaW5lIEdSVU1BWElOVkFMCQkxMDI0VUwKIAoraW50IGNjaF9hbGxvY2F0ZShzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCwKKyAgICAgICBpbnQgYXNpZHZhbCwgaW50IHNpemVhdmFpbCwgdW5zaWduZWQgbG9uZyBjYnJtYXAsIHVuc2lnbmVkIGxvbmcgZHNybWFwKTsKIAotLyogRXh0cmFjdCB0aGUgc3RhdHVzIGZpZWxkIGZyb20gYSBrZXJuZWwgaGFuZGxlICovCi0jZGVmaW5lIEdFVF9NU0VHX0hBTkRMRV9TVEFUVVMoaCkJKCgoKih1bnNpZ25lZCBsb25nICopKGgpKSA+PiAxNikgJiAzKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW5zdHJ1Y3Rpb24odm9pZCAqaCkKLXsKLQl1bnNpZ25lZCBsb25nICp3MCA9IGg7Ci0KLQl3bWIoKTsJCS8qIHNldHRpbmcgQ01EIGJpdCBtdXN0IGJlIGxhc3QgKi8KLQkqdzAgPSAqdzAgfCAxOwotCWdydV9mbHVzaF9jYWNoZShoKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZSh2b2lkICpoKQotewotCWludCBzdGF0dXM7Ci0KLQlkbyB7Ci0JCWNwdV9yZWxheCgpOwotCQliYXJyaWVyKCk7Ci0JCXN0YXR1cyA9IEdFVF9NU0VHX0hBTkRMRV9TVEFUVVMoaCk7Ci0JfSB3aGlsZSAoc3RhdHVzID09IENDSFNUQVRVU19BQ1RJVkUpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLSNpZiBkZWZpbmVkIENPTkZJR19JQTY0Ci1zdGF0aWMgaW5saW5lIHZvaWQgY2NoX2FsbG9jYXRlX3NldF9hc2lkcygKLQkJICBzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCwgaW50IGFzaWR2YWwpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IFJHTl9IUEFHRTsgaSsrKSB7ICAvKiAgYXNzdW1lIEhQQUdFIGlzIGxhc3QgcmVnaW9uICovCi0JCWNjaC0+YXNpZFtpXSA9IChhc2lkdmFsKyspOwotI2lmIDAKLQkJLyogWlpaIGh1Z2VwYWdlcyBub3Qgc3VwcG9ydGVkIHlldCAqLwotCQlpZiAoaSA9PSBSR05fSFBBR0UpCi0JCQljY2gtPnNpemVhdmFpbFtpXSA9IEdSVV9TSVpFQVZBSUwoaHBhZ2Vfc2hpZnQpOwotCQllbHNlCi0jZW5kaWYKLQkJCWNjaC0+c2l6ZWF2YWlsW2ldID0gR1JVX1NJWkVBVkFJTChQQUdFX1NISUZUKTsKLQl9Ci19Ci0jZWxpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKLXN0YXRpYyBpbmxpbmUgdm9pZCBjY2hfYWxsb2NhdGVfc2V0X2FzaWRzKAotCQkgIHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoLCBpbnQgYXNpZHZhbCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJY2NoLT5hc2lkW2ldID0gYXNpZHZhbCsrOwotCQljY2gtPnNpemVhdmFpbFtpXSA9IEdSVV9TSVpFQVZBSUwoUEFHRV9TSElGVCkgfAotCQkJR1JVX1NJWkVBVkFJTCgyMSk7Ci0JfQotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IGNjaF9hbGxvY2F0ZShzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCwKLQkJCSAgICAgICBpbnQgYXNpZHZhbCwgdW5zaWduZWQgbG9uZyBjYnJtYXAsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBkc3JtYXApCi17Ci0JY2NoX2FsbG9jYXRlX3NldF9hc2lkcyhjY2gsIGFzaWR2YWwpOwotCWNjaC0+ZHNyX2FsbG9jYXRpb25fbWFwID0gZHNybWFwOwotCWNjaC0+Y2JyX2FsbG9jYXRpb25fbWFwID0gY2JybWFwOwotCWNjaC0+b3BjID0gQ0NIT1BfQUxMT0NBVEU7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKLQlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjY2hfc3RhcnQoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpCi17Ci0JY2NoLT5vcGMgPSBDQ0hPUF9TVEFSVDsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNjaF9pbnRlcnJ1cHQoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpCi17Ci0JY2NoLT5vcGMgPSBDQ0hPUF9JTlRFUlJVUFQ7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKLQlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjY2hfZGVhbGxvY2F0ZShzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKLXsKLQljY2gtPm9wYyA9IENDSE9QX0RFQUxMT0NBVEU7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKLQlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjY2hfaW50ZXJydXB0X3N5bmMoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlCi0JCQkJICAgICAqY2NoKQotewotCWNjaC0+b3BjID0gQ0NIT1BfSU5URVJSVVBUX1NZTkM7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKLQlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0Z2hfaW52YWxpZGF0ZShzdHJ1Y3QgZ3J1X3RsYl9nbG9iYWxfaGFuZGxlICp0Z2gsCi0JCQkJIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHJtYXNrLAotCQkJCSBpbnQgYXNpZCwgaW50IHBhZ2VzaXplLCBpbnQgZ2xvYmFsLCBpbnQgbiwKLQkJCQkgdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwKQotewotCXRnaC0+dmFkZHIgPSB2YWRkcjsKLQl0Z2gtPmFzaWQgPSBhc2lkOwotCXRnaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKLQl0Z2gtPm4gPSBuOwotCXRnaC0+Z2xvYmFsID0gZ2xvYmFsOwotCXRnaC0+dmFkZHJtYXNrID0gdmFkZHJtYXNrOwotCXRnaC0+Y3R4Yml0bWFwID0gY3R4Yml0bWFwOwotCXRnaC0+b3BjID0gVEdIT1BfVExCSU5WOwotCXN0YXJ0X2luc3RydWN0aW9uKHRnaCk7Ci0JcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUodGdoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRmaF93cml0ZV9vbmx5KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLAotCQkJCSAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJICBpbnQgYXNpZCwgaW50IGRpcnR5LCBpbnQgcGFnZXNpemUpCi17Ci0JdGZoLT5maWxsYXNpZCA9IGFzaWQ7Ci0JdGZoLT5maWxsdmFkZHIgPSB2YWRkcjsKLQl0ZmgtPnBmbiA9IHBmbjsKLQl0ZmgtPmRpcnR5ID0gZGlydHk7Ci0JdGZoLT5wYWdlc2l6ZSA9IHBhZ2VzaXplOwotCXRmaC0+b3BjID0gVEZIT1BfV1JJVEVfT05MWTsKLQlzdGFydF9pbnN0cnVjdGlvbih0ZmgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGZoX3dyaXRlX3Jlc3RhcnQoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHBhZGRyLCBpbnQgZ2FhLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWRkciwgaW50IGFzaWQsIGludCBkaXJ0eSwKLQkJCQkgICAgIGludCBwYWdlc2l6ZSkKLXsKLQl0ZmgtPmZpbGxhc2lkID0gYXNpZDsKLQl0ZmgtPmZpbGx2YWRkciA9IHZhZGRyOwotCXRmaC0+cGZuID0gcGFkZHIgPj4gR1JVX1BBRERSX1NISUZUOwotCXRmaC0+Z2FhID0gZ2FhOwotCXRmaC0+ZGlydHkgPSBkaXJ0eTsKLQl0ZmgtPnBhZ2VzaXplID0gcGFnZXNpemU7Ci0JdGZoLT5vcGMgPSBURkhPUF9XUklURV9SRVNUQVJUOwotCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0ZmhfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCkKLXsKLQl0ZmgtPm9wYyA9IFRGSE9QX1JFU1RBUlQ7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRmaF91c2VyX3BvbGxpbmdfbW9kZShzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCkKLXsKLQl0ZmgtPm9wYyA9IFRGSE9QX1VTRVJfUE9MTElOR19NT0RFOwotCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0ZmhfZXhjZXB0aW9uKHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKQotewotCXRmaC0+b3BjID0gVEZIT1BfRVhDRVBUSU9OOwotCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Ci19CitpbnQgY2NoX3N0YXJ0KHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKTsKK2ludCBjY2hfaW50ZXJydXB0KHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKTsKK2ludCBjY2hfZGVhbGxvY2F0ZShzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCk7CitpbnQgY2NoX2ludGVycnVwdF9zeW5jKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKTsKK2ludCB0Z2hfaW52YWxpZGF0ZShzdHJ1Y3QgZ3J1X3RsYl9nbG9iYWxfaGFuZGxlICp0Z2gsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJdW5zaWduZWQgbG9uZyB2YWRkcm1hc2ssIGludCBhc2lkLCBpbnQgcGFnZXNpemUsIGludCBnbG9iYWwsIGludCBuLAorCXVuc2lnbmVkIHNob3J0IGN0eGJpdG1hcCk7Cit2b2lkIHRmaF93cml0ZV9vbmx5KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLCB1bnNpZ25lZCBsb25nIHBmbiwKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgYXNpZCwgaW50IGRpcnR5LCBpbnQgcGFnZXNpemUpOwordm9pZCB0Zmhfd3JpdGVfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwgdW5zaWduZWQgbG9uZyBwYWRkciwKKwlpbnQgZ2FhLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgYXNpZCwgaW50IGRpcnR5LCBpbnQgcGFnZXNpemUpOwordm9pZCB0ZmhfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCk7Cit2b2lkIHRmaF91c2VyX3BvbGxpbmdfbW9kZShzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCk7Cit2b2lkIHRmaF9leGNlcHRpb24oc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpOwogCiAjZW5kaWYgLyogX19HUlVIQU5ETEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYwppbmRleCA4ODBjNTVkLi5kOGJkN2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYwpAQCAtNTIsOCArNTIsMTAgQEAKICAqLwogCiAvKiBCbGFkZSBwZXJjcHUgcmVzb3VyY2VzIFBFUk1BTkVOVExZIHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovCi0jZGVmaW5lIEdSVV9OVU1fS0VSTkVMX0NCUiAgICAgIDEKKyNkZWZpbmUgR1JVX05VTV9LRVJORUxfQ0JSCTEKICNkZWZpbmUgR1JVX05VTV9LRVJORUxfRFNSX0JZVEVTIDI1NgorI2RlZmluZSBHUlVfTlVNX0tFUk5FTF9EU1JfQ0wJKEdSVV9OVU1fS0VSTkVMX0RTUl9CWVRFUyAvCQlcCisJCQkJCUdSVV9DQUNIRV9MSU5FX0JZVEVTKQogI2RlZmluZSBLRVJORUxfQ1RYTlVNICAgICAgICAgICAxNQogCiAvKiBHUlUgaW5zdHJ1Y3Rpb24gYXR0cmlidXRlcyBmb3IgYWxsIGluc3RydWN0aW9ucyAqLwpAQCAtOTQsNyArOTYsNiBAQAogCWNoYXIJZmlsbDsKIH07CiAKLSNkZWZpbmUgUUxJTkVTKG1xKQkoKG1xKSArIG9mZnNldG9mKHN0cnVjdCBtZXNzYWdlX3F1ZXVlLCBxbGluZXMpKQogI2RlZmluZSBIU1RBVFVTKG1xLCBoKQkoKG1xKSArIG9mZnNldG9mKHN0cnVjdCBtZXNzYWdlX3F1ZXVlLCBoc3RhdHVzW2hdKSkKIAogc3RhdGljIGludCBncnVfZ2V0X2NwdV9yZXNvdXJjZXMoaW50IGRzcl9ieXRlcywgdm9pZCAqKmNiLCB2b2lkICoqZHNyKQpAQCAtMTIyLDcgKzEyMyw3IEBACiAJc3RydWN0IGdydV9jb250cm9sX2Jsb2NrX2V4dGVuZGVkICpjYmU7CiAKIAljYmUgPSBnZXRfY2JlKEdSVUJBU0UoY2IpLCBnZXRfY2JfbnVtYmVyKGNiKSk7Ci0JcHJlZmV0Y2h3KGNiZSk7ICAgICAgICAgLyogSGFybWxlc3Mgb24gaGFyZHdhcmUsIHJlcXVpcmVkIGZvciBlbXVsYXRvciAqLworCXByZWZldGNodyhjYmUpOwkvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCiAJZXhjZGV0LT5vcGMgPSBjYmUtPm9wY2NweTsKIAlleGNkZXQtPmV4b3BjID0gY2JlLT5leG9wY2NweTsKIAlleGNkZXQtPmVjYXVzZSA9IGNiZS0+ZWNhdXNlOwpAQCAtMjUwLDcgKzI1MSw4IEBACiAgKiBDcmVhdGUgYSBtZXNzYWdlIHF1ZXVlLgogICogCXFsaW5lcyAtIG1lc3NhZ2UgcXVldWUgc2l6ZSBpbiBjYWNoZSBsaW5lcy4gSW5jbHVkZXMgMi1saW5lIGhlYWRlci4KICAqLwotaW50IGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZSh2b2lkICpwLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCitpbnQgZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQsCisJCXZvaWQgKnAsIHVuc2lnbmVkIGludCBieXRlcywgaW50IG5hc2lkLCBpbnQgdmVjdG9yLCBpbnQgYXBpY2lkKQogewogCXN0cnVjdCBtZXNzYWdlX3F1ZXVlICptcSA9IHA7CiAJdW5zaWduZWQgaW50IHFsaW5lczsKQEAgLTI2NSw2ICsyNjcsMTIgQEAKIAltcS0+aHN0YXR1c1swXSA9IDA7CiAJbXEtPmhzdGF0dXNbMV0gPSAxOwogCW1xLT5oZWFkID0gZ3J1X21lc3FfaGVhZCgyLCBxbGluZXMgLyAyICsgMSk7CisJbXFkLT5tcSA9IG1xOworCW1xZC0+bXFfZ3BhID0gdXZfZ3BhKG1xKTsKKwltcWQtPnFsaW5lcyA9IHFsaW5lczsKKwltcWQtPmludGVycnVwdF9wbm9kZSA9IFVWX05BU0lEX1RPX1BOT0RFKG5hc2lkKTsKKwltcWQtPmludGVycnVwdF92ZWN0b3IgPSB2ZWN0b3I7CisJbXFkLT5pbnRlcnJ1cHRfYXBpY2lkID0gYXBpY2lkOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKTsKQEAgLTI3Nyw4ICsyODUsOCBAQAogICoJCS0xIC0gaWYgbWVzcSBzZW50IHN1Y2Nlc3NmdWxseSBidXQgcXVldWUgbm90IGZ1bGwKICAqCQk+MCAtIHVuZXhwZWN0ZWQgZXJyb3IuIE1RRV94eHggcmV0dXJuZWQKICAqLwotc3RhdGljIGludCBzZW5kX25vb3BfbWVzc2FnZSh2b2lkICpjYiwKLQkJCQl1bnNpZ25lZCBsb25nIG1xLCB2b2lkICptZXNnKQorc3RhdGljIGludCBzZW5kX25vb3BfbWVzc2FnZSh2b2lkICpjYiwgc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJCQl2b2lkICptZXNnKQogewogCWNvbnN0IHN0cnVjdCBtZXNzYWdlX2hlYWRlciBub29wX2hlYWRlciA9IHsKIAkJCQkJLnByZXNlbnQgPSBNUVNfTk9PUCwgLmxpbmVzID0gMX07CkBAIC0yODksNyArMjk3LDcgQEAKIAlTVEFUKG1lc3Ffbm9vcCk7CiAJc2F2ZV9taGRyID0gKm1oZHI7CiAJKm1oZHIgPSBub29wX2hlYWRlcjsKLQlncnVfbWVzcShjYiwgbXEsIGdydV9nZXRfdHJpKG1oZHIpLCAxLCBJTUEpOworCWdydV9tZXNxKGNiLCBtcWQtPm1xX2dwYSwgZ3J1X2dldF90cmkobWhkciksIDEsIElNQSk7CiAJcmV0ID0gZ3J1X3dhaXQoY2IpOwogCiAJaWYgKHJldCkgewpAQCAtMzEzLDcgKzMyMSw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBDQlNTX1BVVF9OQUNLRUQ6CiAJCQlTVEFUKG1lc3Ffbm9vcF9wdXRfbmFja2VkKTsKLQkJCW0gPSBtcSArIChncnVfZ2V0X2Ftb192YWx1ZV9oZWFkKGNiKSA8PCA2KTsKKwkJCW0gPSBtcWQtPm1xX2dwYSArIChncnVfZ2V0X2Ftb192YWx1ZV9oZWFkKGNiKSA8PCA2KTsKIAkJCWdydV92c3RvcmUoY2IsIG0sIGdydV9nZXRfdHJpKG1lc2cpLCBYVFlQRV9DTCwgMSwgMSwKIAkJCQkJCUlNQSk7CiAJCQlpZiAoZ3J1X3dhaXQoY2IpID09IENCU19JRExFKQpAQCAtMzMzLDMwICszNDEsMjAgQEAKIC8qCiAgKiBIYW5kbGUgYSBncnVfbWVzcSBmdWxsLgogICovCi1zdGF0aWMgaW50IHNlbmRfbWVzc2FnZV9xdWV1ZV9mdWxsKHZvaWQgKmNiLAotCQkJICAgdW5zaWduZWQgbG9uZyBtcSwgdm9pZCAqbWVzZywgaW50IGxpbmVzKQorc3RhdGljIGludCBzZW5kX21lc3NhZ2VfcXVldWVfZnVsbCh2b2lkICpjYiwgc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJCQl2b2lkICptZXNnLCBpbnQgbGluZXMpCiB7CiAJdW5pb24gZ3J1X21lc3FoZWFkIG1xaDsKIAl1bnNpZ25lZCBpbnQgbGltaXQsIGhlYWQ7CiAJdW5zaWduZWQgbG9uZyBhdmFsdWU7Ci0JaW50IGhhbGYsIHFsaW5lcywgc2F2ZTsKKwlpbnQgaGFsZiwgcWxpbmVzOwogCiAJLyogRGV0ZXJtaW5lIGlmIHN3aXRjaGluZyB0byBmaXJzdC9zZWNvbmQgaGFsZiBvZiBxICovCiAJYXZhbHVlID0gZ3J1X2dldF9hbW9fdmFsdWUoY2IpOwogCWhlYWQgPSBncnVfZ2V0X2Ftb192YWx1ZV9oZWFkKGNiKTsKIAlsaW1pdCA9IGdydV9nZXRfYW1vX3ZhbHVlX2xpbWl0KGNiKTsKIAotCS8qCi0JICogRmV0Y2ggInFsaW5lcyIgZnJvbSB0aGUgcXVldWUgaGVhZGVyLiBTaW5jZSB0aGUgcXVldWUgbWF5IGJlCi0JICogaW4gbWVtb3J5IHRoYXQgY2FuJ3QgYmUgYWNjZXNzZWQgdXNpbmcgc29ja2V0IGFkZHJlc3NlcywgdXNlCi0JICogdGhlIEdSVSB0byBhY2Nlc3MgdGhlIGRhdGEuIFVzZSBEU1Igc3BhY2UgZnJvbSB0aGUgbWVzc2FnZS4KLQkgKi8KLQlzYXZlID0gKihpbnQgKiltZXNnOwotCWdydV92bG9hZChjYiwgUUxJTkVTKG1xKSwgZ3J1X2dldF90cmkobWVzZyksIFhUWVBFX1csIDEsIDEsIElNQSk7Ci0JaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKLQkJZ290byBjYmVycjsKLQlxbGluZXMgPSAqKGludCAqKW1lc2c7Ci0JKihpbnQgKiltZXNnID0gc2F2ZTsKKwlxbGluZXMgPSBtcWQtPnFsaW5lczsKIAloYWxmID0gKGxpbWl0ICE9IHFsaW5lcyk7CiAKIAlpZiAoaGFsZikKQEAgLTM2NSw3ICszNjMsNyBAQAogCQltcWggPSBncnVfbWVzcV9oZWFkKDIsIHFsaW5lcyAvIDIgKyAxKTsKIAogCS8qIFRyeSB0byBnZXQgbG9jayBmb3Igc3dpdGNoaW5nIGhlYWQgcG9pbnRlciAqLwotCWdydV9nYW1pcihjYiwgRU9QX0lSX0NMUiwgSFNUQVRVUyhtcSwgaGFsZiksIFhUWVBFX0RXLCBJTUEpOworCWdydV9nYW1pcihjYiwgRU9QX0lSX0NMUiwgSFNUQVRVUyhtcWQtPm1xX2dwYSwgaGFsZiksIFhUWVBFX0RXLCBJTUEpOwogCWlmIChncnVfd2FpdChjYikgIT0gQ0JTX0lETEUpCiAJCWdvdG8gY2JlcnI7CiAJaWYgKCFncnVfZ2V0X2Ftb192YWx1ZShjYikpIHsKQEAgLTM3NSw4ICszNzMsOCBAQAogCiAJLyogR290IHRoZSBsb2NrLiBTZW5kIG9wdGlvbmFsIE5PUCBpZiBxdWV1ZSBub3QgZnVsbCwgKi8KIAlpZiAoaGVhZCAhPSBsaW1pdCkgewotCQlpZiAoc2VuZF9ub29wX21lc3NhZ2UoY2IsIG1xLCBtZXNnKSkgewotCQkJZ3J1X2dhbWlyKGNiLCBFT1BfSVJfSU5DLCBIU1RBVFVTKG1xLCBoYWxmKSwKKwkJaWYgKHNlbmRfbm9vcF9tZXNzYWdlKGNiLCBtcWQsIG1lc2cpKSB7CisJCQlncnVfZ2FtaXIoY2IsIEVPUF9JUl9JTkMsIEhTVEFUVVMobXFkLT5tcV9ncGEsIGhhbGYpLAogCQkJCQlYVFlQRV9EVywgSU1BKTsKIAkJCWlmIChncnVfd2FpdChjYikgIT0gQ0JTX0lETEUpCiAJCQkJZ290byBjYmVycjsKQEAgLTM4NywxNCArMzg1LDE2IEBACiAJfQogCiAJLyogVGhlbiBmbGlwIHF1ZXVlaGVhZCB0byBvdGhlciBoYWxmIG9mIHF1ZXVlLiAqLwotCWdydV9nYW1lcihjYiwgRU9QX0VSUl9DU1dBUCwgbXEsIFhUWVBFX0RXLCBtcWgudmFsLCBhdmFsdWUsIElNQSk7CisJZ3J1X2dhbWVyKGNiLCBFT1BfRVJSX0NTV0FQLCBtcWQtPm1xX2dwYSwgWFRZUEVfRFcsIG1xaC52YWwsIGF2YWx1ZSwKKwkJCQkJCQlJTUEpOwogCWlmIChncnVfd2FpdChjYikgIT0gQ0JTX0lETEUpCiAJCWdvdG8gY2JlcnI7CiAKIAkvKiBJZiBub3Qgc3VjY2Vzc2Z1bGx5IGluIHN3YXBwaW5nIHF1ZXVlIGhlYWQsIGNsZWFyIHRoZSBoc3RhdHVzIGxvY2sgKi8KIAlpZiAoZ3J1X2dldF9hbW9fdmFsdWUoY2IpICE9IGF2YWx1ZSkgewogCQlTVEFUKG1lc3FfcWZfc3dpdGNoX2hlYWRfZmFpbGVkKTsKLQkJZ3J1X2dhbWlyKGNiLCBFT1BfSVJfSU5DLCBIU1RBVFVTKG1xLCBoYWxmKSwgWFRZUEVfRFcsIElNQSk7CisJCWdydV9nYW1pcihjYiwgRU9QX0lSX0lOQywgSFNUQVRVUyhtcWQtPm1xX2dwYSwgaGFsZiksIFhUWVBFX0RXLAorCQkJCQkJCUlNQSk7CiAJCWlmIChncnVfd2FpdChjYikgIT0gQ0JTX0lETEUpCiAJCQlnb3RvIGNiZXJyOwogCX0KQEAgLTQwNCwxNSArNDA0LDI1IEBACiAJcmV0dXJuIE1RRV9VTkVYUEVDVEVEX0NCX0VSUjsKIH0KIAorLyoKKyAqIFNlbmQgYSBjcm9zcy1wYXJ0aXRpb24gaW50ZXJydXB0IHRvIHRoZSBTU0kgdGhhdCBjb250YWlucyB0aGUgdGFyZ2V0CisgKiBtZXNzYWdlIHF1ZXVlLiBOb3JtYWxseSwgdGhlIGludGVycnVwdCBpcyBhdXRvbWF0aWNhbGx5IGRlbGl2ZXJlZCBieSBoYXJkd2FyZQorICogYnV0IHNvbWUgZXJyb3IgY29uZGl0aW9ucyByZXF1aXJlIGV4cGxpY2l0IGRlbGl2ZXJ5LgorICovCitzdGF0aWMgdm9pZCBzZW5kX21lc3NhZ2VfcXVldWVfaW50ZXJydXB0KHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQpCit7CisJaWYgKG1xZC0+aW50ZXJydXB0X3ZlY3RvcikKKwkJdXZfaHViX3NlbmRfaXBpKG1xZC0+aW50ZXJydXB0X3Bub2RlLCBtcWQtPmludGVycnVwdF9hcGljaWQsCisJCQkJbXFkLT5pbnRlcnJ1cHRfdmVjdG9yKTsKK30KKwogCiAvKgogICogSGFuZGxlIGEgZ3J1X21lc3EgZmFpbHVyZS4gU29tZSBvZiB0aGVzZSBmYWlsdXJlcyBhcmUgc29mdHdhcmUgcmVjb3ZlcmFibGUKICAqIG9yIHJldHJ5YWJsZS4KICAqLwotc3RhdGljIGludCBzZW5kX21lc3NhZ2VfZmFpbHVyZSh2b2lkICpjYiwKLQkJCQl1bnNpZ25lZCBsb25nIG1xLAotCQkJCXZvaWQgKm1lc2csCi0JCQkJaW50IGxpbmVzKQorc3RhdGljIGludCBzZW5kX21lc3NhZ2VfZmFpbHVyZSh2b2lkICpjYiwgc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJCQl2b2lkICptZXNnLCBpbnQgbGluZXMpCiB7CiAJaW50IHN1YnN0YXR1cywgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIG07CkBAIC00MjksNyArNDM5LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDQlNTX1FMSU1JVF9SRUFDSEVEOgogCQlTVEFUKG1lc3Ffc2VuZF9xbGltaXRfcmVhY2hlZCk7Ci0JCXJldCA9IHNlbmRfbWVzc2FnZV9xdWV1ZV9mdWxsKGNiLCBtcSwgbWVzZywgbGluZXMpOworCQlyZXQgPSBzZW5kX21lc3NhZ2VfcXVldWVfZnVsbChjYiwgbXFkLCBtZXNnLCBsaW5lcyk7CiAJCWJyZWFrOwogCWNhc2UgQ0JTU19BTU9fTkFDS0VEOgogCQlTVEFUKG1lc3Ffc2VuZF9hbW9fbmFja2VkKTsKQEAgLTQzNywxMiArNDQ3LDE0IEBACiAJCWJyZWFrOwogCWNhc2UgQ0JTU19QVVRfTkFDS0VEOgogCQlTVEFUKG1lc3Ffc2VuZF9wdXRfbmFja2VkKTsKLQkJbSA9bXEgKyAoZ3J1X2dldF9hbW9fdmFsdWVfaGVhZChjYikgPDwgNik7CisJCW0gPSBtcWQtPm1xX2dwYSArIChncnVfZ2V0X2Ftb192YWx1ZV9oZWFkKGNiKSA8PCA2KTsKIAkJZ3J1X3ZzdG9yZShjYiwgbSwgZ3J1X2dldF90cmkobWVzZyksIFhUWVBFX0NMLCBsaW5lcywgMSwgSU1BKTsKLQkJaWYgKGdydV93YWl0KGNiKSA9PSBDQlNfSURMRSkKKwkJaWYgKGdydV93YWl0KGNiKSA9PSBDQlNfSURMRSkgewogCQkJcmV0ID0gTVFFX09LOwotCQllbHNlCisJCQlzZW5kX21lc3NhZ2VfcXVldWVfaW50ZXJydXB0KG1xZCk7CisJCX0gZWxzZSB7CiAJCQlyZXQgPSBNUUVfVU5FWFBFQ1RFRF9DQl9FUlI7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CkBAIC00NTIsMTIgKzQ2NCwxMiBAQAogCiAvKgogICogU2VuZCBhIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIHF1ZXVlCi0gKiAJY2IJR1JVIGNvbnRyb2wgYmxvY2sgdG8gdXNlIHRvIHNlbmQgbWVzc2FnZQotICogCW1xCW1lc3NhZ2UgcXVldWUKKyAqIAltcWQJbWVzc2FnZSBxdWV1ZSBkZXNjcmlwdG9yCiAgKiAJbWVzZwltZXNzYWdlLiB1c3QgYmUgdmFkZHIgd2l0aGluIGEgR1NFRwogICogCWJ5dGVzCW1lc3NhZ2Ugc2l6ZSAoPD0gMiBDTCkKICAqLwotaW50IGdydV9zZW5kX21lc3NhZ2VfZ3BhKHVuc2lnbmVkIGxvbmcgbXEsIHZvaWQgKm1lc2csIHVuc2lnbmVkIGludCBieXRlcykKK2ludCBncnVfc2VuZF9tZXNzYWdlX2dwYShzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkLCB2b2lkICptZXNnLAorCQkJCXVuc2lnbmVkIGludCBieXRlcykKIHsKIAlzdHJ1Y3QgbWVzc2FnZV9oZWFkZXIgKm1oZHI7CiAJdm9pZCAqY2I7CkBAIC00ODEsMTAgKzQ5MywxMCBAQAogCiAJZG8gewogCQlyZXQgPSBNUUVfT0s7Ci0JCWdydV9tZXNxKGNiLCBtcSwgZ3J1X2dldF90cmkobWhkciksIGNsaW5lcywgSU1BKTsKKwkJZ3J1X21lc3EoY2IsIG1xZC0+bXFfZ3BhLCBncnVfZ2V0X3RyaShtaGRyKSwgY2xpbmVzLCBJTUEpOwogCQlpc3RhdHVzID0gZ3J1X3dhaXQoY2IpOwogCQlpZiAoaXN0YXR1cyAhPSBDQlNfSURMRSkKLQkJCXJldCA9IHNlbmRfbWVzc2FnZV9mYWlsdXJlKGNiLCBtcSwgZHNyLCBjbGluZXMpOworCQkJcmV0ID0gc2VuZF9tZXNzYWdlX2ZhaWx1cmUoY2IsIG1xZCwgZHNyLCBjbGluZXMpOwogCX0gd2hpbGUgKHJldCA9PSBNUUlFX0FHQUlOKTsKIAlncnVfZnJlZV9jcHVfcmVzb3VyY2VzKGNiLCBkc3IpOwogCkBAIC00OTcsOSArNTA5LDkgQEAKIC8qCiAgKiBBZHZhbmNlIHRoZSByZWNlaXZlIHBvaW50ZXIgZm9yIHRoZSBxdWV1ZSB0byB0aGUgbmV4dCBtZXNzYWdlLgogICovCi12b2lkIGdydV9mcmVlX21lc3NhZ2Uodm9pZCAqcm1xLCB2b2lkICptZXNnKQordm9pZCBncnVfZnJlZV9tZXNzYWdlKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQsIHZvaWQgKm1lc2cpCiB7Ci0Jc3RydWN0IG1lc3NhZ2VfcXVldWUgKm1xID0gcm1xOworCXN0cnVjdCBtZXNzYWdlX3F1ZXVlICptcSA9IG1xZC0+bXE7CiAJc3RydWN0IG1lc3NhZ2VfaGVhZGVyICptaGRyID0gbXEtPm5leHQ7CiAJdm9pZCAqbmV4dCwgKnBuZXh0OwogCWludCBoYWxmID0gLTE7CkBAIC01MjksMTYgKzU0MSwxNiBAQAogICogcHJlc2VudC4gVXNlciBtdXN0IGNhbGwgbmV4dF9tZXNzYWdlKCkgdG8gbW92ZSB0byBuZXh0IG1lc3NhZ2UuCiAgKiAJcm1xCW1lc3NhZ2UgcXVldWUKICAqLwotdm9pZCAqZ3J1X2dldF9uZXh0X21lc3NhZ2Uodm9pZCAqcm1xKQordm9pZCAqZ3J1X2dldF9uZXh0X21lc3NhZ2Uoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCkKIHsKLQlzdHJ1Y3QgbWVzc2FnZV9xdWV1ZSAqbXEgPSBybXE7CisJc3RydWN0IG1lc3NhZ2VfcXVldWUgKm1xID0gbXFkLT5tcTsKIAlzdHJ1Y3QgbWVzc2FnZV9oZWFkZXIgKm1oZHIgPSBtcS0+bmV4dDsKIAlpbnQgcHJlc2VudCA9IG1oZHItPnByZXNlbnQ7CiAKIAkvKiBza2lwIE5PT1AgbWVzc2FnZXMgKi8KIAlTVEFUKG1lc3FfcmVjZWl2ZSk7CiAJd2hpbGUgKHByZXNlbnQgPT0gTVFTX05PT1ApIHsKLQkJZ3J1X2ZyZWVfbWVzc2FnZShybXEsIG1oZHIpOworCQlncnVfZnJlZV9tZXNzYWdlKG1xZCwgbWhkcik7CiAJCW1oZHIgPSBtcS0+bmV4dDsKIAkJcHJlc2VudCA9IG1oZHItPnByZXNlbnQ7CiAJfQpAQCAtNTc2LDcgKzU4OCw3IEBACiAJaWYgKGdydV9nZXRfY3B1X3Jlc291cmNlcyhHUlVfTlVNX0tFUk5FTF9EU1JfQllURVMsICZjYiwgJmRzcikpCiAJCXJldHVybiBNUUVfQlVHX05PX1JFU09VUkNFUzsKIAlncnVfYmNvcHkoY2IsIHNyY19ncGEsIGRlc3RfZ3BhLCBncnVfZ2V0X3RyaShkc3IpLAotCQkgIFhUWVBFX0IsIGJ5dGVzLCBHUlVfTlVNX0tFUk5FTF9EU1JfQllURVMsIElNQSk7CisJCSAgWFRZUEVfQiwgYnl0ZXMsIEdSVV9OVU1fS0VSTkVMX0RTUl9DTCwgSU1BKTsKIAlyZXQgPSBncnVfd2FpdChjYik7CiAJZ3J1X2ZyZWVfY3B1X3Jlc291cmNlcyhjYiwgZHNyKTsKIAlyZXR1cm4gcmV0OwpAQCAtNjExLDcgKzYyMyw3IEBACiAKIAlpZiAod29yZDAgIT0gd29yZDEgfHwgd29yZDAgIT0gTUFHSUMpIHsKIAkJcHJpbnRrCi0JCSAgICAoIkdSVSBxdWlja3Rlc3QgZXJyOiBncnUgJWQsIGZvdW5kIDB4JWx4LCBleHBlY3RlZCAweCVseFxuIiwKKwkJICAgICgiR1JVIHF1aWNrdGVzdCBlcnI6IGdpZCAlZCwgZm91bmQgMHglbHgsIGV4cGVjdGVkIDB4JWx4XG4iLAogCQkgICAgIGdydS0+Z3NfZ2lkLCB3b3JkMSwgTUFHSUMpOwogCQlCVUcoKTsJCS8qIFpaWiBzaG91bGQgbm90IGJlIGZhdGFsICovCiAJfQpAQCAtNjYwLDE1ICs2NzIsMTUgQEAKIAljY2gtPnRsYl9pbnRfZW5hYmxlID0gMDsKIAljY2gtPnRmbV9kb25lX2JpdF9lbmFibGUgPSAwOwogCWNjaC0+dW5tYXBfZW5hYmxlID0gMTsKLQllcnIgPSBjY2hfYWxsb2NhdGUoY2NoLCAwLCBjYnJfbWFwLCBkc3JfbWFwKTsKKwllcnIgPSBjY2hfYWxsb2NhdGUoY2NoLCAwLCAwLCBjYnJfbWFwLCBkc3JfbWFwKTsKIAlpZiAoZXJyKSB7CiAJCWdydV9kYmcoZ3J1ZGV2LAotCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBrZXJuZWwgQ0NIOiBncnUgJWQsIGVyciAlZFxuIiwKKwkJCSJVbmFibGUgdG8gYWxsb2NhdGUga2VybmVsIENDSDogZ2lkICVkLCBlcnIgJWRcbiIsCiAJCQlncnUtPmdzX2dpZCwgZXJyKTsKIAkJQlVHKCk7CiAJfQogCWlmIChjY2hfc3RhcnQoY2NoKSkgewotCQlncnVfZGJnKGdydWRldiwgIlVuYWJsZSB0byBzdGFydCBrZXJuZWwgQ0NIOiBncnUgJWQsIGVyciAlZFxuIiwKKwkJZ3J1X2RiZyhncnVkZXYsICJVbmFibGUgdG8gc3RhcnQga2VybmVsIENDSDogZ2lkICVkLCBlcnIgJWRcbiIsCiAJCQlncnUtPmdzX2dpZCwgZXJyKTsKIAkJQlVHKCk7CiAJfQpAQCAtNjc4LDMgKzY5MCwyMiBAQAogCQlxdWlja3Rlc3QoZ3J1KTsKIAlyZXR1cm4gMDsKIH0KKwordm9pZCBncnVfa3NlcnZpY2VzX2V4aXQoc3RydWN0IGdydV9zdGF0ZSAqZ3J1KQoreworCXN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoOworCXN0cnVjdCBncnVfYmxhZGVfc3RhdGUgKmJzOworCisJYnMgPSBncnUtPmdzX2JsYWRlOworCWlmIChncnUgIT0gJmJzLT5ic19ncnVzWzFdKQorCQlyZXR1cm47CisKKwljY2ggPSBnZXRfY2NoKGdydS0+Z3NfZ3J1X2Jhc2VfdmFkZHIsIEtFUk5FTF9DVFhOVU0pOworCWxvY2tfY2NoX2hhbmRsZShjY2gpOworCWlmIChjY2hfaW50ZXJydXB0X3N5bmMoY2NoKSkKKwkJQlVHKCk7CisJaWYgKGNjaF9kZWFsbG9jYXRlKGNjaCkpCisJCUJVRygpOworCXVubG9ja19jY2hfaGFuZGxlKGNjaCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmgKaW5kZXggZWIxN2UwYS4uNzQ3ZWQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmgKQEAgLTQxLDYgKzQxLDE1IEBACiAgKiAJLSBncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUoKSBuZWVkcyBpbnRlcnJ1cHQgdmVjdG9yIGluZm8KICAqLwogCitzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyB7CisJdm9pZAkJKm1xOwkJCS8qIG1lc3NhZ2UgcXVldWUgdmFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nCW1xX2dwYTsJCQkvKiBnbG9iYWwgYWRkcmVzcyBvZiBtcSAqLworCWludAkJcWxpbmVzOwkJCS8qIHF1ZXVlIHNpemUgaW4gQ0wgKi8KKwlpbnQJCWludGVycnVwdF92ZWN0b3I7CS8qIGludGVycnVwdCB2ZWN0b3IgKi8KKwlpbnQJCWludGVycnVwdF9wbm9kZTsJLyogcG5vZGUgZm9yIGludGVycnVwdCAqLworCWludAkJaW50ZXJydXB0X2FwaWNpZDsJLyogbGFwaWNpZCBmb3IgaW50ZXJydXB0ICovCit9OworCiAvKgogICogSW5pdGlhbGl6ZSBhIHVzZXIgYWxsb2NhdGVkIGNodW5rIG9mIG1lbW9yeSB0byBiZSB1c2VkIGFzCiAgKiBhIG1lc3NhZ2UgcXVldWUuIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcXVldWUgaXMKQEAgLTUxLDE0ICs2MCwxOSBAQAogICogdG8gbWFuYWdlIHRoZSBxdWV1ZS4KICAqCiAgKiAgSW5wdXQ6Ci0gKiAJcAlwb2ludGVyIHRvIHVzZXIgYWxsb2NhdGVkIG1lbW9yeS4KKyAqIAltcWQJcG9pbnRlciB0byBtZXNzYWdlIHF1ZXVlIGRlc2NyaXB0b3IKKyAqIAlwCXBvaW50ZXIgdG8gdXNlciBhbGxvY2F0ZWQgbWVzcSBtZW1vcnkuCiAgKiAJYnl0ZXMJc2l6ZSBvZiBtZXNzYWdlIHF1ZXVlIGluIGJ5dGVzCisgKiAgICAgIHZlY3RvcglpbnRlcnJ1cHQgdmVjdG9yICh6ZXJvIGlmIG5vIGludGVycnVwdHMpCisgKiAgICAgIG5hc2lkCW5hc2lkIG9mIGJsYWRlIHdoZXJlIGludGVycnVwdCBpcyBkZWxpdmVyZWQKKyAqICAgICAgYXBpY2lkCWFwaWNpZCBvZiBjcHUgZm9yIGludGVycnVwdAogICoKICAqICBFcnJvcnM6CiAgKiAgCTAJT0sKICAqICAJPjAJZXJyb3IKICAqLwotZXh0ZXJuIGludCBncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUodm9pZCAqcCwgdW5zaWduZWQgaW50IGJ5dGVzKTsKK2V4dGVybiBpbnQgZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQsCisJCXZvaWQgKnAsIHVuc2lnbmVkIGludCBieXRlcywgaW50IG5hc2lkLCBpbnQgdmVjdG9yLCBpbnQgYXBpY2lkKTsKIAogLyoKICAqIFNlbmQgYSBtZXNzYWdlIHRvIGEgbWVzc2FnZSBxdWV1ZS4KQEAgLTY4LDcgKzgyLDcgQEAKICAqCiAgKgogICogICBJbnB1dDoKLSAqIAl4bXEJbWVzc2FnZSBxdWV1ZSAtIG11c3QgYmUgYSBVViBnbG9iYWwgcGh5c2ljYWwgYWRkcmVzcworICogCW1xZAlwb2ludGVyIHRvIG1lc3NhZ2UgcXVldWUgZGVzY3JpcHRvcgogICogCW1lc2cJcG9pbnRlciB0byBtZXNzYWdlLiBNdXN0IGJlIDY0LWJpdCBhbGlnbmVkCiAgKiAJYnl0ZXMJc2l6ZSBvZiBtZXNzYWdlIGluIGJ5dGVzCiAgKgpAQCAtNzcsOCArOTEsOCBAQAogICogICAgID4wCVNlbmQgZmFpbHVyZSAtIHNlZSBlcnJvciBjb2RlcyBiZWxvdwogICoKICAqLwotZXh0ZXJuIGludCBncnVfc2VuZF9tZXNzYWdlX2dwYSh1bnNpZ25lZCBsb25nIG1xX2dwYSwgdm9pZCAqbWVzZywKLQkJCQkJCXVuc2lnbmVkIGludCBieXRlcyk7CitleHRlcm4gaW50IGdydV9zZW5kX21lc3NhZ2VfZ3BhKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQsCisJCQl2b2lkICptZXNnLCB1bnNpZ25lZCBpbnQgYnl0ZXMpOwogCiAvKiBTdGF0dXMgdmFsdWVzIGZvciBncnVfc2VuZF9tZXNzYWdlKCkgKi8KICNkZWZpbmUgTVFFX09LCQkJMAkvKiBtZXNzYWdlIHNlbnQgc3VjY2Vzc2Z1bGx5ICovCkBAIC05NCwxMCArMTA4LDExIEBACiAgKiBBUEkgZXh0ZW5zaW9ucyBtYXkgYWxsb3cgZm9yIG91dC1vZi1vcmRlciBmcmVlaW5nLgogICoKICAqICAgSW5wdXQKLSAqIAltcQltZXNzYWdlIHF1ZXVlCisgKiAJbXFkCXBvaW50ZXIgdG8gbWVzc2FnZSBxdWV1ZSBkZXNjcmlwdG9yCiAgKiAJbWVzcQltZXNzYWdlIGJlaW5nIGZyZWVkCiAgKi8KLWV4dGVybiB2b2lkIGdydV9mcmVlX21lc3NhZ2Uodm9pZCAqbXEsIHZvaWQgKm1lc3EpOworZXh0ZXJuIHZvaWQgZ3J1X2ZyZWVfbWVzc2FnZShzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkLAorCQkJICAgICB2b2lkICptZXNxKTsKIAogLyoKICAqIEdldCBuZXh0IG1lc3NhZ2UgZnJvbSBtZXNzYWdlIHF1ZXVlLiBSZXR1cm5zIHBvaW50ZXIgdG8KQEAgLTEwNiwxMyArMTIxLDEzIEBACiAgKiBpbiBvcmRlciB0byBtb3ZlIHRoZSBxdWV1ZSBwb2ludGVycyB0byBuZXh0IG1lc3NhZ2UuCiAgKgogICogICBJbnB1dAotICogCW1xCW1lc3NhZ2UgcXVldWUKKyAqIAltcWQJcG9pbnRlciB0byBtZXNzYWdlIHF1ZXVlIGRlc2NyaXB0b3IKICAqCiAgKiAgIE91dHB1dDoKICAqCXAJcG9pbnRlciB0byBtZXNzYWdlCiAgKglOVUxMCW5vIG1lc3NhZ2UgYXZhaWxhYmxlCiAgKi8KLWV4dGVybiB2b2lkICpncnVfZ2V0X25leHRfbWVzc2FnZSh2b2lkICptcSk7CitleHRlcm4gdm9pZCAqZ3J1X2dldF9uZXh0X21lc3NhZ2Uoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCk7CiAKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYwppbmRleCAzZDJmYzIxLi5lYzNmN2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCkBAIC03NiwxMCArNzYsOSBAQAogLyogSGl0IHRoZSBhc2lkIGxpbWl0LiBTdGFydCBvdmVyICovCiBzdGF0aWMgaW50IGdydV93cmFwX2FzaWQoc3RydWN0IGdydV9zdGF0ZSAqZ3J1KQogewotCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICVwXG4iLCBncnUpOworCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkXG4iLCBncnUtPmdzX2dpZCk7CiAJU1RBVChhc2lkX3dyYXApOwogCWdydS0+Z3NfYXNpZF9nZW4rKzsKLQlncnVfZmx1c2hfYWxsX3RsYihncnUpOwogCXJldHVybiBNSU5fQVNJRDsKIH0KIApAQCAtODgsMTkgKzg3LDIxIEBACiB7CiAJaW50IGksIGdpZCwgaW51c2VfYXNpZCwgbGltaXQ7CiAKLQlncnVfZGJnKGdydWRldiwgImdydSAlcCwgYXNpZCAweCV4XG4iLCBncnUsIGFzaWQpOworCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkLCBhc2lkIDB4JXhcbiIsIGdydS0+Z3NfZ2lkLCBhc2lkKTsKIAlTVEFUKGFzaWRfbmV4dCk7CiAJbGltaXQgPSBNQVhfQVNJRDsKIAlpZiAoYXNpZCA+PSBsaW1pdCkKIAkJYXNpZCA9IGdydV93cmFwX2FzaWQoZ3J1KTsKKwlncnVfZmx1c2hfYWxsX3RsYihncnUpOwogCWdpZCA9IGdydS0+Z3NfZ2lkOwogYWdhaW46CiAJZm9yIChpID0gMDsgaSA8IEdSVV9OVU1fQ0NIOyBpKyspIHsKIAkJaWYgKCFncnUtPmdzX2d0c1tpXSkKIAkJCWNvbnRpbnVlOwogCQlpbnVzZV9hc2lkID0gZ3J1LT5nc19ndHNbaV0tPnRzX2dtcy0+bXNfYXNpZHNbZ2lkXS5tdF9hc2lkOwotCQlncnVfZGJnKGdydWRldiwgImdydSAlcCwgaW51c2VfYXNpZCAweCV4LCBjeHRudW0gJWQsIGd0cyAlcFxuIiwKLQkJCWdydSwgaW51c2VfYXNpZCwgaSwgZ3J1LT5nc19ndHNbaV0pOworCQlncnVfZGJnKGdydWRldiwgImdpZCAlZCwgZ3RzICVwLCBnbXMgJXAsIGludXNlIDB4JXgsIGN4dCAlZFxuIiwKKwkJCWdydS0+Z3NfZ2lkLCBncnUtPmdzX2d0c1tpXSwgZ3J1LT5nc19ndHNbaV0tPnRzX2dtcywKKwkJCWludXNlX2FzaWQsIGkpOwogCQlpZiAoaW51c2VfYXNpZCA9PSBhc2lkKSB7CiAJCQlhc2lkICs9IEFTSURfSU5DOwogCQkJaWYgKGFzaWQgPj0gbGltaXQpIHsKQEAgLTEyMCw4ICsxMjEsOCBAQAogCX0KIAlncnUtPmdzX2FzaWRfbGltaXQgPSBsaW1pdDsKIAlncnUtPmdzX2FzaWQgPSBhc2lkOwotCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICVwLCBuZXcgYXNpZCAweCV4LCBuZXdfbGltaXQgMHgleFxuIiwgZ3J1LCBhc2lkLAotCQlsaW1pdCk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWQsIG5ldyBhc2lkIDB4JXgsIG5ld19saW1pdCAweCV4XG4iLCBncnUtPmdzX2dpZCwKKwkJCQkJYXNpZCwgbGltaXQpOwogCXJldHVybiBhc2lkOwogfQogCkBAIC0xMzAsMTQgKzEzMSwxMiBAQAogewogCWludCBhc2lkOwogCi0Jc3Bpbl9sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CiAJZ3J1LT5nc19hc2lkICs9IEFTSURfSU5DOwogCWFzaWQgPSBncnUtPmdzX2FzaWQ7CiAJaWYgKGFzaWQgPj0gZ3J1LT5nc19hc2lkX2xpbWl0KQogCQlhc2lkID0gZ3J1X3Jlc2V0X2FzaWRfbGltaXQoZ3J1LCBhc2lkKTsKLQlzcGluX3VubG9jaygmZ3J1LT5nc19hc2lkX2xvY2spOwogCi0JZ3J1X2RiZyhncnVkZXYsICJncnUgJXAsIGFzaWQgMHgleFxuIiwgZ3J1LCBhc2lkKTsKKwlncnVfZGJnKGdydWRldiwgImdpZCAlZCwgYXNpZCAweCV4XG4iLCBncnUtPmdzX2dpZCwgYXNpZCk7CiAJcmV0dXJuIGFzaWQ7CiB9CiAKQEAgLTIxNSwxNyArMjE0LDIwIEBACiAgKiBUTEIgbWFuYW5nbWVudCByZXF1aXJlcyB0cmFja2luZyBhbGwgR1JVIGNoaXBsZXRzIHRoYXQgaGF2ZSBsb2FkZWQgYSBHU0VHCiAgKiBjb250ZXh0LgogICovCi1zdGF0aWMgaW50IGdydV9sb2FkX21tX3RyYWNrZXIoc3RydWN0IGdydV9zdGF0ZSAqZ3J1LCBzdHJ1Y3QgZ3J1X21tX3N0cnVjdCAqZ21zLAotCQkJICAgICAgIGludCBjdHhudW0pCitzdGF0aWMgaW50IGdydV9sb2FkX21tX3RyYWNrZXIoc3RydWN0IGdydV9zdGF0ZSAqZ3J1LAorCQkJCQlzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzKQogeworCXN0cnVjdCBncnVfbW1fc3RydWN0ICpnbXMgPSBndHMtPnRzX2dtczsKIAlzdHJ1Y3QgZ3J1X21tX3RyYWNrZXIgKmFzaWRzID0gJmdtcy0+bXNfYXNpZHNbZ3J1LT5nc19naWRdOwotCXVuc2lnbmVkIHNob3J0IGN0eGJpdG1hcCA9ICgxIDw8IGN0eG51bSk7CisJdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwID0gKDEgPDwgZ3RzLT50c19jdHhudW0pOwogCWludCBhc2lkOwogCiAJc3Bpbl9sb2NrKCZnbXMtPm1zX2FzaWRfbG9jayk7CiAJYXNpZCA9IGFzaWRzLT5tdF9hc2lkOwogCi0JaWYgKGFzaWQgPT0gMCB8fCBhc2lkcy0+bXRfYXNpZF9nZW4gIT0gZ3J1LT5nc19hc2lkX2dlbikgeworCXNwaW5fbG9jaygmZ3J1LT5nc19hc2lkX2xvY2spOworCWlmIChhc2lkID09IDAgfHwgKGFzaWRzLT5tdF9jdHhiaXRtYXAgPT0gMCAmJiBhc2lkcy0+bXRfYXNpZF9nZW4gIT0KKwkJCSAgZ3J1LT5nc19hc2lkX2dlbikpIHsKIAkJYXNpZCA9IGdydV9hc3NpZ25fYXNpZChncnUpOwogCQlhc2lkcy0+bXRfYXNpZCA9IGFzaWQ7CiAJCWFzaWRzLT5tdF9hc2lkX2dlbiA9IGdydS0+Z3NfYXNpZF9nZW47CkBAIC0yMzMsNiArMjM1LDcgQEAKIAl9IGVsc2UgewogCQlTVEFUKGFzaWRfcmV1c2UpOwogCX0KKwlzcGluX3VubG9jaygmZ3J1LT5nc19hc2lkX2xvY2spOwogCiAJQlVHX09OKGFzaWRzLT5tdF9jdHhiaXRtYXAgJiBjdHhiaXRtYXApOwogCWFzaWRzLT5tdF9jdHhiaXRtYXAgfD0gY3R4Yml0bWFwOwpAQCAtMjQxLDI0ICsyNDQsMjggQEAKIAlzcGluX3VubG9jaygmZ21zLT5tc19hc2lkX2xvY2spOwogCiAJZ3J1X2RiZyhncnVkZXYsCi0JCSJncnUgJXgsIGdtcyAlcCwgY3R4bnVtIDB4JWQsIGFzaWQgMHgleCwgYXNpZG1hcCAweCVseFxuIiwKLQkJZ3J1LT5nc19naWQsIGdtcywgY3R4bnVtLCBhc2lkLCBnbXMtPm1zX2FzaWRtYXBbMF0pOworCQkiZ2lkICVkLCBndHMgJXAsIGdtcyAlcCwgY3R4bnVtICVkLCBhc2lkIDB4JXgsIGFzaWRtYXAgMHglbHhcbiIsCisJCWdydS0+Z3NfZ2lkLCBndHMsIGdtcywgZ3RzLT50c19jdHhudW0sIGFzaWQsCisJCWdtcy0+bXNfYXNpZG1hcFswXSk7CiAJcmV0dXJuIGFzaWQ7CiB9CiAKIHN0YXRpYyB2b2lkIGdydV91bmxvYWRfbW1fdHJhY2tlcihzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsCi0JCQkJICBzdHJ1Y3QgZ3J1X21tX3N0cnVjdCAqZ21zLCBpbnQgY3R4bnVtKQorCQkJCQlzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzKQogeworCXN0cnVjdCBncnVfbW1fc3RydWN0ICpnbXMgPSBndHMtPnRzX2dtczsKIAlzdHJ1Y3QgZ3J1X21tX3RyYWNrZXIgKmFzaWRzOwogCXVuc2lnbmVkIHNob3J0IGN0eGJpdG1hcDsKIAogCWFzaWRzID0gJmdtcy0+bXNfYXNpZHNbZ3J1LT5nc19naWRdOwotCWN0eGJpdG1hcCA9ICgxIDw8IGN0eG51bSk7CisJY3R4Yml0bWFwID0gKDEgPDwgZ3RzLT50c19jdHhudW0pOwogCXNwaW5fbG9jaygmZ21zLT5tc19hc2lkX2xvY2spOworCXNwaW5fbG9jaygmZ3J1LT5nc19hc2lkX2xvY2spOwogCUJVR19PTigoYXNpZHMtPm10X2N0eGJpdG1hcCAmIGN0eGJpdG1hcCkgIT0gY3R4Yml0bWFwKTsKIAlhc2lkcy0+bXRfY3R4Yml0bWFwIF49IGN0eGJpdG1hcDsKLQlncnVfZGJnKGdydWRldiwgImdydSAleCwgZ21zICVwLCBjdHhudW0gMHglZCwgYXNpZG1hcCAweCVseFxuIiwKLQkJZ3J1LT5nc19naWQsIGdtcywgY3R4bnVtLCBnbXMtPm1zX2FzaWRtYXBbMF0pOworCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkLCBndHMgJXAsIGdtcyAlcCwgY3R4bnVtIDB4JWQsIGFzaWRtYXAgMHglbHhcbiIsCisJCWdydS0+Z3NfZ2lkLCBndHMsIGdtcywgZ3RzLT50c19jdHhudW0sIGdtcy0+bXNfYXNpZG1hcFswXSk7CisJc3Bpbl91bmxvY2soJmdydS0+Z3NfYXNpZF9sb2NrKTsKIAlzcGluX3VubG9jaygmZ21zLT5tc19hc2lkX2xvY2spOwogfQogCkBAIC0zMTksNiArMzI2LDcgQEAKIAlndHMtPnRzX3ZtYSA9IHZtYTsKIAlndHMtPnRzX3RsYl9pbnRfc2VsZWN0ID0gLTE7CiAJZ3RzLT50c19nbXMgPSBncnVfcmVnaXN0ZXJfbW11X25vdGlmaWVyKCk7CisJZ3RzLT50c19zaXplYXZhaWwgPSBHUlVfU0laRUFWQUlMKFBBR0VfU0hJRlQpOwogCWlmICghZ3RzLT50c19nbXMpCiAJCWdvdG8gZXJyOwogCkBAIC0zOTksNyArNDA3LDcgQEAKIAlzdHJ1Y3QgZ3J1X3N0YXRlICpncnU7CiAKIAlncnUgPSBndHMtPnRzX2dydTsKLQlncnVfZGJnKGdydWRldiwgImd0cyAlcCwgZ3J1ICVwXG4iLCBndHMsIGdydSk7CisJZ3J1X2RiZyhncnVkZXYsICJndHMgJXAsIGdpZCAlZFxuIiwgZ3RzLCBncnUtPmdzX2dpZCk7CiAKIAlzcGluX2xvY2soJmdydS0+Z3NfbG9jayk7CiAJZ3J1LT5nc19ndHNbZ3RzLT50c19jdHhudW1dID0gTlVMTDsKQEAgLTQwOCw2ICs0MTYsNyBAQAogCV9fY2xlYXJfYml0KGd0cy0+dHNfY3R4bnVtLCAmZ3J1LT5nc19jb250ZXh0X21hcCk7CiAJZ3RzLT50c19jdHhudW0gPSBOVUxMQ1RYOwogCWd0cy0+dHNfZ3J1ID0gTlVMTDsKKwlndHMtPnRzX2JsYWRlID0gLTE7CiAJc3Bpbl91bmxvY2soJmdydS0+Z3NfbG9jayk7CiAKIAlndHNfZHJvcChndHMpOwpAQCAtNDMyLDggKzQ0MSw4IEBACiAJcmV0dXJuIEdSVV9IQU5ETEVfQllURVM7CiB9CiAKLXN0YXRpYyB2b2lkIGdydV9wcmVmZXRjaF9jb250ZXh0KHZvaWQgKmdzZWcsIHZvaWQgKmNiLCB2b2lkICpjYmUsIHVuc2lnbmVkIGxvbmcgY2JybWFwLAotCQkJCXVuc2lnbmVkIGxvbmcgbGVuZ3RoKQorc3RhdGljIHZvaWQgZ3J1X3ByZWZldGNoX2NvbnRleHQodm9pZCAqZ3NlZywgdm9pZCAqY2IsIHZvaWQgKmNiZSwKKwkJCQl1bnNpZ25lZCBsb25nIGNicm1hcCwgdW5zaWduZWQgbG9uZyBsZW5ndGgpCiB7CiAJaW50IGksIHNjcjsKIApAQCAtNTAwLDEyICs1MDksMTIgQEAKIAl6YXBfdm1hX3B0ZXMoZ3RzLT50c192bWEsIFVHUlVBRERSKGd0cyksIEdSVV9HU0VHX1BBR0VTSVpFKTsKIAljY2ggPSBnZXRfY2NoKGdydS0+Z3NfZ3J1X2Jhc2VfdmFkZHIsIGN0eG51bSk7CiAKKwlncnVfZGJnKGdydWRldiwgImd0cyAlcFxuIiwgZ3RzKTsKIAlsb2NrX2NjaF9oYW5kbGUoY2NoKTsKIAlpZiAoY2NoX2ludGVycnVwdF9zeW5jKGNjaCkpCiAJCUJVRygpOwotCWdydV9kYmcoZ3J1ZGV2LCAiZ3RzICVwXG4iLCBndHMpOwogCi0JZ3J1X3VubG9hZF9tbV90cmFja2VyKGdydSwgZ3RzLT50c19nbXMsIGd0cy0+dHNfY3R4bnVtKTsKKwlncnVfdW5sb2FkX21tX3RyYWNrZXIoZ3J1LCBndHMpOwogCWlmIChzYXZlc3RhdGUpCiAJCWdydV91bmxvYWRfY29udGV4dF9kYXRhKGd0cy0+dHNfZ2RhdGEsIGdydS0+Z3NfZ3J1X2Jhc2VfdmFkZHIsCiAJCQkJCWN0eG51bSwgZ3RzLT50c19jYnJfbWFwLApAQCAtNTM0LDcgKzU0Myw3IEBACiAJY2NoID0gZ2V0X2NjaChncnUtPmdzX2dydV9iYXNlX3ZhZGRyLCBjdHhudW0pOwogCiAJbG9ja19jY2hfaGFuZGxlKGNjaCk7Ci0JYXNpZCA9IGdydV9sb2FkX21tX3RyYWNrZXIoZ3J1LCBndHMtPnRzX2dtcywgZ3RzLT50c19jdHhudW0pOworCWFzaWQgPSBncnVfbG9hZF9tbV90cmFja2VyKGdydSwgZ3RzKTsKIAljY2gtPnRmbV9mYXVsdF9iaXRfZW5hYmxlID0KIAkgICAgKGd0cy0+dHNfdXNlcl9vcHRpb25zID09IEdSVV9PUFRfTUlTU19GTU1fUE9MTAogCSAgICAgfHwgZ3RzLT50c191c2VyX29wdGlvbnMgPT0gR1JVX09QVF9NSVNTX0ZNTV9JTlRSKTsKQEAgLTU0NCw3ICs1NTMsOCBAQAogCQljY2gtPnRsYl9pbnRfc2VsZWN0ID0gZ3RzLT50c190bGJfaW50X3NlbGVjdDsKIAl9CiAJY2NoLT50Zm1fZG9uZV9iaXRfZW5hYmxlID0gMDsKLQllcnIgPSBjY2hfYWxsb2NhdGUoY2NoLCBhc2lkLCBndHMtPnRzX2Nicl9tYXAsIGd0cy0+dHNfZHNyX21hcCk7CisJZXJyID0gY2NoX2FsbG9jYXRlKGNjaCwgYXNpZCwgZ3RzLT50c19zaXplYXZhaWwsIGd0cy0+dHNfY2JyX21hcCwKKwkJCQlndHMtPnRzX2Rzcl9tYXApOwogCWlmIChlcnIpIHsKIAkJZ3J1X2RiZyhncnVkZXYsCiAJCQkiZXJyICVkOiBjY2ggJXAsIGd0cyAlcCwgY2JyIDB4JWx4LCBkc3IgMHglbHhcbiIsCkBAIC01NjUsMTEgKzU3NSwxMiBAQAogLyoKICAqIFVwZGF0ZSBmaWVsZHMgaW4gYW4gYWN0aXZlIENDSDoKICAqIAktIHJldGFyZ2V0IGludGVycnVwdHMgb24gbG9jYWwgYmxhZGUKKyAqIAktIHVwZGF0ZSBzaXplYXZhaWwgbWFzawogICogCS0gZm9yY2UgYSBkZWxheWVkIGNvbnRleHQgdW5sb2FkIGJ5IGNsZWFyaW5nIHRoZSBDQ0ggYXNpZHMuIFRoaXMKICAqIAkgIGZvcmNlcyBUTEIgbWlzc2VzIGZvciBuZXcgR1JVIGluc3RydWN0aW9ucy4gVGhlIGNvbnRleHQgaXMgdW5sb2FkZWQKICAqIAkgIHdoZW4gdGhlIG5leHQgVExCIG1pc3Mgb2NjdXJzLgogICovCi1zdGF0aWMgaW50IGdydV91cGRhdGVfY2NoKHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIGludCBpbnRfc2VsZWN0KQoraW50IGdydV91cGRhdGVfY2NoKHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIGludCBmb3JjZV91bmxvYWQpCiB7CiAJc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2g7CiAJc3RydWN0IGdydV9zdGF0ZSAqZ3J1ID0gZ3RzLT50c19ncnU7CkBAIC01ODMsOSArNTk0LDExIEBACiAJCQlnb3RvIGV4aXQ7CiAJCWlmIChjY2hfaW50ZXJydXB0KGNjaCkpCiAJCQlCVUcoKTsKLQkJaWYgKGludF9zZWxlY3QgPj0gMCkgewotCQkJZ3RzLT50c190bGJfaW50X3NlbGVjdCA9IGludF9zZWxlY3Q7Ci0JCQljY2gtPnRsYl9pbnRfc2VsZWN0ID0gaW50X3NlbGVjdDsKKwkJaWYgKCFmb3JjZV91bmxvYWQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQkJY2NoLT5zaXplYXZhaWxbaV0gPSBndHMtPnRzX3NpemVhdmFpbDsKKwkJCWd0cy0+dHNfdGxiX2ludF9zZWxlY3QgPSBncnVfY3B1X2ZhdWx0X21hcF9pZCgpOworCQkJY2NoLT50bGJfaW50X3NlbGVjdCA9IGdydV9jcHVfZmF1bHRfbWFwX2lkKCk7CiAJCX0gZWxzZSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQkJCWNjaC0+YXNpZFtpXSA9IDA7CkBAIC02MTcsNyArNjMwLDcgQEAKIAogCWdydV9kYmcoZ3J1ZGV2LCAicmV0YXJnZXQgZnJvbSAlZCB0byAlZFxuIiwgZ3RzLT50c190bGJfaW50X3NlbGVjdCwKIAkJZ3J1X2NwdV9mYXVsdF9tYXBfaWQoKSk7Ci0JcmV0dXJuIGdydV91cGRhdGVfY2NoKGd0cywgZ3J1X2NwdV9mYXVsdF9tYXBfaWQoKSk7CisJcmV0dXJuIGdydV91cGRhdGVfY2NoKGd0cywgMCk7CiB9CiAKIApAQCAtNjg4LDcgKzcwMSw3IEBACiAJCVNUQVQoc3RlYWxfY29udGV4dF9mYWlsZWQpOwogCX0KIAlncnVfZGJnKGdydWRldiwKLQkJInN0b2xlIGdydSAleCwgY3R4bnVtICVkIGZyb20gZ3RzICVwLiBOZWVkIGNiICVkLCBkcyAlZDsiCisJCSJzdG9sZSBnaWQgJWQsIGN0eG51bSAlZCBmcm9tIGd0cyAlcC4gTmVlZCBjYiAlZCwgZHMgJWQ7IgogCQkiIGF2YWlsIGNiICVsZCwgZHMgJWxkXG4iLAogCQlncnUtPmdzX2dpZCwgY3R4bnVtLCBuZ3RzLCBjYnIsIGRzciwgaHdlaWdodDY0KGdydS0+Z3NfY2JyX21hcCksCiAJCWh3ZWlnaHQ2NChncnUtPmdzX2Rzcl9tYXApKTsKQEAgLTcyNyw2ICs3NDAsNyBAQAogCQl9CiAJCXJlc2VydmVfZ3J1X3Jlc291cmNlcyhncnUsIGd0cyk7CiAJCWd0cy0+dHNfZ3J1ID0gZ3J1OworCQlndHMtPnRzX2JsYWRlID0gZ3J1LT5nc19ibGFkZV9pZDsKIAkJZ3RzLT50c19jdHhudW0gPQogCQkgICAgZmluZF9maXJzdF96ZXJvX2JpdCgmZ3J1LT5nc19jb250ZXh0X21hcCwgR1JVX05VTV9DQ0gpOwogCQlCVUdfT04oZ3RzLT50c19jdHhudW0gPT0gR1JVX05VTV9DQ0gpOwpAQCAtNzM3LDcgKzc1MSw3IEBACiAKIAkJU1RBVChhc3NpZ25fY29udGV4dCk7CiAJCWdydV9kYmcoZ3J1ZGV2LAotCQkJImdzZWcgJXAsIGd0cyAlcCwgZ3J1ICV4LCBjdHggJWQsIGNiciAlZCwgZHNyICVkXG4iLAorCQkJImdzZWcgJXAsIGd0cyAlcCwgZ2lkICVkLCBjdHggJWQsIGNiciAlZCwgZHNyICVkXG4iLAogCQkJZ3NlZ192aXJ0dWFsX2FkZHJlc3MoZ3RzLT50c19ncnUsIGd0cy0+dHNfY3R4bnVtKSwgZ3RzLAogCQkJZ3RzLT50c19ncnUtPmdzX2dpZCwgZ3RzLT50c19jdHhudW0sCiAJCQlndHMtPnRzX2Nicl9hdV9jb3VudCwgZ3RzLT50c19kc3JfYXVfY291bnQpOwpAQCAtNzczLDggKzc4Nyw4IEBACiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiAKIGFnYWluOgotCXByZWVtcHRfZGlzYWJsZSgpOwogCW11dGV4X2xvY2soJmd0cy0+dHNfY3R4bG9jayk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaWYgKGd0cy0+dHNfZ3J1KSB7CiAJCWlmIChndHMtPnRzX2dydS0+Z3NfYmxhZGVfaWQgIT0gdXZfbnVtYV9ibGFkZV9pZCgpKSB7CiAJCQlTVEFUKG1pZ3JhdGVkX25vcGZuX3VubG9hZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVwcm9jZnMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCmluZGV4IDczYjBjYTAuLmVlNzQ4MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCkBAIC02Miw3ICs2Miw5IEBACiAJcHJpbnRzdGF0KHMsIGFzaWRfd3JhcCk7CiAJcHJpbnRzdGF0KHMsIGFzaWRfcmV1c2UpOwogCXByaW50c3RhdChzLCBpbnRyKTsKKwlwcmludHN0YXQocywgaW50cl9tbV9sb2NrX2ZhaWxlZCk7CiAJcHJpbnRzdGF0KHMsIGNhbGxfb3MpOworCXByaW50c3RhdChzLCBjYWxsX29zX29mZm5vZGVfcmVmZXJlbmNlKTsKIAlwcmludHN0YXQocywgY2FsbF9vc19jaGVja19mb3JfYnVnKTsKIAlwcmludHN0YXQocywgY2FsbF9vc193YWl0X3F1ZXVlKTsKIAlwcmludHN0YXQocywgdXNlcl9mbHVzaF90bGIpOwpAQCAtMTIwLDYgKzEyMiwzMCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGludCBtY3Nfc3RhdGlzdGljc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlpbnQgb3A7CisJdW5zaWduZWQgbG9uZyB0b3RhbCwgY291bnQsIG1heDsKKwlzdGF0aWMgY2hhciAqaWRbXSA9IHsiY2NoX2FsbG9jYXRlIiwgImNjaF9zdGFydCIsICJjY2hfaW50ZXJydXB0IiwKKwkJImNjaF9pbnRlcnJ1cHRfc3luYyIsICJjY2hfZGVhbGxvY2F0ZSIsICJ0Z2hfaW52YWxpZGF0ZSJ9OworCisJZm9yIChvcCA9IDA7IG9wIDwgbWNzb3BfbGFzdDsgb3ArKykgeworCQljb3VudCA9IGF0b21pY19sb25nX3JlYWQoJm1jc19vcF9zdGF0aXN0aWNzW29wXS5jb3VudCk7CisJCXRvdGFsID0gYXRvbWljX2xvbmdfcmVhZCgmbWNzX29wX3N0YXRpc3RpY3Nbb3BdLnRvdGFsKTsKKwkJbWF4ID0gbWNzX29wX3N0YXRpc3RpY3Nbb3BdLm1heDsKKwkJc2VxX3ByaW50ZihzLCAiJS0yMHMlMTJsZCUxMmxkJTEybGRcbiIsIGlkW29wXSwgY291bnQsCisJCQkgICBjb3VudCA/IHRvdGFsIC8gY291bnQgOiAwLCBtYXgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbWNzX3N0YXRpc3RpY3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCit7CisJbWVtc2V0KG1jc19vcF9zdGF0aXN0aWNzLCAwLCBzaXplb2YobWNzX29wX3N0YXRpc3RpY3MpKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBpbnQgb3B0aW9uc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKIHsKIAlzZXFfcHJpbnRmKHMsICIweCVseFxuIiwgZ3J1X29wdGlvbnMpOwpAQCAtMTM1LDYgKzE2MSw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyCiAJICAgIChidWYsIHVzZXJidWYsIGNvdW50IDwgc2l6ZW9mKGJ1ZikgPyBjb3VudCA6IHNpemVvZihidWYpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2NvdW50IC0gMV0gPSAnXDAnOwogCWlmICghc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCiAJCWdydV9vcHRpb25zID0gdmFsOwogCkBAIC0xOTksNyArMjI2LDcgQEAKIAogc3RhdGljIHZvaWQgKnNlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIGxvZmZfdCAqZ2lkKQogewotCWlmICgqZ2lkIDwgR1JVX01BWF9HUlVTKQorCWlmICgqZ2lkIDwgZ3J1X21heF9naWRzKQogCQlyZXR1cm4gZ2lkOwogCXJldHVybiBOVUxMOwogfQpAQCAtMjA3LDcgKzIzNCw3IEBACiBzdGF0aWMgdm9pZCAqc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpkYXRhLCBsb2ZmX3QgKmdpZCkKIHsKIAkoKmdpZCkrKzsKLQlpZiAoKmdpZCA8IEdSVV9NQVhfR1JVUykKKwlpZiAoKmdpZCA8IGdydV9tYXhfZ2lkcykKIAkJcmV0dXJuIGdpZDsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTIzMSw2ICsyNTgsMTEgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3RhdGlzdGljc19zaG93LCBOVUxMKTsKIH0KIAorc3RhdGljIGludCBtY3Nfc3RhdGlzdGljc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtY3Nfc3RhdGlzdGljc19zaG93LCBOVUxMKTsKK30KKwogc3RhdGljIGludCBvcHRpb25zX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG9wdGlvbnNfc2hvdywgTlVMTCk7CkBAIC0yNTUsNiArMjg3LDE0IEBACiAJLnJlbGVhc2UgCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtY3Nfc3RhdGlzdGljc19mb3BzID0geworCS5vcGVuIAkJPSBtY3Nfc3RhdGlzdGljc19vcGVuLAorCS5yZWFkIAkJPSBzZXFfcmVhZCwKKwkud3JpdGUgCQk9IG1jc19zdGF0aXN0aWNzX3dyaXRlLAorCS5sbHNlZWsgCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlIAk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb3B0aW9uc19mb3BzID0gewogCS5vcGVuIAkJPSBvcHRpb25zX29wZW4sCiAJLnJlYWQgCQk9IHNlcV9yZWFkLApAQCAtMjgzLDYgKzMyMyw3IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIH0gcHJvY19maWxlc1tdID0gewogCXsic3RhdGlzdGljcyIsIDA2NDQsICZzdGF0aXN0aWNzX2ZvcHN9LAorCXsibWNzX3N0YXRpc3RpY3MiLCAwNjQ0LCAmbWNzX3N0YXRpc3RpY3NfZm9wc30sCiAJeyJkZWJ1Z19vcHRpb25zIiwgMDY0NCwgJm9wdGlvbnNfZm9wc30sCiAJeyJjY2hfc3RhdHVzIiwgMDQ0NCwgJmNjaF9mb3BzfSwKIAl7ImdydV9zdGF0dXMiLCAwNDQ0LCAmZ3J1X2ZvcHN9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaAppbmRleCBhNzhmNzBkLi5iZjFlZWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaApAQCAtMTUzLDYgKzE1Myw3IEBACiBleHRlcm4gc3RydWN0IGdydV9zdGF0c19zIGdydV9zdGF0czsKIGV4dGVybiBzdHJ1Y3QgZ3J1X2JsYWRlX3N0YXRlICpncnVfYmFzZVtdOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ3J1X3N0YXJ0X3BhZGRyLCBncnVfZW5kX3BhZGRyOworZXh0ZXJuIHVuc2lnbmVkIGludCBncnVfbWF4X2dpZHM7CiAKICNkZWZpbmUgR1JVX01BWF9CTEFERVMJCU1BWF9OVU1OT0RFUwogI2RlZmluZSBHUlVfTUFYX0dSVVMJCShHUlVfTUFYX0JMQURFUyAqIEdSVV9DSElQTEVUU19QRVJfQkxBREUpCkBAIC0xODQsNyArMTg1LDkgQEAKIAlhdG9taWNfbG9uZ190IGFzaWRfd3JhcDsKIAlhdG9taWNfbG9uZ190IGFzaWRfcmV1c2U7CiAJYXRvbWljX2xvbmdfdCBpbnRyOworCWF0b21pY19sb25nX3QgaW50cl9tbV9sb2NrX2ZhaWxlZDsKIAlhdG9taWNfbG9uZ190IGNhbGxfb3M7CisJYXRvbWljX2xvbmdfdCBjYWxsX29zX29mZm5vZGVfcmVmZXJlbmNlOwogCWF0b21pY19sb25nX3QgY2FsbF9vc19jaGVja19mb3JfYnVnOwogCWF0b21pY19sb25nX3QgY2FsbF9vc193YWl0X3F1ZXVlOwogCWF0b21pY19sb25nX3QgdXNlcl9mbHVzaF90bGI7CkBAIC0yMzcsNiArMjQwLDE3IEBACiAKIH07CiAKK2VudW0gbWNzX29wIHtjY2hvcF9hbGxvY2F0ZSwgY2Nob3Bfc3RhcnQsIGNjaG9wX2ludGVycnVwdCwgY2Nob3BfaW50ZXJydXB0X3N5bmMsCisJY2Nob3BfZGVhbGxvY2F0ZSwgdGdob3BfaW52YWxpZGF0ZSwgbWNzb3BfbGFzdH07CisKK3N0cnVjdCBtY3Nfb3Bfc3RhdGlzdGljIHsKKwlhdG9taWNfbG9uZ190CWNvdW50OworCWF0b21pY19sb25nX3QJdG90YWw7CisJdW5zaWduZWQgbG9uZwltYXg7Cit9OworCitleHRlcm4gc3RydWN0IG1jc19vcF9zdGF0aXN0aWMgbWNzX29wX3N0YXRpc3RpY3NbbWNzb3BfbGFzdF07CisKICNkZWZpbmUgT1BUX0RQUklOVAkxCiAjZGVmaW5lIE9QVF9TVEFUUwkyCiAjZGVmaW5lIEdSVV9RVUlDS0xPT0sJNApAQCAtMjc4LDEzICsyOTIsMTIgQEAKIC8qIEdlbmVyYXRlIGEgR1JVIGFzaWQgdmFsdWUgZnJvbSBhIEdSVSBiYXNlIGFzaWQgJiBhIHZpcnR1YWwgYWRkcmVzcy4gKi8KICNpZiBkZWZpbmVkIENPTkZJR19JQTY0CiAjZGVmaW5lIFZBRERSX0hJX0JJVAkJNjQKLSNkZWZpbmUgR1JVUkVHSU9OKGFkZHIpCQkoKGFkZHIpID4+IChWQUREUl9ISV9CSVQgLSAzKSAmIDMpCiAjZWxpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKICNkZWZpbmUgVkFERFJfSElfQklUCQk0OAotI2RlZmluZSBHUlVSRUdJT04oYWRkcikJCSgwKQkJLyogWlpaIGNvdWxkIGRvIGJldHRlciAqLwogI2Vsc2UKICNlcnJvciAiVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIgogI2VuZGlmCisjZGVmaW5lIEdSVVJFR0lPTihhZGRyKQkJKChhZGRyKSA+PiAoVkFERFJfSElfQklUIC0gMykgJiAzKQogI2RlZmluZSBHUlVBU0lEKGFzaWQsIGFkZHIpCSgoYXNpZCkgKyBHUlVSRUdJT04oYWRkcikpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTcsMTIgKzMxMCwxMiBAQAogICogVGhpcyBzdHJ1Y3R1cmUgaXMgcG9pbnRlZCB0byBmcm9tIHRoZSBtbXN0cnVjdCB2aWEgdGhlIG5vdGlmaWVyIHBvaW50ZXIuCiAgKiBUaGVyZSBpcyBvbmUgb2YgdGhlc2UgcGVyIGFkZHJlc3Mgc3BhY2UuCiAgKi8KLXN0cnVjdCBncnVfbW1fdHJhY2tlciB7Ci0JdW5zaWduZWQgaW50CQltdF9hc2lkX2dlbjsJLyogQVNJRCB3cmFwIGNvdW50ICovCi0JaW50CQkJbXRfYXNpZDsJLyogY3VycmVudCBiYXNlIEFTSUQgZm9yIGdydSAqLwotCXVuc2lnbmVkIHNob3J0CQltdF9jdHhiaXRtYXA7CS8qIGJpdG1hcCBvZiBjb250ZXh0cyB1c2luZworc3RydWN0IGdydV9tbV90cmFja2VyIHsJCQkJLyogcGFjayB0byByZWR1Y2Ugc2l6ZSAqLworCXVuc2lnbmVkIGludAkJbXRfYXNpZF9nZW46MjQ7CS8qIEFTSUQgd3JhcCBjb3VudCAqLworCXVuc2lnbmVkIGludAkJbXRfYXNpZDoyNDsJLyogY3VycmVudCBiYXNlIEFTSUQgZm9yIGdydSAqLworCXVuc2lnbmVkIHNob3J0CQltdF9jdHhiaXRtYXA6MTY7LyogYml0bWFwIG9mIGNvbnRleHRzIHVzaW5nCiAJCQkJCQkgICBhc2lkICovCi19OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBncnVfbW1fc3RydWN0IHsKIAlzdHJ1Y3QgbW11X25vdGlmaWVyCW1zX25vdGlmaWVyOwpAQCAtMzQ4LDYgKzM2MSw3IEBACiAJbG9uZwkJCXRzX3VzZXJfb3B0aW9uczsvKiBtaXNjIHVzZXIgb3B0aW9uIGZsYWdzICovCiAJcGlkX3QJCQl0c190Z2lkX293bmVyOwkvKiB0YXNrIHRoYXQgaXMgdXNpbmcgdGhlCiAJCQkJCQkgICBjb250ZXh0IC0gZm9yIG1pZ3JhdGlvbiAqLworCXVuc2lnbmVkIHNob3J0CQl0c19zaXplYXZhaWw7CS8qIFBhZ2VzaXplcyBpbiB1c2UgKi8KIAlpbnQJCQl0c190c2lkOwkvKiB0aHJlYWQgdGhhdCBvd25zIHRoZQogCQkJCQkJICAgc3RydWN0dXJlICovCiAJaW50CQkJdHNfdGxiX2ludF9zZWxlY3Q7LyogdGFyZ2V0IGNwdSBpZiBpbnRlcnJ1cHRzCkBAIC0zNTksNiArMzczLDkgQEAKIAkJCQkJCSAgIHJlcXVpcmVkIGZvciBjb250ZXN0ICovCiAJdW5zaWduZWQgY2hhcgkJdHNfY2JyX2F1X2NvdW50Oy8qIE51bWJlciBvZiBDQlIgcmVzb3VyY2VzCiAJCQkJCQkgICByZXF1aXJlZCBmb3IgY29udGVzdCAqLworCWNoYXIJCQl0c19ibGFkZTsJLyogSWYgPj0gMCwgbWlncmF0ZSBjb250ZXh0IGlmCisJCQkJCQkgICByZWYgZnJvbSBkaWZlcmVudCBibGFkZSAqLworCWNoYXIJCQl0c19mb3JjZV9jY2hfcmVsb2FkOwogCWNoYXIJCQl0c19mb3JjZV91bmxvYWQ7LyogZm9yY2UgY29udGV4dCB0byBiZSB1bmxvYWRlZAogCQkJCQkJICAgYWZ0ZXIgbWlncmF0aW9uICovCiAJY2hhcgkJCXRzX2Nicl9pZHhbR1JVX0NCUl9BVV07LyogQ0JSIG51bWJlcnMgb2YgZWFjaApAQCAtMzkyLDEyICs0MDksMTIgQEAKIAkJCQkJCQkgICBncnUgc2VnbWVudHMgKDY0KSAqLwogCXZvaWQJCQkqZ3NfZ3J1X2Jhc2VfdmFkZHI7CS8qIFZpcnR1YWwgYWRkcmVzcyBvZgogCQkJCQkJCSAgIGdydSBzZWdtZW50cyAoNjQpICovCi0JdW5zaWduZWQgY2hhcgkJZ3NfZ2lkOwkJCS8qIHVuaXF1ZSBHUlUgbnVtYmVyICovCisJdW5zaWduZWQgc2hvcnQJCWdzX2dpZDsJCQkvKiB1bmlxdWUgR1JVIG51bWJlciAqLworCXVuc2lnbmVkIHNob3J0CQlnc19ibGFkZV9pZDsJCS8qIGJsYWRlIG9mIEdSVSAqLwogCXVuc2lnbmVkIGNoYXIJCWdzX3RnaF9sb2NhbF9zaGlmdDsJLyogdXNlZCB0byBwaWNrIFRHSCBmb3IKIAkJCQkJCQkgICBsb2NhbCBmbHVzaCAqLwogCXVuc2lnbmVkIGNoYXIJCWdzX3RnaF9maXJzdF9yZW1vdGU7CS8qIHN0YXJ0aW5nIFRHSCMgZm9yCiAJCQkJCQkJICAgcmVtb3RlIGZsdXNoICovCi0JdW5zaWduZWQgc2hvcnQJCWdzX2JsYWRlX2lkOwkJLyogYmxhZGUgb2YgR1JVICovCiAJc3BpbmxvY2tfdAkJZ3NfYXNpZF9sb2NrOwkJLyogbG9jayB1c2VkIGZvcgogCQkJCQkJCSAgIGFzc2lnbmluZyBhc2lkcyAqLwogCXNwaW5sb2NrX3QJCWdzX2xvY2s7CQkvKiBsb2NrIHVzZWQgZm9yCkBAIC00OTIsNiArNTA5LDEwIEBACiAJCQkoaSkgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOwkJCVwKIAkJCShpKSsrLCAoZ3J1KSsrKQogCisvKiBTY2FuIGFsbCBHUlVzICovCisjZGVmaW5lIGZvcmVhY2hfZ2lkKGdpZCkJCQkJCQlcCisJZm9yICgoZ2lkKSA9IDA7IChnaWQpIDwgZ3J1X21heF9naWRzOyAoZ2lkKSsrKQorCiAvKiBTY2FuIGFsbCBhY3RpdmUgR1RTcyBvbiBhIGdydS4gTm90ZTogbXVzdCBob2xkIHNzX2xvY2sgdG8gdXNlIHRoaXMgbWFjcm8uICovCiAjZGVmaW5lIGZvcl9lYWNoX2d0c19vbl9ncnUoZ3RzLCBncnUsIGN0eG51bSkJCQkJXAogCWZvciAoKGN0eG51bSkgPSAwOyAoY3R4bnVtKSA8IEdSVV9OVU1fQ0NIOyAoY3R4bnVtKSsrKQkJXApAQCAtNTc4LDkgKzU5OSwxMSBAQAogZXh0ZXJuIHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpncnVfYWxsb2NfdGhyZWFkX3N0YXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdAogCQkJCSp2bWEsIGludCB0c2lkKTsKIGV4dGVybiB2b2lkIGdydV91bmxvYWRfY29udGV4dChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzLCBpbnQgc2F2ZXN0YXRlKTsKK2V4dGVybiBpbnQgZ3J1X3VwZGF0ZV9jY2goc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cywgaW50IGZvcmNlX3VubG9hZCk7CiBleHRlcm4gdm9pZCBndHNfZHJvcChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzKTsKIGV4dGVybiB2b2lkIGdydV90Z2hfZmx1c2hfaW5pdChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpOwogZXh0ZXJuIGludCBncnVfa3NlcnZpY2VzX2luaXQoc3RydWN0IGdydV9zdGF0ZSAqZ3J1KTsKK2V4dGVybiB2b2lkIGdydV9rc2VydmljZXNfZXhpdChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpOwogZXh0ZXJuIGlycXJldHVybl90IGdydV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBleHRlcm4gaW50IGdydV9oYW5kbGVfdXNlcl9jYWxsX29zKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiBleHRlcm4gaW50IGdydV91c2VyX2ZsdXNoX3RsYih1bnNpZ25lZCBsb25nIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0bGJwdXJnZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGxicHVyZ2UuYwppbmRleCBjODQ0OTZhLi4xZDEyNTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0bGJwdXJnZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRsYnB1cmdlLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCSIgIEZMVVNIIGdydWlkICVkLCBhc2lkIDB4JXgsIG51bSAlbGQsIGNibWFwIDB4JXhcbiIsCiAJCQkJZ2lkLCBhc2lkLCBudW0sIGFzaWRzLT5tdF9jdHhiaXRtYXApOwogCQkJdGdoID0gZ2V0X2xvY2tfdGdoX2hhbmRsZShncnUpOwotCQkJdGdoX2ludmFsaWRhdGUodGdoLCBzdGFydCwgMCwgYXNpZCwgZ3J1cGFnZXNpemUsIDAsCisJCQl0Z2hfaW52YWxpZGF0ZSh0Z2gsIHN0YXJ0LCB+MCwgYXNpZCwgZ3J1cGFnZXNpemUsIDAsCiAJCQkJICAgICAgIG51bSAtIDEsIGFzaWRzLT5tdF9jdHhiaXRtYXApOwogCQkJZ2V0X3VubG9ja190Z2hfaGFuZGxlKHRnaCk7CiAJCX0gZWxzZSB7CkBAIC0yMTAsMTEgKzIxMCwxMCBAQAogewogCXN0cnVjdCBncnVfdGxiX2dsb2JhbF9oYW5kbGUgKnRnaDsKIAotCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICVwLCBnaWQgJWRcbiIsIGdydSwgZ3J1LT5nc19naWQpOworCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkXG4iLCBncnUtPmdzX2dpZCk7CiAJdGdoID0gZ2V0X2xvY2tfdGdoX2hhbmRsZShncnUpOwotCXRnaF9pbnZhbGlkYXRlKHRnaCwgMCwgfjAsIDAsIDEsIDEsIEdSVU1BWElOVkFMIC0gMSwgMCk7CisJdGdoX2ludmFsaWRhdGUodGdoLCAwLCB+MCwgMCwgMSwgMSwgR1JVTUFYSU5WQUwgLSAxLCAweGZmZmYpOwogCWdldF91bmxvY2tfdGdoX2hhbmRsZSh0Z2gpOwotCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGMuaAppbmRleCAyNzViNzg4Li4xMTQ0NDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmgKQEAgLTkyLDcgKzkyLDkgQEAKIAl1OCBwYWQxWzNdOwkJLyogYWxpZ24gdG8gbmV4dCB1NjQgaW4gMXN0IDY0LWJ5dGUgY2FjaGVsaW5lICovCiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nIHZhcnNfcGE7CS8qIHBoeXMgYWRkcmVzcyBvZiBzdHJ1Y3QgeHBjX3ZhcnMgKi8KLQkJdW5zaWduZWQgbG9uZyBhY3RpdmF0ZV9tcV9ncGE7IC8qIGdydSBwaHkgYWRkciBvZiBhY3RpdmF0ZV9tcSAqLworCQl1bnNpZ25lZCBsb25nIGFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYTsgLyogcGh5cyBhZGRyIG9mICovCisJCQkJCQkJLyogYWN0aXZhdGUgbXEncyAqLworCQkJCQkJCS8qIGdydSBtcSBkZXNjcmlwdG9yICovCiAJfSBzbjsKIAl1bnNpZ25lZCBsb25nIHRzX2ppZmZpZXM7IC8qIHRpbWVzdGFtcCB3aGVuIHJzdmQgcGcgd2FzIHNldHVwIGJ5IFhQQyAqLwogCXU2NCBwYWQyWzEwXTsJCS8qIGFsaWduIHRvIGxhc3QgdTY0IGluIDJuZCA2NC1ieXRlIGNhY2hlbGluZSAqLwpAQCAtMTg5LDcgKzE5MSw5IEBACiAJaW50IGlycTsJCS8qIGlycSByYWlzZWQgd2hlbiBtZXNzYWdlIGlzIHJlY2VpdmVkIGluIG1xICovCiAJaW50IG1tcl9ibGFkZTsJCS8qIGJsYWRlIHdoZXJlIHdhdGNobGlzdCB3YXMgYWxsb2NhdGVkIGZyb20gKi8KIAl1bnNpZ25lZCBsb25nIG1tcl9vZmZzZXQ7IC8qIG9mZnNldCBvZiBpcnEgbW1yIGxvY2F0ZWQgb24gbW1yX2JsYWRlICovCisJdW5zaWduZWQgbG9uZyBtbXJfdmFsdWU7IC8qIHZhbHVlIG9mIGlycSBtbXIgbG9jYXRlZCBvbiBtbXJfYmxhZGUgKi8KIAlpbnQgd2F0Y2hsaXN0X251bTsJLyogbnVtYmVyIG9mIHdhdGNobGlzdCBhbGxvY2F0ZCBieSBCSU9TICovCisJdm9pZCAqZ3J1X21xX2Rlc2M7CS8qIG9wYXF1ZSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgR1JVIGRyaXZlciAqLwogfTsKIAogLyoKQEAgLTE5Nyw2ICsyMDEsNyBAQAogICogaGVhcnRiZWF0LCBwYXJ0aXRpb24gYWN0aXZlIHN0YXRlLCBhbmQgY2hhbm5lbCBzdGF0ZS4gVGhpcyBpcyBVViBvbmx5LgogICovCiBzdHJ1Y3QgeHBjX2FjdGl2YXRlX21xX21zZ2hkcl91diB7CisJdW5zaWduZWQgaW50IGdydV9tc2dfaGRyOyAvKiBGT1IgR1JVIElOVEVSTkFMIFVTRSBPTkxZICovCiAJc2hvcnQgcGFydGlkOwkJLyogc2VuZGVyJ3MgcGFydGlkICovCiAJdTggYWN0X3N0YXRlOwkJLyogc2VuZGVyJ3MgYWN0X3N0YXRlIGF0IHRpbWUgbXNnIHNlbnQgKi8KIAl1OCB0eXBlOwkJLyogbWVzc2FnZSdzIHR5cGUgKi8KQEAgLTIzMiw3ICsyMzcsNyBAQAogc3RydWN0IHhwY19hY3RpdmF0ZV9tcV9tc2dfYWN0aXZhdGVfcmVxX3V2IHsKIAlzdHJ1Y3QgeHBjX2FjdGl2YXRlX21xX21zZ2hkcl91diBoZHI7CiAJdW5zaWduZWQgbG9uZyBycF9ncGE7Ci0JdW5zaWduZWQgbG9uZyBhY3RpdmF0ZV9tcV9ncGE7CisJdW5zaWduZWQgbG9uZyBhY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGE7CiB9OwogCiBzdHJ1Y3QgeHBjX2FjdGl2YXRlX21xX21zZ19kZWFjdGl2YXRlX3JlcV91diB7CkBAIC0yNjMsNyArMjY4LDcgQEAKIAlzaG9ydCBjaF9udW1iZXI7CiAJc2hvcnQgcmVtb3RlX25lbnRyaWVzOwkvKiA/Pz8gSXMgdGhpcyBuZWVkZWQ/IFdoYXQgaXM/ICovCiAJc2hvcnQgbG9jYWxfbmVudHJpZXM7CS8qID8/PyBJcyB0aGlzIG5lZWRlZD8gV2hhdCBpcz8gKi8KLQl1bnNpZ25lZCBsb25nIGxvY2FsX25vdGlmeV9tcV9ncGE7CisJdW5zaWduZWQgbG9uZyBub3RpZnlfZ3J1X21xX2Rlc2NfZ3BhOwogfTsKIAogLyoKQEAgLTUxMCw4ICs1MTUsOCBAQAogfTsKIAogc3RydWN0IHhwY19jaGFubmVsX3V2IHsKLQl1bnNpZ25lZCBsb25nIHJlbW90ZV9ub3RpZnlfbXFfZ3BhOwkvKiBncnUgcGh5cyBhZGRyZXNzIG9mIHJlbW90ZSAqLwotCQkJCQkJLyogcGFydGl0aW9uJ3Mgbm90aWZ5IG1xICovCisJdm9pZCAqY2FjaGVkX25vdGlmeV9ncnVfbXFfZGVzYzsgLyogcmVtb3RlIHBhcnRpdGlvbidzIG5vdGlmeSBtcSdzICovCisJCQkJCSAvKiBncnUgbXEgZGVzY3JpcHRvciAqLwogCiAJc3RydWN0IHhwY19zZW5kX21zZ19zbG90X3V2ICpzZW5kX21zZ19zbG90czsKIAl2b2lkICpyZWN2X21zZ19zbG90czsJLyogZWFjaCBzbG90IHdpbGwgaG9sZCBhIHhwY19ub3RpZnlfbXFfbXNnX3V2ICovCkBAIC02ODIsOCArNjg3LDEyIEBACiB9OwogCiBzdHJ1Y3QgeHBjX3BhcnRpdGlvbl91diB7Ci0JdW5zaWduZWQgbG9uZyByZW1vdGVfYWN0aXZhdGVfbXFfZ3BhOwkvKiBncnUgcGh5cyBhZGRyZXNzIG9mIHJlbW90ZSAqLwotCQkJCQkJLyogcGFydGl0aW9uJ3MgYWN0aXZhdGUgbXEgKi8KKwl1bnNpZ25lZCBsb25nIGFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYTsJLyogcGh5cyBhZGRyIG9mIHBhcml0aXRvbidzICovCisJCQkJCQkvKiBhY3RpdmF0ZSBtcSdzIGdydSBtcSAqLworCQkJCQkJLyogZGVzY3JpcHRvciAqLworCXZvaWQgKmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYzsgLyogY2FjaGVkIGNvcHkgb2YgcGFydGl0aW9uJ3MgKi8KKwkJCQkJICAgLyogYWN0aXZhdGUgbXEncyBncnUgbXEgZGVzY3JpcHRvciAqLworCXN0cnVjdCBtdXRleCBjYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXg7CiAJc3BpbmxvY2tfdCBmbGFnc19sb2NrOwkvKiBwcm90ZWN0IHVwZGF0aW5nIG9mIGZsYWdzICovCiAJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBnZW5lcmFsIGZsYWdzICovCiAJdTggcmVtb3RlX2FjdF9zdGF0ZTsJLyogcmVtb3RlIHBhcnRpdGlvbidzIGFjdF9zdGF0ZSAqLwpAQCAtNjk0LDggKzcwMyw5IEBACiAKIC8qIHN0cnVjdCB4cGNfcGFydGl0aW9uX3V2IGZsYWdzICovCiAKLSNkZWZpbmUgWFBDX1BfSEVBUlRCRUFUX09GRkxJTkVfVVYJMHgwMDAwMDAwMQotI2RlZmluZSBYUENfUF9FTkdBR0VEX1VWCQkweDAwMDAwMDAyCisjZGVmaW5lIFhQQ19QX0hFQVJUQkVBVF9PRkZMSU5FX1VWCQkweDAwMDAwMDAxCisjZGVmaW5lIFhQQ19QX0VOR0FHRURfVVYJCQkweDAwMDAwMDAyCisjZGVmaW5lIFhQQ19QX0NBQ0hFRF9BQ1RJVkFURV9HUlVfTVFfREVTQ19VVgkweDAwMDAwMDA0CiAKIC8qIHN0cnVjdCB4cGNfcGFydGl0aW9uX3V2IGFjdF9zdGF0ZSBjaGFuZ2UgcmVxdWVzdHMgKi8KIApAQCAtODA0LDYgKzgxNCw3IEBACiBleHRlcm4gdm9pZCB4cGNfY3JlYXRlX2t0aHJlYWRzKHN0cnVjdCB4cGNfY2hhbm5lbCAqLCBpbnQsIGludCk7CiBleHRlcm4gdm9pZCB4cGNfZGlzY29ubmVjdF93YWl0KGludCk7CiBleHRlcm4gaW50ICgqeHBjX3NldHVwX3BhcnRpdGlvbnNfc24pICh2b2lkKTsKK2V4dGVybiB2b2lkICgqeHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc24pICh2b2lkKTsKIGV4dGVybiBlbnVtIHhwX3JldHZhbCAoKnhwY19nZXRfcGFydGl0aW9uX3JzdmRfcGFnZV9wYSkgKHZvaWQgKiwgdTY0ICosCiAJCQkJCQkJIHVuc2lnbmVkIGxvbmcgKiwKIAkJCQkJCQkgc2l6ZV90ICopOwpAQCAtODQ2LDggKzg1Nyw4IEBACiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gdm9pZCAoKnhwY19zZW5kX2NoY3RsX29wZW5yZXBseSkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqLCB1bnNpZ25lZCBsb25nICopOwogCi1leHRlcm4gdm9pZCAoKnhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYSkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gZW51bSB4cF9yZXR2YWwgKCp4cGNfc2F2ZV9yZW1vdGVfbXNncXVldWVfcGEpIChzdHJ1Y3QgeHBjX2NoYW5uZWwgKiwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcpOwogCiBleHRlcm4gZW51bSB4cF9yZXR2YWwgKCp4cGNfc2VuZF9wYXlsb2FkKSAoc3RydWN0IHhwY19jaGFubmVsICosIHUzMiwgdm9pZCAqLAogCQkJCQkgICB1MTYsIHU4LCB4cGNfbm90aWZ5X2Z1bmMsIHZvaWQgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19jaGFubmVsLmMgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19jaGFubmVsLmMKaW5kZXggNDVmZDY1My4uOTlhMjUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfY2hhbm5lbC5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX2NoYW5uZWwuYwpAQCAtMTgzLDYgKzE4Myw3IEBACiAJICAgICZwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3NbY2hfbnVtYmVyXTsKIAlzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoID0gJnBhcnQtPmNoYW5uZWxzW2NoX251bWJlcl07CiAJZW51bSB4cF9yZXR2YWwgcmVhc29uOworCWVudW0geHBfcmV0dmFsIHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKIApAQCAtMzk5LDggKzQwMCwxMyBAQAogCQlEQlVHX09OKGFyZ3MtPmxvY2FsX25lbnRyaWVzID09IDApOwogCQlEQlVHX09OKGFyZ3MtPnJlbW90ZV9uZW50cmllcyA9PSAwKTsKIAorCQlyZXQgPSB4cGNfc2F2ZV9yZW1vdGVfbXNncXVldWVfcGEoY2gsIGFyZ3MtPmxvY2FsX21zZ3F1ZXVlX3BhKTsKKwkJaWYgKHJldCAhPSB4cFN1Y2Nlc3MpIHsKKwkJCVhQQ19ESVNDT05ORUNUX0NIQU5ORUwoY2gsIHJldCwgJmlycV9mbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQogCQljaC0+ZmxhZ3MgfD0gWFBDX0NfUk9QRU5SRVBMWTsKLQkJeHBjX3NhdmVfcmVtb3RlX21zZ3F1ZXVlX3BhKGNoLCBhcmdzLT5sb2NhbF9tc2dxdWV1ZV9wYSk7CiAKIAkJaWYgKGFyZ3MtPmxvY2FsX25lbnRyaWVzIDwgY2gtPnJlbW90ZV9uZW50cmllcykgewogCQkJZGV2X2RiZyh4cGNfY2hhbiwgIlhQQ19DSENUTF9PUEVOUkVQTFk6IG5ldyAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19tYWluLmMgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19tYWluLmMKaW5kZXggNjU3NjE3MC4uMWFiOWZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYwpAQCAtMTcxLDYgKzE3MSw3IEBACiB9OwogCiBpbnQgKCp4cGNfc2V0dXBfcGFydGl0aW9uc19zbikgKHZvaWQpOwordm9pZCAoKnhwY190ZWFyZG93bl9wYXJ0aXRpb25zX3NuKSAodm9pZCk7CiBlbnVtIHhwX3JldHZhbCAoKnhwY19nZXRfcGFydGl0aW9uX3JzdmRfcGFnZV9wYSkgKHZvaWQgKmJ1ZiwgdTY0ICpjb29raWUsCiAJCQkJCQkgIHVuc2lnbmVkIGxvbmcgKnJwX3BhLAogCQkJCQkJICBzaXplX3QgKmxlbik7CkBAIC0yMTcsOCArMjE4LDggQEAKIHZvaWQgKCp4cGNfc2VuZF9jaGN0bF9vcGVucmVwbHkpIChzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLAogCQkJCSAgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKTsKIAotdm9pZCAoKnhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYSkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG1zZ3F1ZXVlX3BhKTsKK2VudW0geHBfcmV0dmFsICgqeHBjX3NhdmVfcmVtb3RlX21zZ3F1ZXVlX3BhKSAoc3RydWN0IHhwY19jaGFubmVsICpjaCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbXNncXVldWVfcGEpOwogCiBlbnVtIHhwX3JldHZhbCAoKnhwY19zZW5kX3BheWxvYWQpIChzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLCB1MzIgZmxhZ3MsCiAJCQkJICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX3NpemUsCkBAIC05OTgsNiArOTk5LDcgQEAKIHN0YXRpYyB2b2lkCiB4cGNfdGVhcmRvd25fcGFydGl0aW9ucyh2b2lkKQogeworCXhwY190ZWFyZG93bl9wYXJ0aXRpb25zX3NuKCk7CiAJa2ZyZWUoeHBjX3BhcnRpdGlvbnMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19zbjIuYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3NuMi5jCmluZGV4IDJlOTc1NzYuLmVhYWE5NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3NuMi5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3NuMi5jCkBAIC02Niw2ICs2NiwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAoreHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc25fc24yKHZvaWQpCit7CisJLyogbm90aGluZyBuZWVkcyB0byBiZSBkb25lICovCit9CisKIC8qIFNIX0lQSV9BQ0NFU1Mgc2h1YiByZWdpc3RlciB2YWx1ZSBvbiBzdGFydHVwICovCiBzdGF0aWMgdTY0IHhwY19zaDFfSVBJX2FjY2Vzc19zbjI7CiBzdGF0aWMgdTY0IHhwY19zaDJfSVBJX2FjY2VzczBfc24yOwpAQCAtNDM2LDExICs0NDIsMTIgQEAKIAlYUENfU0VORF9MT0NBTF9OT1RJRllfSVJRX1NOMihjaCwgWFBDX0NIQ1RMX01TR1JFUVVFU1QpOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGVudW0geHBfcmV0dmFsCiB4cGNfc2F2ZV9yZW1vdGVfbXNncXVldWVfcGFfc24yKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsCiAJCQkJdW5zaWduZWQgbG9uZyBtc2dxdWV1ZV9wYSkKIHsKIAljaC0+c24uc24yLnJlbW90ZV9tc2dxdWV1ZV9wYSA9IG1zZ3F1ZXVlX3BhOworCXJldHVybiB4cFN1Y2Nlc3M7CiB9CiAKIC8qCkBAIC0xNzM3LDIwICsxNzQ0LDIwIEBACiB7CiAJc3RydWN0IHhwY19jaGFubmVsX3NuMiAqY2hfc24yID0gJmNoLT5zbi5zbjI7CiAJc3RydWN0IHhwY19tc2dfc24yICptc2c7Ci0JczY0IHB1dDsKKwlzNjQgcHV0LCByZW1vdGVfbmVudHJpZXMgPSBjaC0+cmVtb3RlX25lbnRyaWVzOwogCiAJLyogZmxhZ3MgYXJlIHplcm9lZCB3aGVuIHRoZSBidWZmZXIgaXMgYWxsb2NhdGVkICovCi0JaWYgKGNoX3NuMi0+cmVtb3RlX0dQLnB1dCA8IGNoLT5yZW1vdGVfbmVudHJpZXMpCisJaWYgKGNoX3NuMi0+cmVtb3RlX0dQLnB1dCA8IHJlbW90ZV9uZW50cmllcykKIAkJcmV0dXJuOwogCi0JcHV0ID0gbWF4KGNoX3NuMi0+d19yZW1vdGVfR1AucHV0LCBjaC0+cmVtb3RlX25lbnRyaWVzKTsKKwlwdXQgPSBtYXgoY2hfc24yLT53X3JlbW90ZV9HUC5wdXQsIHJlbW90ZV9uZW50cmllcyk7CiAJZG8gewogCQltc2cgPSAoc3RydWN0IHhwY19tc2dfc24yICopKCh1NjQpY2hfc24yLT5yZW1vdGVfbXNncXVldWUgKwotCQkJCQkgICAgIChwdXQgJSBjaC0+cmVtb3RlX25lbnRyaWVzKSAqCisJCQkJCSAgICAgKHB1dCAlIHJlbW90ZV9uZW50cmllcykgKgogCQkJCQkgICAgIGNoLT5lbnRyeV9zaXplKTsKIAkJREJVR19PTighKG1zZy0+ZmxhZ3MgJiBYUENfTV9TTjJfUkVBRFkpKTsKIAkJREJVR19PTighKG1zZy0+ZmxhZ3MgJiBYUENfTV9TTjJfRE9ORSkpOwotCQlEQlVHX09OKG1zZy0+bnVtYmVyICE9IHB1dCAtIGNoLT5yZW1vdGVfbmVudHJpZXMpOworCQlEQlVHX09OKG1zZy0+bnVtYmVyICE9IHB1dCAtIHJlbW90ZV9uZW50cmllcyk7CiAJCW1zZy0+ZmxhZ3MgPSAwOwogCX0gd2hpbGUgKCsrcHV0IDwgY2hfc24yLT5yZW1vdGVfR1AucHV0KTsKIH0KQEAgLTIzMTUsNiArMjMyMiw3IEBACiAJc2l6ZV90IGJ1Zl9zaXplOwogCiAJeHBjX3NldHVwX3BhcnRpdGlvbnNfc24gPSB4cGNfc2V0dXBfcGFydGl0aW9uc19zbl9zbjI7CisJeHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc24gPSB4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbl9zbjI7CiAJeHBjX2dldF9wYXJ0aXRpb25fcnN2ZF9wYWdlX3BhID0geHBjX2dldF9wYXJ0aXRpb25fcnN2ZF9wYWdlX3BhX3NuMjsKIAl4cGNfc2V0dXBfcnN2ZF9wYWdlX3NuID0geHBjX3NldHVwX3JzdmRfcGFnZV9zbl9zbjI7CiAJeHBjX2luY3JlbWVudF9oZWFydGJlYXQgPSB4cGNfaW5jcmVtZW50X2hlYXJ0YmVhdF9zbjI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYwppbmRleCAyOWMwNTAyLi5mN2ZmZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMKQEAgLTMxLDYgKzMxLDIxIEBACiAjaW5jbHVkZSAiLi4vc2dpLWdydS9ncnVrc2VydmljZXMuaCIKICNpbmNsdWRlICJ4cGMuaCIKIAorI2lmIGRlZmluZWQgQ09ORklHX0lBNjRfR0VORVJJQyB8fCBkZWZpbmVkIENPTkZJR19JQTY0X1NHSV9VVgorc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgeworCV9fdTY0CXZlY3RvcgkJOiAgOCwKKwkJZGVsaXZlcnlfbW9kZQk6ICAzLAorCQlkZXN0X21vZGUJOiAgMSwKKwkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCXBvbGFyaXR5CTogIDEsCisJCV9fcmVzZXJ2ZWRfMQk6ICAxLAorCQl0cmlnZ2VyCQk6ICAxLAorCQltYXNrCQk6ICAxLAorCQlfX3Jlc2VydmVkXzIJOiAxNSwKKwkJZGVzdAkJOiAzMjsKK307CisjZW5kaWYKKwogc3RhdGljIGF0b21pYzY0X3QgeHBjX2hlYXJ0YmVhdF91djsKIHN0YXRpYyBERUNMQVJFX0JJVE1BUCh4cGNfaGVhcnRiZWF0aW5nX3RvX21hc2tfdXYsIFhQX01BWF9OUEFSVElUSU9OU19VVik7CiAKQEAgLTU2LDI2ICs3MSw1MiBAQAogCWZvciAocGFydGlkID0gMDsgcGFydGlkIDwgWFBfTUFYX05QQVJUSVRJT05TX1VWOyBwYXJ0aWQrKykgewogCQlwYXJ0X3V2ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF0uc24udXY7CiAKKwkJbXV0ZXhfaW5pdCgmcGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjX211dGV4KTsKIAkJc3Bpbl9sb2NrX2luaXQoJnBhcnRfdXYtPmZsYWdzX2xvY2spOwogCQlwYXJ0X3V2LT5yZW1vdGVfYWN0X3N0YXRlID0gWFBDX1BfQVNfSU5BQ1RJVkU7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAoreHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc25fdXYodm9pZCkKK3sKKwlzaG9ydCBwYXJ0aWQ7CisJc3RydWN0IHhwY19wYXJ0aXRpb25fdXYgKnBhcnRfdXY7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlmb3IgKHBhcnRpZCA9IDA7IHBhcnRpZCA8IFhQX01BWF9OUEFSVElUSU9OU19VVjsgcGFydGlkKyspIHsKKwkJcGFydF91diA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdLnNuLnV2OworCisJCWlmIChwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2MgIT0gTlVMTCkgeworCQkJbXV0ZXhfbG9jaygmcGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjX211dGV4KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwYXJ0X3V2LT5mbGFnc19sb2NrLCBpcnFfZmxhZ3MpOworCQkJcGFydF91di0+ZmxhZ3MgJj0gflhQQ19QX0NBQ0hFRF9BQ1RJVkFURV9HUlVfTVFfREVTQ19VVjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhcnRfdXYtPmZsYWdzX2xvY2ssIGlycV9mbGFncyk7CisJCQlrZnJlZShwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2MpOworCQkJcGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjID0gTlVMTDsKKwkJCW11dGV4X3VubG9jaygmcGFydF91di0+CisJCQkJICAgICBjYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50CiB4cGNfZ2V0X2dydV9tcV9pcnFfdXYoc3RydWN0IHhwY19ncnVfbXFfdXYgKm1xLCBpbnQgY3B1LCBjaGFyICppcnFfbmFtZSkKIHsKKwlpbnQgbW1yX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUobXEtPm1tcl9ibGFkZSk7CisKICNpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKIAltcS0+aXJxID0gdXZfc2V0dXBfaXJxKGlycV9uYW1lLCBjcHUsIG1xLT5tbXJfYmxhZGUsIG1xLT5tbXJfb2Zmc2V0KTsKIAlpZiAobXEtPmlycSA8IDApIHsKIAkJZGV2X2Vycih4cGNfcGFydCwgInV2X3NldHVwX2lycSgpIHJldHVybmVkIGVycm9yPSVkXG4iLAotCQkJbXEtPmlycSk7CisJCQktbXEtPmlycSk7CisJCXJldHVybiBtcS0+aXJxOwogCX0KIAotI2VsaWYgZGVmaW5lZCBDT05GSUdfSUE2NF9HRU5FUklDIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCi0JaW50IG1tcl9wbm9kZTsKLQl1bnNpZ25lZCBsb25nIG1tcl92YWx1ZTsKKwltcS0+bW1yX3ZhbHVlID0gdXZfcmVhZF9nbG9iYWxfbW1yNjQobW1yX3Bub2RlLCBtcS0+bW1yX29mZnNldCk7CiAKKyNlbGlmIGRlZmluZWQgQ09ORklHX0lBNjRfR0VORVJJQyB8fCBkZWZpbmVkIENPTkZJR19JQTY0X1NHSV9VVgogCWlmIChzdHJjbXAoaXJxX25hbWUsIFhQQ19BQ1RJVkFURV9JUlFfTkFNRSkgPT0gMCkKIAkJbXEtPmlycSA9IFNHSV9YUENfQUNUSVZBVEU7CiAJZWxzZSBpZiAoc3RyY21wKGlycV9uYW1lLCBYUENfTk9USUZZX0lSUV9OQU1FKSA9PSAwKQpAQCAtODMsMTAgKzEyNCw4IEBACiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1xLT5tbXJfYmxhZGUpOwotCW1tcl92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKWNwdV9waHlzaWNhbF9pZChjcHUpIDw8IDMyIHwgbXEtPmlycTsKLQotCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1xLT5tbXJfb2Zmc2V0LCBtbXJfdmFsdWUpOworCW1xLT5tbXJfdmFsdWUgPSAodW5zaWduZWQgbG9uZyljcHVfcGh5c2ljYWxfaWQoY3B1KSA8PCAzMiB8IG1xLT5pcnE7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbXEtPm1tcl9vZmZzZXQsIG1xLT5tbXJfdmFsdWUpOwogI2Vsc2UKIAkjZXJyb3Igbm90IGEgc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpAQCAtMTI3LDcgKzE2Niw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogI2VsaWYgZGVmaW5lZCBDT05GSUdfSUE2NF9HRU5FUklDIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCi0JcmV0ID0gc25fbXFfd2F0Y2hsaXN0X2FsbG9jKG1xLT5tbXJfYmxhZGUsIHV2X2dwYShtcS0+YWRkcmVzcyksCisJcmV0ID0gc25fbXFfd2F0Y2hsaXN0X2FsbG9jKG1xLT5tbXJfYmxhZGUsICh2b2lkICopdXZfZ3BhKG1xLT5hZGRyZXNzKSwKIAkJCQkgICAgbXEtPm9yZGVyLCAmbXEtPm1tcl9vZmZzZXQpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoeHBjX3BhcnQsICJzbl9tcV93YXRjaGxpc3RfYWxsb2MoKSBmYWlsZWQsIHJldD0lZFxuIiwKQEAgLTE2OCwxMiArMjA3LDIyIEBACiAJaW50IHBnX29yZGVyOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCB4cGNfZ3J1X21xX3V2ICptcTsKKwlzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqbW1yX3ZhbHVlOwogCiAJbXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgeHBjX2dydV9tcV91diksIEdGUF9LRVJORUwpOwogCWlmIChtcSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoeHBjX3BhcnQsICJ4cGNfY3JlYXRlX2dydV9tcV91digpIGZhaWxlZCB0byBrbWFsbG9jKCkgIgogCQkJImEgeHBjX2dydV9tcV91diBzdHJ1Y3R1cmVcbiIpOwogCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF8wOworCX0KKworCW1xLT5ncnVfbXFfZGVzYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmIChtcS0+Z3J1X21xX2Rlc2MgPT0gTlVMTCkgeworCQlkZXZfZXJyKHhwY19wYXJ0LCAieHBjX2NyZWF0ZV9ncnVfbXFfdXYoKSBmYWlsZWQgdG8ga21hbGxvYygpICIKKwkJCSJhIGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2Mgc3RydWN0dXJlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfMTsKIAl9CiAKQEAgLTE5NCwxNCArMjQzLDYgQEAKIAl9CiAJbXEtPmFkZHJlc3MgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAKLQlyZXQgPSBncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUobXEtPmFkZHJlc3MsIG1xX3NpemUpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKHhwY19wYXJ0LCAiZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKCkgcmV0dXJuZWQgIgotCQkJImVycm9yPSVkXG4iLCByZXQpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF8zOwotCX0KLQogCS8qIGVuYWJsZSBnZW5lcmF0aW9uIG9mIGlycSB3aGVuIEdSVSBtcSBvcGVyYXRpb24gb2NjdXJzIHRvIHRoaXMgbXEgKi8KIAlyZXQgPSB4cGNfZ3J1X21xX3dhdGNobGlzdF9hbGxvY191dihtcSk7CiAJaWYgKHJldCAhPSAwKQpAQCAtMjE0LDEwICsyNTUsMjAgQEAKIAlyZXQgPSByZXF1ZXN0X2lycShtcS0+aXJxLCBpcnFfaGFuZGxlciwgMCwgaXJxX25hbWUsIE5VTEwpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKHhwY19wYXJ0LCAicmVxdWVzdF9pcnEoaXJxPSVkKSByZXR1cm5lZCBlcnJvcj0lZFxuIiwKLQkJCW1xLT5pcnEsIHJldCk7CisJCQltcS0+aXJxLCAtcmV0KTsKIAkJZ290byBvdXRfNTsKIAl9CiAKKwltbXJfdmFsdWUgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbXEtPm1tcl92YWx1ZTsKKwlyZXQgPSBncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUobXEtPmdydV9tcV9kZXNjLCBtcS0+YWRkcmVzcywgbXFfc2l6ZSwKKwkJCQkgICAgICAgbmlkLCBtbXJfdmFsdWUtPnZlY3RvciwgbW1yX3ZhbHVlLT5kZXN0KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih4cGNfcGFydCwgImdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZSgpIHJldHVybmVkICIKKwkJCSJlcnJvcj0lZFxuIiwgcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfNjsKKwl9CisKIAkvKiBhbGxvdyBvdGhlciBwYXJ0aXRpb25zIHRvIGFjY2VzcyB0aGlzIEdSVSBtcSAqLwogCXhwX3JldCA9IHhwX2V4cGFuZF9tZW1wcm90ZWN0KHhwX3BhKG1xLT5hZGRyZXNzKSwgbXFfc2l6ZSk7CiAJaWYgKHhwX3JldCAhPSB4cFN1Y2Nlc3MpIHsKQEAgLTIzNyw4ICsyODgsMTAgQEAKIG91dF8zOgogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpbXEtPmFkZHJlc3MsIHBnX29yZGVyKTsKIG91dF8yOgotCWtmcmVlKG1xKTsKKwlrZnJlZShtcS0+Z3J1X21xX2Rlc2MpOwogb3V0XzE6CisJa2ZyZWUobXEpOworb3V0XzA6CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIApAQCAtMjY4LDEzICszMjEsMTQgQEAKIH0KIAogc3RhdGljIGVudW0geHBfcmV0dmFsCi14cGNfc2VuZF9ncnVfbXNnKHVuc2lnbmVkIGxvbmcgbXFfZ3BhLCB2b2lkICptc2csIHNpemVfdCBtc2dfc2l6ZSkKK3hwY19zZW5kX2dydV9tc2coc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKmdydV9tcV9kZXNjLCB2b2lkICptc2csCisJCSBzaXplX3QgbXNnX3NpemUpCiB7CiAJZW51bSB4cF9yZXR2YWwgeHBfcmV0OwogCWludCByZXQ7CiAKIAl3aGlsZSAoMSkgewotCQlyZXQgPSBncnVfc2VuZF9tZXNzYWdlX2dwYShtcV9ncGEsIG1zZywgbXNnX3NpemUpOworCQlyZXQgPSBncnVfc2VuZF9tZXNzYWdlX2dwYShncnVfbXFfZGVzYywgbXNnLCBtc2dfc2l6ZSk7CiAJCWlmIChyZXQgPT0gTVFFX09LKSB7CiAJCQl4cF9yZXQgPSB4cFN1Y2Nlc3M7CiAJCQlicmVhazsKQEAgLTQyMSw3ICs0NzUsMTUgQEAKIAkJcGFydF91di0+YWN0X3N0YXRlX3JlcSA9IFhQQ19QX0FTUl9BQ1RJVkFURV9VVjsKIAkJcGFydC0+cmVtb3RlX3JwX3BhID0gbXNnLT5ycF9ncGE7IC8qICEhISBfcGEgaXMgX2dwYSAqLwogCQlwYXJ0LT5yZW1vdGVfcnBfdHNfamlmZmllcyA9IG1zZ19oZHItPnJwX3RzX2ppZmZpZXM7Ci0JCXBhcnRfdXYtPnJlbW90ZV9hY3RpdmF0ZV9tcV9ncGEgPSBtc2ctPmFjdGl2YXRlX21xX2dwYTsKKworCQlpZiAobXNnLT5hY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGEgIT0KKwkJICAgIHBhcnRfdXYtPmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBhcnRfdXYtPmZsYWdzX2xvY2ssIGlycV9mbGFncyk7CisJCQlwYXJ0X3V2LT5mbGFncyAmPSB+WFBDX1BfQ0FDSEVEX0FDVElWQVRFX0dSVV9NUV9ERVNDX1VWOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydF91di0+ZmxhZ3NfbG9jaywgaXJxX2ZsYWdzKTsKKwkJCXBhcnRfdXYtPmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSA9CisJCQkgICAgbXNnLT5hY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGE7CisJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeHBjX2FjdGl2YXRlX0lSUV9yY3ZkX2xvY2ssIGlycV9mbGFncyk7CiAKIAkJKCp3YWtldXBfaGJfY2hlY2tlcikrKzsKQEAgLTQ5OCw3ICs1NjAsNyBAQAogCQlhcmdzID0gJnBhcnQtPnJlbW90ZV9vcGVuY2xvc2VfYXJnc1ttc2ctPmNoX251bWJlcl07CiAJCWFyZ3MtPnJlbW90ZV9uZW50cmllcyA9IG1zZy0+cmVtb3RlX25lbnRyaWVzOwogCQlhcmdzLT5sb2NhbF9uZW50cmllcyA9IG1zZy0+bG9jYWxfbmVudHJpZXM7Ci0JCWFyZ3MtPmxvY2FsX21zZ3F1ZXVlX3BhID0gbXNnLT5sb2NhbF9ub3RpZnlfbXFfZ3BhOworCQlhcmdzLT5sb2NhbF9tc2dxdWV1ZV9wYSA9IG1zZy0+bm90aWZ5X2dydV9tcV9kZXNjX2dwYTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGFydC0+Y2hjdGxfbG9jaywgaXJxX2ZsYWdzKTsKIAkJcGFydC0+Y2hjdGwuZmxhZ3NbbXNnLT5jaF9udW1iZXJdIHw9IFhQQ19DSENUTF9PUEVOUkVQTFk7CkBAIC01NTgsOSArNjIwLDEwIEBACiAJc2hvcnQgcGFydGlkOwogCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0OwogCWludCB3YWtldXBfaGJfY2hlY2tlciA9IDA7CisJaW50IHBhcnRfcmVmZXJlbmNlZDsKIAogCXdoaWxlICgxKSB7Ci0JCW1zZ19oZHIgPSBncnVfZ2V0X25leHRfbWVzc2FnZSh4cGNfYWN0aXZhdGVfbXFfdXYtPmFkZHJlc3MpOworCQltc2dfaGRyID0gZ3J1X2dldF9uZXh0X21lc3NhZ2UoeHBjX2FjdGl2YXRlX21xX3V2LT5ncnVfbXFfZGVzYyk7CiAJCWlmIChtc2dfaGRyID09IE5VTEwpCiAJCQlicmVhazsKIApAQCAtNTcxLDE0ICs2MzQsMTUgQEAKIAkJCQlwYXJ0aWQpOwogCQl9IGVsc2UgewogCQkJcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOwotCQkJaWYgKHhwY19wYXJ0X3JlZihwYXJ0KSkgewotCQkJCXhwY19oYW5kbGVfYWN0aXZhdGVfbXFfbXNnX3V2KHBhcnQsIG1zZ19oZHIsCi0JCQkJCQkJICAgICZ3YWtldXBfaGJfY2hlY2tlcik7CisKKwkJCXBhcnRfcmVmZXJlbmNlZCA9IHhwY19wYXJ0X3JlZihwYXJ0KTsKKwkJCXhwY19oYW5kbGVfYWN0aXZhdGVfbXFfbXNnX3V2KHBhcnQsIG1zZ19oZHIsCisJCQkJCQkgICAgICAmd2FrZXVwX2hiX2NoZWNrZXIpOworCQkJaWYgKHBhcnRfcmVmZXJlbmNlZCkKIAkJCQl4cGNfcGFydF9kZXJlZihwYXJ0KTsKLQkJCX0KIAkJfQogCi0JCWdydV9mcmVlX21lc3NhZ2UoeHBjX2FjdGl2YXRlX21xX3V2LT5hZGRyZXNzLCBtc2dfaGRyKTsKKwkJZ3J1X2ZyZWVfbWVzc2FnZSh4cGNfYWN0aXZhdGVfbXFfdXYtPmdydV9tcV9kZXNjLCBtc2dfaGRyKTsKIAl9CiAKIAlpZiAod2FrZXVwX2hiX2NoZWNrZXIpCkBAIC01ODgsMjEgKzY1Miw3MyBAQAogfQogCiBzdGF0aWMgZW51bSB4cF9yZXR2YWwKK3hwY19jYWNoZV9yZW1vdGVfZ3J1X21xX2Rlc2NfdXYoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKmdydV9tcV9kZXNjLAorCQkJCXVuc2lnbmVkIGxvbmcgZ3J1X21xX2Rlc2NfZ3BhKQoreworCWVudW0geHBfcmV0dmFsIHJldDsKKworCXJldCA9IHhwX3JlbW90ZV9tZW1jcHkodXZfZ3BhKGdydV9tcV9kZXNjKSwgZ3J1X21xX2Rlc2NfZ3BhLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYykpOworCWlmIChyZXQgPT0geHBTdWNjZXNzKQorCQlncnVfbXFfZGVzYy0+bXEgPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVudW0geHBfcmV0dmFsCiB4cGNfc2VuZF9hY3RpdmF0ZV9JUlFfdXYoc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQsIHZvaWQgKm1zZywgc2l6ZV90IG1zZ19zaXplLAogCQkJIGludCBtc2dfdHlwZSkKIHsKIAlzdHJ1Y3QgeHBjX2FjdGl2YXRlX21xX21zZ2hkcl91diAqbXNnX2hkciA9IG1zZzsKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbl91diAqcGFydF91diA9ICZwYXJ0LT5zbi51djsKKwlzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqZ3J1X21xX2Rlc2M7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJZW51bSB4cF9yZXR2YWwgcmV0OwogCiAJREJVR19PTihtc2dfc2l6ZSA+IFhQQ19BQ1RJVkFURV9NU0dfU0laRV9VVik7CiAKIAltc2dfaGRyLT50eXBlID0gbXNnX3R5cGU7Ci0JbXNnX2hkci0+cGFydGlkID0gWFBDX1BBUlRJRChwYXJ0KTsKKwltc2dfaGRyLT5wYXJ0aWQgPSB4cF9wYXJ0aXRpb25faWQ7CiAJbXNnX2hkci0+YWN0X3N0YXRlID0gcGFydC0+YWN0X3N0YXRlOwogCW1zZ19oZHItPnJwX3RzX2ppZmZpZXMgPSB4cGNfcnN2ZF9wYWdlLT50c19qaWZmaWVzOwogCisJbXV0ZXhfbG9jaygmcGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjX211dGV4KTsKK2FnYWluOgorCWlmICghKHBhcnRfdXYtPmZsYWdzICYgWFBDX1BfQ0FDSEVEX0FDVElWQVRFX0dSVV9NUV9ERVNDX1VWKSkgeworCQlncnVfbXFfZGVzYyA9IHBhcnRfdXYtPmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYzsKKwkJaWYgKGdydV9tcV9kZXNjID09IE5VTEwpIHsKKwkJCWdydV9tcV9kZXNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0CisJCQkJCSAgICAgIGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJCWlmIChncnVfbXFfZGVzYyA9PSBOVUxMKSB7CisJCQkJcmV0ID0geHBOb01lbW9yeTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2MgPSBncnVfbXFfZGVzYzsKKwkJfQorCisJCXJldCA9IHhwY19jYWNoZV9yZW1vdGVfZ3J1X21xX2Rlc2NfdXYoZ3J1X21xX2Rlc2MsCisJCQkJCQkgICAgICBwYXJ0X3V2LT4KKwkJCQkJCSAgICAgIGFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSk7CisJCWlmIChyZXQgIT0geHBTdWNjZXNzKQorCQkJZ290byBkb25lOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwYXJ0X3V2LT5mbGFnc19sb2NrLCBpcnFfZmxhZ3MpOworCQlwYXJ0X3V2LT5mbGFncyB8PSBYUENfUF9DQUNIRURfQUNUSVZBVEVfR1JVX01RX0RFU0NfVVY7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhcnRfdXYtPmZsYWdzX2xvY2ssIGlycV9mbGFncyk7CisJfQorCiAJLyogPz8/IElzIGhvbGRpbmcgYSBzcGluX2xvY2sgKGNoLT5sb2NrKSBkdXJpbmcgdGhpcyBjYWxsIGEgYmFkIGlkZWE/ICovCi0JcmV0dXJuIHhwY19zZW5kX2dydV9tc2cocGFydC0+c24udXYucmVtb3RlX2FjdGl2YXRlX21xX2dwYSwgbXNnLAotCQkJCW1zZ19zaXplKTsKKwlyZXQgPSB4cGNfc2VuZF9ncnVfbXNnKHBhcnRfdXYtPmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYywgbXNnLAorCQkJICAgICAgIG1zZ19zaXplKTsKKwlpZiAocmV0ICE9IHhwU3VjY2VzcykgeworCQlzbXBfcm1iKCk7CS8qIGVuc3VyZSBhIGZyZXNoIGNvcHkgb2YgcGFydF91di0+ZmxhZ3MgKi8KKwkJaWYgKCEocGFydF91di0+ZmxhZ3MgJiBYUENfUF9DQUNIRURfQUNUSVZBVEVfR1JVX01RX0RFU0NfVVYpKQorCQkJZ290byBhZ2FpbjsKKwl9Citkb25lOgorCW11dGV4X3VubG9jaygmcGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjX211dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjIwLDcgKzczNiw3IEBACiB4cGNfc2VuZF9hY3RpdmF0ZV9JUlFfY2hfdXYoc3RydWN0IHhwY19jaGFubmVsICpjaCwgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzLAogCQkJIHZvaWQgKm1zZywgc2l6ZV90IG1zZ19zaXplLCBpbnQgbXNnX3R5cGUpCiB7Ci0Jc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbY2gtPm51bWJlcl07CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbY2gtPnBhcnRpZF07CiAJZW51bSB4cF9yZXR2YWwgcmV0OwogCiAJcmV0ID0geHBjX3NlbmRfYWN0aXZhdGVfSVJRX3V2KHBhcnQsIG1zZywgbXNnX3NpemUsIG1zZ190eXBlKTsKQEAgLTY5Miw3ICs4MDgsOCBAQAogc3RhdGljIGludAogeHBjX3NldHVwX3JzdmRfcGFnZV9zbl91dihzdHJ1Y3QgeHBjX3JzdmRfcGFnZSAqcnApCiB7Ci0JcnAtPnNuLmFjdGl2YXRlX21xX2dwYSA9IHV2X2dwYSh4cGNfYWN0aXZhdGVfbXFfdXYtPmFkZHJlc3MpOworCXJwLT5zbi5hY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGEgPQorCSAgICB1dl9ncGEoeHBjX2FjdGl2YXRlX21xX3V2LT5ncnVfbXFfZGVzYyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc4Nyw3ICs5MDQsOCBAQAogCiAJcGFydC0+cmVtb3RlX3JwX3BhID0gcmVtb3RlX3JwX2dwYTsgLyogISEhIF9wYSBoZXJlIGlzIHJlYWxseSBfZ3BhICovCiAJcGFydC0+cmVtb3RlX3JwX3RzX2ppZmZpZXMgPSByZW1vdGVfcnAtPnRzX2ppZmZpZXM7Ci0JcGFydC0+c24udXYucmVtb3RlX2FjdGl2YXRlX21xX2dwYSA9IHJlbW90ZV9ycC0+c24uYWN0aXZhdGVfbXFfZ3BhOworCXBhcnQtPnNuLnV2LmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSA9CisJICAgIHJlbW90ZV9ycC0+c24uYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhOwogCiAJLyoKIAkgKiA/Pz8gSXMgaXQgYSBnb29kIGlkZWEgdG8gbWFrZSB0aGlzIGNvbmRpdGlvbmFsIG9uIHdoYXQgaXMKQEAgLTc5NSw3ICs5MTMsOCBAQAogCSAqLwogCWlmIChwYXJ0LT5zbi51di5yZW1vdGVfYWN0X3N0YXRlID09IFhQQ19QX0FTX0lOQUNUSVZFKSB7CiAJCW1zZy5ycF9ncGEgPSB1dl9ncGEoeHBjX3JzdmRfcGFnZSk7Ci0JCW1zZy5hY3RpdmF0ZV9tcV9ncGEgPSB4cGNfcnN2ZF9wYWdlLT5zbi5hY3RpdmF0ZV9tcV9ncGE7CisJCW1zZy5hY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGEgPQorCQkgICAgeHBjX3JzdmRfcGFnZS0+c24uYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhOwogCQl4cGNfc2VuZF9hY3RpdmF0ZV9JUlFfcGFydF91dihwYXJ0LCAmbXNnLCBzaXplb2YobXNnKSwKIAkJCQkJICAgWFBDX0FDVElWQVRFX01RX01TR19BQ1RJVkFURV9SRVFfVVYpOwogCX0KQEAgLTg1Nyw3ICs5NzYsOCBAQAogCQlpZiAoaGVhZC0+Zmlyc3QgPT0gTlVMTCkKIAkJCWhlYWQtPmxhc3QgPSBOVUxMOwogCX0KLQloZWFkLT5uX2VudHJpZXMrKzsKKwloZWFkLT5uX2VudHJpZXMtLTsKKwlCVUdfT04oaGVhZC0+bl9lbnRyaWVzIDwgMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgaXJxX2ZsYWdzKTsKIAlmaXJzdC0+bmV4dCA9IE5VTEw7CiAJcmV0dXJuIGZpcnN0OwpAQCAtODc2LDggKzk5Niw3IEBACiAJZWxzZQogCQloZWFkLT5maXJzdCA9IGxhc3Q7CiAJaGVhZC0+bGFzdCA9IGxhc3Q7Ci0JaGVhZC0+bl9lbnRyaWVzLS07Ci0JQlVHX09OKGhlYWQtPm5fZW50cmllcyA8IDApOworCWhlYWQtPm5fZW50cmllcysrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhlYWQtPmxvY2ssIGlycV9mbGFncyk7CiB9CiAKQEAgLTEwMzcsNiArMTE1NiwxMiBAQAogCiAJREJVR19PTihjaC0+ZmxhZ3MgJiBYUENfQ19TRVRVUCk7CiAKKwljaF91di0+Y2FjaGVkX25vdGlmeV9ncnVfbXFfZGVzYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdAorCQkJCQkJICAgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyksCisJCQkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoY2hfdXYtPmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MgPT0gTlVMTCkKKwkJcmV0dXJuIHhwTm9NZW1vcnk7CisKIAlyZXQgPSB4cGNfYWxsb2NhdGVfc2VuZF9tc2dfc2xvdF91dihjaCk7CiAJaWYgKHJldCA9PSB4cFN1Y2Nlc3MpIHsKIApAQCAtMTA2MCw3ICsxMTg1LDggQEAKIAogCURCVUdfT04oIXNwaW5faXNfbG9ja2VkKCZjaC0+bG9jaykpOwogCi0JY2hfdXYtPnJlbW90ZV9ub3RpZnlfbXFfZ3BhID0gMDsKKwlrZnJlZShjaF91di0+Y2FjaGVkX25vdGlmeV9ncnVfbXFfZGVzYyk7CisJY2hfdXYtPmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MgPSBOVUxMOwogCiAJaWYgKGNoLT5mbGFncyAmIFhQQ19DX1NFVFVQKSB7CiAJCXhwY19pbml0X2ZpZm9fdXYoJmNoX3V2LT5tc2dfc2xvdF9mcmVlX2xpc3QpOwpAQCAtMTExMSw3ICsxMjM3LDcgQEAKIAltc2cuY2hfbnVtYmVyID0gY2gtPm51bWJlcjsKIAltc2cubG9jYWxfbmVudHJpZXMgPSBjaC0+bG9jYWxfbmVudHJpZXM7CiAJbXNnLnJlbW90ZV9uZW50cmllcyA9IGNoLT5yZW1vdGVfbmVudHJpZXM7Ci0JbXNnLmxvY2FsX25vdGlmeV9tcV9ncGEgPSB1dl9ncGEoeHBjX25vdGlmeV9tcV91dik7CisJbXNnLm5vdGlmeV9ncnVfbXFfZGVzY19ncGEgPSB1dl9ncGEoeHBjX25vdGlmeV9tcV91di0+Z3J1X21xX2Rlc2MpOwogCXhwY19zZW5kX2FjdGl2YXRlX0lSUV9jaF91dihjaCwgaXJxX2ZsYWdzLCAmbXNnLCBzaXplb2YobXNnKSwKIAkJCQkgICAgWFBDX0FDVElWQVRFX01RX01TR19DSENUTF9PUEVOUkVQTFlfVVYpOwogfQpAQCAtMTEyOCwxMSArMTI1NCwxNSBAQAogCXhwY193YWtldXBfY2hhbm5lbF9tZ3IocGFydCk7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgZW51bSB4cF9yZXR2YWwKIHhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYV91dihzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbXNncXVldWVfcGEpCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBncnVfbXFfZGVzY19ncGEpCiB7Ci0JY2gtPnNuLnV2LnJlbW90ZV9ub3RpZnlfbXFfZ3BhID0gbXNncXVldWVfcGE7CisJc3RydWN0IHhwY19jaGFubmVsX3V2ICpjaF91diA9ICZjaC0+c24udXY7CisKKwlEQlVHX09OKGNoX3V2LT5jYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjID09IE5VTEwpOworCXJldHVybiB4cGNfY2FjaGVfcmVtb3RlX2dydV9tcV9kZXNjX3V2KGNoX3V2LT5jYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjLAorCQkJCQkgICAgICAgZ3J1X21xX2Rlc2NfZ3BhKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEzMzksNyArMTQ2OSw4IEBACiAJc2hvcnQgcGFydGlkOwogCXN0cnVjdCB4cGNfcGFydGl0aW9uICpwYXJ0OwogCi0Jd2hpbGUgKChtc2cgPSBncnVfZ2V0X25leHRfbWVzc2FnZSh4cGNfbm90aWZ5X21xX3V2KSkgIT0gTlVMTCkgeworCXdoaWxlICgobXNnID0gZ3J1X2dldF9uZXh0X21lc3NhZ2UoeHBjX25vdGlmeV9tcV91di0+Z3J1X21xX2Rlc2MpKSAhPQorCSAgICAgICBOVUxMKSB7CiAKIAkJcGFydGlkID0gbXNnLT5oZHIucGFydGlkOwogCQlpZiAocGFydGlkIDwgMCB8fCBwYXJ0aWQgPj0gWFBfTUFYX05QQVJUSVRJT05TX1VWKSB7CkBAIC0xMzU0LDcgKzE0ODUsNyBAQAogCQkJfQogCQl9CiAKLQkJZ3J1X2ZyZWVfbWVzc2FnZSh4cGNfbm90aWZ5X21xX3V2LCBtc2cpOworCQlncnVfZnJlZV9tZXNzYWdlKHhwY19ub3RpZnlfbXFfdXYtPmdydV9tcV9kZXNjLCBtc2cpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTE0MzgsNyArMTU2OSw4IEBACiAJbXNnLT5oZHIubXNnX3Nsb3RfbnVtYmVyID0gbXNnX3Nsb3QtPm1zZ19zbG90X251bWJlcjsKIAltZW1jcHkoJm1zZy0+cGF5bG9hZCwgcGF5bG9hZCwgcGF5bG9hZF9zaXplKTsKIAotCXJldCA9IHhwY19zZW5kX2dydV9tc2coY2gtPnNuLnV2LnJlbW90ZV9ub3RpZnlfbXFfZ3BhLCBtc2csIG1zZ19zaXplKTsKKwlyZXQgPSB4cGNfc2VuZF9ncnVfbXNnKGNoLT5zbi51di5jYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjLCBtc2csCisJCQkgICAgICAgbXNnX3NpemUpOwogCWlmIChyZXQgPT0geHBTdWNjZXNzKQogCQlnb3RvIG91dF8xOwogCkBAIC0xNTI5LDcgKzE2NjEsNyBAQAogCW1zZy0+aGRyLnBhcnRpZCA9IHhwX3BhcnRpdGlvbl9pZDsKIAltc2ctPmhkci5zaXplID0gMDsJLyogc2l6ZSBvZiB6ZXJvIGluZGljYXRlcyB0aGlzIGlzIGFuIEFDSyAqLwogCi0JcmV0ID0geHBjX3NlbmRfZ3J1X21zZyhjaC0+c24udXYucmVtb3RlX25vdGlmeV9tcV9ncGEsIG1zZywKKwlyZXQgPSB4cGNfc2VuZF9ncnVfbXNnKGNoLT5zbi51di5jYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjLCBtc2csCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB4cGNfbm90aWZ5X21xX21zZ2hkcl91dikpOwogCWlmIChyZXQgIT0geHBTdWNjZXNzKQogCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04oJnhwY19wYXJ0aXRpb25zW2NoLT5wYXJ0aWRdLCByZXQpOwpAQCAtMTU0MSw2ICsxNjczLDcgQEAKIHhwY19pbml0X3V2KHZvaWQpCiB7CiAJeHBjX3NldHVwX3BhcnRpdGlvbnNfc24gPSB4cGNfc2V0dXBfcGFydGl0aW9uc19zbl91djsKKwl4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbiA9IHhwY190ZWFyZG93bl9wYXJ0aXRpb25zX3NuX3V2OwogCXhwY19wcm9jZXNzX2FjdGl2YXRlX0lSUV9yY3ZkID0geHBjX3Byb2Nlc3NfYWN0aXZhdGVfSVJRX3JjdmRfdXY7CiAJeHBjX2dldF9wYXJ0aXRpb25fcnN2ZF9wYWdlX3BhID0geHBjX2dldF9wYXJ0aXRpb25fcnN2ZF9wYWdlX3BhX3V2OwogCXhwY19zZXR1cF9yc3ZkX3BhZ2Vfc24gPSB4cGNfc2V0dXBfcnN2ZF9wYWdlX3NuX3V2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCmluZGV4IDUxM2ViMDkuLmZlODA0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKQEAgLTQxLDYgKzQxLDggQEAKIAogI2luY2x1ZGUgInF1ZXVlLmgiCiAKK01PRFVMRV9BTElBUygibW1jOmJsb2NrIik7CisKIC8qCiAgKiBtYXggOCBwYXJ0aXRpb25zIHBlciBjYXJkCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCmluZGV4IGYyMTBhOGUuLmJkYjE2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwpAQCAtODQsNiArODQsMTQgQEAKIAl9CiAKIAlyZXR2YWwgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJNTUNfTkFNRT0lcyIsIG1tY19jYXJkX25hbWUoY2FyZCkpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwkvKgorCSAqIFJlcXVlc3QgdGhlIG1tY19ibG9jayBkZXZpY2UuICBOb3RlOiB0aGF0IHRoaXMgaXMgYSBkaXJlY3QgcmVxdWVzdAorCSAqIGZvciB0aGUgbW9kdWxlIGl0IGNhcnJpZXMgbm8gaW5mb3JtYXRpb24gYXMgdG8gd2hhdCBpcyBpbnNlcnRlZC4KKwkgKi8KKwlyZXR2YWwgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1tbWM6YmxvY2siKTsKIAogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCmluZGV4IGRmNmNlNGEuLmZhMDczYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgpAQCAtMjk3LDYgKzI5OCwyMSBAQAogCQkJZGF0YS0+dGltZW91dF9jbGtzID0gMDsKIAkJfQogCX0KKwkvKgorCSAqIFNvbWUgY2FyZHMgbmVlZCB2ZXJ5IGhpZ2ggdGltZW91dHMgaWYgZHJpdmVuIGluIFNQSSBtb2RlLgorCSAqIFRoZSB3b3JzdCBvYnNlcnZlZCB0aW1lb3V0IHdhcyA5MDBtcyBhZnRlciB3cml0aW5nIGEKKwkgKiBjb250aW51b3VzIHN0cmVhbSBvZiBkYXRhIHVudGlsIHRoZSBpbnRlcm5hbCBsb2dpYworCSAqIG92ZXJmbG93ZWQuCisJICovCisJaWYgKG1tY19ob3N0X2lzX3NwaShjYXJkLT5ob3N0KSkgeworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgeworCQkJaWYgKGRhdGEtPnRpbWVvdXRfbnMgPCAxMDAwMDAwMDAwKQorCQkJCWRhdGEtPnRpbWVvdXRfbnMgPSAxMDAwMDAwMDAwOwkvKiAxcyAqLworCQl9IGVsc2UgeworCQkJaWYgKGRhdGEtPnRpbWVvdXRfbnMgPCAxMDAwMDAwMDApCisJCQkJZGF0YS0+dGltZW91dF9ucyA9ICAxMDAwMDAwMDA7CS8qIDEwMG1zICovCisJCX0KKwl9CiB9CiBFWFBPUlRfU1lNQk9MKG1tY19zZXRfZGF0YV90aW1lb3V0KTsKIApAQCAtNTIzLDYgKzUzOSwxMDUgQEAKIH0KIEVYUE9SVF9TWU1CT0wobW1jX3ZkZHJhbmdlX3RvX29jcm1hc2spOwogCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorCisvKioKKyAqIG1tY19yZWd1bGF0b3JfZ2V0X29jcm1hc2sgLSByZXR1cm4gbWFzayBvZiBzdXBwb3J0ZWQgdm9sdGFnZXMKKyAqIEBzdXBwbHk6IHJlZ3VsYXRvciB0byB1c2UKKyAqCisgKiBUaGlzIHJldHVybnMgZWl0aGVyIGEgbmVnYXRpdmUgZXJybm8sIG9yIGEgbWFzayBvZiB2b2x0YWdlcyB0aGF0CisgKiBjYW4gYmUgcHJvdmlkZWQgdG8gTU1DL1NEL1NESU8gZGV2aWNlcyB1c2luZyB0aGUgc3BlY2lmaWVkIHZvbHRhZ2UKKyAqIHJlZ3VsYXRvci4gIFRoaXMgd291bGQgbm9ybWFsbHkgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyB0aGUKKyAqIE1NQyBob3N0IGFkYXB0ZXIuCisgKi8KK2ludCBtbWNfcmVndWxhdG9yX2dldF9vY3JtYXNrKHN0cnVjdCByZWd1bGF0b3IgKnN1cHBseSkKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCWludAkJCWNvdW50OworCWludAkJCWk7CisKKwljb3VudCA9IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhzdXBwbHkpOworCWlmIChjb3VudCA8IDApCisJCXJldHVybiBjb3VudDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWludAkJdmRkX3VWOworCQlpbnQJCXZkZF9tVjsKKworCQl2ZGRfdVYgPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN1cHBseSwgaSk7CisJCWlmICh2ZGRfdVYgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCXZkZF9tViA9IHZkZF91ViAvIDEwMDA7CisJCXJlc3VsdCB8PSBtbWNfdmRkcmFuZ2VfdG9fb2NybWFzayh2ZGRfbVYsIHZkZF9tVik7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0wobW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayk7CisKKy8qKgorICogbW1jX3JlZ3VsYXRvcl9zZXRfb2NyIC0gc2V0IHJlZ3VsYXRvciB0byBtYXRjaCBob3N0LT5pb3Mgdm9sdGFnZQorICogQHZkZF9iaXQ6IHplcm8gZm9yIHBvd2VyIG9mZiwgZWxzZSBhIGJpdCBudW1iZXIgKGhvc3QtPmlvcy52ZGQpCisgKiBAc3VwcGx5OiByZWd1bGF0b3IgdG8gdXNlCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKgorICogTU1DIGhvc3QgZHJpdmVycyBtYXkgdXNlIHRoaXMgdG8gZW5hYmxlIG9yIGRpc2FibGUgYSByZWd1bGF0b3IgdXNpbmcKKyAqIGEgcGFydGljdWxhciBzdXBwbHkgdm9sdGFnZS4gIFRoaXMgd291bGQgbm9ybWFsbHkgYmUgY2FsbGVkIGZyb20gdGhlCisgKiBzZXRfaW9zKCkgbWV0aG9kLgorICovCitpbnQgbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKHN0cnVjdCByZWd1bGF0b3IgKnN1cHBseSwgdW5zaWduZWQgc2hvcnQgdmRkX2JpdCkKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCWludAkJCW1pbl91ViwgbWF4X3VWOworCWludAkJCWVuYWJsZWQ7CisKKwllbmFibGVkID0gcmVndWxhdG9yX2lzX2VuYWJsZWQoc3VwcGx5KTsKKwlpZiAoZW5hYmxlZCA8IDApCisJCXJldHVybiBlbmFibGVkOworCisJaWYgKHZkZF9iaXQpIHsKKwkJaW50CQl0bXA7CisJCWludAkJdm9sdGFnZTsKKworCQkvKiBSRVZJU0lUIG1tY192ZGRyYW5nZV90b19vY3JtYXNrKCkgbWF5IGhhdmUgc2V0IHNvbWUKKwkJICogYml0cyB0aGlzIHJlZ3VsYXRvciBkb2Vzbid0IHF1aXRlIHN1cHBvcnQgLi4uIGRvbid0CisJCSAqIGJlIHRvbyBwaWNreSwgbW9zdCBjYXJkcyBhbmQgcmVndWxhdG9ycyBhcmUgT0sgd2l0aAorCQkgKiBhIDAuMVYgcmFuZ2UgZ29vZiAoaXQncyBhIHNtYWxsIGVycm9yIHBlcmNlbnRhZ2UpLgorCQkgKi8KKwkJdG1wID0gdmRkX2JpdCAtIGlsb2cyKE1NQ19WRERfMTY1XzE5NSk7CisJCWlmICh0bXAgPT0gMCkgeworCQkJbWluX3VWID0gMTY1MCAqIDEwMDA7CisJCQltYXhfdVYgPSAxOTUwICogMTAwMDsKKwkJfSBlbHNlIHsKKwkJCW1pbl91ViA9IDE5MDAgKiAxMDAwICsgdG1wICogMTAwICogMTAwMDsKKwkJCW1heF91ViA9IG1pbl91ViArIDEwMCAqIDEwMDA7CisJCX0KKworCQkvKiBhdm9pZCBuZWVkbGVzcyBjaGFuZ2VzIHRvIHRoaXMgdm9sdGFnZTsgdGhlIHJlZ3VsYXRvcgorCQkgKiBtaWdodCBub3QgYWxsb3cgdGhpcyBvcGVyYXRpb24KKwkJICovCisJCXZvbHRhZ2UgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3VwcGx5KTsKKwkJaWYgKHZvbHRhZ2UgPCAwKQorCQkJcmVzdWx0ID0gdm9sdGFnZTsKKwkJZWxzZSBpZiAodm9sdGFnZSA8IG1pbl91ViB8fCB2b2x0YWdlID4gbWF4X3VWKQorCQkJcmVzdWx0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKHN1cHBseSwgbWluX3VWLCBtYXhfdVYpOworCQllbHNlCisJCQlyZXN1bHQgPSAwOworCisJCWlmIChyZXN1bHQgPT0gMCAmJiAhZW5hYmxlZCkKKwkJCXJlc3VsdCA9IHJlZ3VsYXRvcl9lbmFibGUoc3VwcGx5KTsKKwl9IGVsc2UgaWYgKGVuYWJsZWQpIHsKKwkJcmVzdWx0ID0gcmVndWxhdG9yX2Rpc2FibGUoc3VwcGx5KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTChtbWNfcmVndWxhdG9yX3NldF9vY3IpOworCisjZW5kaWYKKwogLyoKICAqIE1hc2sgb2ZmIGFueSB2b2x0YWdlcyB3ZSBkb24ndCBzdXBwb3J0IGFuZCBzZWxlY3QKICAqIHRoZSBsb3dlc3Qgdm9sdGFnZQpAQCAtODE1LDYgKzkzMCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogI2VuZGlmCiAKKwljYW5jZWxfZGVsYXllZF93b3JrKCZob3N0LT5kZXRlY3QpOwogCW1tY19mbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJbW1jX2J1c19nZXQoaG9zdCk7CkBAIC04NDIsNiArOTU4LDcgQEAKICAqLwogaW50IG1tY19zdXNwZW5kX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGV0ZWN0KTsKIAltbWNfZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCW1tY19idXNfZ2V0KGhvc3QpOwpAQCAtODc1LDYgKzk5Miw3IEBACiAJbW1jX2J1c19nZXQoaG9zdCk7CiAJaWYgKGhvc3QtPmJ1c19vcHMgJiYgIWhvc3QtPmJ1c19kZWFkKSB7CiAJCW1tY19wb3dlcl91cChob3N0KTsKKwkJbW1jX3NlbGVjdF92b2x0YWdlKGhvc3QsIGhvc3QtPm9jcik7CiAJCUJVR19PTighaG9zdC0+YnVzX29wcy0+cmVzdW1lKTsKIAkJaG9zdC0+YnVzX29wcy0+cmVzdW1lKGhvc3QpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKaW5kZXggMTIzN2JiNC4uNjEwZGJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKQEAgLTE4NCw2ICsxODQsNjggQEAKIERFRklORV9TSU1QTEVfQVRUUklCVVRFKG1tY19kYmdfY2FyZF9zdGF0dXNfZm9wcywgbW1jX2RiZ19jYXJkX3N0YXR1c19nZXQsCiAJCU5VTEwsICIlMDhsbHhcbiIpOwogCisjZGVmaW5lIEVYVF9DU0RfU1RSX0xFTiAxMDI1CisKK3N0YXRpYyBpbnQgbW1jX2V4dF9jc2Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBpbm9kZS0+aV9wcml2YXRlOworCWNoYXIgKmJ1ZjsKKwlzc2l6ZV90IG4gPSAwOworCXU4ICpleHRfY3NkOworCWludCBlcnIsIGk7CisKKwlidWYgPSBrbWFsbG9jKEVYVF9DU0RfU1RSX0xFTiArIDEsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWV4dF9jc2QgPSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFleHRfY3NkKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJbW1jX2NsYWltX2hvc3QoY2FyZC0+aG9zdCk7CisJZXJyID0gbW1jX3NlbmRfZXh0X2NzZChjYXJkLCBleHRfY3NkKTsKKwltbWNfcmVsZWFzZV9ob3N0KGNhcmQtPmhvc3QpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlmb3IgKGkgPSA1MTE7IGkgPj0gMDsgaS0tKQorCQluICs9IHNwcmludGYoYnVmICsgbiwgIiUwMngiLCBleHRfY3NkW2ldKTsKKwluICs9IHNwcmludGYoYnVmICsgbiwgIlxuIik7CisJQlVHX09OKG4gIT0gRVhUX0NTRF9TVFJfTEVOKTsKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGJ1ZjsKKwlrZnJlZShleHRfY3NkKTsKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWU6CisJa2ZyZWUoYnVmKTsKKwlrZnJlZShleHRfY3NkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdCBtbWNfZXh0X2NzZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQlzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciAqYnVmID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywKKwkJCQkgICAgICAgYnVmLCBFWFRfQ1NEX1NUUl9MRU4pOworfQorCitzdGF0aWMgaW50IG1tY19leHRfY3NkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJa2ZyZWUoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW1jX2RiZ19leHRfY3NkX2ZvcHMgPSB7CisJLm9wZW4JCT0gbW1jX2V4dF9jc2Rfb3BlbiwKKwkucmVhZAkJPSBtbWNfZXh0X2NzZF9yZWFkLAorCS5yZWxlYXNlCT0gbW1jX2V4dF9jc2RfcmVsZWFzZSwKK307CisKIHZvaWQgbW1jX2FkZF9jYXJkX2RlYnVnZnMoc3RydWN0IG1tY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBtbWNfaG9zdAkqaG9zdCA9IGNhcmQtPmhvc3Q7CkBAIC0yMTEsNiArMjczLDExIEBACiAJCQkJCSZtbWNfZGJnX2NhcmRfc3RhdHVzX2ZvcHMpKQogCQkJZ290byBlcnI7CiAKKwlpZiAobW1jX2NhcmRfbW1jKGNhcmQpKQorCQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImV4dF9jc2QiLCBTX0lSVVNSLCByb290LCBjYXJkLAorCQkJCQkmbW1jX2RiZ19leHRfY3NkX2ZvcHMpKQorCQkJZ290byBlcnI7CisKIAlyZXR1cm47CiAKIGVycjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwppbmRleCA5NTZiZDc2Li45NjNmMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCkBAIC0yMjMsMTAgKzIyMywxOCBAQAogCQlpZiAodHBsX2NvZGUgPT0gMHhmZikKIAkJCWJyZWFrOwogCisJCS8qIG51bGwgZW50cmllcyBoYXZlIG5vIGxpbmsgZmllbGQgb3IgZGF0YSAqLworCQlpZiAodHBsX2NvZGUgPT0gMHgwMCkKKwkJCWNvbnRpbnVlOworCiAJCXJldCA9IG1tY19pb19yd19kaXJlY3QoY2FyZCwgMCwgMCwgcHRyKyssIDAsICZ0cGxfbGluayk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAorCQkvKiBhIHNpemUgb2YgMHhmZiBhbHNvIG1lYW5zIHdlJ3JlIGRvbmUgKi8KKwkJaWYgKHRwbF9saW5rID09IDB4ZmYpCisJCQlicmVhazsKKwogCQl0aGlzID0ga21hbGxvYyhzaXplb2YoKnRoaXMpICsgdHBsX2xpbmssIEdGUF9LRVJORUwpOwogCQlpZiAoIXRoaXMpCiAJCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuYwppbmRleCBjOGZhMDk1Li40ZWI3ODI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5jCkBAIC03Niw2ICs3NiwxMCBAQAogCUJVR19PTighY2FyZCk7CiAJQlVHX09OKGZuID4gNyk7CiAKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoYWRkciAmIH4weDFGRkZGKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CiAKIAljbWQub3Bjb2RlID0gU0RfSU9fUldfRElSRUNUOwpAQCAtMTI1LDYgKzEyOSwxMCBAQAogCVdBUk5fT04oYmxvY2tzID09IDApOwogCVdBUk5fT04oYmxrc3ogPT0gMCk7CiAKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoYWRkciAmIH4weDFGRkZGKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1lbXNldCgmbXJxLCAwLCBzaXplb2Yoc3RydWN0IG1tY19yZXF1ZXN0KSk7CiAJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsKIAltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2RhdGEpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCA5OWQ0YjI4Li5iNGNmNjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC0zNyw2ICszNywxMyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX1NESENJX0lPX0FDQ0VTU09SUworCWJvb2wKKwlkZXBlbmRzIG9uIE1NQ19TREhDSQorCWhlbHAKKwkgIFRoaXMgaXMgc2lsZW50IEtjb25maWcgc3ltYm9sIHRoYXQgaXMgc2VsZWN0ZWQgYnkgdGhlIGRyaXZlcnMgdGhhdAorCSAgbmVlZCB0byBvdmVyd3JpdGUgU0RIQ0kgSU8gbWVtb3J5IGFjY2Vzc29ycy4KKwogY29uZmlnIE1NQ19TREhDSV9QQ0kKIAl0cmlzdGF0ZSAiU0RIQ0kgc3VwcG9ydCBvbiBQQ0kgYnVzIgogCWRlcGVuZHMgb24gTU1DX1NESENJICYmIFBDSQpAQCAtNjUsNiArNzIsMTcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIE1NQ19TREhDSV9PRgorCXRyaXN0YXRlICJTREhDSSBzdXBwb3J0IG9uIE9wZW5GaXJtd2FyZSBwbGF0Zm9ybXMiCisJZGVwZW5kcyBvbiBNTUNfU0RIQ0kgJiYgUFBDX09GCisJc2VsZWN0IE1NQ19TREhDSV9JT19BQ0NFU1NPUlMKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIE9GIHN1cHBvcnQgZm9yIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlcgorCSAgSW50ZXJmYWNlcy4gU28gZmFyLCBvbmx5IHRoZSBGcmVlc2NhbGUgZVNESEMgY29udHJvbGxlciBpcyBrbm93bgorCSAgdG8gZXhpc3Qgb24gT0YgcGxhdGZvcm1zLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX09NQVAKIAl0cmlzdGF0ZSAiVEkgT01BUCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAKQEAgLTE3MSwxMyArMTg5LDI0IEBACiAgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlmbV9zZC4KIAorY29uZmlnIE1NQ19NVlNESU8KKwl0cmlzdGF0ZSAiTWFydmVsbCBNTUMvU0QvU0RJTyBob3N0IGRyaXZlciIKKwlkZXBlbmRzIG9uIFBMQVRfT1JJT04KKwktLS1oZWxwLS0tCisJICBUaGlzIHNlbGVjdHMgdGhlIE1hcnZlbGwgU0RJTyBob3N0IGRyaXZlci4KKwkgIFNESU8gbWF5IGN1cnJlbnRseSBiZSBmb3VuZCBvbiB0aGUgS2lya3dvb2QgODhGNjI4MSBhbmQgODhGNjE5MgorCSAgU29DIGNvbnRyb2xsZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtdnNkaW8uCisKIGNvbmZpZyBNTUNfU1BJCiAJdHJpc3RhdGUgIk1NQy9TRC9TRElPIG92ZXIgU1BJIgogCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiAhSElHSE1FTSAmJiBIQVNfRE1BCiAJc2VsZWN0IENSQzcKIAlzZWxlY3QgQ1JDX0lUVV9UCiAJaGVscAotCSAgU29tZSBzeXN0ZW1zIGFjY3NzIE1NQy9TRC9TRElPIGNhcmRzIHVzaW5nIGEgU1BJIGNvbnRyb2xsZXIKKwkgIFNvbWUgc3lzdGVtcyBhY2Nlc3MgTU1DL1NEL1NESU8gY2FyZHMgdXNpbmcgYSBTUEkgY29udHJvbGxlcgogCSAgaW5zdGVhZCBvZiB1c2luZyBhICJuYXRpdmUiIE1NQy9TRC9TRElPIGNvbnRyb2xsZXIuICBUaGlzIGhhcyBhCiAJICBkaXNhZHZhbnRhZ2Ugb2YgYmVpbmcgcmVsYXRpdmVseSBoaWdoIG92ZXJoZWFkLCBidXQgYSBjb21wZW5zYXRpbmcKIAkgIGFkdmFudGFnZSBvZiB3b3JraW5nIG9uIG1hbnkgc3lzdGVtcyB3aXRob3V0IGRlZGljYXRlZCBNTUMvU0QvU0RJTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKaW5kZXggZGVkZWM1NS4uOTcwYTk5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCkBAIC0xMyw2ICsxMyw3IEBACiBvYmotJChDT05GSUdfTU1DX1NESENJKQkJKz0gc2RoY2kubwogb2JqLSQoQ09ORklHX01NQ19TREhDSV9QQ0kpCSs9IHNkaGNpLXBjaS5vCiBvYmotJChDT05GSUdfTU1DX1JJQ09IX01NQykJKz0gcmljb2hfbW1jLm8KK29iai0kKENPTkZJR19NTUNfU0RIQ0lfT0YpCSs9IHNkaGNpLW9mLm8KIG9iai0kKENPTkZJR19NTUNfV0JTRCkJCSs9IHdic2Qubwogb2JqLSQoQ09ORklHX01NQ19BVTFYKQkJKz0gYXUxeG1tYy5vCiBvYmotJChDT05GSUdfTU1DX09NQVApCQkrPSBvbWFwLm8KQEAgLTIwLDYgKzIxLDcgQEAKIG9iai0kKENPTkZJR19NTUNfQVQ5MSkJCSs9IGF0OTFfbWNpLm8KIG9iai0kKENPTkZJR19NTUNfQVRNRUxNQ0kpCSs9IGF0bWVsLW1jaS5vCiBvYmotJChDT05GSUdfTU1DX1RJRk1fU0QpCSs9IHRpZm1fc2Qubworb2JqLSQoQ09ORklHX01NQ19NVlNESU8pCSs9IG12c2Rpby5vCiBvYmotJChDT05GSUdfTU1DX1NQSSkJCSs9IG1tY19zcGkubwogaWZlcSAoJChDT05GSUdfT0YpLHkpCiBvYmotJChDT05GSUdfTU1DX1NQSSkJCSs9IG9mX21tY19zcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKaW5kZXggZTk0ZTkyMC4uY2Y2YTEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCkBAIC04MTIsNyArODEyLDcgQEAKIAkJc2xvdC0+c2RjX3JlZyB8PSBNQ0lfU0RDQlVTXzFCSVQ7CiAJCWJyZWFrOwogCWNhc2UgTU1DX0JVU19XSURUSF80OgotCQlzbG90LT5zZGNfcmVnID0gTUNJX1NEQ0JVU180QklUOworCQlzbG90LT5zZGNfcmVnIHw9IE1DSV9TRENCVVNfNEJJVDsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jCmluZGV4IDg3ZTIxMWQuLjcyZjhiZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jCkBAIC0yNzksOCArMjc5LDExIEBACiAJCSAqIHNvIGl0IGNhbiBhbHdheXMgRE1BIGRpcmVjdGx5IGludG8gdGhlIHRhcmdldCBidWZmZXIuCiAJCSAqIEl0J2QgcHJvYmFibHkgYmUgYmV0dGVyIHRvIG1lbWNweSgpIHRoZSBmaXJzdCBjaHVuayBhbmQKIAkJICogYXZvaWQgZXh0cmEgaS9vIGNhbGxzLi4uCisJCSAqCisJCSAqIE5vdGUgd2UgY2hlY2sgZm9yIG1vcmUgdGhhbiA4IGJ5dGVzLCBiZWNhdXNlIGluIHByYWN0aWNlLAorCQkgKiBzb21lIFNEIGNhcmRzIGFyZSBzbG93Li4uCiAJCSAqLwotCQlmb3IgKGkgPSAyOyBpIDwgOTsgaSsrKSB7CisJCWZvciAoaSA9IDI7IGkgPCAxNjsgaSsrKSB7CiAJCQl2YWx1ZSA9IG1tY19zcGlfcmVhZGJ5dGVzKGhvc3QsIDEpOwogCQkJaWYgKHZhbHVlIDwgMCkKIAkJCQlnb3RvIGRvbmU7CkBAIC02MDksNiArNjEyLDcgQEAKIAlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpID0gaG9zdC0+c3BpOwogCWludAkJCXN0YXR1cywgaTsKIAlzdHJ1Y3Qgc2NyYXRjaAkJKnNjcmF0Y2ggPSBob3N0LT5kYXRhOworCXUzMgkJCXBhdHRlcm47CiAKIAlpZiAoaG9zdC0+bW1jLT51c2Vfc3BpX2NyYykKIAkJc2NyYXRjaC0+Y3JjX3ZhbCA9IGNwdV90b19iZTE2KApAQCAtNjM2LDggKzY0MCwyNyBAQAogCSAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkgdGVsbCB3aGV0aGVyIHRoZSB3cml0ZSBvcGVyYXRpb24gc3VjY2VlZGVkOwogCSAqIGl0IGp1c3Qgc2F5cyBpZiB0aGUgdHJhbnNtaXNzaW9uIHdhcyBvayBhbmQgd2hldGhlciAqZWFybGllcioKIAkgKiB3cml0ZXMgc3VjY2VlZGVkOyBzZWUgdGhlIHN0YW5kYXJkLgorCSAqCisJICogSW4gcHJhY3RpY2UsIHRoZXJlIGFyZSAoZXZlbiBtb2Rlcm4gU0RIQy0pY2FyZHMgd2hpY2ggYXJlIGxhdGUKKwkgKiBpbiBzZW5kaW5nIHRoZSByZXNwb25zZSwgYW5kIG1pc3MgdGhlIHRpbWUgZnJhbWUgYnkgYSBmZXcgYml0cywKKwkgKiBzbyB3ZSBoYXZlIHRvIGNvcGUgd2l0aCB0aGlzIHNpdHVhdGlvbiBhbmQgY2hlY2sgdGhlIHJlc3BvbnNlCisJICogYml0LWJ5LWJpdC4gQXJnZ2ghISEKIAkgKi8KLQlzd2l0Y2ggKFNQSV9NTUNfUkVTUE9OU0VfQ09ERShzY3JhdGNoLT5zdGF0dXNbMF0pKSB7CisJcGF0dGVybiAgPSBzY3JhdGNoLT5zdGF0dXNbMF0gPDwgMjQ7CisJcGF0dGVybiB8PSBzY3JhdGNoLT5zdGF0dXNbMV0gPDwgMTY7CisJcGF0dGVybiB8PSBzY3JhdGNoLT5zdGF0dXNbMl0gPDwgODsKKwlwYXR0ZXJuIHw9IHNjcmF0Y2gtPnN0YXR1c1szXTsKKworCS8qIEZpcnN0IDMgYml0IG9mIHBhdHRlcm4gYXJlIHVuZGVmaW5lZCAqLworCXBhdHRlcm4gfD0gMHhFMDAwMDAwMDsKKworCS8qIGxlZnQtYWRqdXN0IHRvIGxlYWRpbmcgMCBiaXQgKi8KKwl3aGlsZSAocGF0dGVybiAmIDB4ODAwMDAwMDApCisJCXBhdHRlcm4gPDw9IDE7CisJLyogcmlnaHQtYWRqdXN0IGZvciBwYXR0ZXJuIG1hdGNoaW5nLiBDb2RlIGlzIGluIGJpdCA0Li4wIG5vdy4gKi8KKwlwYXR0ZXJuID4+PSAyNzsKKworCXN3aXRjaCAocGF0dGVybikgewogCWNhc2UgU1BJX1JFU1BPTlNFX0FDQ0VQVEVEOgogCQlzdGF0dXMgPSAwOwogCQlicmVhazsKQEAgLTY2OCw4ICs2OTEsOSBAQAogCS8qIFJldHVybiB3aGVuIG5vdCBidXN5LiAgSWYgd2UgZGlkbid0IGNvbGxlY3QgdGhhdCBzdGF0dXMgeWV0LAogCSAqIHdlJ2xsIG5lZWQgc29tZSBtb3JlIEkvTy4KIAkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgc2l6ZW9mKHNjcmF0Y2gtPnN0YXR1cyk7IGkrKykgewotCQlpZiAoc2NyYXRjaC0+c3RhdHVzW2ldICE9IDApCisJZm9yIChpID0gNDsgaSA8IHNpemVvZihzY3JhdGNoLT5zdGF0dXMpOyBpKyspIHsKKwkJLyogY2FyZCBpcyBub24tYnVzeSBpZiB0aGUgbW9zdCByZWNlbnQgYml0IGlzIDEgKi8KKwkJaWYgKHNjcmF0Y2gtPnN0YXR1c1tpXSAmIDB4MDEpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIG1tY19zcGlfd2FpdF91bmJ1c3koaG9zdCwgdGltZW91dCk7CkBAIC0xMjA0LDEwICsxMjI4LDEyIEBACiAKIAkvKiBNTUMgYW5kIFNEIHNwZWNzIG9ubHkgc2VlbSB0byBjYXJlIHRoYXQgc2FtcGxpbmcgaXMgb24gdGhlCiAJICogcmlzaW5nIGVkZ2UgLi4uIG1lYW5pbmcgU1BJIG1vZGVzIDAgb3IgMy4gIFNvIGVpdGhlciBTUEkgbW9kZQotCSAqIHNob3VsZCBiZSBsZWdpdC4gIFdlJ2xsIHVzZSBtb2RlIDAgc2luY2UgaXQgc2VlbXMgdG8gYmUgYQotCSAqIGJpdCBsZXNzIHRyb3VibGVzb21lIG9uIHNvbWUgaGFyZHdhcmUgLi4uIHVuY2xlYXIgd2h5LgorCSAqIHNob3VsZCBiZSBsZWdpdC4gIFdlJ2xsIHVzZSBtb2RlIDAgc2luY2UgdGhlIHN0ZWFkeSBzdGF0ZSBpcyAwLAorCSAqIHdoaWNoIGlzIGFwcHJvcHJpYXRlIGZvciBob3RwbHVnZ2luZywgdW5sZXNzIHRoZSBwbGF0Zm9ybSBkYXRhCisJICogc3BlY2lmeSBtb2RlIDMgKGlmIGhhcmR3YXJlIGlzIG5vdCBjb21wYXRpYmxlIHRvIG1vZGUgMCkuCiAJICovCi0Jc3BpLT5tb2RlID0gU1BJX01PREVfMDsKKwlpZiAoc3BpLT5tb2RlICE9IFNQSV9NT0RFXzMpCisJCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7CiAJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKIAogCXN0YXR1cyA9IHNwaV9zZXR1cChzcGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjMzc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmMKQEAgLTAsMCArMSw4ODUgQEAKKy8qCisgKiBNYXJ2ZWxsIE1NQy9TRC9TRElPIGRyaXZlcgorICoKKyAqIEF1dGhvcnM6IE1hZW4gU3VsZWltYW4sIE5pY29sYXMgUGl0cmUKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE1hcnZlbGwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxwbGF0L212c2Rpby5oPgorCisjaW5jbHVkZSAibXZzZGlvLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJIm12c2RpbyIKKworc3RhdGljIGludCBtYXhmcmVxID0gTVZTRF9DTE9DS1JBVEVfTUFYOworc3RhdGljIGludCBub2RtYTsKKworc3RydWN0IG12c2RfaG9zdCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxOworCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBpbnQgeGZlcl9tb2RlOworCXVuc2lnbmVkIGludCBpbnRyX2VuOworCXVuc2lnbmVkIGludCBjdHJsOworCXVuc2lnbmVkIGludCBwaW9fc2l6ZTsKKwl2b2lkICpwaW9fcHRyOworCXVuc2lnbmVkIGludCBzZ19mcmFnczsKKwl1bnNpZ25lZCBpbnQgbnNfcGVyX2NsazsKKwl1bnNpZ25lZCBpbnQgY2xvY2s7CisJdW5zaWduZWQgaW50IGJhc2VfY2xvY2s7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IGdwaW9fY2FyZF9kZXRlY3Q7CisJaW50IGdwaW9fd3JpdGVfcHJvdGVjdDsKK307CisKKyNkZWZpbmUgbXZzZF93cml0ZShvZmZzLCB2YWwpCXdyaXRlbCh2YWwsIGlvYmFzZSArIChvZmZzKSkKKyNkZWZpbmUgbXZzZF9yZWFkKG9mZnMpCQlyZWFkbChpb2Jhc2UgKyAob2ZmcykpCisKK3N0YXRpYyBpbnQgbXZzZF9zZXR1cF9kYXRhKHN0cnVjdCBtdnNkX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJdW5zaWduZWQgaW50IHRtb3V0OworCWludCB0bW91dF9pbmRleDsKKworCS8qIElmIHRpbWVvdXQ9MCB0aGVuIG1heGltdW0gdGltZW91dCBpbmRleCBpcyB1c2VkLiAqLworCXRtb3V0ID0gRElWX1JPVU5EX1VQKGRhdGEtPnRpbWVvdXRfbnMsIGhvc3QtPm5zX3Blcl9jbGspOworCXRtb3V0ICs9IGRhdGEtPnRpbWVvdXRfY2xrczsKKwl0bW91dF9pbmRleCA9IGZscyh0bW91dCAtIDEpIC0gMTI7CisJaWYgKHRtb3V0X2luZGV4IDwgMCkKKwkJdG1vdXRfaW5kZXggPSAwOworCWlmICh0bW91dF9pbmRleCA+IE1WU0RfSE9TVF9DVFJMX1RNT1VUX01BWCkKKwkJdG1vdXRfaW5kZXggPSBNVlNEX0hPU1RfQ1RSTF9UTU9VVF9NQVg7CisKKwlkZXZfZGJnKGhvc3QtPmRldiwgImRhdGEgJXMgYXQgMHglMDh4OiBibG9ja3M9JWQgYmxrc3o9JWQgdG1vdXQ9JXUgKCVkKVxuIiwKKwkJKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgPyAicmVhZCIgOiAid3JpdGUiLAorCQkodTMyKXNnX3ZpcnQoZGF0YS0+c2cpLCBkYXRhLT5ibG9ja3MsIGRhdGEtPmJsa3N6LAorCQl0bW91dCwgdG1vdXRfaW5kZXgpOworCisJaG9zdC0+Y3RybCAmPSB+TVZTRF9IT1NUX0NUUkxfVE1PVVRfTUFTSzsKKwlob3N0LT5jdHJsIHw9IE1WU0RfSE9TVF9DVFJMX1RNT1VUKHRtb3V0X2luZGV4KTsKKwltdnNkX3dyaXRlKE1WU0RfSE9TVF9DVFJMLCBob3N0LT5jdHJsKTsKKwltdnNkX3dyaXRlKE1WU0RfQkxLX0NPVU5ULCBkYXRhLT5ibG9ja3MpOworCW12c2Rfd3JpdGUoTVZTRF9CTEtfU0laRSwgZGF0YS0+Ymxrc3opOworCisJaWYgKG5vZG1hIHx8IChkYXRhLT5ibGtzeiB8IGRhdGEtPnNnLT5vZmZzZXQpICYgMykgeworCQkvKgorCQkgKiBXZSBjYW5ub3QgZG8gRE1BIG9uIGEgYnVmZmVyIHdoaWNoIG9mZnNldCBvciBzaXplCisJCSAqIGlzIG5vdCBhbGlnbmVkIG9uIGEgNC1ieXRlIGJvdW5kYXJ5LgorCQkgKi8KKwkJaG9zdC0+cGlvX3NpemUgPSBkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzejsKKwkJaG9zdC0+cGlvX3B0ciA9IHNnX3ZpcnQoZGF0YS0+c2cpOworCQlpZiAoIW5vZG1hKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWxsYmFjayB0byBQSU8gZm9yIGRhdGEgIgorCQkJCQkgICJhdCAweCVwIHNpemUgJWRcbiIsCisJCQkJCSAgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksCisJCQkJCSAgaG9zdC0+cGlvX3B0ciwgaG9zdC0+cGlvX3NpemUpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlkbWFfYWRkcl90IHBoeXNfYWRkcjsKKwkJaW50IGRtYV9kaXIgPSAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSA/CisJCQlETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFOworCQlob3N0LT5zZ19mcmFncyA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywKKwkJCQkJICAgIGRhdGEtPnNnX2xlbiwgZG1hX2Rpcik7CisJCXBoeXNfYWRkciA9IHNnX2RtYV9hZGRyZXNzKGRhdGEtPnNnKTsKKwkJbXZzZF93cml0ZShNVlNEX1NZU19BRERSX0xPVywgKHUzMilwaHlzX2FkZHIgJiAweGZmZmYpOworCQltdnNkX3dyaXRlKE1WU0RfU1lTX0FERFJfSEksICAodTMyKXBoeXNfYWRkciA+PiAxNik7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgbXZzZF9yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKK3sKKwlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBtcnEtPmNtZDsKKwl1MzIgY21kcmVnID0gMCwgeGZlciA9IDAsIGludHIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04oaG9zdC0+bXJxICE9IE5VTEwpOworCWhvc3QtPm1ycSA9IG1ycTsKKworCWRldl9kYmcoaG9zdC0+ZGV2LCAiY21kICVkIChodyBzdGF0ZSAweCUwNHgpXG4iLAorCQljbWQtPm9wY29kZSwgbXZzZF9yZWFkKE1WU0RfSFdfU1RBVEUpKTsKKworCWNtZHJlZyA9IE1WU0RfQ01EX0lOREVYKGNtZC0+b3Bjb2RlKTsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZKQorCQljbWRyZWcgfD0gTVZTRF9DTURfUlNQXzQ4QlVTWTsKKwllbHNlIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpCisJCWNtZHJlZyB8PSBNVlNEX0NNRF9SU1BfMTM2OworCWVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpCisJCWNtZHJlZyB8PSBNVlNEX0NNRF9SU1BfNDg7CisJZWxzZQorCQljbWRyZWcgfD0gTVZTRF9DTURfUlNQX05PTkU7CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfQ1JDKQorCQljbWRyZWcgfD0gTVZTRF9DTURfQ0hFQ0tfQ01EQ1JDOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX09QQ09ERSkKKwkJY21kcmVnIHw9IE1WU0RfQ01EX0lORFhfQ0hFQ0s7CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgeworCQljbWRyZWcgfD0gTVZTRF9VTkVYUEVDVEVEX1JFU1A7CisJCWludHIgfD0gTVZTRF9OT1JfVU5FWFBfUlNQOworCX0KKworCWlmIChtcnEtPmRhdGEpIHsKKwkJc3RydWN0IG1tY19kYXRhICpkYXRhID0gbXJxLT5kYXRhOworCQlpbnQgcGlvOworCisJCWNtZHJlZyB8PSBNVlNEX0NNRF9EQVRBX1BSRVNFTlQgfCBNVlNEX0NNRF9DSEVDS19EQVRBQ1JDMTY7CisJCXhmZXIgfD0gTVZTRF9YRkVSX01PREVfSFdfV1JfREFUQV9FTjsKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJCXhmZXIgfD0gTVZTRF9YRkVSX01PREVfVE9fSE9TVDsKKworCQlwaW8gPSBtdnNkX3NldHVwX2RhdGEoaG9zdCwgZGF0YSk7CisJCWlmIChwaW8pIHsKKwkJCXhmZXIgfD0gTVZTRF9YRkVSX01PREVfUElPOworCQkJLyogUElPIHNlY3Rpb24gb2YgbXZzZF9pcnEgaGFzIGNvbW1lbnRzIG9uIHRob3NlIGJpdHMgKi8KKwkJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQkJCWludHIgfD0gTVZTRF9OT1JfVFhfQVZBSUw7CisJCQllbHNlIGlmIChob3N0LT5waW9fc2l6ZSA+IDMyKQorCQkJCWludHIgfD0gTVZTRF9OT1JfUlhfRklGT184VzsKKwkJCWVsc2UKKwkJCQlpbnRyIHw9IE1WU0RfTk9SX1JYX1JFQURZOworCQl9CisKKwkJaWYgKGRhdGEtPnN0b3ApIHsKKwkJCXN0cnVjdCBtbWNfY29tbWFuZCAqc3RvcCA9IGRhdGEtPnN0b3A7CisJCQl1MzIgY21kMTJyZWcgPSAwOworCisJCQltdnNkX3dyaXRlKE1WU0RfQVVUT0NNRDEyX0FSR19MT1csIHN0b3AtPmFyZyAmIDB4ZmZmZik7CisJCQltdnNkX3dyaXRlKE1WU0RfQVVUT0NNRDEyX0FSR19ISSwgIHN0b3AtPmFyZyA+PiAxNik7CisKKwkJCWlmIChzdG9wLT5mbGFncyAmIE1NQ19SU1BfQlVTWSkKKwkJCQljbWQxMnJlZyB8PSBNVlNEX0FVVE9DTUQxMl9CVVNZOworCQkJaWYgKHN0b3AtPmZsYWdzICYgTU1DX1JTUF9PUENPREUpCisJCQkJY21kMTJyZWcgfD0gTVZTRF9BVVRPQ01EMTJfSU5EWF9DSEVDSzsKKwkJCWNtZDEycmVnIHw9IE1WU0RfQVVUT0NNRDEyX0lOREVYKHN0b3AtPm9wY29kZSk7CisJCQltdnNkX3dyaXRlKE1WU0RfQVVUT0NNRDEyX0NNRCwgY21kMTJyZWcpOworCisJCQl4ZmVyIHw9IE1WU0RfWEZFUl9NT0RFX0FVVE9fQ01EMTI7CisJCQlpbnRyIHw9IE1WU0RfTk9SX0FVVE9DTUQxMl9ET05FOworCQl9IGVsc2UgeworCQkJaW50ciB8PSBNVlNEX05PUl9YRkVSX0RPTkU7CisJCX0KKwl9IGVsc2UgeworCQlpbnRyIHw9IE1WU0RfTk9SX0NNRF9ET05FOworCX0KKworCW12c2Rfd3JpdGUoTVZTRF9BUkdfTE9XLCBjbWQtPmFyZyAmIDB4ZmZmZik7CisJbXZzZF93cml0ZShNVlNEX0FSR19ISSwgIGNtZC0+YXJnID4+IDE2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlob3N0LT54ZmVyX21vZGUgJj0gTVZTRF9YRkVSX01PREVfSU5UX0NIS19FTjsKKwlob3N0LT54ZmVyX21vZGUgfD0geGZlcjsKKwltdnNkX3dyaXRlKE1WU0RfWEZFUl9NT0RFLCBob3N0LT54ZmVyX21vZGUpOworCisJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX1NUQVRVUywgfk1WU0RfTk9SX0NBUkRfSU5UKTsKKwltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfU1RBVFVTLCAweGZmZmYpOworCW12c2Rfd3JpdGUoTVZTRF9DTUQsIGNtZHJlZyk7CisKKwlob3N0LT5pbnRyX2VuICY9IE1WU0RfTk9SX0NBUkRfSU5UOworCWhvc3QtPmludHJfZW4gfD0gaW50ciB8IE1WU0RfTk9SX0VSUk9SOworCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgaG9zdC0+aW50cl9lbik7CisJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX0VOLCAweGZmZmYpOworCisJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArIDUgKiBIWik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1MzIgbXZzZF9maW5pc2hfY21kKHN0cnVjdCBtdnNkX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLAorCQkJICAgdTMyIGVycl9zdGF0dXMpCit7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikgeworCQl1bnNpZ25lZCBpbnQgcmVzcG9uc2VbOF0sIGk7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlyZXNwb25zZVtpXSA9IG12c2RfcmVhZChNVlNEX1JTUChpKSk7CisJCWNtZC0+cmVzcFswXSA9CQkoKHJlc3BvbnNlWzBdICYgMHgwM2ZmKSA8PCAyMikgfAorCQkJCQkoKHJlc3BvbnNlWzFdICYgMHhmZmZmKSA8PCA2KSB8CisJCQkJCSgocmVzcG9uc2VbMl0gJiAweGZjMDApID4+IDEwKTsKKwkJY21kLT5yZXNwWzFdID0JCSgocmVzcG9uc2VbMl0gJiAweDAzZmYpIDw8IDIyKSB8CisJCQkJCSgocmVzcG9uc2VbM10gJiAweGZmZmYpIDw8IDYpIHwKKwkJCQkJKChyZXNwb25zZVs0XSAmIDB4ZmMwMCkgPj4gMTApOworCQljbWQtPnJlc3BbMl0gPQkJKChyZXNwb25zZVs0XSAmIDB4MDNmZikgPDwgMjIpIHwKKwkJCQkJKChyZXNwb25zZVs1XSAmIDB4ZmZmZikgPDwgNikgfAorCQkJCQkoKHJlc3BvbnNlWzZdICYgMHhmYzAwKSA+PiAxMCk7CisJCWNtZC0+cmVzcFszXSA9CQkoKHJlc3BvbnNlWzZdICYgMHgwM2ZmKSA8PCAyMikgfAorCQkJCQkoKHJlc3BvbnNlWzddICYgMHgzZmZmKSA8PCA4KTsKKwl9IGVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKKwkJdW5zaWduZWQgaW50IHJlc3BvbnNlWzNdLCBpOworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJcmVzcG9uc2VbaV0gPSBtdnNkX3JlYWQoTVZTRF9SU1AoaSkpOworCQljbWQtPnJlc3BbMF0gPQkJKChyZXNwb25zZVsyXSAmIDB4MDAzZikgPDwgKDggLSA4KSkgfAorCQkJCQkoKHJlc3BvbnNlWzFdICYgMHhmZmZmKSA8PCAoMTQgLSA4KSkgfAorCQkJCQkoKHJlc3BvbnNlWzBdICYgMHgwM2ZmKSA8PCAoMzAgLSA4KSk7CisJCWNtZC0+cmVzcFsxXSA9CQkoKHJlc3BvbnNlWzBdICYgMHhmYzAwKSA+PiAxMCk7CisJCWNtZC0+cmVzcFsyXSA9IDA7CisJCWNtZC0+cmVzcFszXSA9IDA7CisJfQorCisJaWYgKGVycl9zdGF0dXMgJiBNVlNEX0VSUl9DTURfVElNRU9VVCkgeworCQljbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKKwl9IGVsc2UgaWYgKGVycl9zdGF0dXMgJiAoTVZTRF9FUlJfQ01EX0NSQyB8IE1WU0RfRVJSX0NNRF9FTkRCSVQgfAorCQkJCSBNVlNEX0VSUl9DTURfSU5ERVggfCBNVlNEX0VSUl9DTURfU1RBUlRCSVQpKSB7CisJCWNtZC0+ZXJyb3IgPSAtRUlMU0VROworCX0KKwllcnJfc3RhdHVzICY9IH4oTVZTRF9FUlJfQ01EX1RJTUVPVVQgfCBNVlNEX0VSUl9DTURfQ1JDIHwKKwkJCU1WU0RfRVJSX0NNRF9FTkRCSVQgfCBNVlNEX0VSUl9DTURfSU5ERVggfAorCQkJTVZTRF9FUlJfQ01EX1NUQVJUQklUKTsKKworCXJldHVybiBlcnJfc3RhdHVzOworfQorCitzdGF0aWMgdTMyIG12c2RfZmluaXNoX2RhdGEoc3RydWN0IG12c2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhLAorCQkJICAgIHUzMiBlcnJfc3RhdHVzKQoreworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKworCWlmIChob3N0LT5waW9fcHRyKSB7CisJCWhvc3QtPnBpb19wdHIgPSBOVUxMOworCQlob3N0LT5waW9fc2l6ZSA9IDA7CisJfSBlbHNlIHsKKwkJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csIGhvc3QtPnNnX2ZyYWdzLAorCQkJICAgICAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSA/CisJCQkJRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CisJfQorCisJaWYgKGVycl9zdGF0dXMgJiBNVlNEX0VSUl9EQVRBX1RJTUVPVVQpCisJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKKwllbHNlIGlmIChlcnJfc3RhdHVzICYgKE1WU0RfRVJSX0RBVEFfQ1JDIHwgTVZTRF9FUlJfREFUQV9FTkRCSVQpKQorCQlkYXRhLT5lcnJvciA9IC1FSUxTRVE7CisJZWxzZSBpZiAoZXJyX3N0YXR1cyAmIE1WU0RfRVJSX1hGRVJfU0laRSkKKwkJZGF0YS0+ZXJyb3IgPSAtRUJBREU7CisJZXJyX3N0YXR1cyAmPSB+KE1WU0RfRVJSX0RBVEFfVElNRU9VVCB8IE1WU0RfRVJSX0RBVEFfQ1JDIHwKKwkJCU1WU0RfRVJSX0RBVEFfRU5EQklUIHwgTVZTRF9FUlJfWEZFUl9TSVpFKTsKKworCWRldl9kYmcoaG9zdC0+ZGV2LCAiZGF0YSBkb25lOiBibG9ja3NfbGVmdD0lZCwgYnl0ZXNfbGVmdD0lZFxuIiwKKwkJbXZzZF9yZWFkKE1WU0RfQ1VSUl9CTEtfTEVGVCksIG12c2RfcmVhZChNVlNEX0NVUlJfQllURV9MRUZUKSk7CisJZGF0YS0+Ynl0ZXNfeGZlcmVkID0KKwkJKGRhdGEtPmJsb2NrcyAtIG12c2RfcmVhZChNVlNEX0NVUlJfQkxLX0xFRlQpKSAqIGRhdGEtPmJsa3N6OworCS8qIFdlIGNhbid0IGJlIHN1cmUgYWJvdXQgdGhlIGxhc3QgYmxvY2sgd2hlbiBlcnJvcnMgYXJlIGRldGVjdGVkICovCisJaWYgKGRhdGEtPmJ5dGVzX3hmZXJlZCAmJiBkYXRhLT5lcnJvcikKKwkJZGF0YS0+Ynl0ZXNfeGZlcmVkIC09IGRhdGEtPmJsa3N6OworCisJLyogSGFuZGxlIEF1dG8gY21kIDEyIHJlc3BvbnNlICovCisJaWYgKGRhdGEtPnN0b3ApIHsKKwkJdW5zaWduZWQgaW50IHJlc3BvbnNlWzNdLCBpOworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJcmVzcG9uc2VbaV0gPSBtdnNkX3JlYWQoTVZTRF9BVVRPX1JTUChpKSk7CisJCWRhdGEtPnN0b3AtPnJlc3BbMF0gPQkoKHJlc3BvbnNlWzJdICYgMHgwMDNmKSA8PCAoOCAtIDgpKSB8CisJCQkJCSgocmVzcG9uc2VbMV0gJiAweGZmZmYpIDw8ICgxNCAtIDgpKSB8CisJCQkJCSgocmVzcG9uc2VbMF0gJiAweDAzZmYpIDw8ICgzMCAtIDgpKTsKKwkJZGF0YS0+c3RvcC0+cmVzcFsxXSA9CSgocmVzcG9uc2VbMF0gJiAweGZjMDApID4+IDEwKTsKKwkJZGF0YS0+c3RvcC0+cmVzcFsyXSA9IDA7CisJCWRhdGEtPnN0b3AtPnJlc3BbM10gPSAwOworCisJCWlmIChlcnJfc3RhdHVzICYgTVZTRF9FUlJfQVVUT0NNRDEyKSB7CisJCQl1MzIgZXJyX2NtZDEyID0gbXZzZF9yZWFkKE1WU0RfQVVUT0NNRDEyX0VSUl9TVEFUVVMpOworCQkJZGV2X2RiZyhob3N0LT5kZXYsICJjMTJlcnIgMHglMDR4XG4iLCBlcnJfY21kMTIpOworCQkJaWYgKGVycl9jbWQxMiAmIE1WU0RfQVVUT0NNRDEyX0VSUl9OT1RFWEUpCisJCQkJZGF0YS0+c3RvcC0+ZXJyb3IgPSAtRU5PRVhFQzsKKwkJCWVsc2UgaWYgKGVycl9jbWQxMiAmIE1WU0RfQVVUT0NNRDEyX0VSUl9USU1FT1VUKQorCQkJCWRhdGEtPnN0b3AtPmVycm9yID0gLUVUSU1FRE9VVDsKKwkJCWVsc2UgaWYgKGVycl9jbWQxMikKKwkJCQlkYXRhLT5zdG9wLT5lcnJvciA9IC1FSUxTRVE7CisJCQllcnJfc3RhdHVzICY9IH5NVlNEX0VSUl9BVVRPQ01EMTI7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyX3N0YXR1czsKK30KKworc3RhdGljIGlycXJldHVybl90IG12c2RfaXJxKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gZGV2OworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwl1MzIgaW50cl9zdGF0dXMsIGludHJfZG9uZV9tYXNrOworCWludCBpcnFfaGFuZGxlZCA9IDA7CisKKwlpbnRyX3N0YXR1cyA9IG12c2RfcmVhZChNVlNEX05PUl9JTlRSX1NUQVRVUyk7CisJZGV2X2RiZyhob3N0LT5kZXYsICJpbnRyIDB4JTA0eCBpbnRyX2VuIDB4JTA0eCBod19zdGF0ZSAweCUwNHhcbiIsCisJCWludHJfc3RhdHVzLCBtdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9FTiksCisJCW12c2RfcmVhZChNVlNEX0hXX1NUQVRFKSk7CisKKwlzcGluX2xvY2soJmhvc3QtPmxvY2spOworCisJLyogUElPIGhhbmRsaW5nLCBpZiBuZWVkZWQuIE1lc3N5IGJ1c2luZXNzLi4uICovCisJaWYgKGhvc3QtPnBpb19zaXplICYmCisJICAgIChpbnRyX3N0YXR1cyAmIGhvc3QtPmludHJfZW4gJgorCSAgICAgKE1WU0RfTk9SX1JYX1JFQURZIHwgTVZTRF9OT1JfUlhfRklGT184VykpKSB7CisJCXUxNiAqcCA9IGhvc3QtPnBpb19wdHI7CisJCWludCBzID0gaG9zdC0+cGlvX3NpemU7CisJCXdoaWxlIChzID49IDMyICYmIChpbnRyX3N0YXR1cyAmIE1WU0RfTk9SX1JYX0ZJRk9fOFcpKSB7CisJCQlyZWFkc3coaW9iYXNlICsgTVZTRF9GSUZPLCBwLCAxNik7CisJCQlwICs9IDE2OworCQkJcyAtPSAzMjsKKwkJCWludHJfc3RhdHVzID0gbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfU1RBVFVTKTsKKwkJfQorCQkvKgorCQkgKiBOb3JtYWxseSB3ZSdkIHVzZSA8IDMyIGhlcmUsIGJ1dCB0aGUgUlhfRklGT184VyBiaXQKKwkJICogZG9lc24ndCBhcHBlYXIgdG8gYXNzZXJ0IHdoZW4gdGhlcmUgaXMgZXhhY3RseSAzMiBieXRlcworCQkgKiAoOCB3b3JkcykgbGVmdCB0byBmZXRjaCBpbiBhIHRyYW5zZmVyLgorCQkgKi8KKwkJaWYgKHMgPD0gMzIpIHsKKwkJCXdoaWxlIChzID49IDQgJiYgKGludHJfc3RhdHVzICYgTVZTRF9OT1JfUlhfUkVBRFkpKSB7CisJCQkJcHV0X3VuYWxpZ25lZChtdnNkX3JlYWQoTVZTRF9GSUZPKSwgcCsrKTsKKwkJCQlwdXRfdW5hbGlnbmVkKG12c2RfcmVhZChNVlNEX0ZJRk8pLCBwKyspOworCQkJCXMgLT0gNDsKKwkJCQlpbnRyX3N0YXR1cyA9IG12c2RfcmVhZChNVlNEX05PUl9JTlRSX1NUQVRVUyk7CisJCQl9CisJCQlpZiAocyAmJiBzIDwgNCAmJiAoaW50cl9zdGF0dXMgJiBNVlNEX05PUl9SWF9SRUFEWSkpIHsKKwkJCQl1MTYgdmFsWzJdID0gezAsIDB9OworCQkJCXZhbFswXSA9IG12c2RfcmVhZChNVlNEX0ZJRk8pOworCQkJCXZhbFsxXSA9IG12c2RfcmVhZChNVlNEX0ZJRk8pOworCQkJCW1lbWNweShwLCAmdmFsLCBzKTsKKwkJCQlzID0gMDsKKwkJCQlpbnRyX3N0YXR1cyA9IG12c2RfcmVhZChNVlNEX05PUl9JTlRSX1NUQVRVUyk7CisJCQl9CisJCQlpZiAocyA9PSAwKSB7CisJCQkJaG9zdC0+aW50cl9lbiAmPQorCQkJCSAgICAgfihNVlNEX05PUl9SWF9SRUFEWSB8IE1WU0RfTk9SX1JYX0ZJRk9fOFcpOworCQkJCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgaG9zdC0+aW50cl9lbik7CisJCQl9IGVsc2UgaWYgKGhvc3QtPmludHJfZW4gJiBNVlNEX05PUl9SWF9GSUZPXzhXKSB7CisJCQkJaG9zdC0+aW50cl9lbiAmPSB+TVZTRF9OT1JfUlhfRklGT184VzsKKwkJCQlob3N0LT5pbnRyX2VuIHw9IE1WU0RfTk9SX1JYX1JFQURZOworCQkJCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgaG9zdC0+aW50cl9lbik7CisJCQl9CisJCX0KKwkJZGV2X2RiZyhob3N0LT5kZXYsICJwaW8gJWQgaW50ciAweCUwNHggaHdfc3RhdGUgMHglMDR4XG4iLAorCQkJcywgaW50cl9zdGF0dXMsIG12c2RfcmVhZChNVlNEX0hXX1NUQVRFKSk7CisJCWhvc3QtPnBpb19wdHIgPSBwOworCQlob3N0LT5waW9fc2l6ZSA9IHM7CisJCWlycV9oYW5kbGVkID0gMTsKKwl9IGVsc2UgaWYgKGhvc3QtPnBpb19zaXplICYmCisJCSAgIChpbnRyX3N0YXR1cyAmIGhvc3QtPmludHJfZW4gJgorCQkgICAgKE1WU0RfTk9SX1RYX0FWQUlMIHwgTVZTRF9OT1JfVFhfRklGT184VykpKSB7CisJCXUxNiAqcCA9IGhvc3QtPnBpb19wdHI7CisJCWludCBzID0gaG9zdC0+cGlvX3NpemU7CisJCS8qCisJCSAqIFRoZSBUWF9GSUZPXzhXIGJpdCBpcyB1bnJlbGlhYmxlLiBXaGVuIHNldCwgYnVyc3RpbmcKKwkJICogMTYgaGFsZndvcmRzIGFsbCBhdCBvbmNlIGluIHRoZSBGSUZPIGRyb3BzIGRhdGEuIEFjdHVhbGx5CisJCSAqIFRYX0FWQUlMIGRvZXMgZ28gb2ZmIGFmdGVyIG9ubHkgb25lIHdvcmQgaXMgcHVzaGVkIGV2ZW4gaWYKKwkJICogVFhfRklGT184VyByZW1haW5zIHNldC4KKwkJICovCisJCXdoaWxlIChzID49IDQgJiYgKGludHJfc3RhdHVzICYgTVZTRF9OT1JfVFhfQVZBSUwpKSB7CisJCQltdnNkX3dyaXRlKE1WU0RfRklGTywgZ2V0X3VuYWxpZ25lZChwKyspKTsKKwkJCW12c2Rfd3JpdGUoTVZTRF9GSUZPLCBnZXRfdW5hbGlnbmVkKHArKykpOworCQkJcyAtPSA0OworCQkJaW50cl9zdGF0dXMgPSBtdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9TVEFUVVMpOworCQl9CisJCWlmIChzIDwgNCkgeworCQkJaWYgKHMgJiYgKGludHJfc3RhdHVzICYgTVZTRF9OT1JfVFhfQVZBSUwpKSB7CisJCQkJdTE2IHZhbFsyXSA9IHswLCAwfTsKKwkJCQltZW1jcHkoJnZhbCwgcCwgcyk7CisJCQkJbXZzZF93cml0ZShNVlNEX0ZJRk8sIHZhbFswXSk7CisJCQkJbXZzZF93cml0ZShNVlNEX0ZJRk8sIHZhbFsxXSk7CisJCQkJcyA9IDA7CisJCQkJaW50cl9zdGF0dXMgPSBtdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9TVEFUVVMpOworCQkJfQorCQkJaWYgKHMgPT0gMCkgeworCQkJCWhvc3QtPmludHJfZW4gJj0KKwkJCQkgICAgIH4oTVZTRF9OT1JfVFhfQVZBSUwgfCBNVlNEX05PUl9UWF9GSUZPXzhXKTsKKwkJCQltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIGhvc3QtPmludHJfZW4pOworCQkJfQorCQl9CisJCWRldl9kYmcoaG9zdC0+ZGV2LCAicGlvICVkIGludHIgMHglMDR4IGh3X3N0YXRlIDB4JTA0eFxuIiwKKwkJCXMsIGludHJfc3RhdHVzLCBtdnNkX3JlYWQoTVZTRF9IV19TVEFURSkpOworCQlob3N0LT5waW9fcHRyID0gcDsKKwkJaG9zdC0+cGlvX3NpemUgPSBzOworCQlpcnFfaGFuZGxlZCA9IDE7CisJfQorCisJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX1NUQVRVUywgaW50cl9zdGF0dXMpOworCisJaW50cl9kb25lX21hc2sgPSBNVlNEX05PUl9DQVJEX0lOVCB8IE1WU0RfTk9SX1JYX1JFQURZIHwKKwkJCSBNVlNEX05PUl9SWF9GSUZPXzhXIHwgTVZTRF9OT1JfVFhfRklGT184VzsKKwlpZiAoaW50cl9zdGF0dXMgJiBob3N0LT5pbnRyX2VuICYgfmludHJfZG9uZV9tYXNrKSB7CisJCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxID0gaG9zdC0+bXJxOworCQlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IG1ycS0+Y21kOworCQl1MzIgZXJyX3N0YXR1cyA9IDA7CisKKwkJZGVsX3RpbWVyKCZob3N0LT50aW1lcik7CisJCWhvc3QtPm1ycSA9IE5VTEw7CisKKwkJaG9zdC0+aW50cl9lbiAmPSBNVlNEX05PUl9DQVJEX0lOVDsKKwkJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCBob3N0LT5pbnRyX2VuKTsKKwkJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX0VOLCAwKTsKKworCQlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CisKKwkJaWYgKGludHJfc3RhdHVzICYgTVZTRF9OT1JfVU5FWFBfUlNQKSB7CisJCQljbWQtPmVycm9yID0gLUVQUk9UTzsKKwkJfSBlbHNlIGlmIChpbnRyX3N0YXR1cyAmIE1WU0RfTk9SX0VSUk9SKSB7CisJCQllcnJfc3RhdHVzID0gbXZzZF9yZWFkKE1WU0RfRVJSX0lOVFJfU1RBVFVTKTsKKwkJCWRldl9kYmcoaG9zdC0+ZGV2LCAiZXJyIDB4JTA0eFxuIiwgZXJyX3N0YXR1cyk7CisJCX0KKworCQllcnJfc3RhdHVzID0gbXZzZF9maW5pc2hfY21kKGhvc3QsIGNtZCwgZXJyX3N0YXR1cyk7CisJCWlmIChtcnEtPmRhdGEpCisJCQllcnJfc3RhdHVzID0gbXZzZF9maW5pc2hfZGF0YShob3N0LCBtcnEtPmRhdGEsIGVycl9zdGF0dXMpOworCQlpZiAoZXJyX3N0YXR1cykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5oYW5kbGVkIGVycm9yIHN0YXR1cyAlIzA0eFxuIiwKKwkJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGVycl9zdGF0dXMpOworCQkJY21kLT5lcnJvciA9IC1FTk9NU0c7CisJCX0KKworCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKKwkJaXJxX2hhbmRsZWQgPSAxOworCX0gZWxzZQorCQlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CisKKwlpZiAoaW50cl9zdGF0dXMgJiBNVlNEX05PUl9DQVJEX0lOVCkgeworCQltbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtPm1tYyk7CisJCWlycV9oYW5kbGVkID0gMTsKKwl9CisKKwlpZiAoaXJxX2hhbmRsZWQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuaGFuZGxlZCBpbnRlcnJ1cHQgc3RhdHVzPTB4JTA0eCBlbj0weCUwNHggIgorCQkJInBpbz0lZFxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGludHJfc3RhdHVzLAorCQkJaG9zdC0+aW50cl9lbiwgaG9zdC0+cGlvX3NpemUpOworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIHZvaWQgbXZzZF90aW1lb3V0X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gKHN0cnVjdCBtdnNkX2hvc3QgKilkYXRhOworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwltcnEgPSBob3N0LT5tcnE7CisJaWYgKG1ycSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaW1lb3V0IHdhaXRpbmcgZm9yIGhhcmR3YXJlIGludGVycnVwdC5cbiIsCisJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBod19zdGF0ZT0weCUwNHgsIGludHJfc3RhdHVzPTB4JTA0eCAiCisJCQkJImludHJfZW49MHglMDR4XG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwKKwkJCQltdnNkX3JlYWQoTVZTRF9IV19TVEFURSksCisJCQkJbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfU1RBVFVTKSwKKwkJCQltdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9FTikpOworCisJCWhvc3QtPm1ycSA9IE5VTEw7CisKKwkJbXZzZF93cml0ZShNVlNEX1NXX1JFU0VULCBNVlNEX1NXX1JFU0VUX05PVyk7CisKKwkJaG9zdC0+eGZlcl9tb2RlICY9IE1WU0RfWEZFUl9NT0RFX0lOVF9DSEtfRU47CisJCW12c2Rfd3JpdGUoTVZTRF9YRkVSX01PREUsIGhvc3QtPnhmZXJfbW9kZSk7CisKKwkJaG9zdC0+aW50cl9lbiAmPSBNVlNEX05PUl9DQVJEX0lOVDsKKwkJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCBob3N0LT5pbnRyX2VuKTsKKwkJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX0VOLCAwKTsKKwkJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX1NUQVRVUywgMHhmZmZmKTsKKworCQltcnEtPmNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCQltdnNkX2ZpbmlzaF9jbWQoaG9zdCwgbXJxLT5jbWQsIDApOworCQlpZiAobXJxLT5kYXRhKSB7CisJCQltcnEtPmRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKKwkJCW12c2RfZmluaXNoX2RhdGEoaG9zdCwgbXJxLT5kYXRhLCAwKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAobXJxKQorCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG12c2RfY2FyZF9kZXRlY3RfaXJxKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gZGV2OworCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG12c2RfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZW5hYmxlKSB7CisJCWhvc3QtPnhmZXJfbW9kZSB8PSBNVlNEX1hGRVJfTU9ERV9JTlRfQ0hLX0VOOworCQlob3N0LT5pbnRyX2VuIHw9IE1WU0RfTk9SX0NBUkRfSU5UOworCX0gZWxzZSB7CisJCWhvc3QtPnhmZXJfbW9kZSAmPSB+TVZTRF9YRkVSX01PREVfSU5UX0NIS19FTjsKKwkJaG9zdC0+aW50cl9lbiAmPSB+TVZTRF9OT1JfQ0FSRF9JTlQ7CisJfQorCW12c2Rfd3JpdGUoTVZTRF9YRkVSX01PREUsIGhvc3QtPnhmZXJfbW9kZSk7CisJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCBob3N0LT5pbnRyX2VuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbXZzZF9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlpZiAoaG9zdC0+Z3Bpb193cml0ZV9wcm90ZWN0KQorCQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoaG9zdC0+Z3Bpb193cml0ZV9wcm90ZWN0KTsKKworCS8qCisJICogQm9hcmQgZG9lc24ndCBzdXBwb3J0IHJlYWQgb25seSBkZXRlY3Rpb247IGxldCB0aGUgbW1jIGNvcmUKKwkgKiBkZWNpZGUgd2hhdCB0byBkby4KKwkgKi8KKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIHZvaWQgbXZzZF9wb3dlcl91cChzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0KQoreworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwlkZXZfZGJnKGhvc3QtPmRldiwgInBvd2VyIHVwXG4iKTsKKwltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIDApOworCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9FTiwgMCk7CisJbXZzZF93cml0ZShNVlNEX1NXX1JFU0VULCBNVlNEX1NXX1JFU0VUX05PVyk7CisJbXZzZF93cml0ZShNVlNEX1hGRVJfTU9ERSwgMCk7CisJbXZzZF93cml0ZShNVlNEX05PUl9TVEFUVVNfRU4sIDB4ZmZmZik7CisJbXZzZF93cml0ZShNVlNEX0VSUl9TVEFUVVNfRU4sIDB4ZmZmZik7CisJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX1NUQVRVUywgMHhmZmZmKTsKKwltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfU1RBVFVTLCAweGZmZmYpOworfQorCitzdGF0aWMgdm9pZCBtdnNkX3Bvd2VyX2Rvd24oc3RydWN0IG12c2RfaG9zdCAqaG9zdCkKK3sKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJZGV2X2RiZyhob3N0LT5kZXYsICJwb3dlciBkb3duXG4iKTsKKwltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIDApOworCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9FTiwgMCk7CisJbXZzZF93cml0ZShNVlNEX1NXX1JFU0VULCBNVlNEX1NXX1JFU0VUX05PVyk7CisJbXZzZF93cml0ZShNVlNEX1hGRVJfTU9ERSwgTVZTRF9YRkVSX01PREVfU1RPUF9DTEspOworCW12c2Rfd3JpdGUoTVZTRF9OT1JfU1RBVFVTX0VOLCAwKTsKKwltdnNkX3dyaXRlKE1WU0RfRVJSX1NUQVRVU19FTiwgMCk7CisJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX1NUQVRVUywgMHhmZmZmKTsKKwltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfU1RBVFVTLCAweGZmZmYpOworfQorCitzdGF0aWMgdm9pZCBtdnNkX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCXUzMiBjdHJsX3JlZyA9IDA7CisKKwlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9VUCkKKwkJbXZzZF9wb3dlcl91cChob3N0KTsKKworCWlmIChpb3MtPmNsb2NrID09IDApIHsKKwkJbXZzZF93cml0ZShNVlNEX1hGRVJfTU9ERSwgTVZTRF9YRkVSX01PREVfU1RPUF9DTEspOworCQltdnNkX3dyaXRlKE1WU0RfQ0xLX0RJViwgTVZTRF9CQVNFX0RJVl9NQVgpOworCQlob3N0LT5jbG9jayA9IDA7CisJCWRldl9kYmcoaG9zdC0+ZGV2LCAiY2xvY2sgb2ZmXG4iKTsKKwl9IGVsc2UgaWYgKGlvcy0+Y2xvY2sgIT0gaG9zdC0+Y2xvY2spIHsKKwkJdTMyIG0gPSBESVZfUk9VTkRfVVAoaG9zdC0+YmFzZV9jbG9jaywgaW9zLT5jbG9jaykgLSAxOworCQlpZiAobSA+IE1WU0RfQkFTRV9ESVZfTUFYKQorCQkJbSA9IE1WU0RfQkFTRV9ESVZfTUFYOworCQltdnNkX3dyaXRlKE1WU0RfQ0xLX0RJViwgbSk7CisJCWhvc3QtPmNsb2NrID0gaW9zLT5jbG9jazsKKwkJaG9zdC0+bnNfcGVyX2NsayA9IDEwMDAwMDAwMDAgLyAoaG9zdC0+YmFzZV9jbG9jayAvIChtKzEpKTsKKwkJZGV2X2RiZyhob3N0LT5kZXYsICJjbG9jaz0lZCAoJWQpLCBkaXY9MHglMDR4XG4iLAorCQkJaW9zLT5jbG9jaywgaG9zdC0+YmFzZV9jbG9jayAvIChtKzEpLCBtKTsKKwl9CisKKwkvKiBkZWZhdWx0IHRyYW5zZmVyIG1vZGUgKi8KKwljdHJsX3JlZyB8PSBNVlNEX0hPU1RfQ1RSTF9CSUdfRU5ESUFOOworCWN0cmxfcmVnICY9IH5NVlNEX0hPU1RfQ1RSTF9MU0JfRklSU1Q7CisKKwkvKiBkZWZhdWx0IHRvIG1heGltdW0gdGltZW91dCAqLworCWN0cmxfcmVnIHw9IE1WU0RfSE9TVF9DVFJMX1RNT1VUX01BU0s7CisJY3RybF9yZWcgfD0gTVZTRF9IT1NUX0NUUkxfVE1PVVRfRU47CisKKwlpZiAoaW9zLT5idXNfbW9kZSA9PSBNTUNfQlVTTU9ERV9QVVNIUFVMTCkKKwkJY3RybF9yZWcgfD0gTVZTRF9IT1NUX0NUUkxfUFVTSF9QVUxMX0VOOworCisJaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKKwkJY3RybF9yZWcgfD0gTVZTRF9IT1NUX0NUUkxfREFUQV9XSURUSF80X0JJVFM7CisKKwlpZiAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfSFMgfHwKKwkgICAgaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19TRF9IUykKKwkJY3RybF9yZWcgfD0gTVZTRF9IT1NUX0NUUkxfSElfU1BFRURfRU47CisKKwlob3N0LT5jdHJsID0gY3RybF9yZWc7CisJbXZzZF93cml0ZShNVlNEX0hPU1RfQ1RSTCwgY3RybF9yZWcpOworCWRldl9kYmcoaG9zdC0+ZGV2LCAiY3RybCAweCUwNHg6ICVzICVzICVzXG4iLCBjdHJsX3JlZywKKwkJKGN0cmxfcmVnICYgTVZTRF9IT1NUX0NUUkxfUFVTSF9QVUxMX0VOKSA/CisJCQkicHVzaC1wdWxsIiA6ICJvcGVuLWRyYWluIiwKKwkJKGN0cmxfcmVnICYgTVZTRF9IT1NUX0NUUkxfREFUQV9XSURUSF80X0JJVFMpID8KKwkJCSI0Yml0LXdpZHRoIiA6ICIxYml0LXdpZHRoIiwKKwkJKGN0cmxfcmVnICYgTVZTRF9IT1NUX0NUUkxfSElfU1BFRURfRU4pID8KKwkJCSJoaWdoLXNwZWVkIiA6ICIiKTsKKworCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikKKwkJbXZzZF9wb3dlcl9kb3duKGhvc3QpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtdnNkX29wcyA9IHsKKwkucmVxdWVzdAkJPSBtdnNkX3JlcXVlc3QsCisJLmdldF9ybwkJCT0gbXZzZF9nZXRfcm8sCisJLnNldF9pb3MJCT0gbXZzZF9zZXRfaW9zLAorCS5lbmFibGVfc2Rpb19pcnEJPSBtdnNkX2VuYWJsZV9zZGlvX2lycSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtdl9jb25mX21idXNfd2luZG93cyhzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0LAorCQkJCQlzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvICpkcmFtKQoreworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJd3JpdGVsKDAsIGlvYmFzZSArIE1WU0RfV0lORE9XX0NUUkwoaSkpOworCQl3cml0ZWwoMCwgaW9iYXNlICsgTVZTRF9XSU5ET1dfQkFTRShpKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRyYW0tPm51bV9jczsgaSsrKSB7CisJCXN0cnVjdCBtYnVzX2RyYW1fd2luZG93ICpjcyA9IGRyYW0tPmNzICsgaTsKKwkJd3JpdGVsKCgoY3MtPnNpemUgLSAxKSAmIDB4ZmZmZjAwMDApIHwKKwkJICAgICAgIChjcy0+bWJ1c19hdHRyIDw8IDgpIHwKKwkJICAgICAgIChkcmFtLT5tYnVzX2RyYW1fdGFyZ2V0X2lkIDw8IDQpIHwgMSwKKwkJICAgICAgIGlvYmFzZSArIE1WU0RfV0lORE9XX0NUUkwoaSkpOworCQl3cml0ZWwoY3MtPmJhc2UsIGlvYmFzZSArIE1WU0RfV0lORE9XX0JBU0UoaSkpOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgbXZzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gTlVMTDsKKwlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgKm12c2RfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldCwgaXJxOworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwltdnNkX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXIgfHwgaXJxIDwgMCB8fCAhbXZzZF9kYXRhKQorCQlyZXR1cm4gLUVOWElPOworCisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgU1pfMUssIERSSVZFUl9OQU1FKTsKKwlpZiAoIXIpCisJCXJldHVybiAtRUJVU1k7CisKKwltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IG12c2RfaG9zdCksICZwZGV2LT5kZXYpOworCWlmICghbW1jKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCWhvc3QtPm1tYyA9IG1tYzsKKwlob3N0LT5kZXYgPSAmcGRldi0+ZGV2OworCWhvc3QtPnJlcyA9IHI7CisJaG9zdC0+YmFzZV9jbG9jayA9IG12c2RfZGF0YS0+Y2xvY2sgLyAyOworCisJbW1jLT5vcHMgPSAmbXZzZF9vcHM7CisKKwltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCW1tYy0+Y2FwcyA9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfU0RJT19JUlEgfAorCQkgICAgTU1DX0NBUF9TRF9ISUdIU1BFRUQgfCBNTUNfQ0FQX01NQ19ISUdIU1BFRUQ7CisKKwltbWMtPmZfbWluID0gRElWX1JPVU5EX1VQKGhvc3QtPmJhc2VfY2xvY2ssIE1WU0RfQkFTRV9ESVZfTUFYKTsKKwltbWMtPmZfbWF4ID0gbWF4ZnJlcTsKKworCW1tYy0+bWF4X2Jsa19zaXplID0gMjA0ODsKKwltbWMtPm1heF9ibGtfY291bnQgPSA2NTUzNTsKKworCW1tYy0+bWF4X2h3X3NlZ3MgPSAxOworCW1tYy0+bWF4X3BoeXNfc2VncyA9IDE7CisJbW1jLT5tYXhfc2VnX3NpemUgPSBtbWMtPm1heF9ibGtfc2l6ZSAqIG1tYy0+bWF4X2Jsa19jb3VudDsKKwltbWMtPm1heF9yZXFfc2l6ZSA9IG1tYy0+bWF4X2Jsa19zaXplICogbW1jLT5tYXhfYmxrX2NvdW50OworCisJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOworCisJaG9zdC0+YmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIFNaXzRLKTsKKwlpZiAoIWhvc3QtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogKFJlLSlwcm9ncmFtIE1CVVMgcmVtYXBwaW5nIHdpbmRvd3MgaWYgd2UgYXJlIGFza2VkIHRvLiAqLworCWlmIChtdnNkX2RhdGEtPmRyYW0gIT0gTlVMTCkKKwkJbXZfY29uZl9tYnVzX3dpbmRvd3MoaG9zdCwgbXZzZF9kYXRhLT5kcmFtKTsKKworCW12c2RfcG93ZXJfZG93bihob3N0KTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbXZzZF9pcnEsIDAsIERSSVZFUl9OQU1FLCBob3N0KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhc3NpZ24gaXJxICVkXG4iLCBEUklWRVJfTkFNRSwgaXJxKTsKKwkJZ290byBvdXQ7CisJfSBlbHNlCisJCWhvc3QtPmlycSA9IGlycTsKKworCWlmIChtdnNkX2RhdGEtPmdwaW9fY2FyZF9kZXRlY3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG12c2RfZGF0YS0+Z3Bpb19jYXJkX2RldGVjdCwKKwkJCQkgICBEUklWRVJfTkFNRSAiIGNkIik7CisJCWlmIChyZXQgPT0gMCkgeworCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQobXZzZF9kYXRhLT5ncGlvX2NhcmRfZGV0ZWN0KTsKKwkJCWlycSA9IGdwaW9fdG9faXJxKG12c2RfZGF0YS0+Z3Bpb19jYXJkX2RldGVjdCk7CisJCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIG12c2RfY2FyZF9kZXRlY3RfaXJxLAorCQkJCQkgIElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HLAorCQkJCQkgIERSSVZFUl9OQU1FICIgY2QiLCBob3N0KTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlob3N0LT5ncGlvX2NhcmRfZGV0ZWN0ID0KKwkJCQkJbXZzZF9kYXRhLT5ncGlvX2NhcmRfZGV0ZWN0OworCQkJZWxzZQorCQkJCWdwaW9fZnJlZShtdnNkX2RhdGEtPmdwaW9fY2FyZF9kZXRlY3QpOworCQl9CisJfQorCWlmICghaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCkKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKKworCWlmIChtdnNkX2RhdGEtPmdwaW9fd3JpdGVfcHJvdGVjdCkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QobXZzZF9kYXRhLT5ncGlvX3dyaXRlX3Byb3RlY3QsCisJCQkJICAgRFJJVkVSX05BTUUgIiB3cCIpOworCQlpZiAocmV0ID09IDApIHsKKwkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KG12c2RfZGF0YS0+Z3Bpb193cml0ZV9wcm90ZWN0KTsKKwkJCWhvc3QtPmdwaW9fd3JpdGVfcHJvdGVjdCA9CisJCQkJbXZzZF9kYXRhLT5ncGlvX3dyaXRlX3Byb3RlY3Q7CisJCX0KKwl9CisKKwlzZXR1cF90aW1lcigmaG9zdC0+dGltZXIsIG12c2RfdGltZW91dF90aW1lciwgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKKwlyZXQgPSBtbWNfYWRkX2hvc3QobW1jKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXByaW50ayhLRVJOX05PVElDRSAiJXM6ICVzIGRyaXZlciBpbml0aWFsaXplZCwgIiwKKwkJCSAgIG1tY19ob3N0bmFtZShtbWMpLCBEUklWRVJfTkFNRSk7CisJaWYgKGhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpCisJCXByaW50aygidXNpbmcgR1BJTyAlZCBmb3IgY2FyZCBkZXRlY3Rpb25cbiIsCisJCSAgICAgICBob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KTsKKwllbHNlCisJCXByaW50aygibGFja2luZyBjYXJkIGRldGVjdCAoZmFsbCBiYWNrIHRvIHBvbGxpbmcpXG4iKTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChob3N0KSB7CisJCWlmIChob3N0LT5pcnEpCisJCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworCQlpZiAoaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCkgeworCQkJZnJlZV9pcnEoZ3Bpb190b19pcnEoaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCksIGhvc3QpOworCQkJZ3Bpb19mcmVlKGhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpOworCQl9CisJCWlmIChob3N0LT5ncGlvX3dyaXRlX3Byb3RlY3QpCisJCQlncGlvX2ZyZWUoaG9zdC0+Z3Bpb193cml0ZV9wcm90ZWN0KTsKKwkJaWYgKGhvc3QtPmJhc2UpCisJCQlpb3VubWFwKGhvc3QtPmJhc2UpOworCX0KKwlpZiAocikKKwkJcmVsZWFzZV9yZXNvdXJjZShyKTsKKwlpZiAobW1jKQorCQltbWNfZnJlZV9ob3N0KG1tYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBtdnNkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAobW1jKSB7CisJCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJCWlmIChob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KSB7CisJCQlmcmVlX2lycShncGlvX3RvX2lycShob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KSwgaG9zdCk7CisJCQlncGlvX2ZyZWUoaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCk7CisJCX0KKwkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CisJCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CisJCWlmIChob3N0LT5ncGlvX3dyaXRlX3Byb3RlY3QpCisJCQlncGlvX2ZyZWUoaG9zdC0+Z3Bpb193cml0ZV9wcm90ZWN0KTsKKwkJZGVsX3RpbWVyX3N5bmMoJmhvc3QtPnRpbWVyKTsKKwkJbXZzZF9wb3dlcl9kb3duKGhvc3QpOworCQlpb3VubWFwKGhvc3QtPmJhc2UpOworCQlyZWxlYXNlX3Jlc291cmNlKGhvc3QtPnJlcyk7CisJCW1tY19mcmVlX2hvc3QobW1jKTsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbXZzZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLAorCQkJICAgdTMyIGxldmVsKQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtbWMgJiYgbGV2ZWwgPT0gU1VTUEVORF9ESVNBQkxFKQorCQlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KG1tYywgc3RhdGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdnNkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2Rldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSAwOworCisJaWYgKG1tYyAmJiBsZXZlbCA9PSBSRVNVTUVfRU5BQkxFKQorCQlyZXQgPSBtbWNfcmVzdW1lX2hvc3QobW1jKTsKKworCXJldHVybiByZXQ7Cit9CisjZWxzZQorI2RlZmluZSBtdnNkX3N1c3BlbmQJTlVMTAorI2RlZmluZSBtdnNkX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZzZF9kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2V4aXRfcChtdnNkX3JlbW92ZSksCisJLnN1c3BlbmQJPSBtdnNkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBtdnNkX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXZzZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXZzZF9kcml2ZXIsIG12c2RfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXZzZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12c2RfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXZzZF9pbml0KTsKK21vZHVsZV9leGl0KG12c2RfZXhpdCk7CisKKy8qIG1heGltdW0gY2FyZCBjbG9jayBmcmVxdWVuY3kgKGRlZmF1bHQgNTBNSHopICovCittb2R1bGVfcGFyYW0obWF4ZnJlcSwgaW50LCAwKTsKKworLyogZm9yY2UgUElPIHRyYW5zZmVycyBhbGwgdGhlIHRpbWUgKi8KK21vZHVsZV9wYXJhbShub2RtYSwgaW50LCAwKTsKKworTU9EVUxFX0FVVEhPUigiTWFlbiBTdWxlaW1hbiwgTmljb2xhcyBQaXRyZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIE1NQyxTRCxTRElPIEhvc3QgQ29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmggYi9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOTcyN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5oCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3JzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX01WU0RJT19ICisjZGVmaW5lIF9fTVZTRElPX0gKKworLyoKKyAqIENsb2NrIHJhdGVzCisgKi8KKworI2RlZmluZSBNVlNEX0NMT0NLUkFURV9NQVgJCQk1MDAwMDAwMAorI2RlZmluZSBNVlNEX0JBU0VfRElWX01BWAkJCTB4N2ZmCisKKworLyoKKyAqIFJlZ2lzdGVyIG9mZnNldHMKKyAqLworCisjZGVmaW5lIE1WU0RfU1lTX0FERFJfTE9XCQkJMHgwMDAKKyNkZWZpbmUgTVZTRF9TWVNfQUREUl9ISQkJCTB4MDA0CisjZGVmaW5lIE1WU0RfQkxLX1NJWkUJCQkJMHgwMDgKKyNkZWZpbmUgTVZTRF9CTEtfQ09VTlQJCQkJMHgwMGMKKyNkZWZpbmUgTVZTRF9BUkdfTE9XCQkJCTB4MDEwCisjZGVmaW5lIE1WU0RfQVJHX0hJCQkJCTB4MDE0CisjZGVmaW5lIE1WU0RfWEZFUl9NT0RFCQkJCTB4MDE4CisjZGVmaW5lIE1WU0RfQ01ECQkJCTB4MDFjCisjZGVmaW5lIE1WU0RfUlNQKGkpCQkJCSgweDAyMCArICgoaSk8PDIpKQorI2RlZmluZSBNVlNEX1JTUDAJCQkJMHgwMjAKKyNkZWZpbmUgTVZTRF9SU1AxCQkJCTB4MDI0CisjZGVmaW5lIE1WU0RfUlNQMgkJCQkweDAyOAorI2RlZmluZSBNVlNEX1JTUDMJCQkJMHgwMmMKKyNkZWZpbmUgTVZTRF9SU1A0CQkJCTB4MDMwCisjZGVmaW5lIE1WU0RfUlNQNQkJCQkweDAzNAorI2RlZmluZSBNVlNEX1JTUDYJCQkJMHgwMzgKKyNkZWZpbmUgTVZTRF9SU1A3CQkJCTB4MDNjCisjZGVmaW5lIE1WU0RfRklGTwkJCQkweDA0MAorI2RlZmluZSBNVlNEX1JTUF9DUkM3CQkJCTB4MDQ0CisjZGVmaW5lIE1WU0RfSFdfU1RBVEUJCQkJMHgwNDgKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkwJCQkJMHgwNTAKKyNkZWZpbmUgTVZTRF9CTEtfR0FQX0NUUkwJCQkweDA1NAorI2RlZmluZSBNVlNEX0NMS19DVFJMCQkJCTB4MDU4CisjZGVmaW5lIE1WU0RfU1dfUkVTRVQJCQkJMHgwNWMKKyNkZWZpbmUgTVZTRF9OT1JfSU5UUl9TVEFUVVMJCQkweDA2MAorI2RlZmluZSBNVlNEX0VSUl9JTlRSX1NUQVRVUwkJCTB4MDY0CisjZGVmaW5lIE1WU0RfTk9SX1NUQVRVU19FTgkJCTB4MDY4CisjZGVmaW5lIE1WU0RfRVJSX1NUQVRVU19FTgkJCTB4MDZjCisjZGVmaW5lIE1WU0RfTk9SX0lOVFJfRU4JCQkweDA3MAorI2RlZmluZSBNVlNEX0VSUl9JTlRSX0VOCQkJMHgwNzQKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfRVJSX1NUQVRVUwkJMHgwNzgKKyNkZWZpbmUgTVZTRF9DVVJSX0JZVEVfTEVGVAkJCTB4MDdjCisjZGVmaW5lIE1WU0RfQ1VSUl9CTEtfTEVGVAkJCTB4MDgwCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0FSR19MT1cJCQkweDA4NAorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9BUkdfSEkJCQkweDA4OAorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9DTUQJCQkweDA4YworI2RlZmluZSBNVlNEX0FVVE9fUlNQKGkpCQkJKDB4MDkwICsgKChpKTw8MikpCisjZGVmaW5lIE1WU0RfQVVUT19SU1AwCQkJCTB4MDkwCisjZGVmaW5lIE1WU0RfQVVUT19SU1AxCQkJCTB4MDk0CisjZGVmaW5lIE1WU0RfQVVUT19SU1AyCQkJCTB4MDk4CisjZGVmaW5lIE1WU0RfQ0xLX0RJVgkJCQkweDEyOAorCisjZGVmaW5lIE1WU0RfV0lORE9XX0NUUkwoaSkJCQkoMHgxMDggKyAoKGkpIDw8IDMpKQorI2RlZmluZSBNVlNEX1dJTkRPV19CQVNFKGkpCQkJKDB4MTBjICsgKChpKSA8PCAzKSkKKworCisvKgorICogTVZTRF9DTUQKKyAqLworCisjZGVmaW5lIE1WU0RfQ01EX1JTUF9OT05FCQkJKDAgPDwgMCkKKyNkZWZpbmUgTVZTRF9DTURfUlNQXzEzNgkJCSgxIDw8IDApCisjZGVmaW5lIE1WU0RfQ01EX1JTUF80OAkJCQkoMiA8PCAwKQorI2RlZmluZSBNVlNEX0NNRF9SU1BfNDhCVVNZCQkJKDMgPDwgMCkKKworI2RlZmluZSBNVlNEX0NNRF9DSEVDS19EQVRBQ1JDMTYJCSgxIDw8IDIpCisjZGVmaW5lIE1WU0RfQ01EX0NIRUNLX0NNRENSQwkJCSgxIDw8IDMpCisjZGVmaW5lIE1WU0RfQ01EX0lORFhfQ0hFQ0sJCQkoMSA8PCA0KQorI2RlZmluZSBNVlNEX0NNRF9EQVRBX1BSRVNFTlQJCQkoMSA8PCA1KQorI2RlZmluZSBNVlNEX1VORVhQRUNURURfUkVTUAkJCSgxIDw8IDcpCisjZGVmaW5lIE1WU0RfQ01EX0lOREVYKHgpCQkJKCh4KSA8PCA4KQorCisKKy8qCisgKiBNVlNEX0FVVE9DTUQxMl9DTUQKKyAqLworCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0JVU1kJCQkoMSA8PCAwKQorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9JTkRYX0NIRUNLCQkoMSA8PCAxKQorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9JTkRFWCh4KQkJCSgoeCkgPDwgOCkKKworLyoKKyAqIE1WU0RfWEZFUl9NT0RFCisgKi8KKworI2RlZmluZSBNVlNEX1hGRVJfTU9ERV9XUl9EQVRBX1NUQVJUCQkoMSA8PCAwKQorI2RlZmluZSBNVlNEX1hGRVJfTU9ERV9IV19XUl9EQVRBX0VOCQkoMSA8PCAxKQorI2RlZmluZSBNVlNEX1hGRVJfTU9ERV9BVVRPX0NNRDEyCQkoMSA8PCAyKQorI2RlZmluZSBNVlNEX1hGRVJfTU9ERV9JTlRfQ0hLX0VOCQkoMSA8PCAzKQorI2RlZmluZSBNVlNEX1hGRVJfTU9ERV9UT19IT1NUCQkJKDEgPDwgNCkKKyNkZWZpbmUgTVZTRF9YRkVSX01PREVfU1RPUF9DTEsJCQkoMSA8PCA1KQorI2RlZmluZSBNVlNEX1hGRVJfTU9ERV9QSU8JCQkoMSA8PCA2KQorCisKKy8qCisgKiBNVlNEX0hPU1RfQ1RSTAorICovCisKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfUFVTSF9QVUxMX0VOIAkJKDEgPDwgMCkKKworI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9DQVJEX1RZUEVfTUVNX09OTFkgCSgwIDw8IDEpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0NBUkRfVFlQRV9JT19PTkxZIAkoMSA8PCAxKQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9DQVJEX1RZUEVfSU9fTUVNX0NPTUJPIAkoMiA8PCAxKQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9DQVJEX1RZUEVfSU9fTU1DIAkoMyA8PCAxKQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9DQVJEX1RZUEVfTUFTSwkgCSgzIDw8IDEpCisKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfQklHX0VORElBTiAJCSgxIDw8IDMpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0xTQl9GSVJTVCAJCSgxIDw8IDQpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0RBVEFfV0lEVEhfNF9CSVRTIAkoMSA8PCA5KQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9ISV9TUEVFRF9FTiAJCSgxIDw8IDEwKQorCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX1RNT1VUX01BWCAJCTB4ZgorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9UTU9VVF9NQVNLIAkJKDB4ZiA8PCAxMSkKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfVE1PVVQoeCkgCQkoKHgpIDw8IDExKQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9UTU9VVF9FTiAJCSgxIDw8IDE1KQorCisKKy8qCisgKiBNVlNEX1NXX1JFU0VUCisgKi8KKworI2RlZmluZSBNVlNEX1NXX1JFU0VUX05PVwkJCSgxIDw8IDgpCisKKworLyoKKyAqIE5vcm1hbCBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMKKyAqLworCisjZGVmaW5lIE1WU0RfTk9SX0NNRF9ET05FCQkJKDEgPDwgMCkKKyNkZWZpbmUgTVZTRF9OT1JfWEZFUl9ET05FCQkJKDEgPDwgMSkKKyNkZWZpbmUgTVZTRF9OT1JfQkxLX0dBUF9FVlQJCQkoMSA8PCAyKQorI2RlZmluZSBNVlNEX05PUl9ETUFfRE9ORQkJCSgxIDw8IDMpCisjZGVmaW5lIE1WU0RfTk9SX1RYX0FWQUlMCQkJKDEgPDwgNCkKKyNkZWZpbmUgTVZTRF9OT1JfUlhfUkVBRFkJCQkoMSA8PCA1KQorI2RlZmluZSBNVlNEX05PUl9DQVJEX0lOVAkJCSgxIDw8IDgpCisjZGVmaW5lIE1WU0RfTk9SX1JFQURfV0FJVF9PTgkJCSgxIDw8IDkpCisjZGVmaW5lIE1WU0RfTk9SX1JYX0ZJRk9fOFcJCQkoMSA8PCAxMCkKKyNkZWZpbmUgTVZTRF9OT1JfVFhfRklGT184VwkJCSgxIDw8IDExKQorI2RlZmluZSBNVlNEX05PUl9TVVNQRU5EX09OCQkJKDEgPDwgMTIpCisjZGVmaW5lIE1WU0RfTk9SX0FVVE9DTUQxMl9ET05FCQkJKDEgPDwgMTMpCisjZGVmaW5lIE1WU0RfTk9SX1VORVhQX1JTUAkJCSgxIDw8IDE0KQorI2RlZmluZSBNVlNEX05PUl9FUlJPUgkJCQkoMSA8PCAxNSkKKworCisvKgorICogRXJyb3Igc3RhdHVzIGJpdHMKKyAqLworCisjZGVmaW5lIE1WU0RfRVJSX0NNRF9USU1FT1VUCQkJKDEgPDwgMCkKKyNkZWZpbmUgTVZTRF9FUlJfQ01EX0NSQwkJCSgxIDw8IDEpCisjZGVmaW5lIE1WU0RfRVJSX0NNRF9FTkRCSVQJCQkoMSA8PCAyKQorI2RlZmluZSBNVlNEX0VSUl9DTURfSU5ERVgJCQkoMSA8PCAzKQorI2RlZmluZSBNVlNEX0VSUl9EQVRBX1RJTUVPVVQJCQkoMSA8PCA0KQorI2RlZmluZSBNVlNEX0VSUl9EQVRBX0NSQwkJCSgxIDw8IDUpCisjZGVmaW5lIE1WU0RfRVJSX0RBVEFfRU5EQklUCQkJKDEgPDwgNikKKyNkZWZpbmUgTVZTRF9FUlJfQVVUT0NNRDEyCQkJKDEgPDwgOCkKKyNkZWZpbmUgTVZTRF9FUlJfQ01EX1NUQVJUQklUCQkJKDEgPDwgOSkKKyNkZWZpbmUgTVZTRF9FUlJfWEZFUl9TSVpFCQkJKDEgPDwgMTApCisjZGVmaW5lIE1WU0RfRVJSX1JFU1BfVF9CSVQJCQkoMSA8PCAxMSkKKyNkZWZpbmUgTVZTRF9FUlJfQ1JDX0VOREJJVAkJCSgxIDw8IDEyKQorI2RlZmluZSBNVlNEX0VSUl9DUkNfU1RBUlRCSVQJCQkoMSA8PCAxMykKKyNkZWZpbmUgTVZTRF9FUlJfQ1JDX1NUQVRVUwkJCSgxIDw8IDE0KQorCisKKy8qCisgKiBDTUQxMiBlcnJvciBzdGF0dXMgYml0cworICovCisKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfRVJSX05PVEVYRQkJKDEgPDwgMCkKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfRVJSX1RJTUVPVVQJCSgxIDw8IDEpCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0VSUl9DUkMJCQkoMSA8PCAyKQorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9FUlJfRU5EQklUCQkoMSA8PCAzKQorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9FUlJfSU5ERVgJCSgxIDw8IDQpCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0VSUl9SRVNQX1RfQklUCQkoMSA8PCA1KQorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9FUlJfUkVTUF9TVEFSVEJJVAkoMSA8PCA2KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggMzkxNmE1Ni4uZDE4M2JlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNkZWZpbmUgU0RWUzE4CQkJKDB4NSA8PCA5KQogI2RlZmluZSBTRFZTMzAJCQkoMHg2IDw8IDkpCiAjZGVmaW5lIFNEVlMzMwkJCSgweDcgPDwgOSkKKyNkZWZpbmUgU0RWU19NQVNLCQkweDAwMDAwRTAwCiAjZGVmaW5lIFNEVlNDTFIJCQkweEZGRkZGMUZGCiAjZGVmaW5lIFNEVlNERVQJCQkweDAwMDAwNDAwCiAjZGVmaW5lIEFVVE9JRExFCQkweDEKQEAgLTc2LDYgKzc3LDcgQEAKICNkZWZpbmUgTVNCUwkJCSgxIDw8IDUpCiAjZGVmaW5lIEJDRQkJCSgxIDw8IDEpCiAjZGVmaW5lIEZPVVJfQklUCQkoMSA8PCAxKQorI2RlZmluZSBEVzgJCQkoMSA8PCA1KQogI2RlZmluZSBDQwkJCTB4MQogI2RlZmluZSBUQwkJCTB4MDIKICNkZWZpbmUgT0QJCQkweDEKQEAgLTk4LDEwICsxMDAsOCBAQAogICovCiAjZGVmaW5lIE9NQVBfTU1DMV9ERVZJRAkJMAogI2RlZmluZSBPTUFQX01NQzJfREVWSUQJCTEKKyNkZWZpbmUgT01BUF9NTUMzX0RFVklECQkyCiAKLSNkZWZpbmUgT01BUF9NTUNfREFUQURJUl9OT05FCTAKLSNkZWZpbmUgT01BUF9NTUNfREFUQURJUl9SRUFECTEKLSNkZWZpbmUgT01BUF9NTUNfREFUQURJUl9XUklURQkyCiAjZGVmaW5lIE1NQ19USU1FT1VUX01TCQkyMAogI2RlZmluZSBPTUFQX01NQ19NQVNURVJfQ0xPQ0sJOTYwMDAwMDAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJtbWNpLW9tYXAtaHMiCkBAIC0xMzcsMTggKzEzNywxOCBAQAogCXJlc291cmNlX3NpemVfdAkJbWFwYmFzZTsKIAl1bnNpZ25lZCBpbnQJCWlkOwogCXVuc2lnbmVkIGludAkJZG1hX2xlbjsKLQl1bnNpZ25lZCBpbnQJCWRtYV9kaXI7CisJdW5zaWduZWQgaW50CQlkbWFfc2dfaWR4OwogCXVuc2lnbmVkIGNoYXIJCWJ1c19tb2RlOwotCXVuc2lnbmVkIGNoYXIJCWRhdGFkaXI7CiAJdTMyCQkJKmJ1ZmZlcjsKIAl1MzIJCQlieXRlc2xlZnQ7CiAJaW50CQkJc3VzcGVuZGVkOwogCWludAkJCWlycTsKIAlpbnQJCQljYXJkZGV0ZWN0OwogCWludAkJCXVzZV9kbWEsIGRtYV9jaDsKLQlpbnQJCQlpbml0c3RyOworCWludAkJCWRtYV9saW5lX3R4LCBkbWFfbGluZV9yeDsKIAlpbnQJCQlzbG90X2lkOwogCWludAkJCWRiY2xrX2VuYWJsZWQ7CisJaW50CQkJcmVzcG9uc2VfYnVzeTsKIAlzdHJ1Y3QJb21hcF9tbWNfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CiB9OwogCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJc3RydWN0IG9tYXBfbW1jX3Nsb3RfZGF0YSBzbG90ID0gaG9zdC0+cGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAic2xvdDolc1xuIiwgc2xvdC5uYW1lKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc2xvdC5uYW1lKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKHNsb3RfbmFtZSwgU19JUlVHTywgbW1jX29tYXBfc2hvd19zbG90X25hbWUsIE5VTEwpOwpAQCAtMjQzLDEwICsyNDMsMTQgQEAKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElTRSwgSU5UX0VOX01BU0spOwogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIElOVF9FTl9NQVNLKTsKIAorCWhvc3QtPnJlc3BvbnNlX2J1c3kgPSAwOwogCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CiAJCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpCiAJCQlyZXNwdHlwZSA9IDE7Ci0JCWVsc2UKKwkJZWxzZSBpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfQlVTWSkgeworCQkJcmVzcHR5cGUgPSAzOworCQkJaG9zdC0+cmVzcG9uc2VfYnVzeSA9IDE7CisJCX0gZWxzZQogCQkJcmVzcHR5cGUgPSAyOwogCX0KIApAQCAtMjc1LDE5ICsyNzksMzUgQEAKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENNRCwgY21kcmVnKTsKIH0KIAorc3RhdGljIGludAorbW1jX29tYXBfZ2V0X2RtYV9kaXIoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJcmV0dXJuIERNQV9UT19ERVZJQ0U7CisJZWxzZQorCQlyZXR1cm4gRE1BX0ZST01fREVWSUNFOworfQorCiAvKgogICogTm90aWZ5IHRoZSB0cmFuc2ZlciBjb21wbGV0ZSB0byBNTUMgY29yZQogICovCiBzdGF0aWMgdm9pZAogbW1jX29tYXBfeGZlcl9kb25lKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CisJaWYgKCFkYXRhKSB7CisJCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxID0gaG9zdC0+bXJxOworCisJCWhvc3QtPm1ycSA9IE5VTEw7CisJCW1tY19vbWFwX2ZjbGtfbGF6eV9kaXNhYmxlKGhvc3QpOworCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKKwkJcmV0dXJuOworCX0KKwogCWhvc3QtPmRhdGEgPSBOVUxMOwogCiAJaWYgKGhvc3QtPnVzZV9kbWEgJiYgaG9zdC0+ZG1hX2NoICE9IC0xKQogCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgaG9zdC0+ZG1hX2xlbiwKLQkJCWhvc3QtPmRtYV9kaXIpOwotCi0JaG9zdC0+ZGF0YWRpciA9IE9NQVBfTU1DX0RBVEFESVJfTk9ORTsKKwkJCW1tY19vbWFwX2dldF9kbWFfZGlyKGhvc3QsIGRhdGEpKTsKIAogCWlmICghZGF0YS0+ZXJyb3IpCiAJCWRhdGEtPmJ5dGVzX3hmZXJlZCArPSBkYXRhLT5ibG9ja3MgKiAoZGF0YS0+Ymxrc3opOwpAQCAtMzIyLDcgKzM0Miw3IEBACiAJCQljbWQtPnJlc3BbMF0gPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgUlNQMTApOwogCQl9CiAJfQotCWlmIChob3N0LT5kYXRhID09IE5VTEwgfHwgY21kLT5lcnJvcikgeworCWlmICgoaG9zdC0+ZGF0YSA9PSBOVUxMICYmICFob3N0LT5yZXNwb25zZV9idXN5KSB8fCBjbWQtPmVycm9yKSB7CiAJCWhvc3QtPm1ycSA9IE5VTEw7CiAJCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBjbWQtPm1ycSk7CiAJfQpAQCAtMzMxLDE5ICszNTEsMTggQEAKIC8qCiAgKiBETUEgY2xlYW4gdXAgZm9yIGNvbW1hbmQgZXJyb3JzCiAgKi8KLXN0YXRpYyB2b2lkIG1tY19kbWFfY2xlYW51cChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCkKK3N0YXRpYyB2b2lkIG1tY19kbWFfY2xlYW51cChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgaW50IGVycm5vKQogewotCWhvc3QtPmRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKKwlob3N0LT5kYXRhLT5lcnJvciA9IGVycm5vOwogCiAJaWYgKGhvc3QtPnVzZV9kbWEgJiYgaG9zdC0+ZG1hX2NoICE9IC0xKSB7CiAJCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGhvc3QtPmRhdGEtPnNnLCBob3N0LT5kbWFfbGVuLAotCQkJaG9zdC0+ZG1hX2Rpcik7CisJCQltbWNfb21hcF9nZXRfZG1hX2Rpcihob3N0LCBob3N0LT5kYXRhKSk7CiAJCW9tYXBfZnJlZV9kbWEoaG9zdC0+ZG1hX2NoKTsKIAkJaG9zdC0+ZG1hX2NoID0gLTE7CiAJCXVwKCZob3N0LT5zZW0pOwogCX0KIAlob3N0LT5kYXRhID0gTlVMTDsKLQlob3N0LT5kYXRhZGlyID0gT01BUF9NTUNfREFUQURJUl9OT05FOwogfQogCiAvKgpAQCAtNDEyLDcgKzQzMSw3IEBACiAJc3RydWN0IG1tY19kYXRhICpkYXRhOwogCWludCBlbmRfY21kID0gMCwgZW5kX3RyYW5zID0gMCwgc3RhdHVzOwogCi0JaWYgKGhvc3QtPmNtZCA9PSBOVUxMICYmIGhvc3QtPmRhdGEgPT0gTlVMTCkgeworCWlmIChob3N0LT5tcnEgPT0gTlVMTCkgewogCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIFNUQVQsCiAJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1RBVCkpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00MzcsMTggKzQ1NiwyNCBAQAogCQkJCX0KIAkJCQllbmRfY21kID0gMTsKIAkJCX0KLQkJCWlmIChob3N0LT5kYXRhKSB7Ci0JCQkJbW1jX2RtYV9jbGVhbnVwKGhvc3QpOworCQkJaWYgKGhvc3QtPmRhdGEgfHwgaG9zdC0+cmVzcG9uc2VfYnVzeSkgeworCQkJCWlmIChob3N0LT5kYXRhKQorCQkJCQltbWNfZG1hX2NsZWFudXAoaG9zdCwgLUVUSU1FRE9VVCk7CisJCQkJaG9zdC0+cmVzcG9uc2VfYnVzeSA9IDA7CiAJCQkJbW1jX29tYXBfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKIAkJCX0KIAkJfQogCQlpZiAoKHN0YXR1cyAmIERBVEFfVElNRU9VVCkgfHwKIAkJCShzdGF0dXMgJiBEQVRBX0NSQykpIHsKLQkJCWlmIChob3N0LT5kYXRhKSB7Ci0JCQkJaWYgKHN0YXR1cyAmIERBVEFfVElNRU9VVCkKLQkJCQkJbW1jX2RtYV9jbGVhbnVwKGhvc3QpOworCQkJaWYgKGhvc3QtPmRhdGEgfHwgaG9zdC0+cmVzcG9uc2VfYnVzeSkgeworCQkJCWludCBlcnIgPSAoc3RhdHVzICYgREFUQV9USU1FT1VUKSA/CisJCQkJCQktRVRJTUVET1VUIDogLUVJTFNFUTsKKworCQkJCWlmIChob3N0LT5kYXRhKQorCQkJCQltbWNfZG1hX2NsZWFudXAoaG9zdCwgZXJyKTsKIAkJCQllbHNlCi0JCQkJCWhvc3QtPmRhdGEtPmVycm9yID0gLUVJTFNFUTsKKwkJCQkJaG9zdC0+bXJxLT5jbWQtPmVycm9yID0gZXJyOworCQkJCWhvc3QtPnJlc3BvbnNlX2J1c3kgPSAwOwogCQkJCW1tY19vbWFwX3Jlc2V0X2NvbnRyb2xsZXJfZnNtKGhvc3QsIFNSRCk7CiAJCQkJZW5kX3RyYW5zID0gMTsKIAkJCX0KQEAgLTQ3Myw2ICs0OTgsMTkgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9zZF9idXNfcG93ZXIoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAorCQkJIE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSB8IFNEQlApOworCWZvciAoaSA9IDA7IGkgPCBsb29wc19wZXJfamlmZnk7IGkrKykgeworCQlpZiAoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgU0RCUCkKKwkJCWJyZWFrOworCQljcHVfcmVsYXgoKTsKKwl9Cit9CisKIC8qCiAgKiBTd2l0Y2ggTU1DIGludGVyZmFjZSB2b2x0YWdlIC4uLiBvbmx5IHJlbGV2YW50IGZvciBNTUMxLgogICoKQEAgLTQ4NSw5ICs1MjMsNiBAQAogCXUzMiByZWdfdmFsID0gMDsKIAlpbnQgcmV0OwogCi0JaWYgKGhvc3QtPmlkICE9IE9NQVBfTU1DMV9ERVZJRCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBEaXNhYmxlIHRoZSBjbG9ja3MgKi8KIAljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKIAljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKQEAgLTUzMiw5ICs1NjcsNyBAQAogCQlyZWdfdmFsIHw9IFNEVlMzMDsKIAogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwgcmVnX3ZhbCk7Ci0KLQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCi0JCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSB8IFNEQlApOworCXNldF9zZF9idXNfcG93ZXIoaG9zdCk7CiAKIAlyZXR1cm4gMDsKIGVycjoKQEAgLTU1MSw3ICs1ODQsMTAgQEAKIAkJCQkJCW1tY19jYXJkZGV0ZWN0X3dvcmspOwogCXN0cnVjdCBvbWFwX21tY19zbG90X2RhdGEgKnNsb3QgPSAmbW1jX3Nsb3QoaG9zdCk7CiAKLQlob3N0LT5jYXJkZGV0ZWN0ID0gc2xvdC0+Y2FyZF9kZXRlY3Qoc2xvdC0+Y2FyZF9kZXRlY3RfaXJxKTsKKwlpZiAobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QpCisJCWhvc3QtPmNhcmRkZXRlY3QgPSBzbG90LT5jYXJkX2RldGVjdChzbG90LT5jYXJkX2RldGVjdF9pcnEpOworCWVsc2UKKwkJaG9zdC0+Y2FyZGRldGVjdCA9IC1FTk9TWVM7CiAKIAlzeXNmc19ub3RpZnkoJmhvc3QtPm1tYy0+Y2xhc3NfZGV2LmtvYmosIE5VTEwsICJjb3Zlcl9zd2l0Y2giKTsKIAlpZiAoaG9zdC0+Y2FyZGRldGVjdCkgewpAQCAtNTc0LDYgKzYxMCw0OCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGludCBtbWNfb21hcF9nZXRfZG1hX3N5bmNfZGV2KHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAorCQkJCSAgICAgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCWludCBzeW5jX2RldjsKKworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQlzeW5jX2RldiA9IGhvc3QtPmRtYV9saW5lX3R4OworCWVsc2UKKwkJc3luY19kZXYgPSBob3N0LT5kbWFfbGluZV9yeDsKKwlyZXR1cm4gc3luY19kZXY7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW1zKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAorCQkJCSAgICAgICBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEsCisJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsKQoreworCWludCBibGtzeiwgbmJsaywgZG1hX2NoOworCisJZG1hX2NoID0gaG9zdC0+ZG1hX2NoOworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSB7CisJCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhkbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAorCQkJKGhvc3QtPm1hcGJhc2UgKyBPTUFQX0hTTU1DX0RBVEEpLCAwLCAwKTsKKwkJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoZG1hX2NoLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCXNnX2RtYV9hZGRyZXNzKHNnbCksIDAsIDApOworCX0gZWxzZSB7CisJCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCisJCQkJCShob3N0LT5tYXBiYXNlICsgT01BUF9IU01NQ19EQVRBKSwgMCwgMCk7CisJCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhkbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJc2dfZG1hX2FkZHJlc3Moc2dsKSwgMCwgMCk7CisJfQorCisJYmxrc3ogPSBob3N0LT5kYXRhLT5ibGtzejsKKwluYmxrID0gc2dfZG1hX2xlbihzZ2wpIC8gYmxrc3o7CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGRtYV9jaCwgT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKKwkJCWJsa3N6IC8gNCwgbmJsaywgT01BUF9ETUFfU1lOQ19GUkFNRSwKKwkJCW1tY19vbWFwX2dldF9kbWFfc3luY19kZXYoaG9zdCwgZGF0YSksCisJCQkhKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpKTsKKworCW9tYXBfc3RhcnRfZG1hKGRtYV9jaCk7Cit9CisKIC8qCiAgKiBETUEgY2FsbCBiYWNrIGZ1bmN0aW9uCiAgKi8KQEAgLTU4Nyw2ICs2NjUsMTQgQEAKIAlpZiAoaG9zdC0+ZG1hX2NoIDwgMCkKIAkJcmV0dXJuOwogCisJaG9zdC0+ZG1hX3NnX2lkeCsrOworCWlmIChob3N0LT5kbWFfc2dfaWR4IDwgaG9zdC0+ZG1hX2xlbikgeworCQkvKiBGaXJlIHVwIHRoZSBuZXh0IHRyYW5zZmVyLiAqLworCQltbWNfb21hcF9jb25maWdfZG1hX3BhcmFtcyhob3N0LCBob3N0LT5kYXRhLAorCQkJCQkgICBob3N0LT5kYXRhLT5zZyArIGhvc3QtPmRtYV9zZ19pZHgpOworCQlyZXR1cm47CisJfQorCiAJb21hcF9mcmVlX2RtYShob3N0LT5kbWFfY2gpOwogCWhvc3QtPmRtYV9jaCA9IC0xOwogCS8qCkBAIC01OTcsMzggKzY4MywyOCBAQAogfQogCiAvKgotICogQ29uZmlndXJlIGRtYSBzcmMgYW5kIGRlc3RpbmF0aW9uIHBhcmFtZXRlcnMKLSAqLwotc3RhdGljIGludCBtbWNfb21hcF9jb25maWdfZG1hX3BhcmFtKGludCBzeW5jX2Rpciwgc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsCi0JCQkJc3RydWN0IG1tY19kYXRhICpkYXRhKQotewotCWlmIChzeW5jX2RpciA9PSAwKSB7Ci0JCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhob3N0LT5kbWFfY2gsIDAsCi0JCQlPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKLQkJCShob3N0LT5tYXBiYXNlICsgT01BUF9IU01NQ19EQVRBKSwgMCwgMCk7Ci0JCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGhvc3QtPmRtYV9jaCwgMCwKLQkJCU9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAotCQkJc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnWzBdKSwgMCwgMCk7Ci0JfSBlbHNlIHsKLQkJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoaG9zdC0+ZG1hX2NoLCAwLAotCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkoaG9zdC0+bWFwYmFzZSArIE9NQVBfSFNNTUNfREFUQSksIDAsIDApOwotCQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoaG9zdC0+ZG1hX2NoLCAwLAotCQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCi0JCQlzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbMF0pLCAwLCAwKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0vKgogICogUm91dGluZSB0byBjb25maWd1cmUgYW5kIHN0YXJ0IERNQSBmb3IgdGhlIE1NQyBjYXJkCiAgKi8KIHN0YXRpYyBpbnQKIG1tY19vbWFwX3N0YXJ0X2RtYV90cmFuc2ZlcihzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCiB7Ci0JaW50IHN5bmNfZGV2LCBzeW5jX2RpciA9IDA7Ci0JaW50IGRtYV9jaCA9IDAsIHJldCA9IDAsIGVyciA9IDE7CisJaW50IGRtYV9jaCA9IDAsIHJldCA9IDAsIGVyciA9IDEsIGk7CiAJc3RydWN0IG1tY19kYXRhICpkYXRhID0gcmVxLT5kYXRhOwogCisJLyogU2FuaXR5IGNoZWNrOiBhbGwgdGhlIFNHIGVudHJpZXMgbXVzdCBiZSBhbGlnbmVkIGJ5IGJsb2NrIHNpemUuICovCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPmRtYV9sZW47IGkrKykgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbDsKKworCQlzZ2wgPSBkYXRhLT5zZyArIGk7CisJCWlmIChzZ2wtPmxlbmd0aCAlIGRhdGEtPmJsa3N6KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICgoZGF0YS0+Ymxrc3ogJSA0KSAhPSAwKQorCQkvKiBSRVZJU0lUOiBUaGUgTU1DIGJ1ZmZlciBpbmNyZW1lbnRzIG9ubHkgd2hlbiBNU0IgaXMgd3JpdHRlbi4KKwkJICogUmV0dXJuIGVycm9yIGZvciBibGtzeiB3aGljaCBpcyBub24gbXVsdGlwbGUgb2YgZm91ci4KKwkJICovCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiBJZiBmb3Igc29tZSByZWFzb24gdGhlIERNQSB0cmFuc2ZlciBpcyBzdGlsbCBhY3RpdmUsCiAJICogd2Ugd2FpdCBmb3IgdGltZW91dCBwZXJpb2QgYW5kIGZyZWUgdGhlIGRtYQpAQCAtNjQ3LDQ5ICs3MjMsMjIgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKCEoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkpIHsKLQkJaG9zdC0+ZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRTsKLQkJaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRCkKLQkJCXN5bmNfZGV2ID0gT01BUDI0WFhfRE1BX01NQzFfUlg7Ci0JCWVsc2UKLQkJCXN5bmNfZGV2ID0gT01BUDI0WFhfRE1BX01NQzJfUlg7Ci0JfSBlbHNlIHsKLQkJaG9zdC0+ZG1hX2RpciA9IERNQV9UT19ERVZJQ0U7Ci0JCWlmIChob3N0LT5pZCA9PSBPTUFQX01NQzFfREVWSUQpCi0JCQlzeW5jX2RldiA9IE9NQVAyNFhYX0RNQV9NTUMxX1RYOwotCQllbHNlCi0JCQlzeW5jX2RldiA9IE9NQVAyNFhYX0RNQV9NTUMyX1RYOwotCX0KLQotCXJldCA9IG9tYXBfcmVxdWVzdF9kbWEoc3luY19kZXYsICJNTUMvU0QiLCBtbWNfb21hcF9kbWFfY2IsCi0JCQlob3N0LCAmZG1hX2NoKTsKKwlyZXQgPSBvbWFwX3JlcXVlc3RfZG1hKG1tY19vbWFwX2dldF9kbWFfc3luY19kZXYoaG9zdCwgZGF0YSksICJNTUMvU0QiLAorCQkJICAgICAgIG1tY19vbWFwX2RtYV9jYixob3N0LCAmZG1hX2NoKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAogCQkJIiVzOiBvbWFwX3JlcXVlc3RfZG1hKCkgZmFpbGVkIHdpdGggJWRcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlob3N0LT5kbWFfbGVuID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLAotCQkJZGF0YS0+c2dfbGVuLCBob3N0LT5kbWFfZGlyKTsKKwkJCWRhdGEtPnNnX2xlbiwgbW1jX29tYXBfZ2V0X2RtYV9kaXIoaG9zdCwgZGF0YSkpOwogCWhvc3QtPmRtYV9jaCA9IGRtYV9jaDsKKwlob3N0LT5kbWFfc2dfaWR4ID0gMDsKIAotCWlmICghKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpKQotCQltbWNfb21hcF9jb25maWdfZG1hX3BhcmFtKDEsIGhvc3QsIGRhdGEpOwotCWVsc2UKLQkJbW1jX29tYXBfY29uZmlnX2RtYV9wYXJhbSgwLCBob3N0LCBkYXRhKTsKKwltbWNfb21hcF9jb25maWdfZG1hX3BhcmFtcyhob3N0LCBkYXRhLCBkYXRhLT5zZyk7CiAKLQlpZiAoKGRhdGEtPmJsa3N6ICUgNCkgPT0gMCkKLQkJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhkbWFfY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCi0JCQkoZGF0YS0+Ymxrc3ogLyA0KSwgZGF0YS0+YmxvY2tzLCBPTUFQX0RNQV9TWU5DX0ZSQU1FLAotCQkJc3luY19kZXYsIHN5bmNfZGlyKTsKLQllbHNlCi0JCS8qIFJFVklTSVQ6IFRoZSBNTUMgYnVmZmVyIGluY3JlbWVudHMgb25seSB3aGVuIE1TQiBpcyB3cml0dGVuLgotCQkgKiBSZXR1cm4gZXJyb3IgZm9yIGJsa3N6IHdoaWNoIGlzIG5vbiBtdWx0aXBsZSBvZiBmb3VyLgotCQkgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlvbWFwX3N0YXJ0X2RtYShkbWFfY2gpOwogCXJldHVybiAwOwogfQogCkBAIC03MzksNyArNzg4LDYgQEAKIAlob3N0LT5kYXRhID0gcmVxLT5kYXRhOwogCiAJaWYgKHJlcS0+ZGF0YSA9PSBOVUxMKSB7Ci0JCWhvc3QtPmRhdGFkaXIgPSBPTUFQX01NQ19EQVRBRElSX05PTkU7CiAJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQkxLLCAwKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzQ4LDkgKzc5Niw2IEBACiAJCQkJCXwgKHJlcS0+ZGF0YS0+YmxvY2tzIDw8IDE2KSk7CiAJc2V0X2RhdGFfdGltZW91dChob3N0LCByZXEpOwogCi0JaG9zdC0+ZGF0YWRpciA9IChyZXEtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpID8KLQkJCU9NQVBfTU1DX0RBVEFESVJfV1JJVEUgOiBPTUFQX01NQ19EQVRBRElSX1JFQUQ7Ci0KIAlpZiAoaG9zdC0+dXNlX2RtYSkgewogCQlyZXQgPSBtbWNfb21hcF9zdGFydF9kbWFfdHJhbnNmZXIoaG9zdCwgcmVxKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC03ODIsMzYgKzgyNywyOSBAQAogCXUxNiBkc29yID0gMDsKIAl1bnNpZ25lZCBsb25nIHJlZ3ZhbDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGNvbjsKIAogCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJY2FzZSBNTUNfUE9XRVJfT0ZGOgogCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLCAwLCAwKTsKLQkJLyoKLQkJICogUmVzZXQgaW50ZXJmYWNlIHZvbHRhZ2UgdG8gM1YgaWYgaXQncyAxLjhWIG5vdzsKLQkJICogb25seSByZWxldmFudCBvbiBNTUMtMSwgdGhlIG90aGVycyBhbHdheXMgdXNlIDEuOFYuCi0JCSAqCi0JCSAqIFJFVklTSVQ6IElmIHdlIGFyZSBhYmxlIHRvIGRldGVjdCBjYXJkcyBhZnRlciB1bnBsdWdnaW5nCi0JCSAqIGEgMS44ViBjYXJkLCB0aGlzIGNvZGUgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCi0JCSAqLwotCQlpZiAoaG9zdC0+aWQgIT0gT01BUF9NTUMxX0RFVklEKQotCQkJYnJlYWs7Ci0JCWlmICghKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIFNEVlNERVQpKSB7Ci0JCQlpbnQgdmRkID0gZmxzKGhvc3QtPm1tYy0+b2NyX2F2YWlsKSAtIDE7Ci0JCQlpZiAob21hcF9tbWNfc3dpdGNoX29wY29uZChob3N0LCB2ZGQpICE9IDApCi0JCQkJaG9zdC0+bW1jLT5pb3MudmRkID0gdmRkOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgTU1DX1BPV0VSX1VQOgogCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkLCAxLCBpb3MtPnZkZCk7CiAJCWJyZWFrOwogCX0KIAorCWNvbiA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDT04pOwogCXN3aXRjaCAobW1jLT5pb3MuYnVzX3dpZHRoKSB7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzg6CisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCBjb24gfCBEVzgpOworCQlicmVhazsKIAljYXNlIE1NQ19CVVNfV0lEVEhfNDoKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGNvbiAmIH5EVzgpOwogCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCiAJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgfCBGT1VSX0JJVCk7CiAJCWJyZWFrOwogCWNhc2UgTU1DX0JVU19XSURUSF8xOgorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwgY29uICYgfkRXOCk7CiAJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKIAkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIH5GT1VSX0JJVCk7CiAJCWJyZWFrOwpAQCAtODkxLDYgKzkyOSwzMyBAQAogCXJldHVybiBwZGF0YS0+c2xvdHNbMF0uZ2V0X3JvKGhvc3QtPmRldiwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfaW5pdChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCkKK3sKKwl1MzIgaGN0bCwgY2FwYSwgdmFsdWU7CisKKwkvKiBPbmx5IE1NQzEgc3VwcG9ydHMgMy4wViAqLworCWlmIChob3N0LT5pZCA9PSBPTUFQX01NQzFfREVWSUQpIHsKKwkJaGN0bCA9IFNEVlMzMDsKKwkJY2FwYSA9IFZTMzAgfCBWUzE4OworCX0gZWxzZSB7CisJCWhjdGwgPSBTRFZTMTg7CisJCWNhcGEgPSBWUzE4OworCX0KKworCXZhbHVlID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgflNEVlNfTUFTSzsKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsIHZhbHVlIHwgaGN0bCk7CisKKwl2YWx1ZSA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDQVBBKTsKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENBUEEsIHZhbHVlIHwgY2FwYSk7CisKKwkvKiBTZXQgdGhlIGNvbnRyb2xsZXIgdG8gQVVUTyBJRExFIG1vZGUgKi8KKwl2YWx1ZSA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTWVNDT05GSUcpOworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ09ORklHLCB2YWx1ZSB8IEFVVE9JRExFKTsKKworCS8qIFNldCBTRCBidXMgcG93ZXIgYml0ICovCisJc2V0X3NkX2J1c19wb3dlcihob3N0KTsKK30KKwogc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgbW1jX29tYXBfb3BzID0gewogCS5yZXF1ZXN0ID0gb21hcF9tbWNfcmVxdWVzdCwKIAkuc2V0X2lvcyA9IG9tYXBfbW1jX3NldF9pb3MsCkBAIC05MDYsNyArOTcxLDYgQEAKIAlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldCA9IDAsIGlycTsKLQl1MzIgaGN0bCwgY2FwYTsKIAogCWlmIChwZGF0YSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBsYXRmb3JtIERhdGEgaXMgbWlzc2luZ1xuIik7CkBAIC05OTYsMTAgKzEwNjAsMTEgQEAKIAkJZWxzZQogCQkJaG9zdC0+ZGJjbGtfZW5hYmxlZCA9IDE7CiAKLSNpZmRlZiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRQotCW1tYy0+bWF4X3BoeXNfc2VncyA9IDE7Ci0JbW1jLT5tYXhfaHdfc2VncyA9IDE7Ci0jZW5kaWYKKwkvKiBTaW5jZSB3ZSBkbyBvbmx5IFNHIGVtdWxhdGlvbiwgd2UgY2FuIGhhdmUgYXMgbWFueSBzZWdzCisJICogYXMgd2Ugd2FudC4gKi8KKwltbWMtPm1heF9waHlzX3NlZ3MgPSAxMDI0OworCW1tYy0+bWF4X2h3X3NlZ3MgPSAxMDI0OworCiAJbW1jLT5tYXhfYmxrX3NpemUgPSA1MTI7ICAgICAgIC8qIEJsb2NrIExlbmd0aCBhdCBtYXggY2FuIGJlIDEwMjQgKi8KIAltbWMtPm1heF9ibGtfY291bnQgPSAweEZGRkY7ICAgIC8qIE5vLiBvZiBCbG9ja3MgaXMgMTYgYml0cyAqLwogCW1tYy0+bWF4X3JlcV9zaXplID0gbW1jLT5tYXhfYmxrX3NpemUgKiBtbWMtPm1heF9ibGtfY291bnQ7CkBAIC0xMDA4LDMyICsxMDczLDMyIEBACiAJbW1jLT5vY3JfYXZhaWwgPSBtbWNfc2xvdChob3N0KS5vY3JfbWFzazsKIAltbWMtPmNhcHMgfD0gTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQ7CiAKLQlpZiAocGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLndpcmVzID49IDQpCisJaWYgKHBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS53aXJlcyA+PSA4KQorCQltbWMtPmNhcHMgfD0gTU1DX0NBUF84X0JJVF9EQVRBOworCWVsc2UgaWYgKHBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS53aXJlcyA+PSA0KQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwogCi0JLyogT25seSBNTUMxIHN1cHBvcnRzIDMuMFYgKi8KLQlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklEKSB7Ci0JCWhjdGwgPSBTRFZTMzA7Ci0JCWNhcGEgPSBWUzMwIHwgVlMxODsKLQl9IGVsc2UgewotCQloY3RsID0gU0RWUzE4OwotCQljYXBhID0gVlMxODsKKwlvbWFwX2hzbW1jX2luaXQoaG9zdCk7CisKKwkvKiBTZWxlY3QgRE1BIGxpbmVzICovCisJc3dpdGNoIChob3N0LT5pZCkgeworCWNhc2UgT01BUF9NTUMxX0RFVklEOgorCQlob3N0LT5kbWFfbGluZV90eCA9IE9NQVAyNFhYX0RNQV9NTUMxX1RYOworCQlob3N0LT5kbWFfbGluZV9yeCA9IE9NQVAyNFhYX0RNQV9NTUMxX1JYOworCQlicmVhazsKKwljYXNlIE9NQVBfTU1DMl9ERVZJRDoKKwkJaG9zdC0+ZG1hX2xpbmVfdHggPSBPTUFQMjRYWF9ETUFfTU1DMl9UWDsKKwkJaG9zdC0+ZG1hX2xpbmVfcnggPSBPTUFQMjRYWF9ETUFfTU1DMl9SWDsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX01NQzNfREVWSUQ6CisJCWhvc3QtPmRtYV9saW5lX3R4ID0gT01BUDM0WFhfRE1BX01NQzNfVFg7CisJCWhvc3QtPmRtYV9saW5lX3J4ID0gT01BUDM0WFhfRE1BX01NQzNfUlg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiSW52YWxpZCBNTUMgaWRcbiIpOworCQlnb3RvIGVycl9pcnE7CiAJfQogCi0JT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAotCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpIHwgaGN0bCk7Ci0KLQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENBUEEsCi0JCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgQ0FQQSkgfCBjYXBhKTsKLQotCS8qIFNldCB0aGUgY29udHJvbGxlciB0byBBVVRPIElETEUgbW9kZSAqLwotCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1lTQ09ORklHLAotCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NPTkZJRykgfCBBVVRPSURMRSk7Ci0KLQkvKiBTZXQgU0QgYnVzIHBvd2VyIGJpdCAqLwotCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKLQkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSB8IFNEQlApOwotCiAJLyogUmVxdWVzdCBJUlEgZm9yIE1NQyBvcGVyYXRpb25zICovCiAJcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBtbWNfb21hcF9pcnEsIElSUUZfRElTQUJMRUQsCiAJCQltbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7CkBAIC0xMDUxLDcgKzExMTYsNyBAQAogCX0KIAogCS8qIFJlcXVlc3QgSVJRIGZvciBjYXJkIGRldGVjdCAqLwotCWlmICgobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxKSAmJiAobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QpKSB7CisJaWYgKChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEpKSB7CiAJCXJldCA9IHJlcXVlc3RfaXJxKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSwKIAkJCQkgIG9tYXBfbW1jX2NkX2hhbmRsZXIsCiAJCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcKQEAgLTEwNzQsOCArMTEzOSw4IEBACiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlcnJfc2xvdF9uYW1lOwogCX0KLQlpZiAobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxICYmIG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0ICYmCi0JCQlob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0uZ2V0X2NvdmVyX3N0YXRlKSB7CisJaWYgKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSAmJgorCSAgICBob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0uZ2V0X2NvdmVyX3N0YXRlKSB7CiAJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmbW1jLT5jbGFzc19kZXYsCiAJCQkJCSZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOwogCQlpZiAocmV0IDwgMCkKQEAgLTExNzMsMjAgKzEyMzgsOCBAQAogCQkJCQkJIiBsZXZlbCBzdXNwZW5kXG4iKTsKIAkJCX0KIAotCQkJaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRAotCQkJCQkmJiAhKE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKQotCQkJCQkJCSYgU0RWU0RFVCkpIHsKLQkJCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCi0JCQkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKQotCQkJCQkmIFNEVlNDTFIpOwotCQkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKLQkJCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpCi0JCQkJCXwgU0RWUzMwKTsKLQkJCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCi0JCQkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKQotCQkJCQl8IFNEQlApOwotCQkJfQotCisJCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCisJCQkJCSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgJiB+U0RCUCk7CiAJCQljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKIAkJCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwogCQkJY2xrX2Rpc2FibGUoaG9zdC0+ZGJjbGspOwpAQCAtMTIyMiw2ICsxMjc1LDggQEAKIAkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAogCQkJCQkiRW5hYmxpbmcgZGVib3VuY2UgY2xrIGZhaWxlZFxuIik7CiAKKwkJb21hcF9oc21tY19pbml0KGhvc3QpOworCiAJCWlmIChob3N0LT5wZGF0YS0+cmVzdW1lKSB7CiAJCQlyZXQgPSBob3N0LT5wZGF0YS0+cmVzdW1lKCZwZGV2LT5kZXYsIGhvc3QtPnNsb3RfaWQpOwogCQkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmY0YWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogT3BlbkZpcm13YXJlIGJpbmRpbmdzIGZvciBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3JzOiBYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICoJICAgIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSAic2RoY2kuaCIKKworc3RydWN0IHNkaGNpX29mX2RhdGEgeworCXVuc2lnbmVkIGludCBxdWlya3M7CisJc3RydWN0IHNkaGNpX29wcyBvcHM7Cit9OworCitzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCB7CisJdW5zaWduZWQgaW50IGNsb2NrOworCXUxNiB4ZmVyX21vZGVfc2hhZG93OworfTsKKworLyoKKyAqIE9wcyBhbmQgcXVpcmtzIGZvciB0aGUgRnJlZXNjYWxlIGVTREhDIGNvbnRyb2xsZXIuCisgKi8KKworI2RlZmluZSBFU0RIQ19ETUFfU1lTQ1RMCTB4NDBjCisjZGVmaW5lIEVTREhDX0RNQV9TTk9PUAkJMHgwMDAwMDA0MAorCisjZGVmaW5lIEVTREhDX1NZU1RFTV9DT05UUk9MCTB4MmMKKyNkZWZpbmUgRVNESENfQ0xPQ0tfTUFTSwkweDAwMDBmZmYwCisjZGVmaW5lIEVTREhDX1BSRURJVl9TSElGVAk4CisjZGVmaW5lIEVTREhDX0RJVklERVJfU0hJRlQJNAorI2RlZmluZSBFU0RIQ19DTE9DS19QRVJFTgkweDAwMDAwMDA0CisjZGVmaW5lIEVTREhDX0NMT0NLX0hDS0VOCTB4MDAwMDAwMDIKKyNkZWZpbmUgRVNESENfQ0xPQ0tfSVBHRU4JMHgwMDAwMDAwMQorCitzdGF0aWMgdTMyIGVzZGhjX3JlYWRsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXJldHVybiBpbl9iZTMyKGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyB1MTYgZXNkaGNfcmVhZHcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIGluX2JlMTYoaG9zdC0+aW9hZGRyICsgKHJlZyBeIDB4MikpOworfQorCitzdGF0aWMgdTggZXNkaGNfcmVhZGIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIGluXzgoaG9zdC0+aW9hZGRyICsgKHJlZyBeIDB4MykpOworfQorCitzdGF0aWMgdm9pZCBlc2RoY193cml0ZWwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiB2YWwsIGludCByZWcpCit7CisJb3V0X2JlMzIoaG9zdC0+aW9hZGRyICsgcmVnLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBlc2RoY193cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpCit7CisJc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCWludCBiYXNlID0gcmVnICYgfjB4MzsKKwlpbnQgc2hpZnQgPSAocmVnICYgMHgyKSAqIDg7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgU0RIQ0lfVFJBTlNGRVJfTU9ERToKKwkJLyoKKwkJICogUG9zdHBvbmUgdGhpcyB3cml0ZSwgd2UgbXVzdCBkbyBpdCB0b2dldGhlciB3aXRoIGEKKwkJICogY29tbWFuZCB3cml0ZSB0aGF0IGlzIGRvd24gYmVsb3cuCisJCSAqLworCQlvZl9ob3N0LT54ZmVyX21vZGVfc2hhZG93ID0gdmFsOworCQlyZXR1cm47CisJY2FzZSBTREhDSV9DT01NQU5EOgorCQllc2RoY193cml0ZWwoaG9zdCwgdmFsIDw8IDE2IHwgb2ZfaG9zdC0+eGZlcl9tb2RlX3NoYWRvdywKKwkJCSAgICAgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7CisJCXJldHVybjsKKwljYXNlIFNESENJX0JMT0NLX1NJWkU6CisJCS8qCisJCSAqIFR3byBsYXN0IERNQSBiaXRzIGFyZSByZXNlcnZlZCwgYW5kIGZpcnN0IG9uZSBpcyB1c2VkIGZvcgorCQkgKiBub24tc3RhbmRhcmQgYmxrc3ogb2YgNDA5NiBieXRlcyB0aGF0IHdlIGRvbid0IHN1cHBvcnQKKwkJICogeWV0LiBTbyBjbGVhciB0aGUgRE1BIGJvdW5kYXJ5IGJpdHMuCisJCSAqLworCQl2YWwgJj0gflNESENJX01BS0VfQkxLU1ooMHg3LCAwKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJfQorCWNscnNldGJpdHNfYmUzMihob3N0LT5pb2FkZHIgKyBiYXNlLCAweGZmZmYgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyB2b2lkIGVzZGhjX3dyaXRlYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKQoreworCWludCBiYXNlID0gcmVnICYgfjB4MzsKKwlpbnQgc2hpZnQgPSAocmVnICYgMHgzKSAqIDg7CisKKwljbHJzZXRiaXRzX2JlMzIoaG9zdC0+aW9hZGRyICsgYmFzZSAsIDB4ZmYgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyB2b2lkIGVzZGhjX3NldF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGNsb2NrKQoreworCWludCBkaXY7CisJaW50IHByZV9kaXYgPSAyOworCisJY2xyYml0czMyKGhvc3QtPmlvYWRkciArIEVTREhDX1NZU1RFTV9DT05UUk9MLCBFU0RIQ19DTE9DS19JUEdFTiB8CisJCSAgRVNESENfQ0xPQ0tfSENLRU4gfCBFU0RIQ19DTE9DS19QRVJFTiB8IEVTREhDX0NMT0NLX01BU0spOworCisJaWYgKGNsb2NrID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKGhvc3QtPm1heF9jbGsgLyAxNiA+IGNsb2NrKSB7CisJCWZvciAoOyBwcmVfZGl2IDwgMjU2OyBwcmVfZGl2ICo9IDIpIHsKKwkJCWlmIChob3N0LT5tYXhfY2xrIC8gcHJlX2RpdiA8IGNsb2NrICogMTYpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlmb3IgKGRpdiA9IDE7IGRpdiA8PSAxNjsgZGl2KyspIHsKKwkJaWYgKGhvc3QtPm1heF9jbGsgLyAoZGl2ICogcHJlX2RpdikgPD0gY2xvY2spCisJCQlicmVhazsKKwl9CisKKwlwcmVfZGl2ID4+PSAxOworCisJc2V0Yml0czMyKGhvc3QtPmlvYWRkciArIEVTREhDX1NZU1RFTV9DT05UUk9MLCBFU0RIQ19DTE9DS19JUEdFTiB8CisJCSAgRVNESENfQ0xPQ0tfSENLRU4gfCBFU0RIQ19DTE9DS19QRVJFTiB8CisJCSAgZGl2IDw8IEVTREhDX0RJVklERVJfU0hJRlQgfCBwcmVfZGl2IDw8IEVTREhDX1BSRURJVl9TSElGVCk7CisJbWRlbGF5KDEwMCk7CitvdXQ6CisJaG9zdC0+Y2xvY2sgPSBjbG9jazsKK30KKworc3RhdGljIGludCBlc2RoY19lbmFibGVfZG1hKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXNldGJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19ETUFfU1lTQ1RMLCBFU0RIQ19ETUFfU05PT1ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGVzZGhjX2dldF9tYXhfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCisJcmV0dXJuIG9mX2hvc3QtPmNsb2NrOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGVzZGhjX2dldF90aW1lb3V0X2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKworCXJldHVybiBvZl9ob3N0LT5jbG9jayAvIDEwMDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSBzZGhjaV9lc2RoYyA9IHsKKwkucXVpcmtzID0gU0RIQ0lfUVVJUktfRk9SQ0VfQkxLX1NaXzIwNDggfAorCQkgIFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTiB8CisJCSAgU0RIQ0lfUVVJUktfSU5WRVJURURfV1JJVEVfUFJPVEVDVCB8CisJCSAgU0RIQ0lfUVVJUktfTk9fQlVTWV9JUlEgfAorCQkgIFNESENJX1FVSVJLX05PTlNUQU5EQVJEX0NMT0NLIHwKKwkJICBTREhDSV9RVUlSS19QSU9fTkVFRFNfREVMQVkgfAorCQkgIFNESENJX1FVSVJLX1JFU1RPUkVfSVJRU19BRlRFUl9SRVNFVCB8CisJCSAgU0RIQ0lfUVVJUktfTk9fQ0FSRF9OT19SRVNFVCwKKwkub3BzID0geworCQkucmVhZGwgPSBlc2RoY19yZWFkbCwKKwkJLnJlYWR3ID0gZXNkaGNfcmVhZHcsCisJCS5yZWFkYiA9IGVzZGhjX3JlYWRiLAorCQkud3JpdGVsID0gZXNkaGNfd3JpdGVsLAorCQkud3JpdGV3ID0gZXNkaGNfd3JpdGV3LAorCQkud3JpdGViID0gZXNkaGNfd3JpdGViLAorCQkuc2V0X2Nsb2NrID0gZXNkaGNfc2V0X2Nsb2NrLAorCQkuZW5hYmxlX2RtYSA9IGVzZGhjX2VuYWJsZV9kbWEsCisJCS5nZXRfbWF4X2Nsb2NrID0gZXNkaGNfZ2V0X21heF9jbG9jaywKKwkJLmdldF90aW1lb3V0X2Nsb2NrID0gZXNkaGNfZ2V0X3RpbWVvdXRfY2xvY2ssCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBzZGhjaV9vZl9zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCisJcmV0dXJuIG1tY19zdXNwZW5kX2hvc3QoaG9zdC0+bW1jLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2RoY2lfb2ZfcmVzdW1lKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKKworCXJldHVybiBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+bW1jKTsKK30KKworI2Vsc2UKKworI2RlZmluZSBzZGhjaV9vZl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgc2RoY2lfb2ZfcmVzdW1lIE5VTEwKKworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IHNkaGNpX29mX2RhdGEgKnNkaGNpX29mX2RhdGEgPSBtYXRjaC0+ZGF0YTsKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdDsKKwlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdDsKKwljb25zdCB1MzIgKmNsazsKKwlpbnQgc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlob3N0ID0gc2RoY2lfYWxsb2NfaG9zdCgmb2ZkZXYtPmRldiwgc2l6ZW9mKCpvZl9ob3N0KSk7CisJaWYgKCFob3N0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgaG9zdCk7CisKKwlob3N0LT5pb2FkZHIgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFob3N0LT5pb2FkZHIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWRkcl9tYXA7CisJfQorCisJaG9zdC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmICghaG9zdC0+aXJxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX25vX2lycTsKKwl9CisKKwlob3N0LT5od19uYW1lID0gZGV2X25hbWUoJm9mZGV2LT5kZXYpOworCWlmIChzZGhjaV9vZl9kYXRhKSB7CisJCWhvc3QtPnF1aXJrcyA9IHNkaGNpX29mX2RhdGEtPnF1aXJrczsKKwkJaG9zdC0+b3BzID0gJnNkaGNpX29mX2RhdGEtPm9wczsKKwl9CisKKwljbGsgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmc2l6ZSk7CisJaWYgKGNsayAmJiBzaXplID09IHNpemVvZigqY2xrKSAmJiAqY2xrKQorCQlvZl9ob3N0LT5jbG9jayA9ICpjbGs7CisKKwlyZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hZGRfaG9zdDsKKworCXJldHVybiAwOworCitlcnJfYWRkX2hvc3Q6CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhob3N0LT5pcnEpOworZXJyX25vX2lycToKKwlpb3VubWFwKGhvc3QtPmlvYWRkcik7CitlcnJfYWRkcl9tYXA6CisJc2RoY2lfZnJlZV9ob3N0KGhvc3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNkaGNpX29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7CisKKwlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCAwKTsKKwlzZGhjaV9mcmVlX2hvc3QoaG9zdCk7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhob3N0LT5pcnEpOworCWlvdW5tYXAoaG9zdC0+aW9hZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2RoY2lfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWVzZGhjIiwgLmRhdGEgPSAmc2RoY2lfZXNkaGMsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1lc2RoYyIsIC5kYXRhID0gJnNkaGNpX2VzZGhjLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2VuZXJpYy1zZGhjaSIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2RoY2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBzZGhjaV9vZl9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lID0gInNkaGNpLW9mIiwKKwkubWF0Y2hfdGFibGUgPSBzZGhjaV9vZl9tYXRjaCwKKwkucHJvYmUgPSBzZGhjaV9vZl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2RoY2lfb2ZfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IHNkaGNpX29mX3N1c3BlbmQsCisJLnJlc3VtZQk9IHNkaGNpX29mX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkaGNpX29mX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZzZGhjaV9vZl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc2RoY2lfb2ZfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZGhjaV9vZl9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNkaGNpX29mX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzZGhjaV9vZl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIE9GIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiWGlhb2JvIFhpZSA8WC5YaWVAZnJlZXNjYWxlLmNvbT4sICIKKwkgICAgICAiQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggYWNjYjU5Mi4uMzBkOGUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtNDgsMzUgKzQ4LDM1IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogPT09PT09PT09PT09PT0gUkVHSVNURVIgRFVNUCA9PT09PT09PT09PT09PVxuIik7CiAKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBTeXMgYWRkcjogMHglMDh4IHwgVmVyc2lvbjogIDB4JTA4eFxuIiwKLQkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfRE1BX0FERFJFU1MpLAotCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX1ZFUlNJT04pKTsKKwkJc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfRE1BX0FERFJFU1MpLAorCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9IT1NUX1ZFUlNJT04pKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBCbGsgc2l6ZTogMHglMDh4IHwgQmxrIGNudDogIDB4JTA4eFxuIiwKLQkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQkxPQ0tfU0laRSksCi0JCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0JMT0NLX0NPVU5UKSk7CisJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0JMT0NLX1NJWkUpLAorCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9CTE9DS19DT1VOVCkpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IEFyZ3VtZW50OiAweCUwOHggfCBUcm4gbW9kZTogMHglMDh4XG4iLAotCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BUkdVTUVOVCksCi0JCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX1RSQU5TRkVSX01PREUpKTsKKwkJc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQVJHVU1FTlQpLAorCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9UUkFOU0ZFUl9NT0RFKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogUHJlc2VudDogIDB4JTA4eCB8IEhvc3QgY3RsOiAweCUwOHhcbiIsCi0JCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpLAotCQlyZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpKTsKKwkJc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfUFJFU0VOVF9TVEFURSksCisJCXNkaGNpX3JlYWRiKGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTCkpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IFBvd2VyOiAgICAweCUwOHggfCBCbGsgZ2FwOiAgMHglMDh4XG4iLAotCQlyZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKSwKLQkJcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQkxPQ0tfR0FQX0NPTlRST0wpKTsKKwkJc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfUE9XRVJfQ09OVFJPTCksCisJCXNkaGNpX3JlYWRiKGhvc3QsIFNESENJX0JMT0NLX0dBUF9DT05UUk9MKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogV2FrZS11cDogIDB4JTA4eCB8IENsb2NrOiAgICAweCUwOHhcbiIsCi0JCXJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX1dBS0VfVVBfQ09OVFJPTCksCi0JCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0NMT0NLX0NPTlRST0wpKTsKKwkJc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfV0FLRV9VUF9DT05UUk9MKSwKKwkJc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCkpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IFRpbWVvdXQ6ICAweCUwOHggfCBJbnQgc3RhdDogMHglMDh4XG4iLAotCQlyZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9USU1FT1VUX0NPTlRST0wpLAotCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKSk7CisJCXNkaGNpX3JlYWRiKGhvc3QsIFNESENJX1RJTUVPVVRfQ09OVFJPTCksCisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0lOVF9TVEFUVVMpKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBJbnQgZW5hYjogMHglMDh4IHwgU2lnIGVuYWI6IDB4JTA4eFxuIiwKLQkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSksCi0JCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpKTsKKwkJc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfSU5UX0VOQUJMRSksCisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1NJR05BTF9FTkFCTEUpKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBBQzEyIGVycjogMHglMDh4IHwgU2xvdCBpbnQ6IDB4JTA4eFxuIiwKLQkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQUNNRDEyX0VSUiksCi0JCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX1NMT1RfSU5UX1NUQVRVUykpOworCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9BQ01EMTJfRVJSKSwKKwkJc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfU0xPVF9JTlRfU1RBVFVTKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQ2FwczogICAgIDB4JTA4eCB8IE1heCBjdXJyOiAweCUwOHhcbiIsCi0JCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0NBUEFCSUxJVElFUyksCi0JCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX01BWF9DVVJSRU5UKSk7CisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0NBUEFCSUxJVElFUyksCisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX01BWF9DVVJSRU5UKSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKIH0KQEAgLTg3LDE3ICs4Nyw2NSBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIHNkaGNpX2NsZWFyX3NldF9pcnFzKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgY2xlYXIsIHUzMiBzZXQpCit7CisJdTMyIGllcjsKKworCWllciA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0lOVF9FTkFCTEUpOworCWllciAmPSB+Y2xlYXI7CisJaWVyIHw9IHNldDsKKwlzZGhjaV93cml0ZWwoaG9zdCwgaWVyLCBTREhDSV9JTlRfRU5BQkxFKTsKKwlzZGhjaV93cml0ZWwoaG9zdCwgaWVyLCBTREhDSV9TSUdOQUxfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfdW5tYXNrX2lycXMoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiBpcnFzKQoreworCXNkaGNpX2NsZWFyX3NldF9pcnFzKGhvc3QsIDAsIGlycXMpOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV9tYXNrX2lycXMoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiBpcnFzKQoreworCXNkaGNpX2NsZWFyX3NldF9pcnFzKGhvc3QsIGlycXMsIDApOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV9zZXRfY2FyZF9kZXRlY3Rpb24oc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGJvb2wgZW5hYmxlKQoreworCXUzMiBpcnFzID0gU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFIHwgU0RIQ0lfSU5UX0NBUkRfSU5TRVJUOworCisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTikKKwkJcmV0dXJuOworCisJaWYgKGVuYWJsZSkKKwkJc2RoY2lfdW5tYXNrX2lycXMoaG9zdCwgaXJxcyk7CisJZWxzZQorCQlzZGhjaV9tYXNrX2lycXMoaG9zdCwgaXJxcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX2VuYWJsZV9jYXJkX2RldGVjdGlvbihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzZGhjaV9zZXRfY2FyZF9kZXRlY3Rpb24oaG9zdCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX2Rpc2FibGVfY2FyZF9kZXRlY3Rpb24oc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc2RoY2lfc2V0X2NhcmRfZGV0ZWN0aW9uKGhvc3QsIGZhbHNlKTsKK30KKwogc3RhdGljIHZvaWQgc2RoY2lfcmVzZXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHU4IG1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiB1bmluaXRpYWxpemVkX3ZhcihpZXIpOwogCiAJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX05PX0NBUkRfTk9fUkVTRVQpIHsKLQkJaWYgKCEocmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJgorCQlpZiAoIShzZGhjaV9yZWFkbChob3N0LCBTREhDSV9QUkVTRU5UX1NUQVRFKSAmCiAJCQlTREhDSV9DQVJEX1BSRVNFTlQpKQogCQkJcmV0dXJuOwogCX0KIAotCXdyaXRlYihtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9TT0ZUV0FSRV9SRVNFVCk7CisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX1JFU1RPUkVfSVJRU19BRlRFUl9SRVNFVCkKKwkJaWVyID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfSU5UX0VOQUJMRSk7CisKKwlzZGhjaV93cml0ZWIoaG9zdCwgbWFzaywgU0RIQ0lfU09GVFdBUkVfUkVTRVQpOwogCiAJaWYgKG1hc2sgJiBTREhDSV9SRVNFVF9BTEwpCiAJCWhvc3QtPmNsb2NrID0gMDsKQEAgLTEwNiw3ICsxNTQsNyBAQAogCXRpbWVvdXQgPSAxMDA7CiAKIAkvKiBodyBjbGVhcnMgdGhlIGJpdCB3aGVuIGl0J3MgZG9uZSAqLwotCXdoaWxlIChyZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9TT0ZUV0FSRV9SRVNFVCkgJiBtYXNrKSB7CisJd2hpbGUgKHNkaGNpX3JlYWRiKGhvc3QsIFNESENJX1NPRlRXQVJFX1JFU0VUKSAmIG1hc2spIHsKIAkJaWYgKHRpbWVvdXQgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUmVzZXQgMHgleCBuZXZlciBjb21wbGV0ZWQuXG4iLAogCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCAoaW50KW1hc2spOwpAQCAtMTE2LDQyICsxNjQsNDQgQEAKIAkJdGltZW91dC0tOwogCQltZGVsYXkoMSk7CiAJfQorCisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX1JFU1RPUkVfSVJRU19BRlRFUl9SRVNFVCkKKwkJc2RoY2lfY2xlYXJfc2V0X2lycXMoaG9zdCwgU0RIQ0lfSU5UX0FMTF9NQVNLLCBpZXIpOwogfQogCiBzdGF0aWMgdm9pZCBzZGhjaV9pbml0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewotCXUzMiBpbnRtYXNrOwotCiAJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQUxMKTsKIAotCWludG1hc2sgPSBTREhDSV9JTlRfQlVTX1BPV0VSIHwgU0RIQ0lfSU5UX0RBVEFfRU5EX0JJVCB8CisJc2RoY2lfY2xlYXJfc2V0X2lycXMoaG9zdCwgU0RIQ0lfSU5UX0FMTF9NQVNLLAorCQlTREhDSV9JTlRfQlVTX1BPV0VSIHwgU0RIQ0lfSU5UX0RBVEFfRU5EX0JJVCB8CiAJCVNESENJX0lOVF9EQVRBX0NSQyB8IFNESENJX0lOVF9EQVRBX1RJTUVPVVQgfCBTREhDSV9JTlRfSU5ERVggfAogCQlTREhDSV9JTlRfRU5EX0JJVCB8IFNESENJX0lOVF9DUkMgfCBTREhDSV9JTlRfVElNRU9VVCB8Ci0JCVNESENJX0lOVF9DQVJEX1JFTU9WRSB8IFNESENJX0lOVF9DQVJEX0lOU0VSVCB8Ci0JCVNESENJX0lOVF9EQVRBX0FWQUlMIHwgU0RIQ0lfSU5UX1NQQUNFX0FWQUlMIHwKLQkJU0RIQ0lfSU5UX0RNQV9FTkQgfCBTREhDSV9JTlRfREFUQV9FTkQgfCBTREhDSV9JTlRfUkVTUE9OU0UgfAotCQlTREhDSV9JTlRfQURNQV9FUlJPUjsKKwkJU0RIQ0lfSU5UX0RBVEFfRU5EIHwgU0RIQ0lfSU5UX1JFU1BPTlNFKTsKK30KIAotCXdyaXRlbChpbnRtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfRU5BQkxFKTsKLQl3cml0ZWwoaW50bWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfU0lHTkFMX0VOQUJMRSk7CitzdGF0aWMgdm9pZCBzZGhjaV9yZWluaXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc2RoY2lfaW5pdChob3N0KTsKKwlzZGhjaV9lbmFibGVfY2FyZF9kZXRlY3Rpb24oaG9zdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX2FjdGl2YXRlX2xlZChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKIHsKIAl1OCBjdHJsOwogCi0JY3RybCA9IHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJY3RybCA9IHNkaGNpX3JlYWRiKGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTCk7CiAJY3RybCB8PSBTREhDSV9DVFJMX0xFRDsKLQl3cml0ZWIoY3RybCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwlzZGhjaV93cml0ZWIoaG9zdCwgY3RybCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfZGVhY3RpdmF0ZV9sZWQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7CiAJdTggY3RybDsKIAotCWN0cmwgPSByZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOwogCWN0cmwgJj0gflNESENJX0NUUkxfTEVEOwotCXdyaXRlYihjdHJsLCBob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOwogfQogCiAjaWZkZWYgU0RIQ0lfVVNFX0xFRFNfQ0xBU1MKQEAgLTIwNSw3ICsyNTUsNyBAQAogCiAJCXdoaWxlIChsZW4pIHsKIAkJCWlmIChjaHVuayA9PSAwKSB7Ci0JCQkJc2NyYXRjaCA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0JVRkZFUik7CisJCQkJc2NyYXRjaCA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0JVRkZFUik7CiAJCQkJY2h1bmsgPSA0OwogCQkJfQogCkBAIC0yNTcsNyArMzA3LDcgQEAKIAkJCWxlbi0tOwogCiAJCQlpZiAoKGNodW5rID09IDQpIHx8ICgobGVuID09IDApICYmIChibGtzaXplID09IDApKSkgewotCQkJCXdyaXRlbChzY3JhdGNoLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOworCQkJCXNkaGNpX3dyaXRlbChob3N0LCBzY3JhdGNoLCBTREhDSV9CVUZGRVIpOwogCQkJCWNodW5rID0gMDsKIAkJCQlzY3JhdGNoID0gMDsKIAkJCX0KQEAgLTI5Miw3ICszNDIsMTAgQEAKIAkJKGhvc3QtPmRhdGEtPmJsb2NrcyA9PSAxKSkKIAkJbWFzayA9IH4wOwogCi0Jd2hpbGUgKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpICYgbWFzaykgeworCXdoaWxlIChzZGhjaV9yZWFkbChob3N0LCBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIG1hc2spIHsKKwkJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX1BJT19ORUVEU19ERUxBWSkKKwkJCXVkZWxheSgxMDApOworCiAJCWlmIChob3N0LT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCiAJCQlzZGhjaV9yZWFkX2Jsb2NrX3Bpbyhob3N0KTsKIAkJZWxzZQpAQCAtNTYxLDYgKzYxNCwxNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHZvaWQgc2RoY2lfc2V0X3RyYW5zZmVyX2lycXMoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJdTMyIHBpb19pcnFzID0gU0RIQ0lfSU5UX0RBVEFfQVZBSUwgfCBTREhDSV9JTlRfU1BBQ0VfQVZBSUw7CisJdTMyIGRtYV9pcnFzID0gU0RIQ0lfSU5UX0RNQV9FTkQgfCBTREhDSV9JTlRfQURNQV9FUlJPUjsKKworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1JFUV9VU0VfRE1BKQorCQlzZGhjaV9jbGVhcl9zZXRfaXJxcyhob3N0LCBwaW9faXJxcywgZG1hX2lycXMpOworCWVsc2UKKwkJc2RoY2lfY2xlYXJfc2V0X2lycXMoaG9zdCwgZG1hX2lycXMsIHBpb19pcnFzKTsKK30KKwogc3RhdGljIHZvaWQgc2RoY2lfcHJlcGFyZV9kYXRhKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJdTggY291bnQ7CkBAIC01ODEsNyArNjQ1LDcgQEAKIAlob3N0LT5kYXRhX2Vhcmx5ID0gMDsKIAogCWNvdW50ID0gc2RoY2lfY2FsY190aW1lb3V0KGhvc3QsIGRhdGEpOwotCXdyaXRlYihjb3VudCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfVElNRU9VVF9DT05UUk9MKTsKKwlzZGhjaV93cml0ZWIoaG9zdCwgY291bnQsIFNESENJX1RJTUVPVVRfQ09OVFJPTCk7CiAKIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKQogCQlob3N0LT5mbGFncyB8PSBTREhDSV9SRVFfVVNFX0RNQTsKQEAgLTY2MSw4ICs3MjUsOCBAQAogCQkJCVdBUk5fT04oMSk7CiAJCQkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX1JFUV9VU0VfRE1BOwogCQkJfSBlbHNlIHsKLQkJCQl3cml0ZWwoaG9zdC0+YWRtYV9hZGRyLAotCQkJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9BRE1BX0FERFJFU1MpOworCQkJCXNkaGNpX3dyaXRlbChob3N0LCBob3N0LT5hZG1hX2FkZHIsCisJCQkJCVNESENJX0FETUFfQUREUkVTUyk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpbnQgc2dfY250OwpAQCAtNjgxLDggKzc0NSw4IEBACiAJCQkJaG9zdC0+ZmxhZ3MgJj0gflNESENJX1JFUV9VU0VfRE1BOwogCQkJfSBlbHNlIHsKIAkJCQlXQVJOX09OKHNnX2NudCAhPSAxKTsKLQkJCQl3cml0ZWwoc2dfZG1hX2FkZHJlc3MoZGF0YS0+c2cpLAotCQkJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9ETUFfQUREUkVTUyk7CisJCQkJc2RoY2lfd3JpdGVsKGhvc3QsIHNnX2RtYV9hZGRyZXNzKGRhdGEtPnNnKSwKKwkJCQkJU0RIQ0lfRE1BX0FERFJFU1MpOwogCQkJfQogCQl9CiAJfQpAQCAtNjkzLDE0ICs3NTcsMTQgQEAKIAkgKiBpcyBBRE1BLgogCSAqLwogCWlmIChob3N0LT52ZXJzaW9uID49IFNESENJX1NQRUNfMjAwKSB7Ci0JCWN0cmwgPSByZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCQljdHJsID0gc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIAkJY3RybCAmPSB+U0RIQ0lfQ1RSTF9ETUFfTUFTSzsKIAkJaWYgKChob3N0LT5mbGFncyAmIFNESENJX1JFUV9VU0VfRE1BKSAmJgogCQkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpKQogCQkJY3RybCB8PSBTREhDSV9DVFJMX0FETUEzMjsKIAkJZWxzZQogCQkJY3RybCB8PSBTREhDSV9DVFJMX1NETUE7Ci0JCXdyaXRlYihjdHJsLCBob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCQlzZGhjaV93cml0ZWIoaG9zdCwgY3RybCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIAl9CiAKIAlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX1JFUV9VU0VfRE1BKSkgewpAQCAtNzA5LDEwICs3NzMsMTEgQEAKIAkJaG9zdC0+YmxvY2tzID0gZGF0YS0+YmxvY2tzOwogCX0KIAorCXNkaGNpX3NldF90cmFuc2Zlcl9pcnFzKGhvc3QpOworCiAJLyogV2UgZG8gbm90IGhhbmRsZSBETUEgYm91bmRhcmllcywgc28gc2V0IGl0IHRvIG1heCAoNTEyIEtpQikgKi8KLQl3cml0ZXcoU0RIQ0lfTUFLRV9CTEtTWig3LCBkYXRhLT5ibGtzeiksCi0JCWhvc3QtPmlvYWRkciArIFNESENJX0JMT0NLX1NJWkUpOwotCXdyaXRldyhkYXRhLT5ibG9ja3MsIGhvc3QtPmlvYWRkciArIFNESENJX0JMT0NLX0NPVU5UKTsKKwlzZGhjaV93cml0ZXcoaG9zdCwgU0RIQ0lfTUFLRV9CTEtTWig3LCBkYXRhLT5ibGtzeiksIFNESENJX0JMT0NLX1NJWkUpOworCXNkaGNpX3dyaXRldyhob3N0LCBkYXRhLT5ibG9ja3MsIFNESENJX0JMT0NLX0NPVU5UKTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfc2V0X3RyYW5zZmVyX21vZGUoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsCkBAIC03MzMsNyArNzk4LDcgQEAKIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9SRVFfVVNFX0RNQSkKIAkJbW9kZSB8PSBTREhDSV9UUk5TX0RNQTsKIAotCXdyaXRldyhtb2RlLCBob3N0LT5pb2FkZHIgKyBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwlzZGhjaV93cml0ZXcoaG9zdCwgbW9kZSwgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX2ZpbmlzaF9kYXRhKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQpAQCAtODAyLDcgKzg2Nyw3IEBACiAJaWYgKGhvc3QtPm1ycS0+ZGF0YSAmJiAoY21kID09IGhvc3QtPm1ycS0+ZGF0YS0+c3RvcCkpCiAJCW1hc2sgJj0gflNESENJX0RBVEFfSU5ISUJJVDsKIAotCXdoaWxlIChyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIG1hc2spIHsKKwl3aGlsZSAoc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJiBtYXNrKSB7CiAJCWlmICh0aW1lb3V0ID09IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbnRyb2xsZXIgbmV2ZXIgcmVsZWFzZWQgIgogCQkJCSJpbmhpYml0IGJpdChzKS5cbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKQEAgLTgyMSw3ICs4ODYsNyBAQAogCiAJc2RoY2lfcHJlcGFyZV9kYXRhKGhvc3QsIGNtZC0+ZGF0YSk7CiAKLQl3cml0ZWwoY21kLT5hcmcsIGhvc3QtPmlvYWRkciArIFNESENJX0FSR1VNRU5UKTsKKwlzZGhjaV93cml0ZWwoaG9zdCwgY21kLT5hcmcsIFNESENJX0FSR1VNRU5UKTsKIAogCXNkaGNpX3NldF90cmFuc2Zlcl9tb2RlKGhvc3QsIGNtZC0+ZGF0YSk7CiAKQEAgLTg0OSw4ICs5MTQsNyBAQAogCWlmIChjbWQtPmRhdGEpCiAJCWZsYWdzIHw9IFNESENJX0NNRF9EQVRBOwogCi0Jd3JpdGV3KFNESENJX01BS0VfQ01EKGNtZC0+b3Bjb2RlLCBmbGFncyksCi0JCWhvc3QtPmlvYWRkciArIFNESENJX0NPTU1BTkQpOworCXNkaGNpX3dyaXRldyhob3N0LCBTREhDSV9NQUtFX0NNRChjbWQtPm9wY29kZSwgZmxhZ3MpLCBTREhDSV9DT01NQU5EKTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfZmluaXNoX2NvbW1hbmQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCkBAIC04NjMsMTUgKzkyNywxNSBAQAogCQlpZiAoaG9zdC0+Y21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSB7CiAJCQkvKiBDUkMgaXMgc3RyaXBwZWQgc28gd2UgbmVlZCB0byBkbyBzb21lIHNoaWZ0aW5nLiAqLwogCQkJZm9yIChpID0gMDtpIDwgNDtpKyspIHsKLQkJCQlob3N0LT5jbWQtPnJlc3BbaV0gPSByZWFkbChob3N0LT5pb2FkZHIgKworCQkJCWhvc3QtPmNtZC0+cmVzcFtpXSA9IHNkaGNpX3JlYWRsKGhvc3QsCiAJCQkJCVNESENJX1JFU1BPTlNFICsgKDMtaSkqNCkgPDwgODsKIAkJCQlpZiAoaSAhPSAzKQogCQkJCQlob3N0LT5jbWQtPnJlc3BbaV0gfD0KLQkJCQkJCXJlYWRiKGhvc3QtPmlvYWRkciArCisJCQkJCQlzZGhjaV9yZWFkYihob3N0LAogCQkJCQkJU0RIQ0lfUkVTUE9OU0UgKyAoMy1pKSo0LTEpOwogCQkJfQogCQl9IGVsc2UgewotCQkJaG9zdC0+Y21kLT5yZXNwWzBdID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUkVTUE9OU0UpOworCQkJaG9zdC0+Y21kLT5yZXNwWzBdID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfUkVTUE9OU0UpOwogCQl9CiAJfQogCkBAIC04OTUsNyArOTU5LDEzIEBACiAJaWYgKGNsb2NrID09IGhvc3QtPmNsb2NrKQogCQlyZXR1cm47CiAKLQl3cml0ZXcoMCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CisJaWYgKGhvc3QtPm9wcy0+c2V0X2Nsb2NrKSB7CisJCWhvc3QtPm9wcy0+c2V0X2Nsb2NrKGhvc3QsIGNsb2NrKTsKKwkJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX05PTlNUQU5EQVJEX0NMT0NLKQorCQkJcmV0dXJuOworCX0KKworCXNkaGNpX3dyaXRldyhob3N0LCAwLCBTREhDSV9DTE9DS19DT05UUk9MKTsKIAogCWlmIChjbG9jayA9PSAwKQogCQlnb3RvIG91dDsKQEAgLTkwOCwxMSArOTc4LDExIEBACiAKIAljbGsgPSBkaXYgPDwgU0RIQ0lfRElWSURFUl9TSElGVDsKIAljbGsgfD0gU0RIQ0lfQ0xPQ0tfSU5UX0VOOwotCXdyaXRldyhjbGssIGhvc3QtPmlvYWRkciArIFNESENJX0NMT0NLX0NPTlRST0wpOworCXNkaGNpX3dyaXRldyhob3N0LCBjbGssIFNESENJX0NMT0NLX0NPTlRST0wpOwogCiAJLyogV2FpdCBtYXggMTAgbXMgKi8KIAl0aW1lb3V0ID0gMTA7Ci0Jd2hpbGUgKCEoKGNsayA9IHJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0NMT0NLX0NPTlRST0wpKQorCXdoaWxlICghKChjbGsgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9DTE9DS19DT05UUk9MKSkKIAkJJiBTREhDSV9DTE9DS19JTlRfU1RBQkxFKSkgewogCQlpZiAodGltZW91dCA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnRlcm5hbCBjbG9jayBuZXZlciAiCkBAIC05MjUsNyArOTk1LDcgQEAKIAl9CiAKIAljbGsgfD0gU0RIQ0lfQ0xPQ0tfQ0FSRF9FTjsKLQl3cml0ZXcoY2xrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9DTE9DS19DT05UUk9MKTsKKwlzZGhjaV93cml0ZXcoaG9zdCwgY2xrLCBTREhDSV9DTE9DS19DT05UUk9MKTsKIAogb3V0OgogCWhvc3QtPmNsb2NrID0gY2xvY2s7CkBAIC05MzksNyArMTAwOSw3IEBACiAJCXJldHVybjsKIAogCWlmIChwb3dlciA9PSAodW5zaWduZWQgc2hvcnQpLTEpIHsKLQkJd3JpdGViKDAsIGhvc3QtPmlvYWRkciArIFNESENJX1BPV0VSX0NPTlRST0wpOworCQlzZGhjaV93cml0ZWIoaG9zdCwgMCwgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtOTQ4LDcgKzEwMTgsNyBAQAogCSAqIGEgbmV3IHZhbHVlLiBTb21lIGNvbnRyb2xsZXJzIGRvbid0IHNlZW0gdG8gbGlrZSB0aGlzIHRob3VnaC4KIAkgKi8KIAlpZiAoIShob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19TSU5HTEVfUE9XRVJfV1JJVEUpKQotCQl3cml0ZWIoMCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CisJCXNkaGNpX3dyaXRlYihob3N0LCAwLCBTREhDSV9QT1dFUl9DT05UUk9MKTsKIAogCXB3ciA9IFNESENJX1BPV0VSX09OOwogCkBAIC05NzMsMTAgKzEwNDMsOSBAQAogCSAqIGFuZCBzZXQgdHVybiBvbiBwb3dlciBhdCB0aGUgc2FtZSB0aW1lLCBzbyBzZXQgdGhlIHZvbHRhZ2UgZmlyc3QuCiAJICovCiAJaWYgKChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19OT19TSU1VTFRfVkREX0FORF9QT1dFUikpCi0JCXdyaXRlYihwd3IgJiB+U0RIQ0lfUE9XRVJfT04sCi0JCQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CisJCXNkaGNpX3dyaXRlYihob3N0LCBwd3IgJiB+U0RIQ0lfUE9XRVJfT04sIFNESENJX1BPV0VSX0NPTlRST0wpOwogCi0Jd3JpdGViKHB3ciwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CisJc2RoY2lfd3JpdGViKGhvc3QsIHB3ciwgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CiAKIG91dDoKIAlob3N0LT5wb3dlciA9IHBvd2VyOwpAQCAtOTkxLDYgKzEwNjAsNyBAQAogc3RhdGljIHZvaWQgc2RoY2lfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CisJYm9vbCBwcmVzZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKQEAgLTEwMDUsOCArMTA3NSwxNCBAQAogCiAJaG9zdC0+bXJxID0gbXJxOwogCi0JaWYgKCEocmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJiBTREhDSV9DQVJEX1BSRVNFTlQpCi0JCXx8IChob3N0LT5mbGFncyAmIFNESENJX0RFVklDRV9ERUFEKSkgeworCS8qIElmIHBvbGxpbmcsIGFzc3VtZSB0aGF0IHRoZSBjYXJkIGlzIGFsd2F5cyBwcmVzZW50LiAqLworCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04pCisJCXByZXNlbnQgPSB0cnVlOworCWVsc2UKKwkJcHJlc2VudCA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1BSRVNFTlRfU1RBVEUpICYKKwkJCQlTREhDSV9DQVJEX1BSRVNFTlQ7CisKKwlpZiAoIXByZXNlbnQgfHwgaG9zdC0+ZmxhZ3MgJiBTREhDSV9ERVZJQ0VfREVBRCkgewogCQlob3N0LT5tcnEtPmNtZC0+ZXJyb3IgPSAtRU5PTUVESVVNOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT5maW5pc2hfdGFza2xldCk7CiAJfSBlbHNlCkBAIC0xMDM0LDggKzExMTAsOCBAQAogCSAqIFNob3VsZCBjbGVhciBvdXQgYW55IHdlaXJkIHN0YXRlcy4KIAkgKi8KIAlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpIHsKLQkJd3JpdGVsKDAsIGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOwotCQlzZGhjaV9pbml0KGhvc3QpOworCQlzZGhjaV93cml0ZWwoaG9zdCwgMCwgU0RIQ0lfU0lHTkFMX0VOQUJMRSk7CisJCXNkaGNpX3JlaW5pdChob3N0KTsKIAl9CiAKIAlzZGhjaV9zZXRfY2xvY2soaG9zdCwgaW9zLT5jbG9jayk7CkBAIC0xMDQ1LDcgKzExMjEsNyBAQAogCWVsc2UKIAkJc2RoY2lfc2V0X3Bvd2VyKGhvc3QsIGlvcy0+dmRkKTsKIAotCWN0cmwgPSByZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOwogCiAJaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKIAkJY3RybCB8PSBTREhDSV9DVFJMXzRCSVRCVVM7CkBAIC0xMDU3LDcgKzExMzMsNyBAQAogCWVsc2UKIAkJY3RybCAmPSB+U0RIQ0lfQ1RSTF9ISVNQRDsKIAotCXdyaXRlYihjdHJsLCBob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOwogCiAJLyoKIAkgKiBTb21lIChFTkUpIGNvbnRyb2xsZXJzIGdvIGFwZXNoaXQgb24gc29tZSBpb3Mgb3BlcmF0aW9uLApAQCAtMTA4NSwxMCArMTE2MSwxMiBAQAogCWlmIChob3N0LT5mbGFncyAmIFNESENJX0RFVklDRV9ERUFEKQogCQlwcmVzZW50ID0gMDsKIAllbHNlCi0JCXByZXNlbnQgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKTsKKwkJcHJlc2VudCA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1BSRVNFTlRfU1RBVEUpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0lOVkVSVEVEX1dSSVRFX1BST1RFQ1QpCisJCXJldHVybiAhIShwcmVzZW50ICYgU0RIQ0lfV1JJVEVfUFJPVEVDVCk7CiAJcmV0dXJuICEocHJlc2VudCAmIFNESENJX1dSSVRFX1BST1RFQ1QpOwogfQogCkBAIC0xMDk2LDcgKzExNzQsNiBAQAogewogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIGllcjsKIAogCWhvc3QgPSBtbWNfcHJpdihtbWMpOwogCkBAIC0xMTA1LDE1ICsxMTgyLDEwIEBACiAJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfREVWSUNFX0RFQUQpCiAJCWdvdG8gb3V0OwogCi0JaWVyID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7Ci0KLQlpZXIgJj0gflNESENJX0lOVF9DQVJEX0lOVDsKIAlpZiAoZW5hYmxlKQotCQlpZXIgfD0gU0RIQ0lfSU5UX0NBUkRfSU5UOwotCi0Jd3JpdGVsKGllciwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7Ci0Jd3JpdGVsKGllciwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfU0lHTkFMX0VOQUJMRSk7Ci0KKwkJc2RoY2lfdW5tYXNrX2lycXMoaG9zdCwgU0RIQ0lfSU5UX0NBUkRfSU5UKTsKKwllbHNlCisJCXNkaGNpX21hc2tfaXJxcyhob3N0LCBTREhDSV9JTlRfQ0FSRF9JTlQpOwogb3V0OgogCW1taW93YigpOwogCkBAIC0xMTQyLDcgKzEyMTQsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAotCWlmICghKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpICYgU0RIQ0lfQ0FSRF9QUkVTRU5UKSkgeworCWlmICghKHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1BSRVNFTlRfU1RBVEUpICYgU0RIQ0lfQ0FSRF9QUkVTRU5UKSkgewogCQlpZiAoaG9zdC0+bXJxKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYXJkIHJlbW92ZWQgZHVyaW5nIHRyYW5zZmVyIVxuIiwKIAkJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CkBAIC0xMzQ2LDggKzE0MTgsOCBAQAogCQkgKiB3ZSBuZWVkIHRvIGF0IGxlYXN0IHJlc3RhcnQgdGhlIHRyYW5zZmVyLgogCQkgKi8KIAkJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfRE1BX0VORCkKLQkJCXdyaXRlbChyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9ETUFfQUREUkVTUyksCi0JCQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfRE1BX0FERFJFU1MpOworCQkJc2RoY2lfd3JpdGVsKGhvc3QsIHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0RNQV9BRERSRVNTKSwKKwkJCQlTREhDSV9ETUFfQUREUkVTUyk7CiAKIAkJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfREFUQV9FTkQpIHsKIAkJCWlmIChob3N0LT5jbWQpIHsKQEAgLTEzNzMsNyArMTQ0NSw3IEBACiAKIAlzcGluX2xvY2soJmhvc3QtPmxvY2spOwogCi0JaW50bWFzayA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCWludG1hc2sgPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9JTlRfU1RBVFVTKTsKIAogCWlmICghaW50bWFzayB8fCBpbnRtYXNrID09IDB4ZmZmZmZmZmYpIHsKIAkJcmVzdWx0ID0gSVJRX05PTkU7CkBAIC0xMzg0LDIyICsxNDU2LDIyIEBACiAJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBpbnRtYXNrKTsKIAogCWlmIChpbnRtYXNrICYgKFNESENJX0lOVF9DQVJEX0lOU0VSVCB8IFNESENJX0lOVF9DQVJEX1JFTU9WRSkpIHsKLQkJd3JpdGVsKGludG1hc2sgJiAoU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwgU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFKSwKLQkJCWhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCQlzZGhjaV93cml0ZWwoaG9zdCwgaW50bWFzayAmIChTREhDSV9JTlRfQ0FSRF9JTlNFUlQgfAorCQkJU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFKSwgU0RIQ0lfSU5UX1NUQVRVUyk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPmNhcmRfdGFza2xldCk7CiAJfQogCiAJaW50bWFzayAmPSB+KFNESENJX0lOVF9DQVJEX0lOU0VSVCB8IFNESENJX0lOVF9DQVJEX1JFTU9WRSk7CiAKIAlpZiAoaW50bWFzayAmIFNESENJX0lOVF9DTURfTUFTSykgewotCQl3cml0ZWwoaW50bWFzayAmIFNESENJX0lOVF9DTURfTUFTSywKLQkJCWhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCQlzZGhjaV93cml0ZWwoaG9zdCwgaW50bWFzayAmIFNESENJX0lOVF9DTURfTUFTSywKKwkJCVNESENJX0lOVF9TVEFUVVMpOwogCQlzZGhjaV9jbWRfaXJxKGhvc3QsIGludG1hc2sgJiBTREhDSV9JTlRfQ01EX01BU0spOwogCX0KIAogCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfTUFTSykgewotCQl3cml0ZWwoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX01BU0ssCi0JCQlob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKwkJc2RoY2lfd3JpdGVsKGhvc3QsIGludG1hc2sgJiBTREhDSV9JTlRfREFUQV9NQVNLLAorCQkJU0RIQ0lfSU5UX1NUQVRVUyk7CiAJCXNkaGNpX2RhdGFfaXJxKGhvc3QsIGludG1hc2sgJiBTREhDSV9JTlRfREFUQV9NQVNLKTsKIAl9CiAKQEAgLTE0MTAsNyArMTQ4Miw3IEBACiAJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfQlVTX1BPV0VSKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhcmQgaXMgY29uc3VtaW5nIHRvbyBtdWNoIHBvd2VyIVxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKLQkJd3JpdGVsKFNESENJX0lOVF9CVVNfUE9XRVIsIGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCQlzZGhjaV93cml0ZWwoaG9zdCwgU0RIQ0lfSU5UX0JVU19QT1dFUiwgU0RIQ0lfSU5UX1NUQVRVUyk7CiAJfQogCiAJaW50bWFzayAmPSB+U0RIQ0lfSU5UX0JVU19QT1dFUjsKQEAgLTE0MjUsNyArMTQ5Nyw3IEBACiAJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgaW50bWFzayk7CiAJCXNkaGNpX2R1bXByZWdzKGhvc3QpOwogCi0JCXdyaXRlbChpbnRtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKwkJc2RoY2lfd3JpdGVsKGhvc3QsIGludG1hc2ssIFNESENJX0lOVF9TVEFUVVMpOwogCX0KIAogCXJlc3VsdCA9IElSUV9IQU5ETEVEOwpAQCAtMTQ1NSw2ICsxNTI3LDggQEAKIHsKIAlpbnQgcmV0OwogCisJc2RoY2lfZGlzYWJsZV9jYXJkX2RldGVjdGlvbihob3N0KTsKKwogCXJldCA9IG1tY19zdXNwZW5kX2hvc3QoaG9zdC0+bW1jLCBzdGF0ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTE0ODcsNiArMTU2MSw4IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCXNkaGNpX2VuYWJsZV9jYXJkX2RldGVjdGlvbihob3N0KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTM3LDcgKzE2MTMsNyBAQAogCiAJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQUxMKTsKIAotCWhvc3QtPnZlcnNpb24gPSByZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX1ZFUlNJT04pOworCWhvc3QtPnZlcnNpb24gPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9IT1NUX1ZFUlNJT04pOwogCWhvc3QtPnZlcnNpb24gPSAoaG9zdC0+dmVyc2lvbiAmIFNESENJX1NQRUNfVkVSX01BU0spCiAJCQkJPj4gU0RIQ0lfU1BFQ19WRVJfU0hJRlQ7CiAJaWYgKGhvc3QtPnZlcnNpb24gPiBTREhDSV9TUEVDXzIwMCkgewpAQCAtMTU0Niw3ICsxNjIyLDcgQEAKIAkJCWhvc3QtPnZlcnNpb24pOwogCX0KIAotCWNhcHMgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9DQVBBQklMSVRJRVMpOworCWNhcHMgPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9DQVBBQklMSVRJRVMpOwogCiAJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0ZPUkNFX0RNQSkKIAkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfVVNFX0RNQTsKQEAgLTE2MTQsMTkgKzE2OTAsMjcgQEAKIAogCWhvc3QtPm1heF9jbGsgPQogCQkoY2FwcyAmIFNESENJX0NMT0NLX0JBU0VfTUFTSykgPj4gU0RIQ0lfQ0xPQ0tfQkFTRV9TSElGVDsKLQlpZiAoaG9zdC0+bWF4X2NsayA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEhhcmR3YXJlIGRvZXNuJ3Qgc3BlY2lmeSBiYXNlIGNsb2NrICIKLQkJCSJmcmVxdWVuY3kuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KIAlob3N0LT5tYXhfY2xrICo9IDEwMDAwMDA7CisJaWYgKGhvc3QtPm1heF9jbGsgPT0gMCkgeworCQlpZiAoIWhvc3QtPm9wcy0+Z2V0X21heF9jbG9jaykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBIYXJkd2FyZSBkb2Vzbid0IHNwZWNpZnkgYmFzZSBjbG9jayAiCisJCQkgICAgICAgImZyZXF1ZW5jeS5cbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWhvc3QtPm1heF9jbGsgPSBob3N0LT5vcHMtPmdldF9tYXhfY2xvY2soaG9zdCk7CisJfQogCiAJaG9zdC0+dGltZW91dF9jbGsgPQogCQkoY2FwcyAmIFNESENJX1RJTUVPVVRfQ0xLX01BU0spID4+IFNESENJX1RJTUVPVVRfQ0xLX1NISUZUOwogCWlmIChob3N0LT50aW1lb3V0X2NsayA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEhhcmR3YXJlIGRvZXNuJ3Qgc3BlY2lmeSB0aW1lb3V0IGNsb2NrICIKLQkJCSJmcmVxdWVuY3kuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7Ci0JCXJldHVybiAtRU5PREVWOworCQlpZiAoIWhvc3QtPm9wcy0+Z2V0X3RpbWVvdXRfY2xvY2spIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IHRpbWVvdXQgY2xvY2sgIgorCQkJICAgICAgICJmcmVxdWVuY3kuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlob3N0LT50aW1lb3V0X2NsayA9IGhvc3QtPm9wcy0+Z2V0X3RpbWVvdXRfY2xvY2soaG9zdCk7CiAJfQogCWlmIChjYXBzICYgU0RIQ0lfVElNRU9VVF9DTEtfVU5JVCkKIAkJaG9zdC0+dGltZW91dF9jbGsgKj0gMTAwMDsKQEAgLTE2NDIsNiArMTcyNiw5IEBACiAJaWYgKGNhcHMgJiBTREhDSV9DQU5fRE9fSElTUEQpCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1NEX0hJR0hTUEVFRDsKIAorCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04pCisJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX05FRURTX1BPTEw7CisKIAltbWMtPm9jcl9hdmFpbCA9IDA7CiAJaWYgKGNhcHMgJiBTREhDSV9DQU5fVkREXzMzMCkKIAkJbW1jLT5vY3JfYXZhaWwgfD0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0OwpAQCAtMTY5MCwxMyArMTc3NywxOSBAQAogCSAqIE1heGltdW0gYmxvY2sgc2l6ZS4gVGhpcyB2YXJpZXMgZnJvbSBjb250cm9sbGVyIHRvIGNvbnRyb2xsZXIgYW5kCiAJICogaXMgc3BlY2lmaWVkIGluIHRoZSBjYXBhYmlsaXRpZXMgcmVnaXN0ZXIuCiAJICovCi0JbW1jLT5tYXhfYmxrX3NpemUgPSAoY2FwcyAmIFNESENJX01BWF9CTE9DS19NQVNLKSA+PiBTREhDSV9NQVhfQkxPQ0tfU0hJRlQ7Ci0JaWYgKG1tYy0+bWF4X2Jsa19zaXplID49IDMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgbWF4aW11bSBibG9jayBzaXplLCAiCi0JCQkiYXNzdW1pbmcgNTEyIGJ5dGVzXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7Ci0JCW1tYy0+bWF4X2Jsa19zaXplID0gNTEyOwotCX0gZWxzZQotCQltbWMtPm1heF9ibGtfc2l6ZSA9IDUxMiA8PCBtbWMtPm1heF9ibGtfc2l6ZTsKKwlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfRk9SQ0VfQkxLX1NaXzIwNDgpIHsKKwkJbW1jLT5tYXhfYmxrX3NpemUgPSAyOworCX0gZWxzZSB7CisJCW1tYy0+bWF4X2Jsa19zaXplID0gKGNhcHMgJiBTREhDSV9NQVhfQkxPQ0tfTUFTSykgPj4KKwkJCQlTREhDSV9NQVhfQkxPQ0tfU0hJRlQ7CisJCWlmIChtbWMtPm1heF9ibGtfc2l6ZSA+PSAzKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW52YWxpZCBtYXhpbXVtIGJsb2NrIHNpemUsICIKKwkJCQkiYXNzdW1pbmcgNTEyIGJ5dGVzXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CisJCQltbWMtPm1heF9ibGtfc2l6ZSA9IDA7CisJCX0KKwl9CisKKwltbWMtPm1heF9ibGtfc2l6ZSA9IDUxMiA8PCBtbWMtPm1heF9ibGtfc2l6ZTsKIAogCS8qCiAJICogTWF4aW11bSBibG9jayBjb3VudC4KQEAgLTE3NDYsNiArMTgzOSw4IEBACiAJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKT8iQSI6IiIsCiAJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpPyJETUEiOiJQSU8iKTsKIAorCXNkaGNpX2VuYWJsZV9jYXJkX2RldGVjdGlvbihob3N0KTsKKwogCXJldHVybiAwOwogCiAjaWZkZWYgU0RIQ0lfVVNFX0xFRFNfQ0xBU1MKQEAgLTE3ODIsNiArMTg3Nyw4IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAl9CiAKKwlzZGhjaV9kaXNhYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOworCiAJbW1jX3JlbW92ZV9ob3N0KGhvc3QtPm1tYyk7CiAKICNpZmRlZiBTREhDSV9VU0VfTEVEU19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCmluZGV4IDQzYzM3YzYuLmYyMGE4MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKQEAgLTEwLDYgKzEwLDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogLyoKICAqIENvbnRyb2xsZXIgcmVnaXN0ZXJzCkBAIC0xMjMsNiArMTI2LDcgQEAKIAkJU0RIQ0lfSU5UX0RBVEFfQVZBSUwgfCBTREhDSV9JTlRfU1BBQ0VfQVZBSUwgfCBcCiAJCVNESENJX0lOVF9EQVRBX1RJTUVPVVQgfCBTREhDSV9JTlRfREFUQV9DUkMgfCBcCiAJCVNESENJX0lOVF9EQVRBX0VORF9CSVQpCisjZGVmaW5lIFNESENJX0lOVF9BTExfTUFTSwkoKHVuc2lnbmVkIGludCktMSkKIAogI2RlZmluZSBTREhDSV9BQ01EMTJfRVJSCTB4M0MKIApAQCAtMjEwLDYgKzIxNCwxOCBAQAogI2RlZmluZSBTREhDSV9RVUlSS19CUk9LRU5fU01BTExfUElPCQkJKDE8PDEzKQogLyogQ29udHJvbGxlciBkb2VzIG5vdCBwcm92aWRlIHRyYW5zZmVyLWNvbXBsZXRlIGludGVycnVwdCB3aGVuIG5vdCBidXN5ICovCiAjZGVmaW5lIFNESENJX1FVSVJLX05PX0JVU1lfSVJRCQkJCSgxPDwxNCkKKy8qIENvbnRyb2xsZXIgaGFzIHVucmVsaWFibGUgY2FyZCBkZXRlY3Rpb24gKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OCQkoMTw8MTUpCisvKiBDb250cm9sbGVyIHJlcG9ydHMgaW52ZXJ0ZWQgd3JpdGUtcHJvdGVjdCBzdGF0ZSAqLworI2RlZmluZSBTREhDSV9RVUlSS19JTlZFUlRFRF9XUklURV9QUk9URUNUCQkoMTw8MTYpCisvKiBDb250cm9sbGVyIGhhcyBub25zdGFuZGFyZCBjbG9jayBtYW5hZ2VtZW50ICovCisjZGVmaW5lIFNESENJX1FVSVJLX05PTlNUQU5EQVJEX0NMT0NLCQkJKDE8PDE3KQorLyogQ29udHJvbGxlciBkb2VzIG5vdCBsaWtlIGZhc3QgUElPIHRyYW5zZmVycyAqLworI2RlZmluZSBTREhDSV9RVUlSS19QSU9fTkVFRFNfREVMQVkJCQkoMTw8MTgpCisvKiBDb250cm9sbGVyIGxvc2luZyBzaWduYWwvaW50ZXJydXB0IGVuYWJsZSBzdGF0ZXMgYWZ0ZXIgcmVzZXQgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfUkVTVE9SRV9JUlFTX0FGVEVSX1JFU0VUCQkoMTw8MTkpCisvKiBDb250cm9sbGVyIGhhcyB0byBiZSBmb3JjZWQgdG8gdXNlIGJsb2NrIHNpemUgb2YgMjA0OCBieXRlcyAqLworI2RlZmluZSBTREhDSV9RVUlSS19GT1JDRV9CTEtfU1pfMjA0OAkJCSgxPDwyMCkKIAogCWludAkJCWlycTsJCS8qIERldmljZSBJUlEgKi8KIAl2b2lkIF9faW9tZW0gKgkJaW9hZGRyOwkJLyogTWFwcGVkIGFkZHJlc3MgKi8KQEAgLTI2Nyw5ICsyODMsMTA1IEBACiAKIAogc3RydWN0IHNkaGNpX29wcyB7CisjaWZkZWYgQ09ORklHX01NQ19TREhDSV9JT19BQ0NFU1NPUlMKKwl1MzIJCSgqcmVhZGwpKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKTsKKwl1MTYJCSgqcmVhZHcpKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKTsKKwl1OAkJKCpyZWFkYikoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpOworCXZvaWQJCSgqd3JpdGVsKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZyk7CisJdm9pZAkJKCp3cml0ZXcpKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MTYgdmFsLCBpbnQgcmVnKTsKKwl2b2lkCQkoKndyaXRlYikoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHU4IHZhbCwgaW50IHJlZyk7CisjZW5kaWYKKworCXZvaWQJKCpzZXRfY2xvY2spKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgY2xvY2spOworCiAJaW50CQkoKmVuYWJsZV9kbWEpKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfbWF4X2Nsb2NrKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCk7CisJdW5zaWduZWQgaW50CSgqZ2V0X3RpbWVvdXRfY2xvY2spKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKIH07CiAKKyNpZmRlZiBDT05GSUdfTU1DX1NESENJX0lPX0FDQ0VTU09SUworCitzdGF0aWMgaW5saW5lIHZvaWQgc2RoY2lfd3JpdGVsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgdmFsLCBpbnQgcmVnKQoreworCWlmICh1bmxpa2VseShob3N0LT5vcHMtPndyaXRlbCkpCisJCWhvc3QtPm9wcy0+d3JpdGVsKGhvc3QsIHZhbCwgcmVnKTsKKwllbHNlCisJCXdyaXRlbCh2YWwsIGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZGhjaV93cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpCit7CisJaWYgKHVubGlrZWx5KGhvc3QtPm9wcy0+d3JpdGV3KSkKKwkJaG9zdC0+b3BzLT53cml0ZXcoaG9zdCwgdmFsLCByZWcpOworCWVsc2UKKwkJd3JpdGV3KHZhbCwgaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNkaGNpX3dyaXRlYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKQoreworCWlmICh1bmxpa2VseShob3N0LT5vcHMtPndyaXRlYikpCisJCWhvc3QtPm9wcy0+d3JpdGViKGhvc3QsIHZhbCwgcmVnKTsKKwllbHNlCisJCXdyaXRlYih2YWwsIGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNkaGNpX3JlYWRsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCWlmICh1bmxpa2VseShob3N0LT5vcHMtPnJlYWRsKSkKKwkJcmV0dXJuIGhvc3QtPm9wcy0+cmVhZGwoaG9zdCwgcmVnKTsKKwllbHNlCisJCXJldHVybiByZWFkbChob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBzZGhjaV9yZWFkdyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlpZiAodW5saWtlbHkoaG9zdC0+b3BzLT5yZWFkdykpCisJCXJldHVybiBob3N0LT5vcHMtPnJlYWR3KGhvc3QsIHJlZyk7CisJZWxzZQorCQlyZXR1cm4gcmVhZHcoaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1OCBzZGhjaV9yZWFkYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlpZiAodW5saWtlbHkoaG9zdC0+b3BzLT5yZWFkYikpCisJCXJldHVybiBob3N0LT5vcHMtPnJlYWRiKGhvc3QsIHJlZyk7CisJZWxzZQorCQlyZXR1cm4gcmVhZGIoaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHNkaGNpX3dyaXRlbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZykKK3sKKwl3cml0ZWwodmFsLCBob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2RoY2lfd3JpdGV3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MTYgdmFsLCBpbnQgcmVnKQoreworCXdyaXRldyh2YWwsIGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZGhjaV93cml0ZWIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHU4IHZhbCwgaW50IHJlZykKK3sKKwl3cml0ZWIodmFsLCBob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzZGhjaV9yZWFkbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgc2RoY2lfcmVhZHcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIHJlYWR3KGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggc2RoY2lfcmVhZGIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRiKGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTU1DX1NESENJX0lPX0FDQ0VTU09SUyAqLwogCiBleHRlcm4gc3RydWN0IHNkaGNpX2hvc3QgKnNkaGNpX2FsbG9jX2hvc3Qoc3RydWN0IGRldmljZSAqZGV2LAogCXNpemVfdCBwcml2X3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCmluZGV4IDZhN2E2MTkuLjYzZmJkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKQEAgLTU2OCwxMSArNTY4LDExIEBACiAJaG9zdC0+bW1jID0gbW1jOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgbW1jKTsKIAotCWhvc3QtPmN0bCA9IGlvcmVtYXAocmVzX2N0bC0+c3RhcnQsIHJlc19jdGwtPmVuZCAtIHJlc19jdGwtPnN0YXJ0KTsKKwlob3N0LT5jdGwgPSBpb3JlbWFwKHJlc19jdGwtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlc19jdGwpKTsKIAlpZiAoIWhvc3QtPmN0bCkKIAkJZ290byBob3N0X2ZyZWU7CiAKLQlob3N0LT5jbmYgPSBpb3JlbWFwKHJlc19jbmYtPnN0YXJ0LCByZXNfY25mLT5lbmQgLSByZXNfY25mLT5zdGFydCk7CisJaG9zdC0+Y25mID0gaW9yZW1hcChyZXNfY25mLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXNfY25mKSk7CiAJaWYgKCFob3N0LT5jbmYpCiAJCWdvdG8gdW5tYXBfY3RsOwogCkBAIC02NTAsMTAgKzY1MCwxMCBAQAogCWlmIChtbWMpIHsKIAkJc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCQltbWNfcmVtb3ZlX2hvc3QobW1jKTsKLQkJbW1jX2ZyZWVfaG9zdChtbWMpOwogCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCQlpb3VubWFwKGhvc3QtPmN0bCk7CiAJCWlvdW5tYXAoaG9zdC0+Y25mKTsKKwkJbW1jX2ZyZWVfaG9zdChtbWMpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oCmluZGV4IGJhMmI0MjQuLjljODMxYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmgKQEAgLTgsNiArOCw5IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKi8KKworI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKwogI2RlZmluZSBDTkZfQ01EICAgICAweDA0CiAjZGVmaW5lIENORl9DVExfQkFTRSAgIDB4MTAKICNkZWZpbmUgQ05GX0lOVF9QSU4gIDB4M2QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCmluZGV4IGU5MDI2Y2IuLjU3MmQzMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgcHhhMnh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwppbmRleCBlNDIyNmUwLi5lNTFjMWVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKQEAgLTE3NzMsNCArMTc3Myw0IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTS1TeXN0ZW1zIERpc2tPbkNoaXAgMjAwMCwgTWlsbGVubml1bSBhbmQgTWlsbGVubml1bSBQbHVzIGRldmljZSBkcml2ZXJcbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNLVN5c3RlbXMgRGlza09uQ2hpcCAyMDAwLCBNaWxsZW5uaXVtIGFuZCBNaWxsZW5uaXVtIFBsdXMgZGV2aWNlIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggMGMzYWZjYy4uNWY3MTM3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC0yNzIwLDE0ICsyNzIwLDE0IEBACiAJcmV0dXJuIGNoaXAtPnNjYW5fYmJ0KG10ZCk7CiB9CiAKLS8qIG1vZHVsZV90ZXh0X2FkZHJlc3MoKSBpc24ndCBleHBvcnRlZCwgYW5kIGl0J3MgbW9zdGx5IGEgcG9pbnRsZXNzCisvKiBpc19tb2R1bGVfdGV4dF9hZGRyZXNzKCkgaXNuJ3QgZXhwb3J0ZWQsIGFuZCBpdCdzIG1vc3RseSBhIHBvaW50bGVzcwogICAgdGVzdCBpZiB0aGlzIGlzIGEgbW9kdWxlIF9hbnl3YXlfIC0tIHRoZXknZCBoYXZlIHRvIHRyeSBfcmVhbGx5XyBoYXJkCiAgICB0byBjYWxsIHVzIGZyb20gaW4ta2VybmVsIGNvZGUgaWYgdGhlIGNvcmUgTkFORCBzdXBwb3J0IGlzIG1vZHVsYXIuICovCiAjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIGNhbGxlcl9pc19tb2R1bGUoKSAoMSkKICNlbHNlCiAjZGVmaW5lIGNhbGxlcl9pc19tb2R1bGUoKSBcCi0JbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisJaXNfbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCiAjZW5kaWYKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC90ZXN0cy9tdGRfb29idGVzdC5jIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX29vYnRlc3QuYwppbmRleCBhZmJjM2Y4Li5hMThlOGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC90ZXN0cy9tdGRfb29idGVzdC5jCisrKyBiL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9vb2J0ZXN0LmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCQlvcHMub29ibGVuICAgID0gdXNlX2xlbjsKIAkJb3BzLm9vYnJldGxlbiA9IDA7CiAJCW9wcy5vb2JvZmZzICAgPSB1c2Vfb2Zmc2V0OwotCQlvcHMuZGF0YnVmICAgID0gMDsKKwkJb3BzLmRhdGJ1ZiAgICA9IE5VTEw7CiAJCW9wcy5vb2JidWYgICAgPSB3cml0ZWJ1ZjsKIAkJZXJyID0gbXRkLT53cml0ZV9vb2IobXRkLCBhZGRyLCAmb3BzKTsKIAkJaWYgKGVyciB8fCBvcHMub29icmV0bGVuICE9IHVzZV9sZW4pIHsKQEAgLTE4OSw3ICsxODksNyBAQAogCQlvcHMub29ibGVuICAgID0gdXNlX2xlbjsKIAkJb3BzLm9vYnJldGxlbiA9IDA7CiAJCW9wcy5vb2JvZmZzICAgPSB1c2Vfb2Zmc2V0OwotCQlvcHMuZGF0YnVmICAgID0gMDsKKwkJb3BzLmRhdGJ1ZiAgICA9IE5VTEw7CiAJCW9wcy5vb2JidWYgICAgPSByZWFkYnVmOwogCQllcnIgPSBtdGQtPnJlYWRfb29iKG10ZCwgYWRkciwgJm9wcyk7CiAJCWlmIChlcnIgfHwgb3BzLm9vYnJldGxlbiAhPSB1c2VfbGVuKSB7CkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJCW9wcy5vb2JsZW4gICAgPSBtdGQtPmVjY2xheW91dC0+b29iYXZhaWw7CiAJCQlvcHMub29icmV0bGVuID0gMDsKIAkJCW9wcy5vb2JvZmZzICAgPSAwOwotCQkJb3BzLmRhdGJ1ZiAgICA9IDA7CisJCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJCW9wcy5vb2JidWYgICAgPSByZWFkYnVmOwogCQkJZXJyID0gbXRkLT5yZWFkX29vYihtdGQsIGFkZHIsICZvcHMpOwogCQkJaWYgKGVyciB8fCBvcHMub29icmV0bGVuICE9IG10ZC0+ZWNjbGF5b3V0LT5vb2JhdmFpbCkgewpAQCAtMjgxLDcgKzI4MSw3IEBACiAJb3BzLm9vYmxlbiAgICA9IGxlbjsKIAlvcHMub29icmV0bGVuID0gMDsKIAlvcHMub29ib2ZmcyAgID0gMDsKLQlvcHMuZGF0YnVmICAgID0gMDsKKwlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAlvcHMub29iYnVmICAgID0gcmVhZGJ1ZjsKIAllcnIgPSBtdGQtPnJlYWRfb29iKG10ZCwgYWRkciwgJm9wcyk7CiAJaWYgKGVyciB8fCBvcHMub29icmV0bGVuICE9IGxlbikgewpAQCAtNTIyLDcgKzUyMiw3IEBACiAJb3BzLm9vYmxlbiAgICA9IDE7CiAJb3BzLm9vYnJldGxlbiA9IDA7CiAJb3BzLm9vYm9mZnMgICA9IG10ZC0+ZWNjbGF5b3V0LT5vb2JhdmFpbDsKLQlvcHMuZGF0YnVmICAgID0gMDsKKwlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAlvcHMub29iYnVmICAgID0gd3JpdGVidWY7CiAJcHJpbnRrKFBSSU5UX1BSRUYgImF0dGVtcHRpbmcgdG8gc3RhcnQgd3JpdGUgcGFzdCBlbmQgb2YgT09CXG4iKTsKIAlwcmludGsoUFJJTlRfUFJFRiAiYW4gZXJyb3IgaXMgZXhwZWN0ZWQuLi5cbiIpOwpAQCAtNTQyLDcgKzU0Miw3IEBACiAJb3BzLm9vYmxlbiAgICA9IDE7CiAJb3BzLm9vYnJldGxlbiA9IDA7CiAJb3BzLm9vYm9mZnMgICA9IG10ZC0+ZWNjbGF5b3V0LT5vb2JhdmFpbDsKLQlvcHMuZGF0YnVmICAgID0gMDsKKwlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAlvcHMub29iYnVmICAgID0gcmVhZGJ1ZjsKIAlwcmludGsoUFJJTlRfUFJFRiAiYXR0ZW1wdGluZyB0byBzdGFydCByZWFkIHBhc3QgZW5kIG9mIE9PQlxuIik7CiAJcHJpbnRrKFBSSU5UX1BSRUYgImFuIGVycm9yIGlzIGV4cGVjdGVkLi4uXG4iKTsKQEAgLTU2Niw3ICs1NjYsNyBAQAogCQlvcHMub29ibGVuICAgID0gbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsICsgMTsKIAkJb3BzLm9vYnJldGxlbiA9IDA7CiAJCW9wcy5vb2JvZmZzICAgPSAwOwotCQlvcHMuZGF0YnVmICAgID0gMDsKKwkJb3BzLmRhdGJ1ZiAgICA9IE5VTEw7CiAJCW9wcy5vb2JidWYgICAgPSB3cml0ZWJ1ZjsKIAkJcHJpbnRrKFBSSU5UX1BSRUYgImF0dGVtcHRpbmcgdG8gd3JpdGUgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcHJpbnRrKFBSSU5UX1BSRUYgImFuIGVycm9yIGlzIGV4cGVjdGVkLi4uXG4iKTsKQEAgLTU4Niw3ICs1ODYsNyBAQAogCQlvcHMub29ibGVuICAgID0gbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsICsgMTsKIAkJb3BzLm9vYnJldGxlbiA9IDA7CiAJCW9wcy5vb2JvZmZzICAgPSAwOwotCQlvcHMuZGF0YnVmICAgID0gMDsKKwkJb3BzLmRhdGJ1ZiAgICA9IE5VTEw7CiAJCW9wcy5vb2JidWYgICAgPSByZWFkYnVmOwogCQlwcmludGsoUFJJTlRfUFJFRiAiYXR0ZW1wdGluZyB0byByZWFkIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CiAJCXByaW50ayhQUklOVF9QUkVGICJhbiBlcnJvciBpcyBleHBlY3RlZC4uLlxuIik7CkBAIC02MTAsNyArNjEwLDcgQEAKIAkJb3BzLm9vYmxlbiAgICA9IG10ZC0+ZWNjbGF5b3V0LT5vb2JhdmFpbDsKIAkJb3BzLm9vYnJldGxlbiA9IDA7CiAJCW9wcy5vb2JvZmZzICAgPSAxOwotCQlvcHMuZGF0YnVmICAgID0gMDsKKwkJb3BzLmRhdGJ1ZiAgICA9IE5VTEw7CiAJCW9wcy5vb2JidWYgICAgPSB3cml0ZWJ1ZjsKIAkJcHJpbnRrKFBSSU5UX1BSRUYgImF0dGVtcHRpbmcgdG8gd3JpdGUgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcHJpbnRrKFBSSU5UX1BSRUYgImFuIGVycm9yIGlzIGV4cGVjdGVkLi4uXG4iKTsKQEAgLTYzMCw3ICs2MzAsNyBAQAogCQlvcHMub29ibGVuICAgID0gbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsOwogCQlvcHMub29icmV0bGVuID0gMDsKIAkJb3BzLm9vYm9mZnMgICA9IDE7Ci0JCW9wcy5kYXRidWYgICAgPSAwOworCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJb3BzLm9vYmJ1ZiAgICA9IHJlYWRidWY7CiAJCXByaW50ayhQUklOVF9QUkVGICJhdHRlbXB0aW5nIHRvIHJlYWQgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcHJpbnRrKFBSSU5UX1BSRUYgImFuIGVycm9yIGlzIGV4cGVjdGVkLi4uXG4iKTsKQEAgLTY3MCw3ICs2NzAsNyBAQAogCQkJb3BzLm9vYmxlbiAgICA9IHN6OwogCQkJb3BzLm9vYnJldGxlbiA9IDA7CiAJCQlvcHMub29ib2ZmcyAgID0gMDsKLQkJCW9wcy5kYXRidWYgICAgPSAwOworCQkJb3BzLmRhdGJ1ZiAgICA9IE5VTEw7CiAJCQlvcHMub29iYnVmICAgID0gd3JpdGVidWY7CiAJCQllcnIgPSBtdGQtPndyaXRlX29vYihtdGQsIGFkZHIsICZvcHMpOwogCQkJaWYgKGVycikKQEAgLTY5OCw3ICs2OTgsNyBAQAogCQlvcHMub29ibGVuICAgID0gbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsICogMjsKIAkJb3BzLm9vYnJldGxlbiA9IDA7CiAJCW9wcy5vb2JvZmZzICAgPSAwOwotCQlvcHMuZGF0YnVmICAgID0gMDsKKwkJb3BzLmRhdGJ1ZiAgICA9IE5VTEw7CiAJCW9wcy5vb2JidWYgICAgPSByZWFkYnVmOwogCQllcnIgPSBtdGQtPnJlYWRfb29iKG10ZCwgYWRkciwgJm9wcyk7CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC90ZXN0cy9tdGRfcmVhZHRlc3QuYyBiL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9yZWFkdGVzdC5jCmluZGV4IDY0NWU3N2YuLjc5ZmM0NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9yZWFkdGVzdC5jCisrKyBiL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9yZWFkdGVzdC5jCkBAIC03MSw3ICs3MSw3IEBACiAJCQlvcHMub29ibGVuICAgID0gbXRkLT5vb2JzaXplOwogCQkJb3BzLm9vYnJldGxlbiA9IDA7CiAJCQlvcHMub29ib2ZmcyAgID0gMDsKLQkJCW9wcy5kYXRidWYgICAgPSAwOworCQkJb3BzLmRhdGJ1ZiAgICA9IE5VTEw7CiAJCQlvcHMub29iYnVmICAgID0gb29iYnVmOwogCQkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIGFkZHIsICZvcHMpOwogCQkJaWYgKHJldCB8fCBvcHMub29icmV0bGVuICE9IG10ZC0+b29ic2l6ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggZjA2MmI0Mi4uMTY4OTllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC05NzQsNyArOTc0LDcgQEAKIAogY29uZmlnIEVUSE9DCiAJdHJpc3RhdGUgIk9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVAorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEhBU19JT01FTQogCXNlbGVjdCBNSUkKIAlzZWxlY3QgUEhZTElCCiAJaGVscApAQCAtMjU0Nyw2ICsyNTQ3LDIzIEBACiAJICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW4gCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQ+LgogCitjb25maWcgVlhHRQorCXRyaXN0YXRlICJOZXRlcmlvbiBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBTZXJ2ZXIgQWRhcHRlciIKKwlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwIEdiRSBQQ0llCisJICBJL08gVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisJICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW4KKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy92eGdlLnR4dD4uCisKK2NvbmZpZyBWWEdFX0RFQlVHX1RSQUNFX0FMTAorCWJvb2wgIkVuYWJsaW5nIEFsbCBEZWJ1ZyB0cmFjZSBzdGF0bWVudHMgaW4gZHJpdmVyIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gVlhHRQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxpbmcgYWxsIHRoZSBkZWJ1ZyB0cmFjZSBzdGF0ZW1lbnRzIGluCisJICBkcml2ZXIuIEJ5ICBkZWZhdWx0IG9ubHkgZmV3IGRlYnVnIHRyYWNlIHN0YXRlbWVudHMgYXJlIGVuYWJsZWQuCisKIGNvbmZpZyBNWVJJMTBHRQogCXRyaXN0YXRlICJNeXJpY29tIE15cmktMTBHIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCA5ODQwOWM5Li5lZGM5YTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMjIwLDYgKzIyMCw3IEBACiBvYmotJChDT05GSUdfQU1EODExMV9FVEgpICs9IGFtZDgxMTFlLm8KIG9iai0kKENPTkZJR19JQk1WRVRIKSArPSBpYm12ZXRoLm8KIG9iai0kKENPTkZJR19TMklPKSArPSBzMmlvLm8KK29iai0kKENPTkZJR19WWEdFKSArPSB2eGdlLwogb2JqLSQoQ09ORklHX01ZUkkxMEdFKSArPSBteXJpMTBnZS8KIG9iai0kKENPTkZJR19TTUM5MVgpICs9IHNtYzkxeC5vCiBvYmotJChDT05GSUdfU01DOTExWCkgKz0gc21jOTExeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IDI1NGVjNjIuLmQ4MzUwODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC01NTksNyArNTU5LDcgQEAKIHN0YXRpYyB2b2lkCiBkbTkwMDBfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5ZWRfd29yayh3KTsKIAlib2FyZF9pbmZvX3QgKmRiID0gY29udGFpbmVyX29mKGR3LCBib2FyZF9pbmZvX3QsIHBoeV9wb2xsKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRiLT5uZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbmV0LmMgYi9kcml2ZXJzL25ldC9kbmV0LmMKaW5kZXggZGIxZTMxZi4uMzNmYTllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2RuZXQuYwpAQCAtOCw3ICs4LDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwppbmRleCAwNDliMGE3Li44YmJlN2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKQEAgLTEyOSw3ICsxMjksOCBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCXNrYiA9IGJjb21fcmV0cmlldmVfYnVmZmVyKHMsIE5VTEwsIChzdHJ1Y3QgYmNvbV9iZCAqKikmYmQpOwotCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPmRldiwgYmQtPnNrYl9wYSwgc2tiLT5sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYucGFyZW50LCBiZC0+c2tiX3BhLCBza2ItPmxlbiwKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJfQogfQpAQCAtMTUwLDcgKzE1MSw3IEBACiAJCWJkID0gKHN0cnVjdCBiY29tX2ZlY19iZCAqKWJjb21fcHJlcGFyZV9uZXh0X2J1ZmZlcihyeHRzayk7CiAKIAkJYmQtPnN0YXR1cyA9IEZFQ19SWF9CVUZGRVJfU0laRTsKLQkJYmQtPnNrYl9wYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgc2tiLT5kYXRhLAorCQliZC0+c2tiX3BhID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYucGFyZW50LCBza2ItPmRhdGEsCiAJCQkJRkVDX1JYX0JVRkZFUl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCWJjb21fc3VibWl0X25leHRfYnVmZmVyKHJ4dHNrLCBza2IpOwpAQCAtMjcwLDE1ICsyNzEsNiBAQAogCXBoeV93cml0ZShwcml2LT5waHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTsKIH0KIAotc3RhdGljIGludCBtcGM1Mnh4X2ZlY19waHlfbWlpX2lvY3RsKHN0cnVjdCBtcGM1Mnh4X2ZlY19wcml2ICpwcml2LAotCQlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKm1paV9kYXRhLCBpbnQgY21kKQotewotCWlmICghcHJpdi0+cGh5ZGV2KQotCQlyZXR1cm4gLUVOT1RTVVBQOwotCi0JcmV0dXJuIHBoeV9taWlfaW9jdGwocHJpdi0+cGh5ZGV2LCBtaWlfZGF0YSwgY21kKTsKLX0KLQogc3RhdGljIHZvaWQgbXBjNTJ4eF9mZWNfcGh5X2h3X2luaXQoc3RydWN0IG1wYzUyeHhfZmVjX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IG1wYzUyeHhfZmVjIF9faW9tZW0gKmZlYyA9IHByaXYtPmZlYzsKQEAgLTM3MCw3ICszNjIsNyBAQAogICogaW52YXJpYW50IHdpbGwgaG9sZCBpZiB5b3UgbWFrZSBzdXJlIHRoYXQgdGhlIG5ldGlmXypfcXVldWUoKQogICogY2FsbHMgYXJlIGRvbmUgYXQgdGhlIHByb3BlciB0aW1lcy4KICAqLwotc3RhdGljIGludCBtcGM1Mnh4X2ZlY19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtcGM1Mnh4X2ZlY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYmNvbV9mZWNfYmQgKmJkOwpAQCAtMzc4LDcgKzM3MCw3IEBACiAJaWYgKGJjb21fcXVldWVfZnVsbChwcml2LT50eF9kbWF0c2spKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgInRyYW5zbWl0IHF1ZXVlIG92ZXJydW5cbiIpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwpAQCAtMzg4LDcgKzM4MCw4IEBACiAJCWJjb21fcHJlcGFyZV9uZXh0X2J1ZmZlcihwcml2LT50eF9kbWF0c2spOwogCiAJYmQtPnN0YXR1cyA9IHNrYi0+bGVuIHwgQkNPTV9GRUNfVFhfQkRfVEZEIHwgQkNPTV9GRUNfVFhfQkRfVEM7Ci0JYmQtPnNrYl9wYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJYmQtPnNrYl9wYSA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCQkgICAgRE1BX1RPX0RFVklDRSk7CiAKIAliY29tX3N1Ym1pdF9uZXh0X2J1ZmZlcihwcml2LT50eF9kbWF0c2ssIHNrYik7CiAKQEAgLTM5OCw3ICszOTEsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtNDMwLDcgKzQyMyw4IEBACiAJCXN0cnVjdCBiY29tX2ZlY19iZCAqYmQ7CiAJCXNrYiA9IGJjb21fcmV0cmlldmVfYnVmZmVyKHByaXYtPnR4X2RtYXRzaywgTlVMTCwKIAkJCQkoc3RydWN0IGJjb21fYmQgKiopJmJkKTsKLQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5kZXYsIGJkLT5za2JfcGEsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYtPmRldi5wYXJlbnQsIGJkLT5za2JfcGEsIHNrYi0+bGVuLAorCQkJCSBETUFfVE9fREVWSUNFKTsKIAogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCX0KQEAgLTQ1NSw3ICs0NDksOCBAQAogCiAJCXJza2IgPSBiY29tX3JldHJpZXZlX2J1ZmZlcihwcml2LT5yeF9kbWF0c2ssICZzdGF0dXMsCiAJCQkJKHN0cnVjdCBiY29tX2JkICoqKSZiZCk7Ci0JCWRtYV91bm1hcF9zaW5nbGUoJmRldi0+ZGV2LCBiZC0+c2tiX3BhLCByc2tiLT5sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYucGFyZW50LCBiZC0+c2tiX3BhLCByc2tiLT5sZW4sCisJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJLyogVGVzdCBmb3IgZXJyb3JzIGluIHJlY2VpdmVkIGZyYW1lICovCiAJCWlmIChzdGF0dXMgJiBCQ09NX0ZFQ19SWF9CRF9FUlJPUlMpIHsKQEAgLTQ2NCw3ICs0NTksOCBAQAogCQkJCWJjb21fcHJlcGFyZV9uZXh0X2J1ZmZlcihwcml2LT5yeF9kbWF0c2spOwogCiAJCQliZC0+c3RhdHVzID0gRkVDX1JYX0JVRkZFUl9TSVpFOwotCQkJYmQtPnNrYl9wYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgcnNrYi0+ZGF0YSwKKwkJCWJkLT5za2JfcGEgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldi5wYXJlbnQsCisJCQkJCXJza2ItPmRhdGEsCiAJCQkJCUZFQ19SWF9CVUZGRVJfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAogCQkJYmNvbV9zdWJtaXRfbmV4dF9idWZmZXIocHJpdi0+cnhfZG1hdHNrLCByc2tiKTsKQEAgLTQ5OSw3ICs0OTUsNyBAQAogCQkJYmNvbV9wcmVwYXJlX25leHRfYnVmZmVyKHByaXYtPnJ4X2RtYXRzayk7CiAKIAkJYmQtPnN0YXR1cyA9IEZFQ19SWF9CVUZGRVJfU0laRTsKLQkJYmQtPnNrYl9wYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgc2tiLT5kYXRhLAorCQliZC0+c2tiX3BhID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYucGFyZW50LCBza2ItPmRhdGEsCiAJCQkJRkVDX1JYX0JVRkZFUl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCWJjb21fc3VibWl0X25leHRfYnVmZmVyKHByaXYtPnJ4X2RtYXRzaywgc2tiKTsKQEAgLTg0NywxMiArODQzLDIwIEBACiBzdGF0aWMgaW50IG1wYzUyeHhfZmVjX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZXR1cm4gcGh5X2V0aHRvb2xfZ3NldChwcml2LT5waHlkZXYsIGNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCBtcGM1Mnh4X2ZlY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghcHJpdi0+cGh5ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldHVybiBwaHlfZXRodG9vbF9zc2V0KHByaXYtPnBoeWRldiwgY21kKTsKIH0KIApAQCAtODgyLDkgKzg4NiwyOCBAQAogewogCXN0cnVjdCBtcGM1Mnh4X2ZlY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXJldHVybiBtcGM1Mnh4X2ZlY19waHlfbWlpX2lvY3RsKHByaXYsIGlmX21paShycSksIGNtZCk7CisJaWYgKCFwcml2LT5waHlkZXYpCisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIGlmX21paShycSksIGNtZCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXBjNTJ4eF9mZWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBtcGM1Mnh4X2ZlY19vcGVuLAorCS5uZG9fc3RvcCA9IG1wYzUyeHhfZmVjX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IG1wYzUyeHhfZmVjX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBtcGM1Mnh4X2ZlY19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBtcGM1Mnh4X2ZlY19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb192YWxpZGF0ZV9hZGRyID0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCA9IG1wYzUyeHhfZmVjX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dSA9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dCA9IG1wYzUyeHhfZmVjX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMgPSBtcGM1Mnh4X2ZlY19nZXRfc3RhdHMsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlciA9IG1wYzUyeHhfZmVjX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBPRiBEcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtOTI5LDIyICs5NTIsMTAgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIEluaXQgZXRoZXIgbmRldiB3aXRoIHdoYXQgd2UgaGF2ZSAqLwotCW5kZXYtPm9wZW4JCT0gbXBjNTJ4eF9mZWNfb3BlbjsKLQluZGV2LT5zdG9wCQk9IG1wYzUyeHhfZmVjX2Nsb3NlOwotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdAk9IG1wYzUyeHhfZmVjX2hhcmRfc3RhcnRfeG1pdDsKLQluZGV2LT5kb19pb2N0bAkJPSBtcGM1Mnh4X2ZlY19pb2N0bDsKKwluZGV2LT5uZXRkZXZfb3BzCT0gJm1wYzUyeHhfZmVjX25ldGRldl9vcHM7CiAJbmRldi0+ZXRodG9vbF9vcHMJPSAmbXBjNTJ4eF9mZWNfZXRodG9vbF9vcHM7Ci0JbmRldi0+Z2V0X3N0YXRzCQk9IG1wYzUyeHhfZmVjX2dldF9zdGF0czsKLQluZGV2LT5zZXRfbWFjX2FkZHJlc3MJPSBtcGM1Mnh4X2ZlY19zZXRfbWFjX2FkZHJlc3M7Ci0JbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbXBjNTJ4eF9mZWNfc2V0X211bHRpY2FzdF9saXN0OwotCW5kZXYtPnR4X3RpbWVvdXQJPSBtcGM1Mnh4X2ZlY190eF90aW1lb3V0OwogCW5kZXYtPndhdGNoZG9nX3RpbWVvCT0gRkVDX1dBVENIRE9HX1RJTUVPVVQ7CiAJbmRldi0+YmFzZV9hZGRyCQk9IG1lbS5zdGFydDsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCW5kZXYtPnBvbGxfY29udHJvbGxlciA9IG1wYzUyeHhfZmVjX3BvbGxfY29udHJvbGxlcjsKLSNlbmRpZgotCi0JcHJpdi0+dF9pcnEgPSBwcml2LT5yX2lycSA9IG5kZXYtPmlycSA9IE5PX0lSUTsgLyogSVJRIGFyZSBmcmVlIGZvciBub3cgKi8KIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKaW5kZXggYjMwNzlhNS4uYWExZWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYworKysgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIAlzbnByaW50ZihuYW1lLCBNSUlfQlVTX0lEX1NJWkUsICIlc0AlbGx4IiwgbnAtPm5hbWUsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpdGFkZHIpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX3BxX21kaW9fYnVzX25hbWUpOwogCiAvKiBTY2FuIHRoZSBidXMgaW4gcmV2ZXJzZSwgbG9va2luZyBmb3IgYW4gZW1wdHkgc3BvdCAqLwogc3RhdGljIGludCBmc2xfcHFfbWRpb19maW5kX2ZyZWUoc3RydWN0IG1paV9idXMgKm5ld19idXMpCkBAIC0zODcsNyArMzg4LDcgQEAKIAkgKiBUaGUgVEJJUEhZLW9ubHkgYnVzZXMgd2lsbCBmaW5kIFBIWXMgYXQgZXZlcnkgYWRkcmVzcywKIAkgKiBzbyB3ZSBtYXNrIHRoZW0gYWxsIGJ1dCB0aGUgVEJJCiAJICovCi0JaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLW1kaW8iKSkKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci10YmkiKSkKIAkJbmV3X2J1cy0+cGh5X21hc2sgPSB+KDEgPDwgdGJpYWRkcik7CiAKIAllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGRkNDk5ZDcuLjA2NDJkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogCiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBiZSBoYW5kbGVkIGluIG9uZSBjYWxsIG9mIGdmYXJfcG9sbCAqLwogI2RlZmluZSBHRkFSX0RFVl9XRUlHSFQgNjQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKaW5kZXggNTAwYTQwYi4uYjA2NjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKQEAgLTU1LDYgKzU1LDggQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpAQCAtNzEsOCArNzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3lhbS5oPgotI2luY2x1ZGUgInlhbTk2MDAuaCIKLSNpbmNsdWRlICJ5YW0xMjAwLmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC04Miw2ICs4Miw5IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjZGVmaW5lIEZJUk1XQVJFXzk2MDAJInlhbS85NjAwLmJpbiIKKyNkZWZpbmUgRklSTVdBUkVfMTIwMAkieWFtLzEyMDAuYmluIgorCiAjZGVmaW5lIFlBTV85NjAwCTEKICNkZWZpbmUgWUFNXzEyMDAJMgogCkBAIC0zNDIsOSArMzQ1LDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICphZGRfbWNzKHVuc2lnbmVkIGNoYXIgKmJpdHMsIGludCBiaXRyYXRlKQorLyoKKyAqIHByZWRlZiBzaG91bGQgYmUgMCBmb3IgbG9hZGluZyB1c2VyIGRlZmluZWQgbWNzCisgKiBwcmVkZWYgc2hvdWxkIGJlIFlBTV8xMjAwIGZvciBsb2FkaW5nIHByZWRlZiAxMjAwIG1jcworICogcHJlZGVmIHNob3VsZCBiZSBZQU1fOTYwMCBmb3IgbG9hZGluZyBwcmVkZWYgOTYwMCBtY3MKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmFkZF9tY3ModW5zaWduZWQgY2hhciAqYml0cywgaW50IGJpdHJhdGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcHJlZGVmKQogeworCWNvbnN0IGNoYXIgKmZ3X25hbWVbMl0gPSB7RklSTVdBUkVfOTYwMCwgRklSTVdBUkVfMTIwMH07CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCB5YW1fbWNzICpwOworCWludCBlcnI7CisKKwlzd2l0Y2ggKHByZWRlZikgeworCWNhc2UgMDoKKwkJZncgPSBOVUxMOworCQlicmVhazsKKwljYXNlIFlBTV8xMjAwOgorCWNhc2UgWUFNXzk2MDA6CisJCXByZWRlZi0tOworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgieWFtIiwgMCwgTlVMTCwgMCk7CisJCWlmIChJU19FUlIocGRldikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAieWFtOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZmlybXdhcmVcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWVbcHJlZGVmXSwgJnBkZXYtPmRldik7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCSAgICAgICBmd19uYW1lW3ByZWRlZl0pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKGZ3LT5zaXplICE9IFlBTV9GUEdBX1NJWkUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQm9ndXMgbGVuZ3RoICV6dSBpbiBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQkgICAgICAgZnctPnNpemUsIGZ3X25hbWVbcHJlZGVmXSk7CisJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWJpdHMgPSAodW5zaWduZWQgY2hhciAqKWZ3LT5kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgInlhbTogSW52YWxpZCBwcmVkZWYgbnVtYmVyICV1XG4iLCBwcmVkZWYpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAkvKiBJZiBpdCBhbHJlYWR5IGV4aXN0cywgcmVwbGFjZSB0aGUgYml0IGRhdGEgKi8KIAlwID0geWFtX2RhdGE7CkBAIC0zNTksNiArNDA0LDcgQEAKIAkvKiBBbGxvY2F0ZSBhIG5ldyBtY3MgKi8KIAlpZiAoKHAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgeWFtX21jcyksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIllBTTogbm8gbWVtb3J5IHRvIGFsbG9jYXRlIG1jc1xuIik7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbWVtY3B5KHAtPmJpdHMsIGJpdHMsIFlBTV9GUEdBX1NJWkUpOwpAQCAtMzY2LDYgKzQxMiw3IEBACiAJcC0+bmV4dCA9IHlhbV9kYXRhOwogCXlhbV9kYXRhID0gcDsKIAorCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCXJldHVybiBwLT5iaXRzOwogfQogCkBAIC0zODMsOSArNDMwLDExIEBACiAJLyogTG9hZCBwcmVkZWZpbmVkIG1jcyBkYXRhICovCiAJc3dpdGNoIChiaXRyYXRlKSB7CiAJY2FzZSAxMjAwOgotCQlyZXR1cm4gYWRkX21jcyhiaXRzXzEyMDAsIGJpdHJhdGUpOworCQkvKiBzZXR0aW5nIHByZWRlZiBhcyBZQU1fMTIwMCBmb3IgbG9hZGluZyBwcmVkZWYgMTIwMCBtY3MgKi8KKwkJcmV0dXJuIGFkZF9tY3MoTlVMTCwgYml0cmF0ZSwgWUFNXzEyMDApOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBhZGRfbWNzKGJpdHNfOTYwMCwgYml0cmF0ZSk7CisJCS8qIHNldHRpbmcgcHJlZGVmIGFzIFlBTV85NjAwIGZvciBsb2FkaW5nIHByZWRlZiA5NjAwIG1jcyAqLworCQlyZXR1cm4gYWRkX21jcyhOVUxMLCBiaXRyYXRlLCBZQU1fOTYwMCk7CiAJfQogfQogCkBAIC05MzYsNyArOTg1LDggQEAKIAkJCWtmcmVlKHltKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWFkZF9tY3MoeW0tPmJpdHMsIHltLT5iaXRyYXRlKTsKKwkJLyogc2V0dGluZyBwcmVkZWYgYXMgMCBmb3IgbG9hZGluZyB1c2VyZGVmaW5lZCBtY3MgZGF0YSAqLworCQlhZGRfbWNzKHltLT5iaXRzLCB5bS0+Yml0cmF0ZSwgMCk7CiAJCWtmcmVlKHltKTsKIAkJYnJlYWs7CiAKQEAgLTExNTksNiArMTIwOSw4IEBACiBNT0RVTEVfQVVUSE9SKCJGcmVkZXJpYyBSaWJsZSBGMU9BVCBmcmlibGVAdGVhc2VyLmZyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIllhbSBhbWF0ZXVyIHJhZGlvIG1vZGVtIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzEyMDApOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzk2MDApOwogCiBtb2R1bGVfaW5pdCh5YW1faW5pdF9kcml2ZXIpOwogbW9kdWxlX2V4aXQoeWFtX2NsZWFudXBfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbTEyMDAuaCBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbTEyMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjYThhMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0xMjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotLyoKLSAqCi0gKiBGaWxlIHlhbTFrMmI1Lm1jcyBjb252ZXJ0ZWQgdG8gaCBmb3JtYXQgYnkgbWNzMmgKLSAqCi0gKiAoQykgRjZGQkIgMTk5OAotICoKLSAqIFR1ZSBBdWcgMjUgMjA6MjQ6MDggMTk5OAotICoKLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBiaXRzXzEyMDBbXT0gewotMHhmZiwweGYyLDB4MDAsMHhhNSwweGFkLDB4ZmYsMHhmZSwweDlmLDB4ZmYsMHhlZiwweGYzLDB4Y2IsMHhmZiwweGRiLDB4ZmMsMHhmMiwKLTB4ZmYsMHhmNiwweGZmLDB4M2MsMHhiZiwweGZkLDB4YmYsMHhkZiwweDZlLDB4M2YsMHg2ZiwweGYxLDB4N2QsMHhiNCwweGZkLDB4YmYsCi0weGRmLDB4NmYsMHgzZiwweDZmLDB4ZjcsMHgwYiwweGZmLDB4ZGIsMHhmZCwweGYyLDB4ZmYsMHhmNiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YmYsCi0weGZmLDB4ZmYsMHhmNywweGZmLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGZjLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGYwLAotMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmUsMHg3ZiwweGJmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDlmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwKLTB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGY3LDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZjAsMHg1ZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhkZiwweGY3LDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlYiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGJmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGY3LDB4YmYsMHhlNywweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDc3LDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRiLAotMHhmZiwweGZmLDB4ZjUsMHhhNSwweGZkLDB4NGIsMHg2ZSwweGVmLDB4MzMsMHgzMiwweGRkLDB4ZDMsMHg0YSwweGQ2LDB4OTIsMHhmZSwKLTB4YjMsMHgzZiwweGJkLDB4ZjEsMHhmYSwweGRiLDB4ZmUsMHhmNywweGY2LDB4OTYsMHhiZCwweGJkLDB4ZmYsMHhiZCwweGZmLDB4ZWQsCi0weDdmLDB4NmIsMHg3ZiwweGZiLDB4ZGYsMHhmZSwweGZiLDB4ZmUsMHg5MCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZSwweGVmLAotMHhmZiwweGZmLDB4ZGIsMHg1ZiwweGY2LDB4ZmYsMHhmNiwweDhmLDB4ZmQsMHhhNSwweGRkLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg2ZiwKLTB4N2YsMHhkYiwweGYxLDB4ZmMsMHhiZiwweGZmLDB4NmYsMHhmZiwweGVmLDB4ZmMsMHg1YiwweDVkLDB4ZGEsMHhkZiwweGY0LDB4ZmYsCi0weGYyLDB4ZmYsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZDAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZiLDB4ZWYsMHhiNywweGZjLDB4MzMsMHhmZiwweGZiLDB4ZmYsMHgwNCwweDZhLDB4ZjMsMHgzYywweDM2LDB4ZmYsMHhmMCwKLTB4MGYsMHhmMSwweDBmLDB4ZmYsMHhmZiwweGZmLDB4ZjMsMHgxNSwweDcyLDB4MGYsMHhmMSwweDZmLDB4ZmYsMHhmZSwweDk0LDB4M2YsCi0weGZmLDB4ZmYsMHhmZiwweDdiLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGYwLAotMHhmNywweGVmLDB4YjcsMHhmYywweDMzLDB4ZmYsMHhmZiwweGZmLDB4MDQsMHg2YSwweGYzLDB4M2MsMHgzNiwweGZmLDB4ZjAsMHgwZiwKLTB4ZjEsMHgwZiwweGZmLDB4ZmYsMHhmZiwweGYzLDB4MTUsMHg3MywweDhmLDB4ZjIsMHg2ZiwweGZmLDB4ZmUsMHg5NCwweDNmLDB4ZmYsCi0weGZmLDB4ZmYsMHg3ZCwweDlmLDB4ZmYsMHhmMCwweDBmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDllLAotMHhmZiwweGZjLDB4ZWYsMHhkMywweGZiLDB4ZmYsMHg3ZiwweGY1LDB4NWYsMHhmZSwweDU5LDB4ZmYsMHhmZiwweGZmLDB4ZmMsMHhmMSwKLTB4ZmUsMHg3ZiwweGZmLDB4ZmYsMHhmYSwweDE3LDB4ZmYsMHhlNywweGVmLDB4ZWYsMHhmZiwweGZmLDB4M2YsMHhmMSwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwweGJmLDB4ZmYsMHhmYywweGVhLAotMHhmZiwweGYwLDB4ZmYsMHhmZiwweGJmLDB4ZjksMHgzZiwweGIxLDB4ZWYsMHhmZiwweGQ3LDB4ZmYsMHhmYiwweGZmLDB4ZjAsMHhmZiwKLTB4ZmYsMHhmMywweGZmLDB4ZGYsMHhmZiwweDdiLDB4ZmYsMHhmZCwweGZmLDB4ZjYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsCi0weGZmLDB4ZmYsMHhkYSwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYyLDB4YzAsMHgwMSwweDAwLDB4MDAsMHgwMiwweDAyLAotMHgwMiwweDAyLDB4MDAsMHg0MCwweDQwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOSwweDAwLDB4MDQsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsCi0weDAwLDB4M2MsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZCwweGZmLAotMHhmZiwweDdmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZGYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJmLDB4ZmUsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsCi0weGRiLDB4ZjAsMHg2ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhiZiwweGRmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhkZiwweGRmLDB4ZmYsMHhlZiwweGZmLDB4OWUsMHhlZiwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZjEsMHhlZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjcsMHhmYSwweGJmLDB4ZmYsMHhmZiwweGZlLDB4NDcsMHhlZiwweGZmLDB4YmQsMHhmNiwweGZmLDB4ZmYsMHhkZiwweGY1LDB4ZjAsCi0weGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMiwweDA4LAotMHgxNiwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMSwweDAyLDB4MDAsMHg4MCwweDAxLDB4MGMsMHgwMiwweDAwLDB4MDAsMHgwMSwKLTB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDA2LDB4MDAsMHgyMCwweDAwLDB4MTAsMHgwMCwweDE0LDB4MDAsMHgwNCwweGMxLDB4ZjAsCi0weDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZiwweDdmLAotMHhlYywweGZmLDB4ZmYsMHhmYSwweGZmLDB4YmYsMHhmZiwweDZmLDB4ZmYsMHhlMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YmQsMHhmZSwKLTB4NDYsMHhmZiwweGVmLDB4N2YsMHhjZCwweGRmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhiZCwweGZmLDB4N2YsMHg3ZiwweGYwLDB4NGYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDBmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4YTQsMHhiYywweGNkLDB4NmQsMHg2YiwweDZmLDB4NWIsMHhkYywweDMzLAotMHg1YSwweGY2LDB4ZjcsMHhmNiwweGIzLDB4M2YsMHhiZCwweGMxLDB4ZmEsMHg1YSwweGY2LDB4ZjYsMHhiNiwweGY3LDB4ZmYsMHhiZCwKLTB4YmIsMHgzYywweGNlLDB4Y2YsMHgzNCwweGVmLDB4MzMsMHhiYiwweGNjLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGQ2LDB4ZmYsMHhmZCwweGZkLDB4YmYsMHhmZiwweGFkLAotMHhiZiwweGY5LDB4N2YsMHg2ZiwweGZjLDB4ZGIsMHhmMSwweGZkLDB4YmYsMHhmZiwweDZmLDB4ZmYsMHhmZiwweGRhLDB4ZGIsMHhmYywKLTB4ZGIsMHhmZiwweDc2LDB4OGYsMHhmNiwweGZmLDB4Y2QsMHhhYiwweGZlLDB4ZmIsMHhmZiwweGQwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZmYsMHg5ZiwweGZmLDB4ZjQsMHgyMCwweGFmLDB4NmQsMHgwYiwweGMxLDB4N2IsMHhmZiwweGZmLDB4ZmYsMHhjYiwweGZmLAotMHgzZiwweGYwLDB4ZWYsMHg3ZiwweDBmLDB4ZjEsMHhjMywweDNjLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjgsMHgwYiwKLTB4MWQsMHg2YSwweDY0LDB4MDUsMHg2YiwweDk5LDB4MDEsMHhmZiwweGZkLDB4ZWYsMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGY0LDB4MDAsMHgyZiwweGNjLDB4MGIsMHhjMywweDdmLDB4ZmYsMHhmZiwweGZmLDB4MGEsMHhkZiwweGJmLAotMHhmZCwweDdmLDB4ZmYsMHhmZiwweGYxLDB4YzMsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NGEsMHgwZSwKLTB4OTYsMHg2NCwweDAyLDB4OTcsMHg5OSwweDEwLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweDg0LDB4ZjksMHhkNSwweDI3LDB4ZjEsMHg3ZiwweGZmLDB4ZjgsMHhlYiwweGRmLDB4ZjMsMHhjZiwweDNmLAotMHgxZiwweGZmLDB4ZjcsMHgxMSwweGZmLDB4Y2YsMHhmZiwweGZlLDB4NjcsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGM0LDB4ZmYsMHhmZiwKLTB4YjMsMHhhMSwweGZmLDB4ZjksMHhlMCwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsCi0weGZmLDB4ZmIsMHg3ZiwweGUwLDB4ZmYsMHhjNywweGZlLDB4N2YsMHgzZiwweGZmLDB4ZmQsMHg3NywweDhkLDB4N2YsMHgwZiwweGZmLAotMHhjMywweGZmLDB4ZjEsMHhiZiwweDhmLDB4Y2YsMHhmZiwweGZmLDB4ZGQsMHg3YiwweGZmLDB4ZjYsMHhmYSwweGY3LDB4ZmYsMHg0MCwKLTB4OWYsMHhmOSwweDdmLDB4ZDgsMHhmZiwweGZmLDB4ZmEsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMSwweGMwLDB4MDAsCi0weDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDEwLAotMHgwMCwweDAxLDB4MDAsMHgxMCwweDIwLDB4MjAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDEsMHgwNSwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHg0MCwweDQwLDB4MDAsMHgwMCwweDNjLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweDdmLDB4N2YsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhlZiwweGY3LAotMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhmYywweGZkLDB4ZmYsMHg3ZiwKLTB4N2UsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4YmIsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGViLDB4ZmQsMHg2ZiwweGZmLDB4ZjcsMHhmZSwweGY1LDB4N2YsMHhmZiwweGZmLDB4N2YsMHhiZiwweGIxLAotMHhmZiwweGZmLDB4OWYsMHhiZiwweGZiLDB4ZmYsMHhmZSwweGZmLDB4ZmUsMHhmZiwweGY3LDB4ZWIsMHhkZiwweGJmLDB4NWYsMHhkZCwKLTB4ZmYsMHhkYiwweGZkLDB4ZDAsMHhmMCwweDZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDMwLDB4MjAsMHgwMCwweDQyLDB4MDAsCi0weDAwLDB4MDAsMHgzMCwweDE4LDB4MDQsMHgwOCwweDA5LDB4MjEsMHg4MiwweDgwLDB4MDIsMHgwMCwweDA4LDB4MDAsMHgwMSwweDAwLAotMHgwMCwweDAwLDB4MGMsMHgyMCwweDEwLDB4MDAsMHgxMSwweDAwLDB4NDQsMHg4NCwweDAwLDB4MjAsMHgyMCwweDg0LDB4ODAsMHgwMCwKLTB4MDAsMHgwMCwweGMxLDB4ZjAsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmNywweGZmLDB4ZmIsMHhkZCwweGY5LDB4ZmYsCi0weGRhLDB4ZmYsMHhkYywweGRkLDB4ZmMsMHhmYiwweGZmLDB4YmYsMHhmYiwweDNlLDB4ZDcsMHg5NiwweGZlLDB4NjEsMHhmNywweGZmLAotMHg3ZiwweGZmLDB4M2YsMHhmZCwweGZmLDB4ZGYsMHhjZiwweGY3LDB4ZGYsMHhmNywweGJmLDB4ZmQsMHhmZiwweGZlLDB4ZWYsMHhlZiwKLTB4ZmUsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmMywweGJkLDB4ZmQsMHg0YiwweDc0LDB4Y2YsCi0weDczLDB4NWIsMHhjYiwweDNiLDB4ZGYsMHhmZSwweGY3LDB4ZmUsMHhkMywweDc1LDB4YWMsMHhhMSwweGZiLDB4ZGYsMHhmZSwweGY3LAotMHg3NiwweDk2LDB4YjUsMHgyNCwweGJkLDB4YTUsMHhhZCwweDQ5LDB4MmYsMHg2OSwweDJiLDB4NTIsMHg1YiwweGJkLDB4ZmYsMHhmZiwKLTB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZmLDB4ZjYsMHhmZSwweGZmLDB4Y2MsCi0weGE3LDB4ZmIsMHhhZCwweGZmLDB4N2YsMHg2ZiwweGZmLDB4NmQsMHg3ZiwweGRiLDB4ZjEsMHhmZCwweGJmLDB4ZmYsMHg2ZiwweGZmLAotMHg2ZiwweGZmLDB4ZGIsMHhmZiwweGRiLDB4ZmYsMHhmNiwweDk3LDB4ZjYsMHhmZiwweGI1LDB4YjUsMHhmZiwweGZmLDB4ZmYsMHhkMCwKLTB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4YTUsMHhiYywweDQzLDB4ZmMsMHg3YywweDAzLDB4ZTcsCi0weGZmLDB4ZmYsMHgyMCwweGZmLDB4ZmYsMHhmZiwweGNjLDB4ZmQsMHg3ZCwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkNSwweDU5LAotMHhiYSwweDU2LDB4NjYsMHg2YSwweGFkLDB4OWEsMHhhOSwweDlhLDB4OTcsMHhhNSwweGFhLDB4YmIsMHhmZiwweGZmLDB4ZjAsMHgwZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZSwweGZiLDB4ZmYsMHhmZCwweGY3LDB4ZmQsMHg0MywweGZmLDB4ZmQsMHg2YiwweGU3LDB4ZmYsCi0weGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4M2YsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZDUsMHg1OSwweGI1LAotMHhhNiwweDY2LDB4NmEsMHhhZCwweDlhLDB4YTksMHg5OSwweDZiLDB4NWEsMHhhYSwweGZmLDB4ZmYsMHhiNywweGYwLDB4M2YsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHg5YywweGY3LDB4ZmQsMHhkMiwweDQxLDB4ZmYsMHhmZiwweGYyLDB4N2YsCi0weDhmLDB4ZmYsMHhmZiwweDNkLDB4ZjMsMHhmZiwweDE3LDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhkZiwweGZjLAotMHg4ZiwweDM4LDB4ZmYsMHhlZiwweDIzLDB4ZmYsMHhmYiwweGY3LDB4YzgsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDlmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGY1LDB4N2YsMHhmZiwweGZkLDB4ZmYsMHhlNCwweGZmLDB4ZWIsMHhmZiwweGNmLDB4YmYsMHhmYSwweGZmLDB4YWIsCi0weGVmLDB4ZmYsMHhmYiwweGZmLDB4ZjMsMHhmZCwweDYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYSwweGZmLDB4ZmIsMHhmZCwweDBkLAotMHhmZiwweGZlLDB4ZmYsMHg0MywweDdmLDB4ZmUsMHhiZiwweGQwLDB4ZmQsMHhmZiwweGZhLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmMywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAyLDB4MDEsMHgwMCwweDYwLDB4YzAsMHg0MCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgzNCwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg4OCwweDAwLAotMHgwMCwweDAzLDB4MDAsMHgwMCwweDQwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgzYywweGYwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmQsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4N2YsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGY3LDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZlLDB4NWYsMHhmZiwweGZmLDB4Y2IsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwKLTB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhlZiwweGUzLDB4ZGUsMHhlZSwweGQ5LDB4YzUsMHg5MywweGZmLDB4ZmYsMHhmZSwweGZlLDB4ZmYsCi0weGZiLDB4ZWUsMHhmZSwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhiZiwweGY3LDB4ZmYsMHhmZiwweDdmLAotMHhhZiwweGJkLDB4ZGYsMHhkZiwweGZiLDB4ZjMsMHhmMywweGYwLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzNCwKLTB4MDAsMHgwNiwweDYxLDB4MDAsMHgxOCwweDAxLDB4YTAsMHgwNSwweDE3LDB4MDAsMHgyMCwweDA1LDB4MjgsMHgyMCwweDAwLDB4MDAsCi0weDA1LDB4MDAsMHg0MSwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDksMHgwMCwweDAxLDB4MjAsMHg4NiwweDgyLDB4MDgsMHg0MCwweDAzLAotMHg4MCwweDMwLDB4NzAsMHgwOCwweDE0LDB4MDIsMHhjMSwweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGJkLDB4ZWYsMHhmYiwweGZmLDB4ZmYsMHhmYiwweDljLDB4N2YsMHhlZiwweGRmLDB4ZmYsMHhiZiwweGViLDB4ZGUsCi0weGZmLDB4YzEsMHg3ZiwweGZmLDB4ZmIsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhiZiwweGVmLAotMHgzZiwweGY3LDB4OGYsMHhlZiwweDdmLDB4ZmYsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZCwKLTB4ZGYsMHhlZiwweDdkLDB4NmQsMHgyYiwweDVhLDB4NWQsMHhkMiwweGRmLDB4ZjYsMHg5MiwweGI2LDB4YjIsMHhiMywweGFjLDB4YTEsCi0weGZiLDB4ZGYsMHhmZSwweGYxLDB4ZWUsMHhmNSwweGY2LDB4YmMsMHg2YiwweGJkLDB4N2QsMHhhZiwweDFhLDB4ZWYsMHg1ZiwweDZiLAotMHhjNiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmZiwKLTB4ZjYsMHhmZiwweGY2LDB4YjcsMHhmZCwweGFkLDB4ZmQsMHhiZiwweGYzLDB4NmYsMHhmZiwweDZmLDB4ZmYsMHhkYiwweGQxLDB4ZmQsCi0weGJmLDB4ZmYsMHg2ZiwweGY1LDB4NmIsMHhiYywweDViLDB4M2MsMHhkYSwweGVmLDB4MTYsMHhhZiwweDE2LDB4ZmYsMHhjZCwweGFiLAotMHhmZiwweDZmLDB4ZmYsMHhkMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmYywweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHg2YywweDAzLDB4MTAsMHhjMSwweGYzLDB4ZmYsMHhmMywweDNhLDB4ZjMsMHhjYSwweGZmLDB4YWYsMHhmMSwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhkOSwweDk2LDB4YTYsMHg2NSwweGE2LDB4NjYsMHg2YSwweDk1LDB4NjksMHg2OSwweDZhLDB4NWEsMHg1YSwweGZmLAotMHhmZiwweDVmLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZWEsMHgwZiwweDUwLDB4YzMsMHhmMywweDdmLDB4ZmYsMHhmMywweGYzLDB4YzMsMHhmZiwweGFmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZDksMHg5NiwweGE2LDB4NjUsMHhhNiwweDY2LDB4NmEsMHg5NSwweDY5LDB4NjksMHg2YSwweDVhLDB4NWEsMHhmZiwweGZmLAotMHhmZiwweGYwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZDcsMHhmZiwweGZmLDB4NWYsMHhjMSwKLTB4M2YsMHhmNywweDVlLDB4ZjUsMHhjZSwweDllLDB4NWYsMHgzZiwweDE3LDB4ZmYsMHhmMywweGUxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGQ4LDB4ZmYsMHhmYSwweGZlLDB4NjcsMHhmZiwweGZlLDB4YmYsMHg1YSwweGZmLDB4ZmYsMHhhZiwweGY1LDB4ZmYsMHhmZiwweGZmLAotMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZjcsMHhmZiwweGZkLDB4NGUsMHgzZCwKLTB4M2YsMHhlNywweDBiLDB4YmYsMHg4ZiwweGY5LDB4ZmYsMHhlYiwweGUzLDB4ZmYsMHhlMSwweGZmLDB4ZmYsMHhmYywweGZmLDB4YzcsCi0weDlmLDB4ZmYsMHgzZSwweDM5LDB4ZTUsMHhmZiwweGNmLDB4OWIsMHhmOSwweGZmLDB4ZmYsMHhjNSwweGZmLDB4ZmYsMHhmYSwweGYwLAotMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjMsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MjAsCi0weDAwLDB4MDEsMHgxMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHhmMCwweDRmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhiZiwKLTB4M2YsMHhmZiwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZjcsCi0weGZmLDB4ZWQsMHhmZiwweGZiLDB4ZmUsMHhmZiwweDdmLDB4ZmYsMHg3ZiwweGRmLDB4ZmYsMHhmZiwweGRkLDB4ZjAsMHgzZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmMCwweGZmLDB4ZmYsMHhmMywweGZmLDB4ZjcsMHhmZiwweGZlLDB4NWYsMHhmZiwweGY3LDB4ZmYsMHhmZiwKLTB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGZlLDB4N2IsMHhmMSwweGZmLDB4ZmQsMHhmZCwweGZmLDB4ZGYsMHhkZiwweGZmLDB4N2QsCi0weDczLDB4ZjksMHhmZiwweGMzLDB4N2UsMHhmZSwweGZmLDB4ZWYsMHhkNywweGZmLDB4Y2YsMHhkMCwweGYwLDB4NmYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZjgsMHgzMCwweDAwLDB4MDAsMHg0MCwweDA0LDB4MDAsMHgwMSwweDQxLDB4MjAsMHgwMCwweDA0LDB4MDAsMHgwMiwKLTB4ZDUsMHgwOSwweDAwLDB4MDIsMHg4MCwweDAyLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwYSwweDA0LDB4MDAsMHgwNywweDAwLDB4MDEsCi0weDUwLDB4MDEsMHg4MCwweDAyLDB4NjEsMHg0MCwweDQxLDB4MGMsMHgxNCwweDA4LDB4YzEsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhkZiwweGNiLDB4NWYsMHhmZSwweGVmLDB4ZmYsMHhmZSwKLTB4ZmYsMHgzZiwweGZmLDB4N2YsMHhmZCwweGMxLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhkZiwweGZkLDB4ZmMsMHhmZCwweGY3LDB4ZWUsCi0weGZmLDB4ZmYsMHg0ZSwweGZmLDB4ZGYsMHhjZiwweGRiLDB4ZWIsMHhmZiwweGZmLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweDdmLAotMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjcsMHhmYiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhkZCwweGZmLAotMHhmZiwweGZmLDB4YTUsMHhmZiwweDZmLDB4NmIsMHhlOSwweDZmLDB4ZGEsMHhjYSwweGZiLDB4ZGQsMHhlZSwweGY3LDB4ZjYsMHhiMiwKLTB4YjMsMHhhNCwweGExLDB4NWIsMHg1YiwweGY2LDB4ZDcsMHhmNCwweGY3LDB4N2IsMHhiZCwweGJkLDB4YWQsMHhjZiwweGVmLDB4N2YsCi0weDZiLDB4N2YsMHgzYiwweGRmLDB4ZGIsMHhmZiwweGZmLDB4MzAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmNiwweGZlLDB4OTYsMHhmZiwweGZkLDB4YjUsMHhmZCwweGJmLDB4YWQsMHg3ZiwweGZmLDB4NmYsMHhmZiwKLTB4ZGUsMHhkMSwweGFkLDB4YWQsMHhlOSwweGZmLDB4ZjEsMHhlYywweGVmLDB4ZGUsMHgzZiwweGNiLDB4ZmYsMHhmNiwweGZmLDB4MzIsCi0weGZmLDB4YzUsMHhiZCwweGZmLDB4ZmYsMHhmZiwweGQwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZlLDB4ZmIsMHhmZiwweGY0LAotMHgyOCwweGJmLDB4ZmYsMHhmZCwweGZiLDB4ZDMsMHhmZiwweGZmLDB4NDIsMHhmZiwweGZmLDB4ZmYsMHhlYSwweGIzLDB4ZmMsMHhjMywKLTB4YzEsMHhmZiwweDMzLDB4ZmYsMHhjMCwweDE1LDB4NmIsMHg3MCwweGZmLDB4ZjAsMHhmMiwweDRmLDB4ZmYsMHhmYywweDNlLDB4OTcsCi0weDNjLDB4ZmYsMHhmZiwweGZkLDB4ZWYsMHhmMCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZSwweDc4LAotMHhiZiwweGZmLDB4ZmQsMHhmMywweGVmLDB4NTUsMHhmZiwweDdlLDB4ZmYsMHhmZiwweGZmLDB4ZWEsMHhiMywweGZjLDB4YzMsMHhjMSwKLTB4ZmYsMHgzMywweGZmLDB4YzAsMHgxNSwweDZmLDB4ZmYsMHgwZiwweGYwLDB4ZjAsMHgwZiwweGZmLDB4ZmMsMHgzZCwweDZiLDB4YzMsCi0weGZmLDB4ZmYsMHhmZSwweGY3LDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYywweGZmLAotMHhmZiwweDIzLDB4ZjgsMHg3ZiwweGZmLDB4NGUsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGY5LDB4MTcsMHhmZiwweGY2LDB4ZjEsMHhmZiwKLTB4Y2YsMHhlZiwweGZmLDB4ZmYsMHgxMywweGRmLDB4ZTYsMHgyZiwweGM3LDB4ZmYsMHhmZiwweGU3LDB4YzEsMHhmZCwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGYwLDB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhhZSwweGZmLAotMHhmZiwweDdmLDB4M2IsMHgzZiwweGZjLDB4N2YsMHhmYywweGVmLDB4ZmYsMHhmYywweGUyLDB4N2IsMHhmZiwweGYxLDB4ZmQsMHhlZCwKLTB4ZWYsMHhmZiwweGZmLDB4MzUsMHg3MywweGZmLDB4ZmYsMHhmZSwweGZhLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmEsMHhmMCwweDhmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMSwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDQsMHgwMSwweDQwLDB4NDAsMHgwMCwKLTB4MDAsMHgzMCwweDI4LDB4MDQsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDM4LDB4ZjAsMHgwZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweDdmLAotMHhmZiwweGZmLDB4OWYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGRmLDB4ZGYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZWQsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJmLDB4YmYsMHhmZiwweGZmLDB4YzMsCi0weGYwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4YmYsMHhmZCwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZCwweDdiLDB4ZmYsMHg3ZiwweGZmLDB4YmQsMHhmZiwweGYxLDB4ZWYsMHhmZiwweGZmLDB4ZmQsMHhkZiwKLTB4ZmQsMHhmYiwweGZmLDB4ZmYsMHhiZiwweGJlLDB4ZmYsMHhjZCwweDdmLDB4ZmMsMHhmNywweGY3LDB4NmYsMHhiZiwweGQ4LDB4ZjAsCi0weGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4YTAsMHgwMCwweDAwLAotMHhjMCwweDAwLDB4MDAsMHgyMCwweDM0LDB4MDAsMHgwMCwweDAwLDB4MGMsMHg4MSwweDAwLDB4MjAsMHhhNCwweDIwLDB4MDAsMHgxMCwKLTB4MDgsMHgwNCwweDQ4LDB4MDgsMHgwMCwweDQwLDB4OTMsMHgwMCwweDEwLDB4MDAsMHgzOCwweDE4LDB4MjAsMHhjMSwweGYwLDB4M2YsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhiOSwweGRmLDB4ZmUsMHhiMywweGZmLDB4ZmYsMHhlNywweGZkLAotMHhmZiwweGZmLDB4M2IsMHhmZiwweDdmLDB4ZmYsMHhiZiwweGZmLDB4YzEsMHhmZiwweGZjLDB4ZmYsMHhmZiwweDNmLDB4NzcsMHhmZSwKLTB4ZmUsMHhjZiwweGZmLDB4YmYsMHhmZCwweGJmLDB4ZmYsMHhmZSwweGVkLDB4ZjIsMHhmZCwweGY3LDB4ZmYsMHhmMCwweDJmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhiZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmMywweGFkLDB4Y2YsMHhlZiwweDcwLDB4YzksMHg3MywweDNiLDB4ZGYsMHg1YiwweDRhLAotMHhmNiwweGI3LDB4ZmUsMHhkNywweGY1LDB4YmMsMHhjMSwweDMzLDB4Y2EsMHhkNiwweGI3LDB4NmUsMHhmNywweGZiLDB4YmQsMHhjNSwKLTB4MjQsMHhjZiwweDZmLDB4MmYsMHg0ZCwweDJiLDB4YmEsMHg1YSwweGZmLDB4ZmYsMHhmZiwweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY2LDB4ZjYsMHhkNywweGZmLDB4ZmYsMHhhZCwweGJkLDB4ZmYsMHhmZiwweGZmLAotMHhlZiwweGY3LDB4N2YsMHhmYywweDViLDB4YjEsMHhmZCwweGJkLDB4NzUsMHg2ZiwweGVmLDB4NmEsMHhmZCwweDViLDB4ZmIsMHhkYiwKLTB4M2EsMHhiZiwweDhlLDB4OWYsMHhmZiwweGJmLDB4ZmQsMHhmZiwweDZmLDB4ZmYsMHhkMCwweDZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4YmIsMHhmZiwweGYwLDB4M2YsMHhmZiwweGZmLDB4ZmQsMHhmYiwweDdmLDB4ZGUsMHhmZiwweGZmLDB4NWEsMHhkNiwweGJmLAotMHhkOCwweDJhLDB4YmYsMHhiZiwweGYxLDB4ZTUsMHhmZiwweGNjLDB4YzAsMHhhOSwweDcwLDB4ZmYsMHhmMywweDNjLDB4M2MsMHhmZCwKLTB4NTcsMHhmZCwweDk4LDB4MDMsMHgwMCwweGMzLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweDNkLDB4YmYsMHhmZiwweGZkLDB4ZmIsMHhmZiwweGRiLDB4ZmYsMHhmZiwweDBmLDB4ZmMsMHgzZiwweGQ4LAotMHgyYSwweGJmLDB4YmYsMHhmMSwweGVmLDB4ZmYsMHhjYywweGMwLDB4OTYsMHhiZSwweGZmLDB4ZjMsMHgzZiwweGZmLDB4ZmQsMHg1NywKLTB4ZmQsMHg5OSwweDBmLDB4ZmYsMHhjMywweGZmLDB4ZmYsMHhmZiwweGYwLDB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsCi0weGZmLDB4ZjEsMHhlNywweGZmLDB4ZmYsMHhmMywweDhlLDB4N2IsMHhmZiwweGE4LDB4ZmYsMHhkZiwweDdmLDB4OGUsMHg3OCwweDczLAotMHhmZiwweGYxLDB4NTEsMHg2MiwweGZmLDB4ZmMsMHg0YiwweGZmLDB4ZjMsMHhmZiwweDdlLDB4Y2YsMHhmOSwweGZmLDB4ZmQsMHhmZiwKLTB4ZmYsMHg3ZiwweGZmLDB4ZTAsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLDB4ZmYsCi0weGZiLDB4ZmQsMHhhZSwweGZmLDB4ZmMsMHhmZSwweDZmLDB4M2YsMHhmOCwweGZkLDB4NzcsMHhhZiwweGZlLDB4MzcsMHhmZSwweDdiLAotMHhmZiwweGIxLDB4OGMsMHhmZiwweGVmLDB4ZmQsMHhmOCwweGU3LDB4YmYsMHhmZiwweGYxLDB4ZmUsMHgzZSwweGY3LDB4ZmUsMHg5NSwKLTB4M2UsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZjAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjEsMHhjMCwweDAwLDB4MDAsCi0weDAxLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDIsMHgwMCwweDAwLDB4MTAsMHgwMCwweDEwLDB4MDAsMHgxMCwweDA4LAotMHg0MSwweDgwLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgxMCwweDg0LDB4MDAsMHgwYywweDA0LDB4MDIsMHg2MSwweDAwLDB4MDAsMHg4MSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZCwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLAotMHg3ZiwweGJmLDB4ZjcsMHg3ZiwweGVmLDB4ZmYsMHhlZiwweGZmLDB4ZjcsMHhmZCwweGZmLDB4ZmYsMHhmZCwweDdmLDB4ZmYsMHhiZSwKLTB4ZGYsMHhmZiwweGZmLDB4ZDksMHhmMCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGJiLDB4ZmYsMHg3ZiwweGZiLDB4ZmYsCi0weGZiLDB4ZmYsMHhiZiwweGZmLDB4ZjMsMHg3ZiwweGZiLDB4ZmQsMHhlYiwweDdmLDB4ZGYsMHhmYSwweGZmLDB4ZGUsMHhmMCwweGVkLAotMHhmZiwweGIxLDB4ZjcsMHhmOSwweDFmLDB4YjUsMHg1YiwweGZlLDB4N2UsMHhmNywweGJlLDB4ZmQsMHg3ZiwweDVmLDB4YjUsMHhmNywKLTB4ZmYsMHhmZiwweGQwLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDAxLDB4MDAsMHgwNywweDQyLDB4MDEsCi0weDAwLDB4NmEsMHgxOCwweDUwLDB4ODAsMHgwMCwweDAwLDB4MDIsMHg0MCwweDAxLDB4MDEsMHgyMCwweDAxLDB4MDEsMHgyNCwweDE0LAotMHgyMSwweDEwLDB4MDIsMHgwOCwweDA3LDB4MDgsMHgwMCwweDQwLDB4MTAsMHg4MCwweDU4LDB4MDAsMHg4NCwweDgwLDB4MTgsMHgxMCwKLTB4NDAsMHhjMSwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhkYiwweGI3LDB4ZjMsCi0weGRmLDB4N2MsMHhmOCwweDc0LDB4ZmYsMHhmZiwweDZmLDB4N2QsMHgzZiwweDdlLDB4ZWMsMHg3ZiwweGMxLDB4ZjUsMHhmZiwweGNmLAotMHg2ZiwweDlmLDB4ZjksMHhkZiwweGJlLDB4ZTUsMHhlNywweGZmLDB4ZDcsMHhmMywweGRkLDB4ZmIsMHhmZiwweGZjLDB4ZmYsMHhiZiwKLTB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZDcsMHhmZiwweGZmLDB4ZmYsMHhiNCwweGNmLDB4ZWYsMHg3NywweDZmLDB4NzMsCi0weDNhLDB4NGEsMHgzYSwweGNiLDB4ZDQsMHhmNywweDJlLDB4ZDYsMHhiZCwweGJkLDB4YTEsMHgzYiwweGRmLDB4ZDYsMHhmNywweGVlLAotMHhkMywweDM1LDB4YmQsMHhmYiwweGJkLDB4Y2UsMHhlYiwweDJiLDB4NGQsMHgyZiwweGJiLDB4ZGEsMHhmZiwweGZmLDB4ZmUsMHhiMCwKLTB4NWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHg1ZiwweDM2LDB4YWYsMHgzZiwweGVkLDB4YjcsCi0weGY1LDB4ZmQsMHhmMywweDJiLDB4ZWYsMHg3NywweGZmLDB4ZmIsMHhkYSwweGIxLDB4YmQsMHhhMywweDc3LDB4NjksMHg3ZiwweDRmLAotMHhmZiwweGRiLDB4ZmEsMHg1YiwweGZmLDB4ZjIsMHhmZSwweGZmLDB4OTYsMHhmZiwweGZmLDB4ZmUsMHhkZiwweGZmLDB4ZDAsMHhhZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZCwweDhmLDB4ZmQsMHg0MCwweDZmLDB4OWUsMHg4MywweDVhLDB4MGYsCi0weGZhLDB4YzMsMHhmZiwweGZmLDB4ZmMsMHhlOSwweDdmLDB4ZjMsMHgwMSwweGQwLDB4MDAsMHhmZSwweGJmLDB4Y2QsMHgzZiwweGYwLAotMHhlZiwweGZjLDB4YzUsMHgwYywweDNmLDB4ZmQsMHg2OCwweDBiLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhkZiwweGYwLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhiYiwweGZmLDB4ZmQsMHg4NSwweGZmLDB4ZDQsMHg2ZiwweDlmLDB4YzMsMHg1YSwweDBmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZjLDB4ZTksMHg3ZiwweGYzLDB4MDEsMHhmMCwweGZiLDB4YzIsMHhiZiwweGZjLDB4MDAsMHgzNywweGVmLAotMHhmYywweGNkLDB4YmMsMHgzZiwweGZmLDB4MGMsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDVmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZDksMHhmNywweGQxLDB4YjcsMHg3ZSwweDdmLDB4ZjEsMHhlNCwweGZkLDB4ZmYsCi0weGZiLDB4ZmIsMHhmZiwweDVmLDB4ZmYsMHg3ZiwweGIxLDB4YmMsMHgwZiwweDY3LDB4ZWIsMHhiOCwweDNmLDB4ZmYsMHhlMiwweGZmLAotMHhlOSwweGZmLDB4ZmQsMHhlMywweGZmLDB4M2YsMHg5ZiwweGMyLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg5ZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmNSwweDdmLDB4ZmYsMHhmMCwweDNmLDB4YmMsMHhmZiwweGQ1LDB4ZjUsMHhjZSwweDNmLDB4ZmUsMHhmZiwweGZlLDB4NmQsCi0weGZmLDB4ZjEsMHhiZiwweDdiLDB4ZmYsMHhmMSwweGZkLDB4ZmYsMHg0ZiwweGZmLDB4ODcsMHhmZiwweGFlLDB4ZmYsMHhiMSwweGY4LAotMHhmZSwweGZmLDB4ZmYsMHg3OCwweDAxLDB4YjksMHhmZiwweGZmLDB4ZmYsMHhmYSwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZjMsMHhjMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDIsMHgxMywweDAyLDB4MDAsMHg4MCwweDQwLDB4MDAsMHg5MCwweDEwLDB4MDAsCi0weDEwLDB4MDAsMHgwMiwweDAwLDB4MDEsMHgyMCwweDgwLDB4MTIsMHgxMCwweDAwLDB4NDAsMHgwOCwweDAwLDB4MDQsMHgwMCwweDAwLAotMHgwMiwweDAwLDB4MDEsMHg0MCwweDAwLDB4ODAsMHgwMCwweDAwLDB4M2MsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwKLTB4MWYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweDdmLDB4ZjcsMHhkZiwweGY3LDB4ZmYsCi0weGY3LDB4ZmIsMHhlYiwweGQxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGY3LDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZSwweGZmLAotMHhmZiwweDdlLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhmZiwKLTB4ZmYsMHhiNywweGViLDB4ZjcsMHhkZiwweGZmLDB4ZmUsMHhmNSwweDZiLDB4ZTcsMHhlZCwweGY3LDB4M2UsMHhlYywweGZmLDB4NTQsCi0weGVmLDB4NmYsMHhmMSwweGY1LDB4YWYsMHg2ZiwweGY2LDB4ZmQsMHhmZiwweGRkLDB4N2IsMHhmZiwweGVmLDB4YmYsMHg3ZiwweGZmLAotMHhmZiwweGY3LDB4ZmYsMHhmMywweDVmLDB4ZjcsMHhkMCwweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHgwMCwKLTB4ODAsMHg0MCwweDA0LDB4MDAsMHg4MSwweDJjLDB4MDQsMHgyNCwweDAwLDB4MDIsMHgwMSwweGM4LDB4MDIsMHgwMCwweDAyLDB4MjQsCi0weDAwLDB4MDEsMHhiNCwweDQyLDB4ZGMsMHg0NCwweDAyLDB4MTUsMHg5MCwweDAyLDB4MDMsMHg0OCwweDM5LDB4MTAsMHgwMiwweDI0LAotMHhhMCwweGJhLDB4MDAsMHgwMCwweDQwLDB4YzEsMHhmMCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmYywweGY3LDB4ZjAsMHhlZSwweGI2LDB4NWQsMHhmZCwweGY1LDB4ZmYsMHhkYiwweGY3LDB4N2YsMHg3ZiwweGJlLDB4ZmYsCi0weGMxLDB4ZmUsMHhiZiwweGZhLDB4ZmEsMHg1ZiwweGZmLDB4YWQsMHhmZiwweGVmLDB4ZmYsMHg3ZiwweGRmLDB4N2YsMHhmZSwweGJmLAotMHhiNywweDk0LDB4YmYsMHhmZiwweGZmLDB4ZjAsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGQ3LDB4ZmYsMHhmZiwweGZiLDB4YjUsMHhmZiwKLTB4ZWYsMHg3YywweGViLDB4MmIsMHg1MiwweDViLDB4M2IsMHhkYSwweGQ0LDB4ZjMsMHgzNiwweDk2LDB4YjUsMHhiZCwweGYxLDB4ZmIsCi0weGRhLDB4ZWUsMHhmNiwweGZlLDB4ZDMsMHgzNSwweGJkLDB4ZGYsMHhhZCwweGNmLDB4ZWYsMHg3ZSwweGNkLDB4NmIsMHhiYiwweGRmLAotMHhmZiwweGZmLDB4ZmQsMHhiMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGQzLDB4NWYsMHhmNiwKLTB4ZmYsMHhmNiwweGZmLDB4ZmQsMHhhZCwweGZkLDB4ZmYsMHg3ZiwweGVmLDB4ZmYsMHg2ZiwweDdmLDB4ZGIsMHhmMSwweGE1LDB4YTMsCi0weDdmLDB4NmYsMHg2YiwweDRmLDB4ZmYsMHhkYiwweGZiLDB4Y2IsMHhmZiwweGY2LDB4ZmYsMHhmNCwweGQ3LDB4ZmQsMHhiZiwweGZlLAotMHhkZiwweGZmLDB4ZDAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhkZiwweGZmLDB4ZmYsMHhmZiwKLTB4M2YsMHg3ZiwweGZjLDB4ZTUsMHhmZiwweDIwLDB4ZmUsMHhmZiwweGZmLDB4ZGYsMHg3ZiwweGZmLDB4ZjEsMHg3ZiwweGZmLDB4ZmUsCi0weGZmLDB4ZjAsMHg3YywweDNkLDB4NGYsMHhmMywweGMzLDB4M2YsMHhmZiwweGZmLDB4NmYsMHhjMywweGZmLDB4MGYsMHhmZiwweGZmLAotMHhhZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmYiwweGI3LDB4ZTAsMHgwZiwweGZmLDB4ZmYsMHgyYiwKLTB4ZmYsMHg3ZCwweGJmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmOCwweDlmLDB4N2YsMHhmZiwweGYxLDB4NTUsMHhmZiwweGZmLDB4ZmYsCi0weGZkLDB4N2MsMHgzYywweGZmLDB4ZjMsMHhjMywweDNmLDB4ZmYsMHhmZiwweGVmLDB4YzMsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLAotMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweDlmLDB4YmYsMHg3ZiwKLTB4ZjksMHgxOSwweDQ3LDB4OGUsMHhlNywweDlmLDB4M2YsMHgxNywweGZmLDB4ZmMsMHg4MSwweGMxLDB4N2UsMHhmMywweGQ5LDB4ZjksCi0weDczLDB4ZGYsMHhmNCwweDdmLDB4ZmEsMHhmZiwweGZmLDB4ZmYsMHhmYiwweDdmLDB4NzcsMHhjNywweGZmLDB4ZmYsMHhmZiwweGYwLAotMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmNywweGZmLDB4ZmIsMHhmZiwweGY3LDB4M2YsMHhmYywweGJmLDB4M2UsMHgzZiwKLTB4ZWMsMHhmZiwweDgxLDB4YWYsMHhmZSwweDRmLDB4ZjMsMHhiYiwweGZmLDB4ZjAsMHg3ZSwweGZmLDB4NmYsMHhmZiwweDg3LDB4ZmYsCi0weGJiLDB4ZmYsMHhkNSwweGZjLDB4ZmYsMHg3ZiwweGZjLDB4NmYsMHhmZiwweGVmLDB4ZTcsMHhmZiwweGZmLDB4ZmEsMHhmMCwweDNmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYzLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwKLTB4MDAsMHgzMCwweDEwLDB4NjAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAxLDB4MjAsMHg4MCwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4ODAsMHg0MCwweDAwLDB4MDgsMHgyMCwweDNjLDB4ZjAsMHg2ZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmNSwweGJmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZlLDB4M2YsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmMSwweGRmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGRmLDB4ZmYsCi0weGZkLDB4YmQsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg1YiwweGYwLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZjAsMHhiZiwweGJmLDB4YmYsMHhmZiwweGY3LDB4ZmIsMHhmZiwweGZlLDB4ZWUsMHhmYSwweGZmLDB4ZmYsMHhmZiwKLTB4M2QsMHgzYiwweGZmLDB4ZmYsMHhmZSwweGZiLDB4ZjEsMHhmZiwweGJmLDB4N2IsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGJmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGY3LDB4ZWYsMHhmZiwweGZiLDB4ZDAsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGY4LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGIsMHgxMCwweDA1LDB4MDEsMHgwMCwweDA4LDB4MDAsMHgwMiwKLTB4MDEsMHgwMSwweDAwLDB4MDAsMHgxMCwweDAxLDB4YzgsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDIsMHgwMiwweDAwLDB4MDAsCi0weDAwLDB4ODAsMHgwMiwweDAwLDB4MDAsMHg0MCwweDI0LDB4ODAsMHgwMCwweGMxLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmQsMHhmNywweGZhLDB4ZWYsMHhlZSwweGY5LDB4ZmQsMHhmZiwweGY3LDB4ZmUsMHhiZiwKLTB4MWYsMHhmZCwweDllLDB4ZmQsMHhkMSwweGVmLDB4ZmYsMHhmNywweDdmLDB4OWYsMHhmZiwweGVmLDB4ZmYsMHhmNiwweGZmLDB4ZmUsCi0weGZlLDB4N2IsMHhmZiwweGJkLDB4ZmYsMHg3ZSwweGZmLDB4ZmYsMHhmZiwweGYwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLAotMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmQsMHhmZiwweGZmLDB4ZGYsMHhmZiwKLTB4ZmYsMHg1ZiwweGYxLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhlZiwweGZmLAotMHhmNywweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgzZiwweGZiLDB4ZmYsMHhmZiwweGVmLDB4ZmIsMHhmZCwKLTB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY3LDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGZmLDB4ZTcsMHhmZiwKLTB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGNmLDB4ZmYsMHhmYiwweGZmLDB4ZmIsMHhmMSwKLTB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2IsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZjEsMHhmZiwKLTB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4NTcsMHhmZiwweGZlLDB4YmYsMHhmYiwweGYxLDB4ZmYsMHhmZiwKLTB4ZmQsMHhmNywweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGQ3LDB4ZmYsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNywweGRiLDB4ZmYsMHhkYiwweGZkLAotMHhmNiwweGZmLDB4ZjYsMHhmZiwweDNjLDB4YmMsMHhiYywweGJmLDB4ZGYsMHg2ZiwweGVmLDB4MmYsMHhmMSwweDNjLDB4YmYsMHhiYywKLTB4YmYsMHhkZiwweDZmLDB4ZmYsMHg2ZiwweGY3LDB4ZGIsMHhmZiwweGRiLDB4ZmQsMHhmNiwweGZmLDB4ZjYsMHhmZiwweGZmLDB4ZmYsCi0weDAxLDB4ZTIsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW05NjAwLmggYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW05NjAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZDFmZTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtOTYwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLS8qCi0gKgotICogRmlsZSB5YW0xMTEubWNzIGNvbnZlcnRlZCB0byBoIGZvcm1hdCBieSBtY3MyaAotICoKLSAqIChDKSBGNkZCQiAxOTk4Ci0gKgotICogVHVlIEF1ZyAyNSAyMDoyMzowMyAxOTk4Ci0gKgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJpdHNfOTYwMFtdPSB7Ci0weGZmLDB4ZjIsMHgwMCwweGE1LDB4YWQsMHhmZiwweGZlLDB4OWYsMHhmZiwweGVmLDB4ZmIsMHhjYiwweGZmLDB4ZGIsMHhmZSwweGYyLAotMHhmZiwweGY2LDB4ZmYsMHg5YywweGJmLDB4ZmQsMHhiZiwweGVmLDB4MmUsMHgzZiwweDZmLDB4ZjEsMHhmZCwweGI0LDB4ZmQsMHhiZiwKLTB4ZmYsMHg2ZiwweGZmLDB4NmYsMHhmZiwweDBiLDB4ZmYsMHhkYiwweGZmLDB4ZjIsMHhmZiwweGY2LDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmQsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLAotMHhmYiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHg3ZiwweGYxLDB4ZmYsMHhmZSwweGZmLDB4YmYsMHhiZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGY3LAotMHhmZiwweGZmLDB4ZjcsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweDdlLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZGYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZWYsMHhmZiwweGYzLDB4ZmIsMHhmZSwweGZmLDB4ZjEsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmMCwweDdmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgwZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4N2YsMHhmZiwweGVmLAotMHhmZiwweGVmLDB4ZmYsMHg3ZiwweGVmLDB4ZjEsMHhmZiwweGVmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGJkLDB4ZmYsMHhlZiwweDdmLDB4ZWYsMHg3ZiwweGZiLDB4ZGYsMHhkMywweDVhLDB4ZmUsMHhkNywweGQ2LAotMHhmNywweDdmLDB4YmQsMHhmMSwweGJiLDB4NWQsMHhkNiwweGY3LDB4ZmUsMHg5NiwweGZmLDB4YmQsMHhhZiwweGFkLDB4YmYsMHhlZiwKLTB4N2YsMHg2YiwweDdmLDB4ZmIsMHhkNiwweGZlLDB4ZjcsMHhmZiwweDEwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJlLDB4ZWYsCi0weGZmLDB4ZmYsMHhkYiwweGZmLDB4ZjYsMHhmZiwweGY2LDB4ZmYsMHhmZCwweGJmLDB4ZmQsMHhiZiwweGZmLDB4N2YsMHhmZiwweDdmLAotMHhkZiwweGRiLDB4ZjEsMHhmZCwweDM1LDB4ZmYsMHg2ZiwweGZmLDB4NmYsMHhmZiwweGRiLDB4ZmYsMHhjYiwweGZmLDB4ZjYsMHhmZiwKLTB4ZjIsMHhmZCwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4NTUsMHhmZiwweGNjLDB4YzAsMHgzZiwweGZmLAotMHhmZiwweGYxLDB4MjQsMHhmMCwweGZmLDB4ZmYsMHhjZiwweGVmLDB4M2YsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmMsMHgzZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDU1LDB4ZmYsMHhjYywweGMwLDB4M2YsMHhmZiwweGZmLAotMHhmMSwweDAwLDB4ZjAsMHhmZiwweGZmLDB4Y2YsMHhkZiwweGZmLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZjLDB4M2YsMHhmZiwKLTB4ZmYsMHhmZiwweDdkLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZlLDB4N2YsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGYxLAotMHhmZiwweGNmLDB4ZmYsMHhmMywweGZmLDB4OTcsMHhmZiwweGZmLDB4OGYsMHhlNywweGZmLDB4ZmYsMHhmYywweDcxLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGUzLDB4ZjcsMHhlZiwweGZmLDB4ZmYsMHhmYywweDdiLDB4ZmYsMHhmMSwweDNmLAotMHhmZiwweGVmLDB4ZmYsMHhjZiwweGUzLDB4ZTMsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YmYsMHhmZiwKLTB4YmYsMHhmZiwweGRhLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjIsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgzYywweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHg5ZiwweGZmLAotMHhmZiwweGZmLDB4ZjcsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZGIsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGJiLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmYiwweGRmLDB4YmYsMHhmMSwweGZlLDB4ZmQsMHhmNywweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDc3LDB4ZmQsMHhmMiwKLTB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHg5MCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDEsMHgwMCwweDAwLDB4MDQsMHgyNCwweDAwLAotMHg0MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAxLDB4YzAsMHhmMCwKLTB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHg2ZiwweGZmLDB4ZGYsMHhmZiwweGQxLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZiLDB4ZmYsMHhmYiwweGVmLDB4ZmYsMHhmZiwweGVlLDB4ZmYsMHhmZiwweDdmLDB4ZjAsMHhkZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OGYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjUsMHhhZCwweGZmLDB4NjksMHgyYSwweGVkLDB4NmIsMHhmYiwweGRmLDB4M2EsCi0weGRjLDB4ZjQsMHg5NiwweGVlLDB4YjMsMHgzZCwweDM1LDB4YzEsMHhiYiwweGRkLDB4ZmUsMHhmNiwweGZlLDB4ZDYsMHhiNSwweGFkLAotMHhiZiwweGE1LDB4YWQsMHg0OSwweDJmLDB4NGYsMHgyYiwweGRhLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZiLDB4NWIsMHhmNywweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmQsMHhiZiwweGZkLDB4YTUsCi0weGYzLDB4NmYsMHhmMywweDZlLDB4ZmEsMHg3YiwweGQxLDB4ZmQsMHhiNSwweDc3LDB4NmYsMHhlOSwweDZmLDB4ZmYsMHhkYiwweGZiLAotMHhkYiwweGRmLDB4ZjYsMHhmZiwweGY2LDB4ZmYsMHhmZCwweDNmLDB4ZmUsMHhmNywweGZmLDB4ZDAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmZiwweDlmLDB4ZmYsMHhmZiwweDBmLDB4ZmYsMHhjMCwweDNmLDB4OWMsMHgwMywweGZmLDB4ZmYsMHg4YiwweGE1LDB4ZmUsCi0weDgwLDB4M2UsMHhjMiwweGJmLDB4YWMsMHhiMSwweDI0LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MGYsMHhmZiwweGEzLAotMHhmZiwweGZkLDB4NmIsMHhmZiwweGZmLDB4ZjAsMHhhNSwweGZmLDB4ZmYsMHhmZiwweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwZiwweGZmLDB4YzAsMHgzZiwweGQ0LDB4NmIsMHhmZiwweGZmLDB4ZGIsMHhmZiwweGZlLDB4ODYsCi0weGJmLDB4YzIsMHhiZiwweDMwLDB4YTEsMHgyNCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4Y2MsMHhmZiwweDBmLDB4ZmYsMHhhMywweGZmLAotMHgwNSwweDZiLDB4ZmYsMHhmZiwweGYwLDB4YTUsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZiLDB4YzcsMHhmZiwweGM0LDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhlYywweGZlLDB4N2YsMHhkZiwweGQ4LDB4YjksCi0weDQ3LDB4ZmMsMHgzNiwweGMxLDB4ZGYsMHhmZiwweGZmLDB4ZjksMHhmZiwweGYzLDB4ZmYsMHhmNywweGZmLDB4ZmMsMHhmZiwweGZkLAotMHgzZiwweGZmLDB4ZmYsMHhmZiwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4N2UsMHhiZCwweDNmLDB4ZmYsMHgyYiwweGZlLDB4MmYsMHhmNSwweGEzLDB4ZmMsCi0weDViLDB4ZmUsMHg2MSwweDlmLDB4N2YsMHhlZiwweGZmLDB4ZmYsMHhhNywweGZiLDB4ZmYsMHhmZiwweGZhLDB4ZmUsMHhmZiwweDMzLAotMHhmMSwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmYSwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYxLDB4YzAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgzMCwweDI0LDB4MDQsCi0weDAwLDB4MDEsMHgwMCwweDgwLDB4NDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMSwweDAxLDB4MDAsMHgwMiwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4M2QsMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJkLDB4ZmYsMHhmZCwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZiwweDdmLDB4ZjYsMHhlZiwweGJmLDB4ZjcsMHhmZiwweDczLDB4ZWIsCi0weGYxLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjksMHhmZiwweGZkLDB4ZmUsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGQ5LDB4ZjAsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhiZiwweDdmLDB4ZmYsMHhmZiwKLTB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhkZSwweGZmLDB4ZmYsMHhlZiwweGRkLDB4ZGUsMHg3NywweGYyLDB4ZmIsMHhlZCwweGU3LDB4ZjEsCi0weDczLDB4ZmQsMHhmZCwweGRmLDB4ZmYsMHg3ZCwweGJlLDB4ZGYsMHhmZiwweGZiLDB4ZmYsMHhlZiwweGZmLDB4ZWYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhkMCwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHgyMCwweDAyLDB4MDAsMHgyMiwKLTB4NDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDQxLDB4MDIsMHgxMiwweDAwLDB4MjEsMHg4NywweDgxLDB4MDAsCi0weDAwLDB4ODAsMHgwNCwweDBiLDB4MjgsMHgwMSwweGIwLDB4MDAsMHg4MiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4YzEsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhmZiwKLTB4ZjcsMHhmZiwweGZlLDB4N2YsMHhlZCwweDc5LDB4ZmYsMHhkZSwweGViLDB4N2YsMHg3NCwweGY3LDB4ZjcsMHhlMSwweGY5LDB4ZmYsCi0weGY2LDB4NWYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGQ3LDB4ZGIsMHhlZiwweGZmLDB4YmIsMHhmZiwweGZmLDB4ZmYsMHhjYywweGZmLAotMHhmZiwweGZmLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGYwLDB4MGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4M2QsMHhjZCwweDQ5LDB4N2YsMHg2ZiwKLTB4MmIsMHhiYSwweDVjLDB4ZDIsMHhkYSwweGY2LDB4ZjMsMHgzZSwweGY3LDB4ZmYsMHhiZCwweGYxLDB4ZmEsMHhkZiwweGZlLDB4ZjcsCi0weGNjLDB4ZjYsMHhiYiwweGE1LDB4YjMsMHhhZCwweGJmLDB4NmYsMHg3ZCwweDZmLDB4NmIsMHhkYiwweGRmLDB4YmQsMHhmZiwweGZlLAotMHhiMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmYiwweGRiLDB4NTcsMHhmNiwweGZlLDB4OWYsMHhkNSwKLTB4YjcsMHhmZiwweGFmLDB4ZTUsMHgzZiwweGZmLDB4ZmYsMHg2ZiwweGZmLDB4ZGIsMHhmMSwweGZkLDB4YmYsMHhmZiwweDZmLDB4NjksCi0weDZjLDB4ZGYsMHhkYSwweGRmLDB4Y2IsMHhmZiwweGY2LDB4ZmYsMHg3NiwweGZkLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGQwLAotMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZCwweGJkLDB4MDgsMHgwMywweDg5LDB4NGYsMHg1YSwKLTB4MGYsMHhmMCwweGZmLDB4ZjgsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHg1YSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjMsCi0weGZhLDB4YTAsMHhmMCwweGYyLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmMsMHhmZCwweDAwLDB4NmIsMHhmZiwweGZmLDB4NWEsMHgwZiwKLTB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4NWEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGIzLDB4ZjUsCi0weDUwLDB4ZjAsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGQ3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg3ZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZCwweGJjLDB4ZmYsMHhlNCwweGU3LDB4NzEsMHhmZiwweGY5LDB4YzQsMHhmNCwKLTB4N2YsMHg3ZiwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZjcsMHg3MywweGJmLDB4MTQsCi0weGZmLDB4ZTYsMHhmZiwweGZmLDB4ZTEsMHg3ZCwweGZmLDB4ZmYsMHhlNywweGZmLDB4ZmYsMHhmZiwweGYwLDB4M2YsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZjUsMHhmZiwweGZmLDB4ZmUsMHhkMiwweGZhLDB4ZmYsMHhjNCwweGY0LDB4NWMsMHhiZiwweGZhLDB4ZmYsMHhmZiwKLTB4ZWMsMHg3ZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4NmIsMHhkYiwweGZmLDB4ZGYsCi0weGY5LDB4ZmIsMHhiZiwweGZmLDB4ZjEsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmMCwweGJmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGYzLDB4YzAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwOCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgwMSwweDAwLDB4MDAsMHg4MCwweDAyLDB4MDAsMHgwMSwweDNjLDB4ZjAsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhkZiwweGZmLDB4ZWYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmIsMHhmZiwweGZkLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhjMywweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLAotMHhmZiwweGRmLDB4ZmYsMHhmZiwweGY3LDB4MjMsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGVmLDB4ZmYsMHhmZSwweDdmLDB4N2QsMHhmNywKLTB4ZmUsMHhmZiwweDdmLDB4NzEsMHhmZiwweGZiLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHg2ZSwweGZkLDB4ZjcsMHhmZCwweGZmLDB4YmYsCi0weGZmLDB4YmYsMHhmOSwweGZkLDB4ZmYsMHhkZiwweGVmLDB4ZjAsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDMwLAotMHg0MCwweDAxLDB4MDAsMHg4MywweDAwLDB4MDAsMHgwMCwweDBjLDB4MDYsMHgwOCwweDA0LDB4MjYsMHgyNiwweDAwLDB4MDAsMHgwNiwKLTB4MDMsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4NzAsMHgwOCwweDgwLDB4MDAsMHgyMCwweDAxLDB4MjAsCi0weDAwLDB4MDIsMHgwMCwweDMwLDB4MDAsMHgwMCwweGMxLDB4ZjAsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4N2IsMHgzZiwweGY3LDB4ZmYsMHhkNywweGZlLDB4ZmUsMHhmYiwweGZlLDB4M2IsMHhmZSwweGJkLDB4ZmYsMHgyZiwKLTB4ZmYsMHg3MSwweGZmLDB4ZmIsMHg3ZiwweGU3LDB4ZmYsMHhmOSwweGVmLDB4ZmYsMHhkNywweGZhLDB4ZmYsMHhiNywweGJiLDB4ZmUsCi0weGZmLDB4ZmYsMHg3NCwweGZmLDB4ZjcsMHhmZiwweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDhmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGI1LAotMHhiZCwweDZmLDB4N2MsMHhlYiwweDdmLDB4ZmIsMHhkYiwweGQzLDB4NGIsMHhlZSwweGQ2LDB4ZjYsMHhiNywweGZkLDB4YWMsMHhhMSwKLTB4ZmIsMHhkZiwweGZlLDB4ZjcsMHhmNCwweDk2LDB4YmQsMHhiNCwweGM1LDB4YTUsMHhhZiwweDZmLDB4NjksMHg0ZiwweDdmLDB4YmEsCi0weGRiLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZmLAotMHhmNiwweGZmLDB4ZjYsMHhmZiwweGJkLDB4YmYsMHhhNSwweGJmLDB4ZmYsMHg3ZCwweDdmLDB4ZWYsMHhmZiwweGZiLDB4ZjEsMHhmZCwKLTB4YmYsMHhmZiwweDZmLDB4ZmYsMHg2YiwweDdhLDB4ZGIsMHhmZiwweGRiLDB4ZGYsMHhmNiwweGZlLDB4YjYsMHhmZCwweGZkLDB4YmYsCi0weGZlLDB4ZjcsMHhmZiwweGQwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjQsMHgyZiwweGZmLAotMHhmYywweDQzLDB4NmIsMHhmZiwweGZmLDB4ZmYsMHgwZCwweGZmLDB4ZmMsMHgzMywweDNmLDB4ZjAsMHg1ZiwweGYxLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGY5LDB4ZGUsMHhmMCwweDRjLDB4ZmUsMHg3NywweGFmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmMCwweGZmLDB4ZGIsCi0weGZmLDB4NWYsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZlLDB4ZjcsMHhmZiwweGYwLDB4MmYsMHhmZiwweGZkLAotMHg0MywweDdmLDB4ZmYsMHhmZiwweGYxLDB4MGYsMHhmZiwweGZjLDB4MzMsMHgzZiwweGZmLDB4YWYsMHhmMSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmNiwweGQ3LDB4ZmYsMHhiYywweGZkLDB4YmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYywweGZmLDB4ZmYsMHhmYiwweGYxLAotMHhiZiwweGZmLDB4ZjksMHhmZCwweGNmLDB4ZjIsMHg3MCwweGZmLDB4MWYsMHg5ZiwweGYzLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmMsMHhmNywweGZmLDB4MTMsMHg5ZiwweGZjLDB4ZmYsMHhmZiwweDg0LDB4ZjcsMHhmZiwweGZmLDB4NDcsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmYywweGZmLDB4ZmUsMHhmZSwweDc5LAotMHgzZiwweGZmLDB4MWQsMHg0NiwweGNmLDB4ZmYsMHhjZiwweGZjLDB4N2IsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlZCwKLTB4ZjMsMHhhYiwweGZmLDB4Y2IsMHhmZiwweGY4LDB4ZmYsMHhmYywweGY1LDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZjAsCi0weDhmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMywweGMyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLAotMHgwMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDA0LDB4MDgsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwKLTB4MGMsMHgwMCwweDAwLDB4MDQsMHgwMSwweDAwLDB4MDEsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDEsMHgzYywweGYwLDB4N2YsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZCwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLAotMHhkZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlYiwKLTB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmYiwweGY3LDB4N2YsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGJmLDB4ZGIsMHhmMCwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmNywweGZmLAotMHhiZiwweGJmLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHgzZSwweGYxLDB4N2YsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZCwweGZmLDB4YmYsMHhiZCwweGZlLDB4ZmYsMHhmYiwweGY3LDB4ZGYsMHhmYiwweGQwLDB4ZjAsMHg5ZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmOCwweDMwLDB4MjAsMHgwMCwweDQwLDB4MDEsMHg4MCwweGMwLDB4MzAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDEwLAotMHg1MCwweDg4LDB4MjAsMHgwMCwweDAwLDB4MTMsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAxLDB4ODAsMHgwOCwweDAwLDB4MDAsMHhhMCwweDAwLDB4MTAsMHhjMSwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZmQsMHhlZiwweDdmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmNywweGZmLDB4ZWYsMHhmYiwweGZkLDB4NzcsMHhlZiwweGJmLAotMHhmNywweDdmLDB4ZmYsMHhmZiwweGJmLDB4ZDEsMHg3ZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmYsMHhmZiwweGZmLDB4YWYsMHhmZiwKLTB4ZGYsMHhmNywweGZiLDB4ZmYsMHhmZCwweGZmLDB4ZmMsMHhmZiwweGZkLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGUwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRkLDB4ZmYsCi0weGZmLDB4ZmYsMHhhNSwweGZkLDB4NmYsMHg3ZCwweDZkLDB4N2YsMHg1MiwweGRmLDB4NWEsMHg0YiwweGVlLDB4YjYsMHhlZSwweGYyLAotMHhiYiwweGFjLDB4YTEsMHg1YiwweDRkLDB4ZDYsMHhmNywweGZlLDB4YjIsMHhiZCwweDM1LDB4YjUsMHhiNSwweGRkLDB4NmYsMHg3ZiwKLTB4ZTksMHg1ZiwweDUyLDB4ZGYsMHhiZCwweGZmLDB4ZmYsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsCi0weGZmLDB4ZGIsMHhmZSwweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmQsMHhiZiwweGZkLDB4YjUsMHhiZiwweGY5LDB4N2YsMHg2ZiwweGZmLAotMHhkYiwweGYxLDB4ZmQsMHhiZiwweGZmLDB4NmYsMHhmZiwweDY5LDB4N2YsMHhkYiwweGZmLDB4ZDMsMHhmZiwweGY2LDB4ZmUsMHhmMiwKLTB4ZmYsMHhhZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZDAsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjUsCi0weDMwLDB4MGYsMHhmZiwweGZmLDB4ZmQsMHg2YiwweGNhLDB4ZmYsMHhmMCwweDBmLDB4ZDYsMHhiZiwweGNmLDB4M2YsMHhmZiwweGZmLAotMHhmMSwweGZmLDB4ZmYsMHhmZiwweGNhLDB4ZmUsMHhiZiwweGZmLDB4ZjAsMHgwNSwweGFmLDB4MGYsMHhmZiwweGZjLDB4ZjAsMHhjZiwKLTB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGY1LDB4MzAsCi0weDBmLDB4ZmYsMHhmZiwweGZjLDB4M2YsMHhjYSwweGZmLDB4MGYsMHgwZiwweGQ2LDB4YmYsMHhmZiwweGZmLDB4ZjUsMHg1ZiwweGYxLAotMHhmZiwweDhiLDB4ZmYsMHhjMywweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDBmLDB4ZmYsMHhmYywweGYwLDB4Y2YsMHhmMCwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGNmLDB4ZmYsCi0weGZmLDB4YmYsMHg5ZiwweDNmLDB4ZmUsMHhmYywweGZmLDB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmMSwweGZmLAotMHhkZiwweGZlLDB4N2UsMHgzZiwweDlmLDB4ZjQsMHhmYywweDdmLDB4ZmMsMHhmZiwweGZmLDB4M2YsMHhmZiwweDNmLDB4ZmUsMHgzZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGJmLDB4ZmIsMHhmZiwweGY4LDB4ZWQsMHhmZiwweDhmLDB4ZmYsMHhiYiwweGZmLDB4YjEsMHhmMywweGVmLAotMHg4ZiwweGY3LDB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhiZiwweGZkLDB4NzksMHhiZiwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmYiwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYzLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDA0LDB4MDgsMHgwOCwweDAxLDB4MDEsMHgwMCwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMSwKLTB4M2MsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4OWYsMHhmZiwweGFmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhiZiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZWQsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhjMywKLTB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGJiLDB4ZmYsCi0weGZmLDB4ZmYsMHg3ZiwweGY2LDB4ZmYsMHg3ZiwweGZiLDB4ZmQsMHhlZCwweGZmLDB4ZjEsMHhmZiwweGZlLDB4N2YsMHhmZiwweGZmLAotMHhmZiwweDVmLDB4ZmYsMHhmNywweGZmLDB4N2UsMHhmZiwweGZkLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZjAsMHhmMCwKLTB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHg4MCwweDAwLDB4MDQsMHgwMCwweDAwLDB4NDAsMHgwMiwweDAwLDB4MDMsCi0weDAwLDB4MDUsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAxLDB4ZDAsMHgwMCwweDgxLDB4MDAsMHgyMCwweDA0LDB4MDQsMHgwMCwweDAwLAotMHg4MSwweDA0LDB4MDgsMHg4MCwweDEwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwOCwweGMxLDB4ZjAsMHg2ZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYzLDB4ZmQsMHhmZiwweGVkLDB4ZmMsCi0weGZmLDB4ZmYsMHg5ZiwweGZiLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHg3ZiwweGZiLDB4M2UsMHhmZiwweDlmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZjksMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGNmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4YmQsMHhmZiwweGVmLDB4N2MsMHhlYiwweDdmLDB4ZmIsMHhkYiwweGZhLDB4ZGMsCi0weGVlLDB4ZjcsMHhmNiwweGQ3LDB4ZjUsMHgyZCwweGExLDB4YmIsMHhkZCwweGVlLDB4ZjcsMHg1NCwweGY3LDB4ZmIsMHgyYywweGI1LAotMHhiNCwweGJkLDB4NmIsMHg2ZiwweGVmLDB4NmYsMHhiYiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmNiwweGZmLDB4ZjYsMHhmZiwweGZkLDB4YmYsMHhmZiwweGJmLDB4ZWYsCi0weDZmLDB4ZmYsMHg2ZiwweGZhLDB4ZGIsMHhmMSwweGM1LDB4YmQsMHhmNSwweDZmLDB4ZmYsMHg2ZiwweGNhLDB4ZGIsMHhmZiwweGRiLAotMHhmYiwweGY2LDB4OTcsMHhmNiwweGZmLDB4ZmQsMHhiZiwweGZlLDB4ZjcsMHhmZiwweGQwLDB4OWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDhiLDB4N2YsMHhmZiwweGZmLDB4ZTcsMHg2MywweGZmLDB4ZmYsCi0weGZmLDB4ZmMsMHg3NywweGRmLDB4ZjEsMHhkYiwweGZmLDB4ZDYsMHhhOCwweDNmLDB4ZmYsMHhmZiwweDA4LDB4MmYsMHhmMCwweGZmLAotMHhjMywweGZmLDB4ZWIsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4NWYsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg4YiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZjLDB4ZmYsMHhjZiwweGYxLDB4ZGIsMHhmZiwweGQ2LDB4YTgsMHgzZiwweGZmLDB4ZmYsMHgwOCwweDJmLDB4ZjAsMHhmZiwweGMzLAotMHhmZiwweGViLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjUsMHhiZiwweGZmLDB4Y2EsMHhmZiwweDlmLDB4ZmYsMHhmYSwweGI5LDB4ZTcsCi0weDlmLDB4ZjMsMHg4MSwweGZmLDB4ZmYsMHhmYywweDczLDB4ZDcsMHhmZiwweGZmLDB4NzcsMHhmZiwweGZkLDB4ZmYsMHhmYywweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwKLTB4ZmYsMHhmNywweGRlLDB4ZmYsMHhmZSwweDdlLDB4ZmYsMHhiZiwweGZmLDB4YmYsMHhmMSwweGIzLDB4ZmYsMHhmZiwweGUzLDB4ZmIsCi0weGZmLDB4ZTEsMHgxZiwweDdmLDB4ZmYsMHhmOCwweDc4LDB4ZmYsMHhmYiwweDFlLDB4ZmYsMHhmNywweGZlLDB4ZTcsMHhmZiwweGZmLAotMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmEsMHhmMCwweDRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMywweGMwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsCi0weDAxLDB4ODAsMHg0MCwweDQwLDB4MjAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLAotMHg4MCwweDAwLDB4MDAsMHgwMSwweDNjLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmIsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGY3LDB4ZjEsCi0weGZkLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhkYiwweGYwLDB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHg3ZiwKLTB4ZmYsMHhmZiwweGZmLDB4YmUsMHhkNywweGZmLDB4ZWQsMHhiZCwweDdlLDB4YmYsMHhmZSwweGY2LDB4N2YsMHhiZiwweDcxLDB4ZmYsCi0weGZmLDB4ZGEsMHhmZiwweGY5LDB4ZmYsMHhiZiwweDdmLDB4ZmUsMHhmZiwweDZmLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHg3ZiwweGZmLDB4ZDAsMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDMwLDB4NDIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ODAsMHhjMSwweDAwLDB4MDAsMHg5MCwweDAwLDB4YzQsMHgwMCwweDAwLDB4MTIsMHgyMCwweDQzLDB4MjIsMHg4MSwweDg0LDB4MDAsCi0weDAwLDB4MTQsMHgwMCwweDAxLDB4MDAsMHgwOCwweDgwLDB4MDAsMHgwMiwweDAwLDB4MDIsMHgwMCwweDA0LDB4MDIsMHgwMCwweDAwLAotMHgxMCwweGMxLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGRkLDB4ZmUsMHhmZiwKLTB4YjYsMHg3NiwweGU1LDB4YmMsMHhmOSwweGY3LDB4YWYsMHg1ZiwweGJmLDB4ZmMsMHhkZiwweGNmLDB4ZjEsMHhmZiwweGVmLDB4NzksCi0weGZmLDB4YmQsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGY3LDB4NmYsMHg1ZiwweGZmLDB4ZmYsMHhmZCwweGVmLDB4ZWYsMHhiZiwweGZmLAotMHhmZiwweGYwLDB4OWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhkYiwweGZmLDB4ZmYsMHhmZCwweDJkLDB4ZmYsMHg2OSwweDJhLDB4ZWYsMHg3NywKLTB4YmIsMHhkZCwweDVhLDB4ZGYsMHhmNiwweGY2LDB4ZDYsMHhmNywweDdkLDB4YmQsMHhkMSwweGIyLDB4NGEsMHhkNiwweGIyLDB4YmUsCi0weDk3LDB4ZjUsMHhiZCwweGIzLDB4YWQsMHhmZiwweGVmLDB4N2YsMHg2OSwweDZiLDB4ZmIsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGYwLAotMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZmLDB4ZjYsMHhmZSwweDlmLDB4ZDQsMHhiZiwKLTB4ZWQsMHhhZiwweGZmLDB4NmIsMHg2ZiwweGY3LDB4ZmYsMHhkZCwweGRiLDB4MzEsMHhmZCwweGJmLDB4ZmYsMHg2ZiwweDdmLDB4ZmYsCi0weGZmLDB4ZGIsMHhmZiwweGNiLDB4ZGYsMHhmNiwweGZmLDB4ZjYsMHhmZiwweGZkLDB4YmYsMHhmZSwweGY3LDB4ZmYsMHhkMCwweDhmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4MWYsMHhmZiwweDQ2LDB4MmYsMHg5ZiwweGZmLDB4ZmYsMHhmZiwKLTB4YTUsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGI3LDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhlOSwweDZhLDB4YmYsCi0weGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmZCwweDU1LDB4NTcsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGFmLDB4ZjAsMHg0ZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZSwweGRmLDB4ZmYsMHhmZCwweDFmLDB4ZmYsMHg0NiwweDJmLDB4OWYsMHhmZiwweGZmLDB4ZmYsMHhhNSwKLTB4ZmYsMHhmZiwweGZmLDB4YzAsMHgzNywweGZmLDB4ZmYsMHhmMSwweDk5LDB4OGUsMHhkYywweDdmLDB4ZTksMHg2YSwweGJmLDB4ZmYsCi0weGYwLDB4MGYsMHhmZiwweGZmLDB4ZmQsMHg1NSwweDU3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MGYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwNywweGZmLDB4YzAsMHhiZSwweGZmLDB4ZmYsMHhjZiwweGVmLDB4OWYsMHhmZiwKLTB4ZmYsMHhmYiwweGZmLDB4ZTcsMHhmZiwweGZmLDB4YTEsMHhlMywweGNlLDB4M2MsMHg1OCwweDNmLDB4ZjMsMHhmZiwweGZkLDB4ZWYsCi0weGY5LDB4ZmYsMHhmZiwweGY3LDB4ZjEsMHg3ZiwweGZmLDB4Y2IsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGY1LDB4N2YsMHhmZiwweGYwLDB4ZmYsMHhmZSwweGZmLDB4YzQsMHg3NSwweGU3LDB4YjksMHhmZiwweGZmLDB4ZmYsMHhlZiwKLTB4ZmYsMHhjNywweDM3LDB4M2IsMHhmZiwweGYwLDB4MTMsMHg5ZSwweDBmLDB4ZjQsMHhmZiwweGZlLDB4ZmIsMHhmZiwweGZmLDB4ZjksCi0weGZjLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmMywweGMwLDB4MDEsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAyLDB4MjIsMHgwMCwweDAwLDB4YzAsMHg0MCwweDAwLDB4NDAsMHgwMCwKLTB4MDQsMHgwOCwweDA0LDB4MGEsMHgwMSwweDAxLDB4MTAsMHgyMCwweDIwLDB4MDAsMHgwMCwweDA0LDB4MDgsMHgwOCwweDA0LDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDEsMHgzYywweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLAotMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHg3ZiwweGZmLDB4N2YsMHhmZiwweGNmLDB4OWQsMHhmZiwKLTB4ZmYsMHhmNywweGZkLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhlZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmMCwweDZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGZmLAotMHhmZiwweGZmLDB4ZjcsMHhmNywweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZjcsMHhmZiwweGZmLDB4NWIsMHhmZiwweGJmLDB4ZjcsMHhmZiwKLTB4ZmQsMHg3ZiwweDcxLDB4ZmQsMHhmZiwweGVkLDB4ZjcsMHhmZSwweGVmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhlZiwweGZmLDB4N2YsMHhmZiwweGQwLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDExLAotMHgwMCwweDQ4LDB4NjAsMHg0MCwweDgyLDB4NjAsMHgyNCwweDYwLDB4MDAsMHhjYywweDAwLDB4ODAsMHgwNCwweDAxLDB4MDAsMHgwMCwKLTB4MTQsMHgwMSwweDBjLDB4MDQsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwOCwweDAwLDB4MDEsMHgwMCwweGMyLDB4MDAsCi0weDAwLDB4MDIsMHgwMCwweDgwLDB4MDAsMHhjMSwweGYwLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmNywweDdiLDB4ZmYsMHhmMywweGViLDB4YmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZTcsMHg1ZCwweDNmLDB4ZmYsMHhmNiwKLTB4ZDEsMHhmZCwweGZmLDB4ZWIsMHhmNywweDNkLDB4ZmYsMHhmZiwweGZmLDB4NWYsMHhmZiwweDdmLDB4N2YsMHhmMywweGZmLDB4ZmYsCi0weGVmLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjUsMHhiNSwweGRmLAotMHg2ZiwweDdkLDB4NjksMHg3ZiwweGZiLDB4ZGYsMHg1MiwweDVmLDB4ZjYsMHhmNywweGZlLDB4ZjYsMHhmMywweGJkLDB4YjEsMHhkYSwKLTB4Y2QsMHhmZSwweGY2LDB4ZWUsMHhkMiwweGJkLDB4YTUsMHhhZiwweGJkLDB4ZmYsMHg2ZiwweDdjLDB4ZWIsMHgyYiwweGZhLDB4ZGEsCi0weGZmLDB4ZmUsMHhkZiwweGYwLDB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmZiwweGY2LAotMHhmZiwweGY2LDB4ZmYsMHhiZCwweGJmLDB4Y2QsMHhiZiwweGViLDB4NmYsMHhmNywweDZmLDB4ZGYsMHhkYiwweDUxLDB4ZmQsMHhiZCwKLTB4ZmYsMHg2ZiwweGZmLDB4NmYsMHhmYiwweDViLDB4ZmYsMHhkYiwweGZmLDB4ZjYsMHhmZSwweGY2LDB4ZmQsMHhmZCwweGJmLDB4ZmUsCi0weGY3LDB4ZmYsMHhkMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmYSwweDUwLDB4ZmYsMHhmZiwweGZmLAotMHhmMCwweDZmLDB4ZmYsMHhmZiwweGYwLDB4OTYsMHhmZiwweGZmLDB4YzYsMHgyYiwweGZmLDB4ZmYsMHhmMSwweGZjLDB4ZmYsMHhmZiwKLTB4ZjcsMHhkYiwweGMzLDB4ZmYsMHgwMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhjMSwweDRmLDB4YzMsMHhmZiwweGZmLDB4ZmYsCi0weGFmLDB4ZjAsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjUsMHhhMCwweGZmLDB4ZmYsMHhmZiwweGYwLAotMHg2ZiwweGZmLDB4ZmYsMHhmMCwweDk2LDB4ZmYsMHhmZiwweGM2LDB4MmIsMHhmZiwweGZmLDB4ZjEsMHg1YSwweGZmLDB4ZmYsMHhmZiwKLTB4ZjMsMHhjMywweGZmLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YzEsMHg0ZiwweGMzLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmMsMHhmZiwweGZmLDB4OWYsMHhmMCwweDdmLAotMHhmZiwweGY5LDB4ZmMsMHg0ZiwweGYzLDB4ZmYsMHgyNywweGViLDB4ZmYsMHhmYywweDgxLDB4ZmMsMHg3ZiwweGZlLDB4N2IsMHhmZiwKLTB4ZjcsMHhmZiwweDEyLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDE4LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmUsMHhmZiwweGZjLDB4N2UsMHg3ZiwweGJmLAotMHhmZiwweGZmLDB4YWYsMHhlZiwweGZmLDB4ZGYsMHhkZiwweGZiLDB4ZmYsMHhmMSwweGMzLDB4ZmUsMHg2ZiwweGYxLDB4Y2YsMHgzZiwKLTB4ZmIsMHhmZiwweGZmLDB4Y2YsMHhmZSwweGZmLDB4ZmYsMHhmZSwweDdmLDB4YmYsMHhmZiwweGZmLDB4YmYsMHhmYSwweGYwLDB4ZGYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjMsMHhjMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLAotMHgyMCwweDAwLDB4MDEsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAyLDB4ODAsMHgwMCwweDAyLDB4M2MsMHhmMCwweDJmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZiLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGYxLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZjAsMHgyZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhiZiwweGZiLAotMHhmZiwweGZmLDB4ZmYsMHhkZiwweGY3LDB4ZmYsMHhmMSwweGY3LDB4YmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZGUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVkLDB4ZjcsMHhmZiwweGZmLDB4N2YsMHhkMCwweGYwLDB4M2YsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZjgsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDAsMHgwMCwweDgwLAotMHgyMCwweDAxLDB4MDEsMHg5MiwweDAwLDB4MDEsMHgwMSwweDAwLDB4ZTAsMHgxYywweDYwLDB4MjAsMHgzMCwweDA4LDB4MDgsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4YzEsMHhmMCwweDZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZlLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmYywweDdmLDB4ZmIsMHhiZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZjYsMHhmZiwweGY3LDB4N2UsMHgzZiwweGZmLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmNywKLTB4ZmYsMHhmZiwweGZmLDB4ZWQsMHhmZiwweGRmLDB4ZmYsMHhiNywweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YmYsMHhmZiwweGRmLAotMHg1NywweGVmLDB4ZjEsMHhmZCwweGZlLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmIsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhkZiwweGZmLAotMHhmZiwweGYxLDB4ZmQsMHhmZiwweDdmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjcsMHhmZCwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLAotMHhmZiwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmYiwweDZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmMSwweGZmLAotMHhmNywweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZCwKLTB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZiLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHg1NywweGZmLDB4ZmQsMHhiZiwweGZmLDB4ZjEsMHhmZiwweGVmLAotMHhmZSwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZGUsMHhmZiwweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZGIsMHhmZiwweGRiLDB4ZmQsCi0weGY2LDB4ZmYsMHhmNiwweGZmLDB4M2MsMHhiYywweGJjLDB4YmYsMHhkZiwweDZmLDB4ZTcsMHgyZiwweGYxLDB4M2MsMHhiZiwweGZkLAotMHhiZiwweGRmLDB4NmYsMHhmZiwweDZmLDB4ZjcsMHhkYiwweGZmLDB4ZGIsMHhmZCwweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmYsMHhmZiwKLTB4MDIsMHgwMSwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYwppbmRleCBkZTJkNDg2Li5mNTBmYWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCkBAIC00NDgsOCArNDQ4LDExIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIFdhaXQgMTVtcyBmb3IgTUFDIHRvIGNvbmZpZ3VyZSBQSFkgZnJvbSBOVk0gc2V0dGluZ3MuICovCi0JbXNsZWVwKDE1KTsKKwkvKgorCSAqIFdhaXQgMTAwbXMgZm9yIE1BQyB0byBjb25maWd1cmUgUEhZIGZyb20gTlZNIHNldHRpbmdzLCB0byBhdm9pZAorCSAqIHRpbWVvdXQgaXNzdWVzIHdoZW4gTEZTIGlzIGVuYWJsZWQuCisJICovCisJbXNsZWVwKDEwMCk7CiAKIAkvKgogCSAqIFRoZSBOVk0gc2V0dGluZ3Mgd2lsbCBjb25maWd1cmUgTFBMVSBpbiBEMyBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKaW5kZXggZmIwOWM4YS4uMjdlYWU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKQEAgLTE0MTksNyArMTQxOSw2IEBACiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgY3RybF9yZWcgPSAwOwotCXUzMiBzdGF0X3JlZyA9IDA7CiAKIAlody0+bWFjLmF1dG9uZWcgPSBmYWxzZTsKIApAQCAtMTQ0MywxOCArMTQ0MiwxMSBAQAogCWN0cmxfcmVnIHw9IChFMTAwMF9DVFJMX0ZSQ1NQRCB8IC8qIFNldCB0aGUgRm9yY2UgU3BlZWQgQml0ICovCiAJCSAgICAgRTEwMDBfQ1RSTF9GUkNEUFggfCAvKiBTZXQgdGhlIEZvcmNlIER1cGxleCBCaXQgKi8KIAkJICAgICBFMTAwMF9DVFJMX1NQRF8xMDAwIHwvKiBGb3JjZSBTcGVlZCB0byAxMDAwICovCi0JCSAgICAgRTEwMDBfQ1RSTF9GRCk7CSAvKiBGb3JjZSBEdXBsZXggdG8gRlVMTCAqLworCQkgICAgIEUxMDAwX0NUUkxfRkQgfAkgLyogRm9yY2UgRHVwbGV4IHRvIEZVTEwgKi8KKwkJICAgICBFMTAwMF9DVFJMX1NMVSk7CSAvKiBTZXQgbGluayB1cCBlbmFibGUgYml0ICovCiAKLQlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyICYmCi0JICAgIGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfbTg4KQorCWlmIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X204OCkKIAkJY3RybF9yZWcgfD0gRTEwMDBfQ1RSTF9JTE9TOyAvKiBJbnZlcnQgTG9zcyBvZiBTaWduYWwgKi8KLQllbHNlIHsKLQkJLyogU2V0IHRoZSBJTE9TIGJpdCBvbiB0aGUgZmliZXIgTmljIGlmIGhhbGYgZHVwbGV4IGxpbmsgaXMKLQkJICogZGV0ZWN0ZWQuICovCi0JCXN0YXRfcmVnID0gcmQzMihFMTAwMF9TVEFUVVMpOwotCQlpZiAoKHN0YXRfcmVnICYgRTEwMDBfU1RBVFVTX0ZEKSA9PSAwKQotCQkJY3RybF9yZWcgfD0gKEUxMDAwX0NUUkxfSUxPUyB8IEUxMDAwX0NUUkxfU0xVKTsKLQl9CiAKIAl3cjMyKEUxMDAwX0NUUkwsIGN0cmxfcmVnKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCBjYTg0MjE2Li4wM2FhOTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMTM1LDggKzEzNSw4IEBACiBzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50LCB1bnNpZ25lZCBjaGFyICopOwogc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCi1zdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICosIHBtX21lc3NhZ2VfdCk7CiAjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICosIHBtX21lc3NhZ2VfdCk7CiBzdGF0aWMgaW50IGlnYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKik7CiAjZW5kaWYKIHN0YXRpYyB2b2lkIGlnYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqKTsKQEAgLTQyMCw2ICs0MjAsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCiAJCW5ldGlmX25hcGlfZGVsKCZhZGFwdGVyLT5yeF9yaW5nW2ldLm5hcGkpOwogCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDA7CisJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IDA7CisKIAlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKIAlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKIH0KQEAgLTE0NzYsOSArMTQ3OSwxMCBAQAogCQkgbmV0ZGV2LT5uYW1lLAogCQkgKChody0+YnVzLnNwZWVkID09IGUxMDAwX2J1c19zcGVlZF8yNTAwKQogCQkgID8gIjIuNUdiL3MiIDogInVua25vd24iKSwKLQkJICgoaHctPmJ1cy53aWR0aCA9PSBlMTAwMF9idXNfd2lkdGhfcGNpZV94NCkKLQkJICA/ICJXaWR0aCB4NCIgOiAoaHctPmJ1cy53aWR0aCA9PSBlMTAwMF9idXNfd2lkdGhfcGNpZV94MSkKLQkJICA/ICJXaWR0aCB4MSIgOiAidW5rbm93biIpLAorCQkgKChody0+YnVzLndpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2llX3g0KSA/ICJXaWR0aCB4NCIgOgorCQkgIChody0+YnVzLndpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2llX3gyKSA/ICJXaWR0aCB4MiIgOgorCQkgIChody0+YnVzLndpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2llX3gxKSA/ICJXaWR0aCB4MSIgOgorCQkgICAidW5rbm93biIpLAogCQkgbmV0ZGV2LT5kZXZfYWRkcik7CiAKIAlpZ2JfcmVhZF9wYXJ0X251bShodywgJnBhcnRfbnVtKTsKQEAgLTUwNTYsNyArNTA2MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWdiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgX19pZ2Jfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTUxMTUsMTUgKzUxMTksOSBAQAogCQl3cjMyKEUxMDAwX1dVRkMsIDApOwogCX0KIAotCS8qIG1ha2Ugc3VyZSBhZGFwdGVyIGlzbid0IGFzbGVlcCBpZiBtYW5hZ2VhYmlsaXR5L3dvbCBpcyBlbmFibGVkICovCi0JaWYgKHd1ZmMgfHwgYWRhcHRlci0+ZW5fbW5nX3B0KSB7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOwotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7Ci0JfSBlbHNlIHsKKwkqZW5hYmxlX3dha2UgPSB3dWZjIHx8IGFkYXB0ZXItPmVuX21uZ19wdDsKKwlpZiAoISplbmFibGVfd2FrZSkKIAkJaWdiX3NodXRkb3duX2ZpYmVyX3NlcmRlc19saW5rXzgyNTc1KGh3KTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKLQl9CiAKIAkvKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcwogCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBpbiBjbG9zZSBhbmQgaXMgcmVkdW5kYW50LiAqLwpAQCAtNTEzMSwxMiArNTEyOSwyOSBAQAogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWludCByZXR2YWw7CisJYm9vbCB3YWtlOworCisJcmV0dmFsID0gX19pZ2Jfc2h1dGRvd24ocGRldiwgJndha2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAod2FrZSkgeworCQlwY2lfcHJlcGFyZV90b19zbGVlcChwZGV2KTsKKwl9IGVsc2UgeworCQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGlnYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTUxODksNyArNTIwNCwxNCBAQAogCiBzdGF0aWMgdm9pZCBpZ2Jfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JaWdiX3N1c3BlbmQocGRldiwgUE1TR19TVVNQRU5EKTsKKwlib29sIHdha2U7CisKKwlfX2lnYl9zaHV0ZG93bihwZGV2LCAmd2FrZSk7CisKKwlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpIHsKKwkJcGNpX3dha2VfZnJvbV9kMyhwZGV2LCB3YWtlKTsKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwppbmRleCBlZDI2NWE3Li5kZTRkYjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKQEAgLTQxMSw3ICs0MTEsOCBAQAogCiAJLyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIGF1dG9uZWcgb3Igbm90LiAqLwogCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZzcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKLQlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyICYmIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSkKKwlpZiAoIWh3LT5mYy5kaXNhYmxlX2ZjX2F1dG9uZWcgJiYgaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyICYmCisJICAgIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSkKIAkJcmV0X3ZhbCA9IGl4Z2JlX2ZjX2F1dG9uZWcoaHcpOwogCiAJaWYgKHJldF92YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCmluZGV4IDhjZmQzZmQuLjYzYWI2NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCkBAIC0xOTM3LDcgKzE5MzcsOCBAQAogCiAJLyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIGF1dG9uZWcgb3Igbm90LiAqLwogCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZzcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKLQlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyICYmIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSkKKwlpZiAoIWh3LT5mYy5kaXNhYmxlX2ZjX2F1dG9uZWcgJiYgaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyICYmCisJICAgIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSkKIAkJcmV0X3ZhbCA9IGl4Z2JlX2ZjX2F1dG9uZWcoaHcpOwogCiAJaWYgKHJldF92YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCmluZGV4IDdlOTRkNmQuLjI0ZjczZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCkBAIC05NiwxNCArOTYsMTEgQEAKICNkZWZpbmUgSVhHQkVfV1JJVEVfRkxVU0goYSkgSVhHQkVfUkVBRF9SRUcoYSwgSVhHQkVfU1RBVFVTKQogCiAjaWZkZWYgREVCVUcKK2V4dGVybiBjaGFyICppeGdiZV9nZXRfaHdfZGV2X25hbWUoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiAjZGVmaW5lIGh3X2RiZyhodywgZm9ybWF0LCBhcmcuLi4pIFwKLXByaW50ayhLRVJOX0RFQlVHLCAiJXM6ICIgZm9ybWF0LCBpeGdiZV9nZXRfaHdfZGV2X25hbWUoaHcpLCAjI2FyZyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCwgaXhnYmVfZ2V0X2h3X2Rldl9uYW1lKGh3KSwgIyNhcmcpCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCi1od19kYmcoc3RydWN0IGl4Z2JlX2h3ICpodywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0JcmV0dXJuIDA7Ci19CisjZGVmaW5lIGh3X2RiZyhodywgZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKICNlbmRpZiAvKiBJWEdCRV9DT01NT04gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKaW5kZXggMGE4NzMxZi4uYmQwYTBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKQEAgLTkwLDYgKzkwLDggQEAKIAkJCXNyY19kY2JfY2ZnLT50Y19jb25maWdbaSAtIERDQl9QRkNfVVBfQVRUUl8wXS5kY2JfcGZjOwogCX0KIAorCWRzdF9kY2JfY2ZnLT5wZmNfbW9kZV9lbmFibGUgPSBzcmNfZGNiX2NmZy0+cGZjX21vZGVfZW5hYmxlOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5OCw4ICszMDAsMTAgQEAKIAogCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy50Y19jb25maWdbcHJpb3JpdHldLmRjYl9wZmMgPSBzZXR0aW5nOwogCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcudGNfY29uZmlnW3ByaW9yaXR5XS5kY2JfcGZjICE9Ci0JICAgIGFkYXB0ZXItPmRjYl9jZmcudGNfY29uZmlnW3ByaW9yaXR5XS5kY2JfcGZjKQorCSAgICBhZGFwdGVyLT5kY2JfY2ZnLnRjX2NvbmZpZ1twcmlvcml0eV0uZGNiX3BmYykgewogCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfUEZDOworCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcucGZjX21vZGVfZW5hYmxlID0gdHJ1ZTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2dldF9wZmNfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwppbmRleCAxOGVjYmE3Li5hYWZjMTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCkBAIC0xMjksNiArMTI5LDE1IEBACiAJCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbDsKIAkJaWYgKGh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkICYgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkKIAkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisJCS8qCisJCSAqIEl0J3MgcG9zc2libGUgdGhhdCBwaHkuYXV0b25lZ19hZHZlcnRpc2VkIG1heSBub3QgYmUKKwkJICogc2V0IHlldC4gIElmIHNvIGRpc3BsYXkgd2hhdCB0aGUgZGVmYXVsdCB3b3VsZCBiZSAtCisJCSAqIGJvdGggMUcgYW5kIDEwRyBzdXBwb3J0ZWQuCisJCSAqLworCQlpZiAoIShlY21kLT5hZHZlcnRpc2luZyAmIChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwpKSkKKwkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpOwogCiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwogCX0gZWxzZSBpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lKSB7CkBAIC0yMjUsNyArMjM0LDE2IEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlwYXVzZS0+YXV0b25lZyA9IChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX2Z1bGwgPyAxIDogMCk7CisJLyoKKwkgKiBGbG93IENvbnRyb2wgQXV0b25lZyBpc24ndCBvbiBpZgorCSAqICAtIHdlIGRpZG4ndCBhc2sgZm9yIGl0IE9SCisJICogIC0gaXQgZmFpbGVkLCB3ZSBrbm93IHRoaXMgYnkgdHggJiByeCBiZWluZyBvZmYKKwkgKi8KKwlpZiAoaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyB8fAorCSAgICAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19ub25lKSkKKwkJcGF1c2UtPmF1dG9uZWcgPSAwOworCWVsc2UKKwkJcGF1c2UtPmF1dG9uZWcgPSAxOwogCiAJaWYgKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gaXhnYmVfZmNfcnhfcGF1c2UpIHsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKQEAgLTI0Myw4ICsyNjEsMTIgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCWlmICgocGF1c2UtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHx8Ci0JICAgIChwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKSkKKwlpZiAocGF1c2UtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCisJCWh3LT5mYy5kaXNhYmxlX2ZjX2F1dG9uZWcgPSB0cnVlOworCWVsc2UKKwkJaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyA9IGZhbHNlOworCisJaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpCiAJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CiAJZWxzZSBpZiAocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCiAJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOwpAQCAtNzEyLDkgKzczNCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGl4Z2JlX3JpbmcgKnRlbXBfcmluZzsKKwlzdHJ1Y3QgaXhnYmVfcmluZyAqdGVtcF90eF9yaW5nLCAqdGVtcF9yeF9yaW5nOwogCWludCBpLCBlcnI7CiAJdTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50OworCWJvb2wgbmVlZF91cGRhdGUgPSBmYWxzZTsKIAogCWlmICgocmluZy0+cnhfbWluaV9wZW5kaW5nKSB8fCAocmluZy0+cnhfanVtYm9fcGVuZGluZykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzMzLDgwICs3NTYsOTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JdGVtcF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fdHhfcXVldWVzLAotCSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0ZW1wX3JpbmcpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCW1zbGVlcCgxKTsKIAotCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZy0+Y291bnQpIHsKKwl0ZW1wX3R4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRlbXBfdHhfcmluZykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9zZXR1cDsKKwl9CisKKwlpZiAobmV3X3R4X2NvdW50ICE9IGFkYXB0ZXItPnR4X3JpbmdfY291bnQpIHsKKwkJbWVtY3B5KHRlbXBfdHhfcmluZywgYWRhcHRlci0+dHhfcmluZywKKwkJICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQkJdGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OwotCQkJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsICZ0ZW1wX3JpbmdbaV0pOworCQkJdGVtcF90eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OworCQkJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfdHhfcmluZ1tpXSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJd2hpbGUgKGkpIHsKIAkJCQkJaS0tOwogCQkJCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcF9yaW5nW2ldKTsKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfdHhfcmluZ1tpXSk7CiAJCQkJfQogCQkJCWdvdG8gZXJyX3NldHVwOwogCQkJfQotCQkJdGVtcF9yaW5nW2ldLnZfaWR4ID0gYWRhcHRlci0+dHhfcmluZ1tpXS52X2lkeDsKKwkJCXRlbXBfdHhfcmluZ1tpXS52X2lkeCA9IGFkYXB0ZXItPnR4X3JpbmdbaV0udl9pZHg7CiAJCX0KLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKLQkJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKLQkJaXhnYmVfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7Ci0JCWl4Z2JlX25hcGlfZGVsX2FsbChhZGFwdGVyKTsKLQkJSU5JVF9MSVNUX0hFQUQoJm5ldGRldi0+bmFwaV9saXN0KTsKLQkJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7Ci0JCWFkYXB0ZXItPnR4X3JpbmcgPSB0ZW1wX3Jpbmc7Ci0JCXRlbXBfcmluZyA9IE5VTEw7Ci0JCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CisJCW5lZWRfdXBkYXRlID0gdHJ1ZTsKIAl9CiAKLQl0ZW1wX3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCi0JICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRlbXBfcmluZykgewotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fb3BlbihuZXRkZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKKwl0ZW1wX3J4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoKCF0ZW1wX3J4X3JpbmcpICYmIChuZWVkX3VwZGF0ZSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsICZ0ZW1wX3R4X3JpbmdbaV0pOworCQlrZnJlZSh0ZW1wX3R4X3JpbmcpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9zZXR1cDsKIAl9CiAKLQlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmctPmNvdW50KSB7CisJaWYgKG5ld19yeF9jb3VudCAhPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50KSB7CisJCW1lbWNweSh0ZW1wX3J4X3JpbmcsIGFkYXB0ZXItPnJ4X3JpbmcsCisJCSAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJCXRlbXBfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKLQkJCWVyciA9IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmdGVtcF9yaW5nW2ldKTsKKwkJCXRlbXBfcnhfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKKwkJCWVyciA9IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3J4X3JpbmdbaV0pOwogCQkJaWYgKGVycikgewogCQkJCXdoaWxlIChpKSB7CiAJCQkJCWktLTsKIAkJCQkJaXhnYmVfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfcmluZ1tpXSk7CisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAmdGVtcF9yeF9yaW5nW2ldKTsKIAkJCQl9CiAJCQkJZ290byBlcnJfc2V0dXA7CiAJCQl9Ci0JCQl0ZW1wX3JpbmdbaV0udl9pZHggPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnZfaWR4OworCQkJdGVtcF9yeF9yaW5nW2ldLnZfaWR4ID0gYWRhcHRlci0+cnhfcmluZ1tpXS52X2lkeDsKIAkJfQotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChuZXRkZXYpOwotCQlpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKLQkJaXhnYmVfbmFwaV9kZWxfYWxsKGFkYXB0ZXIpOwotCQlJTklUX0xJU1RfSEVBRCgmbmV0ZGV2LT5uYXBpX2xpc3QpOwotCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKLQkJYWRhcHRlci0+cnhfcmluZyA9IHRlbXBfcmluZzsKLQkJdGVtcF9yaW5nID0gTlVMTDsKKwkJbmVlZF91cGRhdGUgPSB0cnVlOworCX0KIAotCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OworCS8qIGlmIHJpbmdzIG5lZWQgdG8gYmUgdXBkYXRlZCwgaGVyZSdzIHRoZSBwbGFjZSB0byBkbyBpdCBpbiBvbmUgc2hvdCAqLworCWlmIChuZWVkX3VwZGF0ZSkgeworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJaXhnYmVfZG93bihhZGFwdGVyKTsKKworCQkvKiB0eCAqLworCQlpZiAobmV3X3R4X2NvdW50ICE9IGFkYXB0ZXItPnR4X3JpbmdfY291bnQpIHsKKwkJCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOworCQkJYWRhcHRlci0+dHhfcmluZyA9IHRlbXBfdHhfcmluZzsKKwkJCXRlbXBfdHhfcmluZyA9IE5VTEw7CisJCQlhZGFwdGVyLT50eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OworCQl9CisKKwkJLyogcnggKi8KKwkJaWYgKG5ld19yeF9jb3VudCAhPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50KSB7CisJCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKKwkJCWFkYXB0ZXItPnJ4X3JpbmcgPSB0ZW1wX3J4X3Jpbmc7CisJCQl0ZW1wX3J4X3JpbmcgPSBOVUxMOworCQkJYWRhcHRlci0+cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKKwkJfQogCX0KIAogCS8qIHN1Y2Nlc3MhICovCiAJZXJyID0gMDsKLWVycl9zZXR1cDoKLQlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKLQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fb3BlbihuZXRkZXYpOworCQlpeGdiZV91cChhZGFwdGVyKTsKIAorZXJyX3NldHVwOgogCWNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDc5YWE4MTEuLjI4NmVjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTE4NywxNSArMTg3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdHhfYnVmZmVyX2luZm8pCiB7Ci0JaWYgKHR4X2J1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgdHhfYnVmZmVyX2luZm8tPmRtYSwKLQkJICAgICAgICAgICAgICAgdHhfYnVmZmVyX2luZm8tPmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSAwOwotCX0KKwl0eF9idWZmZXJfaW5mby0+ZG1hID0gMDsKIAlpZiAodHhfYnVmZmVyX2luZm8tPnNrYikgeworCQlza2JfZG1hX3VubWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHR4X2J1ZmZlcl9pbmZvLT5za2IsCisJCSAgICAgICAgICAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHR4X2J1ZmZlcl9pbmZvLT5za2IpOwogCQl0eF9idWZmZXJfaW5mby0+c2tiID0gTlVMTDsKIAl9CisJdHhfYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSAwOwogCS8qIHR4X2J1ZmZlcl9pbmZvIG11c3QgYmUgY29tcGxldGVseSBzZXQgdXAgaW4gdGhlIHRyYW5zbWl0IHBhdGggKi8KIH0KIApAQCAtMjA0LDE1ICsyMDMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBlb3ApCiB7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgaGVhZCwgdGFpbDsKIAogCS8qIERldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKIAkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBlb3AgKi8KLQloZWFkID0gSVhHQkVfUkVBRF9SRUcoaHcsIHR4X3JpbmctPmhlYWQpOwotCXRhaWwgPSBJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+dGFpbCk7CiAJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQlpZiAoKGhlYWQgIT0gdGFpbCkgJiYKLQkgICAgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICYmCisJaWYgKHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCAmJgogCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArIEhaKSAmJgogCSAgICAhKElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVEZDUykgJiBJWEdCRV9URkNTX1RYT0ZGKSkgewogCQkvKiBkZXRlY3RlZCBUeCB1bml0IGhhbmcgKi8KQEAgLTIyNyw3ICsyMjIsOCBAQAogCQkJIiAgdGltZV9zdGFtcCAgICAgICAgICAgPCVseD5cbiIKIAkJCSIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iLAogCQkJdHhfcmluZy0+cXVldWVfaW5kZXgsCi0JCQloZWFkLCB0YWlsLAorCQkJSVhHQkVfUkVBRF9SRUcoaHcsIHR4X3JpbmctPmhlYWQpLAorCQkJSVhHQkVfUkVBRF9SRUcoaHcsIHR4X3JpbmctPnRhaWwpLAogCQkJdHhfcmluZy0+bmV4dF90b191c2UsIGVvcCwKIAkJCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCwgamlmZmllcyk7CiAJCXJldHVybiB0cnVlOwpAQCAtMjkzNCw2ICsyOTMwLDcgQEAKICAqKi8KIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGVyciA9IDA7CiAJaW50IHZlY3Rvciwgdl9idWRnZXQ7CiAKQEAgLTI5NDgsMTIgKzI5NDUsMTIgQEAKIAogCS8qCiAJICogQXQgdGhlIHNhbWUgdGltZSwgaGFyZHdhcmUgY2FuIG9ubHkgc3VwcG9ydCBhIG1heGltdW0gb2YKLQkgKiBNQVhfTVNJWF9DT1VOVCB2ZWN0b3JzLiAgV2l0aCBmZWF0dXJlcyBzdWNoIGFzIFJTUyBhbmQgVk1EcSwKLQkgKiB3ZSBjYW4gZWFzaWx5IHJlYWNoIHVwd2FyZHMgb2YgNjQgUnggZGVzY3JpcHRvciBxdWV1ZXMgYW5kCi0JICogMzIgVHggcXVldWVzLiAgVGh1cywgd2UgY2FwIGl0IG9mZiBpbiB0aG9zZSByYXJlIGNhc2VzIHdoZXJlCi0JICogdGhlIGNwdSBjb3VudCBhbHNvIGV4Y2VlZHMgb3VyIHZlY3RvciBsaW1pdC4KKwkgKiBody5tYWMtPm1heF9tc2l4X3ZlY3RvcnMgdmVjdG9ycy4gIFdpdGggZmVhdHVyZXMKKwkgKiBzdWNoIGFzIFJTUyBhbmQgVk1EcSwgd2UgY2FuIGVhc2lseSBzdXJwYXNzIHRoZSBudW1iZXIgb2YgUnggYW5kIFR4CisJICogZGVzY3JpcHRvciBxdWV1ZXMgc3VwcG9ydGVkIGJ5IG91ciBkZXZpY2UuICBUaHVzLCB3ZSBjYXAgaXQgb2ZmIGluCisJICogdGhvc2UgcmFyZSBjYXNlcyB3aGVyZSB0aGUgY3B1IGNvdW50IGFsc28gZXhjZWVkcyBvdXIgdmVjdG9yIGxpbWl0LgogCSAqLwotCXZfYnVkZ2V0ID0gbWluKHZfYnVkZ2V0LCBNQVhfTVNJWF9DT1VOVCk7CisJdl9idWRnZXQgPSBtaW4odl9idWRnZXQsIChpbnQpaHctPm1hYy5tYXhfbXNpeF92ZWN0b3JzKTsKIAogCS8qIEEgZmFpbHVyZSBpbiBNU0ktWCBlbnRyeSBhbGxvY2F0aW9uIGlzbid0IGZhdGFsLCBidXQgaXQgZG9lcwogCSAqIG1lYW4gd2UgZGlzYWJsZSBNU0ktWCBjYXBhYmlsaXRpZXMgb2YgdGhlIGFkYXB0ZXIuICovCkBAIC0zMTY5LDExICszMTY2LDEzIEBACiAjZW5kaWYKIAogCS8qIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmdzICovCi0JaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKKwlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19mdWxsOworCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19mdWxsOwkvKiBpbml0IGZvciBldGh0b29sIG91dHB1dCAqLwogCWh3LT5mYy5oaWdoX3dhdGVyID0gSVhHQkVfREVGQVVMVF9GQ1JUSDsKIAlody0+ZmMubG93X3dhdGVyID0gSVhHQkVfREVGQVVMVF9GQ1JUTDsKIAlody0+ZmMucGF1c2VfdGltZSA9IElYR0JFX0RFRkFVTFRfRkNQQVVTRTsKIAlody0+ZmMuc2VuZF94b24gPSB0cnVlOworCWh3LT5mYy5kaXNhYmxlX2ZjX2F1dG9uZWcgPSBmYWxzZTsKIAogCS8qIGVuYWJsZSBpdHIgYnkgZGVmYXVsdCBpbiBkeW5hbWljIG1vZGUgKi8KIAlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDE7CkBAIC0zNDg5LDEwICszNDg4LDEwIEBACiAJaXhnYmVfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogCWl4Z2JlX2ZyZWVfaXJxKGFkYXB0ZXIpOwogZXJyX3JlcV9pcnE6Ci0JaXhnYmVfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOwogZXJyX3NldHVwX3J4OgotCWl4Z2JlX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpeGdiZV9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CiBlcnJfc2V0dXBfdHg6CisJaXhnYmVfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogCiAJcmV0dXJuIGVycjsKQEAgLTQxNjMsMzIgKzQxNjIsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBmaXJzdCkKIHsKIAlzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIHNpemUsIGNvdW50ID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCXVuc2lnbmVkIGludCBmOwotCi0JbGVuIC09IHNrYi0+ZGF0YV9sZW47CisJZG1hX2FkZHJfdCAqbWFwOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCisJaWYgKHNrYl9kbWFfbWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHNrYiwgRE1BX1RPX0RFVklDRSkpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVFggRE1BIG1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCiAJd2hpbGUgKGxlbikgewogCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKIAkJc2l6ZSA9IG1pbihsZW4sICh1aW50KUlYR0JFX01BWF9EQVRBX1BFUl9UWEQpOwogCiAJCXR4X2J1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYi0+ZGF0YSArIG9mZnNldCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gbWFwWzBdICsgb2Zmc2V0OwogCQl0eF9idWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQlsZW4gLT0gc2l6ZTsKIAkJb2Zmc2V0ICs9IHNpemU7CiAJCWNvdW50Kys7Ci0JCWkrKzsKLQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCi0JCQlpID0gMDsKKworCQlpZiAobGVuKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwkJfQogCX0KIAogCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CkBAIC00MTk2LDMzICs0MjAyLDI3IEBACiAKIAkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZdOwogCQlsZW4gPSBmcmFnLT5zaXplOwotCQlvZmZzZXQgPSBmcmFnLT5wYWdlX29mZnNldDsKKwkJb2Zmc2V0ID0gMDsKIAogCQl3aGlsZSAobGVuKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwogCQkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgKHVpbnQpSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCk7CiAKIAkJCXR4X2J1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkJdHhfYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnLT5wYWdlLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJdHhfYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAJCQl0eF9idWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCQl0eF9idWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCQkJaSsrOwotCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCi0JCQkJaSA9IDA7CiAJCX0KIAl9Ci0JaWYgKGkgPT0gMCkKLQkJaSA9IHR4X3JpbmctPmNvdW50IC0gMTsKLQllbHNlCi0JCWkgPSBpIC0gMTsKKwogCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKIAl0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tmaXJzdF0ubmV4dF90b193YXRjaCA9IGk7CiAKQEAgLTQzODgsMTMgKzQzODgsMTkgQEAKIAkgICAgICAgICAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCiAJCXR4X2ZsYWdzIHw9IElYR0JFX1RYX0ZMQUdTX0NTVU07CiAKLQlpeGdiZV90eF9xdWV1ZShhZGFwdGVyLCB0eF9yaW5nLCB0eF9mbGFncywKLQkgICAgICAgICAgICAgICBpeGdiZV90eF9tYXAoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCksCi0JICAgICAgICAgICAgICAgc2tiLT5sZW4sIGhkcl9sZW4pOworCWNvdW50ID0gaXhnYmVfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QpOwogCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJaWYgKGNvdW50KSB7CisJCWl4Z2JlX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLCBjb3VudCwgc2tiLT5sZW4sCisJCSAgICAgICAgICAgICAgIGhkcl9sZW4pOworCQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJaXhnYmVfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIERFU0NfTkVFREVEKTsKIAotCWl4Z2JlX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBERVNDX05FRURFRCk7CisJfSBlbHNlIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZmlyc3RdLnRpbWVfc3RhbXAgPSAwOworCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IGZpcnN0OworCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC00OTg3LDggKzQ5OTMsMjAgQEAKIAogCXJldHVybiByZXRfdmFsID8gTk9USUZZX0JBRCA6IE5PVElGWV9ET05FOwogfQotI2VuZGlmIC8qIENPTkZJR19JWEdCRV9EQ0EgKi8KIAorI2VuZGlmIC8qIENPTkZJR19JWEdCRV9EQ0EgKi8KKyNpZmRlZiBERUJVRworLyoqCisgKiBpeGdiZV9nZXRfaHdfZGV2X25hbWUgLSByZXR1cm4gZGV2aWNlIG5hbWUgc3RyaW5nCisgKiB1c2VkIGJ5IGhhcmR3YXJlIGxheWVyIHRvIHByaW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICoqLworY2hhciAqaXhnYmVfZ2V0X2h3X2Rldl9uYW1lKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwlyZXR1cm4gYWRhcHRlci0+bmV0ZGV2LT5uYW1lOworfQorCisjZW5kaWYKIG1vZHVsZV9leGl0KGl4Z2JlX2V4aXRfbW9kdWxlKTsKIAogLyogaXhnYmVfbWFpbi5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKaW5kZXggMmIyZWNiYS4uMDMwZmYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaApAQCAtMjAwNSw2ICsyMDA1LDcgQEAKIAl1MTYgcGF1c2VfdGltZTsgLyogRmxvdyBDb250cm9sIFBhdXNlIHRpbWVyICovCiAJYm9vbCBzZW5kX3hvbjsgLyogRmxvdyBjb250cm9sIHNlbmQgWE9OICovCiAJYm9vbCBzdHJpY3RfaWVlZTsgLyogU3RyaWN0IElFRUUgbW9kZSAqLworCWJvb2wgZGlzYWJsZV9mY19hdXRvbmVnOyAvKiBUdXJuIG9mZiBhdXRvbmVnIEZDIG1vZGUgKi8KIAllbnVtIGl4Z2JlX2ZjX21vZGUgY3VycmVudF9tb2RlOyAvKiBGQyBtb2RlIGluIGVmZmVjdCAqLwogCWVudW0gaXhnYmVfZmNfbW9kZSByZXF1ZXN0ZWRfbW9kZTsgLyogRkMgbW9kZSByZXF1ZXN0ZWQgYnkgY2FsbGVyICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKaW5kZXggOWY2NjQ0YS4uMzAzYzIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCkBAIC01MDUsNyArNTA1LDcgQEAKIAogc3RhdGljIHZvaWQgbWx4NF9lbl9kb19nZXRfc3RhdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGVsYXksIHN0cnVjdCBtbHg0X2VuX3ByaXYsCiAJCQkJCQkgc3RhdHNfdGFzayk7CiAJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwppbmRleCBhNDEzMGU3Li43ZTQwNzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAogdm9pZCBtbHg0X2VuX3J4X3JlZmlsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkZWxheSwgc3RydWN0IG1seDRfZW5fcHJpdiwKIAkJCQkJCSByZWZpbGxfdGFzayk7CiAJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYyBiL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYwppbmRleCA2ZDUwODllLi5mMzZhZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogc3RhdGljIHZvaWQgbWx4NF9zZW5zZV9wb3J0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheSA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSBjb250YWluZXJfb2YoZGVsYXksIHN0cnVjdCBtbHg0X3NlbnNlLAogCQkJCQkJc2Vuc2VfcG9sbCk7CiAJc3RydWN0IG1seDRfZGV2ICpkZXYgPSBzZW5zZS0+ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL29zaXRlY2guaCBiL2RyaXZlcnMvbmV0L3BjbWNpYS9vc2l0ZWNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMjZlZmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL29zaXRlY2guaAorKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZmlybXdhcmUgb2YgU2V2ZW4gb2YgRGlhbW9uZHMgZnJvbSBPU0lURUNILgotICAgIChTcGVjaWFsIHRoYW5rcyB0byBLZXZpbiBNYWNQaGVyc29uIG9mIE9TSVRFQ0gpCi0KLSAgICBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCi0gICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KLSovCi0KLSAgICBzdGF0aWMgY29uc3QgdV9jaGFyIF9fWGlsaW54N09EW10gPSB7Ci0gICAgMHhGRiwgMHgwNCwgMHhBMCwgMHgzNiwgMHhGMywgMHhFQywgMHhGRiwgMHhGRiwgMHhGRiwgMHhERiwgMHhGQiwgMHhGRiwKLSAgICAweEYzLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEVGLCAweDNGLCAweEZGLCAweEY3LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweDdGLCAweEZFLCAweEZGLAotICAgIDB4Q0UsIDB4RkUsIDB4RkUsIDB4RkUsIAotICAgIDB4RkUsIDB4REUsIDB4QkQsIDB4REQsIDB4RkQsIDB4RkYsIDB4RkQsIDB4Q0YsIDB4RjcsIDB4QkYsIDB4N0YsIDB4RkYsCi0gICAgMHg3RiwgMHgzRiwgMHhGRSwgMHhCRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhCQywgMHhGRiwgMHhGRiwgMHhCRCwgMHhCNSwgMHg3RiwgMHg3RiwgMHhCRiwgMHhCRiwKLSAgICAweDdGLCAweEZGLCAweEVGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZCLCAweEZGLCAweEY3LCAweEY3LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweERFLAotICAgIDB4RkUsIDB4RkUsIDB4RkEsIDB4REUsIAotICAgIDB4QkQsIDB4RkQsIDB4RUQsIDB4RkQsIDB4RkQsIDB4Q0YsIDB4RUYsIDB4RUYsIDB4RUYsIDB4RUYsIDB4QzcsIDB4REYsCi0gICAgMHhERiwgMHhERiwgMHhERiwgMHhERiwgCi0gICAgMHhGRiwgMHg3RSwgMHhGRSwgMHhGRCwgMHg3RCwgMHg2RCwgMHhFRSwgMHhGRSwgMHg3QywgMHhGQiwgMHhGNCwgMHhGQiwKLSAgICAweENGLCAweERCLCAweERGLCAweEZGLCAKLSAgICAweEZGLCAweEJCLCAweDdGLCAweEZGLCAweDdGLCAweEZGLCAweEY3LCAweEZGLCAweDlFLCAweEJGLCAweDNCLCAweEJGLAotICAgIDB4QkYsIDB4N0YsIDB4N0YsIDB4N0YsIAotICAgIDB4N0UsIDB4NkYsIDB4REYsIDB4RUYsIDB4RjUsIDB4RjYsIDB4RkQsIDB4RjYsIDB4RjUsIDB4RUQsIDB4RUIsIDB4RkYsCi0gICAgMHhFRiwgMHhFRiwgMHhFRiwgMHg3RSwgCi0gICAgMHg3RiwgMHg3RiwgMHg2RiwgMHg3RiwgMHhGRiwgMHhGRSwgMHhGRSwgMHhGRSwgMHhGRSwgMHhGRSwgMHhFRiwgMHhCRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEJDLCAweDFGLCAweDFGLCAweEVFLCAweEZGLCAweEJDLAotICAgIDB4QjcsIDB4RkYsIDB4REYsIDB4RkYsIAotICAgIDB4REYsIDB4RUYsIDB4M0IsIDB4RTMsIDB4RDMsIDB4RkYsIDB4RkIsIDB4RkYsIDB4RkYsIDB4REYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhCQSwgMHhCRiwgMHgyRCwgCi0gICAgMHhEQiwgMHhCRCwgMHhGRCwgMHhEQiwgMHhERiwgMHhGQSwgMHhGQiwgMHhGRiwgMHhFRiwgMHhGQiwgMHhEQiwgMHhGMywKLSAgICAweEZGLCAweERGLCAweEZELCAweDdGLCAKLSAgICAweEVGLCAweEZCLCAweEZGLCAweEZGLCAweEJFLCAweEJGLCAweDI3LCAweEJBLCAweEZFLCAweEZCLCAweERGLCAweEZGLAotICAgIDB4RjYsIDB4RkYsIDB4RkYsIDB4RUYsIAotICAgIDB4RkIsIDB4REIsIDB4RjMsIDB4RDksIDB4OUEsIDB4M0YsIDB4RkYsIDB4QUYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4QkUsCi0gICAgMHgzRiwgMHgzNywgMHhCRCwgMHg5NiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhBRSwgMHhGQiwgMHhGMywgMHhGMywgMHhFQiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEY3LCAweEZBLCAweEJDLCAweEFFLCAweEZFLCAweEJFLCAweEZFLCAweEJCLCAweDdGLCAweEZELCAweEZGLAotICAgIDB4N0YsIDB4RUYsIDB4RjcsIDB4RkIsIAotICAgIDB4QkIsIDB4RDcsIDB4RjcsIDB4N0YsIDB4RkYsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RjcsIDB4QkMsIDB4RUQsIDB4RkQsCi0gICAgMHhCRCwgMHg5RCwgMHg3RCwgMHg3QiwgCi0gICAgMHhGQiwgMHg3QiwgMHg3QiwgMHhGQiwgMHhBRiwgMHhGRiwgMHhGRSwgMHhGRCwgMHhGRCwgMHhGRSwgMHhGRSwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEY3LCAKLSAgICAweEFBLCAweEI5LCAweEJGLCAweDhGLCAweEJGLCAweERGLCAweEZGLCAweDdGLCAweEZGLCAweEZGLCAweDdGLCAweENGLAotICAgIDB4RkIsIDB4RUIsIDB4Q0IsIDB4RUIsIAotICAgIDB4RUUsIDB4RkYsIDB4RkYsIDB4RDcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0UsIDB4MzMsIDB4M0YsIDB4MUMsIDB4N0MsCi0gICAgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhDRiwgMHhEMywgMHhGMywgMHhFMywgMHhGMywgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEVCLCAweEZFLCAweDM1LCAKLSAgICAweDNGLCAweDNELCAweEZELCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEZGLCAweEVGLCAweDZGLCAweEUzLAotICAgIDB4RTMsIDB4RTMsIDB4RUYsIDB4RkYsIAotICAgIDB4RkYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4RkUsIDB4M0UsIDB4NUUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgCi0gICAgMHhBRiwgMHhDRiwgMHhGMiwgMHhDQiwgMHhDRiwgMHg4RSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwKLSAgICAweEZDLCAweDNFLCAweDFGLCAweDlFLCAKLSAgICAweEFELCAweEZELCAweEZGLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEIzLCAweEY3LCAweEU3LAotICAgIDB4RjcsIDB4RkEsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUUsIDB4RUIsIDB4QUIsIDB4QUYsIDB4OUYsIDB4RTMsIDB4N0YsIDB4RkYsIDB4REUsCi0gICAgMHhGRiwgMHg3RiwgMHhFRSwgMHhGRiwgCi0gICAgMHhGRiwgMHhGQiwgMHgzQSwgMHhGQSwgMHhGRiwgMHhGMiwgMHg3NywgMHhGRiwgMHhGRiwgMHhGNywgMHhGRSwgMHhGRiwKLSAgICAweEZFLCAweEJELCAweEFFLCAweERFLCAKLSAgICAweDdELCAweDdELCAweEZELCAweEZGLCAweEJGLCAweEVFLCAweEZGLCAweEZELCAweEZGLCAweERCLCAweEZCLCAweEZGLAotICAgIDB4RjcsIDB4RUYsIDB4RkIsIDB4RkYsIAotICAgIDB4RkYsIDB4RkUsIDB4RkYsIDB4MkQsIDB4QUYsIDB4QjksIDB4RkQsIDB4NzksIDB4RkIsIDB4RkEsIDB4RkYsIDB4QkYsCi0gICAgMHhFRiwgMHhGRiwgMHhGRiwgMHg5MSwgCi0gICAgMHhGQSwgMHhGQiwgMHhERiwgMHhGNywgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGQywgMHhDRiwgMHgzNywgMHhCRiwKLSAgICAweEJGLCAweEZGLCAweDdGLCAweDdGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEFGLCAweEZGLCAweEZGLCAweEYzLCAweEZCLCAweEZCLCAweEZGLCAweEY1LCAweEVGLAotICAgIDB4RkYsIDB4RkYsIDB4RjcsIDB4RkEsIAotICAgIDB4RkYsIDB4RkYsIDB4RUUsIDB4RkEsIDB4RkUsIDB4RkIsIDB4NTUsIDB4REQsIDB4RkYsIDB4N0YsIDB4QUYsIDB4RkUsCi0gICAgMHhGRiwgMHhGQiwgMHhGQiwgMHhGNSwgCi0gICAgMHhGRiwgMHhGNywgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRSwgMHhCRCwgMHhCRCwgMHhCRCwgMHhCRCwgMHg3RCwKLSAgICAweDdCLCAweDdCLCAweDdCLCAweDdCLCAKLSAgICAweEZCLCAweEFFLCAweEZGLCAweEZELCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RjcsIDB4REEsIDB4QjcsIDB4NjEsIAotICAgIDB4RkYsIDB4QjksIDB4NTksIDB4RjMsIDB4NzMsIDB4RjMsIDB4REYsIDB4N0YsIDB4NkYsIDB4REYsIDB4RUYsIDB4RjcsCi0gICAgMHhFQiwgMHhFQiwgMHhENywgMHhGRiwgCi0gICAgMHhENywgMHhGRiwgMHhGRiwgMHhGNywgMHhGRSwgMHg3RiwgMHhGQiwgMHgzRSwgMHgzOCwgMHg3MywgMHhGNiwgMHg3RiwKLSAgICAweEZDLCAweEZGLCAweEZGLCAweENGLCAKLSAgICAweEZGLCAweEI3LCAweEZCLCAweEIzLCAweEIzLCAweDY3LCAweEZGLCAweEU3LCAweEZELCAweEZGLCAweEVGLCAweEY2LAotICAgIDB4N0YsIDB4QjcsIDB4QkMsIDB4RjUsIAotICAgIDB4N0IsIDB4RjYsIDB4RjcsIDB4RjUsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4RjcsIDB4RkYsIDB4RjcsIDB4Q0UsCi0gICAgMHhFNywgMHhGRiwgMHg5RiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGNSwgMHhGRSwgMHg3RCwgMHhGRiwgMHg1RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEVGLCAweEZGLCAweEY2LCAKLSAgICAweENCLCAweERCLCAweEVFLCAweEZFLCAweEZGLCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweDdGLCAweEJFLAotICAgIDB4MUUsIDB4M0UsIDB4RkUsIDB4RkYsIAotICAgIDB4N0QsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RUYsIDB4QkYsIDB4RTcsIDB4RkYsIDB4RTMsIDB4RTMsIDB4RkYsIDB4REYsCi0gICAgMHhFNywgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhCOCwgMHhFRiwgMHhCNywgMHgyRiwgMHhFRSwgMHhGRiwgMHhERiwgMHhGRiwgMHhCRiwgMHhGRiwgMHg3RiwgMHhFRiwKLSAgICAweEVCLCAweEJGLCAweEEzLCAweEQzLCAKLSAgICAweEZGLCAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY3LCAweEJFLCAweEZELCAweDNGLCAweENGLCAweEZELAotICAgIDB4RkIsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4QUYsIDB4RkIsIDB4QkYsIDB4QkIsIDB4QkYsIDB4REIsIDB4RkQsIDB4RkIsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHgzRSwgMHhGRSwgCi0gICAgMHgzRiwgMHhCQSwgMHhCQSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGRiwgMHhFRiwgMHhDMywgMHg3RiwKLSAgICAweEIyLCAweDlCLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZFLCAweEZGLCAweEZGLCAweDNDLCAweEZGLCAweDNGLCAweDNDLCAweEZGLCAweEZFLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4QUYsIDB4RjMsIDB4RkUsIDB4RjMsIDB4RTMsIDB4RUIsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkIsIDB4RkYsIDB4RjcsCi0gICAgMHg5QSwgMHhGRSwgMHhBRiwgMHg5RSwgCi0gICAgMHhCRSwgMHhGRSwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHg3QiwgMHhFRiwgMHhGNywgMHhCRiwgMHhGQiwgMHhGQiwKLSAgICAweEZCLCAweEZGLCAweEZGLCAweDdGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJDLCAweEJELCAweEZELCAweEJELCAweERELCAweDdELCAweDdCLCAweDdCLCAweDdCLAotICAgIDB4N0IsIDB4RkIsIDB4QUUsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4OUEsIDB4RkYsCi0gICAgMHg5RiwgMHhGRiwgMHhBRiwgMHhFRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHhDRiwgMHhGMywgMHhGRiwgMHhFQiwgMHhGRiwgMHhFQiwgMHhGRiwKLSAgICAweEZGLCAweEJGLCAweEZGLCAweEZGLCAKLSAgICAweEVGLCAweEZFLCAweEZGLCAweDM3LCAweEZDLCAweEJGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4Q0YsIDB4RUYsIDB4RkQsIDB4RjMsIAotICAgIDB4RkYsIDB4RUUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4NkUsIDB4RkQsIDB4MkYsIDB4RkQsCi0gICAgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhDRiwgMHhGRiwgMHhGMywgMHhCRiwgMHg2OSwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZFLCAKLSAgICAweEZCLCAweDlGLCAweEZGLCAweEJGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweDg3LAotICAgIDB4RkUsIDB4REEsIDB4RUYsIDB4Q0YsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4RUYsIDB4QkYsIDB4RUYsIDB4RUYsIDB4RkQsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhFRiwgMHhGRCwgMHhGRiwgMHg3QiwgMHhGRiwgMHhFQiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEVCLCAweEY4LCAweEZGLCAweEVGLCAKLSAgICAweEFGLCAweEZGLCAweEZGLCAweEJELCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweEVFLCAweDdGLCAweEVGLCAweEZGLAotICAgIDB4QkIsIDB4RkYsIDB4QkYsIDB4RkIsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4RjYsIDB4RkIsIDB4QkQsIDB4RkQsIDB4REQsIDB4RjUsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhBRiwgCi0gICAgMHhGRiwgMHg1RiwgMHhGNSwgMHhERiwgMHhGRiwgMHg3RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNiwKLSAgICAweEYzLCAweEZGLCAweERFLCAweEZFLCAKLSAgICAweEVGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweERFLCAweERGLCAweDVGLCAweERGLAotICAgIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhBRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhFRiwgMHhFRCwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGQiwgMHhGRiwgMHhGRiwgMHhEQSwgMHhCRCwgMHhCRSwKLSAgICAweEFFLCAweEZFLCAweDdGLCAweEZELCAKLSAgICAweERGLCAweEZGLCAweEZGLCAweDdGLCAweEVGLCAweEZGLCAweEZCLCAweEZCLCAweEZCLCAweDdGLCAweEY3LCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIAotICAgIDB4QkMsIDB4RkQsIDB4QkQsIDB4QkQsIDB4QkQsIDB4RkQsIDB4N0IsIDB4N0IsIDB4N0IsIDB4N0IsIDB4RkIsIDB4QUUsCi0gICAgMHhGRiwgMHhGRiwgMHhGRCwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGQSwgMHg5RiwgMHhCRiwgMHhCRiwgMHhDRiwKLSAgICAweDdGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEFGLCAweEZGLCAweEVCLCAweEVCLCAweEVCLCAweEZGLCAweEQ3LCAweEZFLCAweEZGLCAweEZGLAotICAgIDB4QkYsIDB4RTcsIDB4RkUsIDB4QkYsIAotICAgIDB4N0YsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RUQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4NEYsIDB4RkYsIDB4RkIsCi0gICAgMHhGQiwgMHhGRiwgMHhGRiwgMHhERCwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhCRCwgMHhERiwgMHg5RCwgMHhGRCwgMHhERiwgMHhCOSwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEVGLCAweEZGLCAweEZCLCAweEVGLCAweEVCLCAweEZGLCAweERFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RjYsIDB4OUYsIDB4RkYsIDB4RkMsIAotICAgIDB4RkUsIDB4RkIsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4REYsIDB4RkEsIDB4Q0QsIDB4Q0YsCi0gICAgMHhCRiwgMHg5RiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGNywgMHhGRSwgMHhCRiwgMHhGRiwgMHhERiwgMHhFRiwgMHg1RiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweDdGLCAweDZGLCAweEZGLCAKLSAgICAweEJCLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdFLCAweEZGLAotICAgIDB4NUYsIDB4RkYsIDB4QkYsIDB4QkYsIAotICAgIDB4RjksIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4NkUsIDB4N0IsIDB4RkYsIDB4RUYsIDB4RkQsIDB4RUIsIDB4REYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGNywgMHhCNiwgMHgzRSwgMHhGQywgMHhGRCwgMHhCRiwgMHg3RSwgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywKLSAgICAweEVGLCAweEY3LCAweEYzLCAweEY3LCAKLSAgICAweEZGLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDZFLCAweDM1LCAweDc5LCAweEZGLAotICAgIDB4QkYsIDB4RkMsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkIsIDB4NTMsIDB4REYsIDB4RkYsIDB4RUIsIDB4QkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhCQywgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhBRiwgMHhGNSwKLSAgICAweEZGLCAweEY3LCAweEZGLCAweEZCLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEJBLCAweEFBLCAweEVFLCAweEZFLCAweDNGLCAweDdELAotICAgIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4N0YsIDB4QUYsIDB4NzcsIDB4RkIsIDB4RkIsIDB4RkYsIDB4RkIsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGNywgMHhCRSwgMHhCRCwgMHhCRCwgCi0gICAgMHhCRCwgMHhCRCwgMHhGRCwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHhGQiwgMHhBRSwgMHhGRiwgMHhFRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZDLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDlBLCAweEQ5LCAweEI4LCAweEZGLCAweEZGLCAweDc5LCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4Q0YsIAotICAgIDB4RkIsIDB4RkYsIDB4RUIsIDB4RkYsIDB4RUIsIDB4RDcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RTcsIDB4REUsCi0gICAgMHhGOCwgMHhGQiwgMHhGRSwgMHgzRiwgCi0gICAgMHhGQiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhDRiwgMHhBRCwgMHhCRiwgMHhGQSwgMHhGRiwgMHg3MywKLSAgICAweERGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweDNBLCAweEY1LCAweEI3LCAweEZDLCAweDNGLCAweEY5LCAweEZELCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4N0YsIDB4RUYsIDB4RjMsIDB4RkYsIAotICAgIDB4QkYsIDB4RkUsIDB4RjMsIDB4OUYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4M0UsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhBRiwgMHhEMywgMHhGRSwgMHhEQiwgMHhGRiwgMHhEQiwgMHhERiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweDNFLCAweEZGLCAweEJGLCAweEZGLCAweDdGLCAweEZGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDhGLAotICAgIDB4RjMsIDB4RkYsIDB4RUQsIDB4RkYsIAotICAgIDB4RjcsIDB4RkIsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RjYsIDB4M0MsIDB4RkUsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHg5RiwgMHhFRiwgMHhFRiwgMHhEMSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweDdFLCAweEJGLCAKLSAgICAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEJCLCAweEVGLCAweERGLCAweEYxLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUUsIDB4M0UsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgCi0gICAgMHhFRiwgMHhGRCwgMHhDMywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhGRiwKLSAgICAweEZDLCAweDNFLCAweEZFLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDJFLCAweEVGLCAweEYzLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RjcsIDB4QkEsIDB4QkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHg3RiwgMHhBRiwgMHhGQiwgCi0gICAgMHhGQiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGMiwgMHhENiwgMHhFRCwKLSAgICAweEJELCAweEJELCAweEJELCAweDdELCAKLSAgICAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweEZCLCAweEFGLCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4OTIsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsCi0gICAgMHhBRiwgMHhFQiwgMHhFQiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFNywgMHhGRSwgMHgyRSwgMHhGRSwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweDRGLCAweEVGLCAweEYzLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIAotICAgIDB4M0MsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4Q0UsCi0gICAgMHhDMywgMHhGRCwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHg1RCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEVGLCAweENGLCAweEVCLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RjcsIDB4RUUsIDB4M0UsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RUYsIDB4REYsIDB4RTIsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGQiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNiwgMHhCRSwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweDdGLCAweEVFLCAKLSAgICAweDVGLCAweEU2LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDNFLAotICAgIDB4N0QsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RjMsIDB4RkIsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhCRiwgMHhGNywgMHgzNiwgMHhCRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEVGLCAweEQzLCAweEY2LCAKLSAgICAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZDLCAweDdGLCAweEVFLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QUYsIDB4RUYsIDB4RUIsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhCQSwgMHhCRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRSwKLSAgICAweEZCLCAweEZBLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY3LCAweEQ2LCAweEZELCAweEJELCAweEJELCAweEJELAotICAgIDB4N0QsIDB4N0IsIDB4N0IsIDB4N0IsIAotICAgIDB4N0IsIDB4RkIsIDB4QUUsIDB4RkYsIDB4N0UsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGNywgMHhCQSwgMHhCRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHhFRiwgMHhFQiwgMHg2QiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweEJFLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4NEYsIDB4RUYsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsCi0gICAgMHgzRSwgMHg2RSwgMHhGQywgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhDMywgMHhDOSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweDNFLCAweEJGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkIsIAotICAgIDB4RDUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkUsCi0gICAgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg2RiwgMHhFRiwgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGQiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEY2LCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweEZFLAotICAgIDB4RUYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RTcsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RjcsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHg3RiwgMHhGQSwgMHhFRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEU3LCAweEZGLCAweEZFLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweEZFLCAweEVGLCAweEJGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QTcsIDB4RkYsIDB4RkMsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgCi0gICAgMHhGRSwgMHhBRSwgMHhGRiwgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFNywKLSAgICAweEY3LCAweEZBLCAweEZGLCAweEZELCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweEFGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4QkUsIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIDB4N0QsIDB4N0IsIDB4N0IsCi0gICAgMHg3QiwgMHg3QiwgMHhGQiwgMHhBRiwgCi0gICAgMHg3RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhDQSwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweDZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RTcsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhDRiwgMHhGRSwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhERiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZCLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RTcsIDB4RjIsIDB4RkMsIAotICAgIDB4RUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4QUUsIDB4RUYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHg3RSwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEVGLCAweEZGLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEZGLAotICAgIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REYsIDB4RUYsIDB4REQsIDB4RkUsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEFGLCAweEVGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEJBLCAweEZFLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkEsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGNiwgMHg5QywgMHhCRCwgMHhCRCwgMHhCRCwgMHhCRCwgMHg3RCwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHhGQiwKLSAgICAweEFFLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY3LCAweDdBLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4REYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4NkYsIDB4RUYsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGNywgMHhGRSwgCi0gICAgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhDRiwgMHhFQiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweDlFLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RUYsIDB4RUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHhFRiwgMHhDQiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZELCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEJFLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIAotICAgIDB4RUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjgsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhCRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkIsIDB4QUYsIDB4N0YsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4RUYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEJGLCAweEZGLCAKLSAgICAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEFFLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4RkEsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHg3RiwgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEY3LCAweEJDLCAweEJELCAKLSAgICAweEJELCAweEJELCAweEJELCAweDdELCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweEZCLCAweEFGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4RkEsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgCi0gICAgMHhBRiwgMHg3RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwKLSAgICAweEZFLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweENGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkIsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhFRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4QkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGRSwgMHhGRiwgMHg5RiwgMHg5RiwKLSAgICAweDlGLCAweDNGLCAweDNGLCAweDNGLCAKLSAgICAweDNGLCAweDNGLCAweEZGLCAweEVGLCAweERGLCAweERGLCAweERGLCAweERGLCAweENGLCAweEI3LCAweEJGLCAweEJGLAotICAgIDB4QkYsIDB4QkYsIDB4RkYsIDB4QkMsIAotICAgIDB4QjksIDB4OUQsIDB4QkQsIDB4QkQsIDB4N0QsIDB4N0IsIDB4N0IsIDB4N0IsIDB4N0IsIDB4RkIsIDB4RUYsIDB4RDcsCi0gICAgMHhGNSwgMHhGMywgMHhGMSwgMHhEMSwgCi0gICAgMHg2NSwgMHhFMywgMHhFMywgMHhFMywgMHhBMywgMHhGRiwgMHhGRSwgMHg3RiwgMHhGRSwgMHhERSwgMHhERSwgMHhGRiwKLSAgICAweEJELCAweEJELCAweEJELCAweEJELCAKLSAgICAweERGLCAweEVGLCAweEZCLCAweEY3LCAweEYzLCAweEYzLCAweEYzLCAweEU3LCAweEU3LCAweEU3LCAweEU3LCAweEU3LAotICAgIDB4RkIsIDB4RkUsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYKLSAgICAKLSAgICB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCA3NzQyMzJjLi40OGRiYjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpAQCAtNTUsMTcgKzU2LDE4IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLS8qIE9zaXRlY2ggU2V2ZW4gb2YgRGlhbW9uZHMgZmlybXdhcmUgKi8KLSNpbmNsdWRlICJvc2l0ZWNoLmgiCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgY29uc3QgY2hhciAqaWZfbmFtZXNbXSA9IHsgImF1dG8iLCAiMTBiYXNlVCIsICIxMGJhc2UyIn07CiAKKy8qIEZpcm13YXJlIG5hbWUgKi8KKyNkZWZpbmUgRklSTVdBUkVfTkFNRQkJIm9zaXRlY2gvWGlsaW54N09ELmJpbiIKKwogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTTUMgOTFjOTIgc2VyaWVzIFBDTUNJQSBldGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9OQU1FKTsKIAogI2RlZmluZSBJTlRfTU9EVUxFX1BBUk0obiwgdikgc3RhdGljIGludCBuID0gdjsgbW9kdWxlX3BhcmFtKG4sIGludCwgMCkKIApAQCAtNzcxLDYgKzc3MywyNiBAQAogICAgIHJldHVybiBpOwogfQogCitzdGF0aWMgaW50IG9zaV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGksIGVycjsKKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBGSVJNV0FSRV9OQU1FLCAmbGluay0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLCBGSVJNV0FSRV9OQU1FKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBEb3dubG9hZCB0aGUgU2V2ZW4gb2YgRGlhbW9uZHMgZmlybXdhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemU7IGkrKykgeworCSAgICBvdXRiKGZ3LT5kYXRhW2ldLCBsaW5rLT5pby5CYXNlUG9ydDEgKyAyKTsKKwkgICAgdWRlbGF5KDUwKTsKKwl9CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBvc2lfc2V0dXAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIHVfc2hvcnQgbWFuZmlkLCB1X3Nob3J0IGNhcmRpZCkKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKQEAgLTgxMSwxMSArODMzLDkgQEAKIAkgKGNhcmRpZCA9PSBQUk9ESURfT1NJVEVDSF9TRVZFTikpIHx8CiAJKChtYW5maWQgPT0gTUFORklEX1BTSU9OKSAmJgogCSAoY2FyZGlkID09IFBST0RJRF9QU0lPTl9ORVQxMDApKSkgewotCS8qIERvd25sb2FkIHRoZSBTZXZlbiBvZiBEaWFtb25kcyBmaXJtd2FyZSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoX19YaWxpbng3T0QpOyBpKyspIHsKLQkgICAgb3V0YihfX1hpbGlueDdPRFtpXSwgbGluay0+aW8uQmFzZVBvcnQxKzIpOwotCSAgICB1ZGVsYXkoNTApOwotCX0KKwlyYyA9IG9zaV9sb2FkX2Zpcm13YXJlKGxpbmspOworCWlmIChyYykKKwkJZ290byBmcmVlX2NmZ19tZW07CiAgICAgfSBlbHNlIGlmIChtYW5maWQgPT0gTUFORklEX09TSVRFQ0gpIHsKIAkvKiBNYWtlIHN1cmUgYm90aCBmdW5jdGlvbnMgYXJlIHBvd2VyZWQgdXAgKi8KIAlzZXRfYml0cygweDMwMCwgbGluay0+aW8uQmFzZVBvcnQxICsgT1NJVEVDSF9BVUlfUFdSKTsKQEAgLTg2MiwxMCArODgyLDEwIEBACiAJICAgICAoc21jLT5jYXJkaWQgPT0gUFJPRElEX09TSVRFQ0hfU0VWRU4pKSB8fAogCSAgICAoKHNtYy0+bWFuZmlkID09IE1BTkZJRF9QU0lPTikgJiYKIAkgICAgIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfUFNJT05fTkVUMTAwKSkpIHsKLQkJLyogRG93bmxvYWQgdGhlIFNldmVuIG9mIERpYW1vbmRzIGZpcm13YXJlICovCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoX19YaWxpbng3T0QpOyBpKyspIHsKLQkJCW91dGIoX19YaWxpbng3T0RbaV0sIGxpbmstPmlvLkJhc2VQb3J0MSsyKTsKLQkJCXVkZWxheSg1MCk7CisJCWkgPSBvc2lfbG9hZF9maXJtd2FyZShsaW5rKTsKKwkJaWYgKGkpIHsKKwkJCXByX2Vycigic21jOTFjOTJfY3M6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlXG4iKTsKKwkJCXJldHVybiBpOwogCQl9CiAJfQogCWlmIChsaW5rLT5vcGVuKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggNThiNzNiMC4uM2ZmMWY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtNzU3LDggKzc1Nyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBoeV9zdGF0ZV9tYWNoaW5lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9Ci0JCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9CiAJCQljb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCBwaHlfZGV2aWNlLCBzdGF0ZV9xdWV1ZSk7CiAJaW50IG5lZWRzX2FuZWcgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKaW5kZXggYTUwMDc4Ni4uOTEzYjJhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlICJxbGdlLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IDA2YzUzNTIuLmUxYTYzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMjA3NSw4ICsyMDc1LDcgQEAKIAlpZiAoIXRwLT5wY2llX2NhcCAmJiBuZXRpZl9tc2dfcHJvYmUodHApKQogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibm8gUENJIEV4cHJlc3MgY2FwYWJpbGl0eVxuIik7CiAKLQkvKiBVbm5lZWRlZCA/IERvbid0IG1lc3Mgd2l0aCBNcnMuIE11cnBoeS4gKi8KLQlydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soaW9hZGRyKTsKKwlSVExfVzE2KEludHJNYXNrLCAweDAwMDApOwogCiAJLyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KIAlSVExfVzgoQ2hpcENtZCwgQ21kUmVzZXQpOwpAQCAtMjA4OCw2ICsyMDg3LDggQEAKIAkJbXNsZWVwX2ludGVycnVwdGlibGUoMSk7CiAJfQogCisJUlRMX1cxNihJbnRyU3RhdHVzLCAweGZmZmYpOworCiAJLyogSWRlbnRpZnkgY2hpcCBhdHRhY2hlZCB0byBib2FyZCAqLwogCXJ0bDgxNjlfZ2V0X21hY192ZXJzaW9uKHRwLCBpb2FkZHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKaW5kZXggODhkZDJlMC4uY2U3NTUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwpAQCAtMjI5OSw3ICsyMjk5LDcgQEAKIAllYWRkciA9IHNjLT5zYm1faHdhZGRyOwogCiAJLyoKLQkgKiBSZWFkIHRoZSBldGhlcm5ldCBhZGRyZXNzLiAgVGhlIGZpcndtYXJlIGxlZnQgdGhpcyBwcm9ncmFtbWVkCisJICogUmVhZCB0aGUgZXRoZXJuZXQgYWRkcmVzcy4gIFRoZSBmaXJtd2FyZSBsZWZ0IHRoaXMgcHJvZ3JhbW1lZAogCSAqIGZvciB1cyBpbiB0aGUgZXRoZXJuZXQgYWRkcmVzcyByZWdpc3RlciBmb3IgZWFjaCBtYWMuCiAJICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwppbmRleCAwMGMyM2IxLi5kZWUyM2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC00NDgsNiArNDQ4LDkgQEAKIAogCQlXQVJOX09OKGNoYW5uZWwtPnJ4X3BrdCAhPSBOVUxMKTsKIAkJZWZ4X3J4X3N0cmF0ZWd5KGNoYW5uZWwpOworCisJCW5ldGlmX25hcGlfYWRkKGNoYW5uZWwtPm5hcGlfZGV2LCAmY2hhbm5lbC0+bmFwaV9zdHIsCisJCQkgICAgICAgZWZ4X3BvbGwsIG5hcGlfd2VpZ2h0KTsKIAl9CiB9CiAKQEAgLTQ2MiwxMCArNDY1LDYgQEAKIAogCUVGWF9MT0coY2hhbm5lbC0+ZWZ4LCAic3RhcnRpbmcgY2hhbiAlZFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CiAKLQlpZiAoIShjaGFubmVsLT5lZngtPm5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKSkKLQkJbmV0aWZfbmFwaV9hZGQoY2hhbm5lbC0+bmFwaV9kZXYsICZjaGFubmVsLT5uYXBpX3N0ciwKLQkJCSAgICAgICBlZnhfcG9sbCwgbmFwaV93ZWlnaHQpOwotCiAJLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGlzIGNoYW5uZWwgbWF5IHNldCB3b3JrX3BlbmRpbmcKIAkgKiBhcyBzb29uIGFzIHdlIGVuYWJsZSBpdC4gIE1ha2Ugc3VyZSBpdCdzIGNsZWFyZWQgYmVmb3JlCiAJICogdGhlbi4gIFNpbWlsYXJseSwgbWFrZSBzdXJlIGl0IHNlZXMgdGhlIGVuYWJsZWQgZmxhZyBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvaHdtdG0uaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9od210bS5oCmluZGV4IDFhNjA2ZDQuLmUxYTdlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvaC9od210bS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9od210bS5oCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlpbnQJbGVhdmVfaXNyIDsJCS8qIGxlYXZlIGZkZGlfaXNyIGltbWVkZWF0ZWx5IGlmIHNldCAqLwogCWludAlpc3JfZmxhZyA7CQkvKiBzZXQsIHdoZW4gSFdNIGlzIGVudGVyZWQgZnJvbSBpc3IgKi8KIAkvKgotCSAqIHZhcmFpYmxlcyBmb3IgdGhlIGN1cnJlbnQgdHJhbnNtaXQgZnJhbWUKKwkgKiB2YXJpYWJsZXMgZm9yIHRoZSBjdXJyZW50IHRyYW5zbWl0IGZyYW1lCiAJICovCiAJc3RydWN0IHNfc210X3R4X3F1ZXVlICp0eF9wIDsJLyogcG9pbnRlciB0byB0aGUgdHJhbnNtaXQgcXVldWUgKi8KIAl1X2xvbmcJdHhfZGVzY3IgOwkJLyogdHggZGVzY3JpcHRvciBmb3IgRk9STUFDKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCmluZGV4IGI1MmExYzAuLmQ5MWU5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYworKysgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKQEAgLTE5MDgsNyArMTkwOCw3IEBACiAJZG8gewogCQl0Y193cml0ZWwoc3RhdHVzLCAmdHItPkludF9TcmMpOwkvKiB3cml0ZSB0byBjbGVhciAqLwogCi0JCWhhbmRsZWQgPSB0YzM1ODE1X2RvX2ludGVycnVwdChkZXYsIHN0YXR1cywgbGltaXQpOworCQloYW5kbGVkID0gdGMzNTgxNV9kb19pbnRlcnJ1cHQoZGV2LCBzdGF0dXMsIGJ1ZGdldCAtIHJlY2VpdmVkKTsKIAkJaWYgKGhhbmRsZWQgPj0gMCkgewogCQkJcmVjZWl2ZWQgKz0gaGFuZGxlZDsKIAkJCWlmIChyZWNlaXZlZCA+PSBidWRnZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDEyMDVjMmEuLjQzNzY4M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC0xMTIyNSw3ICsxMTIyNSw3IEBACiAJCXJldHVybiB0ZzNfcGh5X2luaXQodHApOwogCiAJLyogUmVhZGluZyB0aGUgUEhZIElEIHJlZ2lzdGVyIGNhbiBjb25mbGljdCB3aXRoIEFTRgotCSAqIGZpcndtYXJlIGFjY2VzcyB0byB0aGUgUEhZIGhhcmR3YXJlLgorCSAqIGZpcm13YXJlIGFjY2VzcyB0byB0aGUgUEhZIGhhcmR3YXJlLgogCSAqLwogCWVyciA9IDA7CiAJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKaW5kZXggNGE2NWZjMi4uNTM0YzBmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KIApAQCAtNzMsOCArNzQsMTAgQEAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhICA9IAogIjNjMzU5LmMgdjEuMi4wIDIvMTcvMDEgLSBNaWtlIFBoaWxsaXBzIChtaWtlcEBsaW51eHRyLm5ldCkiIDsgCiAKKyNkZWZpbmUgRldfTkFNRQkJIjNjb20vM0MzNTkuYmluIgogTU9EVUxFX0FVVEhPUigiTWlrZSBQaGlsbGlwcyA8bWlrZXBAbGludXh0ci5uZXQ+IikgOyAKIE1PRFVMRV9ERVNDUklQVElPTigiM0NvbSAzQzM1OSBWZWxvY2l0eSBYTCBUb2tlbiBSaW5nIEFkYXB0ZXIgRHJpdmVyIFxuIikgOworTU9EVUxFX0ZJUk1XQVJFKEZXX05BTUUpOwogCiAvKiBNb2R1bGUgcGFyYW10ZXJzICovCiAKQEAgLTExNCw4ICsxMTcsNiBAQAogICoJd2lsbCBiZSBzdHVjayB3aXRoIDE1NTUgbGluZXMgb2YgaGV4ICMncyBpbiB0aGUgY29kZS4KICAqLwogCi0jaW5jbHVkZSAiM2MzNTlfbWljcm9jb2RlLmgiIAotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgeGxfcGNpX3RibFtdID0KIHsKIAl7UENJX1ZFTkRPUl9JRF8zQ09NLFBDSV9ERVZJQ0VfSURfM0NPTV8zQzM1OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKQEAgLTM2NCwxMCArMzY1LDMwIEBACiAJcmV0dXJuIDA7IAogfQogCitzdGF0aWMgaW50IHhsX2luaXRfZmlybXdhcmUoc3RydWN0IHhsX3ByaXZhdGUgKnhsX3ByaXYpCit7CisJaW50IGVycjsKKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnhsX3ByaXYtPmZ3LCBGV19OQU1FLCAmeGxfcHJpdi0+cGRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLCBGV19OQU1FKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoeGxfcHJpdi0+ZnctPnNpemUgPCAxNikgeworCQlwcmludGsoS0VSTl9FUlIgIkJvZ3VzIGxlbmd0aCAlenUgaW4gXCIlc1wiXG4iLAorCQkgICAgICAgeGxfcHJpdi0+ZnctPnNpemUsIEZXX05BTUUpOworCQlyZWxlYXNlX2Zpcm13YXJlKHhsX3ByaXYtPmZ3KTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB4bF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAogewogCXN0cnVjdCB4bF9wcml2YXRlICp4bF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgXG4iLCB2ZXJzaW9uKTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogSS9PIGF0ICVoeCwgTU1JTyBhdCAlcCwgdXNpbmcgaXJxICVkXG4iLApAQCAtMzc1LDggKzM5NiwxMSBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnhsX3ByaXYtPnhsX2xvY2spIDsgCiAKLQlyZXR1cm4geGxfaHdfcmVzZXQoZGV2KSA7IAorCWVyciA9IHhsX2luaXRfZmlybXdhcmUoeGxfcHJpdik7CisJaWYgKGVyciA9PSAwKQorCQllcnIgPSB4bF9od19yZXNldChkZXYpOwogCisJcmV0dXJuIGVycjsKIH0KIAogCkBAIC0zODYsNyArNDEwLDcgQEAKICAqLwogCiBzdGF0aWMgaW50IHhsX2h3X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAoteyAKK3sKIAlzdHJ1Y3QgeGxfcHJpdmF0ZSAqeGxfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqeGxfbW1pbyA9IHhsX3ByaXYtPnhsX21taW8gOyAKIAl1bnNpZ25lZCBsb25nIHQgOyAKQEAgLTM5Niw2ICs0MjAsOSBAQAogCXUxNiBzdGFydCA7IAogCWludCBqIDsKIAorCWlmICh4bF9wcml2LT5mdyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qCiAJICogIFJlc2V0IHRoZSBjYXJkLiAgSWYgdGhlIGNhcmQgaGFzIGdvdCB0aGUgbWljcm9jb2RlIG9uIGJvYXJkLCB3ZSBoYXZlIAogICAgICAgICAgKiAgbWlzc2VkIHRoZSBpbml0aWFsaXphdGlvbiBpbnRlcnJ1cHQsIHNvIHdlIG11c3QgYWx3YXlzIGRvIHRoaXMuCkBAIC00NTgsMjUgKzQ4NSwzMCBAQAogCiAJCS8qIAogCQkgKiBOb3cgdG8gd3JpdGUgdGhlIG1pY3JvY29kZSBpbnRvIHRoZSBzaGFyZWQgcmFtIAotCSAJICogVGhlIG1pY3JvY29kZSBtdXN0IGZpbmlzaCBhdCBwb3NpdGlvbiAweEZGRkYsIHNvIHdlIG11c3Qgc3VidHJhY3QKLQkJICogdG8gZ2V0IHRoZSBzdGFydCBwb3NpdGlvbiBmb3IgdGhlIGNvZGUKKwkgCSAqIFRoZSBtaWNyb2NvZGUgbXVzdCBmaW5pc2ggYXQgcG9zaXRpb24gMHhGRkZGLAorCSAJICogc28gd2UgbXVzdCBzdWJ0cmFjdCB0byBnZXQgdGhlIHN0YXJ0IHBvc2l0aW9uIGZvciB0aGUgY29kZQorCSAJICoKKwkJICogTG9va3Mgc3RyYW5nZSBidXQgZW5zdXJlcyBjb21waWxlciBvbmx5IHVzZXMKKwkJICogMTYgYml0IHVuc2lnbmVkIGludAogCQkgKi8KKwkJc3RhcnQgPSAoMHhGRkZGIC0gKHhsX3ByaXYtPmZ3LT5zaXplKSArIDEpIDsKIAotCQlzdGFydCA9ICgweEZGRkYgLSAobWNfc2l6ZSkgKyAxICkgOyAvKiBMb29rcyBzdHJhbmdlIGJ1dCBlbnN1cmVzIGNvbXBpbGVyIG9ubHkgdXNlcyAxNiBiaXQgdW5zaWduZWQgaW50IGZvciB0aGlzICovIAotCQkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiM0MzNTk6IFVwbG9hZGluZyBNaWNyb2NvZGU6ICIpOyAKLQkJCi0JCWZvciAoaSA9IHN0YXJ0LCBqID0gMDsgaiA8IG1jX3NpemU7IGkrKywgaisrKSB7IAotCQkJd3JpdGVsKE1FTV9CWVRFX1dSSVRFIHwgMFhEMDAwMCB8IGksIHhsX21taW8gKyBNTUlPX01BQ19BQ0NFU1NfQ01EKSA7IAotCQkJd3JpdGViKG1pY3JvY29kZVtqXSx4bF9tbWlvICsgTU1JT19NQUNEQVRBKSA7IAorCisJCWZvciAoaSA9IHN0YXJ0LCBqID0gMDsgaiA8IHhsX3ByaXYtPmZ3LT5zaXplOyBpKyssIGorKykgeworCQkJd3JpdGVsKE1FTV9CWVRFX1dSSVRFIHwgMFhEMDAwMCB8IGksCisJCQkgICAgICAgeGxfbW1pbyArIE1NSU9fTUFDX0FDQ0VTU19DTUQpOworCQkJd3JpdGViKHhsX3ByaXYtPmZ3LT5kYXRhW2pdLCB4bF9tbWlvICsgTU1JT19NQUNEQVRBKTsKIAkJCWlmIChqICUgMTAyNCA9PSAwKQogCQkJCXByaW50aygiLiIpOwogCQl9CiAJCXByaW50aygiXG4iKSA7IAogCi0JCWZvciAoaT0wO2kgPCAxNjsgaSsrKSB7IAotCQkJd3JpdGVsKCAoTUVNX0JZVEVfV1JJVEUgfCAweERGRkYwKSArIGksIHhsX21taW8gKyBNTUlPX01BQ19BQ0NFU1NfQ01EKSA7IAotCQkJd3JpdGViKG1pY3JvY29kZVttY19zaXplIC0gMTYgKyBpXSwgeGxfbW1pbyArIE1NSU9fTUFDREFUQSkgOyAKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCXdyaXRlbCgoTUVNX0JZVEVfV1JJVEUgfCAweERGRkYwKSArIGksCisJCQkgICAgICAgeGxfbW1pbyArIE1NSU9fTUFDX0FDQ0VTU19DTUQpOworCQkJd3JpdGViKHhsX3ByaXYtPmZ3LT5kYXRhW3hsX3ByaXYtPmZ3LT5zaXplIC0gMTYgKyBpXSwKKwkJCSAgICAgICB4bF9tbWlvICsgTU1JT19NQUNEQVRBKTsKIAkJfQogCiAJCS8qCkBAIC0xNzgyLDYgKzE4MTQsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHhsX3ByaXZhdGUgKnhsX3ByaXY9bmV0ZGV2X3ByaXYoZGV2KTsKIAkKKwlyZWxlYXNlX2Zpcm13YXJlKHhsX3ByaXYtPmZ3KTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlvdW5tYXAoeGxfcHJpdi0+eGxfbW1pbykgOyAKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpIDsgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5oCmluZGV4IDY2YjFmZjYuLmJjYjFhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5oCkBAIC0yODQsNSArMjg0LDggQEAKIAl1OCB4bF9sYWFbNl0gOyAKIAl1MzIgcnhfcmluZ19kbWFfYWRkciA7IAogCXUzMiB0eF9yaW5nX2RtYV9hZGRyIDsgCisKKwkvKiBmaXJtd2FyZSBzZWN0aW9uICovCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OV9taWNyb2NvZGUuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OV9taWNyb2NvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQwMGMwMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTlfbWljcm9jb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTgxICswLDAgQEAKLQotLyoKLSAqIFRoZSBmaXJtd2FyZSB0aGlzIGRyaXZlciBkb3dubG9hZHMgaW50byB0aGUgdG9rZW5yaW5nIGNhcmQgaXMgYQotICogc2VwYXJhdGUgcHJvZ3JhbSBhbmQgaXMgbm90IEdQTCdkIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGUgTGludXgKLSAqIHNpZGUgZHJpdmVyIGFuZCB0aGUgcm91dGluZSB0aGF0IGxvYWRzIHRoaXMgZGF0YSBpbnRvIHRoZSBjYXJkIGFyZS4KLSAqCi0gKiBUaGlzIGZpcm13YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdSBzdHJpY3RseSBmb3IgdXNlIGluIGNvbmp1bmN0aW9uCi0gKiB3aXRoIHRoZSB1c2Ugb2YgM0NvbSAzQzM1OSBUb2tlblJpbmcgYWRhcHRlcnMuIFRoZXJlIGlzIG5vCi0gKiB3YXJhbnR5IGV4cHJlc3NlZCBvciBpbXBsaWVkIGFib3V0IGl0cyBmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4KLSAqLwotCi0vKiAzYzM1OV9taWNyb2NvZGUubWFjOiAzQ29tIDNDMzU5IFRva2VucmluZyBtaWNyb2NvZGUuCi0gKgotICogTm90ZXM6Ci0gKiAgLSBMb2FkZWQgZnJvbSB4bF9pbml0IHVwb24gYWRhcHRlciBpbml0aWFsaXphdGlvbi4KLSAqCi0gKiBBdmFpbGFibGUgZnJvbSAzQ29tIGFzIHBhcnQgb2YgdGhlaXIgc3RhbmRhcmQgM0MzNTkgZHJpdmVyLiAKLSAqCi0gKiBtY19zaXplICptdXN0KiBtdXN0IG1hdGNoIHRoZSBtaWNyb2NvZGUgYmVpbmcgdXNlZCwgZWFjaCB2ZXJzaW9uIGlzIGEgCi0gKiBkaWZmZXJlbnQgbGVuZ3RoLgotICovCi0KLXN0YXRpYyBpbnQgbWNfc2l6ZSA9IDI0ODgwIDsgCi0KLXN0YXRpYyBjb25zdCB1OCBtaWNyb2NvZGVbXSA9IHsgCi0gMHhmZSwweDNhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgzMywweDJmLDB4MzAsMHgzMiwweDJmLDB4MzksMHgzOSwweDIwLDB4MzEKLSwweDM3LDB4M2EsMHgzMSwweDMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgzMCwweDMxLDB4MzIsMHgzMywweDM0LDB4MzUsMHgzNiwweDM3LDB4MzgsMHgzOSwweDQxLDB4NDIsMHg0MywweDQ0LDB4NDUsMHg0NgotLDB4MDAsMHgwMCwweDA3LDB4ZmYsMHgwMiwweDAwLDB4ZmUsMHg5ZiwweDA2LDB4MDAsMHgwMCwweDdjLDB4NDgsMHgwMCwweDAwLDB4NzAKLSwweDgyLDB4MDAsMHhmZiwweGZmLDB4ODYsMHgwMCwweGZmLDB4ZmYsMHg4OCwweDAwLDB4ZmYsMHhmZiwweDlhLDB4MDAsMHhmZiwweGZmCi0sMHhmZiwweGZmLDB4MTEsMHgwMCwweGMwLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NgotLDB4MzMsMHg0MywweDRmLDB4NGQsMHgyMCwweDQyLDB4NDEsMHg0MiwweDQ1LDB4MTEsMHg0MCwweGMwLDB4MDAsMHhmZiwweGZmLDB4ZmYKLSwweGZmLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NTMsMHg3NCwweDYxLDB4NzIsMHg3NCwweDIwLDB4NmYsMHg2NiwweDIwCi0sMHg0YywweDRjLDB4NDMsMHgyMCwweDY2LDB4NzIsMHg2MSwweDZkLDB4NjUsMHgyZSwweDIwLDB4MjAsMHg1NCwweDZmLDB4NzQsMHg2MQotLDB4NmMsMHgyMCwweDY0LDB4NjEsMHg3NCwweDYxLDB4MjAsMHg3MywweDY5LDB4N2EsMHg2NSwweDIwLDB4NjksMHg3MywweDIwLDB4NzgKLSwweDc4LDB4NzgsMHgyMCwweDIwLDB4MjAsMHg0MiwweDQxLDB4NDIsMHg0NSwweGU4LDB4ZDIsMHgwMSwweDgzLDB4M2UsMHhmNywweDM0Ci0sMHgwMCwweDc1LDB4MjEsMHhlOCwweDQxLDB4MDAsMHg4MywweDNlLDB4ZjcsMHgzNCwweDAwLDB4NzUsMHgxNywweGU4LDB4ODIsMHgwMAotLDB4ODMsMHgzZSwweGY3LDB4MzQsMHgwMCwweDc1LDB4MGQsMHhlOCwweGJmLDB4MDAsMHg4MywweDNlLDB4ZjcsMHgzNCwweDAwLDB4NzUKLSwweDAzLDB4ZTgsMHg0MSwweDAyLDB4YzMsMHgxZSwweGI4LDB4MDAsMHhmMCwweDhlLDB4ZDgsMHgzMywweGY2LDB4YjksMHgwMCwweDgwCi0sMHgzMywweGRiLDB4YWQsMHgwMywweGQ4LDB4ZTIsMHhmYiwweDFmLDB4YjgsMHgwMCwweDAwLDB4ODMsMHhmYiwweDAwLDB4NzQsMHgwMwotLDB4YjgsMHgyMiwweDAwLDB4YTMsMHhmNywweDM0LDB4YzMsMHhmYSwweGJhLDB4NTYsMHgwMCwweGIwLDB4ZmYsMHhlZSwweDMzLDB4YzAKLSwweDhlLDB4YzAsMHgzMywweGY2LDB4YjksMHhmZiwweDdmLDB4ODMsMHgzZSwweGZmLDB4MzQsMHgwMCwweDc0LDB4MDgsMHg4ZCwweDNlCi0sMHgzMCwweDYxLDB4ZDEsMHhlZiwweDJiLDB4Y2YsMHgyNiwweDhiLDB4MWMsMHgyNiwweGM3LDB4MDQsMHhmZiwweGZmLDB4MjYsMHg4MwotLDB4M2MsMHhmZiwweDc1LDB4MTcsMHgyNiwweGM3LDB4MDQsMHgwMCwweDAwLDB4MjYsMHg4MywweDNjLDB4MDAsMHg3NSwweDBjLDB4MjYKLSwweDg5LDB4MWMsMHg0NiwweDQ2LDB4ZTIsMHhlMCwweGI4LDB4MDAsMHgwMCwweGViLDB4MDMsMHhiOCwweDI0LDB4MDAsMHhhMywweGY3Ci0sMHgzNCwweGMzLDB4ZmEsMHhiNCwweGQ3LDB4OWUsMHg3MywweDNhLDB4NzUsMHgzOCwweDc5LDB4MzYsMHg3YiwweDM0LDB4OWYsMHhiMQotLDB4MDUsMHhkMiwweGVjLDB4NzMsMHgyZCwweGIwLDB4NDAsMHhkMCwweGUwLDB4NzEsMHgyNywweDc5LDB4MjUsMHhkMCwweGUwLDB4NzMKLSwweDIxLDB4N2IsMHgxZiwweDMyLDB4YzAsMHg3NSwweDFiLDB4MzIsMHhlNCwweDllLDB4NzIsMHgxNiwweDc0LDB4MTQsMHg3OCwweDEyCi0sMHg3YSwweDEwLDB4OWYsMHhkMiwweGVjLDB4NzIsMHgwYiwweGQwLDB4ZTQsMHg3MCwweDA3LDB4NzUsMHgwNSwweGI4LDB4MDAsMHgwMAotLDB4ZWIsMHgwMywweGI4LDB4MjYsMHgwMCwweGEzLDB4ZjcsMHgzNCwweGMzLDB4ZmEsMHhiYSwweDVhLDB4MDAsMHgzMywweGMwLDB4ZWYKLSwweGVmLDB4ZWYsMHhlZiwweGIwLDB4MDAsMHhlNiwweDU2LDB4YjAsMHgwMCwweGU2LDB4NTQsMHhiYSwweDUyLDB4MDAsMHhiOCwweDAxCi0sMHgwMSwweGVmLDB4ZTgsMHhjYSwweDAwLDB4M2MsMHgwMSwweDc1LDB4N2YsMHhlOCwweDgzLDB4MDAsMHhiYSwweDUyLDB4MDAsMHhiOAotLDB4MDIsMHgwMiwweGVmLDB4ZTgsMHhiOSwweDAwLDB4M2MsMHgwMiwweDc1LDB4NmUsMHhlOCwweDdhLDB4MDAsMHhiYSwweDUyLDB4MDAKLSwweGI4LDB4MDQsMHgwNCwweGVmLDB4ZTgsMHhhOCwweDAwLDB4M2MsMHgwNCwweDc1LDB4NWQsMHhlOCwweDcxLDB4MDAsMHhiYSwweDUyCi0sMHgwMCwweGI4LDB4MDgsMHgwOCwweGVmLDB4ZTgsMHg5NywweDAwLDB4M2MsMHgwOCwweDc1LDB4NGMsMHhlOCwweDY4LDB4MDAsMHhiYQotLDB4NTIsMHgwMCwweGI4LDB4MTAsMHgxMCwweGVmLDB4ZTgsMHg4NiwweDAwLDB4M2MsMHgxMCwweDc1LDB4M2IsMHhlOCwweDVmLDB4MDAKLSwweGJhLDB4NTIsMHgwMCwweGI4LDB4MjAsMHgyMCwweGVmLDB4ZTgsMHg3NSwweDAwLDB4M2MsMHgyMCwweDc1LDB4MmEsMHhlOCwweDU2Ci0sMHgwMCwweGJhLDB4NTIsMHgwMCwweGI4LDB4NDAsMHg0MCwweGVmLDB4ZTgsMHg2NCwweDAwLDB4M2MsMHg0MCwweDc1LDB4MTksMHhlOAotLDB4NGQsMHgwMCwweGJhLDB4NTIsMHgwMCwweGI4LDB4ODAsMHg4MCwweGVmLDB4ZTgsMHg1MywweDAwLDB4M2MsMHg4MCwweDc1LDB4MDgKLSwweGU4LDB4NDQsMHgwMCwweGI4LDB4MDAsMHgwMCwweGViLDB4MDMsMHhiOCwweDI4LDB4MDAsMHhhMywweGY3LDB4MzQsMHhjMywweGJhCi0sMHg1YSwweDAwLDB4YjgsMHgwMCwweDgwLDB4ZWYsMHhjMywweGJhLDB4NWEsMHgwMCwweGI4LDB4MDEsMHg4MCwweGVmLDB4YzMsMHhiYQotLDB4NWEsMHgwMCwweGI4LDB4MDIsMHg4MCwweGVmLDB4YzMsMHhiYSwweDVhLDB4MDAsMHhiOCwweDAzLDB4ODAsMHhlZiwweGMzLDB4YmEKLSwweDVhLDB4MDAsMHhiOCwweDA0LDB4ODAsMHhlZiwweGMzLDB4YmEsMHg1YSwweDAwLDB4YjgsMHgwNSwweDgwLDB4ZWYsMHhjMywweGJhCi0sMHg1YSwweDAwLDB4YjgsMHgwNiwweDgwLDB4ZWYsMHhjMywweGJhLDB4NWEsMHgwMCwweGI4LDB4MDcsMHg4MCwweGVmLDB4YzMsMHhiOQotLDB4ZmYsMHhmZiwweGU0LDB4NTgsMHhlNCwweDU0LDB4M2MsMHgwMCwweDc1LDB4MDMsMHg0OSwweDc1LDB4ZjcsMHhjMywweGZhLDB4MzIKLSwweGMwLDB4ZTYsMHg1NiwweGU0LDB4NTYsMHgzYywweDAwLDB4NzQsMHgwMywweGU5LDB4ODIsMHgwMCwweGIwLDB4ZmYsMHhlNiwweDU2Ci0sMHhlNCwweDU2LDB4M2MsMHhmZiwweDc1LDB4NzgsMHhiYSwweDUyLDB4MDAsMHhiOCwweGZmLDB4ZmYsMHhlZiwweGVkLDB4M2MsMHhmZgotLDB4NzUsMHg2YywweGI4LDB4MDAsMHhmZiwweGVmLDB4ZWQsMHgzYywweDAwLDB4NzUsMHg2MywweGIwLDB4ZmYsMHhlNiwweDU0LDB4ZTQKLSwweDU0LDB4M2MsMHhmZiwweDc1LDB4NTksMHgzMiwweGMwLDB4ZTYsMHg1NCwweGU0LDB4NTQsMHgzYywweDAwLDB4NzUsMHg0ZiwweGIwCi0sMHgwZiwweGU2LDB4NTAsMHhlNCwweDUwLDB4MjQsMHgwZiwweDNjLDB4MGYsMHg3NSwweDQzLDB4YjAsMHgwMCwweGU2LDB4NTAsMHhlNAotLDB4NTAsMHgyNCwweDBmLDB4M2MsMHgwMCwweDc1LDB4MzcsMHg4YywweGM4LDB4OGUsMHhjMCwweGJlLDB4NzAsMHgwMCwweDI2LDB4OGIKLSwweDE0LDB4MjYsMHg4YiwweDVjLDB4MDIsMHhiOCwweDAwLDB4MDAsMHhlZiwweGVkLDB4MjMsMHhjMywweDNkLDB4MDAsMHgwMCwweDc1Ci0sMHgxZCwweGI4LDB4ZmYsMHhmZiwweDIzLDB4YzMsMHhlZiwweDhiLDB4YzgsMHhlZCwweDIzLDB4YzMsMHgzYiwweGMxLDB4NzUsMHgwZQotLDB4ODMsMHhjNiwweDA0LDB4MjYsMHg4MywweDNjLDB4ZmYsMHg3NSwweGQ1LDB4YjgsMHgwMCwweDAwLDB4ZWIsMHgwMywweGI4LDB4MmEKLSwweDAwLDB4YTMsMHhmNywweDM0LDB4YzMsMHhmYSwweDMzLDB4YzAsMHhiZiwweDAwLDB4MjAsMHhiOSwweDE3LDB4MDAsMHhmMywweGFiCi0sMHhiZiwweDAwLDB4MzAsMHhiOSwweDE3LDB4MDAsMHhmMywweGFiLDB4YmYsMHgwMCwweDIyLDB4YjksMHg0MCwweDAwLDB4ZjMsMHhhYgotLDB4YmYsMHgwMCwweDMyLDB4YjksMHg0MCwweDAwLDB4ZjMsMHhhYiwweGZjLDB4MWUsMHg4YywweGM4LDB4OGUsMHhkOCwweDMzLDB4YzAKLSwweDhlLDB4YzAsMHhiZSwweDkyLDB4MDAsMHhiZiwweDAwLDB4MjAsMHhiOSwweDE3LDB4MDAsMHhmMywweGE0LDB4YmUsMHhhOSwweDAwCi0sMHhiZiwweDAwLDB4MjIsMHhiOSwweDQwLDB4MDAsMHhmMywweGE0LDB4MWYsMHhjNywweDA2LDB4ZmIsMHgzNCwweDY0LDB4MDAsMHhiYQotLDB4MDgsMHgwMCwweGI4LDB4MGYsMHgwMCwweGVmLDB4ZTgsMHg4MiwweDAxLDB4ZTgsMHg5YiwweDAxLDB4NzIsMHgwZCwweGM3LDB4MDYKLSwweGY3LDB4MzQsMHgyYywweDAwLDB4YzcsMHgwNiwweGY5LDB4MzQsMHgwNCwweDAwLDB4YzMsMHhiYSwweDBhLDB4MDAsMHgzMywweGMwCi0sMHhlZiwweGU4LDB4OTgsMHgwMSwweGU4LDB4YjUsMHgwMSwweGI4LDB4MTcsMHgwMCwweGJhLDB4OWMsMHgwMCwweGVmLDB4YjgsMHgwMAotLDB4MTAsMHhiYSwweDlhLDB4MDAsMHhlZiwweGI4LDB4MTcsMHgwMCwweGE5LDB4MDEsMHgwMCwweDc0LDB4MDEsMHg0MCwweGJhLDB4OGMKLSwweDAwLDB4ZWYsMHhiOCwweDAwLDB4MTgsMHhiYSwweDg2LDB4MDAsMHhlZiwweGI4LDB4MGMsMHgwMCwweGJhLDB4ODIsMHgwMCwweGVmCi0sMHhiYSwweDAyLDB4MDAsMHhlZCwweDI1LDB4ZjksMHhmZiwweDBkLDB4MDIsMHgwMCwweGVmLDB4YmEsMHgwNiwweDAwLDB4MzMsMHhjMAotLDB4ZWYsMHhiYSwweDA0LDB4MDAsMHhiOCwweDYwLDB4MDAsMHhlZiwweGJhLDB4MDAsMHgwMCwweGI4LDB4MTgsMHgwMCwweGVmLDB4YmEKLSwweDgwLDB4MDAsMHhiOSwweGZmLDB4ZmYsMHhlZCwweGE5LDB4MDEsMHgwMCwweDc1LDB4MDQsMHhlMiwweGY4LDB4ZWIsMHgzZSwweGJhCi0sMHgwYSwweDAwLDB4ZWQsMHhhOSwweDAwLDB4NDAsMHg3NCwweDM1LDB4YTksMHgwMCwweDIwLDB4NzQsMHgzMCwweDMzLDB4YzAsMHhlZgotLDB4NTEsMHhiOSwweGM4LDB4MDAsMHhlMiwweGZlLDB4NTksMHgxZSwweDA2LDB4MWYsMHgyNiwweDhiLDB4MGUsMHgwMiwweDMwLDB4ODMKLSwweGY5LDB4MTcsMHg3NSwweDE4LDB4NDksMHg0OSwweGJlLDB4MDIsMHgyMCwweGJmLDB4MDYsMHgzMCwweGYzLDB4YTYsMHgxZiwweDIzCi0sMHhjOSwweDc1LDB4MGEsMHhmZiwweDBlLDB4ZmIsMHgzNCwweDc0LDB4MTIsMHhlOSwweDRkLDB4ZmYsMHgxZiwweGI4LDB4MmMsMHgwMAotLDB4YmIsMHgwMCwweDAwLDB4YTMsMHhmNywweDM0LDB4ODksMHgxZSwweGY5LDB4MzQsMHhjMywweGM3LDB4MDYsMHhmYiwweDM0LDB4NjQKLSwweDAwLDB4ZTgsMHhkMywweDAwLDB4NzIsMHgwZCwweGM3LDB4MDYsMHhmNywweDM0LDB4MmMsMHgwMCwweGM3LDB4MDYsMHhmOSwweDM0Ci0sMHgwNCwweDAwLDB4YzMsMHhlOCwweGQ2LDB4MDAsMHhlOCwweGYzLDB4MDAsMHhiOCwweDAzLDB4MDAsMHhiYSwweDgyLDB4MDAsMHhlZgotLDB4YjgsMHg0MCwweDgwLDB4YmEsMHg5OCwweDAwLDB4ZWYsMHhiOCwweDAwLDB4MTEsMHhiYSwweDk2LDB4MDAsMHhlZiwweGI4LDB4NDAKLSwweDAwLDB4YTksMHgwMSwweDAwLDB4NzQsMHgwMSwweDQwLDB4YmEsMHg5MiwweDAwLDB4ZWYsMHhiOCwweDAwLDB4MTksMHhiYSwweDhlCi0sMHgwMCwweGVmLDB4YmEsMHgwMiwweDAwLDB4ZWQsMHgyNSwweGY5LDB4ZmYsMHgwZCwweDA2LDB4MDAsMHhlZiwweGJhLDB4MDYsMHgwMAotLDB4MzMsMHhjMCwweGVmLDB4YmEsMHgwMCwweDAwLDB4YjgsMHgxOCwweDAwLDB4ZWYsMHhiYSwweDgwLDB4MDAsMHhiOSwweGZmLDB4ZmYKLSwweGVkLDB4YTksMHgyMCwweDAwLDB4NzUsMHgwNCwweGUyLDB4ZjgsMHhlYiwweDQzLDB4YmEsMHgwYSwweDAwLDB4ZWQsMHhhOSwweDAwCi0sMHg0MCwweDc0LDB4M2EsMHhhOSwweDAwLDB4MjAsMHg3NCwweDM1LDB4MzMsMHhjMCwweGVmLDB4NTEsMHhiOSwweGM4LDB4MDAsMHhlMgotLDB4ZmUsMHg1OSwweDFlLDB4MDYsMHgxZiwweDI2LDB4OGIsMHgwZSwweDAyLDB4MzIsMHg4MywweGY5LDB4NDAsMHg3NSwweDFkLDB4NDkKLSwweDQ5LDB4YmUsMHgwMiwweDIyLDB4YmYsMHgwNiwweDMyLDB4ZjMsMHhhNiwweDFmLDB4MjMsMHhjOSwweDc1LDB4MGYsMHhmZiwweDBlCi0sMHhmYiwweDM0LDB4NzQsMHgwMywweGU5LDB4NWEsMHhmZiwweGI4LDB4MDAsMHgwMCwweGViLDB4MGIsMHgxZiwweGI4LDB4MmMsMHgwMAotLDB4YmIsMHgwMiwweDAwLDB4ODksMHgxZSwweGY5LDB4MzQsMHhhMywweGY3LDB4MzQsMHhjMywweGJhLDB4MDIsMHgwMCwweGI4LDB4MDAKLSwweDljLDB4ZWYsMHhiYSwweDAwLDB4MDAsMHhiOCwweDAwLDB4ODQsMHhlZiwweDMzLDB4YzAsMHhlZiwweGJhLDB4MGEsMHgwMCwweGVmCi0sMHhiYSwweDBlLDB4MDAsMHgzMywweGMwLDB4ZWYsMHhjMywweGJhLDB4MGEsMHgwMCwweGI5LDB4ZmYsMHhmZiwweGVkLDB4MjUsMHgwMAotLDB4NjAsMHgzZCwweDAwLDB4NjAsMHg3NCwweDA0LDB4ZTIsMHhmNSwweGY4LDB4YzMsMHhmOSwweGMzLDB4YjAsMHgwMCwweGU2LDB4NTYKLSwweGI4LDB4MDAsMHhmZiwweGJhLDB4NTIsMHgwMCwweGVmLDB4YjksMHhmZiwweGZmLDB4YmEsMHg1OCwweDAwLDB4ZWQsMHgyNSwweGVmCi0sMHgwMCwweDc0LDB4MDgsMHhiYSwweDVhLDB4MDAsMHgzMywweGMwLDB4ZWYsMHhlMiwweGVmLDB4YzMsMHhiYSwweDgwLDB4MDAsMHhlZAotLDB4YmEsMHg4NCwweDAwLDB4ZWYsMHhiYSwweDgwLDB4MDAsMHhlZCwweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweGM2LDB4MDYsMHhlYywweDM0LDB4MTUsMHgzMywweGMwLDB4OGUsMHhkOCwweDhlLDB4YzAsMHgxZSwweDhjLDB4YzgsMHhiZSwweDQwCi0sMHg1NCwweGJmLDB4NjAsMHhmZSwweDhlLDB4ZDgsMHhiOSwweDEwLDB4MDAsMHhmMywweGE0LDB4MWYsMHhjNywweDA2LDB4ODAsMHgzNgotLDB4MTAsMHgzNSwweGM3LDB4MDYsMHg4YywweDM2LDB4MzAsMHgzNSwweDhkLDB4MDYsMHgzOCwweDM1LDB4YTMsMHgzMCwweDM1LDB4YTMKLSwweDMyLDB4MzUsMHgwNSwweDMzLDB4MDEsMHhhMywweDM0LDB4MzUsMHhjNywweDA2LDB4MzYsMHgzNSwweDUwLDB4MDEsMHhjNywweDA2Ci0sMHg4NCwweDM2LDB4ODAsMHhmZSwweGM3LDB4MDYsMHg4OCwweDM2LDB4YzAsMHhmZSwweGM2LDB4MDYsMHhjMiwweGZlLDB4ZmYsMHhjNgotLDB4MDYsMHg5MywweDM2LDB4ODAsMHhjNiwweDA2LDB4OTIsMHgzNiwweDAwLDB4YzYsMHgwNiwweDgwLDB4ZmUsMHg4MCwweGM3LDB4MDYKLSwweDgyLDB4ZmUsMHg1NCwweDUwLDB4YzcsMHgwNiwweDg0LDB4ZmUsMHgyYiwweDRkLDB4ZTUsMHhjZSwweGE5LDB4MDIsMHgwMCwweDc1Ci0sMHgwOCwweGM2LDB4MDYsMHg4MSwweGZlLDB4MjMsMHhlOSwweDA1LDB4MDAsMHhjNiwweDA2LDB4ODEsMHhmZSwweDIyLDB4YTEsMHhmNwotLDB4MzQsMHhhMywweDg2LDB4ZmUsMHhiOCwweDQ4LDB4MzQsMHg4NiwweGUwLDB4YTMsMHg4OCwweGZlLDB4OGQsMHgwNiwweDRlLDB4MzQKLSwweDg2LDB4ZTAsMHhhMywweDhhLDB4ZmUsMHhiOCwweDU4LDB4MzQsMHg4NiwweGUwLDB4YTMsMHg4YywweGZlLDB4YjgsMHg5YywweDM0Ci0sMHg4NiwweGUwLDB4YTMsMHg4ZSwweGZlLDB4OGQsMHgwNiwweDIwLDB4MDMsMHg4NiwweGUwLDB4YTMsMHg5MCwweGZlLDB4MzMsMHhjMAotLDB4YmEsMHg3MiwweDAwLDB4ZWYsMHgzMywweGMwLDB4YmEsMHg3NCwweDAwLDB4ZWYsMHhiYSwweDc2LDB4MDAsMHhlZiwweGI4LDB4ODAKLSwweGZlLDB4ODYsMHhlMCwweGJhLDB4NzIsMHgwMCwweGVmLDB4ZTgsMHhiZiwweDA3LDB4YmEsMHgwYywweDAxLDB4YjgsMHg0MCwweDQwCi0sMHhlZiwweGVkLDB4YmEsMHg2YSwweDAwLDB4YjgsMHgwMywweDAwLDB4YzEsMHhlMCwweDA4LDB4MGQsMHgwMywweDAwLDB4ZWYsMHhiOQotLDB4MGEsMHgwMCwweGU4LDB4OTQsMHgwMCwweGJhLDB4NmEsMHgwMCwweGI4LDB4MDMsMHgwMCwweGMxLDB4ZTAsMHgwOCwweGVmLDB4YTEKLSwweDMyLDB4MzQsMHhhMywweGEyLDB4MzMsMHhjNywweDA2LDB4YTYsMHgzMywweDA0LDB4MDAsMHg4ZCwweDA2LDB4YTAsMHgzMywweGMxCi0sMHhlOCwweDA0LDB4Y2QsMHgzOSwweGM3LDB4MDYsMHg5MCwweDM2LDB4ZmYsMHhmZiwweGU5LDB4ZTMsMHgwMCwweDYzLDB4MGQsMHg2NgotLDB4MGQsMHg2NiwweDBkLDB4OGEsMHgwZCwweGU2LDB4MGUsMHg3NSwweDEyLDB4MmUsMHgwZiwweDAzLDB4MGYsMHg1MCwweDBmLDB4NjAKLSwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHhlZCwweDBmLDB4ZTksMHgxMiwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwCi0sMHgwZCwweDYwLDB4MGQsMHgyMiwweDEwLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweGZlLDB4MTAsMHg2MAotLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweGFmLDB4MGYsMHgzMiwweDEwLDB4MzcKLSwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwCi0sMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MAotLDB4MGQsMHg2NCwweDBlLDB4MDAsMHgwZiwweDk1LDB4MDksMHg2MCwweDBhLDB4NDksMHhiYiwweGZmLDB4ZmYsMHhiYSwweDZhLDB4MDAKLSwweGVkLDB4YTksMHgwMCwweDIwLDB4NzQsMHgzOCwweDgwLDB4M2UsMHg4MCwweGZlLDB4MTIsMHg3NSwweDMxLDB4ZTgsMHg0YSwweDAwCi0sMHhhMSwweDMyLDB4MzQsMHhhMywweGEyLDB4MzMsMHhjNywweDA2LDB4YTYsMHgzMywweDA0LDB4MDAsMHg4ZCwweDA2LDB4YTAsMHgzMwotLDB4YzEsMHhlOCwweDA0LDB4Y2QsMHgzOSwweGU4LDB4MjIsMHgwMCwweGM3LDB4MDYsMHhmMywweDM0LDB4NDYsMHgwMCwweGM3LDB4MDYKLSwweGY1LDB4MzQsMHhmZiwweGZmLDB4YzcsMHgwNiwweDkwLDB4MzYsMHhmZiwweGZmLDB4NTgsMHhlOSwweDMyLDB4MDAsMHg0YiwweDgzCi0sMHhmYiwweDAwLDB4NzUsMHhiOSwweDgzLDB4ZjksMHgwMCwweDc1LDB4YjAsMHhjMywweDUyLDB4YmEsMHg2YSwweDAwLDB4YjgsMHgwMwotLDB4MDAsMHhjMSwweGUwLDB4MDgsMHgwZCwweDAzLDB4MDAsMHhlZiwweDVhLDB4YzMsMHg1MiwweGJhLDB4NmEsMHgwMCwweGI4LDB4MDMKLSwweDAwLDB4YzEsMHhlMCwweDA4LDB4ZWYsMHg1YSwweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHg2OCwweDgwLDB4MDcsMHhhMSwweDkwLDB4MzYsMHhjZCwweDM1LDB4OGIsMHgzNiwweDI0LDB4MDIsMHgyZSwweGZmLDB4YTQsMHgzNQotLDB4MGEsMHhmYSwweDhhLDB4MjYsMHg5NCwweDM2LDB4ODgsMHgyNiwweGU4LDB4MzQsMHhjNiwweDA2LDB4OTQsMHgzNiwweDAwLDB4ZmIKLSwweDIyLDB4ZTQsMHg3NSwweDAxLDB4YzMsMHhmNiwweGM0LDB4MjAsMHg3NCwweDdkLDB4ZjYsMHhjNCwweDA4LDB4NzQsMHgwNSwweDgwCi0sMHgwZSwweDkyLDB4MzYsMHgwNCwweDgwLDB4MjYsMHhlOCwweDM0LDB4ZDcsMHhjNCwweDFlLDB4ODQsMHgzNiwweDI2LDB4OGIsMHgzNwotLDB4ODEsMHhlNiwweGZmLDB4MDAsMHg4MywweGZlLDB4MjAsMHg3NiwweDA1LDB4YjAsMHgwMSwweGU5LDB4MjgsMHgwMCwweDUzLDB4MDYKLSwweGQxLDB4ZTYsMHgyZSwweGZmLDB4OTQsMHg5ZCwweDA2LDB4MDcsMHg1YiwweDI2LDB4ODgsMHg0NywweDAyLDB4M2MsMHhmZiwweDc0Ci0sMHgwNywweDNjLDB4ZmUsMHg3NSwweDExLDB4ZTksMHgzYiwweDAwLDB4ZjYsMHgwNiwweDkyLDB4MzYsMHgwOCwweDc1LDB4MzQsMHhmNgotLDB4MDYsMHg5MiwweDM2LDB4MDQsMHg3NCwweDJkLDB4ODAsMHgyNiwweDkyLDB4MzYsMHhmMywweDgwLDB4M2UsMHg5NSwweDM2LDB4MDAKLSwweDc1LDB4MjEsMHgyNiwweDgwLDB4M2YsMHgwNSwweDc1LDB4MTMsMHhjNiwweDA2LDB4OTUsMHgzNiwweDAwLDB4MjYsMHg4MCwweDdmCi0sMHgwNiwweDAwLDB4NzQsMHgwNywweDI2LDB4OGIsMHg0NywweDA0LDB4YTIsMHg5NSwweDM2LDB4YmEsMHgwYywweDAxLDB4YjgsMHg0MAotLDB4NDAsMHhlZiwweGVkLDB4OGEsMHgyNiwweGU4LDB4MzQsMHhmNiwweGM0LDB4MTAsMHg3NSwweDAzLDB4ZTksMHg1YiwweDAwLDB4ZjYKLSwweGM0LDB4MDQsMHg3NCwweDA1LDB4ODAsMHgwZSwweDkyLDB4MzYsMHgwMSwweDgwLDB4MjYsMHhlOCwweDM0LDB4ZWIsMHhjNCwweDNlCi0sMHg4OCwweDM2LDB4MjYsMHg4YiwweDM1LDB4ODMsMHhlNiwweDdmLDB4ODMsMHhmZSwweDEyLDB4NzIsMHgwOCwweDI2LDB4YzYsMHg0NQotLDB4MDIsMHgwMSwweGU5LDB4MjQsMHgwMCwweDgzLDB4YzYsMHgyMCwweGQxLDB4ZTYsMHgyZSwweGZmLDB4OTQsMHg5ZCwweDA2LDB4YzQKLSwweDNlLDB4ODgsMHgzNiwweDI2LDB4ODgsMHg0NSwweDAyLDB4M2MsMHhmZiwweDc1LDB4MGUsMHhmNiwweDA2LDB4OTIsMHgzNiwweDAxCi0sMHg3NCwweDE0LDB4ZjYsMHgwNiwweDkyLDB4MzYsMHgwMiwweDc1LDB4MGQsMHg4MCwweDI2LDB4OTIsMHgzNiwweGZjLDB4YmEsMHgwYwotLDB4MDEsMHhiOCwweDIwLDB4MjAsMHhlZiwweGVkLDB4OGEsMHgyNiwweGU4LDB4MzQsMHhmNiwweGM0LDB4MDgsMHg3NCwweDIyLDB4ODAKLSwweDI2LDB4ZTgsMHgzNCwweGY3LDB4ODAsMHgwZSwweDkyLDB4MzYsMHgwNCwweGY2LDB4MDYsMHg5MiwweDM2LDB4MDgsMHg3NCwweDExCi0sMHg4MCwweDI2LDB4OTIsMHgzNiwweGYzLDB4YmEsMHgwYywweDAxLDB4YjgsMHg0MCwweDQwLDB4ZWYsMHhlZCwweDhhLDB4MjYsMHhlOAotLDB4MzQsMHhmNiwweGM0LDB4MDQsMHg3NCwweDIyLDB4ODAsMHgyNiwweGU4LDB4MzQsMHhmYiwweDgwLDB4MGUsMHg5MiwweDM2LDB4MDEKLSwweGY2LDB4MDYsMHg5MiwweDM2LDB4MDIsMHg3NSwweDExLDB4ODAsMHgyNiwweDkyLDB4MzYsMHhmZSwweGJhLDB4MGMsMHgwMSwweGI4Ci0sMHgyMCwweDIwLDB4ZWYsMHhlZCwweDhhLDB4MjYsMHhlOCwweDM0LDB4ZjYsMHhjNCwweDAxLDB4NzQsMHg2NywweDgwLDB4MjYsMHhlOAotLDB4MzQsMHhmZSwweDgwLDB4M2UsMHhlOCwweGZmLDB4MDAsMHg3NCwweDM5LDB4ODAsMHgzZSwweGU4LDB4ZmYsMHgwNCwweDc0LDB4MzIKLSwweDgwLDB4M2UsMHhlOCwweGZmLDB4MDEsMHg3NSwweDIxLDB4ZTUsMHg4MCwweGE5LDB4MDAsMHgwNywweDc0LDB4MGEsMHhiYSwweDllCi0sMHgwMCwweGI4LDB4MDAsMHgwMiwweGVmLDB4ZTksMHhlZiwweGZmLDB4YzYsMHgwNiwweGU4LDB4ZmYsMHgwMywweGJhLDB4MGMsMHgwMQotLDB4YjgsMHgwOCwweDA4LDB4ZWYsMHhlZCwweGU5LDB4MjgsMHgwMCwweDgwLDB4M2UsMHhlOCwweGZmLDB4MDMsMHg3NCwweDA2LDB4ZTkKLSwweDFlLDB4MDAsMHhlOSwweDAwLDB4MDAsMHhiYSwweDEwLDB4MDEsMHhiOCwweDAyLDB4MDIsMHhlZiwweGVkLDB4ZTUsMHgwMCwweDBkCi0sMHgxOCwweDAwLDB4ZTcsMHgwMCwweGU1LDB4ODIsMHgwZCwweDAyLDB4MDAsMHhlNywweDgyLDB4YzYsMHgwNiwweGU4LDB4ZmYsMHgwNAotLDB4OGEsMHgyNiwweGU4LDB4MzQsMHhmNiwweGM0LDB4MDIsMHg3NCwweDBkLDB4ODAsMHgyNiwweGU4LDB4MzQsMHhmZCwweDgwLDB4MjYKLSwweDkyLDB4MzYsMHhiZiwweGU4LDB4NGYsMHgwYiwweGZhLDB4YTAsMHhlOCwweDM0LDB4MDgsMHgwNiwweDk0LDB4MzYsMHhjNiwweDA2Ci0sMHhlOCwweDM0LDB4MDAsMHhmYiwweGMzLDB4ZTgsMHhlNywweDBmLDB4YzQsMHgxZSwweDg0LDB4MzYsMHgyZSwweGZmLDB4MTYsMHgwMQotLDB4MDcsMHgyNiwweDg4LDB4NDcsMHgwMiwweGU5LDB4N2UsMHhmZSwweGU4LDB4MmQsMHgxMCwweGM0LDB4MWUsMHg4NCwweDM2LDB4MmUKLSwweGZmLDB4MTYsMHgwMywweDA3LDB4MjYsMHg4OCwweDQ3LDB4MDIsMHhlOSwweDZiLDB4ZmUsMHg4ZSwweDA2LDB4MjYsMHgwMiwweDJlCi0sMHhmZiwweDE2LDB4MDcsMHgwNywweGMzLDB4YzMsMHg4MywweDNlLDB4ZjUsMHgzNCwweDAwLDB4NzQsMHgwZiwweGZmLDB4MGUsMHhmMwotLDB4MzQsMHg3NSwweDA5LDB4ZTgsMHhjNCwweGZkLDB4YzcsMHgwNiwweGY1LDB4MzQsMHgwMCwweDAwLDB4ZjYsMHgwNiwweDkzLDB4MzYKLSwweDIwLDB4NzQsMHgzMCwweGExLDB4YzIsMHgzNCwweDNiLDB4MDYsMHhlOSwweDM0LDB4YTMsMHhlOSwweDM0LDB4NzQsMHgyNCwweDgwCi0sMHgzZSwweDk1LDB4MzYsMHgwMCwweDc1LDB4MWQsMHhmNywweDA2LDB4ZTYsMHgzNCwweDIwLDB4MDAsMHg3NCwweDEyLDB4YTksMHgyMAotLDB4MDAsMHg3NCwweDBkLDB4ODMsMHgyNiwweGMyLDB4MzQsMHhkZiwweDgzLDB4MjYsMHhlOSwweDM0LDB4ZGYsMHhlOSwweDAzLDB4MDAKLSwweGU4LDB4ZGQsMHgwOSwweGJhLDB4MDYsMHgwMSwweGVkLDB4OGIsMHhkMCwweDgxLDB4ZTIsMHgwMCwweGMwLDB4YzEsMHhlYSwweDBlCi0sMHgwMywweDE2LDB4NzQsMHgzNCwweGMxLDB4ZTAsMHgwMiwweDExLDB4MDYsMHg3MiwweDM0LDB4NzMsMHgwNCwweGZmLDB4MDYsMHg3NAotLDB4MzQsMHhiYSwweDAyLDB4MDEsMHhlZCwweDhiLDB4ZDAsMHg4MSwweGUyLDB4MDAsMHhjMCwweGMxLDB4ZWEsMHgwZSwweDAzLDB4MTYKLSwweDcwLDB4MzQsMHhjMSwweGUwLDB4MDIsMHgxMSwweDA2LDB4NmUsMHgzNCwweDczLDB4MDQsMHhmZiwweDA2LDB4NzAsMHgzNCwweGM3Ci0sMHgwNiwweGE2LDB4MzMsMHgwNCwweDAwLDB4YzcsMHgwNiwweGFhLDB4MzMsMHgwMCwweDAwLDB4OGQsMHgwNiwweGEwLDB4MzMsMHhjMQotLDB4ZTgsMHgwNCwweGNkLDB4MzksMHhjMywweDk1LDB4MDksMHg5NSwweDA5LDB4NjUsMHgwOSwweDc4LDB4MDksMHg5NSwweDA5LDB4OTUKLSwweDA5LDB4OTEsMHgwNywweDk1LDB4MDksMHg5NiwweDA5LDB4OGIsMHgwOSwweDk1LDB4MDksMHg5NSwweDA5LDB4OTUsMHgwOSwweDk1Ci0sMHgwOSwweDk1LDB4MDksMHg5NSwweDA5LDB4OGIsMHhjMCwweDhiLDB4YzAsMHg4YiwweGMwLDB4OGIsMHhjMCwweDhiLDB4YzAsMHg5MAotLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhlOSwweGNjLDB4MDAsMHg4YywweGMwLDB4NDAsMHg4ZSwweGMwLDB4MjYKLSwweDhiLDB4MGUsMHgwNiwweDAwLDB4ODYsMHhlOSwweDI2LDB4ODksMHgwZSwweDA2LDB4MDAsMHg4YywweGMyLDB4YzEsMHhlMiwweDA0Ci0sMHhiZSwweDBlLDB4MDAsMHgyNiwweGExLDB4MDQsMHgwMCwweGQwLDB4ZTAsMHgyNCwweGMwLDB4OGEsMHhlMCwweGMwLDB4ZWMsMHgwNAotLDB4MGEsMHhjNCwweDI2LDB4YTIsMHgwNSwweDAwLDB4MjYsMHhhMSwweDA4LDB4MDAsMHhhOSwweDAwLDB4YzAsMHg3NCwweDAzLDB4ZTkKLSwweDllLDB4MDAsMHgyNiwweGY2LDB4MDYsMHgxMCwweDAwLDB4ODAsMHg3NSwweDAzLDB4ZTksMHgwYSwweDAwLDB4MjYsMHhhMCwweDE2Ci0sMHgwMCwweDI0LDB4MWYsMHgzMiwweGU0LDB4MDMsMHhmMCwweDgwLDB4M2UsMHhlYywweDM0LDB4MDYsMHg3MiwweDVjLDB4ODAsMHgzZQotLDB4OTUsMHgzNiwweDAwLDB4NzUsMHg2NiwweDhiLDB4ZmEsMHgzMywweGRiLDB4OGUsMHhjMywweDI2LDB4ODksMHgxZCwweDI2LDB4ODgKLSwweDVkLDB4MDQsMHg1MSwweDUwLDB4YzQsMHgxZSwweDhjLDB4MzYsMHhiOSwweDBmLDB4MDAsMHgzMywweGMwLDB4ZTgsMHgyMSwweDA5Ci0sMHg1OCwweDU5LDB4MGIsMHhkYiwweDc0LDB4MzQsMHhmZSwweDBlLDB4ZTYsMHgzYSwweDI2LDB4YzYsMHgwNywweDgxLDB4MjYsMHhjNgotLDB4NDcsMHgwMSwweDAwLDB4MjYsMHhjNiwweDQ3LDB4MDIsMHhmZiwweDI2LDB4YzcsMHg0NywweDA0LDB4MDAsMHgwMCwweDI2LDB4ODkKLSwweDRmLDB4MGEsMHg4NiwweGYyLDB4MjYsMHg4OSwweDU3LDB4MDYsMHgyNiwweDg5LDB4NzcsMHgwOCwweDI2LDB4YzYsMHg0NywweDA5Ci0sMHgwMCwweDI2LDB4YzYsMHg0NywweDBjLDB4MDIsMHhlOCwweDhjLDB4MDksMHhjMywweGZmLDB4MDYsMHhlYywweDMzLDB4OGMsMHhjMAotLDB4NDgsMHg4ZSwweGMwLDB4ZmEsMHhlOCwweDk3LDB4MTAsMHhmYiwweGU5LDB4ZWIsMHhmZiwweDhjLDB4YzAsMHg0OCwweDhlLDB4YzAKLSwweGZhLDB4ZTgsMHg4YSwweDEwLDB4ZmIsMHhjMywweDhjLDB4YzAsMHg4ZSwweGMwLDB4ZmEsMHhlOCwweDgwLDB4MTAsMHhmYiwweGMzCi0sMHg4MCwweDNlLDB4OTUsMHgzNiwweDAwLDB4NzUsMHgwMywweGU5LDB4YzIsMHgwMCwweGJmLDB4MDgsMHgwMCwweDI2LDB4ZjYsMHgwNgotLDB4MTAsMHgwMCwweDgwLDB4NzUsMHgwNSwweDAzLDB4ZmUsMHhlOSwweDBjLDB4MDAsMHgyNiwweGEwLDB4MTYsMHgwMCwweDI0LDB4MWYKLSwweDMyLDB4ZTQsMHgwMywweGYwLDB4MDMsMHhmZSwweGEwLDB4OTUsMHgzNiwweDNjLDB4MDAsMHg3NSwweDAzLDB4ZTksMHg5YywweDAwCi0sMHgzYywweDAxLDB4NzQsMHgwYiwweDNjLDB4MDIsMHg3NCwweDE0LDB4M2MsMHgwMywweDc0LDB4MWQsMHhlOSwweDhkLDB4MDAsMHhjNgotLDB4MDYsMHg5NiwweDM2LDB4MDEsMHhlOCwweDNjLDB4MDEsMHg3MiwweDI3LDB4ZTksMHg4MCwweDAwLDB4YzYsMHgwNiwweDk2LDB4MzYKLSwweDAyLDB4ZTgsMHg4MywweDAwLDB4NzIsMHgxYSwweGU5LDB4NzMsMHgwMCwweGM2LDB4MDYsMHg5NiwweDM2LDB4MDEsMHhlOCwweDIyCi0sMHgwMSwweDcyLDB4MGQsMHhjNiwweDA2LDB4OTYsMHgzNiwweDAyLDB4ZTgsMHg2YywweDAwLDB4NzIsMHgwMywweGU5LDB4NWMsMHgwMAotLDB4NTMsMHgwNiwweDUwLDB4YzQsMHgxZSwweDhjLDB4MzYsMHhiOSwweDBiLDB4MDAsMHgzMywweGMwLDB4ZTgsMHg0MiwweDA4LDB4NTgKLSwweDI2LDB4YzYsMHgwNywweDgyLDB4MjYsMHhjNiwweDQ3LDB4MDIsMHhmZiwweDhkLDB4MDYsMHhlMCwweGZlLDB4ODYsMHhjNCwweDI2Ci0sMHg4OSwweDQ3LDB4MDYsMHhhMCwweDk2LDB4MzYsMHgyNiwweDg4LDB4NDcsMHgwOCwweGU4LDB4YzgsMHgwOCwweDA3LDB4NWIsMHg4MwotLDB4MjYsMHhhZCwweDM2LDB4ZmUsMHhhMSwweGFkLDB4MzYsMHhlNywweDA0LDB4YmEsMHgxMCwweDAxLDB4YjgsMHg4MCwweDgwLDB4ZWYKLSwweGVkLDB4YmEsMHgxMCwweDAxLDB4YjgsMHgwMiwweDAyLDB4ZWYsMHhlZCwweDUyLDB4YmEsMHhlMCwweDAwLDB4YjgsMHg0MSwweDEwCi0sMHhlZiwweDVhLDB4YjgsMHg5YywweDAzLDB4Y2QsMHgzOSwweGM2LDB4MDYsMHg5NSwweDM2LDB4MDAsMHg4YywweGMwLDB4NDgsMHg4ZQotLDB4YzAsMHhmYSwweGU4LDB4YTksMHgwZiwweGZiLDB4YzMsMHgxZSwweDA2LDB4MWYsMHgwNiwweDMzLDB4YzAsMHg4ZSwweGMwLDB4OGIKLSwweGYwLDB4OGQsMHgzZSwweDIwLDB4ZjMsMHg1MSwweGIxLDB4MGEsMHgyNiwweDgzLDB4N2QsMHgwYywweDAxLDB4NzUsMHgyYSwweDU3Ci0sMHgyNiwweDgzLDB4N2QsMHgwZSwweDAwLDB4NzQsMHgwNiwweGU4LDB4MmYsMHgwMCwweGU5LDB4MDMsMHgwMCwweGU4LDB4NjYsMHgwNwotLDB4NWYsMHg3MywweDE2LDB4MzMsMHhjMCwweDhlLDB4ZDgsMHgyNiwweDhiLDB4NGQsMHgxMiwweDhkLDB4NzUsMHgyMCwweDhkLDB4M2UKLSwweGUwLDB4ZmUsMHhmMywweGE0LDB4NTksMHgwNywweDFmLDB4ZjksMHhjMywweGZlLDB4YzksMHg3NCwweDA3LDB4ODEsMHhjNywweDIwCi0sMHgwMSwweGU5LDB4YzQsMHhmZiwweDU5LDB4MDcsMHgxZiwweGY4LDB4YzMsMHg1MSwweDUwLDB4NTMsMHg1NiwweDUyLDB4NTcsMHgzMwotLDB4ZGIsMHgyNiwweDhhLDB4NWQsMHgwZSwweDI2LDB4OGIsMHg0ZCwweDEyLDB4OGQsMHg3ZCwweDIwLDB4NWEsMHg4NywweGQ3LDB4MjYKLSwweDhhLDB4NDUsMHgxNCwweDg3LDB4ZDcsMHg0MiwweDMyLDB4ZmYsMHg4MCwweGZmLDB4MDgsMHg3NSwweDA4LDB4ZmUsMHhjYiwweDIyCi0sMHhkYiwweDc1LDB4ZWEsMHgzMywweGRiLDB4MjMsMHhkYiwweDc0LDB4MDYsMHhmZSwweGM3LDB4ZDAsMHhjOCwweDczLDB4MGMsMHg1MAotLDB4MjYsMHg4YSwweDA1LDB4MzgsMHgwNCwweDU4LDB4NzQsMHgwMywweGU5LDB4MGEsMHgwMCwweDQ5LDB4NDYsMHg0NywweDIzLDB4YzkKLSwweDc0LDB4MGEsMHhlOSwweGQzLDB4ZmYsMHg1YSwweDVlLDB4NWIsMHg1OCwweDU5LDB4ZjgsMHhjMywweDVhLDB4NWUsMHg1YiwweDU4Ci0sMHg1OSwweGY5LDB4YzMsMHgxZSwweDA2LDB4MWYsMHgwNiwweDMzLDB4YzAsMHg4ZSwweGMwLDB4ODYsMHhjZCwweDJiLDB4Y2UsMHg4YgotLDB4ZjcsMHg4YiwweGMxLDB4MzMsMHhjOSwweDgwLDB4M2MsMHhmZiwweDc0LDB4MTYsMHg4MCwweGY5LDB4MDYsMHg3MywweDA5LDB4MzIKLSwweGM5LDB4NDYsMHg0OCwweDc0LDB4MmUsMHhlOSwweGVkLDB4ZmYsMHgzZCwweDYwLDB4MDAsMHg3MywweDBjLDB4ZTksMHgyMywweDAwCi0sMHhmZSwweGMxLDB4NDYsMHg0OCwweDc0LDB4MWQsMHhlOSwweGRjLDB4ZmYsMHhiOCwweDEwLDB4MDAsMHg4ZCwweDNlLDB4MTgsMHgzNAotLDB4MzIsMHhlZCwweGIxLDB4MDYsMHhmMywweGE2LDB4NzQsMHgwMywweGU5LDB4MDgsMHgwMCwweDQ4LDB4MjMsMHhjMCwweDc0LDB4MDcKLSwweGU5LDB4ZTksMHhmZiwweDA3LDB4MWYsMHhmOCwweGMzLDB4OGQsMHgzNiwweDE4LDB4MzQsMHgzMywweGMwLDB4OGUsMHhkOCwweDhkCi0sMHgzZSwweGUwLDB4ZmUsMHhiOCwweDEwLDB4MDAsMHhiOSwweDA2LDB4MDAsMHg1NiwweGYzLDB4YTQsMHg1ZSwweDQ4LDB4M2QsMHgwMAotLDB4MDAsMHg3NSwweGYzLDB4MDcsMHgxZiwweGY5LDB4YzMsMHhmZiwweDA2LDB4ZTQsMHgzMywweGM2LDB4MDYsMHhlYiwweDM0LDB4MDAKLSwweDI2LDB4OGIsMHg0NSwweDA2LDB4ODYsMHhlMCwweGMxLDB4ZTgsMHgwNCwweDQ4LDB4MDYsMHg4ZSwweGMwLDB4ZmUsMHgwNiwweGU2Ci0sMHgzYSwweGZhLDB4ZTgsMHg2OSwweDBlLDB4ZmIsMHgwNywweGIwLDB4ZmYsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4YjAsMHgwMSwweGMzLDB4YjAsMHgwMCwweGMzLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDA0LDB4YzMKLSwweDhiLDB4MGUsMHg5NywweDM2LDB4ODEsMHhlMSwweDgwLDB4MzAsMHgyNiwweDhiLDB4NDcsMHgwNCwweDI1LDB4N2YsMHhjZiwweDBiCi0sMHhjMSwweGEzLDB4OTcsMHgzNiwweGEzLDB4ZTYsMHgzNCwweGIwLDB4MDAsMHhjMywweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NAotLDB4MDMsMHhiMCwweDAzLDB4YzMsMHgyNiwweDhiLDB4NDcsMHgwOCwweGEzLDB4OTcsMHgzNiwweGEzLDB4ZTYsMHgzNCwweDI2LDB4OGEKLSwweDQ3LDB4MjAsMHhhMiwweGZkLDB4MzQsMHgzYywweDAxLDB4NzUsMHgwNiwweGM3LDB4MDYsMHhhMSwweDM2LDB4MDAsMHgwMCwweDI2Ci0sMHg4YSwweDQ3LDB4MjEsMHhhMiwweGZlLDB4MzQsMHgyNiwweDhiLDB4NDcsMHgwYSwweGEzLDB4MTgsMHgzNCwweGEzLDB4NTgsMHgzNAotLDB4MjYsMHg4YiwweDQ3LDB4MGMsMHhhMywweDFhLDB4MzQsMHhhMywweDVhLDB4MzQsMHgyNiwweDhiLDB4NDcsMHgwZSwweGEzLDB4MWMKLSwweDM0LDB4YTMsMHg1YywweDM0LDB4YzYsMHgwNiwweDJhLDB4MzQsMHhjMCwweDI2LDB4OGIsMHg0NywweDE0LDB4MjUsMHg3ZiwweGZmCi0sMHgwOSwweDA2LDB4MmMsMHgzNCwweDI2LDB4OGIsMHg0NywweDE2LDB4MjUsMHhmZiwweGZlLDB4MjUsMHhmZiwweGZjLDB4MDksMHgwNgotLDB4MmUsMHgzNCwweGM2LDB4MDYsMHgwMCwweDM0LDB4YzAsMHgyNiwweDhiLDB4NDcsMHgxMCwweGEzLDB4MDIsMHgzNCwweDI2LDB4OGIKLSwweDQ3LDB4MTIsMHhhMywweDA0LDB4MzQsMHgwNiwweDUzLDB4ZTgsMHg4NCwweDBhLDB4NWIsMHgwNywweDNkLDB4MDAsMHgwMCwweDc1Ci0sMHgwNywweDgwLDB4MGUsMHg5MiwweDM2LDB4MDgsMHhiMCwweGZlLDB4YzMsMHhiOSwweDAwLDB4MDEsMHhhMSwweGFjLDB4MzMsMHgzMwotLDB4ZDIsMHhmNywweGY5LDB4YTMsMHhhZSwweDMzLDB4OTEsMHg0OSwweDMzLDB4ZDIsMHhmNywweGU5LDB4MDUsMHgwMCwweDNiLDB4YTMKLSwweDQ2LDB4MzQsMHhiZiwweDAwLDB4M2IsMHg4OSwweDNlLDB4NDQsMHgzNCwweGJhLDB4NjgsMHgwMCwweGI4LDB4ZTAsMHhlMCwweGVmCi0sMHhhMSwweGFlLDB4MzMsMHhlNywweDYyLDB4YTEsMHhhZSwweDMzLDB4YmEsMHgwOCwweDAxLDB4ZWYsMHhhMSwweDQ0LDB4MzQsMHhlNwotLDB4NjQsMHhhMSwweDQ0LDB4MzQsMHhiYSwweDBhLDB4MDEsMHhlZiwweGI4LDB4MDAsMHgwMSwweDJkLDB4MDQsMHgwMCwweDBkLDB4MDAKLSwweDEwLDB4ZTcsMHg5MiwweGMzLDB4M2QsMHgwMCwweDAwLDB4NzQsMHgwYSwweDI2LDB4ODksMHg0NywweDA3LDB4ZTgsMHg4MywweDNhCi0sMHhiMCwweDA3LDB4YzMsMHhhMSwweGFlLDB4MzMsMHgyNiwweDg5LDB4NDcsMHgyYiwweGExLDB4NDQsMHgzNCwweDI2LDB4ODksMHg0NwotLDB4MmQsMHhhMSwweDQ2LDB4MzQsMHgyNiwweDg5LDB4NDcsMHgyZiwweDgwLDB4MGUsMHg5MywweDM2LDB4MjAsMHhhMSwweDg4LDB4MzYKLSwweDg2LDB4ZTAsMHgyNiwweDg5LDB4NDcsMHgwOCwweGExLDB4ODQsMHgzNiwweDg2LDB4ZTAsMHgyNiwweDg5LDB4NDcsMHgwYSwweGExCi0sMHg4MCwweDM2LDB4ODYsMHhlMCwweDI2LDB4ODksMHg0NywweDBjLDB4YjgsMHg2MCwweGZlLDB4ODYsMHhlMCwweDI2LDB4ODksMHg0NwotLDB4MGUsMHhhMCwweGExLDB4MzYsMHgyNiwweDg4LDB4NDcsMHgxMCwweDhiLDB4MzYsMHg4OCwweDM2LDB4MjYsMHhjNiwweDQ0LDB4MDIKLSwweGZmLDB4ZTUsMHg5ZSwweGE5LDB4MDAsMHgwOCwweDc0LDB4MGMsMHhiYSwweDg0LDB4MDAsMHhlZCwweDBkLDB4MDgsMHgwMCwweGVmCi0sMHhiYSwweDhlLDB4MDAsMHhlZiwweGU1LDB4MDIsMHgyNSwweGY5LDB4ZmYsMHhlNywweDAyLDB4YmEsMHgxMCwweDAxLDB4YjgsMHgwMgotLDB4MDIsMHhlZiwweGVkLDB4YjAsMHgwMCwweGMzLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDAxLDB4YzMKLSwweDgwLDB4MjYsMHg5MywweDM2LDB4OWYsMHhlOCwweDhkLDB4MGEsMHg4MCwweDBlLDB4OTIsMHgzNiwweDA4LDB4YjAsMHhmZSwweGMzCi0sMHhiMCwweDAwLDB4YzMsMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDQsMHhjMywweGM2LDB4MDYsMHgyYQotLDB4MzQsMHhjMCwweDI2LDB4OGIsMHg0NywweDA2LDB4MjUsMHg3ZiwweGZmLDB4YTMsMHgyYywweDM0LDB4MjYsMHg4YiwweDQ3LDB4MDgKLSwweDI1LDB4ZmYsMHhmZSwweDI1LDB4ZmYsMHhmYywweGEzLDB4MmUsMHgzNCwweGNkLDB4NTIsMHhiMCwweDAwLDB4YzMsMHhmNiwweDA2Ci0sMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwNCwweGMzLDB4YzYsMHgwNiwweDAwLDB4MzQsMHhjMCwweDI2LDB4OGIsMHg0NwotLDB4MDYsMHhhMywweDAyLDB4MzQsMHgyNiwweDhiLDB4NDcsMHgwOCwweGEzLDB4MDQsMHgzNCwweGNkLDB4NTIsMHhiMCwweDAwLDB4YzMKLSwweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwNCwweGMzLDB4NTcsMHg4ZCwweDdmLDB4MDYsMHg1MSwweGI5Ci0sMHgwNywweDAwLDB4MzMsMHhjMCwweGYzLDB4YWIsMHg1OSwweDhkLDB4N2YsMHgwNiwweGExLDB4N2EsMHgzNCwweDAzLDB4MDYsMHgzOQotLDB4MzcsMHgyNiwweDg4LDB4MDUsMHhhMSwweDk1LDB4MzcsMHgyNiwweDg4LDB4NDUsMHgwMiwweGExLDB4ODAsMHgzNCwweDAzLDB4MDYKLSwweDc2LDB4MzQsMHgyNiwweDg4LDB4NDUsMHgwNywweGExLDB4YzYsMHgzNCwweDI2LDB4ODgsMHg0NSwweDA5LDB4YTEsMHhkOCwweDMzCi0sMHgyNiwweDg4LDB4NDUsMHgwYSwweDMzLDB4YzAsMHhhMywweDdhLDB4MzQsMHhhMywweDM5LDB4MzcsMHhhMywweDk1LDB4MzcsMHhhMwotLDB4ODAsMHgzNCwweGEzLDB4NzYsMHgzNCwweGEzLDB4YzYsMHgzNCwweGEzLDB4ZDgsMHgzMywweDVmLDB4YjAsMHgwMCwweGMzLDB4ZjYKLSwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDQsMHhjMywweDI2LDB4OGIsMHg0ZiwweDA0LDB4ODMsMHhmOSwweDA2Ci0sMHg3NCwweDEyLDB4ODMsMHhmOSwweDA0LDB4NzQsMHgwZCwweDgzLDB4ZjksMHgwMCwweDc0LDB4MDgsMHg4MywweGY5LDB4MDIsMHg3NAotLDB4MDMsMHhiMCwweDAxLDB4YzMsMHg4OSwweDBlLDB4ZTgsMHgzYSwweDgzLDB4MjYsMHhhYiwweDM2LDB4ZjksMHgwOSwweDBlLDB4YWIKLSwweDM2LDB4ZTUsMHgwMiwweDI1LDB4ZjksMHhmZiwweDBiLDB4YzEsMHhlNywweDAyLDB4YjAsMHgwMCwweGMzLDB4ZjYsMHgwNiwweDkzCi0sMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDQsMHhjMywweDI2LDB4OGIsMHg0ZiwweDA0LDB4ODAsMHhmOSwweGZmLDB4NzQsMHgwOAotLDB4ODAsMHhmOSwweDAwLDB4NzQsMHgxMCwweGIwLDB4MDEsMHhjMywweDgzLDB4MGUsMHhhZCwweDM2LDB4MDIsMHhhMSwweGFkLDB4MzYKLSwweGU3LDB4MDQsMHhlOSwweDBhLDB4MDAsMHg4MywweDI2LDB4YWQsMHgzNiwweGZkLDB4YTEsMHhhZCwweDM2LDB4ZTcsMHgwNCwweGIwCi0sMHgwMCwweGMzLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDA0LDB4YzMsMHhlOCwweGQ1LDB4MDQsMHhiMAotLDB4MDAsMHhjMywweGY2LDB4MDYsMHg5MywweDM2LDB4ODAsMHg3NSwweDAzLDB4YjAsMHgwMSwweGMzLDB4MjYsMHg4MywweDdmLDB4MDYKLSwweDA1LDB4NzUsMHgwMywweGU5LDB4OWQsMHgwMCwweDI2LDB4OGIsMHg1NywweDA0LDB4MjYsMHg4YiwweDQ3LDB4MDgsMHgyNiwweDgxCi0sMHg3ZiwweDA2LDB4MDAsMHg4MCwweDc1LDB4MDgsMHhlZCwweDI2LDB4ODksMHg0NywweDBhLDB4ZTksMHg5ZCwweDAwLDB4MjYsMHg4MwotLDB4N2YsMHgwNiwweDAxLDB4NzUsMHgwNCwweGVmLDB4ZTksMHg5MiwweDAwLDB4MjYsMHg4MSwweDdmLDB4MDYsMHgwMSwweDgwLDB4NzUKLSwweDA5LDB4ZWYsMHhlZCwweDI2LDB4ODksMHg0NywweDBhLDB4ZTksMHg4MSwweDAwLDB4MjYsMHg4MywweDdmLDB4MDYsMHgwMiwweDc1Ci0sMHgwNywweDI2LDB4MjEsMHg0NywweDA0LDB4ZTksMHg3MywweDAwLDB4MjYsMHg4MSwweDdmLDB4MDYsMHgwMiwweDgwLDB4NzUsMHgwYwotLDB4MjYsMHgyMSwweDQ3LDB4MDQsMHhlZCwweDI2LDB4ODksMHg0NywweDBhLDB4ZTksMHg1ZiwweDAwLDB4MjYsMHg4MywweDdmLDB4MDYKLSwweDAzLDB4NzUsMHgwNywweDI2LDB4MDksMHg0NywweDA0LDB4ZTksMHg1MSwweDAwLDB4MjYsMHg4MSwweDdmLDB4MDYsMHgwMywweDgwCi0sMHg3NSwweDBjLDB4MjYsMHgwOSwweDQ3LDB4MDQsMHhlZCwweDI2LDB4ODksMHg0NywweDBhLDB4ZTksMHgzZCwweDAwLDB4MjYsMHg4MwotLDB4N2YsMHgwNiwweDA0LDB4NzUsMHgwNywweDI2LDB4MzEsMHg0NywweDA0LDB4ZTksMHgyZiwweDAwLDB4MjYsMHg4MSwweDdmLDB4MDYKLSwweDA0LDB4ODAsMHg3NSwweDBjLDB4MjYsMHgzMSwweDQ3LDB4MDQsMHhlZCwweDI2LDB4ODksMHg0NywweDBhLDB4ZTksMHgxYiwweDAwCi0sMHhiMCwweDAxLDB4YzMsMHhmYSwweDUzLDB4MjYsMHg4YiwweDRmLDB4MDgsMHgwYiwweGM5LDB4NzQsMHgwYywweDhkLDB4MWUsMHhlMAotLDB4ZmUsMHhlOCwweDUyLDB4ZmYsMHg4MywweGMzLDB4MDgsMHhlMiwweGY4LDB4NWIsMHhmYiwweGIwLDB4MDAsMHhjMywweGY2LDB4MDYKLSwweDkzLDB4MzYsMHg4MCwweDc1LDB4MGEsMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDEsMHhjMywweDhkCi0sMHgzZSwweGUwLDB4ZmUsMHhlNSwweDAwLDB4MjYsMHg4OSwweDA1LDB4ZTUsMHgwMiwweDI2LDB4ODksMHg0NSwweDAyLDB4YTEsMHhhZAotLDB4MzYsMHgyNiwweDg5LDB4NDUsMHgwNCwweGU1LDB4MDYsMHgyNiwweDg5LDB4NDUsMHgwNiwweGU1LDB4MDgsMHgyNiwweDg5LDB4NDUKLSwweDA4LDB4ZTUsMHgwYSwweDI2LDB4ODksMHg0NSwweDBhLDB4ZTUsMHgwZSwweDI2LDB4ODksMHg0NSwweDBjLDB4ZTUsMHg0OCwweDI2Ci0sMHg4OSwweDQ1LDB4MGUsMHhlNSwweDRhLDB4MjYsMHg4OSwweDQ1LDB4MTAsMHhlNSwweDRjLDB4MjYsMHg4OSwweDQ1LDB4MTIsMHhhMQotLDB4YjcsMHgzNiwweDI2LDB4ODksMHg0NSwweDE0LDB4ZTUsMHg1MCwweDI2LDB4ODksMHg0NSwweDE2LDB4ZTUsMHg1MiwweDI2LDB4ODkKLSwweDQ1LDB4MTgsMHhlNSwweDU0LDB4MjYsMHg4OSwweDQ1LDB4MWEsMHhlNSwweDU2LDB4MjYsMHg4OSwweDQ1LDB4MWMsMHhlNSwweDU4Ci0sMHgyNiwweDg5LDB4NDUsMHgxZSwweGU1LDB4NjIsMHgyNiwweDg5LDB4NDUsMHgyMCwweGU1LDB4NjQsMHgyNiwweDg5LDB4NDUsMHgyMgotLDB4ZTUsMHg2NiwweDI2LDB4ODksMHg0NSwweDI0LDB4ZTUsMHg2OCwweDI2LDB4ODksMHg0NSwweDI2LDB4ZTUsMHg2YSwweDI2LDB4ODkKLSwweDQ1LDB4MjgsMHhlNSwweDZjLDB4MjYsMHg4OSwweDQ1LDB4MmEsMHhlNSwweDcwLDB4MjYsMHg4OSwweDQ1LDB4MmMsMHhlNSwweDcyCi0sMHgyNiwweDg5LDB4NDUsMHgyZSwweGU1LDB4NzQsMHgyNiwweDg5LDB4NDUsMHgzMCwweGU1LDB4NzYsMHgyNiwweDg5LDB4NDUsMHgzMgotLDB4ZTUsMHg3YywweDI2LDB4ODksMHg0NSwweDM0LDB4ZTUsMHg3ZSwweDI2LDB4ODksMHg0NSwweDM2LDB4ZTUsMHg4MCwweDI2LDB4ODkKLSwweDQ1LDB4MzgsMHhlNSwweDgyLDB4MjYsMHg4OSwweDQ1LDB4M2EsMHhlNSwweDg2LDB4MjYsMHg4OSwweDQ1LDB4M2MsMHhlNSwweDg4Ci0sMHgyNiwweDg5LDB4NDUsMHgzZSwweGU1LDB4OWEsMHgyNiwweDg5LDB4NDUsMHg0MCwweGU1LDB4OWUsMHgyNiwweDg5LDB4NDUsMHg0MgotLDB4ZTUsMHhjYywweDI2LDB4ODksMHg0NSwweDQ0LDB4ZTUsMHhjZSwweDI2LDB4ODksMHg0NSwweDQ2LDB4ZTUsMHhkMCwweDI2LDB4ODkKLSwweDQ1LDB4NDgsMHhlNSwweGQyLDB4MjYsMHg4OSwweDQ1LDB4NGEsMHhiYSwweDAwLDB4MDEsMHhlZCwweDExLDB4MDYsMHg2NiwweDM0Ci0sMHg3MywweDA0LDB4ZmYsMHgwNiwweDY4LDB4MzQsMHgyNiwweDg5LDB4NDUsMHg0YywweGJhLDB4MDIsMHgwMSwweGVkLDB4YzEsMHhlMAotLDB4MDIsMHgxMSwweDA2LDB4NmUsMHgzNCwweDczLDB4MDQsMHhmZiwweDA2LDB4NzAsMHgzNCwweDI2LDB4ODksMHg0NSwweDRlLDB4YmEKLSwweDA0LDB4MDEsMHhlZCwweDExLDB4MDYsMHg2YSwweDM0LDB4NzMsMHgwNCwweGZmLDB4MDYsMHg2YywweDM0LDB4MjYsMHg4OSwweDQ1Ci0sMHg1MCwweGJhLDB4MDYsMHgwMSwweGVkLDB4YzEsMHhlMCwweDAyLDB4MTEsMHgwNiwweDcyLDB4MzQsMHg3MywweDA0LDB4ZmYsMHgwNgotLDB4NzQsMHgzNCwweDI2LDB4ODksMHg0NSwweDUyLDB4YmEsMHgwOCwweDAxLDB4ZWQsMHgyNiwweDg5LDB4NDUsMHg1NCwweGJhLDB4MGEKLSwweDAxLDB4ZWQsMHgyNiwweDg5LDB4NDUsMHg1NiwweGJhLDB4MGMsMHgwMSwweGVkLDB4MjYsMHg4OSwweDQ1LDB4NTgsMHhiYSwweDBlCi0sMHgwMSwweGVkLDB4MDEsMHgwNiwweDdhLDB4MzQsMHgyNiwweDg5LDB4NDUsMHg1ZSwweGJhLDB4MTAsMHgwMSwweGVkLDB4MjYsMHg4OQotLDB4NDUsMHg1YywweGIwLDB4MDAsMHhjMywweGY2LDB4MDYsMHg5MywweDM2LDB4ODAsMHg3NCwweDA3LDB4ZjYsMHgwNiwweDkzLDB4MzYKLSwweDIwLDB4NzUsMHgwMywweGIwLDB4MDEsMHhjMywweDI2LDB4ODAsMHg3ZiwweDA2LDB4MDAsMHg3NSwweDMwLDB4ODAsMHgzZSwweDk1Ci0sMHgzNiwweDAwLDB4NzQsMHg1MiwweGM2LDB4MDYsMHg5NSwweDM2LDB4MDAsMHg4MywweDI2LDB4YWQsMHgzNiwweGZlLDB4YTEsMHhhZAotLDB4MzYsMHhlNywweDA0LDB4YmEsMHgxMCwweDAxLDB4YjgsMHg4MCwweDgwLDB4ZWYsMHhlZCwweGJhLDB4MTAsMHgwMSwweGI4LDB4MDIKLSwweDAyLDB4ZWYsMHhlZCwweGJhLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgxMCwweGVmLDB4YjAsMHgwMCwweGMzLDB4MjYsMHg4YiwweDQ3Ci0sMHgwNCwweDNkLDB4MDAsMHgwMCwweDc0LDB4MjAsMHgzZCwweDAzLDB4MDAsMHg3NywweDFiLDB4YmEsMHgxMCwweDAxLDB4YjgsMHgwMgotLDB4MDAsMHhlZiwweGJhLDB4ZTAsMHgwMCwweGI4LDB4MDEsMHgxMCwweGVmLDB4ODMsMHgwZSwweGFkLDB4MzYsMHgwMSwweGExLDB4YWQKLSwweDM2LDB4ZTcsMHgwNCwweGIwLDB4MDAsMHhjMywweGIwLDB4MDYsMHhjMywweGY2LDB4MDYsMHg5MywweDM2LDB4ODAsMHg3NSwweDAzCi0sMHhiMCwweDAxLDB4YzMsMHgyNiwweDgzLDB4N2YsMHgwNCwweDAxLDB4NzQsMHgwYSwweDI2LDB4ODMsMHg3ZiwweDA0LDB4MDIsMHg3NAotLDB4MTksMHhiMCwweDA2LDB4YzMsMHgyNiwweDgzLDB4N2YsMHgwNiwweDBjLDB4NzcsMHhmNiwweDI2LDB4ODMsMHg3ZiwweDBhLDB4NjAKLSwweDc3LDB4ZWYsMHhlOCwweDEwLDB4MDAsMHg3MiwweDBiLDB4YjAsMHg0NiwweGMzLDB4ZTgsMHg0ZSwweDAwLDB4NzIsMHgwMywweGIwCi0sMHg0NiwweGMzLDB4YjAsMHgwMCwweGMzLDB4NTEsMHhiMSwweDBhLDB4OGIsMHgzZSwweDIwLDB4ZjMsMHgyNiwweDgzLDB4N2QsMHgwYwotLDB4MDIsMHg3NSwweDAzLDB4ZTksMHgwZSwweDAwLDB4ZmUsMHhjOSwweDc0LDB4MDcsMHg4MSwweGM3LDB4MjAsMHgwMSwweGU5LDB4ZWIKLSwweGZmLDB4NTksMHhmOCwweGMzLDB4NTcsMHg4ZCwweDdkLDB4MGUsMHg4ZCwweDc3LDB4MDYsMHhiOSwweDEyLDB4MDAsMHhmMywweGE0Ci0sMHg4ZCwweDdkLDB4MjAsMHg4ZCwweDM2LDB4ZTAsMHhmZSwweDI2LDB4OGIsMHg0ZCwweDEyLDB4ZjMsMHhhNCwweGZmLDB4MDYsMHgwMQotLDB4MzUsMHg1ZiwweDI2LDB4YzcsMHg0NSwweDBjLDB4MDEsMHgwMCwweDU5LDB4ZjksMHhjMywweDUxLDB4YjEsMHgwYSwweDhkLDB4M2UKLSwweDIwLDB4ZjMsMHg4ZCwweDM2LDB4ZTAsMHhmZSwweDI2LDB4ODMsMHg3ZCwweDBjLDB4MDEsMHg3NSwweDFiLDB4NTcsMHhlOCwweDI1Ci0sMHgwMCwweDVmLDB4NzMsMHgxNCwweDMzLDB4YzAsMHhiOSwweDIwLDB4MDEsMHhmMywweGFhLDB4MjYsMHhjNywweDQ1LDB4MGMsMHgwMgotLDB4MDAsMHhmZiwweDBlLDB4MDEsMHgzNSwweDU5LDB4ZjksMHhjMywweGZlLDB4YzksMHg3NCwweDA3LDB4ODEsMHhjNywweDIwLDB4MDEKLSwweGU5LDB4ZDMsMHhmZiwweDU5LDB4ZjgsMHhjMywweDUxLDB4MjYsMHg4YiwweDRkLDB4MTIsMHg4ZCwweDdkLDB4MjAsMHhmMywweGE2Ci0sMHg3NCwweDAzLDB4NTksMHhmOCwweGMzLDB4NTksMHhmOSwweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4ODAsMHgzZSwweGVjLDB4MzQsMHgwNiwweDcyLDB4MzMsMHhmZiwweDA2LDB4ZjAsMHgzMywweDUwLDB4YzQsMHgxZSwweDhjLDB4MzYKLSwweGI5LDB4MGYsMHgwMCwweDMzLDB4YzAsMHhlOCwweDI5LDB4MDAsMHg1OCwweDgxLDB4MjYsMHhjMiwweDM0LDB4ZGYsMHg3ZiwweDgxCi0sMHgyNiwweGU5LDB4MzQsMHhkZiwweDdmLDB4MGIsMHhkYiwweDc0LDB4MTEsMHgyNiwweGM2LDB4MDcsMHg4NCwweDI2LDB4YzYsMHg0NwotLDB4MDIsMHhmZiwweDI2LDB4ODksMHg0NywweDA2LDB4ZTgsMHhhYywweDAwLDB4YzMsMHhmZiwweDA2LDB4ZWEsMHgzMywweGU5LDB4ZjUKLSwweGZmLDB4NTcsMHgyNiwweDhiLDB4M2YsMHgwMywweGY5LDB4MjYsMHgzYiwweDdmLDB4MDIsMHg3NCwweDE2LDB4MjYsMHgzYiwweDdmCi0sMHgwNCwweDdjLDB4MmEsMHgzZCwweDAwLDB4MDAsMHg3NSwweDEzLDB4OGQsMHg3ZiwweDA4LDB4MDMsMHhmOSwweDI2LDB4M2IsMHg3ZgotLDB4MDIsMHg3YywweDE0LDB4ZmYsMHgwNiwweGRlLDB4MzMsMHgzMywweGRiLDB4NWYsMHhjMywweDI2LDB4OGIsMHg3ZiwweDAyLDB4MjYKLSwweDg5LDB4M2YsMHgwMywweGY5LDB4ZTksMHgwNiwweDAwLDB4MjYsMHg4OSwweDNmLDB4MjYsMHgyOSwweDBmLDB4MjYsMHhjNywweDA1Ci0sMHhmZiwweGZmLDB4MjYsMHg4NywweDNmLDB4MjYsMHg4OSwweDBkLDB4OGQsMHg1ZCwweDAyLDB4NTAsMHg4YiwweGZiLDB4ODMsMHhlOQotLDB4MDIsMHgzMywweGMwLDB4ZjMsMHhhYSwweDU4LDB4ZmUsMHgwZSwweGVjLDB4MzQsMHg1ZiwweGMzLDB4OGIsMHg3YywweDAyLDB4M2IKLSwweDNjLDB4NzQsMHgyZiwweDgzLDB4M2QsMHhmZiwweDc1LDB4MGIsMHg4ZCwweDdjLDB4MDgsMHg4OSwweDdjLDB4MDIsMHg4MywweDNkCi0sMHhmZiwweDc0LDB4MWUsMHg4YSwweDQ1LDB4MDIsMHgzYywweDgxLDB4NzUsMHgwYywweDgwLDB4M2UsMHhlYiwweDM0LDB4MDAsMHg3NAotLDB4MDUsMHgzMywweGMwLDB4ZTksMHgwYiwweDAwLDB4OGIsMHgwZCwweDAxLDB4NGMsMHgwMiwweDhkLDB4NzUsMHgwMiwweDgzLDB4ZTkKLSwweDAyLDB4YzMsMHg4MCwweDNlLDB4ZWMsMHgzNCwweDA2LDB4NzIsMHgwNSwweDMzLDB4YzAsMHhlOSwweGYzLDB4ZmYsMHhmZiwweDA2Ci0sMHhlZSwweDMzLDB4ZTksMHhiZSwweGZmLDB4ZjYsMHgwNiwweDkyLDB4MzYsMHg0MCwweDc0LDB4MDEsMHhjMywweDU3LDB4NTYsMHg1MQotLDB4NTIsMHg4YiwweDM2LDB4OGMsMHgzNiwweGU4LDB4YTQsMHhmZiwweDc1LDB4MDMsMHhlOSwweDFhLDB4MDAsMHhlOSwweDFjLDB4MDAKLSwweGZlLDB4MDYsMHhlYywweDM0LDB4YzQsMHgzZSwweDgwLDB4MzYsMHhmMywweGE0LDB4ODAsMHgwZSwweDkyLDB4MzYsMHg0MCwweGJhCi0sMHgwYywweDAxLDB4YjgsMHg4MCwweDgwLDB4ZWYsMHhlZCwweDVhLDB4NTksMHg1ZSwweDVmLDB4YzMsMHhmZiwweDA2LDB4ZTAsMHgzMwotLDB4ODAsMHgzYywweDgxLDB4NzUsMHgwYywweGZmLDB4MDYsMHhlMiwweDMzLDB4YzYsMHgwNiwweGViLDB4MzQsMHgwMSwweGU5LDB4Y2YKLSwweGZmLDB4ODAsMHgzYywweDg0LDB4NzUsMHgwNywweGZmLDB4MDYsMHhlNiwweDMzLDB4ZTksMHhjMywweGZmLDB4ZmYsMHgwNiwweGU4Ci0sMHgzMywweGU5LDB4YmMsMHhmZiwweDhkLDB4M2UsMHhlMCwweGZlLDB4YTEsMHg3MiwweDM0LDB4YzcsMHgwNiwweDcyLDB4MzQsMHgwMAotLDB4MDAsMHg4OSwweDA1LDB4YTEsMHg3NCwweDM0LDB4YzcsMHgwNiwweDc0LDB4MzQsMHgwMCwweDAwLDB4ODksMHg0NSwweDAyLDB4YmEKLSwweDA0LDB4MDEsMHhlZCwweDg5LDB4NDUsMHgwNCwweGM3LDB4NDUsMHgwNiwweDAwLDB4MDAsMHhhMSwweDZlLDB4MzQsMHhjNywweDA2Ci0sMHg2ZSwweDM0LDB4MDAsMHgwMCwweDg5LDB4NDUsMHgwOCwweGExLDB4NzAsMHgzNCwweGM3LDB4MDYsMHg3MCwweDM0LDB4MDAsMHgwMAotLDB4ODksMHg0NSwweDBhLDB4YmEsMHgwMCwweDAxLDB4ZWQsMHg4OSwweDQ1LDB4MGMsMHhjNywweDQ1LDB4MGUsMHgwMCwweDAwLDB4MzIKLSwweGU0LDB4YmEsMHgwZSwweDAxLDB4ZWMsMHg4OSwweDQ1LDB4MTAsMHhhMSwweDdlLDB4MzQsMHhjNywweDA2LDB4N2UsMHgzNCwweDAwCi0sMHgwMCwweDg5LDB4NDUsMHgxMiwweGExLDB4OGMsMHgzNCwweGM3LDB4MDYsMHg4YywweDM0LDB4MDAsMHgwMCwweDg5LDB4NDUsMHgxNAotLDB4YTEsMHg4YSwweDM0LDB4YzcsMHgwNiwweDhhLDB4MzQsMHgwMCwweDAwLDB4ODksMHg0NSwweDE2LDB4YTEsMHg3YywweDM0LDB4YzcKLSwweDA2LDB4N2MsMHgzNCwweDAwLDB4MDAsMHg4OSwweDQ1LDB4MTgsMHhhMSwweDg4LDB4MzQsMHhjNywweDA2LDB4ODgsMHgzNCwweDAwCi0sMHgwMCwweDg5LDB4NDUsMHgxYSwweGExLDB4Y2EsMHgzMywweGM3LDB4MDYsMHhjYSwweDMzLDB4MDAsMHgwMCwweDg5LDB4NDUsMHgxYwotLDB4YTEsMHg3OCwweDM0LDB4YzcsMHgwNiwweDc4LDB4MzQsMHgwMCwweDAwLDB4ODksMHg0NSwweDFlLDB4YTEsMHhjNiwweDM0LDB4YzcKLSwweDA2LDB4YzYsMHgzNCwweDAwLDB4MDAsMHg4OSwweDQ1LDB4MjAsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHhmYSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4OGUsMHhjMCwweGI4LDB4YTAsMHgwMSwweGMxLDB4ZTgsMHgwNCwweDhlLDB4ZDAsMHg4ZAotLDB4MjYsMHg4MCwweDAwLDB4ZTgsMHgwMCwweDAxLDB4ZTgsMHgxMCwweGViLDB4OGIsMHgxZSwweGY3LDB4MzQsMHg4YiwweDE2LDB4ZjkKLSwweDM0LDB4OGIsMHgzNiwweGZmLDB4MzQsMHgzMywweGMwLDB4YjksMHhlZiwweGZmLDB4OGQsMHgzZSwweDE0LDB4MDAsMHgyYiwweGNmCi0sMHgyYiwweGNlLDB4ZDEsMHhlOSwweGYzLDB4YWIsMHg4OSwweDFlLDB4ZjcsMHgzNCwweDg5LDB4MTYsMHhmOSwweDM0LDB4ODMsMHhmZQotLDB4MDAsMHg3NCwweDBjLDB4YjksMHhlZiwweGZmLDB4YmYsMHg4MCwweGZlLDB4MmIsMHhjZiwweGQxLDB4ZTksMHhmMywweGFiLDB4YjkKLSwweGZmLDB4ZmYsMHg4MSwweGU5LDB4MDAsMHgzYiwweDgzLDB4ZmUsMHgwMCwweDc0LDB4MDMsMHhlOSwweDFiLDB4MDAsMHg1MSwweDFlCi0sMHhiOCwweDAwLDB4ZTAsMHg4ZSwweGQ4LDB4MzMsMHhmNiwweDhkLDB4M2UsMHgwMCwweGQ4LDB4YjksMHgwMCwweDBjLDB4ZjMsMHhhNQotLDB4MWYsMHg1OSwweGJlLDB4ZmYsMHhmZiwweDgxLDB4ZWUsMHgwMCwweGQ4LDB4MmIsMHhjZSwweDgxLDB4ZTEsMHgwMCwweGZmLDB4ODkKLSwweDBlLDB4YWMsMHgzMywweDhkLDB4MDYsMHgyMCwweDAyLDB4YzEsMHhlOCwweDA0LDB4YTMsMHgzMiwweDM0LDB4OGUsMHhkMCwweDM2Ci0sMHhjNywweDA2LDB4MWUsMHgwMCwweDgwLDB4MTgsMHgzNiwweGM3LDB4MDYsMHgyMiwweDAwLDB4ZmYsMHg3ZiwweDM2LDB4YzcsMHgwNgotLDB4MGEsMHgwMCwweGZmLDB4ZmYsMHgzNiwweGM3LDB4MDYsMHgxYywweDAwLDB4ODAsMHgwMCwweDhkLDB4MDYsMHhhMCwweDAyLDB4YzEKLSwweGU4LDB4MDQsMHhhMywweDMwLDB4MzQsMHg4ZSwweGQwLDB4MzYsMHhjNywweDA2LDB4MWUsMHgwMCwweDUwLDB4MjgsMHgzNiwweGM3Ci0sMHgwNiwweDBhLDB4MDAsMHhmZiwweGZmLDB4MzYsMHhjNywweDA2LDB4MWMsMHgwMCwweDgwLDB4MDAsMHhiOCwweGEwLDB4MDEsMHhjMQotLDB4ZTgsMHgwNCwweGEzLDB4MzQsMHgzNCwweGEzLDB4ZjIsMHgzMywweDhlLDB4ZDAsMHg4ZCwweDI2LDB4ODAsMHgwMCwweGI4LDB4MDAKLSwweDkwLDB4ZTcsMHgwMiwweDhkLDB4M2UsMHg3MCwweDAxLDB4OGIsMHhjNywweGMxLDB4ZTgsMHgwNCwweGI5LDB4MDMsMHgwMCwweDg5Ci0sMHg0NSwweDBlLDB4ODksMHg0NSwweDAyLDB4YzcsMHgwNSwweGZmLDB4ZmYsMHg4MywweGM3LDB4MTAsMHgwNSwweDAxLDB4MDAsMHhlMgotLDB4ZWUsMHhlOCwweDViLDB4MDEsMHhlNSwweGNlLDB4YTMsMHhiNSwweDM2LDB4ZTgsMHgyMSwweDAwLDB4ZTgsMHg0NSwweDAxLDB4YTEKLSwweDMyLDB4MzQsMHg4YywweGNiLDB4Y2QsMHgzNywweDBlLDB4NTgsMHhhOSwweDAwLDB4ZjAsMHg3NCwweDA3LDB4MzMsMHhmNiwweDg5Ci0sMHgzNiwweGZmLDB4MzQsMHhjMywweDhkLDB4MzYsMHgzMCwweDYxLDB4ODksMHgzNiwweGZmLDB4MzQsMHhjMywweDMzLDB4YzAsMHg4YgotLDB4ZDAsMHg4YiwweGYyLDB4YjksMHg2OCwweDAwLDB4MmUsMHg4MCwweGJjLDB4YWMsMHgxNywweDgwLDB4NzUsMHgwMSwweGVmLDB4ODMKLSwweGMyLDB4MDIsMHg0NiwweGUyLDB4ZjEsMHhiOCwweDAyLDB4MDAsMHhlNywweDUwLDB4YjksMHg1YSwweDAwLDB4MzMsMHhmZiwweGM3Ci0sMHgwNSwweDY1LDB4MTgsMHg4YywweDRkLDB4MDIsMHg4MywweGM3LDB4MDQsMHhlMiwweGY0LDB4MzMsMHhjMCwweDhlLDB4YzAsMHg4YwotLDB4YzgsMHg4ZSwweGQ4LDB4OGQsMHgzZSwweDgwLDB4MDAsMHg4ZCwweDM2LDB4OWMsMHgxNywweGI5LDB4MDgsMHgwMCwweGU4LDB4MzcKLSwweDAwLDB4OGQsMHgzNiwweDIwLDB4MjEsMHg4ZCwweDNlLDB4YzAsMHgwMCwweGI5LDB4MGQsMHgwMCwweGU4LDB4MjksMHgwMCwweDhkCi0sMHgzZSwweDQwLDB4MDEsMHhiOSwweDBhLDB4MDAsMHhlOCwweDFmLDB4MDAsMHhlOCwweDRiLDB4MGUsMHgzMywweGMwLDB4OGUsMHhkOAotLDB4YzcsMHgwNiwweDRlLDB4MzcsMHg2ZiwweDE3LDB4ZTcsMHg0OCwweGU3LDB4NGMsMHhiOCwweDQwLDB4OWMsMHhlNywweDRhLDB4ZTUKLSwweDQ4LDB4OTAsMHhiOCwweDAwLDB4NzAsMHhlNywweDQ4LDB4YzMsMHhhNSwweDgzLDB4YzcsMHgwMiwweGUyLDB4ZmEsMHhjMywweGU1Ci0sMHg0YywweGMzLDB4NTAsMHg1MSwweDU2LDB4NTcsMHg1MiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOCwweGU1LDB4NTgsMHhkMQotLDB4ZTAsMHg3MywweDExLDB4OGIsMHhmMCwweGQxLDB4ZTYsMHgzMywweGMwLDB4OGUsMHhkOCwweDhiLDB4YjQsMHg4MCwweDAwLDB4ODMKLSwweGM2LDB4MGIsMHhmZiwweGU2LDB4MWYsMHgwNywweDVhLDB4NWYsMHg1ZSwweDU5LDB4NTgsMHhjZiwweDU4LDB4MWMsMHhlNCwweDFjCi0sMHg2YywweDFjLDB4OGUsMHgxYSwweGMwLDB4MWYsMHg0MCwweDFhLDB4NDQsMHgxYywweDY1LDB4MTgsMHg4MCwweDgwLDB4ODAsMHhmZgotLDB4ODAsMHgwMywweDAyLDB4ODAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYKLSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCi0sMHg4MCwweDAzLDB4MDMsMHg0MywweDgwLDB4ODAsMHgwMiwweDgwLDB4NDIsMHgwMywweDAyLDB4ZmYsMHgwMywweDAxLDB4MDMsMHgwMQotLDB4MDEsMHgwMywweDAyLDB4MDMsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MDIsMHgwMywweDAxLDB4MDMKLSwweDAzLDB4ZmYsMHgwMSwweDAxLDB4ZmYsMHgwMSwweGZmLDB4MDEsMHgwMSwweDAzLDB4MDMsMHgwMywweGZmLDB4ZmYsMHhmZiwweGZmCi0sMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgotLDB4ZmYsMHhmZiwweGZmLDB4MDIsMHhiOCwweDBmLDB4MDAsMHhlNywweDg0LDB4YjgsMHgwZiwweGY4LDB4ZTcsMHg4MiwweGMzLDB4YjkKLSwweDA4LDB4MDAsMHg4OSwweDBlLDB4ZTYsMHgzYSwweDhkLDB4MDYsMHgyMCwweDAzLDB4OGIsMHhkMCwweGMxLDB4ZTgsMHgwNCwweGEzCi0sMHg5MCwweDAxLDB4OGIsMHhjMiwweDhiLDB4ZDgsMHhjMSwweGU4LDB4MDQsMHg4ZSwweGMwLDB4MDUsMHg2MSwweDAwLDB4MjYsMHhhMwotLDB4MDAsMHgwMCwweGExLDB4MzAsMHgzNCwweDI2LDB4YTMsMHgwMiwweDAwLDB4ODMsMHhjMywweDE0LDB4ZDEsMHhlYiwweDI2LDB4ODkKLSwweDFlLDB4MDgsMHgwMCwweDgxLDB4YzIsMHgxMCwweDA2LDB4ZTIsMHhkOSwweDI2LDB4YzcsMHgwNiwweDAwLDB4MDAsMHhmZiwweGZmCi0sMHg4YywweDA2LDB4OTIsMHgwMSwweGMzLDB4NTAsMHg1MSwweDU2LDB4NTcsMHg1MiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOAotLDB4ZTcsMHg1YSwweGZmLDB4MDYsMHhiZSwweDMzLDB4YmEsMHhkMiwweDAwLDB4ZWQsMHhjZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDhjLDB4Y2IsMHhhMSwweDMwLDB4MzQsMHhjZCwweDM3LDB4ZTksMHgwNiwweGVkLDB4YjgsMHgzMiwweDAwLDB4YzMsMHhlOCwweDhjCi0sMHgwMSwweGZlLDB4MDYsMHhlMiwweDM0LDB4ZTgsMHgyMSwweDAxLDB4NzUsMHhmMCwweGU4LDB4NTMsMHgwZSwweDgxLDB4MGUsMHhhZgotLDB4MzYsMHgwMCwweGMwLDB4YzcsMHgwNiwweGFkLDB4MzYsMHg2MCwweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHg4MCwweDAwLDB4NzUKLSwweDFhLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgwMCwweDA4LDB4NzQsMHgwOSwweGM3LDB4MDYsMHhhYiwweDM2LDB4MGIsMHgwMCwweGU5Ci0sMHgwZiwweDAwLDB4YzcsMHgwNiwweGFiLDB4MzYsMHgwMywweDAwLDB4ZTksMHgwNiwweDAwLDB4YzcsMHgwNiwweGFiLDB4MzYsMHgxMQotLDB4OWMsMHhjNywweDA2LDB4YTksMHgzNiwweDE4LDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDgwLDB4MDAsMHg3NSwweDBkLDB4ZjcKLSwweDA2LDB4YjUsMHgzNiwweDAyLDB4MDAsMHg3NCwweDA1LDB4ODMsMHgwZSwweGE5LDB4MzYsMHgyMCwweGExLDB4YTksMHgzNiwweGU3Ci0sMHgwMCwweGExLDB4YWIsMHgzNiwweGU3LDB4MDIsMHhmNywweDA2LDB4ZTYsMHgzNCwweDgwLDB4MDAsMHg3NCwweDJlLDB4ZTgsMHhmMgotLDB4MmYsMHgzMywweGMwLDB4MGQsMHg0MSwweDAwLDB4ZTcsMHg1NiwweGExLDB4YjEsMHgzNiwweDBkLDB4MDAsMHgxMCwweGU3LDB4MDgKLSwweGExLDB4YjMsMHgzNiwweGU3LDB4MGEsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4YjgsMHg0MCwweDAwLDB4ZTcsMHg0ZSwweDMzCi0sMHhjMCwweGU3LDB4MGUsMHhjNywweDA2LDB4MjYsMHgwMiwweDAwLDB4MDAsMHhlOSwweDIzLDB4MDAsMHhjNywweDA2LDB4NGUsMHgzNwotLDB4M2YsMHgyMCwweDhlLDB4MDYsMHgzMCwweDM0LDB4MjYsMHhmNywweDA2LDB4MGEsMHgwMCwweDAwLDB4ODAsMHg3NCwweDA3LDB4MjYKLSwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHg4MCwweGM2LDB4MDYsMHhlMCwweDM0LDB4MDEsMHhiOCwweDAwLDB4MDAsMHhjMywweGZlCi0sMHgwNiwweGUxLDB4MzQsMHhjNiwweDA2LDB4ZTAsMHgzNCwweDAwLDB4YTEsMHgyNiwweDAyLDB4MGIsMHhjMCwweDc0LDB4MDEsMHhjMwotLDB4ZTgsMHgwNCwweDAwLDB4YjgsMHgwMCwweDAwLDB4YzMsMHhhMSwweGE5LDB4MzYsMHhlNywweDAwLDB4OGIsMHgxZSwweGFiLDB4MzYKLSwweDgzLDB4ZTMsMHgwNiwweGU1LDB4MDIsMHgyNSwweGY5LDB4ZmYsMHgwYiwweGMzLDB4MGQsMHgxMCwweDAwLDB4ZTcsMHgwMiwweGExCi0sMHhhZCwweDM2LDB4ZTcsMHgwNCwweGMzLDB4YjgsMHgwYSwweDAwLDB4ZTcsMHg4NCwweGZlLDB4MDYsMHhlNSwweDM0LDB4YzYsMHgwNgotLDB4ZTMsMHgzNCwweDAxLDB4OGUsMHgwNiwweDMwLDB4MzQsMHgyNiwweGY3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHg0MCwweDc0LDB4MDcKLSwweDI2LDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDQwLDB4YzMsMHhjNywweDA2LDB4NGUsMHgzNywweDZmLDB4MTcsMHhmZSwweDA2Ci0sMHhlNCwweDM0LDB4YzYsMHgwNiwweGUzLDB4MzQsMHgwMCwweGMzLDB4YzMsMHhmNiwweDA2LDB4MTgsMHgzNCwweDgwLDB4NzUsMHgwZAotLDB4YTEsMHgxOCwweDM0LDB4MGIsMHgwNiwweDFhLDB4MzQsMHgwYiwweDA2LDB4MWMsMHgzNCwweDc1LDB4MDEsMHhjMywweGExLDB4MmUKLSwweDM0LDB4MjUsMHhmZiwweGZlLDB4OGIsMHgxNiwweGU3LDB4MzYsMHg4MSwweGUyLDB4MDAsMHgwMSwweDBiLDB4YzIsMHhhMywweDJlCi0sMHgzNCwweDhkLDB4MTYsMHgxMCwweDAwLDB4YmYsMHgwMCwweDAwLDB4YjksMHgwOCwweDAwLDB4OGIsMHg4NSwweDAwLDB4MzQsMHhlZgotLDB4ODMsMHhjMiwweDEwLDB4OGIsMHg4NSwweDAyLDB4MzQsMHhlZiwweDgzLDB4YzIsMHgxMCwweDhiLDB4ODUsMHgwNCwweDM0LDB4ZWYKLSwweDgzLDB4YzIsMHhlMiwweDgzLDB4YzcsMHgwNiwweDQ5LDB4NzUsMHhlMiwweGI4LDB4MDAsMHgwMCwweDhlLDB4YzAsMHhiZSwweDAwCi0sMHgzNCwweGJmLDB4YjksMHgzNiwweGI5LDB4MTgsMHgwMCwweGYzLDB4YTUsMHhiOCwweDAwLDB4MDAsMHhjMywweDMzLDB4YzAsMHg4ZQotLDB4YzAsMHg4ZCwweDNlLDB4YjAsMHgzMywweGI5LDB4MDgsMHgwMCwweGYzLDB4YWIsMHg4ZCwweDNlLDB4M2UsMHgzNCwweGI5LDB4MDMKLSwweDAwLDB4ZjMsMHhhYiwweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHg1MCwweDUxLDB4NTYsMHg1NywweDUyLDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4ZTcsMHg1YSwweGZmLDB4MDYsMHhiYQotLDB4MzMsMHhlNSwweDU2LDB4MGQsMHgyMCwweDAwLDB4ZTcsMHg1NiwweGJhLDB4N2EsMHgwMCwweGVkLDB4MDgsMHgyNiwweDk0LDB4MzYKLSwweDMzLDB4YzAsMHhiMSwweDA4LDB4MzIsMHhlZCwweDA2LDB4OGUsMHhjMCwweDhkLDB4M2UsMHhlMCwweGZmLDB4ZjMsMHhhYSwweDhlCi0sMHgwNiwweDMyLDB4MzQsMHgyNiwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHgwMiwweDA3LDB4ZTUsMHg1NiwweDI1LDB4ZGYsMHhmZgotLDB4ZTcsMHg1NiwweGU5LDB4ZjgsMHhmYywweDAwLDB4YmQsMHgxYiwweDEwLDB4MWIsMHhkOSwweDFhLDB4ZjMsMHgxYSwweDUwLDB4NTEKLSwweDU2LDB4NTcsMHg1MiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOCwweGU3LDB4NWEsMHhmZiwweDA2LDB4YjYsMHgzMywweDUzCi0sMHgwNiwweDUxLDB4ZTUsMHg4MCwweGEzLDB4YjQsMHgzMywweDhiLDB4ZDgsMHg4YiwweGM4LDB4MjUsMHgxMCwweDAwLDB4YTMsMHhlZAotLDB4MzQsMHgwYiwweGMwLDB4NzQsMHgxNCwweGZmLDB4MDYsMHg4MCwweDM0LDB4ODAsMHgzZSwweGZlLDB4MzQsMHgwMCwweDc0LDB4MDMKLSwweGU5LDB4MDYsMHgwMCwweGI4LDB4ODAsMHgwMCwweGU4LDB4OWQsMHgwNCwweDgzLDB4ZTMsMHgwMywweGQxLDB4ZTMsMHgyZSwweGZmCi0sMHg5NywweDg2LDB4MWEsMHg1OSwweDA3LDB4NWIsMHhlOSwweGE0LDB4ZmMsMHhiYSwweDIwLDB4MDAsMHg4ZSwweDA2LDB4M2MsMHgzNAotLDB4ODMsMHgzZSwweDNjLDB4MzQsMHgwMCwweDc1LDB4MDMsMHhlOSwweGYwLDB4MDAsMHhjNywweDA2LDB4M2MsMHgzNCwweDAwLDB4MDAKLSwweGU5LDB4MmEsMHgwMCwweGJhLDB4MTAsMHgwMCwweDhlLDB4MDYsMHgzYSwweDM0LDB4ODMsMHgzZSwweDNhLDB4MzQsMHgwMCwweDc1Ci0sMHgwMywweGU5LDB4ZDUsMHhmZiwweGM3LDB4MDYsMHgzYSwweDM0LDB4MDAsMHgwMCwweGU4LDB4MTAsMHgwMCwweGU5LDB4YzksMHhmZgotLDB4YmEsMHgxMCwweDAwLDB4OGUsMHgwNiwweDNhLDB4MzQsMHhjNywweDA2LDB4M2EsMHgzNCwweDAwLDB4MDAsMHgyNiwweGExLDB4MTQKLSwweDAwLDB4MjYsMHhhMywweDBjLDB4MDAsMHgyNiwweGExLDB4MTYsMHgwMCwweDI2LDB4YTMsMHgwZSwweDAwLDB4MjYsMHhjNiwweDA2Ci0sMHgwYSwweDAwLDB4MDAsMHhjMSwweGVhLDB4MDIsMHgyMywweGQxLDB4NzQsMHgxYywweGJhLDB4MjAsMHgwMCwweDI2LDB4YzcsMHgwNgotLDB4MGUsMHgwMCwweGVhLDB4MDUsMHgyNiwweDBiLDB4MTYsMHgwYywweDAwLDB4MjYsMHg4OSwweDE2LDB4MGMsMHgwMCwweGZmLDB4MDYKLSwweDg2LDB4MzQsMHhmZiwweDA2LDB4ZGMsMHgzMywweDI2LDB4YTEsMHgwYywweDAwLDB4YTksMHgwMCwweDM3LDB4NzQsMHgxNiwweDI2Ci0sMHhjNiwweDA2LDB4MGEsMHgwMCwweDAyLDB4YTksMHgwMCwweDMwLDB4NzQsMHgwNCwweGZmLDB4MDYsMHg3YSwweDM0LDB4ZmYsMHgwNgotLDB4ZGEsMHgzMywweGU5LDB4NDksMHgwMCwweGMwLDB4ZWMsMHgwNywweDgzLDB4MTYsMHg4YSwweDM0LDB4MDAsMHgyNCwweDA3LDB4M2MKLSwweDA3LDB4NzUsMHgwNCwweGZmLDB4MDYsMHg4YywweDM0LDB4ZmYsMHgwNiwweDdlLDB4MzQsMHhhMSwweDMwLDB4MzQsMHg4YywweGMzCi0sMHg4ZSwweGMwLDB4OGUsMHhkYiwweDI2LDB4ODMsMHgwZSwweDA4LDB4MDAsMHg0MCwweDhjLDB4ZDgsMHgyNiwweDg3LDB4MDYsMHgxNgotLDB4MDAsMHgyNiwweDgzLDB4M2UsMHgxNCwweDAwLDB4ZmYsMHg3NCwweDBhLDB4OGUsMHhjMCwweDI2LDB4OGMsMHgxZSwweDAwLDB4MDAKLSwweGU5LDB4MDUsMHgwMCwweDI2LDB4OGMsMHgxZSwweDE0LDB4MDAsMHgzMywweGMwLDB4OGUsMHhkOCwweGMzLDB4YzMsMHg4YywweGMwCi0sMHg4NywweDA2LDB4OTIsMHgwMSwweDNkLDB4ZmYsMHhmZiwweDc0LDB4MGQsMHg4ZSwweGQ4LDB4OGMsMHgwNiwweDAwLDB4MDAsMHgzMwotLDB4YzAsMHg4ZSwweGQ4LDB4ZTksMHgwNCwweDAwLDB4OGMsMHgwNiwweDkwLDB4MDEsMHhlOCwweDAxLDB4MDAsMHhjMywweDA2LDB4ODMKLSwweDNlLDB4OTAsMHgwMSwweGZmLDB4NzQsMHgyOSwweDgzLDB4M2UsMHgzYSwweDM0LDB4MDAsMHg3NSwweDExLDB4YmEsMHg4NiwweDAwCi0sMHhlOCwweDFlLDB4MDAsMHg4YywweDA2LDB4M2EsMHgzNCwweDgzLDB4M2UsMHg5MCwweDAxLDB4ZmYsMHg3NCwweDExLDB4ODMsMHgzZQotLDB4M2MsMHgzNCwweDAwLDB4NzUsMHgwYSwweGJhLDB4ODgsMHgwMCwweGU4LDB4MDYsMHgwMCwweDhjLDB4MDYsMHgzYywweDM0LDB4MDcKLSwweGMzLDB4YTEsMHg5MCwweDAxLDB4OGUsMHhjMCwweDI2LDB4YTEsMHgwOCwweDAwLDB4ZWYsMHgyNiwweGExLDB4MDAsMHgwMCwweDI2Ci0sMHhjNywweDA2LDB4MDAsMHgwMCwweGZmLDB4ZmYsMHhhMywweDkwLDB4MDEsMHgzZCwweGZmLDB4ZmYsMHg3NSwweDAzLDB4YTMsMHg5MgotLDB4MDEsMHg4MywweDNlLDB4ZWQsMHgzNCwweDAwLDB4NzQsMHgwYiwweGI4LDB4MTAsMHgwMCwweGU3LDB4ODQsMHhjNywweDA2LDB4ZWQKLSwweDM0LDB4MDAsMHgwMCwweGMzLDB4NTAsMHg1MSwweDU2LDB4NTcsMHg1MiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOCwweGU3Ci0sMHg1YSwweGZmLDB4MDYsMHhiYywweDMzLDB4ZTksMHgyNSwweGZiLDB4NTAsMHg1MSwweDU2LDB4NTcsMHg1MiwweDA2LDB4MWUsMHgzMwotLDB4YzAsMHg4ZSwweGQ4LDB4ZTcsMHg1YSwweGZmLDB4MDYsMHhiMCwweDMzLDB4ZTksMHgxMSwweGZiLDB4NTAsMHg1MSwweDU2LDB4NTcKLSwweDUyLDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4ZTcsMHg1YSwweGZmLDB4MDYsMHhiNCwweDMzLDB4MDYsMHhmZiwweDA2Ci0sMHg3NiwweDM0LDB4ODAsMHgzZSwweGZlLDB4MzQsMHgwMCwweDc0LDB4MDQsMHgwNywweGU5LDB4ZjAsMHhmYSwweGI4LDB4ODAsMHgwMAotLDB4ZTgsMHhkMywweDAyLDB4MDcsMHhlOSwweGU2LDB4ZmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweGM2LDB4MWQsMHgwOCwweDFkLDB4OTEsMHgxZSwweDVkLDB4MWUsMHg3MywweDFlLDB4ODksMHgxZSwweDkxLDB4MWUsMHhhOCwweDFkCi0sMHg5MSwweDFlLDB4OTEsMHgxZSwweGFmLDB4MWUsMHhhZiwweDFlLDB4MTUsMHgxZCwweDE1LDB4MWQsMHg5MSwweDFlLDB4OTksMHgxZgotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDAKLSwweDAwLDB4MDEsMHgwMCwweDEwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwCi0sMHgwNywweGU5LDB4OTksMHhmYSwweDUwLDB4NTEsMHg1NiwweDU3LDB4NTIsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhlNwotLDB4NWEsMHhmZiwweDA2LDB4YjIsMHgzMywweDA2LDB4NjgsMHhmNiwweDFjLDB4ZTUsMHgwNiwweGEzLDB4YjIsMHgzMywweDhiLDB4ZjAKLSwweDgzLDB4ZTYsMHgxZSwweDJlLDB4ZmYsMHhhNCwweGEwLDB4MWMsMHhlNSwweDBjLDB4YTksMHg4MCwweDAwLDB4NzQsMHgwNiwweGU4Ci0sMHhhNCwweDAxLDB4ZTUsMHgwNiwweGMzLDB4NTMsMHhlNSwweDBjLDB4OGIsMHhkOCwweGE5LDB4MDEsMHgwMCwweDc0LDB4MTQsMHg4MwotLDB4M2UsMHhlMCwweDNhLDB4MDAsMHg3NCwweDBkLDB4OGUsMHgwNiwweDM4LDB4MzQsMHhlOCwweGJmLDB4MDYsMHhjNywweDA2LDB4ZTAKLSwweDNhLDB4MDAsMHgwMCwweGU1LDB4MDAsMHgwZCwweDE4LDB4MDAsMHhlNywweDAwLDB4ZTUsMHgwMiwweDBkLDB4MTEsMHgwMCwweGU3Ci0sMHgwMiwweDhiLDB4YzMsMHg1YiwweGE5LDB4MDEsMHgwMCwweDc0LDB4MDEsMHhjMywweDhiLDB4ZDAsMHhiOCwweDAwLDB4MDgsMHhlNwotLDB4ODQsMHg4YiwweGMyLDB4OGUsMHgwNiwweDM4LDB4MzQsMHgyNiwweGEzLDB4MGMsMHgwMCwweDhiLDB4ZDAsMHhjMSwweGUwLDB4MDMKLSwweDgzLDB4MTYsMHg4OCwweDM0LDB4MDAsMHhmZiwweDA2LDB4N2MsMHgzNCwweDI2LDB4ODMsMHgzZSwweDA2LDB4MDAsMHgwYSwweDc1Ci0sMHgyMSwweDhiLDB4YzIsMHgyNSwweDQwLDB4MTgsMHgzZCwweDQwLDB4MDAsMHg3NCwweDBjLDB4M2QsMHgwMCwweDEwLDB4NzUsMHgxMgotLDB4MjYsMHhmZSwweDBlLDB4MGEsMHgwMCwweDc0LDB4MGIsMHhmNywweDA2LDB4ZWYsMHgzNCwweDIwLDB4MDAsMHg3NSwweDAzLDB4ZTkKLSwweDVhLDB4MDYsMHg4YywweGMwLDB4MjYsMHg4ZSwweDA2LDB4MDIsMHgwMCwweDI2LDB4ODMsMHgwZSwweDA4LDB4MDAsMHgyMCwweDI2Ci0sMHhhMywweDEyLDB4MDAsMHgyNiwweGEzLDB4MTAsMHgwMCwweGMzLDB4ZmYsMHgwNiwweGM0LDB4MzMsMHhlNSwweDBjLDB4YTksMHgwMQotLDB4MDAsMHg3NSwweDAxLDB4YzMsMHhhOSwweGYwLDB4MDcsMHg3NCwweDAxLDB4YzMsMHhmZiwweDA2LDB4ZDQsMHgzMywweGU1LDB4MDAKLSwweDBkLDB4MTgsMHgwMCwweGU3LDB4MDAsMHhjMywweGZmLDB4MDYsMHhjYSwweDMzLDB4ODAsMHgzZSwweGEwLDB4MzYsMHgwOCwweDc1Ci0sMHgxNCwweDhlLDB4MDYsMHgzMCwweDM0LDB4MjYsMHhmNywweDA2LDB4MGEsMHgwMCwweDAwLDB4MDgsMHg3NCwweDA3LDB4MjYsMHg4MQotLDB4MGUsMHgwOCwweDAwLDB4MDAsMHgwOCwweGU1LDB4ODIsMHgyNSwweGZkLDB4ZmYsMHhlNywweDgyLDB4ZTUsMHgwYywweDUwLDB4ZTUKLSwweDgwLDB4MjUsMHgwMCwweDA3LDB4YTMsMHhlNCwweDNhLDB4ZTUsMHg4YywweDI1LDB4MDAsMHg4MCwweGEzLDB4ZTIsMHgzYSwweDU4Ci0sMHhhOSwweDAyLDB4MDAsMHg3NSwweDI1LDB4ODMsMHgzZSwweGUyLDB4M2EsMHgwMCwweDc1LDB4MWUsMHg4MywweDNlLDB4ZTQsMHgzYQotLDB4MDAsMHg3NSwweDE3LDB4ZTUsMHgwOCwweDBkLDB4MDAsMHgwNCwweDI1LDB4ZmYsMHgwNCwweGU3LDB4MDgsMHhlOCwweDZhLDB4MDEKLSwweGU1LDB4ODIsMHgwZCwweDAyLDB4MDAsMHhlNywweDgyLDB4ZTksMHgyMSwweDAwLDB4ZTgsMHgxYSwweDA2LDB4ODAsMHgzZSwweGU4Ci0sMHhmZiwweDAwLDB4NzQsMHgwYSwweDgwLDB4M2UsMHhlOCwweGZmLDB4MDQsMHg3NCwweDAzLDB4ZTksMHgwZCwweDAwLDB4YzYsMHgwNgotLDB4ZTgsMHhmZiwweDAxLDB4YmEsMHgwYywweDAxLDB4YjgsMHgwOCwweDA4LDB4ZWYsMHhlZCwweDgwLDB4M2UsMHg5ZiwweDM2LDB4MDYKLSwweDc1LDB4MDUsMHg4MywweDBlLDB4OTksMHgzNiwweDQwLDB4YjgsMHgwMCwweDAxLDB4ZTksMHgwOSwweDAxLDB4ZmYsMHgwNiwweGNjCi0sMHgzMywweDgxLDB4MjYsMHhhZiwweDM2LDB4ZmYsMHhmNywweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhmZiwweDA2LDB4YzYsMHgzNAotLDB4ZTksMHgxZSwweDAwLDB4ZmYsMHgwNiwweGNlLDB4MzMsMHhmZiwweDA2LDB4OTUsMHgzNywweDgxLDB4MjYsMHhhZiwweDM2LDB4ZmYKLSwweGVmLDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGU5LDB4MDgsMHgwMCwweGZmLDB4MDYsMHhkMCwweDMzLDB4ZmYsMHgwNiwweDdhCi0sMHgzNCwweGZmLDB4MDYsMHhkMiwweDMzLDB4ZDEsMHhlNiwweDhlLDB4MDYsMHgzMCwweDM0LDB4MmUsMHg4YiwweDg0LDB4YzAsMHgxYwotLDB4MjYsMHgwOSwweDA2LDB4MDgsMHgwMCwweDJlLDB4OGIsMHg4NCwweGMyLDB4MWMsMHgwOSwweDA2LDB4NjYsMHgzNywweGMzLDB4ZTUKLSwweDBjLDB4YTksMHg4MCwweDAwLDB4NzQsMHg1NiwweDUwLDB4ZTgsMHhmMCwweDAwLDB4NTgsMHhhOSwweDAwLDB4MDEsMHg3NSwweDA3Ci0sMHhmZiwweDA2LDB4YzYsMHgzMywweGU5LDB4MDgsMHgwMCwweGZmLDB4MDYsMHg3OCwweDM0LDB4ZmYsMHgwNiwweGM4LDB4MzMsMHhlNQotLDB4ODIsMHgyNSwweGZkLDB4ZmYsMHhlNywweDgyLDB4ZTgsMHg2ZSwweDA1LDB4YmEsMHgxMCwweDAxLDB4ZWQsMHg4MCwweDNlLDB4ZTgKLSwweGZmLDB4MDAsMHg3NCwweDBhLDB4ODAsMHgzZSwweGU4LDB4ZmYsMHgwNCwweDc0LDB4MDMsMHhlOSwweDFkLDB4MDAsMHhjNiwweDA2Ci0sMHhlOCwweGZmLDB4MDEsMHhiYSwweDBjLDB4MDEsMHhiOCwweDA4LDB4MDgsMHhlZiwweGVkLDB4ZTksMHgwZCwweDAwLDB4YzYsMHgwNgotLDB4ZTgsMHhmZiwweDAzLDB4YmEsMHgwYywweDAxLDB4YjgsMHgwOCwweDA4LDB4ZWYsMHhlZCwweGMzLDB4YTksMHgwMSwweDAwLDB4NzQKLSwweDFjLDB4ZTgsMHgyYywweDAwLDB4ODMsMHgzZSwweGUwLDB4M2EsMHgwMCwweDc0LDB4MGYsMHgwNiwweDhlLDB4MDYsMHgzOCwweDM0Ci0sMHhlOCwweGM5LDB4MDQsMHhjNywweDA2LDB4ZTAsMHgzYSwweDAwLDB4MDAsMHgwNywweGU5LDB4NWQsMHgwMCwweDhiLDB4ZDAsMHg4ZQotLDB4MDYsMHgzOCwweDM0LDB4MjYsMHhhMywweDBjLDB4MDAsMHhlOCwweDA2LDB4MDAsMHg2OCwweDY5LDB4MWQsMHhlOSwweDRhLDB4MDAKLSwweGE5LDB4MDAsMHgwNCwweDc0LDB4MGEsMHhiOCwweDAwLDB4MDQsMHhmZiwweDA2LDB4ZDgsMHgzMywweGU5LDB4MTcsMHgwMCwweGE5Ci0sMHgwMCwweDAxLDB4NzQsMHgwYSwweGZmLDB4MDYsMHgzOSwweDM3LDB4YjgsMHgwMCwweDAxLDB4ZTksMHgwOCwweDAwLDB4YTksMHgxMAotLDB4MDAsMHhiOCwweDEwLDB4MDAsMHg3NCwweDFkLDB4MDksMHgwNiwweDY2LDB4MzcsMHg4YywweGMwLDB4OGUsMHgwNiwweDMwLDB4MzQKLSwweDI2LDB4ZjcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDAxLDB4NzQsMHgwNywweDI2LDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDAxCi0sMHg4ZSwweGMwLDB4YzMsMHhmZiwweDA2LDB4YzIsMHgzMywweGU5LDB4ZjgsMHhmZiwweGU1LDB4MDAsMHgwZCwweDE4LDB4MDAsMHhlNwotLDB4MDAsMHhlNSwweDAyLDB4MGQsMHgxMSwweDAwLDB4ZTcsMHgwMiwweGMzLDB4NTgsMHhlOSwweDQzLDB4ZmQsMHhlNSwweDA4LDB4MGQKLSwweDAwLDB4MDQsMHgyNSwweGZmLDB4MDQsMHhlNywweDA4LDB4ZTksMHhlMCwweGZmLDB4ZTUsMHgwZSwweGE5LDB4MDAsMHgwOCwweDc1Ci0sMHgwMSwweGMzLDB4ZTksMHhmNSwweGZmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4NTAsMHg1MSwweDU2LDB4NTcsMHg1MiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOCwweGU3LDB4NWEsMHhmZiwweDA2LDB4YjgKLSwweDMzLDB4ZTUsMHg0OCwweDA2LDB4NTMsMHg1NywweGZmLDB4MTYsMHg0ZSwweDM3LDB4NWYsMHg1YiwweDgzLDB4M2UsMHg4MCwweDAxCi0sMHhmZiwweDc0LDB4NTgsMHg4ZSwweDA2LDB4ODAsMHgwMSwweDI2LDB4ZmYsMHgwZSwweDA4LDB4MDAsMHg3NSwweDRkLDB4MjYsMHhhMQotLDB4MDAsMHgwMCwweGEzLDB4ODAsMHgwMSwweDI2LDB4YzcsMHgwNiwweDAwLDB4MDAsMHhmZiwweGZmLDB4OGMsMHhjMCwweDI2LDB4OGUKLSwweDA2LDB4MDIsMHgwMCwweDI2LDB4ODEsMHgwZSwweDA4LDB4MDAsMHg4MCwweDAwLDB4OGIsMHhkMCwweDI2LDB4ODcsMHgwNiwweDFhCi0sMHgwMCwweDI2LDB4ODMsMHgzZSwweDE4LDB4MDAsMHhmZiwweDc0LDB4MGEsMHg4ZSwweGMwLDB4MjYsMHg4OSwweDE2LDB4MDAsMHgwMAotLDB4ZTksMHgwNSwweDAwLDB4MjYsMHg4OSwweDE2LDB4MTgsMHgwMCwweDgzLDB4M2UsMHg4MCwweDAxLDB4ZmYsMHg3NCwweDBjLDB4OGUKLSwweDA2LDB4ODAsMHgwMSwweDI2LDB4ODMsMHgzZSwweDA4LDB4MDAsMHgwMCwweDc0LDB4YjMsMHgwNywweGU5LDB4M2UsMHhmNywweGU1Ci0sMHg0YywweDkwLDB4ZTUsMHgwMiwweGE5LDB4MDAsMHgyMCwweDc0LDB4MGQsMHgyNSwweGZmLDB4ZGYsMHgwZCwweDAxLDB4MDAsMHhlNwotLDB4MDIsMHgwZCwweDAwLDB4MjAsMHhlNywweDAyLDB4ZTUsMHgwYSwweDhiLDB4ZDgsMHhhMywweGY0LDB4MzMsMHgyNSwweGMzLDB4NTcKLSwweDBkLDB4MDAsMHgxMCwweGU3LDB4MGEsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4ODAsMHg3NCwweDM3LDB4ZjcsMHhjMywweDAwCi0sMHg4MCwweDc0LDB4MDYsMHhmNywweGMzLDB4MDAsMHgwOCwweDc0LDB4NWQsMHg4MSwweDI2LDB4YzIsMHgzNCwweDdmLDB4ZmYsMHhjNwotLDB4MDYsMHgzNSwweDM3LDB4MDUsMHgwMCwweGI4LDB4ODAsMHgwMywweGNkLDB4MzksMHg4MSwweDI2LDB4OWIsMHgzNiwweGZmLDB4N2YKLSwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDQsMHgwMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4NDAsMHgwMCwweDc1LDB4MDYsMHhjNywweDA2Ci0sMHgwZiwweDM3LDB4MDMsMHgwMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc0LDB4MmEsMHhmNywweGMzLDB4MDAsMHgwOAotLDB4NzQsMHgyNCwweDgwLDB4M2UsMHg5ZCwweDM2LDB4MDYsMHg3YywweDFkLDB4ZmYsMHgwNiwweDk0LDB4MzQsMHg4MywweDBlLDB4NjYKLSwweDM3LDB4MjAsMHg4ZSwweDA2LDB4MzAsMHgzNCwweDI2LDB4ZjcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDAxLDB4NzQsMHgwNywweDI2Ci0sMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4MDEsMHhmNywweGMzLDB4MDAsMHgyMCwweDc1LDB4M2IsMHhmNywweDA2LDB4OWEsMHgzNwotLDB4ODAsMHgwMCwweDc0LDB4MGIsMHhmZiwweDA2LDB4ODksMHgzNywweDMzLDB4YzAsMHhlNywweDBlLDB4ZTksMHgwNCwweDAwLDB4ZmYKLSwweDA2LDB4M2IsMHgzNywweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc0LDB4MWMsMHg4MCwweDI2LDB4OWUsMHgzNiwweGZmCi0sMHg3NSwweDE1LDB4OGUsMHgwNiwweDMwLDB4MzQsMHgyNiwweGY3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHgwOCwweDc0LDB4MDcsMHgyNgotLDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDA4LDB4YzMsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAyLDB4MjMsMHgwMiwweDIzLDB4MDIsMHgyMywweDAyLDB4MjMsMHgwMywweDIzLDB4ZGQsMHgyMiwweDAyLDB4MjMsMHhmZCwweDIxCi0sMHgwMiwweDIzLDB4YTQsMHgyNCwweGYzLDB4MjQsMHgwMiwweDIzLDB4OGQsMHgyMiwweDdhLDB4MjMsMHgwMiwweDIzLDB4OTcsMHgyNAotLDB4MWIsMHgyNCwweDc1LDB4MjQsMHgwMiwweDIzLDB4MDIsMHgyMywweDhlLDB4MjUsMHhmYiwweDhlLDB4MDYsMHg3ZSwweDAxLDB4ZmIKLSwweDI2LDB4ODMsMHgzZSwweDAwLDB4MDAsMHhmZiwweDc0LDB4ZjIsMHgyNiwweDhlLDB4MDYsMHgwMCwweDAwLDB4ZmEsMHgyNiwweDhiCi0sMHgxZSwweDA4LDB4MDAsMHgyNiwweDIzLDB4MWUsMHgwYSwweDAwLDB4NzQsMHhlNSwweDhjLDB4YzAsMHg4ZSwweGQwLDB4MjYsMHg4YgotLDB4MjYsMHgwMiwweDAwLDB4OGMsMHgxNiwweGYyLDB4MzMsMHgyMiwweGZmLDB4NzUsMHg2YSwweDI2LDB4YTEsMHgxYywweDAwLDB4OGEKLSwweGUzLDB4OGEsMHhkYywweDIyLDB4ZDgsMHg3NSwweDBkLDB4ZDAsMHhlOCwweDI0LDB4ZjgsMHgwYSwweGMwLDB4NzUsMHhmMiwweGIwCi0sMHg4MCwweGU5LDB4ZWQsMHhmZiwweGQwLDB4ZTgsMHgyNCwweGY4LDB4MGEsMHhjMCwweDc1LDB4MDIsMHhiMCwweDgwLDB4MzIsMHhlNAotLDB4MjYsMHhhMywweDFjLDB4MDAsMHhmNywweGMzLDB4MDgsMHgwMCwweDc1LDB4NDcsMHgyZSwweDhhLDB4OWYsMHhjNSwweDI1LDB4MmUKLSwweDhiLDB4YmYsMHhjNSwweDI2LDB4ODAsMHhjMywweDEwLDB4MjYsMHg4ZSwweDFkLDB4MjYsMHg4YywweDFlLDB4MDYsMHgwMCwweDhiCi0sMHgxNiwweDAwLDB4MDAsMHhjNywweDA2LDB4MDAsMHgwMCwweGZmLDB4ZmYsMHgyNiwweDg5LDB4MTUsMHg4MywweGZhLDB4ZmYsMHg3NQotLDB4MGEsMHgyZSwweDhiLDB4OTcsMHhjZCwweDI2LDB4MjYsMHgyMSwweDE2LDB4MDgsMHgwMCwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4MjYKLSwweDg5LDB4MWUsMHgwNCwweDAwLDB4YzMsMHg4YSwweGRmLDB4YjcsMHgwMCwweDJlLDB4OGEsMHg5ZiwweGM1LDB4MjUsMHhlOSwweGUwCi0sMHhmZiwweDI2LDB4ODMsMHgyNiwweDA4LDB4MDAsMHhmNywweDgzLDB4YzMsMHgxMCwweGU5LDB4ZGUsMHhmZiwweDYwLDB4MDYsMHgxZQotLDB4NjgsMHg4NywweDI1LDB4NmEsMHgwMCwweDFmLDB4OGUsMHgwNiwweGYyLDB4MzMsMHg4YiwweDBlLDB4MzQsMHgzNCwweDM5LDB4MGUKLSwweGYyLDB4MzMsMHg3NCwweDBlLDB4MjYsMHg4MSwweDBlLDB4MGEsMHgwMCwweDAwLDB4MDIsMHgyNiwweDgxLDB4MGUsMHgwOCwweDAwCi0sMHgwMCwweDAyLDB4MjYsMHg4OSwweDI2LDB4MDIsMHgwMCwweGEzLDB4ZjIsMHgzMywweDhlLDB4ZDAsMHg4ZCwweDI2LDB4ODAsMHgwMAotLDB4MzYsMHg4OSwweDI2LDB4MDIsMHgwMCwweDM2LDB4ODksMHgxZSwweDIwLDB4MDAsMHgzNiwweGM3LDB4MDYsMHgwOCwweDAwLDB4MDAKLSwweDAwLDB4YjksMHgwNCwweDAwLDB4YmUsMHgwMCwweDAwLDB4MmUsMHg4YiwweGJjLDB4YzUsMHgyNiwweDM2LDB4YzcsMHgwNSwweGZmCi0sMHhmZiwweDM2LDB4YzcsMHg0NSwweDAyLDB4ZmYsMHhmZiwweDgzLDB4YzYsMHgwMiwweGUyLDB4ZWIsMHg4ZSwweDA2LDB4N2UsMHgwMQotLDB4MzYsMHg4YiwweDBlLDB4MjIsMHgwMCwweDhjLDB4YzAsMHgyNiwweDgzLDB4M2UsMHgwMCwweDAwLDB4ZmYsMHgyNiwweDhlLDB4MDYKLSwweDAwLDB4MDAsMHg3NCwweDA3LDB4MjYsMHgzYiwweDBlLDB4MjIsMHgwMCwweDdkLDB4ZWEsMHgzNiwweDhjLDB4MDYsMHgwMCwweDAwCi0sMHg4ZSwweGMwLDB4MjYsMHg4YywweDE2LDB4MDAsMHgwMCwweGZiLDB4MzYsMHhmZiwweDJlLDB4MWUsMHgwMCwweDA2LDB4MWUsMHg2OAotLDB4OGIsMHgyNSwweDZhLDB4MDAsMHgxZiwweDI2LDB4MDksMHgzNiwweDA4LDB4MDAsMHhmNywweGM2LDB4MDAsMHhmZiwweDc0LDB4MDEKLSwweGMzLDB4NTYsMHg1MiwweDJlLDB4OGIsMHhiNCwweGM1LDB4MjUsMHg4MSwweGU2LDB4ZmYsMHgwMCwweDJlLDB4OGIsMHhiNCwweGM1Ci0sMHgyNiwweDhjLDB4YzIsMHg4ZSwweGMwLDB4MjYsMHhjNywweDA2LDB4MDAsMHgwMCwweGZmLDB4ZmYsMHg4ZSwweGMyLDB4MjYsMHg4MwotLDB4M2MsMHhmZiwweDc0LDB4MGYsMHg4YiwweGQwLDB4MjYsMHg4NywweDU0LDB4MDIsMHg4ZSwweGMyLDB4MjYsMHhhMywweDAwLDB4MDAKLSwweGU5LDB4MDcsMHgwMCwweDI2LDB4ODksMHg0NCwweDAyLDB4MjYsMHg4OSwweDA0LDB4NWEsMHg1ZSwweGMzLDB4MDYsMHgxZSwweDY4Ci0sMHg4YiwweDI1LDB4NmEsMHgwMCwweDFmLDB4OGUsMHgwNiwweGYyLDB4MzMsMHgyNiwweGEzLDB4MGEsMHgwMCwweDI2LDB4ODksMHgyNgotLDB4MDIsMHgwMCwweGExLDB4MzQsMHgzNCwweDhlLDB4ZDAsMHg4ZCwweDI2LDB4ODAsMHgwMCwweDhjLDB4MTYsMHhmMiwweDMzLDB4ZTkKLSwweDRkLDB4ZmUsMHhjZiwweDUwLDB4MWUsMHg1MiwweDUzLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHgyNiwweDgzLDB4M2UsMHgwNCwweDAwCi0sMHhmZiwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHgwMCwweDAwLDB4NzQsMHgwMywweGU5LDB4MWEsMHgwMCwweDgzLDB4M2UsMHhlNgotLDB4M2EsMHgwMiwweDc2LDB4MTMsMHhmZiwweDA2LDB4ZDYsMHgzMywweDhjLDB4YzAsMHg4ZSwweDA2LDB4MzIsMHgzNCwweGJlLDB4NDAKLSwweDAwLDB4NjgsMHgzYSwweDIzLDB4ZTksMHg1ZSwweGZmLDB4ZTgsMHg4NCwweGY4LDB4NWIsMHg1YSwweDFmLDB4NTgsMHhjZiwweGU4Ci0sMHhlMSwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTgsMHgwMCwweDEwLDB4MjYsMHg4YSwweDFlLDB4MjksMHgwMCwweDg4LDB4MWUsMHgxYgotLDB4MzcsMHgyNiwweGM3LDB4MDYsMHgwYywweDAwLDB4ZmYsMHg3ZiwweDI2LDB4YTEsMHgwZSwweDAwLDB4ZTcsMHg5YywweDI2LDB4YTEKLSwweDA4LDB4MDAsMHhlNywweDlhLDB4ZTUsMHgwMCwweDgwLDB4ZmIsMHgwOCwweDc0LDB4MDksMHgwZCwweDE4LDB4YWMsMHhlNywweDAwCi0sMHgwNywweDFmLDB4NTgsMHhjZiwweDBkLDB4MTgsMHgwMCwweGU5LDB4ZjQsMHhmZiwweDUwLDB4MWUsMHgwNiwweDMzLDB4YzAsMHg4ZQotLDB4ZDgsMHg4MywweDNlLDB4YTEsMHgzNiwweDAwLDB4NzUsMHhiNywweDI2LDB4OGIsMHgzNiwweDA2LDB4MDAsMHgyZSwweGZmLDB4OTQKLSwweGRjLDB4MjMsMHgwNywweDFmLDB4NTgsMHhjZiwweGU4LDB4OGEsMHgwMCwweGU1LDB4MDAsMHgwZCwweDE4LDB4MDAsMHhlNywweDAwCi0sMHhlOCwweDQ5LDB4MDAsMHhjMywweDUzLDB4ZjcsMHgwNiwweGVmLDB4MzQsMHgyMCwweDAwLDB4NzUsMHgyZCwweGU1LDB4OGMsMHgyNQotLDB4MDAsMHg3MCwweDhiLDB4ZDgsMHhlNSwweDhjLDB4MjUsMHgwMCwweDcwLDB4M2IsMHhjMywweDc0LDB4MDUsMHg4YiwweGQ4LDB4ZTkKLSwweGYyLDB4ZmYsMHgzZCwweDAwLDB4MzAsMHg3NSwweDEwLDB4ZTUsMHgwMiwweDI1LDB4ZWYsMHhmZiwweGU3LDB4MDIsMHhjNywweDA2Ci0sMHhlMCwweDNhLDB4ZmYsMHhmZiwweGU5LDB4MDMsMHgwMCwweGU4LDB4MTIsMHgwMCwweDViLDB4YzMsMHhhMywweDIzLDB4OTYsMHgyMwotLDB4YTQsMHgyMywweGE0LDB4MjMsMHg5NiwweDIzLDB4YTQsMHgyMywweDk2LDB4MjMsMHg5NiwweDIzLDB4MjYsMHhhMCwweDI5LDB4MDAKLSwweGEyLDB4MWIsMHgzNywweDI2LDB4YzcsMHgwNiwweDBjLDB4MDAsMHhmZiwweDdmLDB4MjYsMHhhMSwweDBlLDB4MDAsMHhlNywweDljCi0sMHgyNiwweGExLDB4MDgsMHgwMCwweGU3LDB4OWEsMHhlNSwweDAwLDB4MjUsMHhmZiwweDUzLDB4MjYsMHg4YiwweDM2LDB4MDYsMHgwMAotLDB4ODMsMHhlNiwweDBlLDB4MmUsMHgwYiwweDg0LDB4YWQsMHgyNSwweGU3LDB4MDAsMHhjMywweDA2LDB4MWUsMHg2OCwweDhiLDB4MjUKLSwweDZhLDB4MDAsMHgxZiwweDgzLDB4MGUsMHhlZiwweDM0LDB4MjAsMHg4MywweDBlLDB4OWIsMHgzNiwweDA4LDB4ZTUsMHgwMCwweDI1Ci0sMHhlZiwweGZmLDB4MGQsMHgwOCwweDAwLDB4ZTcsMHgwMCwweGU1LDB4MDAsMHhhOSwweDEwLDB4MDAsMHg3NSwweDAxLDB4YzMsMHhlNQotLDB4MDAsMHhhOSwweDEwLDB4MDAsMHg3NSwweGY5LDB4YzMsMHg1MCwweDUzLDB4NTEsMHg1NiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUKLSwweGQ4LDB4YjgsMHgwNSwweDAwLDB4ZTcsMHg4NCwweGU1LDB4MDgsMHgwZCwweDAwLDB4MDQsMHgyNSwweGZmLDB4MDQsMHhlNywweDA4Ci0sMHhlNSwweDAwLDB4MGQsMHgxOCwweDAwLDB4ZTcsMHgwMCwweGU1LDB4MDIsMHgwZCwweDExLDB4MDAsMHhlNywweDAyLDB4MWYsMHgwNwotLDB4NWUsMHg1OSwweDViLDB4NTgsMHhjMywweDUwLDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOCwweGM3LDB4MDYsMHhlZiwweDM0LDB4MDAKLSwweDAwLDB4ODMsMHgyNiwweDliLDB4MzYsMHhmNywweGU1LDB4MDAsMHgwZCwweDE4LDB4MDAsMHhlNywweDAwLDB4ZTUsMHgwMiwweDBkCi0sMHgxMSwweDAwLDB4ZTcsMHgwMiwweDFmLDB4NTgsMHhjZiwweDYwLDB4MDYsMHgxZSwweDY4LDB4ODcsMHgyNSwweDZhLDB4MDAsMHgxZgotLDB4ZTgsMHgxNiwweGY1LDB4YzMsMHgwNiwweDFlLDB4NjgsMHg4YiwweDI1LDB4NmEsMHgwMCwweDFmLDB4OGUsMHhjMCwweDI2LDB4ODMKLSwweDNlLDB4MGEsMHgwMCwweDAwLDB4NzQsMHgwMywweGU4LDB4NDMsMHgwMCwweDI2LDB4YzcsMHgwNiwweDBhLDB4MDAsMHhmZiwweGZmCi0sMHgyNiwweDhiLDB4MTYsMHgwNiwweDAwLDB4OGUsMHgxZSwweDhlLDB4MDEsMHg4YywweGQ4LDB4OGIsMHhjYSwweDgzLDB4M2UsMHgwMAotLDB4MDAsMHhmZiwweDhlLDB4MWUsMHgwMCwweDAwLDB4NzQsMHgwYSwweDJiLDB4MTYsMHgwOCwweDAwLDB4NzMsMHhlYiwweDI5LDB4MGUKLSwweDA4LDB4MDAsMHgyNiwweDg5LDB4MGUsMHgwOCwweDAwLDB4MjYsMHg4YywweDFlLDB4MDAsMHgwMCwweDhlLDB4ZDgsMHg4YywweDA2Ci0sMHgwMCwweDAwLDB4YzMsMHg2MCwweDA2LDB4MWUsMHg2OCwweDg3LDB4MjUsMHg2YSwweDAwLDB4MWYsMHg4ZSwweGMwLDB4OGIsMHhjOAotLDB4OGUsMHgxZSwweDhlLDB4MDEsMHgyNiwweGM3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHgwMCwweDhjLDB4ZDgsMHg4MywweDNlLDB4MDAKLSwweDAwLDB4ZmYsMHg3NCwweDI1LDB4M2IsMHgwZSwweDAwLDB4MDAsMHg4ZSwweDFlLDB4MDAsMHgwMCwweDc1LDB4ZWQsMHg4ZSwweGQ4Ci0sMHgyNiwweGExLDB4MDAsMHgwMCwweGEzLDB4MDAsMHgwMCwweDNkLDB4ZmYsMHhmZiwweDc0LDB4NTYsMHg4ZSwweGQ4LDB4MjYsMHhhMQotLDB4MDgsMHgwMCwweDAxLDB4MDYsMHgwOCwweDAwLDB4ZTksMHg0OSwweDAwLDB4MjYsMHg4ZSwweDFlLDB4MDIsMHgwMCwweGJlLDB4MTgKLSwweDAwLDB4ODMsMHgzYywweGZmLDB4NzQsMHgzYywweDM5LDB4MGMsMHg3NCwweDE5LDB4OGUsMHgxYywweGJlLDB4MDAsMHgwMCwweDgzCi0sMHgzZSwweDAwLDB4MDAsMHhmZiwweDc0LDB4MmMsMHgzOSwweDBlLDB4MDAsMHgwMCwweDc0LDB4MDcsMHg4ZSwweDFlLDB4MDAsMHgwMAotLDB4ZTksMHhlYywweGZmLDB4MjYsMHhhMSwweDAwLDB4MDAsMHg4OSwweDA0LDB4MzMsMHhjOSwweDhlLDB4ZDksMHgzZCwweGZmLDB4ZmYKLSwweDc1LDB4MTAsMHg4MywweGZlLDB4MTgsMHg3NSwweDBiLDB4MjYsMHg4ZSwweDFlLDB4MDIsMHgwMCwweDgxLDB4MjYsMHgwOCwweDAwCi0sMHg3ZiwweGZmLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhjMywweDFmLDB4MDcsMHg2MSwweGNmLDB4MWYsMHgwNywweGNmLDB4NjAsMHgwNgotLDB4MWUsMHg2OCwweDg3LDB4MjUsMHg2YSwweDAwLDB4MWYsMHhlNSwweDA2LDB4MjUsMHgxZSwweDAwLDB4M2QsMHgxZSwweDAwLDB4NzUKLSwweGY2LDB4YjksMHgwOCwweDAwLDB4ZTUsMHg1OCwweGU3LDB4NWEsMHgyMywweGMwLDB4ZTAsMHhmOCwweGMzLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYywweDAwLDB4MDAsMHgwMCwweGE4LDB4MDAsMHg4YywweDAyLDB4MDQsMHgwMAotLDB4MDAsMHgwOCwweDEwLDB4MjAsMHgwMCwweGZmLDB4MGUsMHgwYywweDBjLDB4MGEsMHgwYSwweDBhLDB4MGEsMHgwOCwweDA4LDB4MDgKLSwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2Ci0sMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNAotLDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQKLSwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyCi0sMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMgotLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIKLSwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyCi0sMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4MTQsMHgwMCwweDEwLDB4MDAsMHgwYywweDAwLDB4ZmYsMHg3ZiwweGZmCi0sMHhiZiwweGZmLDB4ZGYsMHhmZiwweGVmLDB4ZmYsMHhmNywweGZmLDB4ZmIsMHhmZiwweGZkLDB4ZmYsMHhmZSwweDdmLDB4ZmYsMHhiZgotLDB4ZmYsMHhkZiwweGZmLDB4ZWYsMHhmZiwweGY3LDB4ZmYsMHhmYiwweGZmLDB4ZmQsMHhmZiwweGZlLDB4ZmYsMHgwMCwweDAwLDB4MDAKLSwweDgwLDB4M2UsMHhlMiwweDM0LDB4MDEsMHg3NiwweDAzLDB4ZTksMHhhNSwweDAwLDB4YjgsMHgwMCwweDAwLDB4ZTcsMHg0ZSwweGI5Ci0sMHgyOCwweDAwLDB4ZTIsMHhmZSwweGM2LDB4MDYsMHg0NSwweDM3LDB4MDIsMHhiZiwweDNmLDB4MjgsMHgyZSwweDhiLDB4NDUsMHgwOAotLDB4ZTcsMHg0ZSwweGI5LDB4MjgsMHgwMCwweGUyLDB4ZmUsMHgyZSwweDhiLDB4MWQsMHhjNywweDA2LDB4YjMsMHgzNiwweDQwLDB4MTEKLSwweGM3LDB4MDYsMHhiMSwweDM2LDB4MjcsMHgwMCwweGM3LDB4MDYsMHg0NiwweDM3LDB4MDIsMHgwMCwweGM3LDB4MDYsMHg0OCwweDM3Ci0sMHg2NCwweDAwLDB4ZjcsMHgwNiwweGI1LDB4MzYsMHgwMiwweDAwLDB4NzUsMHgxYywweDJlLDB4MGIsMHg1ZCwweDAyLDB4ODEsMHgyNgotLDB4YjMsMHgzNiwweGZmLDB4ZmUsMHhjNywweDA2LDB4YjEsMHgzNiwweDljLDB4MDAsMHhjNywweDA2LDB4NDYsMHgzNywweDA4LDB4MDAKLSwweGM3LDB4MDYsMHg0OCwweDM3LDB4OTAsMHgwMSwweDg5LDB4MWUsMHhiNywweDM2LDB4ODksMHgxZSwweGZlLDB4MzMsMHhiZSwweDIwCi0sMHgwMCwweDhiLDB4YzMsMHhlNywweDRlLDB4YjksMHgyOCwweDAwLDB4ZTIsMHhmZSwweDJlLDB4OGIsMHg0NSwweDA0LDB4ZTcsMHg0ZQotLDB4YjksMHgyOCwweDAwLDB4ZTIsMHhmZSwweGU1LDB4NGUsMHg4YiwweGNiLDB4MmUsMHgyMywweDQ1LDB4MDYsMHgyZSwweDIzLDB4NGQKLSwweDA2LDB4M2EsMHhjMSwweDc0LDB4MzYsMHg0ZSwweDc1LDB4ZDksMHg4MCwweDNlLDB4NDUsMHgzNywweDAwLDB4NzQsMHgwYiwweGM2Ci0sMHgwNiwweDQ1LDB4MzcsMHgwMCwweGJmLDB4MmYsMHgyOCwweGU5LDB4NzIsMHhmZiwweGM2LDB4MDYsMHg0NSwweDM3LDB4MDEsMHhmNwotLDB4MDYsMHhiNSwweDM2LDB4MDIsMHgwMCwweDc0LDB4MTQsMHhlNSwweGNlLDB4MjUsMHhmZCwweGZmLDB4ZTcsMHhjZSwweGU4LDB4NDMKLSwweDAwLDB4ZTUsMHhjZSwweDBkLDB4MDIsMHgwMCwweGU3LDB4Y2UsMHhlOCwweDM5LDB4MDAsMHg4MCwweDNlLDB4ZTIsMHgzNCwweDAxCi0sMHg3NiwweDAxLDB4YzMsMHhiOCwweGVhLDB4MDUsMHhlNywweDhjLDB4ZmEsMHhlOCwweDEyLDB4ZjQsMHhmYiwweDhkLDB4MDYsMHhkMAotLDB4MzksMHg4YiwweGQ4LDB4YzEsMHhlOCwweDA0LDB4YTMsMHgzOCwweDM0LDB4OGUsMHhjMCwweGExLDB4MzAsMHgzNCwweDI2LDB4YTMKLSwweDAyLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDgzLDB4YzMsMHgxOCwweGQxLDB4ZWIsMHgyNiwweDg5Ci0sMHgxZSwweDA4LDB4MDAsMHhjMywweGU1LDB4MDIsMHgwZCwweDAwLDB4NDAsMHhlNywweDAyLDB4ZTUsMHgwMCwweDBkLDB4MDQsMHgwMAotLDB4ZTcsMHgwMCwweGI4LDB4MDAsMHgwMCwweGU3LDB4MGEsMHhlNSwweDBhLDB4YTksMHgwMCwweDgwLDB4NzUsMHgxNCwweGU1LDB4MDgKLSwweDBkLDB4MDAsMHgxMCwweGU3LDB4MDgsMHhlNSwweDBhLDB4MGQsMHgwMCwweDA4LDB4YjksMHgwNSwweDAwLDB4ZTcsMHgwYSwweGUyCi0sMHhmYywweGMzLDB4ZTUsMHgwOCwweDBkLDB4MDAsMHgxMCwweGI5LDB4MDUsMHgwMCwweGU3LDB4MDgsMHhlMiwweGZjLDB4YzMsMHgwNAotLDB4MGMsMHgyMCwweDAwLDB4MDEsMHgwYywweDdlLDB4ZmYsMHgwMCwweDBjLDB4MDIsMHgwMCwweDEwLDB4MDAsMHg0MCwweDAwLDB4MGMKLSwweGM2LDB4MDEsMHgwMCwweDAwLDB4YzAsMHhmNywweGZmLDB4MDAsMHhjMCwweDAyLDB4MDAsMHgxMCwweDAwLDB4NDAsMHgwMCwweDAwCi0sMHgzMywweGMwLDB4OGUsMHhkOCwweDhkLDB4M2UsMHg3MiwweDQ5LDB4OGQsMHgzNiwweGIwLDB4MzcsMHhiOSwweDE0LDB4MDAsMHg4YgotLDB4MWUsMHgzMCwweDM0LDB4ODksMHg1YywweDAyLDB4MmUsMHg4YiwweDQ1LDB4MDIsMHg4OSwweDQ0LDB4MDYsMHgyZSwweDhiLDB4MDUKLSwweDg5LDB4NDQsMHgwNCwweDgzLDB4YzcsMHgwNCwweDgzLDB4YzYsMHgxMCwweGUyLDB4ZTgsMHhjNiwweDA2LDB4OWUsMHgzNiwweDBlCi0sMHhlOCwweGZkLDB4MjYsMHg2OCwweDgzLDB4MjgsMHhhMSwweGFhLDB4MDIsMHhjZCwweDM1LDB4ODMsMHgzZSwweGExLDB4MzYsMHgwMAotLDB4NzQsMHgwMywweGU5LDB4M2IsMHgyNywweDMzLDB4ZmYsMHg4ZSwweDA2LDB4YTYsMHgwMiwweDhiLDB4MzYsMHhhNCwweDAyLDB4MmUKLSwweGZmLDB4YTQsMHgyZSwweDMwLDB4ODMsMHgwZSwweDk5LDB4MzYsMHgwNCwweGM3LDB4MDYsMHgzNywweDM3LDB4MDEsMHgwMCwweGM2Ci0sMHgwNiwweGNhLDB4MzQsMHgwMSwweGU5LDB4N2QsMHgxOSwweDgwLDB4M2UsMHhhMCwweDM2LDB4MDgsMHg3NCwweGU2LDB4ODAsMHgyNgotLDB4OWUsMHgzNiwweGZmLDB4NzUsMHgxYSwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc0LDB4MTIsMHhmNywweDA2LDB4OWIKLSwweDM2LDB4MDMsMHgwMCwweDc1LDB4MGEsMHg4MywweDBlLDB4NjYsMHgzNywweDEwLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwOCwweGU5Ci0sMHhmYiwweDAxLDB4ODAsMHgzZSwweDllLDB4MzYsMHgwMiwweDc1LDB4Y2UsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4ZTksMHhlYwotLDB4MDEsMHhjMywweGU5LDB4ZTgsMHgwMSwweDI2LDB4YzcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDAwLDB4MjYsMHhmZiwweDI2LDB4MDQKLSwweDAwLDB4YTEsMHhkMSwweDM2LDB4MjYsMHgzOSwweDA2LDB4MWEsMHgwMCwweDc1LDB4MjIsMHhhMSwweGQzLDB4MzYsMHgyNiwweDM5Ci0sMHgwNiwweDFjLDB4MDAsMHg3NSwweDE4LDB4YTEsMHhkNSwweDM2LDB4MjYsMHgzOSwweDA2LDB4MWUsMHgwMCwweDc1LDB4MGUsMHgyNgotLDB4ZjcsMHgwNiwweDBjLDB4MDAsMHg0MCwweDAwLDB4NzQsMHgwNSwweDgzLDB4MGUsMHg2NiwweDM3LDB4NDAsMHg4MSwweDBlLDB4YWYKLSwweDM2LDB4MDAsMHgxMCwweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHg4MCwweDNlLDB4OWQsMHgzNiwweDAyLDB4NzUsMHgwNiwweGNkCi0sMHgzNCwweGU5LDB4YTIsMHgxYSwweGMzLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgxMCwweDAwLDB4NzUsMHg1NCwweDI2LDB4ZjYsMHgwNgotLDB4MGEsMHgwMCwweGZmLDB4NzUsMHg0YywweDI2LDB4YTAsMHgxOSwweDAwLDB4MjQsMHhjMCwweDNjLDB4NDAsMHg3NSwweDExLDB4ODAKLSwweDNlLDB4OTUsMHgzNiwweDAwLDB4NzQsMHgzYiwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhmZiwweGZmLDB4ZTksMHgzMSwweDAwCi0sMHhlOCwweGYxLDB4MDQsMHhmNywweDA2LDB4OWIsMHgzNiwweDAzLDB4MDAsMHg3NCwweDJmLDB4OGIsMHhkOCwweGI4LDB4N2QsMHgwMwotLDB4Y2QsMHgzYSwweDhiLDB4YzMsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMiwweDAwLDB4NzUKLSwweDA1LDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNCwweDgxLDB4MGUsMHg5YiwweDM2LDB4ODAsMHgwMCwweDgzLDB4MjYsMHg5YiwweDM2Ci0sMHhmYywweGU5LDB4MjMsMHgwMSwweGU4LDB4ODcsMHgxZCwweGU5LDB4MzMsMHgwMSwweDUwLDB4MjYsMHhhMSwweDBjLDB4MDAsMHgyNQotLDB4MDcsMHgwMCwweDNkLDB4MDcsMHgwMCwweDc1LDB4MDMsMHhlOSwweDg0LDB4MDAsMHgzZCwweDA1LDB4MDAsMHg3NSwweDAzLDB4ZTkKLSwweDdjLDB4MDAsMHg4MywweDNlLDB4ZTgsMHgzYSwweDA0LDB4NzQsMHg3NSwweDgzLDB4M2UsMHhlOCwweDNhLDB4MDIsMHg3NCwweDZlCi0sMHhmNywweDA2LDB4ZTYsMHgzNCwweDE4LDB4ODAsMHg3NSwweDAzLDB4ZTksMHg2YSwweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgwMAotLDB4ODAsMHg3NCwweDM1LDB4MjYsMHg4MCwweDNlLDB4MjksMHgwMCwweDAyLDB4NzUsMHgyZCwweDUxLDB4NTYsMHg1NywweDhkLDB4MzYKLSwweDNlLDB4MzQsMHg4ZCwweDNlLDB4MjAsMHgwMCwweGI5LDB4MDYsMHgwMCwweGYzLDB4YTYsMHg1ZiwweDVlLDB4NTksMHg3NCwweDQ1Ci0sMHgyNiwweGExLDB4MjAsMHgwMCwweGEzLDB4M2UsMHgzNCwweDI2LDB4YTEsMHgyMiwweDAwLDB4YTMsMHg0MCwweDM0LDB4MjYsMHhhMQotLDB4MjQsMHgwMCwweGEzLDB4NDIsMHgzNCwweGU5LDB4MjYsMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4MDgsMHgwMCwweDc0LDB4MGIKLSwweDI2LDB4ODAsMHgzZSwweDE5LDB4MDAsMHgwMCwweDc0LDB4MDMsMHhlOSwweDEzLDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDEwCi0sMHgwMCwweDc0LDB4MTIsMHgyNiwweGEwLDB4MjgsMHgwMCwweGMwLDB4ZTgsMHgwNCwweDIyLDB4YzAsMHg3NCwweDA3LDB4MjYsMHhjNwotLDB4MDYsMHgwNCwweDAwLDB4ZmYsMHhmZiwweDU4LDB4MjMsMHhjMCwweDc0LDB4MDMsMHhlOSwweDU3LDB4ZmYsMHg4MSwweDI2LDB4OWIKLSwweDM2LDB4ZmYsMHhmZSwweDgzLDB4ZmUsMHgwNiwweDdmLDB4MjQsMHgyNiwweGExLDB4MjAsMHgwMCwweDNiLDB4MDYsMHhkMSwweDM2Ci0sMHg3NSwweDFhLDB4MjYsMHhhMSwweDIyLDB4MDAsMHgzYiwweDA2LDB4ZDMsMHgzNiwweDc1LDB4MTAsMHgyNiwweGExLDB4MjQsMHgwMAotLDB4M2IsMHgwNiwweGQ1LDB4MzYsMHg3NSwweDA2LDB4ODEsMHgwZSwweDliLDB4MzYsMHgwMCwweDAxLDB4MjYsMHhhMSwweDIwLDB4MDAKLSwweDI1LDB4N2YsMHhmZiwweGEzLDB4YjgsMHgzNCwweDI2LDB4YTEsMHgyMiwweDAwLDB4YTMsMHhiYSwweDM0LDB4MjYsMHhhMSwweDI0Ci0sMHgwMCwweGEzLDB4YmMsMHgzNCwweDhiLDB4YzYsMHg4NiwweGM0LDB4YTMsMHhjMCwweDM0LDB4ZDEsMHhlNiwweDgwLDB4ZmMsMHgwOQotLDB4NzQsMHgwMywweGU4LDB4YWEsMHgxYywweDhiLDB4YzYsMHgyZSwweGZmLDB4YTQsMHgzMCwweDQ5LDB4MjYsMHhhMSwweDBjLDB4MDAKLSwweDNkLDB4ZmYsMHg3ZiwweDc0LDB4MGYsMHgyNiwweGZmLDB4MjYsMHgwNCwweDAwLDB4OGUsMHgwNiwweDM4LDB4MzQsMHhlOCwweDM2Ci0sMHgwNiwweGNkLDB4NTAsMHhjMywweGU5LDB4MTYsMHgwMCwweGNkLDB4MzQsMHhlOSwweDExLDB4MDAsMHhjZCwweDM0LDB4ODksMHgzNgotLDB4M2QsMHgzNywweGExLDB4OWQsMHgzNiwweGEzLDB4M2YsMHgzNywweGM2LDB4MDYsMHhhMCwweDM2LDB4MGMsMHhlOCwweDhlLDB4MDAKLSwweGExLDB4OWYsMHgzNiwweDIyLDB4ZTQsMHg3NSwweDMyLDB4ZjcsMHgwNiwweDRjLDB4MzcsMHgwMSwweDAwLDB4NzUsMHgyYSwweGY2Ci0sMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4MDcsMHg4OCwweDI2LDB4OWUsMHgzNiwweGU5LDB4MzEsMHgwMCwweDNhLDB4MDYsMHg5ZAotLDB4MzYsMHhhMywweDlkLDB4MzYsMHg3NCwweDI4LDB4OGIsMHhmMCwweDJlLDB4ZmYsMHhhNCwweDBkLDB4MmIsMHg0NCwweDI5LDB4ZWUKLSwweDQyLDB4MTksMHg0NCwweGNkLDB4NDQsMHgyZiwweDQ1LDB4NWEsMHg0NSwweDNhLDB4MjYsMHg5ZSwweDM2LDB4NzUsMHgwMSwweGMzCi0sMHgzMiwweGMwLDB4ODYsMHhjNCwweDhiLDB4ZjAsMHhhMiwweDllLDB4MzYsMHgyZSwweGZmLDB4YTQsMHgyMCwweDQ5LDB4OGIsMHgyZQotLDB4OTksMHgzNiwweDIzLDB4ZWQsMHg3NSwweDAxLDB4YzMsMHhiZiwweDAxLDB4MDAsMHhiZSwweDAwLDB4MDAsMHg4NSwweGZkLDB4NzUKLSwweDFhLDB4NDYsMHhkMSwweGU3LDB4ZTksMHhmNiwweGZmLDB4MmEsMHgwMCwweDI5LDB4MDAsMHgyOCwweDAwLDB4MjcsMHgwMCwweDI1Ci0sMHgwMCwweDA1LDB4MDAsMHgwNywweDAwLDB4MjYsMHgwMCwweDA2LDB4MDAsMHgyMCwweDAwLDB4ZjcsMHhkNywweDIxLDB4M2UsMHg5OQotLDB4MzYsMHhkMSwweGU2LDB4MmUsMHg4YiwweGI0LDB4NDcsMHgyYiwweGU5LDB4NGYsMHhmZiwweGU5LDB4NTYsMHhmZiwweDgwLDB4MjYKLSwweDllLDB4MzYsMHhmZiwweDc1LDB4MTcsMHhmNywweDA2LDB4NGMsMHgzNywweDAxLDB4MDAsMHg3NSwweDBmLDB4ZjYsMHgwNiwweDlkCi0sMHgzNiwweDgwLDB4NzQsMHgwOCwweGY3LDB4MDYsMHg2NiwweDM3LDB4ZmYsMHhmZiwweDc1LDB4MDcsMHhjNywweDA2LDB4NjYsMHgzNwotLDB4MDAsMHgwMCwweGMzLDB4ZjcsMHgwNiwweDQxLDB4MzcsMHgwMSwweDAwLDB4NzUsMHgwYiwweGI4LDB4N2YsMHgwMywweGNkLDB4MzkKLSwweGM3LDB4MDYsMHg0MSwweDM3LDB4MDEsMHgwMCwweDMzLDB4ZjYsMHhiOCwweDAwLDB4NDAsMHg4NSwweDA2LDB4NjYsMHgzNywweDc0Ci0sMHgyMSwweDgwLDB4YmMsMHg1NCwweDM3LDB4ZmYsMHg3NCwweDA0LDB4ZmUsMHg4NCwweDU0LDB4MzcsMHg4MCwweGJjLDB4OTYsMHgzNAotLDB4ZmYsMHg3NCwweDA0LDB4ZmUsMHg4NCwweDk2LDB4MzQsMHgzMSwweDA2LDB4NjYsMHgzNywweDgzLDB4M2UsMHg2NiwweDM3LDB4MDAKLSwweDc0LDB4MDUsMHg0NiwweGQxLDB4ZTgsMHg3MywweGQ0LDB4YzMsMHhhMSwweGY0LDB4MzMsMHhhOSwweDAwLDB4ODgsMHg3NCwweDBiCi0sMHhhOSwweDAwLDB4MTAsMHg3NSwweDA5LDB4OGIsMHgxZSwweDQzLDB4MzcsMHhmZiwweGUzLDB4ZTksMHhkNywweDAwLDB4YzcsMHgwNgotLDB4MzUsMHgzNywweDA1LDB4MDAsMHhjNywweDA2LDB4NDMsMHgzNywweDFlLDB4MmMsMHhmNywweDA2LDB4ZjQsMHgzMywweDAwLDB4MDgKLSwweDc0LDB4MDYsMHhjNywweDA2LDB4NDMsMHgzNywweDEwLDB4MmMsMHhiOCwweDgwLDB4MDMsMHhjZCwweDM5LDB4ZTksMHhjZCwweGZlCi0sMHhhOSwweDAwLDB4MDgsMHg3NCwweGQ5LDB4ZmYsMHgwZSwweDM1LDB4MzcsMHg3NSwweGVkLDB4ZTksMHg2NiwweDAwLDB4YTksMHgwMAotLDB4MDgsMHg3NSwweGNiLDB4ZmYsMHgwZSwweDM1LDB4MzcsMHg3NSwweGRmLDB4ODEsMHgwZSwweGMyLDB4MzQsMHhjMCwweDAwLDB4ZjYKLSwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHg0OCwweDgxLDB4MGUsMHg5YiwweDM2LDB4MDAsMHg4MCwweGY3LDB4MDYsMHg5YiwweDM2Ci0sMHgwMSwweDAwLDB4NzQsMHgxZSwweGI4LDB4N2QsMHgwMywweGNkLDB4M2EsMHg4MSwweDBlLDB4OWIsMHgzNiwweDgwLDB4MDAsMHg4MwotLDB4MjYsMHg5YiwweDM2LDB4ZmUsMHhjNywweDA2LDB4MGYsMHgzNywweDAyLDB4MDAsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA0LDB4ZTkKLSwweDdiLDB4ZmUsMHg4MCwweDNlLDB4YTAsMHgzNiwweDA0LDB4NzUsMHgwNywweDgzLDB4M2UsMHgwZiwweDM3LDB4MDEsMHg3NSwweDA1Ci0sMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwMiwweDAwLDB4ZTksMHg1ZiwweGZlLDB4YmUsMHgwMgotLDB4MDAsMHhlOSwweDRhLDB4ZmUsMHg4MCwweDI2LDB4OWUsMHgzNiwweGZmLDB4NzUsMHgzYSwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAKLSwweDc0LDB4MmQsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NSwweDJiLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweGZmCi0sMHgwNiwweDk0LDB4MzQsMHg4MywweDBlLDB4NjYsMHgzNywweDIwLDB4OGUsMHgwNiwweDMwLDB4MzQsMHgyNiwweGY3LDB4MDYsMHgwYQotLDB4MDAsMHgwMCwweDAxLDB4NzQsMHgwNywweDI2LDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDAxLDB4ZTksMHgwNiwweDAwLDB4YmUKLSwweDA0LDB4MDAsMHhlOSwweDA5LDB4ZmUsMHg4MSwweDBlLDB4YWYsMHgzNiwweDAwLDB4MDgsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2Ci0sMHhlNSwweDBhLDB4YTksMHgwMCwweDgwLDB4NzQsMHgwZSwweDgxLDB4MjYsMHhhZiwweDM2LDB4ZmYsMHhmNywweGExLDB4YWYsMHgzNgotLDB4ZTcsMHgwNiwweGU5LDB4MDksMHhmZiwweGU5LDB4ZjUsMHhmZCwweGM3LDB4MDYsMHg0MSwweDM3LDB4MDAsMHgwMCwweDgzLDB4MGUKLSwweDk5LDB4MzYsMHgwMiwweGU5LDB4ZTcsMHhmZCwweDgwLDB4MjYsMHg5ZSwweDM2LDB4ZmYsMHg3NSwweDFkLDB4ZjcsMHgwNiwweDliCi0sMHgzNiwweDAwLDB4NDAsMHg3NSwweDA1LDB4ODMsMHgwZSwweDk5LDB4MzYsMHgwOCwweDgzLDB4MGUsMHg5OSwweDM2LDB4MjAsMHg4MQotLDB4MjYsMHg5YiwweDM2LDB4ZmYsMHhiZiwweGI4LDB4ODUsMHgwMywweGNkLDB4MzksMHhlOSwweGMwLDB4ZmQsMHg4MCwweDNlLDB4OWUKLSwweDM2LDB4MDYsMHg3NCwweDA3LDB4ODAsMHgzZSwweDllLDB4MzYsMHgwYSwweDc1LDB4MzQsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwCi0sMHg3NSwweDA2LDB4YmUsMHgwNywweDAwLDB4ZTksMHg5NiwweGZkLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNCwweDgzLDB4M2UsMHgwZgotLDB4MzcsMHgwMiwweDc0LDB4MWIsMHhjNywweDA2LDB4MGYsMHgzNywweDA0LDB4MDAsMHg4MCwweDNlLDB4OWUsMHgzNiwweDA2LDB4NzUKLSwweDBlLDB4ZjcsMHgwNiwweDliLDB4MzYsMHg0MCwweDAwLDB4NzUsMHgwNiwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDMsMHgwMCwweGU5Ci0sMHg3YiwweGZkLDB4ODAsMHgzZSwweDlkLDB4MzYsMHgwNCwweDc1LDB4MTIsMHg4MSwweDBlLDB4YzIsMHgzNCwweDAwLDB4NDAsMHhmZgotLDB4MDYsMHg5MiwweDM0LDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweGU5LDB4NjIsMHhmZCwweGJlLDB4MDUsMHgwMCwweGU5LDB4NGQKLSwweGZkLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc1LDB4MTksMHg4MywweDBlLDB4YzIsMHgzNCwweDA0LDB4YmUsMHgwNiwweDAwCi0sMHhlOSwweDNiLDB4ZmQsMHg4MCwweDI2LDB4OWUsMHgzNiwweGZmLDB4NzUsMHhjNSwweGZmLDB4MDYsMHgzMSwweDM3LDB4ZTksMHgwMAotLDB4MDAsMHg4MywweDI2LDB4YzIsMHgzNCwweGJmLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweGU5LDB4MmYsMHhmZCwweGU1LDB4MGEKLSwweDUwLDB4MjUsMHhjMywweGJmLDB4ZTcsMHgwYSwweDU4LDB4ODAsMHgyNiwweDllLDB4MzYsMHhmZiwweDc1LDB4MGQsMHhhOSwweDAwCi0sMHg0MCwweDc1LDB4MDgsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4ZTksMHgxMiwweGZkLDB4YjgsMHg4MywweDAzLDB4Y2QsMHgzOQotLDB4YzMsMHhiOCwweDdjLDB4MDMsMHhjZCwweDM5LDB4ZjcsMHgwNiwweGY0LDB4MzMsMHgwMCwweDEwLDB4NzUsMHgwOSwweGM3LDB4MDYKLSwweDMzLDB4MzcsMHgwMiwweDAwLDB4ZTksMHhmNiwweGZjLDB4ZmYsMHgwZSwweDMzLDB4MzcsMHg3NCwweDAzLDB4ZTksMHhlZCwweGZjCi0sMHhmZiwweDA2LDB4OGUsMHgzNCwweGU4LDB4ZjcsMHgxOSwweDgzLDB4MGUsMHhjMiwweDM0LDB4MDgsMHhiZSwweDAzLDB4MDAsMHhlOQotLDB4Y2MsMHhmYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwNCwweDA0LDB4MDUKLSwweDA0LDB4MDQsMHgwNCwweDAwLDB4MDMsMHgwMCwweDAzLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDA0LDB4MDAsMHgwOCwweDA4LDB4MDUsMHgwOCwweDA4LDB4MDgsMHgwMCwweDAzLDB4MDAsMHgwMywweDAzLDB4MDAsMHgwMAotLDB4MDIsMHgwNCwweDA0LDB4MDQsMHgwNCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwYSwweDE0LDB4MDAsMHgwMCwweDFhLDB4MDAKLSwweDFjLDB4MDAsMHgxZSwweDIwLDB4MDAsMHgwMCwweDA0LDB4NDEsMHgwNiwweDBiLDB4MDgsMHhjMiwweGZmLDB4ZTcsMHgwNCwweDAzCi0sMHgwNiwweDA0LDB4MDQsMHgwNSwweDA0LDB4MDYsMHgwNCwweDg3LDB4MDQsMHgwMywweDA2LDB4MDQsMHgwNCwweDg1LDB4NGUsMHhhMgotLDB4MDQsMHhjZiwweDA0LDB4Y2QsMHhjNywweDA2LDB4YTIsMHgzNywweDAwLDB4MDAsMHhjNywweDA2LDB4YTYsMHgzNywweDAwLDB4MDAKLSwweDI2LDB4YTEsMHgyMCwweDAwLDB4MjUsMHg3ZiwweGZmLDB4YTMsMHhmNSwweDM2LDB4MjYsMHhhMSwweDIyLDB4MDAsMHhhMywweGY3Ci0sMHgzNiwweDI2LDB4YTEsMHgyNCwweDAwLDB4YTMsMHhmOSwweDM2LDB4ZTgsMHgzYiwweDE5LDB4OGIsMHhmMCwweDI2LDB4OGIsMHgwZQotLDB4MGUsMHgwMCwweDJiLDB4YzgsMHg4MywweGU5LDB4MGUsMHhiOCwweDAxLDB4ODAsMHg4MywweGY5LDB4MDQsMHg3YywweDUxLDB4MjYKLSwweDhhLDB4NTQsMHgyOCwweDg4LDB4MTYsMHgxYywweDM3LDB4NDAsMHgyNiwweDhiLDB4NmMsMHgyNiwweDg2LDB4Y2QsMHgzYiwweGNkCi0sMHg4NiwweGNkLDB4ODksMHgwZSwweGE0LDB4MzcsMHg3NSwweDM4LDB4NDAsMHgzMiwweGZmLDB4MjYsMHg4YSwweDVjLDB4MjksMHg4MAotLDB4ZmIsMHgxNSwweDc3LDB4MjUsMHg4MCwweGZiLDB4MGEsMHg3NCwweDIwLDB4ODAsMHhmYiwweDAxLDB4NzQsMHgxYiwweGI4LDB4MDQKLSwweDgwLDB4MmUsMHgzYSwweDk3LDB4MDIsMHgyZSwweDc0LDB4MDcsMHgyZSwweDNhLDB4OTcsMHgxOCwweDJlLDB4NzUsMHgxMSwweDMzCi0sMHhjMCwweDgwLDB4ZmIsMHgwOSwweDc1LDB4NGYsMHg4YiwweGYzLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4ZmYsMHhmZgotLDB4NTAsMHg1MiwweGExLDB4YTQsMHgzNywweDg2LDB4YzQsMHgyNiwweDNiLDB4MDYsMHgyNiwweDAwLDB4N2MsMHgzMiwweDI2LDB4ODEKLSwweDNlLDB4MjYsMHgwMCwweDAwLDB4MDQsMHg3ZSwweDI5LDB4OGQsMHg3NCwweDJhLDB4MjYsMHg4YiwweDE0LDB4MjIsMHhkMiwweDc0Ci0sMHgxZiwweDgwLDB4ZTYsMHhiZiwweDgwLDB4ZmUsMHgwOSwweDc1LDB4MTcsMHhjNywweDA2LDB4YTIsMHgzNywweDAxLDB4MDAsMHg4MAotLDB4ZmEsMHgwNCwweDc1LDB4MGMsMHgyNiwweDhiLDB4NDQsMHgwMiwweGEzLDB4MDMsMHgzNywweDg2LDB4YzQsMHhhMywweGQwLDB4MzQKLSwweDVhLDB4NTgsMHhlOSwweGIxLDB4ZmYsMHhiZCwweDcyLDB4MzcsMHgyZSwweDhhLDB4ODcsMHgyZSwweDJlLDB4MjIsMHhjMCwweDc0Ci0sMHgxNiwweDA1LDB4NDQsMHgyZSwweDhiLDB4ZjgsMHgyZSwweDhiLDB4MDUsMHgzZSwweDg5LDB4NDYsMHgwMCwweDgzLDB4YzUsMHgwMgotLDB4ODMsMHhjNywweDAyLDB4MjIsMHhlNCwweDdkLDB4ZWYsMHg4ZCwweDc0LDB4MmEsMHg4MywweGU5LDB4MDQsMHg3NSwweDAzLDB4ZTkKLSwweGExLDB4MDAsMHgyNiwweDhiLDB4MTQsMHgyMiwweGQyLDB4NzUsMHgwMywweGU5LDB4N2MsMHgwMCwweGM3LDB4MDYsMHhhNiwweDM3Ci0sMHgwMSwweDAwLDB4YmYsMHg3MiwweDM3LDB4OGIsMHgwNSwweDgzLDB4YzcsMHgwMiwweDgwLDB4ZTYsMHhiZiwweDgwLDB4ZTQsMHgzZgotLDB4ODAsMHhmZSwweDA5LDB4NzUsMHgyMiwweDgwLDB4ZmEsMHgwNCwweDc1LDB4NWUsMHhjNywweDA2LDB4YTIsMHgzNywweDAxLDB4MDAKLSwweDI2LDB4OGIsMHg0NCwweDAyLDB4YTMsMHgwMywweDM3LDB4ODYsMHhjNCwweGEzLDB4ZDAsMHgzNCwweDg2LDB4YzQsMHhjNywweDA2Ci0sMHhhNiwweDM3LDB4MDAsMHgwMCwweGU5LDB4NDcsMHgwMCwweDNiLDB4ZmQsMHg3ZSwweDE1LDB4MjYsMHg4YiwweDA0LDB4YTgsMHg0MAotLDB4NzQsMHgwNiwweGI4LDB4MDcsMHg4MCwweGU5LDB4MzgsMHhmZiwweDMyLDB4YzAsMHgyNiwweDhiLDB4MDQsMHhlOSwweDJlLDB4MDAKLSwweDNhLDB4ZjQsMHg3NSwweGIxLDB4YzcsMHg0NSwweGZlLDB4MDAsMHgwMCwweDgwLDB4ZmUsMHgyMiwweDc1LDB4MGQsMHgzYSwweGQwCi0sMHg3NywweDE2LDB4YzcsMHgwNiwweGE2LDB4MzcsMHgwMCwweDAwLDB4ZTksMHgxMywweDAwLDB4M2EsMHhkMCwweDc1LDB4MDksMHhjNwotLDB4MDYsMHhhNiwweDM3LDB4MDAsMHgwMCwweGU5LDB4MDYsMHgwMCwweGI4LDB4MDUsMHg4MCwweGU5LDB4MDIsMHhmZiwweDMyLDB4ZjYKLSwweDAzLDB4ZjIsMHgyYiwweGNhLDB4YjgsMHgwNSwweDgwLDB4MjMsMHhjOSwweDc2LDB4MDMsMHhlOSwweDY0LDB4ZmYsMHg3NCwweDAzCi0sMHhlOSwweGVkLDB4ZmUsMHgzMywweGMwLDB4YmYsMHg3MiwweDM3LDB4OGIsMHgxNSwweDQ3LDB4NDcsMHgzYiwweGZkLDB4N2YsMHgxYgotLDB4ZjYsMHhjNiwweDgwLDB4NzQsMHgxNiwweGY3LDB4MDYsMHhhNiwweDM3LDB4MDEsMHgwMCwweDc0LDB4MDYsMHhiOCwweDA4LDB4ODAKLSwweGU5LDB4YzMsMHhmZSwweGY2LDB4YzYsMHg0MCwweDc0LDB4ZTAsMHhiOCwweDA3LDB4ODAsMHhlOSwweGI4LDB4ZmUsMHg3ZCwweDQyCi0sMHhhMywweDQ1LDB4NDQsMHgyOSwweDQ0LDB4MjksMHhiNywweDI4LDB4ZTIsMHgyOCwweGVlLDB4MmIsMHhmMiwweDI4LDB4ZjUsMHgyOAotLDB4MDEsMHgyOSwweGFjLDB4MmEsMHg0NCwweDI5LDB4NDQsMHgyOSwweDQ0LDB4MjksMHg0NCwweDI5LDB4NDQsMHgyOSwweDAwLDB4MDAKLSwweDczLDB4MzYsMHgwMCwweDAwLDB4MDMsMHgzNiwweGM1LDB4MzUsMHg4MywweDM1LDB4NDUsMHgzNSwweDA3LDB4MzUsMHhkMiwweDM0Ci0sMHg0NSwweDM0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweGE2LDB4MzgsMHgwMCwweDAwLDB4ZTAsMHgzOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHhmMiwweDMzLDB4MDAsMHgwMCwweGE2LDB4MzMsMHg2MCwweDMzLDB4ZmQsMHgzMiwweGJjLDB4MzIsMHg3NywweDMyLDB4M2MsMHgzMgotLDB4ZmIsMHgzMSwweDZhLDB4MzEsMHgwYSwweDMxLDB4ZTAsMHhlMCwweDEwLDB4MTAsMHgxMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMAotLDB4ZTAsMHgzMywweGZmLDB4MjYsMHhmNiwweDA2LDB4MWEsMHgwMCwweDgwLDB4NzQsMHgxYiwweDI2LDB4ODAsMHgyNiwweDFhLDB4MDAKLSwweDdmLDB4MjYsMHg4YiwweDNlLDB4MjYsMHgwMCwweDgzLDB4ZTcsMHgxZiwweDc0LDB4MGIsMHgyNiwweDgwLDB4MGUsMHgyMCwweDAwCi0sMHg4MCwweDI2LDB4MDEsMHgzZSwweDBlLDB4MDAsMHhjMywweDYwLDB4MmUsMHg4YiwweDg0LDB4YTYsMHgzMCwweDI2LDB4YTMsMHgxOAotLDB4MDAsMHhkMSwweGU2LDB4MmUsMHhmZiwweDk0LDB4NTAsMHgzMCwweDYxLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4YzQKLSwweDJhLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDE2LDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweDI2Ci0sMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHhiZiwweDA1LDB4ZTgsMHg5OCwweDA1LDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMAotLDB4MDAsMHgwOCwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHg0MCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgyYSwweGJmLDB4MmEKLSwweDAwLDB4MjYsMHhjNiwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDJhLDB4YTEsMHg5MywweDM3LDB4MzMsMHhkYiwweGE5Ci0sMHg0MCwweDAwLDB4NzUsMHgwMiwweGIzLDB4MDEsMHhhOSwweDAwLDB4MTAsMHg3NCwweDAyLDB4YjcsMHg4OCwweGE5LDB4MDAsMHgwOAotLDB4NzQsMHgwMywweDgwLDB4Y2YsMHg0NCwweDI2LDB4ODksMHg1ZCwweDAyLDB4YzMsMHg4MywweDBlLDB4YzIsMHgzNCwweDIwLDB4MjYKLSwweGM3LDB4MDYsMHgwNCwweDAwLDB4NmIsMHgyYiwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgzMCwweDAwLDB4MjYsMHhjNywweDA2Ci0sMHgwNiwweDAwLDB4MGEsMHgwMCwweDI2LDB4YzcsMHgwNiwweDBhLDB4MDAsMHgwNCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMAotLDB4MDAsMHhlOCwweDY5LDB4MDUsMHhlOCwweDJjLDB4MDUsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgyMiwweDI2LDB4YzYKLSwweDA2LDB4MjgsMHgwMCwweDYwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDI5LDB4YmYsMHgyYSwweDAwLDB4MjYsMHhjNiwweDA1Ci0sMHgwOCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MmQsMHg4ZCwweDdkLDB4MDIsMHhiZSwweDU0LDB4MzcsMHhiOSwweDAzLDB4MDAsMHhmMwotLDB4YTUsMHgyNiwweGM2LDB4MDUsMHgwOCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MmUsMHg4ZCwweDdkLDB4MDIsMHhiZSwweDVhLDB4MzcKLSwweGI5LDB4MDMsMHgwMCwweGYzLDB4YTUsMHhlOCwweGQ0LDB4MDUsMHhlOCwweDY0LDB4MDUsMHhiOSwweDA2LDB4MDAsMHhiZSwweDU0Ci0sMHgzNywweDhkLDB4MmUsMHgyYywweDAwLDB4MjYsMHg4YiwweDQ2LDB4MDAsMHgyOSwweDA0LDB4ODMsMHhjNiwweDAyLDB4ODMsMHhjNQotLDB4MDIsMHg4MywweGY5LDB4MDQsMHg3NSwweDAyLDB4NDUsMHg0NSwweGUyLDB4ZWIsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAKLSwweGM0LDB4MmEsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MjQsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwCi0sMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweGU0LDB4MDQsMHhlOCwweGE3LDB4MDQsMHgyNiwweGM3LDB4MDYsMHgyNgotLDB4MDAsMHgwMCwweDE2LDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDYwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDI4LDB4YmYKLSwweDJhLDB4MDAsMHhlOCwweDViLDB4MDYsMHhlOCwweDc0LDB4MDUsMHhlOCwweDA0LDB4MDUsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0Ci0sMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MWEsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNgotLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweGEzLDB4MDQsMHhlOCwweDY2LDB4MDQsMHgyNiwweGM3LDB4MDYKLSwweDI2LDB4MDAsMHgwMCwweDBjLDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDYwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDI3Ci0sMHhiZiwweDJhLDB4MDAsMHhlOCwweDIxLDB4MDUsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNwotLDB4MDYsMHgwZSwweDAwLDB4MjAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwYSwweDAwLDB4MjYsMHhjNywweDA2LDB4MGEKLSwweDAwLDB4MDQsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4NGIsMHgwNCwweGU4LDB4MjQsMHgwNCwweDI2Ci0sMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MTIsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4NDAsMHgyNiwweGM2LDB4MDYsMHgyOQotLDB4MDAsMHgyNiwweGJmLDB4MmEsMHgwMCwweGU4LDB4ZjQsMHgwNCwweGU4LDB4ODQsMHgwNCwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQKLSwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgzNCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2Ci0sMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4MGQsMHgwNCwweGU4LDB4ZTYsMHgwMywweDI2LDB4YzcsMHgwNgotLDB4MjYsMHgwMCwweDAwLDB4MjYsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4NDAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MjUKLSwweGJmLDB4MmEsMHgwMCwweGU4LDB4YjYsMHgwNCwweGU4LDB4NDYsMHgwNCwweGU4LDB4ZmEsMHgwNCwweGMzLDB4MjYsMHhjNywweDA2Ci0sMHgwNCwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgzOCwweDAwLDB4YTEsMHhhMiwweDM3LDB4NTAsMHgwYgotLDB4YzAsMHg3NSwweDA3LDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDM0LDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYKLSwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHg5OSwweDAzLDB4ZTgsMHhhNCwweGZkLDB4MjYsMHhjNywweDQ1Ci0sMHgyNiwweDAwLDB4MmEsMHg1OCwweDBiLDB4YzAsMHg3NSwweDA2LDB4MjYsMHhjNywweDQ1LDB4MjYsMHgwMCwweDI2LDB4YTEsMHgxYwotLDB4MzcsMHhjMSwweGUwLDB4MDQsMHgyNiwweDg4LDB4NDUsMHgyOCwweDI2LDB4YzYsMHg0NSwweDI5LDB4MjQsMHg4MywweGM3LDB4MmEKLSwweGU4LDB4MjksMHgwNCwweGU4LDB4YTAsMHgwNCwweGU4LDB4MjIsMHgwNSwweGU4LDB4ZjgsMHgwMywweGU4LDB4MDksMHgwNCwweGMzCi0sMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgzMiwweDAwLDB4MjYsMHhjNwotLDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4NDUsMHgwMywweGU4LDB4NTAKLSwweGZkLDB4MjYsMHhjNywweDQ1LDB4MjYsMHgwMCwweDI0LDB4YTEsMHgxYywweDM3LDB4YzEsMHhlMCwweDA0LDB4MjYsMHg4OCwweDQ1Ci0sMHgyOCwweDI2LDB4YzYsMHg0NSwweDI5LDB4MjMsMHg4MywweGM3LDB4MmEsMHhlOCwweGUwLDB4MDMsMHhlOCwweDZjLDB4MDQsMHhlOAotLDB4OGEsMHgwNCwweGU4LDB4OWMsMHgwNCwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3LDB4MDYKLSwweDBlLDB4MDAsMHgzNCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwCi0sMHgwMCwweGU4LDB4ZmYsMHgwMiwweGU4LDB4MGEsMHhmZCwweDI2LDB4YzcsMHg0NSwweDI2LDB4MDAsMHgyNiwweGExLDB4MWMsMHgzNwotLDB4YzEsMHhlMCwweDA0LDB4MjYsMHg4OCwweDQ1LDB4MjgsMHgyNiwweGM2LDB4NDUsMHgyOSwweDIyLDB4ODMsMHhjNywweDJhLDB4ZTgKLSwweDlhLDB4MDMsMHhlOCwweGM3LDB4MDMsMHhlOCwweDU3LDB4MDMsMHhlOCwweGY4LDB4MDMsMHhlOCwweDc4LDB4MDQsMHhlOCwweDhhCi0sMHgwNCwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweDc0LDB4NDUsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4M2UsMHgwMAotLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwYSwweDAwLDB4MDQsMHgwMCwweDI2LDB4YzYKLSwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHhmYywweDAyLDB4ZTgsMHhhOSwweDAyLDB4ODMsMHgzZSwweDhkLDB4MzcsMHgwMywweDc1Ci0sMHgwMSwweDkwLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MzAsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4NTAsMHgyNgotLDB4YzYsMHgwNiwweDI5LDB4MDAsMHgyMCwweGJmLDB4MmEsMHgwMCwweGU4LDB4ZDAsMHgwMywweGU4LDB4MDEsMHgwMywweGU4LDB4YjUKLSwweDAzLDB4ZTgsMHg5ZiwweDAzLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4NjEsMHg0MywweGI5LDB4ZjAsMHgwMCwweDgzCi0sMHhlOSwweDAyLDB4MjYsMHg4OSwweDBlLDB4MGUsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwMiwweDAwLDB4MjYsMHhjNgotLDB4MDYsMHgxOSwweDAwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgxYSwweDAwLDB4MDAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDFjLDB4MDAKLSwweDAwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgxZSwweDAwLDB4MDAsMHgwMCwweGU4LDB4NDcsMHgwMiwweDgzLDB4ZTksMHgwZSwweDg2Ci0sMHhjZCwweDI2LDB4ODksMHgwZSwweDI2LDB4MDAsMHg4NiwweGNkLDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDAwLDB4MjYsMHhjNgotLDB4MDYsMHgyOSwweDAwLDB4MDgsMHhiZiwweDJhLDB4MDAsMHg4MywweGU5LDB4MDQsMHgyNiwweDg5LDB4MGQsMHgyNiwweGM2LDB4NDUKLSwweDAxLDB4MjYsMHg4ZCwweDdkLDB4MDIsMHg4MywweGU5LDB4MDIsMHhiYiwweDAxLDB4MDAsMHhiOCwweDMwLDB4MzAsMHg0YiwweDc1Ci0sMHgxNywweGJiLDB4MGEsMHgwMCwweDhhLDB4YzQsMHgyNiwweDg4LDB4MDUsMHhiMCwweDMxLDB4ODAsMHhjNCwweDAxLDB4ODAsMHhmYwotLDB4M2EsMHg3NSwweDBhLDB4YjQsMHg2MSwweGU5LDB4MDUsMHgwMCwweDI2LDB4ODgsMHgwNSwweDA0LDB4MDEsMHg0NywweDQ5LDB4NzUKLSwweGRkLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4MDQsMHg0NSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgxMiwweDAwCi0sMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMSwweGU4LDB4ZTUsMHgwMQotLDB4ZTgsMHhkMCwweDAxLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MDQsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4MDAKLSwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgwNywweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3Ci0sMHgwNiwweDBlLDB4MDAsMHgyMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOQotLDB4MDAsMHgwNiwweGU4LDB4MDQsMHgwMiwweGU4LDB4OWIsMHgwMSwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDEyLDB4MjYKLSwweGM2LDB4MDYsMHgyOCwweDAwLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MDYsMHhiZiwweDJhLDB4MDAsMHhlOCwweDZiCi0sMHgwMiwweGU4LDB4ZmIsMHgwMSwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3LDB4MDYsMHgwZQotLDB4MDAsMHgyMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDUKLSwweGU4LDB4YzYsMHgwMSwweGU4LDB4NWQsMHgwMSwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDEyLDB4MjYsMHhjNiwweDA2Ci0sMHgyOCwweDAwLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MDUsMHhiZiwweDJhLDB4MDAsMHhlOCwweDJkLDB4MDIsMHhlOAotLDB4YmQsMHgwMSwweGMzLDB4ZmYsMHgwNiwweDgyLDB4MzQsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4M2QsMHg0MSwweDI2LDB4YzcKLSwweDA2LDB4MGUsMHgwMCwweDIwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MGUsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5Ci0sMHgwMCwweDA0LDB4ZTgsMHg4NCwweDAxLDB4ZTgsMHgxYiwweDAxLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MTIsMHgyNgotLDB4YzYsMHgwNiwweDI4LDB4MDAsMHgwMCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgwNCwweGJmLDB4MmEsMHgwMCwweGU4LDB4ZWIKLSwweDAxLDB4ZTgsMHg3YiwweDAxLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4NjcsMHg0MiwweDI2LDB4YzcsMHgwNiwweDBlCi0sMHgwMCwweDIwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDgsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMwotLDB4ZTgsMHg0NiwweDAxLDB4ZTgsMHhkZCwweDAwLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MTIsMHgyNiwweGM2LDB4MDYKLSwweDI4LDB4MDAsMHgwMCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgwMywweGJmLDB4MmEsMHgwMCwweGU4LDB4YWQsMHgwMSwweGU4Ci0sMHgzZCwweDAxLDB4YzMsMHhmZiwweDA2LDB4ODQsMHgzNCwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHg2NywweDQyLDB4MjYsMHhjNwotLDB4MDYsMHgwZSwweDAwLDB4MjQsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwOCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTkKLSwweDAwLDB4MDIsMHhlOCwweDA0LDB4MDEsMHhlOCwweDliLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgxNiwweDI2Ci0sMHhjNiwweDA2LDB4MjgsMHgwMCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDAyLDB4YmYsMHgyYSwweDAwLDB4MjYsMHhjNgotLDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MDEsMHhhMSwweDBmLDB4MzcsMHg4NiwweGUwLDB4ZjYsMHgwNiwweDZmLDB4MzcKLSwweDAxLDB4NzUsMHgwZiwweDM5LDB4MDYsMHhjYywweDM0LDB4NzQsMHgwOSwweDhiLDB4ZDgsMHhiOCwweDg5LDB4MDMsMHhjZCwweDM5Ci0sMHg4YiwweGMzLDB4YTMsMHhjYywweDM0LDB4MjYsMHg4OSwweDQ1LDB4MDIsMHg4ZCwweDdkLDB4MDQsMHhlOCwweDNkLDB4MDEsMHhlOAotLDB4Y2QsMHgwMCwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MWMKLSwweDAwLDB4YTEsMHhhMiwweDM3LDB4NTAsMHgwYiwweGMwLDB4NzUsMHgwNywweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgxOCwweDAwCi0sMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4MjMsMHgwMAotLDB4ZTgsMHgyZSwweGZhLDB4MjYsMHhjNywweDQ1LDB4MjYsMHgwMCwweDBlLDB4NTgsMHgwYiwweGMwLDB4NzUsMHgwNiwweDI2LDB4YzcKLSwweDQ1LDB4MjYsMHgwMCwweDBhLDB4MjYsMHhjNiwweDQ1LDB4MjksMHgwMCwweDgzLDB4YzcsMHgyYSwweGU4LDB4YmQsMHgwMCwweGU4Ci0sMHhmZiwweDAwLDB4YzMsMHg1NiwweDU3LDB4NTEsMHhiOSwweDAzLDB4MDAsMHhiZSwweGQxLDB4MzYsMHhiZiwweDIwLDB4MDAsMHhmMwotLDB4YTUsMHg1OSwweDVmLDB4NWUsMHhjMywweDU2LDB4NTcsMHg1MSwweGI5LDB4MDMsMHgwMCwweGJlLDB4ZDEsMHgzNiwweGJmLDB4MWEKLSwweDAwLDB4ZjMsMHhhNSwweDU5LDB4NWYsMHg1ZSwweGMzLDB4MjYsMHhjNywweDA2LDB4MWEsMHgwMCwweGMwLDB4MDAsMHgyNiwweGM3Ci0sMHgwNiwweDFjLDB4MDAsMHgwMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MWUsMHgwMCwweDAwLDB4MTAsMHhjMywweDI2LDB4YzcsMHgwNgotLDB4MWEsMHgwMCwweGMwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgxYywweDAwLDB4MDAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDFlLDB4MDAKLSwweDAwLDB4MDgsMHhjMywweDI2LDB4YzcsMHgwNiwweDFhLDB4MDAsMHhjMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MWMsMHgwMCwweDAwCi0sMHgwMCwweDI2LDB4YzcsMHgwNiwweDFlLDB4MDAsMHgwMCwweDAyLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgxYSwweDAwLDB4YzAsMHgwMAotLDB4MjYsMHhjNywweDA2LDB4MWMsMHgwMCwweGZmLDB4ZmYsMHgyNiwweGM3LDB4MDYsMHgxZSwweDAwLDB4ZmYsMHhmZiwweGMzLDB4MjYKLSwweGM2LDB4MDUsMHgwOCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MDIsMHg4ZCwweDdkLDB4MDIsMHhiZSwweDA1LDB4MzcsMHhiOSwweDAzCi0sMHgwMCwweGYzLDB4YTUsMHhjMywweDI2LDB4YzYsMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgwNiwweGExLDB4MGQsMHgzNwotLDB4MjYsMHg4OSwweDQ1LDB4MDIsMHg4ZCwweDdkLDB4MDQsMHhjMywweDI2LDB4YzYsMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEKLSwweDA3LDB4YTEsMHgwYiwweDM3LDB4MjYsMHg4OSwweDQ1LDB4MDIsMHg4MywweGM3LDB4MDQsMHhjMywweGExLDB4YTIsMHgzNywweDBiCi0sMHhjMCwweDc0LDB4MTMsMHgyNiwweGM2LDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MDksMHhhMSwweDAzLDB4MzcsMHgyNgotLDB4ODksMHg0NSwweDAyLDB4ODMsMHhjNywweDA0LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwOCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MDIKLSwweDhkLDB4N2QsMHgwMiwweGJlLDB4MDUsMHgzNywweGI5LDB4MDMsMHgwMCwweGYzLDB4YTUsMHhjMywweDI2LDB4YzYsMHgwNSwweDA2Ci0sMHgyNiwweGM2LDB4NDUsMHgwMSwweDBiLDB4OGQsMHg3ZCwweDAyLDB4YmUsMHhlZiwweDM2LDB4YjksMHgwMiwweDAwLDB4ZjMsMHhhNQotLDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNiwweDI2LDB4YzYsMHg0NSwweDAxLDB4MjAsMHhhMSwweDY4LDB4MzcsMHgyNiwweDg5LDB4NDUKLSwweDAyLDB4YTEsMHg2YSwweDM3LDB4MjYsMHg4OCwweDY1LDB4MDUsMHhjMSwweGUwLDB4MDQsMHgyNiwweDg4LDB4NDUsMHgwNCwweDgzCi0sMHhjNywweDA2LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MjEsMHgyNiwweGM3LDB4NDUsMHgwMgotLDB4MDAsMHgwMCwweDgzLDB4YzcsMHgwNCwweGMzLDB4MjYsMHhjNiwweDA1LDB4MTQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDIyLDB4OGQKLSwweDdkLDB4MDIsMHhiZSwweDFmLDB4MzcsMHhiOSwweDA5LDB4MDAsMHhmMywweGE1LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwYywweDI2Ci0sMHhjNiwweDQ1LDB4MDEsMHgyMywweDhkLDB4N2QsMHgwMiwweDFlLDB4MGUsMHgxZiwweDhkLDB4MzYsMHg0MCwweDU0LDB4YjksMHgwMwotLDB4MDAsMHhmMywweGE1LDB4MzMsMHhjMCwweGI5LDB4MDIsMHgwMCwweGYzLDB4YWIsMHgxZiwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDgKLSwweDI2LDB4YzYsMHg0NSwweDAxLDB4MjgsMHg4ZCwweDdkLDB4MDIsMHhiZSwweGQxLDB4MzYsMHhiOSwweDAzLDB4MDAsMHhmMywweGE1Ci0sMHhjMywweDI2LDB4YzYsMHgwNSwweDA4LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyOSwweGExLDB4YzIsMHgzNCwweDg2LDB4ZTAsMHgyNgotLDB4ODksMHg0NSwweDAyLDB4YTEsMHg5YiwweDM2LDB4MjYsMHg4OSwweDQ1LDB4MDQsMHgyNiwweDg4LDB4NDUsMHgwNiwweDI2LDB4ODgKLSwweDQ1LDB4MDcsMHg4ZCwweDdkLDB4MDgsMHhjMywweDI2LDB4YzYsMHgwNSwweDA2LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyYiwweDhkCi0sMHg3ZCwweDAyLDB4YmUsMHhiYiwweDM2LDB4YjksMHgwMiwweDAwLDB4ZjMsMHhhNSwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDYsMHgyNgotLDB4YzYsMHg0NSwweDAxLDB4MmMsMHg4ZCwweDdkLDB4MDIsMHhiZSwweGU1LDB4MzYsMHhiOSwweDAyLDB4MDAsMHhmMywweGE1LDB4YzMKLSwweDI2LDB4YzYsMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgzMCwweGExLDB4MzcsMHgzNywweDg2LDB4ZTAsMHgyNiwweDg5Ci0sMHg0NSwweDAyLDB4OGQsMHg3ZCwweDA0LDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MWUsMHgwMCwweDI2LDB4YzcsMHgwNgotLDB4MDYsMHgwMCwweDAyLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweDZjLDB4ZmUsMHhlOCwweDAzLDB4ZmUKLSwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDEwLDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDMwLDB4MjYsMHhjNiwweDA2Ci0sMHgyOSwweDAwLDB4MTEsMHhiZiwweDJhLDB4MDAsMHhlOCwweDM1LDB4MDAsMHhlOCwweDQ1LDB4MDAsMHhlOCwweDU1LDB4MDAsMHhjMwotLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDEyLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDIsMHgwMCwweDI2LDB4YzYKLSwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHgzMiwweGZlLDB4ZTgsMHhjOSwweGZkLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwCi0sMHgwNCwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHgzMCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgxMywweGMzLDB4MjYsMHhjNgotLDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MGMsMHgyNiwweGM3LDB4NDUsMHgwMiwweDAwLDB4MDEsMHg4MywweGM3LDB4MDQKLSwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDBlLDB4MjYsMHhjNywweDQ1LDB4MDIsMHgwMCwweDAyCi0sMHg4MywweGM3LDB4MDQsMHhjMywweDI2LDB4YzYsMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyMSwweDI2LDB4YzcsMHg0NQotLDB4MDIsMHgwMCwweDAwLDB4ODMsMHhjNywweDA0LDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweGIzLDB4MzksMHhjOSwweDM5LDB4ODMsMHgzYSwweGIzLDB4MzksMHhiMywweDM5LDB4YjMsMHgzOSwweDFjLDB4M2EsMHgxYywweDNhCi0sMHhhMywweGI2LDB4MzQsMHhhMSwweGU5LDB4MzYsMHhhMywweDExLDB4MzcsMHhhMywweGQyLDB4MzQsMHhhMSwweGViLDB4MzYsMHhhMwotLDB4MTMsMHgzNywweGEzLDB4ZDQsMHgzNCwweGExLDB4ZWQsMHgzNiwweGEzLDB4MTUsMHgzNywweGEzLDB4ZDYsMHgzNCwweGExLDB4MDEKLSwweDM3LDB4YTMsMHhjZSwweDM0LDB4YTEsMHhmNywweDM2LDB4YTMsMHgxNywweDM3LDB4YTMsMHhkYywweDM0LDB4YTEsMHhmOSwweDM2Ci0sMHhhMywweDE5LDB4MzcsMHhhMywweGRlLDB4MzQsMHhmNywweDA2LDB4OWIsMHgzNiwweDAyLDB4MDAsMHg3NSwweDBjLDB4MzMsMHhjMAotLDB4YTAsMHg5ZSwweDM2LDB4OGIsMHhmMCwweDJlLDB4ZmYsMHhhNCwweDUwLDB4MzksMHhlOSwweDBmLDB4MDEsMHhiZSwweDA3LDB4MDAKLSwweGU5LDB4MTksMHhmMSwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweGYzLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwMiwweGM2Ci0sMHgwNiwweDZlLDB4MzcsMHgwOCwweGM2LDB4MDYsMHg3MCwweDM3LDB4MDIsMHhiOCwweDg4LDB4MDMsMHhjZCwweDM5LDB4ZjYsMHgwNgotLDB4NmYsMHgzNywweDAxLDB4NzUsMHg0YSwweGExLDB4ZDEsMHgzNiwweDNhLDB4MDYsMHhlOSwweDM2LDB4NzUsMHg0MSwweDNhLDB4MjYKLSwweGVhLDB4MzYsMHg3NSwweDNiLDB4YTEsMHhkMywweDM2LDB4M2EsMHgwNiwweGViLDB4MzYsMHg3NSwweDMyLDB4M2EsMHgyNiwweGVjCi0sMHgzNiwweDc1LDB4MmMsMHhhMSwweGQ1LDB4MzYsMHgzYSwweDA2LDB4ZWQsMHgzNiwweDc1LDB4MjMsMHgzYSwweDI2LDB4ZWUsMHgzNgotLDB4NzUsMHgxZCwweGM2LDB4MDYsMHg3MCwweDM3LDB4MDIsMHhmZSwweDBlLDB4NmUsMHgzNywweDc1LDB4MGYsMHhiOCwweDg4LDB4MDMKLSwweGNkLDB4M2EsMHg4MywweDBlLDB4OWIsMHgzNiwweDEyLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwYywweGU5LDB4YTgsMHhmMCwweGExCi0sMHgwNSwweDM3LDB4MjYsMHgzYiwweDA2LDB4MjAsMHgwMCwweDc1LDB4NDAsMHhhMSwweDA3LDB4MzcsMHgyNiwweDNiLDB4MDYsMHgyMgotLDB4MDAsMHg3NSwweDM2LDB4YTEsMHgwOSwweDM3LDB4MjYsMHgzYiwweDA2LDB4MjQsMHgwMCwweDc1LDB4MmMsMHhhMCwweDllLDB4MzYKLSwweDNjLDB4MDIsMHg3NSwweDA4LDB4MjYsMHhmNiwweDA2LDB4MTgsMHgwMCwweDA4LDB4NzUsMHg0NywweGM2LDB4MDYsMHg2ZSwweDM3Ci0sMHgwOCwweGZlLDB4MGUsMHg3MCwweDM3LDB4NzUsMHgxYywweGM2LDB4MDYsMHg3MCwweDM3LDB4MDIsMHhlNSwweDAyLDB4MGQsMHgwMQotLDB4MDQsMHgyNSwweGVmLDB4ZmYsMHhlNywweDAyLDB4ZTksMHg1ZSwweGYwLDB4YzYsMHgwNiwweDcwLDB4MzcsMHgwMiwweGM2LDB4MDYKLSwweDZlLDB4MzcsMHgwOCwweGU1LDB4MDIsMHgyNSwweGZmLDB4ZmIsMHgwZCwweDAxLDB4MDAsMHgyNSwweGVmLDB4ZmYsMHhlNywweDAyCi0sMHhlOSwweDQ0LDB4ZjAsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDEsMHg3NCwweDI1LDB4MjYsMHhmNiwweDA2LDB4MTgsMHgwMAotLDB4MDgsMHg3NSwweGVkLDB4ODEsMHgyNiwweDliLDB4MzYsMHg3ZiwweGZmLDB4YjgsMHg4OSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODQKLSwweDAzLDB4Y2QsMHgzYSwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHg4MywweDI2LDB4YzIsMHgzNCwweGFmLDB4ZTksMHgxNywweGYwCi0sMHhhMSwweDAxLDB4MzcsMHgzYSwweDI2LDB4MGYsMHgzNywweDdmLDB4YzcsMHhlOSwweGY3LDB4ZmUsMHg4MywweDI2LDB4OWIsMHgzNgotLDB4ZWMsMHhlOCwweDJhLDB4MGQsMHg4MSwweDBlLDB4OWIsMHgzNiwweDgwLDB4MDAsMHhiYiwweGZmLDB4N2YsMHhjZCwweDUzLDB4YzYKLSwweDA2LDB4YTAsMHgzNiwweDAyLDB4ZTksMHhmMCwweGVmLDB4ODMsMHgwZSwweDliLDB4MzYsMHgxMSwweGM2LDB4MDYsMHhhMCwweDM2Ci0sMHgwYywweGU5LDB4ZjksMHhlZiwweDQ0LDB4M2IsMHgyYywweDNiLDB4YzcsMHgyYSwweDZiLDB4M2IsMHg0NCwweDNiLDB4YzcsMHgyYQotLDB4YzcsMHgyYSwweGM3LDB4MmEsMHhhMywweGI2LDB4MzQsMHg4MSwweDBlLDB4YzIsMHgzNCwweDAwLDB4MjAsMHhmNywweDA2LDB4NDEKLSwweDM3LDB4MDEsMHgwMCwweDc0LDB4MWIsMHg4YywweGMzLDB4YzcsMHgwNiwweDQxLDB4MzcsMHgwMCwweDAwLDB4YjgsMHg3ZiwweDAzCi0sMHhjZCwweDNhLDB4MzMsMHhjMCwweDhlLDB4YzAsMHhiZiwweDU0LDB4MzcsMHhiOSwweDA2LDB4MDAsMHhmMywweGFiLDB4OGUsMHhjMwotLDB4MzMsMHhjMCwweGEwLDB4OWUsMHgzNiwweDhiLDB4ZjAsMHgyZSwweGZmLDB4YTQsMHhlNCwweDNhLDB4ZjcsMHgwNiwweDliLDB4MzYKLSwweDAwLDB4MDEsMHg3NSwweDIxLDB4ODMsMHgyNiwweGMyLDB4MzQsMHhiZiwweGExLDB4YTksMHgzNiwweGU3LDB4MDAsMHhhMSwweDliCi0sMHgzNiwweGU5LDB4MDksMHgwMCwweGExLDB4OWIsMHgzNiwweDgxLDB4MjYsMHg5YiwweDM2LDB4ZmYsMHhkZiwweGE5LDB4MDAsMHgyMAotLDB4NzUsMHgwNiwweGU5LDB4NmUsMHgwMCwweGU5LDB4NmYsMHhlZiwweDgzLDB4MGUsMHg5OSwweDM2LDB4MDQsMHhjNywweDA2LDB4MzcKLSwweDM3LDB4MDEsMHgwMCwweGM2LDB4MDYsMHhjYSwweDM0LDB4MDEsMHhlOSwweDU4LDB4MDAsMHg4MywweDBlLDB4OWIsMHgzNiwweDQwCi0sMHhlOCwweDU4LDB4MDAsMHhhMSwweDA1LDB4MzcsMHgzYiwweDA2LDB4ZTksMHgzNiwweDc1LDB4MzcsMHhhMSwweDA3LDB4MzcsMHgzYgotLDB4MDYsMHhlYiwweDM2LDB4NzUsMHgyZSwweGExLDB4MDksMHgzNywweDNiLDB4MDYsMHhlZCwweDM2LDB4NzUsMHgyNSwweGZlLDB4MGUKLSwweDcxLDB4MzcsMHg3NSwweDFjLDB4YjgsMHg4NywweDAzLDB4Y2QsMHgzYSwweDgzLDB4MGUsMHg5OSwweDM2LDB4MTAsMHhhMSwweDUwCi0sMHgzNywweGM3LDB4MDYsMHg1MCwweDM3LDB4MDAsMHgwMCwweDA5LDB4MDYsMHg5OSwweDM2LDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwOAotLDB4ZTksMHgxNCwweGVmLDB4ODMsMHgwZSwweDk5LDB4MzYsMHgwNCwweGM3LDB4MDYsMHgzNywweDM3LDB4MDMsMHgwMCwweGM2LDB4MDYKLSwweGNhLDB4MzQsMHgwMywweGM2LDB4MDYsMHhhMCwweDM2LDB4MGEsMHhlOSwweGZjLDB4ZWUsMHhhMSwweGQxLDB4MzYsMHgyNiwweDNiCi0sMHgwNiwweDIwLDB4MDAsMHg3NSwweDE1LDB4YTEsMHhkMywweDM2LDB4MjYsMHgzYiwweDA2LDB4MjIsMHgwMCwweDc1LDB4MTIsMHhhMQotLDB4ZDUsMHgzNiwweDI2LDB4M2IsMHgwNiwweDI0LDB4MDAsMHg3NSwweDBmLDB4YzMsMHg4ZCwweDM2LDB4MjAsMHgwMCwweGU5LDB4MGIKLSwweDAwLDB4OGQsMHgzNiwweDIyLDB4MDAsMHhlOSwweDA0LDB4MDAsMHg4ZCwweDM2LDB4MjQsMHgwMCwweDgzLDB4YzQsMHgwMiwweGY3Ci0sMHgwNiwweGU2LDB4MzQsMHgwMSwweDAwLDB4NzQsMHgxNSwweDI2LDB4M2EsMHgwNCwweDc3LDB4MDgsMHg3MiwweDBlLDB4MjYsMHgzYQotLDB4NjQsMHgwMSwweDcyLDB4MDgsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4ZTksMHhhYiwweGVlLDB4ZTgsMHg3YywweDBhLDB4OGMKLSwweGMwLDB4M2QsMHhmZiwweGZmLDB4NzQsMHgxYiwweDI2LDB4YzYsMHgwNiwweDE4LDB4MDAsMHgxMCwweDI2LDB4YzcsMHgwNiwweDA0Ci0sMHgwMCwweDQ5LDB4M2MsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MGMsMHgwMCwweGNkLDB4NTAsMHhiOSwweDRlLDB4MDAsMHhlMgotLDB4ZmUsMHhjNiwweDA2LDB4YTAsMHgzNiwweDBhLDB4ZTksMHg5NCwweGVlLDB4ZTksMHg3YiwweGVlLDB4OGYsMHgzYywweDA2LDB4M2QKLSwweDA2LDB4M2QsMHgwNiwweDNkLDB4ZDIsMHgzYywweGVhLDB4M2MsMHgwNiwweDNkLDB4MDYsMHgzZCwweGEzLDB4YjYsMHgzNCwweDgxCi0sMHgyNiwweGMyLDB4MzQsMHhhZiwweGRmLDB4YzcsMHgwNiwweDRjLDB4MzcsMHgwMCwweDAwLDB4YjgsMHg4YSwweDAzLDB4Y2QsMHgzYQotLDB4ODAsMHgzZSwweDlkLDB4MzYsMHgwNCwweDc1LDB4MGMsMHg4MCwweDNlLDB4OWUsMHgzNiwweDA2LDB4NzQsMHgwNSwweGM2LDB4MDYKLSwweDlmLDB4MzYsMHgwNiwweDMzLDB4YzAsMHhhMCwweDllLDB4MzYsMHg4YiwweGYwLDB4MmUsMHhmZiwweGE0LDB4NGMsMHgzYywweGY3Ci0sMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzUsMHgwZSwweDgxLDB4MjYsMHg5YiwweDM2LDB4ZmYsMHhiZiwweGI4LDB4OGIsMHgwMwotLDB4Y2QsMHgzYSwweGU5LDB4NTQsMHgwMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMSwweDc0LDB4MDMsMHhlOSwweDE3LDB4ZWUKLSwweGM3LDB4MDYsMHgzNywweDM3LDB4MDIsMHgwMCwweGM2LDB4MDYsMHhjYSwweDM0LDB4MDIsMHg4MywweDBlLDB4OTksMHgzNiwweDA0Ci0sMHg4MywweDBlLDB4NTAsMHgzNywweDA0LDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc1LDB4MmEsMHhlOCwweDFmLDB4MGIsMHhlOQotLDB4MjcsMHgwMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMSwweDc1LDB4ZDMsMHhjNywweDA2LDB4MzcsMHgzNywweDAyLDB4MDAKLSwweGM2LDB4MDYsMHhjYSwweDM0LDB4MDIsMHg4MywweDBlLDB4OTksMHgzNiwweDA0LDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwMCwweGY2Ci0sMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4MDMsMHhlOCwweGRlLDB4MGEsMHg4MSwweDI2LDB4OWIsMHgzNiwweDdjLDB4ZmYsMHhiYgotLDB4ZmYsMHhmZiwweGNkLDB4NTMsMHhjZCwweDU0LDB4ZTksMHhiZSwweGVkLDB4YTMsMHhiNiwweDM0LDB4ZTgsMHhhZCwweDAxLDB4YjgKLSwweDg2LDB4MDMsMHhjZCwweDM5LDB4YzcsMHgwNiwweDRjLDB4MzcsMHgwMCwweDAwLDB4ODEsMHgyNiwweGMyLDB4MzQsMHhhZiwweGRmCi0sMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHgzNCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc0LDB4NTYsMHhmNwotLDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMSwweDc0LDB4MjcsMHhlOCwweDM1LDB4MDEsMHg3MiwweDFjLDB4YmUsMHgwMCwweDQwLDB4ODUKLSwweDM2LDB4YzIsMHgzNCwweDc1LDB4MDgsMHgwOSwweDM2LDB4YzIsMHgzNCwweGZmLDB4MDYsMHg5MiwweDM0LDB4ZTgsMHg4YiwweDAxCi0sMHg3MywweDA2LDB4ODEsMHgwZSwweDk5LDB4MzYsMHg4MCwweDAwLDB4ZTksMHg2YywweGVkLDB4ZTksMHhiNSwweDAwLDB4YzcsMHgwNgotLDB4MzcsMHgzNywweDAyLDB4MDAsMHhjNiwweDA2LDB4Y2EsMHgzNCwweDAyLDB4ODMsMHgwZSwweDk5LDB4MzYsMHgwNCwweDgzLDB4MGUKLSwweDUwLDB4MzcsMHgwNCwweDgwLDB4M2UsMHg5ZSwweDM2LDB4MDgsMHg3NCwweDAzLDB4ZTgsMHg1YSwweDBhLDB4ZTgsMHhlZiwweDAwCi0sMHg3MiwweGQ2LDB4ZTksMHhjOCwweGZmLDB4ODAsMHgzZSwweDllLDB4MzYsMHgwYSwweDc1LDB4MTIsMHhjNiwweDA2LDB4YTAsMHgzNgotLDB4MDAsMHhmNywweDA2LDB4OWIsMHgzNiwweDA4LDB4MDAsMHg3NCwweDAyLDB4Y2QsMHg1NCwweGU4LDB4MzksMHgwYSwweDgxLDB4MjYKLSwweDliLDB4MzYsMHhmZiwweGJmLDB4ZTgsMHhjOCwweDAwLDB4NzIsMHhhZiwweGI4LDB4OGIsMHgwMywweGNkLDB4MzksMHhlOSwweDljCi0sMHhmZiwweGY2LDB4MDYsMHg5ZSwweDM2LDB4ZmYsMHg3NSwweDU4LDB4YTMsMHhiNiwweDM0LDB4ZTgsMHhmZSwweDAwLDB4ODEsMHgyNgotLDB4YzIsMHgzNCwweGZmLDB4YmYsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHg0OCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAKLSwweDIwLDB4NzQsMHgyMiwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHg0MCwweDc1LDB4MDgsMHhlOCwweDkxLDB4MDAsMHg3MiwweDMwCi0sMHhlOSwweDIyLDB4MDAsMHgyNiwweGExLDB4MGMsMHgwMCwweGE5LDB4NjAsMHgwMCwweDc1LDB4MjQsMHg4MSwweDBlLDB4NjYsMHgzNwotLDB4MDAsMHgwOCwweGU5LDB4ZDIsMHhlYywweGM3LDB4MDYsMHg0YywweDM3LDB4MDAsMHgwMCwweGU4LDB4NzEsMHgwMCwweDcyLDB4MTAKLSwweGI4LDB4OGIsMHgwMywweGNkLDB4MzksMHhlOCwweGQzLDB4MDAsMHg3MywweDA2LDB4ODEsMHgwZSwweDk5LDB4MzYsMHg4MCwweDAwCi0sMHhlOSwweGI0LDB4ZWMsMHg4MCwweDNlLDB4OWQsMHgzNiwweDA0LDB4NzUsMHgwYywweDgwLDB4M2UsMHg5ZSwweDM2LDB4MDYsMHg3NAotLDB4NDYsMHhjNiwweDA2LDB4OWYsMHgzNiwweDA2LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAxLDB4NzQsMHgwYywweDgwLDB4M2UKLSwweDlkLDB4MzYsMHgwOCwweDc1LDB4MDUsMHhjNiwweDA2LDB4OWYsMHgzNiwweDBhLDB4ZTgsMHgzMiwweDAwLDB4NzIsMHhkMSwweGU4Ci0sMHg5OSwweDAwLDB4ODAsMHgzZSwweDlkLDB4MzYsMHgwOCwweDc1LDB4MTMsMHg4MSwweDBlLDB4OTksMHgzNiwweDgwLDB4MDAsMHhmNwotLDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc1LDB4MDgsMHhiOCwweDhiLDB4MDMsMHhjZCwweDM5LDB4ZTksMHg2OCwweGVjLDB4YzYKLSwweDA2LDB4OWYsMHgzNiwweDBhLDB4ZTksMHg2MCwweGVjLDB4YjgsMHg4NiwweDAzLDB4Y2QsMHgzYSwweGU5LDB4NTgsMHhlYywweDI2Ci0sMHhhMSwweDBjLDB4MDAsMHhhOSwweDYwLDB4MDAsMHg3NCwweDA4LDB4ODEsMHgyNiwweGMyLDB4MzQsMHhmZiwweGJmLDB4ZjksMHhjMwotLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDQwLDB4NzQsMHgxMywweDgxLDB4MGUsMHg2NiwweDM3LDB4MDAsMHgwOCwweGU4LDB4NGEKLSwweDAwLDB4NzMsMHgwNiwweDgxLDB4MGUsMHg5OSwweDM2LDB4ODAsMHgwMCwweGY5LDB4YzMsMHg4MSwweDBlLDB4OWIsMHgzNiwweDAwCi0sMHg0MCwweDgwLDB4MjYsMHg2ZiwweDM3LDB4ZmUsMHg4MSwweDI2LDB4OWIsMHgzNiwweDdmLDB4ZmYsMHhjNiwweDA2LDB4YTAsMHgzNgotLDB4MDAsMHhmOCwweGMzLDB4ODEsMHgwZSwweDk5LDB4MzYsMHgwMCwweDAxLDB4ZTksMHgyMSwweGVjLDB4MjYsMHhhMSwweDIwLDB4MDAKLSwweGEzLDB4ZmIsMHgzNiwweGEzLDB4YWEsMHgzNCwweDI2LDB4YTEsMHgyMiwweDAwLDB4YTMsMHhmZCwweDM2LDB4YTMsMHhhYywweDM0Ci0sMHgyNiwweGExLDB4MjQsMHgwMCwweGEzLDB4ZmYsMHgzNiwweGEzLDB4YWUsMHgzNCwweGMzLDB4YTEsMHgwNSwweDM3LDB4MjYsMHgzYgotLDB4MDYsMHgyMCwweDAwLDB4NzUsMHgxOSwweGExLDB4MDcsMHgzNywweDI2LDB4M2IsMHgwNiwweDIyLDB4MDAsMHg3NSwweDBmLDB4YTEKLSwweDA5LDB4MzcsMHgyNiwweDNiLDB4MDYsMHgyNCwweDAwLDB4NzUsMHgwNSwweGU4LDB4MDIsMHgwMCwweGY4LDB4YzMsMHg1MSwweDFlCi0sMHgwNiwweDhiLDB4YzcsMHg4ZCwweDM2LDB4MjAsMHgwMCwweGJmLDB4MDUsMHgzNywweGI5LDB4MDMsMHgwMCwweDFlLDB4MDYsMHgxZgotLDB4MDcsMHhmMywweGE1LDB4OGIsMHhmOCwweDhkLDB4MzYsMHgyMCwweDAwLDB4YmYsMHhhMCwweDM0LDB4YjksMHgwMywweDAwLDB4ZjMKLSwweGE1LDB4MDcsMHgxZiwweDU5LDB4OGIsMHhmOCwweGExLDB4MDcsMHgzNywweGEzLDB4YTYsMHgzNCwweGExLDB4MDksMHgzNywweGEzCi0sMHhhOCwweDM0LDB4ZjksMHhjMywweGM2LDB4MDYsMHhiNiwweDM0LDB4MDEsMHhlOSwweDhiLDB4ZWIsMHhlOCwweDg3LDB4MDgsMHg4YgotLDB4ZjAsMHgwNSwweDEyLDB4MDAsMHgyNiwweDI5LDB4MDYsMHgwZSwweDAwLDB4MjYsMHg4YiwweDQ0LDB4MmEsMHgyNiwweDNhLDB4MDYKLSwweDBlLDB4MDAsMHg3NSwweDViLDB4MjYsMHg4MywweDJlLDB4MGUsMHgwMCwweDAyLDB4ODAsMHhmYywweDI3LDB4NzUsMHg1MCwweDI2Ci0sMHg4YiwweDQ0LDB4MmMsMHhhOSwweGZmLDB4ZmYsMHg3NSwweDQ3LDB4OGIsMHhmZSwweDMzLDB4YzAsMHgyNiwweGY2LDB4NDUsMHgzYwotLDB4ODAsMHg3NCwweDA2LDB4MjYsMHg4YSwweDQ1LDB4M2EsMHgyNCwweDFmLDB4MDMsMHhmOCwweDI2LDB4ODAsMHg3ZCwweDQ1LDB4MDkKLSwweDc1LDB4MmQsMHg4YywweGMyLDB4OGUsMHgwNiwweDM4LDB4MzQsMHg4ZSwweGRhLDB4OGIsMHgwZSwweDBlLDB4MDAsMHgyNiwweDg5Ci0sMHgwZSwweDBlLDB4MDAsMHg4ZCwweDc0LDB4MmMsMHhiZiwweDE4LDB4MDAsMHhmMywweGE0LDB4MzMsMHhjMCwweDhlLDB4ZDgsMHgyNgotLDB4YzcsMHgwNiwweDA0LDB4MDAsMHhiNSwweDNmLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHhjZCwweDUwLDB4YjgKLSwweDA2LDB4ODAsMHhlOSwweGVmLDB4ZTksMHgyNiwweGExLDB4MGMsMHgwMCwweGEzLDB4OTMsMHgzNywweDgzLDB4MGUsMHg5OSwweDM2Ci0sMHgwMSwweGU5LDB4MDAsMHhlYiwweDI2LDB4ODAsMHgzZSwweDFjLDB4MDAsMHhmZiwweDc1LDB4MmYsMHgyNiwweDgwLDB4M2UsMHgxZQotLDB4MDAsMHhmZiwweDc1LDB4MjcsMHgyNiwweGY3LDB4MDYsMHgwYywweDAwLDB4NDAsMHgwMCwweDc1LDB4MWIsMHhhMSwweGQxLDB4MzYKLSwweDI2LDB4YTMsMHgxYSwweDAwLDB4YTEsMHhkMywweDM2LDB4MjYsMHhhMywweDFjLDB4MDAsMHhhMSwweGQ1LDB4MzYsMHgyNiwweGEzCi0sMHgxZSwweDAwLDB4YjgsMHgwYSwweDgwLDB4ZTgsMHgzNiwweDA3LDB4ZTksMHhlMiwweGVhLDB4ZmYsMHgwNiwweDkwLDB4MzQsMHhiZQotLDB4MGEsMHgwMCwweGM2LDB4MDYsMHhiNiwweDM0LDB4MDEsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzUsMHgwNSwweDgzLDB4MGUKLSwweGMyLDB4MzQsMHgwMSwweGU5LDB4YjYsMHhlYSwweDgwLDB4M2UsMHg5ZCwweDM2LDB4MGEsMHg3NSwweDBmLDB4MjYsMHhhMSwweDBjCi0sMHgwMCwweDI1LDB4MDcsMHgwMCwweDNkLDB4MDQsMHgwMCwweDc1LDB4MDMsMHhlOCwweDc5LDB4MDAsMHhhMSwweGYzLDB4MzYsMHg4NgotLDB4ZTAsMHhlNywweDFlLDB4YTMsMHhlMywweDM2LDB4ODEsMHgyNiwweDBiLDB4MzcsMHgwMCwweDAzLDB4ODEsMHgyNiwweDBkLDB4MzcKLSwweDdiLDB4N2YsMHg4MywweDBlLDB4MGQsMHgzNywweDQ4LDB4ZTgsMHgxZSwweDAwLDB4MjYsMHhhMSwweDBjLDB4MDAsMHgyNSwweDA3Ci0sMHgwMCwweDNkLDB4MDQsMHgwMCwweDc0LDB4MDksMHgyNiwweGY3LDB4MDYsMHgwYywweDAwLDB4MjAsMHgwMCwweDc1LDB4MDYsMHhiOAotLDB4MDEsMHgwMCwweGU5LDB4M2YsMHhlOSwweGU5LDB4NWYsMHhlYSwweGM3LDB4MDYsMHg0MSwweDM3LDB4MDAsMHgwMCwweGI4LDB4N2YKLSwweDAzLDB4Y2QsMHgzYSwweGExLDB4MWQsMHgzNywweGEzLDB4YzQsMHgzNCwweDg2LDB4ZTAsMHg2OCwweDdmLDB4MDMsMHgxZiwweGEzCi0sMHgwNiwweDAwLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhhMSwweDBiLDB4MzcsMHhhMywweGIyLDB4MzQsMHhhMSwweDBkLDB4MzcsMHhhMwotLDB4YjQsMHgzNCwweGExLDB4ZjMsMHgzNiwweGEzLDB4YzgsMHgzNCwweGExLDB4ZWYsMHgzNiwweGEzLDB4OWMsMHgzNCwweGExLDB4ZjEKLSwweDM2LDB4YTMsMHg5ZSwweDM0LDB4YzMsMHg4MCwweDBlLDB4OWQsMHgzNiwweDgwLDB4YmUsMHgwMCwweDAwLDB4ZTgsMHhiNCwweDA3Ci0sMHhiOCwweDdiLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg3YywweDAzLDB4Y2QsMHgzOSwweGM3LDB4MDYsMHgzMywweDM3LDB4MDIsMHgwMAotLDB4YTEsMHhlNSwweDM2LDB4ZTcsMHgyZSwweGExLDB4ZTcsMHgzNiwweGU3LDB4M2UsMHhiOCwweDgyLDB4MDMsMHhjZCwweDNhLDB4ZjcKLSwweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NSwweDAzLDB4ZTgsMHhmZCwweDA2LDB4YTEsMHhkMywweDM2LDB4YTMsMHhlZiwweDM2Ci0sMHhhMywweDljLDB4MzQsMHhhMSwweGQ1LDB4MzYsMHhhMywweGYxLDB4MzYsMHhhMywweDllLDB4MzQsMHhjMywweGY2LDB4MDYsMHg5ZAotLDB4MzYsMHg4MCwweDc0LDB4MzEsMHhiZSwweDIyLDB4MDAsMHhlOSwweDE3LDB4MDAsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQKLSwweDI0LDB4YmUsMHgyMywweDAwLDB4ZTksMHgwYSwweDAwLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4MTcsMHhiZSwweDI0Ci0sMHgwMCwweDU2LDB4ZTgsMHhhOCwweDA1LDB4OGMsMHhjMCwweDNkLDB4ZmYsMHhmZiwweDVlLDB4NzQsMHgwNSwweGU4LDB4ZDcsMHhlZgotLDB4Y2QsMHg1MCwweGU5LDB4MWYsMHhlOCwweGU5LDB4OWYsMHhlOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweGI4LDB4ODQsMHgwMywweGNkLDB4M2EsMHhiOCwweDhhLDB4MDMsMHhjZCwweDM5LDB4ZTksMHhmNywweDAwLDB4ODAsMHgzZSwweGEwCi0sMHgzNiwweDA4LDB4NzUsMHgyZSwweGE5LDB4ZDAsMHgwNywweDc1LDB4MmMsMHhhMSwweGIxLDB4MzYsMHgwZCwweDAwLDB4MDQsMHhlNwotLDB4MDgsMHhlNSwweDAwLDB4MjUsMHhmZiwweDczLDB4ZTcsMHgwMCwweGI4LDB4OGEsMHgwMywweGNkLDB4M2EsMHhlOCwweGMzLDB4MDYKLSwweDMzLDB4YzAsMHhlNywweDBlLDB4ZTUsMHgwYSwweDI1LDB4YzMsMHgxNywweGU3LDB4MGEsMHhjZCwweDU0LDB4YzYsMHgwNiwweGEwCi0sMHgzNiwweDAwLDB4ZTksMHg2OCwweGU5LDB4YmUsMHgwNCwweDAwLDB4ZTksMHgzZiwweGU5LDB4ODMsMHgyNiwweDliLDB4MzYsMHhiZgotLDB4YzYsMHgwNiwweDcxLDB4MzcsMHgwMywweGI4LDB4ODYsMHgwMywweGNkLDB4M2EsMHhiOCwweDg4LDB4MDMsMHhjZCwweDNhLDB4YjgKLSwweDgzLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NywweDAzLDB4Y2QsMHgzOSwweDgxLDB4MGUsMHhjMiwweDM0LDB4MDAsMHgyMCwweGU5Ci0sMHg5MiwweDAwLDB4ZTgsMHg0OSwweDA2LDB4YjgsMHg4NywweDAzLDB4Y2QsMHgzOSwweGJiLDB4ZmYsMHg3ZiwweGNkLDB4NTMsMHhiOAotLDB4ODQsMHgwMywweGNkLDB4M2EsMHhiOCwweDg4LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4YiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODMKLSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODYsMHgwMywweGNkLDB4M2EsMHhiOCwweDg1LDB4MDMsMHhjZCwweDNhLDB4YzMsMHhlNSwweDAwCi0sMHgyNSwweGZmLDB4NTMsMHhlNywweDAwLDB4ODMsMHgwZSwweGMyLDB4MzQsMHg0MCwweDgzLDB4MjYsMHhjMiwweDM0LDB4ZWYsMHhlOAotLDB4MGMsMHgwNiwweGJiLDB4ZmYsMHg3ZiwweGNkLDB4NTMsMHhiOCwweDhhLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NSwweDAzLDB4Y2QKLSwweDNhLDB4YjgsMHg4NiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODMsMHgwMywweGNkLDB4M2EsMHhiOCwweDg3LDB4MDMsMHhjZCwweDNhCi0sMHhiOCwweDhiLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODksMHgwMywweGNkLDB4M2EsMHhjMwotLDB4ODMsMHgwZSwweGMyLDB4MzQsMHg1MCwweGU4LDB4MTgsMHgwNCwweGU4LDB4ZDMsMHgwNSwweGY2LDB4MDYsMHg2ZiwweDM3LDB4MDEKLSwweDc1LDB4MTIsMHhiOCwweDg5LDB4MDMsMHhjZCwweDM5LDB4ODMsMHgzZSwweDBmLDB4MzcsMHgwMCwweDc1LDB4MDYsMHhjNywweDA2Ci0sMHgwZiwweDM3LDB4MDQsMHgwMCwweGExLDB4OWQsMHgzNiwweDgwLDB4ZmMsMHgwOCwweDc0LDB4MDUsMHhiOCwweDg0LDB4MDMsMHhjZAotLDB4MzksMHhlNSwweDAyLDB4MGQsMHgwMSwweDA4LDB4MjUsMHhlZiwweGZmLDB4ZTcsMHgwMiwweGExLDB4OWQsMHgzNiwweDg2LDB4ZTAKLSwweDMyLDB4ZTQsMHg4YiwweGYwLDB4ZDEsMHhlZSwweDMzLDB4YzAsMHgwZCwweDIwLDB4MDAsMHgwOSwweDA2LDB4YWQsMHgzNiwweGExCi0sMHhhZCwweDM2LDB4ZTcsMHgwNCwweGU5LDB4NTMsMHhlOCwweGU5LDB4NWEsMHhlOCwweDMzLDB4YzAsMHhhMCwweDFiLDB4MzcsMHhkMQotLDB4ZTAsMHgzYSwweDA2LDB4YTAsMHgzNiwweDc1LDB4MDMsMHhlOSwweGJhLDB4ZmYsMHhlOSwweDYwLDB4ZTgsMHhjNywweDA2LDB4NDEKLSwweDM3LDB4MDAsMHgwMCwweGU4LDB4YzEsMHhlMSwweGU4LDB4NmEsMHgwNiwweDMzLDB4YzAsMHgwZCwweDQxLDB4MDAsMHhlNywweDU2Ci0sMHhhMSwweGIxLDB4MzYsMHgwZCwweDAwLDB4MTAsMHhlNywweDA4LDB4ZTUsMHgwMiwweDI1LDB4ZjksMHhmZiwweDBkLDB4MDMsMHgwMAotLDB4ZTcsMHgwMiwweGExLDB4YjMsMHgzNiwweGU3LDB4MGEsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4YTEsMHhhZCwweDM2LDB4ZTcKLSwweDA0LDB4ZTgsMHg3YywweDAzLDB4ZTgsMHg5ZiwweDAzLDB4YzcsMHgwNiwweDFkLDB4MzcsMHgwMCwweGM4LDB4YzcsMHgwNiwweDBiCi0sMHgzNywweDAwLDB4MDMsMHhjNywweDA2LDB4MGQsMHgzNywweDdiLDB4N2YsMHgzMywweGMwLDB4YTMsMHg5OSwweDM2LDB4YTMsMHg5YgotLDB4MzYsMHhhMywweDlkLDB4MzYsMHhhMywweDlmLDB4MzYsMHhhMywweDRjLDB4MzcsMHhhMywweGYzLDB4MzYsMHhhMywweGVmLDB4MzYKLSwweGEzLDB4ZjEsMHgzNiwweGU4LDB4ODIsMHhmZCwweGM2LDB4MDYsMHg5ZiwweDM2LDB4MDIsMHhlOSwweGVmLDB4ZTcsMHhlNSwweDAyCi0sMHgwZCwweDAxLDB4ODgsMHgyNSwweGVmLDB4ZmYsMHgwZCwweDAwLDB4NDAsMHgwZCwweDAwLDB4MDQsMHhlNywweDAyLDB4ZTgsMHhmMgotLDB4MDUsMHhlNSwweDBhLDB4MGQsMHg0MCwweDAwLDB4ZTcsMHgwYSwweDMzLDB4YzAsMHhhMywweDgxLDB4MzcsMHhhMywweDg1LDB4MzcKLSwweGEzLDB4ODMsMHgzNywweGEzLDB4ODcsMHgzNywweGEzLDB4ODksMHgzNywweGU1LDB4MDAsMHgwZCwweDAwLDB4ODQsMHhlNywweDAwCi0sMHhiOCwweDhjLDB4MDMsMHhjZCwweDM5LDB4YjgsMHg4MCwweDAwLDB4Y2QsMHgzNSwweGM3LDB4MDYsMHhhYSwweDAyLDB4ZmYsMHhmZgotLDB4ZTUsMHgwMCwweDI1LDB4ZmYsMHg3YiwweGU3LDB4MDAsMHg4MSwweDBlLDB4OWEsMHgzNywweDgwLDB4MDAsMHhiOCwweDdlLDB4MDMKLSwweGNkLDB4MzksMHgzMywweGMwLDB4ZTcsMHgwZSwweGJlLDB4MDgsMHgwMCwweDhlLDB4MDYsMHgzOCwweDM0LDB4ZTgsMHhhNywweGVkCi0sMHg4MywweDI2LDB4ZWYsMHgzNCwweGRmLDB4ZmYsMHgwNiwweDgxLDB4MzcsMHhjZCwweDUwLDB4ODMsMHgwZSwweGVmLDB4MzQsMHgyMAotLDB4YzMsMHhmNywweDA2LDB4OWEsMHgzNywweDgwLDB4MDAsMHg3NCwweDNkLDB4YTksMHhkMCwweDA3LDB4NzQsMHgxMCwweGE5LDB4MDAKLSwweDA0LDB4NzQsMHgxMiwweDMzLDB4YzAsMHhlNywweDBlLDB4ZmYsMHgwNiwweDg3LDB4MzcsMHhlOSwweGQyLDB4ZmYsMHhmZiwweDA2Ci0sMHg4NSwweDM3LDB4ZTksMHhjYiwweGZmLDB4ZmYsMHgwNiwweDgzLDB4MzcsMHhlOSwweGM0LDB4ZmYsMHg4MywweDI2LDB4OWEsMHgzNwotLDB4N2YsMHhhMSwweDg5LDB4MzcsMHgwMywweDA2LDB4ODcsMHgzNywweDNkLDB4MDUsMHgwMCwweDdmLDB4MDEsMHhjMywweGJiLDB4ZmYKLSwweDdmLDB4Y2QsMHg1MywweGU5LDB4MDAsMHgwMCwweGU1LDB4MDIsMHgyNSwweGZmLDB4ZmIsMHgyNSwweGVmLDB4ZmYsMHgwZCwweDAxCi0sMHgwMCwweGU3LDB4MDIsMHhhMSwweDgzLDB4MzcsMHgzYiwweDA2LDB4NDYsMHgzNywweDdmLDB4MmEsMHhhMSwweDg1LDB4MzcsMHgzYgotLDB4MDYsMHg0OCwweDM3LDB4N2MsMHgyMSwweGExLDB4ODksMHgzNywweDAzLDB4MDYsMHg4NywweDM3LDB4M2QsMHgwNSwweDAwLDB4N2YKLSwweDE1LDB4YzYsMHgwNiwweDlmLDB4MzYsMHgwNCwweGU1LDB4MDIsMHgyNSwweGZmLDB4ZjcsMHgwZCwweDAxLDB4MDAsMHgyNSwweGVmCi0sMHhmZiwweGU3LDB4MDIsMHhlOSwweGY3LDB4ZTYsMHhiZSwweDAxLDB4MDAsMHhmNywweDA2LDB4OWIsMHgzNiwweDAzLDB4MDAsMHg3NAotLDB4MGEsMHg4MywweDI2LDB4OWIsMHgzNiwweGZjLDB4ODMsMHgwZSwweGMyLDB4MzQsMHgwNCwweGU5LDB4ZDAsMHhlNiwweGI4LDB4N2IKLSwweDAzLDB4Y2QsMHgzOSwweGU1LDB4MDIsMHgwZCwweDAxLDB4NjAsMHgyNSwweGVmLDB4ZmYsMHhlNywweDAyLDB4YzcsMHgwNiwweGYxCi0sMHgzNCwweDIwLDB4MDMsMHhiOCwweDhlLDB4MDMsMHhjZCwweDM5LDB4YzMsMHg4MSwweDI2LDB4YzIsMHgzNCwweDdmLDB4ZmYsMHg4MAotLDB4MGUsMHg2ZiwweDM3LDB4MDEsMHhmNywweDA2LDB4OWIsMHgzNiwweDAzLDB4MDAsMHg3NCwweGQyLDB4YjgsMHg3YiwweDAzLDB4Y2QKLSwweDNhLDB4YjgsMHg3ZCwweDAzLDB4Y2QsMHgzOSwweDgzLDB4MjYsMHg5YiwweDM2LDB4ZWYsMHgzMywweGMwLDB4YjAsMHg4YSwweGEyCi0sMHg5ZiwweDM2LDB4YTIsMHg5ZCwweDM2LDB4YzcsMHgwNiwweDRjLDB4MzcsMHgwMSwweDAwLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwNAotLDB4MDAsMHhmNywweDA2LDB4OWIsMHgzNiwweDQwLDB4MDAsMHg3NSwweDA2LDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwMywweDAwLDB4YjgKLSwweDhkLDB4MDMsMHhjZCwweDM5LDB4ZTgsMHgwMCwweGQ1LDB4ZTUsMHgwMiwweDBkLDB4MDEsMHg0MCwweDI1LDB4ZWYsMHhmZiwweDhiCi0sMHhkOCwweGI4LDB4N2MsMHgwMywweGNkLDB4MzksMHhjNywweDA2LDB4MzMsMHgzNywweDAyLDB4MDAsMHg4YiwweGMzLDB4MGQsMHgwMAotLDB4MjAsMHgyNSwweGY5LDB4ZmYsMHgwYiwweDA2LDB4ZTgsMHgzYSwweGU3LDB4MDIsMHhjMywweGZmLDB4MGUsMHhmMSwweDM0LDB4NzUKLSwweDAxLDB4YzMsMHhlNSwweDRlLDB4YTksMHgwMSwweDAwLDB4NzUsMHgxMiwweGU1LDB4MDAsMHhhOSwweDAwLDB4MDQsMHg3NSwweDA1Ci0sMHgwZCwweDAwLDB4MDQsMHhlNywweDAwLDB4YjgsMHg4ZSwweDAzLDB4Y2QsMHgzOSwweGMzLDB4ZTUsMHgwMCwweGE5LDB4MDAsMHgwNAotLDB4NzQsMHhmMywweDI1LDB4ZmYsMHhmYiwweGU3LDB4MDAsMHhlOSwweGViLDB4ZmYsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA0LDB4ODMKLSwweDI2LDB4OWIsMHgzNiwweGZjLDB4ODEsMHgwZSwweDliLDB4MzYsMHg4MCwweDAwLDB4ZTksMHgxMCwweGU2LDB4YjgsMHg4ZSwweDAzCi0sMHhjZCwweDNhLDB4Y2QsMHg1NCwweDgxLDB4MGUsMHhhZiwweDM2LDB4MDAsMHgxOCwweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhiOAotLDB4N2IsMHgwMywweGNkLDB4MzksMHhhMSwweGQzLDB4MzYsMHhhMywweDhmLDB4MzcsMHhhMSwweGQ1LDB4MzYsMHhhMywweDkxLDB4MzcKLSwweGM3LDB4MDYsMHg4YiwweDM3LDB4MDIsMHgwMCwweGM3LDB4MDYsMHg4ZCwweDM3LDB4MDIsMHgwMCwweDgzLDB4MGUsMHg5OSwweDM2Ci0sMHg0MCwweGU5LDB4ZDksMHhlNSwweDgwLDB4M2UsMHg5ZiwweDM2LDB4MDYsMHg3NSwweDE1LDB4YTksMHhkMCwweDA3LDB4NzUsMHhlYwotLDB4MjUsMHgwMCwweDE4LDB4NzUsMHgwZSwweGZmLDB4MGUsMHg4YiwweDM3LDB4NzUsMHhlMSwweGM2LDB4MDYsMHg5ZiwweDM2LDB4MDgKLSwweGU5LDB4YmEsMHhlNSwweGZmLDB4MGUsMHg4ZCwweDM3LDB4NzUsMHhkMywweGJlLDB4MDgsMHgwMCwweGU5LDB4OWYsMHhlNSwweGI4Ci0sMHg3YiwweDAzLDB4Y2QsMHgzOSwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc0LDB4MDgsMHhjNiwweDA2LDB4OWYsMHgzNgotLDB4MGEsMHhlOSwweDBkLDB4MDAsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4NDAsMHg3NCwweDBiLDB4YjgsMHg4YiwweDAzLDB4Y2QKLSwweDM5LDB4ODEsMHgwZSwweDk5LDB4MzYsMHg4MCwweDAwLDB4ZTksMHg4MywweGU1LDB4YjgsMHg3YiwweDAzLDB4Y2QsMHgzOSwweGM3Ci0sMHgwNiwweDhiLDB4MzcsMHgwNCwweDAwLDB4YzcsMHgwNiwweDhkLDB4MzcsMHgwNCwweDAwLDB4ODEsMHgwZSwweDk5LDB4MzYsMHgwMAotLDB4MDIsMHhlOSwweDY5LDB4ZTUsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzUsMHgxYiwweGE5LDB4ZDAsMHgwNywweDc1LDB4ZWIKLSwweGE5LDB4MDAsMHgxOCwweDc1LDB4MGMsMHhmZiwweDBlLDB4OGQsMHgzNywweDc1LDB4ZTAsMHhlOCwweDE3LDB4ZmIsMHhlOSwweDRjCi0sMHhlNSwweGI4LDB4ODIsMHgwMywweGNkLDB4MzksMHhjMywweGZmLDB4MGUsMHg4YiwweDM3LDB4NzUsMHhjZSwweGJlLDB4MDksMHgwMAotLDB4ZTksMHgyYiwweGU1LDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwMCwweDAwLDB4YzcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAwLDB4ZTgKLSwweDNjLDB4MDIsMHg4MSwweDI2LDB4YWYsMHgzNiwweGZmLDB4ZTcsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4ODEsMHgyNiwweDliCi0sMHgzNiwweGZmLDB4N2YsMHhlNSwweDAyLDB4MGQsMHgwMSwweDAwLDB4MjUsMHhlZiwweGZmLDB4MjUsMHhmZiwweGRmLDB4ZTcsMHgwMgotLDB4YmIsMHhmZiwweDdmLDB4Y2QsMHg1MywweDMzLDB4YzAsMHhhMywweDlkLDB4MzYsMHhhMywweDlmLDB4MzYsMHhlOCwweDUwLDB4MDAKLSwweGU4LDB4NzMsMHgwMCwweGI4LDB4ODEsMHgwMywweGNkLDB4MzksMHhjMywweGY3LDB4MDYsMHg5YiwweDM2LDB4MDMsMHgwMCwweDc0Ci0sMHgwZCwweGM2LDB4MDYsMHg5ZiwweDM2LDB4MDIsMHhjNiwweDA2LDB4YTAsMHgzNiwweDAwLDB4ZTksMHhkZiwweGU0LDB4ODMsMHgwZQotLDB4OWIsMHgzNiwweDEwLDB4YzcsMHgwNiwweDk5LDB4MzYsMHgwMCwweDAwLDB4ZTgsMHhlNywweDAyLDB4ZTUsMHg1NiwweDBkLDB4MDIKLSwweDAwLDB4ZTcsMHg1NiwweGM3LDB4MDYsMHhhOCwweDAyLDB4MDAsMHgwMCwweDhiLDB4MzYsMHgzZCwweDM3LDB4ZTgsMHg0NCwweDAyCi0sMHhjNiwweDA2LDB4YTAsMHgzNiwweDBlLDB4ZTksMHhiNSwweGU0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDYsMHhiOCwweDhhLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODYsMHgwMywweGNkLDB4M2EKLSwweGI4LDB4ODMsMHgwMywweGNkLDB4M2EsMHhiOCwweDg3LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4YiwweDAzLDB4Y2QsMHgzYSwweGI4Ci0sMHg4OCwweDAzLDB4Y2QsMHgzYSwweDA3LDB4YzMsMHgwNiwweGI4LDB4ODgsMHgwMywweGNkLDB4M2EsMHhiOCwweDdiLDB4MDMsMHhjZAotLDB4M2EsMHhiOCwweDgyLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg3ZiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4N2MsMHgwMywweGNkLDB4M2EKLSwweGI4LDB4N2UsMHgwMywweGNkLDB4M2EsMHhiOCwweDgwLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4MSwweDAzLDB4Y2QsMHgzYSwweGI4Ci0sMHg4NCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODksMHgwMywweGNkLDB4M2EsMHhiOCwweDdkLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4ZAotLDB4MDMsMHhjZCwweDNhLDB4YzcsMHgwNiwweDQxLDB4MzcsMHgwMCwweDAwLDB4MDcsMHhjMywweDA2LDB4OGUsMHgwNiwweDM4LDB4MzQKLSwweDFmLDB4OGIsMHgwZSwweDBlLDB4MDAsMHgyNiwweDg5LDB4MGUsMHgwZSwweDAwLDB4YmUsMHgxOCwweDAwLDB4YmYsMHgxOCwweDAwCi0sMHhmMywweGE0LDB4MDYsMHgxZSwweDA3LDB4Y2QsMHgzNCwweDA3LDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhjMywweDI2LDB4ZjYsMHgwNgotLDB4MjAsMHgwMCwweDgwLDB4NzQsMHg0NCwweDMzLDB4YzAsMHgyNiwweGEwLDB4MjYsMHgwMCwweDI0LDB4MWYsMHg4YiwweGYwLDB4MjYKLSwweDhiLDB4NWMsMHgyOCwweDg5LDB4MWUsMHg2YSwweDM3LDB4MDYsMHg4ZSwweDA2LDB4MzgsMHgzNCwweDFmLDB4YzAsMHhlMywweDA0Ci0sMHgyNiwweDg4LDB4NWMsMHgyOCwweDhiLDB4YzYsMHhiOSwweDA2LDB4MDAsMHhiZSwweDIwLDB4MDAsMHhiZiwweDFhLDB4MDAsMHhmMwotLDB4YTQsMHg4YiwweGM4LDB4ODMsMHhjNywweDA2LDB4ZjMsMHhhNCwweDI2LDB4ODEsMHgyNiwweDI2LDB4MDAsMHgxZiwweDgwLDB4MjYKLSwweDgxLDB4MzYsMHgyNiwweDAwLDB4MDAsMHg4MCwweGU5LDB4YTksMHhmZiwweDI2LDB4OGIsMHgxZSwweDI4LDB4MDAsMHg4OSwweDFlCi0sMHg2YSwweDM3LDB4MDYsMHg4ZSwweDA2LDB4MzgsMHgzNCwweDFmLDB4YzAsMHhlMywweDA0LDB4MjYsMHg4OCwweDFlLDB4MjgsMHgwMAotLDB4YjksMHgwNiwweDAwLDB4YmUsMHgyMCwweDAwLDB4YmYsMHgxYSwweDAwLDB4ZjMsMHhhNCwweGU5LDB4ODQsMHhmZiwweDg2LDB4YzQKLSwweGEzLDB4NjgsMHgzNywweGU4LDB4ODcsMHhmZiwweGY3LDB4MDYsMHg2YSwweDM3LDB4MGYsMHgwMCwweDc0LDB4MTAsMHg4MCwweDNlCi0sMHg5ZSwweDM2LDB4MDAsMHg3NSwweDA5LDB4YmUsMHgwMCwweDAwLDB4ZTgsMHhhYywweGU5LDB4Y2QsMHg1MCwweGMzLDB4YzMsMHg1MAotLDB4NTYsMHgwNiwweDMzLDB4YzAsMHgyNiwweGY2LDB4MDYsMHgyMCwweDAwLDB4ODAsMHg3NCwweDA2LDB4MjYsMHhhMCwweDI2LDB4MDAKLSwweDI0LDB4MWYsMHg4YiwweGYwLDB4MjYsMHg4YiwweDVjLDB4MjYsMHg4NiwweGZiLDB4ODMsMHhlYiwweDA0LDB4NzQsMHg0ZiwweDgzCi0sMHhjNiwweDJhLDB4OGMsMHhjMCwweDhlLDB4ZDgsMHhiOSwweDA3LDB4MDAsMHgzMywweGMwLDB4OGUsMHhjMCwweGJmLDB4NzIsMHgzNwotLDB4ZjMsMHhhYiwweDMzLDB4YzksMHg4YSwweDBjLDB4ODAsMHhmOSwweDAwLDB4NzUsMHgwMywweGU5LDB4MzAsMHgwMCwweDNiLDB4ZDkKLSwweDczLDB4MDMsMHhlOSwweDI5LDB4MDAsMHgyYiwweGQ5LDB4OGEsMHg0NCwweDAxLDB4MjUsMHgzZiwweDAwLDB4NzQsMHgxOSwweDNkCi0sMHgwYiwweDAwLDB4N2QsMHgxNCwweGQxLDB4ZTAsMHg4YiwweGY4LDB4MmUsMHg4YiwweGJkLDB4NWMsMHg0OSwweDhkLDB4NzQsMHgwMgotLDB4ODMsMHhlOSwweDAyLDB4ZjMsMHhhNCwweGU5LDB4MDIsMHgwMCwweDAzLDB4ZjEsMHgyMywweGRiLDB4NzUsMHhjNCwweDMzLDB4YzAKLSwweDhlLDB4ZDgsMHgwNywweDVlLDB4NTgsMHhjMywweDMzLDB4YzAsMHgyNiwweGY2LDB4MDYsMHgyMCwweDAwLDB4ODAsMHg3NCwweDA2Ci0sMHgyNiwweGEwLDB4MjYsMHgwMCwweDI0LDB4MWYsMHhjMywweGU1LDB4MGEsMHgyNSwweGMzLDB4YmYsMHhlNywweDBhLDB4YjgsMHg4NgotLDB4MDMsMHhjZCwweDM5LDB4YjgsMHg4MywweDAzLDB4Y2QsMHgzOSwweDgxLDB4MjYsMHg5YiwweDM2LDB4N2MsMHhkZiwweGI4LDB4ODUKLSwweDAzLDB4Y2QsMHgzYSwweGU1LDB4MDIsMHgyNSwweGZmLDB4ZjMsMHgwZCwweDAxLDB4MDAsMHgyNSwweGVmLDB4ZmYsMHhlNywweDAyCi0sMHhlNSwweDAwLDB4MjUsMHhmZiwweDUzLDB4ZTcsMHgwMCwweGExLDB4ZTcsMHgzNiwweDI1LDB4ZmYsMHhmZSwweGEzLDB4ZTcsMHgzNgotLDB4ZTcsMHgzZSwweDgzLDB4MjYsMHg5OSwweDM2LDB4Y2YsMHg4MSwweDBlLDB4YWYsMHgzNiwweDAwLDB4MTAsMHhhMSwweGFmLDB4MzYKLSwweGU3LDB4MDYsMHhjMywweGU1LDB4MDIsMHgwZCwweDAxLDB4MGMsMHgyNSwweGVmLDB4ZmYsMHhlNywweDAyLDB4YTEsMHhlNywweDM2Ci0sMHgwZCwweDAwLDB4MDEsMHhlNywweDNlLDB4YTMsMHhlNywweDM2LDB4ODEsMHgwZSwweDliLDB4MzYsMHgwMCwweDIwLDB4ODMsMHgwZQotLDB4OTksMHgzNiwweDIwLDB4ODEsMHgyNiwweDliLDB4MzYsMHg3YywweGJmLDB4ODEsMHgwZSwweGFmLDB4MzYsMHgwMCwweDEwLDB4YTEKLSwweGFmLDB4MzYsMHhlNywweDA2LDB4YjgsMHg4NiwweDAzLDB4Y2QsMHgzOSwweGI4LDB4ODUsMHgwMywweGNkLDB4MzksMHhiOCwweDgzCi0sMHgwMywweGNkLDB4M2EsMHhjMywweDBiLDB4ZjYsMHg3NSwweDQ5LDB4MDYsMHg4ZSwweDA2LDB4MzIsMHgzNCwweDgwLDB4M2UsMHhlMAotLDB4MzQsMHgwMSwweDc1LDB4MWIsMHgyNiwweDg5LDB4MzYsMHgwNiwweDAwLDB4OGUsMHgwNiwweDMyLDB4MzQsMHgyNiwweGY3LDB4MDYKLSwweDBhLDB4MDAsMHgwMCwweDIwLDB4NzQsMHgwNywweDI2LDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDIwLDB4MDcsMHhjMywweDgwCi0sMHgzZSwweGUzLDB4MzQsMHgwMSwweDc1LDB4MTksMHgyNiwweDg5LDB4MzYsMHgwNiwweDAwLDB4OGUsMHgwNiwweDMyLDB4MzQsMHgyNgotLDB4ZjcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDEwLDB4NzQsMHgwNywweDI2LDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDEwLDB4MDcKLSwweGMzLDB4ZTksMHhiNCwweGZmLDB4NTAsMHg1MSwweDU3LDB4MzMsMHhjMCwweGI5LDB4MDYsMHgwMCwweDhlLDB4YzAsMHhiZiwweGQxCi0sMHgzNiwweGYzLDB4YWUsMHg1ZiwweDc0LDB4MGMsMHgyNiwweGY2LDB4MDYsMHgwMCwweDAwLDB4YzAsMHg3NSwweDA0LDB4ZjgsMHg1OQotLDB4NTgsMHhjMywweGY5LDB4ZTksMHhmOSwweGZmLDB4OGIsMHgwNSwweDBiLDB4NDUsMHgwMiwweDBiLDB4NDUsMHgwNCwweGMzLDB4NTIKLSwweDUwLDB4ZTUsMHgwNiwweDI1LDB4MWUsMHgwMCwweDNkLDB4MWUsMHgwMCwweDc1LDB4ZjYsMHhiOCwweDAxLDB4ODAsMHhlNywweDVhCi0sMHg1OCwweDVhLDB4YzMsMHhlOCwweGU5LDB4ZmYsMHg1MCwweGU1LDB4MDIsMHgyNSwweGZmLDB4N2YsMHgwZCwweDAxLDB4MDAsMHgyNQotLDB4ZWYsMHhmZiwweGU3LDB4MDIsMHgwZCwweDAwLDB4ODAsMHhlNywweDAyLDB4YTEsMHhhZCwweDM2LDB4ZTcsMHgwNCwweGExLDB4YWYKLSwweDM2LDB4ZTcsMHgwNiwweDU4LDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgyZSwweDJiLDB4Y2UsMHg0MSwweDEwLDB4NDIsMHg3YiwweDQxLDB4MzAsMHg0MSwweGEyLDB4NDEsMHhhZiwweDQ1LDB4NDQsMHgyOQotLDB4YzcsMHgyYSwweGM3LDB4MmEsMHg2MCwweDM5LDB4ZjQsMHgzYSwweDVjLDB4M2MsMHgwOSwweDNkLDB4YjEsMHgzZCwweDM0LDB4M2YKLSwweGM3LDB4MmEsMHgzYywweDNmLDB4YzcsMHgyYSwweGM0LDB4M2YsMHgxNiwweDQwLDB4MTYsMHg0MCwweGVkLDB4NDAsMHhmYSwweDQwCi0sMHgwNywweDQxLDB4YzcsMHgyYSwweGM3LDB4MmEsMHhjNywweDJhLDB4YzcsMHgyYSwweGQ2LDB4NTIsMHgwMCwweDAwLDB4MDEsMHgzNwotLDB4ZTksMHgzNiwweGYzLDB4MzYsMHhlZiwweDM2LDB4MWQsMHgzNywweDBkLDB4MzcsMHgwYiwweDM3LDB4OWMsMHgzNywweDAzLDB4MzcKLSwweGZiLDB4MzYsMHg2MiwweDJkLDB4NDAsMHgwNiwweGQxLDB4MmQsMHhmNCwweDAxLDB4YmEsMHg0NCwweDQwLDB4MDYsMHg4YywweDQzCi0sMHg2NCwweDAwLDB4ZTgsMHgyYywweGM4LDB4MDAsMHhkOCwweDJiLDB4MDUsMHgwMCwweGU5LDB4NDUsMHg1MCwweDAwLDB4OTcsMHg0NQotLDB4ZmEsMHgwMCwweGFlLDB4MmQsMHgwNCwweDAxLDB4NmEsMHg0MiwweDAyLDB4MDAsMHhmNiwweDJjLDB4YmMsMHgwMiwweDkzLDB4MmQKLSwweGRjLDB4MDUsMHgxZCwweDJkLDB4NjQsMHgwMCwweGExLDB4MmQsMHgxNCwweDAwLDB4ZDcsMHgzYSwweDA4LDB4MDcsMHg4MSwweDJkCi0sMHg2NCwweDAwLDB4YjMsMHgzZSwweDAyLDB4MDAsMHgzMCwweDQzLDB4NjQsMHgwMCwweGM1LDB4MmMsMHhmNCwweDAxLDB4OGIsMHg0NAotLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDgwLDB4M2UsMHhmZCwweDM0LDB4MDIsMHg3NCwweDBjLDB4ZTgsMHgyMCwweDA1LDB4YzcsMHgwNiwweGExLDB4MzYsMHgwMCwweDAwCi0sMHhlOSwweDlhLDB4ZjgsMHhmZiwweDA2LDB4YzAsMHgzMywweGU4LDB4MTAsMHgwNSwweDhiLDB4MzYsMHgzZCwweDM3LDB4ZTgsMHg3MwotLDB4ZmUsMHhjMywweGNkLDB4MzQsMHhlOSwweGU4LDB4MDUsMHhjNywweDA2LDB4YTMsMHgzNiwweDAwLDB4MDAsMHhjNywweDA2LDB4NDEKLSwweDM3LDB4MDAsMHgwMCwweGU4LDB4ZWQsMHhmZSwweDMzLDB4YzAsMHgwZCwweDQxLDB4MDAsMHhlNywweDU2LDB4YTEsMHhiMSwweDM2Ci0sMHgwZCwweDAwLDB4MTAsMHhlNywweDA4LDB4YTEsMHhiMywweDM2LDB4ZTcsMHgwYSwweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhhMQotLDB4YWQsMHgzNiwweGU3LDB4MDQsMHhlOCwweDJiLDB4MDksMHhjNywweDA2LDB4MWQsMHgzNywweDAwLDB4YzgsMHhjNywweDA2LDB4MGIKLSwweDM3LDB4MDAsMHgwMywweGM3LDB4MDYsMHgwZCwweDM3LDB4N2IsMHg3ZiwweDMzLDB4YzAsMHhhMywweDliLDB4MzYsMHhhMywweDlkCi0sMHgzNiwweGM3LDB4MDYsMHg0YywweDM3LDB4MDEsMHgwMCwweGM2LDB4MDYsMHg5ZSwweDM2LDB4ZmYsMHhjNywweDA2LDB4MDUsMHgzNwotLDB4MDAsMHgwMCwweGM3LDB4MDYsMHgwNywweDM3LDB4MDAsMHgwMCwweGM3LDB4MDYsMHgwOSwweDM3LDB4MDAsMHgwMCwweGEzLDB4ZjMKLSwweDM2LDB4YTMsMHhlZiwweDM2LDB4YTMsMHhmMSwweDM2LDB4ZTgsMHhmZSwweGY1LDB4ZTUsMHgwMiwweDI1LDB4ZjksMHhmZiwweDBkCi0sMHgwMywweDAwLDB4MGQsMHgwMCwweDg4LDB4MjUsMHhlZiwweGZmLDB4MGQsMHgwMCwweDQwLDB4MGQsMHgwMCwweDA0LDB4ZTcsMHgwMgotLDB4YjgsMHg4ZiwweDAzLDB4Y2QsMHgzOSwweGI4LDB4ODAsMHgwMCwweGNkLDB4MzUsMHhjNywweDA2LDB4YWEsMHgwMiwweGZmLDB4ZmYKLSwweGExLDB4YTksMHgzNiwweGEzLDB4YTcsMHgzNiwweDBkLDB4MDAsMHhhNCwweDBkLDB4MDAsMHgwOCwweGU3LDB4MDAsMHhhMywweGE5Ci0sMHgzNiwweGM3LDB4MDYsMHhhMywweDM2LDB4MDEsMHgwMCwweGM3LDB4MDYsMHhhNSwweDM2LDB4MGMsMHgwMCwweDgzLDB4M2UsMHhhNQotLDB4MzYsMHgwMCwweDc1LDB4MDksMHhjNywweDA2LDB4M2QsMHgzNywweDA1LDB4MDAsMHhlOSwweDEzLDB4ZmYsMHhmZiwweDBlLDB4YTUKLSwweDM2LDB4YmUsMHgxMSwweDAwLDB4ZTgsMHgyMiwweDA1LDB4YjgsMHg5MCwweDAzLDB4Y2QsMHgzOSwweGMzLDB4ODMsMHgzZSwweGEzCi0sMHgzNiwweDAxLDB4NzQsMHhkOSwweGMzLDB4YjgsMHg5MCwweDAzLDB4Y2QsMHgzYSwweDI2LDB4YTAsMHgyYiwweDAwLDB4MjYsMHg4YgotLDB4MWUsMHgyYywweDAwLDB4Y2QsMHgzNCwweDgzLDB4M2UsMHhhMywweDM2LDB4MDEsMHg3NCwweDAzLDB4ZTksMHhmMCwweDA0LDB4M2MKLSwweDBmLDB4NzUsMHgxZSwweDgxLDB4ZmIsMHgwMCwweDAyLDB4NzUsMHgxOCwweDI2LDB4YTEsMHgyMCwweDAwLDB4YTMsMHgwNSwweDM3Ci0sMHgyNiwweGExLDB4MjIsMHgwMCwweGEzLDB4MDcsMHgzNywweDI2LDB4YTEsMHgyNCwweDAwLDB4YTMsMHgwOSwweDM3LDB4ZTksMHgwOQotLDB4MDAsMHhjNywweDA2LDB4M2QsMHgzNywweDAxLDB4MDAsMHhlOSwweGI2LDB4ZmUsMHhjNywweDA2LDB4YTMsMHgzNiwweDAyLDB4MDAKLSwweGM2LDB4MDYsMHg5ZSwweDM2LDB4ZmYsMHhlOCwweGNiLDB4ZmQsMHhlOCwweDFjLDB4ZDksMHgzMywweGMwLDB4YTMsMHg4NSwweDM3Ci0sMHhhMywweDgzLDB4MzcsMHhhMywweDg3LDB4MzcsMHhhMywweDg5LDB4MzcsMHhiOCwweDkxLDB4MDMsMHhjZCwweDM5LDB4YjgsMHg4MAotLDB4MDAsMHhjZCwweDM1LDB4YzcsMHgwNiwweGFhLDB4MDIsMHhmZiwweGZmLDB4ZTUsMHgwMCwweDI1LDB4ZmYsMHg1MywweGU3LDB4MDAKLSwweDgxLDB4MGUsMHg5YSwweDM3LDB4ODAsMHgwMCwweGI4LDB4OTIsMHgwMywweGNkLDB4MzksMHgzMywweGMwLDB4ZTcsMHgwZSwweGJlCi0sMHgwOCwweDAwLDB4OGUsMHgwNiwweDM4LDB4MzQsMHhlOCwweDhlLDB4ZTUsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4N2QsMHg0YgotLDB4ODMsMHgyNiwweGVmLDB4MzQsMHhkZiwweGNkLDB4NTAsMHg4MywweDBlLDB4ZWYsMHgzNCwweDIwLDB4YzMsMHhmNywweDA2LDB4OWEKLSwweDM3LDB4ODAsMHgwMCwweDc0LDB4MzIsMHhhOSwweGQwLDB4MDcsMHg3NCwweDBjLDB4YTksMHgwMCwweDA0LDB4NzQsMHgwZSwweDMzCi0sMHhjMCwweGU3LDB4MGUsMHhlOSwweGRhLDB4ZmYsMHhmZiwweDA2LDB4ODUsMHgzNywweGU5LDB4ZDMsMHhmZiwweGZmLDB4MDYsMHg4MwotLDB4MzcsMHhlOSwweGNjLDB4ZmYsMHhjNywweDA2LDB4M2QsMHgzNywweDAxLDB4MDAsMHhlOSwweDM2LDB4ZmUsMHg4MywweDI2LDB4OWEKLSwweDM3LDB4N2YsMHhiYiwweGZmLDB4N2YsMHhjZCwweDUzLDB4ZTUsMHgwMCwweDBkLDB4MDAsMHhhYywweGU3LDB4MDAsMHhlNSwweDAyCi0sMHgyNSwweGZmLDB4ZmIsMHgyNSwweGVmLDB4ZmYsMHgyNSwweGZmLDB4ZjcsMHgwZCwweDAxLDB4MDAsMHhlNywweDAyLDB4YTEsMHg4MwotLDB4MzcsMHgzYiwweDA2LDB4NDYsMHgzNywweDdmLDB4Y2QsMHhhMSwweDg1LDB4MzcsMHgzYiwweDA2LDB4NDgsMHgzNywweDdjLDB4YzQKLSwweGM3LDB4MDYsMHhhMywweDM2LDB4MDMsMHgwMCwweGJlLDB4MTMsMHgwMCwweGU4LDB4ZmQsMHgwMywweGI4LDB4OTMsMHgwMywweGNkCi0sMHgzOSwweGI4LDB4OTQsMHgwMywweGNkLDB4MzksMHhiOCwweDk2LDB4MDMsMHhjZCwweDM5LDB4YjgsMHg5NSwweDAzLDB4Y2QsMHgzOQotLDB4YmUsMHgwNiwweDAwLDB4ZTgsMHhlMywweDAzLDB4ZTksMHhkNiwweDAzLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwMywweDc0LDB4MDEKLSwweGMzLDB4YmUsMHgxMywweDAwLDB4ZTgsMHhkMiwweDAzLDB4YjgsMHg5NCwweDAzLDB4Y2QsMHgzOSwweGMzLDB4YjgsMHg5NCwweDAzCi0sMHhjZCwweDNhLDB4MjYsMHhhMCwweDJiLDB4MDAsMHgyNiwweDhiLDB4MWUsMHgyYywweDAwLDB4Y2QsMHgzNCwweDgzLDB4M2UsMHhhMwotLDB4MzYsMHgwMywweDc0LDB4MDMsMHhlOSwweGE4LDB4MDMsMHgzYywweDBkLDB4NzUsMHgzZSwweDgzLDB4ZmIsMHgwMCwweDc1LDB4MzkKLSwweGU1LDB4MDIsMHgwZCwweDAwLDB4MjAsMHhlNywweDAyLDB4YjgsMHg5MywweDAzLDB4Y2QsMHgzYSwweGM3LDB4MDYsMHhhMywweDM2Ci0sMHgwNCwweDAwLDB4YmUsMHgwMCwweDAwLDB4ZTgsMHgwYywweGZjLDB4YzYsMHgwNiwweDlkLDB4MzYsMHg4MCwweGM2LDB4MDYsMHg5ZQotLDB4MzYsMHgwMCwweGM3LDB4MDYsMHgzMywweDM3LDB4MDIsMHgwMCwweGI4LDB4OWEsMHgwMywweGNkLDB4MzksMHhlOCwweGZjLDB4MDAKLSwweGM3LDB4MDYsMHg0YywweDM3LDB4MDAsMHgwMCwweGU5LDB4NjYsMHgwMywweGM3LDB4MDYsMHgzZCwweDM3LDB4MDgsMHgwMCwweGU5Ci0sMHg2MSwweGZkLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwMywweDc1LDB4MDksMHhjNywweDA2LDB4M2QsMHgzNywweDA1LDB4MDAsMHhlOQotLDB4NTEsMHhmZCwweGU5LDB4NGEsMHgwMywweDgzLDB4M2UsMHhhMywweDM2LDB4MDQsMHg3NCwweDEyLDB4ODMsMHgzZSwweGEzLDB4MzYKLSwweDA1LDB4NzQsMHgwYiwweGNkLDB4MzQsMHhjNywweDA2LDB4M2QsMHgzNywweDA3LDB4MDAsMHhlOSwweDM1LDB4ZmQsMHhjNywweDA2Ci0sMHhhMywweDM2LDB4MDYsMHgwMCwweGM2LDB4MDYsMHg5ZSwweDM2LDB4ZmYsMHhiOCwweDlhLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5OQotLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5NiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTcsMHgwMywweGNkLDB4MzksMHhiOCwweDk4LDB4MDMKLSwweGNkLDB4MzksMHhiOCwweDliLDB4MDMsMHhjZCwweDM5LDB4ZTksMHgxOCwweGZkLDB4Y2QsMHgzNCwweDgzLDB4M2UsMHhhMywweDM2Ci0sMHgwNCwweDc3LDB4MTgsMHg4MywweDNlLDB4YTMsMHgzNiwweDAzLDB4NzUsMHgwOCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMQotLDB4NzUsMHgwOSwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDEsMHgwMCwweGU5LDB4ZTgsMHhmYywweGU5LDB4ZTEsMHgwMiwweGNkLDB4MzQKLSwweDgzLDB4M2UsMHhhMywweDM2LDB4MDIsMHg3NywweDA5LDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwMSwweDAwLDB4ZTksMHhkMywweGZjCi0sMHg4MywweDNlLDB4YTMsMHgzNiwweDA0LDB4NzcsMHgwNSwweGI4LDB4OTYsMHgwMywweGNkLDB4MzksMHhlOSwweGMwLDB4MDIsMHg4MwotLDB4M2UsMHhhMywweDM2LDB4MDMsMHg3NSwweDEwLDB4MjYsMHhhMSwweDBjLDB4MDAsMHgyNSwweDA3LDB4MDAsMHg1MCwweDNkLDB4MDQKLSwweDAwLDB4NzUsMHgwMywweGU4LDB4MzYsMHgwMCwweGExLDB4ZjMsMHgzNiwweDg2LDB4ZTAsMHhlNywweDFlLDB4YTMsMHhlMywweDM2Ci0sMHg4MSwweDI2LDB4MGIsMHgzNywweDAwLDB4MDMsMHg4MSwweDI2LDB4MGQsMHgzNywweDdiLDB4N2YsMHg4MywweDBlLDB4MGQsMHgzNwotLDB4NDgsMHhlOCwweDE0LDB4ZjMsMHg1OCwweDNkLDB4MDQsMHgwMCwweDc0LDB4MDksMHgyNiwweGY3LDB4MDYsMHgwYywweDAwLDB4MjAKLSwweDAwLDB4NzUsMHgwNiwweGI4LDB4MDEsMHgwMCwweGU5LDB4N2EsMHgwMiwweGU5LDB4ODYsMHhmYywweGExLDB4ZTUsMHgzNiwweGU3Ci0sMHgyZSwweGExLDB4ZTcsMHgzNiwweGU3LDB4M2UsMHhhMSwweGQzLDB4MzYsMHhhMywweDljLDB4MzQsMHhhMSwweGQ1LDB4MzYsMHhhMwotLDB4OWUsMHgzNCwweGMzLDB4MjYsMHg4MCwweDNlLDB4MWMsMHgwMCwweGZmLDB4NzUsMHgyZiwweDI2LDB4ODAsMHgzZSwweDFlLDB4MDAKLSwweGZmLDB4NzUsMHgyNywweDI2LDB4ZjcsMHgwNiwweDBjLDB4MDAsMHg0MCwweDAwLDB4NzUsMHgxYiwweGExLDB4ZDEsMHgzNiwweDI2Ci0sMHhhMywweDFhLDB4MDAsMHhhMSwweGQzLDB4MzYsMHgyNiwweGEzLDB4MWMsMHgwMCwweGExLDB4ZDUsMHgzNiwweDI2LDB4YTMsMHgxZQotLDB4MDAsMHhiOCwweDBhLDB4ODAsMHhlOSwweDJjLDB4MDIsMHhlOSwweDM4LDB4ZmMsMHhmZiwweDA2LDB4OTAsMHgzNCwweGJlLDB4MGEKLSwweDAwLDB4YzYsMHgwNiwweGI2LDB4MzQsMHgwMSwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NSwweDA1LDB4ODMsMHgwZSwweGMyCi0sMHgzNCwweDAxLDB4Y2QsMHgzNCwweGU5LDB4MGMsMHhmYywweDgzLDB4M2UsMHhhMywweDM2LDB4MDMsMHg3NSwweDA5LDB4YzcsMHgwNgotLDB4M2QsMHgzNywweDA1LDB4MDAsMHhlOSwweGZjLDB4ZmIsMHhlNSwweDAyLDB4MGQsMHgwMywweDAwLDB4MGQsMHgwMCwweDg4LDB4MGQKLSwweDAwLDB4NDAsMHgwZCwweDAwLDB4MDQsMHhlNywweDAyLDB4YzcsMHgwNiwweGEzLDB4MzYsMHgwNSwweDAwLDB4YzYsMHgwNiwweDllCi0sMHgzNiwweGZmLDB4YmUsMHgwMiwweDAwLDB4ZTgsMHhlMSwweDAxLDB4YjgsMHg4OSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OWEsMHgwMwotLDB4Y2QsMHgzYSwweGI4LDB4OTksMHgwMywweGNkLDB4MzksMHhiOCwweDk3LDB4MDMsMHhjZCwweDM5LDB4YjgsMHg5OCwweDAzLDB4Y2QKLSwweDM5LDB4ZTksMHhiYiwweDAxLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwMywweDc0LDB4MGEsMHg4MywweDNlLDB4YTMsMHgzNiwweDA0Ci0sMHg3NCwweDAzLDB4ZTksMHhhYSwweDAxLDB4YmUsMHgwNiwweDAwLDB4ZTgsMHhhZSwweDAxLDB4YjgsMHg5NSwweDAzLDB4Y2QsMHgzOQotLDB4ZTksMHg5YywweDAxLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwNSwweDc0LDB4MDMsMHhlOSwweDkyLDB4MDEsMHhiZSwweDAyLDB4MDAKLSwweGU4LDB4OTYsMHgwMSwweGI4LDB4OTksMHgwMywweGNkLDB4MzksMHhlOSwweDg0LDB4MDEsMHhjNywweDA2LDB4MGYsMHgzNywweDA1Ci0sMHgwMCwweGU5LDB4N2IsMHgwMSwweGU1LDB4MDIsMHgyNSwweGZmLDB4ZGYsMHhlNywweDAyLDB4YzcsMHgwNiwweGEzLDB4MzYsMHgwNwotLDB4MDAsMHhjNywweDA2LDB4MGYsMHgzNywweDA1LDB4MDAsMHhlOSwweDY1LDB4MDEsMHhlOCwweGQ1LDB4MDQsMHhjNiwweDA2LDB4OWQKLSwweDM2LDB4MDAsMHhjNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDAsMHhjNywweDA2LDB4MGYsMHgzNywweDA1LDB4MDAsMHhjNywweDA2Ci0sMHhhOCwweDAyLDB4MDAsMHgwMCwweGM3LDB4MDYsMHg0YywweDM3LDB4MDEsMHgwMCwweGU1LDB4MDIsMHgyNSwweGY5LDB4ZmYsMHgwZAotLDB4MDMsMHgwMCwweDBkLDB4MDAsMHg4OCwweDI1LDB4ZWYsMHhmZiwweDBkLDB4MDAsMHg0MCwweDBkLDB4MDAsMHgwNCwweGU3LDB4MDIKLSwweGU5LDB4NjcsMHhmYywweGI4LDB4OWEsMHgwMywweGNkLDB4MzksMHhmNywweDA2LDB4ZjQsMHgzMywweDAwLDB4MTAsMHg3NSwweDA5Ci0sMHhjNywweDA2LDB4MzMsMHgzNywweDAyLDB4MDAsMHhlOSwweDE2LDB4MDEsMHhmZiwweDBlLDB4MzMsMHgzNywweDc0LDB4MDMsMHhlOQotLDB4MGQsMHgwMSwweGZmLDB4MDYsMHg4ZSwweDM0LDB4ODMsMHgwZSwweGMyLDB4MzQsMHgwOCwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDMKLSwweDAwLDB4ZTksMHhmZiwweGZhLDB4YzMsMHg1MiwweDUwLDB4YmEsMHhlMCwweDAwLDB4YjgsMHgwMCwweDEwLDB4ZWYsMHg1OCwweDVhCi0sMHhjMywweGM3LDB4MDYsMHgzZCwweDM3LDB4MDAsMHgwMCwweGU5LDB4ZTksMHhmYSwweGZhLDB4ZTgsMHg1NCwweDA0LDB4YjgsMHg4MAotLDB4MDMsMHg4ZSwweGMwLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGQ4LDB4MmIsMHhiOCwweDdmLDB4MDMsMHg4ZSwweGMwLDB4MjYKLSwweGM3LDB4MDYsMHgwNCwweDAwLDB4ZTgsMHgyYywweDMzLDB4YzAsMHg4ZSwweGMwLDB4YTEsMHhhNywweDM2LDB4YTMsMHhhOSwweDM2Ci0sMHhhMSwweGE5LDB4MzYsMHhlNywweDAwLDB4YTEsMHhhYiwweDM2LDB4ZTcsMHgwMiwweGM3LDB4MDYsMHgwNSwweDM3LDB4MDAsMHgwMAotLDB4YzcsMHgwNiwweDA3LDB4MzcsMHgwMCwweDAwLDB4YzcsMHgwNiwweDA5LDB4MzcsMHgwMCwweDAwLDB4YzYsMHgwNiwweDlkLDB4MzYKLSwweDAwLDB4YzYsMHgwNiwweDllLDB4MzYsMHhmZiwweGM3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMCwweGM3LDB4MDYsMHhhMywweDM2Ci0sMHgwMCwweDAwLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwMCwweDAwLDB4YzcsMHgwNiwweGE4LDB4MDIsMHgwMCwweDAwLDB4YzcsMHgwNgotLDB4NGMsMHgzNywweDAxLDB4MDAsMHg4MSwweDI2LDB4YWYsMHgzNiwweGZmLDB4ZTcsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4YmIKLSwweGZmLDB4N2YsMHhjZCwweDUzLDB4ZTgsMHg3YywweGY5LDB4ZTUsMHg1NiwweDBkLDB4MDIsMHgwMCwweGU3LDB4NTYsMHhmYiwweGMzCi0sMHg4ZCwweDNlLDB4YzAsMHg1MywweDhkLDB4MzYsMHhmMCwweDM4LDB4YjksMHgwZSwweDAwLDB4OGIsMHgxZSwweDMwLDB4MzQsMHg4OQotLDB4NWMsMHgwMiwweDJlLDB4OGIsMHg0NSwweDAyLDB4ODksMHg0NCwweDA2LDB4MmUsMHg4YiwweDA1LDB4ODksMHg0NCwweDA0LDB4ODMKLSwweGM3LDB4MDQsMHg4MywweGM2LDB4MTAsMHhlMiwweGU4LDB4YjgsMHg4MCwweDAzLDB4OGUsMHhjMCwweDI2LDB4YzcsMHgwNiwweDA0Ci0sMHgwMCwweGUyLDB4NTEsMHhiOCwweDdmLDB4MDMsMHg4ZSwweGMwLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGIyLDB4NTIsMHgzMwotLDB4YzAsMHg4ZSwweGMwLDB4YzcsMHgwNiwweGExLDB4MzYsMHgwMSwweDAwLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwNSwweDAwLDB4YzMKLSwweDMzLDB4ZmYsMHg4ZSwweDA2LDB4YTYsMHgwMiwweDhiLDB4MzYsMHhhNCwweDAyLDB4MmUsMHhmZiwweGE0LDB4YTAsMHg1MywweGU4Ci0sMHg4YywweGRiLDB4YzMsMHhlOCwweDQ4LDB4ZjcsMHhlOSwweGY2LDB4ZmYsMHg4ZSwweDA2LDB4MzgsMHgzNCwweGU4LDB4MDcsMHhlMQotLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGRmLDB4NGYsMHhjZCwweDUwLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwYSwweDAwLDB4MDAKLSwweDAwLDB4MjYsMHhmZiwweDI2LDB4MDQsMHgwMCwweGNkLDB4MzQsMHhlOSwweGQ0LDB4ZmYsMHhhMSwweGQxLDB4MzYsMHgyNiwweDM5Ci0sMHgwNiwweDFhLDB4MDAsMHg3NSwweDIyLDB4YTEsMHhkMywweDM2LDB4MjYsMHgzOSwweDA2LDB4MWMsMHgwMCwweDc1LDB4MTgsMHhhMQotLDB4ZDUsMHgzNiwweDI2LDB4MzksMHgwNiwweDFlLDB4MDAsMHg3NSwweDBlLDB4MjYsMHhmNywweDA2LDB4MGMsMHgwMCwweDQwLDB4MDAKLSwweDc0LDB4MDUsMHg4MywweDBlLDB4NjYsMHgzNywweDQwLDB4ODEsMHgwZSwweGFmLDB4MzYsMHgwMCwweDEwLDB4YTEsMHhhZiwweDM2Ci0sMHhlNywweDA2LDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwMiwweDc1LDB4MDUsMHhjZCwweDM0LDB4ZTksMHg1NiwweGZiLDB4ODMsMHgzZQotLDB4YTMsMHgzNiwweDAwLDB4NzQsMHhiMSwweDgzLDB4M2UsMHhhMywweDM2LDB4MDUsMHg3NywweGFhLDB4MjYsMHhmNiwweDA2LDB4MGEKLSwweDAwLDB4ZmYsMHg3NSwweGEyLDB4ZTgsMHhmZCwweGRkLDB4NTAsMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGU5Ci0sMHg4YywweDAwLDB4MjYsMHhhMSwweDBjLDB4MDAsMHgyNSwweDA3LDB4MDAsMHgzZCwweDA3LDB4MDAsMHg3NSwweDAzLDB4ZTksMHg3NgotLDB4MDAsMHgzZCwweDA1LDB4MDAsMHg3NSwweDAzLDB4ZTksMHg2ZSwweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgxOCwweDgwLDB4NzUKLSwweDAzLDB4ZTksMHg2YSwweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgwMCwweDgwLDB4NzQsMHgzNSwweDI2LDB4ODAsMHgzZSwweDI5Ci0sMHgwMCwweDAyLDB4NzUsMHgyZCwweDUxLDB4NTYsMHg1NywweDhkLDB4MzYsMHgzZSwweDM0LDB4OGQsMHgzZSwweDIwLDB4MDAsMHhiOQotLDB4MDYsMHgwMCwweGYzLDB4YTYsMHg1ZiwweDVlLDB4NTksMHg3NSwweDQ1LDB4MjYsMHhhMSwweDIwLDB4MDAsMHhhMywweDNlLDB4MzQKLSwweDI2LDB4YTEsMHgyMiwweDAwLDB4YTMsMHg0MCwweDM0LDB4MjYsMHhhMSwweDI0LDB4MDAsMHhhMywweDQyLDB4MzQsMHhlOSwweDI2Ci0sMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4MDgsMHgwMCwweDc0LDB4MGIsMHgyNiwweDgwLDB4M2UsMHgxOSwweDAwLDB4MDAsMHg3NAotLDB4MDMsMHhlOSwweDEzLDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDEwLDB4MDAsMHg3NCwweDEyLDB4MjYsMHhhMCwweDI4LDB4MDAKLSwweGMwLDB4ZTgsMHgwNCwweDIyLDB4YzAsMHg3NCwweDA3LDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGZmLDB4ZmYsMHg1OCwweDIzCi0sMHhjMCwweDc0LDB4MDMsMHhlOSwweGRkLDB4ZmUsMHg4MSwweDI2LDB4OWIsMHgzNiwweGZmLDB4ZmUsMHgyNiwweGExLDB4MjAsMHgwMAotLDB4M2IsMHgwNiwweGQxLDB4MzYsMHg3NSwweDFhLDB4MjYsMHhhMSwweDIyLDB4MDAsMHgzYiwweDA2LDB4ZDMsMHgzNiwweDc1LDB4MTAKLSwweDI2LDB4YTEsMHgyNCwweDAwLDB4M2IsMHgwNiwweGQ1LDB4MzYsMHg3NSwweDA2LDB4ODEsMHgwZSwweDliLDB4MzYsMHgwMCwweDAxCi0sMHgyNiwweGExLDB4MjAsMHgwMCwweDI1LDB4N2YsMHhmZiwweGEzLDB4YjgsMHgzNCwweDI2LDB4YTEsMHgyMiwweDAwLDB4YTMsMHhiYQotLDB4MzQsMHgyNiwweGExLDB4MjQsMHgwMCwweGEzLDB4YmMsMHgzNCwweDhiLDB4YzYsMHg4NiwweGM0LDB4YTMsMHhjMCwweDM0LDB4ZDEKLSwweGU2LDB4ODAsMHhmYywweDA5LDB4NzQsMHgwMywweGU4LDB4ZjYsMHhmNSwweGExLDB4MDUsMHgzNywweDBiLDB4MDYsMHgwNywweDM3Ci0sMHgwYiwweDA2LDB4MDksMHgzNywweDc0LDB4M2UsMHgyNiwweGExLDB4MjAsMHgwMCwweDNiLDB4MDYsMHgwNSwweDM3LDB4NzUsMHgxNwotLDB4MjYsMHhhMSwweDIyLDB4MDAsMHgzYiwweDA2LDB4MDcsMHgzNywweDc1LDB4MGQsMHgyNiwweGExLDB4MjQsMHgwMCwweDNiLDB4MDYKLSwweDA5LDB4MzcsMHg3NSwweDAzLDB4ZTksMHgxZCwweDAwLDB4MjYsMHhhMCwweDI4LDB4MDAsMHgyNCwweDBmLDB4M2MsMHgwMywweDc0Ci0sMHgxYiwweDNjLDB4MDAsMHg3NSwweDBmLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwNCwweDc0LDB4MTAsMHhmNywweDA2LDB4OWIsMHgzNgotLDB4MDAsMHgwMSwweDc0LDB4MDgsMHgyZSwweGZmLDB4OTQsMHhmOCwweDUzLDB4ZTksMHgzMywweGZlLDB4Y2QsMHgzNCwweGM3LDB4MDYKLSwweDNkLDB4MzcsMHgwMSwweDAwLDB4ZTksMHgyYywweGY4LDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwNSwweDc0LDB4MTAsMHg4MywweDNlCi0sMHhhMywweDM2LDB4MDEsMHg3ZSwweDA5LDB4ODMsMHhlZSwweDE2LDB4MmUsMHhmZiwweDk0LDB4MjQsMHg1NCwweGMzLDB4Y2QsMHgzNAotLDB4YzMsMHgyNiwweGExLDB4MGMsMHgwMCwweDNkLDB4ZmYsMHg3ZiwweDc0LDB4MDUsMHgyNiwweGZmLDB4MjYsMHgwNCwweDAwLDB4ZTkKLSwweGZkLDB4ZmQsMHhhMSwweGY0LDB4MzMsMHhhOSwweDAwLDB4ODgsMHg3NCwweDBiLDB4YTksMHgwMCwweDEwLDB4NzUsMHgwOSwweDhiCi0sMHgxZSwweDQzLDB4MzcsMHhmZiwweGUzLDB4ZTksMHg5NywweDAwLDB4YzcsMHgwNiwweDM1LDB4MzcsMHgwNSwweDAwLDB4YzcsMHgwNgotLDB4NDMsMHgzNywweDI4LDB4NTIsMHhmNywweDA2LDB4ZjQsMHgzMywweDAwLDB4MDgsMHg3NCwweDA2LDB4YzcsMHgwNiwweDQzLDB4MzcKLSwweDFhLDB4NTIsMHhiOCwweDgwLDB4MDMsMHhjZCwweDM5LDB4ZTksMHhjNSwweGZkLDB4YTksMHgwMCwweDA4LDB4NzQsMHhkOSwweGZmCi0sMHgwZSwweDM1LDB4MzcsMHg3NSwweGVkLDB4ZTksMHgzMCwweDAwLDB4YTksMHgwMCwweDA4LDB4NzUsMHhjYiwweGZmLDB4MGUsMHgzNQotLDB4MzcsMHg3NSwweGRmLDB4ODEsMHgwZSwweGMyLDB4MzQsMHhjMCwweDAwLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4MGYKLSwweDgxLDB4MGUsMHg5YiwweDM2LDB4MDAsMHg4MCwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDIsMHgwMCwweGU5LDB4OTAsMHhmZCwweGM3Ci0sMHgwNiwweDNkLDB4MzcsMHgwMiwweDAwLDB4ZTksMHg4YiwweGY3LDB4ODAsMHgyNiwweDllLDB4MzYsMHhmZiwweDc1LDB4MzAsMHhmNgotLDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweDIwLDB4ZmYsMHgwNiwweDk0LDB4MzQsMHg4MywweDBlLDB4NjYsMHgzNywweDIwLDB4OGUKLSwweDA2LDB4MzAsMHgzNCwweDI2LDB4ZjcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDAxLDB4NzQsMHgwNywweDI2LDB4ODEsMHgwZSwweDA4Ci0sMHgwMCwweDAwLDB4MDEsMHhlOSwweDA5LDB4MDAsMHhjNywweDA2LDB4M2QsMHgzNywweDA0LDB4MDAsMHhlOSwweDU0LDB4ZjcsMHg4MQotLDB4MGUsMHhhZiwweDM2LDB4MDAsMHgwOCwweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhlNSwweDBhLDB4YTksMHgwMCwweDgwLDB4NzQKLSwweDBlLDB4ODEsMHgyNiwweGFmLDB4MzYsMHhmZiwweGY3LDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGU5LDB4NDksMHhmZiwweGU5Ci0sMHgyZCwweGZkLDB4YzcsMHgwNiwweDQxLDB4MzcsMHgwMCwweDAwLDB4YmUsMHgyOSwweDAwLDB4ZTgsMHgyYiwweGZkLDB4ZTksMHgxZQotLDB4ZmQsMHhjZCwweDM0LDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwNCwweDc3LDB4MDksMHhjNywweDA2LDB4M2QsMHgzNywweDAxLDB4MDAKLSwweGU5LDB4MTAsMHhmNywweGU5LDB4MDksMHhmZCwweGNkLDB4MzQsMHhjMywweGM3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMCwweGU4Ci0sMHgwYywweGY1LDB4ODEsMHgyNiwweGFmLDB4MzYsMHhmZiwweGU3LDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweDgxLDB4MjYsMHg5YgotLDB4MzYsMHhmZiwweDdmLDB4ZTUsMHgwMiwweDBkLDB4MDEsMHgwMCwweDI1LDB4ZWYsMHhmZiwweDI1LDB4ZmYsMHhkZiwweGU3LDB4MDIKLSwweGJiLDB4ZmYsMHg3ZiwweGNkLDB4NTMsMHgzMywweGMwLDB4YTMsMHg5ZCwweDM2LDB4YTMsMHg5ZiwweDM2LDB4ZTgsMHgyMCwweGYzCi0sMHhlOCwweDQzLDB4ZjMsMHg4MywweDBlLDB4OWIsMHgzNiwweDEwLDB4YzcsMHgwNiwweDk5LDB4MzYsMHgwMCwweDAwLDB4ZTgsMHhkMgotLDB4ZjUsMHhlNSwweDU2LDB4MGQsMHgwMiwweDAwLDB4ZTcsMHg1NiwweGM3LDB4MDYsMHhhOCwweDAyLDB4MDAsMHgwMCwweGJlLDB4MDAKLSwweDAwLDB4ZTgsMHgzMCwweGY1LDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwZSwweGI4LDB4OWMsMHgwMywweGNkLDB4MzksMHhiOCwweDgwCi0sMHgwMCwweGNkLDB4MzUsMHhjNywweDA2LDB4YWEsMHgwMiwweGZmLDB4ZmYsMHhjNywweDA2LDB4YTEsMHgzNiwweDAxLDB4MDAsMHhlOQotLDB4YTUsMHhmNiwweDA2LDB4YjgsMHg4ZiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTAsMHgwMywweGNkLDB4M2EsMHhiOCwweDkxLDB4MDMKLSwweGNkLDB4M2EsMHhiOCwweDkyLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5MywweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTQsMHgwMywweGNkCi0sMHgzYSwweGI4LDB4OTUsMHgwMywweGNkLDB4M2EsMHhiOCwweDk2LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5NywweDAzLDB4Y2QsMHgzYQotLDB4YjgsMHg5OCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTksMHgwMywweGNkLDB4M2EsMHhiOCwweDlhLDB4MDMsMHhjZCwweDNhLDB4YjgKLSwweDliLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg3ZiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODAsMHgwMywweGNkLDB4M2EsMHgwNywweGMzCi0sMHhmNywweDQ5LDB4ZjEsMHg0ZSwweGRmLDB4NGYsMHhkZiwweDRmLDB4ZGYsMHg0ZiwweGRmLDB4NGYsMHhmOCwweDUxLDB4ZGYsMHg0ZgotLDB4ZmEsMHg0ZiwweDBiLDB4NTAsMHhkMSwweDUxLDB4ZGYsMHg0ZiwweGRmLDB4NGYsMHhkZiwweDRmLDB4ZGYsMHg0ZiwweGRmLDB4NGYKLSwweGU0LDB4NGUsMHgwNiwweDAwLDB4Y2QsMHg0YSwweDA0LDB4MDAsMHhlNCwweDRlLDB4MTksMHgwMCwweGFkLDB4NGIsMHhmYSwweDAwCi0sMHg4MiwweDRjLDB4MDgsMHgwNywweDA5LDB4NGMsMHgxNCwweDAwLDB4MjQsMHg0ZSwweDY0LDB4MDAsMHhkNywweDRkLDB4ZjQsMHgwMQotLDB4NjQsMHg0ZSwweGJjLDB4MDIsMHg3YSwweDRlLDB4ZTgsMHgwMywweDQzLDB4NGUsMHgwMiwweDAwLDB4YjMsMHg0ZSwweGY0LDB4MDEKLSwweDViLDB4NGUsMHhmNCwweDAxLDB4ZTUsMHg0ZSwweDE0LDB4MDAsMHgwNiwweDUwLDB4MDYsMHg1MCwweDk1LDB4NGMsMHhjMSwweDUyCi0sMHhjMSwweDUyLDB4ZmUsMHg0YywweGRhLDB4NGMsMHgwNiwweDUwLDB4MDYsMHg1MCwweDA2LDB4NTAsMHgwNiwweDUwLDB4YjcsMHg1MQotLDB4YjcsMHg1MSwweGI3LDB4NTEsMHhiNywweDUxLDB4YjcsMHg1MSwweGI3LDB4NTEsMHgwNiwweDUwLDB4ZDUsMHg0YSwweDA2LDB4NTAKLSwweDFkLDB4NGMsMHgwNiwweDUwLDB4ODMsMHg0ZCwweDFmLDB4NGQsMHgxZiwweDRkLDB4ZWQsMHg0MCwweGZhLDB4NDAsMHgwNywweDQxCi0sMHgzNywweDM3LDB4MmUsMHgzNywweDM3LDB4MjAsMHgyMCwweDc5LDB4NzksMHgyZiwweDc5LDB4NzksMHgyZiwweDc5LDB4NzksMHgyMAotLDB4MzAsMHgzMSwweDJlLDB4MzksMHgzMCwweDIwLDB4MjAsMHgzMCwweDMyLDB4MmYsMHgzMSwweDM3LDB4MmYsMHgzOSwweDM5LDB4MjAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHg5MCwweGVhLDB4YzAsMHgxNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTMsMHgwNgotfSA7ICAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCmluZGV4IDkzM2ZjZmIuLmQzZjM5ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CkBAIC0yMjMsMTAgKzIyMiwxMCBAQAogCQkgICAgKCgodW5zaWduZWQpc2tiLT5kYXRhKSAmIChVQ0NfR0VUSF9SWF9EQVRBX0JVRl9BTElHTk1FTlQgLQogCQkJCQkgICAgICAxKSkpOwogCi0Jc2tiLT5kZXYgPSB1Z2V0aC0+ZGV2OworCXNrYi0+ZGV2ID0gdWdldGgtPm5kZXY7CiAKIAlvdXRfYmUzMigmKChzdHJ1Y3QgcWVfYmQgX19pb21lbSAqKWJkKS0+YnVmLAotCQkgICAgICBkbWFfbWFwX3NpbmdsZSgmdWdldGgtPmRldi0+ZGV2LAorCQkgICAgICBkbWFfbWFwX3NpbmdsZSh1Z2V0aC0+ZGV2LAogCQkJCSAgICAgc2tiLT5kYXRhLAogCQkJCSAgICAgdWdldGgtPnVnX2luZm8tPnVmX2luZm8ubWF4X3J4X2J1Zl9sZW5ndGggKwogCQkJCSAgICAgVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5ULApAQCAtMTg3Miw3ICsxODcxLDcgQEAKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGogPSAwOyBqIDwgdWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblR4W2ldOyBqKyspIHsKIAkJCWlmICh1Z2V0aC0+dHhfc2tidWZmW2ldW2pdKSB7Ci0JCQkJZG1hX3VubWFwX3NpbmdsZSgmdWdldGgtPmRldi0+ZGV2LAorCQkJCWRtYV91bm1hcF9zaW5nbGUodWdldGgtPmRldiwKIAkJCQkJCSBpbl9iZTMyKCYoKHN0cnVjdCBxZV9iZCBfX2lvbWVtICopYmQpLT5idWYpLAogCQkJCQkJIChpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKSAmCiAJCQkJCQkgIEJEX0xFTkdUSF9NQVNLKSwKQEAgLTE5MDAsNyArMTg5OSw3IEBACiAJCQliZCA9IHVnZXRoLT5wX3J4X2JkX3JpbmdbaV07CiAJCQlmb3IgKGogPSAwOyBqIDwgdWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblJ4W2ldOyBqKyspIHsKIAkJCQlpZiAodWdldGgtPnJ4X3NrYnVmZltpXVtqXSkgewotCQkJCQlkbWFfdW5tYXBfc2luZ2xlKCZ1Z2V0aC0+ZGV2LT5kZXYsCisJCQkJCWRtYV91bm1hcF9zaW5nbGUodWdldGgtPmRldiwKIAkJCQkJCWluX2JlMzIoJigoc3RydWN0IHFlX2JkIF9faW9tZW0gKiliZCktPmJ1ZiksCiAJCQkJCQl1Z2V0aC0+dWdfaW5mby0+CiAJCQkJCQl1Zl9pbmZvLm1heF9yeF9idWZfbGVuZ3RoICsKQEAgLTMwNzEsNyArMzA3MCw3IEBACiAKIAkvKiBzZXQgdXAgdGhlIGJ1ZmZlciBkZXNjcmlwdG9yICovCiAJb3V0X2JlMzIoJigoc3RydWN0IHFlX2JkIF9faW9tZW0gKiliZCktPmJ1ZiwKLQkJICAgICAgZG1hX21hcF9zaW5nbGUoJnVnZXRoLT5kZXYtPmRldiwgc2tiLT5kYXRhLAorCQkgICAgICBkbWFfbWFwX3NpbmdsZSh1Z2V0aC0+ZGV2LCBza2ItPmRhdGEsCiAJCQkgICAgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSkpOwogCiAJLyogcHJpbnRrKEtFUk5fREVCVUcic2tiLT5kYXRhIGlzIDB4JXhcbiIsc2tiLT5kYXRhKTsgKi8KQEAgLTMxMjcsNyArMzEyNiw3IEBACiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX2Z1bmNfXyk7CiAKLQlkZXYgPSB1Z2V0aC0+ZGV2OworCWRldiA9IHVnZXRoLT5uZGV2OwogCiAJLyogY29sbGVjdCByZWNlaXZlZCBidWZmZXJzICovCiAJYmQgPSB1Z2V0aC0+cnhCZFtyeFFdOwpAQCAtMzE2MSw3ICszMTYwLDcgQEAKIAkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCiAJCQkvKiBUZWxsIHRoZSBza2Igd2hhdCBraW5kIG9mIHBhY2tldCB0aGlzIGlzICovCi0JCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB1Z2V0aC0+ZGV2KTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHVnZXRoLT5uZGV2KTsKIAogCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGg7CiAJCQkvKiBTZW5kIHRoZSBwYWNrZXQgdXAgdGhlIHN0YWNrICovCkBAIC0zNDMyLDcgKzM0MzEsNyBAQAogCiAJdWNjX2dldGhfc3RvcCh1Z2V0aCk7CiAKLQlmcmVlX2lycSh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5pcnEsIHVnZXRoLT5kZXYpOworCWZyZWVfaXJxKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmlycSwgdWdldGgtPm5kZXYpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC0zNDQ2LDcgKzM0NDUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAl1Z2V0aCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSwgdGltZW91dF93b3JrKTsKLQlkZXYgPSB1Z2V0aC0+ZGV2OworCWRldiA9IHVnZXRoLT5uZGV2OwogCiAJdWdldGhfdmRiZygiJXM6IElOIiwgX19mdW5jX18pOwogCkBAIC0zNzU2LDcgKzM3NTUsOCBAQAogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgbWFjX2FkZHIsIDYpOwogCiAJdWdldGgtPnVnX2luZm8gPSB1Z19pbmZvOwotCXVnZXRoLT5kZXYgPSBkZXY7CisJdWdldGgtPmRldiA9IGRldmljZTsKKwl1Z2V0aC0+bmRldiA9IGRldjsKIAl1Z2V0aC0+bm9kZSA9IG5wOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaAppbmRleCBlM2EyNWU2Li4yZjhlZTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTIwLDcgKzIwLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2ltbWFwX3FlLmg+CiAjaW5jbHVkZSA8YXNtL3FlLmg+CkBAIC0xMTI5LDcgKzExMjgsOCBAQAogc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgewogCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvOwogCXN0cnVjdCB1Y2NfZmFzdF9wcml2YXRlICp1Y2NmOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0aW1lb3V0X3dvcms7CiAJc3RydWN0IHVjY19nZXRoIF9faW9tZW0gKnVnX3JlZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKaW5kZXggYTc1NWJlYS4uNmZjYjUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCmluZGV4IGNkZTQyM2MuLmY4NGI3OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYworKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKQEAgLTUsNiArNSw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE9wdGlvbiBJbnRlcm5hdGlvbmFsCiAgKiAgICAgICAgICAgICAgICAgICAgIEZpbGlwIEFiZW4gPGYuYWJlbkBvcHRpb24uY29tPgogICogICAgICAgICAgICAgICAgICAgICBEZW5pcyBKb3NlcGggQmFycm93IDxkLmJhcm93QG9wdGlvbi5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgIEphbiBEdW1vbiA8ai5kdW1vbkBvcHRpb24uY29tPgogICogIENvcHlyaWdodCAoQykgMjAwNyBBbmRyZXcgQmlyZCAoU3BoZXJlIFN5c3RlbXMgTHRkKQogICogIAkJCTxhamJAc3BoZXJlc3lzdGVtcy5jby51az4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDggR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KQEAgLTQ2Miw5ICs0NjMsMTYgQEAKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzcwMSl9LAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg3ODAxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDc5MDEpfSwKLQl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzM2MSl9LAotCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMDU3KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDgyMDApfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ODIwMSl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMDM1KX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQwNTUpfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDE1NSl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMjU1KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQwNTcpfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDE1Nyl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMjU3KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQzNTcpfSwKIAl7fQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBoc29faWRzKTsKQEAgLTI0MTAsMTQgKzI0MTgsNiBAQAogCWlmICghaHNvX25ldCkKIAkJcmV0dXJuOwogCi0JLyogc3RhcnQgZnJlZWluZyAqLwotCWZvciAoaSA9IDA7IGkgPCBNVVhfQlVMS19SWF9CVUZfQ09VTlQ7IGkrKykgewotCQl1c2JfZnJlZV91cmIoaHNvX25ldC0+bXV4X2J1bGtfcnhfdXJiX3Bvb2xbaV0pOwotCQlrZnJlZShoc29fbmV0LT5tdXhfYnVsa19yeF9idWZfcG9vbFtpXSk7Ci0JfQotCXVzYl9mcmVlX3VyYihoc29fbmV0LT5tdXhfYnVsa190eF91cmIpOwotCWtmcmVlKGhzb19uZXQtPm11eF9idWxrX3R4X2J1Zik7Ci0KIAlyZW1vdmVfbmV0X2RldmljZShoc29fbmV0LT5wYXJlbnQpOwogCiAJaWYgKGhzb19uZXQtPm5ldCkgewpAQCAtMjQyNSw2ICsyNDI1LDE2IEBACiAJCWZyZWVfbmV0ZGV2KGhzb19uZXQtPm5ldCk7CiAJfQogCisJLyogc3RhcnQgZnJlZWluZyAqLworCWZvciAoaSA9IDA7IGkgPCBNVVhfQlVMS19SWF9CVUZfQ09VTlQ7IGkrKykgeworCQl1c2JfZnJlZV91cmIoaHNvX25ldC0+bXV4X2J1bGtfcnhfdXJiX3Bvb2xbaV0pOworCQlrZnJlZShoc29fbmV0LT5tdXhfYnVsa19yeF9idWZfcG9vbFtpXSk7CisJCWhzb19uZXQtPm11eF9idWxrX3J4X2J1Zl9wb29sW2ldID0gTlVMTDsKKwl9CisJdXNiX2ZyZWVfdXJiKGhzb19uZXQtPm11eF9idWxrX3R4X3VyYik7CisJa2ZyZWUoaHNvX25ldC0+bXV4X2J1bGtfdHhfYnVmKTsKKwloc29fbmV0LT5tdXhfYnVsa190eF9idWYgPSBOVUxMOworCiAJa2ZyZWUoaHNvX2Rldik7CiB9CiAKQEAgLTI1MjYsMTQgKzI1MzYsMTUgQEAKIH0KIAogLyogQ3JlYXRlcyBvdXIgbmV0d29yayBkZXZpY2UgKi8KLXN0YXRpYyBzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCitzdGF0aWMgc3RydWN0IGhzb19kZXZpY2UgKmhzb19jcmVhdGVfbmV0X2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCQkJaW50IHBvcnRfc3BlYykKIHsKIAlpbnQgcmVzdWx0LCBpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7CiAJc3RydWN0IGhzb19uZXQgKmhzb19uZXQ7CiAJc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXY7CiAKLQloc29fZGV2ID0gaHNvX2NyZWF0ZV9kZXZpY2UoaW50ZXJmYWNlLCBIU09fSU5URl9NVVggfCBIU09fUE9SVF9ORVRXT1JLKTsKKwloc29fZGV2ID0gaHNvX2NyZWF0ZV9kZXZpY2UoaW50ZXJmYWNlLCBwb3J0X3NwZWMpOwogCWlmICghaHNvX2RldikKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTI2MTMsMTIgKzI2MjQsMTIgQEAKIHsKIAlzdHJ1Y3QgaHNvX3Rpb2NtZ2V0ICp0aW9jbWdldCA9IHNlcmlhbC0+dGlvY21nZXQ7CiAJaWYgKHRpb2NtZ2V0KSB7Ci0JCWtmcmVlKHRpb2NtZ2V0KTsKIAkJaWYgKHRpb2NtZ2V0LT51cmIpIHsKIAkJCXVzYl9mcmVlX3VyYih0aW9jbWdldC0+dXJiKTsKIAkJCXRpb2NtZ2V0LT51cmIgPSBOVUxMOwogCQl9CiAJCXNlcmlhbC0+dGlvY21nZXQgPSBOVUxMOworCQlrZnJlZSh0aW9jbWdldCk7CiAKIAl9CiB9CkBAIC0yOTMzLDcgKzI5NDQsOCBAQAogCQlpZiAoKHBvcnRfc3BlYyAmIEhTT19QT1JUX01BU0spID09IEhTT19QT1JUX05FVFdPUkspIHsKIAkJCS8qIENyZWF0ZSB0aGUgbmV0d29yayBkZXZpY2UgKi8KIAkJCWlmICghZGlzYWJsZV9uZXQpIHsKLQkJCQloc29fZGV2ID0gaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKGludGVyZmFjZSk7CisJCQkJaHNvX2RldiA9IGhzb19jcmVhdGVfbmV0X2RldmljZShpbnRlcmZhY2UsCisJCQkJCQkJCXBvcnRfc3BlYyk7CiAJCQkJaWYgKCFoc29fZGV2KQogCQkJCQlnb3RvIGV4aXQ7CiAJCQkJdG1wX2RldiA9IGhzb19kZXY7CkBAIC0yOTY1LDcgKzI5NzcsNyBAQAogCQkvKiBJdCdzIGEgcmVndWxhciBidWxrIGludGVyZmFjZSAqLwogCQlpZiAoKChwb3J0X3NwZWMgJiBIU09fUE9SVF9NQVNLKSA9PSBIU09fUE9SVF9ORVRXT1JLKQogCQkgICAgJiYgIWRpc2FibGVfbmV0KQotCQkJaHNvX2RldiA9IGhzb19jcmVhdGVfbmV0X2RldmljZShpbnRlcmZhY2UpOworCQkJaHNvX2RldiA9IGhzb19jcmVhdGVfbmV0X2RldmljZShpbnRlcmZhY2UsIHBvcnRfc3BlYyk7CiAJCWVsc2UKIAkJCWhzb19kZXYgPQogCQkJICAgIGhzb19jcmVhdGVfYnVsa19zZXJpYWxfZGV2aWNlKGludGVyZmFjZSwgcG9ydF9zcGVjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCA3Y2IxMGEwLi4zZDBkMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC0zNiw3ICszNiw2IEBACiAgKiBSdW4gdGVzdCBwcm9jZWR1cmVzCiAgKiBGaXggYnVncyBmcm9tIHByZXZpb3VzIHR3byBzdGVwcwogICogU25vb3Agb3RoZXIgT1NzIGZvciBhbnkgdHJpY2tzIHdlJ3JlIG5vdCBkb2luZwotICogU01QIGxvY2tpbmcKICAqIFJlZHVjZSBhcmJpdHJhcnkgdGltZW91dHMKICAqIFNtYXJ0IG11bHRpY2FzdCBzdXBwb3J0CiAgKiBUZW1wb3JhcnkgTUFDIGNoYW5nZSBzdXBwb3J0CkBAIC03OTYsNyArNzk1LDcgQEAKIAogCWludCByZXM7CiAKLQlzcGluX2xvY2soJmthd2V0aC0+ZGV2aWNlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJmthd2V0aC0+ZGV2aWNlX2xvY2spOwogCiAJa2F3ZXRoX2FzeW5jX3NldF9yeF9tb2RlKGthd2V0aCk7CiAJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwpAQCAtODE0LDcgKzgxMyw3IEBACiAJCWlmICghY29waWVkX3NrYikgewogCQkJa2F3ZXRoLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7Ci0JCQlzcGluX3VubG9jaygma2F3ZXRoLT5kZXZpY2VfbG9jayk7CisJCQlzcGluX3VubG9ja19pcnEoJmthd2V0aC0+ZGV2aWNlX2xvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC04NDgsNyArODQ3LDcgQEAKIAkJbmV0LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmthd2V0aC0+ZGV2aWNlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgma2F3ZXRoLT5kZXZpY2VfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC92eGdlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTJjYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBNYWtlZmlsZSBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwIEdiRSBQQ0llICMgSS9PCisjIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyIGxpbnV4IGRyaXZlcgorCitvYmotJChDT05GSUdfVlhHRSkgKz0gdnhnZS5vCisKK3Z4Z2Utb2JqcyA6PSB2eGdlLWNvbmZpZy5vIHZ4Z2UtdHJhZmZpYy5vIHZ4Z2UtZXRodG9vbC5vIHZ4Z2UtbWFpbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0MWM4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwpAQCAtMCwwICsxLDUyNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisgKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisgKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiB2eGdlLWNvbmZpZy5jOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX2hvdHBsdWcuaD4KKworI2luY2x1ZGUgInZ4Z2UtdHJhZmZpYy5oIgorI2luY2x1ZGUgInZ4Z2UtY29uZmlnLmgiCisKKy8qCisgKiBfX3Z4Z2VfaHdfY2hhbm5lbF9hbGxvY2F0ZSAtIEFsbG9jYXRlIG1lbW9yeSBmb3IgY2hhbm5lbAorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgcmVxdWlyZWQgbWVtb3J5IGZvciB0aGUgY2hhbm5lbCBhbmQgdmFyaW91cyBhcnJheXMKKyAqIGluIHRoZSBjaGFubmVsCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCoKK19fdnhnZV9od19jaGFubmVsX2FsbG9jYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGgsCisJCQkgICBlbnVtIF9fdnhnZV9od19jaGFubmVsX3R5cGUgdHlwZSwKKwl1MzIgbGVuZ3RoLCB1MzIgcGVyX2R0cl9zcGFjZSwgdm9pZCAqdXNlcmRhdGEpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwlpbnQgc2l6ZSA9IDA7CisJdTMyIHZwX2lkOworCisJaGxkZXYgPSB2cGgtPnZwYXRoLT5obGRldjsKKwl2cF9pZCA9IHZwaC0+dnBhdGgtPnZwX2lkOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBWWEdFX0hXX0NIQU5ORUxfVFlQRV9GSUZPOgorCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyk7CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19DSEFOTkVMX1RZUEVfUklORzoKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X3JpbmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwljaGFubmVsID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKQorCQlnb3RvIGV4aXQwOworCUlOSVRfTElTVF9IRUFEKCZjaGFubmVsLT5pdGVtKTsKKworCWNoYW5uZWwtPmNvbW1vbl9yZWcgPSBobGRldi0+Y29tbW9uX3JlZzsKKwljaGFubmVsLT5maXJzdF92cF9pZCA9IGhsZGV2LT5maXJzdF92cF9pZDsKKwljaGFubmVsLT50eXBlID0gdHlwZTsKKwljaGFubmVsLT5kZXZoID0gaGxkZXY7CisJY2hhbm5lbC0+dnBoID0gdnBoOworCWNoYW5uZWwtPnVzZXJkYXRhID0gdXNlcmRhdGE7CisJY2hhbm5lbC0+cGVyX2R0cl9zcGFjZSA9IHBlcl9kdHJfc3BhY2U7CisJY2hhbm5lbC0+bGVuZ3RoID0gbGVuZ3RoOworCWNoYW5uZWwtPnZwX2lkID0gdnBfaWQ7CisKKwljaGFubmVsLT53b3JrX2FyciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hhbm5lbC0+d29ya19hcnIgPT0gTlVMTCkKKwkJZ290byBleGl0MTsKKworCWNoYW5uZWwtPmZyZWVfYXJyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmIChjaGFubmVsLT5mcmVlX2FyciA9PSBOVUxMKQorCQlnb3RvIGV4aXQxOworCWNoYW5uZWwtPmZyZWVfcHRyID0gbGVuZ3RoOworCisJY2hhbm5lbC0+cmVzZXJ2ZV9hcnIgPSBremFsbG9jKHNpemVvZih2b2lkICopKmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoYW5uZWwtPnJlc2VydmVfYXJyID09IE5VTEwpCisJCWdvdG8gZXhpdDE7CisJY2hhbm5lbC0+cmVzZXJ2ZV9wdHIgPSBsZW5ndGg7CisJY2hhbm5lbC0+cmVzZXJ2ZV90b3AgPSAwOworCisJY2hhbm5lbC0+b3JpZ19hcnIgPSBremFsbG9jKHNpemVvZih2b2lkICopKmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoYW5uZWwtPm9yaWdfYXJyID09IE5VTEwpCisJCWdvdG8gZXhpdDE7CisKKwlyZXR1cm4gY2hhbm5lbDsKK2V4aXQxOgorCV9fdnhnZV9od19jaGFubmVsX2ZyZWUoY2hhbm5lbCk7CisKK2V4aXQwOgorCXJldHVybiBOVUxMOworfQorCisvKgorICogX192eGdlX2h3X2NoYW5uZWxfZnJlZSAtIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgY2hhbm5lbAorICogVGhpcyBmdW5jdGlvbiBkZWFsbG9jYXRlcyBtZW1vcnkgZnJvbSB0aGUgY2hhbm5lbCBhbmQgdmFyaW91cyBhcnJheXMKKyAqIGluIHRoZSBjaGFubmVsCisgKi8KK3ZvaWQgX192eGdlX2h3X2NoYW5uZWxfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpCit7CisJa2ZyZWUoY2hhbm5lbC0+d29ya19hcnIpOworCWtmcmVlKGNoYW5uZWwtPmZyZWVfYXJyKTsKKwlrZnJlZShjaGFubmVsLT5yZXNlcnZlX2Fycik7CisJa2ZyZWUoY2hhbm5lbC0+b3JpZ19hcnIpOworCWtmcmVlKGNoYW5uZWwpOworfQorCisvKgorICogX192eGdlX2h3X2NoYW5uZWxfaW5pdGlhbGl6ZSAtIEluaXRpYWxpemUgYSBjaGFubmVsCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgY2hhbm5lbCBieSBwcm9wZXJseSBzZXR0aW5nIHRoZQorICogdmFyaW91cyByZWZlcmVuY2VzCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19jaGFubmVsX2luaXRpYWxpemUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCXUzMiBpOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCisJdnBhdGggPSBjaGFubmVsLT52cGgtPnZwYXRoOworCisJaWYgKChjaGFubmVsLT5yZXNlcnZlX2FyciAhPSBOVUxMKSAmJiAoY2hhbm5lbC0+b3JpZ19hcnIgIT0gTlVMTCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPmxlbmd0aDsgaSsrKQorCQkJY2hhbm5lbC0+b3JpZ19hcnJbaV0gPSBjaGFubmVsLT5yZXNlcnZlX2FycltpXTsKKwl9CisKKwlzd2l0Y2ggKGNoYW5uZWwtPnR5cGUpIHsKKwljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX0ZJRk86CisJCXZwYXRoLT5maWZvaCA9IChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKiljaGFubmVsOworCQljaGFubmVsLT5zdGF0cyA9ICYoKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqKQorCQkJCWNoYW5uZWwpLT5zdGF0cy0+Y29tbW9uX3N0YXRzOworCQlicmVhazsKKwljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkc6CisJCXZwYXRoLT5yaW5naCA9IChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKiljaGFubmVsOworCQljaGFubmVsLT5zdGF0cyA9ICYoKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqKQorCQkJCWNoYW5uZWwpLT5zdGF0cy0+Y29tbW9uX3N0YXRzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19jaGFubmVsX3Jlc2V0IC0gUmVzZXRzIGEgY2hhbm5lbAorICogVGhpcyBmdW5jdGlvbiByZXNldHMgYSBjaGFubmVsIGJ5IHByb3Blcmx5IHNldHRpbmcgdGhlIHZhcmlvdXMgcmVmZXJlbmNlcworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfY2hhbm5lbF9yZXNldChzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+bGVuZ3RoOyBpKyspIHsKKwkJaWYgKGNoYW5uZWwtPnJlc2VydmVfYXJyICE9IE5VTEwpCisJCQljaGFubmVsLT5yZXNlcnZlX2FycltpXSA9IGNoYW5uZWwtPm9yaWdfYXJyW2ldOworCQlpZiAoY2hhbm5lbC0+ZnJlZV9hcnIgIT0gTlVMTCkKKwkJCWNoYW5uZWwtPmZyZWVfYXJyW2ldID0gTlVMTDsKKwkJaWYgKGNoYW5uZWwtPndvcmtfYXJyICE9IE5VTEwpCisJCQljaGFubmVsLT53b3JrX2FycltpXSA9IE5VTEw7CisJfQorCWNoYW5uZWwtPmZyZWVfcHRyID0gY2hhbm5lbC0+bGVuZ3RoOworCWNoYW5uZWwtPnJlc2VydmVfcHRyID0gY2hhbm5lbC0+bGVuZ3RoOworCWNoYW5uZWwtPnJlc2VydmVfdG9wID0gMDsKKwljaGFubmVsLT5wb3N0X2luZGV4ID0gMDsKKwljaGFubmVsLT5jb21wbF9pbmRleCA9IDA7CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfcGNpX2VfaW5pdAorICogSW5pdGlhbGl6ZSBjZXJ0YWluIFBDSS9QQ0ktWCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICogd2l0aCByZWNvbW1lbmRlZCB2YWx1ZXMuIFNhdmUgY29uZmlnIHNwYWNlIGZvciBmdXR1cmUgaHcgcmVzZXRzLgorICovCit2b2lkCitfX3Z4Z2VfaHdfZGV2aWNlX3BjaV9lX2luaXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXUxNiBjbWQgPSAwOworCisJLyogU2V0IHRoZSBQRXJyIFJlcGNvbnNlIGJpdCBhbmQgU0VSUiBpbiBQQ0kgY29tbWFuZCByZWdpc3Rlci4gKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChobGRldi0+cGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCWNtZCB8PSAweDE0MDsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaGxkZXYtPnBkZXYsIFBDSV9DT01NQU5ELCBjbWQpOworCisJcGNpX3NhdmVfc3RhdGUoaGxkZXYtPnBkZXYpOworCisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsCisgKiBXaWxsIHBvbGwgY2VydGFpbiByZWdpc3RlciBmb3Igc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lLgorICogV2lsbCBwb2xsIHVudGlsIG1hc2tlZCBiaXQgaXMgbm90IGNsZWFyZWQuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbCh2b2lkIF9faW9tZW0gKnJlZywgdTY0IG1hc2ssIHUzMiBtYXhfbWlsbGlzKQoreworCXU2NCB2YWw2NDsKKwl1MzIgaSA9IDA7CisJZW51bSB2eGdlX2h3X3N0YXR1cyByZXQgPSBWWEdFX0hXX0ZBSUw7CisKKwl1ZGVsYXkoMTApOworCisJZG8geworCQl2YWw2NCA9IHJlYWRxKHJlZyk7CisJCWlmICghKHZhbDY0ICYgbWFzaykpCisJCQlyZXR1cm4gVlhHRV9IV19PSzsKKwkJdWRlbGF5KDEwMCk7CisJfSB3aGlsZSAoKytpIDw9IDkpOworCisJaSA9IDA7CisJZG8geworCQl2YWw2NCA9IHJlYWRxKHJlZyk7CisJCWlmICghKHZhbDY0ICYgbWFzaykpCisJCQlyZXR1cm4gVlhHRV9IV19PSzsKKwkJbWRlbGF5KDEpOworCX0gd2hpbGUgKCsraSA8PSBtYXhfbWlsbGlzKTsKKworCXJldHVybiByZXQ7Cit9CisKKyAvKiBfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX3Jlc2V0X2luX3Byb2dfY2hlY2sgLSBDaGVjayBpZiB2cGF0aCByZXNldAorICogaW4gcHJvZ3Jlc3MKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgdGhlIHZwYXRoIHJlc2V0IGluIHByb2dyZXNzIHJlZ2lzdGVyIGlzIHR1cm5lZCB6ZXJvCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfdnBhdGhfcmVzZXRfaW5fcHJvZ19jaGVjayh1NjQgX19pb21lbSAqdnBhdGhfcnN0X2luX3Byb2cpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsKHZwYXRoX3JzdF9pbl9wcm9nLAorCQkJVlhHRV9IV19WUEFUSF9SU1RfSU5fUFJPR19WUEFUSF9SU1RfSU5fUFJPRygweDFmZmZmKSwKKwkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfdG9jX2dldAorICogVGhpcyByb3V0aW5lIHNldHMgdGhlIHN3YXBwZXIgYW5kIHJlYWRzIHRoZSB0b2MgcG9pbnRlciBhbmQgcmV0dXJucyB0aGUKKyAqIG1lbW9yeSBtYXBwZWQgYWRkcmVzcyBvZiB0aGUgdG9jCisgKi8KK3N0cnVjdCB2eGdlX2h3X3RvY19yZWcgX19pb21lbSAqCitfX3Z4Z2VfaHdfZGV2aWNlX3RvY19nZXQodm9pZCBfX2lvbWVtICpiYXIwKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgdnhnZV9od190b2NfcmVnIF9faW9tZW0gKnRvYyA9IE5VTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwlzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKmxlZ2FjeV9yZWcgPQorCQkoc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyBfX2lvbWVtICopYmFyMDsKKworCXN0YXR1cyA9IF9fdnhnZV9od19sZWdhY3lfc3dhcHBlcl9zZXQobGVnYWN5X3JlZyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9CXJlYWRxKCZsZWdhY3lfcmVnLT50b2NfZmlyc3RfcG9pbnRlcik7CisJdG9jID0gKHN0cnVjdCB2eGdlX2h3X3RvY19yZWcgX19pb21lbSAqKShiYXIwK3ZhbDY0KTsKK2V4aXQ6CisJcmV0dXJuIHRvYzsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfcmVnX2FkZHJfZ2V0CisgKiBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgc3dhcHBlciBhbmQgcmVhZHMgdGhlIHRvYyBwb2ludGVyIGFuZCBpbml0aWFsaXplcyB0aGUKKyAqIHJlZ2lzdGVyIGxvY2F0aW9uIHBvaW50ZXJzIGluIHRoZSBkZXZpY2Ugb2JqZWN0LiBJdCB3YWl0cyB1bnRpbCB0aGUgcmljIGlzCisgKiBjb21wbGV0ZWQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9yZWdfYWRkcl9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXU2NCB2YWw2NDsKKwl1MzIgaTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlobGRldi0+bGVnYWN5X3JlZyA9IChzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKilobGRldi0+YmFyMDsKKworCWhsZGV2LT50b2NfcmVnID0gX192eGdlX2h3X2RldmljZV90b2NfZ2V0KGhsZGV2LT5iYXIwKTsKKwlpZiAoaGxkZXYtPnRvY19yZWcgID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCQlnb3RvIGV4aXQ7CisJfQorCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPnRvY19yZWctPnRvY19jb21tb25fcG9pbnRlcik7CisJaGxkZXYtPmNvbW1vbl9yZWcgPQorCShzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnIF9faW9tZW0gKikoaGxkZXYtPmJhcjAgKyB2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+dG9jX3JlZy0+dG9jX21ycGNpbV9wb2ludGVyKTsKKwlobGRldi0+bXJwY2ltX3JlZyA9CisJCShzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnIF9faW9tZW0gKikoaGxkZXYtPmJhcjAgKyB2YWw2NCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19USVRBTl9TUlBDSU1fUkVHX1NQQUNFUzsgaSsrKSB7CisJCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT50b2NfcmVnLT50b2Nfc3JwY2ltX3BvaW50ZXJbaV0pOworCQlobGRldi0+c3JwY2ltX3JlZ1tpXSA9CisJCQkoc3RydWN0IHZ4Z2VfaHdfc3JwY2ltX3JlZyBfX2lvbWVtICopCisJCQkJKGhsZGV2LT5iYXIwICsgdmFsNjQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX1RJVEFOX1ZQTUdNVF9SRUdfU1BBQ0VTOyBpKyspIHsKKwkJdmFsNjQgPSByZWFkcSgmaGxkZXYtPnRvY19yZWctPnRvY192cG1nbXRfcG9pbnRlcltpXSk7CisJCWhsZGV2LT52cG1nbXRfcmVnW2ldID0KKwkJKHN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcgX19pb21lbSAqKShobGRldi0+YmFyMCArIHZhbDY0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19USVRBTl9WUEFUSF9SRUdfU1BBQ0VTOyBpKyspIHsKKwkJdmFsNjQgPSByZWFkcSgmaGxkZXYtPnRvY19yZWctPnRvY192cGF0aF9wb2ludGVyW2ldKTsKKwkJaGxkZXYtPnZwYXRoX3JlZ1tpXSA9CisJCQkoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKikKKwkJCQkoaGxkZXYtPmJhcjAgKyB2YWw2NCk7CisJfQorCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPnRvY19yZWctPnRvY19rZGZjKTsKKworCXN3aXRjaCAoVlhHRV9IV19UT0NfR0VUX0tERkNfSU5JVElBTF9CSVIodmFsNjQpKSB7CisJY2FzZSAwOgorCQlobGRldi0+a2RmYyA9ICh1OCBfX2lvbWVtICopKGhsZGV2LT5iYXIwICsKKwkJCVZYR0VfSFdfVE9DX0dFVF9LREZDX0lOSVRJQUxfT0ZGU0VUKHZhbDY0KSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaGxkZXYtPmtkZmMgPSAodTggX19pb21lbSAqKShobGRldi0+YmFyMSArCisJCQlWWEdFX0hXX1RPQ19HRVRfS0RGQ19JTklUSUFMX09GRlNFVCh2YWw2NCkpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWhsZGV2LT5rZGZjID0gKHU4IF9faW9tZW0gKikoaGxkZXYtPmJhcjIgKworCQkJVlhHRV9IV19UT0NfR0VUX0tERkNfSU5JVElBTF9PRkZTRVQodmFsNjQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV92cGF0aF9yZXNldF9pbl9wcm9nX2NoZWNrKAorCQkJKHU2NCBfX2lvbWVtICopJmhsZGV2LT5jb21tb25fcmVnLT52cGF0aF9yc3RfaW5fcHJvZyk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2lkX2dldAorICogVGhpcyByb3V0aW5lIHJldHVybnMgc2V0cyB0aGUgZGV2aWNlIGlkIGFuZCByZXZpc2lvbiBudW1iZXJzIGludG8gdGhlIGRldmljZQorICogc3RydWN0dXJlCisgKi8KK3ZvaWQgX192eGdlX2h3X2RldmljZV9pZF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXU2NCB2YWw2NDsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aXRhbl9hc2ljX2lkKTsKKwlobGRldi0+ZGV2aWNlX2lkID0KKwkJKHUxNilWWEdFX0hXX1RJVEFOX0FTSUNfSURfR0VUX0lOSVRJQUxfREVWSUNFX0lEKHZhbDY0KTsKKworCWhsZGV2LT5tYWpvcl9yZXZpc2lvbiA9CisJCSh1OClWWEdFX0hXX1RJVEFOX0FTSUNfSURfR0VUX0lOSVRJQUxfTUFKT1JfUkVWSVNJT04odmFsNjQpOworCisJaGxkZXYtPm1pbm9yX3JldmlzaW9uID0KKwkJKHU4KVZYR0VfSFdfVElUQU5fQVNJQ19JRF9HRVRfSU5JVElBTF9NSU5PUl9SRVZJU0lPTih2YWw2NCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2FjY2Vzc19yaWdodHNfZ2V0OiBHZXQgQWNjZXNzIFJpZ2h0cyBvZiB0aGUgZHJpdmVyCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgQWNjZXNzIFJpZ2h0cyBvZiB0aGUgZHJpdmVyCisgKi8KK3N0YXRpYyB1MzIKK19fdnhnZV9od19kZXZpY2VfYWNjZXNzX3JpZ2h0c19nZXQodTMyIGhvc3RfdHlwZSwgdTMyIGZ1bmNfaWQpCit7CisJdTMyIGFjY2Vzc19yaWdodHMgPSBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfVlBBVEg7CisKKwlzd2l0Y2ggKGhvc3RfdHlwZSkgeworCWNhc2UgVlhHRV9IV19OT19NUl9OT19TUl9OT1JNQUxfRlVOQ1RJT046CisJCWlmIChmdW5jX2lkID09IDApIHsKKwkJCWFjY2Vzc19yaWdodHMgfD0gVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSB8CisJCQkJCVZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9TUlBDSU07CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX01SX05PX1NSX1ZIMF9CQVNFX0ZVTkNUSU9OOgorCQlhY2Nlc3NfcmlnaHRzIHw9IFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9NUlBDSU0gfAorCQkJCVZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9TUlBDSU07CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19OT19NUl9TUl9WSDBfRlVOQ1RJT04wOgorCQlhY2Nlc3NfcmlnaHRzIHw9IFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9NUlBDSU0gfAorCQkJCVZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9TUlBDSU07CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19OT19NUl9TUl9WSDBfVklSVFVBTF9GVU5DVElPTjoKKwljYXNlIFZYR0VfSFdfU1JfVkhfVklSVFVBTF9GVU5DVElPTjoKKwljYXNlIFZYR0VfSFdfTVJfU1JfVkgwX0lOVkFMSURfQ09ORklHOgorCQlicmVhazsKKwljYXNlIFZYR0VfSFdfU1JfVkhfRlVOQ1RJT04wOgorCWNhc2UgVlhHRV9IV19WSF9OT1JNQUxfRlVOQ1RJT046CisJCWFjY2Vzc19yaWdodHMgfD0gVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1NSUENJTTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGFjY2Vzc19yaWdodHM7Cit9CisvKgorICogX192eGdlX2h3X2RldmljZV9ob3N0X2luZm9fZ2V0CisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgaG9zdCB0eXBlIGFzc2lnbm1lbnRzCisgKi8KK3ZvaWQgX192eGdlX2h3X2RldmljZV9ob3N0X2luZm9fZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1NjQgdmFsNjQ7CisJdTMyIGk7CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+Y29tbW9uX3JlZy0+aG9zdF90eXBlX2Fzc2lnbm1lbnRzKTsKKworCWhsZGV2LT5ob3N0X3R5cGUgPQorCSAgICh1MzIpVlhHRV9IV19IT1NUX1RZUEVfQVNTSUdOTUVOVFNfR0VUX0hPU1RfVFlQRV9BU1NJR05NRU5UUyh2YWw2NCk7CisKKwlobGRldi0+dnBhdGhfYXNzaWdubWVudHMgPSByZWFkcSgmaGxkZXYtPmNvbW1vbl9yZWctPnZwYXRoX2Fzc2lnbm1lbnRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisKKwkJaGxkZXYtPmZ1bmNfaWQgPQorCQkJX192eGdlX2h3X3ZwYXRoX2Z1bmNfaWRfZ2V0KGksIGhsZGV2LT52cG1nbXRfcmVnW2ldKTsKKworCQlobGRldi0+YWNjZXNzX3JpZ2h0cyA9IF9fdnhnZV9od19kZXZpY2VfYWNjZXNzX3JpZ2h0c19nZXQoCisJCQlobGRldi0+aG9zdF90eXBlLCBobGRldi0+ZnVuY19pZCk7CisKKwkJaGxkZXYtPmZpcnN0X3ZwX2lkID0gaTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X3ZlcmlmeV9wY2lfZV9pbmZvIC0gVmFsaWRhdGUgdGhlIHBjaS1lIGxpbmsgcGFyYW1ldGVycyBzdWNoIGFzCisgKiBsaW5rIHdpZHRoIGFuZCBzaWduYWxsaW5nIHJhdGUuCisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdmVyaWZ5X3BjaV9lX2luZm8oc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCWludCBleHBfY2FwOworCXUxNiBsbms7CisKKwkvKiBHZXQgdGhlIG5lZ290aWF0ZWQgbGluayB3aWR0aCBhbmQgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlICovCisJZXhwX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaGxkZXYtPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChobGRldi0+cGRldiwgZXhwX2NhcCArIFBDSV9FWFBfTE5LU1RBLCAmbG5rKTsKKworCWlmICgobG5rICYgUENJX0VYUF9MTktTVEFfQ0xTKSAhPSAxKQorCQlyZXR1cm4gVlhHRV9IV19FUlJfSU5WQUxJRF9QQ0lfSU5GTzsKKworCXN3aXRjaCAoKGxuayAmIFBDSV9FWFBfTE5LU1RBX05MVykgPj4gNCkgeworCWNhc2UgUENJRV9MTktfV0lEVEhfUkVTUlY6CisJY2FzZSBQQ0lFX0xOS19YMToKKwljYXNlIFBDSUVfTE5LX1gyOgorCWNhc2UgUENJRV9MTktfWDQ6CisJY2FzZSBQQ0lFX0xOS19YODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFZYR0VfSFdfRVJSX0lOVkFMSURfUENJX0lORk87CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2lzX3ByaXZpbGFnZWQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCWlmICgoaGxkZXYtPmhvc3RfdHlwZSA9PSBWWEdFX0hXX05PX01SX05PX1NSX05PUk1BTF9GVU5DVElPTiB8fAorCWhsZGV2LT5ob3N0X3R5cGUgPT0gVlhHRV9IV19NUl9OT19TUl9WSDBfQkFTRV9GVU5DVElPTiB8fAorCWhsZGV2LT5ob3N0X3R5cGUgPT0gVlhHRV9IV19OT19NUl9TUl9WSDBfRlVOQ1RJT04wKSAmJgorCShobGRldi0+ZnVuY19pZCA9PSAwKSkKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisJZWxzZQorCQlyZXR1cm4gVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OOworfQorCisvKgorICogdnhnZV9od193cnJfcmViYWxhbmNlIC0gUmViYWxhbmNlIHRoZSBSWF9XUlIgYW5kIEtERkNfV1JSIGNhbGFuZGFycy4KKyAqIFJlYmFsYW5jZSB0aGUgUlhfV1JSIGFuZCBLREZDX1dSUiBjYWxhbmRhcnMuCisgKi8KK3N0YXRpYyBlbnVtCit2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3dycl9yZWJhbGFuY2Uoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXU2NCB2YWw2NDsKKwl1MzIgd3JyX3N0YXRlc1tWWEdFX0hXX1dFSUdIVEVEX1JSX1NFUlZJQ0VfU1RBVEVTXTsKKwl1MzIgaSwgaiwgaG93X29mdGVuID0gMTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2lzX3ByaXZpbGFnZWQoaGxkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJLyogUmVzZXQgdGhlIHByaW9yaXRpZXMgYXNzaWduZWQgdG8gdGhlIFdSUiBhcmJpdHJhdGlvbgorCXBoYXNlcyBmb3IgdGhlIHJlY2VpdmUgdHJhZmZpYyAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX1dSUl9SSU5HX0NPVU5UOyBpKyspCisJCXdyaXRlcSgwLCAoKCZobGRldi0+bXJwY2ltX3JlZy0+cnhfd19yb3VuZF9yb2Jpbl8wKSArIGkpKTsKKworCS8qIFJlc2V0IHRoZSB0cmFuc21pdCBGSUZPIHNlcnZpY2luZyBjYWxlbmRhciBmb3IgRklGT3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19XUlJfRklGT19DT1VOVDsgaSsrKSB7CisJCXdyaXRlcSgwLCAoKCZobGRldi0+bXJwY2ltX3JlZy0+a2RmY193X3JvdW5kX3JvYmluXzApICsgaSkpOworCQl3cml0ZXEoMCwgKCgmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfd19yb3VuZF9yb2Jpbl8yMCkgKyBpKSk7CisJfQorCisJLyogQXNzaWduIFdSUiBwcmlvcml0eSAgMCBmb3IgYWxsIEZJRk9zICovCisJZm9yIChpID0gMTsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQl3cml0ZXEoVlhHRV9IV19LREZDX0ZJRk9fMF9DVFJMX1dSUl9OVU1CRVIoMCksCisJCQkJKCgmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfZmlmb18wX2N0cmwpICArIGkpKTsKKworCQl3cml0ZXEoVlhHRV9IV19LREZDX0ZJRk9fMTdfQ1RSTF9XUlJfTlVNQkVSKDApLAorCQkJKCgmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfZmlmb18xN19jdHJsKSArIGkpKTsKKwl9CisKKwkvKiBSZXNldCB0byBzZXJ2aWNlIG5vbi1vZmZsb2FkIGRvb3JiZWxscyAqLworCXdyaXRlcSgwLCAmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfZW50cnlfdHlwZV9zZWxfMCk7CisJd3JpdGVxKDAsICZobGRldi0+bXJwY2ltX3JlZy0+a2RmY19lbnRyeV90eXBlX3NlbF8xKTsKKworCS8qIFNldCBwcmlvcml0eSAwIHRvIGFsbCByZWNlaXZlIHF1ZXVlcyAqLworCXdyaXRlcSgwLCAmaGxkZXYtPm1ycGNpbV9yZWctPnJ4X3F1ZXVlX3ByaW9yaXR5XzApOworCXdyaXRlcSgwLCAmaGxkZXYtPm1ycGNpbV9yZWctPnJ4X3F1ZXVlX3ByaW9yaXR5XzEpOworCXdyaXRlcSgwLCAmaGxkZXYtPm1ycGNpbV9yZWctPnJ4X3F1ZXVlX3ByaW9yaXR5XzIpOworCisJLyogSW5pdGlhbGl6ZSBhbGwgdGhlIHNsb3RzIGFzIHVudXNlZCAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX1dFSUdIVEVEX1JSX1NFUlZJQ0VfU1RBVEVTOyBpKyspCisJCXdycl9zdGF0ZXNbaV0gPSAtMTsKKworCS8qIFByZXBhcmUgdGhlIEZpZm8gc2VydmljZSBzdGF0ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCFobGRldi0+Y29uZmlnLnZwX2NvbmZpZ1tpXS5taW5fYmFuZHdpZHRoKQorCQkJY29udGludWU7CisKKwkJaG93X29mdGVuID0gVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYIC8KKwkJCQlobGRldi0+Y29uZmlnLnZwX2NvbmZpZ1tpXS5taW5fYmFuZHdpZHRoOworCQlpZiAoaG93X29mdGVuKSB7CisKKwkJCWZvciAoaiA9IDA7IGogPCBWWEdFX0hXX1dSUl9GSUZPX1NFUlZJQ0VfU1RBVEVTOykgeworCQkJCWlmICh3cnJfc3RhdGVzW2pdID09IC0xKSB7CisJCQkJCXdycl9zdGF0ZXNbal0gPSBpOworCQkJCQkvKiBNYWtlIHN1cmUgZWFjaCBmaWZvIGlzIHNlcnZpY2VkCisJCQkJCSAqIGF0bGVhc3Qgb25jZSAqLworCQkJCQlpZiAoaSA9PSBqKQorCQkJCQkJaiArPSBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOworCQkJCQllbHNlCisJCQkJCQlqICs9IGhvd19vZnRlbjsKKwkJCQl9IGVsc2UKKwkJCQkJaisrOworCQkJfQorCQl9CisJfQorCisJLyogRmlsbCB0aGUgdW51c2VkIHNsb3RzIHdpdGggMCAqLworCWZvciAoaiA9IDA7IGogPCBWWEdFX0hXX1dFSUdIVEVEX1JSX1NFUlZJQ0VfU1RBVEVTOyBqKyspIHsKKwkJaWYgKHdycl9zdGF0ZXNbal0gPT0gLTEpCisJCQl3cnJfc3RhdGVzW2pdID0gMDsKKwl9CisKKwkvKiBBc3NpZ24gV1JSIHByaW9yaXR5IG51bWJlciBmb3IgRklGT3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCXdyaXRlcShWWEdFX0hXX0tERkNfRklGT18wX0NUUkxfV1JSX05VTUJFUihpKSwKKwkJCQkoKCZobGRldi0+bXJwY2ltX3JlZy0+a2RmY19maWZvXzBfY3RybCkgKyBpKSk7CisKKwkJd3JpdGVxKFZYR0VfSFdfS0RGQ19GSUZPXzE3X0NUUkxfV1JSX05VTUJFUihpKSwKKwkJCSgoJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX2ZpZm9fMTdfY3RybCkgKyBpKSk7CisJfQorCisJLyogTW9kaWZ5IHRoZSBzZXJ2aWNpbmcgYWxnb3JpdGhtIGFwcGxpZWQgdG8gdGhlIDMgdHlwZXMgb2YgZG9vcmJlbGxzLgorCWkuZSwgbm9uZS1vZmZsb2FkLCBtZXNzYWdlIGFuZCBvZmZsb2FkICovCisJd3JpdGVxKFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl8wKDApIHwKKwkJCQlWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfMSgwKSB8CisJCQkJVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzIoMCkgfAorCQkJCVZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl8zKDApIHwKKwkJCQlWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfNCgxKSB8CisJCQkJVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzUoMCkgfAorCQkJCVZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl82KDApIHwKKwkJCQlWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfNygwKSwKKwkJCQkmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfZW50cnlfdHlwZV9zZWxfMCk7CisKKwl3cml0ZXEoVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzFfTlVNQkVSXzgoMSksCisJCQkJJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX2VudHJ5X3R5cGVfc2VsXzEpOworCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBWWEdFX0hXX1dSUl9GSUZPX0NPVU5UOyBpKyspIHsKKworCQl2YWw2NCA9IFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzAod3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfMSh3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl8yKHdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzMod3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfNCh3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl81KHdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzYod3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfNyh3cnJfc3RhdGVzW2orK10pOworCisJCXdyaXRlcSh2YWw2NCwgKCZobGRldi0+bXJwY2ltX3JlZy0+a2RmY193X3JvdW5kX3JvYmluXzAgKyBpKSk7CisJCXdyaXRlcSh2YWw2NCwgKCZobGRldi0+bXJwY2ltX3JlZy0+a2RmY193X3JvdW5kX3JvYmluXzIwICsgaSkpOworCX0KKworCS8qIFNldCB1cCB0aGUgcHJpb3JpdGllcyBhc3NpZ25lZCB0byByZWNlaXZlIHF1ZXVlcyAqLworCXdyaXRlcShWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfMCgwKSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfMSgxKSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfMigyKSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfMygzKSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfNCg0KSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfNSg1KSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfNig2KSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfNyg3KSwKKwkJCSZobGRldi0+bXJwY2ltX3JlZy0+cnhfcXVldWVfcHJpb3JpdHlfMCk7CisKKwl3cml0ZXEoVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzgoOCkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzkoOSkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzEwKDEwKSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTEoMTEpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xMigxMikgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzEzKDEzKSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTQoMTQpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xNSgxNSksCisJCQkmaGxkZXYtPm1ycGNpbV9yZWctPnJ4X3F1ZXVlX3ByaW9yaXR5XzEpOworCisJd3JpdGVxKFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMl9SWF9RX05VTUJFUl8xNigxNiksCisJCQkJJmhsZGV2LT5tcnBjaW1fcmVnLT5yeF9xdWV1ZV9wcmlvcml0eV8yKTsKKworCS8qIEluaXRpYWxpemUgYWxsIHRoZSBzbG90cyBhcyB1bnVzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19XRUlHSFRFRF9SUl9TRVJWSUNFX1NUQVRFUzsgaSsrKQorCQl3cnJfc3RhdGVzW2ldID0gLTE7CisKKwkvKiBQcmVwYXJlIHRoZSBSaW5nIHNlcnZpY2Ugc3RhdGVzICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghaGxkZXYtPmNvbmZpZy52cF9jb25maWdbaV0ubWluX2JhbmR3aWR0aCkKKwkJCWNvbnRpbnVlOworCisJCWhvd19vZnRlbiA9IFZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWCAvCisJCQkJaGxkZXYtPmNvbmZpZy52cF9jb25maWdbaV0ubWluX2JhbmR3aWR0aDsKKworCQlpZiAoaG93X29mdGVuKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgVlhHRV9IV19XUlJfUklOR19TRVJWSUNFX1NUQVRFUzspIHsKKwkJCQlpZiAod3JyX3N0YXRlc1tqXSA9PSAtMSkgeworCQkJCQl3cnJfc3RhdGVzW2pdID0gaTsKKwkJCQkJLyogTWFrZSBzdXJlIGVhY2ggcmluZyBpcworCQkJCQkgKiBzZXJ2aWNlZCBhdGxlYXN0IG9uY2UgKi8KKwkJCQkJaWYgKGkgPT0gaikKKwkJCQkJCWogKz0gVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsKKwkJCQkJZWxzZQorCQkJCQkJaiArPSBob3dfb2Z0ZW47CisJCQkJfSBlbHNlCisJCQkJCWorKzsKKwkJCX0KKwkJfQorCX0KKworCS8qIEZpbGwgdGhlIHVudXNlZCBzbG90cyB3aXRoIDAgKi8KKwlmb3IgKGogPSAwOyBqIDwgVlhHRV9IV19XRUlHSFRFRF9SUl9TRVJWSUNFX1NUQVRFUzsgaisrKSB7CisJCWlmICh3cnJfc3RhdGVzW2pdID09IC0xKQorCQkJd3JyX3N0YXRlc1tqXSA9IDA7CisJfQorCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBWWEdFX0hXX1dSUl9SSU5HX0NPVU5UOyBpKyspIHsKKwkJdmFsNjQgPSAgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU18wKAorCQkJCXdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9ICBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzEoCisJCQkJd3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfMigKKwkJCQl3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSAgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU18zKAorCQkJCXdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9ICBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzQoCisJCQkJd3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfNSgKKwkJCQl3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSAgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU182KAorCQkJCXdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9ICBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzcoCisJCQkJd3JyX3N0YXRlc1tqKytdKTsKKworCQl3cml0ZXEodmFsNjQsICgoJmhsZGV2LT5tcnBjaW1fcmVnLT5yeF93X3JvdW5kX3JvYmluXzApICsgaSkpOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfaW5pdGlhbGl6ZQorICogSW5pdGlhbGl6ZSBUaXRhbi1WIGhhcmR3YXJlLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19kZXZpY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJLyogVmFsaWRhdGUgdGhlIHBjaS1lIGxpbmsgd2lkdGggYW5kIHNwZWVkICovCisJc3RhdHVzID0gX192eGdlX2h3X3ZlcmlmeV9wY2lfZV9pbmZvKGhsZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZ4Z2VfaHdfd3JyX3JlYmFsYW5jZShobGRldik7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19kZXZpY2VfaHdfaW5mb19nZXQgLSBHZXQgdGhlIGh3IGluZm9ybWF0aW9uCisgKiBSZXR1cm5zIHRoZSB2cGF0aCBtYXNrIHRoYXQgaGFzIHRoZSBiaXRzIHNldCBmb3IgZWFjaCB2cGF0aCBhbGxvY2F0ZWQKKyAqIGZvciB0aGUgZHJpdmVyLCBGVyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCB0aGUgZmlyc3QgbWFjIGFkZHJlc3NlIGZvcgorICogZWFjaCB2cGF0aAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fZGV2aW5pdAordnhnZV9od19kZXZpY2VfaHdfaW5mb19nZXQodm9pZCBfX2lvbWVtICpiYXIwLAorCQkJICAgc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gKmh3X2luZm8pCit7CisJdTMyIGk7CisJdTY0IHZhbDY0OworCXN0cnVjdCB2eGdlX2h3X3RvY19yZWcgX19pb21lbSAqdG9jOworCXN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcgX19pb21lbSAqbXJwY2ltX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnIF9faW9tZW0gKmNvbW1vbl9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIF9faW9tZW0gKnZwbWdtdF9yZWc7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwltZW1zZXQoaHdfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvKSk7CisKKwl0b2MgPSBfX3Z4Z2VfaHdfZGV2aWNlX3RvY19nZXQoYmFyMCk7CisJaWYgKHRvYyA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0NSSVRJQ0FMOworCQlnb3RvIGV4aXQ7CisJfQorCisJdmFsNjQgPSByZWFkcSgmdG9jLT50b2NfY29tbW9uX3BvaW50ZXIpOworCWNvbW1vbl9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZyBfX2lvbWVtICopKGJhcjAgKyB2YWw2NCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX3Jlc2V0X2luX3Byb2dfY2hlY2soCisJCSh1NjQgX19pb21lbSAqKSZjb21tb25fcmVnLT52cGF0aF9yc3RfaW5fcHJvZyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlod19pbmZvLT52cGF0aF9tYXNrID0gcmVhZHEoJmNvbW1vbl9yZWctPnZwYXRoX2Fzc2lnbm1lbnRzKTsKKworCXZhbDY0ID0gcmVhZHEoJmNvbW1vbl9yZWctPmhvc3RfdHlwZV9hc3NpZ25tZW50cyk7CisKKwlod19pbmZvLT5ob3N0X3R5cGUgPQorCSAgICh1MzIpVlhHRV9IV19IT1NUX1RZUEVfQVNTSUdOTUVOVFNfR0VUX0hPU1RfVFlQRV9BU1NJR05NRU5UUyh2YWw2NCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCEoKGh3X2luZm8tPnZwYXRoX21hc2spICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXZhbDY0ID0gcmVhZHEoJnRvYy0+dG9jX3ZwbWdtdF9wb2ludGVyW2ldKTsKKworCQl2cG1nbXRfcmVnID0gKHN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcgX19pb21lbSAqKQorCQkJCShiYXIwICsgdmFsNjQpOworCisJCWh3X2luZm8tPmZ1bmNfaWQgPSBfX3Z4Z2VfaHdfdnBhdGhfZnVuY19pZF9nZXQoaSwgdnBtZ210X3JlZyk7CisJCWlmIChfX3Z4Z2VfaHdfZGV2aWNlX2FjY2Vzc19yaWdodHNfZ2V0KGh3X2luZm8tPmhvc3RfdHlwZSwKKwkJCWh3X2luZm8tPmZ1bmNfaWQpICYKKwkJCVZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9NUlBDSU0pIHsKKworCQkJdmFsNjQgPSByZWFkcSgmdG9jLT50b2NfbXJwY2ltX3BvaW50ZXIpOworCisJCQltcnBjaW1fcmVnID0gKHN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcgX19pb21lbSAqKQorCQkJCQkoYmFyMCArIHZhbDY0KTsKKworCQkJd3JpdGVxKDAsICZtcnBjaW1fcmVnLT54Z21hY19nZW5fZndfbWVtb19tYXNrKTsKKwkJCXdtYigpOworCQl9CisKKwkJdmFsNjQgPSByZWFkcSgmdG9jLT50b2NfdnBhdGhfcG9pbnRlcltpXSk7CisKKwkJdnBhdGhfcmVnID0gKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICopKGJhcjAgKyB2YWw2NCk7CisKKwkJaHdfaW5mby0+ZnVuY3Rpb25fbW9kZSA9CisJCQlfX3Z4Z2VfaHdfdnBhdGhfcGNpX2Z1bmNfbW9kZV9nZXQoaSwgdnBhdGhfcmVnKTsKKworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfZndfdmVyX2dldChpLCB2cGF0aF9yZWcsIGh3X2luZm8pOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisKKwkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX2NhcmRfaW5mb19nZXQoaSwgdnBhdGhfcmVnLCBod19pbmZvKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoISgoaHdfaW5mby0+dnBhdGhfbWFzaykgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisKKwkJdmFsNjQgPSByZWFkcSgmdG9jLT50b2NfdnBhdGhfcG9pbnRlcltpXSk7CisJCXZwYXRoX3JlZyA9IChzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqKShiYXIwICsgdmFsNjQpOworCisJCXN0YXR1cyA9ICBfX3Z4Z2VfaHdfdnBhdGhfYWRkcl9nZXQoaSwgdnBhdGhfcmVnLAorCQkJCWh3X2luZm8tPm1hY19hZGRyc1tpXSwKKwkJCQlod19pbmZvLT5tYWNfYWRkcl9tYXNrc1tpXSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBUaXRhbiBkZXZpY2UuCisgKiBJbml0aWFsaXplIFRpdGFuIGRldmljZS4gTm90ZSB0aGF0IGFsbCB0aGUgYXJndW1lbnRzIG9mIHRoaXMgcHVibGljIEFQSQorICogYXJlICdJTicsIGluY2x1ZGluZyBAaGxkZXYuIERyaXZlciBjb29wZXJhdGVzIHdpdGgKKyAqIE9TIHRvIGZpbmQgbmV3IFRpdGFuIGRldmljZSwgbG9jYXRlIGl0cyBQQ0kgYW5kIG1lbW9yeSBzcGFjZXMuCisgKgorICogV2hlbiBkb25lLCB0aGUgZHJpdmVyIGFsbG9jYXRlcyBzaXplb2Yoc3RydWN0IF9fdnhnZV9od19kZXZpY2UpIGJ5dGVzIGZvciBIVworICogdG8gZW5hYmxlIHRoZSBsYXR0ZXIgdG8gcGVyZm9ybSBUaXRhbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX2RldmluaXQKK3Z4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKipkZXZoLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9hdHRyICphdHRyLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKmRldmljZV9jb25maWcpCit7CisJdTMyIGk7CisJdTMyIG5ibG9ja3MgPSAwOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IE5VTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9jb25maWdfY2hlY2soZGV2aWNlX2NvbmZpZyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKQorCQkJdm1hbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od19kZXZpY2UpKTsKKwlpZiAoaGxkZXYgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtc2V0KGhsZGV2LCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od19kZXZpY2UpKTsKKwlobGRldi0+bWFnaWMgPSBWWEdFX0hXX0RFVklDRV9NQUdJQzsKKworCXZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldChobGRldiwgVlhHRV9FUlIsIFZYR0VfQ09NUE9ORU5UX0FMTCk7CisKKwkvKiBhcHBseSBjb25maWcgKi8KKwltZW1jcHkoJmhsZGV2LT5jb25maWcsIGRldmljZV9jb25maWcsCisJCXNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnKSk7CisKKwlobGRldi0+YmFyMCA9IGF0dHItPmJhcjA7CisJaGxkZXYtPmJhcjEgPSBhdHRyLT5iYXIxOworCWhsZGV2LT5iYXIyID0gYXR0ci0+YmFyMjsKKwlobGRldi0+cGRldiA9IGF0dHItPnBkZXY7CisKKwlobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX3VwID0gYXR0ci0+dWxkX2NhbGxiYWNrcy5saW5rX3VwOworCWhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfZG93biA9IGF0dHItPnVsZF9jYWxsYmFja3MubGlua19kb3duOworCWhsZGV2LT51bGRfY2FsbGJhY2tzLmNyaXRfZXJyID0gYXR0ci0+dWxkX2NhbGxiYWNrcy5jcml0X2VycjsKKworCV9fdnhnZV9od19kZXZpY2VfcGNpX2VfaW5pdChobGRldik7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX3JlZ19hZGRyX2dldChobGRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisJX192eGdlX2h3X2RldmljZV9pZF9nZXQoaGxkZXYpOworCisJX192eGdlX2h3X2RldmljZV9ob3N0X2luZm9fZ2V0KGhsZGV2KTsKKworCS8qIEluY3JlbWVudGluZyBmb3Igc3RhdHMgYmxvY2tzICovCisJbmJsb2NrcysrOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKGhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyAmIHZ4Z2VfbUJJVChpKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcuZW5hYmxlID09CisJCQlWWEdFX0hXX1JJTkdfRU5BQkxFKQorCQkJbmJsb2NrcyArPSBkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5yaW5nX2Jsb2NrczsKKworCQlpZiAoZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uZW5hYmxlID09CisJCQlWWEdFX0hXX0ZJRk9fRU5BQkxFKQorCQkJbmJsb2NrcyArPSBkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5maWZvX2Jsb2NrczsKKwkJbmJsb2NrcysrOworCX0KKworCWlmIChfX3Z4Z2VfaHdfYmxvY2twb29sX2NyZWF0ZShobGRldiwKKwkJJmhsZGV2LT5ibG9ja19wb29sLAorCQlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX2luaXRpYWwgKyBuYmxvY2tzLAorCQlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX21heCArIG5ibG9ja3MpICE9IFZYR0VfSFdfT0spIHsKKworCQl2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUoaGxkZXYpOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9pbml0aWFsaXplKGhsZGV2KTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUoaGxkZXYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJKmRldmggPSBobGRldjsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX3Rlcm1pbmF0ZSAtIFRlcm1pbmF0ZSBUaXRhbiBkZXZpY2UuCisgKiBUZXJtaW5hdGUgSFcgZGV2aWNlLgorICovCit2b2lkCit2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXZ4Z2VfYXNzZXJ0KGhsZGV2LT5tYWdpYyA9PSBWWEdFX0hXX0RFVklDRV9NQUdJQyk7CisKKwlobGRldi0+bWFnaWMgPSBWWEdFX0hXX0RFVklDRV9ERUFEOworCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveSgmaGxkZXYtPmJsb2NrX3Bvb2wpOworCXZmcmVlKGhsZGV2KTsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2dldCAtIEdldCB0aGUgZGV2aWNlIGh3IHN0YXRpc3RpY3MuCisgKiBSZXR1cm5zIHRoZSB2cGF0aCBoL3cgc3RhdHMgZm9yIHRoZSBkZXZpY2UuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfaHdfaW5mbyAqaHdfc3RhdHMpCit7CisJdTMyIGk7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKGhsZGV2LT52cGF0aHNfZGVwbG95ZWQgJiB2eGdlX21CSVQoaSkpIHx8CisJCQkoaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0udnBfb3BlbiA9PQorCQkJCVZYR0VfSFdfVlBfTk9UX09QRU4pKQorCQkJY29udGludWU7CisKKwkJbWVtY3B5KGhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLmh3X3N0YXRzX3NhdiwKKwkJCQlobGRldi0+dmlydHVhbF9wYXRoc1tpXS5od19zdGF0cywKKwkJCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbykpOworCisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19nZXQoCisJCQkmaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0sCisJCQlobGRldi0+dmlydHVhbF9wYXRoc1tpXS5od19zdGF0cyk7CisJfQorCisJbWVtY3B5KGh3X3N0YXRzLCAmaGxkZXYtPnN0YXRzLmh3X2Rldl9pbmZvX3N0YXRzLAorCQkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19kcml2ZXJfc3RhdHNfZ2V0IC0gR2V0IHRoZSBkZXZpY2Ugc3cgc3RhdGlzdGljcy4KKyAqIFJldHVybnMgdGhlIHZwYXRoIHMvdyBzdGF0cyBmb3IgdGhlIGRldmljZS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RyaXZlcl9zdGF0c19nZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfaW5mbyAqc3dfc3RhdHMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJbWVtY3B5KHN3X3N0YXRzLCAmaGxkZXYtPnN0YXRzLnN3X2Rldl9pbmZvX3N0YXRzLAorCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8pKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X21ycGNpbV9zdGF0c19hY2Nlc3MgLSBBY2Nlc3MgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZ2l2ZW4gbG9jYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG9mZnNldCBhbmQgcGVyZm9ybSBhbiBvcGVyYXRpb24KKyAqIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSBnaXZlbiBsb2NhdGlvbiBhbmQgb2Zmc2V0LgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21ycGNpbV9zdGF0c19hY2Nlc3Moc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJICAgIHUzMiBvcGVyYXRpb24sIHUzMiBsb2NhdGlvbiwgdTMyIG9mZnNldCwgdTY0ICpzdGF0KQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2lzX3ByaXZpbGFnZWQoaGxkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSBWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9PUChvcGVyYXRpb24pIHwKKwkJVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfU1RST0JFIHwKKwkJVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfTE9DX1NFTChsb2NhdGlvbikgfAorCQlWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9PRkZTRVRfU0VMKG9mZnNldCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZobGRldi0+bXJwY2ltX3JlZy0+eG1hY19zdGF0c19zeXNfY21kLAorCQkJCVZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX1NUUk9CRSwKKwkJCQlobGRldi0+Y29uZmlnLmRldmljZV9wb2xsX21pbGxpcyk7CisKKwlpZiAoKHN0YXR1cyA9PSBWWEdFX0hXX09LKSAmJiAob3BlcmF0aW9uID09IFZYR0VfSFdfU1RBVFNfT1BfUkVBRCkpCisJCSpzdGF0ID0gcmVhZHEoJmhsZGV2LT5tcnBjaW1fcmVnLT54bWFjX3N0YXRzX3N5c19kYXRhKTsKKwllbHNlCisJCSpzdGF0ID0gMDsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX3htYWNfYWdncl9zdGF0c19nZXQgLSBHZXQgdGhlIFN0YXRpc3RpY3Mgb24gYWdncmVnYXRlIHBvcnQKKyAqIEdldCB0aGUgU3RhdGlzdGljcyBvbiBhZ2dyZWdhdGUgcG9ydAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX2FnZ3Jfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHBvcnQsCisJCQkJICAgc3RydWN0IHZ4Z2VfaHdfeG1hY19hZ2dyX3N0YXRzICphZ2dyX3N0YXRzKQoreworCXU2NCAqdmFsNjQ7CisJaW50IGk7CisJdTMyIG9mZnNldCA9IFZYR0VfSFdfU1RBVFNfQUdHUm5fT0ZGU0VUOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gKHU2NCAqKWFnZ3Jfc3RhdHM7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2lzX3ByaXZpbGFnZWQoaGxkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMpIC8gODsgaSsrKSB7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfbXJwY2ltX3N0YXRzX2FjY2VzcyhobGRldiwKKwkJCQkJVlhHRV9IV19TVEFUU19PUF9SRUFELAorCQkJCQlWWEdFX0hXX1NUQVRTX0xPQ19BR0dSLAorCQkJCQkoKG9mZnNldCArICgxMDQgKiBwb3J0KSkgPj4gMyksIHZhbDY0KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCW9mZnNldCArPSA4OworCQl2YWw2NCsrOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX3htYWNfcG9ydF9zdGF0c19nZXQgLSBHZXQgdGhlIFN0YXRpc3RpY3Mgb24gYSBwb3J0CisgKiBHZXQgdGhlIFN0YXRpc3RpY3Mgb24gcG9ydAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX3BvcnRfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHBvcnQsCisJCQkJICAgc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzICpwb3J0X3N0YXRzKQoreworCXU2NCAqdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCWludCBpOworCXUzMiBvZmZzZXQgPSAweDA7CisJdmFsNjQgPSAodTY0ICopIHBvcnRfc3RhdHM7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2lzX3ByaXZpbGFnZWQoaGxkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdnhnZV9od194bWFjX3BvcnRfc3RhdHMpIC8gODsgaSsrKSB7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfbXJwY2ltX3N0YXRzX2FjY2VzcyhobGRldiwKKwkJCQkJVlhHRV9IV19TVEFUU19PUF9SRUFELAorCQkJCQlWWEdFX0hXX1NUQVRTX0xPQ19BR0dSLAorCQkJCQkoKG9mZnNldCArICg2MDggKiBwb3J0KSkgPj4gMyksIHZhbDY0KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCW9mZnNldCArPSA4OworCQl2YWw2NCsrOworCX0KKworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19kZXZpY2VfeG1hY19zdGF0c19nZXQgLSBHZXQgdGhlIFhNQUMgU3RhdGlzdGljcworICogR2V0IHRoZSBYTUFDIFN0YXRpc3RpY3MKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19kZXZpY2VfeG1hY19zdGF0c19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJICAgICAgc3RydWN0IHZ4Z2VfaHdfeG1hY19zdGF0cyAqeG1hY19zdGF0cykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJdTMyIGk7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV94bWFjX2FnZ3Jfc3RhdHNfZ2V0KGhsZGV2LAorCQkJCQkwLCAmeG1hY19zdGF0cy0+YWdncl9zdGF0c1swXSk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX3htYWNfYWdncl9zdGF0c19nZXQoaGxkZXYsCisJCQkJMSwgJnhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNbMV0pOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJZm9yIChpID0gMDsgaSA8PSBWWEdFX0hXX01BQ19NQVhfTUFDX1BPUlRfSUQ7IGkrKykgeworCisJCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX3htYWNfcG9ydF9zdGF0c19nZXQoaGxkZXYsCisJCQkJCWksICZ4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2ldKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoIShobGRldi0+dnBhdGhzX2RlcGxveWVkICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF94bWFjX3R4X3N0YXRzX2dldCgKKwkJCQkJJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLAorCQkJCQkmeG1hY19zdGF0cy0+dnBhdGhfdHhfc3RhdHNbaV0pOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisKKwkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3htYWNfcnhfc3RhdHNfZ2V0KAorCQkJCQkmaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0sCisJCQkJCSZ4bWFjX3N0YXRzLT52cGF0aF9yeF9zdGF0c1tpXSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQgLSBTZXQgdGhlIGRlYnVnIG1vZHVsZSwgbGV2ZWwgYW5kIHRpbWVzdGFtcAorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIHRoZSBkZWJ1ZyBvdXRwdXQKKyAqLwordm9pZCB2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJICAgICAgZW51bSB2eGdlX2RlYnVnX2xldmVsIGxldmVsLCB1MzIgbWFzaykKK3sKKwlpZiAoaGxkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisjaWYgZGVmaW5lZChWWEdFX0RFQlVHX1RSQUNFX01BU0spIHx8IFwKKwlkZWZpbmVkKFZYR0VfREVCVUdfRVJSX01BU0spCisJaGxkZXYtPmRlYnVnX21vZHVsZV9tYXNrID0gbWFzazsKKwlobGRldi0+ZGVidWdfbGV2ZWwgPSBsZXZlbDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChWWEdFX0RFQlVHX0VSUl9NQVNLKQorCWhsZGV2LT5sZXZlbF9lcnIgPSBsZXZlbCAmIFZYR0VfRVJSOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFZYR0VfREVCVUdfVFJBQ0VfTUFTSykKKwlobGRldi0+bGV2ZWxfdHJhY2UgPSBsZXZlbCAmIFZYR0VfVFJBQ0U7CisjZW5kaWYKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX2Vycm9yX2xldmVsX2dldCAtIEdldCB0aGUgZXJyb3IgbGV2ZWwKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBjdXJyZW50IGVycm9yIGxldmVsIHNldAorICovCit1MzIgdnhnZV9od19kZXZpY2VfZXJyb3JfbGV2ZWxfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKyNpZiBkZWZpbmVkKFZYR0VfREVCVUdfRVJSX01BU0spCisJaWYgKGhsZGV2ID09IE5VTEwpCisJCXJldHVybiBWWEdFX0VSUjsKKwllbHNlCisJCXJldHVybiBobGRldi0+bGV2ZWxfZXJyOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKgorICogdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0IC0gR2V0IHRoZSB0cmFjZSBsZXZlbAorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGN1cnJlbnQgdHJhY2UgbGV2ZWwgc2V0CisgKi8KK3UzMiB2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworI2lmIGRlZmluZWQoVlhHRV9ERUJVR19UUkFDRV9NQVNLKQorCWlmIChobGRldiA9PSBOVUxMKQorCQlyZXR1cm4gVlhHRV9UUkFDRTsKKwllbHNlCisJCXJldHVybiBobGRldi0+bGV2ZWxfdHJhY2U7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisvKgorICogdnhnZV9od19kZXZpY2VfZGVidWdfbWFza19nZXQgLSBHZXQgdGhlIGRlYnVnIG1hc2sKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBjdXJyZW50IGRlYnVnIG1hc2sgc2V0CisgKi8KK3UzMiB2eGdlX2h3X2RldmljZV9kZWJ1Z19tYXNrX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisjaWYgZGVmaW5lZChWWEdFX0RFQlVHX1RSQUNFX01BU0spIHx8IGRlZmluZWQoVlhHRV9ERUJVR19FUlJfTUFTSykKKwlpZiAoaGxkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGhsZGV2LT5kZWJ1Z19tb2R1bGVfbWFzazsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoKKyAqIHZ4Z2VfaHdfZ2V0cGF1c2VfZGF0YSAtUGF1c2UgZnJhbWUgZnJhbWUgZ2VuZXJhdGlvbiBhbmQgcmVjZXB0aW9uLgorICogUmV0dXJucyB0aGUgUGF1c2UgZnJhbWUgZ2VuZXJhdGlvbiBhbmQgcmVjZXB0aW9uIGNhcGFiaWxpdHkgb2YgdGhlIE5JQy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9nZXRwYXVzZV9kYXRhKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCQkJCSB1MzIgcG9ydCwgdTMyICp0eCwgdTMyICpyeCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKChobGRldiA9PSBOVUxMKSB8fCAoaGxkZXYtPm1hZ2ljICE9IFZYR0VfSFdfREVWSUNFX01BR0lDKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0RFVklDRTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0ID4gVlhHRV9IV19NQUNfTUFYX01BQ19QT1JUX0lEKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfUE9SVDsKKwkJZ290byBleGl0OworCX0KKworCWlmICghKGhsZGV2LT5hY2Nlc3NfcmlnaHRzICYgVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSkpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OOworCQlnb3RvIGV4aXQ7CisJfQorCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPm1ycGNpbV9yZWctPnJ4bWFjX3BhdXNlX2NmZ19wb3J0W3BvcnRdKTsKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0dFTl9FTikKKwkJKnR4ID0gMTsKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1JDVl9FTikKKwkJKnJ4ID0gMTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX3NldHBhdXNlX2RhdGEgLSAgc2V0L3Jlc2V0IHBhdXNlIGZyYW1lIGdlbmVyYXRpb24uCisgKiBJdCBjYW4gYmUgdXNlZCB0byBzZXQgb3IgcmVzZXQgUGF1c2UgZnJhbWUgZ2VuZXJhdGlvbiBvciByZWNlcHRpb24KKyAqIHN1cHBvcnQgb2YgdGhlIE5JQy4KKyAqLworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZGV2aWNlX3NldHBhdXNlX2RhdGEoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJCQkJIHUzMiBwb3J0LCB1MzIgdHgsIHUzMiByeCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKChobGRldiA9PSBOVUxMKSB8fCAoaGxkZXYtPm1hZ2ljICE9IFZYR0VfSFdfREVWSUNFX01BR0lDKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0RFVklDRTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0ID4gVlhHRV9IV19NQUNfTUFYX01BQ19QT1JUX0lEKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfUE9SVDsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfaXNfcHJpdmlsYWdlZChobGRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+bXJwY2ltX3JlZy0+cnhtYWNfcGF1c2VfY2ZnX3BvcnRbcG9ydF0pOworCWlmICh0eCkKKwkJdmFsNjQgfD0gVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9HRU5fRU47CisJZWxzZQorCQl2YWw2NCAmPSB+VlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9HRU5fRU47CisJaWYgKHJ4KQorCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1JDVl9FTjsKKwllbHNlCisJCXZhbDY0ICY9IH5WWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1JDVl9FTjsKKworCXdyaXRlcSh2YWw2NCwgJmhsZGV2LT5tcnBjaW1fcmVnLT5yeG1hY19wYXVzZV9jZmdfcG9ydFtwb3J0XSk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3UxNiB2eGdlX2h3X2RldmljZV9saW5rX3dpZHRoX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJaW50IGxpbmtfd2lkdGgsIGV4cF9jYXA7CisJdTE2IGxuazsKKworCWV4cF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGhsZGV2LT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoaGxkZXYtPnBkZXYsIGV4cF9jYXAgKyBQQ0lfRVhQX0xOS1NUQSwgJmxuayk7CisJbGlua193aWR0aCA9IChsbmsgJiBWWEdFX0hXX1BDSV9FWFBfTE5LQ0FQX0xOS19XSURUSCkgPj4gNDsKKwlyZXR1cm4gbGlua193aWR0aDsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2Jsb2NrX21lbWJsb2NrX2lkeCAtIFJldHVybiB0aGUgbWVtYmxvY2sgaW5kZXgKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5kZXggb2YgbWVtb3J5IGJsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyCitfX3Z4Z2VfaHdfcmluZ19ibG9ja19tZW1ibG9ja19pZHgodTggKmJsb2NrKQoreworCXJldHVybiAodTMyKSooKHU2NCAqKShibG9jayArIFZYR0VfSFdfUklOR19NRU1CTE9DS19JRFhfT0ZGU0VUKSk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19ibG9ja19tZW1ibG9ja19pZHhfc2V0IC0gU2V0cyB0aGUgbWVtYmxvY2sgaW5kZXgKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBpbmRleCB0byBhIG1lbW9yeSBibG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fdnhnZV9od19yaW5nX2Jsb2NrX21lbWJsb2NrX2lkeF9zZXQodTggKmJsb2NrLCB1MzIgbWVtYmxvY2tfaWR4KQoreworCSooKHU2NCAqKShibG9jayArIFZYR0VfSFdfUklOR19NRU1CTE9DS19JRFhfT0ZGU0VUKSkgPSBtZW1ibG9ja19pZHg7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19ibG9ja19uZXh0X3BvaW50ZXJfc2V0IC0gU2V0cyB0aGUgbmV4dCBibG9jayBwb2ludGVyCisgKiBpbiBSeEQgYmxvY2sKKyAqIFNldHMgdGhlIG5leHQgYmxvY2sgcG9pbnRlciBpbiBSeEQgYmxvY2sKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX3Z4Z2VfaHdfcmluZ19ibG9ja19uZXh0X3BvaW50ZXJfc2V0KHU4ICpibG9jaywgZG1hX2FkZHJfdCBkbWFfbmV4dCkKK3sKKwkqKCh1NjQgKikoYmxvY2sgKyBWWEdFX0hXX1JJTkdfTkVYVF9CTE9DS19QT0lOVEVSX09GRlNFVCkpID0gZG1hX25leHQ7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19maXJzdF9ibG9ja19hZGRyZXNzX2dldCAtIFJldHVybnMgdGhlIGRtYSBhZGRyZXNzIG9mIHRoZQorICogICAgICAgICAgICAgZmlyc3QgYmxvY2sKKyAqIFJldHVybnMgdGhlIGRtYSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBSeEQgYmxvY2sKKyAqLwordTY0IF9fdnhnZV9od19yaW5nX2ZpcnN0X2Jsb2NrX2FkZHJlc3NfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdDsKKworCWRtYV9vYmplY3QgPSByaW5nLT5tZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FycjsKKwl2eGdlX2Fzc2VydChkbWFfb2JqZWN0ICE9IE5VTEwpOworCisJcmV0dXJuIGRtYV9vYmplY3QtPmFkZHI7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19pdGVtX2RtYV9hZGRyIC0gUmV0dXJuIHRoZSBkbWEgYWRkcmVzcyBvZiBhbiBpdGVtCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRtYSBhZGRyZXNzIG9mIGEgZ2l2ZW4gaXRlbQorICovCitzdGF0aWMgZG1hX2FkZHJfdCBfX3Z4Z2VfaHdfcmluZ19pdGVtX2RtYV9hZGRyKHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2xoLAorCQkJCQkgICAgICAgdm9pZCAqaXRlbSkKK3sKKwl1MzIgbWVtYmxvY2tfaWR4OworCXZvaWQgKm1lbWJsb2NrOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICptZW1ibG9ja19kbWFfb2JqZWN0OworCXB0cmRpZmZfdCBkbWFfaXRlbV9vZmZzZXQ7CisKKwkvKiBnZXQgb3duZXIgbWVtYmxvY2sgaW5kZXggKi8KKwltZW1ibG9ja19pZHggPSBfX3Z4Z2VfaHdfcmluZ19ibG9ja19tZW1ibG9ja19pZHgoaXRlbSk7CisKKwkvKiBnZXQgb3duZXIgbWVtYmxvY2sgYnkgbWVtYmxvY2sgaW5kZXggKi8KKwltZW1ibG9jayA9IG1lbXBvb2xoLT5tZW1ibG9ja3NfYXJyW21lbWJsb2NrX2lkeF07CisKKwkvKiBnZXQgbWVtYmxvY2sgRE1BIG9iamVjdCBieSBtZW1ibG9jayBpbmRleCAqLworCW1lbWJsb2NrX2RtYV9vYmplY3QgPSBtZW1wb29saC0+bWVtYmxvY2tzX2RtYV9hcnIgKyBtZW1ibG9ja19pZHg7CisKKwkvKiBjYWxjdWxhdGUgb2Zmc2V0IGluIHRoZSBtZW1ibG9jayBvZiB0aGlzIGl0ZW0gKi8KKwlkbWFfaXRlbV9vZmZzZXQgPSAodTggKilpdGVtIC0gKHU4ICopbWVtYmxvY2s7CisKKwlyZXR1cm4gbWVtYmxvY2tfZG1hX29iamVjdC0+YWRkciArIGRtYV9pdGVtX29mZnNldDsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX3J4ZGJsb2NrX2xpbmsgLSBMaW5rIHRoZSBSeEQgYmxvY2tzCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRtYSBhZGRyZXNzIG9mIGEgZ2l2ZW4gaXRlbQorICovCitzdGF0aWMgdm9pZCBfX3Z4Z2VfaHdfcmluZ19yeGRibG9ja19saW5rKHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2xoLAorCQkJCQkgc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB1MzIgZnJvbSwKKwkJCQkJIHUzMiB0bykKK3sKKwl1OCAqdG9faXRlbSAsICpmcm9tX2l0ZW07CisJZG1hX2FkZHJfdCB0b19kbWE7CisKKwkvKiBnZXQgImZyb20iIFJ4RCBibG9jayAqLworCWZyb21faXRlbSA9IG1lbXBvb2xoLT5pdGVtc19hcnJbZnJvbV07CisJdnhnZV9hc3NlcnQoZnJvbV9pdGVtKTsKKworCS8qIGdldCAidG8iIFJ4RCBibG9jayAqLworCXRvX2l0ZW0gPSBtZW1wb29saC0+aXRlbXNfYXJyW3RvXTsKKwl2eGdlX2Fzc2VydCh0b19pdGVtKTsKKworCS8qIHJldHVybiBhZGRyZXNzIG9mIHRoZSBiZWdpbm5pbmcgb2YgcHJldmlvdXMgUnhEIGJsb2NrICovCisJdG9fZG1hID0gX192eGdlX2h3X3JpbmdfaXRlbV9kbWFfYWRkcihtZW1wb29saCwgdG9faXRlbSk7CisKKwkvKiBzZXQgbmV4dCBwb2ludGVyIGZvciB0aGlzIFJ4RCBibG9jayB0byBwb2ludCBvbgorCSAqIHByZXZpb3VzIGl0ZW0ncyBETUEgc3RhcnQgYWRkcmVzcyAqLworCV9fdnhnZV9od19yaW5nX2Jsb2NrX25leHRfcG9pbnRlcl9zZXQoZnJvbV9pdGVtLCB0b19kbWEpOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfbWVtcG9vbF9pdGVtX2FsbG9jIC0gQWxsb2NhdGUgTGlzdCBibG9ja3MgZm9yIFJ4RAorICogYmxvY2sgY2FsbGJhY2sKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGJhY2sgcGFzc2VkIHRvIF9fdnhnZV9od19tZW1wb29sX2NyZWF0ZSB0byBjcmVhdGUgbWVtb3J5CisgKiBwb29sIGZvciBSeEQgYmxvY2sKKyAqLworc3RhdGljIHZvaWQKK19fdnhnZV9od19yaW5nX21lbXBvb2xfaXRlbV9hbGxvYyhzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29saCwKKwkJCQkgIHUzMiBtZW1ibG9ja19pbmRleCwKKwkJCQkgIHN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0LAorCQkJCSAgdTMyIGluZGV4LCB1MzIgaXNfbGFzdCkKK3sKKwl1MzIgaTsKKwl2b2lkICppdGVtID0gbWVtcG9vbGgtPml0ZW1zX2FycltpbmRleF07CisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nID0KKwkJKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqKW1lbXBvb2xoLT51c2VyZGF0YTsKKworCS8qIGZvcm1hdCByeGRzIGFycmF5ICovCisJZm9yIChpID0gMDsgaSA8IHJpbmctPnJ4ZHNfcGVyX2Jsb2NrOyBpKyspIHsKKwkJdm9pZCAqcnhkYmxvY2tfcHJpdjsKKwkJdm9pZCAqdWxkX3ByaXY7CisJCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHA7CisKKwkJdTMyIHJlc2VydmVfaW5kZXggPSByaW5nLT5jaGFubmVsLnJlc2VydmVfcHRyIC0KKwkJCQkoaW5kZXggKiByaW5nLT5yeGRzX3Blcl9ibG9jayArIGkgKyAxKTsKKwkJdTMyIG1lbWJsb2NrX2l0ZW1faWR4OworCisJCXJpbmctPmNoYW5uZWwucmVzZXJ2ZV9hcnJbcmVzZXJ2ZV9pbmRleF0gPSAoKHU4ICopaXRlbSkgKworCQkJCQkJaSAqIHJpbmctPnJ4ZF9zaXplOworCisJCS8qIE5vdGU6IG1lbWJsb2NrX2l0ZW1faWR4IGlzIGluZGV4IG9mIHRoZSBpdGVtIHdpdGhpbgorCQkgKiAgICAgICB0aGUgbWVtYmxvY2suIEZvciBpbnN0YW5jZSwgaW4gY2FzZSBvZiB0aHJlZSBSeEQtYmxvY2tzCisJCSAqICAgICAgIHBlciBtZW1ibG9jayB0aGlzIHZhbHVlIGNhbiBiZSAwLCAxIG9yIDIuICovCisJCXJ4ZGJsb2NrX3ByaXYgPSBfX3Z4Z2VfaHdfbWVtcG9vbF9pdGVtX3ByaXYobWVtcG9vbGgsCisJCQkJCW1lbWJsb2NrX2luZGV4LCBpdGVtLAorCQkJCQkmbWVtYmxvY2tfaXRlbV9pZHgpOworCisJCXJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKQorCQkJCXJpbmctPmNoYW5uZWwucmVzZXJ2ZV9hcnJbcmVzZXJ2ZV9pbmRleF07CisKKwkJdWxkX3ByaXYgPSAoKHU4ICopcnhkYmxvY2tfcHJpdiArIHJpbmctPnJ4ZF9wcml2X3NpemUgKiBpKTsKKworCQkvKiBwcmUtZm9ybWF0IEhvc3RfQ29udHJvbCAqLworCQlyeGRwLT5ob3N0X2NvbnRyb2wgPSAodTY0KShzaXplX3QpdWxkX3ByaXY7CisJfQorCisJX192eGdlX2h3X3JpbmdfYmxvY2tfbWVtYmxvY2tfaWR4X3NldChpdGVtLCBtZW1ibG9ja19pbmRleCk7CisKKwlpZiAoaXNfbGFzdCkgeworCQkvKiBsaW5rIGxhc3Qgb25lIHdpdGggZmlyc3Qgb25lICovCisJCV9fdnhnZV9od19yaW5nX3J4ZGJsb2NrX2xpbmsobWVtcG9vbGgsIHJpbmcsIGluZGV4LCAwKTsKKwl9CisKKwlpZiAoaW5kZXggPiAwKSB7CisJCS8qIGxpbmsgdGhpcyBSeEQgYmxvY2sgd2l0aCBwcmV2aW91cyBvbmUgKi8KKwkJX192eGdlX2h3X3JpbmdfcnhkYmxvY2tfbGluayhtZW1wb29saCwgcmluZywgaW5kZXggLSAxLCBpbmRleCk7CisJfQorCisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfaW5pdGlhbF9yZXBsZW5pc2ggLSBJbml0aWFsIHJlcGxlbmlzaCBvZiBSeERzCisgKiBUaGlzIGZ1bmN0aW9uIHJlcGxlbmlzaGVzIHRoZSBSeERzIGZyb20gcmVzZXJ2ZSBhcnJheSB0byB3b3JrIGFycmF5CisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfcmluZ19yZXBsZW5pc2goc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB1MTYgbWluX2ZsYWcpCit7CisJdm9pZCAqcnhkOworCWludCBpID0gMDsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJd2hpbGUgKHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY291bnQoY2hhbm5lbCkgPiAwKSB7CisKKwkJc3RhdHVzID0gdnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlKHJpbmcsICZyeGQpOworCisJCXZ4Z2VfYXNzZXJ0KHN0YXR1cyA9PSBWWEdFX0hXX09LKTsKKworCQlpZiAocmluZy0+cnhkX2luaXQpIHsKKwkJCXN0YXR1cyA9IHJpbmctPnJ4ZF9pbml0KHJ4ZCwgY2hhbm5lbC0+dXNlcmRhdGEpOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQkJdnhnZV9od19yaW5nX3J4ZF9mcmVlKHJpbmcsIHJ4ZCk7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CisKKwkJdnhnZV9od19yaW5nX3J4ZF9wb3N0KHJpbmcsIHJ4ZCk7CisJCWlmIChtaW5fZmxhZykgeworCQkJaSsrOworCQkJaWYgKGkgPT0gVlhHRV9IV19SSU5HX01JTl9CVUZGX0FMTE9DQVRJT04pCisJCQkJYnJlYWs7CisJCX0KKwl9CisJc3RhdHVzID0gVlhHRV9IV19PSzsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2NyZWF0ZSAtIENyZWF0ZSBhIFJpbmcKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBSaW5nIGFuZCBpbml0aWFsaXplcyBpdC4KKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19yaW5nX2NyZWF0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCisJCSAgICAgIHN0cnVjdCB2eGdlX2h3X3JpbmdfYXR0ciAqYXR0cikKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nOworCXUzMiByaW5nX2xlbmd0aDsKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwl1MzIgdnBfaWQ7CisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9jYnMgcmluZ19tcF9jYWxsYmFjazsKKworCWlmICgodnAgPT0gTlVMTCkgfHwgKGF0dHIgPT0gTlVMTCkpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCXZwX2lkID0gdnAtPnZwYXRoLT52cF9pZDsKKworCWNvbmZpZyA9ICZobGRldi0+Y29uZmlnLnZwX2NvbmZpZ1t2cF9pZF0ucmluZzsKKworCXJpbmdfbGVuZ3RoID0gY29uZmlnLT5yaW5nX2Jsb2NrcyAqCisJCQl2eGdlX2h3X3Jpbmdfcnhkc19wZXJfYmxvY2tfZ2V0KGNvbmZpZy0+YnVmZmVyX21vZGUpOworCisJcmluZyA9IChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKilfX3Z4Z2VfaHdfY2hhbm5lbF9hbGxvY2F0ZSh2cCwKKwkJCQkJCVZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkcsCisJCQkJCQlyaW5nX2xlbmd0aCwKKwkJCQkJCWF0dHItPnBlcl9yeGRfc3BhY2UsCisJCQkJCQlhdHRyLT51c2VyZGF0YSk7CisKKwlpZiAocmluZyA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cC0+dnBhdGgtPnJpbmdoID0gcmluZzsKKwlyaW5nLT52cF9pZCA9IHZwX2lkOworCXJpbmctPnZwX3JlZyA9IHZwLT52cGF0aC0+dnBfcmVnOworCXJpbmctPmNvbW1vbl9yZWcgPSBobGRldi0+Y29tbW9uX3JlZzsKKwlyaW5nLT5zdGF0cyA9ICZ2cC0+dnBhdGgtPnN3X3N0YXRzLT5yaW5nX3N0YXRzOworCXJpbmctPmNvbmZpZyA9IGNvbmZpZzsKKwlyaW5nLT5jYWxsYmFjayA9IGF0dHItPmNhbGxiYWNrOworCXJpbmctPnJ4ZF9pbml0ID0gYXR0ci0+cnhkX2luaXQ7CisJcmluZy0+cnhkX3Rlcm0gPSBhdHRyLT5yeGRfdGVybTsKKwlyaW5nLT5idWZmZXJfbW9kZSA9IGNvbmZpZy0+YnVmZmVyX21vZGU7CisJcmluZy0+cnhkc19saW1pdCA9IGNvbmZpZy0+cnhkc19saW1pdDsKKworCXJpbmctPnJ4ZF9zaXplID0gdnhnZV9od19yaW5nX3J4ZF9zaXplX2dldChjb25maWctPmJ1ZmZlcl9tb2RlKTsKKwlyaW5nLT5yeGRfcHJpdl9zaXplID0KKwkJc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZ19yeGRfcHJpdikgKyBhdHRyLT5wZXJfcnhkX3NwYWNlOworCXJpbmctPnBlcl9yeGRfc3BhY2UgPSBhdHRyLT5wZXJfcnhkX3NwYWNlOworCisJcmluZy0+cnhkX3ByaXZfc2l6ZSA9CisJCSgocmluZy0+cnhkX3ByaXZfc2l6ZSArIFZYR0VfQ0FDSEVfTElORV9TSVpFIC0gMSkgLworCQlWWEdFX0NBQ0hFX0xJTkVfU0laRSkgKiBWWEdFX0NBQ0hFX0xJTkVfU0laRTsKKworCS8qIGhvdyBtYW55IFJ4RHMgY2FuIGZpdCBpbnRvIG9uZSBibG9jay4gRGVwZW5kcyBvbiBjb25maWd1cmVkCisJICogYnVmZmVyX21vZGUuICovCisJcmluZy0+cnhkc19wZXJfYmxvY2sgPQorCQl2eGdlX2h3X3Jpbmdfcnhkc19wZXJfYmxvY2tfZ2V0KGNvbmZpZy0+YnVmZmVyX21vZGUpOworCisJLyogY2FsY3VsYXRlIGFjdHVhbCBSeEQgYmxvY2sgcHJpdmF0ZSBzaXplICovCisJcmluZy0+cnhkYmxvY2tfcHJpdl9zaXplID0gcmluZy0+cnhkX3ByaXZfc2l6ZSAqIHJpbmctPnJ4ZHNfcGVyX2Jsb2NrOworCXJpbmdfbXBfY2FsbGJhY2suaXRlbV9mdW5jX2FsbG9jID0gX192eGdlX2h3X3JpbmdfbWVtcG9vbF9pdGVtX2FsbG9jOworCXJpbmctPm1lbXBvb2wgPSBfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUoaGxkZXYsCisJCQkJVlhHRV9IV19CTE9DS19TSVpFLAorCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSwKKwkJCQlyaW5nLT5yeGRibG9ja19wcml2X3NpemUsCisJCQkJcmluZy0+Y29uZmlnLT5yaW5nX2Jsb2NrcywKKwkJCQlyaW5nLT5jb25maWctPnJpbmdfYmxvY2tzLAorCQkJCSZyaW5nX21wX2NhbGxiYWNrLAorCQkJCXJpbmcpOworCisJaWYgKHJpbmctPm1lbXBvb2wgPT0gTlVMTCkgeworCQlfX3Z4Z2VfaHdfcmluZ19kZWxldGUodnApOworCQlyZXR1cm4gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplKCZyaW5nLT5jaGFubmVsKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJX192eGdlX2h3X3JpbmdfZGVsZXRlKHZwKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIE5vdGU6CisJICogU3BlY2lmeWluZyByeGRfaW5pdCBjYWxsYmFjayBtZWFucyB0d28gdGhpbmdzOgorCSAqIDEpIHJ4ZHMgbmVlZCB0byBiZSBpbml0aWFsaXplZCBieSBkcml2ZXIgYXQgY2hhbm5lbC1vcGVuIHRpbWU7CisJICogMikgcnhkcyBuZWVkIHRvIGJlIHBvc3RlZCBhdCBjaGFubmVsLW9wZW4gdGltZQorCSAqICAgICh0aGF0J3Mgd2hhdCB0aGUgaW5pdGlhbF9yZXBsZW5pc2goKSBiZWxvdyBkb2VzKQorCSAqIEN1cnJlbnRseSB3ZSBkb24ndCBoYXZlIGEgY2FzZSB3aGVuIHRoZSAxKSBpcyBkb25lIHdpdGhvdXQgdGhlIDIpLgorCSAqLworCWlmIChyaW5nLT5yeGRfaW5pdCkgeworCQlzdGF0dXMgPSB2eGdlX2h3X3JpbmdfcmVwbGVuaXNoKHJpbmcsIDEpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwkvKiBpbml0aWFsIHJlcGxlbmlzaCB3aWxsIGluY3JlbWVudCB0aGUgY291bnRlciBpbiBpdHMgcG9zdCgpIHJvdXRpbmUsCisJICogd2UgaGF2ZSB0byByZXNldCBpdCAqLworCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250ID0gMDsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2Fib3J0IC0gUmV0dXJucyB0aGUgUnhECisgKiBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgdGhlIFJ4RHMgb2YgcmluZworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19yaW5nX2Fib3J0KHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZykKK3sKKwl2b2lkICpyeGRoOworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKKworCWZvciAoOzspIHsKKwkJdnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUoY2hhbm5lbCwgJnJ4ZGgpOworCisJCWlmIChyeGRoID09IE5VTEwpCisJCQlicmVhazsKKworCQl2eGdlX2h3X2NoYW5uZWxfZHRyX2NvbXBsZXRlKGNoYW5uZWwpOworCisJCWlmIChyaW5nLT5yeGRfdGVybSkKKwkJCXJpbmctPnJ4ZF90ZXJtKHJ4ZGgsIFZYR0VfSFdfUlhEX1NUQVRFX1BPU1RFRCwKKwkJCQljaGFubmVsLT51c2VyZGF0YSk7CisKKwkJdnhnZV9od19jaGFubmVsX2R0cl9mcmVlKGNoYW5uZWwsIHJ4ZGgpOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfcmVzZXQgLSBSZXNldHMgdGhlIHJpbmcKKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSByaW5nIGR1cmluZyB2cGF0aCByZXNldCBvcGVyYXRpb24KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfcmluZ19yZXNldChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKKworCV9fdnhnZV9od19yaW5nX2Fib3J0KHJpbmcpOworCisJc3RhdHVzID0gX192eGdlX2h3X2NoYW5uZWxfcmVzZXQoY2hhbm5lbCk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCWlmIChyaW5nLT5yeGRfaW5pdCkgeworCQlzdGF0dXMgPSB2eGdlX2h3X3JpbmdfcmVwbGVuaXNoKHJpbmcsIDEpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfZGVsZXRlIC0gUmVtb3ZlcyB0aGUgcmluZworICogVGhpcyBmdW5jdGlvbiBmcmVldXAgdGhlIG1lbW9yeSBwb29sIGFuZCByZW1vdmVzIHRoZSByaW5nCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X3JpbmdfZGVsZXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcgPSB2cC0+dnBhdGgtPnJpbmdoOworCisJX192eGdlX2h3X3JpbmdfYWJvcnQocmluZyk7CisKKwlpZiAocmluZy0+bWVtcG9vbCkKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShyaW5nLT5tZW1wb29sKTsKKworCXZwLT52cGF0aC0+cmluZ2ggPSBOVUxMOworCV9fdnhnZV9od19jaGFubmVsX2ZyZWUoJnJpbmctPmNoYW5uZWwpOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfbWVtcG9vbF9ncm93CisgKiBXaWxsIHJlc2l6ZSBtZW1wb29sIHVwIHRvICVudW1fYWxsb2NhdGUgdmFsdWUuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19tZW1wb29sX2dyb3coc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCwgdTMyIG51bV9hbGxvY2F0ZSwKKwkJICAgICAgIHUzMiAqbnVtX2FsbG9jYXRlZCkKK3sKKwl1MzIgaSwgZmlyc3RfdGltZSA9IG1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQgPT0gMCA/IDEgOiAwOworCXUzMiBuX2l0ZW1zID0gbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrOworCXUzMiBzdGFydF9ibG9ja19pZHggPSBtZW1wb29sLT5tZW1ibG9ja3NfYWxsb2NhdGVkOworCXUzMiBlbmRfYmxvY2tfaWR4ID0gbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCArIG51bV9hbGxvY2F0ZTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwkqbnVtX2FsbG9jYXRlZCA9IDA7CisKKwlpZiAoZW5kX2Jsb2NrX2lkeCA+IG1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byBleGl0OworCX0KKworCWZvciAoaSA9IHN0YXJ0X2Jsb2NrX2lkeDsgaSA8IGVuZF9ibG9ja19pZHg7IGkrKykgeworCQl1MzIgajsKKwkJdTMyIGlzX2xhc3QgPSAoKGVuZF9ibG9ja19pZHggLSAxKSA9PSBpKTsKKwkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QgPQorCQkJbWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgKyBpOworCQl2b2lkICp0aGVfbWVtYmxvY2s7CisKKwkJLyogYWxsb2NhdGUgbWVtYmxvY2sncyBwcml2YXRlIHBhcnQuIEVhY2ggRE1BIG1lbWJsb2NrCisJCSAqIGhhcyBhIHNwYWNlIGFsbG9jYXRlZCBmb3IgaXRlbSdzIHByaXZhdGUgdXNhZ2UgdXBvbgorCQkgKiBtZW1wb29sJ3MgdXNlciByZXF1ZXN0LiBFYWNoIHRpbWUgbWVtcG9vbCBncm93cywgaXQgd2lsbAorCQkgKiBhbGxvY2F0ZSBuZXcgbWVtYmxvY2sgYW5kIGl0cyBwcml2YXRlIHBhcnQgYXQgb25jZS4KKwkJICogVGhpcyBoZWxwcyB0byBtaW5pbWl6ZSBtZW1vcnkgdXNhZ2UgYSBsb3QuICovCisJCW1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycltpXSA9CisJCQkJdm1hbGxvYyhtZW1wb29sLT5pdGVtc19wcml2X3NpemUgKiBuX2l0ZW1zKTsKKwkJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycltpXSA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBleGl0OworCQl9CisKKwkJbWVtc2V0KG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycltpXSwgMCwKKwkJCSAgICAgbWVtcG9vbC0+aXRlbXNfcHJpdl9zaXplICogbl9pdGVtcyk7CisKKwkJLyogYWxsb2NhdGUgRE1BLWNhcGFibGUgbWVtYmxvY2sgKi8KKwkJbWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSA9CisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX21hbGxvYyhtZW1wb29sLT5kZXZoLAorCQkJCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUsIGRtYV9vYmplY3QpOworCQlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSA9PSBOVUxMKSB7CisJCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0pOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCSgqbnVtX2FsbG9jYXRlZCkrKzsKKwkJbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCsrOworCisJCW1lbXNldChtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldLCAwLCBtZW1wb29sLT5tZW1ibG9ja19zaXplKTsKKworCQl0aGVfbWVtYmxvY2sgPSBtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldOworCisJCS8qIGZpbGwgdGhlIGl0ZW1zIGhhc2ggYXJyYXkgKi8KKwkJZm9yIChqID0gMDsgaiA8IG5faXRlbXM7IGorKykgeworCQkJdTMyIGluZGV4ID0gaSAqIG5faXRlbXMgKyBqOworCisJCQlpZiAoZmlyc3RfdGltZSAmJiBpbmRleCA+PSBtZW1wb29sLT5pdGVtc19pbml0aWFsKQorCQkJCWJyZWFrOworCisJCQltZW1wb29sLT5pdGVtc19hcnJbaW5kZXhdID0KKwkJCQkoKGNoYXIgKil0aGVfbWVtYmxvY2sgKyBqKm1lbXBvb2wtPml0ZW1fc2l6ZSk7CisKKwkJCS8qIGxldCBjYWxsZXIgdG8gZG8gbW9yZSBqb2Igb24gZWFjaCBpdGVtICovCisJCQlpZiAobWVtcG9vbC0+aXRlbV9mdW5jX2FsbG9jICE9IE5VTEwpCisJCQkJbWVtcG9vbC0+aXRlbV9mdW5jX2FsbG9jKG1lbXBvb2wsIGksCisJCQkJCWRtYV9vYmplY3QsIGluZGV4LCBpc19sYXN0KTsKKworCQkJbWVtcG9vbC0+aXRlbXNfY3VycmVudCA9IGluZGV4ICsgMTsKKwkJfQorCisJCWlmIChmaXJzdF90aW1lICYmIG1lbXBvb2wtPml0ZW1zX2N1cnJlbnQgPT0KKwkJCQkJbWVtcG9vbC0+aXRlbXNfaW5pdGlhbCkKKwkJCWJyZWFrOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfbWVtcG9vbF9jcmVhdGUKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgbWVtb3J5IHBvb2wgb2JqZWN0LiBQb29sIG1heSBncm93IGJ1dCB3aWxsCisgKiBuZXZlciBzaHJpbmsuIFBvb2wgY29uc2lzdHMgb2YgbnVtYmVyIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBibG9ja3MKKyAqIHdpdGggc2l6ZSBlbm91Z2ggdG8gaG9sZCAlaXRlbXNfaW5pdGlhbCBudW1iZXIgb2YgaXRlbXMuIE1lbW9yeSBpcworICogRE1BLWFibGUgYnV0IGNsaWVudCBtdXN0IG1hcC91bm1hcCBiZWZvcmUgaW50ZXJvcGVyYXRpbmcgd2l0aCB0aGUgZGV2aWNlLgorICovCitzdHJ1Y3QgdnhnZV9od19tZW1wb29sKgorX192eGdlX2h3X21lbXBvb2xfY3JlYXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMiBtZW1ibG9ja19zaXplLAorCXUzMiBpdGVtX3NpemUsCisJdTMyIGl0ZW1zX3ByaXZfc2l6ZSwKKwl1MzIgaXRlbXNfaW5pdGlhbCwKKwl1MzIgaXRlbXNfbWF4LAorCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfY2JzICptcF9jYWxsYmFjaywKKwl2b2lkICp1c2VyZGF0YSkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJdTMyIG1lbWJsb2Nrc190b19hbGxvY2F0ZTsKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29sID0gTlVMTDsKKwl1MzIgYWxsb2NhdGVkOworCisJaWYgKG1lbWJsb2NrX3NpemUgPCBpdGVtX3NpemUpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtcG9vbCA9IChzdHJ1Y3QgdnhnZV9od19tZW1wb29sICopCisJCQl2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9od19tZW1wb29sKSk7CisJaWYgKG1lbXBvb2wgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIGV4aXQ7CisJfQorCW1lbXNldChtZW1wb29sLCAwLCBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCkpOworCisJbWVtcG9vbC0+ZGV2aAkJCT0gZGV2aDsKKwltZW1wb29sLT5tZW1ibG9ja19zaXplCQk9IG1lbWJsb2NrX3NpemU7CisJbWVtcG9vbC0+aXRlbXNfbWF4CQk9IGl0ZW1zX21heDsKKwltZW1wb29sLT5pdGVtc19pbml0aWFsCQk9IGl0ZW1zX2luaXRpYWw7CisJbWVtcG9vbC0+aXRlbV9zaXplCQk9IGl0ZW1fc2l6ZTsKKwltZW1wb29sLT5pdGVtc19wcml2X3NpemUJPSBpdGVtc19wcml2X3NpemU7CisJbWVtcG9vbC0+aXRlbV9mdW5jX2FsbG9jCT0gbXBfY2FsbGJhY2stPml0ZW1fZnVuY19hbGxvYzsKKwltZW1wb29sLT51c2VyZGF0YQkJPSB1c2VyZGF0YTsKKworCW1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQgPSAwOworCisJbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrID0gbWVtYmxvY2tfc2l6ZSAvIGl0ZW1fc2l6ZTsKKworCW1lbXBvb2wtPm1lbWJsb2Nrc19tYXggPSAoaXRlbXNfbWF4ICsgbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrIC0gMSkgLworCQkJCQltZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2s7CisKKwkvKiBhbGxvY2F0ZSBhcnJheSBvZiBtZW1ibG9ja3MgKi8KKwltZW1wb29sLT5tZW1ibG9ja3NfYXJyID0KKwkJKHZvaWQgKiopIHZtYWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBtZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKKwlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX2FyciA9PSBOVUxMKSB7CisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kobWVtcG9vbCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCW1lbXBvb2wgPSBOVUxMOworCQlnb3RvIGV4aXQ7CisJfQorCW1lbXNldChtZW1wb29sLT5tZW1ibG9ja3NfYXJyLCAwLAorCQlzaXplb2Yodm9pZCAqKSAqIG1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpOworCisJLyogYWxsb2NhdGUgYXJyYXkgb2YgcHJpdmF0ZSBwYXJ0cyBvZiBpdGVtcyBwZXIgbWVtYmxvY2tzICovCisJbWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyID0KKwkJKHZvaWQgKiopIHZtYWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBtZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKKwlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyID09IE5VTEwpIHsKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJbWVtcG9vbCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisJbWVtc2V0KG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FyciwgMCwKKwkJICAgIHNpemVvZih2b2lkICopICogbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7CisKKwkvKiBhbGxvY2F0ZSBhcnJheSBvZiBtZW1ibG9ja3MgRE1BIG9iamVjdHMgKi8KKwltZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciA9IChzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqKQorCQl2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSkgKgorCQkJbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7CisKKwlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgPT0gTlVMTCkgeworCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KG1lbXBvb2wpOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQltZW1wb29sID0gTlVMTDsKKwkJZ290byBleGl0OworCX0KKwltZW1zZXQobWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIsIDAsCisJCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEpICoKKwkJCW1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpOworCisJLyogYWxsb2NhdGUgaGFzaCBhcnJheSBvZiBpdGVtcyAqLworCW1lbXBvb2wtPml0ZW1zX2FyciA9CisJCSh2b2lkICoqKSB2bWFsbG9jKHNpemVvZih2b2lkICopICogbWVtcG9vbC0+aXRlbXNfbWF4KTsKKwlpZiAobWVtcG9vbC0+aXRlbXNfYXJyID09IE5VTEwpIHsKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJbWVtcG9vbCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisJbWVtc2V0KG1lbXBvb2wtPml0ZW1zX2FyciwgMCwgc2l6ZW9mKHZvaWQgKikgKiBtZW1wb29sLT5pdGVtc19tYXgpOworCisJLyogY2FsY3VsYXRlIGluaXRpYWwgbnVtYmVyIG9mIG1lbWJsb2NrcyAqLworCW1lbWJsb2Nrc190b19hbGxvY2F0ZSA9IChtZW1wb29sLT5pdGVtc19pbml0aWFsICsKKwkJCQkgbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrIC0gMSkgLworCQkJCQkJbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrOworCisJLyogcHJlLWFsbG9jYXRlIHRoZSBtZW1wb29sICovCisJc3RhdHVzID0gX192eGdlX2h3X21lbXBvb2xfZ3JvdyhtZW1wb29sLCBtZW1ibG9ja3NfdG9fYWxsb2NhdGUsCisJCQkJCSZhbGxvY2F0ZWQpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KG1lbXBvb2wpOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQltZW1wb29sID0gTlVMTDsKKwkJZ290byBleGl0OworCX0KKworZXhpdDoKKwlyZXR1cm4gbWVtcG9vbDsKK30KKworLyoKKyAqIHZ4Z2VfaHdfbWVtcG9vbF9kZXN0cm95CisgKi8KK3ZvaWQgX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29sKQoreworCXUzMiBpLCBqOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoID0gbWVtcG9vbC0+ZGV2aDsKKworCWZvciAoaSA9IDA7IGkgPCBtZW1wb29sLT5tZW1ibG9ja3NfYWxsb2NhdGVkOyBpKyspIHsKKwkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3Q7CisKKwkJdnhnZV9hc3NlcnQobWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSk7CisJCXZ4Z2VfYXNzZXJ0KG1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyICsgaSk7CisKKwkJZG1hX29iamVjdCA9IG1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyICsgaTsKKworCQlmb3IgKGogPSAwOyBqIDwgbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrOyBqKyspIHsKKwkJCXUzMiBpbmRleCA9IGkgKiBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2sgKyBqOworCisJCQkvKiB0byBza2lwIGxhc3QgcGFydGlhbGx5IGZpbGxlZChpZiBhbnkpIG1lbWJsb2NrICovCisJCQlpZiAoaW5kZXggPj0gbWVtcG9vbC0+aXRlbXNfY3VycmVudCkKKwkJCQlicmVhazsKKwkJfQorCisJCXZmcmVlKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycltpXSk7CisKKwkJX192eGdlX2h3X2Jsb2NrcG9vbF9mcmVlKGRldmgsIG1lbXBvb2wtPm1lbWJsb2Nrc19hcnJbaV0sCisJCQkJbWVtcG9vbC0+bWVtYmxvY2tfc2l6ZSwgZG1hX29iamVjdCk7CisJfQorCisJaWYgKG1lbXBvb2wtPml0ZW1zX2FycikKKwkJdmZyZWUobWVtcG9vbC0+aXRlbXNfYXJyKTsKKworCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FycikKKwkJdmZyZWUobWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIpOworCisJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycikKKwkJdmZyZWUobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyKTsKKworCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfYXJyKQorCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfYXJyKTsKKworCXZmcmVlKG1lbXBvb2wpOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9maWZvX2NvbmZpZ19jaGVjayAtIENoZWNrIGZpZm8gY29uZmlndXJhdGlvbi4KKyAqIENoZWNrIHRoZSBmaWZvIGNvbmZpZ3VyYXRpb24KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9maWZvX2NvbmZpZ19jaGVjayhzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZyAqZmlmb19jb25maWcpCit7CisJaWYgKChmaWZvX2NvbmZpZy0+Zmlmb19ibG9ja3MgPCBWWEdFX0hXX01JTl9GSUZPX0JMT0NLUykgfHwKKwkgICAgIChmaWZvX2NvbmZpZy0+Zmlmb19ibG9ja3MgPiBWWEdFX0hXX01BWF9GSUZPX0JMT0NLUykpCisJCXJldHVybiBWWEdFX0hXX0JBRENGR19GSUZPX0JMT0NLUzsKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV92cGF0aF9jb25maWdfY2hlY2sgLSBDaGVjayB2cGF0aCBjb25maWd1cmF0aW9uLgorICogQ2hlY2sgdGhlIHZwYXRoIGNvbmZpZ3VyYXRpb24KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV92cGF0aF9jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnICp2cF9jb25maWcpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoKHZwX2NvbmZpZy0+bWluX2JhbmR3aWR0aCA8IFZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01JTikgfHwKKwkJKHZwX2NvbmZpZy0+bWluX2JhbmR3aWR0aCA+CisJCQkJCVZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWCkpCisJCXJldHVybiBWWEdFX0hXX0JBRENGR19WUEFUSF9NSU5fQkFORFdJRFRIOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9maWZvX2NvbmZpZ19jaGVjaygmdnBfY29uZmlnLT5maWZvKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoKHZwX2NvbmZpZy0+bXR1ICE9IFZYR0VfSFdfVlBBVEhfVVNFX0ZMQVNIX0RFRkFVTFRfSU5JVElBTF9NVFUpICYmCisJCSgodnBfY29uZmlnLT5tdHUgPCBWWEdFX0hXX1ZQQVRIX01JTl9JTklUSUFMX01UVSkgfHwKKwkJKHZwX2NvbmZpZy0+bXR1ID4gVlhHRV9IV19WUEFUSF9NQVhfSU5JVElBTF9NVFUpKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX01UVTsKKworCWlmICgodnBfY29uZmlnLT5ycGFfc3RyaXBfdmxhbl90YWcgIT0KKwkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfVVNFX0ZMQVNIX0RFRkFVTFQpICYmCisJCSh2cF9jb25maWctPnJwYV9zdHJpcF92bGFuX3RhZyAhPQorCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpICYmCisJCSh2cF9jb25maWctPnJwYV9zdHJpcF92bGFuX3RhZyAhPQorCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19ESVNBQkxFKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBRzsKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9jb25maWdfY2hlY2sgLSBDaGVjayBkZXZpY2UgY29uZmlndXJhdGlvbi4KKyAqIENoZWNrIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2NvbmZpZ19jaGVjayhzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpuZXdfY29uZmlnKQoreworCXUzMiBpOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCisJaWYgKChuZXdfY29uZmlnLT5pbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfSVJRTElORSkgJiYKKwkgICAobmV3X2NvbmZpZy0+aW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX01TSVgpICYmCisJICAgKG5ld19jb25maWctPmludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UKSAmJgorCSAgIChuZXdfY29uZmlnLT5pbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfREVGKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX0lOVFJfTU9ERTsKKworCWlmICgobmV3X2NvbmZpZy0+cnRzX21hY19lbiAhPSBWWEdFX0hXX1JUU19NQUNfRElTQUJMRSkgJiYKKwkgICAobmV3X2NvbmZpZy0+cnRzX21hY19lbiAhPSBWWEdFX0hXX1JUU19NQUNfRU5BQkxFKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX1JUU19NQUNfRU47CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfdnBhdGhfY29uZmlnX2NoZWNrKAorCQkJCSZuZXdfY29uZmlnLT52cF9jb25maWdbaV0pOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogdnhnZV9od19kZXZpY2VfY29uZmlnX2RlZmF1bHRfZ2V0IC0gSW5pdGlhbGl6ZSBkZXZpY2UgY29uZmlnIHdpdGggZGVmYXVsdHMuCisgKiBJbml0aWFsaXplIFRpdGFuIGRldmljZSBjb25maWcgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX2RldmluaXQKK3Z4Z2VfaHdfZGV2aWNlX2NvbmZpZ19kZWZhdWx0X2dldChzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpkZXZpY2VfY29uZmlnKQoreworCXUzMiBpOworCisJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9pbml0aWFsID0KKwkJCQkJVlhHRV9IV19JTklUSUFMX0RNQV9CTE9DS19QT09MX1NJWkU7CisJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9tYXggPSBWWEdFX0hXX01BWF9ETUFfQkxPQ0tfUE9PTF9TSVpFOworCWRldmljZV9jb25maWctPmludHJfbW9kZSA9IFZYR0VfSFdfSU5UUl9NT0RFX0RFRjsKKwlkZXZpY2VfY29uZmlnLT5ydGhfZW4gPSBWWEdFX0hXX1JUSF9ERUZBVUxUOworCWRldmljZV9jb25maWctPnJ0aF9pdF90eXBlID0gVlhHRV9IV19SVEhfSVRfVFlQRV9ERUZBVUxUOworCWRldmljZV9jb25maWctPmRldmljZV9wb2xsX21pbGxpcyA9ICBWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVM7CisJZGV2aWNlX2NvbmZpZy0+cnRzX21hY19lbiA9ICBWWEdFX0hXX1JUU19NQUNfREVGQVVMVDsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udnBfaWQgPSBpOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5taW5fYmFuZHdpZHRoID0KKwkJCQlWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLmVuYWJsZSA9IFZYR0VfSFdfUklOR19ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLnJpbmdfYmxvY2tzID0KKwkJCQlWWEdFX0hXX0RFRl9SSU5HX0JMT0NLUzsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5idWZmZXJfbW9kZSA9CisJCQkJVlhHRV9IV19SSU5HX1JYRF9CVUZGRVJfTU9ERV9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLnNjYXR0ZXJfbW9kZSA9CisJCQkJVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5yeGRzX2xpbWl0ID0KKwkJCQlWWEdFX0hXX0RFRl9SSU5HX1JYRFNfTElNSVQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uZW5hYmxlID0gVlhHRV9IV19GSUZPX0VOQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5maWZvX2Jsb2NrcyA9CisJCQkJVlhHRV9IV19NSU5fRklGT19CTE9DS1M7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8ubWF4X2ZyYWdzID0KKwkJCQlWWEdFX0hXX01BWF9GSUZPX0ZSQUdTOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLm1lbWJsb2NrX3NpemUgPQorCQkJCVZYR0VfSFdfREVGX0ZJRk9fTUVNQkxPQ0tfU0laRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5hbGlnbm1lbnRfc2l6ZSA9CisJCQkJVlhHRV9IV19ERUZfRklGT19BTElHTk1FTlRfU0laRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5pbnRyID0KKwkJCQlWWEdFX0hXX0ZJRk9fUVVFVUVfSU5UUl9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLm5vX3Nub29wX2JpdHMgPQorCQkJCVZYR0VfSFdfRklGT19OT19TTk9PUF9ERUZBVUxUOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLmludHJfZW5hYmxlID0KKwkJCQlWWEdFX0hXX1RJTV9JTlRSX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS5idGltZXJfdmFsID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudGltZXJfYWNfZW4gPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS50aW1lcl9jaV9lbiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnRpbWVyX3JpX2VuID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkucnRpbWVyX3ZhbCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnV0aWxfc2VsID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkubHRpbWVyX3ZhbCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVyYW5nZV9hID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudWVjX2EgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51cmFuZ2VfYiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVlY19iID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudXJhbmdlX2MgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51ZWNfYyA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVlY19kID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkuaW50cl9lbmFibGUgPQorCQkJCVZYR0VfSFdfVElNX0lOVFJfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLmJ0aW1lcl92YWwgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS50aW1lcl9hY19lbiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnRpbWVyX2NpX2VuID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudGltZXJfcmlfZW4gPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS5ydGltZXJfdmFsID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudXRpbF9zZWwgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS5sdGltZXJfdmFsID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudXJhbmdlX2EgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51ZWNfYSA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVyYW5nZV9iID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudWVjX2IgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51cmFuZ2VfYyA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVlY19jID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudWVjX2QgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLm10dSA9CisJCQkJVlhHRV9IV19WUEFUSF9VU0VfRkxBU0hfREVGQVVMVF9JTklUSUFMX01UVTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnBhX3N0cmlwX3ZsYW5fdGFnID0KKwkJCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX1VTRV9GTEFTSF9ERUZBVUxUOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX2h3X2xlZ2FjeV9zd2FwcGVyX3NldCAtIFNldCB0aGUgc3dhcHBlciBiaXRzIGZvciB0aGUgbGVnYWN5IHNlY2lvbi4KKyAqIFNldCB0aGUgc3dhcHBlciBiaXRzIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBsYWdhY3kgc2VjdGlvbi4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2xlZ2FjeV9zd2FwcGVyX3NldChzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKmxlZ2FjeV9yZWcpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gcmVhZHEoJmxlZ2FjeV9yZWctPnRvY19zd2FwcGVyX2ZiKTsKKworCXdtYigpOworCisJc3dpdGNoICh2YWw2NCkgeworCisJY2FzZSBWWEdFX0hXX1NXQVBQRVJfSU5JVElBTF9WQUxVRToKKwkJcmV0dXJuIHN0YXR1czsKKworCWNhc2UgVlhHRV9IV19TV0FQUEVSX0JZVEVfU1dBUFBFRF9CSVRfRkxJUFBFRDoKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JZVEVfU1dBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV9yZF9zd2FwX2VuKTsKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JJVF9GTEFQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3JkX2ZsaXBfZW4pOworCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JZVEVfU1dBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV93cl9zd2FwX2VuKTsKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9XUklURV9CSVRfRkxBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV93cl9mbGlwX2VuKTsKKwkJYnJlYWs7CisKKwljYXNlIFZYR0VfSFdfU1dBUFBFUl9CWVRFX1NXQVBQRUQ6CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfUkVBRF9CWVRFX1NXQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fcmRfc3dhcF9lbik7CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQllURV9TV0FQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3dyX3N3YXBfZW4pOworCQlicmVhazsKKworCWNhc2UgVlhHRV9IV19TV0FQUEVSX0JJVF9GTElQUEVEOgorCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1JFQURfQklUX0ZMQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fcmRfZmxpcF9lbik7CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQklUX0ZMQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fd3JfZmxpcF9lbik7CisJCWJyZWFrOworCX0KKworCXdtYigpOworCisJdmFsNjQgPSByZWFkcSgmbGVnYWN5X3JlZy0+dG9jX3N3YXBwZXJfZmIpOworCisJaWYgKHZhbDY0ICE9IFZYR0VfSFdfU1dBUFBFUl9JTklUSUFMX1ZBTFVFKQorCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9TV0FQUEVSX0NUUkw7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3N3YXBwZXJfc2V0IC0gU2V0IHRoZSBzd2FwcGVyIGJpdHMgZm9yIHRoZSB2cGF0aC4KKyAqIFNldCB0aGUgc3dhcHBlciBiaXRzIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSB2cGF0aC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3N3YXBwZXJfc2V0KHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcpCit7CisjaWZuZGVmIF9fQklHX0VORElBTgorCXU2NCB2YWw2NDsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+dnBhdGhfZ2VuZXJhbF9jZmcxKTsKKwl3bWIoKTsKKwl2YWw2NCB8PSBWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9DVExfQllURV9TV0FQRU47CisJd3JpdGVxKHZhbDY0LCAmdnBhdGhfcmVnLT52cGF0aF9nZW5lcmFsX2NmZzEpOworCXdtYigpOworI2VuZGlmCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfa2RmY19zd2FwcGVyX3NldCAtIFNldCB0aGUgc3dhcHBlciBiaXRzIGZvciB0aGUga2RmYy4KKyAqIFNldCB0aGUgc3dhcHBlciBiaXRzIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSB2cGF0aC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2tkZmNfc3dhcHBlcl9zZXQoCisJc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyBfX2lvbWVtICpsZWdhY3lfcmVnLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcpCit7CisJdTY0IHZhbDY0OworCisJdmFsNjQgPSByZWFkcSgmbGVnYWN5X3JlZy0+cGlmbV93cl9zd2FwX2VuKTsKKworCWlmICh2YWw2NCA9PSBWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQllURV9TV0FQX0VOQUJMRSkgeworCQl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPmtkZmNjdGxfY2ZnMCk7CisJCXdtYigpOworCisJCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfU1dBUEVOX0ZJRk8wCXwKKwkJCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfU1dBUEVOX0ZJRk8xCXwKKwkJCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfU1dBUEVOX0ZJRk8yOworCisJCXdyaXRlcSh2YWw2NCwgJnZwYXRoX3JlZy0+a2RmY2N0bF9jZmcwKTsKKwkJd21iKCk7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiB2eGdlX2h3X21nbXRfZGV2aWNlX2NvbmZpZyAtIFJldHJpZXZlIGRldmljZSBjb25maWd1cmF0aW9uLgorICogR2V0IGRldmljZSBjb25maWd1cmF0aW9uLiBQZXJtaXRzIHRvIHJldHJpZXZlIGF0IHJ1bi10aW1lIGNvbmZpZ3VyYXRpb24KKyAqIHZhbHVlcyB0aGF0IHdlcmUgdXNlZCB0byBpbml0aWFsaXplIGFuZCBjb25maWd1cmUgdGhlIGRldmljZS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19tZ210X2RldmljZV9jb25maWcoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJICAgc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2X2NvbmZpZywgaW50IHNpemUpCit7CisKKwlpZiAoKGhsZGV2ID09IE5VTEwpIHx8IChobGRldi0+bWFnaWMgIT0gVlhHRV9IV19ERVZJQ0VfTUFHSUMpKQorCQlyZXR1cm4gVlhHRV9IV19FUlJfSU5WQUxJRF9ERVZJQ0U7CisKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZykpCisJCXJldHVybiBWWEdFX0hXX0VSUl9WRVJTSU9OX0NPTkZMSUNUOworCisJbWVtY3B5KGRldl9jb25maWcsICZobGRldi0+Y29uZmlnLAorCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZykpOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiB2eGdlX2h3X21nbXRfcmVnX3JlYWQgLSBSZWFkIFRpdGFuIHJlZ2lzdGVyLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21nbXRfcmVnX3JlYWQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkgICAgICBlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSB0eXBlLAorCQkgICAgICB1MzIgaW5kZXgsIHUzMiBvZmZzZXQsIHU2NCAqdmFsdWUpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKChobGRldiA9PSBOVUxMKSB8fCAoaGxkZXYtPm1hZ2ljICE9IFZYR0VfSFdfREVWSUNFX01BR0lDKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0RFVklDRTsKKwkJZ290byBleGl0OworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX2xlZ2FjeToKKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJKnZhbHVlID0gcmVhZHEoKHZvaWQgX19pb21lbSAqKWhsZGV2LT5sZWdhY3lfcmVnICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfdG9jOgorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3RvY19yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQkqdmFsdWUgPSByZWFkcSgodm9pZCBfX2lvbWVtICopaGxkZXYtPnRvY19yZWcgKyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9jb21tb246CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCSp2YWx1ZSA9IHJlYWRxKCh2b2lkIF9faW9tZW0gKilobGRldi0+Y29tbW9uX3JlZyArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbToKKwkJaWYgKCEoaGxkZXYtPmFjY2Vzc19yaWdodHMgJgorCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSkpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCSp2YWx1ZSA9IHJlYWRxKCh2b2lkIF9faW9tZW0gKilobGRldi0+bXJwY2ltX3JlZyArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX3NycGNpbToKKwkJaWYgKCEoaGxkZXYtPmFjY2Vzc19yaWdodHMgJgorCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1NSUENJTSkpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChpbmRleCA+IFZYR0VfSFdfVElUQU5fU1JQQ0lNX1JFR19TUEFDRVMgLSAxKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0lOREVYOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od19zcnBjaW1fcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJKnZhbHVlID0gcmVhZHEoKHZvaWQgX19pb21lbSAqKWhsZGV2LT5zcnBjaW1fcmVnW2luZGV4XSArCisJCQkJb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBtZ210OgorCQlpZiAoKGluZGV4ID4gVlhHRV9IV19USVRBTl9WUE1HTVRfUkVHX1NQQUNFUyAtIDEpIHx8CisJCQkoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQoaW5kZXgpKSkpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSU5ERVg7CisJCQlicmVhazsKKwkJfQorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQkqdmFsdWUgPSByZWFkcSgodm9pZCBfX2lvbWVtICopaGxkZXYtPnZwbWdtdF9yZWdbaW5kZXhdICsKKwkJCQlvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV92cGF0aDoKKwkJaWYgKChpbmRleCA+IFZYR0VfSFdfVElUQU5fVlBBVEhfUkVHX1NQQUNFUyAtIDEpIHx8CisJCQkoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQoaW5kZXgpKSkpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSU5ERVg7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaW5kZXggPiBWWEdFX0hXX1RJVEFOX1ZQQVRIX1JFR19TUEFDRVMgLSAxKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0lOREVYOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQkqdmFsdWUgPSByZWFkcSgodm9pZCBfX2lvbWVtICopaGxkZXYtPnZwYXRoX3JlZ1tpbmRleF0gKworCQkJCW9mZnNldCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfVFlQRTsKKwkJYnJlYWs7CisJfQorCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X21nbXRfcmVnX1dyaXRlIC0gV3JpdGUgVGl0YW4gcmVnaXN0ZXIuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfbWdtdF9yZWdfd3JpdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkgICAgICBlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSB0eXBlLAorCQkgICAgICB1MzIgaW5kZXgsIHUzMiBvZmZzZXQsIHU2NCB2YWx1ZSkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoKGhsZGV2ID09IE5VTEwpIHx8IChobGRldi0+bWFnaWMgIT0gVlhHRV9IV19ERVZJQ0VfTUFHSUMpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfREVWSUNFOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfbGVnYWN5OgorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZXEodmFsdWUsICh2b2lkIF9faW9tZW0gKilobGRldi0+bGVnYWN5X3JlZyArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX3RvYzoKKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od190b2NfcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGVxKHZhbHVlLCAodm9pZCBfX2lvbWVtICopaGxkZXYtPnRvY19yZWcgKyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9jb21tb246CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlcSh2YWx1ZSwgKHZvaWQgX19pb21lbSAqKWhsZGV2LT5jb21tb25fcmVnICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltOgorCQlpZiAoIShobGRldi0+YWNjZXNzX3JpZ2h0cyAmCisJCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNKSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGVxKHZhbHVlLCAodm9pZCBfX2lvbWVtICopaGxkZXYtPm1ycGNpbV9yZWcgKyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9zcnBjaW06CisJCWlmICghKGhsZGV2LT5hY2Nlc3NfcmlnaHRzICYKKwkJCVZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9TUlBDSU0pKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT047CisJCQlicmVhazsKKwkJfQorCQlpZiAoaW5kZXggPiBWWEdFX0hXX1RJVEFOX1NSUENJTV9SRUdfU1BBQ0VTIC0gMSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9JTkRFWDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfc3JwY2ltX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlcSh2YWx1ZSwgKHZvaWQgX19pb21lbSAqKWhsZGV2LT5zcnBjaW1fcmVnW2luZGV4XSArCisJCQlvZmZzZXQpOworCisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX3ZwbWdtdDoKKwkJaWYgKChpbmRleCA+IFZYR0VfSFdfVElUQU5fVlBNR01UX1JFR19TUEFDRVMgLSAxKSB8fAorCQkJKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKGluZGV4KSkpKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0lOREVYOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGVxKHZhbHVlLCAodm9pZCBfX2lvbWVtICopaGxkZXYtPnZwbWdtdF9yZWdbaW5kZXhdICsKKwkJCW9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX3ZwYXRoOgorCQlpZiAoKGluZGV4ID4gVlhHRV9IV19USVRBTl9WUEFUSF9SRUdfU1BBQ0VTLTEpIHx8CisJCQkoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQoaW5kZXgpKSkpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSU5ERVg7CisJCQlicmVhazsKKwkJfQorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlcSh2YWx1ZSwgKHZvaWQgX19pb21lbSAqKWhsZGV2LT52cGF0aF9yZWdbaW5kZXhdICsKKwkJCW9mZnNldCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfVFlQRTsKKwkJYnJlYWs7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X2ZpZm9fbWVtcG9vbF9pdGVtX2FsbG9jIC0gQWxsb2NhdGUgTGlzdCBibG9ja3MgZm9yIFR4RAorICogbGlzdCBjYWxsYmFjaworICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsYmFjayBwYXNzZWQgdG8gX192eGdlX2h3X21lbXBvb2xfY3JlYXRlIHRvIGNyZWF0ZSBtZW1vcnkKKyAqIHBvb2wgZm9yIFR4RCBsaXN0CisgKi8KK3N0YXRpYyB2b2lkCitfX3Z4Z2VfaHdfZmlmb19tZW1wb29sX2l0ZW1fYWxsb2MoCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCisJdTMyIG1lbWJsb2NrX2luZGV4LCBzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCwKKwl1MzIgaW5kZXgsIHUzMiBpc19sYXN0KQoreworCXUzMiBtZW1ibG9ja19pdGVtX2lkeDsKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2ICp0eGRsX3ByaXY7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHAgPQorCQkoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKiltZW1wb29saC0+aXRlbXNfYXJyW2luZGV4XTsKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8gPQorCQkJKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqKW1lbXBvb2xoLT51c2VyZGF0YTsKKwl2b2lkICptZW1ibG9jayA9IG1lbXBvb2xoLT5tZW1ibG9ja3NfYXJyW21lbWJsb2NrX2luZGV4XTsKKworCXZ4Z2VfYXNzZXJ0KHR4ZHApOworCisJdHhkcC0+aG9zdF9jb250cm9sID0gKHU2NCkgKHNpemVfdCkKKwlfX3Z4Z2VfaHdfbWVtcG9vbF9pdGVtX3ByaXYobWVtcG9vbGgsIG1lbWJsb2NrX2luZGV4LCB0eGRwLAorCQkJCQkmbWVtYmxvY2tfaXRlbV9pZHgpOworCisJdHhkbF9wcml2ID0gX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KGZpZm8sIHR4ZHApOworCisJdnhnZV9hc3NlcnQodHhkbF9wcml2KTsKKworCWZpZm8tPmNoYW5uZWwucmVzZXJ2ZV9hcnJbZmlmby0+Y2hhbm5lbC5yZXNlcnZlX3B0ciAtIDEgLSBpbmRleF0gPSB0eGRwOworCisJLyogcHJlLWZvcm1hdCBIVydzIFR4REwncyBwcml2YXRlICovCisJdHhkbF9wcml2LT5kbWFfb2Zmc2V0ID0gKGNoYXIgKil0eGRwIC0gKGNoYXIgKiltZW1ibG9jazsKKwl0eGRsX3ByaXYtPmRtYV9hZGRyID0gZG1hX29iamVjdC0+YWRkciArIHR4ZGxfcHJpdi0+ZG1hX29mZnNldDsKKwl0eGRsX3ByaXYtPmRtYV9oYW5kbGUgPSBkbWFfb2JqZWN0LT5oYW5kbGU7CisJdHhkbF9wcml2LT5tZW1ibG9jayAgID0gbWVtYmxvY2s7CisJdHhkbF9wcml2LT5maXJzdF90eGRwID0gdHhkcDsKKwl0eGRsX3ByaXYtPm5leHRfdHhkbF9wcml2ID0gTlVMTDsKKwl0eGRsX3ByaXYtPmFsbG9jX2ZyYWdzID0gMDsKKworCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od19maWZvX2NyZWF0ZSAtIENyZWF0ZSBhIEZJRk8KKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBGSUZPIGFuZCBpbml0aWFsaXplcyBpdC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2ZpZm9fY3JlYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwkJICAgICAgc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRyICphdHRyKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm87CisJc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcgKmNvbmZpZzsKKwl1MzIgdHhkbF9zaXplLCB0eGRsX3Blcl9tZW1ibG9jazsKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2NicyBmaWZvX21wX2NhbGxiYWNrOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAoYXR0ciA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKwl2cGF0aCA9IHZwLT52cGF0aDsKKwljb25maWcgPSAmdnBhdGgtPmhsZGV2LT5jb25maWcudnBfY29uZmlnW3ZwYXRoLT52cF9pZF0uZmlmbzsKKworCXR4ZGxfc2l6ZSA9IGNvbmZpZy0+bWF4X2ZyYWdzICogc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkKTsKKworCXR4ZGxfcGVyX21lbWJsb2NrID0gY29uZmlnLT5tZW1ibG9ja19zaXplIC8gdHhkbF9zaXplOworCisJZmlmbyA9IChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKilfX3Z4Z2VfaHdfY2hhbm5lbF9hbGxvY2F0ZSh2cCwKKwkJCQkJVlhHRV9IV19DSEFOTkVMX1RZUEVfRklGTywKKwkJCQkJY29uZmlnLT5maWZvX2Jsb2NrcyAqIHR4ZGxfcGVyX21lbWJsb2NrLAorCQkJCQlhdHRyLT5wZXJfdHhkbF9zcGFjZSwgYXR0ci0+dXNlcmRhdGEpOworCisJaWYgKGZpZm8gPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGgtPmZpZm9oID0gZmlmbzsKKwlmaWZvLT5ub2ZsX2RiID0gdnBhdGgtPm5vZmxfZGI7CisKKwlmaWZvLT52cF9pZCA9IHZwYXRoLT52cF9pZDsKKwlmaWZvLT52cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCWZpZm8tPnN0YXRzID0gJnZwYXRoLT5zd19zdGF0cy0+Zmlmb19zdGF0czsKKworCWZpZm8tPmNvbmZpZyA9IGNvbmZpZzsKKworCS8qIGFwcGx5ICJpbnRlcnJ1cHRzIHBlciB0eGRsIiBhdHRyaWJ1dGUgKi8KKwlmaWZvLT5pbnRlcnJ1cHRfdHlwZSA9IFZYR0VfSFdfRklGT19UWERfSU5UX1RZUEVfVVRJTFo7CisKKwlpZiAoZmlmby0+Y29uZmlnLT5pbnRyKQorCQlmaWZvLT5pbnRlcnJ1cHRfdHlwZSA9IFZYR0VfSFdfRklGT19UWERfSU5UX1RZUEVfUEVSX0xJU1Q7CisKKwlmaWZvLT5ub19zbm9vcF9iaXRzID0gY29uZmlnLT5ub19zbm9vcF9iaXRzOworCisJLyoKKwkgKiBGSUZPIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5OgorCSAqCisJICogVHhETCBzcGxpdCBpbnRvIHRocmVlIGluZGVwZW5kZW50IHBhcnRzOgorCSAqCS0gc2V0IG9mIFR4RCdzCisJICoJLSBUeEQgSFcgcHJpdmF0ZSBwYXJ0CisJICoJLSBkcml2ZXIgcHJpdmF0ZSBwYXJ0CisJICoKKwkgKiBBZGFwdGF0aXZlIG1lbW9yeSBhbGxvY2F0aW9uIHVzZWQuIGkuZS4gTWVtb3J5IGFsbG9jYXRlZCBvbgorCSAqIGRlbWFuZCB3aXRoIHRoZSBzaXplIHdoaWNoIHdpbGwgZml0IGludG8gb25lIG1lbW9yeSBibG9jay4KKwkgKiBPbmUgbWVtb3J5IGJsb2NrIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmUgVHhETC4KKwkgKgorCSAqIER1cmluZyAicmVzZXJ2ZSIgb3BlcmF0aW9ucyBtb3JlIG1lbW9yeSBjYW4gYmUgYWxsb2NhdGVkIG9uIGRlbWFuZAorCSAqIGZvciBleGFtcGxlIGR1ZSB0byBGSUZPIGZ1bGwgY29uZGl0aW9uLgorCSAqCisJICogUG9vbCBvZiBtZW1vcnkgbWVtYmxvY2tzIG5ldmVyIHNocmlua3MgZXhjZXB0IGluIF9fdnhnZV9od19maWZvX2Nsb3NlCisJICogcm91dGluZSB3aGljaCB3aWxsIGVzc2VudGlhbGx5IHN0b3AgdGhlIGNoYW5uZWwgYW5kIGZyZWUgcmVzb3VyY2VzLgorCSAqLworCisJLyogVHhETCBjb21tb24gcHJpdmF0ZSBzaXplID09IFR4REwgcHJpdmF0ZSAgKyAgZHJpdmVyIHByaXZhdGUgKi8KKwlmaWZvLT5wcml2X3NpemUgPQorCQlzaXplb2Yoc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdikgKyBhdHRyLT5wZXJfdHhkbF9zcGFjZTsKKwlmaWZvLT5wcml2X3NpemUgPSAoKGZpZm8tPnByaXZfc2l6ZSAgKyAgVlhHRV9DQUNIRV9MSU5FX1NJWkUgLSAxKSAvCisJCQlWWEdFX0NBQ0hFX0xJTkVfU0laRSkgKiBWWEdFX0NBQ0hFX0xJTkVfU0laRTsKKworCWZpZm8tPnBlcl90eGRsX3NwYWNlID0gYXR0ci0+cGVyX3R4ZGxfc3BhY2U7CisKKwkvKiByZWNvbXB1dGUgdHhkbCBzaXplIHRvIGJlIGNhY2hlbGluZSBhbGlnbmVkICovCisJZmlmby0+dHhkbF9zaXplID0gdHhkbF9zaXplOworCWZpZm8tPnR4ZGxfcGVyX21lbWJsb2NrID0gdHhkbF9wZXJfbWVtYmxvY2s7CisKKwlmaWZvLT50eGRsX3Rlcm0gPSBhdHRyLT50eGRsX3Rlcm07CisJZmlmby0+Y2FsbGJhY2sgPSBhdHRyLT5jYWxsYmFjazsKKworCWlmIChmaWZvLT50eGRsX3Blcl9tZW1ibG9jayA9PSAwKSB7CisJCV9fdnhnZV9od19maWZvX2RlbGV0ZSh2cCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfQkxPQ0tfU0laRTsKKwkJZ290byBleGl0OworCX0KKworCWZpZm9fbXBfY2FsbGJhY2suaXRlbV9mdW5jX2FsbG9jID0gX192eGdlX2h3X2ZpZm9fbWVtcG9vbF9pdGVtX2FsbG9jOworCisJZmlmby0+bWVtcG9vbCA9CisJCV9fdnhnZV9od19tZW1wb29sX2NyZWF0ZSh2cGF0aC0+aGxkZXYsCisJCQlmaWZvLT5jb25maWctPm1lbWJsb2NrX3NpemUsCisJCQlmaWZvLT50eGRsX3NpemUsCisJCQlmaWZvLT5wcml2X3NpemUsCisJCQkoZmlmby0+Y29uZmlnLT5maWZvX2Jsb2NrcyAqIGZpZm8tPnR4ZGxfcGVyX21lbWJsb2NrKSwKKwkJCShmaWZvLT5jb25maWctPmZpZm9fYmxvY2tzICogZmlmby0+dHhkbF9wZXJfbWVtYmxvY2spLAorCQkJJmZpZm9fbXBfY2FsbGJhY2ssCisJCQlmaWZvKTsKKworCWlmIChmaWZvLT5tZW1wb29sID09IE5VTEwpIHsKKwkJX192eGdlX2h3X2ZpZm9fZGVsZXRlKHZwKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od19jaGFubmVsX2luaXRpYWxpemUoJmZpZm8tPmNoYW5uZWwpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQlfX3Z4Z2VfaHdfZmlmb19kZWxldGUodnApOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnhnZV9hc3NlcnQoZmlmby0+Y2hhbm5lbC5yZXNlcnZlX3B0cik7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZmlmb19hYm9ydCAtIFJldHVybnMgdGhlIFR4RAorICogVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHRoZSBUeERzIG9mIGZpZm8KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfZmlmb19hYm9ydChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8pCit7CisJdm9pZCAqdHhkbGg7CisKKwlmb3IgKDs7KSB7CisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfdHJ5X2NvbXBsZXRlKCZmaWZvLT5jaGFubmVsLCAmdHhkbGgpOworCisJCWlmICh0eGRsaCA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJdnhnZV9od19jaGFubmVsX2R0cl9jb21wbGV0ZSgmZmlmby0+Y2hhbm5lbCk7CisKKwkJaWYgKGZpZm8tPnR4ZGxfdGVybSkgeworCQkJZmlmby0+dHhkbF90ZXJtKHR4ZGxoLAorCQkJVlhHRV9IV19UWERMX1NUQVRFX1BPU1RFRCwKKwkJCWZpZm8tPmNoYW5uZWwudXNlcmRhdGEpOworCQl9CisKKwkJdnhnZV9od19jaGFubmVsX2R0cl9mcmVlKCZmaWZvLT5jaGFubmVsLCB0eGRsaCk7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZmlmb19yZXNldCAtIFJlc2V0cyB0aGUgZmlmbworICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIGZpZm8gZHVyaW5nIHZwYXRoIHJlc2V0IG9wZXJhdGlvbgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19maWZvX3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlfX3Z4Z2VfaHdfZmlmb19hYm9ydChmaWZvKTsKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfY2hhbm5lbF9yZXNldCgmZmlmby0+Y2hhbm5lbCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X2ZpZm9fZGVsZXRlIC0gUmVtb3ZlcyB0aGUgRklGTworICogVGhpcyBmdW5jdGlvbiBmcmVldXAgdGhlIG1lbW9yeSBwb29sIGFuZCByZW1vdmVzIHRoZSBGSUZPCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X2ZpZm9fZGVsZXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8gPSB2cC0+dnBhdGgtPmZpZm9oOworCisJX192eGdlX2h3X2ZpZm9fYWJvcnQoZmlmbyk7CisKKwlpZiAoZmlmby0+bWVtcG9vbCkKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShmaWZvLT5tZW1wb29sKTsKKworCXZwLT52cGF0aC0+Zmlmb2ggPSBOVUxMOworCisJX192eGdlX2h3X2NoYW5uZWxfZnJlZSgmZmlmby0+Y2hhbm5lbCk7CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9wY2lfcmVhZCAtIFJlYWQgdGhlIGNvbnRlbnQgb2YgZ2l2ZW4gYWRkcmVzcworICogICAgICAgICAgICAgICAgICAgICAgICAgIGluIHBjaSBjb25maWcgc3BhY2UuCisgKiBSZWFkIGZyb20gdGhlIHZwYXRoIHBjaSBjb25maWcgc3BhY2UuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9wY2lfcmVhZChzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCSB1MzIgcGh5X2Z1bmNfMCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCXZhbDY0ID0JVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19DRkcxX0FERFJFU1Mob2Zmc2V0KTsKKworCWlmIChwaHlfZnVuY18wKQorCQl2YWw2NCB8PSBWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX0NGRzFfU0VMX0ZVTkMwOworCisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5wY2lfY29uZmlnX2FjY2Vzc19jZmcxKTsKKwl3bWIoKTsKKwl3cml0ZXEoVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19DRkcyX1JFUSwKKwkJCSZ2cF9yZWctPnBjaV9jb25maWdfYWNjZXNzX2NmZzIpOworCXdtYigpOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsKAorCQkJJnZwX3JlZy0+cGNpX2NvbmZpZ19hY2Nlc3NfY2ZnMiwKKwkJCVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwgVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5wY2lfY29uZmlnX2FjY2Vzc19zdGF0dXMpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19TVEFUVVNfQUNDRVNTX0VSUikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCSp2YWwgPSAwOworCX0gZWxzZQorCQkqdmFsID0gKHUzMil2eGdlX2JWQUxuKHZhbDY0LCAzMiwgMzIpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX2Z1bmNfaWRfZ2V0IC0gR2V0IHRoZSBmdW5jdGlvbiBpZCBvZiB0aGUgdnBhdGguCisgKiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBudW1iZXIgb2YgdGhlIHZwYXRoLgorICovCit1MzIKK19fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldCh1MzIgdnBfaWQsCisJc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZyBfX2lvbWVtICp2cG1nbXRfcmVnKQoreworCXU2NCB2YWw2NDsKKworCXZhbDY0ID0gcmVhZHEoJnZwbWdtdF9yZWctPnZwYXRoX3RvX2Z1bmNfbWFwX2NmZzEpOworCisJcmV0dXJuCisJICh1MzIpVlhHRV9IV19WUEFUSF9UT19GVU5DX01BUF9DRkcxX0dFVF9WUEFUSF9UT19GVU5DX01BUF9DRkcxKHZhbDY0KTsKK30KKworLyoKKyAqIF9fdnhnZV9od19yZWFkX3J0c19kcyAtIFByb2dyYW0gUlRTIHN0ZWVyaW5nIGNyaXRpZXJpYQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fdnhnZV9od19yZWFkX3J0c19kcyhzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAorCQkgICAgICB1NjQgZHRhX3N0cnVjdF9zZWwpCit7CisJd3JpdGVxKDAsICZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisJd21iKCk7CisJd3JpdGVxKGR0YV9zdHJ1Y3Rfc2VsLCAmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwl3cml0ZXEoMCwgJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJd21iKCk7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfY2FyZF9pbmZvX2dldCAtIEdldCB0aGUgc2VyaWFsIG51bWJlcnMsCisgKiBwYXJ0IG51bWJlciBhbmQgcHJvZHVjdCBkZXNjcmlwdGlvbi4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2NhcmRfaW5mb19nZXQoCisJdTMyIHZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gKmh3X2luZm8pCit7CisJdTMyIGksIGo7CisJdTY0IHZhbDY0OworCXU2NCBkYXRhMSA9IDBVTEw7CisJdTY0IGRhdGEyID0gMFVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJdTggKnNlcmlhbF9udW1iZXIgPSBod19pbmZvLT5zZXJpYWxfbnVtYmVyOworCXU4ICpwYXJ0X251bWJlciA9IGh3X2luZm8tPnBhcnRfbnVtYmVyOworCXU4ICpwcm9kdWN0X2Rlc2MgPSBod19pbmZvLT5wcm9kdWN0X2Rlc2M7CisKKwlfX3Z4Z2VfaHdfcmVhZF9ydHNfZHModnBhdGhfcmVnLAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX1NFUklBTF9OVU1CRVIpOworCisJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9NRU1PX0VOVFJZKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTCgKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCgwKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQlWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlyZXR1cm4gc3RhdHVzOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7CisJCWRhdGExID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJCSgodTY0ICopc2VyaWFsX251bWJlcilbMF0gPSBiZTY0X3RvX2NwdShkYXRhMSk7CisKKwkJZGF0YTIgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKwkJKCh1NjQgKilzZXJpYWxfbnVtYmVyKVsxXSA9IGJlNjRfdG9fY3B1KGRhdGEyKTsKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwl9IGVsc2UKKwkJKnNlcmlhbF9udW1iZXIgPSAwOworCisJX192eGdlX2h3X3JlYWRfcnRzX2RzKHZwYXRoX3JlZywKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fUEFSVF9OVU1CRVIpOworCisJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9NRU1PX0VOVFJZKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTCgKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCgwKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQlWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlyZXR1cm4gc3RhdHVzOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7CisKKwkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwkJKCh1NjQgKilwYXJ0X251bWJlcilbMF0gPSBiZTY0X3RvX2NwdShkYXRhMSk7CisKKwkJZGF0YTIgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKwkJKCh1NjQgKilwYXJ0X251bWJlcilbMV0gPSBiZTY0X3RvX2NwdShkYXRhMik7CisKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKworCX0gZWxzZQorCQkqcGFydF9udW1iZXIgPSAwOworCisJaiA9IDA7CisKKwlmb3IgKGkgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX0RFU0NfMDsKKwkgICAgIGkgPD0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9ERVNDXzM7IGkrKykgeworCisJCV9fdnhnZV9od19yZWFkX3J0c19kcyh2cGF0aF9yZWcsIGkpOworCisJCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfTUVNT19FTlRSWSkgfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7CisKKwkJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJcmV0dXJuIHN0YXR1czsKKworCQl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisKKwkJaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7CisKKwkJCWRhdGExID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJCQkoKHU2NCAqKXByb2R1Y3RfZGVzYylbaisrXSA9IGJlNjRfdG9fY3B1KGRhdGExKTsKKworCQkJZGF0YTIgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKwkJCSgodTY0ICopcHJvZHVjdF9kZXNjKVtqKytdID0gYmU2NF90b19jcHUoZGF0YTIpOworCisJCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCQl9IGVsc2UKKwkJCSpwcm9kdWN0X2Rlc2MgPSAwOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfZndfdmVyX2dldCAtIEdldCB0aGUgZncgdmVyc2lvbgorICogUmV0dXJucyBGVyBWZXJzaW9uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9md192ZXJfZ2V0KAorCXUzMiB2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvICpod19pbmZvKQoreworCXU2NCB2YWw2NDsKKwl1NjQgZGF0YTEgPSAwVUxMOworCXU2NCBkYXRhMiA9IDBVTEw7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3ZlcnNpb24gKmZ3X3ZlcnNpb24gPSAmaHdfaW5mby0+ZndfdmVyc2lvbjsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfZGF0ZSAqZndfZGF0ZSA9ICZod19pbmZvLT5md19kYXRlOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV92ZXJzaW9uICpmbGFzaF92ZXJzaW9uID0gJmh3X2luZm8tPmZsYXNoX3ZlcnNpb247CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2RhdGUgKmZsYXNoX2RhdGUgPSAmaHdfaW5mby0+Zmxhc2hfZGF0ZTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfRU5UUlkpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTykgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7CisKKwkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwkJZGF0YTIgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKworCQlmd19kYXRlLT5kYXkgPQorCQkJKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9EQVkoCisJCQkJCQlkYXRhMSk7CisJCWZ3X2RhdGUtPm1vbnRoID0KKwkJCSh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTU9OVEgoCisJCQkJCQlkYXRhMSk7CisJCWZ3X2RhdGUtPnllYXIgPQorCQkJKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9ZRUFSKAorCQkJCQkJZGF0YTEpOworCisJCXNucHJpbnRmKGZ3X2RhdGUtPmRhdGUsIFZYR0VfSFdfRldfU1RSTEVOLCAiJTIuMmQvJTIuMmQvJTQuNGQiLAorCQkJZndfZGF0ZS0+bW9udGgsIGZ3X2RhdGUtPmRheSwgZndfZGF0ZS0+eWVhcik7CisKKwkJZndfdmVyc2lvbi0+bWFqb3IgPQorCQkgICAgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9NQUpPUihkYXRhMSk7CisJCWZ3X3ZlcnNpb24tPm1pbm9yID0KKwkJICAgICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTUlOT1IoZGF0YTEpOworCQlmd192ZXJzaW9uLT5idWlsZCA9CisJCSAgICAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX0JVSUxEKGRhdGExKTsKKworCQlzbnByaW50Zihmd192ZXJzaW9uLT52ZXJzaW9uLCBWWEdFX0hXX0ZXX1NUUkxFTiwgIiVkLiVkLiVkIiwKKwkJICAgIGZ3X3ZlcnNpb24tPm1ham9yLCBmd192ZXJzaW9uLT5taW5vciwgZndfdmVyc2lvbi0+YnVpbGQpOworCisJCWZsYXNoX2RhdGUtPmRheSA9CisJCSAgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9EQVkoZGF0YTIpOworCQlmbGFzaF9kYXRlLT5tb250aCA9CisJCSAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01PTlRIKGRhdGEyKTsKKwkJZmxhc2hfZGF0ZS0+eWVhciA9CisJCSAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX1lFQVIoZGF0YTIpOworCisJCXNucHJpbnRmKGZsYXNoX2RhdGUtPmRhdGUsIFZYR0VfSFdfRldfU1RSTEVOLAorCQkJIiUyLjJkLyUyLjJkLyU0LjRkIiwKKwkJCWZsYXNoX2RhdGUtPm1vbnRoLCBmbGFzaF9kYXRlLT5kYXksIGZsYXNoX2RhdGUtPnllYXIpOworCisJCWZsYXNoX3ZlcnNpb24tPm1ham9yID0KKwkJICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfTUFKT1IoZGF0YTIpOworCQlmbGFzaF92ZXJzaW9uLT5taW5vciA9CisJCSAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01JTk9SKGRhdGEyKTsKKwkJZmxhc2hfdmVyc2lvbi0+YnVpbGQgPQorCQkgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9CVUlMRChkYXRhMik7CisKKwkJc25wcmludGYoZmxhc2hfdmVyc2lvbi0+dmVyc2lvbiwgVlhHRV9IV19GV19TVFJMRU4sICIlZC4lZC4lZCIsCisJCQlmbGFzaF92ZXJzaW9uLT5tYWpvciwgZmxhc2hfdmVyc2lvbi0+bWlub3IsCisJCQlmbGFzaF92ZXJzaW9uLT5idWlsZCk7CisKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKworCX0gZWxzZQorCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfcGNpX2Z1bmNfbW9kZV9nZXQgLSBHZXQgdGhlIHBjaSBtb2RlCisgKiBSZXR1cm5zIHBjaSBmdW5jdGlvbiBtb2RlCisgKi8KK3U2NAorX192eGdlX2h3X3ZwYXRoX3BjaV9mdW5jX21vZGVfZ2V0KAorCXUzMiAgdnBfaWQsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZykKK3sKKwl1NjQgdmFsNjQ7CisJdTY0IGRhdGExID0gMFVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlfX3Z4Z2VfaHdfcmVhZF9ydHNfZHModnBhdGhfcmVnLAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX1BDSV9NT0RFKTsKKworCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfTUVNT19FTlRSWSkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTykgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7CisJCWRhdGExID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJfSBlbHNlIHsKKwkJZGF0YTEgPSAwOworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJfQorZXhpdDoKKwlyZXR1cm4gZGF0YTE7Cit9CisKKy8qKgorICogdnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQgLSBGbGljayAoYmxpbmspIGxpbmsgTEVELgorICogQGhsZGV2OiBIVyBkZXZpY2UuCisgKiBAb25fb2ZmOiBUUlVFIGlmIGZsaWNrZXJpbmcgdG8gYmUgb24sIEZBTFNFIHRvIGJlIG9mZgorICoKKyAqIEZsaWNrZXIgdGhlIGxpbmsgTEVELgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV9mbGlja19saW5rX2xlZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkgICAgICAgdTY0IG9uX29mZikKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAoaGxkZXYgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0RFVklDRTsKKwkJZ290byBleGl0OworCX0KKworCXZwX3JlZyA9IGhsZGV2LT52cGF0aF9yZWdbaGxkZXYtPmZpcnN0X3ZwX2lkXTsKKworCXdyaXRlcSgwLCAmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCXdtYigpOworCXdyaXRlcShvbl9vZmYsICZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCXdyaXRlcSgwLCAmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKwl3bWIoKTsKKworCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xFRF9DT05UUk9MKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTCgKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCgwKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQlWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9nZXQgLSBHZXQgdGhlIGVudHJpZXMgZnJvbSBSVFMgYWNjZXNzIHRhYmxlcworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCisJdTMyIGFjdGlvbiwgdTMyIHJ0c190YWJsZSwgdTMyIG9mZnNldCwgdTY0ICpkYXRhMSwgdTY0ICpkYXRhMikKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGggPSB2cC0+dnBhdGg7CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKGFjdGlvbikgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwocnRzX3RhYmxlKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVChvZmZzZXQpOworCisJaWYgKChydHNfdGFibGUgPT0KKwkJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9TT0xPX0lUKSB8fAorCSAgICAocnRzX3RhYmxlID09CisJCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpIHx8CisJICAgIChydHNfdGFibGUgPT0KKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NQVNLKSB8fAorCSAgICAocnRzX3RhYmxlID09CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfS0VZKSkgeworCQl2YWw2NCA9IHZhbDY0IHwJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfVEFCTEVfU0VMOworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQl2cGF0aC0+aGxkZXYtPmNvbmZpZy5kZXZpY2VfcG9sbF9taWxsaXMpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKKworCQkqZGF0YTEgPSByZWFkcSgmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKworCQlpZiAoKHJ0c190YWJsZSA9PQorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpIHx8CisJCShydHNfdGFibGUgPT0KKwkJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVCkpIHsKKwkJCSpkYXRhMiA9IHJlYWRxKCZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCQl9CisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJfSBlbHNlCisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0IC0gU2V0IHRoZSBlbnRyaWVzIG9mIFJUUyBhY2Nlc3MgdGFibGVzCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgdTMyIGFjdGlvbiwgdTMyIHJ0c190YWJsZSwKKwl1MzIgb2Zmc2V0LCB1NjQgZGF0YTEsIHU2NCBkYXRhMikKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisKKwl3cml0ZXEoZGF0YTEsICZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCXdtYigpOworCisJaWYgKChydHNfdGFibGUgPT0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBKSB8fAorCSAgICAocnRzX3RhYmxlID09CisJCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpKSB7CisJCXdyaXRlcShkYXRhMiwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJCXdtYigpOworCX0KKworCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKGFjdGlvbikgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwocnRzX3RhYmxlKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVChvZmZzZXQpOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCXZwYXRoLT5obGRldi0+Y29uZmlnLmRldmljZV9wb2xsX21pbGxpcyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwllbHNlCisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9hZGRyX2dldCAtIEdldCB0aGUgaHcgYWRkcmVzcyBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICBmcm9tIE1BQyBhZGRyZXNzIHRhYmxlLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfYWRkcl9nZXQoCisJdTMyIHZwX2lkLCBzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sIHU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSkKK3sKKwl1MzIgaTsKKwl1NjQgdmFsNjQ7CisJdTY0IGRhdGExID0gMFVMTDsKKwl1NjQgZGF0YTIgPSAwVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTElTVF9GSVJTVF9FTlRSWSkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7CisKKwkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwkJZGF0YTIgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKworCQlkYXRhMSA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfREFfTUFDX0FERFIoZGF0YTEpOworCQlkYXRhMiA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfREFfTUFDX0FERFJfTUFTSygKKwkJCQkJCQlkYXRhMik7CisKKwkJZm9yIChpID0gRVRIX0FMRU47IGkgPiAwOyBpLS0pIHsKKwkJCW1hY2FkZHJbaS0xXSA9ICh1OCkoZGF0YTEgJiAweEZGKTsKKwkJCWRhdGExID4+PSA4OworCisJCQltYWNhZGRyX21hc2tbaS0xXSA9ICh1OCkoZGF0YTIgJiAweEZGKTsKKwkJCWRhdGEyID4+PSA4OworCQl9CisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJfSBlbHNlCisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9zZXQgLSBTZXQvY29uZmlndXJlIFJUUyBoYXNoaW5nLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9zZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCisJCQllbnVtIHZ4Z2VfaHdfcnRoX2FsZ29yaXRtcyBhbGdvcml0aG0sCisJCQlzdHJ1Y3QgdnhnZV9od19ydGhfaGFzaF90eXBlcyAqaGFzaF90eXBlLAorCQkJdTE2IGJ1Y2tldF9zaXplKQoreworCXU2NCBkYXRhMCwgZGF0YTE7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX2dldCh2cCwKKwkJICAgICBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9FTlRSWSwKKwkJICAgICBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0dFTl9DRkcsCisJCQkwLCAmZGF0YTAsICZkYXRhMSk7CisKKwlkYXRhMCAmPSB+KFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0JVQ0tFVF9TSVpFKDB4ZikgfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUxHX1NFTCgweDMpKTsKKworCWRhdGEwIHw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9FTiB8CisJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQlVDS0VUX1NJWkUoYnVja2V0X3NpemUpIHwKKwlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BTEdfU0VMKGFsZ29yaXRobSk7CisKKwlpZiAoaGFzaF90eXBlLT5oYXNoX3R5cGVfdGNwaXB2NF9lbikKKwkJZGF0YTAgfD0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX1RDUF9JUFY0X0VOOworCisJaWYgKGhhc2hfdHlwZS0+aGFzaF90eXBlX2lwdjRfZW4pCisJCWRhdGEwIHw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9JUFY0X0VOOworCisJaWYgKGhhc2hfdHlwZS0+aGFzaF90eXBlX3RjcGlwdjZfZW4pCisJCWRhdGEwIHw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9UQ1BfSVBWNl9FTjsKKworCWlmIChoYXNoX3R5cGUtPmhhc2hfdHlwZV9pcHY2X2VuKQorCQlkYXRhMCB8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfSVBWNl9FTjsKKworCWlmIChoYXNoX3R5cGUtPmhhc2hfdHlwZV90Y3BpcHY2ZXhfZW4pCisJCWRhdGEwIHw9CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9UQ1BfSVBWNl9FWF9FTjsKKworCWlmIChoYXNoX3R5cGUtPmhhc2hfdHlwZV9pcHY2ZXhfZW4pCisJCWRhdGEwIHw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9JUFY2X0VYX0VOOworCisJaWYgKFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9BQ1RJVkVfVEFCTEUoZGF0YTApKQorCQlkYXRhMCAmPSB+VlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUNUSVZFX1RBQkxFOworCWVsc2UKKwkJZGF0YTAgfD0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUNUSVZFX1RBQkxFOworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQodnAsCisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9XUklURV9FTlRSWSwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9HRU5fQ0ZHLAorCQkwLCBkYXRhMCwgMCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkCit2eGdlX2h3X3J0c19ydGhfZGF0YTBfZGF0YTFfZ2V0KHUzMiBqLCB1NjQgKmRhdGEwLCB1NjQgKmRhdGExLAorCQkJCXUxNiBmbGFnLCB1OCAqaXRhYmxlKQoreworCXN3aXRjaCAoZmxhZykgeworCWNhc2UgMToKKwkJKmRhdGEwID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMF9CVUNLRVRfTlVNKGopfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMF9FTlRSWV9FTiB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0wX0JVQ0tFVF9EQVRBKAorCQkJaXRhYmxlW2pdKTsKKwljYXNlIDI6CisJCSpkYXRhMCB8PQorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMV9CVUNLRVRfTlVNKGopfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMV9FTlRSWV9FTiB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0xX0JVQ0tFVF9EQVRBKAorCQkJaXRhYmxlW2pdKTsKKwljYXNlIDM6CisJCSpkYXRhMSA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTBfQlVDS0VUX05VTShqKXwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTBfRU5UUllfRU4gfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMF9CVUNLRVRfREFUQSgKKwkJCWl0YWJsZVtqXSk7CisJY2FzZSA0OgorCQkqZGF0YTEgfD0KKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTFfQlVDS0VUX05VTShqKXwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTFfRU5UUllfRU4gfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMV9CVUNLRVRfREFUQSgKKwkJCWl0YWJsZVtqXSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KK30KKy8qCisgKiB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfaXRhYmxlX3NldCAtIFNldC9jb25maWd1cmUgaW5kaXJlY3Rpb24gdGFibGUgKElUKS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfaXRhYmxlX3NldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICoqdnBhdGhfaGFuZGxlcywKKwkJCXUzMiB2cGF0aF9jb3VudCwKKwkJCXU4ICptdGFibGUsCisJCQl1OCAqaXRhYmxlLAorCQkJdTMyIGl0YWJsZV9zaXplKQoreworCXUzMiBpLCBqLCBhY3Rpb24sIHJ0c190YWJsZTsKKwl1NjQgZGF0YTA7CisJdTY0IGRhdGExOworCXUzMiBtYXhfZW50cmllczsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwID0gdnBhdGhfaGFuZGxlc1swXTsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWF4X2VudHJpZXMgPSAoKCh1MzIpMSkgPDwgaXRhYmxlX3NpemUpOworCisJaWYgKHZwLT52cGF0aC0+aGxkZXYtPmNvbmZpZy5ydGhfaXRfdHlwZQorCQkJCT09IFZYR0VfSFdfUlRIX0lUX1RZUEVfU09MT19JVCkgeworCQlhY3Rpb24gPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fV1JJVEVfRU5UUlk7CisJCXJ0c190YWJsZSA9CisJCQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX1NPTE9fSVQ7CisKKwkJZm9yIChqID0gMDsgaiA8IG1heF9lbnRyaWVzOyBqKyspIHsKKworCQkJZGF0YTEgPSAwOworCisJCQlkYXRhMCA9CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX1NPTE9fSVRfQlVDS0VUX0RBVEEoCisJCQkJaXRhYmxlW2pdKTsKKworCQkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQodnBhdGhfaGFuZGxlc1swXSwKKwkJCQlhY3Rpb24sIHJ0c190YWJsZSwgaiwgZGF0YTAsIGRhdGExKTsKKworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBtYXhfZW50cmllczsgaisrKSB7CisKKwkJCWRhdGExID0gMDsKKworCQkJZGF0YTAgPQorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9TT0xPX0lUX0VOVFJZX0VOIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfU09MT19JVF9CVUNLRVRfREFUQSgKKwkJCQlpdGFibGVbal0pOworCisJCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCgKKwkJCQl2cGF0aF9oYW5kbGVzW210YWJsZVtpdGFibGVbal1dXSwgYWN0aW9uLAorCQkJCXJ0c190YWJsZSwgaiwgZGF0YTAsIGRhdGExKTsKKworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJCWdvdG8gZXhpdDsKKwkJfQorCX0gZWxzZSB7CisJCWFjdGlvbiA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9XUklURV9FTlRSWTsKKwkJcnRzX3RhYmxlID0KKwkJCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQ7CisJCWZvciAoaSA9IDA7IGkgPCB2cGF0aF9jb3VudDsgaSsrKSB7CisKKwkJCWZvciAoaiA9IDA7IGogPCBtYXhfZW50cmllczspIHsKKworCQkJCWRhdGEwID0gMDsKKwkJCQlkYXRhMSA9IDA7CisKKwkJCQl3aGlsZSAoaiA8IG1heF9lbnRyaWVzKSB7CisJCQkJCWlmIChtdGFibGVbaXRhYmxlW2pdXSAhPSBpKSB7CisJCQkJCQlqKys7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQl2eGdlX2h3X3J0c19ydGhfZGF0YTBfZGF0YTFfZ2V0KGosCisJCQkJCQkmZGF0YTAsICZkYXRhMSwgMSwgaXRhYmxlKTsKKwkJCQkJaisrOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQl3aGlsZSAoaiA8IG1heF9lbnRyaWVzKSB7CisJCQkJCWlmIChtdGFibGVbaXRhYmxlW2pdXSAhPSBpKSB7CisJCQkJCQlqKys7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQl2eGdlX2h3X3J0c19ydGhfZGF0YTBfZGF0YTFfZ2V0KGosCisJCQkJCQkmZGF0YTAsICZkYXRhMSwgMiwgaXRhYmxlKTsKKwkJCQkJaisrOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQl3aGlsZSAoaiA8IG1heF9lbnRyaWVzKSB7CisJCQkJCWlmIChtdGFibGVbaXRhYmxlW2pdXSAhPSBpKSB7CisJCQkJCQlqKys7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQl2eGdlX2h3X3J0c19ydGhfZGF0YTBfZGF0YTFfZ2V0KGosCisJCQkJCQkmZGF0YTAsICZkYXRhMSwgMywgaXRhYmxlKTsKKwkJCQkJaisrOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQl3aGlsZSAoaiA8IG1heF9lbnRyaWVzKSB7CisJCQkJCWlmIChtdGFibGVbaXRhYmxlW2pdXSAhPSBpKSB7CisJCQkJCQlqKys7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQl2eGdlX2h3X3J0c19ydGhfZGF0YTBfZGF0YTFfZ2V0KGosCisJCQkJCQkmZGF0YTAsICZkYXRhMSwgNCwgaXRhYmxlKTsKKwkJCQkJaisrOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoZGF0YTAgIT0gMCkgeworCQkJCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCgKKwkJCQkJCQl2cGF0aF9oYW5kbGVzW2ldLAorCQkJCQkJCWFjdGlvbiwgcnRzX3RhYmxlLAorCQkJCQkJCTAsIGRhdGEwLCBkYXRhMSk7CisKKwkJCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJCQkJZ290byBleGl0OworCQkJCX0KKwkJCX0KKwkJfQorCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX2NoZWNrX2xlYWsgLSBDaGVjayBmb3IgbWVtb3J5IGxlYWsKKyAqIEByaW5naDogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKgorICogSWYgUFJDX1JYRF9ET09SQkVMTF9WUG4uTkVXX1FXX0NOVCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8KKyAqIFBSQ19DRkc2X1ZQbi5SWERfU1BBVCB0aGVuIGEgbGVhayBoYXMgb2NjdXJyZWQuCisgKiBSZXR1cm5zOiBWWEdFX0hXX0ZBSUwsIGlmIGxlYWsgaGFzIG9jY3VycmVkLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9jaGVja19sZWFrKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJdTY0IHJ4ZF9uZXdfY291bnQsIHJ4ZF9zcGF0OworCisJaWYgKHJpbmcgPT0gTlVMTCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJ4ZF9uZXdfY291bnQgPSByZWFkbCgmcmluZy0+dnBfcmVnLT5wcmNfcnhkX2Rvb3JiZWxsKTsKKwlyeGRfc3BhdCA9IHJlYWRxKCZyaW5nLT52cF9yZWctPnByY19jZmc2KTsKKwlyeGRfc3BhdCA9IFZYR0VfSFdfUFJDX0NGRzZfUlhEX1NQQVQocnhkX3NwYXQpOworCisJaWYgKHJ4ZF9uZXdfY291bnQgPj0gcnhkX3NwYXQpCisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfbWdtdF9yZWFkCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgdGhlIHZwYXRoX21nbXQgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfbWdtdF9yZWFkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCkKK3sKKwl1MzIgaSwgbXR1ID0gMCwgbWF4X3B5bGQgPSAwOworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQUNfTUFYX01BQ19QT1JUX0lEOyBpKyspIHsKKworCQl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBtZ210X3JlZy0+CisJCQkJcnhtYWNfY2ZnMF9wb3J0X3ZwbWdtdF9jbG9uZVtpXSk7CisJCW1heF9weWxkID0KKwkJCSh1MzIpCisJCQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfR0VUX01BWF9QWUxEX0xFTgorCQkJKHZhbDY0KTsKKwkJaWYgKG10dSA8IG1heF9weWxkKQorCQkJbXR1ID0gbWF4X3B5bGQ7CisJfQorCisJdnBhdGgtPm1heF9tdHUgPSBtdHUgKyBWWEdFX0hXX01BQ19IRUFERVJfTUFYX1NJWkU7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBtZ210X3JlZy0+eG1hY192c3BvcnRfY2hvaWNlc192cCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCWlmICh2YWw2NCAmIHZ4Z2VfbUJJVChpKSkKKwkJCXZwYXRoLT52c3BvcnRfbnVtYmVyID0gaTsKKwl9CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBtZ210X3JlZy0+eGdtYWNfZ2VuX3N0YXR1c192cG1nbXRfY2xvbmUpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19YR01BQ19HRU5fU1RBVFVTX1ZQTUdNVF9DTE9ORV9YTUFDSl9OVFdLX09LKQorCQlWWEdFX0hXX0RFVklDRV9MSU5LX1NUQVRFX1NFVCh2cGF0aC0+aGxkZXYsIFZYR0VfSFdfTElOS19VUCk7CisJZWxzZQorCQlWWEdFX0hXX0RFVklDRV9MSU5LX1NUQVRFX1NFVCh2cGF0aC0+aGxkZXYsIFZYR0VfSFdfTElOS19ET1dOKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfcmVzZXRfY2hlY2sgLSBDaGVjayBpZiByZXNldHRpbmcgdGhlIHZwYXRoIGNvbXBsZXRlZAorICogVGhpcyByb3V0aW5lIGNoZWNrcyB0aGUgdnBhdGhfcnN0X2luX3Byb2cgcmVnaXN0ZXIgdG8gc2VlIGlmCisgKiBhZGFwdGVyIGNvbXBsZXRlZCB0aGUgcmVzZXQgcHJvY2VzcyBmb3IgdGhlIHZwYXRoCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9yZXNldF9jaGVjayhzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbCgKKwkJCSZ2cGF0aC0+aGxkZXYtPmNvbW1vbl9yZWctPnZwYXRoX3JzdF9pbl9wcm9nLAorCQkJVlhHRV9IV19WUEFUSF9SU1RfSU5fUFJPR19WUEFUSF9SU1RfSU5fUFJPRygKKwkJCQkxIDw8ICgxNiAtIHZwYXRoLT52cF9pZCkpLAorCQkJdnBhdGgtPmhsZGV2LT5jb25maWcuZGV2aWNlX3BvbGxfbWlsbGlzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfcmVzZXQKKyAqIFRoaXMgcm91dGluZSByZXNldHMgdGhlIHZwYXRoIG9uIHRoZSBkZXZpY2UKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9IFZYR0VfSFdfQ01OX1JTVEhETFJfQ0ZHMF9TV19SRVNFVF9WUEFUSCgxIDw8ICgxNiAtIHZwX2lkKSk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMCwgMzIpLAorCQkJCSZobGRldi0+Y29tbW9uX3JlZy0+Y21uX3JzdGhkbHJfY2ZnMCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3N3X3Jlc2V0CisgKiBUaGlzIHJvdXRpbmUgcmVzZXRzIHRoZSB2cGF0aCBzdHJ1Y3R1cmVzCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9zd19yZXNldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisKKwl2cGF0aCA9IChzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICopJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKworCWlmICh2cGF0aC0+cmluZ2gpIHsKKwkJc3RhdHVzID0gX192eGdlX2h3X3JpbmdfcmVzZXQodnBhdGgtPnJpbmdoKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCX0KKworCWlmICh2cGF0aC0+Zmlmb2gpCisJCXN0YXR1cyA9IF9fdnhnZV9od19maWZvX3Jlc2V0KHZwYXRoLT5maWZvaCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfcHJjX2NvbmZpZ3VyZQorICogVGhpcyByb3V0aW5lIGNvbmZpZ3VyZXMgdGhlIHByYyByZWdpc3RlcnMgb2YgdmlydHVhbCBwYXRoIHVzaW5nIHRoZSBjb25maWcKKyAqIHBhc3NlZAorICovCit2b2lkCitfX3Z4Z2VfaHdfdnBhdGhfcHJjX2NvbmZpZ3VyZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnICp2cF9jb25maWc7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCXZwX2NvbmZpZyA9IHZwYXRoLT52cF9jb25maWc7CisKKwlpZiAodnBfY29uZmlnLT5yaW5nLmVuYWJsZSA9PSBWWEdFX0hXX1JJTkdfRElTQUJMRSkKKwkJcmV0dXJuOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5wcmNfY2ZnMSk7CisJdmFsNjQgfD0gVlhHRV9IV19QUkNfQ0ZHMV9SVElfVElOVF9ESVNBQkxFOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+cHJjX2NmZzEpOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cHJjX2NmZzYpOworCXZhbDY0IHw9IFZYR0VfSFdfUFJDX0NGRzZfRE9PUkJFTExfTU9ERV9FTjsKKwl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5wcmNfY2ZnNik7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnByY19jZmc3KTsKKworCWlmICh2cGF0aC0+dnBfY29uZmlnLT5yaW5nLnNjYXR0ZXJfbW9kZSAhPQorCQlWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisKKwkJdmFsNjQgJj0gflZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFKDB4Myk7CisKKwkJc3dpdGNoICh2cGF0aC0+dnBfY29uZmlnLT5yaW5nLnNjYXR0ZXJfbW9kZSkgeworCQljYXNlIFZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfQToKKwkJCXZhbDY0IHw9IFZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFKAorCQkJCQlWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERV9BKTsKKwkJCWJyZWFrOworCQljYXNlIFZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfQjoKKwkJCXZhbDY0IHw9IFZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFKAorCQkJCQlWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERV9CKTsKKwkJCWJyZWFrOworCQljYXNlIFZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfQzoKKwkJCXZhbDY0IHw9IFZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFKAorCQkJCQlWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERV9DKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5wcmNfY2ZnNyk7CisKKwl3cml0ZXEoVlhHRV9IV19QUkNfQ0ZHNV9SWEQwX0FERCgKKwkJCQlfX3Z4Z2VfaHdfcmluZ19maXJzdF9ibG9ja19hZGRyZXNzX2dldCgKKwkJCQkJdnBhdGgtPnJpbmdoKSA+PiAzKSwgJnZwX3JlZy0+cHJjX2NmZzUpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5wcmNfY2ZnNCk7CisJdmFsNjQgfD0gVlhHRV9IV19QUkNfQ0ZHNF9JTl9TVkM7CisJdmFsNjQgJj0gflZYR0VfSFdfUFJDX0NGRzRfUklOR19NT0RFKDB4Myk7CisKKwl2YWw2NCB8PSBWWEdFX0hXX1BSQ19DRkc0X1JJTkdfTU9ERSgKKwkJCVZYR0VfSFdfUFJDX0NGRzRfUklOR19NT0RFX09ORV9CVUZGRVIpOworCisJaWYgKGhsZGV2LT5jb25maWcucnRoX2VuID09IFZYR0VfSFdfUlRIX0RJU0FCTEUpCisJCXZhbDY0IHw9IFZYR0VfSFdfUFJDX0NGRzRfUlRIX0RJU0FCTEU7CisJZWxzZQorCQl2YWw2NCAmPSB+VlhHRV9IV19QUkNfQ0ZHNF9SVEhfRElTQUJMRTsKKworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+cHJjX2NmZzQpOworCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9rZGZjX2NvbmZpZ3VyZQorICogVGhpcyByb3V0aW5lIGNvbmZpZ3VyZXMgdGhlIGtkZmMgcmVnaXN0ZXJzIG9mIHZpcnR1YWwgcGF0aCB1c2luZyB0aGUKKyAqIGNvbmZpZyBwYXNzZWQKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2tkZmNfY29uZmlndXJlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQoreworCXU2NCB2YWw2NDsKKwl1NjQgdnBhdGhfc3RyaWRlOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisJc3RhdHVzID0gX192eGdlX2h3X2tkZmNfc3dhcHBlcl9zZXQoaGxkZXYtPmxlZ2FjeV9yZWcsIHZwX3JlZyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+a2RmY19kcmJsX3RyaXBsZXRfdG90YWwpOworCisJdnBhdGgtPm1heF9rZGZjX2RiID0KKwkJKHUzMilWWEdFX0hXX0tERkNfRFJCTF9UUklQTEVUX1RPVEFMX0dFVF9LREZDX01BWF9TSVpFKAorCQkJdmFsNjQrMSkvMjsKKworCWlmICh2cGF0aC0+dnBfY29uZmlnLT5maWZvLmVuYWJsZSA9PSBWWEdFX0hXX0ZJRk9fRU5BQkxFKSB7CisKKwkJdnBhdGgtPm1heF9ub2ZsX2RiID0gdnBhdGgtPm1heF9rZGZjX2RiOworCisJCWlmICh2cGF0aC0+bWF4X25vZmxfZGIgPAorCQkJKCh2cGF0aC0+dnBfY29uZmlnLT5maWZvLm1lbWJsb2NrX3NpemUgLworCQkJKHZwYXRoLT52cF9jb25maWctPmZpZm8ubWF4X2ZyYWdzICoKKwkJCXNpemVvZihzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCkpKSAqCisJCQl2cGF0aC0+dnBfY29uZmlnLT5maWZvLmZpZm9fYmxvY2tzKSkgeworCisJCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfRklGT19CTE9DS1M7CisJCX0KKwkJdmFsNjQgPSBWWEdFX0hXX0tERkNfRklGT19UUlBMX1BBUlRJVElPTl9MRU5HVEhfMCgKKwkJCQkodnBhdGgtPm1heF9ub2ZsX2RiKjIpLTEpOworCX0KKworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+a2RmY19maWZvX3RycGxfcGFydGl0aW9uKTsKKworCXdyaXRlcShWWEdFX0hXX0tERkNfRklGT19UUlBMX0NUUkxfVFJJUExFVF9FTkFCTEUsCisJCSZ2cF9yZWctPmtkZmNfZmlmb190cnBsX2N0cmwpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5rZGZjX3RycGxfZmlmb18wX2N0cmwpOworCisJdmFsNjQgJj0gfihWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9NT0RFKDB4MykgfAorCQkgICBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9TRUxFQ1QoMHhGRikpOworCisJdmFsNjQgfD0gVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfTU9ERSgKKwkJIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX01PREVfTk9OX09GRkxPQURfT05MWSkgfAorI2lmbmRlZiBfX0JJR19FTkRJQU4KKwkJIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX1NXQVBfRU4gfAorI2VuZGlmCisJCSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9TRUxFQ1QoMCk7CisKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPmtkZmNfdHJwbF9maWZvXzBfY3RybCk7CisJd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+a2RmY190cnBsX2ZpZm9fMF93Yl9hZGRyZXNzKTsKKwl3bWIoKTsKKwl2cGF0aF9zdHJpZGUgPSByZWFkcSgmaGxkZXYtPnRvY19yZWctPnRvY19rZGZjX3ZwYXRoX3N0cmlkZSk7CisKKwl2cGF0aC0+bm9mbF9kYiA9CisJCShzdHJ1Y3QgX192eGdlX2h3X25vbl9vZmZsb2FkX2RiX3dyYXBwZXIgX19pb21lbSAqKQorCQkoaGxkZXYtPmtkZmMgKyAodnBfaWQgKgorCQlWWEdFX0hXX1RPQ19LREZDX1ZQQVRIX1NUUklERV9HRVRfVE9DX0tERkNfVlBBVEhfU1RSSURFKAorCQkJCQl2cGF0aF9zdHJpZGUpKSk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfbWFjX2NvbmZpZ3VyZQorICogVGhpcyByb3V0aW5lIGNvbmZpZ3VyZXMgdGhlIG1hYyBvZiB2aXJ0dWFsIHBhdGggdXNpbmcgdGhlIGNvbmZpZyBwYXNzZWQKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX21hY19jb25maWd1cmUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgKnZwX2NvbmZpZzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisJdnBfY29uZmlnID0gdnBhdGgtPnZwX2NvbmZpZzsKKworCXdyaXRlcShWWEdFX0hXX1hNQUNfVlNQT1JUX0NIT0lDRV9WU1BPUlRfTlVNQkVSKAorCQkJdnBhdGgtPnZzcG9ydF9udW1iZXIpLCAmdnBfcmVnLT54bWFjX3ZzcG9ydF9jaG9pY2UpOworCisJaWYgKHZwX2NvbmZpZy0+cmluZy5lbmFibGUgPT0gVlhHRV9IV19SSU5HX0VOQUJMRSkgeworCisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+eG1hY19ycGFfdmNmZyk7CisKKwkJaWYgKHZwX2NvbmZpZy0+cnBhX3N0cmlwX3ZsYW5fdGFnICE9CisJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJaWYgKHZwX2NvbmZpZy0+cnBhX3N0cmlwX3ZsYW5fdGFnKQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfWE1BQ19SUEFfVkNGR19TVFJJUF9WTEFOX1RBRzsKKwkJCWVsc2UKKwkJCQl2YWw2NCAmPSB+VlhHRV9IV19YTUFDX1JQQV9WQ0ZHX1NUUklQX1ZMQU5fVEFHOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT54bWFjX3JwYV92Y2ZnKTsKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5yeG1hY192Y2ZnMCk7CisKKwkJaWYgKHZwX2NvbmZpZy0+bXR1ICE9CisJCQkJVlhHRV9IV19WUEFUSF9VU0VfRkxBU0hfREVGQVVMVF9JTklUSUFMX01UVSkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfUlhNQUNfVkNGRzBfUlRTX01BWF9GUk1fTEVOKDB4M2ZmZik7CisJCQlpZiAoKHZwX2NvbmZpZy0+bXR1ICArCisJCQkJVlhHRV9IV19NQUNfSEVBREVSX01BWF9TSVpFKSA8IHZwYXRoLT5tYXhfbXR1KQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfVkNGRzBfUlRTX01BWF9GUk1fTEVOKAorCQkJCQl2cF9jb25maWctPm10dSAgKworCQkJCQlWWEdFX0hXX01BQ19IRUFERVJfTUFYX1NJWkUpOworCQkJZWxzZQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfVkNGRzBfUlRTX01BWF9GUk1fTEVOKAorCQkJCQl2cGF0aC0+bWF4X210dSk7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ4bWFjX3ZjZmcxKTsKKworCQl2YWw2NCAmPSB+KFZYR0VfSFdfUlhNQUNfVkNGRzFfUlRTX1JUSF9NVUxUSV9JVF9CRF9NT0RFKDB4MykgfAorCQkJVlhHRV9IV19SWE1BQ19WQ0ZHMV9SVFNfUlRIX01VTFRJX0lUX0VOX01PREUpOworCisJCWlmIChobGRldi0+Y29uZmlnLnJ0aF9pdF90eXBlID09CisJCQkJVlhHRV9IV19SVEhfSVRfVFlQRV9NVUxUSV9JVCkgeworCQkJdmFsNjQgfD0gVlhHRV9IV19SWE1BQ19WQ0ZHMV9SVFNfUlRIX01VTFRJX0lUX0JEX01PREUoCisJCQkJMHgyKSB8CisJCQkJVlhHRV9IV19SWE1BQ19WQ0ZHMV9SVFNfUlRIX01VTFRJX0lUX0VOX01PREU7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnJ4bWFjX3ZjZmcxKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF90aW1fY29uZmlndXJlCisgKiBUaGlzIHJvdXRpbmUgY29uZmlndXJlcyB0aGUgdGltIHJlZ2lzdGVycyBvZiB2aXJ0dWFsIHBhdGggdXNpbmcgdGhlIGNvbmZpZworICogcGFzc2VkCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF90aW1fY29uZmlndXJlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgKmNvbmZpZzsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCWNvbmZpZyA9IHZwYXRoLT52cF9jb25maWc7CisKKwl3cml0ZXEoKHU2NCkwLCAmdnBfcmVnLT50aW1fZGVzdF9hZGRyKTsKKwl3cml0ZXEoKHU2NCkwLCAmdnBfcmVnLT50aW1fdnBhdGhfbWFwKTsKKwl3cml0ZXEoKHU2NCkwLCAmdnBfcmVnLT50aW1fYml0bWFwKTsKKwl3cml0ZXEoKHU2NCkwLCAmdnBfcmVnLT50aW1fcmVtYXApOworCisJaWYgKGNvbmZpZy0+cmluZy5lbmFibGUgPT0gVlhHRV9IV19SSU5HX0VOQUJMRSkKKwkJd3JpdGVxKFZYR0VfSFdfVElNX1JJTkdfQVNTTl9JTlRfTlVNKAorCQkJKHZwX2lkICogVlhHRV9IV19NQVhfSU5UUl9QRVJfVlApICsKKwkJCVZYR0VfSFdfVlBBVEhfSU5UUl9SWCksICZ2cF9yZWctPnRpbV9yaW5nX2Fzc24pOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT50aW1fcGNpX2NmZyk7CisJdmFsNjQgfD0gVlhHRV9IV19USU1fUENJX0NGR19BRERfUEFEOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX3BjaV9jZmcpOworCisJaWYgKGNvbmZpZy0+Zmlmby5lbmFibGUgPT0gVlhHRV9IV19GSUZPX0VOQUJMRSkgeworCisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dGltX2NmZzFfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdKTsKKworCQlpZiAoY29uZmlnLT50dGkuYnRpbWVyX3ZhbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX0JUSU1FUl9WQUwoCisJCQkJMHgzZmZmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9CVElNRVJfVkFMKAorCQkJCQljb25maWctPnR0aS5idGltZXJfdmFsKTsKKwkJfQorCisJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fQklUTVBfRU47CisKKwkJaWYgKGNvbmZpZy0+dHRpLnRpbWVyX2FjX2VuICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCWlmIChjb25maWctPnR0aS50aW1lcl9hY19lbikKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQUM7CisJCQllbHNlCisJCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9BQzsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS50aW1lcl9jaV9lbiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQlpZiAoY29uZmlnLT50dGkudGltZXJfY2lfZW4pCisJCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0NJOworCQkJZWxzZQorCQkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQ0k7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkudXJhbmdlX2EgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0EoMHgzZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19BKAorCQkJCQljb25maWctPnR0aS51cmFuZ2VfYSk7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkudXJhbmdlX2IgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0IoMHgzZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19CKAorCQkJCQljb25maWctPnR0aS51cmFuZ2VfYik7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkudXJhbmdlX2MgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0MoMHgzZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19DKAorCQkJCQljb25maWctPnR0aS51cmFuZ2VfYyk7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcxX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1RYXSk7CisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dGltX2NmZzJfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdKTsKKworCQlpZiAoY29uZmlnLT50dGkudWVjX2EgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQSgweGZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19BKAorCQkJCQkJY29uZmlnLT50dGkudWVjX2EpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnVlY19iICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0IoMHhmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQigKKwkJCQkJCWNvbmZpZy0+dHRpLnVlY19iKTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS51ZWNfYyAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19DKDB4ZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0MoCisJCQkJCQljb25maWctPnR0aS51ZWNfYyk7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkudWVjX2QgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfRCgweGZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19EKAorCQkJCQkJY29uZmlnLT50dGkudWVjX2QpOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnMl9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0pOworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnRpbV9jZmczX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1RYXSk7CisKKwkJaWYgKGNvbmZpZy0+dHRpLnRpbWVyX3JpX2VuICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCWlmIChjb25maWctPnR0aS50aW1lcl9yaV9lbikKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVElNRVJfUkk7CisJCQllbHNlCisJCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9USU1FUl9SSTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS5ydGltZXJfdmFsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fUlRJTUVSX1ZBTCgKKwkJCQkJMHgzZmZmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9SVElNRVJfVkFMKAorCQkJCQljb25maWctPnR0aS5ydGltZXJfdmFsKTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS51dGlsX3NlbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1VUSUxfU0VMKDB4M2YpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1VUSUxfU0VMKAorCQkJCQljb25maWctPnR0aS51dGlsX3NlbCk7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkubHRpbWVyX3ZhbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX0xUSU1FUl9WQUwoCisJCQkJCTB4M2ZmZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fTFRJTUVSX1ZBTCgKKwkJCQkJY29uZmlnLT50dGkubHRpbWVyX3ZhbCk7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmczX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1RYXSk7CisJfQorCisJaWYgKGNvbmZpZy0+cmluZy5lbmFibGUgPT0gVlhHRV9IV19SSU5HX0VOQUJMRSkgeworCisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dGltX2NmZzFfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKTsKKworCQlpZiAoY29uZmlnLT5ydGkuYnRpbWVyX3ZhbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX0JUSU1FUl9WQUwoCisJCQkJCTB4M2ZmZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fQlRJTUVSX1ZBTCgKKwkJCQkJY29uZmlnLT5ydGkuYnRpbWVyX3ZhbCk7CisJCX0KKworCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX0JJVE1QX0VOOworCisJCWlmIChjb25maWctPnJ0aS50aW1lcl9hY19lbiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQlpZiAoY29uZmlnLT5ydGkudGltZXJfYWNfZW4pCisJCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0FDOworCQkJZWxzZQorCQkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQUM7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkudGltZXJfY2lfZW4gIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJaWYgKGNvbmZpZy0+cnRpLnRpbWVyX2NpX2VuKQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9DSTsKKwkJCWVsc2UKKwkJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0NJOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnVyYW5nZV9hICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19BKDB4M2YpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQSgKKwkJCQkJY29uZmlnLT5ydGkudXJhbmdlX2EpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnVyYW5nZV9iICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19CKDB4M2YpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQigKKwkJCQkJY29uZmlnLT5ydGkudXJhbmdlX2IpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnVyYW5nZV9jICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19DKDB4M2YpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQygKKwkJCQkJY29uZmlnLT5ydGkudXJhbmdlX2MpOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnMV9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pOworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnRpbV9jZmcyX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1JYXSk7CisKKwkJaWYgKGNvbmZpZy0+cnRpLnVlY19hICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0EoMHhmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQSgKKwkJCQkJCWNvbmZpZy0+cnRpLnVlY19hKTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS51ZWNfYiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19CKDB4ZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0IoCisJCQkJCQljb25maWctPnJ0aS51ZWNfYik7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkudWVjX2MgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQygweGZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19DKAorCQkJCQkJY29uZmlnLT5ydGkudWVjX2MpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnVlY19kICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0QoMHhmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfRCgKKwkJCQkJCWNvbmZpZy0+cnRpLnVlY19kKTsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzJfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKTsKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT50aW1fY2ZnM19pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pOworCisJCWlmIChjb25maWctPnJ0aS50aW1lcl9yaV9lbiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQlpZiAoY29uZmlnLT5ydGkudGltZXJfcmlfZW4pCisJCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1RJTUVSX1JJOworCQkJZWxzZQorCQkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVElNRVJfUkk7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkucnRpbWVyX3ZhbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1JUSU1FUl9WQUwoCisJCQkJCTB4M2ZmZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fUlRJTUVSX1ZBTCgKKwkJCQkJY29uZmlnLT5ydGkucnRpbWVyX3ZhbCk7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkudXRpbF9zZWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9VVElMX1NFTCgweDNmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9VVElMX1NFTCgKKwkJCQkJY29uZmlnLT5ydGkudXRpbF9zZWwpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLmx0aW1lcl92YWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9MVElNRVJfVkFMKAorCQkJCQkweDNmZmZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX0xUSU1FUl9WQUwoCisJCQkJCWNvbmZpZy0+cnRpLmx0aW1lcl92YWwpOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnM19pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pOworCX0KKworCXZhbDY0ID0gMDsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcxX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX0VJTlRBXSk7CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnMl9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9FSU5UQV0pOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzNfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfRUlOVEFdKTsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcxX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX0JNQVBdKTsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcyX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX0JNQVBdKTsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmczX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX0JNQVBdKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfaW5pdGlhbGl6ZQorICogVGhpcyByb3V0aW5lIGlzIHRoZSBmaW5hbCBwaGFzZSBvZiBpbml0IHdoaWNoIGluaXRpYWxpemVzIHRoZQorICogcmVnaXN0ZXJzIG9mIHRoZSB2cGF0aCB1c2luZyB0aGUgY29uZmlndXJhdGlvbiBwYXNzZWQuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9pbml0aWFsaXplKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQoreworCXU2NCB2YWw2NDsKKwl1MzIgdmFsMzI7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisKKwlpZiAoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQodnBfaWQpKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfQVZBSUxBQkxFOworCQlnb3RvIGV4aXQ7CisJfQorCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisKKwlzdGF0dXMgPSAgX192eGdlX2h3X3ZwYXRoX3N3YXBwZXJfc2V0KHZwYXRoLT52cF9yZWcpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0dXMgPSAgX192eGdlX2h3X3ZwYXRoX21hY19jb25maWd1cmUoaGxkZXYsIHZwX2lkKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJc3RhdHVzID0gIF9fdnhnZV9od192cGF0aF9rZGZjX2NvbmZpZ3VyZShobGRldiwgdnBfaWQpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfdGltX2NvbmZpZ3VyZShobGRldiwgdnBfaWQpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl3cml0ZXEoMCwgJnZwX3JlZy0+Z2VuZG1hX2ludCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ0ZG1hX3JkX29wdGltaXphdGlvbl9jdHJsKTsKKworCS8qIEdldCBNUlJTIHZhbHVlIGZyb20gZGV2aWNlIGNvbnRyb2wgKi8KKwlzdGF0dXMgID0gX192eGdlX2h3X3ZwYXRoX3BjaV9yZWFkKHZwYXRoLCAxLCAweDc4LCAmdmFsMzIpOworCisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisJCXZhbDMyID0gKHZhbDMyICYgVlhHRV9IV19QQ0lfRVhQX0RFVkNUTF9SRUFEUlEpID4+IDEyOworCQl2YWw2NCAmPQorCQkgICAgfihWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX0ZJTExfVEhSRVNIKDcpKTsKKwkJdmFsNjQgfD0KKwkJICAgIFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfRklMTF9USFJFU0godmFsMzIpOworCisJCXZhbDY0IHw9IFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfV0FJVF9GT1JfU1BBQ0U7CisJfQorCisJdmFsNjQgJj0gfihWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX0FERFJfQkRSWSg3KSk7CisJdmFsNjQgfD0KKwkgICAgVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9BRERSX0JEUlkoCisJCSAgICBWWEdFX0hXX01BWF9QQVlMT0FEX1NJWkVfNTEyKTsKKworCXZhbDY0IHw9IFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfQUREUl9CRFJZX0VOOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+cnRkbWFfcmRfb3B0aW1pemF0aW9uX2N0cmwpOworCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBfaW5pdGlhbGl6ZSAtIEluaXRpYWxpemUgVmlydHVhbCBQYXRoIHN0cnVjdHVyZQorICogVGhpcyByb3V0aW5lIGlzIHRoZSBpbml0aWFsIHBoYXNlIG9mIGluaXQgd2hpY2ggcmVzZXRzIHRoZSB2cGF0aCBhbmQKKyAqIGluaXRpYWxpemVzIHRoZSBzb2Z0d2FyZSBzdXBwb3J0IHN0cnVjdHVyZXMuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cF9pbml0aWFsaXplKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkLAorCQkJc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnICpjb25maWcpCit7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKHZwX2lkKSkpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX0FWQUlMQUJMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKworCXZwYXRoLT52cF9pZCA9IHZwX2lkOworCXZwYXRoLT52cF9vcGVuID0gVlhHRV9IV19WUF9PUEVOOworCXZwYXRoLT5obGRldiA9IGhsZGV2OworCXZwYXRoLT52cF9jb25maWcgPSBjb25maWc7CisJdnBhdGgtPnZwX3JlZyA9IGhsZGV2LT52cGF0aF9yZWdbdnBfaWRdOworCXZwYXRoLT52cG1nbXRfcmVnID0gaGxkZXYtPnZwbWdtdF9yZWdbdnBfaWRdOworCisJX192eGdlX2h3X3ZwYXRoX3Jlc2V0KGhsZGV2LCB2cF9pZCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcmVzZXRfY2hlY2sodnBhdGgpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCW1lbXNldCh2cGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgpKTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9tZ210X3JlYWQoaGxkZXYsIHZwYXRoKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQltZW1zZXQodnBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoKSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmdnBhdGgtPnZwYXRoX2hhbmRsZXMpOworCisJdnBhdGgtPnN3X3N0YXRzID0gJmhsZGV2LT5zdGF0cy5zd19kZXZfaW5mb19zdGF0cy52cGF0aF9pbmZvW3ZwX2lkXTsKKworCVZYR0VfSFdfREVWSUNFX1RJTV9JTlRfTUFTS19TRVQoaGxkZXYtPnRpbV9pbnRfbWFzazAsCisJCWhsZGV2LT50aW1faW50X21hc2sxLCB2cF9pZCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfaW5pdGlhbGl6ZShobGRldiwgdnBfaWQpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlfX3Z4Z2VfaHdfdnBfdGVybWluYXRlKGhsZGV2LCB2cF9pZCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBfdGVybWluYXRlIC0gVGVybWluYXRlIFZpcnR1YWwgUGF0aCBzdHJ1Y3R1cmUKKyAqIFRoaXMgcm91dGluZSBjbG9zZXMgYWxsIGNoYW5uZWxzIGl0IG9wZW5lZCBhbmQgZnJlZXVwIG1lbW9yeQorICovCit2b2lkCitfX3Z4Z2VfaHdfdnBfdGVybWluYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pCisJCWdvdG8gZXhpdDsKKworCVZYR0VfSFdfREVWSUNFX1RJTV9JTlRfTUFTS19SRVNFVCh2cGF0aC0+aGxkZXYtPnRpbV9pbnRfbWFzazAsCisJCXZwYXRoLT5obGRldi0+dGltX2ludF9tYXNrMSwgdnBhdGgtPnZwX2lkKTsKKwlobGRldi0+c3RhdHMuaHdfZGV2X2luZm9fc3RhdHMudnBhdGhfaW5mb1t2cGF0aC0+dnBfaWRdID0gTlVMTDsKKworCW1lbXNldCh2cGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgpKTsKK2V4aXQ6CisJcmV0dXJuOworfQorCisvKgorICogdnhnZV9od192cGF0aF9tdHVfc2V0IC0gU2V0IE1UVS4KKyAqIFNldCBuZXcgTVRVIHZhbHVlLiBFeGFtcGxlLCB0byB1c2UganVtYm8gZnJhbWVzOgorICogdnhnZV9od192cGF0aF9tdHVfc2V0KG15X2RldmljZSwgOTYwMCk7CisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbXR1X3NldChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIHUzMiBuZXdfbXR1KQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKwl2cGF0aCA9IHZwLT52cGF0aDsKKworCW5ld19tdHUgKz0gVlhHRV9IV19NQUNfSEVBREVSX01BWF9TSVpFOworCisJaWYgKChuZXdfbXR1IDwgVlhHRV9IV19NSU5fTVRVKSB8fCAobmV3X210dSA+IHZwYXRoLT5tYXhfbXR1KSkKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9NVFVfU0laRTsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKworCXZhbDY0ICY9IH5WWEdFX0hXX1JYTUFDX1ZDRkcwX1JUU19NQVhfRlJNX0xFTigweDNmZmYpOworCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfVkNGRzBfUlRTX01BWF9GUk1fTEVOKG5ld19tdHUpOworCisJd3JpdGVxKHZhbDY0LCAmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJdnBhdGgtPnZwX2NvbmZpZy0+bXR1ID0gbmV3X210dSAtIFZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRTsKKworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od192cGF0aF9vcGVuIC0gT3BlbiBhIHZpcnR1YWwgcGF0aCBvbiBhIGdpdmVuIGFkYXB0ZXIKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBvcGVuIGFjY2VzcyB0byB2aXJ0dWFsIHBhdGggb2YgYW4KKyAqIGFkYXB0ZXIgZm9yIG9mZmxvYWQsIEdSTyBvcGVyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIHN5bmNocm9ub3VzbHkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfb3BlbihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCSAgIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX2F0dHIgKmF0dHIsCisJCSAgIHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICoqdnBhdGhfaGFuZGxlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2F0dHItPnZwX2lkXTsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9TVEFURTsKKwkJZ290byB2cGF0aF9vcGVuX2V4aXQxOworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cF9pbml0aWFsaXplKGhsZGV2LCBhdHRyLT52cF9pZCwKKwkJCSZobGRldi0+Y29uZmlnLnZwX2NvbmZpZ1thdHRyLT52cF9pZF0pOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIHZwYXRoX29wZW5fZXhpdDE7CisKKwl2cCA9IChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKQorCQl2bWFsbG9jKHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSkpOworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gdnBhdGhfb3Blbl9leGl0MjsKKwl9CisKKwltZW1zZXQodnAsIDAsIHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSkpOworCisJdnAtPnZwYXRoID0gdnBhdGg7CisKKwlpZiAodnBhdGgtPnZwX2NvbmZpZy0+Zmlmby5lbmFibGUgPT0gVlhHRV9IV19GSUZPX0VOQUJMRSkgeworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfZmlmb19jcmVhdGUodnAsICZhdHRyLT5maWZvX2F0dHIpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIHZwYXRoX29wZW5fZXhpdDY7CisJfQorCisJaWYgKHZwYXRoLT52cF9jb25maWctPnJpbmcuZW5hYmxlID09IFZYR0VfSFdfUklOR19FTkFCTEUpIHsKKwkJc3RhdHVzID0gX192eGdlX2h3X3JpbmdfY3JlYXRlKHZwLCAmYXR0ci0+cmluZ19hdHRyKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byB2cGF0aF9vcGVuX2V4aXQ3OworCisJCV9fdnhnZV9od192cGF0aF9wcmNfY29uZmlndXJlKGhsZGV2LCBhdHRyLT52cF9pZCk7CisJfQorCisJdnBhdGgtPmZpZm9oLT50eF9pbnRyX251bSA9CisJCShhdHRyLT52cF9pZCAqIFZYR0VfSFdfTUFYX0lOVFJfUEVSX1ZQKSAgKworCQkJVlhHRV9IV19WUEFUSF9JTlRSX1RYOworCisJdnBhdGgtPnN0YXRzX2Jsb2NrID0gX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hbGxvY2F0ZShobGRldiwKKwkJCQlWWEdFX0hXX0JMT0NLX1NJWkUpOworCisJaWYgKHZwYXRoLT5zdGF0c19ibG9jayA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gdnBhdGhfb3Blbl9leGl0ODsKKwl9CisKKwl2cGF0aC0+aHdfc3RhdHMgPSAoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyAqKXZwYXRoLT4KKwkJCXN0YXRzX2Jsb2NrLT5tZW1ibG9jazsKKwltZW1zZXQodnBhdGgtPmh3X3N0YXRzLCAwLAorCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbykpOworCisJaGxkZXYtPnN0YXRzLmh3X2Rldl9pbmZvX3N0YXRzLnZwYXRoX2luZm9bYXR0ci0+dnBfaWRdID0KKwkJCQkJCXZwYXRoLT5od19zdGF0czsKKworCXZwYXRoLT5od19zdGF0c19zYXYgPQorCQkmaGxkZXYtPnN0YXRzLmh3X2Rldl9pbmZvX3N0YXRzLnZwYXRoX2luZm9fc2F2W2F0dHItPnZwX2lkXTsKKwltZW1zZXQodnBhdGgtPmh3X3N0YXRzX3NhdiwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvKSk7CisKKwl3cml0ZXEodnBhdGgtPnN0YXRzX2Jsb2NrLT5kbWFfYWRkciwgJnZwYXRoLT52cF9yZWctPnN0YXRzX2NmZyk7CisKKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3N0YXRzX2VuYWJsZSh2cCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIHZwYXRoX29wZW5fZXhpdDg7CisKKwlsaXN0X2FkZCgmdnAtPml0ZW0sICZ2cGF0aC0+dnBhdGhfaGFuZGxlcyk7CisKKwlobGRldi0+dnBhdGhzX2RlcGxveWVkIHw9IHZ4Z2VfbUJJVCh2cGF0aC0+dnBfaWQpOworCisJKnZwYXRoX2hhbmRsZSA9IHZwOworCisJYXR0ci0+Zmlmb19hdHRyLnVzZXJkYXRhID0gdnBhdGgtPmZpZm9oOworCWF0dHItPnJpbmdfYXR0ci51c2VyZGF0YSA9IHZwYXRoLT5yaW5naDsKKworCXJldHVybiBWWEdFX0hXX09LOworCit2cGF0aF9vcGVuX2V4aXQ4OgorCWlmICh2cGF0aC0+cmluZ2ggIT0gTlVMTCkKKwkJX192eGdlX2h3X3JpbmdfZGVsZXRlKHZwKTsKK3ZwYXRoX29wZW5fZXhpdDc6CisJaWYgKHZwYXRoLT5maWZvaCAhPSBOVUxMKQorCQlfX3Z4Z2VfaHdfZmlmb19kZWxldGUodnApOwordnBhdGhfb3Blbl9leGl0NjoKKwl2ZnJlZSh2cCk7Cit2cGF0aF9vcGVuX2V4aXQyOgorCV9fdnhnZV9od192cF90ZXJtaW5hdGUoaGxkZXYsIGF0dHItPnZwX2lkKTsKK3ZwYXRoX29wZW5fZXhpdDE6CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfcG9zdCAtIENsb3NlIHRoZSBoYW5kbGUgZ290IGZyb20gcHJldmlvdXMgdnBhdGgKKyAqICh2cGF0aCkgb3BlbgorICogQHZwOiBIYW5kbGUgZ290IGZyb20gcHJldmlvdXMgdnBhdGggb3BlbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbG9zZSBhY2Nlc3MgdG8gdmlydHVhbCBwYXRoIG9wZW5lZAorICogZWFybGllci4KKyAqLwordm9pZAordnhnZV9od192cGF0aF9yeF9kb29yYmVsbF9pbml0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCA9IE5VTEw7CisJdTY0IG5ld19jb3VudCwgdmFsNjQsIHZhbDE2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmc7CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKwlyaW5nID0gdnBhdGgtPnJpbmdoOworCisJbmV3X2NvdW50ID0gcmVhZHEoJnZwYXRoLT52cF9yZWctPnJ4ZG1lbV9zaXplKTsKKwluZXdfY291bnQgJj0gMHgxZmZmOworCXZhbDE2NCA9IChWWEdFX0hXX1JYRE1FTV9TSVpFX1BSQ19SWERNRU1fU0laRShuZXdfY291bnQpKTsKKworCXdyaXRlcShWWEdFX0hXX1BSQ19SWERfRE9PUkJFTExfTkVXX1FXX0NOVCh2YWwxNjQpLAorCQkmdnBhdGgtPnZwX3JlZy0+cHJjX3J4ZF9kb29yYmVsbCk7CisJcmVhZGwoJnZwYXRoLT52cF9yZWctPnByY19yeGRfZG9vcmJlbGwpOworCisJdmFsMTY0IC89IDI7CisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cHJjX2NmZzYpOworCXZhbDY0ID0gVlhHRV9IV19QUkNfQ0ZHNl9SWERfU1BBVCh2YWw2NCk7CisJdmFsNjQgJj0gMHgxZmY7CisKKwkvKgorCSAqIEVhY2ggUnhEIGlzIG9mIDQgcXdvcmRzCisJICovCisJbmV3X2NvdW50IC09ICh2YWw2NCArIDEpOworCXZhbDY0ID0gbWluKHZhbDE2NCwgbmV3X2NvdW50KSAvIDQ7CisKKwlyaW5nLT5yeGRzX2xpbWl0ID0gbWluKHJpbmctPnJ4ZHNfbGltaXQsIHZhbDY0KTsKKwlpZiAocmluZy0+cnhkc19saW1pdCA8IDQpCisJCXJpbmctPnJ4ZHNfbGltaXQgPSA0OworfQorCisvKgorICogdnhnZV9od192cGF0aF9jbG9zZSAtIENsb3NlIHRoZSBoYW5kbGUgZ290IGZyb20gcHJldmlvdXMgdnBhdGggKHZwYXRoKSBvcGVuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xvc2UgYWNjZXNzIHRvIHZpcnR1YWwgcGF0aCBvcGVuZWQKKyAqIGVhcmxpZXIuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9jbG9zZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGggPSBOVUxMOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoID0gTlVMTDsKKwl1MzIgdnBfaWQgPSB2cC0+dnBhdGgtPnZwX2lkOworCXUzMiBpc19lbXB0eSA9IFRSVUU7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJdnBhdGggPSB2cC0+dnBhdGg7CisJZGV2aCA9IHZwYXRoLT5obGRldjsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIHZwYXRoX2Nsb3NlX2V4aXQ7CisJfQorCisJbGlzdF9kZWwoJnZwLT5pdGVtKTsKKworCWlmICghbGlzdF9lbXB0eSgmdnBhdGgtPnZwYXRoX2hhbmRsZXMpKSB7CisJCWxpc3RfYWRkKCZ2cC0+aXRlbSwgJnZwYXRoLT52cGF0aF9oYW5kbGVzKTsKKwkJaXNfZW1wdHkgPSBGQUxTRTsKKwl9CisKKwlpZiAoIWlzX2VtcHR5KSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJZ290byB2cGF0aF9jbG9zZV9leGl0OworCX0KKworCWRldmgtPnZwYXRoc19kZXBsb3llZCAmPSB+dnhnZV9tQklUKHZwX2lkKTsKKworCWlmICh2cGF0aC0+cmluZ2ggIT0gTlVMTCkKKwkJX192eGdlX2h3X3JpbmdfZGVsZXRlKHZwKTsKKworCWlmICh2cGF0aC0+Zmlmb2ggIT0gTlVMTCkKKwkJX192eGdlX2h3X2ZpZm9fZGVsZXRlKHZwKTsKKworCWlmICh2cGF0aC0+c3RhdHNfYmxvY2sgIT0gTlVMTCkKKwkJX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19mcmVlKGRldmgsIHZwYXRoLT5zdGF0c19ibG9jayk7CisKKwl2ZnJlZSh2cCk7CisKKwlfX3Z4Z2VfaHdfdnBfdGVybWluYXRlKGRldmgsIHZwX2lkKTsKKworCXZwYXRoLT52cF9vcGVuID0gVlhHRV9IV19WUF9OT1RfT1BFTjsKKwordnBhdGhfY2xvc2VfZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od192cGF0aF9yZXNldCAtIFJlc2V0cyB2cGF0aAorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlcXVlc3QgYSByZXNldCBvZiB2cGF0aAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcmVzZXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXUzMiB2cF9pZDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCA9IHZwLT52cGF0aDsKKworCXZwX2lkID0gdnBhdGgtPnZwX2lkOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcmVzZXQodnBhdGgtPmhsZGV2LCB2cF9pZCk7CisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKQorCQl2cGF0aC0+c3dfc3RhdHMtPnNvZnRfcmVzZXRfY250Kys7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldCAtIFBvbGwgZm9yIHJlc2V0IGNvbXBsZXRlIGFuZCByZS1pbml0aWFsaXplLgorICogVGhpcyBmdW5jdGlvbiBwb2xsJ3MgZm9yIHRoZSB2cGF0aCByZXNldCBjb21wbGV0aW9uIGFuZCByZSBpbml0aWFsaXplcworICogdGhlIHZwYXRoLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGggPSBOVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwl1MzIgdnBfaWQ7CisKKwl2cF9pZCA9IHZwLT52cGF0aC0+dnBfaWQ7CisJdnBhdGggPSB2cC0+dnBhdGg7CisJaGxkZXYgPSB2cGF0aC0+aGxkZXY7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9yZXNldF9jaGVjayh2cGF0aCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfc3dfcmVzZXQoaGxkZXYsIHZwX2lkKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9pbml0aWFsaXplKGhsZGV2LCB2cF9pZCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAodnBhdGgtPnJpbmdoICE9IE5VTEwpCisJCV9fdnhnZV9od192cGF0aF9wcmNfY29uZmlndXJlKGhsZGV2LCB2cF9pZCk7CisKKwltZW1zZXQodnBhdGgtPmh3X3N0YXRzLCAwLAorCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbykpOworCisJbWVtc2V0KHZwYXRoLT5od19zdGF0c19zYXYsIDAsCisJCXNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvKSk7CisKKwl3cml0ZXEodnBhdGgtPnN0YXRzX2Jsb2NrLT5kbWFfYWRkciwKKwkJJnZwYXRoLT52cF9yZWctPnN0YXRzX2NmZyk7CisKKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3N0YXRzX2VuYWJsZSh2cCk7CisKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfZW5hYmxlIC0gRW5hYmxlIHZwYXRoLgorICogVGhpcyByb3V0aW5lIGNsZWFycyB0aGUgdnBhdGggcmVzZXQgdGhlcmVieSBlbmFibGluZyBhIHZwYXRoCisgKiB0byBzdGFydCBmb3J3YXJkaW5nIGZyYW1lcyBhbmQgZ2VuZXJhdGluZyBpbnRlcnJ1cHRzLgorICovCit2b2lkCit2eGdlX2h3X3ZwYXRoX2VuYWJsZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCXU2NCB2YWw2NDsKKworCWhsZGV2ID0gdnAtPnZwYXRoLT5obGRldjsKKworCXZhbDY0ID0gVlhHRV9IV19DTU5fUlNUSERMUl9DRkcxX0NMUl9WUEFUSF9SRVNFVCgKKwkJMSA8PCAoMTYgLSB2cC0+dnBhdGgtPnZwX2lkKSk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMCwgMzIpLAorCQkmaGxkZXYtPmNvbW1vbl9yZWctPmNtbl9yc3RoZGxyX2NmZzEpOworfQorCisvKgorICogdnhnZV9od192cGF0aF9zdGF0c19lbmFibGUgLSBFbmFibGUgdnBhdGggaC93c3RhdGlzdGljcy4KKyAqIEVuYWJsZSB0aGUgRE1BIHZwYXRoIHN0YXRpc3RpY3MuIFRoZSBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgdG8gcmUtZW5hYmxlCisgKiB0aGUgYWRhcHRlciB0byB1cGRhdGUgc3RhdHMgaW50byB0aGUgaG9zdCBtZW1vcnkKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9zdGF0c19lbmFibGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkodnBhdGgtPmh3X3N0YXRzX3NhdiwgdnBhdGgtPmh3X3N0YXRzLAorCQkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8pKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19nZXQodnBhdGgsIHZwYXRoLT5od19zdGF0cyk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfYWNjZXNzIC0gR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIGdpdmVuIGxvY2F0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvZmZzZXQgYW5kIHBlcmZvcm0gYW4gb3BlcmF0aW9uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3Moc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCisJCQkgICAgIHUzMiBvcGVyYXRpb24sIHUzMiBvZmZzZXQsIHU2NCAqc3RhdCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byB2cGF0aF9zdGF0c19hY2Nlc3NfZXhpdDsKKwl9CisKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJdmFsNjQgPSAgVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfT1Aob3BlcmF0aW9uKSB8CisJCSBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9TVFJPQkUgfAorCQkgVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfT0ZGU0VUX1NFTChvZmZzZXQpOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBfcmVnLT54bWFjX3N0YXRzX2FjY2Vzc19jbWQsCisJCQkJVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfU1RST0JFLAorCQkJCXZwYXRoLT5obGRldi0+Y29uZmlnLmRldmljZV9wb2xsX21pbGxpcyk7CisKKwlpZiAoKHN0YXR1cyA9PSBWWEdFX0hXX09LKSAmJiAob3BlcmF0aW9uID09IFZYR0VfSFdfU1RBVFNfT1BfUkVBRCkpCisJCSpzdGF0ID0gcmVhZHEoJnZwX3JlZy0+eG1hY19zdGF0c19hY2Nlc3NfZGF0YSk7CisJZWxzZQorCQkqc3RhdCA9IDA7CisKK3ZwYXRoX3N0YXRzX2FjY2Vzc19leGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfeG1hY190eF9zdGF0c19nZXQgLSBHZXQgdGhlIFRYIFN0YXRpc3RpY3Mgb2YgYSB2cGF0aAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfeG1hY190eF9zdGF0c19nZXQoCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCisJc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyAqdnBhdGhfdHhfc3RhdHMpCit7CisJdTY0ICp2YWw2NDsKKwlpbnQgaTsKKwl1MzIgb2Zmc2V0ID0gVlhHRV9IV19TVEFUU19WUEFUSF9UWF9PRkZTRVQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJdmFsNjQgPSAodTY0ICopIHZwYXRoX3R4X3N0YXRzOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfdHhfc3RhdHMpIC8gODsgaSsrKSB7CisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsCisJCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwKKwkJCQkJb2Zmc2V0LCB2YWw2NCk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKwkJb2Zmc2V0Kys7CisJCXZhbDY0Kys7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3htYWNfcnhfc3RhdHNfZ2V0IC0gR2V0IHRoZSBSWCBTdGF0aXN0aWNzIG9mIGEgdnBhdGgKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3htYWNfcnhfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCQkJc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF9yeF9zdGF0cyAqdnBhdGhfcnhfc3RhdHMpCit7CisJdTY0ICp2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJaW50IGk7CisJdTMyIG9mZnNldCA9IFZYR0VfSFdfU1RBVFNfVlBBVEhfUlhfT0ZGU0VUOworCXZhbDY0ID0gKHU2NCAqKSB2cGF0aF9yeF9zdGF0czsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIGV4aXQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF9yeF9zdGF0cykgLyA4OyBpKyspIHsKKwkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3N0YXRzX2FjY2Vzcyh2cGF0aCwKKwkJCQkJVlhHRV9IV19TVEFUU19PUF9SRUFELAorCQkJCQlvZmZzZXQgPj4gMywgdmFsNjQpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisKKwkJb2Zmc2V0ICs9IDg7CisJCXZhbDY0Kys7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3N0YXRzX2dldCAtIEdldCB0aGUgdnBhdGggaHcgc3RhdGlzdGljcy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZ2V0KAorCQkJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCisJCQlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvICpod19zdGF0cykKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czApOworCWh3X3N0YXRzLT5pbmlfbnVtX213cl9zZW50ID0KKwkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMF9HRVRfSU5JX05VTV9NV1JfU0VOVCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzMSk7CisJaHdfc3RhdHMtPmluaV9udW1fbXJkX3NlbnQgPQorCQkodTMyKVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMxX0dFVF9JTklfTlVNX01SRF9TRU5UKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHMyKTsKKwlod19zdGF0cy0+aW5pX251bV9jcGxfcmN2ZCA9CisJCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzJfR0VUX0lOSV9OVU1fQ1BMX1JDVkQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czMpOworCWh3X3N0YXRzLT5pbmlfbnVtX213cl9ieXRlX3NlbnQgPQorCQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTM19HRVRfSU5JX05VTV9NV1JfQllURV9TRU5UKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHM0KTsKKwlod19zdGF0cy0+aW5pX251bV9jcGxfYnl0ZV9yY3ZkID0KKwkJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzRfR0VUX0lOSV9OVU1fQ1BMX0JZVEVfUkNWRCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzNSk7CisJaHdfc3RhdHMtPndyY3JkdGFyYl94b2ZmID0KKwkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNV9HRVRfV1JDUkRUQVJCX1hPRkYodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czYpOworCWh3X3N0YXRzLT5yZGNyZHRhcmJfeG9mZiA9CisJCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzZfR0VUX1JEQ1JEVEFSQl9YT0ZGKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwMSk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50MCA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMDFfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQwKAorCQl2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50MDEpOworCWh3X3N0YXRzLT52cGF0aF9nZW5zdGF0c19jb3VudDEgPQorCSh1MzIpVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDAxX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMSgKKwkJdmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5zdGF0c19jb3VudDIzKTsKKwlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQyID0KKwkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQyM19HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDIoCisJCXZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwMSk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50MyA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMjNfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQzKAorCQl2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50NCk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50NCA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNF9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDQoCisJCXZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ1KTsKKwlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ1ID0KKwkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQ1X0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNSgKKwkJdmFsNjQpOworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0KHZwYXRoLCAmaHdfc3RhdHMtPnR4X3N0YXRzKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldCh2cGF0aCwgJmh3X3N0YXRzLT5yeF9zdGF0cyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlWWEdFX0hXX1ZQQVRIX1NUQVRTX1BJT19SRUFEKAorCQlWWEdFX0hXX1NUQVRTX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTBfT0ZGU0VUKTsKKworCWh3X3N0YXRzLT5wcm9nX2V2ZW50X3ZudW0wID0KKwkJCSh1MzIpVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMCh2YWw2NCk7CisKKwlod19zdGF0cy0+cHJvZ19ldmVudF92bnVtMSA9CisJCQkodTMyKVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTEodmFsNjQpOworCisJVlhHRV9IV19WUEFUSF9TVEFUU19QSU9fUkVBRCgKKwkJVlhHRV9IV19TVEFUU19WUEFUSF9QUk9HX0VWRU5UX1ZOVU0yX09GRlNFVCk7CisKKwlod19zdGF0cy0+cHJvZ19ldmVudF92bnVtMiA9CisJCQkodTMyKVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTIodmFsNjQpOworCisJaHdfc3RhdHMtPnByb2dfZXZlbnRfdm51bTMgPQorCQkJKHUzMilWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0zKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhfbXVsdGlfY2FzdF9zdGF0cyk7CisJaHdfc3RhdHMtPnJ4X211bHRpX2Nhc3RfZnJhbWVfZGlzY2FyZCA9CisJCSh1MTYpVlhHRV9IV19SWF9NVUxUSV9DQVNUX1NUQVRTX0dFVF9GUkFNRV9ESVNDQVJEKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhfZnJtX3RyYW5zZmVycmVkKTsKKwlod19zdGF0cy0+cnhfZnJtX3RyYW5zZmVycmVkID0KKwkJKHUzMilWWEdFX0hXX1JYX0ZSTV9UUkFOU0ZFUlJFRF9HRVRfUlhfRlJNX1RSQU5TRkVSUkVEKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhkX3JldHVybmVkKTsKKwlod19zdGF0cy0+cnhkX3JldHVybmVkID0KKwkJKHUxNilWWEdFX0hXX1JYRF9SRVRVUk5FRF9HRVRfUlhEX1JFVFVSTkVEKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+ZGJnX3N0YXRzX3J4X21wYSk7CisJaHdfc3RhdHMtPnJ4X21wYV9sZW5fZmFpbF9mcm1zID0KKwkJKHUxNilWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfTVBBX0xFTl9GQUlMX0ZSTVModmFsNjQpOworCWh3X3N0YXRzLT5yeF9tcGFfbXJrX2ZhaWxfZnJtcyA9CisJCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX01QQV9NUktfRkFJTF9GUk1TKHZhbDY0KTsKKwlod19zdGF0cy0+cnhfbXBhX2NyY19mYWlsX2ZybXMgPQorCQkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9NUEFfQ1JDX0ZBSUxfRlJNUyh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmRiZ19zdGF0c19yeF9mYXUpOworCWh3X3N0YXRzLT5yeF9wZXJtaXR0ZWRfZnJtcyA9CisJCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9QRVJNSVRURURfRlJNUyh2YWw2NCk7CisJaHdfc3RhdHMtPnJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zID0KKwkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9GQVVfUlhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVModmFsNjQpOworCWh3X3N0YXRzLT5yeF93b2xfZnJtcyA9CisJCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9XT0xfRlJNUyh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnR4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zKTsKKwlod19zdGF0cy0+dHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXMgPQorCSh1MTYpVlhHRV9IV19UWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNU19HRVRfVFhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVMoCisJCXZhbDY0KTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfY3JlYXRlIC0gQ3JlYXRlIGJsb2NrIHBvb2wKKyAqLworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfYmxvY2twb29sX2NyZWF0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkgICBzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAqYmxvY2twb29sLAorCQkJICAgdTMyIHBvb2xfc2l6ZSwKKwkJCSAgIHUzMiBwb29sX21heCkKK3sKKwl1MzIgaTsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkgPSBOVUxMOworCXZvaWQgKm1lbWJsb2NrOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJc3RydWN0IHBjaV9kZXYgKmRtYV9oYW5kbGU7CisJc3RydWN0IHBjaV9kZXYgKmFjY19oYW5kbGU7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKGJsb2NrcG9vbCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJZ290byBibG9ja3Bvb2xfY3JlYXRlX2V4aXQ7CisJfQorCisJYmxvY2twb29sLT5obGRldiA9IGhsZGV2OworCWJsb2NrcG9vbC0+YmxvY2tfc2l6ZSA9IFZYR0VfSFdfQkxPQ0tfU0laRTsKKwlibG9ja3Bvb2wtPnBvb2xfc2l6ZSA9IDA7CisJYmxvY2twb29sLT5wb29sX21heCA9IHBvb2xfbWF4OworCWJsb2NrcG9vbC0+cmVxX291dCA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9vbF9zaXplICsgcG9vbF9tYXg7IGkrKykgeworCQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5KSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OworCQl9CisJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwgJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9vbF9zaXplOyBpKyspIHsKKworCQltZW1ibG9jayA9IHZ4Z2Vfb3NfZG1hX21hbGxvYygKKwkJCQlobGRldi0+cGRldiwKKwkJCQlWWEdFX0hXX0JMT0NLX1NJWkUsCisJCQkJJmRtYV9oYW5kbGUsCisJCQkJJmFjY19oYW5kbGUpOworCisJCWlmIChtZW1ibG9jayA9PSBOVUxMKSB7CisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koYmxvY2twb29sKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGJsb2NrcG9vbF9jcmVhdGVfZXhpdDsKKwkJfQorCisJCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoaGxkZXYtPnBkZXYsIG1lbWJsb2NrLAorCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGhsZGV2LT5wZGV2LAorCQkJCWRtYV9hZGRyKSkpIHsKKworCQkJdnhnZV9vc19kbWFfZnJlZShobGRldi0+cGRldiwgbWVtYmxvY2ssICZhY2NfaGFuZGxlKTsKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OworCQl9CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCkpCisJCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQorCQkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0LAorCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKKwkJCQkJaXRlbSk7CisKKwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQllbnRyeSA9CisJCQkgICAga3phbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7CisJCQllbnRyeS0+bGVuZ3RoID0gVlhHRV9IV19CTE9DS19TSVpFOworCQkJZW50cnktPm1lbWJsb2NrID0gbWVtYmxvY2s7CisJCQllbnRyeS0+ZG1hX2FkZHIgPSBkbWFfYWRkcjsKKwkJCWVudHJ5LT5hY2NfaGFuZGxlID0gYWNjX2hhbmRsZTsKKwkJCWVudHJ5LT5kbWFfaGFuZGxlID0gZG1hX2hhbmRsZTsKKwkJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwKKwkJCQkJICAmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOworCQkJYmxvY2twb29sLT5wb29sX3NpemUrKzsKKwkJfSBlbHNlIHsKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OworCQl9CisJfQorCitibG9ja3Bvb2xfY3JlYXRlX2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveSAtIERlYWxsb2NhdGVzIHRoZSBibG9jayBwb29sCisgKi8KKwordm9pZCBfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgKmJsb2NrcG9vbCkKK3sKKworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKKwl1MTYgcmV0OworCisJaWYgKGJsb2NrcG9vbCA9PSBOVUxMKSB7CisJCXJldCA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlobGRldiA9IGJsb2NrcG9vbC0+aGxkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KSB7CisKKwkJcGNpX3VubWFwX3NpbmdsZShobGRldi0+cGRldiwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+ZG1hX2FkZHIsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmxlbmd0aCwKKwkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisKKwkJdnhnZV9vc19kbWFfZnJlZShobGRldi0+cGRldiwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+bWVtYmxvY2ssCisJCQkmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKSBwKS0+YWNjX2hhbmRsZSk7CisKKwkJbGlzdF9kZWwoCisJCQkmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5pdGVtKTsKKwkJa2ZyZWUocCk7CisJCWJsb2NrcG9vbC0+cG9vbF9zaXplLS07CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCkgeworCQlsaXN0X2RlbCgKKwkJCSYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPml0ZW0pOworCQlrZnJlZSgodm9pZCAqKXApOworCX0KKwlyZXQgPSAwOworZXhpdDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19hZGQgLSBSZXF1ZXN0IGFkZGl0aW9uYWwgYmxvY2tzCisgKi8KK3N0YXRpYwordm9pZCBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19hZGQoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgKmJsb2NrcG9vbCkKK3sKKwl1MzIgbnJlcSA9IDAsIGk7CisKKwlpZiAoKGJsb2NrcG9vbC0+cG9vbF9zaXplICArICBibG9ja3Bvb2wtPnJlcV9vdXQpIDwKKwkJVlhHRV9IV19NSU5fRE1BX0JMT0NLX1BPT0xfU0laRSkgeworCQlucmVxID0gVlhHRV9IV19JTkNSX0RNQV9CTE9DS19QT09MX1NJWkU7CisJCWJsb2NrcG9vbC0+cmVxX291dCArPSBucmVxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucmVxOyBpKyspCisJCXZ4Z2Vfb3NfZG1hX21hbGxvY19hc3luYygKKwkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKilibG9ja3Bvb2wtPmhsZGV2KS0+cGRldiwKKwkJCWJsb2NrcG9vbC0+aGxkZXYsIFZYR0VfSFdfQkxPQ0tfU0laRSk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19yZW1vdmUgLSBGcmVlIGFkZGl0aW9uYWwgYmxvY2tzCisgKi8KK3N0YXRpYwordm9pZCBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19yZW1vdmUoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgKmJsb2NrcG9vbCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpIHsKKworCQlpZiAoYmxvY2twb29sLT5wb29sX3NpemUgPCBibG9ja3Bvb2wtPnBvb2xfbWF4KQorCQkJYnJlYWs7CisKKwkJcGNpX3VubWFwX3NpbmdsZSgKKwkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKilibG9ja3Bvb2wtPmhsZGV2KS0+cGRldiwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+ZG1hX2FkZHIsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmxlbmd0aCwKKwkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisKKwkJdnhnZV9vc19kbWFfZnJlZSgKKwkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKilibG9ja3Bvb2wtPmhsZGV2KS0+cGRldiwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+bWVtYmxvY2ssCisJCQkmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5hY2NfaGFuZGxlKTsKKworCQlsaXN0X2RlbCgmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5pdGVtKTsKKworCQlsaXN0X2FkZChwLCAmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpOworCisJCWJsb2NrcG9vbC0+cG9vbF9zaXplLS07CisKKwl9Cit9CisKKy8qCisgKiB2eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hZGQgLSBjYWxsYmFjayBmb3IgdnhnZV9vc19kbWFfbWFsbG9jX2FzeW5jCisgKiBBZGRzIGEgYmxvY2sgdG8gYmxvY2sgcG9vbAorICovCit2b2lkIHZ4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FkZCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJdm9pZCAqYmxvY2tfYWRkciwKKwkJCXUzMiBsZW5ndGgsCisJCQlzdHJ1Y3QgcGNpX2RldiAqZG1hX2gsCisJCQlzdHJ1Y3QgcGNpX2RldiAqYWNjX2hhbmRsZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAgKmVudHJ5ID0gTlVMTDsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl1MzIgcmVxX291dDsKKworCWJsb2NrcG9vbCA9ICZkZXZoLT5ibG9ja19wb29sOworCisJaWYgKGJsb2NrX2FkZHIgPT0gTlVMTCkgeworCQlibG9ja3Bvb2wtPnJlcV9vdXQtLTsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCQlnb3RvIGV4aXQ7CisJfQorCisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXZoLT5wZGV2LCBibG9ja19hZGRyLCBsZW5ndGgsCisJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoZGV2aC0+cGRldiwgZG1hX2FkZHIpKSkgeworCisJCXZ4Z2Vfb3NfZG1hX2ZyZWUoZGV2aC0+cGRldiwgYmxvY2tfYWRkciwgJmFjY19oYW5kbGUpOworCQlibG9ja3Bvb2wtPnJlcV9vdXQtLTsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCQlnb3RvIGV4aXQ7CisJfQorCisKKwlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KSkKKwkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0LAorCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAorCQkJCWl0ZW0pOworCisJaWYgKGVudHJ5ID09IE5VTEwpCisJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQl2bWFsbG9jKHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSkpOworCWVsc2UKKwkJbGlzdF9kZWwoJmVudHJ5LT5pdGVtKTsKKworCWlmIChlbnRyeSAhPSBOVUxMKSB7CisJCWVudHJ5LT5sZW5ndGggPSBsZW5ndGg7CisJCWVudHJ5LT5tZW1ibG9jayA9IGJsb2NrX2FkZHI7CisJCWVudHJ5LT5kbWFfYWRkciA9IGRtYV9hZGRyOworCQllbnRyeS0+YWNjX2hhbmRsZSA9IGFjY19oYW5kbGU7CisJCWVudHJ5LT5kbWFfaGFuZGxlID0gZG1hX2g7CisJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KTsKKwkJYmxvY2twb29sLT5wb29sX3NpemUrKzsKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwl9IGVsc2UKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKworCWJsb2NrcG9vbC0+cmVxX291dC0tOworCisJcmVxX291dCA9IGJsb2NrcG9vbC0+cmVxX291dDsKK2V4aXQ6CisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9tYWxsb2MgLSBBbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBmcm9tIHBvb2wKKyAqIEFsbG9jYXRlcyBhIGJsb2NrIG9mIG1lbW9yeSBvZiBnaXZlbiBzaXplLCBlaXRoZXIgZnJvbSBibG9jayBwb29sCisgKiBvciBieSBjYWxsaW5nIHZ4Z2Vfb3NfZG1hX21hbGxvYygpCisgKi8KK3ZvaWQgKgorX192eGdlX2h3X2Jsb2NrcG9vbF9tYWxsb2Moc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHUzMiBzaXplLAorCQkJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSA9IE5VTEw7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2w7CisJdm9pZCAqbWVtYmxvY2sgPSBOVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWJsb2NrcG9vbCA9ICZkZXZoLT5ibG9ja19wb29sOworCisJaWYgKHNpemUgIT0gYmxvY2twb29sLT5ibG9ja19zaXplKSB7CisKKwkJbWVtYmxvY2sgPSB2eGdlX29zX2RtYV9tYWxsb2MoZGV2aC0+cGRldiwgc2l6ZSwKKwkJCQkJCSZkbWFfb2JqZWN0LT5oYW5kbGUsCisJCQkJCQkmZG1hX29iamVjdC0+YWNjX2hhbmRsZSk7CisKKwkJaWYgKG1lbWJsb2NrID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlkbWFfb2JqZWN0LT5hZGRyID0gcGNpX21hcF9zaW5nbGUoZGV2aC0+cGRldiwgbWVtYmxvY2ssIHNpemUsCisJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisKKwkJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihkZXZoLT5wZGV2LAorCQkJCWRtYV9vYmplY3QtPmFkZHIpKSkgeworCQkJdnhnZV9vc19kbWFfZnJlZShkZXZoLT5wZGV2LCBtZW1ibG9jaywKKwkJCQkmZG1hX29iamVjdC0+YWNjX2hhbmRsZSk7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBleGl0OworCQl9CisKKwl9IGVsc2UgeworCisJCWlmICghbGlzdF9lbXB0eSgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpKQorCQkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCQlsaXN0X2ZpcnN0X2VudHJ5KCZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCwKKwkJCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnksCisJCQkJCWl0ZW0pOworCisJCWlmIChlbnRyeSAhPSBOVUxMKSB7CisJCQlsaXN0X2RlbCgmZW50cnktPml0ZW0pOworCQkJZG1hX29iamVjdC0+YWRkciA9IGVudHJ5LT5kbWFfYWRkcjsKKwkJCWRtYV9vYmplY3QtPmhhbmRsZSA9IGVudHJ5LT5kbWFfaGFuZGxlOworCQkJZG1hX29iamVjdC0+YWNjX2hhbmRsZSA9IGVudHJ5LT5hY2NfaGFuZGxlOworCQkJbWVtYmxvY2sgPSBlbnRyeS0+bWVtYmxvY2s7CisKKwkJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwKKwkJCQkmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpOworCQkJYmxvY2twb29sLT5wb29sX3NpemUtLTsKKwkJfQorCisJCWlmIChtZW1ibG9jayAhPSBOVUxMKQorCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfYWRkKGJsb2NrcG9vbCk7CisJfQorZXhpdDoKKwlyZXR1cm4gbWVtYmxvY2s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2ZyZWUgLSBGcmVlcyB0aGUgbWVtb3J5IGFsbGNvYXRlZCB3aXRoCisJCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9tYWxsb2MKKyAqLwordm9pZAorX192eGdlX2h3X2Jsb2NrcG9vbF9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJdm9pZCAqbWVtYmxvY2ssIHUzMiBzaXplLAorCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QpCit7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKKworCWlmIChzaXplICE9IGJsb2NrcG9vbC0+YmxvY2tfc2l6ZSkgeworCQlwY2lfdW5tYXBfc2luZ2xlKGRldmgtPnBkZXYsIGRtYV9vYmplY3QtPmFkZHIsIHNpemUsCisJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQl2eGdlX29zX2RtYV9mcmVlKGRldmgtPnBkZXYsIG1lbWJsb2NrLCAmZG1hX29iamVjdC0+YWNjX2hhbmRsZSk7CisJfSBlbHNlIHsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KSkKKwkJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQkJbGlzdF9maXJzdF9lbnRyeSgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QsCisJCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAorCQkJCQlpdGVtKTsKKworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQkJdm1hbGxvYyhzaXplb2YoCisJCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5KSk7CisJCWVsc2UKKwkJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7CisKKwkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKKwkJCWVudHJ5LT5sZW5ndGggPSBzaXplOworCQkJZW50cnktPm1lbWJsb2NrID0gbWVtYmxvY2s7CisJCQllbnRyeS0+ZG1hX2FkZHIgPSBkbWFfb2JqZWN0LT5hZGRyOworCQkJZW50cnktPmFjY19oYW5kbGUgPSBkbWFfb2JqZWN0LT5hY2NfaGFuZGxlOworCQkJZW50cnktPmRtYV9oYW5kbGUgPSBkbWFfb2JqZWN0LT5oYW5kbGU7CisJCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sCisJCQkJCSZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCk7CisJCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZSsrOworCQkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwkJfSBlbHNlCisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCisJCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX3JlbW92ZShibG9ja3Bvb2wpOworCX0KKworCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWxsb2NhdGUgLSBBbGxvY2F0ZXMgYSBibG9jayBmcm9tIGJsb2NrIHBvb2wKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgYmxvY2sgZnJvbSBibG9jayBwb29sIG9yIGZyb20gdGhlIHN5c3RlbQorICovCitzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqCitfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkgPSBOVUxMOworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sOworCisJYmxvY2twb29sID0gJmRldmgtPmJsb2NrX3Bvb2w7CisKKwlpZiAoc2l6ZSA9PSBibG9ja3Bvb2wtPmJsb2NrX3NpemUpIHsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KSkKKwkJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQkJbGlzdF9maXJzdF9lbnRyeSgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QsCisJCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAorCQkJCQlpdGVtKTsKKworCQlpZiAoZW50cnkgIT0gTlVMTCkgeworCQkJbGlzdF9kZWwoJmVudHJ5LT5pdGVtKTsKKwkJCWJsb2NrcG9vbC0+cG9vbF9zaXplLS07CisJCX0KKwl9CisKKwlpZiAoZW50cnkgIT0gTlVMTCkKKwkJX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfYWRkKGJsb2NrcG9vbCk7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2ZyZWUgLSBGcmVlcyBhIGJsb2NrIGZyb20gYmxvY2sgcG9vbAorICogQGRldmg6IEhhbCBkZXZpY2UKKyAqIEBlbnRyeTogRW50cnkgb2YgYmxvY2sgdG8gYmUgZnJlZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIGEgYmxvY2sgZnJvbSBibG9jayBwb29sCisgKi8KK3ZvaWQKK19fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKKworCWJsb2NrcG9vbCA9ICZkZXZoLT5ibG9ja19wb29sOworCisJaWYgKGVudHJ5LT5sZW5ndGggPT0gYmxvY2twb29sLT5ibG9ja19zaXplKSB7CisJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KTsKKwkJYmxvY2twb29sLT5wb29sX3NpemUrKzsKKwl9CisKKwlfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19yZW1vdmUoYmxvY2twb29sKTsKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmJkZjZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCkBAIC0wLDAgKzEsMjI1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyAqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyAqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIHZ4Z2UtY29uZmlnLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgVlhHRV9DT05GSUdfSAorI2RlZmluZSBWWEdFX0NPTkZJR19ICisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaWZuZGVmIFZYR0VfQ0FDSEVfTElORV9TSVpFCisjZGVmaW5lIFZYR0VfQ0FDSEVfTElORV9TSVpFIDEyOAorI2VuZGlmCisKKyNkZWZpbmUgdnhnZV9vc192YXByaW50ZihsZXZlbCwgbWFzaywgZm10LCAuLi4pIHsgXAorCWNoYXIgYnVmZlsyNTVdOyBcCisJCXNucHJpbnRmKGJ1ZmYsIDI1NSwgZm10LCBfX1ZBX0FSR1NfXyk7IFwKKwkJcHJpbnRrKGJ1ZmYpOyBcCisJCXByaW50aygiXG4iKTsgXAorfQorCisjaWZuZGVmIFZYR0VfQUxJR04KKyNkZWZpbmUgVlhHRV9BTElHTihhZHJzLCBzaXplKSBcCisJKCgoc2l6ZSkgLSAoKCh1NjQpYWRycykgJiAoKHNpemUpLTEpKSkgJiAoKHNpemUpLTEpKQorI2VuZGlmCisKKyNkZWZpbmUgVlhHRV9IV19NSU5fTVRVCQkJCTY4CisjZGVmaW5lIFZYR0VfSFdfTUFYX01UVQkJCQk5NjAwCisjZGVmaW5lIFZYR0VfSFdfREVGQVVMVF9NVFUJCQkxNTAwCisKKyNpZmRlZiBWWEdFX0RFQlVHX0FTU0VSVAorCisvKioKKyAqIHZ4Z2VfYXNzZXJ0CisgKiBAdGVzdDogQy1jb25kaXRpb24gdG8gY2hlY2sKKyAqIEBmbXQ6IHByaW50ZiBsaWtlIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdHJhZGl0aW9uYWwgYXNzZXJ0LiBCeSBkZWZhdWx0IGFzc2VydGlvbnMKKyAqIGFyZSBlbmFibGVkLiBJdCBjYW4gYmUgZGlzYWJsZWQgYnkgdW5kZWZpbmluZyBWWEdFX0RFQlVHX0FTU0VSVCBtYWNybyBpbgorICogY29tcGlsYXRpb24KKyAqIHRpbWUuCisgKi8KKyNkZWZpbmUgdnhnZV9hc3NlcnQodGVzdCkgeyBcCisJaWYgKCEodGVzdCkpIFwKKwkJdnhnZV9vc19idWcoImJhZCBjb25kOiAiI3Rlc3QiIGF0ICVzOiVkXG4iLCBcCisJCQkJX19GSUxFX18sIF9fTElORV9fKTsgfQorI2Vsc2UKKyNkZWZpbmUgdnhnZV9hc3NlcnQodGVzdCkKKyNlbmRpZiAvKiBlbmQgb2YgVlhHRV9ERUJVR19BU1NFUlQgKi8KKworLyoqCisgKiBlbnVtIGVudW0gdnhnZV9kZWJ1Z19sZXZlbAorICogQFZYR0VfTk9ORTogZGVidWcgZGlzYWJsZWQKKyAqIEBWWEdFX0VSUjogYWxsIGVycm9ycyBnb2luZyB0byBiZSBsb2dnZWQgb3V0CisgKiBAVlhHRV9UUkFDRTogYWxsIGVycm9ycyBwbHVzIGFsbCBraW5kIG9mIHZlcmJvc2UgdHJhY2luZyBwcmludCBvdXRzCisgKiAgICAgICAgICAgICAgICAgZ29pbmcgdG8gYmUgbG9nZ2VkIG91dC4gVmVyeSBub2lzeS4KKyAqCisgKiBUaGlzIGVudW1lcmF0aW9uIGdvaW5nIHRvIGJlIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50CisgKiBkZWJ1ZyBsZXZlbHMgZHVyaW5nIHJ1bnRpbWUgaWYgREVCVUcgbWFjcm8gZGVmaW5lZCBkdXJpbmcKKyAqIGNvbXBpbGF0aW9uLiBJZiBERUJVRyBtYWNybyBub3QgZGVmaW5lZCB0aGFuIGNvZGUgd2lsbCBiZQorICogY29tcGlsZWQgb3V0LgorICovCitlbnVtIHZ4Z2VfZGVidWdfbGV2ZWwgeworCVZYR0VfTk9ORSAgID0gMCwKKwlWWEdFX1RSQUNFICA9IDEsCisJVlhHRV9FUlIgICAgPSAyCit9OworCisjZGVmaW5lIE5VTExfVlBJRAkJCQkJMHhGRkZGRkZGRgorI2lmZGVmIENPTkZJR19WWEdFX0RFQlVHX1RSQUNFX0FMTAorI2RlZmluZSBWWEdFX0RFQlVHX01PRFVMRV9NQVNLICAweGZmZmZmZmZmCisjZGVmaW5lIFZYR0VfREVCVUdfVFJBQ0VfTUFTSyAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgVlhHRV9ERUJVR19FUlJfTUFTSyAgICAgMHhmZmZmZmZmZgorI2RlZmluZSBWWEdFX0RFQlVHX01BU0sgICAgICAgICAweDAwMDAwMWZmCisjZWxzZQorI2RlZmluZSBWWEdFX0RFQlVHX01PRFVMRV9NQVNLICAweDIwMDAwMDAwCisjZGVmaW5lIFZYR0VfREVCVUdfVFJBQ0VfTUFTSyAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgVlhHRV9ERUJVR19FUlJfTUFTSyAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBWWEdFX0RFQlVHX01BU0sgICAgICAgICAweDAwMDAwMDAxCisjZW5kaWYKKworLyoKKyAqIEBWWEdFX0NPTVBPTkVOVF9MTDogZG8gZGVidWcgZm9yIHZ4Z2UgbGluayBsYXllciBtb2R1bGUKKyAqIEBWWEdFX0NPTVBPTkVOVF9BTEw6IGFjdGl2YXRlIGRlYnVnIGZvciBhbGwgbW9kdWxlcyB3aXRoIG5vIGV4Y2VwdGlvbnMKKyAqCisgKiBUaGlzIGVudW1lcmF0aW9uIGdvaW5nIHRvIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggbW9kdWxlcworICogb3IgbGlicmFyaWVzIGR1cmluZyBjb21waWxhdGlvbiBhbmQgcnVudGltZS4gIE1ha2VmaWxlIG11c3QgZGVjbGFyZQorICogVlhHRV9ERUJVR19NT0RVTEVfTUFTSyBtYWNybyBhbmQgc2V0IGl0IHRvIHByb3BlciB2YWx1ZS4KKyAqLworI2RlZmluZQlWWEdFX0NPTVBPTkVOVF9MTAkJCQkweDIwMDAwMDAwCisjZGVmaW5lCVZYR0VfQ09NUE9ORU5UX0FMTAkJCQkweGZmZmZmZmZmCisKKyNkZWZpbmUgVlhHRV9IV19CQVNFX0lORgkxMDAKKyNkZWZpbmUgVlhHRV9IV19CQVNFX0VSUgkyMDAKKyNkZWZpbmUgVlhHRV9IV19CQVNFX0JBRENGRwkzMDAKKworZW51bSB2eGdlX2h3X3N0YXR1cyB7CisJVlhHRV9IV19PSwkJCQkgID0gMCwKKwlWWEdFX0hXX0ZBSUwJCQkJICA9IDEsCisJVlhHRV9IV19QRU5ESU5HCQkJCSAgPSAyLAorCVZYR0VfSFdfQ09NUExFVElPTlNfUkVNQUlOCQkgID0gMywKKworCVZYR0VfSFdfSU5GX05PX01PUkVfQ09NUExFVEVEX0RFU0NSSVBUT1JTID0gVlhHRV9IV19CQVNFX0lORiArIDEsCisJVlhHRV9IV19JTkZfT1VUX09GX0RFU0NSSVBUT1JTCQkgID0gVlhHRV9IV19CQVNFX0lORiArIDIsCisKKwlWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxLAorCVZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlkJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMiwKKwlWWEdFX0hXX0VSUl9WUEFUSF9OT1RfQVZBSUxBQkxFCSAgCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMywKKwlWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTgkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyA0LAorCVZYR0VfSFdfRVJSX1dST05HX0lSUQkJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgNSwKKwlWWEdFX0hXX0VSUl9TV0FQUEVSX0NUUkwJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgNiwKKwlWWEdFX0hXX0VSUl9JTlZBTElEX01UVV9TSVpFCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDcsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9JTkRFWAkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyA4LAorCVZYR0VfSFdfRVJSX0lOVkFMSURfVFlQRQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyA5LAorCVZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDEwLAorCVZYR0VfSFdfRVJSX0lOVkFMSURfREVWSUNFCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDExLAorCVZYR0VfSFdfRVJSX1ZFUlNJT05fQ09ORkxJQ1QJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTIsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9QQ0lfSU5GTwkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxMywKKwlWWEdFX0hXX0VSUl9JTlZBTElEX1RDT0RFIAkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxNCwKKwlWWEdFX0hXX0VSUl9JTlZBTElEX0JMT0NLX1NJWkUJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTUsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9TVEFURQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxNiwKKwlWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT04JICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxNywKKwlWWEdFX0hXX0VSUl9JTlZBTElEX1BPUlQgCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDE4LAorCVZYR0VfSFdfRVJSX0ZJRk8JCSAJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxOSwKKwlWWEdFX0hXX0VSUl9WUEFUSAkJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMjAsCisJVlhHRV9IV19FUlJfQ1JJVElDQUwJCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDIxLAorCVZYR0VfSFdfRVJSX1NMT1RfRlJFRVpFIAkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAyMiwKKworCVZYR0VfSFdfQkFEQ0ZHX1JJTkdfSU5ESUNBVEVfTUFYX1BLVFMJICA9IFZYR0VfSFdfQkFTRV9CQURDRkcgKyAxLAorCVZYR0VfSFdfQkFEQ0ZHX0ZJRk9fQkxPQ0tTCQkgID0gVlhHRV9IV19CQVNFX0JBRENGRyArIDIsCisJVlhHRV9IV19CQURDRkdfVlBBVEhfTVRVCQkgID0gVlhHRV9IV19CQVNFX0JBRENGRyArIDMsCisJVlhHRV9IV19CQURDRkdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHCSAgPSBWWEdFX0hXX0JBU0VfQkFEQ0ZHICsgNCwKKwlWWEdFX0hXX0JBRENGR19WUEFUSF9NSU5fQkFORFdJRFRICSAgPSBWWEdFX0hXX0JBU0VfQkFEQ0ZHICsgNSwKKwlWWEdFX0hXX0JBRENGR19JTlRSX01PREUJCSAgPSBWWEdFX0hXX0JBU0VfQkFEQ0ZHICsgNiwKKwlWWEdFX0hXX0JBRENGR19SVFNfTUFDX0VOCQkgID0gVlhHRV9IV19CQVNFX0JBRENGRyArIDcsCisKKwlWWEdFX0hXX0VPRl9UUkFDRV9CVUYJCQkgID0gLTEKK307CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfZGV2aWNlX2xpbmtfc3RhdGUgLSBMaW5rIHN0YXRlIGVudW1lcmF0aW9uLgorICogQFZYR0VfSFdfTElOS19OT05FOiBJbnZhbGlkIGxpbmsgc3RhdGUuCisgKiBAVlhHRV9IV19MSU5LX0RPV046IExpbmsgaXMgZG93bi4KKyAqIEBWWEdFX0hXX0xJTktfVVA6IExpbmsgaXMgdXAuCisgKgorICovCitlbnVtIHZ4Z2VfaHdfZGV2aWNlX2xpbmtfc3RhdGUgeworCVZYR0VfSFdfTElOS19OT05FLAorCVZYR0VfSFdfTElOS19ET1dOLAorCVZYR0VfSFdfTElOS19VUAorfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfZGF0ZSAtIERhdGUgRm9ybWF0CisgKiBAZGF5OiBEYXkKKyAqIEBtb250aDogTW9udGgKKyAqIEB5ZWFyOiBZZWFyCisgKiBAZGF0ZTogRGF0ZSBpbiBzdHJpbmcgZm9ybWF0CisgKgorICogU3RydWN0dXJlIGZvciByZXR1cm5pbmcgZGF0ZQorICovCisKKyNkZWZpbmUgVlhHRV9IV19GV19TVFJMRU4JMzIKK3N0cnVjdCB2eGdlX2h3X2RldmljZV9kYXRlIHsKKwl1MzIgICAgIGRheTsKKwl1MzIgICAgIG1vbnRoOworCXUzMiAgICAgeWVhcjsKKwljaGFyICAgIGRhdGVbVlhHRV9IV19GV19TVFJMRU5dOworfTsKKworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3ZlcnNpb24geworCXUzMiAgICAgbWFqb3I7CisJdTMyICAgICBtaW5vcjsKKwl1MzIgICAgIGJ1aWxkOworCWNoYXIgICAgdmVyc2lvbltWWEdFX0hXX0ZXX1NUUkxFTl07Cit9OworCit1NjQKK19fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCgKKwl1MzIgdnBfaWQsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZyk7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcgLSBDb25maWd1cmF0aW9uIG9mIGZpZm8uCisgKiBAZW5hYmxlOiBJcyB0aGlzIGZpZm8gdG8gYmUgY29tbWlzc2lvbmVkCisgKiBAZmlmb19ibG9ja3M6IE51bWJlcnMgb2YgVHhETCAodGhhdCBpcywgbGlzdHMgb2YgVHggZGVzY3JpcHRvcnMpCisgKiAJCWJsb2NrcyBwZXIgcXVldWUuCisgKiBAbWF4X2ZyYWdzOiBNYXggbnVtYmVyIG9mIFR4IGJ1ZmZlcnMgcGVyIFR4REwgKHRoYXQgaXMsIHBlciBzaW5nbGUKKyAqICAgICAgICAgICAgIHRyYW5zbWl0IG9wZXJhdGlvbikuCisgKiAgICAgICAgICAgICBObyBtb3JlIHRoYW4gMjU2IHRyYW5zbWl0IGJ1ZmZlcnMgY2FuIGJlIHNwZWNpZmllZC4KKyAqIEBtZW1ibG9ja19zaXplOiBGaWZvIGRlc2NyaXB0b3JzIGFyZSBhbGxvY2F0ZWQgaW4gYmxvY2tzIG9mIEBtZW1fYmxvY2tfc2l6ZQorICogICAgICAgICAgICAgYnl0ZXMuIFNldHRpbmcgQG1lbWJsb2NrX3NpemUgdG8gcGFnZSBzaXplIGVuc3VyZXMKKyAqICAgICAgICAgICAgIGJ5LXBhZ2UgYWxsb2NhdGlvbiBvZiBkZXNjcmlwdG9ycy4gMTI4SyBieXRlcyBpcyB0aGUKKyAqICAgICAgICAgICAgIG1heGltdW0gc3VwcG9ydGVkIGJsb2NrIHNpemUuCisgKiBAYWxpZ25tZW50X3NpemU6IHBlciBUeCBmcmFnbWVudCBETUEtYWJsZSBtZW1vcnkgdXNlZCB0byBhbGlnbiB0cmFuc21pdCBkYXRhCisgKiAgICAgICAgICAgICAoZS5nLiwgdG8gYWxpZ24gb24gYSBjYWNoZSBsaW5lKS4KKyAqIEBpbnRyOiBCb29sZWFuLiBVc2UgMSB0byBnZW5lcmF0ZSBpbnRlcnJ1cHQgZm9yIGVhY2ggY29tcGxldGVkIFR4REwuCisgKiAgICAgICAgICAgICBVc2UgMCBvdGhlcndpc2UuCisgKiBAbm9fc25vb3BfYml0czogSWYgbm9uLXplcm8sIHNwZWNpZmllcyBuby1zbm9vcCBQQ0kgb3BlcmF0aW9uLAorICogICAgICAgICAgICAgd2hpY2ggZ2VuZXJhbGx5IGltcHJvdmVzIGxhdGVuY3kgb2YgdGhlIGhvc3QgYnJpZGdlIG9wZXJhdGlvbgorICogICAgICAgICAgICAgKHNlZSBQQ0kgc3BlY2lmaWNhdGlvbikuIEZvciB2YWxpZCB2YWx1ZXMgcGxlYXNlIHJlZmVyCisgKiAgICAgICAgICAgICB0byBzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZ3t9IGluIHRoZSBkcml2ZXIgc291cmNlcy4KKyAqIENvbmZpZ3VyYXRpb24gb2YgYWxsIFRpdGFuIGZpZm9zLgorICogTm90ZTogVmFsaWQgKG1pbiwgbWF4KSByYW5nZSBmb3IgZWFjaCBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIGluIHRoZSBib2R5IG9mCisgKiB0aGUgc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWd7fSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlnIHsKKwl1MzIJCQkJZW5hYmxlOworI2RlZmluZSBWWEdFX0hXX0ZJRk9fRU5BQkxFCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19GSUZPX0RJU0FCTEUJCQkJMAorCisJdTMyCQkJCWZpZm9fYmxvY2tzOworI2RlZmluZSBWWEdFX0hXX01JTl9GSUZPX0JMT0NLUwkJCQkyCisjZGVmaW5lIFZYR0VfSFdfTUFYX0ZJRk9fQkxPQ0tTCQkJCTEyOAorCisJdTMyCQkJCW1heF9mcmFnczsKKyNkZWZpbmUgVlhHRV9IV19NSU5fRklGT19GUkFHUwkJCQkxCisjZGVmaW5lIFZYR0VfSFdfTUFYX0ZJRk9fRlJBR1MJCQkJMjU2CisKKwl1MzIJCQkJbWVtYmxvY2tfc2l6ZTsKKyNkZWZpbmUgVlhHRV9IV19NSU5fRklGT19NRU1CTE9DS19TSVpFCQkJVlhHRV9IV19CTE9DS19TSVpFCisjZGVmaW5lIFZYR0VfSFdfTUFYX0ZJRk9fTUVNQkxPQ0tfU0laRQkJCTEzMTA3MgorI2RlZmluZSBWWEdFX0hXX0RFRl9GSUZPX01FTUJMT0NLX1NJWkUJCQk4MDk2CisKKwl1MzIJCSAgICAgICAgICAgICAgICBhbGlnbm1lbnRfc2l6ZTsKKyNkZWZpbmUgVlhHRV9IV19NSU5fRklGT19BTElHTk1FTlRfU0laRQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9GSUZPX0FMSUdOTUVOVF9TSVpFCQk2NTUzNgorI2RlZmluZSBWWEdFX0hXX0RFRl9GSUZPX0FMSUdOTUVOVF9TSVpFCQlWWEdFX0NBQ0hFX0xJTkVfU0laRQorCisJdTMyCQkgICAgICAgICAgICAgICAgaW50cjsKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1FVRVVFX0lOVFJfRU5BQkxFCQkJMQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fUVVFVUVfSU5UUl9ESVNBQkxFCQkJMAorI2RlZmluZSBWWEdFX0hXX0ZJRk9fUVVFVUVfSU5UUl9ERUZBVUxUCQkJMAorCisJdTMyCQkJCW5vX3Nub29wX2JpdHM7CisjZGVmaW5lIFZYR0VfSFdfRklGT19OT19TTk9PUF9ESVNBQkxFRAkJCTAKKyNkZWZpbmUgVlhHRV9IV19GSUZPX05PX1NOT09QX1RYRAkJCTEKKyNkZWZpbmUgVlhHRV9IV19GSUZPX05PX1NOT09QX0ZSTQkJCTIKKyNkZWZpbmUgVlhHRV9IV19GSUZPX05PX1NOT09QX0FMTAkJCTMKKyNkZWZpbmUgVlhHRV9IV19GSUZPX05PX1NOT09QX0RFRkFVTFQJCQkwCisKK307CisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3JpbmdfY29uZmlnIC0gUmluZyBjb25maWd1cmF0aW9ucy4KKyAqIEBlbmFibGU6IElzIHRoaXMgcmluZyB0byBiZSBjb21taXNzaW9uZWQKKyAqIEByaW5nX2Jsb2NrczogTnVtYmVycyBvZiBSeEQgYmxvY2tzIGluIHRoZSByaW5nCisgKiBAYnVmZmVyX21vZGU6IFJlY2VpdmUgYnVmZmVyIG1vZGUgKDEsIDIsIDMsIG9yIDUpOyBmb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIKKyAqICAgICAgICAgICAgIHRvIFRpdGFuIFVzZXIgR3VpZGUuCisgKiBAc2NhdHRlcl9tb2RlOiBUaXRhbiBzdXBwb3J0cyB0d28gcmVjZWl2ZSBzY2F0dGVyIG1vZGVzOiBBIGFuZCBCLgorICogICAgICAgICAgICAgRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIFRpdGFuIFVzZXIgR3VpZGUuCisgKiBAcnhfdGltZXJfdmFsOiBUaGUgbnVtYmVyIG9mIDMybnMgcGVyaW9kcyB0aGF0IHdvdWxkIGJlIGNvdW50ZWQgYmV0d2VlbiB0d28KKyAqICAgICAgICAgICAgIHRpbWVyIGludGVycnVwdHMuCisgKiBAZ3JlZWR5X3JldHVybjogSWYgU2V0IGl0IGZvcmNlcyB0aGUgZGV2aWNlIHRvIHJldHVybiBhYnNvbHV0ZWx5IGFsbCBSeEQKKyAqICAgICAgICAgICAgIHRoYXQgYXJlIGNvbnN1bWVkIGFuZCBzdGlsbCBvbiBib2FyZCB3aGVuIGEgdGltZXIgaW50ZXJydXB0CisgKiAgICAgICAgICAgICB0cmlnZ2Vycy4gSWYgQ2xlYXIsIHRoZW4gaWYgdGhlIGRldmljZSBoYXMgYWxyZWFkeSByZXR1cm5lZAorICogICAgICAgICAgICAgUnhEIGJlZm9yZSBjdXJyZW50IHRpbWVyIGludGVycnVwdCB0cmlnZXJyZWQgYW5kIGFmdGVyIHRoZQorICogICAgICAgICAgICAgcHJldmlvdXMgdGltZXIgaW50ZXJydXB0IHRyaWdnZXJlZCwgdGhlbiB0aGUgZGV2aWNlIGlzIG5vdAorICogICAgICAgICAgICAgZm9yY2VkIHRvIHJldHVybmVkIHRoZSByZXN0IG9mIHRoZSBjb25zdW1lZCBSeEQgdGhhdCBpdCBoYXMKKyAqICAgICAgICAgICAgIG9uIGJvYXJkIHdoaWNoIGFjY291bnQgZm9yIGEgYnl0ZSBjb3VudCBsZXNzIHRoYW4gdGhlIG9uZQorICogICAgICAgICAgICAgcHJvZ3JhbW1lZCBpbnRvIFBSQ19DRkc2LlJYRF9DUlhEVCBmaWVsZAorICogQHJ4X3RpbWVyX2NpOiBUQkQKKyAqIEBiYWNrb2ZmX2ludGVydmFsX3VzOiBUaW1lIChpbiBtaWNyb3NlY29uZHMpLCBhZnRlciB3aGljaCBUaXRhbgorICogICAgICAgICAgICAgdHJpZXMgdG8gZG93bmxvYWQgUnhEcyBwb3N0ZWQgYnkgdGhlIGhvc3QuCisgKiAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlICJiYWNrb2ZmIiBkb2VzIG5vdCBoYXBwZW4gaWYgaG9zdCBwb3N0cyByZWNlaXZlCisgKiAgICAgICAgICAgICBkZXNjcmlwdG9ycyBpbiB0aGUgdGltZWx5IGZhc2hpb24uCisgKiBSaW5nIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0cnVjdCB2eGdlX2h3X3JpbmdfY29uZmlnIHsKKwl1MzIJCQkJZW5hYmxlOworI2RlZmluZSBWWEdFX0hXX1JJTkdfRU5BQkxFCQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfUklOR19ESVNBQkxFCQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfUklOR19ERUZBVUxUCQkJCQkxCisKKwl1MzIJCQkJcmluZ19ibG9ja3M7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1JJTkdfQkxPQ0tTCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19NQVhfUklOR19CTE9DS1MJCQkJMTI4CisjZGVmaW5lIFZYR0VfSFdfREVGX1JJTkdfQkxPQ0tTCQkJCTIKKworCXUzMgkJCQlidWZmZXJfbW9kZTsKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9CVUZGRVJfTU9ERV8xCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9CVUZGRVJfTU9ERV8zCQkJCTMKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9CVUZGRVJfTU9ERV81CQkJCTUKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9CVUZGRVJfTU9ERV9ERUZBVUxUCQkJMQorCisJdTMyCQkJCXNjYXR0ZXJfbW9kZTsKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9BCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9CCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9DCQkJCTIKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9VU0VfRkxBU0hfREVGQVVMVAkJMHhmZmZmZmZmZgorCisJdTY0CQkJCXJ4ZHNfbGltaXQ7CisjZGVmaW5lIFZYR0VfSFdfREVGX1JJTkdfUlhEU19MSU1JVAkJCQk0NAorfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgLSBDb25maWd1cmF0aW9uIG9mIHZpcnR1YWwgcGF0aAorICogQHZwX2lkOiBWaXJ0dWFsIFBhdGggSWQKKyAqIEBtaW5fYmFuZHdpZHRoOiBNaW5pbXVtIEd1YXJhbnRlZWQgYmFuZHdpZHRoCisgKiBAcmluZzogU2VlIHN0cnVjdCB2eGdlX2h3X3JpbmdfY29uZmlne30uCisgKiBAZmlmbzogU2VlIHN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlne30uCisgKiBAdHRpOiBDb25maWd1cmF0aW9uIG9mIGludGVycnVwdCBhc3NvY2lhdGVkIHdpdGggVHJhbnNtaXQuCisgKiAgICAgICAgICAgICBzZWUgc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlnKCk7CisgKiBAcnRpOiBDb25maWd1cmF0aW9uIG9mIGludGVycnVwdCBhc3NvY2lhdGVkIHdpdGggUmVjZWl2ZS4KKyAqICAgICAgICAgICAgICBzZWUgc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlnKCk7CisgKiBAbXR1OiBtdHUgc2l6ZSB1c2VkIG9uIHRoaXMgcG9ydC4KKyAqIEBycGFfc3RyaXBfdmxhbl90YWc6IFN0cmlwIFZMQU4gVGFnIGVuYWJsZS9kaXNhYmxlLiBJbnN0cnVjdHMgdGhlIGRldmljZSB0bworICogICAgICAgICAgICAgcmVtb3ZlIHRoZSBWTEFOIHRhZyBmcm9tIGFsbCByZWNlaXZlZCB0YWdnZWQgZnJhbWVzIHRoYXQgYXJlIG5vdAorICogICAgICAgICAgICAgcmVwbGljYXRlZCBhdCB0aGUgaW50ZXJuYWwgTDIgc3dpdGNoLgorICogICAgICAgICAgICAgMCAtIERvIG5vdCBzdHJpcCB0aGUgVkxBTiB0YWcuCisgKiAgICAgICAgICAgICAxIC0gU3RyaXAgdGhlIFZMQU4gdGFnLiBSZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZywgVkxBTiB0YWdzIGFyZQorICogICAgICAgICAgICAgICAgIGFsd2F5cyBwbGFjZWQgaW50byB0aGUgUnhETUEgZGVzY3JpcHRvci4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IHRoZSBkcml2ZXIgdG8gcGFzcyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvCisgKiBjb25maWd1cmUgVmlydHVhbCBQYXRoLgorICovCitzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgeworCXUzMgkJCQl2cF9pZDsKKworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1BSSU9SSVRZX01JTgkJCTAKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9QUklPUklUWV9NQVgJCQkxNgorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1BSSU9SSVRZX0RFRkFVTFQJCQkwCisKKwl1MzIJCQkJbWluX2JhbmR3aWR0aDsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUlOCQkJMAorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NQVgJCQkxMDAKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfREVGQVVMVAkJCTAKKworCXN0cnVjdCB2eGdlX2h3X3JpbmdfY29uZmlnCQlyaW5nOworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlnCQlmaWZvOworCXN0cnVjdCB2eGdlX2h3X3RpbV9pbnRyX2NvbmZpZwl0dGk7CisJc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlnCXJ0aTsKKworCXUzMgkJCQltdHU7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfTUlOX0lOSVRJQUxfTVRVCQkJVlhHRV9IV19NSU5fTVRVCisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfTUFYX0lOSVRJQUxfTVRVCQkJVlhHRV9IV19NQVhfTVRVCisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfVVNFX0ZMQVNIX0RFRkFVTFRfSU5JVElBTF9NVFUJMHhmZmZmZmZmZgorCisJdTMyCQkJCXJwYV9zdHJpcF92bGFuX3RhZzsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRU5BQkxFCQkJMQorI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19ESVNBQkxFCQkwCisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX1VTRV9GTEFTSF9ERUZBVUxUCTB4ZmZmZmZmZmYKKworfTsKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAtIERldmljZSBjb25maWd1cmF0aW9uLgorICogQGRtYV9ibG9ja3Bvb2xfaW5pdGlhbDogSW5pdGlhbCBzaXplIG9mIERNQSBQb29sCisgKiBAZG1hX2Jsb2NrcG9vbF9tYXg6IE1heGltdW0gYmxvY2tzIGluIERNQSBwb29sCisgKiBAaW50cl9tb2RlOiBMaW5lLCBvciBNU0ktWCBpbnRlcnJ1cHQuCisgKgorICogQHJ0aF9lbjogRW5hYmxlIFJlY2VpdmUgVHJhZmZpYyBIYXNoaW5nKFJUSCkgdXNpbmcgSVQoSW5kaXJlY3Rpb24gVGFibGUpLgorICogQHJ0aF9pdF90eXBlOiBSVEggSVQgdGFibGUgcHJvZ3JhbW1pbmcgdHlwZQorICogQHJ0c19tYWNfZW46IEVuYWJsZSBSZWNlaXZlIFRyYWZmaWMgU3RlZXJpbmcgdXNpbmcgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEB2cF9jb25maWc6IENvbmZpZ3VyYXRpb24gZm9yIHZpcnR1YWwgcGF0aHMKKyAqIEBkZXZpY2VfcG9sbF9taWxsaXM6IFNwZWNpZnkgdGhlIGludGVydmFsIChpbiBtdWxsaXNlY29uZHMpCisgKiAJCQl0byB3YWl0IGZvciByZWdpc3RlciByZWFkcworICoKKyAqIFRpdGFuIGNvbmZpZ3VyYXRpb24uCisgKiBDb250YWlucyBwZXItZGV2aWNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgaW5jbHVkaW5nOgorICogLSBzdGF0cyBzYW1wbGluZyBpbnRlcnZhbCwgZXRjLgorICoKKyAqIEluIGFkZGl0aW9uLCBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlne30gaW5jbHVkZXMgInN1Ym9yZGluYXRlIgorICogY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZzoKKyAqIC0gZmlmb3MgYW5kIHJpbmdzOworICogLSBNQUMgKGRvbmUgYXQgZmlybXdhcmUgbGV2ZWwpLgorICoKKyAqIFNlZSBUaXRhbiBVc2VyIEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCisgKiBOb3RlOiBWYWxpZCAobWluLCBtYXgpIHJhbmdlIGZvciBlYWNoIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGJvZHkgb2YKKyAqIHRoZSBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlne30gc3RydWN0dXJlLiBQbGVhc2UgcmVmZXIgdG8gdGhlCisgKiBjb3JyZXNwb25kaW5nIGluY2x1ZGUgZmlsZS4KKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od190aW1faW50cl9jb25maWd7fS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyB7CisJdTMyCQkJCWRtYV9ibG9ja3Bvb2xfaW5pdGlhbDsKKwl1MzIJCQkJZG1hX2Jsb2NrcG9vbF9tYXg7CisjZGVmaW5lIFZYR0VfSFdfTUlOX0RNQV9CTE9DS19QT09MX1NJWkUJCQkwCisjZGVmaW5lIFZYR0VfSFdfSU5JVElBTF9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkwCisjZGVmaW5lIFZYR0VfSFdfSU5DUl9ETUFfQkxPQ0tfUE9PTF9TSVpFCQk0CisjZGVmaW5lIFZYR0VfSFdfTUFYX0RNQV9CTE9DS19QT09MX1NJWkUJCQk0MDk2CisKKyNkZWZpbmUgICAgICAgIFZYR0VfSFdfTUFYX1BBWUxPQURfU0laRV81MTIJCTIKKworCXUzMgkJCQlpbnRyX21vZGU7CisjZGVmaW5lIFZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkUJCQkwCisjZGVmaW5lIFZYR0VfSFdfSU5UUl9NT0RFX01TSVgJCQkJMQorI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UCQkJMgorCisjZGVmaW5lIFZYR0VfSFdfSU5UUl9NT0RFX0RFRgkJCQkwCisKKwl1MzIJCQkJcnRoX2VuOworI2RlZmluZSBWWEdFX0hXX1JUSF9ESVNBQkxFCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19SVEhfRU5BQkxFCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19SVEhfREVGQVVMVAkJCQkwCisKKwl1MzIJCQkJcnRoX2l0X3R5cGU7CisjZGVmaW5lIFZYR0VfSFdfUlRIX0lUX1RZUEVfU09MT19JVAkJCTAKKyNkZWZpbmUgVlhHRV9IV19SVEhfSVRfVFlQRV9NVUxUSV9JVAkJCTEKKyNkZWZpbmUgVlhHRV9IV19SVEhfSVRfVFlQRV9ERUZBVUxUCQkJMAorCisJdTMyCQkJCXJ0c19tYWNfZW47CisjZGVmaW5lIFZYR0VfSFdfUlRTX01BQ19ESVNBQkxFCQkJMAorI2RlZmluZSBWWEdFX0hXX1JUU19NQUNfRU5BQkxFCQkJMQorI2RlZmluZSBWWEdFX0hXX1JUU19NQUNfREVGQVVMVAkJCTAKKworCXN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZwl2cF9jb25maWdbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107CisKKwl1MzIJCQkJZGV2aWNlX3BvbGxfbWlsbGlzOworI2RlZmluZSBWWEdFX0hXX01JTl9ERVZJQ0VfUE9MTF9NSUxMSVMJCQkxCisjZGVmaW5lIFZYR0VfSFdfTUFYX0RFVklDRV9QT0xMX01JTExJUwkJCTEwMDAwMAorI2RlZmluZSBWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMJCQkxMDAwCisKK307CisKKy8qKgorICogZnVuY3Rpb24gdnhnZV91bGRfbGlua191cF9mIC0gTGluay1VcCBjYWxsYmFjayBwcm92aWRlZCBieSBkcml2ZXIuCisgKiBAZGV2aDogSFcgZGV2aWNlIGhhbmRsZS4KKyAqIExpbmstdXAgbm90aWZpY2F0aW9uIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIuCisgKiBUaGlzIGlzIG9uZSBvZiB0aGUgcGVyLWRyaXZlciBjYWxsYmFja3MsIHNlZSBzdHJ1Y3QgdnhnZV9od191bGRfY2Jze30uCisgKgorICogU2VlIGFsc286IHN0cnVjdCB2eGdlX2h3X3VsZF9jYnN7fSwgdnhnZV91bGRfbGlua19kb3duX2Z7fSwKKyAqIHZ4Z2VfaHdfZHJpdmVyX2luaXRpYWxpemUoKS4KKyAqLworCisvKioKKyAqIGZ1bmN0aW9uIHZ4Z2VfdWxkX2xpbmtfZG93bl9mIC0gTGluay1Eb3duIGNhbGxiYWNrIHByb3ZpZGVkIGJ5CisgKiBkcml2ZXIuCisgKiBAZGV2aDogSFcgZGV2aWNlIGhhbmRsZS4KKyAqCisgKiBMaW5rLURvd24gbm90aWZpY2F0aW9uIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIuCisgKiBUaGlzIGlzIG9uZSBvZiB0aGUgcGVyLWRyaXZlciBjYWxsYmFja3MsIHNlZSBzdHJ1Y3QgdnhnZV9od191bGRfY2Jze30uCisgKgorICogU2VlIGFsc286IHN0cnVjdCB2eGdlX2h3X3VsZF9jYnN7fSwgdnhnZV91bGRfbGlua191cF9me30sCisgKiB2eGdlX2h3X2RyaXZlcl9pbml0aWFsaXplKCkuCisgKi8KKworLyoqCisgKiBmdW5jdGlvbiB2eGdlX3VsZF9jcml0X2Vycl9mIC0gQ3JpdGljYWwgRXJyb3Igbm90aWZpY2F0aW9uIGNhbGxiYWNrLgorICogQGRldmg6IEhXIGRldmljZSBoYW5kbGUuCisgKiAodHlwaWNhbGx5IC0gYXQgSFcgZGV2aWNlIGlpbml0aWFsaXphdGlvbiB0aW1lKS4KKyAqIEB0eXBlOiBFbnVtZXJhdGVkIGh3IGVycm9yLCBlLmcuOiBkb3VibGUgRUNDLgorICogQHNlcnJfZGF0YTogVGl0YW4gc3RhdHVzLgorICogQGV4dF9kYXRhOiBFeHRlbmRlZCBkYXRhLiBUaGUgY29udGVudHMgZGVwZW5kcyBvbiB0aGUgQHR5cGUuCisgKgorICogTGluay1Eb3duIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBwcm92aWRlZCBieSB0aGUgZHJpdmVyLgorICogVGhpcyBpcyBvbmUgb2YgdGhlIHBlci1kcml2ZXIgY2FsbGJhY2tzLCBzZWUgc3RydWN0IHZ4Z2VfaHdfdWxkX2Nic3t9LgorICoKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od191bGRfY2Jze30sIGVudW0gdnhnZV9od19ldmVudHt9LAorICogdnhnZV9od19kcml2ZXJfaW5pdGlhbGl6ZSgpLgorICovCisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdWxkX2NicyAtIGRyaXZlciAic2xvdy1wYXRoIiBjYWxsYmFja3MuCisgKiBAbGlua191cDogU2VlIHZ4Z2VfdWxkX2xpbmtfdXBfZnt9LgorICogQGxpbmtfZG93bjogU2VlIHZ4Z2VfdWxkX2xpbmtfZG93bl9me30uCisgKiBAY3JpdF9lcnI6IFNlZSB2eGdlX3VsZF9jcml0X2Vycl9me30uCisgKgorICogRHJpdmVyIHNsb3ctcGF0aCAocGVyLWRyaXZlcikgY2FsbGJhY2tzLgorICogSW1wbGVtZW50ZWQgYnkgZHJpdmVyIGFuZCBwcm92aWRlZCB0byBIVyB2aWEKKyAqIHZ4Z2VfaHdfZHJpdmVyX2luaXRpYWxpemUoKS4KKyAqIE5vdGUgdGhhdCB0aGVzZSBjYWxsYmFja3MgYXJlIG5vdCBtYW5kYXRvcnk6IEhXIHdpbGwgbm90IGludm9rZQorICogYSBjYWxsYmFjayBpZiBOVUxMIGlzIHNwZWNpZmllZC4KKyAqCisgKiBTZWUgYWxzbzogdnhnZV9od19kcml2ZXJfaW5pdGlhbGl6ZSgpLgorICovCitzdHJ1Y3QgdnhnZV9od191bGRfY2JzIHsKKworCXZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisJdm9pZCAoKmxpbmtfZG93bikoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCXZvaWQgKCpjcml0X2Vycikoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQllbnVtIHZ4Z2VfaHdfZXZlbnQgdHlwZSwgdTY0IGV4dF9kYXRhKTsKK307CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAtIEJsb2NrIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBpdGVtOiBMaXN0IGhlYWRlciB1c2VkIHRvIGxpbmsuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGJsb2NrCisgKiBAbWVtYmxvY2s6IFZpcnR1YWwgYWRkcmVzcyBibG9jaworICogQGRtYV9hZGRyOiBETUEgQWRkcmVzcyBvZiB0aGUgYmxvY2suCisgKiBAZG1hX2hhbmRsZTogRE1BIGhhbmRsZSBvZiB0aGUgYmxvY2suCisgKiBAYWNjX2hhbmRsZTogRE1BIGFjYyBoYW5kbGUKKyAqCisgKiBCbG9jayBpcyBhbGxvY2F0ZWQgd2l0aCBhIGhlYWRlciB0byBwdXQgdGhlIGJsb2NrcyBpbnRvIGxpc3QuCisgKgorICovCitzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZAlpdGVtOworCXUzMgkJCWxlbmd0aDsKKwl2b2lkCQkJKm1lbWJsb2NrOworCWRtYV9hZGRyX3QJCWRtYV9hZGRyOworCXN0cnVjdCBwY2lfZGV2IAkJKmRtYV9oYW5kbGU7CisJc3RydWN0IHBjaV9kZXYgCQkqYWNjX2hhbmRsZTsKK307CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAtIEJsb2NrIFBvb2wKKyAqIEBobGRldjogSFcgZGV2aWNlCisgKiBAYmxvY2tfc2l6ZTogc2l6ZSBvZiBlYWNoIGJsb2NrLgorICogQFBvb2xfc2l6ZTogTnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgcG9vbAorICogQHBvb2xfbWF4OiBNYXhpbXVtIG51bWJlciBvZiBibG9ja3MgYWJvdmUgd2hpY2ggdG8gZnJlZSBhZGRpdGlvbmFsIGJsb2NrcworICogQHJlcV9vdXQ6IE51bWJlciBvZiBibG9jayByZXF1ZXN0cyB3aXRoIE9TIG91dCBzdGFuZGluZworICogQGZyZWVfYmxvY2tfbGlzdDogTGlzdCBvZiBmcmVlIGJsb2NrcworICoKKyAqIEJsb2NrIHBvb2wgY29udGFpbnMgdGhlIERNQSBibG9ja3MgcHJlYWxsb2NhdGVkLgorICoKKyAqLworc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgeworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwl1MzIJCQkJYmxvY2tfc2l6ZTsKKwl1MzIJCQkJcG9vbF9zaXplOworCXUzMgkJCQlwb29sX21heDsKKwl1MzIJCQkJcmVxX291dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlmcmVlX2Jsb2NrX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAkJZnJlZV9lbnRyeV9saXN0OworfTsKKworLyoKKyAqIGVudW0gZW51bSBfX3Z4Z2VfaHdfY2hhbm5lbF90eXBlIC0gRW51bWVyYXRlZCBjaGFubmVsIHR5cGVzLgorICogQFZYR0VfSFdfQ0hBTk5FTF9UWVBFX1VOS05PV046IFVua25vd24gY2hhbm5lbC4KKyAqIEBWWEdFX0hXX0NIQU5ORUxfVFlQRV9GSUZPOiBmaWZvLgorICogQFZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkc6IHJpbmcuCisgKiBAVlhHRV9IV19DSEFOTkVMX1RZUEVfTUFYOiBNYXhpbXVtIG51bWJlciBvZiBIVy1zdXBwb3J0ZWQKKyAqIChhbmQgcmVjb2duaXplZCkgY2hhbm5lbCB0eXBlcy4gQ3VycmVudGx5OiAyLgorICoKKyAqIEVudW1lcmF0ZWQgY2hhbm5lbCB0eXBlcy4gQ3VycmVudGx5IHRoZXJlIGFyZSBvbmx5IHR3byBsaW5rLWxheWVyCisgKiBjaGFubmVscyAtIFRpdGFuIGZpZm8gYW5kIFRpdGFuIHJpbmcuIEluIHRoZSBmdXR1cmUgdGhlIGxpc3Qgd2lsbCBncm93LgorICovCitlbnVtIF9fdnhnZV9od19jaGFubmVsX3R5cGUgeworCVZYR0VfSFdfQ0hBTk5FTF9UWVBFX1VOS05PV04JCQk9IDAsCisJVlhHRV9IV19DSEFOTkVMX1RZUEVfRklGTwkJCT0gMSwKKwlWWEdFX0hXX0NIQU5ORUxfVFlQRV9SSU5HCQkJPSAyLAorCVZYR0VfSFdfQ0hBTk5FTF9UWVBFX01BWAkJCT0gMworfTsKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbAorICogQGl0ZW06IExpc3QgaXRlbTsgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2Ygb3BlbiBjaGFubmVscy4KKyAqIEB0eXBlOiBDaGFubmVsIHR5cGUuIFNlZSBlbnVtIHZ4Z2VfaHdfY2hhbm5lbF90eXBle30uCisgKiBAZGV2aDogRGV2aWNlIGhhbmRsZS4gSFcgZGV2aWNlIG9iamVjdCB0aGF0IGNvbnRhaW5zIF90aGlzXyBjaGFubmVsLgorICogQHZwaDogVmlydHVhbCBwYXRoIGhhbmRsZS4gVmlydHVhbCBQYXRoIE9iamVjdCB0aGF0IGNvbnRhaW5zIF90aGlzXyBjaGFubmVsLgorICogQGxlbmd0aDogQ2hhbm5lbCBsZW5ndGguIEN1cnJlbnRseSBhbGxvY2F0ZWQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzLgorICogICAgICAgICAgVGhlIGNoYW5uZWwgbGVuZ3RoICJncm93cyIgd2hlbiBtb3JlIGRlc2NyaXB0b3JzIGdldCBhbGxvY2F0ZWQuCisgKiAgICAgICAgICBTZWUgX2h3X21lbXBvb2xfZ3Jvdy4KKyAqIEByZXNlcnZlX2FycjogUmVzZXJ2ZSBhcnJheS4gQ29udGFpbnMgZGVzY3JpcHRvcnMgdGhhdCBjYW4gYmUgcmVzZXJ2ZWQKKyAqICAgICAgICAgICAgICAgYnkgZHJpdmVyIGZvciB0aGUgc3Vic2VxdWVudCBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uLgorICogICAgICAgICAgICAgICBTZWUgdnhnZV9od19maWZvX3R4ZGxfcmVzZXJ2ZSgpLAorICogICAgICAgICAgICAgICB2eGdlX2h3X3JpbmdfcnhkX3Jlc2VydmUoKS4KKyAqIEByZXNlcnZlX3B0cjogQ3VycmVudCBwb2ludGVyIGluIHRoZSByZXNydmUgYXJyYXkKKyAqIEByZXNlcnZlX3RvcDogUmVzZXJ2ZSB0b3AgZ2l2ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGR0cnMgYXZhaWxhYmxlIGluCisgKiAgICAgICAgICByZXNlcnZlIGFycmF5LgorICogQHdvcmtfYXJyOiBXb3JrIGFycmF5LiBDb250YWlucyBkZXNjcmlwdG9ycyBwb3N0ZWQgdG8gdGhlIGNoYW5uZWwuCisgKiAgICAgICAgICAgIE5vdGUgdGhhdCBhdCBhbnkgcG9pbnQgaW4gdGltZSBAd29ya19hcnIgY29udGFpbnMgMyB0eXBlcyBvZgorICogICAgICAgICAgICBkZXNjcmlwdG9yczoKKyAqICAgICAgICAgICAgMSkgcG9zdGVkIGJ1dCBub3QgeWV0IGNvbnN1bWVkIGJ5IFRpdGFuIGRldmljZTsKKyAqICAgICAgICAgICAgMikgY29uc3VtZWQgYnV0IG5vdCB5ZXQgY29tcGxldGVkOworICogICAgICAgICAgICAzKSBjb21wbGV0ZWQgYnV0IG5vdCB5ZXQgZnJlZWQKKyAqICAgICAgICAgICAgKHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKCkgb3IgdnhnZV9od19yaW5nX3J4ZF9mcmVlKCkpCisgKiBAcG9zdF9pbmRleDogUG9zdCBpbmRleC4gQXQgYW55IHBvaW50IGluIHRpbWUgcG9pbnRzIG9uIHRoZQorICogICAgICAgICAgICAgIHBvc2l0aW9uIGluIHRoZSBjaGFubmVsLCB3aGljaCdsbCBjb250YWluIG5leHQgdG8tYmUtcG9zdGVkCisgKiAgICAgICAgICAgICAgZGVzY3JpcHRvci4KKyAqIEBjb21wbF9pbmRleDogQ29tcGxldGlvbiBpbmRleC4gQXQgYW55IHBvaW50IGluIHRpbWUgcG9pbnRzIG9uIHRoZQorICogICAgICAgICAgICAgICBwb3NpdGlvbiBpbiB0aGUgY2hhbm5lbCwgd2hpY2ggd2lsbCBjb250YWluIG5leHQKKyAqICAgICAgICAgICAgICAgdG8tYmUtY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKiBAZnJlZV9hcnI6IEZyZWUgYXJyYXkuIENvbnRhaW5zIGNvbXBsZXRlZCBkZXNjcmlwdG9ycyB0aGF0IHdlcmUgZnJlZWQKKyAqICAgICAgICAgICAgKGkuZS4sIGhhbmRlZCBvdmVyIGJhY2sgdG8gSFcpIGJ5IGRyaXZlci4KKyAqICAgICAgICAgICAgU2VlIHZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoKSwgdnhnZV9od19yaW5nX3J4ZF9mcmVlKCkuCisgKiBAZnJlZV9wdHI6IGN1cnJlbnQgcG9pbnRlciBpbiBmcmVlIGFycmF5CisgKiBAcGVyX2R0cl9zcGFjZTogUGVyLWRlc2NyaXB0b3Igc3BhY2UgKGluIGJ5dGVzKSB0aGF0IGNoYW5uZWwgdXNlciBjYW4gdXRpbGl6ZQorICogICAgICAgICAgICAgICAgIHRvIHN0b3JlIHBlci1vcGVyYXRpb24gY29udHJvbCBpbmZvcm1hdGlvbi4KKyAqIEBzdGF0czogUG9pbnRlciB0byBjb21tb24gc3RhdGlzdGljcworICogQHVzZXJkYXRhOiBQZXItY2hhbm5lbCBvcGFxdWUgKHZvaWQqKSB1c2VyLWRlZmluZWQgY29udGV4dCwgd2hpY2ggbWF5IGJlCisgKiAgICAgICAgICAgIGRyaXZlciBvYmplY3QsIFVMUCBjb25uZWN0aW9uLCBldGMuCisgKiAgICAgICAgICAgIE9uY2UgY2hhbm5lbCBpcyBvcGVuLCBAdXNlcmRhdGEgaXMgcGFzc2VkIGJhY2sgdG8gdXNlciB2aWEKKyAqICAgICAgICAgICAgdnhnZV9od19jaGFubmVsX2NhbGxiYWNrX2YuCisgKgorICogSFcgY2hhbm5lbCBvYmplY3QuCisgKgorICogU2VlIGFsc286IGVudW0gdnhnZV9od19jaGFubmVsX3R5cGV7fSwgZW51bSB2eGdlX2h3X2NoYW5uZWxfZmxhZworICovCitzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgeworCXN0cnVjdCBsaXN0X2hlYWQJCWl0ZW07CisJZW51bSBfX3Z4Z2VfaHdfY2hhbm5lbF90eXBlCXR5cGU7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgCSpkZXZoOworCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlIAkqdnBoOworCXUzMgkJCWxlbmd0aDsKKwl1MzIJCQl2cF9pZDsKKwl2b2lkCQkqKnJlc2VydmVfYXJyOworCXUzMgkJCXJlc2VydmVfcHRyOworCXUzMgkJCXJlc2VydmVfdG9wOworCXZvaWQJCSoqd29ya19hcnI7CisJdTMyCQkJcG9zdF9pbmRleCBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJdTMyCQkJY29tcGxfaW5kZXggX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXZvaWQJCSoqZnJlZV9hcnI7CisJdTMyCQkJZnJlZV9wdHI7CisJdm9pZAkJKipvcmlnX2FycjsKKwl1MzIJCQlwZXJfZHRyX3NwYWNlOworCXZvaWQJCSp1c2VyZGF0YTsKKwlzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnCV9faW9tZW0gKmNvbW1vbl9yZWc7CisJdTMyCQkJZmlyc3RfdnBfaWQ7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm8gKnN0YXRzOworCit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggLSBWaXJ0dWFsIFBhdGgKKyAqCisgKiBAdnBfaWQ6IFZpcnR1YWwgcGF0aCBpZAorICogQHZwX29wZW46IFRoaXMgZmxhZyBzcGVjaWZpZXMgaWYgdnhnZV9od192cF9vcGVuIGlzIGNhbGxlZCBmcm9tIExMIERyaXZlcgorICogQGhsZGV2OiBIYWwgZGV2aWNlCisgKiBAdnBfY29uZmlnOiBWaXJ0dWFsIFBhdGggQ29uZmlnCisgKiBAdnBfcmVnOiBWUEFUSCBSZWdpc3RlciBtYXAgYWRkcmVzcyBpbiBCQVIwCisgKiBAdnBtZ210X3JlZzogVlBBVEhfTUdNVCByZWdpc3RlciBtYXAgYWRkcmVzcworICogQG1heF9tdHU6IE1heCBtdHUgdGhhdCBjYW4gYmUgc3VwcG9ydGVkCisgKiBAdnNwb3J0X251bWJlcjogdnNwb3J0IGF0dGFjaGVkIHRvIHRoaXMgdnBhdGgKKyAqIEBtYXhfa2RmY19kYjogTWF4aW11bSBrZXJuZWwgbW9kZSBkb29yYmVsbHMKKyAqIEBtYXhfbm9mbF9kYjogTWF4aW11bSBub24gb2ZmbG9hZCBkb29yYmVsbHMKKyAqIEB0eF9pbnRyX251bTogSW50ZXJydXB0IE51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIFRYCisKKyAqIEByaW5naDogUmluZyBRdWV1ZQorICogQGZpZm9oOiBGSUZPIFF1ZXVlCisgKiBAdnBhdGhfaGFuZGxlczogVmlydHVhbCBQYXRoIGhhbmRsZXMgbGlzdAorICogQHN0YXRzX2Jsb2NrOiBNZW1vcnkgZm9yIERNQWluZyBzdGF0cworICogQHN0YXRzOiBWcGF0aCBzdGF0aXN0aWNzCisgKgorICogVmlydHVhbCBwYXRoIHN0cnVjdHVyZSB0byBlbmNhcHN1bGF0ZSB0aGUgZGF0YSByZWxhdGVkIHRvIGEgdmlydHVhbCBwYXRoLgorICogVmlydHVhbCBwYXRocyBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBIVyB1cG9uIGdldHRpbmcgY29uZmlndXJhdGlvbiBmcm9tIHRoZQorICogZHJpdmVyIGFuZCBpbnNlcnRlZCBpbnRvIHRoZSBsaXN0IG9mIHZpcnR1YWwgcGF0aHMuCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggeworCXUzMgkJCQl2cF9pZDsKKworCXUzMgkJCQl2cF9vcGVuOworI2RlZmluZSBWWEdFX0hXX1ZQX05PVF9PUEVOCTAKKyNkZWZpbmUJVlhHRV9IV19WUF9PUEVOCQkxCisKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZQkJKmhsZGV2OworCXN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZwkqdnBfY29uZmlnOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZwlfX2lvbWVtICp2cF9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZwlfX2lvbWVtICp2cG1nbXRfcmVnOworCXN0cnVjdCBfX3Z4Z2VfaHdfbm9uX29mZmxvYWRfZGJfd3JhcHBlcglfX2lvbWVtICpub2ZsX2RiOworCisJdTMyCQkJCW1heF9tdHU7CisJdTMyCQkJCXZzcG9ydF9udW1iZXI7CisJdTMyCQkJCW1heF9rZGZjX2RiOworCXUzMgkJCQltYXhfbm9mbF9kYjsKKworCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqX19fX2NhY2hlbGluZV9hbGlnbmVkIHJpbmdoOworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqX19fX2NhY2hlbGluZV9hbGlnbmVkIGZpZm9oOworCXN0cnVjdCBsaXN0X2hlYWQJCXZwYXRoX2hhbmRsZXM7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkJCSpzdGF0c19ibG9jazsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvCSpod19zdGF0czsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvCSpod19zdGF0c19zYXY7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbwkqc3dfc3RhdHM7Cit9OworCisvKgorICogc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgLSBMaXN0IGl0ZW0gdG8gc3RvcmUgY2FsbGJhY2sgaW5mb3JtYXRpb24KKyAqIEBpdGVtOiBMaXN0IGhlYWQgdG8ga2VlcCB0aGUgaXRlbSBpbiBsaW5rZWQgbGlzdAorICogQHZwYXRoOiBWaXJ0dWFsIHBhdGggdG8gd2hpY2ggdGhpcyBpdGVtIGJlbG9uZ3MKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBjYWxsYmFjayBpbmZvcm1hdGlvbi4KKyAqLworc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGV7CisJc3RydWN0IGxpc3RfaGVhZAlpdGVtOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJKnZwYXRoOworfTsKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlCisgKgorICogSFcgZGV2aWNlIG9iamVjdC4KKyAqLworLyoqCisgKiBzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgLSBIYWwgZGV2aWNlIG9iamVjdAorICogQG1hZ2ljOiBNYWdpYyBOdW1iZXIKKyAqIEBkZXZpY2VfaWQ6IFBDSSBEZXZpY2UgSWQgb2YgdGhlIGFkYXB0ZXIKKyAqIEBtYWpvcl9yZXZpc2lvbjogUENJIERldmljZSBtYWpvciByZXZpc2lvbgorICogQG1pbm9yX3JldmlzaW9uOiBQQ0kgRGV2aWNlIG1pbm9yIHJldmlzaW9uCisgKiBAYmFyMDogQkFSMCB2aXJ0dWFsIGFkZHJlc3MuCisgKiBAYmFyMTogQkFSMSB2aXJ0dWFsIGFkZHJlc3MuCisgKiBAYmFyMjogQkFSMiB2aXJ0dWFsIGFkZHJlc3MuCisgKiBAcGRldjogUGh5c2ljYWwgZGV2aWNlIGhhbmRsZQorICogQGNvbmZpZzogQ29uZmd1cmF0aW9uIHBhc3NlZCBieSB0aGUgTEwgZHJpdmVyIGF0IGluaXRpYWxpemF0aW9uCisgKiBAbGlua19zdGF0ZTogTGluayBzdGF0ZQorICoKKyAqIEhXIGRldmljZSBvYmplY3QuIFJlcHJlc2VudHMgVGl0YW4gYWRhcHRlcgorICovCitzdHJ1Y3QgX192eGdlX2h3X2RldmljZSB7CisJdTMyCQkJCW1hZ2ljOworI2RlZmluZSBWWEdFX0hXX0RFVklDRV9NQUdJQwkJMHgxMjM0NTY3OAorI2RlZmluZSBWWEdFX0hXX0RFVklDRV9ERUFECQkweERFQURERUFECisJdTE2CQkJCWRldmljZV9pZDsKKwl1OAkJCQltYWpvcl9yZXZpc2lvbjsKKwl1OAkJCQltaW5vcl9yZXZpc2lvbjsKKwl2b2lkIF9faW9tZW0JCQkqYmFyMDsKKwl2b2lkIF9faW9tZW0JCQkqYmFyMTsKKwl2b2lkIF9faW9tZW0JCQkqYmFyMjsKKwlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlCQkqbmRldjsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnCWNvbmZpZzsKKwllbnVtIHZ4Z2VfaHdfZGV2aWNlX2xpbmtfc3RhdGUJbGlua19zdGF0ZTsKKworCXN0cnVjdCB2eGdlX2h3X3VsZF9jYnMJCXVsZF9jYWxsYmFja3M7CisKKwl1MzIJCQkJaG9zdF90eXBlOworCXUzMgkJCQlmdW5jX2lkOworCXUzMgkJCQlhY2Nlc3NfcmlnaHRzOworI2RlZmluZSBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfVlBBVEggICAgICAweDEKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1NSUENJTSAgICAgMHgyCisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9NUlBDSU0gICAgIDB4NAorCXN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcJX19pb21lbSAqbGVnYWN5X3JlZzsKKwlzdHJ1Y3QgdnhnZV9od190b2NfcmVnCQlfX2lvbWVtICp0b2NfcmVnOworCXN0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcJX19pb21lbSAqY29tbW9uX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnCV9faW9tZW0gKm1ycGNpbV9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfc3JwY2ltX3JlZwlfX2lvbWVtICpzcnBjaW1fcmVnIFwKKwkJCQkJW1ZYR0VfSFdfVElUQU5fU1JQQ0lNX1JFR19TUEFDRVNdOworCXN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcJX19pb21lbSAqdnBtZ210X3JlZyBcCisJCQkJCVtWWEdFX0hXX1RJVEFOX1ZQTUdNVF9SRUdfU1BBQ0VTXTsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcJX19pb21lbSAqdnBhdGhfcmVnIFwKKwkJCQkJW1ZYR0VfSFdfVElUQU5fVlBBVEhfUkVHX1NQQUNFU107CisJdTgJCQkJX19pb21lbSAqa2RmYzsKKwl1OAkJCQlfX2lvbWVtICp1c2RjOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJdmlydHVhbF9wYXRocyBcCisJCQkJCVtWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXTsKKwl1NjQJCQkJdnBhdGhfYXNzaWdubWVudHM7CisJdTY0CQkJCXZwYXRoc19kZXBsb3llZDsKKwl1MzIJCQkJZmlyc3RfdnBfaWQ7CisJdTY0CQkJCXRpbV9pbnRfbWFzazBbNF07CisJdTMyCQkJCXRpbV9pbnRfbWFzazFbNF07CisKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbAlibG9ja19wb29sOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0cwlzdGF0czsKKwl1MzIJCQkJZGVidWdfbW9kdWxlX21hc2s7CisJdTMyCQkJCWRlYnVnX2xldmVsOworCXUzMgkJCQlsZXZlbF9lcnI7CisJdTMyCQkJCWxldmVsX3RyYWNlOworfTsKKworI2RlZmluZSBWWEdFX0hXX0lORk9fTEVOCTY0CisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvIC0gRGV2aWNlIGluZm9ybWF0aW9uCisgKiBAaG9zdF90eXBlOiBIb3N0IFR5cGUKKyAqIEBmdW5jX2lkOiBGdW5jdGlvbiBJZAorICogQHZwYXRoX21hc2s6IHZwYXRoIGJpdCBtYXNrCisgKiBAZndfdmVyc2lvbjogRmlybXdhcmUgdmVyc2lvbgorICogQGZ3X2RhdGU6IEZpcm13YXJlIERhdGUKKyAqIEBmbGFzaF92ZXJzaW9uOiBGaXJtd2FyZSB2ZXJzaW9uCisgKiBAZmxhc2hfZGF0ZTogRmlybXdhcmUgRGF0ZQorICogQG1hY19hZGRyczogTWFjIGFkZHJlc3NlcyBmb3IgZWFjaCB2cGF0aAorICogQG1hY19hZGRyX21hc2tzOiBNYWMgYWRkcmVzcyBtYXNrcyBmb3IgZWFjaCB2cGF0aAorICoKKyAqIFJldHVybnMgdGhlIHZwYXRoIG1hc2sgdGhhdCBoYXMgdGhlIGJpdHMgc2V0IGZvciBlYWNoIHZwYXRoIGFsbG9jYXRlZAorICogZm9yIHRoZSBkcml2ZXIgYW5kIHRoZSBmaXJzdCBtYWMgYWRkcmVzcyBmb3IgZWFjaCB2cGF0aAorICovCitzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyB7CisJdTMyCQlob3N0X3R5cGU7CisjZGVmaW5lIFZYR0VfSFdfTk9fTVJfTk9fU1JfTk9STUFMX0ZVTkNUSU9OCQkJMAorI2RlZmluZSBWWEdFX0hXX01SX05PX1NSX1ZIMF9CQVNFX0ZVTkNUSU9OCQkJMQorI2RlZmluZSBWWEdFX0hXX05PX01SX1NSX1ZIMF9GVU5DVElPTjAJCQkJMgorI2RlZmluZSBWWEdFX0hXX05PX01SX1NSX1ZIMF9WSVJUVUFMX0ZVTkNUSU9OCQkJMworI2RlZmluZSBWWEdFX0hXX01SX1NSX1ZIMF9JTlZBTElEX0NPTkZJRwkJCTQKKyNkZWZpbmUgVlhHRV9IV19TUl9WSF9GVU5DVElPTjAJCQkJCTUKKyNkZWZpbmUgVlhHRV9IV19TUl9WSF9WSVJUVUFMX0ZVTkNUSU9OCQkJCTYKKyNkZWZpbmUgVlhHRV9IV19WSF9OT1JNQUxfRlVOQ1RJT04JCQkJNworCXU2NAkJZnVuY3Rpb25fbW9kZTsKKyNkZWZpbmUgVlhHRV9IV19GVU5DVElPTl9NT0RFX01VTFRJX0ZVTkNUSU9OCQkJMAorI2RlZmluZSBWWEdFX0hXX0ZVTkNUSU9OX01PREVfU0lOR0xFX0ZVTkNUSU9OCQkJMQorI2RlZmluZSBWWEdFX0hXX0ZVTkNUSU9OX01PREVfU1JJT1YJCQkJMgorI2RlZmluZSBWWEdFX0hXX0ZVTkNUSU9OX01PREVfTVJJT1YJCQkJMworCXUzMgkJZnVuY19pZDsKKwl1NjQJCXZwYXRoX21hc2s7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3ZlcnNpb24gZndfdmVyc2lvbjsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfZGF0ZSAgICBmd19kYXRlOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV92ZXJzaW9uIGZsYXNoX3ZlcnNpb247CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2RhdGUgICAgZmxhc2hfZGF0ZTsKKwl1OAkJc2VyaWFsX251bWJlcltWWEdFX0hXX0lORk9fTEVOXTsKKwl1OAkJcGFydF9udW1iZXJbVlhHRV9IV19JTkZPX0xFTl07CisJdTgJCXByb2R1Y3RfZGVzY1tWWEdFX0hXX0lORk9fTEVOXTsKKwl1OCAobWFjX2FkZHJzKVtWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXVtFVEhfQUxFTl07CisJdTggKG1hY19hZGRyX21hc2tzKVtWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXVtFVEhfQUxFTl07Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2RldmljZV9hdHRyIC0gRGV2aWNlIG1lbW9yeSBzcGFjZXMuCisgKiBAYmFyMDogQkFSMCB2aXJ0dWFsIGFkZHJlc3MuCisgKiBAYmFyMTogQkFSMSB2aXJ0dWFsIGFkZHJlc3MuCisgKiBAYmFyMjogQkFSMiB2aXJ0dWFsIGFkZHJlc3MuCisgKiBAcGRldjogUENJIGRldmljZSBvYmplY3QuCisgKgorICogRGV2aWNlIG1lbW9yeSBzcGFjZXMuIEluY2x1ZGVzIGNvbmZpZ3VyYXRpb24sIEJBUjAsIEJBUjEsIGV0Yy4gcGVyIGRldmljZQorICogbWFwcGVkIG1lbW9yaWVzLiBBbHNvLCBpbmNsdWRlcyBhIHBvaW50ZXIgdG8gT1Mtc3BlY2lmaWMgUENJIGRldmljZSBvYmplY3QuCisgKi8KK3N0cnVjdCB2eGdlX2h3X2RldmljZV9hdHRyIHsKKwl2b2lkIF9faW9tZW0JCSpiYXIwOworCXZvaWQgX19pb21lbQkJKmJhcjE7CisJdm9pZCBfX2lvbWVtCQkqYmFyMjsKKwlzdHJ1Y3QgcGNpX2RldiAJCSpwZGV2OworCXN0cnVjdCB2eGdlX2h3X3VsZF9jYnMJdWxkX2NhbGxiYWNrczsKK307CisKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfTElOS19TVEFURV9TRVQoaGxkZXYsIGxzKQkoaGxkZXYtPmxpbmtfc3RhdGUgPSBscykKKworI2RlZmluZSBWWEdFX0hXX0RFVklDRV9USU1fSU5UX01BU0tfU0VUKG0wLCBtMSwgaSkgewlcCisJaWYgKGkgPCAxNikgewkJCQlcCisJCW0wWzBdIHw9IHZ4Z2VfdkJJVCgweDgsIChpKjQpLCA0KTsJXAorCQltMFsxXSB8PSB2eGdlX3ZCSVQoMHg0LCAoaSo0KSwgNCk7CVwKKwl9CQkJICAgICAgIAkJXAorCWVsc2UgewkJCQkJXAorCQltMVswXSA9IDB4ODAwMDAwMDA7CQlcCisJCW0xWzFdID0gMHg0MDAwMDAwMDsJCVwKKwl9CQkJCQlcCit9CisKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1JFU0VUKG0wLCBtMSwgaSkgewlcCisJaWYgKGkgPCAxNikgewkJCQkJXAorCQltMFswXSAmPSB+dnhnZV92QklUKDB4OCwgKGkqNCksIDQpOwkJXAorCQltMFsxXSAmPSB+dnhnZV92QklUKDB4NCwgKGkqNCksIDQpOwkJXAorCX0JCQkJCQlcCisJZWxzZSB7CQkJCQkJXAorCQltMVswXSA9IDA7CQkJCVwKKwkJbTFbMV0gPSAwOwkJCQlcCisJfQkJCQkJCVwKK30KKworI2RlZmluZSBWWEdFX0hXX0RFVklDRV9TVEFUU19QSU9fUkVBRChsb2MsIG9mZnNldCkgewkJXAorCXN0YXR1cyA9IHZ4Z2VfaHdfbXJwY2ltX3N0YXRzX2FjY2VzcyhobGRldiwgXAorCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwgXAorCQkJCWxvYywgXAorCQkJCW9mZnNldCwgXAorCQkJCSZ2YWw2NCk7CQkJXAorCQkJCQkJCQlcCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQkJCQlcCisJCXJldHVybiBzdGF0dXM7CQkJCQkJXAorfQorCisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfU1RBVFNfUElPX1JFQUQob2Zmc2V0KSB7CQkJCVwKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfYWNjZXNzKHZwYXRoLCBcCisJCQlWWEdFX0hXX1NUQVRTX09QX1JFQUQsIFwKKwkJCW9mZnNldCwgXAorCQkJJnZhbDY0KTsJCQkJCVwKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCQkJCQlcCisJCXJldHVybiBzdGF0dXM7CQkJCQkJXAorfQorCisvKgorICogc3RydWN0IF9fdnhnZV9od19yaW5nIC0gUmluZyBjaGFubmVsLgorICogQGNoYW5uZWw6IENoYW5uZWwgImJhc2UiIG9mIHRoaXMgcmluZywgdGhlIGNvbW1vbiBwYXJ0IG9mIGFsbCBIVworICogICAgICAgICAgIGNoYW5uZWxzLgorICogQG1lbXBvb2w6IE1lbW9yeSBwb29sLCB0aGUgcG9vbCBmcm9tIHdoaWNoIGRlc2NyaXB0b3JzIGdldCBhbGxvY2F0ZWQuCisgKiAgICAgICAgICAgKFNlZSB2eGdlX2h3X21tLmgpLgorICogQGNvbmZpZzogUmluZyBjb25maWd1cmF0aW9uLCBwYXJ0IG9mIGRldmljZSBjb25maWd1cmF0aW9uCisgKiAgICAgICAgICAoc2VlIHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWd7fSkuCisgKiBAcmluZ19sZW5ndGg6IExlbmd0aCBvZiB0aGUgcmluZworICogQGJ1ZmZlcl9tb2RlOiAxLCAzLCBvciA1LiBUaGUgdmFsdWUgc3BlY2lmaWVzIGEgcmVjZWl2ZSBidWZmZXIgbW9kZSwKKyAqICAgICAgICAgIGFzIHBlciBUaXRhbiBVc2VyIEd1aWRlLgorICogQHJ4ZF9zaXplOiBSeEQgc2l6ZXMgZm9yIDEtLCAzLSBvciA1LSBidWZmZXIgbW9kZXMuIEFzIHBlciBUaXRhbiBzcGVjLAorICogICAgICAgICAgICAxLWJ1ZmZlciBtb2RlIGRlc2NyaXB0b3IgaXMgMzIgYnl0ZSBsb25nLCBldGMuCisgKiBAcnhkX3ByaXZfc2l6ZTogUGVyIFJ4RCBzaXplIHJlc2VydmVkIChieSBIVykgZm9yIGRyaXZlciB0byBrZWVwCisgKiAgICAgICAgICAgICAgICAgcGVyLWRlc2NyaXB0b3IgZGF0YSAoZS5nLiwgRE1BIGhhbmRsZSBmb3IgU29sYXJpcykKKyAqIEBwZXJfcnhkX3NwYWNlOiBQZXIgcnhkIHNwYWNlIHJlcXVlc3RlZCBieSBkcml2ZXIKKyAqIEByeGRzX3Blcl9ibG9jazogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHBlciBoYXJkd2FyZS1kZWZpbmVkIFJ4RAorICogICAgICAgICAgICAgICAgICBibG9jay4gRGVwZW5kcyBvbiB0aGUgKDEtLCAzLSwgNS0pIGJ1ZmZlciBtb2RlLgorICogQHJ4ZGJsb2NrX3ByaXZfc2l6ZTogUmVzZXJ2ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIFJ4RCBibG9jay4gSFcgaW50ZXJuYWwKKyAqICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLiBOb3QgdG8gY29uZnVzZSB3aXRoIEByeGRfcHJpdl9zaXplLgorICogQGNtcGxfY250OiBDb21wbGV0aW9uIGNvdW50ZXIuIElzIHJlc2V0IHRvIHplcm8gdXBvbiBlbnRlcmluZyB0aGUgSVNSLgorICogQGNhbGxiYWNrOiBDaGFubmVsIGNvbXBsZXRpb24gY2FsbGJhY2suIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlcmUKKyAqICAgICAgICAgICAgYXJlIG5ldyBjb21wbGV0aW9ucyBvbiB0aGF0IGNoYW5uZWwuIEluIG1hbnkgaW1wbGVtZW50YXRpb25zCisgKiAgICAgICAgICAgIHRoZSBAY2FsbGJhY2sgZXhlY3V0ZXMgaW4gdGhlIGh3IGludGVycnVwdCBjb250ZXh0LgorICogQHJ4ZF9pbml0OiBDaGFubmVsJ3MgZGVzY3JpcHRvci1pbml0aWFsaXplIGNhbGxiYWNrLgorICogICAgICAgICAgICBTZWUgdnhnZV9od19yaW5nX3J4ZF9pbml0X2Z7fS4KKyAqICAgICAgICAgICAgSWYgbm90IE5VTEwsIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gb3BlbmluZworICogICAgICAgICAgICB0aGUgcmluZy4KKyAqIEByeGRfdGVybTogQ2hhbm5lbCdzIGRlc2NyaXB0b3ItdGVybWluYXRlIGNhbGxiYWNrLiBJZiBub3QgTlVMTCwKKyAqICAgICAgICAgIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gY2xvc2luZyB0aGUgY29ycmVzcG9uZGluZyBjaGFubmVsLgorICogICAgICAgICAgU2VlIGFsc28gdnhnZV9od19jaGFubmVsX3J4ZF90ZXJtX2Z7fS4KKyAqIEBzdGF0czogU3RhdGlzdGljcyBmb3IgcmluZworICogUmluZyBjaGFubmVsLgorICoKKyAqIE5vdGU6IFRoZSBzdHJ1Y3R1cmUgaXMgY2FjaGUgbGluZSBhbGlnbmVkIHRvIGJldHRlciB1dGlsaXplCisgKiAgICAgICBDUFUgY2FjaGUgcGVyZm9ybWFuY2UuCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfcmluZyB7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsCQljaGFubmVsOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2wJCQkqbWVtcG9vbDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcJCV9faW9tZW0JKnZwX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnCQlfX2lvbWVtCSpjb21tb25fcmVnOworCXUzMgkJCQkJcmluZ19sZW5ndGg7CisJdTMyCQkJCQlidWZmZXJfbW9kZTsKKwl1MzIJCQkJCXJ4ZF9zaXplOworCXUzMgkJCQkJcnhkX3ByaXZfc2l6ZTsKKwl1MzIJCQkJCXBlcl9yeGRfc3BhY2U7CisJdTMyCQkJCQlyeGRzX3Blcl9ibG9jazsKKwl1MzIJCQkJCXJ4ZGJsb2NrX3ByaXZfc2l6ZTsKKwl1MzIJCQkJCWNtcGxfY250OworCXUzMgkJCQkJdnBfaWQ7CisJdTMyCQkJCQlkb29yYmVsbF9jbnQ7CisJdTMyCQkJCQl0b3RhbF9kYl9jbnQ7CisJdTY0CQkJCQlyeGRzX2xpbWl0OworCisJZW51bSB2eGdlX2h3X3N0YXR1cyAoKmNhbGxiYWNrKSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gsCisJCQl2b2lkICpyeGRoLAorCQkJdTggdF9jb2RlLAorCQkJdm9pZCAqdXNlcmRhdGEpOworCisJZW51bSB2eGdlX2h3X3N0YXR1cyAoKnJ4ZF9pbml0KSgKKwkJCXZvaWQgKnJ4ZGgsCisJCQl2b2lkICp1c2VyZGF0YSk7CisKKwl2b2lkICgqcnhkX3Rlcm0pKAorCQkJdm9pZCAqcnhkaCwKKwkJCWVudW0gdnhnZV9od19yeGRfc3RhdGUgc3RhdGUsCisJCQl2b2lkICp1c2VyZGF0YSk7CisKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19yaW5nX2luZm8gKnN0YXRzCV9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX2NvbmZpZwkJKmNvbmZpZzsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X3R4ZGxfc3RhdGUgLSBEZXNjcmlwdG9yIChUWERMKSBzdGF0ZS4KKyAqIEBWWEdFX0hXX1RYRExfU1RBVEVfTk9ORTogSW52YWxpZCBzdGF0ZS4KKyAqIEBWWEdFX0hXX1RYRExfU1RBVEVfQVZBSUw6IERlc2NyaXB0b3IgaXMgYXZhaWxhYmxlIGZvciByZXNlcnZhdGlvbi4KKyAqIEBWWEdFX0hXX1RYRExfU1RBVEVfUE9TVEVEOiBEZXNjcmlwdG9yIGlzIHBvc3RlZCBmb3IgcHJvY2Vzc2luZyBieSB0aGUKKyAqIGRldmljZS4KKyAqIEBWWEdFX0hXX1RYRExfU1RBVEVfRlJFRUQ6IERlc2NyaXB0b3IgaXMgZnJlZSBhbmQgY2FuIGJlIHJldXNlZCBmb3IKKyAqIGZpbGxpbmctaW4gYW5kIHBvc3RpbmcgbGF0ZXIuCisgKgorICogVGl0YW4vSFcgZGVzY3JpcHRvciBzdGF0ZXMuCisgKgorICovCitlbnVtIHZ4Z2VfaHdfdHhkbF9zdGF0ZSB7CisJVlhHRV9IV19UWERMX1NUQVRFX05PTkUJPSAwLAorCVZYR0VfSFdfVFhETF9TVEFURV9BVkFJTAk9IDEsCisJVlhHRV9IV19UWERMX1NUQVRFX1BPU1RFRAk9IDIsCisJVlhHRV9IV19UWERMX1NUQVRFX0ZSRUVECT0gMworfTsKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gLSBGaWZvLgorICogQGNoYW5uZWw6IENoYW5uZWwgImJhc2UiIG9mIHRoaXMgZmlmbywgdGhlIGNvbW1vbiBwYXJ0IG9mIGFsbCBIVworICogICAgICAgICAgICAgY2hhbm5lbHMuCisgKiBAbWVtcG9vbDogTWVtb3J5IHBvb2wsIGZyb20gd2hpY2ggZGVzY3JpcHRvcnMgZ2V0IGFsbG9jYXRlZC4KKyAqIEBjb25maWc6IEZpZm8gY29uZmlndXJhdGlvbiwgcGFydCBvZiBkZXZpY2UgY29uZmlndXJhdGlvbgorICogICAgICAgICAgICAgKHNlZSBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlne30pLgorICogQGludGVycnVwdF90eXBlOiBJbnRlcnJ1cHQgdHlwZSB0byBiZSB1c2VkCisgKiBAbm9fc25vb3BfYml0czogU2VlIHN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlne30uCisgKiBAdHhkbF9wZXJfbWVtYmxvY2s6IE51bWJlciBvZiBUeERMcyAoVHhEIGxpc3RzKSBwZXIgbWVtYmxvY2suCisgKiAgICAgICAgICAgICBvbiBUeERMIHBsZWFzZSByZWZlciB0byBUaXRhbiBVRy4KKyAqIEB0eGRsX3NpemU6IENvbmZpZ3VyZWQgVHhETCBzaXplIChpLmUuLCBudW1iZXIgb2YgVHhEcyBpbiBhIGxpc3QpLCBwbHVzCisgKiAgICAgICAgICAgICBwZXItVHhETCBIVyBwcml2YXRlIHNwYWNlIChzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KS4KKyAqIEBwcml2X3NpemU6IFBlci1UeCBkZXNjcmlwdG9yIHNwYWNlIHJlc2VydmVkIGZvciBkcml2ZXIKKyAqICAgICAgICAgICAgIHVzYWdlLgorICogQHBlcl90eGRsX3NwYWNlOiBQZXIgdHhkbCBwcml2YXRlIHNwYWNlIGZvciB0aGUgZHJpdmVyCisgKiBAY2FsbGJhY2s6IEZpZm8gY29tcGxldGlvbiBjYWxsYmFjay4gSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiB0aGVyZQorICogICAgICAgICAgICAgYXJlIG5ldyBjb21wbGV0aW9ucyBvbiB0aGF0IGZpZm8uIEluIG1hbnkgaW1wbGVtZW50YXRpb25zCisgKiAgICAgICAgICAgICB0aGUgQGNhbGxiYWNrIGV4ZWN1dGVzIGluIHRoZSBodyBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIEB0eGRsX3Rlcm06IEZpZm8ncyBkZXNjcmlwdG9yLXRlcm1pbmF0ZSBjYWxsYmFjay4gSWYgbm90IE5VTEwsCisgKiAgICAgICAgICAgICBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIGNsb3NpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZmlmby4KKyAqICAgICAgICAgICAgIFNlZSBhbHNvIHZ4Z2VfaHdfZmlmb190eGRsX3Rlcm1fZnt9LgorICogQHN0YXRzOiBTdGF0aXN0aWNzIG9mIHRoaXMgZmlmbworICoKKyAqIEZpZm8gY2hhbm5lbC4KKyAqIE5vdGU6IFRoZSBzdHJ1Y3R1cmUgaXMgY2FjaGUgbGluZSBhbGlnbmVkLgorICovCitzdHJ1Y3QgX192eGdlX2h3X2ZpZm8geworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbAkJY2hhbm5lbDsKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sCQkJKm1lbXBvb2w7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcJCSpjb25maWc7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnCQlfX2lvbWVtICp2cF9yZWc7CisJc3RydWN0IF9fdnhnZV9od19ub25fb2ZmbG9hZF9kYl93cmFwcGVyCV9faW9tZW0gKm5vZmxfZGI7CisJdTY0CQkJCQlpbnRlcnJ1cHRfdHlwZTsKKwl1MzIJCQkJCW5vX3Nub29wX2JpdHM7CisJdTMyCQkJCQl0eGRsX3Blcl9tZW1ibG9jazsKKwl1MzIJCQkJCXR4ZGxfc2l6ZTsKKwl1MzIJCQkJCXByaXZfc2l6ZTsKKwl1MzIJCQkJCXBlcl90eGRsX3NwYWNlOworCXUzMgkJCQkJdnBfaWQ7CisJdTMyCQkJCQl0eF9pbnRyX251bTsKKworCWVudW0gdnhnZV9od19zdGF0dXMgKCpjYWxsYmFjaykoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faGFuZGxlLAorCQkJdm9pZCAqdHhkbGgsCisJCQllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsCisJCQl2b2lkICp1c2VyZGF0YSwKKwkJCXZvaWQgKipza2JfcHRyKTsKKworCXZvaWQgKCp0eGRsX3Rlcm0pKAorCQkJdm9pZCAqdHhkbGgsCisJCQllbnVtIHZ4Z2VfaHdfdHhkbF9zdGF0ZSBzdGF0ZSwKKwkJCXZvaWQgKnVzZXJkYXRhKTsKKworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2ZpZm9faW5mbyAqc3RhdHMgX19fX2NhY2hlbGluZV9hbGlnbmVkOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2IC0gVHJhbnNtaXQgZGVzY3JpcHRvciBIVy1wcml2YXRlIGRhdGEuCisgKiBAZG1hX2FkZHI6IERNQSAobWFwcGVkKSBhZGRyZXNzIG9mIF90aGlzXyBkZXNjcmlwdG9yLgorICogQGRtYV9oYW5kbGU6IERNQSBoYW5kbGUgdXNlZCB0byBtYXAgdGhlIGRlc2NyaXB0b3Igb250byBkZXZpY2UuCisgKiBAZG1hX29mZnNldDogRGVzY3JpcHRvcidzIG9mZnNldCBpbiB0aGUgbWVtb3J5IGJsb2NrLiBIVyBhbGxvY2F0ZXMKKyAqCSBkZXNjcmlwdG9ycyBpbiBtZW1vcnkgYmxvY2tzIChzZWUgc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWd7fSkKKyAqICAgICAgICAgICAgIEVhY2ggbWVtYmxvY2sgaXMgYSBjb250aWd1b3VzIGJsb2NrIG9mIERNQS1hYmxlIG1lbW9yeS4KKyAqIEBmcmFnczogVG90YWwgbnVtYmVyIG9mIGZyYWdtZW50cyAodGhhdCBpcywgY29udGlndW91cyBkYXRhIGJ1ZmZlcnMpCisgKiBjYXJyaWVkIGJ5IHRoaXMgVHhETC4KKyAqIEBhbGlnbl92YWRkcl9zdGFydDogQWxpZ25lZCB2aXJ0dWFsIGFkZHJlc3Mgc3RhcnQKKyAqIEBhbGlnbl92YWRkcjogVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwZXItVHhETCBhcmVhIGluIG1lbW9yeSB1c2VkIGZvcgorICogICAgICAgICAgICAgYWxpZ25lbWVudC4gVXNlZCB0byBwbGFjZSBvbmUgb3IgbW9yZSBtaXMtYWxpZ25lZCBmcmFnbWVudHMKKyAqIEBhbGlnbl9kbWFfYWRkcjogRE1BIGFkZHJlc3MgdHJhbnNsYXRlZCBmcm9tIHRoZSBAYWxpZ25fdmFkZHIuCisgKiBAYWxpZ25fZG1hX2hhbmRsZTogRE1BIGhhbmRsZSB0aGF0IGNvcnJlc3BvbmRzIHRvIEBhbGlnbl9kbWFfYWRkci4KKyAqIEBhbGlnbl9kbWFfYWNjaDogRE1BIGFjY2VzcyBoYW5kbGUgY29ycmVzcG9uZHMgdG8gQGFsaWduX2RtYV9hZGRyLgorICogQGFsaWduX2RtYV9vZmZzZXQ6IFRoZSBjdXJyZW50IG9mZnNldCBpbnRvIHRoZSBAYWxpZ25fdmFkZHIgYXJlYS4KKyAqIEdyb3dzIHdoaWxlIGZpbGxpbmcgdGhlIGRlc2NyaXB0b3IsIGdldHMgcmVzZXQuCisgKiBAYWxpZ25fdXNlZF9mcmFnczogTnVtYmVyIG9mIGZyYWdtZW50cyB1c2VkLgorICogQGFsbG9jX2ZyYWdzOiBUb3RhbCBudW1iZXIgb2YgZnJhZ21lbnRzIGFsbG9jYXRlZC4KKyAqIEB1bnVzZWQ6IFRPRE8KKyAqIEBuZXh0X3R4ZGxfcHJpdjogKFRPRE8pLgorICogQGZpcnN0X3R4ZHA6IChUT0RPKS4KKyAqIEBsaW5rZWRfdHhkbF9wcml2OiBQb2ludGVyIHRvIGFueSBsaW5rZWQgVHhETCBmb3IgY3JlYXRpbmcgY29udGlndW91cworICogICAgICAgICAgICAgVHhETCBsaXN0LgorICogQHR4ZGxoOiBDb3JyZXNwb25kaW5nIHR4ZGxoIHRvIHRoaXMgVHhETC4KKyAqIEBtZW1ibG9jazogUG9pbnRlciB0byB0aGUgVHhETCBtZW1vcnkgYmxvY2sgb3IgbWVtb3J5IHBhZ2UuCisgKiAgICAgICAgICAgICBvbiB0aGUgbmV4dCBzZW5kIG9wZXJhdGlvbi4KKyAqIEBkbWFfb2JqZWN0OiBETUEgYWRkcmVzcyBhbmQgaGFuZGxlIG9mIHRoZSBtZW1vcnkgYmxvY2sgdGhhdCBjb250YWlucworICogICAgICAgICAgICAgdGhlIGRlc2NyaXB0b3IuIFRoaXMgbWVtYmVyIGlzIHVzZWQgb25seSBpbiB0aGUgImNoZWNrZWQiCisgKiAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSBIVyAodG8gZW5mb3JjZSBjZXJ0YWluIGFzc2VydGlvbnMpOworICogICAgICAgICAgICAgb3RoZXJ3aXNlIGl0IGdldHMgY29tcGlsZWQgb3V0LgorICogQGFsbG9jYXRlZDogVHJ1ZSBpZiB0aGUgZGVzY3JpcHRvciBpcyByZXNlcnZlZCwgMCBvdGhlcndpc2UuIEludGVybmFsIHVzYWdlLgorICoKKyAqIFBlci10cmFuc21pdCBkZWNzcmlwdG9yIEhXLXByaXZhdGUgZGF0YS4gSFcgdXNlcyB0aGUgc3BhY2UgdG8ga2VlcCBETUEKKyAqIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVzY3JpcHRvci4gTm90ZSB0aGF0IGRyaXZlciBjYW4gYXNrIEhXCisgKiB0byBhbGxvY2F0ZSBhZGRpdGlvbmFsIHBlci1kZXNjcmlwdG9yIHNwYWNlIGZvciBpdHMgb3duIChkcml2ZXItc3BlY2lmaWMpCisgKiBwdXJwb3Nlcy4KKyAqCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfcHJpdnt9LgorICovCitzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2IHsKKwlkbWFfYWRkcl90CQlkbWFfYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldgkqZG1hX2hhbmRsZTsKKwlwdHJkaWZmX3QJCWRtYV9vZmZzZXQ7CisJdTMyCQkJCWZyYWdzOworCXU4CQkJCSphbGlnbl92YWRkcl9zdGFydDsKKwl1OAkJCQkqYWxpZ25fdmFkZHI7CisJZG1hX2FkZHJfdAkJYWxpZ25fZG1hX2FkZHI7CisJc3RydWN0IHBjaV9kZXYgCSphbGlnbl9kbWFfaGFuZGxlOworCXN0cnVjdCBwY2lfZGV2CSphbGlnbl9kbWFfYWNjaDsKKwlwdHJkaWZmX3QJCWFsaWduX2RtYV9vZmZzZXQ7CisJdTMyCQkJCWFsaWduX3VzZWRfZnJhZ3M7CisJdTMyCQkJCWFsbG9jX2ZyYWdzOworCXUzMgkJCQl1bnVzZWQ7CisJc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdgkqbmV4dF90eGRsX3ByaXY7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQJCSpmaXJzdF90eGRwOworCXZvaWQJCQkqbWVtYmxvY2s7Cit9OworCisvKgorICogc3RydWN0IF9fdnhnZV9od19ub25fb2ZmbG9hZF9kYl93cmFwcGVyIC0gTm9uLW9mZmxvYWQgRG9vcmJlbGwgV3JhcHBlcgorICogQGNvbnRyb2xfMDogQml0cyAwIHRvIDcgLSBEb29yYmVsbCB0eXBlLgorICogICAgICAgICAgICAgQml0cyA4IHRvIDMxIC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXRzIDMyIHRvIDM5IC0gVGhlIGhpZ2hlc3QgVHhEIGluIHRoaXMgVHhETC4KKyAqICAgICAgICAgICAgIEJpdHMgNDAgdG8gNDcgLSBSZXNlcnZlZC4KKwkqCSAgICAgICBCaXRzIDQ4IHRvIDU1IC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXRzIDU2IHRvIDYzIC0gTm8gc25vb3AgZmxhZ3MuCisgKiBAdHhkbF9wdHI6ICBUaGUgc3RhcnRpbmcgbG9jYXRpb24gb2YgdGhlIFR4REwgaW4gaG9zdCBtZW1vcnkuCisgKgorICogQ3JlYXRlZCBieSB0aGUgaG9zdCBhbmQgd3JpdHRlbiB0byB0aGUgYWRhcHRlciB2aWEgUElPIHRvIGEgS2VybmVsIERvb3JiZWxsCisgKiBGSUZPLiBBbGwgbm9uLW9mZmxvYWQgZG9vcmJlbGwgd3JhcHBlciBmaWVsZHMgbXVzdCBiZSB3cml0dGVuIGJ5IHRoZSBob3N0IGFzCisgKiBwYXJ0IG9mIGEgZG9vcmJlbGwgd3JpdGUuIENvbnN1bWVkIGJ5IHRoZSBhZGFwdGVyIGJ1dCBpcyBub3Qgd3JpdHRlbiBieSB0aGUKKyAqIGFkYXB0ZXIuCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfbm9uX29mZmxvYWRfZGJfd3JhcHBlciB7CisJdTY0CQljb250cm9sXzA7CisjZGVmaW5lCVZYR0VfSFdfTk9EQldfR0VUX1RZUEUoY3RybDApCQkJdnhnZV9iVkFMbihjdHJsMCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19OT0RCV19UWVBFKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19OT0RCV19UWVBFX05PREJXCQkJCTAKKworI2RlZmluZQlWWEdFX0hXX05PREJXX0dFVF9MQVNUX1RYRF9OVU1CRVIoY3RybDApCXZ4Z2VfYlZBTG4oY3RybDAsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX05PREJXX0xBU1RfVFhEX05VTUJFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorCisjZGVmaW5lCVZYR0VfSFdfTk9EQldfR0VUX05PX1NOT09QKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgNTYsIDgpCisjZGVmaW5lIFZYR0VfSFdfTk9EQldfTElTVF9OT19TTk9PUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU2LCA4KQorI2RlZmluZQlWWEdFX0hXX05PREJXX0xJU1RfTk9fU05PT1BfVFhEX1JFQURfVFhEMF9XUklURQkJMHgyCisjZGVmaW5lCVZYR0VfSFdfTk9EQldfTElTVF9OT19TTk9PUF9UWF9GUkFNRV9EQVRBX1JFQUQJCTB4MQorCisJdTY0CQl0eGRsX3B0cjsKK307CisKKy8qCisgKiBUWCBEZXNjcmlwdG9yCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAtIFRyYW5zbWl0IERlc2NyaXB0b3IKKyAqIEBjb250cm9sXzA6IEJpdHMgMCB0byA2IC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXQgNyAtIExpc3QgT3duZXJzaGlwLiBUaGlzIGZpZWxkIHNob3VsZCBiZSBpbml0aWFsaXplZAorICogICAgICAgICAgICAgdG8gJzEnIGJ5IHRoZSBkcml2ZXIgYmVmb3JlIHRoZSB0cmFuc21pdCBsaXN0IHBvaW50ZXIgaXMKKyAqICAgICAgICAgICAgIHdyaXR0ZW4gdG8gdGhlIGFkYXB0ZXIuIFRoaXMgZmllbGQgd2lsbCBiZSBzZXQgdG8gJzAnIGJ5IHRoZQorICogICAgICAgICAgICAgYWRhcHRlciBvbmNlIGl0IGhhcyBjb21wbGV0ZWQgdHJhbnNtaXR0aW5nIHRoZSBmcmFtZSBvciBmcmFtZXMgaW4KKyAqICAgICAgICAgICAgIHRoZSBsaXN0LiBOb3RlIC0gVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGluIFR4RDAuIEFkZGl0aW9uYWxseSwKKyAqICAgICAgICAgICAgIGZvciBtdWx0aS1saXN0IHNlcXVlbmNlcywgdGhlIGRyaXZlciBzaG91bGQgbm90IHJlbGVhc2UgYW55CisgKiAgICAgICAgICAgICBidWZmZXJzIHVudGlsIHRoZSBvd25lcnNoaXAgb2YgdGhlIGxhc3QgbGlzdCBpbiB0aGUgbXVsdGktbGlzdAorICogICAgICAgICAgICAgc2VxdWVuY2UgaGFzIGJlZW4gcmV0dXJuZWQgdG8gdGhlIGhvc3QuCisgKiAgICAgICAgICAgICBCaXRzIDggdG8gMTEgLSBSZXNlcnZlZAorICogICAgICAgICAgICAgQml0cyAxMiB0byAxNSAtIFRyYW5zZmVyX0NvZGUuIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpbgorICogICAgICAgICAgICAgVHhEMC4gSXQgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgc3RhdHVzIG9mIHRoZSB0cmFuc21pdCBkYXRhCisgKiAgICAgICAgICAgICBidWZmZXIgdHJhbnNmZXIuIFRoaXMgZmllbGQgaXMgYWx3YXlzIG92ZXJ3cml0dGVuIGJ5IHRoZQorICogICAgICAgICAgICAgYWRhcHRlciwgc28gdGhpcyBmaWVsZCBtYXkgYmUgaW5pdGlhbGl6ZWQgdG8gYW55IHZhbHVlLgorICogICAgICAgICAgICAgQml0cyAxNiB0byAxNyAtIEhvc3Qgc3RlZXJpbmcuIFRoaXMgZmllbGQgYWxsb3dzIHRoZSBob3N0IHRvCisgKiAgICAgICAgICAgICBvdmVycmlkZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSBwaHlzaWNhbCB0cmFuc21pdCBwb3J0LgorICogICAgICAgICAgICAgQXR0ZW50aW9uOgorICogICAgICAgICAgICAgTm9ybWFsIHNvdW5kcyBhcyBpZiBsZWFybmVkIGZyb20gdGhlIHN3aXRjaCByYXRoZXIgdGhhbiBmcm9tCisgKiAgICAgICAgICAgICB0aGUgYWdncmVnYXRpb24gYWxnb3J5dGhtcy4KKyAqICAgICAgICAgICAgIDAwOiBOb3JtYWwuIFVzZSBEZXN0aW5hdGlvbi9NQUMgQWRkcmVzcworICogICAgICAgICAgICAgbG9va3VwIHRvIGRldGVybWluZSB0aGUgdHJhbnNtaXQgcG9ydC4KKyAqICAgICAgICAgICAgIDAxOiBTZW5kIG9uIHBoeXNpY2FsIFBvcnQxLgorICogICAgICAgICAgICAgMTA6IFNlbmQgb24gcGh5c2ljYWwgUG9ydDAuCisJKgkgICAgICAgMTE6IFNlbmQgb24gYm90aCBwb3J0cy4KKyAqICAgICAgICAgICAgIEJpdHMgMTggdG8gMjEgLSBSZXNlcnZlZAorICogICAgICAgICAgICAgQml0cyAyMiB0byAyMyAtIEdhdGhlcl9Db2RlLiBUaGlzIGZpZWxkIGlzIHNldCBieSB0aGUgaG9zdCBhbmQKKyAqICAgICAgICAgICAgIGlzIHVzZWQgdG8gZGVzY3JpYmUgaG93IGluZGl2aWR1YWwgYnVmZmVycyBjb21wcmlzZSBhIGZyYW1lLgorICogICAgICAgICAgICAgMTA6IEZpcnN0IGRlc2NyaXB0b3Igb2YgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIDAwOiBNaWRkbGUgb2YgYSBtdWx0aS1kZXNjcmlwdG9yIGZyYW1lLgorICogICAgICAgICAgICAgMDE6IExhc3QgZGVzY3JpcHRvciBvZiBhIGZyYW1lLgorICogICAgICAgICAgICAgMTE6IEZpcnN0IGFuZCBsYXN0IGRlc2NyaXB0b3Igb2YgYSBmcmFtZSAodGhlIGVudGlyZSBmcmFtZQorICogICAgICAgICAgICAgcmVzaWRlcyBpbiBhIHNpbmdsZSBidWZmZXIpLgorICogICAgICAgICAgICAgRm9yIG11bHRpLWRlc2NyaXB0b3IgZnJhbWVzLCB0aGUgb25seSB2YWxpZCBnYXRoZXIgY29kZSBzZXF1ZW5jZQorICogICAgICAgICAgICAgaXMgezEwLCBbMDBdLCAwMX0uIEluIG90aGVyIHdvcmRzLCB0aGUgZGVzY3JpcHRvcnMgbXVzdCBiZSBwbGFjZWQKKyAqICAgICAgICAgICAgIGluIHRoZSBsaXN0IGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICogICAgICAgICAgICAgQml0cyAyNCB0byAyNyAtIFJlc2VydmVkCisgKiAgICAgICAgICAgICBCaXRzIDI4IHRvIDI5IC0gTFNPX0ZybV9FbmNhcC4gTFNPIEZyYW1lIEVuY2Fwc3VsYXRpb24KKyAqICAgICAgICAgICAgIGRlZmluaXRpb24uIE9ubHkgdmFsaWQgaW4gVHhEMC4gVGhpcyBmaWVsZCBhbGxvd3MgdGhlIGhvc3QgdG8KKyAqICAgICAgICAgICAgIGluZGljYXRlIHRoZSBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIG9mIGFuIG91dGJvdW5kIExTTyBwYWNrZXQuCisgKiAgICAgICAgICAgICAwMCAtIGNsYXNzaWMgbW9kZSAoYmVzdCBndWVzcykKKyAqICAgICAgICAgICAgIDAxIC0gTExDCisgKiAgICAgICAgICAgICAxMCAtIFNOQVAKKyAqICAgICAgICAgICAgIDExIC0gRElYCisgKiAgICAgICAgICAgICBJZiAiY2xhc3NpYyBtb2RlIiBpcyBzZWxlY3RlZCwgdGhlIGFkYXB0ZXIgd2lsbCBhdHRlbXB0IHRvCisgKiAgICAgICAgICAgICBkZWNvZGUgdGhlIGZyYW1lJ3MgRXRoZXJuZXQgZW5jYXBzdWxhdGlvbiBieSBleGFtaW5pbmcgdGhlIEwvVAorICogICAgICAgICAgICAgZmllbGQgYXMgZm9sbG93czoKKyAqICAgICAgICAgICAgIDw9IDB4MDVEQyBMTEMvU05BUCBlbmNvZGluZzsgbXVzdCBleGFtaW5lIERTQVAvU1NBUCB0byBkZXRlcm1pbmUKKyAqICAgICAgICAgICAgIGlmIHBhY2tldCBpcyBJUHY0IG9yIElQdjYuCisgKiAgICAgICAgICAgICAweDg4NzAgSnVtYm8tU05BUCBlbmNvZGluZy4KKyAqICAgICAgICAgICAgIDB4MDgwMCBJUHY0IERJWCBlbmNvZGluZworICogICAgICAgICAgICAgMHg4NkREIElQdjYgRElYIGVuY29kaW5nCisgKiAgICAgICAgICAgICBvdGhlcnMgaWxsZWdhbCBlbmNhcHN1bGF0aW9uCisgKiAgICAgICAgICAgICBCaXRzIDMwIC0gTFNPXyBGbGFnLiBMYXJnZSBTZW5kIE9mZmxvYWQgKExTTykgZmxhZy4KKyAqICAgICAgICAgICAgIFNldCB0byAxIHRvIHBlcmZvcm0gc2VnbWVudGF0aW9uIG9mZmxvYWQgZm9yIFRDUC9VRFAuCisgKiAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHZhbGlkIG9ubHkgaW4gVHhEMC4KKyAqICAgICAgICAgICAgIEJpdHMgMzEgdG8gMzMgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdHMgMzQgdG8gNDcgLSBMU09fTVNTLiBUQ1AvVURQIExTTyBNYXhpbXVtIFNlZ21lbnQgU2l6ZQorICogICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiBMU09fQ29udHJvbCBpcyBub24temVyby4KKyAqICAgICAgICAgICAgIFdoZW4gTFNPX0NvbnRyb2wgaXMgc2V0IHRvIFRDUF9MU08sIHRoZSBzaW5nbGUgKHBvc3NpYmx5IGxhcmdlKQorICogICAgICAgICAgICAgVENQIHNlZ21lbnQgZGVzY3JpYmVkIGJ5IHRoaXMgVHhETCB3aWxsIGJlIHNlbnQgYXMgYSBzZXJpZXMgb2YKKyAqICAgICAgICAgICAgIFRDUCBzZWdtZW50cyBlYWNoIG9mIHdoaWNoIGNvbnRhaW5zIG5vIG1vcmUgdGhhbiBMU09fTVNTCisgKiAgICAgICAgICAgICBwYXlsb2FkIGJ5dGVzLgorICogICAgICAgICAgICAgV2hlbiBMU09fQ29udHJvbCBpcyBzZXQgdG8gVURQX0xTTywgdGhlIHNpbmdsZSAocG9zc2libHkgbGFyZ2UpCisgKiAgICAgICAgICAgICBVRFAgZGF0YWdyYW0gZGVzY3JpYmVkIGJ5IHRoaXMgVHhETCB3aWxsIGJlIHNlbnQgYXMgYSBzZXJpZXMgb2YKKyAqICAgICAgICAgICAgIFVEUCBkYXRhZ3JhbXMgZWFjaCBvZiB3aGljaCBjb250YWlucyBubyBtb3JlIHRoYW4gTFNPX01TUworICogICAgICAgICAgICAgcGF5bG9hZCBieXRlcy4KKyAqICAgICAgICAgICAgIEFsbCBvdXRnb2luZyBmcmFtZXMgZnJvbSB0aGlzIFR4REwgd2lsbCBoYXZlIExTT19NU1MgYnl0ZXMgb2YgVURQCisgKiAgICAgICAgICAgICBvciBUQ1AgcGF5bG9hZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBsYXN0LCB3aGljaCB3aWxsIGhhdmUKKyAqICAgICAgICAgICAgIDw9IExTT19NU1MgYnl0ZXMgb2YgcGF5bG9hZC4KKyAqICAgICAgICAgICAgIEJpdHMgNDggdG8gNjMgLSBCdWZmZXJfU2l6ZS4gTnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGluIHRoZQorICogICAgICAgICAgICAgYnVmZmVyIHRvIGJlIHJlYWQgYnkgdGhlIGFkYXB0ZXIuIFRoaXMgZmllbGQgaXMgd3JpdHRlbiBieSB0aGUKKyAqICAgICAgICAgICAgIGhvc3QuIEEgdmFsdWUgb2YgMCBpcyBpbGxlZ2FsLgorICoJICAgICAgIEJpdHMgMzIgdG8gNjMgLSBUaGlzIHZhbHVlIGlzIHdyaXR0ZW4gYnkgdGhlIGFkYXB0ZXIgdXBvbgorICoJICAgICAgIGNvbXBsZXRpb24gb2YgYSBVRFAgb3IgVENQIExTTyBvcGVyYXRpb24gYW5kIGluZGljYXRlcyB0aGUgbnVtYmVyCisgKiAgICAgICAgICAgICBvZiBVRFAgb3IgVENQIHBheWxvYWQgYnl0ZXMgdGhhdCB3ZXJlIHRyYW5zbWl0dGVkLiAweDAwMDAgd2lsbCBiZQorICogICAgICAgICAgICAgcmV0dXJuZWQgZm9yIGFueSBub24tTFNPIG9wZXJhdGlvbi4KKyAqIEBjb250cm9sXzE6IEJpdHMgMCB0byA0IC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXQgNSAtIFR4X0NLT19JUHY0IFNldCB0byBhICcxJyB0byBlbmFibGUgSVB2NCBoZWFkZXIgY2hlY2tzdW0KKyAqICAgICAgICAgICAgIG9mZmxvYWQuIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpbiB0aGUgZmlyc3QgVHhEIG9mIGEgZnJhbWUuCisgKiAgICAgICAgICAgICBCaXQgNiAtIFR4X0NLT19UQ1AgU2V0IHRvIGEgJzEnIHRvIGVuYWJsZSBUQ1AgY2hlY2tzdW0gb2ZmbG9hZC4KKyAqICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpbiB0aGUgZmlyc3QgVHhEIG9mIGEgZnJhbWUgKHRoZSBUeEQncworICogICAgICAgICAgICAgZ2F0aGVyIGNvZGUgbXVzdCBiZSAxMCBvciAxMSkuIFRoZSBkcml2ZXIgc2hvdWxkIG9ubHkgc2V0IHRoaXMKKyAqICAgICAgICAgICAgIGJpdCBpZiBpdCBjYW4gZ3VhcmFudGVlIHRoYXQgVENQIGlzIHByZXNlbnQuCisgKiAgICAgICAgICAgICBCaXQgNyAtIFR4X0NLT19VRFAgU2V0IHRvIGEgJzEnIHRvIGVuYWJsZSBVRFAgY2hlY2tzdW0gb2ZmbG9hZC4KKyAqICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpbiB0aGUgZmlyc3QgVHhEIG9mIGEgZnJhbWUgKHRoZSBUeEQncworICogICAgICAgICAgICAgZ2F0aGVyIGNvZGUgbXVzdCBiZSAxMCBvciAxMSkuIFRoZSBkcml2ZXIgc2hvdWxkIG9ubHkgc2V0IHRoaXMKKyAqICAgICAgICAgICAgIGJpdCBpZiBpdCBjYW4gZ3VhcmFudGVlIHRoYXQgVURQIGlzIHByZXNlbnQuCisgKiAgICAgICAgICAgICBCaXRzIDggdG8gMTQgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdCAxNSAtIFR4X1ZMQU5fRW5hYmxlIFZMQU4gdGFnIGluc2VydGlvbiBmbGFnLiBTZXQgdG8gYSAnMScgdG8KKyAqICAgICAgICAgICAgIGluc3RydWN0IHRoZSBhZGFwdGVyIHRvIGluc2VydCB0aGUgVkxBTiB0YWcgc3BlY2lmaWVkIGJ5IHRoZQorICogICAgICAgICAgICAgVHhfVkxBTl9UYWcgZmllbGQuIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpbiB0aGUgZmlyc3QgVHhEIG9mCisgKiAgICAgICAgICAgICBhIGZyYW1lLgorICogICAgICAgICAgICAgQml0cyAxNiB0byAzMSAtIFR4X1ZMQU5fVGFnLiBWYXJpYWJsZSBwb3J0aW9uIG9mIHRoZSBWTEFOIHRhZworICogICAgICAgICAgICAgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgZnJhbWUgYnkgdGhlIGFkYXB0ZXIgKHRoZSBmaXJzdCB0d28gYnl0ZXMKKyAqICAgICAgICAgICAgIG9mIGEgVkxBTiB0YWcgYXJlIGFsd2F5cyAweDgxMDApLiBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaWYgdGhlCisgKiAgICAgICAgICAgICBUeF9WTEFOX0VuYWJsZSBmaWVsZCBpcyBzZXQgdG8gJzEnLgorICogICAgICAgICAgICAgQml0cyAzMiB0byAzMyAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0cyAzNCB0byAzOSAtIFR4X0ludF9OdW1iZXIuIEluZGljYXRlcyB3aGljaCBUeCBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgIG51bWJlciB0aGUgZnJhbWUgYXNzb2NpYXRlZCB3aXRoLiBUaGlzIGZpZWxkIGlzIHdyaXR0ZW4gYnkgdGhlCisgKiAgICAgICAgICAgICBob3N0LiBJdCBpcyBvbmx5IHZhbGlkIGluIHRoZSBmaXJzdCBUeEQgb2YgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIEJpdHMgNDAgdG8gNDIgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdCA0MyAtIFNldCB0byAxIHRvIGV4Y2x1ZGUgdGhlIGZyYW1lIGZyb20gYmFuZHdpZHRoIG1ldGVyaW5nCisgKiAgICAgICAgICAgICBmdW5jdGlvbnMuIFRoaXMgZmllbGQgaXMgdmFsaWQgb25seSBpbiB0aGUgZmlyc3QgVHhECisgKiAgICAgICAgICAgICBvZiBhIGZyYW1lLgorICogICAgICAgICAgICAgQml0cyA0NCB0byA0NSAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0IDQ2IC0gVHhfSW50X1Blcl9MaXN0IFNldCB0byBhICcxJyB0byBpbnN0cnVjdCB0aGUgYWRhcHRlciB0bworICogICAgICAgICAgICAgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGFzIHNvb24gYXMgYWxsIG9mIHRoZSBmcmFtZXMgaW4gdGhlIGxpc3QKKyAqICAgICAgICAgICAgIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4gSW4gb3JkZXIgdG8gaGF2ZSBwZXItZnJhbWUgaW50ZXJydXB0cywKKyAqICAgICAgICAgICAgIHRoZSBkcml2ZXIgc2hvdWxkIHBsYWNlIGEgbWF4aW11bSBvZiBvbmUgZnJhbWUgcGVyIGxpc3QuIFRoaXMKKyAqICAgICAgICAgICAgIGZpZWxkIGlzIG9ubHkgdmFsaWQgaW4gdGhlIGZpcnN0IFR4RCBvZiBhIGZyYW1lLgorICogICAgICAgICAgICAgQml0IDQ3IC0gVHhfSW50X1V0aWxpemF0aW9uIFNldCB0byBhICcxJyB0byBpbnN0cnVjdCB0aGUgYWRhcHRlcgorICogICAgICAgICAgICAgdG8gY291bnQgdGhlIGZyYW1lIHRvd2FyZCB0aGUgdXRpbGl6YXRpb24gaW50ZXJydXB0IHNwZWNpZmllZCBpbgorICogICAgICAgICAgICAgdGhlIFR4X0ludF9OdW1iZXIgZmllbGQuIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpbiB0aGUgZmlyc3QKKyAqICAgICAgICAgICAgIFR4RCBvZiBhIGZyYW1lLgorICogICAgICAgICAgICAgQml0cyA0OCB0byA2MyAtIFJlc2VydmVkLgorICogQGJ1ZmZlcl9wb2ludGVyOiBCdWZmZXIgc3RhcnQgYWRkcmVzcy4KKyAqIEBob3N0X2NvbnRyb2w6IEhvc3RfQ29udHJvbC5PcGFxdWUgNjRiaXQgZGF0YSBzdG9yZWQgYnkgZHJpdmVyIGluc2lkZSB0aGUKKyAqICAgICAgICAgICAgVGl0YW4gZGVzY3JpcHRvciBwcmlvciB0byBwb3N0aW5nIHRoZSBsYXR0ZXIgb24gdGhlIGZpZm8KKyAqICAgICAgICAgICAgdmlhIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoKS5UaGUgJWhvc3RfY29udHJvbCBpcyByZXR1cm5lZCBhcyBpcworICogICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdpdGggZWFjaCBjb21wbGV0ZWQgZGVzY3JpcHRvci4KKyAqCisgKiBUcmFuc21pdCBkZXNjcmlwdG9yIChUeEQpLkZpZm8gZGVzY3JpcHRvciBjb250YWlucyBjb25maWd1cmVkIG51bWJlcgorICogKGxpc3QpIG9mIFR4RHMuICogRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG8gVGl0YW4gVXNlciBHdWlkZSwKKyAqIFNlY3Rpb24gNS40LjIgIlRyYW5zbWl0IERlc2NyaXB0b3IgKFR4RCkgRm9ybWF0Ii4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgeworCXU2NCBjb250cm9sXzA7CisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfTElTVF9PV05fQURBUFRFUgkJdnhnZV9tQklUKDcpCisKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9UX0NPREVfR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfVF9DT0RFKHZhbCkgCQkJdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfVF9DT0RFX1VOVVNFRAkJVlhHRV9IV19GSUZPX1RfQ09ERV9VTlVTRUQKKworCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREUodmFsKSAJCXZ4Z2VfdkJJVCh2YWwsIDIyLCAyKQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0dBVEhFUl9DT0RFX0ZJUlNUCVZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9GSVJTVAorI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0dBVEhFUl9DT0RFX0xBU1QJVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX0xBU1QKKworCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfTFNPX0VOCQkJCXZ4Z2VfbUJJVCgzMCkKKworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0xTT19NU1ModmFsKSAJCQl2eGdlX3ZCSVQodmFsLCAzNCwgMTQpCisKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9CVUZGRVJfU0laRSh2YWwpIAkJdnhnZV92QklUKHZhbCwgNDgsIDE2KQorCisJdTY0IGNvbnRyb2xfMTsKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9UWF9DS09fSVBWNF9FTgkJCXZ4Z2VfbUJJVCg1KQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX1RYX0NLT19UQ1BfRU4JCQl2eGdlX21CSVQoNikKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9UWF9DS09fVURQX0VOCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfVkxBTl9FTkFCTEUJCQl2eGdlX21CSVQoMTUpCisKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9WTEFOX1RBRyh2YWwpIAkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0lOVF9OVU1CRVIodmFsKSAJCXZ4Z2VfdkJJVCh2YWwsIDM0LCA2KQorCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfSU5UX1RZUEVfUEVSX0xJU1QJCXZ4Z2VfbUJJVCg0NikKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9JTlRfVFlQRV9VVElMWgkJCXZ4Z2VfbUJJVCg0NykKKworCXU2NCBidWZmZXJfcG9pbnRlcjsKKworCXU2NCBob3N0X2NvbnRyb2w7Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgLSBPbmUgYnVmZmVyIG1vZGUgUnhEIGZvciByaW5nCisgKiBAaG9zdF9jb250cm9sOiBUaGlzIGZpZWxkIGlzIGV4Y2x1c2l2ZWx5IGZvciBob3N0IHVzZSBhbmQgaXMgInJlYWRvbmx5IgorICogICAgICAgICAgICAgZnJvbSB0aGUgYWRhcHRlcidzIHBlcnNwZWN0aXZlLgorICogQGNvbnRyb2xfMDpCaXRzIDAgdG8gNiAtIFJUSF9CdWNrZXQgZ2V0CisgKgkgICAgICBCaXQgNyAtIE93biBEZXNjcmlwdG9yIG93bmVyc2hpcCBiaXQuIFRoaXMgYml0IGlzIHNldCB0byAxCisgKiAgICAgICAgICAgIGJ5IHRoZSBob3N0LCBhbmQgaXMgc2V0IHRvIDAgYnkgdGhlIGFkYXB0ZXIuCisgKgkgICAgICAwIC0gSG9zdCBvd25zIFJ4RCBhbmQgYnVmZmVyLgorICoJICAgICAgMSAtIFRoZSBhZGFwdGVyIG93bnMgUnhEIGFuZCBidWZmZXIuCisgKgkgICAgICBCaXQgOCAtIEZhc3RfUGF0aF9FbGlnaWJsZSBXaGVuIHNldCwgaW5kaWNhdGVzIHRoYXQgdGhlCisgKiAgICAgICAgICAgIHJlY2VpdmVkIGZyYW1lIG1lZXRzIGFsbCBvZiB0aGUgY3JpdGVyaWEgZm9yIGZhc3QgcGF0aCBwcm9jZXNzaW5nLgorICogICAgICAgICAgICBUaGUgcmVxdWlyZWQgY3JpdGVyaWEgYXJlIGFzIGZvbGxvd3M6CisgKiAgICAgICAgICAgICFTWU4gJgorICogICAgICAgICAgICAoVHJhbnNmZXJfQ29kZSA9PSAiVHJhbnNmZXIgT0siKSAmCisgKiAgICAgICAgICAgICghSXNfSVBfRnJhZ21lbnQpICYKKyAqICAgICAgICAgICAgKChJc19JUHY0ICYgY29tcHV0ZWRfTDNfY2hlY2tzdW0gPT0gMHhGRkZGKSB8CisgKiAgICAgICAgICAgIChJc19JUHY2KSkgJgorICogICAgICAgICAgICAoKElzX1RDUCAmIGNvbXB1dGVkX0w0X2NoZWNrc3VtID09IDB4RkZGRikgfAorICogICAgICAgICAgICAoSXNfVURQICYgKGNvbXB1dGVkX0w0X2NoZWNrc3VtID09IDB4RkZGRiB8CisgKiAgICAgICAgICAgIGNvbXB1dGVkIF9MNF9jaGVja3N1bSA9PSAweDAwMDApKSkKKyAqICAgICAgICAgICAgKHNhbWUgbWVhbmluZyBmb3IgYWxsIFJ4RCBidWZmZXIgbW9kZXMpCisgKgkgICAgICBCaXQgOSAtIEwzIENoZWNrc3VtIENvcnJlY3QKKyAqCSAgICAgIEJpdCAxMCAtIEw0IENoZWNrc3VtIENvcnJlY3QKKyAqCSAgICAgIEJpdCAxMSAtIFJlc2VydmVkCisgKgkgICAgICBCaXQgMTIgdG8gMTUgLSBUaGlzIGZpZWxkIGlzIHdyaXR0ZW4gYnkgdGhlIGFkYXB0ZXIuIEl0IGlzCisgKiAgICAgICAgICAgIHVzZWQgdG8gcmVwb3J0IHRoZSBzdGF0dXMgb2YgdGhlIGZyYW1lIHRyYW5zZmVyIHRvIHRoZSBob3N0LgorICoJICAgICAgMHgwIC0gVHJhbnNmZXIgT0sKKyAqCSAgICAgIDB4NCAtIFJEQSBGYWlsdXJlIER1cmluZyBUcmFuc2ZlcgorICoJICAgICAgMHg1IC0gVW5wYXJzZWFibGUgUGFja2V0LCBzdWNoIGFzIHVua25vd24gSVB2NiBoZWFkZXIuCisgKgkgICAgICAweDYgLSBGcmFtZSBpbnRlZ3JpdHkgZXJyb3IgKEZDUyBvciBFQ0MpLgorICoJICAgICAgMHg3IC0gQnVmZmVyIFNpemUgRXJyb3IuIFRoZSBwcm92aWRlZCBidWZmZXIocykgd2VyZSBub3QKKyAqICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBzaXplZCBhbmQgZGF0YSBsb3NzIG9jY3VycmVkLgorICoJICAgICAgMHg4IC0gSW50ZXJuYWwgRUNDIEVycm9yLiBSeEQgY29ycnVwdGVkLgorICoJICAgICAgMHg5IC0gSVB2NCBDaGVja3N1bSBlcnJvcgorICoJICAgICAgMHhBIC0gVENQL1VEUCBDaGVja3N1bSBlcnJvcgorICoJICAgICAgMHhGIC0gVW5rbm93biBFcnJvciBvciBNdWx0aXBsZSBFcnJvci4gSW5kaWNhdGVzIGFuCisgKiAgICAgICAgICAgICAgIHVua25vd24gcHJvYmxlbSBvciB0aGF0IG1vcmUgdGhhbiBvbmUgb2YgdHJhbnNmZXIgY29kZXMgaXMgc2V0LgorICoJICAgICAgQml0IDE2IC0gU1lOIFRoZSBhZGFwdGVyIHNldHMgdGhpcyBmaWVsZCB0byBpbmRpY2F0ZSB0aGF0CisgKiAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgZnJhbWUgY29udGFpbmVkIGEgVENQIHNlZ21lbnQgd2l0aCBpdHMgU1lOIGJpdAorICoJICAgICAgICAgIHNldCBhbmQgaXRzIEFDSyBiaXQgTk9UIHNldC4gKHNhbWUgbWVhbmluZyBmb3IgYWxsIFJ4RCBidWZmZXIKKyAqICAgICAgICAgICAgICAgIG1vZGVzKQorICoJICAgICAgQml0IDE3IC0gSXMgSUNNUAorICoJICAgICAgQml0IDE4IC0gUlRIX1NQRE1fSElUIFNldCB0byAxIGlmIHRoZXJlIHdhcyBhIG1hdGNoIGluIHRoZQorICogICAgICAgICAgICAgICAgU29ja2V0IFBhaXIgRGlyZWN0IE1hdGNoIFRhYmxlIGFuZCB0aGUgZnJhbWUgd2FzIHN0ZWVyZWQgYmFzZWQKKyAqICAgICAgICAgICAgICAgIG9uIFNQRE0uCisgKgkgICAgICBCaXQgMTkgLSBSVEhfSVRfSElUIFNldCB0byAxIGlmIHRoZXJlIHdhcyBhIG1hdGNoIGluIHRoZQorICogICAgICAgICAgICBJbmRpcmVjdGlvbiBUYWJsZSBhbmQgdGhlIGZyYW1lIHdhcyBzdGVlcmVkIGJhc2VkIG9uIGhhc2gKKyAqICAgICAgICAgICAgaW5kaXJlY3Rpb24uCisgKgkgICAgICBCaXQgMjAgdG8gMjMgLSBSVEhfSEFTSF9UWVBFIEluZGljYXRlcyB0aGUgZnVuY3Rpb24gKGhhc2gKKyAqCSAgICAgICAgICB0eXBlKSB0aGF0IHdhcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaC4KKyAqCSAgICAgIEJpdCAxOSAtIElTX1ZMQU4gU2V0IHRvICcxJyBpZiB0aGUgZnJhbWUgd2FzL2lzIFZMQU4KKyAqCSAgICAgICAgICB0YWdnZWQuCisgKgkgICAgICBCaXQgMjUgdG8gMjYgLSBFVEhFUl9FTkNBUCBSZWZsZWN0cyB0aGUgRXRoZXJuZXQgZW5jYXBzdWxhdGlvbgorICogICAgICAgICAgICAgICAgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgorICoJICAgICAgMHgwIC0gRXRoZXJuZXQgRElYCisgKgkgICAgICAweDEgLSBMTEMKKyAqCSAgICAgIDB4MiAtIFNOQVAgKGluY2x1ZGVzIEp1bWJvLVNOQVApCisgKgkgICAgICAweDMgLSBJUFgKKyAqCSAgICAgIEJpdCAyNyAtIElTX0lQVjQgU2V0IHRvICcxJyBpZiB0aGUgZnJhbWUgY29udGFpbnMgYW4gSVB2NAlwYWNrZXQuCisgKgkgICAgICBCaXQgMjggLSBJU19JUFY2IFNldCB0byAnMScgaWYgdGhlIGZyYW1lIGNvbnRhaW5zIGFuIElQdjYgcGFja2V0LgorICoJICAgICAgQml0IDI5IC0gSVNfSVBfRlJBRyBTZXQgdG8gJzEnIGlmIHRoZSBmcmFtZSBjb250YWlucyBhIGZyYWdtZW50ZWQKKyAqICAgICAgICAgICAgSVAgcGFja2V0LgorICoJICAgICAgQml0IDMwIC0gSVNfVENQIFNldCB0byAnMScgaWYgdGhlIGZyYW1lIGNvbnRhaW5zIGEgVENQIHNlZ21lbnQuCisgKgkgICAgICBCaXQgMzEgLSBJU19VRFAgU2V0IHRvICcxJyBpZiB0aGUgZnJhbWUgY29udGFpbnMgYSBVRFAgbWVzc2FnZS4KKyAqCSAgICAgIEJpdCAzMiB0byA0NyAtIEwzX0NoZWNrc3VtWzA6MTVdIFRoZSBJUHY0IGNoZWNrc3VtIHZhbHVlIAl0aGF0CisgKiAgICAgICAgICAgIGFycml2ZWQgd2l0aCB0aGUgZnJhbWUuIElmIHRoZSByZXN1bHRpbmcgY29tcHV0ZWQgSVB2NCBoZWFkZXIKKyAqICAgICAgICAgICAgY2hlY2tzdW0gZm9yIHRoZSBmcmFtZSBkaWQgbm90IHByb2R1Y2UgdGhlIGV4cGVjdGVkIDB4RkZGRiB2YWx1ZSwKKyAqICAgICAgICAgICAgdGhlbiB0aGUgdHJhbnNmZXIgY29kZSB3b3VsZCBiZSBzZXQgdG8gMHg5LgorICoJICAgICAgQml0IDQ4IHRvIDYzIC0gTDRfQ2hlY2tzdW1bMDoxNV0gVGhlIFRDUC9VRFAgY2hlY2tzdW0gdmFsdWUgdGhhdAorICogICAgICAgICAgICBhcnJpdmVkIHdpdGggdGhlIGZyYW1lLiBJZiB0aGUgcmVzdWx0aW5nIGNvbXB1dGVkIFRDUC9VRFAgY2hlY2tzdW0KKyAqICAgICAgICAgICAgZm9yIHRoZSBmcmFtZSBkaWQgbm90IHByb2R1Y2UgdGhlIGV4cGVjdGVkIDB4RkZGRiB2YWx1ZSwgdGhlbiB0aGUKKyAqICAgICAgICAgICAgdHJhbnNmZXIgY29kZSB3b3VsZCBiZSBzZXQgdG8gMHhBLgorICogQGNvbnRyb2xfMTpCaXRzIDAgdG8gMSAtIFJlc2VydmVkCisgKiAgICAgICAgICAgIEJpdHMgMiB0byAxNSAtIEJ1ZmZlcjBfU2l6ZS5UaGlzIGZpZWxkIGlzIHNldCBieSB0aGUgaG9zdCBhbmQKKyAqICAgICAgICAgICAgZXZlbnR1YWxseSBvdmVyd3JpdHRlbiBieSB0aGUgYWRhcHRlci4gVGhlIGhvc3Qgd3JpdGVzIHRoZQorICogICAgICAgICAgICBhdmFpbGFibGUgYnVmZmVyIHNpemUgaW4gYnl0ZXMgd2hlbiBpdCBwYXNzZXMgdGhlIGRlc2NyaXB0b3IgdG8KKyAqICAgICAgICAgICAgdGhlIGFkYXB0ZXIuIFdoZW4gYSBmcmFtZSBpcyBkZWxpdmVyZWQgdGhlIGhvc3QsIHRoZSBhZGFwdGVyCisgKiAgICAgICAgICAgIHBvcHVsYXRlcyB0aGlzIGZpZWxkIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGludG8gdGhlCisgKiAgICAgICAgICAgIGJ1ZmZlci4gVGhlIGxhcmdlc3Qgc3VwcG9ydGVkIGJ1ZmZlciBpcyAxNiwgMzgzIGJ5dGVzLgorICoJICAgICAgQml0IDE2IHRvIDQ3IC0gUlRIIEhhc2ggVmFsdWUgMzItYml0IFJUSCBoYXNoIHZhbHVlLiBPbmx5IHZhbGlkIGlmCisgKgkgICAgICBSVEhfSEFTSF9UWVBFIChDb250cm9sXzAsIGJpdHMgMjA6MjMpIGlzIG5vbnplcm8uCisgKgkgICAgICBCaXQgNDggdG8gNjMgLSBWTEFOX1RhZ1swOjE1XSBUaGUgY29udGVudHMgb2YgdGhlIHZhcmlhYmxlIHBvcnRpb24KKyAqICAgICAgICAgICAgb2YgdGhlIFZMQU4gdGFnLCBpZiBvbmUgd2FzIGRldGVjdGVkIGJ5IHRoZSBhZGFwdGVyLiBUaGlzIGZpZWxkIGlzCisgKiAgICAgICAgICAgIHBvcHVsYXRlZCBldmVuIGlmIFZMQU4tdGFnIHN0cmlwcGluZyBpcyBlbmFibGVkLgorICogQGJ1ZmZlcjBfcHRyOiBQb2ludGVyIHRvIGJ1ZmZlci4gVGhpcyBmaWVsZCBpcyBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlci4KKyAqCisgKiBPbmUgYnVmZmVyIG1vZGUgUnhEIGZvciByaW5nIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xIHsKKwl1NjQgaG9zdF9jb250cm9sOworCXU2NCBjb250cm9sXzA7CisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfUlRIX0JVQ0tFVF9HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAwLCA3KQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfTElTVF9PV05fQURBUFRFUgkJdnhnZV9tQklUKDcpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9GQVNUX1BBVEhfRUxJR0lCTEVfR0VUKGN0cmwwKQl2eGdlX2JWQUxuKGN0cmwwLCA4LCAxKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfTDNfQ0tTVU1fQ09SUkVDVF9HRVQoY3RybDApCXZ4Z2VfYlZBTG4oY3RybDAsIDksIDEpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9MNF9DS1NVTV9DT1JSRUNUX0dFVChjdHJsMCkJdnhnZV9iVkFMbihjdHJsMCwgMTAsIDEpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9UX0NPREVfR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfVF9DT0RFKHZhbCkgCQkJdnhnZV92QklUKHZhbCwgMTIsIDQpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9UX0NPREVfVU5VU0VECQlWWEdFX0hXX1JJTkdfVF9DT0RFX1VOVVNFRAorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfU1lOX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDE2LCAxKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfSVNfSUNNUF9HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAxNywgMSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1JUSF9TUERNX0hJVF9HRVQoY3RybDApCXZ4Z2VfYlZBTG4oY3RybDAsIDE4LCAxKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfUlRIX0lUX0hJVF9HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAxOSwgMSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1JUSF9IQVNIX1RZUEVfR0VUKGN0cmwwKQl2eGdlX2JWQUxuKGN0cmwwLCAyMCwgNCkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0lTX1ZMQU5fR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMjQsIDEpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9FVEhFUl9FTkNBUF9HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAyNSwgMikKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0ZSQU1FX1BST1RPX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDI3LCA1KQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfTDNfQ0tTVU1fR0VUKGN0cmwwKQl2eGdlX2JWQUxuKGN0cmwwLCAzMiwgMTYpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9MNF9DS1NVTV9HRVQoY3RybDApCXZ4Z2VfYlZBTG4oY3RybDAsIDQ4LCAxNikKKworCXU2NCBjb250cm9sXzE7CisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF8xX0JVRkZFUjBfU0laRV9HRVQoY3RybDEpCXZ4Z2VfYlZBTG4oY3RybDEsIDIsIDE0KQorI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEXzFfQlVGRkVSMF9TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgMiwgMTQpCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfMV9CVUZGRVIwX1NJWkVfTUFTSwkJdnhnZV92QklUKDB4M0ZGRiwgMiwgMTQpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF8xX1JUSF9IQVNIX1ZBTF9HRVQoY3RybDEpICAgIHZ4Z2VfYlZBTG4oY3RybDEsIDE2LCAzMikKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1ZMQU5fVEFHX0dFVChjdHJsMSkJdnhnZV9iVkFMbihjdHJsMSwgNDgsIDE2KQorCisJdTY0IGJ1ZmZlcjBfcHRyOworfTsKKworZW51bSB2eGdlX2h3X3J0aF9hbGdvcml0bXMgeworCVJUSF9BTEdfSkVOS0lOUyA9IDAsCisJUlRIX0FMR19NU19SU1MJPSAxLAorCVJUSF9BTEdfQ1JDMzJDCT0gMgorfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19ydGhfaGFzaF90eXBlcyAtIFJUSCBoYXNoIHR5cGVzLgorICogQGhhc2hfdHlwZV90Y3BpcHY0X2VuOiBFbmFibGVzIFJUSCBmaWVsZCB0eXBlIEhhc2hUeXBlVGNwSVB2NAorICogQGhhc2hfdHlwZV9pcHY0X2VuOiBFbmFibGVzIFJUSCBmaWVsZCB0eXBlIEhhc2hUeXBlSVB2NAorICogQGhhc2hfdHlwZV90Y3BpcHY2X2VuOiBFbmFibGVzIFJUSCBmaWVsZCB0eXBlIEhhc2hUeXBlVGNwSVB2NgorICogQGhhc2hfdHlwZV9pcHY2X2VuOiBFbmFibGVzIFJUSCBmaWVsZCB0eXBlIEhhc2hUeXBlSVB2NgorICogQGhhc2hfdHlwZV90Y3BpcHY2ZXhfZW46IEVuYWJsZXMgUlRIIGZpZWxkIHR5cGUgSGFzaFR5cGVUY3BJUHY2RXgKKyAqIEBoYXNoX3R5cGVfaXB2NmV4X2VuOiBFbmFibGVzIFJUSCBmaWVsZCB0eXBlIEhhc2hUeXBlSVB2NkV4CisgKgorICogVXNlZCB0byBwYXNzIFJUSCBoYXNoIHR5cGVzIHRvIHJ0c19ydHNfc2V0LgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfc2V0KCksIHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9nZXQoKS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfcnRoX2hhc2hfdHlwZXMgeworCXU4IGhhc2hfdHlwZV90Y3BpcHY0X2VuOworCXU4IGhhc2hfdHlwZV9pcHY0X2VuOworCXU4IGhhc2hfdHlwZV90Y3BpcHY2X2VuOworCXU4IGhhc2hfdHlwZV9pcHY2X2VuOworCXU4IGhhc2hfdHlwZV90Y3BpcHY2ZXhfZW47CisJdTggaGFzaF90eXBlX2lwdjZleF9lbjsKK307CisKK3UzMgordnhnZV9od19kZXZpY2VfZGVidWdfbWFza19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwllbnVtIHZ4Z2VfZGVidWdfbGV2ZWwgbGV2ZWwsCisJdTMyIG1hc2spOworCit1MzIKK3Z4Z2VfaHdfZGV2aWNlX2Vycm9yX2xldmVsX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3UzMgordnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordTMyCit2eGdlX2h3X2RldmljZV9kZWJ1Z19tYXNrX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9zaXplX2dldAktIEdldCB0aGUgc2l6ZSBvZiByaW5nIGRlc2NyaXB0b3IuCisgKiBAYnVmX21vZGU6IEJ1ZmZlciBtb2RlICgxLCAzIG9yIDUpCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIFJ4RCBmb3IgZ2l2ZW4gYnVmZmVyIG1vZGUKKyAqLworc3RhdGljIGlubGluZSB1MzIgdnhnZV9od19yaW5nX3J4ZF9zaXplX2dldCh1MzIgYnVmX21vZGUpCit7CisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xKTsKK30KKworLyoqCisgKiB2eGdlX2h3X3Jpbmdfcnhkc19wZXJfYmxvY2tfZ2V0IC0gR2V0IHRoZSBudW1iZXIgb2YgcnhkcyBwZXIgYmxvY2suCisgKiBAYnVmX21vZGU6IEJ1ZmZlciBtb2RlICgxIGJ1ZmZlciBtb2RlIG9ubHkpCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgUnhEIGZvciBSeEQgYmxvY2sgZm9yIGdpdmVuIGJ1ZmZlciBtb2RlCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHZ4Z2VfaHdfcmluZ19yeGRzX3Blcl9ibG9ja19nZXQodTMyIGJ1Zl9tb2RlKQoreworCXJldHVybiAodTMyKSgoVlhHRV9IV19CTE9DS19TSVpFLTE2KSAvCisJCXNpemVvZihzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xKSk7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF8xYl9zZXQgLSBQcmVwYXJlIDEtYnVmZmVyLW1vZGUgZGVzY3JpcHRvci4KKyAqIEByeGRoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqIEBkbWFfcG9pbnRlcjogRE1BIGFkZHJlc3Mgb2YJYSBzaW5nbGUgcmVjZWl2ZSBidWZmZXIJdGhpcyBkZXNjcmlwdG9yCisgKiBzaG91bGQgY2FycnkuIE5vdGUgdGhhdCBieSB0aGUgdGltZSB2eGdlX2h3X3JpbmdfcnhkXzFiX3NldCBpcyBjYWxsZWQsCisgKiB0aGUgcmVjZWl2ZSBidWZmZXIgc2hvdWxkIGJlIGFscmVhZHkgbWFwcGVkIHRvIHRoZSBkZXZpY2UKKyAqIEBzaXplOiBTaXplIG9mIHRoZSByZWNlaXZlIEBkbWFfcG9pbnRlciBidWZmZXIuCisgKgorICogUHJlcGFyZSAxLWJ1ZmZlci1tb2RlIFJ4CWRlc2NyaXB0b3IgZm9yIHBvc3RpbmcKKyAqICh2aWEJdnhnZV9od19yaW5nX3J4ZF9wb3N0KCkpLgorICoKKyAqIFRoaXMJaW5saW5lIGhlbHBlci1mdW5jdGlvbiBkb2VzIG5vdAlyZXR1cm4gYW55IHBhcmFtZXRlcnMgYW5kIGFsd2F5cworICogc3VjY2VlZHMuCisgKgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfMWJfc2V0KAorCXZvaWQgKnJ4ZGgsCisJZG1hX2FkZHJfdCBkbWFfcG9pbnRlciwKKwl1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICpyeGRwID0gKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKilyeGRoOworCXJ4ZHAtPmJ1ZmZlcjBfcHRyID0gZG1hX3BvaW50ZXI7CisJcnhkcC0+Y29udHJvbF8xCSY9IH5WWEdFX0hXX1JJTkdfUlhEXzFfQlVGRkVSMF9TSVpFX01BU0s7CisJcnhkcC0+Y29udHJvbF8xCXw9IFZYR0VfSFdfUklOR19SWERfMV9CVUZGRVIwX1NJWkUoc2l6ZSk7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF8xYl9nZXQgLSBHZXQgZGF0YSBmcm9tIHRoZSBjb21wbGV0ZWQgMS1idWYKKyAqIGRlc2NyaXB0b3IuCisgKiBAdnBhdGhfaGFuZGxlOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQGRtYV9wb2ludGVyOiBETUEgYWRkcmVzcyBvZglhIHNpbmdsZSByZWNlaXZlIGJ1ZmZlcgl0aGlzIGRlc2NyaXB0b3IKKyAqIGNhcnJpZXMuIFJldHVybmVkIGJ5IEhXLgorICogQHBrdF9sZW5ndGg6CUxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgcG9pbnRlZCBieQorICoKKyAqIFJldHJpZXZlIHByb3RvY29sIGRhdGEgZnJvbSB0aGUgY29tcGxldGVkIDEtYnVmZmVyLW1vZGUgUnggZGVzY3JpcHRvci4KKyAqIFRoaXMJaW5saW5lIGhlbHBlci1mdW5jdGlvbiB1c2VzIGNvbXBsZXRlZCBkZXNjcmlwdG9yIHRvIHBvcHVsYXRlIHJlY2VpdmUKKyAqIGJ1ZmZlciBwb2ludGVyIGFuZCBvdGhlciAib3V0IiBwYXJhbWV0ZXJzLiBUaGUgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzLgorICoKKyAqLworc3RhdGljIGlubGluZQordm9pZCB2eGdlX2h3X3JpbmdfcnhkXzFiX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgsCisJdTMyICpwa3RfbGVuZ3RoKQoreworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKXJ4ZGg7CisKKwkqcGt0X2xlbmd0aCA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF8xX0JVRkZFUjBfU0laRV9HRVQocnhkcC0+Y29udHJvbF8xKTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkXzFiX2luZm9fZ2V0IC0gR2V0IGV4dGVuZGVkIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aAorICogYSBjb21wbGV0ZWQgcmVjZWl2ZSBkZXNjcmlwdG9yIGZvciAxYiBtb2RlLgorICogQHZwYXRoX2hhbmRsZTogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqIEByeGRoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqIEByeGRfaW5mbzogRGVzY3JpcHRvciBpbmZvcm1hdGlvbgorICoKKyAqIFJldHJpZXZlIGV4dGVuZGVkIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIGNvbXBsZXRlZCByZWNlaXZlIGRlc2NyaXB0b3IuCisgKgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfMWJfaW5mb19nZXQoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nX2hhbmRsZSwKKwl2b2lkICpyeGRoLAorCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkX2luZm8gKnJ4ZF9pbmZvKQoreworCisJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopcnhkaDsKKwlyeGRfaW5mby0+c3luX2ZsYWcgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfU1lOX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5pc19pY21wID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0lTX0lDTVBfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPmZhc3RfcGF0aF9lbGlnaWJsZSA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9GQVNUX1BBVEhfRUxJR0lCTEVfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPmwzX2Nrc3VtX3ZhbGlkID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0wzX0NLU1VNX0NPUlJFQ1RfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPmwzX2Nrc3VtID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0wzX0NLU1VNX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5sNF9ja3N1bV92YWxpZCA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9MNF9DS1NVTV9DT1JSRUNUX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5sNF9ja3N1bSA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9MNF9DS1NVTV9HRVQocnhkcC0+Y29udHJvbF8wKTs7CisJcnhkX2luZm8tPmZyYW1lID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0VUSEVSX0VOQ0FQX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5wcm90byA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9GUkFNRV9QUk9UT19HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+aXNfdmxhbiA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9JU19WTEFOX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT52bGFuID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX1ZMQU5fVEFHX0dFVChyeGRwLT5jb250cm9sXzEpOworCXJ4ZF9pbmZvLT5ydGhfYnVja2V0ID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX1JUSF9CVUNLRVRfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPnJ0aF9pdF9oaXQgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfUlRIX0lUX0hJVF9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+cnRoX3NwZG1faGl0ID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX1JUSF9TUERNX0hJVF9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+cnRoX2hhc2hfdHlwZSA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9SVEhfSEFTSF9UWVBFX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5ydGhfdmFsdWUgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfMV9SVEhfSEFTSF9WQUxfR0VUKHJ4ZHAtPmNvbnRyb2xfMSk7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldCAtIEdldCBkcml2ZXIgcHJpdmF0ZSBwZXItZGVzY3JpcHRvciBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICBvZiAxYiBtb2RlIDNiIG1vZGUgcmluZy4KKyAqIEByeGRoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqCisgKiBSZXR1cm5zOiBwcml2YXRlIGRyaXZlcglpbmZvIGFzc29jaWF0ZWQJd2l0aCB0aGUgZGVzY3JpcHRvci4KKyAqIGRyaXZlciByZXF1ZXN0cwlwZXItZGVzY3JpcHRvciBzcGFjZSB2aWEgdnhnZV9od19yaW5nX2F0dHIuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnZ4Z2VfaHdfcmluZ19yeGRfcHJpdmF0ZV9nZXQodm9pZCAqcnhkaCkKK3sKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICpyeGRwID0gKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKilyeGRoOworCXJldHVybiAodm9pZCAqKShzaXplX3QpcnhkcC0+aG9zdF9jb250cm9sOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX2Nrc3VtX3NldF9iaXRzIC0gT2ZmbG9hZCBjaGVja3N1bS4KKyAqIEB0eGRsaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKiBAY2tzdW1fYml0czogU3BlY2lmaWVzIHdoaWNoIGNoZWNrc3VtcyBhcmUgdG8gYmUgb2ZmbG9hZGVkOiBJUHY0LAorICogICAgICAgICAgICAgIGFuZC9vciBUQ1AgYW5kL29yIFVEUC4KKyAqCisgKiBBc2sgVGl0YW4gdG8gY2FsY3VsYXRlIElQdjQgJiB0cmFuc3BvcnQgY2hlY2tzdW1zIGZvciBfdGhpc18gdHJhbnNtaXQKKyAqIGRlc2NyaXB0b3IuCisgKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciBmb3IgcG9zdGluZworICogKHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KCkpLiBUaGUgcmVsYXRlZCAicHJlcGFyYXRpb24iIEFQSXMgaW5jbHVkZQorICogdnhnZV9od19maWZvX3R4ZGxfbXNzX3NldCgpLCB2eGdlX2h3X2ZpZm9fdHhkbF9idWZmZXJfc2V0X2FsaWduZWQoKSwKKyAqIGFuZCB2eGdlX2h3X2ZpZm9fdHhkbF9idWZmZXJfc2V0KCkuCisgKiBBbGwgdGhlc2UgQVBJcyBmaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGZpZm8gZGVzY3JpcHRvciwKKyAqIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgVGl0YW4gc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2eGdlX2h3X2ZpZm9fdHhkbF9ja3N1bV9zZXRfYml0cyh2b2lkICp0eGRsaCwgdTY0IGNrc3VtX2JpdHMpCit7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaDsKKwl0eGRwLT5jb250cm9sXzEgfD0gY2tzdW1fYml0czsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9tc3Nfc2V0IC0gU2V0IE1TUy4KKyAqIEB0eGRsaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKiBAbXNzOiBNU1Mgc2l6ZSBmb3IgX3RoaXNfIFRDUCBjb25uZWN0aW9uLiBQYXNzZWQgYnkgVENQIHN0YWNrIGRvd24gdG8gdGhlCisgKiAgICAgICBkcml2ZXIsIHdoaWNoIGluIHR1cm4gaW5zZXJ0cyB0aGUgTVNTIGludG8gdGhlIEB0eGRsaC4KKyAqCisgKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciBmb3IgcG9zdGluZworICogKHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KCkpLiBUaGUgcmVsYXRlZCAicHJlcGFyYXRpb24iIEFQSXMgaW5jbHVkZQorICogdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldCgpLCB2eGdlX2h3X2ZpZm9fdHhkbF9idWZmZXJfc2V0X2FsaWduZWQoKSwKKyAqIGFuZCB2eGdlX2h3X2ZpZm9fdHhkbF9ja3N1bV9zZXRfYml0cygpLgorICogQWxsIHRoZXNlIEFQSXMgZmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBmaWZvIGRlc2NyaXB0b3IsCisgKiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFRpdGFuIHNwZWNpZmljYXRpb24uCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdnhnZV9od19maWZvX3R4ZGxfbXNzX3NldCh2b2lkICp0eGRsaCwgaW50IG1zcykKK3sKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcCA9IChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKXR4ZGxoOworCisJdHhkcC0+Y29udHJvbF8wIHw9IFZYR0VfSFdfRklGT19UWERfTFNPX0VOOworCXR4ZHAtPmNvbnRyb2xfMCB8PSBWWEdFX0hXX0ZJRk9fVFhEX0xTT19NU1MobXNzKTsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF92bGFuX3NldCAtIFNldCBWTEFOIHRhZy4KKyAqIEB0eGRsaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKiBAdmxhbl90YWc6IDE2Yml0IFZMQU4gdGFnLgorICoKKyAqIEluc2VydCBWTEFOIHRhZyBpbnRvIHNwZWNpZmllZCB0cmFuc21pdCBkZXNjcmlwdG9yLgorICogVGhlIGFjdHVhbCBpbnNlcnRpb24gb2YgdGhlIHRhZyBpbnRvIG91dGdvaW5nIGZyYW1lIGlzIGRvbmUgYnkgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdnhnZV9od19maWZvX3R4ZGxfdmxhbl9zZXQodm9pZCAqdHhkbGgsIHUxNiB2bGFuX3RhZykKK3sKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcCA9IChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKXR4ZGxoOworCisJdHhkcC0+Y29udHJvbF8xIHw9IFZYR0VfSFdfRklGT19UWERfVkxBTl9FTkFCTEU7CisJdHhkcC0+Y29udHJvbF8xIHw9IFZYR0VfSFdfRklGT19UWERfVkxBTl9UQUcodmxhbl90YWcpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX3ByaXZhdGVfZ2V0IC0gUmV0cmlldmUgcGVyLWRlc2NyaXB0b3IgcHJpdmF0ZSBkYXRhLgorICogQHR4ZGxoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqCisgKiBSZXRyaWV2ZSBwZXItZGVzY3JpcHRvciBwcml2YXRlIGRhdGEuCisgKiBOb3RlIHRoYXQgZHJpdmVyIHJlcXVlc3RzIHBlci1kZXNjcmlwdG9yIHNwYWNlIHZpYQorICogc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRyIHBhc3NlZCB0bworICogdnhnZV9od192cGF0aF9vcGVuKCkuCisgKgorICogUmV0dXJuczogcHJpdmF0ZSBkcml2ZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc2NyaXB0b3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqdnhnZV9od19maWZvX3R4ZGxfcHJpdmF0ZV9nZXQodm9pZCAqdHhkbGgpCit7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHAgID0gKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopdHhkbGg7CisKKwlyZXR1cm4gKHZvaWQgKikoc2l6ZV90KXR4ZHAtPmhvc3RfY29udHJvbDsKK30KKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19yaW5nX2F0dHIgLSBSaW5nIG9wZW4gInRlbXBsYXRlIi4KKyAqIEBjYWxsYmFjazogUmluZyBjb21wbGV0aW9uIGNhbGxiYWNrLiBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIHRoZXJlCisgKiAgICAgICAgICAgIGFyZSBuZXcgY29tcGxldGlvbnMgb24gdGhhdCByaW5nLiBJbiBtYW55IGltcGxlbWVudGF0aW9ucworICogICAgICAgICAgICB0aGUgQGNhbGxiYWNrIGV4ZWN1dGVzIGluIHRoZSBodyBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIEByeGRfaW5pdDogUmluZydzIGRlc2NyaXB0b3ItaW5pdGlhbGl6ZSBjYWxsYmFjay4KKyAqICAgICAgICAgICAgU2VlIHZ4Z2VfaHdfcmluZ19yeGRfaW5pdF9me30uCisgKiAgICAgICAgICAgIElmIG5vdCBOVUxMLCBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIG9wZW5pbmcKKyAqICAgICAgICAgICAgdGhlIHJpbmcuCisgKiBAcnhkX3Rlcm06IFJpbmcncyBkZXNjcmlwdG9yLXRlcm1pbmF0ZSBjYWxsYmFjay4gSWYgbm90IE5VTEwsCisgKiAgICAgICAgICBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIGNsb3NpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcmluZy4KKyAqICAgICAgICAgIFNlZSBhbHNvIHZ4Z2VfaHdfcmluZ19yeGRfdGVybV9me30uCisgKiBAdXNlcmRhdGE6IFVzZXItZGVmaW5lZCAiY29udGV4dCIgb2YgX3RoYXRfIHJpbmcuIFBhc3NlZCBiYWNrIHRvIHRoZQorICogICAgICAgICAgICB1c2VyIGFzIG9uZSBvZiB0aGUgQGNhbGxiYWNrLCBAcnhkX2luaXQsIGFuZCBAcnhkX3Rlcm0gYXJndW1lbnRzLgorICogQHBlcl9yeGRfc3BhY2U6IElmIHNwZWNpZmllZCAoaS5lLiwgZ3JlYXRlciB0aGFuIHplcm8pOiBleHRyYSBzcGFjZQorICogICAgICAgICAgICAgIHJlc2VydmVkIGJ5IEhXIHBlciBlYWNoIHJlY2VpdmUgZGVzY3JpcHRvci4KKyAqICAgICAgICAgICAgICBDYW4gYmUgdXNlZCB0byBzdG9yZQorICogICAgICAgICAgICAgIGFuZCByZXRyaWV2ZSBvbiBjb21wbGV0aW9uLCBpbmZvcm1hdGlvbiBzcGVjaWZpYworICogICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIuCisgKgorICogUmluZyBvcGVuICJ0ZW1wbGF0ZSIuIFVzZXIgZmlsbHMgdGhlIHN0cnVjdHVyZSB3aXRoIHJpbmcKKyAqIGF0dHJpYnV0ZXMgYW5kIHBhc3NlcyBpdCB0byB2eGdlX2h3X3ZwYXRoX29wZW4oKS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfcmluZ19hdHRyIHsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzICgqY2FsbGJhY2spKAorCQkJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCwKKwkJCXZvaWQgKnJ4ZGgsCisJCQl1OCB0X2NvZGUsCisJCQl2b2lkICp1c2VyZGF0YSk7CisKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzICgqcnhkX2luaXQpKAorCQkJdm9pZCAqcnhkaCwKKwkJCXZvaWQgKnVzZXJkYXRhKTsKKworCXZvaWQgKCpyeGRfdGVybSkoCisJCQl2b2lkICpyeGRoLAorCQkJZW51bSB2eGdlX2h3X3J4ZF9zdGF0ZSBzdGF0ZSwKKwkJCXZvaWQgKnVzZXJkYXRhKTsKKworCXZvaWQJCSp1c2VyZGF0YTsKKwl1MzIJCXBlcl9yeGRfc3BhY2U7Cit9OworCisvKioKKyAqIGZ1bmN0aW9uIHZ4Z2VfaHdfZmlmb19jYWxsYmFja19mIC0gRklGTyBjYWxsYmFjay4KKyAqIEB2cGF0aF9oYW5kbGU6IFZpcnR1YWwgcGF0aCB3aG9zZSBGaWZvICJjb250YWluaW5nIiAxIG9yIG1vcmUgY29tcGxldGVkCisgKiAgICAgICAgICAgICBkZXNjcmlwdG9ycy4KKyAqIEB0eGRsaDogRmlyc3QgY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKiBAdHhkbF9wcml2OiBQb2ludGVyIHRvIHBlciB0eGRsIHNwYWNlIGFsbG9jYXRlZAorICogQHRfY29kZTogVHJhbnNmZXIgY29kZSwgYXMgcGVyIFRpdGFuIFVzZXIgR3VpZGUuCisgKiAgICAgICAgICBSZXR1cm5lZCBieSBIVy4KKyAqIEBob3N0X2NvbnRyb2w6IE9wYXF1ZSA2NGJpdCBkYXRhIHN0b3JlZCBieSBkcml2ZXIgaW5zaWRlIHRoZSBUaXRhbgorICogICAgICAgICAgICBkZXNjcmlwdG9yIHByaW9yIHRvIHBvc3RpbmcgdGhlIGxhdHRlciBvbiB0aGUgZmlmbworICogICAgICAgICAgICB2aWEgdnhnZV9od19maWZvX3R4ZGxfcG9zdCgpLiBUaGUgQGhvc3RfY29udHJvbCBpcyByZXR1cm5lZAorICogICAgICAgICAgICBhcyBpcyB0byB0aGUgZHJpdmVyIHdpdGggZWFjaCBjb21wbGV0ZWQgZGVzY3JpcHRvci4KKyAqIEB1c2VyZGF0YTogT3BhcXVlIHBlci1maWZvIGRhdGEgc3BlY2lmaWVkIGF0IGZpZm8gb3BlbgorICogICAgICAgICAgICB0aW1lLCB2aWEgdnhnZV9od192cGF0aF9vcGVuKCkuCisgKgorICogRmlmbyBjb21wbGV0aW9uIGNhbGxiYWNrICh0eXBlIGRlY2xhcmF0aW9uKS4gQSBzaW5nbGUgcGVyLWZpZm8KKyAqIGNhbGxiYWNrIGlzIHNwZWNpZmllZCBhdCBmaWZvIG9wZW4gdGltZSwgdmlhCisgKiB2eGdlX2h3X3ZwYXRoX29wZW4oKS4gVHlwaWNhbGx5IGdldHMgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIHByb2Nlc3NpbmcKKyAqIG9mIHRoZSBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lLgorICoKKyAqIEZpZm8gY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYnkgSFcgaWYsIGFuZCBvbmx5IGlmLCB0aGVyZSBpcyBhdCBsZWFzdAorICogb25lIG5ldyBjb21wbGV0aW9uIG9uIGEgZ2l2ZW4gZmlmby4gVXBvbiBwcm9jZXNzaW5nIHRoZSBmaXJzdCBAdHhkbGggZHJpdmVyCisgKiBpcyBfc3VwcG9zZWRfIHRvIGNvbnRpbnVlIGNvbnN1bWluZyBjb21wbGV0aW9ucyB1c2luZzoKKyAqICAgIC0gdnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQoKQorICoKKyAqIE5vdGUgdGhhdCBmYWlsdXJlIHRvIHByb2Nlc3MgbmV3IGNvbXBsZXRpb25zIGluIGEgdGltZWx5IGZhc2hpb24KKyAqIGxlYWRzIHRvIFZYR0VfSFdfSU5GX09VVF9PRl9ERVNDUklQVE9SUyBjb25kaXRpb24uCisgKgorICogTm9uLXplcm8gQHRfY29kZSBtZWFucyBmYWlsdXJlIHRvIHByb2Nlc3MgdHJhbnNtaXQgZGVzY3JpcHRvci4KKyAqCisgKiBJbiB0aGUgInRyYW5zbWl0IiBjYXNlIHRoZSBmYWlsdXJlIGNvdWxkIGhhcHBlbiwgZm9yIGluc3RhbmNlLCB3aGVuIHRoZQorICogbGluayBpcyBkb3duLCBpbiB3aGljaCBjYXNlIFRpdGFuIGNvbXBsZXRlcyB0aGUgZGVzY3JpcHRvciBiZWNhdXNlIGl0CisgKiBpcyBub3QgYWJsZSB0byBzZW5kIHRoZSBkYXRhIG91dC4KKyAqCisgKiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG8gVGl0YW4gVXNlciBHdWlkZS4KKyAqCisgKiBTZWUgYWxzbzogdnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQoKSwgdnhnZV9od19maWZvX3R4ZGxfdGVybV9me30uCisgKi8KKy8qKgorICogZnVuY3Rpb24gdnhnZV9od19maWZvX3R4ZGxfdGVybV9mIC0gVGVybWluYXRlIGRlc2NyaXB0b3IgY2FsbGJhY2suCisgKiBAdHhkbGg6IEZpcnN0IGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogQHR4ZGxfcHJpdjogUG9pbnRlciB0byBwZXIgdHhkbCBzcGFjZSBhbGxvY2F0ZWQKKyAqIEBzdGF0ZTogT25lIG9mIHRoZSBlbnVtIHZ4Z2VfaHdfdHhkbF9zdGF0ZXt9IGVudW1lcmF0ZWQgc3RhdGVzLgorICogQHVzZXJkYXRhOiBQZXItZmlmbyB1c2VyIGRhdGEgKGEuay5hLiBjb250ZXh0KSBzcGVjaWZpZWQgYXQKKyAqIGZpZm8gb3BlbiB0aW1lLCB2aWEgdnhnZV9od192cGF0aF9vcGVuKCkuCisgKgorICogVGVybWluYXRlIGRlc2NyaXB0b3IgY2FsbGJhY2suIFVubGVzcyBOVUxMIGlzIHNwZWNpZmllZCBpbiB0aGUKKyAqIHN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0cnt9IHN0cnVjdHVyZSBwYXNzZWQgdG8gdnhnZV9od192cGF0aF9vcGVuKCkpLAorICogSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgYXMgcGFydCBvZiBjbG9zaW5nIGZpZm8sIHByaW9yIHRvCisgKiBkZS1hbGxvY2F0aW5nIHRoZSByaW5nIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcworICogKGluY2x1ZGluZyBkZXNjcmlwdG9ycykuCisgKiBkcml2ZXIgc2hvdWxkIHV0aWxpemUgdGhlIGNhbGxiYWNrIHRvIChmb3IgaW5zdGFuY2UpIHVubWFwCisgKiBhbmQgZnJlZSBETUEgZGF0YSBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9zdGVkIChzdGF0ZSA9CisgKiBWWEdFX0hXX1RYRExfU1RBVEVfUE9TVEVEKSBkZXNjcmlwdG9ycywKKyAqIGFzIHdlbGwgYXMgb3RoZXIgcmVsZXZhbnQgY2xlYW51cCBmdW5jdGlvbnMuCisgKgorICogU2VlIGFsc286IHN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0cnt9CisgKi8KKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRyIC0gRmlmbyBvcGVuICJ0ZW1wbGF0ZSIuCisgKiBAY2FsbGJhY2s6IEZpZm8gY29tcGxldGlvbiBjYWxsYmFjay4gSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiB0aGVyZQorICogICAgICAgICAgICBhcmUgbmV3IGNvbXBsZXRpb25zIG9uIHRoYXQgZmlmby4gSW4gbWFueSBpbXBsZW1lbnRhdGlvbnMKKyAqICAgICAgICAgICAgdGhlIEBjYWxsYmFjayBleGVjdXRlcyBpbiB0aGUgaHcgaW50ZXJydXB0IGNvbnRleHQuCisgKiBAdHhkbF90ZXJtOiBGaWZvJ3MgZGVzY3JpcHRvci10ZXJtaW5hdGUgY2FsbGJhY2suIElmIG5vdCBOVUxMLAorICogICAgICAgICAgSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiBjbG9zaW5nIHRoZSBjb3JyZXNwb25kaW5nIGZpZm8uCisgKiAgICAgICAgICBTZWUgYWxzbyB2eGdlX2h3X2ZpZm9fdHhkbF90ZXJtX2Z7fS4KKyAqIEB1c2VyZGF0YTogVXNlci1kZWZpbmVkICJjb250ZXh0IiBvZiBfdGhhdF8gZmlmby4gUGFzc2VkIGJhY2sgdG8gdGhlCisgKiAgICAgICAgICAgIHVzZXIgYXMgb25lIG9mIHRoZSBAY2FsbGJhY2ssIGFuZCBAdHhkbF90ZXJtIGFyZ3VtZW50cy4KKyAqIEBwZXJfdHhkbF9zcGFjZTogSWYgc3BlY2lmaWVkIChpLmUuLCBncmVhdGVyIHRoYW4gemVybyk6IGV4dHJhIHNwYWNlCisgKiAgICAgICAgICAgICAgcmVzZXJ2ZWQgYnkgSFcgcGVyIGVhY2ggdHJhbnNtaXQgZGVzY3JpcHRvci4gQ2FuIGJlIHVzZWQgdG8KKyAqICAgICAgICAgICAgICBzdG9yZSwgYW5kIHJldHJpZXZlIG9uIGNvbXBsZXRpb24sIGluZm9ybWF0aW9uIHNwZWNpZmljCisgKiAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlci4KKyAqCisgKiBGaWZvIG9wZW4gInRlbXBsYXRlIi4gVXNlciBmaWxscyB0aGUgc3RydWN0dXJlIHdpdGggZmlmbworICogYXR0cmlidXRlcyBhbmQgcGFzc2VzIGl0IHRvIHZ4Z2VfaHdfdnBhdGhfb3BlbigpLgorICovCitzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHIgeworCisJZW51bSB2eGdlX2h3X3N0YXR1cyAoKmNhbGxiYWNrKSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19oYW5kbGUsCisJCQl2b2lkICp0eGRsaCwKKwkJCWVudW0gdnhnZV9od19maWZvX3Rjb2RlIHRfY29kZSwKKwkJCXZvaWQgKnVzZXJkYXRhLAorCQkJdm9pZCAqKnNrYl9wdHIpOworCisJdm9pZCAoKnR4ZGxfdGVybSkoCisJCQl2b2lkICp0eGRsaCwKKwkJCWVudW0gdnhnZV9od190eGRsX3N0YXRlIHN0YXRlLAorCQkJdm9pZCAqdXNlcmRhdGEpOworCisJdm9pZAkJKnVzZXJkYXRhOworCXUzMgkJcGVyX3R4ZGxfc3BhY2U7Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX2F0dHIgLSBBdHRyaWJ1dGVzIG9mIHZpcnR1YWwgcGF0aAorICogQHZwX2lkOiBJZGVudGlmaWVyIG9mIFZpcnR1YWwgUGF0aAorICogQHJpbmdfYXR0cjogQXR0cmlidXRlcyBvZiByaW5nIGZvciBub24tb2ZmbG9hZCByZWNlaXZlCisgKiBAZmlmb19hdHRyOiBBdHRyaWJ1dGVzIG9mIGZpZm8gZm9yIG5vbi1vZmZsb2FkIHRyYW5zbWl0CisgKgorICogQXR0cmlidXRlcyBvZiB2aXJ0dWFsIHBhdGguICBUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYXMgcGFyYW1ldGVyCisgKiB0byB0aGUgdnhnZV9od192cGF0aF9vcGVuKCkgcm91dGluZSB0byBzZXQgdGhlIGF0dHJpYnV0ZXMgb2YgcmluZyBhbmQgZmlmby4KKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfYXR0ciB7CisJdTMyCQkJCXZwX2lkOworCXN0cnVjdCB2eGdlX2h3X3JpbmdfYXR0cglyaW5nX2F0dHI7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRyCWZpZm9fYXR0cjsKK307CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19ibG9ja3Bvb2xfY3JlYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sLAorCQkJdTMyIHBvb2xfc2l6ZSwKKwkJCXUzMiBwb29sX21heCk7CisKK3ZvaWQKK19fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbCk7CisKK3N0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICoKK19fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWxsb2NhdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJdTMyIHNpemUpOworCit2b2lkCitfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2ZyZWUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5KTsKKwordm9pZCAqCitfX3Z4Z2VfaHdfYmxvY2twb29sX21hbGxvYyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQl1MzIgc2l6ZSwKKwkJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0KTsKKwordm9pZAorX192eGdlX2h3X2Jsb2NrcG9vbF9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCXZvaWQgKm1lbWJsb2NrLAorCQkJdTMyIHNpemUsCisJCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfZmlmb19jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcgKmZpZm9fY29uZmlnKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqbmV3X2NvbmZpZyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfbWdtdF9kZXZpY2VfY29uZmlnKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnCSpkZXZfY29uZmlnLCBpbnQgc2l6ZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgX19kZXZpbml0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm9fZ2V0KAorCXZvaWQgX19pb21lbSAqYmFyMCwKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9md192ZXJfZ2V0KAorCXUzMgl2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvICpod19pbmZvKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2NhcmRfaW5mb19nZXQoCisJdTMyIHZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gKmh3X2luZm8pOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fZGV2aW5pdCB2eGdlX2h3X2RldmljZV9jb25maWdfZGVmYXVsdF9nZXQoCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2aWNlX2NvbmZpZyk7CisKKy8qKgorICogdnhnZV9od19kZXZpY2VfbGlua19zdGF0ZV9nZXQgLSBHZXQgbGluayBzdGF0ZS4KKyAqIEBkZXZoOiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIEdldCBsaW5rIHN0YXRlLgorICogUmV0dXJuczogbGluayBzdGF0ZS4KKyAqLworc3RhdGljIGlubGluZQorZW51bSB2eGdlX2h3X2RldmljZV9saW5rX3N0YXRlIHZ4Z2VfaHdfZGV2aWNlX2xpbmtfc3RhdGVfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKQoreworCXJldHVybiBkZXZoLT5saW5rX3N0YXRlOworfQorCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX3Rlcm1pbmF0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2NvbnN0IHU4ICoKK3Z4Z2VfaHdfZGV2aWNlX3NlcmlhbF9udW1iZXJfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordTE2IHZ4Z2VfaHdfZGV2aWNlX2xpbmtfd2lkdGhfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKworY29uc3QgdTggKgordnhnZV9od19kZXZpY2VfcHJvZHVjdF9uYW1lX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgX19kZXZpbml0IHZ4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKipkZXZoLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9hdHRyICphdHRyLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKmRldmljZV9jb25maWcpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZGV2aWNlX2dldHBhdXNlX2RhdGEoCisJIHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCSB1MzIgcG9ydCwKKwkgdTMyICp0eCwKKwkgdTMyICpyeCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kZXZpY2Vfc2V0cGF1c2VfZGF0YSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIgcG9ydCwKKwl1MzIgdHgsCisJdTMyIHJ4KTsKKworc3RhdGljIGlubGluZSB2b2lkICp2eGdlX29zX2RtYV9tYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQl1bnNpZ25lZCBsb25nIHNpemUsCisJCQlzdHJ1Y3QgcGNpX2RldiAqKnBfZG1haCwKKwkJCXN0cnVjdCBwY2lfZGV2ICoqcF9kbWFfYWNjaCkKK3sKKwlnZnBfdCBmbGFnczsKKwl2b2lkICp2YWRkcjsKKwl1bnNpZ25lZCBsb25nIG1pc2FsaWduZWQgPSAwOworCSpwX2RtYV9hY2NoID0gKnBfZG1haCA9IE5VTEw7CisKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCWZsYWdzID0gR0ZQX0FUT01JQyB8IEdGUF9ETUE7CisJZWxzZQorCQlmbGFncyA9IEdGUF9LRVJORUwgfCBHRlBfRE1BOworCisJc2l6ZSArPSBWWEdFX0NBQ0hFX0xJTkVfU0laRTsKKworCXZhZGRyID0ga21hbGxvYygoc2l6ZSksIGZsYWdzKTsKKwlpZiAodmFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIHZhZGRyOworCW1pc2FsaWduZWQgPSAodW5zaWduZWQgbG9uZylWWEdFX0FMSUdOKCooKHU2NCAqKSZ2YWRkciksCisJCQkJVlhHRV9DQUNIRV9MSU5FX1NJWkUpOworCSoodW5zaWduZWQgbG9uZyAqKXBfZG1hX2FjY2ggPSBtaXNhbGlnbmVkOworCXZhZGRyID0gKHZvaWQgKikoKHU4ICopdmFkZHIgKyBtaXNhbGlnbmVkKTsKKwlyZXR1cm4gdmFkZHI7Cit9CisKK2V4dGVybiB2b2lkIHZ4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FkZCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJdm9pZCAqYmxvY2tfYWRkciwKKwkJCXUzMiBsZW5ndGgsCisJCQlzdHJ1Y3QgcGNpX2RldiAqZG1hX2gsCisJCQlzdHJ1Y3QgcGNpX2RldiAqYWNjX2hhbmRsZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2eGdlX29zX2RtYV9tYWxsb2NfYXN5bmMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmRldmgsCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlnZnBfdCBmbGFnczsKKwl2b2lkICp2YWRkcjsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJZmxhZ3MgPSBHRlBfQVRPTUlDIHwgR0ZQX0RNQTsKKwllbHNlCisJCWZsYWdzID0gR0ZQX0tFUk5FTCB8IEdGUF9ETUE7CisKKwl2YWRkciA9IGttYWxsb2MoKHNpemUpLCBmbGFncyk7CisKKwl2eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hZGQoZGV2aCwgdmFkZHIsIHNpemUsIHBkZXYsIHBkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdnhnZV9vc19kbWFfZnJlZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgdm9pZCAqdmFkZHIsCisJCQlzdHJ1Y3QgcGNpX2RldiAqKnBfZG1hX2FjY2gpCit7CisJdW5zaWduZWQgbG9uZyBtaXNhbGlnbmVkID0gKih1bnNpZ25lZCBsb25nICopcF9kbWFfYWNjaDsKKwl1OCAqdG1wID0gKHU4ICopdmFkZHI7CisJdG1wIC09IG1pc2FsaWduZWQ7CisJa2ZyZWUoKHZvaWQgKil0bXApOworfQorCisvKgorICogX192eGdlX2h3X21lbXBvb2xfaXRlbV9wcml2IC0gd2lsbCByZXR1cm4gcG9pbnRlciBvbiBwZXIgaXRlbSBwcml2YXRlIHNwYWNlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCoKK19fdnhnZV9od19tZW1wb29sX2l0ZW1fcHJpdigKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29sLAorCXUzMiBtZW1ibG9ja19pZHgsCisJdm9pZCAqaXRlbSwKKwl1MzIgKm1lbWJsb2NrX2l0ZW1faWR4KQoreworCXB0cmRpZmZfdCBvZmZzZXQ7CisJdm9pZCAqbWVtYmxvY2sgPSBtZW1wb29sLT5tZW1ibG9ja3NfYXJyW21lbWJsb2NrX2lkeF07CisKKworCW9mZnNldCA9ICh1MzIpKCh1OCAqKWl0ZW0gLSAodTggKiltZW1ibG9jayk7CisJdnhnZV9hc3NlcnQob2Zmc2V0ID49IDAgJiYgKHUzMilvZmZzZXQgPCBtZW1wb29sLT5tZW1ibG9ja19zaXplKTsKKworCSgqbWVtYmxvY2tfaXRlbV9pZHgpID0gKHUzMikgb2Zmc2V0IC8gbWVtcG9vbC0+aXRlbV9zaXplOworCXZ4Z2VfYXNzZXJ0KCgqbWVtYmxvY2tfaXRlbV9pZHgpIDwgbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrKTsKKworCXJldHVybiAodTggKiltZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbbWVtYmxvY2tfaWR4XSArCisJCQkgICAgKCptZW1ibG9ja19pdGVtX2lkeCkgKiBtZW1wb29sLT5pdGVtc19wcml2X3NpemU7Cit9CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19tZW1wb29sX2dyb3coCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCwKKwl1MzIgbnVtX2FsbG9jYXRlLAorCXUzMiAqbnVtX2FsbG9jYXRlZCk7CisKK3N0cnVjdCB2eGdlX2h3X21lbXBvb2wqCitfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyIG1lbWJsb2NrX3NpemUsCisJdTMyIGl0ZW1fc2l6ZSwKKwl1MzIgcHJpdmF0ZV9zaXplLAorCXUzMiBpdGVtc19pbml0aWFsLAorCXUzMiBpdGVtc19tYXgsCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9jYnMgKm1wX2NhbGxiYWNrLAorCXZvaWQgKnVzZXJkYXRhKTsKKworc3RydWN0IF9fdnhnZV9od19jaGFubmVsKgorX192eGdlX2h3X2NoYW5uZWxfYWxsb2NhdGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwaCwKKwkJCWVudW0gX192eGdlX2h3X2NoYW5uZWxfdHlwZSB0eXBlLCB1MzIgbGVuZ3RoLAorCQkJdTMyIHBlcl9kdHJfc3BhY2UsIHZvaWQgKnVzZXJkYXRhKTsKKwordm9pZAorX192eGdlX2h3X2NoYW5uZWxfZnJlZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplKAorCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19jaGFubmVsX3Jlc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCk7CisKKy8qCisgKiBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgLSBSZXR1cm4gdGhlIG1heCBmcmFnbWVudHMgYWxsb2NhdGVkCisgKiBmb3IgdGhlIGZpZm8uCisgKiBAZmlmbzogRmlmbworICogQHR4ZHA6IFBvbml0ZXIgdG8gYSBUeEQKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2ICoKK19fdnhnZV9od19maWZvX3R4ZGxfcHJpdigKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sCisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHApCit7CisJcmV0dXJuIChzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2ICopCisJCQkoKChjaGFyICopKCh1bG9uZyl0eGRwLT5ob3N0X2NvbnRyb2wpKSArCisJCQkJZmlmby0+cGVyX3R4ZGxfc3BhY2UpOworfQorCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfb3BlbigKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9hdHRyICphdHRyLAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICoqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV92cGF0aF9yZXNldF9pbl9wcm9nX2NoZWNrKHU2NCBfX2lvbWVtICp2cGF0aF9yc3RfaW5fcHJvZyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9jbG9zZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9yZXNldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9yZWNvdmVyX2Zyb21fcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfZW5hYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfY2hlY2tfbGVhayhzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX210dV9zZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1MzIgbmV3X210dSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9zdGF0c19lbmFibGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3MoCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aAkqdnBhdGgsCisJdTMyCQkJb3BlcmF0aW9uLAorCXUzMgkJCW9mZnNldCwKKwl1NjQJCQkqc3RhdCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF94bWFjX3R4X3N0YXRzX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoCSp2cGF0aCwKKwlzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3R4X3N0YXRzICp2cGF0aF90eF9zdGF0cyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoCSp2cGF0aCwKKwlzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3J4X3N0YXRzICp2cGF0aF9yeF9zdGF0cyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9zdGF0c19nZXQoCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyAqaHdfc3RhdHMpOworCit2b2lkCit2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV92cGF0aF9jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnICp2cF9jb25maWcpOworCit2b2lkCitfX3Z4Z2VfaHdfZGV2aWNlX3BjaV9lX2luaXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2xlZ2FjeV9zd2FwcGVyX3NldChzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKmxlZ2FjeV9yZWcpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3dhcHBlcl9zZXQoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19rZGZjX3N3YXBwZXJfc2V0KHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqbGVnYWN5X3JlZywKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsKAorCXZvaWQgX19pb21lbQkqcmVnLAorCXU2NCBtYXNrLCB1MzIgbWF4X21pbGxpcyk7CisKKyNpZm5kZWYgcmVhZHEKK3N0YXRpYyBpbmxpbmUgdTY0IHJlYWRxKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1NjQgcmV0ID0gMDsKKwlyZXQgPSByZWFkbChhZGRyICsgNCk7CisJcmV0IDw8PSAzMjsKKwlyZXQgfD0gcmVhZGwoYWRkcik7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKyNpZm5kZWYgd3JpdGVxCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVxKHU2NCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWwoKHUzMikgKHZhbCksIGFkZHIpOworCXdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIF9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRlbCh2YWwsIGFkZHIgKyA0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfbG93ZXIodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRlbCh2YWwsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodTY0IHZhbDY0LCB2b2lkIF9faW9tZW0gKmFkZHIsCisJCQkgIHU2NCBtYXNrLCB1MzIgbWF4X21pbGxpcykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX2xvd2VyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMzIsIDMyKSwgYWRkcik7CisJd21iKCk7CisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDAsIDMyKSwgYWRkcik7CisJd21iKCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwoYWRkciwgbWFzaywgbWF4X21pbGxpcyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZyBfX2lvbWVtICoKK19fdnhnZV9od19kZXZpY2VfdG9jX2dldCh2b2lkIF9faW9tZW0gKmJhcjApOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX3JlZ19hZGRyX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOworCit2b2lkCitfX3Z4Z2VfaHdfZGV2aWNlX2lkX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOworCit2b2lkCitfX3Z4Z2VfaHdfZGV2aWNlX2hvc3RfaW5mb19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHU2NCBvbl9vZmYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3BjaV9yZWFkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJKnZwYXRoLAorCXUzMgkJCXBoeV9mdW5jXzAsCisJdTMyCQkJb2Zmc2V0LAorCXUzMgkJCSp2YWwpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfYWRkcl9nZXQoCisJdTMyIHZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKKwl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pOworCit1MzIKK19fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldCgKKwl1MzIgdnBfaWQsIHN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcgX19pb21lbSAqdnBtZ210X3JlZyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9yZXNldF9jaGVjayhzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCk7CisKKy8qKgorICogdnhnZV9kZWJ1ZworICogQGxldmVsOiBsZXZlbCBvZiBkZWJ1ZyB2ZXJib3NpdHkuCisgKiBAbWFzazogbWFzayBmb3IgdGhlIGRlYnVnCisgKiBAYnVmOiBDaXJjdWxhciBidWZmZXIgZm9yIHRyYWNpbmcKKyAqIEBmbXQ6IHByaW50ZiBsaWtlIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBQcm92aWRlcyBsb2dnaW5nIGZhY2lsaXRpZXMuIENhbiBiZSBjdXN0b21pemVkIG9uIHBlci1tb2R1bGUKKyAqIGJhc2lzIG9yL2FuZCB3aXRoIGRlYnVnIGxldmVscy4gSW5wdXQgcGFyYW1ldGVycywgZXhjZXB0CisgKiBtb2R1bGUgYW5kIGxldmVsLCBhcmUgdGhlIHNhbWUgYXMgcG9zaXggcHJpbnRmLiBUaGlzIGZ1bmN0aW9uCisgKiBtYXkgYmUgY29tcGlsZWQgb3V0IGlmIERFQlVHIG1hY3JvIHdhcyBuZXZlciBkZWZpbmVkLgorICogU2VlIGFsc286IGVudW0gdnhnZV9kZWJ1Z19sZXZlbHt9LgorICovCisKKyNkZWZpbmUgdnhnZV90cmFjZV9hdXgobGV2ZWwsIG1hc2ssIGZtdCwgLi4uKSBcCit7XAorCQl2eGdlX29zX3ZhcHJpbnRmKGxldmVsLCBtYXNrLCBmbXQsIF9fVkFfQVJHU19fKTtcCit9CisKKyNkZWZpbmUgdnhnZV9kZWJ1Zyhtb2R1bGUsIGxldmVsLCBtYXNrLCBmbXQsIC4uLikgeyBcCitpZiAoKGxldmVsID49IFZYR0VfVFJBQ0UgJiYgKChtb2R1bGUgJiBWWEdFX0RFQlVHX1RSQUNFX01BU0spID09IG1vZHVsZSkpIHx8IFwKKwkobGV2ZWwgPj0gVlhHRV9FUlIgJiYgKChtb2R1bGUgJiBWWEdFX0RFQlVHX0VSUl9NQVNLKSA9PSBtb2R1bGUpKSkge1wKKwlpZiAoKG1hc2sgJiBWWEdFX0RFQlVHX01BU0spID09IG1hc2spXAorCQl2eGdlX3RyYWNlX2F1eChsZXZlbCwgbWFzaywgZm10LCBfX1ZBX0FSR1NfXyk7IFwKK30gXAorfQorCisjaWYgKFZYR0VfQ09NUE9ORU5UX0xMICYgVlhHRV9ERUJVR19NT0RVTEVfTUFTSykKKyNkZWZpbmUgdnhnZV9kZWJ1Z19sbChsZXZlbCwgbWFzaywgZm10LCAuLi4pIFwKK3tcCisJdnhnZV9kZWJ1ZyhWWEdFX0NPTVBPTkVOVF9MTCwgbGV2ZWwsIG1hc2ssIGZtdCwgX19WQV9BUkdTX18pO1wKK30KKworI2Vsc2UKKyNkZWZpbmUgdnhnZV9kZWJ1Z19sbChsZXZlbCwgbWFzaywgZm10LCAuLi4pCisjZW5kaWYKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfaXRhYmxlX3NldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICoqdnBhdGhfaGFuZGxlcywKKwkJCXUzMiB2cGF0aF9jb3VudCwKKwkJCXU4ICptdGFibGUsCisJCQl1OCAqaXRhYmxlLAorCQkJdTMyIGl0YWJsZV9zaXplKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJZW51bSB2eGdlX2h3X3J0aF9hbGdvcml0bXMgYWxnb3JpdGhtLAorCXN0cnVjdCB2eGdlX2h3X3J0aF9oYXNoX3R5cGVzICpoYXNoX3R5cGUsCisJdTE2IGJ1Y2tldF9zaXplKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjczNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuYwpAQCAtMCwwICsxLDExNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisgKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisgKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiB2eGdlLWV0aHRvb2wuYzogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqICAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSAidnhnZS1ldGh0b29sLmgiCisKKy8qKgorICogdnhnZV9ldGh0b29sX3NzZXQgLSBTZXRzIGRpZmZlcmVudCBsaW5rIHBhcmFtZXRlcnMuCisgKiBAZGV2OiBkZXZpY2UgcG9pbnRlci4KKyAqIEBpbmZvOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBwYXJhbWV0ZXJzIGdpdmVuIGJ5IGV0aHRvb2wgdG8gc2V0CisgKiBsaW5rIGluZm9ybWF0aW9uLgorICoKKyAqIFRoZSBmdW5jdGlvbiBzZXRzIGRpZmZlcmVudCBsaW5rIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb250bworICogdGhlIE5JQy4KKyAqIFJldHVybiB2YWx1ZToKKyAqIDAgb24gc3VjY2Vzcy4KKyAqLworCitzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9zc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqaW5mbykKK3sKKwkvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDEwR2IvRlVMTCAqLworCWlmICgoaW5mby0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKKwkgICAgKGluZm8tPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fCAoaW5mby0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2eGdlX2V0aHRvb2xfZ3NldCAtIFJldHVybiBsaW5rIHNwZWNpZmljIGluZm9ybWF0aW9uLgorICogQGRldjogZGV2aWNlIHBvaW50ZXIuCisgKiBAaW5mbzogcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdpdGggcGFyYW1ldGVycyBnaXZlbiBieSBldGh0b29sCisgKiB0byByZXR1cm4gbGluayBpbmZvcm1hdGlvbi4KKyAqCisgKiBSZXR1cm5zIGxpbmsgc3BlY2lmaWMgaW5mb3JtYXRpb24gbGlrZSBzcGVlZCwgZHVwbGV4IGV0Yy4uIHRvIGV0aHRvb2wuCisgKiBSZXR1cm4gdmFsdWUgOgorICogcmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCB2eGdlX2V0aHRvb2xfZ3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmluZm8pCit7CisJaW5mby0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfRklCUkUpOworCWluZm8tPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF9GSUJSRSk7CisJaW5mby0+cG9ydCA9IFBPUlRfRklCUkU7CisKKwlpbmZvLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CisKKwlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CisJCWluZm8tPnNwZWVkID0gU1BFRURfMTAwMDA7CisJCWluZm8tPmR1cGxleCA9IERVUExFWF9GVUxMOworCX0gZWxzZSB7CisJCWluZm8tPnNwZWVkID0gLTE7CisJCWluZm8tPmR1cGxleCA9IC0xOworCX0KKworCWluZm8tPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnhnZV9ldGh0b29sX2dkcnZpbmZvIC0gUmV0dXJucyBkcml2ZXIgc3BlY2lmaWMgaW5mb3JtYXRpb24uCisgKiBAZGV2OiBkZXZpY2UgcG9pbnRlci4KKyAqIEBpbmZvOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBwYXJhbWV0ZXJzIGdpdmVuIGJ5IGV0aHRvb2wgdG8KKyAqIHJldHVybiBkcml2ZXIgaW5mb3JtYXRpb24uCisgKgorICogUmV0dXJucyBkcml2ZXIgc3BlY2VmaWMgaW5mb3JtYXRpb24gbGlrZSBuYW1lLCB2ZXJzaW9uIGV0Yy4uIHRvIGV0aHRvb2wuCisgKi8KK3N0YXRpYyB2b2lkIHZ4Z2VfZXRodG9vbF9nZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJsY3B5KGluZm8tPmRyaXZlciwgVlhHRV9EUklWRVJfTkFNRSwgc2l6ZW9mKFZYR0VfRFJJVkVSX05BTUUpKTsKKwlzdHJsY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OLCBzaXplb2YoRFJWX1ZFUlNJT04pKTsKKwlzdHJsY3B5KGluZm8tPmZ3X3ZlcnNpb24sIHZkZXYtPmZ3X3ZlcnNpb24sIFZYR0VfSFdfRldfU1RSTEVOKTsKKwlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZSh2ZGV2LT5wZGV2KSwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CisJaW5mby0+cmVnZHVtcF9sZW4gPSBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnKQorCQkJCSogdmRldi0+bm9fb2ZfdnBhdGg7CisKKwlpbmZvLT5uX3N0YXRzID0gU1RBVF9MRU47Cit9CisKKy8qKgorICogdnhnZV9ldGh0b29sX2dyZWdzIC0gZHVtcHMgdGhlIGVudGlyZSBzcGFjZSBvZiBUaXRhbiBpbnRvIHRoZSBidWZmZXIuCisgKiBAZGV2OiBkZXZpY2UgcG9pbnRlci4KKyAqIEByZWdzOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBwYXJhbWV0ZXJzIGdpdmVuIGJ5IGV0aHRvb2wgZm9yCisgKiBkdW1waW5nIHRoZSByZWdpc3RlcnMuCisgKiBAcmVnX3NwYWNlOiBUaGUgaW5wdXQgYXJndW1uZXQgaW50byB3aGljaCBhbGwgdGhlIHJlZ2lzdGVycyBhcmUgZHVtcGVkLgorICoKKyAqIER1bXBzIHRoZSB2cGF0aCByZWdpc3RlciBzcGFjZSBvZiBUaXRhbiBOSUMgaW50byB0aGUgdXNlciBnaXZlbgorICogYnVmZmVyIGFyZWEuCisgKi8KK3N0YXRpYyB2b2lkIHZ4Z2VfZXRodG9vbF9ncmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqc3BhY2UpCit7CisJaW50IGluZGV4LCBvZmZzZXQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJdTY0IHJlZzsKKwl1OCAqcmVnX3NwYWNlID0gKHU4ICopIHNwYWNlOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopCisJCQkJCXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworCXJlZ3MtPmxlbiA9IHNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcpICogdmRldi0+bm9fb2ZfdnBhdGg7CisJcmVncy0+dmVyc2lvbiA9IHZkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdmRldi0+bm9fb2ZfdnBhdGg7IGluZGV4KyspIHsKKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnKTsKKwkJCQlvZmZzZXQgKz0gOCkgeworCQkJc3RhdHVzID0gdnhnZV9od19tZ210X3JlZ19yZWFkKGhsZGV2LAorCQkJCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBhdGgsCisJCQkJCXZkZXYtPnZwYXRoc1tpbmRleF0uZGV2aWNlX2lkLAorCQkJCQlvZmZzZXQsICZyZWcpOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkiJXM6JWQgR2V0dGluZyByZWcgZHVtcCBGYWlsZWQiLAorCQkJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCW1lbWNweSgocmVnX3NwYWNlICsgb2Zmc2V0KSwgJnJlZywgOCk7CisJCX0KKwl9Cit9CisKKy8qKgorICogdnhnZV9ldGh0b29sX2lkbmljIC0gVG8gcGh5c2ljYWxseSBpZGVudGlmeSB0aGUgbmljIG9uIHRoZSBzeXN0ZW0uCisgKiBAZGV2IDogZGV2aWNlIHBvaW50ZXIuCisgKiBAaWQgOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBpZGVudGlmaWNhdGlvbiBwYXJhbWV0ZXJzIGdpdmVuIGJ5CisgKiBldGh0b29sLgorICoKKyAqIFVzZWQgdG8gcGh5c2ljYWxseSBpZGVudGlmeSB0aGUgTklDIG9uIHRoZSBzeXN0ZW0uCisgKiBUaGUgTGluayBMRUQgd2lsbCBibGluayBmb3IgYSB0aW1lIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKyAqIFJldHVybiB2YWx1ZToKKyAqIDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9pZG5pYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikKKwkJCXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworCXZ4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkKGhsZGV2LCBWWEdFX0ZMSUNLRVJfT04pOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgPyAoZGF0YSAqIEhaKSA6IFZYR0VfTUFYX0ZMSUNLRVJfVElNRSk7CisJdnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoaGxkZXYsIFZYR0VfRkxJQ0tFUl9PRkYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnhnZV9ldGh0b29sX2dldHBhdXNlX2RhdGEgLSBQYXVzZSBmcmFtZSBmcmFtZSBnZW5lcmF0aW9uIGFuZCByZWNlcHRpb24uCisgKiBAZGV2IDogZGV2aWNlIHBvaW50ZXIuCisgKiBAZXAgOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBwYXVzZSBwYXJhbWV0ZXJzIGdpdmVuIGJ5IGV0aHRvb2wuCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJldHVybnMgdGhlIFBhdXNlIGZyYW1lIGdlbmVyYXRpb24gYW5kIHJlY2VwdGlvbiBjYXBhYmlsaXR5IG9mIHRoZSBOSUMuCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgdm9pZAorICovCitzdGF0aWMgdm9pZCB2eGdlX2V0aHRvb2xfZ2V0cGF1c2VfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcCkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikKKwkJCXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworCXZ4Z2VfaHdfZGV2aWNlX2dldHBhdXNlX2RhdGEoaGxkZXYsIDAsICZlcC0+dHhfcGF1c2UsICZlcC0+cnhfcGF1c2UpOworfQorCisvKioKKyAqIHZ4Z2VfZXRodG9vbF9zZXRwYXVzZV9kYXRhIC0gIHNldC9yZXNldCBwYXVzZSBmcmFtZSBnZW5lcmF0aW9uLgorICogQGRldiA6IGRldmljZSBwb2ludGVyLgorICogQGVwIDogcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdpdGggcGF1c2UgcGFyYW1ldGVycyBnaXZlbiBieSBldGh0b29sLgorICogRGVzY3JpcHRpb246CisgKiBJdCBjYW4gYmUgdXNlZCB0byBzZXQgb3IgcmVzZXQgUGF1c2UgZnJhbWUgZ2VuZXJhdGlvbiBvciByZWNlcHRpb24KKyAqIHN1cHBvcnQgb2YgdGhlIE5JQy4KKyAqIFJldHVybiB2YWx1ZToKKyAqIGludCwgcmV0dXJucyAwIG9uIFN1Y2Nlc3MKKyAqLworc3RhdGljIGludCB2eGdlX2V0aHRvb2xfc2V0cGF1c2VfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcCkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikKKwkJCXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworCXZ4Z2VfaHdfZGV2aWNlX3NldHBhdXNlX2RhdGEoaGxkZXYsIDAsIGVwLT50eF9wYXVzZSwgZXAtPnJ4X3BhdXNlKTsKKworCXZkZXYtPmNvbmZpZy50eF9wYXVzZV9lbmFibGUgPSBlcC0+dHhfcGF1c2U7CisJdmRldi0+Y29uZmlnLnJ4X3BhdXNlX2VuYWJsZSA9IGVwLT5yeF9wYXVzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2eGdlX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKmVzdGF0cywgdTY0ICp0bXBfc3RhdHMpCit7CisJaW50IGosIGs7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzd3N0YXR1czsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGggPSBOVUxMOworCisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSB2ZGV2LT5kZXZoOworCXN0cnVjdCB2eGdlX2h3X3htYWNfc3RhdHMgKnhtYWNfc3RhdHM7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8gKnN3X3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvICpod19zdGF0czsKKworCXU2NCAqcHRyID0gdG1wX3N0YXRzOworCisJbWVtc2V0KHRtcF9zdGF0cywgMCwKKwkJdnhnZV9ldGh0b29sX2dldF9zc2V0X2NvdW50KGRldiwgRVRIX1NTX1NUQVRTKSAqIHNpemVvZih1NjQpKTsKKworCXhtYWNfc3RhdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9od194bWFjX3N0YXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHhtYWNfc3RhdHMgPT0gTlVMTCkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiAlZCBNZW1vcnkgQWxsb2NhdGlvbiBmYWlsZWQgZm9yIHhtYWNfc3RhdHMiLAorCQkJCSBfX2Z1bmNfXywgX19MSU5FX18pOworCQlyZXR1cm47CisJfQorCisJc3dfc3RhdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfaW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHN3X3N0YXRzID09IE5VTEwpIHsKKwkJa2ZyZWUoeG1hY19zdGF0cyk7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6ICVkIE1lbW9yeSBBbGxvY2F0aW9uIGZhaWxlZCBmb3Igc3dfc3RhdHMiLAorCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJcmV0dXJuOworCX0KKworCWh3X3N0YXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2h3X2luZm8pLAorCQkJCUdGUF9LRVJORUwpOworCWlmIChod19zdGF0cyA9PSBOVUxMKSB7CisJCWtmcmVlKHhtYWNfc3RhdHMpOworCQlrZnJlZShzd19zdGF0cyk7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6ICVkIE1lbW9yeSBBbGxvY2F0aW9uIGZhaWxlZCBmb3IgaHdfc3RhdHMiLAorCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJcmV0dXJuOworCX0KKworCSpwdHIrKyA9IDA7CisJc3RhdHVzID0gdnhnZV9od19kZXZpY2VfeG1hY19zdGF0c19nZXQoaGxkZXYsIHhtYWNfc3RhdHMpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTikgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlcyA6ICVkIEZhaWx1cmUgaW4gZ2V0dGluZyB4bWFjIHN0YXRzIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQl9CisJfQorCXN3c3RhdHVzID0gdnhnZV9od19kcml2ZXJfc3RhdHNfZ2V0KGhsZGV2LCBzd19zdGF0cyk7CisJaWYgKHN3c3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogJWQgRmFpbHVyZSBpbiBnZXR0aW5nIHN3IHN0YXRzIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJfQorCisJc3RhdHVzID0gdnhnZV9od19kZXZpY2Vfc3RhdHNfZ2V0KGhsZGV2LCBod19zdGF0cyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6ICVkIGh3X3N0YXRzX2dldCBlcnJvciIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJfQorCisJZm9yIChrID0gMDsgayA8IHZkZXYtPm5vX29mX3ZwYXRoOyBrKyspIHsKKwkJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyAqdnBhdGhfaW5mbzsKKworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNba107CisJCWogPSB2cGF0aC0+ZGV2aWNlX2lkOworCQl2cGF0aF9pbmZvID0gaHdfc3RhdHMtPnZwYXRoX2luZm9bal07CisJCWlmICghdnBhdGhfaW5mbykgeworCQkJbWVtc2V0KHB0ciwgMCwgKFZYR0VfSFdfVlBBVEhfVFhfU1RBVFNfTEVOICsKKwkJCQlWWEdFX0hXX1ZQQVRIX1JYX1NUQVRTX0xFTikgKiBzaXplb2YodTY0KSk7CisJCQlwdHIgKz0gKFZYR0VfSFdfVlBBVEhfVFhfU1RBVFNfTEVOICsKKwkJCQlWWEdFX0hXX1ZQQVRIX1JYX1NUQVRTX0xFTik7CisJCQljb250aW51ZTsKKwkJfQorCisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3R0bF9ldGhfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdHRsX2V0aF9vY3RldHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X2RhdGFfb2N0ZXRzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9tY2FzdF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9iY2FzdF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF91Y2FzdF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF90YWdnZWRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdmxkX2lwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF92bGRfaXBfb2N0ZXRzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9pY21wOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF90Y3A7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3JzdF90Y3A7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3VkcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdW5rbm93bl9wcm90b2NvbDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfbG9zdF9pcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfcGFyc2VfZXJyb3I7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3RjcF9vZmZsb2FkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9yZXR4X3RjcF9vZmZsb2FkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9sb3N0X2lwX29mZmxvYWQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF9ldGhfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdmxkX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X29mZmxvYWRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsX2V0aF9vY3RldHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2RhdGFfb2N0ZXRzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9vZmZsb2FkX29jdGV0czsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdmxkX21jYXN0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3ZsZF9iY2FzdF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9hY2NlcHRlZF91Y2FzdF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9hY2NlcHRlZF9udWNhc3RfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdGFnZ2VkX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2xvbmdfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdXNpemVkX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X29zaXplZF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9mcmFnX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2phYmJlcl9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfNjRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzY1XzEyN19mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfMTI4XzI1NV9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfMjU2XzUxMV9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfNTEyXzEwMjNfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzEwMjRfMTUxOF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfMTUxOV80MDk1X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF80MDk2XzgxOTFfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzgxOTJfbWF4X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF9ndF9tYXhfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfaXA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2FjY2VwdGVkX2lwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9pcF9vY3RldHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2Vycl9pcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfaWNtcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdGNwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF91ZHA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2Vycl90Y3A7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2xvc3RfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfbG9zdF9pcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfbG9zdF9pcF9vZmZsb2FkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF92YXJpb3VzX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3NsZWVwX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3JlZF9kaXNjYXJkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9xdWV1ZV9mdWxsX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X21wYV9va19mcm1zOworCX0KKwkqcHRyKysgPSAwOworCWZvciAoayA9IDA7IGsgPCB2ZGV2LT5tYXhfY29uZmlnX3BvcnQ7IGsrKykgeworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnR4X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10udHhfZGF0YV9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10udHhfbWNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS50eF9iY2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnR4X2Rpc2NhcmRlZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnR4X2Vycm9yZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS5yeF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnJ4X2RhdGFfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnJ4X21jYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10ucnhfYmNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS5yeF9kaXNjYXJkZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS5yeF9lcnJvcmVkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10ucnhfdW5rbm93bl9zbG93X3Byb3RvX2ZybXM7CisJfQorCSpwdHIrKyA9IDA7CisJZm9yIChrID0gMDsgayA8IHZkZXYtPm1heF9jb25maWdfcG9ydDsgaysrKSB7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdHRsX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdHRsX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9kYXRhX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9tY2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X2JjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdWNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF90YWdnZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF92bGRfaXA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdmxkX2lwX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9pY21wOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3RjcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9yc3RfdGNwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3VkcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9wYXJzZV9lcnJvcjsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF91bmtub3duX3Byb3RvY29sOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3BhdXNlX2N0cmxfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9tYXJrZXJfcGR1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfbGFjcGR1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfZHJvcF9pcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9tYXJrZXJfcmVzcF9wZHVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF94Z21paV9jaGFyMl9tYXRjaDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF94Z21paV9jaGFyMV9tYXRjaDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF94Z21paV9jb2x1bW4yX21hdGNoOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3hnbWlpX2NvbHVtbjFfbWF0Y2g7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfYW55X2Vycl9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X2Ryb3BfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF92bGRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9vZmZsb2FkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9kYXRhX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9vZmZsb2FkX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF92bGRfbWNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF92bGRfYmNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9hY2NlcHRlZF91Y2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2FjY2VwdGVkX251Y2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3RhZ2dlZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2xvbmdfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF91c2l6ZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9vc2l6ZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9mcmFnX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfamFiYmVyX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzY0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzY1XzEyN19mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF8xMjhfMjU1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzI1Nl81MTFfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfNTEyXzEwMjNfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfMTAyNF8xNTE4X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzE1MTlfNDA5NV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF80MDk2XzgxOTFfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfODE5Ml9tYXhfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfZ3RfbWF4X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfaXA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfYWNjZXB0ZWRfaXA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfaXBfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2Vycl9pcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9pY21wOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3RjcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF91ZHA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZXJyX3RjcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9wYXVzZV9jb3VudDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9wYXVzZV9jdHJsX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdW5zdXBfY3RybF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2Zjc19lcnJfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9pbl9ybmdfbGVuX2Vycl9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X291dF9ybmdfbGVuX2Vycl9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2Ryb3BfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9kaXNjYXJkZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9kcm9wX2lwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2Ryb3BfdWRwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X21hcmtlcl9wZHVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9sYWNwZHVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF91bmtub3duX3BkdV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X21hcmtlcl9yZXNwX3BkdV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2Zjc19kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2lsbGVnYWxfcGR1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfc3dpdGNoX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfbGVuX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfcnBhX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfbDJfbWdtdF9kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3J0c19kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3RyYXNoX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfYnVmZl9mdWxsX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfcmVkX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfeGdtaWlfY3RybF9lcnJfY250OworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3hnbWlpX2RhdGFfZXJyX2NudDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF94Z21paV9jaGFyMV9tYXRjaDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF94Z21paV9lcnJfc3ltOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3hnbWlpX2NvbHVtbjFfbWF0Y2g7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfeGdtaWlfY2hhcjJfbWF0Y2g7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfbG9jYWxfZmF1bHQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfeGdtaWlfY29sdW1uMl9tYXRjaDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9qZXR0aXNvbjsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9yZW1vdGVfZmF1bHQ7CisJfQorCisJKnB0cisrID0gMDsKKwlmb3IgKGsgPSAwOyBrIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGsrKykgeworCQlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19pbmZvICp2cGF0aF9pbmZvOworCisJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1trXTsKKwkJaiA9IHZwYXRoLT5kZXZpY2VfaWQ7CisJCXZwYXRoX2luZm8gPSAoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbyAqKQorCQkJCSZzd19zdGF0cy0+dnBhdGhfaW5mb1tqXTsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+c29mdF9yZXNldF9jbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLnVua25vd25fYWxhcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5uZXR3b3JrX3N1c3RhaW5lZF9mYXVsdDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMubmV0d29ya19zdXN0YWluZWRfb2s7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLmtkZmNjdGxfZmlmbzBfb3ZlcndyaXRlOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX3BvaXNvbjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMua2RmY2N0bF9maWZvMF9kbWFfZXJyb3I7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLmRibGdlbl9maWZvMF9vdmVyZmxvdzsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMuc3RhdHNiX3BpZl9jaGFpbl9lcnJvcjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMuc3RhdHNiX2Ryb3BfdGltZW91dDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMudGFyZ2V0X2lsbGVnYWxfYWNjZXNzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5pbmlfc2Vycl9kZXQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLnByY19yaW5nX2J1bXBzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5wcmNfcnhkY21fc2NfZXJyOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5wcmNfcnhkY21fc2NfYWJvcnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLnByY19xdWFudGFfc2l6ZV9lcnI7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJpbmdfc3RhdHMuY29tbW9uX3N0YXRzLmZ1bGxfY250OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yaW5nX3N0YXRzLmNvbW1vbl9zdGF0cy51c2FnZV9jbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJpbmdfc3RhdHMuY29tbW9uX3N0YXRzLnVzYWdlX21heDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cmluZ19zdGF0cy5jb21tb25fc3RhdHMuCisJCQkJCXJlc2VydmVfZnJlZV9zd2Fwc19jbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJpbmdfc3RhdHMuY29tbW9uX3N0YXRzLnRvdGFsX2NvbXBsX2NudDsKKwkJZm9yIChqID0gMDsgaiA8IFZYR0VfSFdfRFRSX01BWF9UX0NPREU7IGorKykKKwkJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJpbmdfc3RhdHMucnhkX3RfY29kZV9lcnJfY250W2pdOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5maWZvX3N0YXRzLmNvbW1vbl9zdGF0cy5mdWxsX2NudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+Zmlmb19zdGF0cy5jb21tb25fc3RhdHMudXNhZ2VfY250OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5maWZvX3N0YXRzLmNvbW1vbl9zdGF0cy51c2FnZV9tYXg7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmZpZm9fc3RhdHMuY29tbW9uX3N0YXRzLgorCQkJCQkJcmVzZXJ2ZV9mcmVlX3N3YXBzX2NudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+Zmlmb19zdGF0cy5jb21tb25fc3RhdHMudG90YWxfY29tcGxfY250OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5maWZvX3N0YXRzLnRvdGFsX3Bvc3RzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5maWZvX3N0YXRzLnRvdGFsX2J1ZmZlcnM7CisJCWZvciAoaiA9IDA7IGogPCBWWEdFX0hXX0RUUl9NQVhfVF9DT0RFOyBqKyspCisJCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5maWZvX3N0YXRzLnR4ZF90X2NvZGVfZXJyX2NudFtqXTsKKwl9CisKKwkqcHRyKysgPSAwOworCWZvciAoayA9IDA7IGsgPCB2ZGV2LT5ub19vZl92cGF0aDsgaysrKSB7CisJCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8gKnZwYXRoX2luZm87CisJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1trXTsKKwkJaiA9IHZwYXRoLT5kZXZpY2VfaWQ7CisJCXZwYXRoX2luZm8gPSBod19zdGF0cy0+dnBhdGhfaW5mb1tqXTsKKwkJaWYgKCF2cGF0aF9pbmZvKSB7CisJCQltZW1zZXQocHRyLCAwLCBWWEdFX0hXX1ZQQVRIX1NUQVRTX0xFTiAqIHNpemVvZih1NjQpKTsKKwkJCXB0ciArPSBWWEdFX0hXX1ZQQVRIX1NUQVRTX0xFTjsKKwkJCWNvbnRpbnVlOworCQl9CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmluaV9udW1fbXdyX3NlbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmluaV9udW1fbXJkX3NlbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmluaV9udW1fY3BsX3JjdmQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmluaV9udW1fbXdyX2J5dGVfc2VudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+aW5pX251bV9jcGxfYnl0ZV9yY3ZkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT53cmNyZHRhcmJfeG9mZjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cmRjcmR0YXJiX3hvZmY7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnZwYXRoX2dlbnN0YXRzX2NvdW50MDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dnBhdGhfZ2Vuc3RhdHNfY291bnQxOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT52cGF0aF9nZW5zdGF0c19jb3VudDI7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnZwYXRoX2dlbnN0YXRzX2NvdW50MzsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ0OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT52cGF0aF9nZW5zdGF0c19jb3VudDU7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnByb2dfZXZlbnRfdm51bTA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnByb2dfZXZlbnRfdm51bTE7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnByb2dfZXZlbnRfdm51bTI7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnByb2dfZXZlbnRfdm51bTM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X211bHRpX2Nhc3RfZnJhbWVfZGlzY2FyZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfZnJtX3RyYW5zZmVycmVkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeGRfcmV0dXJuZWQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X21wYV9sZW5fZmFpbF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9tcGFfbXJrX2ZhaWxfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfbXBhX2NyY19mYWlsX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3Blcm1pdHRlZF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF92cF9yZXNldF9kaXNjYXJkZWRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfd29sX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zOworCX0KKworCSpwdHIrKyA9IDA7CisJKnB0cisrID0gdmRldi0+c3RhdHMudnBhdGhzX29wZW47CisJKnB0cisrID0gdmRldi0+c3RhdHMudnBhdGhfb3Blbl9mYWlsOworCSpwdHIrKyA9IHZkZXYtPnN0YXRzLmxpbmtfdXA7CisJKnB0cisrID0gdmRldi0+c3RhdHMubGlua19kb3duOworCisJZm9yIChrID0gMDsgayA8IHZkZXYtPm5vX29mX3ZwYXRoOyBrKyspIHsKKwkJKnB0ciArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eF9mcm1zOworCQkqKHB0ciArIDEpICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnR4X2Vycm9yczsKKwkJKihwdHIgKyAyKSArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eF9ieXRlczsKKwkJKihwdHIgKyAzKSArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eGRfbm90X2ZyZWU7CisJCSoocHRyICsgNCkgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhkX291dF9vZl9kZXNjOworCQkqKHB0ciArIDUpICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X2ZybXM7CisJCSoocHRyICsgNikgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfZXJyb3JzOworCQkqKHB0ciArIDcpICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X2J5dGVzOworCQkqKHB0ciArIDgpICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X21jYXN0OworCQkqKHB0ciArIDkpICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnBjaV9tYXBfZmFpbCArCisJCQkJdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucGNpX21hcF9mYWlsOworCQkqKHB0ciArIDEwKSArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5za2JfYWxsb2NfZmFpbDsKKwl9CisKKwlwdHIgKz0gMTI7CisKKwlrZnJlZSh4bWFjX3N0YXRzKTsKKwlrZnJlZShzd19zdGF0cyk7CisJa2ZyZWUoaHdfc3RhdHMpOworfQorCitzdGF0aWMgdm9pZCB2eGdlX2V0aHRvb2xfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQoreworCWludCBzdGF0X3NpemUgPSAwOworCWludCBpLCBqOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQl2eGdlX2FkZF9zdHJpbmcoIlZQQVRIIFNUQVRJU1RJQ1Mlc1x0XHRcdCIsCisJCQkmc3RhdF9zaXplLCBkYXRhLCAiIik7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3R0bF9ldGhfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90dGxfZXRoX29jdGVjdHNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2RhdGFfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9tY2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2JjYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdWNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90YWdnZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF92bGRfaXBfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdmxkX2lwX29jdGVjdHNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2ljbXBfJWRcdFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90Y3BfJWRcdFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9yc3RfdGNwXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3VkcF8lZFx0XHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3Vua25vd25fcHJvdG9fJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfbG9zdF9pcF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9wYXJzZV9lcnJvcl8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90Y3Bfb2ZmbG9hZF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9yZXR4X3RjcF9vZmZsb2FkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9sb3N0X2lwX29mZmxvYWRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF9ldGhfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF92bGRfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9vZmZsb2FkX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsX2V0aF9vY3RlY3RzXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9kYXRhX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfb2ZmbG9hZF9vY3RlY3RzXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF92bGRfbWNhc3RfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdmxkX2JjYXN0X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2FjY2VwdGVkX3VjYXN0X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2FjY2VwdGVkX251Y2FzdF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90YWdnZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sb25nX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdXNpemVkX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfb3NpemVkX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZnJhZ19mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2phYmJlcl9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF82NF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF82NV8xMjdfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzEyOF8yNTVfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzI1Nl81MTFfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzUxMl8xMDIzX2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF8xMDI0XzE1MThfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzE1MTlfNDA5NV9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfNDA5Nl84MTkxX2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF84MTkyX21heF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfZ3RfbWF4X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2lwJWRcdFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9hY2NlcHRlZF9pcF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9pcF9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Vycl9pcF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9pY21wXyVkXHRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdGNwXyVkXHRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdWRwXyVkXHRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZXJyX3RjcF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sb3N0X2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbG9zdF9pcF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sb3N0X2lwX29mZmxvYWRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3ZhcmlvdXNfZGlzY2FyZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfc2xlZXBfZGlzY2FyZF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9yZWRfZGlzY2FyZF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9xdWV1ZV9mdWxsX2Rpc2NhcmRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X21wYV9va19mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCX0KKworCQl2eGdlX2FkZF9zdHJpbmcoIlxuQUdHUiBTVEFUSVNUSUNTJXNcdFx0XHRcdCIsCisJCQkmc3RhdF9zaXplLCBkYXRhLCAiIik7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5tYXhfY29uZmlnX3BvcnQ7IGkrKykgeworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9mcm1zXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9kYXRhX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9tY2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfYmNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2Rpc2NhcmRlZF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2Vycm9yZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2ZybXNfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2RhdGFfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X21jYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9iY2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZGlzY2FyZGVkX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZXJyb3JlZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdW5rbm93bl9zbG93X3Byb3RvX2ZybXNfJWRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCX0KKworCQl2eGdlX2FkZF9zdHJpbmcoIlxuUE9SVCBTVEFUSVNUSUNTJXNcdFx0XHRcdCIsCisJCQkmc3RhdF9zaXplLCBkYXRhLCAiIik7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5tYXhfY29uZmlnX3BvcnQ7IGkrKykgeworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90dGxfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3R0bF9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfZGF0YV9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfbWNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2JjYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF91Y2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdGFnZ2VkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF92bGRfaXBfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF92bGRfaXBfb2N0ZWN0c18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9pY21wXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90Y3BfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3JzdF90Y3BfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF91ZHBfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3BhcnNlX2Vycm9yXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdW5rbm93bl9wcm90b2NvbF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9wYXVzZV9jdHJsX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfbWFya2VyX3BkdV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2xhY3BkdV9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfZHJvcF9pcF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X21hcmtlcl9yZXNwX3BkdV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3hnbWlpX2NoYXIyX21hdGNoXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3hnbWlpX2NoYXIxX21hdGNoXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3hnbWlpX2NvbHVtbjJfbWF0Y2hfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfeGdtaWlfY29sdW1uMV9tYXRjaF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9hbnlfZXJyX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9kcm9wX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3ZsZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfb2ZmbG9hZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9kYXRhX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9vZmZsb2FkX29jdGVjdHNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdmxkX21jYXN0X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdmxkX2JjYXN0X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfYWNjZXB0ZWRfdWNhc3RfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9hY2NlcHRlZF9udWNhc3RfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90YWdnZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2xvbmdfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3VzaXplZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfb3NpemVkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9mcmFnX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9qYWJiZXJfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF82NF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzY1XzEyN19mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF8xMjhfMjU1X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzI1Nl81MTFfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfNTEyXzEwMjNfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfMTAyNF8xNTE4X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzE1MTlfNDA5NV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF80MDk2XzgxOTFfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfODE5Ml9tYXhfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfZ3RfbWF4X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfaXBfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2FjY2VwdGVkX2lwXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfaXBfb2N0ZXRzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZXJyX2lwXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfaWNtcF8lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdGNwXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF91ZHBfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Vycl90Y3BfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9wYXVzZV9jb3VudF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3BhdXNlX2N0cmxfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF91bnN1cF9jdHJsX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZmNzX2Vycl9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfaW5fcm5nX2xlbl9lcnJfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9vdXRfcm5nX2xlbl9lcnJfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9kcm9wX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9kaXNjYXJkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9kcm9wX2lwXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZHJvcF91ZHBfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9tYXJrZXJfcGR1X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbGFjcGR1X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF91bmtub3duX3BkdV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X21hcmtlcl9yZXNwX3BkdV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Zjc19kaXNjYXJkXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfaWxsZWdhbF9wZHVfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9zd2l0Y2hfZGlzY2FyZF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sZW5fZGlzY2FyZF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3JwYV9kaXNjYXJkXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbDJfbWdtdF9kaXNjYXJkXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3J0c19kaXNjYXJkXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHJhc2hfZGlzY2FyZF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2J1ZmZfZnVsbF9kaXNjYXJkXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3JlZF9kaXNjYXJkXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfeGdtaWlfY3RybF9lcnJfY250XyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3hnbWlpX2RhdGFfZXJyX2NudF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF94Z21paV9jaGFyMV9tYXRjaF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF94Z21paV9lcnJfc3ltXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfeGdtaWlfY29sdW1uMV9tYXRjaF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF94Z21paV9jaGFyMl9tYXRjaF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sb2NhbF9mYXVsdF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3hnbWlpX2NvbHVtbjJfbWF0Y2hfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfamV0dGlzb25fJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9yZW1vdGVfZmF1bHRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQl9CisKKwkJdnhnZV9hZGRfc3RyaW5nKCJcbiBTT0ZUV0FSRSBTVEFUSVNUSUNTJXNcdFx0XHQiLAorCQkJJnN0YXRfc2l6ZSwgZGF0YSwgIiIpOworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJdnhnZV9hZGRfc3RyaW5nKCJzb2Z0X3Jlc2V0X2NudF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInVua25vd25fYWxhcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygibmV0d29ya19zdXN0YWluZWRfZmF1bHRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygibmV0d29ya19zdXN0YWluZWRfb2tfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygia2RmY2N0bF9maWZvMF9vdmVyd3JpdGVfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygia2RmY2N0bF9maWZvMF9wb2lzb25fJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygia2RmY2N0bF9maWZvMF9kbWFfZXJyb3JfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiZGJsZ2VuX2ZpZm8wX292ZXJmbG93XyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInN0YXRzYl9waWZfY2hhaW5fZXJyb3JfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygic3RhdHNiX2Ryb3BfdGltZW91dF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0YXJnZXRfaWxsZWdhbF9hY2Nlc3NfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiaW5pX3NlcnJfZGV0XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicHJjX3JpbmdfYnVtcHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJwcmNfcnhkY21fc2NfZXJyXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicHJjX3J4ZGNtX3NjX2Fib3J0XyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInByY19xdWFudGFfc2l6ZV9lcnJfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicmluZ19mdWxsX2NudF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJpbmdfdXNhZ2VfY250XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicmluZ191c2FnZV9tYXhfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyaW5nX3Jlc2VydmVfZnJlZV9zd2Fwc19jbnRfJWRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJpbmdfdG90YWxfY29tcGxfY250XyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQlmb3IgKGogPSAwOyBqIDwgVlhHRV9IV19EVFJfTUFYX1RfQ09ERTsgaisrKQorCQkJCXZ4Z2VfYWRkX3N0cmluZygicnhkX3RfY29kZV9lcnJfY250JWRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaiwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImZpZm9fZnVsbF9jbnRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJmaWZvX3VzYWdlX2NudF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImZpZm9fdXNhZ2VfbWF4XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiZmlmb19yZXNlcnZlX2ZyZWVfc3dhcHNfY250XyVkXHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJmaWZvX3RvdGFsX2NvbXBsX2NudF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJmaWZvX3RvdGFsX3Bvc3RzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiZmlmb190b3RhbF9idWZmZXJzXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQlmb3IgKGogPSAwOyBqIDwgVlhHRV9IV19EVFJfTUFYX1RfQ09ERTsgaisrKQorCQkJCXZ4Z2VfYWRkX3N0cmluZygidHhkX3RfY29kZV9lcnJfY250JWRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaiwgaSk7CisJCX0KKworCQl2eGdlX2FkZF9zdHJpbmcoIlxuIEhBUkRXQVJFIFNUQVRJU1RJQ1Mlc1x0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgIiIpOworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJdnhnZV9hZGRfc3RyaW5nKCJpbmlfbnVtX213cl9zZW50XyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImluaV9udW1fbXJkX3NlbnRfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiaW5pX251bV9jcGxfcmN2ZF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJpbmlfbnVtX213cl9ieXRlX3NlbnRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImluaV9udW1fY3BsX2J5dGVfcmN2ZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygid3JjcmR0YXJiX3hvZmZfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicmRjcmR0YXJiX3hvZmZfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidnBhdGhfZ2Vuc3RhdHNfY291bnQwXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ2cGF0aF9nZW5zdGF0c19jb3VudDFfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInZwYXRoX2dlbnN0YXRzX2NvdW50Ml8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidnBhdGhfZ2Vuc3RhdHNfY291bnQzXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ2cGF0aF9nZW5zdGF0c19jb3VudDRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInZwYXRoX2dlbnN0YXRzX2NvdW50NV8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicHJvZ19ldmVudF92bnVtMF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJwcm9nX2V2ZW50X3ZudW0xXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInByb2dfZXZlbnRfdm51bTJfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicHJvZ19ldmVudF92bnVtM18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9tdWx0aV9jYXN0X2ZyYW1lX2Rpc2NhcmRfJWRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9mcm1fdHJhbnNmZXJyZWRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4ZF9yZXR1cm5lZF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9tcGFfbGVuX2ZhaWxfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbXBhX21ya19mYWlsX2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X21wYV9jcmNfZmFpbF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9wZXJtaXR0ZWRfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXNfJWRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF93b2xfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF92cF9yZXNldF9kaXNjYXJkZWRfZnJtc18lZFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCX0KKworCQltZW1jcHkoZGF0YSArIHN0YXRfc2l6ZSwgJmV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXMsCisJCQlzaXplb2YoZXRodG9vbF9kcml2ZXJfc3RhdHNfa2V5cykpOworCX0KK30KKworc3RhdGljIGludCB2eGdlX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcpICogdmRldi0+bm9fb2ZfdnBhdGg7Cit9CisKK3N0YXRpYyB1MzIgdnhnZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiB2ZGV2LT5yeF9jc3VtOworfQorCitzdGF0aWMgaW50IHZ4Z2Vfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGRhdGEpCisJCXZkZXYtPnJ4X2NzdW0gPSAxOworCWVsc2UKKwkJdmRldi0+cnhfY3N1bSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2eGdlX2V0aHRvb2xfb3Bfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlpZiAoZGF0YSkKKwkJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOworCWVsc2UKKwkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwlzd2l0Y2ggKHNzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIFZYR0VfVElUTEVfTEVOICsKKwkJCSh2ZGV2LT5ub19vZl92cGF0aCAqIFZYR0VfSFdfVlBBVEhfU1RBVFNfTEVOKSArCisJCQkodmRldi0+bWF4X2NvbmZpZ19wb3J0ICogVlhHRV9IV19BR0dSX1NUQVRTX0xFTikgKworCQkJKHZkZXYtPm1heF9jb25maWdfcG9ydCAqIFZYR0VfSFdfUE9SVF9TVEFUU19MRU4pICsKKwkJCSh2ZGV2LT5ub19vZl92cGF0aCAqIFZYR0VfSFdfVlBBVEhfVFhfU1RBVFNfTEVOKSArCisJCQkodmRldi0+bm9fb2ZfdnBhdGggKiBWWEdFX0hXX1ZQQVRIX1JYX1NUQVRTX0xFTikgKworCQkJKHZkZXYtPm5vX29mX3ZwYXRoICogVlhHRV9TV19TVEFUU19MRU4pICsKKwkJCURSSVZFUl9TVEFUX0xFTjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZ4Z2VfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwkJPSB2eGdlX2V0aHRvb2xfZ3NldCwKKwkuc2V0X3NldHRpbmdzCQk9IHZ4Z2VfZXRodG9vbF9zc2V0LAorCS5nZXRfZHJ2aW5mbwkJPSB2eGdlX2V0aHRvb2xfZ2RydmluZm8sCisJLmdldF9yZWdzX2xlbgkJPSB2eGdlX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncwkJPSB2eGdlX2V0aHRvb2xfZ3JlZ3MsCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9wYXVzZXBhcmFtCQk9IHZ4Z2VfZXRodG9vbF9nZXRwYXVzZV9kYXRhLAorCS5zZXRfcGF1c2VwYXJhbQkJPSB2eGdlX2V0aHRvb2xfc2V0cGF1c2VfZGF0YSwKKwkuZ2V0X3J4X2NzdW0JCT0gdnhnZV9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0JCT0gdnhnZV9zZXRfcnhfY3N1bSwKKwkuZ2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKKwkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28JCT0gdnhnZV9ldGh0b29sX29wX3NldF90c28sCisJLmdldF9zdHJpbmdzCQk9IHZ4Z2VfZXRodG9vbF9nZXRfc3RyaW5ncywKKwkucGh5c19pZAkJPSB2eGdlX2V0aHRvb2xfaWRuaWMsCisJLmdldF9zc2V0X2NvdW50CQk9IHZ4Z2VfZXRodG9vbF9nZXRfc3NldF9jb3VudCwKKwkuZ2V0X2V0aHRvb2xfc3RhdHMJPSB2eGdlX2dldF9ldGh0b29sX3N0YXRzLAorfTsKKwordm9pZCBpbml0aWFsaXplX2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhuZGV2LCAmdnhnZV9ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzNkZjBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuaApAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS1ldGh0b29sLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9WWEdFX0VUSFRPT0xfSAorI2RlZmluZSBfVlhHRV9FVEhUT09MX0gKKworI2luY2x1ZGUgInZ4Z2UtbWFpbi5oIgorCisvKiBFdGh0b29sIHJlbGF0ZWQgdmFyaWFibGVzIGFuZCBNYWNyb3MuICovCitzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCk7CisKK3N0YXRpYyBjaGFyIGV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0geworCXsiXG4gRFJJVkVSIFNUQVRJU1RJQ1MifSwKKwl7InZwYXRoc19vcGVuZWQifSwKKwl7InZwYXRoX29wZW5fZmFpbF9jbnQifSwKKwl7ImxpbmtfdXBfY250In0sCisJeyJsaW5rX2Rvd25fY250In0sCisJeyJ0eF9mcm1zIn0sCisJeyJ0eF9lcnJvcnMifSwKKwl7InR4X2J5dGVzIn0sCisJeyJ0eGRfbm90X2ZyZWUifSwKKwl7InR4ZF9vdXRfb2ZfZGVzYyJ9LAorCXsicnhfZnJtcyJ9LAorCXsicnhfZXJyb3JzIn0sCisJeyJyeF9ieXRlcyJ9LAorCXsicnhfbWNhc3QifSwKKwl7InBjaV9tYXBfZmFpbF9jbnQifSwKKwl7InNrYl9hbGxvY19mYWlsX2NudCJ9Cit9OworCisjZGVmaW5lIFZYR0VfVElUTEVfTEVOCQkJNQorI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1NUQVRTX0xFTiAJMjcKKyNkZWZpbmUgVlhHRV9IV19BR0dSX1NUQVRTX0xFTiAgCTEzCisjZGVmaW5lIFZYR0VfSFdfUE9SVF9TVEFUU19MRU4gIAk5NAorI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1RYX1NUQVRTX0xFTgkxOQorI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1JYX1NUQVRTX0xFTgk0MgorI2RlZmluZSBWWEdFX1NXX1NUQVRTX0xFTgkJNjAKKyNkZWZpbmUgVlhHRV9IV19TVEFUU19MRU4JKFZYR0VfSFdfVlBBVEhfU1RBVFNfTEVOICtcCisJCQkJVlhHRV9IV19BR0dSX1NUQVRTX0xFTiArXAorCQkJCVZYR0VfSFdfUE9SVF9TVEFUU19MRU4gK1wKKwkJCQlWWEdFX0hXX1ZQQVRIX1RYX1NUQVRTX0xFTiArXAorCQkJCVZYR0VfSFdfVlBBVEhfUlhfU1RBVFNfTEVOKQorCisjZGVmaW5lIERSSVZFUl9TVEFUX0xFTiAoc2l6ZW9mKGV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXMpL0VUSF9HU1RSSU5HX0xFTikKKyNkZWZpbmUgU1RBVF9MRU4gKFZYR0VfSFdfU1RBVFNfTEVOICsgRFJJVkVSX1NUQVRfTEVOICsgVlhHRV9TV19TVEFUU19MRU4pCisKKy8qIE1heGltdW0gZmxpY2tlciB0aW1lIG9mIGFkYXB0ZXIgTEVEICovCisjZGVmaW5lIFZYR0VfTUFYX0ZMSUNLRVJfVElNRSAoNjAgKiBIWikgLyogNjAgc2Vjb25kcyAqLworI2RlZmluZSBWWEdFX0ZMSUNLRVJfT04JCTEKKyNkZWZpbmUgVlhHRV9GTElDS0VSX09GRgkwCisKKyNkZWZpbmUgdnhnZV9hZGRfc3RyaW5nKGZtdCwgc2l6ZSwgYnVmLCAuLi4pIHtcCisJc25wcmludGYoYnVmICsgKnNpemUsIEVUSF9HU1RSSU5HX0xFTiwgZm10LCBfX1ZBX0FSR1NfXyk7IFwKKwkqc2l6ZSArPSBFVEhfR1NUUklOR19MRU47IFwKK30KKworI2VuZGlmIC8qX1ZYR0VfRVRIVE9PTF9IKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZWYxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCkBAIC0wLDAgKzEsNDUwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisqCisqIHZ4Z2UtbWFpbi5jOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworKiAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorKgorKiBUaGUgbW9kdWxlIGxvYWRhYmxlIHBhcmFtZXRlcnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgYW5kIGEgYnJpZWYKKyogZXhwbGFuYXRpb24gb2YgYWxsIHRoZSB2YXJpYWJsZXM6CisqIHZsYW5fdGFnX3N0cmlwOgorKglTdHJpcCBWTEFOIFRhZyBlbmFibGUvZGlzYWJsZS4gSW5zdHJ1Y3RzIHRoZSBkZXZpY2UgdG8gcmVtb3ZlCisqCXRoZSBWTEFOIHRhZyBmcm9tIGFsbCByZWNlaXZlZCB0YWdnZWQgZnJhbWVzIHRoYXQgYXJlIG5vdAorKglyZXBsaWNhdGVkIGF0IHRoZSBpbnRlcm5hbCBMMiBzd2l0Y2guCisqCQkwIC0gRG8gbm90IHN0cmlwIHRoZSBWTEFOIHRhZy4KKyoJCTEgLSBTdHJpcCB0aGUgVkxBTiB0YWcuCisqCisqIGFkZHJfbGVhcm5fZW46CisqCUVuYWJsZSBsZWFybmluZyB0aGUgbWFjIGFkZHJlc3Mgb2YgdGhlIGd1ZXN0IE9TIGludGVyZmFjZSBpbgorKglhIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LgorKgkJMCAtIERJU0FCTEUKKyoJCTEgLSBFTkFCTEUKKyoKKyogbWF4X2NvbmZpZ19wb3J0OgorKglNYXhpbXVtIG51bWJlciBvZiBwb3J0IHRvIGJlIHN1cHBvcnRlZC4KKyoJCU1JTiAtMSBhbmQgTUFYIC0gMgorKgorKiBtYXhfY29uZmlnX3ZwYXRoOgorKglUaGlzIGNvbmZpZ3VyZXMgdGhlIG1heGltdW0gbm8gb2YgVlBBVEggY29uZmlndXJlcyBmb3IgZWFjaAorKiAJZGV2aWNlIGZ1bmN0aW9uLgorKgkJTUlOIC0gMSBhbmQgTUFYIC0gMTcKKyoKKyogbWF4X2NvbmZpZ19kZXY6CisqCVRoaXMgY29uZmlndXJlcyBtYXhpbXVtIG5vIG9mIERldmljZSBmdW5jdGlvbiB0byBiZSBlbmFibGVkLgorKgkJTUlOIC0gMSBhbmQgTUFYIC0gMTcKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgInZ4Z2UtbWFpbi5oIgorI2luY2x1ZGUgInZ4Z2UtcmVnLmgiCisKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTmV0ZXJpb24ncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08iCisJIlZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyIik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2eGdlX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9TMklPLCBQQ0lfREVWSUNFX0lEX1RJVEFOX1dJTiwgUENJX0FOWV9JRCwKKwlQQ0lfQU5ZX0lEfSwKKwl7UENJX1ZFTkRPUl9JRF9TMklPLCBQQ0lfREVWSUNFX0lEX1RJVEFOX1VOSSwgUENJX0FOWV9JRCwKKwlQQ0lfQU5ZX0lEfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2eGdlX2lkX3RhYmxlKTsKKworVlhHRV9NT0RVTEVfUEFSQU1fSU5UKHZsYW5fdGFnX3N0cmlwLCBWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpOworVlhHRV9NT0RVTEVfUEFSQU1fSU5UKGFkZHJfbGVhcm5fZW4sIFZYR0VfSFdfTUFDX0FERFJfTEVBUk5fREVGQVVMVCk7CitWWEdFX01PRFVMRV9QQVJBTV9JTlQobWF4X2NvbmZpZ19wb3J0LCBWWEdFX01BWF9DT05GSUdfUE9SVCk7CitWWEdFX01PRFVMRV9QQVJBTV9JTlQobWF4X2NvbmZpZ192cGF0aCwgVlhHRV9VU0VfREVGQVVMVCk7CitWWEdFX01PRFVMRV9QQVJBTV9JTlQobWF4X21hY192cGF0aCwgVlhHRV9NQVhfTUFDX0FERFJfQ09VTlQpOworVlhHRV9NT0RVTEVfUEFSQU1fSU5UKG1heF9jb25maWdfZGV2LCBWWEdFX01BWF9DT05GSUdfREVWKTsKKworc3RhdGljIHUxNiB2cGF0aF9zZWxlY3RvcltWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXSA9CisJCXswLCAxLCAzLCAzLCA3LCA3LCA3LCA3LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDMxfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYndfcGVyY2VudGFnZVtWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXSA9CisJe1swIC4uLihWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTIC0gMSldID0gMHhGRn07Cittb2R1bGVfcGFyYW1fYXJyYXkoYndfcGVyY2VudGFnZSwgdWludCwgTlVMTCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgdnhnZV9kcnZfY29uZmlnICpkcml2ZXJfY29uZmlnOworCitzdGF0aWMgaW5saW5lIGludCBpc192eGdlX2NhcmRfdXAoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJcmV0dXJuIHRlc3RfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVlhHRV9DT01QTEVURV9WUEFUSF9UWChzdHJ1Y3QgdnhnZV9maWZvICpmaWZvKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXN0cnVjdCBza19idWZmICpza2JfcHRyID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnRlbXAsICpoZWFkLCAqc2tiOworCisJaWYgKHNwaW5fdHJ5bG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFncykpIHsKKwkJdnhnZV9od192cGF0aF9wb2xsX3R4KGZpZm8tPmhhbmRsZSwgKHZvaWQgKiopJnNrYl9wdHIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJfQorCS8qIGZyZWUgU0tCcyAqLworCWhlYWQgPSBza2JfcHRyOworCXdoaWxlIChoZWFkKSB7CisJCXNrYiA9IGhlYWQ7CisJCXRlbXAgPSAoc3RydWN0IHNrX2J1ZmYgKiopJnNrYi0+Y2I7CisJCWhlYWQgPSAqdGVtcDsKKwkJKnRlbXAgPSBOVUxMOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIFZYR0VfQ09NUExFVEVfQUxMX1RYKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBpOworCisJLyogQ29tcGxldGUgYWxsIHRyYW5zbWl0cyAqLworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQlWWEdFX0NPTVBMRVRFX1ZQQVRIX1RYKCZ2ZGV2LT52cGF0aHNbaV0uZmlmbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBWWEdFX0NPTVBMRVRFX0FMTF9SWChzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nOworCisJLyogQ29tcGxldGUgYWxsIHJlY2VpdmVzKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQlyaW5nID0gJnZkZXYtPnZwYXRoc1tpXS5yaW5nOworCQl2eGdlX2h3X3ZwYXRoX3BvbGxfcngocmluZy0+aGFuZGxlKTsKKwl9Cit9CisKKy8qCisgKiBNdWx0aVEgbWFuaXB1bGF0aW9uIGhlbHBlciBmdW5jdGlvbnMKKyAqLwordm9pZCB2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2ZGV2LT5uZGV2OworCisJaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlICE9IFRYX01VTFRJUV9TVEVFUklORykgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLnF1ZXVlX3N0YXRlID0gVlBBVEhfUVVFVUVfU1RPUDsKKwl9CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7Cit9CisKK3ZvaWQgdnhnZV9zdG9wX3R4X3F1ZXVlKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8pCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpZm8tPm5kZXY7CisKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBOVUxMOworCWlmIChmaWZvLT50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykKKwkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGZpZm8tPmRyaXZlcl9pZCk7CisJZWxzZSB7CisJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKKwkJZmlmby0+cXVldWVfc3RhdGUgPSBWUEFUSF9RVUVVRV9TVE9QOworCX0KKworCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKK30KKwordm9pZCB2eGdlX3N0YXJ0X2FsbF90eF9xdWV1ZShzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmRldi0+bmRldjsKKworCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSAhPSBUWF9NVUxUSVFfU1RFRVJJTkcpIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5xdWV1ZV9zdGF0ZSA9IFZQQVRIX1FVRVVFX1NUQVJUOworCX0KKwluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHZ4Z2Vfd2FrZV9hbGxfdHhfcXVldWUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZkZXYtPm5kZXY7CisKKwlpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgIT0gVFhfTVVMVElRX1NURUVSSU5HKSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8ucXVldWVfc3RhdGUgPSBWUEFUSF9RVUVVRV9TVEFSVDsKKwl9CisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGRldik7Cit9CisKK3ZvaWQgdnhnZV93YWtlX3R4X3F1ZXVlKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8sIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZpZm8tPm5kZXY7CisKKwlpbnQgdnBhdGhfbm8gPSBmaWZvLT5kcml2ZXJfaWQ7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gTlVMTDsKKwlpZiAoZmlmby0+dHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9NVUxUSVFfU1RFRVJJTkcpIHsKKwkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHZwYXRoX25vKTsKKwkJaWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkKKwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKKwl9IGVsc2UgeworCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7CisJCWlmIChmaWZvLT5xdWV1ZV9zdGF0ZSA9PSBWUEFUSF9RVUVVRV9TVE9QKQorCQkJaWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgeworCQkJCWZpZm8tPnF1ZXVlX3N0YXRlID0gVlBBVEhfUVVFVUVfU1RBUlQ7CisJCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOworCQkJfQorCX0KK30KKworLyoKKyAqIHZ4Z2VfY2FsbGJhY2tfbGlua191cAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBpbnRlcnJ1cHQgY29udGV4dCB0byBub3RpZnkgbGluayB1cCBzdGF0ZQorICogY2hhbmdlLgorICovCit2b2lkCit2eGdlX2NhbGxiYWNrX2xpbmtfdXAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBobGRldi0+bmRldjsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBMaW5rIFVwXG4iLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwl2ZGV2LT5zdGF0cy5saW5rX3VwKys7CisKKwluZXRpZl9jYXJyaWVyX29uKHZkZXYtPm5kZXYpOworCXZ4Z2Vfd2FrZV9hbGxfdHhfcXVldWUodmRldik7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIEV4aXRpbmcuLi4iLCB2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCisvKgorICogdnhnZV9jYWxsYmFja19saW5rX2Rvd24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgaW50ZXJydXB0IGNvbnRleHQgdG8gbm90aWZ5IGxpbmsgZG93biBzdGF0ZQorICogY2hhbmdlLgorICovCit2b2lkCit2eGdlX2NhbGxiYWNrX2xpbmtfZG93bihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGhsZGV2LT5uZGV2OworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQiLCB2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXByaW50ayhLRVJOX05PVElDRSAiJXM6IExpbmsgRG93blxuIiwgdmRldi0+bmRldi0+bmFtZSk7CisKKwl2ZGV2LT5zdGF0cy5saW5rX2Rvd24rKzsKKwluZXRpZl9jYXJyaWVyX29mZih2ZGV2LT5uZGV2KTsKKwl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCBFeGl0aW5nLi4uIiwgdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworLyoKKyAqIHZ4Z2VfcnhfYWxsb2MKKyAqCisgKiBBbGxvY2F0ZSBTS0IuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZioKK3Z4Z2VfcnhfYWxsb2Modm9pZCAqZHRyaCwgc3RydWN0IHZ4Z2VfcmluZyAqcmluZywgY29uc3QgaW50IHNrYl9zaXplKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICAgICpkZXY7CisJc3RydWN0IHNrX2J1ZmYgICAgICAgKnNrYjsKKwlzdHJ1Y3QgdnhnZV9yeF9wcml2ICpyeF9wcml2OworCisJZGV2ID0gcmluZy0+bmRldjsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXJ4X3ByaXYgPSB2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0KGR0cmgpOworCisJLyogdHJ5IHRvIGFsbG9jYXRlIHNrYiBmaXJzdC4gdGhpcyBvbmUgbWF5IGZhaWwgKi8KKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgc2tiX3NpemUgKworCVZYR0VfSFdfSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX0FMSUdOKTsKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJdnhnZV9kZWJ1Z19tZW0oVlhHRV9FUlIsCisJCQkiJXM6IG91dCBvZiBtZW1vcnkgdG8gYWxsb2NhdGUgU0tCIiwgZGV2LT5uYW1lKTsKKwkJcmluZy0+c3RhdHMuc2tiX2FsbG9jX2ZhaWwrKzsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdnhnZV9kZWJ1Z19tZW0oVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCAgU2tiIDogMHglcCIsIHJpbmctPm5kZXYtPm5hbWUsCisJCV9fZnVuY19fLCBfX0xJTkVfXywgc2tiKTsKKworCXNrYl9yZXNlcnZlKHNrYiwgVlhHRV9IV19IRUFERVJfRVRIRVJORVRfSUlfODAyXzNfQUxJR04pOworCisJcnhfcHJpdi0+c2tiID0gc2tiOworCXJ4X3ByaXYtPmRhdGFfc2l6ZSA9IHNrYl9zaXplOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gc2tiOworfQorCisvKgorICogdnhnZV9yeF9tYXAKKyAqLworc3RhdGljIGludCB2eGdlX3J4X21hcCh2b2lkICpkdHJoLCBzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nKQoreworCXN0cnVjdCB2eGdlX3J4X3ByaXYgKnJ4X3ByaXY7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJ4X3ByaXYgPSB2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0KGR0cmgpOworCisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LCByeF9wcml2LT5za2ItPmRhdGEsCisJCQkJcnhfcHJpdi0+ZGF0YV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJaWYgKGRtYV9hZGRyID09IDApIHsKKwkJcmluZy0+c3RhdHMucGNpX21hcF9mYWlsKys7CisJCXJldHVybiAtRUlPOworCX0KKwl2eGdlX2RlYnVnX21lbShWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkICAxIGJ1ZmZlciBtb2RlIGRtYV9hZGRyID0gMHglbGx4IiwKKwkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWRtYV9hZGRyKTsKKwl2eGdlX2h3X3JpbmdfcnhkXzFiX3NldChkdHJoLCBkbWFfYWRkciwgcnhfcHJpdi0+ZGF0YV9zaXplKTsKKworCXJ4X3ByaXYtPmRhdGFfZG1hID0gZG1hX2FkZHI7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCBFeGl0aW5nLi4uIiwgcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdnhnZV9yeF9pbml0aWFsX3JlcGxlbmlzaAorICogQWxsb2NhdGlvbiBvZiBSeEQgYXMgYW4gaW5pdGlhbCByZXBsZW5pc2ggcHJvY2VkdXJlLgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9yeF9pbml0aWFsX3JlcGxlbmlzaCh2b2lkICpkdHJoLCB2b2lkICp1c2VyZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nID0gKHN0cnVjdCB2eGdlX3JpbmcgKil1c2VyZGF0YTsKKwlzdHJ1Y3QgdnhnZV9yeF9wcml2ICpyeF9wcml2OworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJaWYgKHZ4Z2VfcnhfYWxsb2MoZHRyaCwgcmluZywKKwkJCSAgVlhHRV9MTF9NQVhfRlJBTUVfU0laRShyaW5nLT5uZGV2KSkgPT0gTlVMTCkKKwkJcmV0dXJuIFZYR0VfSFdfRkFJTDsKKworCWlmICh2eGdlX3J4X21hcChkdHJoLCByaW5nKSkgeworCQlyeF9wcml2ID0gdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldChkdHJoKTsKKwkJZGV2X2tmcmVlX3NrYihyeF9wcml2LT5za2IpOworCisJCXJldHVybiBWWEdFX0hXX0ZBSUw7CisJfQorCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit2eGdlX3J4X2NvbXBsZXRlKHN0cnVjdCB2eGdlX3JpbmcgKnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2bGFuLAorCQkgaW50IHBrdF9sZW5ndGgsIHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkX2luZm8gKmV4dF9pbmZvKQoreworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByaW5nLT5kcml2ZXJfaWQpOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJpbmctPm5kZXYpOworCisJcmluZy0+c3RhdHMucnhfZnJtcysrOworCXJpbmctPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW5ndGg7CisKKwlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKQorCQlyaW5nLT5zdGF0cy5yeF9tY2FzdCsrOworCisJdnhnZV9kZWJ1Z19yeChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkICBza2IgcHJvdG9jb2wgPSAlZCIsCisJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywgc2tiLT5wcm90b2NvbCk7CisKKwlpZiAocmluZy0+Z3JvX2VuYWJsZSkgeworCQlpZiAocmluZy0+dmxncnAgJiYgZXh0X2luZm8tPnZsYW4gJiYKKwkJCShyaW5nLT52bGFuX3RhZ19zdHJpcCA9PQorCQkJCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0VOQUJMRSkpCisJCQl2bGFuX2dyb19yZWNlaXZlKCZyaW5nLT5uYXBpLCByaW5nLT52bGdycCwKKwkJCQkJZXh0X2luZm8tPnZsYW4sIHNrYik7CisJCWVsc2UKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIHNrYik7CisJfSBlbHNlIHsKKwkJaWYgKHJpbmctPnZsZ3JwICYmIHZsYW4gJiYKKwkJCShyaW5nLT52bGFuX3RhZ19zdHJpcCA9PQorCQkJCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0VOQUJMRSkpCisJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCByaW5nLT52bGdycCwgdmxhbik7CisJCWVsc2UKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJfQorCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2eGdlX3JlX3ByZV9wb3N0KHZvaWQgKmR0ciwgc3RydWN0IHZ4Z2VfcmluZyAqcmluZywKKwkJCQkgICAgc3RydWN0IHZ4Z2VfcnhfcHJpdiAqcnhfcHJpdikKK3sKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+cGRldiwKKwkJcnhfcHJpdi0+ZGF0YV9kbWEsIHJ4X3ByaXYtPmRhdGFfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCXZ4Z2VfaHdfcmluZ19yeGRfMWJfc2V0KGR0ciwgcnhfcHJpdi0+ZGF0YV9kbWEsIHJ4X3ByaXYtPmRhdGFfc2l6ZSk7CisJdnhnZV9od19yaW5nX3J4ZF9wcmVfcG9zdChyaW5nLT5oYW5kbGUsIGR0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2eGdlX3Bvc3QoaW50ICpkdHJfY250LCB2b2lkICoqZmlyc3RfZHRyLAorCQkJICAgICB2b2lkICpwb3N0X2R0ciwgc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCkKK3sKKwlpbnQgZHRyX2NvdW50ID0gKmR0cl9jbnQ7CisJaWYgKCgqZHRyX2NudCAlIFZYR0VfSFdfUlhTWU5DX0ZSRVFfQ05UKSA9PSAwKSB7CisJCWlmICgqZmlyc3RfZHRyKQorCQkJdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3Rfd21iKHJpbmdoLCAqZmlyc3RfZHRyKTsKKwkJKmZpcnN0X2R0ciA9IHBvc3RfZHRyOworCX0gZWxzZQorCQl2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdChyaW5naCwgcG9zdF9kdHIpOworCWR0cl9jb3VudCsrOworCSpkdHJfY250ID0gZHRyX2NvdW50OworfQorCisvKgorICogdnhnZV9yeF8xYl9jb21wbAorICoKKyAqIElmIHRoZSBpbnRlcnJ1cHQgaXMgYmVjYXVzZSBvZiBhIHJlY2VpdmVkIGZyYW1lIG9yIGlmIHRoZSByZWNlaXZlIHJpbmcKKyAqIGNvbnRhaW5zIGZyZXNoIGFzIHlldCB1bi1wcm9jZXNzZWQgZnJhbWVzLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9yeF8xYl9jb21wbChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoLCB2b2lkICpkdHIsCisJCSB1OCB0X2NvZGUsIHZvaWQgKnVzZXJkYXRhKQoreworCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmcgPSAoc3RydWN0IHZ4Z2VfcmluZyAqKXVzZXJkYXRhOworCXN0cnVjdCAgbmV0X2RldmljZSAqZGV2ID0gcmluZy0+bmRldjsKKwl1bnNpZ25lZCBpbnQgZG1hX3NpemVzOworCXZvaWQgKmZpcnN0X2R0ciA9IE5VTEw7CisJaW50IGR0cl9jbnQgPSAwOworCWludCBkYXRhX3NpemU7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwlpbnQgcGt0X2xlbmd0aDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCB2eGdlX3J4X3ByaXYgKnJ4X3ByaXY7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfaW5mbyBleHRfaW5mbzsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyaW5nLT5wa3RzX3Byb2Nlc3NlZCA9IDA7CisKKwl2eGdlX2h3X3JpbmdfcmVwbGVuaXNoKHJpbmdoLCAwKTsKKworCWRvIHsKKwkJcnhfcHJpdiA9IHZ4Z2VfaHdfcmluZ19yeGRfcHJpdmF0ZV9nZXQoZHRyKTsKKwkJc2tiID0gcnhfcHJpdi0+c2tiOworCQlkYXRhX3NpemUgPSByeF9wcml2LT5kYXRhX3NpemU7CisJCWRhdGFfZG1hID0gcnhfcHJpdi0+ZGF0YV9kbWE7CisKKwkJdnhnZV9kZWJ1Z19yeChWWEdFX1RSQUNFLAorCQkJIiVzOiAlczolZCAgc2tiID0gMHglcCIsCisJCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sIHNrYik7CisKKwkJdnhnZV9od19yaW5nX3J4ZF8xYl9nZXQocmluZ2gsIGR0ciwgJmRtYV9zaXplcyk7CisJCXBrdF9sZW5ndGggPSBkbWFfc2l6ZXM7CisKKwkJdnhnZV9kZWJ1Z19yeChWWEdFX1RSQUNFLAorCQkJIiVzOiAlczolZCAgUGFja2V0IExlbmd0aCA9ICVkIiwKKwkJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywgcGt0X2xlbmd0aCk7CisKKwkJdnhnZV9od19yaW5nX3J4ZF8xYl9pbmZvX2dldChyaW5naCwgZHRyLCAmZXh0X2luZm8pOworCisJCS8qIGNoZWNrIHNrYiB2YWxpZGl0eSAqLworCQl2eGdlX2Fzc2VydChza2IpOworCisJCXByZWZldGNoKChjaGFyICopc2tiICsgTDFfQ0FDSEVfQllURVMpOworCQlpZiAodW5saWtlbHkodF9jb2RlKSkgeworCisJCQlpZiAodnhnZV9od19yaW5nX2hhbmRsZV90Y29kZShyaW5naCwgZHRyLCB0X2NvZGUpICE9CisJCQkJVlhHRV9IV19PSykgeworCisJCQkJcmluZy0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJdnhnZV9kZWJ1Z19yeChWWEdFX1RSQUNFLAorCQkJCQkiJXM6ICVzIDolZCBSeCBUX2NvZGUgaXMgJWQiLAorCQkJCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywKKwkJCQkJX19MSU5FX18sIHRfY29kZSk7CisKKwkJCQkvKiBJZiB0aGUgdF9jb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGlmIHRoZQorCQkJCSAqIHRfY29kZSBpcyBvdGhlciB0aGFuIDB4NSAodW5wYXJzZWFibGUgcGFja2V0CisJCQkJICogc3VjaCBhcyB1bmtub3duIFVQVjYgaGVhZGVyKSwgRHJvcCBpdCAhISEKKwkJCQkgKi8KKwkJCQl2eGdlX3JlX3ByZV9wb3N0KGR0ciwgcmluZywgcnhfcHJpdik7CisKKwkJCQl2eGdlX3Bvc3QoJmR0cl9jbnQsICZmaXJzdF9kdHIsIGR0ciwgcmluZ2gpOworCQkJCXJpbmctPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWlmIChwa3RfbGVuZ3RoID4gVlhHRV9MTF9SWF9DT1BZX1RIUkVTSE9MRCkgeworCisJCQlpZiAodnhnZV9yeF9hbGxvYyhkdHIsIHJpbmcsIGRhdGFfc2l6ZSkgIT0gTlVMTCkgeworCisJCQkJaWYgKCF2eGdlX3J4X21hcChkdHIsIHJpbmcpKSB7CisJCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuZ3RoKTsKKworCQkJCQlwY2lfdW5tYXBfc2luZ2xlKHJpbmctPnBkZXYsIGRhdGFfZG1hLAorCQkJCQkJZGF0YV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCQkJCXZ4Z2VfaHdfcmluZ19yeGRfcHJlX3Bvc3QocmluZ2gsIGR0cik7CisJCQkJCXZ4Z2VfcG9zdCgmZHRyX2NudCwgJmZpcnN0X2R0ciwgZHRyLAorCQkJCQkJcmluZ2gpOworCQkJCX0gZWxzZSB7CisJCQkJCWRldl9rZnJlZV9za2IocnhfcHJpdi0+c2tiKTsKKwkJCQkJcnhfcHJpdi0+c2tiID0gc2tiOworCQkJCQlyeF9wcml2LT5kYXRhX3NpemUgPSBkYXRhX3NpemU7CisJCQkJCXZ4Z2VfcmVfcHJlX3Bvc3QoZHRyLCByaW5nLCByeF9wcml2KTsKKworCQkJCQl2eGdlX3Bvc3QoJmR0cl9jbnQsICZmaXJzdF9kdHIsIGR0ciwKKwkJCQkJCXJpbmdoKTsKKwkJCQkJcmluZy0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXZ4Z2VfcmVfcHJlX3Bvc3QoZHRyLCByaW5nLCByeF9wcml2KTsKKworCQkJCXZ4Z2VfcG9zdCgmZHRyX2NudCwgJmZpcnN0X2R0ciwgZHRyLCByaW5naCk7CisJCQkJcmluZy0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYl91cDsKKworCQkJc2tiX3VwID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHBrdF9sZW5ndGggKworCQkJCVZYR0VfSFdfSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX0FMSUdOKTsKKwkJCWlmIChza2JfdXAgIT0gTlVMTCkgeworCQkJCXNrYl9yZXNlcnZlKHNrYl91cCwKKwkJCQkgICAgVlhHRV9IV19IRUFERVJfRVRIRVJORVRfSUlfODAyXzNfQUxJR04pOworCisJCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmctPnBkZXYsCisJCQkJCWRhdGFfZG1hLCBkYXRhX3NpemUsCisJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCQl2eGdlX2RlYnVnX21lbShWWEdFX1RSQUNFLAorCQkJCQkiJXM6ICVzOiVkICBza2JfdXAgPSAlcCIsCisJCQkJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLAorCQkJCQlfX0xJTkVfXywgc2tiKTsKKwkJCQltZW1jcHkoc2tiX3VwLT5kYXRhLCBza2ItPmRhdGEsIHBrdF9sZW5ndGgpOworCisJCQkJdnhnZV9yZV9wcmVfcG9zdChkdHIsIHJpbmcsIHJ4X3ByaXYpOworCisJCQkJdnhnZV9wb3N0KCZkdHJfY250LCAmZmlyc3RfZHRyLCBkdHIsCisJCQkJCXJpbmdoKTsKKwkJCQkvKiB3aWxsIG5ldGlmX3J4IHNtYWxsIFNLQiBpbnN0ZWFkICovCisJCQkJc2tiID0gc2tiX3VwOworCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuZ3RoKTsKKwkJCX0gZWxzZSB7CisJCQkJdnhnZV9yZV9wcmVfcG9zdChkdHIsIHJpbmcsIHJ4X3ByaXYpOworCisJCQkJdnhnZV9wb3N0KCZkdHJfY250LCAmZmlyc3RfZHRyLCBkdHIsIHJpbmdoKTsKKwkJCQl2eGdlX2RlYnVnX3J4KFZYR0VfRVJSLAorCQkJCQkiJXM6IHZ4Z2VfcnhfMWJfY29tcGw6IG91dCBvZiAiCisJCQkJCSJtZW1vcnkiLCBkZXYtPm5hbWUpOworCQkJCXJpbmctPnN0YXRzLnNrYl9hbGxvY19mYWlsKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoKGV4dF9pbmZvLnByb3RvICYgVlhHRV9IV19GUkFNRV9QUk9UT19UQ1BfT1JfVURQKSAmJgorCQkgICAgIShleHRfaW5mby5wcm90byAmIFZYR0VfSFdfRlJBTUVfUFJPVE9fSVBfRlJBRykgJiYKKwkJICAgIHJpbmctPnJ4X2NzdW0gJiYgLyogT2ZmbG9hZCBSeCBzaWRlIENTVU0gKi8KKwkJICAgIGV4dF9pbmZvLmwzX2Nrc3VtID09IFZYR0VfSFdfTDNfQ0tTVU1fT0sgJiYKKwkJICAgIGV4dF9pbmZvLmw0X2Nrc3VtID09IFZYR0VfSFdfTDRfQ0tTVU1fT0spCisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQllbHNlCisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwkJdnhnZV9yeF9jb21wbGV0ZShyaW5nLCBza2IsIGV4dF9pbmZvLnZsYW4sCisJCQlwa3RfbGVuZ3RoLCAmZXh0X2luZm8pOworCisJCXJpbmctPmJ1ZGdldC0tOworCQlyaW5nLT5wa3RzX3Byb2Nlc3NlZCsrOworCQlpZiAoIXJpbmctPmJ1ZGdldCkKKwkJCWJyZWFrOworCisJfSB3aGlsZSAodnhnZV9od19yaW5nX3J4ZF9uZXh0X2NvbXBsZXRlZChyaW5naCwgJmR0ciwKKwkJJnRfY29kZSkgPT0gVlhHRV9IV19PSyk7CisKKwlpZiAoZmlyc3RfZHRyKQorCQl2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdF93bWIocmluZ2gsIGZpcnN0X2R0cik7CisKKwlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJCQkiJXM6JWQgIEV4aXRpbmcuLi4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiB2eGdlX3htaXRfY29tcGwKKyAqCisgKiBJZiBhbiBpbnRlcnJ1cHQgd2FzIHJhaXNlZCB0byBpbmRpY2F0ZSBETUEgY29tcGxldGUgb2YgdGhlIFR4IHBhY2tldCwKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBJdCBpZGVudGlmaWVzIHRoZSBsYXN0IFR4RCB3aG9zZSBidWZmZXIgd2FzCisgKiBmcmVlZCBhbmQgZnJlZXMgYWxsIHNrYnMgd2hvc2UgZGF0YSBoYXZlIGFscmVhZHkgRE1BJ2VkIGludG8gdGhlIE5JQ3MKKyAqIGludGVybmFsIG1lbW9yeS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV94bWl0X2NvbXBsKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19odywgdm9pZCAqZHRyLAorCQllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsIHZvaWQgKnVzZXJkYXRhLAorCQl2b2lkICoqc2tiX3B0cikKK3sKKwlzdHJ1Y3QgdnhnZV9maWZvICpmaWZvID0gKHN0cnVjdCB2eGdlX2ZpZm8gKil1c2VyZGF0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqaGVhZCA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKip0ZW1wOworCWludCBwa3RfY250ID0gMDsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCBFbnRlcmVkLi4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlkbyB7CisJCWludCBmcmdfY250OworCQlza2JfZnJhZ190ICpmcmFnOworCQlpbnQgaSA9IDAsIGo7CisJCXN0cnVjdCB2eGdlX3R4X3ByaXYgKnR4ZF9wcml2ID0KKwkJCXZ4Z2VfaHdfZmlmb190eGRsX3ByaXZhdGVfZ2V0KGR0cik7CisKKwkJc2tiID0gdHhkX3ByaXYtPnNrYjsKKwkJZnJnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXTsKKworCQl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCisJCQkJIiVzOiAlczolZCBmaWZvX2h3ID0gJXAgZHRyID0gJXAgIgorCQkJCSJ0Y29kZSA9IDB4JXgiLCBmaWZvLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywKKwkJCQlfX0xJTkVfXywgZmlmb19odywgZHRyLCB0X2NvZGUpOworCQkvKiBjaGVjayBza2IgdmFsaWRpdHkgKi8KKwkJdnhnZV9hc3NlcnQoc2tiKTsKKwkJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLAorCQkJIiVzOiAlczolZCBza2IgPSAlcCBpdHhkX3ByaXYgPSAlcCBmcmdfY250ID0gJWQiLAorCQkJZmlmby0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLAorCQkJc2tiLCB0eGRfcHJpdiwgZnJnX2NudCk7CisJCWlmICh1bmxpa2VseSh0X2NvZGUpKSB7CisJCQlmaWZvLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCisJCQkJIiVzOiB0eDogZHRyICVwIGNvbXBsZXRlZCBkdWUgdG8gIgorCQkJCSJlcnJvciB0X2NvZGUgJTAxeCIsIGZpZm8tPm5kZXYtPm5hbWUsCisJCQkJZHRyLCB0X2NvZGUpOworCQkJdnhnZV9od19maWZvX2hhbmRsZV90Y29kZShmaWZvX2h3LCBkdHIsIHRfY29kZSk7CisJCX0KKworCQkvKiAgZm9yIHVuZnJhZ21lbnRlZCBza2IgKi8KKwkJcGNpX3VubWFwX3NpbmdsZShmaWZvLT5wZGV2LCB0eGRfcHJpdi0+ZG1hX2J1ZmZlcnNbaSsrXSwKKwkJCQlza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlmb3IgKGogPSAwOyBqIDwgZnJnX2NudDsgaisrKSB7CisJCQlwY2lfdW5tYXBfcGFnZShmaWZvLT5wZGV2LAorCQkJCQl0eGRfcHJpdi0+ZG1hX2J1ZmZlcnNbaSsrXSwKKwkJCQkJZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCQlmcmFnICs9IDE7CisJCX0KKworCQl2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKGZpZm9faHcsIGR0cik7CisKKwkJLyogVXBkYXRpbmcgdGhlIHN0YXRpc3RpY3MgYmxvY2sgKi8KKwkJZmlmby0+c3RhdHMudHhfZnJtcysrOworCQlmaWZvLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKworCQl0ZW1wID0gKHN0cnVjdCBza19idWZmICoqKSZza2ItPmNiOworCQkqdGVtcCA9IGhlYWQ7CisJCWhlYWQgPSBza2I7CisKKwkJcGt0X2NudCsrOworCQlpZiAocGt0X2NudCA+IGZpZm8tPmluZGljYXRlX21heF9wa3RzKQorCQkJYnJlYWs7CisKKwl9IHdoaWxlICh2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZChmaWZvX2h3LAorCQkJCSZkdHIsICZ0X2NvZGUpID09IFZYR0VfSFdfT0spOworCisJdnhnZV93YWtlX3R4X3F1ZXVlKGZpZm8sIHNrYik7CisKKwlpZiAoc2tiX3B0cikKKwkJKnNrYl9wdHIgPSAodm9pZCAqKSBoZWFkOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJCQkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKKwkJCQlmaWZvLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKiBzZWxlY3QgYSB2cGF0aCB0byB0cmFzbWl0IHRoZSBwYWNrZXQgKi8KK3N0YXRpYyB1MzIgdnhnZV9nZXRfdnBhdGhfbm8oc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJaW50ICpkb19sb2NrKQoreworCXUxNiBxdWV1ZV9sZW4sIGNvdW50ZXIgPSAwOworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgeworCQlzdHJ1Y3QgaXBoZHIgKmlwOworCQlzdHJ1Y3QgdGNwaGRyICp0aDsKKworCQlpcCA9IGlwX2hkcihza2IpOworCisJCWlmICgoaXAtPmZyYWdfb2ZmICYgaHRvbnMoSVBfT0ZGU0VUfElQX01GKSkgPT0gMCkgeworCQkJdGggPSAoc3RydWN0IHRjcGhkciAqKSgoKHVuc2lnbmVkIGNoYXIgKilpcCkgKworCQkJCQlpcC0+aWhsKjQpOworCisJCQlxdWV1ZV9sZW4gPSB2ZGV2LT5ub19vZl92cGF0aDsKKwkJCWNvdW50ZXIgPSAobnRvaHModGgtPnNvdXJjZSkgKworCQkJCW50b2hzKHRoLT5kZXN0KSkgJgorCQkJCXZkZXYtPnZwYXRoX3NlbGVjdG9yW3F1ZXVlX2xlbiAtIDFdOworCQkJaWYgKGNvdW50ZXIgPj0gcXVldWVfbGVuKQorCQkJCWNvdW50ZXIgPSBxdWV1ZV9sZW4gLSAxOworCisJCQlpZiAoaXAtPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7CisjaWZkZWYgTkVUSUZfRl9MTFRYCisJCQkJKmRvX2xvY2sgPSAwOworI2VuZGlmCisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGNvdW50ZXI7Cit9CisKK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2Vfc2VhcmNoX21hY19hZGRyX2luX2xpc3QoCisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoLCB1NjQgZGVsX21hYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKm5leHQ7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBuZXh0LCAmdnBhdGgtPm1hY19hZGRyX2xpc3QpIHsKKwkJaWYgKCgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpLT5tYWNhZGRyID09IGRlbF9tYWMpCisJCQlyZXR1cm4gVFJVRTsKKwl9CisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgaW50IHZ4Z2VfbGVhcm5fbWFjKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCB1OCAqbWFjX2hlYWRlcikKK3sKKwlzdHJ1Y3QgbWFjSW5mbyBtYWNfaW5mbzsKKwl1OCAqbWFjX2FkZHJlc3MgPSBOVUxMOworCXU2NCBtYWNfYWRkciA9IDAsIHZwYXRoX3ZlY3RvciA9IDA7CisJaW50IHZwYXRoX2lkeCA9IDA7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCA9IE5VTEw7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKikgcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJbWFjX2FkZHJlc3MgPSAodTggKikmbWFjX2FkZHI7CisJbWVtY3B5KG1hY19hZGRyZXNzLCBtYWNfaGVhZGVyLCBFVEhfQUxFTik7CisKKwkvKiBJcyB0aGlzIG1hYyBhZGRyZXNzIGFscmVhZHkgaW4gdGhlIGxpc3Q/ICovCisJZm9yICh2cGF0aF9pZHggPSAwOyB2cGF0aF9pZHggPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBhdGhfaWR4KyspIHsKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwYXRoX2lkeF07CisJCWlmICh2eGdlX3NlYXJjaF9tYWNfYWRkcl9pbl9saXN0KHZwYXRoLCBtYWNfYWRkcikpCisJCQlyZXR1cm4gdnBhdGhfaWR4OworCX0KKworCW1lbXNldCgmbWFjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgbWFjSW5mbykpOworCW1lbWNweShtYWNfaW5mby5tYWNhZGRyLCBtYWNfaGVhZGVyLCBFVEhfQUxFTik7CisKKwkvKiBBbnkgdnBhdGggaGFzIHJvb20gdG8gYWRkIG1hYyBhZGRyZXNzIHRvIGl0cyBkYSB0YWJsZT8gKi8KKwlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cGF0aF9pZHgrKykgeworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBhdGhfaWR4XTsKKwkJaWYgKHZwYXRoLT5tYWNfYWRkcl9jbnQgPCB2cGF0aC0+bWF4X21hY19hZGRyX2NudCkgeworCQkJLyogQWRkIHRoaXMgbWFjIGFkZHJlc3MgdG8gdGhpcyB2cGF0aCAqLworCQkJbWFjX2luZm8udnBhdGhfbm8gPSB2cGF0aF9pZHg7CisJCQltYWNfaW5mby5zdGF0ZSA9IFZYR0VfTExfTUFDX0FERFJfSU5fREFfVEFCTEU7CisJCQlzdGF0dXMgPSB2eGdlX2FkZF9tYWNfYWRkcih2ZGV2LCAmbWFjX2luZm8pOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJCXJldHVybiAtRVBFUk07CisJCQlyZXR1cm4gdnBhdGhfaWR4OworCQl9CisJfQorCisJbWFjX2luZm8uc3RhdGUgPSBWWEdFX0xMX01BQ19BRERSX0lOX0xJU1Q7CisJdnBhdGhfaWR4ID0gMDsKKwltYWNfaW5mby52cGF0aF9ubyA9IHZwYXRoX2lkeDsKKwkvKiBJcyB0aGUgZmlyc3QgdnBhdGggYWxyZWFkeSBzZWxlY3RlZCBhcyBjYXRjaC1iYXNpbiA/ICovCisJdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwYXRoX2lkeF07CisJaWYgKHZwYXRoLT5tYWNfYWRkcl9jbnQgPiB2cGF0aC0+bWF4X21hY19hZGRyX2NudCkgeworCQkvKiBBZGQgdGhpcyBtYWMgYWRkcmVzcyB0byB0aGlzIHZwYXRoICovCisJCWlmIChGQUxTRSA9PSB2eGdlX21hY19saXN0X2FkZCh2cGF0aCwgJm1hY19pbmZvKSkKKwkJCXJldHVybiAtRVBFUk07CisJCXJldHVybiB2cGF0aF9pZHg7CisJfQorCisJLyogU2VsZWN0IGZpcnN0IHZwYXRoIGFzIGNhdGNoLWJhc2luICovCisJdnBhdGhfdmVjdG9yID0gdnhnZV9tQklUKHZwYXRoLT5kZXZpY2VfaWQpOworCXN0YXR1cyA9IHZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUodnBhdGgtPnZkZXYtPmRldmgsCisJCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKKwkJCQkwLAorCQkJCSh1bG9uZylvZmZzZXRvZigKKwkJCQkJc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKKwkJCQkJcnRzX21ncl9jYmFzaW5fY2ZnKSwKKwkJCQl2cGF0aF92ZWN0b3IpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX3R4KFZYR0VfRVJSLAorCQkJIiVzOiBVbmFibGUgdG8gc2V0IHRoZSB2cGF0aC0lZCBpbiBjYXRjaC1iYXNpbiBtb2RlIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUsIHZwYXRoLT5kZXZpY2VfaWQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChGQUxTRSA9PSB2eGdlX21hY19saXN0X2FkZCh2cGF0aCwgJm1hY19pbmZvKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiB2cGF0aF9pZHg7Cit9CisKKy8qKgorICogdnhnZV94bWl0CisgKiBAc2tiIDogdGhlIHNvY2tldCBidWZmZXIgY29udGFpbmluZyB0aGUgVHggZGF0YS4KKyAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBUeCBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLiBOZXRlcmlvbiBOSUMgc3VwcG9ydHMKKyAqIGNlcnRhaW4gcHJvdG9jb2wgYXNzaXN0IGZlYXR1cmVzIG9uIFR4IHNpZGUsIG5hbWVseSAgQ1NPLCBTL0csIExTTy4KKyAqIE5PVEU6IHdoZW4gZGV2aWNlIGNhbnQgcXVldWUgdGhlIHBrdCwganVzdCB0aGUgdHJhbnNfc3RhcnQgdmFyaWFibGUgd2lsbAorICogbm90IGJlIHVwYWR0ZWQuCisqLworc3RhdGljIGludAordnhnZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbyA9IE5VTEw7CisJdm9pZCAqZHRyX3ByaXY7CisJdm9pZCAqZHRyID0gTlVMTDsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IE5VTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJaW50IGZyZ19jbnQsIGZpcnN0X2ZyZ19sZW47CisJc2tiX2ZyYWdfdCAqZnJhZzsKKwlpbnQgaSA9IDAsIGogPSAwLCBhdmFpbDsKKwl1NjQgZG1hX3BvaW50ZXI7CisJc3RydWN0IHZ4Z2VfdHhfcHJpdiAqdHhkbF9wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faHc7CisJdTMyIG1heF9tc3MgPSAweDA7CisJaW50IG9mZmxvYWRfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpbnQgdnBhdGhfbm8gPSAwOworCWludCBkb19zcGluX3R4X2xvY2sgPSAxOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwkvKiBBIGJ1ZmZlciB3aXRoIG5vIGRhdGEgd2lsbCBiZSBkcm9wcGVkICovCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDw9IDApKSB7CisJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCisJCQkiJXM6IEJ1ZmZlciBoYXMgbm8gZGF0YS4uIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKSB7CisJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCisJCQkiJXM6IHZkZXYgbm90IGluaXRpYWxpemVkIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCWlmICh2ZGV2LT5jb25maWcuYWRkcl9sZWFybl9lbikgeworCQl2cGF0aF9ubyA9IHZ4Z2VfbGVhcm5fbWFjKHZkZXYsIHNrYi0+ZGF0YSArIEVUSF9BTEVOKTsKKwkJaWYgKHZwYXRoX25vID09IC1FUEVSTSkgeworCQkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKKwkJCQkiJXM6IEZhaWxlZCB0byBzdG9yZSB0aGUgbWFjIGFkZHJlc3MiLAorCQkJCWRldi0+bmFtZSk7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQl9CisJfQorCisJaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykKKwkJdnBhdGhfbm8gPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwllbHNlIGlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9QT1JUX1NURUVSSU5HKQorCQl2cGF0aF9ubyA9IHZ4Z2VfZ2V0X3ZwYXRoX25vKHZkZXYsIHNrYiwgJmRvX3NwaW5fdHhfbG9jayk7CisKKwl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsICIlczogdnBhdGhfbm89ICVkIiwgZGV2LT5uYW1lLCB2cGF0aF9ubyk7CisKKwlpZiAodnBhdGhfbm8gPj0gdmRldi0+bm9fb2ZfdnBhdGgpCisJCXZwYXRoX25vID0gMDsKKworCWZpZm8gPSAmdmRldi0+dnBhdGhzW3ZwYXRoX25vXS5maWZvOworCWZpZm9faHcgPSBmaWZvLT5oYW5kbGU7CisKKwlpZiAoZG9fc3Bpbl90eF9sb2NrKQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOworCWVsc2UgeworCQlpZiAodW5saWtlbHkoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFncykpKQorCQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7CisJfQorCisJaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykgeworCQlpZiAobmV0aWZfc3VicXVldWVfc3RvcHBlZChkZXYsIHNrYikpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJfQorCX0gZWxzZSBpZiAodW5saWtlbHkoZmlmby0+cXVldWVfc3RhdGUgPT0gVlBBVEhfUVVFVUVfU1RPUCkpIHsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQl9CisJfQorCWF2YWlsID0gdnhnZV9od19maWZvX2ZyZWVfdHhkbF9jb3VudF9nZXQoZmlmb19odyk7CisJaWYgKGF2YWlsID09IDApIHsKKwkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKKwkJCSIlczogTm8gZnJlZSBUWERzIGF2YWlsYWJsZSIsIGRldi0+bmFtZSk7CisJCWZpZm8tPnN0YXRzLnR4ZF9ub3RfZnJlZSsrOworCQl2eGdlX3N0b3BfdHhfcXVldWUoZmlmbyk7CisJCWdvdG8gX2V4aXQyOworCX0KKworCXN0YXR1cyA9IHZ4Z2VfaHdfZmlmb190eGRsX3Jlc2VydmUoZmlmb19odywgJmR0ciwgJmR0cl9wcml2KTsKKwlpZiAodW5saWtlbHkoc3RhdHVzICE9IFZYR0VfSFdfT0spKSB7CisJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCisJCSAgICIlczogT3V0IG9mIGRlc2NyaXB0b3JzIC4iLCBkZXYtPm5hbWUpOworCQlmaWZvLT5zdGF0cy50eGRfb3V0X29mX2Rlc2MrKzsKKwkJdnhnZV9zdG9wX3R4X3F1ZXVlKGZpZm8pOworCQlnb3RvIF9leGl0MjsKKwl9CisKKwl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgZmlmb19odyA9ICVwIGR0ciA9ICVwIGR0cl9wcml2ID0gJXAiLAorCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJZmlmb19odywgZHRyLCBkdHJfcHJpdik7CisKKwlpZiAodmRldi0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCXUxNiB2bGFuX3RhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQl2eGdlX2h3X2ZpZm9fdHhkbF92bGFuX3NldChkdHIsIHZsYW5fdGFnKTsKKwl9CisKKwlmaXJzdF9mcmdfbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKworCWRtYV9wb2ludGVyID0gcGNpX21hcF9zaW5nbGUoZmlmby0+cGRldiwgc2tiLT5kYXRhLCBmaXJzdF9mcmdfbGVuLAorCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCisJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihmaWZvLT5wZGV2LCBkbWFfcG9pbnRlcikpKSB7CisJCXZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoZmlmb19odywgZHRyKTsKKwkJdnhnZV9zdG9wX3R4X3F1ZXVlKGZpZm8pOworCQlmaWZvLT5zdGF0cy5wY2lfbWFwX2ZhaWwrKzsKKwkJZ290byBfZXhpdDI7CisJfQorCisJdHhkbF9wcml2ID0gdnhnZV9od19maWZvX3R4ZGxfcHJpdmF0ZV9nZXQoZHRyKTsKKwl0eGRsX3ByaXYtPnNrYiA9IHNrYjsKKwl0eGRsX3ByaXYtPmRtYV9idWZmZXJzW2pdID0gZG1hX3BvaW50ZXI7CisKKwlmcmdfY250ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCisJCQkiJXM6ICVzOiVkIHNrYiA9ICVwIHR4ZGxfcHJpdiA9ICVwICIKKwkJCSJmcmFnX2NudCA9ICVkIGRtYV9wb2ludGVyID0gMHglbGx4IiwgZGV2LT5uYW1lLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBza2IsIHR4ZGxfcHJpdiwKKwkJCWZyZ19jbnQsICh1bnNpZ25lZCBsb25nIGxvbmcpZG1hX3BvaW50ZXIpOworCisJdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldChmaWZvX2h3LCBkdHIsIGorKywgZG1hX3BvaW50ZXIsCisJCWZpcnN0X2ZyZ19sZW4pOworCisJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdOworCWZvciAoaSA9IDA7IGkgPCBmcmdfY250OyBpKyspIHsKKwkJLyogaWdub3JlIDAgbGVuZ3RoIGZyYWdtZW50ICovCisJCWlmICghZnJhZy0+c2l6ZSkKKwkJCWNvbnRpbnVlOworCisJCWRtYV9wb2ludGVyID0KKwkJCSh1NjQpcGNpX21hcF9wYWdlKGZpZm8tPnBkZXYsIGZyYWctPnBhZ2UsCisJCQkJZnJhZy0+cGFnZV9vZmZzZXQsIGZyYWctPnNpemUsCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisKKwkJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihmaWZvLT5wZGV2LCBkbWFfcG9pbnRlcikpKQorCQkJZ290byBfZXhpdDA7CisJCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwKKwkJCSIlczogJXM6JWQgZnJhZyA9ICVkIGRtYV9wb2ludGVyID0gMHglbGx4IiwKKwkJCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywgaSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWRtYV9wb2ludGVyKTsKKworCQl0eGRsX3ByaXYtPmRtYV9idWZmZXJzW2pdID0gZG1hX3BvaW50ZXI7CisJCXZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXQoZmlmb19odywgZHRyLCBqKyssIGRtYV9wb2ludGVyLAorCQkJCQlmcmFnLT5zaXplKTsKKwkJZnJhZyArPSAxOworCX0KKworCW9mZmxvYWRfdHlwZSA9IHZ4Z2Vfb2ZmbG9hZF90eXBlKHNrYik7CisKKwlpZiAob2ZmbG9hZF90eXBlICYgKFNLQl9HU09fVENQVjQgfCBTS0JfR1NPX1RDUFY2KSkgeworCisJCWludCBtc3MgPSB2eGdlX3RjcF9tc3Moc2tiKTsKKwkJaWYgKG1zcykgeworCQkJbWF4X21zcyA9IGRldi0+bXR1ICsgRVRIX0hMRU4gLQorCQkJCVZYR0VfSFdfVENQSVBfSEVBREVSX01BWF9TSVpFOworCQkJaWYgKG1zcyA+IG1heF9tc3MpCisJCQkJbXNzID0gbWF4X21zczsKKwkJCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwKKwkJCQkiJXM6ICVzOiVkIG1zcyA9ICVkIiwKKwkJCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywgbXNzKTsKKwkJCXZ4Z2VfaHdfZmlmb190eGRsX21zc19zZXQoZHRyLCBtc3MpOworCQl9IGVsc2UgeworCQkJdnhnZV9hc3NlcnQoc2tiLT5sZW4gPD0KKwkJCQlkZXYtPm10dSArIFZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRSk7CisJCQl2eGdlX2Fzc2VydCgwKTsKKwkJCWdvdG8gX2V4aXQxOworCQl9CisJfQorCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCisJCXZ4Z2VfaHdfZmlmb190eGRsX2Nrc3VtX3NldF9iaXRzKGR0ciwKKwkJCQkJVlhHRV9IV19GSUZPX1RYRF9UWF9DS09fSVBWNF9FTiB8CisJCQkJCVZYR0VfSFdfRklGT19UWERfVFhfQ0tPX1RDUF9FTiB8CisJCQkJCVZYR0VfSFdfRklGT19UWERfVFhfQ0tPX1VEUF9FTik7CisKKwl2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KGZpZm9faHcsIGR0cik7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOworCisJVlhHRV9DT01QTEVURV9WUEFUSF9UWChmaWZvKTsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKKwkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJldHVybiAwOworCitfZXhpdDA6CisJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLCAiJXM6IHBjaV9tYXBfcGFnZSBmYWlsZWQiLCBkZXYtPm5hbWUpOworCitfZXhpdDE6CisJaiA9IDA7CisJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdOworCisJcGNpX3VubWFwX3NpbmdsZShmaWZvLT5wZGV2LCB0eGRsX3ByaXYtPmRtYV9idWZmZXJzW2orK10sCisJCQlza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCWZvciAoOyBqIDwgaTsgaisrKSB7CisJCXBjaV91bm1hcF9wYWdlKGZpZm8tPnBkZXYsIHR4ZGxfcHJpdi0+ZG1hX2J1ZmZlcnNbal0sCisJCQlmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZnJhZyArPSAxOworCX0KKworCXZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoZmlmb19odywgZHRyKTsKK19leGl0MjoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOworCVZYR0VfQ09NUExFVEVfVlBBVEhfVFgoZmlmbyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZ4Z2VfcnhfdGVybQorICoKKyAqIEZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGh3IGZ1bmN0aW9uIHRvIGFib3J0IGFsbCBvdXRzdGFuZGluZyByZWNlaXZlCisgKiBkZXNjcmlwdG9ycy4KKyAqLworc3RhdGljIHZvaWQKK3Z4Z2VfcnhfdGVybSh2b2lkICpkdHJoLCBlbnVtIHZ4Z2VfaHdfcnhkX3N0YXRlIHN0YXRlLCB2b2lkICp1c2VyZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nID0gKHN0cnVjdCB2eGdlX3JpbmcgKil1c2VyZGF0YTsKKwlzdHJ1Y3QgdnhnZV9yeF9wcml2ICpyeF9wcml2ID0KKwkJdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldChkdHJoKTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlpZiAoc3RhdGUgIT0gVlhHRV9IV19SWERfU1RBVEVfUE9TVEVEKQorCQlyZXR1cm47CisKKwlwY2lfdW5tYXBfc2luZ2xlKHJpbmctPnBkZXYsIHJ4X3ByaXYtPmRhdGFfZG1hLAorCQlyeF9wcml2LT5kYXRhX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlkZXZfa2ZyZWVfc2tiKHJ4X3ByaXYtPnNrYik7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKKwkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworLyoKKyAqIHZ4Z2VfdHhfdGVybQorICoKKyAqIEZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGFib3J0IGFsbCBvdXRzdGFuZGluZyB0eCBkZXNjcmlwdG9ycworICovCitzdGF0aWMgdm9pZAordnhnZV90eF90ZXJtKHZvaWQgKmR0cmgsIGVudW0gdnhnZV9od190eGRsX3N0YXRlIHN0YXRlLCB2b2lkICp1c2VyZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZV9maWZvICpmaWZvID0gKHN0cnVjdCB2eGdlX2ZpZm8gKil1c2VyZGF0YTsKKwlza2JfZnJhZ190ICpmcmFnOworCWludCBpID0gMCwgaiwgZnJnX2NudDsKKwlzdHJ1Y3QgdnhnZV90eF9wcml2ICp0eGRfcHJpdiA9IHZ4Z2VfaHdfZmlmb190eGRsX3ByaXZhdGVfZ2V0KGR0cmgpOworCXN0cnVjdCBza19idWZmICpza2IgPSB0eGRfcHJpdi0+c2tiOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCWlmIChzdGF0ZSAhPSBWWEdFX0hXX1RYRExfU1RBVEVfUE9TVEVEKQorCQlyZXR1cm47CisKKwkvKiBjaGVjayBza2IgdmFsaWRpdHkgKi8KKwl2eGdlX2Fzc2VydChza2IpOworCWZyZ19jbnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXTsKKworCS8qICBmb3IgdW5mcmFnbWVudGVkIHNrYiAqLworCXBjaV91bm1hcF9zaW5nbGUoZmlmby0+cGRldiwgdHhkX3ByaXYtPmRtYV9idWZmZXJzW2krK10sCisJCXNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJZm9yIChqID0gMDsgaiA8IGZyZ19jbnQ7IGorKykgeworCQlwY2lfdW5tYXBfcGFnZShmaWZvLT5wZGV2LCB0eGRfcHJpdi0+ZG1hX2J1ZmZlcnNbaSsrXSwKKwkJCSAgICAgICBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZnJhZyArPSAxOworCX0KKworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKKy8qKgorICogdnhnZV9zZXRfbXVsdGljYXN0CisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogRW50cnkgcG9pbnQgZm9yIG11bHRpY2FzdCBhZGRyZXNzIGVuYWJsZS9kaXNhYmxlCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgZHJpdmVyIGVudHJ5IHBvaW50IHdoaWNoIGdldHMgY2FsbGVkIGJ5IHRoZSBrZXJuZWwKKyAqIHdoZW5ldmVyIG11bHRpY2FzdCBhZGRyZXNzZXMgbXVzdCBiZSBlbmFibGVkL2Rpc2FibGVkLiBUaGlzIGFsc28gZ2V0cworICogY2FsbGVkIHRvIHNldC9yZXNldCBwcm9taXNjdW91cyBtb2RlLiBEZXBlbmRpbmcgb24gdGhlIGRlaXZjZSBmbGFnLCB3ZQorICogZGV0ZXJtaW5lLCBpZiBtdWx0aWNhc3QgYWRkcmVzcyBtdXN0IGJlIGVuYWJsZWQgb3IgaWYgcHJvbWlzY3VvdXMgbW9kZQorICogaXMgdG8gYmUgZGlzYWJsZWQgZXRjLgorICovCitzdGF0aWMgdm9pZCB2eGdlX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlpbnQgaSwgbWNhc3RfY250ID0gMDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgbWFjSW5mbyBtYWNfaW5mbzsKKwlpbnQgdnBhdGhfaWR4ID0gMDsKKwlzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKm1hY19lbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2hlYWQ7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpuZXh0OworCXU4ICptYWNfYWRkcmVzcyA9IE5VTEw7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopdmRldi0+ZGV2aDsKKworCWlmICh1bmxpa2VseSghaXNfdnhnZV9jYXJkX3VwKHZkZXYpKSkKKwkJcmV0dXJuOworCisJaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAmJiAoIXZkZXYtPmFsbF9tdWx0aV9mbGcpKSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQl2eGdlX2Fzc2VydCh2ZGV2LT52cGF0aHNbaV0uaXNfb3Blbik7CisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21jYXN0X2VuYWJsZSgKKwkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJdmRldi0+YWxsX211bHRpX2ZsZyA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAmJiAodmRldi0+YWxsX211bHRpX2ZsZykpIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCXZ4Z2VfYXNzZXJ0KHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKTsKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZGlzYWJsZSgKKwkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJdmRldi0+YWxsX211bHRpX2ZsZyA9IDE7CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJmYWlsZWQgdG8gJXMgbXVsdGljYXN0LCBzdGF0dXMgJWQiLAorCQkJZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSA/CisJCQkiZW5hYmxlIiA6ICJkaXNhYmxlIiwgc3RhdHVzKTsKKworCWlmICghdmRldi0+Y29uZmlnLmFkZHJfbGVhcm5fZW4pIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCQl2eGdlX2Fzc2VydCh2ZGV2LT52cGF0aHNbaV0uaXNfb3Blbik7CisJCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9wcm9taXNjX2VuYWJsZSgKKwkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCQl2eGdlX2Fzc2VydCh2ZGV2LT52cGF0aHNbaV0uaXNfb3Blbik7CisJCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9wcm9taXNjX2Rpc2FibGUoCisJCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCX0KKwkJfQorCX0KKworCW1lbXNldCgmbWFjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgbWFjSW5mbykpOworCS8qIFVwZGF0ZSBpbmRpdmlkdWFsIE1fQ0FTVCBhZGRyZXNzIGxpc3QgKi8KKwlpZiAoKCF2ZGV2LT5hbGxfbXVsdGlfZmxnKSAmJiBkZXYtPm1jX2NvdW50KSB7CisKKwkJbWNhc3RfY250ID0gdmRldi0+dnBhdGhzWzBdLm1jYXN0X2FkZHJfY250OworCQlsaXN0X2hlYWQgPSAmdmRldi0+dnBhdGhzWzBdLm1hY19hZGRyX2xpc3Q7CisJCWlmICgoZGV2LT5tY19jb3VudCArCisJCQkodmRldi0+dnBhdGhzWzBdLm1hY19hZGRyX2NudCAtIG1jYXN0X2NudCkpID4KKwkJCQl2ZGV2LT52cGF0aHNbMF0ubWF4X21hY19hZGRyX2NudCkKKwkJCWdvdG8gX3NldF9hbGxfbWNhc3Q7CisKKwkJLyogRGVsZXRlIHByZXZpb3VzIE1DJ3MgKi8KKwkJZm9yIChpID0gMDsgaSA8IG1jYXN0X2NudDsgaSsrKSB7CisJCQlpZiAoIWxpc3RfZW1wdHkobGlzdF9oZWFkKSkKKwkJCQltYWNfZW50cnkgPSAoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopCisJCQkJCWxpc3RfZmlyc3RfZW50cnkobGlzdF9oZWFkLAorCQkJCQkJc3RydWN0IHZ4Z2VfbWFjX2FkZHJzLAorCQkJCQkJaXRlbSk7CisKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgbGlzdF9oZWFkKSB7CisKKwkJCQltYWNfZW50cnkgPSAoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopIGVudHJ5OworCQkJCS8qIENvcHkgdGhlIG1hYyBhZGRyZXNzIHRvIGRlbGV0ZSAqLworCQkJCW1hY19hZGRyZXNzID0gKHU4ICopJm1hY19lbnRyeS0+bWFjYWRkcjsKKwkJCQltZW1jcHkobWFjX2luZm8ubWFjYWRkciwgbWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKworCQkJCS8qIElzIHRoaXMgYSBtdWx0aWNhc3QgYWRkcmVzcyAqLworCQkJCWlmICgweDAxICYgbWFjX2luZm8ubWFjYWRkclswXSkgeworCQkJCQlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8CisJCQkJCQl2ZGV2LT5ub19vZl92cGF0aDsKKwkJCQkJCXZwYXRoX2lkeCsrKSB7CisJCQkJCQltYWNfaW5mby52cGF0aF9ubyA9IHZwYXRoX2lkeDsKKwkJCQkJCXN0YXR1cyA9IHZ4Z2VfZGVsX21hY19hZGRyKAorCQkJCQkJCQl2ZGV2LAorCQkJCQkJCQkmbWFjX2luZm8pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogQWRkIG5ldyBvbmVzICovCisJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgaSA8IGRldi0+bWNfY291bnQ7CisJCQlpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCisJCQltZW1jcHkobWFjX2luZm8ubWFjYWRkciwgbWNsaXN0LT5kbWlfYWRkciwgRVRIX0FMRU4pOworCQkJZm9yICh2cGF0aF9pZHggPSAwOyB2cGF0aF9pZHggPCB2ZGV2LT5ub19vZl92cGF0aDsKKwkJCQkJdnBhdGhfaWR4KyspIHsKKwkJCQltYWNfaW5mby52cGF0aF9ubyA9IHZwYXRoX2lkeDsKKwkJCQltYWNfaW5mby5zdGF0ZSA9IFZYR0VfTExfTUFDX0FERFJfSU5fREFfVEFCTEU7CisJCQkJc3RhdHVzID0gdnhnZV9hZGRfbWFjX2FkZHIodmRldiwgJm1hY19pbmZvKTsKKwkJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkJIiVzOiVkIFNldHRpbmcgaW5kaXZpZHVhbCIKKwkJCQkJCSJtdWx0aWNhc3QgYWRkcmVzcyBmYWlsZWQiLAorCQkJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJCQkJZ290byBfc2V0X2FsbF9tY2FzdDsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm47Citfc2V0X2FsbF9tY2FzdDoKKwkJbWNhc3RfY250ID0gdmRldi0+dnBhdGhzWzBdLm1jYXN0X2FkZHJfY250OworCQkvKiBEZWxldGUgcHJldmlvdXMgTUMncyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbWNhc3RfY250OyBpKyspIHsKKworCQkJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBuZXh0LCBsaXN0X2hlYWQpIHsKKworCQkJCW1hY19lbnRyeSA9IChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKikgZW50cnk7CisJCQkJLyogQ29weSB0aGUgbWFjIGFkZHJlc3MgdG8gZGVsZXRlICovCisJCQkJbWFjX2FkZHJlc3MgPSAodTggKikmbWFjX2VudHJ5LT5tYWNhZGRyOworCQkJCW1lbWNweShtYWNfaW5mby5tYWNhZGRyLCBtYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCisJCQkJLyogSXMgdGhpcyBhIG11bHRpY2FzdCBhZGRyZXNzICovCisJCQkJaWYgKDB4MDEgJiBtYWNfaW5mby5tYWNhZGRyWzBdKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJZm9yICh2cGF0aF9pZHggPSAwOyB2cGF0aF9pZHggPCB2ZGV2LT5ub19vZl92cGF0aDsKKwkJCQkJdnBhdGhfaWR4KyspIHsKKwkJCQltYWNfaW5mby52cGF0aF9ubyA9IHZwYXRoX2lkeDsKKwkJCQlzdGF0dXMgPSB2eGdlX2RlbF9tYWNfYWRkcih2ZGV2LCAmbWFjX2luZm8pOworCQkJfQorCQl9CisKKwkJLyogRW5hYmxlIGFsbCBtdWx0aWNhc3QgKi8KKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCXZ4Z2VfYXNzZXJ0KHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKTsKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlKAorCQkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSIlczolZCBFbmFibGluZyBhbGwgbXVsdGljYXN0cyBmYWlsZWQiLAorCQkJCQkgX19mdW5jX18sIF9fTElORV9fKTsKKwkJCX0KKwkJCXZkZXYtPmFsbF9tdWx0aV9mbGcgPSAxOworCQl9CisJCWRldi0+ZmxhZ3MgfD0gSUZGX0FMTE1VTFRJOworCX0KKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKKy8qKgorICogdnhnZV9zZXRfbWFjX2FkZHIKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBVcGRhdGUgZW50cnkgIjAiIChkZWZhdWx0IE1BQyBhZGRyKQorICovCitzdGF0aWMgaW50IHZ4Z2Vfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgbWFjSW5mbyBtYWNfaW5mb19uZXcsIG1hY19pbmZvX29sZDsKKwlpbnQgdnBhdGhfaWR4ID0gMDsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlobGRldiA9IHZkZXYtPmRldmg7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KCZtYWNfaW5mb19uZXcsIDAsIHNpemVvZihzdHJ1Y3QgbWFjSW5mbykpOworCW1lbXNldCgmbWFjX2luZm9fb2xkLCAwLCBzaXplb2Yoc3RydWN0IG1hY0luZm8pKTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCAgRXhpdGluZy4uLiIsCisJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwkvKiBHZXQgdGhlIG9sZCBhZGRyZXNzICovCisJbWVtY3B5KG1hY19pbmZvX29sZC5tYWNhZGRyLCBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKKworCS8qIENvcHkgdGhlIG5ldyBhZGRyZXNzICovCisJbWVtY3B5KG1hY19pbmZvX25ldy5tYWNhZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCS8qIEZpcnN0IGRlbGV0ZSB0aGUgb2xkIG1hYyBhZGRyZXNzIGZyb20gYWxsIHRoZSB2cGF0aHMKKwlhcyB3ZSBjYW4ndCBzcGVjaWZ5IHRoZSBpbmRleCB3aGlsZSBhZGRpbmcgbmV3IG1hYyBhZGRyZXNzICovCisJZm9yICh2cGF0aF9pZHggPSAwOyB2cGF0aF9pZHggPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBhdGhfaWR4KyspIHsKKwkJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cGF0aF9pZHhdOworCQlpZiAoIXZwYXRoLT5pc19vcGVuKSB7CisJCQkvKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGlzIGludGVyZmFjZSBpcyBhZGRlZC9yZW1vdmVkCisJCQl0byB0aGUgYm9uZGluZyBpbnRlcmZhY2UuIERlbGV0ZSB0aGlzIHN0YXRpb24gYWRkcmVzcworCQkJZnJvbSB0aGUgbGlua2VkIGxpc3QgKi8KKwkJCXZ4Z2VfbWFjX2xpc3RfZGVsKHZwYXRoLCAmbWFjX2luZm9fb2xkKTsKKworCQkJLyogQWRkIHRoaXMgbmV3IGFkZHJlc3MgdG8gdGhlIGxpbmtlZCBsaXN0CisJCQlmb3IgbGF0ZXIgcmVzdG9yaW5nICovCisJCQl2eGdlX21hY19saXN0X2FkZCh2cGF0aCwgJm1hY19pbmZvX25ldyk7CisKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIERlbGV0ZSB0aGUgc3RhdGlvbiBhZGRyZXNzICovCisJCW1hY19pbmZvX29sZC52cGF0aF9ubyA9IHZwYXRoX2lkeDsKKwkJc3RhdHVzID0gdnhnZV9kZWxfbWFjX2FkZHIodmRldiwgJm1hY19pbmZvX29sZCk7CisJfQorCisJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKSB7CisJCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisJfQorCisJLyogU2V0IHRoaXMgbWFjIGFkZHJlc3MgdG8gYWxsIHRoZSB2cGF0aHMgKi8KKwlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cGF0aF9pZHgrKykgeworCQltYWNfaW5mb19uZXcudnBhdGhfbm8gPSB2cGF0aF9pZHg7CisJCW1hY19pbmZvX25ldy5zdGF0ZSA9IFZYR0VfTExfTUFDX0FERFJfSU5fREFfVEFCTEU7CisJCXN0YXR1cyA9IHZ4Z2VfYWRkX21hY19hZGRyKHZkZXYsICZtYWNfaW5mb19uZXcpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV92cGF0aF9pbnRyX2VuYWJsZQorICogQHZkZXY6IHBvaW50ZXIgdG8gdmRldgorICogQHZwX2lkOiB2cGF0aCBmb3Igd2hpY2ggdG8gZW5hYmxlIHRoZSBpbnRlcnJ1cHRzCisgKgorICogRW5hYmxlcyB0aGUgaW50ZXJydXB0cyBmb3IgdGhlIHZwYXRoCisqLwordm9pZCB2eGdlX3ZwYXRoX2ludHJfZW5hYmxlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgdnBfaWQpCit7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cF9pZF07CisJaW50IG1zaXhfaWQsIGFsYXJtX21zaXhfaWQ7CisJaW50IHRpbV9tc2l4X2lkWzRdID0ge1swIC4uLjNdID0gMH07CisKKwl2eGdlX2h3X3ZwYXRoX2ludHJfZW5hYmxlKHZwYXRoLT5oYW5kbGUpOworCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gSU5UQSkKKwkJdnhnZV9od192cGF0aF9pbnRhX3VubWFza190eF9yeCh2cGF0aC0+aGFuZGxlKTsKKwllbHNlIHsKKwkJbXNpeF9pZCA9IHZwX2lkICogVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRTsKKwkJYWxhcm1fbXNpeF9pZCA9CisJCQlWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFICogdmRldi0+bm9fb2ZfdnBhdGggLSAyOworCisJCXRpbV9tc2l4X2lkWzBdID0gbXNpeF9pZDsKKwkJdGltX21zaXhfaWRbMV0gPSBtc2l4X2lkICsgMTsKKwkJdnhnZV9od192cGF0aF9tc2l4X3NldCh2cGF0aC0+aGFuZGxlLCB0aW1fbXNpeF9pZCwKKwkJCWFsYXJtX21zaXhfaWQpOworCisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2sodnBhdGgtPmhhbmRsZSwgbXNpeF9pZCk7CisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2sodnBhdGgtPmhhbmRsZSwgbXNpeF9pZCArIDEpOworCisJCS8qIGVuYWJsZSB0aGUgYWxhcm0gdmVjdG9yICovCisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2sodnBhdGgtPmhhbmRsZSwgYWxhcm1fbXNpeF9pZCk7CisJfQorfQorCisvKgorICogdnhnZV92cGF0aF9pbnRyX2Rpc2FibGUKKyAqIEB2ZGV2OiBwb2ludGVyIHRvIHZkZXYKKyAqIEB2cF9pZDogdnBhdGggZm9yIHdoaWNoIHRvIGRpc2FibGUgdGhlIGludGVycnVwdHMKKyAqCisgKiBEaXNhYmxlcyB0aGUgaW50ZXJydXB0cyBmb3IgdGhlIHZwYXRoCisqLwordm9pZCB2eGdlX3ZwYXRoX2ludHJfZGlzYWJsZShzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IHZwX2lkKQoreworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBfaWRdOworCWludCBtc2l4X2lkOworCisJdnhnZV9od192cGF0aF9pbnRyX2Rpc2FibGUodnBhdGgtPmhhbmRsZSk7CisKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSA9PSBJTlRBKQorCQl2eGdlX2h3X3ZwYXRoX2ludGFfbWFza190eF9yeCh2cGF0aC0+aGFuZGxlKTsKKwllbHNlIHsKKwkJbXNpeF9pZCA9IHZwX2lkICogVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRTsKKwkJdnhnZV9od192cGF0aF9tc2l4X21hc2sodnBhdGgtPmhhbmRsZSwgbXNpeF9pZCk7CisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF9tYXNrKHZwYXRoLT5oYW5kbGUsIG1zaXhfaWQgKyAxKTsKKworCQkvKiBkaXNhYmxlIHRoZSBhbGFybSB2ZWN0b3IgKi8KKwkJbXNpeF9pZCA9IFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUgKiB2ZGV2LT5ub19vZl92cGF0aCAtIDI7CisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF9tYXNrKHZwYXRoLT5oYW5kbGUsIG1zaXhfaWQpOworCX0KK30KKworLyoKKyAqIHZ4Z2VfcmVzZXRfdnBhdGgKKyAqIEB2ZGV2OiBwb2ludGVyIHRvIHZkZXYKKyAqIEB2cF9pZDogdnBhdGggdG8gcmVzZXQKKyAqCisgKiBSZXNldHMgdGhlIHZwYXRoCisqLworc3RhdGljIGludCB2eGdlX3Jlc2V0X3ZwYXRoKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgdnBfaWQpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCWludCByZXQgPSAwOworCisJLyogY2hlY2sgaWYgZGV2aWNlIGlzIGRvd24gYWxyZWFkeSAqLworCWlmICh1bmxpa2VseSghaXNfdnhnZV9jYXJkX3VwKHZkZXYpKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBpcyBkZXZpY2UgcmVzZXQgYWxyZWFkeSBzY2hlZHVsZWQgKi8KKwlpZiAodGVzdF9iaXQoX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQsICZ2ZGV2LT5zdGF0ZSkpCisJCXJldHVybiAwOworCisJaWYgKHZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKSB7CisJCWlmICh2eGdlX2h3X3ZwYXRoX3Jlc2V0KHZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKQorCQkJCT09IFZYR0VfSFdfT0spIHsKKwkJCWlmIChpc192eGdlX2NhcmRfdXAodmRldikgJiYKKwkJCQl2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldCgKKwkJCQkJdmRldi0+dnBhdGhzW3ZwX2lkXS5oYW5kbGUpCisJCQkJCSE9IFZYR0VfSFdfT0spIHsKKwkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSJ2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldCIKKwkJCQkJImZhaWxlZCBmb3IgdnBhdGg6JWQiLCB2cF9pZCk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkidnhnZV9od192cGF0aF9yZXNldCBmYWlsZWQgZm9yIgorCQkJCSJ2cGF0aDolZCIsIHZwX2lkKTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJfSBlbHNlCisJCXJldHVybiBWWEdFX0hXX0ZBSUw7CisKKwl2eGdlX3Jlc3RvcmVfdnBhdGhfbWFjX2FkZHIoJnZkZXYtPnZwYXRoc1t2cF9pZF0pOworCXZ4Z2VfcmVzdG9yZV92cGF0aF92aWRfdGFibGUoJnZkZXYtPnZwYXRoc1t2cF9pZF0pOworCisJLyogRW5hYmxlIGFsbCBicm9hZGNhc3QgKi8KKwl2eGdlX2h3X3ZwYXRoX2JjYXN0X2VuYWJsZSh2ZGV2LT52cGF0aHNbdnBfaWRdLmhhbmRsZSk7CisKKwkvKiBFbmFibGUgdGhlIGludGVycnVwdHMgKi8KKwl2eGdlX3ZwYXRoX2ludHJfZW5hYmxlKHZkZXYsIHZwX2lkKTsKKworCXNtcF93bWIoKTsKKworCS8qIEVuYWJsZSB0aGUgZmxvdyBvZiB0cmFmZmljIHRocm91Z2ggdGhlIHZwYXRoICovCisJdnhnZV9od192cGF0aF9lbmFibGUodmRldi0+dnBhdGhzW3ZwX2lkXS5oYW5kbGUpOworCisJc21wX3dtYigpOworCXZ4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfaW5pdCh2ZGV2LT52cGF0aHNbdnBfaWRdLmhhbmRsZSk7CisJdmRldi0+dnBhdGhzW3ZwX2lkXS5yaW5nLmxhc3Rfc3RhdHVzID0gVlhHRV9IV19PSzsKKworCS8qIFZwYXRoIHJlc2V0IGRvbmUgKi8KKwljbGVhcl9iaXQodnBfaWQsICZ2ZGV2LT52cF9yZXNldCk7CisKKwkvKiBTdGFydCB0aGUgdnBhdGggcXVldWUgKi8KKwl2eGdlX3dha2VfdHhfcXVldWUoJnZkZXYtPnZwYXRoc1t2cF9pZF0uZmlmbywgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRvX3Z4Z2VfcmVzZXQoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGludCBldmVudCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlpbnQgcmV0ID0gMCwgdnBfaWQsIGk7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJaWYgKChldmVudCA9PSBWWEdFX0xMX0ZVTExfUkVTRVQpIHx8IChldmVudCA9PSBWWEdFX0xMX1NUQVJUX1JFU0VUKSkgeworCQkvKiBjaGVjayBpZiBkZXZpY2UgaXMgZG93biBhbHJlYWR5ICovCisJCWlmICh1bmxpa2VseSghaXNfdnhnZV9jYXJkX3VwKHZkZXYpKSkKKwkJCXJldHVybiAwOworCisJCS8qIGlzIHJlc2V0IGFscmVhZHkgc2NoZWR1bGVkICovCisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fVlhHRV9TVEFURV9SRVNFVF9DQVJELCAmdmRldi0+c3RhdGUpKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgeworCQkvKiB3YWl0IGZvciBhbGwgdGhlIHZwYXRoIHJlc2V0IHRvIGNvbXBsZXRlICovCisJCWZvciAodnBfaWQgPSAwOyB2cF9pZCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cF9pZCsrKSB7CisJCQl3aGlsZSAodGVzdF9iaXQodnBfaWQsICZ2ZGV2LT52cF9yZXNldCkpCisJCQkJbXNsZWVwKDUwKTsKKwkJfQorCisJCS8qIGlmIGV4ZWN1dGlvbiBtb2RlIGlzIHNldCB0byBkZWJ1ZywgZG9uJ3QgcmVzZXQgdGhlIGFkYXB0ZXIgKi8KKwkJaWYgKHVubGlrZWx5KHZkZXYtPmV4ZWNfbW9kZSkpIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IGV4ZWN1dGlvbiBtb2RlIGlzIGRlYnVnLCByZXR1cm5pbmcuLiIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKKwkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB7CisJCXZ4Z2VfaHdfZGV2aWNlX2ludHJfZGlzYWJsZSh2ZGV2LT5kZXZoKTsKKworCQlzd2l0Y2ggKHZkZXYtPmNyaWNfZXJyX2V2ZW50KSB7CisJCWNhc2UgVlhHRV9IV19FVkVOVF9VTktOT1dOOgorCQkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiZmF0YWw6ICVzOiBEaXNhYmxpbmcgZGV2aWNlIGR1ZSB0byIKKwkJCQkidW5rbm93biBlcnJvciIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDsKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX1JFU0VUX1NUQVJUOgorCQkJYnJlYWs7CisJCWNhc2UgVlhHRV9IV19FVkVOVF9SRVNFVF9DT01QTEVURToKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX0xJTktfRE9XTjoKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX0xJTktfVVA6CisJCWNhc2UgVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVEOgorCQljYXNlIFZYR0VfSFdfRVZFTlRfRUNDRVJSOgorCQljYXNlIFZYR0VfSFdfRVZFTlRfTVJQQ0lNX0VDQ0VSUjoKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQljYXNlIFZYR0VfSFdfRVZFTlRfRklGT19FUlI6CisJCWNhc2UgVlhHRV9IV19FVkVOVF9WUEFUSF9FUlI6CisJCQlicmVhazsKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX0NSSVRJQ0FMX0VSUjoKKwkJCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJImZhdGFsOiAlczogRGlzYWJsaW5nIGRldmljZSBkdWUgdG8iCisJCQkJInNlcmlvdXMgZXJyb3IiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQkJLyogU09QIG9yIGRldmljZSByZXNldCByZXF1aXJlZCAqLworCQkJLyogVGhpcyBldmVudCBpcyBub3QgY3VycmVudGx5IHVzZWQgKi8KKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQljYXNlIFZYR0VfSFdfRVZFTlRfU0VSUjoKKwkJCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJImZhdGFsOiAlczogRGlzYWJsaW5nIGRldmljZSBkdWUgdG8iCisJCQkJInNlcmlvdXMgZXJyb3IiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCWNhc2UgVlhHRV9IV19FVkVOVF9TUlBDSU1fU0VSUjoKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX01SUENJTV9TRVJSOgorCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCWNhc2UgVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRToKKwkJCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJImZhdGFsOiAlczogRGlzYWJsaW5nIGRldmljZSBkdWUgdG8iCisJCQkJInNsb3QgZnJlZXplIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisKKwkJfQorCX0KKworCWlmICgoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB8fCAoZXZlbnQgPT0gVlhHRV9MTF9TVEFSVF9SRVNFVCkpCisJCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisKKwlpZiAoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB7CisJCXN0YXR1cyA9IHZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyh2ZGV2KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJImZhdGFsOiAlczogY2FuIG5vdCByZXNldCB2cGF0aHMiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoZXZlbnQgPT0gVlhHRV9MTF9DT01QTF9SRVNFVCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJCWlmICh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKSB7CisJCQkJaWYgKHZ4Z2VfaHdfdnBhdGhfcmVjb3Zlcl9mcm9tX3Jlc2V0KAorCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKQorCQkJCQkJIT0gVlhHRV9IV19PSykgeworCQkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCQkidnhnZV9od192cGF0aF9yZWNvdmVyXyIKKwkJCQkJCSJmcm9tX3Jlc2V0IGZhaWxlZCBmb3IgdnBhdGg6ICIKKwkJCQkJCSIlZCIsIGkpOworCQkJCQlyZXQgPSAtRVBFUk07CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSJ2eGdlX2h3X3ZwYXRoX3Jlc2V0IGZhaWxlZCBmb3IgIgorCQkJCQkJInZwYXRoOiVkIiwgaSk7CisJCQkJCXJldCA9IC1FUEVSTTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCX0KKworCWlmICgoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB8fCAoZXZlbnQgPT0gVlhHRV9MTF9DT01QTF9SRVNFVCkpIHsKKwkJLyogUmVwcm9ncmFtIHRoZSBEQSB0YWJsZSB3aXRoIHBvcHVsYXRlZCBtYWMgYWRkcmVzc2VzICovCisJCWZvciAodnBfaWQgPSAwOyB2cF9pZCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cF9pZCsrKSB7CisJCQl2eGdlX3Jlc3RvcmVfdnBhdGhfbWFjX2FkZHIoJnZkZXYtPnZwYXRoc1t2cF9pZF0pOworCQkJdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZSgmdmRldi0+dnBhdGhzW3ZwX2lkXSk7CisJCX0KKworCQkvKiBlbmFibGUgdnBhdGggaW50ZXJydXB0cyAqLworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJCXZ4Z2VfdnBhdGhfaW50cl9lbmFibGUodmRldiwgaSk7CisKKwkJdnhnZV9od19kZXZpY2VfaW50cl9lbmFibGUodmRldi0+ZGV2aCk7CisKKwkJc21wX3dtYigpOworCisJCS8qIEluZGljYXRlIGNhcmQgdXAgKi8KKwkJc2V0X2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKKworCQkvKiBHZXQgdGhlIHRyYWZmaWMgdG8gZmxvdyB0aHJvdWdoIHRoZSB2cGF0aHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCXZ4Z2VfaHdfdnBhdGhfZW5hYmxlKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJc21wX3dtYigpOworCQkJdnhnZV9od192cGF0aF9yeF9kb29yYmVsbF9pbml0KHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQl9CisKKwkJdnhnZV93YWtlX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwl9CisKK291dDoKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJLyogSW5kaWNhdGUgcmVzZXQgZG9uZSAqLworCWlmICgoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB8fCAoZXZlbnQgPT0gVlhHRV9MTF9DT01QTF9SRVNFVCkpCisJCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfUkVTRVRfQ0FSRCwgJnZkZXYtPnN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdnhnZV9yZXNldAorICogQHZkZXY6IHBvaW50ZXIgdG8gbGwgZGV2aWNlCisgKgorICogZHJpdmVyIG1heSByZXNldCB0aGUgY2hpcCBvbiBldmVudHMgb2Ygc2VyciwgZWNjZXJyLCBldGMKKyAqLworaW50IHZ4Z2VfcmVzZXQoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJZG9fdnhnZV9yZXNldCh2ZGV2LCBWWEdFX0xMX0ZVTExfUkVTRVQpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHZ4Z2VfcG9sbCAtIFJlY2VpdmUgaGFuZGxlciB3aGVuIFJlY2VpdmUgUG9sbGluZyBpcyB1c2VkLgorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqIEBidWRnZXQ6IE51bWJlciBvZiBwYWNrZXRzIGJ1ZGdldGVkIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGlzIGl0ZXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbWVzIGludG8gcGljdHVyZSBvbmx5IGlmIFJlY2VpdmUgc2lkZSBpcyBiZWluZyBoYW5kbGVkCisgKiB0aHJvdWdoIHBvbGxpbmcgKGNhbGxlZCBOQVBJIGluIGxpbnV4KS4gSXQgbW9zdGx5IGRvZXMgd2hhdCB0aGUgbm9ybWFsCisgKiBSeCBpbnRlcnJ1cHQgaGFuZGxlciBkb2VzIGluIHRlcm1zIG9mIGRlc2NyaXB0b3IgYW5kIHBhY2tldCBwcm9jZXNzaW5nCisgKiBidXQgbm90IGluIGFuIGludGVycnVwdCBjb250ZXh0LiBBbHNvIGl0IHdpbGwgcHJvY2VzcyBhIHNwZWNpZmllZCBudW1iZXIKKyAqIG9mIHBhY2tldHMgYXQgbW9zdCBpbiBvbmUgaXRlcmF0aW9uLiBUaGlzIHZhbHVlIGlzIHBhc3NlZCBkb3duIGJ5IHRoZQorICoga2VybmVsIGFzIHRoZSBmdW5jdGlvbiBhcmd1bWVudCAnYnVkZ2V0Jy4KKyAqLworc3RhdGljIGludCB2eGdlX3BvbGxfbXNpeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZyA9CisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgdnhnZV9yaW5nLCBuYXBpKTsKKwlpbnQgYnVkZ2V0X29yZyA9IGJ1ZGdldDsKKwlyaW5nLT5idWRnZXQgPSBidWRnZXQ7CisKKwl2eGdlX2h3X3ZwYXRoX3BvbGxfcngocmluZy0+aGFuZGxlKTsKKworCWlmIChyaW5nLT5wa3RzX3Byb2Nlc3NlZCA8IGJ1ZGdldF9vcmcpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJLyogUmUgZW5hYmxlIHRoZSBSeCBpbnRlcnJ1cHRzIGZvciB0aGUgdnBhdGggKi8KKwkJdnhnZV9od19jaGFubmVsX21zaXhfdW5tYXNrKAorCQkJCShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKilyaW5nLT5oYW5kbGUsCisJCQkJcmluZy0+cnhfdmVjdG9yX25vKTsKKwl9CisKKwlyZXR1cm4gcmluZy0+cGt0c19wcm9jZXNzZWQ7Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9wb2xsX2ludGEoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCB2eGdlZGV2LCBuYXBpKTsKKwlpbnQgcGt0c19wcm9jZXNzZWQgPSAwOworCWludCBpOworCWludCBidWRnZXRfb3JnID0gYnVkZ2V0OworCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmc7CisKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopCisJCXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXJpbmcgPSAmdmRldi0+dnBhdGhzW2ldLnJpbmc7CisJCXJpbmctPmJ1ZGdldCA9IGJ1ZGdldDsKKwkJdnhnZV9od192cGF0aF9wb2xsX3J4KHJpbmctPmhhbmRsZSk7CisJCXBrdHNfcHJvY2Vzc2VkICs9IHJpbmctPnBrdHNfcHJvY2Vzc2VkOworCQlidWRnZXQgLT0gcmluZy0+cGt0c19wcm9jZXNzZWQ7CisJCWlmIChidWRnZXQgPD0gMCkKKwkJCWJyZWFrOworCX0KKworCVZYR0VfQ09NUExFVEVfQUxMX1RYKHZkZXYpOworCisJaWYgKHBrdHNfcHJvY2Vzc2VkIDwgYnVkZ2V0X29yZykgeworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQkvKiBSZSBlbmFibGUgdGhlIFJ4IGludGVycnVwdHMgZm9yIHRoZSByaW5nICovCisJCXZ4Z2VfaHdfZGV2aWNlX3VubWFza19hbGwoaGxkZXYpOworCQl2eGdlX2h3X2RldmljZV9mbHVzaF9pbyhobGRldik7CisJfQorCisJcmV0dXJuIHBrdHNfcHJvY2Vzc2VkOworfQorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKy8qKgorICogdnhnZV9uZXRwb2xsIC0gbmV0cG9sbCBldmVudCBoYW5kbGVyIGVudHJ5IHBvaW50CisgKiBAZGV2IDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHVwcGVyIGxheWVyIHRvIGNoZWNrIGZvciBldmVudHMgb24gdGhlCisgKiBpbnRlcmZhY2UgaW4gc2l0dWF0aW9ucyB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gSXQgaXMgdXNlZCBmb3IKKyAqIHNwZWNpZmljIGluLWtlcm5lbCBuZXR3b3JraW5nIHRhc2tzLCBzdWNoIGFzIHJlbW90ZSBjb25zb2xlcyBhbmQga2VybmVsCisgKiBkZWJ1Z2dpbmcgb3ZlciB0aGUgbmV0d29yayAoZXhhbXBsZSBuZXRkdW1wIGluIFJlZEhhdCkuCisgKi8KK3N0YXRpYyB2b2lkIHZ4Z2VfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXY7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKilwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUodmRldi0+cGRldikpCisJCXJldHVybjsKKworCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwl2eGdlX2h3X2RldmljZV9jbGVhcl90eF9yeChobGRldik7CisKKwl2eGdlX2h3X2RldmljZV9jbGVhcl90eF9yeChobGRldik7CisJVlhHRV9DT01QTEVURV9BTExfUlgodmRldik7CisJVlhHRV9DT01QTEVURV9BTExfVFgodmRldik7CisKKwllbmFibGVfaXJxKGRldi0+aXJxKTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuOworfQorI2VuZGlmCisKKy8qIFJUSCBjb25maWd1cmF0aW9uICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3J0aF9jb25maWd1cmUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX2h3X3J0aF9oYXNoX3R5cGVzIGhhc2hfdHlwZXM7CisJdTggaXRhYmxlWzI1Nl0gPSB7MH07IC8qIGluZGlyZWN0aW9uIHRhYmxlICovCisJdTggbXRhYmxlWzI1Nl0gPSB7MH07IC8qIENQVSB0byB2cGF0aCBtYXBwaW5nICAqLworCWludCBpbmRleDsKKworCS8qCisJICogRmlsbGluZworCSAqIAktIGl0YWJsZSB3aXRoIGJ1Y2tldCBudW1iZXJzCisJICogCS0gbXRhYmxlIHdpdGggYnVja2V0LXRvLXZwYXRoIG1hcHBpbmcKKwkgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAoMSA8PCB2ZGV2LT5jb25maWcucnRoX2JrdF9zeik7IGluZGV4KyspIHsKKwkJaXRhYmxlW2luZGV4XSA9IGluZGV4OworCQltdGFibGVbaW5kZXhdID0gaW5kZXggJSB2ZGV2LT5ub19vZl92cGF0aDsKKwl9CisKKwkvKiBGaWxsIFJUSCBoYXNoIHR5cGVzICovCisJaGFzaF90eXBlcy5oYXNoX3R5cGVfdGNwaXB2NF9lbiAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfdGNwaXB2NDsKKwloYXNoX3R5cGVzLmhhc2hfdHlwZV9pcHY0X2VuICAgICAgPSB2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV9pcHY0OworCWhhc2hfdHlwZXMuaGFzaF90eXBlX3RjcGlwdjZfZW4gICA9IHZkZXYtPmNvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjY7CisJaGFzaF90eXBlcy5oYXNoX3R5cGVfaXB2Nl9lbiAgICAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NjsKKwloYXNoX3R5cGVzLmhhc2hfdHlwZV90Y3BpcHY2ZXhfZW4gPQorCQkJCQl2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY2ZXg7CisJaGFzaF90eXBlcy5oYXNoX3R5cGVfaXB2NmV4X2VuICAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NmV4OworCisJLyogc2V0IGluZGlyZWN0aW9uIHRhYmxlLCBidWNrZXQtdG8tdnBhdGggbWFwcGluZyAqLworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9pdGFibGVfc2V0KHZkZXYtPnZwX2hhbmRsZXMsCisJCQkJCQl2ZGV2LT5ub19vZl92cGF0aCwKKwkJCQkJCW10YWJsZSwgaXRhYmxlLAorCQkJCQkJdmRldi0+Y29uZmlnLnJ0aF9ia3Rfc3opOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiUlRIIGluZGlyZWN0aW9uIHRhYmxlIGNvbmZpZ3VyYXRpb24gZmFpbGVkICIKKwkJCSJmb3IgdnBhdGg6JWQiLCB2ZGV2LT52cGF0aHNbMF0uZGV2aWNlX2lkKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKgorCSogQmVjYXVzZSB0aGUgaXRhYmxlX3NldCgpIG1ldGhvZCB1c2VzIHRoZSBhY3RpdmVfdGFibGUgZmllbGQKKwkqIGZvciB0aGUgdGFyZ2V0IHZpcnR1YWwgcGF0aCB0aGUgUlRIIGNvbmZpZyBzaG91bGQgYmUgdXBkYXRlZAorCSogZm9yIGFsbCBWUEFUSHMuIFRoZSBoL3cgb25seSB1c2VzIHRoZSBsb3dlc3QgbnVtYmVyZWQgVlBBVEgKKwkqIHdoZW4gc3RlZXJpbmcgZnJhbWVzLgorCSovCisJIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpbmRleCsrKSB7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9zZXQoCisJCQkJdmRldi0+dnBhdGhzW2luZGV4XS5oYW5kbGUsCisJCQkJdmRldi0+Y29uZmlnLnJ0aF9hbGdvcml0aG0sCisJCQkJJmhhc2hfdHlwZXMsCisJCQkJdmRldi0+Y29uZmlnLnJ0aF9ia3Rfc3opOworCisJCSBpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiUlRIIGNvbmZpZ3VyYXRpb24gZmFpbGVkIGZvciB2cGF0aDolZCIsCisJCQkJdmRldi0+dnBhdGhzW2luZGV4XS5kZXZpY2VfaWQpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJIH0KKwkgfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHZ4Z2VfbWFjX2xpc3RfYWRkKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwgc3RydWN0IG1hY0luZm8gKm1hYykKK3sKKwlzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKm5ld19tYWNfZW50cnk7CisJdTggKm1hY19hZGRyZXNzID0gTlVMTDsKKworCWlmICh2cGF0aC0+bWFjX2FkZHJfY250ID49IFZYR0VfTUFYX0xFQVJOX01BQ19BRERSX0NOVCkKKwkJcmV0dXJuIFRSVUU7CisKKwluZXdfbWFjX2VudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFuZXdfbWFjX2VudHJ5KSB7CisJCXZ4Z2VfZGVidWdfbWVtKFZYR0VfRVJSLAorCQkJIiVzOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiLAorCQkJVlhHRV9EUklWRVJfTkFNRSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlsaXN0X2FkZCgmbmV3X21hY19lbnRyeS0+aXRlbSwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KTsKKworCS8qIENvcHkgdGhlIG5ldyBtYWMgYWRkcmVzcyB0byB0aGUgbGlzdCAqLworCW1hY19hZGRyZXNzID0gKHU4ICopJm5ld19tYWNfZW50cnktPm1hY2FkZHI7CisJbWVtY3B5KG1hY19hZGRyZXNzLCBtYWMtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKworCW5ld19tYWNfZW50cnktPnN0YXRlID0gbWFjLT5zdGF0ZTsKKwl2cGF0aC0+bWFjX2FkZHJfY250Kys7CisKKwkvKiBJcyB0aGlzIGEgbXVsdGljYXN0IGFkZHJlc3MgKi8KKwlpZiAoMHgwMSAmIG1hYy0+bWFjYWRkclswXSkKKwkJdnBhdGgtPm1jYXN0X2FkZHJfY250Kys7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyogQWRkIGEgbWFjIGFkZHJlc3MgdG8gREEgdGFibGUgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9hZGRfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHN0cnVjdCBtYWNJbmZvICptYWMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkX21vZGUgZHVwbGljYXRlX21vZGU7CisKKwlpZiAoMHgwMSAmIG1hYy0+bWFjYWRkclswXSkgLyogbXVsdGljYXN0IGFkZHJlc3MgKi8KKwkJZHVwbGljYXRlX21vZGUgPSBWWEdFX0hXX1ZQQVRIX01BQ19BRERSX0FERF9EVVBMSUNBVEU7CisJZWxzZQorCQlkdXBsaWNhdGVfbW9kZSA9IFZYR0VfSFdfVlBBVEhfTUFDX0FERFJfUkVQTEFDRV9EVVBMSUNBVEU7CisKKwl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbbWFjLT52cGF0aF9ub107CisJc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGQodnBhdGgtPmhhbmRsZSwgbWFjLT5tYWNhZGRyLAorCQkJCQkJbWFjLT5tYWNtYXNrLCBkdXBsaWNhdGVfbW9kZSk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJEQSBjb25maWcgYWRkIGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAorCQkJdnBhdGgtPmRldmljZV9pZCk7CisJfSBlbHNlCisJCWlmIChGQUxTRSA9PSB2eGdlX21hY19saXN0X2FkZCh2cGF0aCwgbWFjKSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCB2eGdlX21hY19saXN0X2RlbChzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgsIHN0cnVjdCBtYWNJbmZvICptYWMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpuZXh0OworCXU2NCBkZWxfbWFjID0gMDsKKwl1OCAqbWFjX2FkZHJlc3MgPSAodTggKikgKCZkZWxfbWFjKTsKKworCS8qIENvcHkgdGhlIG1hYyBhZGRyZXNzIHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0ICovCisJbWVtY3B5KG1hY19hZGRyZXNzLCBtYWMtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KSB7CisJCWlmICgoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+bWFjYWRkciA9PSBkZWxfbWFjKSB7CisJCQlsaXN0X2RlbChlbnRyeSk7CisJCQlrZnJlZSgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpOworCQkJdnBhdGgtPm1hY19hZGRyX2NudC0tOworCisJCQkvKiBJcyB0aGlzIGEgbXVsdGljYXN0IGFkZHJlc3MgKi8KKwkJCWlmICgweDAxICYgbWFjLT5tYWNhZGRyWzBdKQorCQkJCXZwYXRoLT5tY2FzdF9hZGRyX2NudC0tOworCQkJcmV0dXJuIFRSVUU7CisJCX0KKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisvKiBkZWxldGUgYSBtYWMgYWRkcmVzcyBmcm9tIERBIHRhYmxlICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfZGVsX21hY19hZGRyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBzdHJ1Y3QgbWFjSW5mbyAqbWFjKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CisKKwl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbbWFjLT52cGF0aF9ub107CisJc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9kZWxldGUodnBhdGgtPmhhbmRsZSwgbWFjLT5tYWNhZGRyLAorCQkJCQkJbWFjLT5tYWNtYXNrKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIkRBIGNvbmZpZyBkZWxldGUgZW50cnkgZmFpbGVkIGZvciB2cGF0aDolZCIsCisJCQl2cGF0aC0+ZGV2aWNlX2lkKTsKKwl9IGVsc2UKKwkJdnhnZV9tYWNfbGlzdF9kZWwodnBhdGgsIG1hYyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogbGlzdCBhbGwgbWFjIGFkZHJlc3NlcyBmcm9tIERBIHRhYmxlICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitzdGF0aWMgdnhnZV9zZWFyY2hfbWFjX2FkZHJfaW5fZGFfdGFibGUoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoLAorCQkJCQlzdHJ1Y3QgbWFjSW5mbyAqbWFjKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl1bnNpZ25lZCBjaGFyIG1hY21hc2tbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgbWFjYWRkcltFVEhfQUxFTl07CisKKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldCh2cGF0aC0+aGFuZGxlLAorCQkJCW1hY2FkZHIsIG1hY21hc2spOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiREEgY29uZmlnIGxpc3QgZW50cnkgZmFpbGVkIGZvciB2cGF0aDolZCIsCisJCQl2cGF0aC0+ZGV2aWNlX2lkKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl3aGlsZSAobWVtY21wKG1hYy0+bWFjYWRkciwgbWFjYWRkciwgRVRIX0FMRU4pKSB7CisKKwkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXRfbmV4dCh2cGF0aC0+aGFuZGxlLAorCQkJCW1hY2FkZHIsIG1hY21hc2spOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBTdG9yZSBhbGwgdmxhbiBpZHMgZnJvbSB0aGUgbGlzdCB0byB0aGUgdmlkIHRhYmxlICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcmVzdG9yZV92cGF0aF92aWRfdGFibGUoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IHZwYXRoLT52ZGV2OworCXUxNiB2aWQ7CisKKwlpZiAodmRldi0+dmxncnAgJiYgdnBhdGgtPmlzX29wZW4pIHsKKworCQlmb3IgKHZpZCA9IDA7IHZpZCA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyB2aWQrKykgeworCQkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UodmRldi0+dmxncnAsIHZpZCkpCisJCQkJY29udGludWU7CisJCQkvKiBBZGQgdGhlc2UgdmxhbiB0byB0aGUgdmlkIHRhYmxlICovCisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3ZpZF9hZGQodnBhdGgtPmhhbmRsZSwgdmlkKTsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFN0b3JlIGFsbCBtYWMgYWRkcmVzc2VzIGZyb20gdGhlIGxpc3QgdG8gdGhlIERBIHRhYmxlICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcmVzdG9yZV92cGF0aF9tYWNfYWRkcihzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBtYWNJbmZvIG1hY19pbmZvOworCXU4ICptYWNfYWRkcmVzcyA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpuZXh0OworCisJbWVtc2V0KCZtYWNfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtYWNJbmZvKSk7CisKKwlpZiAodnBhdGgtPmlzX29wZW4pIHsKKworCQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsICZ2cGF0aC0+bWFjX2FkZHJfbGlzdCkgeworCQkJbWFjX2FkZHJlc3MgPQorCQkJCSh1OCAqKSYKKwkJCQkoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+bWFjYWRkcjsKKwkJCW1lbWNweShtYWNfaW5mby5tYWNhZGRyLCBtYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCQkJKChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeSktPnN0YXRlID0KKwkJCQlWWEdFX0xMX01BQ19BRERSX0lOX0RBX1RBQkxFOworCQkJLyogZG9lcyB0aGlzIG1hYyBhZGRyZXNzIGFscmVhZHkgZXhpc3QgaW4gZGEgdGFibGU/ICovCisJCQlzdGF0dXMgPSB2eGdlX3NlYXJjaF9tYWNfYWRkcl9pbl9kYV90YWJsZSh2cGF0aCwKKwkJCQkmbWFjX2luZm8pOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQkJLyogQWRkIHRoaXMgbWFjIGFkZHJlc3MgdG8gdGhlIERBIHRhYmxlICovCisJCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGQoCisJCQkJCXZwYXRoLT5oYW5kbGUsIG1hY19pbmZvLm1hY2FkZHIsCisJCQkJCW1hY19pbmZvLm1hY21hc2ssCisJCQkJICAgIFZYR0VfSFdfVlBBVEhfTUFDX0FERFJfQUREX0RVUExJQ0FURSk7CisJCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJICAgICJEQSBhZGQgZW50cnkgZmFpbGVkIGZvciB2cGF0aDolZCIsCisJCQkJCSAgICB2cGF0aC0+ZGV2aWNlX2lkKTsKKwkJCQkJKChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeSktPnN0YXRlCisJCQkJCQk9IFZYR0VfTExfTUFDX0FERFJfSU5fTElTVDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiByZXNldCB2cGF0aHMgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXNldF9hbGxfdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBpOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQlpZiAodmRldi0+dnBhdGhzW2ldLmhhbmRsZSkgeworCQkJaWYgKHZ4Z2VfaHdfdnBhdGhfcmVzZXQodmRldi0+dnBhdGhzW2ldLmhhbmRsZSkKKwkJCQkJPT0gVlhHRV9IV19PSykgeworCQkJCWlmIChpc192eGdlX2NhcmRfdXAodmRldikgJiYKKwkJCQkJdnhnZV9od192cGF0aF9yZWNvdmVyX2Zyb21fcmVzZXQoCisJCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKQorCQkJCQkJIT0gVlhHRV9IV19PSykgeworCQkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCQkidnhnZV9od192cGF0aF9yZWNvdmVyXyIKKwkJCQkJCSJmcm9tX3Jlc2V0IGZhaWxlZCBmb3IgdnBhdGg6ICIKKwkJCQkJCSIlZCIsIGkpOworCQkJCQlyZXR1cm4gc3RhdHVzOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkidnhnZV9od192cGF0aF9yZXNldCBmYWlsZWQgZm9yICIKKwkJCQkJInZwYXRoOiVkIiwgaSk7CisJCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBjbG9zZSB2cGF0aHMgKi8KK3ZvaWQgdnhnZV9jbG9zZV92cGF0aHMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGludCBpbmRleCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSBpbmRleDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJaWYgKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUgJiYgdmRldi0+dnBhdGhzW2ldLmlzX29wZW4pIHsKKwkJCXZ4Z2VfaHdfdnBhdGhfY2xvc2UodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQl2ZGV2LT5zdGF0cy52cGF0aHNfb3Blbi0tOworCQl9CisJCXZkZXYtPnZwYXRoc1tpXS5pc19vcGVuID0gMDsKKwkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSAgPSBOVUxMOworCX0KK30KKworLyogb3BlbiB2cGF0aHMgKi8KK2ludCB2eGdlX29wZW5fdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWludCBpOworCXUzMiB2cF9pZCA9IDA7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfYXR0ciBhdHRyOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJdnhnZV9hc3NlcnQodmRldi0+dnBhdGhzW2ldLmlzX2NvbmZpZ3VyZWQpOworCQlhdHRyLnZwX2lkID0gdmRldi0+dnBhdGhzW2ldLmRldmljZV9pZDsKKwkJYXR0ci5maWZvX2F0dHIuY2FsbGJhY2sgPSB2eGdlX3htaXRfY29tcGw7CisJCWF0dHIuZmlmb19hdHRyLnR4ZGxfdGVybSA9IHZ4Z2VfdHhfdGVybTsKKwkJYXR0ci5maWZvX2F0dHIucGVyX3R4ZGxfc3BhY2UgPSBzaXplb2Yoc3RydWN0IHZ4Z2VfdHhfcHJpdik7CisJCWF0dHIuZmlmb19hdHRyLnVzZXJkYXRhID0gKHZvaWQgKikmdmRldi0+dnBhdGhzW2ldLmZpZm87CisKKwkJYXR0ci5yaW5nX2F0dHIuY2FsbGJhY2sgPSB2eGdlX3J4XzFiX2NvbXBsOworCQlhdHRyLnJpbmdfYXR0ci5yeGRfaW5pdCA9IHZ4Z2VfcnhfaW5pdGlhbF9yZXBsZW5pc2g7CisJCWF0dHIucmluZ19hdHRyLnJ4ZF90ZXJtID0gdnhnZV9yeF90ZXJtOworCQlhdHRyLnJpbmdfYXR0ci5wZXJfcnhkX3NwYWNlID0gc2l6ZW9mKHN0cnVjdCB2eGdlX3J4X3ByaXYpOworCQlhdHRyLnJpbmdfYXR0ci51c2VyZGF0YSA9ICh2b2lkICopJnZkZXYtPnZwYXRoc1tpXS5yaW5nOworCisJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLm5kZXYgPSB2ZGV2LT5uZGV2OworCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5wZGV2ID0gdmRldi0+cGRldjsKKwkJc3RhdHVzID0gdnhnZV9od192cGF0aF9vcGVuKHZkZXYtPmRldmgsICZhdHRyLAorCQkJCSYodmRldi0+dnBhdGhzW2ldLmhhbmRsZSkpOworCQlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKKwkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLmhhbmRsZSA9CisJCQkgICAgKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqKWF0dHIuZmlmb19hdHRyLnVzZXJkYXRhOworCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcuaGFuZGxlID0KKwkJCSAgICAoc3RydWN0IF9fdnhnZV9od19yaW5nICopYXR0ci5yaW5nX2F0dHIudXNlcmRhdGE7CisJCQl2ZGV2LT52cGF0aHNbaV0uZmlmby50eF9zdGVlcmluZ190eXBlID0KKwkJCQl2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZTsKKwkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLm5kZXYgPSB2ZGV2LT5uZGV2OworCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8ucGRldiA9IHZkZXYtPnBkZXY7CisJCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5pbmRpY2F0ZV9tYXhfcGt0cyA9CisJCQkJdmRldi0+Y29uZmlnLmZpZm9faW5kaWNhdGVfbWF4X3BrdHM7CisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5yeF92ZWN0b3Jfbm8gPSAwOworCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcucnhfY3N1bSA9IHZkZXYtPnJ4X2NzdW07CisJCQl2ZGV2LT52cGF0aHNbaV0uaXNfb3BlbiA9IDE7CisJCQl2ZGV2LT52cF9oYW5kbGVzW2ldID0gdmRldi0+dnBhdGhzW2ldLmhhbmRsZTsKKwkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLmdyb19lbmFibGUgPQorCQkJCQkJdmRldi0+Y29uZmlnLmdyb19lbmFibGU7CisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy52bGFuX3RhZ19zdHJpcCA9CisJCQkJCQl2ZGV2LT52bGFuX3RhZ19zdHJpcDsKKwkJCXZkZXYtPnN0YXRzLnZwYXRoc19vcGVuKys7CisJCX0gZWxzZSB7CisJCQl2ZGV2LT5zdGF0cy52cGF0aF9vcGVuX2ZhaWwrKzsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IHZwYXRoOiAlZCBmYWlsZWQgdG8gb3BlbiAiCisJCQkJIndpdGggc3RhdHVzOiAlZCIsCisJCQkgICAgdmRldi0+bmRldi0+bmFtZSwgdmRldi0+dnBhdGhzW2ldLmRldmljZV9pZCwKKwkJCQlzdGF0dXMpOworCQkJdnhnZV9jbG9zZV92cGF0aHModmRldiwgMCk7CisJCQlyZXR1cm4gLUVQRVJNOworCQl9CisKKwkJdnBfaWQgPQorCQkgICgoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKil2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKS0+CisJCSAgdnBhdGgtPnZwX2lkOworCQl2ZGV2LT52cGF0aHNfZGVwbG95ZWQgfD0gdnhnZV9tQklUKHZwX2lkKTsKKwl9CisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiAgdnhnZV9pc3JfbmFwaQorICogIEBpcnE6IHRoZSBpcnEgb2YgdGhlIGRldmljZS4KKyAqICBAZGV2X2lkOiBhIHZvaWQgcG9pbnRlciB0byB0aGUgaGxkZXYgc3RydWN0dXJlIG9mIHRoZSBUaXRhbiBkZXZpY2UKKyAqICBAcHRyZWdzOiBwb2ludGVyIHRvIHRoZSByZWdpc3RlcnMgcHVzaGVkIG9uIHRoZSBzdGFjay4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgSVNSIGhhbmRsZXIgb2YgdGhlIGRldmljZSB3aGVuIG5hcGkgaXMgZW5hYmxlZC4gSXQKKyAqICBpZGVudGlmaWVzIHRoZSByZWFzb24gZm9yIHRoZSBpbnRlcnJ1cHQgYW5kIGNhbGxzIHRoZSByZWxldmFudCBzZXJ2aWNlCisgKiAgcm91dGluZXMuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB2eGdlX2lzcl9uYXBpKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKWRldl9pZDsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXU2NCByZWFzb247CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwl2eGdlX2RlYnVnX2ludHIoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCWRldiA9IGhsZGV2LT5uZGV2OworCXZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUodmRldi0+cGRldikpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmICh1bmxpa2VseSghaXNfdnhnZV9jYXJkX3VwKHZkZXYpKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3RhdHVzID0gdnhnZV9od19kZXZpY2VfYmVnaW5faXJxKGhsZGV2LCB2ZGV2LT5leGVjX21vZGUsCisJCQkmcmVhc29uKTsKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9od19kZXZpY2VfbWFza19hbGwoaGxkZXYpOworCisJCWlmIChyZWFzb24gJgorCQkJVlhHRV9IV19USVRBTl9HRU5FUkFMX0lOVF9TVEFUVVNfVlBBVEhfVFJBRkZJQ19JTlQoCisJCQl2ZGV2LT52cGF0aHNfZGVwbG95ZWQgPj4KKwkJCSg2NCAtIFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFMpKSkgeworCisJCQl2eGdlX2h3X2RldmljZV9jbGVhcl90eF9yeChobGRldik7CisJCQluYXBpX3NjaGVkdWxlKCZ2ZGV2LT5uYXBpKTsKKwkJCXZ4Z2VfZGVidWdfaW50cihWWEdFX1RSQUNFLAorCQkJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0gZWxzZQorCQkJdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbChobGRldik7CisJfSBlbHNlIGlmICh1bmxpa2VseSgoc3RhdHVzID09IFZYR0VfSFdfRVJSX1ZQQVRIKSB8fAorCQkoc3RhdHVzID09IFZYR0VfSFdfRVJSX0NSSVRJQ0FMKSB8fAorCQkoc3RhdHVzID09IFZYR0VfSFdfRVJSX0ZJRk8pKSkgeworCQl2eGdlX2h3X2RldmljZV9tYXNrX2FsbChobGRldik7CisJCXZ4Z2VfaHdfZGV2aWNlX2ZsdXNoX2lvKGhsZGV2KTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0gZWxzZSBpZiAodW5saWtlbHkoc3RhdHVzID09IFZYR0VfSFdfRVJSX1NMT1RfRlJFRVpFKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJdnhnZV9kZWJ1Z19pbnRyKFZYR0VfVFJBQ0UsICIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIElSUV9OT05FOworfQorCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKworc3RhdGljIGlycXJldHVybl90Cit2eGdlX3R4X21zaXhfaGFuZGxlKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdnhnZV9maWZvICpmaWZvID0gKHN0cnVjdCB2eGdlX2ZpZm8gKilkZXZfaWQ7CisKKwlWWEdFX0NPTVBMRVRFX1ZQQVRIX1RYKGZpZm8pOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3Z4Z2VfcnhfbXNpeF9uYXBpX2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZyA9IChzdHJ1Y3QgdnhnZV9yaW5nICopZGV2X2lkOworCisJLyogTVNJWF9JRFggZm9yIFJ4IGlzIDEgKi8KKwl2eGdlX2h3X2NoYW5uZWxfbXNpeF9tYXNrKChzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKilyaW5nLT5oYW5kbGUsCisJCQkJCXJpbmctPnJ4X3ZlY3Rvcl9ubyk7CisKKwluYXBpX3NjaGVkdWxlKCZyaW5nLT5uYXBpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAordnhnZV9hbGFybV9tc2l4X2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaW50IGk7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gKHN0cnVjdCB2eGdlX3ZwYXRoICopZGV2X2lkOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gdnBhdGgtPnZkZXY7CisJaW50IGFsYXJtX21zaXhfaWQgPQorCQlWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFICogdmRldi0+bm9fb2ZfdnBhdGggLSAyOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJdnhnZV9od192cGF0aF9tc2l4X21hc2sodmRldi0+dnBhdGhzW2ldLmhhbmRsZSwKKwkJCWFsYXJtX21zaXhfaWQpOworCisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2Vzcyh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlLAorCQkJdmRldi0+ZXhlY19tb2RlKTsKKwkJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisKKwkJCXZ4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2sodmRldi0+dnBhdGhzW2ldLmhhbmRsZSwKKwkJCQlhbGFybV9tc2l4X2lkKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXZ4Z2VfZGVidWdfaW50cihWWEdFX0VSUiwKKwkJCSIlczogdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzIGZhaWxlZCAleCAiLAorCQkJVlhHRV9EUklWRVJfTkFNRSwgc3RhdHVzKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHZ4Z2VfYWxsb2NfbXNpeChzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaiwgaSwgcmV0ID0gMDsKKwlpbnQgaW50cl9jbnQgPSAwOworCWludCBhbGFybV9tc2l4X2lkID0gMCwgbXNpeF9pbnRyX3ZlY3QgPSAwOworCXZkZXYtPmludHJfY250ID0gMDsKKworCS8qIFR4L1J4IE1TSVggVmVjdG9ycyBjb3VudCAqLworCXZkZXYtPmludHJfY250ID0gdmRldi0+bm9fb2ZfdnBhdGggKiAyOworCisJLyogQWxhcm0gTVNJWCBWZWN0b3JzIGNvdW50ICovCisJdmRldi0+aW50cl9jbnQrKzsKKworCWludHJfY250ID0gKHZkZXYtPm1heF92cGF0aF9zdXBwb3J0ZWQgKiAyKSArIDE7CisJdmRldi0+ZW50cmllcyA9IGt6YWxsb2MoaW50cl9jbnQgKiBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZGV2LT5lbnRyaWVzKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUpOworCQlyZXR1cm4gIC1FTk9NRU07CisJfQorCisJdmRldi0+dnhnZV9lbnRyaWVzID0ga3phbGxvYyhpbnRyX2NudCAqIHNpemVvZihzdHJ1Y3QgdnhnZV9tc2l4X2VudHJ5KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXZkZXYtPnZ4Z2VfZW50cmllcykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsICIlczogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUpOworCQlrZnJlZSh2ZGV2LT5lbnRyaWVzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTGFzdCB2ZWN0b3IgaW4gdGhlIGxpc3QgaXMgdXNlZCBmb3IgYWxhcm0gKi8KKwlhbGFybV9tc2l4X2lkID0gVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRSAqIHZkZXYtPm5vX29mX3ZwYXRoIC0gMjsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHZkZXYtPm1heF92cGF0aF9zdXBwb3J0ZWQ7IGkrKykgeworCisJCW1zaXhfaW50cl92ZWN0ID0gaSAqIFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkU7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgZmlmbyB2ZWN0b3IgKi8KKwkJdmRldi0+ZW50cmllc1tqXS5lbnRyeSA9IG1zaXhfaW50cl92ZWN0OworCQl2ZGV2LT52eGdlX2VudHJpZXNbal0uZW50cnkgPSBtc2l4X2ludHJfdmVjdDsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2pdLmluX3VzZSA9IDA7CisJCWorKzsKKworCQkvKiBJbml0aWFsaXplIHRoZSByaW5nIHZlY3RvciAqLworCQl2ZGV2LT5lbnRyaWVzW2pdLmVudHJ5ID0gbXNpeF9pbnRyX3ZlY3QgKyAxOworCQl2ZGV2LT52eGdlX2VudHJpZXNbal0uZW50cnkgPSBtc2l4X2ludHJfdmVjdCArIDE7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tqXS5pbl91c2UgPSAwOworCQlqKys7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgYWxhcm0gdmVjdG9yICovCisJdmRldi0+ZW50cmllc1tqXS5lbnRyeSA9IGFsYXJtX21zaXhfaWQ7CisJdmRldi0+dnhnZV9lbnRyaWVzW2pdLmVudHJ5ID0gYWxhcm1fbXNpeF9pZDsKKwl2ZGV2LT52eGdlX2VudHJpZXNbal0uaW5fdXNlID0gMDsKKworCXJldCA9IHBjaV9lbmFibGVfbXNpeCh2ZGV2LT5wZGV2LCB2ZGV2LT5lbnRyaWVzLCBpbnRyX2NudCk7CisJLyogaWYgZHJpdmVyIHJlcXVlc3QgZXhjZWVlZHMgYXZhaWxhYmxlIGlycSdzLCByZXF1ZXN0IHdpdGggYSBzbWFsbAorCSAqIG51bWJlci4KKwkqLworCWlmIChyZXQgPiAwKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogTVNJLVggZW5hYmxlIGZhaWxlZCBmb3IgJWQgdmVjdG9ycywgYXZhaWxhYmxlOiAlZCIsCisJCQlWWEdFX0RSSVZFUl9OQU1FLCBpbnRyX2NudCwgcmV0KTsKKwkJdmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZCA9IHZkZXYtPm5vX29mX3ZwYXRoOworCQlpbnRyX2NudCA9ICh2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkICogMikgKyAxOworCisJCS8qIFJlc2V0IHRoZSBhbGFybSB2ZWN0b3Igc2V0dGluZyAqLworCQl2ZGV2LT5lbnRyaWVzW2pdLmVudHJ5ID0gMDsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2pdLmVudHJ5ID0gMDsKKworCQkvKiBJbml0aWFsaXplIHRoZSBhbGFybSB2ZWN0b3Igd2l0aCBuZXcgc2V0dGluZyAqLworCQl2ZGV2LT5lbnRyaWVzW2ludHJfY250IC0gMV0uZW50cnkgPSBhbGFybV9tc2l4X2lkOworCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnQgLSAxXS5lbnRyeSA9IGFsYXJtX21zaXhfaWQ7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudCAtIDFdLmluX3VzZSA9IDA7CisKKwkJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KHZkZXYtPnBkZXYsIHZkZXYtPmVudHJpZXMsIGludHJfY250KTsKKwkJaWYgKCFyZXQpCisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBNU0ktWCBlbmFibGVkIGZvciAlZCB2ZWN0b3JzIiwKKwkJCQlWWEdFX0RSSVZFUl9OQU1FLCBpbnRyX2NudCk7CisJfQorCisJaWYgKHJldCkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IE1TSS1YIGVuYWJsZSBmYWlsZWQgZm9yICVkIHZlY3RvcnMsIHJldDogJWQiLAorCQkJVlhHRV9EUklWRVJfTkFNRSwgaW50cl9jbnQsIHJldCk7CisJCWtmcmVlKHZkZXYtPmVudHJpZXMpOworCQlrZnJlZSh2ZGV2LT52eGdlX2VudHJpZXMpOworCQl2ZGV2LT5lbnRyaWVzID0gTlVMTDsKKwkJdmRldi0+dnhnZV9lbnRyaWVzID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ4Z2VfZW5hYmxlX21zaXgoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisKKwlpbnQgaSwgcmV0ID0gMDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwkvKiAwIC0gVHgsIDEgLSBSeCAgKi8KKwlpbnQgdGltX21zaXhfaWRbNF07CisJaW50IGFsYXJtX21zaXhfaWQgPSAwLCBtc2l4X2ludHJfdmVjdCA9IDA7OworCXZkZXYtPmludHJfY250ID0gMDsKKworCS8qIGFsbG9jYXRlIG1zaXggdmVjdG9ycyAqLworCXJldCA9IHZ4Z2VfYWxsb2NfbXNpeCh2ZGV2KTsKKwlpZiAoIXJldCkgeworCQkvKiBMYXN0IHZlY3RvciBpbiB0aGUgbGlzdCBpcyB1c2VkIGZvciBhbGFybSAqLworCQlhbGFybV9tc2l4X2lkID0KKwkJCVZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUgKiB2ZGV2LT5ub19vZl92cGF0aCAtIDI7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisKKwkJCS8qIElmIGZpZm8gb3IgcmluZyBhcmUgbm90IGVuYWJsZWQKKwkJCSAgIHRoZSBNU0lYIHZlY3RvciBmb3IgdGhhdCBzaG91bGQgYmUgc2V0IHRvIDAKKwkJCSAgIEhlbmNlIGluaXRpYWxpemVpbmcgdGhpcyBhcnJheSB0byBhbGwgMHMuCisJCQkqLworCQkJbWVtc2V0KHRpbV9tc2l4X2lkLCAwLCBzaXplb2YodGltX21zaXhfaWQpKTsKKwkJCW1zaXhfaW50cl92ZWN0ID0gaSAqIFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkU7CisJCQl0aW1fbXNpeF9pZFswXSA9IG1zaXhfaW50cl92ZWN0OworCisJCQl0aW1fbXNpeF9pZFsxXSA9IG1zaXhfaW50cl92ZWN0ICsgMTsKKwkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLnJ4X3ZlY3Rvcl9ubyA9IHRpbV9tc2l4X2lkWzFdOworCisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21zaXhfc2V0KAorCQkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSwKKwkJCQkJCXRpbV9tc2l4X2lkLCBhbGFybV9tc2l4X2lkKTsKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJInZ4Z2VfaHdfdnBhdGhfbXNpeF9zZXQgIgorCQkJCQkiZmFpbGVkIHdpdGggc3RhdHVzIDogJXgiLCBzdGF0dXMpOworCQkJCWtmcmVlKHZkZXYtPmVudHJpZXMpOworCQkJCWtmcmVlKHZkZXYtPnZ4Z2VfZW50cmllcyk7CisJCQkJcGNpX2Rpc2FibGVfbXNpeCh2ZGV2LT5wZGV2KTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHZ4Z2VfcmVtX21zaXhfaXNyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBpbnRyX2NudDsKKworCWZvciAoaW50cl9jbnQgPSAwOyBpbnRyX2NudCA8ICh2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkICogMiArIDEpOworCQlpbnRyX2NudCsrKSB7CisJCWlmICh2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnRdLmluX3VzZSkgeworCQkJc3luY2hyb25pemVfaXJxKHZkZXYtPmVudHJpZXNbaW50cl9jbnRdLnZlY3Rvcik7CisJCQlmcmVlX2lycSh2ZGV2LT5lbnRyaWVzW2ludHJfY250XS52ZWN0b3IsCisJCQkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250XS5hcmcpOworCQkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250XS5pbl91c2UgPSAwOworCQl9CisJfQorCisJa2ZyZWUodmRldi0+ZW50cmllcyk7CisJa2ZyZWUodmRldi0+dnhnZV9lbnRyaWVzKTsKKwl2ZGV2LT5lbnRyaWVzID0gTlVMTDsKKwl2ZGV2LT52eGdlX2VudHJpZXMgPSBOVUxMOworCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gTVNJX1gpCisJCXBjaV9kaXNhYmxlX21zaXgodmRldi0+cGRldik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdnhnZV9yZW1faXNyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXY7CisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gTVNJX1gpIHsKKwkJdnhnZV9yZW1fbXNpeF9pc3IodmRldik7CisJfSBlbHNlCisjZW5kaWYKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSA9PSBJTlRBKSB7CisJCQlzeW5jaHJvbml6ZV9pcnEodmRldi0+cGRldi0+aXJxKTsKKwkJCWZyZWVfaXJxKHZkZXYtPnBkZXYtPmlycSwgaGxkZXYpOworCX0KK30KKworc3RhdGljIGludCB2eGdlX2FkZF9pc3Ioc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9CisJCShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaW50IHZwX2lkeCA9IDAsIGludHJfaWR4ID0gMCwgaW50cl9jbnQgPSAwLCBtc2l4X2lkeCA9IDAsIGlycV9yZXEgPSAwOworCXU2NCBmdW5jdGlvbl9tb2RlID0gdmRldi0+Y29uZmlnLmRldmljZV9od19pbmZvLmZ1bmN0aW9uX21vZGU7CisJaW50IHBjaV9mdW4gPSBQQ0lfRlVOQyh2ZGV2LT5wZGV2LT5kZXZmbik7CisKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSA9PSBNU0lfWCkKKwkJcmV0ID0gdnhnZV9lbmFibGVfbXNpeCh2ZGV2KTsKKworCWlmIChyZXQpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBFbmFibGluZyBNU0ktWCBGYWlsZWQiLCBWWEdFX0RSSVZFUl9OQU1FKTsKKwkJaWYgKChmdW5jdGlvbl9tb2RlID09IFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9NVUxUSV9GVU5DVElPTikgJiYKKwkJCXRlc3RfYW5kX3NldF9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsCisJCQkJJmRyaXZlcl9jb25maWctPmludGFfZGV2X29wZW4pKQorCQkJcmV0dXJuIFZYR0VfSFdfRkFJTDsKKwkJZWxzZSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBEZWZhdWx0aW5nIHRvIElOVEEiLCBWWEdFX0RSSVZFUl9OQU1FKTsKKwkJCXZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPSBJTlRBOworCQkJdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZSh2ZGV2LT5kZXZoLAorCQkJCVZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkUpOworCQkJdnhnZV9jbG9zZV92cGF0aHModmRldiwgMSk7CisJCQl2ZGV2LT5ub19vZl92cGF0aCA9IDE7CisJCQl2ZGV2LT5zdGF0cy52cGF0aHNfb3BlbiA9IDE7CisJCX0KKwl9CisKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSA9PSBNU0lfWCkgeworCQlmb3IgKGludHJfaWR4ID0gMDsKKwkJICAgICBpbnRyX2lkeCA8ICh2ZGV2LT5ub19vZl92cGF0aCAqCisJCQlWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFKTsgaW50cl9pZHgrKykgeworCisJCQltc2l4X2lkeCA9IGludHJfaWR4ICUgVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRTsKKwkJCWlycV9yZXEgPSAwOworCisJCQlzd2l0Y2ggKG1zaXhfaWR4KSB7CisJCQljYXNlIDA6CisJCQkJc25wcmludGYodmRldi0+ZGVzY1tpbnRyX2NudF0sIFZYR0VfSU5UUl9TVFJMRU4sCisJCQkJCSIlczp2eGdlIGZuOiAlZCB2cGF0aDogJWQgVHggTVNJLVg6ICVkIiwKKwkJCQkJdmRldi0+bmRldi0+bmFtZSwgcGNpX2Z1biwgdnBfaWR4LAorCQkJCQl2ZGV2LT5lbnRyaWVzW2ludHJfY250XS5lbnRyeSk7CisJCQkJcmV0ID0gcmVxdWVzdF9pcnEoCisJCQkJICAgIHZkZXYtPmVudHJpZXNbaW50cl9jbnRdLnZlY3RvciwKKwkJCQkJdnhnZV90eF9tc2l4X2hhbmRsZSwgMCwKKwkJCQkJdmRldi0+ZGVzY1tpbnRyX2NudF0sCisJCQkJCSZ2ZGV2LT52cGF0aHNbdnBfaWR4XS5maWZvKTsKKwkJCQkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250XS5hcmcgPQorCQkJCQkJJnZkZXYtPnZwYXRoc1t2cF9pZHhdLmZpZm87CisJCQkJaXJxX3JlcSA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJc25wcmludGYodmRldi0+ZGVzY1tpbnRyX2NudF0sIFZYR0VfSU5UUl9TVFJMRU4sCisJCQkJCSIlczp2eGdlIGZuOiAlZCB2cGF0aDogJWQgUnggTVNJLVg6ICVkIiwKKwkJCQkJdmRldi0+bmRldi0+bmFtZSwgcGNpX2Z1biwgdnBfaWR4LAorCQkJCQl2ZGV2LT5lbnRyaWVzW2ludHJfY250XS5lbnRyeSk7CisJCQkJcmV0ID0gcmVxdWVzdF9pcnEoCisJCQkJICAgIHZkZXYtPmVudHJpZXNbaW50cl9jbnRdLnZlY3RvciwKKwkJCQkJdnhnZV9yeF9tc2l4X25hcGlfaGFuZGxlLAorCQkJCQkwLAorCQkJCQl2ZGV2LT5kZXNjW2ludHJfY250XSwKKwkJCQkJJnZkZXYtPnZwYXRoc1t2cF9pZHhdLnJpbmcpOworCQkJCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnRdLmFyZyA9CisJCQkJCQkmdmRldi0+dnBhdGhzW3ZwX2lkeF0ucmluZzsKKwkJCQlpcnFfcmVxID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHJldCkgeworCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJIiVzOiBNU0lYIC0gJWQgIFJlZ2lzdHJhdGlvbiBmYWlsZWQiLAorCQkJCQl2ZGV2LT5uZGV2LT5uYW1lLCBpbnRyX2NudCk7CisJCQkJdnhnZV9yZW1fbXNpeF9pc3IodmRldik7CisJCQkJaWYgKChmdW5jdGlvbl9tb2RlID09CisJCQkJCVZYR0VfSFdfRlVOQ1RJT05fTU9ERV9NVUxUSV9GVU5DVElPTikgJiYKKwkJCQkJdGVzdF9hbmRfc2V0X2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwKKwkJCQkJCSZkcml2ZXJfY29uZmlnLT5pbnRhX2Rldl9vcGVuKSkKKwkJCQkJcmV0dXJuIFZYR0VfSFdfRkFJTDsKKwkJCQllbHNlIHsKKwkJCQkJdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZSgKKwkJCQkJCXZkZXYtPmRldmgsCisJCQkJCQlWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKTsKKwkJCQkJCXZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPSBJTlRBOworCQkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCQkiJXM6IERlZmF1bHRpbmcgdG8gSU5UQSIKKwkJCQkJCSwgdmRldi0+bmRldi0+bmFtZSk7CisJCQkJCXZ4Z2VfY2xvc2VfdnBhdGhzKHZkZXYsIDEpOworCQkJCQl2ZGV2LT5ub19vZl92cGF0aCA9IDE7CisJCQkJCXZkZXYtPnN0YXRzLnZwYXRoc19vcGVuID0gMTsKKwkJCQkJZ290byBJTlRBX01PREU7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaXJxX3JlcSkgeworCQkJCS8qIFdlIHJlcXVlc3RlZCBmb3IgdGhpcyBtc2l4IGludGVycnVwdCAqLworCQkJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudF0uaW5fdXNlID0gMTsKKwkJCQl2eGdlX2h3X3ZwYXRoX21zaXhfdW5tYXNrKAorCQkJCQl2ZGV2LT52cGF0aHNbdnBfaWR4XS5oYW5kbGUsCisJCQkJCWludHJfaWR4KTsKKwkJCQlpbnRyX2NudCsrOworCQkJfQorCisJCQkvKiBQb2ludCB0byBuZXh0IHZwYXRoIGhhbmRsZXIgKi8KKwkJCWlmICgoKGludHJfaWR4ICsgMSkgJSBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFID09IDApCisJCQkJJiYgKHZwX2lkeCA8ICh2ZGV2LT5ub19vZl92cGF0aCAtIDEpKSkKKwkJCQkJdnBfaWR4Kys7CisJCX0KKworCQlpbnRyX2NudCA9IHZkZXYtPm1heF92cGF0aF9zdXBwb3J0ZWQgKiAyOworCQlzbnByaW50Zih2ZGV2LT5kZXNjW2ludHJfY250XSwgVlhHRV9JTlRSX1NUUkxFTiwKKwkJCSIlczp2eGdlIEFsYXJtIGZuOiAlZCBNU0ktWDogJWQiLAorCQkJdmRldi0+bmRldi0+bmFtZSwgcGNpX2Z1biwKKwkJCXZkZXYtPmVudHJpZXNbaW50cl9jbnRdLmVudHJ5KTsKKwkJLyogRm9yIEFsYXJtIGludGVycnVwdHMgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEodmRldi0+ZW50cmllc1tpbnRyX2NudF0udmVjdG9yLAorCQkJCQl2eGdlX2FsYXJtX21zaXhfaGFuZGxlLCAwLAorCQkJCQl2ZGV2LT5kZXNjW2ludHJfY250XSwKKwkJCQkJJnZkZXYtPnZwYXRoc1t2cF9pZHhdKTsKKwkJaWYgKHJldCkgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogTVNJWCAtICVkIFJlZ2lzdHJhdGlvbiBmYWlsZWQiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUsIGludHJfY250KTsKKwkJCXZ4Z2VfcmVtX21zaXhfaXNyKHZkZXYpOworCQkJaWYgKChmdW5jdGlvbl9tb2RlID09CisJCQkJVlhHRV9IV19GVU5DVElPTl9NT0RFX01VTFRJX0ZVTkNUSU9OKSAmJgorCQkJCXRlc3RfYW5kX3NldF9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsCisJCQkJCQkmZHJpdmVyX2NvbmZpZy0+aW50YV9kZXZfb3BlbikpCisJCQkJcmV0dXJuIFZYR0VfSFdfRkFJTDsKKwkJCWVsc2UgeworCQkJCXZ4Z2VfaHdfZGV2aWNlX3NldF9pbnRyX3R5cGUodmRldi0+ZGV2aCwKKwkJCQkJCVZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkUpOworCQkJCXZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPSBJTlRBOworCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJIiVzOiBEZWZhdWx0aW5nIHRvIElOVEEiLAorCQkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQl2eGdlX2Nsb3NlX3ZwYXRocyh2ZGV2LCAxKTsKKwkJCQl2ZGV2LT5ub19vZl92cGF0aCA9IDE7CisJCQkJdmRldi0+c3RhdHMudnBhdGhzX29wZW4gPSAxOworCQkJCWdvdG8gSU5UQV9NT0RFOworCQkJfQorCQl9CisKKwkJdnhnZV9od192cGF0aF9tc2l4X3VubWFzayh2ZGV2LT52cGF0aHNbdnBfaWR4XS5oYW5kbGUsCisJCQkJCWludHJfaWR4IC0gMik7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudF0uaW5fdXNlID0gMTsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250XS5hcmcgPSAmdmRldi0+dnBhdGhzW3ZwX2lkeF07CisJfQorSU5UQV9NT0RFOgorI2VuZGlmCisJc25wcmludGYodmRldi0+ZGVzY1swXSwgVlhHRV9JTlRSX1NUUkxFTiwgIiVzOnZ4Z2UiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IElOVEEpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoKGludCkgdmRldi0+cGRldi0+aXJxLAorCQkJdnhnZV9pc3JfbmFwaSwKKwkJCUlSUUZfU0hBUkVELCB2ZGV2LT5kZXNjWzBdLCBobGRldik7CisJCWlmIChyZXQpIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXMgJXMtJWQ6IElTUiByZWdpc3RyYXRpb24gZmFpbGVkIiwKKwkJCQlWWEdFX0RSSVZFUl9OQU1FLCAiSVJRIiwgdmRldi0+cGRldi0+aXJxKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIm5ldyAlcy0lZCBsaW5lIGFsbG9jYXRlZCIsCisJCQkiSVJRIiwgdmRldi0+cGRldi0+aXJxKTsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworc3RhdGljIHZvaWQgdnhnZV9wb2xsX3ZwX3Jlc2V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKWRhdGE7CisJaW50IGksIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksICZ2ZGV2LT52cF9yZXNldCkpIHsKKwkJCXZ4Z2VfcmVzZXRfdnBhdGgodmRldiwgaSk7CisJCQlqKys7CisJCX0KKwl9CisJaWYgKGogJiYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgIT0gTVNJX1gpKSB7CisJCXZ4Z2VfaHdfZGV2aWNlX3VubWFza19hbGwodmRldi0+ZGV2aCk7CisJCXZ4Z2VfaHdfZGV2aWNlX2ZsdXNoX2lvKHZkZXYtPmRldmgpOworCX0KKworCW1vZF90aW1lcigmdmRldi0+dnBfcmVzZXRfdGltZXIsIGppZmZpZXMgKyBIWiAvIDIpOworfQorCitzdGF0aWMgdm9pZCB2eGdlX3BvbGxfdnBfbG9ja3VwKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKWRhdGE7CisJaW50IGk7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZzsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQlyaW5nID0gJnZkZXYtPnZwYXRoc1tpXS5yaW5nOworCQkvKiBEaWQgdGhpcyB2cGF0aCByZWNlaXZlZCBhbnkgcGFja2V0cyAqLworCQlpZiAocmluZy0+c3RhdHMucHJldl9yeF9mcm1zID09IHJpbmctPnN0YXRzLnJ4X2ZybXMpIHsKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfY2hlY2tfbGVhayhyaW5nLT5oYW5kbGUpOworCisJCQkvKiBEaWQgaXQgcmVjZWl2ZWQgYW55IHBhY2tldHMgbGFzdCB0aW1lICovCisJCQlpZiAoKFZYR0VfSFdfRkFJTCA9PSBzdGF0dXMpICYmCisJCQkJKFZYR0VfSFdfRkFJTCA9PSByaW5nLT5sYXN0X3N0YXR1cykpIHsKKworCQkJCS8qIHNjaGVkdWxlIHZwYXRoIHJlc2V0ICovCisJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksICZ2ZGV2LT52cF9yZXNldCkpIHsKKworCQkJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoaXMgdnBhdGggKi8KKwkJCQkJdnhnZV92cGF0aF9pbnRyX2Rpc2FibGUodmRldiwgaSk7CisKKwkJCQkJLyogc3RvcCB0aGUgcXVldWUgZm9yIHRoaXMgdnBhdGggKi8KKwkJCQkJdnhnZV9zdG9wX3R4X3F1ZXVlKCZ2ZGV2LT52cGF0aHNbaV0uCisJCQkJCQkJCWZpZm8pOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmluZy0+c3RhdHMucHJldl9yeF9mcm1zID0gcmluZy0+c3RhdHMucnhfZnJtczsKKwkJcmluZy0+bGFzdF9zdGF0dXMgPSBzdGF0dXM7CisJfQorCisJLyogQ2hlY2sgZXZlcnkgMSBtaWxsaSBzZWNvbmQgKi8KKwltb2RfdGltZXIoJnZkZXYtPnZwX2xvY2t1cF90aW1lciwgamlmZmllcyArIEhaIC8gMTAwMCk7Cit9CisKKy8qKgorICogdnhnZV9vcGVuCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9wZW4gZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlci4gSXQgbWFpbmx5IGNhbGxzIGEKKyAqIGZ1bmN0aW9uIHRvIGFsbG9jYXRlIFJ4IGJ1ZmZlcnMgYW5kIGluc2VydHMgdGhlbSBpbnRvIHRoZSBidWZmZXIKKyAqIGRlc2NyaXB0b3JzIGFuZCB0aGVuIGVuYWJsZXMgdGhlIFJ4IHBhcnQgb2YgdGhlIE5JQy4KKyAqIFJldHVybiB2YWx1ZTogJzAnIG9uIHN1Y2Nlc3MgYW5kIGFuIGFwcHJvcHJpYXRlICgtKXZlIGludGVnZXIgYXMKKyAqIGRlZmluZWQgaW4gZXJybm8uaCBmaWxlIG9uIGZhaWx1cmUuCisgKi8KK2ludAordnhnZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCWludCByZXQgPSAwOworCWludCBpOworCXU2NCB2YWw2NCwgZnVuY3Rpb25fbW9kZTsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIiwgZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKikgcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCWZ1bmN0aW9uX21vZGUgPSB2ZGV2LT5jb25maWcuZGV2aWNlX2h3X2luZm8uZnVuY3Rpb25fbW9kZTsKKworCS8qIG1ha2Ugc3VyZSB5b3UgaGF2ZSBsaW5rIG9mZiBieSBkZWZhdWx0IGV2ZXJ5IHRpbWUgTmljIGlzCisJICogaW5pdGlhbGl6ZWQgKi8KKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJLyogQ2hlY2sgZm9yIGFub3RoZXIgZGV2aWNlIGFscmVhZHkgb3BuIHdpdGggSU5UQSAqLworCWlmICgoZnVuY3Rpb25fbW9kZSA9PSBWWEdFX0hXX0ZVTkNUSU9OX01PREVfTVVMVElfRlVOQ1RJT04pICYmCisJCXRlc3RfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmZHJpdmVyX2NvbmZpZy0+aW50YV9kZXZfb3BlbikpIHsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIG91dDA7CisJfQorCisJLyogT3BlbiBWUEFUSHMgKi8KKwlzdGF0dXMgPSB2eGdlX29wZW5fdnBhdGhzKHZkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IGZhdGFsOiBWcGF0aCBvcGVuIGZhaWxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0MDsKKwl9CisKKwl2ZGV2LT5tdHUgPSBkZXYtPm10dTsKKworCXN0YXR1cyA9IHZ4Z2VfYWRkX2lzcih2ZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBmYXRhbDogSVNSIGFkZCBmYWlsZWQiLCBkZXYtPm5hbWUpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0MTsKKwl9CisKKworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlICE9IE1TSV9YKSB7CisJCW5ldGlmX25hcGlfYWRkKGRldiwgJnZkZXYtPm5hcGksIHZ4Z2VfcG9sbF9pbnRhLAorCQkJdmRldi0+Y29uZmlnLm5hcGlfd2VpZ2h0KTsKKwkJbmFwaV9lbmFibGUoJnZkZXYtPm5hcGkpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQluZXRpZl9uYXBpX2FkZChkZXYsICZ2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpLAorCQkJICAgIHZ4Z2VfcG9sbF9tc2l4LCB2ZGV2LT5jb25maWcubmFwaV93ZWlnaHQpOworCQkJbmFwaV9lbmFibGUoJnZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGkpOworCQl9CisJfQorCisJLyogY29uZmlndXJlIFJUSCAqLworCWlmICh2ZGV2LT5jb25maWcucnRoX3N0ZWVyaW5nKSB7CisJCXN0YXR1cyA9IHZ4Z2VfcnRoX2NvbmZpZ3VyZSh2ZGV2KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBmYXRhbDogUlRIIGNvbmZpZ3VyYXRpb24gZmFpbGVkIiwKKwkJCQlkZXYtPm5hbWUpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQyOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJLyogc2V0IGluaXRpYWwgbXR1IGJlZm9yZSBlbmFibGluZyB0aGUgZGV2aWNlICovCisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbXR1X3NldCh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlLAorCQkJCQkJdmRldi0+bXR1KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBmYXRhbDogY2FuIG5vdCBzZXQgbmV3IE1UVSIsIGRldi0+bmFtZSk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDI7CisJCX0KKwl9CisKKwlWWEdFX0RFVklDRV9ERUJVR19MRVZFTF9TRVQoVlhHRV9UUkFDRSwgVlhHRV9DT01QT05FTlRfTEwsIHZkZXYpOworCXZ4Z2VfZGVidWdfaW5pdCh2ZGV2LT5sZXZlbF90cmFjZSwKKwkJIiVzOiBNVFUgaXMgJWQiLCB2ZGV2LT5uZGV2LT5uYW1lLCB2ZGV2LT5tdHUpOworCVZYR0VfREVWSUNFX0RFQlVHX0xFVkVMX1NFVChWWEdFX0VSUiwgVlhHRV9DT01QT05FTlRfTEwsIHZkZXYpOworCisJLyogUmVwcm9ncmFtIHRoZSBEQSB0YWJsZSB3aXRoIHBvcHVsYXRlZCBtYWMgYWRkcmVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJdnhnZV9yZXN0b3JlX3ZwYXRoX21hY19hZGRyKCZ2ZGV2LT52cGF0aHNbaV0pOworCQl2eGdlX3Jlc3RvcmVfdnBhdGhfdmlkX3RhYmxlKCZ2ZGV2LT52cGF0aHNbaV0pOworCX0KKworCS8qIEVuYWJsZSB2cGF0aCB0byBzbmlmZiBhbGwgdW5pY2FzdC9tdWx0aWNhc3QgdHJhZmZpYyB0aGF0IG5vdAorCSAqIGFkZHJlc3NlZCB0byB0aGVtLiBXZSBhbGxvdyBwcm9taXNjb3VzIG1vZGUgZm9yIFBGIG9ubHkKKwkgKi8KKworCXZhbDY0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKQorCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX0FVVEhPUklaRV9BTExfQUREUl9WUChpKTsKKworCXZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUodmRldi0+ZGV2aCwKKwkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKKwkJMCwKKwkJKHVsb25nKW9mZnNldG9mKHN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcsCisJCQlyeG1hY19hdXRob3JpemVfYWxsX2FkZHIpLAorCQl2YWw2NCk7CisKKwl2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHZkZXYtPmRldmgsCisJCXZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW0sCisJCTAsCisJCSh1bG9uZylvZmZzZXRvZihzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnLAorCQkJcnhtYWNfYXV0aG9yaXplX2FsbF92aWQpLAorCQl2YWw2NCk7CisKKwl2eGdlX3NldF9tdWx0aWNhc3QoZGV2KTsKKworCS8qIEVuYWJsaW5nIEJjYXN0IGFuZCBtY2FzdCBmb3IgYWxsIHZwYXRoICovCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJc3RhdHVzID0gdnhnZV9od192cGF0aF9iY2FzdF9lbmFibGUodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXMgOiBDYW4gbm90IGVuYWJsZSBiY2FzdCBmb3IgdnBhdGggIgorCQkJCSJpZCAlZCIsIGRldi0+bmFtZSwgaSk7CisJCWlmICh2ZGV2LT5jb25maWcuYWRkcl9sZWFybl9lbikgeworCQkJc3RhdHVzID0KKwkJCSAgICB2eGdlX2h3X3ZwYXRoX21jYXN0X2VuYWJsZSh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSIlcyA6IENhbiBub3QgZW5hYmxlIG1jYXN0IGZvciB2cGF0aCAiCisJCQkJCSJpZCAlZCIsIGRldi0+bmFtZSwgaSk7CisJCX0KKwl9CisKKwl2eGdlX2h3X2RldmljZV9zZXRwYXVzZV9kYXRhKHZkZXYtPmRldmgsIDAsCisJCXZkZXYtPmNvbmZpZy50eF9wYXVzZV9lbmFibGUsCisJCXZkZXYtPmNvbmZpZy5yeF9wYXVzZV9lbmFibGUpOworCisJaWYgKHZkZXYtPnZwX3Jlc2V0X3RpbWVyLmZ1bmN0aW9uID09IE5VTEwpCisJCXZ4Z2Vfb3NfdGltZXIodmRldi0+dnBfcmVzZXRfdGltZXIsCisJCQl2eGdlX3BvbGxfdnBfcmVzZXQsIHZkZXYsIChIWi8yKSk7CisKKwlpZiAodmRldi0+dnBfbG9ja3VwX3RpbWVyLmZ1bmN0aW9uID09IE5VTEwpCisJCXZ4Z2Vfb3NfdGltZXIodmRldi0+dnBfbG9ja3VwX3RpbWVyLAorCQkJdnhnZV9wb2xsX3ZwX2xvY2t1cCwgdmRldiwgKEhaLzIpKTsKKworCXNldF9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CisKKwlzbXBfd21iKCk7CisKKwlpZiAodnhnZV9od19kZXZpY2VfbGlua19zdGF0ZV9nZXQodmRldi0+ZGV2aCkgPT0gVlhHRV9IV19MSU5LX1VQKSB7CisJCW5ldGlmX2NhcnJpZXJfb24odmRldi0+bmRldik7CisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IExpbmsgVXBcbiIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQl2ZGV2LT5zdGF0cy5saW5rX3VwKys7CisJfQorCisJdnhnZV9od19kZXZpY2VfaW50cl9lbmFibGUodmRldi0+ZGV2aCk7CisKKwlzbXBfd21iKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQl2eGdlX2h3X3ZwYXRoX2VuYWJsZSh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJc21wX3dtYigpOworCQl2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJfQorCisJdnhnZV9zdGFydF9hbGxfdHhfcXVldWUodmRldik7CisJZ290byBvdXQwOworCitvdXQyOgorCXZ4Z2VfcmVtX2lzcih2ZGV2KTsKKworCS8qIERpc2FibGUgbmFwaSAqLworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlICE9IE1TSV9YKQorCQluYXBpX2Rpc2FibGUoJnZkZXYtPm5hcGkpOworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJCW5hcGlfZGlzYWJsZSgmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSk7CisJfQorCitvdXQxOgorCXZ4Z2VfY2xvc2VfdnBhdGhzKHZkZXYsIDApOworb3V0MDoKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAorCQkJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBMb29wIHRocm91Z2h0IHRoZSBtYWMgYWRkcmVzcyBsaXN0IGFuZCBkZWxldGUgYWxsIHRoZSBlbnRyaWVzICovCit2b2lkIHZ4Z2VfZnJlZV9tYWNfYWRkX2xpc3Qoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKQoreworCisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpuZXh0OworCWlmIChsaXN0X2VtcHR5KCZ2cGF0aC0+bWFjX2FkZHJfbGlzdCkpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KSB7CisJCWxpc3RfZGVsKGVudHJ5KTsKKwkJa2ZyZWUoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZ4Z2VfbmFwaV9kZWxfYWxsKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBpOworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlICE9IE1TSV9YKQorCQluZXRpZl9uYXBpX2RlbCgmdmRldi0+bmFwaSk7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJbmV0aWZfbmFwaV9kZWwoJnZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGkpOworCX0KKwlyZXR1cm47Cit9CisKK2ludCBkb192eGdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkb19pbykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJaW50IGk7CisJdTY0IHZhbDY0LCB2cGF0aF92ZWN0b3I7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopIHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworCS8qIElmIHZ4Z2VfaGFuZGxlX2NyaXRfZXJyIHRhc2sgaXMgZXhlY3V0aW5nLAorCSAqIHdhaXQgdGlsbCBpdCBjb21wbGV0ZXMuICovCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQsICZ2ZGV2LT5zdGF0ZSkpCisJCW1zbGVlcCg1MCk7CisKKwljbGVhcl9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CisJaWYgKGRvX2lvKSB7CisJCS8qIFB1dCB0aGUgdnBhdGggYmFjayBpbiBub3JtYWwgbW9kZSAqLworCQl2cGF0aF92ZWN0b3IgPSB2eGdlX21CSVQodmRldi0+dnBhdGhzWzBdLmRldmljZV9pZCk7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfbWdtdF9yZWdfcmVhZCh2ZGV2LT5kZXZoLAorCQkJCXZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW0sCisJCQkJMCwKKwkJCQkodWxvbmcpb2Zmc2V0b2YoCisJCQkJCXN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcsCisJCQkJCXJ0c19tZ3JfY2Jhc2luX2NmZyksCisJCQkJJnZhbDY0KTsKKworCQlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKKwkJCXZhbDY0ICY9IH52cGF0aF92ZWN0b3I7CisJCQlzdGF0dXMgPSB2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHZkZXYtPmRldmgsCisJCQkJCXZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW0sCisJCQkJCTAsCisJCQkJCSh1bG9uZylvZmZzZXRvZigKKwkJCQkJCXN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcsCisJCQkJCQlydHNfbWdyX2NiYXNpbl9jZmcpLAorCQkJCQl2YWw2NCk7CisJCX0KKworCQkvKiBSZW1vdmUgdGhlIGZ1bmN0aW9uIDAgZnJvbSBwcm9taXNjb3VzIG1vZGUgKi8KKwkJdnhnZV9od19tZ210X3JlZ193cml0ZSh2ZGV2LT5kZXZoLAorCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKKwkJCTAsCisJCQkodWxvbmcpb2Zmc2V0b2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKKwkJCQlyeG1hY19hdXRob3JpemVfYWxsX2FkZHIpLAorCQkJMCk7CisKKwkJdnhnZV9od19tZ210X3JlZ193cml0ZSh2ZGV2LT5kZXZoLAorCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKKwkJCTAsCisJCQkodWxvbmcpb2Zmc2V0b2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKKwkJCQlyeG1hY19hdXRob3JpemVfYWxsX3ZpZCksCisJCQkwKTsKKworCQlzbXBfd21iKCk7CisJfQorCWRlbF90aW1lcl9zeW5jKCZ2ZGV2LT52cF9sb2NrdXBfdGltZXIpOworCisJZGVsX3RpbWVyX3N5bmMoJnZkZXYtPnZwX3Jlc2V0X3RpbWVyKTsKKworCS8qIERpc2FibGUgbmFwaSAqLworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlICE9IE1TSV9YKQorCQluYXBpX2Rpc2FibGUoJnZkZXYtPm5hcGkpOworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJCW5hcGlfZGlzYWJsZSgmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSk7CisJfQorCisJbmV0aWZfY2Fycmllcl9vZmYodmRldi0+bmRldik7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTGluayBEb3duXG4iLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCisJLyogTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQgeG1pdCgpIGlzIHN0b3BwZWQgYnkgdXBwZXIgbGF5ZXIgKi8KKwlpZiAoZG9faW8pCisJCXZ4Z2VfaHdfZGV2aWNlX2ludHJfZGlzYWJsZSh2ZGV2LT5kZXZoKTsKKworCW1kZWxheSgxMDAwKTsKKworCXZ4Z2VfcmVtX2lzcih2ZGV2KTsKKworCXZ4Z2VfbmFwaV9kZWxfYWxsKHZkZXYpOworCisJaWYgKGRvX2lvKQorCQl2eGdlX3Jlc2V0X2FsbF92cGF0aHModmRldik7CisKKwl2eGdlX2Nsb3NlX3ZwYXRocyh2ZGV2LCAwKTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLCBkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwljbGVhcl9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZkcml2ZXJfY29uZmlnLT5pbnRhX2Rldl9vcGVuKTsKKwljbGVhcl9iaXQoX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQsICZ2ZGV2LT5zdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2eGdlX2Nsb3NlCisgKiBAZGV2OiBkZXZpY2UgcG9pbnRlci4KKyAqCisgKiBUaGlzIGlzIHRoZSBzdG9wIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXIuIEl0IG5lZWRzIHRvIHVuZG8gZXhhY3RseQorICogd2hhdGV2ZXIgd2FzIGRvbmUgYnkgdGhlIG9wZW4gZW50cnkgcG9pbnQsIHRodXMgaXQncyB1c3VhbGx5IHJlZmVycmVkIHRvCisgKiBhcyB0aGUgY2xvc2UgZnVuY3Rpb24uQW1vbmcgb3RoZXIgdGhpbmdzIHRoaXMgZnVuY3Rpb24gbWFpbmx5IHN0b3BzIHRoZQorICogUnggc2lkZSBvZiB0aGUgTklDIGFuZCBmcmVlcyBhbGwgdGhlIFJ4IGJ1ZmZlcnMgaW4gdGhlIFJ4IHJpbmdzLgorICogUmV0dXJuIHZhbHVlOiAnMCcgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgKC0pdmUgaW50ZWdlciBhcworICogZGVmaW5lZCBpbiBlcnJuby5oIGZpbGUgb24gZmFpbHVyZS4KKyAqLworaW50Cit2eGdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZG9fdnhnZV9jbG9zZShkZXYsIDEpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHZ4Z2VfY2hhbmdlX210dQorICogQGRldjogbmV0IGRldmljZSBwb2ludGVyLgorICogQG5ld19tdHUgOnRoZSBuZXcgTVRVIHNpemUgZm9yIHRoZSBkZXZpY2UuCisgKgorICogQSBkcml2ZXIgZW50cnkgcG9pbnQgdG8gY2hhbmdlIE1UVSBzaXplIGZvciB0aGUgZGV2aWNlLiBCZWZvcmUgY2hhbmdpbmcKKyAqIHRoZSBNVFUgdGhlIGRldmljZSBtdXN0IGJlIHN0b3BwZWQuCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KHZkZXYtPmxldmVsX3RyYWNlLAorCQkiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCWlmICgobmV3X210dSA8IFZYR0VfSFdfTUlOX01UVSkgfHwgKG5ld19tdHUgPiBWWEdFX0hXX01BWF9NVFUpKSB7CisJCXZ4Z2VfZGVidWdfaW5pdCh2ZGV2LT5sZXZlbF9lcnIsCisJCQkiJXM6IG10dSBzaXplIGlzIGludmFsaWQiLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCS8qIGNoZWNrIGlmIGRldmljZSBpcyBkb3duIGFscmVhZHkgKi8KKwlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpIHsKKwkJLyoganVzdCBzdG9yZSBuZXcgdmFsdWUsIHdpbGwgdXNlIGxhdGVyIG9uIG9wZW4oKSAqLworCQlkZXYtPm10dSA9IG5ld19tdHU7CisJCXZ4Z2VfZGVidWdfaW5pdCh2ZGV2LT5sZXZlbF9lcnIsCisJCQkiJXMiLCAiZGV2aWNlIGlzIGRvd24gb24gTVRVIGNoYW5nZSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl2eGdlX2RlYnVnX2luaXQodmRldi0+bGV2ZWxfdHJhY2UsCisJCSJ0cnlpbmcgdG8gYXBwbHkgbmV3IE1UVSAlZCIsIG5ld19tdHUpOworCisJaWYgKHZ4Z2VfY2xvc2UoZGV2KSkKKwkJcmV0dXJuIC1FSU87CisKKwlkZXYtPm10dSA9IG5ld19tdHU7CisJdmRldi0+bXR1ID0gbmV3X210dTsKKworCWlmICh2eGdlX29wZW4oZGV2KSkKKwkJcmV0dXJuIC1FSU87CisKKwl2eGdlX2RlYnVnX2luaXQodmRldi0+bGV2ZWxfdHJhY2UsCisJCSIlczogTVRVIGNoYW5nZWQgdG8gJWQiLCB2ZGV2LT5uZGV2LT5uYW1lLCBuZXdfbXR1KTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KHZkZXYtPmxldmVsX3RyYWNlLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnhnZV9nZXRfc3RhdHMKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBVcGRhdGVzIHRoZSBkZXZpY2Ugc3RhdGlzdGljcyBzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgZGV2aWNlCisgKiBzdGF0aXN0aWNzIHN0cnVjdHVyZSBpbiB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmUgYW5kIHJldHVybnMgYSBwb2ludGVyCisgKiB0byB0aGUgc2FtZS4KKyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKK3Z4Z2VfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9zdGF0czsKKwlpbnQgazsKKworCXZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbmV0X3N0YXRzID0gJnZkZXYtPnN0YXRzLm5ldF9zdGF0czsKKworCW1lbXNldChuZXRfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCisJZm9yIChrID0gMDsgayA8IHZkZXYtPm5vX29mX3ZwYXRoOyBrKyspIHsKKwkJbmV0X3N0YXRzLT5yeF9wYWNrZXRzICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X2ZybXM7CisJCW5ldF9zdGF0cy0+cnhfYnl0ZXMgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfYnl0ZXM7CisJCW5ldF9zdGF0cy0+cnhfZXJyb3JzICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X2Vycm9yczsKKwkJbmV0X3N0YXRzLT5tdWx0aWNhc3QgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfbWNhc3Q7CisJCW5ldF9zdGF0cy0+cnhfZHJvcHBlZCArPQorCQkJdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfZHJvcHBlZDsKKworCQluZXRfc3RhdHMtPnR4X3BhY2tldHMgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhfZnJtczsKKwkJbmV0X3N0YXRzLT50eF9ieXRlcyArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eF9ieXRlczsKKwkJbmV0X3N0YXRzLT50eF9lcnJvcnMgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhfZXJyb3JzOworCX0KKworCXJldHVybiBuZXRfc3RhdHM7Cit9CisKKy8qKgorICogdnhnZV9pb2N0bAorICogQGRldjogRGV2aWNlIHBvaW50ZXIuCisgKiBAaWZyOiBBbiBJT0NUTCBzcGVjaWZpYyBzdHJ1Y3R1cmUsIHRoYXQgY2FuIGNvbnRhaW4gYSBwb2ludGVyIHRvCisgKiAgICAgICBhIHByb3ByaWV0YXJ5IHN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdG8gdGhlIGRyaXZlci4KKyAqIEBjbWQ6IFRoaXMgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tbWFuZHMgdGhhdAorICogICAgICAgY2FuIGJlIHBhc3NlZCB0byB0aGUgSU9DVEwgZnVuY3Rpb25zLgorICoKKyAqIEVudHJ5IHBvaW50IGZvciB0aGUgSW9jdGwuCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworLyoqCisgKiB2eGdlX3R4X3dhdGNoZG9nCisgKiBAZGV2OiBwb2ludGVyIHRvIG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogV2F0Y2hkb2cgZm9yIHRyYW5zbWl0IHNpZGUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBpZiB0aGUgVHggUXVldWUgaXMgc3RvcHBlZAorICogZm9yIGEgcHJlLWRlZmluZWQgYW1vdW50IG9mIHRpbWUgd2hlbiB0aGUgSW50ZXJmYWNlIGlzIHN0aWxsIHVwLgorICovCitzdGF0aWMgdm9pZAordnhnZV90eF93YXRjaGRvZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJdmRldi0+Y3JpY19lcnJfZXZlbnQgPSBWWEdFX0hXX0VWRU5UX1JFU0VUX1NUQVJUOworCisJdnhnZV9yZXNldCh2ZGV2KTsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCisvKioKKyAqIHZ4Z2Vfdmxhbl9yeF9yZWdpc3RlcgorICogQGRldjogbmV0IGRldmljZSBwb2ludGVyLgorICogQGdycDogdmxhbiBncm91cAorICoKKyAqIFZsYW4gZ3JvdXAgcmVnaXN0cmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkCit2eGdlX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CisJaW50IHZwOworCXU2NCB2aWQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJaW50IGk7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbMF07CisJaWYgKChOVUxMID09IGdycCkgJiYgKHZwYXRoLT5pc19vcGVuKSkgeworCQkvKiBHZXQgdGhlIGZpcnN0IHZsYW4gKi8KKwkJc3RhdHVzID0gdnhnZV9od192cGF0aF92aWRfZ2V0KHZwYXRoLT5oYW5kbGUsICZ2aWQpOworCisJCXdoaWxlIChzdGF0dXMgPT0gVlhHRV9IV19PSykgeworCisJCQkvKiBEZWxldGUgdGhpcyB2bGFuIGZyb20gdGhlIHZpZCB0YWJsZSAqLworCQkJZm9yICh2cCA9IDA7IHZwIDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwKyspIHsKKwkJCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBdOworCQkJCWlmICghdnBhdGgtPmlzX29wZW4pCisJCQkJCWNvbnRpbnVlOworCisJCQkJdnhnZV9od192cGF0aF92aWRfZGVsZXRlKHZwYXRoLT5oYW5kbGUsIHZpZCk7CisJCQl9CisKKwkJCS8qIEdldCB0aGUgbmV4dCB2bGFuIHRvIGJlIGRlbGV0ZWQgKi8KKwkJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1swXTsKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfdmlkX2dldCh2cGF0aC0+aGFuZGxlLCAmdmlkKTsKKwkJfQorCX0KKworCXZkZXYtPnZsZ3JwID0gZ3JwOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJaWYgKHZkZXYtPnZwYXRoc1tpXS5pc19jb25maWd1cmVkKQorCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcudmxncnAgPSBncnA7CisJfQorCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworLyoqCisgKiB2eGdlX3ZsYW5fcnhfYWRkX3ZpZAorICogQGRldjogbmV0IGRldmljZSBwb2ludGVyLgorICogQHZpZDogdmlkCisgKgorICogQWRkIHRoZSB2bGFuIGlkIHRvIHRoZSBkZXZpY2VzIHZsYW4gaWQgdGFibGUKKyAqLworc3RhdGljIHZvaWQKK3Z4Z2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CisJaW50IHZwX2lkOworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwkvKiBBZGQgdGhlc2UgdmxhbiB0byB0aGUgdmlkIHRhYmxlICovCisJZm9yICh2cF9pZCA9IDA7IHZwX2lkIDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwX2lkKyspIHsKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwX2lkXTsKKwkJaWYgKCF2cGF0aC0+aXNfb3BlbikKKwkJCWNvbnRpbnVlOworCQl2eGdlX2h3X3ZwYXRoX3ZpZF9hZGQodnBhdGgtPmhhbmRsZSwgdmlkKTsKKwl9Cit9CisKKy8qKgorICogdnhnZV92bGFuX3J4X2FkZF92aWQKKyAqIEBkZXY6IG5ldCBkZXZpY2UgcG9pbnRlci4KKyAqIEB2aWQ6IHZpZAorICoKKyAqIFJlbW92ZSB0aGUgdmxhbiBpZCBmcm9tIHRoZSBkZXZpY2UncyB2bGFuIGlkIHRhYmxlCisgKi8KK3N0YXRpYyB2b2lkCit2eGdlX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKKwlpbnQgdnBfaWQ7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwl2bGFuX2dyb3VwX3NldF9kZXZpY2UodmRldi0+dmxncnAsIHZpZCwgTlVMTCk7CisKKwkvKiBEZWxldGUgdGhpcyB2bGFuIGZyb20gdGhlIHZpZCB0YWJsZSAqLworCWZvciAodnBfaWQgPSAwOyB2cF9pZCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cF9pZCsrKSB7CisJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cF9pZF07CisJCWlmICghdnBhdGgtPmlzX29wZW4pCisJCQljb250aW51ZTsKKwkJdnhnZV9od192cGF0aF92aWRfZGVsZXRlKHZwYXRoLT5oYW5kbGUsIHZpZCk7CisJfQorCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdnhnZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICAgICAgICAgID0gdnhnZV9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdnhnZV9jbG9zZSwKKwkubmRvX2dldF9zdGF0cyAgICAgICAgICA9IHZ4Z2VfZ2V0X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gdnhnZV94bWl0LAorCS5uZG9fdmFsaWRhdGVfYWRkciAgICAgID0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB2eGdlX3NldF9tdWx0aWNhc3QsCisKKwkubmRvX2RvX2lvY3RsICAgICAgICAgICA9IHZ4Z2VfaW9jdGwsCisKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAgICA9IHZ4Z2Vfc2V0X21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gdnhnZV9jaGFuZ2VfbXR1LAorCS5uZG9fdmxhbl9yeF9yZWdpc3RlciAgID0gdnhnZV92bGFuX3J4X3JlZ2lzdGVyLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCAgID0gdnhnZV92bGFuX3J4X2tpbGxfdmlkLAorCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gdnhnZV92bGFuX3J4X2FkZF92aWQsCisKKwkubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHZ4Z2VfdHhfd2F0Y2hkb2csCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlciAgICA9IHZ4Z2VfbmV0cG9sbCwKKyNlbmRpZgorfTsKKworaW50IF9fZGV2aW5pdCB2eGdlX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkJICAgc3RydWN0IHZ4Z2VfY29uZmlnICpjb25maWcsCisJCQkJICAgaW50IGhpZ2hfZG1hLCBpbnQgbm9fb2ZfdnBhdGgsCisJCQkJICAgc3RydWN0IHZ4Z2VkZXYgKip2ZGV2X291dCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJaW50IGksIHJldCA9IDAsIG5vX29mX3F1ZXVlID0gMTsKKwl1NjQgc3RhdDsKKworCSp2ZGV2X291dCA9IE5VTEw7CisJaWYgKGNvbmZpZy0+dHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9NVUxUSVFfU1RFRVJJTkcpCisJCW5vX29mX3F1ZXVlID0gbm9fb2ZfdnBhdGg7CisKKwluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCB2eGdlZGV2KSwKKwkJCW5vX29mX3F1ZXVlKTsKKwlpZiAobmRldiA9PSBOVUxMKSB7CisJCXZ4Z2VfZGVidWdfaW5pdCgKKwkJCXZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldiksCisJCSIlcyA6IGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBfb3V0MDsKKwl9CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdCgKKwkJdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJIiVzOiAlczolZCAgRW50ZXJpbmcuLi4iLAorCQluZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdmRldiA9IG5ldGRldl9wcml2KG5kZXYpOworCW1lbXNldCh2ZGV2LCAwLCBzaXplb2Yoc3RydWN0IHZ4Z2VkZXYpKTsKKworCXZkZXYtPm5kZXYgPSBuZGV2OworCXZkZXYtPmRldmggPSBobGRldjsKKwl2ZGV2LT5wZGV2ID0gaGxkZXYtPnBkZXY7CisJbWVtY3B5KCZ2ZGV2LT5jb25maWcsIGNvbmZpZywgc2l6ZW9mKHN0cnVjdCB2eGdlX2NvbmZpZykpOworCXZkZXYtPnJ4X2NzdW0gPSAxOwkvKiBFbmFibGUgUnggQ1NVTSBieSBkZWZhdWx0LiAqLworCisJU0VUX05FVERFVl9ERVYobmRldiwgJnZkZXYtPnBkZXYtPmRldik7CisKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlggfAorCQkJCU5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CisJLyogIERyaXZlciBlbnRyeSBwb2ludHMgKi8KKwluZGV2LT5pcnEgPSB2ZGV2LT5wZGV2LT5pcnE7CisJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGhsZGV2LT5iYXIwOworCisJbmRldi0+bmV0ZGV2X29wcyA9ICZ2eGdlX25ldGRldl9vcHM7CisKKwluZGV2LT53YXRjaGRvZ190aW1lbyA9IFZYR0VfTExfV0FUQ0hfRE9HX1RJTUVPVVQ7CisKKwlpbml0aWFsaXplX2V0aHRvb2xfb3BzKG5kZXYpOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB2cGF0aCAqLworCXZkZXYtPnZwYXRocyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgdnhnZV92cGF0aCkpICoKKwkJCQlub19vZl92cGF0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZGV2LT52cGF0aHMpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiB2cGF0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gX291dDE7CisJfQorCisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJIiVzIDogY2hlY2tzdW1pbmcgZW5hYmxlZCIsIF9fZnVuY19fKTsKKworCWlmIChoaWdoX2RtYSkgeworCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJCXZ4Z2VfZGVidWdfaW5pdCh2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAorCQkJIiVzIDogdXNpbmcgSGlnaCBETUEiLCBfX2Z1bmNfXyk7CisJfQorCisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7CisKKwlpZiAodmRldi0+Y29uZmlnLmdyb19lbmFibGUpCisJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCisJaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykKKwkJbmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gbm9fb2ZfdnBhdGg7CisKKyNpZmRlZiBORVRJRl9GX0xMVFgKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCBub19vZl92cGF0aDsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmdmRldi0+dnBhdGhzW2ldLmZpZm8udHhfbG9jayk7CisKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5kZXYpKSB7CisJCXZ4Z2VfZGVidWdfaW5pdCh2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAorCQkJIiVzOiAlcyA6IGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkISIsCisJCQluZGV2LT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gX291dDI7CisJfQorCisJLyogIFNldCB0aGUgZmFjdG9yeSBkZWZpbmVkIE1BQyBhZGRyZXNzIGluaXRpYWxseSAqLworCW5kZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47CisKKwkvKiBNYWtlIExpbmsgc3RhdGUgYXMgb2ZmIGF0IHRoaXMgcG9pbnQsIHdoZW4gdGhlIExpbmsgY2hhbmdlCisJICogaW50ZXJydXB0IGNvbWVzIHRoZSBzdGF0ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hhbmdlZCB0bworCSAqIHRoZSByaWdodCBzdGF0ZS4KKwkgKi8KKwluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKKworCXZ4Z2VfZGVidWdfaW5pdCh2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAorCQkiJXM6IEV0aGVybmV0IGRldmljZSByZWdpc3RlcmVkIiwKKwkJbmRldi0+bmFtZSk7CisKKwkqdmRldl9vdXQgPSB2ZGV2OworCisJLyogUmVzZXR0aW5nIHRoZSBEZXZpY2Ugc3RhdHMgKi8KKwlzdGF0dXMgPSB2eGdlX2h3X21ycGNpbV9zdGF0c19hY2Nlc3MoCisJCQkJaGxkZXYsCisJCQkJVlhHRV9IV19TVEFUU19PUF9DTEVBUl9BTExfU1RBVFMsCisJCQkJMCwKKwkJCQkwLAorCQkJCSZzdGF0KTsKKworCWlmIChzdGF0dXMgPT0gVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OKQorCQl2eGdlX2RlYnVnX2luaXQoCisJCQl2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAorCQkJIiVzOiBkZXZpY2Ugc3RhdHMgY2xlYXIgcmV0dXJucyIKKwkJCSJWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT04iLCBuZGV2LT5uYW1lKTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KHZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldiksCisJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAorCQluZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcmV0dXJuIHJldDsKK19vdXQyOgorCWtmcmVlKHZkZXYtPnZwYXRocyk7Citfb3V0MToKKwlmcmVlX25ldGRldihuZGV2KTsKK19vdXQwOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB2eGdlX2RldmljZV91bnJlZ2lzdGVyCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHVucmVnaXN0ZXIgYW5kIGZyZWUgbmV0d29yayBkZXZpY2UKKyAqLwordm9pZAordnhnZV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwljaGFyIGJ1ZltJRk5BTVNJWl07CisjaWYgKChWWEdFX0RFQlVHX0lOSVQgJiBWWEdFX0RFQlVHX01BU0spIHx8IFwKKwkoVlhHRV9ERUJVR19FTlRSWUVYSVQgJiBWWEdFX0RFQlVHX01BU0spKQorCXUzMiBsZXZlbF90cmFjZTsKKyNlbmRpZgorCisJZGV2ID0gaGxkZXYtPm5kZXY7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CisjaWYgKChWWEdFX0RFQlVHX0lOSVQgJiBWWEdFX0RFQlVHX01BU0spIHx8IFwKKwkoVlhHRV9ERUJVR19FTlRSWUVYSVQgJiBWWEdFX0RFQlVHX01BU0spKQorCWxldmVsX3RyYWNlID0gdmRldi0+bGV2ZWxfdHJhY2U7CisjZW5kaWYKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChsZXZlbF90cmFjZSwKKwkJIiVzOiAlczolZCIsIHZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwltZW1jcHkoYnVmLCB2ZGV2LT5uZGV2LT5uYW1lLCBJRk5BTVNJWik7CisKKwkvKiBpbiAyLjYgd2lsbCBjYWxsIHN0b3AoKSBpZiBkZXZpY2UgaXMgdXAgKi8KKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXZ4Z2VfZGVidWdfaW5pdChsZXZlbF90cmFjZSwgIiVzOiBldGhlcm5ldCBkZXZpY2UgdW5yZWdpc3RlcmVkIiwgYnVmKTsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChsZXZlbF90cmFjZSwKKwkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsIGJ1ZiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworLyoKKyAqIHZ4Z2VfY2FsbGJhY2tfY3JpdF9lcnIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgYWxhcm0gaGFuZGxlciBpbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIERyaXZlciBtdXN0IGFuYWx5emUgaXQgYmFzZWQgb24gdGhlIGV2ZW50IHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkCit2eGdlX2NhbGxiYWNrX2NyaXRfZXJyKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCWVudW0gdnhnZV9od19ldmVudCB0eXBlLCB1NjQgdnBfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGhsZGV2LT5uZGV2OworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdnBhdGhfaWR4OworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQodmRldi0+bGV2ZWxfdHJhY2UsCisJCSIlczogJXM6JWQiLCB2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJLyogTm90ZTogVGhpcyBldmVudCB0eXBlIHNob3VsZCBiZSB1c2VkIGZvciBkZXZpY2Ugd2lkZQorCSAqIGluZGljYXRpb25zIG9ubHkgLSBTZXJpb3VzIGVycm9ycywgU2xvdCBmcmVlemUgYW5kIGNyaXRpY2FsIGVycm9ycworCSAqLworCXZkZXYtPmNyaWNfZXJyX2V2ZW50ID0gdHlwZTsKKworCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwYXRoX2lkeCsrKQorCQlpZiAodmRldi0+dnBhdGhzW3ZwYXRoX2lkeF0uZGV2aWNlX2lkID09IHZwX2lkKQorCQkJYnJlYWs7CisKKwlpZiAoIXRlc3RfYml0KF9fVlhHRV9TVEFURV9SRVNFVF9DQVJELCAmdmRldi0+c3RhdGUpKSB7CisJCWlmICh0eXBlID09IFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUpIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IFNsb3QgaXMgZnJvemVuIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBWWEdFX0hXX0VWRU5UX1NFUlIpIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IEVuY291bnRlcmVkIFNlcmlvdXMgRXJyb3IiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gVlhHRV9IV19FVkVOVF9DUklUSUNBTF9FUlIpCisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBFbmNvdW50ZXJlZCBDcml0aWNhbCBFcnJvciIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJfQorCisJaWYgKCh0eXBlID09IFZYR0VfSFdfRVZFTlRfU0VSUikgfHwKKwkJKHR5cGUgPT0gVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRSkpIHsKKwkJaWYgKHVubGlrZWx5KHZkZXYtPmV4ZWNfbW9kZSkpCisJCQljbGVhcl9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CisJfSBlbHNlIGlmICh0eXBlID09IFZYR0VfSFdfRVZFTlRfQ1JJVElDQUxfRVJSKSB7CisJCXZ4Z2VfaHdfZGV2aWNlX21hc2tfYWxsKGhsZGV2KTsKKwkJaWYgKHVubGlrZWx5KHZkZXYtPmV4ZWNfbW9kZSkpCisJCQljbGVhcl9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CisJfSBlbHNlIGlmICgodHlwZSA9PSBWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSKSB8fAorCQkgICh0eXBlID09IFZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSKSkgeworCisJCWlmICh1bmxpa2VseSh2ZGV2LT5leGVjX21vZGUpKQorCQkJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworCQllbHNlIHsKKwkJCS8qIGNoZWNrIGlmIHRoaXMgdnBhdGggaXMgYWxyZWFkeSBzZXQgZm9yIHJlc2V0ICovCisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQodnBhdGhfaWR4LCAmdmRldi0+dnBfcmVzZXQpKSB7CisKKwkJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoaXMgdnBhdGggKi8KKwkJCQl2eGdlX3ZwYXRoX2ludHJfZGlzYWJsZSh2ZGV2LCB2cGF0aF9pZHgpOworCisJCQkJLyogc3RvcCB0aGUgcXVldWUgZm9yIHRoaXMgdnBhdGggKi8KKwkJCQl2eGdlX3N0b3BfdHhfcXVldWUoJnZkZXYtPnZwYXRoc1t2cGF0aF9pZHhdLgorCQkJCQkJCWZpZm8pOworCQkJfQorCQl9CisJfQorCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQodmRldi0+bGV2ZWxfdHJhY2UsCisJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCitzdGF0aWMgdm9pZCB2ZXJpZnlfYmFuZHdpZHRoKHZvaWQpCit7CisJaW50IGksIGJhbmRfd2lkdGgsIHRvdGFsID0gMCwgZXF1YWxfcHJpb3JpdHkgPSAwOworCisJLyogMS4gSWYgdXNlciBlbnRlcnMgMCBmb3Igc29tZSBmaWZvLCBnaXZlIGVxdWFsIHByaW9yaXR5IHRvIGFsbCAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJaWYgKGJ3X3BlcmNlbnRhZ2VbaV0gPT0gMCkgeworCQkJZXF1YWxfcHJpb3JpdHkgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWVxdWFsX3ByaW9yaXR5KSB7CisJCS8qIDIuIElmIHN1bSBleGNlZWRzIDEwMCwgZ2l2ZSBlcXVhbCBwcmlvcml0eSB0byBhbGwgKi8KKwkJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQkJaWYgKGJ3X3BlcmNlbnRhZ2VbaV0gPT0gMHhGRikKKwkJCQlicmVhazsKKworCQkJdG90YWwgKz0gYndfcGVyY2VudGFnZVtpXTsKKwkJCWlmICh0b3RhbCA+IFZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWCkgeworCQkJCWVxdWFsX3ByaW9yaXR5ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICghZXF1YWxfcHJpb3JpdHkpIHsKKwkJLyogSXMgYWxsIHRoZSBiYW5kd2lkdGggY29uc3VtZWQ/ICovCisJCWlmICh0b3RhbCA8IFZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWCkgeworCQkJaWYgKGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTKSB7CisJCQkJLyogU3BsaXQgcmVzdCBvZiBidyBlcXVhbGx5IGFtb25nIG5leHQgVlBzKi8KKwkJCQliYW5kX3dpZHRoID0KKwkJCQkgIChWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NQVggIC0gdG90YWwpIC8KKwkJCQkJKFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFMgLSBpKTsKKwkJCQlpZiAoYmFuZF93aWR0aCA8IDIpIC8qIG1pbiBvZiAyJSAqLworCQkJCQllcXVhbF9wcmlvcml0eSA9IDE7CisJCQkJZWxzZSB7CisJCQkJCWZvciAoOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsKKwkJCQkJCWkrKykKKwkJCQkJCWJ3X3BlcmNlbnRhZ2VbaV0gPQorCQkJCQkJCWJhbmRfd2lkdGg7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTKQorCQkJZXF1YWxfcHJpb3JpdHkgPSAxOworCX0KKworCWlmIChlcXVhbF9wcmlvcml0eSkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IEFzc2lnbmluZyBlcXVhbCBiYW5kd2lkdGggdG8gYWxsIHRoZSB2cGF0aHMiLAorCQkJVlhHRV9EUklWRVJfTkFNRSk7CisJCWJ3X3BlcmNlbnRhZ2VbMF0gPSBWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NQVggLworCQkJCQlWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOworCQlmb3IgKGkgPSAxOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKQorCQkJYndfcGVyY2VudGFnZVtpXSA9IGJ3X3BlcmNlbnRhZ2VbMF07CisJfQorCisJcmV0dXJuOworfQorCisvKgorICogVnBhdGggY29uZmlndXJhdGlvbgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2eGdlX2NvbmZpZ192cGF0aHMoCisJCQlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpkZXZpY2VfY29uZmlnLAorCQkJdTY0IHZwYXRoX21hc2ssIHN0cnVjdCB2eGdlX2NvbmZpZyAqY29uZmlnX3BhcmFtKQoreworCWludCBpLCBub19vZl92cGF0aHMgPSAwLCBkZWZhdWx0X25vX3ZwYXRoID0gMCwgdGVtcDsKKwl1MzIgdHhkbF9zaXplLCB0eGRsX3Blcl9tZW1ibG9jazsKKworCXRlbXAgPSBkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2OworCWlmICgoZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldiA9PSBWWEdFX1VTRV9ERUZBVUxUKSAmJgorCQkobWF4X2NvbmZpZ19kZXYgPT0gVlhHRV9NQVhfQ09ORklHX0RFVikpIHsKKwkJLyogTm8gbW9yZSBDUFUuIFJldHVybiB2cGF0aCBudW1iZXIgYXMgemVyby4qLworCQlpZiAoZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzID09IC0xKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCFkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMpCisJCQlkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKKworCQlkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2ID0gZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzID4+IDE7CisJCWlmICghZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldikKKwkJCWRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYgPSAxOworCisJCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspCisJCQlpZiAoIXZ4Z2VfYlZBTG4odnBhdGhfbWFzaywgaSwgMSkpCisJCQkJY29udGludWU7CisJCQllbHNlCisJCQkJZGVmYXVsdF9ub192cGF0aCsrOworCQlpZiAoZGVmYXVsdF9ub192cGF0aCA8IGRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYpCisJCQlkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2ID0gZGVmYXVsdF9ub192cGF0aDsKKworCQlkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMgPSBkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMgLQorCQkJCShkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2ICogMik7CisJCWlmIChkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMgPD0gMCkKKwkJCWRyaXZlcl9jb25maWctPmdfbm9fY3B1cyA9IC0xOworCX0KKworCWlmIChkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2ID09IDEpIHsKKwkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCSIlczogRGlzYWJsZSB0eCBhbmQgcnggc3RlZXJpbmcsICIKKwkJCSJhcyBzaW5nbGUgdnBhdGggaXMgY29uZmlndXJlZCIsIFZYR0VfRFJJVkVSX05BTUUpOworCQljb25maWdfcGFyYW0tPnJ0aF9zdGVlcmluZyA9IE5PX1NURUVSSU5HOworCQljb25maWdfcGFyYW0tPnR4X3N0ZWVyaW5nX3R5cGUgPSBOT19TVEVFUklORzsKKwkJZGV2aWNlX2NvbmZpZy0+cnRoX2VuID0gMDsKKwl9CisKKwkvKiBjb25maWd1cmUgYmFuZHdpZHRoICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLm1pbl9iYW5kd2lkdGggPSBid19wZXJjZW50YWdlW2ldOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udnBfaWQgPSBpOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ubXR1ID0gVlhHRV9IV19ERUZBVUxUX01UVTsKKwkJaWYgKG5vX29mX3ZwYXRocyA8IGRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYpIHsKKwkJCWlmICghdnhnZV9iVkFMbih2cGF0aF9tYXNrLCBpLCAxKSkgeworCQkJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkJCSIlczogdnBhdGg6ICVkIGlzIG5vdCBhdmFpbGFibGUiLAorCQkJCQlWWEdFX0RSSVZFUl9OQU1FLCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCQkJIiVzOiB2cGF0aDogJWQgYXZhaWxhYmxlIiwKKwkJCQkJVlhHRV9EUklWRVJfTkFNRSwgaSk7CisJCQkJbm9fb2ZfdnBhdGhzKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJCSIlczogdnBhdGg6ICVkIGlzIG5vdCBjb25maWd1cmVkLCAiCisJCQkJIm1heF9jb25maWdfdnBhdGggZXhjZWVkZWQiLAorCQkJCVZYR0VfRFJJVkVSX05BTUUsIGkpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBDb25maWd1cmUgVHggZmlmbydzICovCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmVuYWJsZSA9CisJCQkJCQlWWEdFX0hXX0ZJRk9fRU5BQkxFOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5tYXhfZnJhZ3MgPQorCQkJCU1BWF9TS0JfRlJBR1M7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLm1lbWJsb2NrX3NpemUgPQorCQkJVlhHRV9IV19NSU5fRklGT19NRU1CTE9DS19TSVpFOworCisJCXR4ZGxfc2l6ZSA9IE1BWF9TS0JfRlJBR1MgKiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQpOworCQl0eGRsX3Blcl9tZW1ibG9jayA9IFZYR0VfSFdfTUlOX0ZJRk9fTUVNQkxPQ0tfU0laRSAvIHR4ZGxfc2l6ZTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5maWZvX2Jsb2NrcyA9CisJCQkoKFZYR0VfREVGX0ZJRk9fTEVOR1RIIC0gMSkgLyB0eGRsX3Blcl9tZW1ibG9jaykgKyAxOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmludHIgPQorCQkJCVZYR0VfSFdfRklGT19RVUVVRV9JTlRSX0RJU0FCTEU7CisKKwkJLyogQ29uZmlndXJlIHR0aSBwcm9wZXJ0aWVzICovCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkuaW50cl9lbmFibGUgPQorCQkJCQlWWEdFX0hXX1RJTV9JTlRSX0VOQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLmJ0aW1lcl92YWwgPQorCQkJKFZYR0VfVFRJX0JUSU1FUl9WQUwgKiAxMDAwKSAvIDI3MjsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnRpbWVyX2FjX2VuID0KKwkJCQlWWEdFX0hXX1RJTV9USU1FUl9BQ19FTkFCTEU7CisKKwkJLyogRm9yIG1zaS14IHdpdGggbmFwaSAoZWFjaCB2ZWN0b3IKKwkJaGFzIGEgaGFuZGxlciBvZiBpdHMgb3duKSAtCisJCVNldCBDSSB0byBPRkYgZm9yIGFsbCB2cGF0aHMgKi8KKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS50aW1lcl9jaV9lbiA9CisJCQlWWEdFX0hXX1RJTV9USU1FUl9DSV9ESVNBQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudGltZXJfcmlfZW4gPQorCQkJCVZYR0VfSFdfVElNX1RJTUVSX1JJX0RJU0FCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51dGlsX3NlbCA9CisJCQlWWEdFX0hXX1RJTV9VVElMX1NFTF9MRUdBQ1lfVFhfTkVUX1VUSUw7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS5sdGltZXJfdmFsID0KKwkJCShWWEdFX1RUSV9MVElNRVJfVkFMICogMTAwMCkgLyAyNzI7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS5ydGltZXJfdmFsID0KKwkJCShWWEdFX1RUSV9SVElNRVJfVkFMICogMTAwMCkgLyAyNzI7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51cmFuZ2VfYSA9IFRUSV9UWF9VUkFOR0VfQTsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51cmFuZ2VfYiA9IFRUSV9UWF9VUkFOR0VfQjsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51cmFuZ2VfYyA9IFRUSV9UWF9VUkFOR0VfQzsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51ZWNfYSA9IFRUSV9UWF9VRkNfQTsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51ZWNfYiA9IFRUSV9UWF9VRkNfQjsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51ZWNfYyA9IFRUSV9UWF9VRkNfQzsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51ZWNfZCA9IFRUSV9UWF9VRkNfRDsKKworCQkvKiBDb25maWd1cmUgUnggcmluZ3MgKi8KKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcuZW5hYmxlICA9CisJCQkJCQlWWEdFX0hXX1JJTkdfRU5BQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLnJpbmdfYmxvY2tzICA9CisJCQkJCQlWWEdFX0hXX0RFRl9SSU5HX0JMT0NLUzsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcuYnVmZmVyX21vZGUgPQorCQkJVlhHRV9IV19SSU5HX1JYRF9CVUZGRVJfTU9ERV8xOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5yeGRzX2xpbWl0ICA9CisJCQkJVlhHRV9IV19ERUZfUklOR19SWERTX0xJTUlUOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5zY2F0dGVyX21vZGUgPQorCQkJCQlWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX0E7CisKKwkJLyogQ29uZmlndXJlIHJ0aSBwcm9wZXJ0aWVzICovCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkuaW50cl9lbmFibGUgPQorCQkJCQlWWEdFX0hXX1RJTV9JTlRSX0VOQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLmJ0aW1lcl92YWwgPQorCQkJKFZYR0VfUlRJX0JUSU1FUl9WQUwgKiAxMDAwKS8yNzI7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS50aW1lcl9hY19lbiA9CisJCQkJCQlWWEdFX0hXX1RJTV9USU1FUl9BQ19FTkFCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS50aW1lcl9jaV9lbiA9CisJCQkJCQlWWEdFX0hXX1RJTV9USU1FUl9DSV9ESVNBQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudGltZXJfcmlfZW4gPQorCQkJCQkJVlhHRV9IV19USU1fVElNRVJfUklfRElTQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnV0aWxfc2VsID0KKwkJCQlWWEdFX0hXX1RJTV9VVElMX1NFTF9MRUdBQ1lfUlhfTkVUX1VUSUw7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51cmFuZ2VfYSA9CisJCQkJCQlSVElfUlhfVVJBTkdFX0E7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudXJhbmdlX2IgPQorCQkJCQkJUlRJX1JYX1VSQU5HRV9COworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVyYW5nZV9jID0KKwkJCQkJCVJUSV9SWF9VUkFOR0VfQzsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51ZWNfYSA9IFJUSV9SWF9VRkNfQTsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51ZWNfYiA9IFJUSV9SWF9VRkNfQjsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51ZWNfYyA9IFJUSV9SWF9VRkNfQzsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51ZWNfZCA9IFJUSV9SWF9VRkNfRDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnJ0aW1lcl92YWwgPQorCQkJKFZYR0VfUlRJX1JUSU1FUl9WQUwgKiAxMDAwKSAvIDI3MjsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLmx0aW1lcl92YWwgPQorCQkJKFZYR0VfUlRJX0xUSU1FUl9WQUwgKiAxMDAwKSAvIDI3MjsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnBhX3N0cmlwX3ZsYW5fdGFnID0KKwkJCXZsYW5fdGFnX3N0cmlwOworCX0KKworCWRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYgPSB0ZW1wOworCXJldHVybiBub19vZl92cGF0aHM7Cit9CisKKy8qIGluaXRpYWxpemUgZGV2aWNlIGNvbmZpZ3VyYXRyaW9ucyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHZ4Z2VfZGV2aWNlX2NvbmZpZ19pbml0KAorCQkJCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKmRldmljZV9jb25maWcsCisJCQkJaW50ICppbnRyX3R5cGUpCit7CisJLyogVXNlZCBmb3IgQ1FSUS9TUlEuICovCisJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9pbml0aWFsID0KKwkJCVZYR0VfSFdfSU5JVElBTF9ETUFfQkxPQ0tfUE9PTF9TSVpFOworCisJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9tYXggPQorCQkJVlhHRV9IV19NQVhfRE1BX0JMT0NLX1BPT0xfU0laRTsKKworCWlmIChtYXhfbWFjX3ZwYXRoID4gVlhHRV9NQVhfTUFDX0FERFJfQ09VTlQpCisJCW1heF9tYWNfdnBhdGggPSBWWEdFX01BWF9NQUNfQUREUl9DT1VOVDsKKworI2lmbmRlZiBDT05GSUdfUENJX01TSQorCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJIiVzOiBUaGlzIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0ICIKKwkJIk1TSS1YLiBEZWZhdWx0aW5nIHRvIElOVEEiLCBWWEdFX0RSSVZFUl9OQU1FKTsKKwkqaW50cl90eXBlID0gSU5UQTsKKyNlbmRpZgorCisJLyogQ29uZmlndXJlIHdoZXRoZXIgTVNJLVggb3IgSVJRTC4gKi8KKwlzd2l0Y2ggKCppbnRyX3R5cGUpIHsKKwljYXNlIElOVEE6CisJCWRldmljZV9jb25maWctPmludHJfbW9kZSA9IFZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkU7CisJCWJyZWFrOworCisJY2FzZSBNU0lfWDoKKwkJZGV2aWNlX2NvbmZpZy0+aW50cl9tb2RlID0gVlhHRV9IV19JTlRSX01PREVfTVNJWDsKKwkJYnJlYWs7CisJfQorCS8qIFRpbWVyIHBlcmlvZCBiZXR3ZWVuIGRldmljZSBwb2xsICovCisJZGV2aWNlX2NvbmZpZy0+ZGV2aWNlX3BvbGxfbWlsbGlzID0gVlhHRV9USU1FUl9ERUxBWTsKKworCS8qIENvbmZpZ3VyZSBtYWMgYmFzZWQgc3RlZXJpbmcuICovCisJZGV2aWNlX2NvbmZpZy0+cnRzX21hY19lbiA9IGFkZHJfbGVhcm5fZW47CisKKwkvKiBDb25maWd1cmUgVnBhdGhzICovCisJZGV2aWNlX2NvbmZpZy0+cnRoX2l0X3R5cGUgPSBWWEdFX0hXX1JUSF9JVF9UWVBFX01VTFRJX0lUOworCisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgIiVzIDogRGV2aWNlIENvbmZpZyBQYXJhbXMgIiwKKwkJCV9fZnVuY19fKTsKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAiZG1hX2Jsb2NrcG9vbF9pbml0aWFsIDogJWQiLAorCQkJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9pbml0aWFsKTsKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAiZG1hX2Jsb2NrcG9vbF9tYXggOiAlZCIsCisJCQlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX21heCk7CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgImludHJfbW9kZSA6ICVkIiwKKwkJCWRldmljZV9jb25maWctPmludHJfbW9kZSk7CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgImRldmljZV9wb2xsX21pbGxpcyA6ICVkIiwKKwkJCWRldmljZV9jb25maWctPmRldmljZV9wb2xsX21pbGxpcyk7CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgInJ0c19tYWNfZW4gOiAlZCIsCisJCQlkZXZpY2VfY29uZmlnLT5ydHNfbWFjX2VuKTsKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAicnRoX2VuIDogJWQiLAorCQkJZGV2aWNlX2NvbmZpZy0+cnRoX2VuKTsKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAicnRoX2l0X3R5cGUgOiAlZCIsCisJCQlkZXZpY2VfY29uZmlnLT5ydGhfaXRfdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB2eGdlX3ByaW50X3Bhcm0oc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHU2NCB2cGF0aF9tYXNrKQoreworCWludCBpOworCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCSIlczogJWQgVnBhdGgocykgb3BlbmVkIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgdmRldi0+bm9fb2ZfdnBhdGgpOworCisJc3dpdGNoICh2ZGV2LT5jb25maWcuaW50cl90eXBlKSB7CisJY2FzZSBJTlRBOgorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogSW50ZXJydXB0IHR5cGUgSU5UQSIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQlicmVhazsKKworCWNhc2UgTVNJX1g6CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBJbnRlcnJ1cHQgdHlwZSBNU0ktWCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQlicmVhazsKKwl9CisKKwlpZiAodmRldi0+Y29uZmlnLnJ0aF9zdGVlcmluZykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogUlRIIHN0ZWVyaW5nIGVuYWJsZWQgZm9yIFRDUF9JUFY0IiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCX0gZWxzZSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBSVEggc3RlZXJpbmcgZGlzYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwl9CisKKwlzd2l0Y2ggKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlKSB7CisJY2FzZSBOT19TVEVFUklORzoKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFR4IHN0ZWVyaW5nIGRpc2FibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgVFhfUFJJT1JJVFlfU1RFRVJJTkc6CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBVbnN1cHBvcnRlZCB0eCBzdGVlcmluZyBvcHRpb24iLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBUeCBzdGVlcmluZyBkaXNhYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQl2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9IDA7CisJCWJyZWFrOworCWNhc2UgVFhfVkxBTl9TVEVFUklORzoKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFVuc3VwcG9ydGVkIHR4IHN0ZWVyaW5nIG9wdGlvbiIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFR4IHN0ZWVyaW5nIGRpc2FibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCXZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBUWF9NVUxUSVFfU1RFRVJJTkc6CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBUeCBtdWx0aXF1ZXVlIHN0ZWVyaW5nIGVuYWJsZWQiLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgVFhfUE9SVF9TVEVFUklORzoKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFR4IHBvcnQgc3RlZXJpbmcgZW5hYmxlZCIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBVbnN1cHBvcnRlZCB0eCBzdGVlcmluZyB0eXBlIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVHggc3RlZXJpbmcgZGlzYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJdmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPSAwOworCX0KKworCWlmICh2ZGV2LT5jb25maWcuZ3JvX2VuYWJsZSkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IEdlbmVyaWMgcmVjZWl2ZSBvZmZsb2FkIGVuYWJsZWQiLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisJfSBlbHNlCisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBHZW5lcmljIHJlY2VpdmUgb2ZmbG9hZCBkaXNhYmxlZCIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKworCWlmICh2ZGV2LT5jb25maWcuYWRkcl9sZWFybl9lbikKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IE1BQyBBZGRyZXNzIGxlYXJuaW5nIGVuYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkiJXM6IFJ4IGRvb3JiZWxsIG1vZGUgZW5hYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQlpZiAoIXZ4Z2VfYlZBTG4odnBhdGhfbWFzaywgaSwgMSkpCisJCQljb250aW51ZTsKKwkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCSIlczogTVRVIHNpemUgLSAlZCIsIHZkZXYtPm5kZXYtPm5hbWUsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSh2ZGV2LT5kZXZoKSktPgorCQkJCWNvbmZpZy52cF9jb25maWdbaV0ubXR1KTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFZMQU4gdGFnIHN0cmlwcGluZyAlcyIsIHZkZXYtPm5kZXYtPm5hbWUsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSh2ZGV2LT5kZXZoKSktPgorCQkJCWNvbmZpZy52cF9jb25maWdbaV0ucnBhX3N0cmlwX3ZsYW5fdGFnCisJCQk/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogUmluZyBibG9ja3MgOiAlZCIsIHZkZXYtPm5kZXYtPm5hbWUsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSh2ZGV2LT5kZXZoKSktPgorCQkJCWNvbmZpZy52cF9jb25maWdbaV0ucmluZy5yaW5nX2Jsb2Nrcyk7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBGaWZvIGJsb2NrcyA6ICVkIiwgdmRldi0+bmRldi0+bmFtZSwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopKHZkZXYtPmRldmgpKS0+CisJCQkJY29uZmlnLnZwX2NvbmZpZ1tpXS5maWZvLmZpZm9fYmxvY2tzKTsKKwkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCSIlczogTWF4IGZyYWdzIDogJWQiLCB2ZGV2LT5uZGV2LT5uYW1lLAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikodmRldi0+ZGV2aCkpLT4KKwkJCQljb25maWcudnBfY29uZmlnW2ldLmZpZm8ubWF4X2ZyYWdzKTsKKwkJYnJlYWs7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1BNCisvKioKKyAqIHZ4Z2VfcG1fc3VzcGVuZCAtIHZ4Z2UgcG93ZXIgbWFuYWdlbWVudCBzdXNwZW5kIGVudHJ5IHBvaW50CisgKgorICovCitzdGF0aWMgaW50IHZ4Z2VfcG1fc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiAtRU5PU1lTOworfQorLyoqCisgKiB2eGdlX3BtX3Jlc3VtZSAtIHZ4Z2UgcG93ZXIgbWFuYWdlbWVudCByZXN1bWUgZW50cnkgcG9pbnQKKyAqCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9wbV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKyNlbmRpZgorCisvKioKKyAqIHZ4Z2VfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nCisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgdnhnZV9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJCXBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9CisJCShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBobGRldi0+bmRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJLyogQnJpbmcgZG93biB0aGUgY2FyZCwgd2hpbGUgYXZvaWRpbmcgUENJIEkvTyAqLworCQlkb192eGdlX2Nsb3NlKG5ldGRldiwgMCk7CisJfQorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7Cit9CisKKy8qKgorICogdnhnZV9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgorICogQXQgdGhpcyBwb2ludCwgdGhlIGNhcmQgaGFzIGV4cHJpZW5jZWQgYSBoYXJkIHJlc2V0LAorICogZm9sbG93ZWQgYnkgZml4dXBzIGJ5IEJJT1MsIGFuZCBoYXMgaXRzIGNvbmZpZyBzcGFjZQorICogc2V0IHVwIGlkZW50aWNhbGx5IHRvIHdoYXQgaXQgd2FzIGF0IGNvbGQgYm9vdC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgdnhnZV9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPQorCQkoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaGxkZXYtPm5kZXY7CisKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogIgorCQkJIkNhbm5vdCByZS1lbmFibGUgZGV2aWNlIGFmdGVyIHJlc2V0XG4iLAorCQkJVlhHRV9EUklWRVJfTkFNRSk7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCXZ4Z2VfcmVzZXQodmRldik7CisKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworfQorCisvKioKKyAqIHZ4Z2VfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMKKyAqIHVzIHRoYXQgaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZCB2eGdlX2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0KKwkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGhsZGV2LT5uZGV2OworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlpZiAodnhnZV9vcGVuKG5ldGRldikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICIKKwkJCQkiQ2FuJ3QgYnJpbmcgZGV2aWNlIGJhY2sgdXAgYWZ0ZXIgcmVzZXRcbiIsCisJCQkJVlhHRV9EUklWRVJfTkFNRSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7Cit9CisKKy8qKgorICogdnhnZV9wcm9iZQorICogQHBkZXYgOiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgUENJIHJlbGF0ZWQgaW5mb3JtYXRpb24gb2YgdGhlIGRldmljZS4KKyAqIEBwcmU6IExpc3Qgb2YgUENJIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgbGlzdGVkIGluIHZ4Z2VfaWRfdGFibGUuCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBuZXcgUENJIGRldmljZSBnZXRzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplcworICogaXQuCisgKiBSZXR1cm4gdmFsdWU6CisgKiByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgbmVnYXRpdmUgb24gZmFpbHVyZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0Cit2eGdlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcHJlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXY7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJaW50IHJldDsKKwlpbnQgaGlnaF9kbWEgPSAwOworCXU2NCB2cGF0aF9tYXNrID0gMDsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgdnhnZV9jb25maWcgbGxfY29uZmlnOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKmRldmljZV9jb25maWcgPSBOVUxMOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9hdHRyIGF0dHI7CisJaW50IGksIGosIG5vX29mX3ZwYXRoID0gMCwgbWF4X3ZwYXRoX3N1cHBvcnRlZCA9IDA7CisJdTggKm1hY2FkZHI7CisJc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICplbnRyeTsKKwlzdGF0aWMgaW50IGJ1cyA9IC0xLCBkZXZpY2UgPSAtMTsKKwl1OCBuZXdfZGV2aWNlID0gMDsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJYXR0ci5wZGV2ID0gcGRldjsKKworCWlmIChidXMgIT0gcGRldi0+YnVzLT5udW1iZXIpCisJCW5ld19kZXZpY2UgPSAxOworCWlmIChkZXZpY2UgIT0gUENJX1NMT1QocGRldi0+ZGV2Zm4pKQorCQluZXdfZGV2aWNlID0gMTsKKworCWJ1cyA9IHBkZXYtPmJ1cy0+bnVtYmVyOworCWRldmljZSA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKTsKKworCWlmIChuZXdfZGV2aWNlKSB7CisJCWlmIChkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCAmJgorCQkgICAoZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQgIT0KKwkJCWRyaXZlcl9jb25maWctPnRvdGFsX2Rldl9jbnQpKQorCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogQ29uZmlndXJlZCAlZCBvZiAlZCBkZXZpY2VzIiwKKwkJCQlWWEdFX0RSSVZFUl9OQU1FLAorCQkJCWRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250LAorCQkJCWRyaXZlcl9jb25maWctPnRvdGFsX2Rldl9jbnQpOworCQlkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCA9IDA7CisJCWRyaXZlcl9jb25maWctPnRvdGFsX2Rldl9jbnQgPSAwOworCQlkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMgPSAwOworCQlkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2ID0gbWF4X2NvbmZpZ192cGF0aDsKKwl9CisKKwlkcml2ZXJfY29uZmlnLT50b3RhbF9kZXZfY250Kys7CisJaWYgKCsrZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQgPiBtYXhfY29uZmlnX2RldikgeworCQlyZXQgPSAwOworCQlnb3RvIF9leGl0MDsKKwl9CisKKwlkZXZpY2VfY29uZmlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyksCisJCUdGUF9LRVJORUwpOworCWlmICghZGV2aWNlX2NvbmZpZykgeworCQlyZXQgPSAtRU5PTUVNOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiZGV2aWNlX2NvbmZpZyA6IG1hbGxvYyBmYWlsZWQgJXMgJWQiLAorCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJZ290byBfZXhpdDA7CisJfQorCisJbWVtc2V0KCZsbF9jb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgdnhnZV9jb25maWcpKTsKKwlsbF9jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9IFRYX01VTFRJUV9TVEVFUklORzsKKwlsbF9jb25maWcuaW50cl90eXBlID0gTVNJX1g7CisJbGxfY29uZmlnLm5hcGlfd2VpZ2h0ID0gTkVXX05BUElfV0VJR0hUOworCWxsX2NvbmZpZy5ydGhfc3RlZXJpbmcgPSBSVEhfU1RFRVJJTkc7CisKKwkvKiBnZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisJdnhnZV9od19kZXZpY2VfY29uZmlnX2RlZmF1bHRfZ2V0KGRldmljZV9jb25maWcpOworCisJLyogaW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KKwl2eGdlX2RldmljZV9jb25maWdfaW5pdChkZXZpY2VfY29uZmlnLCAmbGxfY29uZmlnLmludHJfdHlwZSk7CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6IGNhbiBub3QgZW5hYmxlIFBDSSBkZXZpY2UiLCBfX2Z1bmNfXyk7CisJCWdvdG8gX2V4aXQwOworCX0KKworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpKSB7CisJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkiJXMgOiB1c2luZyA2NGJpdCBETUEiLCBfX2Z1bmNfXyk7CisKKwkJaGlnaF9kbWEgPSAxOworCisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwKKwkJCQkJCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTCkpIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXMgOiB1bmFibGUgdG8gb2J0YWluIDY0Yml0IERNQSBmb3IgIgorCQkJCSJjb25zaXN0ZW50IGFsbG9jYXRpb25zIiwgX19mdW5jX18pOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gX2V4aXQxOworCQl9CisJfSBlbHNlIGlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmVUwpKSB7CisJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkiJXMgOiB1c2luZyAzMmJpdCBETUEiLCBfX2Z1bmNfXyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBfZXhpdDE7CisJfQorCisJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgVlhHRV9EUklWRVJfTkFNRSkpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogcmVxdWVzdCByZWdpb25zIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBfZXhpdDE7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlhdHRyLmJhcjAgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7CisJaWYgKCFhdHRyLmJhcjApIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogY2Fubm90IHJlbWFwIGlvIG1lbW9yeSBiYXIwIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIF9leGl0MjsKKwl9CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJInBjaSBpb3JlbWFwIGJhcjA6ICVwOjB4JWxseCIsCisJCWF0dHIuYmFyMCwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpOworCisJYXR0ci5iYXIxID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDIpOworCWlmICghYXR0ci5iYXIxKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6IGNhbm5vdCByZW1hcCBpbyBtZW1vcnkgYmFyMiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBfZXhpdDM7CisJfQorCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCSJwY2kgaW9yZW1hcCBiYXIxOiAlcDoweCVsbHgiLAorCQlhdHRyLmJhcjEsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpKTsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm9fZ2V0KGF0dHIuYmFyMCwKKwkJCSZsbF9jb25maWcuZGV2aWNlX2h3X2luZm8pOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IFJlYWRpbmcgb2YgaGFyZHdhcmUgaW5mbyBmYWlsZWQuIgorCQkJIlBsZWFzZSB0cnkgdXBncmFkaW5nIHRoZSBmaXJtd2FyZS4iLCBWWEdFX0RSSVZFUl9OQU1FKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBfZXhpdDQ7CisJfQorCisJaWYgKGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLm1ham9yICE9CisJCVZYR0VfRFJJVkVSX1ZFUlNJT05fTUFKT1IpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIkZXIFZlci4obWFqKTogJWQgbm90IGRyaXZlcidzIGV4cGVjdGVkIHZlcnNpb246ICVkIiwKKwkJCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLm1ham9yLAorCQkJVlhHRV9EUklWRVJfVkVSU0lPTl9NQUpPUik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gX2V4aXQ0OworCX0KKworCXZwYXRoX21hc2sgPSBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8udnBhdGhfbWFzazsKKwlpZiAodnBhdGhfbWFzayA9PSAwKSB7CisJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkiJXM6IE5vIHZwYXRocyBhdmFpbGFibGUgaW4gZGV2aWNlIiwgVlhHRV9EUklWRVJfTkFNRSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gX2V4aXQ0OworCX0KKworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCSIlczolZCAgVnBhdGggbWFzayA9ICVsbHgiLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpdnBhdGhfbWFzayk7CisKKwkvKiBDaGVjayBob3cgbWFueSB2cGF0aHMgYXJlIGF2YWlsYWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJaWYgKCEoKHZwYXRoX21hc2spICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCQltYXhfdnBhdGhfc3VwcG9ydGVkKys7CisJfQorCisJLyoKKwkgKiBDb25maWd1cmUgdnBhdGhzIGFuZCBnZXQgZHJpdmVyIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHZwYXRocworCSAqIHdoaWNoIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWF4aW11bSB2cGF0aHMgcGVyIGZ1bmN0aW9uLgorCSAqLworCW5vX29mX3ZwYXRoID0gdnhnZV9jb25maWdfdnBhdGhzKGRldmljZV9jb25maWcsIHZwYXRoX21hc2ssICZsbF9jb25maWcpOworCWlmICghbm9fb2ZfdnBhdGgpIHsKKwkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9FUlIsCisJCQkiJXM6IE5vIG1vcmUgdnBhdGhzIHRvIGNvbmZpZ3VyZSIsIFZYR0VfRFJJVkVSX05BTUUpOworCQlyZXQgPSAwOworCQlnb3RvIF9leGl0NDsKKwl9CisKKwkvKiBTZXR0aW5nIGRyaXZlciBjYWxsYmFja3MgKi8KKwlhdHRyLnVsZF9jYWxsYmFja3MubGlua191cCA9IHZ4Z2VfY2FsbGJhY2tfbGlua191cDsKKwlhdHRyLnVsZF9jYWxsYmFja3MubGlua19kb3duID0gdnhnZV9jYWxsYmFja19saW5rX2Rvd247CisJYXR0ci51bGRfY2FsbGJhY2tzLmNyaXRfZXJyID0gdnhnZV9jYWxsYmFja19jcml0X2VycjsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUoJmhsZGV2LCAmYXR0ciwgZGV2aWNlX2NvbmZpZyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgKCVkKSIsIHN0YXR1cyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBfZXhpdDQ7CisJfQorCisJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KGhsZGV2LCBWWEdFX0VSUiwgVlhHRV9DT01QT05FTlRfTEwpOworCisJLyogc2V0IHByaXZhdGUgZGV2aWNlIGluZm8gKi8KKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaGxkZXYpOworCisJbGxfY29uZmlnLmdyb19lbmFibGUgPSBWWEdFX0dST19BTFdBWVNfQUdHUkVHQVRFOworCWxsX2NvbmZpZy5maWZvX2luZGljYXRlX21heF9wa3RzID0gVlhHRV9GSUZPX0lORElDQVRFX01BWF9QS1RTOworCWxsX2NvbmZpZy5hZGRyX2xlYXJuX2VuID0gYWRkcl9sZWFybl9lbjsKKwlsbF9jb25maWcucnRoX2FsZ29yaXRobSA9IFJUSF9BTEdfSkVOS0lOUzsKKwlsbF9jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY0ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNDsKKwlsbF9jb25maWcucnRoX2hhc2hfdHlwZV9pcHY0ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOworCWxsX2NvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjYgPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7CisJbGxfY29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NiA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY2ZXggPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7CisJbGxfY29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NmV4ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOworCWxsX2NvbmZpZy5ydGhfYmt0X3N6ID0gUlRIX0JVQ0tFVF9TSVpFOworCWxsX2NvbmZpZy50eF9wYXVzZV9lbmFibGUgPSBWWEdFX1BBVVNFX0NUUkxfRU5BQkxFOworCWxsX2NvbmZpZy5yeF9wYXVzZV9lbmFibGUgPSBWWEdFX1BBVVNFX0NUUkxfRU5BQkxFOworCisJaWYgKHZ4Z2VfZGV2aWNlX3JlZ2lzdGVyKGhsZGV2LCAmbGxfY29uZmlnLCBoaWdoX2RtYSwgbm9fb2ZfdnBhdGgsCisJCSZ2ZGV2KSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIF9leGl0NTsKKwl9CisKKwl2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoaGxkZXYsIFZYR0VfVFJBQ0UsIFZYR0VfQ09NUE9ORU5UX0xMKTsKKwlWWEdFX0NPUFlfREVCVUdfSU5GT19UT19MTCh2ZGV2LCB2eGdlX2h3X2RldmljZV9lcnJvcl9sZXZlbF9nZXQoaGxkZXYpLAorCQl2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpKTsKKworCS8qIHNldCBwcml2YXRlIEhXIGRldmljZSBpbmZvICovCisJaGxkZXYtPm5kZXYgPSB2ZGV2LT5uZGV2OworCXZkZXYtPm10dSA9IFZYR0VfSFdfREVGQVVMVF9NVFU7CisJdmRldi0+YmFyMCA9IGF0dHIuYmFyMDsKKwl2ZGV2LT5iYXIxID0gYXR0ci5iYXIxOworCXZkZXYtPm1heF92cGF0aF9zdXBwb3J0ZWQgPSBtYXhfdnBhdGhfc3VwcG9ydGVkOworCXZkZXYtPm5vX29mX3ZwYXRoID0gbm9fb2ZfdnBhdGg7CisKKwkvKiBWaXJ0dWFsIFBhdGggY291bnQgKi8KKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQlpZiAoIXZ4Z2VfYlZBTG4odnBhdGhfbWFzaywgaSwgMSkpCisJCQljb250aW51ZTsKKwkJaWYgKGogPj0gdmRldi0+bm9fb2ZfdnBhdGgpCisJCQlicmVhazsKKworCQl2ZGV2LT52cGF0aHNbal0uaXNfY29uZmlndXJlZCA9IDE7CisJCXZkZXYtPnZwYXRoc1tqXS5kZXZpY2VfaWQgPSBpOworCQl2ZGV2LT52cGF0aHNbal0uZmlmby5kcml2ZXJfaWQgPSBqOworCQl2ZGV2LT52cGF0aHNbal0ucmluZy5kcml2ZXJfaWQgPSBqOworCQl2ZGV2LT52cGF0aHNbal0udmRldiA9IHZkZXY7CisJCXZkZXYtPnZwYXRoc1tqXS5tYXhfbWFjX2FkZHJfY250ID0gbWF4X21hY192cGF0aDsKKwkJbWVtY3B5KCh1OCAqKXZkZXYtPnZwYXRoc1tqXS5tYWNhZGRyLAorCQkJCSh1OCAqKWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5tYWNfYWRkcnNbaV0sCisJCQkJRVRIX0FMRU4pOworCisJCS8qIEluaXRpYWxpemUgdGhlIG1hYyBhZGRyZXNzIGxpc3QgaGVhZGVyICovCisJCUlOSVRfTElTVF9IRUFEKCZ2ZGV2LT52cGF0aHNbal0ubWFjX2FkZHJfbGlzdCk7CisKKwkJdmRldi0+dnBhdGhzW2pdLm1hY19hZGRyX2NudCA9IDA7CisJCXZkZXYtPnZwYXRoc1tqXS5tY2FzdF9hZGRyX2NudCA9IDA7CisJCWorKzsKKwl9CisJdmRldi0+ZXhlY19tb2RlID0gVlhHRV9FWEVDX01PREVfRElTQUJMRTsKKwl2ZGV2LT5tYXhfY29uZmlnX3BvcnQgPSBtYXhfY29uZmlnX3BvcnQ7CisKKwl2ZGV2LT52bGFuX3RhZ19zdHJpcCA9IHZsYW5fdGFnX3N0cmlwOworCisJLyogbWFwIHRoZSBoYXNoaW5nIHNlbGVjdG9yIHRhYmxlIHRvIHRoZSBjb25maWd1cmVkIHZwYXRocyAqLworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQl2ZGV2LT52cGF0aF9zZWxlY3RvcltpXSA9IHZwYXRoX3NlbGVjdG9yW2ldOworCisJbWFjYWRkciA9ICh1OCAqKXZkZXYtPnZwYXRoc1swXS5tYWNhZGRyOworCisJbGxfY29uZmlnLmRldmljZV9od19pbmZvLnNlcmlhbF9udW1iZXJbVlhHRV9IV19JTkZPX0xFTiAtIDFdID0gJ1wwJzsKKwlsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ucHJvZHVjdF9kZXNjW1ZYR0VfSFdfSU5GT19MRU4gLSAxXSA9ICdcMCc7CisJbGxfY29uZmlnLmRldmljZV9od19pbmZvLnBhcnRfbnVtYmVyW1ZYR0VfSFdfSU5GT19MRU4gLSAxXSA9ICdcMCc7CisKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwgIiVzOiBTRVJJQUwgTlVNQkVSOiAlcyIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5zZXJpYWxfbnVtYmVyKTsKKworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLCAiJXM6IFBBUlQgTlVNQkVSOiAlcyIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5wYXJ0X251bWJlcik7CisKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwgIiVzOiBOZXRlcmlvbiAlcyBTZXJ2ZXIgQWRhcHRlciIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5wcm9kdWN0X2Rlc2MpOworCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCSIlczogTUFDIEFERFI6ICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgbWFjYWRkclswXSwgbWFjYWRkclsxXSwgbWFjYWRkclsyXSwKKwkJbWFjYWRkclszXSwgbWFjYWRkcls0XSwgbWFjYWRkcls1XSk7CisKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwgIiVzOiBMaW5rIFdpZHRoIHglZCIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIHZ4Z2VfaHdfZGV2aWNlX2xpbmtfd2lkdGhfZ2V0KGhsZGV2KSk7CisKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJIiVzOiBGaXJtd2FyZSB2ZXJzaW9uIDogJXMgRGF0ZSA6ICVzIiwgdmRldi0+bmRldi0+bmFtZSwKKwkJbGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24udmVyc2lvbiwKKwkJbGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X2RhdGUuZGF0ZSk7CisKKwl2eGdlX3ByaW50X3Bhcm0odmRldiwgdnBhdGhfbWFzayk7CisKKwkvKiBTdG9yZSB0aGUgZncgdmVyc2lvbiBmb3IgZXRodHRvb2wgb3B0aW9uICovCisJc3RyY3B5KHZkZXYtPmZ3X3ZlcnNpb24sIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLnZlcnNpb24pOworCW1lbWNweSh2ZGV2LT5uZGV2LT5kZXZfYWRkciwgKHU4ICopdmRldi0+dnBhdGhzWzBdLm1hY2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkodmRldi0+bmRldi0+cGVybV9hZGRyLCB2ZGV2LT5uZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCisJLyogQ29weSB0aGUgc3RhdGlvbiBtYWMgYWRkcmVzcyB0byB0aGUgbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCWVudHJ5ID0JKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKQorCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX21hY19hZGRycyksCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoTlVMTCA9PSBlbnRyeSkgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogbWFjX2FkZHJfbGlzdCA6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIF9leGl0NjsKKwkJfQorCQltYWNhZGRyID0gKHU4ICopJmVudHJ5LT5tYWNhZGRyOworCQltZW1jcHkobWFjYWRkciwgdmRldi0+bmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLCAmdmRldi0+dnBhdGhzW2ldLm1hY19hZGRyX2xpc3QpOworCQl2ZGV2LT52cGF0aHNbaV0ubWFjX2FkZHJfY250ID0gMTsKKwl9CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldChobGRldiwgVlhHRV9FUlIsIFZYR0VfQ09NUE9ORU5UX0xMKTsKKwlWWEdFX0NPUFlfREVCVUdfSU5GT19UT19MTCh2ZGV2LCB2eGdlX2h3X2RldmljZV9lcnJvcl9sZXZlbF9nZXQoaGxkZXYpLAorCQl2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpKTsKKworCXJldHVybiAwOworCitfZXhpdDY6CisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCXZ4Z2VfZnJlZV9tYWNfYWRkX2xpc3QoJnZkZXYtPnZwYXRoc1tpXSk7CisKKwl2eGdlX2RldmljZV91bnJlZ2lzdGVyKGhsZGV2KTsKK19leGl0NToKKwl2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUoaGxkZXYpOworX2V4aXQ0OgorCWlvdW5tYXAoYXR0ci5iYXIxKTsKK19leGl0MzoKKwlpb3VubWFwKGF0dHIuYmFyMCk7CitfZXhpdDI6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK19leGl0MToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitfZXhpdDA6CisJa2ZyZWUoZGV2aWNlX2NvbmZpZyk7CisJZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQtLTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2eGdlX3JlbV9uaWMgLSBGcmVlIHRoZSBQQ0kgZGV2aWNlCisgKiBAcGRldjogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIFBDSSByZWxhdGVkIGluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UuCisgKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFBjaSBzdWJzeXN0ZW0gdG8gcmVsZWFzZSBhCisgKiBQQ0kgZGV2aWNlIGFuZCBmcmVlIHVwIGFsbCByZXNvdXJjZSBoZWxkIHVwIGJ5IHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdAordnhnZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldjsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgaSA9IDA7CisjaWYgKChWWEdFX0RFQlVHX0lOSVQgJiBWWEdFX0RFQlVHX01BU0spIHx8IFwKKwkoVlhHRV9ERUJVR19FTlRSWUVYSVQgJiBWWEdFX0RFQlVHX01BU0spKQorCXUzMiBsZXZlbF90cmFjZTsKKyNlbmRpZgorCisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChobGRldiA9PSBOVUxMKQorCQlyZXR1cm47CisJZGV2ID0gaGxkZXYtPm5kZXY7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CisKKyNpZiAoKFZYR0VfREVCVUdfSU5JVCAmIFZYR0VfREVCVUdfTUFTSykgfHwgXAorCShWWEdFX0RFQlVHX0VOVFJZRVhJVCAmIFZYR0VfREVCVUdfTUFTSykpCisJbGV2ZWxfdHJhY2UgPSB2ZGV2LT5sZXZlbF90cmFjZTsKKyNlbmRpZgorCXZ4Z2VfZGVidWdfZW50cnlleGl0KGxldmVsX3RyYWNlLAorCQkiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdnhnZV9kZWJ1Z19pbml0KGxldmVsX3RyYWNlLAorCQkiJXMgOiByZW1vdmluZyBQQ0kgZGV2aWNlLi4uIiwgX19mdW5jX18pOworCXZ4Z2VfZGV2aWNlX3VucmVnaXN0ZXIoaGxkZXYpOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJdnhnZV9mcmVlX21hY19hZGRfbGlzdCgmdmRldi0+dnBhdGhzW2ldKTsKKwkJdmRldi0+dnBhdGhzW2ldLm1jYXN0X2FkZHJfY250ID0gMDsKKwkJdmRldi0+dnBhdGhzW2ldLm1hY19hZGRyX2NudCA9IDA7CisJfQorCisJa2ZyZWUodmRldi0+dnBhdGhzKTsKKworCWlvdW5tYXAodmRldi0+YmFyMCk7CisJaW91bm1hcCh2ZGV2LT5iYXIxKTsKKworCS8qIHdlIGFyZSBzYWZlIHRvIGZyZWUgaXQgbm93ICovCisJZnJlZV9uZXRkZXYoZGV2KTsKKworCXZ4Z2VfZGVidWdfaW5pdChsZXZlbF90cmFjZSwKKwkJIiVzOiVkICBEZXZpY2UgdW5yZWdpc3RlcmVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZ4Z2VfaHdfZGV2aWNlX3Rlcm1pbmF0ZShobGRldik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWxfdHJhY2UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZ4Z2VfZXJyX2hhbmRsZXIgPSB7CisJLmVycm9yX2RldGVjdGVkID0gdnhnZV9pb19lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldCA9IHZ4Z2VfaW9fc2xvdF9yZXNldCwKKwkucmVzdW1lID0gdnhnZV9pb19yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdnhnZV9kcml2ZXIgPSB7CisJLm5hbWUgPSBWWEdFX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IHZ4Z2VfaWRfdGFibGUsCisJLnByb2JlID0gdnhnZV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodnhnZV9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gdnhnZV9wbV9zdXNwZW5kLAorCS5yZXN1bWUgPSB2eGdlX3BtX3Jlc3VtZSwKKyNlbmRpZgorCS5lcnJfaGFuZGxlciA9ICZ2eGdlX2Vycl9oYW5kbGVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQKK3Z4Z2Vfc3RhcnRlcih2b2lkKQoreworCWludCByZXQgPSAwOworCWNoYXIgdmVyc2lvblszMl07CisJc25wcmludGYodmVyc2lvbiwgMzIsICIlcyIsIERSVl9WRVJTSU9OKTsKKworCXByaW50ayhLRVJOX0NSSVQgIiVzOiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluY1xuIiwKKwkJVlhHRV9EUklWRVJfTkFNRSk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IERyaXZlciB2ZXJzaW9uOiAlc1xuIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUsIHZlcnNpb24pOworCisJdmVyaWZ5X2JhbmR3aWR0aCgpOworCisJZHJpdmVyX2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2Rydl9jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyaXZlcl9jb25maWcpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdnhnZV9kcml2ZXIpOworCisJaWYgKGRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ICYmCisJICAgKGRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ICE9IGRyaXZlcl9jb25maWctPnRvdGFsX2Rldl9jbnQpKQorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IENvbmZpZ3VyZWQgJWQgb2YgJWQgZGV2aWNlcyIsCisJCQlWWEdFX0RSSVZFUl9OQU1FLCBkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCwKKwkJCWRyaXZlcl9jb25maWctPnRvdGFsX2Rldl9jbnQpOworCisJaWYgKHJldCkKKwkJa2ZyZWUoZHJpdmVyX2NvbmZpZyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3Z4Z2VfY2xvc2VyKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ2eGdlX2RyaXZlcik7CisJa2ZyZWUoZHJpdmVyX2NvbmZpZyk7Cit9Cittb2R1bGVfaW5pdCh2eGdlX3N0YXJ0ZXIpOworbW9kdWxlX2V4aXQodnhnZV9jbG9zZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwNGIyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmgKQEAgLTAsMCArMSw1NTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisgKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisgKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiB2eGdlLW1haW4uaDogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgVlhHRV9NQUlOX0gKKyNkZWZpbmUgVlhHRV9NQUlOX0gKKworI2luY2x1ZGUgInZ4Z2UtdHJhZmZpYy5oIgorI2luY2x1ZGUgInZ4Z2UtY29uZmlnLmgiCisjaW5jbHVkZSAidnhnZS12ZXJzaW9uLmgiCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjZGVmaW5lIFZYR0VfRFJJVkVSX05BTUUJCSJ2eGdlIgorI2RlZmluZSBWWEdFX0RSSVZFUl9WRU5ET1IJCSJOZXRlcmlvbiwgSW5jIgorI2RlZmluZSBWWEdFX0RSSVZFUl9WRVJTSU9OX01BSk9SIDAKKworI2RlZmluZSBEUlZfVkVSU0lPTglWWEdFX1ZFUlNJT05fTUFKT1IiLiJWWEdFX1ZFUlNJT05fTUlOT1IiLiJcCisJVlhHRV9WRVJTSU9OX0ZJWCIuIlZYR0VfVkVSU0lPTl9CVUlMRCItIlwKKwlWWEdFX1ZFUlNJT05fRk9SCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl9XSU4JCTB4NTczMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOX1VOSQkJMHg1ODMzCisjZGVmaW5lCVZYR0VfVVNFX0RFRkFVTFQJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRQk0CisjZGVmaW5lIFZYR0VfSFdfUlhTWU5DX0ZSRVFfQ05UCQk0CisjZGVmaW5lIFZYR0VfTExfV0FUQ0hfRE9HX1RJTUVPVVQJKDE1ICogSFopCisjZGVmaW5lIFZYR0VfTExfUlhfQ09QWV9USFJFU0hPTEQJMjU2CisjZGVmaW5lIFZYR0VfREVGX0ZJRk9fTEVOR1RICQk4NAorCisjZGVmaW5lIE5PX1NURUVSSU5HCQkwCisjZGVmaW5lIFBPUlRfU1RFRVJJTkcJCTB4MQorI2RlZmluZSBSVEhfU1RFRVJJTkcJCTB4MgorI2RlZmluZSBSWF9UT1NfU1RFRVJJTkcJCTB4MworI2RlZmluZSBSWF9WTEFOX1NURUVSSU5HCTB4NAorI2RlZmluZSBSVEhfQlVDS0VUX1NJWkUJCTQKKworI2RlZmluZQlUWF9QUklPUklUWV9TVEVFUklORwkxCisjZGVmaW5lCVRYX1ZMQU5fU1RFRVJJTkcJMgorI2RlZmluZQlUWF9QT1JUX1NURUVSSU5HCTMKKyNkZWZpbmUJVFhfTVVMVElRX1NURUVSSU5HCTQKKworI2RlZmluZSBWWEdFX0hXX01BQ19BRERSX0xFQVJOX0RFRkFVTFQgVlhHRV9IV19SVFNfTUFDX0RJU0FCTEUKKworI2RlZmluZSBWWEdFX1RUSV9CVElNRVJfVkFMIDI1MDAwMAorCisjZGVmaW5lIFZYR0VfVFRJX0xUSU1FUl9WQUwgMTAwMAorI2RlZmluZSBWWEdFX1RUSV9SVElNRVJfVkFMIDAKKyNkZWZpbmUgVlhHRV9SVElfQlRJTUVSX1ZBTCAyNTAKKyNkZWZpbmUgVlhHRV9SVElfTFRJTUVSX1ZBTCAxMDAKKyNkZWZpbmUgVlhHRV9SVElfUlRJTUVSX1ZBTCAwCisjZGVmaW5lIFZYR0VfRklGT19JTkRJQ0FURV9NQVhfUEtUUyBWWEdFX0RFRl9GSUZPX0xFTkdUSAorI2RlZmluZSBWWEdFX0lTUl9QT0xMSU5HX0NOVCAJOAorI2RlZmluZSBWWEdFX01BWF9DT05GSUdfREVWCTB4RkYKKyNkZWZpbmUgVlhHRV9FWEVDX01PREVfRElTQUJMRQkwCisjZGVmaW5lIFZYR0VfRVhFQ19NT0RFX0VOQUJMRQkxCisjZGVmaW5lIFZYR0VfTUFYX0NPTkZJR19QT1JUCTEKKyNkZWZpbmUgVlhHRV9BTExfVklEX0RJU0FCTEUJMAorI2RlZmluZSBWWEdFX0FMTF9WSURfRU5BQkxFCTEKKyNkZWZpbmUgVlhHRV9QQVVTRV9DVFJMX0RJU0FCTEUJMAorI2RlZmluZSBWWEdFX1BBVVNFX0NUUkxfRU5BQkxFCTEKKworI2RlZmluZSBUVElfVFhfVVJBTkdFX0EJNQorI2RlZmluZSBUVElfVFhfVVJBTkdFX0IJMTUKKyNkZWZpbmUgVFRJX1RYX1VSQU5HRV9DCTQwCisjZGVmaW5lIFRUSV9UWF9VRkNfQQk1CisjZGVmaW5lIFRUSV9UWF9VRkNfQgk0MAorI2RlZmluZSBUVElfVFhfVUZDX0MJNjAKKyNkZWZpbmUgVFRJX1RYX1VGQ19ECTEwMAorCisjZGVmaW5lIFJUSV9SWF9VUkFOR0VfQQk1CisjZGVmaW5lIFJUSV9SWF9VUkFOR0VfQgkxNQorI2RlZmluZSBSVElfUlhfVVJBTkdFX0MJNDAKKyNkZWZpbmUgUlRJX1JYX1VGQ19BCTEKKyNkZWZpbmUgUlRJX1JYX1VGQ19CCTUKKyNkZWZpbmUgUlRJX1JYX1VGQ19DCTEwCisjZGVmaW5lIFJUSV9SWF9VRkNfRAkxNQorCisvKiBNaWxsaSBzZWNzIHRpbWVyIHBlcmlvZCAqLworI2RlZmluZSBWWEdFX1RJTUVSX0RFTEFZCQkxMDAwMAorCisjZGVmaW5lIFZYR0VfTExfTUFYX0ZSQU1FX1NJWkUoZGV2KSAoKGRldiktPm10dSArIFZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRSkKKworZW51bSB2eGdlX3Jlc2V0X2V2ZW50IHsKKwkvKiByZXNldCBldmVudHMgKi8KKwlWWEdFX0xMX1ZQQVRIX1JFU0VUCT0gMCwKKwlWWEdFX0xMX0RFVklDRV9SRVNFVAk9IDEsCisJVlhHRV9MTF9GVUxMX1JFU0VUCT0gMiwKKwlWWEdFX0xMX1NUQVJUX1JFU0VUCT0gMywKKwlWWEdFX0xMX0NPTVBMX1JFU0VUCT0gNAorfTsKKy8qIFRoZXNlIGZsYWdzIHJlcHJlc2VudCB0aGUgZGV2aWNlcyB0ZW1wb3Jhcnkgc3RhdGUgKi8KK2VudW0gdnhnZV9kZXZpY2Vfc3RhdGVfdCB7CitfX1ZYR0VfU1RBVEVfUkVTRVRfQ0FSRCA9IDAsCitfX1ZYR0VfU1RBVEVfQ0FSRF9VUAorfTsKKworZW51bSB2eGdlX21hY19hZGRyX3N0YXRlIHsKKwkvKiBtYWMgYWRkcmVzcyBzdGF0ZXMgKi8KKwlWWEdFX0xMX01BQ19BRERSX0lOX0xJU1QgICAgICAgID0gMCwKKwlWWEdFX0xMX01BQ19BRERSX0lOX0RBX1RBQkxFICAgID0gMQorfTsKKworc3RydWN0IHZ4Z2VfZHJ2X2NvbmZpZyB7CisJaW50IGNvbmZpZ19kZXZfY250OworCWludCB0b3RhbF9kZXZfY250OworCXVuc2lnbmVkIGxvbmcgaW50YV9kZXZfb3BlbjsKKwlpbnQgZ19ub19jcHVzOworCXVuc2lnbmVkIGludCB2cGF0aF9wZXJfZGV2OworfTsKKworc3RydWN0IG1hY0luZm8geworCXVuc2lnbmVkIGNoYXIgbWFjYWRkcltFVEhfQUxFTl07CisJdW5zaWduZWQgY2hhciBtYWNtYXNrW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBpbnQgdnBhdGhfbm87CisJZW51bSB2eGdlX21hY19hZGRyX3N0YXRlIHN0YXRlOworfTsKKworc3RydWN0IHZ4Z2VfY29uZmlnIHsKKwlpbnQJCXR4X3BhdXNlX2VuYWJsZTsKKwlpbnQJCXJ4X3BhdXNlX2VuYWJsZTsKKworI2RlZmluZQlORVdfTkFQSV9XRUlHSFQJNjQKKwlpbnQJCW5hcGlfd2VpZ2h0OworI2RlZmluZSBWWEdFX0dST19ET05PVF9BR0dSRUdBVEUJCTAKKyNkZWZpbmUgVlhHRV9HUk9fQUxXQVlTX0FHR1JFR0FURQkJMQorCWludAkJZ3JvX2VuYWJsZTsKKwlpbnQJCWludHJfdHlwZTsKKyNkZWZpbmUgSU5UQQkwCisjZGVmaW5lIE1TSQkxCisjZGVmaW5lIE1TSV9YCTIKKworCWludAkJYWRkcl9sZWFybl9lbjsKKworCWludAkJcnRoX3N0ZWVyaW5nOworCWludAkJcnRoX2FsZ29yaXRobTsKKwlpbnQJCXJ0aF9oYXNoX3R5cGVfdGNwaXB2NDsKKwlpbnQJCXJ0aF9oYXNoX3R5cGVfaXB2NDsKKwlpbnQJCXJ0aF9oYXNoX3R5cGVfdGNwaXB2NjsKKwlpbnQJCXJ0aF9oYXNoX3R5cGVfaXB2NjsKKwlpbnQJCXJ0aF9oYXNoX3R5cGVfdGNwaXB2NmV4OworCWludAkJcnRoX2hhc2hfdHlwZV9pcHY2ZXg7CisJaW50CQlydGhfYmt0X3N6OworCWludAkJcnRoX2poYXNoX2dvbGRlbl9yYXRpbzsKKwlpbnQJCXR4X3N0ZWVyaW5nX3R5cGU7CisJaW50IAlmaWZvX2luZGljYXRlX21heF9wa3RzOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvIGRldmljZV9od19pbmZvOworfTsKKworc3RydWN0IHZ4Z2VfbXNpeF9lbnRyeSB7CisJLyogTWltaWNpbmcgdGhlIG1zaXhfZW50cnkgc3RydWN0IG9mIEtlcm5lbC4gKi8KKwl1MTYgdmVjdG9yOworCXUxNiBlbnRyeTsKKwl1MTYgaW5fdXNlOworCXZvaWQgKmFyZzsKK307CisKKy8qIFNvZnR3YXJlIFN0YXRpc3RpY3MgKi8KKworc3RydWN0IHZ4Z2Vfc3dfc3RhdHMgeworCS8qIE5ldHdvcmsgU3RhdHMgKGludGVyZmFjZSBzdGF0cykgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CisKKwkvKiBUeCAqLworCXU2NCB0eF9mcm1zOworCXU2NCB0eF9lcnJvcnM7CisJdTY0IHR4X2J5dGVzOworCXU2NCB0eGRfbm90X2ZyZWU7CisJdTY0IHR4ZF9vdXRfb2ZfZGVzYzsKKworCS8qIFZpcnR1YWwgUGF0aCAqLworCXU2NCB2cGF0aHNfb3BlbjsKKwl1NjQgdnBhdGhfb3Blbl9mYWlsOworCisJLyogUnggKi8KKwl1NjQgcnhfZnJtczsKKwl1NjQgcnhfZXJyb3JzOworCXU2NCByeF9ieXRlczsKKwl1NjQgcnhfbWNhc3Q7CisKKwkvKiBNaXNjLiAqLworCXU2NCBsaW5rX3VwOworCXU2NCBsaW5rX2Rvd247CisJdTY0IHBjaV9tYXBfZmFpbDsKKwl1NjQgc2tiX2FsbG9jX2ZhaWw7Cit9OworCitzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgeworCXN0cnVjdCBsaXN0X2hlYWQgaXRlbTsKKwl1NjQgbWFjYWRkcjsKKwl1NjQgbWFjbWFzazsKKwllbnVtIHZ4Z2VfbWFjX2FkZHJfc3RhdGUgc3RhdGU7Cit9OworCitzdHJ1Y3QgdnhnZWRldjsKKworc3RydWN0IHZ4Z2VfZmlmb19zdGF0cyB7CisJdTY0IHR4X2ZybXM7CisJdTY0IHR4X2Vycm9yczsKKwl1NjQgdHhfYnl0ZXM7CisJdTY0IHR4ZF9ub3RfZnJlZTsKKwl1NjQgdHhkX291dF9vZl9kZXNjOworCXU2NCBwY2lfbWFwX2ZhaWw7Cit9OworCitzdHJ1Y3QgdnhnZV9maWZvIHsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmRldjsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJc3RydWN0IF9fdnhnZV9od19maWZvICpoYW5kbGU7CisKKwkvKiBUaGUgdnBhdGggaWQgbWFpbnRhaW5lZCBpbiB0aGUgZHJpdmVyIC0KKwkgKiAwIHRvICdtYXhpbXVtX3ZwYXRoc19pbl9mdW5jdGlvbiAtIDEnCisJICovCisJaW50IGRyaXZlcl9pZDsKKwlpbnQgdHhfc3RlZXJpbmdfdHlwZTsKKwlpbnQgaW5kaWNhdGVfbWF4X3BrdHM7CisJc3BpbmxvY2tfdCB0eF9sb2NrOworCS8qIGZsYWcgdXNlZCB0byBtYWludGFpbiBxdWV1ZSBzdGF0ZSB3aGVuIE1VTFRJUSBpcyBub3QgZW5hYmxlZCAqLworI2RlZmluZSBWUEFUSF9RVUVVRV9TVEFSVCAgICAgICAwCisjZGVmaW5lIFZQQVRIX1FVRVVFX1NUT1AgICAgICAgIDEKKwlpbnQgcXVldWVfc3RhdGU7CisKKwkvKiBUeCBzdGF0cyAqLworCXN0cnVjdCB2eGdlX2ZpZm9fc3RhdHMgc3RhdHM7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RydWN0IHZ4Z2VfcmluZ19zdGF0cyB7CisJdTY0IHByZXZfcnhfZnJtczsKKwl1NjQgcnhfZnJtczsKKwl1NjQgcnhfZXJyb3JzOworCXU2NCByeF9kcm9wcGVkOworCXU2NCByeF9ieXRlczsKKwl1NjQgcnhfbWNhc3Q7CisJdTY0IHBjaV9tYXBfZmFpbDsKKwl1NjQgc2tiX2FsbG9jX2ZhaWw7Cit9OworCitzdHJ1Y3QgdnhnZV9yaW5nIHsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmRldjsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJc3RydWN0IF9fdnhnZV9od19yaW5nCSpoYW5kbGU7CisJLyogVGhlIHZwYXRoIGlkIG1haW50YWluZWQgaW4gdGhlIGRyaXZlciAtCisJICogMCB0byAnbWF4aW11bV92cGF0aHNfaW5fZnVuY3Rpb24gLSAxJworCSAqLworCWludCBkcml2ZXJfaWQ7CisKKwkgLyogY29weSBvZiB0aGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcnhfY3N1bSBpcyB0byBiZSB1c2VkICovCisJdTMyIHJ4X2NzdW07CisKKwlpbnQgcGt0c19wcm9jZXNzZWQ7CisJaW50IGJ1ZGdldDsKKwlpbnQgZ3JvX2VuYWJsZTsKKworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCisjZGVmaW5lIFZYR0VfTUFYX01BQ19BRERSX0NPVU5UCQkzMAorCisJaW50IHZsYW5fdGFnX3N0cmlwOworCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKKwlpbnQgcnhfdmVjdG9yX25vOworCWVudW0gdnhnZV9od19zdGF0dXMgbGFzdF9zdGF0dXM7CisKKwkvKiBSeCBzdGF0cyAqLworCXN0cnVjdCB2eGdlX3Jpbmdfc3RhdHMgc3RhdHM7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RydWN0IHZ4Z2VfdnBhdGggeworCisJc3RydWN0IHZ4Z2VfZmlmbyBmaWZvOworCXN0cnVjdCB2eGdlX3JpbmcgcmluZzsKKworCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICpoYW5kbGU7CisKKwkvKiBBY3R1YWwgdnBhdGggaWQgZm9yIHRoaXMgdnBhdGggaW4gdGhlIGRldmljZSAtIDAgdG8gMTYgKi8KKwlpbnQgZGV2aWNlX2lkOworCWludCBtYXhfbWFjX2FkZHJfY250OworCWludCBpc19jb25maWd1cmVkOworCWludCBpc19vcGVuOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXU4IChtYWNhZGRyKVtFVEhfQUxFTl07CisJdTggKG1hY21hc2spW0VUSF9BTEVOXTsKKworI2RlZmluZSBWWEdFX01BWF9MRUFSTl9NQUNfQUREUl9DTlQJMjA0OAorCS8qIG1hYyBhZGRyZXNzZXMgY3VycmVudGx5IHByb2dyYW1tZWQgaW50byBOSUMgKi8KKwl1MTYgbWFjX2FkZHJfY250OworCXUxNiBtY2FzdF9hZGRyX2NudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1hY19hZGRyX2xpc3Q7CisKKwl1MzIgbGV2ZWxfZXJyOworCXUzMiBsZXZlbF90cmFjZTsKK307CisjZGVmaW5lIFZYR0VfQ09QWV9ERUJVR19JTkZPX1RPX0xMKHZkZXYsIGVyciwgdHJhY2UpIHsJXAorCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CQlcCisJCXZkZXYtPnZwYXRoc1tpXS5sZXZlbF9lcnIgPSBlcnI7CQlcCisJCXZkZXYtPnZwYXRoc1tpXS5sZXZlbF90cmFjZSA9IHRyYWNlOwkJXAorCX0JCQkJCQkJXAorCXZkZXYtPmxldmVsX2VyciA9IGVycjsJCQkJCVwKKwl2ZGV2LT5sZXZlbF90cmFjZSA9IHRyYWNlOwkJCQlcCit9CisKK3N0cnVjdCB2eGdlZGV2IHsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmRldjsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmg7CisJc3RydWN0IHZsYW5fZ3JvdXAJKnZsZ3JwOworCWludCB2bGFuX3RhZ19zdHJpcDsKKwlzdHJ1Y3QgdnhnZV9jb25maWcJY29uZmlnOworCXVuc2lnbmVkIGxvbmcJc3RhdGU7CisKKwkvKiBJbmRpY2F0ZXMgd2hpY2ggdnBhdGggdG8gcmVzZXQgKi8KKwl1bnNpZ25lZCBsb25nICB2cF9yZXNldDsKKworCS8qIFRpbWVyIHVzZWQgZm9yIHBvbGxpbmcgdnBhdGggcmVzZXRzICovCisJc3RydWN0IHRpbWVyX2xpc3QgdnBfcmVzZXRfdGltZXI7CisKKwkvKiBUaW1lciB1c2VkIGZvciBwb2xsaW5nIHZwYXRoIGxvY2t1cCAqLworCXN0cnVjdCB0aW1lcl9saXN0IHZwX2xvY2t1cF90aW1lcjsKKworCS8qCisJICogRmxhZ3MgdG8gdHJhY2sgd2hldGhlciBkZXZpY2UgaXMgaW4gQWxsIE11bHRpY2FzdAorCSAqIG9yIGluIHByb21pc2N1b3VzIG1vZGUuCisJICovCisJdTE2CQlhbGxfbXVsdGlfZmxnOworCisJIC8qIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcnhfY3N1bSBpcyB0byBiZSB1c2VkIG9yIG5vdC4gKi8KKwl1MzIJcnhfY3N1bTsKKworCXN0cnVjdCB2eGdlX21zaXhfZW50cnkgKnZ4Z2VfZW50cmllczsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllczsKKwkvKgorCSAqIDQgZm9yIGVhY2ggdnBhdGggKiAxNzsKKwkgKiB0b3RhbCBpcyA2OAorCSAqLworI2RlZmluZQlWWEdFX01BWF9SRVFVRVNURURfTVNJWAk2OAorI2RlZmluZSBWWEdFX0lOVFJfU1RSTEVOIDgwCisJY2hhciBkZXNjW1ZYR0VfTUFYX1JFUVVFU1RFRF9NU0lYXVtWWEdFX0lOVFJfU1RSTEVOXTsKKworCWVudW0gdnhnZV9od19ldmVudCBjcmljX2Vycl9ldmVudDsKKworCWludCBtYXhfdnBhdGhfc3VwcG9ydGVkOworCWludCBub19vZl92cGF0aDsKKworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCS8qIEEgZGVidWcgb3B0aW9uLCB3aGVuIGVuYWJsZWQgYW5kIGlmIGVycm9yIGNvbmRpdGlvbiBvY2N1cnMsCisJICogdGhlIGRyaXZlciB3aWxsIGRvIGZvbGxvd2luZyBzdGVwczoKKwkgKiAtIG1hc2sgYWxsIGludGVycnVwdHMKKwkgKiAtIE5vdCBjbGVhciB0aGUgc291cmNlIG9mIHRoZSBhbGFybQorCSAqIC0gZ3JhY2VmdWxseSBzdG9wIGFsbCBJL08KKwkgKiBBIGRpYWdub3N0aWMgZHVtcCBvZiByZWdpc3RlciBhbmQgc3RhdHMgYXQgdGhpcyBwb2ludAorCSAqIHJldmVhbHMgdmVyeSB1c2VmdWwgaW5mb3JtYXRpb24uCisJICovCisJaW50IGV4ZWNfbW9kZTsKKwlpbnQgbWF4X2NvbmZpZ19wb3J0OworCXN0cnVjdCB2eGdlX3ZwYXRoCSp2cGF0aHM7CisKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBfaGFuZGxlc1tWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXTsKKwl2b2lkIF9faW9tZW0gKmJhcjA7CisJdm9pZCBfX2lvbWVtICpiYXIxOworCXN0cnVjdCB2eGdlX3N3X3N0YXRzCXN0YXRzOworCWludAkJbXR1OworCS8qIEJlbG93IHZhcmlhYmxlcyBhcmUgdXNlZCBmb3IgdnBhdGggc2VsZWN0aW9uIHRvIHRyYW5zbWl0IGEgcGFja2V0ICovCisJdTggCQl2cGF0aF9zZWxlY3RvcltWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXTsKKwl1NjQJCXZwYXRoc19kZXBsb3llZDsKKworCXUzMiAJCWludHJfY250OworCXUzMiAJCWxldmVsX2VycjsKKwl1MzIgCQlsZXZlbF90cmFjZTsKKwljaGFyCQlmd192ZXJzaW9uW1ZYR0VfSFdfRldfU1RSTEVOXTsKK307CisKK3N0cnVjdCB2eGdlX3J4X3ByaXYgeworCXN0cnVjdCBza19idWZmCQkqc2tiOworCWRtYV9hZGRyX3QJCWRhdGFfZG1hOworCWRtYV9hZGRyX3QJCWRhdGFfc2l6ZTsKK307CisKK3N0cnVjdCB2eGdlX3R4X3ByaXYgeworCXN0cnVjdCBza19idWZmCQkqc2tiOworCWRtYV9hZGRyX3QJCWRtYV9idWZmZXJzW01BWF9TS0JfRlJBR1MrMV07Cit9OworCisjZGVmaW5lIFZYR0VfTU9EVUxFX1BBUkFNX0lOVChwLCB2YWwpIFwKKwlzdGF0aWMgaW50IHAgPSB2YWw7IFwKKwltb2R1bGVfcGFyYW0ocCwgaW50LCAwKQorCisjZGVmaW5lIHZ4Z2Vfb3NfYnVnKGZtdC4uLikJCXsgcHJpbnRrKGZtdCk7IEJVRygpOyB9CisKKyNkZWZpbmUgdnhnZV9vc190aW1lcih0aW1lciwgaGFuZGxlLCBhcmcsIGV4cCkgZG8geyBcCisJCWluaXRfdGltZXIoJnRpbWVyKTsgXAorCQl0aW1lci5mdW5jdGlvbiA9IGhhbmRsZTsgXAorCQl0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFyZzsgXAorCQltb2RfdGltZXIoJnRpbWVyLCAoamlmZmllcyArIGV4cCkpOyBcCisJfSB3aGlsZSAoMCk7CisKK2ludCBfX2RldmluaXQgdnhnZV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQkJICAgIHN0cnVjdCB2eGdlX2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBpbnQgaGlnaF9kbWEsIGludCBub19vZl92cGF0aCwKKwkJCQkgICAgc3RydWN0IHZ4Z2VkZXYgKip2ZGV2KTsKKwordm9pZCB2eGdlX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordm9pZCB2eGdlX3ZwYXRoX2ludHJfZW5hYmxlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgdnBfaWQpOworCit2b2lkIHZ4Z2VfdnBhdGhfaW50cl9kaXNhYmxlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgdnBfaWQpOworCit2b2lkIHZ4Z2VfY2FsbGJhY2tfbGlua191cChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3ZvaWQgdnhnZV9jYWxsYmFja19saW5rX2Rvd24oc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfYWRkX21hY19hZGRyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LAorCXN0cnVjdCBtYWNJbmZvICptYWMpOworCitpbnQgdnhnZV9tYWNfbGlzdF9kZWwoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoLCBzdHJ1Y3QgbWFjSW5mbyAqbWFjKTsKKworaW50IHZ4Z2VfcmVzZXQoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX3J4XzFiX2NvbXBsKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gsIHZvaWQgKmR0ciwKKwl1OCB0X2NvZGUsIHZvaWQgKnVzZXJkYXRhKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV94bWl0X2NvbXBsKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19odywgdm9pZCAqZHRyLAorCWVudW0gdnhnZV9od19maWZvX3Rjb2RlIHRfY29kZSwgdm9pZCAqdXNlcmRhdGEsIHZvaWQgKipza2JfcHRyKTsKKworaW50IHZ4Z2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK2ludCB2eGdlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK3ZvaWQgdnhnZV9jbG9zZV92cGF0aHMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGludCBpbmRleCk7CisKK2ludCB2eGdlX29wZW5fdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc2V0X2FsbF92cGF0aHMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpOworCit2b2lkIHZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpOworCit2b2lkIHZ4Z2Vfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgdnhnZV9maWZvICpmaWZvKTsKKwordm9pZCB2eGdlX3N0YXJ0X2FsbF90eF9xdWV1ZShzdHJ1Y3QgdnhnZWRldiAqdmRldik7CisKK3ZvaWQgdnhnZV93YWtlX3R4X3F1ZXVlKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8sIHN0cnVjdCBza19idWZmICpza2IpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfYWRkX21hY19hZGRyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LAorCXN0cnVjdCBtYWNJbmZvICptYWMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfZGVsX21hY19hZGRyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LAorCXN0cnVjdCBtYWNJbmZvICptYWMpOworCitpbnQgdnhnZV9tYWNfbGlzdF9hZGQoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoLAorCXN0cnVjdCBtYWNJbmZvICptYWMpOworCit2b2lkIHZ4Z2VfZnJlZV9tYWNfYWRkX2xpc3Qoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc3RvcmVfdnBhdGhfbWFjX2FkZHIoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc3RvcmVfdnBhdGhfdmlkX3RhYmxlKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCk7CisKK2ludCBkb192eGdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkb19pbyk7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKKy8qKgorICogI2RlZmluZSBWWEdFX0RFQlVHX0lOSVQ6IGRlYnVnIGZvciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKyAqICNkZWZpbmUgVlhHRV9ERUJVR19UWAkgOiBkZWJ1ZyB0cmFuc21pdCByZWxhdGVkIGZ1bmN0aW9ucworICogI2RlZmluZSBWWEdFX0RFQlVHX1JYICA6IGRlYnVnIHJlY2V2aWNlIHJlbGF0ZWQgZnVuY3Rpb25zCisgKiAjZGVmaW5lIFZYR0VfREVCVUdfTUVNIDogZGVidWcgbWVtb3J5IG1vZHVsZQorICogI2RlZmluZSBWWEdFX0RFQlVHX0xPQ0s6IGRlYnVnIGxvY2tzCisgKiAjZGVmaW5lIFZYR0VfREVCVUdfU0VNIDogZGVidWcgc2VtYXBob3JlCisgKiAjZGVmaW5lIFZYR0VfREVCVUdfRU5UUllFWElUOiBkZWJ1ZyBmdW5jdGlvbnMgYnkgYWRkaW5nIGVudHJ5IGV4aXQgc3RhdGVtZW50cworKi8KKyNkZWZpbmUgVlhHRV9ERUJVR19JTklUCQkweDAwMDAwMDAxCisjZGVmaW5lIFZYR0VfREVCVUdfVFgJCTB4MDAwMDAwMDIKKyNkZWZpbmUgVlhHRV9ERUJVR19SWAkJMHgwMDAwMDAwNAorI2RlZmluZSBWWEdFX0RFQlVHX01FTQkJMHgwMDAwMDAwOAorI2RlZmluZSBWWEdFX0RFQlVHX0xPQ0sJCTB4MDAwMDAwMTAKKyNkZWZpbmUgVlhHRV9ERUJVR19TRU0JCTB4MDAwMDAwMjAKKyNkZWZpbmUgVlhHRV9ERUJVR19FTlRSWUVYSVQJMHgwMDAwMDA0MAorI2RlZmluZSBWWEdFX0RFQlVHX0lOVFIJCTB4MDAwMDAwODAKKyNkZWZpbmUgVlhHRV9ERUJVR19MTF9DT05GSUcJMHgwMDAwMDEwMAorCisvKiBEZWJ1ZyB0cmFjaW5nIGZvciBWWEdFIGRyaXZlciAqLworI2lmbmRlZiBWWEdFX0RFQlVHX01BU0sKKyNkZWZpbmUgVlhHRV9ERUJVR19NQVNLCTB4MAorI2VuZGlmCisKKyNpZiAoVlhHRV9ERUJVR19MTF9DT05GSUcgJiBWWEdFX0RFQlVHX01BU0spCisjZGVmaW5lIHZ4Z2VfZGVidWdfbGxfY29uZmlnKGxldmVsLCBmbXQsIC4uLikgXAorCXZ4Z2VfZGVidWdfbGwobGV2ZWwsIFZYR0VfREVCVUdfTExfQ09ORklHLCBmbXQsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgdnhnZV9kZWJ1Z19sbF9jb25maWcobGV2ZWwsIGZtdCwgLi4uKQorI2VuZGlmCisKKyNpZiAoVlhHRV9ERUJVR19JTklUICYgVlhHRV9ERUJVR19NQVNLKQorI2RlZmluZSB2eGdlX2RlYnVnX2luaXQobGV2ZWwsIGZtdCwgLi4uKSBcCisJdnhnZV9kZWJ1Z19sbChsZXZlbCwgVlhHRV9ERUJVR19JTklULCBmbXQsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgdnhnZV9kZWJ1Z19pbml0KGxldmVsLCBmbXQsIC4uLikKKyNlbmRpZgorCisjaWYgKFZYR0VfREVCVUdfVFggJiBWWEdFX0RFQlVHX01BU0spCisjZGVmaW5lIHZ4Z2VfZGVidWdfdHgobGV2ZWwsIGZtdCwgLi4uKSBcCisJdnhnZV9kZWJ1Z19sbChsZXZlbCwgVlhHRV9ERUJVR19UWCwgZm10LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIHZ4Z2VfZGVidWdfdHgobGV2ZWwsIGZtdCwgLi4uKQorI2VuZGlmCisKKyNpZiAoVlhHRV9ERUJVR19SWCAmIFZYR0VfREVCVUdfTUFTSykKKyNkZWZpbmUgdnhnZV9kZWJ1Z19yeChsZXZlbCwgZm10LCAuLi4pIFwKKwl2eGdlX2RlYnVnX2xsKGxldmVsLCBWWEdFX0RFQlVHX1JYLCBmbXQsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgdnhnZV9kZWJ1Z19yeChsZXZlbCwgZm10LCAuLi4pCisjZW5kaWYKKworI2lmIChWWEdFX0RFQlVHX01FTSAmIFZYR0VfREVCVUdfTUFTSykKKyNkZWZpbmUgdnhnZV9kZWJ1Z19tZW0obGV2ZWwsIGZtdCwgLi4uKSBcCisJdnhnZV9kZWJ1Z19sbChsZXZlbCwgVlhHRV9ERUJVR19NRU0sIGZtdCwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSB2eGdlX2RlYnVnX21lbShsZXZlbCwgZm10LCAuLi4pCisjZW5kaWYKKworI2lmIChWWEdFX0RFQlVHX0VOVFJZRVhJVCAmIFZYR0VfREVCVUdfTUFTSykKKyNkZWZpbmUgdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWwsIGZtdCwgLi4uKSBcCisJdnhnZV9kZWJ1Z19sbChsZXZlbCwgVlhHRV9ERUJVR19FTlRSWUVYSVQsIGZtdCwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSB2eGdlX2RlYnVnX2VudHJ5ZXhpdChsZXZlbCwgZm10LCAuLi4pCisjZW5kaWYKKworI2lmIChWWEdFX0RFQlVHX0lOVFIgJiBWWEdFX0RFQlVHX01BU0spCisjZGVmaW5lIHZ4Z2VfZGVidWdfaW50cihsZXZlbCwgZm10LCAuLi4pIFwKKwl2eGdlX2RlYnVnX2xsKGxldmVsLCBWWEdFX0RFQlVHX0lOVFIsIGZtdCwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSB2eGdlX2RlYnVnX2ludHIobGV2ZWwsIGZtdCwgLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgVlhHRV9ERVZJQ0VfREVCVUdfTEVWRUxfU0VUKGxldmVsLCBtYXNrLCB2ZGV2KSB7XAorCXZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldCgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopdmRldi0+ZGV2aCwgXAorCQlsZXZlbCwgbWFzayk7XAorCVZYR0VfQ09QWV9ERUJVR19JTkZPX1RPX0xMKHZkZXYsIFwKKwkJdnhnZV9od19kZXZpY2VfZXJyb3JfbGV2ZWxfZ2V0KChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgXAorCQkJdmRldi0+ZGV2aCksIFwKKwkJdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgXAorCQkJdmRldi0+ZGV2aCkpO1wKK30KKworI2lmZGVmIE5FVElGX0ZfR1NPCisjZGVmaW5lIHZ4Z2VfdGNwX21zcyhza2IpIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKQorI2RlZmluZSB2eGdlX3VkcF9tc3Moc2tiKSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkKKyNkZWZpbmUgdnhnZV9vZmZsb2FkX3R5cGUoc2tiKSAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY0ZGEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oCkBAIC0wLDAgKzEsNDYwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyAqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyAqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIHZ4Z2UtcmVnLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PIFZpcnR1YWxpemVkCisgKiAgICAgICAgICAgICBTZXJ2ZXIgQWRhcHRlci4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgVlhHRV9SRUdfSAorI2RlZmluZSBWWEdFX1JFR19ICisKKy8qCisgKiB2eGdlX21CSVQobG9jKSAtIHNldCBiaXQgYXQgb2Zmc2V0CisgKi8KKyNkZWZpbmUgdnhnZV9tQklUKGxvYykJCSgweDgwMDAwMDAwMDAwMDAwMDBVTEwgPj4gKGxvYykpCisKKy8qCisgKiB2eGdlX3ZCSVQodmFsLCBsb2MsIHN6KSAtIHNldCBiaXRzIGF0IG9mZnNldAorICovCisjZGVmaW5lIHZ4Z2VfdkJJVCh2YWwsIGxvYywgc3opCSgoKHU2NCkodmFsKSkgPDwgKDY0LShsb2MpLShzeikpKQorI2RlZmluZSB2eGdlX3ZCSVQzMih2YWwsIGxvYywgc3opCSgoKHUzMikodmFsKSkgPDwgKDMyLShsb2MpLShzeikpKQorCisvKgorICogdnhnZV9iVkFMbihiaXRzLCBsb2MsIG4pIC0gR2V0IHRoZSB2YWx1ZSBvZiBuIGJpdHMgYXQgbG9jYXRpb24KKyAqLworI2RlZmluZSB2eGdlX2JWQUxuKGJpdHMsIGxvYywgbikgXAorCSgoKCh1NjQpYml0cykgPj4gKDY0LShsb2MrbikpKSAmICgoMHgxVUxMIDw8IG4pIC0gMSkpCisKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9BU0lDX0lEX0dFVF9JTklUSUFMX0RFVklDRV9JRChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9BU0lDX0lEX0dFVF9JTklUSUFMX01BSk9SX1JFVklTSU9OKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQ4LCA4KQorI2RlZmluZQlWWEdFX0hXX1RJVEFOX0FTSUNfSURfR0VUX0lOSVRJQUxfTUlOT1JfUkVWSVNJT04oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNTYsIDgpCisKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9UT19GVU5DX01BUF9DRkcxX0dFVF9WUEFUSF9UT19GVU5DX01BUF9DRkcxKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMsIDUpCisjZGVmaW5lCVZYR0VfSFdfSE9TVF9UWVBFX0FTU0lHTk1FTlRTX0dFVF9IT1NUX1RZUEVfQVNTSUdOTUVOVFMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNSwgMykKKyNkZWZpbmUgVlhHRV9IV19QRl9TV19SRVNFVF9DT01NQU5ECQkJCTB4QTUKKworI2RlZmluZSBWWEdFX0hXX1RJVEFOX1BDSUNGR01HTVRfUkVHX1NQQUNFUwkJMTcKKyNkZWZpbmUgVlhHRV9IV19USVRBTl9TUlBDSU1fUkVHX1NQQUNFUwkJCTE3CisjZGVmaW5lIFZYR0VfSFdfVElUQU5fVlBNR01UX1JFR19TUEFDRVMJCQkxNworI2RlZmluZSBWWEdFX0hXX1RJVEFOX1ZQQVRIX1JFR19TUEFDRVMJCQkxNworCisjZGVmaW5lIFZYR0VfSFdfQVNJQ19NT0RFX1JFU0VSVkVECQkJCTAKKyNkZWZpbmUgVlhHRV9IV19BU0lDX01PREVfTk9fSU9WCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19BU0lDX01PREVfU1JfSU9WCQkJCTIKKyNkZWZpbmUgVlhHRV9IV19BU0lDX01PREVfTVJfSU9WCQkJCTMKKworI2RlZmluZQlWWEdFX0hXX1RYTUFDX0dFTl9DRkcxX1RNQUNfUEVSTUFfU1RPUF9FTgkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfR0VOX0NGRzFfQkxPQ0tfQkNBU1RfVE9fV0lSRQkJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0dFTl9DRkcxX0JMT0NLX0JDQVNUX1RPX1NXSVRDSAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfR0VOX0NGRzFfSE9TVF9BUFBFTkRfRkNTCQkJdnhnZV9tQklUKDMxKQorCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfSVNfRklSU1RfR0VUX1ZQQVRIX0lTX0ZJUlNUKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMywgMSkKKworI2RlZmluZQlWWEdFX0hXX1RJTV9WUEFUSF9BU1NJR05NRU5UX0dFVF9CTUFQX1JPT1QoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKworI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfR0VUX01BWF9QWUxEX0xFTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA1MCwgMTQpCisKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1ZTUE9SVF9DSE9JQ0VTX1ZQX0dFVF9WU1BPUlRfVkVDVE9SKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDE3KQorCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19WUEFUSF9UT19WU1BPUlRfVlBNR01UX0NMT05FX0dFVF9WU1BPUlRfTlVNQkVSKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMsIDUpCisKKyNkZWZpbmUJVlhHRV9IV19LREZDX0RSQkxfVFJJUExFVF9UT1RBTF9HRVRfS0RGQ19NQVhfU0laRShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNywgMTUpCisKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfTU9ERV9MRUdBQ1lfTU9ERQkJCTAKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfTU9ERV9OT05fT0ZGTE9BRF9PTkxZCQkxCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX01PREVfTVVMVElfT1BfTU9ERQkJMgorCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX01PREVfTUVTU0FHRVNfT05MWQkJMAorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9NT0RFX01VTFRJX09QX01PREUJCTEKKworI2RlZmluZQlWWEdFX0hXX1RPQ19HRVRfS0RGQ19JTklUSUFMX09GRlNFVCh2YWwpIFwKKwkJCQkodmFsJn5WWEdFX0hXX1RPQ19LREZDX0lOSVRJQUxfQklSKDcpKQorI2RlZmluZQlWWEdFX0hXX1RPQ19HRVRfS0RGQ19JTklUSUFMX0JJUih2YWwpIFwKKwkJCQl2eGdlX2JWQUxuKHZhbCwgNjEsIDMpCisjZGVmaW5lCVZYR0VfSFdfVE9DX0dFVF9VU0RDX0lOSVRJQUxfT0ZGU0VUKHZhbCkgXAorCQkJCSh2YWwmflZYR0VfSFdfVE9DX1VTRENfSU5JVElBTF9CSVIoNykpCisjZGVmaW5lCVZYR0VfSFdfVE9DX0dFVF9VU0RDX0lOSVRJQUxfQklSKHZhbCkgXAorCQkJCXZ4Z2VfYlZBTG4odmFsLCA2MSwgMykKKworI2RlZmluZQlWWEdFX0hXX1RPQ19LREZDX1ZQQVRIX1NUUklERV9HRVRfVE9DX0tERkNfVlBBVEhfU1RSSURFKGJpdHMpCWJpdHMKKyNkZWZpbmUJVlhHRV9IV19UT0NfS0RGQ19GSUZPX1NUUklERV9HRVRfVE9DX0tERkNfRklGT19TVFJJREUoYml0cykJYml0cworCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0dFVF9LREZDX1JDVFIwKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMSwgMTUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0dFVF9LREZDX1JDVFIxKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTcsIDE1KQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9HRVRfS0RGQ19SQ1RSMihiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMzLCAxNSkKKworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9LREZDX1ZBUFRIX05VTSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQyLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9LREZDX0ZJRk9fTlVNKHZhbCkgdnhnZV92QklUKHZhbCwgNDcsIDIpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0tERkNfRklGT19PRkZTRVQodmFsKSBcCisJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKworI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc0X1JJTkdfTU9ERV9PTkVfQlVGRkVSCQkJMAorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc0X1JJTkdfTU9ERV9USFJFRV9CVUZGRVIJCQkxCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzRfUklOR19NT0RFX0ZJVkVfQlVGRkVSCQkJMgorCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFX0EJCQkJMAorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERV9CCQkJCTIKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREVfQwkJCQkxCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfV0VfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9XRV9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklEICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9FVFlQRSAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1BOICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUkFOR0VfUE4gICAgICAgICAgICA0CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfR0VOX0NGRyAgICAgICAgIDUKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9TT0xPX0lUICAgICAgICAgNgorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0pIQVNIX0NGRyAgICAgICA3CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTUFTSyAgICAgICAgICAgIDgKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9LRVkgICAgICAgICAgICAgOQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUU9TICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRFMgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01VTFRJX0lUICAgICAgICAxMgorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfVkVSU0lPTiAgICAgICAgICAxMworCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMF9HRVRfREFfTUFDX0FERFIoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgNDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMF9EQV9NQUNfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMV9HRVRfREFfTUFDX0FERFJfTUFTSyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA0OCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEExX0RBX01BQ19BRERSX01BU0sodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEExX0RBX01BQ19BRERSX0FERF9QUklWSUxFR0VEX01PREUgXAorCQkJCQkJCQl2eGdlX21CSVQoNTQpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMV9HRVRfREFfTUFDX0FERFJfQUREX1ZQQVRIKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDU1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTFfREFfTUFDX0FERFJfQUREX1ZQQVRIKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTFfR0VUX0RBX01BQ19BRERSX0FERF9NT0RFKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDYyLCAyKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTFfREFfTUFDX0FERFJfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYyLCAyKQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9BRERfRU5UUlkJCQkwCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9ERUxFVEVfRU5UUlkJCTEKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfRklSU1RfRU5UUlkJCTIKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfTkVYVF9FTlRSWQkJMworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9FTlRSWQkJCTAKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1dSSVRFX0VOVFJZCQkxCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX01FTU9fRU5UUlkJCTMKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xFRF9DT05UUk9MCQk0CisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9BTExfQ0xFQVIJCQkxNzIKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEJCTAKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1ZJRAkJMQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRVRZUEUJCTIKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1BOCQkzCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfR0VOX0NGRwk1CisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfU09MT19JVAk2CisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfSkhBU0hfQ0ZHCTcKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NQVNLCQk4CisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfS0VZCQk5CisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9RT1MJCTEwCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EUwkJMTEKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVAkxMgorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTwkJMTMKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0RBX01BQ19BRERSKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDQ4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfREFfTUFDX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1ZMQU5fSUQoYml0cykgdnhnZV9iVkFMbihiaXRzLCAwLCAxMikKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1ZMQU5fSUQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxMikKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0VUWVBFKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMCwgMTEpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9FVFlQRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUE5fU1JDX0RFU1RfU0VMKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9QTl9TUkNfREVTVF9TRUwJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1BOX1RDUF9VRFBfU0VMKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDcsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9QTl9UQ1BfVURQX1NFTAkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUE5fUE9SVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9QTl9QT1JUX05VTSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDE2KQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9SVEhfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX0VOCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX0JVQ0tFVF9TSVpFKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0JVQ0tFVF9TSVpFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9BTEdfU0VMKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDEwLCAyKQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BTEdfU0VMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEwLCAyKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BTEdfU0VMX0pFTktJTlMJMAorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BTEdfU0VMX01TX1JTUwkxCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FMR19TRUxfQ1JDMzJDCTIKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX1JUSF9UQ1BfSVBWNF9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNSwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX1RDUF9JUFY0X0VOCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX1JUSF9JUFY0X0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE5LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfSVBWNF9FTgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9SVEhfVENQX0lQVjZfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMjMsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9UQ1BfSVBWNl9FTgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9SVEhfSVBWNl9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAyNywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX0lQVjZfRU4JdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fUlRIX1RDUF9JUFY2X0VYX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMxLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfVENQX0lQVjZfRVhfRU4gdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fUlRIX0lQVjZfRVhfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzUsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9JUFY2X0VYX0VOCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX0FDVElWRV9UQUJMRShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzOSwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUNUSVZFX1RBQkxFCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX1JFUExfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDMsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JFUExfRU5UUllfRU4JdnhnZV9tQklUKDQzKQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX1NPTE9fSVRfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9TT0xPX0lUX0VOVFJZX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9TT0xPX0lUX0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDksIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfU09MT19JVF9CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA5LCA3KQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0lURU0wX0JVQ0tFVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMF9CVUNLRVRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0lURU0wX0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDgsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTBfRU5UUllfRU4JdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0lURU0wX0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDksIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTBfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfSVRFTTFfQlVDS0VUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMV9CVUNLRVRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9JVEVNMV9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAyNCwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMV9FTlRSWV9FTgl2eGdlX21CSVQoMjQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0lURU0xX0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDI1LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0xX0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI1LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNMF9CVUNLRVRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTBfQlVDS0VUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNMF9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA4LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0wX0VOVFJZX0VOCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNMF9CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA5LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0wX0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDksIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU0xX0JVQ0tFVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTFfQlVDS0VUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTFfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMjQsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTFfRU5UUllfRU4JdnhnZV9tQklUKDI0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNMV9CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAyNSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMV9CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNSwgNykKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9KSEFTSF9DRkdfR09MREVOX1JBVElPKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0pIQVNIX0NGR19HT0xERU5fUkFUSU8odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0pIQVNIX0NGR19JTklUX1ZBTFVFKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9KSEFTSF9DRkdfSU5JVF9WQUxVRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfTUFTS19JUFY2X1NBX01BU0soYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfTUFTS19JUFY2X1NBX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX01BU0tfSVBWNl9EQV9NQVNLKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9NQVNLX0lQVjZfREFfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX01BU0tfSVBWNF9TQV9NQVNLKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCA0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX01BU0tfSVBWNF9TQV9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCA0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9NQVNLX0lQVjRfREFfTUFTSyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9NQVNLX0lQVjRfREFfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfTUFTS19MNFNQX01BU0soYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDAsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfTUFTS19MNFNQX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDAsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX01BU0tfTDREUF9NQVNLKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQyLCAyKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX01BU0tfTDREUF9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQyLCAyKQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0tFWV9LRVkoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgNjQpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfS0VZX0tFWSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1FPU19FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUU9TX0VOVFJZX0VOCQl2eGdlX21CSVQoMykKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0RTX0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9EU19FTlRSWV9FTgkJdnhnZV9tQklUKDMpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9EQV9NQUNfQUREUl9NQVNLKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDQ4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfREFfTUFDX0FERFJfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0RBX01BQ19BRERSX01PREUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNjIsIDIpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTRfQlVDS0VUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU00X0JVQ0tFVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTRfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOCwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNF9FTlRSWV9FTgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTRfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNF9CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA5LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNV9CVUNLRVRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU01X0JVQ0tFVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU01X0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDI0LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU01X0VOVFJZX0VOCXZ4Z2VfbUJJVCgyNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTVfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMjUsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTVfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjUsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU02X0JVQ0tFVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTZfQlVDS0VUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTZfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDAsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTZfRU5UUllfRU4JdnhnZV9tQklUKDQwKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNl9CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0MSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNl9CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTdfQlVDS0VUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0OCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNN19CVUNLRVRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNN19FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA1NiwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNN19FTlRSWV9FTgl2eGdlX21CSVQoNTYpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU03X0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDU3LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU03X0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU3LCA3KQorCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fUEFSVF9OVU1CRVIgICAgICAgICAgIDAKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9TRVJJQUxfTlVNQkVSICAgICAgICAgMQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX1ZFUlNJT04gICAgICAgICAgICAgICAyCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fUENJX01PREUgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9ERVNDXzAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX0RFU0NfMSAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fREVTQ18yICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9ERVNDXzMgICAgICAgICAgICAgICAgNworCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9MRURfQ09OVFJPTF9PTgkJCTEKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0xFRF9DT05UUk9MX09GRgkJCTAKKworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9EQVkoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0ZXX1ZFUl9EQVkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9NT05USChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfRldfVkVSX01PTlRIKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfWUVBUihiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0ZXX1ZFUl9ZRUFSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9NQUpPUihiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfRldfVkVSX01BSk9SIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9NSU5PUihiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfRldfVkVSX01JTk9SIHZ4Z2VfdkJJVCh2YWwsIDQwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9CVUlMRChiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQ4LCAxNikKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0ZXX1ZFUl9CVUlMRCB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfREFZKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0ZMQVNIX1ZFUl9EQVkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9NT05USChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfRkxBU0hfVkVSX01PTlRIKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfWUVBUihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9GTEFTSF9WRVJfWUVBUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfTUFKT1IoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9GTEFTSF9WRVJfTUFKT1IgdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01JTk9SKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfRkxBU0hfVkVSX01JTk9SIHZ4Z2VfdkJJVCh2YWwsIDQwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9CVUlMRChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0OCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9GTEFTSF9WRVJfQlVJTEQgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1RPX1ZQQVRIX0FMQVJNX1JFR19HRVRfUFBJRl9TUlBDSU1fVE9fVlBBVEhfQUxBUk0oYml0cylcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAxOCkKKworI2RlZmluZQlWWEdFX0hXX1JYX01VTFRJX0NBU1RfU1RBVFNfR0VUX0ZSQU1FX0RJU0NBUkQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDgsIDE2KQorI2RlZmluZQlWWEdFX0hXX1JYX0ZSTV9UUkFOU0ZFUlJFRF9HRVRfUlhfRlJNX1RSQU5TRkVSUkVEKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19SWERfUkVUVVJORURfR0VUX1JYRF9SRVRVUk5FRChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDQ4LCAxNikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzBfR0VUX0lOSV9OVU1fTVdSX1NFTlQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMxX0dFVF9JTklfTlVNX01SRF9TRU5UKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMl9HRVRfSU5JX05VTV9DUExfUkNWRChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzNfR0VUX0lOSV9OVU1fTVdSX0JZVEVfU0VOVChiaXRzKQkoYml0cykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzRfR0VUX0lOSV9OVU1fQ1BMX0JZVEVfUkNWRChiaXRzKQkoYml0cykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzVfR0VUX1dSQ1JEVEFSQl9YT0ZGKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzZfR0VUX1JEQ1JEVEFSQl9YT0ZGKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDAxX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDAxX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQyM19HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQyM19HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDIoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNF9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQ1X0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVFhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVNfR0VUX1RYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TKGJpdHNcCispIHZ4Z2VfYlZBTG4oYml0cywgNDgsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfTVBBX0NSQ19GQUlMX0ZSTVMoYml0cykgdnhnZV9iVkFMbihiaXRzLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX01QQV9NUktfRkFJTF9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX01QQV9MRU5fRkFJTF9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAxNikKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9XT0xfRlJNUyhiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfRkFVX1JYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9QRVJNSVRURURfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMTYpCisKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMwX0dFVF9JTklfV1JfRFJPUChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMwX0dFVF9JTklfUkRfRFJPUChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTMV9HRVRfVlBMQU5FX1dSQ1JEVEFSQl9QSF9DUkRUX0RFUExFVEVEKGJpdHNcCispIHZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzJfR0VUX1ZQTEFORV9XUkNSRFRBUkJfUERfQ1JEVF9ERVBMRVRFRChiaXRzXAorKSB2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUgXAorVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMzX0dFVF9WUExBTkVfUkRDUkRUQVJCX05QSF9DUkRUX0RFUExFVEVEKGJpdHMpIFwKKwl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFM0X0dFVF9JTklfV1JfVlBJTl9EUk9QKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzRfR0VUX0lOSV9SRF9WUElOX0RST1AoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX0dFTlNUQVRTX0NPVU5UMDFfR0VUX0dFTlNUQVRTX0NPVU5UMShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19HRU5TVEFUU19DT1VOVDAxX0dFVF9HRU5TVEFUU19DT1VOVDAoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX0dFTlNUQVRTX0NPVU5UMjNfR0VUX0dFTlNUQVRTX0NPVU5UMyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19HRU5TVEFUU19DT1VOVDIzX0dFVF9HRU5TVEFUU19DT1VOVDIoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX0dFTlNUQVRTX0NPVU5UNF9HRVRfR0VOU1RBVFNfQ09VTlQ0KGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19HRU5TVEFUU19DT1VOVDVfR0VUX0dFTlNUQVRTX0NPVU5UNShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzBfR0VUX1JTVERST1BfTVNHKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFMwX0dFVF9SU1REUk9QX0NQTChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzFfR0VUX1JTVERST1BfQ0xJRU5UMChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTMV9HRVRfUlNURFJPUF9DTElFTlQxKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTMl9HRVRfUlNURFJPUF9DTElFTlQyKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFMzX0dFVF9WUExBTkVfREVQTF9QSChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTM19HRVRfVlBMQU5FX0RFUExfTlBIKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTM19HRVRfVlBMQU5FX0RFUExfQ1BMSChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAxNikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzRfR0VUX1ZQTEFORV9ERVBMX1BEKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFM0X0dFVF9WUExBTkVfREVQTF9OUEQoYml0cykJYlZBTChiaXRzLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFM0X0dFVF9WUExBTkVfREVQTF9DUExEKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDE2KQorCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX1RQQV9UWF9QQVRIX0dFVF9UWF9QRVJNSVRURURfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVF9UWF9BTllfRlJNU19HRVRfUE9SVDBfVFhfQU5ZX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVF9UWF9BTllfRlJNU19HRVRfUE9SVDFfVFhfQU5ZX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOCwgOCkKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVF9UWF9BTllfRlJNU19HRVRfUE9SVDJfVFhfQU5ZX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDgpCisKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVF9SWF9BTllfRlJNU19HRVRfUE9SVDBfUlhfQU5ZX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVF9SWF9BTllfRlJNU19HRVRfUE9SVDFfUlhfQU5ZX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOCwgOCkKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVF9SWF9BTllfRlJNU19HRVRfUE9SVDJfUlhfQU5ZX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDgpCisKKyNkZWZpbmUgVlhHRV9IV19DT05GSUdfUFJJVl9ICisKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX0lOSVRJQUxfVkFMVUUJCQkweDAxMjM0NTY3ODlhYmNkZWZVTEwKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX0JZVEVfU1dBUFBFRAkJCTB4ZWZjZGFiODk2NzQ1MjMwMVVMTAorI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfQklUX0ZMSVBQRUQJCQkweDgwYzRhMmU2OTFkNWIzZjdVTEwKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX0JZVEVfU1dBUFBFRF9CSVRfRkxJUFBFRAkweGY3YjNkNTkxZTZhMmM0ODBVTEwKKworI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfUkVBRF9CWVRFX1NXQVBfRU5BQkxFCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX1JFQURfQllURV9TV0FQX0RJU0FCTEUJCTB4MDAwMDAwMDAwMDAwMDAwMFVMTAorCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JJVF9GTEFQX0VOQUJMRQkJMHhGRkZGRkZGRkZGRkZGRkZGVUxMCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JJVF9GTEFQX0RJU0FCTEUJCTB4MDAwMDAwMDAwMDAwMDAwMFVMTAorCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9XUklURV9CWVRFX1NXQVBfRU5BQkxFCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JZVEVfU1dBUF9ESVNBQkxFCQkweDAwMDAwMDAwMDAwMDAwMDBVTEwKKworI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQklUX0ZMQVBfRU5BQkxFCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JJVF9GTEFQX0RJU0FCTEUJCTB4MDAwMDAwMDAwMDAwMDAwMFVMTAorCisvKgorICogVGhlIHJlZ2lzdGVycyBhcmUgbWVtb3J5IG1hcHBlZCBhbmQgYXJlIG5hdGl2ZSBiaWctZW5kaWFuIGJ5dGUgb3JkZXIuIFRoZQorICogbGl0dGxlLWVuZGlhbiBob3N0cyBhcmUgaGFuZGxlZCBieSBlbmFibGluZyBoYXJkd2FyZSBieXRlLXN3YXBwaW5nIGZvcgorICogcmVnaXN0ZXIgYW5kIGRtYSBvcGVyYXRpb25zLgorICovCitzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIHsKKworCXU4CXVudXNlZDAwMDEwWzB4MDAwMTBdOworCisvKjB4MDAwMTAqLwl1NjQJdG9jX3N3YXBwZXJfZmI7CisjZGVmaW5lIFZYR0VfSFdfVE9DX1NXQVBQRVJfRkJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDAxOCovCXU2NAlwaWZtX3JkX3N3YXBfZW47CisjZGVmaW5lIFZYR0VfSFdfUElGTV9SRF9TV0FQX0VOX1BJRk1fUkRfU1dBUF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDIwKi8JdTY0CXBpZm1fcmRfZmxpcF9lbjsKKyNkZWZpbmUgVlhHRV9IV19QSUZNX1JEX0ZMSVBfRU5fUElGTV9SRF9GTElQX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwMjgqLwl1NjQJcGlmbV93cl9zd2FwX2VuOworI2RlZmluZSBWWEdFX0hXX1BJRk1fV1JfU1dBUF9FTl9QSUZNX1dSX1NXQVBfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDAzMCovCXU2NAlwaWZtX3dyX2ZsaXBfZW47CisjZGVmaW5lIFZYR0VfSFdfUElGTV9XUl9GTElQX0VOX1BJRk1fV1JfRkxJUF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDM4Ki8JdTY0CXRvY19maXJzdF9wb2ludGVyOworI2RlZmluZSBWWEdFX0hXX1RPQ19GSVJTVF9QT0lOVEVSX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwNDAqLwl1NjQJaG9zdF9hY2Nlc3NfZW47CisjZGVmaW5lIFZYR0VfSFdfSE9TVF9BQ0NFU1NfRU5fSE9TVF9BQ0NFU1NfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKworfSBfX3BhY2tlZDsKKworc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZyB7CisKKwl1OAl1bnVzZWQwMDA1MFsweDAwMDUwXTsKKworLyoweDAwMDUwKi8JdTY0CXRvY19jb21tb25fcG9pbnRlcjsKKyNkZWZpbmUgVlhHRV9IV19UT0NfQ09NTU9OX1BPSU5URVJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDA1OCovCXU2NAl0b2NfbWVtcmVwYWlyX3BvaW50ZXI7CisjZGVmaW5lIFZYR0VfSFdfVE9DX01FTVJFUEFJUl9QT0lOVEVSX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwNjAqLwl1NjQJdG9jX3BjaWNmZ21nbXRfcG9pbnRlclsxN107CisjZGVmaW5lIFZYR0VfSFdfVE9DX1BDSUNGR01HTVRfUE9JTlRFUl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCXU4CXVudXNlZDAwMWUwWzB4MDAxZTAtMHgwMDBlOF07CisKKy8qMHgwMDFlMCovCXU2NAl0b2NfbXJwY2ltX3BvaW50ZXI7CisjZGVmaW5lIFZYR0VfSFdfVE9DX01SUENJTV9QT0lOVEVSX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAxZTgqLwl1NjQJdG9jX3NycGNpbV9wb2ludGVyWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19UT0NfU1JQQ0lNX1BPSU5URVJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwl1OAl1bnVzZWQwMDI3OFsweDAwMjc4LTB4MDAyNzBdOworCisvKjB4MDAyNzgqLwl1NjQJdG9jX3ZwbWdtdF9wb2ludGVyWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19UT0NfVlBNR01UX1BPSU5URVJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwl1OAl1bnVzZWQwMDM5MFsweDAwMzkwLTB4MDAzMDBdOworCisvKjB4MDAzOTAqLwl1NjQJdG9jX3ZwYXRoX3BvaW50ZXJbMTddOworI2RlZmluZSBWWEdFX0hXX1RPQ19WUEFUSF9QT0lOVEVSX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisJdTgJdW51c2VkMDA0YTBbMHgwMDRhMC0weDAwNDE4XTsKKworLyoweDAwNGEwKi8JdTY0CXRvY19rZGZjOworI2RlZmluZSBWWEdFX0hXX1RPQ19LREZDX0lOSVRJQUxfT0ZGU0VUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjEpCisjZGVmaW5lIFZYR0VfSFdfVE9DX0tERkNfSU5JVElBTF9CSVIodmFsKSB2eGdlX3ZCSVQodmFsLCA2MSwgMykKKy8qMHgwMDRhOCovCXU2NAl0b2NfdXNkYzsKKyNkZWZpbmUgVlhHRV9IV19UT0NfVVNEQ19JTklUSUFMX09GRlNFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDYxKQorI2RlZmluZSBWWEdFX0hXX1RPQ19VU0RDX0lOSVRJQUxfQklSKHZhbCkgdnhnZV92QklUKHZhbCwgNjEsIDMpCisvKjB4MDA0YjAqLwl1NjQJdG9jX2tkZmNfdnBhdGhfc3RyaWRlOworI2RlZmluZQlWWEdFX0hXX1RPQ19LREZDX1ZQQVRIX1NUUklERV9JTklUSUFMX1RPQ19LREZDX1ZQQVRIX1NUUklERSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDRiOCovCXU2NAl0b2Nfa2RmY19maWZvX3N0cmlkZTsKKyNkZWZpbmUJVlhHRV9IV19UT0NfS0RGQ19GSUZPX1NUUklERV9JTklUSUFMX1RPQ19LREZDX0ZJRk9fU1RSSURFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCit9IF9fcGFja2VkOworCitzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnIHsKKworCXU4CXVudXNlZDAwYTAwWzB4MDBhMDBdOworCisvKjB4MDBhMDAqLwl1NjQJcHJjX3N0YXR1czE7CisjZGVmaW5lIFZYR0VfSFdfUFJDX1NUQVRVUzFfUFJDX1ZQX1FVSUVTQ0VOVChuKQl2eGdlX21CSVQobikKKy8qMHgwMGEwOCovCXU2NAlyeGRjbV9yZXNldF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19SWERDTV9SRVNFVF9JTl9QUk9HUkVTU19QUkNfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhMTAqLwl1NjQJcmVwbGljcV9mbHVzaF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19SRVBMSUNRX0ZMVVNIX0lOX1BST0dSRVNTX05PQV9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGExOCovCXU2NAlyeHBlX2NtZHNfcmVzZXRfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfUlhQRV9DTURTX1JFU0VUX0lOX1BST0dSRVNTX05PQV9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGEyMCovCXU2NAlteHBfY21kc19yZXNldF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19NWFBfQ01EU19SRVNFVF9JTl9QUk9HUkVTU19OT0FfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhMjgqLwl1NjQJbm9mZmxvYWRfcmVzZXRfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfTk9GRkxPQURfUkVTRVRfSU5fUFJPR1JFU1NfUFJDX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTMwKi8JdTY0CXJkX3JlcV9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19SRF9SRVFfSU5fUFJPR1JFU1NfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhMzgqLwl1NjQJcmRfcmVxX291dHN0YW5kaW5nOworI2RlZmluZSBWWEdFX0hXX1JEX1JFUV9PVVRTVEFORElOR19WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGE0MCovCXU2NAlrZGZjX3Jlc2V0X2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX0tERkNfUkVTRVRfSU5fUFJPR1JFU1NfTk9BX1ZQKG4pCXZ4Z2VfbUJJVChuKQorCXU4CXVudXNlZDAwYjAwWzB4MDBiMDAtMHgwMGE0OF07CisKKy8qMHgwMGIwMCovCXU2NAlvbmVfY2ZnX3ZwOworI2RlZmluZSBWWEdFX0hXX09ORV9DRkdfVlBfUkRZKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYjA4Ki8JdTY0CW9uZV9jb21tb247CisjZGVmaW5lIFZYR0VfSFdfT05FX0NPTU1PTl9QRVRfVlBBVEhfUkVTRVRfSU5fUFJPR1JFU1MobikJdnhnZV9tQklUKG4pCisJdTgJdW51c2VkMDBiODBbMHgwMGI4MC0weDAwYjEwXTsKKworLyoweDAwYjgwKi8JdTY0CXRpbV9pbnRfZW47CisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVF9FTl9USU1fVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBiODgqLwl1NjQJdGltX3NldF9pbnRfZW47CisjZGVmaW5lIFZYR0VfSFdfVElNX1NFVF9JTlRfRU5fVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBiOTAqLwl1NjQJdGltX2Nscl9pbnRfZW47CisjZGVmaW5lIFZYR0VfSFdfVElNX0NMUl9JTlRfRU5fVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBiOTgqLwl1NjQJdGltX21hc2tfaW50X2R1cmluZ19yZXNldDsKKyNkZWZpbmUgVlhHRV9IV19USU1fTUFTS19JTlRfRFVSSU5HX1JFU0VUX1ZQQVRIKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYmEwKi8JdTY0CXRpbV9yZXNldF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19USU1fUkVTRVRfSU5fUFJPR1JFU1NfVElNX1ZQQVRIKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYmE4Ki8JdTY0CXRpbV9vdXRzdGFuZGluZ19ibWFwOworI2RlZmluZSBWWEdFX0hXX1RJTV9PVVRTVEFORElOR19CTUFQX1RJTV9WUEFUSChuKQl2eGdlX21CSVQobikKKwl1OAl1bnVzZWQwMGMwMFsweDAwYzAwLTB4MDBiYjBdOworCisvKjB4MDBjMDAqLwl1NjQJbXNnX3Jlc2V0X2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX01TR19SRVNFVF9JTl9QUk9HUkVTU19NU0dfQ09NUE9TSVRFKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBjMDgqLwl1NjQJbXNnX214cF9tcl9yZWFkeTsKKyNkZWZpbmUgVlhHRV9IV19NU0dfTVhQX01SX1JFQURZX01QX0JPT1RFRChuKQl2eGdlX21CSVQobikKKy8qMHgwMGMxMCovCXU2NAltc2dfdXhwX21yX3JlYWR5OworI2RlZmluZSBWWEdFX0hXX01TR19VWFBfTVJfUkVBRFlfVVBfQk9PVEVEKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYzE4Ki8JdTY0CW1zZ19kbXFfbm9uaV9ydGxfcHJlZmV0Y2g7CisjZGVmaW5lIFZYR0VfSFdfTVNHX0RNUV9OT05JX1JUTF9QUkVGRVRDSF9CWVBBU1NfRU5BQkxFKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYzIwKi8JdTY0CW1zZ191bXFfcnRsX2J3cjsKKyNkZWZpbmUgVlhHRV9IV19NU0dfVU1RX1JUTF9CV1JfUFJFRkVUQ0hfRElTQUJMRShuKQl2eGdlX21CSVQobikKKwl1OAl1bnVzZWQwMGQwMFsweDAwZDAwLTB4MDBjMjhdOworCisvKjB4MDBkMDAqLwl1NjQJY21uX3JzdGhkbHJfY2ZnMDsKKyNkZWZpbmUgVlhHRV9IV19DTU5fUlNUSERMUl9DRkcwX1NXX1JFU0VUX1ZQQVRIKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkMDgqLwl1NjQJY21uX3JzdGhkbHJfY2ZnMTsKKyNkZWZpbmUgVlhHRV9IV19DTU5fUlNUSERMUl9DRkcxX0NMUl9WUEFUSF9SRVNFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZDEwKi8JdTY0CWNtbl9yc3RoZGxyX2NmZzI7CisjZGVmaW5lIFZYR0VfSFdfQ01OX1JTVEhETFJfQ0ZHMl9TV19SRVNFVF9GSUZPMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZDE4Ki8JdTY0CWNtbl9yc3RoZGxyX2NmZzM7CisjZGVmaW5lIFZYR0VfSFdfQ01OX1JTVEhETFJfQ0ZHM19TV19SRVNFVF9GSUZPMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZDIwKi8JdTY0CWNtbl9yc3RoZGxyX2NmZzQ7CisjZGVmaW5lIFZYR0VfSFdfQ01OX1JTVEhETFJfQ0ZHNF9TV19SRVNFVF9GSUZPMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAwZDQwWzB4MDBkNDAtMHgwMGQyOF07CisKKy8qMHgwMGQ0MCovCXU2NAljbW5fcnN0aGRscl9jZmc4OworI2RlZmluZSBWWEdFX0hXX0NNTl9SU1RIRExSX0NGRzhfSU5DUl9WUEFUSF9JTlNUX05VTSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZDQ4Ki8JdTY0CXN0YXRzX2NmZzA7CisjZGVmaW5lIFZYR0VfSFdfU1RBVFNfQ0ZHMF9TVEFUU19FTkFCTEUodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMGRhOFsweDAwZGE4LTB4MDBkNTBdOworCisvKjB4MDBkYTgqLwl1NjQJY2xlYXJfbXNpeF9tYXNrX3ZlY3RbNF07CisjZGVmaW5lIFZYR0VfSFdfQ0xFQVJfTVNJWF9NQVNLX1ZFQ1RfQ0xFQVJfTVNJWF9NQVNLX1ZFQ1QodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGRjOCovCXU2NAlzZXRfbXNpeF9tYXNrX3ZlY3RbNF07CisjZGVmaW5lIFZYR0VfSFdfU0VUX01TSVhfTUFTS19WRUNUX1NFVF9NU0lYX01BU0tfVkVDVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZGU4Ki8JdTY0CWNsZWFyX21zaXhfbWFza19hbGxfdmVjdDsKKyNkZWZpbmUJVlhHRV9IV19DTEVBUl9NU0lYX01BU0tfQUxMX1ZFQ1RfQ0xFQVJfTVNJWF9NQVNLX0FMTF9WRUNUKHZhbCkJXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZGYwKi8JdTY0CXNldF9tc2l4X21hc2tfYWxsX3ZlY3Q7CisjZGVmaW5lCVZYR0VfSFdfU0VUX01TSVhfTUFTS19BTExfVkVDVF9TRVRfTVNJWF9NQVNLX0FMTF9WRUNUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZGY4Ki8JdTY0CW1hc2tfdmVjdG9yWzRdOworI2RlZmluZSBWWEdFX0hXX01BU0tfVkVDVE9SX01BU0tfVkVDVE9SKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBlMTgqLwl1NjQJbXNpeF9wZW5kaW5nX3ZlY3Rvcls0XTsKKyNkZWZpbmUgVlhHRV9IV19NU0lYX1BFTkRJTkdfVkVDVE9SX01TSVhfUEVORElOR19WRUNUT1IodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBlMzgqLwl1NjQJY2xyX21zaXhfb25lX3Nob3RfdmVjWzRdOworI2RlZmluZQlWWEdFX0hXX0NMUl9NU0lYX09ORV9TSE9UX1ZFQ19DTFJfTVNJWF9PTkVfU0hPVF9WRUModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBlNTgqLwl1NjQJdGl0YW5fYXNpY19pZDsKKyNkZWZpbmUgVlhHRV9IV19USVRBTl9BU0lDX0lEX0lOSVRJQUxfREVWSUNFX0lEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfVElUQU5fQVNJQ19JRF9JTklUSUFMX01BSk9SX1JFVklTSU9OKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfVElUQU5fQVNJQ19JRF9JTklUSUFMX01JTk9SX1JFVklTSU9OKHZhbCkgdnhnZV92QklUKHZhbCwgNTYsIDgpCisvKjB4MDBlNjAqLwl1NjQJdGl0YW5fZ2VuZXJhbF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1RJVEFOX0dFTkVSQUxfSU5UX1NUQVRVU19NUlBDSU1fQUxBUk1fSU5UCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1RJVEFOX0dFTkVSQUxfSU5UX1NUQVRVU19TUlBDSU1fQUxBUk1fSU5UCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1RJVEFOX0dFTkVSQUxfSU5UX1NUQVRVU19WUEFUSF9BTEFSTV9JTlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfVElUQU5fR0VORVJBTF9JTlRfU1RBVFVTX1ZQQVRIX1RSQUZGSUNfSU5UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDE3KQorCXU4CXVudXNlZDAwZTcwWzB4MDBlNzAtMHgwMGU2OF07CisKKy8qMHgwMGU3MCovCXU2NAl0aXRhbl9tYXNrX2FsbF9pbnQ7CisjZGVmaW5lCVZYR0VfSFdfVElUQU5fTUFTS19BTExfSU5UX0FMQVJNCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RJVEFOX01BU0tfQUxMX0lOVF9UUkFGRklDCXZ4Z2VfbUJJVCgxNSkKKwl1OAl1bnVzZWQwMGU4MFsweDAwZTgwLTB4MDBlNzhdOworCisvKjB4MDBlODAqLwl1NjQJdGltX2ludF9zdGF0dXMwOworI2RlZmluZSBWWEdFX0hXX1RJTV9JTlRfU1RBVFVTMF9USU1fSU5UX1NUQVRVUzAodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMGU4OCovCXU2NAl0aW1faW50X21hc2swOworI2RlZmluZSBWWEdFX0hXX1RJTV9JTlRfTUFTSzBfVElNX0lOVF9NQVNLMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwZTkwKi8JdTY0CXRpbV9pbnRfc3RhdHVzMTsKKyNkZWZpbmUgVlhHRV9IV19USU1fSU5UX1NUQVRVUzFfVElNX0lOVF9TVEFUVVMxKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNCkKKy8qMHgwMGU5OCovCXU2NAl0aW1faW50X21hc2sxOworI2RlZmluZSBWWEdFX0hXX1RJTV9JTlRfTUFTSzFfVElNX0lOVF9NQVNLMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQpCisvKjB4MDBlYTAqLwl1NjQJcnRpX2ludF9zdGF0dXM7CisjZGVmaW5lIFZYR0VfSFdfUlRJX0lOVF9TVEFUVVNfUlRJX0lOVF9TVEFUVVModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGVhOCovCXU2NAlydGlfaW50X21hc2s7CisjZGVmaW5lIFZYR0VfSFdfUlRJX0lOVF9NQVNLX1JUSV9JTlRfTUFTSyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZWIwKi8JdTY0CWFkYXB0ZXJfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1JURE1BX1JURE1BX1JFQURZCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1dSRE1BX1dSRE1BX1JFQURZCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX0tERkNfS0RGQ19SRUFEWQl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19UUEFfVE1BQ19CVUZfRU1QVFkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfUkRDVExfUElDX1FVSUVTQ0VOVAl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19YR01BQ19ORVRXT1JLX0ZBVUxUCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1JPQ1JDX09GRkxPQURfUVVJRVNDRU5UCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX0czSUZfRkJfRzNJRl9GQl9HRERSM19SRUFEWQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19HM0lGX0NNX0czSUZfQ01fR0REUjNfUkVBRFkJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfUklDX1JJQ19SVU5OSU5HCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX0NNR19DX1BMTF9JTl9MT0NLCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19YR01BQ19YX1BMTF9JTl9MT0NLCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19GQklGX01fUExMX0lOX0xPQ0sJdnhnZV9tQklUKDEyKQorI2RlZmluZSBWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1BDQ19QQ0NfSURMRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZSBWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1JPQ1JDX1JDX1BSQ19RVUlFU0NFTlQodmFsKSB2eGdlX3ZCSVQodmFsLCA0NCwgOCkKKy8qMHgwMGViOCovCXU2NAlnZW5fY3RybDsKKyNkZWZpbmUJVlhHRV9IV19HRU5fQ1RSTF9TUElfTVJQQ0lNX1dSX0RJUwl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19HRU5fQ1RSTF9TUElfTVJQQ0lNX1JEX0RJUwl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19HRU5fQ1RSTF9TUElfU1JQQ0lNX1dSX0RJUwl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19HRU5fQ1RSTF9TUElfU1JQQ0lNX1JEX0RJUwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19HRU5fQ1RSTF9TUElfREVCVUdfRElTCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX0dFTl9DVFJMX1NQSV9BUFBfTFRTU01fVElNRVJfRElTCXZ4Z2VfbUJJVCg1KQorI2RlZmluZSBWWEdFX0hXX0dFTl9DVFJMX1NQSV9OT1RfVVNFRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDQpCisJdTgJdW51c2VkMDBlZDBbMHgwMGVkMC0weDAwZWMwXTsKKworLyoweDAwZWQwKi8JdTY0CWFkYXB0ZXJfcmVhZHk7CisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9SRUFEWV9BREFQVEVSX1JFQURZCXZ4Z2VfbUJJVCg2MykKKy8qMHgwMGVkOCovCXU2NAlvdXRzdGFuZGluZ19yZWFkOworI2RlZmluZSBWWEdFX0hXX09VVFNUQU5ESU5HX1JFQURfT1VUU1RBTkRJTkdfUkVBRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZWUwKi8JdTY0CXZwYXRoX3JzdF9pbl9wcm9nOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1JTVF9JTl9QUk9HX1ZQQVRIX1JTVF9JTl9QUk9HKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBlZTgqLwl1NjQJdnBhdGhfcmVnX21vZGlmaWVkOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1JFR19NT0RJRklFRF9WUEFUSF9SRUdfTU9ESUZJRUQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMGZjMFsweDAwZmMwLTB4MDBlZjBdOworCisvKjB4MDBmYzAqLwl1NjQJY3BfcmVzZXRfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfQ1BfUkVTRVRfSU5fUFJPR1JFU1NfQ1BfVlBBVEgobikJdnhnZV9tQklUKG4pCisJdTgJdW51c2VkMDEwODBbMHgwMTA4MC0weDAwZmM4XTsKKworLyoweDAxMDgwKi8JdTY0CXhnbWFjX3JlYWR5OworI2RlZmluZSBWWEdFX0hXX1hHTUFDX1JFQURZX1hNQUNKX1JFQURZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDEwYzBbMHgwMTBjMC0weDAxMDg4XTsKKworLyoweDAxMGMwKi8JdTY0CWZiaWZfcmVhZHk7CisjZGVmaW5lIFZYR0VfSFdfRkJJRl9SRUFEWV9GQVVfUkVBRFkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMTEwMFsweDAxMTAwLTB4MDEwYzhdOworCisvKjB4MDExMDAqLwl1NjQJdnBsYW5lX2Fzc2lnbm1lbnRzOworI2RlZmluZSBWWEdFX0hXX1ZQTEFORV9BU1NJR05NRU5UU19WUExBTkVfQVNTSUdOTUVOVFModmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorLyoweDAxMTA4Ki8JdTY0CXZwYXRoX2Fzc2lnbm1lbnRzOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0FTU0lHTk1FTlRTX1ZQQVRIX0FTU0lHTk1FTlRTKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDExMTAqLwl1NjQJcmVzb3VyY2VfYXNzaWdubWVudHM7CisjZGVmaW5lIFZYR0VfSFdfUkVTT1VSQ0VfQVNTSUdOTUVOVFNfUkVTT1VSQ0VfQVNTSUdOTUVOVFModmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTExOCovCXU2NAlob3N0X3R5cGVfYXNzaWdubWVudHM7CisjZGVmaW5lCVZYR0VfSFdfSE9TVF9UWVBFX0FTU0lHTk1FTlRTX0hPU1RfVFlQRV9BU1NJR05NRU5UUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1LCAzKQorCXU4CXVudXNlZDAxMTI4WzB4MDExMjgtMHgwMTEyMF07CisKKy8qMHgwMTEyOCovCXU2NAltYXhfcmVzb3VyY2VfYXNzaWdubWVudHM7CisjZGVmaW5lIFZYR0VfSFdfTUFYX1JFU09VUkNFX0FTU0lHTk1FTlRTX1BDSV9NQVhfVlBMQU5FKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfTUFYX1JFU09VUkNFX0FTU0lHTk1FTlRTX1BDSV9NQVhfVlBBVEhTKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisvKjB4MDExMzAqLwl1NjQJcGZfdnBhdGhfYXNzaWdubWVudHM7CisjZGVmaW5lIFZYR0VfSFdfUEZfVlBBVEhfQVNTSUdOTUVOVFNfUEZfVlBBVEhfQVNTSUdOTUVOVFModmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMTIwMFsweDAxMjAwLTB4MDExMzhdOworCisvKjB4MDEyMDAqLwl1NjQJcnRzX2FjY2Vzc19pY21wOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfSUNNUF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxMjA4Ki8JdTY0CXJ0c19hY2Nlc3NfdGNwc3luOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfVENQU1lOX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDEyMTAqLwl1NjQJcnRzX2FjY2Vzc196bDRweWxkOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfWkw0UFlMRF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxMjE4Ki8JdTY0CXJ0c19hY2Nlc3NfbDRwcnRjbF90Y3A7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19MNFBSVENMX1RDUF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxMjIwKi8JdTY0CXJ0c19hY2Nlc3NfbDRwcnRjbF91ZHA7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19MNFBSVENMX1VEUF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxMjI4Ki8JdTY0CXJ0c19hY2Nlc3NfbDRwcnRjbF9mbGV4OworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfTDRQUlRDTF9GTEVYX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDEyMzAqLwl1NjQJcnRzX2FjY2Vzc19pcGZyYWc7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19JUEZSQUdfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKworfSBfX3BhY2tlZDsKKworc3RydWN0IHZ4Z2VfaHdfbWVtcmVwYWlyX3JlZyB7CisJdTY0CXVudXNlZDE7CisJdTY0CXVudXNlZDI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgdnhnZV9od19wY2ljZmdtZ210X3JlZyB7CisKKy8qMHgwMDAwMCovCXU2NAlyZXNvdXJjZV9ubzsKKyNkZWZpbmUJVlhHRV9IV19SRVNPVVJDRV9OT19QRk5fT1JfVkYJQklUKDMpCisvKjB4MDAwMDgqLwl1NjQJYmFyZ3JwX3BmX29yX3ZmX2JhcjBfbWFzazsKKyNkZWZpbmUJVlhHRV9IV19CQVJHUlBfUEZfT1JfVkZfQkFSMF9NQVNLX0JBUkdSUF9QRl9PUl9WRl9CQVIwX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMiwgNikKKy8qMHgwMDAxMCovCXU2NAliYXJncnBfcGZfb3JfdmZfYmFyMV9tYXNrOworI2RlZmluZQlWWEdFX0hXX0JBUkdSUF9QRl9PUl9WRl9CQVIxX01BU0tfQkFSR1JQX1BGX09SX1ZGX0JBUjFfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyLCA2KQorLyoweDAwMDE4Ki8JdTY0CWJhcmdycF9wZl9vcl92Zl9iYXIyX21hc2s7CisjZGVmaW5lCVZYR0VfSFdfQkFSR1JQX1BGX09SX1ZGX0JBUjJfTUFTS19CQVJHUlBfUEZfT1JfVkZfQkFSMl9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIsIDYpCisvKjB4MDAwMjAqLwl1NjQJbXNpeGdycF9ubzsKKyNkZWZpbmUgVlhHRV9IV19NU0lYR1JQX05PX1RBQkxFX1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCA1LCAxMSkKKworfSBfX3BhY2tlZDsKKworc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZyB7CisvKjB4MDAwMDAqLwl1NjQJZzNmYmN0X2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfRzNGQkNUX0lOVF9TVEFUVVNfRVJSX0czSUZfSU5UCXZ4Z2VfbUJJVCgwKQorLyoweDAwMDA4Ki8JdTY0CWczZmJjdF9pbnRfbWFzazsKKy8qMHgwMDAxMCovCXU2NAlnM2ZiY3RfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HM0ZCQ1RfRVJSX1JFR19HM0lGX1NNX0VSUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19HM0ZCQ1RfRVJSX1JFR19HM0lGX0dERFIzX0RFQ0MJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfRzNGQkNUX0VSUl9SRUdfRzNJRl9HRERSM19VX0RFQ0MJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfRzNGQkNUX0VSUl9SRUdfRzNJRl9DVFJMX0ZJRk9fREVDQwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19HM0ZCQ1RfRVJSX1JFR19HM0lGX0dERFIzX1NFQ0MJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX0czRkJDVF9FUlJfUkVHX0czSUZfR0REUjNfVV9TRUNDCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19HM0ZCQ1RfRVJSX1JFR19HM0lGX0NUUkxfRklGT19TRUNDCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMDAxOCovCXU2NAlnM2ZiY3RfZXJyX21hc2s7CisvKjB4MDAwMjAqLwl1NjQJZzNmYmN0X2Vycl9hbGFybTsKKworCXU4CXVudXNlZDAwYTAwWzB4MDBhMDAtMHgwMDAyOF07CisKKy8qMHgwMGEwMCovCXU2NAl3cmRtYV9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfUkNfQUxBUk1fUkNfSU5UCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfUlhEUk1fU01fRVJSX1JYRFJNX0lOVAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1JYRENNX1NNX0VSUl9SWERDTV9TTV9JTlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19SWERXTV9TTV9FUlJfUlhEV01fSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfUkRBX0VSUl9SREFfSU5UCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfUkRBX0VDQ19EQl9SREFfRUNDX0RCX0lOVAl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1JEQV9FQ0NfU0dfUkRBX0VDQ19TR19JTlQJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19GUkZfQUxBUk1fRlJGX0lOVAl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19ST0NSQ19BTEFSTV9ST0NSQ19JTlQJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfV0RFMF9BTEFSTV9XREUwX0lOVAl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19XREUxX0FMQVJNX1dERTFfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1dERTJfQUxBUk1fV0RFMl9JTlQJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfV0RFM19BTEFSTV9XREUzX0lOVAl2eGdlX21CSVQoMTcpCisvKjB4MDBhMDgqLwl1NjQJd3JkbWFfaW50X21hc2s7CisvKjB4MDBhMTAqLwl1NjQJcmNfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19GVENfU01fRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19GVENfU01fUEhBU0VfRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19CVERXTV9TTV9FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX0JUQ19TTV9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX0JURENNX1NNX0VSUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfQlREUk1fU01fRVJSCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19STU1fUlhEX1JDX0VDQ19EQl9FUlIJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX1JNTV9SWERfUkNfRUNDX1NHX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfUkhTX1JYRF9SSFNfRUNDX0RCX0VSUgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfUkhTX1JYRF9SSFNfRUNDX1NHX0VSUgl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfUk1NX1NNX0VSUgl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX0JUQ19WUEFUSF9NSVNNQVRDSF9FUlIJdnhnZV9tQklUKDEyKQorLyoweDAwYTE4Ki8JdTY0CXJjX2FsYXJtX21hc2s7CisvKjB4MDBhMjAqLwl1NjQJcmNfYWxhcm1fYWxhcm07CisvKjB4MDBhMjgqLwl1NjQJcnhkcm1fc21fZXJyX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19SWERSTV9TTV9FUlJfUkVHX1BSQ19WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGEzMCovCXU2NAlyeGRybV9zbV9lcnJfbWFzazsKKy8qMHgwMGEzOCovCXU2NAlyeGRybV9zbV9lcnJfYWxhcm07CisvKjB4MDBhNDAqLwl1NjQJcnhkY21fc21fZXJyX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19SWERDTV9TTV9FUlJfUkVHX1BSQ19WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGE0OCovCXU2NAlyeGRjbV9zbV9lcnJfbWFzazsKKy8qMHgwMGE1MCovCXU2NAlyeGRjbV9zbV9lcnJfYWxhcm07CisvKjB4MDBhNTgqLwl1NjQJcnhkd21fc21fZXJyX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19SWERXTV9TTV9FUlJfUkVHX1BSQ19WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGE2MCovCXU2NAlyeGR3bV9zbV9lcnJfbWFzazsKKy8qMHgwMGE2OCovCXU2NAlyeGR3bV9zbV9lcnJfYWxhcm07CisvKjB4MDBhNzAqLwl1NjQJcmRhX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUkRBX0VSUl9SRUdfUkRBX1NNMF9FUlJfQUxBUk0JdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUkRBX0VSUl9SRUdfUkRBX01JU0NfRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1JEQV9FUlJfUkVHX1JEQV9QQ0lYX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19SREFfRVJSX1JFR19SREFfUlhEX0VDQ19EQl9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUkRBX0VSUl9SRUdfUkRBX0ZSTV9FQ0NfREJfRVJSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1JEQV9FUlJfUkVHX1JEQV9VUU1fRUNDX0RCX0VSUgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19SREFfRVJSX1JFR19SREFfSU1NX0VDQ19EQl9FUlIJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfUkRBX0VSUl9SRUdfUkRBX1RJTV9FQ0NfREJfRVJSCXZ4Z2VfbUJJVCg3KQorLyoweDAwYTc4Ki8JdTY0CXJkYV9lcnJfbWFzazsKKy8qMHgwMGE4MCovCXU2NAlyZGFfZXJyX2FsYXJtOworLyoweDAwYTg4Ki8JdTY0CXJkYV9lY2NfZGJfcmVnOworI2RlZmluZSBWWEdFX0hXX1JEQV9FQ0NfREJfUkVHX1JEQV9SWERfRVJSKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTkwKi8JdTY0CXJkYV9lY2NfZGJfbWFzazsKKy8qMHgwMGE5OCovCXU2NAlyZGFfZWNjX2RiX2FsYXJtOworLyoweDAwYWEwKi8JdTY0CXJkYV9lY2Nfc2dfcmVnOworI2RlZmluZSBWWEdFX0hXX1JEQV9FQ0NfU0dfUkVHX1JEQV9SWERfRVJSKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYWE4Ki8JdTY0CXJkYV9lY2Nfc2dfbWFzazsKKy8qMHgwMGFiMCovCXU2NAlyZGFfZWNjX3NnX2FsYXJtOworLyoweDAwYWI4Ki8JdTY0CXJxYV9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1JRQV9FUlJfUkVHX1JRQV9TTV9FUlJfQUxBUk0JdnhnZV9tQklUKDApCisvKjB4MDBhYzAqLwl1NjQJcnFhX2Vycl9tYXNrOworLyoweDAwYWM4Ki8JdTY0CXJxYV9lcnJfYWxhcm07CisvKjB4MDBhZDAqLwl1NjQJZnJmX2FsYXJtX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19GUkZfQUxBUk1fUkVHX1BSQ19WUF9GUkZfU01fRVJSKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYWQ4Ki8JdTY0CWZyZl9hbGFybV9tYXNrOworLyoweDAwYWUwKi8JdTY0CWZyZl9hbGFybV9hbGFybTsKKy8qMHgwMGFlOCovCXU2NAlyb2NyY19hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1FDUV9RQ0NfQllQX0VDQ19EQgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUUNRX1FDQ19CWVBfRUNDX1NHCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19OT0FfTk1BX1NNX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfTk9BX0lNTU1fRUNDX0RCCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19OT0FfSU1NTV9FQ0NfU0cJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1VEUV9VTVFNX0VDQ19EQgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfVURRX1VNUU1fRUNDX1NHCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19OT0FfUkNCTV9FQ0NfREIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19OT0FfUkNCTV9FQ0NfU0cJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19RQ1FfTVVMVElfRUdCX1JTVkRfRVJSCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUUNRX01VTFRJX0VHQl9PV05fRVJSCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUUNRX01VTFRJX0JZUF9PV05fRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUUNRX09XTl9OT1RfQVNTSUdORURfRVJSCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUUNRX09XTl9SU1ZEX1NZTkNfRVJSCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUUNRX0xPU1RfRUdCX0VSUgl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1JDUV9CWVBRMF9PVkVSRkxPVwl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1JDUV9CWVBRMV9PVkVSRkxPVwl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1JDUV9CWVBRMl9PVkVSRkxPVwl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX05PQV9XQ1RfQ01EX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgyMikKKy8qMHgwMGFmMCovCXU2NAlyb2NyY19hbGFybV9tYXNrOworLyoweDAwYWY4Ki8JdTY0CXJvY3JjX2FsYXJtX2FsYXJtOworLyoweDAwYjAwKi8JdTY0CXdkZTBfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1dERTBfQUxBUk1fUkVHX1dERTBfRENDX1NNX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19XREUwX0FMQVJNX1JFR19XREUwX1BSTV9TTV9FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfV0RFMF9BTEFSTV9SRUdfV0RFMF9DUF9TTV9FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfV0RFMF9BTEFSTV9SRUdfV0RFMF9DUF9DTURfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1dERTBfQUxBUk1fUkVHX1dERTBfUENSX1NNX0VSUgl2eGdlX21CSVQoNCkKKy8qMHgwMGIwOCovCXU2NAl3ZGUwX2FsYXJtX21hc2s7CisvKjB4MDBiMTAqLwl1NjQJd2RlMF9hbGFybV9hbGFybTsKKy8qMHgwMGIxOCovCXU2NAl3ZGUxX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19XREUxX0FMQVJNX1JFR19XREUxX0RDQ19TTV9FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfV0RFMV9BTEFSTV9SRUdfV0RFMV9QUk1fU01fRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1dERTFfQUxBUk1fUkVHX1dERTFfQ1BfU01fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1dERTFfQUxBUk1fUkVHX1dERTFfQ1BfQ01EX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19XREUxX0FMQVJNX1JFR19XREUxX1BDUl9TTV9FUlIJdnhnZV9tQklUKDQpCisvKjB4MDBiMjAqLwl1NjQJd2RlMV9hbGFybV9tYXNrOworLyoweDAwYjI4Ki8JdTY0CXdkZTFfYWxhcm1fYWxhcm07CisvKjB4MDBiMzAqLwl1NjQJd2RlMl9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfV0RFMl9BTEFSTV9SRUdfV0RFMl9EQ0NfU01fRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1dERTJfQUxBUk1fUkVHX1dERTJfUFJNX1NNX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19XREUyX0FMQVJNX1JFR19XREUyX0NQX1NNX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19XREUyX0FMQVJNX1JFR19XREUyX0NQX0NNRF9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfV0RFMl9BTEFSTV9SRUdfV0RFMl9QQ1JfU01fRVJSCXZ4Z2VfbUJJVCg0KQorLyoweDAwYjM4Ki8JdTY0CXdkZTJfYWxhcm1fbWFzazsKKy8qMHgwMGI0MCovCXU2NAl3ZGUyX2FsYXJtX2FsYXJtOworLyoweDAwYjQ4Ki8JdTY0CXdkZTNfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1dERTNfQUxBUk1fUkVHX1dERTNfRENDX1NNX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19XREUzX0FMQVJNX1JFR19XREUzX1BSTV9TTV9FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfV0RFM19BTEFSTV9SRUdfV0RFM19DUF9TTV9FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfV0RFM19BTEFSTV9SRUdfV0RFM19DUF9DTURfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1dERTNfQUxBUk1fUkVHX1dERTNfUENSX1NNX0VSUgl2eGdlX21CSVQoNCkKKy8qMHgwMGI1MCovCXU2NAl3ZGUzX2FsYXJtX21hc2s7CisvKjB4MDBiNTgqLwl1NjQJd2RlM19hbGFybV9hbGFybTsKKworCXU4CXVudXNlZDAwYmU4WzB4MDBiZTgtMHgwMGI2MF07CisKKy8qMHgwMGJlOCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzA7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU18zKHZhbCkgdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzUodmFsKSB2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU182KHZhbCkgdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfNyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYmYwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzFfUlhfV19QUklPUklUWV9TU184KHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzFfUlhfV19QUklPUklUWV9TU185KHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xX1JYX1dfUFJJT1JJVFlfU1NfMTAodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzFfUlhfV19QUklPUklUWV9TU18xMSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMV9SWF9XX1BSSU9SSVRZX1NTXzEyKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xX1JYX1dfUFJJT1JJVFlfU1NfMTModmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzFfUlhfV19QUklPUklUWV9TU18xNCh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMV9SWF9XX1BSSU9SSVRZX1NTXzE1KHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBiZjgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8yOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMl9SWF9XX1BSSU9SSVRZX1NTXzE2KHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzJfUlhfV19QUklPUklUWV9TU18xNyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzJfUlhfV19QUklPUklUWV9TU18xOCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzJfUlhfV19QUklPUklUWV9TU18xOSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzJfUlhfV19QUklPUklUWV9TU18yMCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzJfUlhfV19QUklPUklUWV9TU18yMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzJfUlhfV19QUklPUklUWV9TU18yMih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzJfUlhfV19QUklPUklUWV9TU18yMyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGMwMCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzM7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8zX1JYX1dfUFJJT1JJVFlfU1NfMjQodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fM19SWF9XX1BSSU9SSVRZX1NTXzI1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fM19SWF9XX1BSSU9SSVRZX1NTXzI2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fM19SWF9XX1BSSU9SSVRZX1NTXzI3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fM19SWF9XX1BSSU9SSVRZX1NTXzI4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fM19SWF9XX1BSSU9SSVRZX1NTXzI5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fM19SWF9XX1BSSU9SSVRZX1NTXzMwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fM19SWF9XX1BSSU9SSVRZX1NTXzMxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzA4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fNDsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzRfUlhfV19QUklPUklUWV9TU18zMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl80X1JYX1dfUFJJT1JJVFlfU1NfMzModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl80X1JYX1dfUFJJT1JJVFlfU1NfMzQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl80X1JYX1dfUFJJT1JJVFlfU1NfMzUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl80X1JYX1dfUFJJT1JJVFlfU1NfMzYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl80X1JYX1dfUFJJT1JJVFlfU1NfMzcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl80X1JYX1dfUFJJT1JJVFlfU1NfMzgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl80X1JYX1dfUFJJT1JJVFlfU1NfMzkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjMTAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl81OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNV9SWF9XX1BSSU9SSVRZX1NTXzQwKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzVfUlhfV19QUklPUklUWV9TU180MSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzVfUlhfV19QUklPUklUWV9TU180Mih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzVfUlhfV19QUklPUklUWV9TU180Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzVfUlhfV19QUklPUklUWV9TU180NCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzVfUlhfV19QUklPUklUWV9TU180NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzVfUlhfV19QUklPUklUWV9TU180Nih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzVfUlhfV19QUklPUklUWV9TU180Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGMxOCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzY7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl82X1JYX1dfUFJJT1JJVFlfU1NfNDgodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNl9SWF9XX1BSSU9SSVRZX1NTXzQ5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNl9SWF9XX1BSSU9SSVRZX1NTXzUwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNl9SWF9XX1BSSU9SSVRZX1NTXzUxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNl9SWF9XX1BSSU9SSVRZX1NTXzUyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNl9SWF9XX1BSSU9SSVRZX1NTXzUzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNl9SWF9XX1BSSU9SSVRZX1NTXzU0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNl9SWF9XX1BSSU9SSVRZX1NTXzU1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzIwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fNzsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzdfUlhfV19QUklPUklUWV9TU181Nih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl83X1JYX1dfUFJJT1JJVFlfU1NfNTcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl83X1JYX1dfUFJJT1JJVFlfU1NfNTgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl83X1JYX1dfUFJJT1JJVFlfU1NfNTkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl83X1JYX1dfUFJJT1JJVFlfU1NfNjAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl83X1JYX1dfUFJJT1JJVFlfU1NfNjEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl83X1JYX1dfUFJJT1JJVFlfU1NfNjIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl83X1JYX1dfUFJJT1JJVFlfU1NfNjModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjMjgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl84OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOF9SWF9XX1BSSU9SSVRZX1NTXzY0KHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzhfUlhfV19QUklPUklUWV9TU182NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzhfUlhfV19QUklPUklUWV9TU182Nih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzhfUlhfV19QUklPUklUWV9TU182Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzhfUlhfV19QUklPUklUWV9TU182OCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzhfUlhfV19QUklPUklUWV9TU182OSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOF9SWF9XX1BSSU9SSVRZX1NTXzcwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOF9SWF9XX1BSSU9SSVRZX1NTXzcxKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjMzAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl85OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOV9SWF9XX1BSSU9SSVRZX1NTXzcyKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzlfUlhfV19QUklPUklUWV9TU183Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzlfUlhfV19QUklPUklUWV9TU183NCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzlfUlhfV19QUklPUklUWV9TU183NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzlfUlhfV19QUklPUklUWV9TU183Nih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzlfUlhfV19QUklPUklUWV9TU183Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzlfUlhfV19QUklPUklUWV9TU183OCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzlfUlhfV19QUklPUklUWV9TU183OSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGMzOCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzEwOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTBfUlhfV19QUklPUklUWV9TU184MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTBfUlhfV19QUklPUklUWV9TU184MSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEwX1JYX1dfUFJJT1JJVFlfU1NfODIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMF9SWF9XX1BSSU9SSVRZX1NTXzgzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTBfUlhfV19QUklPUklUWV9TU184NCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEwX1JYX1dfUFJJT1JJVFlfU1NfODUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMF9SWF9XX1BSSU9SSVRZX1NTXzg2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTBfUlhfV19QUklPUklUWV9TU184Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM0MCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzExOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTFfUlhfV19QUklPUklUWV9TU184OCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTFfUlhfV19QUklPUklUWV9TU184OSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzExX1JYX1dfUFJJT1JJVFlfU1NfOTAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMV9SWF9XX1BSSU9SSVRZX1NTXzkxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTFfUlhfV19QUklPUklUWV9TU185Mih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzExX1JYX1dfUFJJT1JJVFlfU1NfOTModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMV9SWF9XX1BSSU9SSVRZX1NTXzk0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTFfUlhfV19QUklPUklUWV9TU185NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM0OCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzEyOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTJfUlhfV19QUklPUklUWV9TU185Nih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTJfUlhfV19QUklPUklUWV9TU185Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEyX1JYX1dfUFJJT1JJVFlfU1NfOTgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMl9SWF9XX1BSSU9SSVRZX1NTXzk5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTJfUlhfV19QUklPUklUWV9TU18xMDAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMl9SWF9XX1BSSU9SSVRZX1NTXzEwMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEyX1JYX1dfUFJJT1JJVFlfU1NfMTAyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTJfUlhfV19QUklPUklUWV9TU18xMDModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjNTAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xMzsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEzX1JYX1dfUFJJT1JJVFlfU1NfMTA0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xM19SWF9XX1BSSU9SSVRZX1NTXzEwNSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEzX1JYX1dfUFJJT1JJVFlfU1NfMTA2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTNfUlhfV19QUklPUklUWV9TU18xMDcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xM19SWF9XX1BSSU9SSVRZX1NTXzEwOCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEzX1JYX1dfUFJJT1JJVFlfU1NfMTA5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTNfUlhfV19QUklPUklUWV9TU18xMTAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xM19SWF9XX1BSSU9SSVRZX1NTXzExMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM1OCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzE0OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTRfUlhfV19QUklPUklUWV9TU18xMTIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE0X1JYX1dfUFJJT1JJVFlfU1NfMTEzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTRfUlhfV19QUklPUklUWV9TU18xMTQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNF9SWF9XX1BSSU9SSVRZX1NTXzExNSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE0X1JYX1dfUFJJT1JJVFlfU1NfMTE2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTRfUlhfV19QUklPUklUWV9TU18xMTcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNF9SWF9XX1BSSU9SSVRZX1NTXzExOCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE0X1JYX1dfUFJJT1JJVFlfU1NfMTE5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzYwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTU7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNV9SWF9XX1BSSU9SSVRZX1NTXzEyMCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTVfUlhfV19QUklPUklUWV9TU18xMjEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNV9SWF9XX1BSSU9SSVRZX1NTXzEyMih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE1X1JYX1dfUFJJT1JJVFlfU1NfMTIzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTVfUlhfV19QUklPUklUWV9TU18xMjQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNV9SWF9XX1BSSU9SSVRZX1NTXzEyNSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE1X1JYX1dfUFJJT1JJVFlfU1NfMTI2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTVfUlhfV19QUklPUklUWV9TU18xMjcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjNjgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xNjsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE2X1JYX1dfUFJJT1JJVFlfU1NfMTI4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNl9SWF9XX1BSSU9SSVRZX1NTXzEyOSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE2X1JYX1dfUFJJT1JJVFlfU1NfMTMwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTZfUlhfV19QUklPUklUWV9TU18xMzEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNl9SWF9XX1BSSU9SSVRZX1NTXzEzMih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE2X1JYX1dfUFJJT1JJVFlfU1NfMTMzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTZfUlhfV19QUklPUklUWV9TU18xMzQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNl9SWF9XX1BSSU9SSVRZX1NTXzEzNSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM3MCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzE3OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTdfUlhfV19QUklPUklUWV9TU18xMzYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE3X1JYX1dfUFJJT1JJVFlfU1NfMTM3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTdfUlhfV19QUklPUklUWV9TU18xMzgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xN19SWF9XX1BSSU9SSVRZX1NTXzEzOSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE3X1JYX1dfUFJJT1JJVFlfU1NfMTQwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTdfUlhfV19QUklPUklUWV9TU18xNDEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xN19SWF9XX1BSSU9SSVRZX1NTXzE0Mih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE3X1JYX1dfUFJJT1JJVFlfU1NfMTQzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzc4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTg7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOF9SWF9XX1BSSU9SSVRZX1NTXzE0NCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMThfUlhfV19QUklPUklUWV9TU18xNDUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOF9SWF9XX1BSSU9SSVRZX1NTXzE0Nih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE4X1JYX1dfUFJJT1JJVFlfU1NfMTQ3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMThfUlhfV19QUklPUklUWV9TU18xNDgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOF9SWF9XX1BSSU9SSVRZX1NTXzE0OSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE4X1JYX1dfUFJJT1JJVFlfU1NfMTUwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMThfUlhfV19QUklPUklUWV9TU18xNTEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjODAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xOTsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE5X1JYX1dfUFJJT1JJVFlfU1NfMTUyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOV9SWF9XX1BSSU9SSVRZX1NTXzE1Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE5X1JYX1dfUFJJT1JJVFlfU1NfMTU0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTlfUlhfV19QUklPUklUWV9TU18xNTUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOV9SWF9XX1BSSU9SSVRZX1NTXzE1Nih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE5X1JYX1dfUFJJT1JJVFlfU1NfMTU3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTlfUlhfV19QUklPUklUWV9TU18xNTgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOV9SWF9XX1BSSU9SSVRZX1NTXzE1OSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM4OCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzIwOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjBfUlhfV19QUklPUklUWV9TU18xNjAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIwX1JYX1dfUFJJT1JJVFlfU1NfMTYxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjBfUlhfV19QUklPUklUWV9TU18xNjIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMF9SWF9XX1BSSU9SSVRZX1NTXzE2Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIwX1JYX1dfUFJJT1JJVFlfU1NfMTY0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjBfUlhfV19QUklPUklUWV9TU18xNjUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMF9SWF9XX1BSSU9SSVRZX1NTXzE2Nih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIwX1JYX1dfUFJJT1JJVFlfU1NfMTY3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzkwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMjE7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMV9SWF9XX1BSSU9SSVRZX1NTXzE2OCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjFfUlhfV19QUklPUklUWV9TU18xNjkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMV9SWF9XX1BSSU9SSVRZX1NTXzE3MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKworI2RlZmluZSBWWEdFX0hXX1dSUl9SSU5HX1NFUlZJQ0VfU1RBVEVTCQkJMTcxCisjZGVmaW5lIFZYR0VfSFdfV1JSX1JJTkdfQ09VTlQJCQkJMjIKKworLyoweDAwYzk4Ki8JdTY0CXJ4X3F1ZXVlX3ByaW9yaXR5XzA7CisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl8wKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzModmFsKSB2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzQodmFsKSB2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzUodmFsKSB2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzYodmFsKSB2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzcodmFsKSB2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGNhMCovCXU2NAlyeF9xdWV1ZV9wcmlvcml0eV8xOworI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfOCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl85KHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTEodmFsKSB2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzEyKHZhbCkgdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTQodmFsKSB2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzE1KHZhbCkgdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjYTgqLwl1NjQJcnhfcXVldWVfcHJpb3JpdHlfMjsKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8yX1JYX1FfTlVNQkVSXzE2KHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKwl1OAl1bnVzZWQwMGNjOFsweDAwY2M4LTB4MDBjYjBdOworCisvKjB4MDBjYzgqLwl1NjQJcmVwbGljYXRpb25fcXVldWVfcHJpb3JpdHk7CisjZGVmaW5lCVZYR0VfSFdfUkVQTElDQVRJT05fUVVFVUVfUFJJT1JJVFlfUkVQTElDQVRJT05fUVVFVUVfUFJJT1JJVFkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjZDAqLwl1NjQJcnhfcXVldWVfc2VsZWN0OworI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1NFTEVDVF9OVU1CRVIobikJdnhnZV9tQklUKG4pCisjZGVmaW5lCVZYR0VfSFdfUlhfUVVFVUVfU0VMRUNUX0VOQUJMRV9DT0RFCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SWF9RVUVVRV9TRUxFQ1RfRU5BQkxFX0hJRVJBUkNISUNBTF9QUlRZCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMGNkOCovCXU2NAlycWFfdnBicF9jdHJsOworI2RlZmluZQlWWEdFX0hXX1JRQV9WUEJQX0NUUkxfV1JfWE9OX0RJUwl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlFBX1ZQQlBfQ1RSTF9ST0NSQ19ESVMJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1JRQV9WUEJQX0NUUkxfVFhQRV9ESVMJdnhnZV9tQklUKDMxKQorLyoweDAwY2UwKi8JdTY0CXJ4X211bHRpX2Nhc3RfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19SWF9NVUxUSV9DQVNUX0NUUkxfVElNRV9PVVRfRElTCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1JYX01VTFRJX0NBU1RfQ1RSTF9GUk1fRFJPUF9ESVMJdnhnZV9tQklUKDEpCisjZGVmaW5lIFZYR0VfSFdfUlhfTVVMVElfQ0FTVF9DVFJMX05PX1JYRF9USU1FX09VVF9DTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMiwgMzApCisjZGVmaW5lIFZYR0VfSFdfUlhfTVVMVElfQ0FTVF9DVFJMX1RJTUVfT1VUX0NOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMGNlOCovCXU2NAl3ZGVfcHJtX2N0cmw7CisjZGVmaW5lIFZYR0VfSFdfV0RFX1BSTV9DVFJMX1NQQVZfVEhSRVNIT0xEKHZhbCkgdnhnZV92QklUKHZhbCwgMiwgMTApCisjZGVmaW5lIFZYR0VfSFdfV0RFX1BSTV9DVFJMX1NQTElUX1RIUkVTSE9MRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE4LCAxNCkKKyNkZWZpbmUJVlhHRV9IV19XREVfUFJNX0NUUkxfU1BMSVRfT05fMVNUX1JPVwl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfV0RFX1BSTV9DVFJMX1NQTElUX09OX1JPV19CTkRSWQl2eGdlX21CSVQoMzMpCisjZGVmaW5lIFZYR0VfSFdfV0RFX1BSTV9DVFJMX0ZCX1JPV19TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgNDYsIDIpCisvKjB4MDBjZjAqLwl1NjQJbm9hX2N0cmw7CisjZGVmaW5lIFZYR0VfSFdfTk9BX0NUUkxfRlJNX1BSVFlfUVVPVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX05PQV9DVFJMX05PTl9GUk1fUFJUWV9RVU9UQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZQlWWEdFX0hXX05PQV9DVFJMX0lHTk9SRV9LREZDX0lGX1NUQVRVUwl2eGdlX21CSVQoMTYpCisjZGVmaW5lIFZYR0VfSFdfTk9BX0NUUkxfTUFYX0pPQl9DTlRfRk9SX1dERTAodmFsKSB2eGdlX3ZCSVQodmFsLCAzNywgNCkKKyNkZWZpbmUgVlhHRV9IV19OT0FfQ1RSTF9NQVhfSk9CX0NOVF9GT1JfV0RFMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ1LCA0KQorI2RlZmluZSBWWEdFX0hXX05PQV9DVFJMX01BWF9KT0JfQ05UX0ZPUl9XREUyKHZhbCkgdnhnZV92QklUKHZhbCwgNTMsIDQpCisjZGVmaW5lIFZYR0VfSFdfTk9BX0NUUkxfTUFYX0pPQl9DTlRfRk9SX1dERTModmFsKSB2eGdlX3ZCSVQodmFsLCA2MCwgNCkKKy8qMHgwMGNmOCovCXU2NAlwaGFzZV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1FDQ19XUl9QSEFTRV9FTgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfUUNDX1JEX1BIQVNFX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19JTU1NX1dSX1BIQVNFX0VOCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19JTU1NX1JEX1BIQVNFX0VOCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfVU1RTV9XUl9QSEFTRV9FTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1VNUU1fUkRfUEhBU0VfRU4JdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19SQ0JNX1dSX1BIQVNFX0VOCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfUkNCTV9SRF9QSEFTRV9FTgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1JYRF9SQ19XUl9QSEFTRV9FTgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1JYRF9SQ19SRF9QSEFTRV9FTgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1JYRF9SSFNfV1JfUEhBU0VfRU4JdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19SWERfUkhTX1JEX1BIQVNFX0VOCXZ4Z2VfbUJJVCg0MykKKy8qMHgwMGQwMCovCXU2NAlyY3FfYnlwcV9jZmc7CisjZGVmaW5lIFZYR0VfSFdfUkNRX0JZUFFfQ0ZHX09WRVJGTE9XX1RIUkVTSE9MRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEwLCAyMikKKyNkZWZpbmUgVlhHRV9IV19SQ1FfQllQUV9DRkdfQllQX09OX1RIUkVTSE9MRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM5LCA5KQorI2RlZmluZSBWWEdFX0hXX1JDUV9CWVBRX0NGR19CWVBfT0ZGX1RIUkVTSE9MRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU1LCA5KQorCXU4CXVudXNlZDAwZTAwWzB4MDBlMDAtMHgwMGQwOF07CisKKy8qMHgwMGUwMCovCXU2NAlkb29yYmVsbF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0RPT1JCRUxMX0lOVF9TVEFUVVNfS0RGQ19FUlJfUkVHX1RYRE1BX0tERkNfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0RPT1JCRUxMX0lOVF9TVEFUVVNfVVNEQ19FUlJfUkVHX1RYRE1BX1VTRENfSU5UCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMGUwOCovCXU2NAlkb29yYmVsbF9pbnRfbWFzazsKKy8qMHgwMGUxMCovCXU2NAlrZGZjX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0tERkNfS0RGQ19FQ0NfU0dfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19LREZDX0tERkNfRUNDX0RCX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0tERkNfS0RGQ19TTV9FUlJfQUxBUk0JdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19LREZDX0tERkNfTUlTQ19FUlJfMQl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0tERkNfS0RGQ19QQ0lYX0VSUgl2eGdlX21CSVQoMzkpCisvKjB4MDBlMTgqLwl1NjQJa2RmY19lcnJfbWFzazsKKy8qMHgwMGUyMCovCXU2NAlrZGZjX2Vycl9yZWdfYWxhcm07CisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0FMQVJNX0tERkNfS0RGQ19FQ0NfU0dfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19BTEFSTV9LREZDX0tERkNfRUNDX0RCX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0FMQVJNX0tERkNfS0RGQ19TTV9FUlJfQUxBUk0JdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19BTEFSTV9LREZDX0tERkNfTUlTQ19FUlJfMQl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0FMQVJNX0tERkNfS0RGQ19QQ0lYX0VSUgl2eGdlX21CSVQoMzkpCisJdTgJdW51c2VkMDBlNDBbMHgwMGU0MC0weDAwZTI4XTsKKy8qMHgwMGU0MCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl8wOworI2RlZmluZQlWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzBfRU5BQkxFCXZ4Z2VfbUJJVCgwKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzBfTlVNQkVSXzAodmFsKSB2eGdlX3ZCSVQodmFsLCA1LCAzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzBfTEVOR1RIXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMF9OVU1CRVJfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM3LCAzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzBfTEVOR1RIXzEodmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBlNDgqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fMTsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8xX05VTUJFUl8yKHZhbCkgdnhnZV92QklUKHZhbCwgNSwgMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8xX0xFTkdUSF8yKHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzFfTlVNQkVSXzModmFsKSB2eGdlX3ZCSVQodmFsLCAzNywgMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8xX0xFTkdUSF8zKHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwZTUwKi8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzI7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMl9OVU1CRVJfNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMl9MRU5HVEhfNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8yX05VTUJFUl81KHZhbCkgdnhnZV92QklUKHZhbCwgMzcsIDMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMl9MRU5HVEhfNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGU1OCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl8zOworI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzNfTlVNQkVSXzYodmFsKSB2eGdlX3ZCSVQodmFsLCA1LCAzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzNfTEVOR1RIXzYodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fM19OVU1CRVJfNyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM3LCAzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzNfTEVOR1RIXzcodmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBlNjAqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fNDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl80X0xFTkdUSF84KHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzRfTEVOR1RIXzkodmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBlNjgqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fNTsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl81X0xFTkdUSF8xMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl81X0xFTkdUSF8xMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGU3MCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl82OworI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzZfTEVOR1RIXzEyKHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzZfTEVOR1RIXzEzKHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwZTc4Ki8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzc7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fN19MRU5HVEhfMTQodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fN19MRU5HVEhfMTUodmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBlODAqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fODsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl84X0xFTkdUSF8xNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKy8qMHgwMGU4OCovCXU2NAlrZGZjX3dfcm91bmRfcm9iaW5fMDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl8zKHZhbCkgdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzQodmFsKSB2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl82KHZhbCkgdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzcodmFsKSB2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKworCXU4CXVudXNlZDBmMjhbMHgwZjI4LTB4MGU5MF07CisKKy8qMHgwMGYyOCovCXU2NAlrZGZjX3dfcm91bmRfcm9iaW5fMjA7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzIwX05VTUJFUl8wKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMjBfTlVNQkVSXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMjBfTlVNQkVSXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMjBfTlVNQkVSXzModmFsKSB2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMjBfTlVNQkVSXzQodmFsKSB2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMjBfTlVNQkVSXzUodmFsKSB2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMjBfTlVNQkVSXzYodmFsKSB2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMjBfTlVNQkVSXzcodmFsKSB2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKworI2RlZmluZSBWWEdFX0hXX1dSUl9GSUZPX0NPVU5UCQkJCTIwCisKKwl1OAl1bnVzZWQwZmM4WzB4MGZjOC0weDBmMzBdOworCisvKjB4MDBmYzgqLwl1NjQJa2RmY193X3JvdW5kX3JvYmluXzQwOworI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl80MF9OVU1CRVJfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzQwX05VTUJFUl8xKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzQwX05VTUJFUl8yKHZhbCkgdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzQwX05VTUJFUl8zKHZhbCkgdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzQwX05VTUJFUl80KHZhbCkgdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzQwX05VTUJFUl81KHZhbCkgdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzQwX05VTUJFUl82KHZhbCkgdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzQwX05VTUJFUl83KHZhbCkgdnhnZV92QklUKHZhbCwgNTksIDUpCisKKwl1OAl1bnVzZWQxMDY4WzB4MDEwNjgtMHgwZmQwXTsKKworLyoweDAxMDY4Ki8JdTY0CWtkZmNfZW50cnlfdHlwZV9zZWxfMDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzAodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE0LCAyKQorI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIyLCAyKQorI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMwLCAyKQorI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM4LCAyKQorI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ2LCAyKQorI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU0LCAyKQorI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfNyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYyLCAyKQorLyoweDAxMDcwKi8JdTY0CWtkZmNfZW50cnlfdHlwZV9zZWxfMTsKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzFfTlVNQkVSXzgodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorLyoweDAxMDc4Ki8JdTY0CWtkZmNfZmlmb18wX2N0cmw7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19GSUZPXzBfQ1RSTF9XUlJfTlVNQkVSKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19XRUlHSFRFRF9SUl9TRVJWSUNFX1NUQVRFUwkJMTc2CisjZGVmaW5lIFZYR0VfSFdfV1JSX0ZJRk9fU0VSVklDRV9TVEFURVMJCQkxNTMKKworCXU4CXVudXNlZDExMDBbMHgwMTEwMC0weDEwODBdOworCisvKjB4MDExMDAqLwl1NjQJa2RmY19maWZvXzE3X2N0cmw7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19GSUZPXzE3X0NUUkxfV1JSX05VTUJFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisKKwl1OAl1bnVzZWQxNjAwWzB4MDE2MDAtMHgxMTA4XTsKKworLyoweDAxNjAwKi8JdTY0CXJ4bWFjX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfSU5UX1NUQVRVU19SWE1BQ19HRU5fRVJSX1JYTUFDX0dFTl9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfSU5UX1NUQVRVU19SWE1BQ19FQ0NfRVJSX1JYTUFDX0VDQ19JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfSU5UX1NUQVRVU19SWE1BQ19WQVJJT1VTX0VSUl9SWE1BQ19WQVJJT1VTX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwMTYwOCovCXU2NAlyeG1hY19pbnRfbWFzazsKKwl1OAl1bnVzZWQwMTYxOFsweDAxNjE4LTB4MDE2MTBdOworCisvKjB4MDE2MTgqLwl1NjQJcnhtYWNfZ2VuX2Vycl9yZWc7CisvKjB4MDE2MjAqLwl1NjQJcnhtYWNfZ2VuX2Vycl9tYXNrOworLyoweDAxNjI4Ki8JdTY0CXJ4bWFjX2dlbl9lcnJfYWxhcm07CisvKjB4MDE2MzAqLwl1NjQJcnhtYWNfZWNjX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUk1BQ19QT1JUMF9STUFDX1JUU19QQVJUX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JNQUNfUE9SVDBfUk1BQ19SVFNfUEFSVF9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19STUFDX1BPUlQxX1JNQUNfUlRTX1BBUlRfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDgsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUk1BQ19QT1JUMV9STUFDX1JUU19QQVJUX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19STUFDX1BPUlQyX1JNQUNfUlRTX1BBUlRfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JNQUNfUE9SVDJfUk1BQ19SVFNfUEFSVF9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX0RBX0xLUF9QUlQwX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNCwgMikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfREFfTEtQX1BSVDBfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI2LCAyKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19EQV9MS1BfUFJUMV9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjgsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX0RBX0xLUF9QUlQxX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMCwgMikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfVklEX0xLUF9TR19FUlIJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19WSURfTEtQX0RCX0VSUgl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1BOX0xLUF9QUlQwX1NHX0VSUgl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1BOX0xLUF9QUlQwX0RCX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1BOX0xLUF9QUlQxX1NHX0VSUgl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1BOX0xLUF9QUlQxX0RCX0VSUgl2eGdlX21CSVQoMzcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1BOX0xLUF9QUlQyX1NHX0VSUgl2eGdlX21CSVQoMzgpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1BOX0xLUF9QUlQyX0RCX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1JUSF9NQVNLX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MCwgNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUlRIX01BU0tfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ3LCA3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19SVEhfTEtQX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NCwgMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUlRIX0xLUF9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTcsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX0RTX0xLUF9TR19FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCg2MCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfRFNfTEtQX0RCX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDYxKQorLyoweDAxNjM4Ki8JdTY0CXJ4bWFjX2VjY19lcnJfbWFzazsKKy8qMHgwMTY0MCovCXU2NAlyeG1hY19lY2NfZXJyX2FsYXJtOworLyoweDAxNjQ4Ki8JdTY0CXJ4bWFjX3ZhcmlvdXNfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQVJJT1VTX0VSUl9SRUdfUk1BQ19STUFDX1BPUlQwX0ZTTV9FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkFSSU9VU19FUlJfUkVHX1JNQUNfUk1BQ19QT1JUMV9GU01fRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZBUklPVVNfRVJSX1JFR19STUFDX1JNQUNfUE9SVDJfRlNNX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQVJJT1VTX0VSUl9SRUdfUk1BQ0pfUk1BQ0pfRlNNX0VSUgl2eGdlX21CSVQoMykKKy8qMHgwMTY1MCovCXU2NAlyeG1hY192YXJpb3VzX2Vycl9tYXNrOworLyoweDAxNjU4Ki8JdTY0CXJ4bWFjX3ZhcmlvdXNfZXJyX2FsYXJtOworLyoweDAxNjYwKi8JdTY0CXJ4bWFjX2dlbl9jZmc7CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfR0VOX0NGR19TQ0FMRV9STUFDX1VUSUwJdnhnZV9tQklUKDExKQorLyoweDAxNjY4Ki8JdTY0CXJ4bWFjX2F1dGhvcml6ZV9hbGxfYWRkcjsKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19BVVRIT1JJWkVfQUxMX0FERFJfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDE2NzAqLwl1NjQJcnhtYWNfYXV0aG9yaXplX2FsbF92aWQ7CisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfQVVUSE9SSVpFX0FMTF9WSURfVlAobikJdnhnZV9tQklUKG4pCisJdTgJdW51c2VkMDE2YzBbMHgwMTZjMC0weDAxNjc4XTsKKworLyoweDAxNmMwKi8JdTY0CXJ4bWFjX3JlZF9yYXRlX3JlcGxfcXVldWU7CisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9DUkFURV9USFIwKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX0NSQVRFX1RIUjEodmFsKSB2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfQ1JBVEVfVEhSMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9DUkFURV9USFIzKHZhbCkgdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9GUkFURV9USFIwKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9GUkFURV9USFIxKHZhbCkgdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9GUkFURV9USFIyKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9GUkFURV9USFIzKHZhbCkgdnhnZV92QklUKHZhbCwgMjgsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9UUklDS0xFX0VOCXZ4Z2VfbUJJVCgzNSkKKwl1OAl1bnVzZWQwMTZlMFsweDAxNmUwLTB4MDE2YzhdOworCisvKjB4MDE2ZTAqLwl1NjQJcnhtYWNfY2ZnMF9wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9STUFDX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9TVFJJUF9GQ1MJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX0RJU0NBUkRfUEZSTQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX0lHTk9SRV9GQ1NfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfSUdOT1JFX0xPTkdfRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfSUdOT1JFX1VTSVpFRF9FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9JR05PUkVfTEVOX01JU01BVENICXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfTUFYX1BZTERfTEVOKHZhbCkgdnhnZV92QklUKHZhbCwgNTAsIDE0KQorCXU4CXVudXNlZDAxNzEwWzB4MDE3MTAtMHgwMTZmOF07CisKKy8qMHgwMTcxMCovCXU2NAlyeG1hY19jZmcyX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMl9QT1JUX1BST01fRU4JdnhnZV9tQklUKDMpCisvKjB4MDE3MjgqLwl1NjQJcnhtYWNfcGF1c2VfY2ZnX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfR0VOX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1JDVl9FTgl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9BQ0NFTF9TRU5EKHZhbCkgdnhnZV92QklUKHZhbCwgOSwgMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9EVUFMX1RIUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfSElHSF9QVElNRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9JR05PUkVfUEZfRkNTX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfSUdOT1JFX1BGX0xFTl9FUlIJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0xJTUlURVJfRU4JdnhnZV9tQklUKDQ3KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX01BWF9MSU1JVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCA4KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1BFUk1JVF9SQVRFTUdNVF9DVFJMCXZ4Z2VfbUJJVCg1OSkKKwl1OAl1bnVzZWQwMTc1OFsweDAxNzU4LTB4MDE3NDBdOworCisvKjB4MDE3NTgqLwl1NjQJcnhtYWNfcmVkX2NmZzBfcG9ydFszXTsKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfQ0ZHMF9QT1JUX1JFRF9FTl9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMTc3MCovCXU2NAlyeG1hY19yZWRfY2ZnMV9wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JFRF9DRkcxX1BPUlRfRklORV9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SRURfQ0ZHMV9QT1JUX1JFRF9FTl9SRVBMX1FVRVVFCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwMTc4OCovCXU2NAlyeG1hY19yZWRfY2ZnMl9wb3J0WzNdOworI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9DRkcyX1BPUlRfVFJJQ0tMRV9FTl9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMTdhMCovCXU2NAlyeG1hY19saW5rX3V0aWxfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19MSU5LX1VUSUxfUE9SVF9STUFDX1JNQUNfVVRJTElaQVRJT04odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMSwgNykKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19MSU5LX1VUSUxfUE9SVF9STUFDX1VUSUxfQ0ZHKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19MSU5LX1VUSUxfUE9SVF9STUFDX1JNQUNfRlJBQ19VVElMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX0xJTktfVVRJTF9QT1JUX1JNQUNfUEtUX1dFSUdIVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0xJTktfVVRJTF9QT1JUX1JNQUNfUk1BQ19TQ0FMRV9GQUNUT1IJdnhnZV9tQklUKDIzKQorCXU4CXVudXNlZDAxN2QwWzB4MDE3ZDAtMHgwMTdiOF07CisKKy8qMHgwMTdkMCovCXU2NAlyeG1hY19zdGF0dXNfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19TVEFUVVNfUE9SVF9STUFDX1JYX0ZSTV9SQ1ZECXZ4Z2VfbUJJVCgzKQorCXU4CXVudXNlZDAxODAwWzB4MDE4MDAtMHgwMTdlOF07CisKKy8qMHgwMTgwMCovCXU2NAlyeG1hY19yeF9wYV9jZmcwOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfSUdOT1JFX0ZSQU1FX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1NVUFBPUlRfU05BUF9BQl9OCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfU0VBUkNIX0ZPUl9IQU8JdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfU1VQUE9SVF9NT0JJTEVfSVBWNl9IRFJTCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX0lQVjZfU1RPUF9TRUFSQ0hJTkcJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfTk9fUFNfSUZfVU5LTk9XTgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9TRUFSQ0hfRk9SX0VUWVBFCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1RPU1NfQU5ZX0ZSTV9JRl9MM19DU1VNX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9UT1NTX09GRkxEX0ZSTV9JRl9MM19DU1VNX0VSUgl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9UT1NTX0FOWV9GUk1fSUZfTDRfQ1NVTV9FUlIJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVE9TU19PRkZMRF9GUk1fSUZfTDRfQ1NVTV9FUlIJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVE9TU19BTllfRlJNX0lGX1JQQV9FUlIJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVE9TU19PRkZMRF9GUk1fSUZfUlBBX0VSUgl2eGdlX21CSVQoNTkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9KVU1CT19TTkFQX0VOCXZ4Z2VfbUJJVCg2MykKKy8qMHgwMTgwOCovCXU2NAlyeG1hY19yeF9wYV9jZmcxOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzFfUkVQTF9JUFY0X1RDUF9JTkNMX1BICXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzFfUkVQTF9JUFY2X1RDUF9JTkNMX1BICXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzFfUkVQTF9JUFY0X1VEUF9JTkNMX1BICXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcxX1JFUExfSVBWNl9VRFBfSU5DTF9QSAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMV9SRVBMX0w0X0lOQ0xfQ0YJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzFfUkVQTF9TVFJJUF9WTEFOX1RBRwl2eGdlX21CSVQoMjMpCisJdTgJdW51c2VkMDE4MjhbMHgwMTgyOC0weDAxODEwXTsKKworLyoweDAxODI4Ki8JdTY0CXJ0c19tZ3JfY2ZnMDsKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfUlRTX0RQX1NQX1BSSU9SSVRZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ0ZHMF9GTEVYX0w0UFJUQ0xfVkFMVUUodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfSUNNUF9UUkFTSAl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1RDUFNZTl9UUkFTSAl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1pMNFBZTERfVFJBU0gJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9MNFBSVENMX1RDUF9UUkFTSAl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX0w0UFJUQ0xfVURQX1RSQVNICXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfTDRQUlRDTF9GTEVYX1RSQVNICXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfSVBGUkFHX1RSQVNICXZ4Z2VfbUJJVCg1OSkKKy8qMHgwMTgzMCovCXU2NAlydHNfbWdyX2NmZzE7CisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcxX0RBX0FDVElWRV9UQUJMRQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzFfUE5fQUNUSVZFX1RBQkxFCXZ4Z2VfbUJJVCg3KQorLyoweDAxODM4Ki8JdTY0CXJ0c19tZ3JfY3JpdGVyaWFfcHJpb3JpdHk7CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9FVFlQRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9JQ01QX1RDUFNZTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDksIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9MNFBOKHZhbCkgdnhnZV92QklUKHZhbCwgMTMsIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9SQU5HRV9MNFBOKHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9SVEhfSVQodmFsKSB2eGdlX3ZCSVQodmFsLCAyMSwgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX0RTKHZhbCkgdnhnZV92QklUKHZhbCwgMjUsIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9RT1ModmFsKSB2eGdlX3ZCSVQodmFsLCAyOSwgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1pMNFBZTEQodmFsKSB2eGdlX3ZCSVQodmFsLCAzMywgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX0w0UFJUQ0wodmFsKSB2eGdlX3ZCSVQodmFsLCAzNywgMykKKy8qMHgwMTg0MCovCXU2NAlydHNfbWdyX2RhX3BhdXNlX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0RBX1BBVVNFX0NGR19WUEFUSF9WRUNUT1IodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTg0OCovCXU2NAlydHNfbWdyX2RhX3Nsb3dfcHJvdG9fY2ZnOworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfREFfU0xPV19QUk9UT19DRkdfVlBBVEhfVkVDVE9SKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAxODkwWzB4MDE4OTAtMHgwMTg1MF07CisvKjB4MDE4OTAqLyAgICAgdTY0ICAgICBydHNfbWdyX2NiYXNpbl9jZmc7CisJdTgJdW51c2VkMDE5NjhbMHgwMTk2OC0weDAxODk4XTsKKworLyoweDAxOTY4Ki8JdTY0CWRiZ19zdGF0X3J4X2FueV9mcm1zOworI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUX1JYX0FOWV9GUk1TX1BPUlQwX1JYX0FOWV9GUk1TKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVF9SWF9BTllfRlJNU19QT1JUMV9SWF9BTllfRlJNUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRfUlhfQU5ZX0ZSTVNfUE9SVDJfUlhfQU5ZX0ZSTVModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDgpCisJdTgJdW51c2VkMDFhMDBbMHgwMWEwMC0weDAxOTcwXTsKKworLyoweDAxYTAwKi8JdTY0CXJ4bWFjX3JlZF9yYXRlX3ZwWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9WUF9DUkFURV9USFIwKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9WUF9DUkFURV9USFIxKHZhbCkgdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9WUF9DUkFURV9USFIyKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9WUF9DUkFURV9USFIzKHZhbCkgdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfVlBfRlJBVEVfVEhSMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1ZQX0ZSQVRFX1RIUjEodmFsKSB2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9WUF9GUkFURV9USFIyKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfVlBfRlJBVEVfVEhSMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI4LCA0KQorCXU4CXVudXNlZDAxZTAwWzB4MDFlMDAtMHgwMWE4OF07CisKKy8qMHgwMWUwMCovCXU2NAl4Z21hY19pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX0lOVF9TVEFUVVNfWE1BQ19HRU5fRVJSX1hNQUNfR0VOX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19JTlRfU1RBVFVTX1hNQUNfTElOS19FUlJfUE9SVDBfWE1BQ19MSU5LX0lOVF9QT1JUMCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX0lOVF9TVEFUVVNfWE1BQ19MSU5LX0VSUl9QT1JUMV9YTUFDX0xJTktfSU5UX1BPUlQxIFwKKwkJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX0lOVF9TVEFUVVNfWEdYU19HRU5fRVJSX1hHWFNfR0VOX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfSU5UX1NUQVRVU19BU0lDX05UV0tfRVJSX0FTSUNfTlRXS19JTlQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX0lOVF9TVEFUVVNfQVNJQ19HUElPX0VSUl9BU0lDX0dQSU9fSU5UCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMWUwOCovCXU2NAl4Z21hY19pbnRfbWFzazsKKy8qMHgwMWUxMCovCXU2NAl4bWFjX2dlbl9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfTEFHQ19MQUdfUE9SVDBfQUNUT1JfQ0hVUk5fREVURUNURUQgXAorCQkJCQkJCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX0xBR0NfTEFHX1BPUlQwX1BBUlRORVJfQ0hVUk5fREVURUNURUQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19MQUdDX0xBR19QT1JUMF9SRUNFSVZFRF9MQUNQRFUJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfTEFHQ19MQUdfUE9SVDFfQUNUT1JfQ0hVUk5fREVURUNURUQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19MQUdDX0xBR19QT1JUMV9QQVJUTkVSX0NIVVJOX0RFVEVDVEVEIFwKKwkJCQkJCQkJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfTEFHQ19MQUdfUE9SVDFfUkVDRUlWRURfTEFDUERVCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hMQ01fTEFHX0ZBSUxPVkVSX0RFVEVDVEVECXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEUwX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MCwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEUwX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MiwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEUxX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0NCwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEUxX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0NiwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEUyX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0OCwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEUyX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MCwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEUzX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MiwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEUzX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NCwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEU0X1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NiwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hTVEFUU19STUFDX1NUQVRTX1RJTEU0X0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OCwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX1hNQUNKX1hNQUNfRlNNX0VSUgl2eGdlX21CSVQoNjMpCisvKjB4MDFlMTgqLwl1NjQJeG1hY19nZW5fZXJyX21hc2s7CisvKjB4MDFlMjAqLwl1NjQJeG1hY19nZW5fZXJyX2FsYXJtOworLyoweDAxZTI4Ki8JdTY0CXhtYWNfbGlua19lcnJfcG9ydF9yZWdbMl07CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9QT1JUX0RPV04JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9QT1JUX1VQCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfUE9SVF9XRU5UX0RPV04JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfUE9SVF9XRU5UX1VQCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfUkVBRkZJUk1FRF9GQVVMVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfUkVBRkZJUk1FRF9PSwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9MSU5LX0RPV04JdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfTElOS19VUAl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19SQVRFTUdNVF9SQVRFX0NIQU5HRQl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19SQVRFTUdNVF9MQVNJX0lOVgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTURJT19NRElPX01HUl9BQ0NFU1NfQ09NUExFVEUgXAorCQkJCQkJCQl2eGdlX21CSVQoNDcpCisvKjB4MDFlMzAqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0X21hc2tbMl07CisvKjB4MDFlMzgqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0X2FsYXJtWzJdOworLyoweDAxZTU4Ki8JdTY0CXhneHNfZ2VuX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfWEdYU19HRU5fRVJSX1JFR19YR1hTX1hHWFNfRlNNX0VSUgl2eGdlX21CSVQoNjMpCisvKjB4MDFlNjAqLwl1NjQJeGd4c19nZW5fZXJyX21hc2s7CisvKjB4MDFlNjgqLwl1NjQJeGd4c19nZW5fZXJyX2FsYXJtOworLyoweDAxZTcwKi8JdTY0CWFzaWNfbnR3a19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19FUlJfUkVHX1hNQUNKX05UV0tfRE9XTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfRVJSX1JFR19YTUFDSl9OVFdLX1VQCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19FUlJfUkVHX1hNQUNKX05UV0tfV0VOVF9ET1dOCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfRVJSX1JFR19YTUFDSl9OVFdLX1dFTlRfVVAJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19FUlJfUkVHX1hNQUNKX05UV0tfUkVBRkZJUk1FRF9GQVVMVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0VSUl9SRUdfWE1BQ0pfTlRXS19SRUFGRklSTUVEX09LCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMWU3OCovCXU2NAlhc2ljX250d2tfZXJyX21hc2s7CisvKjB4MDFlODAqLwl1NjQJYXNpY19udHdrX2Vycl9hbGFybTsKKy8qMHgwMWU4OCovCXU2NAlhc2ljX2dwaW9fZXJyX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19BU0lDX0dQSU9fRVJSX1JFR19YTUFDSl9HUElPX0lOVChuKQl2eGdlX21CSVQobikKKy8qMHgwMWU5MCovCXU2NAlhc2ljX2dwaW9fZXJyX21hc2s7CisvKjB4MDFlOTgqLwl1NjQJYXNpY19ncGlvX2Vycl9hbGFybTsKKy8qMHgwMWVhMCovCXU2NAl4Z21hY19nZW5fc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX0dFTl9TVEFUVVNfWE1BQ0pfTlRXS19PSwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19HRU5fU1RBVFVTX1hNQUNKX05UV0tfREFUQV9SQVRFCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwMWVhOCovCXU2NAl4Z21hY19nZW5fZndfbWVtb19zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfR0VOX0ZXX01FTU9fU1RBVFVTX1hNQUNKX0VWRU5UU19QRU5ESU5HKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxZWIwKi8JdTY0CXhnbWFjX2dlbl9md19tZW1vX21hc2s7CisjZGVmaW5lIFZYR0VfSFdfWEdNQUNfR0VOX0ZXX01FTU9fTUFTS19NQVNLKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDFlYjgqLwl1NjQJeGdtYWNfZ2VuX2Z3X3ZwYXRoX3RvX3ZzcG9ydF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfR0VOX0ZXX1ZQQVRIX1RPX1ZTUE9SVF9TVEFUVVNfWE1BQ0pfRVZFTlRTX1BFTkRJTkcodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMWVjMCovCXU2NAl4Z21hY19tYWluX2NmZ19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX01BSU5fQ0ZHX1BPUlRfUE9SVF9FTgl2eGdlX21CSVQoMykKKwl1OAl1bnVzZWQwMWY0MFsweDAxZjQwLTB4MDFlZDBdOworCisvKjB4MDFmNDAqLwl1NjQJeG1hY19nZW5fY2ZnOworI2RlZmluZSBWWEdFX0hXX1hNQUNfR0VOX0NGR19SQVRFTUdNVF9NQUNfUkFURV9TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCAyLCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0NGR19UWF9IRUFEX0RST1BfV0hFTl9GQVVMVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9DRkdfRkFVTFRfQkVIQVZJT1VSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUgVlhHRV9IV19YTUFDX0dFTl9DRkdfUEVSSU9EX05UV0tfVVAodmFsKSB2eGdlX3ZCSVQodmFsLCAyOCwgNCkKKyNkZWZpbmUgVlhHRV9IV19YTUFDX0dFTl9DRkdfUEVSSU9EX05UV0tfRE9XTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA0KQorLyoweDAxZjQ4Ki8JdTY0CXhtYWNfdGltZXN0YW1wOworI2RlZmluZQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX1hNQUNfVElNRVNUQU1QX1VTRV9MSU5LX0lEKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9JTlRFUlZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX1RJTUVSX1JFU1RBUlQJdnhnZV9tQklUKDE5KQorI2RlZmluZSBWWEdFX0hXX1hNQUNfVElNRVNUQU1QX1hNQUNKX1JPTExPVkVSX0NOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKy8qMHgwMWY1MCovCXU2NAl4bWFjX3N0YXRzX2dlbl9jZmc7CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19HRU5fQ0ZHX1BSVEFHR1JfQ1VNX1RJTUVSKHZhbCkgdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX0dFTl9DRkdfVlBBVEhfQ1VNX1RJTUVSKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgNCkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1NUQVRTX0dFTl9DRkdfVkxBTl9IQU5ETElORwl2eGdlX21CSVQoMTUpCisvKjB4MDFmNTgqLwl1NjQJeG1hY19zdGF0c19zeXNfY21kOworI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9PUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX1NUUk9CRQl2eGdlX21CSVQoMTUpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX0xPQ19TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfT0ZGU0VUX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorLyoweDAxZjYwKi8JdTY0CXhtYWNfc3RhdHNfc3lzX2RhdGE7CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19TWVNfREFUQV9YU01HUl9EQVRBKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisJdTgJdW51c2VkMDFmODBbMHgwMWY4MC0weDAxZjY4XTsKKworLyoweDAxZjgwKi8JdTY0CWFzaWNfbnR3a19jdHJsOworI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19DVFJMX1JFUV9URVNUX05UV0sJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0NUUkxfUE9SVDBfUkVRX1RFU1RfUE9SVAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0NUUkxfUE9SVDFfUkVRX1RFU1RfUE9SVAl2eGdlX21CSVQoMTUpCisvKjB4MDFmODgqLwl1NjQJYXNpY19udHdrX2NmZ19zaG93X3BvcnRfaW5mbzsKKyNkZWZpbmUgVlhHRV9IV19BU0lDX05UV0tfQ0ZHX1NIT1dfUE9SVF9JTkZPX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAxZjkwKi8JdTY0CWFzaWNfbnR3a19jZmdfcG9ydF9udW07CisjZGVmaW5lIFZYR0VfSFdfQVNJQ19OVFdLX0NGR19QT1JUX05VTV9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMWY5OCovCXU2NAl4bWFjX2NmZ19wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1hNQUNfQ0ZHX1BPUlRfWEdNSUlfTE9PUEJBQ0sJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19DRkdfUE9SVF9YR01JSV9SRVZFUlNFX0xPT1BCQUNLCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfQ0ZHX1BPUlRfWEdNSUlfVFhfQkVIQVYJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfQ0ZHX1BPUlRfWEdNSUlfUlhfQkVIQVYJdnhnZV9tQklUKDE1KQorLyoweDAxZmIwKi8JdTY0CXhtYWNfc3RhdGlvbl9hZGRyX3BvcnRbMl07CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUSU9OX0FERFJfUE9SVF9NQUNfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorCXU4CXVudXNlZDAyMDIwWzB4MDIwMjAtMHgwMWZjMF07CisKKy8qMHgwMjAyMCovCXU2NAlsYWdfY2ZnOworI2RlZmluZQlWWEdFX0hXX0xBR19DRkdfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfTEFHX0NGR19NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUJVlhHRV9IV19MQUdfQ0ZHX1RYX0RJU0NBUkRfQkVIQVYJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19DRkdfUlhfRElTQ0FSRF9CRUhBVgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0NGR19QUkVGX0lORElWX1BPUlRfTlVNCXZ4Z2VfbUJJVCgxOSkKKy8qMHgwMjAyOCovCXU2NAlsYWdfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0xBR19TVEFUVVNfWExDTV9XQUlUSU5HX1RPX0ZBSUxCQUNLCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX0xBR19TVEFUVVNfWExDTV9USU1FUl9WQUxfQ09MRF9GQUlMT1ZFUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA4LCA4KQorLyoweDAyMDMwKi8JdTY0CWxhZ19hY3RpdmVfcGFzc2l2ZV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfTEFHX0FDVElWRV9QQVNTSVZFX0NGR19IT1RfU1RBTkRCWQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUNUSVZFX1BBU1NJVkVfQ0ZHX0xBQ1BfREVDSURFUwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUNUSVZFX1BBU1NJVkVfQ0ZHX1BSRUZfQUNUSVZFX1BPUlRfTlVNCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUNUSVZFX1BBU1NJVkVfQ0ZHX0FVVE9fRkFJTEJBQ0sJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0xBR19BQ1RJVkVfUEFTU0lWRV9DRkdfRkFJTEJBQ0tfRU4JdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0xBR19BQ1RJVkVfUEFTU0lWRV9DRkdfQ09MRF9GQUlMT1ZFUl9USU1FT1VUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKwl1OAl1bnVzZWQwMjA0MFsweDAyMDQwLTB4MDIwMzhdOworCisvKjB4MDIwNDAqLwl1NjQJbGFnX2xhY3BfY2ZnOworI2RlZmluZQlWWEdFX0hXX0xBR19MQUNQX0NGR19FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfTEFDUF9DRkdfTEFDUF9CRUdJTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfTEFDUF9DRkdfRElTQ0FSRF9MQUNQCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfTEFDUF9DRkdfTElCRVJBTF9MRU5fQ0hLCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMjA0OCovCXU2NAlsYWdfdGltZXJfY2ZnXzE7CisjZGVmaW5lIFZYR0VfSFdfTEFHX1RJTUVSX0NGR18xX0ZBU1RfUEVSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1RJTUVSX0NGR18xX1NMT1dfUEVSKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19USU1FUl9DRkdfMV9TSE9SVF9USU1FT1VUKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19USU1FUl9DRkdfMV9MT05HX1RJTUVPVVQodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDIwNTAqLwl1NjQJbGFnX3RpbWVyX2NmZ18yOworI2RlZmluZSBWWEdFX0hXX0xBR19USU1FUl9DRkdfMl9DSFVSTl9ERVQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfVElNRVJfQ0ZHXzJfQUdHUl9XQUlUKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19USU1FUl9DRkdfMl9TSE9SVF9USU1FUl9TQ0FMRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfVElNRVJfQ0ZHXzJfTE9OR19USU1FUl9TQ0FMRSh2YWwpICB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDIwNTgqLwl1NjQJbGFnX3N5c19pZDsKKyNkZWZpbmUgVlhHRV9IV19MQUdfU1lTX0lEX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfU1lTX0lEX1VTRV9QT1JUX0FERFIJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX0xBR19TWVNfSURfQUREUl9TRUwJdnhnZV9tQklUKDU1KQorLyoweDAyMDYwKi8JdTY0CWxhZ19zeXNfY2ZnOworI2RlZmluZSBWWEdFX0hXX0xBR19TWVNfQ0ZHX1NZU19QUkkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKwl1OAl1bnVzZWQwMjA3MFsweDAyMDcwLTB4MDIwNjhdOworCisvKjB4MDIwNzAqLwl1NjQJbGFnX2FnZ3JfYWRkcl9jZmdbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX0FHR1JfQUREUl9DRkdfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorI2RlZmluZQlWWEdFX0hXX0xBR19BR0dSX0FERFJfQ0ZHX1VTRV9QT1JUX0FERFIJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX0xBR19BR0dSX0FERFJfQ0ZHX0FERFJfU0VMCXZ4Z2VfbUJJVCg1NSkKKy8qMHgwMjA4MCovCXU2NAlsYWdfYWdncl9pZF9jZmdbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX0FHR1JfSURfQ0ZHX0lEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisvKjB4MDIwOTAqLwl1NjQJbGFnX2FnZ3JfYWRtaW5fa2V5WzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19BR0dSX0FETUlOX0tFWV9LRVkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKy8qMHgwMjBhMCovCXU2NAlsYWdfYWdncl9hbHRfYWRtaW5fa2V5OworI2RlZmluZSBWWEdFX0hXX0xBR19BR0dSX0FMVF9BRE1JTl9LRVlfS0VZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FHR1JfQUxUX0FETUlOX0tFWV9BTFRfQUdHUgl2eGdlX21CSVQoMTkpCisvKjB4MDIwYTgqLwl1NjQJbGFnX2FnZ3Jfb3Blcl9rZXlbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX0FHR1JfT1BFUl9LRVlfTEFHQ19LRVkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKy8qMHgwMjBiOCovCXU2NAlsYWdfYWdncl9wYXJ0bmVyX3N5c19pZFsyXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfQUdHUl9QQVJUTkVSX1NZU19JRF9MQUdDX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKy8qMHgwMjBjOCovCXU2NAlsYWdfYWdncl9wYXJ0bmVyX2luZm9bMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX0FHR1JfUEFSVE5FUl9JTkZPX0xBR0NfU1lTX1BSSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19BR0dSX1BBUlRORVJfSU5GT19MQUdDX09QRVJfS0VZKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorLyoweDAyMGQ4Ki8JdTY0CWxhZ19hZ2dyX3N0YXRlWzJdOworI2RlZmluZQlWWEdFX0hXX0xBR19BR0dSX1NUQVRFX0xBR0NfVFgJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FHR1JfU1RBVEVfTEFHQ19SWAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUdHUl9TVEFURV9MQUdDX1JFQURZCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUdHUl9TVEFURV9MQUdDX0lORElWSURVQUwJdnhnZV9tQklUKDE1KQorCXU4CXVudXNlZDAyMGYwWzB4MDIwZjAtMHgwMjBlOF07CisKKy8qMHgwMjBmMCovCXU2NAlsYWdfcG9ydF9jZmdbMl07CisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQ0ZHX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0NGR19ESVNDQVJEX1NMT1dfUFJPVE8JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQ0ZHX0hPU1RfQ0hPU0VOX0FHR1IJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0NGR19ESVNDQVJEX1VOS05PV05fU0xPV19QUk9UTwl2eGdlX21CSVQoMTUpCisvKjB4MDIxMDAqLwl1NjQJbGFnX3BvcnRfYWN0b3JfYWRtaW5fY2ZnWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX0NGR19QT1JUX05VTSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX0NGR19QT1JUX1BSSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9DRkdfS0VZXzEwRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9DRkdfS0VZXzFHKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAyMTEwKi8JdTY0CWxhZ19wb3J0X2FjdG9yX2FkbWluX3N0YXRlWzJdOworI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX1NUQVRFX0xBQ1BfQUNUSVZJVFkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fU1RBVEVfTEFDUF9USU1FT1VUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX1NUQVRFX0FHR1JFR0FUSU9OCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9TVEFURV9TWU5DSFJPTklaQVRJT04JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX1NUQVRFX0NPTExFQ1RJTkcJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX1NUQVRFX0RJU1RSSUJVVElORwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fU1RBVEVfREVGQVVMVEVECXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9TVEFURV9FWFBJUkVECXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMjEyMCovCXU2NAlsYWdfcG9ydF9wYXJ0bmVyX2FkbWluX3N5c19pZFsyXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NZU19JRF9BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNDgpCisvKjB4MDIxMzAqLwl1NjQJbGFnX3BvcnRfcGFydG5lcl9hZG1pbl9jZmdbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9DRkdfU1lTX1BSSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fQ0ZHX0tFWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX0NGR19QT1JUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9DRkdfUE9SVF9QUkkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAyMTQwKi8JdTY0CWxhZ19wb3J0X3BhcnRuZXJfYWRtaW5fc3RhdGVbMl07CisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TVEFURV9MQUNQX0FDVElWSVRZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1RBVEVfTEFDUF9USU1FT1VUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1RBVEVfQUdHUkVHQVRJT04JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1RBVEVfU1lOQ0hST05JWkFUSU9OCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NUQVRFX0NPTExFQ1RJTkcJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1RBVEVfRElTVFJJQlVUSU5HCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NUQVRFX0RFRkFVTFRFRAl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TVEFURV9FWFBJUkVECXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMjE1MCovCXU2NAlsYWdfcG9ydF90b19hZ2dyWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1RPX0FHR1JfTEFHQ19BR0dSX0lEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfVE9fQUdHUl9MQUdDX0FHR1JfVkxEX0lECXZ4Z2VfbUJJVCgxOSkKKy8qMHgwMjE2MCovCXU2NAlsYWdfcG9ydF9hY3Rvcl9vcGVyX2tleVsyXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX0tFWV9MQUdDX0tFWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorLyoweDAyMTcwKi8JdTY0CWxhZ19wb3J0X2FjdG9yX29wZXJfc3RhdGVbMl07CisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9TVEFURV9MQUdDX0xBQ1BfQUNUSVZJVFkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9TVEFURV9MQUdDX0xBQ1BfVElNRU9VVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX1NUQVRFX0xBR0NfQUdHUkVHQVRJT04JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfU1RBVEVfTEFHQ19TWU5DSFJPTklaQVRJT04JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfU1RBVEVfTEFHQ19DT0xMRUNUSU5HCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX1NUQVRFX0xBR0NfRElTVFJJQlVUSU5HCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX1NUQVRFX0xBR0NfREVGQVVMVEVECXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX1NUQVRFX0xBR0NfRVhQSVJFRAl2eGdlX21CSVQoMzEpCisvKjB4MDIxODAqLwl1NjQJbGFnX3BvcnRfcGFydG5lcl9vcGVyX3N5c19pZFsyXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1lTX0lEX0xBR0NfQUREUih2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorLyoweDAyMTkwKi8JdTY0CWxhZ19wb3J0X3BhcnRuZXJfb3Blcl9pbmZvWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9JTkZPX0xBR0NfU1lTX1BSSSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9JTkZPX0xBR0NfS0VZKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9JTkZPX0xBR0NfUE9SVF9OVU0odmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX0lORk9fTEFHQ19QT1JUX1BSSSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMjFhMCovCXU2NAlsYWdfcG9ydF9wYXJ0bmVyX29wZXJfc3RhdGVbMl07CisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NUQVRFX0xBR0NfTEFDUF9BQ1RJVklUWQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1RBVEVfTEFHQ19MQUNQX1RJTUVPVVQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NUQVRFX0xBR0NfQUdHUkVHQVRJT04JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TVEFURV9MQUdDX1NZTkNIUk9OSVpBVElPTiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1RBVEVfTEFHQ19DT0xMRUNUSU5HCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1RBVEVfTEFHQ19ESVNUUklCVVRJTkcJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TVEFURV9MQUdDX0RFRkFVTFRFRAl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NUQVRFX0xBR0NfRVhQSVJFRAl2eGdlX21CSVQoMzEpCisvKjB4MDIxYjAqLwl1NjQJbGFnX3BvcnRfc3RhdGVfdmFyc1syXTsKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUkVBRFkJdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1NFTEVDVEVEKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfQUdHUl9OVU0JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19QT1JUX01PVkVECXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUE9SVF9FTkFCTEVECXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUE9SVF9ESVNBQkxFRAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX05UVAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX0FDVE9SX0NIVVJOCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUEFSVE5FUl9DSFVSTgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX0FDVE9SX0lORk9fTEVOX01JU01BVENIIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19QQVJUTkVSX0lORk9fTEVOX01JU01BVENIIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19DT0xMX0lORk9fTEVOX01JU01BVENICXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfVEVSTV9JTkZPX0xFTl9NSVNNQVRDSAl2eGdlX21CSVQoMzUpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1JYX0ZTTV9TVEFURSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM3LCAzKQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19NVVhfRlNNX1NUQVRFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQxLCAzKQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19NVVhfUkVBU09OKHZhbCkgdnhnZV92QklUKHZhbCwgNDQsIDQpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX0FDVE9SX0NIVVJOX1NUQVRFCXZ4Z2VfbUJJVCg1NCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUEFSVE5FUl9DSFVSTl9TVEFURQl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX0FDVE9SX0NIVVJOX0NPVU5UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU2LCA0KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19QQVJUTkVSX0NIVVJOX0NPVU5UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDYwLCA0KQorLyoweDAyMWMwKi8JdTY0CWxhZ19wb3J0X3RpbWVyX2NudHJbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfVElNRVJfQ05UUl9MQUdDX0NVUlJFTlRfV0hJTEUodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1RJTUVSX0NOVFJfTEFHQ19QRVJJT0RJQ19XSElMRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1RJTUVSX0NOVFJfTEFHQ19XQUlUX1dISUxFKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDgpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfVElNRVJfQ05UUl9MQUdDX1RYX0xBQ1AodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9USU1FUl9DTlRSX0xBR0NfQUNUT1JfU1lOQ19UUkFOU0lUSU9OX0NPVU5UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1RJTUVSX0NOVFJfTEFHQ19QQVJUTkVSX1NZTkNfVFJBTlNJVElPTl9DT1VOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MCwgOCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9USU1FUl9DTlRSX0xBR0NfQUNUT1JfQ0hBTkdFX0NPVU5UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCA4KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1RJTUVSX0NOVFJfTEFHQ19QQVJUTkVSX0NIQU5HRV9DT1VOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NiwgOCkKKwl1OAl1bnVzZWQwMjIwOFsweDAyNzAwLTB4MDIxZDBdOworCisvKjB4MDI3MDAqLwl1NjQJcnRkbWFfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9JTlRfU1RBVFVTX1BEQV9BTEFSTV9QREFfSU5UCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1JURE1BX0lOVF9TVEFUVVNfUENDX0VSUk9SX1BDQ19JTlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfSU5UX1NUQVRVU19MU09fRVJST1JfTFNPX0lOVAl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9JTlRfU1RBVFVTX1NNX0VSUk9SX1NNX0lOVAl2eGdlX21CSVQoNSkKKy8qMHgwMjcwOCovCXU2NAlydGRtYV9pbnRfbWFzazsKKy8qMHgwMjcxMCovCXU2NAlwZGFfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1BEQV9BTEFSTV9SRUdfUERBX0hTQ19GSUZPX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19QREFfQUxBUk1fUkVHX1BEQV9TTV9FUlIJdnhnZV9tQklUKDEpCisvKjB4MDI3MTgqLwl1NjQJcGRhX2FsYXJtX21hc2s7CisvKjB4MDI3MjAqLwl1NjQJcGRhX2FsYXJtX2FsYXJtOworLyoweDAyNzI4Ki8JdTY0CXBjY19lcnJvcl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfUENDX0VSUk9SX1JFR19QQ0NfUENDX0ZSTV9CVUZfU0JFKG4pCXZ4Z2VfbUJJVChuKQorI2RlZmluZSBWWEdFX0hXX1BDQ19FUlJPUl9SRUdfUENDX1BDQ19UWERPX1NCRShuKQl2eGdlX21CSVQobikKKyNkZWZpbmUgVlhHRV9IV19QQ0NfRVJST1JfUkVHX1BDQ19QQ0NfRlJNX0JVRl9EQkUobikJdnhnZV9tQklUKG4pCisjZGVmaW5lIFZYR0VfSFdfUENDX0VSUk9SX1JFR19QQ0NfUENDX1RYRE9fREJFKG4pCXZ4Z2VfbUJJVChuKQorI2RlZmluZSBWWEdFX0hXX1BDQ19FUlJPUl9SRUdfUENDX1BDQ19GU01fRVJSX0FMQVJNKG4pCXZ4Z2VfbUJJVChuKQorI2RlZmluZSBWWEdFX0hXX1BDQ19FUlJPUl9SRUdfUENDX1BDQ19TRVJSKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAyNzMwKi8JdTY0CXBjY19lcnJvcl9tYXNrOworLyoweDAyNzM4Ki8JdTY0CXBjY19lcnJvcl9hbGFybTsKKy8qMHgwMjc0MCovCXU2NAlsc29fZXJyb3JfcmVnOworI2RlZmluZSBWWEdFX0hXX0xTT19FUlJPUl9SRUdfUENDX0xTT19BQk9SVChuKQl2eGdlX21CSVQobikKKyNkZWZpbmUgVlhHRV9IV19MU09fRVJST1JfUkVHX1BDQ19MU09fRlNNX0VSUl9BTEFSTShuKQl2eGdlX21CSVQobikKKy8qMHgwMjc0OCovCXU2NAlsc29fZXJyb3JfbWFzazsKKy8qMHgwMjc1MCovCXU2NAlsc29fZXJyb3JfYWxhcm07CisvKjB4MDI3NTgqLwl1NjQJc21fZXJyb3JfcmVnOworI2RlZmluZQlWWEdFX0hXX1NNX0VSUk9SX1JFR19TTV9GU01fRVJSX0FMQVJNCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMjc2MCovCXU2NAlzbV9lcnJvcl9tYXNrOworLyoweDAyNzY4Ki8JdTY0CXNtX2Vycm9yX2FsYXJtOworCisJdTgJdW51c2VkMDI3YThbMHgwMjdhOC0weDAyNzcwXTsKKworLyoweDAyN2E4Ki8JdTY0CXR4ZF9vd25lcnNoaXBfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19UWERfT1dORVJTSElQX0NUUkxfS0VFUF9PV05FUlNISVAJdnhnZV9tQklUKDcpCisvKjB4MDI3YjAqLwl1NjQJcGNjX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19QQ0NfQ0ZHX1BDQ19FTkFCTEUobikJdnhnZV9tQklUKG4pCisjZGVmaW5lIFZYR0VfSFdfUENDX0NGR19QQ0NfRUNDX0VOQUJMRV9OKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAyN2I4Ki8JdTY0CXBjY19jb250cm9sOworI2RlZmluZSBWWEdFX0hXX1BDQ19DT05UUk9MX0ZFX0VOQUJMRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lCVZYR0VfSFdfUENDX0NPTlRST0xfRUFSTFlfQVNTSUdOX0VOCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19QQ0NfQ09OVFJPTF9VTkJMT0NLX0RCX0VSUgl2eGdlX21CSVQoMzEpCisvKjB4MDI3YzAqLwl1NjQJcGRhX3N0YXR1czE7CisjZGVmaW5lIFZYR0VfSFdfUERBX1NUQVRVUzFfUERBX1dSQVBfMF9DVFIodmFsKSB2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZSBWWEdFX0hXX1BEQV9TVEFUVVMxX1BEQV9XUkFQXzFfQ1RSKHZhbCkgdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfUERBX1NUQVRVUzFfUERBX1dSQVBfMl9DVFIodmFsKSB2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19QREFfU1RBVFVTMV9QREFfV1JBUF8zX0NUUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI4LCA0KQorI2RlZmluZSBWWEdFX0hXX1BEQV9TVEFUVVMxX1BEQV9XUkFQXzRfQ1RSKHZhbCkgdnhnZV92QklUKHZhbCwgMzYsIDQpCisjZGVmaW5lIFZYR0VfSFdfUERBX1NUQVRVUzFfUERBX1dSQVBfNV9DVFIodmFsKSB2eGdlX3ZCSVQodmFsLCA0NCwgNCkKKyNkZWZpbmUgVlhHRV9IV19QREFfU1RBVFVTMV9QREFfV1JBUF82X0NUUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUyLCA0KQorI2RlZmluZSBWWEdFX0hXX1BEQV9TVEFUVVMxX1BEQV9XUkFQXzdfQ1RSKHZhbCkgdnhnZV92QklUKHZhbCwgNjAsIDQpCisvKjB4MDI3YzgqLwl1NjQJcnRkbWFfYndfdGltZXI7CisjZGVmaW5lIFZYR0VfSFdfUlRETUFfQldfVElNRVJfVElNRVJfQ1RSTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorCisJdTgJdW51c2VkMDI5MDBbMHgwMjkwMC0weDAyN2QwXTsKKy8qMHgwMjkwMCovCXU2NAlnM2NtY3RfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19HM0NNQ1RfSU5UX1NUQVRVU19FUlJfRzNJRl9JTlQJdnhnZV9tQklUKDApCisvKjB4MDI5MDgqLwl1NjQJZzNjbWN0X2ludF9tYXNrOworLyoweDAyOTEwKi8JdTY0CWczY21jdF9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0czQ01DVF9FUlJfUkVHX0czSUZfU01fRVJSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX0czQ01DVF9FUlJfUkVHX0czSUZfR0REUjNfREVDQwl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19HM0NNQ1RfRVJSX1JFR19HM0lGX0dERFIzX1VfREVDQwl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19HM0NNQ1RfRVJSX1JFR19HM0lGX0NUUkxfRklGT19ERUNDCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0czQ01DVF9FUlJfUkVHX0czSUZfR0REUjNfU0VDQwl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfRzNDTUNUX0VSUl9SRUdfRzNJRl9HRERSM19VX1NFQ0MJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX0czQ01DVF9FUlJfUkVHX0czSUZfQ1RSTF9GSUZPX1NFQ0MJdnhnZV9tQklUKDMxKQorLyoweDAyOTE4Ki8JdTY0CWczY21jdF9lcnJfbWFzazsKKy8qMHgwMjkyMCovCXU2NAlnM2NtY3RfZXJyX2FsYXJtOworCXU4CXVudXNlZDAzMDAwWzB4MDMwMDAtMHgwMjkyOF07CisKKy8qMHgwMzAwMCovCXU2NAltY19pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX01DX0lOVF9TVEFUVVNfTUNfRVJSX01DX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NQ19JTlRfU1RBVFVTX0dST0NSQ19BTEFSTV9ST0NSQ19JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTUNfSU5UX1NUQVRVU19GQVVfR0VOX0VSUl9GQVVfR0VOX0lOVAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTUNfSU5UX1NUQVRVU19GQVVfRUNDX0VSUl9GQVVfRUNDX0lOVAl2eGdlX21CSVQoMTUpCisvKjB4MDMwMDgqLwl1NjQJbWNfaW50X21hc2s7CisvKjB4MDMwMTAqLwl1NjQJbWNfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX1hGTURfTUVNX0VDQ19TR19FUlJfQQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX1hGTURfTUVNX0VDQ19TR19FUlJfQgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX0czSUZfUkRfRklGT19FQ0NfU0dfRVJSCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfTUlSSV9FQ0NfU0dfRVJSXzAJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19NSVJJX0VDQ19TR19FUlJfMQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX1hGTURfTUVNX0VDQ19EQl9FUlJfQQl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19YRk1EX01FTV9FQ0NfREJfRVJSX0IJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfRzNJRl9SRF9GSUZPX0VDQ19EQl9FUlIJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfTUlSSV9FQ0NfREJfRVJSXzAJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfTUlSSV9FQ0NfREJfRVJSXzEJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfU01fRVJSCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMzAxOCovCXU2NAltY19lcnJfbWFzazsKKy8qMHgwMzAyMCovCXU2NAltY19lcnJfYWxhcm07CisvKjB4MDMwMjgqLwl1NjQJZ3JvY3JjX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HUk9DUkNfQUxBUk1fUkVHX1hGTURfV1JfRklGT19FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfR1JPQ1JDX0FMQVJNX1JFR19XREUyTVNSX1JEX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg3KQorLyoweDAzMDMwKi8JdTY0CWdyb2NyY19hbGFybV9tYXNrOworLyoweDAzMDM4Ki8JdTY0CWdyb2NyY19hbGFybV9hbGFybTsKKwl1OAl1bnVzZWQwMzEwMFsweDAzMTAwLTB4MDMwNDBdOworCisvKjB4MDMxMDAqLwl1NjQJcnhfdGhyZXNoX2NmZ19yZXBsOworI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfUkVQTF9QQVVTRV9MT1dfVEhSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1JFUExfUEFVU0VfSElHSF9USFIodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfUkVQTF9SRURfVEhSXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1JFUExfUkVEX1RIUl8xKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19SRVBMX1JFRF9USFJfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfUkVQTF9SRURfVEhSXzModmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1JFUExfR0xPQkFMX1dPTF9FTgl2eGdlX21CSVQoNjIpCisjZGVmaW5lCVZYR0VfSFdfUlhfVEhSRVNIX0NGR19SRVBMX0VYQUNUX1ZQX01BVENIX1JFUQl2eGdlX21CSVQoNjMpCisJdTgJdW51c2VkMDMzYjhbMHgwMzNiOC0weDAzMTA4XTsKKworLyoweDAzM2I4Ki8JdTY0CWZibWNfZWNjX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19GQk1DX0VDQ19DRkdfRU5BQkxFKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKwl1OAl1bnVzZWQwMzQwMFsweDAzNDAwLTB4MDMzYzBdOworCisvKjB4MDM0MDAqLwl1NjQJcGNpcGlmX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfUENJUElGX0lOVF9TVEFUVVNfREJFQ0NfRVJSX0RCRUNDX0VSUl9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUENJUElGX0lOVF9TVEFUVVNfU0JFQ0NfRVJSX1NCRUNDX0VSUl9JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUENJUElGX0lOVF9TVEFUVVNfR0VORVJBTF9FUlJfR0VORVJBTF9FUlJfSU5UCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19QQ0lQSUZfSU5UX1NUQVRVU19TUlBDSU1fTVNHX1NSUENJTV9NU0dfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19QQ0lQSUZfSU5UX1NUQVRVU19NUlBDSU1fU1BBUkVfUjFfTVJQQ0lNX1NQQVJFX1IxX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxOSkKKy8qMHgwMzQwOCovCXU2NAlwY2lwaWZfaW50X21hc2s7CisvKjB4MDM0MTAqLwl1NjQJZGJlY2NfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19EQkVDQ19FUlJfUkVHX1BDSV9SRVRSWV9CVUZfREJfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0RCRUNDX0VSUl9SRUdfUENJX1JFVFJZX1NPVF9EQl9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfREJFQ0NfRVJSX1JFR19QQ0lfUF9IRFJfREJfRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19EQkVDQ19FUlJfUkVHX1BDSV9QX0RBVEFfREJfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19EQkVDQ19FUlJfUkVHX1BDSV9OUF9IRFJfREJfRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19EQkVDQ19FUlJfUkVHX1BDSV9OUF9EQVRBX0RCX0VSUgl2eGdlX21CSVQoMjMpCisvKjB4MDM0MTgqLwl1NjQJZGJlY2NfZXJyX21hc2s7CisvKjB4MDM0MjAqLwl1NjQJZGJlY2NfZXJyX2FsYXJtOworLyoweDAzNDI4Ki8JdTY0CXNiZWNjX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfU0JFQ0NfRVJSX1JFR19QQ0lfUkVUUllfQlVGX1NHX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19TQkVDQ19FUlJfUkVHX1BDSV9SRVRSWV9TT1RfU0dfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1NCRUNDX0VSUl9SRUdfUENJX1BfSERSX1NHX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfU0JFQ0NfRVJSX1JFR19QQ0lfUF9EQVRBX1NHX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfU0JFQ0NfRVJSX1JFR19QQ0lfTlBfSERSX1NHX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfU0JFQ0NfRVJSX1JFR19QQ0lfTlBfREFUQV9TR19FUlIJdnhnZV9tQklUKDIzKQorLyoweDAzNDMwKi8JdTY0CXNiZWNjX2Vycl9tYXNrOworLyoweDAzNDM4Ki8JdTY0CXNiZWNjX2Vycl9hbGFybTsKKy8qMHgwMzQ0MCovCXU2NAlnZW5lcmFsX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJfUkVHX1BDSV9EUk9QUEVEX0lMTEVHQUxfQ0ZHCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJSX1JFR19QQ0lfSUxMRUdBTF9NRU1fTUFQX1BST0cJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJfUkVHX1BDSV9MSU5LX1JTVF9GU01fRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUl9SRUdfUENJX1JYX0lMTEVHQUxfVExQX1ZQTEFORQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJfUkVHX1BDSV9UUkFJTklOR19SRVNFVF9ERVQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJSX1JFR19QQ0lfUENJX0xJTktfRE9XTl9ERVQJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJSX1JFR19QQ0lfUkVTRVRfQUNLX0RMTFAJdnhnZV9tQklUKDI3KQorLyoweDAzNDQ4Ki8JdTY0CWdlbmVyYWxfZXJyX21hc2s7CisvKjB4MDM0NTAqLwl1NjQJZ2VuZXJhbF9lcnJfYWxhcm07CisvKjB4MDM0NTgqLwl1NjQJc3JwY2ltX21zZ19yZWc7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTBfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMV9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUyX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTNfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FNF9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkU1X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTZfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FN19STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkU4X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTlfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMTBfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTExX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUxMl9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMTNfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTE0X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUxNV9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMTZfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTYpCisvKjB4MDM0NjAqLwl1NjQJc3JwY2ltX21zZ19tYXNrOworLyoweDAzNDY4Ki8JdTY0CXNycGNpbV9tc2dfYWxhcm07CisJdTgJdW51c2VkMDM2MDBbMHgwMzYwMC0weDAzNDcwXTsKKworLyoweDAzNjAwKi8JdTY0CWdjbWcxX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19HU1NDQ19FUlJfR1NTQ0NfSU5UCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfR1NTQzBfRVJSMF9HU1NDMF8wX0lOVAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX0dTU0MwX0VSUjFfR1NTQzBfMV9JTlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19HU1NDMV9FUlIwX0dTU0MxXzBfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfR1NTQzFfRVJSMV9HU1NDMV8xX0lOVAl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX0dTU0MyX0VSUjBfR1NTQzJfMF9JTlQJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19HU1NDMl9FUlIxX0dTU0MyXzFfSU5UCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfVVFNX0VSUl9VUU1fSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfR1FDQ19FUlJfR1FDQ19JTlQJdnhnZV9tQklUKDgpCisvKjB4MDM2MDgqLwl1NjQJZ2NtZzFfaW50X21hc2s7CisJdTgJdW51c2VkMDNhMDBbMHgwM2EwMC0weDAzNjEwXTsKKworLyoweDAzYTAwKi8JdTY0CXBjbWcxX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfUENNRzFfSU5UX1NUQVRVU19QU1NDQ19FUlJfUFNTQ0NfSU5UCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1BDTUcxX0lOVF9TVEFUVVNfUFFDQ19FUlJfUFFDQ19JTlQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfUENNRzFfSU5UX1NUQVRVU19QUUNDX0NRTV9FUlJfUFFDQ19DUU1fSU5UCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1BDTUcxX0lOVF9TVEFUVVNfUFFDQ19TUU1fRVJSX1BRQ0NfU1FNX0lOVAl2eGdlX21CSVQoMykKKy8qMHgwM2EwOCovCXU2NAlwY21nMV9pbnRfbWFzazsKKwl1OAl1bnVzZWQwNDAwMFsweDA0MDAwLTB4MDNhMTBdOworCisvKjB4MDQwMDAqLwl1NjQJb25lX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfUlhQRV9FUlJfUlhQRV9JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfVFhQRV9CQ0NfTUVNX1NHX0VDQ19FUlJfVFhQRV9CQ0NfTUVNX1NHX0VDQ19JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19UWFBFX0JDQ19NRU1fREJfRUNDX0VSUl9UWFBFX0JDQ19NRU1fREJfRUNDX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX1RYUEVfRVJSX1RYUEVfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19ETE1fRVJSX0RMTV9JTlQJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX1BFX0VSUl9QRV9JTlQJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX1JQRV9FUlJfUlBFX0lOVAl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfUlBFX0ZTTV9FUlJfUlBFX0ZTTV9JTlQJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX09FU19FUlJfT0VTX0lOVAl2eGdlX21CSVQoNTUpCisvKjB4MDQwMDgqLwl1NjQJb25lX2ludF9tYXNrOworCXU4CXVudXNlZDA0ODE4WzB4MDQ4MTgtMHgwNDAxMF07CisKKy8qMHgwNDgxOCovCXU2NAlub2Ffd2N0X2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfTk9BX1dDVF9DVFJMX1ZQX0lOVF9OVU0JdnhnZV9tQklUKDApCisvKjB4MDQ4MjAqLwl1NjQJcmNfY2ZnMjsKKyNkZWZpbmUgVlhHRV9IV19SQ19DRkcyX0JVRkYxX1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19SQ19DRkcyX0JVRkYyX1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUkNfQ0ZHMl9CVUZGM19TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZSBWWEdFX0hXX1JDX0NGRzJfQlVGRjRfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwNDgyOCovCXU2NAlyY19jZmczOworI2RlZmluZSBWWEdFX0hXX1JDX0NGRzNfQlVGRjVfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorLyoweDA0ODMwKi8JdTY0CXJ4X211bHRpX2Nhc3RfY3RybDE7CisjZGVmaW5lCVZYR0VfSFdfUlhfTVVMVElfQ0FTVF9DVFJMMV9FTkFCTEUJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfUlhfTVVMVElfQ0FTVF9DVFJMMV9ERUxBWV9DT1VOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorLyoweDA0ODM4Ki8JdTY0CXJ4ZG1fZGJnX3JkOworI2RlZmluZSBWWEdFX0hXX1JYRE1fREJHX1JEX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxMikKKyNkZWZpbmUJVlhHRV9IV19SWERNX0RCR19SRF9FTkFCTEUJdnhnZV9tQklUKDMxKQorLyoweDA0ODQwKi8JdTY0CXJ4ZG1fZGJnX3JkX2RhdGE7CisjZGVmaW5lIFZYR0VfSFdfUlhETV9EQkdfUkRfREFUQV9STUNfUlhETV9EQkdfUkRfREFUQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDA0ODQ4Ki8JdTY0CXJxYV90b3BfcHJ0eV9mb3JfdmhbMTddOworI2RlZmluZSBWWEdFX0hXX1JRQV9UT1BfUFJUWV9GT1JfVkhfUlFBX1RPUF9QUlRZX0ZPUl9WSCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKwl1OAl1bnVzZWQwNDkwMFsweDA0OTAwLTB4MDQ4ZDBdOworCisvKjB4MDQ5MDAqLwl1NjQJdGltX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19USU1fU1RBVFVTX1RJTV9SRVNFVF9JTl9QUk9HUkVTUwl2eGdlX21CSVQoMCkKKy8qMHgwNDkwOCovCXU2NAl0aW1fZWNjX2VuYWJsZTsKKyNkZWZpbmUJVlhHRV9IV19USU1fRUNDX0VOQUJMRV9WQkxTX04JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VDQ19FTkFCTEVfQk1BUF9OCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19USU1fRUNDX0VOQUJMRV9CTUFQX01TR19OCXZ4Z2VfbUJJVCgyMykKKy8qMHgwNDkxMCovCXU2NAl0aW1fYnBfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19USU1fQlBfQ1RSTF9SRF9YT04JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVElNX0JQX0NUUkxfV1JfWE9OCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19USU1fQlBfQ1RSTF9ST0NSQ19CWVAJdnhnZV9tQklUKDIzKQorLyoweDA0OTE4Ki8JdTY0CXRpbV9yZXNvdXJjZV9hc3NpZ25tZW50X3ZoWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19USU1fUkVTT1VSQ0VfQVNTSUdOTUVOVF9WSF9CTUFQX1JPT1QodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKy8qMHgwNDlhMCovCXU2NAl0aW1fYm1hcF9tYXBwaW5nX3ZwX2VyclsxN107CisjZGVmaW5lIFZYR0VfSFdfVElNX0JNQVBfTUFQUElOR19WUF9FUlJfVElNX0RFU1RfVlBBVEgodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorCXU4CXVudXNlZDA0YjAwWzB4MDRiMDAtMHgwNGEyOF07CisKKy8qMHgwNGIwMCovCXU2NAlnY21nMl9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0dDTUcyX0lOVF9TVEFUVVNfR1hUTUNfRVJSX0dYVE1DX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19HQ01HMl9JTlRfU1RBVFVTX0dDUF9FUlJfR0NQX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzJfSU5UX1NUQVRVU19DTUNfRVJSX0NNQ19JTlQJdnhnZV9tQklUKDIzKQorLyoweDA0YjA4Ki8JdTY0CWdjbWcyX2ludF9tYXNrOworLyoweDA0YjEwKi8JdTY0CWd4dG1jX2Vycl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9NRU1fREJfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX01FTV9TR19FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DTUNfUkRfREFUQV9EQl9FUlIJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX1JFUV9GSUZPX0VSUgl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfUkVRX0RBVEFfRklGT19FUlIJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19XUl9SU1BfRklGT19FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19SRF9SU1BfRklGT19FUlIJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DTUlfV1JQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ01JX1dSUF9FUlIJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DTUlfUlJQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ01JX1JSUF9FUlIJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DTUlfREFUQV9TTV9FUlIJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DTUlfQ01DMF9JRl9FUlIJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX0FSQl9TTV9FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX0NGQ19TTV9FUlIJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX0RGRVRDSF9DUkVESVRfT1ZFUkZMT1cgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9ERkVUQ0hfQ1JFRElUX1VOREVSRkxPVyBcCisJCQkJCQkJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX0RGRVRDSF9TTV9FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX1JDVFJMX0NSRURJVF9PVkVSRkxPVyBcCisJCQkJCQkJdnhnZV9tQklUKDI0KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX1JDVFJMX0NSRURJVF9VTkRFUkZMT1cgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNSkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9SQ1RSTF9TTV9FUlIJdnhnZV9tQklUKDI2KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX1dDT01QTF9TTV9FUlIJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX1dDT01QTF9UQUdfRVJSCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9XUkVRX1NNX0VSUgl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfV1JFUV9GSUZPX0VSUgl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NQMkJEVF9SRklGT19QT1BfRVJSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfWFRNQ19CRFRfQ01JX09QX0VSUgl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX1hUTUNfQkRUX0RGRVRDSF9PUF9FUlIJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19YVE1DX0JEVF9ERklGT19FUlIJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DTUlfQVJCX1NNX0VSUgl2eGdlX21CSVQoMzUpCisvKjB4MDRiMTgqLwl1NjQJZ3h0bWNfZXJyX21hc2s7CisvKjB4MDRiMjAqLwl1NjQJZ3h0bWNfZXJyX2FsYXJtOworLyoweDA0YjI4Ki8JdTY0CWNtY19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0NNQ19FUlJfUkVHX0NNQ19DTUNfU01fRVJSCXZ4Z2VfbUJJVCgwKQorLyoweDA0YjMwKi8JdTY0CWNtY19lcnJfbWFzazsKKy8qMHgwNGIzOCovCXU2NAljbWNfZXJyX2FsYXJtOworLyoweDA0YjQwKi8JdTY0CWdjcF9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0dDUF9FUlJfUkVHX0NQX0gyTDJDUF9GSUZPX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19HQ1BfRVJSX1JFR19DUF9TVEMyQ1BfRklGT19FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfR0NQX0VSUl9SRUdfQ1BfU1RFMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0dDUF9FUlJfUkVHX0NQX1RURTJDUF9GSUZPX0VSUgl2eGdlX21CSVQoMykKKy8qMHgwNGI0OCovCXU2NAlnY3BfZXJyX21hc2s7CisvKjB4MDRiNTAqLwl1NjQJZ2NwX2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwNGYwMFsweDA0ZjAwLTB4MDRiNThdOworCisvKjB4MDRmMDAqLwl1NjQJcGNtZzJfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19QQ01HMl9JTlRfU1RBVFVTX1BYVE1DX0VSUl9QWFRNQ19JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUENNRzJfSU5UX1NUQVRVU19DUF9FWENfQ1BfWFRfRVhDX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUENNRzJfSU5UX1NUQVRVU19DUF9FUlJfQ1BfRVJSX0lOVAl2eGdlX21CSVQoMjMpCisvKjB4MDRmMDgqLwl1NjQJcGNtZzJfaW50X21hc2s7CisvKjB4MDRmMTAqLwl1NjQJcHh0bWNfZXJyX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfWFRfUElGX1NSQU1fREJfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVBUX1JFUV9GSUZPX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVBUX1BSU1BfRklGT19FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01QVF9XUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VUFRfUkVRX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VUFRfUFJTUF9GSUZPX0VSUgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVBUX1dSU1BfRklGT19FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQVF9SRVFfRklGT19FUlIJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQVF9QUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUFRfV1JTUF9GSUZPX0VSUgl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1JFUV9GSUZPX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1JFUV9EQVRBX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfV1JfUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfUkRfUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVBUX1JFUV9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVBUX1JTUF9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVBUX1JFUV9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVBUX1JTUF9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1BUX1JFUV9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1BUX1JTUF9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfWElMX1NIQURPV19FUlIJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19BUkJfU0hBRE9XX0VSUgl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1JBTV9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ01XX1NIQURPV19FUlIJdnhnZV9tQklUKDI0KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DTVJfU0hBRE9XX0VSUgl2eGdlX21CSVQoMjUpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01QVF9SRVFfRlNNX0VSUgl2eGdlX21CSVQoMjYpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01QVF9SU1BfRlNNX0VSUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VQVF9SRVFfRlNNX0VSUgl2eGdlX21CSVQoMjgpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VQVF9SU1BfRlNNX0VSUgl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQVF9SRVFfRlNNX0VSUgl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQVF9SU1BfRlNNX0VSUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1hJTF9GU01fRVJSCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQVJCX0ZTTV9FUlIJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DTVdfRlNNX0VSUgl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NNUl9GU01fRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVhQX1JEX1BST1RfRVJSCXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVhQX1JEX1BST1RfRVJSCXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1hQX1JEX1BST1RfRVJSCXZ4Z2VfbUJJVCgzOCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVhQX1dSX1BST1RfRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVhQX1dSX1BST1RfRVJSCXZ4Z2VfbUJJVCg0MCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1hQX1dSX1BST1RfRVJSCXZ4Z2VfbUJJVCg0MSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVhQX0lOVl9BRERSX0VSUgl2eGdlX21CSVQoNDIpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VYUF9JTlZfQUREUl9FUlIJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DWFBfSU5WX0FERFJfRVJSCXZ4Z2VfbUJJVCg0NCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVhQX1JEX1BST1RfSU5GT19FUlIJdnhnZV9tQklUKDQ1KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VWFBfUkRfUFJPVF9JTkZPX0VSUgl2eGdlX21CSVQoNDYpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NYUF9SRF9QUk9UX0lORk9fRVJSCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVhQX1dSX1BST1RfSU5GT19FUlIJdnhnZV9tQklUKDQ4KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VWFBfV1JfUFJPVF9JTkZPX0VSUgl2eGdlX21CSVQoNDkpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NYUF9XUl9QUk9UX0lORk9fRVJSCXZ4Z2VfbUJJVCg1MCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVhQX0lOVl9BRERSX0lORk9fRVJSCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVhQX0lOVl9BRERSX0lORk9fRVJSCXZ4Z2VfbUJJVCg1MikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1hQX0lOVl9BRERSX0lORk9fRVJSCXZ4Z2VfbUJJVCg1MykKKyNkZWZpbmUgVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfWFRfUElGX1NSQU1fU0dfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgNTQsIDIpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQMkJEVF9ERklGT19QVVNIX0VSUgl2eGdlX21CSVQoNTYpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQMkJEVF9SRklGT19QVVNIX0VSUgl2eGdlX21CSVQoNTcpCisvKjB4MDRmMTgqLwl1NjQJcHh0bWNfZXJyX21hc2s7CisvKjB4MDRmMjAqLwl1NjQJcHh0bWNfZXJyX2FsYXJtOworLyoweDA0ZjI4Ki8JdTY0CWNwX2Vycl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9EQ0FDSEVfU0dfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX0lDQUNIRV9TR19FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCAyKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfRFRBR19TR19FUlIJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfSVRBR19TR19FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfVFJBQ0VfU0dfRVJSCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0RNQTJDUF9TR19FUlIJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfTVAyQ1BfU0dfRVJSCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX1FDQzJDUF9TR19FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZSBWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfU1RDMkNQX1NHX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAyKQorI2RlZmluZSBWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfRENBQ0hFX0RCX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZSBWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfSUNBQ0hFX0RCX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAyKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfRFRBR19EQl9FUlIJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfSVRBR19EQl9FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfVFJBQ0VfREJfRVJSCXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0RNQTJDUF9EQl9FUlIJdnhnZV9tQklUKDM3KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfTVAyQ1BfREJfRVJSCXZ4Z2VfbUJJVCgzOCkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX1FDQzJDUF9EQl9FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZSBWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfU1RDMkNQX0RCX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCAyKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfSDJMMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg0OCkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX1NUQzJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNDkpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9TVEUyQ1BfRklGT19FUlIJdnhnZV9tQklUKDUwKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfVFRFMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX1NXSUYyQ1BfRklGT19FUlIJdnhnZV9tQklUKDUyKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1AyRE1BX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1MykKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0RBTTJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNTQpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9NUDJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9RQ0MyQ1BfRklGT19FUlIJdnhnZV9tQklUKDU2KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfRE1BMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1NykKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX1dBS0VfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDYwKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfUE1PTl9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNjEpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9ETUFfUkRfU0hBRE9XX0VSUgl2eGdlX21CSVQoNjIpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9QSUZUX0NSRURJVF9FUlIJdnhnZV9tQklUKDYzKQorLyoweDA0ZjMwKi8JdTY0CWNwX2Vycl9tYXNrOworLyoweDA0ZjM4Ki8JdTY0CWNwX2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwNGZlOFsweDA0ZjUwLTB4MDRmNDBdOworCisvKjB4MDRmNTAqLwl1NjQJY3BfZXhjX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19DUF9FWENfUkVHX0NQX0NQX0NBVVNFX0lORk9fSU5UCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19DUF9FWENfUkVHX0NQX0NQX0NBVVNFX0NSSVRfSU5UCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19DUF9FWENfUkVHX0NQX0NQX1NFUlIJdnhnZV9tQklUKDYzKQorLyoweDA0ZjU4Ki8JdTY0CWNwX2V4Y19tYXNrOworLyoweDA0ZjYwKi8JdTY0CWNwX2V4Y19hbGFybTsKKy8qMHgwNGY2OCovCXU2NAljcF9leGNfY2F1c2U7CisjZGVmaW5lIFZYR0VfSFdfQ1BfRVhDX0NBVVNFX0NQX0NQX0NBVVNFKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDA1MjAwWzB4MDUyMDAtMHgwNGY3MF07CisKKy8qMHgwNTIwMCovCXU2NAltc2dfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19NU0dfSU5UX1NUQVRVU19USU1fRVJSX1RJTV9JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0lOVF9TVEFUVVNfTVNHX0VYQ19NU0dfWFRfRVhDX0lOVAl2eGdlX21CSVQoNjApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0lOVF9TVEFUVVNfTVNHX0VSUjNfTVNHX0VSUjNfSU5UCXZ4Z2VfbUJJVCg2MSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfSU5UX1NUQVRVU19NU0dfRVJSMl9NU0dfRVJSMl9JTlQJdnhnZV9tQklUKDYyKQorI2RlZmluZQlWWEdFX0hXX01TR19JTlRfU1RBVFVTX01TR19FUlJfTVNHX0VSUl9JTlQJdnhnZV9tQklUKDYzKQorLyoweDA1MjA4Ki8JdTY0CW1zZ19pbnRfbWFzazsKKy8qMHgwNTIxMCovCXU2NAl0aW1fZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fVkJMU19TR19FUlIJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfUEFfU0dfRVJSCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX1BCX1NHX0VSUgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9NU0dfU0dfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9WQkxTX0RCX0VSUgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfUEFfREJfRVJSCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9QQl9EQl9FUlIJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX01TR19EQl9FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX01FTV9DTlRSTF9TTV9FUlIJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX01TR19NRU1fQ05UUkxfU01fRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fTVBJRl9QQ0lXUl9FUlIJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9ST0NSQ19CTUFQX1VQRFRfRklGT19FUlIJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9DUkVBVEVfQk1BUE1TR19GSUZPX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX1JPQ1JDSUZfTUlTTUFUQ0gJdnhnZV9tQklUKDQ2KQorI2RlZmluZSBWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX01BUFBJTkdfVlBfRVJSKG4pCXZ4Z2VfbUJJVChuKQorLyoweDA1MjE4Ki8JdTY0CXRpbV9lcnJfbWFzazsKKy8qMHgwNTIyMCovCXU2NAl0aW1fZXJyX2FsYXJtOworLyoweDA1MjI4Ki8JdTY0CW1zZ19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX1VQX1VYUF9XQUtFX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01QX01YUF9XQUtFX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfRE1RX0RNQV9SRUFEX0NNRF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfRE1RX0RNQV9SRVNQX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9ETVFfT1dOX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfUERBX0FDQ19GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NUF9NWFBfUE1PTl9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19VUF9VWFBfUE1PTl9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19VUF9VWFBfRFRBR19TR19FUlIJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfVVBfVVhQX0lUQUdfU0dfRVJSCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NUF9NWFBfRFRBR19TR19FUlIJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01QX01YUF9JVEFHX1NHX0VSUgl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfVVBfVVhQX1RSQUNFX1NHX0VSUgl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVBfTVhQX1RSQUNFX1NHX0VSUgl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9DTUcyTVNHX1NHX0VSUgl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9UWFBFMk1TR19TR19FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfUlhQRTJNU0dfU0dfRVJSCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1JQRTJNU0dfU0dfRVJSCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1VNUV9TR19FUlIJdnhnZV9tQklUKDI2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfQldSX1BGX1NHX0VSUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9ETVFfRUNDX1NHX0VSUgl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9ETUFfUkVTUF9FQ0NfU0dfRVJSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfWEZNRFFSWV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX0ZSTVFSWV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9VTVFfV1JJVEVfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfVU1RX0JXUl9QRl9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1JFR19SRVNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgzOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19VUF9VWFBfRFRBR19EQl9FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX1VQX1VYUF9JVEFHX0RCX0VSUgl2eGdlX21CSVQoNDEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVBfTVhQX0RUQUdfREJfRVJSCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NUF9NWFBfSVRBR19EQl9FUlIJdnhnZV9tQklUKDQ1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX1VQX1VYUF9UUkFDRV9EQl9FUlIJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01QX01YUF9UUkFDRV9EQl9FUlIJdnhnZV9tQklUKDQ4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfQ01HMk1TR19EQl9FUlIJdnhnZV9tQklUKDQ5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfVFhQRTJNU0dfREJfRVJSCXZ4Z2VfbUJJVCg1MCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1JYUEUyTVNHX0RCX0VSUgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9SUEUyTVNHX0RCX0VSUgl2eGdlX21CSVQoNTIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9SRUdfUkVBRF9GSUZPX0VSUgl2eGdlX21CSVQoNTMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9NWFAyVVhQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1NCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0tERkNfU0lGX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0NYUDJTV0lGX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1NikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1VNUV9EQl9FUlIJdnhnZV9tQklUKDU3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfQldSX1BGX0RCX0VSUgl2eGdlX21CSVQoNTgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9CV1JfU0lGX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0RNUV9FQ0NfREJfRVJSCXZ4Z2VfbUJJVCg2MCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0RNQV9SRUFEX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg2MSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0RNQV9SRVNQX0VDQ19EQl9FUlIJdnhnZV9tQklUKDYyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfVVhQMk1YUF9GSUZPX0VSUgl2eGdlX21CSVQoNjMpCisvKjB4MDUyMzAqLwl1NjQJbXNnX2Vycl9tYXNrOworLyoweDA1MjM4Ki8JdTY0CW1zZ19lcnJfYWxhcm07CisJdTgJdW51c2VkMDUzNDBbMHgwNTM0MC0weDA1MjQwXTsKKworLyoweDA1MzQwKi8JdTY0CW1zZ19leGNfcmVnOworI2RlZmluZQlWWEdFX0hXX01TR19FWENfUkVHX01QX01YUF9DQVVTRV9JTkZPX0lOVAl2eGdlX21CSVQoNTApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VYQ19SRUdfTVBfTVhQX0NBVVNFX0NSSVRfSU5UCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVhDX1JFR19VUF9VWFBfQ0FVU0VfSU5GT19JTlQJdnhnZV9tQklUKDU0KQorI2RlZmluZQlWWEdFX0hXX01TR19FWENfUkVHX1VQX1VYUF9DQVVTRV9DUklUX0lOVAl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VYQ19SRUdfTVBfTVhQX1NFUlIJdnhnZV9tQklUKDYyKQorI2RlZmluZQlWWEdFX0hXX01TR19FWENfUkVHX1VQX1VYUF9TRVJSCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNTM0OCovCXU2NAltc2dfZXhjX21hc2s7CisvKjB4MDUzNTAqLwl1NjQJbXNnX2V4Y19hbGFybTsKKy8qMHgwNTM1OCovCXU2NAltc2dfZXhjX2NhdXNlOworI2RlZmluZSBWWEdFX0hXX01TR19FWENfQ0FVU0VfTVBfTVhQKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lIFZYR0VfSFdfTVNHX0VYQ19DQVVTRV9VUF9VWFAodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDUzNjhbMHgwNTM4MC0weDA1MzYwXTsKKworLyoweDA1MzgwKi8JdTY0CW1zZ19lcnIyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9DTUcyTVNHX0RJU1BBVENIX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9ETVFfRElTUEFUQ0hfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9TV0lGX0RJU1BBVENIX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfUElDX1dSSVRFX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfU1dJRlJFR19GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9USU1fV1JJVEVfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9VTVFfVEFfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfVFhQRV9UQV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9SWFBFX1RBX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1NXSUZfVEFfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfRE1BX1RBX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9DUF9UQV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEExNl9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMTVfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTE0X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEExM19GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMTJfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTExX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEExMF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBOV9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBOF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBN19GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBNl9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBNV9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBNF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDI0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBM19GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDI1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMl9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDI2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMV9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDI4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0ZCTUNfT1dOX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9UWFBFMk1TR19ESVNQQVRDSF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1JYUEUyTVNHX0RJU1BBVENIX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfUlBFMk1TR19ESVNQQVRDSF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NUF9NUF9QSUZUX0lGX0NSRURJVF9DTlRfRVJSCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfVVBfVVBfUElGVF9JRl9DUkVESVRfQ05UX0VSUgl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfVU1RMlBJQ19DTURfRklGT19FUlIJdnhnZV9tQklUKDYyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19USU1fVElNMk1TR19DTURfRklGT19FUlIJdnhnZV9tQklUKDYzKQorLyoweDA1Mzg4Ki8JdTY0CW1zZ19lcnIyX21hc2s7CisvKjB4MDUzOTAqLwl1NjQJbXNnX2VycjJfYWxhcm07CisvKjB4MDUzOTgqLwl1NjQJbXNnX2VycjNfcmVnOworI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX1NHX0VSUjAJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfU0dfRVJSMQl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9TR19FUlIyCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX1NHX0VSUjMJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfU0dfRVJSNAl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9TR19FUlI1CXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX1NHX0VSUjYJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfU0dfRVJSNwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0lDQUNIRV9TR19FUlIwCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfSUNBQ0hFX1NHX0VSUjEJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfU0dfRVJSMAl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfU0dfRVJSMQl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfU0dfRVJSMgl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfU0dfRVJSMwl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfU0dfRVJSNAl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfU0dfRVJSNQl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfU0dfRVJSNgl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfU0dfRVJSNwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9JQ0FDSEVfU0dfRVJSMAl2eGdlX21CSVQoMjQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9JQ0FDSEVfU0dfRVJSMQl2eGdlX21CSVQoMjUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfREJfRVJSMAl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfREJfRVJSMQl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfREJfRVJSMgl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfREJfRVJSMwl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfREJfRVJSNAl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfREJfRVJSNQl2eGdlX21CSVQoMzcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfREJfRVJSNgl2eGdlX21CSVQoMzgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfREJfRVJSNwl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9JQ0FDSEVfREJfRVJSMAl2eGdlX21CSVQoNDApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9JQ0FDSEVfREJfRVJSMQl2eGdlX21CSVQoNDEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfREJfRVJSMAl2eGdlX21CSVQoNDgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfREJfRVJSMQl2eGdlX21CSVQoNDkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfREJfRVJSMgl2eGdlX21CSVQoNTApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfREJfRVJSMwl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfREJfRVJSNAl2eGdlX21CSVQoNTIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfREJfRVJSNQl2eGdlX21CSVQoNTMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfREJfRVJSNgl2eGdlX21CSVQoNTQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9EQ0FDSEVfREJfRVJSNwl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9JQ0FDSEVfREJfRVJSMAl2eGdlX21CSVQoNTYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX01QX01YUF9JQ0FDSEVfREJfRVJSMQl2eGdlX21CSVQoNTcpCisvKjB4MDUzYTAqLwl1NjQJbXNnX2VycjNfbWFzazsKKy8qMHgwNTNhOCovCXU2NAltc2dfZXJyM19hbGFybTsKKwl1OAl1bnVzZWQwNTYwMFsweDA1NjAwLTB4MDUzYjBdOworCisvKjB4MDU2MDAqLwl1NjQJZmF1X2dlbl9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0ZBVV9HRU5fRVJSX1JFR19GTVBGX1BPUlQwX1BFUk1BTkVOVF9TVE9QCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9HRU5fRVJSX1JFR19GTVBGX1BPUlQxX1BFUk1BTkVOVF9TVE9QCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0ZBVV9HRU5fRVJSX1JFR19GTVBGX1BPUlQyX1BFUk1BTkVOVF9TVE9QCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19GQVVfR0VOX0VSUl9SRUdfRkFMUl9BVVRPX0xST19OT1RJRklDQVRJT04JdnhnZV9tQklUKDE1KQorLyoweDA1NjA4Ki8JdTY0CWZhdV9nZW5fZXJyX21hc2s7CisvKjB4MDU2MTAqLwl1NjQJZmF1X2dlbl9lcnJfYWxhcm07CisvKjB4MDU2MTgqLwl1NjQJZmF1X2VjY19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDBfRkFVX01BQzJGX05fU0dfRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDBfRkFVX01BQzJGX05fREJfRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDBfRkFVX01BQzJGX1dfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIsIDIpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMF9GQVVfTUFDMkZfV19EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNCwgMikKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQxX0ZBVV9NQUMyRl9OX1NHX0VSUgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQxX0ZBVV9NQUMyRl9OX0RCX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQxX0ZBVV9NQUMyRl9XX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA4LCAyKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDFfRkFVX01BQzJGX1dfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEwLCAyKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDJfRkFVX01BQzJGX05fU0dfRVJSCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQyX0ZBVV9NQUMyRl9OX0RCX0VSUgl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMl9GQVVfTUFDMkZfV19TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTQsIDIpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMl9GQVVfTUFDMkZfV19EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDIpCisjZGVmaW5lIFZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9GQVVfWEZNRF9JTlNfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE4LCAyKQorI2RlZmluZSBWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfRkFVX1hGTURfSU5TX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyMCwgMikKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVSl9GQVVfRlNNX0VSUgl2eGdlX21CSVQoMzEpCisvKjB4MDU2MjAqLwl1NjQJZmF1X2VjY19lcnJfbWFzazsKKy8qMHgwNTYyOCovCXU2NAlmYXVfZWNjX2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwNTY1OFsweDA1NjU4LTB4MDU2MzBdOworLyoweDA1NjU4Ki8JdTY0CWZhdV9wYV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfRkFVX1BBX0NGR19SRVBMX0w0X0NPTVBfQ1NVTQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19GQVVfUEFfQ0ZHX1JFUExfTDNfSU5DTF9DRgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19GQVVfUEFfQ0ZHX1JFUExfTDNfQ09NUF9DU1VNCXZ4Z2VfbUJJVCgxMSkKKwl1OAl1bnVzZWQwNTY2OFsweDA1NjY4LTB4MDU2NjBdOworCisvKjB4MDU2NjgqLwl1NjQJZGJnX3N0YXRzX2ZhdV9yeF9wYXRoOworI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19GQVVfUlhfUEFUSF9SWF9QRVJNSVRURURfRlJNUyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwNTZjMFsweDA1NmMwLTB4MDU2NzBdOworCisvKjB4MDU2YzAqLwl1NjQJZmF1X2xhZ19jZmc7CisjZGVmaW5lIFZYR0VfSFdfRkFVX0xBR19DRkdfQ09MTF9BTEcodmFsKSB2eGdlX3ZCSVQodmFsLCAyLCAyKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9MQUdfQ0ZHX0lOQ1JfUlhfQUdHUl9TVEFUUwl2eGdlX21CSVQoNykKKwl1OAl1bnVzZWQwNTgwMFsweDA1ODAwLTB4MDU2YzhdOworCisvKjB4MDU4MDAqLwl1NjQJdHBhX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfVFBBX0lOVF9TVEFUVVNfT1JQX0VSUl9PUlBfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19UUEFfSU5UX1NUQVRVU19QVE1fQUxBUk1fUFRNX0lOVAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfVFBBX0lOVF9TVEFUVVNfVFBBX0VSUk9SX1RQQV9JTlQJdnhnZV9tQklUKDMxKQorLyoweDA1ODA4Ki8JdTY0CXRwYV9pbnRfbWFzazsKKy8qMHgwNTgxMCovCXU2NAlvcnBfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfRklGT19TR19FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX0ZJRk9fREJfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9YRk1EX0ZJRk9fVUZMT1dfRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfRlJNX0ZJRk9fVUZMT1dfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfWEZNRF9SQ1ZfRlNNX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX09VVFJFQURfRlNNX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX09VVFFFTV9GU01fRVJSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfWEZNRF9SQ1ZfU0hBRE9XX0VSUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX09VVFJFQURfU0hBRE9XX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX09VVFFFTV9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfT1VURlJNX1NIQURPV19FUlIJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9PUFRQUlNfU0hBRE9XX0VSUgl2eGdlX21CSVQoNDcpCisvKjB4MDU4MTgqLwl1NjQJb3JwX2Vycl9tYXNrOworLyoweDA1ODIwKi8JdTY0CW9ycF9lcnJfYWxhcm07CisvKjB4MDU4MjgqLwl1NjQJcHRtX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19QVE1fQUxBUk1fUkVHX1BUTV9SRENUUkxfU1lOQ19FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUFRNX0FMQVJNX1JFR19QVE1fUkRDVFJMX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1BUTV9BTEFSTV9SRUdfWEZNRF9SRF9GSUZPX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUFRNX0FMQVJNX1JFR19XREUyTVNSX1dSX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUgVlhHRV9IV19QVE1fQUxBUk1fUkVHX1BUTV9GUk1NX0VDQ19EQl9FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAxOCwgMikKKyNkZWZpbmUgVlhHRV9IV19QVE1fQUxBUk1fUkVHX1BUTV9GUk1NX0VDQ19TR19FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAyMiwgMikKKy8qMHgwNTgzMCovCXU2NAlwdG1fYWxhcm1fbWFzazsKKy8qMHgwNTgzOCovCXU2NAlwdG1fYWxhcm1fYWxhcm07CisvKjB4MDU4NDAqLwl1NjQJdHBhX2Vycm9yX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19UUEFfRVJST1JfUkVHX1RQQV9GU01fRVJSX0FMQVJNCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RQQV9FUlJPUl9SRUdfVFBBX1RQQV9EQV9MS1VQX1BSVDBfREJfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RQQV9FUlJPUl9SRUdfVFBBX1RQQV9EQV9MS1VQX1BSVDBfU0dfRVJSCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwNTg0OCovCXU2NAl0cGFfZXJyb3JfbWFzazsKKy8qMHgwNTg1MCovCXU2NAl0cGFfZXJyb3JfYWxhcm07CisvKjB4MDU4NTgqLwl1NjQJdHBhX2dsb2JhbF9jZmc7CisjZGVmaW5lCVZYR0VfSFdfVFBBX0dMT0JBTF9DRkdfU1VQUE9SVF9TTkFQX0FCX04JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVFBBX0dMT0JBTF9DRkdfRUNDX0VOQUJMRV9OCXZ4Z2VfbUJJVCgzNSkKKwl1OAl1bnVzZWQwNTg2OFsweDA1ODcwLTB4MDU4NjBdOworCisvKjB4MDU4NzAqLwl1NjQJcHRtX2VjY19jZmc7CisjZGVmaW5lCVZYR0VfSFdfUFRNX0VDQ19DRkdfUFRNX0ZSTU1fRUNDX0VOX04JdnhnZV9tQklUKDMpCisvKjB4MDU4NzgqLwl1NjQJcHRtX3BoYXNlX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19QVE1fUEhBU0VfQ0ZHX0ZSTU1fV1JfUEhBU0VfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUFRNX1BIQVNFX0NGR19GUk1NX1JEX1BIQVNFX0VOCXZ4Z2VfbUJJVCg3KQorCXU4CXVudXNlZDA1ODk4WzB4MDU4OTgtMHgwNTg4MF07CisKKy8qMHgwNTg5OCovCXU2NAlkYmdfc3RhdHNfdHBhX3R4X3BhdGg7CisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX1RQQV9UWF9QQVRIX1RYX1BFUk1JVFRFRF9GUk1TKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwNTkwMFsweDA1OTAwLTB4MDU4YTBdOworCisvKjB4MDU5MDAqLwl1NjQJdG1hY19pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1RNQUNfSU5UX1NUQVRVU19UWE1BQ19HRU5fRVJSX1RYTUFDX0dFTl9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVE1BQ19JTlRfU1RBVFVTX1RYTUFDX0VDQ19FUlJfVFhNQUNfRUNDX0lOVAl2eGdlX21CSVQoNykKKy8qMHgwNTkwOCovCXU2NAl0bWFjX2ludF9tYXNrOworLyoweDA1OTEwKi8JdTY0CXR4bWFjX2dlbl9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1RYTUFDX0dFTl9FUlJfUkVHX1RNQUNKX1BFUk1BTkVOVF9TVE9QCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0dFTl9FUlJfUkVHX1RNQUNKX05PX1ZBTElEX1ZTUE9SVAl2eGdlX21CSVQoNykKKy8qMHgwNTkxOCovCXU2NAl0eG1hY19nZW5fZXJyX21hc2s7CisvKjB4MDU5MjAqLwl1NjQJdHhtYWNfZ2VuX2Vycl9hbGFybTsKKy8qMHgwNTkyOCovCXU2NAl0eG1hY19lY2NfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDSl9UTUFDX1RQQTJNQUNfU0dfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNKX1RNQUNfVFBBMk1BQ19EQl9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ0pfVE1BQ19UUEEyTV9TQl9TR19FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNKX1RNQUNfVFBBMk1fU0JfREJfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDSl9UTUFDX1RQQTJNX0RBX1NHX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ0pfVE1BQ19UUEEyTV9EQV9EQl9FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNfVE1BQ19QT1JUMF9GU01fRVJSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDX1RNQUNfUE9SVDFfRlNNX0VSUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ19UTUFDX1BPUlQyX0ZTTV9FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNKX1RNQUNKX0ZTTV9FUlIJdnhnZV9tQklUKDM5KQorLyoweDA1OTMwKi8JdTY0CXR4bWFjX2VjY19lcnJfbWFzazsKKy8qMHgwNTkzOCovCXU2NAl0eG1hY19lY2NfZXJyX2FsYXJtOworCXU4CXVudXNlZDA1OTc4WzB4MDU5NzgtMHgwNTk0MF07CisKKy8qMHgwNTk3OCovCXU2NAlkYmdfc3RhdF90eF9hbnlfZnJtczsKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVF9UWF9BTllfRlJNU19QT1JUMF9UWF9BTllfRlJNUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRfVFhfQU5ZX0ZSTVNfUE9SVDFfVFhfQU5ZX0ZSTVModmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUX1RYX0FOWV9GUk1TX1BPUlQyX1RYX0FOWV9GUk1TKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorCXU4CXVudXNlZDA1OWEwWzB4MDU5YTAtMHgwNTk4MF07CisKKy8qMHgwNTlhMCovCXU2NAl0eG1hY19saW5rX3V0aWxfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19MSU5LX1VUSUxfUE9SVF9UTUFDX1RNQUNfVVRJTElaQVRJT04odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMSwgNykKKyNkZWZpbmUgVlhHRV9IV19UWE1BQ19MSU5LX1VUSUxfUE9SVF9UTUFDX1VUSUxfQ0ZHKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgNCkKKyNkZWZpbmUgVlhHRV9IV19UWE1BQ19MSU5LX1VUSUxfUE9SVF9UTUFDX1RNQUNfRlJBQ19VVElMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX1RYTUFDX0xJTktfVVRJTF9QT1JUX1RNQUNfUEtUX1dFSUdIVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0xJTktfVVRJTF9QT1JUX1RNQUNfVE1BQ19TQ0FMRV9GQUNUT1IJdnhnZV9tQklUKDIzKQorLyoweDA1OWI4Ki8JdTY0CXR4bWFjX2NmZzBfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19DRkcwX1BPUlRfVE1BQ19FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19DRkcwX1BPUlRfQVBQRU5EX1BBRAl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19UWE1BQ19DRkcwX1BPUlRfUEFEX0JZVEUodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorLyoweDA1OWQwKi8JdTY0CXR4bWFjX2NmZzFfcG9ydFszXTsKKyNkZWZpbmUgVlhHRV9IV19UWE1BQ19DRkcxX1BPUlRfQVZHX0lQRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCA4KQorLyoweDA1OWU4Ki8JdTY0CXR4bWFjX3N0YXR1c19wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1RYTUFDX1NUQVRVU19QT1JUX1RNQUNfVFhfRlJNX1NFTlQJdnhnZV9tQklUKDMpCisJdTgJdW51c2VkMDVhMjBbMHgwNWEyMC0weDA1YTAwXTsKKworLyoweDA1YTIwKi8JdTY0CWxhZ19kaXN0cmliX2Rlc3Q7CisjZGVmaW5lIFZYR0VfSFdfTEFHX0RJU1RSSUJfREVTVF9NQVBfVlBBVEgobikJdnhnZV9tQklUKG4pCisvKjB4MDVhMjgqLwl1NjQJbGFnX21hcmtlcl9jZmc7CisjZGVmaW5lCVZYR0VfSFdfTEFHX01BUktFUl9DRkdfR0VOX1JDVlJfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX01BUktFUl9DRkdfUkVTUF9FTgl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19MQUdfTUFSS0VSX0NGR19SRVNQX1RJTUVPVVQodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX01BUktFUl9DRkdfU0xPV19QUk9UT19NUktSX01JTl9JTlRFUlZBTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX01BUktFUl9DRkdfVEhST1RUTEVfTVJLUl9SRVNQCXZ4Z2VfbUJJVCg1MSkKKy8qMHgwNWEzMCovCXU2NAlsYWdfdHhfY2ZnOworI2RlZmluZQlWWEdFX0hXX0xBR19UWF9DRkdfSU5DUl9UWF9BR0dSX1NUQVRTCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX0xBR19UWF9DRkdfRElTVFJJQl9BTEdfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUJVlhHRV9IV19MQUdfVFhfQ0ZHX0RJU1RSSUJfUkVNQVBfSUZfRkFJTAl2eGdlX21CSVQoMTEpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1RYX0NGR19DT0xMX01BWF9ERUxBWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKy8qMHgwNWEzOCovCXU2NAlsYWdfdHhfc3RhdHVzOworI2RlZmluZSBWWEdFX0hXX0xBR19UWF9TVEFUVVNfVExBR19USU1FUl9WQUxfRU1QVElFRF9MSU5LKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1RYX1NUQVRVU19UTEFHX1RJTUVSX1ZBTF9TTE9XX1BST1RPX01SS1IodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfVFhfU1RBVFVTX1RMQUdfVElNRVJfVkFMX1NMT1dfUFJPVE9fTVJLUlJFU1AodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDgpCisJdTgJdW51c2VkMDVkNDhbMHgwNWQ0OC0weDA1YTQwXTsKKworLyoweDA1ZDQ4Ki8JdTY0CXNycGNpbV90b19tcnBjaW1fdnBsYW5lX3Jtc2dbMTddOworI2RlZmluZQlcCitWWEdFX0hBTF9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORV9STVNHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkVfUk1TRyh2YWwpXAorIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCQl1OAl1bnVzZWQwNjQyMFsweDA2NDIwLTB4MDVkZDBdOworCisvKjB4MDY0MjAqLwl1NjQJbXJwY2ltX3RvX3NycGNpbV92cGxhbmVfd21zZ1sxN107CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1RPX1NSUENJTV9WUExBTkVfV01TR19NUlBDSU1fVE9fU1JQQ0lNX1ZQTEFORV9XTVNHKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDA2NGE4Ki8JdTY0CW1ycGNpbV90b19zcnBjaW1fdnBsYW5lX3dtc2dfdHJpZ1sxN107CisKKy8qMHgwNjUzMCovCXU2NAlkZWJ1Z19zdGF0czA7CisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFMwX1JTVERST1BfTVNHKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFMwX1JTVERST1BfQ1BMKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA2NTM4Ki8JdTY0CWRlYnVnX3N0YXRzMTsKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzFfUlNURFJPUF9DTElFTlQwKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFMxX1JTVERST1BfQ0xJRU5UMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwNjU0MCovCXU2NAlkZWJ1Z19zdGF0czI7CisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFMyX1JTVERST1BfQ0xJRU5UMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorLyoweDA2NTQ4Ki8JdTY0CWRlYnVnX3N0YXRzM192cGxhbmVbMTddOworI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTM19WUExBTkVfREVQTF9QSCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTM19WUExBTkVfREVQTF9OUEgodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFMzX1ZQTEFORV9ERVBMX0NQTEgodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisvKjB4MDY1ZDAqLwl1NjQJZGVidWdfc3RhdHM0X3ZwbGFuZVsxN107CisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFM0X1ZQTEFORV9ERVBMX1BEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFM0X1ZQTEFORV9ERVBMX05QRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzRfVlBMQU5FX0RFUExfQ1BMRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKworCXU4CXVudXNlZDA3MDAwWzB4MDcwMDAtMHgwNjY1OF07CisKKy8qMHgwNzAwMCovCXU2NAltcnBjaW1fZ2VuZXJhbF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUElDX0lOVAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1BDSV9JTlQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19SVERNQV9JTlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19XUkRNQV9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19HM0NNQ1RfSU5UCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfR0NNRzFfSU5UCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfR0NNRzJfSU5UCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfR0NNRzNfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfRzNDTUlGTF9JTlQJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19HM0NNSUZVX0lOVAl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1BDTUcxX0lOVAl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19QQ01HMl9JTlQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUENNRzNfSU5UCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1hNQUNfSU5UCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1JYTUFDX0lOVAl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19UTUFDX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19HM0ZCSUZfSU5UCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0ZCTUNfSU5UCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0czRkJDVF9JTlQJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfVFBBX0lOVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19EUkJFTExfSU5UCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX09ORV9JTlQJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfTVNHX0lOVAl2eGdlX21CSVQoMjIpCisvKjB4MDcwMDgqLwl1NjQJbXJwY2ltX2dlbmVyYWxfaW50X21hc2s7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUElDX0lOVAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19QQ0lfSU5UCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1JURE1BX0lOVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19XUkRNQV9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfRzNDTUNUX0lOVAl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19HQ01HMV9JTlQJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfR0NNRzJfSU5UCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0dDTUczX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19HM0NNSUZMX0lOVAl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19HM0NNSUZVX0lOVAl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19QQ01HMV9JTlQJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1BDTUcyX0lOVAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUENNRzNfSU5UCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19YTUFDX0lOVAl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUlhNQUNfSU5UCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19UTUFDX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfRzNGQklGX0lOVAl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfRkJNQ19JTlQJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0czRkJDVF9JTlQJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1RQQV9JTlQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0RSQkVMTF9JTlQJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX09ORV9JTlQJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX01TR19JTlQJdnhnZV9tQklUKDIyKQorLyoweDA3MDEwKi8JdTY0CW1ycGNpbV9wcGlmX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19JTklfRVJST1JTX0lOSV9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19ETUFfRVJST1JTX0RNQV9JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19UR1RfRVJST1JTX1RHVF9JTlQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ09ORklHX0VSUk9SU19DT05GSUdfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX0NSRFRfSU5UCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX1BMTF9FUlJPUlNfUExMX0lOVAl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUwX0NSRF9JTlRfVlBMQU5FMF9JTlRcCisJCQkJCQkJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMV9DUkRfSU5UX1ZQTEFORTFfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTJfQ1JEX0lOVF9WUExBTkUyX0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUzX0NSRF9JTlRfVlBMQU5FM19JTlRcCisJCQkJCQkJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FNF9DUkRfSU5UX1ZQTEFORTRfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTVfQ1JEX0lOVF9WUExBTkU1X0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkU2X0NSRF9JTlRfVlBMQU5FNl9JTlRcCisJCQkJCQkJdnhnZV9tQklUKDM3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FN19DUkRfSU5UX1ZQTEFORTdfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzOCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORThfQ1JEX0lOVF9WUExBTkU4X0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkU5X0NSRF9JTlRfVlBMQU5FOV9JTlRcCisJCQkJCQkJdnhnZV9tQklUKDQwKQorI2RlZmluZSBcCitWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMTBfQ1JEX0lOVF9WUExBTkUxMF9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MSkKKyNkZWZpbmUgXAorVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTExX0NSRF9JTlRfVlBMQU5FMTFfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNDIpCisjZGVmaW5lCVwKK1ZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUxMl9DUkRfSU5UX1ZQTEFORTEyX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDQzKQorI2RlZmluZQlcCitWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMTNfQ1JEX0lOVF9WUExBTkUxM19JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0NCkKKyNkZWZpbmUJXAorVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTE0X0NSRF9JTlRfVlBMQU5FMTRfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNDUpCisjZGVmaW5lCVwKK1ZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUxNV9DUkRfSU5UX1ZQTEFORTE1X0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDQ2KQorI2RlZmluZQlcCitWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMTZfQ1JEX0lOVF9WUExBTkUxNl9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJXAorVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX1ZQQVRIX1RPX01SUENJTV9BTEFSTV9WUEFUSF9UT19NUlBDSU1fQUxBUk1fSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNTUpCisvKjB4MDcwMTgqLwl1NjQJbXJwY2ltX3BwaWZfaW50X21hc2s7CisJdTgJdW51c2VkMDcwMjhbMHgwNzAyOC0weDA3MDIwXTsKKworLyoweDA3MDI4Ki8JdTY0CWluaV9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX1NDUExfQ1BMX1RJTUVPVVRfVU5VU0VEX1RBRwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19TQ1BMX0NQTF9USU1FT1VUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0RDUExfRlNNX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfRENQTF9QT0lTT04JdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0RDUExfVU5TVVBQT1JURUQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0RDUExfQUJPUlQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9UTFBfQUJPUlQJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9ETExQX0FCT1JUCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfRUNSQ19FUlIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9CVUZfREJfRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfQlVGX1NHX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX0RBVEFfT1ZFUkZMT1cJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9IRFJfT1ZFUkZMT1cJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9NUkRfU1lTX0RST1AJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9NV1JfU1lTX0RST1AJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9NUkRfQ0xJRU5UX0RST1AJdnhnZV9tQklUKDU5KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9NV1JfQ0xJRU5UX0RST1AJdnhnZV9tQklUKDYzKQorLyoweDA3MDMwKi8JdTY0CWluaV9lcnJvcnNfbWFzazsKKy8qMHgwNzAzOCovCXU2NAlpbmlfZXJyb3JzX2FsYXJtOworLyoweDA3MDQwKi8JdTY0CWRtYV9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX1JEQVJCX0ZTTV9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfV1JBUkJfRlNNX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfV1JETUFfV1JfSERSX09WRVJGTE9XCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9XUkRNQV9XUl9IRFJfVU5ERVJGTE9XCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9XUkRNQV9XUl9EQVRBX09WRVJGTE9XCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfV1JETUFfV1JfREFUQV9VTkRFUkZMT1cJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9NU0dfV1JfSERSX09WRVJGTE9XCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfTVNHX1dSX0hEUl9VTkRFUkZMT1cJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9NU0dfV1JfREFUQV9PVkVSRkxPVwl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX01TR19XUl9EQVRBX1VOREVSRkxPVwl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1NUQVRTX1dSX0hEUl9PVkVSRkxPVwl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1NUQVRTX1dSX0hEUl9VTkRFUkZMT1cJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9TVEFUU19XUl9EQVRBX09WRVJGTE9XCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfU1RBVFNfV1JfREFUQV9VTkRFUkZMT1cJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9SVERNQV9XUl9IRFJfT1ZFUkZMT1cJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9SVERNQV9XUl9IRFJfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfUlRETUFfV1JfREFUQV9PVkVSRkxPVwl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1JURE1BX1dSX0RBVEFfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfV1JETUFfUkRfSERSX09WRVJGTE9XCXZ4Z2VfbUJJVCgyNCkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfV1JETUFfUkRfSERSX1VOREVSRkxPVwl2eGdlX21CSVQoMjUpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1JURE1BX1JEX0hEUl9PVkVSRkxPVwl2eGdlX21CSVQoMjgpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1JURE1BX1JEX0hEUl9VTkRFUkZMT1cJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RCTEdFTl9GU01fRVJSCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19EQkxHRU5fQ1JFRElUX0ZTTV9FUlIJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RCTEdFTl9ETUFfV1JSX1NNX0VSUgl2eGdlX21CSVQoMzQpCisvKjB4MDcwNDgqLwl1NjQJZG1hX2Vycm9yc19tYXNrOworLyoweDA3MDUwKi8JdTY0CWRtYV9lcnJvcnNfYWxhcm07CisvKjB4MDcwNTgqLwl1NjQJdGd0X2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1ZFTkRPUl9NU0cJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX01TR19VTkxPQ0sJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX0lMTEVHQUxfVExQX0JFCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9CT09UX1dSSVRFCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9QSUZfV1JfQ1JPU1NfUVdSQU5HRQl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfUElGX1JFQURfQ1JPU1NfUVdSQU5HRQl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfS0RGQ19SRUFECXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9VU0RDX1JFQUQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1VTRENfV1JfQ1JPU1NfUVdSQU5HRQl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfTVNJWF9CRVlPTkRfUkFOR0UJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1dSX1RPX0tERkNfUE9JU09OCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfV1JfVE9fVVNEQ19QT0lTT04JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9XUl9UT19QSUZfUE9JU09OCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfV1JfVE9fTVNJWF9QT0lTT04JdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9XUl9UT19NUklPVl9QT0lTT04JdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9OT1RfTUVNX1RMUAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1VOS05PV05fTUVNX1RMUAl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1JFUV9GU01fRVJSCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfQ1BMX0ZTTV9FUlIJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9LREZDX1BST1RfRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfU1dJRl9QUk9UX0VSUgl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX01SSU9WX01FTV9NQVBfQ0ZHX0VSUgl2eGdlX21CSVQoMjEpCisvKjB4MDcwNjAqLwl1NjQJdGd0X2Vycm9yc19tYXNrOworLyoweDA3MDY4Ki8JdTY0CXRndF9lcnJvcnNfYWxhcm07CisvKjB4MDcwNzAqLwl1NjQJY29uZmlnX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfSTJDX0lMTEVHQUxfU1RPUF9DT05ECXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0kyQ19JTExFR0FMX1NUQVJUX0NPTkQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfSTJDX0VYUF9SRF9DTlQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0kyQ19FWFRSQV9DWUNMRQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfSTJDX01BSU5fRlNNX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfSTJDX1JFUV9DT0xMSVNJT04JdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0kyQ19SRUdfRlNNX0VSUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfQ0ZHTV9JMkNfVElNRU9VVAl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfUklDX0kyQ19USU1FT1VUCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19DRkdNX0ZTTV9FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX1JJQ19GU01fRVJSCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19QSUZNX0lMTEVHQUxfQUNDRVNTCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19QSUZNX1RJTUVPVVQJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX1BJRk1fRlNNX0VSUgl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfUElGTV9UT19GU01fRVJSCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19SSUNfUklDX1JEX1RJTUVPVVQJdnhnZV9tQklUKDYzKQorLyoweDA3MDc4Ki8JdTY0CWNvbmZpZ19lcnJvcnNfbWFzazsKKy8qMHgwNzA4MCovCXU2NAljb25maWdfZXJyb3JzX2FsYXJtOworCXU4CXVudXNlZDA3MDkwWzB4MDcwOTAtMHgwNzA4OF07CisKKy8qMHgwNzA5MCovCXU2NAljcmR0X2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfUkVHX1dSQ1JEVEFSQl9GU01fRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19SRUdfV1JDUkRUQVJCX0lOVENUTF9JTExFR0FMX0NSRF9ERUFMIFwKKwkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfUkVHX1dSQ1JEVEFSQl9QREFfSUxMRUdBTF9DUkRfREVBTAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfUkVHX1dSQ1JEVEFSQl9QQ0lfTVNHX0lMTEVHQUxfQ1JEX0RFQUwgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19SRUdfUkRDUkRUQVJCX0ZTTV9FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1JFR19SRENSRFRBUkJfUkRBX0lMTEVHQUxfQ1JEX0RFQUwJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1JFR19SRENSRFRBUkJfUERBX0lMTEVHQUxfQ1JEX0RFQUwJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1JFR19SRENSRFRBUkJfREJMR0VOX0lMTEVHQUxfQ1JEX0RFQUwgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0NykKKy8qMHgwNzA5OCovCXU2NAljcmR0X2Vycm9yc19tYXNrOworLyoweDA3MGEwKi8JdTY0CWNyZHRfZXJyb3JzX2FsYXJtOworCXU4CXVudXNlZDA3MGIwWzB4MDcwYjAtMHgwNzBhOF07CisKKy8qMHgwNzBiMCovCXU2NAltcnBjaW1fZ2VuZXJhbF9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX0ZTTV9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19YR0VOX0ZTTV9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19YTUVNX0ZTTV9FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfS0RGQ0NUTF9GU01fRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX01SSU9WQ1RMX0ZTTV9FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfU1BJX0ZMU0hfRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX1NQSV9JSUNfQUNLX0VSUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19TUElfSUlDX0NIS1NVTV9FUlIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfSU5JX1NFUlJfREVUCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX0lOVENUTF9NU0lYX0ZTTV9FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfSU5UQ1RMX01TSV9PVkVSRkxPVwl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19QUElGX1BDSV9OT1RfRkxVU0hfRFVSSU5HX1NXX1JFU0VUIFwKKwkJCQkJCQl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19QUElGX1NXX1JFU0VUX0ZTTV9FUlIJdnhnZV9tQklUKDUxKQorLyoweDA3MGI4Ki8JdTY0CW1ycGNpbV9nZW5lcmFsX2Vycm9yc19tYXNrOworLyoweDA3MGMwKi8JdTY0CW1ycGNpbV9nZW5lcmFsX2Vycm9yc19hbGFybTsKKwl1OAl1bnVzZWQwNzBkMFsweDA3MGQwLTB4MDcwYzhdOworCisvKjB4MDcwZDAqLwl1NjQJcGxsX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfUExMX0VSUk9SU19SRUdfQ09SRV9DTUdfUExMX09PTAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19QTExfRVJST1JTX1JFR19DT1JFX0ZCX1BMTF9PT0wJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUExMX0VSUk9SU19SRUdfQ09SRV9YX1BMTF9PT0wJdnhnZV9tQklUKDExKQorLyoweDA3MGQ4Ki8JdTY0CXBsbF9lcnJvcnNfbWFzazsKKy8qMHgwNzBlMCovCXU2NAlwbGxfZXJyb3JzX2FsYXJtOworLyoweDA3MGU4Ki8JdTY0CXNycGNpbV90b19tcnBjaW1fYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9UT19NUlBDSU1fQUxBUk1fUkVHX1BQSUZfU1JQQ0lNX1RPX01SUENJTV9BTEFSTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwNzBmMCovCXU2NAlzcnBjaW1fdG9fbXJwY2ltX2FsYXJtX21hc2s7CisvKjB4MDcwZjgqLwl1NjQJc3JwY2ltX3RvX21ycGNpbV9hbGFybV9hbGFybTsKKy8qMHgwNzEwMCovCXU2NAl2cGF0aF90b19tcnBjaW1fYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1RPX01SUENJTV9BTEFSTV9SRUdfUFBJRl9WUEFUSF9UT19NUlBDSU1fQUxBUk0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDcxMDgqLwl1NjQJdnBhdGhfdG9fbXJwY2ltX2FsYXJtX21hc2s7CisvKjB4MDcxMTAqLwl1NjQJdnBhdGhfdG9fbXJwY2ltX2FsYXJtX2FsYXJtOworCXU4CXVudXNlZDA3MTI4WzB4MDcxMjgtMHgwNzExOF07CisKKy8qMHgwNzEyOCovCXU2NAljcmR0X2Vycm9yc192cGxhbmVfcmVnWzE3XTsKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19WUExBTkVfUkVHX1dSQ1JEVEFSQl9QX0hfQ09OU1VNRV9DUkRUX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfVlBMQU5FX1JFR19XUkNSRFRBUkJfUF9EX0NPTlNVTUVfQ1JEVF9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1ZQTEFORV9SRUdfV1JDUkRUQVJCX1BfSF9SRVRVUk5fQ1JEVF9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19WUExBTkVfUkVHX1dSQ1JEVEFSQl9QX0RfUkVUVVJOX0NSRFRfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfVlBMQU5FX1JFR19SRENSRFRBUkJfTlBfSF9DT05TVU1FX0NSRFRfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfVlBMQU5FX1JFR19SRENSRFRBUkJfTlBfSF9SRVRVUk5fQ1JEVF9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19WUExBTkVfUkVHX1JEQ1JEVEFSQl9UQUdfQ09OU1VNRV9UQUdfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfVlBMQU5FX1JFR19SRENSRFRBUkJfVEFHX1JFVFVSTl9UQUdfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMzEpCisvKjB4MDcxMzAqLwl1NjQJY3JkdF9lcnJvcnNfdnBsYW5lX21hc2tbMTddOworLyoweDA3MTM4Ki8JdTY0CWNyZHRfZXJyb3JzX3ZwbGFuZV9hbGFybVsxN107CisJdTgJdW51c2VkMDcyZjBbMHgwNzJmMC0weDA3MmMwXTsKKworLyoweDA3MmYwKi8JdTY0CW1ycGNpbV9yc3RfaW5fcHJvZzsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUlNUX0lOX1BST0dfTVJQQ0lNX1JTVF9JTl9QUk9HCXZ4Z2VfbUJJVCg3KQorLyoweDA3MmY4Ki8JdTY0CW1ycGNpbV9yZWdfbW9kaWZpZWQ7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1JFR19NT0RJRklFRF9NUlBDSU1fUkVHX01PRElGSUVECXZ4Z2VfbUJJVCg3KQorCisJdTgJdW51c2VkMDczNzhbMHgwNzM3OC0weDA3MzAwXTsKKworLyoweDA3Mzc4Ki8JdTY0CXdyaXRlX2FyYl9wZW5kaW5nOworI2RlZmluZQlWWEdFX0hXX1dSSVRFX0FSQl9QRU5ESU5HX1dSQVJCX1dSRE1BCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1dSSVRFX0FSQl9QRU5ESU5HX1dSQVJCX1JURE1BCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1dSSVRFX0FSQl9QRU5ESU5HX1dSQVJCX01TRwl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfV1JJVEVfQVJCX1BFTkRJTkdfV1JBUkJfU1RBVFNCCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19XUklURV9BUkJfUEVORElOR19XUkFSQl9JTlRDVEwJdnhnZV9tQklUKDE5KQorLyoweDA3MzgwKi8JdTY0CXJlYWRfYXJiX3BlbmRpbmc7CisjZGVmaW5lCVZYR0VfSFdfUkVBRF9BUkJfUEVORElOR19SREFSQl9XUkRNQQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SRUFEX0FSQl9QRU5ESU5HX1JEQVJCX1JURE1BCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JFQURfQVJCX1BFTkRJTkdfUkRBUkJfREJMR0VOCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwNzM4OCovCXU2NAlkbWFpZl9kbWFkYmxfcGVuZGluZzsKKyNkZWZpbmUJVlhHRV9IV19ETUFJRl9ETUFEQkxfUEVORElOR19ETUFJRl9XUkRNQV9XUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19ETUFJRl9ETUFEQkxfUEVORElOR19ETUFJRl9XUkRNQV9SRAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19ETUFJRl9ETUFEQkxfUEVORElOR19ETUFJRl9SVERNQV9XUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19ETUFJRl9ETUFEQkxfUEVORElOR19ETUFJRl9SVERNQV9SRAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19ETUFJRl9ETUFEQkxfUEVORElOR19ETUFJRl9NU0dfV1IJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfRE1BSUZfRE1BREJMX1BFTkRJTkdfRE1BSUZfU1RBVFNfV1IJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfRE1BSUZfRE1BREJMX1BFTkRJTkdfREJMR0VOX0lOX1BST0codmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTMsIDUxKQorLyoweDA3MzkwKi8JdTY0CXdyY3JkdGFyYl9zdGF0dXMwX3ZwbGFuZVsxN107CisjZGVmaW5lCVZYR0VfSFdfV1JDUkRUQVJCX1NUQVRVUzBfVlBMQU5FX1dSQ1JEVEFSQl9BQlNfQVZBSUxfUF9IKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisvKjB4MDc0MTgqLwl1NjQJd3JjcmR0YXJiX3N0YXR1czFfdnBsYW5lWzE3XTsKKyNkZWZpbmUJVlhHRV9IV19XUkNSRFRBUkJfU1RBVFVTMV9WUExBTkVfV1JDUkRUQVJCX0FCU19BVkFJTF9QX0QodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNCwgMTIpCisJdTgJdW51c2VkMDc1MDBbMHgwNzUwMC0weDA3NGEwXTsKKworLyoweDA3NTAwKi8JdTY0CW1ycGNpbV9nZW5lcmFsX2NmZzE7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMV9DTEVBUl9TRVJSCXZ4Z2VfbUJJVCg3KQorLyoweDA3NTA4Ki8JdTY0CW1ycGNpbV9nZW5lcmFsX2NmZzI7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9JTlNfVFhfV1JfVEQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9JTlNfVFhfUkRfVEQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9JTlNfVFhfQ1BMX1RECXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0lOSV9USU1FT1VUX0VOX01XUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9JTklfVElNRU9VVF9FTl9NUkQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfSUdOT1JFX1ZQQVRIX1JTVF9GT1JfTVNJWAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9GTEFTSF9SRUFEX01TQgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9ESVNfSE9TVF9QSVBFTElORV9XUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9NUlBDSU1fU1RBVFNfRU5BQkxFCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX01SUENJTV9TVEFUU19NQVBfVE9fVlBBVEgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDcsIDUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9FTl9CTE9DS19NU0lYX0RVRV9UT19TRVJSCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0ZPUkNFX1NFTkRJTkdfSU5UQQl2eGdlX21CSVQoNTkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9ESVNfU1dJRl9QUk9UX09OX1JEUwl2eGdlX21CSVQoNjMpCisvKjB4MDc1MTAqLwl1NjQJbXJwY2ltX2dlbmVyYWxfY2ZnMzsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX1BST1RFQ1RJT05fQ0FfT1JfVU5TVVBOCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfSUxMRUdBTF9SRF9DQV9PUl9VTlNVUE4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19SRF9CWVRFX1NXQVBFTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX1JEX0JJVF9GTElQRU4JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfV1JfQllURV9TV0FQRU4JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfV1JfQklUX0ZMSVBFTgl2eGdlX21CSVQoMTkpCisjZGVmaW5lIFZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19NUl9NQVhfTVZGUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX01SX01WRl9UQkxfU0laRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19QRjBfU1dfUkVTRVRfRU4JdnhnZV9tQklUKDU1KQorI2RlZmluZSBWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfUkVHX01PRElGSUVEX0NGRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU2LCAyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfQ1BMX0VDQ19FTkFCTEVfTgl2eGdlX21CSVQoNTkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19CWVBBU1NfREFJU1lfQ0hBSU4JdnhnZV9tQklUKDYzKQorLyoweDA3NTE4Ki8JdTY0CW1ycGNpbV9zdGF0c19zdGFydF9ob3N0X2FkZHI7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1NUQVRTX1NUQVJUX0hPU1RfQUREUl9NUlBDSU1fU1RBVFNfU1RBUlRfSE9TVF9BRERSKHZhbClcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNTcpCisKKwl1OAl1bnVzZWQwNzk1MFsweDA3OTUwLTB4MDc1MjBdOworCisvKjB4MDc5NTAqLwl1NjQJcmRjcmR0YXJiX2NmZzA7CisjZGVmaW5lIFZYR0VfSFdfUkRDUkRUQVJCX0NGRzBfUkRBX01BWF9PVVRTVEFORElOR19SRFModmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOCwgNikKKyNkZWZpbmUgVlhHRV9IV19SRENSRFRBUkJfQ0ZHMF9QREFfTUFYX09VVFNUQU5ESU5HX1JEUyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI2LCA2KQorI2RlZmluZSBWWEdFX0hXX1JEQ1JEVEFSQl9DRkcwX0RCTEdFTl9NQVhfT1VUU1RBTkRJTkdfUkRTKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMzQsIDYpCisjZGVmaW5lIFZYR0VfSFdfUkRDUkRUQVJCX0NGRzBfV0FJVF9DTlQodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SRENSRFRBUkJfQ0ZHMF9NQVhfT1VUU1RBTkRJTkdfUkRTKHZhbCkgdnhnZV92QklUKHZhbCwgNTQsIDYpCisjZGVmaW5lCVZYR0VfSFdfUkRDUkRUQVJCX0NGRzBfRU5fWE9OCXZ4Z2VfbUJJVCg2MykKKwl1OAl1bnVzZWQwN2JlOFsweDA3YmU4LTB4MDc5NThdOworCisvKjB4MDdiZTgqLwl1NjQJYmZfc3dfcmVzZXQ7CisjZGVmaW5lIFZYR0VfSFdfQkZfU1dfUkVTRVRfQkZfU1dfUkVTRVQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorLyoweDA3YmYwKi8JdTY0CXN3X3Jlc2V0X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19TV19SRVNFVF9TVEFUVVNfUkVTRVRfQ01QTFQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfU1dfUkVTRVRfU1RBVFVTX0lOSVRfQ01QTFQJdnhnZV9tQklUKDE1KQorCXU4CXVudXNlZDA3ZDMwWzB4MDdkMzAtMHgwN2JmOF07CisKKy8qMHgwN2QzMCovCXU2NAltcnBjaW1fZGVidWdfc3RhdHMwOworI2RlZmluZSBWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzBfSU5JX1dSX0RST1AodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUgVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMwX0lOSV9SRF9EUk9QKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA3ZDM4Ki8JdTY0CW1ycGNpbV9kZWJ1Z19zdGF0czFfdnBsYW5lWzE3XTsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMxX1ZQTEFORV9XUkNSRFRBUkJfUEhfQ1JEVF9ERVBMRVRFRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDdkYzAqLwl1NjQJbXJwY2ltX2RlYnVnX3N0YXRzMl92cGxhbmVbMTddOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzJfVlBMQU5FX1dSQ1JEVEFSQl9QRF9DUkRUX0RFUExFVEVEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwN2U0OCovCXU2NAltcnBjaW1fZGVidWdfc3RhdHMzX3ZwbGFuZVsxN107CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTM19WUExBTkVfUkRDUkRUQVJCX05QSF9DUkRUX0RFUExFVEVEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwN2VkMCovCXU2NAltcnBjaW1fZGVidWdfc3RhdHM0OworI2RlZmluZSBWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzRfSU5JX1dSX1ZQSU5fRFJPUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzRfSU5JX1JEX1ZQSU5fRFJPUCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDdlZDgqLwl1NjQJZ2Vuc3RhdHNfY291bnQwMTsKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DT1VOVDAxX0dFTlNUQVRTX0NPVU5UMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NPVU5UMDFfR0VOU1RBVFNfQ09VTlQwKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA3ZWUwKi8JdTY0CWdlbnN0YXRzX2NvdW50MjM7CisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ09VTlQyM19HRU5TVEFUU19DT1VOVDModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DT1VOVDIzX0dFTlNUQVRTX0NPVU5UMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwN2VlOCovCXU2NAlnZW5zdGF0c19jb3VudDQ7CisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ09VTlQ0X0dFTlNUQVRTX0NPVU5UNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwN2VmMCovCXU2NAlnZW5zdGF0c19jb3VudDU7CisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ09VTlQ1X0dFTlNUQVRTX0NPVU5UNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKworCXU4CXVudXNlZDA3ZjA4WzB4MDdmMDgtMHgwN2VmOF07CisKKy8qMHgwN2YwOCovCXU2NAlnZW5zdGF0c19jZmdbNl07CisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ0ZHX0RUWVBFX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ0ZHX0NMSUVOVF9OT19TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCA5LCAzKQorI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NGR19XUl9SRF9DUExfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgMTQsIDIpCisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ0ZHX1ZQQVRIX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMxLCAxNykKKy8qMHgwN2YzOCovCXU2NAlnZW5zdGF0XzY0Yml0X2NmZzsKKyNkZWZpbmUJVlhHRV9IV19HRU5TVEFUXzY0QklUX0NGR19FTl9GT1JfR0VOU1RBVFMwCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0dFTlNUQVRfNjRCSVRfQ0ZHX0VOX0ZPUl9HRU5TVEFUUzIJdnhnZV9tQklUKDcpCisJdTgJdW51c2VkMDgwMDBbMHgwODAwMC0weDA3ZjQwXTsKKy8qMHgwODAwMCovCXU2NAlnY21nM19pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0dDTUczX0lOVF9TVEFUVVNfR1NUQ19FUlIwX0dTVEMwX0lOVAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19HQ01HM19JTlRfU1RBVFVTX0dTVENfRVJSMV9HU1RDMV9JTlQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzNfSU5UX1NUQVRVU19HSDJMX0VSUjBfR0gyTDBfSU5UCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0dDTUczX0lOVF9TVEFUVVNfR0hTUV9FUlJfR0gyTDFfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0dDTUczX0lOVF9TVEFUVVNfR0hTUV9FUlIyX0dIMkwyX0lOVAl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19HQ01HM19JTlRfU1RBVFVTX0dIMkxfU01FUlIwX0dIMkwzX0lOVAl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19HQ01HM19JTlRfU1RBVFVTX0dIU1FfRVJSM19HSDJMNF9JTlQJdnhnZV9tQklUKDYpCisvKjB4MDgwMDgqLwl1NjQJZ2NtZzNfaW50X21hc2s7CisJdTgJdW51c2VkMDkwMDBbMHgwOTAwMC0weDgwMTBdOworCisvKjB4MDkwMDAqLwl1NjQJZzNpZmNtZF9mYl9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0czSUZDTURfRkJfSU5UX1NUQVRVU19FUlJfRzNJRl9JTlQJdnhnZV9tQklUKDApCisvKjB4MDkwMDgqLwl1NjQJZzNpZmNtZF9mYl9pbnRfbWFzazsKKy8qMHgwOTAxMCovCXU2NAlnM2lmY21kX2ZiX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9GQl9FUlJfUkVHX0czSUZfQ0tfRExMX0xPQ0sJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9GQl9FUlJfUkVHX0czSUZfU01fRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX0czSUZDTURfRkJfRVJSX1JFR19HM0lGX1JXRFFTX0RMTF9MT0NLKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9GQl9FUlJfUkVHX0czSUZfSU9DQUxfRkFVTFQJdnhnZV9tQklUKDU1KQorLyoweDA5MDE4Ki8JdTY0CWczaWZjbWRfZmJfZXJyX21hc2s7CisvKjB4MDkwMjAqLwl1NjQJZzNpZmNtZF9mYl9lcnJfYWxhcm07CisKKwl1OAl1bnVzZWQwOTQwMFsweDA5NDAwLTB4MDkwMjhdOworCisvKjB4MDk0MDAqLwl1NjQJZzNpZmNtZF9jbXVfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0NNVV9JTlRfU1RBVFVTX0VSUl9HM0lGX0lOVAl2eGdlX21CSVQoMCkKKy8qMHgwOTQwOCovCXU2NAlnM2lmY21kX2NtdV9pbnRfbWFzazsKKy8qMHgwOTQxMCovCXU2NAlnM2lmY21kX2NtdV9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0czSUZDTURfQ01VX0VSUl9SRUdfRzNJRl9DS19ETExfTE9DSwl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0NNVV9FUlJfUkVHX0czSUZfU01fRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX0czSUZDTURfQ01VX0VSUl9SRUdfRzNJRl9SV0RRU19ETExfTE9DSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0NNVV9FUlJfUkVHX0czSUZfSU9DQUxfRkFVTFQJdnhnZV9tQklUKDU1KQorLyoweDA5NDE4Ki8JdTY0CWczaWZjbWRfY211X2Vycl9tYXNrOworLyoweDA5NDIwKi8JdTY0CWczaWZjbWRfY211X2Vycl9hbGFybTsKKworCXU4CXVudXNlZDA5ODAwWzB4MDk4MDAtMHgwOTQyOF07CisKKy8qMHgwOTgwMCovCXU2NAlnM2lmY21kX2NtbF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0czSUZDTURfQ01MX0lOVF9TVEFUVVNfRVJSX0czSUZfSU5UCXZ4Z2VfbUJJVCgwKQorLyoweDA5ODA4Ki8JdTY0CWczaWZjbWRfY21sX2ludF9tYXNrOworLyoweDA5ODEwKi8JdTY0CWczaWZjbWRfY21sX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9DTUxfRVJSX1JFR19HM0lGX0NLX0RMTF9MT0NLCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0czSUZDTURfQ01MX0VSUl9SRUdfRzNJRl9TTV9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfRzNJRkNNRF9DTUxfRVJSX1JFR19HM0lGX1JXRFFTX0RMTF9MT0NLKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9DTUxfRVJSX1JFR19HM0lGX0lPQ0FMX0ZBVUxUCXZ4Z2VfbUJJVCg1NSkKKy8qMHgwOTgxOCovCXU2NAlnM2lmY21kX2NtbF9lcnJfbWFzazsKKy8qMHgwOTgyMCovCXU2NAlnM2lmY21kX2NtbF9lcnJfYWxhcm07CisJdTgJdW51c2VkMDliMDBbMHgwOWIwMC0weDA5ODI4XTsKKworLyoweDA5YjAwKi8JdTY0CXZwYXRoX3RvX3ZwbGFuZV9tYXBbMTddOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1RPX1ZQTEFORV9NQVBfVlBBVEhfVE9fVlBMQU5FX01BUCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorCXU4CXVudXNlZDA5YzMwWzB4MDljMzAtMHgwOWI4OF07CisKKy8qMHgwOWMzMCovCXU2NAl4Z3hzX2NmZ19wb3J0WzJdOworI2RlZmluZSBWWEdFX0hXX1hHWFNfQ0ZHX1BPUlRfU0lHX0RFVEVDVF9GT1JDRV9MT1ModmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0NGR19QT1JUX1NJR19ERVRFQ1RfRk9SQ0VfVkFMSUQodmFsKSB2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUJVlhHRV9IV19YR1hTX0NGR19QT1JUX1NFTF9JTkZPXzAJdnhnZV9tQklUKDI3KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfQ0ZHX1BPUlRfU0VMX0lORk9fMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI5LCAzKQorI2RlZmluZSBWWEdFX0hXX1hHWFNfQ0ZHX1BPUlRfVFhfTEFORTBfU0tFVyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA0KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfQ0ZHX1BPUlRfVFhfTEFORTFfU0tFVyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM2LCA0KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfQ0ZHX1BPUlRfVFhfTEFORTJfU0tFVyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCA0KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfQ0ZHX1BPUlRfVFhfTEFORTNfU0tFVyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ0LCA0KQorLyoweDA5YzQwKi8JdTY0CXhneHNfcnhiZXJfY2ZnX3BvcnRbMl07CisjZGVmaW5lIFZYR0VfSFdfWEdYU19SWEJFUl9DRkdfUE9SVF9JTlRFUlZBTF9EVVIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0KQorI2RlZmluZQlWWEdFX0hXX1hHWFNfUlhCRVJfQ0ZHX1BPUlRfUlhHWFNfSU5URVJWQUxfQ05UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA0OCkKKy8qMHgwOWM1MCovCXU2NAl4Z3hzX3J4YmVyX3N0YXR1c19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX1hHWFNfUlhCRVJfU1RBVFVTX1BPUlRfUlhHWFNfUlhHWFNfTEFORV9BX0VSUl9DTlQodmFsKQlcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfWEdYU19SWEJFUl9TVEFUVVNfUE9SVF9SWEdYU19SWEdYU19MQU5FX0JfRVJSX0NOVCh2YWwpCVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfWEdYU19SWEJFUl9TVEFUVVNfUE9SVF9SWEdYU19SWEdYU19MQU5FX0NfRVJSX0NOVCh2YWwpCVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfWEdYU19SWEJFUl9TVEFUVVNfUE9SVF9SWEdYU19SWEdYU19MQU5FX0RfRVJSX0NOVCh2YWwpCVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDljNjAqLwl1NjQJeGd4c19zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19UWF9BQ1RJVklUWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfUlhfQUNUSVZJVFkodmFsKSB2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZQlWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX0NUQ19GSUZPX0VSUglCSVQoMTEpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfQllURV9TWU5DX0xPU1QodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfQ1RDX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZQlWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX0FMSUdOTUVOVF9FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZSBWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX0RFQ19FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19TS0lQX0lOU19SRVEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDQpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfU0tJUF9ERUxfUkVRKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM2LCA0KQorLyoweDA5YzcwKi8JdTY0CXhneHNfcG1hX3Jlc2V0X3BvcnRbMl07CisjZGVmaW5lIFZYR0VfSFdfWEdYU19QTUFfUkVTRVRfUE9SVF9TRVJERVNfUkVTRVQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorCXU4CXVudXNlZDA5YzkwWzB4MDljOTAtMHgwOWM4MF07CisKKy8qMHgwOWM5MCovCXU2NAl4Z3hzX3N0YXRpY19jZmdfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19YR1hTX1NUQVRJQ19DRkdfUE9SVF9GV19DVFJMX1NFUkRFUwl2eGdlX21CSVQoMykKKwl1OAl1bnVzZWQwOWQ0MFsweDA5ZDQwLTB4MDljYTBdOworCisvKjB4MDlkNDAqLwl1NjQJeGd4c19pbmZvX3BvcnRbMl07CisjZGVmaW5lIFZYR0VfSFdfWEdYU19JTkZPX1BPUlRfWE1BQ0pfSU5GT18wKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19JTkZPX1BPUlRfWE1BQ0pfSU5GT18xKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA5ZDUwKi8JdTY0CXJhdGVtZ210X2NmZ19wb3J0WzJdOworI2RlZmluZSBWWEdFX0hXX1JBVEVNR01UX0NGR19QT1JUX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCAyLCAyKQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0NGR19QT1JUX1JBVEUJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQ0ZHX1BPUlRfRklYRURfVVNFX0ZTTQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQ0ZHX1BPUlRfQU5UUF9VU0VfRlNNCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9DRkdfUE9SVF9BTkJFX1VTRV9GU00JdnhnZV9tQklUKDE5KQorLyoweDA5ZDYwKi8JdTY0CXJhdGVtZ210X3N0YXR1c19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX1NUQVRVU19QT1JUX1JBVEVNR01UX0NPTVBMRVRFCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX1NUQVRVU19QT1JUX1JBVEVNR01UX1JBVEUJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfU1RBVFVTX1BPUlRfUkFURU1HTVRfTUFDX01BVENIRVNfUEhZCXZ4Z2VfbUJJVCgxMSkKKwl1OAl1bnVzZWQwOWQ4MFsweDA5ZDgwLTB4MDlkNzBdOworCisvKjB4MDlkODAqLwl1NjQJcmF0ZW1nbXRfZml4ZWRfY2ZnX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfRklYRURfQ0ZHX1BPUlRfUkVTVEFSVAl2eGdlX21CSVQoNykKKy8qMHgwOWQ5MCovCXU2NAlyYXRlbWdtdF9hbnRwX2NmZ19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOVFBfQ0ZHX1BPUlRfUkVTVEFSVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTlRQX0NGR19QT1JUX1VTRV9QUkVBTUJMRV9FWFRfUEhZCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTlRQX0NGR19QT1JUX1VTRV9BQ1RfU0VMCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUgVlhHRV9IV19SQVRFTUdNVF9BTlRQX0NGR19QT1JUX1RfUkVUUllfUEhZX1FVRVJZKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOVFBfQ0ZHX1BPUlRfVF9XQUlUX01ESU9fUkVTUE9OU0UodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5UUF9DRkdfUE9SVF9UX0xET1dOX1JFQVVUT19SRVNQT05TRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTlRQX0NGR19QT1JUX0FEVkVSVElTRV8xMEcJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOVFBfQ0ZHX1BPUlRfQURWRVJUSVNFXzFHCXZ4Z2VfbUJJVCgzNSkKKy8qMHgwOWRhMCovCXU2NAlyYXRlbWdtdF9hbmJlX2NmZ19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOQkVfQ0ZHX1BPUlRfUkVTVEFSVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTkJFX0NGR19QT1JUX1BBUkFMTEVMX0RFVEVDVF8xMEdfS1g0X0VOQUJMRSBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTkJFX0NGR19QT1JUX1BBUkFMTEVMX0RFVEVDVF8xR19LWF9FTkFCTEUgXAorCQkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lIFZYR0VfSFdfUkFURU1HTVRfQU5CRV9DRkdfUE9SVF9UX1NZTkNfMTBHX0tYNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZSBWWEdFX0hXX1JBVEVNR01UX0FOQkVfQ0ZHX1BPUlRfVF9TWU5DXzFHX0tYKHZhbCkgdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lIFZYR0VfSFdfUkFURU1HTVRfQU5CRV9DRkdfUE9SVF9UX0RNRV9FWENIQU5HRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA0KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOQkVfQ0ZHX1BPUlRfQURWRVJUSVNFXzEwR19LWDQJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOQkVfQ0ZHX1BPUlRfQURWRVJUSVNFXzFHX0tYCXZ4Z2VfbUJJVCgzNSkKKy8qMHgwOWRiMCovCXU2NAlhbmJlX2NmZ19wb3J0WzJdOworI2RlZmluZSBWWEdFX0hXX0FOQkVfQ0ZHX1BPUlRfUkVTRVRfQ0ZHX1JFR1ModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX0FOQkVfQ0ZHX1BPUlRfQUxJR05fMTBHX0tYNF9PVkVSUklERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEwLCAyKQorI2RlZmluZSBWWEdFX0hXX0FOQkVfQ0ZHX1BPUlRfU1lOQ18xR19LWF9PVkVSUklERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE0LCAyKQorLyoweDA5ZGMwKi8JdTY0CWFuYmVfbWdyX2N0cmxfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19BTkJFX01HUl9DVFJMX1BPUlRfV0UJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9NR1JfQ1RSTF9QT1JUX1NUUk9CRQl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19BTkJFX01HUl9DVFJMX1BPUlRfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE1LCA5KQorI2RlZmluZSBWWEdFX0hXX0FOQkVfTUdSX0NUUkxfUE9SVF9EQVRBKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDA5ZGUwWzB4MDlkZTAtMHgwOWRkMF07CisKKy8qMHgwOWRlMCovCXU2NAlhbmJlX2Z3X21zdHJfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0ZXX01TVFJfUE9SVF9DT05ORUNUX0JFQU5fVE9fU0VSREVTCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfRldfTVNUUl9QT1JUX1RYX1pFUk9FU19UT19TRVJERVMJdnhnZV9tQklUKDcpCisvKjB4MDlkZjAqLwl1NjQJYW5iZV9od2ZzbV9nZW5fc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQ0hPU0VfMTBHX0tYNF9VU0lOR19QRCBcCisJCQkJCQkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQ0hPU0VfMTBHX0tYNF9VU0lOR19ETUUgXAorCQkJCQkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0NIT1NFXzFHX0tYX1VTSU5HX1BEIFwKKwkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQ0hPU0VfMUdfS1hfVVNJTkdfRE1FIFwKKwkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQU5CRUZTTV9TVEFURSh2YWwpCVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOCwgNikKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CRUFOX05FWFRfUEFHRV9SRUNFSVZFRCBcCisJCQkJCQkJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0JFQU5fQkFTRV9QQUdFX1JFQ0VJVkVEIFwKKwkJCQkJCQl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQkVBTl9BVVRPTkVHX0NPTVBMRVRFIFwKKwkJCQkJCQl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVU5FWFBFQ1RFRF9OUF9CRUZPUkVfQlAgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJXAorVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9VTkVYUEVDVEVEX0FOX0NPTVBMRVRFX0JFRk9SRV9CUCBcCisJCQkJCQkJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlcCitWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1VORVhQRUNURURfQU5fQ09NUExFVEVfQkVGT1JFX05QIFwKK3Z4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJXAorVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9VTkVYUEVDVEVEX01PREVfV0hFTl9BTl9DT01QTEVURSBcCisJCQkJCQkJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0NPVU5UX0JQKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU2LCA0KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0NPVU5UX05QKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDYwLCA0KQorLyoweDA5ZTAwKi8JdTY0CWFuYmVfaHdmc21fYnBfc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9GRUNfRU5BQkxFIFwKKwkJCQkJCQl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9GRUNfQUJJTElUWSBcCisJCQkJCQkJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfMTBHX0tSX0NBUEFCTEUgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MCkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQXzEwR19LWDRfQ0FQQUJMRSBcCisJCQkJCQkJdnhnZV9tQklUKDQxKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfMUdfS1hfQ0FQQUJMRSBcCisJCQkJCQkJdnhnZV9tQklUKDQyKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfVFhfTk9OQ0UodmFsKQlcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9OUAl2eGdlX21CSVQoNDgpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9BQ0sJdnhnZV9tQklUKDQ5KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfUkVNT1RFX0ZBVUxUIFwKKwkJCQkJCQl2eGdlX21CSVQoNTApCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9BU01fRElSCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX1BBVVNFCXZ4Z2VfbUJJVCg1MykKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX0VDSE9FRF9OT05DRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NCwgNSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX1NFTEVDVE9SX0ZJRUxEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDA5ZTEwKi8JdTY0CWFuYmVfaHdmc21fbnBfc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9OUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9OUF9CSVRTXzQ3X1RPXzMyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX05QX1NUQVRVU19QT1JUX1JBVEVNR01UX05QX0JJVFNfMzFfVE9fMCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDllMzBbMHgwOWUzMC0weDA5ZTIwXTsKKworLyoweDA5ZTMwKi8JdTY0CWFudHBfZ2VuX2NmZ19wb3J0WzJdOworLyoweDA5ZTQwKi8JdTY0CWFudHBfaHdmc21fZ2VuX3N0YXR1c19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0NIT1NFXzEwRwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DSE9TRV8xRwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9BTlRQRlNNX1NUQVRFKHZhbCkJXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEwLCA2KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0FVVE9ORUdfQ09NUExFVEUgXAorCQkJCQkJCQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVU5FWFBFQ1RFRF9OT19MUF9YTlAgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9HT1RfTFBfWE5QCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9VTkVYUEVDVEVEX01FU1NBR0VfQ09ERSBcCisJCQkJCQkJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1VORVhQRUNURURfTk9fSENEIFwKKwkJCQkJCQl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfRk9VTkRfSENECXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9VTkVYUEVDVEVEX0lOVkFMSURfUkFURSBcCisJCQkJCQkJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1ZBTElEX1JBVEUJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1BFUlNJU1RFTlRfTERPV04gXAorCQkJCQkJCXZ4Z2VfbUJJVCg1OSkKKy8qMHgwOWU1MCovCXU2NAlhbnRwX2h3ZnNtX2JwX3N0YXR1c19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfTlAJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9BQ0sJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9SRgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX1hOUAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX0FCSUxJVFlfRklFTEQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNCwgNykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX1NFTEVDVE9SX0ZJRUxEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorLyoweDA5ZTYwKi8JdTY0CWFudHBfaHdmc21feG5wX3N0YXR1c19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fWE5QX1NUQVRVU19QT1JUX1JBVEVNR01UX1hOUF9OUAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX1hOUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9YTlBfQUNLCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fWE5QX1NUQVRVU19QT1JUX1JBVEVNR01UX1hOUF9NUAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX1hOUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9YTlBfQUNLMgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX1hOUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9YTlBfVE9HR0xFCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fWE5QX1NUQVRVU19QT1JUX1JBVEVNR01UX1hOUF9NRVNTQUdFX0NPREUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNSwgMTEpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9YTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfWE5QX1VORl9DT0RFX0ZJRUxEMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9YTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfWE5QX1VORl9DT0RFX0ZJRUxEMih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisvKjB4MDllNzAqLwl1NjQJbWRpb19tZ3JfYWNjZXNzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfU1RST0JFX09ORQlCSVQoMykKKyNkZWZpbmUgVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9PUF9UWVBFKHZhbCkgdnhnZV92QklUKHZhbCwgNSwgMykKKyNkZWZpbmUgVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9ERVZBRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfREFUQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUgVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9TVF9QQVRURVJOKHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDIpCisjZGVmaW5lCVZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfUFJFQU1CTEUJdnhnZV9tQklUKDUxKQorI2RlZmluZSBWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX1BSVEFEKHZhbCkgdnhnZV92QklUKHZhbCwgNTUsIDUpCisjZGVmaW5lCVZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfU1RST0JFX1RXTwl2eGdlX21CSVQoNjMpCisJdTgJdW51c2VkMGEyMDBbMHgwYTIwMC0weDA5ZTgwXTsKKy8qMHgwYTIwMCovCXU2NAl4bWFjX3ZzcG9ydF9jaG9pY2VzX3ZoWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1ZTUE9SVF9DSE9JQ0VTX1ZIX1ZTUE9SVF9WRUNUT1IodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwYTQwMFsweDBhNDAwLTB4MGEyODhdOworCisvKjB4MGE0MDAqLwl1NjQJcnhfdGhyZXNoX2NmZ192cFsxN107CisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19WUF9QQVVTRV9MT1dfVEhSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1ZQX1BBVVNFX0hJR0hfVEhSKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1ZQX1JFRF9USFJfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfVlBfUkVEX1RIUl8xKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19WUF9SRURfVEhSXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1ZQX1JFRF9USFJfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCA4KQorCXU4CXVudXNlZDBhYzkwWzB4MGFjOTAtMHgwYTQ4OF07Cit9IF9fcGFja2VkOworCisvKlZYR0VfSFdfU1JQQ0lNX1JFR1NfSCovCitzdHJ1Y3QgdnhnZV9od19zcnBjaW1fcmVnIHsKKworLyoweDAwMDAwKi8JdTY0CXRpbV9tcjJzcl9yZXNvdXJjZV9hc3NpZ25tZW50X3ZoOworI2RlZmluZQlWWEdFX0hXX1RJTV9NUjJTUl9SRVNPVVJDRV9BU1NJR05NRU5UX1ZIX0JNQVBfUk9PVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAzMikKKwl1OAl1bnVzZWQwMDEwMFsweDAwMTAwLTB4MDAwMDhdOworCisvKjB4MDAxMDAqLwl1NjQJc3JwY2ltX3BjaXBpZl9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9QQ0lQSUZfSU5UX1NUQVRVU19NUlBDSU1fTVNHX01SUENJTV9NU0dfSU5UCUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9QQ0lQSUZfSU5UX1NUQVRVU19WUEFUSF9NU0dfVlBBVEhfTVNHX0lOVAlCSVQoNykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fUENJUElGX0lOVF9TVEFUVVNfU1JQQ0lNX1NQQVJFX1IxX1NSUENJTV9TUEFSRV9SMV9JTlQgXAorCQkJCQkJCQkJQklUKDExKQorLyoweDAwMTA4Ki8JdTY0CXNycGNpbV9wY2lwaWZfaW50X21hc2s7CisvKjB4MDAxMTAqLwl1NjQJbXJwY2ltX21zZ19yZWc7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX01TR19SRUdfU1dJRl9NUlBDSU1fVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgzKQorLyoweDAwMTE4Ki8JdTY0CW1ycGNpbV9tc2dfbWFzazsKKy8qMHgwMDEyMCovCXU2NAltcnBjaW1fbXNnX2FsYXJtOworLyoweDAwMTI4Ki8JdTY0CXZwYXRoX21zZ19yZWc7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMF9UT19TUlBDSU1fUk1TR19JTlQJQklUKDApCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMV9UT19TUlBDSU1fUk1TR19JTlQJQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMl9UT19TUlBDSU1fUk1TR19JTlQJQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIM19UT19TUlBDSU1fUk1TR19JTlQJQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRINF9UT19TUlBDSU1fUk1TR19JTlQJQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRINV9UT19TUlBDSU1fUk1TR19JTlQJQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRINl9UT19TUlBDSU1fUk1TR19JTlQJQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIN19UT19TUlBDSU1fUk1TR19JTlQJQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIOF9UT19TUlBDSU1fUk1TR19JTlQJQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIOV9UT19TUlBDSU1fUk1TR19JTlQJQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMTBfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgxMV9UT19TUlBDSU1fUk1TR19JTlQJQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDEyX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMTNfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgxNF9UT19TUlBDSU1fUk1TR19JTlQJQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDE1X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMTZfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgxNikKKy8qMHgwMDEzMCovCXU2NAl2cGF0aF9tc2dfbWFzazsKKy8qMHgwMDEzOCovCXU2NAl2cGF0aF9tc2dfYWxhcm07CisJdTgJdW51c2VkMDAxNjBbMHgwMDE2MC0weDAwMTQwXTsKKworLyoweDAwMTYwKi8JdTY0CXNycGNpbV90b19tcnBjaW1fd21zZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fVE9fTVJQQ0lNX1dNU0dfU1JQQ0lNX1RPX01SUENJTV9XTVNHKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMTY4Ki8JdTY0CXNycGNpbV90b19tcnBjaW1fd21zZ190cmlnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9UT19NUlBDSU1fV01TR19UUklHX1NSUENJTV9UT19NUlBDSU1fV01TR19UUklHCUJJVCgwKQorLyoweDAwMTcwKi8JdTY0CW1ycGNpbV90b19zcnBjaW1fcm1zZzsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fVE9fU1JQQ0lNX1JNU0dfU1dJRl9NUlBDSU1fVE9fU1JQQ0lNX1JNU0codmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAxNzgqLwl1NjQJdnBhdGhfdG9fc3JwY2ltX3Jtc2dfc2VsOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1RPX1NSUENJTV9STVNHX1NFTF9WUEFUSF9UT19TUlBDSU1fUk1TR19TRUwodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNSkKKy8qMHgwMDE4MCovCXU2NAl2cGF0aF90b19zcnBjaW1fcm1zZzsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9UT19TUlBDSU1fUk1TR19TV0lGX1ZQQVRIX1RPX1NSUENJTV9STVNHKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCXU4CXVudXNlZDAwMjAwWzB4MDAyMDAtMHgwMDE4OF07CisKKy8qMHgwMDIwMCovCXU2NAlzcnBjaW1fZ2VuZXJhbF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUElDX0lOVAlCSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1BDSV9JTlQJQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19YTUFDX0lOVAlCSVQoNykKKwl1OAl1bnVzZWQwMDIxMFsweDAwMjEwLTB4MDAyMDhdOworCisvKjB4MDAyMTAqLwl1NjQJc3JwY2ltX2dlbmVyYWxfaW50X21hc2s7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUElDX0lOVAlCSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9JTlRfTUFTS19QQ0lfSU5UCUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0lOVF9NQVNLX1hNQUNfSU5UCUJJVCg3KQorCXU4CXVudXNlZDAwMjIwWzB4MDAyMjAtMHgwMDIxOF07CisKKy8qMHgwMDIyMCovCXU2NAlzcnBjaW1fcHBpZl9pbnRfc3RhdHVzOworCisvKjB4MDAyMjgqLwl1NjQJc3JwY2ltX3BwaWZfaW50X21hc2s7CisvKjB4MDAyMzAqLwl1NjQJc3JwY2ltX2dlbl9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5fRVJST1JTX1JFR19QQ0lDT05GSUdfUEZfU1RBVFVTX0VSUglCSVQoMykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VOX0VSUk9SU19SRUdfUENJQ09ORklHX1BGX1VOQ09SX0VSUglCSVQoNykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VOX0VSUk9SU19SRUdfUENJQ09ORklHX1BGX0NPUl9FUlIJQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5fRVJST1JTX1JFR19JTlRDVFJMX1NDSEVEX0lOVAlCSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTl9FUlJPUlNfUkVHX0lOSV9TRVJSX0RFVAlCSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTl9FUlJPUlNfUkVHX1RHVF9QRl9JTExFR0FMX0FDQ0VTUwlCSVQoMjMpCisvKjB4MDAyMzgqLwl1NjQJc3JwY2ltX2dlbl9lcnJvcnNfbWFzazsKKy8qMHgwMDI0MCovCXU2NAlzcnBjaW1fZ2VuX2Vycm9yc19hbGFybTsKKy8qMHgwMDI0OCovCXU2NAltcnBjaW1fdG9fc3JwY2ltX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fVE9fU1JQQ0lNX0FMQVJNX1JFR19QUElGX01SUENJTV9UT19TUlBDSU1fQUxBUk0JQklUKDMpCisvKjB4MDAyNTAqLwl1NjQJbXJwY2ltX3RvX3NycGNpbV9hbGFybV9tYXNrOworLyoweDAwMjU4Ki8JdTY0CW1ycGNpbV90b19zcnBjaW1fYWxhcm1fYWxhcm07CisvKjB4MDAyNjAqLwl1NjQJdnBhdGhfdG9fc3JwY2ltX2FsYXJtX3JlZzsKKworLyoweDAwMjY4Ki8JdTY0CXZwYXRoX3RvX3NycGNpbV9hbGFybV9tYXNrOworLyoweDAwMjcwKi8JdTY0CXZwYXRoX3RvX3NycGNpbV9hbGFybV9hbGFybTsKKwl1OAl1bnVzZWQwMDI4MFsweDAwMjgwLTB4MDAyNzhdOworCisvKjB4MDAyODAqLwl1NjQJcGZfc3dfcmVzZXQ7CisjZGVmaW5lIFZYR0VfSFdfUEZfU1dfUkVTRVRfUEZfU1dfUkVTRVQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorLyoweDAwMjg4Ki8JdTY0CXNycGNpbV9nZW5lcmFsX2NmZzE7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfQ0ZHMV9CT09UX0JZVEVfU1dBUEVOCUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9DRkcxX0JPT1RfQklUX0ZMSVBFTglCSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfQ0ZHMV9NU0lYX0FERFJfU1dBUEVOCUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9DRkcxX01TSVhfQUREUl9GTElQRU4JQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0NGRzFfTVNJWF9EQVRBX1NXQVBFTglCSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfQ0ZHMV9NU0lYX0RBVEFfRkxJUEVOCUJJVCgzOSkKKy8qMHgwMDI5MCovCXU2NAlzcnBjaW1faW50ZXJydXB0X2NmZzE7CisjZGVmaW5lIFZYR0VfSFdfU1JQQ0lNX0lOVEVSUlVQVF9DRkcxX0FMQVJNX01BUF9UT19NU0codmFsKSB2eGdlX3ZCSVQodmFsLCAxLCA3KQorI2RlZmluZSBWWEdFX0hXX1NSUENJTV9JTlRFUlJVUFRfQ0ZHMV9UUkFGRklDX0NMQVNTKHZhbCkgdnhnZV92QklUKHZhbCwgOSwgMykKKwl1OAl1bnVzZWQwMDJhOFsweDAwMmE4LTB4MDAyOThdOworCisvKjB4MDAyYTgqLwl1NjQJc3JwY2ltX2NsZWFyX21zaXhfbWFzazsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fQ0xFQVJfTVNJWF9NQVNLX1NSUENJTV9DTEVBUl9NU0lYX01BU0sJQklUKDApCisvKjB4MDAyYjAqLwl1NjQJc3JwY2ltX3NldF9tc2l4X21hc2s7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1NFVF9NU0lYX01BU0tfU1JQQ0lNX1NFVF9NU0lYX01BU0sJQklUKDApCisvKjB4MDAyYjgqLwl1NjQJc3JwY2ltX2Nscl9tc2l4X29uZV9zaG90OworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9DTFJfTVNJWF9PTkVfU0hPVF9TUlBDSU1fQ0xSX01TSVhfT05FX1NIT1QJQklUKDApCisvKjB4MDAyYzAqLwl1NjQJc3JwY2ltX3JzdF9pbl9wcm9nOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9SU1RfSU5fUFJPR19TUlBDSU1fUlNUX0lOX1BST0cJQklUKDcpCisvKjB4MDAyYzgqLwl1NjQJc3JwY2ltX3JlZ19tb2RpZmllZDsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fUkVHX01PRElGSUVEX1NSUENJTV9SRUdfTU9ESUZJRUQJQklUKDcpCisvKjB4MDAyZDAqLwl1NjQJdGd0X3BmX2lsbGVnYWxfYWNjZXNzOworI2RlZmluZSBWWEdFX0hXX1RHVF9QRl9JTExFR0FMX0FDQ0VTU19TV0lGX1JFR0lPTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDcpCisvKjB4MDAyZDgqLwl1NjQJc3JwY2ltX21zaXhfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0lYX1NUQVRVU19JTlRDVExfU1JQQ0lNX01TSVhfTUFTSwlCSVQoMykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNJWF9TVEFUVVNfSU5UQ1RMX1NSUENJTV9NU0lYX1BFTkRJTkdfVkVDVE9SCUJJVCg3KQorCXU4CXVudXNlZDAwODgwWzB4MDA4ODAtMHgwMDJlMF07CisKKy8qMHgwMDg4MCovCXU2NAl4Z21hY19zcl9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX1NSX0lOVF9TVEFUVVNfQVNJQ19OVFdLX1NSX0VSUl9BU0lDX05UV0tfU1JfSU5UCUJJVCgzKQorLyoweDAwODg4Ki8JdTY0CXhnbWFjX3NyX2ludF9tYXNrOworLyoweDAwODkwKi8JdTY0CWFzaWNfbnR3a19zcl9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19TUl9FUlJfUkVHX1hNQUNKX05UV0tfU1VTVEFJTkVEX0ZBVUxUCUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19TUl9FUlJfUkVHX1hNQUNKX05UV0tfU1VTVEFJTkVEX09LCUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19TUl9FUlJfUkVHX1hNQUNKX05UV0tfU1VTVEFJTkVEX0ZBVUxUX09DQ1VSUkVEIFwKKwkJCQkJCQkJCUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfU1JfRVJSX1JFR19YTUFDSl9OVFdLX1NVU1RBSU5FRF9PS19PQ0NVUlJFRAlCSVQoMTUpCisvKjB4MDA4OTgqLwl1NjQJYXNpY19udHdrX3NyX2Vycl9tYXNrOworLyoweDAwOGEwKi8JdTY0CWFzaWNfbnR3a19zcl9lcnJfYWxhcm07CisJdTgJdW51c2VkMDA4YzBbMHgwMDhjMC0weDAwOGE4XTsKKworLyoweDAwOGMwKi8JdTY0CXhtYWNfdnNwb3J0X2Nob2ljZXNfc3JfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19WU1BPUlRfQ0hPSUNFU19TUl9DTE9ORV9WU1BPUlRfVkVDVE9SKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAwOTAwWzB4MDA5MDAtMHgwMDhjOF07CisKKy8qMHgwMDkwMCovCXU2NAltcl9ycWFfdG9wX3BydHlfZm9yX3ZoOworI2RlZmluZQlWWEdFX0hXX01SX1JRQV9UT1BfUFJUWV9GT1JfVkhfUlFBX1RPUF9QUlRZX0ZPUl9WSCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMDkwOCovCXU2NAl1bXFfdmhfZGF0YV9saXN0X2VtcHR5OworI2RlZmluZQlWWEdFX0hXX1VNUV9WSF9EQVRBX0xJU1RfRU1QVFlfUk9DUkNfVU1RX1ZIX0RBVEFfTElTVF9FTVBUWSBcCisJCQkJCQkJQklUKDApCisvKjB4MDA5MTAqLwl1NjQJd2RlX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9GT1JDRV9NV0JfU1RBUlQJQklUKDApCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfRk9SQ0VfTVdCX0VORAlCSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9GT1JDRV9RQl9TVEFSVAlCSVQoMikKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9GT1JDRV9RQl9FTkQJQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfRk9SQ0VfTVBTQl9TVEFSVAlCSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9GT1JDRV9NUFNCX0VORAlCSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9NV0JfT1BUX0VOCUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX1FCX09QVF9FTglCSVQoNykKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9NUFNCX09QVF9FTglCSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9GT1JDRV9NV0JfU1RBUlQJQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfRk9SQ0VfTVdCX0VORAlCSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfRk9SQ0VfUUJfU1RBUlQJQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX0ZPUkNFX1FCX0VORAlCSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfRk9SQ0VfTVBTQl9TVEFSVAlCSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfRk9SQ0VfTVBTQl9FTkQJQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX01XQl9PUFRfRU4JQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX1FCX09QVF9FTglCSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfTVBTQl9PUFRfRU4JQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfRElTQUJMRV9RUEFEX0ZPUl9VTkFMSUdORURfQUREUglCSVQoMTkpCisjZGVmaW5lIFZYR0VfSFdfV0RFX0NGR19BTElHTk1FTlRfUFJFRkVSRU5DRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMwLCAyKQorI2RlZmluZSBWWEdFX0hXX1dERV9DRkdfTUVNX1dPUkRfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ2LCAyKQorCit9IF9fcGFja2VkOworCisvKlZYR0VfSFdfVlBNR01UX1JFR1NfSCovCitzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIHsKKworCXU4CXVudXNlZDAwMDQwWzB4MDAwNDAtMHgwMDAwMF07CisKKy8qMHgwMDA0MCovCXU2NAl2cGF0aF90b19mdW5jX21hcF9jZmcxOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzFfVlBBVEhfVE9fRlVOQ19NQVBfQ0ZHMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorLyoweDAwMDQ4Ki8JdTY0CXZwYXRoX2lzX2ZpcnN0OworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0lTX0ZJUlNUX1ZQQVRIX0lTX0ZJUlNUCXZ4Z2VfbUJJVCgzKQorLyoweDAwMDUwKi8JdTY0CXNycGNpbV90b192cGF0aF93bXNnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9UT19WUEFUSF9XTVNHX1NSUENJTV9UT19WUEFUSF9XTVNHKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDU4Ki8JdTY0CXNycGNpbV90b192cGF0aF93bXNnX3RyaWc7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1RPX1ZQQVRIX1dNU0dfVFJJR19TUlBDSU1fVE9fVlBBVEhfV01TR19UUklHIFwKKwkJCQkJCQkJdnhnZV9tQklUKDApCisJdTgJdW51c2VkMDAxMDBbMHgwMDEwMC0weDAwMDYwXTsKKworLyoweDAwMTAwKi8JdTY0CXRpbV92cGF0aF9hc3NpZ25tZW50OworI2RlZmluZSBWWEdFX0hXX1RJTV9WUEFUSF9BU1NJR05NRU5UX0JNQVBfUk9PVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorCXU4CXVudXNlZDAwMTQwWzB4MDAxNDAtMHgwMDEwOF07CisKKy8qMHgwMDE0MCovCXU2NAlycWFfdG9wX3BydHlfZm9yX3ZwOworI2RlZmluZSBWWEdFX0hXX1JRQV9UT1BfUFJUWV9GT1JfVlBfUlFBX1RPUF9QUlRZX0ZPUl9WUCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKwl1OAl1bnVzZWQwMDFjMFsweDAwMWMwLTB4MDAxNDhdOworCisvKjB4MDAxYzAqLwl1NjQJcnhtYWNfcnhfcGFfY2ZnMF92cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfSUdOT1JFX0ZSQU1FX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9TVVBQT1JUX1NOQVBfQUJfTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9TRUFSQ0hfRk9SX0hBTwl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfU1VQUE9SVF9NT0JJTEVfSVBWNl9IRFJTIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX0lQVjZfU1RPUF9TRUFSQ0hJTkcgXAorCQkJCQkJCQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfTk9fUFNfSUZfVU5LTk9XTgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfU0VBUkNIX0ZPUl9FVFlQRQl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfVE9TU19BTllfRlJNX0lGX0wzX0NTVU1fRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1RPU1NfT0ZGTERfRlJNX0lGX0wzX0NTVU1fRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1RPU1NfQU5ZX0ZSTV9JRl9MNF9DU1VNX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9UT1NTX09GRkxEX0ZSTV9JRl9MNF9DU1VNX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9UT1NTX0FOWV9GUk1fSUZfUlBBX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9UT1NTX09GRkxEX0ZSTV9JRl9SUEFfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDU5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX0pVTUJPX1NOQVBfRU4JdnhnZV9tQklUKDYzKQorLyoweDAwMWM4Ki8JdTY0CXJ0c19tZ3JfY2ZnMF92cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9SVFNfRFBfU1BfUFJJT1JJVFkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9GTEVYX0w0UFJUQ0xfVkFMVUUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9JQ01QX1RSQVNICXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX1RDUFNZTl9UUkFTSAl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9aTDRQWUxEX1RSQVNICXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX0w0UFJUQ0xfVENQX1RSQVNICXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX0w0UFJUQ0xfVURQX1RSQVNICXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX0w0UFJUQ0xfRkxFWF9UUkFTSAl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9JUEZSQUdfVFJBU0gJdnhnZV9tQklUKDU5KQorLyoweDAwMWQwKi8JdTY0CXJ0c19tZ3JfY3JpdGVyaWFfcHJpb3JpdHlfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX0VUWVBFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfSUNNUF9UQ1BTWU4odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOSwgMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9MNFBOKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEzLCAzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX1JBTkdFX0w0UE4odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTcsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfUlRIX0lUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIxLCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX0RTKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI1LCAzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX1FPUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyOSwgMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9aTDRQWUxEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMzLCAzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX0w0UFJUQ0wodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzcsIDMpCisvKjB4MDAxZDgqLwl1NjQJcnhtYWNfY2ZnMF9wb3J0X3ZwbWdtdF9jbG9uZVszXTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX1JNQUNfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9TVFJJUF9GQ1MJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9ESVNDQVJEX1BGUk0JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfSUdOT1JFX0ZDU19FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfSUdOT1JFX0xPTkdfRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX0lHTk9SRV9VU0laRURfRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX0lHTk9SRV9MRU5fTUlTTUFUQ0ggXAorCQkJCQkJCQl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9NQVhfUFlMRF9MRU4odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTAsIDE0KQorLyoweDAwMWYwKi8JdTY0CXJ4bWFjX3BhdXNlX2NmZ19wb3J0X3ZwbWdtdF9jbG9uZVszXTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfR0VOX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9SQ1ZfRU4JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX0FDQ0VMX1NFTkQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOSwgMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfRFVBTF9USFIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9ISUdIX1BUSU1FKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfSUdOT1JFX1BGX0ZDU19FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX0lHTk9SRV9QRl9MRU5fRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9MSU1JVEVSX0VOCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfTUFYX0xJTUlUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCA4KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9QRVJNSVRfUkFURU1HTVRfQ1RSTCBcCisJCQkJCQkJdnhnZV9tQklUKDU5KQorCXU4CXVudXNlZDAwMjQwWzB4MDAyNDAtMHgwMDIwOF07CisKKy8qMHgwMDI0MCovCXU2NAl4bWFjX3ZzcG9ydF9jaG9pY2VzX3ZwOworI2RlZmluZSBWWEdFX0hXX1hNQUNfVlNQT1JUX0NIT0lDRVNfVlBfVlNQT1JUX1ZFQ1RPUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAwMjYwWzB4MDAyNjAtMHgwMDI0OF07CisKKy8qMHgwMDI2MCovCXU2NAl4Z21hY19nZW5fc3RhdHVzX3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19HRU5fU1RBVFVTX1ZQTUdNVF9DTE9ORV9YTUFDSl9OVFdLX09LCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX0dFTl9TVEFUVVNfVlBNR01UX0NMT05FX1hNQUNKX05UV0tfREFUQV9SQVRFIFwKKwkJCQkJCQkJdnhnZV9tQklUKDExKQorLyoweDAwMjY4Ki8JdTY0CXhnbWFjX3N0YXR1c19wb3J0X3ZwbWdtdF9jbG9uZVsyXTsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19TVEFUVVNfUE9SVF9WUE1HTVRfQ0xPTkVfUk1BQ19SRU1PVEVfRkFVTFQgXAorCQkJCQkJCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19TVEFUVVNfUE9SVF9WUE1HTVRfQ0xPTkVfUk1BQ19MT0NBTF9GQVVMVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19TVEFUVVNfUE9SVF9WUE1HTVRfQ0xPTkVfWE1BQ0pfTUFDX1BIWV9MQVlFUl9BVkFJTCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19TVEFUVVNfUE9SVF9WUE1HTVRfQ0xPTkVfWE1BQ0pfUE9SVF9PSwl2eGdlX21CSVQoMTUpCisvKjB4MDAyNzgqLwl1NjQJeG1hY19nZW5fY2ZnX3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9DRkdfVlBNR01UX0NMT05FX1JBVEVNR01UX01BQ19SQVRFX1NFTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyLCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0NGR19WUE1HTVRfQ0xPTkVfVFhfSEVBRF9EUk9QX1dIRU5fRkFVTFQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0NGR19WUE1HTVRfQ0xPTkVfRkFVTFRfQkVIQVZJT1VSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUgVlhHRV9IV19YTUFDX0dFTl9DRkdfVlBNR01UX0NMT05FX1BFUklPRF9OVFdLX1VQKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI4LCA0KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0NGR19WUE1HTVRfQ0xPTkVfUEVSSU9EX05UV0tfRE9XTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgNCkKKy8qMHgwMDI4MCovCXU2NAl4bWFjX3RpbWVzdGFtcF92cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVlBNR01UX0NMT05FX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX1hNQUNfVElNRVNUQU1QX1ZQTUdNVF9DTE9ORV9VU0VfTElOS19JRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZSBWWEdFX0hXX1hNQUNfVElNRVNUQU1QX1ZQTUdNVF9DTE9ORV9JTlRFUlZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX1ZQTUdNVF9DTE9ORV9USU1FUl9SRVNUQVJUCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9WUE1HTVRfQ0xPTkVfWE1BQ0pfUk9MTE9WRVJfQ05UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKy8qMHgwMDI4OCovCXU2NAl4bWFjX3N0YXRzX2dlbl9jZmdfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1hNQUNfU1RBVFNfR0VOX0NGR19WUE1HTVRfQ0xPTkVfUFJUQUdHUl9DVU1fVElNRVIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1NUQVRTX0dFTl9DRkdfVlBNR01UX0NMT05FX1ZQQVRIX0NVTV9USU1FUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA4LCA0KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfU1RBVFNfR0VOX0NGR19WUE1HTVRfQ0xPTkVfVkxBTl9IQU5ETElORwl2eGdlX21CSVQoMTUpCisvKjB4MDAyOTAqLwl1NjQJeG1hY19jZmdfcG9ydF92cG1nbXRfY2xvbmVbM107CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfWEdNSUlfTE9PUEJBQ0sJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfWEdNSUlfUkVWRVJTRV9MT09QQkFDSyBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX1hHTUlJX1RYX0JFSEFWCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9YR01JSV9SWF9CRUhBVgl2eGdlX21CSVQoMTUpCisJdTgJdW51c2VkMDAyYzBbMHgwMDJjMC0weDAwMmE4XTsKKworLyoweDAwMmMwKi8JdTY0CXR4bWFjX2dlbl9jZmcwX3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19HRU5fQ0ZHMF9WUE1HTVRfQ0xPTkVfQ0hPU0VOX1RYX1BPUlQJdnhnZV9tQklUKDcpCisvKjB4MDAyYzgqLwl1NjQJdHhtYWNfY2ZnMF9wb3J0X3ZwbWdtdF9jbG9uZVszXTsKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX1RNQUNfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9BUFBFTkRfUEFECXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX1RYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfUEFEX0JZVEUodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorCXU4CXVudXNlZDAwMzAwWzB4MDAzMDAtMHgwMDJlMF07CisKKy8qMHgwMDMwMCovCXU2NAl3b2xfbXBfY3JjOworI2RlZmluZSBWWEdFX0hXX1dPTF9NUF9DUkNfQ1JDKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfV09MX01QX0NSQ19SQ19FTgl2eGdlX21CSVQoNjMpCisvKjB4MDAzMDgqLwl1NjQJd29sX21wX21hc2tfYTsKKyNkZWZpbmUgVlhHRV9IV19XT0xfTVBfTUFTS19BX01BU0sodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDMxMCovCXU2NAl3b2xfbXBfbWFza19iOworI2RlZmluZSBWWEdFX0hXX1dPTF9NUF9NQVNLX0JfTUFTSyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCXU4CXVudXNlZDAwMzYwWzB4MDAzNjAtMHgwMDMxOF07CisKKy8qMHgwMDM2MCovCXU2NAlmYXVfcGFfY2ZnX3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19GQVVfUEFfQ0ZHX1ZQTUdNVF9DTE9ORV9SRVBMX0w0X0NPTVBfQ1NVTQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19GQVVfUEFfQ0ZHX1ZQTUdNVF9DTE9ORV9SRVBMX0wzX0lOQ0xfQ0YJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRkFVX1BBX0NGR19WUE1HTVRfQ0xPTkVfUkVQTF9MM19DT01QX0NTVU0JdnhnZV9tQklUKDExKQorLyoweDAwMzY4Ki8JdTY0CXJ4X2RhdGFwYXRoX3V0aWxfdnBfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfUlhfREFUQVBBVEhfVVRJTF9WUF9DTE9ORV9GQVVfUlhfVVRJTElaQVRJT04odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNywgOSkKKyNkZWZpbmUJVlhHRV9IV19SWF9EQVRBUEFUSF9VVElMX1ZQX0NMT05FX1JYX1VUSUxfQ0ZHKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZQlWWEdFX0hXX1JYX0RBVEFQQVRIX1VUSUxfVlBfQ0xPTkVfRkFVX1JYX0ZSQUNfVVRJTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWF9EQVRBUEFUSF9VVElMX1ZQX0NMT05FX1JYX1BLVF9XRUlHSFQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjQsIDQpCisJdTgJdW51c2VkMDAzODBbMHgwMDM4MC0weDAwMzcwXTsKKworLyoweDAwMzgwKi8JdTY0CXR4X2RhdGFwYXRoX3V0aWxfdnBfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfVFhfREFUQVBBVEhfVVRJTF9WUF9DTE9ORV9UUEFfVFhfVVRJTElaQVRJT04odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNywgOSkKKyNkZWZpbmUJVlhHRV9IV19UWF9EQVRBUEFUSF9VVElMX1ZQX0NMT05FX1RYX1VUSUxfQ0ZHKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZQlWWEdFX0hXX1RYX0RBVEFQQVRIX1VUSUxfVlBfQ0xPTkVfVFBBX1RYX0ZSQUNfVVRJTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUJVlhHRV9IV19UWF9EQVRBUEFUSF9VVElMX1ZQX0NMT05FX1RYX1BLVF9XRUlHSFQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjQsIDQpCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyB7CisKKwl1OAl1bnVzZWQwMDMwMFsweDAwMzAwXTsKKworLyoweDAwMzAwKi8JdTY0CXVzZGNfdnBhdGg7CisjZGVmaW5lIFZYR0VfSFdfVVNEQ19WUEFUSF9TR1JQX0FTU0lHTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorCXU4CXVudXNlZDAwYTAwWzB4MDBhMDAtMHgwMDMwOF07CisKKy8qMHgwMGEwMCovCXU2NAl3cmRtYV9hbGFybV9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfV1JETUFfQUxBUk1fU1RBVFVTX1BSQ19BTEFSTV9QUkNfSU5UCXZ4Z2VfbUJJVCgxKQorLyoweDAwYTA4Ki8JdTY0CXdyZG1hX2FsYXJtX21hc2s7CisJdTgJdW51c2VkMDBhMzBbMHgwMGEzMC0weDAwYTEwXTsKKworLyoweDAwYTMwKi8JdTY0CXByY19hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUklOR19CVU1QCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1JYRENNX1NDX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SWERDTV9TQ19BQk9SVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19RVUFOVEFfU0laRV9FUlIJdnhnZV9tQklUKDMpCisvKjB4MDBhMzgqLwl1NjQJcHJjX2FsYXJtX21hc2s7CisvKjB4MDBhNDAqLwl1NjQJcHJjX2FsYXJtX2FsYXJtOworLyoweDAwYTQ4Ki8JdTY0CXByY19jZmcxOworI2RlZmluZSBWWEdFX0hXX1BSQ19DRkcxX1JYX1RJTUVSX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDI5KQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkcxX1RJTV9SSU5HX0JVTVBfSU5UX0VOQUJMRQl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzFfUlRJX1RJTlRfRElTQUJMRQl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzFfR1JFRURZX1JFVFVSTgl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzFfUVVJQ0tfU0hPVAl2eGdlX21CSVQoMzcpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzFfUlhfVElNRVJfQ0kJdnhnZV9tQklUKDM5KQorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkcxX1JFU0VUX1RJTUVSX09OX1JYRF9SRVQodmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgMikKKwl1OAl1bnVzZWQwMGE2MFsweDAwYTYwLTB4MDBhNTBdOworCisvKjB4MDBhNjAqLwl1NjQJcHJjX2NmZzQ7CisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzRfSU5fU1ZDCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc0X1JJTkdfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE0LCAyKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc0X1JYRF9OT19TTk9PUAl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzRfRlJNX05PX1NOT09QCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNF9SVEhfRElTQUJMRQl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzRfSUdOT1JFX09XTkVSU0hJUAl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzRfU0lHTkFMX0JFTklHTl9PVkZMVwl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzRfQklNT0RBTF9JTlRFUlJVUFQJdnhnZV9tQklUKDM3KQorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc0X0JBQ0tPRkZfSU5URVJWQUwodmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgMjQpCisvKjB4MDBhNjgqLwl1NjQJcHJjX2NmZzU7CisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzVfUlhEMF9BREQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2MSkKKy8qMHgwMGE3MCovCXU2NAlwcmNfY2ZnNjsKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNl9GUk1fUEFEX0VOCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc2X1FTSVpFX0FMSUdORURfUlhECXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc2X0RPT1JCRUxMX01PREVfRU4JdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzZfTDNfQ1BDX1RSU0ZSX0NPREVfRU4JdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzZfTDRfQ1BDX1RSU0ZSX0NPREVfRU4JdnhnZV9tQklUKDkpCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzZfUlhEX0NSWERUKHZhbCkgdnhnZV92QklUKHZhbCwgMjMsIDkpCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzZfUlhEX1NQQVQodmFsKSB2eGdlX3ZCSVQodmFsLCAzNiwgOSkKKy8qMHgwMGE3OCovCXU2NAlwcmNfY2ZnNzsKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc3X1NNQVJUX1NDQVRfRU4JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc3X1JYRF9OU19DSEdfRU4JdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc3X05PX0hEUl9TRVBBUkFUSU9OCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHN19SWERfQlVGRl9TSVpFX01BU0sodmFsKSB2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHN19CVUZGX1NJWkUwX01BU0sodmFsKSB2eGdlX3ZCSVQodmFsLCAyNywgNSkKKy8qMHgwMGE4MCovCXU2NAl0aW1fZGVzdF9hZGRyOworI2RlZmluZSBWWEdFX0hXX1RJTV9ERVNUX0FERFJfVElNX0RFU1RfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwYTg4Ki8JdTY0CXByY19yeGRfZG9vcmJlbGw7CisjZGVmaW5lIFZYR0VfSFdfUFJDX1JYRF9ET09SQkVMTF9ORVdfUVdfQ05UKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAwYTkwKi8JdTY0CXJxYV9wcnR5X2Zvcl92cDsKKyNkZWZpbmUgVlhHRV9IV19SUUFfUFJUWV9GT1JfVlBfUlFBX1BSVFlfRk9SX1ZQKHZhbCkgdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBhOTgqLwl1NjQJcnhkbWVtX3NpemU7CisjZGVmaW5lIFZYR0VfSFdfUlhETUVNX1NJWkVfUFJDX1JYRE1FTV9TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgNTEsIDEzKQorLyoweDAwYWEwKi8JdTY0CWZybV9pbl9wcm9ncmVzc19jbnQ7CisjZGVmaW5lCVZYR0VfSFdfRlJNX0lOX1BST0dSRVNTX0NOVF9QUkNfRlJNX0lOX1BST0dSRVNTX0NOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGFhOCovCXU2NAlyeF9tdWx0aV9jYXN0X3N0YXRzOworI2RlZmluZSBWWEdFX0hXX1JYX01VTFRJX0NBU1RfU1RBVFNfRlJBTUVfRElTQ0FSRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMGFiMCovCXU2NAlyeF9mcm1fdHJhbnNmZXJyZWQ7CisjZGVmaW5lCVZYR0VfSFdfUlhfRlJNX1RSQU5TRkVSUkVEX1JYX0ZSTV9UUkFOU0ZFUlJFRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDBhYjgqLwl1NjQJcnhkX3JldHVybmVkOworI2RlZmluZSBWWEdFX0hXX1JYRF9SRVRVUk5FRF9SWERfUkVUVVJORUQodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisJdTgJdW51c2VkMDBjMDBbMHgwMGMwMC0weDAwYWMwXTsKKworLyoweDAwYzAwKi8JdTY0CWtkZmNfZmlmb190cnBsX3BhcnRpdGlvbjsKKyNkZWZpbmUgVlhHRV9IV19LREZDX0ZJRk9fVFJQTF9QQVJUSVRJT05fTEVOR1RIXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19GSUZPX1RSUExfUEFSVElUSU9OX0xFTkdUSF8xKHZhbCkgdnhnZV92QklUKHZhbCwgMzMsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfRklGT19UUlBMX1BBUlRJVElPTl9MRU5HVEhfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGMwOCovCXU2NAlrZGZjX2ZpZm9fdHJwbF9jdHJsOworI2RlZmluZQlWWEdFX0hXX0tERkNfRklGT19UUlBMX0NUUkxfVFJJUExFVF9FTkFCTEUJdnhnZV9tQklUKDcpCisvKjB4MDBjMTAqLwl1NjQJa2RmY190cnBsX2ZpZm9fMF9jdHJsOworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgMTQsIDIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX0ZMSVBfRU4JdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9TV0FQX0VOCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfSU5UX0NUUkwodmFsKSB2eGdlX3ZCSVQodmFsLCAyNiwgMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfQ1RSTF9TVFJVQwl2eGdlX21CSVQoMjgpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX0FERF9QQUQJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9OT19TTk9PUAl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX1JMWF9PUkQJdnhnZV9tQklUKDMxKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9TRUxFQ1QodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfSU5UX05PKHZhbCkgdnhnZV92QklUKHZhbCwgNDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX0JJVF9NQVAodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDBjMTgqLwl1NjQJa2RmY190cnBsX2ZpZm9fMV9jdHJsOworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgMTQsIDIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX0ZMSVBfRU4JdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9TV0FQX0VOCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfSU5UX0NUUkwodmFsKSB2eGdlX3ZCSVQodmFsLCAyNiwgMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfQ1RSTF9TVFJVQwl2eGdlX21CSVQoMjgpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX0FERF9QQUQJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9OT19TTk9PUAl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX1JMWF9PUkQJdnhnZV9tQklUKDMxKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9TRUxFQ1QodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfSU5UX05PKHZhbCkgdnhnZV92QklUKHZhbCwgNDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX0JJVF9NQVAodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDBjMjAqLwl1NjQJa2RmY190cnBsX2ZpZm9fMl9jdHJsOworI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9GTElQX0VOCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfU1dBUF9FTgl2eGdlX21CSVQoMjMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX0lOVF9DVFJMKHZhbCkgdnhnZV92QklUKHZhbCwgMjYsIDIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX0NUUkxfU1RSVUMJdnhnZV9tQklUKDI4KQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9BRERfUEFECXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfTk9fU05PT1AJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9STFhfT1JECXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfU0VMRUNUKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX0lOVF9OTyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQxLCA3KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9CSVRfTUFQKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAwYzI4Ki8JdTY0CWtkZmNfdHJwbF9maWZvXzBfd2JfYWRkcmVzczsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX1dCX0FERFJFU1NfQUREKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDBjMzAqLwl1NjQJa2RmY190cnBsX2ZpZm9fMV93Yl9hZGRyZXNzOworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfV0JfQUREUkVTU19BREQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMGMzOCovCXU2NAlrZGZjX3RycGxfZmlmb18yX3diX2FkZHJlc3M7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9XQl9BRERSRVNTX0FERCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwYzQwKi8JdTY0CWtkZmNfdHJwbF9maWZvX29mZnNldDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfS0RGQ19SQ1RSMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9LREZDX1JDVFIxKHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9LREZDX1JDVFIyKHZhbCkgdnhnZV92QklUKHZhbCwgMzMsIDE1KQorLyoweDAwYzQ4Ki8JdTY0CWtkZmNfZHJibF90cmlwbGV0X3RvdGFsOworI2RlZmluZQlWWEdFX0hXX0tERkNfRFJCTF9UUklQTEVUX1RPVEFMX0tERkNfTUFYX1NJWkUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTcsIDE1KQorCXU4CXVudXNlZDAwYzYwWzB4MDBjNjAtMHgwMGM1MF07CisKKy8qMHgwMGM2MCovCXU2NAl1c2RjX2RyYmxfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19VU0RDX0RSQkxfQ1RSTF9GTElQX0VOCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19VU0RDX0RSQkxfQ1RSTF9TV0FQX0VOCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMGM2OCovCXU2NAl1c2RjX3ZwX3JlYWR5OworI2RlZmluZQlWWEdFX0hXX1VTRENfVlBfUkVBRFlfVVNEQ19IVE5fUkVBRFkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVVNEQ19WUF9SRUFEWV9VU0RDX1NSUV9SRUFEWQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVVNEQ19WUF9SRUFEWV9VU0RDX0NRUlFfUkVBRFkJdnhnZV9tQklUKDIzKQorLyoweDAwYzcwKi8JdTY0CWtkZmNfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0tERkNfU1RBVFVTX0tERkNfV1JSXzBfUkVBRFkJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19TVEFUVVNfS0RGQ19XUlJfMV9SRUFEWQl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1NUQVRVU19LREZDX1dSUl8yX1JFQURZCXZ4Z2VfbUJJVCgyKQorCXU4CXVudXNlZDAwYzgwWzB4MDBjODAtMHgwMGM3OF07CisKKy8qMHgwMGM4MCovCXU2NAl4bWFjX3JwYV92Y2ZnOworI2RlZmluZQlWWEdFX0hXX1hNQUNfUlBBX1ZDRkdfSVBWNF9UQ1BfSU5DTF9QSAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1JQQV9WQ0ZHX0lQVjZfVENQX0lOQ0xfUEgJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19SUEFfVkNGR19JUFY0X1VEUF9JTkNMX1BICXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1JQQV9WQ0ZHX0lQVjZfVURQX0lOQ0xfUEgJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfUlBBX1ZDRkdfTDRfSU5DTF9DRgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19SUEFfVkNGR19TVFJJUF9WTEFOX1RBRwl2eGdlX21CSVQoMjMpCisvKjB4MDBjODgqLwl1NjQJcnhtYWNfdmNmZzA7CisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfVkNGRzBfUlRTX01BWF9GUk1fTEVOKHZhbCkgdnhnZV92QklUKHZhbCwgMiwgMTQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkNGRzBfUlRTX1VTRV9NSU5fTEVOCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfTUlOX0ZSTV9MRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAyNiwgMTQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkNGRzBfVUNBU1RfQUxMX0FERFJfRU4JdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZDRkcwX01DQVNUX0FMTF9BRERSX0VOCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQ0ZHMF9CQ0FTVF9FTgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkNGRzBfQUxMX1ZJRF9FTgl2eGdlX21CSVQoNTUpCisvKjB4MDBjOTAqLwl1NjQJcnhtYWNfdmNmZzE7CisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfVkNGRzFfUlRTX1JUSF9NVUxUSV9JVF9CRF9NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgNDIsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkNGRzFfUlRTX1JUSF9NVUxUSV9JVF9FTl9NT0RFCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQ0ZHMV9DT05UUklCX0wyX0ZMT1cJdnhnZV9tQklUKDUxKQorLyoweDAwYzk4Ki8JdTY0CXJ0c19hY2Nlc3Nfc3RlZXJfY3RybDsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgNykKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQkVIQVZfVEJMX1NFTAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1RBQkxFX1NFTAl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUwl2eGdlX21CSVQoMCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDgpCisvKjB4MDBjYTAqLwl1NjQJcnRzX2FjY2Vzc19zdGVlcl9kYXRhMDsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0RBVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMGNhOCovCXU2NAlydHNfYWNjZXNzX3N0ZWVyX2RhdGExOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfREFUQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCXU4CXVudXNlZDAwZDAwWzB4MDBkMDAtMHgwMGNiMF07CisKKy8qMHgwMGQwMCovCXU2NAl4bWFjX3ZzcG9ydF9jaG9pY2U7CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19WU1BPUlRfQ0hPSUNFX1ZTUE9SVF9OVU1CRVIodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorLyoweDAwZDA4Ki8JdTY0CXhtYWNfc3RhdHNfY2ZnOworLyoweDAwZDEwKi8JdTY0CXhtYWNfc3RhdHNfYWNjZXNzX2NtZDsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfT1AodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9TVFJPQkUJdnhnZV9tQklUKDE1KQorI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9PRkZTRVRfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisvKjB4MDBkMTgqLwl1NjQJeG1hY19zdGF0c19hY2Nlc3NfZGF0YTsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19EQVRBX1hTTUdSX0RBVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMGQyMCovCXU2NAlhc2ljX250d2tfdnBfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfVlBfQ1RSTF9SRVFfVEVTVF9OVFdLCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19WUF9DVFJMX1hNQUNKX1NIT1dfUE9SVF9JTkZPCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfVlBfQ1RSTF9YTUFDSl9QT1JUX05VTQl2eGdlX21CSVQoNjMpCisJdTgJdW51c2VkMDBkMzBbMHgwMGQzMC0weDAwZDI4XTsKKworLyoweDAwZDMwKi8JdTY0CXhnbWFjX3ZwX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfVlBfSU5UX1NUQVRVU19BU0lDX05UV0tfVlBfRVJSX0FTSUNfTlRXS19WUF9JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMykKKy8qMHgwMGQzOCovCXU2NAl4Z21hY192cF9pbnRfbWFzazsKKy8qMHgwMGQ0MCovCXU2NAlhc2ljX250d2tfdnBfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX09LCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUX09DQ1VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX09LX09DQ1VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19WUF9FUlJfUkVHX1hNQUNKX05UV0tfUkVBRkZJUk1FRF9GQVVMVCBcCisJCQkJCQkJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19WUF9FUlJfUkVHX1hNQUNKX05UV0tfUkVBRkZJUk1FRF9PSwl2eGdlX21CSVQoMjMpCisvKjB4MDBkNDgqLwl1NjQJYXNpY19udHdrX3ZwX2Vycl9tYXNrOworLyoweDAwZDUwKi8JdTY0CWFzaWNfbnR3a192cF9lcnJfYWxhcm07CisJdTgJdW51c2VkMDBkODBbMHgwMGQ4MC0weDAwZDU4XTsKKworLyoweDAwZDgwKi8JdTY0CXJ0ZG1hX2J3X2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfUlRETUFfQldfQ1RSTF9CV19DVFJMX0VOCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUgVlhHRV9IV19SVERNQV9CV19DVFJMX0RFU0lSRURfQlcodmFsKSB2eGdlX3ZCSVQodmFsLCA0NiwgMTgpCisvKjB4MDBkODgqLwl1NjQJcnRkbWFfcmRfb3B0aW1pemF0aW9uX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfR0VOX0lOVF9BRlRFUl9BQk9SVAl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9QQURfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lIFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfUEFEX1BBVFRFUk4odmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZQlWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX1dBSVRfRk9SX1NQQUNFCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUgVlhHRV9IV19QQ0lfRVhQX0RFVkNUTF9SRUFEUlEgICAweDcwMDAgIC8qIE1heF9SZWFkX1JlcXVlc3RfU2l6ZSAqLworI2RlZmluZSBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX0ZJTExfVEhSRVNIKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIxLCAzKQorI2RlZmluZQlWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX1RYRF9QWUxEX1dNQVJLX0VOCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUgVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9UWERfUFlMRF9XTUFSSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyOSwgMykKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9BRERSX0JEUllfRU4JdnhnZV9tQklUKDM1KQorI2RlZmluZSBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX0FERFJfQkRSWSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNywgMykKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9UWERfV0FJVF9GT1JfU1BBQ0UJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX1RYRF9GSUxMX1RIUkVTSCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9UWERfQUREUl9CRFJZX0VOCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUgVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9UWERfQUREUl9CRFJZKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDYxLCAzKQorLyoweDAwZDkwKi8JdTY0CXBkYV9wY2Nfam9iX21vbml0b3I7CisjZGVmaW5lCVZYR0VfSFdfUERBX1BDQ19KT0JfTU9OSVRPUl9QREFfUENDX0pPQl9TVEFUVVMJdnhnZV9tQklUKDcpCisvKjB4MDBkOTgqLwl1NjQJdHhfcHJvdG9jb2xfYXNzaXN0X2NmZzsKKyNkZWZpbmUJVlhHRV9IV19UWF9QUk9UT0NPTF9BU1NJU1RfQ0ZHX0xTT1YyX0VOCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1RYX1BST1RPQ09MX0FTU0lTVF9DRkdfSVBWNl9LRUVQX1NFQVJDSElORwl2eGdlX21CSVQoNykKKwl1OAl1bnVzZWQwMTAwMFsweDAxMDAwLTB4MDBkYTBdOworCisvKjB4MDEwMDAqLwl1NjQJdGltX2NmZzFfaW50X251bVs0XTsKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX0JUSU1FUl9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyNikKKyNkZWZpbmUJVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX0JJVE1QX0VOCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RYRlJNX0NOVF9FTgl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9UWERfQ05UX0VOCXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUJVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0FDCXZ4Z2VfbUJJVCgzOCkKKyNkZWZpbmUJVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0NJCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQxLCA3KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19CKHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDcpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0ModmFsKSB2eGdlX3ZCSVQodmFsLCA1NywgNykKKy8qMHgwMTAyMCovCXU2NAl0aW1fY2ZnMl9pbnRfbnVtWzRdOworI2RlZmluZSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0EodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19CKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0ModmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMTA0MCovCXU2NAl0aW1fY2ZnM19pbnRfbnVtWzRdOworI2RlZmluZQlWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVElNRVJfUkkJdnhnZV9tQklUKDApCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9SVElNRVJfRVZFTlRfU0YodmFsKSB2eGdlX3ZCSVQodmFsLCAxLCA0KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fUlRJTUVSX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDI2KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVVRJTF9TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgNikKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX0xUSU1FUl9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAzOCwgMjYpCisvKjB4MDEwNjAqLwl1NjQJdGltX3dya2xkX2NsYzsKKyNkZWZpbmUgVlhHRV9IV19USU1fV1JLTERfQ0xDX1dSS0xEX0VWQUxfUFJEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lIFZYR0VfSFdfVElNX1dSS0xEX0NMQ19XUktMRF9FVkFMX0RJVih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZQlWWEdFX0hXX1RJTV9XUktMRF9DTENfQ05UX0ZSTV9CWVRFCXZ4Z2VfbUJJVCg0MCkKKyNkZWZpbmUgVlhHRV9IV19USU1fV1JLTERfQ0xDX0NOVF9SWF9UWCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQxLCAyKQorI2RlZmluZQlWWEdFX0hXX1RJTV9XUktMRF9DTENfQ05UX0xOS19FTgl2eGdlX21CSVQoNDMpCisjZGVmaW5lIFZYR0VfSFdfVElNX1dSS0xEX0NMQ19IT1NUX1VUSUwodmFsKSB2eGdlX3ZCSVQodmFsLCA1NywgNykKKy8qMHgwMTA2OCovCXU2NAl0aW1fYml0bWFwOworI2RlZmluZSBWWEdFX0hXX1RJTV9CSVRNQVBfTUFTSyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1RJTV9CSVRNQVBfTExST09UX1JYRF9FTgl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfVElNX0JJVE1BUF9MTFJPT1RfVFhEX0VOCXZ4Z2VfbUJJVCgzMykKKy8qMHgwMTA3MCovCXU2NAl0aW1fcmluZ19hc3NuOworI2RlZmluZSBWWEdFX0hXX1RJTV9SSU5HX0FTU05fSU5UX05VTSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisvKjB4MDEwNzgqLwl1NjQJdGltX3JlbWFwOworI2RlZmluZQlWWEdFX0hXX1RJTV9SRU1BUF9UWF9FTgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19USU1fUkVNQVBfUlhfRU4JdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfVElNX1JFTUFQX09GRkxPQURfRU4JdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfVElNX1JFTUFQX1RPX1ZQQVRIX05VTSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorLyoweDAxMDgwKi8JdTY0CXRpbV92cGF0aF9tYXA7CisjZGVmaW5lIFZYR0VfSFdfVElNX1ZQQVRIX01BUF9CTUFQX1JPT1QodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKy8qMHgwMTA4OCovCXU2NAl0aW1fcGNpX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19USU1fUENJX0NGR19BRERfUEFECXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RJTV9QQ0lfQ0ZHX05PX1NOT09QCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19USU1fUENJX0NGR19SRUxBWEVECXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19USU1fUENJX0NGR19DVExfU1RSCXZ4Z2VfbUJJVCgzMSkKKwl1OAl1bnVzZWQwMTEwMFsweDAxMTAwLTB4MDEwOTBdOworCisvKjB4MDExMDAqLwl1NjQJc2dycF9hc3NpZ247CisjZGVmaW5lIFZYR0VfSFdfU0dSUF9BU1NJR05fU0dSUF9BU1NJR04odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMTEwOCovCXU2NAlzZ3JwX2FvYV9hbmRfcmVzdWx0OworI2RlZmluZQlWWEdFX0hXX1NHUlBfQU9BX0FORF9SRVNVTFRfUEVUX1NHUlBfQU9BX0FORF9SRVNVTFQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDExMTAqLwl1NjQJcnBlX3BjaV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX0xST19EQVRBX0VOQUJMRQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfTFJPX0hEUl9FTkFCTEUJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX0xST19DUUVfRU5BQkxFCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9OT05MTF9DUUVfRU5BQkxFCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfQkFTRV9MTF9DUUVfRU5BQkxFCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfTExfQ1FFX0lEQVRBX0VOQUJMRQl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX0NRUlFfSVJfRU5BQkxFCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfQ1FTUV9JUl9FTkFCTEUJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9DUVJSX0lSX0VOQUJMRQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfTk9TTk9PUF9EQVRBCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19OT1NOT09QX05PTkxMX0NRRQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfTk9TTk9PUF9MTF9DUUUJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX05PU05PT1BfQ1FSUV9JUgl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfTk9TTk9PUF9DUVNRX0lSCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19OT1NOT09QX0NRUlJfSVIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1JFTEFYRURfREFUQQl2eGdlX21CSVQoMjYpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUkVMQVhFRF9OT05MTF9DUUUJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1JFTEFYRURfTExfQ1FFCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19SRUxBWEVEX0NRUlFfSVIJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1JFTEFYRURfQ1FTUV9JUgl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUkVMQVhFRF9DUVJSX0lSCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMTExOCovCXU2NAlycGVfbHJvX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19SUEVfTFJPX0NGR19TVVBQUkVTU19MUk9fRVRIX1RSTFIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlBFX0xST19DRkdfQUxMT1dfTFJPX1NOQVBfU05BUEpVTUJPX01SRwl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUlBFX0xST19DRkdfQUxMT1dfTFJPX0xMQ19MTENKVU1CT19NUkcJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JQRV9MUk9fQ0ZHX0lOQ0xfQUNLX0NOVF9JTl9DUUUJdnhnZV9tQklUKDIzKQorLyoweDAxMTIwKi8JdTY0CXBlX21yMnZwX2Fja19ibGtfbGltaXQ7CisjZGVmaW5lIFZYR0VfSFdfUEVfTVIyVlBfQUNLX0JMS19MSU1JVF9CTEtfTElNSVQodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDExMjgqLwl1NjQJcGVfbXIydnBfcmlycl9saXJyX2Jsa19saW1pdDsKKyNkZWZpbmUJVlhHRV9IV19QRV9NUjJWUF9SSVJSX0xJUlJfQkxLX0xJTUlUX1JJUlJfQkxLX0xJTUlUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1BFX01SMlZQX1JJUlJfTElSUl9CTEtfTElNSVRfTElSUl9CTEtfTElNSVQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAxMTMwKi8JdTY0CXR4cGVfcGNpX25jZV9jZmc7CisjZGVmaW5lIFZYR0VfSFdfVFhQRV9QQ0lfTkNFX0NGR19OQ0VfVEhSRVNIKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVFhQRV9QQ0lfTkNFX0NGR19QQURfVE9XSV9FTkFCTEUJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX1RYUEVfUENJX05DRV9DRkdfTk9TTk9PUF9UT1dJCXZ4Z2VfbUJJVCg2MykKKwl1OAl1bnVzZWQwMTE4MFsweDAxMTgwLTB4MDExMzhdOworCisvKjB4MDExODAqLwl1NjQJbXNnX3FwYWRfZW5fY2ZnOworI2RlZmluZQlWWEdFX0hXX01TR19RUEFEX0VOX0NGR19VTVFfQldSX1JFQUQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1FQQURfRU5fQ0ZHX0RNUV9CV1JfUkVBRAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfUVBBRF9FTl9DRkdfTVhQX0dFTkRNQV9SRUFECXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfUVBBRF9FTl9DRkdfVVhQX0dFTkRNQV9SRUFECXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfUVBBRF9FTl9DRkdfVU1RX01TR19XUklURQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1FQQURfRU5fQ0ZHX1VNUURNUV9JUl9XUklURQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1FQQURfRU5fQ0ZHX01YUF9HRU5ETUFfV1JJVEUJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX01TR19RUEFEX0VOX0NGR19VWFBfR0VORE1BX1dSSVRFCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMTE4OCovCXU2NAltc2dfcGNpX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19NU0dfUENJX0NGR19HRU5ETUFfTk9fU05PT1AJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1BDSV9DRkdfVU1RRE1RX0lSX05PX1NOT09QCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01TR19QQ0lfQ0ZHX1VNUV9OT19TTk9PUAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1BDSV9DRkdfRE1RX05PX1NOT09QCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMTE5MCovCXU2NAl1bXFkbXFfaXJfaW5pdDsKKyNkZWZpbmUgVlhHRV9IV19VTVFETVFfSVJfSU5JVF9IT1NUX1dSSVRFX0FERCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAxMTk4Ki8JdTY0CWRtcV9pcl9pbnQ7CisjZGVmaW5lCVZYR0VfSFdfRE1RX0lSX0lOVF9JTU1FRF9FTkFCTEUJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfRE1RX0lSX0lOVF9FVkVOVF9FTkFCTEUJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfRE1RX0lSX0lOVF9OVU1CRVIodmFsKSB2eGdlX3ZCSVQodmFsLCA5LCA3KQorI2RlZmluZSBWWEdFX0hXX0RNUV9JUl9JTlRfQklUTUFQKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorLyoweDAxMWEwKi8JdTY0CWRtcV9id3JfaW5pdF9hZGQ7CisjZGVmaW5lIFZYR0VfSFdfRE1RX0JXUl9JTklUX0FERF9IT1NUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDExYTgqLwl1NjQJZG1xX2J3cl9pbml0X2J5dGU7CisjZGVmaW5lIFZYR0VfSFdfRE1RX0JXUl9JTklUX0JZVEVfQ09VTlQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKy8qMHgwMTFiMCovCXU2NAlkbXFfaXI7CisjZGVmaW5lIFZYR0VfSFdfRE1RX0lSX1BPTElDWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisvKjB4MDExYjgqLwl1NjQJdW1xX2ludDsKKyNkZWZpbmUJVlhHRV9IV19VTVFfSU5UX0lNTUVEX0VOQUJMRQl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19VTVFfSU5UX0VWRU5UX0VOQUJMRQl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19VTVFfSU5UX05VTUJFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDksIDcpCisjZGVmaW5lIFZYR0VfSFdfVU1RX0lOVF9CSVRNQVAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisvKjB4MDExYzAqLwl1NjQJdW1xX21yMnZwX2J3cl9wZmNoX2luaXQ7CisjZGVmaW5lIFZYR0VfSFdfVU1RX01SMlZQX0JXUl9QRkNIX0lOSVRfTlVNQkVSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKy8qMHgwMTFjOCovCXU2NAl1bXFfYndyX3BmY2hfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19VTVFfQldSX1BGQ0hfQ1RSTF9QT0xMX0VOCXZ4Z2VfbUJJVCgzKQorLyoweDAxMWQwKi8JdTY0CXVtcV9tcjJ2cF9id3JfZW9sOworI2RlZmluZSBWWEdFX0hXX1VNUV9NUjJWUF9CV1JfRU9MX1BPTExfTEFURU5DWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMTFkOCovCXU2NAl1bXFfYndyX2luaXRfYWRkOworI2RlZmluZSBWWEdFX0hXX1VNUV9CV1JfSU5JVF9BRERfSE9TVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAxMWUwKi8JdTY0CXVtcV9id3JfaW5pdF9ieXRlOworI2RlZmluZSBWWEdFX0hXX1VNUV9CV1JfSU5JVF9CWVRFX0NPVU5UKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisvKjB4MDExZTgqLwl1NjQJZ2VuZG1hX2ludDsKKyNkZWZpbmUJVlhHRV9IV19HRU5ETUFfSU5UX0lNTUVEX0VOQUJMRQl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19HRU5ETUFfSU5UX0VWRU5UX0VOQUJMRQl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19HRU5ETUFfSU5UX05VTUJFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDksIDcpCisjZGVmaW5lIFZYR0VfSFdfR0VORE1BX0lOVF9CSVRNQVAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisvKjB4MDExZjAqLwl1NjQJdW1xZG1xX2lyX2luaXRfbm90aWZ5OworI2RlZmluZQlWWEdFX0hXX1VNUURNUV9JUl9JTklUX05PVElGWV9QVUxTRQl2eGdlX21CSVQoMykKKy8qMHgwMTFmOCovCXU2NAlkbXFfaW5pdF9ub3RpZnk7CisjZGVmaW5lCVZYR0VfSFdfRE1RX0lOSVRfTk9USUZZX1BVTFNFCXZ4Z2VfbUJJVCgzKQorLyoweDAxMjAwKi8JdTY0CXVtcV9pbml0X25vdGlmeTsKKyNkZWZpbmUJVlhHRV9IV19VTVFfSU5JVF9OT1RJRllfUFVMU0UJdnhnZV9tQklUKDMpCisJdTgJdW51c2VkMDEzODBbMHgwMTM4MC0weDAxMjA4XTsKKworLyoweDAxMzgwKi8JdTY0CXRwYV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfVFBBX0NGR19JR05PUkVfRlJBTUVfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RQQV9DRkdfSVBWNl9TVE9QX1NFQVJDSElORwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19UUEFfQ0ZHX0w0X1BTSERSX1BSRVNFTlQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1RQQV9DRkdfU1VQUE9SVF9NT0JJTEVfSVBWNl9IRFJTCXZ4Z2VfbUJJVCgxNSkKKwl1OAl1bnVzZWQwMTQwMFsweDAxNDAwLTB4MDEzODhdOworCisvKjB4MDE0MDAqLwl1NjQJdHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXM7CisjZGVmaW5lCVZYR0VfSFdfVFhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVNfVFhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDgsIDE2KQorCXU4CXVudXNlZDAxNDgwWzB4MDE0ODAtMHgwMTQwOF07CisKKy8qMHgwMTQ4MCovCXU2NAlmYXVfcnBhX3ZjZmc7CisjZGVmaW5lCVZYR0VfSFdfRkFVX1JQQV9WQ0ZHX0w0X0NPTVBfQ1NVTQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19GQVVfUlBBX1ZDRkdfTDNfSU5DTF9DRgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfRkFVX1JQQV9WQ0ZHX0wzX0NPTVBfQ1NVTQl2eGdlX21CSVQoMTUpCisJdTgJdW51c2VkMDE0ZDBbMHgwMTRkMC0weDAxNDg4XTsKKworLyoweDAxNGQwKi8JdTY0CWRiZ19zdGF0c19yeF9tcGE7CisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRTX1JYX01QQV9DUkNfRkFJTF9GUk1TKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRTX1JYX01QQV9NUktfRkFJTF9GUk1TKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUU19SWF9NUEFfTEVOX0ZBSUxfRlJNUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKy8qMHgwMTRkOCovCXU2NAlkYmdfc3RhdHNfcnhfZmF1OworI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUU19SWF9GQVVfUlhfV09MX0ZSTVModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfUlhfRkFVX1JYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfUlhfRkFVX1JYX1BFUk1JVFRFRF9GUk1TKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwMTRmMFsweDAxNGYwLTB4MDE0ZTBdOworCisvKjB4MDE0ZjAqLwl1NjQJZmJtY192cF9yZHk7CisjZGVmaW5lCVZYR0VfSFdfRkJNQ19WUF9SRFlfUVVFVUVfU1BBVl9GTQl2eGdlX21CSVQoMCkKKwl1OAl1bnVzZWQwMWUwMFsweDAxZTAwLTB4MDE0ZjhdOworCisvKjB4MDFlMDAqLwl1NjQJdnBhdGhfcGNpcGlmX2ludF9zdGF0dXM7CisjZGVmaW5lIFwKK1ZYR0VfSFdfVlBBVEhfUENJUElGX0lOVF9TVEFUVVNfU1JQQ0lNX01TR19UT19WUEFUSF9TUlBDSU1fTVNHX1RPX1ZQQVRIX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1BDSVBJRl9JTlRfU1RBVFVTX1ZQQVRIX1NQQVJFX1IxX1ZQQVRIX1NQQVJFX1IxX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg3KQorLyoweDAxZTA4Ki8JdTY0CXZwYXRoX3BjaXBpZl9pbnRfbWFzazsKKwl1OAl1bnVzZWQwMWUyMFsweDAxZTIwLTB4MDFlMTBdOworCisvKjB4MDFlMjAqLwl1NjQJc3JwY2ltX21zZ190b192cGF0aF9yZWc7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19UT19WUEFUSF9SRUdfU1dJRl9TUlBDSU1fVE9fVlBBVEhfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMykKKy8qMHgwMWUyOCovCXU2NAlzcnBjaW1fbXNnX3RvX3ZwYXRoX21hc2s7CisvKjB4MDFlMzAqLwl1NjQJc3JwY2ltX21zZ190b192cGF0aF9hbGFybTsKKwl1OAl1bnVzZWQwMWVhMFsweDAxZWEwLTB4MDFlMzhdOworCisvKjB4MDFlYTAqLwl1NjQJdnBhdGhfdG9fc3JwY2ltX3dtc2c7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfVE9fU1JQQ0lNX1dNU0dfVlBBVEhfVE9fU1JQQ0lNX1dNU0codmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDFlYTgqLwl1NjQJdnBhdGhfdG9fc3JwY2ltX3dtc2dfdHJpZzsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9UT19TUlBDSU1fV01TR19UUklHX1ZQQVRIX1RPX1NSUENJTV9XTVNHX1RSSUcgXAorCQkJCQkJCXZ4Z2VfbUJJVCgwKQorCXU4CXVudXNlZDAyMDAwWzB4MDIwMDAtMHgwMWViMF07CisKKy8qMHgwMjAwMCovCXU2NAl2cGF0aF9nZW5lcmFsX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1BJQ19JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1BDSV9JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1dSRE1BX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1hNQUNfSU5UCXZ4Z2VfbUJJVCgxOSkKKy8qMHgwMjAwOCovCXU2NAl2cGF0aF9nZW5lcmFsX2ludF9tYXNrOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX01BU0tfUElDX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9NQVNLX1BDSV9JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfTUFTS19XUkRNQV9JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX01BU0tfWE1BQ19JTlQJdnhnZV9tQklUKDE5KQorLyoweDAyMDEwKi8JdTY0CXZwYXRoX3BwaWZfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfS0RGQ0NUTF9FUlJPUlNfS0RGQ0NUTF9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1BQSUZfSU5UX1NUQVRVU19HRU5FUkFMX0VSUk9SU19HRU5FUkFMX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX1BDSV9DT05GSUdfRVJST1JTX1BDSV9DT05GSUdfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lIFwKK1ZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX01SUENJTV9UT19WUEFUSF9BTEFSTV9NUlBDSU1fVE9fVlBBVEhfQUxBUk1fSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lIFwKK1ZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX1NSUENJTV9UT19WUEFUSF9BTEFSTV9TUlBDSU1fVE9fVlBBVEhfQUxBUk1fSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoMTkpCisvKjB4MDIwMTgqLwl1NjQJdnBhdGhfcHBpZl9pbnRfbWFzazsKKy8qMHgwMjAyMCovCXU2NAlrZGZjY3RsX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzBfT1ZSV1IJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzFfT1ZSV1IJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzJfT1ZSV1IJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX1BPSVNPTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzFfUE9JU09OCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMl9QT0lTT04JdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX0RNQV9FUlIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8xX0RNQV9FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8yX0RNQV9FUlIJdnhnZV9tQklUKDM5KQorLyoweDAyMDI4Ki8JdTY0CWtkZmNjdGxfZXJyb3JzX21hc2s7CisvKjB4MDIwMzAqLwl1NjQJa2RmY2N0bF9lcnJvcnNfYWxhcm07CisJdTgJdW51c2VkMDIwNDBbMHgwMjA0MC0weDAyMDM4XTsKKworLyoweDAyMDQwKi8JdTY0CWdlbmVyYWxfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfREJMR0VOX0ZJRk8wX09WUkZMT1cJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMV9PVlJGTE9XCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19EQkxHRU5fRklGTzJfT1ZSRkxPVwl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX1NUQVRTQl9QSUZfQ0hBSU5fRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX0RST1BfVElNRU9VVF9SRVEJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19UR1RfSUxMRUdBTF9BQ0NFU1MJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19JTklfU0VSUl9ERVQJdnhnZV9tQklUKDMxKQorLyoweDAyMDQ4Ki8JdTY0CWdlbmVyYWxfZXJyb3JzX21hc2s7CisvKjB4MDIwNTAqLwl1NjQJZ2VuZXJhbF9lcnJvcnNfYWxhcm07CisvKjB4MDIwNTgqLwl1NjQJcGNpX2NvbmZpZ19lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX1BDSV9DT05GSUdfRVJST1JTX1JFR19QQ0lDT05GSUdfU1RBVFVTX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19QQ0lfQ09ORklHX0VSUk9SU19SRUdfUENJQ09ORklHX1VOQ09SX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19QQ0lfQ09ORklHX0VSUk9SU19SRUdfUENJQ09ORklHX0NPUl9FUlIJdnhnZV9tQklUKDExKQorLyoweDAyMDYwKi8JdTY0CXBjaV9jb25maWdfZXJyb3JzX21hc2s7CisvKjB4MDIwNjgqLwl1NjQJcGNpX2NvbmZpZ19lcnJvcnNfYWxhcm07CisvKjB4MDIwNzAqLwl1NjQJbXJwY2ltX3RvX3ZwYXRoX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fVE9fVlBBVEhfQUxBUk1fUkVHX1BQSUZfTVJQQ0lNX1RPX1ZQQVRIX0FMQVJNIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMpCisvKjB4MDIwNzgqLwl1NjQJbXJwY2ltX3RvX3ZwYXRoX2FsYXJtX21hc2s7CisvKjB4MDIwODAqLwl1NjQJbXJwY2ltX3RvX3ZwYXRoX2FsYXJtX2FsYXJtOworLyoweDAyMDg4Ki8JdTY0CXNycGNpbV90b192cGF0aF9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1RPX1ZQQVRIX0FMQVJNX1JFR19QUElGX1NSUENJTV9UT19WUEFUSF9BTEFSTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMjA5MCovCXU2NAlzcnBjaW1fdG9fdnBhdGhfYWxhcm1fbWFzazsKKy8qMHgwMjA5OCovCXU2NAlzcnBjaW1fdG9fdnBhdGhfYWxhcm1fYWxhcm07CisJdTgJdW51c2VkMDIxMDhbMHgwMjEwOC0weDAyMGEwXTsKKworLyoweDAyMTA4Ki8JdTY0CWtkZmNjdGxfc3RhdHVzOworI2RlZmluZSBWWEdFX0hXX0tERkNDVExfU1RBVFVTX0tERkNDVExfRklGTzBfUFJFUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ0NUTF9TVEFUVVNfS0RGQ0NUTF9GSUZPMV9QUkVTKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19LREZDQ1RMX1NUQVRVU19LREZDQ1RMX0ZJRk8yX1BSRVModmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKyNkZWZpbmUgVlhHRV9IV19LREZDQ1RMX1NUQVRVU19LREZDQ1RMX0ZJRk8wX09WUldSKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ0NUTF9TVEFUVVNfS0RGQ0NUTF9GSUZPMV9PVlJXUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX0tERkNDVExfU1RBVFVTX0tERkNDVExfRklGTzJfT1ZSV1IodmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgOCkKKy8qMHgwMjExMCovCXU2NAlyc3RoZGxyX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19SU1RIRExSX1NUQVRVU19SU1RIRExSX0NVUlJFTlRfUkVTRVQJdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfUlNUSERMUl9TVEFUVVNfUlNUSERMUl9DVVJSRU5UX1ZQSU4odmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorLyoweDAyMTE4Ki8JdTY0CWZpZm8wX3N0YXR1czsKKyNkZWZpbmUgVlhHRV9IV19GSUZPMF9TVEFUVVNfREJMR0VOX0ZJRk8wX1JESURYKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTIpCisvKjB4MDIxMjAqLwl1NjQJZmlmbzFfc3RhdHVzOworI2RlZmluZSBWWEdFX0hXX0ZJRk8xX1NUQVRVU19EQkxHRU5fRklGTzFfUkRJRFgodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxMikKKy8qMHgwMjEyOCovCXU2NAlmaWZvMl9zdGF0dXM7CisjZGVmaW5lIFZYR0VfSFdfRklGTzJfU1RBVFVTX0RCTEdFTl9GSUZPMl9SRElEWCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDEyKQorCXU4CXVudXNlZDAyMTU4WzB4MDIxNTgtMHgwMjEzMF07CisKKy8qMHgwMjE1OCovCXU2NAl0Z3RfaWxsZWdhbF9hY2Nlc3M7CisjZGVmaW5lIFZYR0VfSFdfVEdUX0lMTEVHQUxfQUNDRVNTX1NXSUZfUkVHSU9OKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgNykKKwl1OAl1bnVzZWQwMjIwMFsweDAyMjAwLTB4MDIxNjBdOworCisvKjB4MDIyMDAqLwl1NjQJdnBhdGhfZ2VuZXJhbF9jZmcxOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9UQ19WQUxVRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX0RBVEFfQllURV9TV0FQRU4JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX0RBVEFfRkxJUEVOCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfQ1RMX0JZVEVfU1dBUEVOCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfQ1RMX0ZMSVBFTgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX01TSVhfQUREUl9TV0FQRU4JdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9NU0lYX0FERFJfRkxJUEVOCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfTVNJWF9EQVRBX1NXQVBFTgl2eGdlX21CSVQoNTkpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX01TSVhfREFUQV9GTElQRU4JdnhnZV9tQklUKDYzKQorLyoweDAyMjA4Ki8JdTY0CXZwYXRoX2dlbmVyYWxfY2ZnMjsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzJfU0laRV9RVUFOVFVNKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgMykKKy8qMHgwMjIxMCovCXU2NAl2cGF0aF9nZW5lcmFsX2NmZzM7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkczX0lHTk9SRV9WUEFUSF9SU1RfRk9SX0lOVEEJdnhnZV9tQklUKDMpCisJdTgJdW51c2VkMDIyMjBbMHgwMjIyMC0weDAyMjE4XTsKKworLyoweDAyMjIwKi8JdTY0CWtkZmNjdGxfY2ZnMDsKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9TV0FQRU5fRklGTzAJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfU1dBUEVOX0ZJRk8xCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX1NXQVBFTl9GSUZPMgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQklUX0ZMSVBFTl9GSUZPMAl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQklUX0ZMSVBFTl9GSUZPMQl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQklUX0ZMSVBFTl9GSUZPMgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUwX0ZJRk8wCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTBfRklGTzEJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTBfRklGTzIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTFfRklGTzAJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTFfRklGTzEJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTFfRklGTzIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTJfRklGTzAJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTJfRklGTzEJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTJfRklGTzIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTNfRklGTzAJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTNfRklGTzEJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTNfRklGTzIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTRfRklGTzAJdnhnZV9tQklUKDI1KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTRfRklGTzEJdnhnZV9tQklUKDI2KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTRfRklGTzIJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTVfRklGTzAJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTVfRklGTzEJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTVfRklGTzIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTZfRklGTzAJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTZfRklGTzEJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTZfRklGTzIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTdfRklGTzAJdnhnZV9tQklUKDM3KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTdfRklGTzEJdnhnZV9tQklUKDM4KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTdfRklGTzIJdnhnZV9tQklUKDM5KQorCisJdTgJdW51c2VkMDIyNjhbMHgwMjI2OC0weDAyMjI4XTsKKworLyoweDAyMjY4Ki8JdTY0CXN0YXRzX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19TVEFUU19DRkdfU1RBUlRfSE9TVF9BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNTcpCisvKjB4MDIyNzAqLwl1NjQJaW50ZXJydXB0X2NmZzA7CisjZGVmaW5lIFZYR0VfSFdfSU5URVJSVVBUX0NGRzBfTVNJWF9GT1JfUlhUSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfSU5URVJSVVBUX0NGRzBfR1JPVVAwX01TSVhfRk9SX1RYVEkodmFsKSB2eGdlX3ZCSVQodmFsLCA5LCA3KQorI2RlZmluZSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX0dST1VQMV9NU0lYX0ZPUl9UWFRJKHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDcpCisjZGVmaW5lIFZYR0VfSFdfSU5URVJSVVBUX0NGRzBfR1JPVVAyX01TSVhfRk9SX1RYVEkodmFsKSB2eGdlX3ZCSVQodmFsLCAyNSwgNykKKyNkZWZpbmUgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDNfTVNJWF9GT1JfVFhUSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMzLCA3KQorCXU4CXVudXNlZDAyMjgwWzB4MDIyODAtMHgwMjI3OF07CisKKy8qMHgwMjI4MCovCXU2NAlpbnRlcnJ1cHRfY2ZnMjsKKyNkZWZpbmUgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMl9BTEFSTV9NQVBfVE9fTVNHKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgNykKKy8qMHgwMjI4OCovCXU2NAlvbmVfc2hvdF92ZWN0MF9lbjsKKyNkZWZpbmUJVlhHRV9IV19PTkVfU0hPVF9WRUNUMF9FTl9PTkVfU0hPVF9WRUNUMF9FTgl2eGdlX21CSVQoMykKKy8qMHgwMjI5MCovCXU2NAlvbmVfc2hvdF92ZWN0MV9lbjsKKyNkZWZpbmUJVlhHRV9IV19PTkVfU0hPVF9WRUNUMV9FTl9PTkVfU0hPVF9WRUNUMV9FTgl2eGdlX21CSVQoMykKKy8qMHgwMjI5OCovCXU2NAlvbmVfc2hvdF92ZWN0Ml9lbjsKKyNkZWZpbmUJVlhHRV9IV19PTkVfU0hPVF9WRUNUMl9FTl9PTkVfU0hPVF9WRUNUMl9FTgl2eGdlX21CSVQoMykKKy8qMHgwMjJhMCovCXU2NAlvbmVfc2hvdF92ZWN0M19lbjsKKyNkZWZpbmUJVlhHRV9IV19PTkVfU0hPVF9WRUNUM19FTl9PTkVfU0hPVF9WRUNUM19FTgl2eGdlX21CSVQoMykKKwl1OAl1bnVzZWQwMjJiMFsweDAyMmIwLTB4MDIyYThdOworCisvKjB4MDIyYjAqLwl1NjQJcGNpX2NvbmZpZ19hY2Nlc3NfY2ZnMTsKKyNkZWZpbmUgVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19DRkcxX0FERFJFU1ModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxMikKKyNkZWZpbmUJVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19DRkcxX1NFTF9GVU5DMAl2eGdlX21CSVQoMTUpCisvKjB4MDIyYjgqLwl1NjQJcGNpX2NvbmZpZ19hY2Nlc3NfY2ZnMjsKKyNkZWZpbmUJVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19DRkcyX1JFUQl2eGdlX21CSVQoMCkKKy8qMHgwMjJjMCovCXU2NAlwY2lfY29uZmlnX2FjY2Vzc19zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfU1RBVFVTX0FDQ0VTU19FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lIFZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfU1RBVFVTX0RBVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDIzMDBbMHgwMjMwMC0weDAyMmM4XTsKKworLyoweDAyMzAwKi8JdTY0CXZwYXRoX2RlYnVnX3N0YXRzMDsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzBfSU5JX05VTV9NV1JfU0VOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorLyoweDAyMzA4Ki8JdTY0CXZwYXRoX2RlYnVnX3N0YXRzMTsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzFfSU5JX05VTV9NUkRfU0VOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorLyoweDAyMzEwKi8JdTY0CXZwYXRoX2RlYnVnX3N0YXRzMjsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzJfSU5JX05VTV9DUExfUkNWRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorLyoweDAyMzE4Ki8JdTY0CXZwYXRoX2RlYnVnX3N0YXRzMzsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzNfSU5JX05VTV9NV1JfQllURV9TRU5UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAyMzIwKi8JdTY0CXZwYXRoX2RlYnVnX3N0YXRzNDsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzRfSU5JX05VTV9DUExfQllURV9SQ1ZEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAyMzI4Ki8JdTY0CXZwYXRoX2RlYnVnX3N0YXRzNTsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzVfV1JDUkRUQVJCX1hPRkYodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDIzMzAqLwl1NjQJdnBhdGhfZGVidWdfc3RhdHM2OworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNl9SRENSRFRBUkJfWE9GRih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMjMzOCovCXU2NAl2cGF0aF9nZW5zdGF0c19jb3VudDAxOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMDFfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQwMV9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDIzNDAqLwl1NjQJdnBhdGhfZ2Vuc3RhdHNfY291bnQyMzsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDIzX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMjNfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAyMzQ4Ki8JdTY0CXZwYXRoX2dlbnN0YXRzX2NvdW50NDsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAyMzUwKi8JdTY0CXZwYXRoX2dlbnN0YXRzX2NvdW50NTsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDVfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDAyNjQ4WzB4MDI2NDgtMHgwMjM1OF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFZYR0VfSFdfRUVQUk9NX1NJWkUJKDB4MDEgPDwgMTEpCisKKy8qIENhcGFiaWxpdHkgbGlzdHMgKi8KKyNkZWZpbmUgIFZYR0VfSFdfUENJX0VYUF9MTktDQVBfTE5LX1NQRUVEICAgIDB4ZiAgLyogU3VwcG9ydGVkIExpbmsgc3BlZWRzICovCisjZGVmaW5lICBWWEdFX0hXX1BDSV9FWFBfTE5LQ0FQX0xOS19XSURUSCAgICAweDNmMCAvKiBTdXBwb3J0ZWQgTGluayBzcGVlZHMuICovCisjZGVmaW5lICBWWEdFX0hXX1BDSV9FWFBfTE5LQ0FQX0xXX1JFUyAgICAgICAweDAgIC8qIFJlc2VydmVkLiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTBhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCkBAIC0wLDAgKzEsMjUyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyAqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyAqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIHZ4Z2UtdHJhZmZpYy5jOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ2eGdlLXRyYWZmaWMuaCIKKyNpbmNsdWRlICJ2eGdlLWNvbmZpZy5oIgorI2luY2x1ZGUgInZ4Z2UtbWFpbi5oIgorCisvKgorICogdnhnZV9od192cGF0aF9pbnRyX2VuYWJsZSAtIEVuYWJsZSB2cGF0aCBpbnRlcnJ1cHRzLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICoKKyAqIEVuYWJsZSB2cGF0aCBpbnRlcnJ1cHRzLiBUaGUgZnVuY3Rpb24gaXMgdG8gYmUgZXhlY3V0ZWQgdGhlIGxhc3QgaW4KKyAqIHZwYXRoIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX2ludHJfZGlzYWJsZSgpCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9pbnRyX2VuYWJsZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJdTY0IHZhbDY0OworCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCXdyaXRlcShWWEdFX0hXX0lOVFJfTUFTS19BTEwsICZ2cF9yZWctPmtkZmNjdGxfZXJyb3JzX3JlZyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfcmVnKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5wY2lfY29uZmlnX2Vycm9yc19yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPm1ycGNpbV90b192cGF0aF9hbGFybV9yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnNycGNpbV90b192cGF0aF9hbGFybV9yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BwaWZfaW50X3N0YXR1cyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+c3JwY2ltX21zZ190b192cGF0aF9yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BjaXBpZl9pbnRfc3RhdHVzKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5wcmNfYWxhcm1fcmVnKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT53cmRtYV9hbGFybV9zdGF0dXMpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfcmVnKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT54Z21hY192cF9pbnRfc3RhdHVzKTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2VuZXJhbF9pbnRfc3RhdHVzKTsKKworCS8qIE1hc2sgdW53YW50ZWQgaW50ZXJydXB0cyAqLworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BjaXBpZl9pbnRfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+c3JwY2ltX21zZ190b192cGF0aF9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5zcnBjaW1fdG9fdnBhdGhfYWxhcm1fbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+bXJwY2ltX3RvX3ZwYXRoX2FsYXJtX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnBjaV9jb25maWdfZXJyb3JzX21hc2spOworCisJLyogVW5tYXNrIHRoZSBpbmRpdmlkdWFsIGludGVycnVwdHMgKi8KKworCXdyaXRlcSgodTMyKXZ4Z2VfYlZBTG4oKFZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMV9PVlJGTE9XfAorCQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19EQkxHRU5fRklGTzJfT1ZSRkxPV3wKKwkJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX0RST1BfVElNRU9VVF9SRVF8CisJCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX1NUQVRTQl9QSUZfQ0hBSU5fRVJSKSwgMCwgMzIpLAorCQkmdnBfcmVnLT5nZW5lcmFsX2Vycm9yc19tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpdnhnZV9iVkFMbigoVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMV9PVlJXUnwKKwkJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMl9PVlJXUnwKKwkJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMV9QT0lTT058CisJCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzJfUE9JU09OfAorCQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8xX0RNQV9FUlJ8CisJCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzFfRE1BX0VSUiksIDAsIDMyKSwKKwkJJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKDAsICZ2cF9yZWctPnZwYXRoX3BwaWZfaW50X21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJKHUzMil2eGdlX2JWQUxuKFZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUklOR19CVU1QLCAwLCAzMiksCisJCSZ2cF9yZWctPnByY19hbGFybV9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoMCwgJnZwX3JlZy0+d3JkbWFfYWxhcm1fbWFzayk7CisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigwLCAmdnBfcmVnLT54Z21hY192cF9pbnRfbWFzayk7CisKKwlpZiAodnBhdGgtPmhsZGV2LT5maXJzdF92cF9pZCAhPSB2cGF0aC0+dnBfaWQpCisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX21hc2spOworCWVsc2UKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4oKAorCQlWWEdFX0hXX0FTSUNfTlRXS19WUF9FUlJfUkVHX1hNQUNKX05UV0tfUkVBRkZJUk1FRF9GQVVMVCB8CisJCVZYR0VfSFdfQVNJQ19OVFdLX1ZQX0VSUl9SRUdfWE1BQ0pfTlRXS19SRUFGRklSTUVEX09LKSwgMCwgMzIpLAorCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigwLAorCQkmdnBfcmVnLT52cGF0aF9nZW5lcmFsX2ludF9tYXNrKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKKworfQorCisvKgorICogdnhnZV9od192cGF0aF9pbnRyX2Rpc2FibGUgLSBEaXNhYmxlIHZwYXRoIGludGVycnVwdHMuCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKgorICogRGlzYWJsZSB2cGF0aCBpbnRlcnJ1cHRzLiBUaGUgZnVuY3Rpb24gaXMgdG8gYmUgZXhlY3V0ZWQgdGhlIGxhc3QgaW4KKyAqIHZwYXRoIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX2ludHJfZW5hYmxlKCkKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2ludHJfZGlzYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkmdnBfcmVnLT52cGF0aF9nZW5lcmFsX2ludF9tYXNrKTsKKworCXZhbDY0ID0gVlhHRV9IV19USU1fQ0xSX0lOVF9FTl9WUCgxIDw8ICgxNiAtIHZwYXRoLT52cF9pZCkpOworCisJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwgJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+cGNpX2NvbmZpZ19lcnJvcnNfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+bXJwY2ltX3RvX3ZwYXRoX2FsYXJtX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnNycGNpbV90b192cGF0aF9hbGFybV9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT52cGF0aF9wcGlmX2ludF9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5zcnBjaW1fbXNnX3RvX3ZwYXRoX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BjaXBpZl9pbnRfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+d3JkbWFfYWxhcm1fbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+cHJjX2FsYXJtX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnhnbWFjX3ZwX2ludF9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX21hc2spOworCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19jaGFubmVsX21zaXhfbWFzayAtIE1hc2sgTVNJWCBWZWN0b3IuCisgKiBAY2hhbm5laDogQ2hhbm5lbCBmb3Igcnggb3IgdHggaGFuZGxlCisgKiBAbXNpeF9pZDogIE1TSVggSUQKKyAqCisgKiBUaGUgZnVuY3Rpb24gbWFza3MgdGhlIG1zaXggaW50ZXJydXB0IGZvciB0aGUgZ2l2ZW4gbXNpeF9pZAorICoKKyAqIFJldHVybnM6IDAKKyAqLwordm9pZCB2eGdlX2h3X2NoYW5uZWxfbXNpeF9tYXNrKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgaW50IG1zaXhfaWQpCit7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKAorCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKGNoYW5uZWwtPmZpcnN0X3ZwX2lkKyhtc2l4X2lkLzQpKSwKKwkJCTAsIDMyKSwKKwkJJmNoYW5uZWwtPmNvbW1vbl9yZWctPnNldF9tc2l4X21hc2tfdmVjdFttc2l4X2lkJTRdKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2NoYW5uZWxfbXNpeF91bm1hc2sgLSBVbm1hc2sgdGhlIE1TSVggVmVjdG9yLgorICogQGNoYW5uZWg6IENoYW5uZWwgZm9yIHJ4IG9yIHR4IGhhbmRsZQorICogQG1zaXhfaWQ6ICBNU0kgSUQKKyAqCisgKiBUaGUgZnVuY3Rpb24gdW5tYXNrcyB0aGUgbXNpeCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBtc2l4X2lkCisgKgorICogUmV0dXJuczogMAorICovCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfbXNpeF91bm1hc2soc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCBpbnQgbXNpeF9pZCkKK3sKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpdnhnZV9iVkFMbih2eGdlX21CSVQoY2hhbm5lbC0+Zmlyc3RfdnBfaWQrKG1zaXhfaWQvNCkpLAorCQkJMCwgMzIpLAorCQkmY2hhbm5lbC0+Y29tbW9uX3JlZy0+Y2xlYXJfbXNpeF9tYXNrX3ZlY3RbbXNpeF9pZCU0XSk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZSAtIFVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24KKyAqCQl3aXRoIG5ldyBpbnRlcnJ1cHQgdHlwZS4KKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqIEBpbnRyX21vZGU6IE5ldyBpbnRlcnJ1cHQgdHlwZQorICovCit1MzIgdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiBpbnRyX21vZGUpCit7CisKKwlpZiAoKGludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKSAmJgorCSAgIChpbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfTVNJWCkgJiYKKwkgICAoaW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX01TSVhfT05FX1NIT1QpICYmCisJICAgKGludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9ERUYpKQorCQlpbnRyX21vZGUgPSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FOworCisJaGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPSBpbnRyX21vZGU7CisJcmV0dXJuIGludHJfbW9kZTsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9pbnRyX2VuYWJsZSAtIEVuYWJsZSBpbnRlcnJ1cHRzLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICogQG9wOiBPbmUgb2YgdGhlIGVudW0gdnhnZV9od19kZXZpY2VfaW50ciBlbnVtZXJhdGVkIHZhbHVlcyBzcGVjaWZ5aW5nCisgKiAgICAgIHRoZSB0eXBlKHMpIG9mIGludGVycnVwdHMgdG8gZW5hYmxlLgorICoKKyAqIEVuYWJsZSBUaXRhbiBpbnRlcnJ1cHRzLiBUaGUgZnVuY3Rpb24gaXMgdG8gYmUgZXhlY3V0ZWQgdGhlIGxhc3QgaW4KKyAqIFRpdGFuIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUoKQorICovCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2ludHJfZW5hYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1MzIgaTsKKwl1NjQgdmFsNjQ7CisJdTMyIHZhbDMyOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKGhsZGV2LT52cGF0aHNfZGVwbG95ZWQgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisKKwkJdnhnZV9od192cGF0aF9pbnRyX2VuYWJsZSgKKwkJCVZYR0VfSFdfVklSVFVBTF9QQVRIX0hBTkRMRSgmaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0pKTsKKwl9CisKKwlpZiAoaGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPT0gVlhHRV9IV19JTlRSX01PREVfSVJRTElORSkgeworCQl2YWw2NCA9IGhsZGV2LT50aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJaGxkZXYtPnRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXTsKKworCQlpZiAodmFsNjQgIT0gMCkgeworCQkJd3JpdGVxKHZhbDY0LCAmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfc3RhdHVzMCk7CisKKwkJCXdyaXRlcSh+dmFsNjQsICZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMCk7CisJCX0KKworCQl2YWwzMiA9IGhsZGV2LT50aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJaGxkZXYtPnRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1JYXTsKKworCQlpZiAodmFsMzIgIT0gMCkgeworCQkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcih2YWwzMiwKKwkJCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X3N0YXR1czEpOworCisJCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKH52YWwzMiwKKwkJCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2sxKTsKKwkJfQorCX0KKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aXRhbl9nZW5lcmFsX2ludF9zdGF0dXMpOworCisJdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbChobGRldik7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od19kZXZpY2VfaW50cl9kaXNhYmxlIC0gRGlzYWJsZSBUaXRhbiBpbnRlcnJ1cHRzLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICogQG9wOiBPbmUgb2YgdGhlIGVudW0gdnhnZV9od19kZXZpY2VfaW50ciBlbnVtZXJhdGVkIHZhbHVlcyBzcGVjaWZ5aW5nCisgKiAgICAgIHRoZSB0eXBlKHMpIG9mIGludGVycnVwdHMgdG8gZGlzYWJsZS4KKyAqCisgKiBEaXNhYmxlIFRpdGFuIGludGVycnVwdHMuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfZGV2aWNlX2ludHJfZW5hYmxlKCkKKyAqLwordm9pZCB2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXUzMiBpOworCisJdnhnZV9od19kZXZpY2VfbWFza19hbGwoaGxkZXYpOworCisJLyogbWFzayBhbGwgdGhlIHRpbSBpbnRlcnJ1cHRzICovCisJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwgJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKFZYR0VfSFdfREVGQVVMVF8zMiwKKwkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2sxKTsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoIShobGRldi0+dnBhdGhzX2RlcGxveWVkICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXZ4Z2VfaHdfdnBhdGhfaW50cl9kaXNhYmxlKAorCQkJVlhHRV9IV19WSVJUVUFMX1BBVEhfSEFORExFKCZobGRldi0+dmlydHVhbF9wYXRoc1tpXSkpOworCX0KKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9tYXNrX2FsbCAtIE1hc2sgYWxsIGRldmljZSBpbnRlcnJ1cHRzLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIE1hc2sJYWxsIGRldmljZSBpbnRlcnJ1cHRzLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKCkKKyAqLwordm9pZCB2eGdlX2h3X2RldmljZV9tYXNrX2FsbChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTY0IHZhbDY0OworCisJdmFsNjQgPSBWWEdFX0hXX1RJVEFOX01BU0tfQUxMX0lOVF9BTEFSTSB8CisJCVZYR0VfSFdfVElUQU5fTUFTS19BTExfSU5UX1RSQUZGSUM7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMCwgMzIpLAorCQkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fbWFza19hbGxfaW50KTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsIC0gVW5tYXNrIGFsbCBkZXZpY2UgaW50ZXJydXB0cy4KKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqCisgKiBVbm1hc2sgYWxsIGRldmljZSBpbnRlcnJ1cHRzLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X2RldmljZV9tYXNrX2FsbCgpCisgKi8KK3ZvaWQgdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTY0IHZhbDY0ID0gMDsKKworCWlmIChobGRldi0+Y29uZmlnLmludHJfbW9kZSA9PSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKQorCQl2YWw2NCA9ICBWWEdFX0hXX1RJVEFOX01BU0tfQUxMX0lOVF9UUkFGRklDOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDAsIDMyKSwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fbWFza19hbGxfaW50KTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9mbHVzaF9pbyAtIEZsdXNoIGlvIHdyaXRlcy4KKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24JcGVyZm9ybXMgYSByZWFkIG9wZXJhdGlvbiB0byBmbHVzaCBpbyB3cml0ZXMuCisgKgorICogUmV0dXJuczogdm9pZAorICovCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2ZsdXNoX2lvKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1MzIgdmFsMzI7CisKKwl2YWwzMiA9IHJlYWRsKCZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fZ2VuZXJhbF9pbnRfc3RhdHVzKTsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEgLSBCZWdpbiBJUlEgcHJvY2Vzc2luZy4KKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqIEBza2lwX2FsYXJtczogRG8gbm90IGNsZWFyIHRoZSBhbGFybXMKKyAqIEByZWFzb246ICJSZWFzb24iIGZvciB0aGUgaW50ZXJydXB0LCB0aGUgdmFsdWUgb2YgVGl0YW4ncworICoJZ2VuZXJhbF9pbnRfc3RhdHVzIHJlZ2lzdGVyLgorICoKKyAqIFRoZSBmdW5jdGlvbglwZXJmb3JtcyB0d28gYWN0aW9ucywgSXQgZmlyc3QgY2hlY2tzIHdoZXRoZXIgKHNoYXJlZCBJUlEpIHRoZQorICogaW50ZXJydXB0IHdhcyByYWlzZWQJYnkgdGhlIGRldmljZS4gTmV4dCwgaXQJbWFza3MgdGhlIGRldmljZSBpbnRlcnJ1cHRzLgorICoKKyAqIE5vdGU6CisgKiB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEoKSBkb2VzIG5vdCBmbHVzaCBNTUlPIHdyaXRlcyB0aHJvdWdoIHRoZQorICogYnJpZGdlLiBUaGVyZWZvcmUsIHR3byBiYWNrLXRvLWJhY2sgaW50ZXJydXB0cyBhcmUgcG90ZW50aWFsbHkgcG9zc2libGUuCisgKgorICogUmV0dXJuczogMCwgaWYgdGhlIGludGVycnVwdAlpcyBub3QgIm91cnMiIChub3RlIHRoYXQgaW4gdGhpcyBjYXNlIHRoZQorICogZGV2aWNlIHJlbWFpbiBlbmFibGVkKS4KKyAqIE90aGVyd2lzZSwgdnhnZV9od19kZXZpY2VfYmVnaW5faXJxKCkgcmV0dXJucyA2NGJpdCBnZW5lcmFsIGFkYXB0ZXIKKyAqIHN0YXR1cy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJCQkgICAgIHUzMiBza2lwX2FsYXJtcywgdTY0ICpyZWFzb24pCit7CisJdTMyIGk7CisJdTY0IHZhbDY0OworCXU2NCBhZGFwdGVyX3N0YXR1czsKKwl1NjQgdnBhdGhfbWFzazsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHJldCA9IFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fZ2VuZXJhbF9pbnRfc3RhdHVzKTsKKworCWlmICh1bmxpa2VseSghdmFsNjQpKSB7CisJCS8qIG5vdCBUaXRhbiBpbnRlcnJ1cHQJKi8KKwkJKnJlYXNvbgk9IDA7CisJCXJldCA9IFZYR0VfSFdfRVJSX1dST05HX0lSUTsKKwkJZ290byBleGl0OworCX0KKworCWlmICh1bmxpa2VseSh2YWw2NCA9PSBWWEdFX0hXX0FMTF9GT1hFUykpIHsKKworCQlhZGFwdGVyX3N0YXR1cyA9IHJlYWRxKCZobGRldi0+Y29tbW9uX3JlZy0+YWRhcHRlcl9zdGF0dXMpOworCisJCWlmIChhZGFwdGVyX3N0YXR1cyA9PSBWWEdFX0hXX0FMTF9GT1hFUykgeworCisJCQlfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvcihobGRldiwKKwkJCQlOVUxMX1ZQSUQsIFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUpOworCQkJKnJlYXNvbgk9IDA7CisJCQlyZXQgPSBWWEdFX0hXX0VSUl9TTE9UX0ZSRUVaRTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCWhsZGV2LT5zdGF0cy5zd19kZXZfaW5mb19zdGF0cy50b3RhbF9pbnRyX2NudCsrOworCisJKnJlYXNvbgk9IHZhbDY0OworCisJdnBhdGhfbWFzayA9IGhsZGV2LT52cGF0aHNfZGVwbG95ZWQgPj4KKwkJCQkoNjQgLSBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTKTsKKworCWlmICh2YWw2NCAmCisJICAgIFZYR0VfSFdfVElUQU5fR0VORVJBTF9JTlRfU1RBVFVTX1ZQQVRIX1RSQUZGSUNfSU5UKHZwYXRoX21hc2spKSB7CisJCWhsZGV2LT5zdGF0cy5zd19kZXZfaW5mb19zdGF0cy50cmFmZmljX2ludHJfY250Kys7CisKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisJfQorCisJaGxkZXYtPnN0YXRzLnN3X2Rldl9pbmZvX3N0YXRzLm5vdF90cmFmZmljX2ludHJfY250Kys7CisKKwlpZiAodW5saWtlbHkodmFsNjQgJgorCQkJVlhHRV9IV19USVRBTl9HRU5FUkFMX0lOVF9TVEFUVVNfVlBBVEhfQUxBUk1fSU5UKSkgeworCisJCWVudW0gdnhnZV9od19zdGF0dXMgZXJyb3JfbGV2ZWwgPSBWWEdFX0hXX09LOworCisJCWhsZGV2LT5zdGF0cy5zd19kZXZfZXJyX3N0YXRzLnZwYXRoX2FsYXJtcysrOworCisJCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQkJaWYgKCEoaGxkZXYtPnZwYXRoc19kZXBsb3llZCAmIHZ4Z2VfbUJJVChpKSkpCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IF9fdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzKAorCQkJCSZobGRldi0+dmlydHVhbF9wYXRoc1tpXSwgc2tpcF9hbGFybXMpOworCisJCQllcnJvcl9sZXZlbCA9IFZYR0VfSFdfU0VUX0xFVkVMKHJldCwgZXJyb3JfbGV2ZWwpOworCisJCQlpZiAodW5saWtlbHkoKHJldCA9PSBWWEdFX0hXX0VSUl9DUklUSUNBTCkgfHwKKwkJCQkocmV0ID09IFZYR0VfSFdfRVJSX1NMT1RfRlJFRVpFKSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBlcnJvcl9sZXZlbDsKKwl9CitleGl0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZAorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIExpbmsgdXAgaW5kaWNhdGlvbiBoYW5kbGVyLiBUaGUgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBIVyB3aGVuCisgKiBUaXRhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgbGluayBpcyB1cCBmb3IgcHJvZ3JhbW1hYmxlIGFtb3VudCBvZiB0aW1lLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgbGluayBzdGF0ZSBpcyBub3QgZG93biwgcmV0dXJuLgorCSAqLworCWlmIChobGRldi0+bGlua19zdGF0ZSA9PSBWWEdFX0hXX0xJTktfVVApCisJCWdvdG8gZXhpdDsKKworCWhsZGV2LT5saW5rX3N0YXRlID0gVlhHRV9IV19MSU5LX1VQOworCisJLyogbm90aWZ5IGRyaXZlciAqLworCWlmIChobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX3VwKQorCQlobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX3VwKGhsZGV2KTsKK2V4aXQ6CisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX2Rvd25faW5kCisgKiBAaGxkZXY6IEhXIGRldmljZSBoYW5kbGUuCisgKgorICogTGluayBkb3duIGluZGljYXRpb24gaGFuZGxlci4gVGhlIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgSFcgd2hlbgorICogVGl0YW4gaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgaXMgZG93bi4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua19kb3duX2luZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgbGluayBzdGF0ZSBpcyBub3QgZG93biwgcmV0dXJuLgorCSAqLworCWlmIChobGRldi0+bGlua19zdGF0ZSA9PSBWWEdFX0hXX0xJTktfRE9XTikKKwkJZ290byBleGl0OworCisJaGxkZXYtPmxpbmtfc3RhdGUgPSBWWEdFX0hXX0xJTktfRE9XTjsKKworCS8qIG5vdGlmeSBkcml2ZXIgKi8KKwlpZiAoaGxkZXYtPnVsZF9jYWxsYmFja3MubGlua19kb3duKQorCQlobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX2Rvd24oaGxkZXYpOworZXhpdDoKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoqCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvciAtIEhhbmRsZSBlcnJvcgorICogQGhsZGV2OiBIVyBkZXZpY2UKKyAqIEB2cF9pZDogVnBhdGggSWQKKyAqIEB0eXBlOiBFcnJvciB0eXBlLiBQbGVhc2Ugc2VlIGVudW0gdnhnZV9od19ldmVudHt9CisgKgorICogSGFuZGxlIGVycm9yLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvcigKKwkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQl1MzIgdnBfaWQsCisJCWVudW0gdnhnZV9od19ldmVudCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVlhHRV9IV19FVkVOVF9VTktOT1dOOgorCQlicmVhazsKKwljYXNlIFZYR0VfSFdfRVZFTlRfUkVTRVRfU1RBUlQ6CisJY2FzZSBWWEdFX0hXX0VWRU5UX1JFU0VUX0NPTVBMRVRFOgorCWNhc2UgVlhHRV9IV19FVkVOVF9MSU5LX0RPV046CisJY2FzZSBWWEdFX0hXX0VWRU5UX0xJTktfVVA6CisJCWdvdG8gb3V0OworCWNhc2UgVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVEOgorCQlnb3RvIG91dDsKKwljYXNlIFZYR0VfSFdfRVZFTlRfRUNDRVJSOgorCWNhc2UgVlhHRV9IV19FVkVOVF9NUlBDSU1fRUNDRVJSOgorCQlnb3RvIG91dDsKKwljYXNlIFZYR0VfSFdfRVZFTlRfRklGT19FUlI6CisJY2FzZSBWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUjoKKwljYXNlIFZYR0VfSFdfRVZFTlRfQ1JJVElDQUxfRVJSOgorCWNhc2UgVlhHRV9IV19FVkVOVF9TRVJSOgorCQlicmVhazsKKwljYXNlIFZYR0VfSFdfRVZFTlRfU1JQQ0lNX1NFUlI6CisJY2FzZSBWWEdFX0hXX0VWRU5UX01SUENJTV9TRVJSOgorCQlnb3RvIG91dDsKKwljYXNlIFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZ4Z2VfYXNzZXJ0KDApOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBub3RpZnkgZHJpdmVyICovCisJaWYgKGhsZGV2LT51bGRfY2FsbGJhY2tzLmNyaXRfZXJyKQorCQlobGRldi0+dWxkX2NhbGxiYWNrcy5jcml0X2VycigKKwkJCShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKWhsZGV2LAorCQkJdHlwZSwgdnBfaWQpOworb3V0OgorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qKgorICogdnhnZV9od19kZXZpY2VfY2xlYXJfdHhfcnggLSBBY2tub3dsZWRnZSAodGhhdCBpcywgY2xlYXIpIHRoZQorICogY29uZGl0aW9uIHRoYXQgaGFzIGNhdXNlZCB0aGUgVHggYW5kIFJYIGludGVycnVwdC4KKyAqIEBobGRldjogSFcgZGV2aWNlLgorICoKKyAqIEFja25vd2xlZGdlICh0aGF0IGlzLCBjbGVhcikgdGhlIGNvbmRpdGlvbiB0aGF0IGhhcyBjYXVzZWQKKyAqIHRoZSBUeCBhbmQgUnggaW50ZXJydXB0LgorICogU2VlIGFsc286IHZ4Z2VfaHdfZGV2aWNlX2JlZ2luX2lycSgpLAorICogdnhnZV9od19kZXZpY2VfbWFza190eF9yeCgpLCB2eGdlX2h3X2RldmljZV91bm1hc2tfdHhfcngoKS4KKyAqLwordm9pZCB2eGdlX2h3X2RldmljZV9jbGVhcl90eF9yeChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisKKwlpZiAoKGhsZGV2LT50aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gIT0gMCkgfHwKKwkgICAoaGxkZXYtPnRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSAhPSAwKSkgeworCQl3cml0ZXEoKGhsZGV2LT50aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJCSBobGRldi0+dGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKSwKKwkJCQkmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfc3RhdHVzMCk7CisJfQorCisJaWYgKChobGRldi0+dGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJICAgKGhsZGV2LT50aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0gIT0gMCkpIHsKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJCQkoaGxkZXYtPnRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSB8CisJCQkJIGhsZGV2LT50aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pLAorCQkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9zdGF0dXMxKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiB2eGdlX2h3X2NoYW5uZWxfZHRyX2FsbG9jIC0gQWxsb2NhdGUgYSBkdHIgZnJvbSB0aGUgY2hhbm5lbAorICogQGNoYW5uZWw6IENoYW5uZWwKKyAqIEBkdHJoOiBCdWZmZXIgdG8gcmV0dXJuIHRoZSBEVFIgcG9pbnRlcgorICoKKyAqIEFsbG9jYXRlcyBhIGR0ciBmcm9tIHRoZSByZXNlcnZlIGFycmF5LiBJZiB0aGUgcmVzZXJ2ZSBhcnJheSBpcyBlbXB0eSwKKyAqIGl0IHN3YXBzIHRoZSByZXNlcnZlIGFuZCBmcmVlIGFycmF5cy4KKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfY2hhbm5lbF9kdHJfYWxsb2Moc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICoqZHRyaCkKK3sKKwl2b2lkICoqdG1wX2FycjsKKworCWlmIChjaGFubmVsLT5yZXNlcnZlX3B0ciAtIGNoYW5uZWwtPnJlc2VydmVfdG9wID4gMCkgeworX2FsbG9jX2FmdGVyX3N3YXA6CisJCSpkdHJoID0JY2hhbm5lbC0+cmVzZXJ2ZV9hcnJbLS1jaGFubmVsLT5yZXNlcnZlX3B0cl07CisKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisJfQorCisJLyogc3dpdGNoIGJldHdlZW4gZW1wdHkJYW5kIGZ1bGwgYXJyYXlzCSovCisKKwkvKiB0aGUgaWRlYSBiZWhpbmQgc3VjaAlhIGRlc2lnbiBpcyB0aGF0IGJ5IGhhdmluZyBmcmVlCWFuZCByZXNlcnZlZAorCSAqIGFycmF5cyBzZXBhcmF0ZWQgd2UgYmFzaWNhbGx5IHNlcGFyYXRlZCBpcnEgYW5kIG5vbi1pcnEgcGFydHMuCisJICogaS5lLglubyBhZGRpdGlvbmFsIGxvY2sgbmVlZAl0byBiZSBkb25lIHdoZW4Jd2UgZnJlZQlhIHJlc291cmNlICovCisKKwlpZiAoY2hhbm5lbC0+bGVuZ3RoIC0gY2hhbm5lbC0+ZnJlZV9wdHIgPiAwKSB7CisKKwkJdG1wX2Fycgk9IGNoYW5uZWwtPnJlc2VydmVfYXJyOworCQljaGFubmVsLT5yZXNlcnZlX2FyciA9IGNoYW5uZWwtPmZyZWVfYXJyOworCQljaGFubmVsLT5mcmVlX2FyciA9IHRtcF9hcnI7CisJCWNoYW5uZWwtPnJlc2VydmVfcHRyID0gY2hhbm5lbC0+bGVuZ3RoOworCQljaGFubmVsLT5yZXNlcnZlX3RvcCA9IGNoYW5uZWwtPmZyZWVfcHRyOworCQljaGFubmVsLT5mcmVlX3B0ciA9IGNoYW5uZWwtPmxlbmd0aDsKKworCQljaGFubmVsLT5zdGF0cy0+cmVzZXJ2ZV9mcmVlX3N3YXBzX2NudCsrOworCisJCWdvdG8gX2FsbG9jX2FmdGVyX3N3YXA7CisJfQorCisJY2hhbm5lbC0+c3RhdHMtPmZ1bGxfY250Kys7CisKKwkqZHRyaCA9CU5VTEw7CisJcmV0dXJuIFZYR0VfSFdfSU5GX09VVF9PRl9ERVNDUklQVE9SUzsKK30KKworLyoKKyAqIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfcG9zdCAtIFBvc3QgYSBkdHIgdG8gdGhlIGNoYW5uZWwKKyAqIEBjaGFubmVsaDogQ2hhbm5lbAorICogQGR0cmg6IERUUiBwb2ludGVyCisgKgorICogUG9zdHMgYSBkdHIgdG8gd29yayBhcnJheS4KKyAqCisgKi8KK3ZvaWQgdnhnZV9od19jaGFubmVsX2R0cl9wb3N0KHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqZHRyaCkKK3sKKwl2eGdlX2Fzc2VydChjaGFubmVsLT53b3JrX2FycltjaGFubmVsLT5wb3N0X2luZGV4XSA9PSBOVUxMKTsKKworCWNoYW5uZWwtPndvcmtfYXJyW2NoYW5uZWwtPnBvc3RfaW5kZXgrK10gPSBkdHJoOworCisJLyogd3JhcC1hcm91bmQgKi8KKwlpZiAoY2hhbm5lbC0+cG9zdF9pbmRleAk9PSBjaGFubmVsLT5sZW5ndGgpCisJCWNoYW5uZWwtPnBvc3RfaW5kZXggPSAwOworfQorCisvKgorICogdnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUgLSBSZXR1cm5zIG5leHQgY29tcGxldGVkIGR0cgorICogQGNoYW5uZWw6IENoYW5uZWwKKyAqIEBkdHI6IEJ1ZmZlciB0byByZXR1cm4gdGhlIG5leHQgY29tcGxldGVkIERUUiBwb2ludGVyCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBjb21wbGV0ZWQgZHRyIHdpdGggb3V0IHJlbW92aW5nIGl0IGZyb20gd29yayBhcnJheQorICoKKyAqLwordm9pZAordnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICoqZHRyaCkKK3sKKwl2eGdlX2Fzc2VydChjaGFubmVsLT5jb21wbF9pbmRleCA8IGNoYW5uZWwtPmxlbmd0aCk7CisKKwkqZHRyaCA9CWNoYW5uZWwtPndvcmtfYXJyW2NoYW5uZWwtPmNvbXBsX2luZGV4XTsKK30KKworLyoKKyAqIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUgLSBSZW1vdmVzIG5leHQgY29tcGxldGVkIGR0ciBmcm9tIHRoZSB3b3JrIGFycmF5CisgKiBAY2hhbm5lbDogQ2hhbm5lbCBoYW5kbGUKKyAqCisgKiBSZW1vdmVzIHRoZSBuZXh0IGNvbXBsZXRlZCBkdHIgZnJvbSB3b3JrIGFycmF5CisgKgorICovCit2b2lkIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCWNoYW5uZWwtPndvcmtfYXJyW2NoYW5uZWwtPmNvbXBsX2luZGV4XQk9IE5VTEw7CisKKwkvKiB3cmFwLWFyb3VuZCAqLworCWlmICgrK2NoYW5uZWwtPmNvbXBsX2luZGV4ID09IGNoYW5uZWwtPmxlbmd0aCkKKwkJY2hhbm5lbC0+Y29tcGxfaW5kZXggPSAwOworCisJY2hhbm5lbC0+c3RhdHMtPnRvdGFsX2NvbXBsX2NudCsrOworfQorCisvKgorICogdnhnZV9od19jaGFubmVsX2R0cl9mcmVlIC0gRnJlZXMgYSBkdHIKKyAqIEBjaGFubmVsOiBDaGFubmVsIGhhbmRsZQorICogQGR0cjogIERUUiBwb2ludGVyCisgKgorICogUmV0dXJucyB0aGUgZHRyIHRvIGZyZWUgYXJyYXkKKyAqCisgKi8KK3ZvaWQgdnhnZV9od19jaGFubmVsX2R0cl9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqZHRyaCkKK3sKKwljaGFubmVsLT5mcmVlX2FyclstLWNoYW5uZWwtPmZyZWVfcHRyXSA9IGR0cmg7Cit9CisKKy8qCisgKiB2eGdlX2h3X2NoYW5uZWxfZHRyX2NvdW50CisgKiBAY2hhbm5lbDogQ2hhbm5lbCBoYW5kbGUuIE9idGFpbmVkIHZpYSB2eGdlX2h3X2NoYW5uZWxfb3BlbigpLgorICoKKyAqIFJldHJlaXZlIG51bWJlciBvZiBEVFJzIGF2YWlsYWJsZS4gVGhpcyBmdW5jdGlvbiBjYW4gbm90IGJlIGNhbGxlZAorICogZnJvbSBkYXRhIHBhdGguIHJpbmdfaW5pdGlhbF9yZXBsZW5pc2hpKCkgaXMgdGhlIG9ubHkgdXNlci4KKyAqLworaW50IHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY291bnQoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCXJldHVybiAoY2hhbm5lbC0+cmVzZXJ2ZV9wdHIgLSBjaGFubmVsLT5yZXNlcnZlX3RvcCkgKworCQkoY2hhbm5lbC0+bGVuZ3RoIC0gY2hhbm5lbC0+ZnJlZV9wdHIpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZQktIFJlc2VydmUgcmluZyBkZXNjcmlwdG9yLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IFJlc2VydmVkIGRlc2NyaXB0b3IuIE9uIHN1Y2Nlc3MgSFcgZmlsbHMgdGhpcyAib3V0IiBwYXJhbWV0ZXIKKyAqIHdpdGggYSB2YWxpZCBoYW5kbGUuCisgKgorICogUmVzZXJ2ZSBSeCBkZXNjcmlwdG9yIGZvciB0aGUgc3Vic2VxdWVudCBmaWxsaW5nLWluIGRyaXZlcgorICogYW5kIHBvc3Rpbmcgb24gdGhlIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCAoQGNoYW5uZWxoKQorICogdmlhIHZ4Z2VfaHdfcmluZ19yeGRfcG9zdCgpLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzLgorICogVlhHRV9IV19JTkZfT1VUX09GX0RFU0NSSVBUT1JTIC0gQ3VycmVudGx5IG5vIGRlc2NyaXB0b3JzIGF2YWlsYWJsZS4KKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZywKKwl2b2lkICoqcnhkaCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2NoYW5uZWxfZHRyX2FsbG9jKGNoYW5uZWwsIHJ4ZGgpOworCisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisJCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPQorCQkJKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKikqcnhkaDsKKworCQlyeGRwLT5jb250cm9sXzAJPSByeGRwLT5jb250cm9sXzEgPSAwOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9mcmVlIC0gRnJlZSBkZXNjcmlwdG9yLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICoKKyAqIEZyZWUJdGhlIHJlc2VydmVkIGRlc2NyaXB0b3IuIFRoaXMgb3BlcmF0aW9uIGlzICJzeW1tZXRyaWNhbCIgdG8KKyAqIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZS4gVGhlICJmcmVlLWluZyIgY29tcGxldGVzIHRoZSBkZXNjcmlwdG9yJ3MKKyAqIGxpZmVjeWNsZS4KKyAqCisgKiBBZnRlciBmcmVlLWluZyAoc2VlIHZ4Z2VfaHdfcmluZ19yeGRfZnJlZSgpKSB0aGUgZGVzY3JpcHRvciBhZ2FpbiBjYW4KKyAqIGJlOgorICoKKyAqIC0gcmVzZXJ2ZWQgKHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZSk7CisgKgorICogLSBwb3N0ZWQJKHZ4Z2VfaHdfcmluZ19yeGRfcG9zdCk7CisgKgorICogLSBjb21wbGV0ZWQgKHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQpOworICoKKyAqIC0gYW5kIHJlY3ljbGVkIGFnYWluCSh2eGdlX2h3X3JpbmdfcnhkX2ZyZWUpLgorICoKKyAqIEZvciBhbHRlcm5hdGl2ZSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgbW9yZSBkZXRhaWxzIHBsZWFzZSByZWZlciB0bworICogdGhlIGRlc2lnbiBkb2MuCisgKgorICovCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfZnJlZShzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJdnhnZV9od19jaGFubmVsX2R0cl9mcmVlKGNoYW5uZWwsIHJ4ZGgpOworCit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9wcmVfcG9zdCAtIFByZXBhcmUgcnhkIGFuZCBwb3N0CisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIGEgcnhkIGFuZCBwb3N0cworICovCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfcHJlX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB2b2lkICpyeGRoKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKKworCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfcG9zdChjaGFubmVsLCByeGRoKTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdCAtIFByb2Nlc3MgcnhkIGFmdGVyIHBvc3QuCisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogUHJvY2Vzc2VzIHJ4ZCBhZnRlciBwb3N0CisgKi8KK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3Qoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB2b2lkICpyeGRoKQoreworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKXJ4ZGg7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJcnhkcC0+Y29udHJvbF8wCXw9IFZYR0VfSFdfUklOR19SWERfTElTVF9PV05fQURBUFRFUjsKKworCWlmIChyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCA+IDApCisJCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250LS07Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9wb3N0IC0gUG9zdCBkZXNjcmlwdG9yIG9uIHRoZSByaW5nLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3Igb2J0YWluZWQgdmlhIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZSgpLgorICoKKyAqIFBvc3QJZGVzY3JpcHRvciBvbiB0aGUgcmluZy4KKyAqIFByaW9yIHRvIHBvc3RpbmcgdGhlCWRlc2NyaXB0b3Igc2hvdWxkIGJlIGZpbGxlZCBpbiBhY2NvcmRhbmNlIHdpdGgKKyAqIEhvc3QvVGl0YW4gaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIGEgZ2l2ZW4gc2VydmljZSAoTEwsIGV0Yy4pLgorICoKKyAqLwordm9pZCB2eGdlX2h3X3JpbmdfcnhkX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB2b2lkICpyeGRoKQoreworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKXJ4ZGg7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJd21iKCk7CisJcnhkcC0+Y29udHJvbF8wCXw9IFZYR0VfSFdfUklOR19SWERfTElTVF9PV05fQURBUFRFUjsKKworCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfcG9zdChjaGFubmVsLCByeGRoKTsKKworCWlmIChyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCA+IDApCisJCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250LS07Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3Rfd21iIC0gUHJvY2VzcyByeGQgYWZ0ZXIgcG9zdCB3aXRoIG1lbW9yeSBiYXJyaWVyLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICoKKyAqIFByb2Nlc3NlcyByeGQgYWZ0ZXIgcG9zdCB3aXRoIG1lbW9yeSBiYXJyaWVyLgorICovCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0X3dtYihzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJd21iKCk7CisJdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3QocmluZywgcnhkaCk7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9uZXh0X2NvbXBsZXRlZCAtIEdldCB0aGUgX25leHRfIGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLiBSZXR1cm5lZCBieSBIVy4KKyAqIEB0X2NvZGU6CVRyYW5zZmVyIGNvZGUsIGFzIHBlciBUaXRhbiBVc2VyIEd1aWRlLAorICoJIFJlY2VpdmUgRGVzY3JpcHRvciBGb3JtYXQuIFJldHVybmVkIGJ5IEhXLgorICoKKyAqIFJldHJpZXZlIHRoZQlfbmV4dF8gY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKiBIVyB1c2VzIHJpbmcgY2FsbGJhY2sgKCp2eGdlX2h3X3JpbmdfY2FsbGJhY2tfZikgdG8gbm90aWZpeQorICogZHJpdmVyIG9mIG5ldyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMuIEFmdGVyIHRoYXQKKyAqIHRoZSBkcml2ZXIgY2FuIHVzZSB2eGdlX2h3X3JpbmdfcnhkX25leHRfY29tcGxldGVkIHRvIHJldHJpZXZlIHRoZSByZXN0CisgKiBjb21wbGV0aW9ucyAodGhlIHZlcnkgZmlyc3QgY29tcGxldGlvbiBpcyBwYXNzZWQgYnkgSFcgdmlhCisgKiB2eGdlX2h3X3JpbmdfY2FsbGJhY2tfZikuCisgKgorICogSW1wbGVtZW50YXRpb24td2lzZSwgdGhlIGRyaXZlciBpcyBmcmVlIHRvIGNhbGwKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQgZWl0aGVyIGltbWVkaWF0ZWx5IGZyb20gaW5zaWRlIHRoZQorICogcmluZyBjYWxsYmFjaywgb3IgaW4gYSBkZWZlcnJlZCBmYXNoaW9uIGFuZCBzZXBhcmF0ZSAoZnJvbSBIVykKKyAqIGNvbnRleHQuCisgKgorICogTm9uLXplcm8gQHRfY29kZSBtZWFucyBmYWlsdXJlIHRvIGZpbGwtaW4gcmVjZWl2ZSBidWZmZXIocykKKyAqIG9mIHRoZSBkZXNjcmlwdG9yLgorICogRm9yIGluc3RhbmNlLCBwYXJpdHkJZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyLgorICogSW4gdGhpcyBjYXNlCVRpdGFuIHdpbGwgY29tcGxldGUgdGhlIGRlc2NyaXB0b3IgYW5kIGluZGljYXRlCisgKiBmb3IgdGhlIGhvc3QJdGhhdCB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBub3QgdG8gYmUgdXNlZC4KKyAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0byBUaXRhbiBVc2VyIEd1aWRlLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzLgorICogVlhHRV9IV19JTkZfTk9fTU9SRV9DT01QTEVURURfREVTQ1JJUFRPUlMgLSBObyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMKKyAqIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3JpbmdfY2FsbGJhY2tfZnt9LAorICogdnhnZV9od19maWZvX3J4ZF9uZXh0X2NvbXBsZXRlZCgpLCBlbnVtIHZ4Z2VfaHdfc3RhdHVze30uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19yaW5nX3J4ZF9uZXh0X2NvbXBsZXRlZCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKipyeGRoLCB1OCAqdF9jb2RlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICpyeGRwOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKKworCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfdHJ5X2NvbXBsZXRlKGNoYW5uZWwsIHJ4ZGgpOworCisJcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopKnJ4ZGg7CisJaWYgKHJ4ZHAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0lORl9OT19NT1JFX0NPTVBMRVRFRF9ERVNDUklQVE9SUzsKKwkJZ290byBleGl0OworCX0KKworCS8qIGNoZWNrIHdoZXRoZXIgaXQgaXMgbm90IHRoZSBlbmQgKi8KKwlpZiAoIShyeGRwLT5jb250cm9sXzAgJglWWEdFX0hXX1JJTkdfUlhEX0xJU1RfT1dOX0FEQVBURVIpKSB7CisKKwkJdnhnZV9hc3NlcnQoKChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopcnhkcCktPmhvc3RfY29udHJvbCAhPQorCQkJCTApOworCisJCSsrcmluZy0+Y21wbF9jbnQ7CisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoY2hhbm5lbCk7CisKKwkJKnRfY29kZQk9ICh1OClWWEdFX0hXX1JJTkdfUlhEX1RfQ09ERV9HRVQocnhkcC0+Y29udHJvbF8wKTsKKworCQl2eGdlX2Fzc2VydCgqdF9jb2RlICE9IFZYR0VfSFdfUklOR19SWERfVF9DT0RFX1VOVVNFRCk7CisKKwkJcmluZy0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQrKzsKKwkJaWYgKHJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfbWF4IDwKKwkJCQlyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCkKKwkJCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfbWF4ID0KKwkJCQlyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudDsKKworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcmVzZXQgaXQuIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuCisJICogZ2FyYmFnZSB0byB0aGUgZHJpdmVyICovCisJKnJ4ZGggPQlOVUxMOworCXN0YXR1cyA9IFZYR0VfSFdfSU5GX05PX01PUkVfQ09NUExFVEVEX0RFU0NSSVBUT1JTOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19oYW5kbGVfdGNvZGUgLSBIYW5kbGUgdHJhbnNmZXIgY29kZS4KKyAqIEByaW5nOiBIYW5kbGUgdG8gdGhlIHJpbmcgb2JqZWN0IHVzZWQgZm9yIHJlY2VpdmUKKyAqIEByeGRoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqIEB0X2NvZGU6IE9uZSBvZiB0aGUgZW51bWVyYXRlZCAoYW5kIGRvY3VtZW50ZWQgaW4gdGhlIFRpdGFuIHVzZXIgZ3VpZGUpCisgKiAidHJhbnNmZXIgY29kZXMiLgorICoKKyAqIEhhbmRsZSBkZXNjcmlwdG9yJ3MgdHJhbnNmZXIgY29kZS4gVGhlIGxhdHRlciBjb21lcyB3aXRoIGVhY2ggY29tcGxldGVkCisgKiBkZXNjcmlwdG9yLgorICoKKyAqIFJldHVybnM6IG9uZSBvZiB0aGUgZW51bSB2eGdlX2h3X3N0YXR1c3t9IGVudW1lcmF0ZWQgdHlwZXMuCisgKiBWWEdFX0hXX09LCQkJLSBmb3Igc3VjY2Vzcy4KKyAqIFZYR0VfSFdfRVJSX0NSSVRJQ0FMICAgICAgICAgLSB3aGVuIGVuY291bnRlcnMgY3JpdGljYWwgZXJyb3IuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19yaW5nX2hhbmRsZV90Y29kZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgsIHU4IHRfY29kZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJLyogSWYgdGhlIHRfY29kZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCBpZiB0aGUKKwkgKiB0X2NvZGUgaXMgb3RoZXIgdGhhbiAweDUgKHVucGFyc2VhYmxlIHBhY2tldAorCSAqIHN1Y2ggYXMgdW5rbm93biBVUFY2IGhlYWRlciksIERyb3AgaXQgISEhCisJICovCisKKwlpZiAodF9jb2RlID09IDAgfHwgdF9jb2RlID09IDUpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwkJZ290byBleGl0OworCX0KKworCWlmICh0X2NvZGUgPiAweEYpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9UQ09ERTsKKwkJZ290byBleGl0OworCX0KKworCXJpbmctPnN0YXRzLT5yeGRfdF9jb2RlX2Vycl9jbnRbdF9jb2RlXSsrOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIF9fdnhnZV9od19ub25fb2ZmbG9hZF9kYl9wb3N0IC0gUG9zdCBub24gb2ZmbG9hZCBkb29yYmVsbAorICoKKyAqIEBmaWZvOiBmaWZvaGFuZGxlCisgKiBAdHhkbF9wdHI6IFRoZSBzdGFydGluZyBsb2NhdGlvbiBvZiB0aGUgVHhETCBpbiBob3N0IG1lbW9yeQorICogQG51bV90eGRzOiBUaGUgaGlnaGVzdCBUeEQgaW4gdGhpcyBUeERMICgwIHRvIDI1NSBtZWFucyAxIHRvIDI1NikKKyAqIEBub19zbm9vcDogTm8gc25vb3AgZmxhZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBvc3RzIGEgbm9uLW9mZmxvYWQgZG9vcmJlbGwgdG8gZG9vcmJlbGwgRklGTworICoKKyAqLworc3RhdGljIHZvaWQgX192eGdlX2h3X25vbl9vZmZsb2FkX2RiX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAorCXU2NCB0eGRsX3B0ciwgdTMyIG51bV90eGRzLCB1MzIgbm9fc25vb3ApCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZmaWZvLT5jaGFubmVsOworCisJd3JpdGVxKFZYR0VfSFdfTk9EQldfVFlQRShWWEdFX0hXX05PREJXX1RZUEVfTk9EQlcpIHwKKwkJVlhHRV9IV19OT0RCV19MQVNUX1RYRF9OVU1CRVIobnVtX3R4ZHMpIHwKKwkJVlhHRV9IV19OT0RCV19HRVRfTk9fU05PT1Aobm9fc25vb3ApLAorCQkmZmlmby0+bm9mbF9kYi0+Y29udHJvbF8wKTsKKworCXdtYigpOworCisJd3JpdGVxKHR4ZGxfcHRyLCAmZmlmby0+bm9mbF9kYi0+dHhkbF9wdHIpOworCXdtYigpOworCit9CisKKy8qKgorICogdnhnZV9od19maWZvX2ZyZWVfdHhkbF9jb3VudF9nZXQgLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdHhkbHMgYXZhaWxhYmxlIGluCisgKiB0aGUgZmlmbworICogQGZpZm9oOiBIYW5kbGUgdG8gdGhlIGZpZm8gb2JqZWN0IHVzZWQgZm9yIG5vbiBvZmZsb2FkIHNlbmQKKyAqLwordTMyIHZ4Z2VfaHdfZmlmb19mcmVlX3R4ZGxfY291bnRfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gpCit7CisJcmV0dXJuIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY291bnQoJmZpZm9oLT5jaGFubmVsKTsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlIC0gUmVzZXJ2ZSBmaWZvIGRlc2NyaXB0b3IuCisgKiBAZmlmb2g6IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICogQHR4ZGxoOiBSZXNlcnZlZCBkZXNjcmlwdG9yLiBPbiBzdWNjZXNzIEhXIGZpbGxzIHRoaXMgIm91dCIgcGFyYW1ldGVyCisgKiAgICAgICAgd2l0aCBhIHZhbGlkIGhhbmRsZS4KKyAqIEB0eGRsX3ByaXY6IEJ1ZmZlciB0byByZXR1cm4gdGhlIHBvaW50ZXIgdG8gcGVyIHR4ZGwgc3BhY2UKKyAqCisgKiBSZXNlcnZlIGEgc2luZ2xlIFR4REwgKHRoYXQgaXMsIGZpZm8gZGVzY3JpcHRvcikKKyAqIGZvciB0aGUgc3Vic2VxdWVudCBmaWxsaW5nLWluIGJ5IGRyaXZlcikKKyAqIGFuZCBwb3N0aW5nIG9uIHRoZSBjb3JyZXNwb25kaW5nIGNoYW5uZWwgKEBjaGFubmVsaCkKKyAqIHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KCkuCisgKgorICogTm90ZTogaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGRyaXZlciB0byByZXNlcnZlIG11bHRpcGxlIGRlc2NyaXB0b3JzCisgKiBmb3IgbGVuZ3RoeSAoZS5nLiwgTFNPKSB0cmFuc21pdCBvcGVyYXRpb24uIEEgc2luZ2xlIGZpZm8gZGVzY3JpcHRvcgorICogY2FycmllcyB1cCB0byBjb25maWd1cmVkIG51bWJlciAoZmlmby5tYXhfZnJhZ3MpIG9mIGNvbnRpZ3VvdXMgYnVmZmVycy4KKyAqCisgKiBSZXR1cm5zOiBWWEdFX0hXX09LIC0gc3VjY2VzczsKKyAqIFZYR0VfSFdfSU5GX09VVF9PRl9ERVNDUklQVE9SUyAtIEN1cnJlbnRseSBubyBkZXNjcmlwdG9ycyBhdmFpbGFibGUKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19maWZvX3R4ZGxfcmVzZXJ2ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sCisJdm9pZCAqKnR4ZGxoLCB2b2lkICoqdHhkbF9wcml2KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlpbnQgaTsKKworCWNoYW5uZWwgPSAmZmlmby0+Y2hhbm5lbDsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfY2hhbm5lbF9kdHJfYWxsb2MoY2hhbm5lbCwgdHhkbGgpOworCisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisJCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwID0KKwkJCShzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKSp0eGRsaDsKKwkJc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqcHJpdjsKKworCQlwcml2ID0gX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KGZpZm8sIHR4ZHApOworCisJCS8qIHJlc2V0IHRoZSBUeERMJ3MgcHJpdmF0ZSAqLworCQlwcml2LT5hbGlnbl9kbWFfb2Zmc2V0ID0gMDsKKwkJcHJpdi0+YWxpZ25fdmFkZHJfc3RhcnQgPSBwcml2LT5hbGlnbl92YWRkcjsKKwkJcHJpdi0+YWxpZ25fdXNlZF9mcmFncyA9IDA7CisJCXByaXYtPmZyYWdzID0gMDsKKwkJcHJpdi0+YWxsb2NfZnJhZ3MgPSBmaWZvLT5jb25maWctPm1heF9mcmFnczsKKwkJcHJpdi0+bmV4dF90eGRsX3ByaXYgPSBOVUxMOworCisJCSp0eGRsX3ByaXYgPSAodm9pZCAqKShzaXplX3QpdHhkcC0+aG9zdF9jb250cm9sOworCisJCWZvciAoaSA9IDA7IGkgPCBmaWZvLT5jb25maWctPm1heF9mcmFnczsgaSsrKSB7CisJCQl0eGRwID0gKChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKSp0eGRsaCkgKyBpOworCQkJdHhkcC0+Y29udHJvbF8wID0gdHhkcC0+Y29udHJvbF8xID0gMDsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldCAtIFNldCB0cmFuc21pdCBidWZmZXIgcG9pbnRlciBpbiB0aGUKKyAqIGRlc2NyaXB0b3IuCisgKiBAZmlmbzogSGFuZGxlIHRvIHRoZSBmaWZvIG9iamVjdCB1c2VkIGZvciBub24gb2ZmbG9hZCBzZW5kCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQGZyYWdfaWR4OiBJbmRleCBvZiB0aGUgZGF0YSBidWZmZXIgaW4gdGhlIGNhbGxlcidzIHNjYXR0ZXItZ2F0aGVyIGxpc3QKKyAqICAgICAgICAgICAgKG9mIGJ1ZmZlcnMpLgorICogQGRtYV9wb2ludGVyOiBETUEgYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgcmVmZXJlbmNlZCBieSBAZnJhZ19pZHguCisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIgKGluIGJ5dGVzKS4KKyAqCisgKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciBmb3IgcG9zdGluZworICogKHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KCkpLiBUaGUgcmVsYXRlZCAicHJlcGFyYXRpb24iIEFQSXMgaW5jbHVkZQorICogdnhnZV9od19maWZvX3R4ZGxfbXNzX3NldCgpIGFuZCB2eGdlX2h3X2ZpZm9fdHhkbF9ja3N1bV9zZXRfYml0cygpLgorICogQWxsIHRocmVlIEFQSXMgZmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBmaWZvIGRlc2NyaXB0b3IsCisgKiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFRpdGFuIHNwZWNpZmljYXRpb24uCisgKgorICovCit2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXQoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAorCQkJCSAgdm9pZCAqdHhkbGgsIHUzMiBmcmFnX2lkeCwKKwkJCQkgIGRtYV9hZGRyX3QgZG1hX3BvaW50ZXIsIHUzMiBzaXplKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgKnR4ZGxfcHJpdjsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcCwgKnR4ZHBfbGFzdDsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwl0eGRsX3ByaXYgPSBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYoZmlmbywgdHhkbGgpOworCXR4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaCAgKyAgdHhkbF9wcml2LT5mcmFnczsKKworCWlmIChmcmFnX2lkeCAhPSAwKQorCQl0eGRwLT5jb250cm9sXzAgPSB0eGRwLT5jb250cm9sXzEgPSAwOworCWVsc2UgeworCQl0eGRwLT5jb250cm9sXzAgfD0gVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERSgKKwkJCVZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREVfRklSU1QpOworCQl0eGRwLT5jb250cm9sXzEgfD0gZmlmby0+aW50ZXJydXB0X3R5cGU7CisJCXR4ZHAtPmNvbnRyb2xfMSB8PSBWWEdFX0hXX0ZJRk9fVFhEX0lOVF9OVU1CRVIoCisJCQlmaWZvLT50eF9pbnRyX251bSk7CisJCWlmICh0eGRsX3ByaXYtPmZyYWdzKSB7CisJCQl0eGRwX2xhc3QgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaCAgKworCQkJKHR4ZGxfcHJpdi0+ZnJhZ3MgLSAxKTsKKwkJCXR4ZHBfbGFzdC0+Y29udHJvbF8wIHw9IFZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREUoCisJCQkJVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERV9MQVNUKTsKKwkJfQorCX0KKworCXZ4Z2VfYXNzZXJ0KGZyYWdfaWR4IDwgdHhkbF9wcml2LT5hbGxvY19mcmFncyk7CisKKwl0eGRwLT5idWZmZXJfcG9pbnRlciA9ICh1NjQpZG1hX3BvaW50ZXI7CisJdHhkcC0+Y29udHJvbF8wIHw9IFZYR0VfSFdfRklGT19UWERfQlVGRkVSX1NJWkUoc2l6ZSk7CisJZmlmby0+c3RhdHMtPnRvdGFsX2J1ZmZlcnMrKzsKKwl0eGRsX3ByaXYtPmZyYWdzKys7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfcG9zdCAtIFBvc3QgZGVzY3JpcHRvciBvbiB0aGUgZmlmbyBjaGFubmVsLgorICogQGZpZm86IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICogQHR4ZGxoOiBEZXNjcmlwdG9yIG9idGFpbmVkIHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKCkKKyAqIEBmcmFnczogTnVtYmVyIG9mIGNvbnRpZ3VvdXMgYnVmZmVycyB0aGF0IGFyZSBwYXJ0IG9mIGEgc2luZ2xlCisgKiAgICAgICAgIHRyYW5zbWl0IG9wZXJhdGlvbi4KKyAqCisgKiBQb3N0IGRlc2NyaXB0b3Igb24gdGhlICdmaWZvJyB0eXBlIGNoYW5uZWwgZm9yIHRyYW5zbWlzc2lvbi4KKyAqIFByaW9yIHRvIHBvc3RpbmcgdGhlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIGZpbGxlZCBpbiBhY2NvcmRhbmNlIHdpdGgKKyAqIEhvc3QvVGl0YW4gaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIGEgZ2l2ZW4gc2VydmljZSAoTEwsIGV0Yy4pLgorICoKKyAqLwordm9pZCB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywgdm9pZCAqdHhkbGgpCit7CisJc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqdHhkbF9wcml2OworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwX2xhc3Q7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHBfZmlyc3Q7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZmaWZvLT5jaGFubmVsOworCisJdHhkbF9wcml2ID0gX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KGZpZm8sIHR4ZGxoKTsKKwl0eGRwX2ZpcnN0ID0gKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopdHhkbGg7CisKKwl0eGRwX2xhc3QgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaCAgKyAgKHR4ZGxfcHJpdi0+ZnJhZ3MgLSAxKTsKKwl0eGRwX2xhc3QtPmNvbnRyb2xfMCB8PQorCSAgICAgIFZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREUoVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERV9MQVNUKTsKKwl0eGRwX2ZpcnN0LT5jb250cm9sXzAgfD0gVlhHRV9IV19GSUZPX1RYRF9MSVNUX09XTl9BREFQVEVSOworCisJdnhnZV9od19jaGFubmVsX2R0cl9wb3N0KCZmaWZvLT5jaGFubmVsLCB0eGRsaCk7CisKKwlfX3Z4Z2VfaHdfbm9uX29mZmxvYWRfZGJfcG9zdChmaWZvLAorCQkodTY0KShzaXplX3QpdHhkbF9wcml2LT5kbWFfYWRkciwKKwkJdHhkbF9wcml2LT5mcmFncyAtIDEsCisJCWZpZm8tPm5vX3Nub29wX2JpdHMpOworCisJZmlmby0+c3RhdHMtPnRvdGFsX3Bvc3RzKys7CisJZmlmby0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQrKzsKKwlpZiAoZmlmby0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9tYXggPAorCQlmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCkKKwkJZmlmby0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9tYXggPQorCQkJZmlmby0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQ7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQgLSBSZXRyaWV2ZSBuZXh0IGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogQGZpZm86IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICogQHR4ZGxoOiBEZXNjcmlwdG9yIGhhbmRsZS4gUmV0dXJuZWQgYnkgSFcuCisgKiBAdF9jb2RlOiBUcmFuc2ZlciBjb2RlLCBhcyBwZXIgVGl0YW4gVXNlciBHdWlkZSwKKyAqICAgICAgICAgIFRyYW5zbWl0IERlc2NyaXB0b3IgRm9ybWF0LgorICogICAgICAgICAgUmV0dXJuZWQgYnkgSFcuCisgKgorICogUmV0cmlldmUgdGhlIF9uZXh0XyBjb21wbGV0ZWQgZGVzY3JpcHRvci4KKyAqIEhXIHVzZXMgY2hhbm5lbCBjYWxsYmFjayAoKnZ4Z2VfaHdfY2hhbm5lbF9jYWxsYmFja19mKSB0byBub3RpZml5CisgKiBkcml2ZXIgb2YgbmV3IGNvbXBsZXRlZCBkZXNjcmlwdG9ycy4gQWZ0ZXIgdGhhdAorICogdGhlIGRyaXZlciBjYW4gdXNlIHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkIHRvIHJldHJpZXZlIHRoZSByZXN0CisgKiBjb21wbGV0aW9ucyAodGhlIHZlcnkgZmlyc3QgY29tcGxldGlvbiBpcyBwYXNzZWQgYnkgSFcgdmlhCisgKiB2eGdlX2h3X2NoYW5uZWxfY2FsbGJhY2tfZikuCisgKgorICogSW1wbGVtZW50YXRpb24td2lzZSwgdGhlIGRyaXZlciBpcyBmcmVlIHRvIGNhbGwKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkIGVpdGhlciBpbW1lZGlhdGVseSBmcm9tIGluc2lkZSB0aGUKKyAqIGNoYW5uZWwgY2FsbGJhY2ssIG9yIGluIGEgZGVmZXJyZWQgZmFzaGlvbiBhbmQgc2VwYXJhdGUgKGZyb20gSFcpCisgKiBjb250ZXh0LgorICoKKyAqIE5vbi16ZXJvIEB0X2NvZGUgbWVhbnMgZmFpbHVyZSB0byBwcm9jZXNzIHRoZSBkZXNjcmlwdG9yLgorICogVGhlIGZhaWx1cmUgY291bGQgaGFwcGVuLCBmb3IgaW5zdGFuY2UsIHdoZW4gdGhlIGxpbmsgaXMKKyAqIGRvd24sIGluIHdoaWNoIGNhc2UgVGl0YW4gY29tcGxldGVzIHRoZSBkZXNjcmlwdG9yIGJlY2F1c2UgaXQKKyAqIGlzIG5vdCBhYmxlIHRvIHNlbmQgdGhlIGRhdGEgb3V0LgorICoKKyAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0byBUaXRhbiBVc2VyIEd1aWRlLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzLgorICogVlhHRV9IV19JTkZfTk9fTU9SRV9DT01QTEVURURfREVTQ1JJUFRPUlMgLSBObyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMKKyAqIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZCgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sIHZvaWQgKip0eGRsaCwKKwllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSAqdF9jb2RlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwl2eGdlX2h3X2NoYW5uZWxfZHRyX3RyeV9jb21wbGV0ZShjaGFubmVsLCB0eGRsaCk7CisKKwl0eGRwID0gKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopKnR4ZGxoOworCWlmICh0eGRwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19JTkZfTk9fTU9SRV9DT01QTEVURURfREVTQ1JJUFRPUlM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBjaGVjayB3aGV0aGVyIGhvc3Qgb3ducyBpdCAqLworCWlmICghKHR4ZHAtPmNvbnRyb2xfMCAmIFZYR0VfSFdfRklGT19UWERfTElTVF9PV05fQURBUFRFUikpIHsKKworCQl2eGdlX2Fzc2VydCh0eGRwLT5ob3N0X2NvbnRyb2wgIT0gMCk7CisKKwkJdnhnZV9od19jaGFubmVsX2R0cl9jb21wbGV0ZShjaGFubmVsKTsKKworCQkqdF9jb2RlID0gKHU4KVZYR0VfSFdfRklGT19UWERfVF9DT0RFX0dFVCh0eGRwLT5jb250cm9sXzApOworCisJCWlmIChmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCA+IDApCisJCQlmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudC0tOworCisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBubyBtb3JlIGNvbXBsZXRpb25zICovCisJKnR4ZGxoID0gTlVMTDsKKwlzdGF0dXMgPSBWWEdFX0hXX0lORl9OT19NT1JFX0NPTVBMRVRFRF9ERVNDUklQVE9SUzsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9faGFuZGxlX3Rjb2RlIC0gSGFuZGxlIHRyYW5zZmVyIGNvZGUuCisgKiBAZmlmbzogSGFuZGxlIHRvIHRoZSBmaWZvIG9iamVjdCB1c2VkIGZvciBub24gb2ZmbG9hZCBzZW5kCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQHRfY29kZTogT25lIG9mIHRoZSBlbnVtZXJhdGVkIChhbmQgZG9jdW1lbnRlZCBpbiB0aGUgVGl0YW4gdXNlciBndWlkZSkKKyAqICAgICAgICAgICJ0cmFuc2ZlciBjb2RlcyIuCisgKgorICogSGFuZGxlIGRlc2NyaXB0b3IncyB0cmFuc2ZlciBjb2RlLiBUaGUgbGF0dGVyIGNvbWVzIHdpdGggZWFjaCBjb21wbGV0ZWQKKyAqIGRlc2NyaXB0b3IuCisgKgorICogUmV0dXJuczogb25lIG9mIHRoZSBlbnVtIHZ4Z2VfaHdfc3RhdHVze30gZW51bWVyYXRlZCB0eXBlcy4KKyAqIFZYR0VfSFdfT0sgLSBmb3Igc3VjY2Vzcy4KKyAqIFZYR0VfSFdfRVJSX0NSSVRJQ0FMIC0gd2hlbiBlbmNvdW50ZXJzIGNyaXRpY2FsIGVycm9yLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZmlmb19oYW5kbGVfdGNvZGUoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAorCQkJCQkgICAgICB2b2lkICp0eGRsaCwKKwkJCQkJICAgICAgZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwlpZiAoKCh0X2NvZGUgJiAweDcpIDwgMCkgfHwgKCh0X2NvZGUgJiAweDcpID4gMHg0KSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX1RDT0RFOworCQlnb3RvIGV4aXQ7CisJfQorCisJZmlmby0+c3RhdHMtPnR4ZF90X2NvZGVfZXJyX2NudFt0X2NvZGVdKys7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfZnJlZSAtIEZyZWUgZGVzY3JpcHRvci4KKyAqIEBmaWZvOiBIYW5kbGUgdG8gdGhlIGZpZm8gb2JqZWN0IHVzZWQgZm9yIG5vbiBvZmZsb2FkIHNlbmQKKyAqIEB0eGRsaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogRnJlZSB0aGUgcmVzZXJ2ZWQgZGVzY3JpcHRvci4gVGhpcyBvcGVyYXRpb24gaXMgInN5bW1ldHJpY2FsIiB0bworICogdnhnZV9od19maWZvX3R4ZGxfcmVzZXJ2ZS4gVGhlICJmcmVlLWluZyIgY29tcGxldGVzIHRoZSBkZXNjcmlwdG9yJ3MKKyAqIGxpZmVjeWNsZS4KKyAqCisgKiBBZnRlciBmcmVlLWluZyAoc2VlIHZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoKSkgdGhlIGRlc2NyaXB0b3IgYWdhaW4gY2FuCisgKiBiZToKKyAqCisgKiAtIHJlc2VydmVkICh2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKTsKKyAqCisgKiAtIHBvc3RlZCAodnhnZV9od19maWZvX3R4ZGxfcG9zdCk7CisgKgorICogLSBjb21wbGV0ZWQgKHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKTsKKyAqCisgKiAtIGFuZCByZWN5Y2xlZCBhZ2FpbiAodnhnZV9od19maWZvX3R4ZGxfZnJlZSkuCisgKgorICogRm9yIGFsdGVybmF0aXZlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBtb3JlIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvCisgKiB0aGUgZGVzaWduIGRvYy4KKyAqCisgKi8KK3ZvaWQgdnhnZV9od19maWZvX3R4ZGxfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sIHZvaWQgKnR4ZGxoKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgKnR4ZGxfcHJpdjsKKwl1MzIgbWF4X2ZyYWdzOworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmZmlmby0+Y2hhbm5lbDsKKworCXR4ZGxfcHJpdiA9IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdihmaWZvLAorCQkJKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopdHhkbGgpOworCisJbWF4X2ZyYWdzID0gZmlmby0+Y29uZmlnLT5tYXhfZnJhZ3M7CisKKwl2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUoY2hhbm5lbCwgdHhkbGgpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkIC0gQWRkIHRoZSBtYWMgYWRkcmVzcyBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICB0byBNQUMgYWRkcmVzcyB0YWJsZS4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICogQG1hY2FkZHI6IE1BQyBhZGRyZXNzIHRvIGJlIGFkZGVkIGZvciB0aGlzIHZwYXRoIGludG8gdGhlIGxpc3QKKyAqIEBtYWNhZGRyX21hc2s6IE1BQyBhZGRyZXNzIG1hc2sgZm9yIG1hY2FkZHIKKyAqIEBkdXBsaWNhdGVfbW9kZTogRHVwbGljYXRlIE1BQyBhZGRyZXNzIGFkZCBtb2RlLiBQbGVhc2Ugc2VlCisgKiAgICAgICAgICAgICBlbnVtIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkX21vZGV7fQorICoKKyAqIEFkZHMgdGhlIGdpdmVuIG1hYyBhZGRyZXNzIGFuZCBtYWMgYWRkcmVzcyBtYXNrIGludG8gdGhlIGxpc3QgZm9yIHRoaXMKKyAqIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlLCB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldCBhbmQKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSwKKwllbnVtIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkX21vZGUgZHVwbGljYXRlX21vZGUpCit7CisJdTMyIGk7CisJdTY0IGRhdGExID0gMFVMTDsKKwl1NjQgZGF0YTIgPSAwVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKKwkJZGF0YTEgPDw9IDg7CisJCWRhdGExIHw9ICh1OCltYWNhZGRyW2ldOworCisJCWRhdGEyIDw8PSA4OworCQlkYXRhMiB8PSAodTgpbWFjYWRkcl9tYXNrW2ldOworCX0KKworCXN3aXRjaCAoZHVwbGljYXRlX21vZGUpIHsKKwljYXNlIFZYR0VfSFdfVlBBVEhfTUFDX0FERFJfQUREX0RVUExJQ0FURToKKwkJaSA9IDA7CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19WUEFUSF9NQUNfQUREUl9ESVNDQVJEX0RVUExJQ0FURToKKwkJaSA9IDE7CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19WUEFUSF9NQUNfQUREUl9SRVBMQUNFX0RVUExJQ0FURToKKwkJaSA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWkgPSAwOworCQlicmVhazsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9BRERfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEsCisJCQkwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0RBX01BQ19BRERSKGRhdGExKSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NQVNLKGRhdGEyKXwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NT0RFKGkpKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldCAtIEdldCB0aGUgZmlyc3QgbWFjIGFkZHJlc3MgZW50cnkgZm9yIHRoaXMgdnBhdGgKKyAqICAgICAgICAgICAgICAgZnJvbSBNQUMgYWRkcmVzcyB0YWJsZS4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICogQG1hY2FkZHI6IEZpcnN0IE1BQyBhZGRyZXNzIGVudHJ5IGZvciB0aGlzIHZwYXRoIGluIHRoZSBsaXN0CisgKiBAbWFjYWRkcl9tYXNrOiBNQUMgYWRkcmVzcyBtYXNrIGZvciBtYWNhZGRyCisgKgorICogUmV0dXJucyB0aGUgZmlyc3QgbWFjIGFkZHJlc3MgYW5kIG1hYyBhZGRyZXNzIG1hc2sgaW4gdGhlIGxpc3QgZm9yIHRoaXMKKyAqIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSkKK3sKKwl1MzIgaTsKKwl1NjQgZGF0YTEgPSAwVUxMOworCXU2NCBkYXRhMiA9IDBVTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX2dldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MSVNUX0ZJUlNUX0VOVFJZLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBLAorCQkJMCwgJmRhdGExLCAmZGF0YTIpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlkYXRhMSA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfREFfTUFDX0FERFIoZGF0YTEpOworCisJZGF0YTIgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0RBX01BQ19BRERSX01BU0soZGF0YTIpOworCisJZm9yIChpID0gRVRIX0FMRU47IGkgPiAwOyBpLS0pIHsKKwkJbWFjYWRkcltpLTFdID0gKHU4KShkYXRhMSAmIDB4RkYpOworCQlkYXRhMSA+Pj0gODsKKworCQltYWNhZGRyX21hc2tbaS0xXSA9ICh1OCkoZGF0YTIgJiAweEZGKTsKKwkJZGF0YTIgPj49IDg7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQgLSBHZXQgdGhlIG5leHQgbWFjIGFkZHJlc3MgZW50cnkgZm9yIHRoaXMKKyAqIHZwYXRoCisgKiAgICAgICAgICAgICAgIGZyb20gTUFDIGFkZHJlc3MgdGFibGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqIEBtYWNhZGRyOiBOZXh0IE1BQyBhZGRyZXNzIGVudHJ5IGZvciB0aGlzIHZwYXRoIGluIHRoZSBsaXN0CisgKiBAbWFjYWRkcl9tYXNrOiBNQUMgYWRkcmVzcyBtYXNrIGZvciBtYWNhZGRyCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBtYWMgYWRkcmVzcyBhbmQgbWFjIGFkZHJlc3MgbWFzayBpbiB0aGUgbGlzdCBmb3IgdGhpcworICogdnBhdGguCisgKiBzZWUgYWxzbzogdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dKQoreworCXUzMiBpOworCXU2NCBkYXRhMSA9IDBVTEw7CisJdTY0IGRhdGEyID0gMFVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfTkVYVF9FTlRSWSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSwKKwkJCTAsICZkYXRhMSwgJmRhdGEyKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJZGF0YTEgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0RBX01BQ19BRERSKGRhdGExKTsKKworCWRhdGEyID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9EQV9NQUNfQUREUl9NQVNLKGRhdGEyKTsKKworCWZvciAoaSA9IEVUSF9BTEVOOyBpID4gMDsgaS0tKSB7CisJCW1hY2FkZHJbaS0xXSA9ICh1OCkoZGF0YTEgJiAweEZGKTsKKwkJZGF0YTEgPj49IDg7CisKKwkJbWFjYWRkcl9tYXNrW2ktMV0gPSAodTgpKGRhdGEyICYgMHhGRik7CisJCWRhdGEyID4+PSA4OworCX0KKworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlIC0gRGVsZXRlIHRoZSBtYWMgYWRkcmVzcyBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICB0byBNQUMgYWRkcmVzcyB0YWJsZS4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICogQG1hY2FkZHI6IE1BQyBhZGRyZXNzIHRvIGJlIGFkZGVkIGZvciB0aGlzIHZwYXRoIGludG8gdGhlIGxpc3QKKyAqIEBtYWNhZGRyX21hc2s6IE1BQyBhZGRyZXNzIG1hc2sgZm9yIG1hY2FkZHIKKyAqCisgKiBEZWxldGUgdGhlIGdpdmVuIG1hYyBhZGRyZXNzIGFuZCBtYWMgYWRkcmVzcyBtYXNrIGludG8gdGhlIGxpc3QgZm9yIHRoaXMKKyAqIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkLCB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldCBhbmQKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSkKK3sKKwl1MzIgaTsKKwl1NjQgZGF0YTEgPSAwVUxMOworCXU2NCBkYXRhMiA9IDBVTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykgeworCQlkYXRhMSA8PD0gODsKKwkJZGF0YTEgfD0gKHU4KW1hY2FkZHJbaV07CisKKwkJZGF0YTIgPDw9IDg7CisJCWRhdGEyIHw9ICh1OCltYWNhZGRyX21hc2tbaV07CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQodnAsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fREVMRVRFX0VOVFJZLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBLAorCQkJMCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9EQV9NQUNfQUREUihkYXRhMSksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfREFfTUFDX0FERFJfTUFTSyhkYXRhMikpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfdmlkX2FkZCAtIEFkZCB0aGUgdmxhbiBpZCBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICB0byB2bGFuIGlkIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAdmlkOiB2bGFuIGlkIHRvIGJlIGFkZGVkIGZvciB0aGlzIHZwYXRoIGludG8gdGhlIGxpc3QKKyAqCisgKiBBZGRzIHRoZSBnaXZlbiB2bGFuIGlkIGludG8gdGhlIGxpc3QgZm9yIHRoaXMgIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZSwgdnhnZV9od192cGF0aF92aWRfZ2V0IGFuZAorICogdnhnZV9od192cGF0aF92aWRfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2FkZChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIHU2NCB2aWQpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9BRERfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklELAorCQkJMCwgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1ZMQU5fSUQodmlkKSwgMCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF92aWRfZ2V0IC0gR2V0IHRoZSBmaXJzdCB2aWQgZW50cnkgZm9yIHRoaXMgdnBhdGgKKyAqICAgICAgICAgICAgICAgZnJvbSB2bGFuIGlkIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAdmlkOiBCdWZmZXIgdG8gcmV0dXJuIHZsYW4gaWQKKyAqCisgKiBSZXR1cm5zIHRoZSBmaXJzdCB2bGFuIGlkIGluIHRoZSBsaXN0IGZvciB0aGlzIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfdmlkX2dldF9uZXh0CisgKgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCB1NjQgKnZpZCkKK3sKKwl1NjQgZGF0YTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfRklSU1RfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklELAorCQkJMCwgdmlkLCAmZGF0YSk7CisKKwkqdmlkID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9WTEFOX0lEKCp2aWQpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfdmlkX2dldF9uZXh0IC0gR2V0IHRoZSBuZXh0IHZpZCBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICBmcm9tIHZsYW4gaWQgdGFibGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqIEB2aWQ6IEJ1ZmZlciB0byByZXR1cm4gdmxhbiBpZAorICoKKyAqIFJldHVybnMgdGhlIG5leHQgdmxhbiBpZCBpbiB0aGUgbGlzdCBmb3IgdGhpcyB2cGF0aC4KKyAqIHNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2dldF9uZXh0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgdTY0ICp2aWQpCit7CisJdTY0IGRhdGE7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX2dldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MSVNUX05FWFRfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklELAorCQkJMCwgdmlkLCAmZGF0YSk7CisKKwkqdmlkID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9WTEFOX0lEKCp2aWQpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZSAtIERlbGV0ZSB0aGUgdmxhbiBpZCBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICB0byB2bGFuIGlkIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAdmlkOiB2bGFuIGlkIHRvIGJlIGFkZGVkIGZvciB0aGlzIHZwYXRoIGludG8gdGhlIGxpc3QKKyAqCisgKiBBZGRzIHRoZSBnaXZlbiB2bGFuIGlkIGludG8gdGhlIGxpc3QgZm9yIHRoaXMgIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfdmlkX2FkZCwgdnhnZV9od192cGF0aF92aWRfZ2V0IGFuZAorICogdnhnZV9od192cGF0aF92aWRfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIHU2NCB2aWQpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9ERUxFVEVfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklELAorCQkJMCwgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1ZMQU5fSUQodmlkKSwgMCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9wcm9taXNjX2VuYWJsZSAtIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKgorICogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgb2YgVGl0YW4tZSBvcGVyYXRpb24uCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19kaXNhYmxlKCkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wcm9taXNjX2VuYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJLyogRW5hYmxlIHByb21pc2NvdXMgbW9kZSBmb3IgZnVuY3Rpb24gMCBvbmx5ICovCisJaWYgKCEodnBhdGgtPmhsZGV2LT5hY2Nlc3NfcmlnaHRzICYKKwkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSkpCisJCXJldHVybiBWWEdFX0hXX09LOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKCEodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1ZDRkcwX1VDQVNUX0FMTF9BRERSX0VOKSkgeworCisJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfVkNGRzBfVUNBU1RfQUxMX0FERFJfRU4gfAorCQkJIFZYR0VfSFdfUlhNQUNfVkNGRzBfTUNBU1RfQUxMX0FERFJfRU4gfAorCQkJIFZYR0VfSFdfUlhNQUNfVkNGRzBfQkNBU1RfRU4gfAorCQkJIFZYR0VfSFdfUlhNQUNfVkNGRzBfQUxMX1ZJRF9FTjsKKworCQl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19kaXNhYmxlIC0gRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKgorICogRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlIG9mIFRpdGFuLWUgb3BlcmF0aW9uLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZW5hYmxlKCkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wcm9taXNjX2Rpc2FibGUoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJdTY0IHZhbDY0OworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICgodnAgPT0gTlVMTCkgfHwgKHZwLT52cGF0aC0+cmluZ2ggPT0gTlVMTCkpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlhNQUNfVkNGRzBfVUNBU1RfQUxMX0FERFJfRU4pIHsKKworCQl2YWw2NCAmPSB+KFZYR0VfSFdfUlhNQUNfVkNGRzBfVUNBU1RfQUxMX0FERFJfRU4gfAorCQkJICAgVlhHRV9IV19SWE1BQ19WQ0ZHMF9NQ0FTVF9BTExfQUREUl9FTiB8CisJCQkgICBWWEdFX0hXX1JYTUFDX1ZDRkcwX0FMTF9WSURfRU4pOworCisJCXdyaXRlcSh2YWw2NCwgJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX2JjYXN0X2VuYWJsZSAtIEVuYWJsZSBicm9hZGNhc3QKKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICoKKyAqIEVuYWJsZSByZWNlaXZpbmcgYnJvYWRjYXN0cy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2JjYXN0X2VuYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKCEodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1ZDRkcwX0JDQVNUX0VOKSkgeworCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1ZDRkcwX0JDQVNUX0VOOworCQl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlIC0gRW5hYmxlIG11bHRpY2FzdCBhZGRyZXNzZXMuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqCisgKiBFbmFibGUgVGl0YW4tZSBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICogUmV0dXJuczogVlhHRV9IV19PSyBvbiBzdWNjZXNzLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX21jYXN0X2VuYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKCEodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1ZDRkcwX01DQVNUX0FMTF9BRERSX0VOKSkgeworCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1ZDRkcwX01DQVNUX0FMTF9BRERSX0VOOworCQl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZGlzYWJsZSAtIERpc2FibGUgIG11bHRpY2FzdCBhZGRyZXNzZXMuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqCisgKiBEaXNhYmxlIFRpdGFuLWUgbXVsdGljYXN0IGFkZHJlc3Nlcy4KKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzLgorICogVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEUgLSBJbnZhbGlkIGhhbmRsZQorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tY2FzdF9kaXNhYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SWE1BQ19WQ0ZHMF9NQ0FTVF9BTExfQUREUl9FTikgeworCQl2YWw2NCAmPSB+VlhHRV9IV19SWE1BQ19WQ0ZHMF9NQ0FTVF9BTExfQUREUl9FTjsKKwkJd3JpdGVxKHZhbDY0LCAmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzIC0gUHJvY2VzcyBBbGFybXMuCisgKiBAdnBhdGg6IFZpcnR1YWwgUGF0aC4KKyAqIEBza2lwX2FsYXJtczogRG8gbm90IGNsZWFyIHRoZSBhbGFybXMKKyAqCisgKiBQcm9jZXNzIHZwYXRoIGFsYXJtcy4KKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCXUzMiBza2lwX2FsYXJtcykKK3sKKwl1NjQgdmFsNjQ7CisJdTY0IGFsYXJtX3N0YXR1czsKKwl1NjQgcGljX3N0YXR1czsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSBOVUxMOworCWVudW0gdnhnZV9od19ldmVudCBhbGFybV9ldmVudCA9IFZYR0VfSFdfRVZFTlRfVU5LTk9XTjsKKwl1NjQgbWFzazY0OworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm8gKnN3X3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAodnBhdGggPT0gTlVMTCkgeworCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKFZYR0VfSFdfRVZFTlRfVU5LTk9XTiwKKwkJCWFsYXJtX2V2ZW50KTsKKwkJZ290byBvdXQ7CisJfQorCisJaGxkZXYgPSB2cGF0aC0+aGxkZXY7CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKwlhbGFybV9zdGF0dXMgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5lcmFsX2ludF9zdGF0dXMpOworCisJaWYgKGFsYXJtX3N0YXR1cyA9PSBWWEdFX0hXX0FMTF9GT1hFUykgeworCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUsCisJCQlhbGFybV9ldmVudCk7CisJCWdvdG8gb3V0OworCX0KKworCXN3X3N0YXRzID0gdnBhdGgtPnN3X3N0YXRzOworCisJaWYgKGFsYXJtX3N0YXR1cyAmIH4oCisJCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1BJQ19JTlQgfAorCQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19QQ0lfSU5UIHwKKwkJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfV1JETUFfSU5UIHwKKwkJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfWE1BQ19JTlQpKSB7CisJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy51bmtub3duX2FsYXJtcysrOworCisJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoVlhHRV9IV19FVkVOVF9VTktOT1dOLAorCQkJYWxhcm1fZXZlbnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYWxhcm1fc3RhdHVzICYgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfWE1BQ19JTlQpIHsKKworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnhnbWFjX3ZwX2ludF9zdGF0dXMpOworCisJCWlmICh2YWw2NCAmCisJCVZYR0VfSFdfWEdNQUNfVlBfSU5UX1NUQVRVU19BU0lDX05UV0tfVlBfRVJSX0FTSUNfTlRXS19WUF9JTlQpIHsKKworCQkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX3JlZyk7CisKKwkJCWlmICgoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUKSAmJgorCQkJICAgICghKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0spKSkgfHwKKwkJCSAgICAoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUX09DQ1VSUikKKwkJCQkmJiAoISh2YWw2NCAmCisJCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX09LX09DQ1VSUikKKwkJCSkpKSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLm5ldHdvcmtfc3VzdGFpbmVkX2ZhdWx0Kys7CisKKwkJCQl3cml0ZXEoCisJCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVCwKKwkJCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9tYXNrKTsKKworCQkJCV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfZG93bl9pbmQoaGxkZXYpOworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfTElOS19ET1dOLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICgoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0spICYmCisJCQkgICAgKCEodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFQpKSkgfHwKKwkJCSAgICAoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0tfT0NDVVJSKQorCQkJCSYmICghKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUX09DQ1VSUikKKwkJCSkpKSB7CisKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMubmV0d29ya19zdXN0YWluZWRfb2srKzsKKworCQkJCXdyaXRlcSgKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0ssCisJCQkJCSZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfbWFzayk7CisKKwkJCQlfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZChobGRldik7CisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9MSU5LX1VQLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCXdyaXRlcShWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9yZWcpOworCisJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwgYWxhcm1fZXZlbnQpOworCisJCQlpZiAoc2tpcF9hbGFybXMpCisJCQkJcmV0dXJuIFZYR0VfSFdfT0s7CisJCX0KKwl9CisKKwlpZiAoYWxhcm1fc3RhdHVzICYgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfUElDX0lOVCkgeworCisJCXBpY19zdGF0dXMgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9wcGlmX2ludF9zdGF0dXMpOworCisJCWlmIChwaWNfc3RhdHVzICYKKwkJICAgIFZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX0dFTkVSQUxfRVJST1JTX0dFTkVSQUxfSU5UKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfcmVnKTsKKwkJCW1hc2s2NCA9IHJlYWRxKCZ2cF9yZWctPmdlbmVyYWxfZXJyb3JzX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19JTklfU0VSUl9ERVQpICYKKwkJCQl+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmluaV9zZXJyX2RldCsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9TRVJSLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICgodmFsNjQgJgorCQkJICAgIFZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMF9PVlJGTE9XKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5kYmxnZW5fZmlmbzBfb3ZlcmZsb3crKzsKKworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfRklGT19FUlIsIGFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmCisJCQkgICAgVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX1BJRl9DSEFJTl9FUlIpICYKKwkJCQl+bWFzazY0KQorCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5zdGF0c2JfcGlmX2NoYWluX2Vycm9yKys7CisKKwkJCWlmICgodmFsNjQgJgorCQkJICAgVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX0RST1BfVElNRU9VVF9SRVEpICYKKwkJCQl+bWFzazY0KQorCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5zdGF0c2JfZHJvcF90aW1lb3V0Kys7CisKKwkJCWlmICgodmFsNjQgJgorCQkJCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX1RHVF9JTExFR0FMX0FDQ0VTUykgJgorCQkJCX5tYXNrNjQpCisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnRhcmdldF9pbGxlZ2FsX2FjY2VzcysrOworCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfcmVnKTsKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCisJCWlmIChwaWNfc3RhdHVzICYKKwkJICAgIFZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX0tERkNDVExfRVJST1JTX0tERkNDVExfSU5UKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfcmVnKTsKKwkJCW1hc2s2NCA9IHJlYWRxKCZ2cF9yZWctPmtkZmNjdGxfZXJyb3JzX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYKKwkJCSAgICBWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX09WUldSKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX292ZXJ3cml0ZSsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYKKwkJCSAgICBWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX1BPSVNPTikgJgorCQkJCX5tYXNrNjQpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMua2RmY2N0bF9maWZvMF9wb2lzb24rKzsKKworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfRklGT19FUlIsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmCisJCQkgICAgVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMF9ETUFfRVJSKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX2RtYV9lcnJvcisrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfcmVnKTsKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCisJfQorCisJaWYgKGFsYXJtX3N0YXR1cyAmIFZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1dSRE1BX0lOVCkgeworCisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+d3JkbWFfYWxhcm1fc3RhdHVzKTsKKworCQlpZiAodmFsNjQgJiBWWEdFX0hXX1dSRE1BX0FMQVJNX1NUQVRVU19QUkNfQUxBUk1fUFJDX0lOVCkgeworCisJCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnByY19hbGFybV9yZWcpOworCQkJbWFzazY0ID0gcmVhZHEoJnZwX3JlZy0+cHJjX2FsYXJtX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYgVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SSU5HX0JVTVApJgorCQkJCX5tYXNrNjQpCisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnByY19yaW5nX2J1bXBzKys7CisKKwkJCWlmICgodmFsNjQgJiBWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1JYRENNX1NDX0VSUikgJgorCQkJCX5tYXNrNjQpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMucHJjX3J4ZGNtX3NjX2VycisrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9WUEFUSF9FUlIsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmIFZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUlhEQ01fU0NfQUJPUlQpCisJCQkJJiB+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnByY19yeGRjbV9zY19hYm9ydCsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJCVZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSLAorCQkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYgVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19RVUFOVEFfU0laRV9FUlIpCisJCQkJICYgfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5wcmNfcXVhbnRhX3NpemVfZXJyKys7CisKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+cHJjX2FsYXJtX3JlZyk7CisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwKKwkJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCX0KK291dDoKKwlobGRldi0+c3RhdHMuc3dfZGV2X2Vycl9zdGF0cy52cGF0aF9hbGFybXMrKzsKKworCWlmICgoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVEKSB8fAorCQkoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9VTktOT1dOKSkKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisKKwlfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvcihobGRldiwgdnBhdGgtPnZwX2lkLCBhbGFybV9ldmVudCk7CisKKwlpZiAoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9TRVJSKQorCQlyZXR1cm4gVlhHRV9IV19FUlJfQ1JJVElDQUw7CisKKwlyZXR1cm4gKGFsYXJtX2V2ZW50ID09IFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUpID8KKwkJVlhHRV9IV19FUlJfU0xPVF9GUkVFWkUgOgorCQkoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9GSUZPX0VSUikgPyBWWEdFX0hXX0VSUl9GSUZPIDoKKwkJVlhHRV9IV19FUlJfVlBBVEg7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MgLSBQcm9jZXNzIEFsYXJtcy4KKyAqIEB2cGF0aDogVmlydHVhbCBQYXRoLgorICogQHNraXBfYWxhcm1zOiBEbyBub3QgY2xlYXIgdGhlIGFsYXJtcworICoKKyAqIFByb2Nlc3MgdnBhdGggYWxhcm1zLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCisJCQl1MzIgc2tpcF9hbGFybXMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2Vzcyh2cC0+dnBhdGgsIHNraXBfYWxhcm1zKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX21zaXhfc2V0IC0gQXNzb2NpYXRlIE1TSVggdmVjdG9ycyB3aXRoIFRJTSBpbnRlcnJ1cHRzIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxybXMKKyAqIEB2cDogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqIEB0aW1fbXNpeF9pZDogTVNJWCB2ZWN0b3JzIGFzc29jaWF0ZWQgd2l0aCBWWEdFX0hXX01BWF9JTlRSX1BFUl9WUCBudW1iZXIgb2YKKyAqICAgICAgICAgICAgIGludGVycnVwdHMoQ2FuIGJlIHJlcGVhdGVkKS4gSWYgZmlmbyBvciByaW5nIGFyZSBub3QgZW5hYmxlZAorICogICAgICAgICAgICAgdGhlIE1TSVggdmVjdG9yIGZvciB0aGF0IHNob3VsZCBiZSBzZXQgdG8gMAorICogQGFsYXJtX21zaXhfaWQ6IE1TSVggdmVjdG9yIGZvciBhbGFybS4KKyAqCisgKiBUaGlzIEFQSSB3aWxsIGFzc29jaWF0ZSBhIGdpdmVuIE1TSVggdmVjdG9yIG51bWJlcnMgd2l0aCB0aGUgZm91ciBUSU0KKyAqIGludGVycnVwdHMgYW5kIGFsYXJtIGludGVycnVwdC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tc2l4X3NldChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIGludCAqdGltX21zaXhfaWQsCisJCSAgICAgICBpbnQgYWxhcm1fbXNpeF9pZCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGggPSB2cC0+dnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisJdTMyIGZpcnN0X3ZwX2lkID0gdnBhdGgtPmhsZGV2LT5maXJzdF92cF9pZDsKKworCXZhbDY0ID0gIFZYR0VfSFdfSU5URVJSVVBUX0NGRzBfR1JPVVAwX01TSVhfRk9SX1RYVEkoCisJCSAgKGZpcnN0X3ZwX2lkICogNCkgKyB0aW1fbXNpeF9pZFswXSkgfAorCQkgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDFfTVNJWF9GT1JfVFhUSSgKKwkJICAoZmlyc3RfdnBfaWQgKiA0KSArIHRpbV9tc2l4X2lkWzFdKSB8CisJCSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX0dST1VQMl9NU0lYX0ZPUl9UWFRJKAorCQkJKGZpcnN0X3ZwX2lkICogNCkgKyB0aW1fbXNpeF9pZFsyXSk7CisKKwkJdmFsNjQgfD0gVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDNfTVNJWF9GT1JfVFhUSSgKKwkJCShmaXJzdF92cF9pZCAqIDQpICsgdGltX21zaXhfaWRbM10pOworCisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5pbnRlcnJ1cHRfY2ZnMCk7CisKKwl3cml0ZXEoVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMl9BTEFSTV9NQVBfVE9fTVNHKAorCQkJKGZpcnN0X3ZwX2lkICogNCkgKyBhbGFybV9tc2l4X2lkKSwKKwkJCSZ2cF9yZWctPmludGVycnVwdF9jZmcyKTsKKworCWlmICh2cGF0aC0+aGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPT0KKwkJCQkJVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVCkgeworCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbigKKwkJCQlWWEdFX0hXX09ORV9TSE9UX1ZFQ1QxX0VOX09ORV9TSE9UX1ZFQ1QxX0VOLAorCQkJCTAsIDMyKSwgJnZwX3JlZy0+b25lX3Nob3RfdmVjdDFfZW4pOworCX0KKworCWlmICh2cGF0aC0+aGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPT0KKwkJVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVCkgeworCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbigKKwkJCQlWWEdFX0hXX09ORV9TSE9UX1ZFQ1QyX0VOX09ORV9TSE9UX1ZFQ1QyX0VOLAorCQkJCTAsIDMyKSwgJnZwX3JlZy0+b25lX3Nob3RfdmVjdDJfZW4pOworCisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMil2eGdlX2JWQUxuKAorCQkJCVZYR0VfSFdfT05FX1NIT1RfVkVDVDNfRU5fT05FX1NIT1RfVkVDVDNfRU4sCisJCQkJMCwgMzIpLCAmdnBfcmVnLT5vbmVfc2hvdF92ZWN0M19lbik7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tc2l4X21hc2sgLSBNYXNrIE1TSVggVmVjdG9yLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICogQG1zaXhfaWQ6ICBNU0lYIElECisgKgorICogVGhlIGZ1bmN0aW9uIG1hc2tzIHRoZSBtc2l4IGludGVycnVwdCBmb3IgdGhlIGdpdmVuIG1zaXhfaWQKKyAqCisgKiBSZXR1cm5zOiAwLAorICogT3RoZXJ3aXNlLCBWWEdFX0hXX0VSUl9XUk9OR19JUlEgaWYgdGhlIG1zaXggaW5kZXggaXMgb3V0IG9mIHJhbmdlCisgKiBzdGF0dXMuCisgKiBTZWUgYWxzbzoKKyAqLwordm9pZAordnhnZV9od192cGF0aF9tc2l4X21hc2soc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCBpbnQgbXNpeF9pZCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpIHZ4Z2VfYlZBTG4odnhnZV9tQklUKGhsZGV2LT5maXJzdF92cF9pZCArCisJCQkobXNpeF9pZCAgLyA0KSksIDAsIDMyKSwKKwkJJmhsZGV2LT5jb21tb25fcmVnLT5zZXRfbXNpeF9tYXNrX3ZlY3RbbXNpeF9pZCAlIDRdKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX21zaXhfY2xlYXIgLSBDbGVhciBNU0lYIFZlY3Rvci4KKyAqIEB2cDogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqIEBtc2l4X2lkOiAgTVNJIElECisgKgorICogVGhlIGZ1bmN0aW9uIGNsZWFycyB0aGUgbXNpeCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBtc2l4X2lkCisgKgorICogUmV0dXJuczogMCwKKyAqIE90aGVyd2lzZSwgVlhHRV9IV19FUlJfV1JPTkdfSVJRIGlmIHRoZSBtc2l4IGluZGV4IGlzIG91dCBvZiByYW5nZQorICogc3RhdHVzLgorICogU2VlIGFsc286CisgKi8KK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9jbGVhcihzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIGludCBtc2l4X2lkKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisJaWYgKGhsZGV2LT5jb25maWcuaW50cl9tb2RlID09CisJCQlWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UKSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKGhsZGV2LT5maXJzdF92cF9pZCArCisJCQkJKG1zaXhfaWQvNCkpLCAwLCAzMiksCisJCQkJJmhsZGV2LT5jb21tb25fcmVnLT4KKwkJCQkJY2xyX21zaXhfb25lX3Nob3RfdmVjW21zaXhfaWQlNF0pOworCX0gZWxzZSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKGhsZGV2LT5maXJzdF92cF9pZCArCisJCQkJKG1zaXhfaWQvNCkpLCAwLCAzMiksCisJCQkJJmhsZGV2LT5jb21tb25fcmVnLT4KKwkJCQkJY2xlYXJfbXNpeF9tYXNrX3ZlY3RbbXNpeF9pZCU0XSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2sgLSBVbm1hc2sgdGhlIE1TSVggVmVjdG9yLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICogQG1zaXhfaWQ6ICBNU0kgSUQKKyAqCisgKiBUaGUgZnVuY3Rpb24gdW5tYXNrcyB0aGUgbXNpeCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBtc2l4X2lkCisgKgorICogUmV0dXJuczogMCwKKyAqIE90aGVyd2lzZSwgVlhHRV9IV19FUlJfV1JPTkdfSVJRIGlmIHRoZSBtc2l4IGluZGV4IGlzIG91dCBvZiByYW5nZQorICogc3RhdHVzLgorICogU2VlIGFsc286CisgKi8KK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2soc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCBpbnQgbXNpeF9pZCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKGhsZGV2LT5maXJzdF92cF9pZCArCisJCQkobXNpeF9pZC80KSksIDAsIDMyKSwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+Y2xlYXJfbXNpeF9tYXNrX3ZlY3RbbXNpeF9pZCU0XSk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tc2l4X21hc2tfYWxsIC0gTWFzayBhbGwgTVNJWCB2ZWN0b3JzIGZvciB0aGUgdnBhdGguCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKgorICogVGhlIGZ1bmN0aW9uIG1hc2tzIGFsbCBtc2l4IGludGVycnVwdCBmb3IgdGhlIGdpdmVuIHZwYXRoCisgKgorICovCit2b2lkCit2eGdlX2h3X3ZwYXRoX21zaXhfbWFza19hbGwoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJKHUzMil2eGdlX2JWQUxuKHZ4Z2VfbUJJVCh2cC0+dnBhdGgtPnZwX2lkKSwgMCwgMzIpLAorCQkmdnAtPnZwYXRoLT5obGRldi0+Y29tbW9uX3JlZy0+c2V0X21zaXhfbWFza19hbGxfdmVjdCk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9pbnRhX21hc2tfdHhfcnggLSBNYXNrIFR4IGFuZCBSeCBpbnRlcnJ1cHRzLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICoKKyAqIE1hc2sgVHggYW5kIFJ4IHZwYXRoIGludGVycnVwdHMuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfaW50YV9tYXNrX3R4X3J4KCkKKyAqLwordm9pZCB2eGdlX2h3X3ZwYXRoX2ludGFfbWFza190eF9yeChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJdTY0CXRpbV9pbnRfbWFzazBbNF0gPSB7WzAgLi4uM10gPSAwfTsKKwl1MzIJdGltX2ludF9tYXNrMVs0XSA9IHtbMCAuLi4zXSA9IDB9OworCXU2NAl2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCisJVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1NFVCh0aW1faW50X21hc2swLAorCQl0aW1faW50X21hc2sxLCB2cC0+dnBhdGgtPnZwX2lkKTsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKworCWlmICgodGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJCSh0aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0gIT0gMCkpIHsKKwkJd3JpdGVxKCh0aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJdGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdIHwgdmFsNjQpLAorCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKwl9CisKKwl2YWw2NCA9IHJlYWRsKCZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMSk7CisKKwlpZiAoKHRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSAhPSAwKSB8fAorCQkodGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdICE9IDApKSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkodGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdIHwKKwkJCXRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSB8IHZhbDY0KSwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfaW50YV91bm1hc2tfdHhfcnggLSBVbm1hc2sgVHggYW5kIFJ4IGludGVycnVwdHMuCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKgorICogVW5tYXNrIFR4IGFuZCBSeCB2cGF0aCBpbnRlcnJ1cHRzLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX2ludGFfbWFza190eF9yeCgpCisgKi8KK3ZvaWQgdnhnZV9od192cGF0aF9pbnRhX3VubWFza190eF9yeChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJdTY0CXRpbV9pbnRfbWFzazBbNF0gPSB7WzAgLi4uM10gPSAwfTsKKwl1MzIJdGltX2ludF9tYXNrMVs0XSA9IHtbMCAuLi4zXSA9IDB9OworCXU2NAl2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCisJVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1NFVCh0aW1faW50X21hc2swLAorCQl0aW1faW50X21hc2sxLCB2cC0+dnBhdGgtPnZwX2lkKTsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKworCWlmICgodGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJICAgKHRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSAhPSAwKSkgeworCQl3cml0ZXEoKH4odGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdIHwKKwkJCXRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSkpICYgdmFsNjQsCisJCQkmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfbWFzazApOworCX0KKworCWlmICgodGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJICAgKHRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSAhPSAwKSkgeworCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKAorCQkJKH4odGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdIHwKKwkJCSAgdGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKSkgJiB2YWw2NCwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfcG9sbF9yeCAtIFBvbGwgUnggVmlydHVhbCBQYXRoIGZvciBjb21wbGV0ZWQKKyAqIGRlc2NyaXB0b3JzIGFuZCBwcm9jZXNzIHRoZSBzYW1lLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICoKKyAqIFRoZSBmdW5jdGlvbglwb2xscyB0aGUgUnggZm9yIHRoZSBjb21wbGV0ZWQJZGVzY3JpcHRvcnMgYW5kCWNhbGxzCisgKiB0aGUgZHJpdmVyIHZpYSBzdXBwbGllZCBjb21wbGV0aW9uCWNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0ssIGlmIHRoZSBwb2xsaW5nIGlzIGNvbXBsZXRlZCBzdWNjZXNzZnVsLgorICogVlhHRV9IV19DT01QTEVUSU9OU19SRU1BSU46IFRoZXJlIGFyZSBzdGlsbCBtb3JlIGNvbXBsZXRlZAorICogZGVzY3JpcHRvcnMgYXZhaWxhYmxlIHdoaWNoIGFyZSB5ZXQgdG8gYmUgcHJvY2Vzc2VkLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3BvbGxfcngoKQorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcG9sbF9yeChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcpCit7CisJdTggdF9jb2RlOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl2b2lkICpmaXJzdF9yeGRoOworCXU2NCB2YWw2NCA9IDA7CisJaW50IG5ld19jb3VudCA9IDA7CisKKwlyaW5nLT5jbXBsX2NudCA9IDA7CisKKwlzdGF0dXMgPSB2eGdlX2h3X3JpbmdfcnhkX25leHRfY29tcGxldGVkKHJpbmcsICZmaXJzdF9yeGRoLCAmdF9jb2RlKTsKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spCisJCXJpbmctPmNhbGxiYWNrKHJpbmcsIGZpcnN0X3J4ZGgsCisJCQl0X2NvZGUsIHJpbmctPmNoYW5uZWwudXNlcmRhdGEpOworCisJaWYgKHJpbmctPmNtcGxfY250ICE9IDApIHsKKwkJcmluZy0+ZG9vcmJlbGxfY250ICs9IHJpbmctPmNtcGxfY250OworCQlpZiAocmluZy0+ZG9vcmJlbGxfY250ID49IHJpbmctPnJ4ZHNfbGltaXQpIHsKKwkJCS8qCisJCQkgKiBFYWNoIFJ4RCBpcyBvZiA0IHF3b3JkcywgdXBkYXRlIHRoZSBudW1iZXIgb2YKKwkJCSAqIHF3b3JkcyByZXBsZW5pc2hlZAorCQkJICovCisJCQluZXdfY291bnQgPSAocmluZy0+ZG9vcmJlbGxfY250ICogNCk7CisKKwkJCS8qIEZvciBlYWNoIGJsb2NrIGFkZCA0IG1vcmUgcXdvcmRzICovCisJCQlyaW5nLT50b3RhbF9kYl9jbnQgKz0gcmluZy0+ZG9vcmJlbGxfY250OworCQkJaWYgKHJpbmctPnRvdGFsX2RiX2NudCA+PSByaW5nLT5yeGRzX3Blcl9ibG9jaykgeworCQkJCW5ld19jb3VudCArPSA0OworCQkJCS8qIFJlc2V0IHRvdGFsIGNvdW50ICovCisJCQkJcmluZy0+dG90YWxfZGJfY250ICU9IHJpbmctPnJ4ZHNfcGVyX2Jsb2NrOworCQkJfQorCQkJd3JpdGVxKFZYR0VfSFdfUFJDX1JYRF9ET09SQkVMTF9ORVdfUVdfQ05UKG5ld19jb3VudCksCisJCQkJJnJpbmctPnZwX3JlZy0+cHJjX3J4ZF9kb29yYmVsbCk7CisJCQl2YWw2NCA9CisJCQkgIHJlYWRsKCZyaW5nLT5jb21tb25fcmVnLT50aXRhbl9nZW5lcmFsX2ludF9zdGF0dXMpOworCQkJcmluZy0+ZG9vcmJlbGxfY250ID0gMDsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9wb2xsX3R4IC0gUG9sbCBUeCBmb3IgY29tcGxldGVkIGRlc2NyaXB0b3JzIGFuZCBwcm9jZXNzCisgKiB0aGUgc2FtZS4KKyAqIEBmaWZvOiBIYW5kbGUgdG8gdGhlIGZpZm8gb2JqZWN0IHVzZWQgZm9yIG5vbiBvZmZsb2FkIHNlbmQKKyAqCisgKiBUaGUgZnVuY3Rpb24JcG9sbHMgdGhlIFR4IGZvciB0aGUgY29tcGxldGVkCWRlc2NyaXB0b3JzIGFuZAljYWxscworICogdGhlIGRyaXZlciB2aWEgc3VwcGxpZWQgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm5zOiBWWEdFX0hXX09LLCBpZiB0aGUgcG9sbGluZyBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bC4KKyAqIFZYR0VfSFdfQ09NUExFVElPTlNfUkVNQUlOOiBUaGVyZSBhcmUgc3RpbGwgbW9yZSBjb21wbGV0ZWQKKyAqIGRlc2NyaXB0b3JzIGF2YWlsYWJsZSB3aGljaCBhcmUgeWV0IHRvIGJlIHByb2Nlc3NlZC4KKyAqCisgKiBTZWUgYWxzbzogdnhnZV9od192cGF0aF9wb2xsX3R4KCkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wb2xsX3R4KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywKKwkJCQkJdm9pZCAqKnNrYl9wdHIpCit7CisJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlOworCXZvaWQgKmZpcnN0X3R4ZGxoOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZChmaWZvLAorCQkJCSZmaXJzdF90eGRsaCwgJnRfY29kZSk7CisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKQorCQlpZiAoZmlmby0+Y2FsbGJhY2soZmlmbywgZmlyc3RfdHhkbGgsCisJCQl0X2NvZGUsIGNoYW5uZWwtPnVzZXJkYXRhLCBza2JfcHRyKSAhPSBWWEdFX0hXX09LKQorCQkJc3RhdHVzID0gVlhHRV9IV19DT01QTEVUSU9OU19SRU1BSU47CisKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2N2ExMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKQEAgLTAsMCArMSwyNDA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS10cmFmZmljLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFZYR0VfVFJBRkZJQ19ICisjZGVmaW5lIFZYR0VfVFJBRkZJQ19ICisKKyNpbmNsdWRlICJ2eGdlLXJlZy5oIgorI2luY2x1ZGUgInZ4Z2UtdmVyc2lvbi5oIgorCisjZGVmaW5lIFZYR0VfSFdfRFRSX01BWF9UX0NPREUJCTE2CisjZGVmaW5lIFZYR0VfSFdfQUxMX0ZPWEVTCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUgVlhHRV9IV19JTlRSX01BU0tfQUxMCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUJVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUwkxNworCisjZGVmaW5lIFZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRAkyCisKKyNkZWZpbmUgVlhHRV9IV19ERUZBVUxUXzMyCQkweGZmZmZmZmZmCisvKiBmcmFtZXMgc2l6ZXMgKi8KKyNkZWZpbmUgVlhHRV9IV19IRUFERVJfODAyXzJfU0laRQkzCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSX1NOQVBfU0laRQk1CisjZGVmaW5lIFZYR0VfSFdfSEVBREVSX1ZMQU5fU0laRQk0CisjZGVmaW5lIFZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRSBcCisJCQkoRVRIX0hMRU4gKyBcCisJCQlWWEdFX0hXX0hFQURFUl84MDJfMl9TSVpFICsgXAorCQkJVlhHRV9IV19IRUFERVJfVkxBTl9TSVpFICsgXAorCQkJVlhHRV9IV19IRUFERVJfU05BUF9TSVpFKQorCisjZGVmaW5lIFZYR0VfSFdfVENQSVBfSEVBREVSX01BWF9TSVpFCSg2NCArIDY0KQorCisvKiAzMmJpdCBhbGlnbm1lbnRzICovCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX0FMSUdOCQkyCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSXzgwMl8yX1NOQVBfQUxJR04JCQkyCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSXzgwMl8yX0FMSUdOCQkJMworI2RlZmluZSBWWEdFX0hXX0hFQURFUl9TTkFQX0FMSUdOCQkJMQorCisjZGVmaW5lIFZYR0VfSFdfTDNfQ0tTVU1fT0sJCQkJMHhGRkZGCisjZGVmaW5lIFZYR0VfSFdfTDRfQ0tTVU1fT0sJCQkJMHhGRkZGCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3QgX192eGdlX2h3X2RldmljZTsKK3N0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlOworc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnOworc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aDsKK3N0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbDsKK3N0cnVjdCBfX3Z4Z2VfaHdfZmlmbzsKK3N0cnVjdCBfX3Z4Z2VfaHdfcmluZzsKK3N0cnVjdCB2eGdlX2h3X3JpbmdfYXR0cjsKK3N0cnVjdCB2eGdlX2h3X21lbXBvb2w7CisKKyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFIDEKKyNlbmRpZgorCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFIDAKKyNlbmRpZgorCisvKlZYR0VfSFdfU1RBVFVTX0gqLworCisjZGVmaW5lIFZYR0VfSFdfRVZFTlRfQkFTRQkJCTAKKyNkZWZpbmUgVlhHRV9MTF9FVkVOVF9CQVNFCQkJMTAwCisKKy8qKgorICogZW51bSB2eGdlX2h3X2V2ZW50LSBFbnVtZXJhdGVzIHNsb3ctcGF0aCBIVyBldmVudHMuCisgKiBAVlhHRV9IV19FVkVOVF9VTktOT1dOOiBVbmtub3duIChhbmQgaW52YWxpZCkgZXZlbnQuCisgKiBAVlhHRV9IV19FVkVOVF9TRVJSOiBTZXJpb3VzIHZwYXRoIGhhcmR3YXJlIGVycm9yIGV2ZW50LgorICogQFZYR0VfSFdfRVZFTlRfRUNDRVJSOiB2cGF0aCBFQ0MgZXJyb3IgZXZlbnQuCisgKiBAVlhHRV9IV19FVkVOVF9WUEFUSF9FUlI6IEVycm9yIGxvY2FsIHRvIHRoZSByZXNwZWN0aXZlIHZwYXRoCisgKiBAVlhHRV9IV19FVkVOVF9GSUZPX0VSUjogRklGTyBEb29yYmVsbCBmaWZvIGVycm9yLgorICogQFZYR0VfSFdfRVZFTlRfU1JQQ0lNX1NFUlI6IHNycGNpbSBoYXJkd2FyZSBlcnJvciBldmVudC4KKyAqIEBWWEdFX0hXX0VWRU5UX01SUENJTV9TRVJSOiBtcnBjaW0gaGFyZHdhcmUgZXJyb3IgZXZlbnQuCisgKiBAVlhHRV9IV19FVkVOVF9NUlBDSU1fRUNDRVJSOiBtcnBjaW0gZWNjIGVycm9yIGV2ZW50LgorICogQFZYR0VfSFdfRVZFTlRfUkVTRVRfU1RBUlQ6IFByaXZpbGVnZWQgZW50aXR5IGlzIHN0YXJ0aW5nIGRldmljZSByZXNldAorICogQFZYR0VfSFdfRVZFTlRfUkVTRVRfQ09NUExFVEU6IERldmljZSByZXNldCBoYXMgYmVlbiBjb21wbGV0ZWQKKyAqIEBWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFOiBTbG90LWZyZWV6ZSBldmVudC4gRHJpdmVyIHRyaWVzIHRvIGRpc3Rpbmd1aXNoCisgKiBzbG90LWZyZWV6ZSBmcm9tIHRoZSByZXN0IGNyaXRpY2FsIGV2ZW50cyAoZS5nLiBFQ0MpIHdoZW4gaXQgaXMKKyAqIGltcG9zc2libGUgdG8gUElPIHJlYWQgInRocm91Z2giIHRoZSBidXMsIGkuZS4gd2hlbiBnZXR0aW5nIGFsbC1mb3hlcy4KKyAqCisgKiBlbnVtIHZ4Z2VfaHdfZXZlbnQgZW51bWVyYXRlcyBzbG93LXBhdGggSFcgZXZlbnRpcy4KKyAqCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdWxkX2Nic3t9LCB2eGdlX3VsZF9saW5rX3VwX2Z7fSwKKyAqIHZ4Z2VfdWxkX2xpbmtfZG93bl9me30uCisgKi8KK2VudW0gdnhnZV9od19ldmVudCB7CisJVlhHRV9IV19FVkVOVF9VTktOT1dOCQk9IDAsCisJLyogSFcgZXZlbnRzICovCisJVlhHRV9IV19FVkVOVF9SRVNFVF9TVEFSVAk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDEsCisJVlhHRV9IV19FVkVOVF9SRVNFVF9DT01QTEVURQk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDIsCisJVlhHRV9IV19FVkVOVF9MSU5LX0RPV04JCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgMywKKwlWWEdFX0hXX0VWRU5UX0xJTktfVVAJCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgNCwKKwlWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyA1LAorCVZYR0VfSFdfRVZFTlRfRUNDRVJSCQk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDYsCisJVlhHRV9IV19FVkVOVF9NUlBDSU1fRUNDRVJSCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgNywKKwlWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSCQk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDgsCisJVlhHRV9IV19FVkVOVF9WUEFUSF9FUlIJCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgOSwKKwlWWEdFX0hXX0VWRU5UX0NSSVRJQ0FMX0VSUgk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDEwLAorCVZYR0VfSFdfRVZFTlRfU0VSUgkJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyAxMSwKKwlWWEdFX0hXX0VWRU5UX1NSUENJTV9TRVJSCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgMTIsCisJVlhHRV9IV19FVkVOVF9NUlBDSU1fU0VSUgk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDEzLAorCVZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyAxNCwKK307CisKKyNkZWZpbmUgVlhHRV9IV19TRVRfTEVWRUwoYSwgYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQorCisvKgorICogc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgLSBSZXByZXNlbnRzIERNQSBvYmplY3RzIHBhc3NlZCB0byB0aGUKKwljYWxsZXIuCisgKi8KK3N0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hIHsKKwlkbWFfYWRkcl90CQkJYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqaGFuZGxlOworCXN0cnVjdCBwY2lfZGV2ICphY2NfaGFuZGxlOworfTsKKworLyoKKyAqIHZ4Z2VfaHdfbWVtcG9vbF9pdGVtX2YgIC0gTWVtcG9vbCBpdGVtIGFsbG9jL2ZyZWUgY2FsbGJhY2sKKyAqIEBtZW1wb29saDogTWVtb3J5IHBvb2wgaGFuZGxlLgorICogQG1lbWJsb2NrOiBBZGRyZXNzIG9mIG1lbW9yeSBibG9jaworICogQG1lbWJsb2NrX2luZGV4OiBJbmRleCBvZiBtZW1vcnkgYmxvY2sKKyAqIEBpdGVtOiBJdGVtIHRoYXQgZ2V0cyBhbGxvY2F0ZWQgb3IgZnJlZWQuCisgKiBAaW5kZXg6IEl0ZW0ncyBpbmRleCBpbiB0aGUgbWVtb3J5IHBvb2wuCisgKiBAaXNfbGFzdDogVHJ1ZSwgaWYgdGhpcyBpdGVtIGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcG9vbDsgZmFsc2UgLSBvdGhlcndpc2UuCisgKiB1c2VyZGF0YTogUGVyLXBvb2wgdXNlciBjb250ZXh0LgorICoKKyAqIE1lbW9yeSBwb29sIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGNhbGxiYWNrLgorICovCisKKy8qCisgKiBzdHJ1Y3QgdnhnZV9od19tZW1wb29sIC0gTWVtb3J5IHBvb2wuCisgKi8KK3N0cnVjdCB2eGdlX2h3X21lbXBvb2wgeworCisJdm9pZCAoKml0ZW1fZnVuY19hbGxvYykoCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCisJdTMyCQkJbWVtYmxvY2tfaW5kZXgsCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEJKmRtYV9vYmplY3QsCisJdTMyCQkJaW5kZXgsCisJdTMyCQkJaXNfbGFzdCk7CisKKwl2b2lkCQkqdXNlcmRhdGE7CisJdm9pZAkJKiptZW1ibG9ja3NfYXJyOworCXZvaWQJCSoqbWVtYmxvY2tzX3ByaXZfYXJyOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hCSptZW1ibG9ja3NfZG1hX2FycjsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aDsKKwl1MzIJCQltZW1ibG9ja19zaXplOworCXUzMgkJCW1lbWJsb2Nrc19tYXg7CisJdTMyCQkJbWVtYmxvY2tzX2FsbG9jYXRlZDsKKwl1MzIJCQlpdGVtX3NpemU7CisJdTMyCQkJaXRlbXNfbWF4OworCXUzMgkJCWl0ZW1zX2luaXRpYWw7CisJdTMyCQkJaXRlbXNfY3VycmVudDsKKwl1MzIJCQlpdGVtc19wZXJfbWVtYmxvY2s7CisJdm9pZAkJKippdGVtc19hcnI7CisJdTMyCQkJaXRlbXNfcHJpdl9zaXplOworfTsKKworI2RlZmluZQlWWEdFX0hXX01BWF9JTlRSX1BFUl9WUAkJCQk0CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfSU5UUl9UWAkJCQkwCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfSU5UUl9SWAkJCQkxCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfSU5UUl9FSU5UQQkJCTIKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9JTlRSX0JNQVAJCQkJMworCisjZGVmaW5lIFZYR0VfSFdfQkxPQ0tfU0laRQkJCQk0MDk2CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlnIC0gVGl0YW4gVGltIGludGVycnVwdCBjb25maWd1cmF0aW9uLgorICogQGludHJfZW5hYmxlOiBTZXQgdG8gMSwgaWYgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgKiBAYnRpbWVyX3ZhbDogQm91bmRhcnkgVGltZXIgSW5pdGlhbGl6YXRpb24gdmFsdWUgaW4gdW5pdHMgb2YgMjcyIG5zLgorICogQHRpbWVyX2FjX2VuOiBUaW1lciBBdXRvbWF0aWMgQ2FuY2VsLiAxIDogQXV0b21hdGljIENhbmNlbGluZyBFbmFibGU6IHdoZW4KKyAqICAgICAgICAgICAgIGFzc2VydGVkLCBvdGhlciBpbnRlcnJ1cHQtZ2VuZXJhdGluZyBlbnRpdGllcyB3aWxsIGNhbmNlbCB0aGUKKyAqICAgICAgICAgICAgIHNjaGVkdWxlZCB0aW1lciBpbnRlcnJ1cHQuCisgKiBAdGltZXJfY2lfZW46IFRpbWVyIENvbnRpbnVvdXMgSW50ZXJydXB0LiAxIDogQ29udGludW91cyBJbnRlcnJ1cHRpbmcgRW5hYmxlOgorICogICAgICAgICAgICAgV2hlbiBhc3NlcnRlZCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIGV2ZXJ5IHRpbWUgdGhlCisgKiAgICAgICAgICAgICBib3VuZGFyeSB0aW1lciBleHBpcmVzLCBldmVuIGlmIG5vIHRyYWZmaWMgaGFzIGJlZW4gdHJhbnNtaXR0ZWQKKyAqICAgICAgICAgICAgIG9uIHRoaXMgaW50ZXJydXB0LgorICogQHRpbWVyX3JpX2VuOiBUaW1lciBDb25zZWN1dGl2ZSAoUmUtKSBJbnRlcnJ1cHQgMSA6IENvbnNlY3V0aXZlCisgKiAgICAgICAgICAgICAoUmUtKSBJbnRlcnJ1cHQgRW5hYmxlOiBXaGVuIGFzc2VydGVkLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZQorICogICAgICAgICAgICAgZ2VuZXJhdGVkIHRoZSBuZXh0IHRpbWUgdGhlIHRpbWVyIGV4cGlyZXMsIGV2ZW4gaWYgbm8gdHJhZmZpYyBoYXMKKyAqICAgICAgICAgICAgIGJlZW4gdHJhbnNtaXR0ZWQgb24gdGhpcyBpbnRlcnJ1cHQuIChUaGlzIHdpbGwgb25seSBoYXBwZW4gb25jZQorICogICAgICAgICAgICAgZWFjaCB0aW1lIHRoYXQgdGhpcyB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBUSU0uKSBUaGlzIGJpdCBpcworICogICAgICAgICAgICAgY2xlYXJlZCBieSBIL1cgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudC10aW1lci1pbnRlcnZhbCB3aGVuCisgKiAgICAgICAgICAgICB0aGUgaW50ZXJydXB0IGlzIHRyaWdnZXJlZC4KKyAqIEBydGltZXJfdmFsOiBSZXN0cmljdGlvbiBUaW1lciBJbml0aWFsaXphdGlvbiB2YWx1ZSBpbiB1bml0cyBvZiAyNzIgbnMuCisgKiBAdXRpbF9zZWw6IFV0aWxpemF0aW9uIFNlbGVjdG9yLiBTZWxlY3RzIHdoaWNoIG9mIHRoZSB3b3JrbG9hZCBhcHByb3hpbWF0aW9ucworICogICAgICAgICAgICAgdG8gdXNlIChlLmcuIGxlZ2FjeSBUeCB1dGlsaXphdGlvbiwgVHgvUnggdXRpbGl6YXRpb24sIGhvc3QKKyAqICAgICAgICAgICAgIHNwZWNpZmllZCB1dGlsaXphdGlvbiBldGMuKSwgc2VsZWN0cyBvbmUgb2YKKyAqICAgICAgICAgICAgIHRoZSAxNyBob3N0IGNvbmZpZ3VyZWQgdmFsdWVzLgorICogICAgICAgICAgICAgMC1WaXJ0dWFsIFBhdGggMAorICogICAgICAgICAgICAgMS1WaXJ0dWFsIFBhdGggMQorICogICAgICAgICAgICAgLi4uCisgKiAgICAgICAgICAgICAxNi1WaXJ0dWFsIFBhdGggMTcKKyAqICAgICAgICAgICAgIDE3LUxlZ2FjeSBUeCBuZXR3b3JrIHV0aWxpemF0aW9uLCBwcm92aWRlZCBieSBUUEEKKyAqICAgICAgICAgICAgIDE4LUxlZ2FjeSBSeCBuZXR3b3JrIHV0aWxpemF0aW9uLCBwcm92aWRlZCBieSBGQVUKKyAqICAgICAgICAgICAgIDE5LUF2ZXJhZ2Ugb2YgbGVnYWN5IFJ4IGFuZCBUeCB1dGlsaXphdGlvbiBjYWxjdWxhdGVkIGZyb20gbGluaworICogICAgICAgICAgICAgICAgdXRpbGl6YXRpb24gdmFsdWVzLgorICogICAgICAgICAgICAgMjAtMzEtSW52YWxpZCBjb25maWd1cmF0aW9ucworICogICAgICAgICAgICAgMzItSG9zdCB1dGlsaXphdGlvbiBmb3IgVmlydHVhbCBQYXRoIDAKKyAqICAgICAgICAgICAgIDMzLUhvc3QgdXRpbGl6YXRpb24gZm9yIFZpcnR1YWwgUGF0aCAxCisgKiAgICAgICAgICAgICAuLi4KKyAqICAgICAgICAgICAgIDQ4LUhvc3QgdXRpbGl6YXRpb24gZm9yIFZpcnR1YWwgUGF0aCAxNworICogICAgICAgICAgICAgNDktTGVnYWN5IFR4IG5ldHdvcmsgdXRpbGl6YXRpb24sIHByb3ZpZGVkIGJ5IFRQQQorICogICAgICAgICAgICAgNTAtTGVnYWN5IFJ4IG5ldHdvcmsgdXRpbGl6YXRpb24sIHByb3ZpZGVkIGJ5IEZBVQorICogICAgICAgICAgICAgNTEtQXZlcmFnZSBvZiBsZWdhY3kgUnggYW5kIFR4IHV0aWxpemF0aW9uIGNhbGN1bGF0ZWQgZnJvbQorICogICAgICAgICAgICAgICAgbGluayB1dGlsaXphdGlvbiB2YWx1ZXMuCisgKiAgICAgICAgICAgICA1Mi02My1JbnZhbGlkIGNvbmZpZ3VyYXRpb25zCisgKiBAbHRpbWVyX3ZhbDogTGF0ZW5jeSBUaW1lciBJbml0aWFsaXphdGlvbiBWYWx1ZSBpbiB1bml0cyBvZiAyNzIgbnMuCisgKiBAdHhkX2NudF9lbjogVHhEIFJldHVybiBFdmVudCBDb3VudCBFbmFibGUuIFRoaXMgY29uZmlndXJhdGlvbiBiaXQgd2hlbiBzZXQKKyAqICAgICAgICAgICAgIHRvIDEgZW5hYmxlcyBjb3VudGluZyBvZiBUeEQwIHJldHVybnMgKHNpZ25hbGxlZCBieSBQQ0MncyksCisgKiAgICAgICAgICAgICB0b3dhcmRzIHV0aWxpemF0aW9uIGV2ZW50IGNvdW50IHZhbHVlcy4KKyAqIEB1cmFuZ2VfYTogRGVmaW5lcyB0aGUgdXBwZXIgbGltaXQgKGluIHBlcmNlbnQpIGZvciB0aGlzIHV0aWxpemF0aW9uIHJhbmdlCisgKiAgICAgICAgICAgICB0byBiZSBhY3RpdmUuIFRoaXMgcmFuZ2UgaXMgY29uc2lkZXJlZCBhY3RpdmUKKyAqICAgICAgICAgICAgIGlmIDAgPSBVVElMID0gVVJOR19BCisgKiAgICAgICAgICAgICBhbmQgdGhlIFVFQ19BIGZpZWxkIChiZWxvdykgaXMgbm9uLXplcm8uCisgKiBAdWVjX2E6IFV0aWxpemF0aW9uIEV2ZW50IENvdW50IEEuIElmIHRoaXMgcmFuZ2UgaXMgYWN0aXZlLCB0aGUgYWRhcHRlciB3aWxsCisgKiAgICAgICAgICAgICB3YWl0IHVudGlsIFVFQ19BIGV2ZW50cyBoYXZlIG9jY3VycmVkIG9uIHRoZSBpbnRlcnJ1cHQgYmVmb3JlCisgKiAgICAgICAgICAgICBnZW5lcmF0aW5nIGFuIGludGVycnVwdC4KKyAqIEB1cmFuZ2VfYjogTGluayB1dGlsaXphdGlvbiByYW5nZSBCLgorICogQHVlY19iOiBVdGlsaXphdGlvbiBFdmVudCBDb3VudCBCLgorICogQHVyYW5nZV9jOiBMaW5rIHV0aWxpemF0aW9uIHJhbmdlIEMuCisgKiBAdWVjX2M6IFV0aWxpemF0aW9uIEV2ZW50IENvdW50IEMuCisgKiBAdXJhbmdlX2Q6IExpbmsgdXRpbGl6YXRpb24gcmFuZ2UgRC4KKyAqIEB1ZWNfZDogVXRpbGl6YXRpb24gRXZlbnQgQ291bnQgRC4KKyAqIFRyYWZmaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgTW9kdWxlIGludGVycnVwdCBjb25maWd1cmF0aW9uLgorICovCitzdHJ1Y3QgdnhnZV9od190aW1faW50cl9jb25maWcgeworCisJdTMyCQkJCWludHJfZW5hYmxlOworI2RlZmluZSBWWEdFX0hXX1RJTV9JTlRSX0VOQUJMRQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVFJfRElTQUJMRQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVFJfREVGQVVMVAkJCQkwCisKKwl1MzIJCQkJYnRpbWVyX3ZhbDsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX0JUSU1FUl9WQUwJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fQlRJTUVSX1ZBTAkJCQk2NzEwODg2NAorI2RlZmluZSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUCQkJCTB4ZmZmZmZmZmYKKworCXUzMgkJCQl0aW1lcl9hY19lbjsKKyNkZWZpbmUgVlhHRV9IV19USU1fVElNRVJfQUNfRU5BQkxFCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19USU1fVElNRVJfQUNfRElTQUJMRQkJCQkwCisKKwl1MzIJCQkJdGltZXJfY2lfZW47CisjZGVmaW5lIFZYR0VfSFdfVElNX1RJTUVSX0NJX0VOQUJMRQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfVElNX1RJTUVSX0NJX0RJU0FCTEUJCQkJMAorCisJdTMyCQkJCXRpbWVyX3JpX2VuOworI2RlZmluZSBWWEdFX0hXX1RJTV9USU1FUl9SSV9FTkFCTEUJCQkJMQorI2RlZmluZSBWWEdFX0hXX1RJTV9USU1FUl9SSV9ESVNBQkxFCQkJCTAKKworCXUzMgkJCQlydGltZXJfdmFsOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fUlRJTUVSX1ZBTAkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9SVElNRVJfVkFMCQkJCTY3MTA4ODY0CisKKwl1MzIJCQkJdXRpbF9zZWw7CisjZGVmaW5lIFZYR0VfSFdfVElNX1VUSUxfU0VMX0xFR0FDWV9UWF9ORVRfVVRJTAkJMTcKKyNkZWZpbmUgVlhHRV9IV19USU1fVVRJTF9TRUxfTEVHQUNZX1JYX05FVF9VVElMCQkxOAorI2RlZmluZSBWWEdFX0hXX1RJTV9VVElMX1NFTF9MRUdBQ1lfVFhfUlhfQVZFX05FVF9VVElMCQkxOQorI2RlZmluZSBWWEdFX0hXX1RJTV9VVElMX1NFTF9QRVJfVlBBVEgJCQkJNjMKKworCXUzMgkJCQlsdGltZXJfdmFsOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fTFRJTUVSX1ZBTAkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9MVElNRVJfVkFMCQkJCTY3MTA4ODY0CisKKwkvKiBMaW5lIHV0aWxpemF0aW9uIGludGVycnVwdHMgKi8KKwl1MzIJCQkJdXJhbmdlX2E7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9VUkFOR0VfQQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9VUkFOR0VfQQkJCQkxMDAKKworCXUzMgkJCQl1ZWNfYTsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX1VFQ19BCQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9VRUNfQQkJCQkJNjU1MzUKKworCXUzMgkJCQl1cmFuZ2VfYjsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX1VSQU5HRV9CCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfVElNX1VSQU5HRV9CCQkJCTEwMAorCisJdTMyCQkJCXVlY19iOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fVUVDX0IJCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfVElNX1VFQ19CCQkJCQk2NTUzNQorCisJdTMyCQkJCXVyYW5nZV9jOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fVVJBTkdFX0MJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fVVJBTkdFX0MJCQkJMTAwCisKKwl1MzIJCQkJdWVjX2M7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9VRUNfQwkJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fVUVDX0MJCQkJCTY1NTM1CisKKwl1MzIJCQkJdWVjX2Q7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9VRUNfRAkJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fVUVDX0QJCQkJCTY1NTM1Cit9OworCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfT1BfUkVBRAkJCQkJMAorI2RlZmluZQlWWEdFX0hXX1NUQVRTX09QX0NMRUFSX1NUQVQJCQkJMQorI2RlZmluZQlWWEdFX0hXX1NUQVRTX09QX0NMRUFSX0FMTF9WUEFUSF9TVEFUUwkJCTIKKyNkZWZpbmUJVlhHRV9IV19TVEFUU19PUF9DTEVBUl9BTExfU1RBVFNfT0ZfTE9DCQkJMgorI2RlZmluZQlWWEdFX0hXX1NUQVRTX09QX0NMRUFSX0FMTF9TVEFUUwkJCTMKKworI2RlZmluZQlWWEdFX0hXX1NUQVRTX0xPQ19BR0dSCQkJCQkxNworI2RlZmluZSBWWEdFX0hXX1NUQVRTX0FHR1JuX09GRlNFVAkJCQkweDAwNzIwCisKKyNkZWZpbmUgVlhHRV9IV19TVEFUU19WUEFUSF9UWF9PRkZTRVQJCQkJMHgwCisjZGVmaW5lIFZYR0VfSFdfU1RBVFNfVlBBVEhfUlhfT0ZGU0VUCQkJCTB4MDAwOTAKKworI2RlZmluZQlWWEdFX0hXX1NUQVRTX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTBfT0ZGU0VUCSAgICgweDAwMWQwID4+IDMpCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTAoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKworI2RlZmluZQlWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0xKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfVlBBVEhfUFJPR19FVkVOVF9WTlVNMl9PRkZTRVQJICAgKDB4MDAxZDggPj4gMykKKyNkZWZpbmUJVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMihiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTMoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY19hZ2dyX3N0YXRzIC0gUGVyLUFnZ3JlZ2F0b3IgWE1BQyBTdGF0aXN0aWNzCisgKgorICogQHR4X2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRvciBvbiBhbGwKKyAqICAgICAgICAgICAgIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlciBQRFVzLgorICogICAgICAgICAgICAgSG93ZXZlciwgZG9lcyBpbmNsdWRlIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIERpc3RyaWJ1dGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24uCisgKiBAdHhfZGF0YV9vY3RldHM6IENvdW50IG9mIGRhdGEgYW5kIHBhZGRpbmcgb2N0ZXRzIG9mIGZyYW1lcyB0cmFuc21pdHRlZAorICogICAgICAgICAgICAgb24gdGhpcyBBZ2dyZWdhdG9yIG9uIGFsbCBpdHMgQWdncmVnYXRpb24gcG9ydHMuIERvZXMgbm90IGluY2x1ZGUKKyAqICAgICAgICAgICAgIG9jdGV0cyBvZiBMQUNQRFVzIG9yIE1hcmtlciBQRFVzLiBIb3dldmVyLCBkb2VzIGluY2x1ZGUgb2N0ZXRzIG9mCisgKiAgICAgICAgICAgICBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoZSBEaXN0cmlidXRpb24gZnVuY3Rpb24uCisgKiBAdHhfbWNhc3RfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgdHJhbnNtaXR0ZWQgKHRvIGEgZ3JvdXAgZGVzdGluYXRpb24KKyAqICAgICAgICAgICAgIGFkZHJlc3Mgb3RoZXIgdGhhbiB0aGUgYnJvYWRjYXN0IGFkZHJlc3MpIG9uIHRoaXMgQWdncmVnYXRvciBvbgorICogICAgICAgICAgICAgYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlcgorICogICAgICAgICAgICAgUERVcy4gSG93ZXZlciwgZG9lcyBpbmNsdWRlIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIERpc3RyaWJ1dGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24uCisgKiBAdHhfYmNhc3RfZnJtczogQ291bnQgb2YgYnJvYWRjYXN0IGRhdGEgZnJhbWVzIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRvcgorICogICAgICAgICAgICAgb24gYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlcgorICogICAgICAgICAgICAgUERVcy4gSG93ZXZlciwgZG9lcyBpbmNsdWRlIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIERpc3RyaWJ1dGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24uCisgKiBAdHhfZGlzY2FyZGVkX2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHRvIGJlIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRvcgorICogICAgICAgICAgICAgdGhhdCBhcmUgZGlzY2FyZGVkIGJ5IHRoZSBEaXN0cmlidXRpb24gZnVuY3Rpb24uIFRoaXMgb2NjdXJzIHdoZW4KKyAqICAgICAgICAgICAgIGNvbnZlcnNhdGlvbiBhcmUgYWxsb2NhdGVkIHRvIGRpZmZlcmVudCBwb3J0cyBhbmQgaGF2ZSB0byBiZQorICogICAgICAgICAgICAgZmx1c2hlZCBvbiBvbGQgcG9ydHMKKyAqIEB0eF9lcnJvcmVkX2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRvciB0aGF0CisgKiAgICAgICAgICAgICBleHBlcmllbmNlIHRyYW5zbWlzc2lvbiBlcnJvcnMgb24gaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLgorICogQHJ4X2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMgQWdncmVnYXRvciBvbiBhbGwgaXRzCisgKiAgICAgICAgICAgICBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlciBQRFVzLgorICogICAgICAgICAgICAgQWxzbywgZG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoZSBDb2xsZWN0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbi4KKyAqIEByeF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2YgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMKKyAqICAgICAgICAgICAgIEFnZ3JlZ2F0b3Igb24gYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBvY3RldHMKKyAqICAgICAgICAgICAgIG9mIExBQ1BEVXMgb3IgTWFya2VyIFBEVXMuIEFsc28sIGRvZXMgbm90IGluY2x1ZGUKKyAqICAgICAgICAgICAgIG9jdGV0cyBvZiBmcmFtZXMKKyAqICAgICAgICAgICAgIGRpc2NhcmRlZCBieSB0aGUgQ29sbGVjdGlvbiBmdW5jdGlvbi4KKyAqIEByeF9tY2FzdF9mcm1zOiBDb3VudCBvZiBkYXRhIGZyYW1lcyByZWNlaXZlZCAoZnJvbSBhIGdyb3VwIGRlc3RpbmF0aW9uCisgKiAgICAgICAgICAgICBhZGRyZXNzIG90aGVyIHRoYW4gdGhlIGJyb2FkY2FzdCBhZGRyZXNzKSBvbiB0aGlzIEFnZ3JlZ2F0b3Igb24KKyAqICAgICAgICAgICAgIGFsbCBpdHMgQWdncmVnYXRpb24gcG9ydHMuIERvZXMgbm90IGluY2x1ZGUgTEFDUERVcyBvciBNYXJrZXIKKyAqICAgICAgICAgICAgIFBEVXMuIEFsc28sIGRvZXMgbm90IGluY2x1ZGUgZnJhbWVzIGRpc2NhcmRlZCBieSB0aGUgQ29sbGVjdGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24uCisgKiBAcnhfYmNhc3RfZnJtczogQ291bnQgb2YgYnJvYWRjYXN0IGRhdGEgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMgQWdncmVnYXRvciBvbgorICogICAgICAgICAgICAgYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlcgorICogICAgICAgICAgICAgUERVcy4gQWxzbywgZG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoZSBDb2xsZWN0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbi4KKyAqIEByeF9kaXNjYXJkZWRfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdG9yIHRoYXQgYXJlCisgKiAgICAgICAgICAgICBkaXNjYXJkZWQgYnkgdGhlIENvbGxlY3Rpb24gZnVuY3Rpb24gYmVjYXVzZSB0aGUgQ29sbGVjdGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24gd2FzIGRpc2FibGVkIG9uIHRoZSBwb3J0IHdoaWNoIHRoZSBmcmFtZXMgYXJlIHJlY2VpdmVkLgorICogQHJ4X2Vycm9yZWRfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdG9yIHRoYXQgYXJlCisgKiAgICAgICAgICAgICBkaXNjYXJkZWQgYnkgaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLCBvciBhcmUgZGlzY2FyZGVkIGJ5IHRoZQorICogICAgICAgICAgICAgQ29sbGVjdGlvbiBmdW5jdGlvbiBvZiB0aGUgQWdncmVnYXRvciwgb3IgdGhhdCBhcmUgZGlzY2FyZGVkIGJ5CisgKiAgICAgICAgICAgICB0aGUgQWdncmVnYXRvciBkdWUgdG8gZGV0ZWN0aW9uIG9mIGFuIGlsbGVnYWwgU2xvdyBQcm90b2NvbHMgUERVLgorICogQHJ4X3Vua25vd25fc2xvd19wcm90b19mcm1zOiBDb3VudCBvZiBkYXRhIGZyYW1lcyByZWNlaXZlZCBvbiB0aGlzIEFnZ3JlZ2F0b3IKKyAqICAgICAgICAgICAgIHRoYXQgYXJlIGRpc2NhcmRlZCBieSBpdHMgQWdncmVnYXRpb24gcG9ydHMgZHVlIHRvIGRldGVjdGlvbiBvZgorICogICAgICAgICAgICAgYW4gdW5rbm93biBTbG93IFByb3RvY29scyBQRFUuCisgKgorICogUGVyIGFnZ3JlZ2F0b3IgWE1BQyBSWCBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMgeworLyoweDAwMCovCQl1NjQJdHhfZnJtczsKKy8qMHgwMDgqLwkJdTY0CXR4X2RhdGFfb2N0ZXRzOworLyoweDAxMCovCQl1NjQJdHhfbWNhc3RfZnJtczsKKy8qMHgwMTgqLwkJdTY0CXR4X2JjYXN0X2ZybXM7CisvKjB4MDIwKi8JCXU2NAl0eF9kaXNjYXJkZWRfZnJtczsKKy8qMHgwMjgqLwkJdTY0CXR4X2Vycm9yZWRfZnJtczsKKy8qMHgwMzAqLwkJdTY0CXJ4X2ZybXM7CisvKjB4MDM4Ki8JCXU2NAlyeF9kYXRhX29jdGV0czsKKy8qMHgwNDAqLwkJdTY0CXJ4X21jYXN0X2ZybXM7CisvKjB4MDQ4Ki8JCXU2NAlyeF9iY2FzdF9mcm1zOworLyoweDA1MCovCQl1NjQJcnhfZGlzY2FyZGVkX2ZybXM7CisvKjB4MDU4Ki8JCXU2NAlyeF9lcnJvcmVkX2ZybXM7CisvKjB4MDYwKi8JCXU2NAlyeF91bmtub3duX3Nsb3dfcHJvdG9fZnJtczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzIC0gWE1BQyBQb3J0IFN0YXRpc3RpY3MKKyAqCisgKiBAdHhfdHRsX2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBNQUMgZnJhbWVzCisgKiBAdHhfdHRsX29jdGV0czogQ291bnQgb2YgdG90YWwgb2N0ZXRzIG9mIHRyYW5zbWl0dGVkIGZyYW1lcywgbm90IGluY2x1ZGluZworICogICAgICAgICAgICBmcmFtaW5nIGNoYXJhY3RlcnMgKGkuZS4gbGVzcyBmcmFtaW5nIGJpdHMpLiBUbyBkZXRlcm1pbmUgdGhlCisgKiAgICAgICAgICAgIHRvdGFsIG9jdGV0cyBvZiB0cmFuc21pdHRlZCBmcmFtZXMsIGluY2x1ZGluZyBmcmFtaW5nIGNoYXJhY3RlcnMsCisgKiAgICAgICAgICAgIG11bHRpcGx5IFBPUlRuX1RYX1RUTF9GUk1TIGJ5IDggYW5kIGFkZCBpdCB0byB0aGlzIHN0YXQgKHVubGVzcworICogICAgICAgICAgICBvdGhlcndpc2UgY29uZmlndXJlZCwgdGhpcyBzdGF0IG9ubHkgY291bnRzIGZyYW1lcyB0aGF0IGhhdmUKKyAqICAgICAgICAgICAgOCBieXRlcyBvZiBwcmVhbWJsZSBmb3IgZWFjaCBmcmFtZSkuIFRoaXMgc3RhdCBjYW4gYmUgY29uZmlndXJlZAorICogICAgICAgICAgICAoc2VlIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5UVExfRlJNU19IQU5ETElORykgdG8gY291bnQgZXZlcnl0aGluZworICogICAgICAgICAgICBpbmNsdWRpbmcgdGhlIHByZWFtYmxlIG9jdGV0cy4KKyAqIEB0eF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkCisgKiAgICAgICAgICAgIGZyYW1lcy4KKyAqIEB0eF9tY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgZnJhbWVzIHRvIGEgZ3JvdXAgYWRkcmVzcworICogICAgICAgICAgICBvdGhlciB0aGFuIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KKyAqIEB0eF9iY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgZnJhbWVzIHRvIHRoZSBicm9hZGNhc3QKKyAqICAgICAgICAgICAgZ3JvdXAgYWRkcmVzcy4KKyAqIEB0eF91Y2FzdF9mcm1zOiBDb3VudCBvZiB0cmFuc21pdHRlZCBmcmFtZXMgY29udGFpbmluZyBhIHVuaWNhc3QgYWRkcmVzcy4KKyAqICAgICAgICAgICAgSW5jbHVkZXMgZGlzY2FyZGVkIGZyYW1lcyB0aGF0IGFyZSBub3Qgc2VudCB0byB0aGUgbmV0d29yay4KKyAqIEB0eF90YWdnZWRfZnJtczogQ291bnQgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzIGNvbnRhaW5pbmcgYSBWTEFOIHRhZy4KKyAqIEB0eF92bGRfaXA6IENvdW50IG9mIHRyYW5zbWl0dGVkIElQIGRhdGFncmFtcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG5ldHdvcmsuCisgKiBAdHhfdmxkX2lwX29jdGV0czogQ291bnQgb2YgdG90YWwgb2N0ZXRzIG9mIHRyYW5zbWl0dGVkIElQIGRhdGFncmFtcyB0aGF0CisgKiAgICAgICAgICAgIGFyZSBwYXNzZWQgdG8gdGhlIG5ldHdvcmsuCisgKiBAdHhfaWNtcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgSUNNUCBtZXNzYWdlcy4gSW5jbHVkZXMgbWVzc2FnZXMgbm90IHNlbnQKKyAqICAgICAgICAgICAgZHVlIHRvIHByb2JsZW1zIHdpdGhpbiBJQ01QLgorICogQHR4X3RjcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVENQIHNlZ21lbnRzLiBEb2VzIG5vdCBpbmNsdWRlIHNlZ21lbnRzCisgKiAgICAgICAgICAgIGNvbnRhaW5pbmcgcmV0cmFuc21pdHRlZCBvY3RldHMuCisgKiBAdHhfcnN0X3RjcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVENQIHNlZ21lbnRzIGNvbnRhaW5pbmcgdGhlIFJTVCBmbGFnLgorICogQHR4X3VkcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVURQIGRhdGFncmFtcy4KKyAqIEB0eF9wYXJzZV9lcnJvcjogSW5jcmVtZW50cyB3aGVuIHRoZSBUUEEgaXMgdW5hYmxlIHRvIHBhcnNlIGEgcGFja2V0LiBUaGlzCisgKiAgICAgICAgICAgIGdlbmVyYWxseSBvY2N1cnMgd2hlbiBhIHBhY2tldCBpcyBjb3JydXB0IHNvbWVob3csIGluY2x1ZGluZworICogICAgICAgICAgICBwYWNrZXRzIHRoYXQgaGF2ZSBJUCB2ZXJzaW9uIG1pc21hdGNoZXMsIGludmFsaWQgTGF5ZXIgMiBjb250cm9sCisgKiAgICAgICAgICAgIGZpZWxkcywgZXRjLiBMMy9MNCBjaGVja3N1bXMgYXJlIG5vdCBvZmZsb2FkZWQsIGJ1dCB0aGUgcGFja2V0CisgKiAgICAgICAgICAgIGlzIHN0aWxsIGJlIHRyYW5zbWl0dGVkLgorICogQHR4X3Vua25vd25fcHJvdG9jb2w6IEluY3JlbWVudHMgd2hlbiB0aGUgVFBBIGVuY291bnRlcnMgYW4gdW5rbm93bgorICogICAgICAgICAgICBwcm90b2NvbCwgc3VjaCBhcyBhIG5ldyBJUHY2IGV4dGVuc2lvbiBoZWFkZXIsIG9yIGFuIHVuc3VwcG9ydGVkCisgKiAgICAgICAgICAgIFJvdXRpbmcgVHlwZS4gVGhlIHBhY2tldCBzdGlsbCBoYXMgYSBjaGVja3N1bSBjYWxjdWxhdGVkIGJ1dCBpdAorICogICAgICAgICAgICBtYXkgYmUgaW5jb3JyZWN0LgorICogQHR4X3BhdXNlX2N0cmxfZnJtczogQ291bnQgb2YgTUFDIFBBVVNFIGNvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIHRyYW5zbWl0dGVkLgorICogICAgICAgICAgICBTaW5jZSwgdGhlIG9ubHkgY29udHJvbCBmcmFtZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlIGFyZQorICogICAgICAgICAgICBQQVVTRSBmcmFtZXMsIHRoaXMgcmVnaXN0ZXIgaXMgYSBjb3VudCBvZiBhbGwgdHJhbnNtaXR0ZWQgTUFDCisgKiAgICAgICAgICAgIGNvbnRyb2wgZnJhbWVzLgorICogQHR4X21hcmtlcl9wZHVfZnJtczogQ291bnQgb2YgTWFya2VyIFBEVXMgdHJhbnNtaXR0ZWQKKyAqIG9uIHRoaXMgQWdncmVnYXRpb24gcG9ydC4KKyAqIEB0eF9sYWNwZHVfZnJtczogQ291bnQgb2YgTEFDUERVcyB0cmFuc21pdHRlZCBvbiB0aGlzIEFnZ3JlZ2F0aW9uIHBvcnQuCisgKiBAdHhfZHJvcF9pcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgSVAgZGF0YWdyYW1zIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZCB0bworICogICAgICAgICAgICB0aGUgbmV0d29yay4gSW5jcmVtZW50cyBiZWNhdXNlIG9mOgorICogICAgICAgICAgICAxKSBBbiBpbnRlcm5hbCBwcm9jZXNzaW5nIGVycm9yCisgKiAgICAgICAgICAgIChzdWNoIGFzIGFuIHVuY29ycmVjdGFibGUgRUNDIGVycm9yKS4gMikgQSBmcmFtZSBwYXJzaW5nIGVycm9yCisgKiAgICAgICAgICAgIGR1cmluZyBJUCBjaGVja3N1bSBjYWxjdWxhdGlvbi4KKyAqIEB0eF9tYXJrZXJfcmVzcF9wZHVfZnJtczogQ291bnQgb2YgTWFya2VyIFJlc3BvbnNlIFBEVXMgdHJhbnNtaXR0ZWQgb24gdGhpcworICogICAgICAgICAgICBBZ2dyZWdhdGlvbiBwb3J0LgorICogQHR4X3hnbWlpX2NoYXIyX21hdGNoOiBNYWludGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIFhHTUlJCisgKiAgICAgICAgICAgIGNoYXJhY3RlcnMgdGhhdCBtYXRjaCBhIHBhdHRlcm4gdGhhdCBpcyBwcm9ncmFtbWFibGUgdGhyb3VnaAorICogICAgICAgICAgICByZWdpc3RlciBYTUFDX1NUQVRTX1RYX1hHTUlJX0NIQVJfUE9SVG4uIEJ5IGRlZmF1bHQsIHRoZSBwYXR0ZXJuCisgKiAgICAgICAgICAgIGlzIHNldCB0byAvVC8gKGkuZS4gdGhlIHRlcm1pbmF0ZSBjaGFyYWN0ZXIpLCB0aHVzIHRoZSBzdGF0aXN0aWMKKyAqICAgICAgICAgICAgdHJhY2tzIHRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgVGVybWluYXRlIGNoYXJhY3RlcnMuCisgKiBAdHhfeGdtaWlfY2hhcjFfbWF0Y2g6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgWEdNSUkKKyAqICAgICAgICAgICAgY2hhcmFjdGVycyB0aGF0IG1hdGNoIGEgcGF0dGVybiB0aGF0IGlzIHByb2dyYW1tYWJsZSB0aHJvdWdoCisgKiAgICAgICAgICAgIHJlZ2lzdGVyIFhNQUNfU1RBVFNfVFhfWEdNSUlfQ0hBUl9QT1JUbi4gQnkgZGVmYXVsdCwgdGhlIHBhdHRlcm4KKyAqICAgICAgICAgICAgaXMgc2V0IHRvIC9TLyAoaS5lLiB0aGUgc3RhcnQgY2hhcmFjdGVyKSwKKyAqICAgICAgICAgICAgdGh1cyB0aGUgc3RhdGlzdGljIHRyYWNrcworICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIFN0YXJ0IGNoYXJhY3RlcnMuCisgKiBAdHhfeGdtaWlfY29sdW1uMl9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBYR01JSQorICogICAgICAgICAgICBjb2x1bW5zIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2ggcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19UWF9YR01JSV9DT0xVTU4yX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybiBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gNCB4IC9FLyAoaS5lLiBhIGNvbHVtbiBjb250YWluaW5nIGFsbCBlcnJvciBjaGFyYWN0ZXJzKSwgdGh1cworICogICAgICAgICAgICB0aGUgc3RhdGlzdGljIHRyYWNrcyB0aGUgbnVtYmVyIG9mIEVycm9yIGNvbHVtbnMgdHJhbnNtaXR0ZWQgYXQKKyAqICAgICAgICAgICAgYW55IHRpbWUuIElmIFhNQUNfU1RBVFNfVFhfWEdNSUlfQkVIQVZfQ09MVU1OMl9QT1JUbi5ORUFSX0NPTDEgaXMKKyAqICAgICAgICAgICAgc2V0IHRvIDEsIHRoZW4gdGhpcyBzdGF0IGluY3JlbWVudHMgd2hlbiBDT0xVTU4yIGlzIGZvdW5kIHdpdGhpbgorICogICAgICAgICAgICAnbicgY2xvY2tzIGFmdGVyIENPTFVNTjEuIEhlcmUsICduJyBpcyBkZWZpbmVkIGJ5CisgKiAgICAgICAgICAgIFhNQUNfU1RBVFNfVFhfWEdNSUlfQkVIQVZfQ09MVU1OMl9QT1JUbi5OVU1fQ09MIChpZiAnbicgaXMgc2V0CisgKiAgICAgICAgICAgIHRvIDAsIHRoZW4gaXQgbWVhbnMgdG8gc2VhcmNoIGFueXdoZXJlIGZvciBDT0xVTU4yKS4KKyAqIEB0eF94Z21paV9jb2x1bW4xX21hdGNoOiBNYWludGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIFhHTUlJCisgKiAgICAgICAgICAgIGNvbHVtbnMgdGhhdCBtYXRjaCBhIHBhdHRlcm4gdGhhdCBpcyBwcm9ncmFtbWFibGUgdGhyb3VnaCByZWdpc3RlcgorICogICAgICAgICAgICBYTUFDX1NUQVRTX1RYX1hHTUlJX0NPTFVNTjFfUE9SVG4uIEJ5IGRlZmF1bHQsIHRoZSBwYXR0ZXJuIGlzIHNldAorICogICAgICAgICAgICB0byA0IHggL0kvIChpLmUuIGEgY29sdW1uIGNvbnRhaW5pbmcgYWxsIGlkbGUgY2hhcmFjdGVycyksCisgKiAgICAgICAgICAgIHRodXMgdGhlIHN0YXRpc3RpYyB0cmFja3MgdGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBJZGxlIGNvbHVtbnMuCisgKiBAdHhfYW55X2Vycl9mcm1zOiBDb3VudCBvZiB0cmFuc21pdHRlZCBmcmFtZXMgY29udGFpbmluZyBhbnkgZXJyb3IgdGhhdAorICogICAgICAgICAgICBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgcGFzc2VkIHRvIHRoZSBuZXR3b3JrLiBJbmNyZW1lbnRzIGlmCisgKiAgICAgICAgICAgIHRoZXJlIGlzIGFuIEVDQyB3aGlsZSByZWFkaW5nIHRoZSBmcmFtZSBvdXQgb2YgdGhlIHRyYW5zbWl0CisgKiAgICAgICAgICAgIGJ1ZmZlci4gQWxzbyBpbmNyZW1lbnRzIGlmIHRoZSB0cmFuc21pdCBwcm90b2NvbCBhc3Npc3QgKFRQQSkKKyAqICAgICAgICAgICAgYmxvY2sgZGV0ZXJtaW5lcyB0aGF0IHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIHNlbnQuCisgKiBAdHhfZHJvcF9mcm1zOiBDb3VudCBvZiBmcmFtZXMgdGhhdCBjb3VsZCBub3QgYmUgc2VudCBmb3Igbm8gb3RoZXIgcmVhc29uCisgKiAgICAgICAgICAgIHRoYW4gaW50ZXJuYWwgTUFDIHByb2Nlc3NpbmcuIEluY3JlbWVudHMgb25jZSB3aGVuZXZlciB0aGUKKyAqICAgICAgICAgICAgdHJhbnNtaXQgYnVmZmVyIGlzIGZsdXNoZWQgKGR1ZSB0byBhbiBFQ0MgZXJyb3Igb24gYSBtZW1vcnkKKyAqICAgICAgICAgICAgZGVzY3JpcHRvcikuCisgKiBAcnhfdHRsX2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMsIGluY2x1ZGluZyBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLiBUaGlzIHN0YXQgY2FuIGJlCisgKiAgICAgICAgICAgIGNvbmZpZ3VyZWQgKHNlZSBYTUFDX1NUQVRTX0dMT0JBTF9DRkcuVFRMX0ZSTVNfSEFORExJTkcpIHRvIGNvdW50CisgKiAgICAgICAgICAgIGV2ZXJ5dGhpbmcsIGV2ZW4gImZyYW1lcyIgYXMgc21hbGwgb25lIGJ5dGUgb2YgcHJlYW1ibGUuCisgKiBAcnhfdmxkX2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBNQUMgZnJhbWVzLiBEb2VzIG5vdCBpbmNsdWRlCisgKiAgICAgICAgICAgIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfb2ZmbG9hZF9mcm1zOiBDb3VudCBvZiBvZmZsb2FkZWQgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIHBhc3NlZCB0bworICogICAgICAgICAgICB0aGUgaG9zdC4KKyAqIEByeF90dGxfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgcmVjZWl2ZWQgZnJhbWVzLCBub3QgaW5jbHVkaW5nCisgKiAgICAgICAgICAgIGZyYW1pbmcgY2hhcmFjdGVycyAoaS5lLiBsZXNzIGZyYW1pbmcgYml0cykuIFRvIGRldGVybWluZSB0aGUKKyAqICAgICAgICAgICAgdG90YWwgb2N0ZXRzIG9mIHJlY2VpdmVkIGZyYW1lcywgaW5jbHVkaW5nIGZyYW1pbmcgY2hhcmFjdGVycywKKyAqICAgICAgICAgICAgbXVsdGlwbHkgUE9SVG5fUlhfVFRMX0ZSTVMgYnkgOCBhbmQgYWRkIGl0IHRvIHRoaXMgc3RhdCAodW5sZXNzCisgKiAgICAgICAgICAgIG90aGVyd2lzZSBjb25maWd1cmVkLCB0aGlzIHN0YXQgb25seSBjb3VudHMgZnJhbWVzIHRoYXQgaGF2ZSA4CisgKiAgICAgICAgICAgIGJ5dGVzIG9mIHByZWFtYmxlIGZvciBlYWNoIGZyYW1lKS4gVGhpcyBzdGF0IGNhbiBiZSBjb25maWd1cmVkCisgKiAgICAgICAgICAgIChzZWUgWE1BQ19TVEFUU19HTE9CQUxfQ0ZHLlRUTF9GUk1TX0hBTkRMSU5HKSB0byBjb3VudCBldmVyeXRoaW5nLAorICogICAgICAgICAgICBldmVuIHRoZSBwcmVhbWJsZSBvY3RldHMgb2YgImZyYW1lcyIgYXMgc21hbGwgb25lIGJ5dGUgb2YgcHJlYW1ibGUKKyAqIEByeF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkCisgKiAgICAgICAgICAgIGZyYW1lcy4gRG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X29mZmxvYWRfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMsIG5vdCBpbmNsdWRpbmcgZnJhbWluZworICogICAgICAgICAgICBjaGFyYWN0ZXJzLCBvZiBvZmZsb2FkZWQgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIHBhc3NlZAorICogICAgICAgICAgICB0byB0aGUgaG9zdC4KKyAqIEByeF92bGRfbWNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE1BQyBmcmFtZXMgY29udGFpbmluZyBhCisgKgkgICAgICBub25icm9hZGNhc3QgZ3JvdXAgYWRkcmVzcy4gRG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3ZsZF9iY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcyBjb250YWluaW5nCisgKiAgICAgICAgICAgIHRoZSBicm9hZGNhc3QgZ3JvdXAgYWRkcmVzcy4gRG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X2FjY2VwdGVkX3VjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZworICogICAgICAgICAgICBhIHVuaWNhc3QgYWRkcmVzcy4gT25seSBpbmNsdWRlcyBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvCisgKiAgICAgICAgICAgIHRoZSBzeXN0ZW0uCisgKiBAcnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZworICogICAgICAgICAgICBhIG5vbi11bmljYXN0IChicm9hZGNhc3Qgb3IgbXVsdGljYXN0KSBhZGRyZXNzLiBPbmx5IGluY2x1ZGVzCisgKiAgICAgICAgICAgIGZyYW1lcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIHN5c3RlbS4gQ291bGQgaW5jbHVkZSwgZm9yIGluc3RhbmNlLAorICogICAgICAgICAgICBub24tdW5pY2FzdCBmcmFtZXMgdGhhdCBjb250YWluIEZDUyBlcnJvcnMgaWYgdGhlIE1BQ19FUlJPUl9DRkcKKyAqICAgICAgICAgICAgcmVnaXN0ZXIgaXMgc2V0IHRvIHBhc3MgRkNTLWVycm9yZWQgZnJhbWVzIHRvIHRoZSBob3N0LgorICogQHJ4X3RhZ2dlZF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZyBhIFZMQU4gdGFnLgorICogQHJ4X2xvbmdfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGxvbmdlciB0aGFuIFJYX01BWF9QWUxEX0xFTgorICogICAgICAgICAgICArIDE4IGJ5dGVzICgrIDIyIGJ5dGVzIGlmIFZMQU4tdGFnZ2VkKS4KKyAqIEByeF91c2l6ZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIG9mIGxlbmd0aCAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdAorICogICAgICAgICAgICBmcmFtaW5nIGJpdHMpIGxlc3MgdGhhbiA2NCBvY3RldHMsIHRoYXQgYXJlIG90aGVyd2lzZSB3ZWxsLWZvcm1lZC4KKyAqICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGNvdW50cyBydW50cy4KKyAqIEByeF9vc2l6ZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIG9mIGxlbmd0aCAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdAorICogICAgICAgICAgICBmcmFtaW5nIGJpdHMpIG1vcmUgdGhhbiAxNTE4IG9jdGV0cywgdGhhdCBhcmUgb3RoZXJ3aXNlCisgKiAgICAgICAgICAgIHdlbGwtZm9ybWVkLiBOb3RlOiBJZiByZWdpc3RlciBYTUFDX1NUQVRTX0dMT0JBTF9DRkcuVkxBTl9IQU5ETElORworICogICAgICAgICAgICBpcyBzZXQgdG8gMSwgdGhlbiAibW9yZSB0aGFuIDE1MTggb2N0ZXRzIiBiZWNvbWVzICJtb3JlIHRoYW4gMTUxOAorICogICAgICAgICAgICAoMTUyMiBpZiBWTEFOLXRhZ2dlZCkgb2N0ZXRzIi4KKyAqIEByeF9mcmFnX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBsZXNzIHRoYW4gNjQgb2N0ZXRzIHRoYXQgaGFkIGJhZCBGQ1MuIEluIG90aGVyCisgKiAgICAgICAgICAgIHdvcmRzLCBjb3VudHMgZnJhZ21lbnRzLgorICogQHJ4X2phYmJlcl9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgb2YgbGVuZ3RoIChpbmNsdWRpbmcgRkNTLCBidXQgbm90CisgKiAgICAgICAgICAgIGZyYW1pbmcgYml0cykgbW9yZSB0aGFuIDE1MTggb2N0ZXRzIHRoYXQgaGFkIGJhZCBGQ1MuIEluIG90aGVyCisgKiAgICAgICAgICAgIHdvcmRzLCBjb3VudHMgamFiYmVycy4gTm90ZTogSWYgcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19HTE9CQUxfQ0ZHLlZMQU5fSEFORExJTkcgaXMgc2V0IHRvIDEsIHRoZW4gIm1vcmUgdGhhbgorICogICAgICAgICAgICAxNTE4IG9jdGV0cyIgYmVjb21lcyAibW9yZSB0aGFuIDE1MTggKDE1MjIgaWYgVkxBTi10YWdnZWQpCisgKiAgICAgICAgICAgIG9jdGV0cyIuCisgKiBAcnhfdHRsXzY0X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGggKGluY2x1ZGluZworICogICAgICAgICAgICBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBleGFjdGx5IDY0IG9jdGV0cy4gSW5jbHVkZXMgZnJhbWVzCisgKiAgICAgICAgICAgIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfNjVfMTI3X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDY1IGFuZCAxMjcKKyAqICAgICAgICAgICAgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfMTI4XzI1NV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiAxMjggYW5kIDI1NQorICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8yNTZfNTExX2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDI1NiBhbmQgNTExCisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzUxMl8xMDIzX2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDUxMiBhbmQgMTAyMworICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8xMDI0XzE1MThfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gMTAyNCBhbmQgMTUxOAorICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8xNTE5XzQwOTVfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gMTUxOSBhbmQgNDA5NQorICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF80MDk2XzgxOTFfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gNDA5NiBhbmQgODE5MQorICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF84MTkyX21heF9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiA4MTkyIGFuZAorICogICAgICAgICAgICBSWF9NQVhfUFlMRF9MRU4rMTggb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkCisgKiAgICAgICAgICAgIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfZ3RfbWF4X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBleGNlZWRpbmcKKyAqICAgICAgICAgICAgUlhfTUFYX1BZTERfTEVOKzE4ICgrMjIgYnl0ZXMgaWYgVkxBTi10YWdnZWQpIG9jdGV0cyBpbmNsdXNpdmUuCisgKiAgICAgICAgICAgIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfaXA6IENvdW50IG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcy4gSW5jbHVkZXMgZXJyb3JlZCBJUCBkYXRhZ3JhbXMuCisgKiBAcnhfYWNjZXB0ZWRfaXA6IENvdW50IG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcyB0aGF0CisgKiAJCWFyZSBwYXNzZWQgdG8gdGhlIHN5c3RlbS4KKyAqIEByeF9pcF9vY3RldHM6IENvdW50IG9mIG51bWJlciBvZiBvY3RldHMgaW4gcmVjZWl2ZWQgSVAgZGF0YWdyYW1zLiBJbmNsdWRlcworICogICAgICAgICAgICBlcnJvcmVkIElQIGRhdGFncmFtcy4KKyAqIEByeF9lcnJfaXA6IAlDb3VudCBvZiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMgY29udGFpbmluZyBlcnJvcnMuIEZvciBleGFtcGxlLAorICogICAgICAgICAgICBiYWQgSVAgY2hlY2tzdW0uCisgKiBAcnhfaWNtcDogQ291bnQgb2YgcmVjZWl2ZWQgSUNNUCBtZXNzYWdlcy4gSW5jbHVkZXMgZXJyb3JlZCBJQ01QIG1lc3NhZ2VzLgorICogQHJ4X3RjcDogQ291bnQgb2YgcmVjZWl2ZWQgVENQIHNlZ21lbnRzLiBJbmNsdWRlcyBlcnJvcmVkIFRDUCBzZWdtZW50cy4KKyAqICAgICAgICAgICAgTm90ZTogVGhpcyBzdGF0IGNvbnRhaW5zIGEgY291bnQgb2YgYWxsIHJlY2VpdmVkIFRDUCBzZWdtZW50cywKKyAqICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGV5IHBlcnRhaW4gdG8gYW4gZXN0YWJsaXNoZWQKKyAqICAgICAgICAgICAgY29ubmVjdGlvbi4KKyAqIEByeF91ZHA6IENvdW50IG9mIHJlY2VpdmVkIFVEUCBkYXRhZ3JhbXMuCisgKiBAcnhfZXJyX3RjcDogQ291bnQgb2YgcmVjZWl2ZWQgVENQIHNlZ21lbnRzIGNvbnRhaW5pbmcgZXJyb3JzLiBGb3IgZXhhbXBsZSwKKyAqICAgICAgICAgICAgYmFkIFRDUCBjaGVja3N1bS4KKyAqIEByeF9wYXVzZV9jb3VudDogQ291bnQgb2YgbnVtYmVyIG9mIHBhdXNlIHF1YW50YSB0aGF0IHRoZSBNQUMgaGFzIGJlZW4gaW4KKyAqICAgICAgICAgICAgdGhlIHBhdXNlZCBzdGF0ZS4gUmVjYWxsLCBvbmUgcGF1c2UgcXVhbnR1bSBlcXVhdGVzIHRvIDUxMgorICogICAgICAgICAgICBiaXQgdGltZXMuCisgKiBAcnhfcGF1c2VfY3RybF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBNQUMgUEFVU0UgY29udHJvbCBmcmFtZXMuCisgKiBAcnhfdW5zdXBfY3RybF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBNQUMgY29udHJvbCBmcmFtZXMgdGhhdCBkbyBub3QKKyAqICAgICAgICAgICAgY29udGFpbiB0aGUgUEFVU0Ugb3Bjb2RlLiBUaGUgc3VtIG9mIFJYX1BBVVNFX0NUUkxfRlJNUyBhbmQKKyAqICAgICAgICAgICAgdGhpcyByZWdpc3RlciBpcyBhIGNvdW50IG9mIGFsbCByZWNlaXZlZCBNQUMgY29udHJvbCBmcmFtZXMuCisgKiAgICAgICAgICAgIE5vdGU6IFRoaXMgc3RhdCBtYXkgYmUgY29uZmlndXJlZCB0byBjb3VudCBhbGwgbGF5ZXIgMiBlcnJvcnMKKyAqICAgICAgICAgICAgKGkuZS4gbGVuZ3RoIGVycm9ycyBhbmQgRkNTIGVycm9ycykuCisgKiBAcnhfZmNzX2Vycl9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBNQUMgZnJhbWVzIHRoYXQgZG8gbm90IHBhc3MgRkNTLiBEb2VzCisgKiAgICAgICAgICAgIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nIG9yCisgKiAgICAgICAgICAgIGZyYW1lLXRvby1zaG9ydCBlcnJvci4KKyAqIEByeF9pbl9ybmdfbGVuX2Vycl9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgd2l0aCBhIGxlbmd0aC90eXBlIGZpZWxkCisgKiAgICAgICAgICAgIHZhbHVlIGJldHdlZW4gNDYgKDQyIGZvciBWTEFOLXRhZ2dlZCBmcmFtZXMpIGFuZCAxNTAwIChhbHNvIDE1MDAKKyAqICAgICAgICAgICAgZm9yIFZMQU4tdGFnZ2VkIGZyYW1lcyksIGluY2x1c2l2ZSwgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUKKyAqICAgICAgICAgICAgbnVtYmVyIG9mIGRhdGEgb2N0ZXRzIChpbmNsdWRpbmcgcGFkKSByZWNlaXZlZC4gQWxzbyBjb250YWlucworICogICAgICAgICAgICBhIGNvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB3aXRoIGEgbGVuZ3RoL3R5cGUgZmllbGQgbGVzcyB0aGFuCisgKiAgICAgICAgICAgIDQ2ICg0MiBmb3IgVkxBTi10YWdnZWQgZnJhbWVzKSBhbmQgdGhlIG51bWJlciBvZiBkYXRhIG9jdGV0cworICogICAgICAgICAgICAoaW5jbHVkaW5nIHBhZCkgcmVjZWl2ZWQgaXMgZ3JlYXRlciB0aGFuIDQ2ICg0MiBmb3IgVkxBTi10YWdnZWQKKyAqICAgICAgICAgICAgZnJhbWVzKS4KKyAqIEByeF9vdXRfcm5nX2xlbl9lcnJfZnJtczogIENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB3aXRoIGxlbmd0aC90eXBlIGZpZWxkCisgKiAgICAgICAgICAgIGJldHdlZW4gMTUwMSBhbmQgMTUzNSBkZWNpbWFsLCBpbmNsdXNpdmUuCisgKiBAcnhfZHJvcF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBjb3VsZCBub3QgYmUgcGFzc2VkIHRvIHRoZSBob3N0LgorICogICAgICAgICAgICBTZWUgUE9SVG5fUlhfTDJfTUdNVF9ESVNDQVJELCBQT1JUbl9SWF9SUEFfRElTQ0FSRCwKKyAqICAgICAgICAgICAgUE9SVG5fUlhfVFJBU0hfRElTQ0FSRCwgUE9SVG5fUlhfUlRTX0RJU0NBUkQsIFBPUlRuX1JYX1JFRF9ESVNDQVJECisgKiAgICAgICAgICAgIGZvciBhIGxpc3Qgb2YgcmVhc29ucy4gQmVjYXVzZSB0aGUgUk1BQyBkcm9wcyBvbmUgZnJhbWUgYXQgYSB0aW1lLAorICogICAgICAgICAgICB0aGlzIHN0YXQgYWxzbyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBkcm9wIGV2ZW50cy4KKyAqIEByeF9kaXNjYXJkZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIGNvbnRhaW5pbmcKKyAqIAkJYW55IGVycm9yIHRoYXQgcHJldmVudHMKKyAqICAgICAgICAgICAgdGhlbSBmcm9tIGJlaW5nIHBhc3NlZCB0byB0aGUgc3lzdGVtLiBTZWUgUE9SVG5fUlhfRkNTX0RJU0NBUkQsCisgKiAgICAgICAgICAgIFBPUlRuX1JYX0xFTl9ESVNDQVJELCBhbmQgUE9SVG5fUlhfU1dJVENIX0RJU0NBUkQgZm9yIGEgbGlzdCBvZgorICogICAgICAgICAgICByZWFzb25zLgorICogQHJ4X2Ryb3BfaXA6IENvdW50IG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcyB0aGF0IGNvdWxkIG5vdCBiZSBwYXNzZWQgdG8gdGhlCisgKiAgICAgICAgICAgIGhvc3QuIFNlZSBQT1JUbl9SWF9EUk9QX0ZSTVMgZm9yIGEgbGlzdCBvZiByZWFzb25zLgorICogQHJ4X2Ryb3BfdWRwOiBDb3VudCBvZiByZWNlaXZlZCBVRFAgZGF0YWdyYW1zIHRoYXQgYXJlIG5vdCBkZWxpdmVyZWQgdG8gdGhlCisgKiAgICAgICAgICAgIGhvc3QuIFNlZSBQT1JUbl9SWF9EUk9QX0ZSTVMgZm9yIGEgbGlzdCBvZiByZWFzb25zLgorICogQHJ4X21hcmtlcl9wZHVfZnJtczogQ291bnQgb2YgdmFsaWQgTWFya2VyIFBEVXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdGlvbgorICogICAgICAgICAgICBwb3J0LgorICogQHJ4X2xhY3BkdV9mcm1zOiBDb3VudCBvZiB2YWxpZCBMQUNQRFVzIHJlY2VpdmVkIG9uIHRoaXMgQWdncmVnYXRpb24gcG9ydC4KKyAqIEByeF91bmtub3duX3BkdV9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgKG9uIHRoaXMgQWdncmVnYXRpb24gcG9ydCkKKyAqICAgICAgICAgICAgdGhhdCBjYXJyeSB0aGUgU2xvdyBQcm90b2NvbHMgRXRoZXJUeXBlLCBidXQgY29udGFpbiBhbiB1bmtub3duCisgKiAgICAgICAgICAgIFBEVS4gT3IgZnJhbWVzIHRoYXQgY29udGFpbiB0aGUgU2xvdyBQcm90b2NvbHMgZ3JvdXAgTUFDIGFkZHJlc3MsCisgKiAgICAgICAgICAgIGJ1dCBkbyBub3QgY2FycnkgdGhlIFNsb3cgUHJvdG9jb2xzIEV0aGVyVHlwZS4KKyAqIEByeF9tYXJrZXJfcmVzcF9wZHVfZnJtczogQ291bnQgb2YgdmFsaWQgTWFya2VyIFJlc3BvbnNlIFBEVXMgcmVjZWl2ZWQgb24KKyAqICAgICAgICAgICAgdGhpcyBBZ2dyZWdhdGlvbiBwb3J0LgorICogQHJ4X2Zjc19kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2UgdGhlCisgKiAgICAgICAgICAgIEZDUyBjaGVjayBmYWlsZWQuCisgKiBAcnhfaWxsZWdhbF9wZHVfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIChvbiB0aGlzIEFnZ3JlZ2F0aW9uIHBvcnQpCisgKiAgICAgICAgICAgIHRoYXQgY2FycnkgdGhlIFNsb3cgUHJvdG9jb2xzIEV0aGVyVHlwZSwgYnV0IGNvbnRhaW4gYSBiYWRseQorICogICAgICAgICAgICBmb3JtZWQgUERVLiBPciBmcmFtZXMgdGhhdCBjYXJyeSB0aGUgU2xvdyBQcm90b2NvbHMgRXRoZXJUeXBlLAorICogICAgICAgICAgICBidXQgY29udGFpbiBhbiBpbGxlZ2FsIHZhbHVlIG9mIFByb3RvY29sIFN1YnR5cGUuCisgKiBAcnhfc3dpdGNoX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYnkgdGhlCisgKiAgICAgICAgICAgIGludGVybmFsIHN3aXRjaCBiZWNhdXNlIHRoZXkgZGlkIG5vdCBoYXZlIGFuIGVudHJ5IGluIHRoZQorICogICAgICAgICAgICBGaWx0ZXJpbmcgRGF0YWJhc2UuIFRoaXMgaW5jbHVkZXMgZnJhbWVzIHRoYXQgaGFkIGFuIGludmFsaWQKKyAqICAgICAgICAgICAgZGVzdGluYXRpb24gTUFDIGFkZHJlc3Mgb3IgVkxBTiBJRC4gSXQgYWxzbyBpbmNsdWRlcyBmcmFtZXMgYXJlCisgKiAgICAgICAgICAgIGRpc2NhcmRlZCBiZWNhdXNlIHRoZXkgZGlkIG5vdCBzYXRpc2Z5IHRoZSBsZW5ndGggcmVxdWlyZW1lbnRzCisgKiAgICAgICAgICAgIG9mIHRoZSB0YXJnZXQgVlBBVEguCisgKiBAcnhfbGVuX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVjYXVzZSBvZiBhbgorICogICAgICAgICAgICBpbnZhbGlkIGZyYW1lIGxlbmd0aCAoaW5jbHVkZXMgZnJhZ21lbnRzLCBvdmVyc2l6ZWQgZnJhbWVzIGFuZAorICogICAgICAgICAgICBtaXNtYXRjaCBiZXR3ZWVuIGZyYW1lIGxlbmd0aCBhbmQgbGVuZ3RoL3R5cGUgZmllbGQpLiBUaGlzIHN0YXQKKyAqICAgICAgICAgICAgY2FuIGJlIGNvbmZpZ3VyZWQKKyAqICAgICAgICAgICAgKHNlZSBYTUFDX1NUQVRTX0dMT0JBTF9DRkcuTEVOX0RJU0NBUkRfSEFORExJTkcpLgorICogQHJ4X3JwYV9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCB3ZXJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZQorICogICAgICAgICAgICByZWNlaXZlIHByb3RvY29sIGFzc2lzdCAoUlBBKSBkaXNjb3ZlcmVkIGFuZCBlcnJvciBpbiB0aGUgZnJhbWUKKyAqICAgICAgICAgICAgb3Igd2FzIHVuYWJsZSB0byBwYXJzZSB0aGUgZnJhbWUuCisgKiBAcnhfbDJfbWdtdF9kaXNjYXJkOiBDb3VudCBvZiBMYXllciAyIG1hbmFnZW1lbnQgZnJhbWVzIChlZy4gcGF1c2UgZnJhbWVzLAorICogICAgICAgICAgICBMaW5rIEFnZ3JlZ2F0aW9uIENvbnRyb2wgUHJvdG9jb2wgKExBQ1ApIGZyYW1lcywgZXRjLikgdGhhdCBhcmUKKyAqICAgICAgICAgICAgZGlzY2FyZGVkLgorICogQHJ4X3J0c19kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJ5IHRoZSByZWNlaXZlCisgKiAgICAgICAgICAgIHRyYWZmaWMgc3RlZXJpbmcgKFJUUykgbG9naWMuIEluY2x1ZGVzIHRob3NlIGZyYW1lIGRpc2NhcmRlZAorICogICAgICAgICAgICBiZWNhdXNlIHRoZSBTU0MgcmVzcG9uc2UgY29udHJhZGljdGVkIHRoZSBzd2l0Y2ggdGFibGUsIGJlY2F1c2UKKyAqICAgICAgICAgICAgdGhlIFNTQyB0aW1lZCBvdXQsIG9yIGJlY2F1c2UgdGhlIHRhcmdldCBxdWV1ZSBjb3VsZCBub3QgZml0IHRoZQorICogICAgICAgICAgICBmcmFtZS4KKyAqIEByeF90cmFzaF9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2UKKyAqICAgICAgICAgICAgcmVjZWl2ZSB0cmFmZmljIHN0ZWVyaW5nIChSVFMpIHN0ZWVyZWQgdGhlIGZyYW1lIHRvIHRoZSB0cmFzaAorICogICAgICAgICAgICBxdWV1ZS4KKyAqIEByeF9idWZmX2Z1bGxfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlCisgKiAgICAgICAgICAgIGludGVybmFsIGJ1ZmZlcnMgYXJlIGZ1bGwuIEluY2x1ZGVzIGZyYW1lcyBkaXNjYXJkZWQgYmVjYXVzZSB0aGUKKyAqICAgICAgICAgICAgUlRTIGxvZ2ljIGlzIHdhaXRpbmcgZm9yIGFuIFNTQyBsb29rdXAgdGhhdCBoYXMgbm8gdGltZW91dCBib3VuZC4KKyAqICAgICAgICAgICAgQWxzbywgaW5jbHVkZXMgZnJhbWVzIHRoYXQgYXJlIGRyb3BwZWQgYmVjYXVzZSB0aGUgTUFDMkZBVSBidWZmZXIKKyAqICAgICAgICAgICAgaXMgbmVhcmx5IGZ1bGwgLS0gdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBleHRlcm5hbCByZWNlaXZlIGJ1ZmZlcgorICogICAgICAgICAgICBpcyBmdWxsIGFuZCB0aGUgcmVjZWl2ZSBwYXRoIGlzIGJhY2tpbmcgdXAuCisgKiBAcnhfcmVkX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVjYXVzZSBvZiBSRUQKKyAqICAgICAgICAgICAgKFJhbmRvbSBFYXJseSBEaXNjYXJkKS4KKyAqIEByeF94Z21paV9jdHJsX2Vycl9jbnQ6IE1haW50YWlucyBhIGNvdW50IG9mIHVuZXhwZWN0ZWQgb3IgbWlzcGxhY2VkIGNvbnRyb2wKKyAqICAgICAgICAgICAgY2hhcmFjdGVycyBvY2N1cmluZyBiZXR3ZWVuIHRpbWVzIG9mIG5vcm1hbCBkYXRhIHRyYW5zbWlzc2lvbgorICogICAgICAgICAgICAoaS5lLiBub3QgaW5jbHVkZWQgaW4gUlhfWEdNSUlfREFUQV9FUlJfQ05UKS4gVGhpcyBjb3VudGVyIGlzCisgKiAgICAgICAgICAgIGluY3JlbWVudGVkIHdoZW4gZWl0aGVyIC0KKyAqICAgICAgICAgICAgMSkgVGhlIFJlY29uY2lsaWF0aW9uIFN1YmxheWVyIChSUykgaXMgZXhwZWN0aW5nIG9uZSBjb250cm9sCisgKiAgICAgICAgICAgICAgIGNoYXJhY3RlciBhbmQgZ2V0cyBhbm90aGVyIChpLmUuIGlzIGV4cGVjdGluZyBhIFN0YXJ0CisgKiAgICAgICAgICAgICAgIGNoYXJhY3RlciwgYnV0IGdldHMgYW5vdGhlciBjb250cm9sIGNoYXJhY3RlcikuCisgKiAgICAgICAgICAgIDIpIFN0YXJ0IGNvbnRyb2wgY2hhcmFjdGVyIGlzIG5vdCBpbiBsYW5lIDAKKyAqICAgICAgICAgICAgT25seSBpbmNyZW1lbnRzIHRoZSBjb3VudCBieSBvbmUgZm9yIGVhY2ggWEdNSUkgY29sdW1uLgorICogQHJ4X3hnbWlpX2RhdGFfZXJyX2NudDogTWFpbnRhaW5zIGEgY291bnQgb2YgdW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlcnMKKyAqICAgICAgICAgICAgZHVyaW5nIG5vcm1hbCBkYXRhIHRyYW5zbWlzc2lvbi4gSWYgdGhlIFJlY29uY2lsaWF0aW9uIFN1YmxheWVyCisgKiAgICAgICAgICAgIChSUykgcmVjZWl2ZXMgYSBjb250cm9sIGNoYXJhY3Rlciwgb3RoZXIgdGhhbiBhIHRlcm1pbmF0ZSBjb250cm9sCisgKiAgICAgICAgICAgIGNoYXJhY3RlciwgZHVyaW5nIHJlY2VpcHQgb2YgZGF0YSBvY3RldHMgdGhlbiB0aGlzIHJlZ2lzdGVyIGlzCisgKiAgICAgICAgICAgIGluY3JlbWVudGVkLiBBbHNvIGluY3JlbWVudHMgaWYgdGhlIHN0YXJ0IGZyYW1lIGRlbGltaXRlciBpcyBub3QKKyAqICAgICAgICAgICAgZm91bmQgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uIE9ubHkgaW5jcmVtZW50cyB0aGUgY291bnQgYnkgb25lCisgKiAgICAgICAgICAgIGZvciBlYWNoIFhHTUlJIGNvbHVtbi4KKyAqIEByeF94Z21paV9jaGFyMV9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBYR01JSSBjaGFyYWN0ZXJzCisgKiAgICAgICAgICAgIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2ggcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19SWF9YR01JSV9DSEFSX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybiBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gL0UvIChpLmUuIHRoZSBlcnJvciBjaGFyYWN0ZXIpLCB0aHVzIHRoZSBzdGF0aXN0aWMgdHJhY2tzIHRoZQorICogICAgICAgICAgICBudW1iZXIgb2YgRXJyb3IgY2hhcmFjdGVycyByZWNlaXZlZCBhdCBhbnkgdGltZS4KKyAqIEByeF94Z21paV9lcnJfc3ltOiBDb3VudCBvZiB0aGUgbnVtYmVyIG9mIHN5bWJvbCBlcnJvcnMgaW4gdGhlIHJlY2VpdmVkCisgKiAgICAgICAgICAgIFhHTUlJIGRhdGEgKGkuZS4gUEhZIGluZGljYXRlcyAiUmVjZWl2ZSBFcnJvciIgb24gdGhlIFhHTUlJKS4KKyAqICAgICAgICAgICAgT25seSBpbmNsdWRlcyBzeW1ib2wgZXJyb3JzIHRoYXQgYXJlIG9ic2VydmVkIGJldHdlZW4gdGhlIFhHTUlJCisgKiAgICAgICAgICAgIFN0YXJ0IEZyYW1lIERlbGltaXRlciBhbmQgRW5kIEZyYW1lIERlbGltaXRlciwgaW5jbHVzaXZlLiBBbmQKKyAqICAgICAgICAgICAgb25seSBpbmNyZW1lbnRzIHRoZSBjb3VudCBieSBvbmUgZm9yIGVhY2ggZnJhbWUuCisgKiBAcnhfeGdtaWlfY29sdW1uMV9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBYR01JSSBjb2x1bW5zCisgKiAgICAgICAgICAgIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2ggcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19SWF9YR01JSV9DT0xVTU4xX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybiBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gNCB4IC9FLyAoaS5lLiBhIGNvbHVtbiBjb250YWluaW5nIGFsbCBlcnJvciBjaGFyYWN0ZXJzKSwgdGh1cworICogICAgICAgICAgICB0aGUgc3RhdGlzdGljIHRyYWNrcyB0aGUgbnVtYmVyIG9mIEVycm9yIGNvbHVtbnMgcmVjZWl2ZWQgYXQgYW55CisgKiAgICAgICAgICAgIHRpbWUuCisgKiBAcnhfeGdtaWlfY2hhcjJfbWF0Y2g6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgWEdNSUkgY2hhcmFjdGVycworICogICAgICAgICAgICB0aGF0IG1hdGNoIGEgcGF0dGVybiB0aGF0IGlzIHByb2dyYW1tYWJsZSB0aHJvdWdoIHJlZ2lzdGVyCisgKiAgICAgICAgICAgIFhNQUNfU1RBVFNfUlhfWEdNSUlfQ0hBUl9QT1JUbi4gQnkgZGVmYXVsdCwgdGhlIHBhdHRlcm4gaXMgc2V0CisgKiAgICAgICAgICAgIHRvIC9FLyAoaS5lLiB0aGUgZXJyb3IgY2hhcmFjdGVyKSwgdGh1cyB0aGUgc3RhdGlzdGljIHRyYWNrcyB0aGUKKyAqICAgICAgICAgICAgbnVtYmVyIG9mIEVycm9yIGNoYXJhY3RlcnMgcmVjZWl2ZWQgYXQgYW55IHRpbWUuCisgKiBAcnhfbG9jYWxfZmF1bHQ6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBsaW5rCisgKiAgICAgICAgICAgIHRyYW5zaXRpb25lZCBmcm9tICJ1cCIgdG8gImRvd24iIGR1ZSB0byBhIGxvY2FsIGZhdWx0LgorICogQHJ4X3hnbWlpX2NvbHVtbjJfbWF0Y2g6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgWEdNSUkgY29sdW1ucworICogICAgICAgICAgICB0aGF0IG1hdGNoIGEgcGF0dGVybiB0aGF0IGlzIHByb2dyYW1tYWJsZSB0aHJvdWdoIHJlZ2lzdGVyCisgKiAgICAgICAgICAgIFhNQUNfU1RBVFNfUlhfWEdNSUlfQ09MVU1OMl9QT1JUbi4gQnkgZGVmYXVsdCwgdGhlIHBhdHRlcm4gaXMgc2V0CisgKiAgICAgICAgICAgIHRvIDQgeCAvRS8gKGkuZS4gYSBjb2x1bW4gY29udGFpbmluZyBhbGwgZXJyb3IgY2hhcmFjdGVycyksIHRodXMKKyAqICAgICAgICAgICAgdGhlIHN0YXRpc3RpYyB0cmFja3MgdGhlIG51bWJlciBvZiBFcnJvciBjb2x1bW5zIHJlY2VpdmVkIGF0IGFueQorICogICAgICAgICAgICB0aW1lLiBJZiBYTUFDX1NUQVRTX1JYX1hHTUlJX0JFSEFWX0NPTFVNTjJfUE9SVG4uTkVBUl9DT0wxIGlzIHNldAorICogICAgICAgICAgICB0byAxLCB0aGVuIHRoaXMgc3RhdCBpbmNyZW1lbnRzIHdoZW4gQ09MVU1OMiBpcyBmb3VuZCB3aXRoaW4gJ24nCisgKiAgICAgICAgICAgIGNsb2NrcyBhZnRlciBDT0xVTU4xLiBIZXJlLCAnbicgaXMgZGVmaW5lZCBieQorICogICAgICAgICAgICBYTUFDX1NUQVRTX1JYX1hHTUlJX0JFSEFWX0NPTFVNTjJfUE9SVG4uTlVNX0NPTCAoaWYgJ24nIGlzIHNldCB0bworICogICAgICAgICAgICAwLCB0aGVuIGl0IG1lYW5zIHRvIHNlYXJjaCBhbnl3aGVyZSBmb3IgQ09MVU1OMikuCisgKiBAcnhfamV0dGlzb246IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBqZXR0aXNvbmVkIGJlY2F1c2UgaW50ZXJuYWwKKyAqICAgICAgICAgICAgYnVmZmVycyBhcmUgZnVsbC4KKyAqIEByeF9yZW1vdGVfZmF1bHQ6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBsaW5rCisgKiAgICAgICAgICAgIHRyYW5zaXRpb25lZCBmcm9tICJ1cCIgdG8gImRvd24iIGR1ZSB0byBhIHJlbW90ZSBmYXVsdC4KKyAqCisgKiBYTUFDIFBvcnQgU3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzIHsKKy8qMHgwMDAqLwkJdTY0CXR4X3R0bF9mcm1zOworLyoweDAwOCovCQl1NjQJdHhfdHRsX29jdGV0czsKKy8qMHgwMTAqLwkJdTY0CXR4X2RhdGFfb2N0ZXRzOworLyoweDAxOCovCQl1NjQJdHhfbWNhc3RfZnJtczsKKy8qMHgwMjAqLwkJdTY0CXR4X2JjYXN0X2ZybXM7CisvKjB4MDI4Ki8JCXU2NAl0eF91Y2FzdF9mcm1zOworLyoweDAzMCovCQl1NjQJdHhfdGFnZ2VkX2ZybXM7CisvKjB4MDM4Ki8JCXU2NAl0eF92bGRfaXA7CisvKjB4MDQwKi8JCXU2NAl0eF92bGRfaXBfb2N0ZXRzOworLyoweDA0OCovCQl1NjQJdHhfaWNtcDsKKy8qMHgwNTAqLwkJdTY0CXR4X3RjcDsKKy8qMHgwNTgqLwkJdTY0CXR4X3JzdF90Y3A7CisvKjB4MDYwKi8JCXU2NAl0eF91ZHA7CisvKjB4MDY4Ki8JCXUzMgl0eF9wYXJzZV9lcnJvcjsKKy8qMHgwNmMqLwkJdTMyCXR4X3Vua25vd25fcHJvdG9jb2w7CisvKjB4MDcwKi8JCXU2NAl0eF9wYXVzZV9jdHJsX2ZybXM7CisvKjB4MDc4Ki8JCXUzMgl0eF9tYXJrZXJfcGR1X2ZybXM7CisvKjB4MDdjKi8JCXUzMgl0eF9sYWNwZHVfZnJtczsKKy8qMHgwODAqLwkJdTMyCXR4X2Ryb3BfaXA7CisvKjB4MDg0Ki8JCXUzMgl0eF9tYXJrZXJfcmVzcF9wZHVfZnJtczsKKy8qMHgwODgqLwkJdTMyCXR4X3hnbWlpX2NoYXIyX21hdGNoOworLyoweDA4YyovCQl1MzIJdHhfeGdtaWlfY2hhcjFfbWF0Y2g7CisvKjB4MDkwKi8JCXUzMgl0eF94Z21paV9jb2x1bW4yX21hdGNoOworLyoweDA5NCovCQl1MzIJdHhfeGdtaWlfY29sdW1uMV9tYXRjaDsKKy8qMHgwOTgqLwkJdTMyCXVudXNlZDE7CisvKjB4MDljKi8JCXUxNgl0eF9hbnlfZXJyX2ZybXM7CisvKjB4MDllKi8JCXUxNgl0eF9kcm9wX2ZybXM7CisvKjB4MGEwKi8JCXU2NAlyeF90dGxfZnJtczsKKy8qMHgwYTgqLwkJdTY0CXJ4X3ZsZF9mcm1zOworLyoweDBiMCovCQl1NjQJcnhfb2ZmbG9hZF9mcm1zOworLyoweDBiOCovCQl1NjQJcnhfdHRsX29jdGV0czsKKy8qMHgwYzAqLwkJdTY0CXJ4X2RhdGFfb2N0ZXRzOworLyoweDBjOCovCQl1NjQJcnhfb2ZmbG9hZF9vY3RldHM7CisvKjB4MGQwKi8JCXU2NAlyeF92bGRfbWNhc3RfZnJtczsKKy8qMHgwZDgqLwkJdTY0CXJ4X3ZsZF9iY2FzdF9mcm1zOworLyoweDBlMCovCQl1NjQJcnhfYWNjZXB0ZWRfdWNhc3RfZnJtczsKKy8qMHgwZTgqLwkJdTY0CXJ4X2FjY2VwdGVkX251Y2FzdF9mcm1zOworLyoweDBmMCovCQl1NjQJcnhfdGFnZ2VkX2ZybXM7CisvKjB4MGY4Ki8JCXU2NAlyeF9sb25nX2ZybXM7CisvKjB4MTAwKi8JCXU2NAlyeF91c2l6ZWRfZnJtczsKKy8qMHgxMDgqLwkJdTY0CXJ4X29zaXplZF9mcm1zOworLyoweDExMCovCQl1NjQJcnhfZnJhZ19mcm1zOworLyoweDExOCovCQl1NjQJcnhfamFiYmVyX2ZybXM7CisvKjB4MTIwKi8JCXU2NAlyeF90dGxfNjRfZnJtczsKKy8qMHgxMjgqLwkJdTY0CXJ4X3R0bF82NV8xMjdfZnJtczsKKy8qMHgxMzAqLwkJdTY0CXJ4X3R0bF8xMjhfMjU1X2ZybXM7CisvKjB4MTM4Ki8JCXU2NAlyeF90dGxfMjU2XzUxMV9mcm1zOworLyoweDE0MCovCQl1NjQJcnhfdHRsXzUxMl8xMDIzX2ZybXM7CisvKjB4MTQ4Ki8JCXU2NAlyeF90dGxfMTAyNF8xNTE4X2ZybXM7CisvKjB4MTUwKi8JCXU2NAlyeF90dGxfMTUxOV80MDk1X2ZybXM7CisvKjB4MTU4Ki8JCXU2NAlyeF90dGxfNDA5Nl84MTkxX2ZybXM7CisvKjB4MTYwKi8JCXU2NAlyeF90dGxfODE5Ml9tYXhfZnJtczsKKy8qMHgxNjgqLwkJdTY0CXJ4X3R0bF9ndF9tYXhfZnJtczsKKy8qMHgxNzAqLwkJdTY0CXJ4X2lwOworLyoweDE3OCovCQl1NjQJcnhfYWNjZXB0ZWRfaXA7CisvKjB4MTgwKi8JCXU2NAlyeF9pcF9vY3RldHM7CisvKjB4MTg4Ki8JCXU2NAlyeF9lcnJfaXA7CisvKjB4MTkwKi8JCXU2NAlyeF9pY21wOworLyoweDE5OCovCQl1NjQJcnhfdGNwOworLyoweDFhMCovCQl1NjQJcnhfdWRwOworLyoweDFhOCovCQl1NjQJcnhfZXJyX3RjcDsKKy8qMHgxYjAqLwkJdTY0CXJ4X3BhdXNlX2NvdW50OworLyoweDFiOCovCQl1NjQJcnhfcGF1c2VfY3RybF9mcm1zOworLyoweDFjMCovCQl1NjQJcnhfdW5zdXBfY3RybF9mcm1zOworLyoweDFjOCovCQl1NjQJcnhfZmNzX2Vycl9mcm1zOworLyoweDFkMCovCQl1NjQJcnhfaW5fcm5nX2xlbl9lcnJfZnJtczsKKy8qMHgxZDgqLwkJdTY0CXJ4X291dF9ybmdfbGVuX2Vycl9mcm1zOworLyoweDFlMCovCQl1NjQJcnhfZHJvcF9mcm1zOworLyoweDFlOCovCQl1NjQJcnhfZGlzY2FyZGVkX2ZybXM7CisvKjB4MWYwKi8JCXU2NAlyeF9kcm9wX2lwOworLyoweDFmOCovCQl1NjQJcnhfZHJvcF91ZHA7CisvKjB4MjAwKi8JCXUzMglyeF9tYXJrZXJfcGR1X2ZybXM7CisvKjB4MjA0Ki8JCXUzMglyeF9sYWNwZHVfZnJtczsKKy8qMHgyMDgqLwkJdTMyCXJ4X3Vua25vd25fcGR1X2ZybXM7CisvKjB4MjBjKi8JCXUzMglyeF9tYXJrZXJfcmVzcF9wZHVfZnJtczsKKy8qMHgyMTAqLwkJdTMyCXJ4X2Zjc19kaXNjYXJkOworLyoweDIxNCovCQl1MzIJcnhfaWxsZWdhbF9wZHVfZnJtczsKKy8qMHgyMTgqLwkJdTMyCXJ4X3N3aXRjaF9kaXNjYXJkOworLyoweDIxYyovCQl1MzIJcnhfbGVuX2Rpc2NhcmQ7CisvKjB4MjIwKi8JCXUzMglyeF9ycGFfZGlzY2FyZDsKKy8qMHgyMjQqLwkJdTMyCXJ4X2wyX21nbXRfZGlzY2FyZDsKKy8qMHgyMjgqLwkJdTMyCXJ4X3J0c19kaXNjYXJkOworLyoweDIyYyovCQl1MzIJcnhfdHJhc2hfZGlzY2FyZDsKKy8qMHgyMzAqLwkJdTMyCXJ4X2J1ZmZfZnVsbF9kaXNjYXJkOworLyoweDIzNCovCQl1MzIJcnhfcmVkX2Rpc2NhcmQ7CisvKjB4MjM4Ki8JCXUzMglyeF94Z21paV9jdHJsX2Vycl9jbnQ7CisvKjB4MjNjKi8JCXUzMglyeF94Z21paV9kYXRhX2Vycl9jbnQ7CisvKjB4MjQwKi8JCXUzMglyeF94Z21paV9jaGFyMV9tYXRjaDsKKy8qMHgyNDQqLwkJdTMyCXJ4X3hnbWlpX2Vycl9zeW07CisvKjB4MjQ4Ki8JCXUzMglyeF94Z21paV9jb2x1bW4xX21hdGNoOworLyoweDI0YyovCQl1MzIJcnhfeGdtaWlfY2hhcjJfbWF0Y2g7CisvKjB4MjUwKi8JCXUzMglyeF9sb2NhbF9mYXVsdDsKKy8qMHgyNTQqLwkJdTMyCXJ4X3hnbWlpX2NvbHVtbjJfbWF0Y2g7CisvKjB4MjU4Ki8JCXUzMglyeF9qZXR0aXNvbjsKKy8qMHgyNWMqLwkJdTMyCXJ4X3JlbW90ZV9mYXVsdDsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyAtIFhNQUMgVnBhdGggVHggU3RhdGlzdGljcworICoKKyAqIEB0eF90dGxfZXRoX2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBNQUMgZnJhbWVzLgorICogQHR4X3R0bF9ldGhfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzLAorICogICAgICAgICAgICAgbm90IGluY2x1ZGluZyBmcmFtaW5nIGNoYXJhY3RlcnMgKGkuZS4gbGVzcyBmcmFtaW5nIGJpdHMpLgorICogICAgICAgICAgICAgVG8gZGV0ZXJtaW5lIHRoZSB0b3RhbCBvY3RldHMgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzLCBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgIGZyYW1pbmcgY2hhcmFjdGVycywgbXVsdGlwbHkgVFhfVFRMX0VUSF9GUk1TIGJ5IDggYW5kIGFkZCBpdCB0bworICogICAgICAgICAgICAgdGhpcyBzdGF0ICh0aGUgZGV2aWNlIGFsd2F5cyBwcmVwZW5kcyA4IGJ5dGVzIG9mIHByZWFtYmxlIGZvcgorICogICAgICAgICAgICAgZWFjaCBmcmFtZSkKKyAqIEB0eF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkCisgKiAgICAgICAgICAgICBmcmFtZXMuCisgKiBAdHhfbWNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkIGZyYW1lcyB0byBhIGdyb3VwIGFkZHJlc3MKKyAqICAgICAgICAgICAgIG90aGVyIHRoYW4gdGhlIGJyb2FkY2FzdCBhZGRyZXNzLgorICogQHR4X2JjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBmcmFtZXMgdG8gdGhlIGJyb2FkY2FzdAorICogICAgICAgICAgICAgZ3JvdXAgYWRkcmVzcy4KKyAqIEB0eF91Y2FzdF9mcm1zOiBDb3VudCBvZiB0cmFuc21pdHRlZCBmcmFtZXMgY29udGFpbmluZyBhIHVuaWNhc3QgYWRkcmVzcy4KKyAqICAgICAgICAgICAgIEluY2x1ZGVzIGRpc2NhcmRlZCBmcmFtZXMgdGhhdCBhcmUgbm90IHNlbnQgdG8gdGhlIG5ldHdvcmsuCisgKiBAdHhfdGFnZ2VkX2ZybXM6IENvdW50IG9mIHRyYW5zbWl0dGVkIGZyYW1lcyBjb250YWluaW5nIGEgVkxBTiB0YWcuCisgKiBAdHhfdmxkX2lwOiBDb3VudCBvZiB0cmFuc21pdHRlZCBJUCBkYXRhZ3JhbXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBuZXR3b3JrLgorICogQHR4X3ZsZF9pcF9vY3RldHM6IENvdW50IG9mIHRvdGFsIG9jdGV0cyBvZiB0cmFuc21pdHRlZCBJUCBkYXRhZ3JhbXMgdGhhdAorICogICAgICAgICAgICBhcmUgcGFzc2VkIHRvIHRoZSBuZXR3b3JrLgorICogQHR4X2ljbXA6IENvdW50IG9mIHRyYW5zbWl0dGVkIElDTVAgbWVzc2FnZXMuIEluY2x1ZGVzIG1lc3NhZ2VzIG5vdCBzZW50IGR1ZQorICogICAgICAgICAgICB0byBwcm9ibGVtcyB3aXRoaW4gSUNNUC4KKyAqIEB0eF90Y3A6IENvdW50IG9mIHRyYW5zbWl0dGVkIFRDUCBzZWdtZW50cy4gRG9lcyBub3QgaW5jbHVkZSBzZWdtZW50cworICogICAgICAgICAgICBjb250YWluaW5nIHJldHJhbnNtaXR0ZWQgb2N0ZXRzLgorICogQHR4X3JzdF90Y3A6IENvdW50IG9mIHRyYW5zbWl0dGVkIFRDUCBzZWdtZW50cyBjb250YWluaW5nIHRoZSBSU1QgZmxhZy4KKyAqIEB0eF91ZHA6IENvdW50IG9mIHRyYW5zbWl0dGVkIFVEUCBkYXRhZ3JhbXMuCisgKiBAdHhfdW5rbm93bl9wcm90b2NvbDogSW5jcmVtZW50cyB3aGVuIHRoZSBUUEEgZW5jb3VudGVycyBhbiB1bmtub3duIHByb3RvY29sLAorICogICAgICAgICAgICBzdWNoIGFzIGEgbmV3IElQdjYgZXh0ZW5zaW9uIGhlYWRlciwgb3IgYW4gdW5zdXBwb3J0ZWQgUm91dGluZworICogICAgICAgICAgICBUeXBlLiBUaGUgcGFja2V0IHN0aWxsIGhhcyBhIGNoZWNrc3VtIGNhbGN1bGF0ZWQgYnV0IGl0IG1heSBiZQorICogICAgICAgICAgICBpbmNvcnJlY3QuCisgKiBAdHhfbG9zdF9pcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgSVAgZGF0YWdyYW1zIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZAorICogICAgICAgICAgICB0byB0aGUgbmV0d29yay4gSW5jcmVtZW50cyBiZWNhdXNlIG9mOiAxKSBBbiBpbnRlcm5hbCBwcm9jZXNzaW5nCisgKiAgICAgICAgICAgIGVycm9yIChzdWNoIGFzIGFuIHVuY29ycmVjdGFibGUgRUNDIGVycm9yKS4gMikgQSBmcmFtZSBwYXJzaW5nCisgKiAgICAgICAgICAgIGVycm9yIGR1cmluZyBJUCBjaGVja3N1bSBjYWxjdWxhdGlvbi4KKyAqIEB0eF9wYXJzZV9lcnJvcjogSW5jcmVtZW50cyB3aGVuIHRoZSBUUEEgaXMgdW5hYmxlIHRvIHBhcnNlIGEgcGFja2V0LiBUaGlzCisgKiAgICAgICAgICAgIGdlbmVyYWxseSBvY2N1cnMgd2hlbiBhIHBhY2tldCBpcyBjb3JydXB0IHNvbWVob3csIGluY2x1ZGluZworICogICAgICAgICAgICBwYWNrZXRzIHRoYXQgaGF2ZSBJUCB2ZXJzaW9uIG1pc21hdGNoZXMsIGludmFsaWQgTGF5ZXIgMiBjb250cm9sCisgKiAgICAgICAgICAgIGZpZWxkcywgZXRjLiBMMy9MNCBjaGVja3N1bXMgYXJlIG5vdCBvZmZsb2FkZWQsIGJ1dCB0aGUgcGFja2V0CisgKiAgICAgICAgICAgIGlzIHN0aWxsIGJlIHRyYW5zbWl0dGVkLgorICogQHR4X3RjcF9vZmZsb2FkOiBGb3IgZnJhbWVzIGJlbG9uZ2luZyB0byBvZmZsb2FkZWQgc2Vzc2lvbnMgb25seSwgYSBjb3VudAorICogICAgICAgICAgICBvZiB0cmFuc21pdHRlZCBUQ1Agc2VnbWVudHMuIERvZXMgbm90IGluY2x1ZGUgc2VnbWVudHMgY29udGFpbmluZworICogICAgICAgICAgICByZXRyYW5zbWl0dGVkIG9jdGV0cy4KKyAqIEB0eF9yZXR4X3RjcF9vZmZsb2FkOiBGb3IgZnJhbWVzIGJlbG9uZ2luZyB0byBvZmZsb2FkZWQgc2Vzc2lvbnMgb25seSwgdGhlCisgKiAgICAgICAgICAgIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cyByZXRyYW5zbWl0dGVkLiBSZXRyYW5zbWl0dGVkIHNlZ21lbnRzCisgKiAgICAgICAgICAgIHRoYXQgYXJlIHNvdXJjZWQgYnkgdGhlIGhvc3QgYXJlIGNvdW50ZWQgYnkgdGhlIGhvc3QuCisgKiBAdHhfbG9zdF9pcF9vZmZsb2FkOiBGb3IgZnJhbWVzIGJlbG9uZ2luZyB0byBvZmZsb2FkZWQgc2Vzc2lvbnMgb25seSwgYSBjb3VudAorICogICAgICAgICAgICBvZiB0cmFuc21pdHRlZCBJUCBkYXRhZ3JhbXMgdGhhdCBjb3VsZCBub3QgYmUgcGFzc2VkIHRvIHRoZQorICogICAgICAgICAgICBuZXR3b3JrLgorICoKKyAqIFhNQUMgVnBhdGggVFggU3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyB7CisJdTY0CXR4X3R0bF9ldGhfZnJtczsKKwl1NjQJdHhfdHRsX2V0aF9vY3RldHM7CisJdTY0CXR4X2RhdGFfb2N0ZXRzOworCXU2NAl0eF9tY2FzdF9mcm1zOworCXU2NAl0eF9iY2FzdF9mcm1zOworCXU2NAl0eF91Y2FzdF9mcm1zOworCXU2NAl0eF90YWdnZWRfZnJtczsKKwl1NjQJdHhfdmxkX2lwOworCXU2NAl0eF92bGRfaXBfb2N0ZXRzOworCXU2NAl0eF9pY21wOworCXU2NAl0eF90Y3A7CisJdTY0CXR4X3JzdF90Y3A7CisJdTY0CXR4X3VkcDsKKwl1MzIJdHhfdW5rbm93bl9wcm90b2NvbDsKKwl1MzIJdHhfbG9zdF9pcDsKKwl1MzIJdW51c2VkMTsKKwl1MzIJdHhfcGFyc2VfZXJyb3I7CisJdTY0CXR4X3RjcF9vZmZsb2FkOworCXU2NAl0eF9yZXR4X3RjcF9vZmZsb2FkOworCXU2NAl0eF9sb3N0X2lwX29mZmxvYWQ7Cit9IF9fcGFja2VkOworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgLSBYTUFDIFZwYXRoIFJYIFN0YXRpc3RpY3MKKyAqCisgKiBAcnhfdHRsX2V0aF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcy4KKyAqIEByeF92bGRfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE1BQyBmcmFtZXMuIERvZXMgbm90IGluY2x1ZGUKKyAqICAgICAgICAgICAgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9vZmZsb2FkX2ZybXM6IENvdW50IG9mIG9mZmxvYWRlZCByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvCisgKiAgICAgICAgICAgIHRoZSBob3N0LgorICogQHJ4X3R0bF9ldGhfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgcmVjZWl2ZWQgZnJhbWVzLCBub3QgaW5jbHVkaW5nCisgKiAgICAgICAgICAgIGZyYW1pbmcgY2hhcmFjdGVycyAoaS5lLiBsZXNzIGZyYW1pbmcgYml0cykuIE9ubHkgY291bnRzIG9jdGV0cworICogICAgICAgICAgICBvZiBmcmFtZXMgdGhhdCBhcmUgYXQgbGVhc3QgMTQgYnl0ZXMgKDE4IGJ5dGVzIGZvciBWTEFOLXRhZ2dlZCkKKyAqICAgICAgICAgICAgYmVmb3JlIEZDUy4gVG8gZGV0ZXJtaW5lIHRoZSB0b3RhbCBvY3RldHMgb2YgcmVjZWl2ZWQgZnJhbWVzLAorICogICAgICAgICAgICBpbmNsdWRpbmcgZnJhbWluZyBjaGFyYWN0ZXJzLCBtdWx0aXBseSBSWF9UVExfRVRIX0ZSTVMgYnkgOCBhbmQKKyAqICAgICAgICAgICAgYWRkIGl0IHRvIHRoaXMgc3RhdCAodGhlIHN0YXQgUlhfVFRMX0VUSF9GUk1TIG9ubHkgY291bnRzIGZyYW1lcworICogICAgICAgICAgICB0aGF0IGhhdmUgdGhlIHJlcXVpcmVkIDggYnl0ZXMgb2YgcHJlYW1ibGUpLgorICogQHJ4X2RhdGFfb2N0ZXRzOiBDb3VudCBvZiBkYXRhIGFuZCBwYWRkaW5nIG9jdGV0cyBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgZnJhbWVzLiBEb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfb2ZmbG9hZF9vY3RldHM6IENvdW50IG9mIHRvdGFsIG9jdGV0cywgbm90IGluY2x1ZGluZyBmcmFtaW5nIGNoYXJhY3RlcnMsCisgKiAgICAgICAgICAgIG9mIG9mZmxvYWRlZCByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBob3N0LgorICogQHJ4X3ZsZF9tY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcyBjb250YWluaW5nIGEKKyAqICAgICAgICAgICAgbm9uYnJvYWRjYXN0IGdyb3VwIGFkZHJlc3MuIERvZXMgbm90IGluY2x1ZGUgZnJhbWVzIHJlY2VpdmVkIHdpdGgKKyAqICAgICAgICAgICAgZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF92bGRfYmNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE1BQyBmcmFtZXMgY29udGFpbmluZyB0aGUKKyAqICAgICAgICAgICAgYnJvYWRjYXN0IGdyb3VwIGFkZHJlc3MuIERvZXMgbm90IGluY2x1ZGUgZnJhbWVzIHJlY2VpdmVkIHdpdGgKKyAqICAgICAgICAgICAgZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9hY2NlcHRlZF91Y2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZnJhbWVzIGNvbnRhaW5pbmcKKyAqICAgICAgICAgICAgYSB1bmljYXN0IGFkZHJlc3MuIE9ubHkgaW5jbHVkZXMgZnJhbWVzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUKKyAqICAgICAgICAgICAgc3lzdGVtLgorICogQHJ4X2FjY2VwdGVkX251Y2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZnJhbWVzIGNvbnRhaW5pbmcKKyAqICAgICAgICAgICAgYSBub24tdW5pY2FzdCAoYnJvYWRjYXN0IG9yIG11bHRpY2FzdCkgYWRkcmVzcy4gT25seSBpbmNsdWRlcworICogICAgICAgICAgICBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBzeXN0ZW0uIENvdWxkIGluY2x1ZGUsIGZvciBpbnN0YW5jZSwKKyAqICAgICAgICAgICAgbm9uLXVuaWNhc3QgZnJhbWVzIHRoYXQgY29udGFpbiBGQ1MgZXJyb3JzIGlmIHRoZSBNQUNfRVJST1JfQ0ZHCisgKiAgICAgICAgICAgIHJlZ2lzdGVyIGlzIHNldCB0byBwYXNzIEZDUy1lcnJvcmVkIGZyYW1lcyB0byB0aGUgaG9zdC4KKyAqIEByeF90YWdnZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIGNvbnRhaW5pbmcgYSBWTEFOIHRhZy4KKyAqIEByeF9sb25nX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBsb25nZXIgdGhhbiBSWF9NQVhfUFlMRF9MRU4KKyAqICAgICAgICAgICAgKyAxOCBieXRlcyAoKyAyMiBieXRlcyBpZiBWTEFOLXRhZ2dlZCkuCisgKiBAcnhfdXNpemVkX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBsZXNzIHRoYW4gNjQgb2N0ZXRzLCB0aGF0IGFyZSBvdGhlcndpc2Ugd2VsbC1mb3JtZWQuCisgKiAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBjb3VudHMgcnVudHMuCisgKiBAcnhfb3NpemVkX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBtb3JlIHRoYW4gMTUxOCBvY3RldHMsIHRoYXQgYXJlIG90aGVyd2lzZQorICogICAgICAgICAgICB3ZWxsLWZvcm1lZC4KKyAqIEByeF9mcmFnX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBsZXNzIHRoYW4gNjQgb2N0ZXRzIHRoYXQgaGFkIGJhZCBGQ1MuCisgKiAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBjb3VudHMgZnJhZ21lbnRzLgorICogQHJ4X2phYmJlcl9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgb2YgbGVuZ3RoIChpbmNsdWRpbmcgRkNTLCBidXQgbm90CisgKiAgICAgICAgICAgIGZyYW1pbmcgYml0cykgbW9yZSB0aGFuIDE1MTggb2N0ZXRzIHRoYXQgaGFkIGJhZCBGQ1MuIEluIG90aGVyCisgKiAgICAgICAgICAgIHdvcmRzLCBjb3VudHMgamFiYmVycy4KKyAqIEByeF90dGxfNjRfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aCAoaW5jbHVkaW5nCisgKiAgICAgICAgICAgIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGV4YWN0bHkgNjQgb2N0ZXRzLiBJbmNsdWRlcyBmcmFtZXMKKyAqICAgICAgICAgICAgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF82NV8xMjdfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcworICogCQl3aXRoIGxlbmd0aCAoaW5jbHVkaW5nCisgKiAgICAgICAgICAgIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gNjUgYW5kIDEyNyBvY3RldHMgaW5jbHVzaXZlLgorICogICAgICAgICAgICBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLAorICogICAgICAgICAgICBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8xMjhfMjU1X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKQorICogICAgICAgICAgICBvZiBiZXR3ZWVuIDEyOCBhbmQgMjU1IG9jdGV0cworICogICAgICAgICAgICBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsCisgKiAgICAgICAgICAgIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzI1Nl81MTFfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpCisgKiAgICAgICAgICAgIG9mIGJldHdlZW4gMjU2IGFuZCA1MTEgb2N0ZXRzCisgKiAgICAgICAgICAgIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IKKyAqICAgICAgICAgICAgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfNTEyXzEwMjNfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gNTEyIGFuZCAxMDIzCisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzEwMjRfMTUxOF9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiAxMDI0IGFuZCAxNTE4CisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzE1MTlfNDA5NV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiAxNTE5IGFuZCA0MDk1CisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzQwOTZfODE5MV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiA0MDk2IGFuZCA4MTkxCisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzgxOTJfbWF4X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDgxOTIgYW5kCisgKiAgICAgICAgICAgIFJYX01BWF9QWUxEX0xFTisxOCBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF9ndF9tYXhfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIGV4Y2VlZGluZyBSWF9NQVhfUFlMRF9MRU4rMTgKKyAqICAgICAgICAgICAgKCsyMiBieXRlcyBpZiBWTEFOLXRhZ2dlZCkgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzCisgKiAgICAgICAgICAgIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zLiBJbmNsdWRlcyBlcnJvcmVkIElQIGRhdGFncmFtcy4KKyAqIEByeF9hY2NlcHRlZF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIHRoYXQKKyAqIAkJYXJlIHBhc3NlZCB0byB0aGUgc3lzdGVtLgorICogQHJ4X2lwX29jdGV0czogQ291bnQgb2YgbnVtYmVyIG9mIG9jdGV0cyBpbiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMuCisgKiAgICAgICAgICAgIEluY2x1ZGVzIGVycm9yZWQgSVAgZGF0YWdyYW1zLgorICogQHJ4X2Vycl9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIGNvbnRhaW5pbmcgZXJyb3JzLiBGb3IgZXhhbXBsZSwKKyAqICAgICAgICAgICAgYmFkIElQIGNoZWNrc3VtLgorICogQHJ4X2ljbXA6IENvdW50IG9mIHJlY2VpdmVkIElDTVAgbWVzc2FnZXMuIEluY2x1ZGVzIGVycm9yZWQgSUNNUCBtZXNzYWdlcy4KKyAqIEByeF90Y3A6IENvdW50IG9mIHJlY2VpdmVkIFRDUCBzZWdtZW50cy4gSW5jbHVkZXMgZXJyb3JlZCBUQ1Agc2VnbWVudHMuCisgKiAgICAgICAgICAgICBOb3RlOiBUaGlzIHN0YXQgY29udGFpbnMgYSBjb3VudCBvZiBhbGwgcmVjZWl2ZWQgVENQIHNlZ21lbnRzLAorICogICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGV5IHBlcnRhaW4gdG8gYW4gZXN0YWJsaXNoZWQKKyAqICAgICAgICAgICAgIGNvbm5lY3Rpb24uCisgKiBAcnhfdWRwOiBDb3VudCBvZiByZWNlaXZlZCBVRFAgZGF0YWdyYW1zLgorICogQHJ4X2Vycl90Y3A6IENvdW50IG9mIHJlY2VpdmVkIFRDUCBzZWdtZW50cyBjb250YWluaW5nIGVycm9ycy4gRm9yIGV4YW1wbGUsCisgKiAgICAgICAgICAgICBiYWQgVENQIGNoZWNrc3VtLgorICogQHJ4X2xvc3RfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZCB0byB0aGUgaG9zdC4KKyAqICAgICAgICAgICAgIFNlZSBSWF9RVUVVRV9GVUxMX0RJU0NBUkQgYW5kIFJYX1JFRF9ESVNDQVJECisgKiAgICAgICAgICAgICBmb3IgYSBsaXN0IG9mIHJlYXNvbnMuCisgKiBAcnhfbG9zdF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZCB0bworICogICAgICAgICAgICAgdGhlIGhvc3QuIFNlZSBSWF9MT1NUX0ZSTVMgZm9yIGEgbGlzdCBvZiByZWFzb25zLgorICogQHJ4X2xvc3RfaXBfb2ZmbG9hZDogRm9yIGZyYW1lcyBiZWxvbmdpbmcgdG8gb2ZmbG9hZGVkIHNlc3Npb25zIG9ubHksIGEgY291bnQKKyAqICAgICAgICAgICAgIG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcyB0aGF0IGNvdWxkIG5vdCBiZSBwYXNzZWQgdG8gdGhlIGhvc3QuCisgKiAgICAgICAgICAgICBTZWUgUlhfTE9TVF9GUk1TIGZvciBhIGxpc3Qgb2YgcmVhc29ucy4KKyAqIEByeF92YXJpb3VzX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVjYXVzZQorICogICAgICAgICAgICAgdGhlIHRhcmdldCByZWNlaXZlIHF1ZXVlIGlzIGZ1bGwuCisgKiBAcnhfc2xlZXBfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZQorICogICAgICAgICAgICB0YXJnZXQgVlBBVEggaXMgYXNsZWVwIChhIFdha2Utb24tTEFOIG1hZ2ljIHBhY2tldCBjYW4gYmUgdXNlZAorICogICAgICAgICAgICB0byBhd2FrZW4gdGhlIFZQQVRIKS4KKyAqIEByeF9yZWRfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlIG9mIFJFRAorICogICAgICAgICAgICAoUmFuZG9tIEVhcmx5IERpc2NhcmQpLgorICogQHJ4X3F1ZXVlX2Z1bGxfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlCisgKiAgICAgICAgICAgICB0aGUgdGFyZ2V0IHJlY2VpdmUgcXVldWUgaXMgZnVsbC4KKyAqIEByeF9tcGFfb2tfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgcGFzcyB0aGUgTVBBIGNoZWNrcy4KKyAqCisgKiBYTUFDIFZwYXRoIFJYIFN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgeworCXU2NAlyeF90dGxfZXRoX2ZybXM7CisJdTY0CXJ4X3ZsZF9mcm1zOworCXU2NAlyeF9vZmZsb2FkX2ZybXM7CisJdTY0CXJ4X3R0bF9ldGhfb2N0ZXRzOworCXU2NAlyeF9kYXRhX29jdGV0czsKKwl1NjQJcnhfb2ZmbG9hZF9vY3RldHM7CisJdTY0CXJ4X3ZsZF9tY2FzdF9mcm1zOworCXU2NAlyeF92bGRfYmNhc3RfZnJtczsKKwl1NjQJcnhfYWNjZXB0ZWRfdWNhc3RfZnJtczsKKwl1NjQJcnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXM7CisJdTY0CXJ4X3RhZ2dlZF9mcm1zOworCXU2NAlyeF9sb25nX2ZybXM7CisJdTY0CXJ4X3VzaXplZF9mcm1zOworCXU2NAlyeF9vc2l6ZWRfZnJtczsKKwl1NjQJcnhfZnJhZ19mcm1zOworCXU2NAlyeF9qYWJiZXJfZnJtczsKKwl1NjQJcnhfdHRsXzY0X2ZybXM7CisJdTY0CXJ4X3R0bF82NV8xMjdfZnJtczsKKwl1NjQJcnhfdHRsXzEyOF8yNTVfZnJtczsKKwl1NjQJcnhfdHRsXzI1Nl81MTFfZnJtczsKKwl1NjQJcnhfdHRsXzUxMl8xMDIzX2ZybXM7CisJdTY0CXJ4X3R0bF8xMDI0XzE1MThfZnJtczsKKwl1NjQJcnhfdHRsXzE1MTlfNDA5NV9mcm1zOworCXU2NAlyeF90dGxfNDA5Nl84MTkxX2ZybXM7CisJdTY0CXJ4X3R0bF84MTkyX21heF9mcm1zOworCXU2NAlyeF90dGxfZ3RfbWF4X2ZybXM7CisJdTY0CXJ4X2lwOworCXU2NAlyeF9hY2NlcHRlZF9pcDsKKwl1NjQJcnhfaXBfb2N0ZXRzOworCXU2NAlyeF9lcnJfaXA7CisJdTY0CXJ4X2ljbXA7CisJdTY0CXJ4X3RjcDsKKwl1NjQJcnhfdWRwOworCXU2NAlyeF9lcnJfdGNwOworCXU2NAlyeF9sb3N0X2ZybXM7CisJdTY0CXJ4X2xvc3RfaXA7CisJdTY0CXJ4X2xvc3RfaXBfb2ZmbG9hZDsKKwl1MTYJcnhfdmFyaW91c19kaXNjYXJkOworCXUxNglyeF9zbGVlcF9kaXNjYXJkOworCXUxNglyeF9yZWRfZGlzY2FyZDsKKwl1MTYJcnhfcXVldWVfZnVsbF9kaXNjYXJkOworCXU2NAlyeF9tcGFfb2tfZnJtczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY19zdGF0cyAtIFhNQUMgU3RhdGlzdGljcworICoKKyAqIEBhZ2dyX3N0YXRzOiBTdGF0aXN0aWNzIG9uIGFnZ3JlZ2F0ZSBwb3J0KHBvcnQgMCwgcG9ydCAxKQorICogQHBvcnRfc3RhdHM6IFN0YXRpY3N0aWNzIG9uIHBvcnRzKHdpcmUgMCwgd2lyZSAxLCBsYWcpCisgKiBAdnBhdGhfdHhfc3RhdHM6IFBlciB2cGF0aCBYTUFDIFRYIHN0YXRzCisgKiBAdnBhdGhfcnhfc3RhdHM6IFBlciB2cGF0aCBYTUFDIFJYIHN0YXRzCisgKgorICogWE1BQyBTdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od194bWFjX3N0YXRzIHsKKwlzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMKKwkJCQlhZ2dyX3N0YXRzW1ZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRF07CisJc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzCisJCQkJcG9ydF9zdGF0c1tWWEdFX0hXX01BQ19NQVhfTUFDX1BPUlRfSUQrMV07CisJc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cworCQkJCXZwYXRoX3R4X3N0YXRzW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMKKwkJCQl2cGF0aF9yeF9zdGF0c1tWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXTsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyAtIFRpdGFuIHZwYXRoIGhhcmR3YXJlIHN0YXRpc3RpY3MuCisgKiBAaW5pX251bV9td3Jfc2VudDogVGhlIG51bWJlciBvZiBQQ0kgbWVtb3J5IHdyaXRlcyBpbml0aWF0ZWQgYnkgdGhlIFBJQyBibG9jaworICogICAgICAgICAgICAgZm9yIHRoZSBnaXZlbiBWUEFUSAorICogQGluaV9udW1fbXJkX3NlbnQ6IFRoZSBudW1iZXIgb2YgUENJIG1lbW9yeSByZWFkcyBpbml0aWF0ZWQgYnkgdGhlIFBJQyBibG9jaworICogQGluaV9udW1fY3BsX3JjdmQ6IFRoZSBudW1iZXIgb2YgUENJIHJlYWQgY29tcGxldGlvbnMgcmVjZWl2ZWQgYnkgdGhlCisgKiAgICAgICAgICAgICBQSUMgYmxvY2sKKyAqIEBpbmlfbnVtX213cl9ieXRlX3NlbnQ6IFRoZSBudW1iZXIgb2YgUENJIG1lbW9yeSB3cml0ZSBieXRlcyBzZW50IGJ5IHRoZSBQSUMKKyAqICAgICAgICAgICAgIGJsb2NrIHRvIHRoZSBob3N0CisgKiBAaW5pX251bV9jcGxfYnl0ZV9yY3ZkOiBUaGUgbnVtYmVyIG9mIFBDSSByZWFkIGNvbXBsZXRpb24gYnl0ZXMgcmVjZWl2ZWQgYnkKKyAqICAgICAgICAgICAgIHRoZSBQSUMgYmxvY2sKKyAqIEB3cmNyZHRhcmJfeG9mZjogVEJECisgKiBAcmRjcmR0YXJiX3hvZmY6IFRCRAorICogQHZwYXRoX2dlbnN0YXRzX2NvdW50MDogVEJECisgKiBAdnBhdGhfZ2Vuc3RhdHNfY291bnQxOiBUQkQKKyAqIEB2cGF0aF9nZW5zdGF0c19jb3VudDI6IFRCRAorICogQHZwYXRoX2dlbnN0YXRzX2NvdW50MzogVEJECisgKiBAdnBhdGhfZ2Vuc3RhdHNfY291bnQ0OiBUQkQKKyAqIEB2cGF0aF9nZW5uc3RhdHNfY291bnQ1OiBUQkQKKyAqIEB0eF9zdGF0czogVHJhbnNtaXQgc3RhdHMKKyAqIEByeF9zdGF0czogUmVjZWl2ZSBzdGF0cworICogQHByb2dfZXZlbnRfdm51bTE6IFByb2dyYW1tYWJsZSBzdGF0aXN0aWMuIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYworICogICAgICAgICAgICAgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogICAgICAgICAgICAgWE1BQ19TVEFUU19DRkcuRVZFTlRfVk5VTTFfQ0ZHIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogQHByb2dfZXZlbnRfdm51bTA6IFByb2dyYW1tYWJsZSBzdGF0aXN0aWMuIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYworICogICAgICAgICAgICAgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogICAgICAgICAgICAgWE1BQ19TVEFUU19DRkcuRVZFTlRfVk5VTTBfQ0ZHIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogQHByb2dfZXZlbnRfdm51bTM6IFByb2dyYW1tYWJsZSBzdGF0aXN0aWMuIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYworICogICAgICAgICAgICAgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogICAgICAgICAgICAgWE1BQ19TVEFUU19DRkcuRVZFTlRfVk5VTTNfQ0ZHIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogQHByb2dfZXZlbnRfdm51bTI6IFByb2dyYW1tYWJsZSBzdGF0aXN0aWMuIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYworICogICAgICAgICAgICAgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogICAgICAgICAgICAgWE1BQ19TVEFUU19DRkcuRVZFTlRfVk5VTTJfQ0ZHIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogQHJ4X211bHRpX2Nhc3RfZnJhbWVfZGlzY2FyZDogVEJECisgKiBAcnhfZnJtX3RyYW5zZmVycmVkOiBUQkQKKyAqIEByeGRfcmV0dXJuZWQ6IFRCRAorICogQHJ4X21wYV9sZW5fZmFpbF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMKKyAqIAkJdGhhdCBmYWlsIHRoZSBNUEEgbGVuZ3RoIGNoZWNrCisgKiBAcnhfbXBhX21ya19mYWlsX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcworICogCQl0aGF0IGZhaWwgdGhlIE1QQSBtYXJrZXIgY2hlY2sKKyAqIEByeF9tcGFfY3JjX2ZhaWxfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgZmFpbCB0aGUgTVBBIENSQyBjaGVjaworICogQHJ4X3Blcm1pdHRlZF9mcm1zOiBDb3VudCBvZiBmcmFtZXMgdGhhdCBwYXNzIHRocm91Z2ggdGhlIEZBVSBhbmQgb24gdG8gdGhlCisgKiAgICAgICAgICAgICBmcmFtZSBidWZmZXIgKGFuZCBzdWJzZXF1ZW50bHkgdG8gdGhlIGhvc3QpLgorICogQHJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zOiBDb3VudCBvZiByZWNlaXZlIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQKKyAqICAgICAgICAgICAgIGJlY2F1c2UgdGhlIFZQQVRIIGlzIGluIHJlc2V0CisgKiBAcnhfd29sX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkICJtYWdpYyBwYWNrZXQiIGZyYW1lcy4gU3RhdCBpbmNyZW1lbnRzCisgKiAgICAgICAgICAgICB3aGVuZXZlciB0aGUgcmVjZWl2ZWQgZnJhbWUgbWF0Y2hlcyB0aGUgVlBBVEgncyBXYWtlLW9uLUxBTgorICogICAgICAgICAgICAgc2lnbmF0dXJlKHMpIENSQy4KKyAqIEB0eF92cF9yZXNldF9kaXNjYXJkZWRfZnJtczogQ291bnQgb2YgdHJhbnNtaXQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZAorICogICAgICAgICAgICAgYmVjYXVzZSB0aGUgVlBBVEggaXMgaW4gcmVzZXQuIEluY2x1ZGVzIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQKKyAqICAgICAgICAgICAgIGJlY2F1c2UgdGhlIGN1cnJlbnQgVlBJTiBkb2VzIG5vdCBtYXRjaCB0aGF0IFZQSU4gb2YgdGhlIGZyYW1lCisgKgorICogVGl0YW4gdnBhdGggaGFyZHdhcmUgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyB7CisvKjB4MDAwKi8JdTMyIGluaV9udW1fbXdyX3NlbnQ7CisvKjB4MDA0Ki8JdTMyIHVudXNlZDE7CisvKjB4MDA4Ki8JdTMyIGluaV9udW1fbXJkX3NlbnQ7CisvKjB4MDBjKi8JdTMyIHVudXNlZDI7CisvKjB4MDEwKi8JdTMyIGluaV9udW1fY3BsX3JjdmQ7CisvKjB4MDE0Ki8JdTMyIHVudXNlZDM7CisvKjB4MDE4Ki8JdTY0IGluaV9udW1fbXdyX2J5dGVfc2VudDsKKy8qMHgwMjAqLwl1NjQgaW5pX251bV9jcGxfYnl0ZV9yY3ZkOworLyoweDAyOCovCXUzMiB3cmNyZHRhcmJfeG9mZjsKKy8qMHgwMmMqLwl1MzIgdW51c2VkNDsKKy8qMHgwMzAqLwl1MzIgcmRjcmR0YXJiX3hvZmY7CisvKjB4MDM0Ki8JdTMyIHVudXNlZDU7CisvKjB4MDM4Ki8JdTMyIHZwYXRoX2dlbnN0YXRzX2NvdW50MDsKKy8qMHgwM2MqLwl1MzIgdnBhdGhfZ2Vuc3RhdHNfY291bnQxOworLyoweDA0MCovCXUzMiB2cGF0aF9nZW5zdGF0c19jb3VudDI7CisvKjB4MDQ0Ki8JdTMyIHZwYXRoX2dlbnN0YXRzX2NvdW50MzsKKy8qMHgwNDgqLwl1MzIgdnBhdGhfZ2Vuc3RhdHNfY291bnQ0OworLyoweDA0YyovCXUzMiB1bnVzZWQ2OworLyoweDA1MCovCXUzMiB2cGF0aF9nZW5zdGF0c19jb3VudDU7CisvKjB4MDU0Ki8JdTMyIHVudXNlZDc7CisvKjB4MDU4Ki8Jc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyB0eF9zdGF0czsKKy8qMHgwZTgqLwlzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3J4X3N0YXRzIHJ4X3N0YXRzOworLyoweDIyMCovCXU2NCB1bnVzZWQ5OworLyoweDIyOCovCXUzMiBwcm9nX2V2ZW50X3ZudW0xOworLyoweDIyYyovCXUzMiBwcm9nX2V2ZW50X3ZudW0wOworLyoweDIzMCovCXUzMiBwcm9nX2V2ZW50X3ZudW0zOworLyoweDIzNCovCXUzMiBwcm9nX2V2ZW50X3ZudW0yOworLyoweDIzOCovCXUxNiByeF9tdWx0aV9jYXN0X2ZyYW1lX2Rpc2NhcmQ7CisvKjB4MjNhKi8JdTggdW51c2VkMTBbNl07CisvKjB4MjQwKi8JdTMyIHJ4X2ZybV90cmFuc2ZlcnJlZDsKKy8qMHgyNDQqLwl1MzIgdW51c2VkMTE7CisvKjB4MjQ4Ki8JdTE2IHJ4ZF9yZXR1cm5lZDsKKy8qMHgyNGEqLwl1OCB1bnVzZWQxMls2XTsKKy8qMHgyNTIqLwl1MTYgcnhfbXBhX2xlbl9mYWlsX2ZybXM7CisvKjB4MjU0Ki8JdTE2IHJ4X21wYV9tcmtfZmFpbF9mcm1zOworLyoweDI1NiovCXUxNiByeF9tcGFfY3JjX2ZhaWxfZnJtczsKKy8qMHgyNTgqLwl1MTYgcnhfcGVybWl0dGVkX2ZybXM7CisvKjB4MjVjKi8JdTY0IHJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zOworLyoweDI1ZSovCXU2NCByeF93b2xfZnJtczsKKy8qMHgyNjAqLwl1NjQgdHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXM7Cit9IF9fcGFja2VkOworCisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX21ycGNpbV9pbmZvIC0gVGl0YW4gbXJwY2ltIGhhcmR3YXJlIHN0YXRpc3RpY3MuCisgKiBAcGljLmluaV9yZF9kcm9wICAJIDB4MDAwMCAgCSA0ICAJIE51bWJlciBvZiBETUEgcmVhZHMgaW5pdGlhdGVkCisgKiAgYnkgdGhlIGFkYXB0ZXIgdGhhdCB3ZXJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZSBWUEFUSCBpcyBvdXQgb2Ygc2VydmljZQorICogQHBpYy5pbmlfd3JfZHJvcCAJMHgwMDA0IAk0IAlOdW1iZXIgb2YgRE1BIHdyaXRlcyBpbml0aWF0ZWQgYnkgdGhlCisgKiAgYWRhcHRlciB0aGF0IHdlcmUgZGlzY2FyZWQgYmVjYXVzZSB0aGUgVlBBVEggaXMgb3V0IG9mIHNlcnZpY2UKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMF0gCTB4MDAwOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTFdIAkweDAwMTAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUyXSAJMHgwMDE4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lM10gCTB4MDAyMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTRdIAkweDAwMjggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU1XSAJMHgwMDMwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNl0gCTB4MDAzOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTddIAkweDAwNDAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU4XSAJMHgwMDQ4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lOV0gCTB4MDA1MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEwXSAJMHgwMDU4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMTFdIAkweDAwNjAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMl0gCTB4MDA2OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEzXSAJMHgwMDcwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMTRdIAkweDAwNzggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNV0gCTB4MDA4MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE2XSAJMHgwMDg4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMF0gCTB4MDA5MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxXSAJMHgwMDk4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTJdIAkweDAwYTAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lM10gCTB4MDBhOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmU0XSAJMHgwMGIwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTVdIAkweDAwYjggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNl0gCTB4MDBjMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmU3XSAJMHgwMGM4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZThdIAkweDAwZDAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lOV0gCTB4MDBkOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMF0gCTB4MDBlMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMV0gCTB4MDBlOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMl0gCTB4MDBmMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxM10gCTB4MDBmOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNF0gCTB4MDEwMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNV0gCTB4MDEwOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNl0gCTB4MDExMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMF0gCTB4MDExOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxXSAJMHgwMTIwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTJdIAkweDAxMjggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lM10gCTB4MDEzMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU0XSAJMHgwMTM4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTVdIAkweDAxNDAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNl0gCTB4MDE0OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU3XSAJMHgwMTUwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZThdIAkweDAxNTggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lOV0gCTB4MDE2MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMF0gCTB4MDE2OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMV0gCTB4MDE3MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMl0gCTB4MDE3OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxM10gCTB4MDE4MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNF0gCTB4MDE4OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNV0gCTB4MDE5MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNl0gCTB4MDE5OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLmluaV9yZF92cGluX2Ryb3AgCTB4MDFhMCAJNCAJTnVtYmVyIG9mIERNQSByZWFkcyBpbml0aWF0ZWQgYnkKKyAqICB0aGUgYWRhcHRlciB0aGF0IHdlcmUgZGlzY2FyZGVkIGJlY2F1c2UgdGhlIFZQQVRIIGluc3RhbmNlIG51bWJlciBkb2VzCisgKiAgbm90IG1hdGNoCisgKiBAcGljLmluaV93cl92cGluX2Ryb3AgCTB4MDFhNCAJNCAJTnVtYmVyIG9mIERNQSB3cml0ZXMgaW5pdGlhdGVkCisgKiAgYnkgdGhlIGFkYXB0ZXIgdGhhdCB3ZXJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZSBWUEFUSCBpbnN0YW5jZSBudW1iZXIKKyAqICBkb2VzIG5vdCBtYXRjaAorICogQHBpYy5nZW5zdGF0c19jb3VudDAgCTB4MDFhOCAJNCAJQ29uZmlndXJhYmxlIHN0YXRpc3RpYyAjMS4gUmVmZXIKKyAqICB0byB0aGUgR0VOU1RBVFMwX0NGRyBmb3IgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhpcyBzdGF0aXN0aWMKKyAqIEBwaWMuZ2Vuc3RhdHNfY291bnQxIAkweDAxYWMgCTQgCUNvbmZpZ3VyYWJsZSBzdGF0aXN0aWMgIzIuIFJlZmVyCisgKiAgdG8gdGhlIEdFTlNUQVRTMV9DRkcgZm9yIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoaXMgc3RhdGlzdGljCisgKiBAcGljLmdlbnN0YXRzX2NvdW50MiAJMHgwMWIwIAk0IAlDb25maWd1cmFibGUgc3RhdGlzdGljICMzLiBSZWZlcgorICogIHRvIHRoZSBHRU5TVEFUUzJfQ0ZHIGZvciBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGlzIHN0YXRpc3RpYworICogQHBpYy5nZW5zdGF0c19jb3VudDMgCTB4MDFiNCAJNCAJQ29uZmlndXJhYmxlIHN0YXRpc3RpYyAjNC4gUmVmZXIKKyAqICB0byB0aGUgR0VOU1RBVFMzX0NGRyBmb3IgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhpcyBzdGF0aXN0aWMKKyAqIEBwaWMuZ2Vuc3RhdHNfY291bnQ0IAkweDAxYjggCTQgCUNvbmZpZ3VyYWJsZSBzdGF0aXN0aWMgIzUuIFJlZmVyCisgKiAgdG8gdGhlIEdFTlNUQVRTNF9DRkcgZm9yIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoaXMgc3RhdGlzdGljCisgKiBAcGljLmdlbnN0YXRzX2NvdW50NSAJMHgwMWMwIAk0IAlDb25maWd1cmFibGUgc3RhdGlzdGljICM2LiBSZWZlcgorICogIHRvIHRoZSBHRU5TVEFUUzVfQ0ZHIGZvciBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGlzIHN0YXRpc3RpYworICogQHBjaS5yc3Rkcm9wX2NwbCAJMHgwMWM4IAk0CisgKiBAcGNpLnJzdGRyb3BfbXNnIAkweDAxY2MgCTQKKyAqIEBwY2kucnN0ZHJvcF9jbGllbnQxIAkweDAxZDAgCTQKKyAqIEBwY2kucnN0ZHJvcF9jbGllbnQwIAkweDAxZDQgCTQKKyAqIEBwY2kucnN0ZHJvcF9jbGllbnQyIAkweDAxZDggCTQKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTBdIAkweDAxZTIgCTIgCU51bWJlciBvZiB0aW1lcyBjb21wbGV0aW9uCisgKiAgaGVhZGVyIGNyZWRpdHMgd2VyZSBkZXBsZXRlZAorICogQHBjaS5kZXBsX25waFt2cGxhbmUwXSAJMHgwMWU0IAkyIAlOdW1iZXIgb2YgdGltZXMgbm9uIHBvc3RlZAorICogIGhlYWRlciBjcmVkaXRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUwXSAJMHgwMWU2IAkyIAlOdW1iZXIgb2YgdGltZXMgdGhlIHBvc3RlZAorICogIGhlYWRlciBjcmVkaXRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTFdIAkweDAxZWEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMV0gCTB4MDFlYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTFdIAkweDAxZWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTJdIAkweDAxZjIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMl0gCTB4MDFmNCAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTJdIAkweDAxZjYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTNdIAkweDAxZmEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lM10gCTB4MDFmYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTNdIAkweDAxZmUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTRdIAkweDAyMDIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lNF0gCTB4MDIwNCAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTRdIAkweDAyMDYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTVdIAkweDAyMGEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lNV0gCTB4MDIwYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTVdIAkweDAyMGUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTZdIAkweDAyMTIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lNl0gCTB4MDIxNCAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTZdIAkweDAyMTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTddIAkweDAyMWEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lN10gCTB4MDIxYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTddIAkweDAyMWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZThdIAkweDAyMjIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lOF0gCTB4MDIyNCAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZThdIAkweDAyMjYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTldIAkweDAyMmEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lOV0gCTB4MDIyYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTldIAkweDAyMmUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTEwXSAJMHgwMjMyIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTEwXSAJMHgwMjM0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTBdIAkweDAyMzYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTExXSAJMHgwMjNhIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTExXSAJMHgwMjNjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTFdIAkweDAyM2UgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTEyXSAJMHgwMjQyIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTEyXSAJMHgwMjQ0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTJdIAkweDAyNDYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTEzXSAJMHgwMjRhIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTEzXSAJMHgwMjRjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTNdIAkweDAyNGUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTE0XSAJMHgwMjUyIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTE0XSAJMHgwMjU0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTRdIAkweDAyNTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTE1XSAJMHgwMjVhIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTE1XSAJMHgwMjVjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTVdIAkweDAyNWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTE2XSAJMHgwMjYyIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTE2XSAJMHgwMjY0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTZdIAkweDAyNjYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTBdIAkweDAyNmEgCTIgCU51bWJlciBvZiB0aW1lcyBjb21wbGV0aW9uIGRhdGEKKyAqICBjcmVkaXRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMF0gCTB4MDI2YyAJMiAJTnVtYmVyIG9mIHRpbWVzIG5vbiBwb3N0ZWQgZGF0YQorICogIGNyZWRpdHMgd2VyZSBkZXBsZXRlZAorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTBdIAkweDAyNmUgCTIgCU51bWJlciBvZiB0aW1lcyB0aGUgcG9zdGVkIGRhdGEKKyAqICBjcmVkaXRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTFdIAkweDAyNzIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMV0gCTB4MDI3NCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTFdIAkweDAyNzYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTJdIAkweDAyN2EgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMl0gCTB4MDI3YyAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTJdIAkweDAyN2UgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTNdIAkweDAyODIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lM10gCTB4MDI4NCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTNdIAkweDAyODYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTRdIAkweDAyOGEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lNF0gCTB4MDI4YyAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTRdIAkweDAyOGUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTVdIAkweDAyOTIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lNV0gCTB4MDI5NCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTVdIAkweDAyOTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTZdIAkweDAyOWEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lNl0gCTB4MDI5YyAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTZdIAkweDAyOWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTddIAkweDAyYTIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lN10gCTB4MDJhNCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTddIAkweDAyYTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZThdIAkweDAyYWEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lOF0gCTB4MDJhYyAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZThdIAkweDAyYWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTldIAkweDAyYjIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lOV0gCTB4MDJiNCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTldIAkweDAyYjYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTEwXSAJMHgwMmJhIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTEwXSAJMHgwMmJjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTBdIAkweDAyYmUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTExXSAJMHgwMmMyIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTExXSAJMHgwMmM0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTFdIAkweDAyYzYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTEyXSAJMHgwMmNhIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTEyXSAJMHgwMmNjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTJdIAkweDAyY2UgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTEzXSAJMHgwMmQyIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTEzXSAJMHgwMmQ0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTNdIAkweDAyZDYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTE0XSAJMHgwMmRhIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTE0XSAJMHgwMmRjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTRdIAkweDAyZGUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTE1XSAJMHgwMmUyIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTE1XSAJMHgwMmU0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTVdIAkweDAyZTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTE2XSAJMHgwMmVhIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTE2XSAJMHgwMmVjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTZdIAkweDAyZWUgCTIKKyAqIEB4Z21hY19wb3J0WzNdOworICogQHhnbWFjX2FnZ3JbMl07CisgKiBAeGdtYWMuZ2xvYmFsX3Byb2dfZXZlbnRfZ251bTAgCTB4MGFlMCAJOCAJUHJvZ3JhbW1hYmxlIHN0YXRpc3RpYy4KKyAqICBJbmNyZW1lbnRzIHdoZW4gaW50ZXJuYWwgbG9naWMgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5FVkVOVF9HTlVNMF9DRkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBAeGdtYWMuZ2xvYmFsX3Byb2dfZXZlbnRfZ251bTEgCTB4MGFlOCAJOCAJUHJvZ3JhbW1hYmxlIHN0YXRpc3RpYy4KKyAqICBJbmNyZW1lbnRzIHdoZW4gaW50ZXJuYWwgbG9naWMgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5FVkVOVF9HTlVNMV9DRkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBAeGdtYWMub3JwX2xyb19ldmVudHMgCTB4MGFmOCAJOAorICogQHhnbWFjLm9ycF9ic19ldmVudHMgCTB4MGIwMCAJOAorICogQHhnbWFjLm9ycF9pd2FycF9ldmVudHMgCTB4MGIwOCAJOAorICogQHhnbWFjLnR4X3Blcm1pdHRlZF9mcm1zIAkweDBiMTQgCTQKKyAqIEB4Z21hYy5wb3J0Ml90eF9hbnlfZnJtcyAJMHgwYjFkIAkxCisgKiBAeGdtYWMucG9ydDFfdHhfYW55X2ZybXMgCTB4MGIxZSAJMQorICogQHhnbWFjLnBvcnQwX3R4X2FueV9mcm1zIAkweDBiMWYgCTEKKyAqIEB4Z21hYy5wb3J0Ml9yeF9hbnlfZnJtcyAJMHgwYjI1IAkxCisgKiBAeGdtYWMucG9ydDFfcnhfYW55X2ZybXMgCTB4MGIyNiAJMQorICogQHhnbWFjLnBvcnQwX3J4X2FueV9mcm1zIAkweDBiMjcgCTEKKyAqCisgKiBUaXRhbiBtcnBjaW0gaGFyZHdhcmUgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX21ycGNpbV9pbmZvIHsKKy8qMHgwMDAwKi8JdTMyCXBpY19pbmlfcmRfZHJvcDsKKy8qMHgwMDA0Ki8JdTMyCXBpY19pbmlfd3JfZHJvcDsKKy8qMHgwMDA4Ki8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUzMglwaWNfd3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWQ7CisJLyoweDAwMDQqLwl1MzIJdW51c2VkMTsKKwkJfSBwaWNfd3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRfdnBsYW5lWzE3XTsKKy8qMHgwMDkwKi8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUzMglwaWNfd3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWQ7CisJLyoweDAwMDQqLwl1MzIJdW51c2VkMjsKKwkJfSBwaWNfd3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRfdnBsYW5lWzE3XTsKKy8qMHgwMTE4Ki8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUzMglwaWNfcmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkOworCS8qMHgwMDA0Ki8JdTMyCXVudXNlZDM7CisJCX0gcGljX3JkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZF92cGxhbmVbMTddOworLyoweDAxYTAqLwl1MzIJcGljX2luaV9yZF92cGluX2Ryb3A7CisvKjB4MDFhNCovCXUzMglwaWNfaW5pX3dyX3ZwaW5fZHJvcDsKKy8qMHgwMWE4Ki8JdTMyCXBpY19nZW5zdGF0c19jb3VudDA7CisvKjB4MDFhYyovCXUzMglwaWNfZ2Vuc3RhdHNfY291bnQxOworLyoweDAxYjAqLwl1MzIJcGljX2dlbnN0YXRzX2NvdW50MjsKKy8qMHgwMWI0Ki8JdTMyCXBpY19nZW5zdGF0c19jb3VudDM7CisvKjB4MDFiOCovCXUzMglwaWNfZ2Vuc3RhdHNfY291bnQ0OworLyoweDAxYmMqLwl1MzIJdW51c2VkNDsKKy8qMHgwMWMwKi8JdTMyCXBpY19nZW5zdGF0c19jb3VudDU7CisvKjB4MDFjNCovCXUzMgl1bnVzZWQ1OworLyoweDAxYzgqLwl1MzIJcGNpX3JzdGRyb3BfY3BsOworLyoweDAxY2MqLwl1MzIJcGNpX3JzdGRyb3BfbXNnOworLyoweDAxZDAqLwl1MzIJcGNpX3JzdGRyb3BfY2xpZW50MTsKKy8qMHgwMWQ0Ki8JdTMyCXBjaV9yc3Rkcm9wX2NsaWVudDA7CisvKjB4MDFkOCovCXUzMglwY2lfcnN0ZHJvcF9jbGllbnQyOworLyoweDAxZGMqLwl1MzIJdW51c2VkNjsKKy8qMHgwMWUwKi8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUxNgl1bnVzZWQ3OworCS8qMHgwMDAyKi8JdTE2CXBjaV9kZXBsX2NwbGg7CisJLyoweDAwMDQqLwl1MTYJcGNpX2RlcGxfbnBoOworCS8qMHgwMDA2Ki8JdTE2CXBjaV9kZXBsX3BoOworCQl9IHBjaV9kZXBsX2hfdnBsYW5lWzE3XTsKKy8qMHgwMjY4Ki8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUxNgl1bnVzZWQ4OworCS8qMHgwMDAyKi8JdTE2CXBjaV9kZXBsX2NwbGQ7CisJLyoweDAwMDQqLwl1MTYJcGNpX2RlcGxfbnBkOworCS8qMHgwMDA2Ki8JdTE2CXBjaV9kZXBsX3BkOworCQl9IHBjaV9kZXBsX2RfdnBsYW5lWzE3XTsKKy8qMHgwMmYwKi8Jc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzIHhnbWFjX3BvcnRbM107CisvKjB4MGExMCovCXN0cnVjdCB2eGdlX2h3X3htYWNfYWdncl9zdGF0cyB4Z21hY19hZ2dyWzJdOworLyoweDBhZTAqLwl1NjQJeGdtYWNfZ2xvYmFsX3Byb2dfZXZlbnRfZ251bTA7CisvKjB4MGFlOCovCXU2NAl4Z21hY19nbG9iYWxfcHJvZ19ldmVudF9nbnVtMTsKKy8qMHgwYWYwKi8JdTY0CXVudXNlZDc7CisvKjB4MGFmOCovCXU2NAl1bnVzZWQ4OworLyoweDBiMDAqLwl1NjQJdW51c2VkOTsKKy8qMHgwYjA4Ki8JdTY0CXVudXNlZDEwOworLyoweDBiMTAqLwl1MzIJdW51c2VkMTE7CisvKjB4MGIxNCovCXUzMgl4Z21hY190eF9wZXJtaXR0ZWRfZnJtczsKKy8qMHgwYjE4Ki8JdTMyCXVudXNlZDEyOworLyoweDBiMWMqLwl1OAl1bnVzZWQxMzsKKy8qMHgwYjFkKi8JdTgJeGdtYWNfcG9ydDJfdHhfYW55X2ZybXM7CisvKjB4MGIxZSovCXU4CXhnbWFjX3BvcnQxX3R4X2FueV9mcm1zOworLyoweDBiMWYqLwl1OAl4Z21hY19wb3J0MF90eF9hbnlfZnJtczsKKy8qMHgwYjIwKi8JdTMyCXVudXNlZDE0OworLyoweDBiMjQqLwl1OAl1bnVzZWQxNTsKKy8qMHgwYjI1Ki8JdTgJeGdtYWNfcG9ydDJfcnhfYW55X2ZybXM7CisvKjB4MGIyNiovCXU4CXhnbWFjX3BvcnQxX3J4X2FueV9mcm1zOworLyoweDBiMjcqLwl1OAl4Z21hY19wb3J0MF9yeF9hbnlfZnJtczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2h3X2luZm8gLSBUaXRhbiBoYXJkd2FyZSBzdGF0aXN0aWNzLgorICogQHZwYXRoX2luZm86IFZQYXRoIHN0YXRpc3RpY3MKKyAqIEB2cGF0aF9pbmZvX3NhdjogVnBhdGggc3RhdGlzdGljcyBzYXZlZAorICoKKyAqIFRpdGFuIGhhcmR3YXJlIHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvIHsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvCisJCSp2cGF0aF9pbmZvW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8KKwkJdnBhdGhfaW5mb19zYXZbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2NvbW1vbl9pbmZvIC0gSFcgY29tbW9uCisgKiBzdGF0aXN0aWNzIGZvciBxdWV1ZXMuCisgKiBAZnVsbF9jbnQ6IE51bWJlciBvZiB0aW1lcyB0aGUgcXVldWUgd2FzIGZ1bGwKKyAqIEB1c2FnZV9jbnQ6IHVzYWdlIGNvdW50LgorICogQHVzYWdlX21heDogTWF4aW11bSB1c2FnZQorICogQHJlc2VydmVfZnJlZV9zd2Fwc19jbnQ6IFJlc2VydmUvZnJlZSBzd2FwIGNvdW50ZXIuIEludGVybmFsIHVzYWdlLgorICogQHRvdGFsX2NvbXBsX2NudDogVG90YWwgZGVzY3JpcHRvciBjb21wbGV0aW9uIGNvdW50LgorICoKKyAqIEh3IHF1ZXVlIGNvdW50ZXJzCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZmlmb19pbmZve30sCisgKiBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19yaW5nX2luZm97fSwKKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm8geworCXUzMglmdWxsX2NudDsKKwl1MzIJdXNhZ2VfY250OworCXUzMgl1c2FnZV9tYXg7CisJdTMyCXJlc2VydmVfZnJlZV9zd2Fwc19jbnQ7CisJdTMyIHRvdGFsX2NvbXBsX2NudDsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZmlmb19pbmZvIC0gSFcgZmlmbyBzdGF0aXN0aWNzCisgKiBAY29tbW9uX3N0YXRzOiBDb21tb24gY291bnRlcnMgZm9yIGFsbCBxdWV1ZXMKKyAqIEB0b3RhbF9wb3N0czogVG90YWwgbnVtYmVyIG9mIHBvc3RpbmdzIG9uIHRoZSBxdWV1ZS4KKyAqIEB0b3RhbF9idWZmZXJzOiBUb3RhbCBudW1iZXIgb2YgYnVmZmVycyBwb3N0ZWQuCisgKiBAdHhkX3RfY29kZV9lcnJfY250OiBBcnJheSBvZiB0cmFuc21pdCB0cmFuc2ZlciBjb2Rlcy4gVGhlIHBvc2l0aW9uCisgKiAoaW5kZXgpIGluIHRoaXMgYXJyYXkgcmVmbGVjdHMgdGhlIHRyYW5zZmVyIGNvZGUgdHlwZSwgZm9yIGluc3RhbmNlCisgKiAweEEgLSAibG9zcyBvZiBsaW5rIi4KKyAqIFZhbHVlIHR4ZF90X2NvZGVfZXJyX2NudFtpXSByZWZsZWN0cyB0aGUKKyAqIG51bWJlciBvZiB0aW1lcyB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2ZlciBjb2RlIHdhcyBlbmNvdW50ZXJlZC4KKyAqCisgKiBIVyBmaWZvIGNvdW50ZXJzCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm97fSwKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X3JpbmdfaW5mb3t9LAorICovCitzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19maWZvX2luZm8geworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2NvbW1vbl9pbmZvIGNvbW1vbl9zdGF0czsKKwl1MzIgdG90YWxfcG9zdHM7CisJdTMyIHRvdGFsX2J1ZmZlcnM7CisJdTMyIHR4ZF90X2NvZGVfZXJyX2NudFtWWEdFX0hXX0RUUl9NQVhfVF9DT0RFXTsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfcmluZ19pbmZvIC0gSFcgcmluZyBzdGF0aXN0aWNzCisgKiBAY29tbW9uX3N0YXRzOiBDb21tb24gY291bnRlcnMgZm9yIGFsbCBxdWV1ZXMKKyAqIEByeGRfdF9jb2RlX2Vycl9jbnQ6IEFycmF5IG9mIHJlY2VpdmUgdHJhbnNmZXIgY29kZXMuIFRoZSBwb3NpdGlvbgorICogICAgICAgICAgICAgKGluZGV4KSBpbiB0aGlzIGFycmF5IHJlZmxlY3RzIHRoZSB0cmFuc2ZlciBjb2RlIHR5cGUsCisgKiAgICAgICAgICAgICBmb3IgaW5zdGFuY2UKKyAqICAgICAgICAgICAgIDB4NyAtIGZvciAiaW52YWxpZCByZWNlaXZlIGJ1ZmZlciBzaXplIiwgb3IgMHg4IC0gZm9yIEVDQy4KKyAqICAgICAgICAgICAgIFZhbHVlIHJ4ZF90X2NvZGVfZXJyX2NudFtpXSByZWZsZWN0cyB0aGUKKyAqICAgICAgICAgICAgIG51bWJlciBvZiB0aW1lcyB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2ZlciBjb2RlIHdhcyBlbmNvdW50ZXJlZC4KKyAqCisgKiBIVyByaW5nIGNvdW50ZXJzCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm97fSwKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2ZpZm9faW5mb3t9LAorICovCitzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19yaW5nX2luZm8geworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2NvbW1vbl9pbmZvIGNvbW1vbl9zdGF0czsKKwl1MzIgcnhkX3RfY29kZV9lcnJfY250W1ZYR0VfSFdfRFRSX01BWF9UX0NPREVdOworCit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2VyciAtIEhXIHZwYXRoIGVycm9yIHN0YXRpc3RpY3MKKyAqIEB1bmtub3duX2FsYXJtczoKKyAqIEBuZXR3b3JrX3N1c3RhaW5lZF9mYXVsdDoKKyAqIEBuZXR3b3JrX3N1c3RhaW5lZF9vazoKKyAqIEBrZGZjY3RsX2ZpZm8wX292ZXJ3cml0ZToKKyAqIEBrZGZjY3RsX2ZpZm8wX3BvaXNvbjoKKyAqIEBrZGZjY3RsX2ZpZm8wX2RtYV9lcnJvcjoKKyAqIEBkYmxnZW5fZmlmbzBfb3ZlcmZsb3c6CisgKiBAc3RhdHNiX3BpZl9jaGFpbl9lcnJvcjoKKyAqIEBzdGF0c2JfZHJvcF90aW1lb3V0OgorICogQHRhcmdldF9pbGxlZ2FsX2FjY2VzczoKKyAqIEBpbmlfc2Vycl9kZXQ6CisgKiBAcHJjX3JpbmdfYnVtcHM6CisgKiBAcHJjX3J4ZGNtX3NjX2VycjoKKyAqIEBwcmNfcnhkY21fc2NfYWJvcnQ6CisgKiBAcHJjX3F1YW50YV9zaXplX2VycjoKKyAqCisgKiBIVyB2cGF0aCBlcnJvciBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2VyciB7CisJdTMyCXVua25vd25fYWxhcm1zOworCXUzMgluZXR3b3JrX3N1c3RhaW5lZF9mYXVsdDsKKwl1MzIJbmV0d29ya19zdXN0YWluZWRfb2s7CisJdTMyCWtkZmNjdGxfZmlmbzBfb3ZlcndyaXRlOworCXUzMglrZGZjY3RsX2ZpZm8wX3BvaXNvbjsKKwl1MzIJa2RmY2N0bF9maWZvMF9kbWFfZXJyb3I7CisJdTMyCWRibGdlbl9maWZvMF9vdmVyZmxvdzsKKwl1MzIJc3RhdHNiX3BpZl9jaGFpbl9lcnJvcjsKKwl1MzIJc3RhdHNiX2Ryb3BfdGltZW91dDsKKwl1MzIJdGFyZ2V0X2lsbGVnYWxfYWNjZXNzOworCXUzMglpbmlfc2Vycl9kZXQ7CisJdTMyCXByY19yaW5nX2J1bXBzOworCXUzMglwcmNfcnhkY21fc2NfZXJyOworCXUzMglwcmNfcnhkY21fc2NfYWJvcnQ7CisJdTMyCXByY19xdWFudGFfc2l6ZV9lcnI7Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm8gLSBIVyB2cGF0aCBzdyBzdGF0aXN0aWNzCisgKiBAc29mdF9yZXNldF9jbnQ6IE51bWJlciBvZiB0aW1lcyBzb2Z0IHJlc2V0IGlzIGRvbmUgb24gdGhpcyB2cGF0aC4KKyAqIEBlcnJvcl9zdGF0czogZXJyb3IgY291bnRlcnMgZm9yIHRoZSB2cGF0aAorICogQHJpbmdfc3RhdHM6IGNvdW50ZXJzIGZvciByaW5nIGJlbG9uZ2luZyB0byB0aGUgdnBhdGgKKyAqIEBmaWZvX3N0YXRzOiBjb3VudGVycyBmb3IgZmlmbyBiZWxvbmdpbmcgdG8gdGhlIHZwYXRoCisgKgorICogSFcgdnBhdGggc3cgc3RhdGlzdGljcworICogU2VlIGFsc286IHN0cnVjdCB2eGdlX2h3X2RldmljZV9pbmZve30gfS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbyB7CisJdTMyICAgIHNvZnRfcmVzZXRfY250OworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2VycgllcnJvcl9zdGF0czsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19yaW5nX2luZm8JcmluZ19zdGF0czsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19maWZvX2luZm8JZmlmb19zdGF0czsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8gLSBIVyBvd24gcGVyLWRldmljZSBzdGF0aXN0aWNzLgorICoKKyAqIEBub3RfdHJhZmZpY19pbnRyX2NudDogTnVtYmVyIG9mIHRpbWVzIHRoZSBob3N0IHdhcyBpbnRlcnJ1cHRlZAorICogICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IG5ldyBjb21wbGV0aW9ucy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIk5vbi10cmFmZmljIGludGVycnVwdCBjb3VudGVyIi4KKyAqIEB0cmFmZmljX2ludHJfY250OiBOdW1iZXIgb2YgdHJhZmZpYyBpbnRlcnJ1cHRzIGZvciB0aGUgZGV2aWNlLgorICogQHRvdGFsX2ludHJfY250OiBUb3RhbCBudW1iZXIgb2YgdHJhZmZpYyBpbnRlcnJ1cHRzIGZvciB0aGUgZGV2aWNlLgorICogICAgICAgICAgICAgICAgICBAdG90YWxfaW50cl9jbnQgPT0gQHRyYWZmaWNfaW50cl9jbnQgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90X3RyYWZmaWNfaW50cl9jbnQKKyAqIEBzb2Z0X3Jlc2V0X2NudDogTnVtYmVyIG9mIHRpbWVzIHNvZnQgcmVzZXQgaXMgZG9uZSBvbiB0aGlzIGRldmljZS4KKyAqIEB2cGF0aF9pbmZvOiBwbGVhc2Ugc2VlIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm97fQorICogSFcgcGVyLWRldmljZSBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfaW5mbyB7CisJdTMyCW5vdF90cmFmZmljX2ludHJfY250OworCXUzMgl0cmFmZmljX2ludHJfY250OworCXUzMgl0b3RhbF9pbnRyX2NudDsKKwl1MzIJc29mdF9yZXNldF9jbnQ7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbworCQl2cGF0aF9pbmZvW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfZXJyIC0gSFcgZGV2aWNlIGVycm9yIHN0YXRpc3RpY3MuCisgKiBAdnBhdGhfYWxhcm1zOiBOdW1iZXIgb2YgdnBhdGggYWxhcm1zCisgKgorICogSFcgRGV2aWNlIGVycm9yIHN0YXRzCisgKi8KK3N0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19lcnIgeworCXUzMiAgICAgdnBhdGhfYWxhcm1zOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHMgLSBDb250YWlucyBIVyBwZXItZGV2aWNlIHN0YXRpc3RpY3MsCisgKiBpbmNsdWRpbmcgaHcuCisgKiBAZGV2aDogSFcgZGV2aWNlIGhhbmRsZS4KKyAqIEBkbWFfYWRkcjogRE1BIGFkZHJlcyBvZiB0aGUgJWh3X2luZm8uIEdpdmVuIHRvIGRldmljZSB0byBmaWxsLWluIHRoZSBzdGF0cy4KKyAqIEBod19pbmZvX2RtYWg6IERNQSBoYW5kbGUgdXNlZCB0byBtYXAgaHcgc3RhdGlzdGljcyBvbnRvIHRoZSBkZXZpY2UgbWVtb3J5CisgKiAgICAgICAgICAgICAgICBzcGFjZS4KKyAqIEBod19pbmZvX2RtYV9hY2NoOiBPbmUgbW9yZSBETUEgaGFuZGxlIHVzZWQgc3Vic2VxdWVudGx5IHRvIGZyZWUgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgRE1BIG9iamVjdC4gTm90ZSB0aGF0IHRoaXMgYW5kIHRoZSBwcmV2aW91cyBoYW5kbGUgaGF2ZQorICogICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIG1lYW5pbmcgZm9yIFNvbGFyaXM7IG9uIFdpbmRvd3MgYW5kIExpbnV4IHRoZQorICogICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgd2lsbCBiZSBzaW1wbHkgcG9pbnRlciB0byBQQ0kgZGV2aWNlLgorICoKKyAqIEBod19kZXZfaW5mb19zdGF0czogVGl0YW4gc3RhdGlzdGljcyBtYWludGFpbmVkIGJ5IHRoZSBoYXJkd2FyZS4KKyAqIEBzd19kZXZfaW5mb19zdGF0czogSFcncyAic29mdCIgZGV2aWNlIGluZm9ybWF0aW9uYWwgc3RhdGlzdGljcywgZS5nLiBudW1iZXIKKyAqICAgICAgICAgICAgICAgICAgICAgb2YgY29tcGxldGlvbnMgcGVyIGludGVycnVwdC4KKyAqIEBzd19kZXZfZXJyX3N0YXRzOiBIVydzICJzb2Z0IiBkZXZpY2UgZXJyb3Igc3RhdGlzdGljcy4KKyAqCisgKiBTdHJ1Y3R1cmUtY29udGFpbmVyIG9mIEhXIHBlci1kZXZpY2Ugc3RhdGlzdGljcy4gTm90ZSB0aGF0IHBlci1jaGFubmVsCisgKiBzdGF0aXN0aWNzIGFyZSBrZXB0IGluIHNlcGFyYXRlIHN0cnVjdHVyZXMgdW5kZXIgSFcncyBmaWZvIGFuZCByaW5nCisgKiBjaGFubmVscy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzIHsKKwkvKiBoYW5kbGVzICovCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmg7CisKKwkvKiBIVyBkZXZpY2UgaGFyZHdhcmUgc3RhdGlzdGljcyAqLworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvCWh3X2Rldl9pbmZvX3N0YXRzOworCisJLyogSFcgZGV2aWNlICJzb2Z0IiBzdGF0cyAqLworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19lcnIgICBzd19kZXZfZXJyX3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19pbmZvICBzd19kZXZfaW5mb19zdGF0czsKKworfTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9od19zdGF0c19lbmFibGUoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kZXZpY2Vfc3RhdHNfZ2V0KAorCQkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfaHdfaW5mbyAqaHdfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZHJpdmVyX3N0YXRzX2dldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8gKnN3X3N0YXRzKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X21ycGNpbV9zdGF0c19lbmFibGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfbXJwY2ltX3N0YXRzX2Rpc2FibGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21ycGNpbV9zdGF0c19hY2Nlc3MoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyIG9wZXJhdGlvbiwKKwl1MzIgbG9jYXRpb24sCisJdTMyIG9mZnNldCwKKwl1NjQgKnN0YXQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX2FnZ3Jfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1MzIgcG9ydCwKKwkJCQkgICBzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMgKmFnZ3Jfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX3BvcnRfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1MzIgcG9ydCwKKwkJCQkgICBzdHJ1Y3QgdnhnZV9od194bWFjX3BvcnRfc3RhdHMgKnBvcnRfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCSAgICAgIHN0cnVjdCB2eGdlX2h3X3htYWNfc3RhdHMgKnhtYWNfc3RhdHMpOworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X21nbXRfcmVnX3R5cGUgLSBSZWdpc3RlciB0eXBlcy4KKyAqCisgKiBAdnhnZV9od19tZ210X3JlZ190eXBlX2xlZ2FjeTogTGVnYWN5IHJlZ2lzdGVycworICogQHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV90b2M6IFRPQyBSZWdpc3RlcnMKKyAqIEB2eGdlX2h3X21nbXRfcmVnX3R5cGVfY29tbW9uOiBDb21tb24gUmVnaXN0ZXJzCisgKiBAdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbTogbXJwY2ltIHJlZ2lzdGVycworICogQHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9zcnBjaW06IHNycGNpbSByZWdpc3RlcnMKKyAqIEB2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBtZ210OiB2cGF0aCBtYW5hZ2VtZW50IHJlZ2lzdGVycworICogQHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV92cGF0aDogdnBhdGggcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXIgdHlwZSBlbnVtYXJhdGlvbgorICovCitlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSB7CisJdnhnZV9od19tZ210X3JlZ190eXBlX2xlZ2FjeSA9IDAsCisJdnhnZV9od19tZ210X3JlZ190eXBlX3RvYyA9IDEsCisJdnhnZV9od19tZ210X3JlZ190eXBlX2NvbW1vbiA9IDIsCisJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSA9IDMsCisJdnhnZV9od19tZ210X3JlZ190eXBlX3NycGNpbSA9IDQsCisJdnhnZV9od19tZ210X3JlZ190eXBlX3ZwbWdtdCA9IDUsCisJdnhnZV9od19tZ210X3JlZ190eXBlX3ZwYXRoID0gNgorfTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19tZ210X3JlZ19yZWFkKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkgICAgICBlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSB0eXBlLAorCQkgICAgICB1MzIgaW5kZXgsCisJCSAgICAgIHUzMiBvZmZzZXQsCisJCSAgICAgIHU2NCAqdmFsdWUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkgICAgICBlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSB0eXBlLAorCQkgICAgICB1MzIgaW5kZXgsCisJCSAgICAgIHUzMiBvZmZzZXQsCisJCSAgICAgIHU2NCB2YWx1ZSk7CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfcnhkX3N0YXRlIC0gRGVzY3JpcHRvciAoUlhEKSBzdGF0ZS4KKyAqIEBWWEdFX0hXX1JYRF9TVEFURV9OT05FOiBJbnZhbGlkIHN0YXRlLgorICogQFZYR0VfSFdfUlhEX1NUQVRFX0FWQUlMOiBEZXNjcmlwdG9yIGlzIGF2YWlsYWJsZSBmb3IgcmVzZXJ2YXRpb24uCisgKiBAVlhHRV9IV19SWERfU1RBVEVfUE9TVEVEOiBEZXNjcmlwdG9yIGlzIHBvc3RlZCBmb3IgcHJvY2Vzc2luZyBieSB0aGUKKyAqIGRldmljZS4KKyAqIEBWWEdFX0hXX1JYRF9TVEFURV9GUkVFRDogRGVzY3JpcHRvciBpcyBmcmVlIGFuZCBjYW4gYmUgcmV1c2VkIGZvcgorICogZmlsbGluZy1pbiBhbmQgcG9zdGluZyBsYXRlci4KKyAqCisgKiBUaXRhbi9IVyBkZXNjcmlwdG9yIHN0YXRlcy4KKyAqCisgKi8KK2VudW0gdnhnZV9od19yeGRfc3RhdGUgeworCVZYR0VfSFdfUlhEX1NUQVRFX05PTkUJCT0gMCwKKwlWWEdFX0hXX1JYRF9TVEFURV9BVkFJTAkJPSAxLAorCVZYR0VfSFdfUlhEX1NUQVRFX1BPU1RFRAk9IDIsCisJVlhHRV9IV19SWERfU1RBVEVfRlJFRUQJCT0gMworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF9pbmZvIC0gRXh0ZW5kZWQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEKKyAqIGNvbXBsZXRlZCByaW5nIGRlc2NyaXB0b3IuCisgKiBAc3luX2ZsYWc6IFNZTiBmbGFnCisgKiBAaXNfaWNtcDogSXMgSUNNUAorICogQGZhc3RfcGF0aF9lbGlnaWJsZTogRmFzdCBQYXRoIEVsaWdpYmxlIGZsYWcKKyAqIEBsM19ja3N1bTogaW4gTDMgY2hlY2tzdW0gaXMgdmFsaWQKKyAqIEBsM19ja3N1bTogUmVzdWx0IG9mIElQIGNoZWNrc3VtIGNoZWNrIChieSBUaXRhbiBoYXJkd2FyZSkuCisgKiAgICAgICAgICAgIFRoaXMgZmllbGQgY29udGFpbmluZyBWWEdFX0hXX0wzX0NLU1VNX09LIHdvdWxkIG1lYW4gdGhhdAorICogICAgICAgICAgICB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCwgb3RoZXJ3aXNlIC0gdGhlIGRhdGFncmFtIGlzCisgKiAgICAgICAgICAgIGNvcnJ1cHRlZC4KKyAqIEBsNF9ja3N1bTogaW4gTDQgY2hlY2tzdW0gaXMgdmFsaWQKKyAqIEBsNF9ja3N1bTogUmVzdWx0IG9mIFRDUC9VRFAgY2hlY2tzdW0gY2hlY2sgKGJ5IFRpdGFuIGhhcmR3YXJlKS4KKyAqICAgICAgICAgICAgVGhpcyBmaWVsZCBjb250YWluaW5nIFZYR0VfSFdfTDRfQ0tTVU1fT0sgd291bGQgbWVhbiB0aGF0CisgKiAgICAgICAgICAgIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0LiBPdGhlcndpc2UgLSB0aGUgcGFja2V0IGlzCisgKiAgICAgICAgICAgIGNvcnJ1cHRlZC4KKyAqIEBmcmFtZTogWmVybyBvciBtb3JlIG9mIGVudW0gdnhnZV9od19mcmFtZV90eXBlIGZsYWdzLgorICogCQlTZWUgZW51bSB2eGdlX2h3X2ZyYW1lX3R5cGV7fS4KKyAqIEBwcm90bzogemVybyBvciBtb3JlIG9mIGVudW0gdnhnZV9od19mcmFtZV9wcm90byBmbGFncy4gIFJlcG9ydGluZyBiaXRzIGZvcgorICogICAgICAgICAgICB2YXJpb3VzIGhpZ2hlci1sYXllciBwcm90b2NvbHMsIGluY2x1ZGluZyAoYnV0IG5vdGUgcmVzdHJpY3RlZCB0bykKKyAqICAgICAgICAgICAgVENQIGFuZCBVRFAuIFNlZSBlbnVtIHZ4Z2VfaHdfZnJhbWVfcHJvdG97fS4KKyAqIEBpc192bGFuOiBJZiB2bGFuIHRhZyBpcyB2YWxpZAorICogQHZsYW46IFZMQU4gdGFnIGV4dHJhY3RlZCBmcm9tIHRoZSByZWNlaXZlZCBmcmFtZS4KKyAqIEBydGhfYnVja2V0OiBSVEggYnVja2V0CisgKiBAcnRoX2l0X2hpdDogU2V0LCBJZiBSVEggaGFzaCB2YWx1ZSBjYWxjdWxhdGVkIGJ5IHRoZSBUaXRhbiBoYXJkd2FyZQorICogICAgICAgICAgICAgaGFzIGEgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIEluZGlyZWN0aW9uIHRhYmxlLgorICogQHJ0aF9zcGRtX2hpdDogU2V0LCBJZiBSVEggaGFzaCB2YWx1ZSBjYWxjdWxhdGVkIGJ5IHRoZSBUaXRhbiBoYXJkd2FyZQorICogICAgICAgICAgICAgaGFzIGEgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIFNvY2tldCBQYWlyIERpcmVjdCBNYXRjaCB0YWJsZS4KKyAqIEBydGhfaGFzaF90eXBlOiBSVEggaGFzaCBjb2RlIG9mIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaC4KKyAqIEBydGhfdmFsdWU6IFJlY2VpdmUgVHJhZmZpYyBIYXNoaW5nKFJUSCkgaGFzaCB2YWx1ZS4gUHJvZHVjZWQgYnkgVGl0YW4KKyAqICAgICAgICAgICAgIGhhcmR3YXJlIGlmIFJUSCBpcyBlbmFibGVkLgorICovCitzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF9pbmZvIHsKKwl1MzIJc3luX2ZsYWc7CisJdTMyCWlzX2ljbXA7CisJdTMyCWZhc3RfcGF0aF9lbGlnaWJsZTsKKwl1MzIJbDNfY2tzdW1fdmFsaWQ7CisJdTMyCWwzX2Nrc3VtOworCXUzMglsNF9ja3N1bV92YWxpZDsKKwl1MzIJbDRfY2tzdW07CisJdTMyCWZyYW1lOworCXUzMglwcm90bzsKKwl1MzIJaXNfdmxhbjsKKwl1MzIJdmxhbjsKKwl1MzIJcnRoX2J1Y2tldDsKKwl1MzIJcnRoX2l0X2hpdDsKKwl1MzIJcnRoX3NwZG1faGl0OworCXUzMglydGhfaGFzaF90eXBlOworCXUzMglydGhfdmFsdWU7Cit9OworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X3JpbmdfaGFzaF90eXBlIC0gUlRIIGhhc2ggdHlwZXMKKyAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU6IE5vIEhhc2gKKyAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY0OiBUQ1AgSVB2NAorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjQ6IFVEUCBJUHY0CisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9JUFY0OiBJUHY0CisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNjogVENQIElQdjYKKyAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1VEUF9JUFY2OiBVRFAgSVB2NgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNjogSVB2NgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjZfRVg6IFRDUCBJUHY2IGV4dGVuc2lvbgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjZfRVg6IFVEUCBJUHY2IGV4dGVuc2lvbgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNl9FWDogSVB2NiBleHRlbnNpb24KKyAqCisgKiBSVEggaGFzaCB0eXBlcworICovCitlbnVtIHZ4Z2VfaHdfcmluZ19oYXNoX3R5cGUgeworCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORQkJCT0gMHgwLAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjQJCT0gMHgxLAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjQJCT0gMHgyLAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNAkJCT0gMHgzLAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjYJCT0gMHg0LAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjYJCT0gMHg1LAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNgkJCT0gMHg2LAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjZfRVgJPSAweDcsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9VRFBfSVBWNl9FWAk9IDB4OCwKKwlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX0lQVjZfRVgJCT0gMHg5Cit9OworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKipyeGRoKTsKKwordm9pZAordnhnZV9od19yaW5nX3J4ZF9wcmVfcG9zdCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCit2b2lkCit2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3JpbmdfcmVwbGVuaXNoKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsIHUxNiBtaW5fZmxhZyk7CisKK3ZvaWQKK3Z4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0X3dtYigKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfcG9zdCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nX2hhbmRsZSwKKwl2b2lkICoqcnhkaCwKKwl1OCAqdF9jb2RlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3JpbmdfaGFuZGxlX3Rjb2RlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCwKKwl1OCB0X2NvZGUpOworCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfZnJlZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X2ZyYW1lX3Byb3RvIC0gSGlnaGVyLWxheWVyIGV0aGVybmV0IHByb3RvY29scy4KKyAqIEBWWEdFX0hXX0ZSQU1FX1BST1RPX1ZMQU5fVEFHR0VEOiBWTEFOLgorICogQFZYR0VfSFdfRlJBTUVfUFJPVE9fSVBWNDogSVB2NC4KKyAqIEBWWEdFX0hXX0ZSQU1FX1BST1RPX0lQVjY6IElQdjYuCisgKiBAVlhHRV9IV19GUkFNRV9QUk9UT19JUF9GUkFHOiBJUCBmcmFnbWVudGVkLgorICogQFZYR0VfSFdfRlJBTUVfUFJPVE9fVENQOiBUQ1AuCisgKiBAVlhHRV9IV19GUkFNRV9QUk9UT19VRFA6IFVEUC4KKyAqIEBWWEdFX0hXX0ZSQU1FX1BST1RPX1RDUF9PUl9VRFA6IFRDUCBvciBVRFAuCisgKgorICogSGlnaGVyIGxheWVyIGV0aGVybmV0IHByb3RvY29scyBhbmQgb3B0aW9ucy4KKyAqLworZW51bSB2eGdlX2h3X2ZyYW1lX3Byb3RvIHsKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX1ZMQU5fVEFHR0VEID0gMHg4MCwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX0lQVjQJCT0gMHgxMCwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX0lQVjYJCT0gMHgwOCwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX0lQX0ZSQUcJCT0gMHgwNCwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX1RDUAkJCT0gMHgwMiwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX1VEUAkJCT0gMHgwMSwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX1RDUF9PUl9VRFAJPSAoVlhHRV9IV19GUkFNRV9QUk9UT19UQ1AgfCBcCisJCQkJCQkgICBWWEdFX0hXX0ZSQU1FX1BST1RPX1VEUCkKK307CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfZmlmb19nYXRoZXJfY29kZSAtIEdhdGhlciBjb2RlcyB1c2VkIGluIGZpZm8gVHhECisgKiBAVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX0ZJUlNUOiBGaXJzdCBUeERMCisgKiBAVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX01JRERMRTogTWlkZGxlIFR4REwKKyAqIEBWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfTEFTVDogTGFzdCBUeERMCisgKiBAVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX0ZJUlNUX0xBU1Q6IEZpcnN0IGFuZCBMYXN0IFR4REwuCisgKgorICogVGhlc2UgZ2F0aGVyIGNvZGVzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBwb3NpdGlvbiBvZiBhIFR4RCBpbiBhIFR4RCBsaXN0CisgKi8KK2VudW0gdnhnZV9od19maWZvX2dhdGhlcl9jb2RlIHsKKwlWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfRklSU1QJCT0gMHgyLAorCVZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9NSURETEUJCT0gMHgwLAorCVZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9MQVNUCQk9IDB4MSwKKwlWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfRklSU1RfTEFTVAk9IDB4MworfTsKKworLyoqCisgKiBlbnVtIGVudW0gdnhnZV9od19maWZvX3Rjb2RlIC0gdGNvZGVzIHVzZWQgaW4gZmlmbworICogQFZYR0VfSFdfRklGT19UX0NPREVfT0s6IFRyYW5zZmVyIE9LCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9QQ0lfUkVBRF9DT1JSVVBUOiBQQ0kgcmVhZCB0cmFuc2FjdGlvbiAoZWl0aGVyIFR4RCBvcgorICogICAgICAgICAgICAgZnJhbWUgZGF0YSkgcmV0dXJuZWQgd2l0aCBjb3JydXB0IGRhdGEuCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9QQ0lfUkVBRF9GQUlMOlBDSSByZWFkIHRyYW5zYWN0aW9uIHdhcyByZXR1cm5lZAorICogICAgICAgICAgICAgd2l0aCBubyBkYXRhLgorICogQFZYR0VfSFdfRklGT19UX0NPREVfSU5WQUxJRF9NU1M6IFRoZSBob3N0IGF0dGVtcHRlZCB0byBzZW5kIGVpdGhlciBhCisgKiAgICAgICAgICAgICBmcmFtZSBvciBMU08gTVNTIHRoYXQgd2FzIHRvbyBsb25nICg+OTgwMEIpLgorICogQFZYR0VfSFdfRklGT19UX0NPREVfTFNPX0VSUk9SOiBFcnJvciBkZXRlY3RlZCBkdXJpbmcgVENQL1VEUCBMYXJnZSBTZW5kCisJKgkgICAgICAgT2ZmbG9hZCBvcGVyYXRpb24sIGR1ZSB0byBpbXByb3BlciBoZWFkZXIgdGVtcGxhdGUsCisJKgkgICAgICAgdW5zdXBwb3J0ZWQgcHJvdG9jb2wsIGV0Yy4KKyAqIEBWWEdFX0hXX0ZJRk9fVF9DT0RFX1VOVVNFRDogVW51c2VkCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9NVUxUSV9FUlJPUjogU2V0IHRvIDEgYnkgdGhlIGFkYXB0ZXIgaWYgbXVsdGlwbGUKKyAqICAgICAgICAgICAgIGRhdGEgYnVmZmVyIHRyYW5zZmVyIGVycm9ycyBhcmUgZW5jb3VudGVyZWQgKHNlZSBiZWxvdykuCisgKiAgICAgICAgICAgICBPdGhlcndpc2UgaXQgaXMgc2V0IHRvIDAuCisgKgorICogVGhlc2UgdGNvZGVzIGFyZSByZXR1cm5lZCBpbiB2YXJpb3VzIEFQSSBmb3IgVHhEIHN0YXR1cworICovCitlbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB7CisJVlhHRV9IV19GSUZPX1RfQ09ERV9PSwkJCT0gMHgwLAorCVZYR0VfSFdfRklGT19UX0NPREVfUENJX1JFQURfQ09SUlVQVAk9IDB4MSwKKwlWWEdFX0hXX0ZJRk9fVF9DT0RFX1BDSV9SRUFEX0ZBSUwJPSAweDIsCisJVlhHRV9IV19GSUZPX1RfQ09ERV9JTlZBTElEX01TUwkJPSAweDMsCisJVlhHRV9IV19GSUZPX1RfQ09ERV9MU09fRVJST1IJCT0gMHg0LAorCVZYR0VfSFdfRklGT19UX0NPREVfVU5VU0VECQk9IDB4NywKKwlWWEdFX0hXX0ZJRk9fVF9DT0RFX01VTFRJX0VSUk9SCQk9IDB4OAorfTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqKnR4ZGxoLAorCXZvaWQgKip0eGRsX3ByaXYpOworCit2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faGFuZGxlLAorCQkJdm9pZCAqdHhkbGgsCisJCQl1MzIgZnJhZ19pZHgsCisJCQlkbWFfYWRkcl90IGRtYV9wb2ludGVyLAorCQkJdTMyIHNpemUpOworCit2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faGFuZGxlLAorCQkJdm9pZCAqdHhkbGgpOworCit1MzIgdnhnZV9od19maWZvX2ZyZWVfdHhkbF9jb3VudF9nZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZCgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9oLAorCXZvaWQgKip0eGRsaCwKKwllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSAqdF9jb2RlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9faGFuZGxlX3Rjb2RlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqdHhkbGgsCisJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlKTsKKwordm9pZCB2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqdHhkbGgpOworCisvKgorICogRGV2aWNlCisgKi8KKworI2RlZmluZSBWWEdFX0hXX1JJTkdfTkVYVF9CTE9DS19QT0lOVEVSX09GRlNFVAkoVlhHRV9IV19CTE9DS19TSVpFLTgpCisjZGVmaW5lIFZYR0VfSFdfUklOR19NRU1CTE9DS19JRFhfT0ZGU0VUCQkoVlhHRV9IV19CTE9DS19TSVpFLTE2KQorI2RlZmluZSBWWEdFX0hXX1JJTkdfTUlOX0JVRkZfQUxMT0NBVElPTgkJNjQKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfcmluZ19yeGRfcHJpdiAtIFJlY2VpdmUgZGVzY3JpcHRvciBIVy1wcml2YXRlIGRhdGEuCisgKiBAZG1hX2FkZHI6IERNQSAobWFwcGVkKSBhZGRyZXNzIG9mIF90aGlzXyBkZXNjcmlwdG9yLgorICogQGRtYV9oYW5kbGU6IERNQSBoYW5kbGUgdXNlZCB0byBtYXAgdGhlIGRlc2NyaXB0b3Igb250byBkZXZpY2UuCisgKiBAZG1hX29mZnNldDogRGVzY3JpcHRvcidzIG9mZnNldCBpbiB0aGUgbWVtb3J5IGJsb2NrLiBIVyBhbGxvY2F0ZXMKKyAqICAgICAgICAgICAgICBkZXNjcmlwdG9ycyBpbiBtZW1vcnkgYmxvY2tzIG9mICVWWEdFX0hXX0JMT0NLX1NJWkUKKyAqICAgICAgICAgICAgICBieXRlcy4gRWFjaCBtZW1ibG9jayBpcyBjb250aWd1b3VzIERNQS1hYmxlIG1lbW9yeS4gRWFjaAorICogICAgICAgICAgICAgIG1lbWJsb2NrIGNvbnRhaW5zIDEgb3IgbW9yZSA0S0IgUnhEIGJsb2NrcyB2aXNpYmxlIHRvIHRoZQorICogICAgICAgICAgICAgIFRpdGFuIGhhcmR3YXJlLgorICogQGRtYV9vYmplY3Q6IERNQSBhZGRyZXNzIGFuZCBoYW5kbGUgb2YgdGhlIG1lbW9yeSBibG9jayB0aGF0IGNvbnRhaW5zCisgKiAgICAgICAgICAgICAgdGhlIGRlc2NyaXB0b3IuIFRoaXMgbWVtYmVyIGlzIHVzZWQgb25seSBpbiB0aGUgImNoZWNrZWQiCisgKiAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgSFcgKHRvIGVuZm9yY2UgY2VydGFpbiBhc3NlcnRpb25zKTsKKyAqICAgICAgICAgICAgICBvdGhlcndpc2UgaXQgZ2V0cyBjb21waWxlZCBvdXQuCisgKiBAYWxsb2NhdGVkOiBUcnVlIGlmIHRoZSBkZXNjcmlwdG9yIGlzIHJlc2VydmVkLCAwIG90aGVyd2lzZS4gSW50ZXJuYWwgdXNhZ2UuCisgKgorICogUGVyLXJlY2VpdmUgZGVjc3JpcHRvciBIVy1wcml2YXRlIGRhdGEuIEhXIHVzZXMgdGhlIHNwYWNlIHRvIGtlZXAgRE1BCisgKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc2NyaXB0b3IuIE5vdGUgdGhhdCBkcml2ZXIgY2FuIGFzayBIVworICogdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBwZXItZGVzY3JpcHRvciBzcGFjZSBmb3IgaXRzIG93biAoZHJpdmVyLXNwZWNpZmljKQorICogcHVycG9zZXMuCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfcmluZ19yeGRfcHJpdiB7CisJZG1hX2FkZHJfdAlkbWFfYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqZG1hX2hhbmRsZTsKKwlwdHJkaWZmX3QJZG1hX29mZnNldDsKKyNpZmRlZiBWWEdFX0RFQlVHX0FTU0VSVAorCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hCSpkbWFfb2JqZWN0OworI2VuZGlmCit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09IFJJTkcgUFJJVkFURSBBUEkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3U2NAorX192eGdlX2h3X3JpbmdfZmlyc3RfYmxvY2tfYWRkcmVzc19nZXQoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19yaW5nX2NyZWF0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXN0cnVjdCB2eGdlX2h3X3JpbmdfYXR0ciAqYXR0cik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19yaW5nX2Fib3J0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfcmluZ19yZXNldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3JpbmdfZGVsZXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09IEZJRk8gUFJJVkFURSBBUEkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRyOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZmlmb19jcmVhdGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwlzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHIgKmF0dHIpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZmlmb19hYm9ydCgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9oKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2ZpZm9fcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od19maWZvICpyaW5naCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19maWZvX2RlbGV0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9jYnMgeworCXZvaWQgKCppdGVtX2Z1bmNfYWxsb2MpKAorCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCisJCQl1MzIJCQltZW1ibG9ja19pbmRleCwKKwkJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hCSpkbWFfb2JqZWN0LAorCQkJdTMyCQkJaW5kZXgsCisJCQl1MzIJCQlpc19sYXN0KTsKK307CisKK3ZvaWQKK19fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3koCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCk7CisKKyNkZWZpbmUgVlhHRV9IV19WSVJUVUFMX1BBVEhfSEFORExFKHZwYXRoKQkJCQlcCisJCSgoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKikodnBhdGgpLT52cGF0aF9oYW5kbGVzLm5leHQpCisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTMyCQkJYWN0aW9uLAorCXUzMgkJCXJ0c190YWJsZSwKKwl1MzIJCQlvZmZzZXQsCisJdTY0CQkJKmRhdGExLAorCXU2NAkJCSpkYXRhMik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTMyCQkJYWN0aW9uLAorCXUzMgkJCXJ0c190YWJsZSwKKwl1MzIJCQlvZmZzZXQsCisJdTY0CQkJZGF0YTEsCisJdTY0CQkJZGF0YTIpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3dfcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMgkJCXZwX2lkKTsKKwordm9pZAorX192eGdlX2h3X3ZwYXRoX3ByY19jb25maWd1cmUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfa2RmY19jb25maWd1cmUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfbWFjX2NvbmZpZ3VyZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF90aW1fY29uZmlndXJlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMgkJCXZwX2lkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2luaXRpYWxpemUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBfaW5pdGlhbGl6ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcJKmNvbmZpZyk7CisKK3ZvaWQKK19fdnhnZV9od192cF90ZXJtaW5hdGUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcygKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoCSp2cGF0aCwKKwl1MzIJCQlza2lwX2FsYXJtcyk7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfaW50cl9lbmFibGUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit1MzIgdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwgdTMyIGludHJfbW9kZSk7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfaW50cl9kaXNhYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV9tYXNrX2FsbCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kZXZpY2VfYmVnaW5faXJxKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMiBza2lwX2FsYXJtcywKKwl1NjQgKnJlYXNvbik7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfY2xlYXJfdHhfcngoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCisvKgorICogIFZpcnR1YWwgUGF0aHMKKyAqLworCit1MzIgdnhnZV9od192cGF0aF9pZCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZF9tb2RlIHsKKwlWWEdFX0hXX1ZQQVRIX01BQ19BRERSX0FERF9EVVBMSUNBVEUgPSAwLAorCVZYR0VfSFdfVlBBVEhfTUFDX0FERFJfRElTQ0FSRF9EVVBMSUNBVEUgPSAxLAorCVZYR0VfSFdfVlBBVEhfTUFDX0FERFJfUkVQTEFDRV9EVVBMSUNBVEUgPSAyCit9OworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dLAorCWVudW0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGRfbW9kZSBkdXBsaWNhdGVfbW9kZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKKwl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldF9uZXh0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKKwl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2RlbGV0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfYWRkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJdmlkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJKnZpZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2dldF9uZXh0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJKnZpZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU2NAkJCXZpZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfZXR5cGVfYWRkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJZXR5cGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX2V0eXBlX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU2NAkJCSpldHlwZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfZXR5cGVfZ2V0X25leHQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1NjQJCQkqZXR5cGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX2V0eXBlX2RlbGV0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU2NAkJCWV0eXBlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19kaXNhYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZGlzYWJsZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3BvbGxfcngoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wb2xsX3R4KAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqKnNrYl9wdHIpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcygKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXUzMiBza2lwX2FsYXJtcyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9zZXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwkJICAgICAgIGludCAqdGltX21zaXhfaWQsIGludCBhbGFybV9tc2l4X2lkKTsKKwordm9pZAordnhnZV9od192cGF0aF9tc2l4X21hc2soc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwkJCWludCBtc2l4X2lkKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV9mbHVzaF9pbyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9jbGVhcihzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCQkJIGludCBtc2l4X2lkKTsKKwordm9pZAordnhnZV9od192cGF0aF9tc2l4X3VubWFzayhzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCQkJICBpbnQgbXNpeF9pZCk7CisKK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9tYXNrX2FsbChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2ludHJfZW5hYmxlKAorCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfaW50cl9kaXNhYmxlKAorCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCit2b2lkIHZ4Z2VfaHdfdnBhdGhfaW50YV9tYXNrX3R4X3J4KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCit2b2lkIHZ4Z2VfaHdfdnBhdGhfaW50YV91bm1hc2tfdHhfcngoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK3ZvaWQKK3Z4Z2VfaHdfY2hhbm5lbF9tc2l4X21hc2soc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsaCwgaW50IG1zaXhfaWQpOworCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfbXNpeF91bm1hc2soc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsaCwgaW50IG1zaXhfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2NoYW5uZWxfZHRyX2FsbG9jKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqKmR0cmgpOworCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfZHRyX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICpkdHJoKTsKKwordm9pZAordnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLAorCQkJCSB2b2lkICoqZHRyaCk7CisKK3ZvaWQKK3Z4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKTsKKwordm9pZAordnhnZV9od19jaGFubmVsX2R0cl9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqZHRyaCk7CisKK2ludAordnhnZV9od19jaGFubmVsX2R0cl9jb3VudChzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSBQUklWQVRFIEFQSSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua191cF9pbmQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua19kb3duX2luZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvcigKKwkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQl1MzIgdnBfaWQsCisJCWVudW0gdnhnZV9od19ldmVudCB0eXBlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGEwMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaApAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS12ZXJzaW9uLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFZYR0VfVkVSU0lPTl9ICisKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX0gKKworI2RlZmluZSBWWEdFX1ZFUlNJT05fTUFKT1IJIjIiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9NSU5PUgkiMCIKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX0ZJWAkiMSIKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX0JVSUxECSIxNzEyOSIKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX0ZPUgkiayIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKaW5kZXggMDA5NDVmNy4uMjVjOWVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYworKysgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCkBAIC02OSw3ICs2OSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIE1vZHVsZXMgcGFyYW1ldGVycyBhbmQgYXNzb2NpYXRlZCB2YXJhaWJsZXMKKyAqIE1vZHVsZXMgcGFyYW1ldGVycyBhbmQgYXNzb2NpYXRlZCB2YXJpYWJsZXMKICAqLwogc3RhdGljIGludCBmc3RfdHhxX2xvdyA9IEZTVF9MT1dfV0FURVJfTUFSSzsKIHN0YXRpYyBpbnQgZnN0X3R4cV9oaWdoID0gRlNUX0hJR0hfV0FURVJfTUFSSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKaW5kZXggMTE1YjcwNC4uZjRlOTYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKQEAgLTIzNjIsNyArMjM2Miw3IEBACiAJCSAgICAgICBpICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cykpOwogCiAjaWZkZWYgSVBXMjEwMF9ERUJVR19DMwotCS8qIEhhbHQgdGhlIGZpbXJ3YXJlIHNvIHdlIGNhbiBnZXQgYSBnb29kIGltYWdlICovCisJLyogSGFsdCB0aGUgZmlybXdhcmUgc28gd2UgY2FuIGdldCBhIGdvb2QgaW1hZ2UgKi8KIAl3cml0ZV9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBJUFdfUkVHX1JFU0VUX1JFRywKIAkJICAgICAgIElQV19BVVhfSE9TVF9SRVNFVF9SRUdfU1RPUF9NQVNURVIpOwogCWogPSA1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwppbmRleCA0YTkyYWYxLi5lMTdhNDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwpAQCAtODg0NCw3ICs4ODQ0LDcgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9NT05JVE9SICovCiAKIAkvKiBGcmVlIHRoZSBleGlzdGluZyBmaXJtd2FyZSBhbmQgcmVzZXQgdGhlIGZ3X2xvYWRlZAotCSAqIGZsYWcgc28gaXB3X2xvYWQoKSB3aWxsIGJyaW5nIGluIHRoZSBuZXcgZmlybWF3cmUgKi8KKwkgKiBmbGFnIHNvIGlwd19sb2FkKCkgd2lsbCBicmluZyBpbiB0aGUgbmV3IGZpcm13YXJlICovCiAJZnJlZV9maXJtd2FyZSgpOwogCiAJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IHdycXUtPm1vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDY2M2RjODMuLjM4ODkxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xMzM3LDcgKzEzMzcsNyBAQAogCiAJLyogYXBpX3ZlciBzaG91bGQgbWF0Y2ggdGhlIGFwaSB2ZXJzaW9uIGZvcm1pbmcgcGFydCBvZiB0aGUKIAkgKiBmaXJtd2FyZSBmaWxlbmFtZSAuLi4gYnV0IHdlIGRvbid0IGNoZWNrIGZvciB0aGF0IGFuZCBvbmx5IHJlbHkKLQkgKiBvbiB0aGUgQVBJIHZlcnNpb24gcmVhZCBmcm9tIGZpcndhcmUgaGVhZGVyIGZyb20gaGVyZSBvbiBmb3J3YXJkICovCisJICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJtd2FyZSBoZWFkZXIgZnJvbSBoZXJlIG9uIGZvcndhcmQgKi8KIAogCWlmIChhcGlfdmVyIDwgYXBpX21pbiB8fCBhcGlfdmVyID4gYXBpX21heCkgewogCQlJV0xfRVJSKHByaXYsICJEcml2ZXIgdW5hYmxlIHRvIHN1cHBvcnQgeW91ciBmaXJtd2FyZSBBUEkuICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCmluZGV4IGE3MWIwOGMuLjlkNWY5N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwpAQCAtMjU2Miw3ICsyNTYyLDcgQEAKIAogCS8qIGFwaV92ZXIgc2hvdWxkIG1hdGNoIHRoZSBhcGkgdmVyc2lvbiBmb3JtaW5nIHBhcnQgb2YgdGhlCiAJICogZmlybXdhcmUgZmlsZW5hbWUgLi4uIGJ1dCB3ZSBkb24ndCBjaGVjayBmb3IgdGhhdCBhbmQgb25seSByZWx5Ci0JICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJ3YXJlIGhlYWRlciBmcm9tIGhlcmUgb24gZm9yd2FyZCAqLworCSAqIG9uIHRoZSBBUEkgdmVyc2lvbiByZWFkIGZyb20gZmlybXdhcmUgaGVhZGVyIGZyb20gaGVyZSBvbiBmb3J3YXJkICovCiAKIAlpZiAoYXBpX3ZlciA8IGFwaV9taW4gfHwgYXBpX3ZlciA+IGFwaV9tYXgpIHsKIAkJSVdMX0VSUihwcml2LCAiRHJpdmVyIHVuYWJsZSB0byBzdXBwb3J0IHlvdXIgZmlybXdhcmUgQVBJLiAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IDYzOWRkMDIuLjhjMzYwNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCiAvKioKICAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBleGVjdXRlcyBuZXh0IGNvbW1hbmQgaW4gY29tbWFuZAotICogIHBlbmRpbmcgcXVldWUuIEl0IHdpbGwgcHV0IGZpbXdhcmUgYmFjayB0byBQUyBtb2RlCisgKiAgcGVuZGluZyBxdWV1ZS4gSXQgd2lsbCBwdXQgZmlybXdhcmUgYmFjayB0byBQUyBtb2RlCiAgKiAgaWYgYXBwbGljYWJsZS4KICAqCiAgKiAgQHBhcmFtIHByaXYgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKaW5kZXggMmM5YWE0OS4uODU3NDYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwpAQCAtMTU0LDYgKzE1NCwxMCBAQAogewogCWludCBlcnI7CiAKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZtYXJrZWRfY3B1cywgR0ZQX0tFUk5FTCkpCisJCXJldHVybiAtRU5PTUVNOworCWNwdW1hc2tfY2xlYXIobWFya2VkX2NwdXMpOworCiAJc3RhcnRfY3B1X3dvcmsoKTsKIAogCWVyciA9IHRhc2tfaGFuZG9mZl9yZWdpc3RlcigmdGFza19mcmVlX25iKTsKQEAgLTE3OSw2ICsxODMsNyBAQAogCXRhc2tfaGFuZG9mZl91bnJlZ2lzdGVyKCZ0YXNrX2ZyZWVfbmIpOwogb3V0MToKIAllbmRfc3luYygpOworCWZyZWVfY3B1bWFza192YXIobWFya2VkX2NwdXMpOwogCWdvdG8gb3V0OwogfQogCkBAIC0xOTAsNiArMTk1LDcgQEAKIAlwcm9maWxlX2V2ZW50X3VucmVnaXN0ZXIoUFJPRklMRV9UQVNLX0VYSVQsICZ0YXNrX2V4aXRfbmIpOwogCXRhc2tfaGFuZG9mZl91bnJlZ2lzdGVyKCZ0YXNrX2ZyZWVfbmIpOwogCWVuZF9zeW5jKCk7CisJZnJlZV9jcHVtYXNrX3ZhcihtYXJrZWRfY3B1cyk7CiB9CiAKIApAQCAtNTY1LDIwICs1NzEsNiBAQAogCW11dGV4X3VubG9jaygmYnVmZmVyX211dGV4KTsKIH0KIAotaW50IF9faW5pdCBidWZmZXJfc3luY19pbml0KHZvaWQpCi17Ci0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmbWFya2VkX2NwdXMsIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNwdW1hc2tfY2xlYXIobWFya2VkX2NwdXMpOwotCQlyZXR1cm4gMDsKLX0KLQotdm9pZCBidWZmZXJfc3luY19jbGVhbnVwKHZvaWQpCi17Ci0JZnJlZV9jcHVtYXNrX3ZhcihtYXJrZWRfY3B1cyk7Ci19Ci0KIC8qIFRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhZGQgYSBidWZmZXIgd29ydGggb2YgZGF0YSBkaXJlY3RseSB0bwogICogdGhlIGtlcm5lbCBidWZmZXIuIFRoZSBidWZmZXIgaXMgYXNzdW1lZCB0byBiZSBhIGNpcmN1bGFyIGJ1ZmZlci4KICAqIFRha2UgdGhlIGVudHJpZXMgZnJvbSBpbmRleCBzdGFydCBhbmQgZW5kIGF0IGluZGV4IGVuZCwgd3JhcHBpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaAppbmRleCAwZWJmNWRiLi4zMTEwNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmgKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5oCkBAIC0xOSw4ICsxOSw0IEBACiAvKiBzeW5jIHRoZSBnaXZlbiBDUFUncyBidWZmZXIgKi8KIHZvaWQgc3luY19idWZmZXIoaW50IGNwdSk7CiAKLS8qIGluaXRpYWxpemUvZGVzdHJveSB0aGUgYnVmZmVyIHN5c3RlbS4gKi8KLWludCBidWZmZXJfc3luY19pbml0KHZvaWQpOwotdm9pZCBidWZmZXJfc3luY19jbGVhbnVwKHZvaWQpOwotCiAjZW5kaWYgLyogT1BST0ZJTEVfQlVGRkVSX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMgYi9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYwppbmRleCBlNzZkNzE1Li5mMGU5OWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiB7CiAJZW50cnktPmV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlCiAJCShvcF9yaW5nX2J1ZmZlcl93cml0ZSwgc2l6ZW9mKHN0cnVjdCBvcF9zYW1wbGUpICsKLQkJIHNpemUgKiBzaXplb2YoZW50cnktPnNhbXBsZS0+ZGF0YVswXSksICZlbnRyeS0+aXJxX2ZsYWdzKTsKKwkJIHNpemUgKiBzaXplb2YoZW50cnktPnNhbXBsZS0+ZGF0YVswXSkpOwogCWlmIChlbnRyeS0+ZXZlbnQpCiAJCWVudHJ5LT5zYW1wbGUgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGVudHJ5LT5ldmVudCk7CiAJZWxzZQpAQCAtMTc4LDggKzE3OCw3IEBACiAKIGludCBvcF9jcHVfYnVmZmVyX3dyaXRlX2NvbW1pdChzdHJ1Y3Qgb3BfZW50cnkgKmVudHJ5KQogewotCXJldHVybiByaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KG9wX3JpbmdfYnVmZmVyX3dyaXRlLCBlbnRyeS0+ZXZlbnQsCi0JCQkJCSBlbnRyeS0+aXJxX2ZsYWdzKTsKKwlyZXR1cm4gcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChvcF9yaW5nX2J1ZmZlcl93cml0ZSwgZW50cnktPmV2ZW50KTsKIH0KIAogc3RydWN0IG9wX3NhbXBsZSAqb3BfY3B1X2J1ZmZlcl9yZWFkX2VudHJ5KHN0cnVjdCBvcF9lbnRyeSAqZW50cnksIGludCBjcHUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMgYi9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMKaW5kZXggY2VkMzlmNi4uM2NmZmNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYwpAQCAtMTgzLDEwICsxODMsNiBAQAogewogCWludCBlcnI7CiAKLQllcnIgPSBidWZmZXJfc3luY19pbml0KCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQogCWVyciA9IG9wcm9maWxlX2FyY2hfaW5pdCgmb3Byb2ZpbGVfb3BzKTsKIAogCWlmIChlcnIgPCAwIHx8IHRpbWVyKSB7CkBAIC0xOTUsMTAgKzE5MSw4IEBACiAJfQogCiAJZXJyID0gb3Byb2ZpbGVmc19yZWdpc3RlcigpOwotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlvcHJvZmlsZV9hcmNoX2V4aXQoKTsKLQkJYnVmZmVyX3N5bmNfY2xlYW51cCgpOwotCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0yMDgsNyArMjAyLDYgQEAKIHsKIAlvcHJvZmlsZWZzX3VucmVnaXN0ZXIoKTsKIAlvcHJvZmlsZV9hcmNoX2V4aXQoKTsKLQlidWZmZXJfc3luY19jbGVhbnVwKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvYXNwLmMgYi9kcml2ZXJzL3BhcmlzYy9hc3AuYwppbmRleCA3OTMxMTMzNS4uOWNhMjEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvYXNwLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvYXNwLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlhc3AuaHBhID0gQVNQX0lOVEVSUlVQVF9BRERSOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdmVyc2lvbiAlZCBhdCAweCVseCBmb3VuZC5cbiIsIAotCQlhc3AubmFtZSwgYXNwLnZlcnNpb24sIGRldi0+aHBhLnN0YXJ0KTsKKwkJYXNwLm5hbWUsIGFzcC52ZXJzaW9uLCAodW5zaWduZWQgbG9uZylkZXYtPmhwYS5zdGFydCk7CiAKIAkvKiB0aGUgSVJRIEFTUCBzaG91bGQgdXNlICovCiAJcmV0ID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYyBiL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKaW5kZXggY2Q0ZGQ3ZS4uNWQ2MTBjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYworKysgYi9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCkBAIC00MDYsOCArNDA2LDYgQEAKIAl9CiAJaW9jLT5hdmdfc2VhcmNoW2lvYy0+YXZnX2lkeCsrXSA9IGNyX3N0YXJ0OwogCWlvYy0+YXZnX2lkeCAmPSBDQ0lPX1NFQVJDSF9TQU1QTEUgLSAxOwotI2VuZGlmCi0jaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJaW9jLT51c2VkX3BhZ2VzICs9IHBhZ2VzX25lZWRlZDsKICNlbmRpZgogCS8qIApAQCAtNDUzLDEwICs0NTEsMTAgQEAKIAkJdW5zaWduZWQgbG9uZyBtYXNrID0gfih+MFVMID4+IHBhZ2VzX21hcHBlZCk7CiAJCUNDSU9fRlJFRV9NQVBQSU5HUyhpb2MsIHJlc19pZHgsIG1hc2ssIDgpOwogI2Vsc2UKLQkJQ0NJT19GUkVFX01BUFBJTkdTKGlvYywgcmVzX2lkeCwgMHhmZiwgOCk7CisJCUNDSU9fRlJFRV9NQVBQSU5HUyhpb2MsIHJlc19pZHgsIDB4ZmZVTCwgOCk7CiAjZW5kaWYKIAl9IGVsc2UgaWYocGFnZXNfbWFwcGVkIDw9IDE2KSB7Ci0JCUNDSU9fRlJFRV9NQVBQSU5HUyhpb2MsIHJlc19pZHgsIDB4ZmZmZiwgMTYpOworCQlDQ0lPX0ZSRUVfTUFQUElOR1MoaW9jLCByZXNfaWR4LCAweGZmZmZVTCwgMTYpOwogCX0gZWxzZSBpZihwYWdlc19tYXBwZWQgPD0gMzIpIHsKIAkJQ0NJT19GUkVFX01BUFBJTkdTKGlvYywgcmVzX2lkeCwgfih1bnNpZ25lZCBpbnQpMCwgMzIpOwogI2lmZGVmIF9fTFA2NF9fCkBAIC0xMDI4LDggKzEwMjYsMTAgQEAKIAogCXdoaWxlIChpb2MgIT0gTlVMTCkgewogCQl1bnNpZ25lZCBpbnQgdG90YWxfcGFnZXMgPSBpb2MtPnJlc19zaXplIDw8IDM7CisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJCXVuc2lnbmVkIGxvbmcgYXZnID0gMCwgbWluLCBtYXg7CiAJCWludCBqOworI2VuZGlmCiAKIAkJbGVuICs9IHNlcV9wcmludGYobSwgIiVzXG4iLCBpb2MtPm5hbWUpOwogCQkKQEAgLTEwNjAsOCArMTA2MCw3IEBACiAJCWF2ZyAvPSBDQ0lPX1NFQVJDSF9TQU1QTEU7CiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICIgIEJpdG1hcCBzZWFyY2ggOiAlbGQvJWxkLyVsZCAobWluL2F2Zy9tYXggQ1BVIEN5Y2xlcylcbiIsCiAJCQkJICBtaW4sIGF2ZywgbWF4KTsKLSNlbmRpZgotI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUworCiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICJwY2lfbWFwX3NpbmdsZSgpOiAlOGxkIGNhbGxzICAlOGxkIHBhZ2VzIChhdmcgJWQvMTAwMClcbiIsCiAJCQkJICBpb2MtPm1zaW5nbGVfY2FsbHMsIGlvYy0+bXNpbmdsZV9wYWdlcywKIAkJCQkgIChpbnQpKChpb2MtPm1zaW5nbGVfcGFnZXMgKiAxMDAwKS9pb2MtPm1zaW5nbGVfY2FsbHMpKTsKQEAgLTE0MDAsNyArMTM5OSw3IEBACiAJcmVzdWx0ID0gaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGNsYWltIENDSU8gYnVzIGFkZHJlc3Mgc3BhY2UgKCUwOGx4LCUwOGx4KVxuIiwgCi0JCQlfX2Z1bmNfXywgcmVzLT5zdGFydCwgcmVzLT5lbmQpOworCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nKXJlcy0+ZW5kKTsKIAl9CiB9CiAKQEAgLTE1NTEsNyArMTU1MCw4IEBACiAKIAlpb2MtPm5hbWUgPSBkZXYtPmlkLmh2ZXJzaW9uID09IFUyX0lPQV9SVU5XQVkgPyAiVTIiIDogIlVUdXJuIjsKIAotCXByaW50ayhLRVJOX0lORk8gIkZvdW5kICVzIGF0IDB4JWx4XG4iLCBpb2MtPm5hbWUsIGRldi0+aHBhLnN0YXJ0KTsKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCAlcyBhdCAweCVseFxuIiwgaW9jLT5uYW1lLAorCQkodW5zaWduZWQgbG9uZylkZXYtPmhwYS5zdGFydCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaW9jX2NvdW50OyBpKyspIHsKIAkJaW9jX3AgPSAmKCppb2NfcCktPm5leHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKaW5kZXggYmI1YTFjOS4uNTJhZTBiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZGluby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYwpAQCAtODE5LDcgKzgxOSw5IEBACiAKIAkJcmVzdWx0ID0gY2Npb19yZXF1ZXN0X3Jlc291cmNlKGRpbm9fZGV2LT5oYmEuZGV2LCAmcmVzW2ldKTsKIAkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjbGFpbSBQQ0kgQnVzIGFkZHJlc3Mgc3BhY2UgJWQgKDB4JWx4LTB4JWx4KSFcbiIsIG5hbWUsIGksIHJlc1tpXS5zdGFydCwgcmVzW2ldLmVuZCk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY2xhaW0gUENJIEJ1cyBhZGRyZXNzICIKKwkJCSAgICAgICAic3BhY2UgJWQgKDB4JWx4LTB4JWx4KSFcbiIsIG5hbWUsIGksCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcmVzW2ldLnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXNbaV0uZW5kKTsKIAkJCXJldHVybiByZXN1bHQ7CiAJCX0KIAl9CkBAIC04OTksNyArOTAxLDggQEAKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCByZXMpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0IEkvTyBQb3J0IHJlZ2lvbiBmYWlsZWQgIgogCQkgICAgICAgIjB4JWx4LyVseCAoaHBhIDB4JXApXG4iLAotCQkgICAgICAgbmFtZSwgcmVzLT5zdGFydCwgcmVzLT5lbmQsIGRpbm9fZGV2LT5oYmEuYmFzZV9hZGRyKTsKKwkJICAgICAgIG5hbWUsICh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nKXJlcy0+ZW5kLAorCQkgICAgICAgZGlub19kZXYtPmhiYS5iYXNlX2FkZHIpOwogCQlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYwppbmRleCA3ODkxZGI1Li5mNDE1ZmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9laXNhLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZWlzYS5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIAljaGFyICpuYW1lID0gaXNfbW9uZ29vc2UoZGV2KSA/ICJNb25nb29zZSIgOiAiV2F4IjsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzIEVJU0EgQWRhcHRlciBmb3VuZCBhdCAweCUwOGx4XG4iLCAKLQkJbmFtZSwgZGV2LT5ocGEuc3RhcnQpOworCQluYW1lLCAodW5zaWduZWQgbG9uZylkZXYtPmhwYS5zdGFydCk7CiAKIAllaXNhX2Rldi5oYmEuZGV2ID0gZGV2OwogCWVpc2FfZGV2LmhiYS5pb21tdSA9IGNjaW9fZ2V0X2lvbW11KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9laXNhX2VudW1lcmF0b3IuYyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2FfZW51bWVyYXRvci5jCmluZGV4IDZkOGFhZTAuLmM3MDllY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Vpc2FfZW51bWVyYXRvci5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2FfZW51bWVyYXRvci5jCkBAIC05OCw3ICs5OCw3IEBACiAJCQlyZXMtPnN0YXJ0ID0gbWVtX3BhcmVudC0+c3RhcnQgKyBnZXRfMjQoYnVmK2xlbisyKTsKIAkJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIGdldF8xNihidWYrbGVuKzUpKjEwMjQ7CiAJCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07Ci0JCQlwcmludGsoIm1lbW9yeSAlbHgtJWx4ICIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJCXByaW50aygibWVtb3J5ICVseC0lbHggIiwgKHVuc2lnbmVkIGxvbmcpcmVzLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcpcmVzLT5lbmQpOwogCQkJcmVzdWx0ID0gcmVxdWVzdF9yZXNvdXJjZShtZW1fcGFyZW50LCByZXMpOwogCQkJaWYgKHJlc3VsdCA8IDApIHsKIAkJCQlwcmludGsoIlxuIiBLRVJOX0VSUiAiRUlTQSBFbnVtZXJhdG9yOiBmYWlsZWQgdG8gY2xhaW0gRUlTQSBCdXMgYWRkcmVzcyBzcGFjZSFcbiIpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJCQlyZXMtPnN0YXJ0ID0gZ2V0XzE2KGJ1ZitsZW4rMSk7CiAJCQlyZXMtPmVuZCA9IGdldF8xNihidWYrbGVuKzEpKyhjJkhQRUVfUE9SVF9TSVpFX01BU0spKzE7CiAJCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKLQkJCXByaW50aygiaW9wb3J0cyAlbHgtJWx4ICIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJCXByaW50aygiaW9wb3J0cyAlbHgtJWx4ICIsICh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nKXJlcy0+ZW5kKTsKIAkJCXJlc3VsdCA9IHJlcXVlc3RfcmVzb3VyY2UoaW9fcGFyZW50LCByZXMpOwogCQkJaWYgKHJlc3VsdCA8IDApIHsKIAkJCQlwcmludGsoIlxuIiBLRVJOX0VSUiAiRUlTQSBFbnVtZXJhdG9yOiBmYWlsZWQgdG8gY2xhaW0gRUlTQSBCdXMgYWRkcmVzcyBzcGFjZSFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jIGIvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCmluZGV4IDUwMWFhZjEuLjczMzQ4YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYworKysgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKQEAgLTcxNCw3ICs3MTQsNyBAQAogCWlmIChkZXN0X2NwdSA8IDApCiAJCXJldHVybjsKIAotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShkZXN0X2NwdSk7CisJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksIGNwdW1hc2tfb2YoZGVzdF9jcHUpKTsKIAl2aS0+dHhuX2FkZHIgPSB0eG5fYWZmaW5pdHlfYWRkcihpcnEsIGRlc3RfY3B1KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb3NhcGljX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2xlZC5jIGIvZHJpdmVycy9wYXJpc2MvbGVkLmMKaW5kZXggNDU0YjY1My4uOTU4MWQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvbGVkLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvbGVkLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogICAgICAoYykgQ29weXJpZ2h0IDIwMDAgUmVkIEhhdCBTb2Z0d2FyZQogICogICAgICAoYykgQ29weXJpZ2h0IDIwMDAgSGVsZ2UgRGVsbGVyIDxoZGVsbGVyQHJlZGhhdC5jb20+Ci0gKiAgICAgIChjKSBDb3B5cmlnaHQgMjAwMS0yMDA1IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KKyAqICAgICAgKGMpIENvcHlyaWdodCAyMDAxLTIwMDkgSGVsZ2UgRGVsbGVyIDxkZWxsZXJAZ214LmRlPgogICogICAgICAoYykgQ29weXJpZ2h0IDIwMDEgUmFuZG9scGggQ2h1bmcgPHRhdXNxQGRlYmlhbi5vcmc+CiAgKgogICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjQzLDEzICsyNDMsMTEgQEAKIAogCXByb2NfcGRjX3Jvb3QgPSBwcm9jX21rZGlyKCJwZGMiLCAwKTsKIAlpZiAoIXByb2NfcGRjX3Jvb3QpIHJldHVybiAtMTsKLQlwcm9jX3BkY19yb290LT5vd25lciA9IFRISVNfTU9EVUxFOwogCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJsZWQiLCBTX0lGUkVHfFNfSVJVR098U19JV1VTUiwgcHJvY19wZGNfcm9vdCk7CiAJaWYgKCFlbnQpIHJldHVybiAtMTsKIAllbnQtPmRhdGEgPSAodm9pZCAqKUxFRF9OT0xDRDsgLyogTEVEICovCiAJZW50LT5yZWFkX3Byb2MgPSBsZWRfcHJvY19yZWFkOwogCWVudC0+d3JpdGVfcHJvYyA9IGxlZF9wcm9jX3dyaXRlOwotCWVudC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWlmIChsZWRfdHlwZSA9PSBMRURfSEFTTENEKQogCXsKQEAgLTI1OCw3ICsyNTYsNiBAQAogCQllbnQtPmRhdGEgPSAodm9pZCAqKUxFRF9IQVNMQ0Q7IC8qIExDRCAqLwogCQllbnQtPnJlYWRfcHJvYyA9IGxlZF9wcm9jX3JlYWQ7CiAJCWVudC0+d3JpdGVfcHJvYyA9IGxlZF9wcm9jX3dyaXRlOwotCQllbnQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NjMsOSArNDYwLDIwIEBACiAJaWYgKGxpa2VseShsZWRfbGFucnh0eCkpICBjdXJyZW50bGVkcyB8PSBsZWRfZ2V0X25ldF9hY3Rpdml0eSgpOwogCWlmIChsaWtlbHkobGVkX2Rpc2tpbykpICAgY3VycmVudGxlZHMgfD0gbGVkX2dldF9kaXNraW9fYWN0aXZpdHkoKTsKIAotCS8qIGJsaW5rIGFsbCBMRURzIHR3aWNlIGEgc2Vjb25kIGlmIHdlIGdvdCBhbiBPb3BzIChIUE1DKSAqLwotCWlmICh1bmxpa2VseShvb3BzX2luX3Byb2dyZXNzKSkgCi0JCWN1cnJlbnRsZWRzID0gKGNvdW50X0haPD0oSFovMikpID8gMCA6IDB4ZmY7CisJLyogYmxpbmsgTEVEcyBpZiB3ZSBnb3QgYW4gT29wcyAoSFBNQykgKi8KKwlpZiAodW5saWtlbHkob29wc19pbl9wcm9ncmVzcykpIHsKKwkJaWYgKGJvb3RfY3B1X2RhdGEuY3B1X3R5cGUgPj0gcGN4bDIpIHsKKwkJCS8qIG5ld2VyIG1hY2hpbmVzIGRvbid0IGhhdmUgbG9hZGF2Zy4gTEVEcywgc28gd2UKKwkJCSAqIGxldCBhbGwgTEVEcyBibGluayB0d2ljZSBwZXIgc2Vjb25kIGluc3RlYWQgKi8KKwkJCWN1cnJlbnRsZWRzID0gKGNvdW50X0haIDw9IChIWi8yKSkgPyAwIDogMHhmZjsKKwkJfSBlbHNlIHsKKwkJCS8qIG9sZCBtYWNoaW5lczogYmxpbmsgbG9hZGF2Zy4gTEVEcyB0d2ljZSBwZXIgc2Vjb25kICovCisJCQlpZiAoY291bnRfSFogPD0gKEhaLzIpKQorCQkJCWN1cnJlbnRsZWRzICY9IH4oTEVENHxMRUQ1fExFRDZ8TEVENyk7CisJCQllbHNlCisJCQkJY3VycmVudGxlZHMgfD0gKExFRDR8TEVENXxMRUQ2fExFRDcpOworCQl9CisJfQogCiAJaWYgKGN1cnJlbnRsZWRzICE9IGxhc3RsZWRzKQogCXsKQEAgLTUxMSw3ICs1MTksNyBAQAogCQogCS8qIENhbmNlbCB0aGUgd29yayBpdGVtIGFuZCBkZWxldGUgdGhlIHF1ZXVlICovCiAJaWYgKGxlZF93cSkgewotCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUobGVkX3dxLCAmbGVkX3Rhc2spOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmxlZF90YXNrKTsKIAkJZGVzdHJveV93b3JrcXVldWUobGVkX3dxKTsKIAkJbGVkX3dxID0gTlVMTDsKIAl9CkBAIC02MzAsNyArNjM4LDcgQEAKIAkKIAkvKiB0ZW1wb3JhcmlseSBkaXNhYmxlIHRoZSBsZWQgd29yayB0YXNrICovCiAJaWYgKGxlZF93cSkKLQkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKGxlZF93cSwgJmxlZF90YXNrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZsZWRfdGFzayk7CiAKIAkvKiBjb3B5IGRpc3BsYXkgc3RyaW5nIHRvIGJ1ZmZlciBmb3IgcHJvY2ZzICovCiAJc3RybGNweShsY2RfdGV4dCwgc3RyLCBzaXplb2YobGNkX3RleHQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKaW5kZXggMDMyZGI4MS4uZjM0OTIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAl0aXRhbl8yMTBsLAogCW5ldG1vc185eHg1X2NvbWJvLAogCW5ldG1vc185ODU1LAorCW5ldG1vc185ODU1XzJwLAogCWF2bGFiXzFzMXAsCiAJYXZsYWJfMXMycCwKIAlhdmxhYl8yczFwLApAQCAtNjIsNyArNjMsNyBAQAogCQkJCXN0cnVjdCBwYXJwb3J0X3BjX3BjaSAqY2FyZCwgaW50IGZhaWxlZCk7CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBuZXRtb3NfcGFyYWxsZWxfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGFycG9ydF9wY19wY2kgKmNhcmQsIGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5ldG1vc19wYXJhbGxlbF9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwYXJwb3J0X3BjX3BjaSAqcGFyLCBpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCiB7CiAJLyogdGhlIHJ1bGUgZGVzY3JpYmVkIGJlbG93IGRvZXNuJ3QgaG9sZCBmb3IgdGhpcyBkZXZpY2UgKi8KIAlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSAmJgpAQCAtNzQsOSArNzUsMTcgQEAKIAkgKiBhbmQgc2VyaWFsIHBvcnRzLiAgVGhlIGZvcm0gaXMgMHgwMFBTLCB3aGVyZSA8UD4gaXMgdGhlIG51bWJlciBvZgogCSAqIHBhcmFsbGVsIHBvcnRzIGFuZCA8Uz4gaXMgdGhlIG51bWJlciBvZiBzZXJpYWwgcG9ydHMuCiAJICovCi0JY2FyZC0+bnVtcG9ydHMgPSAoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmMCkgPj4gNDsKLQlpZiAoY2FyZC0+bnVtcG9ydHMgPiBBUlJBWV9TSVpFKGNhcmQtPmFkZHIpKQotCQljYXJkLT5udW1wb3J0cyA9IEFSUkFZX1NJWkUoY2FyZC0+YWRkcik7CisJcGFyLT5udW1wb3J0cyA9IChkZXYtPnN1YnN5c3RlbV9kZXZpY2UgJiAweGYwKSA+PiA0OworCWlmIChwYXItPm51bXBvcnRzID4gQVJSQVlfU0laRShwYXItPmFkZHIpKQorCQlwYXItPm51bXBvcnRzID0gQVJSQVlfU0laRShwYXItPmFkZHIpOworCS8qCisJICogVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgb25seSBjYWxsZWQgZm9yIGNhcmRzIHdpdGggdXAgdG8KKwkgKiBvbmUgcGFyYWxsZWwgcG9ydC4KKwkgKiBQYXJhbGxlbCBwb3J0IEJBUiBpcyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHNlcmlhbCBwb3J0cyBCQVJTOworCSAqIGhlbmNlLCBsbyBzaG91bGQgYmUgZWl0aGVyIDAgb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBzZXJpYWwgcG9ydHMuCisJICovCisJaWYgKHBhci0+YWRkclswXS5sbyAhPSAwKQorCQlwYXItPmFkZHJbMF0ubG8gPSBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgJiAweGY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0LDcgKzkzLDggQEAKIAkvKiB0aXRhbl8xMTBsICovCQl7IDEsIHsgeyAzLCAtMSB9LCB9IH0sCiAJLyogdGl0YW5fMjEwbCAqLwkJeyAxLCB7IHsgMywgLTEgfSwgfSB9LAogCS8qIG5ldG1vc185eHg1X2NvbWJvICovCQl7IDEsIHsgeyAyLCAtMSB9LCB9LCBuZXRtb3NfcGFyYWxsZWxfaW5pdCB9LAotCS8qIG5ldG1vc185ODU1ICovCQl7IDEsIHsgeyAyLCAtMSB9LCB9LCBuZXRtb3NfcGFyYWxsZWxfaW5pdCB9LAorCS8qIG5ldG1vc185ODU1ICovCQl7IDEsIHsgeyAwLCAtMSB9LCB9LCBuZXRtb3NfcGFyYWxsZWxfaW5pdCB9LAorCS8qIG5ldG1vc185ODU1XzJwICovCQl7IDIsIHsgeyAwLCAtMSB9LCB7IDIsIC0xIH0sIH0gfSwKIAkvKiBhdmxhYl8xczFwICAgICAqLwkJeyAxLCB7IHsgMSwgMn0sIH0gfSwKIAkvKiBhdmxhYl8xczJwICAgICAqLwkJeyAyLCB7IHsgMSwgMn0sIHsgMywgNCB9LH0gfSwKIAkvKiBhdmxhYl8yczFwICAgICAqLwkJeyAxLCB7IHsgMiwgM30sIH0gfSwKQEAgLTExMCw2ICsxMjAsMTAgQEAKIAl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODQ1LAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgbmV0bW9zXzl4eDVfY29tYm8gfSwKIAl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODU1LAorCSAgMHgxMDAwLCAweDAwMjAsIDAsIDAsIG5ldG1vc185ODU1XzJwIH0sCisJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg1NSwKKwkgIDB4MTAwMCwgMHgwMDIyLCAwLCAwLCBuZXRtb3NfOTg1NV8ycCB9LAorCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NTUsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBuZXRtb3NfOTg1NSB9LAogCS8qIFBDSV9WRU5ET1JfSURfQVZMQUIvSW50ZWsyMSBoYXMgYW5vdGhlciBidW5jaCBvZiBjYXJkcyAuLi4qLwogCXsgUENJX1ZFTkRPUl9JRF9BRkFWTEFCLCAweDIxMTAsCkBAIC0xOTIsNiArMjA2LDEyIEBACiAJCS51YXJ0X29mZnNldAk9IDgsCiAJfSwKIAlbbmV0bW9zXzk4NTVdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTIgfCBGTF9CQVNFX0JBUlMsCisJCS5udW1fcG9ydHMJPSAxLAorCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAorCQkudWFydF9vZmZzZXQJPSA4LAorCX0sCisJW25ldG1vc185ODU1XzJwXSA9IHsKIAkJLmZsYWdzCQk9IEZMX0JBU0U0IHwgRkxfQkFTRV9CQVJTLAogCQkubnVtX3BvcnRzCT0gMSwKIAkJLmJhc2VfYmF1ZAk9IDExNTIwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IDlkYmQ1MDYuLjIzZTU2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtMTY0LDcgKzE2NCw4IEBACiAgKiAxOiB3cml0YWJsZQogICogMi02OiByZXNlcnZlZAogICogNzogc3VwZXIgcGFnZQotICogOC0xMTogYXZhaWxhYmxlCisgKiA4LTEwOiBhdmFpbGFibGUKKyAqIDExOiBzbm9vcCBiZWhhdmlvcgogICogMTItNjM6IEhvc3QgcGh5c2NpYWwgYWRkcmVzcwogICovCiBzdHJ1Y3QgZG1hX3B0ZSB7CkBAIC0xODYsNiArMTg3LDExIEBACiAJcHRlLT52YWwgfD0gRE1BX1BURV9XUklURTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRtYV9zZXRfcHRlX3NucChzdHJ1Y3QgZG1hX3B0ZSAqcHRlKQoreworCXB0ZS0+dmFsIHw9IERNQV9QVEVfU05QOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3NldF9wdGVfcHJvdChzdHJ1Y3QgZG1hX3B0ZSAqcHRlLCB1bnNpZ25lZCBsb25nIHByb3QpCiB7CiAJcHRlLT52YWwgPSAocHRlLT52YWwgJiB+MykgfCAocHJvdCAmIDMpOwpAQCAtMjMxLDYgKzIzNyw3IEBACiAJaW50CQlmbGFnczsJCS8qIGZsYWdzIHRvIGZpbmQgb3V0IHR5cGUgb2YgZG9tYWluICovCiAKIAlpbnQJCWlvbW11X2NvaGVyZW5jeTsvKiBpbmRpY2F0ZSBjb2hlcmVuY3kgb2YgaW9tbXUgYWNjZXNzICovCisJaW50CQlpb21tdV9zbm9vcGluZzsgLyogaW5kaWNhdGUgc25vb3BpbmcgY29udHJvbCBmZWF0dXJlKi8KIAlpbnQJCWlvbW11X2NvdW50OwkvKiByZWZlcmVuY2UgY291bnQgb2YgaW9tbXUgKi8KIAlzcGlubG9ja190CWlvbW11X2xvY2s7CS8qIHByb3RlY3QgaW9tbXUgc2V0IGluIGRvbWFpbiAqLwogCXU2NAkJbWF4X2FkZHI7CS8qIG1heGltdW0gbWFwcGVkIGFkZHJlc3MgKi8KQEAgLTQyMSw3ICs0MjgsNiBAQAogCXJldHVybiBnX2lvbW11c1tpb21tdV9pZF07CiB9CiAKLS8qICJDb2hlcmVuY3kiIGNhcGFiaWxpdHkgbWF5IGJlIGRpZmZlcmVudCBhY3Jvc3MgaW9tbXVzICovCiBzdGF0aWMgdm9pZCBkb21haW5fdXBkYXRlX2lvbW11X2NvaGVyZW5jeShzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKIHsKIAlpbnQgaTsKQEAgLTQzOCw2ICs0NDQsMjkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGRvbWFpbl91cGRhdGVfaW9tbXVfc25vb3Bpbmcoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4pCit7CisJaW50IGk7CisKKwlkb21haW4tPmlvbW11X3Nub29waW5nID0gMTsKKworCWkgPSBmaW5kX2ZpcnN0X2JpdCgmZG9tYWluLT5pb21tdV9ibXAsIGdfbnVtX29mX2lvbW11cyk7CisJZm9yICg7IGkgPCBnX251bV9vZl9pb21tdXM7ICkgeworCQlpZiAoIWVjYXBfc2Nfc3VwcG9ydChnX2lvbW11c1tpXS0+ZWNhcCkpIHsKKwkJCWRvbWFpbi0+aW9tbXVfc25vb3BpbmcgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJaSA9IGZpbmRfbmV4dF9iaXQoJmRvbWFpbi0+aW9tbXVfYm1wLCBnX251bV9vZl9pb21tdXMsIGkrMSk7CisJfQorfQorCisvKiBTb21lIGNhcGFiaWxpdGllcyBtYXkgYmUgZGlmZmVyZW50IGFjcm9zcyBpb21tdXMgKi8KK3N0YXRpYyB2b2lkIGRvbWFpbl91cGRhdGVfaW9tbXVfY2FwKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluKQoreworCWRvbWFpbl91cGRhdGVfaW9tbXVfY29oZXJlbmN5KGRvbWFpbik7CisJZG9tYWluX3VwZGF0ZV9pb21tdV9zbm9vcGluZyhkb21haW4pOworfQorCiBzdGF0aWMgc3RydWN0IGludGVsX2lvbW11ICpkZXZpY2VfdG9faW9tbXUodTggYnVzLCB1OCBkZXZmbikKIHsKIAlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQgPSBOVUxMOwpAQCAtNjg5LDE1ICs3MTgsMTcgQEAKIHN0YXRpYyB2b2lkIGRtYV9wdGVfY2xlYXJfcmFuZ2Uoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sIHU2NCBzdGFydCwgdTY0IGVuZCkKIHsKIAlpbnQgYWRkcl93aWR0aCA9IGFnYXdfdG9fd2lkdGgoZG9tYWluLT5hZ2F3KTsKKwlpbnQgbnBhZ2VzOwogCiAJc3RhcnQgJj0gKCgodTY0KTEpIDw8IGFkZHJfd2lkdGgpIC0gMTsKIAllbmQgJj0gKCgodTY0KTEpIDw8IGFkZHJfd2lkdGgpIC0gMTsKIAkvKiBpbiBjYXNlIGl0J3MgcGFydGlhbCBwYWdlICovCiAJc3RhcnQgPSBQQUdFX0FMSUdOKHN0YXJ0KTsKIAllbmQgJj0gUEFHRV9NQVNLOworCW5wYWdlcyA9IChlbmQgLSBzdGFydCkgLyBWVERfUEFHRV9TSVpFOwogCiAJLyogd2UgZG9uJ3QgbmVlZCBsb2NrIGhlcmUsIG5vYm9keSBlbHNlIHRvdWNoZXMgdGhlIGlvdmEgcmFuZ2UgKi8KLQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwl3aGlsZSAobnBhZ2VzLS0pIHsKIAkJZG1hX3B0ZV9jbGVhcl9vbmUoZG9tYWluLCBzdGFydCk7CiAJCXN0YXJ0ICs9IFZURF9QQUdFX1NJWkU7CiAJfQpAQCAtMTI0MSw2ICsxMjcyLDExIEBACiAJZWxzZQogCQlkb21haW4tPmlvbW11X2NvaGVyZW5jeSA9IDA7CiAKKwlpZiAoZWNhcF9zY19zdXBwb3J0KGlvbW11LT5lY2FwKSkKKwkJZG9tYWluLT5pb21tdV9zbm9vcGluZyA9IDE7CisJZWxzZQorCQlkb21haW4tPmlvbW11X3Nub29waW5nID0gMDsKKwogCWRvbWFpbi0+aW9tbXVfY291bnQgPSAxOwogCiAJLyogYWx3YXlzIGFsbG9jYXRlIHRoZSB0b3AgcGdkICovCkBAIC0xMzY5LDcgKzE0MDUsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmlvbW11X2xvY2ssIGZsYWdzKTsKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaW9tbXUtPnNlcV9pZCwgJmRvbWFpbi0+aW9tbXVfYm1wKSkgewogCQlkb21haW4tPmlvbW11X2NvdW50Kys7Ci0JCWRvbWFpbl91cGRhdGVfaW9tbXVfY29oZXJlbmN5KGRvbWFpbik7CisJCWRvbWFpbl91cGRhdGVfaW9tbXVfY2FwKGRvbWFpbik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMTQ2OSw2ICsxNTA1LDggQEAKIAkJQlVHX09OKGRtYV9wdGVfYWRkcihwdGUpKTsKIAkJZG1hX3NldF9wdGVfYWRkcihwdGUsIHN0YXJ0X3BmbiA8PCBWVERfUEFHRV9TSElGVCk7CiAJCWRtYV9zZXRfcHRlX3Byb3QocHRlLCBwcm90KTsKKwkJaWYgKHByb3QgJiBETUFfUFRFX1NOUCkKKwkJCWRtYV9zZXRfcHRlX3NucChwdGUpOwogCQlkb21haW5fZmx1c2hfY2FjaGUoZG9tYWluLCBwdGUsIHNpemVvZigqcHRlKSk7CiAJCXN0YXJ0X3BmbisrOwogCQlpbmRleCsrOwpAQCAtMjExOSw3ICsyMTU3LDcgQEAKIGVycm9yOgogCWlmIChpb3ZhKQogCQlfX2ZyZWVfaW92YSgmZG9tYWluLT5pb3ZhZCwgaW92YSk7Ci0JcHJpbnRrKEtFUk5fRVJSIkRldmljZSAlcyByZXF1ZXN0OiAlbHhAJWxseCBkaXIgJWQgLS0tIGZhaWxlZFxuIiwKKwlwcmludGsoS0VSTl9FUlIiRGV2aWNlICVzIHJlcXVlc3Q6ICV6eEAlbGx4IGRpciAlZCAtLS0gZmFpbGVkXG4iLAogCQlwY2lfbmFtZShwZGV2KSwgc2l6ZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwYWRkciwgZGlyKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMTgsNyArMjI1Niw3IEBACiAJc3RhcnRfYWRkciA9IGlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZUOwogCXNpemUgPSBhbGlnbmVkX3NpemUoKHU2NClkZXZfYWRkciwgc2l6ZSk7CiAKLQlwcl9kZWJ1ZygiRGV2aWNlICVzIHVubWFwcGluZzogJWx4QCVsbHhcbiIsCisJcHJfZGVidWcoIkRldmljZSAlcyB1bm1hcHBpbmc6ICV6eEAlbGx4XG4iLAogCQlwY2lfbmFtZShwZGV2KSwgc2l6ZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydF9hZGRyKTsKIAogCS8qICBjbGVhciB0aGUgd2hvbGUgcGFnZSAqLwpAQCAtMjI4Miw4ICsyMzIwLDYgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBvcmRlcik7CiB9CiAKLSNkZWZpbmUgU0dfRU5UX1ZJUlRfQUREUkVTUyhzZykJKHNnX3ZpcnQoKHNnKSkpCi0KIHN0YXRpYyB2b2lkIGludGVsX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJCSAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKIAkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQpAQCAtMjI5NCw3ICsyMzMwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHI7CiAJc3RydWN0IGlvdmEgKmlvdmE7CiAJc2l6ZV90IHNpemUgPSAwOwotCXZvaWQgKmFkZHI7CisJcGh5c19hZGRyX3QgYWRkcjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAKQEAgLTIzMTAsNyArMjM0Niw3IEBACiAJaWYgKCFpb3ZhKQogCQlyZXR1cm47CiAJZm9yX2VhY2hfc2coc2dsaXN0LCBzZywgbmVsZW1zLCBpKSB7Ci0JCWFkZHIgPSBTR19FTlRfVklSVF9BRERSRVNTKHNnKTsKKwkJYWRkciA9IHBhZ2VfdG9fcGh5cyhzZ19wYWdlKHNnKSkgKyBzZy0+b2Zmc2V0OwogCQlzaXplICs9IGFsaWduZWRfc2l6ZSgodTY0KWFkZHIsIHNnLT5sZW5ndGgpOwogCX0KIApAQCAtMjMzNyw3ICsyMzczLDcgQEAKIAogCWZvcl9lYWNoX3NnKHNnbGlzdCwgc2csIG5lbGVtcywgaSkgewogCQlCVUdfT04oIXNnX3BhZ2Uoc2cpKTsKLQkJc2ctPmRtYV9hZGRyZXNzID0gdmlydF90b19idXMoU0dfRU5UX1ZJUlRfQUREUkVTUyhzZykpOworCQlzZy0+ZG1hX2FkZHJlc3MgPSBwYWdlX3RvX3BoeXMoc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKIAkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOwogCX0KIAlyZXR1cm4gbmVsZW1zOwpAQCAtMjM0Niw3ICsyMzgyLDcgQEAKIHN0YXRpYyBpbnQgaW50ZWxfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywKIAkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0Jdm9pZCAqYWRkcjsKKwlwaHlzX2FkZHJfdCBhZGRyOwogCWludCBpOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihod2Rldik7CiAJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CkBAIC0yMzcwLDggKzI0MDYsNyBAQAogCWlvbW11ID0gZG9tYWluX2dldF9pb21tdShkb21haW4pOwogCiAJZm9yX2VhY2hfc2coc2dsaXN0LCBzZywgbmVsZW1zLCBpKSB7Ci0JCWFkZHIgPSBTR19FTlRfVklSVF9BRERSRVNTKHNnKTsKLQkJYWRkciA9ICh2b2lkICopdmlydF90b19waHlzKGFkZHIpOworCQlhZGRyID0gcGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQ7CiAJCXNpemUgKz0gYWxpZ25lZF9zaXplKCh1NjQpYWRkciwgc2ctPmxlbmd0aCk7CiAJfQogCkBAIC0yMzk0LDggKzI0MjksNyBAQAogCXN0YXJ0X2FkZHIgPSBpb3ZhLT5wZm5fbG8gPDwgUEFHRV9TSElGVDsKIAlvZmZzZXQgPSAwOwogCWZvcl9lYWNoX3NnKHNnbGlzdCwgc2csIG5lbGVtcywgaSkgewotCQlhZGRyID0gU0dfRU5UX1ZJUlRfQUREUkVTUyhzZyk7Ci0JCWFkZHIgPSAodm9pZCAqKXZpcnRfdG9fcGh5cyhhZGRyKTsKKwkJYWRkciA9IHBhZ2VfdG9fcGh5cyhzZ19wYWdlKHNnKSkgKyBzZy0+b2Zmc2V0OwogCQlzaXplID0gYWxpZ25lZF9zaXplKCh1NjQpYWRkciwgc2ctPmxlbmd0aCk7CiAJCXJldCA9IGRvbWFpbl9wYWdlX21hcHBpbmcoZG9tYWluLCBzdGFydF9hZGRyICsgb2Zmc2V0LAogCQkJKCh1NjQpYWRkcikgJiBQQUdFX01BU0ssCkBAIC0yNjI4LDYgKzI2NjIsMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaW9tbXVfZGV0YWNoX2RlcGVuZGVudF9kZXZpY2VzKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsCisJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICp0bXAsICpwYXJlbnQ7CisKKwlpZiAoIWlvbW11IHx8ICFwZGV2KQorCQlyZXR1cm47CisKKwkvKiBkZXBlbmRlbnQgZGV2aWNlIGRldGFjaCAqLworCXRtcCA9IHBjaV9maW5kX3Vwc3RyZWFtX3BjaWVfYnJpZGdlKHBkZXYpOworCS8qIFNlY29uZGFyeSBpbnRlcmZhY2UncyBidXMgbnVtYmVyIGFuZCBkZXZmbiAwICovCisJaWYgKHRtcCkgeworCQlwYXJlbnQgPSBwZGV2LT5idXMtPnNlbGY7CisJCXdoaWxlIChwYXJlbnQgIT0gdG1wKSB7CisJCQlpb21tdV9kZXRhY2hfZGV2KGlvbW11LCBwYXJlbnQtPmJ1cy0+bnVtYmVyLAorCQkJCXBhcmVudC0+ZGV2Zm4pOworCQkJcGFyZW50ID0gcGFyZW50LT5idXMtPnNlbGY7CisJCX0KKwkJaWYgKHRtcC0+aXNfcGNpZSkgLyogdGhpcyBpcyBhIFBDSUUtdG8tUENJIGJyaWRnZSAqLworCQkJaW9tbXVfZGV0YWNoX2Rldihpb21tdSwKKwkJCQl0bXAtPnN1Ym9yZGluYXRlLT5udW1iZXIsIDApOworCQllbHNlIC8qIHRoaXMgaXMgYSBsZWdhY3kgUENJIGJyaWRnZSAqLworCQkJaW9tbXVfZGV0YWNoX2Rldihpb21tdSwKKwkJCQl0bXAtPmJ1cy0+bnVtYmVyLCB0bXAtPmRldmZuKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHZtX2RvbWFpbl9yZW1vdmVfb25lX2Rldl9pbmZvKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLAogCQkJCQkgIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMjY1Myw2ICsyNzE0LDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9kb21haW5fbG9jaywgZmxhZ3MpOwogCiAJCQlpb21tdV9kZXRhY2hfZGV2KGlvbW11LCBpbmZvLT5idXMsIGluZm8tPmRldmZuKTsKKwkJCWlvbW11X2RldGFjaF9kZXBlbmRlbnRfZGV2aWNlcyhpb21tdSwgcGRldik7CiAJCQlmcmVlX2RldmluZm9fbWVtKGluZm8pOwogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX2RvbWFpbl9sb2NrLCBmbGFncyk7CkBAIC0yNjc2LDcgKzI3MzgsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZG9tYWluLT5pb21tdV9sb2NrLCB0bXBfZmxhZ3MpOwogCQljbGVhcl9iaXQoaW9tbXUtPnNlcV9pZCwgJmRvbWFpbi0+aW9tbXVfYm1wKTsKIAkJZG9tYWluLT5pb21tdV9jb3VudC0tOwotCQlkb21haW5fdXBkYXRlX2lvbW11X2NvaGVyZW5jeShkb21haW4pOworCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkb21haW4pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmlvbW11X2xvY2ssIHRtcF9mbGFncyk7CiAJfQogCkBAIC0yNzAyLDE1ICsyNzY0LDE2IEBACiAKIAkJaW9tbXUgPSBkZXZpY2VfdG9faW9tbXUoaW5mby0+YnVzLCBpbmZvLT5kZXZmbik7CiAJCWlvbW11X2RldGFjaF9kZXYoaW9tbXUsIGluZm8tPmJ1cywgaW5mby0+ZGV2Zm4pOworCQlpb21tdV9kZXRhY2hfZGVwZW5kZW50X2RldmljZXMoaW9tbXUsIGluZm8tPmRldik7CiAKIAkJLyogY2xlYXIgdGhpcyBpb21tdSBpbiBpb21tdV9ibXAsIHVwZGF0ZSBpb21tdSBjb3VudAotCQkgKiBhbmQgY29oZXJlbmN5CisJCSAqIGFuZCBjYXBhYmlsaXRpZXMKIAkJICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmlvbW11X2xvY2ssIGZsYWdzMik7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaW9tbXUtPnNlcV9pZCwKIAkJCQkgICAgICAgJmRvbWFpbi0+aW9tbXVfYm1wKSkgewogCQkJZG9tYWluLT5pb21tdV9jb3VudC0tOwotCQkJZG9tYWluX3VwZGF0ZV9pb21tdV9jb2hlcmVuY3koZG9tYWluKTsKKwkJCWRvbWFpbl91cGRhdGVfaW9tbXVfY2FwKGRvbWFpbik7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5pb21tdV9sb2NrLCBmbGFnczIpOwogCkBAIC0yOTMzLDYgKzI5OTYsOCBAQAogCQlwcm90IHw9IERNQV9QVEVfUkVBRDsKIAlpZiAoaW9tbXVfcHJvdCAmIElPTU1VX1dSSVRFKQogCQlwcm90IHw9IERNQV9QVEVfV1JJVEU7CisJaWYgKChpb21tdV9wcm90ICYgSU9NTVVfQ0FDSEUpICYmIGRtYXJfZG9tYWluLT5pb21tdV9zbm9vcGluZykKKwkJcHJvdCB8PSBETUFfUFRFX1NOUDsKIAogCW1heF9hZGRyID0gKGlvdmEgJiBWVERfUEFHRV9NQVNLKSArIFZURF9QQUdFX0FMSUdOKHNpemUpOwogCWlmIChkbWFyX2RvbWFpbi0+bWF4X2FkZHIgPCBtYXhfYWRkcikgewpAQCAtMjk4Niw2ICszMDUxLDE3IEBACiAJcmV0dXJuIHBoeXM7CiB9CiAKK3N0YXRpYyBpbnQgaW50ZWxfaW9tbXVfZG9tYWluX2hhc19jYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2FwKQoreworCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG1hcl9kb21haW4gPSBkb21haW4tPnByaXY7CisKKwlpZiAoY2FwID09IElPTU1VX0NBUF9DQUNIRV9DT0hFUkVOQ1kpCisJCXJldHVybiBkbWFyX2RvbWFpbi0+aW9tbXVfc25vb3Bpbmc7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBpb21tdV9vcHMgaW50ZWxfaW9tbXVfb3BzID0gewogCS5kb21haW5faW5pdAk9IGludGVsX2lvbW11X2RvbWFpbl9pbml0LAogCS5kb21haW5fZGVzdHJveSA9IGludGVsX2lvbW11X2RvbWFpbl9kZXN0cm95LApAQCAtMjk5NCw2ICszMDcwLDcgQEAKIAkubWFwCQk9IGludGVsX2lvbW11X21hcF9yYW5nZSwKIAkudW5tYXAJCT0gaW50ZWxfaW9tbXVfdW5tYXBfcmFuZ2UsCiAJLmlvdmFfdG9fcGh5cwk9IGludGVsX2lvbW11X2lvdmFfdG9fcGh5cywKKwkuZG9tYWluX2hhc19jYXAgPSBpbnRlbF9pb21tdV9kb21haW5faGFzX2NhcCwKIH07CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19pb21tdV9yd2JmKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggYzBjYmJiNS4uZDc2YzRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMjc3LDEwICsyNzcsOSBAQAogCW5vZGUgPSBkZXZfdG9fbm9kZSgmZGV2LT5kZXYpOwogCWlmIChub2RlID49IDApIHsKIAkJaW50IGNwdTsKLQkJbm9kZV90b19jcHVtYXNrX3B0cihub2RlY3B1bWFzaywgbm9kZSk7CiAKIAkJZ2V0X29ubGluZV9jcHVzKCk7Ci0JCWNwdSA9IGNwdW1hc2tfYW55X2FuZChub2RlY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKKwkJY3B1ID0gY3B1bWFza19hbnlfYW5kKGNwdW1hc2tfb2Zfbm9kZShub2RlKSwgY3B1X29ubGluZV9tYXNrKTsKIAkJaWYgKGNwdSA8IG5yX2NwdV9pZHMpCiAJCQllcnJvciA9IHdvcmtfb25fY3B1KGNwdSwgbG9jYWxfcGNpX3Byb2JlLCAmZGRpKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBmZTdhYzJjLi40NDVmYjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNTkzLDcgKzU5Myw3IEBACiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUENJIHBvd2VyIHN0YXRlIChEMCwgRDEsIEQyLCBEM2hvdCkgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KICAqCi0gKiBUcmFuc2l0aW9uIGEgZGV2aWNlIHRvIGEgbmV3IHBvd2VyIHN0YXRlLCB1c2luZyB0aGUgcGxhdGZvcm0gZm9ybXdhcmUgYW5kL29yCisgKiBUcmFuc2l0aW9uIGEgZGV2aWNlIHRvIGEgbmV3IHBvd2VyIHN0YXRlLCB1c2luZyB0aGUgcGxhdGZvcm0gZmlybXdhcmUgYW5kL29yCiAgKiB0aGUgZGV2aWNlJ3MgUENJIFBNIHJlZ2lzdGVycy4KICAqCiAgKiBSRVRVUk4gVkFMVUU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYwppbmRleCA0ZWQ2NGQ4Li41MTQzYTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCiB7CiAJaW50IGNkID0gc2t0LT5uciA/IEdQSU9fUENNQ0lBX1MxX0NEX1ZBTElEIDogR1BJT19QQ01DSUFfUzBfQ0RfVkFMSUQ7Ci0JaW50IHJkeSA9IHNrdC0+bnIgPyBHUElPX1BDTUNJQV9TMF9SRFlJTlQgOiBHUElPX1BDTUNJQV9TMV9SRFlJTlQ7CisJaW50IHJkeSA9IHNrdC0+bnIgPyBHUElPX1BDTUNJQV9TMV9SRFlJTlQgOiBHUElPX1BDTUNJQV9TMF9SRFlJTlQ7CiAKIAlzdGF0ZS0+ZGV0ZWN0ID0gIWdwaW9fZ2V0X3ZhbHVlKGNkKTsKIAlzdGF0ZS0+cmVhZHkgID0gISFncGlvX2dldF92YWx1ZShyZHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IDNkYWQyN2EuLmQ5OWYxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTU4MTEsNyArNTgxMSw3IEBACiAgKglUaGlua1BhZHMgZnJvbSB0aGlzIHNhbWUgdGltZSBwZXJpb2QgKGFuZCBlYXJsaWVyKSBwcm9iYWJseSBsYWNrIHRoZQogICoJdGFjaG9tZXRlciBhcyB3ZWxsLgogICoKLSAqCVVuZm9ydHVuYXRlbHkgYSBsb3Qgb2YgVGhpbmtQYWRzIHdpdGggbmV3LXN0eWxlIEVDcyBidXQgd2hvc2UgZmlyd21hcmUKKyAqCVVuZm9ydHVuYXRlbHkgYSBsb3Qgb2YgVGhpbmtQYWRzIHdpdGggbmV3LXN0eWxlIEVDcyBidXQgd2hvc2UgZmlybXdhcmUKICAqCXdhcyBuZXZlciBmaXhlZCBieSBJQk0gdG8gcmVwb3J0IHRoZSBFQyBmaXJtd2FyZSB2ZXJzaW9uIHN0cmluZwogICoJcHJvYmFibHkgc3VwcG9ydCB0aGUgdGFjaG9tZXRlciAobGlrZSB0aGUgZWFybHkgWCBtb2RlbHMpLCBzbwogICoJZGV0ZWN0aW5nIGl0IGlzIHF1aXRlIGhhcmQuICBXZSBuZWVkIG1vcmUgZGF0YSB0byBrbm93IGZvciBzdXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMgYi9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYwppbmRleCA5OTZmNjQ4Li5jZmU4Njg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYwpAQCAtOTQsNyArOTQsNiBAQAogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUcKIAotc3RhdGljIGludCB1bmxvYWRpbmcgPSAwOwogc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIHVubG9hZF9zZW07CiAKIC8qCkBAIC0xNTgsNyArMTU3LDcgQEAKIAlpbnQgZG9ja2VkID0gLTEsIGQgPSAwOwogCiAJc2V0X2ZyZWV6YWJsZSgpOwotCXdoaWxlICghdW5sb2FkaW5nKSB7CisJd2hpbGUgKDEpIHsKIAkJaW50IHN0YXR1czsKIAogCQkvKgpAQCAtNTc1LDggKzU3NCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBucGJpb3NfdGhyZWFkX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19QUEMpCiAJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoUE5QQklPU19CQVNFKSkKIAkJcmV0dXJuIDA7CkBAIC01ODQsMTAgKzU4MSwxMyBAQAogCWlmIChwbnBiaW9zX2Rpc2FibGVkKQogCQlyZXR1cm4gMDsKICNpZmRlZiBDT05GSUdfSE9UUExVRwotCWluaXRfY29tcGxldGlvbigmdW5sb2FkX3NlbSk7Ci0JdGFzayA9IGt0aHJlYWRfcnVuKHBucF9kb2NrX3RocmVhZCwgTlVMTCwgImtwbnBiaW9zZCIpOwotCWlmICghSVNfRVJSKHRhc2spKQotCQl1bmxvYWRpbmcgPSAwOworCXsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCQlpbml0X2NvbXBsZXRpb24oJnVubG9hZF9zZW0pOworCQl0YXNrID0ga3RocmVhZF9ydW4ocG5wX2RvY2tfdGhyZWFkLCBOVUxMLCAia3BucGJpb3NkIik7CisJCWlmIChJU19FUlIodGFzaykpCisJCQlyZXR1cm4gUFRSX0VSUih0YXNrKTsKKwl9CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCmluZGV4IDBjMDU2ZmMuLjYyYmI5ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9icTI3eDAwX2JhdHRlcnkuYwpAQCAtODMsNyArODMsNyBAQAogfQogCiAvKgotICogUmV0dXJuIHRoZSBiYXR0ZXJ5IHRlbXBlcmF0dXJlIGluIENlbGNpdXMgZGVncmVlcworICogUmV0dXJuIHRoZSBiYXR0ZXJ5IHRlbXBlcmF0dXJlIGluIENlbHNpdXMgZGVncmVlcwogICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4KICAqLwogc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfdGVtcGVyYXR1cmUoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKaW5kZXggZTdlMGNmMS4uZTU4YzBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCkBAIC0yOSw4ICsyOSwxMiBAQAogCSAgU2F5IHllcyBoZXJlIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydC4KIAogY29uZmlnIFJFR1VMQVRPUl9GSVhFRF9WT0xUQUdFCi0JdHJpc3RhdGUKKwl0cmlzdGF0ZSAiRml4ZWQgdm9sdGFnZSByZWd1bGF0b3Igc3VwcG9ydCIKIAlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciBmaXhlZCB2b2x0YWdlIHJlZ3VsYXRvcnMsCisJICB1c2VmdWwgZm9yIHN5c3RlbXMgd2hpY2ggdXNlIGEgY29tYmluYXRpb24gb2Ygc29mdHdhcmUKKwkgIG1hbmFnZWQgcmVndWxhdG9ycyBhbmQgc2ltcGxlIG5vbi1jb25maWd1cmFibGUgcmVndWxhdG9ycy4KIAogY29uZmlnIFJFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSCiAJdHJpc3RhdGUgIlZpcnR1YWwgcmVndWxhdG9yIGNvbnN1bWVyIHN1cHBvcnQiCkBAIC01Miw2ICs1NiwxMyBAQAogCSAgY2hhcmdpbmcgc2VsZWN0IGJldHdlZW4gMTAwIG1BIGFuZCA1MDAgbUEgY2hhcmdpbmcgY3VycmVudAogCSAgbGltaXQuCiAKK2NvbmZpZyBSRUdVTEFUT1JfVFdMNDAzMAorCWJvb2wgIlRJIFRXTDQwMzAvVFdMNTAzMC9UUFM2OTV4MCBQTUlDIgorCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIHZvbHRhZ2UgcmVndWxhdG9ycyBwcm92aWRlZCBieQorCSAgdGhpcyBmYW1pbHkgb2YgY29tcGFuaW9uIGNoaXBzLgorCiBjb25maWcgUkVHVUxBVE9SX1dNODM1MAogCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25jaXMgV004MzUwIEF1ZGlvUGx1cyBQTUlDIgogCWRlcGVuZHMgb24gTUZEX1dNODM1MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUgYi9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZQppbmRleCA2MWIzMGM2Li5iYWMxMzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZQpAQCAtOCw2ICs4LDcgQEAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUikgKz0gdmlydHVhbC5vCiAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMikgKz0gYnEyNDAyMi5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzApICs9IHR3bDQwMzAtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfV004MzUwKSArPSB3bTgzNTAtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfV004NDAwKSArPSB3bTg0MDAtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfREE5MDNYKQkrPSBkYTkwM3gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYnEyNDAyMi5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYnEyNDAyMi5jCmluZGV4IGMxNzVlMzguLjdlY2I4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2JxMjQwMjIuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9icTI0MDIyLmMKQEAgLTEwNSw3ICsxMDUsOCBAQAogCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19pc2V0MiwgMCk7CiAJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX25jZSwgMSk7CiAKLQlicTI0MDIyID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZicTI0MDIyX2Rlc2MsICZwZGV2LT5kZXYsIHBkYXRhKTsKKwlicTI0MDIyID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZicTI0MDIyX2Rlc2MsICZwZGV2LT5kZXYsCisJCQkJICAgICBwZGF0YS0+aW5pdF9kYXRhLCBwZGF0YSk7CiAJaWYgKElTX0VSUihicTI0MDIyKSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZG4ndCByZWdpc3RlciByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGJxMjQwMjIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IGY1MTFhNDAuLjAxZjc3MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTI4LDMzICsyOCw3IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKHJlZ3VsYXRvcl9saXN0X211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQocmVndWxhdG9yX2xpc3QpOwogc3RhdGljIExJU1RfSEVBRChyZWd1bGF0b3JfbWFwX2xpc3QpOwotCi0vKgotICogc3RydWN0IHJlZ3VsYXRvcl9kZXYKLSAqCi0gKiBWb2x0YWdlIC8gQ3VycmVudCByZWd1bGF0b3IgY2xhc3MgZGV2aWNlLiBPbmUgZm9yIGVhY2ggcmVndWxhdG9yLgotICovCi1zdHJ1Y3QgcmVndWxhdG9yX2RldiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjOwotCWludCB1c2VfY291bnQ7Ci0KLQkvKiBsaXN0cyB3ZSBiZWxvbmcgdG8gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGxpc3Qgb2YgYWxsIHJlZ3VsYXRvcnMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OyAvKiBsaXN0IG9mIHN1cHBsaWVkIHJlZ3VsYXRvcnMgKi8KLQotCS8qIGxpc3RzIHdlIG93biAqLwotCXN0cnVjdCBsaXN0X2hlYWQgY29uc3VtZXJfbGlzdDsgLyogY29uc3VtZXJzIHdlIHN1cHBseSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc3VwcGx5X2xpc3Q7IC8qIHJlZ3VsYXRvcnMgd2Ugc3VwcGx5ICovCi0KLQlzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBub3RpZmllcjsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIGNvbnN1bWVyIGxvY2sgKi8KLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQlzdHJ1Y3QgZGV2aWNlIGRldjsKLQlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHM7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnN1cHBseTsJLyogZm9yIHRyZWUgKi8KLQotCXZvaWQgKnJlZ19kYXRhOwkJLyogcmVndWxhdG9yX2RldiBkYXRhICovCi19Oworc3RhdGljIGludCBoYXNfZnVsbF9jb25zdHJhaW50czsKIAogLyoKICAqIHN0cnVjdCByZWd1bGF0b3JfbWFwCkBAIC03OSw3ICs1Myw2IEBACiAJaW50IHVBX2xvYWQ7CiAJaW50IG1pbl91VjsKIAlpbnQgbWF4X3VWOwotCWludCBlbmFibGVkOyAvKiBjb3VudCBvZiBjbGllbnQgZW5hYmxlcyAqLwogCWNoYXIgKnN1cHBseV9uYW1lOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyOwogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwpAQCAtMzEyLDYgKzI4NSw0NyBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKHN0YXRlLCAwNDQ0LCByZWd1bGF0b3Jfc3RhdGVfc2hvdywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBzdGF0dXM7CisJY2hhciAqbGFiZWw7CisKKwlzdGF0dXMgPSByZGV2LT5kZXNjLT5vcHMtPmdldF9zdGF0dXMocmRldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19PRkY6CisJCWxhYmVsID0gIm9mZiI7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19PTjoKKwkJbGFiZWwgPSAib24iOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9TVEFUVVNfRVJST1I6CisJCWxhYmVsID0gImVycm9yIjsKKwkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfU1RBVFVTX0ZBU1Q6CisJCWxhYmVsID0gImZhc3QiOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9TVEFUVVNfTk9STUFMOgorCQlsYWJlbCA9ICJub3JtYWwiOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9TVEFUVVNfSURMRToKKwkJbGFiZWwgPSAiaWRsZSI7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19TVEFOREJZOgorCQlsYWJlbCA9ICJzdGFuZGJ5IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGxhYmVsKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXMsIDA0NDQsIHJlZ3VsYXRvcl9zdGF0dXNfc2hvdywgTlVMTCk7CisKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9taW5fdUFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC02NzgsNiArNjkyLDczIEBACiAJZWxzZQogCQluYW1lID0gInJlZ3VsYXRvciI7CiAKKwkvKiBjb25zdHJhaW4gbWFjaGluZS1sZXZlbCB2b2x0YWdlIHNwZWNzIHRvIGZpdAorCSAqIHRoZSBhY3R1YWwgcmFuZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgcmVndWxhdG9yLgorCSAqLworCWlmIChvcHMtPmxpc3Rfdm9sdGFnZSAmJiByZGV2LT5kZXNjLT5uX3ZvbHRhZ2VzKSB7CisJCWludAljb3VudCA9IHJkZXYtPmRlc2MtPm5fdm9sdGFnZXM7CisJCWludAlpOworCQlpbnQJbWluX3VWID0gSU5UX01BWDsKKwkJaW50CW1heF91ViA9IElOVF9NSU47CisJCWludAljbWluID0gY29uc3RyYWludHMtPm1pbl91VjsKKwkJaW50CWNtYXggPSBjb25zdHJhaW50cy0+bWF4X3VWOworCisJCS8qIGl0J3Mgc2FmZSB0byBhdXRvY29uZmlndXJlIGZpeGVkLXZvbHRhZ2Ugc3VwcGxpZXMgKi8KKwkJaWYgKGNvdW50ID09IDEgJiYgIWNtaW4pIHsKKwkJCWNtaW4gPSBJTlRfTUlOOworCQkJY21heCA9IElOVF9NQVg7CisJCX0KKworCQkvKiB2b2x0YWdlIGNvbnN0cmFpbnRzIGFyZSBvcHRpb25hbCAqLworCQlpZiAoKGNtaW4gPT0gMCkgJiYgKGNtYXggPT0gMCkpCisJCQlnb3RvIG91dDsKKworCQkvKiBlbHNlIHJlcXVpcmUgZXhwbGljaXQgbWFjaGluZS1sZXZlbCBjb25zdHJhaW50cyAqLworCQlpZiAoY21pbiA8PSAwIHx8IGNtYXggPD0gMCB8fCBjbWF4IDwgY21pbikgeworCQkJcHJfZXJyKCIlczogJXMgJyVzJyB2b2x0YWdlIGNvbnN0cmFpbnRzXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgImludmFsaWQiLCBuYW1lKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIGluaXRpYWw6IFtjbWluLi5jbWF4XSB2YWxpZCwgW21pbl91Vi4ubWF4X3VWXSBub3QgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCWludAl2YWx1ZTsKKworCQkJdmFsdWUgPSBvcHMtPmxpc3Rfdm9sdGFnZShyZGV2LCBpKTsKKwkJCWlmICh2YWx1ZSA8PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBtYXliZSBhZGp1c3QgW21pbl91Vi4ubWF4X3VWXSAqLworCQkJaWYgKHZhbHVlID49IGNtaW4gJiYgdmFsdWUgPCBtaW5fdVYpCisJCQkJbWluX3VWID0gdmFsdWU7CisJCQlpZiAodmFsdWUgPD0gY21heCAmJiB2YWx1ZSA+IG1heF91VikKKwkJCQltYXhfdVYgPSB2YWx1ZTsKKwkJfQorCisJCS8qIGZpbmFsOiBbbWluX3VWLi5tYXhfdVZdIHZhbGlkIGlmZiBjb25zdHJhaW50cyB2YWxpZCAqLworCQlpZiAobWF4X3VWIDwgbWluX3VWKSB7CisJCQlwcl9lcnIoIiVzOiAlcyAnJXMnIHZvbHRhZ2UgY29uc3RyYWludHNcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCAidW5zdXBwb3J0YWJsZSIsIG5hbWUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogdXNlIHJlZ3VsYXRvcidzIHN1YnNldCBvZiBtYWNoaW5lIGNvbnN0cmFpbnRzICovCisJCWlmIChjb25zdHJhaW50cy0+bWluX3VWIDwgbWluX3VWKSB7CisJCQlwcl9kZWJ1ZygiJXM6IG92ZXJyaWRlICclcycgJXMsICVkIC0+ICVkXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSwgIm1pbl91ViIsCisJCQkJCWNvbnN0cmFpbnRzLT5taW5fdVYsIG1pbl91Vik7CisJCQljb25zdHJhaW50cy0+bWluX3VWID0gbWluX3VWOworCQl9CisJCWlmIChjb25zdHJhaW50cy0+bWF4X3VWID4gbWF4X3VWKSB7CisJCQlwcl9kZWJ1ZygiJXM6IG92ZXJyaWRlICclcycgJXMsICVkIC0+ICVkXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSwgIm1heF91ViIsCisJCQkJCWNvbnN0cmFpbnRzLT5tYXhfdVYsIG1heF91Vik7CisJCQljb25zdHJhaW50cy0+bWF4X3VWID0gbWF4X3VWOworCQl9CisJfQorCiAJcmRldi0+Y29uc3RyYWludHMgPSBjb25zdHJhaW50czsKIAogCS8qIGRvIHdlIG5lZWQgdG8gYXBwbHkgdGhlIGNvbnN0cmFpbnQgdm9sdGFnZSAqLwpAQCAtNjk1LDEwICs3NzYsNiBAQAogCQkJfQogCX0KIAotCS8qIGFyZSB3ZSBlbmFibGVkIGF0IGJvb3QgdGltZSBieSBmaXJtd2FyZSAvIGJvb3Rsb2FkZXIgKi8KLQlpZiAocmRldi0+Y29uc3RyYWludHMtPmJvb3Rfb24pCi0JCXJkZXYtPnVzZV9jb3VudCA9IDE7Ci0KIAkvKiBkbyB3ZSBuZWVkIHRvIHNldHVwIG91ciBzdXNwZW5kIHN0YXRlICovCiAJaWYgKGNvbnN0cmFpbnRzLT5pbml0aWFsX3N0YXRlKSB7CiAJCXJldCA9IHN1c3BlbmRfcHJlcGFyZShyZGV2LCBjb25zdHJhaW50cy0+aW5pdGlhbF9zdGF0ZSk7CkBAIC03MTAsMTEgKzc4NywyNyBAQAogCQl9CiAJfQogCi0JLyogaWYgYWx3YXlzX29uIGlzIHNldCB0aGVuIHR1cm4gdGhlIHJlZ3VsYXRvciBvbiBpZiBpdCdzIG5vdAotCSAqIGFscmVhZHkgb24uICovCi0JaWYgKGNvbnN0cmFpbnRzLT5hbHdheXNfb24gJiYgb3BzLT5lbmFibGUgJiYKLQkgICAgKChvcHMtPmlzX2VuYWJsZWQgJiYgIW9wcy0+aXNfZW5hYmxlZChyZGV2KSkgfHwKLQkgICAgICghb3BzLT5pc19lbmFibGVkICYmICFjb25zdHJhaW50cy0+Ym9vdF9vbikpKSB7CisJaWYgKGNvbnN0cmFpbnRzLT5pbml0aWFsX21vZGUpIHsKKwkJaWYgKCFvcHMtPnNldF9tb2RlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBzZXRfbW9kZSBvcGVyYXRpb24gZm9yICVzXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBuYW1lKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IG9wcy0+c2V0X21vZGUocmRldiwgY29uc3RyYWludHMtPmluaXRpYWxfbW9kZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IGZhaWxlZCB0byBzZXQgaW5pdGlhbCBtb2RlIGZvciAlczogJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG5hbWUsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIElmIHRoZSBjb25zdHJhaW50cyBzYXkgdGhlIHJlZ3VsYXRvciBzaG91bGQgYmUgb24gYXQgdGhpcyBwb2ludAorCSAqIGFuZCB3ZSBoYXZlIGNvbnRyb2wgdGhlbiBtYWtlIHN1cmUgaXQgaXMgZW5hYmxlZC4KKwkgKi8KKwlpZiAoKGNvbnN0cmFpbnRzLT5hbHdheXNfb24gfHwgY29uc3RyYWludHMtPmJvb3Rfb24pICYmIG9wcy0+ZW5hYmxlKSB7CiAJCXJldCA9IG9wcy0+ZW5hYmxlKHJkZXYpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGVuYWJsZSAlc1xuIiwKQEAgLTgxNyw2ICs5MTAsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHVuc2V0X3JlZ3VsYXRvcl9zdXBwbGllcyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX21hcCAqbm9kZSwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgJnJlZ3VsYXRvcl9tYXBfbGlzdCwgbGlzdCkgeworCQlpZiAocmRldiA9PSBub2RlLT5yZWd1bGF0b3IpIHsKKwkJCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKKwkJCWtmcmVlKG5vZGUpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCiAjZGVmaW5lIFJFR19TVFJfU0laRQkzMgogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqY3JlYXRlX3JlZ3VsYXRvcihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKQEAgLTg5OCw5ICsxMDA0LDEyIEBACiAgKiBAaWQ6IFN1cHBseSBuYW1lIG9yIHJlZ3VsYXRvciBJRC4KICAqCiAgKiBSZXR1cm5zIGEgc3RydWN0IHJlZ3VsYXRvciBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWd1bGF0b3IgcHJvZHVjZXIsCi0gKiBvciBJU19FUlIoKSBjb25kaXRpb24gY29udGFpbmluZyBlcnJuby4gIFVzZSBvZiBzdXBwbHkgbmFtZXMKLSAqIGNvbmZpZ3VyZWQgdmlhIHJlZ3VsYXRvcl9zZXRfZGV2aWNlX3N1cHBseSgpIGlzIHN0cm9uZ2x5Ci0gKiBlbmNvdXJhZ2VkLgorICogb3IgSVNfRVJSKCkgY29uZGl0aW9uIGNvbnRhaW5pbmcgZXJybm8uCisgKgorICogVXNlIG9mIHN1cHBseSBuYW1lcyBjb25maWd1cmVkIHZpYSByZWd1bGF0b3Jfc2V0X2RldmljZV9zdXBwbHkoKSBpcworICogc3Ryb25nbHkgZW5jb3VyYWdlZC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHN1cHBseSBuYW1lIHVzZWQKKyAqIHNob3VsZCBtYXRjaCB0aGUgbmFtZSB1c2VkIGZvciB0aGUgc3VwcGx5IGFuZC9vciB0aGUgcmVsZXZhbnQKKyAqIGRldmljZSBwaW5zIGluIHRoZSBkYXRhc2hlZXQuCiAgKi8KIHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcl9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKQEAgLTkyMiw4ICsxMDMxLDYgQEAKIAkJCWdvdG8gZm91bmQ7CiAJCX0KIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJyZWd1bGF0b3I6IFVuYWJsZSB0byBnZXQgcmVxdWVzdGVkIHJlZ3VsYXRvcjogJXNcbiIsCi0JICAgICAgIGlkKTsKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAlyZXR1cm4gcmVndWxhdG9yOwogCkBAIC05NjEsMTAgKzEwNjgsNiBAQAogCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAlyZGV2ID0gcmVndWxhdG9yLT5yZGV2OwogCi0JaWYgKFdBUk4ocmVndWxhdG9yLT5lbmFibGVkLCAiUmVsZWFzaW5nIHN1cHBseSAlcyB3aGlsZSBlbmFibGVkXG4iLAotCQkJICAgICAgIHJlZ3VsYXRvci0+c3VwcGx5X25hbWUpKQotCQlfcmVndWxhdG9yX2Rpc2FibGUocmRldik7Ci0KIAkvKiByZW1vdmUgYW55IHN5c2ZzIGVudHJpZXMgKi8KIAlpZiAocmVndWxhdG9yLT5kZXYpIHsKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJnJkZXYtPmRldi5rb2JqLCByZWd1bGF0b3ItPnN1cHBseV9uYW1lKTsKQEAgLTEwMzksMTIgKzExNDIsNyBAQAogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOwotCWlmIChyZWd1bGF0b3ItPmVuYWJsZWQgPT0gMCkKLQkJcmV0ID0gX3JlZ3VsYXRvcl9lbmFibGUocmRldik7Ci0JZWxzZSBpZiAocmVndWxhdG9yLT5lbmFibGVkIDwgMCkKLQkJcmV0ID0gLUVJTzsKLQlpZiAocmV0ID09IDApCi0JCXJlZ3VsYXRvci0+ZW5hYmxlZCsrOworCXJldCA9IF9yZWd1bGF0b3JfZW5hYmxlKHJkZXYpOwogCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMDU1LDYgKzExNTMsMTEgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChXQVJOKHJkZXYtPnVzZV9jb3VudCA8PSAwLAorCQkJInVuYmFsYW5jZWQgZGlzYWJsZXMgZm9yICVzXG4iLAorCQkJcmRldi0+ZGVzYy0+bmFtZSkpCisJCXJldHVybiAtRUlPOworCiAJLyogYXJlIHdlIHRoZSBsYXN0IHVzZXIgYW5kIHBlcm1pdHRlZCB0byBkaXNhYmxlID8gKi8KIAlpZiAocmRldi0+dXNlX2NvdW50ID09IDEgJiYgIXJkZXYtPmNvbnN0cmFpbnRzLT5hbHdheXNfb24pIHsKIApAQCAtMTEwMywxNiArMTIwNiw3IEBACiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7Ci0JaWYgKHJlZ3VsYXRvci0+ZW5hYmxlZCA9PSAxKSB7Ci0JCXJldCA9IF9yZWd1bGF0b3JfZGlzYWJsZShyZGV2KTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmVndWxhdG9yLT51QV9sb2FkID0gMDsKLQl9IGVsc2UgaWYgKFdBUk4ocmVndWxhdG9yLT5lbmFibGVkIDw9IDAsCi0JCQkidW5iYWxhbmNlZCBkaXNhYmxlcyBmb3Igc3VwcGx5ICVzXG4iLAotCQkJcmVndWxhdG9yLT5zdXBwbHlfbmFtZSkpCi0JCXJldCA9IC1FSU87Ci0JaWYgKHJldCA9PSAwKQotCQlyZWd1bGF0b3ItPmVuYWJsZWQtLTsKKwlyZXQgPSBfcmVndWxhdG9yX2Rpc2FibGUocmRldik7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNTksNyArMTI1Myw2IEBACiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJnJlZ3VsYXRvci0+cmRldi0+bXV0ZXgpOwotCXJlZ3VsYXRvci0+ZW5hYmxlZCA9IDA7CiAJcmVndWxhdG9yLT51QV9sb2FkID0gMDsKIAlyZXQgPSBfcmVndWxhdG9yX2ZvcmNlX2Rpc2FibGUocmVndWxhdG9yLT5yZGV2KTsKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvci0+cmRldi0+bXV0ZXgpOwpAQCAtMTIwNCw2ICsxMjk3LDU2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfaXNfZW5hYmxlZCk7CiAKIC8qKgorICogcmVndWxhdG9yX2NvdW50X3ZvbHRhZ2VzIC0gY291bnQgcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSgpIHNlbGVjdG9ycworICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIHNvdXJjZQorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIHNlbGVjdG9ycywgb3IgbmVnYXRpdmUgZXJybm8uICBTZWxlY3RvcnMgYXJlCisgKiBudW1iZXJlZCBzdGFydGluZyBhdCB6ZXJvLCBhbmQgdHlwaWNhbGx5IGNvcnJlc3BvbmQgdG8gYml0ZmllbGRzCisgKiBpbiBoYXJkd2FyZSByZWdpc3RlcnMuCisgKi8KK2ludCByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2CSpyZGV2ID0gcmVndWxhdG9yLT5yZGV2OworCisJcmV0dXJuIHJkZXYtPmRlc2MtPm5fdm9sdGFnZXMgPyA6IC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfY291bnRfdm9sdGFnZXMpOworCisvKioKKyAqIHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UgLSBlbnVtZXJhdGUgc3VwcG9ydGVkIHZvbHRhZ2VzCisgKiBAcmVndWxhdG9yOiByZWd1bGF0b3Igc291cmNlCisgKiBAc2VsZWN0b3I6IGlkZW50aWZ5IHZvbHRhZ2UgdG8gbGlzdAorICogQ29udGV4dDogY2FuIHNsZWVwCisgKgorICogUmV0dXJucyBhIHZvbHRhZ2UgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoKSwKKyAqIHplcm8gaWYgdGhpcyBzZWxlY3RvciBjb2RlIGNhbid0IGJlIHVzZWQgb24gdGhpcyBzeXRlbSwgb3IgYQorICogbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCByZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYJKnJkZXYgPSByZWd1bGF0b3ItPnJkZXY7CisJc3RydWN0IHJlZ3VsYXRvcl9vcHMJKm9wcyA9IHJkZXYtPmRlc2MtPm9wczsKKwlpbnQJCQlyZXQ7CisKKwlpZiAoIW9wcy0+bGlzdF92b2x0YWdlIHx8IHNlbGVjdG9yID49IHJkZXYtPmRlc2MtPm5fdm9sdGFnZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOworCXJldCA9IG9wcy0+bGlzdF92b2x0YWdlKHJkZXYsIHNlbGVjdG9yKTsKKwltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKKworCWlmIChyZXQgPiAwKSB7CisJCWlmIChyZXQgPCByZGV2LT5jb25zdHJhaW50cy0+bWluX3VWKQorCQkJcmV0ID0gMDsKKwkJZWxzZSBpZiAocmV0ID4gcmRldi0+Y29uc3RyYWludHMtPm1heF91VikKKwkJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UpOworCisvKioKICAqIHJlZ3VsYXRvcl9zZXRfdm9sdGFnZSAtIHNldCByZWd1bGF0b3Igb3V0cHV0IHZvbHRhZ2UKICAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBzb3VyY2UKICAqIEBtaW5fdVY6IE1pbmltdW0gcmVxdWlyZWQgdm9sdGFnZSBpbiB1VgpAQCAtMTI0Myw2ICsxMzg2LDcgQEAKIAlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPnNldF92b2x0YWdlKHJkZXYsIG1pbl91ViwgbWF4X3VWKTsKIAogb3V0OgorCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9WT0xUQUdFX0NIQU5HRSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE1NDMsMjAgKzE2ODcsMjMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl91bnJlZ2lzdGVyX25vdGlmaWVyKTsKIAotLyogbm90aWZ5IHJlZ3VsYXRvciBjb25zdW1lcnMgYW5kIGRvd25zdHJlYW0gcmVndWxhdG9yIGNvbnN1bWVycyAqLworLyogbm90aWZ5IHJlZ3VsYXRvciBjb25zdW1lcnMgYW5kIGRvd25zdHJlYW0gcmVndWxhdG9yIGNvbnN1bWVycy4KKyAqIE5vdGUgbXV0ZXggbXVzdCBiZSBoZWxkIGJ5IGNhbGxlci4KKyAqLwogc3RhdGljIHZvaWQgX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCiAJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpfcmRldjsKIAogCS8qIGNhbGwgcmRldiBjaGFpbiBmaXJzdCAqLwotCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZyZGV2LT5ub3RpZmllciwgZXZlbnQsIE5VTEwpOwotCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogCiAJLyogbm93IG5vdGlmeSByZWd1bGF0b3Igd2Ugc3VwcGx5ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShfcmRldiwgJnJkZXYtPnN1cHBseV9saXN0LCBzbGlzdCkKLQkJX25vdGlmaWVyX2NhbGxfY2hhaW4oX3JkZXYsIGV2ZW50LCBkYXRhKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9yZGV2LCAmcmRldi0+c3VwcGx5X2xpc3QsIHNsaXN0KSB7CisJICBtdXRleF9sb2NrKCZfcmRldi0+bXV0ZXgpOworCSAgX25vdGlmaWVyX2NhbGxfY2hhaW4oX3JkZXYsIGV2ZW50LCBkYXRhKTsKKwkgIG11dGV4X3VubG9jaygmX3JkZXYtPm11dGV4KTsKKwl9CiB9CiAKIC8qKgpAQCAtMTcwMyw2ICsxODUwLDcgQEAKICAqCiAgKiBDYWxsZWQgYnkgcmVndWxhdG9yIGRyaXZlcnMgdG8gbm90aWZ5IGNsaWVudHMgYSByZWd1bGF0b3IgZXZlbnQgaGFzCiAgKiBvY2N1cnJlZC4gV2UgYWxzbyBub3RpZnkgcmVndWxhdG9yIGNsaWVudHMgZG93bnN0cmVhbS4KKyAqIE5vdGUgbG9jayBtdXN0IGJlIGhlbGQgYnkgY2FsbGVyLgogICovCiBpbnQgcmVndWxhdG9yX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCiAJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQpAQCAtMTc0NCw2ICsxODkyLDExIEBACiAJCWlmIChzdGF0dXMgPCAwKQogCQkJcmV0dXJuIHN0YXR1czsKIAl9CisJaWYgKG9wcy0+Z2V0X3N0YXR1cykgeworCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCX0KIAogCS8qIHNvbWUgYXR0cmlidXRlcyBhcmUgdHlwZS1zcGVjaWZpYyAqLwogCWlmIChyZGV2LT5kZXNjLT50eXBlID09IFJFR1VMQVRPUl9DVVJSRU5UKSB7CkBAIC0xODI4LDE3ICsxOTgxLDE4IEBACiAgKiByZWd1bGF0b3JfcmVnaXN0ZXIgLSByZWdpc3RlciByZWd1bGF0b3IKICAqIEByZWd1bGF0b3JfZGVzYzogcmVndWxhdG9yIHRvIHJlZ2lzdGVyCiAgKiBAZGV2OiBzdHJ1Y3QgZGV2aWNlIGZvciB0aGUgcmVndWxhdG9yCisgKiBAaW5pdF9kYXRhOiBwbGF0Zm9ybSBwcm92aWRlZCBpbml0IGRhdGEsIHBhc3NlZCB0aHJvdWdoIGJ5IGRyaXZlcgogICogQGRyaXZlcl9kYXRhOiBwcml2YXRlIHJlZ3VsYXRvciBkYXRhCiAgKgogICogQ2FsbGVkIGJ5IHJlZ3VsYXRvciBkcml2ZXJzIHRvIHJlZ2lzdGVyIGEgcmVndWxhdG9yLgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiAgKi8KIHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpyZWd1bGF0b3JfZGVzYywKLQlzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRyaXZlcl9kYXRhKQorCXN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YSwKKwl2b2lkICpkcml2ZXJfZGF0YSkKIHsKIAlzdGF0aWMgYXRvbWljX3QgcmVndWxhdG9yX25vID0gQVRPTUlDX0lOSVQoMCk7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0LCBpOwogCiAJaWYgKHJlZ3VsYXRvcl9kZXNjID09IE5VTEwpCkBAIC0xOTQ1LDYgKzIwOTksNyBAQAogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7CisJdW5zZXRfcmVndWxhdG9yX3N1cHBsaWVzKHJkZXYpOwogCWxpc3RfZGVsKCZyZGV2LT5saXN0KTsKIAlpZiAocmRldi0+c3VwcGx5KQogCQlzeXNmc19yZW1vdmVfbGluaygmcmRldi0+ZGV2LmtvYmosICJzdXBwbHkiKTsKQEAgLTE5ODksNiArMjE0NCwyMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX3N1c3BlbmRfcHJlcGFyZSk7CiAKIC8qKgorICogcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzIC0gdGhlIHN5c3RlbSBoYXMgZnVsbHkgc3BlY2lmaWVkIGNvbnN0cmFpbnRzCisgKgorICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgdGhlIHJlZ3VsYXRvciBBUEkgdG8gZGlzYWJsZSBhbGwKKyAqIHJlZ3VsYXRvcnMgd2hpY2ggaGF2ZSBhIHplcm8gdXNlIGNvdW50IGFuZCBkb24ndCBoYXZlIGFuIGFsd2F5c19vbgorICogY29uc3RyYWludCBpbiBhIGxhdGVfaW5pdGNhbGwuCisgKgorICogVGhlIGludGVudGlvbiBpcyB0aGF0IHRoaXMgd2lsbCBiZWNvbWUgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGluIGEKKyAqIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZSBzbyB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhpcyBmYWNpbGl0eQorICogbm93LgorICovCit2b2lkIHJlZ3VsYXRvcl9oYXNfZnVsbF9jb25zdHJhaW50cyh2b2lkKQoreworCWhhc19mdWxsX2NvbnN0cmFpbnRzID0gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9oYXNfZnVsbF9jb25zdHJhaW50cyk7CisKKy8qKgogICogcmRldl9nZXRfZHJ2ZGF0YSAtIGdldCByZGV2IHJlZ3VsYXRvciBkcml2ZXIgZGF0YQogICogQHJkZXY6IHJlZ3VsYXRvcgogICoKQEAgLTIwNTUsMyArMjIyNyw3NyBAQAogCiAvKiBpbml0IGVhcmx5IHRvIGFsbG93IG91ciBjb25zdW1lcnMgdG8gY29tcGxldGUgc3lzdGVtIGJvb3RpbmcgKi8KIGNvcmVfaW5pdGNhbGwocmVndWxhdG9yX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdCByZWd1bGF0b3JfaW5pdF9jb21wbGV0ZSh2b2lkKQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OworCXN0cnVjdCByZWd1bGF0b3Jfb3BzICpvcHM7CisJc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmM7CisJaW50IGVuYWJsZWQsIHJldDsKKwljb25zdCBjaGFyICpuYW1lOworCisJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOworCisJLyogSWYgd2UgaGF2ZSBhIGZ1bGwgY29uZmlndXJhdGlvbiB0aGVuIGRpc2FibGUgYW55IHJlZ3VsYXRvcnMKKwkgKiB3aGljaCBhcmUgbm90IGluIHVzZSBvciBhbHdheXNfb24uICBUaGlzIHdpbGwgYmVjb21lIHRoZQorCSAqIGRlZmF1bHQgYmVoYXZpb3VyIGluIHRoZSBmdXR1cmUuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmcmVndWxhdG9yX2xpc3QsIGxpc3QpIHsKKwkJb3BzID0gcmRldi0+ZGVzYy0+b3BzOworCQljID0gcmRldi0+Y29uc3RyYWludHM7CisKKwkJaWYgKGMtPm5hbWUpCisJCQluYW1lID0gYy0+bmFtZTsKKwkJZWxzZSBpZiAocmRldi0+ZGVzYy0+bmFtZSkKKwkJCW5hbWUgPSByZGV2LT5kZXNjLT5uYW1lOworCQllbHNlCisJCQluYW1lID0gInJlZ3VsYXRvciI7CisKKwkJaWYgKCFvcHMtPmRpc2FibGUgfHwgYy0+YWx3YXlzX29uKQorCQkJY29udGludWU7CisKKwkJbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOworCisJCWlmIChyZGV2LT51c2VfY291bnQpCisJCQlnb3RvIHVubG9jazsKKworCQkvKiBJZiB3ZSBjYW4ndCByZWFkIHRoZSBzdGF0dXMgYXNzdW1lIGl0J3Mgb24uICovCisJCWlmIChvcHMtPmlzX2VuYWJsZWQpCisJCQllbmFibGVkID0gb3BzLT5pc19lbmFibGVkKHJkZXYpOworCQllbHNlCisJCQllbmFibGVkID0gMTsKKworCQlpZiAoIWVuYWJsZWQpCisJCQlnb3RvIHVubG9jazsKKworCQlpZiAoaGFzX2Z1bGxfY29uc3RyYWludHMpIHsKKwkJCS8qIFdlIGxvZyBzaW5jZSB0aGlzIG1heSBraWxsIHRoZSBzeXN0ZW0gaWYgaXQKKwkJCSAqIGdvZXMgd3JvbmcuICovCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogZGlzYWJsaW5nICVzXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBuYW1lKTsKKwkJCXJldCA9IG9wcy0+ZGlzYWJsZShyZGV2KTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IGNvdWxkbid0IGRpc2FibGUgJXM6ICVkXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSwgcmV0KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBpbnRlbnRpb24gaXMgdGhhdCBpbiBmdXR1cmUgd2Ugd2lsbAorCQkJICogYXNzdW1lIHRoYXQgZnVsbCBjb25zdHJhaW50cyBhcmUgcHJvdmlkZWQKKwkJCSAqIHNvIHdhcm4gZXZlbiBpZiB3ZSBhcmVuJ3QgZ29pbmcgdG8gZG8KKwkJCSAqIGFueXRoaW5nIGhlcmUuCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IGluY29tcGxldGUgY29uc3RyYWludHMsIGxlYXZpbmcgJXMgb25cbiIsCisJCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQl9CisKK3VubG9jazoKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwocmVndWxhdG9yX2luaXRfY29tcGxldGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDN4LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYwppbmRleCBmZTc3NzMwLi43MmIxNTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYwpAQCAtNDcxLDcgKzQ3MSw4IEBACiAJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xIHx8IHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xNSkKIAkJcmktPmRlc2Mub3BzID0gJmRhOTAzMF9yZWd1bGF0b3JfbGRvMV8xNV9vcHM7CiAKLQlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyaS0+ZGVzYywgJnBkZXYtPmRldiwgcmkpOworCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnJpLT5kZXNjLCAmcGRldi0+ZGV2LAorCQkJCSAgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHJpKTsKIAlpZiAoSVNfRVJSKHJkZXYpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciByZWd1bGF0b3IgJXNcbiIsCiAJCQkJcmktPmRlc2MubmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwppbmRleCBkMzFkYjNlLi4yM2Q1NTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKQEAgLTczLDcgKzczLDggQEAKIAogCWRydmRhdGEtPm1pY3Jvdm9sdHMgPSBjb25maWctPm1pY3Jvdm9sdHM7CiAKLQlkcnZkYXRhLT5kZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmRydmRhdGEtPmRlc2MsIGRydmRhdGEpOworCWRydmRhdGEtPmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmZHJ2ZGF0YS0+ZGVzYywgJnBkZXYtPmRldiwKKwkJCQkJICBjb25maWctPmluaXRfZGF0YSwgZHJ2ZGF0YSk7CiAJaWYgKElTX0VSUihkcnZkYXRhLT5kZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIoZHJ2ZGF0YS0+ZGV2KTsKIAkJZ290byBlcnJfbmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3BjZjUwNjMzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMKaW5kZXggNGNjODVlYy4uY2Q3NjFkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMKQEAgLTI4NCw3ICsyODQsOCBAQAogCS8qIEFscmVhZHkgc2V0IGJ5IGNvcmUgZHJpdmVyICovCiAJcGNmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyZWd1bGF0b3JzW3BkZXYtPmlkXSwgJnBkZXYtPmRldiwgcGNmKTsKKwlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyZWd1bGF0b3JzW3BkZXYtPmlkXSwgJnBkZXYtPmRldiwKKwkJCQkgIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBwY2YpOwogCWlmIChJU19FUlIocmRldikpCiAJCXJldHVybiBQVFJfRVJSKHJkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90d2w0MDMwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHdsNDAzMC1yZWd1bGF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjAzMmZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHdsNDAzMC1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDUwMCBAQAorLyoKKyAqIHR3bDQwMzAtcmVndWxhdG9yLmMgLS0gc3VwcG9ydCByZWd1bGF0b3JzIGluIHR3bDQwMzAgZmFtaWx5IGNoaXBzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisKKworLyoKKyAqIFRoZSBUV0w0MDMwL1RXNTAzMC9UUFM2NTl4MCBmYW1pbHkgY2hpcHMgaW5jbHVkZSBwb3dlciBtYW5hZ2VtZW50LCBhCisgKiBVU0IgT1RHIHRyYW5zY2VpdmVyLCBhbiBSVEMsIEFEQywgUFdNLCBhbmQgbG90cyBtb3JlLiAgU29tZSB2ZXJzaW9ucworICogaW5jbHVkZSBhbiBhdWRpbyBjb2RlYywgYmF0dGVyeSBjaGFyZ2VyLCBhbmQgbW9yZSB2b2x0YWdlIHJlZ3VsYXRvcnMuCisgKiBUaGVzZSBjaGlwcyBhcmUgb2Z0ZW4gdXNlZCBpbiBPTUFQLWJhc2VkIHN5c3RlbXMuCisgKgorICogVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzb2Z0d2FyZS1iYXNlZCByZXNvdXJjZSBjb250cm9sIGZvciB2YXJpb3VzCisgKiB2b2x0YWdlIHJlZ3VsYXRvcnMuICBUaGlzIGlzIHVzdWFsbHkgYXVnbWVudGVkIHdpdGggc3RhdGUgbWFjaGluZQorICogYmFzZWQgY29udHJvbC4KKyAqLworCitzdHJ1Y3QgdHdscmVnX2luZm8geworCS8qIHN0YXJ0IG9mIHJlZ3VsYXRvcidzIFBNX1JFQ0VJVkVSIGNvbnRyb2wgcmVnaXN0ZXIgYmFuayAqLworCXU4CQkJYmFzZTsKKworCS8qIHR3bDQwMzAgcmVzb3VyY2UgSUQsIGZvciByZXNvdXJjZSBjb250cm9sIHN0YXRlIG1hY2hpbmUgKi8KKwl1OAkJCWlkOworCisJLyogdm9sdGFnZSBpbiBtViA9IHRhYmxlW1ZTRUxdOyB0YWJsZV9sZW4gbXVzdCBiZSBhIHBvd2VyLW9mLXR3byAqLworCXU4CQkJdGFibGVfbGVuOworCWNvbnN0IHUxNgkJKnRhYmxlOworCisJLyogY2hpcCBjb25zdHJhaW50cyBvbiByZWd1bGF0b3IgYmVoYXZpb3IgKi8KKwl1MTYJCQltaW5fbVY7CisKKwkvKiB1c2VkIGJ5IHJlZ3VsYXRvciBjb3JlICovCisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjCWRlc2M7Cit9OworCisKKy8qIExETyBjb250cm9sIHJlZ2lzdGVycyAuLi4gb2Zmc2V0IGlzIGZyb20gdGhlIGJhc2Ugb2YgaXRzIHJlZ2lzdGVyIGJhbmsuCisgKiBUaGUgZmlyc3QgdGhyZWUgcmVnaXN0ZXJzIG9mIGFsbCBwb3dlciByZXNvdXJjZSBiYW5rcyBoZWxwIGhhcmR3YXJlIHRvCisgKiBtYW5hZ2UgdGhlIHZhcmlvdXMgcmVzb3VyY2UgZ3JvdXBzLgorICovCisjZGVmaW5lIFZSRUdfR1JQCQkwCisjZGVmaW5lIFZSRUdfVFlQRQkJMQorI2RlZmluZSBWUkVHX1JFTUFQCQkyCisjZGVmaW5lIFZSRUdfREVESUNBVEVECQkzCS8qIExETyBjb250cm9sICovCisKKworc3RhdGljIGlubGluZSBpbnQKK3R3bDQwMzByZWdfcmVhZChzdHJ1Y3QgdHdscmVnX2luZm8gKmluZm8sIHVuc2lnbmVkIG9mZnNldCkKK3sKKwl1OCB2YWx1ZTsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwKKwkJCSZ2YWx1ZSwgaW5mby0+YmFzZSArIG9mZnNldCk7CisJcmV0dXJuIChzdGF0dXMgPCAwKSA/IHN0YXR1cyA6IHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIGludAordHdsNDAzMHJlZ193cml0ZShzdHJ1Y3QgdHdscmVnX2luZm8gKmluZm8sIHVuc2lnbmVkIG9mZnNldCwgdTggdmFsdWUpCit7CisJcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLAorCQkJdmFsdWUsIGluZm8tPmJhc2UgKyBvZmZzZXQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBnZW5lcmljIHBvd2VyIHJlc291cmNlIG9wZXJhdGlvbnMsIHdoaWNoIHdvcmsgb24gYWxsIHJlZ3VsYXRvcnMgKi8KKworc3RhdGljIGludCB0d2w0MDMwcmVnX2dycChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlyZXR1cm4gdHdsNDAzMHJlZ19yZWFkKHJkZXZfZ2V0X2RydmRhdGEocmRldiksIFZSRUdfR1JQKTsKK30KKworLyoKKyAqIEVuYWJsZS9kaXNhYmxlIHJlZ3VsYXRvcnMgYnkgam9pbmluZy9sZWF2aW5nIHRoZSBQMSAocHJvY2Vzc29yKSBncm91cC4KKyAqIFdlIGFzc3VtZSBub2JvZHkgZWxzZSBpcyB1cGRhdGluZyB0aGUgREVWX0dSUCByZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBQM19HUlAJCUJJVCg3KQkJLyogInBlcmlwaGVyYWxzIiAqLworI2RlZmluZSBQMl9HUlAJCUJJVCg2KQkJLyogc2Vjb25kYXJ5IHByb2Nlc3NvciwgbW9kZW0sIGV0YyAqLworI2RlZmluZSBQMV9HUlAJCUJJVCg1KQkJLyogQ1BVL0xpbnV4ICovCisKK3N0YXRpYyBpbnQgdHdsNDAzMHJlZ19pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCWludAlzdGF0ZSA9IHR3bDQwMzByZWdfZ3JwKHJkZXYpOworCisJaWYgKHN0YXRlIDwgMCkKKwkJcmV0dXJuIHN0YXRlOworCisJcmV0dXJuIChzdGF0ZSAmIFAxX0dSUCkgIT0gMDsKK30KKworc3RhdGljIGludCB0d2w0MDMwcmVnX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludAkJCWdycDsKKworCWdycCA9IHR3bDQwMzByZWdfcmVhZChpbmZvLCBWUkVHX0dSUCk7CisJaWYgKGdycCA8IDApCisJCXJldHVybiBncnA7CisKKwlncnAgfD0gUDFfR1JQOworCXJldHVybiB0d2w0MDMwcmVnX3dyaXRlKGluZm8sIFZSRUdfR1JQLCBncnApOworfQorCitzdGF0aWMgaW50IHR3bDQwMzByZWdfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludAkJCWdycDsKKworCWdycCA9IHR3bDQwMzByZWdfcmVhZChpbmZvLCBWUkVHX0dSUCk7CisJaWYgKGdycCA8IDApCisJCXJldHVybiBncnA7CisKKwlncnAgJj0gflAxX0dSUDsKKwlyZXR1cm4gdHdsNDAzMHJlZ193cml0ZShpbmZvLCBWUkVHX0dSUCwgZ3JwKTsKK30KKworc3RhdGljIGludCB0d2w0MDMwcmVnX2dldF9zdGF0dXMoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJaW50CXN0YXRlID0gdHdsNDAzMHJlZ19ncnAocmRldik7CisKKwlpZiAoc3RhdGUgPCAwKQorCQlyZXR1cm4gc3RhdGU7CisJc3RhdGUgJj0gMHgwZjsKKworCS8qIGFzc3VtZSBzdGF0ZSAhPSBXQVJNX1JFU0VUOyB3ZSdkIG5vdCBiZSBydW5uaW5nLi4uICAqLworCWlmICghc3RhdGUpCisJCXJldHVybiBSRUdVTEFUT1JfU1RBVFVTX09GRjsKKwlyZXR1cm4gKHN0YXRlICYgQklUKDMpKQorCQk/IFJFR1VMQVRPUl9TVEFUVVNfTk9STUFMCisJCTogUkVHVUxBVE9SX1NUQVRVU19TVEFOREJZOworfQorCitzdGF0aWMgaW50IHR3bDQwMzByZWdfc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIG1vZGUpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1bnNpZ25lZAkJbWVzc2FnZTsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiBXZSBjYW4gb25seSBzZXQgdGhlIG1vZGUgdGhyb3VnaCBzdGF0ZSBtYWNoaW5lIGNvbW1hbmRzLi4uICovCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6CisJCW1lc3NhZ2UgPSBNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgaW5mby0+aWQsIFJFU19TVEFURV9BQ1RJVkUpOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk6CisJCW1lc3NhZ2UgPSBNU0dfU0lOR1VMQVIoREVWX0dSUF9QMSwgaW5mby0+aWQsIFJFU19TVEFURV9TTEVFUCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEVuc3VyZSB0aGUgcmVzb3VyY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHNvbWUgZ3JvdXAgKi8KKwlzdGF0dXMgPSB0d2w0MDMwcmVnX2dycChyZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlpZiAoIShzdGF0dXMgJiAoUDNfR1JQIHwgUDJfR1JQIHwgUDFfR1JQKSkpCisJCXJldHVybiAtRUFDQ0VTOworCisJc3RhdHVzID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLAorCQkJbWVzc2FnZSA+PiA4LCAweDE1IC8qIFBCX1dPUkRfTVNCICovICk7CisJaWYgKHN0YXR1cyA+PSAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwKKwkJCW1lc3NhZ2UsIDB4MTYgLyogUEJfV09SRF9MU0IgKi8gKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFN1cHBvcnQgZm9yIGFkanVzdGFibGUtdm9sdGFnZSBMRE9zIHVzZXMgYSBmb3VyIGJpdCAob3IgbGVzcykgdm9sdGFnZQorICogc2VsZWN0IGZpZWxkIGluIGl0cyBjb250cm9sIHJlZ2lzdGVyLiAgIFdlIHVzZSB0YWJsZXMgaW5kZXhlZCBieSBWU0VMCisgKiB0byByZWNvcmQgdm9sdGFnZXMgaW4gbWlsbGlWb2x0cy4gIChBY2N1cmFjeSBpcyBhYm91dCB0aHJlZSBwZXJjZW50LikKKyAqCisgKiBOb3RlIHRoYXQgVlNFTCB2YWx1ZXMgZm9yIFZBVVgyIGNoYW5nZWQgaW4gdHdsNTAzMCBhbmQgbmV3ZXIgc2lsaWNvbjsKKyAqIGN1cnJlbnRseSBoYW5kbGVkIGJ5IGxpc3RpbmcgdHdvIHNsaWdodGx5IGRpZmZlcmVudCBWQVVYMiByZWd1bGF0b3JzLAorICogb25seSBvbmUgb2Ygd2hpY2ggd2lsbCBiZSBjb25maWd1cmVkLgorICoKKyAqIFZTRUwgdmFsdWVzIGRvY3VtZW50ZWQgYXMgIlRJIGNhbm5vdCBzdXBwb3J0IHRoZXNlIHZhbHVlcyIgYXJlIGZsYWdnZWQKKyAqIGluIHRoZXNlIHRhYmxlcyBhcyBVTlNVUCgpIHZhbHVlczsgd2Ugbm9ybWFsbHkgd29uJ3QgYXNzaWduIHRoZW0uCisgKgorICogVkFVWDMgYXQgM1YgaXMgaW5jb3JyZWN0bHkgbGlzdGVkIGluIHNvbWUgVEkgbWFudWFscyBhcyB1bnN1cHBvcnRlZC4KKyAqIFRJIGFyZSByZXZpc2luZyB0aGUgdHdsNTAzMC90cHM2NTl4MCBzcGVjcyB0byBzdXBwb3J0IHRoYXQgMy4wViBzZXR0aW5nLgorICovCisjaWZkZWYgQ09ORklHX1RXTDQwMzBfQUxMT1dfVU5TVVBQT1JURUQKKyNkZWZpbmUgVU5TVVBfTUFTSwkweDAwMDAKKyNlbHNlCisjZGVmaW5lIFVOU1VQX01BU0sJMHg4MDAwCisjZW5kaWYKKworI2RlZmluZSBVTlNVUCh4KQkoVU5TVVBfTUFTSyB8ICh4KSkKKyNkZWZpbmUgSVNfVU5TVVAoeCkJKFVOU1VQX01BU0sgJiAoeCkpCisjZGVmaW5lIExET19NVih4KQkoflVOU1VQX01BU0sgJiAoeCkpCisKKworc3RhdGljIGNvbnN0IHUxNiBWQVVYMV9WU0VMX3RhYmxlW10gPSB7CisJVU5TVVAoMTUwMCksIFVOU1VQKDE4MDApLCAyNTAwLCAyODAwLAorCTMwMDAsIDMwMDAsIDMwMDAsIDMwMDAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWQVVYMl80MDMwX1ZTRUxfdGFibGVbXSA9IHsKKwlVTlNVUCgxMDAwKSwgVU5TVVAoMTAwMCksIFVOU1VQKDEyMDApLCAxMzAwLAorCTE1MDAsIDE4MDAsIFVOU1VQKDE4NTApLCAyNTAwLAorCVVOU1VQKDI2MDApLCAyODAwLCBVTlNVUCgyODUwKSwgVU5TVVAoMzAwMCksCisJVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksCit9Oworc3RhdGljIGNvbnN0IHUxNiBWQVVYMl9WU0VMX3RhYmxlW10gPSB7CisJMTcwMCwgMTcwMCwgMTkwMCwgMTMwMCwKKwkxNTAwLCAxODAwLCAyMDAwLCAyNTAwLAorCTIxMDAsIDI4MDAsIDIyMDAsIDIzMDAsCisJMjQwMCwgMjQwMCwgMjQwMCwgMjQwMCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZBVVgzX1ZTRUxfdGFibGVbXSA9IHsKKwkxNTAwLCAxODAwLCAyNTAwLCAyODAwLAorCTMwMDAsIDMwMDAsIDMwMDAsIDMwMDAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWQVVYNF9WU0VMX3RhYmxlW10gPSB7CisJNzAwLCAxMDAwLCAxMjAwLCBVTlNVUCgxMzAwKSwKKwkxNTAwLCAxODAwLCBVTlNVUCgxODUwKSwgMjUwMCwKKwlVTlNVUCgyNjAwKSwgMjgwMCwgVU5TVVAoMjg1MCksIFVOU1VQKDMwMDApLAorCVVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVk1NQzFfVlNFTF90YWJsZVtdID0geworCTE4NTAsIDI4NTAsIDMwMDAsIDMxNTAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWTU1DMl9WU0VMX3RhYmxlW10gPSB7CisJVU5TVVAoMTAwMCksIFVOU1VQKDEwMDApLCBVTlNVUCgxMjAwKSwgVU5TVVAoMTMwMCksCisJVU5TVVAoMTUwMCksIFVOU1VQKDE4MDApLCAxODUwLCBVTlNVUCgyNTAwKSwKKwkyNjAwLCAyODAwLCAyODUwLCAzMDAwLAorCTMxNTAsIDMxNTAsIDMxNTAsIDMxNTAsCit9Oworc3RhdGljIGNvbnN0IHUxNiBWUExMMV9WU0VMX3RhYmxlW10gPSB7CisJMTAwMCwgMTIwMCwgMTMwMCwgMTgwMCwKKwlVTlNVUCgyODAwKSwgVU5TVVAoMzAwMCksIFVOU1VQKDMwMDApLCBVTlNVUCgzMDAwKSwKK307CitzdGF0aWMgY29uc3QgdTE2IFZQTEwyX1ZTRUxfdGFibGVbXSA9IHsKKwk3MDAsIDEwMDAsIDEyMDAsIDEzMDAsCisJVU5TVVAoMTUwMCksIDE4MDAsIFVOU1VQKDE4NTApLCBVTlNVUCgyNTAwKSwKKwlVTlNVUCgyNjAwKSwgVU5TVVAoMjgwMCksIFVOU1VQKDI4NTApLCBVTlNVUCgzMDAwKSwKKwlVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwKK307CitzdGF0aWMgY29uc3QgdTE2IFZTSU1fVlNFTF90YWJsZVtdID0geworCVVOU1VQKDEwMDApLCBVTlNVUCgxMjAwKSwgVU5TVVAoMTMwMCksIDE4MDAsCisJMjgwMCwgMzAwMCwgMzAwMCwgMzAwMCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZEQUNfVlNFTF90YWJsZVtdID0geworCTEyMDAsIDEzMDAsIDE4MDAsIDE4MDAsCit9OworCisKK3N0YXRpYyBpbnQgdHdsNDAzMGxkb19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGluZGV4KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50CQkJbVYgPSBpbmZvLT50YWJsZVtpbmRleF07CisKKwlyZXR1cm4gSVNfVU5TVVAobVYpID8gMCA6IChMRE9fTVYobVYpICogMTAwMCk7Cit9CisKK3N0YXRpYyBpbnQKK3R3bDQwMzBsZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQJCQl2c2VsOworCisJZm9yICh2c2VsID0gMDsgdnNlbCA8IGluZm8tPnRhYmxlX2xlbjsgdnNlbCsrKSB7CisJCWludCBtViA9IGluZm8tPnRhYmxlW3ZzZWxdOworCQlpbnQgdVY7CisKKwkJaWYgKElTX1VOU1VQKG1WKSkKKwkJCWNvbnRpbnVlOworCQl1ViA9IExET19NVihtVikgKiAxMDAwOworCisJCS8qIFJFVklTSVQgZm9yIFZBVVgyLCBmaXJzdCBtYXRjaCBtYXkgbm90IGJlIGJlc3QvbG93ZXN0ICovCisKKwkJLyogdXNlIHRoZSBmaXJzdCBpbi1yYW5nZSB2YWx1ZSAqLworCQlpZiAobWluX3VWIDw9IHVWICYmIHVWIDw9IG1heF91VikKKwkJCXJldHVybiB0d2w0MDMwcmVnX3dyaXRlKGluZm8sIFZSRUdfREVESUNBVEVELCB2c2VsKTsKKwl9CisKKwlyZXR1cm4gLUVET007Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMGxkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludAkJCXZzZWwgPSB0d2w0MDMwcmVnX3JlYWQoaW5mbywgVlJFR19ERURJQ0FURUQpOworCisJaWYgKHZzZWwgPCAwKQorCQlyZXR1cm4gdnNlbDsKKworCXZzZWwgJj0gaW5mby0+dGFibGVfbGVuIC0gMTsKKwlyZXR1cm4gTERPX01WKGluZm8tPnRhYmxlW3ZzZWxdKSAqIDEwMDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0d2w0MDMwbGRvX29wcyA9IHsKKwkubGlzdF92b2x0YWdlCT0gdHdsNDAzMGxkb19saXN0X3ZvbHRhZ2UsCisKKwkuc2V0X3ZvbHRhZ2UJPSB0d2w0MDMwbGRvX3NldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZQk9IHR3bDQwMzBsZG9fZ2V0X3ZvbHRhZ2UsCisKKwkuZW5hYmxlCQk9IHR3bDQwMzByZWdfZW5hYmxlLAorCS5kaXNhYmxlCT0gdHdsNDAzMHJlZ19kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gdHdsNDAzMHJlZ19pc19lbmFibGVkLAorCisJLnNldF9tb2RlCT0gdHdsNDAzMHJlZ19zZXRfbW9kZSwKKworCS5nZXRfc3RhdHVzCT0gdHdsNDAzMHJlZ19nZXRfc3RhdHVzLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEZpeGVkIHZvbHRhZ2UgTERPcyBkb24ndCBoYXZlIGEgVlNFTCBmaWVsZCB0byB1cGRhdGUuCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMGZpeGVkX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCXJldHVybiBpbmZvLT5taW5fbVYgKiAxMDAwOworfQorCitzdGF0aWMgaW50IHR3bDQwMzBmaXhlZF9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmV0dXJuIGluZm8tPm1pbl9tViAqIDEwMDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0d2w0MDMwZml4ZWRfb3BzID0geworCS5saXN0X3ZvbHRhZ2UJPSB0d2w0MDMwZml4ZWRfbGlzdF92b2x0YWdlLAorCisJLmdldF92b2x0YWdlCT0gdHdsNDAzMGZpeGVkX2dldF92b2x0YWdlLAorCisJLmVuYWJsZQkJPSB0d2w0MDMwcmVnX2VuYWJsZSwKKwkuZGlzYWJsZQk9IHR3bDQwMzByZWdfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZAk9IHR3bDQwMzByZWdfaXNfZW5hYmxlZCwKKworCS5zZXRfbW9kZQk9IHR3bDQwMzByZWdfc2V0X21vZGUsCisKKwkuZ2V0X3N0YXR1cwk9IHR3bDQwMzByZWdfZ2V0X3N0YXR1cywKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgVFdMX0FESlVTVEFCTEVfTERPKGxhYmVsLCBvZmZzZXQsIG51bSkgeyBcCisJLmJhc2UgPSBvZmZzZXQsIFwKKwkuaWQgPSBudW0sIFwKKwkudGFibGVfbGVuID0gQVJSQVlfU0laRShsYWJlbCMjX1ZTRUxfdGFibGUpLCBcCisJLnRhYmxlID0gbGFiZWwjI19WU0VMX3RhYmxlLCBcCisJLmRlc2MgPSB7IFwKKwkJLm5hbWUgPSAjbGFiZWwsIFwKKwkJLmlkID0gVFdMNDAzMF9SRUdfIyNsYWJlbCwgXAorCQkubl92b2x0YWdlcyA9IEFSUkFZX1NJWkUobGFiZWwjI19WU0VMX3RhYmxlKSwgXAorCQkub3BzID0gJnR3bDQwMzBsZG9fb3BzLCBcCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsIFwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsIFwKKwkJfSwgXAorCX0KKworI2RlZmluZSBUV0xfRklYRURfTERPKGxhYmVsLCBvZmZzZXQsIG1Wb2x0cywgbnVtKSB7IFwKKwkuYmFzZSA9IG9mZnNldCwgXAorCS5pZCA9IG51bSwgXAorCS5taW5fbVYgPSBtVm9sdHMsIFwKKwkuZGVzYyA9IHsgXAorCQkubmFtZSA9ICNsYWJlbCwgXAorCQkuaWQgPSBUV0w0MDMwX1JFR18jI2xhYmVsLCBcCisJCS5uX3ZvbHRhZ2VzID0gMSwgXAorCQkub3BzID0gJnR3bDQwMzBmaXhlZF9vcHMsIFwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwgXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwgXAorCQl9LCBcCisJfQorCisvKgorICogV2UgbGlzdCByZWd1bGF0b3JzIGhlcmUgaWYgc3lzdGVtcyBuZWVkIHNvbWUgbGV2ZWwgb2YKKyAqIHNvZnR3YXJlIGNvbnRyb2wgb3ZlciB0aGVtIGFmdGVyIGJvb3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHdscmVnX2luZm8gdHdsNDAzMF9yZWdzW10gPSB7CisJVFdMX0FESlVTVEFCTEVfTERPKFZBVVgxLCAweDE3LCAxKSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVkFVWDJfNDAzMCwgMHgxYiwgMiksCisJVFdMX0FESlVTVEFCTEVfTERPKFZBVVgyLCAweDFiLCAyKSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVkFVWDMsIDB4MWYsIDMpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWQVVYNCwgMHgyMywgNCksCisJVFdMX0FESlVTVEFCTEVfTERPKFZNTUMxLCAweDI3LCA1KSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVk1NQzIsIDB4MmIsIDYpLAorCS8qCisJVFdMX0FESlVTVEFCTEVfTERPKFZQTEwxLCAweDJmLCA3KSwKKwkqLworCVRXTF9BREpVU1RBQkxFX0xETyhWUExMMiwgMHgzMywgOCksCisJVFdMX0FESlVTVEFCTEVfTERPKFZTSU0sIDB4MzcsIDkpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWREFDLCAweDNiLCAxMCksCisJLyoKKwlUV0xfQURKVVNUQUJMRV9MRE8oVklOVEFOQTEsIDB4M2YsIDExKSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVklOVEFOQTIsIDB4NDMsIDEyKSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVklOVERJRywgMHg0NywgMTMpLAorCVRXTF9TTVBTKFZJTywgMHg0YiwgMTQpLAorCVRXTF9TTVBTKFZERDEsIDB4NTUsIDE1KSwKKwlUV0xfU01QUyhWREQyLCAweDYzLCAxNiksCisJICovCisJVFdMX0ZJWEVEX0xETyhWVVNCMVY1LCAweDcxLCAxNTAwLCAxNyksCisJVFdMX0ZJWEVEX0xETyhWVVNCMVY4LCAweDc0LCAxODAwLCAxOCksCisJVFdMX0ZJWEVEX0xETyhWVVNCM1YxLCAweDc3LCAzMTAwLCAxOSksCisJLyogVlVTQkNQIGlzIG1hbmFnZWQgKm9ubHkqIGJ5IHRoZSBVU0Igc3ViY2hpcCAqLworfTsKKworc3RhdGljIGludCB0d2w0MDMwcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50CQkJCWk7CisJc3RydWN0IHR3bHJlZ19pbmZvCQkqaW5mbzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkqaW5pdGRhdGE7CisJc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMJKmM7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYJCSpyZGV2OworCisJZm9yIChpID0gMCwgaW5mbyA9IE5VTEw7IGkgPCBBUlJBWV9TSVpFKHR3bDQwMzBfcmVncyk7IGkrKykgeworCQlpZiAodHdsNDAzMF9yZWdzW2ldLmRlc2MuaWQgIT0gcGRldi0+aWQpCisJCQljb250aW51ZTsKKwkJaW5mbyA9IHR3bDQwMzBfcmVncyArIGk7CisJCWJyZWFrOworCX0KKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOworCisJaW5pdGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIWluaXRkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENvbnN0cmFpbiBib2FyZC1zcGVjaWZpYyBjYXBhYmlsaXRpZXMgYWNjb3JkaW5nIHRvIHdoYXQKKwkgKiB0aGlzIGRyaXZlciBhbmQgdGhlIGNoaXAgaXRzZWxmIGNhbiBhY3R1YWxseSBkby4KKwkgKi8KKwljID0gJmluaXRkYXRhLT5jb25zdHJhaW50czsKKwljLT52YWxpZF9tb2Rlc19tYXNrICY9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk7CisJYy0+dmFsaWRfb3BzX21hc2sgJj0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTOworCisJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmaW5mby0+ZGVzYywgJnBkZXYtPmRldiwgaW5pdGRhdGEsIGluZm8pOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgJXMsICVsZFxuIiwKKwkJCQlpbmZvLT5kZXNjLm5hbWUsIFBUUl9FUlIocmRldikpOworCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CisKKwkvKiBOT1RFOiAgbWFueSByZWd1bGF0b3JzIHN1cHBvcnQgc2hvcnQtY2lyY3VpdCBJUlFzIChwcmVzZW50YWJsZQorCSAqIGFzIFJFR1VMQVRPUl9PVkVSX0NVUlJFTlQgbm90aWZpY2F0aW9ucz8pIGNvbmZpZ3VyZWQgdmlhOgorCSAqICAtIFNDX0NPTkZJRworCSAqICAtIFNDX0RFVEVDVDEgKHZpbnRhbmEyLCB2bW1jMS8yLCB2YXV4MS8yLzMvNCkKKwkgKiAgLSBTQ19ERVRFQ1QyICh2dXNiLCB2ZGFjLCB2aW8sIHZkZDEvMiwgdnBsbDIpCisJICogIC0gSVRfQ09ORklHCisJICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdHdsNDAzMHJlZ19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZWd1bGF0b3JfdW5yZWdpc3RlcihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJcmV0dXJuIDA7Cit9CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06dHdsNDAzMF9yZWciKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHdsNDAzMHJlZ19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHR3bDQwMzByZWdfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0d2w0MDMwcmVnX3JlbW92ZSksCisJLyogTk9URTogc2hvcnQgbmFtZSwgdG8gd29yayBhcm91bmQgZHJpdmVyIG1vZGVsIHRydW5jYXRpb24gb2YKKwkgKiAidHdsNDAzMF9yZWd1bGF0b3IuMTIiIChhbmQgZnJpZW5kcykgdG8gInR3bDQwMzBfcmVndWxhdG9yLjEiLgorCSAqLworCS5kcml2ZXIubmFtZQk9ICJ0d2w0MDMwX3JlZyIsCisJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHdsNDAzMHJlZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdHdsNDAzMHJlZ19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHR3bDQwMzByZWdfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0d2w0MDMwcmVnX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHdsNDAzMHJlZ19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodHdsNDAzMHJlZ19leGl0KQorCitNT0RVTEVfREVTQ1JJUFRJT04oIlRXTDQwMzAgcmVndWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jCmluZGV4IDVkZGI0NjQuLjNkMDgzNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMKQEAgLTIyNiwxMyArMjI2LDE3IEBACiAJdW5zaWduZWQgaW50IG1vZGU7CiAJaW50IHJldDsKIAotCWlmIChzdHJuY21wKGJ1ZiwgImZhc3QiLCBzdHJsZW4oImZhc3QiKSkgPT0gMCkKKwkvKgorCSAqIHN5c2ZzX3N0cmVxKCkgZG9lc24ndCBuZWVkIHRoZSBcbidzLCBidXQgd2UgYWRkIHRoZW0gc28gdGhlIHN0cmluZ3MKKwkgKiB3aWxsIGJlIHNoYXJlZCB3aXRoIHNob3dfbW9kZSgpLCBhYm92ZS4KKwkgKi8KKwlpZiAoc3lzZnNfc3RyZXEoYnVmLCAiZmFzdFxuIikgPT0gMCkKIAkJbW9kZSA9IFJFR1VMQVRPUl9NT0RFX0ZBU1Q7Ci0JZWxzZSBpZiAoc3RybmNtcChidWYsICJub3JtYWwiLCBzdHJsZW4oIm5vcm1hbCIpKSA9PSAwKQorCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIm5vcm1hbFxuIikgPT0gMCkKIAkJbW9kZSA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKLQllbHNlIGlmIChzdHJuY21wKGJ1ZiwgImlkbGUiLCBzdHJsZW4oImlkbGUiKSkgPT0gMCkKKwllbHNlIGlmIChzeXNmc19zdHJlcShidWYsICJpZGxlXG4iKSA9PSAwKQogCQltb2RlID0gUkVHVUxBVE9SX01PREVfSURMRTsKLQllbHNlIGlmIChzdHJuY21wKGJ1ZiwgInN0YW5kYnkiLCBzdHJsZW4oInN0YW5kYnkiKSkgPT0gMCkKKwllbHNlIGlmIChzeXNmc19zdHJlcShidWYsICJzdGFuZGJ5XG4iKSA9PSAwKQogCQltb2RlID0gUkVHVUxBVE9SX01PREVfU1RBTkRCWTsKIAllbHNlIHsKIAkJZGV2X2VycihkZXYsICJDb25maWd1cmluZyBpbnZhbGlkIG1vZGVcbiIpOwpAQCAtMjU2LDcgKzI2MCw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobWF4X21pY3JvYW1wcywgMDY2Niwgc2hvd19tYXhfdUEsIHNldF9tYXhfdUEpOwogc3RhdGljIERFVklDRV9BVFRSKG1vZGUsIDA2NjYsIHNob3dfbW9kZSwgc2V0X21vZGUpOwogCi1zdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cmlidXRlc1tdID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyaWJ1dGVzW10gPSB7CiAJJmRldl9hdHRyX21pbl9taWNyb3ZvbHRzLAogCSZkZXZfYXR0cl9tYXhfbWljcm92b2x0cywKIAkmZGV2X2F0dHJfbWluX21pY3JvYW1wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwppbmRleCA1MDU2ZTIzLi43NzFlY2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCkBAIC0yNCw2ICsyNCw5IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKKy8qIE1heGltdW0gdmFsdWUgcG9zc2libGUgZm9yIFZTRUwgKi8KKyNkZWZpbmUgV004MzUwX0RDRENfTUFYX1ZTRUwgMHg2NgorCiAvKiBNaWNyb2FtcHMgKi8KIHN0YXRpYyBjb25zdCBpbnQgaXNpbmtfY3VyW10gPSB7CiAJNCwKQEAgLTM4NSw2ICszODgsMTQgQEAKIAlyZXR1cm4gd204MzUwX2RjZGNfdmFsX3RvX212b2x0cyh2YWwpICogMTAwMDsKIH0KIAorc3RhdGljIGludCB3bTgzNTBfZGNkY19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgIHVuc2lnbmVkIHNlbGVjdG9yKQoreworCWlmIChzZWxlY3RvciA+IFdNODM1MF9EQ0RDX01BWF9WU0VMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gd204MzUwX2RjZGNfdmFsX3RvX212b2x0cyhzZWxlY3RvcikgKiAxMDAwOworfQorCiBzdGF0aWMgaW50IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCB1VikKIHsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwpAQCAtNzc1LDYgKzc4NiwxNCBAQAogCXJldHVybiB3bTgzNTBfbGRvX3ZhbF90b19tdm9sdHModmFsKSAqIDEwMDA7CiB9CiAKK3N0YXRpYyBpbnQgd204MzUwX2xkb19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgIHVuc2lnbmVkIHNlbGVjdG9yKQoreworCWlmIChzZWxlY3RvciA+IFdNODM1MF9MRE8xX1ZTRUxfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHdtODM1MF9sZG9fdmFsX3RvX212b2x0cyhzZWxlY3RvcikgKiAxMDAwOworfQorCiBpbnQgd204MzUwX2RjZGNfc2V0X3Nsb3Qoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZGNkYywgdTE2IHN0YXJ0LAogCQkJIHUxNiBzdG9wLCB1MTYgZmF1bHQpCiB7CkBAIC0xMDMxLDE4ICsxMDUwLDMwIEBACiAJaW50IGRjZGMgPSByZGV2X2dldF9pZChyZGV2KTsKIAl1MTYgbWFzaywgc2xlZXAsIGFjdGl2ZSwgZm9yY2U7CiAJaW50IG1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CisJaW50IHJlZzsKIAotCWlmIChkY2RjIDwgV004MzUwX0RDRENfMSB8fCBkY2RjID4gV004MzUwX0RDRENfNikKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCXJlZyA9IFdNODM1MF9EQ0RDMV9GT1JDRV9QV007CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJcmVnID0gV004MzUwX0RDREMzX0ZPUkNFX1BXTTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQlyZWcgPSBXTTgzNTBfRENEQzRfRk9SQ0VfUFdNOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCXJlZyA9IFdNODM1MF9EQ0RDNl9GT1JDRV9QV007CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRjZGMgPT0gV004MzUwX0RDRENfMiB8fCBkY2RjID09IFdNODM1MF9EQ0RDXzUpCi0JCXJldHVybiAtRUlOVkFMOworCX0KIAogCW1hc2sgPSAxIDw8IChkY2RjIC0gV004MzUwX0RDRENfMSk7CiAJYWN0aXZlID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDRENfQUNUSVZFX09QVElPTlMpICYgbWFzazsKKwlmb3JjZSA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIHJlZykgJiBXTTgzNTBfRENEQzFfRk9SQ0VfUFdNX0VOQTsKIAlzbGVlcCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDX1NMRUVQX09QVElPTlMpICYgbWFzazsKLQlmb3JjZSA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDMV9GT1JDRV9QV00pCi0JICAgICYgV004MzUwX0RDREMxX0ZPUkNFX1BXTV9FTkE7CisKIAlkZXZfZGJnKHdtODM1MC0+ZGV2LCAibWFzayAleCBhY3RpdmUgJXggc2xlZXAgJXggZm9yY2UgJXgiLAogCQltYXNrLCBhY3RpdmUsIHNsZWVwLCBmb3JjZSk7CiAKQEAgLTExNTAsNiArMTE4MSw3IEBACiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204MzUwX2RjZGNfb3BzID0gewogCS5zZXRfdm9sdGFnZSA9IHdtODM1MF9kY2RjX3NldF92b2x0YWdlLAogCS5nZXRfdm9sdGFnZSA9IHdtODM1MF9kY2RjX2dldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UgPSB3bTgzNTBfZGNkY19saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZSA9IHdtODM1MF9kY2RjX2VuYWJsZSwKIAkuZGlzYWJsZSA9IHdtODM1MF9kY2RjX2Rpc2FibGUsCiAJLmdldF9tb2RlID0gd204MzUwX2RjZGNfZ2V0X21vZGUsCkBAIC0xMTczLDYgKzEyMDUsNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODM1MF9sZG9fb3BzID0gewogCS5zZXRfdm9sdGFnZSA9IHdtODM1MF9sZG9fc2V0X3ZvbHRhZ2UsCiAJLmdldF92b2x0YWdlID0gd204MzUwX2xkb19nZXRfdm9sdGFnZSwKKwkubGlzdF92b2x0YWdlID0gd204MzUwX2xkb19saXN0X3ZvbHRhZ2UsCiAJLmVuYWJsZSA9IHdtODM1MF9sZG9fZW5hYmxlLAogCS5kaXNhYmxlID0gd204MzUwX2xkb19kaXNhYmxlLAogCS5pc19lbmFibGVkID0gd204MzUwX2xkb19pc19lbmFibGVkLApAQCAtMTE5Nyw2ICsxMjMwLDcgQEAKIAkJLm9wcyA9ICZ3bTgzNTBfZGNkY19vcHMsCiAJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0RDMSwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTgzNTBfRENEQ19NQVhfVlNFTCArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTIxMyw2ICsxMjQ3LDcgQEAKIAkJLm9wcyA9ICZ3bTgzNTBfZGNkY19vcHMsCiAJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0RDMywKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTgzNTBfRENEQ19NQVhfVlNFTCArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTIyMSw2ICsxMjU2LDcgQEAKIAkJLm9wcyA9ICZ3bTgzNTBfZGNkY19vcHMsCiAJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0RDNCwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTgzNTBfRENEQ19NQVhfVlNFTCArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTIzNyw2ICsxMjczLDcgQEAKIAkJLm9wcyA9ICZ3bTgzNTBfZGNkY19vcHMsCiAJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0RDNiwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTgzNTBfRENEQ19NQVhfVlNFTCArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTI0NSw2ICsxMjgyLDcgQEAKIAkJLm9wcyA9ICZ3bTgzNTBfbGRvX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfTERPMSwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTgzNTBfTERPMV9WU0VMX01BU0sgKyAxLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCXsKQEAgLTEyNTMsNiArMTI5MSw3IEBACiAJCS5vcHMgPSAmd204MzUwX2xkb19vcHMsCiAJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0xETzIsCiAJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5uX3ZvbHRhZ2VzID0gV004MzUwX0xETzJfVlNFTF9NQVNLICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjYxLDYgKzEzMDAsNyBAQAogCQkub3BzID0gJndtODM1MF9sZG9fb3BzLAogCQkuaXJxID0gV004MzUwX0lSUV9VVl9MRE8zLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9MRE8zX1ZTRUxfTUFTSyArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTI2OSw2ICsxMzA5LDcgQEAKIAkJLm9wcyA9ICZ3bTgzNTBfbGRvX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfTERPNCwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTgzNTBfTERPNF9WU0VMX01BU0sgKyAxLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCXsKQEAgLTEyOTMsNiArMTMzNCw3IEBACiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKilkYXRhOwogCisJbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOwogCWlmIChpcnEgPT0gV004MzUwX0lSUV9DUzEgfHwgaXJxID09IFdNODM1MF9JUlFfQ1MyKQogCQlyZWd1bGF0b3Jfbm90aWZpZXJfY2FsbF9jaGFpbihyZGV2LAogCQkJCQkgICAgICBSRUdVTEFUT1JfRVZFTlRfUkVHVUxBVElPTl9PVVQsCkBAIC0xMzAxLDYgKzEzNDMsNyBAQAogCQlyZWd1bGF0b3Jfbm90aWZpZXJfY2FsbF9jaGFpbihyZGV2LAogCQkJCQkgICAgICBSRUdVTEFUT1JfRVZFTlRfVU5ERVJfVk9MVEFHRSwKIAkJCQkJICAgICAgd204MzUwKTsKKwltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCB3bTgzNTBfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xMzMzLDkgKzEzNzYsOSBAQAogCQlicmVhazsKIAl9CiAKLQogCS8qIHJlZ2lzdGVyIHJlZ3VsYXRvciAqLwogCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJndtODM1MF9yZWdbcGRldi0+aWRdLCAmcGRldi0+ZGV2LAorCQkJCSAgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsCiAJCQkJICBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldikpOwogCWlmIChJU19FUlIocmRldikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jCmluZGV4IDU2ZTIzZDQuLjE1NzQyNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMKQEAgLTQzLDYgKzQzLDE4IEBACiAJCQkgICAgICAgV004NDAwX0xETzFfRU5BLCAwKTsKIH0KIAorc3RhdGljIGludCB3bTg0MDBfbGRvX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LAorCQkJCSAgIHVuc2lnbmVkIHNlbGVjdG9yKQoreworCWlmIChzZWxlY3RvciA+IFdNODQwMF9MRE8xX1ZTRUxfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc2VsZWN0b3IgPCAxNSkKKwkJcmV0dXJuIDkwMDAwMCArIChzZWxlY3RvciAqIDUwMDAwKTsKKwllbHNlCisJCXJldHVybiAxNjAwMDAwICsgKChzZWxlY3RvciAtIDE0KSAqIDEwMDAwMCk7Cit9CisKIHN0YXRpYyBpbnQgd204NDAwX2xkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQogewogCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTUxLDEwICs2Myw3IEBACiAJdmFsID0gd204NDAwX3JlZ19yZWFkKHdtODQwMCwgV004NDAwX0xETzFfQ09OVFJPTCArIHJkZXZfZ2V0X2lkKGRldikpOwogCXZhbCAmPSBXTTg0MDBfTERPMV9WU0VMX01BU0s7CiAKLQlpZiAodmFsIDwgMTUpCi0JCXJldHVybiA5MDAwMDAgKyAodmFsICogNTAwMDApOwotCWVsc2UKLQkJcmV0dXJuIDE2MDAwMDAgKyAoKHZhbCAtIDE0KSAqIDEwMDAwMCk7CisJcmV0dXJuIHdtODQwMF9sZG9fbGlzdF92b2x0YWdlKGRldiwgdmFsKTsKIH0KIAogc3RhdGljIGludCB3bTg0MDBfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCkBAIC05Miw2ICsxMDEsNyBAQAogCS5pc19lbmFibGVkID0gd204NDAwX2xkb19pc19lbmFibGVkLAogCS5lbmFibGUgPSB3bTg0MDBfbGRvX2VuYWJsZSwKIAkuZGlzYWJsZSA9IHdtODQwMF9sZG9fZGlzYWJsZSwKKwkubGlzdF92b2x0YWdlID0gd204NDAwX2xkb19saXN0X3ZvbHRhZ2UsCiAJLmdldF92b2x0YWdlID0gd204NDAwX2xkb19nZXRfdm9sdGFnZSwKIAkuc2V0X3ZvbHRhZ2UgPSB3bTg0MDBfbGRvX3NldF92b2x0YWdlLAogfTsKQEAgLTEyNCw2ICsxMzQsMTUgQEAKIAkJCSAgICAgICBXTTg0MDBfREMxX0VOQSwgMCk7CiB9CiAKK3N0YXRpYyBpbnQgd204NDAwX2RjZGNfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJICAgIHVuc2lnbmVkIHNlbGVjdG9yKQoreworCWlmIChzZWxlY3RvciA+IFdNODQwMF9EQzFfVlNFTF9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiA4NTAwMDAgKyAoc2VsZWN0b3IgKiAyNTAwMCk7Cit9CisKIHN0YXRpYyBpbnQgd204NDAwX2RjZGNfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKIHsKIAlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0yMzcsNiArMjU2LDcgQEAKIAkuaXNfZW5hYmxlZCA9IHdtODQwMF9kY2RjX2lzX2VuYWJsZWQsCiAJLmVuYWJsZSA9IHdtODQwMF9kY2RjX2VuYWJsZSwKIAkuZGlzYWJsZSA9IHdtODQwMF9kY2RjX2Rpc2FibGUsCisJLmxpc3Rfdm9sdGFnZSA9IHdtODQwMF9kY2RjX2xpc3Rfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UgPSB3bTg0MDBfZGNkY19nZXRfdm9sdGFnZSwKIAkuc2V0X3ZvbHRhZ2UgPSB3bTg0MDBfZGNkY19zZXRfdm9sdGFnZSwKIAkuZ2V0X21vZGUgPSB3bTg0MDBfZGNkY19nZXRfbW9kZSwKQEAgLTI0OSw2ICsyNjksNyBAQAogCQkubmFtZSA9ICJMRE8xIiwKIAkJLmlkID0gV004NDAwX0xETzEsCiAJCS5vcHMgPSAmd204NDAwX2xkb19vcHMsCisJCS5uX3ZvbHRhZ2VzID0gV004NDAwX0xETzFfVlNFTF9NQVNLICsgMSwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTI1Niw2ICsyNzcsNyBAQAogCQkubmFtZSA9ICJMRE8yIiwKIAkJLmlkID0gV004NDAwX0xETzIsCiAJCS5vcHMgPSAmd204NDAwX2xkb19vcHMsCisJCS5uX3ZvbHRhZ2VzID0gV004NDAwX0xETzJfVlNFTF9NQVNLICsgMSwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTI2Myw2ICsyODUsNyBAQAogCQkubmFtZSA9ICJMRE8zIiwKIAkJLmlkID0gV004NDAwX0xETzMsCiAJCS5vcHMgPSAmd204NDAwX2xkb19vcHMsCisJCS5uX3ZvbHRhZ2VzID0gV004NDAwX0xETzNfVlNFTF9NQVNLICsgMSwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTI3MCw2ICsyOTMsNyBAQAogCQkubmFtZSA9ICJMRE80IiwKIAkJLmlkID0gV004NDAwX0xETzQsCiAJCS5vcHMgPSAmd204NDAwX2xkb19vcHMsCisJCS5uX3ZvbHRhZ2VzID0gV004NDAwX0xETzRfVlNFTF9NQVNLICsgMSwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTI3Nyw2ICszMDEsNyBAQAogCQkubmFtZSA9ICJEQ0RDMSIsCiAJCS5pZCA9IFdNODQwMF9EQ0RDMSwKIAkJLm9wcyA9ICZ3bTg0MDBfZGNkY19vcHMsCisJCS5uX3ZvbHRhZ2VzID0gV004NDAwX0RDMV9WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjg0LDYgKzMwOSw3IEBACiAJCS5uYW1lID0gIkRDREMyIiwKIAkJLmlkID0gV004NDAwX0RDREMyLAogCQkub3BzID0gJndtODQwMF9kY2RjX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfREMyX1ZTRUxfTUFTSyArIDEsCiAJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCkBAIC0yOTQsNyArMzIwLDcgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKIAogCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnJlZ3VsYXRvcnNbcGRldi0+aWRdLCAmcGRldi0+ZGV2LAotCQlwZGV2LT5kZXYuZHJpdmVyX2RhdGEpOworCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgcGRldi0+ZGV2LmRyaXZlcl9kYXRhKTsKIAogCWlmIChJU19FUlIocmRldikpCiAJCXJldHVybiBQVFJfRVJSKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggMDlkNWNkMy4uZmZlMzRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0yMjUsMTEgKzIyNSwxMSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjg1ODMuCiAKIGNvbmZpZyBSVENfRFJWX000MVQ4MAotCXRyaXN0YXRlICJTVCBNNDFUNjUvTTQxVDgwLzgxLzgyLzgzLzg0Lzg1Lzg3IgorCXRyaXN0YXRlICJTVCBNNDFUNjIvNjUvTTQxVDgwLzgxLzgyLzgzLzg0Lzg1Lzg3IgogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUgU1QgTTQxVDYwCiAJICBhbmQgTTQxVDgwIFJUQyBjaGlwcyBzZXJpZXMuIEN1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBjaGlwcyBhcmUKLQkgIHN1cHBvcnRlZDogTTQxVDY1LCBNNDFUODAsIE00MVQ4MSwgTTQxVDgyLCBNNDFUODMsIE00MVNUODQsCisJICBzdXBwb3J0ZWQ6IE00MVQ2MiwgTTQxVDY1LCBNNDFUODAsIE00MVQ4MSwgTTQxVDgyLCBNNDFUODMsIE00MVNUODQsCiAJICBNNDFTVDg1LCBhbmQgTTQxU1Q4Ny4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCkBAIC02ODgsMjIgKzY4OCwxNiBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgUmljb2ggUlM1QzMxMyBSVEMgY2hpcHMuCiAKLWNvbmZpZyBSVENfRFJWX1BBUklTQwotCXRyaXN0YXRlICJQQS1SSVNDIGZpcm13YXJlIFJUQyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUEFSSVNDCitjb25maWcgUlRDX0RSVl9HRU5FUklDCisJdHJpc3RhdGUgIkdlbmVyaWMgUlRDIHN1cHBvcnQiCisJIyBQbGVhc2UgY29uc2lkZXIgd3JpdGluZyBhIG5ldyBSVEMgZHJpdmVyIGluc3RlYWQgb2YgdXNpbmcgdGhlIGdlbmVyaWMKKwkjIFJUQyBhYnN0cmFjdGlvbgorCWRlcGVuZHMgb24gUEFSSVNDIHx8IE02OEsgfHwgUFBDCiAJaGVscAotCSAgU2F5IFkgb3IgTSBoZXJlIHRvIGVuYWJsZSBSVEMgc3VwcG9ydCBvbiBQQS1SSVNDIHN5c3RlbXMgdXNpbmcKLQkgIGZpcm13YXJlIGNhbGxzLiBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkCisJICBTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIFJUQyBzdXBwb3J0IG9uIHN5c3RlbXMgdXNpbmcgdGhlIGdlbmVyaWMKKwkgIFJUQyBhYnN0cmFjdGlvbi4gSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHNob3VsZAogCSAganVzdCBzYXkgWS4KIAotY29uZmlnIFJUQ19EUlZfUFBDCi0gICAgICAgdHJpc3RhdGUgIlBvd2VyUEMgbWFjaGluZSBkZXBlbmRlbnQgUlRDIHN1cHBvcnQiCi0gICAgICAgZGVwZW5kcyBvbiBQUEMKLSAgICAgICBoZWxwCi0JIFRoZSBQb3dlclBDIGtlcm5lbCBoYXMgbWFjaGluZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZwotCSB0aGUgUlRDLiBUaGlzIGV4cG9zZXMgdGhhdCBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGhlIGdlbmVyaWMgUlRDCi0JIGNsYXNzLgotCiBjb25maWcgUlRDX0RSVl9QWEEKICAgICAgICB0cmlzdGF0ZSAiUFhBMjd4L1BYQTN4eCIKICAgICAgICBkZXBlbmRzIG9uIEFSQ0hfUFhBCkBAIC03NDcsNCArNzQxLDEzIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tdi4KIAorY29uZmlnIFJUQ19EUlZfUFMzCisJdHJpc3RhdGUgIlBTMyBSVEMiCisJZGVwZW5kcyBvbiBQUENfUFMzCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIFJUQyBvbiBQUzMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBzMy4KKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggZTdiMDk5OC4uNmMwNjM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTU2LDggKzU2LDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX1BDRjg1ODMpCSs9IHJ0Yy1wY2Y4NTgzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BMMDMwKQkrPSBydGMtcGwwMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzEpCSs9IHJ0Yy1wbDAzMS5vCi1vYmotJChDT05GSUdfUlRDX0RSVl9QQVJJU0MpCSs9IHJ0Yy1wYXJpc2Mubwotb2JqLSQoQ09ORklHX1JUQ19EUlZfUFBDKQkrPSBydGMtcHBjLm8KK29iai0kKENPTkZJR19SVENfRFJWX0dFTkVSSUMpCSs9IHJ0Yy1nZW5lcmljLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BYQSkJKz0gcnRjLXB4YS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9SOTcwMSkJKz0gcnRjLXI5NzAxLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1JTNUMzMTMpCSs9IHJ0Yy1yczVjMzEzLm8KQEAgLTc3LDMgKzc2LDQgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX1dNODM1MCkJKz0gcnRjLXdtODM1MC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9YMTIwNSkJKz0gcnRjLXgxMjA1Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BDRjUwNjMzKQkrPSBydGMtcGNmNTA2MzMubworb2JqLSQoQ09ORklHX1JUQ19EUlZfUFMzKQkrPSBydGMtcHMzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1nZW5lcmljLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MzIyMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLWdlbmVyaWMuYwpAQCAtMCwwICsxLDg0IEBACisvKiBydGMtZ2VuZXJpYzogUlRDIGRyaXZlciB1c2luZyB0aGUgZ2VuZXJpYyBSVEMgYWJzdHJhY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS3lsZSBNY01hcnRpbiA8a3lsZUBtY21hcnRpbi5jYT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorCisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorCitzdGF0aWMgaW50IGdlbmVyaWNfZ2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXVuc2lnbmVkIGludCByZXQgPSBnZXRfcnRjX3RpbWUodG0pOworCisJaWYgKHJldCAmIFJUQ19CQVRUX0JBRCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJpY19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJaWYgKHNldF9ydGNfdGltZSh0bSkgPCAwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGdlbmVyaWNfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lID0gZ2VuZXJpY19nZXRfdGltZSwKKwkuc2V0X3RpbWUgPSBnZW5lcmljX3NldF90aW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtZ2VuZXJpYyIsICZkZXYtPmRldiwgJmdlbmVyaWNfcnRjX29wcywKKwkJCQkgIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0YykpCisJCXJldHVybiBQVFJfRVJSKHJ0Yyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHJ0Yyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2V4aXQgZ2VuZXJpY19ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdlbmVyaWNfcnRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJydGMtZ2VuZXJpYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZXhpdF9wKGdlbmVyaWNfcnRjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBnZW5lcmljX3J0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZ2VuZXJpY19ydGNfZHJpdmVyLCBnZW5lcmljX3J0Y19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBnZW5lcmljX3J0Y19maW5pKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdlbmVyaWNfcnRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGdlbmVyaWNfcnRjX2luaXQpOworbW9kdWxlX2V4aXQoZ2VuZXJpY19ydGNfZmluaSk7CisKK01PRFVMRV9BVVRIT1IoIkt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgUlRDIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpydGMtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCmluZGV4IDg5M2Y3ZGUuLjYwZmUyNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKQEAgLTY0LDEwICs2NCwxMiBAQAogI2RlZmluZSBNNDFUODBfRkVBVFVSRV9CTAkoMSA8PCAxKQkvKiBCYXR0ZXJ5IGxvdyBpbmRpY2F0b3IgKi8KICNkZWZpbmUgTTQxVDgwX0ZFQVRVUkVfU1EJKDEgPDwgMikJLyogU3F1YXJld2F2ZSBmZWF0dXJlICovCiAjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX1dECSgxIDw8IDMpCS8qIEV4dHJhIHdhdGNoZG9nIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgTTQxVDgwX0ZFQVRVUkVfU1FfQUxUCSgxIDw8IDQpCS8qIFJTeCBiaXRzIGFyZSBpbiByZWcgNCAqLwogCiAjZGVmaW5lIERSVl9WRVJTSU9OICIwLjA1IgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbTQxdDgwX2lkW10gPSB7CisJeyAibTQxdDYyIiwgTTQxVDgwX0ZFQVRVUkVfU1EgfCBNNDFUODBfRkVBVFVSRV9TUV9BTFQgfSwKIAl7ICJtNDF0NjUiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX1dEIH0sCiAJeyAibTQxdDgwIiwgTTQxVDgwX0ZFQVRVUkVfU1EgfSwKIAl7ICJtNDF0ODEiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX1NRfSwKQEAgLTM5MywxMiArMzk1LDE1IEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgbTQxdDgwX2RhdGEgKmNsaWVudGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgdmFsOworCWludCB2YWwsIHJlZ19zcXc7CiAKIAlpZiAoIShjbGllbnRkYXRhLT5mZWF0dXJlcyAmIE00MVQ4MF9GRUFUVVJFX1NRKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNNDFUODBfUkVHX1NRVyk7CisJcmVnX3NxdyA9IE00MVQ4MF9SRUdfU1FXOworCWlmIChjbGllbnRkYXRhLT5mZWF0dXJlcyAmIE00MVQ4MF9GRUFUVVJFX1NRX0FMVCkKKwkJcmVnX3NxdyA9IE00MVQ4MF9SRUdfV0RBWTsKKwl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWdfc3F3KTsKIAlpZiAodmFsIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAJdmFsID0gKHZhbCA+PiA0KSAmIDB4ZjsKQEAgLTQxOSw3ICs0MjQsNyBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IG00MXQ4MF9kYXRhICpjbGllbnRkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGFsbW9uLCBzcXc7CisJaW50IGFsbW9uLCBzcXcsIHJlZ19zcXc7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAKIAlpZiAoIShjbGllbnRkYXRhLT5mZWF0dXJlcyAmIE00MVQ4MF9GRUFUVVJFX1NRKSkKQEAgLTQ0MCwxMyArNDQ1LDE2IEBACiAJYWxtb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNNDFUODBfUkVHX0FMQVJNX01PTik7CiAJaWYgKGFsbW9uIDwgMCkKIAkJcmV0dXJuIC1FSU87Ci0Jc3F3ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19TUVcpOworCXJlZ19zcXcgPSBNNDFUODBfUkVHX1NRVzsKKwlpZiAoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUV9BTFQpCisJCXJlZ19zcXcgPSBNNDFUODBfUkVHX1dEQVk7CisJc3F3ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnX3Nxdyk7CiAJaWYgKHNxdyA8IDApCiAJCXJldHVybiAtRUlPOwogCXNxdyA9IChzcXcgJiAweDBmKSB8ICh2YWwgPDwgNCk7CiAJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNNDFUODBfUkVHX0FMQVJNX01PTiwKIAkJCQkgICAgICBhbG1vbiAmIH5NNDFUODBfQUxNT05fU1FXRSkgPCAwIHx8Ci0JICAgIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNNDFUODBfUkVHX1NRVywgc3F3KSA8IDApCisJICAgIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdfc3F3LCBzcXcpIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKHZhbCAmJiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04sCiAJCQkJCSAgICAgYWxtb24gfCBNNDFUODBfQUxNT05fU1FXRSkgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBhcmlzYy5jIGIvZHJpdmVycy9ydGMvcnRjLXBhcmlzYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTY2ZjU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wYXJpc2MuYworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qIHJ0Yy1wYXJpc2M6IFJUQyBmb3IgSFAgUEEtUklTQyBmaXJtd2FyZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBLeWxlIE1jTWFydGluIDxreWxlQG1jbWFydGluLmNhPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRjLmg+Ci0KLSNpbmNsdWRlIDxhc20vcnRjLmg+Ci0KLXN0YXRpYyBpbnQgcGFyaXNjX2dldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCXJldCA9IGdldF9ydGNfdGltZSh0bSk7Ci0KLQlpZiAocmV0ICYgUlRDX0JBVFRfQkFEKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKLX0KLQotc3RhdGljIGludCBwYXJpc2Nfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQotewotCWlmIChzZXRfcnRjX3RpbWUodG0pIDwgMCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwYXJpc2NfcnRjX29wcyA9IHsKLQkucmVhZF90aW1lID0gcGFyaXNjX2dldF90aW1lLAotCS5zZXRfdGltZSA9IHBhcmlzY19zZXRfdGltZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcmlzY19ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBydGNfZGV2aWNlICpydGM7Ci0KLQlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtcGFyaXNjIiwgJmRldi0+ZGV2LCAmcGFyaXNjX3J0Y19vcHMsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKQotCQlyZXR1cm4gUFRSX0VSUihydGMpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBydGMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19leGl0IHBhcmlzY19ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQotCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBhcmlzY19ydGNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInJ0Yy1wYXJpc2MiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZSA9IHBhcmlzY19ydGNfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBhcmlzY19ydGNfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcmlzY19ydGNfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnBhcmlzY19ydGNfZHJpdmVyLCBwYXJpc2NfcnRjX3Byb2JlKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHBhcmlzY19ydGNfZmluaSh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwYXJpc2NfcnRjX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHBhcmlzY19ydGNfaW5pdCk7Ci1tb2R1bGVfZXhpdChwYXJpc2NfcnRjX2ZpbmkpOwotCi1NT0RVTEVfQVVUSE9SKCJLeWxlIE1jTWFydGluIDxreWxlQG1jbWFydGluLmNhPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJIUCBQQS1SSVNDIFJUQyBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wcGMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wcGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhlOTdlMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcHBjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogUlRDIGRyaXZlciBmb3IgcHBjX21kIFJUQyBmdW5jdGlvbnMKLSAqCi0gKiDCqSAyMDA3IFJlZCBIYXQsIEluYy4KLSAqCi0gKiBBdXRob3I6IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0KLXN0YXRpYyBpbnQgcHBjX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQotewotCXBwY19tZC5nZXRfcnRjX3RpbWUodG0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBwY19ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQotewotCXJldHVybiBwcGNfbWQuc2V0X3J0Y190aW1lKHRtKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHBwY19ydGNfb3BzID0gewotCS5zZXRfdGltZSA9IHBwY19ydGNfc2V0X3RpbWUsCi0JLnJlYWRfdGltZSA9IHBwY19ydGNfcmVhZF90aW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBydGNfZGV2aWNlICpydGM7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcHBjX3J0Y19wZGV2OwotCi1zdGF0aWMgaW50IF9faW5pdCBwcGNfcnRjX2luaXQodm9pZCkKLXsKLQlpZiAoIXBwY19tZC5nZXRfcnRjX3RpbWUgfHwgIXBwY19tZC5zZXRfcnRjX3RpbWUpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcHBjX3J0Y19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicHBjLXJ0YyIsIDAsIE5VTEwsIDApOwotCWlmIChJU19FUlIocHBjX3J0Y19wZGV2KSkKLQkJcmV0dXJuIFBUUl9FUlIocHBjX3J0Y19wZGV2KTsKLQotCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBwY19tZCIsICZwcGNfcnRjX3BkZXYtPmRldiwKLQkJCQkgICZwcGNfcnRjX29wcywgVEhJU19NT0RVTEUpOwotCWlmIChJU19FUlIocnRjKSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwcGNfcnRjX3BkZXYpOwotCQlyZXR1cm4gUFRSX0VSUihydGMpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcHBjX3J0Y19leGl0KHZvaWQpCi17Ci0JcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocHBjX3J0Y19wZGV2KTsKLX0KLQotbW9kdWxlX2luaXQocHBjX3J0Y19pbml0KTsKLW1vZHVsZV9leGl0KHBwY19ydGNfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBSVEMgY2xhc3MgZHJpdmVyIGZvciBQb3dlclBDIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcHMzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHMzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4MTMzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wczMuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIFBTMyBSVEMgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgorICogSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CisjaW5jbHVkZSA8YXNtL3BzMy5oPgorCisKK3N0YXRpYyB1NjQgcmVhZF9ydGModm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCXU2NCBydGNfdmFsOworCXU2NCB0Yl92YWw7CisKKwlyZXN1bHQgPSBsdjFfZ2V0X3J0YygmcnRjX3ZhbCwgJnRiX3ZhbCk7CisJQlVHX09OKHJlc3VsdCk7CisKKwlyZXR1cm4gcnRjX3ZhbDsKK30KKworc3RhdGljIGludCBwczNfZ2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXJ0Y190aW1lX3RvX3RtKHJlYWRfcnRjKCkgKyBwczNfb3NfYXJlYV9nZXRfcnRjX2RpZmYoKSwgdG0pOworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgaW50IHBzM19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwlydGNfdG1fdG9fdGltZSh0bSwgJm5vdyk7CisJcHMzX29zX2FyZWFfc2V0X3J0Y19kaWZmKG5vdyAtIHJlYWRfcnRjKCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcHMzX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZSA9IHBzM19nZXRfdGltZSwKKwkuc2V0X3RpbWUgPSBwczNfc2V0X3RpbWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwczNfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicnRjLXBzMyIsICZkZXYtPmRldiwgJnBzM19ydGNfb3BzLAorCQkJCSAgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcnRjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2V4aXQgcHMzX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHMzX3J0Y19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicnRjLXBzMyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZXhpdF9wKHBzM19ydGNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBzM19ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnBzM19ydGNfZHJpdmVyLCBwczNfcnRjX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBzM19ydGNfZmluaSh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwczNfcnRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBzM19ydGNfaW5pdCk7Cittb2R1bGVfZXhpdChwczNfcnRjX2ZpbmkpOworCitNT0RVTEVfQVVUSE9SKCJTb255IENvcnBvcmF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oInBzMyBSVEMgZHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Yy1wczMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKaW5kZXggNjY5NTVjYy4uYWQxNjQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKQEAgLTI3LDE3ICsyNywxNjIgQEAKICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICN1bmRlZiBERUJVRwogCitzdHJ1Y3QgdjMwMjA7CisKK3N0cnVjdCB2MzAyMF9jaGlwX29wcyB7CisJaW50ICgqbWFwX2lvKShzdHJ1Y3QgdjMwMjAgKmNoaXAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCSAgICAgIHN0cnVjdCB2MzAyMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisJdm9pZCAoKnVubWFwX2lvKShzdHJ1Y3QgdjMwMjAgKmNoaXApOworCXVuc2lnbmVkIGNoYXIgKCpyZWFkX2JpdCkoc3RydWN0IHYzMDIwICpjaGlwKTsKKwl2b2lkICgqd3JpdGVfYml0KShzdHJ1Y3QgdjMwMjAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgYml0KTsKK307CisKKyNkZWZpbmUgVjMwMjBfQ1MJMAorI2RlZmluZSBWMzAyMF9XUgkxCisjZGVmaW5lIFYzMDIwX1JECTIKKyNkZWZpbmUgVjMwMjBfSU8JMworCitzdHJ1Y3QgdjMwMjBfZ3BpbyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKK307CisKIHN0cnVjdCB2MzAyMCB7CisJLyogTU1JTyBhY2Nlc3MgKi8KIAl2b2lkIF9faW9tZW0gKmlvYWRkcmVzczsKIAlpbnQgbGVmdHNoaWZ0OworCisJLyogR1BJTyBhY2Nlc3MgKi8KKwlzdHJ1Y3QgdjMwMjBfZ3BpbyAqZ3BpbzsKKworCXN0cnVjdCB2MzAyMF9jaGlwX29wcyAqb3BzOworCiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIH07CiAKKworc3RhdGljIGludCB2MzAyMF9tbWlvX21hcChzdHJ1Y3QgdjMwMjAgKmNoaXAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgIHN0cnVjdCB2MzAyMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAxKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHBkZXYtPnJlc291cmNlWzBdLmZsYWdzICE9IElPUkVTT1VSQ0VfTUVNKQorCQlyZXR1cm4gLUVCVVNZOworCisJY2hpcC0+bGVmdHNoaWZ0ID0gcGRhdGEtPmxlZnRzaGlmdDsKKwljaGlwLT5pb2FkZHJlc3MgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAxKTsKKwlpZiAoY2hpcC0+aW9hZGRyZXNzID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdjMwMjBfbW1pb191bm1hcChzdHJ1Y3QgdjMwMjAgKmNoaXApCit7CisJaW91bm1hcChjaGlwLT5pb2FkZHJlc3MpOworfQorCitzdGF0aWMgdm9pZCB2MzAyMF9tbWlvX3dyaXRlX2JpdChzdHJ1Y3QgdjMwMjAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgYml0KQoreworCXdyaXRlbChiaXQgPDwgY2hpcC0+bGVmdHNoaWZ0LCBjaGlwLT5pb2FkZHJlc3MpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB2MzAyMF9tbWlvX3JlYWRfYml0KHN0cnVjdCB2MzAyMCAqY2hpcCkKK3sKKwlyZXR1cm4gcmVhZGwoY2hpcC0+aW9hZGRyZXNzKSAmICgxIDw8IGNoaXAtPmxlZnRzaGlmdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdjMwMjBfY2hpcF9vcHMgdjMwMjBfbW1pb19vcHMgPSB7CisJLm1hcF9pbwkJPSB2MzAyMF9tbWlvX21hcCwKKwkudW5tYXBfaW8JPSB2MzAyMF9tbWlvX3VubWFwLAorCS5yZWFkX2JpdAk9IHYzMDIwX21taW9fcmVhZF9iaXQsCisJLndyaXRlX2JpdAk9IHYzMDIwX21taW9fd3JpdGVfYml0LAorfTsKKworc3RhdGljIHN0cnVjdCB2MzAyMF9ncGlvIHYzMDIwX2dwaW9bXSA9IHsKKwl7ICJSVEMgQ1MiLCAwIH0sCisJeyAiUlRDIFdSIiwgMCB9LAorCXsgIlJUQyBSRCIsIDAgfSwKKwl7ICJSVEMgSU8iLCAwIH0sCit9OworCitzdGF0aWMgaW50IHYzMDIwX2dwaW9fbWFwKHN0cnVjdCB2MzAyMCAqY2hpcCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgc3RydWN0IHYzMDIwX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCBpLCBlcnI7CisKKwl2MzAyMF9ncGlvW1YzMDIwX0NTXS5ncGlvID0gcGRhdGEtPmdwaW9fY3M7CisJdjMwMjBfZ3Bpb1tWMzAyMF9XUl0uZ3BpbyA9IHBkYXRhLT5ncGlvX3dyOworCXYzMDIwX2dwaW9bVjMwMjBfUkRdLmdwaW8gPSBwZGF0YS0+Z3Bpb19yZDsKKwl2MzAyMF9ncGlvW1YzMDIwX0lPXS5ncGlvID0gcGRhdGEtPmdwaW9faW87CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2MzAyMF9ncGlvKTsgaSsrKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdCh2MzAyMF9ncGlvW2ldLmdwaW8sIHYzMDIwX2dwaW9baV0ubmFtZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9yZXF1ZXN0OworCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dCh2MzAyMF9ncGlvW2ldLmdwaW8sIDEpOworCX0KKworCWNoaXAtPmdwaW8gPSB2MzAyMF9ncGlvOworCisJcmV0dXJuIDA7CisKK2Vycl9yZXF1ZXN0OgorCXdoaWxlICgtLWkgPj0gMCkKKwkJZ3Bpb19mcmVlKHYzMDIwX2dwaW9baV0uZ3Bpbyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB2MzAyMF9ncGlvX3VubWFwKHN0cnVjdCB2MzAyMCAqY2hpcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHYzMDIwX2dwaW8pOyBpKyspCisJCWdwaW9fZnJlZSh2MzAyMF9ncGlvW2ldLmdwaW8pOworfQorCitzdGF0aWMgdm9pZCB2MzAyMF9ncGlvX3dyaXRlX2JpdChzdHJ1Y3QgdjMwMjAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgYml0KQoreworCWdwaW9fZGlyZWN0aW9uX291dHB1dChjaGlwLT5ncGlvW1YzMDIwX0lPXS5ncGlvLCBiaXQpOworCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfQ1NdLmdwaW8sIDApOworCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfV1JdLmdwaW8sIDApOworCXVkZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX1dSXS5ncGlvLCAxKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX0NTXS5ncGlvLCAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdjMwMjBfZ3Bpb19yZWFkX2JpdChzdHJ1Y3QgdjMwMjAgKmNoaXApCit7CisJaW50IGJpdDsKKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KGNoaXAtPmdwaW9bVjMwMjBfSU9dLmdwaW8pOworCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfQ1NdLmdwaW8sIDApOworCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfUkRdLmdwaW8sIDApOworCXVkZWxheSgxKTsKKwliaXQgPSAhIWdwaW9fZ2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfSU9dLmdwaW8pOworCXVkZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX1JEXS5ncGlvLCAxKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX0NTXS5ncGlvLCAxKTsKKworCXJldHVybiBiaXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdjMwMjBfY2hpcF9vcHMgdjMwMjBfZ3Bpb19vcHMgPSB7CisJLm1hcF9pbwkJPSB2MzAyMF9ncGlvX21hcCwKKwkudW5tYXBfaW8JPSB2MzAyMF9ncGlvX3VubWFwLAorCS5yZWFkX2JpdAk9IHYzMDIwX2dwaW9fcmVhZF9iaXQsCisJLndyaXRlX2JpdAk9IHYzMDIwX2dwaW9fd3JpdGVfYml0LAorfTsKKwogc3RhdGljIHZvaWQgdjMwMjBfc2V0X3JlZyhzdHJ1Y3QgdjMwMjAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgYWRkcmVzcywKIAkJCXVuc2lnbmVkIGNoYXIgZGF0YSkKIHsKQEAgLTQ2LDcgKzE5MSw3IEBACiAKIAl0bXAgPSBhZGRyZXNzOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJd3JpdGVsKCh0bXAgJiAxKSA8PCBjaGlwLT5sZWZ0c2hpZnQsIGNoaXAtPmlvYWRkcmVzcyk7CisJCWNoaXAtPm9wcy0+d3JpdGVfYml0KGNoaXAsICh0bXAgJiAxKSk7CiAJCXRtcCA+Pj0gMTsKIAkJdWRlbGF5KDEpOwogCX0KQEAgLTU0LDcgKzE5OSw3IEBACiAJLyogQ29tbWFuZHMgZG9udCBoYXZlIGRhdGEgKi8KIAlpZiAoIVYzMDIwX0lTX0NPTU1BTkQoYWRkcmVzcykpIHsKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJd3JpdGVsKChkYXRhICYgMSkgPDwgY2hpcC0+bGVmdHNoaWZ0LCBjaGlwLT5pb2FkZHJlc3MpOworCQkJY2hpcC0+b3BzLT53cml0ZV9iaXQoY2hpcCwgKGRhdGEgJiAxKSk7CiAJCQlkYXRhID4+PSAxOwogCQkJdWRlbGF5KDEpOwogCQl9CkBAIC02NywxNCArMjEyLDE0IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXdyaXRlbCgoYWRkcmVzcyAmIDEpIDw8IGNoaXAtPmxlZnRzaGlmdCwgY2hpcC0+aW9hZGRyZXNzKTsKKwkJY2hpcC0+b3BzLT53cml0ZV9iaXQoY2hpcCwgKGFkZHJlc3MgJiAxKSk7CiAJCWFkZHJlc3MgPj49IDE7CiAJCXVkZWxheSgxKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWRhdGEgPj49IDE7Ci0JCWlmIChyZWFkbChjaGlwLT5pb2FkZHJlc3MpICYgKDEgPDwgY2hpcC0+bGVmdHNoaWZ0KSkKKwkJaWYgKGNoaXAtPm9wcy0+cmVhZF9iaXQoY2hpcCkpCiAJCQlkYXRhIHw9IDB4ODA7CiAJCXVkZWxheSgxKTsKIAl9CkBAIC0xNjQsMjUgKzMwOSwyMyBAQAogCWludCBpOwogCWludCB0ZW1wOwogCi0JaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChwZGV2LT5yZXNvdXJjZVswXS5mbGFncyAhPSBJT1JFU09VUkNFX01FTSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCWNoaXAgPSBremFsbG9jKHNpemVvZiAqY2hpcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGlwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNoaXAtPmxlZnRzaGlmdCA9IHBkYXRhLT5sZWZ0c2hpZnQ7Ci0JY2hpcC0+aW9hZGRyZXNzID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgMSk7Ci0JaWYgKGNoaXAtPmlvYWRkcmVzcyA9PSBOVUxMKQorCWlmIChwZGF0YS0+dXNlX2dwaW8pCisJCWNoaXAtPm9wcyA9ICZ2MzAyMF9ncGlvX29wczsKKwllbHNlCisJCWNoaXAtPm9wcyA9ICZ2MzAyMF9tbWlvX29wczsKKworCXJldHZhbCA9IGNoaXAtPm9wcy0+bWFwX2lvKGNoaXAsIHBkZXYsIHBkYXRhKTsKKwlpZiAocmV0dmFsKQogCQlnb3RvIGVycl9jaGlwOwogCiAJLyogTWFrZSBzdXJlIHRoZSB2MzAyMCBleHBlY3RzIGEgY29tbXVuaWNhdGlvbiBjeWNsZQogCSAqIGJ5IHJlYWRpbmcgOCB0aW1lcyAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCXRlbXAgPSByZWFkbChjaGlwLT5pb2FkZHJlc3MpOworCQl0ZW1wID0gY2hpcC0+b3BzLT5yZWFkX2JpdChjaGlwKTsKIAogCS8qIFRlc3QgY2hpcCBieSBkb2luZyBhIHdyaXRlL3JlYWQgc2VxdWVuY2UKIAkgKiB0byB0aGUgY2hpcCByYW0gKi8KQEAgLTE5NiwxMCArMzM5LDE3IEBACiAJICogYXJlIGFsbCBkaXNhYmxlZCAqLwogCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfU1RBVFVTXzAsIDB4MCk7CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ2hpcCBhdmFpbGFibGUgYXQgcGh5c2ljYWwgYWRkcmVzcyAweCVsbHgsIgotCQkiZGF0YSBjb25uZWN0ZWQgdG8gRCVkXG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAotCQljaGlwLT5sZWZ0c2hpZnQpOworCWlmIChwZGF0YS0+dXNlX2dwaW8pCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDaGlwIGF2YWlsYWJsZSBhdCBHUElPcyAiCisJCQkgIiVkLCAlZCwgJWQsICVkXG4iLAorCQkJIGNoaXAtPmdwaW9bVjMwMjBfQ1NdLmdwaW8sIGNoaXAtPmdwaW9bVjMwMjBfV1JdLmdwaW8sCisJCQkgY2hpcC0+Z3Bpb1tWMzAyMF9SRF0uZ3BpbywgY2hpcC0+Z3Bpb1tWMzAyMF9JT10uZ3Bpbyk7CisJZWxzZQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ2hpcCBhdmFpbGFibGUgYXQgIgorCQkJICJwaHlzaWNhbCBhZGRyZXNzIDB4JWxseCwiCisJCQkgImRhdGEgY29ubmVjdGVkIHRvIEQlZFxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAorCQkJIGNoaXAtPmxlZnRzaGlmdCk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGlwKTsKIApAQCAtMjE0LDcgKzM2NCw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9pbzoKLQlpb3VubWFwKGNoaXAtPmlvYWRkcmVzcyk7CisJY2hpcC0+b3BzLT51bm1hcF9pbyhjaGlwKTsKIGVycl9jaGlwOgogCWtmcmVlKGNoaXApOwogCkBAIC0yMjksNyArMzc5LDcgQEAKIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIAotCWlvdW5tYXAoY2hpcC0+aW9hZGRyZXNzKTsKKwljaGlwLT5vcHMtPnVubWFwX2lvKGNoaXApOwogCWtmcmVlKGNoaXApOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKaW5kZXggYWFiODEyMy4uZThkMDMyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwpAQCAtOTQsNyArOTQsNyBAQAogCiBzdGF0aWMgdm9pZCB6ZmNwX3drYV9wb3J0X29mZmxpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCA9CiAJCQljb250YWluZXJfb2YoZHcsIHN0cnVjdCB6ZmNwX3drYV9wb3J0LCB3b3JrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCBlMmY0NGU2Li4yMDI5N2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMTM4MCw3ICsxMzgwLDcgQEAKIAlib29sICJFbXVsZXggTGlnaHRQdWxzZSBGaWJyZSBDaGFubmVsIGRlYnVnZnMgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNDU0lfTFBGQyAmJiBERUJVR19GUwogCWhlbHAKLQkgIFRoaXMgbWFrZXMgZGVidWdnaW5nIGluZm9tYXRpb24gZnJvbSB0aGUgbHBmYyBkcml2ZXIKKwkgIFRoaXMgbWFrZXMgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGxwZmMgZHJpdmVyCiAJICBhdmFpbGFibGUgdmlhIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0uCiAKIGNvbmZpZyBTQ1NJX1NJTTcxMApAQCAtMTM4OCw3ICsxMzg4LDcgQEAKIAlkZXBlbmRzIG9uIChFSVNBIHx8IE1DQSkgJiYgU0NTSQogCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGZvciBOQ1I1M2M3MTAgYmFzZWQgU0NTSSBob3N0IGFkYXB0ZXJzLgorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIE5DUjUzYzcxMCBiYXNlZCBTQ1NJIGhvc3QgYWRhcHRlcnMuCiAKIAkgIEl0IGN1cnJlbnRseSBzdXBwb3J0cyBDb21wYXEgRUlTQSBjYXJkcyBhbmQgTkNSIE1DQSBjYXJkcwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCA5YmUxMWIwLi5hYTlkM2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTEzNzQsNyArMTM3NCw3IEBACiAJZGVwZW5kcyBvbiBCTEFDS0ZJTiAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAloZWxwCi0JICBFbmJsZSBzdXBwb3J0IFNQT1JUIGVtdWxhdGUgVUFSVCBvbiBCbGFja2ZpbiBzZXJpZXMuCisJICBFbmFibGUgU1BPUlQgZW11bGF0ZSBVQVJUIG9uIEJsYWNrZmluIHNlcmllcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmZpbl9zcG9ydF91YXJ0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwppbmRleCA4ZjU4ZjdmLi5iMzQ5N2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwpAQCAtMTAyMCw3ICsxMDIwLDggQEAKIAogCS8qIEdldCBjdXJyZW50IG1vZGUgcmVnaXN0ZXIgKi8KIAltb2RlID0gVUFSVF9HRVRfTVIocG9ydCkgJiB+KEFUTUVMX1VTX1VTQ0xLUyB8IEFUTUVMX1VTX0NIUkwKLQkJCQkJfCBBVE1FTF9VU19OQlNUT1AgfCBBVE1FTF9VU19QQVIpOworCQkJCQl8IEFUTUVMX1VTX05CU1RPUCB8IEFUTUVMX1VTX1BBUgorCQkJCQl8IEFUTUVMX1VTX1VTTU9ERSk7CiAKIAliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgcG9ydC0+dWFydGNsayAvIDE2KTsKIAlxdW90ID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKQEAgLTEwNjUsNiArMTA2NiwxMiBAQAogCX0gZWxzZQogCQltb2RlIHw9IEFUTUVMX1VTX1BBUl9OT05FOwogCisJLyogaGFyZHdhcmUgaGFuZHNoYWtlIChSVFMvQ1RTKSAqLworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykKKwkJbW9kZSB8PSBBVE1FTF9VU19VU01PREVfSFdIUzsKKwllbHNlCisJCW1vZGUgfD0gQVRNRUxfVVNfVVNNT0RFX05PUk1BTDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKIAlwb3J0LT5yZWFkX3N0YXR1c19tYXNrID0gQVRNRUxfVVNfT1ZSRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21jZi5jIGIvZHJpdmVycy9zZXJpYWwvbWNmLmMKaW5kZXggNTY4NDFmZS4uMGVlZmIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbWNmLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbWNmLmMKQEAgLTUxMyw3ICs1MTMsNyBAQAogCWludCBwYXJpdHkgPSAnbic7CiAJaW50IGZsb3cgPSAnbic7CiAKLQlpZiAoKGNvLT5pbmRleCA+PSAwKSAmJiAoY28tPmluZGV4IDw9IE1DRl9NQVhQT1JUUykpCisJaWYgKChjby0+aW5kZXggPCAwKSB8fCAoY28tPmluZGV4ID49IE1DRl9NQVhQT1JUUykpCiAJCWNvLT5pbmRleCA9IDA7CiAJcG9ydCA9ICZtY2ZfcG9ydHNbY28tPmluZGV4XS5wb3J0OwogCWlmIChwb3J0LT5tZW1iYXNlID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpX2dwaW8uYwppbmRleCBkMjg2NmMyLi4yNmJkMDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKQEAgLTE3OCw4ICsxNzgsMTAgQEAKIAlpZiAoaXNfYWN0aXZlKQogCQlzZXRzY2soc3BpLCBzcGktPm1vZGUgJiBTUElfQ1BPTCk7CiAKLQkvKiBTUEkgaXMgbm9ybWFsbHkgYWN0aXZlLWxvdyAqLwotCWdwaW9fc2V0X3ZhbHVlKGNzLCAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpID8gaXNfYWN0aXZlIDogIWlzX2FjdGl2ZSk7CisJaWYgKGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpIHsKKwkJLyogU1BJIGlzIG5vcm1hbGx5IGFjdGl2ZS1sb3cgKi8KKwkJZ3Bpb19zZXRfdmFsdWUoY3MsIChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCkgPyBpc19hY3RpdmUgOiAhaXNfYWN0aXZlKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc3BpX2dwaW9fc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKQEAgLTE5MSwxNSArMTkzLDE3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFzcGktPmNvbnRyb2xsZXJfc3RhdGUpIHsKLQkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKLQkJaWYgKHN0YXR1cykKLQkJCXJldHVybiBzdGF0dXM7Ci0JCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCQlpZiAoY3MgIT0gU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVCkgeworCQkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCQl9CiAJfQogCWlmICghc3RhdHVzKQogCQlzdGF0dXMgPSBzcGlfYml0YmFuZ19zZXR1cChzcGkpOwogCWlmIChzdGF0dXMpIHsKLQkJaWYgKCFzcGktPmNvbnRyb2xsZXJfc3RhdGUpCisJCWlmICghc3BpLT5jb250cm9sbGVyX3N0YXRlICYmIGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpCiAJCQlncGlvX2ZyZWUoY3MpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjA5LDcgKzIxMyw4IEBACiB7CiAJdW5zaWduZWQgbG9uZwljcyA9ICh1bnNpZ25lZCBsb25nKSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKIAotCWdwaW9fZnJlZShjcyk7CisJaWYgKGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpCisJCWdwaW9fZnJlZShjcyk7CiAJc3BpX2JpdGJhbmdfY2xlYW51cChzcGkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCmluZGV4IDIxMWFmODYuLjBkY2Y5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2VsZWN0IGEgbnVtYmVyIG9mIGRyaXZlcnMgdGhhdCBhcmUKIAkgIG5vdCBvZiB0aGUgIm5vcm1hbCIgTGludXgga2VybmVsIHF1YWxpdHkgbGV2ZWwuICBUaGVzZSBkcml2ZXJzCi0JICBhcmUgcGxhY2VkIGhlcmUgaW4gb3JkZXIgdG8gZ2V0IGEgd2lkZXIgYXVkaWVuY2UgZm9yIHVzZSBvZgorCSAgYXJlIHBsYWNlZCBoZXJlIGluIG9yZGVyIHRvIGdldCBhIHdpZGVyIGF1ZGllbmNlIHRvIG1ha2UgdXNlIG9mCiAJICB0aGVtLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBkcml2ZXJzIGFyZSB1bmRlciBoZWF2eQogCSAgZGV2ZWxvcG1lbnQsIG1heSBvciBtYXkgbm90IHdvcmssIGFuZCBtYXkgY29udGFpbiB1c2Vyc3BhY2UKIAkgIGludGVyZmFjZXMgdGhhdCBtb3N0IGxpa2VseSB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIG5lYXIKQEAgLTEyLDcgKzEyLDcgQEAKIAogCSAgVXNpbmcgYW55IG9mIHRoZXNlIGRyaXZlcnMgd2lsbCB0YWludCB5b3VyIGtlcm5lbCB3aGljaCBtaWdodAogCSAgYWZmZWN0IHN1cHBvcnQgb3B0aW9ucyBmcm9tIGJvdGggdGhlIGNvbW11bml0eSwgYW5kIHZhcmlvdXMKLQkgIGNvbW1lcmNpYWwgc3VwcG9ydCBvcmdpbml6YXRpb25zLgorCSAgY29tbWVyY2lhbCBzdXBwb3J0IG9yZ2FuaXphdGlvbnMuCiAKIAkgIElmIHlvdSB3aXNoIHRvIHdvcmsgb24gdGhlc2UgZHJpdmVycywgdG8gaGVscCBpbXByb3ZlIHRoZW0sIG9yCiAJICB0byByZXBvcnQgcHJvYmxlbXMgeW91IGhhdmUgd2l0aCB0aGVtLCBwbGVhc2Ugc2VlIHRoZQpAQCAtNzMsNiArNzMsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnQzMDcwL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvS2NvbmZpZyIKQEAgLTkzLDUgKzk1LDI1IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9waGlzb24vS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcDlhdXRoL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2hlY2kvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbGluZTYvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL0tjb25maWciCisKIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggNDdhNTZmNS4uNDdkZmQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQAogb2JqLSQoQ09ORklHX09UVVMpCQkrPSBvdHVzLwogb2JqLSQoQ09ORklHX1JUMjg2MCkJCSs9IHJ0Mjg2MC8KIG9iai0kKENPTkZJR19SVDI4NzApCQkrPSBydDI4NzAvCitvYmotJChDT05GSUdfUlQzMDcwKQkJKz0gcnQzMDcwLwogb2JqLSQoQ09ORklHX0NPTUVESSkJCSs9IGNvbWVkaS8KIG9iai0kKENPTkZJR19BU1VTX09MRUQpCQkrPSBhc3VzX29sZWQvCiBvYmotJChDT05GSUdfUEFORUwpCQkrPSBwYW5lbC8KQEAgLTI5LDMgKzMwLDEzIEBACiBvYmotJChDT05GSUdfVFJBTlpQT1JUKQkJKz0gZnJvbnRpZXIvCiBvYmotJChDT05GSUdfRVBMKQkJKz0gZXBsLwogb2JqLSQoQ09ORklHX0FORFJPSUQpCQkrPSBhbmRyb2lkLworb2JqLSQoQ09ORklHX0RTVCkJCSs9IGRzdC8KK29iai0kKENPTkZJR19QT0hNRUxGUykJCSs9IHBvaG1lbGZzLworb2JqLSQoQ09ORklHX1NUTEM0NVhYKQkJKz0gc3RsYzQ1eHgvCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9BVEVOMjAxMSkJKz0gdWMyMzIyLworb2JqLSQoQ09ORklHX0IzREZHKQkJKz0gYjNkZmcvCitvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLworb2JqLSQoQ09ORklHX1BMQU45QVVUSCkJCSs9IHA5YXV0aC8KK29iai0kKENPTkZJR19IRUNJKQkJKz0gaGVjaS8KK29iai0kKENPTkZJR19MSU5FNl9VU0IpCQkrPSBsaW5lNi8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0hfRVNVMTAwKQkrPSBzZXJxdF91c2IvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9hZ254LmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9hZ254LmgKaW5kZXggMjBmMzZkYS4uMzk2M2QyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvYWdueC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaApAQCAtNDEsMTYgKzQxLDE2IEBACiAvKiAJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAyLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwogLyogCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMywgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KIC8qIAl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSA0LCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwotIAl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDEsIH0sCi0gCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMiwgfSwKLSAJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAzLCB9LAotIAl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSA0LH0sCisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAxLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMiwgfSwKKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDMsIH0sCisJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gNCx9LAogCiAJeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSAweEIsIH0sCiAJeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAweEYsIH0sCiAJeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gMHhBIH0sCiAJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMHhFLCB9LAotLy8JeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gMHhkLCB9LAorLyoJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gMHhkLCB9LCAqLwogCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDB4RCwgfSwKIAl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSAweDgsIH0sCiAJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMHhDLCB9LApAQCAtMTEwLDEwICsxMTAsMTAgQEAKIAkvKiBOZWVkIHZvbGF0aWxlPyAqLwogCXUzMiBpcnFfc3RhdHVzOwogCi0gICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgcGVyaW9kaWNfd29yazsgLyogUGVyaW9kaWMgdGFza3MgbGlrZSByZWNhbGlicmF0ZSovCisJc3RydWN0IGRlbGF5ZWRfd29yayBwZXJpb2RpY193b3JrOyAvKiBQZXJpb2RpYyB0YXNrcyBsaWtlIHJlY2FsaWJyYXRlICovCiAJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgc3RhdHM7CiAKLS8vICAgICAgICB1bnNpZ25lZCBpbnQgcGh5bW9kZTsKKwkvKiB1bnNpZ25lZCBpbnQgcGh5bW9kZTsgKi8KIAlpbnQgbW9kZTsKIAlpbnQgY2hhbm5lbDsKIAl1OCBic3NpZFtFVEhfQUxFTl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9kZWJ1Zy5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvZGVidWcuaAppbmRleCBlM2UyNWRkLi43NjFkOTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfZGVzYyhzdHJ1Y3QgYWdueF9kZXNjICpkZXNjKQogewotICAgICAgICB1MzIgcmVnID0gYmUzMl90b19jcHUoZGVzYy0+ZnJhZyk7CisJdTMyIHJlZyA9IGJlMzJfdG9fY3B1KGRlc2MtPmZyYWcpOwogCiAJUFJJTlRLX0JJVFMoREVTQywgUEFDS0VUX0xFTik7CiAKQEAgLTI5MSw3ICsyOTEsNyBAQAogCVBSSU5US19MRTMyKFNUQSwgc3RhLT5waHlfc3RhdHNfaGlnaCk7CiAJUFJJTlRLX0xFMzIoU1RBLCBzdGEtPnBoeV9zdGF0c19sb3cpOwogCi0vLwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCS8qIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspICovCiAJYWdueF9wcmludF9zdGFfdHJhZmZpYyhzdGEtPnRyYWZmaWMgKyAwKTsKIAogCVBSSU5US19MRTE2KFNUQSwgc3RhLT50cmFmZmljX2NsYXNzMF9mcmFnX3N1Y2Nlc3MpOwpAQCAtMzExLDEwICszMTEsMTAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2llZWU4MDIxMV9oZHIoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgY2hhciAqdGFnKQogewogCXUxNiBmY3RsOwotICAgICAgICBpbnQgaGRybGVuOworCWludCBoZHJsZW47CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKLSAgICAgICAgZmN0bCA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJZmN0bCA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJc3dpdGNoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpIHsKIAljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgogCQlwcmludGsoUEZYICIlcyBEQVRBICIsIHRhZyk7CkBAIC0zMjQsNyArMzI0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKIAkJcHJpbnRrKFBGWCAiJXMgTUdNVCAiLCB0YWcpOwotCQlzd2l0Y2goZmN0bCAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCXN3aXRjaCAoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CiAJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUToKIAkJCXByaW50aygiU3ViVHlwZTogQVNTT0NfUkVRICIpOwogCQkJYnJlYWs7CkBAIC0zNjksNyArMzY5LDcgQEAKIAkJcHJpbnRrKFBGWCAiJXMgUGFja2V0IHR5cGU6IFVua25vd1xuIiwgdGFnKTsKIAl9CiAKLSAgICAgICAgaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihmY3RsKTsKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjdGwpOwogCiAJaWYgKGhkcmxlbiA+PSA0KQogCQlwcmludGsoIkZDPTB4JTA0eCBEVVI9MHglMDR4IiwKQEAgLTM4OSwyOSArMzg5LDI4IEBACiB7CiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8PTB4MWU4OyBpICs9IDQpIHsKKwlmb3IgKGkgPSAwOyBpIDw9IDB4MWU4OyBpICs9IDQpCiAJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiVFhNOiAleC0tLT4gMHglLjh4XG4iLCBpLCBpb3JlYWQzMihjdGwgKyBpKSk7Ci0JfQogfQogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcnhtX3JlZ2lzdGVycyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQogewogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPD0weDEwODsgaSArPSA0KQorCWZvciAoaSA9IDA7IGkgPD0gMHgxMDg7IGkgKz0gNCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJSWE06ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIDB4MjAwMCArIGkpKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2JtX3JlZ2lzdGVycyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQogewogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPD0weDkwOyBpICs9IDQpCisJZm9yIChpID0gMDsgaSA8PSAweDkwOyBpICs9IDQpCiAJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQk06ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIDB4MmMwMCArIGkpKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2Npcl9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKIHsKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9MHhiODsgaSArPSA0KQorCWZvciAoaSA9IDA7IGkgPD0gMHhiODsgaSArPSA0KQogCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkNJUjogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgzMDAwICsgaSkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BjaS5jCmluZGV4IDg1NDYzMGMuLjRmZjRjMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BjaS5jCkBAIC0zOSwzNCArMzksMzQgQEAKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKIAl1MzIgcmVnOwogCi0JaWYgKCAqcmVhc29uICYgQUdOWF9TVEFUX1JYICkgeworCWlmICgqcmVhc29uICYgQUdOWF9TVEFUX1JYKSB7CiAJCS8qIE1hcmsgY29tcGxldGUgUlggKi8KIAkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfUlhDVEwpOwogCQlyZWcgfD0gMHg0OwogCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9SWENUTCk7CiAJCS8qIGRpc2FibGUgUnggaW50ZXJydXB0ICovCiAJfQotCWlmICggKnJlYXNvbiAmIEFHTlhfU1RBVF9UWCApIHsKKwlpZiAoKnJlYXNvbiAmIEFHTlhfU1RBVF9UWCkgewogCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9UWERDVEwpOwogCQlpZiAocmVnICYgMHg0KSB7CiAJCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9UWERDVEwpOwogCQkJKnJlYXNvbiB8PSBBR05YX1NUQVRfVFhEOwogCQl9Ci0gCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9UWE1DVEwpOworCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9UWE1DVEwpOwogCQlpZiAocmVnICYgMHg0KSB7CiAJCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9UWE1DVEwpOwogCQkJKnJlYXNvbiB8PSBBR05YX1NUQVRfVFhNOwogCQl9CiAJfQotCWlmICggKnJlYXNvbiAmIEFHTlhfU1RBVF9YICkgewotLyogCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9TVEFUKTsgKi8KLS8qIAkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfU1RBVCk7ICovCi0vKiAJCS9cKiBGSVhNRSByZWluaXQgaW50ZXJydXB0IG1hc2sgKlwvICovCi0vKiAJCXJlZyA9IDB4YzM5MGJmOSAmIH5JUlFfVFhfQkVBQ09OOyAqLwotLyogCQlyZWcgJj0gfklSUV9UWF9ESVNBQkxFOyAqLwotLyogCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsgKi8KLS8qIAkJaW93cml0ZTMyKDB4ODAwLCBjdGwgKyBBR05YX0NJUl9CTEtDVEwpOyAqLwotCX0KKy8qCWlmICgqcmVhc29uICYgQUdOWF9TVEFUX1gpIHsKKwkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfU1RBVCk7CisJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfSU5UX1NUQVQpOworCQkvKiBGSVhNRSByZWluaXQgaW50ZXJydXB0IG1hc2sgKlwvCisJCXJlZyA9IDB4YzM5MGJmOSAmIH5JUlFfVFhfQkVBQ09OOworCQlyZWcgJj0gfklSUV9UWF9ESVNBQkxFOworCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKKwkJaW93cml0ZTMyKDB4ODAwLCBjdGwgKyBBR05YX0NJUl9CTEtDVEwpOworCX0gKi8KIH0gLyogYWdueF9pbnRlcnJ1cHRfYWNrICovCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhZ254X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTc5LDcgKzc5LDcgQEAKIAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKLS8vCXByaW50ayhLRVJOX0VSUiBQRlggIkdldCBhIGludGVycnVwdCAlc1xuIiwgX19mdW5jX18pOworLyoJcHJpbnRrKEtFUk5fRVJSIFBGWCAiR2V0IGEgaW50ZXJydXB0ICVzXG4iLCBfX2Z1bmNfXyk7ICovCiAKIAlpZiAocHJpdi0+aW5pdF9zdGF0dXMgIT0gQUdOWF9TVEFSVCkKIAkJZ290byBvdXQ7CkBAIC05Miw3ICs5Miw3IEBACiAJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJcHJpdi0+aXJxX3N0YXR1cyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX1NUQVQpOwogCi0vLwlwcmludGsoUEZYICJJbnRlcnJ1cHQgcmVhc29uIGlzIDB4JXhcbiIsIGlycV9yZWFzb24pOworLyoJcHJpbnRrKFBGWCAiSW50ZXJydXB0IHJlYXNvbiBpcyAweCV4XG4iLCBpcnFfcmVhc29uKTsgKi8KIAkvKiBNYWtlIHN1cmUgdGhlIHR4bSBhbmQgdHhkIGZsYWdzIGRvbid0IGNvbmZsaWN0IHdpdGggb3RoZXIgdW5rbm93bgogCSAgIGludGVycnVwdCBmbGFnLCBtYXliZSBpcyBub3QgbmVjZXNzYXJ5ICovCiAJaXJxX3JlYXNvbiAmPSAweEY7CkBAIC0xMDEsMTMgKzEwMSwxMyBAQAogCS8qIFRPRE8gTWFrZSBzdXJlIHRoZSBjYXJkIGZpbmlzaGVkIGluaXRpYWxpemVkICovCiAJYWdueF9pbnRlcnJ1cHRfYWNrKHByaXYsICZpcnFfcmVhc29uKTsKIAotCWlmICggaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9SWCApCisJaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfUlgpCiAJCWhhbmRsZV9yeF9pcnEocHJpdik7Ci0JaWYgKCBpcnFfcmVhc29uICYgQUdOWF9TVEFUX1RYRCApCisJaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfVFhEKQogCQloYW5kbGVfdHhkX2lycShwcml2KTsKLQlpZiAoIGlycV9yZWFzb24gJiBBR05YX1NUQVRfVFhNICkKKwlpZiAoaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9UWE0pCiAJCWhhbmRsZV90eG1faXJxKHByaXYpOwotCWlmICggaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9YICkKKwlpZiAoaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9YKQogCQloYW5kbGVfb3RoZXJfaXJxKHByaXYpOwogCiAJZW5hYmxlX3J4X2ludGVycnVwdChwcml2KTsKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiAJbGVuID0gcHJpdi0+cnguc2l6ZSArIHByaXYtPnR4bS5zaXplICsgcHJpdi0+dHhkLnNpemU7CiAKLS8vCXByaXYtPnJ4LmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWdueF9pbmZvKSAqIGxlbiwgR0ZQX0tFUk5FTCk7CisvKglwcml2LT5yeC5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykgKiBsZW4sIEdGUF9LRVJORUwpOyAqLwogCXByaXYtPnJ4LmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWdueF9pbmZvKSAqIGxlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFwcml2LT5yeC5pbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIxMCwyOCArMjEwLDI3IEBACiAjaWYgMAogc3RhdGljIHZvaWQgYWdueF9wZXJpb2RpY193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFnbnhfcHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZGljX3dvcmsud29yayk7Ci0vLwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFnbnhfcHJpdiwgcGVyaW9kaWNfd29yay53b3JrKTsKKy8qCXVuc2lnbmVkIGxvbmcgZmxhZ3M7ICovCiAJdW5zaWduZWQgbG9uZyBkZWxheTsKIAogCS8qIGZpeG1lOiB1c2luZyBtdXRleD8/ICovCi0vLwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworLyoJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgKi8KIAogCS8qIFRPRE8gUmVjYWxpYnJhdGUqLwotLy8JY2FsaWJyYXRlX29zY2lsbGF0b3IocHJpdik7Ci0vLwlhbnRlbm5hX2NhbGlicmF0ZShwcml2KTsKLS8vCWFnbnhfc2VuZF9wYWNrZXQocHJpdiwgOTk3KTsKKy8qCWNhbGlicmF0ZV9vc2NpbGxhdG9yKHByaXYpOyAqLworLyoJYW50ZW5uYV9jYWxpYnJhdGUocHJpdik7ICovCisvKglhZ254X3NlbmRfcGFja2V0KHByaXYsIDk5Nyk7IC8KIAkvKiBGSVhNRSAqLwogLyogCWlmIChkZWJ1ZyA9PSAzKSAqLwogLyogICAgICAgICAgICAgICAgIGRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhBR05YX1BFUklPRElDX0RFTEFZKTsgKi8KIC8qIAllbHNlICovCiAJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKEFHTlhfUEVSSU9ESUNfREVMQVkpOwotLy8JCWRlbGF5ID0gcm91bmRfamlmZmllcyhIWiAqIDE1KTsKKy8qCWRlbGF5ID0gcm91bmRfamlmZmllcyhIWiAqIDE1KTsgKi8KIAogCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+cGVyaW9kaWNfd29yaywgZGVsYXkpOwogCi0vLwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisvKglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7ICovCiB9CiAjZW5kaWYKIApAQCAtMjU1LDEyICsyNTQsMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0vLwltZGVsYXkoNTAwKTsKKy8qCW1kZWxheSg1MDApOyAqLwogCiAJbWlnaHRfc2xlZXAoKTsKIAlhZ254X2h3X2luaXQocHJpdik7CiAKLS8vCW1kZWxheSg1MDApOworLyoJbWRlbGF5KDUwMCk7ICovCiAJbWlnaHRfc2xlZXAoKTsKIAogCXByaXYtPmluaXRfc3RhdHVzID0gQUdOWF9TVEFSVDsKQEAgLTI4MCwxNiArMjc5LDE2IEBACiAJLyogbWFrZSBzdXJlIGhhcmR3YXJlIHdpbGwgbm90IGdlbmVyYXRlIGlycSAqLwogCWFnbnhfaHdfcmVzZXQocHJpdik7CiAJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBkZXYpOwotICAgICAgICBmbHVzaF93b3JrcXVldWUocHJpdi0+aHctPndvcmtxdWV1ZSk7Ci0vLwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnBlcmlvZGljX3dvcmspOworCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5ody0+d29ya3F1ZXVlKTsKKy8qCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cGVyaW9kaWNfd29yayk7ICovCiAJdW5maWxsX3JpbmdzKHByaXYpOwogCXJpbmdzX2ZyZWUocHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgYWdueF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQorc3RhdGljIGludCBhZ254X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiBjaGFuZ2VkKQogewogCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmRldi0+Y29uZjsKIAlpbnQgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAJQUdOWF9UUkFDRTsKIApAQCAtMzE1LDcgKzMxNCw2IEBACiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCWlmIChtZW1jbXAoY29uZi0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTikpIHsKLS8vCQl1MzIgcmVnaGksIHJlZ2xvOwogCQlhZ254X3NldF9ic3NpZChwcml2LCBjb25mLT5ic3NpZCk7CiAJCW1lbWNweShwcml2LT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJaGFzaF93cml0ZShwcml2LCBjb25mLT5ic3NpZCwgQlNTSURfU1RBSUQpOwpAQCAtNDI1LDcgKzQyMyw3IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBhZ254X3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gYWdueF9jb25maWcsCiAJLmNvbmZpZ19pbnRlcmZhY2UJPSBhZ254X2NvbmZpZ19pbnRlcmZhY2UsCi0gCS5jb25maWd1cmVfZmlsdGVyCT0gYWdueF9jb25maWd1cmVfZmlsdGVyLAorCS5jb25maWd1cmVfZmlsdGVyCT0gYWdueF9jb25maWd1cmVfZmlsdGVyLAogCS5nZXRfc3RhdHMJCT0gYWdueF9nZXRfc3RhdHMsCiAJLmdldF90eF9zdGF0cwkJPSBhZ254X2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBhZ254X2dldF90c2Z0CkBAIC00MzQsMTEgKzQzMiwxMiBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IGFnbnhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgYWdueF9wcml2ICpwcml2OwogCUFHTlhfVFJBQ0U7CiAKIAlpZiAoIWRldikKIAkJcmV0dXJuOworCXByaXYgPSBkZXYtPnByaXY7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGV2KTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5jdGwpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmRhdGEpOwpAQCAtNTA0LDcgKzUwMyw3IEBACiAKIAkvKiBNYXAgbWVtICMxIGFuZCAjMiAqLwogCXByaXYtPmN0bCA9IHBjaV9pb21hcChwZGV2LCAwLCBtZW1fbGVuMCk7Ci0vLwlwcmludGsoS0VSTl9ERUJVRyBQRlgiTUVNMSBtYXBwZWQgYWRkcmVzcyBpcyAweCVwXG4iLCBwcml2LT5jdGwpOworLyoJcHJpbnRrKEtFUk5fREVCVUcgUEZYIk1FTTEgbWFwcGVkIGFkZHJlc3MgaXMgMHglcFxuIiwgcHJpdi0+Y3RsKTsgKi8KIAlpZiAoIXByaXYtPmN0bCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCBtYXAgZGV2aWNlIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYwppbmRleCBkYThmMTBjLi4yYmU2MzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJLyogRklYTUUgKi8KIAlyZWcgPSAobWFjX2FkZHJbMF0gPDwgMjQpIHwgKG1hY19hZGRyWzFdIDw8IDE2KSB8IG1hY19hZGRyWzJdIDw8IDggfCBtYWNfYWRkclszXTsKIAlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9NQUNISSk7Ci0gCXJlZyA9IChtYWNfYWRkcls0XSA8PCA4KSB8IG1hY19hZGRyWzVdOworCXJlZyA9IChtYWNfYWRkcls0XSA8PCA4KSB8IG1hY19hZGRyWzVdOwogCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX01BQ0xPKTsKIH0KIApAQCAtMTI3LDcgKzEyNyw3IEBACiAJLyogRklYTUUgKi8KIAlyZWcgPSBic3NpZFswXSA8PCAyNCB8IChic3NpZFsxXSA8PCAxNikgfCAoYnNzaWRbMl0gPDwgOCkgfCBic3NpZFszXTsKIAlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9CU1NJREhJKTsKLSAJcmVnID0gKGJzc2lkWzRdIDw8IDgpIHwgYnNzaWRbNV07CisJcmVnID0gKGJzc2lkWzRdIDw8IDgpIHwgYnNzaWRbNV07CiAJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9SWE1fQlNTSURMTyk7CiAKIAkvKiBFbmFibGUgdGhlIHJlY2VpdmVyICovCkBAIC00MDEsOSArNDAxLDkgQEAKIAkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDc0LCAweDFmMTcxNzEwKTsKIAkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDc4LCAweDEwMTAwZDBkKTsKIAkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDdjLCAweDExMTExMDEwKTsKLQl9Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX0RFTEFZMTEsIDB4MCk7CisJfQogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIDB4ODE5NWUwMCk7CiB9CiAKQEAgLTQ3Niw3ICs0NzYsNyBAQAogCS8qIEl0IHNlZW1lZCBpZiB3ZSBzZXQgb3RoZXIgYml0IHRvIDEgdGhlIGJpdCAwIHdpbGwKIAkgICBiZSBhdXRvIGNoYW5nZSB0byAwICovCiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9UWFRPUEVFUiwgMHgyIHwgMHgxKTsKLS8vCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fVFhUT1BFRVIsIDB4MSk7CisvKglhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1RYVE9QRUVSLCAweDEpOyAqLwogfSAvKiBnYWluX2N0bGNudF9pbml0ICovCiAKIApAQCAtNDkwLDcgKzQ5MCw3IEBACiAJLyogTG9hZCBJbml0aWFsR2FpblRhYmxlICovCiAJZ2Fpbl90YWJsZV9pbml0KHByaXYpOwogCi0gIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9BRERSV0lOLCAweDIwMDAwMDApOworCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0FERFJXSU4sIDB4MjAwMDAwMCk7CiAKIAkvKiBDbGVhciB0aGUgZm9sbG93aW5nIG9mZnNldHMgaW4gTWVtb3J5IFJhbmdlICMyOiAqLwogCW1lbXNldF9pbyhkYXRhICsgMHg1MDQwLCAwLCAweGEgKiA0KTsKQEAgLTU4Niw3ICs1ODYsNyBAQAogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUZTVDExQiwgMHgyOCk7CiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NXREVURUMsIDB4MCk7CiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMzgsIDB4MWUpOwotLy8JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI2KTsKKy8qCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0FDVCwgMHgyNik7Ki8KIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwogCiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQMTFBLCAweDMyKTsKQEAgLTgxMCwxMCArODEwLDEwIEBACiAJCX0KIAkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoUEZYICJFRVBST006ICIsIERVTVBfUFJFRklYX05PTkUsIGVlcHJvbSwKIAkJCQkgICAgIEFSUkFZX1NJWkUoZWVwcm9tKSk7Ci0JfSB3aGlsZSgwKTsKKwl9IHdoaWxlICgwKTsKIAogCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwLCAweDI2KTsKLSAgICAgICAgcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKKwlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3lzdGVtIGludGVyZmFjZSAqLwogCXN5c3RlbV9pdGZfaW5pdChwcml2KTsKQEAgLTg3NCwxOSArODc0LDE5IEBACiAJLyogRklYTUUgRW5hYmxlIHRoZSByZXF1ZXN0ICovCiAJLyogQ2hlY2sgcGFja2V0IGxlbmd0aCAqLwogCS8qIFNldCBtYXhpbXVtIHBhY2tldCBsZW5ndGggKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFLCAweDg4MTk1ZTAwKTsgKi8KLS8qIAllbmFibGVfcmVjZWl2ZXIocHJpdik7ICovCisvKglhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFLCAweDg4MTk1ZTAwKTsgKi8KKy8qCWVuYWJsZV9yZWNlaXZlcihwcml2KTsgKi8KIAogCS8qIFNldCB0aGUgUmVjZWl2ZXIgQlNTSUQgKi8KIAlyZWNlaXZlcl9ic3NpZF9zZXQocHJpdiwgYnNzaWQpOwogCiAJLyogRklYTUUgU2V0IHRvIG1hbmFnZWQgbW9kZSAqLwogCXNldF9tYW5hZ2VkX21vZGUocHJpdik7Ci0vLwlzZXRfcHJvbWlzY3VvdXNfbW9kZShwcml2KTsKLS8qIAlzZXRfc2Nhbl9tb2RlKHByaXYpOyAqLwotLyogCXNldF9sZWFybl9tb2RlKHByaXYpOyAqLwotLy8gCXNldF9wcm9taXNfYW5kX21hbmFnZWQocHJpdik7Ci0vLyAJc2V0X2FkaG9jX21vZGUocHJpdik7CisvKglzZXRfcHJvbWlzY3VvdXNfbW9kZShwcml2KTsgKi8KKy8qCXNldF9zY2FuX21vZGUocHJpdik7ICovCisvKglzZXRfbGVhcm5fbW9kZShwcml2KTsgKi8KKy8qCXNldF9wcm9taXNfYW5kX21hbmFnZWQocHJpdik7ICovCisvKglzZXRfYWRob2NfbW9kZShwcml2KTsgKi8KIAogCS8qIFNldCB0aGUgcmVjaWV2ZSByZXF1ZXN0IHJhdGUgKi8KIAkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9yZi5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYwppbmRleCA4Mjk0YjZlLi40MmU0NTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9yZi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3JmLmMKQEAgLTEwOSwxMiArMTA5LDEyIEBACiAJfQogCiAJLyogU2V0IFNQSSBjbG9jayBzcGVlZCB0byAyMDBOUyAqLwotICAgICAgICByZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0gICAgICAgIHJlZyAmPSB+MHhGOwotICAgICAgICByZWcgfD0gMHgzOwotICAgICAgICBhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7CisJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9DRkcpOworCXJlZyAmPSB+MHhGOworCXJlZyB8PSAweDM7CisJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TUElfQ0ZHLCByZWcpOwogCi0gICAgICAgIC8qIFNldCBTUEkgY2xvY2sgc3BlZWQgdG8gNTBOUyAqLworCS8qIFNldCBTUEkgY2xvY2sgc3BlZWQgdG8gNTBOUyAqLwogCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKIAlyZWcgJj0gfjB4RjsKIAlyZWcgfD0gMHgxOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCVEZFU1QsIDcwKTsKIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHSFRILCAxMDApOwogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDQ4KTsKLS8vCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDE2KTsKKy8qCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDE2KTsgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vdyBhbnRlbm5hIG51bWJlclxuIik7CkBAIC0yNzUsOCArMjc1LDggQEAKIAlpZiAocmVnID09IDB4NCkKIAkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIHJlZ3wweDEwMDApOwogCWVsc2UgaWYgKHJlZyAhPSAweDApCi0gICAgIAkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIHJlZ3wweDEwMDApOwotICAgICAgICBlbHNlIHsKKwkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIHJlZ3wweDEwMDApOworCWVsc2UgewogCQlpZiAoY2hhaW4gPT0gMyB8fCBjaGFpbiA9PSA2KSB7CiAJCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgcmVnfDB4MTAwMCk7CiAJCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7CkBAIC02MzQsOCArNjM0LDcgQEAKIAl9CiB9IC8qIGNoYWluX2NhbGlicmF0ZSAqLwogCi0KLXN0YXRpYyB2b2lkIGlubGluZSBnZXRfY2FsaWJyZXRlX3ZhbHVlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBjaGFpbnMgKmNoYWlucywKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY2FsaWJyZXRlX3ZhbHVlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBjaGFpbnMgKmNoYWlucywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG51bSkKIHsKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKQEAgLTY1Miw3ICs2NTEsNyBAQAogCX0KIAogCWlmIChudW0gPT0gMCB8fCBudW0gPT0gMSB8fCBudW0gPT0gMikgewotCQlpZiAoIDAgPT0gY2hhaW5zW251bV0uY2FsaSkKKwkJaWYgKDAgPT0gY2hhaW5zW251bV0uY2FsaSkKIAkJCWNoYWluc1tudW1dLmNhbGkgPSAweGZmOwogCQllbHNlCiAJCQljaGFpbnNbbnVtXS5jYWxpLS07CkBAIC02NjksNyArNjY4LDcgQEAKIAl1bnNpZ25lZCBpbnQgaSA9IDEwMDsKIAogCXdtYigpOwotCXdoaWxlIChpLS0pIHsKKwl3aGlsZSAoLS1pKSB7CiAJCXJlZyA9IChpb3JlYWQzMihjdGwgKyBBR05YX0FDSV9TVEFUVVMpKTsKIAkJaWYgKHJlZyA9PSAweDQwMDApCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jIGIvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmMKaW5kZXggZDNhYzY3NS4uNWIyZDU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAlpb3dyaXRlMzIocmVnbG8sIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CiAKIAlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotICAgICAgICByZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CisJcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwogCXByaW50ayhQRlggIlJYIGhhc2ggY21kIGFyZSA6ICUuOHglLjh4XG4iLCByZWdoaSwgcmVnbG8pOwogfQogCkBAIC00MCw3ICs0MCw3IEBACiAJaW93cml0ZTMyKHJlZ2hpLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKIAlpb3dyaXRlMzIocmVnbG8sIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CiAKLSAgICAgICAgcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOworCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKIAlpZiAoIShyZWdsbyAmIDB4ODAwMDAwMDApKQogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVXBkYXRlIGhhc2ggdGFibGUgZmFpbGVkXG4iKTsKIH0KQEAgLTU5LDcgKzU5LDcgQEAKIAlpb3dyaXRlMzIocmVnbG8sIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CiAJcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKIAotICAgICAgICByZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CisJcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwogCXByaW50ayhQRlggIlJYIGhhc2ggY21kIGFyZSA6ICUuOHglLjh4XG4iLCByZWdoaSwgcmVnbG8pOwogCiB9CkBAIC02OSwxNSArNjksMTQgQEAKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKIAl1MzIgcmVnaGksIHJlZ2xvOwogCi0JcmVnbG8gPSAweDA7CQkvKiBkdW1wIGNvbW1hbmQgKi8KLQlyZWdsb3w9IDB4NDAwMDAwMDA7ICAJLyogc3RhdHVzIGJpdCAqLworCXJlZ2xvID0gMHg0MDAwMDAwMDsgIAkvKiBzdGF0dXMgYml0ICovCiAJaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwogCWlvd3JpdGUzMihzdGFfaWQgPDwgMTYsIGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9EQVRBKTsKIAogCXVkZWxheSg4MCk7CiAKIAlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotICAgICAgICByZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CisJcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwogCXByaW50ayhQRlggImhhc2ggY21kIGFyZSA6ICUuOHglLjh4XG4iLCByZWdoaSwgcmVnbG8pOwogCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfRkxBRyk7CiAJcHJpbnRrKFBGWCAiaGFzaCBmbGFnIGlzIDogJS44eFxuIiwgcmVnaGkpOwpAQCAtOTEsNyArOTAsNyBAQAogdm9pZCBnZXRfc3RhX3Bvd2VyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV9wb3dlciAqcG93ZXIsIHVuc2lnbmVkIGludCBzdGFfaWR4KQogewogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotICAgICAgICBtZW1jcHlfZnJvbWlvKHBvd2VyLCBjdGwgKyBBR05YX1RYTV9TVEFQT1dURU1QICsgc2l6ZW9mKCpwb3dlcikgKiBzdGFfaWR4LAorCW1lbWNweV9mcm9taW8ocG93ZXIsIGN0bCArIEFHTlhfVFhNX1NUQVBPV1RFTVAgKyBzaXplb2YoKnBvd2VyKSAqIHN0YV9pZHgsCiAJCSAgICAgIHNpemVvZigqcG93ZXIpKTsKIH0KIApAQCAtMTAwLDcgKzk5LDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKIAkvKiBGSVhNRSAgIDIuIFdyaXRlIFRlbXBsYXRlIHRvIG9mZnNldCArIHN0YXRpb24gbnVtYmVyICAqLwotICAgICAgICBtZW1jcHlfdG9pbyhjdGwgKyBBR05YX1RYTV9TVEFQT1dURU1QICsgc2l6ZW9mKCpwb3dlcikgKiBzdGFfaWR4LAorCW1lbWNweV90b2lvKGN0bCArIEFHTlhfVFhNX1NUQVBPV1RFTVAgKyBzaXplb2YoKnBvd2VyKSAqIHN0YV9pZHgsCiAJCSAgICBwb3dlciwgc2l6ZW9mKCpwb3dlcikpOwogfQogCkBAIC0xMzUsNyArMTM0LDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwogCi0gICAgICAgIG1lbWNweV90b2lvKGRhdGEgKyBBR05YX1BEVVBPT0wgKyBzaXplb2YoKnN0YSkgKiBzdGFfaWR4LAorCW1lbWNweV90b2lvKGRhdGEgKyBBR05YX1BEVVBPT0wgKyBzaXplb2YoKnN0YSkgKiBzdGFfaWR4LAogCQkgICAgc3RhLCBzaXplb2YoKnN0YSkpOwogfQogCkBAIC0xNjUsNyArMTY0LDcgQEAKIAogCXJlZyA9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9WQUxJRCwgV09SS19RVUVVRV9WQUxJRF9TSElGVCwgMSk7CiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9BQ0tfVFlQRSwgV09SS19RVUVVRV9BQ0tfVFlQRV9TSElGVCwgMSk7Ci0vLwlyZWcgfD0gYWdueF9zZXRfYml0cyhXT1JLX1FVRVVFX0FDS19UWVBFLCBXT1JLX1FVRVVFX0FDS19UWVBFX1NISUZULCAwKTsKKy8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfQUNLX1RZUEUsIFdPUktfUVVFVUVfQUNLX1RZUEVfU0hJRlQsIDApOyAqLwogCXR4X3dxLnJlZzIgfD0gY3B1X3RvX2xlMzIocmVnKTsKIAogCS8qIFN1cHBvc2UgYWxsIDggdHJhZmZpYyBjbGFzcyBhcmUgdXNlZCAqLwpAQCAtMTgxLDcgKzE4MCw3IEBACiAKIAlyZWcgPSBhZ254X3NldF9iaXRzKE5FV19QQUNLRVQsIE5FV19QQUNLRVRfU0hJRlQsIDEpOwogCXJlZyB8PSBhZ254X3NldF9iaXRzKFRSQUZGSUNfVkFMSUQsIFRSQUZGSUNfVkFMSURfU0hJRlQsIDEpOwotLy8JcmVnIHw9IGFnbnhfc2V0X2JpdHMoVFJBRkZJQ19BQ0tfVFlQRSwgVFJBRkZJQ19BQ0tfVFlQRV9TSElGVCwgMSk7CisvKglyZWcgfD0gYWdueF9zZXRfYml0cyhUUkFGRklDX0FDS19UWVBFLCBUUkFGRklDX0FDS19UWVBFX1NISUZULCAxKTsgKi8KIAl0cmFmZmljLT5yZWcwID0gY3B1X3RvX2xlMzIocmVnKTsKIAogCS8qIAkzLiBzZXR0aW5nIFJYIFNlcXVlbmNlIE51bWJlciB0byA0MDk1ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5oCmluZGV4IDU4ZDBiMTIuLjk0ZTJjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5oCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIFBBU1MJCTB4MDAwMDAwMDEKICNkZWZpbmUgUEFTU19TSElGVAkxCiAJX19iZTMyIGNtZGxvOwotfV9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwogCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuYwppbmRleCBjNjAwNDg0Li5iNTJmZWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAogCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7CiAKLQlmb3IgKCB0eXBlID0gMDsgdHlwZSA8IDB4MzsgdHlwZSsrICkgeworCWZvciAodHlwZSA9IDA7IHR5cGUgPCAweDM7IHR5cGUrKykgewogCQlmb3IgKHN1YnR5cGUgPSAwOyBzdWJ0eXBlIDwgMHgxMDsgc3VidHlwZSsrKSB7CiAJCQkvKiAxLiBTZXQgUm91dGluZyB0YWJsZSB0byBSL1cgYW5kIHRvIFJldHVybiBzdGF0dXMgb24gUmVhZCAqLwogCQkJcmVnID0gKHR5cGUgPDwgUk9VVEFCX1RZUEVfU0hJRlQpIHwKQEAgLTg5LDcgKzg5LDcgQEAKIAkJCWlmICh0eXBlID09IFJPVVRBQl9UWVBFX0RBVEEpIHsKIAkJCQkvKiBOVUxMIGdvZXMgdG8gUkZQICovCiAJCQkJaWYgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTCkKLS8vCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX1JGUDsKKy8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX1JGUDsgKi8KIAkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9DUFU7CiAJCQkJLyogUU9TIE5VTEwgZ29lcyB0byBDUFUgKi8KIAkJCQllbHNlIGlmIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTEwpCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFQT0xMKSB8fAogCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDS1BPTEwpKQogCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0VOQ1JZOwotLy8JCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOworLyoJCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOyAqLwogCQkJCS8qRHJvcCBOVUxMIGFuZCBRT1MgTlVMTCBhY2ssIHBvbGwgYW5kIHBvbGwgYWNrKi8KIAkJCQllbHNlIGlmICgoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMQUNLKSB8fAogCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TTlVMTEFDSykgfHwKQEAgLTExMiwxMSArMTEyLDExIEBACiAJCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NOVUxMUE9MTCkgfHwKIAkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX05VTExQT0xMQUNLKSB8fAogCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TTlVMTFBPTExBQ0spKQotLy8JCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfRFJPUDsKKy8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0RST1A7ICovCiAJCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOwotCQkJfQotCQkJZWxzZQorCQkJfSBlbHNlIHsKIAkJCQlyZWcgfD0gKFJPVVRBQl9ST1VURV9DUFUpOworCQkJfQogCQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9SWE1fUk9VVEFCKTsKIAkJCS8qIENoZWNrIHRvIHZlcmlmeSB0aGF0IHRoZSBzdGF0dXMgYml0IGNsZWFyZWQgKi8KIAkJCXJvdXRpbmdfdGFibGVfZGVsYXkoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYwppbmRleCA3ZjAxNTI4Li4wZTAzNDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jCkBAIC0xNyw4ICsxNyw4IEBACiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJwaHkuaCIKIAotdW5zaWduZWQgaW50IHJ4X2ZyYW1lX2NudCA9IDA7Ci0vL3Vuc2lnbmVkIGludCBsb2NhbF90eF9zZW50X2NudCA9IDA7Cit1bnNpZ25lZCBpbnQgcnhfZnJhbWVfY250OworLyogdW5zaWduZWQgaW50IGxvY2FsX3R4X3NlbnRfY250ID0gMDsgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfcnhfZW5naW5lKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCiB7CkBAIC0yNDIsMTUgKzI0MiwxNSBAQAogCW1lbXNldChzdGF0LCAwLCBzaXplb2YoKnN0YXQpKTsKIAkvKiBSU1NJICovCiAJcnNzaSA9ICh1OCAqKSZoZHItPnBoeV9zdGF0c19sbzsKLS8vCXN0YXQtPnNzaSA9IChyc3NpWzBdICsgcnNzaVsxXSArIHJzc2lbMl0pIC8gMzsKKy8qCXN0YXQtPnNzaSA9IChyc3NpWzBdICsgcnNzaVsxXSArIHJzc2lbMl0pIC8gMzsgKi8KIAkvKiBOb2lzZSAqLwogCW5vaXNlID0gaW9yZWFkMzIoY3RsICsgQUdOWF9HQ1JfTk9JU0UwKTsKIAlub2lzZSArPSBpb3JlYWQzMihjdGwgKyBBR05YX0dDUl9OT0lTRTEpOwogCW5vaXNlICs9IGlvcmVhZDMyKGN0bCArIEFHTlhfR0NSX05PSVNFMik7CiAJc3RhdC0+bm9pc2UgPSBub2lzZSAvIDM7CiAJLyogU2lnbmFsIHF1YWxpdHkgKi8KLQkvL3NuciA9IHN0YXQtPnNzaSAtIHN0YXQtPm5vaXNlOwotCWlmIChzbnIgPj0wICYmIHNuciA8IDQwKQorLyoJc25yID0gc3RhdC0+c3NpIC0gc3RhdC0+bm9pc2U7ICovCisJaWYgKHNuciA+PSAwICYmIHNuciA8IDQwKQogCQlzdGF0LT5zaWduYWwgPSA1ICogc25yIC8gMjsKIAllbHNlIGlmIChzbnIgPj0gNDApCiAJCXN0YXQtPnNpZ25hbCA9IDEwMDsKQEAgLTI2OSwxMCArMjY5LDkgQEAKIAogCXN0YXQtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCXN0YXQtPmZyZXEgPSBhZ254X2NoYW5uZWxzW3ByaXYtPmNoYW5uZWwgLSAxXS5jZW50ZXJfZnJlcTsKLS8vCXN0YXQtPmFudGVubmEgPSAzOwotLy8Jc3RhdC0+bWFjdGltZSA9IGJlMzJfdG9fY3B1KGhkci0+dGltZV9zdGFtcCk7Ci0vLwlzdGF0LT5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKLQorLyoJc3RhdC0+YW50ZW5uYSA9IDM7CisJc3RhdC0+bWFjdGltZSA9IGJlMzJfdG9fY3B1KGhkci0+dGltZV9zdGFtcCk7CisJc3RhdC0+Y2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7ICovCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21iaW5lX2hkcl9mcmFnKHN0cnVjdCBpZWVlODAyMTFfaGRyICppZWVlaGRyLApAQCAtMjk2LDcgKzI5NSw3IEBACiBzdGF0aWMgaW5saW5lIGludCBhZ254X3BhY2tldF9jaGVjayhzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9oZHIgKmFnbnhoZHIsCiAJCQkJICAgIHVuc2lnbmVkIHBhY2tldF9sZW4pCiB7Ci0JaWYgKGFnbnhfZ2V0X2JpdHMoQ1JDX0ZBSUwsIENSQ19GQUlMX1NISUZULCBiZTMyX3RvX2NwdShhZ254aGRyLT5yZWcxKSkgPT0gMSl7CisJaWYgKGFnbnhfZ2V0X2JpdHMoQ1JDX0ZBSUwsIENSQ19GQUlMX1NISUZULCBiZTMyX3RvX2NwdShhZ254aGRyLT5yZWcxKSkgPT0gMSkgewogCQlwcmludGsoUEZYICJSWDogQ1JDIGNoZWNrIGZhaWxcbiIpOwogCQlnb3RvIGRyb3A7CiAJfQpAQCAtMzIwLDcgKzMxOSw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOwogCXVuc2lnbmVkIGludCBsZW47Ci0vLwlBR05YX1RSQUNFOworLyoJQUdOWF9UUkFDRTsgKi8KIAogCWRvIHsKIAkJc3RydWN0IGFnbnhfZGVzYyAqZGVzYzsKQEAgLTM0MSw1NCArMzQwLDU0IEBACiAKIAkJbGVuID0gKGZyYWcgJiBQQUNLRVRfTEVOKSA+PiBQQUNLRVRfTEVOX1NISUZUOwogCQlpZiAoYWdueF9wYWNrZXRfY2hlY2socHJpdiwgaGRyLCBsZW4pID09IC0xKSB7Ci0gCQkJcnhfZGVzY19yZXVzaW5nKHByaXYsIGkpOworCQkJcnhfZGVzY19yZXVzaW5nKHByaXYsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAkJc2tiX3B1dChza2IsIGxlbik7CiAKIAkJZG8gewotCQkJdTE2IGZjdGw7CisJCQkJdTE2IGZjdGw7CiAJCQlmY3RsID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciktPmZyYW1lX2NvbnRyb2wpOwotCQkJaWYgKChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpICE9IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pLy8gJiYgIShmY3RsICYgSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpCisJCQlpZiAoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgIT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikvKiAmJiAhKGZjdGwgJiBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKSkgKi8KIAkJCQlkdW1wX2llZWU4MDIxMV9oZHIoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyLCAiUlgiKTsKIAkJfSB3aGlsZSAoMCk7CiAKIAkJaWYgKGhkci0+XzExYjAgJiYgIWhkci0+XzExZzApIHsKLS8qIAkJCWludCBqOyAqLwotLyogCQkJdTE2IGZjdGwgPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyKSAqLwotLyogCQkJCQkgICAgICAgLT5mcmFtZV9jb250cm9sKTsgKi8KLS8qIAkJCWlmICggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gIElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7ICovCi0vKiAJCQkJYWdueF9wcmludF9yeF9oZHIoaGRyKTsgKi8KLS8vIAkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7Ci0vKiAJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qIAkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIGopOwkJICovCi0vKiAJCQl9ICovCisvKgkJCWludCBqOworCQkJdTE2IGZjdGwgPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyKQorCQkJCQkgICAgICAgLT5mcmFtZV9jb250cm9sKTsKKwkJCWlmICggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gIElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7CisJCQkJYWdueF9wcmludF9yeF9oZHIoaGRyKTsKKwkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7CisJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKKwkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIGopOworCQkJfSAqLwogCiAJCQlnZXRfcnhfc3RhdHMocHJpdiwgaGRyLCAmc3RhdHVzKTsKIAkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKIAkJCWNvbWJpbmVfaGRyX2ZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyLCBza2IpOwogCQl9IGVsc2UgaWYgKCFoZHItPl8xMWIwICYmIGhkci0+XzExZzApIHsKLS8vCQkJaW50IGo7CisvKgkJCWludCBqOyAqLwogCQkJYWdueF9wcmludF9yeF9oZHIoaGRyKTsKIAkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsKLS8vCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKKy8qCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KIAkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCAwKTsKIAogCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFnbng6IFJYX1BBQ0tFVDogIiwgRFVNUF9QUkVGSVhfTk9ORSwKIAkJCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuICsgOCk7CiAKLS8vCQkJaWYgKGFnbnhfcGxjcF9nZXRfYml0cmF0ZV9vZmRtKCZoZHItPl8xMWcwKSA9PSAwKQorLyoJCQlpZiAoYWdueF9wbGNwX2dldF9iaXRyYXRlX29mZG0oJmhkci0+XzExZzApID09IDApICovCiAJCQlnZXRfcnhfc3RhdHMocHJpdiwgaGRyLCAmc3RhdHVzKTsKIAkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKIAkJCWNvbWJpbmVfaGRyX2ZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopCiAJCQkJCSAoKHZvaWQgKikmaGRyLT5tYWNfaGRyKSwgc2tiKTsKLS8vCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSwgIlJYIEciKTsKKy8qCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSwgIlJYIEciKTsgKi8KIAkJfSBlbHNlCiAJCQlhZ254X2J1ZygiVW5rbm93biBwYWNrZXRzIHR5cGUiKTsKIAkJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHNrYiwgJnN0YXR1cyk7CiAJCXJ4X2Rlc2NfcmVpbml0KHByaXYsIGkpOwogCi0JfSB3aGlsZSAoIHByaXYtPnJ4LmlkeCsrICk7CisJfSB3aGlsZSAocHJpdi0+cnguaWR4KyspOwogfSAvKiBoYW5kbGVfcnhfaXJxICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfdHhfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3JpbmcgKnJpbmcpCkBAIC00MTUsNDAgKzQxNCw0MCBAQAogCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGluZm8tPm1hcHBpbmcsIGluZm8tPmRtYV9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJCWRvIHsKLS8vCQkJaW50IGo7CisvKgkJCWludCBqOyAqLwogCQkJc2l6ZV90IGxlbjsKIAkJCWxlbiA9IGluZm8tPnNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBhZ254X2hkcikgKyBpbmZvLT5oZHJfbGVuOwotCQkJLy8JaWYgKGxlbiA9PSA2MTQpIHsKLS8vCQkJCWFnbnhfcHJpbnRfZGVzYyhkZXNjKTsKKy8qCQkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KKy8qCQkJCWFnbnhfcHJpbnRfZGVzYyhkZXNjKTsgKi8KIAkJCQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpIHsKLS8vCQkJCQlhZ254X3ByaW50X3R4X2hkcigoc3RydWN0IGFnbnhfaGRyICopaW5mby0+c2tiLT5kYXRhKTsKLS8qIAkJCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgTE9DQUxfU1RBSUQpOyAqLwotLyogCQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKiAvLwkJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qIAkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgTE9DQUxfU1RBSUQsIDApOyAqLwotLy8JCQkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIEJTU0lEX1NUQUlEKTsKLS8vCQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7Ci0vLwkJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLS8vCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgMCk7CisvKgkJCQkJYWdueF9wcmludF90eF9oZHIoKHN0cnVjdCBhZ254X2hkciAqKWluZm8tPnNrYi0+ZGF0YSk7ICovCisvKgkJCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgTE9DQUxfU1RBSUQpOyAqLworLyoJCQkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KKy8qCQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLworLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIExPQ0FMX1NUQUlELCAwKTsgKi8KKy8qCQkJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBCU1NJRF9TVEFJRCk7ICovCisvKgkJCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOyAqLworLyoJCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCisvKgkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIDApOyAqLwogCQkJCX0KLS8vCQkJfQorLyoJCQl9ICovCiAJCX0gd2hpbGUgKDApOwogCiAJCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLy8JCQlkdW1wX3R4bV9yZWdpc3RlcnMocHJpdik7Ci0vLwkJCWR1bXBfcnhtX3JlZ2lzdGVycyhwcml2KTsKLS8vCQkJZHVtcF9ibV9yZWdpc3RlcnMocHJpdik7Ci0vLwkJCWR1bXBfY2lyX3JlZ2lzdGVycyhwcml2KTsKKy8qCQkJZHVtcF90eG1fcmVnaXN0ZXJzKHByaXYpOworCQkJZHVtcF9yeG1fcmVnaXN0ZXJzKHByaXYpOworCQkJZHVtcF9ibV9yZWdpc3RlcnMocHJpdik7CisJCQlkdW1wX2Npcl9yZWdpc3RlcnMocHJpdik7ICovCiAJCX0KIAogCQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpIHsKLS8vCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKy8qCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsgKi8KIAkJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpID0gSUVFRTgwMjExX1NLQl9DQihpbmZvLT5za2IpOwogCiAJCQlza2JfcHVsbChpbmZvLT5za2IsIHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpKTsKIAkJCW1lbWNweShza2JfcHVzaChpbmZvLT5za2IsIGluZm8tPmhkcl9sZW4pLCAmaW5mby0+aGRyLCBpbmZvLT5oZHJfbGVuKTsKIAotLy8JCQlkdW1wX2llZWU4MDIxMV9oZHIoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaW5mby0+c2tiLT5kYXRhLCAiVFhfSEFORExFIik7CisvKgkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKilpbmZvLT5za2ItPmRhdGEsICJUWF9IQU5ETEUiKTsgKi8KIC8qIAkJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhZ254OiBUWF9IQU5ETEU6ICIsIERVTVBfUFJFRklYX05PTkUsICovCiAvKiAJCQkJCSAgICAgaW5mby0+c2tiLT5kYXRhLCBpbmZvLT5za2ItPmxlbik7ICovCiAKQEAgLTQ2Miw3ICs0NjEsNyBAQAogLyogCQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgaW5mby0+c2tiLCAmKGluZm8tPnR4X3N0YXR1cykpOyAqLwogLyogCQkJfSBlbHNlICovCiAvKiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW5mby0+c2tiKTsgKi8KLSAJCX0KKwkJfQogCQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7CiAJCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKIAl9CkBAIC00ODUsNyArNDg0LDcgQEAKIAogdm9pZCBoYW5kbGVfb3RoZXJfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCiB7Ci0vLwl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKKy8qCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOyAqLwogCXUzMiBzdGF0dXMgPSBwcml2LT5pcnFfc3RhdHVzOwogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwogCXUzMiByZWc7CkBAIC01MjYsMTEgKzUyNSwxMSBAQAogCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKIAkJaW93cml0ZTMyKElSUV9SWF9GUkFNRSwgY3RsICsgQUdOWF9JTlRfU1RBVCk7CiAJCXByaW50ayhQRlggIklSUTogUlggRnJhbWVcbiIpOwotIAkJcnhfZnJhbWVfY250Kys7CisJCXJ4X2ZyYW1lX2NudCsrOwogCX0KIAlpZiAoc3RhdHVzICYgSVJRX0VSUl9JTlQpIHsKIAkJaW93cml0ZTMyKElSUV9FUlJfSU5ULCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLS8vCQlhZ254X2h3X3Jlc2V0KHByaXYpOworLyoJCWFnbnhfaHdfcmVzZXQocHJpdik7ICovCiAJCXByaW50ayhQRlggIklSUTogRXJyb3IgSW50ZXJydXB0XG4iKTsKIAl9CiAJaWYgKHN0YXR1cyAmIElSUV9UWF9RVUVfRlVMTCkKQEAgLTU1OCwxNCArNTU3LDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByb3V0ZV9mbGFnX3NldChzdHJ1Y3QgYWdueF9oZHIgKnR4aGRyKQogewotLy8JdTMyIHJlZyA9IDA7CisvKgl1MzIgcmVnID0gMDsgKi8KIAogCS8qIEZJWE1FICovCi0vKiAgCXJlZyA9ICgweDcgPDwgUk9VVEVfQ09NUFJFU1NJT05fU0hJRlQpICYgUk9VVEVfQ09NUFJFU1NJT047ICovCi0vKiAJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMihyZWcpOyAqLwotIAl0eGhkci0+cmVnNSA9ICgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCk7Ci0vLyAJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMigoMHhhIDw8IDB4MCkgfCAoMHg3IDw8IDB4MTgpKTsKLS8vIAl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKDB4NyA8PCAweDApOworLyoJcmVnID0gKDB4NyA8PCBST1VURV9DT01QUkVTU0lPTl9TSElGVCkgJiBST1VURV9DT01QUkVTU0lPTjsgKi8KKy8qCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIocmVnKTsgKi8KKwl0eGhkci0+cmVnNSA9ICgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCk7CisvKgl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKCgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCkpOyAqLworLyoJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMigweDcgPDwgMHgwKTsgKi8KIH0KIAogLyogUmV0dXJuIDAgaWYgbm8gbWF0Y2ggKi8KQEAgLTU3OSwxMiArNTc4LDI5IEBACiAJY2FzZSA1NToKIAljYXNlIDYwOgogCWNhc2UgOTA6Ci0JY2FzZSAxMjA6IHBvd2VyX2xldmVsID0gMjI7IGJyZWFrOwotCWNhc2UgMTgwOiBwb3dlcl9sZXZlbCA9IDE5OyBicmVhazsKLQljYXNlIDI0MDogcG93ZXJfbGV2ZWwgPSAxODsgYnJlYWs7Ci0JY2FzZSAzNjA6IHBvd2VyX2xldmVsID0gMTY7IGJyZWFrOwotCWNhc2UgNDgwOiBwb3dlcl9sZXZlbCA9IDE1OyBicmVhazsKLQljYXNlIDU0MDogcG93ZXJfbGV2ZWwgPSAxNDsgYnJlYWs7CisJY2FzZSAxMjA6CisJCXBvd2VyX2xldmVsID0gMjI7CisJCWJyZWFrOworCisJY2FzZSAxODA6CisJCXBvd2VyX2xldmVsID0gMTk7CisJCWJyZWFrOworCisJY2FzZSAyNDA6CisJCXBvd2VyX2xldmVsID0gMTg7CisJCWJyZWFrOworCisJY2FzZSAzNjA6CisJCXBvd2VyX2xldmVsID0gMTY7CisJCWJyZWFrOworCisJY2FzZSA0ODA6CisJCXBvd2VyX2xldmVsID0gMTU7CisJCWJyZWFrOworCisJY2FzZSA1NDA6CisJCXBvd2VyX2xldmVsID0gMTQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWFnbnhfYnVnKCJFcnJvciByYXRlIHNldHRpbmdcbiIpOwogCX0KQEAgLTYwNCwzMCArNjIwLDMwIEBACiAKIAltZW1zZXQodHhoZHIsIDAsIHNpemVvZigqdHhoZHIpKTsKIAotLy8JcmVnID0gYWdueF9zZXRfYml0cyhTVEFUSU9OX0lELCBTVEFUSU9OX0lEX1NISUZULCBMT0NBTF9TVEFJRCk7CisvKglyZWcgPSBhZ254X3NldF9iaXRzKFNUQVRJT05fSUQsIFNUQVRJT05fSURfU0hJRlQsIExPQ0FMX1NUQUlEKTsgKi8KIAlyZWcgPSBhZ254X3NldF9iaXRzKFNUQVRJT05fSUQsIFNUQVRJT05fSURfU0hJRlQsIEJTU0lEX1NUQUlEKTsKIAlyZWcgfD0gYWdueF9zZXRfYml0cyhXT1JLUVVFVUVfSUQsIFdPUktRVUVVRV9JRF9TSElGVCwgMCk7CiAJdHhoZHItPnJlZzQgPSBjcHVfdG9fYmUzMihyZWcpOwogCiAJLyogU2V0IHRoZSBIYXJkd2FyZSBTZXF1ZW5jZSBOdW1iZXIgdG8gMT8gKi8KIAlyZWcgPSBhZ254X3NldF9iaXRzKFNFUVVFTkNFX05VTUJFUiwgU0VRVUVOQ0VfTlVNQkVSX1NISUZULCAwKTsKLS8vCXJlZyA9IGFnbnhfc2V0X2JpdHMoU0VRVUVOQ0VfTlVNQkVSLCBTRVFVRU5DRV9OVU1CRVJfU0hJRlQsIDEpOworLyoJcmVnID0gYWdueF9zZXRfYml0cyhTRVFVRU5DRV9OVU1CRVIsIFNFUVVFTkNFX05VTUJFUl9TSElGVCwgMSk7ICovCiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoTUFDX0hEUl9MRU4sIE1BQ19IRFJfTEVOX1NISUZULCB0eF9pbmZvLT5oZHJfbGVuKTsKIAl0eGhkci0+cmVnMSA9IGNwdV90b19iZTMyKHJlZyk7CiAJLyogU2V0IHRoZSBhZ254X2hkcidzIE1BQyBoZWFkZXIgKi8KIAltZW1jcHkodHhoZHItPm1hY19oZHIsICZ0eF9pbmZvLT5oZHIsIHR4X2luZm8tPmhkcl9sZW4pOwogCiAJcmVnID0gYWdueF9zZXRfYml0cyhBQ0ssIEFDS19TSElGVCwgMSk7Ci0vLwlyZWcgPSBhZ254X3NldF9iaXRzKEFDSywgQUNLX1NISUZULCAwKTsKKy8qCXJlZyA9IGFnbnhfc2V0X2JpdHMoQUNLLCBBQ0tfU0hJRlQsIDApOyAqLwogCXJlZyB8PSBhZ254X3NldF9iaXRzKE1VTFRJQ0FTVCwgTVVMVElDQVNUX1NISUZULCAwKTsKLS8vCXJlZyB8PSBhZ254X3NldF9iaXRzKE1VTFRJQ0FTVCwgTVVMVElDQVNUX1NISUZULCAxKTsKKy8qCXJlZyB8PSBhZ254X3NldF9iaXRzKE1VTFRJQ0FTVCwgTVVMVElDQVNUX1NISUZULCAxKTsgKi8KIAlyZWcgfD0gYWdueF9zZXRfYml0cyhSRUxBWSwgUkVMQVlfU0hJRlQsIDApOwogCXJlZyB8PSBhZ254X3NldF9iaXRzKFRNLCBUTV9TSElGVCwgMCk7CiAJdHhoZHItPnJlZzAgPSBjcHVfdG9fYmUzMihyZWcpOwogCiAJLyogU2V0IHRoZSBsb25nIGFuZCBzaG9ydCByZXRyeSBsaW1pdHMgKi8KLSAJdHhoZHItPnR4LnNob3J0X3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotIAl0eGhkci0+dHgubG9uZ19yZXRyeV9saW1pdCA9IHR4X2luZm8tPnR4aS0+Y29udHJvbC5yYXRlc1swXS5jb3VudDsKKwl0eGhkci0+dHguc2hvcnRfcmV0cnlfbGltaXQgPSB0eF9pbmZvLT50eGktPmNvbnRyb2wucmF0ZXNbMF0uY291bnQ7CisJdHhoZHItPnR4LmxvbmdfcmV0cnlfbGltaXQgPSB0eF9pbmZvLT50eGktPmNvbnRyb2wucmF0ZXNbMF0uY291bnQ7CiAKIAkvKiBGSVhNRSAqLwogCWxlbiA9IHR4X2luZm8tPnNrYi0+bGVuIC0gc2l6ZW9mKCp0eGhkcikgKyB0eF9pbmZvLT5oZHJfbGVuICsgRkNTX0xFTjsKQEAgLTY1MiwyMyArNjY4LDIzIEBACiAJaWYgKHR4aS0+Y29udHJvbC5yYXRlc1swXS5pZHggPCAwKSB7CiAJCS8qIEZvciBCIG1vZGUgU2hvcnQgUHJlYW1ibGUgKi8KIAkJcmVnID0gYWdueF9zZXRfYml0cyhQSFlfTU9ERSwgUEhZX01PREVfU0hJRlQsIEFHTlhfTU9ERV84MDIxMUJfU0hPUlQpOwotLy8JCWNvbnRyb2wtPnR4X3JhdGUgPSAtY29udHJvbC0+dHhfcmF0ZTsKKy8qCQljb250cm9sLT50eF9yYXRlID0gLWNvbnRyb2wtPnR4X3JhdGU7ICovCiAJfSBlbHNlCiAJCXJlZyA9IGFnbnhfc2V0X2JpdHMoUEhZX01PREUsIFBIWV9NT0RFX1NISUZULCBBR05YX01PREVfODAyMTFHKTsKLS8vCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExQl9MT05HKTsKKy8qCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExQl9MT05HKTsgKi8KIAlyZWcgfD0gYWdueF9zZXRfYml0cyhTSUdOQUwsIFNJR05BTF9TSElGVCwgMHhCKTsKIAlyZWcgfD0gYWdueF9zZXRfYml0cyhSQVRFLCBSQVRFX1NISUZULCAweEIpOwotLy8JcmVnIHw9IGFnbnhfc2V0X2JpdHMoUE9XRVJfTEVWRUwsIFBPV0VSX0xFVkVMX1NISUZULCAxNSk7CisvKglyZWcgfD0gYWdueF9zZXRfYml0cyhQT1dFUl9MRVZFTCwgUE9XRVJfTEVWRUxfU0hJRlQsIDE1KTsgKi8KIAlyZWcgfD0gYWdueF9zZXRfYml0cyhQT1dFUl9MRVZFTCwgUE9XRVJfTEVWRUxfU0hJRlQsIDIwKTsKIAkvKiBpZiByYXRlIDwgMTFNIHNldCBpdCB0byAwICovCiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoTlVNX1RSQU5TTUlUVEVSUywgTlVNX1RSQU5TTUlUVEVSU19TSElGVCwgMSk7Ci0vLwlyZWcgfD0gYWdueF9zZXRfYml0cyhFRENGLCBFRENGX1NISUZULCAxKTsKLS8vCXJlZyB8PSBhZ254X3NldF9iaXRzKFRJRlMsIFRJRlNfU0hJRlQsIDEpOworLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoRURDRiwgRURDRl9TSElGVCwgMSk7ICovCisvKglyZWcgfD0gYWdueF9zZXRfYml0cyhUSUZTLCBUSUZTX1NISUZULCAxKTsgKi8KIAogCXBvd2VyLnJlZyA9IHJlZzsKLS8vCXBvd2VyLnJlZyA9IGNwdV90b19sZTMyKHJlZyk7CisvKglwb3dlci5yZWcgPSBjcHVfdG9fbGUzMihyZWcpOyAqLwogCi0vLwlzZXRfc3RhX3Bvd2VyKHByaXYsICZwb3dlciwgTE9DQUxfU1RBSUQpOworLyoJc2V0X3N0YV9wb3dlcihwcml2LCAmcG93ZXIsIExPQ0FMX1NUQUlEKTsgKi8KIAlzZXRfc3RhX3Bvd2VyKHByaXYsICZwb3dlciwgQlNTSURfU1RBSUQpOwogfQogCkBAIC03NTksMjQgKzc3NSwyNCBAQAogCiAJdHhtX3Bvd2VyX3NldChwcml2LCB0eGkpOwogCi0vKiAJZG8geyAqLwotLyogCQlpbnQgajsgKi8KLS8qIAkJc2l6ZV90IGxlbjsgKi8KLS8qIAkJbGVuID0gc2tiLT5sZW4gLSBoZHJfaW5mby0+ZG1hX2xlbiArIGhkcl9pbmZvLT5oZHJfbGVuOyAgKi8KLS8qIC8vCQlpZiAobGVuID09IDYxNCkgeyAqLwotLyogCQkJYWdueF9wcmludF9kZXNjKGhkcl9kZXNjKTsgKi8KLS8qIAkJCWFnbnhfcHJpbnRfZGVzYyhmcmFnX2Rlc2MpOyAqLwotLyogCQkJYWdueF9wcmludF90eF9oZHIoKHN0cnVjdCBhZ254X2hkciAqKXNrYi0+ZGF0YSk7ICovCi0vKiAJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKiAJCQlhZ254X3ByaW50X3N0YShwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKiAJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotLyogCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIExPQ0FMX1NUQUlELCBqKTsgKi8KLS8qIAkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KLS8qIAkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KLS8qIAkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKiAJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIGopOyAqLwotLyogCQkJLy8JfSAqLwotLyogCX0gd2hpbGUgKDApOyAqLworLyoJZG8geyAqLworLyoJCWludCBqOyAqLworLyoJCXNpemVfdCBsZW47ICovCisvKgkJbGVuID0gc2tiLT5sZW4gLSBoZHJfaW5mby0+ZG1hX2xlbiArIGhkcl9pbmZvLT5oZHJfbGVuOyAgKi8KKy8qCQlpZiAobGVuID09IDYxNCkgeyAqLworLyoJCQlhZ254X3ByaW50X2Rlc2MoaGRyX2Rlc2MpOyAqLworLyoJCQlhZ254X3ByaW50X2Rlc2MoZnJhZ19kZXNjKTsgKi8KKy8qCQkJYWdueF9wcmludF90eF9oZHIoKHN0cnVjdCBhZ254X2hkciAqKXNrYi0+ZGF0YSk7ICovCisvKgkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KKy8qCQkJYWdueF9wcmludF9zdGEocHJpdiwgTE9DQUxfU1RBSUQpOyAqLworLyoJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLworLyoJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgTE9DQUxfU1RBSUQsIGopOyAqLworLyoJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBCU1NJRF9TVEFJRCk7ICovCisvKgkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KKy8qCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KKy8qCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCBqKTsgKi8KKy8qCQkJfSAqLworLyoJfSB3aGlsZSAoMCk7ICovCiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTc4Nyw3ICs4MDMsNyBAQAogCQlyZWcgPSAoaW9yZWFkMzIocHJpdi0+Y3RsICsgQUdOWF9DSVJfVFhNQ1RMKSk7CiAJCXJlZyB8PSAweDg7CiAJCWlvd3JpdGUzMigocmVnKSwgcHJpdi0+Y3RsICsgQUdOWF9DSVJfVFhNQ1RMKTsKLQl9d2hpbGUgKDApOworCX0gd2hpbGUgKDApOwogCiAJLyogVHJpZ2dlciBUWEQgKi8KIAlkbyB7CkBAIC03OTUsNyArODExLDcgQEAKIAkJcmVnID0gKGlvcmVhZDMyKHByaXYtPmN0bCArIEFHTlhfQ0lSX1RYRENUTCkpOwogCQlyZWcgfD0gMHg4OwogCQlpb3dyaXRlMzIoKHJlZyksIHByaXYtPmN0bCArIEFHTlhfQ0lSX1RYRENUTCk7Ci0JfXdoaWxlICgwKTsKKwl9IHdoaWxlICgwKTsKIAogCXJldHVybiAwOwogfQpAQCAtODA3LDEyICs4MjMsMTIgQEAKIAlpZiAodHhfcGFja2V0X2NoZWNrKHNrYikpCiAJCXJldHVybiAwOwogCi0vKiAJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFnbng6IFRYX1BBQ0tFVDogIiwgRFVNUF9QUkVGSVhfTk9ORSwgKi8KLS8qIAkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbik7ICovCisvKglwcmludF9oZXhfZHVtcF9ieXRlcygiYWdueDogVFhfUEFDS0VUOiAiLCBEVU1QX1BSRUZJWF9OT05FLCAqLworLyoJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOyAqLwogCi0gICAgICAgIGZjdGwgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilza2ItPmRhdGEpKTsKKwlmY3RsID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopc2tiLT5kYXRhKSk7CiAKLQlpZiAoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSApCisJaWYgKChmY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKQogCQlyZXR1cm4gX19hZ254X3R4KHByaXYsIHNrYiwgJnByaXYtPnR4ZCk7CiAJZWxzZQogCQlyZXR1cm4gX19hZ254X3R4KHByaXYsIHNrYiwgJnByaXYtPnR4bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL2FsdHBjaWVjaGRtYS5jIGIvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9hbHRwY2llY2hkbWEuYwppbmRleCBmNTE2MTQwLi4zZTQxZTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL2FsdHBjaWVjaGRtYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvYWx0cGNpZWNoZG1hLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0zMTMsMTUgKzMxMiwxNiBAQAogCQkJY29udGludWU7CiAJCS8qIGRvIG5vdCBtYXAgQkFScyB3aXRoIGFkZHJlc3MgMCAqLwogCQlpZiAoIWJhcl9zdGFydCB8fCAhYmFyX2VuZCkgewotICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIkJBUiAjJWQgaXMgbm90IHByZXNlbnQ/IVxuIiwgaSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQkFSICMlZCBpcyBub3QgcHJlc2VudD8hXG4iLCBpKTsKIAkJCXJjID0gLTE7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAkJYmFyX2xlbmd0aCA9IGJhcl9lbmQgLSBiYXJfc3RhcnQgKyAxOwogCQkvKiBCQVIgbGVuZ3RoIGlzIGxlc3MgdGhhbiBkcml2ZXIgcmVxdWlyZXM/ICovCiAJCWlmIChiYXJfbGVuZ3RoIDwgYmFyX21pbl9sZW5baV0pIHsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJCQVIgIyVkIGxlbmd0aCA9ICVsdSBieXRlcyBidXQgZHJpdmVyICIKLSAgICAgICAgICAgICJyZXF1aXJlcyBhdCBsZWFzdCAlbHUgYnl0ZXNcbiIsIGksIGJhcl9sZW5ndGgsIGJhcl9taW5fbGVuW2ldKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJCQVIgIyVkIGxlbmd0aCA9ICVsdSBieXRlcyBidXQgZHJpdmVyICIKKwkJCSJyZXF1aXJlcyBhdCBsZWFzdCAlbHUgYnl0ZXNcbiIsCisJCQlpLCBiYXJfbGVuZ3RoLCBiYXJfbWluX2xlbltpXSk7CiAJCQlyYyA9IC0xOwogCQkJZ290byBmYWlsOwogCQl9CkBAIC0zMzMsOCArMzMzLDggQEAKIAkJCXJjID0gLTE7CiAJCQlnb3RvIGZhaWw7CiAJCX0KLSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIkJBUlslZF0gbWFwcGVkIGF0IDB4JXAgd2l0aCBsZW5ndGggJWx1KC8lbHUpLlxuIiwgaSwKLQkJCWFwZS0+YmFyW2ldLCBiYXJfbWluX2xlbltpXSwgYmFyX2xlbmd0aCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCQVJbJWRdIG1hcHBlZCBhdCAweCVwIHdpdGggbGVuZ3RoICVsdSgvJWx1KS5cbiIsIGksCisJCWFwZS0+YmFyW2ldLCBiYXJfbWluX2xlbltpXSwgYmFyX2xlbmd0aCk7CiAJfQogCS8qIHN1Y2Nlc2Z1bGx5IG1hcHBlZCBhbGwgcmVxdWlyZWQgQkFSIHJlZ2lvbnMgKi8KIAlyYyA9IDA7CkBAIC00MjcsMTEgKzQyNywxMyBAQAogCQlkbWFfYWRkcl90IG5leHQgPSBzZ19kbWFfYWRkcmVzcygmc2dsW2kgKyAxXSk7CiAJCS8qIGxlbmd0aCBvZiB0aGlzIGVudHJ5IGkgKi8KIAkJbGVuID0gc2dfZG1hX2xlbigmc2dsW2ldKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiUwNGQ6IGFkZHI9MHglMDh4IGxlbmd0aD0weCUwOHhcbiIsIGksIGFkZHIsIGxlbik7CisJCXByaW50ayhLRVJOX0RFQlVHICIlMDRkOiBhZGRyPTB4JUx4IGxlbmd0aD0weCUwOHhcbiIsIGksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIGxlbik7CiAJCS8qIGVudHJ5IGkgKyAxIGlzIG5vbi1jb250aWd1b3VzIHdpdGggZW50cnkgaT8gKi8KIAkJaWYgKG5leHQgIT0gYWRkciArIGxlbikgewogCQkJLyogVE9ETyBjcmVhdGUgZW50cnkgaGVyZSAod2UgY291bGQgb3ZlcndyaXRlIGkpICovCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTRkOiBjb250X2FkZHI9MHglMDh4IGNvbnRfbGVuPTB4JTA4eFxuIiwgaiwgY29udF9hZGRyLCBjb250X2xlbik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJTRkOiBjb250X2FkZHI9MHglTHggY29udF9sZW49MHglMDh4XG4iLCBqLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29udF9hZGRyLCBjb250X2xlbik7CiAJCQkvKiBzZXQgZGVzY3JpcHRvciBmb3IgY29udGlndW91cyB0cmFuc2ZlciAqLwogCQkJYXBlX2NoZG1hX2Rlc2Nfc2V0KCZkZXNjW2pdLCBjb250X2FkZHIsIGVwX2FkZHIsIGNvbnRfbGVuKTsKIAkJCS8qIG5leHQgZW5kIHBvaW50IG1lbW9yeSBhZGRyZXNzICovCkBAIC00NDcsOCArNDQ5LDEwIEBACiAJCWFkZHIgPSBuZXh0OwogCX0KIAkvKiBUT0RPIGNyZWF0ZSBlbnRyeSBoZXJlICAod2UgY291bGQgb3ZlcndyaXRlIGkpICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiUwNGQ6IGFkZHI9MHglMDh4IGxlbmd0aD0weCUwOHhcbiIsIGksIGFkZHIsIGxlbik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiU0ZDogY29udF9hZGRyPTB4JTA4eCBsZW5ndGg9MHglMDh4XG4iLCBqLCBjb250X2FkZHIsIGNvbnRfbGVuKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJTA0ZDogYWRkcj0weCVMeCBsZW5ndGg9MHglMDh4XG4iLCBpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIGxlbik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiU0ZDogY29udF9hZGRyPTB4JUx4IGxlbmd0aD0weCUwOHhcbiIsIGosCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29udF9hZGRyLCBjb250X2xlbik7CiAJaisrOwogCXJldHVybiBqOwogfQpAQCAtNDY3LDE1ICs0NzEsMTQgQEAKIAkJfSBlbHNlIHsKIAkJCWZhaWwrKzsKIAkJCS8qIHNob3cgdGhlIGZpcnN0IGZldyBtaXNjb21wYXJlcyAqLwotCQkJaWYgKGZhaWwgPCAxMCkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJbJXBdID0gMHglMDh4ICE9IFslcF0gPSAweCUwOHggPyFcbiIsIHAsICpwLCBxLCAqcSk7Ci0gICAgICAgICAgICAvKiBidXQgc3RvcCBhZnRlciBhIHdoaWxlICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGZhaWwgPT0gMTApIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiLS0tbW9yZSBlcnJvcnMgZm9sbG93ISBub3QgcHJpbnRlZC0tLVxuIik7Ci0JCSAgCX0gZWxzZSB7CisJCQlpZiAoZmFpbCA8IDEwKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICJbJXBdID0gMHglMDh4ICE9IFslcF0gPSAweCUwOHggPyFcbiIsIHAsICpwLCBxLCAqcSk7CisJCQkJLyogYnV0IHN0b3AgYWZ0ZXIgYSB3aGlsZSAqLworCQkJZWxzZSBpZiAoZmFpbCA9PSAxMCkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiLS0tbW9yZSBlcnJvcnMgZm9sbG93ISBub3QgcHJpbnRlZC0tLVxuIik7CisJCQllbHNlCiAJCQkJLyogc3RvcCBjb21wYXJlIGFmdGVyIHRoaXMgbWFueSBlcnJvcnMgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKwkJCWJyZWFrOwogCQl9CiAJCXArKzsKIAkJcSsrOwpAQCAtNTI4LDcgKzUzMSw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImFwZS0+dGFibGVfdmlydCA9IDB4JXAuXG4iLCBhcGUtPnRhYmxlX3ZpcnQpOwogCiAJaWYgKCF3cml0ZV9oZWFkZXIgfHwgIXJlYWRfaGVhZGVyIHx8ICFhcGUtPnRhYmxlX3ZpcnQpCi0gICAgICAgIGdvdG8gZmFpbDsKKwkJZ290byBmYWlsOwogCiAJLyogYWxsb2NhdGUgYW5kIG1hcCBjb2hlcmVudGx5LWNhY2hlZCBtZW1vcnkgZm9yIGEgRE1BLWFibGUgYnVmZmVyICovCiAJLyogQHNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0LCBuZWFyIGxpbmUgMzE4ICovCkBAIC01NjUsOSArNTY4LDggQEAKIAkvKiByZWFkIDgxOTIgYnl0ZXMgZnJvbSBSQyBidWZmZXIgdG8gRVAgYWRkcmVzcyA0MDk2ICovCiAJYXBlX2NoZG1hX2Rlc2Nfc2V0KCZhcGUtPnRhYmxlX3ZpcnQtPmRlc2Nbbl0sIGJ1ZmZlcl9idXMsIDQwOTYsIDIgKiBQQUdFX1NJWkUpOwogI2lmIDEKLQlmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspCiAJCWFwZV9jaGRtYV9kZXNjX3NldCgmYXBlLT50YWJsZV92aXJ0LT5kZXNjW2ldLCBidWZmZXJfYnVzLCA0MDk2LCAyICogUEFHRV9TSVpFKTsKLQl9CiAJLyogaW5kZXggb2YgbGFzdCBkZXNjcmlwdG9yICovCiAJbiA9IGkgLSAxOwogI2VuZGlmCkBAIC02NDcsNyArNjQ5LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkVQTEFTVCA9ICV1LCBuID0gJWRcbiIsIGVwbGFzdCwgbik7CiAJCWlmIChlcGxhc3QgPT0gbikgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkRPTkVcbiIpOwotICAgICAgICAgICAgLyogcHJpbnQgSVJRIGNvdW50IGJlZm9yZSB0aGUgdHJhbnNmZXIgKi8KKwkJCS8qIHByaW50IElSUSBjb3VudCBiZWZvcmUgdGhlIHRyYW5zZmVyICovCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiI0lSUXMgZHVyaW5nIHRyYW5zZmVyOiAlZFxuIiwgYXBlLT5pcnFfY291bnQgLSBpcnFfY291bnQpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTY2MSw5ICs2NjMsOSBAQAogCW4gPSAwOwogCWFwZV9jaGRtYV9kZXNjX3NldCgmYXBlLT50YWJsZV92aXJ0LT5kZXNjW25dLCBidWZmZXJfYnVzICsgODE5MiwgNDA5NiwgMiAqIFBBR0VfU0laRSk7CiAjaWYgMQotCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykKIAkJYXBlX2NoZG1hX2Rlc2Nfc2V0KCZhcGUtPnRhYmxlX3ZpcnQtPmRlc2NbaV0sIGJ1ZmZlcl9idXMgKyA4MTkyLCA0MDk2LCAyICogUEFHRV9TSVpFKTsKLQl9CisKIAkvKiBpbmRleCBvZiBsYXN0IGRlc2NyaXB0b3IgKi8KIAluID0gaSAtIDE7CiAjZW5kaWYKQEAgLTY5MSw3ICs2OTMsNyBAQAogCXcgPSAodTMyKShuICsgMSk7CiAJLyogZW5hYmxlIHVwZGF0ZXMgb2YgZXBsYXN0IGZvciBlYWNoIGRlc2NyaXB0b3IgY29tcGxldGlvbiAqLwogCXcgfD0gKHUzMikoMVVMIDw8IDE4KS8qZ2xvYmFsIEVQTEFTVF9FTiovOwotI2lmIDAgLy8gdGVzdCB2YXJpYWJsZSwgbWFrZSBhIG1vZHVsZSBvcHRpb24gbGF0ZXIKKyNpZiAwICAgLyogdGVzdCB2YXJpYWJsZSwgbWFrZSBhIG1vZHVsZSBvcHRpb24gbGF0ZXIgKi8KIAkvKiBlbmFibGUgTVNJIGZvciBlYWNoIGRlc2NyaXB0b3IgY29tcGxldGlvbiAqLwogCWlmIChhcGUtPm1zaV9lbmFibGVkKQogCQl3IHw9ICgxVUwgPDwgMTcpLypnbG9iYWwgTVNJKi87CkBAIC03MTUsNyArNzE3LDcgQEAKIAkvKiogbWVtb3J5IHdyaXRlIGJhcnJpZXIgKi8KIAl3bWIoKTsKIAkvKiogZHVtbXkgcmVhZCB0byBmbHVzaCBwb3N0ZWQgd3JpdGVzICovCi0JLy8odm9pZClpb3JlYWQzMigpOworCS8qICh2b2lkKSBpb3JlYWQzMigpOyAqLwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIlBPTEwgRk9SIFdSSVRFOlxuIik7CiAJLyogcG9sbCBmb3IgY29tcGxldGlvbiwgMTAwMCB0aW1lcyAxIG1pbGxpc2Vjb25kICovCkBAIC04NDQsNyArODQ2LDcgQEAKIAl9CiAJYXBlLT5nb3RfcmVnaW9ucyA9IDE7CiAKLSNpZiAxIC8vIEB0b2RvIEZvciBub3csIGRpc2FibGUgNjQtYml0LCBiZWNhdXNlIEkgZG8gbm90IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyAoREFDISkKKyNpZiAxICAgLyogQHRvZG8gRm9yIG5vdywgZGlzYWJsZSA2NC1iaXQsIGJlY2F1c2UgSSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChEQUMhKSAqLwogCS8qIHF1ZXJ5IGZvciBETUEgdHJhbnNmZXIgKi8KIAkvKiBAc2VlIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQgKi8KIAlpZiAoIXBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfNjRCSVRfTUFTSykpIHsKQEAgLTk0Nyw3ICs5NDksOCBAQAogCXN0cnVjdCBhcGVfZGV2ICphcGU7CiAJcHJpbnRrKEtFUk5fREVCVUcgInJlbW92ZSgweCVwKVxuIiwgZGV2KTsKIAlpZiAoKGRldiA9PSAwKSB8fCAoZGV2LT5kZXYuZHJpdmVyX2RhdGEgPT0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInJlbW92ZShkZXYgPSAweCVwKSBkZXYtPmRldi5kcml2ZXJfZGF0YSA9IDB4JXBcbiIsIGRldiwgZGV2LT5kZXYuZHJpdmVyX2RhdGEpOworCQlwcmludGsoS0VSTl9ERUJVRyAicmVtb3ZlKGRldiA9IDB4JXApIGRldi0+ZGV2LmRyaXZlcl9kYXRhID0gMHglcFxuIiwKKwkJCWRldiwgKGRldj8gZGV2LT5kZXYuZHJpdmVyX2RhdGE6IE5VTEwpKTsKIAkJcmV0dXJuOwogCX0KIAlhcGUgPSAoc3RydWN0IGFwZV9kZXYgKilkZXYtPmRldi5kcml2ZXJfZGF0YTsKQEAgLTEwNDgsMTAgKzEwNTEsOSBAQAogCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICJfd3JpdGUoYnVmPTB4JXAsIGNvdW50PSVsbGQsIHBvcz0lbGx1KVxuIiwKIAkJYnVmLCAoczY0KWNvdW50LCAodTY0KSpwb3MpOwogCS8qIFRPRE8gdHJhbnNmZXIgYm91bmRhcmllcyBhdCBQQUdFX1NJWkUgZ3JhbnVsYXJpdHkgKi8KLQl3aGlsZSAocmVtYWluaW5nID4gMCkKLQl7CisJd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKIAkJLyogbGltaXQgRE1BIHRyYW5zZmVyIHNpemUgKi8KLQkJdHJhbnNmZXJfbGVuID0gKHJlbWFpbmluZyA8IEFQRV9DSERNQV9NQVhfVFJBTlNGRVJfTEVOKT8gcmVtYWluaW5nOgorCQl0cmFuc2Zlcl9sZW4gPSAocmVtYWluaW5nIDwgQVBFX0NIRE1BX01BWF9UUkFOU0ZFUl9MRU4pID8gcmVtYWluaW5nIDoKIAkJCUFQRV9DSERNQV9NQVhfVFJBTlNGRVJfTEVOOwogCQkvKiBnZXQgYWxsIHVzZXIgc3BhY2UgYnVmZmVyIHBhZ2VzIGFuZCBjcmVhdGUgYSBzY2F0dGVyZ2F0aGVyIGxpc3QgKi8KIAkJc2dtX21hcF91c2VyX3BhZ2VzKGFwZS0+c2dtLCB0cmFuc2Zlcl9hZGRyLCB0cmFuc2Zlcl9sZW4sIDAvKnJlYWQgZnJvbSB1c2Vyc3BhY2UqLyk7CkBAIC0xMDg1LDEyICsxMDg3LDEyIEBACiAvKgogICogY2hhcmFjdGVyIGRldmljZSBmaWxlIG9wZXJhdGlvbnMKICAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dfZm9wcyA9IHsKLSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0gIC5vcGVuID0gc2dfb3BlbiwKLSAgLnJlbGVhc2UgPSBzZ19jbG9zZSwKLSAgLnJlYWQgPSBzZ19yZWFkLAotICAud3JpdGUgPSBzZ193cml0ZSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNnX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBzZ19vcGVuLAorCS5yZWxlYXNlID0gc2dfY2xvc2UsCisJLnJlYWQgPSBzZ19yZWFkLAorCS53cml0ZSA9IHNnX3dyaXRlLAogfTsKIAogLyogc2dfaW5pdCgpIC0gSW5pdGlhbGl6ZSBjaGFyYWN0ZXIgZGV2aWNlCkBAIC0xMTU4LDEyICsxMTYwLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGFsdGVyYXBjaWVjaGRtYV9pbml0KHZvaWQpCiB7Ci0gIGludCByYyA9IDA7CisJaW50IHJjID0gMDsKIAlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiIGluaXQoKSwgYnVpbHQgYXQgIiBfX0RBVEVfXyAiICIgX19USU1FX18gIlxuIik7CiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgUENJIGJ1cyBkcml2ZXIgKi8KIAlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIpOwogCWlmIChyYyA8IDApCi0JICByZXR1cm4gcmM7CisJCXJldHVybiByYzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9iaW5kZXIuYwppbmRleCA3NTgxMzFjLi43OWU5MGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9iaW5kZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9iaW5kZXIuYwpAQCAtMjY0OSwxNCArMjY0OSwyMiBAQAogewogCXN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYyA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCWlmIChiaW5kZXJfZGVidWdfbWFzayAmIEJJTkRFUl9ERUJVR19PUEVOX0NMT1NFKQotCQlwcmludGsoS0VSTl9JTkZPICJiaW5kZXI6ICVkIG9wZW4gdm0gYXJlYSAlbHgtJWx4ICglbGQgSykgdm1hICVseCBwYWdlcCAlbHhcbiIsIHByb2MtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIC8gU1pfMUssIHZtYS0+dm1fZmxhZ3MsIHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImJpbmRlcjogJWQgb3BlbiB2bSBhcmVhICVseC0lbHggKCVsZCBLKSB2bWEgJWx4IHBhZ2VwICVseFxuIiwKKwkJCXByb2MtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQkodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSAvIFNaXzFLLCB2bWEtPnZtX2ZsYWdzLAorCQkJKHVuc2lnbmVkIGxvbmcpcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkpOwogCWR1bXBfc3RhY2soKTsKIH0KIHN0YXRpYyB2b2lkIGJpbmRlcl92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGJpbmRlcl9wcm9jICpwcm9jID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJaWYgKGJpbmRlcl9kZWJ1Z19tYXNrICYgQklOREVSX0RFQlVHX09QRU5fQ0xPU0UpCi0JCXByaW50ayhLRVJOX0lORk8gImJpbmRlcjogJWQgY2xvc2Ugdm0gYXJlYSAlbHgtJWx4ICglbGQgSykgdm1hICVseCBwYWdlcCAlbHhcbiIsIHByb2MtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIC8gU1pfMUssIHZtYS0+dm1fZmxhZ3MsIHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImJpbmRlcjogJWQgY2xvc2Ugdm0gYXJlYSAlbHgtJWx4ICglbGQgSykgdm1hICVseCBwYWdlcCAlbHhcbiIsCisJCQlwcm9jLT5waWQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAorCQkJKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgLyBTWl8xSywgdm1hLT52bV9mbGFncywKKwkJCSh1bnNpZ25lZCBsb25nKXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpKTsKIAlwcm9jLT52bWEgPSBOVUxMOwogfQogCkBAIC0yNjc3LDcgKzI2ODUsMTEgQEAKIAkJdm1hLT52bV9lbmQgPSB2bWEtPnZtX3N0YXJ0ICsgU1pfNE07CiAKIAlpZiAoYmluZGVyX2RlYnVnX21hc2sgJiBCSU5ERVJfREVCVUdfT1BFTl9DTE9TRSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYmluZGVyX21tYXA6ICVkICVseC0lbHggKCVsZCBLKSB2bWEgJWx4IHBhZ2VwICVseFxuIiwgcHJvYy0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgLyBTWl8xSywgdm1hLT52bV9mbGFncywgcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkpOworCQlwcmludGsoS0VSTl9JTkZPCisJCQkiYmluZGVyX21tYXA6ICVkICVseC0lbHggKCVsZCBLKSB2bWEgJWx4IHBhZ2VwICVseFxuIiwKKwkJCXByb2MtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQkodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSAvIFNaXzFLLCB2bWEtPnZtX2ZsYWdzLAorCQkJKHVuc2lnbmVkIGxvbmcpcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkpOwogCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBGT1JCSURERU5fTU1BUF9GTEFHUykgewogCQlyZXQgPSAtRVBFUk07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9yYW1fY29uc29sZS5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvcmFtX2NvbnNvbGUuYwppbmRleCA2NDNhYzVjLi4zMzc1YzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9yYW1fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3JhbV9jb25zb2xlLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCQlidWZmZXJfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgcmFtX2NvbnNvbGVfYnVmZmVyKTsKIAogCWlmIChyYW1fY29uc29sZV9idWZmZXJfc2l6ZSA+IGJ1ZmZlcl9zaXplKSB7Ci0JCXByX2VycigicmFtX2NvbnNvbGU6IGJ1ZmZlciAlcCwgaW52YWxpZCBzaXplICVkLCBkYXRhc2l6ZSAlZFxuIiwKKwkJcHJfZXJyKCJyYW1fY29uc29sZTogYnVmZmVyICVwLCBpbnZhbGlkIHNpemUgJXp1LCBkYXRhc2l6ZSAlenVcbiIsCiAJCSAgICAgICBidWZmZXIsIGJ1ZmZlcl9zaXplLCByYW1fY29uc29sZV9idWZmZXJfc2l6ZSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTIzNSw4ICsyMzUsOCBAQAogCQkJCQkJRUNDX0JMT0NLX1NJWkUpICsgMSkgKiBFQ0NfU0laRTsKIAogCWlmIChyYW1fY29uc29sZV9idWZmZXJfc2l6ZSA+IGJ1ZmZlcl9zaXplKSB7Ci0JCXByX2VycigicmFtX2NvbnNvbGU6IGJ1ZmZlciAlcCwgaW52YWxpZCBzaXplICVkLCAiCi0JCSAgICAgICAibm9uLWVjYyBkYXRhc2l6ZSAlZFxuIiwKKwkJcHJfZXJyKCJyYW1fY29uc29sZTogYnVmZmVyICVwLCBpbnZhbGlkIHNpemUgJXp1LCAiCisJCSAgICAgICAibm9uLWVjYyBkYXRhc2l6ZSAlenVcbiIsCiAJCSAgICAgICBidWZmZXIsIGJ1ZmZlcl9zaXplLCByYW1fY29uc29sZV9idWZmZXJfc2l6ZSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTMyMiw3ICszMjIsNyBAQAogCX0KIAlidWZmZXJfc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CiAJc3RhcnQgPSByZXMtPnN0YXJ0OwotCXByaW50ayhLRVJOX0lORk8gInJhbV9jb25zb2xlOiBnb3QgYnVmZmVyIGF0ICV4LCBzaXplICV4XG4iLAorCXByaW50ayhLRVJOX0lORk8gInJhbV9jb25zb2xlOiBnb3QgYnVmZmVyIGF0ICV6eCwgc2l6ZSAlenhcbiIsCiAJICAgICAgIHN0YXJ0LCBidWZmZXJfc2l6ZSk7CiAJYnVmZmVyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBidWZmZXJfc2l6ZSk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXN1c19vbGVkL2FzdXNfb2xlZC5jIGIvZHJpdmVycy9zdGFnaW5nL2FzdXNfb2xlZC9hc3VzX29sZWQuYwppbmRleCA2NjZhMTg2Li4wNGRkZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXN1c19vbGVkL2FzdXNfb2xlZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvYXN1c19vbGVkLmMKQEAgLTU2LDEwICs1NiwxMCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBc3VzIE9MRUQgRHJpdmVyIHYiIEFTVVNfT0xFRF9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHN0cnVjdCBjbGFzcyAqb2xlZF9jbGFzcyA9IDA7Ci1zdGF0aWMgaW50IG9sZWRfbnVtID0gMDsKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKm9sZWRfY2xhc3M7CitzdGF0aWMgaW50IG9sZWRfbnVtOwogCi1zdGF0aWMgdWludCBzdGFydF9vZmYgPSAwOworc3RhdGljIHVpbnQgc3RhcnRfb2ZmOwogCiBtb2R1bGVfcGFyYW0oc3RhcnRfb2ZmLCB1aW50LCAwNjQ0KTsKIApAQCAtODAsMjAgKzgwLDIwIEBACiB9OwogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MjYpIH0sIC8vIEFzdXMgRzEvRzIgKGFuZCB2YXJpYW50cykKIAl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NWIpIH0sIC8vIEFzdXMgRzUwViAoYW5kIHBvc3NpYmx5IG90aGVycyAtIEc3MD8gRzcxPykKIAl7IH0sCiB9OwogCiAvKiBwYXJhbWV0ZXJzIG9mIHNwZWNpZmljIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb2xlZF9kZXZfZGVzY19zdHIgb2xlZF9kZXZfZGVzY190YWJsZSBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb2xlZF9kZXZfZGVzY19zdHIgb2xlZF9kZXZfZGVzY190YWJsZVtdID0gewogCXsgMHgwYjA1LCAweDE3MjYsIDEyOCwgUEFDS19NT0RFX0cxLCAiRzEvRzIiIH0sCiAJeyAweDBiMDUsIDB4MTc1YiwgMjU2LCBQQUNLX01PREVfRzUwLCAiRzUwIiB9LAogCXsgfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIAogI2RlZmluZSBTRVRVUF9QQUNLRVRfSEVBREVSKHBhY2tldCwgdmFsMSwgdmFsMiwgdmFsMywgdmFsNCwgdmFsNSwgdmFsNiwgdmFsNykgXAogCWRvIHsJCQkJCVwKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlwYWNrZXQtPmhlYWRlci52YWx1ZTYgPSB2YWw1OwkJXAogCQlwYWNrZXQtPmhlYWRlci52YWx1ZTcgPSB2YWw2OwkJXAogCQlwYWNrZXQtPmhlYWRlci52YWx1ZTggPSB2YWw3OwkJXAotCX0gd2hpbGUoMCk7CisJfSB3aGlsZSAoMCk7CiAKIHN0cnVjdCBhc3VzX29sZWRfaGVhZGVyIHsKIAl1aW50OF90CQltYWdpYzE7CkBAIC0xNjAsMTAgKzE2MCwxMiBAQAogCiAJU0VUVVBfUEFDS0VUX0hFQURFUihwYWNrZXQsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDApOwogCi0JaWYgKGVuYWJsKSBwYWNrZXQtPmJpdG1hcFswXSA9IDB4YWY7Ci0JZWxzZSBwYWNrZXQtPmJpdG1hcFswXSA9IDB4YWU7CisJaWYgKGVuYWJsKQorCQlwYWNrZXQtPmJpdG1hcFswXSA9IDB4YWY7CisJZWxzZQorCQlwYWNrZXQtPmJpdG1hcFswXSA9IDB4YWU7CiAKLQlmb3IgKGE9MDsgYTwxOyBhKyspIHsKKwlmb3IgKGEgPSAwOyBhIDwgMTsgYSsrKSB7CiAJCXJldHZhbCA9IHVzYl9idWxrX21zZyhvZGV2LT51ZGV2LAogCQkJdXNiX3NuZGJ1bGtwaXBlKG9kZXYtPnVkZXYsIDIpLAogCQkJcGFja2V0LApAQCAtMjUyLDcgKzI1NCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZW5kX3BhY2tldChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGFzdXNfb2xlZF9wYWNrZXQgKnBhY2tldCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbiwgY2hhciAqYnVmLCB1aW50OF90IGIxLCB1aW50OF90IGIyLCB1aW50OF90IGIzLCB1aW50OF90IGI0LCB1aW50OF90IGI1LCB1aW50OF90IGI2KXsKK3N0YXRpYyB2b2lkIHNlbmRfcGFja2V0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgYXN1c19vbGVkX3BhY2tldCAqcGFja2V0LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuLCBjaGFyICpidWYsIHVpbnQ4X3QgYjEsIHVpbnQ4X3QgYjIsIHVpbnQ4X3QgYjMsIHVpbnQ4X3QgYjQsIHVpbnQ4X3QgYjUsIHVpbnQ4X3QgYjYpIHsKIAlpbnQgcmV0dmFsOwogCWludCBhY3RfbGVuOwogCkBAIC0yOTQsNyArMjk2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChvZGV2LT5wYWNrX21vZGU9PVBBQ0tfTU9ERV9HMSl7CisJaWYgKG9kZXYtPnBhY2tfbW9kZSA9PSBQQUNLX01PREVfRzEpIHsKIAkJLy8gV2hlbiBzZW5kaW5nIHJvbGwtbW9kZSBkYXRhIHRoZSBkaXNwbGF5IHVwZGF0ZWQgb25seSBmaXJzdCBwYWNrZXQuCiAJCS8vIEkgaGF2ZSBubyBpZGVhIHdoeSwgYnV0IHdoZW4gc3RhdGljIHBpY3R1cmUgaXMgc2VuZCBqdXN0IGJlZm9yZQogCQkvLyByb2xsaW5nIHBpY3R1cmUgLSBldmVyeXRoaW5nIHdvcmtzIGZpbmUuCkBAIC0zMDgsNyArMzEwLDcgQEAKIAkJc2VuZF9wYWNrZXRzKG9kZXYtPnVkZXYsIHBhY2tldCwgb2Rldi0+YnVmLCBvZGV2LT5waWNfbW9kZSwgcGFja2V0X251bSk7CiAJfQogCWVsc2UKLQlpZiAob2Rldi0+cGFja19tb2RlPT1QQUNLX01PREVfRzUwKXsKKwlpZiAob2Rldi0+cGFja19tb2RlID09IFBBQ0tfTU9ERV9HNTApIHsKIAkJc2VuZF9wYWNrZXRzX2c1MChvZGV2LT51ZGV2LCBwYWNrZXQsIG9kZXYtPmJ1Zik7CiAJfQogCkBAIC0zMjYsNyArMzI4LDcgQEAKIAkJCXggKz0gb2Rldi0+eF9zaGlmdDsKIAkJCXkgKz0gb2Rldi0+eV9zaGlmdDsKIAotCQkJc3dpdGNoKG9kZXYtPnBhY2tfbW9kZSkKKwkJCXN3aXRjaCAob2Rldi0+cGFja19tb2RlKQogCQkJewogCQkJCWNhc2UgUEFDS19NT0RFX0cxOgogCQkJCQkvLyBpID0gKHgvMTI4KSo2NDAgKyAxMjcgLSB4ICsgKHkvOCkqMTI4OwpAQCAtMzc3LDMwICszNzksMzIgQEAKIHsKIAlzaXplX3Qgb2ZmcyA9IDAsIG1heF9vZmZzOwogCi0JaWYgKGNvdW50IDwgMSkgcmV0dXJuIDA7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAodG9sb3dlcihidWZbMF0pID09ICdiJyl7CisJaWYgKHRvbG93ZXIoYnVmWzBdKSA9PSAnYicpIHsKIAkgICAgLy8gYmluYXJ5IG1vZGUsIHNldCB0aGUgZW50aXJlIG1lbW9yeQogCiAJICAgIHNpemVfdCBpOwogCiAJICAgIG9kZXYtPmJ1Zl9zaXplID0gKG9kZXYtPmRldl93aWR0aCAqIEFTVVNfT0xFRF9ESVNQX0hFSUdIVCkgLyA4OwogCi0JICAgIGlmIChvZGV2LT5idWYpIGtmcmVlKG9kZXYtPmJ1Zik7CisJICAgIGlmIChvZGV2LT5idWYpCisJCSAgICBrZnJlZShvZGV2LT5idWYpOwogCSAgICBvZGV2LT5idWYgPSBrbWFsbG9jKG9kZXYtPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAogCSAgICBtZW1zZXQob2Rldi0+YnVmLCAweGZmLCBvZGV2LT5idWZfc2l6ZSk7CiAKLQkgICAgZm9yIChpPTE7IGkgPCBjb3VudCAmJiBpPD0zMiozMjsgaSsrKXsKKwkgICAgZm9yIChpID0gMTsgaSA8IGNvdW50ICYmIGkgPD0gMzIgKiAzMjsgaSsrKSB7CiAJCW9kZXYtPmJ1ZltpLTFdID0gYnVmW2ldOwogCQlvZGV2LT5idWZfb2ZmcyA9IGktMTsKIAkgICAgfQogCi0JICAgIG9kZXYtPndpZHRoPW9kZXYtPmRldl93aWR0aCAvIDg7Ci0JICAgIG9kZXYtPmhlaWdodD1BU1VTX09MRURfRElTUF9IRUlHSFQ7Ci0JICAgIG9kZXYtPnhfc2hpZnQ9MDsKLQkgICAgb2Rldi0+eV9zaGlmdD0wOwotCSAgICBvZGV2LT5sYXN0X3ZhbD0wOworCSAgICBvZGV2LT53aWR0aCA9IG9kZXYtPmRldl93aWR0aCAvIDg7CisJICAgIG9kZXYtPmhlaWdodCA9IEFTVVNfT0xFRF9ESVNQX0hFSUdIVDsKKwkgICAgb2Rldi0+eF9zaGlmdCA9IDA7CisJICAgIG9kZXYtPnlfc2hpZnQgPSAwOworCSAgICBvZGV2LT5sYXN0X3ZhbCA9ICAwOwogCiAJICAgIHNlbmRfZGF0YShvZGV2KTsKIApAQCAtNDE2LDcgKzQyMCw3IEBACiAJCQlnb3RvIGVycm9yX2hlYWRlcjsKIAkJfQogCi0JCXN3aXRjaCh0b2xvd2VyKGJ1ZlsxXSkpIHsKKwkJc3dpdGNoICh0b2xvd2VyKGJ1ZlsxXSkpIHsKIAkJCWNhc2UgQVNVU19PTEVEX1NUQVRJQzoKIAkJCWNhc2UgQVNVU19PTEVEX1JPTEw6CiAJCQljYXNlIEFTVVNfT0xFRF9GTEFTSDoKQEAgLTQzMiwyNyArNDM2LDM2IEBACiAJCQlpZiAoYnVmW2ldID49ICcwJyAmJiBidWZbaV0gPD0gJzknKSB7CiAJCQkJdyA9IDEwKncgKyAoYnVmW2ldIC0gJzAnKTsKIAotCQkJCWlmICh3ID4gQVNVU19PTEVEX01BWF9XSURUSCkgZ290byBlcnJvcl93aWR0aDsKKwkJCQlpZiAodyA+IEFTVVNfT0xFRF9NQVhfV0lEVEgpCisJCQkJCWdvdG8gZXJyb3Jfd2lkdGg7CiAJCQl9Ci0JCQllbHNlIGlmICh0b2xvd2VyKGJ1ZltpXSkgPT0gJ3gnKSBicmVhazsKLQkJCWVsc2UgZ290byBlcnJvcl93aWR0aDsKKwkJCWVsc2UgaWYgKHRvbG93ZXIoYnVmW2ldKSA9PSAneCcpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJZ290byBlcnJvcl93aWR0aDsKIAkJfQogCiAJCWZvciAoKytpOyBpIDwgY291bnQ7ICsraSkgewogCQkJaWYgKGJ1ZltpXSA+PSAnMCcgJiYgYnVmW2ldIDw9ICc5JykgewogCQkJCWggPSAxMCpoICsgKGJ1ZltpXSAtICcwJyk7CiAKLQkJCQlpZiAoaCA+IEFTVVNfT0xFRF9ESVNQX0hFSUdIVCkgZ290byBlcnJvcl9oZWlnaHQ7CisJCQkJaWYgKGggPiBBU1VTX09MRURfRElTUF9IRUlHSFQpCisJCQkJCWdvdG8gZXJyb3JfaGVpZ2h0OwogCQkJfQotCQkJZWxzZSBpZiAodG9sb3dlcihidWZbaV0pID09ICc+JykgYnJlYWs7Ci0JCQllbHNlIGdvdG8gZXJyb3JfaGVpZ2h0OworCQkJZWxzZSBpZiAodG9sb3dlcihidWZbaV0pID09ICc+JykKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlnb3RvIGVycm9yX2hlaWdodDsKIAkJfQogCi0JCWlmICh3IDwgMSB8fCB3ID4gQVNVU19PTEVEX01BWF9XSURUSCkgZ290byBlcnJvcl93aWR0aDsKKwkJaWYgKHcgPCAxIHx8IHcgPiBBU1VTX09MRURfTUFYX1dJRFRIKQorCQkJZ290byBlcnJvcl93aWR0aDsKIAotCQlpZiAoaCA8IDEgfHwgaCA+IEFTVVNfT0xFRF9ESVNQX0hFSUdIVCkgZ290byBlcnJvcl9oZWlnaHQ7CisJCWlmIChoIDwgMSB8fCBoID4gQVNVU19PTEVEX0RJU1BfSEVJR0hUKQorCQkJZ290byBlcnJvcl9oZWlnaHQ7CiAKLQkJaWYgKGkgPj0gY291bnQgfHwgYnVmW2ldICE9ICc+JykgZ290byBlcnJvcl9oZWFkZXI7CisJCWlmIChpID49IGNvdW50IHx8IGJ1ZltpXSAhPSAnPicpCisJCQlnb3RvIGVycm9yX2hlYWRlcjsKIAogCQlvZmZzID0gaSsxOwogCkBAIC00NjgsNyArNDgxLDggQEAKIAogCQlvZGV2LT5idWZfc2l6ZSA9IHdfbWVtICogaF9tZW0gLyA4OwogCi0JCWlmIChvZGV2LT5idWYpIGtmcmVlKG9kZXYtPmJ1Zik7CisJCWlmIChvZGV2LT5idWYpCisJCQlrZnJlZShvZGV2LT5idWYpOwogCQlvZGV2LT5idWYgPSBrbWFsbG9jKG9kZXYtPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAob2Rldi0+YnVmID09IE5VTEwpIHsKQEAgLTUwNSwyMyArNTE5LDMwIEBACiAJCWludCByZXQ7CiAKIAkJaWYgKGJ1ZltvZmZzXSA9PSAnMScgfHwgYnVmW29mZnNdID09ICcjJykgewotCQkJaWYgKCAocmV0ID0gYXBwZW5kX3ZhbHVlcyhvZGV2LCAxLCAxKSkgPCAwKSByZXR1cm4gcmV0OworCQkJcmV0ID0gYXBwZW5kX3ZhbHVlcyhvZGV2LCAxLCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CiAJCX0KIAkJZWxzZSBpZiAoYnVmW29mZnNdID09ICcwJyB8fCBidWZbb2Zmc10gPT0gJyAnKSB7Ci0JCQlpZiAoIChyZXQgPSBhcHBlbmRfdmFsdWVzKG9kZXYsIDAsIDEpKSA8IDApIHJldHVybiByZXQ7CisJCQlyZXQgPSBhcHBlbmRfdmFsdWVzKG9kZXYsIDAsIDEpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKIAkJfQogCQllbHNlIGlmIChidWZbb2Zmc10gPT0gJ1xuJykgewogCQkJLy8gTmV3IGxpbmUgZGV0ZWN0ZWQuIExldHMgYXNzdW1lLCB0aGF0IGFsbCBjaGFyYWN0ZXJzIHRpbGwgdGhlIGVuZCBvZiB0aGUKIAkJCS8vIGxpbmUgd2VyZSBlcXVhbCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhpcyBsaW5lLgogCQkJaWYgKG9kZXYtPmJ1Zl9vZmZzICUgb2Rldi0+d2lkdGggIT0gMCkKLQkJCQlpZiAoIChyZXQgPSBhcHBlbmRfdmFsdWVzKG9kZXYsIG9kZXYtPmxhc3RfdmFsLAotCQkJCSAgICAgIG9kZXYtPndpZHRoIC0gKG9kZXYtPmJ1Zl9vZmZzICUgb2Rldi0+d2lkdGgpKSkgPCAwKSByZXR1cm4gcmV0OworCQkJCXJldCA9IGFwcGVuZF92YWx1ZXMob2Rldiwgb2Rldi0+bGFzdF92YWwsCisJCQkJICAgICAgb2Rldi0+d2lkdGggLSAob2Rldi0+YnVmX29mZnMgJSBvZGV2LT53aWR0aCkpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJb2ZmcysrOwogCX0KIAotCWlmIChvZGV2LT5idWZfb2ZmcyA+PSBtYXhfb2Zmcykgc2VuZF9kYXRhKG9kZXYpOworCWlmIChvZGV2LT5idWZfb2ZmcyA+PSBtYXhfb2ZmcykKKwkJc2VuZF9kYXRhKG9kZXYpOwogCiAJcmV0dXJuIGNvdW50OwogCkBAIC01NjYsOSArNTg3LDkgQEAKIAl1aW50MTZfdCBkZXZfd2lkdGggPSAwOwogCW9sZWRfcGFja19tb2RlX3QgcGFja19tb2RlID0gUEFDS19NT0RFX0xBU1Q7CiAJY29uc3Qgc3RydWN0IG9sZWRfZGV2X2Rlc2Nfc3RyICogZGV2X2Rlc2MgPSBvbGVkX2Rldl9kZXNjX3RhYmxlOwotCWNvbnN0IGNoYXIgKmRlc2MgPSAwOworCWNvbnN0IGNoYXIgKmRlc2MgPSBOVUxMOwogCi0JaWYgKGlkID09IDApIHsKKwlpZiAoIWlkKSB7CiAJCS8vIEV2ZW4gcG9zc2libGU/IEp1c3QgdG8gbWFrZSBzdXJlLi4uCiAJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gdXNiX2RldmljZV9pZCBwcm92aWRlZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU4Niw3ICs2MDcsNyBAQAogCQl9CiAJfQogCi0JaWYgKCAhZGVzYyB8fCBkZXZfd2lkdGggPCAxIHx8IHBhY2tfbW9kZSA9PSBQQUNLX01PREVfTEFTVCkgeworCWlmICghZGVzYyB8fCBkZXZfd2lkdGggPCAxIHx8IHBhY2tfbW9kZSA9PSBQQUNLX01PREVfTEFTVCkgewogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk1pc3Npbmcgb3IgaW5jb21wbGV0ZSBkZXZpY2UgZGVzY3JpcHRpb24hXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNjExLDIwICs2MzIsMjAgQEAKIAlvZGV2LT5sYXN0X3ZhbCA9IDA7CiAJb2Rldi0+YnVmID0gTlVMTDsKIAlvZGV2LT5lbmFibGVkID0gMTsKLQlvZGV2LT5kZXYgPSAwOworCW9kZXYtPmRldiA9IE5VTEw7CiAKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIG9kZXYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBvZGV2KTsKIAotCWlmICgocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJkFTVVNfT0xFRF9ERVZJQ0VfQVRUUihlbmFibGVkKSkpKSB7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJkFTVVNfT0xFRF9ERVZJQ0VfQVRUUihlbmFibGVkKSk7CisJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfZmlsZXM7Ci0JfQogCi0JaWYgKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmQVNVU19PTEVEX0RFVklDRV9BVFRSKHBpY3R1cmUpKSkpIHsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmQVNVU19PTEVEX0RFVklDRV9BVFRSKHBpY3R1cmUpKTsKKwlpZiAocmV0dmFsKQogCQlnb3RvIGVycl9maWxlczsKLQl9CiAKLQlvZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKG9sZWRfY2xhc3MsICZpbnRlcmZhY2UtPmRldiwgTUtERVYoMCwwKSwKLQkJCQlOVUxMLCJvbGVkXyVkIiwgKytvbGVkX251bSk7CisJb2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShvbGVkX2NsYXNzLCAmaW50ZXJmYWNlLT5kZXYsIE1LREVWKDAsIDApLAorCQkJCU5VTEwsICJvbGVkXyVkIiwgKytvbGVkX251bSk7CiAKIAlpZiAoSVNfRVJSKG9kZXYtPmRldikpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihvZGV2LT5kZXYpOwpAQCAtNjMzLDEzICs2NTQsMTMgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YShvZGV2LT5kZXYsIG9kZXYpOwogCi0JaWYgKCAocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9kZXYtPmRldiwgJmRldl9hdHRyX2VuYWJsZWQpKSkgeworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZShvZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVkKTsKKwlpZiAocmV0dmFsKQogCQlnb3RvIGVycl9jbGFzc19lbmFibGVkOwotCX0KIAotCWlmICggKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZShvZGV2LT5kZXYsICZkZXZfYXR0cl9waWN0dXJlKSkpIHsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUob2Rldi0+ZGV2LCAmZGV2X2F0dHJfcGljdHVyZSk7CisJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfY2xhc3NfcGljdHVyZTsKLQl9CiAKIAlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJBdHRhY2hlZCBBc3VzIE9MRUQgZGV2aWNlOiAlcyBbd2lkdGggJXUsIHBhY2tfbW9kZSAlZF1cbiIsIGRlc2MsIG9kZXYtPmRldl93aWR0aCwgb2Rldi0+cGFja19tb2RlKTsKIApAQCAtNjU5LDcgKzY4MCw3IEBACiAJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJkFTVVNfT0xFRF9ERVZJQ0VfQVRUUihlbmFibGVkKSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJkFTVVNfT0xFRF9ERVZJQ0VfQVRUUihwaWN0dXJlKSk7CiAKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAl1c2JfcHV0X2RldihvZGV2LT51ZGV2KTsKIAlrZnJlZShvZGV2KTsKIApAQCAtNjcwLDE5ICs2OTEsMjAgQEAKIHsKIAlzdHJ1Y3QgYXN1c19vbGVkX2RldiAqb2RldjsKIAotCW9kZXYgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRlcmZhY2UpOwotCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgTlVMTCk7CisJb2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUob2Rldi0+ZGV2LCAmZGV2X2F0dHJfcGljdHVyZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKG9kZXYtPmRldiwgJmRldl9hdHRyX2VuYWJsZWQpOwogCWRldmljZV91bnJlZ2lzdGVyKG9kZXYtPmRldik7CiAKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmIEFTVVNfT0xFRF9ERVZJQ0VfQVRUUihwaWN0dXJlKSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJiBBU1VTX09MRURfREVWSUNFX0FUVFIoZW5hYmxlZCkpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZBU1VTX09MRURfREVWSUNFX0FUVFIocGljdHVyZSkpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZBU1VTX09MRURfREVWSUNFX0FUVFIoZW5hYmxlZCkpOwogCiAJdXNiX3B1dF9kZXYob2Rldi0+dWRldik7CiAKLQlpZiAob2Rldi0+YnVmKSBrZnJlZShvZGV2LT5idWYpOworCWlmIChvZGV2LT5idWYpCisJCWtmcmVlKG9kZXYtPmJ1Zik7CiAKIAlrZnJlZShvZGV2KTsKIApAQCAtNzEzLDcgKzczNSw4IEBACiAJCXJldHVybiBQVFJfRVJSKG9sZWRfY2xhc3MpOwogCX0KIAotCWlmICgocmV0dmFsID0gY2xhc3NfY3JlYXRlX2ZpbGUob2xlZF9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbikpKSB7CisJcmV0dmFsID0gY2xhc3NfY3JlYXRlX2ZpbGUob2xlZF9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJaWYgKHJldHZhbCkgewogCQllcnIoIkVycm9yIGNyZWF0aW5nIGNsYXNzIHZlcnNpb24gZmlsZSIpOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTc0MCw2ICs3NjMsNiBAQAogCXVzYl9kZXJlZ2lzdGVyKCZvbGVkX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9pbml0IChhc3VzX29sZWRfaW5pdCk7Ci1tb2R1bGVfZXhpdCAoYXN1c19vbGVkX2V4aXQpOworbW9kdWxlX2luaXQoYXN1c19vbGVkX2luaXQpOworbW9kdWxlX2V4aXQoYXN1c19vbGVkX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPCmluZGV4IDY5MTFjYTcuLjBjN2VkMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPCkBAIC0xLDIgKzEsNyBAQAotcmV3cml0ZSB0aGUgZHJpdmVyIHRvIHVzZSB0aGUgcHJvcGVyIGluLWtlcm5lbCB3aXJlbGVzcyBzdGFjawotaW5zdGVhZCBvZiB1c2luZyBpdHMgb3duLgorRml4IHRoZSBtYWM4MDIxMSBwb3J0IG9mIGF0NzZfdXNiICh0aGUgcHJvcGVyIGluLWtlcm5lbCB3aXJlbGVzcworc3RhY2spIGFuZCBnZXQgaXQgaW5jbHVkZWQgdG8gdGhlIG1haW5saW5lLiBQYXRjaGVzIGF2YWlsYWJsZSBoZXJlOgorCitodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9bGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy1sZWdhY3kuZ2l0O2E9c2hvcnRsb2c7aD1hdDc2CisKK0NvbnRhY3QgS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+IGFuZCBsaW51eC13aXJlbGVzcyBsaXN0Cis8bGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKaW5kZXggYzhlNGQzMS4uNmY2ZTM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogCiAjaW5jbHVkZSAiYXQ3Nl91c2IuaCIKIApAQCAtMTcyNywxMiArMTcyNywxMiBAQAogCiAJLyogd3JpdGUgVExWIGRhdGEgZWxlbWVudHMgKi8KIAotCWllLT5pZCA9IE1GSUVfVFlQRV9TU0lEOworCWllLT5pZCA9IFdMQU5fRUlEX1NTSUQ7CiAJaWUtPmxlbiA9IGJzcy0+c3NpZF9sZW47CiAJbWVtY3B5KGllLT5kYXRhLCBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pOwogCW5leHRfaWUoJmllKTsKIAotCWllLT5pZCA9IE1GSUVfVFlQRV9SQVRFUzsKKwlpZS0+aWQgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwogCWllLT5sZW4gPSBzaXplb2YoaHdfcmF0ZXMpOwogCW1lbWNweShpZS0+ZGF0YSwgaHdfcmF0ZXMsIHNpemVvZihod19yYXRlcykpOwogCW5leHRfaWUoJmllKTsJCS8qIGllIHBvaW50cyBiZWhpbmQgdGhlIHN1cHBfcmF0ZXMgZmllbGQgKi8KQEAgLTQzOTcsNyArNDM5Nyw3IEBACiAKIAkJc3dpdGNoIChpZS0+aWQpIHsKIAotCQljYXNlIE1GSUVfVFlQRV9TU0lEOgorCQljYXNlIFdMQU5fRUlEX1NTSUQ6CiAJCQlpZiAoaGF2ZV9zc2lkKQogCQkJCWJyZWFrOwogCkBAIC00NDIwLDcgKzQ0MjAsNyBAQAogCQkJaGF2ZV9zc2lkID0gMTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1JBVEVTOgorCQljYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CiAJCQlpZiAoaGF2ZV9yYXRlcykKIAkJCQlicmVhazsKIApAQCAtNDQzMyw3ICs0NDMzLDcgQEAKIAkJCQkgaGV4MnN0cihpZS0+ZGF0YSwgaWUtPmxlbikpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfRFNfU0VUOgorCQljYXNlIFdMQU5fRUlEX0RTX1BBUkFNUzoKIAkJCWlmIChoYXZlX2NoYW5uZWwpCiAJCQkJYnJlYWs7CiAKQEAgLTQ0NDMsOSArNDQ0Myw5IEBACiAJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWF0Y2gtPmNoYW5uZWwpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfQ0ZfU0VUOgotCQljYXNlIE1GSUVfVFlQRV9USU06Ci0JCWNhc2UgTUZJRV9UWVBFX0lCU1NfU0VUOgorCQljYXNlIFdMQU5fRUlEX0NGX1BBUkFNUzoKKwkJY2FzZSBXTEFOX0VJRF9USU06CisJCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6CiAJCWRlZmF1bHQ6CiAJCQlhdDc2X2RiZyhEQkdfUlhfQkVBQ09OLCAiJXM6IGJlYWNvbiBJRSBpZCAlZCBsZW4gJWQgJXMiLAogCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGllLT5pZCwgaWUtPmxlbiwKQEAgLTUzNzAsOCArNTM3MCw3IEBACiAKIAlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiB1bmxpbmtlZCB1cmJzIiwgX19mdW5jX18pOwogCi0JaWYgKHByaXYtPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKHByaXYtPnJ4X3NrYik7CisJa2ZyZWVfc2tiKHByaXYtPnJ4X3NrYik7CiAKIAlhdDc2X2ZyZWVfYnNzX2xpc3QocHJpdik7CiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPmJzc19saXN0X3RpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5oIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmgKaW5kZXggYjIwYmU5ZC4uNmQ2MGM2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmgKQEAgLTIyLDYgKzIyLDkzIEBACiAjaWZuZGVmIF9BVDc2X1VTQl9ICiAjZGVmaW5lIF9BVDc2X1VTQl9ICiAKKy8qCisgKiBpZWVlODAyMTEgZGVmaW5pdGlvbnMgY29waWVkIGZyb20gbmV0L2llZWU4MDIxMS5oCisgKi8KKworI2RlZmluZSBXRVBfS0VZX0xFTgkJMTMKKyNkZWZpbmUgV0VQX0tFWVMJCTQKKworI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4JCTIzMDQKKy8qIE1heGltdW0gc2l6ZSBmb3IgdGhlIE1BLVVOSVREQVRBIHByaW1pdGl2ZSwgODAyLjExIHN0YW5kYXJkIHNlY3Rpb24KKyAgIDYuMi4xLjEuMi4KKworICAgVGhlIGZpZ3VyZSBpbiBzZWN0aW9uIDcuMS4yIHN1Z2dlc3RzIGEgYm9keSBzaXplIG9mIHVwIHRvIDIzMTIKKyAgIGJ5dGVzIGlzIGFsbG93ZWQsIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2luZywgSSBzdXNwZWN0IHRoaXMKKyAgIHJlcHJlc2VudHMgdGhlIDIzMDQgYnl0ZXMgb2YgcmVhbCBkYXRhLCBwbHVzIGEgcG9zc2libGUgOCBieXRlcyBvZgorICAgV0VQIElWIGFuZCBJQ1YuICh0aGlzIGludGVycHJldGF0aW9uIHN1Z2dlc3RlZCBieSBSYW1pcm8gQmFycmVpcm8pICovCisKKyNkZWZpbmUgSUVFRTgwMjExXzFBRERSX0xFTiAxMAorI2RlZmluZSBJRUVFODAyMTFfMkFERFJfTEVOIDE2CisjZGVmaW5lIElFRUU4MDIxMV8zQUREUl9MRU4gMjQKKyNkZWZpbmUgSUVFRTgwMjExXzRBRERSX0xFTiAzMAorI2RlZmluZSBJRUVFODAyMTFfRkNTX0xFTiAgICA0CisjZGVmaW5lIElFRUU4MDIxMV9ITEVOCQkJKElFRUU4MDIxMV80QUREUl9MRU4pCisjZGVmaW5lIElFRUU4MDIxMV9GUkFNRV9MRU4JCShJRUVFODAyMTFfREFUQV9MRU4gKyBJRUVFODAyMTFfSExFTikKKworI2RlZmluZSBNSU5fRlJBR19USFJFU0hPTEQgICAgIDI1NlUKKyNkZWZpbmUJTUFYX0ZSQUdfVEhSRVNIT0xEICAgICAyMzQ2VQorCitzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCB7CisJdTggaWQ7CisJdTggbGVuOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9hdXRoIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGFsZ29yaXRobTsKKwlfX2xlMTYgdHJhbnNhY3Rpb247CisJX19sZTE2IHN0YXR1czsKKwkvKiBjaGFsbGVuZ2UgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMsIFJTTiAqLworCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTMyIHRpbWVfc3RhbXBbMl07CisJX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKKwlfX2xlMTYgY2FwYWJpbGl0eTsKKwkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMsIEZIIHBhcmFtcywgRFMgcGFyYW1zLAorCSAqIENGIHBhcmFtcywgSUJTUyBwYXJhbXMsIFRJTSAoaWYgYmVhY29uKSwgUlNOICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEFsaWFzIGJlYWNvbiBmb3IgcHJvYmVfcmVzcG9uc2UgKi8KKyNkZWZpbmUgaWVlZTgwMjExX2JlYWNvbiBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UKKworc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBjYXBhYmlsaXR5OworCV9fbGUxNiBzdGF0dXM7CisJX19sZTE2IGFpZDsKKwkvKiBzdXBwb3J0ZWQgcmF0ZXMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiByZWFzb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyogQm9hcmQgdHlwZXMgKi8KIGVudW0gYm9hcmRfdHlwZSB7CiAJQk9BUkRfNTAzX0lTTDM4NjEgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQyMzEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWcKQEAgLTAsMCArMSw5IEBACitjb25maWcgQjNERkcKKyAgICAgICB0cmlzdGF0ZSAiQnJvbnRlcyAzZCBGcmFtZSBGcmFtZWdyYWJiZXIiCisgICAgICAgZGVmYXVsdCBuCisgICAgICAgLS0taGVscC0tLQorICAgICAgICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIEJyb250ZXMgM2QgRnJhbWVncmFiYmVyCisgICAgICAgICBQQ0kgY2FyZC4KKworICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQorICAgICAgICAgd2lsbCBiZSBjYWxsZWQgYjNkZmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmNDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfQjNERkcpICs9IGIzZGZnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhOTI5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9UT0RPCkBAIC0wLDAgKzEsNCBAQAorCisgLSBxdWV1ZS93YWl0IGJ1ZmZlciBwcmVzZW50cyBmaWxsdGltZSByZXN1bHRzIGZvciBlYWNoIGZyYW1lPworIC0gY291bnRpbmcgb2YgZHJvcHBlZCBmcmFtZXMKKyAtIHJldmlldyBlbmRpYW5uZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDgwNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYwpAQCAtMCwwICsxLDExMTkgQEAKKyAvKgorICogQnJvbnRlcyBQQ0kgZnJhbWUgZ3JhYmJlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggM00gQ29tcGFueQorICogQ29udGFjdDogSnVzdGluIEJyb25kZXIgPGpzYnJvbmRlckBicm9udGVzM2QuY29tPgorICogT3JpZ2luYWwgQXV0aG9yczogRGFuaWVsIERyYWtlIDxkZHJha2VAYnJvbnRlczNkLmNvbT4KKyAqICAgICAgICAgICAgICAgICAgIER1YW5lIEdyaWZmaW4gPGR1YW5lZ0BkZ2hkYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IGIzZGZnX25idWYgPSAyOworCittb2R1bGVfcGFyYW1fbmFtZWQoYnVmZmVyX2NvdW50LCBiM2RmZ19uYnVmLCB1aW50LCAwNDQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyhidWZmZXJfY291bnQsICJOdW1iZXIgb2YgYnVmZmVycyAobWluIDIsIGRlZmF1bHQgMilcbiIpOworCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgRHJha2UgPGRkcmFrZUBicm9udGVzM2QuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9udGVzIGZyYW1lIGdyYWJiZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImIzZGZnIgorI2RlZmluZSBCM0RGR19NQVhfREVWUyA0CisjZGVmaW5lIEIzREZHX0ZSQU1FU19QRVJfQlVGRkVSIDMKKworI2RlZmluZSBCM0RGR19CQVJfUkVHUwkwCisjZGVmaW5lIEIzREZHX1JFR1NfTEVOR1RIIDB4MTAwMDAKKworI2RlZmluZSBCM0RGR19JT0NfTUFHSUMJCTB4YjMgLyogZGZnIDotKSAqLworI2RlZmluZSBCM0RGR19JT0NHRlJNU1oJCV9JT1IoQjNERkdfSU9DX01BR0lDLCAxLCBpbnQpCisjZGVmaW5lIEIzREZHX0lPQ1ROVU1CVUZTCV9JTyhCM0RGR19JT0NfTUFHSUMsIDIpCisjZGVmaW5lIEIzREZHX0lPQ1RUUkFOUwkJX0lPKEIzREZHX0lPQ19NQUdJQywgMykKKyNkZWZpbmUgQjNERkdfSU9DVFFVRVVFQlVGCV9JTyhCM0RGR19JT0NfTUFHSUMsIDQpCisjZGVmaW5lIEIzREZHX0lPQ1RQT0xMQlVGCV9JT1dSKEIzREZHX0lPQ19NQUdJQywgNSwgc3RydWN0IGIzZGZnX3BvbGwpCisjZGVmaW5lIEIzREZHX0lPQ1RXQUlUQlVGCV9JT1dSKEIzREZHX0lPQ19NQUdJQywgNiwgc3RydWN0IGIzZGZnX3dhaXQpCisjZGVmaW5lIEIzREZHX0lPQ0dXQU5EU1RBVAlfSU9SKEIzREZHX0lPQ19NQUdJQywgNywgaW50KQorCitlbnVtIHsKKwkvKiBudW1iZXIgb2YgNGtiIHBhZ2VzIHBlciBmcmFtZSAqLworCUIzRF9SRUdfRlJNX1NJWkUgPSAweDAsCisKKwkvKiBiaXQgMDogc2V0IHRvIGVuYWJsZSBpbnRlcnJ1cHRzCisJICogYml0IDE6IHNldCB0byBlbmFibGUgY2FibGUgc3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHRzICovCisJQjNEX1JFR19IV19DVFJMID0gMHg0LAorCisJLyogYml0IDAtMSAtIDEtYmFzZWQgSUQgb2YgbmV4dCBwZW5kaW5nIGZyYW1lIHRyYW5zZmVyICgwID0gbm9uZSkKKwkgKiBiaXQgMiBpbmRpY2F0ZXMgdGhlIHByZXZpb3VzIERNQSB0cmFuc2ZlciBoYXMgY29tcGxldGVkCisJICogYml0IDMgaW5kaWNhdGVzIHdhbmQgY2FibGUgc3RhdHVzIGNoYW5nZQorCSAqIGJpdCA4OjE1IC0gY291bnRlciBvZiBudW1iZXIgb2YgZGlzY2FyZGVkIHRyaXBsZXRzICovCisJQjNEX1JFR19ETUFfU1RTID0gMHg4LAorCisJLyogYml0IDA6IHdhbmQgc3RhdHVzICgxID0gcHJlc2VudCwgMCA9IGRpc2Nvbm5lY3RlZCkgKi8KKwlCM0RfUkVHX1dBTkRfU1RTID0gMHhjLAorCisJLyogYnVzIGFkZHJlc3MgZm9yIERNQSB0cmFuc2ZlcnMuIGxvd2VyIDIgYml0cyBtdXN0IGJlIHplcm8gYmVjYXVzZSBETUEKKwkgKiB3b3JrcyB3aXRoIDMyIGJpdCB3b3JkIHNpemUuICovCisJQjNEX1JFR19FQzIyMF9ETUFfQUREUiA9IDB4ODAwMCwKKworCS8qIGJpdCAyMDowIC0gbnVtYmVyIG9mIDMyIGJpdCB3b3JkcyB0byBiZSB0cmFuc2ZlcnJlZAorCSAqIGJpdCAyMTozMSAtIHJlc2VydmVkICovCisJQjNEX1JFR19FQzIyMF9UUkZfU0laRSA9IDB4ODAwNCwKKworCS8qIGJpdCAwIC0gZXJyb3IgYml0CisJICogYml0IDEgLSBpbnRlcnJ1cHQgYml0IChzZXQgdG8gZ2VuZXJhdGUgaW50ZXJydXB0IGF0IGVuZCBvZiB0cmFuc2ZlcikKKwkgKiBiaXQgMiAtIHN0YXJ0IGJpdCAoc2V0IHRvIHN0YXJ0IHRyYW5zZmVyKQorCSAqIGJpdCAzIC0gZGlyZWN0aW9uICgwID0gRE1BX1RPX0RFVklDRSwgMSA9IERNQV9GUk9NX0RFVklDRQorCSAqIGJpdCA0OjMxIC0gcmVzZXJ2ZWQgKi8KKwlCM0RfUkVHX0VDMjIwX0RNQV9TVFMgPSAweDgwMDgsCit9OworCitlbnVtIGIzZGZnX2J1ZmZlcl9zdGF0ZSB7CisJQjNERkdfQlVGRkVSX1BPTExFRCA9IDAsCisJQjNERkdfQlVGRkVSX1BFTkRJTkcsCisJQjNERkdfQlVGRkVSX1BPUFVMQVRFRCwKK307CisKK3N0cnVjdCBiM2RmZ19idWZmZXIgeworCXVuc2lnbmVkIGNoYXIgKmZyYW1lW0IzREZHX0ZSQU1FU19QRVJfQlVGRkVSXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTggc3RhdGU7Cit9OworCitzdHJ1Y3QgYjNkZmdfZGV2IHsKKworCS8qIG5vIHByb3RlY3Rpb24gbmVlZGVkOiBhbGwgZmluYWxpemVkIGF0IGluaXRpYWxpemF0aW9uIHRpbWUgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgY2RldiBjaGFyZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJdW5zaWduZWQgaW50IGZyYW1lX3NpemU7CisKKwkvKgorCSAqIFByb3RlY3RzIGJ1ZmZlciBzdGF0ZSwgaW5jbHVkaW5nIGJ1ZmZlcl9xdWV1ZSwgdHJpcGxldF9yZWFkeSwKKwkgKiBjdXJfZG1hX2ZyYW1lX2lkeCAmIGN1cl9kbWFfZnJhbWVfYWRkci4KKwkgKi8KKwlzcGlubG9ja190IGJ1ZmZlcl9sb2NrOworCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZmZlcnM7CisJc3RydWN0IGxpc3RfaGVhZCBidWZmZXJfcXVldWU7CisKKwkvKiBMYXN0IGZyYW1lIGluIHRyaXBsZXQgdHJhbnNmZXJyZWQgKC0xIGlmIG5vbmUpLiAqLworCWludCBjdXJfZG1hX2ZyYW1lX2lkeDsKKworCS8qIEN1cnJlbnQgZnJhbWUncyBhZGRyZXNzIGZvciBETUEuICovCisJZG1hX2FkZHJfdCBjdXJfZG1hX2ZyYW1lX2FkZHI7CisKKwkvKgorCSAqIFByb3RlY3RzIGNzdGF0ZV90c3RhbXAuCisJICogTmVzdHMgaW5zaWRlIGJ1ZmZlcl9sb2NrLgorCSAqLworCXNwaW5sb2NrX3QgY3N0YXRlX2xvY2s7CisJdW5zaWduZWQgbG9uZyBjc3RhdGVfdHN0YW1wOworCisJLyoKKwkgKiBQcm90ZWN0cyB0cmlwbGV0c19kcm9wcGVkLgorCSAqIE5lc3RzIGluc2lkZSBidWZmZXJzX2xvY2suCisJICovCisJc3BpbmxvY2tfdCB0cmlwbGV0c19kcm9wcGVkX2xvY2s7CisJdW5zaWduZWQgaW50IHRyaXBsZXRzX2Ryb3BwZWQ7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBidWZmZXJfd2FpdHF1ZXVlOworCisJdW5zaWduZWQgaW50IHRyYW5zbWlzc2lvbl9lbmFibGVkOjE7CisJdW5zaWduZWQgaW50IHRyaXBsZXRfcmVhZHk6MTsKK307CisKK3N0YXRpYyB1OCBiM2RmZ19kZXZpY2VzW0IzREZHX01BWF9ERVZTXTsKKworc3RhdGljIHN0cnVjdCBjbGFzcyAqYjNkZmdfY2xhc3M7CitzdGF0aWMgZGV2X3QgYjNkZmdfZGV2dDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGIzZGZnX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfREVWSUNFKDB4MGIzZCwgMHgwMDAxKSB9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiM2RmZ19pZHMpOworCisvKioqKiogdXNlci12aXNpYmxlIHR5cGVzICoqKioqLworCitzdHJ1Y3QgYjNkZmdfcG9sbCB7CisJaW50IGJ1ZmZlcl9pZHg7CisJdW5zaWduZWQgaW50IHRyaXBsZXRzX2Ryb3BwZWQ7Cit9OworCitzdHJ1Y3QgYjNkZmdfd2FpdCB7CisJaW50IGJ1ZmZlcl9pZHg7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IHRyaXBsZXRzX2Ryb3BwZWQ7Cit9OworCisvKioqKiByZWdpc3RlciBJL08gKioqKi8KKworc3RhdGljIHUzMiBiM2RmZ19yZWFkMzIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIHUxNiByZWcpCit7CisJcmV0dXJuIGlvcmVhZDMyKGZnZGV2LT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgYjNkZmdfd3JpdGUzMihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgdTE2IHJlZywgdTMyIHZhbHVlKQoreworCWlvd3JpdGUzMih2YWx1ZSwgZmdkZXYtPnJlZ3MgKyByZWcpOworfQorCisvKioqKiBidWZmZXIgbWFuYWdlbWVudCAqKioqLworCisvKgorICogUHJvZ3JhbSBFQzIyMCBmb3IgdHJhbnNmZXIgb2YgYSBzcGVjaWZpYyBmcmFtZS4KKyAqIENhbGxlZCB3aXRoIGJ1ZmZlcl9sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfZnJhbWVfdHJhbnNmZXIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsCisJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmLCBpbnQgZnJhbWUpCit7CisJdW5zaWduZWQgY2hhciAqZnJtX2FkZHI7CisJZG1hX2FkZHJfdCBmcm1fYWRkcl9kbWE7CisJdW5zaWduZWQgaW50IGZybV9zaXplID0gZmdkZXYtPmZyYW1lX3NpemU7CisKKwlmcm1fYWRkciA9IGJ1Zi0+ZnJhbWVbZnJhbWVdOworCWZybV9hZGRyX2RtYSA9IHBjaV9tYXBfc2luZ2xlKGZnZGV2LT5wZGV2LCBmcm1fYWRkciwKKwkJCQkJICBmcm1fc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGZnZGV2LT5wZGV2LCBmcm1fYWRkcl9kbWEpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIgPSBmcm1fYWRkcl9kbWE7CisJZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID0gZnJhbWU7CisKKwliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX0RNQV9BRERSLAorCQkJCQljcHVfdG9fbGUzMihmcm1fYWRkcl9kbWEpKTsKKwliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX1RSRl9TSVpFLAorCQkJCQljcHVfdG9fbGUzMihmcm1fc2l6ZSA+PiAyKSk7CisJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9ETUFfU1RTLCAweGYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlciBzaG91bGQgaG9sZCBidWZmZXIgbG9jayAqLworc3RhdGljIHZvaWQgZGVxdWV1ZV9hbGxfYnVmZmVycyhzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYjNkZmdfbmJ1ZjsgaSsrKSB7CisJCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZiA9ICZmZ2Rldi0+YnVmZmVyc1tpXTsKKwkJYnVmLT5zdGF0ZSA9IEIzREZHX0JVRkZFUl9QT0xMRUQ7CisJCWxpc3RfZGVsX2luaXQoJmJ1Zi0+bGlzdCk7CisJfQorfQorCisvKiBxdWV1ZSBhIGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgKi8KK3N0YXRpYyBpbnQgcXVldWVfYnVmZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBpbnQgYnVmaWR4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwlpZiAoYnVmaWR4IDwgMCB8fCBidWZpZHggPj0gYjNkZmdfbmJ1ZikgeworCQlkZXZfZGJnKGRldiwgIkludmFsaWQgYnVmZmVyIGluZGV4LCAlZFxuIiwgYnVmaWR4KTsKKwkJciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwlidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbYnVmaWR4XTsKKworCWlmICh1bmxpa2VseShidWYtPnN0YXRlID09IEIzREZHX0JVRkZFUl9QRU5ESU5HKSkgeworCQlkZXZfZGJnKGRldiwgImJ1ZmZlciAlZCBpcyBhbHJlYWR5IHF1ZXVlZFxuIiwgYnVmaWR4KTsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUEVORElORzsKKwlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZmZ2Rldi0+YnVmZmVyX3F1ZXVlKTsKKworCWlmIChmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgJiYgZmdkZXYtPnRyaXBsZXRfcmVhZHkpIHsKKwkJZGV2X2RiZyhkZXYsICJ0cmlwbGV0IGlzIHJlYWR5LCBwdXNoaW5nIGltbWVkaWF0ZWx5XG4iKTsKKwkJZmdkZXYtPnRyaXBsZXRfcmVhZHkgPSAwOworCQlyID0gc2V0dXBfZnJhbWVfdHJhbnNmZXIoZmdkZXYsIGJ1ZiwgMCk7CisJCWlmIChyKQorCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gbWFwIERNQSBidWZmZXJcbiIpOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiByOworfQorCisvKiBub24tYmxvY2tpbmcgYnVmZmVyIHBvbGwuIHJldHVybnMgMSBpZiBkYXRhIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlciwKKyAqIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IHBvbGxfYnVmZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCXN0cnVjdCBiM2RmZ19wb2xsIHA7CisJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHIgPSAxOworCWludCBhcmdfb3V0ID0gMDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmcCwgYXJnLCBzaXplb2YocCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICh1bmxpa2VseSghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkKSkgeworCQlkZXZfZGJnKGRldiwgImNhbm5vdCBwb2xsLCB0cmFuc21pc3Npb24gZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocC5idWZmZXJfaWR4IDwgMCB8fCBwLmJ1ZmZlcl9pZHggPj0gYjNkZmdfbmJ1ZikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbcC5idWZmZXJfaWR4XTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCWlmIChsaWtlbHkoYnVmLT5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEKSkgeworCQlhcmdfb3V0ID0gMTsKKwkJYnVmLT5zdGF0ZSA9IEIzREZHX0JVRkZFUl9QT0xMRUQ7CisKKwkJLyogSVJRcyBhbHJlYWR5IGRpc2FibGVkIGJ5IHNwaW5fbG9ja19pcnFzYXZlIGFib3ZlLiAqLworCQlzcGluX2xvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCQlwLnRyaXBsZXRzX2Ryb3BwZWQgPSBmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZDsKKwkJZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQgPSAwOworCQlzcGluX3VubG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisJfSBlbHNlIHsKKwkJciA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwlpZiAoYXJnX291dCAmJiBjb3B5X3RvX3VzZXIoYXJnLCAmcCwgc2l6ZW9mKHApKSkKKwkJciA9IC1FRkFVTFQ7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NzdGF0ZV9jaGFuZ2Uoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgd2hlbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+Y3N0YXRlX2xvY2ssIGZsYWdzKTsKKwl3aGVuID0gZmdkZXYtPmNzdGF0ZV90c3RhbXA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmNzdGF0ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHdoZW47Cit9CisKK3N0YXRpYyBpbnQgaXNfZXZlbnRfcmVhZHkoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIHN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZiwKKwkJCSAgdW5zaWduZWQgbG9uZyB3aGVuKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmZnZGV2LT5jc3RhdGVfbG9jayk7CisJcmVzdWx0ID0gKCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgfHwKKwkJICBidWYtPnN0YXRlID09IEIzREZHX0JVRkZFUl9QT1BVTEFURUQgfHwKKwkJICB3aGVuICE9IGZnZGV2LT5jc3RhdGVfdHN0YW1wKTsKKwlzcGluX3VubG9jaygmZmdkZXYtPmNzdGF0ZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIHNsZWVwIHVudGlsIGEgc3BlY2lmaWMgYnVmZmVyIGJlY29tZXMgcG9wdWxhdGVkICovCitzdGF0aWMgaW50IHdhaXRfYnVmZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCXN0cnVjdCBiM2RmZ193YWl0IHc7CisJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHdoZW47CisJaW50IHI7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJncsIGFyZywgc2l6ZW9mKHcpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgImNhbm5vdCB3YWl0LCB0cmFuc21pc3Npb24gZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAody5idWZmZXJfaWR4IDwgMCB8fCB3LmJ1ZmZlcl9pZHggPj0gYjNkZmdfbmJ1ZikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbdy5idWZmZXJfaWR4XTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCWlmIChidWYtPnN0YXRlID09IEIzREZHX0JVRkZFUl9QT1BVTEFURUQpIHsKKwkJciA9IHcudGltZW91dDsKKwkJZ290byBvdXRfdHJpcGxldHNfZHJvcHBlZDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCXdoZW4gPSBnZXRfY3N0YXRlX2NoYW5nZShmZ2Rldik7CisJaWYgKHcudGltZW91dCA+IDApIHsKKwkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlLAorCQkJaXNfZXZlbnRfcmVhZHkoZmdkZXYsIGJ1Ziwgd2hlbiksCisJCQkody50aW1lb3V0ICogSFopIC8gMTAwMCk7CisKKwkJaWYgKHVubGlrZWx5KHIgPCAwKSkKKwkJCWdvdG8gb3V0OworCisJCXcudGltZW91dCA9IHIgKiAxMDAwIC8gSFo7CisJfSBlbHNlIHsKKwkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSwKKwkJCWlzX2V2ZW50X3JlYWR5KGZnZGV2LCBidWYsIHdoZW4pKTsKKworCQlpZiAodW5saWtlbHkocikpIHsKKwkJCXIgPSAtRVJFU1RBUlRTWVM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIFRPRE86IEluZm9ybSB0aGUgdXNlciB2aWEgZmllbGQocykgaW4gdz8gKi8KKwlpZiAoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCB8fCB3aGVuICE9IGdldF9jc3RhdGVfY2hhbmdlKGZnZGV2KSkgeworCQlyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJaWYgKGJ1Zi0+c3RhdGUgIT0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRCkgeworCQlyID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUE9MTEVEOworCitvdXRfdHJpcGxldHNfZHJvcHBlZDoKKworCS8qIElSUXMgYWxyZWFkeSBkaXNhYmxlZCBieSBzcGluX2xvY2tfaXJxc2F2ZSBhYm92ZS4gKi8KKwlzcGluX2xvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCXcudHJpcGxldHNfZHJvcHBlZCA9IGZnZGV2LT50cmlwbGV0c19kcm9wcGVkOworCWZnZGV2LT50cmlwbGV0c19kcm9wcGVkID0gMDsKKwlzcGluX3VubG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ3LCBzaXplb2YodykpKQorCQlyID0gLUVGQVVMVDsKK291dDoKKwlyZXR1cm4gcjsKK30KKworLyogbW1hcCBwYWdlIGZhdWx0IGhhbmRsZXIgKi8KK3N0YXRpYyBpbnQgYjNkZmdfdm1hX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCXN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBvZmYgPSB2bWYtPnBnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgaW50IGZyYW1lX3NpemUgPSBmZ2Rldi0+ZnJhbWVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgYnVmX3NpemUgPSBmcmFtZV9zaXplICogQjNERkdfRlJBTUVTX1BFUl9CVUZGRVI7CisJdW5zaWduZWQgY2hhciAqYWRkcjsKKworCS8qIGRldGVybWluZSB3aGljaCBidWZmZXIgdGhlIG9mZnNldCBsaWVzIHdpdGhpbiAqLworCXVuc2lnbmVkIGludCBidWZfaWR4ID0gb2ZmIC8gYnVmX3NpemU7CisJLyogYW5kIHRoZSBvZmZzZXQgaW50byB0aGUgYnVmZmVyICovCisJdW5zaWduZWQgaW50IGJ1Zl9vZmYgPSBvZmYgJSBidWZfc2l6ZTsKKworCS8qIGRldGVybWluZSB3aGljaCBmcmFtZSBpbnNpZGUgdGhlIGJ1ZmZlciB0aGUgb2Zmc2V0IGxpZXMgaW4gKi8KKwl1bnNpZ25lZCBpbnQgZnJtX2lkeCA9IGJ1Zl9vZmYgLyBmcmFtZV9zaXplOworCS8qIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhlIGZyYW1lICovCisJdW5zaWduZWQgaW50IGZybV9vZmYgPSBidWZfb2ZmICUgZnJhbWVfc2l6ZTsKKworCWlmICh1bmxpa2VseShidWZfaWR4ID49IGIzZGZnX25idWYpKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJYWRkciA9IGZnZGV2LT5idWZmZXJzW2J1Zl9pZHhdLmZyYW1lW2ZybV9pZHhdICsgZnJtX29mZjsKKwl2bV9pbnNlcnRfcGZuKHZtYSwgKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MsCisJCQkgIHZpcnRfdG9fcGh5cyhhZGRyKSA+PiBQQUdFX1NISUZUKTsKKworCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYjNkZmdfdm1fb3BzID0geworCS5mYXVsdCA9IGIzZGZnX3ZtYV9mYXVsdCwKK307CisKK3N0YXRpYyBpbnQgZ2V0X3dhbmRfc3RhdHVzKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBpbnQgX191c2VyICphcmcpCit7CisJdTMyIHduZHN0YXQgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfV0FORF9TVFMpOworCWRldl9kYmcoJmZnZGV2LT5wZGV2LT5kZXYsICJ3YW5kIHN0YXR1cyAleFxuIiwgd25kc3RhdCk7CisJcmV0dXJuIF9fcHV0X3VzZXIod25kc3RhdCAmIDB4MSwgYXJnKTsKK30KKworc3RhdGljIGludCBlbmFibGVfdHJhbnNtaXNzaW9uKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCXUxNiBjb21tYW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisKKwlkZXZfZGJnKGRldiwgImVuYWJsZSB0cmFuc21pc3Npb25cbiIpOworCisJLyogY2hlY2sgdGhlIGNhYmxlIGlzIHBsdWdnZWQgaW4uICovCisJaWYgKCFiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfV0FORF9TVFMpKSB7CisJCWRldl9kYmcoZGV2LCAiY2Fubm90IHN0YXJ0IHRyYW5zbWlzc2lvbiB3aXRob3V0IHdhbmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIENoZWNrIHdlJ3JlIGEgYnVzIG1hc3Rlci4KKwkgKiBUT0RPOiBJIHRoaW5rIHdlIGNhbiByZW1vdmUgdGhpcyBoYXZpbmcgYWRkZWQgdGhlIHBjaV9zZXRfbWFzdGVyIGNhbGwKKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChmZ2Rldi0+cGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwlpZiAoIShjb21tYW5kICYgUENJX0NPTU1BTkRfTUFTVEVSKSkgeworCQlkZXZfZXJyKGRldiwgIm5vdCBhIGJ1cyBtYXN0ZXIsIGZvcmNlLWVuYWJsaW5nXG4iKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGZnZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwKKwkJCWNvbW1hbmQgfCBQQ0lfQ09NTUFORF9NQVNURVIpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCS8qIEhhbmRsZSByYWNpbmcgZW5hYmxlX3RyYW5zbWlzc2lvbiBjYWxscy4gKi8KKwlpZiAoZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQlnb3RvIG91dDsKKwl9CisKKwlzcGluX2xvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCWZnZGV2LT50cmlwbGV0c19kcm9wcGVkID0gMDsKKwlzcGluX3VubG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisKKwlmZ2Rldi0+dHJpcGxldF9yZWFkeSA9IDA7CisJZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID0gLTE7CisJZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJLyogRW5hYmxlIERNQSBhbmQgY2FibGUgc3RhdHVzIGludGVycnVwdHMuICovCisJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19IV19DVFJMLCAweDAzKTsKKworb3V0OgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3RyYW5zbWlzc2lvbihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB0bXA7CisKKwlkZXZfZGJnKGRldiwgImRpc2FibGUgdHJhbnNtaXNzaW9uXG4iKTsKKworCS8qIGd1YXJhbnRlZSB0aGF0IG5vIG1vcmUgaW50ZXJydXB0cyB3aWxsIGJlIHNlcnZpY2VkICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCA9IDA7CisKKwliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0hXX0NUUkwsIDApOworCisJLyogRklYTUU6IHRlbXBvcmFyeSBkZWJ1Z2dpbmcgb25seS4gaWYgdGhlIGJvYXJkIHN0b3BzIHRyYW5zbWl0dGluZywKKwkgKiBoaXR0aW5nIGN0cmwrYyBhbmQgc2VlaW5nIHRoaXMgbWVzc2FnZSBpcyB1c2VmdWwgZm9yIGRldGVybWluaW5nCisJICogdGhlIHN0YXRlIG9mIHRoZSBib2FyZC4gKi8KKwl0bXAgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfRE1BX1NUUyk7CisJZGV2X2RiZyhkZXYsICJETUFfU1RTIHJlYWRzICV4IGFmdGVyIFRYIHN0b3BwZWRcbiIsIHRtcCk7CisKKwlkZXF1ZXVlX2FsbF9idWZmZXJzKGZnZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUpOworfQorCitzdGF0aWMgaW50IHNldF90cmFuc21pc3Npb24oc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIGludCBlbmFibGVkKQoreworCWludCByZXMgPSAwOworCisJaWYgKGVuYWJsZWQgJiYgIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkKKwkJcmVzID0gZW5hYmxlX3RyYW5zbWlzc2lvbihmZ2Rldik7CisJZWxzZSBpZiAoIWVuYWJsZWQgJiYgZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkKQorCQlkaXNhYmxlX3RyYW5zbWlzc2lvbihmZ2Rldik7CisKKwlyZXR1cm4gcmVzOworfQorCisvKiBDYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuICovCitzdGF0aWMgdm9pZCBoYW5kbGVfY3N0YXRlX3VucGx1ZyhzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLworCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfSFdfQ1RSTCwgMCk7CisKKwkvKiBTdG9wIHRyYW5zbWlzc2lvbi4gKi8KKwlzcGluX2xvY2soJmZnZGV2LT5idWZmZXJfbG9jayk7CisJZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkID0gMDsKKworCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9IC0xOworCWZnZGV2LT50cmlwbGV0X3JlYWR5ID0gMDsKKwlpZiAoZmdkZXYtPmN1cl9kbWFfZnJhbWVfYWRkcikgeworCQlwY2lfdW5tYXBfc2luZ2xlKGZnZGV2LT5wZGV2LCBmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyLAorCQkJCSBmZ2Rldi0+ZnJhbWVfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJZmdkZXYtPmN1cl9kbWFfZnJhbWVfYWRkciA9IDA7CisJfQorCWRlcXVldWVfYWxsX2J1ZmZlcnMoZmdkZXYpOworCXNwaW5fdW5sb2NrKCZmZ2Rldi0+YnVmZmVyX2xvY2spOworfQorCisvKiBDYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuICovCitzdGF0aWMgdm9pZCBoYW5kbGVfY3N0YXRlX2NoYW5nZShzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwl1MzIgY3N0YXRlID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX1dBTkRfU1RTKTsKKwl1bnNpZ25lZCBsb25nIHdoZW47CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisKKwlkZXZfZGJnKGRldiwgImNhYmxlIHN0YXRlIGNoYW5nZTogJXVcbiIsIGNzdGF0ZSk7CisKKwkvKgorCSAqIFdoZW4gdGhlIHdhbmQgaXMgdW5wbHVnZ2VkIHdlIHJlc2V0IG91ciBzdGF0ZS4gVGhlIGhhcmR3YXJlIHdpbGwKKwkgKiBoYXZlIGRvbmUgdGhlIHNhbWUgaW50ZXJuYWxseS4KKwkgKgorCSAqIE5vdGUgd2Ugc2hvdWxkIG5ldmVyIHNlZSBhIGNhYmxlICpwbHVnZ2VkKiBldmVudCwgYXMgaW50ZXJydXB0cworCSAqIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgd2hlbiB0cmFuc21pdHRpbmcsIHdoaWNoIHJlcXVpcmVzIHRoZSBjYWJsZQorCSAqIHRvIGJlIHBsdWdnZWQuIElmIHdlIGRvIHNlZSBvbmUgaXQgcHJvYmFibHkgbWVhbnMgdGhlIGNhYmxlIGhhcyBiZWVuCisJICogdW5wbHVnZ2VkIGFuZCByZS1wbHVnZ2VkIHZlcnkgcmFwaWRseS4gUG9zc2libHkgYmVjYXVzZSBpdCBoYXMgYQorCSAqIGJyb2tlbiB3aXJlIGFuZCBpcyBtb21lbnRhcmlseSBsb3NpbmcgY29udGFjdC4KKwkgKgorCSAqIFRPRE86IEF0IHRoZSBtb21lbnQgaWYgeW91IHBsdWcgaW4gdGhlIGNhYmxlIHRoZW4gZW5hYmxlIHRyYW5zbWlzc2lvbgorCSAqIHRoZSBoYXJkd2FyZSB3aWxsIHJhaXNlIGEgY291cGxlIG9mIHNwdXJpb3VzIGludGVycnVwdHMsIHNvCisJICoganVzdCBpZ25vcmUgdGhlbSBmb3Igbm93LgorCSAqCisJICogT25jZSB0aGUgaGFyZHdhcmUgaXMgZml4ZWQgd2Ugc2hvdWxkIGNvbXBsYWluIGFuZCB0cmVhdCBpdCBhcyBhbgorCSAqIHVucGx1Zy4gT3IgYXQgbGVhc3QgdHJhY2sgaG93IGZyZXF1ZW50bHkgaXQgaXMgaGFwcGVuaW5nIGFuZCBkbworCSAqIHNvIGlmIHRvbyBtYW55IGNvbWUgaW4uCisJICovCisJaWYgKGNzdGF0ZSkgeworCQlkZXZfd2FybihkZXYsICJpZ25vcmluZyB1bmV4cGVjdGVkIHBsdWcgZXZlbnRcbiIpOworCQlyZXR1cm47CisJfQorCWhhbmRsZV9jc3RhdGVfdW5wbHVnKGZnZGV2KTsKKworCS8qCisJICogUmVjb3JkIGNhYmxlIHN0YXRlIGNoYW5nZSB0aW1lc3RhbXAgJiB3YWtlIGFueW9uZSB3YWl0aW5nCisJICogb24gYSBjYWJsZSBzdGF0ZSBjaGFuZ2UuIEJlIHBhcmFub2lkIGFib3V0IGVuc3VyaW5nIGV2ZW50cworCSAqIGFyZSBub3QgbWlzc2VkIGlmIHdlIHNvbWVob3cgZ2V0IHR3byBpbnRlcnJ1cHRzIGluIGEgamlmZnkuCisJICovCisJc3Bpbl9sb2NrKCZmZ2Rldi0+Y3N0YXRlX2xvY2spOworCXdoZW4gPSBqaWZmaWVzXzY0OworCWlmICh3aGVuIDw9IGZnZGV2LT5jc3RhdGVfdHN0YW1wKQorCQl3aGVuID0gZmdkZXYtPmNzdGF0ZV90c3RhbXAgKyAxOworCWZnZGV2LT5jc3RhdGVfdHN0YW1wID0gd2hlbjsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlKTsKKwlzcGluX3VubG9jaygmZmdkZXYtPmNzdGF0ZV9sb2NrKTsKK30KKworLyogQ2FsbGVkIHdpdGggYnVmZmVyX2xvY2sgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRyYW5zZmVyX2NvbXBsZXRlKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKworCXBjaV91bm1hcF9zaW5nbGUoZmdkZXYtPnBkZXYsIGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIsCisJCQkgZmdkZXYtPmZyYW1lX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJZmdkZXYtPmN1cl9kbWFfZnJhbWVfYWRkciA9IDA7CisKKwlidWYgPSBsaXN0X2VudHJ5KGZnZGV2LT5idWZmZXJfcXVldWUubmV4dCwgc3RydWN0IGIzZGZnX2J1ZmZlciwgbGlzdCk7CisJaWYgKGJ1ZikgeworCQlkZXZfZGJnKGRldiwgImhhbmRsZSBmcmFtZSBjb21wbGV0aW9uXG4iKTsKKwkJaWYgKGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9PSBCM0RGR19GUkFNRVNfUEVSX0JVRkZFUiAtIDEpIHsKKworCQkJLyogbGFzdCBmcmFtZSBvZiB0aGF0IHRyaXBsZXQgY29tcGxldGVkICovCisJCQlkZXZfZGJnKGRldiwgInRyaXBsZXQgY29tcGxldGVkXG4iKTsKKwkJCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEOworCQkJbGlzdF9kZWxfaW5pdCgmYnVmLT5saXN0KTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUpOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2VycihkZXYsICJnb3QgZnJhbWUgYnV0IG5vIGJ1ZmZlciFcbiIpOworCX0KK30KKworLyoKKyAqIENhbGxlZCB3aXRoIGJ1ZmZlcl9sb2NrIGhlbGQuCisgKgorICogTm90ZSB0aGF0IGlkeCBpcyB0aGUgKDEtYmFzZWQpICpuZXh0KiBmcmFtZSB0byBiZSB0cmFuc2ZlcnJlZCwgd2hpbGUKKyAqIGN1cl9kbWFfZnJhbWVfaWR4IGlzIHRoZSAoMC1iYXNlZCkgKmxhc3QqIGZyYW1lIHRvIGhhdmUgYmVlbiB0cmFuc2ZlcnJlZCAob3IKKyAqIC0xIGlmIG5vbmUpLiBUaHVzIHRoZXJlIHNob3VsZCBiZSBhIGRpZmZlcmVuY2Ugb2YgMiBiZXR3ZWVuIHRoZW0uCisgKi8KK3N0YXRpYyBib29sIHNldHVwX25leHRfZnJhbWVfdHJhbnNmZXIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIGludCBpZHgpCit7CisJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCWJvb2wgbmVlZF9hY2sgPSAxOworCisJZGV2X2RiZyhkZXYsICJwcm9ncmFtIERNQSB0cmFuc2ZlciBmb3IgbmV4dCBmcmFtZTogJWRcbiIsIGlkeCk7CisKKwlidWYgPSBsaXN0X2VudHJ5KGZnZGV2LT5idWZmZXJfcXVldWUubmV4dCwgc3RydWN0IGIzZGZnX2J1ZmZlciwgbGlzdCk7CisJaWYgKGJ1ZikgeworCQlpZiAoaWR4ID09IGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCArIDIpIHsKKwkJCWlmIChzZXR1cF9mcmFtZV90cmFuc2ZlcihmZ2RldiwgYnVmLCBpZHggLSAxKSkKKwkJCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBtYXAgRE1BIGJ1ZmZlclxuIik7CisJCQluZWVkX2FjayA9IDA7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKGRldiwgImZyYW1lIG1pc21hdGNoLCBnb3QgJWQsIGV4cGVjdGVkICVkXG4iLAorCQkJCWlkeCwgZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ICsgMik7CisKKwkJCS8qIEZJWE1FOiBoYW5kbGUgZHJvcHBlZCB0cmlwbGV0cyBoZXJlICovCisJCX0KKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCBETUEsIG5vIGJ1ZmZlclxuIik7CisJfQorCisJcmV0dXJuIG5lZWRfYWNrOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYjNkZmdfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBkZXZfaWQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisJdTMyIHN0czsKKwl1OCBkcm9wcGVkOworCWJvb2wgbmVlZF9hY2sgPSAxOworCWlycXJldHVybl90IHJlcyA9IElSUV9IQU5ETEVEOworCisJc3RzID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX0RNQV9TVFMpOworCWlmICh1bmxpa2VseShzdHMgPT0gMCkpIHsKKwkJZGV2X3dhcm4oZGV2LCAiaWdub3JlIGludGVycnVwdCwgRE1BIHN0YXR1cyBpcyAwXG4iKTsKKwkJcmVzID0gSVJRX05PTkU7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseSghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkKSkgeworCQlkZXZfd2FybihkZXYsICJpZ25vcmUgaW50ZXJydXB0LCBUWCBkaXNhYmxlZFxuIik7CisJCXJlcyA9IElSUV9IQU5ETEVEOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBIYW5kbGUgZHJvcHBlZCBmcmFtZXMsIGFzIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gKi8KKwlkcm9wcGVkID0gKHN0cyA+PiA4KSAmIDB4ZmY7CisJZGV2X2RiZyhkZXYsICJpbnRyOiBETUFfU1RTPSUwOHggKGRyb3A9JWQgY29tcD0lZCBuZXh0PSVkKVxuIiwKKwkJc3RzLCBkcm9wcGVkLCAhIShzdHMgJiAweDQpLCBzdHMgJiAweDMpOworCWlmICh1bmxpa2VseShkcm9wcGVkID4gMCkpIHsKKwkJc3Bpbl9sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKwkJZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQgKz0gZHJvcHBlZDsKKwkJc3Bpbl91bmxvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCX0KKworCS8qIEhhbmRsZSBhIGNhYmxlIHN0YXRlIGNoYW5nZSAoaS5lLiB0aGUgd2FuZCBiZWluZyB1bnBsdWdnZWQpLiAqLworCWlmIChzdHMgJiAweDA4KSB7CisJCWhhbmRsZV9jc3RhdGVfY2hhbmdlKGZnZGV2KTsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrKCZmZ2Rldi0+YnVmZmVyX2xvY2spOworCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZmZ2Rldi0+YnVmZmVyX3F1ZXVlKSkpIHsKKworCQkvKiBGSVhNRSBuZWVkIG1vcmUgc2FuaXR5IGNoZWNraW5nIGhlcmUgKi8KKwkJZGV2X2luZm8oZGV2LCAiYnVmZmVyIG5vdCByZWFkeSBmb3IgbmV4dCB0cmFuc2ZlclxuIik7CisJCWZnZGV2LT50cmlwbGV0X3JlYWR5ID0gMTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIEhhcyBhIGZyYW1lIHRyYW5zZmVyIGJlZW4gY29tcGxldGVkPyAqLworCWlmIChzdHMgJiAweDQpIHsKKwkJdTMyIGRtYV9zdGF0dXMgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfRUMyMjBfRE1BX1NUUyk7CisKKwkJLyogQ2hlY2sgZm9yIERNQSBlcnJvcnMgcmVwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiAqLworCQlpZiAodW5saWtlbHkoZG1hX3N0YXR1cyAmIDB4MSkpIHsKKwkJCWRldl9lcnIoZGV2LCAiRUMyMjAgZXJyb3I6ICUwOHhcbiIsIGRtYV9zdGF0dXMpOworCisJCQkvKiBGSVhNRSBmbGVzaCBvdXQgZXJyb3IgaGFuZGxpbmcgKi8KKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCS8qIFNhbml0eSBjaGVjaywgd2Ugc2hvdWxkIGhhdmUgYSBmcmFtZSBpbmRleCBhdCB0aGlzIHBvaW50LiAqLworCQlpZiAodW5saWtlbHkoZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID09IC0xKSkgeworCQkJZGV2X2VycihkZXYsICJjb21wbGV0ZWQgYnV0IG5vIGxhc3QgaWR4P1xuIik7CisKKwkJCS8qIEZJWE1FIGZsZXNoIG91dCBlcnJvciBoYW5kbGluZyAqLworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisKKwkJdHJhbnNmZXJfY29tcGxldGUoZmdkZXYpOworCX0KKworCS8qIElzIHRoZXJlIGFub3RoZXIgZnJhbWUgdHJhbnNmZXIgcGVuZGluZz8gKi8KKwlpZiAoc3RzICYgMHgzKQorCQluZWVkX2FjayA9IHNldHVwX25leHRfZnJhbWVfdHJhbnNmZXIoZmdkZXYsIHN0cyAmIDB4Myk7CisJZWxzZQorCQlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPSAtMTsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9jaygmZmdkZXYtPmJ1ZmZlcl9sb2NrKTsKK291dDoKKwlpZiAobmVlZF9hY2spIHsKKwkJZGV2X2RiZyhkZXYsICJhY2tub3dsZWRnaW5nIGludGVycnVwdFxuIik7CisJCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfRUMyMjBfRE1BX1NUUywgMHgwYik7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgYjNkZmdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9CisJCWNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgYjNkZmdfZGV2LCBjaGFyZGV2KTsKKworCWRldl9kYmcoJmZnZGV2LT5wZGV2LT5kZXYsICJvcGVuXG4iKTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBmZ2RldjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiM2RmZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRldl9kYmcoJmZnZGV2LT5wZGV2LT5kZXYsICJyZWxlYXNlXG4iKTsKKwlkaXNhYmxlX3RyYW5zbWlzc2lvbihmZ2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIGIzZGZnX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBCM0RGR19JT0NHRlJNU1o6CisJCXJldHVybiBfX3B1dF91c2VyKGZnZGV2LT5mcmFtZV9zaXplLCAoaW50IF9fdXNlciAqKSBhcmcpOworCWNhc2UgQjNERkdfSU9DR1dBTkRTVEFUOgorCQlyZXR1cm4gZ2V0X3dhbmRfc3RhdHVzKGZnZGV2LCAoaW50IF9fdXNlciAqKSBhcmcpOworCWNhc2UgQjNERkdfSU9DVFRSQU5TOgorCQlyZXR1cm4gc2V0X3RyYW5zbWlzc2lvbihmZ2RldiwgKGludCkgYXJnKTsKKwljYXNlIEIzREZHX0lPQ1RRVUVVRUJVRjoKKwkJcmV0dXJuIHF1ZXVlX2J1ZmZlcihmZ2RldiwgKGludCkgYXJnKTsKKwljYXNlIEIzREZHX0lPQ1RQT0xMQlVGOgorCQlyZXR1cm4gcG9sbF9idWZmZXIoZmdkZXYsICh2b2lkIF9fdXNlciAqKSBhcmcpOworCWNhc2UgQjNERkdfSU9DVFdBSVRCVUY6CisJCXJldHVybiB3YWl0X2J1ZmZlcihmZ2RldiwgKHZvaWQgX191c2VyICopIGFyZyk7CisJZGVmYXVsdDoKKwkJZGV2X2RiZygmZmdkZXYtPnBkZXYtPmRldiwgInVucmVjb2duaXNlZCBpb2N0bCAleFxuIiwgY21kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGIzZGZnX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKnBvbGxfdGFibGUpCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFncywgd2hlbjsKKwlpbnQgaTsKKwlpbnQgciA9IDA7CisKKwl3aGVuID0gZ2V0X2NzdGF0ZV9jaGFuZ2UoZmdkZXYpOworCXBvbGxfd2FpdChmaWxwLCAmZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUsIHBvbGxfdGFibGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBiM2RmZ19uYnVmOyBpKyspIHsKKwkJaWYgKGZnZGV2LT5idWZmZXJzW2ldLnN0YXRlID09IEIzREZHX0JVRkZFUl9QT1BVTEFURUQpIHsKKwkJCXIgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwkvKiBUT0RPOiBDb25maXJtIHRoaXMgaXMgaG93IHdlIHdhbnQgdG8gY29tbXVuaWNhdGUgdGhlIGNoYW5nZS4gKi8KKwlpZiAoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCB8fCB3aGVuICE9IGdldF9jc3RhdGVfY2hhbmdlKGZnZGV2KSkKKwkJciA9IFBPTExFUlI7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBiM2RmZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIHZzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgYnVmZGF0YWxlbiA9IGIzZGZnX25idWYgKiBmZ2Rldi0+ZnJhbWVfc2l6ZSAqIDM7CisJdW5zaWduZWQgbG9uZyBwc2l6ZSA9IGJ1ZmRhdGFsZW4gLSBvZmZzZXQ7CisJaW50IHIgPSAwOworCisJaWYgKHZzaXplIDw9IHBzaXplKSB7CisJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9SRVNFUlZFRCB8IFZNX0NBTl9OT05MSU5FQVIgfAorCQkJCSBWTV9QRk5NQVA7CisJCXZtYS0+dm1fb3BzID0gJmIzZGZnX3ZtX29wczsKKwl9IGVsc2UgeworCQlyID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYjNkZmdfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGIzZGZnX29wZW4sCisJLnJlbGVhc2UgPSBiM2RmZ19yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGIzZGZnX2lvY3RsLAorCS5wb2xsID0gYjNkZmdfcG9sbCwKKwkubW1hcCA9IGIzZGZnX21tYXAsCit9OworCitzdGF0aWMgdm9pZCBmcmVlX2FsbF9mcmFtZV9idWZmZXJzKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCWludCBpLCBqOworCWZvciAoaSA9IDA7IGkgPCBiM2RmZ19uYnVmOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBCM0RGR19GUkFNRVNfUEVSX0JVRkZFUjsgaisrKQorCQkJa2ZyZWUoZmdkZXYtPmJ1ZmZlcnNbaV0uZnJhbWVbal0pOworCWtmcmVlKGZnZGV2LT5idWZmZXJzKTsKK30KKworLyogaW5pdGlhbGl6ZSBkZXZpY2UgYW5kIGFueSBkYXRhIHN0cnVjdHVyZXMuIGNhbGxlZCBiZWZvcmUgYW55IGludGVycnVwdHMKKyAqIGFyZSBlbmFibGVkLiAqLworc3RhdGljIGludCBiM2RmZ19pbml0X2RldihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwlpbnQgaSwgajsKKwl1MzIgZnJtX3NpemUgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfRlJNX1NJWkUpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzLiBJbiBhYm5vcm1hbCBjaXJjdW1zdGFuY2VzIChlLmcuIGFmdGVyIGEgY3Jhc2gpCisJICogdGhlIGJvYXJkIG1heSBzdGlsbCBiZSB0cmFuc21pdHRpbmcgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi4gSWYgd2UKKwkgKiBlbnN1cmUgdGhhdCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBiZWZvcmUgd2UgbGF0ZXIgZW5hYmxlIHRoZW0sIHdlCisJICogYXJlIHN1cmUgdG8gY2FwdHVyZSBhIHRyaXBsZXQgZnJvbSB0aGUgc3RhcnQsIHJhdGhlciB0aGFuIHN0YXJ0aW5nCisJICogZnJvbSBmcmFtZSAyIG9yIDMuIERpc2FibGluZyBpbnRlcnJ1cHRzIGNhdXNlcyB0aGUgRkcgdG8gdGhyb3cgYXdheQorCSAqIGFsbCBidWZmZXJlZCBkYXRhIGFuZCBzdG9wIGJ1ZmZlcmluZyBtb3JlIHVudGlsIGludGVycnVwdHMgYXJlCisJICogZW5hYmxlZCBhZ2Fpbi4KKwkgKi8KKwliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0hXX0NUUkwsIDApOworCisJZmdkZXYtPmZyYW1lX3NpemUgPSBmcm1fc2l6ZSAqIDQwOTY7CisJZmdkZXYtPmJ1ZmZlcnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYjNkZmdfYnVmZmVyKSAqIGIzZGZnX25idWYsCisJCQkJIEdGUF9LRVJORUwpOworCWlmICghZmdkZXYtPmJ1ZmZlcnMpCisJCWdvdG8gZXJyX25vX2J1ZjsKKwlmb3IgKGkgPSAwOyBpIDwgYjNkZmdfbmJ1ZjsgaSsrKSB7CisJCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZiA9ICZmZ2Rldi0+YnVmZmVyc1tpXTsKKwkJZm9yIChqID0gMDsgaiA8IEIzREZHX0ZSQU1FU19QRVJfQlVGRkVSOyBqKyspIHsKKwkJCWJ1Zi0+ZnJhbWVbal0gPSBrbWFsbG9jKGZnZGV2LT5mcmFtZV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghYnVmLT5mcmFtZVtqXSkKKwkJCQlnb3RvIGVycl9ub19tZW07CisJCX0KKwkJSU5JVF9MSVNUX0hFQUQoJmJ1Zi0+bGlzdCk7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmZnZGV2LT5idWZmZXJfcXVldWUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlKTsKKwlzcGluX2xvY2tfaW5pdCgmZmdkZXYtPmJ1ZmZlcl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZmdkZXYtPmNzdGF0ZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisJcmV0dXJuIDA7CisKK2Vycl9ub19tZW06CisJZnJlZV9hbGxfZnJhbWVfYnVmZmVycyhmZ2Rldik7CitlcnJfbm9fYnVmOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKiBmaW5kIG5leHQgZnJlZSBtaW5vciBudW1iZXIsIHJldHVybnMgLTEgaWYgbm9uZSBhcmUgYXZhaWxhYmlsZSAqLworc3RhdGljIGludCBnZXRfZnJlZV9taW5vcih2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBCM0RGR19NQVhfREVWUzsgaSsrKSB7CisJCWlmIChiM2RmZ19kZXZpY2VzW2ldID09IDApCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiM2RmZ19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBremFsbG9jKHNpemVvZigqZmdkZXYpLCBHRlBfS0VSTkVMKTsKKwlpbnQgciA9IDA7CisJaW50IG1pbm9yID0gZ2V0X2ZyZWVfbWlub3IoKTsKKwlkZXZfdCBkZXZubyA9IE1LREVWKE1BSk9SKGIzZGZnX2RldnQpLCBtaW5vcik7CisJdW5zaWduZWQgbG9uZyByZXNfbGVuOworCXJlc291cmNlX3NpemVfdCByZXNfYmFzZTsKKworCWlmIChmZ2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChtaW5vciA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidG9vIG1hbnkgZGV2aWNlcyBmb3VuZCFcbiIpOworCQlyID0gLUVJTzsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwliM2RmZ19kZXZpY2VzW21pbm9yXSA9IDE7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgInByb2JlIGRldmljZSB3aXRoIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKKworCWNkZXZfaW5pdCgmZmdkZXYtPmNoYXJkZXYsICZiM2RmZ19mb3BzKTsKKwlmZ2Rldi0+Y2hhcmRldi5vd25lciA9IFRISVNfTU9EVUxFOworCisJciA9IGNkZXZfYWRkKCZmZ2Rldi0+Y2hhcmRldiwgZGV2bm8sIDEpOworCWlmIChyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBhZGQgY2hhciBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX21pbm9yOworCX0KKworCWZnZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKAorCQliM2RmZ19jbGFzcywKKwkJJnBkZXYtPmRldiwKKwkJZGV2bm8sCisJCWRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KSwKKwkJRFJJVkVSX05BTUUgIiVkIiwgbWlub3IpOworCisJaWYgKElTX0VSUihmZ2Rldi0+ZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgY3JlYXRlIGRldmljZVxuIik7CisJCXIgPSBQVFJfRVJSKGZnZGV2LT5kZXYpOworCQlnb3RvIGVycl9kZWxfY2RldjsKKwl9CisKKwlyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZGV2X3VucmVnOworCX0KKworCXJlc19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIEIzREZHX0JBUl9SRUdTKTsKKwlpZiAocmVzX2xlbiAhPSBCM0RGR19SRUdTX0xFTkdUSCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHJlZ2lzdGVyIHJlc291cmNlIHNpemVcbiIpOworCQlyID0gLUVJTzsKKwkJZ290byBlcnJfZGlzYWJsZTsKKwl9CisKKwlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIEIzREZHX0JBUl9SRUdTKQorCQkJCSE9IChJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfU0laRUFMSUdOKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHJlc291cmNlIGZsYWdzXG4iKTsKKwkJciA9IC1FSU87CisJCWdvdG8gZXJyX2Rpc2FibGU7CisJfQorCXIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycl9kaXNhYmxlOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCWlmIChyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIik7CisJCWdvdG8gZXJyX2ZyZWVfcmVzOworCX0KKworCXJlc19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIEIzREZHX0JBUl9SRUdTKTsKKwlmZ2Rldi0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShyZXNfYmFzZSwgcmVzX2xlbik7CisJaWYgKCFmZ2Rldi0+cmVncykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWdzIGlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJciA9IC1FSU87CisJCWdvdG8gZXJyX2ZyZWVfcmVzOworCX0KKworCWZnZGV2LT5wZGV2ID0gcGRldjsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZmdkZXYpOworCXIgPSBiM2RmZ19pbml0X2RldihmZ2Rldik7CisJaWYgKHIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0YWxpemUgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYjNkZmdfaW50ciwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBmZ2Rldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsIHBkZXYtPmlycSk7CisJCWdvdG8gZXJyX2ZyZWVfYnVmczsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfYnVmczoKKwlmcmVlX2FsbF9mcmFtZV9idWZmZXJzKGZnZGV2KTsKK2Vycl91bm1hcDoKKwlpb3VubWFwKGZnZGV2LT5yZWdzKTsKK2Vycl9mcmVlX3JlczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZXJyX2Rldl91bnJlZzoKKwlkZXZpY2VfZGVzdHJveShiM2RmZ19jbGFzcywgZGV2bm8pOworZXJyX2RlbF9jZGV2OgorCWNkZXZfZGVsKCZmZ2Rldi0+Y2hhcmRldik7CitlcnJfcmVsZWFzZV9taW5vcjoKKwliM2RmZ19kZXZpY2VzW21pbm9yXSA9IDA7CitlcnJfZnJlZToKKwlrZnJlZShmZ2Rldik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBiM2RmZ19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgaW50IG1pbm9yID0gTUlOT1IoZmdkZXYtPmNoYXJkZXYuZGV2KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInJlbW92ZVxuIik7CisKKwlmcmVlX2lycShwZGV2LT5pcnEsIGZnZGV2KTsKKwlpb3VubWFwKGZnZGV2LT5yZWdzKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlkZXZpY2VfZGVzdHJveShiM2RmZ19jbGFzcywgTUtERVYoTUFKT1IoYjNkZmdfZGV2dCksIG1pbm9yKSk7CisJY2Rldl9kZWwoJmZnZGV2LT5jaGFyZGV2KTsKKwlmcmVlX2FsbF9mcmFtZV9idWZmZXJzKGZnZGV2KTsKKwlrZnJlZShmZ2Rldik7CisJYjNkZmdfZGV2aWNlc1ttaW5vcl0gPSAwOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYjNkZmdfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gYjNkZmdfaWRzLAorCS5wcm9iZSA9IGIzZGZnX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChiM2RmZ19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYjNkZmdfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCWlmIChiM2RmZ19uYnVmIDwgMikgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKKwkJCSAgICI6IGJ1ZmZlcl9jb3VudCBpcyBvdXQgb2YgcmFuZ2UgKG11c3QgYmUgPj0gMikiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBsb2FkZWRcbiIpOworCisJYjNkZmdfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsIERSSVZFUl9OQU1FKTsKKwlpZiAoSVNfRVJSKGIzZGZnX2NsYXNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoYjNkZmdfY2xhc3MpOworCisJciA9IGFsbG9jX2NocmRldl9yZWdpb24oJmIzZGZnX2RldnQsIDAsIEIzREZHX01BWF9ERVZTLCBEUklWRVJfTkFNRSk7CisJaWYgKHIpCisJCWdvdG8gZXJyMTsKKworCXIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiM2RmZ19kcml2ZXIpOworCWlmIChyKQorCQlnb3RvIGVycjI7CisKKwlyZXR1cm4gcjsKKworZXJyMjoKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oYjNkZmdfZGV2dCwgQjNERkdfTUFYX0RFVlMpOworZXJyMToKKwljbGFzc19kZXN0cm95KGIzZGZnX2NsYXNzKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGIzZGZnX21vZHVsZV9leGl0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiB1bmxvYWRlZFxuIik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiM2RmZ19kcml2ZXIpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihiM2RmZ19kZXZ0LCBCM0RGR19NQVhfREVWUyk7CisJY2xhc3NfZGVzdHJveShiM2RmZ19jbGFzcyk7Cit9CisKK21vZHVsZV9pbml0KGIzZGZnX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGIzZGZnX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwppbmRleCBiNDdjYTFlLi4yZDgxOWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCkBAIC0xLDExICsxLDE4IEBACiBjb25maWcgQ09NRURJCi0JdHJpc3RhdGUgIkRhdGEgQWNxdWlzaW9uIHN1cHBvcnQgKGNvbWVkaSkiCisJdHJpc3RhdGUgIkRhdGEgYWNxdWlzaXRpb24gc3VwcG9ydCAoY29tZWRpKSIKIAlkZWZhdWx0IE4KIAlkZXBlbmRzIG9uIG0KIAktLS1oZWxwLS0tCi0JICBFbmFibGUgc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgZGF0YSBhY3F1aXNpb24gZGV2aWNlcworCSAgRW5hYmxlIHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIGRhdGEgYWNxdWlzaXRpb24gZGV2aWNlcwogCSAgZm9yIExpbnV4LgogCitjb25maWcgQ09NRURJX0RFQlVHCisJYm9vbCAiQ29tZWRpIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIENPTUVESSAhPSBuCisJaGVscAorCSAgVGhpcyBpcyBhbiBvcHRpb24gZm9yIHVzZSBieSBkZXZlbG9wZXJzOyBtb3N0IHBlb3BsZSBzaG91bGQKKwkgIHNheSBOIGhlcmUuIFRoaXMgZW5hYmxlcyBjb21lZGkgY29yZSBhbmQgZHJpdmVyIGRlYnVnZ2luZy4KKwogY29uZmlnIENPTUVESV9SVAogCXRyaXN0YXRlICJDb21lZGkgUmVhbC10aW1lIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDT01FREkgJiYgUlQKQEAgLTIwLDYgKzI3LDEzIEBACiAJLS0taGVscC0tLQogCSAgRW5hYmxlIGxvdHMgb2YgY29tZWRpIFBDSSBkcml2ZXJzIHRvIGJlIGJ1aWx0CiAKK2NvbmZpZyBDT01FRElfUENNQ0lBX0RSSVZFUlMKKwl0cmlzdGF0ZSAiQ29tZWRpIFBDTUNJQSBkcml2ZXJzIgorCWRlcGVuZHMgb24gQ09NRURJICYmIFBDTUNJQUkKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBFbmFibGUgbG90cyBvZiBjb21lZGkgUENNQ0lBIGRyaXZlcnMgdG8gYmUgYnVpbHQKKwogY29uZmlnIENPTUVESV9VU0JfRFJJVkVSUwogCXRyaXN0YXRlICJDb21lZGkgVVNCIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBDT01FREkgJiYgVVNCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaAppbmRleCAzNmQyZTFiLi5lNmI1ZjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmgKQEAgLTU3LDkgKzU3LDYgQEAKIC8qIG1heCBsZW5ndGggb2YgZGV2aWNlIGFuZCBkcml2ZXIgbmFtZXMgKi8KICNkZWZpbmUgQ09NRURJX05BTUVMRU4gMjAKIAotCXR5cGVkZWYgdW5zaWduZWQgaW50IGxzYW1wbF90OwotCXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgc2FtcGxfdDsKLQogLyogcGFja3MgYW5kIHVucGFja3MgYSBjaGFubmVsL3JhbmdlIG51bWJlciAqLwogCiAjZGVmaW5lIENSX1BBQ0soY2hhbiwgcm5nLCBhcmVmKQkJKCgoKGFyZWYpJjB4Myk8PDI0KSB8ICgoKHJuZykmMHhmZik8PDE2KSB8IChjaGFuKSkKQEAgLTI2MSwxMCArMjU4LDExIEBACiAJSU5TTl9DT05GSUdfR0VUX0NMT0NLX1NSQyA9IDIwMDQsCS8qIEdldCBtYXN0ZXIgY2xvY2sgc291cmNlICovCiAJSU5TTl9DT05GSUdfU0VUX09USEVSX1NSQyA9IDIwMDUsCS8qIFNldCBvdGhlciBzb3VyY2UgKi8KIC8qCUlOU05fQ09ORklHX0dFVF9PVEhFUl9TUkMgPSAyMDA2LCovCS8qIEdldCBvdGhlciBzb3VyY2UgKi8KLQlJTlNOX0NPTkZJR19HRVRfSEFSRFdBUkVfQlVGRkVSX1NJWkUsCS8qIEdldCBzaXplIGluIGJ5dGVzIG9mCi0JCQkJCQkgIHN1YmRldmljZSdzIG9uLWJvYXJkIGZpZm9zCi0JCQkJCQkgIHVzZWQgZHVyaW5nIHN0cmVhbWluZwotCQkJCQkJICBpbnB1dC9vdXRwdXQgKi8KKwlJTlNOX0NPTkZJR19HRVRfSEFSRFdBUkVfQlVGRkVSX1NJWkUgPSAyMDA2LAkvKiBHZXQgc2l6ZSBpbiBieXRlcyBvZgorCQkJCQkJCSAgIHN1YmRldmljZSdzIG9uLWJvYXJkCisJCQkJCQkJICAgZmlmb3MgdXNlZCBkdXJpbmcKKwkJCQkJCQkgICBzdHJlYW1pbmcKKwkJCQkJCQkgICBpbnB1dC9vdXRwdXQgKi8KIAlJTlNOX0NPTkZJR19TRVRfQ09VTlRFUl9NT0RFID0gNDA5NywKIAlJTlNOX0NPTkZJR184MjU0X1NFVF9NT0RFID0gSU5TTl9DT05GSUdfU0VUX0NPVU5URVJfTU9ERSwJLyogZGVwcmVjYXRlZCAqLwogCUlOU05fQ09ORklHXzgyNTRfUkVBRF9TVEFUVVMgPSA0MDk4LApAQCAtMjkzLDQ1ICsyOTEsMzIgQEAKIC8qIGlvY3RscyAqLwogCiAjZGVmaW5lIENJTyAnZCcKLSNkZWZpbmUgQ09NRURJX0RFVkNPTkZJRyBfSU9XKENJTywgMCwgY29tZWRpX2RldmNvbmZpZykKLSNkZWZpbmUgQ09NRURJX0RFVklORk8gX0lPUihDSU8sIDEsIGNvbWVkaV9kZXZpbmZvKQotI2RlZmluZSBDT01FRElfU1VCRElORk8gX0lPUihDSU8sIDIsIGNvbWVkaV9zdWJkaW5mbykKLSNkZWZpbmUgQ09NRURJX0NIQU5JTkZPIF9JT1IoQ0lPLCAzLCBjb21lZGlfY2hhbmluZm8pCisjZGVmaW5lIENPTUVESV9ERVZDT05GSUcgX0lPVyhDSU8sIDAsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnKQorI2RlZmluZSBDT01FRElfREVWSU5GTyBfSU9SKENJTywgMSwgc3RydWN0IGNvbWVkaV9kZXZpbmZvKQorI2RlZmluZSBDT01FRElfU1VCRElORk8gX0lPUihDSU8sIDIsIHN0cnVjdCBjb21lZGlfc3ViZGluZm8pCisjZGVmaW5lIENPTUVESV9DSEFOSU5GTyBfSU9SKENJTywgMywgc3RydWN0IGNvbWVkaV9jaGFuaW5mbykKICNkZWZpbmUgQ09NRURJX1RSSUcgX0lPV1IoQ0lPLCA0LCBjb21lZGlfdHJpZykKICNkZWZpbmUgQ09NRURJX0xPQ0sgX0lPKENJTywgNSkKICNkZWZpbmUgQ09NRURJX1VOTE9DSyBfSU8oQ0lPLCA2KQogI2RlZmluZSBDT01FRElfQ0FOQ0VMIF9JTyhDSU8sIDcpCi0jZGVmaW5lIENPTUVESV9SQU5HRUlORk8gX0lPUihDSU8sIDgsIGNvbWVkaV9yYW5nZWluZm8pCi0jZGVmaW5lIENPTUVESV9DTUQgX0lPUihDSU8sIDksIGNvbWVkaV9jbWQpCi0jZGVmaW5lIENPTUVESV9DTURURVNUIF9JT1IoQ0lPLCAxMCwgY29tZWRpX2NtZCkKLSNkZWZpbmUgQ09NRURJX0lOU05MSVNUIF9JT1IoQ0lPLCAxMSwgY29tZWRpX2luc25saXN0KQotI2RlZmluZSBDT01FRElfSU5TTiBfSU9SKENJTywgMTIsIGNvbWVkaV9pbnNuKQotI2RlZmluZSBDT01FRElfQlVGQ09ORklHIF9JT1IoQ0lPLCAxMywgY29tZWRpX2J1ZmNvbmZpZykKLSNkZWZpbmUgQ09NRURJX0JVRklORk8gX0lPV1IoQ0lPLCAxNCwgY29tZWRpX2J1ZmluZm8pCisjZGVmaW5lIENPTUVESV9SQU5HRUlORk8gX0lPUihDSU8sIDgsIHN0cnVjdCBjb21lZGlfcmFuZ2VpbmZvKQorI2RlZmluZSBDT01FRElfQ01EIF9JT1IoQ0lPLCA5LCBzdHJ1Y3QgY29tZWRpX2NtZCkKKyNkZWZpbmUgQ09NRURJX0NNRFRFU1QgX0lPUihDSU8sIDEwLCBzdHJ1Y3QgY29tZWRpX2NtZCkKKyNkZWZpbmUgQ09NRURJX0lOU05MSVNUIF9JT1IoQ0lPLCAxMSwgc3RydWN0IGNvbWVkaV9pbnNubGlzdCkKKyNkZWZpbmUgQ09NRURJX0lOU04gX0lPUihDSU8sIDEyLCBzdHJ1Y3QgY29tZWRpX2luc24pCisjZGVmaW5lIENPTUVESV9CVUZDT05GSUcgX0lPUihDSU8sIDEzLCBzdHJ1Y3QgY29tZWRpX2J1ZmNvbmZpZykKKyNkZWZpbmUgQ09NRURJX0JVRklORk8gX0lPV1IoQ0lPLCAxNCwgc3RydWN0IGNvbWVkaV9idWZpbmZvKQogI2RlZmluZSBDT01FRElfUE9MTCBfSU8oQ0lPLCAxNSkKIAogLyogc3RydWN0dXJlcyAqLwogCi10eXBlZGVmIHN0cnVjdCBjb21lZGlfdHJpZ19zdHJ1Y3QgY29tZWRpX3RyaWc7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfY21kX3N0cnVjdCBjb21lZGlfY21kOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2luc25fc3RydWN0IGNvbWVkaV9pbnNuOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2luc25saXN0X3N0cnVjdCBjb21lZGlfaW5zbmxpc3Q7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfY2hhbmluZm9fc3RydWN0IGNvbWVkaV9jaGFuaW5mbzsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9zdWJkaW5mb19zdHJ1Y3QgY29tZWRpX3N1YmRpbmZvOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2RldmluZm9fc3RydWN0IGNvbWVkaV9kZXZpbmZvOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZ19zdHJ1Y3QgY29tZWRpX2RldmNvbmZpZzsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9yYW5nZWluZm9fc3RydWN0IGNvbWVkaV9yYW5nZWluZm87Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfa3JhbmdlX3N0cnVjdCBjb21lZGlfa3JhbmdlOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2J1ZmNvbmZpZ19zdHJ1Y3QgY29tZWRpX2J1ZmNvbmZpZzsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9idWZpbmZvX3N0cnVjdCBjb21lZGlfYnVmaW5mbzsKLQotc3RydWN0IGNvbWVkaV90cmlnX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX3RyaWcgewogCXVuc2lnbmVkIGludCBzdWJkZXY7CS8qIHN1YmRldmljZSAqLwogCXVuc2lnbmVkIGludCBtb2RlOwkvKiBtb2RlICovCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXVuc2lnbmVkIGludCBuX2NoYW47CS8qIG51bWJlciBvZiBjaGFubmVscyAqLwogCXVuc2lnbmVkIGludCAqY2hhbmxpc3Q7CS8qIGNoYW5uZWwvcmFuZ2UgbGlzdCAqLwotCXNhbXBsX3QgKmRhdGE7CS8qIGRhdGEgbGlzdCwgc2l6ZSBkZXBlbmRzIG9uIHN1YmQgZmxhZ3MgKi8KKwlzaG9ydCAqZGF0YTsJLyogZGF0YSBsaXN0LCBzaXplIGRlcGVuZHMgb24gc3ViZCBmbGFncyAqLwogCXVuc2lnbmVkIGludCBuOwkvKiBudW1iZXIgb2Ygc2NhbnMgKi8KIAl1bnNpZ25lZCBpbnQgdHJpZ3NyYzsKIAl1bnNpZ25lZCBpbnQgdHJpZ3ZhcjsKQEAgLTM0MCwyMSArMzI1LDIxIEBACiAJdW5zaWduZWQgaW50IHVudXNlZFszXTsKIH07CiAKLXN0cnVjdCBjb21lZGlfaW5zbl9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9pbnNuIHsKIAl1bnNpZ25lZCBpbnQgaW5zbjsKIAl1bnNpZ25lZCBpbnQgbjsKLQlsc2FtcGxfdCAqZGF0YTsKKwl1bnNpZ25lZCBpbnQgKmRhdGE7CiAJdW5zaWduZWQgaW50IHN1YmRldjsKIAl1bnNpZ25lZCBpbnQgY2hhbnNwZWM7CiAJdW5zaWduZWQgaW50IHVudXNlZFszXTsKIH07CiAKLXN0cnVjdCBjb21lZGlfaW5zbmxpc3Rfc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfaW5zbmxpc3QgewogCXVuc2lnbmVkIGludCBuX2luc25zOwotCWNvbWVkaV9pbnNuICppbnNuczsKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc25zOwogfTsKIAotc3RydWN0IGNvbWVkaV9jbWRfc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfY21kIHsKIAl1bnNpZ25lZCBpbnQgc3ViZGV2OwogCXVuc2lnbmVkIGludCBmbGFnczsKIApAQCAtMzc2LDM3ICszNjEsMzcgQEAKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0OwkvKiBjaGFubmVsL3JhbmdlIGxpc3QgKi8KIAl1bnNpZ25lZCBpbnQgY2hhbmxpc3RfbGVuOwogCi0Jc2FtcGxfdCAqZGF0YTsJLyogZGF0YSBsaXN0LCBzaXplIGRlcGVuZHMgb24gc3ViZCBmbGFncyAqLworCXNob3J0ICpkYXRhOwkvKiBkYXRhIGxpc3QsIHNpemUgZGVwZW5kcyBvbiBzdWJkIGZsYWdzICovCiAJdW5zaWduZWQgaW50IGRhdGFfbGVuOwogfTsKIAotc3RydWN0IGNvbWVkaV9jaGFuaW5mb19zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9jaGFuaW5mbyB7CiAJdW5zaWduZWQgaW50IHN1YmRldjsKLQlsc2FtcGxfdCAqbWF4ZGF0YV9saXN0OworCXVuc2lnbmVkIGludCAqbWF4ZGF0YV9saXN0OwogCXVuc2lnbmVkIGludCAqZmxhZ2xpc3Q7CiAJdW5zaWduZWQgaW50ICpyYW5nZWxpc3Q7CiAJdW5zaWduZWQgaW50IHVudXNlZFs0XTsKIH07CiAKLXN0cnVjdCBjb21lZGlfcmFuZ2VpbmZvX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX3JhbmdlaW5mbyB7CiAJdW5zaWduZWQgaW50IHJhbmdlX3R5cGU7CiAJdm9pZCAqcmFuZ2VfcHRyOwogfTsKIAotc3RydWN0IGNvbWVkaV9rcmFuZ2Vfc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfa3JhbmdlIHsKIAlpbnQgbWluOwkvKiBmaXhlZCBwb2ludCwgbXVsdGlwbHkgYnkgMWUtNiAqLwogCWludCBtYXg7CS8qIGZpeGVkIHBvaW50LCBtdWx0aXBseSBieSAxZS02ICovCiAJdW5zaWduZWQgaW50IGZsYWdzOwogfTsKIAogCi1zdHJ1Y3QgY29tZWRpX3N1YmRpbmZvX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvIHsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAl1bnNpZ25lZCBpbnQgbl9jaGFuOwogCXVuc2lnbmVkIGludCBzdWJkX2ZsYWdzOwogCXVuc2lnbmVkIGludCB0aW1lcl90eXBlOwogCXVuc2lnbmVkIGludCBsZW5fY2hhbmxpc3Q7Ci0JbHNhbXBsX3QgbWF4ZGF0YTsKKwl1bnNpZ25lZCBpbnQgbWF4ZGF0YTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CS8qIGNoYW5uZWwgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQgcmFuZ2VfdHlwZTsJLyogbG9va3VwIGluIGtlcm5lbCAqLwogCXVuc2lnbmVkIGludCBzZXR0bGluZ190aW1lXzA7CkBAIC00MTQsNyArMzk5LDcgQEAKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzhdOwogfTsKIAotc3RydWN0IGNvbWVkaV9kZXZpbmZvX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2RldmluZm8gewogCXVuc2lnbmVkIGludCB2ZXJzaW9uX2NvZGU7CiAJdW5zaWduZWQgaW50IG5fc3ViZGV2czsKIAljaGFyIGRyaXZlcl9uYW1lW0NPTUVESV9OQU1FTEVOXTsKQEAgLTQyNCwxMiArNDA5LDEyIEBACiAJaW50IHVudXNlZFszMF07CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2RldmNvbmZpZ19zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9kZXZjb25maWcgewogCWNoYXIgYm9hcmRfbmFtZVtDT01FRElfTkFNRUxFTl07CiAJaW50IG9wdGlvbnNbQ09NRURJX05ERVZDT05GT1BUU107CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2J1ZmNvbmZpZ19zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9idWZjb25maWcgewogCXVuc2lnbmVkIGludCBzdWJkZXZpY2U7CiAJdW5zaWduZWQgaW50IGZsYWdzOwogCkBAIC00MzksNyArNDI0LDcgQEAKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzRdOwogfTsKIAotc3RydWN0IGNvbWVkaV9idWZpbmZvX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2J1ZmluZm8gewogCXVuc2lnbmVkIGludCBzdWJkZXZpY2U7CiAJdW5zaWduZWQgaW50IGJ5dGVzX3JlYWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2NvbXBhdDMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9jb21wYXQzMi5jCmluZGV4IDdkMDExNmIuLjFiOWMyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2NvbXBhdDMyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfY29tcGF0MzIuYwpAQCAtMzcsMzEgKzM3LDMxIEBACiAjaW5jbHVkZSA8bGludXgvaW9jdGwzMi5oPgkvKiBmb3IgKHVuKXJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbiAqLwogI2VuZGlmCiAKLSNkZWZpbmUgQ09NRURJMzJfQ0hBTklORk8gX0lPUihDSU8sMyxjb21lZGkzMl9jaGFuaW5mbykKLSNkZWZpbmUgQ09NRURJMzJfUkFOR0VJTkZPIF9JT1IoQ0lPLDgsY29tZWRpMzJfcmFuZ2VpbmZvKQorI2RlZmluZSBDT01FREkzMl9DSEFOSU5GTyBfSU9SKENJTywgMywgc3RydWN0IGNvbWVkaTMyX2NoYW5pbmZvX3N0cnVjdCkKKyNkZWZpbmUgQ09NRURJMzJfUkFOR0VJTkZPIF9JT1IoQ0lPLCA4LCBzdHJ1Y3QgY29tZWRpMzJfcmFuZ2VpbmZvX3N0cnVjdCkKIC8qIE4uQi4gQ09NRURJMzJfQ01EIGFuZCBDT01FRElfQ01EIG91Z2h0IHRvIHVzZSBfSU9XUiwgbm90IF9JT1IuCiAgKiBJdCdzIHRvbyBsYXRlIHRvIGNoYW5nZSBpdCBub3csIGJ1dCBpdCBvbmx5IGFmZmVjdHMgdGhlIGNvbW1hbmQgbnVtYmVyLiAqLwotI2RlZmluZSBDT01FREkzMl9DTUQgX0lPUihDSU8sOSxjb21lZGkzMl9jbWQpCisjZGVmaW5lIENPTUVESTMyX0NNRCBfSU9SKENJTywgOSwgc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QpCiAvKiBOLkIuIENPTUVESTMyX0NNRFRFU1QgYW5kIENPTUVESV9DTURURVNUIG91Z2h0IHRvIHVzZSBfSU9XUiwgbm90IF9JT1IuCiAgKiBJdCdzIHRvbyBsYXRlIHRvIGNoYW5nZSBpdCBub3csIGJ1dCBpdCBvbmx5IGFmZmVjdHMgdGhlIGNvbW1hbmQgbnVtYmVyLiAqLwotI2RlZmluZSBDT01FREkzMl9DTURURVNUIF9JT1IoQ0lPLDEwLGNvbWVkaTMyX2NtZCkKLSNkZWZpbmUgQ09NRURJMzJfSU5TTkxJU1QgX0lPUihDSU8sMTEsY29tZWRpMzJfaW5zbmxpc3QpCi0jZGVmaW5lIENPTUVESTMyX0lOU04gX0lPUihDSU8sMTIsY29tZWRpMzJfaW5zbikKKyNkZWZpbmUgQ09NRURJMzJfQ01EVEVTVCBfSU9SKENJTywgMTAsIHN0cnVjdCBjb21lZGkzMl9jbWRfc3RydWN0KQorI2RlZmluZSBDT01FREkzMl9JTlNOTElTVCBfSU9SKENJTywgMTEsIHN0cnVjdCBjb21lZGkzMl9pbnNubGlzdF9zdHJ1Y3QpCisjZGVmaW5lIENPTUVESTMyX0lOU04gX0lPUihDSU8sIDEyLCBzdHJ1Y3QgY29tZWRpMzJfaW5zbl9zdHJ1Y3QpCiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaTMyX2NoYW5pbmZvX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpMzJfY2hhbmluZm9fc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgc3ViZGV2OwotCWNvbXBhdF91cHRyX3QgbWF4ZGF0YV9saXN0OwkvKiAzMi1iaXQgJ2xzYW1wbF90IConICovCisJY29tcGF0X3VwdHJfdCBtYXhkYXRhX2xpc3Q7CS8qIDMyLWJpdCAndW5zaWduZWQgaW50IConICovCiAJY29tcGF0X3VwdHJfdCBmbGFnbGlzdDsJCS8qIDMyLWJpdCAndW5zaWduZWQgaW50IConICovCiAJY29tcGF0X3VwdHJfdCByYW5nZWxpc3Q7CS8qIDMyLWJpdCAndW5zaWduZWQgaW50IConICovCiAJdW5zaWduZWQgaW50IHVudXNlZFs0XTsKLX0gY29tZWRpMzJfY2hhbmluZm87Cit9OwogCi10eXBlZGVmIHN0cnVjdCBjb21lZGkzMl9yYW5nZWluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGkzMl9yYW5nZWluZm9fc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgcmFuZ2VfdHlwZTsKIAljb21wYXRfdXB0cl90IHJhbmdlX3B0cjsJLyogMzItYml0ICd2b2lkIConICovCi19IGNvbWVkaTMyX3JhbmdlaW5mbzsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QgewogCXVuc2lnbmVkIGludCBzdWJkZXY7CiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXVuc2lnbmVkIGludCBzdGFydF9zcmM7CkBAIC03NiwzNyArNzYsMzYgQEAKIAl1bnNpZ25lZCBpbnQgc3RvcF9hcmc7CiAJY29tcGF0X3VwdHJfdCBjaGFubGlzdDsJCS8qIDMyLWJpdCAndW5zaWduZWQgaW50IConICovCiAJdW5zaWduZWQgaW50IGNoYW5saXN0X2xlbjsKLQljb21wYXRfdXB0cl90IGRhdGE7CQkvKiAzMi1iaXQgJ3NhbXBsX3QgKicgKi8KKwljb21wYXRfdXB0cl90IGRhdGE7CQkvKiAzMi1iaXQgJ3Nob3J0IConICovCiAJdW5zaWduZWQgaW50IGRhdGFfbGVuOwotfSBjb21lZGkzMl9jbWQ7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBjb21lZGkzMl9pbnNuX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpMzJfaW5zbl9zdHJ1Y3QgewogCXVuc2lnbmVkIGludCBpbnNuOwogCXVuc2lnbmVkIGludCBuOwotCWNvbXBhdF91cHRyX3QgZGF0YTsJCS8qIDMyLWJpdCAnbHNhbXBsX3QgKicgKi8KKwljb21wYXRfdXB0cl90IGRhdGE7CQkvKiAzMi1iaXQgJ3Vuc2lnbmVkIGludCAqJyAqLwogCXVuc2lnbmVkIGludCBzdWJkZXY7CiAJdW5zaWduZWQgaW50IGNoYW5zcGVjOwogCXVuc2lnbmVkIGludCB1bnVzZWRbM107Ci19IGNvbWVkaTMyX2luc247Cit9OwogCi10eXBlZGVmIHN0cnVjdCBjb21lZGkzMl9pbnNubGlzdF9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaTMyX2luc25saXN0X3N0cnVjdCB7CiAJdW5zaWduZWQgaW50IG5faW5zbnM7Ci0JY29tcGF0X3VwdHJfdCBpbnNuczsJCS8qIDMyLWJpdCAnY29tZWRpX2luc24gKicgKi8KLX0gY29tZWRpMzJfaW5zbmxpc3Q7CisJY29tcGF0X3VwdHJfdCBpbnNuczsJCS8qIDMyLWJpdCAnc3RydWN0IGNvbWVkaV9pbnNuIConICovCit9OwogCiAvKiBIYW5kbGUgdHJhbnNsYXRlZCBpb2N0bC4gKi8KIHN0YXRpYyBpbnQgdHJhbnNsYXRlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JaWYgKCFmaWxlLT5mX29wKSB7CisJaWYgKCFmaWxlLT5mX29wKQogCQlyZXR1cm4gLUVOT1RUWTsKLQl9CisKICNpZmRlZiBIQVZFX1VOTE9DS0VEX0lPQ1RMCiAJaWYgKGZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsKSB7CiAJCWludCByYyA9IChpbnQpKCpmaWxlLT5mX29wLT51bmxvY2tlZF9pb2N0bCkoZmlsZSwgY21kLCBhcmcpOwotCQlpZiAocmMgPT0gLUVOT0lPQ1RMQ01EKSB7CisJCWlmIChyYyA9PSAtRU5PSU9DVExDTUQpCiAJCQlyYyA9IC1FTk9UVFk7Ci0JCX0KIAkJcmV0dXJuIHJjOwogCX0KICNlbmRpZgpAQCAtMTI0LDggKzEyMyw4IEBACiAvKiBIYW5kbGUgMzItYml0IENPTUVESV9DSEFOSU5GTyBpb2N0bC4gKi8KIHN0YXRpYyBpbnQgY29tcGF0X2NoYW5pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfY2hhbmluZm8gX191c2VyICpjaGFuaW5mbzsKLQljb21lZGkzMl9jaGFuaW5mbyBfX3VzZXIgKmNoYW5pbmZvMzI7CisJc3RydWN0IGNvbWVkaV9jaGFuaW5mbyBfX3VzZXIgKmNoYW5pbmZvOworCXN0cnVjdCBjb21lZGkzMl9jaGFuaW5mb19zdHJ1Y3QgX191c2VyICpjaGFuaW5mbzMyOwogCWludCBlcnI7CiAJdW5pb24gewogCQl1bnNpZ25lZCBpbnQgdWludDsKQEAgLTE1MCw5ICsxNDksOCBAQAogCWVyciB8PSBfX3B1dF91c2VyKGNvbXBhdF9wdHIodGVtcC51cHRyKSwgJmNoYW5pbmZvLT5mbGFnbGlzdCk7CiAJZXJyIHw9IF9fZ2V0X3VzZXIodGVtcC51cHRyLCAmY2hhbmluZm8zMi0+cmFuZ2VsaXN0KTsKIAllcnIgfD0gX19wdXRfdXNlcihjb21wYXRfcHRyKHRlbXAudXB0ciksICZjaGFuaW5mby0+cmFuZ2VsaXN0KTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJcmV0dXJuIHRyYW5zbGF0ZWRfaW9jdGwoZmlsZSwgQ09NRURJX0NIQU5JTkZPLCAodW5zaWduZWQgbG9uZyljaGFuaW5mbyk7CiB9CkBAIC0xNjAsOCArMTU4LDggQEAKIC8qIEhhbmRsZSAzMi1iaXQgQ09NRURJX1JBTkdFSU5GTyBpb2N0bC4gKi8KIHN0YXRpYyBpbnQgY29tcGF0X3JhbmdlaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JY29tZWRpX3JhbmdlaW5mbyBfX3VzZXIgKnJhbmdlaW5mbzsKLQljb21lZGkzMl9yYW5nZWluZm8gX191c2VyICpyYW5nZWluZm8zMjsKKwlzdHJ1Y3QgY29tZWRpX3JhbmdlaW5mbyBfX3VzZXIgKnJhbmdlaW5mbzsKKwlzdHJ1Y3QgY29tZWRpMzJfcmFuZ2VpbmZvX3N0cnVjdCBfX3VzZXIgKnJhbmdlaW5mbzMyOwogCWludCBlcnI7CiAJdW5pb24gewogCQl1bnNpZ25lZCBpbnQgdWludDsKQEAgLTE4MiwxNyArMTgwLDE2IEBACiAJZXJyIHw9IF9fcHV0X3VzZXIodGVtcC51aW50LCAmcmFuZ2VpbmZvLT5yYW5nZV90eXBlKTsKIAllcnIgfD0gX19nZXRfdXNlcih0ZW1wLnVwdHIsICZyYW5nZWluZm8zMi0+cmFuZ2VfcHRyKTsKIAllcnIgfD0gX19wdXRfdXNlcihjb21wYXRfcHRyKHRlbXAudXB0ciksICZyYW5nZWluZm8tPnJhbmdlX3B0cik7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCXJldHVybiB0cmFuc2xhdGVkX2lvY3RsKGZpbGUsIENPTUVESV9SQU5HRUlORk8sCiAJCQkodW5zaWduZWQgbG9uZylyYW5nZWluZm8pOwogfQogCiAvKiBDb3B5IDMyLWJpdCBjbWQgc3RydWN0dXJlIHRvIG5hdGl2ZSBjbWQgc3RydWN0dXJlLiAqLwotc3RhdGljIGludCBnZXRfY29tcGF0X2NtZChjb21lZGlfY21kIF9fdXNlciAqY21kLAotCQljb21lZGkzMl9jbWQgX191c2VyICpjbWQzMikKK3N0YXRpYyBpbnQgZ2V0X2NvbXBhdF9jbWQoc3RydWN0IGNvbWVkaV9jbWQgX191c2VyICpjbWQsCisJCXN0cnVjdCBjb21lZGkzMl9jbWRfc3RydWN0IF9fdXNlciAqY21kMzIpCiB7CiAJaW50IGVycjsKIAl1bmlvbiB7CkBAIC0yNDIsNyArMjM5LDcgQEAKIH0KIAogLyogQ29weSBuYXRpdmUgY21kIHN0cnVjdHVyZSB0byAzMi1iaXQgY21kIHN0cnVjdHVyZS4gKi8KLXN0YXRpYyBpbnQgcHV0X2NvbXBhdF9jbWQoY29tZWRpMzJfY21kIF9fdXNlciAqY21kMzIsIGNvbWVkaV9jbWQgX191c2VyICpjbWQpCitzdGF0aWMgaW50IHB1dF9jb21wYXRfY21kKHN0cnVjdCBjb21lZGkzMl9jbWRfc3RydWN0IF9fdXNlciAqY21kMzIsIHN0cnVjdCBjb21lZGlfY21kIF9fdXNlciAqY21kKQogewogCWludCBlcnI7CiAJdW5zaWduZWQgaW50IHRlbXA7CkBAIC0yOTIsMTcgKzI4OSwxNiBAQAogLyogSGFuZGxlIDMyLWJpdCBDT01FRElfQ01EIGlvY3RsLiAqLwogc3RhdGljIGludCBjb21wYXRfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfY21kIF9fdXNlciAqY21kOwotCWNvbWVkaTMyX2NtZCBfX3VzZXIgKmNtZDMyOworCXN0cnVjdCBjb21lZGlfY21kIF9fdXNlciAqY21kOworCXN0cnVjdCBjb21lZGkzMl9jbWRfc3RydWN0IF9fdXNlciAqY21kMzI7CiAJaW50IHJjOwogCiAJY21kMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAJY21kID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpjbWQpKTsKIAogCXJjID0gZ2V0X2NvbXBhdF9jbWQoY21kLCBjbWQzMik7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JfQogCiAJcmV0dXJuIHRyYW5zbGF0ZWRfaW9jdGwoZmlsZSwgQ09NRURJX0NNRCwgKHVuc2lnbmVkIGxvbmcpY21kKTsKIH0KQEAgLTMxMCwzMyArMzA2LDMxIEBACiAvKiBIYW5kbGUgMzItYml0IENPTUVESV9DTURURVNUIGlvY3RsLiAqLwogc3RhdGljIGludCBjb21wYXRfY21kdGVzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JY29tZWRpX2NtZCBfX3VzZXIgKmNtZDsKLQljb21lZGkzMl9jbWQgX191c2VyICpjbWQzMjsKKwlzdHJ1Y3QgY29tZWRpX2NtZCBfX3VzZXIgKmNtZDsKKwlzdHJ1Y3QgY29tZWRpMzJfY21kX3N0cnVjdCBfX3VzZXIgKmNtZDMyOwogCWludCByYywgZXJyOwogCiAJY21kMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAJY21kID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpjbWQpKTsKIAogCXJjID0gZ2V0X2NvbXBhdF9jbWQoY21kLCBjbWQzMik7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JfQogCiAJcmMgPSB0cmFuc2xhdGVkX2lvY3RsKGZpbGUsIENPTUVESV9DTURURVNULCAodW5zaWduZWQgbG9uZyljbWQpOwotCWlmIChyYyA8IDApIHsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7Ci0JfQogCiAJZXJyID0gcHV0X2NvbXBhdF9jbWQoY21kMzIsIGNtZCk7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJjID0gZXJyOwotCX0KKwogCXJldHVybiByYzsKIH0KIAogLyogQ29weSAzMi1iaXQgaW5zbiBzdHJ1Y3R1cmUgdG8gbmF0aXZlIGluc24gc3RydWN0dXJlLiAqLwotc3RhdGljIGludCBnZXRfY29tcGF0X2luc24oY29tZWRpX2luc24gX191c2VyICppbnNuLAotCQljb21lZGkzMl9pbnNuIF9fdXNlciAqaW5zbjMyKQorc3RhdGljIGludCBnZXRfY29tcGF0X2luc24oc3RydWN0IGNvbWVkaV9pbnNuIF9fdXNlciAqaW5zbiwKKwkJc3RydWN0IGNvbWVkaTMyX2luc25fc3RydWN0IF9fdXNlciAqaW5zbjMyKQogewogCWludCBlcnI7CiAJdW5pb24gewpAQCAtMzQ3LDkgKzM0MSw5IEBACiAJLyogQ29weSBpbnNuIHN0cnVjdHVyZS4gIElnbm9yZSB0aGUgdW51c2VkIG1lbWJlcnMuICovCiAJZXJyID0gMDsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgaW5zbjMyLCBzaXplb2YoKmluc24zMikpCi0JCQl8fCAhYWNjZXNzX29rKFZFUklGWV9XUklURSwgaW5zbiwgc2l6ZW9mKCppbnNuKSkpIHsKKwkJCXx8ICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBpbnNuLCBzaXplb2YoKmluc24pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQorCiAJZXJyIHw9IF9fZ2V0X3VzZXIodGVtcC51aW50LCAmaW5zbjMyLT5pbnNuKTsKIAllcnIgfD0gX19wdXRfdXNlcih0ZW1wLnVpbnQsICZpbnNuLT5pbnNuKTsKIAllcnIgfD0gX19nZXRfdXNlcih0ZW1wLnVpbnQsICZpbnNuMzItPm4pOwpAQCAtMzY3LDExICszNjEsMTEgQEAKIHN0YXRpYyBpbnQgY29tcGF0X2luc25saXN0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgY29tYmluZWRfaW5zbmxpc3QgewotCQljb21lZGlfaW5zbmxpc3QgaW5zbmxpc3Q7Ci0JCWNvbWVkaV9pbnNuIGluc25bMV07CisJCXN0cnVjdCBjb21lZGlfaW5zbmxpc3QgaW5zbmxpc3Q7CisJCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuWzFdOwogCX0gX191c2VyICpzOwotCWNvbWVkaTMyX2luc25saXN0IF9fdXNlciAqaW5zbmxpc3QzMjsKLQljb21lZGkzMl9pbnNuIF9fdXNlciAqaW5zbjMyOworCXN0cnVjdCBjb21lZGkzMl9pbnNubGlzdF9zdHJ1Y3QgX191c2VyICppbnNubGlzdDMyOworCXN0cnVjdCBjb21lZGkzMl9pbnNuX3N0cnVjdCBfX3VzZXIgKmluc24zMjsKIAljb21wYXRfdXB0cl90IHVwdHI7CiAJdW5zaWduZWQgaW50IG5faW5zbnMsIG47CiAJaW50IGVyciwgcmM7CkBAIC0zODYsOSArMzgwLDggQEAKIAllcnIgfD0gX19nZXRfdXNlcihuX2luc25zLCAmaW5zbmxpc3QzMi0+bl9pbnNucyk7CiAJZXJyIHw9IF9fZ2V0X3VzZXIodXB0ciwgJmluc25saXN0MzItPmluc25zKTsKIAlpbnNuMzIgPSBjb21wYXRfcHRyKHVwdHIpOwotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAkvKiBBbGxvY2F0ZSB1c2VyIG1lbW9yeSB0byBjb3B5IGluc25saXN0IGFuZCBpbnNucyBpbnRvLiAqLwogCXMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShvZmZzZXRvZihzdHJ1Y3QgY29tYmluZWRfaW5zbmxpc3QsCkBAIC00MDAsMTYgKzM5MywxNCBAQAogCX0KIAllcnIgfD0gX19wdXRfdXNlcihuX2luc25zLCAmcy0+aW5zbmxpc3Qubl9pbnNucyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoJnMtPmluc25bMF0sICZzLT5pbnNubGlzdC5pbnNucyk7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCS8qIENvcHkgaW5zbiBzdHJ1Y3R1cmVzLiAqLwogCWZvciAobiA9IDA7IG4gPCBuX2luc25zOyBuKyspIHsKIAkJcmMgPSBnZXRfY29tcGF0X2luc24oJnMtPmluc25bbl0sICZpbnNuMzJbbl0pOwotCQlpZiAocmMpIHsKKwkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwotCQl9CiAJfQogCiAJcmV0dXJuIHRyYW5zbGF0ZWRfaW9jdGwoZmlsZSwgQ09NRURJX0lOU05MSVNULApAQCAtNDE5LDE3ICs0MTAsMTYgQEAKIC8qIEhhbmRsZSAzMi1iaXQgQ09NRURJX0lOU04gaW9jdGwuICovCiBzdGF0aWMgaW50IGNvbXBhdF9pbnNuKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfaW5zbiBfX3VzZXIgKmluc247Ci0JY29tZWRpMzJfaW5zbiBfX3VzZXIgKmluc24zMjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gX191c2VyICppbnNuOworCXN0cnVjdCBjb21lZGkzMl9pbnNuX3N0cnVjdCBfX3VzZXIgKmluc24zMjsKIAlpbnQgcmM7CiAKIAlpbnNuMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAJaW5zbiA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqaW5zbikpOwogCiAJcmMgPSBnZXRfY29tcGF0X2luc24oaW5zbiwgaW5zbjMyKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCXJldHVybiByYzsKLQl9CiAKIAlyZXR1cm4gdHJhbnNsYXRlZF9pb2N0bChmaWxlLCBDT01FRElfSU5TTiwgKHVuc2lnbmVkIGxvbmcpaW5zbik7CiB9CkBAIC01MTIsMTQgKzUwMiwxNCBAQAogCWludCByYzsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgQ29tZWRpIGRldmljZS4gKi8KLQlpZiAoaW1ham9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSAhPSBDT01FRElfTUFKT1IpIHsKKwlpZiAoaW1ham9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSAhPSBDT01FRElfTUFKT1IpCiAJCXJldHVybiAtRU5PVFRZOwotCX0KKwogCXJjID0gcmF3X2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAkvKiBEbyBub3QgcmV0dXJuIC1FTk9JT0NUTENNRC4gKi8KLQlpZiAocmMgPT0gLUVOT0lPQ1RMQ01EKSB7CisJaWYgKHJjID09IC1FTk9JT0NUTENNRCkKIAkJcmMgPSAtRU5PVFRZOwotCX0KKwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCmluZGV4IDAxOGM5NjQuLjE5ZGNlMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKQEAgLTU5LDMzICs1OSwzOSBAQAogbW9kdWxlX3BhcmFtKGNvbWVkaV9kZWJ1ZywgaW50LCAwNjQ0KTsKICNlbmRpZgogCitpbnQgY29tZWRpX2F1dG9jb25maWcgPSAxOworbW9kdWxlX3BhcmFtKGNvbWVkaV9hdXRvY29uZmlnLCBib29sLCAwNDQ0KTsKKworaW50IGNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyA9IDA7Cittb2R1bGVfcGFyYW0oY29tZWRpX251bV9sZWdhY3lfbWlub3JzLCBpbnQsIDA0NDQpOworCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbWVkaV9maWxlX2luZm9fdGFibGVfbG9jayk7CiBzdGF0aWMgc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvCiAgICAgKmNvbWVkaV9maWxlX2luZm9fdGFibGVbQ09NRURJX05VTV9NSU5PUlNdOwogCi1zdGF0aWMgaW50IGRvX2RldmNvbmZpZ19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKmFyZyk7Ci1zdGF0aWMgaW50IGRvX2J1ZmNvbmZpZ19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZyk7Ci1zdGF0aWMgaW50IGRvX2RldmluZm9faW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2aW5mbyAqYXJnLAorc3RhdGljIGludCBkb19kZXZjb25maWdfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKmFyZyk7CitzdGF0aWMgaW50IGRvX2J1ZmNvbmZpZ19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpOworc3RhdGljIGludCBkb19kZXZpbmZvX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2aW5mbyAqYXJnLAogCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9fc3ViZGluZm9faW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGluZm8gKmFyZywKK3N0YXRpYyBpbnQgZG9fc3ViZGluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkaW5mbyAqYXJnLAogCQkJICAgICB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9fY2hhbmluZm9faW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfY2hhbmluZm8gKmFyZyk7Ci1zdGF0aWMgaW50IGRvX2J1ZmluZm9faW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpOwotc3RhdGljIGludCBkb19jbWRfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpOwotc3RhdGljIGludCBkb19sb2NrX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSk7Ci1zdGF0aWMgaW50IGRvX3VubG9ja19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpOwotc3RhdGljIGludCBkb19jYW5jZWxfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9fY21kdGVzdF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSk7Ci1zdGF0aWMgaW50IGRvX2luc25saXN0X2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9faW5zbl9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSk7Ci1zdGF0aWMgaW50IGRvX3BvbGxfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZCwgdm9pZCAqZmlsZSk7CitzdGF0aWMgaW50IGRvX2NoYW5pbmZvX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfY2hhbmluZm8gKmFyZyk7CitzdGF0aWMgaW50IGRvX2J1ZmluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQgZG9fY21kX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSk7CitzdGF0aWMgaW50IGRvX2xvY2tfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSk7CitzdGF0aWMgaW50IGRvX3VubG9ja19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9fY2FuY2VsX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpOworc3RhdGljIGludCBkb19jbWR0ZXN0X2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSk7CitzdGF0aWMgaW50IGRvX2luc25saXN0X2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSk7CitzdGF0aWMgaW50IGRvX2luc25faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9fcG9sbF9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZCwgdm9pZCAqZmlsZSk7CiAKLWV4dGVybiB2b2lkIGRvX2JlY29tZV9ub25idXN5KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcyk7Ci1zdGF0aWMgaW50IGRvX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpOworZXh0ZXJuIHZvaWQgZG9fYmVjb21lX25vbmJ1c3koc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworc3RhdGljIGludCBkb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwogCiBzdGF0aWMgaW50IGNvbWVkaV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKTsKIAotc3RhdGljIGludCBpc19kZXZpY2VfYnVzeShjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBpc19kZXZpY2VfYnVzeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAogI2lmZGVmIEhBVkVfVU5MT0NLRURfSU9DVEwKIHN0YXRpYyBsb25nIGNvbWVkaV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTk4LDkgKzEwNCwxMyBAQAogCWNvbnN0IHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPQogCSAgICBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OwogCWludCByYzsKIAorCWlmIChkZXZfZmlsZV9pbmZvID09IE5VTEwgfHwgZGV2X2ZpbGVfaW5mby0+ZGV2aWNlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKKwogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCiAJLyogRGV2aWNlIGNvbmZpZyBpcyBzcGVjaWFsLCBiZWNhdXNlIGl0IG11c3Qgd29yayBvbgpAQCAtMTgyLDkgKzE5Miw5IEBACiAJd3JpdGVzOgogCQlub25lCiAqLwotc3RhdGljIGludCBkb19kZXZjb25maWdfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICphcmcpCitzdGF0aWMgaW50IGRvX2RldmNvbmZpZ19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqYXJnKQogewotCWNvbWVkaV9kZXZjb25maWcgaXQ7CisJc3RydWN0IGNvbWVkaV9kZXZjb25maWcgaXQ7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyICphdXhfZGF0YSA9IE5VTEw7CiAJaW50IGF1eF9sZW47CkBAIC0yMDMsNyArMjEzLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2YoY29tZWRpX2RldmNvbmZpZykpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmaXQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaXQuYm9hcmRfbmFtZVtDT01FRElfTkFNRUxFTiAtIDFdID0gMDsKQEAgLTI2MiwxNCArMjcyLDE0IEBACiAJCW1vZGlmaWVkIGJ1ZmNvbmZpZyBhdCBhcmcKIAogKi8KLXN0YXRpYyBpbnQgZG9fYnVmY29uZmlnX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnKQorc3RhdGljIGludCBkb19idWZjb25maWdfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnKQogewotCWNvbWVkaV9idWZjb25maWcgYmM7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYnVmY29uZmlnIGJjOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXQgPSAwOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZiYywgYXJnLCBzaXplb2YoY29tZWRpX2J1ZmNvbmZpZykpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmYmMsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfYnVmY29uZmlnKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGJjLnN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcyB8fCBiYy5zdWJkZXZpY2UgPCAwKQpAQCAtMzMwLDcgKzM0MCw3IEBACiAJYmMubWF4aW11bV9zaXplID0gYXN5bmMtPm1heF9idWZzaXplOwogCiBjb3B5YmFjazoKLQlpZiAoY29weV90b191c2VyKGFyZywgJmJjLCBzaXplb2YoY29tZWRpX2J1ZmNvbmZpZykpKQorCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYmMsIHNpemVvZihzdHJ1Y3QgY29tZWRpX2J1ZmNvbmZpZykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwpAQCAtMzUwLDE2ICszNjAsMTYgQEAKIAkJZGV2aW5mbyBzdHJ1Y3R1cmUKIAogKi8KLXN0YXRpYyBpbnQgZG9fZGV2aW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZpbmZvICphcmcsCitzdGF0aWMgaW50IGRvX2RldmluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZpbmZvICphcmcsCiAJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY29tZWRpX2RldmluZm8gZGV2aW5mbzsKKwlzdHJ1Y3QgY29tZWRpX2RldmluZm8gZGV2aW5mbzsKIAljb25zdCB1bnNpZ25lZCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0KIAkgICAgY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQljb21lZGlfc3ViZGV2aWNlICpyZWFkX3N1YmRldiA9CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2ID0KIAkgICAgY29tZWRpX2dldF9yZWFkX3N1YmRldmljZShkZXZfZmlsZV9pbmZvKTsKLQljb21lZGlfc3ViZGV2aWNlICp3cml0ZV9zdWJkZXYgPQorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICp3cml0ZV9zdWJkZXYgPQogCSAgICBjb21lZGlfZ2V0X3dyaXRlX3N1YmRldmljZShkZXZfZmlsZV9pbmZvKTsKIAogCW1lbXNldCgmZGV2aW5mbywgMCwgc2l6ZW9mKGRldmluZm8pKTsKQEAgLTM4MCw3ICszOTAsNyBAQAogCWVsc2UKIAkJZGV2aW5mby53cml0ZV9zdWJkZXZpY2UgPSAtMTsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZGV2aW5mbywgc2l6ZW9mKGNvbWVkaV9kZXZpbmZvKSkpCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZkZXZpbmZvLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9kZXZpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC00MDAsMTQgKzQxMCwxNCBAQAogCQlhcnJheSBvZiBzdWJkZXZpY2UgaW5mbyBzdHJ1Y3R1cmVzIGF0IGFyZwogCiAqLwotc3RhdGljIGludCBkb19zdWJkaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkaW5mbyAqYXJnLAorc3RhdGljIGludCBkb19zdWJkaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvICphcmcsCiAJCQkgICAgIHZvaWQgKmZpbGUpCiB7CiAJaW50IHJldCwgaTsKLQljb21lZGlfc3ViZGluZm8gKnRtcCwgKnVzOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkaW5mbyAqdG1wLCAqdXM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKLQl0bXAgPSBrY2FsbG9jKGRldi0+bl9zdWJkZXZpY2VzLCBzaXplb2YoY29tZWRpX3N1YmRpbmZvKSwgR0ZQX0tFUk5FTCk7CisJdG1wID0ga2NhbGxvYyhkZXYtPm5fc3ViZGV2aWNlcywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfc3ViZGluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRtcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTQ1OSw3ICs0NjksNyBAQAogCX0KIAogCXJldCA9IGNvcHlfdG9fdXNlcihhcmcsIHRtcCwKLQkJCSAgIGRldi0+bl9zdWJkZXZpY2VzICogc2l6ZW9mKGNvbWVkaV9zdWJkaW5mbykpOworCQkJICAgZGV2LT5uX3N1YmRldmljZXMgKiBzaXplb2Yoc3RydWN0IGNvbWVkaV9zdWJkaW5mbykpOwogCiAJa2ZyZWUodG1wKTsKIApAQCAtNDgwLDEyICs0OTAsMTIgQEAKIAkJYXJyYXlzIGF0IGVsZW1lbnRzIG9mIGNoYW5pbmZvIHN0cnVjdHVyZQogCiAqLwotc3RhdGljIGludCBkb19jaGFuaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9jaGFuaW5mbyAqYXJnKQorc3RhdGljIGludCBkb19jaGFuaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvICphcmcpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfY2hhbmluZm8gaXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9jaGFuaW5mbyBpdDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmaXQsIGFyZywgc2l6ZW9mKGNvbWVkaV9jaGFuaW5mbykpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmaXQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfY2hhbmluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoaXQuc3ViZGV2ID49IGRldi0+bl9zdWJkZXZpY2VzKQpAQCAtNDk2LDcgKzUwNiw3IEBACiAJCWlmIChzLT5tYXhkYXRhIHx8ICFzLT5tYXhkYXRhX2xpc3QpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNvcHlfdG9fdXNlcihpdC5tYXhkYXRhX2xpc3QsIHMtPm1heGRhdGFfbGlzdCwKLQkJCQkgcy0+bl9jaGFuICogc2l6ZW9mKGxzYW1wbF90KSkpCisJCQkJIHMtPm5fY2hhbiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtNTQ0LDEzICs1NTQsMTMgQEAKICAgICBtb2RpZmllZCBidWZpbmZvIGF0IGFyZwogCiAgICovCi1zdGF0aWMgaW50IGRvX2J1ZmluZm9faW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpCitzdGF0aWMgaW50IGRvX2J1ZmluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnKQogewotCWNvbWVkaV9idWZpbmZvIGJpOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2J1ZmluZm8gYmk7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmJpLCBhcmcsIHNpemVvZihjb21lZGlfYnVmaW5mbykpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmYmksIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfYnVmaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChiaS5zdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMgfHwgYmkuc3ViZGV2aWNlIDwgMCkKQEAgLTU5MSwxMyArNjAxLDEzIEBACiAJYmkuYnVmX3JlYWRfcHRyID0gYXN5bmMtPmJ1Zl9yZWFkX3B0cjsKIAogY29weWJhY2s6Ci0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZiaSwgc2l6ZW9mKGNvbWVkaV9idWZpbmZvKSkpCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZiaSwgc2l6ZW9mKHN0cnVjdCBjb21lZGlfYnVmaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2luc24oY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEsCitzdGF0aWMgaW50IHBhcnNlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEsCiAJCSAgICAgIHZvaWQgKmZpbGUpOwogLyoKICAqIAlDT01FRElfSU5TTkxJU1QKQEAgLTYxNiwyNSArNjI2LDI1IEBACiAgKi8KIC8qIGFyYml0cmFyeSBsaW1pdHMgKi8KICNkZWZpbmUgTUFYX1NBTVBMRVMgMjU2Ci1zdGF0aWMgaW50IGRvX2luc25saXN0X2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQorc3RhdGljIGludCBkb19pbnNubGlzdF9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpCiB7Ci0JY29tZWRpX2luc25saXN0IGluc25saXN0OwotCWNvbWVkaV9pbnNuICppbnNucyA9IE5VTEw7Ci0JbHNhbXBsX3QgKmRhdGEgPSBOVUxMOworCXN0cnVjdCBjb21lZGlfaW5zbmxpc3QgaW5zbmxpc3Q7CisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNucyA9IE5VTEw7CisJdW5zaWduZWQgaW50ICpkYXRhID0gTlVMTDsKIAlpbnQgaSA9IDA7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmluc25saXN0LCBhcmcsIHNpemVvZihjb21lZGlfaW5zbmxpc3QpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluc25saXN0LCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tZWRpX2luc25saXN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZGF0YSA9IGttYWxsb2Moc2l6ZW9mKGxzYW1wbF90KSAqIE1BWF9TQU1QTEVTLCBHRlBfS0VSTkVMKTsKKwlkYXRhID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIE1BWF9TQU1QTEVTLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpIHsKIAkJRFBSSU5USygia21hbGxvYyBmYWlsZWRcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWluc25zID0ga21hbGxvYyhzaXplb2YoY29tZWRpX2luc24pICogaW5zbmxpc3Qubl9pbnNucywgR0ZQX0tFUk5FTCk7CisJaW5zbnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2luc24pICogaW5zbmxpc3Qubl9pbnNucywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbnNucykgewogCQlEUFJJTlRLKCJrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC02NDIsNyArNjUyLDcgQEAKIAl9CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoaW5zbnMsIGluc25saXN0Lmluc25zLAotCQkJICAgc2l6ZW9mKGNvbWVkaV9pbnNuKSAqIGluc25saXN0Lm5faW5zbnMpKSB7CisJCQkgICBzaXplb2Yoc3RydWN0IGNvbWVkaV9pbnNuKSAqIGluc25saXN0Lm5faW5zbnMpKSB7CiAJCURQUklOVEsoImNvcHlfZnJvbV91c2VyIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZXJyb3I7CkBAIC02NTYsNyArNjY2LDcgQEAKIAkJfQogCQlpZiAoaW5zbnNbaV0uaW5zbiAmIElOU05fTUFTS19XUklURSkgewogCQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGluc25zW2ldLmRhdGEsCi0JCQkJCSAgIGluc25zW2ldLm4gKiBzaXplb2YobHNhbXBsX3QpKSkgeworCQkJCQkgICBpbnNuc1tpXS5uICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQkJRFBSSU5USygiY29weV9mcm9tX3VzZXIgZmFpbGVkXG4iKTsKIAkJCQlyZXQgPSAtRUZBVUxUOwogCQkJCWdvdG8gZXJyb3I7CkBAIC02NjcsNyArNjc3LDcgQEAKIAkJCWdvdG8gZXJyb3I7CiAJCWlmIChpbnNuc1tpXS5pbnNuICYgSU5TTl9NQVNLX1JFQUQpIHsKIAkJCWlmIChjb3B5X3RvX3VzZXIoaW5zbnNbaV0uZGF0YSwgZGF0YSwKLQkJCQkJIGluc25zW2ldLm4gKiBzaXplb2YobHNhbXBsX3QpKSkgeworCQkJCQkgaW5zbnNbaV0ubiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgewogCQkJCURQUklOVEsoImNvcHlfdG9fdXNlciBmYWlsZWRcbiIpOwogCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJZ290byBlcnJvcjsKQEAgLTY4Niw3ICs2OTYsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX2luc25fY29uZmlnX2xlbmd0aChjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGNoZWNrX2luc25fY29uZmlnX2xlbmd0aChzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpZiAoaW5zbi0+biA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzQ3LDEwICs3NTcsMTAgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBwYXJzZV9pbnNuKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhLAorc3RhdGljIGludCBwYXJzZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhLAogCQkgICAgICB2b2lkICpmaWxlKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKQEAgLTgxNSw3ICs4MjUsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogYSBzdWJkZXZpY2UgaW5zdHJ1Y3Rpb24gKi8KLQkJbHNhbXBsX3QgbWF4ZGF0YTsKKwkJdW5zaWduZWQgaW50IG1heGRhdGE7CiAKIAkJaWYgKGluc24tPnN1YmRldiA+PSBkZXYtPm5fc3ViZGV2aWNlcykgewogCQkJRFBSSU5USygic3ViZGV2aWNlICVkIG91dCBvZiByYW5nZVxuIiwgaW5zbi0+c3ViZGV2KTsKQEAgLTkwMSwyNSArOTExLDI1IEBACiAgKiAJCXBvaW50ZXIgdG8gaW5zbgogICoKICAqIAlyZWFkczoKLSAqIAkJY29tZWRpX2luc24gc3RydWN0IGF0IGFyZworICogCQlzdHJ1Y3QgY29tZWRpX2luc24gc3RydWN0IGF0IGFyZwogICogCQlkYXRhIChmb3Igd3JpdGVzKQogICoKICAqIAl3cml0ZXM6CiAgKiAJCWRhdGEgKGZvciByZWFkcykKICAqLwotc3RhdGljIGludCBkb19pbnNuX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQorc3RhdGljIGludCBkb19pbnNuX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSkKIHsKLQljb21lZGlfaW5zbiBpbnNuOwotCWxzYW1wbF90ICpkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKKwl1bnNpZ25lZCBpbnQgKmRhdGEgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JZGF0YSA9IGttYWxsb2Moc2l6ZW9mKGxzYW1wbF90KSAqIE1BWF9TQU1QTEVTLCBHRlBfS0VSTkVMKTsKKwlkYXRhID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIE1BWF9TQU1QTEVTLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmluc24sIGFyZywgc2l6ZW9mKGNvbWVkaV9pbnNuKSkpIHsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluc24sIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfaW5zbikpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtOTI4LDcgKzkzOCw3IEBACiAJaWYgKGluc24ubiA+IE1BWF9TQU1QTEVTKQogCQlpbnNuLm4gPSBNQVhfU0FNUExFUzsKIAlpZiAoaW5zbi5pbnNuICYgSU5TTl9NQVNLX1dSSVRFKSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBpbnNuLmRhdGEsIGluc24ubiAqIHNpemVvZihsc2FtcGxfdCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBpbnNuLmRhdGEsIGluc24ubiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgewogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTkzNyw3ICs5NDcsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwogCWlmIChpbnNuLmluc24gJiBJTlNOX01BU0tfUkVBRCkgewotCQlpZiAoY29weV90b191c2VyKGluc24uZGF0YSwgZGF0YSwgaW5zbi5uICogc2l6ZW9mKGxzYW1wbF90KSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihpbnNuLmRhdGEsIGRhdGEsIGluc24ubiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgewogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTk2NSwxNSArOTc1LDE1IEBACiAJCW1vZGlmaWVkIGNtZCBzdHJ1Y3R1cmUgYXQgYXJnCiAKICovCi1zdGF0aWMgaW50IGRvX2NtZF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSkKK3N0YXRpYyBpbnQgZG9fY21kX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSkKIHsKLQljb21lZGlfY21kIHVzZXJfY21kOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCB1c2VyX2NtZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0X3NhdmVyID0gTlVMTDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcl9jbWQsIGFyZywgc2l6ZW9mKGNvbWVkaV9jbWQpKSkgeworCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcl9jbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfY21kKSkpIHsKIAkJRFBSSU5USygiYmFkIGNtZCBhZGRyZXNzXG4iKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtMTA2Miw3ICsxMDcyLDcgQEAKIAkJLyogcmVzdG9yZSBjaGFubGlzdCBwb2ludGVyIGJlZm9yZSBjb3B5aW5nIGJhY2sgKi8KIAkJdXNlcl9jbWQuY2hhbmxpc3QgPSBjaGFubGlzdF9zYXZlcjsKIAkJdXNlcl9jbWQuZGF0YSA9IE5VTEw7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdXNlcl9jbWQsIHNpemVvZihjb21lZGlfY21kKSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ1c2VyX2NtZCwgc2l6ZW9mKHN0cnVjdCBjb21lZGlfY21kKSkpIHsKIAkJCURQUklOVEsoImZhdWx0IHdyaXRpbmcgY21kXG4iKTsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlnb3RvIGNsZWFudXA7CkBAIC0xMTE5LDE1ICsxMTI5LDE1IEBACiAJCW1vZGlmaWVkIGNtZCBzdHJ1Y3R1cmUgYXQgYXJnCiAKICovCi1zdGF0aWMgaW50IGRvX2NtZHRlc3RfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX2NtZHRlc3RfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9jbWQgdXNlcl9jbWQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2NtZCB1c2VyX2NtZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0X3NhdmVyID0gTlVMTDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcl9jbWQsIGFyZywgc2l6ZW9mKGNvbWVkaV9jbWQpKSkgeworCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcl9jbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfY21kKSkpIHsKIAkJRFBSSU5USygiYmFkIGNtZCBhZGRyZXNzXG4iKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtMTE5MSw3ICsxMjAxLDcgQEAKIAkvKiByZXN0b3JlIGNoYW5saXN0IHBvaW50ZXIgYmVmb3JlIGNvcHlpbmcgYmFjayAqLwogCXVzZXJfY21kLmNoYW5saXN0ID0gY2hhbmxpc3Rfc2F2ZXI7CiAKLQlpZiAoY29weV90b191c2VyKGFyZywgJnVzZXJfY21kLCBzaXplb2YoY29tZWRpX2NtZCkpKSB7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ1c2VyX2NtZCwgc2l6ZW9mKHN0cnVjdCBjb21lZGlfY21kKSkpIHsKIAkJRFBSSU5USygiYmFkIGNtZCBhZGRyZXNzXG4iKTsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBjbGVhbnVwOwpAQCAtMTIxNywxMSArMTIyNywxMSBAQAogCiAqLwogCi1zdGF0aWMgaW50IGRvX2xvY2tfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKQorc3RhdGljIGludCBkb19sb2NrX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJaWYgKGFyZyA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjYxLDkgKzEyNzEsOSBAQAogCVRoaXMgZnVuY3Rpb24gaXNuJ3QgcHJvdGVjdGVkIGJ5IHRoZSBzZW1hcGhvcmUsIHNpbmNlCiAJd2UgYWxyZWFkeSBvd24gdGhlIGxvY2suCiAqLwotc3RhdGljIGludCBkb191bmxvY2tfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKQorc3RhdGljIGludCBkb191bmxvY2tfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJaWYgKGFyZyA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzAxLDkgKzEzMTEsOSBAQAogCQlub3RoaW5nCiAKICovCi1zdGF0aWMgaW50IGRvX2NhbmNlbF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX2NhbmNlbF9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoYXJnID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMzcsOSArMTM0Nyw5IEBACiAJCW5vdGhpbmcKIAogKi8KLXN0YXRpYyBpbnQgZG9fcG9sbF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX3BvbGxfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJaWYgKGFyZyA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzYwLDcgKzEzNzAsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGRvX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IGRvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTM3NCw4ICsxMzg0LDggQEAKIAogdm9pZCBjb21lZGlfdW5tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmM7Ci0JY29tZWRpX2RldmljZSAqZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CiAKIAlhc3luYyA9IGFyZWEtPnZtX3ByaXZhdGVfZGF0YTsKIAlkZXYgPSBhc3luYy0+c3ViZGV2aWNlLT5kZXZpY2U7CkBAIC0xMzk0LDE0ICsxNDA0LDE0IEBACiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOwotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBOVUxMOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAlpbnQgbl9wYWdlczsKIAlpbnQgaTsKIAlpbnQgcmV0dmFsOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAlpZiAoIWRldi0+YXR0YWNoZWQpIHsKQEAgLTE0NzAsOSArMTQ4MCw5IEBACiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2OwotCWNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpyZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CkBAIC0xNTEzLDE0ICsxNTIzLDE0IEBACiBzdGF0aWMgc3NpemVfdCBjb21lZGlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKIAkJCSAgICBsb2ZmX3QgKm9mZnNldCkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAJaW50IG4sIG0sIGNvdW50ID0gMCwgcmV0dmFsID0gMDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAljb25zdCB1bnNpZ25lZCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0KIAkgICAgY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKIAogCWlmICghZGV2LT5hdHRhY2hlZCkgewogCQlEUFJJTlRLKCJubyBkcml2ZXIgY29uZmlndXJlZCBvbiBjb21lZGklaVxuIiwgZGV2LT5taW5vcik7CkBAIC0xNjE1LDE0ICsxNjI1LDE0IEBACiBzdGF0aWMgc3NpemVfdCBjb21lZGlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAogCQkJICAgbG9mZl90ICpvZmZzZXQpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCWludCBuLCBtLCBjb3VudCA9IDAsIHJldHZhbCA9IDA7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CiAKIAlpZiAoIWRldi0+YXR0YWNoZWQpIHsKIAkJRFBSSU5USygibm8gZHJpdmVyIGNvbmZpZ3VyZWQgb24gY29tZWRpJWlcbiIsIGRldi0+bWlub3IpOwpAQCAtMTcyMyw5ICsxNzMzLDkgQEAKIC8qCiAgICBUaGlzIGZ1bmN0aW9uIHJlc3RvcmVzIGEgc3ViZGV2aWNlIHRvIGFuIGlkbGUgc3RhdGUuCiAgKi8KLXZvaWQgZG9fYmVjb21lX25vbmJ1c3koY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQordm9pZCBkb19iZWNvbWVfbm9uYnVzeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQljb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAogCWNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHMsIFNSRl9SVU5OSU5HLCAwKTsKICNpZmRlZiBDT05GSUdfQ09NRURJX1JUCkBAIC0xNzQ3LDExICsxNzU3LDExIEBACiAKIHN0YXRpYyBpbnQgY29tZWRpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2hhciBtb2RbMzJdOwogCWNvbnN0IHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPQogCSAgICBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mbyA/IGRldl9maWxlX2luZm8tPmRldmljZSA6IE5VTEw7CisKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJRFBSSU5USygiaW52YWxpZCBtaW5vciBudW1iZXJcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE3ODMsMTAgKzE3OTMsOSBAQAogCiAJZGV2LT5pbl9yZXF1ZXN0X21vZHVsZSA9IDE7CiAKLQlzcHJpbnRmKG1vZCwgImNoYXItbWFqb3ItJWktJWkiLCBDT01FRElfTUFKT1IsIGRldi0+bWlub3IpOwogI2lmZGVmIENPTkZJR19LTU9ECiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQlyZXF1ZXN0X21vZHVsZShtb2QpOworCXJlcXVlc3RfbW9kdWxlKCJjaGFyLW1ham9yLSVpLSVpIiwgQ09NRURJX01BSk9SLCBkZXYtPm1pbm9yKTsKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKICNlbmRpZgogCkBAIC0xODIzLDggKzE4MzIsOCBAQAogCWNvbnN0IHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPQogCSAgICBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gTlVMTDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gTlVMTDsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwpAQCAtMTg2Miw3ICsxODcxLDcgQEAKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPQogCSAgICBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwogCi0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CiAKIAlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZkZXYtPmFzeW5jX3F1ZXVlKTsKIH0KQEAgLTE4OTMsNyArMTkwMiw3IEBACiB7CiAJdW5zaWduZWQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBDT01FRElfTlVNX0xFR0FDWV9NSU5PUlM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgY29tZWRpX251bV9sZWdhY3lfbWlub3JzOyBpKyspCiAJCWNvbWVkaV9mcmVlX2JvYXJkX21pbm9yKGkpOwogfQogCkBAIC0xOTA1LDYgKzE5MTQsMjIgQEAKIAlwcmludGsoS0VSTl9JTkZPICJjb21lZGk6IHZlcnNpb24gIiBDT01FRElfUkVMRUFTRQogCSAgICAgICAiIC0gaHR0cDovL3d3dy5jb21lZGkub3JnXG4iKTsKIAorCWlmIChjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnMgPCAwIHx8CisJICAgIGNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyA+IENPTUVESV9OVU1fQk9BUkRfTUlOT1JTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBmb3IgbW9kdWxlICIKKwkJICAgICAgICJwYXJhbWV0ZXIgXCJjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnNcIi4gIFZhbGlkIHZhbHVlcyAiCisJCSAgICAgICAiYXJlIDAgdGhyb3VnaCAlaS5cbiIsIENPTUVESV9OVU1fQk9BUkRfTUlOT1JTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBjb21lZGkgaXMgdW51c2FibGUgaWYgYm90aCBjb21lZGlfYXV0b2NvbmZpZyBhbmQKKwkgKiBjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnMgYXJlIHplcm8sIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYWRqdXN0IHRoZQorCSAqIGRlZmF1bHRzIGluIHRoYXQgY2FzZQorCSAqLworCWlmIChjb21lZGlfYXV0b2NvbmZpZyA9PSAwICYmIGNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyA9PSAwKQorCQljb21lZGlfbnVtX2xlZ2FjeV9taW5vcnMgPSAxNjsKKwogCW1lbXNldChjb21lZGlfZmlsZV9pbmZvX3RhYmxlLCAwLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICopICogQ09NRURJX05VTV9NSU5PUlMpOwogCkBAIC0xOTMzLDcgKzE5NTgsNyBAQAogCWNvbWVkaV9wcm9jX2luaXQoKTsKIAogCS8qIGNyZWF0ZSBkZXZpY2VzIGZpbGVzIGZvciBsZWdhY3kvbWFudWFsIHVzZSAqLwotCWZvciAoaSA9IDA7IGkgPCBDT01FRElfTlVNX0xFR0FDWV9NSU5PUlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnM7IGkrKykgewogCQlpbnQgbWlub3I7CiAJCW1pbm9yID0gY29tZWRpX2FsbG9jX2JvYXJkX21pbm9yKE5VTEwpOwogCQlpZiAobWlub3IgPCAwKSB7CkBAIC0xOTc1LDE1ICsyMDAwLDE1IEBACiBtb2R1bGVfaW5pdChjb21lZGlfaW5pdCk7CiBtb2R1bGVfZXhpdChjb21lZGlfY2xlYW51cCk7CiAKLXZvaWQgY29tZWRpX2Vycm9yKGNvbnN0IGNvbWVkaV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcykKK3ZvaWQgY29tZWRpX2Vycm9yKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnMpCiB7CiAJcnRfcHJpbnRrKCJjb21lZGklZDogJXM6ICVzXG4iLCBkZXYtPm1pbm9yLCBkZXYtPmRyaXZlci0+ZHJpdmVyX25hbWUsCiAJCSAgcyk7CiB9CiAKLXZvaWQgY29tZWRpX2V2ZW50KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3ZvaWQgY29tZWRpX2V2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCXVuc2lnbmVkIHJ1bmZsYWdzID0gMDsKIAl1bnNpZ25lZCBydW5mbGFnc19tYXNrID0gMDsKIApAQCAtMjA0Miw3ICsyMDY3LDcgQEAKIAlzLT5hc3luYy0+ZXZlbnRzID0gMDsKIH0KIAotdm9pZCBjb21lZGlfc2V0X3N1YmRldmljZV9ydW5mbGFncyhjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBtYXNrLAordm9pZCBjb21lZGlfc2V0X3N1YmRldmljZV9ydW5mbGFncyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgbWFzaywKIAkJCQkgICB1bnNpZ25lZCBiaXRzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMDUzLDcgKzIwNzgsNyBAQAogCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5zcGluX2xvY2ssIGZsYWdzKTsKIH0KIAotdW5zaWduZWQgY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3MoY29tZWRpX3N1YmRldmljZSAqcykKK3Vuc2lnbmVkIGNvbWVkaV9nZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgcnVuZmxhZ3M7CkBAIC0yMDY0LDkgKzIwODksOSBAQAogCXJldHVybiBydW5mbGFnczsKIH0KIAotc3RhdGljIGludCBpc19kZXZpY2VfYnVzeShjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlzX2RldmljZV9idXN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgaTsKIAogCWlmICghZGV2LT5hdHRhY2hlZCkKQEAgLTIwODMsMTUgKzIxMDgsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjb21lZGlfZGV2aWNlX2luaXQoY29tZWRpX2RldmljZSAqZGV2KQordm9pZCBjb21lZGlfZGV2aWNlX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQltZW1zZXQoZGV2LCAwLCBzaXplb2YoY29tZWRpX2RldmljZSkpOworCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmljZSkpOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnNwaW5sb2NrKTsKIAltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKIAlkZXYtPm1pbm9yID0gLTE7CiB9CiAKLXZvaWQgY29tZWRpX2RldmljZV9jbGVhbnVwKGNvbWVkaV9kZXZpY2UgKmRldikKK3ZvaWQgY29tZWRpX2RldmljZV9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0yMTA1LDEzICsyMTMwLDEzIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmluZm87Ci0JZGV2aWNlX2NyZWF0ZV9yZXN1bHRfdHlwZSAqY3NkZXY7CisJc3RydWN0IGRldmljZSAqY3NkZXY7CiAJdW5zaWduZWQgaTsKIAogCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpbmZvLT5kZXZpY2UgPSBremFsbG9jKHNpemVvZihjb21lZGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaW5mby0+ZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mby0+ZGV2aWNlID09IE5VTEwpIHsKIAkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjE1NSw3ICsyMTgwLDcgQEAKIAljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29tZWRpX2ZpbGVfaW5mb190YWJsZV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoaW5mbykgewotCQljb21lZGlfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXZpY2U7CisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXZpY2U7CiAJCWlmIChkZXYpIHsKIAkJCWlmIChkZXYtPmNsYXNzX2RldikgewogCQkJCWRldmljZV9kZXN0cm95KGNvbWVkaV9jbGFzcywKQEAgLTIxNjgsMTEgKzIxOTMsMTEgQEAKIAl9CiB9CiAKLWludCBjb21lZGlfYWxsb2Nfc3ViZGV2aWNlX21pbm9yKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK2ludCBjb21lZGlfYWxsb2Nfc3ViZGV2aWNlX21pbm9yKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICppbmZvOwotCWRldmljZV9jcmVhdGVfcmVzdWx0X3R5cGUgKmNzZGV2OworCXN0cnVjdCBkZXZpY2UgKmNzZGV2OwogCXVuc2lnbmVkIGk7CiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0yMTgyLDcgKzIyMDcsNyBAQAogCWluZm8tPnJlYWRfc3ViZGV2aWNlID0gczsKIAlpbmZvLT53cml0ZV9zdWJkZXZpY2UgPSBzOwogCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY29tZWRpX2ZpbGVfaW5mb190YWJsZV9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gQ09NRURJX0ZJUlNUX1NVQkRFVklDRV9NSU5PUjsgaSA8IENPTUVESV9OVU1fQk9BUkRfTUlOT1JTOyArK2kpIHsKKwlmb3IgKGkgPSBDT01FRElfRklSU1RfU1VCREVWSUNFX01JTk9SOyBpIDwgQ09NRURJX05VTV9NSU5PUlM7ICsraSkgewogCQlpZiAoY29tZWRpX2ZpbGVfaW5mb190YWJsZVtpXSA9PSBOVUxMKSB7CiAJCQljb21lZGlfZmlsZV9pbmZvX3RhYmxlW2ldID0gaW5mbzsKIAkJCWJyZWFrOwpAQCAtMjIwNiw3ICsyMjMxLDcgQEAKIAlyZXR1cm4gaTsKIH0KIAotdm9pZCBjb21lZGlfZnJlZV9zdWJkZXZpY2VfbWlub3IoY29tZWRpX3N1YmRldmljZSAqcykKK3ZvaWQgY29tZWRpX2ZyZWVfc3ViZGV2aWNlX21pbm9yKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICppbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5oCmluZGV4IDYzZjhkZjUuLmNiNTAzYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmgKQEAgLTQsNSArNCw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgY2xhc3MgKmNvbWVkaV9jbGFzczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbWVkaV9mb3BzOworZXh0ZXJuIGludCBjb21lZGlfYXV0b2NvbmZpZzsKIAogI2VuZGlmIC8qIF9DT01FRElfRk9QU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9rc3ltcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfa3N5bXMuYwppbmRleCA5MGQ1NzI4Li42ZTZmYjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9rc3ltcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2tzeW1zLmMKQEAgLTMxLDEyICszMSwxMiBAQAogLyogZm9yIGRyaXZlcnMgKi8KIEVYUE9SVF9TWU1CT0woY29tZWRpX2RyaXZlcl9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9kcml2ZXJfdW5yZWdpc3Rlcik7Ci0vL0VYUE9SVF9TWU1CT0woY29tZWRpX2J1ZmNoZWNrKTsKLS8vRVhQT1JUX1NZTUJPTChjb21lZGlfZG9uZSk7Ci0vL0VYUE9SVF9TWU1CT0woY29tZWRpX2Vycm9yX2RvbmUpOworLyogRVhQT1JUX1NZTUJPTChjb21lZGlfYnVmY2hlY2spOyAqLworLyogRVhQT1JUX1NZTUJPTChjb21lZGlfZG9uZSk7ICovCisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9lcnJvcl9kb25lKTsgKi8KIEVYUE9SVF9TWU1CT0woY29tZWRpX2Vycm9yKTsKLS8vRVhQT1JUX1NZTUJPTChjb21lZGlfZW9idWYpOwotLy9FWFBPUlRfU1lNQk9MKGNvbWVkaV9lb3MpOworLyogRVhQT1JUX1NZTUJPTChjb21lZGlfZW9idWYpOyAqLworLyogRVhQT1JUX1NZTUJPTChjb21lZGlfZW9zKTsgKi8KIEVYUE9SVF9TWU1CT0woY29tZWRpX2V2ZW50KTsKIEVYUE9SVF9TWU1CT0woY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3MpOwogRVhQT1JUX1NZTUJPTChjb21lZGlfc2V0X3N1YmRldmljZV9ydW5mbGFncyk7CkBAIC02MCw2ICs2MCw4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChjb21lZGlfZnJlZV9ib2FyZF9taW5vcik7CiBFWFBPUlRfU1lNQk9MX0dQTChjb21lZGlfcGNpX2F1dG9fY29uZmlnKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyk7CitFWFBPUlRfU1lNQk9MX0dQTChjb21lZGlfdXNiX2F1dG9fY29uZmlnKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV91c2JfYXV0b191bmNvbmZpZyk7CiAKIC8qIGZvciBrY29tZWRpbGliICovCiBFWFBPUlRfU1lNQk9MKGNoZWNrX2NoYW5saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX3J0LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9ydC5oCmluZGV4IDYxODUyYmYuLjE2OWNhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX3J0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfcnQuaApAQCAtMjgsNyArMjgsNiBAQAogI2Vycm9yIGNvbWVkaV9ydC5oIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGJ5IGNvbWVkaWRldi5oCiAjZW5kaWYKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTU5LDEyICs1OCwxMiBAQAogCiBpbnQgY29tZWRpX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycXJldHVybl90KCpoYW5kbGVyKSAoaW50LAogCQl2b2lkICpQVF9SRUdTX0FSRyksIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldmljZSwKLQkJY29tZWRpX2RldmljZSAqZGV2X2lkKTsKLXZvaWQgY29tZWRpX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNvbWVkaV9kZXZpY2UgKmRldl9pZCk7CisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXZfaWQpOwordm9pZCBjb21lZGlfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldl9pZCk7CiB2b2lkIGNvbWVkaV9ydF9pbml0KHZvaWQpOwogdm9pZCBjb21lZGlfcnRfY2xlYW51cCh2b2lkKTsKLWludCBjb21lZGlfc3dpdGNoX3RvX3J0KGNvbWVkaV9kZXZpY2UgKmRldik7Ci12b2lkIGNvbWVkaV9zd2l0Y2hfdG9fbm9uX3J0KGNvbWVkaV9kZXZpY2UgKmRldik7CitpbnQgY29tZWRpX3N3aXRjaF90b19ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3ZvaWQgY29tZWRpX3N3aXRjaF90b19ub25fcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiB2b2lkIGNvbWVkaV9ydF9wZW5kX3dha2V1cCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSk7CiBleHRlcm4gaW50IHJ0X3BlbmRfY2FsbCh2b2lkICgqZnVuYykgKGludCBhcmcxLCB2b2lkICphcmcyKSwgaW50IGFyZzEsCiAJdm9pZCAqYXJnMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWRldi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlkZXYuaAppbmRleCAzNzM1MzU1Li5lYTMxOTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWRldi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTM2LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlICJpbnRlcnJ1cHQuaCIKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KQEAgLTU1LDkgKzUzLDkgQEAKIAogI2RlZmluZSBDT01FRElfSU5JVENMRUFOVVBfTk9NT0RVTEUoeCkJCQkJCVwKIAlzdGF0aWMgaW50IF9faW5pdCB4ICMjIF9pbml0X21vZHVsZSh2b2lkKQkJCVwKLQkJe3JldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCYoeCkpO30JCQlcCisJCXtyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmKHgpKTsgfQkJCVwKIAlzdGF0aWMgdm9pZCBfX2V4aXQgeCAjIyBfY2xlYW51cF9tb2R1bGUodm9pZCkJCQlcCi0JCXtjb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJih4KSk7fSAJCQlcCisJCXtjb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJih4KSk7IH0gCQkJXAogCW1vZHVsZV9pbml0KHggIyMgX2luaXRfbW9kdWxlKTsJCQkJCVwKIAltb2R1bGVfZXhpdCh4ICMjIF9jbGVhbnVwX21vZHVsZSk7CQkJCQlcCiAKQEAgLTEyMCwyMyArMTE4LDE0IEBACiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUVJTEhBVVMJCTB4MTQwMgogCiAjZGVmaW5lIENPTUVESV9OVU1fTUlOT1JTIDB4MTAwCi0jZGVmaW5lIENPTUVESV9OVU1fTEVHQUNZX01JTk9SUyAweDEwCiAjZGVmaW5lIENPTUVESV9OVU1fQk9BUkRfTUlOT1JTIDB4MzAKICNkZWZpbmUgQ09NRURJX0ZJUlNUX1NVQkRFVklDRV9NSU5PUiBDT01FRElfTlVNX0JPQVJEX01JTk9SUwogCi10eXBlZGVmIHN0cnVjdCBjb21lZGlfZGV2aWNlX3N0cnVjdCBjb21lZGlfZGV2aWNlOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZV9zdHJ1Y3QgY29tZWRpX3N1YmRldmljZTsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9hc3luY19zdHJ1Y3QgY29tZWRpX2FzeW5jOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2RyaXZlcl9zdHJ1Y3QgY29tZWRpX2RyaXZlcjsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9scmFuZ2Vfc3RydWN0IGNvbWVkaV9scmFuZ2U7Ci0KLXR5cGVkZWYgc3RydWN0IGRldmljZSBkZXZpY2VfY3JlYXRlX3Jlc3VsdF90eXBlOwotCiAjZGVmaW5lIENPTUVESV9ERVZJQ0VfQ1JFQVRFKGNzLCBwYXJlbnQsIGRldnQsIGRydmRhdGEsIGRldmljZSwgZm10Li4uKSBcCiAJZGV2aWNlX2NyZWF0ZShjcywgKChwYXJlbnQpID8gKHBhcmVudCkgOiAoZGV2aWNlKSksIGRldnQsIGRydmRhdGEsIGZtdCkKIAotc3RydWN0IGNvbWVkaV9zdWJkZXZpY2Vfc3RydWN0IHsKLQljb21lZGlfZGV2aWNlICpkZXZpY2U7CitzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSB7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldmljZTsKIAlpbnQgdHlwZTsKIAlpbnQgbl9jaGFuOwogCXZvbGF0aWxlIGludCBzdWJkZXZfZmxhZ3M7CkBAIC0xNDQsNyArMTMzLDcgQEAKIAogCXZvaWQgKnByaXZhdGU7CiAKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCiAJdm9pZCAqbG9jazsKIAl2b2lkICpidXN5OwpAQCAtMTUzLDQ2ICsxNDIsNDYgQEAKIAogCWludCBpb19iaXRzOwogCi0JbHNhbXBsX3QgbWF4ZGF0YTsJLyogaWYgbWF4ZGF0YT09MCwgdXNlIGxpc3QgKi8KLQljb25zdCBsc2FtcGxfdCAqbWF4ZGF0YV9saXN0OwkvKiBsaXN0IGlzIGNoYW5uZWwgc3BlY2lmaWMgKi8KKwl1bnNpZ25lZCBpbnQgbWF4ZGF0YTsJLyogaWYgbWF4ZGF0YT09MCwgdXNlIGxpc3QgKi8KKwljb25zdCB1bnNpZ25lZCBpbnQgKm1heGRhdGFfbGlzdDsJLyogbGlzdCBpcyBjaGFubmVsIHNwZWNpZmljICovCiAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJY29uc3QgdW5zaWduZWQgaW50ICpmbGFnbGlzdDsKIAogCXVuc2lnbmVkIGludCBzZXR0bGluZ190aW1lXzA7CiAKLQljb25zdCBjb21lZGlfbHJhbmdlICpyYW5nZV90YWJsZTsKLQljb25zdCBjb21lZGlfbHJhbmdlICpjb25zdCAqcmFuZ2VfdGFibGVfbGlzdDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfdGFibGU7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0ICpyYW5nZV90YWJsZV9saXN0OwogCiAJdW5zaWduZWQgaW50ICpjaGFubGlzdDsJLyogZHJpdmVyLW93bmVkIGNoYW5saXN0IChub3QgdXNlZCkgKi8KIAotCWludCAoKmluc25fcmVhZCkgKGNvbWVkaV9kZXZpY2UgKiwgY29tZWRpX3N1YmRldmljZSAqLCBjb21lZGlfaW5zbiAqLAotCQlsc2FtcGxfdCAqKTsKLQlpbnQgKCppbnNuX3dyaXRlKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICosIGNvbWVkaV9pbnNuICosCi0JCWxzYW1wbF90ICopOwotCWludCAoKmluc25fYml0cykgKGNvbWVkaV9kZXZpY2UgKiwgY29tZWRpX3N1YmRldmljZSAqLCBjb21lZGlfaW5zbiAqLAotCQlsc2FtcGxfdCAqKTsKLQlpbnQgKCppbnNuX2NvbmZpZykgKGNvbWVkaV9kZXZpY2UgKiwgY29tZWRpX3N1YmRldmljZSAqLCBjb21lZGlfaW5zbiAqLAotCQlsc2FtcGxfdCAqKTsKKwlpbnQgKCppbnNuX3JlYWQpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwkJdW5zaWduZWQgaW50ICopOworCWludCAoKmluc25fd3JpdGUpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwkJdW5zaWduZWQgaW50ICopOworCWludCAoKmluc25fYml0cykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CisJaW50ICgqaW5zbl9jb25maWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwkJdW5zaWduZWQgaW50ICopOwogCi0JaW50ICgqZG9fY21kKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICopOwotCWludCAoKmRvX2NtZHRlc3QpIChjb21lZGlfZGV2aWNlICosIGNvbWVkaV9zdWJkZXZpY2UgKiwgY29tZWRpX2NtZCAqKTsKLQlpbnQgKCpwb2xsKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICopOwotCWludCAoKmNhbmNlbCkgKGNvbWVkaV9kZXZpY2UgKiwgY29tZWRpX3N1YmRldmljZSAqKTsKLQkvKiBpbnQgKCpkb19sb2NrKShjb21lZGlfZGV2aWNlICosY29tZWRpX3N1YmRldmljZSAqKTsgKi8KLQkvKiBpbnQgKCpkb191bmxvY2spKGNvbWVkaV9kZXZpY2UgKixjb21lZGlfc3ViZGV2aWNlICopOyAqLworCWludCAoKmRvX2NtZCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICopOworCWludCAoKmRvX2NtZHRlc3QpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2NtZCAqKTsKKwlpbnQgKCpwb2xsKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKik7CisJaW50ICgqY2FuY2VsKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKik7CisJLyogaW50ICgqZG9fbG9jaykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsgKi8KKwkvKiBpbnQgKCpkb191bmxvY2spKHN0cnVjdCBjb21lZGlfZGV2aWNlICosc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKik7ICovCiAKIAkvKiBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIGNoYW5nZXMgKi8KLQlpbnQgKCpidWZfY2hhbmdlKSAoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAorCWludCAoKmJ1Zl9jaGFuZ2UpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSk7CiAKLQl2b2lkICgqbXVuZ2UpIChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsIHZvaWQgKmRhdGEsCisJdm9pZCAoKm11bmdlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHZvaWQgKmRhdGEsCiAJCXVuc2lnbmVkIGludCBudW1fYnl0ZXMsIHVuc2lnbmVkIGludCBzdGFydF9jaGFuX2luZGV4KTsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBhc3luY19kbWFfZGlyOwogCiAJdW5zaWduZWQgaW50IHN0YXRlOwogCi0JZGV2aWNlX2NyZWF0ZV9yZXN1bHRfdHlwZSAqY2xhc3NfZGV2OworCXN0cnVjdCBkZXZpY2UgKmNsYXNzX2RldjsKIAlpbnQgbWlub3I7CiB9OwogCkBAIC0yMDEsOCArMTkwLDggQEAKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogfTsKIAotc3RydWN0IGNvbWVkaV9hc3luY19zdHJ1Y3QgewotCWNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKK3N0cnVjdCBjb21lZGlfYXN5bmMgeworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2U7CiAKIAl2b2lkICpwcmVhbGxvY19idWY7CS8qIHByZS1hbGxvY2F0ZWQgYnVmZmVyICovCiAJdW5zaWduZWQgaW50IHByZWFsbG9jX2J1ZnN6OwkvKiBidWZmZXIgc2l6ZSwgaW4gYnl0ZXMgKi8KQEAgLTIzMiw3ICsyMjEsNyBAQAogCiAJdW5zaWduZWQgaW50IGV2ZW50czsJLyogZXZlbnRzIHRoYXQgaGF2ZSBvY2N1cnJlZCAqLwogCi0JY29tZWRpX2NtZCBjbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgY21kOwogCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9oZWFkOwogCkBAIC0yNDEsMTcgKzIzMCwxNyBAQAogCWludCAoKmNiX2Z1bmMpICh1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKik7CiAJdm9pZCAqY2JfYXJnOwogCi0JaW50ICgqaW50dHJpZykgKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKKwlpbnQgKCppbnR0cmlnKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQl1bnNpZ25lZCBpbnQgeCk7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2RyaXZlcl9zdHJ1Y3QgewotCXN0cnVjdCBjb21lZGlfZHJpdmVyX3N0cnVjdCAqbmV4dDsKK3N0cnVjdCBjb21lZGlfZHJpdmVyIHsKKwlzdHJ1Y3QgY29tZWRpX2RyaXZlciAqbmV4dDsKIAogCWNvbnN0IGNoYXIgKmRyaXZlcl9uYW1lOwogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKLQlpbnQgKCphdHRhY2gpIChjb21lZGlfZGV2aWNlICosIGNvbWVkaV9kZXZjb25maWcgKik7Ci0JaW50ICgqZGV0YWNoKSAoY29tZWRpX2RldmljZSAqKTsKKwlpbnQgKCphdHRhY2gpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqKTsKKwlpbnQgKCpkZXRhY2gpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKTsKIAogCS8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBib2FyZF9uYW1lIGFuZCBib2FyZF9pZCBhcnJheXMgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX25hbWVzOwpAQCAtMjYwLDEyICsyNDksMTIgQEAKIAlpbnQgb2Zmc2V0OwogfTsKIAotc3RydWN0IGNvbWVkaV9kZXZpY2Vfc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfZGV2aWNlIHsKIAlpbnQgdXNlX2NvdW50OwotCWNvbWVkaV9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdmVyOwogCXZvaWQgKnByaXZhdGU7CiAKLQlkZXZpY2VfY3JlYXRlX3Jlc3VsdF90eXBlICpjbGFzc19kZXY7CisJc3RydWN0IGRldmljZSAqY2xhc3NfZGV2OwogCWludCBtaW5vcjsKIAkvKiBod19kZXYgaXMgcGFzc2VkIHRvIGRtYV9hbGxvY19jb2hlcmVudCB3aGVuIGFsbG9jYXRpbmcgYXN5bmMgYnVmZmVycwogCSAqIGZvciBzdWJkZXZpY2VzIHRoYXQgaGF2ZSBhc3luY19kbWFfZGlyIHNldCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbgpAQCAtMjgxLDI1ICsyNzAsMjUgQEAKIAlpbnQgaW5fcmVxdWVzdF9tb2R1bGU7CiAKIAlpbnQgbl9zdWJkZXZpY2VzOwotCWNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZXM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZXM7CiAKIAkvKiBkdW1iICovCiAJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CiAJdW5zaWduZWQgaW50IGlycTsKIAotCWNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2OwotCWNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldjsKIAogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICphc3luY19xdWV1ZTsKIAotCXZvaWQgKCpvcGVuKSAoY29tZWRpX2RldmljZSAqZGV2KTsKLQl2b2lkICgqY2xvc2UpIChjb21lZGlfZGV2aWNlICpkZXYpOworCXZvaWQgKCpvcGVuKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisJdm9pZCAoKmNsb3NlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiB9OwogCiBzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gewotCWNvbWVkaV9kZXZpY2UgKmRldmljZTsKLQljb21lZGlfc3ViZGV2aWNlICpyZWFkX3N1YmRldmljZTsKLQljb21lZGlfc3ViZGV2aWNlICp3cml0ZV9zdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcmVhZF9zdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldmljZTsKIH07CiAKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCkBAIC0zMTIsOCArMzAxLDggQEAKICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwogCi12b2lkIGNvbWVkaV9ldmVudChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpOwotdm9pZCBjb21lZGlfZXJyb3IoY29uc3QgY29tZWRpX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpzKTsKK3ZvaWQgY29tZWRpX2V2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK3ZvaWQgY29tZWRpX2Vycm9yKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnMpOwogCiAvKiB3ZSBjYW4gZXhwYW5kIHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHRvIGVuY29kZSBkZXZpY2VzL3N1YmRldmljZXMgaW50bwogIHRoZSBtaW5vciBudW1iZXIgc29vbiwgYWZ0ZXIgbW9yZSBkaXN0cm9zIHN1cHBvcnQgPiA4IGJpdCBtaW5vciBudW1iZXJzCkBAIC0zMjcsNyArMzE2LDcgQEAKIAogc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8odW5zaWduZWQgbWlub3IpOwogCi1zdGF0aWMgaW5saW5lIGNvbWVkaV9zdWJkZXZpY2UgKmNvbWVkaV9nZXRfcmVhZF9zdWJkZXZpY2UoCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpjb21lZGlfZ2V0X3JlYWRfc3ViZGV2aWNlKAogCQkJCWNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqaW5mbykKIHsKIAlpZiAoaW5mby0+cmVhZF9zdWJkZXZpY2UpCkBAIC0zMzcsNyArMzI2LDcgQEAKIAlyZXR1cm4gaW5mby0+ZGV2aWNlLT5yZWFkX3N1YmRldjsKIH0KIAotc3RhdGljIGlubGluZSBjb21lZGlfc3ViZGV2aWNlICpjb21lZGlfZ2V0X3dyaXRlX3N1YmRldmljZSgKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKmNvbWVkaV9nZXRfd3JpdGVfc3ViZGV2aWNlKAogCQkJCWNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqaW5mbykKIHsKIAlpZiAoaW5mby0+d3JpdGVfc3ViZGV2aWNlKQpAQCAtMzQ3LDE3ICszMzYsMTcgQEAKIAlyZXR1cm4gaW5mby0+ZGV2aWNlLT53cml0ZV9zdWJkZXY7CiB9CiAKLXZvaWQgY29tZWRpX2RldmljZV9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KTsKLWludCBjb21lZGlfZGV2aWNlX2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KTsKLWludCBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKGNvbWVkaV9kcml2ZXIgKik7Ci1pbnQgY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKGNvbWVkaV9kcml2ZXIgKik7Cit2b2lkIGNvbWVkaV9kZXZpY2VfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworaW50IGNvbWVkaV9kZXZpY2VfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitpbnQgY29tZWRpX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RyaXZlciAqKTsKK2ludCBjb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGNvbWVkaV9kcml2ZXIgKik7CiAKIHZvaWQgaW5pdF9wb2xsaW5nKHZvaWQpOwogdm9pZCBjbGVhbnVwX3BvbGxpbmcodm9pZCk7Ci12b2lkIHN0YXJ0X3BvbGxpbmcoY29tZWRpX2RldmljZSAqKTsKLXZvaWQgc3RvcF9wb2xsaW5nKGNvbWVkaV9kZXZpY2UgKik7Cit2b2lkIHN0YXJ0X3BvbGxpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKik7Cit2b2lkIHN0b3BfcG9sbGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqKTsKIAotaW50IGNvbWVkaV9idWZfYWxsb2MoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBsb25nCitpbnQgY29tZWRpX2J1Zl9hbGxvYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgbG9uZwogCW5ld19zaXplKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC0zODYsMTMgKzM3NSwxMyBAQAogICAgdmFyaW91cyBpbnRlcm5hbCBjb21lZGkgZnVuY3Rpb25zCiAgKi8KIAotaW50IGRvX3JhbmdlaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9yYW5nZWluZm8gKmFyZyk7Ci1pbnQgY2hlY2tfY2hhbmxpc3QoY29tZWRpX3N1YmRldmljZSAqcywgaW50IG4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QpOwotdm9pZCBjb21lZGlfc2V0X3N1YmRldmljZV9ydW5mbGFncyhjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBtYXNrLAoraW50IGRvX3JhbmdlaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3JhbmdlaW5mbyAqYXJnKTsKK2ludCBjaGVja19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgaW50IG4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QpOwordm9pZCBjb21lZGlfc2V0X3N1YmRldmljZV9ydW5mbGFncyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgbWFzaywKIAl1bnNpZ25lZCBiaXRzKTsKLXVuc2lnbmVkIGNvbWVkaV9nZXRfc3ViZGV2aWNlX3J1bmZsYWdzKGNvbWVkaV9zdWJkZXZpY2UgKnMpOwotaW50IGluc25faW52YWwoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCWNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSk7Cit1bnNpZ25lZCBjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitpbnQgaW5zbl9pbnZhbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKIC8qIHJhbmdlIHN0dWZmICovCiAKQEAgLTQwMywxMiArMzkyLDEyIEBACiAjZGVmaW5lIEJJUF9SQU5HRShhKQkJey0oYSkqMWU2LCAoYSkqMWU2LCAwfQogI2RlZmluZSBVTklfUkFOR0UoYSkJCXswLCAoYSkqMWU2LCAwfQogCi1leHRlcm4gY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMTA7Ci1leHRlcm4gY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyNTsKLWV4dGVybiBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIyXzU7Ci1leHRlcm4gY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjEwOwotZXh0ZXJuIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5pcG9sYXI1OwotZXh0ZXJuIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5rbm93bjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMTA7CitleHRlcm4gY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjU7CitleHRlcm4gY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjJfNTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjEwOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VuaXBvbGFyNTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmtub3duOwogCiAjZGVmaW5lIHJhbmdlX2RpZ2l0YWwJCXJhbmdlX3VuaXBvbGFyNQogCkBAIC00MTgsMjEgKzQwNywyMSBAQAogI2RlZmluZSBHQ0NfWkVST19MRU5HVEhfQVJSQVkgMAogI2VuZGlmCiAKLXN0cnVjdCBjb21lZGlfbHJhbmdlX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2xyYW5nZSB7CiAJaW50IGxlbmd0aDsKLQljb21lZGlfa3JhbmdlIHJhbmdlW0dDQ19aRVJPX0xFTkdUSF9BUlJBWV07CisJc3RydWN0IGNvbWVkaV9rcmFuZ2UgcmFuZ2VbR0NDX1pFUk9fTEVOR1RIX0FSUkFZXTsKIH07CiAKIC8qIHNvbWUgc2lsbHkgbGl0dGxlIGlubGluZSBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGlubGluZSBpbnQgYWxsb2Nfc3ViZGV2aWNlcyhjb21lZGlfZGV2aWNlICpkZXYsCitzdGF0aWMgaW5saW5lIGludCBhbGxvY19zdWJkZXZpY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkJICAgdW5zaWduZWQgaW50IG51bV9zdWJkZXZpY2VzKQogewogCXVuc2lnbmVkIGk7CiAKIAlkZXYtPm5fc3ViZGV2aWNlcyA9IG51bV9zdWJkZXZpY2VzOwogCWRldi0+c3ViZGV2aWNlcyA9Ci0JCWtjYWxsb2MobnVtX3N1YmRldmljZXMsIHNpemVvZihjb21lZGlfc3ViZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCWtjYWxsb2MobnVtX3N1YmRldmljZXMsIHNpemVvZihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghZGV2LT5zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVOT01FTTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3N1YmRldmljZXM7ICsraSkgewpAQCAtNDQ0LDcgKzQzMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFsbG9jX3ByaXZhdGUoY29tZWRpX2RldmljZSAqZGV2LCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGFsbG9jX3ByaXZhdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgaW50IHNpemUpCiB7CiAJZGV2LT5wcml2YXRlID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+cHJpdmF0ZSkKQEAgLTQ1MiwxNyArNDQxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9zYW1wbGUoY29uc3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9zYW1wbGUoY29uc3Qgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQpCiB7CiAJaWYgKHN1YmQtPnN1YmRldl9mbGFncyAmIFNERl9MU0FNUEwpCi0JCXJldHVybiBzaXplb2YobHNhbXBsX3QpOworCQlyZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAJZWxzZQotCQlyZXR1cm4gc2l6ZW9mKHNhbXBsX3QpOworCQlyZXR1cm4gc2l6ZW9mKHNob3J0KTsKIH0KIAogLyogbXVzdCBiZSB1c2VkIGluIGF0dGFjaCB0byBzZXQgZGV2LT5od19kZXYgaWYgeW91IHdpc2ggdG8gZG1hIGRpcmVjdGx5CiBpbnRvIGNvbWVkaSdzIGJ1ZmZlciAqLwotc3RhdGljIGlubGluZSB2b2lkIGNvbWVkaV9zZXRfaHdfZGV2KGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqaHdfZGV2KQorc3RhdGljIGlubGluZSB2b2lkIGNvbWVkaV9zZXRfaHdfZGV2KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKmh3X2RldikKIHsKIAlpZiAoZGV2LT5od19kZXYpCiAJCXB1dF9kZXZpY2UoZGV2LT5od19kZXYpOwpAQCAtNDc0LDMxICs0NjMsMzEgQEAKIAl9CiB9CiAKLWludCBjb21lZGlfYnVmX3B1dChjb21lZGlfYXN5bmMgKmFzeW5jLCBzYW1wbF90IHgpOwotaW50IGNvbWVkaV9idWZfZ2V0KGNvbWVkaV9hc3luYyAqYXN5bmMsIHNhbXBsX3QgKngpOworaW50IGNvbWVkaV9idWZfcHV0KHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCBzaG9ydCB4KTsKK2ludCBjb21lZGlfYnVmX2dldChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgc2hvcnQgKngpOwogCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9uX2F2YWlsYWJsZShjb21lZGlfYXN5bmMgKmFzeW5jKTsKLXVuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpOwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfYWxsb2Nfc3RyaWN0KGNvbWVkaV9hc3luYyAqYXN5bmMsCit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9uX2F2YWlsYWJsZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyk7Cit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcyk7Cit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3Qoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsCiAJdW5zaWduZWQgaW50IG5ieXRlcyk7Ci11bnNpZ25lZCBjb21lZGlfYnVmX3dyaXRlX2ZyZWUoY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcyk7Ci11bnNpZ25lZCBjb21lZGlfYnVmX3JlYWRfYWxsb2MoY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgbmJ5dGVzKTsKLXVuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9mcmVlKGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpOwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShjb21lZGlfYXN5bmMgKmFzeW5jKTsKLXZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfdG8oY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKK3Vuc2lnbmVkIGNvbWVkaV9idWZfd3JpdGVfZnJlZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcyk7Cit1bnNpZ25lZCBjb21lZGlfYnVmX3JlYWRfYWxsb2Moc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIG5ieXRlcyk7Cit1bnNpZ25lZCBjb21lZGlfYnVmX3JlYWRfZnJlZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcyk7Cit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKTsKK3ZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfdG8oc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJY29uc3Qgdm9pZCAqc291cmNlLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKLXZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfZnJvbShjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAordm9pZCBjb21lZGlfYnVmX21lbWNweV9mcm9tKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogCXZvaWQgKmRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY29tZWRpX2J1Zl93cml0ZV9uX2FsbG9jYXRlZChjb21lZGlfYXN5bmMgKmFzeW5jKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb21lZGlfYnVmX3dyaXRlX25fYWxsb2NhdGVkKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQogewogCXJldHVybiBhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50IC0gYXN5bmMtPmJ1Zl93cml0ZV9jb3VudDsKIH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX25fYWxsb2NhdGVkKGNvbWVkaV9hc3luYyAqYXN5bmMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9uX2FsbG9jYXRlZChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKIHsKIAlyZXR1cm4gYXN5bmMtPmJ1Zl9yZWFkX2FsbG9jX2NvdW50IC0gYXN5bmMtPmJ1Zl9yZWFkX2NvdW50OwogfQogCi12b2lkIGNvbWVkaV9yZXNldF9hc3luY19idWYoY29tZWRpX2FzeW5jICphc3luYyk7Cit2b2lkIGNvbWVkaV9yZXNldF9hc3luY19idWYoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmNvbWVkaV9hdXhfZGF0YShpbnQgb3B0aW9uc1tdLCBpbnQgbikKIHsKQEAgLTUyNywxMCArNTE2LDEzIEBACiAKIGludCBjb21lZGlfYWxsb2NfYm9hcmRfbWlub3Ioc3RydWN0IGRldmljZSAqaGFyZHdhcmVfZGV2aWNlKTsKIHZvaWQgY29tZWRpX2ZyZWVfYm9hcmRfbWlub3IodW5zaWduZWQgbWlub3IpOwotaW50IGNvbWVkaV9hbGxvY19zdWJkZXZpY2VfbWlub3IoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKTsKLXZvaWQgY29tZWRpX2ZyZWVfc3ViZGV2aWNlX21pbm9yKGNvbWVkaV9zdWJkZXZpY2UgKnMpOworaW50IGNvbWVkaV9hbGxvY19zdWJkZXZpY2VfbWlub3Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwordm9pZCBjb21lZGlfZnJlZV9zdWJkZXZpY2VfbWlub3Ioc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwogaW50IGNvbWVkaV9wY2lfYXV0b19jb25maWcoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwgY29uc3QgY2hhciAqYm9hcmRfbmFtZSk7CiB2b2lkIGNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKK3N0cnVjdCB1c2JfZGV2aWNlOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCitpbnQgY29tZWRpX3VzYl9hdXRvX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LCBjb25zdCBjaGFyICpib2FyZF9uYW1lKTsKK3ZvaWQgY29tZWRpX3VzYl9hdXRvX3VuY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYpOwogCiAjaW5jbHVkZSAiY29tZWRpX3J0LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpbGliLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWxpYi5oCmluZGV4IGZjNWZjMDEuLmMyNzI5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpbGliLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlsaWIuaApAQCAtMzYsMTggKzM2LDE2IEBACiAKICNpZm5kZWYgS0NPTUVESUxJQl9ERVBSRUNBVEVECiAKLXR5cGVkZWYgdm9pZCBjb21lZGlfdDsKLQogLyogdGhlc2UgZnVuY3Rpb25zIG1heSBub3QgYmUgY2FsbGVkIGF0IHJlYWwtdGltZSBwcmlvcml0eSAqLwogCi1jb21lZGlfdCAqY29tZWRpX29wZW4oY29uc3QgY2hhciAqcGF0aCk7Ci1pbnQgY29tZWRpX2Nsb3NlKGNvbWVkaV90ICpkZXYpOwordm9pZCAqY29tZWRpX29wZW4oY29uc3QgY2hhciAqcGF0aCk7CitpbnQgY29tZWRpX2Nsb3NlKHZvaWQgKmRldik7CiAKIC8qIHRoZXNlIGZ1bmN0aW9ucyBtYXkgYmUgY2FsbGVkIGF0IGFueSBwcmlvcml0eSwgYnV0IG1heSBmYWlsIGF0CiAgICByZWFsLXRpbWUgcHJpb3JpdHkgKi8KIAotaW50IGNvbWVkaV9sb2NrKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOwotaW50IGNvbWVkaV91bmxvY2soY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7CitpbnQgY29tZWRpX2xvY2sodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKK2ludCBjb21lZGlfdW5sb2NrKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7CiAKIC8qIHRoZXNlIGZ1bmN0aW9ucyBtYXkgYmUgY2FsbGVkIGF0IGFueSBwcmlvcml0eSwgYnV0IHlvdSBtdXN0IGhvbGQKICAgIHRoZSBsb2NrIGZvciB0aGUgc3ViZGV2aWNlICovCkBAIC01Niw2OCArNTQsNjggQEAKIHZvaWQgY29tZWRpX3BlcnJvcihjb25zdCBjaGFyICpzKTsKIGNoYXIgKmNvbWVkaV9zdHJlcnJvcihpbnQgZXJybnVtKTsKIGludCBjb21lZGlfZXJybm8odm9pZCk7Ci1pbnQgY29tZWRpX2ZpbGVubyhjb21lZGlfdCAqZGV2KTsKK2ludCBjb21lZGlfZmlsZW5vKHZvaWQgKmRldik7CiAKLWludCBjb21lZGlfY2FuY2VsKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOwotaW50IGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAoraW50IGNvbWVkaV9jYW5jZWwodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKK2ludCBjb21lZGlfcmVnaXN0ZXJfY2FsbGJhY2sodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAogCXVuc2lnbmVkIGludCBtYXNrLCBpbnQgKCpjYikgKHVuc2lnbmVkIGludCwgdm9pZCAqKSwgdm9pZCAqYXJnKTsKIAotaW50IGNvbWVkaV9jb21tYW5kKGNvbWVkaV90ICpkZXYsIGNvbWVkaV9jbWQgKmNtZCk7Ci1pbnQgY29tZWRpX2NvbW1hbmRfdGVzdChjb21lZGlfdCAqZGV2LCBjb21lZGlfY21kICpjbWQpOwotaW50IGNvbWVkaV90cmlnZ2VyKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIGNvbWVkaV90cmlnICppdCk7Ci1pbnQgX19jb21lZGlfdHJpZ2dlcihjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCBjb21lZGlfdHJpZyAqaXQpOwotaW50IGNvbWVkaV9kYXRhX3dyaXRlKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAotCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIGxzYW1wbF90IGRhdGEpOwotaW50IGNvbWVkaV9kYXRhX3JlYWQoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCi0JdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwgbHNhbXBsX3QgKmRhdGEpOwotaW50IGNvbWVkaV9kYXRhX3JlYWRfaGludChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAoraW50IGNvbWVkaV9jb21tYW5kKHZvaWQgKmRldiwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitpbnQgY29tZWRpX2NvbW1hbmRfdGVzdCh2b2lkICpkZXYsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworaW50IGNvbWVkaV90cmlnZ2VyKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgc3RydWN0IGNvbWVkaV90cmlnICppdCk7CitpbnQgX19jb21lZGlfdHJpZ2dlcih2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHN0cnVjdCBjb21lZGlfdHJpZyAqaXQpOworaW50IGNvbWVkaV9kYXRhX3dyaXRlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCisJdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwgdW5zaWduZWQgaW50IGRhdGEpOworaW50IGNvbWVkaV9kYXRhX3JlYWQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGNvbWVkaV9kYXRhX3JlYWRfaGludCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCiAJdW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYpOwotaW50IGNvbWVkaV9kYXRhX3JlYWRfZGVsYXllZChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAoraW50IGNvbWVkaV9kYXRhX3JlYWRfZGVsYXllZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCiAJdW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsCi0JbHNhbXBsX3QgKmRhdGEsIHVuc2lnbmVkIGludCBuYW5vX3NlYyk7Ci1pbnQgY29tZWRpX2Rpb19jb25maWcoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCisJdW5zaWduZWQgaW50ICpkYXRhLCB1bnNpZ25lZCBpbnQgbmFub19zZWMpOworaW50IGNvbWVkaV9kaW9fY29uZmlnKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50IGlvKTsKLWludCBjb21lZGlfZGlvX3JlYWQoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCitpbnQgY29tZWRpX2Rpb19yZWFkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50ICp2YWwpOwotaW50IGNvbWVkaV9kaW9fd3JpdGUoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCitpbnQgY29tZWRpX2Rpb193cml0ZSh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAogCXVuc2lnbmVkIGludCB2YWwpOwotaW50IGNvbWVkaV9kaW9fYml0ZmllbGQoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IG1hc2ssCitpbnQgY29tZWRpX2Rpb19iaXRmaWVsZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBtYXNrLAogCXVuc2lnbmVkIGludCAqYml0cyk7Ci1pbnQgY29tZWRpX2dldF9uX3N1YmRldmljZXMoY29tZWRpX3QgKmRldik7Ci1pbnQgY29tZWRpX2dldF92ZXJzaW9uX2NvZGUoY29tZWRpX3QgKmRldik7Ci1jb25zdCBjaGFyICpjb21lZGlfZ2V0X2RyaXZlcl9uYW1lKGNvbWVkaV90ICpkZXYpOwotY29uc3QgY2hhciAqY29tZWRpX2dldF9ib2FyZF9uYW1lKGNvbWVkaV90ICpkZXYpOwotaW50IGNvbWVkaV9nZXRfc3ViZGV2aWNlX3R5cGUoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1pbnQgY29tZWRpX2ZpbmRfc3ViZGV2aWNlX2J5X3R5cGUoY29tZWRpX3QgKmRldiwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdWJkKTsKLWludCBjb21lZGlfZ2V0X25fY2hhbm5lbHMoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1sc2FtcGxfdCBjb21lZGlfZ2V0X21heGRhdGEoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQKK2ludCBjb21lZGlfZ2V0X25fc3ViZGV2aWNlcyh2b2lkICpkZXYpOworaW50IGNvbWVkaV9nZXRfdmVyc2lvbl9jb2RlKHZvaWQgKmRldik7Citjb25zdCBjaGFyICpjb21lZGlfZ2V0X2RyaXZlcl9uYW1lKHZvaWQgKmRldik7Citjb25zdCBjaGFyICpjb21lZGlfZ2V0X2JvYXJkX25hbWUodm9pZCAqZGV2KTsKK2ludCBjb21lZGlfZ2V0X3N1YmRldmljZV90eXBlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CitpbnQgY29tZWRpX2ZpbmRfc3ViZGV2aWNlX2J5X3R5cGUodm9pZCAqZGV2LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN1YmQpOworaW50IGNvbWVkaV9nZXRfbl9jaGFubmVscyh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwordW5zaWduZWQgaW50IGNvbWVkaV9nZXRfbWF4ZGF0YSh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkCiAJaW50IGNoYW4pOwotaW50IGNvbWVkaV9nZXRfbl9yYW5nZXMoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50CitpbnQgY29tZWRpX2dldF9uX3Jhbmdlcyh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludAogCWNoYW4pOwotaW50IGNvbWVkaV9kb19pbnNuKGNvbWVkaV90ICpkZXYsIGNvbWVkaV9pbnNuICppbnNuKTsKLWludCBjb21lZGlfcG9sbChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKK2ludCBjb21lZGlfZG9faW5zbih2b2lkICpkZXYsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbik7CitpbnQgY29tZWRpX3BvbGwodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKIAogLyogREVQUkVDQVRFRCBmdW5jdGlvbnMgKi8KLWludCBjb21lZGlfZ2V0X3JhbmdldHlwZShjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAoraW50IGNvbWVkaV9nZXRfcmFuZ2V0eXBlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgY2hhbik7CiAKIC8qIEFMUEhBIGZ1bmN0aW9ucyAqLwotdW5zaWduZWQgaW50IGNvbWVkaV9nZXRfc3ViZGV2aWNlX2ZsYWdzKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwotaW50IGNvbWVkaV9nZXRfbGVuX2NoYW5saXN0KGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwotaW50IGNvbWVkaV9nZXRfa3JhbmdlKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludAotCWNoYW4sIHVuc2lnbmVkIGludCByYW5nZSwgY29tZWRpX2tyYW5nZSAqa3JhbmdlKTsKLXVuc2lnbmVkIGludCBjb21lZGlfZ2V0X2J1Zl9oZWFkX3Bvcyhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKLWludCBjb21lZGlfc2V0X3VzZXJfaW50X2NvdW50KGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCit1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfZmxhZ3Modm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKK2ludCBjb21lZGlfZ2V0X2xlbl9jaGFubGlzdCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOworaW50IGNvbWVkaV9nZXRfa3JhbmdlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50CisJY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCBzdHJ1Y3QgY29tZWRpX2tyYW5nZSAqa3JhbmdlKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfZ2V0X2J1Zl9oZWFkX3Bvcyh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOworaW50IGNvbWVkaV9zZXRfdXNlcl9pbnRfY291bnQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAogCXVuc2lnbmVkIGludCBidWZfdXNlcl9jb3VudCk7Ci1pbnQgY29tZWRpX21hcChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB2b2lkICpwdHIpOwotaW50IGNvbWVkaV91bm1hcChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKLWludCBjb21lZGlfZ2V0X2J1ZmZlcl9zaXplKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOwotaW50IGNvbWVkaV9tYXJrX2J1ZmZlcl9yZWFkKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX21hcCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHZvaWQgKnB0cik7CitpbnQgY29tZWRpX3VubWFwKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7CitpbnQgY29tZWRpX2dldF9idWZmZXJfc2l6ZSh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOworaW50IGNvbWVkaV9tYXJrX2J1ZmZlcl9yZWFkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKLWludCBjb21lZGlfbWFya19idWZmZXJfd3JpdHRlbihjb21lZGlfdCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK2ludCBjb21lZGlfbWFya19idWZmZXJfd3JpdHRlbih2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAogCXVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwotaW50IGNvbWVkaV9nZXRfYnVmZmVyX2NvbnRlbnRzKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwotaW50IGNvbWVkaV9nZXRfYnVmZmVyX29mZnNldChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKK2ludCBjb21lZGlfZ2V0X2J1ZmZlcl9jb250ZW50cyh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOworaW50IGNvbWVkaV9nZXRfYnVmZmVyX29mZnNldCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwogCiAjZWxzZQogCkBAIC0xMzksMTQgKzEzNywxNCBAQAogaW50IGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXYsCiAJdW5zaWduZWQgaW50IG1hc2ssIGludCAoKmNiKSAodW5zaWduZWQgaW50LCB2b2lkICopLCB2b2lkICphcmcpOwogCi1pbnQgY29tZWRpX2NvbW1hbmQodW5zaWduZWQgaW50IG1pbm9yLCBjb21lZGlfY21kICpjbWQpOwotaW50IGNvbWVkaV9jb21tYW5kX3Rlc3QodW5zaWduZWQgaW50IG1pbm9yLCBjb21lZGlfY21kICpjbWQpOwotaW50IGNvbWVkaV90cmlnZ2VyKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldiwgY29tZWRpX3RyaWcgKml0KTsKLWludCBfX2NvbWVkaV90cmlnZ2VyKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldiwgY29tZWRpX3RyaWcgKml0KTsKK2ludCBjb21lZGlfY29tbWFuZCh1bnNpZ25lZCBpbnQgbWlub3IsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworaW50IGNvbWVkaV9jb21tYW5kX3Rlc3QodW5zaWduZWQgaW50IG1pbm9yLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKK2ludCBjb21lZGlfdHJpZ2dlcih1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXYsIHN0cnVjdCBjb21lZGlfdHJpZyAqaXQpOworaW50IF9fY29tZWRpX3RyaWdnZXIodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2LCBzdHJ1Y3QgY29tZWRpX3RyaWcgKml0KTsKIGludCBjb21lZGlfZGF0YV93cml0ZSh1bnNpZ25lZCBpbnQgZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCBsc2FtcGxfdCBkYXRhKTsKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgZGF0YSk7CiBpbnQgY29tZWRpX2RhdGFfcmVhZCh1bnNpZ25lZCBpbnQgZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCBsc2FtcGxfdCAqZGF0YSk7CisJdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIGludCBjb21lZGlfZGlvX2NvbmZpZyh1bnNpZ25lZCBpbnQgZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKIAl1bnNpZ25lZCBpbnQgaW8pOwogaW50IGNvbWVkaV9kaW9fcmVhZCh1bnNpZ25lZCBpbnQgZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKQEAgLTE2MywxMSArMTYxLDExIEBACiBpbnQgY29tZWRpX2ZpbmRfc3ViZGV2aWNlX2J5X3R5cGUodW5zaWduZWQgaW50IG1pbm9yLCBpbnQgdHlwZSwKIAl1bnNpZ25lZCBpbnQgc3ViZCk7CiBpbnQgY29tZWRpX2dldF9uX2NoYW5uZWxzKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1sc2FtcGxfdCBjb21lZGlfZ2V0X21heGRhdGEodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZAordW5zaWduZWQgaW50IGNvbWVkaV9nZXRfbWF4ZGF0YSh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkCiAJaW50IGNoYW4pOwogaW50IGNvbWVkaV9nZXRfbl9yYW5nZXModW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZCBpbnQKIAljaGFuKTsKLWludCBjb21lZGlfZG9faW5zbih1bnNpZ25lZCBpbnQgbWlub3IsIGNvbWVkaV9pbnNuICppbnNuKTsKK2ludCBjb21lZGlfZG9faW5zbih1bnNpZ25lZCBpbnQgbWlub3IsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbik7CiBpbnQgY29tZWRpX3BvbGwodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKIAogLyogREVQUkVDQVRFRCBmdW5jdGlvbnMgKi8KQEAgLTE3OSw3ICsxNzcsNyBAQAogCXN1YmRldmljZSk7CiBpbnQgY29tZWRpX2dldF9sZW5fY2hhbmxpc3QodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKIGludCBjb21lZGlfZ2V0X2tyYW5nZSh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludAotCWNoYW4sIHVuc2lnbmVkIGludCByYW5nZSwgY29tZWRpX2tyYW5nZSAqa3JhbmdlKTsKKwljaGFuLCB1bnNpZ25lZCBpbnQgcmFuZ2UsIHN0cnVjdCBjb21lZGlfa3JhbmdlICprcmFuZ2UpOwogdW5zaWduZWQgaW50IGNvbWVkaV9nZXRfYnVmX2hlYWRfcG9zKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50CiAJc3ViZGV2aWNlKTsKIGludCBjb21lZGlfc2V0X3VzZXJfaW50X2NvdW50KHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLmMKaW5kZXggMzZhOTNiOS4uNmUxM2U0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC00NiwyNiArNDcsMjYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLXN0YXRpYyBpbnQgcG9zdGNvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyBpbnQgaW5zbl9yd19lbXVsYXRlX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIHZvaWQgKmNvbWVkaV9yZWNvZ25pemUoY29tZWRpX2RyaXZlciAqIGRyaXYsIGNvbnN0IGNoYXIgKm5hbWUpOwotc3RhdGljIHZvaWQgY29tZWRpX3JlcG9ydF9ib2FyZHMoY29tZWRpX2RyaXZlciAqIGRyaXYpOwotc3RhdGljIGludCBwb2xsX2ludmFsaWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOwotaW50IGNvbWVkaV9idWZfYWxsb2MoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitzdGF0aWMgaW50IHBvc3Rjb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGluc25fcndfZW11bGF0ZV9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyB2b2lkICpjb21lZGlfcmVjb2duaXplKHN0cnVjdCBjb21lZGlfZHJpdmVyICogZHJpdiwgY29uc3QgY2hhciAqbmFtZSk7CitzdGF0aWMgdm9pZCBjb21lZGlfcmVwb3J0X2JvYXJkcyhzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdik7CitzdGF0aWMgaW50IHBvbGxfaW52YWxpZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitpbnQgY29tZWRpX2J1Zl9hbGxvYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKIAotY29tZWRpX2RyaXZlciAqY29tZWRpX2RyaXZlcnM7CitzdHJ1Y3QgY29tZWRpX2RyaXZlciAqY29tZWRpX2RyaXZlcnM7CiAKIGludCBjb21lZGlfbW9kcHJvYmUoaW50IG1pbm9yKQogewogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwX2RldmljZShjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgY2xlYW51cF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJaWYgKGRldi0+c3ViZGV2aWNlcykgewogCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgewpAQCAtODAsMTAgKzgxLDggQEAKIAkJZGV2LT5zdWJkZXZpY2VzID0gTlVMTDsKIAkJZGV2LT5uX3N1YmRldmljZXMgPSAwOwogCX0KLQlpZiAoZGV2LT5wcml2YXRlKSB7Ci0JCWtmcmVlKGRldi0+cHJpdmF0ZSk7Ci0JCWRldi0+cHJpdmF0ZSA9IE5VTEw7Ci0JfQorCWtmcmVlKGRldi0+cHJpdmF0ZSk7CisJZGV2LT5wcml2YXRlID0gTlVMTDsKIAlkZXYtPmRyaXZlciA9IDA7CiAJZGV2LT5ib2FyZF9uYW1lID0gTlVMTDsKIAlkZXYtPmJvYXJkX3B0ciA9IE5VTEw7CkBAIC05Niw3ICs5NSw3IEBACiAJY29tZWRpX3NldF9od19kZXYoZGV2LCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgX19jb21lZGlfZGV2aWNlX2RldGFjaChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgX19jb21lZGlfZGV2aWNlX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWRldi0+YXR0YWNoZWQgPSAwOwogCWlmIChkZXYtPmRyaXZlcikgewpAQCAtMTA3LDE2ICsxMDYsMTYgQEAKIAljbGVhbnVwX2RldmljZShkZXYpOwogfQogCi12b2lkIGNvbWVkaV9kZXZpY2VfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCit2b2lkIGNvbWVkaV9kZXZpY2VfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaWYgKCFkZXYtPmF0dGFjaGVkKQogCQlyZXR1cm47CiAJX19jb21lZGlfZGV2aWNlX2RldGFjaChkZXYpOwogfQogCi1pbnQgY29tZWRpX2RldmljZV9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoraW50IGNvbWVkaV9kZXZpY2VfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQljb21lZGlfZHJpdmVyICpkcml2OworCXN0cnVjdCBjb21lZGlfZHJpdmVyICpkcml2OwogCWludCByZXQ7CiAKIAlpZiAoZGV2LT5hdHRhY2hlZCkKQEAgLTEzOSw3ICsxMzgsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9Ci0JCS8vaW5pdGlhbGl6ZSBkZXYtPmRyaXZlciBoZXJlIHNvIGNvbWVkaV9lcnJvcigpIGNhbiBiZSBjYWxsZWQgZnJvbSBhdHRhY2gKKwkJLyogaW5pdGlhbGl6ZSBkZXYtPmRyaXZlciBoZXJlIHNvIGNvbWVkaV9lcnJvcigpIGNhbiBiZSBjYWxsZWQgZnJvbSBhdHRhY2ggKi8KIAkJZGV2LT5kcml2ZXIgPSBkcml2OwogCQlyZXQgPSBkcml2LT5hdHRhY2goZGV2LCBpdCk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC0xNTAsOCArMTQ5LDggQEAKIAkJZ290byBhdHRhY2hlZDsKIAl9CiAKLQkvLyByZWNvZ25pemUgaGFzIGZhaWxlZCBpZiB3ZSBnZXQgaGVyZQotCS8vIHJlcG9ydCB2YWxpZCBib2FyZCBuYW1lcyBiZWZvcmUgcmV0dXJuaW5nIGVycm9yCisJLyogIHJlY29nbml6ZSBoYXMgZmFpbGVkIGlmIHdlIGdldCBoZXJlICovCisJLyogIHJlcG9ydCB2YWxpZCBib2FyZCBuYW1lcyBiZWZvcmUgcmV0dXJuaW5nIGVycm9yICovCiAJZm9yIChkcml2ID0gY29tZWRpX2RyaXZlcnM7IGRyaXY7IGRyaXYgPSBkcml2LT5uZXh0KSB7CiAJCWlmICghdHJ5X21vZHVsZV9nZXQoZHJpdi0+bW9kdWxlKSkgewogCQkJcHJpbnRrKCJjb21lZGk6IGZhaWxlZCB0byBpbmNyZW1lbnQgbW9kdWxlIGNvdW50XG4iKTsKQEAgLTE4MSw3ICsxODAsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY29tZWRpX2RyaXZlcl9yZWdpc3Rlcihjb21lZGlfZHJpdmVyICogZHJpdmVyKQoraW50IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGNvbWVkaV9kcml2ZXIgKmRyaXZlcikKIHsKIAlkcml2ZXItPm5leHQgPSBjb21lZGlfZHJpdmVyczsKIAljb21lZGlfZHJpdmVycyA9IGRyaXZlcjsKQEAgLTE4OSwxNSArMTg4LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoY29tZWRpX2RyaXZlciAqIGRyaXZlcikKK2ludCBjb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGNvbWVkaV9kcml2ZXIgKmRyaXZlcikKIHsKLQljb21lZGlfZHJpdmVyICpwcmV2OworCXN0cnVjdCBjb21lZGlfZHJpdmVyICpwcmV2OwogCWludCBpOwogCiAJLyogY2hlY2sgZm9yIGRldmljZXMgdXNpbmcgdGhpcyBkcml2ZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ09NRURJX05VTV9CT0FSRF9NSU5PUlM7IGkrKykgewogCQlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8oaSk7Ci0JCWNvbWVkaV9kZXZpY2UgKmRldjsKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKIAogCQlpZihkZXZfZmlsZV9pbmZvID09IE5VTEwpIGNvbnRpbnVlOwogCQlkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CkBAIC0yMjUsMTEgKzIyNCwxMSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHBvc3Rjb25maWcoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgcG9zdGNvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWludCBpOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0JY29tZWRpX2FzeW5jICphc3luYyA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBOVUxMOwogCWludCByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgewpAQCAtMjQ2LDcgKzI0NSw3IEBACiAJCQkJU0RGX0NNRF9XUklURSkpID09IDApOwogCQkJQlVHX09OKCFzLT5kb19jbWR0ZXN0KTsKIAotCQkJYXN5bmMgPSBremFsbG9jKHNpemVvZihjb21lZGlfYXN5bmMpLCBHRlBfS0VSTkVMKTsKKwkJCWFzeW5jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9hc3luYyksIEdGUF9LRVJORUwpOwogCQkJaWYgKGFzeW5jID09IE5VTEwpIHsKIAkJCQlwcmludGsoImZhaWxlZCB0byBhbGxvY2F0ZSBhc3luYyBzdHJ1Y3RcbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwpAQCAtMjk4LDggKzI5Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8vIGdlbmVyaWMgcmVjb2duaXplIGZ1bmN0aW9uIGZvciBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlaXIgc3VwcG9ydGVkIGJvYXJkIG5hbWVzCi12b2lkICpjb21lZGlfcmVjb2duaXplKGNvbWVkaV9kcml2ZXIgKiBkcml2LCBjb25zdCBjaGFyICpuYW1lKQorLyogIGdlbmVyaWMgcmVjb2duaXplIGZ1bmN0aW9uIGZvciBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlaXIgc3VwcG9ydGVkIGJvYXJkIG5hbWVzICovCit2b2lkICpjb21lZGlfcmVjb2duaXplKHN0cnVjdCBjb21lZGlfZHJpdmVyICogZHJpdiwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAl1bnNpZ25lZCBpOwogCWNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lX3B0ciA9IGRyaXYtPmJvYXJkX25hbWU7CkBAIC0zMTQsNyArMzEzLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBjb21lZGlfcmVwb3J0X2JvYXJkcyhjb21lZGlfZHJpdmVyICogZHJpdikKK3ZvaWQgY29tZWRpX3JlcG9ydF9ib2FyZHMoc3RydWN0IGNvbWVkaV9kcml2ZXIgKmRyaXYpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3QgY2hhciAqY29uc3QgKm5hbWVfcHRyOwpAQCAtMzMyLDI4ICszMzEsMjggQEAKIAkJcHJpbnRrKCIgJXNcbiIsIGRyaXYtPmRyaXZlcl9uYW1lKTsKIH0KIAotc3RhdGljIGludCBwb2xsX2ludmFsaWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IHBvbGxfaW52YWxpZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotaW50IGluc25faW52YWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitpbnQgaW5zbl9pbnZhbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBpbnNuX3J3X2VtdWxhdGVfYml0cyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaW5zbl9yd19lbXVsYXRlX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7Ci0JY29tZWRpX2luc24gbmV3X2luc247CisJc3RydWN0IGNvbWVkaV9pbnNuIG5ld19pbnNuOwogCWludCByZXQ7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYW5uZWxzX3Blcl9iaXRmaWVsZCA9IDMyOwogCiAJdW5zaWduZWQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCWNvbnN0IHVuc2lnbmVkIGJhc2VfYml0ZmllbGRfY2hhbm5lbCA9CiAJCShjaGFuIDwgY2hhbm5lbHNfcGVyX2JpdGZpZWxkKSA/IDAgOiBjaGFuOwotCWxzYW1wbF90IG5ld19kYXRhWzJdOworCXVuc2lnbmVkIGludCBuZXdfZGF0YVsyXTsKIAltZW1zZXQobmV3X2RhdGEsIDAsIHNpemVvZihuZXdfZGF0YSkpOwogCW1lbXNldCgmbmV3X2luc24sIDAsIHNpemVvZihuZXdfaW5zbikpOwogCW5ld19pbnNuLmluc24gPSBJTlNOX0JJVFM7CkBAIC0zODAsNyArMzc5LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2aXJ0X3RvX2t2YShwZ2RfdCAqIHBnZCwgdW5zaWduZWQgbG9uZyBhZHIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZpcnRfdG9fa3ZhKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRyKQogewogCXVuc2lnbmVkIGxvbmcgcmV0ID0gMFVMOwogCXBtZF90ICpwbWQ7CkBAIC00MTMsMTAgKzQxMiwxMCBAQAogCXJldHVybiBrdmE7CiB9CiAKLWludCBjb21lZGlfYnVmX2FsbG9jKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAoraW50IGNvbWVkaV9idWZfYWxsb2Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSkKIHsKLQljb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKIAogCS8qIFJvdW5kIHVwIG5ld19zaXplIHRvIG11bHRpcGxlIG9mIFBBR0VfU0laRSAqLwogCW5ld19zaXplID0gKG5ld19zaXplICsgUEFHRV9TSVpFIC0gMSkgJiBQQUdFX01BU0s7CkBAIC00MjUsNyArNDI0LDcgQEAKIAlpZiAoYXN5bmMtPnByZWFsbG9jX2J1ZiAmJiBhc3luYy0+cHJlYWxsb2NfYnVmc3ogPT0gbmV3X3NpemUpIHsKIAkJcmV0dXJuIDA7CiAJfQotCS8vIGRlYWxsb2NhdGUgb2xkIGJ1ZmZlcgorCS8qICBkZWFsbG9jYXRlIG9sZCBidWZmZXIgKi8KIAlpZiAoYXN5bmMtPnByZWFsbG9jX2J1ZikgewogCQl2dW5tYXAoYXN5bmMtPnByZWFsbG9jX2J1Zik7CiAJCWFzeW5jLT5wcmVhbGxvY19idWYgPSBOVUxMOwpAQCAtNDU0LDcgKzQ1Myw3IEBACiAJCWFzeW5jLT5idWZfcGFnZV9saXN0ID0gTlVMTDsKIAkJYXN5bmMtPm5fYnVmX3BhZ2VzID0gMDsKIAl9Ci0JLy8gYWxsb2NhdGUgbmV3IGJ1ZmZlcgorCS8qICBhbGxvY2F0ZSBuZXcgYnVmZmVyICovCiAJaWYgKG5ld19zaXplKSB7CiAJCXVuc2lnbmVkIGkgPSAwOwogCQl1bnNpZ25lZCBuX3BhZ2VzID0gbmV3X3NpemUgPj4gUEFHRV9TSElGVDsKQEAgLTUzNywxNiArNTM2LDE1IEBACiAKIC8qIG11bmdpbmcgaXMgYXBwbGllZCB0byBkYXRhIGJ5IGNvcmUgYXMgaXQgcGFzc2VzIGJldHdlZW4gdXNlcgogICogYW5kIGtlcm5lbCBzcGFjZSAqLwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfbXVuZ2UoY29tZWRpX2FzeW5jICogYXN5bmMsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpCit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9tdW5nZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gYXN5bmMtPnN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGFzeW5jLT5zdWJkZXZpY2U7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKIAljb25zdCB1bnNpZ25lZCBudW1fc2FtcGxlX2J5dGVzID0gYnl0ZXNfcGVyX3NhbXBsZShzKTsKIAogCWlmIChzLT5tdW5nZSA9PSBOVUxMIHx8IChhc3luYy0+Y21kLmZsYWdzICYgQ01ERl9SQVdEQVRBKSkgewogCQlhc3luYy0+bXVuZ2VfY291bnQgKz0gbnVtX2J5dGVzOwotCQlpZiAoKGludCkoYXN5bmMtPm11bmdlX2NvdW50IC0gYXN5bmMtPmJ1Zl93cml0ZV9jb3VudCkgPiAwKQotCQkJQlVHKCk7CisJCUJVR19PTigoaW50KShhc3luYy0+bXVuZ2VfY291bnQgLSBhc3luYy0+YnVmX3dyaXRlX2NvdW50KSA+IDApOwogCQlyZXR1cm4gbnVtX2J5dGVzOwogCX0KIAkvKiBkb24ndCBtdW5nZSBwYXJ0aWFsIHNhbXBsZXMgKi8KQEAgLTU2Nyw3ICs1NjUsNyBAQAogCQlzLT5tdW5nZShzLT5kZXZpY2UsIHMsIGFzeW5jLT5wcmVhbGxvY19idWYgKyBhc3luYy0+bXVuZ2VfcHRyLAogCQkJYmxvY2tfc2l6ZSwgYXN5bmMtPm11bmdlX2NoYW4pOwogCi0JCXNtcF93bWIoKTsJLy9iYXJyaWVyIGluc3VyZXMgZGF0YSBpcyBtdW5nZWQgaW4gYnVmZmVyIGJlZm9yZSBtdW5nZV9jb3VudCBpcyBpbmNyZW1lbnRlZAorCQlzbXBfd21iKCk7CS8qIGJhcnJpZXIgaW5zdXJlcyBkYXRhIGlzIG11bmdlZCBpbiBidWZmZXIgYmVmb3JlIG11bmdlX2NvdW50IGlzIGluY3JlbWVudGVkICovCiAKIAkJYXN5bmMtPm11bmdlX2NoYW4gKz0gYmxvY2tfc2l6ZSAvIG51bV9zYW1wbGVfYnl0ZXM7CiAJCWFzeW5jLT5tdW5nZV9jaGFuICU9IGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOwpAQCAtNTc2LDEyICs1NzQsMTEgQEAKIAkJYXN5bmMtPm11bmdlX3B0ciAlPSBhc3luYy0+cHJlYWxsb2NfYnVmc3o7CiAJCWNvdW50ICs9IGJsb2NrX3NpemU7CiAJfQotCWlmICgoaW50KShhc3luYy0+bXVuZ2VfY291bnQgLSBhc3luYy0+YnVmX3dyaXRlX2NvdW50KSA+IDApCi0JCUJVRygpOworCUJVR19PTigoaW50KShhc3luYy0+bXVuZ2VfY291bnQgLSBhc3luYy0+YnVmX3dyaXRlX2NvdW50KSA+IDApOwogCXJldHVybiBjb3VudDsKIH0KIAotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfbl9hdmFpbGFibGUoY29tZWRpX2FzeW5jICogYXN5bmMpCit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9uX2F2YWlsYWJsZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKIHsKIAl1bnNpZ25lZCBpbnQgZnJlZV9lbmQ7CiAJdW5zaWduZWQgaW50IG5ieXRlczsKQEAgLTYwMSw3ICs1OTgsNyBAQAogfQogCiAvKiBhbGxvY2F0ZXMgY2h1bmsgZm9yIHRoZSB3cml0ZXIgZnJvbSBmcmVlIGJ1ZmZlciBzcGFjZSAqLwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfYWxsb2MoY29tZWRpX2FzeW5jICogYXN5bmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAl1bnNpZ25lZCBpbnQgZnJlZV9lbmQgPSBhc3luYy0+YnVmX3JlYWRfY291bnQgKyBhc3luYy0+cHJlYWxsb2NfYnVmc3o7CiAKQEAgLTYxNiw3ICs2MTMsNyBAQAogfQogCiAvKiBhbGxvY2F0ZXMgbm90aGluZyB1bmxlc3MgaXQgY2FuIGNvbXBsZXRlbHkgZnVsZmlsbCB0aGUgcmVxdWVzdCAqLwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfYWxsb2Nfc3RyaWN0KGNvbWVkaV9hc3luYyAqIGFzeW5jLAordW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfYWxsb2Nfc3RyaWN0KHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLAogCXVuc2lnbmVkIGludCBuYnl0ZXMpCiB7CiAJdW5zaWduZWQgaW50IGZyZWVfZW5kID0gYXN5bmMtPmJ1Zl9yZWFkX2NvdW50ICsgYXN5bmMtPnByZWFsbG9jX2J1ZnN6OwpAQCAtNjMyLDcgKzYyOSw3IEBACiB9CiAKIC8qIHRyYW5zZmVycyBhIGNodW5rIGZyb20gd3JpdGVyIHRvIGZpbGxlZCBidWZmZXIgc3BhY2UgKi8KLXVuc2lnbmVkIGNvbWVkaV9idWZfd3JpdGVfZnJlZShjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3Vuc2lnbmVkIGNvbWVkaV9idWZfd3JpdGVfZnJlZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAlpZiAoKGludCkoYXN5bmMtPmJ1Zl93cml0ZV9jb3VudCArIG5ieXRlcyAtCiAJCQlhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50KSA+IDApIHsKQEAgLTY1MCw3ICs2NDcsNyBAQAogfQogCiAvKiBhbGxvY2F0ZXMgYSBjaHVuayBmb3IgdGhlIHJlYWRlciBmcm9tIGZpbGxlZCAoYW5kIG11bmdlZCkgYnVmZmVyIHNwYWNlICovCi11bnNpZ25lZCBjb21lZGlfYnVmX3JlYWRfYWxsb2MoY29tZWRpX2FzeW5jICogYXN5bmMsIHVuc2lnbmVkIG5ieXRlcykKK3Vuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9hbGxvYyhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgbmJ5dGVzKQogewogCWlmICgoaW50KShhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQgKyBuYnl0ZXMgLSBhc3luYy0+bXVuZ2VfY291bnQpID4KIAkJMCkgewpAQCAtNjY0LDkgKzY2MSw5IEBACiB9CiAKIC8qIHRyYW5zZmVycyBjb250cm9sIG9mIGEgY2h1bmsgZnJvbSByZWFkZXIgdG8gZnJlZSBidWZmZXIgc3BhY2UgKi8KLXVuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9mcmVlKGNvbWVkaV9hc3luYyAqIGFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQordW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX2ZyZWUoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JLy8gYmFycmllciBpbnN1cmVzIGRhdGEgaGFzIGJlZW4gcmVhZCBvdXQgb2YgYnVmZmVyIGJlZm9yZSByZWFkIGNvdW50IGlzIGluY3JlbWVudGVkCisJLyogIGJhcnJpZXIgaW5zdXJlcyBkYXRhIGhhcyBiZWVuIHJlYWQgb3V0IG9mIGJ1ZmZlciBiZWZvcmUgcmVhZCBjb3VudCBpcyBpbmNyZW1lbnRlZCAqLwogCXNtcF9tYigpOwogCWlmICgoaW50KShhc3luYy0+YnVmX3JlYWRfY291bnQgKyBuYnl0ZXMgLQogCQkJYXN5bmMtPmJ1Zl9yZWFkX2FsbG9jX2NvdW50KSA+IDApIHsKQEAgLTY4MCw3ICs2NzcsNyBAQAogCXJldHVybiBuYnl0ZXM7CiB9CiAKLXZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfdG8oY29tZWRpX2FzeW5jICogYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCit2b2lkIGNvbWVkaV9idWZfbWVtY3B5X3RvKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogCWNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpCiB7CiAJdW5zaWduZWQgaW50IHdyaXRlX3B0ciA9IGFzeW5jLT5idWZfd3JpdGVfcHRyICsgb2Zmc2V0OwpAQCAtNzA1LDcgKzcwMiw3IEBACiAJfQogfQogCi12b2lkIGNvbWVkaV9idWZfbWVtY3B5X2Zyb20oY29tZWRpX2FzeW5jICogYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCit2b2lkIGNvbWVkaV9idWZfbWVtY3B5X2Zyb20oc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJdm9pZCAqZGVzdCwgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAl2b2lkICpzcmM7CkBAIC03MzEsNyArNzI4LDcgQEAKIAl9CiB9CiAKLXVuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUoY29tZWRpX2FzeW5jICogYXN5bmMpCit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQogewogCXVuc2lnbmVkIG51bV9ieXRlczsKIApAQCAtNzQ2LDMyICs3NDMsMzIgQEAKIAlyZXR1cm4gbnVtX2J5dGVzOwogfQogCi1pbnQgY29tZWRpX2J1Zl9nZXQoY29tZWRpX2FzeW5jICogYXN5bmMsIHNhbXBsX3QgKiB4KQoraW50IGNvbWVkaV9idWZfZ2V0KHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCBzaG9ydCAqeCkKIHsKIAl1bnNpZ25lZCBpbnQgbiA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShhc3luYyk7CiAKLQlpZiAobiA8IHNpemVvZihzYW1wbF90KSkKKwlpZiAobiA8IHNpemVvZihzaG9ydCkpCiAJCXJldHVybiAwOwotCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhhc3luYywgc2l6ZW9mKHNhbXBsX3QpKTsKLQkqeCA9ICooc2FtcGxfdCAqKSAoYXN5bmMtPnByZWFsbG9jX2J1ZiArIGFzeW5jLT5idWZfcmVhZF9wdHIpOwotCWNvbWVkaV9idWZfcmVhZF9mcmVlKGFzeW5jLCBzaXplb2Yoc2FtcGxfdCkpOworCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhhc3luYywgc2l6ZW9mKHNob3J0KSk7CisJKnggPSAqKHNob3J0ICopIChhc3luYy0+cHJlYWxsb2NfYnVmICsgYXN5bmMtPmJ1Zl9yZWFkX3B0cik7CisJY29tZWRpX2J1Zl9yZWFkX2ZyZWUoYXN5bmMsIHNpemVvZihzaG9ydCkpOwogCXJldHVybiAxOwogfQogCi1pbnQgY29tZWRpX2J1Zl9wdXQoY29tZWRpX2FzeW5jICogYXN5bmMsIHNhbXBsX3QgeCkKK2ludCBjb21lZGlfYnVmX3B1dChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgc2hvcnQgeCkKIHsKLQl1bnNpZ25lZCBpbnQgbiA9IGNvbWVkaV9idWZfd3JpdGVfYWxsb2Nfc3RyaWN0KGFzeW5jLCBzaXplb2Yoc2FtcGxfdCkpOworCXVuc2lnbmVkIGludCBuID0gY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3QoYXN5bmMsIHNpemVvZihzaG9ydCkpOwogCi0JaWYgKG4gPCBzaXplb2Yoc2FtcGxfdCkpIHsKKwlpZiAobiA8IHNpemVvZihzaG9ydCkpIHsKIAkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7CiAJCXJldHVybiAwOwogCX0KLQkqKHNhbXBsX3QgKikgKGFzeW5jLT5wcmVhbGxvY19idWYgKyBhc3luYy0+YnVmX3dyaXRlX3B0cikgPSB4OwotCWNvbWVkaV9idWZfd3JpdGVfZnJlZShhc3luYywgc2l6ZW9mKHNhbXBsX3QpKTsKKwkqKHNob3J0ICopIChhc3luYy0+cHJlYWxsb2NfYnVmICsgYXN5bmMtPmJ1Zl93cml0ZV9wdHIpID0geDsKKwljb21lZGlfYnVmX3dyaXRlX2ZyZWUoYXN5bmMsIHNpemVvZihzaG9ydCkpOwogCXJldHVybiAxOwogfQogCi12b2lkIGNvbWVkaV9yZXNldF9hc3luY19idWYoY29tZWRpX2FzeW5jICogYXN5bmMpCit2b2lkIGNvbWVkaV9yZXNldF9hc3luY19idWYoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCiB7CiAJYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudCA9IDA7CiAJYXN5bmMtPmJ1Zl93cml0ZV9jb3VudCA9IDA7CkBAIC03OTIsMTQgKzc4OSwyNyBAQAogCiBpbnQgY29tZWRpX2F1dG9fY29uZmlnKHN0cnVjdCBkZXZpY2UgKmhhcmR3YXJlX2RldmljZSwgY29uc3QgY2hhciAqYm9hcmRfbmFtZSwgY29uc3QgaW50ICpvcHRpb25zLCB1bnNpZ25lZCBudW1fb3B0aW9ucykKIHsKLQljb21lZGlfZGV2Y29uZmlnIGl0OworCXN0cnVjdCBjb21lZGlfZGV2Y29uZmlnIGl0OwogCWludCBtaW5vcjsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm87CiAJaW50IHJldHZhbDsKKwl1bnNpZ25lZCAqcHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCWlmICghY29tZWRpX2F1dG9jb25maWcpIHsKKwkJZGV2X3NldF9kcnZkYXRhKGhhcmR3YXJlX2RldmljZSwgTlVMTCk7CisJCXJldHVybiAwOworCX0KIAogCW1pbm9yID0gY29tZWRpX2FsbG9jX2JvYXJkX21pbm9yKGhhcmR3YXJlX2RldmljZSk7CiAJaWYobWlub3IgPCAwKSByZXR1cm4gbWlub3I7Ci0JZGV2X3NldF9kcnZkYXRhKGhhcmR3YXJlX2RldmljZSwgKHZvaWQqKSh1bnNpZ25lZCBsb25nKW1pbm9yKTsKKworCXByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXZhdGVfZGF0YSA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cDsKKwl9CisJKnByaXZhdGVfZGF0YSA9IG1pbm9yOworCWRldl9zZXRfZHJ2ZGF0YShoYXJkd2FyZV9kZXZpY2UsIHByaXZhdGVfZGF0YSk7CiAKIAlkZXZfZmlsZV9pbmZvID0gY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKIApAQCAtODEyLDggKzgyMiwxMSBAQAogCW11dGV4X2xvY2soJmRldl9maWxlX2luZm8tPmRldmljZS0+bXV0ZXgpOwogCXJldHZhbCA9IGNvbWVkaV9kZXZpY2VfYXR0YWNoKGRldl9maWxlX2luZm8tPmRldmljZSwgJml0KTsKIAltdXRleF91bmxvY2soJmRldl9maWxlX2luZm8tPmRldmljZS0+bXV0ZXgpOworCitjbGVhbnVwOgogCWlmKHJldHZhbCA8IDApCiAJeworCQlrZnJlZShwcml2YXRlX2RhdGEpOwogCQljb21lZGlfZnJlZV9ib2FyZF9taW5vcihtaW5vcik7CiAJfQogCXJldHVybiByZXR2YWw7CkBAIC04MjEsMjAgKzgzNCwyMyBAQAogCiB2b2lkIGNvbWVkaV9hdXRvX3VuY29uZmlnKHN0cnVjdCBkZXZpY2UgKmhhcmR3YXJlX2RldmljZSkKIHsKLQl1bnNpZ25lZCBsb25nIG1pbm9yID0gKHVuc2lnbmVkIGxvbmcpZGV2X2dldF9kcnZkYXRhKGhhcmR3YXJlX2RldmljZSk7CisJdW5zaWduZWQgKm1pbm9yID0gKHVuc2lnbmVkICopZGV2X2dldF9kcnZkYXRhKGhhcmR3YXJlX2RldmljZSk7CisJaWYobWlub3IgPT0gTlVMTCkgcmV0dXJuOwogCi0JQlVHX09OKG1pbm9yID49IENPTUVESV9OVU1fQk9BUkRfTUlOT1JTKTsKKwlCVUdfT04oKm1pbm9yID49IENPTUVESV9OVU1fQk9BUkRfTUlOT1JTKTsKIAotCWNvbWVkaV9mcmVlX2JvYXJkX21pbm9yKG1pbm9yKTsKKwljb21lZGlfZnJlZV9ib2FyZF9taW5vcigqbWlub3IpOworCWRldl9zZXRfZHJ2ZGF0YShoYXJkd2FyZV9kZXZpY2UsIE5VTEwpOworCWtmcmVlKG1pbm9yKTsKIH0KIAogaW50IGNvbWVkaV9wY2lfYXV0b19jb25maWcoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwgY29uc3QgY2hhciAqYm9hcmRfbmFtZSkKIHsKIAlpbnQgb3B0aW9uc1syXTsKIAotCS8vIHBjaSBidXMKKwkvKiAgcGNpIGJ1cyAqLwogCW9wdGlvbnNbMF0gPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOwotCS8vIHBjaSBzbG90CisJLyogIHBjaSBzbG90ICovCiAJb3B0aW9uc1sxXSA9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pOwogCiAJcmV0dXJuIGNvbWVkaV9hdXRvX2NvbmZpZygmcGNpZGV2LT5kZXYsIGJvYXJkX25hbWUsIG9wdGlvbnMsIHNpemVvZihvcHRpb25zKSAvIHNpemVvZihvcHRpb25zWzBdKSk7CkBAIC04NDQsMyArODYwLDE2IEBACiB7CiAJY29tZWRpX2F1dG9fdW5jb25maWcoJnBjaWRldi0+ZGV2KTsKIH0KKworaW50IGNvbWVkaV91c2JfYXV0b19jb25maWcoc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiwKKwljb25zdCBjaGFyICpib2FyZF9uYW1lKQoreworCUJVR19PTih1c2JkZXYgPT0gTlVMTCk7CisJcmV0dXJuIGNvbWVkaV9hdXRvX2NvbmZpZygmdXNiZGV2LT5kZXYsIGJvYXJkX25hbWUsIE5VTEwsIDApOworfQorCit2b2lkIGNvbWVkaV91c2JfYXV0b191bmNvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2KQoreworCUJVR19PTih1c2JkZXYgPT0gTlVMTCk7CisJY29tZWRpX2F1dG9fdW5jb25maWcoJnVzYmRldi0+ZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjUzLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YTExYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1My5oCkBAIC0wLDAgKzEsNDIwIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzLzgyNTMuaAorICAgIEhlYWRlciBmaWxlIGZvciA4MjUzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgXzgyNTNfSAorI2RlZmluZSBfODI1M19ICisKKyNpZm5kZWYgQ01EVEVTVAorI2luY2x1ZGUgIi4uL2NvbWVkaS5oIgorI2Vsc2UKKyNpbmNsdWRlICIuLi9jb21lZGkuaCIKKyNlbmRpZgorCisjZGVmaW5lIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIgaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXZfb2xkKGludCBpODI1M19vc2NfYmFzZSwKKwl1bnNpZ25lZCBpbnQgKmQxLCB1bnNpZ25lZCBpbnQgKmQyLCB1bnNpZ25lZCBpbnQgKm5hbm9zZWMsCisJaW50IHJvdW5kX21vZGUpCit7CisJaW50IGRpdmlkZXI7CisJaW50IGRpdjEsIGRpdjI7CisJaW50IGRpdjFfZ2xiLCBkaXYyX2dsYiwgbnNfZ2xiOworCWludCBkaXYxX2x1YiwgZGl2Ml9sdWIsIG5zX2x1YjsKKwlpbnQgbnM7CisKKwlkaXZpZGVyID0gKCpuYW5vc2VjICsgaTgyNTNfb3NjX2Jhc2UgLyAyKSAvIGk4MjUzX29zY19iYXNlOworCisJLyogZmluZCAyIGludGVnZXJzIDE8PXt4LHl9PD02NTUzNiBzdWNoIHRoYXQgeCp5IGlzCisJICAgY2xvc2UgdG8gZGl2aWRlciAqLworCisJZGl2MV9sdWIgPSBkaXYyX2x1YiA9IDA7CisJZGl2MV9nbGIgPSBkaXYyX2dsYiA9IDA7CisKKwluc19nbGIgPSAwOworCW5zX2x1YiA9IDB4ZmZmZmZmZmY7CisKKwlkaXYyID0gMHgxMDAwMDsKKwlmb3IgKGRpdjEgPSBkaXZpZGVyIC8gNjU1MzYgKyAxOyBkaXYxIDwgZGl2MjsgZGl2MSsrKSB7CisJCWRpdjIgPSBkaXZpZGVyIC8gZGl2MTsKKworCQlucyA9IGk4MjUzX29zY19iYXNlICogZGl2MSAqIGRpdjI7CisJCWlmIChucyA8PSAqbmFub3NlYyAmJiBucyA+IG5zX2dsYikgeworCQkJbnNfZ2xiID0gbnM7CisJCQlkaXYxX2dsYiA9IGRpdjE7CisJCQlkaXYyX2dsYiA9IGRpdjI7CisJCX0KKworCQlkaXYyKys7CisJCWlmIChkaXYyIDw9IDY1NTM2KSB7CisJCQlucyA9IGk4MjUzX29zY19iYXNlICogZGl2MSAqIGRpdjI7CisJCQlpZiAobnMgPiAqbmFub3NlYyAmJiBucyA8IG5zX2x1YikgeworCQkJCW5zX2x1YiA9IG5zOworCQkJCWRpdjFfbHViID0gZGl2MTsKKwkJCQlkaXYyX2x1YiA9IGRpdjI7CisJCQl9CisJCX0KKwl9CisKKwkqbmFub3NlYyA9IGRpdjFfbHViICogZGl2Ml9sdWIgKiBpODI1M19vc2NfYmFzZTsKKwkqZDEgPSBkaXYxX2x1YiAmIDB4ZmZmZjsKKwkqZDIgPSBkaXYyX2x1YiAmIDB4ZmZmZjsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyX3Bvd2VyKGludCBpODI1M19vc2NfYmFzZSwKKwl1bnNpZ25lZCBpbnQgKmQxLCB1bnNpZ25lZCBpbnQgKmQyLCB1bnNpZ25lZCBpbnQgKm5hbm9zZWMsCisJaW50IHJvdW5kX21vZGUpCit7CisJaW50IGRpdjEsIGRpdjI7CisJaW50IGJhc2U7CisKKwlmb3IgKGRpdjEgPSAyOyBkaXYxIDw9ICgxIDw8IDE2KTsgZGl2MSA8PD0gMSkgeworCQliYXNlID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxOworCQlyb3VuZF9tb2RlICY9IFRSSUdfUk9VTkRfTUFTSzsKKwkJc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQlkZWZhdWx0OgorCQkJZGl2MiA9ICgqbmFub3NlYyArIGJhc2UgLyAyKSAvIGJhc2U7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQlkaXYyID0gKCpuYW5vc2VjKSAvIGJhc2U7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX1VQOgorCQkJZGl2MiA9ICgqbmFub3NlYyArIGJhc2UgLSAxKSAvIGJhc2U7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGl2MiA8IDIpCisJCQlkaXYyID0gMjsKKwkJaWYgKGRpdjIgPD0gNjU1MzYpIHsKKwkJCSpuYW5vc2VjID0gZGl2MiAqIGJhc2U7CisJCQkqZDEgPSBkaXYxICYgMHhmZmZmOworCQkJKmQyID0gZGl2MiAmIDB4ZmZmZjsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLworCWRpdjEgPSAweDEwMDAwOworCWRpdjIgPSAweDEwMDAwOworCSpuYW5vc2VjID0gZGl2MSAqIGRpdjIgKiBpODI1M19vc2NfYmFzZTsKKwkqZDEgPSBkaXYxICYgMHhmZmZmOworCSpkMiA9IGRpdjIgJiAweGZmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoaW50IGk4MjUzX29zY19iYXNlLAorCXVuc2lnbmVkIGludCAqZDEsIHVuc2lnbmVkIGludCAqZDIsIHVuc2lnbmVkIGludCAqbmFub3NlYywKKwlpbnQgcm91bmRfbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2aWRlcjsKKwl1bnNpZ25lZCBpbnQgZGl2MSwgZGl2MjsKKwl1bnNpZ25lZCBpbnQgZGl2MV9nbGIsIGRpdjJfZ2xiLCBuc19nbGI7CisJdW5zaWduZWQgaW50IGRpdjFfbHViLCBkaXYyX2x1YiwgbnNfbHViOworCXVuc2lnbmVkIGludCBuczsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CisJdW5zaWduZWQgaW50IG5zX2xvdywgbnNfaGlnaDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heF9jb3VudCA9IDB4MTAwMDA7CisJLyogZXhpdCBlYXJseSBpZiBldmVyeXRoaW5nIGlzIGFscmVhZHkgY29ycmVjdCAodGhpcyBjYW4gc2F2ZSB0aW1lCisJICogc2luY2UgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkgZHVyaW5nIGNvbW1hbmQgdGVzdHMKKwkgKiBhbmQgZXhlY3V0aW9uKSAqLworCWRpdjEgPSAqZDEgPyAqZDEgOiBtYXhfY291bnQ7CisJZGl2MiA9ICpkMiA/ICpkMiA6IG1heF9jb3VudDsKKwlkaXZpZGVyID0gZGl2MSAqIGRpdjI7CisJaWYgKGRpdjEgKiBkaXYyICogaTgyNTNfb3NjX2Jhc2UgPT0gKm5hbm9zZWMgJiYKKwkJZGl2MSA+IDEgJiYgZGl2MSA8PSBtYXhfY291bnQgJiYKKwkJZGl2MiA+IDEgJiYgZGl2MiA8PSBtYXhfY291bnQgJiYKKwkJLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCisJCWRpdmlkZXIgPiBkaXYxICYmIGRpdmlkZXIgPiBkaXYyICYmCisJCWRpdmlkZXIgKiBpODI1M19vc2NfYmFzZSA+IGRpdmlkZXIgJiYKKwkJZGl2aWRlciAqIGk4MjUzX29zY19iYXNlID4gaTgyNTNfb3NjX2Jhc2UpIHsKKwkJcmV0dXJuOworCX0KKworCWRpdmlkZXIgPSAqbmFub3NlYyAvIGk4MjUzX29zY19iYXNlOworCisJZGl2MV9sdWIgPSBkaXYyX2x1YiA9IDA7CisJZGl2MV9nbGIgPSBkaXYyX2dsYiA9IDA7CisKKwluc19nbGIgPSAwOworCW5zX2x1YiA9IDB4ZmZmZmZmZmY7CisKKwlkaXYyID0gbWF4X2NvdW50OworCXN0YXJ0ID0gZGl2aWRlciAvIGRpdjI7CisJaWYgKHN0YXJ0IDwgMikKKwkJc3RhcnQgPSAyOworCWZvciAoZGl2MSA9IHN0YXJ0OyBkaXYxIDw9IGRpdmlkZXIgLyBkaXYxICsgMSAmJiBkaXYxIDw9IG1heF9jb3VudDsKKwkJZGl2MSsrKSB7CisJCWZvciAoZGl2MiA9IGRpdmlkZXIgLyBkaXYxOworCQkJZGl2MSAqIGRpdjIgPD0gZGl2aWRlciArIGRpdjEgKyAxICYmIGRpdjIgPD0gbWF4X2NvdW50OworCQkJZGl2MisrKSB7CisJCQlucyA9IGk4MjUzX29zY19iYXNlICogZGl2MSAqIGRpdjI7CisJCQlpZiAobnMgPD0gKm5hbm9zZWMgJiYgbnMgPiBuc19nbGIpIHsKKwkJCQluc19nbGIgPSBuczsKKwkJCQlkaXYxX2dsYiA9IGRpdjE7CisJCQkJZGl2Ml9nbGIgPSBkaXYyOworCQkJfQorCQkJaWYgKG5zID49ICpuYW5vc2VjICYmIG5zIDwgbnNfbHViKSB7CisJCQkJbnNfbHViID0gbnM7CisJCQkJZGl2MV9sdWIgPSBkaXYxOworCQkJCWRpdjJfbHViID0gZGl2MjsKKwkJCX0KKwkJfQorCX0KKworCXJvdW5kX21vZGUgJj0gVFJJR19ST1VORF9NQVNLOworCXN3aXRjaCAocm91bmRfbW9kZSkgeworCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCWRlZmF1bHQ6CisJCW5zX2hpZ2ggPSBkaXYxX2x1YiAqIGRpdjJfbHViICogaTgyNTNfb3NjX2Jhc2U7CisJCW5zX2xvdyA9IGRpdjFfZ2xiICogZGl2Ml9nbGIgKiBpODI1M19vc2NfYmFzZTsKKwkJaWYgKG5zX2hpZ2ggLSAqbmFub3NlYyA8ICpuYW5vc2VjIC0gbnNfbG93KSB7CisJCQlkaXYxID0gZGl2MV9sdWI7CisJCQlkaXYyID0gZGl2Ml9sdWI7CisJCX0gZWxzZSB7CisJCQlkaXYxID0gZGl2MV9nbGI7CisJCQlkaXYyID0gZGl2Ml9nbGI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQlkaXYxID0gZGl2MV9sdWI7CisJCWRpdjIgPSBkaXYyX2x1YjsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCWRpdjEgPSBkaXYxX2dsYjsKKwkJZGl2MiA9IGRpdjJfZ2xiOworCQlicmVhazsKKwl9CisKKwkqbmFub3NlYyA9IGRpdjEgKiBkaXYyICogaTgyNTNfb3NjX2Jhc2U7CisJKmQxID0gZGl2MSAmIDB4ZmZmZjsJLy8gbWFza2luZyBpcyBkb25lIHNpbmNlIGNvdW50ZXIgbWFwcyB6ZXJvIHRvIDB4MTAwMDAKKwkqZDIgPSBkaXYyICYgMHhmZmZmOworCXJldHVybjsKK30KKworI2lmbmRlZiBDTURURVNUCisvKiBpODI1NF9sb2FkIHByb2dyYW1zIDgyNTQgY291bnRlciBjaGlwLiAgSXQgc2hvdWxkIGFsc28gd29yayBmb3IgdGhlIDgyNTMuCisgKiBiYXNlX2FkZHJlc3MgaXMgdGhlIGxvd2VzdCBpbyBhZGRyZXNzIGZvciB0aGUgY2hpcCAodGhlIGFkZHJlc3Mgb2YgY291bnRlciAwKS4KKyAqIGNvdW50ZXJfbnVtYmVyIGlzIHRoZSBjb3VudGVyIHlvdSB3YW50IHRvIGxvYWQgKDAsMSBvciAyKQorICogY291bnQgaXMgdGhlIG51bWJlciB0byBsb2FkIGludG8gdGhlIGNvdW50ZXIuCisgKgorICogWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIG1vZGUgMi4KKyAqCisgKiBVc2UgaTgyNTRfbW1fbG9hZCgpIGlmIHlvdSBib2FyZCB1c2VzIG1lbW9yeS1tYXBwZWQgaW8sIGl0IGlzCisgKiB0aGUgc2FtZSBhcyBpODI1NF9sb2FkKCkgZXhjZXB0IGl0IHVzZXMgd3JpdGViKCkgaW5zdGVhZCBvZiBvdXRiKCkuCisgKgorICogTmVpdGhlciBpODI1NF9sb2FkKCkgb3IgaTgyNTRfcmVhZCgpIGRvIHRoZWlyIGxvYWRpbmcvcmVhZGluZworICogYXRvbWljYWxseS4gIFRoZSAxNiBiaXQgcmVhZC93cml0ZXMgYXJlIHBlcmZvcm1lZCB3aXRoIHR3byBzdWNjZXNzaXZlCisgKiA4IGJpdCByZWFkL3dyaXRlcy4gIFNvIGlmIHR3byBwYXJ0cyBvZiB5b3VyIGRyaXZlciBkbyBhIGxvYWQvcmVhZCBvbgorICogdGhlIHNhbWUgY291bnRlciwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBwcm90ZWN0IHRoZXNlIGZ1bmN0aW9ucworICogd2l0aCBhIHNwaW5sb2NrLgorICoKKyAqIEZNSAorICovCisKKyNkZWZpbmUgaTgyNTRfY29udHJvbF9yZWcJMworCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9sb2FkKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgcmVnc2hpZnQsCisJdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXVuc2lnbmVkIGludCBieXRlOworCisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuIC0xOworCWlmIChjb3VudCA+IDB4ZmZmZikKKwkJcmV0dXJuIC0xOworCWlmIChtb2RlID4gNSkKKwkJcmV0dXJuIC0xOworCWlmICgobW9kZSA9PSAyIHx8IG1vZGUgPT0gMykgJiYgY291bnQgPT0gMSkKKwkJcmV0dXJuIC0xOworCisJYnl0ZSA9IGNvdW50ZXJfbnVtYmVyIDw8IDY7CisJYnl0ZSB8PSAweDMwOwkJLy8gbG9hZCBsb3cgdGhlbiBoaWdoIGJ5dGUKKwlieXRlIHw9IChtb2RlIDw8IDEpOwkvLyBzZXQgY291bnRlciBtb2RlCisJb3V0YihieXRlLCBiYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKwlieXRlID0gY291bnQgJiAweGZmOwkvLyBsc2Igb2YgY291bnRlciB2YWx1ZQorCW91dGIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7CisJYnl0ZSA9IChjb3VudCA+PiA4KSAmIDB4ZmY7CS8vIG1zYiBvZiBjb3VudGVyIHZhbHVlCisJb3V0YihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9tbV9sb2FkKHZvaWQgKmJhc2VfYWRkcmVzcywgdW5zaWduZWQgaW50IHJlZ3NoaWZ0LAorCXVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwgdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKwlpZiAoY291bnQgPiAweGZmZmYpCisJCXJldHVybiAtMTsKKwlpZiAobW9kZSA+IDUpCisJCXJldHVybiAtMTsKKwlpZiAoKG1vZGUgPT0gMiB8fCBtb2RlID09IDMpICYmIGNvdW50ID09IDEpCisJCXJldHVybiAtMTsKKworCWJ5dGUgPSBjb3VudGVyX251bWJlciA8PCA2OworCWJ5dGUgfD0gMHgzMDsJCS8vIGxvYWQgbG93IHRoZW4gaGlnaCBieXRlCisJYnl0ZSB8PSAobW9kZSA8PCAxKTsJLy8gc2V0IGNvdW50ZXIgbW9kZQorCXdyaXRlYihieXRlLCBiYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKwlieXRlID0gY291bnQgJiAweGZmOwkvLyBsc2Igb2YgY291bnRlciB2YWx1ZQorCXdyaXRlYihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKKwlieXRlID0gKGNvdW50ID4+IDgpICYgMHhmZjsJLy8gbXNiIG9mIGNvdW50ZXIgdmFsdWUKKwl3cml0ZWIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJucyAxNiBiaXQgY291bnRlciB2YWx1ZSwgc2hvdWxkIHdvcmsgZm9yIDgyNTMgYWxzby4qLworc3RhdGljIGlubGluZSBpbnQgaTgyNTRfcmVhZCh1bnNpZ25lZCBsb25nIGJhc2VfYWRkcmVzcywgdW5zaWduZWQgaW50IHJlZ3NoaWZ0LAorCXVuc2lnbmVkIGludCBjb3VudGVyX251bWJlcikKK3sKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKwlpbnQgcmV0OworCisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuIC0xOworCisJLy8gbGF0Y2ggY291bnRlcgorCWJ5dGUgPSBjb3VudGVyX251bWJlciA8PCA2OworCW91dGIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGk4MjU0X2NvbnRyb2xfcmVnIDw8IHJlZ3NoaWZ0KSk7CisKKwkvLyByZWFkIGxzYgorCXJldCA9IGluYihiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKKwkvLyByZWFkIG1zYgorCXJldCArPSBpbmIoYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSkgPDwgODsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU0X21tX3JlYWQodm9pZCAqYmFzZV9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgcmVnc2hpZnQsCisJdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyKQoreworCXVuc2lnbmVkIGludCBieXRlOworCWludCByZXQ7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisKKwkvLyBsYXRjaCBjb3VudGVyCisJYnl0ZSA9IGNvdW50ZXJfbnVtYmVyIDw8IDY7CisJd3JpdGViKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChpODI1NF9jb250cm9sX3JlZyA8PCByZWdzaGlmdCkpOworCisJLy8gcmVhZCBsc2IKKwlyZXQgPSByZWFkYihiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKKwkvLyByZWFkIG1zYgorCXJldCArPSByZWFkYihiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKSA8PCA4OworCisJcmV0dXJuIHJldDsKK30KKworLyogTG9hZHMgMTYgYml0IGluaXRpYWwgY291bnRlciB2YWx1ZSwgc2hvdWxkIHdvcmsgZm9yIDgyNTMgYWxzby4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpODI1NF93cml0ZSh1bnNpZ25lZCBsb25nIGJhc2VfYWRkcmVzcywKKwl1bnNpZ25lZCBpbnQgcmVnc2hpZnQsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCBieXRlOworCisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuOworCisJYnl0ZSA9IGNvdW50ICYgMHhmZjsJLy8gbHNiIG9mIGNvdW50ZXIgdmFsdWUKKwlvdXRiKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCWJ5dGUgPSAoY291bnQgPj4gOCkgJiAweGZmOwkvLyBtc2Igb2YgY291bnRlciB2YWx1ZQorCW91dGIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpODI1NF9tbV93cml0ZSh2b2lkICpiYXNlX2FkZHJlc3MsCisJdW5zaWduZWQgaW50IHJlZ3NoaWZ0LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybjsKKworCWJ5dGUgPSBjb3VudCAmIDB4ZmY7CS8vIGxzYiBvZiBjb3VudGVyIHZhbHVlCisJd3JpdGViKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCWJ5dGUgPSAoY291bnQgPj4gOCkgJiAweGZmOwkvLyBtc2Igb2YgY291bnRlciB2YWx1ZQorCXdyaXRlYihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKK30KKworLyogU2V0IGNvdW50ZXIgbW9kZSwgc2hvdWxkIHdvcmsgZm9yIDgyNTMgYWxzby4KKyAqIE5vdGU6IHRoZSAnbW9kZScgdmFsdWUgaXMgZGlmZmVyZW50IHRvIHRoYXQgZm9yIGk4MjU0X2xvYWQoKSBhbmQgY29tZXMKKyAqIGZyb20gdGhlIElOU05fQ09ORklHXzgyNTRfU0VUX01PREUgY29tbWFuZDoKKyAqICAgSTgyNTRfTU9ERTAsIEk4MjU0X01PREUxLCAuLi4sIEk4MjU0X01PREU1CisgKiBPUidlZCB3aXRoOgorICogICBJODI1NF9CQ0QsIEk4MjU0X0JJTkFSWQorICovCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9zZXRfbW9kZSh1bnNpZ25lZCBsb25nIGJhc2VfYWRkcmVzcywKKwl1bnNpZ25lZCBpbnQgcmVnc2hpZnQsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IGJ5dGU7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisJaWYgKG1vZGUgPiAoSTgyNTRfTU9ERTUgfCBJODI1NF9CSU5BUlkpKQorCQlyZXR1cm4gLTE7CisKKwlieXRlID0gY291bnRlcl9udW1iZXIgPDwgNjsKKwlieXRlIHw9IDB4MzA7CQkvLyBsb2FkIGxvdyB0aGVuIGhpZ2ggYnl0ZQorCWJ5dGUgfD0gbW9kZTsJCS8vIHNldCBjb3VudGVyIG1vZGUgYW5kIEJDRHxiaW5hcnkKKwlvdXRiKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChpODI1NF9jb250cm9sX3JlZyA8PCByZWdzaGlmdCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU0X21tX3NldF9tb2RlKHZvaWQgKmJhc2VfYWRkcmVzcywKKwl1bnNpZ25lZCBpbnQgcmVnc2hpZnQsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IGJ5dGU7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisJaWYgKG1vZGUgPiAoSTgyNTRfTU9ERTUgfCBJODI1NF9CSU5BUlkpKQorCQlyZXR1cm4gLTE7CisKKwlieXRlID0gY291bnRlcl9udW1iZXIgPDwgNjsKKwlieXRlIHw9IDB4MzA7CQkvLyBsb2FkIGxvdyB0aGVuIGhpZ2ggYnl0ZQorCWJ5dGUgfD0gbW9kZTsJCS8vIHNldCBjb3VudGVyIG1vZGUgYW5kIEJDRHxiaW5hcnkKKwl3cml0ZWIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGk4MjU0X2NvbnRyb2xfcmVnIDw8IHJlZ3NoaWZ0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTgyNTRfc3RhdHVzKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyKQoreworCW91dGIoMHhFMCB8ICgyIDw8IGNvdW50ZXJfbnVtYmVyKSwKKwkJYmFzZV9hZGRyZXNzICsgKGk4MjU0X2NvbnRyb2xfcmVnIDw8IHJlZ3NoaWZ0KSk7CisJcmV0dXJuIGluYihiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTgyNTRfbW1fc3RhdHVzKHZvaWQgKmJhc2VfYWRkcmVzcywKKwl1bnNpZ25lZCBpbnQgcmVnc2hpZnQsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlcikKK3sKKwl3cml0ZWIoMHhFMCB8ICgyIDw8IGNvdW50ZXJfbnVtYmVyKSwKKwkJYmFzZV9hZGRyZXNzICsgKGk4MjU0X2NvbnRyb2xfcmVnIDw8IHJlZ3NoaWZ0KSk7CisJcmV0dXJuIHJlYWRiKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzY5YzdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTUuYwpAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy84MjU1LmMKKyAgICBEcml2ZXIgZm9yIDgyNTUKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IDgyNTUKK0Rlc2NyaXB0aW9uOiBnZW5lcmljIDgyNTUgc3VwcG9ydAorRGV2aWNlczogW3N0YW5kYXJkXSA4MjU1ICg4MjU1KQorQXV0aG9yOiBkcworU3RhdHVzOiB3b3JrcworVXBkYXRlZDogRnJpLCAgNyBKdW4gMjAwMiAxMjo1Njo0NSAtMDcwMAorCitUaGUgY2xhc3NpYyBpbiBkaWdpdGFsIEkvTy4gIFRoZSA4MjU1IGFwcGVhcnMgaW4gQ29tZWRpIGFzIGEgc2luZ2xlCitkaWdpdGFsIEkvTyBzdWJkZXZpY2Ugd2l0aCAyNCBjaGFubmVscy4gIFRoZSBjaGFubmVsIDAgY29ycmVzcG9uZHMKK3RvIHRoZSA4MjU1J3MgcG9ydCBBLCBiaXQgMDsgY2hhbm5lbCAyMyBjb3JyZXNwb25kcyB0byBwb3J0IEMsIGJpdAorNy4gIERpcmVjdGlvbiBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW4gYmxvY2tzLCB3aXRoIGNoYW5uZWxzIDAtNywKKzgtMTUsIDE2LTE5LCBhbmQgMjAtMjMgbWFraW5nIHVwIHRoZSA0IGJsb2Nrcy4gIFRoZSBvbmx5IDgyNTUgbW9kZQorc3VwcG9ydGVkIGlzIG1vZGUgMC4KKworWW91IHNob3VsZCBlbmFibGUgY29tcGlsYXRpb24gdGhpcyBkcml2ZXIgaWYgeW91IHBsYW4gdG8gdXNlIGEgYm9hcmQKK3RoYXQgaGFzIGFuIDgyNTUgY2hpcC4gIEZvciBtdWx0aWZ1bmN0aW9uIGJvYXJkcywgdGhlIG1haW4gZHJpdmVyIHdpbGwKK2NvbmZpZ3VyZSB0aGUgODI1NSBzdWJkZXZpY2UgYXV0b21hdGljYWxseS4KKworVGhpcyBkcml2ZXIgYWxzbyB3b3JrcyBpbmRlcGVuZGVudGx5IHdpdGggSVNBIGFuZCBQQ0kgY2FyZHMgdGhhdAorZGlyZWN0bHkgbWFwIHRoZSA4MjU1IHJlZ2lzdGVycyB0byBJL08gcG9ydHMsIGluY2x1ZGluZyBjYXJkcyB3aXRoCittdWx0aXBsZSA4MjU1IGNoaXBzLiAgVG8gY29uZmlndXJlIHRoZSBkcml2ZXIgZm9yIHN1Y2ggYSBjYXJkLCB0aGUKK29wdGlvbiBsaXN0IHNob3VsZCBiZSBhIGxpc3Qgb2YgdGhlIEkvTyBwb3J0IGJhc2VzIGZvciBlYWNoIG9mIHRoZQorODI1NSBjaGlwcy4gIEZvciBleGFtcGxlLAorCisgIGNvbWVkaV9jb25maWcgL2Rldi9jb21lZGkwIDgyNTUgMHgyMDAsMHgyMDQsMHgyMDgsMHgyMGMKKworTm90ZSB0aGF0IG1vc3QgUENJIDgyNTUgYm9hcmRzIGRvIE5PVCB3b3JrIHdpdGggdGhpcyBkcml2ZXIsIGFuZAorbmVlZCBhIHNlcGFyYXRlIGRyaXZlciBhcyBhIHdyYXBwZXIuICBGb3IgdGhvc2UgdGhhdCBkbyB3b3JrLCB0aGUKK0kvTyBwb3J0IGJhc2UgYWRkcmVzcyBjYW4gYmUgZm91bmQgaW4gdGhlIG91dHB1dCBvZiAnbHNwY2kgLXYnLgorCisqLworCisvKgorICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFuIGV4cG9ydGVkIHN1YmRldmljZSBmb3IgZHJpdmluZyBhbiA4MjU1LgorCisgICBUbyB1c2UgdGhpcyBzdWJkZXZpY2UgYXMgcGFydCBvZiBhbm90aGVyIGRyaXZlciwgeW91IG5lZWQgdG8KKyAgIHNldCB1cCB0aGUgc3ViZGV2aWNlIGluIHRoZSBhdHRhY2ggZnVuY3Rpb24gb2YgdGhlIGRyaXZlciBieQorICAgY2FsbGluZzoKKworICAgICBzdWJkZXZfODI1NV9pbml0KGRldmljZSwgc3ViZGV2aWNlLCBjYWxsYmFja19mdW5jdGlvbiwgYXJnKQorCisgICBkZXZpY2UgYW5kIHN1YmRldmljZSBhcmUgcG9pbnRlcnMgdG8gdGhlIGRldmljZSBhbmQgc3ViZGV2aWNlCisgICBzdHJ1Y3R1cmVzLiAgY2FsbGJhY2tfZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gcHJvdmlkZSB0aGUKKyAgIGxvdy1sZXZlbCBpbnB1dC9vdXRwdXQgdG8gdGhlIGRldmljZSwgaS5lLiwgYWN0dWFsIHJlZ2lzdGVyCisgICBhY2Nlc3MuICBjYWxsYmFja19mdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiBhcmcKKyAgIGFzIHRoZSBsYXN0IHBhcmFtZXRlci4gIElmIHRoZSA4MjU1IGRldmljZSBpcyBtYXBwZWQgYXMgNAorICAgY29uc2VjdXRpdmUgSS9PIHBvcnRzLCB5b3UgY2FuIHVzZSBOVUxMIGZvciBjYWxsYmFja19mdW5jdGlvbgorICAgYW5kIHRoZSBJL08gcG9ydCBiYXNlIGZvciBhcmcsIGFuZCBhbiBpbnRlcm5hbCBmdW5jdGlvbiB3aWxsCisgICBoYW5kbGUgdGhlIHJlZ2lzdGVyIGFjY2Vzcy4KKworICAgSW4gYWRkaXRpb24sIGlmIHRoZSBtYWluIGRyaXZlciBoYW5kbGVzIGludGVycnVwdHMsIHlvdSBjYW4KKyAgIGVuYWJsZSBjb21tYW5kcyBvbiB0aGUgc3ViZGV2aWNlIGJ5IGNhbGxpbmcgc3ViZGV2XzgyNTVfaW5pdF9pcnEoKQorICAgaW5zdGVhZC4gIFRoZW4sIHdoZW4geW91IGdldCBhbiBpbnRlcnJ1cHQgdGhhdCBpcyBsaWtlbHkgdG8gYmUKKyAgIGZyb20gdGhlIDgyNTUsIHlvdSBzaG91bGQgY2FsbCBzdWJkZXZfODI1NV9pbnRlcnJ1cHQoKSwgd2hpY2gKKyAgIHdpbGwgY29weSB0aGUgbGF0Y2hlZCB2YWx1ZSB0byBhIENvbWVkaSBidWZmZXIuCisgKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgXzgyNTVfU0laRSA0CisKKyNkZWZpbmUgXzgyNTVfREFUQSAwCisjZGVmaW5lIF84MjU1X0NSIDMKKworI2RlZmluZSBDUl9DX0xPX0lPCTB4MDEKKyNkZWZpbmUgQ1JfQl9JTwkJMHgwMgorI2RlZmluZSBDUl9CX01PREUJMHgwNAorI2RlZmluZSBDUl9DX0hJX0lPCTB4MDgKKyNkZWZpbmUgQ1JfQV9JTwkJMHgxMAorI2RlZmluZSBDUl9BX01PREUoYSkJKChhKTw8NSkKKyNkZWZpbmUgQ1JfQ1cJCTB4ODAKKworc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBjYl9hcmc7CisJaW50ICgqY2JfZnVuYykgKGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCWludCBoYXZlX2lycTsKK307CisKKyNkZWZpbmUgQ0FMTEJBQ0tfQVJHCSgoKHN0cnVjdCBzdWJkZXZfODI1NV9zdHJ1Y3QgKilzLT5wcml2YXRlKS0+Y2JfYXJnKQorI2RlZmluZSBDQUxMQkFDS19GVU5DCSgoKHN0cnVjdCBzdWJkZXZfODI1NV9zdHJ1Y3QgKilzLT5wcml2YXRlKS0+Y2JfZnVuYykKKyNkZWZpbmUgc3ViZGV2cHJpdgkoKHN0cnVjdCBzdWJkZXZfODI1NV9zdHJ1Y3QgKilzLT5wcml2YXRlKQorCitzdGF0aWMgaW50IGRldl84MjU1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGV2XzgyNTVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl84MjU1ID0geworICAgICAgZHJpdmVyX25hbWU6IjgyNTUiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRldl84MjU1X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkZXZfODI1NV9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyXzgyNTUpOworCitzdGF0aWMgdm9pZCBkb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKwordm9pZCBzdWJkZXZfODI1NV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXNob3J0IGQ7CisKKwlkID0gQ0FMTEJBQ0tfRlVOQygwLCBfODI1NV9EQVRBLCAwLCBDQUxMQkFDS19BUkcpOworCWQgfD0gKENBTExCQUNLX0ZVTkMoMCwgXzgyNTVfREFUQSArIDEsIDAsIENBTExCQUNLX0FSRykgPDwgOCk7CisKKwljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZCk7CisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVfY2IoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGFyZzsKKworCWlmIChkaXIpIHsKKwkJb3V0YihkYXRhLCBpb2Jhc2UgKyBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGluYihpb2Jhc2UgKyBwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKworCQlpZiAoZGF0YVswXSAmIDB4ZmYpCisJCQlDQUxMQkFDS19GVU5DKDEsIF84MjU1X0RBVEEsIHMtPnN0YXRlICYgMHhmZiwKKwkJCQlDQUxMQkFDS19BUkcpOworCQlpZiAoZGF0YVswXSAmIDB4ZmYwMCkKKwkJCUNBTExCQUNLX0ZVTkMoMSwgXzgyNTVfREFUQSArIDEsIChzLT5zdGF0ZSA+PiA4KSAmIDB4ZmYsCisJCQkJQ0FMTEJBQ0tfQVJHKTsKKwkJaWYgKGRhdGFbMF0gJiAweGZmMDAwMCkKKwkJCUNBTExCQUNLX0ZVTkMoMSwgXzgyNTVfREFUQSArIDIsCisJCQkJKHMtPnN0YXRlID4+IDE2KSAmIDB4ZmYsIENBTExCQUNLX0FSRyk7CisJfQorCisJZGF0YVsxXSA9IENBTExCQUNLX0ZVTkMoMCwgXzgyNTVfREFUQSwgMCwgQ0FMTEJBQ0tfQVJHKTsKKwlkYXRhWzFdIHw9IChDQUxMQkFDS19GVU5DKDAsIF84MjU1X0RBVEEgKyAxLCAwLCBDQUxMQkFDS19BUkcpIDw8IDgpOworCWRhdGFbMV0gfD0gKENBTExCQUNLX0ZVTkMoMCwgXzgyNTVfREFUQSArIDIsIDAsIENBTExCQUNLX0FSRykgPDwgMTYpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAobWFzayAmIDB4MDAwMGZmKSB7CisJCWJpdHMgPSAweDAwMDBmZjsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDAwZmYwMCkgeworCQliaXRzID0gMHgwMGZmMDA7CisJfSBlbHNlIGlmIChtYXNrICYgMHgwZjAwMDApIHsKKwkJYml0cyA9IDB4MGYwMDAwOworCX0gZWxzZSB7CisJCWJpdHMgPSAweGYwMDAwMDsKKwl9CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+Yml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IGJpdHM7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0gKHMtPmlvX2JpdHMgJiBiaXRzKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkb19jb25maWcoZGV2LCBzKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBjb25maWc7CisKKwljb25maWcgPSBDUl9DVzsKKwkvKiAxIGluIGlvX2JpdHMgaW5kaWNhdGVzIG91dHB1dCwgMSBpbiBjb25maWcgaW5kaWNhdGVzIGlucHV0ICovCisJaWYgKCEocy0+aW9fYml0cyAmIDB4MDAwMGZmKSkKKwkJY29uZmlnIHw9IENSX0FfSU87CisJaWYgKCEocy0+aW9fYml0cyAmIDB4MDBmZjAwKSkKKwkJY29uZmlnIHw9IENSX0JfSU87CisJaWYgKCEocy0+aW9fYml0cyAmIDB4MGYwMDAwKSkKKwkJY29uZmlnIHw9IENSX0NfTE9fSU87CisJaWYgKCEocy0+aW9fYml0cyAmIDB4ZjAwMDAwKSkKKwkJY29uZmlnIHw9IENSX0NfSElfSU87CisJQ0FMTEJBQ0tfRlVOQygxLCBfODI1NV9DUiwgY29uZmlnLCBDQUxMQkFDS19BUkcpOworfQorCitzdGF0aWMgaW50IHN1YmRldl84MjU1X2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBzdGVwIDEgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMyAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gMSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCWNtZC0+c3RvcF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNCAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfODI1NV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8qIEZJWE1FICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfODI1NV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8qIEZJWE1FICovCisKKwlyZXR1cm4gMDsKK30KKworaW50IHN1YmRldl84MjU1X2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgKCpjYikgKGludCwKKwkJaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPm1heGRhdGEgPSAxOworCisJcy0+cHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdWJkZXZfODI1NV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMtPnByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJQ0FMTEJBQ0tfQVJHID0gYXJnOworCWlmIChjYiA9PSBOVUxMKSB7CisJCUNBTExCQUNLX0ZVTkMgPSBzdWJkZXZfODI1NV9jYjsKKwl9IGVsc2UgeworCQlDQUxMQkFDS19GVU5DID0gY2I7CisJfQorCXMtPmluc25fYml0cyA9IHN1YmRldl84MjU1X2luc247CisJcy0+aW5zbl9jb25maWcgPSBzdWJkZXZfODI1NV9pbnNuX2NvbmZpZzsKKworCXMtPnN0YXRlID0gMDsKKwlzLT5pb19iaXRzID0gMDsKKwlkb19jb25maWcoZGV2LCBzKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3ViZGV2XzgyNTVfaW5pdF9pcnEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCAoKmNiKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzdWJkZXZfODI1NV9pbml0KGRldiwgcywgY2IsIGFyZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzLT5kb19jbWR0ZXN0ID0gc3ViZGV2XzgyNTVfY21kdGVzdDsKKwlzLT5kb19jbWQgPSBzdWJkZXZfODI1NV9jbWQ7CisJcy0+Y2FuY2VsID0gc3ViZGV2XzgyNTVfY2FuY2VsOworCisJc3ViZGV2cHJpdi0+aGF2ZV9pcnEgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3ViZGV2XzgyNTVfY2xlYW51cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKHMtPnByaXZhdGUpIHsKKwkJaWYgKHN1YmRldnByaXYtPmhhdmVfaXJxKSB7CisJCX0KKworCQlrZnJlZShzLT5wcml2YXRlKTsKKwl9Cit9CisKKy8qCisKKyAgIFN0YXJ0IG9mIHRoZSA4MjU1IHN0YW5kYWxvbmUgZGV2aWNlCisKKyAqLworCitzdGF0aWMgaW50IGRldl84MjU1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiA4MjU1OiIsIGRldi0+bWlub3IpOworCisJZGV2LT5ib2FyZF9uYW1lID0gIjgyNTUiOworCisJZm9yIChpID0gMDsgaSA8IENPTUVESV9OREVWQ09ORk9QVFM7IGkrKykgeworCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1tpXTsKKwkJaWYgKCFpb2Jhc2UpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gMCkgeworCQlwcmludGsoIiBubyBkZXZpY2VzIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIGkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1tpXTsKKworCQlwcmludGsoIiAweCUwNGx4IiwgaW9iYXNlKTsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIF84MjU1X1NJWkUsICI4MjU1IikpIHsKKwkJCXByaW50aygiIChJL08gcG9ydCBjb25mbGljdCkiKTsKKworCQkJZGV2LT5zdWJkZXZpY2VzW2ldLnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0gZWxzZSB7CisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSwgTlVMTCwKKwkJCQlpb2Jhc2UpOworCQl9CisJfQorCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGV2XzgyNTVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlwcmludGsoImNvbWVkaSVkOiA4MjU1OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyBpKyspIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIGk7CisJCWlmIChzLT50eXBlICE9IENPTUVESV9TVUJEX1VOVVNFRCkgeworCQkJaW9iYXNlID0gQ0FMTEJBQ0tfQVJHOworCQkJcmVsZWFzZV9yZWdpb24oaW9iYXNlLCBfODI1NV9TSVpFKTsKKwkJfQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzgyNTVfaW5pdCk7CitFWFBPUlRfU1lNQk9MKHN1YmRldl84MjU1X2luaXRfaXJxKTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzgyNTVfY2xlYW51cCk7CitFWFBPUlRfU1lNQk9MKHN1YmRldl84MjU1X2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzkzMTFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICAgIG1vZHVsZS84MjU1LmgKKyAgICBIZWFkZXIgZmlsZSBmb3IgODI1NQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF84MjU1X0gKKyNkZWZpbmUgXzgyNTVfSAorCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01FRElfODI1NSkgfHwgZGVmaW5lZChDT05GSUdfQ09NRURJXzgyNTVfTU9EVUxFKQorCitpbnQgc3ViZGV2XzgyNTVfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCAoKmNiKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2ludCBzdWJkZXZfODI1NV9pbml0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCAoKmNiKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3ZvaWQgc3ViZGV2XzgyNTVfY2xlYW51cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3ZvaWQgc3ViZGV2XzgyNTVfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBzdWJkZXZfODI1NV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdm9pZCAqeCwgdW5zaWduZWQgbG9uZyB5KQoreworCXByaW50aygiODI1NSBzdXBwb3J0IG5vdCBjb25maWd1cmVkIC0tIGRpc2FibGluZyBzdWJkZXZpY2VcbiIpOworCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3ViZGV2XzgyNTVfY2xlYW51cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9NYWtlZmlsZQppbmRleCBlYjdhNjE1Li4xMmQ2ZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL01ha2VmaWxlCkBAIC04LDEyICs4LDEyMSBAQAogb2JqLSQoQ09ORklHX0NPTUVESSkJCQkrPSBjb21lZGlfcGFycG9ydC5vCiAKICMgQ29tZWRpIFBDSSBkcml2ZXJzCi1vYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBtaXRlLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IDgyNTUubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYWNsNzIyNWIubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYWRkaV9hcGNpXzAzNS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMTAzMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMTUwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMTUxNi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMTU2NC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMTZ4eC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMjAxNi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMjAzMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMjIwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMzAwMS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMzEyMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMzUwMS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfM3h4eC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGxfcGNpNjIwOC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGxfcGNpNzI5Ni5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGxfcGNpNzQzMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGxfcGNpODE2NC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGxfcGNpOTExMS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGxfcGNpOTExOC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZHExMmIubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYWR2X3BjaTE3MTAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYWR2X3BjaTE3MjMubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYWR2X3BjaV9kaW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYWlvX2FpbzEyXzgubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYWlvX2lpcm9fMTYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYW1wbGNfZGlvMjAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFtcGxjX3BjMjM2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFtcGxjX3BjMjYzLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFtcGxjX3BjaTIyNC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhbXBsY19wY2kyMzAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYzZ4ZGlnaW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY2JfcGNpZGFzNjQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY2JfcGNpZGFzLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNiX3BjaWRkYS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjYl9wY2lkaW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY2JfcGNpbWRhcy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjYl9wY2ltZGRhLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNvbWVkaV9ib25kLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNvbWVkaV9wYXJwb3J0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNvbWVkaV90ZXN0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNvbnRlY19wY2lfZGlvLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhcWJvYXJkMjAwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkYXMwOC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkYXMxNm0xLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhczE2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhczE4MDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZGFzNjQwMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkYXM4MDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZG1tMzJhdC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkdDI4MDEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZHQyODExLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGR0MjgxNC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkdDI4MTUubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZHQyODE3Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGR0MjgyeC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkdDMwMDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZmw1MTIubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZ3NjX2hwZGkubwogb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gaWNwX211bHRpLm8KLW9iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG1lX2RhcS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBpaV9wY2kyMGtjLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGpyM19wY2kubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0ga2VfY291bnRlci5vCiBvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBtZTQwMDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbWVfZGFxLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG1pdGUubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbXBjNjI0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG11bHRpcTMubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbmlfNjUyNy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV82NXh4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pXzY2MHgubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbmlfNjcweC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV9hdF9hMjE1MC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV9hdF9hby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV9hdG1pbzE2ZC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV9hdG1pby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV9sYWJwYy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV9wY2lkaW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbmlfcGNpbWlvLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX3Rpb2NtZC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV90aW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsNzExLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbDcyNC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY2w3MjUubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsNzI2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbDczMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY2w4MTIubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsODE2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbDgxOC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY20zNzI0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbTM3MzAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNtYWQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNtZGExMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY21taW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNtdWlvLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBvYy5vCiBvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBydGQ1MjAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcnRpODAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHJ0aTgwMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBzNTI2Lm8KIG9iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHM2MjYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gc2VyaWFsMjAwMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBza2VsLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHNzdl9kbnAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gdW5pb3h4NS5vCisKKyMgQ29tZWRpIFBDTUNJQSBkcml2ZXJzCitvYmotJChDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTKQkrPSBjYl9kYXMxNl9jcy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTKQkrPSBkYXMwOF9jcy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTKQkrPSBuaV9kYXFfNzAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IG5pX2RhcV9kaW8yNC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTKQkrPSBuaV9sYWJwY19jcy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTKQkrPSBuaV9taW9fY3Mubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ01DSUFfRFJJVkVSUykJKz0gcXVhdGVjaF9kYXFwX2NzLm8KIAogIyBDb21lZGkgVVNCIGRyaXZlcnMKIG9iai0kKENPTkZJR19DT01FRElfVVNCX0RSSVZFUlMpCSs9IHVzYmR1eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWNsNzIyNWIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hY2w3MjI1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMTMyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWNsNzIyNWIuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIGNvbWVkaS9kcml2ZXJzL2FjbDcyMjViLmMKKyAqIERyaXZlciBmb3IgQWRsaW5rIE51REFRIEFDTC03MjI1YiBhbmQgY2xvbmVzCisgKiBKb3PDqSBMdWlzIFPDoW5jaGV6CisgKi8KKy8qCitEcml2ZXI6IGFjbDcyMjViCitEZXNjcmlwdGlvbjogQWRsaW5rIE51REFRIEFDTC03MjI1YiAmIGNvbXBhdGlibGVzCitBdXRob3I6IEpvc8OpIEx1aXMgU8OhbmNoZXogKGpzYW5jaGV6dkB0ZWxlbGluZS5lcykKK1N0YXR1czogdGVzdGluZworRGV2aWNlczogW0FkbGlua10gQUNMLTcyMjViIChhY2w3MjI1YiksIFtJQ1BdIFAxNlIxNkRJTyAocDE2cjE2ZGlvKQorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgQUNMNzIyNV9TSVpFICAgOAkvKiBSZXF1aXJlcyA4IGlvcG9ydHMsIGJ1dCBvbmx5IDQgYXJlIHVzZWQgKi8KKyNkZWZpbmUgUDE2UjE2RElPX1NJWkUgNAorI2RlZmluZSBBQ0w3MjI1X1JJT19MTyAwCS8qIFJlbGF5cyBpbnB1dC9vdXRwdXQgbG93IGJ5dGUgKFIwLVI3KSAqLworI2RlZmluZSBBQ0w3MjI1X1JJT19ISSAxCS8qIFJlbGF5cyBpbnB1dC9vdXRwdXQgaGlnaCBieXRlIChSOC1SMTUpICovCisjZGVmaW5lIEFDTDcyMjVfRElfTE8gIDIJLyogRGlnaXRhbCBpbnB1dCBsb3cgYnl0ZSAoREkwLURJNykgKi8KKyNkZWZpbmUgQUNMNzIyNV9ESV9ISSAgMwkvKiBEaWdpdGFsIGlucHV0IGhpZ2ggYnl0ZSAoREk4LURJMTUpICovCisKK3N0YXRpYyBpbnQgYWNsNzIyNWJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBhY2w3MjI1Yl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKK3N0cnVjdCBib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGRyaXZlciBuYW1lCisJaW50IGlvX3JhbmdlOwkJLy8gbGVuIG9mIEkvTyBzcGFjZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0geworCXsiYWNsNzIyNWIiLCBBQ0w3MjI1X1NJWkUsfSwKKwl7InAxNnIxNmRpbyIsIFAxNlIxNkRJT19TSVpFLH0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hY2w3MjI1YiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhY2w3MjI1YiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YWNsNzIyNWJfYXR0YWNoLAorICAgICAgZGV0YWNoOmFjbDcyMjViX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hY2w3MjI1Yik7CisKK3N0YXRpYyBpbnQgYWNsNzIyNWJfZG9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCX0KKwlpZiAoZGF0YVswXSAmIDB4MDBmZikKKwkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSk7CisJaWYgKGRhdGFbMF0gJiAweGZmMDApCisJCW91dGIoKHMtPnN0YXRlID4+IDgpLAorCQkJZGV2LT5pb2Jhc2UgKyAodW5zaWduZWQgbG9uZylzLT5wcml2YXRlICsgMSk7CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhY2w3MjI1Yl9kaV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArICh1bnNpZ25lZCBsb25nKXMtPnByaXZhdGUpIHwKKwkJKGluYihkZXYtPmlvYmFzZSArICh1bnNpZ25lZCBsb25nKXMtPnByaXZhdGUgKyAxKSA8PCA4KTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFjbDcyMjViX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBpb2Jhc2UsIGlvcmFuZ2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpb3JhbmdlID0gdGhpc19ib2FyZC0+aW9fcmFuZ2U7CisJcHJpbnRrKCJjb21lZGklZDogYWNsNzIyNWI6IGJvYXJkPSVzIDB4JTA0eCAiLCBkZXYtPm1pbm9yLAorCQl0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBpb3JhbmdlLCAiYWNsNzIyNWIiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5pcnEgPSAwOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogUmVsYXlzIG91dHB1dHMgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IGFjbDcyMjViX2RvX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilBQ0w3MjI1X1JJT19MTzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIFJlbGF5cyBzdGF0dXMgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IGFjbDcyMjViX2RpX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilBQ0w3MjI1X1JJT19MTzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIElzb2xhdGVkIGRpZ2l0YWwgaW5wdXRzICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5pbnNuX2JpdHMgPSBhY2w3MjI1Yl9kaV9pbnNuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopQUNMNzIyNV9ESV9MTzsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjbDcyMjViX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGFjbDcyMjViOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwXzgyeDU0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwXzgyeDU0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2YWVlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfODJ4NTQuYwpAQCAtMCwwICsxLDEwNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworLyoKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNzEwIDgyWDU0IHRpbWVyIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKi8KKworI2luY2x1ZGUgIkFQQ0kxNzEwXzgyeDU0LmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9Jbml0VGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTW9kZSwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfUmVsb2FkVmFsdWUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9JbnB1dENsb2NrU2VsZWN0aW9uLCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0lucHV0Q2xvY2tMZXZlbCwgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfT3V0cHV0TGV2ZWwsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9IYXJkd2FyZUdhdGVMZXZlbCkKK0lOVCBpX0luc25Db25maWdfSW5pdFRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKK3wKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZSB0aGUgVGltZXIgKGJfVGltZXJOYnIpIG9wZXJhdGluZyBtb2RlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfVGltZXJNb2RlKSBmcm9tIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmUgZm9yIHlvdSBjYWxsIGFueSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiB0aGUgdGltZXIuICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgVGltZXIgbW9kZSBkZXNjcmlwdGlvbiB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wrLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rfAorfHxTZWxlY3RlZCsgICAgICBNb2RlIGRlc2NyaXB0aW9uICAgICAgICt1X1JlbG9hZFZhbHVlIHwgSGFyZHdhcmUgZ2F0ZSBpbnB1dHx8Cit8fCAgbW9kZSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZGVzY3JpcHRpb24gfCAgICAgIGFjdGlvbiAgICAgICAgfHwKK3wrLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rfAorfHwgICAgICAgIHxNb2RlIDAgaXMgdHlwaWNhbGx5IHVzZWQgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGZvciBldmVudCBjb3VudGluZy4gQWZ0ZXIgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dGhlIGluaXRpYWxpc2F0aW9uLCBPVVQgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxpcyBpbml0aWFsbHkgbG93LCBhbmQgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgIDAgICAgfHdpbGwgcmVtYWluIGxvdyB1bnRpbCB0aGUgICAgfFN0YXJ0IGNvdW50aW5nfCAgIEhhcmR3YXJlIGdhdGUgICAgfHwKK3x8ICAgICAgICB8Y291bnRlciByZWFjaGVzIHplcm8uICAgICAgICB8ICAgdmFsdWUgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxPVVQgdGhlbiBnb2VzIGhpZ2ggYW5kICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHJlbWFpbnMgaGlnaCB1bnRpbCBhIG5ldyAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8Y291bnQgaXMgd3JpdHRlbi4gU2VlICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHwiaV9BUENJMTcxMF9Xcml0ZVRpbWVyVmFsdWUiIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3wrLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rfAorfHwgICAgICAgIHxNb2RlIDEgaXMgc2ltaWxhciB0byBtb2RlIDAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGV4Y2VwdCBmb3IgdGhlIGdhdGUgaW5wdXQgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgMSAgICB8YWN0aW9uLiBUaGUgZ2F0ZSBpbnB1dCBpcyBub3R8U3RhcnQgY291bnRpbmd8ICBIYXJkd2FyZSB0cmlnZ2VyICB8fAorfHwgICAgICAgIHx1c2VkIGZvciBlbmFibGVkIG9yIGRpc2FibGVkIHwgICB2YWx1ZSAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHRoZSB0aW1lci4gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8VGhlIGdhdGUgaW5wdXQgaXMgdXNlZCBmb3IgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx0cmlnZ2VyZWQgdGhlIHRpbWVyLiAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3x8ICAgICAgICB8VGhpcyBtb2RlIGZ1bmN0aW9ucyBsaWtlIGEgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxkaXZpZGUtYnktdWxfUmVsb2FkVmFsdWUgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGNvdW50ZXIuIEl0IGlzIHR5cGljYWxseSB1c2VkfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dG8gZ2VuZXJhdGUgYSByZWFsIHRpbWUgY2xvY2t8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxpbnRlcnJ1cHQuIE9VVCB3aWxsIGluaXRpYWxseXwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgIDIgICAgfGJlIGhpZ2ggYWZ0ZXIgdGhlICAgICAgICAgICAgfCAgIERpdmlzaW9uICAgfCAgSGFyZHdhcmUgZ2F0ZSAgICAgfHwKK3x8ICAgICAgICB8aW5pdGlhbGlzYXRpb24uIFdoZW4gdGhlICAgICB8ICAgIGZhY3RvciAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxpbml0aWFsIGNvdW50IGhhcyBkZWNyZW1lbnRlZHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHRvIDEsIE9VVCBnb2VzIGxvdyBmb3Igb25lICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8Q0xLIHB1bGUuIE9VVCB0aGVuIGdvZXMgaGlnaCB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxhZ2FpbiwgdGhlIGNvdW50ZXIgcmVsb2FkcyAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHRoZSBpbml0aWFsIGNvdW50ICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8KHVsX1JlbG9hZFZhbHVlKSBhbmQgdGhlICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxwcm9jZXNzIGlzIHJlcGVhdGVkLiAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfFRoaXMgYWN0aW9uIGNhbiBnZW5lcmF0ZWQgYSAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8aW50ZXJydXB0LiBTZWUgZnVuY3Rpb24gICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHwiaV9BUENJMTcxMF9TZXRCb2FyZEludC0gICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfFJvdXRpbmVYIiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8YW5kICJpX0FQQ0kxNzEwX0VuYWJsZVRpbWVyIiB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE1vZGUgMyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8YmF1ZCByYXRlIGdlbmVyYXRpb24uIFRoaXMgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxtb2RlIGlzIHNpbWlsYXIgdG8gbW9kZSAyICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGV4Y2VwdCBmb3IgdGhlIGR1dHkgY3ljbGUgb2YgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgMyAgICB8T1VULiBPVVQgd2lsbCBpbml0aWFsbHkgYmUgICB8ICBEaXZpc2lvbiAgICB8ICAgSGFyZHdhcmUgZ2F0ZSAgICB8fAorfHwgICAgICAgIHxoaWdoIGFmdGVyIHRoZSBpbml0aWFsaXNhdGlvbnwgICBmYWN0b3IgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfFdoZW4gaGFsZiB0aGUgaW5pdGlhbCBjb3VudCAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8KHVsX1JlbG9hZFZhbHVlKSBoYXMgZXhwaXJlZCx8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxPVVQgZ29lcyBsb3cgZm9yIHRoZSAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHJlbWFpbmRlciBvZiB0aGUgY291bnQuIFRoZSAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8bW9kZSBpcyBwZXJpb2RpYzsgdGhlICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxzZXF1ZW5jZSBhYm92ZSBpcyByZXBlYXRlZCAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGluZGVmaW5pdGVseS4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3wrLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rfAorfHwgICAgICAgIHxPVVQgd2lsbCBiZSBpbml0aWFsbHkgaGlnaCAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGFmdGVyIHRoZSBpbml0aWFsaXNhdGlvbi4gICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8V2hlbiB0aGUgaW5pdGlhbCBjb3VudCAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICA0ICAgIHxleHBpcmVzIE9VVCB3aWxsIGdvIGxvdyBmb3IgIHxTdGFydCBjb3VudGluZ3wgIEhhcmR3YXJlIGdhdGUgICAgIHx8Cit8fCAgICAgICAgfG9uZSBDTEsgcHVsc2UgYW5kIHRoZW4gZ28gICAgfCAgICB2YWx1ZSAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8aGlnaCBhZ2Fpbi4gICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxUaGUgY291bnRpbmcgc2VxdWVuY2VzIGlzICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHRyaWdnZXJlZCBieSB3cml0aW5nIGEgbmV3ICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dmFsdWUuIFNlZSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHwiaV9BUENJMTcxMF9Xcml0ZVRpbWVyVmFsdWUiIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGZ1bmN0aW9uLiBJZiBhIG5ldyBjb3VudCBpcyAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8d3JpdHRlbiBkdXJpbmcgY291bnRpbmcsICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxpdCB3aWxsIGJlIGxvYWRlZCBvbiB0aGUgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfG5leHQgQ0xLIHB1bHNlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3wrLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rfAorfHwgICAgICAgIHxNb2RlIDUgaXMgc2ltaWxhciB0byBtb2RlIDQgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGV4Y2VwdCBmb3IgdGhlIGdhdGUgaW5wdXQgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8YWN0aW9uLiBUaGUgZ2F0ZSBpbnB1dCBpcyBub3R8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICA1ICAgIHx1c2VkIGZvciBlbmFibGVkIG9yIGRpc2FibGVkIHxTdGFydCBjb3VudGluZ3wgIEhhcmR3YXJlIHRyaWdnZXIgIHx8Cit8fCAgICAgICAgfHRoZSB0aW1lci4gVGhlIGdhdGUgaW5wdXQgaXMgfCAgICB2YWx1ZSAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dXNlZCBmb3IgdHJpZ2dlcmVkIHRoZSB0aW1lci58ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIElucHV0IGNsb2NrIHNlbGVjdGlvbiB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICB8Cit8ICB8ICAgICAgIGJfSW5wdXRDbG9ja1NlbGVjdGlvbiAgICB8ICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgfCAgIHwKK3wgIHwgICAgICAgICAgIHBhcmFtZXRlciAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICB8Cit8ICB8ICAgIEFQQ0kxNzEwX1BDSV9CVVNfQ0xPQ0sgICAgICB8IEZvciB0aGUgdGltZXIgaW5wdXQgY2xvY2ssIHRoZSBQQ0kgfCAgIHwKK3wgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYnVzIGNsb2NrIC8gNCBpcyB1c2VkLiBUaGlzIFBDSSBidXN8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbG9jayBjYW4gYmUgMzBNSHogb3IgMzNNSHouIEZvciAgIHwgICB8Cit8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRpbWVyIDAgb25seSB0aGlzIHNlbGVjdGlvbiBhcmUgICAgfCAgIHwKK3wgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICB8Cit8ICB8IEFQQ0kxNzEwXyBGUk9OVF9DT05ORUNUT1JfSU5QVVR8IE9mIHRoZSBmcm9udCBjb25uZWN0b3IgeW91IGhhdmUgdGhlfCAgIHwKK3wgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcG9zc2liaWxpdHkgdG8gaW5qZWN0IGEgaW5wdXQgY2xvY2t8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3IgVGltZXIgMSBvciBUaW1lciAyLiBUaGUgc291cmNlIHwgICB8Cit8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZyb20gdGhpcyBjbG9jayBjYW4gZWF0IHRoZSBvdXRwdXQgfCAgIHwKK3wgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2xvY2sgZnJvbSBUaW1lciAwIG9yIGFueSBvdGhlciAgICB8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbG9jayBzb3VyY2UuICAgICAgICAgICAgICAgICAgICAgIHwgICB8Cit8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgICAgICA6IEhhbmRsZSBvZiBib2FyZCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSS0xNzEwICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAzKSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJOYnIgICAgICAgICAgIDogVGltZXIgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMikgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTW9kZSAgICAgICAgICA6IFRpbWVyIG1vZGUgc2VsZWN0aW9uICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gNSkgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOiBJbnRlcnJ1cHQgb24gdGVybWluYWx8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogSGFyZHdhcmUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyaWdnZXJhYmxlIG9uZS0gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3QgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogUmF0ZSBnZW5lcmF0b3IgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiBTcXVhcmUgd2F2ZSBtb2RlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6IFNvZnR3YXJlIHRyaWdnZXJlZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2JlICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OiBIYXJkd2FyZSB0cmlnZ2VyZWQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9iZSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRpbWVyIG1vZGUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiB0YWJsZS4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfIHVsX1JlbG9hZFZhbHVlICAgICAgICAgOiBTdGFydCBjb3VudGluZyB2YWx1ZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRpdmlzaW9uIGZhY3RvciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRpbWVyIG1vZGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiB0YWJsZS4gICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA6IFNlbGVjdGlvbiBmcm9tIGlucHV0ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgY2xvY2suICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgaW5wdXQgY2xvY2sgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiB0YWJsZS4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9JbnB1dENsb2NrTGV2ZWwgICAgIDogU2VsZWN0aW9uIGZyb20gaW5wdXQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBsZXZlbC4gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBMb3cgYWN0aXZlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnB1dCBpbnZlcnRlZCkgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogSGlnaCBhY3RpdmUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfT3V0cHV0TGV2ZWwsICAgICAgICA6IFNlbGVjdGlvbiBmcm9tIG91dHB1dCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgbGV2ZWwuICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogTG93IGFjdGl2ZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBIaWdoIGFjdGl2ZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPdXRwdXQgaW52ZXJ0ZWQpICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0hhcmR3YXJlR2F0ZUxldmVsICAgOiBTZWxlY3Rpb24gZnJvbSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIGdhdGUgbGV2ZWwuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IExvdyBhY3RpdmUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElucHV0IGludmVydGVkKSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBIaWdoIGFjdGl2ZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdpbGwgbm90IHVzZWQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaGFyZHdhcmUgZ2F0ZSBzZXQgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgdmFsdWUgdG8gMC4KK3xiX01vZHVsTmJyICAgICAgICA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1RpbWVyTmJyCQkgID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWJfVGltZXJNb2RlCQkgID0gKEJZVEUpIGRhdGFbMF07CisJdWxfUmVsb2FkVmFsdWUJICA9IChVTE9ORykgZGF0YVsxXTsKKwliX0lucHV0Q2xvY2tTZWxlY3Rpb24JPShCWVRFKSBkYXRhWzJdOworCWJfSW5wdXRDbG9ja0xldmVsCQk9KEJZVEUpIGRhdGFbM107CisJYl9PdXRwdXRMZXZlbAkJCT0oQllURSkgZGF0YVs0XTsKKwliX0hhcmR3YXJlR2F0ZUxldmVsCQk9KEJZVEUpIGRhdGFbNV07CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGltZXIgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFRpbWVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogSW5wdXQgdGltZXIgY2xvY2sgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBTZWxlY3Rpb24gZnJvbSBpbnB1dCBjbG9jayBsZXZlbCBpcyB3cm9uZyAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTg6IFNlbGVjdGlvbiBmcm9tIG91dHB1dCBjbG9jayBsZXZlbCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtOTogU2VsZWN0aW9uIGZyb20gaGFyZHdhcmUgZ2F0ZSBsZXZlbCBpcyB3cm9uZyAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9UaW1lck5icjsKKwlCWVRFIGJfVGltZXJNb2RlOworCVVMT05HIHVsX1JlbG9hZFZhbHVlOworCUJZVEUgYl9JbnB1dENsb2NrU2VsZWN0aW9uOworCUJZVEUgYl9JbnB1dENsb2NrTGV2ZWw7CisJQllURSBiX091dHB1dExldmVsOworCUJZVEUgYl9IYXJkd2FyZUdhdGVMZXZlbDsKKworCS8vQkVHSU4gSksgMjcuMTAuMjAwMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCURXT1JEIGR3X1Rlc3QgPSAwOworCS8vRU5EIEpLIDI3LjEwLjIwMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9UaW1lck5iciA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwliX1RpbWVyTW9kZSA9IChCWVRFKSBkYXRhWzBdOworCXVsX1JlbG9hZFZhbHVlID0gKFVMT05HKSBkYXRhWzFdOworCWJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9IChCWVRFKSBkYXRhWzJdOworCWJfSW5wdXRDbG9ja0xldmVsID0gKEJZVEUpIGRhdGFbM107CisJYl9PdXRwdXRMZXZlbCA9IChCWVRFKSBkYXRhWzRdOworCWJfSGFyZHdhcmVHYXRlTGV2ZWwgPSAoQllURSkgZGF0YVs1XTsKKworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJLyogVGVzdCBpZiA4Mlg1NCB0aW1lciAqLworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfODJYNTRfVElNRVIpIHsKKwkJCS8qIFRlc3QgdGhlIHRpbWVyIG51bWJlciAqLworCisJCQlpZiAoYl9UaW1lck5iciA8PSAyKSB7CisJCQkJLyogVGVzdCB0aGUgdGltZXIgbW9kZSAqLworCQkJCWlmIChiX1RpbWVyTW9kZSA8PSA1KSB7CisJCQkJCS8vQkVHSU4gSksgMjcuMTAuMjAwMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCQkJCQkvKiBUZXN0IHRlIGltcHV0IGNsb2NrIHNlbGVjdGlvbiAqLworCQkJCQkvKgorCQkJCQkgICBpZiAoKChiX1RpbWVyTmJyID09IDApICYmIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gMCkpIHx8CisJCQkJCSAgICgoYl9UaW1lck5iciAhPSAwKSAmJiAoKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSAwKSB8fCAoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IDEpKSkpCisJCQkJCSAqLworCisJCQkJCWlmICgoKGJfVGltZXJOYnIgPT0gMCkgJiYKKwkJCQkJICAgICAoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwX1BDSV9CVVNfQ0xPQ0spKSB8fAorCQkJCQkgICAgKChiX1RpbWVyTmJyID09IDApICYmCisJCQkJCSAgICAgKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8xME1IWikpIHx8CisJCQkJCSAgICAoKGJfVGltZXJOYnIgIT0gMCkgJiYKKwkJCQkJICAgICAoKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF9QQ0lfQlVTX0NMT0NLKSB8fAorCQkJCQkgICAgICAoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwX0ZST05UX0NPTk5FQ1RPUl9JTlBVVCkgfHwKKwkJCQkJICAgICAgKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8xME1IWikpKSkgeworCQkJCQkJLy9CRUdJTiBKSyAyNy4xMC4yMDAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQlpZiAoKChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMTBNSFopICYmCisJCQkJCQkgICAgICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHgwMDAwRkZGRlVMKSA+PSAweDMxMzEpKSB8fAorCQkJCQkJICAgICAoYl9JbnB1dENsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzEwTUhaKSkgeworCQkJCQkJCS8vRU5EIEpLIDI3LjEwLjIwMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCQkvKiBUZXN0IHRoZSBpbnB1dCBjbG9jayBsZXZlbCBzZWxlY3Rpb24gKi8KKworCQkJCQkJCWlmICgoYl9JbnB1dENsb2NrTGV2ZWwgPT0gMCkgfHwKKwkJCQkJCQkgICAgKGJfSW5wdXRDbG9ja0xldmVsID09IDEpKSB7CisJCQkJCQkJCS8qIFRlc3QgdGhlIG91dHB1dCBjbG9jayBsZXZlbCBzZWxlY3Rpb24gKi8KKwkJCQkJCQkJaWYgKChiX091dHB1dExldmVsID09IDApIHx8IChiX091dHB1dExldmVsID09IDEpKSB7CisJCQkJCQkJCQkvKiBUZXN0IHRoZSBoYXJkd2FyZSBnYXRlIGxldmVsIHNlbGVjdGlvbiAqLworCQkJCQkJCQkJaWYgKChiX0hhcmR3YXJlR2F0ZUxldmVsID09IDApIHx8IChiX0hhcmR3YXJlR2F0ZUxldmVsID09IDEpKSB7CisJCQkJCQkJCQkJLy9CRUdJTiBKSyAyNy4xMC4wMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCQkJCQkJCQkJCS8qIFRlc3QgaWYgdmVyc2lvbiA+IDEuMSBhbmQgY2xvY2sgc2VsZWN0aW9uID0gMTBNSHogKi8KKwkJCQkJCQkJCQlpZiAoKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8xME1IWikgJiYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweDAwMDBGRkZGVUwpID4gMHgzMTMxKSkgeworCQkJCQkJCQkJCQkvKiBUZXN0IGlmIDQwTUh6IHF1YXJ0eiBvbiBib2FyZCAqLworCQkJCQkJCQkJCQlkd19UZXN0ID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgKDE2ICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKSk7CisKKwkJCQkJCQkJCQkJZHdfVGVzdCA9IChkd19UZXN0ID4+IDE2KSAmIDE7CisJCQkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCQkJZHdfVGVzdCA9IDE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJLyogVGVzdCBpZiBkZXRlY3Rpb24gT0sgKi8KKwkJCQkJCQkJCQlpZiAoZHdfVGVzdCA9PSAxKSB7CisJCQkJCQkJCQkJCS8vRU5EIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQkJCS8qIEluaXRpYWxpc2F0aW9uIE9LICovCisJCQkJCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfODJYNTRJbml0ID0gMTsKKworCQkJCQkJCQkJCQkvKiBTYXZlIHRoZSBpbnB1dCBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCQkJCQkJCQkJZGV2cHJpdi0+IHNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9IGJfSW5wdXRDbG9ja1NlbGVjdGlvbjsKKworCQkJCQkJCQkJCQkvKiBTYXZlIHRoZSBpbnB1dCBjbG9jayBsZXZlbCAqLworCQkJCQkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iX0lucHV0Q2xvY2tMZXZlbCA9IH5iX0lucHV0Q2xvY2tMZXZlbCAmIDE7CisKKwkJCQkJCQkJCQkJLyogU2F2ZSB0aGUgb3V0cHV0IGxldmVsICovCisJCQkJCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfT3V0cHV0TGV2ZWwgPSB+Yl9PdXRwdXRMZXZlbCAmIDE7CisKKwkJCQkJCQkJCQkJLyogU2F2ZSB0aGUgZ2F0ZSBsZXZlbCAqLworCQkJCQkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iX0hhcmR3YXJlR2F0ZUxldmVsID0gYl9IYXJkd2FyZUdhdGVMZXZlbDsKKworCQkJCQkJCQkJCQkvKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gd29yZCBhbmQgZGlzYWJsZSB0aGUgdGltZXIgKi8KKwkJCQkJCQkJCQkJLy9CRUdJTiBKSyAyNy4xMC4wMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCQkJCQkJCQkJCQkvKgorCQkJCQkJCQkJCQkgICBkZXZwcml2LT5zX01vZHVsZUluZm8gW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQkgICBzXzgyWDU0TW9kdWxlSW5mby4KKwkJCQkJCQkJCQkJICAgc184Mlg1NFRpbWVySW5mbyAgW2JfVGltZXJOYnJdLgorCQkJCQkJCQkJCQkgICBkd19Db25maWd1cmF0aW9uV29yZCA9IChEV09SRCkgKCgoYl9IYXJkd2FyZUdhdGVMZXZlbCAgICAgICAgIDw8IDApICYgMHgxKSB8CisJCQkJCQkJCQkJCSAgICgoYl9JbnB1dENsb2NrTGV2ZWwgICAgICAgICAgIDw8IDEpICYgMHgyKSB8CisJCQkJCQkJCQkJCSAgICgoKH5iX091dHB1dExldmVsICAgICAgICYgMSkgIDw8IDIpICYgMHg0KSB8CisJCQkJCQkJCQkJCSAgICgoYl9JbnB1dENsb2NrU2VsZWN0aW9uICAgICAgIDw8IDQpICYgMHgxMCkpOworCQkJCQkJCQkJCQkgKi8KKwkJCQkJCQkJCQkJLyogVGVzdCBpZiAxME1IeiBzZWxlY3RlZCAqLworCQkJCQkJCQkJCQlpZiAoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzEwTUhaKSB7CisJCQkJCQkJCQkJCQliX0lucHV0Q2xvY2tTZWxlY3Rpb24gPSAyOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQgPSAoRFdPUkQpKCgoYl9IYXJkd2FyZUdhdGVMZXZlbCA8PCAwKSAmIDB4MSkgfCAoKGJfSW5wdXRDbG9ja0xldmVsIDw8IDEpICYgMHgyKSB8ICgoKH5iX091dHB1dExldmVsICYgMSkgPDwgMikgJiAweDQpIHwgKChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPDwgNCkgJiAweDMwKSk7CisJCQkJCQkJCQkJCS8vRU5EIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzIgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCQkJCS8qIEluaXRpYWxpc2UgdGhlIDgyWDU0IFRpbWVyICovCisJCQkJCQkJCQkJCW91dGwoKERXT1JEKSBiX1RpbWVyTW9kZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCQkJLyogV3JpdGUgdGhlIHJlbG9hZCB2YWx1ZSAqLworCQkJCQkJCQkJCQlvdXRsKHVsX1JlbG9hZFZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDAgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQkJCQkvL0JFR0lOIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQkJfQkvLyBpZiAoZHdfVGVzdCA9PSAxKQorCQkJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJCQkvKiBJbnB1dCB0aW1lciBjbG9jayBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJCQkJCX0JLy8gaWYgKGR3X1Rlc3QgPT0gMSkKKwkJCQkJCQkJCQkvL0VORCBKSyAyNy4xMC4wMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCQkJCQkJCQkJfQkvLyBpZiAoKGJfSGFyZHdhcmVHYXRlTGV2ZWwgPT0gMCkgfHwgKGJfSGFyZHdhcmVHYXRlTGV2ZWwgPT0gMSkpCisJCQkJCQkJCQllbHNlIHsKKwkJCQkJCQkJCQkvKiBTZWxlY3Rpb24gZnJvbSBoYXJkd2FyZSBnYXRlIGxldmVsIGlzIHdyb25nICovCisJCQkJCQkJCQkJRFBSSU5USygiU2VsZWN0aW9uIGZyb20gaGFyZHdhcmUgZ2F0ZSBsZXZlbCBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC05OworCQkJCQkJCQkJfQkvLyBpZiAoKGJfSGFyZHdhcmVHYXRlTGV2ZWwgPT0gMCkgfHwgKGJfSGFyZHdhcmVHYXRlTGV2ZWwgPT0gMSkpCisJCQkJCQkJCX0JLy8gaWYgKChiX091dHB1dExldmVsID09IDApIHx8IChiX091dHB1dExldmVsID09IDEpKQorCQkJCQkJCQllbHNlIHsKKwkJCQkJCQkJCS8qIFNlbGVjdGlvbiBmcm9tIG91dHB1dCBjbG9jayBsZXZlbCBpcyB3cm9uZyAqLworCQkJCQkJCQkJRFBSSU5USygiU2VsZWN0aW9uIGZyb20gb3V0cHV0IGNsb2NrIGxldmVsIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtODsKKwkJCQkJCQkJfQkvLyBpZiAoKGJfT3V0cHV0TGV2ZWwgPT0gMCkgfHwgKGJfT3V0cHV0TGV2ZWwgPT0gMSkpCisJCQkJCQkJfQkvLyBpZiAoKGJfSW5wdXRDbG9ja0xldmVsID09IDApIHx8IChiX0lucHV0Q2xvY2tMZXZlbCA9PSAxKSkKKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJLyogU2VsZWN0aW9uIGZyb20gaW5wdXQgY2xvY2sgbGV2ZWwgaXMgd3JvbmcgKi8KKwkJCQkJCQkJRFBSSU5USygiU2VsZWN0aW9uIGZyb20gaW5wdXQgY2xvY2sgbGV2ZWwgaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQkJfQkvLyBpZiAoKGJfSW5wdXRDbG9ja0xldmVsID09IDApIHx8IChiX0lucHV0Q2xvY2tMZXZlbCA9PSAxKSkKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLyogSW5wdXQgdGltZXIgY2xvY2sgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkJCQkJRFBSSU5USygiSW5wdXQgdGltZXIgY2xvY2sgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBJbnB1dCB0aW1lciBjbG9jayBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCQkJCURQUklOVEsoIklucHV0IHRpbWVyIGNsb2NrIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0KKwkJCQl9CS8vIGlmICgoYl9UaW1lck1vZGUgPj0gMCkgJiYgKGJfVGltZXJNb2RlIDw9IDUpKQorCQkJCWVsc2UgeworCQkJCQkvKiBUaW1lciBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJCQlEUFJJTlRLKCJUaW1lciBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmICgoYl9UaW1lck1vZGUgPj0gMCkgJiYgKGJfVGltZXJNb2RlIDw9IDUpKQorCQkJfQkvLyBpZiAoKGJfVGltZXJOYnIgPj0gMCkgJiYgKGJfVGltZXJOYnIgPD0gMikpCisJCQllbHNlIHsKKwkJCQkvKiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgKi8KKwkJCQlEUFJJTlRLKCJUaW1lciBzZWxlY3Rpb24gd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0JLy8gaWYgKChiX1RpbWVyTmJyID49IDApICYmIChiX1RpbWVyTmJyIDw9IDIpKQorCQl9IGVsc2UgeworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfRW5hYmxlVGltZXIgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1RpbWVyTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW50ZXJydXB0RW5hYmxlKQorSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZVRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRW5hYmxlIE9SIERpc2FibGUgdGhlIFRpbWVyIChiX1RpbWVyTmJyKSBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gWW91IG11c3QgY2FsbGluZyB0aGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRpbWVyIiBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgdGhpcyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gSWYgeW91IGVuYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0LCB0aGUgdGltZXIgfAorfCAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGEgaW50ZXJydXB0IGFmdGVyIHRoZSB0aW1lciB2YWx1ZSByZWFjaCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIHplcm8uIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYInwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0ktMTcxMCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTmJyICAgICAgICA6IFRpbWVyIG51bWJlciB0byBlbmFibGUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMikgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9JbnRlcnJ1cHRFbmFibGUgOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyIGludGVycnVwdC4gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRU5BQkxFIDogICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIHRpbWVyIGludGVycnVwdCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0RJU0FCTEUgOiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0fAoraV9SZXR1cm5WYWx1ZT1pbnNuLT5uOworCWJfTW9kdWxOYnIgICAgICAgID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfVGltZXJOYnIJCSAgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJYl9BY3Rpb25UeXBlICAgICAgPSAoQllURSkgZGF0YVswXTsgLy8gZW5hYmxlIGRpc2FibGUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VGltZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogSW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfRHVtbXlSZWFkOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfVGltZXJOYnI7CisJQllURSBiX0FjdGlvblR5cGU7CisJQllURSBiX0ludGVycnVwdEVuYWJsZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9UaW1lck5iciA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwliX0FjdGlvblR5cGUgPSAoQllURSkgZGF0YVswXTsJLy8gZW5hYmxlIGRpc2FibGUKKworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJLyogVGVzdCBpZiA4Mlg1NCB0aW1lciAqLworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfODJYNTRfVElNRVIpIHsKKwkJCS8qIFRlc3QgdGhlIHRpbWVyIG51bWJlciAqLworCQkJaWYgKGJfVGltZXJOYnIgPD0gMikgeworCQkJCS8qIFRlc3QgaWYgdGltZXIgaW5pdGlhbGlzZWQgKi8KKwkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl84Mlg1NEluaXQgPT0gMSkgeworCisJCQkJCXN3aXRjaCAoYl9BY3Rpb25UeXBlKSB7CisJCQkJCWNhc2UgQVBDSTE3MTBfRU5BQkxFOgorCQkJCQkJYl9JbnRlcnJ1cHRFbmFibGUgPSAoQllURSkgZGF0YVsxXTsKKwkJCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBzZWxlY3Rpb24gKi8KKwkJCQkJCWlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB8fAorCQkJCQkJICAgIChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSkgeworCQkJCQkJCWlmIChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHsKKworCQkJCQkJCQlkd19EdW1teVJlYWQgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQgPSBkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCB8IDB4ODsKKworCQkJCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmR3X0NvbmZpZ3VyYXRpb25Xb3JkLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDMyICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKworCQkJCQkJCX0JLy8gaWYgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkKKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisJCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmR3X0NvbmZpZ3VyYXRpb25Xb3JkID0gZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQgJiAweEY3OworCisJCQkJCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzIgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCS8qIFNhdmUgdGhlIGludGVycnVwdCBmbGFnICovCisJCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgPSBkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uYl9JbnRlcnJ1cHRNYXNrICYgKDB4RkYgLSAoMSA8PCBiX1RpbWVyTmJyKSk7CisJCQkJCQkJfQkvLyBpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKQorCisJCQkJCQkJLyogVGVzdCBpZiBlcnJvciBvY2N1ciAqLworCQkJCQkJCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKwkJCQkJCQkJLyogU2F2ZSB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLmJfSW50ZXJydXB0TWFzayA9IGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgfCAoKDEgJiBiX0ludGVycnVwdEVuYWJsZSkgPDwgYl9UaW1lck5icik7CisKKwkJCQkJCQkJLyogRW5hYmxlIHRoZSB0aW1lciAqLworCQkJCQkJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgNDQgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLyogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkJCQkJCURQUklOVEsoIlxuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgQVBDSTE3MTBfRElTQUJMRToKKwkJCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBmbGFnICovCisJCQkJCQlpZiAoKChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uYl9JbnRlcnJ1cHRNYXNrID4+IGJfVGltZXJOYnIpICYgMSkgPT0gMSkgeworCQkJCQkJCS8qIERpc2FibGUgdGhlIGludGVycnVwdCAqLworCisJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uIGR3X0NvbmZpZ3VyYXRpb25Xb3JkID0gZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQgJiAweEY3OworCisJCQkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAzMiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkvKiBTYXZlIHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgPSBkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uYl9JbnRlcnJ1cHRNYXNrICYgKDB4RkYgLSAoMSA8PCBiX1RpbWVyTmJyKSk7CisJCQkJCQl9CisKKwkJCQkJCS8qIERpc2FibGUgdGhlIHRpbWVyICovCisJCQkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgNDQgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0JLy8gU3dpdGNoIGVuZAorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCQkJRFBSSU5USyAoIlRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgKi8KKwkJCQlEUFJJTlRLKCJUaW1lciBzZWxlY3Rpb24gd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0JLy8gaWYgKChiX1RpbWVyTmJyID49IDApICYmIChiX1RpbWVyTmJyIDw9IDIpKQorCQl9IGVsc2UgeworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfUmVhZEFsbFRpbWVyVmFsdWUgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1RpbWVyVmFsdWVBcnJheSkKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkQWxsVGltZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIGFsbCB0aW1lciB2YWx1ZXMgZnJvbSBzZWxlY3RlZCB0aW1lciAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyBwdWxfVGltZXJWYWx1ZUFycmF5IDogVGltZXIgdmFsdWUgYXJyYXkuICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50IDAgY29udGFpbiB0aGUgdGltZXIgMCB2YWx1ZS4gICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgMSBjb250YWluIHRoZSB0aW1lciAxIHZhbHVlLiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCAyIGNvbnRhaW4gdGhlIHRpbWVyIDIgdmFsdWUuICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGltZXIgMCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VGltZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFRpbWVyIDEgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRpbWVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUaW1lciAyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkQWxsVGltZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfUmVhZFR5cGU7CisJUFVMT05HIHB1bF9UaW1lclZhbHVlQXJyYXk7CisKKwliX01vZHVsTmJyID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9SZWFkVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXB1bF9UaW1lclZhbHVlQXJyYXkgPSAoUFVMT05HKSBkYXRhOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCisJc3dpdGNoIChiX1JlYWRUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9USU1FUl9SRUFESU5URVJSVVBUOgorCisJCWRhdGFbMF0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0uYl9PbGRNb2R1bGVNYXNrOworCQlkYXRhWzFdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZEludGVycnVwdE1hc2s7CisJCWRhdGFbMl0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkQ291bnRlckxhdGNoVmFsdWU7CisKKwkJLyogSW5jcmVtZW50IHRoZSByZWFkIEZJRk8gKi8KKwkJZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWQgPSAoZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWQgKyAxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9USU1FUl9SRUFEQUxMVElNRVI6CisJCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfODJYNTRfVElNRVIpIHsKKwkJCQkvKiBUZXN0IGlmIHRpbWVyIDAgaW5pdXRpYWxpc2VkICovCisJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvWzBdLmJfODJYNTRJbml0ID09IDEpIHsKKwkJCQkJLyogVGVzdCBpZiB0aW1lciAxIGluaXV0aWFsaXNlZCAqLworCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bMV0uYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkJLyogVGVzdCBpZiB0aW1lciAyIGluaXV0aWFsaXNlZCAqLworCQkJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvWzJdLmJfODJYNTRJbml0ID09IDEpIHsKKwkJCQkJCQkvKiBMYXRjaCBhbGwgY291bnRlciAqLworCQkJCQkJCW91dGwoMHgxNywgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCS8qIFJlYWQgdGhlIHRpbWVyIDAgdmFsdWUgKi8KKwkJCQkJCQlwdWxfVGltZXJWYWx1ZUFycmF5WzBdID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCS8qIFJlYWQgdGhlIHRpbWVyIDEgdmFsdWUgKi8KKwkJCQkJCQlwdWxfVGltZXJWYWx1ZUFycmF5WzFdID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCS8qIFJlYWQgdGhlIHRpbWVyIDIgdmFsdWUgKi8KKwkJCQkJCQlwdWxfVGltZXJWYWx1ZUFycmF5WzJdID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgOCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLyogVGltZXIgMiBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkJCQkJRFBSSU5USygiVGltZXIgMiBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBUaW1lciAxIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCQkJCURQUklOVEsoIlRpbWVyIDEgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvblxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaW1lciAwIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCQkJRFBSSU5USygiVGltZXIgMCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKwkJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZVxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCQkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTI7CisJCX0KKworCX0JCQkvLyBFbmQgb2YgU3dpdGNoCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6SU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB3cml0ZSBmdW5jdGlvbnMgZm9yIFRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1RpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX0JpdHNUeXBlOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwliX0JpdHNUeXBlID0gZGF0YVswXTsKKworCXByaW50aygiXG44Mlg1NCIpOworCisJc3dpdGNoIChiX0JpdHNUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9USU1FUl9SRUFEVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1JlYWRUaW1lclZhbHVlKGRldiwKKwkJCQkJCQkgIChCWVRFKUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJCQkJCSAgKEJZVEUpQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJICAoUFVMT05HKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfVElNRVJfR0VUT1VUUFVUTEVWRUw6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldFRpbWVyT3V0cHV0TGV2ZWwoZGV2LAorCQkJCQkJCSAgICAgICAoQllURSlDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCQkJCQkgICAgICAgKEJZVEUpQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJICAgICAgIChQQllURSkgJmRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfVElNRVJfR0VUUFJPR1JFU1NTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldFRpbWVyUHJvZ3Jlc3NTdGF0dXMoZGV2LAorCQkJCQkJCQkgIChCWVRFKUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJCQkJCQkgIChCWVRFKUNSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLAorCQkJCQkJCQkgIChQQllURSkmZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9USU1FUl9XUklURVZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Xcml0ZVRpbWVyVmFsdWUoZGV2LAorCQkJCQkJCSAgIChCWVRFKUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJCQkJCSAgIChCWVRFKUNSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLAorCQkJCQkJCSAgIChVTE9ORylkYXRhWzFdKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiQml0cyBDb25maWcgUGFyYW1ldGVyIFdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xOworCX0KKworCWlmIChpX1JldHVyblZhbHVlID49IDApCisJCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9SZWFkVGltZXJWYWx1ZSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVGltZXJOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9UaW1lclZhbHVlKSAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHRpbWVyIHZhbHVlIGZyb20gc2VsZWN0ZWQgZGlnaXRhbCB0aW1lciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX1RpbWVyTmJyKSBmcm9tIHNlbGVjdGVkIHRpbWVyICBtb2R1bGUgKGJfTW9kdWxOYnIpLiB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciAgICAgICAgOiBUaW1lciBudW1iZXIgdG8gcmVhZCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDIpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gcHVsX1RpbWVyVmFsdWUgICAgOiBUaW1lciB2YWx1ZSAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VGltZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9SZWFkVGltZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJICAgICAgUFVMT05HIHB1bF9UaW1lclZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJLyogVGVzdCBpZiA4Mlg1NCB0aW1lciAqLworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJICAgICBkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCSAgICAgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJLyogVGVzdCB0aGUgdGltZXIgbnVtYmVyICovCisJCQlpZiAoYl9UaW1lck5iciA8PSAyKSB7CisJCQkJLyogVGVzdCBpZiB0aW1lciBpbml0aWFsaXNlZCAqLworCQkJCWlmIChkZXZwcml2LT4KKwkJCQkgICAgc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCSAgICBzXzgyWDU0TW9kdWxlSW5mby4KKwkJCQkgICAgc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS4KKwkJCQkgICAgYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkvKiBMYXRjaCB0aGUgdGltZXIgdmFsdWUgKi8KKwkJCQkJb3V0bCgoMiA8PCBiX1RpbWVyTmJyKSB8IDB4RDAsCisJCQkJCSAgICAgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkgICAgIHVpX0FkZHJlc3MgKyAxMiArCisJCQkJCSAgICAgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCS8qIFJlYWQgdGhlIGNvdW50ZXIgdmFsdWUgKi8KKwkJCQkJKnB1bF9UaW1lclZhbHVlID0KKwkJCQkJICAgIGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgKGJfVGltZXJOYnIgKiA0KSArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlEUFJJTlRLKCJUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogVGltZXIgc2VsZWN0aW9uIHdyb25nICovCisJCQkJRFBSSU5USygiVGltZXIgc2VsZWN0aW9uIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CS8vIGlmICgoYl9UaW1lck5iciA+PSAwKSAmJiAoYl9UaW1lck5iciA8PSAyKSkKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworCS8qCisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX0dldFRpbWVyT3V0cHV0TGV2ZWwgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1lck5iciwgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9PdXRwdXRMZXZlbCkgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgb3V0cHV0IHNpZ25hbCBsZXZlbCAocGJfT3V0cHV0TGV2ZWwpIGZyb20gICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIGRpZ2l0YWwgdGltZXIgKGJfVGltZXJOYnIpIGZyb20gc2VsZWN0ZWQgdGltZXJ8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciAgICAgICAgOiBUaW1lciBudW1iZXIgdG8gdGVzdCAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAyKSAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9PdXRwdXRMZXZlbCAgICAgOiBPdXRwdXQgc2lnbmFsIGxldmVsICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGhlIG91dHB1dCBpcyBsb3cgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVGhlIG91dHB1dCBpcyBoaWdoICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgLTM6IFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgLTU6IFRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICovCisKK0lOVCBpX0FQQ0kxNzEwX0dldFRpbWVyT3V0cHV0TGV2ZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJCQkJICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfVGltZXJOYnIsCisJCQkJICAgUEJZVEUgcGJfT3V0cHV0TGV2ZWwpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1RpbWVyU3RhdHVzOworCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJLyogVGVzdCB0aGUgdGltZXIgbnVtYmVyICovCisJCQlpZiAoYl9UaW1lck5iciA8PSAyKSB7CisJCQkJLyogVGVzdCBpZiB0aW1lciBpbml0aWFsaXNlZCAqLworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iXzgyWDU0SW5pdCA9PSAxKSB7CisJCQkJCS8qIExhdGNoIHRoZSB0aW1lciB2YWx1ZSAqLworCQkJCQlvdXRsKCgyIDw8IGJfVGltZXJOYnIpIHwgMHhFMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkvKiBSZWFkIHRoZSB0aW1lciBzdGF0dXMgKi8KKwkJCQkJZHdfVGltZXJTdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX091dHB1dExldmVsID0gKEJZVEUpICgoKGR3X1RpbWVyU3RhdHVzID4+IDcpICYgMSkgXiBkZXZwcml2LT4gc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl9PdXRwdXRMZXZlbCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlEUFJJTlRLKCJUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogVGltZXIgc2VsZWN0aW9uIHdyb25nICovCisJCQkJRFBSSU5USygiVGltZXIgc2VsZWN0aW9uIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CS8vIGlmICgoYl9UaW1lck5iciA+PSAwKSAmJiAoYl9UaW1lck5iciA8PSAyKSkKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX0dldFRpbWVyUHJvZ3Jlc3NTdGF0dXMgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1lck5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1RpbWVyU3RhdHVzKSAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgcHJvZ3Jlc3Mgc3RhdHVzIChwYl9UaW1lclN0YXR1cykgZnJvbSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgZGlnaXRhbCB0aW1lciAoYl9UaW1lck5icikgZnJvbSBzZWxlY3RlZCB0aW1lcnwKK3wgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSS0xNzEwICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJOYnIgICAgICAgIDogVGltZXIgbnVtYmVyIHRvIHRlc3QgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAyKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfVGltZXJTdGF0dXMgICAgIDogT3V0cHV0IHNpZ25hbCBsZXZlbCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGltZXIgbm90IGluIHByb2dyZXNzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaW1lciBpbiBwcm9ncmVzcyAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0dldFRpbWVyUHJvZ3Jlc3NTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCQkgICAgICBQQllURSBwYl9UaW1lclN0YXR1cykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfVGltZXJTdGF0dXM7CisKKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJCS8qIFRlc3QgaWYgODJYNTQgdGltZXIgKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfODJYNTRfVElNRVIpIHsKKwkJCS8qIFRlc3QgdGhlIHRpbWVyIG51bWJlciAqLworCQkJaWYgKGJfVGltZXJOYnIgPD0gMikgeworCQkJCS8qIFRlc3QgaWYgdGltZXIgaW5pdGlhbGlzZWQgKi8KKwkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkvKiBMYXRjaCB0aGUgdGltZXIgdmFsdWUgKi8KKwkJCQkJb3V0bCgoMiA8PCBiX1RpbWVyTmJyKSB8IDB4RTAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMTIgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJLyogUmVhZCB0aGUgdGltZXIgc3RhdHVzICovCisJCQkJCWR3X1RpbWVyU3RhdHVzID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMTYgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCSpwYl9UaW1lclN0YXR1cyA9IChCWVRFKSAoKGR3X1RpbWVyU3RhdHVzKSA+PiA4KSAmIDE7CisJCQkJCXByaW50aygiUHJvZ3Jlc3NTdGF0dXMgOiAlZCIsICpwYl9UaW1lclN0YXR1cyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgKi8KKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CS8vIGlmICgoYl9UaW1lck5iciA+PSAwKSAmJiAoYl9UaW1lck5iciA8PSAyKSkKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICovCisKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIGlfUmV0dXJuVmFsdWU7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9Xcml0ZVRpbWVyVmFsdWUgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTmJyLCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfV3JpdGVWYWx1ZSkgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSB0aGUgdmFsdWUgKHVsX1dyaXRlVmFsdWUpIGludG8gdGhlIHNlbGVjdGVkIHRpbWVyfAorfCAgICAgICAgICAgICAgICAgICAgIChiX1RpbWVyTmJyKSBmcm9tIHNlbGVjdGVkIHRpbWVyIG1vZHVsZSAoYl9Nb2R1bE5icikuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIGFjdGlvbiBpbiBkZXBlbmQgb2YgdGhlIHRpbWUgbW9kZSBzZWxlY3Rpb24uICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBTZWUgdGltZXIgbW9kZSBkZXNjcmlwdGlvbiB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSS0xNzEwICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJOYnIgICAgICAgIDogVGltZXIgbnVtYmVyIHRvIHdyaXRlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAyKSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfIHVsX1dyaXRlVmFsdWUgICAgICA6IFZhbHVlIHRvIHdyaXRlICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VGltZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9Xcml0ZVRpbWVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJCQkgICAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfVGltZXJOYnIsCisJCQkgICAgICAgVUxPTkcgdWxfV3JpdGVWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJCS8qIFRlc3QgaWYgODJYNTQgdGltZXIgKi8KKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwXzgyWDU0X1RJTUVSKSB7CisJCQkvKiBUZXN0IHRoZSB0aW1lciBudW1iZXIgKi8KKwkJCWlmIChiX1RpbWVyTmJyIDw9IDIpIHsKKwkJCQkvKiBUZXN0IGlmIHRpbWVyIGluaXRpYWxpc2VkICovCisJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfODJYNTRJbml0ID09IDEpIHsKKwkJCQkJLyogV3JpdGUgdGhlIHZhbHVlICovCisJCQkJCW91dGwodWxfV3JpdGVWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIFRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCQkJRFBSSU5USygiVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvblxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAqLworCQkJCURQUklOVEsoIlRpbWVyIHNlbGVjdGlvbiB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQkvLyBpZiAoKGJfVGltZXJOYnIgPj0gMCkgJiYgKGJfVGltZXJOYnIgPD0gMikpCisJCX0gZWxzZSB7CisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQl9CisJfSBlbHNlIHsKKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiBpX1JldHVyblZhbHVlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF84Mng1NC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF84Mng1NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OTdjMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwXzgyeDU0LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF9QQ0lfQlVTX0NMT0NLIAkJCTAKKyNkZWZpbmUgQVBDSTE3MTBfRlJPTlRfQ09OTkVDVE9SX0lOUFVUIAkJMQorI2RlZmluZSBBUENJMTcxMF9USU1FUl9SRUFEVkFMVUUJCTAKKyNkZWZpbmUgQVBDSTE3MTBfVElNRVJfR0VUT1VUUFVUTEVWRUwJCTEKKyNkZWZpbmUgQVBDSTE3MTBfVElNRVJfR0VUUFJPR1JFU1NTVEFUVVMJMgorI2RlZmluZSBBUENJMTcxMF9USU1FUl9XUklURVZBTFVFCQkzCisKKyNkZWZpbmUgQVBDSTE3MTBfVElNRVJfUkVBRElOVEVSUlVQVAkJMQorI2RlZmluZSBBUENJMTcxMF9USU1FUl9SRUFEQUxMVElNRVIJCTIKKworLyogQkVHSU4gSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHogKi8KKyNpZm5kZWYgQVBDSTE3MTBfMTBNSFoKKyNkZWZpbmUgQVBDSTE3MTBfMTBNSFoJMTAKKyNlbmRpZgorLyogRU5EIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6ICovCisKKy8qCisgKiA4Mlg1NCBUSU1FUiBJTklTSUFMSVNBVElPTiBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZVRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiA4Mlg1NCBSRUFEIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkQWxsVGltZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorICogODJYNTQgUkVBRCAmIFdSSVRFIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX1JlYWRUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCSAgICAgIFBVTE9ORyBwdWxfVGltZXJWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldFRpbWVyT3V0cHV0TGV2ZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCQkgICBQQllURSBwYl9PdXRwdXRMZXZlbCk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldFRpbWVyUHJvZ3Jlc3NTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCQkgICAgICBQQllURSBwYl9UaW1lclN0YXR1cyk7CisKKy8qCisgKiA4Mlg1NCBXUklURSBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9Xcml0ZVRpbWVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCSAgICAgICBVTE9ORyB1bF9Xcml0ZVZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0Nocm9uby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNTRkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0Nocm9uby5jCkBAIC0wLDAgKzEsMjAzMiBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUEkgQVBDSTE3MTAgICAgfCBDb21waWxlciA6IGdjYyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IENIUk9OTy5DICAgICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE3MTAgY2hyb25vbWV0ZXIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAyOS8wNi85OCB8IFMuIFdlYmVyICB8IERpZ2l0YWwgaW5wdXQgLyBvdXRwdXQgaW1wbGVtZW50YXRpb24gICAgICAgICAgfAorICB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgIHwgMDgvMDUvMDAgfCBHdWlub3QgQyAgfCAtIDA0MDAvMDIyOCBBbGwgRnVuY3Rpb24gaW4gUklORyAwICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJBUENJMTcxMF9DaHJvbm8uaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX0luaXRDaHJvbm8gICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9DaHJvbm9Nb2RlLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1BDSUlucHV0Q2xvY2ssICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVGltaW5nVW5pdCwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICB1bF9UaW1pbmdJbnRlcnZhbCwgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCkKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBjaHJvbm9tZXRlciBvcGVyYXRpbmcgbW9kZSAoYl9DaHJvbm9Nb2RlKXwKK3wgICAgICAgICAgICAgICAgICAgICBmcm9tIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSB1bF9UaW1pbmdJbnRlcnZhbCBhbmQgdWxfVGltaW5nVW5pdCBkZXRlcm1pbmUgdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGltaW5nIGJhc2UgZm9yIHRoZSBtZWFzdXJlbWVudC4gICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCByZXR1cm4gdGhlIHJlYWwgdGltaW5nICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmUgZm9yIHlvdSBjYWxsICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiB0aGUgY2hyb25vbWV0ZXIuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFdpdGNoIHRoaXMgZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBBUENJLTE3MTAgeW91IGhhdmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIHBvc3NpYmlsaXR5IHRvIG1lYXN1cmUgdGhlIHRpbWluZyB3aXRjaCB0d28gZXZlbnQuIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBtb2RlIDAgYW5kIDEgaXMgYXBwcm9wcmlhdGUgZm9yIHBlcmlvZCBtZWFzdXJlbWVudC58Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZGUgMiBhbmQgMyBpcyBhcHByb3ByaWF0ZSBmb3IgZnJlcXVlbnQgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlbWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBtb2RlIDQgdG8gNyBpcyBhcHByb3ByaWF0ZSBmb3IgbWVhc3VyaW5nIHRoZSB0aW1pbmd8Cit8ICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiAgdHdvIGV2ZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICB8Cit8IEJZVEVfICAgYl9Nb2R1bE5iciAgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgfAorfCBCWVRFXyAgIGJfQ2hyb25vTW9kZQkJCQlkYXRhWzBdICAgIDogQ2hyb25vbWV0ZXIgYWN0aW9uIG1vZGUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byA3KS4gICAgICAgICAgICAgICAgICAgfAorfCBCWVRFXyAgIGJfUENJSW5wdXRDbG9jawkJCWRhdGFbMV0gOiBTZWxlY3Rpb24gZnJvbSBQQ0kgYnVzIGNsb2NrfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfMzBNSFogOiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgUEMgaGF2ZSBhIFBDSSBidXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIGZyb20gMzAgTUh6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfMzNNSFogOiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgUEMgaGF2ZSBhIFBDSSBidXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIGZyb20gMzMgTUh6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfNDBNSFogICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQVBDSS0xNzEwIGhhdmUgYSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVncmF0ZWQgNDBNaHogICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhcnR6LiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWluZ1VuaXQJZGF0YVsyXSAgICA6IEJhc2UgdGltaW5nIHVuaXR5ICgwIHRvIDQpIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IG5zICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogwrVzICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogbXMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBzICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA6IG1uICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgIFVMT05HXyB1bF9UaW1pbmdJbnRlcnZhbCA6IGRhdGFbM10JIEJhc2UgdGltaW5nIHZhbHVlLiAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfICBwdWxfUmVhbFRpbWluZ0ludGVydmFsIDogUmVhbCAgYmFzZSB0aW1pbmcgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KK3wgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDaHJvbm9tZXRlciBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogVGltaW5nIHVuaXR5IHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTg6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aWNoICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC05OiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgQ0hST05PUyB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlVTE9ORyB1bF9UaW1lclZhbHVlID0gMDsKKwlVTE9ORyB1bF9UaW1pbmdJbnRlcnZhbCA9IDA7CisJVUxPTkcgdWxfUmVhbFRpbWluZ0ludGVydmFsID0gMDsKKwlkb3VibGUgZF9SZWFsVGltaW5nSW50ZXJ2YWwgPSAwOworCURXT1JEIGR3X01vZGVBcnJheVs4XSA9CisJCXsgMHgwMSwgMHgwNSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgwRSwgMHgwQSwgMHgwNiB9OworCUJZVEUgYl9Nb2R1bE5iciwgYl9DaHJvbm9Nb2RlLCBiX1BDSUlucHV0Q2xvY2ssIGJfVGltaW5nVW5pdDsKKworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0Nocm9ub01vZGUgPSAoQllURSkgZGF0YVswXTsKKwliX1BDSUlucHV0Q2xvY2sgPSAoQllURSkgZGF0YVsxXTsKKwliX1RpbWluZ1VuaXQgPSAoQllURSkgZGF0YVsyXTsKKwl1bF9UaW1pbmdJbnRlcnZhbCA9IChVTE9ORykgZGF0YVszXTsKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0NIUk9OT01FVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY2hyb25vbWV0ZXIgbW9kZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfQ2hyb25vTW9kZSA8PSA3KSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgUENJIGJ1cyBjbG9jayAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopIHx8CisJCQkJCShiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopIHx8CisJCQkJCShiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgdGltaW5nIHVuaXR5ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9UaW1pbmdVbml0IDw9IDQpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgYmFzZSB0aW1pbmcgc2VsZWN0aW9uICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKCgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSA2NikgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTQzMTY1NTc2VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDE0MzE2NVVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxNDNVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMlVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDYwKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxMzAxNTAyNDBVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTMwMTUwVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDEzMFVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAyVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gNTApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDEwNzM3NDE4MlVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxMDczNzRVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTA3VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDFVTCkpKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBib2FyZCB2ZXJzaW9uICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGRldnByaXYtPnNfQm9hcmRJbmZvcy5iX0JvYXJkVmVyc2lvbiA+IDApKSB8fCAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBUT1IgdmVyc2lvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzEzMSkpIHx8IChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopKSB7CisJCQkJCQkJCQlmcHVfYmVnaW4KKwkJCQkJCQkJCQkoKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSB0aW1lciAwIGRpdmlzaW9uIGZhdG9yICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0KSB7CisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBucyAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMDoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMC4wMDEgKiBiX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgwLjAwMSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMC4wMDEgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjAwMQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDAuMDAxICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMC45OTM5Mik7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIMOmcyAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMToKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMS4wICogYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMS4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgxLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJMS4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMS4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMC45OTM5Mik7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG1zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAyOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgxMDAwCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgxMDAwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDEwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDEwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDEwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKwkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTAuOTkzOTIpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqLworCQkJCQkJCQkJCS8qIHMgKi8KKwkJCQkgICAvKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMzoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMTAwMDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgxMDAwMDAwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDEwMDAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgxMDAwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgxMDAwMDAwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkwLjk5MzkyKTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogbW4gKi8KKwkJCQkgICAvKioqKioqLworCisJCQkJCQkJCQljYXNlIDQ6CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTYwKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgxMDAwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKSh1bF9UaW1pbmdJbnRlcnZhbCAqIDYwLjApICogKDEwMDAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMTAwMDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSkKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQk2MDsKKwkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjAwMSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgLyA2MC4wOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKCgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMTAwMDAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSAvIDYwLjApID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkwLjk5MzkyKTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJZnB1X2VuZCgpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTYXZlIHRoZSBQQ0kgaW5wdXQgY2xvY2sgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2sKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTYXZlIHRoZSB0aW1pbmcgdW5pdHkgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJCQliX1RpbWluZ1VuaXQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJYl9UaW1pbmdVbml0OworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIGJhc2UgdGltaW5nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlkX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTZXQgdGhlIGNocm9ub21ldGVyIG1vZGUgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZHdfTW9kZUFycmF5CisJCQkJCQkJCQkJW2JfQ2hyb25vTW9kZV07CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IGlmIDQwIE1IeiB1c2VkICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJMHg4MDsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc19DaHJvbm9Nb2R1bGVJbmZvLmR3X0NvbmZpZ1JlZywgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFdyaXRlIHRpbWVyIDAgdmFsdWUgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCW91dGwodWxfVGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2hyb25vbWV0ZXIgaW5pdC4gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWJfQ2hyb25vSW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRPUiB2ZXJzaW9uIGVycm9yIGZvciA0ME1IeiBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCURQUklOVEsoIlRPUiB2ZXJzaW9uIGVycm9yIGZvciA0ME1IeiBjbG9jayBzZWxlY3Rpb25cbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQktOTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggdGhpcyBib2FyZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggdGhpcyBib2FyZFxuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTg7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogQmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJRFBSSU5USygiQmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQl9CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaW1pbmcgdW5pdHkgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRpbWluZyB1bml0eSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmICgoYl9UaW1pbmdVbml0ID49IDApICYmIChiX1RpbWluZ1VuaXQgPD0gNCkpCisJCQkJfQkvLyBpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikpCisJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopIHx8IChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopKQorCQkJfQkvLyBpZiAoYl9DaHJvbm9Nb2RlID49IDAgJiYgYl9DaHJvbm9Nb2RlIDw9IDcpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2hyb25vbWV0ZXIgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9DaHJvbm9Nb2RlID49IDAgJiYgYl9DaHJvbm9Nb2RlIDw9IDcpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisJZGF0YVswXSA9IHVsX1JlYWxUaW1pbmdJbnRlcnZhbDsKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9FbmFibGVDaHJvbm8gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyBiX0JvYXJkSGFuZGxlLCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9DeWNsZU1vZGUsICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSkKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKK3N0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgY2hyb25vbWV0ZXIgZnJvbSBzZWxlY3RlZCBtb2R1bGUgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q2hyb25vIiBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgdGhpcyAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGVuYWJsZSB0aGUgY2hyb25vbWV0ZXIgaW50ZXJydXB0LCB0aGUgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBjaHJvbm9tZXRlciBnZW5lcmF0ZSBhIGludGVycnVwdCBhZnRlciB0aGUgc3RvcCBzaWduYWwufAorfCAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiBhbmQgdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IG1hc2sgZGVzY3JpcHRpb24gY2hhcHRlciBmcm9tIHRoaXMgbWFudWFsLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgYl9DeWNsZU1vZGUgcGFyYW1ldGVyIGRldGVybWluZSBpZiB5b3Ugd2lsbCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVkIGEgc2luZ2xlIG9yIG1vcmUgY3ljbGUuCisKK3wJCQkJCSAgRGlzYWJsZSB0aGUgY2hyb25vbWV0ZXIgZnJvbSBzZWxlY3RlZCBtb2R1bGUgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIElmIHlvdSBkaXNhYmxlIHRoZSBjaHJvbm9tZXRlciBhZnRlciBhICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IHNpZ25hbCBvY2N1ciBhbmQgeW91IHJlc3RhcnQgdGhlIGNocm9ub21ldGVyICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgd2l0Y2ggdGhlICIgaV9BUENJMTcxMF9FbmFibGVDaHJvbm8iIGZ1bmN0aW9uLCBpZiBubyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdG9wIHNpZ25hbCBvY2N1ciB0aGlzIHN0YXJ0IHNpZ25hbCBpcyBpZ25vcmVkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgQ1JfQVJFRihjaGFuc3BlYykgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgRU5BQmxlL0Rpc2FibGUgY2hyb25vCit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9DeWNsZU1vZGUgICAgOiBTZWxlY3RlZCB0aGUgY2hyb25vbWV0ZXIgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgYWNxdWlzaXRpb24gbW9kZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnRlcnJ1cHRFbmFibGUgOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMl0gICAgICAgICAgICBjaHJvbm9tZXRlciBpbnRlcnJ1cHQuICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRTogICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBjaHJvbm9tZXRlciAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0RJU0FCTEU6ICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aGUgY2hyb25vbWV0ZXIgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogQ2hyb25vbWV0ZXIgYWNxdWlzaXRpb24gbW9kZSBjeWNsZSBpcyB3cm9uZyAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC02OiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTc6IEludGVycnVwdCBmdW5jdGlvbiBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgiCisgICAgICAgICAgICAgICAgICAgICAgLTg6IGRhdGFbMF0gd3JvbmcgaW5wdXQgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlQ2hyb25vKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJQllURSBiX01vZHVsTmJyLCBiX0N5Y2xlTW9kZSwgYl9JbnRlcnJ1cHRFbmFibGUsIGJfQWN0aW9uOworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0FjdGlvbiA9IChCWVRFKSBkYXRhWzBdOworCWJfQ3ljbGVNb2RlID0gKEJZVEUpIGRhdGFbMV07CisJYl9JbnRlcnJ1cHRFbmFibGUgPSAoQllURSkgZGF0YVsyXTsKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0NIUk9OT01FVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX0Nocm9ub01vZHVsZUluZm8uYl9DaHJvbm9Jbml0ID09IDEpIHsKKworCQkJCXN3aXRjaCAoYl9BY3Rpb24pIHsKKworCQkJCWNhc2UgQVBDSTE3MTBfRU5BQkxFOgorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBjeWNsZSBtb2RlIHBhcmFtZXRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKGJfQ3ljbGVNb2RlID09IEFQQ0kxNzEwX1NJTkdMRSkKKwkJCQkJCXx8IChiX0N5Y2xlTW9kZSA9PQorCQkJCQkJCUFQQ0kxNzEwX0NPTlRJTlVPVVMpKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0KKwkJCQkJCQkJQVBDSTE3MTBfRU5BQkxFKQorCQkJCQkJCXx8IChiX0ludGVycnVwdEVuYWJsZSA9PQorCQkJCQkJCQlBUENJMTcxMF9ESVNBQkxFKSkKKwkJCQkJCXsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFNhdmUgdGhlIGludGVycnVwdCBmbGFnICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQliX0ludGVycnVwdE1hc2sKKwkJCQkJCQkJPQorCQkJCQkJCQliX0ludGVycnVwdEVuYWJsZTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2F2ZSB0aGUgY3ljbGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQliX0N5Y2xlTW9kZSA9CisJCQkJCQkJCWJfQ3ljbGVNb2RlOworCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJZHdfQ29uZmlnUmVnID0KKwkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCWR3X0NvbmZpZ1JlZyAmCisJCQkJCQkJCTB4OEYpIHwgKCgxICYKKwkJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlKQorCQkJCQkJCQk8PCA1KSB8ICgoMSAmCisJCQkJCQkJCQliX0N5Y2xlTW9kZSkKKwkJCQkJCQkJPDwgNikgfCAweDEwOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIGludGVycnVwdCBlbmFibGVkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChiX0ludGVycnVwdEVuYWJsZSA9PQorCQkJCQkJCQlBUENJMTcxMF9FTkFCTEUpCisJCQkJCQkJeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBmbGFnICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X0NvbmZpZ1JlZywKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKyAzMiArCisJCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisJCQkJCQkJfQorCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisJCQkJCQkJLyogRW5hYmxlIHRoZSBjaHJvbm9tZXRlciAgICAgICAgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlvdXRsKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCWR3X0NvbmZpZ1JlZywKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCTE2ICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIENsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCW91dGwoMCwgZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCTM2ICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQl9CS8vIGlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB8fCAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRElTQUJMRSkpCisJCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CS8vIGlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB8fCAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRElTQUJMRSkpCisJCQkJCX0JLy8gaWYgKChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9TSU5HTEUpIHx8IChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9DT05USU5VT1VTKSkKKwkJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBDaHJvbm9tZXRlciBhY3F1aXNpdGlvbiBtb2RlIGN5Y2xlIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIkNocm9ub21ldGVyIGFjcXVpc2l0aW9uIG1vZGUgY3ljbGUgaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCQl9CS8vIGlmICgoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfU0lOR0xFKSB8fCAoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfQ09OVElOVU9VUykpCisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBBUENJMTcxMF9ESVNBQkxFOgorCisJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCWJfSW50ZXJydXB0TWFzayA9IDA7CisKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJZHdfQ29uZmlnUmVnID0KKwkJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJZHdfQ29uZmlnUmVnICYgMHgyRjsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0ICAgKi8KKwkJCQkJLyogRGlzYWJsZSB0aGUgY2hyb25vbWV0ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uZHdfQ29uZmlnUmVnLAorCQkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDE2ICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBjb250aW51b3VzIG1vZGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCWJfQ3ljbGVNb2RlID09CisJCQkJCQlBUENJMTcxMF9DT05USU5VT1VTKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIENsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyAzNiArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJRFBSSU5USygiSW5wdXRzIHdyb25nISBFbmFibGUgb3IgRGlzYWJsZSBjaHJvbm9cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTg7CisJCQkJfQkvLyBzd2l0Y2ggRU5BQkxFL0RJU0FCTEUKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQJaV9BUENJMTcxMF9JbnNuUmVhZENocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgZnVuY3Rpb25zIGZvciBUaW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkQ2hyb25vKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlCWVRFIGJfUmVhZFR5cGU7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCisJYl9SZWFkVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChiX1JlYWRUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9DSFJPTk9fUFJPR1JFU1NfU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRDaHJvbm9Qcm9ncmVzc1N0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0NIUk9OT19SRUFEVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1JlYWRDaHJvbm9WYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoVUlOVCkgaW5zbi0+dW51c2VkWzBdLAorCQkJKFBCWVRFKSAmIGRhdGFbMF0sIChQVUxPTkcpICYgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9DSFJPTk9fQ09OVkVSVFZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Db252ZXJ0Q2hyb25vVmFsdWUoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKFVMT05HKSBpbnNuLT51bnVzZWRbMF0sCisJCQkoUFVMT05HKSAmIGRhdGFbMF0sCisJCQkoUEJZVEUpICYgZGF0YVsxXSwKKwkJCShQQllURSkgJiBkYXRhWzJdLAorCQkJKFBVSU5UKSAmIGRhdGFbM10sCisJCQkoUFVJTlQpICYgZGF0YVs0XSwgKFBVSU5UKSAmIGRhdGFbNV0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfQ0hST05PX1JFQURJTlRFUlJVUFQ6CisJCXByaW50aygiSW4gQ2hyb25vIFJlYWQgSW50ZXJydXB0XG4iKTsKKworCQlkYXRhWzBdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJCWRhdGFbMV0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZEludGVycnVwdE1hc2s7CisJCWRhdGFbMl0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogSW5jcmVtZW50IHRoZSByZWFkIEZJRk8gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXVpX1JlYWQgPSAoZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQl1aV9SZWFkICsgMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIlJlYWRUeXBlIFBhcmFtZXRlciB3cm9uZ1xuIik7CisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRDaHJvbm9Qcm9ncmVzc1N0YXR1cyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0Nocm9ub1N0YXR1cykgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgY2hyb25vbWV0ZXIgc3RhdHVzIChwYl9DaHJvbm9TdGF0dXMpIGZyb20gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgY2hyb25vbWV0ZXIgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHBiX0Nocm9ub1N0YXR1cyA6IFJldHVybiB0aGUgY2hyb25vbWV0ZXIgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogTWVhc3VyZW1lbnQgbm90IHN0YXJ0ZWQufAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBzdGFydCBzaWduYWwgb2NjdXIuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IE1lYXN1cmVtZW50IHN0YXJ0ZWQuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdGFydCBzaWduYWwgb2NjdXIuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBNZWFzdXJlbWVudCBzdG9wcGVkLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc3RvcCBzaWduYWwgb2NjdXIuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1lYXN1cmVtZW50IGlzICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUuICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzogQSBvdmVyZmxvdyBvY2N1ci4gWW91ICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGNoYW5nZSB0aGUgYmFzZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZyB3aXRjaCB0aGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q2hyb25vIiAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q2hyb25vIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0dldENocm9ub1Byb2dyZXNzU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfQ2hyb25vU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9DSFJPTk9NRVRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLmJfQ2hyb25vSW5pdCA9PSAxKSB7CisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgOCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgb3ZlcmZsb3cgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogT3ZlcmZsb3cgb2NjdXIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJKnBiX0Nocm9ub1N0YXR1cyA9IDM7CisJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDgpID09IDgpCisJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBtZWFzdXJlbWVudCBzdG9wcGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEEgc3RvcCBzaWduYWwgb2NjdXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJKnBiX0Nocm9ub1N0YXR1cyA9IDI7CisJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAyKSA9PSAyKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBtZWFzdXJlbWVudCBzdGFydGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKChkd19TdGF0dXMgJiAxKSA9PSAxKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogQSBzdGFydCBzaWduYWwgb2NjdXIgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCSpwYl9DaHJvbm9TdGF0dXMgPSAxOworCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpCisJCQkJCQllbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBNZWFzdXJlbWVudCBub3Qgc3RhcnRlZCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJKnBiX0Nocm9ub1N0YXR1cyA9IDA7CisJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgMSkgPT0gMSkKKwkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDgpID09IDgpCisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfUmVhZENocm9ub1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVF8gICAgdWlfVGltZU91dCwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9DaHJvbm9TdGF0dXMsICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX0Nocm9ub1ZhbHVlKSAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBjaHJvbm9tZXRlciBzdGF0dXMgKHBiX0Nocm9ub1N0YXR1cykgYW5kIHRoZXwKK3wgICAgICAgICAgICAgICAgICAgICB0aW1pbmcgdmFsdWUgKHB1bF9DaHJvbm9WYWx1ZSkgYWZ0ZXIgYSBzdG9wIHNpZ25hbCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG9jY3VyIGZyb20gc2VsZWN0ZWQgY2hyb25vbWV0ZXIgbW9kdWxlIChiX01vZHVsTmJyKS4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBhcmUgb25seSBhdmFpYmxlIGlmIHlvdSBoYXZlIGRpc2FibGVkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJydXB0IGZ1bmN0aW9uYWxpdHkuIFNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0VuYWJsZUNocm9ubyIgYW5kIHRoZSBJbnRlcnJ1cHQgbWFzayAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gY2hhcHRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRlc3QgdGhlIGNocm9ub21ldGVyIHN0YXR1cyB3aXRjaCB0aGUgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0dldENocm9ub1Byb2dyZXNzU3RhdHVzIiBmdW5jdGlvbi4gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgcmV0dXJuZWQgdmFsdWUgZnJvbSBwdWxfQ2hyb25vVmFsdWUgcGFyYW1ldGVyIGlzICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG5vdCByZWFsIG1lYXN1cmVkIHRpbWluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgdXNlZCB0aGUgImlfQVBDSTE3MTBfQ29udmVydENocm9ub1ZhbHVlIiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvciBtYWtlIHRoaXMgb3BlcmF0aW9uIGZvciBjYWxjdWxhdGUgdGhlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRpbWluZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaW1pbmcgPSBwdWxfQ2hyb25vVmFsdWUgKiBwdWxfUmVhbFRpbWluZ0ludGVydmFsLiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCBpcyB0aGUgcmV0dXJuZWQgcGFyYW1ldGVyIGZyb20gIHwKK3wgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q2hyb25vIiBmdW5jdGlvbiBhbmQgdGhlIHRpbWUgdW5pdHkgaXMgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBiX1RpbWluZ1VuaXQgZnJvbSAiaV9BUENJMTcxMF9Jbml0Q2hyb25vIiBmdW5jdGlvbnwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHBiX0Nocm9ub1N0YXR1cyA6IFJldHVybiB0aGUgY2hyb25vbWV0ZXIgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogTWVhc3VyZW1lbnQgbm90IHN0YXJ0ZWQufAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBzdGFydCBzaWduYWwgb2NjdXIuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IE1lYXN1cmVtZW50IHN0YXJ0ZWQuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdGFydCBzaWduYWwgb2NjdXIuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBNZWFzdXJlbWVudCBzdG9wcGVkLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc3RvcCBzaWduYWwgb2NjdXIuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1lYXN1cmVtZW50IGlzICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUuICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzogQSBvdmVyZmxvdyBvY2N1ci4gWW91ICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGNoYW5nZSB0aGUgYmFzZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZyB3aXRjaCB0aGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q2hyb25vIiAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVTE9ORyAgcHVsX0Nocm9ub1ZhbHVlICA6IENocm9ub21ldGVyIHRpbWluZyB2YWx1ZS4gICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVGltZW91dCBwYXJhbWV0ZXIgaXMgd3JvbmcgKDAgdG8gNjU1MzUpICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC02OiBJbnRlcnJ1cHQgcm91dGluZSBpbnN0YWxsZWQuIFlvdSBjYW4gbm90IHJlYWQgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IHRoZSBjaHJvbm9tZXRlciBtZWFzdXJlZCB0aW1pbmcuICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfUmVhZENocm9ub1ZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlVSU5UIHVpX1RpbWVPdXQsIFBCWVRFIHBiX0Nocm9ub1N0YXR1cywgUFVMT05HIHB1bF9DaHJvbm9WYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCURXT1JEIGR3X1RpbWVPdXQgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5iX0Nocm9ub0luaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIHRpbW91dCBwYXJhbWV0ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgodWlfVGltZU91dCA+PSAwKQorCQkJCQkmJiAodWlfVGltZU91dCA8PSA2NTUzNVVMKSkgeworCisJCQkJCWZvciAoOzspIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBSZWFkIHRoZSBzdGF0dXMgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsgOCArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgb3ZlcmZsb3cgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDgpID09IDgpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBPdmVyZmxvdyBvY2N1ciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJKnBiX0Nocm9ub1N0YXR1cyA9IDM7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIGNvbnRpbnVvdXMgbW9kZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCWJfQ3ljbGVNb2RlID09CisJCQkJCQkJCUFQQ0kxNzEwX0NPTlRJTlVPVVMpCisJCQkJCQkJeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBDbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzYgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJfQorCisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKwkJCQkJCWVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0b3BwZWQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDIpID09CisJCQkJCQkJCTIpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEEgc3RvcCBzaWduYWwgb2NjdXIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJKnBiX0Nocm9ub1N0YXR1cworCQkJCQkJCQkJPSAyOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiBjb250aW5ub3VzIG1vZGUgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJYl9DeWNsZU1vZGUKKwkJCQkJCQkJCT09CisJCQkJCQkJCQlBUENJMTcxMF9DT05USU5VT1VTKQorCQkJCQkJCQl7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDM2ICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAyKSA9PSAyKQorCQkJCQkJCWVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0YXJ0ZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQSBzdGFydCBzaWduYWwgb2NjdXIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAxKSA9PSAxKQorCQkJCQkJCQllbHNlIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogTWVhc3VyZW1lbnQgbm90IHN0YXJ0ZWQgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCTA7CisJCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAxKSA9PSAxKQorCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAyKSA9PSAyKQorCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDgpID09IDgpCisKKwkJCQkJCWlmIChkd19UaW1lT3V0ID09IHVpX1RpbWVPdXQpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRpbWVvdXQgb2NjdXIgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqLworCisJCQkJCQkJYnJlYWs7CisJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHRpbWVvdXQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkd19UaW1lT3V0ID0KKwkJCQkJCQkJZHdfVGltZU91dCArIDE7CisJCQkJCQkJbWRlbGF5KDEwMDApOworCisJCQkJCQl9CisJCQkJCX0JLy8gZm9yICg7OykKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHN0b3Agc2lnbmFsIG9jY3VyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKCpwYl9DaHJvbm9TdGF0dXMgPT0gMikgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFJlYWQgdGhlIG1lYXN1cmVkIHRpbWluZyB2YWx1ZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJKnB1bF9DaHJvbm9WYWx1ZSA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsgNCArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQlpZiAoKnB1bF9DaHJvbm9WYWx1ZSAhPSAwKSB7CisJCQkJCQkJKnB1bF9DaHJvbm9WYWx1ZSA9CisJCQkJCQkJCSpwdWxfQ2hyb25vVmFsdWUKKwkJCQkJCQkJLSAxOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgdGltZW91dCBvY2N1ciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKCgqcGJfQ2hyb25vU3RhdHVzICE9IDMpCisJCQkJCQkJJiYgKGR3X1RpbWVPdXQgPT0KKwkJCQkJCQkJdWlfVGltZU91dCkKKwkJCQkJCQkmJiAodWlfVGltZU91dCAhPSAwKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGltZW91dCBvY2N1ciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gNDsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRpbWVvdXQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCJUaW1lb3V0IHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfQ29udmVydENocm9ub1ZhbHVlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgdWxfQ2hyb25vVmFsdWUsICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9Ib3VyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX01pbnV0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfU2Vjb25kLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUlOVF8gIHB1aV9NaWxsaVNlY29uZCwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVSU5UXyAgcHVpX01pY3JvU2Vjb25kLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVJTlRfICBwdWlfTmFub1NlY29uZCkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb252ZXJ0IHRoZSBjaHJvbm9tZXRlciBtZWFzdXJlZCB0aW1pbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICh1bF9DaHJvbm9WYWx1ZSkgaW4gdG8gaCwgbW4sIHMsIG1zLCDCtXMsIG5zLiAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9DaHJvbm9WYWx1ZSA6IE1lYXN1cmVkIGNocm9ub21ldGVyIHRpbWluZyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUiaV9BUENJMTcxMF9SZWFkQ2hyb25vVmFsdWUifAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgIHB1bF9Ib3VyICAgICAgICA6IENocm9ub21ldGVyIHRpbWluZyBob3VyICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gICAgIHBiX01pbnV0ZSAgICAgIDogQ2hyb25vbWV0ZXIgdGltaW5nIG1pbnV0ZSAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgICAgcGJfU2Vjb25kICAgICAgOiBDaHJvbm9tZXRlciB0aW1pbmcgc2Vjb25kICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUFVJTlRfICAgIHB1aV9NaWxsaVNlY29uZCAgOiBDaHJvbm9tZXRlciB0aW1pbmcgbWluaSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVSU5UXyAgICBwdWlfTWljcm9TZWNvbmQgOiBDaHJvbm9tZXRlciB0aW1pbmcgbWljcm8gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUlOVF8gICAgcHVpX05hbm9TZWNvbmQgIDogQ2hyb25vbWV0ZXIgdGltaW5nIG5hbm8gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfQ29udmVydENocm9ub1ZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlVTE9ORyB1bF9DaHJvbm9WYWx1ZSwKKwlQVUxPTkcgcHVsX0hvdXIsCisJUEJZVEUgcGJfTWludXRlLAorCVBCWVRFIHBiX1NlY29uZCwKKwlQVUlOVCBwdWlfTWlsbGlTZWNvbmQsIFBVSU5UIHB1aV9NaWNyb1NlY29uZCwgUFVJTlQgcHVpX05hbm9TZWNvbmQpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCWRvdWJsZSBkX0hvdXI7CisJZG91YmxlIGRfTWludXRlOworCWRvdWJsZSBkX1NlY29uZDsKKwlkb3VibGUgZF9NaWxsaVNlY29uZDsKKwlkb3VibGUgZF9NaWNyb1NlY29uZDsKKwlkb3VibGUgZF9OYW5vU2Vjb25kOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5iX0Nocm9ub0luaXQgPT0gMSkgeworCQkJCWZwdV9iZWdpbigpOworCisJCQkJZF9Ib3VyID0gKGRvdWJsZSl1bF9DaHJvbm9WYWx1ZSAqKGRvdWJsZSkKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uZF9UaW1pbmdJbnRlcnZhbDsKKworCQkJCXN3aXRjaCAoZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLmJfVGltaW5nVW5pdCkgeworCQkJCWNhc2UgMDoKKwkJCQkJZF9Ib3VyID0gZF9Ib3VyIC8gKGRvdWJsZSkxMDAwLjA7CisKKwkJCQljYXNlIDE6CisJCQkJCWRfSG91ciA9IGRfSG91ciAvIChkb3VibGUpMTAwMC4wOworCisJCQkJY2FzZSAyOgorCQkJCQlkX0hvdXIgPSBkX0hvdXIgLyAoZG91YmxlKTEwMDAuMDsKKworCQkJCWNhc2UgMzoKKwkJCQkJZF9Ib3VyID0gZF9Ib3VyIC8gKGRvdWJsZSk2MC4wOworCisJCQkJY2FzZSA0OgorCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxjdWxhdGUgdGhlIGhvdXIgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkX0hvdXIgPSBkX0hvdXIgLyAoZG91YmxlKTYwLjA7CisJCQkJCSpwdWxfSG91ciA9IChVTE9ORykgZF9Ib3VyOworCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2FsY3VsYXRlIHRoZSBtaW51dGUgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRfTWludXRlID0gZF9Ib3VyIC0gKnB1bF9Ib3VyOworCQkJCQlkX01pbnV0ZSA9IGRfTWludXRlICogNjA7CisJCQkJCSpwYl9NaW51dGUgPSAoQllURSkgZF9NaW51dGU7CisKKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHNlY29uZCAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZF9TZWNvbmQgPSBkX01pbnV0ZSAtICpwYl9NaW51dGU7CisJCQkJCWRfU2Vjb25kID0gZF9TZWNvbmQgKiA2MDsKKwkJCQkJKnBiX1NlY29uZCA9IChCWVRFKSBkX1NlY29uZDsKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2FsY3VsYXRlIHRoZSBtaW5pIHNlY29uZCAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkX01pbGxpU2Vjb25kID0gZF9TZWNvbmQgLSAqcGJfU2Vjb25kOworCQkJCQlkX01pbGxpU2Vjb25kID0gZF9NaWxsaVNlY29uZCAqIDEwMDA7CisJCQkJCSpwdWlfTWlsbGlTZWNvbmQgPSAoVUlOVCkgZF9NaWxsaVNlY29uZDsKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGN1bGF0ZSB0aGUgbWljcm8gc2Vjb25kICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkX01pY3JvU2Vjb25kID0KKwkJCQkJCWRfTWlsbGlTZWNvbmQgLQorCQkJCQkJKnB1aV9NaWxsaVNlY29uZDsKKwkJCQkJZF9NaWNyb1NlY29uZCA9IGRfTWljcm9TZWNvbmQgKiAxMDAwOworCQkJCQkqcHVpX01pY3JvU2Vjb25kID0gKFVJTlQpIGRfTWljcm9TZWNvbmQ7CisKKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxjdWxhdGUgdGhlIG1pY3JvIHNlY29uZCAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZF9OYW5vU2Vjb25kID0KKwkJCQkJCWRfTWljcm9TZWNvbmQgLQorCQkJCQkJKnB1aV9NaWNyb1NlY29uZDsKKwkJCQkJZF9OYW5vU2Vjb25kID0gZF9OYW5vU2Vjb25kICogMTAwMDsKKwkJCQkJKnB1aV9OYW5vU2Vjb25kID0gKFVJTlQpIGRfTmFub1NlY29uZDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZnB1X2VuZCgpOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgaV9BUENJMTcxMF9JbnNuQml0c0Nocm9ub0RpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXRzIHRoZSBvdXRwdXQgd2l0Y2ggaGFzIGJlZW4gcGFzc2VkIHdpdGggdGhlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBiX0NoYW5uZWwuIFNldHRpbmcgYW4gb3V0cHV0IG1lYW5zIHNldHRpbmcgYW58Cit8ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGhpZ2guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKXwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX091dHB1dENoYW5uZWwgOiBTZWxlY3Rpb24gZnJvbSBkaWdpdGFsIG91dHB1dCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIENSX0NIQU4oKSAgICAgICAgICAgICAgICAgIGNoYW5uZWwgKDAgdG8gMikgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIEggICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgQSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ2hhbm5lbCBCICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfU2V0Q2hyb25vQ2hsT2ZmICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfT3V0cHV0Q2hhbm5lbCkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXNldHMgdGhlIG91dHB1dCB3aXRjaCBoYXMgYmVlbiBwYXNzZWQgd2l0aCB0aGUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBiX0NoYW5uZWwuIFJlc2V0dGluZyBhbiBvdXRwdXQgbWVhbnMgc2V0dGluZyB8Cit8ICAgICAgICAgICAgICAgICAgICAgYW4gb3V0cHV0IGxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gOiBDaGwgT04sIENobCBPRkYgLCBDaGwgUmVhZCAsIFBvcnQgUmVhZAorCit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgQ1JfQVJFRiAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMyl8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9PdXRwdXRDaGFubmVsIENSX0NIQU4gOiBTZWxlY3Rpb24gZnJvbSBkaWdpdGFsIG91dHB1dCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwgKDAgdG8gMikgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIEggICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgQSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ2hhbm5lbCBCICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfUmVhZENocm9ub0NobFZhbHVlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0lucHV0Q2hhbm5lbCwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfQ2hhbm5lbFN0YXR1cykgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfSW5wdXRDaGFubmVsKSBmcm9tIHNlbGVjdGVkIGNocm9ub21ldGVyICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW5wdXRDaGFubmVsICA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgaW5wdXQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCAoMCB0byAyKSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSX0NIQU4oKSAgICAgICAgICAgICAwIDogQ2hhbm5lbCBFICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBDaGFubmVsIEYgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IENoYW5uZWwgRyAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9DaGFubmVsU3RhdHVzIDogRGlnaXRhbCBpbnB1dCBjaGFubmVsIHN0YXR1cy58Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIGlzIG5vdCBhY3RpdmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgaXMgYWN0aXZlICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBkaWdpdGFsIGlucHV0IGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q2hyb25vIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWRDaHJvbm9Qb3J0VmFsdWUgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9Qb3J0VmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgZnJvbSBkaWdpdGFsIGlucHV0cyBwb3J0IGZyb20gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCAgKGJfTW9kdWxOYnIpIGNocm9ub21ldGVyIG1vZHVsZS4gICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1BvcnRWYWx1ZSAgIDogRGlnaXRhbCBpbnB1dHMgcG9ydCBzdGF0dXMuCit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q2hyb25vIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzQ2hyb25vRGlnaXRhbElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJQllURSBiX01vZHVsTmJyLCBiX091dHB1dENoYW5uZWwsIGJfSW5wdXRDaGFubmVsLCBiX0lPVHlwZTsKKwlEV09SRCBkd19TdGF0dXM7CisJUEJZVEUgcGJfQ2hhbm5lbFN0YXR1czsKKwlQQllURSBwYl9Qb3J0VmFsdWU7CisKKwliX01vZHVsTmJyID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9JT1R5cGUgPSAoQllURSkgZGF0YVswXTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0NIUk9OT01FVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX0Nocm9ub01vZHVsZUluZm8uYl9DaHJvbm9Jbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIG91dHB1dCBjaGFubmVsICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJc3dpdGNoIChiX0lPVHlwZSkgeworCisJCQkJY2FzZSBBUENJMTcxMF9DSFJPTk9fU0VUX0NIQU5ORUxPRkY6CisKKwkJCQkJYl9PdXRwdXRDaGFubmVsID0KKwkJCQkJCShCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwkJCQkJaWYgKGJfT3V0cHV0Q2hhbm5lbCA8PSAyKSB7CisKKwkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyAyMCArCisJCQkJCQkJKGJfT3V0cHV0Q2hhbm5lbCAqIDQpICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCX0JLy8gaWYgKChiX091dHB1dENoYW5uZWwgPj0gMCkgJiYgKGJfT3V0cHV0Q2hhbm5lbCA8PSAyKSkKKwkJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRoZSBzZWxlY3RlZCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisKKwkJCQkJfQkvLyBpZiAoKGJfT3V0cHV0Q2hhbm5lbCA+PSAwKSAmJiAoYl9PdXRwdXRDaGFubmVsIDw9IDIpKQorCisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBBUENJMTcxMF9DSFJPTk9fU0VUX0NIQU5ORUxPTjoKKworCQkJCQliX091dHB1dENoYW5uZWwgPQorCQkJCQkJKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQkJCQlpZiAoYl9PdXRwdXRDaGFubmVsIDw9IDIpIHsKKworCQkJCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDIwICsKKwkJCQkJCQkoYl9PdXRwdXRDaGFubmVsICogNCkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJfQkvLyBpZiAoKGJfT3V0cHV0Q2hhbm5lbCA+PSAwKSAmJiAoYl9PdXRwdXRDaGFubmVsIDw9IDIpKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKworCQkJCQl9CS8vIGlmICgoYl9PdXRwdXRDaGFubmVsID49IDApICYmIChiX091dHB1dENoYW5uZWwgPD0gMikpCisKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0NIUk9OT19SRUFEX0NIQU5ORUw6CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgZGlnaXRhbCBpbnB1dCBjaGFubmVsICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJcGJfQ2hhbm5lbFN0YXR1cyA9IChQQllURSkgJiBkYXRhWzBdOworCQkJCQliX0lucHV0Q2hhbm5lbCA9CisJCQkJCQkoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkJCQkJaWYgKGJfSW5wdXRDaGFubmVsIDw9IDIpIHsKKworCQkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyAxMiArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkqcGJfQ2hhbm5lbFN0YXR1cyA9CisJCQkJCQkJKEJZVEUpICgoKGR3X1N0YXR1cyA+PgorCQkJCQkJCQkJYl9JbnB1dENoYW5uZWwpCisJCQkJCQkJCSYgMSkgXiAxKTsKKwkJCQkJfQkvLyBpZiAoKGJfSW5wdXRDaGFubmVsID49IDApICYmIChiX0lucHV0Q2hhbm5lbCA8PSAyKSkKKwkJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBkaWdpdGFsIGlucHV0IGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQkJfQkvLyBpZiAoKGJfSW5wdXRDaGFubmVsID49IDApICYmIChiX0lucHV0Q2hhbm5lbCA8PSAyKSkKKworCQkJCQlicmVhazsKKworCQkJCWNhc2UgQVBDSTE3MTBfQ0hST05PX1JFQURfUE9SVDoKKworCQkJCQlwYl9Qb3J0VmFsdWUgPSAoUEJZVEUpICYgZGF0YVswXTsKKworCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAxMiArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX1BvcnRWYWx1ZSA9CisJCQkJCQkoQllURSkgKChkd19TdGF0dXMgJiAweDcpIF4gNyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZiNTBjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF8zME1IWgkJCTMwCisjZGVmaW5lIEFQQ0kxNzEwXzMzTUhaCQkJMzMKKyNkZWZpbmUgQVBDSTE3MTBfNDBNSFoJCQk0MAorCisjZGVmaW5lIEFQQ0kxNzEwX1NJTkdMRQkJCTAKKyNkZWZpbmUgQVBDSTE3MTBfQ09OVElOVU9VUwkJMQorCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19QUk9HUkVTU19TVEFUVVMJMAorI2RlZmluZSBBUENJMTcxMF9DSFJPTk9fUkVBRFZBTFVFCTEKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX0NPTlZFUlRWQUxVRQkyCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19SRUFESU5URVJSVVBUCTMKKworI2RlZmluZSBBUENJMTcxMF9DSFJPTk9fU0VUX0NIQU5ORUxPTgkwCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19TRVRfQ0hBTk5FTE9GRgkxCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19SRUFEX0NIQU5ORUwJMgorI2RlZmluZSBBUENJMTcxMF9DSFJPTk9fUkVBRF9QT1JUCTMKKworLyoKKyAqIENIUk9OT01FVEVSIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0Q2hyb25vKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIENIUk9OT01FVEVSIFJFQUQgRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldENocm9ub1Byb2dyZXNzU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIEJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfQ2hyb25vU3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfUmVhZENocm9ub1ZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICAgQllURSBiX01vZHVsTmJyLAorCQkJICAgICAgIFVJTlQgdWlfVGltZU91dCwgUEJZVEUgcGJfQ2hyb25vU3RhdHVzLAorCQkJICAgICAgIFBVTE9ORyBwdWxfQ2hyb25vVmFsdWUpOworCitJTlQgaV9BUENJMTcxMF9Db252ZXJ0Q2hyb25vVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgIEJZVEUgYl9Nb2R1bE5iciwKKwkJCQkgIFVMT05HIHVsX0Nocm9ub1ZhbHVlLAorCQkJCSAgUFVMT05HIHB1bF9Ib3VyLAorCQkJCSAgUEJZVEUgcGJfTWludXRlLAorCQkJCSAgUEJZVEUgcGJfU2Vjb25kLAorCQkJCSAgUFVJTlQgcHVpX01pbGxpU2Vjb25kLCBQVUlOVCBwdWlfTWljcm9TZWNvbmQsCisJCQkJICBQVUlOVCBwdWlfTmFub1NlY29uZCk7CisKKy8qCisgKiBDSFJPTk9NRVRFUiBESUdJVEFMIElOUFVUIE9VVFBVVCBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c0Nocm9ub0RpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfRGlnX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlMjdhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfRGlnX2lvLmMKQEAgLTAsMCArMSwxMDIwIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogRElHX0lPLkMgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBkaWdpdGFsIEkvTyBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDE2LzA2Lzk4IHwgUy4gV2ViZXIgIHwgRGlnaXRhbCBpbnB1dCAvIG91dHB1dCBpbXBsZW1lbnRhdGlvbiAgICAgICAgICB8CisgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgIkFQQ0kxNzEwX0RpZ19pby5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0RpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB8Cit8CQkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSl8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmUgdGhlIGRpZ2l0YWwgSS9PIG9wZXJhdGluZyBtb2RlIGZyb20gc2VsZWN0ZWQgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmV8Cit8ICAgICAgICAgICAgICAgICAgICAgZm9yIHlvdSBjYWxsIGFueSBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgZGlnaXRhbHwKK3wgICAgICAgICAgICAgICAgICAgICBJL08uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDoJCQkJCQkJCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgIGRhdGFbMF06IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0NoYW5uZWxBTW9kZSBkYXRhWzFdICA6IENoYW5uZWwgQSBtb2RlIHNlbGVjdGlvbiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5uZWwgdXNlZCBmb3IgZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBDaGFubmVsIHVzZWQgZm9yIGRpZ2l0YWwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0NoYW5uZWxCTW9kZSBkYXRhWzJdIDogQ2hhbm5lbCBCIG1vZGUgc2VsZWN0aW9uICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ2hhbm5lbCB1c2VkIGZvciBkaWdpdGFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgdXNlZCBmb3IgZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0CQkJCQkgfAorCQkJCQkJZGF0YVswXQkgIG1lbW9yeSBvbi9vZmYKK0FjdGl2YXRlcyBhbmQgZGVhY3RpdmF0ZXMgdGhlIGRpZ2l0YWwgb3V0cHV0IG1lbW9yeS4KKwkJCQkJCUFmdGVyIGhhdmluZyAgICAgIHwKK3wgICAgICAgICAgICAgICAgIGNhbGxlZCB1cCB0aGlzIGZ1bmN0aW9uIHdpdGggbWVtb3J5IG9uLHRoZSBvdXRwdXQgeW91IGhhdmUgcHJldmlvdXNseXwKK3wgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24gYXJlIG5vdCByZXNldAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogQmktZGlyZWN0aW9uYWwgY2hhbm5lbCBBIGNvbmZpZ3VyYXRpb24gZXJyb3IgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEIgY29uZmlndXJhdGlvbiBlcnJvciAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnRGlnaXRhbElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlCWVRFIGJfTW9kdWxOYnIsIGJfQ2hhbm5lbEFNb2RlLCBiX0NoYW5uZWxCTW9kZTsKKwlCWVRFIGJfTWVtb3J5T25PZmYsIGJfQ29uZmlnVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfV3JpdGVDb25maWcgPSAwOworCisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0NvbmZpZ1R5cGUgPSAoQllURSkgZGF0YVswXTsJLy8gTWVtb3J5IG9yICBJbml0CisJYl9DaGFubmVsQU1vZGUgPSAoQllURSkgZGF0YVsxXTsKKwliX0NoYW5uZWxCTW9kZSA9IChCWVRFKSBkYXRhWzJdOworCWJfTWVtb3J5T25PZmYgPSAoQllURSkgZGF0YVsxXTsJLy8gaWYgbWVtb3J5IG9wZXJhdGlvbgorCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyID49IDQpIHsKKwkJRFBSSU5USygiTW9kdWxlIE51bWJlciBpbnZhbGlkXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCQlyZXR1cm4gaV9SZXR1cm5WYWx1ZTsKKwl9CisJc3dpdGNoIChiX0NvbmZpZ1R5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX0RJR0lPX01FTU9SWU9OT0ZGOgorCisJCWlmIChiX01lbW9yeU9uT2ZmKQkvLyBJZiBNZW1vcnkgT04KKwkJeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZXQgdGhlIG91dHB1dCBtZW1vcnkgb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19EaWdpdGFsSU9JbmZvLmJfT3V0cHV0TWVtb3J5RW5hYmxlZCA9IDE7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDbGVhciB0aGUgb3V0cHV0IG1lbW9yeSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX0RpZ2l0YWxJT0luZm8uZHdfT3V0cHV0TWVtb3J5ID0gMDsKKwkJfSBlbHNlCQkvLyBJZiBtZW1vcnkgb2ZmCisJCXsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgb3V0cHV0IG1lbW9yeSBvZmYgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfRGlnaXRhbElPSW5mby5iX091dHB1dE1lbW9yeUVuYWJsZWQgPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9ESUdJT19JTklUOgorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgZGlnaXRhbCBJL08gY291bnRlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0RJR0lUQUxfSU8pIHsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBiaS1kaXJlY3Rpb25hbCBjaGFubmVsIEEgY29uZmlndXJhdGlvbiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9DaGFubmVsQU1vZGUgPT0gMCkgfHwgKGJfQ2hhbm5lbEFNb2RlID09IDEpKSB7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBiaS1kaXJlY3Rpb25hbCBjaGFubmVsIEIgY29uZmlndXJhdGlvbiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfQ2hhbm5lbEJNb2RlID09IDApCisJCQkJCXx8IChiX0NoYW5uZWxCTW9kZSA9PSAxKSkgeworCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0RpZ2l0YWxJT0luZm8uYl9EaWdpdGFsSW5pdCA9CisJCQkJCQkxOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTYXZlIGNoYW5uZWwgQSBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCWJfQ2hhbm5lbEFNb2RlID0gYl9DaGFubmVsQU1vZGU7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNhdmUgY2hhbm5lbCBCIGNvbmZpZ3VyYXRpb24gKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJYl9DaGFubmVsQk1vZGUgPSBiX0NoYW5uZWxCTW9kZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2V0IHRoZSBjaGFubmVsIEEgYW5kIEIgY29uZmlndXJhdGlvbiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19Xcml0ZUNvbmZpZyA9CisJCQkJCQkoRFdPUkQpIChiX0NoYW5uZWxBTW9kZSB8CisJCQkJCQkoYl9DaGFubmVsQk1vZGUgKiAyKSk7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJb3V0bChkd19Xcml0ZUNvbmZpZywKKwkJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA0ICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCX0gZWxzZSB7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQmktZGlyZWN0aW9uYWwgY2hhbm5lbCBCIGNvbmZpZ3VyYXRpb24gZXJyb3IgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCJCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEIgY29uZmlndXJhdGlvbiBlcnJvclxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEEgY29uZmlndXJhdGlvbiBlcnJvciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiQmktZGlyZWN0aW9uYWwgY2hhbm5lbCBBIGNvbmZpZ3VyYXRpb24gZXJyb3JcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKworCQkJfQorCisJCX0gZWxzZSB7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0JCQkvLyBlbmQgb2YgU3dpdGNoCisJcHJpbnRrKCJSZXR1cm4gVmFsdWUgJWRcbiIsIGlfUmV0dXJuVmFsdWUpOworCXJldHVybiBpX1JldHVyblZhbHVlOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8SU5UIGlfQVBDSTE3MTBfSW5zblJlYWREaWdpdGFsSU9DaGxWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LGNvbWVkaV9zdWJkZXZpY2UKKypzLAlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBkaWdpdGFsIEkvTyBkaWdpdGFsIGlucHV0fAorfCAgICAgICAgICAgICAgICAgICAgIChiX0lucHV0Q2hhbm5lbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKworCit8Cit8ICBCWVRFXyBiX01vZHVsTmJyICBDUl9BUkVGKGNoYW5zcGVjKSAgICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgIHwKK3wgIEJZVEVfIGJfSW5wdXRDaGFubmVsIENSX0NIQU4oY2hhbnNwZWMpICAgICAgICA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgKCAwIHRvIDYpICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ2hhbm5lbCBDICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBDaGFubmVsIEQgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IENoYW5uZWwgRSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIDogQ2hhbm5lbCBGICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiBDaGFubmVsIEcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSA6IENoYW5uZWwgQSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IDogQ2hhbm5lbCBCCisKKworCXwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CQkJCQkgZGF0YVswXSAgIDogRGlnaXRhbCBpbnB1dCBjaGFubmVsICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmxlIGlzIG5vdCBhY3RpdmV8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5ubGUgaXMgYWN0aXZlICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgSS9PIGRpZ2l0YWwgaW5wdXQgaXMgd3JvbmcgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBEaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRoZSBkaWdpdGFsIGNoYW5uZWwgQSBpcyB1c2VkIGZvciBvdXRwdXQgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogVGhlIGRpZ2l0YWwgY2hhbm5lbCBCIGlzIHVzZWQgZm9yIG91dHB1dCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLy9fSU5UXyAgIGlfQVBDSTE3MTBfUmVhZERpZ2l0YWxJT0NobFZhbHVlICAgICAgKEJZVEVfICAgIGJfQm9hcmRIYW5kbGUsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfTW9kdWxOYnIsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfSW5wdXRDaGFubmVsLAorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICBwYl9DaGFubmVsU3RhdHVzKQorSU5UIGlfQVBDSTE3MTBfSW5zblJlYWREaWdpdGFsSU9DaGxWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfSW5wdXRDaGFubmVsOworCVBCWVRFIHBiX0NoYW5uZWxTdGF0dXM7CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0lucHV0Q2hhbm5lbCA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlkYXRhWzBdID0gMDsKKwlwYl9DaGFubmVsU3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMF07CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGRpZ2l0YWwgSS9PIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9ESUdJVEFMX0lPKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGRpZ2l0YWwgaW1ucHV0IGNoYW5uZWwgbnVtYmVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfSW5wdXRDaGFubmVsIDw9IDYpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdGhlIGRpZ2l0YWwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX0RpZ2l0YWxJT0luZm8uYl9EaWdpdGFsSW5pdCA9PSAxKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBjaGFubmVsIEEgb3IgY2hhbm5lbCBCICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9JbnB1dENoYW5uZWwgPiA0KSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBjaGFubmVsIEEgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChiX0lucHV0Q2hhbm5lbCA9PSA1KSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgY2hhbm5lbCBBIG1vZGUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQliX0NoYW5uZWxBTW9kZQorCQkJCQkJCQkhPSAwKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIG91dHB1dCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNjsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmIChiX0lucHV0Q2hhbm5lbCA9PSA1KQorCQkJCQkJZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgY2hhbm5lbCBCIG1vZGUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQliX0NoYW5uZWxCTW9kZQorCQkJCQkJCQkhPSAwKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGhlIGRpZ2l0YWwgY2hhbm5lbCBCIGlzIHVzZWQgZm9yIG91dHB1dCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmIChiX0lucHV0Q2hhbm5lbCA9PSA1KQorCQkJCQl9CS8vIGlmIChiX0lucHV0Q2hhbm5lbCA+IDQpCisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBlcnJvciBvY2N1ciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFJlYWQgYWxsIGRpZ2l0YWwgaW5wdXQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJLy9JTlBEVyAocHNfQVBDSTE3MTBWYXJpYWJsZS0+CisJCQkJCQkvLyAgIHNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLgorCQkJCQkJLy8gICBzX0JvYXJkSW5mb3MuCisJCQkJCQkvLyAgdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpLAorCQkJCQkJLy8gJmR3X1N0YXR1c1JlZyk7CisKKwkJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCSpwYl9DaGFubmVsU3RhdHVzID0KKwkJCQkJCQkoQllURSkgKChkd19TdGF0dXNSZWcgXgorCQkJCQkJCQkweDFDKSA+PgorCQkJCQkJCWJfSW5wdXRDaGFubmVsKSAmIDE7CisKKwkJCQkJfQkvLyBpZiAoaV9SZXR1cm5WYWx1ZSA9PSAwKQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJRFBSSU5USygiRGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIlNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgZXJyb3JcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVQgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVEaWdpdGFsSU9DaGxPbk9mZihjb21lZGlfZGV2aWNlCit8KmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXRzIG9yIHJlc2V0cyB0aGUgb3V0cHV0IHdpdGNoIGhhcyBiZWVuIHBhc3NlZCB3aXRoIHRoZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgYl9DaGFubmVsLiBTZXR0aW5nIGFuIG91dHB1dCBtZWFucyBzZXR0aW5nICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGFuIG91cHV0IGhpZ2guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgKGFyZWYgKSAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMyl8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9PdXRwdXRDaGFubmVsIChDUl9DSEFOKSA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCAoMCB0byAyKSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ2hhbm5lbCBIICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBDaGFubmVsIEEgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IENoYW5uZWwgQiAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogZGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiIGlfQVBDSTE3MTBfSW5pdERpZ2l0YWxJTyIgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRoZSBkaWdpdGFsIGNoYW5uZWwgQSBpcyB1c2VkIGZvciBpbnB1dCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogVGhlIGRpZ2l0YWwgY2hhbm5lbCBCIGlzIHVzZWQgZm9yIGlucHV0CisJCQkJCSAtODogRGlnaXRhbCBPdXRwdXQgTWVtb3J5IE9GRi4gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICBVc2UgcHJldmlvdXNseSB0aGUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX1NldERpZ2l0YWxJT01lbW9yeU9uIi4gICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8vX0lOVF8gICBpX0FQQ0kxNzEwX1NldERpZ2l0YWxJT0NobE9uICAgIChCWVRFXyBiX0JvYXJkSGFuZGxlLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX091dHB1dENoYW5uZWwpCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVEaWdpdGFsSU9DaGxPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1dyaXRlVmFsdWUgPSAwOworCUJZVEUgYl9Nb2R1bE5iciwgYl9PdXRwdXRDaGFubmVsOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX091dHB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgZGlnaXRhbCBJL08gY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0RJR0lUQUxfSU8pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgdGhlIGRpZ2l0YWwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfRGlnaXRhbElPSW5mby5iX0RpZ2l0YWxJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbCBudW1iZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlzd2l0Y2ggKGJfT3V0cHV0Q2hhbm5lbCkgeworCQkgICAgLyoqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgSCAqLworCQkgICAgLyoqKioqKioqKioqKiovCisKKwkJCQljYXNlIDA6CisJCQkJCWJyZWFrOworCisJCSAgICAvKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2hhbm5lbCBBICovCisJCSAgICAvKioqKioqKioqKioqKi8KKworCQkJCWNhc2UgMToKKwkJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCWJfQ2hhbm5lbEFNb2RlICE9IDEpIHsKKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRoZSBkaWdpdGFsIGNoYW5uZWwgQSBpcyB1c2VkIGZvciBpbnB1dCAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJICAgIC8qKioqKioqKioqKioqLworCQkJCQkvKiBDaGFubmVsIEIgKi8KKwkJICAgIC8qKioqKioqKioqKioqLworCisJCQkJY2FzZSAyOgorCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJYl9DaGFubmVsQk1vZGUgIT0gMSkgeworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIGRpZ2l0YWwgY2hhbm5lbCBCIGlzIHVzZWQgZm9yIGlucHV0ICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAqLworCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBlcnJvciBvY2N1ciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHNldCBjaGFubmVsIE9OICAgICAgICAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJaWYgKGRhdGFbMF0pIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIG91dHB1dCBtZW1vcnkgZW5hYmxlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJYl9PdXRwdXRNZW1vcnlFbmFibGVkID09CisJCQkJCQkJMSkgeworCQkJCQkJCWR3X1dyaXRlVmFsdWUgPQorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJfCAoMSA8PAorCQkJCQkJCQliX091dHB1dENoYW5uZWwpOworCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCT0gZHdfV3JpdGVWYWx1ZTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZHdfV3JpdGVWYWx1ZSA9CisJCQkJCQkJCTEgPDwKKwkJCQkJCQkJYl9PdXRwdXRDaGFubmVsOworCQkJCQkJfQorCQkJCQl9CS8vIHNldCBjaGFubmVsIG9mZgorCQkJCQllbHNlIHsKKwkJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCWJfT3V0cHV0TWVtb3J5RW5hYmxlZCA9PQorCQkJCQkJCTEpIHsKKwkJCQkJCQlkd19Xcml0ZVZhbHVlID0KKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCSYgKDB4RkZGRkZGRkZVTAorCQkJCQkJCQktCisJCQkJCQkJCSgxIDw8IGJfT3V0cHV0Q2hhbm5lbCkpOworCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCT0gZHdfV3JpdGVWYWx1ZTsKKwkJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogRGlnaXRhbCBPdXRwdXQgTWVtb3J5IE9GRiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8vICtVc2UgcHJldmlvdXNseSB0aGUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0RGlnaXRhbElPTWVtb3J5T24iCisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC04OworCQkJCQkJfQorCisJCQkJCX0KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBXcml0ZSB0aGUgdmFsdWUgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCS8vT1VUUERXIChwc19BUENJMTcxMFZhcmlhYmxlLT4KKwkJCQkJLy8gICAgc19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uCisJCQkJCS8vICAgc19Cb2FyZEluZm9zLgorCQkJCQkvLyAgIHVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSwKKwkJCQkJLy8gICBkd19Xcml0ZVZhbHVlKTsKKwkJCQkJb3V0bChkd19Xcml0ZVZhbHVlLAorCQkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8SU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNEaWdpdGFsSU9Qb3J0T25PZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixjb21lZGlfc3ViZGV2aWNlCisJKnMsCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiB3cml0ZToKKwkJCQkJICBTZXRzIG9yIHJlc2V0cyBvbmUgb3Igc2V2ZXJhbCBvdXRwdXRzIGZyb20gcG9ydC4gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIGFuIG91dHB1dCBtZWFucyBzZXR0aW5nIGFuIG91dHB1dCBoaWdoLiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIHN3aXRjaGVkIE9GRiB0aGUgZGlnaXRhbCBvdXRwdXQgbWVtb3J5ICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKE9GRiksIGFsbCB0aGUgb3RoZXIgb3V0cHV0IGFyZSBzZXQgdG8gIjAiLgorCit8ICAgICAgICAgICAgICAgICAgICAgIHJlYWQ6CisJCQkJCSAgUmVhZCB0aGUgc3RhdHVzIGZyb20gZGlnaXRhbCBpbnB1dCBwb3J0ICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBmcm9tIHNlbGVjdGVkIGRpZ2l0YWwgSS9PIG1vZHVsZSAoYl9Nb2R1bE5icikKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6CisJQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwKK3wgICBCWVRFXyBiX01vZHVsTmJyICBDUl9BUkVGKGFyZWYpICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKXwKK3wgICBCWVRFXyBiX1BvcnRWYWx1ZSBDUl9DSEFOKGNoYW5zcGVjKSA6IE91dHB1dCBWYWx1ZSAoIDAgVG8gNyApCit8ICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICByZWFkIG9yIHdyaXRlIHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgICAgICAgICBpZiB3cml0ZSB0aGVuIGluZGljYXRlIE9OIG9yIE9GRgorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWFkIDogZGF0YVsxXSB3aWxsIHJldHVybiBwb3J0IHN0YXR1cy4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOgorCisgICAgICAgICAgICAgICAgSU5QVVQgOgorCisJCQkJCSAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBEaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQKKworCQkJCU9VVFBVVDoJICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IE91dHB1dCB2YWx1ZSB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogZGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiIGlfQVBDSTE3MTBfSW5pdERpZ2l0YWxJTyIgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRoZSBkaWdpdGFsIGNoYW5uZWwgQSBpcyB1c2VkIGZvciBpbnB1dCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogVGhlIGRpZ2l0YWwgY2hhbm5lbCBCIGlzIHVzZWQgZm9yIGlucHV0CisJCQkJCS04OiBEaWdpdGFsIE91dHB1dCBNZW1vcnkgT0ZGLiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBwcmV2aW91c2x5IHRoZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfU2V0RGlnaXRhbElPTWVtb3J5T24iLiAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLy9fSU5UXyAgIGlfQVBDSTE3MTBfU2V0RGlnaXRhbElPUG9ydE9uICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfUG9ydFZhbHVlKQorSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNEaWdpdGFsSU9Qb3J0T25PZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19Xcml0ZVZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWc7CisJQllURSBiX01vZHVsTmJyLCBiX1BvcnRWYWx1ZTsKKwlCWVRFIGJfUG9ydE9wZXJhdGlvbiwgYl9Qb3J0T25PRkY7CisKKwlQQllURSBwYl9Qb3J0VmFsdWU7CisKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUG9ydE9wZXJhdGlvbiA9IChCWVRFKSBkYXRhWzBdOwkvLyBJbnB1dCBvciBvdXRwdXQKKwliX1BvcnRPbk9GRiA9IChCWVRFKSBkYXRhWzFdOwkvLyBpZiBvdXRwdXQgdGhlbiBPbiBvciBPZmYKKwliX1BvcnRWYWx1ZSA9IChCWVRFKSBkYXRhWzJdOwkvLyBpZiBvdXQgcHV0IHRoZW4gVmFsdWUKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlwYl9Qb3J0VmFsdWUgPSAoUEJZVEUpICYgZGF0YVswXTsKKy8vIGlmIGlucHV0IHRoZW4gcmVhZCB2YWx1ZQorCisJc3dpdGNoIChiX1BvcnRPcGVyYXRpb24pIHsKKwljYXNlIEFQQ0kxNzEwX0lOUFVUOgorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZGlnaXRhbCBJL08gY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0RJR0lUQUxfSU8pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRoZSBkaWdpdGFsIEkvTyBtb2R1bGUgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfRGlnaXRhbElPSW5mby5iX0RpZ2l0YWxJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCS8vSU5QRFcgKHBzX0FQQ0kxNzEwVmFyaWFibGUtPgorCQkJCQkvLyAgICAgIHNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLgorCQkJCQkvLyAgICAgIHNfQm9hcmRJbmZvcy4KKwkJCQkJLy8gICAgICB1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5iciksCisJCQkJCS8vICAgICAgJmR3X1N0YXR1c1JlZyk7CisKKwkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkqcGJfUG9ydFZhbHVlID0KKwkJCQkJCShCWVRFKSAoZHdfU3RhdHVzUmVnIF4gMHgxQyk7CisKKwkJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpZ2l0YWwgSS9PIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCX0KKwkJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CisJCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX09VVFBVVDoKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGRpZ2l0YWwgSS9PIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9ESUdJVEFMX0lPKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiB0aGUgZGlnaXRhbCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX0RpZ2l0YWxJT0luZm8uYl9EaWdpdGFsSW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHBvcnQgdmFsdWUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9Qb3J0VmFsdWUgPD0gNykgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIGNoYW5uZWwgQSB1c2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoYl9Qb3J0VmFsdWUgJiAyKSA9PSAyKSB7CisJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCWJfQ2hhbm5lbEFNb2RlCisJCQkJCQkJCSE9IDEpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRoZSBkaWdpdGFsIGNoYW5uZWwgQSBpcyB1c2VkIGZvciBpbnB1dCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS02OworCQkJCQkJCX0KKwkJCQkJCX0JLy8gaWYgKChiX1BvcnRWYWx1ZSAmIDIpID09IDIpCisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgY2hhbm5lbCBCIHVzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKChiX1BvcnRWYWx1ZSAmIDQpID09IDQpIHsKKwkJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJYl9DaGFubmVsQk1vZGUKKwkJCQkJCQkJIT0gMSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGhlIGRpZ2l0YWwgY2hhbm5lbCBCIGlzIHVzZWQgZm9yIGlucHV0ICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTc7CisJCQkJCQkJfQorCQkJCQkJfQkvLyBpZiAoKGJfUG9ydFZhbHVlICYgNCkgPT0gNCkKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBlcnJvciBvY2N1ciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKSB7CisKKwkJCQkJCQkvL2lmKGRhdGFbMV0pCisJCQkJCQkJLy97CisJCQkJCQkJc3dpdGNoIChiX1BvcnRPbk9GRikgeworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiBzZXQgUG9ydCBPTiAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWNhc2UgQVBDSTE3MTBfT046CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgb3V0cHV0IG1lbW9yeSBlbmFibGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQkJYl9PdXRwdXRNZW1vcnlFbmFibGVkCisJCQkJCQkJCQk9PSAxKSB7CisJCQkJCQkJCQlkd19Xcml0ZVZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCWJfUG9ydFZhbHVlOworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQkJCWR3X091dHB1dE1lbW9yeQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19Xcml0ZVZhbHVlOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJZHdfV3JpdGVWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BvcnRWYWx1ZTsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKworCQkJCQkJCQkvLyBJZiBTZXQgUE9SVCAgT0ZGCisJCQkJCQkJY2FzZSBBUENJMTcxMF9PRkY6CisKKwkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgb3V0cHV0IG1lbW9yeSBlbmFibGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQkJYl9PdXRwdXRNZW1vcnlFbmFibGVkCisJCQkJCQkJCQk9PSAxKSB7CisJCQkJCQkJCQlkd19Xcml0ZVZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCSgweEZGRkZGRkZGVUwKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJYl9Qb3J0VmFsdWUpOworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQkJCWR3X091dHB1dE1lbW9yeQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19Xcml0ZVZhbHVlOworCQkJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBEaWdpdGFsIE91dHB1dCBNZW1vcnkgT0ZGICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQktODsKKwkJCQkJCQkJfQorCQkJCQkJCX0JLy8gc3dpdGNoCisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFdyaXRlIHRoZSB2YWx1ZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkvLyAgT1VUUERXIChwc19BUENJMTcxMFZhcmlhYmxlLT4KKwkJCQkJCQkvLyAgICAgIHNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLgorCQkJCQkJCS8vICAgICAgc19Cb2FyZEluZm9zLgorCQkJCQkJCS8vICAgICAgdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpLAorCQkJCQkJCS8vICAgICAgZHdfV3JpdGVWYWx1ZSk7CisJCQkJCQkJb3V0bChkd19Xcml0ZVZhbHVlLAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBPdXRwdXQgdmFsdWUgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpZ2l0YWwgSS9PIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CisJCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaV9SZXR1cm5WYWx1ZSA9IC05OworCQlEUFJJTlRLKCJOTyBJTlBVVC9PVVRQVVQgc3BlY2lmaWVkXG4iKTsKKwl9CQkJLy9zd2l0Y2ggSU5QVVQgLyBPVVRQVVQKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfRGlnX2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmMTU3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfRGlnX2lvLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF9PTgkJCTEJLyogRGlnaXRhbCAgT3V0cHV0IE9OIG9yIE9GRiAqLworI2RlZmluZSBBUENJMTcxMF9PRkYJCQkwCisKKyNkZWZpbmUgQVBDSTE3MTBfSU5QVVQJCQkwCS8qIERpZ2l0YWwgSS9PICovCisjZGVmaW5lIEFQQ0kxNzEwX09VVFBVVAkJCTEKKworI2RlZmluZSBBUENJMTcxMF9ESUdJT19NRU1PUllPTk9GRgkweDEwCisjZGVmaW5lIEFQQ0kxNzEwX0RJR0lPX0lOSVQJCTB4MTEKKworLyoKKyAqIERJR0lUQUwgSS9PIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdEaWdpdGFsSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorICogSU5QVVQgT1VUUFVUICBGVU5DVElPTlMKKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWREaWdpdGFsSU9DaGxWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZURpZ2l0YWxJT0NobE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c0RpZ2l0YWxJT1BvcnRPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjJmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5jCkBAIC0wLDAgKzEsNTM2MyBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBJIEFQQ0kxNzEwICAgIHwgQ29tcGlsZXIgOiBnY2MgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBJTkNfQ1BULkMgICAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNzEwIGluY3JlbWVudGFsIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfC0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDI5LzA2LzAxIHwgR3Vpbm90IEMuIHwgLSAxMTAwLzAyMzEgLT4gMDcwMS8wMjMyICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCBTZWUgaV9BUENJMTcxMF9EaXNhYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJBUENJMTcxMF9JTkNDUFQuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJTlQJaV9BUENJMTcxMF9JbnNuQ29uZmlnSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmF0aW9uIGZ1bmN0aW9uIGZvciBJTkNfQ1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6ICpkYXRhCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0NvbmZpZ1R5cGU7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCXVpX0NvbmZpZ1R5cGUgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXByaW50aygiXG5JTkNfQ1BUIik7CisKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CS8vIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyB0YXNrIHN0cnVjdHVyZQorCXN3aXRjaCAodWlfQ29uZmlnVHlwZSkgeworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0lOSVRDT1VOVEVSOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Jbml0Q291bnRlcihkZXYsCisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLAorCQkJKEJZVEUpIGRhdGFbMV0sCisJCQkoQllURSkgZGF0YVsyXSwgKEJZVEUpIGRhdGFbM10sIChCWVRFKSBkYXRhWzRdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9DT1VOVEVSQVVUT1RFU1Q6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0NvdW50ZXJBdXRvVGVzdChkZXYsCisJCQkoUEJZVEUpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfSU5JVElOREVYOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Jbml0SW5kZXgoZGV2LAorCQkJQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgZGF0YVswXSwKKwkJCShCWVRFKSBkYXRhWzFdLCAoQllURSkgZGF0YVsyXSwgKEJZVEUpIGRhdGFbM10pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0lOSVRSRUZFUkVOQ0U6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0luaXRSZWZlcmVuY2UoZGV2LAorCQkJQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChCWVRFKSBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9JTklURVhURVJOQUxTVFJPQkU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0luaXRFeHRlcm5hbFN0cm9iZShkZXYsCisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLCAoQllURSkgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfSU5JVENPTVBBUkVMT0dJQzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfSW5pdENvbXBhcmVMb2dpYyhkZXYsCisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFVJTlQpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0lOSVRGUkVRVUVOQ1lNRUFTVVJFTUVOVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50KGRldiwKKwkJCUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKEJZVEUpIGRhdGFbMF0sCisJCQkoQllURSkgZGF0YVsxXSwgKFVMT05HKSBkYXRhWzJdLCAoUFVMT05HKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiSW5zbiBDb25maWcgOiBDb25maWcgUGFyYW1ldGVyIFdyb25nXG4iKTsKKworCX0KKworCWlmIChpX1JldHVyblZhbHVlID49IDApCisJCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0luaXRDb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgICAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfQ291bnRlclJhbmdlLCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9GaXJzdENvdW50ZXJNb2R1cywgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX0ZpcnN0Q291bnRlck9wdGlvbiwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfU2Vjb25kQ291bnRlck1vZHVzLCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9TZWNvbmRDb3VudGVyT3B0aW9uKSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmUgdGhlIGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgZnJvbSBzZWxlY3RlZCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSB8Cit8ICAgICAgICAgICAgICAgICAgICAgZm9yIHlvdSBjYWxsIGFueSBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBjb3VudGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyIHJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Cit8IHwgUGFyYW1ldGVyICAgICAgIFBhc3NlZCB2YWx1ZSAgICAgICB8ICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICB8IHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorfCB8Yl9Nb2R1bE5iciAgIEFQQ0kxNzEwXzE2QklUX0NPVU5URVIgfCAgVGhlIG1vZHVsZSBpcyBjb25maWd1cmVkIGZvciAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0d28gMTYtYml0IGNvdW50ZXIuICAgICAgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIC0gYl9GaXJzdENvdW50ZXJNb2R1cyBhbmQgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBiX0ZpcnN0Q291bnRlck9wdGlvbiAgICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGNvbmZpZ3VyZSB0aGUgZmlyc3QgMTYgYml0ICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgY291bnRlci4gICAgICAgICAgICAgICAgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgLSBiX1NlY29uZENvdW50ZXJNb2R1cyBhbmQgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGJfU2Vjb25kQ291bnRlck9wdGlvbiAgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgY29uZmlndXJlIHRoZSBzZWNvbmQgMTYgYml0ICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBjb3VudGVyLiAgICAgICAgICAgICAgICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfTW9kdWxOYnIgICBBUENJMTcxMF8zMkJJVF9DT1VOVEVSIHwgIFRoZSBtb2R1bGUgaXMgY29uZmlndXJlZCBmb3Igb25lIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzItYml0IGNvdW50ZXIuICAgICAgICAgICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAtIGJfRmlyc3RDb3VudGVyTW9kdXMgYW5kICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgYl9GaXJzdENvdW50ZXJPcHRpb24gICAgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBjb25maWd1cmUgdGhlIDMyIGJpdCBjb3VudGVyLiAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAtIGJfU2Vjb25kQ291bnRlck1vZHVzIGFuZCAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgYl9TZWNvbmRDb3VudGVyT3B0aW9uICAgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBhcmUgbm90IHVzZWQgYW5kIGhhdmUgbm8gICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGltcG9ydGFuY2UuICAgICAgICAgICAgICAgICAgICB8IHwKK3wgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgb3BlcmF0aW5nIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKK3wgfCAgICBQYXJhbWV0ZXIgICAgICAgfCAgICAgUGFzc2VkIHZhbHVlICAgICAgICB8ICAgIERlc2NyaXB0aW9uICAgICAgICAgIHwgfAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Cit8IHxiX0ZpcnN0Q291bnRlck1vZHVzIHwgQVBDSTE3MTBfUVVBRFJVUExFX01PREUgfCBJbiB0aGUgcXVhZHJ1cGxlIG1vZGUsICB8IHwKK3wgfCAgICAgICBvciAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBlZGdlIGFuYWx5c2lzICAgICAgIHwgfAorfCB8Yl9TZWNvbmRDb3VudGVyTW9kdXN8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2lyY3VpdCBnZW5lcmF0ZXMgYSAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb3VudGluZyBwdWxzZSBmcm9tICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGVhY2ggZWRnZSBvZiAyIHNpZ25hbHMgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hpY2ggYXJlIHBoYXNlIHNoaWZ0ZWQgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbiByZWxhdGlvbiB0byBlYWNoICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG90aGVyLiAgICAgICAgICAgICAgICAgIHwgfAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Cit8IHxiX0ZpcnN0Q291bnRlck1vZHVzIHwgICBBUENJMTcxMF9ET1VCTEVfTU9ERSAgfCBGdW5jdGlvbnMgaW4gdGhlIHNhbWUgICB8IHwKK3wgfCAgICAgICBvciAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHdheSBhcyB0aGUgcXVhZHJ1cGxlICAgIHwgfAorfCB8Yl9TZWNvbmRDb3VudGVyTW9kdXN8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW9kZSwgZXhjZXB0IHRoYXQgb25seSAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB0d28gb2YgdGhlIGZvdXIgZWRnZXMgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZSBhbmFseXNlZCBwZXIgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGVyaW9kICAgICAgICAgICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfRmlyc3RDb3VudGVyTW9kdXMgfCAgIEFQQ0kxNzEwX1NJTVBMRV9NT0RFICB8IEZ1bmN0aW9ucyBpbiB0aGUgc2FtZSAgIHwgfAorfCB8ICAgICAgIG9yICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2F5IGFzIHRoZSBxdWFkcnVwbGUgICAgfCB8Cit8IHxiX1NlY29uZENvdW50ZXJNb2R1c3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBtb2RlLCBleGNlcHQgdGhhdCBvbmx5ICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG9uZSBvZiB0aGUgZm91ciBlZGdlcyAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXMgYW5hbHlzZWQgcGVyICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwZXJpb2QuICAgICAgICAgICAgICAgICB8IHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorfCB8Yl9GaXJzdENvdW50ZXJNb2R1cyB8ICAgQVBDSTE3MTBfRElSRUNUX01PREUgIHwgSW4gdGhlIGRpcmVjdCBtb2RlIHRoZSAgfCB8Cit8IHwgICAgICAgb3IgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBib3RoIGVkZ2UgYW5hbHlzaXMgICAgICB8IHwKK3wgfGJfU2Vjb25kQ291bnRlck1vZHVzfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNpcmN1aXRzIGFyZSBpbmFjdGl2ZS4gIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGlucHV0cyBBLCBCIGluIHRoZSAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMi1iaXQgbW9kZSBvciBBLCBCIGFuZCB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IEMsIEQgaW4gdGhlIDE2LWJpdCBtb2RlIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwcmVzZW50LCBlYWNoLCBvbmUgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbG9jayBwdWxzZSBnYXRlIGNpcmN1aXR8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZXJlIGJ5IGZyZXF1ZW5jeSBhbmQgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHVsc2UgZHVyYXRpb24gICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBtZWFzdXJlbWVudHMgY2FuIGJlICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHBlcmZvcm1lZC4gICAgICAgICAgICAgIHwgfAorfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICBJTVBPUlRBTlQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIElmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgdGhlIG1vZHVsZSBmb3IgdHdvIDE2LWJpdCBjb3VudGVyLCBhIG1peGVkICAgIHwKK3wgICAgICAgbW9kZSB3aXRoIGEgY291bnRlciBpbiBxdWFkcnVwbGUvZG91YmxlL3NpbmdsZSBtb2RlICAgICAgICAgICAgICAgICAgfAorfCAgICAgICBhbmQgdGhlIG90aGVyIGNvdW50ZXIgaW4gZGlyZWN0IG1vZGUgaXMgbm90IHBvc3NpYmxlISAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgIENvdW50ZXIgb3BlcmF0aW5nIG9wdGlvbiBmb3IgcXVhZHJ1cGxlL2RvdWJsZS9zaW1wbGUgbW9kZSAgICAgICAgICB8Cit8ICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8IHwgICAgICAgUGFyYW1ldGVyICAgICAgfCAgICAgUGFzc2VkIHZhbHVlICAgICAgICB8ICBEZXNjcmlwdGlvbiAgICAgICAgICAgfHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18fAorfCB8Yl9GaXJzdENvdW50ZXJPcHRpb24gIHwgQVBDSTE3MTBfSFlTVEVSRVNJU19PTiAgfCBJbiBib3RoIGVkZ2UgYW5hbHlzaXMgIHx8Cit8IHwgICAgICAgIG9yICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNpcmN1aXRzIGlzIGF2YWlsYWJsZSAgfHwKK3wgfGJfU2Vjb25kQ291bnRlck9wdGlvbiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgb25lIGh5c3RlcmVzaXMgY2lyY3VpdC58fAorfCB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBJdCBzdXBwcmVzc2VzIGVhY2ggICAgIHx8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHRpbWUgdGhlIGZpcnN0IGNvdW50aW5nfHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHVsc2UgYWZ0ZXIgYSBjaGFuZ2UgICB8fAorfCB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBvZiByb3RhdGlvbi4gICAgICAgICAgIHx8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfHwKK3wgfGJfRmlyc3RDb3VudGVyT3B0aW9uICB8IEFQQ0kxNzEwX0hZU1RFUkVTSVNfT0ZGIHwgVGhlIGZpcnN0IGNvdW50aW5nICAgICB8fAorfCB8ICAgICAgIG9yICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwdWxzZSBpcyBub3Qgc3VwcHJlc3MgIHx8Cit8IHxiX1NlY29uZENvdW50ZXJPcHRpb24gfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGFmdGVyIGEgY2hhbmdlIG9mICAgICAgfHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcm90YXRpb24uICAgICAgICAgICAgICB8fAorfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICBJTVBPUlRBTlQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIFRoaXMgb3B0aW9uIGFyZSBvbmx5IGF2YWlibGUgaWYgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIGRpcmVjdCBtb2RlLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgQ291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGZvciBkaXJlY3QgbW9kZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKK3wgfCAgICAgIFBhcmFtZXRlciAgICAgICB8ICAgICBQYXNzZWQgdmFsdWUgICB8ICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgIHwgfAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Cit8IHxiX0ZpcnN0Q291bnRlck9wdGlvbiAgfCBBUENJMTcxMF9JTkNSRU1FTlQgfCBUaGUgY291bnRlciBpbmNyZW1lbnQgZm9yICB8IHwKK3wgfCAgICAgICBvciAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8IGVhY2ggY291bnRpbmcgcHVsc2UgICAgICAgIHwgfAorfCB8Yl9TZWNvbmRDb3VudGVyT3B0aW9uIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfRmlyc3RDb3VudGVyT3B0aW9uICB8IEFQQ0kxNzEwX0RFQ1JFTUVOVCB8IFRoZSBjb3VudGVyIGRlY3JlbWVudCBmb3IgIHwgfAorfCB8ICAgICAgIG9yICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgZWFjaCBjb3VudGluZyBwdWxzZSAgICAgICAgfCB8Cit8IHxiX1NlY29uZENvdW50ZXJPcHRpb24gfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKK3wgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0NvdW50ZXJSYW5nZSAgICAgICAgOiBTZWxlY3Rpb24gZm9ybSBjb3VudGVyICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9GaXJzdENvdW50ZXJNb2R1cyAgIDogRmlyc3QgY291bnRlciBvcGVyYXRpbmcgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlLiAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfRmlyc3RDb3VudGVyT3B0aW9uICA6IEZpcnN0IGNvdW50ZXIgIG9wdGlvbi4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TZWNvbmRDb3VudGVyTW9kdXMgIDogU2Vjb25kIGNvdW50ZXIgb3BlcmF0aW5nIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlLiAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU2Vjb25kQ291bnRlck9wdGlvbiA6IFNlY29uZCBjb3VudGVyICBvcHRpb24uICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIHNlbGVjdGVkIGNvdW50ZXIgcmFuZ2UgaXMgd3JvbmcuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgZmlyc3QgY291bnRlciBvcGVyYXRpbmcgbW9kZSBpcyB3cm9uZy4gfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFRoZSBzZWxlY3RlZCBmaXJzdCBjb3VudGVyIG9wZXJhdGluZyBvcHRpb24gaXMgd3Jvbmd8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVGhlIHNlbGVjdGVkIHNlY29uZCBjb3VudGVyIG9wZXJhdGluZyBtb2RlIGlzIHdyb25nLnwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBUaGUgc2VsZWN0ZWQgc2Vjb25kIGNvdW50ZXIgb3BlcmF0aW5nIG9wdGlvbiBpcyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIHdyb25nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luaXRDb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlCWVRFIGJfQ291bnRlclJhbmdlLAorCUJZVEUgYl9GaXJzdENvdW50ZXJNb2R1cywKKwlCWVRFIGJfRmlyc3RDb3VudGVyT3B0aW9uLAorCUJZVEUgYl9TZWNvbmRDb3VudGVyTW9kdXMsIEJZVEUgYl9TZWNvbmRDb3VudGVyT3B0aW9uKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgaW5jcmVtZW50YWwgY291bnRlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUikgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgY291bnRlciByYW5nZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db3VudGVyUmFuZ2UgPT0gQVBDSTE3MTBfMTZCSVRfQ09VTlRFUgorCQkJfHwgYl9Db3VudGVyUmFuZ2UgPT0gQVBDSTE3MTBfMzJCSVRfQ09VTlRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGZpcnN0IGNvdW50ZXIgbW9kdXMgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0ZpcnN0Q291bnRlck1vZHVzID09IEFQQ0kxNzEwX1FVQURSVVBMRV9NT0RFIHx8CisJCQkJYl9GaXJzdENvdW50ZXJNb2R1cyA9PSBBUENJMTcxMF9ET1VCTEVfTU9ERSB8fAorCQkJCWJfRmlyc3RDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfU0lNUExFX01PREUgfHwKKwkJCQliX0ZpcnN0Q291bnRlck1vZHVzID09IEFQQ0kxNzEwX0RJUkVDVF9NT0RFKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGZpcnN0IGNvdW50ZXIgb3B0aW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChiX0ZpcnN0Q291bnRlck1vZHVzID09IEFQQ0kxNzEwX0RJUkVDVF9NT0RFCisJCQkJCQkmJiAoYl9GaXJzdENvdW50ZXJPcHRpb24gPT0KKwkJCQkJCQlBUENJMTcxMF9JTkNSRU1FTlQKKwkJCQkJCQl8fCBiX0ZpcnN0Q291bnRlck9wdGlvbgorCQkJCQkJCT09IEFQQ0kxNzEwX0RFQ1JFTUVOVCkpCisJCQkJCXx8IChiX0ZpcnN0Q291bnRlck1vZHVzICE9CisJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERQorCQkJCQkJJiYgKGJfRmlyc3RDb3VudGVyT3B0aW9uID09CisJCQkJCQkJQVBDSTE3MTBfSFlTVEVSRVNJU19PTgorCQkJCQkJCXx8IGJfRmlyc3RDb3VudGVyT3B0aW9uCisJCQkJCQkJPT0KKwkJCQkJCQlBUENJMTcxMF9IWVNURVJFU0lTX09GRikpKQorCQkJCXsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX0NvdW50ZXJSYW5nZSA9PQorCQkJCQkJQVBDSTE3MTBfMTZCSVRfQ09VTlRFUikgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIHNlY29uZCBjb3VudGVyIG1vZHVzICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGJfRmlyc3RDb3VudGVyTW9kdXMgIT0KKwkJCQkJCQkJQVBDSTE3MTBfRElSRUNUX01PREUKKwkJCQkJCQkJJiYKKwkJCQkJCQkJKGJfU2Vjb25kQ291bnRlck1vZHVzCisJCQkJCQkJCQk9PQorCQkJCQkJCQkJQVBDSTE3MTBfUVVBRFJVUExFX01PREUKKwkJCQkJCQkJCXx8CisJCQkJCQkJCQliX1NlY29uZENvdW50ZXJNb2R1cworCQkJCQkJCQkJPT0KKwkJCQkJCQkJCUFQQ0kxNzEwX0RPVUJMRV9NT0RFCisJCQkJCQkJCQl8fAorCQkJCQkJCQkJYl9TZWNvbmRDb3VudGVyTW9kdXMKKwkJCQkJCQkJCT09CisJCQkJCQkJCQlBUENJMTcxMF9TSU1QTEVfTU9ERSkpCisJCQkJCQkJfHwgKGJfRmlyc3RDb3VudGVyTW9kdXMKKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfRElSRUNUX01PREUKKwkJCQkJCQkJJiYKKwkJCQkJCQkJYl9TZWNvbmRDb3VudGVyTW9kdXMKKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfRElSRUNUX01PREUpKQorCQkJCQkJeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBzZWNvbmQgY291bnRlciBvcHRpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGJfU2Vjb25kQ291bnRlck1vZHVzID09IEFQQ0kxNzEwX0RJUkVDVF9NT0RFICYmIChiX1NlY29uZENvdW50ZXJPcHRpb24gPT0gQVBDSTE3MTBfSU5DUkVNRU5UIHx8IGJfU2Vjb25kQ291bnRlck9wdGlvbiA9PSBBUENJMTcxMF9ERUNSRU1FTlQpKSB8fCAoYl9TZWNvbmRDb3VudGVyTW9kdXMgIT0gQVBDSTE3MTBfRElSRUNUX01PREUgJiYgKGJfU2Vjb25kQ291bnRlck9wdGlvbiA9PSBBUENJMTcxMF9IWVNURVJFU0lTX09OIHx8IGJfU2Vjb25kQ291bnRlck9wdGlvbiA9PSBBUENJMTcxMF9IWVNURVJFU0lTX09GRikpKSB7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJMDsKKwkJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgc2Vjb25kIGNvdW50ZXIgb3BlcmF0aW5nIG9wdGlvbiBpcyB3cm9uZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgc2Vjb25kIGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgc2Vjb25kIGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBmaXJzdCBjb3VudGVyIG9wZXJhdGluZyBvcHRpb24gaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgZmlyc3QgY291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBmaXJzdCBjb3VudGVyIG9wZXJhdGluZyBtb2RlIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBmaXJzdCBjb3VudGVyIG9wZXJhdGluZyBtb2RlIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBzZWxlY3RlZCBjb3VudGVyIHJhbmdlIGlzIHdyb25nICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGNvdW50ZXIgcmFuZ2UgaXMgd3JvbmdcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBhIGVycm9yIG9jY3VyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGlfUmV0dXJuVmFsdWUgPT0gMCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgMTYtQml0IGNvdW50ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0NvdW50ZXJSYW5nZSA9PSBBUENJMTcxMF8zMkJJVF9DT1VOVEVSKSB7CisJCQkJZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMSA9IGJfQ291bnRlclJhbmdlIHwKKwkJCQkJYl9GaXJzdENvdW50ZXJNb2R1cyB8CisJCQkJCWJfRmlyc3RDb3VudGVyT3B0aW9uOworCQkJfSBlbHNlIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIxID0gYl9Db3VudGVyUmFuZ2UgfAorCQkJCQkoYl9GaXJzdENvdW50ZXJNb2R1cyAmIDB4NSkgfAorCQkJCQkoYl9GaXJzdENvdW50ZXJPcHRpb24gJiAweDIwKSB8CisJCQkJCShiX1NlY29uZENvdW50ZXJNb2R1cyAmIDB4QSkgfAorCQkJCQkoYl9TZWNvbmRDb3VudGVyT3B0aW9uICYgMHg0MCk7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGRpcmVjdCBtb2RlICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoYl9GaXJzdENvdW50ZXJNb2R1cyA9PSBBUENJMTcxMF9ESVJFQ1RfTU9ERSkgeworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjEgPSBkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjEgfAorCQkJCQkJQVBDSTE3MTBfRElSRUNUX01PREU7CisJCQkJfQorCQkJfQorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDIwICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQlkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID0gMTsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGNvdW50ZXIgbW9kdWxlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGVcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfQ291bnRlckF1dG9UZXN0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9UZXN0U3RhdHVzKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQSB0ZXN0IG1vZGUgaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgdGhlIGNvbXBvbmVudCBhbmQgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGVkIHBlcmlwaGVyeS4gQWxsIHRoZSA4LWJpdCBjb3VudGVyIGNoYWlucyAgfAorfCAgICAgICAgICAgICAgICAgICAgIGFyZSBvcGVyYXRlZCBpbnRlcm5hbGx5IGFzIGRvd24gY291bnRlcnMuICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSW5kZXBlbmRlbnRseSBmcm9tIHRoZSBleHRlcm5hbCBzaWduYWxzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbGwgdGhlIGZvdXIgOC1iaXQgY291bnRlciBjaGFpbnMgYXJlIGRlY3JlbWVudGVkIGluICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsIGJ5IGVhY2ggbmVnYXRpdmUgY2xvY2sgcHVsc2UgZWRnZSBvZiBDTEtYLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgYXV0byB0ZXN0IGNvbmNsdXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwgcGJfVGVzdFN0YXR1cyAgIHwgICAgRXJyb3IgZGVzY3JpcHRpb24gICAgICAgIHwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfCAgICAgbWFzayAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwgICAgMDAwMCAgICAgICAgIHwgICAgIE5vIGVycm9yIGRldGVjdGVkICAgICAgIHwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8ICAgIDAwMDEgICAgICAgICB8IEVycm9yIGRldGVjdGVkIG9mIGNvdW50ZXIgMCB8ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfCAgICAwMDEwICAgICAgICAgfCBFcnJvciBkZXRlY3RlZCBvZiBjb3VudGVyIDEgfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwgICAgMDEwMCAgICAgICAgIHwgRXJyb3IgZGV0ZWN0ZWQgb2YgY291bnRlciAyIHwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8ICAgIDEwMDAgICAgICAgICB8IEVycm9yIGRldGVjdGVkIG9mIGNvdW50ZXIgMyB8ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9UZXN0U3RhdHVzICA6IEF1dG8gdGVzdCBjb25jbHVzaW9uLiBTZWUgdGFibGV8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfQ291bnRlckF1dG9UZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBQQllURSBwYl9UZXN0U3RhdHVzKQoreworCUJZVEUgYl9Nb2R1bENwdCA9IDA7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X0xhdGhjaFZhbHVlOworCisJKnBiX1Rlc3RTdGF0dXMgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgY291bnRlciBtb2R1bGUgZm91bmQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uWzBdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSCisJCXx8IChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvblsxXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUgorCQl8fCAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMl0gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIKKwkJfHwgKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uWzNdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisJCWZvciAoYl9Nb2R1bENwdCA9IDA7IGJfTW9kdWxDcHQgPCA0OyBiX01vZHVsQ3B0KyspIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW5jcmVtZW50YWwgY291bnRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bENwdF0gJgorCQkJCQkweEZGRkYwMDAwVUwpID09CisJCQkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUikgeworCQkgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTdGFydCB0aGUgdGVzdCAqLworCQkgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMywgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTYgKyAoNjQgKiBiX01vZHVsQ3B0KSk7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGF0Y2ggdGhlIGNvdW50ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxDcHQpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIHRoZSBsYXRjaCB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X0xhdGhjaFZhbHVlID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDQgKyAoNjQgKiBiX01vZHVsQ3B0KSk7CisKKwkJCQlpZiAoKGR3X0xhdGhjaFZhbHVlICYgMHhGRikgIT0KKwkJCQkJKChkd19MYXRoY2hWYWx1ZSA+PiA4KSAmIDB4RkYpCisJCQkJCSYmIChkd19MYXRoY2hWYWx1ZSAmIDB4RkYpICE9CisJCQkJCSgoZHdfTGF0aGNoVmFsdWUgPj4gMTYpICYgMHhGRikKKwkJCQkJJiYgKGR3X0xhdGhjaFZhbHVlICYgMHhGRikgIT0KKwkJCQkJKChkd19MYXRoY2hWYWx1ZSA+PiAyNCkgJiAweEZGKSkgeworCQkJCQkqcGJfVGVzdFN0YXR1cyA9CisJCQkJCQkqcGJfVGVzdFN0YXR1cyB8ICgxIDw8CisJCQkJCQliX01vZHVsQ3B0KTsKKwkJCQl9CisKKwkJIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTdG9wIHRoZSB0ZXN0ICovCisJCSAvKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bENwdCkpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTm8gY291bnRlciBtb2R1bGUgZm91bmRcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdEluZGV4IChCWVRFXyBiX0JvYXJkSGFuZGxlLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIsICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9SZWZlcmVuY2VBY3Rpb24sICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0luZGV4T3BlcmF0aW9uLCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQXV0b01vZGUsICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnRlcnJ1cHRFbmFibGUpICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogSW5pdGlhbGlzZSB0aGUgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUgc2VsZWN0ZWQgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiBJZiBhIElOREVYIGZsYWcgb2NjdXIsIHlvdSBoYXZlICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBwb3NzaWJpbGl0eSB0byBjbGVhciB0aGUgMzItQml0IGNvdW50ZXIgb3IgdG8gbGF0Y2h8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgMzItQml0IHZhbHVlIGluIHRvIHRoZSBmaXJzdCBsYXRjaCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlci4gVGhlIGJfSW5kZXhPcGVyYXRpb24gcGFyYW1ldGVyIGdpdmUgdGhlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmlsaXR5IHRvIGNob2ljZSB0aGUgSU5ERVggYWN0aW9uLiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgZW5hYmxlZCB0aGUgYXV0b21hdGljIG1vZGUsIGVhY2ggSU5ERVggICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5LCBlbHNlIHlvdSBtdXN0IHJlYWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmRleCBzdGF0dXMgKCJpX0FQQ0kxNzEwX1JlYWRJbmRleFN0YXR1cyIpICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZWFjaCBJTkRFWCBhY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IGFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKK3wgICAgICAgICAgIHwgICBiX0luZGV4T3BlcmF0aW9uICAgICB8ICAgICAgICAgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgfCAgfAorfCAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICB8Cit8ICAgICAgICAgICB8QVBDSTE3MTBfTEFUQ0hfQ09VTlRFUiAgfCBBZnRlciBhIGluZGV4IHNpZ25hbCwgdGhlIGNvdW50ZXIgIHwgIHwKK3wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8IHZhbHVlICgzMi1CaXQpIGlzIGxhdGNoZWQgaW4gdG8gICAgfCAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGZpcnN0IGxhdGNoIHJlZ2lzdGVyICAgICAgICAgICB8ICB8Cit8ICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgIHwKK3wgICAgICAgICAgIHxBUENJMTcxMF9DTEVBUl9DT1VOVEVSICB8IEFmdGVyIGEgaW5kZXggc2lnbmFsLCB0aGUgY291bnRlciAgfCAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgdmFsdWUgaXMgY2xlYXJlZCAoMzItQml0KSAgICAgICAgICB8ICB8Cit8ICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfUmVmZXJlbmNlQWN0aW9uIDogRGV0ZXJtaW5lIGlmIHRoZSByZWZlcmVuY2UgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IHNldCBvciBubyBmb3IgdGhlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGFuY2UgZnJvbSBpbmRleCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRU5BQkxFIDogICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgbXVzdCBiZSBzZXQgZm9yIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIHRoZSBpbmRleCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRSA6ICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgaGF2ZSBub3QgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFuY2UgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW5kZXhPcGVyYXRpb24gIDogSW5kZXggb3BlcmF0aW5nIG1vZGUuICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGFibGUuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0F1dG9Nb2RlICAgICAgICA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljIGluZGV4IHJlc2V0LiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEUgOiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBhdXRvbWF0aWMgbW9kZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRSA6ICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIGF1dG9tYXRpYyBtb2RlIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEUgOiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB0aGUgaW50ZXJydXB0ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRSA6ICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQgIFRoZSByZWZlcmVuY2UgYWN0aW9uIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVGhlIGluZGV4IG9wZXJhdGluZyBtb2RlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC02OiBUaGUgYXV0byBtb2RlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTc6IEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtODogSW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luaXRJbmRleChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1JlZmVyZW5jZUFjdGlvbiwKKwlCWVRFIGJfSW5kZXhPcGVyYXRpb24sIEJZVEUgYl9BdXRvTW9kZSwgQllURSBiX0ludGVycnVwdEVuYWJsZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHJlZmVyZW5jZSBwYXJhbWV0ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1JlZmVyZW5jZUFjdGlvbiA9PSBBUENJMTcxMF9FTkFCTEUgfHwKKwkJCQliX1JlZmVyZW5jZUFjdGlvbiA9PSBBUENJMTcxMF9ESVNBQkxFKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBpbmRleCBwYXJhbWV0ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGJfSW5kZXhPcGVyYXRpb24gPT0KKwkJCQkJQVBDSTE3MTBfSElHSF9FREdFX0xBVENIX0NPVU5URVIKKwkJCQkJfHwgYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9DT1VOVEVSCisJCQkJCXx8IGJfSW5kZXhPcGVyYXRpb24gPT0KKwkJCQkJQVBDSTE3MTBfSElHSF9FREdFX0NMRUFSX0NPVU5URVIKKwkJCQkJfHwgYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9MT1dfRURHRV9DTEVBUl9DT1VOVEVSCisJCQkJCXx8IGJfSW5kZXhPcGVyYXRpb24gPT0KKwkJCQkJQVBDSTE3MTBfSElHSF9FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSCisJCQkJCXx8IGJfSW5kZXhPcGVyYXRpb24gPT0KKwkJCQkJQVBDSTE3MTBfTE9XX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIpCisJCQkJeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBhdXRvIG1vZGUgcGFyYW1ldGVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfQXV0b01vZGUgPT0gQVBDSTE3MTBfRU5BQkxFIHx8CisJCQkJCQliX0F1dG9Nb2RlID09IEFQQ0kxNzEwX0RJU0FCTEUpCisJCQkJCXsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBpbnRlcnJ1cHQgbW9kZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfSW50ZXJydXB0RW5hYmxlID09CisJCQkJCQkJQVBDSTE3MTBfRU5BQkxFCisJCQkJCQkJfHwgYl9JbnRlcnJ1cHRFbmFibGUgPT0KKwkJCQkJCQlBUENJMTcxMF9ESVNBQkxFKSB7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBNYWt0ZSB0aGUgY29uZmlndXJhdGlvbiBjb21tYW5kbyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfUmVmZXJlbmNlQWN0aW9uID09CisJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRSkKKwkJCQkJCQl7CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJfAorCQkJCQkJCQkJQVBDSTE3MTBfRU5BQkxFX0lOREVYX0FDVElPTjsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjIKKwkJCQkJCQkJCSYKKwkJCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfSU5ERVhfQUNUSU9OOworCQkJCQkJCX0KKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIGxvdyBsZXZlbCBsYXRjaCBvci9hbmQgY2xlYXIgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQkJCQlBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9DT1VOVEVSCisJCQkJCQkJCXx8CisJCQkJCQkJCWJfSW5kZXhPcGVyYXRpb24KKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfTE9XX0VER0VfQ0xFQVJfQ09VTlRFUgorCQkJCQkJCQl8fAorCQkJCQkJCQliX0luZGV4T3BlcmF0aW9uCisJCQkJCQkJCT09CisJCQkJCQkJCUFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSKQorCQkJCQkJCXsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2V0IHRoZSBpbmRleCBsZXZlbCB0byBsb3cgKERRMjYpICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQl8CisJCQkJCQkJCQlBUENJMTcxMF9TRVRfTE9XX0lOREVYX0xFVkVMOworCQkJCQkJCX0gZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIGluZGV4IGxldmVsIHRvIGhpZ2ggKERRMjYpICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJJgorCQkJCQkJCQkJQVBDSTE3MTBfU0VUX0hJR0hfSU5ERVhfTEVWRUw7CisJCQkJCQkJfQorCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIGxhdGNoIGFuZCBjbGVhciBjb3VudGVyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChiX0luZGV4T3BlcmF0aW9uID09CisJCQkJCQkJCUFQQ0kxNzEwX0hJR0hfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUgorCQkJCQkJCQl8fAorCQkJCQkJCQliX0luZGV4T3BlcmF0aW9uCisJCQkJCQkJCT09CisJCQkJCQkJCUFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSKQorCQkJCQkJCXsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIGxhdGNoIGFuZCBjbGVhciBmbGFnIChEUTI3KSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQl8CisJCQkJCQkJCQlBUENJMTcxMF9FTkFCTEVfTEFUQ0hfQU5EX0NMRUFSOworCQkJCQkJCX0JLy8gaWYgKGJfSW5kZXhPcGVyYXRpb24gPT0gQVBDSTE3MTBfSElHSF9FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSIHx8IGJfSW5kZXhPcGVyYXRpb24gPT0gQVBDSTE3MTBfTE9XX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIpCisJCQkJCQkJZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBDbGVhciB0aGUgbGF0Y2ggYW5kIGNsZWFyIGZsYWcgKERRMjcpICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJJgorCQkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRV9MQVRDSF9BTkRfQ0xFQVI7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiBsYXRjaCBjb3VudGVyICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGJfSW5kZXhPcGVyYXRpb24gPT0gQVBDSTE3MTBfSElHSF9FREdFX0xBVENIX0NPVU5URVIgfHwgYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9DT1VOVEVSKSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIEVuYWJsZSB0aGUgbGF0Y2ggZnJvbSBjb3VudGVyICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQliX01vZGVSZWdpc3RlcjIKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQliX01vZGVSZWdpc3RlcjIKKwkJCQkJCQkJCQl8CisJCQkJCQkJCQkJQVBDSTE3MTBfSU5ERVhfTEFUQ0hfQ09VTlRFUjsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogRW5hYmxlIHRoZSBjbGVhciBmcm9tIGNvdW50ZXIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkofkFQQ0kxNzEwX0lOREVYX0xBVENIX0NPVU5URVIpOworCQkJCQkJCQl9CisJCQkJCQkJfQkvLyAvLyBpZiAoYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIgfHwgYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUikKKworCQkJCQkJCWlmIChiX0F1dG9Nb2RlID09CisJCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEUpCisJCQkJCQkJeworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjIKKwkJCQkJCQkJCXwKKwkJCQkJCQkJCUFQQ0kxNzEwX0lOREVYX0FVVE9fTU9ERTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjIKKwkJCQkJCQkJCSYKKwkJCQkJCQkJCSh+QVBDSTE3MTBfSU5ERVhfQVVUT19NT0RFKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0KKwkJCQkJCQkJQVBDSTE3MTBfRU5BQkxFKQorCQkJCQkJCXsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzCisJCQkJCQkJCQl8CisJCQkJCQkJCQlBUENJMTcxMF9FTkFCTEVfSU5ERVhfSU5UOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMworCQkJCQkJCQkJJgorCQkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRV9JTkRFWF9JTlQ7CisJCQkJCQkJfQorCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQlzX0luaXRGbGFnLgorCQkJCQkJCQliX0luZGV4SW5pdCA9IDE7CisKKwkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQlEUFJJTlRLKCJJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIGF1dG8gbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRoZSBhdXRvIG1vZGUgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBpbmRleCBvcGVyYXRpbmcgbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUaGUgaW5kZXggb3BlcmF0aW5nIG1vZGUgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUaGUgcmVmZXJlbmNlIGFjdGlvbiBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHJlZmVyZW5jZSBhY3Rpb24gcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdFJlZmVyZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1JlZmVyZW5jZUxldmVsKSAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbml0aWFsaXNlIHRoZSByZWZlcmVuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgc2VsZWN0ZWQgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgfCBiX1JlZmVyZW5jZUxldmVsICAgfCAgICAgICAgIE9wZXJhdGlvbiAgICAgICB8ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgIHwgICBBUENJMTcxMF9MT1cgICAgIHwgIFJlZmVyZW5jZSBvY2N1ciBpZiAiMCIgfCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICB8ICAgQVBDSTE3MTBfSElHSCAgICB8ICBSZWZlcmVuY2Ugb2NjdXIgaWYgIjEiIHwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfUmVmZXJlbmNlTGV2ZWwgIDogUmVmZXJlbmNlIGxldmVsLiAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBSZWZlcmVuY2UgbGV2ZWwgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luaXRSZWZlcmVuY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBCWVRFIGJfUmVmZXJlbmNlTGV2ZWwpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSByZWZlcmVuY2UgbGV2ZWwgcGFyYW1ldGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9SZWZlcmVuY2VMZXZlbCA9PSAwIHx8IGJfUmVmZXJlbmNlTGV2ZWwgPT0gMSkgeworCQkJCWlmIChiX1JlZmVyZW5jZUxldmVsID09IDEpIHsKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyID0gZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyIHwKKwkJCQkJCUFQQ0kxNzEwX1JFRkVSRU5DRV9ISUdIOworCQkJCX0gZWxzZSB7CisJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMiA9IGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMiAmCisJCQkJCQlBUENJMTcxMF9SRUZFUkVOQ0VfTE9XOworCQkJCX0KKworCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQsCisJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Jbml0RmxhZy5iX1JlZmVyZW5jZUluaXQgPSAxOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWZlcmVuY2UgbGV2ZWwgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJSZWZlcmVuY2UgbGV2ZWwgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfCWlfQVBDSTE3MTBfSW5pdEV4dGVybmFsU3Ryb2JlICAgICAgICAgICAgICAgIHwKK3wJCQkJCShCWVRFXyBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICB8Cit8CQkJCQkgQllURV8gYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfIGJfRXh0ZXJuYWxTdHJvYmUsICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX0V4dGVybmFsU3Ryb2JlTGV2ZWwpICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbml0aWFsaXNlcyB0aGUgZXh0ZXJuYWwgc3Ryb2JlIGxldmVsIGNvcnJlc3BvbmRpbmcgdG8gfAorfAkJICAgICAgdGhlIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgQllURV8gYl9FeHRlcm5hbFN0cm9iZSAgOiBFeHRlcm5hbCBzdHJvYmUgc2VsZWN0aW9uICAgIHwKK3wJCQkJCQkwIDogRXh0ZXJuYWwgc3Ryb2JlIEEgICAgICAgIHwKK3wJCQkJCQkxIDogRXh0ZXJuYWwgc3Ryb2JlIEIgICAgICAgIHwKK3wJCSAgICAgIEJZVEVfIGJfRXh0ZXJuYWxTdHJvYmVMZXZlbCA6IEV4dGVybmFsIHN0cm9iZSBsZXZlbCAgICB8Cit8CQkJCQkJQVBDSTE3MTBfTE9XIDogICAgICAgICAgICAgICB8Cit8CQkJCQkJRXh0ZXJuYWwgbGF0Y2ggb2NjdXJzIGlmICIwIiB8Cit8CQkJCQkJQVBDSTE3MTBfSElHSCA6ICAgICAgICAgICAgICB8Cit8CQkJCQkJRXh0ZXJuYWwgbGF0Y2ggb2NjdXJzIGlmICIxIiB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogRXh0ZXJuYWwgc3Ryb2JlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBFeHRlcm5hbCBzdHJvYmUgbGV2ZWwgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luaXRFeHRlcm5hbFN0cm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9FeHRlcm5hbFN0cm9iZSwgQllURSBiX0V4dGVybmFsU3Ryb2JlTGV2ZWwpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBleHRlcm5hbCBzdHJvYmUgc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9FeHRlcm5hbFN0cm9iZSA9PSAwIHx8IGJfRXh0ZXJuYWxTdHJvYmUgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBsZXZlbCAqLworCQkgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9FeHRlcm5hbFN0cm9iZUxldmVsID09IEFQQ0kxNzEwX0hJR0gpIHx8CisJCQkJCSgoYl9FeHRlcm5hbFN0cm9iZUxldmVsID09IEFQQ0kxNzEwX0xPVworCQkJCQkJCSYmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQlbYl9Nb2R1bE5icl0gJgorCQkJCQkJCQkweEZGRkYpID49CisJCQkJCQkJMHgzMTM1KSkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2V0IHRoZSBsZXZlbCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyNCA9IChkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjQgJiAoMHhGRiAtCisJCQkJCQkJKDB4MTAgPDwgYl9FeHRlcm5hbFN0cm9iZSkpKSB8ICgoYl9FeHRlcm5hbFN0cm9iZUxldmVsIF4gMSkgPDwgKDQgKyBiX0V4dGVybmFsU3Ryb2JlKSk7CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRXh0ZXJuYWwgc3Ryb2JlIGxldmVsIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIkV4dGVybmFsIHN0cm9iZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfQkvLyBpZiAoYl9FeHRlcm5hbFN0cm9iZSA9PSAwIHx8IGJfRXh0ZXJuYWxTdHJvYmUgPT0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEV4dGVybmFsIHN0cm9iZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkV4dGVybmFsIHN0cm9iZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfRXh0ZXJuYWxTdHJvYmUgPT0gMCB8fCBiX0V4dGVybmFsU3Ryb2JlID09IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworCS8qCisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdENvbXBhcmVMb2dpYyAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVF8gIHVpX0NvbXBhcmVWYWx1ZSkgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBUYXNrICAgICAgICAgICAgICA6IFNldCB0aGUgMzItQml0IGNvbXBhcmUgdmFsdWUuIEF0IHRoYXQgbW9tZW50IHRoYXQgdGhlICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsIGNvdW50ZXIgYXJyaXZlIHRvIHRoZSBjb21wYXJlIHZhbHVlICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICh1aV9Db21wYXJlVmFsdWUpIGEgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlRfIHVpX0NvbXBhcmVWYWx1ZSAgIDogMzItQml0IGNvbXBhcmUgdmFsdWUgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0KKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdENvbXBhcmVMb2dpYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFVJTlQgdWlfQ29tcGFyZVZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisKKwkJCW91dGwodWlfQ29tcGFyZVZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDI4ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQlkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0NvbXBhcmVMb2dpY0luaXQgPSAxOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0luaXRGcmVxdWVuY3lNZWFzdXJlbWVudCAgICAgICAgICAgICAgfAorfAkJCQkoQllURV8JCSBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgfAorfAkJCQkgQllURV8JCSBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgfAorfAkJCQkgQllURV8JCSBiX1BDSUlucHV0Q2xvY2ssICAgICAgICAgICAgfAorfAkJCQkgQllURV8JCSBiX1RpbWluZ1VuaXR5LCAgICAgICAgICAgICAgfAorfAkJCQkgVUxPTkdfIAl1bF9UaW1pbmdJbnRlcnZhbCwgICAgICAgICAgIHwKK3wJCQkJIFBVTE9OR18gICAgICAgcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCkgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU2V0cyB0aGUgdGltZSBmb3IgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudC4gICAgICAgICAgIHwKK3wJCSAgICAgIENvbmZpZ3VyZXMgdGhlIHNlbGVjdGVkIFRPUiBpbmNyZW1lbnRhbCBjb3VudGVyIG9mIHRoZSB8Cit8CQkgICAgICBzZWxlY3RlZCBtb2R1bGUgKGJfTW9kdWxOYnIpLiBUaGUgdWxfVGltaW5nSW50ZXJ2YWwgYW5kfAorfAkJICAgICAgdWxfVGltaW5nVW5pdHkgZGV0ZXJtaW5lIHRoZSB0aW1lIGJhc2UgZm9yIHRoZSAgICAgICAgIHwKK3wJCSAgICAgIG1lYXN1cmVtZW50LiBUaGUgcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCByZXR1cm5zIHRoZSAgICB8Cit8CQkgICAgICByZWFsIHRpbWUgdmFsdWUuIFlvdSBtdXN0IGNhbGwgdXAgdGhpcyBmdW5jdGlvbiBiZWZvcmUgfAorfAkJICAgICAgeW91IGNhbGwgdXAgYW55IG90aGVyIGZ1bmN0aW9uIHdoaWNoIGdpdmVzIGFjY2VzcyB0byAgIHwKK3wJCSAgICAgIHRoZSBmcmVxdWVuY3kgbWVhc3VyZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfAkJICAgICAgQllURV8gIGJfTW9kdWxOYnIJICAgICAgOglOdW1iZXIgb2YgdGhlIG1vZHVsZSB0byBiZSAgIHwKK3wJCQkJCQljb25maWd1cmVkICgwIHRvIDMpICAgICAgICAgIHwKK3wJCSAgICAgIEJZVEVfICBiX1BDSUlucHV0Q2xvY2sgIDoJU2VsZWN0aW9uIG9mIHRoZSBQQ0kgYnVzICAgICB8Cit8CQkJCQkJY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJLSBBUENJMTcxMF8zME1IWiA6ICAgICAgICAgICB8Cit8CQkJCQkJICBUaGUgUEMgaGFzIGEgUENJIGJ1cyBjbG9jayB8Cit8CQkJCQkJICBvZiAzMCBNSHogICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJLSBBUENJMTcxMF8zM01IWiA6ICAgICAgICAgICB8Cit8CQkJCQkJICBUaGUgUEMgaGFzIGEgUENJIGJ1cyBjbG9jayB8Cit8CQkJCQkJICBvZiAzMyBNSHogICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9UaW1pbmdVbml0eSAgICA6IEJhc2UgdGltZSB1bml0ICgwIHRvIDIpICAgICAgfAorfAkJCQkJCSAgMCA6IG5zICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgMSA6IMOmcyAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkgIDIgOiBtcyAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgIFVMT05HXyB1bF9UaW1pbmdJbnRlcnZhbDogQmFzZSB0aW1lIHZhbHVlLiAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgOiBSZWFsIGJhc2UgdGltZSB2YWx1ZS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wJCQkgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUaW1pbmcgdW5pdHkgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IEJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgIC03OiA0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luaXRGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1BDSUlucHV0Q2xvY2ssCisJQllURSBiX1RpbWluZ1VuaXR5LAorCVVMT05HIHVsX1RpbWluZ0ludGVydmFsLCBQVUxPTkcgcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUxPTkcgdWxfVGltZXJWYWx1ZSA9IDA7CisJZG91YmxlIGRfUmVhbFRpbWluZ0ludGVydmFsOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIFBDSSBidXMgY2xvY2sgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fAorCQkJCShiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopIHx8CisJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgdGltaW5nIHVuaXQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoYl9UaW1pbmdVbml0eSA8PSAyKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgYmFzZSB0aW1pbmcgc2VsZWN0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMCkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMjY2KQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk4NzM4MTMzVUwpKQorCQkJCQkJfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJODczOFVMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDIpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCThVTCkpCisJCQkJCQl8fCAoKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAwKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkyNDIpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCTc5NDM3NTdVTCkpCisJCQkJCQl8fCAoKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk3OTQzVUwpKQorCQkJCQkJfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMikKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJN1VMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDApCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTIwMCkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJNjU1MzUwMFVMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCTY1NTNVTCkpCisJCQkJCQl8fCAoKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAyKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk2VUwpKSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIDQwTUh6IHVzZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJQVBDSTE3MTBfNDBNSFopIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIGZpcm13YXJlID49IFJldjEuNSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzEzNSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIDQwTUh6IHF1YXJ0eiBvbiBib2FyZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCS8qSU5QRFcgKHBzX0FQQ0kxNzEwVmFyaWFibGUtPgorCQkJCQkJCQkgICBzX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS4KKwkJCQkJCQkJICAgc19Cb2FyZEluZm9zLgorCQkJCQkJCQkgICB1aV9BZGRyZXNzICsgMzYgKyAoNjQgKiBiX01vZHVsTmJyKSwgJmR3X1N0YXR1cyk7ICovCisJCQkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCSsgMzYgKworCQkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgdGhlIHF1YXJ0eiBmbGFnIChEUTApICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKChkd19TdGF0dXMgJiAxKSAhPSAxKSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogNDBNSHogcXVhcnR6IG5vdCBvbiBib2FyZCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJRFBSSU5USygiNDBNSHogcXVhcnR6IG5vdCBvbiBib2FyZFxuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS03OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiA0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJRFBSSU5USygiNDBNSHogcXVhcnR6IG5vdCBvbiBib2FyZFxuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTc7CisJCQkJCQkJfQorCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKQorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBub3QgZXJyb3Igb2NjdXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChpX1JldHVyblZhbHVlID09IDApIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgSU5DX0NQVCB2ZXJzaW9uICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzEzMSkgeworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgNDBNSHogdXNlZCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogRW5hYmxlIHRoZSA0ME1IeiBxdWFyeiAoRFEzMCkgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQlBUENJMTcxMF9FTkFCTEVfNDBNSFpfRlJFUVVFTkNZOworCQkJCQkJCQl9CS8vIGlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCWVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogRGlzYWJsZSB0aGUgNDBNSHogcXVhcnogKERRMzApICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfNDBNSFpfRlJFUVVFTkNZOworCisJCQkJCQkJCX0JLy8gaWYgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgZGl2aXNpb24gZmF0b3IgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWZwdV9iZWdpbigpOworCQkJCQkJCQlzd2l0Y2ggKGJfVGltaW5nVW5pdHkpIHsKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbnMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMDoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCSgwLjAwMDI1ICogYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDAuMDAwMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKTsKKwkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMC4wMDAyNQorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMC4wMDAyNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCSpwdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiDDpnMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMToKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCSgwLjI1ICogYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDAuMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKTsKKwkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgwLjI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCSpwdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIG1zICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDI6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDI1MC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCSpwdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMjUwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKworCQkJCQkJCQlmcHVfZW5kKCk7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBXcml0ZSB0aGUgdGltZXIgdmFsdWUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bCh1bF9UaW1lclZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDMyICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIGluaXRpYWxpc2F0aW9uIGZsYWcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Jbml0RmxhZy4KKwkJCQkJCQkJCWJfRnJlcXVlbmN5TWVhc3VyZW1lbnRJbml0CisJCQkJCQkJCQk9IDE7CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTM7CisJCQkJCQkJfQorCQkJCQkJfQkvLyBpZiAoaV9SZXR1cm5WYWx1ZSA9PSAwKQorCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGltaW5nIHVuaXR5IHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRpbWluZyB1bml0eSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKworCQkJCQkJCS8vSU5TTiBCSVRTCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQJaV9BUENJMTcxMF9JbnNuQml0c0lOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU2V0ICYgQ2xlYXIgRnVuY3Rpb25zIGZvciBJTkNfQ1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c0lOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9CaXRzVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJdWlfQml0c1R5cGUgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CS8vIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyB0YXNrIHN0cnVjdHVyZQorCisJc3dpdGNoICh1aV9CaXRzVHlwZSkgeworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0NMRUFSQ09VTlRFUlZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9DbGVhckNvdW50ZXJWYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0NMRUFSQUxMQ09VTlRFUlZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9DbGVhckFsbENvdW50ZXJWYWx1ZShkZXYpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1NFVElOUFVURklMVEVSOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9TZXRJbnB1dEZpbHRlcihkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgZGF0YVswXSwgKEJZVEUpIGRhdGFbMV0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0xBVENIQ09VTlRFUjoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfTGF0Y2hDb3VudGVyKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKEJZVEUpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1NFVElOREVYQU5EUkVGRVJFTkNFU09VUkNFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9TZXRJbmRleEFuZFJlZmVyZW5jZVNvdXJjZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChCWVRFKSBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9TRVRESUdJVEFMQ0hMT046CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPbihkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1NFVERJR0lUQUxDSExPRkY6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPZmYoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIkJpdHMgQ29uZmlnIFBhcmFtZXRlciBXcm9uZ1xuIik7CisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfQ2xlYXJDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ2xlYXIgdGhlIGNvdW50ZXIgdmFsdWUgZnJvbSBzZWxlY3RlZCBtb2R1bGUgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9DbGVhckNvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENsZWFyIHRoZSBjb3VudGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bE5icikpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0NsZWFyQWxsQ291bnRlclZhbHVlICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgICBiX0JvYXJkSGFuZGxlKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDbGVhciBhbGwgY291bnRlciB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfQ2xlYXJBbGxDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJQllURSBiX01vZHVsQ3B0ID0gMDsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBjb3VudGVyIG1vZHVsZSBmb3VuZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMF0gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIKKwkJfHwgKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uWzFdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSCisJCXx8IChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvblsyXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUgorCQl8fCAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bM10gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkJZm9yIChiX01vZHVsQ3B0ID0gMDsgYl9Nb2R1bENwdCA8IDQ7IGJfTW9kdWxDcHQrKykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmNyZW1lbnRhbCBjb3VudGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsQ3B0XSAmCisJCQkJCTB4RkZGRjAwMDBVTCkgPT0KKwkJCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENsZWFyIHRoZSBjb3VudGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxNiArICg2NCAqIGJfTW9kdWxDcHQpKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTm8gY291bnRlciBtb2R1bGUgZm91bmQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1NldElucHV0RmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX01vZHVsZSwgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgQllURV8gYl9QQ0lJbnB1dENsb2NrLCAgICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfIGJfRmlsdGVyKSAgICAgCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGUgb3IgZW5hYmxlIHRoZSBzb2Z0d2FyZSBmaWx0ZXIgZnJvbSBzZWxlY3RlZCAgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiBiX0ZpbHRlciBkZXRlcm1pbmUgdGhlIGZpbHRlciB0aW1lfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wJCSAgICAgIEJZVEVfICBiX01vZHVsTmJyCSAgICAgIDoJTnVtYmVyIG9mIHRoZSBtb2R1bGUgdG8gYmUgICB8Cit8CQkJCQkJY29uZmlndXJlZCAoMCB0byAzKSAgICAgICAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9QQ0lJbnB1dENsb2NrICA6CVNlbGVjdGlvbiBvZiB0aGUgUENJIGJ1cyAgICAgfAorfAkJCQkJCWNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCS0gQVBDSTE3MTBfMzBNSFogOiAgICAgICAgICAgfAorfAkJCQkJCSAgVGhlIFBDIGhhcyBhIFBDSSBidXMgY2xvY2sgfAorfAkJCQkJCSAgb2YgMzAgTUh6ICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCS0gQVBDSTE3MTBfMzNNSFogOiAgICAgICAgICAgfAorfAkJCQkJCSAgVGhlIFBDIGhhcyBhIFBDSSBidXMgY2xvY2sgfAorfAkJCQkJCSAgb2YgMzMgTUh6ICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCS0gQVBDSTE3MTBfNDBNSFogOiAgICAgICAgICAgfAorfAkJCQkJCSAgVGhlIEFQQ0kxNzEwIGhhcyBhIDQwTUh6ICAgIHwKK3wJCQkJCQkgIHF1YXJ0egkJICAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9GaWx0ZXIJICAgICAgOiBGaWx0ZXIgc2VsZWN0aW9uICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkzMCBNSHogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCTA6ICBTb2Z0d2FyZSBmaWx0ZXIgbm90IHVzZWQgICAgICAgICB8Cit8CQkJCQkxOiAgRmlsdGVyIGZyb20gMjY2bnMgICgzLjc1MDAwME1IeikgfAorfAkJCQkJMjogIEZpbHRlciBmcm9tIDQwMG5zICAoMi41MDAwMDBNSHopIHwKK3wJCQkJCTM6ICBGaWx0ZXIgZnJvbSA1MzNucyAgKDEuODc2MTcwTUh6KSB8Cit8CQkJCQk0OiAgRmlsdGVyIGZyb20gNjY2bnMgICgxLjUwMTUwMU1IeikgfAorfAkJCQkJNTogIEZpbHRlciBmcm9tIDgwMG5zICAoMS4yNTAwMDBNSHopIHwKK3wJCQkJCTY6ICBGaWx0ZXIgZnJvbSA5MzNucyAgKDEuMDcxODAwTUh6KSB8Cit8CQkJCQk3OiAgRmlsdGVyIGZyb20gMTA2Nm5zICgwLjkzODA4ME1IeikgfAorfAkJCQkJODogIEZpbHRlciBmcm9tIDEyMDBucyAoMC44MzMzMzNNSHopIHwKK3wJCQkJCTk6ICBGaWx0ZXIgZnJvbSAxMzMzbnMgKDAuNzUwMDAwTUh6KSB8Cit8CQkJCQkxMDogRmlsdGVyIGZyb20gMTQ2Nm5zICgwLjY4MjEwME1IeikgfAorfAkJCQkJMTE6IEZpbHRlciBmcm9tIDE2MDBucyAoMC42MjUwMDBNSHopIHwKK3wJCQkJCTEyOiBGaWx0ZXIgZnJvbSAxNzMzbnMgKDAuNTc3Nzc3TUh6KSB8Cit8CQkJCQkxMzogRmlsdGVyIGZyb20gMTg2Nm5zICgwLjUzNTkwME1IeikgfAorfAkJCQkJMTQ6IEZpbHRlciBmcm9tIDIwMDBucyAoMC41MDAwMDBNSHopIHwKK3wJCQkJCTE1OiBGaWx0ZXIgZnJvbSAyMTMzbnMgKDAuNDY4ODAwTUh6KSB8Cit8CQkJCQkJCQkJICAgICB8Cit8CQkJCTMzIE1IeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJMDogIFNvZnR3YXJlIGZpbHRlciBub3QgdXNlZCAgICAgICAgIHwKK3wJCQkJCTE6ICBGaWx0ZXIgZnJvbSAyNDJucyAgKDQuMTI1MDAwTUh6KSB8Cit8CQkJCQkyOiAgRmlsdGVyIGZyb20gMzYzbnMgICgyLjc1NDgyME1IeikgfAorfAkJCQkJMzogIEZpbHRlciBmcm9tIDQ4NG5zICAoMi4wNjYxMTVNSHopIHwKK3wJCQkJCTQ6ICBGaWx0ZXIgZnJvbSA2MDVucyAgKDEuNjUyODkyTUh6KSB8Cit8CQkJCQk1OiAgRmlsdGVyIGZyb20gNzI2bnMgICgxLjM1Nzc0MU1IeikgfAorfAkJCQkJNjogIEZpbHRlciBmcm9tIDg0N25zICAoMS4xODA2MzdNSHopIHwKK3wJCQkJCTc6ICBGaWx0ZXIgZnJvbSA5NjhucyAgKDEuMDMzMDU1TUh6KSB8Cit8CQkJCQk4OiAgRmlsdGVyIGZyb20gMTA4OW5zICgwLjkxODI3M01IeikgfAorfAkJCQkJOTogIEZpbHRlciBmcm9tIDEyMTBucyAoMC44MjY0NDZNSHopIHwKK3wJCQkJCTEwOiBGaWx0ZXIgZnJvbSAxMzMxbnMgKDAuNzUxMzE0TUh6KSB8Cit8CQkJCQkxMTogRmlsdGVyIGZyb20gMTQ1Mm5zICgwLjY4ODcwNU1IeikgfAorfAkJCQkJMTI6IEZpbHRlciBmcm9tIDE1NzNucyAoMC42MzU3MjdNSHopIHwKK3wJCQkJCTEzOiBGaWx0ZXIgZnJvbSAxNjk0bnMgKDAuNTkwMzE4TUh6KSB8Cit8CQkJCQkxNDogRmlsdGVyIGZyb20gMTgxNW5zICgwLjU1MDk2NE1IeikgfAorfAkJCQkJMTU6IEZpbHRlciBmcm9tIDE5MzZucyAoMC41MTY1MjhNSHopIHwKK3wJCQkJCQkJCQkgICAgIHwKK3wJCQkJNDAgTUh6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQktLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkwOiAgU29mdHdhcmUgZmlsdGVyIG5vdCB1c2VkICAgICAgICAgfAorfAkJCQkJMTogIEZpbHRlciBmcm9tIDIwMG5zICAoNS4wMDAwMDBNSHopIHwKK3wJCQkJCTI6ICBGaWx0ZXIgZnJvbSAzMDBucyAgKDMuMzMzMzMzTUh6KSB8Cit8CQkJCQkzOiAgRmlsdGVyIGZyb20gNDAwbnMgICgyLjUwMDAwME1IeikgfAorfAkJCQkJNDogIEZpbHRlciBmcm9tIDUwMG5zICAoMi4wMDAwMDBNSHopIHwKK3wJCQkJCTU6ICBGaWx0ZXIgZnJvbSA2MDBucyAgKDEuNjY2NjY2TUh6KSB8Cit8CQkJCQk2OiAgRmlsdGVyIGZyb20gNzAwbnMgICgxLjQyODUwME1IeikgfAorfAkJCQkJNzogIEZpbHRlciBmcm9tIDgwMG5zICAoMS4yNTAwMDBNSHopIHwKK3wJCQkJCTg6ICBGaWx0ZXIgZnJvbSA5MDBucyAgKDEuMTExMTExTUh6KSB8Cit8CQkJCQk5OiAgRmlsdGVyIGZyb20gMTAwMG5zICgxLjAwMDAwME1IeikgfAorfAkJCQkJMTA6IEZpbHRlciBmcm9tIDExMDBucyAoMC45MDkwOTBNSHopIHwKK3wJCQkJCTExOiBGaWx0ZXIgZnJvbSAxMjAwbnMgKDAuODMzMzMzTUh6KSB8Cit8CQkJCQkxMjogRmlsdGVyIGZyb20gMTMwMG5zICgwLjc2OTIwME1IeikgfAorfAkJCQkJMTM6IEZpbHRlciBmcm9tIDE0MDBucyAoMC43MTQyMDBNSHopIHwKK3wJCQkJCTE0OiBGaWx0ZXIgZnJvbSAxNTAwbnMgKDAuNjY2NjY2TUh6KSB8Cit8CQkJCQkxNTogRmlsdGVyIGZyb20gMTYwMG5zICgwLjYyNTAwME1IeikgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIC00OiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICAgICAgICAgICAgICB8Cit8CQkJCQkgIC01OiBUaGUgc2VsZWN0ZWQgZmlsdGVyIHZhbHVlIGlzIHdyb25nICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIC02OiA0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1NldElucHV0RmlsdGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1BDSUlucHV0Q2xvY2ssIEJZVEUgYl9GaWx0ZXIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGluY3JlbWVudGFsIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZmlybXdhcmUgPj0gUmV2MS41ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkJMHhGRkZGKSA+PSAweDMxMzUpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBQQ0kgYnVzIGNsb2NrICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBmaWx0ZXIgdmFsdWUgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX0ZpbHRlciA8IDE2KSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgNDBNSHogdXNlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQlBUENJMTcxMF80ME1IWikgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgNDBNSHogcXVhcnR6IG9uIGJvYXJkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCTM2ICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgcXVhcnR6IGZsYWcgKERRMCkgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgMSkgIT0KKwkJCQkJCQkJMSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIDQwTUh6IHF1YXJ0eiBub3Qgb24gYm9hcmQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCURQUklOVEsoIjQwTUh6IHF1YXJ0eiBub3Qgb24gYm9hcmRcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS02OworCQkJCQkJCX0KKwkJCQkJCX0JLy8gaWYgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgZXJyb3Igbm90IG9jY3VyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoaV9SZXR1cm5WYWx1ZSA9PSAwKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgNDBNSHogdXNlZCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBFbmFibGUgdGhlIDQwTUh6IHF1YXJ6IChEUTMxKSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJfAorCQkJCQkJCQkJQVBDSTE3MTBfRU5BQkxFXzQwTUhaX0ZJTFRFUjsKKworCQkJCQkJCX0JLy8gaWYgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikKKwkJCQkJCQllbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIERpc2FibGUgdGhlIDQwTUh6IHF1YXJ6IChEUTMxKSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCSYKKwkJCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfNDBNSFpfRklMVEVSOworCisJCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKQorCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2V0IHRoZSBmaWx0ZXIgdmFsdWUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzCisJCQkJCQkJCT0KKwkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzCisJCQkJCQkJCSYgMHgxRikgfAorCQkJCQkJCQkoKGJfRmlsdGVyICYKKwkJCQkJCQkJCTB4NykgPDwKKwkJCQkJCQkJNSk7CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQk9CisJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkmIDB4RkUpIHwKKwkJCQkJCQkJKChiX0ZpbHRlciAmCisJCQkJCQkJCQkweDgpID4+CisJCQkJCQkJCTMpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCTIwICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJfQkvLyBpZiAoaV9SZXR1cm5WYWx1ZSA9PSAwKQorCQkJCQl9CS8vIGlmIChiX0ZpbHRlciA8IDE2KQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRoZSBzZWxlY3RlZCBmaWx0ZXIgdmFsdWUgaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGZpbHRlciB2YWx1ZSBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0JLy8gaWYgKGJfRmlsdGVyIDwgMTYpCisJCQkJfQkvLyBpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikpCisJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IDQ7CisJCQkJfQkvLyBpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikpCisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGVcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGNvdW50ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIGNvdW50ZXIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9MYXRjaENvdW50ZXIgKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0xhdGNoUmVnKSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBMYXRjaCB0aGUgY291cmFudCB2YWx1ZSBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKSBpbiB0byB0aGUgc2VsZWN0ZWQgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTGF0Y2hSZWcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTGF0Y2hSZWcgICAgOiBTZWxlY3RlZCBsYXRjaCByZWdpc3RlciAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBmb3IgdGhlIGZpcnN0IGxhdGNoIHJlZ2lzdGVyICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IGZvciB0aGUgc2Vjb25kIGxhdGNoIHJlZ2lzdGVyICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9MYXRjaENvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBCWVRFIGJfTGF0Y2hSZWcpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9MYXRjaFJlZyA8IDIpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGF0Y2ggdGhlIGNvdW50ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDEgPDwgKGJfTGF0Y2hSZWcgKiA0KSwKKwkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8JaV9BUENJMTcxMF9TZXRJbmRleEFuZFJlZmVyZW5jZVNvdXJjZSAgICAgICAgfAorfAkJCQkJKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgQllURV8gYl9Tb3VyY2VTZWxlY3Rpb24pICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGV0ZXJtaW5lIHRoZSBoYXJkd2FyZSBzb3VyY2UgZm9yIHRoZSBpbmRleCBhbmQgdGhlICAgIHwKK3wJCSAgICAgIHJlZmVyZW5jZSBsb2dpYy4gUGVyIGRlZmF1bHQgdGhlIGluZGV4IGxvZ2ljIGlzICAgICAgICB8Cit8CQkgICAgICBjb25uZWN0ZWQgdG8gdGhlIGRpZmZlcmVuY2UgaW5wdXQgQyBhbmQgdGhlIHJlZmVyZW5jZSAgfAorfAkJICAgICAgbG9naWMgaXMgY29ubmVjdGVkIHRvIHRoZSAyNFYgaW5wdXQgRSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgQllURV8gYl9Tb3VyY2VTZWxlY3Rpb24gOiBBUENJMTcxMF9TT1VSQ0VfMCA6ICAgICAgICAgIHwKK3wJCQkJCQlUaGUgaW5kZXggbG9naWMgaXMgY29ubmVjdGVkIHwKK3wJCQkJCQl0byB0aGUgZGlmZmVyZW5jZSBpbnB1dCBDIGFuZHwKK3wJCQkJCQl0aGUgcmVmZXJlbmNlIGxvZ2ljIGlzICAgICAgIHwKK3wJCQkJCQljb25uZWN0ZWQgdG8gdGhlIDI0ViBpbnB1dCBFLnwKK3wJCQkJCQlUaGlzIGlzIHRoZSBkZWZhdWx0ICAgICAgICAgIHwKK3wJCQkJCQljb25maWd1cmF0aW9uLiAgICAgICAgICAgICAgIHwKK3wJCQkJCQlBUENJMTcxMF9TT1VSQ0VfMSA6ICAgICAgICAgIHwKK3wJCQkJCQlUaGUgcmVmZXJlbmNlIGxvZ2ljIGlzICAgICAgIHwKK3wJCQkJCQljb25uZWN0ZWQgdG8gdGhlIGRpZmZlcmVuY2UgIHwKK3wJCQkJCQlpbnB1dCBDIGFuZCB0aGUgaW5kZXggbG9naWMgIHwKK3wJCQkJCQlpcyBjb25uZWN0ZWQgdG8gdGhlIDI0ViAgICAgIHwKK3wJCQkJCQlpbnB1dCBFICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8CQkgICAgICAtMjogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfAkJICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUuICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgIC00OiBUaGUgc291cmNlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1NldEluZGV4QW5kUmVmZXJlbmNlU291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1NvdXJjZVNlbGVjdGlvbikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGluY3JlbWVudGFsIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZmlybXdhcmUgPj0gUmV2MS41ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkJMHhGRkZGKSA+PSAweDMxMzUpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBzb3VyY2Ugc2VsZWN0aW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoYl9Tb3VyY2VTZWxlY3Rpb24gPT0gQVBDSTE3MTBfU09VUkNFXzAgfHwKKwkJCQkJYl9Tb3VyY2VTZWxlY3Rpb24gPT0gQVBDSTE3MTBfU09VUkNFXzEpCisJCQkJeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBpbnZlcnQgdGhlIGluZGV4IGFuZCByZWZlcmVuY2UgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfU291cmNlU2VsZWN0aW9uID09CisJCQkJCQlBUENJMTcxMF9TT1VSQ0VfMSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogSW52ZXJ0IGluZGV4IGFuZCByZWZlcmVuY2Ugc291cmNlIChEUTI1KSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNCA9CisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQliX01vZGVSZWdpc3RlcjQgfAorCQkJCQkJCUFQQ0kxNzEwX0lOVkVSVF9JTkRFWF9SRkVSRU5DRTsKKwkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogU2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKERRMjUpICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQliX01vZGVSZWdpc3RlcjQgPQorCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0ICYKKwkJCQkJCQlBUENJMTcxMF9ERUZBVUxUX0lOREVYX1JGRVJFTkNFOworCQkJCQl9CisJCQkJfQkvLyBpZiAoYl9Tb3VyY2VTZWxlY3Rpb24gPT0gQVBDSTE3MTBfU09VUkNFXzAgfHxiX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMSkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzb3VyY2Ugc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBzb3VyY2Ugc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCX0JLy8gaWYgKGJfU291cmNlU2VsZWN0aW9uID09IEFQQ0kxNzEwX1NPVVJDRV8wIHx8Yl9Tb3VyY2VTZWxlY3Rpb24gPT0gQVBDSTE3MTBfU09VUkNFXzEpCisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGVcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGNvdW50ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIGNvdW50ZXIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXwlpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPbiAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJICAgIEJZVEVfICBiX01vZHVsTmJyKSAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU2V0cyB0aGUgZGlnaXRhbCBvdXRwdXQgSCBTZXR0aW5nIGFuIG91dHB1dCBtZWFucyAgICAgIHwKK3wJCSAgICAgIHNldHRpbmcgYW4gb3VwdXQgaGlnaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfAkJICAgICAgQllURV8gIGJfTW9kdWxOYnIJICAgICAgOglOdW1iZXIgb2YgdGhlIG1vZHVsZSB0byBiZSAgIHwKK3wJCQkJCQljb25maWd1cmVkICgwIHRvIDMpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfAkJCSAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9TZXREaWdpdGFsQ2hsT24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCQkJZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQliX01vZGVSZWdpc3RlcjMgPSBkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLmJfTW9kZVJlZ2lzdGVyMyB8IDB4MTA7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2V0IHRoZSBvdXRwdXQgT24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDIwICsgKDY0ICogYl9Nb2R1bE5icikpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXwlpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPZmYgICAgICAgICAgICAgICAgICB8Cit8CQkJCSAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJICAgIEJZVEVfICBiX01vZHVsTmJyKSAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVzZXRzIHRoZSBkaWdpdGFsIG91dHB1dCBILiBSZXNldHRpbmcgYW4gb3V0cHV0IG1lYW5zIHwKK3wJCSAgICAgIHNldHRpbmcgYW4gb3VwdXQgbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfAkJICAgICAgQllURV8gIGJfTW9kdWxOYnIJICAgICAgOglOdW1iZXIgb2YgdGhlIG1vZHVsZSB0byBiZSAgIHwKK3wJCQkJCQljb25maWd1cmVkICgwIHRvIDMpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfAkJCSAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9TZXREaWdpdGFsQ2hsT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkJCWRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJYl9Nb2RlUmVnaXN0ZXIzID0gZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci5iX01vZGVSZWdpc3RlcjMgJiAweEVGOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZXQgdGhlIG91dHB1dCBPZmYgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAyMCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisJCQkJCQkJLy8gSU5TTiBXUklURQorLyojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6SU5UCWlfQVBDSTE3MTBfSW5zbldyaXRlSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBFbmFibGUgRGlzYWJsZSBmdW5jdGlvbnMgZm9yIElOQ19DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfV3JpdGVUeXBlOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCXVpX1dyaXRlVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisKKwlzd2l0Y2ggKHVpX1dyaXRlVHlwZSkgeworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0VOQUJMRUxBVENISU5URVJSVVBUOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9FbmFibGVMYXRjaEludGVycnVwdChkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVMQVRDSElOVEVSUlVQVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfRGlzYWJsZUxhdGNoSW50ZXJydXB0KGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfV1JJVEUxNkJJVENPVU5URVJWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfV3JpdGUxNkJpdENvdW50ZXJWYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgZGF0YVswXSwgKFVJTlQpIGRhdGFbMV0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1dSSVRFMzJCSVRDT1VOVEVSVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1dyaXRlMzJCaXRDb3VudGVyVmFsdWUoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoVUxPTkcpIGRhdGFbMF0pOworCisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFSU5ERVg6CisJCWlfQVBDSTE3MTBfRW5hYmxlSW5kZXgoZGV2LCAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVJTkRFWDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfRGlzYWJsZUluZGV4KGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFQ09NUEFSRUxPR0lDOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9FbmFibGVDb21wYXJlTG9naWMoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9ESVNBQkxFQ09NUEFSRUxPR0lDOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlQ29tcGFyZUxvZ2ljKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFRlJFUVVFTkNZTUVBU1VSRU1FTlQ6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0VuYWJsZUZyZXF1ZW5jeU1lYXN1cmVtZW50KGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKEJZVEUpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVGUkVRVUVOQ1lNRUFTVVJFTUVOVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfRGlzYWJsZUZyZXF1ZW5jeU1lYXN1cmVtZW50KGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJXcml0ZSBDb25maWcgUGFyYW1ldGVyIFdyb25nXG4iKTsKKwl9CisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKQorCQlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9FbmFibGVMYXRjaEludGVycnVwdCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5icikgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBFbmFibGUgdGhlIGxhdGNoIGludGVycnVwdCBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gRWFjaCBzb2Z0d2FyZSBvciBoYXJkd2FyZSBsYXRjaCBvY2N1ciBhICB8Cit8ICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogSW50ZXJydXB0IHJvdXRpbmUgbm90IGluc3RhbGxlZCBzZWUgZnVuY3Rpb24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmUiICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZUxhdGNoSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQliX01vZGVSZWdpc3RlcjIgPSBkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCWJfTW9kZVJlZ2lzdGVyMiB8IEFQQ0kxNzEwX0VOQUJMRV9MQVRDSF9JTlQ7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAyMCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9EaXNhYmxlTGF0Y2hJbnRlcnJ1cHQgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5icikgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBEaXNhYmxlIHRoZSBsYXRjaCBpbnRlcnJ1cHQgZnJvbSBzZWxlY3RlZCBtb2R1bGUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEludGVycnVwdCByb3V0aW5lIG5vdCBpbnN0YWxsZWQgc2VlIGZ1bmN0aW9uICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lIiAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9EaXNhYmxlTGF0Y2hJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQgJgorCQkJCSgoQVBDSTE3MTBfRElTQUJMRV9MQVRDSF9JTlQgPDwgOCkgfCAweEZGKSwKKwkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsKKwkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCW1kZWxheSgxMDAwKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERpc2FibGUgaW50ZXJydXB0ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCWJfTW9kZVJlZ2lzdGVyMiA9IGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJYl9Nb2RlUmVnaXN0ZXIyICYgQVBDSTE3MTBfRElTQUJMRV9MQVRDSF9JTlQ7CisKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Xcml0ZTE2Qml0Q291bnRlclZhbHVlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyLCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfU2VsZWN0ZWRDb3VudGVyLCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UXyB1aV9Xcml0ZVZhbHVlKSAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGUgYSAxNi1CaXQgdmFsdWUgKHVpX1dyaXRlVmFsdWUpIGluIHRvIHRoZSBzZWxlY3RlZHwKK3wgICAgICAgICAgICAgICAgICAgICAxNi1CaXQgY291bnRlciAoYl9TZWxlY3RlZENvdW50ZXIpIGZyb20gc2VsZWN0ZWQgbW9kdWxlfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1NlbGVjdGVkQ291bnRlciA6IFNlbGVjdGVkIDE2LUJpdCBjb3VudGVyICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgb3IgMSkgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVF8gdWlfV3JpdGVWYWx1ZSAgICAgOiAxNi1CaXQgd3JpdGUgdmFsdWUgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCAxNi1CaXQgY291bnRlciBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfV3JpdGUxNkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9TZWxlY3RlZENvdW50ZXIsIFVJTlQgdWlfV3JpdGVWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBjb3VudGVyIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1NlbGVjdGVkQ291bnRlciA8IDIpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlIHRoZSB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKChVTE9ORykgKChVTE9ORykgKHVpX1dyaXRlVmFsdWUpIDw8ICgxNiAqCisJCQkJCQkJYl9TZWxlY3RlZENvdW50ZXIpKSwKKwkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJKGJfU2VsZWN0ZWRDb3VudGVyICogNCkgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCAxNi1CaXQgY291bnRlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCAxNi1CaXQgY291bnRlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Xcml0ZTMyQml0Q291bnRlclZhbHVlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfIHVsX1dyaXRlVmFsdWUpICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlIGEgMzItQml0IHZhbHVlICh1aV9Xcml0ZVZhbHVlKSBpbiB0byB0aGUgc2VsZWN0ZWR8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9Xcml0ZVZhbHVlICAgIDogMzItQml0IHdyaXRlIHZhbHVlICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9Xcml0ZTMyQml0Q291bnRlclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgVUxPTkcgdWxfV3JpdGVWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLyogV3JpdGUgdGhlIHZhbHVlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGwodWxfV3JpdGVWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyA0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZUluZGV4IChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyKSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBFbmFibGUgdGhlIElOREVYIGFjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBJbmRleCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRJbmRleCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlSW5kZXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUxPTkcgdWxfSW50ZXJydXB0TGF0Y2hSZWc7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW5kZXggaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0luZGV4SW5pdCkgeworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjIgPSBkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIyIHwgQVBDSTE3MTBfRU5BQkxFX0lOREVYOworCisJCQkJdWxfSW50ZXJydXB0TGF0Y2hSZWcgPQorCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKworCQkJCQkyNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQsCisJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogSW5kZXggbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9Jbml0SW5kZXgiICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkluZGV4IG5vdCBpbml0aWFsaXNlZCBcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9EaXNhYmxlSW5kZXggKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIpICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZSB0aGUgSU5ERVggYWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogSW5kZXggbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0SW5kZXgiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVJbmRleChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmRleCBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfSW5kZXhJbml0KSB7CisJCQkJZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMiA9IGRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjIgJgorCQkJCQlBUENJMTcxMF9ESVNBQkxFX0lOREVYOworCisJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAyMCArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBJbmRleCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRJbmRleCIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiSW5kZXggbm90IGluaXRpYWxpc2VkICBcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9FbmFibGVDb21wYXJlTG9naWMgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyKSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBFbmFibGUgdGhlIDMyLUJpdCBjb21wYXJlIGxvZ2ljLiBBdCB0aGF0IG1vbWVudCB0aGF0ICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNyZW1lbnRhbCBjb3VudGVyIGFycml2ZSB0byB0aGUgY29tcGFyZSB2YWx1ZSBhICB8Cit8ICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDb21wYXJlIGxvZ2ljIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9Jbml0Q29tcGFyZUxvZ2ljIiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogSW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZUNvbXBhcmVMb2dpYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGNvbXBhcmUgbG9naWMgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfQ29tcGFyZUxvZ2ljSW5pdCA9PSAxKSB7CisJCQkJZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMyA9IGRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjMgfAorCQkJCQlBUENJMTcxMF9FTkFCTEVfQ09NUEFSRV9JTlQ7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ29tcGFyZSBsb2dpYyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJDb21wYXJlIGxvZ2ljIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0Rpc2FibGVDb21wYXJlTG9naWMgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGUgdGhlIDMyLUJpdCBjb21wYXJlIGxvZ2ljLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENvbXBhcmUgbG9naWMgbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRDb21wYXJlTG9naWMiICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9EaXNhYmxlQ29tcGFyZUxvZ2ljKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY29tcGFyZSBsb2dpYyBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfSW5pdEZsYWcuYl9Db21wYXJlTG9naWNJbml0ID09IDEpIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIzID0gZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMyAmCisJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfQ09NUEFSRV9JTlQ7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ29tcGFyZSBsb2dpYyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJDb21wYXJlIGxvZ2ljIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKwkvKgorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZUZyZXF1ZW5jeU1lYXN1cmVtZW50ICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9JbnRlcnJ1cHRFbmFibGUpICAgICAgICAgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgVGFzayAgICAgICAgICAgICAgOiBFbmFibGVzIHRoZSBmcmVxdWVuY3kgbWVhc3VyZW1lbnQgZnVuY3Rpb24gICAgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciAgICAgICA6IE51bWJlciBvZiB0aGUgbW9kdWxlIHRvIGJlICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgKDAgdG8gMykgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9JbnRlcnJ1cHRFbmFibGU6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC4gICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRTogICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB0aGUgaW50ZXJydXB0ICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0RJU0FCTEU6ICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIGludGVycnVwdCAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMjogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtNDogRnJlcXVlbmN5IG1lYXN1cmVtZW50IGxvZ2ljIG5vdCBpbml0aWFsaXNlZC4gICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRGcmVxdWVuY3lNZWFzdXJlbWVudCIgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtNTogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtNjogSW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqLworCitJTlQgaV9BUENJMTcxMF9FbmFibGVGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9JbnRlcnJ1cHRFbmFibGUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGZyZXF1ZW5jeSBtZXN1cmVtZW50IGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfSW5pdEZsYWcuYl9GcmVxdWVuY3lNZWFzdXJlbWVudEluaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBpbnRlcnJ1cHQgbW9kZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRElTQUJMRSkgfHwKKwkJCQkJKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkpCisJCQkJeworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBFbmFibGUgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjMgPSBkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjMgfAorCQkJCQkJQVBDSTE3MTBfRU5BQkxFX0ZSRVFVRU5DWTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlzYWJsZSBvciBlbmFibGUgdGhlIGZyZXF1ZW5jeSBpbnRlcnJ1cHQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzID0gKGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMyAmCisJCQkJCQlBUENJMTcxMF9ESVNBQkxFX0ZSRVFVRU5DWV9JTlQpCisJCQkJCQl8IChiX0ludGVycnVwdEVuYWJsZSA8PCAzKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAyMCArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfSW5pdEZsYWcuCisJCQkJCQliX0ZyZXF1ZW5jeU1lYXN1cmVtZW50RW5hYmxlID0KKwkJCQkJCTE7CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIkludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworCS8qCisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRGlzYWJsZUZyZXF1ZW5jeU1lYXN1cmVtZW50ICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyKSAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGVzIHRoZSBmcmVxdWVuY3kgbWVhc3VyZW1lbnQgZnVuY3Rpb24gICAgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciAgICAgICA6IE51bWJlciBvZiB0aGUgbW9kdWxlIHRvIGJlICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgKDAgdG8gMykgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMjogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtNDogRnJlcXVlbmN5IG1lYXN1cmVtZW50IGxvZ2ljIG5vdCBpbml0aWFsaXNlZC4gICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRGcmVxdWVuY3lNZWFzdXJlbWVudCIgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqLworCitJTlQgaV9BUENJMTcxMF9EaXNhYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZnJlcXVlbmN5IG1lc3VyZW1lbnQgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0ZyZXF1ZW5jeU1lYXN1cmVtZW50SW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBEaXNhYmxlIHRoZSBmcmVxdWVuY3kgbWVhc3VyZW1lbnQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMyA9IGRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjMgJgorCQkJCQlBUENJMTcxMF9ESVNBQkxFX0ZSRVFVRU5DWQorCQkJCQkvLyBCZWdpbiBDRyAyOS8wNi8wMSBDRyAxMTAwLzAyMzEgLT4gMDcwMS8wMjMyIEZyZXF1ZW5jZSBtZWFzdXJlIElSUSBtdXN0IGJlIGNsZWFyZWQKKwkJCQkJJiBBUENJMTcxMF9ESVNBQkxFX0ZSRVFVRU5DWV9JTlQ7CisJCQkJLy8gRW5kIENHIDI5LzA2LzAxIENHIDExMDAvMDIzMSAtPiAwNzAxLzAyMzIgRnJlcXVlbmNlIG1lYXN1cmUgSVJRIG11c3QgYmUgY2xlYXJlZAorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAyMCArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGlzYWJsZSB0aGUgZnJlcXVlbmN5IG1lYXN1cmVtZW50ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX0luaXRGbGFnLgorCQkJCQliX0ZyZXF1ZW5jeU1lYXN1cmVtZW50RW5hYmxlID0gMDsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRnJlcXVlbmN5IG1lYXN1cmVtZW50IGxvZ2ljIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiRnJlcXVlbmN5IG1lYXN1cmVtZW50IGxvZ2ljIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisKKwkJCQkJCQkvLyBJTlNOIFJFQUQKKworLyojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6SU5UCWlfQVBDSTE3MTBfSW5zbldyaXRlSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIGFuZCBHZXQgZnVuY3Rpb25zIGZvciBJTkNfQ1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfUmVhZFR5cGU7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJdWlfUmVhZFR5cGUgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisJc3dpdGNoICh1aV9SZWFkVHlwZSkgeworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1JFQURMQVRDSFJFR0lTVEVSU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9SZWFkTGF0Y2hSZWdpc3RlclN0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpLCAoUEJZVEUpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfUkVBRExBVENIUkVHSVNURVJWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJWYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpLCAoUFVMT05HKSAmIGRhdGFbMF0pOworCQlwcmludGsoIkxhdGNoIFJlZ2lzdGVyIFZhbHVlICVkXG4iLCBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9SRUFEMTZCSVRDT1VOVEVSVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1JlYWQxNkJpdENvdW50ZXJWYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpLCAoUFVJTlQpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfUkVBRDMyQklUQ09VTlRFUlZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9SZWFkMzJCaXRDb3VudGVyVmFsdWUoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoUFVMT05HKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVElOREVYU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRJbmRleFN0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9HRVRSRUZFUkVOQ0VTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldFJlZmVyZW5jZVN0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9HRVRVQVNTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldFVBU1N0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9HRVRDQlNUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0Q0JTdGF0dXMoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoUEJZVEUpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfR0VUMTZCSVRDQlNUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0MTZCaXRDQlN0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoUEJZVEUpICYgZGF0YVswXSwgKFBCWVRFKSAmIGRhdGFbMV0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVFVEU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRVRFN0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVElOVEVSUlVQVFVETEFUQ0hFRFNUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0SW50ZXJydXB0VURMYXRjaGVkU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1JFQURGUkVRVUVOQ1lNRUFTVVJFTUVOVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfUmVhZEZyZXF1ZW5jeU1lYXN1cmVtZW50KGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShQQllURSkgJiBkYXRhWzBdLAorCQkJKFBCWVRFKSAmIGRhdGFbMV0sIChQVUxPTkcpICYgZGF0YVsyXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfUkVBRElOVEVSUlVQVDoKKwkJZGF0YVswXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0uYl9PbGRNb2R1bGVNYXNrOworCQlkYXRhWzFdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRJbnRlcnJ1cHRNYXNrOworCQlkYXRhWzJdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZTsKKworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEluY3JlbWVudCB0aGUgcmVhZCBGSUZPICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQl1aV9SZWFkID0gKGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXVpX1JlYWQgKyAxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJSZWFkVHlwZSBQYXJhbWV0ZXIgd3JvbmdcbiIpOworCX0KKworCWlmIChpX1JldHVyblZhbHVlID49IDApCisJCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7CisKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJTdGF0dXMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTGF0Y2hSZWcsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9MYXRjaFN0YXR1cykgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgdGhlIGxhdGNoIHJlZ2lzdGVyIHN0YXR1cyBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpIGFuZCBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciAoYl9MYXRjaFJlZykuIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTGF0Y2hSZWcgICAgOiBTZWxlY3RlZCBsYXRjaCByZWdpc3RlciAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBmb3IgdGhlIGZpcnN0IGxhdGNoIHJlZ2lzdGVyICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IGZvciB0aGUgc2Vjb25kIGxhdGNoIHJlZ2lzdGVyICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX0xhdGNoU3RhdHVzIDogICBMYXRjaCByZWdpc3RlciBzdGF0dXMuICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBObyBsYXRjaCBvY2N1ciAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEEgc29mdHdhcmUgbGF0Y2ggb2NjdXIgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQSBoYXJkd2FyZSBsYXRjaCBvY2N1ciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBBIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGNoIG9jY3VyICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBCWVRFIGJfTGF0Y2hSZWcsIFBCWVRFIHBiX0xhdGNoU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19MYXRjaFJlZzsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfTGF0Y2hSZWcgPCAyKSB7CisJCQkJZHdfTGF0Y2hSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJKnBiX0xhdGNoU3RhdHVzID0KKwkJCQkJKEJZVEUpICgoZHdfTGF0Y2hSZWcgPj4gKGJfTGF0Y2hSZWcgKgorCQkJCQkJCTQpKSAmIDB4Myk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkTGF0Y2hSZWdpc3RlclZhbHVlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX0xhdGNoUmVnLCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfTGF0Y2hWYWx1ZSkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgbGF0Y2ggcmVnaXN0ZXIgdmFsdWUgZnJvbSBzZWxlY3RlZCBtb2R1bGUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikgYW5kIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIChiX0xhdGNoUmVnKS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9MYXRjaFJlZyAgICA6IFNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGZvciB0aGUgZmlyc3QgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogZm9yIHRoZSBzZWNvbmQgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfIHB1bF9MYXRjaFZhbHVlIDogTGF0Y2ggcmVnaXN0ZXIgdmFsdWUgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgbGF0Y2ggcmVnaXN0ZXIgcGFyYW1ldGVyIGlzIHdyb25nICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1JlYWRMYXRjaFJlZ2lzdGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBCWVRFIGJfTGF0Y2hSZWcsIFBVTE9ORyBwdWxfTGF0Y2hWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgbGF0Y2ggcmVnaXN0ZXIgcGFyYW1ldGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0xhdGNoUmVnIDwgMikgeworCQkJCSpwdWxfTGF0Y2hWYWx1ZSA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAoKGJfTGF0Y2hSZWcgKyAxKSAqIDQpICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkMTZCaXRDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1NlbGVjdGVkQ291bnRlciwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVJTlRfICAgcHVpX0NvdW50ZXJWYWx1ZSkgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogTGF0Y2ggdGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIChiX1NlbGVjdGVkQ291bnRlcikgIHwKK3wgICAgICAgICAgICAgICAgICAgICBmcm9tIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikgaW4gdG8gdGhlIGZpcnN0ICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGxhdGNoIHJlZ2lzdGVyIGFuZCByZXR1cm4gdGhlIGxhdGNoZWQgdmFsdWUuICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1NlbGVjdGVkQ291bnRlciA6IFNlbGVjdGVkIDE2LUJpdCBjb3VudGVyICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgb3IgMSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUlOVF8gcHVpX0NvdW50ZXJWYWx1ZSA6IDE2LUJpdCBjb3VudGVyIHZhbHVlICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgMTYtQml0IGNvdW50ZXIgcGFyYW1ldGVyIGlzIHdyb25nICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1JlYWQxNkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9TZWxlY3RlZENvdW50ZXIsIFBVSU5UIHB1aV9Db3VudGVyVmFsdWUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X0xhdGhjaFZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGNvdW50ZXIgc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfU2VsZWN0ZWRDb3VudGVyIDwgMikgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBMYXRjaCB0aGUgY291bnRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgdGhlIGxhdGNoIHZhbHVlICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfTGF0aGNoVmFsdWUgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCSpwdWlfQ291bnRlclZhbHVlID0KKwkJCQkJKFVJTlQpICgoZHdfTGF0aGNoVmFsdWUgPj4gKDE2ICoKKwkJCQkJCQliX1NlbGVjdGVkQ291bnRlcikpICYKKwkJCQkJMHhGRkZGVSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCAxNi1CaXQgY291bnRlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCAxNi1CaXQgY291bnRlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkMzJCaXRDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX0NvdW50ZXJWYWx1ZSkgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IExhdGNoIHRoZSAzMi1CaXQgY291bnRlciBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpIGluIHRvIHRoZSBmaXJzdCBsYXRjaCByZWdpc3RlciBhbmQgcmV0dXJuIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgbGF0Y2hlZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfICBwdWxfQ291bnRlclZhbHVlIDogMzItQml0IGNvdW50ZXIgdmFsdWUgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9SZWFkMzJCaXRDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQVUxPTkcgcHVsX0NvdW50ZXJWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUYXRjaCB0aGUgY291bnRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCB0aGUgbGF0Y2ggdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkqcHVsX0NvdW50ZXJWYWx1ZSA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDQgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfR2V0SW5kZXhTdGF0dXMgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSx8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfSW5kZXhTdGF0dXMpfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBpbmRleCBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX0luZGV4U3RhdHVzICAgOiAwIDogTm8gSU5ERVggb2NjdXIgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBBIElOREVYIG9jY3VyICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBJbmRleCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRJbmRleCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0SW5kZXhTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9JbmRleFN0YXR1cykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmRleCBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfSW5kZXhJbml0KSB7CisJCQkJZHdfU3RhdHVzUmVnID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJKnBiX0luZGV4U3RhdHVzID0gKEJZVEUpIChkd19TdGF0dXNSZWcgJiAxKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBJbmRleCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRJbmRleCIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiSW5kZXggbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfR2V0UmVmZXJlbmNlU3RhdHVzICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfUmVmZXJlbmNlU3RhdHVzKSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHJlZmVyZW5jZSBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfUmVmZXJlbmNlU3RhdHVzICAgOiAwIDogTm8gUkVGRVJFTkNFIG9jY3VyICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBBIFJFRkVSRU5DRSBvY2N1ciAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFJlZmVyZW5jZSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFJlZmVyZW5jZSIgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRSZWZlcmVuY2VTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9SZWZlcmVuY2VTdGF0dXMpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIHJlZmVyZW5jZSBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX1JlZmVyZW5jZUluaXQpIHsKKwkJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMjQgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkqcGJfUmVmZXJlbmNlU3RhdHVzID0KKwkJCQkJKEJZVEUpICh+ZHdfU3RhdHVzUmVnICYgMSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWZlcmVuY2Ugbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9Jbml0UmVmZXJlbmNlIiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlJlZmVyZW5jZSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRVQVNTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfVUFTU3RhdHVzKSAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgZXJyb3Igc2lnbmFsIChVQVMpIHN0YXR1cyAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9VQVNTdGF0dXMgICAgICA6IDAgOiBVQVMgaXMgbG93ICIwIiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFVBUyBpcyBoaWdoICIxIiAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0VUFTU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfVUFTU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkJCWR3X1N0YXR1c1JlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDI0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkqcGJfVUFTU3RhdHVzID0gKEJZVEUpICgoZHdfU3RhdHVzUmVnID4+IDEpICYgMSk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRDQlN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfQ0JTdGF0dXMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgY291bnRlciBvdmVyZmxvdyBzdGF0dXMgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9DQlN0YXR1cyAgICAgIDogMCA6IENvdW50ZXIgbm8gb3ZlcmZsb3cgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRlciBvdmVyZmxvdyAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0Q0JTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DQlN0YXR1cykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAxNiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJKnBiX0NCU3RhdHVzID0gKEJZVEUpIChkd19TdGF0dXNSZWcgJiAxKTsKKworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldDE2Qml0Q0JTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8CQkJCQkgUEJZVEVfIHBiX0NCU3RhdHVzQ291bnRlcjAsICAgICAgICAgfAorfAkJCQkJIFBCWVRFXyBwYl9DQlN0YXR1c0NvdW50ZXIxKSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybnMgdGhlIGNvdW50ZXIgb3ZlcmZsb3cgKGNvdW50ZXIgaW5pdGlhbGlzZWQgdG8gICB8Cit8CQkgICAgICAyKjE2LWJpdCkgc3RhdHVzIGZyb20gc2VsZWN0ZWQgaW5jcmVtZW50YWwgY291bnRlciAgICAgfAorfAkJICAgICAgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX0NCU3RhdHVzQ291bnRlcjAgOiAwIDogTm8gb3ZlcmZsb3cgb2NjdXIgZm9yIHwKK3wJCQkJCQkgICAgICAgdGhlIGZpcnN0IDE2LWJpdCAgICAgIHwKK3wJCQkJCQkgICAgICAgY291bnRlciAgICAgICAgICAgICAgIHwKK3wJCQkJCQkgICAxIDogT3ZlcmZsb3cgb2NjdXIgZm9yIHRoZXwKK3wJCQkJCQkgICAgICAgZmlyc3QgMTYtYml0IGNvdW50ZXIgIHwKK3wJCSAgICAgIFBCWVRFXyBwYl9DQlN0YXR1c0NvdW50ZXIxIDogMCA6IE5vIG92ZXJmbG93IG9jY3VyIGZvciB8Cit8CQkJCQkJICAgICAgIHRoZSBzZWNvbmQgMTYtYml0ICAgICB8Cit8CQkJCQkJICAgICAgIGNvdW50ZXIgICAgICAgICAgICAgICB8Cit8CQkJCQkJICAgMSA6IE92ZXJmbG93IG9jY3VyIGZvciB0aGV8Cit8CQkJCQkJICAgICAgIHNlY29uZCAxNi1iaXQgY291bnRlciB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHRvIDIqMTYtYml0IG1vZGUuICAgICAgICAgIHwKK3wJCQkgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogRmlybXdhcmUgcmV2aXNpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXQxNkJpdENCU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfQ0JTdGF0dXNDb3VudGVyMCwgUEJZVEUgcGJfQ0JTdGF0dXNDb3VudGVyMSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIDIqMTYtQml0IG1vZGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjEgJiAweDEwKSA9PSAweDEwKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgRmlybXdhcmUgdmVyc2lvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PQorCQkJCQkweDMxMzYpIHsKKwkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMTYgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCSpwYl9DQlN0YXR1c0NvdW50ZXIxID0KKwkJCQkJCShCWVRFKSAoKGR3X1N0YXR1c1JlZyA+PiAwKSAmCisJCQkJCQkxKTsKKwkJCQkJKnBiX0NCU3RhdHVzQ291bnRlcjAgPQorCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzUmVnID4+IDEpICYKKwkJCQkJCTEpOworCQkJCX0JLy8gaWYgKChwc19BUENJMTcxMFZhcmlhYmxlLT5zX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24gW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PSAweDMxMzYpCisJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRmlybXdhcmUgcmV2aXNpb24gZXJyb3IgICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoKHBzX0FQQ0kxNzEwVmFyaWFibGUtPnNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbiBbYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzEzNikKKwkJCX0JLy8gaWYgKChwc19BUENJMTcxMFZhcmlhYmxlLT5zX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS5zX01vZHVsZUluZm8gW2JfTW9kdWxOYnJdLnNfU2llbWVuc0NvdW50ZXJJbmZvLnNfTW9kZVJlZ2lzdGVyLnNfQnl0ZU1vZGVSZWdpc3Rlci5iX01vZGVSZWdpc3RlcjEgJiAweDEwKSA9PSAweDEwKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgdG8gMioxNi1iaXQgbW9kZSAqLworCQkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmICgocHNfQVBDSTE3MTBWYXJpYWJsZS0+c19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uc19Nb2R1bGVJbmZvIFtiX01vZHVsTmJyXS5zX1NpZW1lbnNDb3VudGVySW5mby5zX01vZGVSZWdpc3Rlci5zX0J5dGVNb2RlUmVnaXN0ZXIuYl9Nb2RlUmVnaXN0ZXIxICYgMHgxMCkgPT0gMHgxMCkKKwkJfQkJLy8gaWYgKHBzX0FQQ0kxNzEwVmFyaWFibGUtPnNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLnNfTW9kdWxlSW5mbyBbYl9Nb2R1bE5icl0uc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpCisJCWVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CQkvLyBpZiAocHNfQVBDSTE3MTBWYXJpYWJsZS0+c19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uc19Nb2R1bGVJbmZvIFtiX01vZHVsTmJyXS5zX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkKKwl9CQkJLy8gaWYgKGJfTW9kdWxOYnIgPCA0KQorCWVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQkJCS8vIGlmIChiX01vZHVsTmJyIDwgNCkKKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldFVEU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9VRFN0YXR1cykgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBjb3VudGVyIHByb2dyZXNzIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1VEU3RhdHVzICAgICAgOiAwIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBtb2RlIGRvd24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENvdW50ZXIgcHJvZ3Jlc3MgaW4gdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kZSB1cCAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0VURTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9VRFN0YXR1cykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAyNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJKnBiX1VEU3RhdHVzID0gKEJZVEUpICgoZHdfU3RhdHVzUmVnID4+IDIpICYgMSk7CisKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRJbnRlcnJ1cHRVRExhdGNoZWRTdGF0dXMgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfVURTdGF0dXMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgY291bnRlciBwcm9ncmVzcyBsYXRjaGVkIHN0YXR1cyBhZnRlciBhICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgaW5kZXggaW50ZXJydXB0IG9jY3VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1VEU3RhdHVzICAgICAgOiAwIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBtb2RlIGRvd24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENvdW50ZXIgcHJvZ3Jlc3MgaW4gdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kZSB1cCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBObyBpbmRleCBpbnRlcnJ1cHQgb2NjdXIgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0SW50ZXJydXB0VURMYXRjaGVkU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfVURTdGF0dXMpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW5kZXggaW50ZXJydXB0IG9jY3VyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfSW5pdEZsYWcuYl9JbmRleEludGVycnVwdE9jY3VyID09IDEpIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Jbml0RmxhZy5iX0luZGV4SW50ZXJydXB0T2NjdXIgPSAwOworCisJCQkJZHdfU3RhdHVzUmVnID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJKnBiX1VEU3RhdHVzID0gKEJZVEUpICgoZHdfU3RhdHVzUmVnID4+IDEpICYgMSk7CisJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogTm8gaW5kZXggaW50ZXJydXB0IG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCSpwYl9VRFN0YXR1cyA9IDI7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworCS8qCisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfUmVhZEZyZXF1ZW5jeU1lYXN1cmVtZW50ICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgICAgICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgICAgICAgIHBiX1N0YXR1cywgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyAgICAgICAgcHVsX1JlYWRWYWx1ZSkgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybnMgdGhlIHN0YXR1cyAocGJfU3RhdHVzKSBhbmQgdGhlIG51bWJlciBvZiAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIGluY3JlbWVudHMgaW4gdGhlIHNldCB0aW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiIGlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50ICIgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyICAgICAgIDogTnVtYmVyIG9mIHRoZSBtb2R1bGUgdG8gYmUgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCAoMCB0byAzKSAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9TdGF0dXMgICAgIDogUmV0dXJucyB0aGUgZnJlcXVlbmN5ICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnQgc3RhdHVzICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENvdW50aW5nIGN5Y2xlIG5vdCAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQuICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENvdW50aW5nIGN5Y2xlIHN0YXJ0ZWQuICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IENvdW50aW5nIGN5Y2xlIHN0b3BwZWQuICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtZWFzdXJlbWVudCBjeWNsZSBpcyB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZC4gICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9VRFN0YXR1cyAgICAgIDogMCA6IENvdW50ZXIgcHJvZ3Jlc3MgaW4gdGhlICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZGUgZG93biAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENvdW50ZXIgcHJvZ3Jlc3MgaW4gdGhlICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZGUgdXAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1JlYWRWYWx1ZSAgIDogUmV0dXJuIHRoZSBudW1iZXIgb2YgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50cyBpbiB0aGUgZGVmaW5lZCAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBiYXNlLiAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC00OiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkLiAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50IiB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICovCisKK0lOVCBpX0FQQ0kxNzEwX1JlYWRGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJUEJZVEUgcGJfU3RhdHVzLCBQQllURSBwYl9VRFN0YXR1cywgUFVMT05HIHB1bF9SZWFkVmFsdWUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCVVJTlQgdWlfMTZCaXRWYWx1ZTsKKwlEV09SRCBkd19TdGF0dXNSZWc7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZnJlcXVlbmN5IG1lc3VyZW1lbnQgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0ZyZXF1ZW5jeU1lYXN1cmVtZW50SW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgZW5hYmxlICovCisJCSAvKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX0luaXRGbGFnLgorCQkJCQliX0ZyZXF1ZW5jeU1lYXN1cmVtZW50RW5hYmxlID09IDEpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBzdGF0dXMgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDMyICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGZyZXF1ZW5jeSBzdG9wICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGR3X1N0YXR1c1JlZyAmIDEpIHsKKwkJCQkJCSpwYl9TdGF0dXMgPSAyOworCQkJCQkJKnBiX1VEU3RhdHVzID0KKwkJCQkJCQkoQllURSkgKChkd19TdGF0dXNSZWcgPj4KKwkJCQkJCQkJMSkgJiAzKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFJlYWQgdGhlIHZhbHVlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkqcHVsX1JlYWRWYWx1ZSA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsgMjggKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJaWYgKCpwYl9VRFN0YXR1cyA9PSAwKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIGNvdW50ZXIgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfU2llbWVuc0NvdW50ZXJJbmZvLnNfTW9kZVJlZ2lzdGVyLnNfQnl0ZU1vZGVSZWdpc3Rlci5iX01vZGVSZWdpc3RlcjEgJiBBUENJMTcxMF8xNkJJVF9DT1VOVEVSKSA9PSBBUENJMTcxMF8xNkJJVF9DT1VOVEVSKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIDE2LWJpdCBjb3VudGVyIDEgcHVsc2Ugb2NjdXIgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKCgqcHVsX1JlYWRWYWx1ZSAmIDB4RkZGRlUpICE9IDApIHsKKwkJCQkJCQkJCXVpXzE2Qml0VmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVJTlQpCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCXB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVTsKKwkJCQkJCQkJCSpwdWxfUmVhZFZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCSgqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkweEZGRkYwMDAwVUwpCisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCSgweEZGRkZVCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCXVpXzE2Qml0VmFsdWUpOworCQkJCQkJCQl9CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMiBwdWxzZSBvY2N1ciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKCpwdWxfUmVhZFZhbHVlICYgMHhGRkZGMDAwMFVMKSAhPSAwKSB7CisJCQkJCQkJCQl1aV8xNkJpdFZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVSU5UKQorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkJPj4KKwkJCQkJCQkJCQkJMTYpCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4RkZGRlUpOworCQkJCQkJCQkJKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKCpwdWxfUmVhZFZhbHVlCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4RkZGRlVMKQorCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKDB4RkZGRlUgLSB1aV8xNkJpdFZhbHVlKSA8PCAxNik7CisJCQkJCQkJCX0KKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlpZiAoKnB1bF9SZWFkVmFsdWUgIT0gMCkgeworCQkJCQkJCQkJKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJMHhGRkZGRkZGRlVMCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCSpwdWxfUmVhZFZhbHVlOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpZiAoKnBiX1VEU3RhdHVzID09IDEpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMiBwdWxzZSBvY2N1ciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKCpwdWxfUmVhZFZhbHVlICYgMHhGRkZGMDAwMFVMKSAhPSAwKSB7CisJCQkJCQkJCQl1aV8xNkJpdFZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVSU5UKQorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkJPj4KKwkJCQkJCQkJCQkJMTYpCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4RkZGRlUpOworCQkJCQkJCQkJKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKCpwdWxfUmVhZFZhbHVlCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4RkZGRlVMKQorCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKDB4RkZGRlUgLSB1aV8xNkJpdFZhbHVlKSA8PCAxNik7CisJCQkJCQkJCX0KKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlpZiAoKnBiX1VEU3RhdHVzCisJCQkJCQkJCQk9PSAyKSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IGlmIDE2LWJpdCBjb3VudGVyIDEgcHVsc2Ugb2NjdXIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKCgqcHVsX1JlYWRWYWx1ZSAmIDB4RkZGRlUpICE9IDApIHsKKwkJCQkJCQkJCQl1aV8xNkJpdFZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVJTlQpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQkmCisJCQkJCQkJCQkJCTB4RkZGRlU7CisJCQkJCQkJCQkJKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkJJgorCQkJCQkJCQkJCQkweEZGRkYwMDAwVUwpCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJKDB4RkZGRlUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQl1aV8xNkJpdFZhbHVlKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCSpwYl9TdGF0dXMgPSAxOworCQkJCQkJKnBiX1VEU3RhdHVzID0gMDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCSpwYl9TdGF0dXMgPSAwOworCQkJCQkqcGJfVURTdGF0dXMgPSAwOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRnJlcXVlbmN5IG1lYXN1cmVtZW50IGxvZ2ljIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiRnJlcXVlbmN5IG1lYXN1cmVtZW50IGxvZ2ljIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JTkNDUFQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTUzY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JTkNDUFQuaApAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF8xNkJJVF9DT1VOVEVSCQkJMHgxMAorI2RlZmluZSBBUENJMTcxMF8zMkJJVF9DT1VOVEVSCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX1FVQURSVVBMRV9NT0RFCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX0RPVUJMRV9NT0RFCQkJMHgzCisjZGVmaW5lIEFQQ0kxNzEwX1NJTVBMRV9NT0RFCQkJMHhGCisjZGVmaW5lIEFQQ0kxNzEwX0RJUkVDVF9NT0RFCQkJMHg4MAorI2RlZmluZSBBUENJMTcxMF9IWVNURVJFU0lTX09OCQkJMHg2MAorI2RlZmluZSBBUENJMTcxMF9IWVNURVJFU0lTX09GRgkJCTB4MAorI2RlZmluZSBBUENJMTcxMF9JTkNSRU1FTlQJCQkweDYwCisjZGVmaW5lIEFQQ0kxNzEwX0RFQ1JFTUVOVAkJCTB4MAorI2RlZmluZSBBUENJMTcxMF9MQVRDSF9DT1VOVEVSCQkJMHgxCisjZGVmaW5lIEFQQ0kxNzEwX0NMRUFSX0NPVU5URVIJCQkweDAKKyNkZWZpbmUgQVBDSTE3MTBfTE9XCQkJCTB4MAorI2RlZmluZSBBUENJMTcxMF9ISUdICQkJCTB4MQorCisvKioqKioqKioqKioqKioqKioqKioqLworLyogVmVyc2lvbiAwNjAwLTAyMjkgKi8KKy8qKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEFQQ0kxNzEwX0hJR0hfRURHRV9DTEVBUl9DT1VOVEVSCQkweDAKKyNkZWZpbmUgQVBDSTE3MTBfSElHSF9FREdFX0xBVENIX0NPVU5URVIJCTB4MQorI2RlZmluZSBBUENJMTcxMF9MT1dfRURHRV9DTEVBUl9DT1VOVEVSCQkJMHgyCisjZGVmaW5lIEFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0NPVU5URVIJCQkweDMKKyNkZWZpbmUgQVBDSTE3MTBfSElHSF9FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSCTB4NAorI2RlZmluZSBBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUgkweDUKKyNkZWZpbmUgQVBDSTE3MTBfU09VUkNFXzAJCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX1NPVVJDRV8xCQkJCTB4MQorCisjZGVmaW5lIEFQQ0kxNzEwXzMwTUhaCQkJCTMwCisjZGVmaW5lIEFQQ0kxNzEwXzMzTUhaCQkJCTMzCisjZGVmaW5lIEFQQ0kxNzEwXzQwTUhaCQkJCTQwCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0xBVENIX0lOVCAgICAJCTB4ODAKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRV9MQVRDSF9JTlQgICAJCSh+QVBDSTE3MTBfRU5BQkxFX0xBVENIX0lOVCkKKworI2RlZmluZSBBUENJMTcxMF9JTkRFWF9MQVRDSF9DT1VOVEVSCQkweDEwCisjZGVmaW5lIEFQQ0kxNzEwX0lOREVYX0FVVE9fTU9ERQkJMHg4CisjZGVmaW5lIEFQQ0kxNzEwX0VOQUJMRV9JTkRFWAkJCTB4NAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFX0lOREVYCQkJKH5BUENJMTcxMF9FTkFCTEVfSU5ERVgpCisjZGVmaW5lIEFQQ0kxNzEwX0VOQUJMRV9MQVRDSF9BTkRfQ0xFQVIJCTB4OAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFX0xBVENIX0FORF9DTEVBUgkofkFQQ0kxNzEwX0VOQUJMRV9MQVRDSF9BTkRfQ0xFQVIpCisjZGVmaW5lIEFQQ0kxNzEwX1NFVF9MT1dfSU5ERVhfTEVWRUwJCTB4NAorI2RlZmluZSBBUENJMTcxMF9TRVRfSElHSF9JTkRFWF9MRVZFTAkJKH5BUENJMTcxMF9TRVRfTE9XX0lOREVYX0xFVkVMKQorI2RlZmluZSBBUENJMTcxMF9JTlZFUlRfSU5ERVhfUkZFUkVOQ0UJCTB4MgorI2RlZmluZSBBUENJMTcxMF9ERUZBVUxUX0lOREVYX1JGRVJFTkNFICAgICAgICAgKH5BUENJMTcxMF9JTlZFUlRfSU5ERVhfUkZFUkVOQ0UpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0lOREVYX0lOVAkJMHgxCisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfSU5ERVhfSU5UCQkofkFQQ0kxNzEwX0VOQUJMRV9JTkRFWF9JTlQpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0ZSRVFVRU5DWQkJMHg0CisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZCQkofkFQQ0kxNzEwX0VOQUJMRV9GUkVRVUVOQ1kpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0ZSRVFVRU5DWV9JTlQJCTB4OAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFX0ZSRVFVRU5DWV9JTlQJCSh+QVBDSTE3MTBfRU5BQkxFX0ZSRVFVRU5DWV9JTlQpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFXzQwTUhaX0ZSRVFVRU5DWQkJMHg0MAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFXzQwTUhaX0ZSRVFVRU5DWQkofkFQQ0kxNzEwX0VOQUJMRV80ME1IWl9GUkVRVUVOQ1kpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFXzQwTUhaX0ZJTFRFUgkJMHg4MAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFXzQwTUhaX0ZJTFRFUgkJKH5BUENJMTcxMF9FTkFCTEVfNDBNSFpfRklMVEVSKQorCisjZGVmaW5lIEFQQ0kxNzEwX0VOQUJMRV9DT01QQVJFX0lOVAkJMHgyCisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfQ09NUEFSRV9JTlQJCSh+QVBDSTE3MTBfRU5BQkxFX0NPTVBBUkVfSU5UKQorCisjZGVmaW5lIEFQQ0kxNzEwX0VOQUJMRV9JTkRFWF9BQ1RJT04JCTB4MjAKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRV9JTkRFWF9BQ1RJT04JCSh+QVBDSTE3MTBfRU5BQkxFX0lOREVYX0FDVElPTikKKyNkZWZpbmUgQVBDSTE3MTBfUkVGRVJFTkNFX0hJR0gJCQkweDQwCisjZGVmaW5lIEFQQ0kxNzEwX1JFRkVSRU5DRV9MT1cJCQkofkFQQ0kxNzEwX1JFRkVSRU5DRV9ISUdIKQorCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9HQVRFX0xPVwkJCTB4NDAKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0dBVEVfSElHSAkJCSh+QVBDSTE3MTBfVE9SX0dBVEVfTE9XKQorCisvKiBJTlNOIENPTkZJRyAqLworI2RlZmluZQlBUENJMTcxMF9JTkNDUFRfSU5JVENPVU5URVIJCQkJMTAwCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9DT1VOVEVSQVVUT1RFU1QJCQkJMTAxCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9JTklUSU5ERVgJCQkJMTAyCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9JTklUUkVGRVJFTkNFCQkJCTEwMworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfSU5JVEVYVEVSTkFMU1RST0JFCQkJMTA0CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9JTklUQ09NUEFSRUxPR0lDCQkJMTA1CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9JTklURlJFUVVFTkNZTUVBU1VSRU1FTlQJCTEwNgorCisvKiBJTlNOIFJFQUQgKi8KKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1JFQURMQVRDSFJFR0lTVEVSU1RBVFVTCQkJMjAwCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9SRUFETEFUQ0hSRUdJU1RFUlZBTFVFCQkJMjAxCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9SRUFEMTZCSVRDT1VOVEVSVkFMVUUJCQkyMDIKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1JFQUQzMkJJVENPVU5URVJWQUxVRQkJCTIwMworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfR0VUSU5ERVhTVEFUVVMJCQkJMjA0CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9HRVRSRUZFUkVOQ0VTVEFUVVMJCQkyMDUKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0dFVFVBU1NUQVRVUwkJCQkyMDYKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0dFVENCU1RBVFVTCQkJCTIwNworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfR0VUMTZCSVRDQlNUQVRVUwkJCTIwOAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfR0VUVURTVEFUVVMJCQkJMjA5CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9HRVRJTlRFUlJVUFRVRExBVENIRURTVEFUVVMJCTIxMAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfUkVBREZSRVFVRU5DWU1FQVNVUkVNRU5UCQkyMTEKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1JFQURJTlRFUlJVUFQJCQkJMjEyCisKKy8qIElOU04gQklUUyAqLworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfQ0xFQVJDT1VOVEVSVkFMVUUJCQkzMDAKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0NMRUFSQUxMQ09VTlRFUlZBTFVFCQkJMzAxCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9TRVRJTlBVVEZJTFRFUgkJCQkzMDIKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0xBVENIQ09VTlRFUgkJCQkzMDMKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1NFVElOREVYQU5EUkVGRVJFTkNFU09VUkNFCQkzMDQKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1NFVERJR0lUQUxDSExPTgkJCQkzMDUKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1NFVERJR0lUQUxDSExPRkYJCQkzMDYKKworLyogSU5TTiBXUklURSAqLworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFTEFUQ0hJTlRFUlJVUFQJCQk0MDAKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVMQVRDSElOVEVSUlVQVAkJCTQwMQorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfV1JJVEUxNkJJVENPVU5URVJWQUxVRQkJCTQwMgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfV1JJVEUzMkJJVENPVU5URVJWQUxVRQkJCTQwMworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFSU5ERVgJCQkJNDA0CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9ESVNBQkxFSU5ERVgJCQkJNDA1CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVDT01QQVJFTE9HSUMJCQk0MDYKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVDT01QQVJFTE9HSUMJCQk0MDcKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0VOQUJMRUZSRVFVRU5DWU1FQVNVUkVNRU5UCQk0MDgKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVGUkVRVUVOQ1lNRUFTVVJFTUVOVAkJNDA5CisKKy8qKioqKioqKioqKiogTWFpbiBGdW5jdGlvbnMgKioqKioqKioqKioqKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZElOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKioqKioqKioqKiogU3VwcGxlbWVudGFyeSBGdW5jdGlvbnMqKioqKioqKi8KKworLyogSU5TTiBDT05GSUcgKi8KK0lOVCBpX0FQQ0kxNzEwX0luaXRDb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICBCWVRFIGJfTW9kdWxOYnIsCisJCQkgICBCWVRFIGJfQ291bnRlclJhbmdlLAorCQkJICAgQllURSBiX0ZpcnN0Q291bnRlck1vZHVzLAorCQkJICAgQllURSBiX0ZpcnN0Q291bnRlck9wdGlvbiwKKwkJCSAgIEJZVEUgYl9TZWNvbmRDb3VudGVyTW9kdXMsCisJCQkgICBCWVRFIGJfU2Vjb25kQ291bnRlck9wdGlvbik7CisKK0lOVCBpX0FQQ0kxNzEwX0NvdW50ZXJBdXRvVGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBQQllURSBwYl9UZXN0U3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfSW5pdEluZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgQllURSBiX01vZHVsTmJyLAorCQkJIEJZVEUgYl9SZWZlcmVuY2VBY3Rpb24sCisJCQkgQllURSBiX0luZGV4T3BlcmF0aW9uLCBCWVRFIGJfQXV0b01vZGUsCisJCQkgQllURSBiX0ludGVycnVwdEVuYWJsZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luaXRSZWZlcmVuY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfUmVmZXJlbmNlTGV2ZWwpOworCitJTlQgaV9BUENJMTcxMF9Jbml0RXh0ZXJuYWxTdHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0V4dGVybmFsU3Ryb2JlLAorCQkJCSAgQllURSBiX0V4dGVybmFsU3Ryb2JlTGV2ZWwpOworCitJTlQgaV9BUENJMTcxMF9Jbml0Q29tcGFyZUxvZ2ljKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJQllURSBiX01vZHVsTmJyLCBVSU5UIHVpX0NvbXBhcmVWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luaXRGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQlCWVRFIGJfTW9kdWxOYnIsCisJCQkJCUJZVEUgYl9QQ0lJbnB1dENsb2NrLAorCQkJCQlCWVRFIGJfVGltaW5nVW5pdHksCisJCQkJCVVMT05HIHVsX1RpbWluZ0ludGVydmFsLAorCQkJCQlQVUxPTkcgcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCk7CisKKy8qIElOU04gQklUUyAqLworSU5UIGlfQVBDSTE3MTBfQ2xlYXJDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworSU5UIGlfQVBDSTE3MTBfQ2xlYXJBbGxDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKK0lOVCBpX0FQQ0kxNzEwX1NldElucHV0RmlsdGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9QQ0lJbnB1dENsb2NrLAorCQkJICAgICAgQllURSBiX0ZpbHRlcik7CisKK0lOVCBpX0FQQ0kxNzEwX0xhdGNoQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0xhdGNoUmVnKTsKKworSU5UIGlfQVBDSTE3MTBfU2V0SW5kZXhBbmRSZWZlcmVuY2VTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBCWVRFIGJfTW9kdWxOYnIsCisJCQkJCSAgQllURSBiX1NvdXJjZVNlbGVjdGlvbik7CisKK0lOVCBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9TZXREaWdpdGFsQ2hsT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKKy8qIElOU04gV1JJVEUgKi8KK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZUxhdGNoSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVMYXRjaEludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9Xcml0ZTE2Qml0Q291bnRlclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfU2VsZWN0ZWRDb3VudGVyLAorCQkJCSAgICAgIFVJTlQgdWlfV3JpdGVWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX1dyaXRlMzJCaXRDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIFVMT05HIHVsX1dyaXRlVmFsdWUpOworCitJTlQgaV9BUENJMTcxMF9FbmFibGVJbmRleChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9EaXNhYmxlSW5kZXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlQ29tcGFyZUxvZ2ljKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVDb21wYXJlTG9naWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBCWVRFIGJfTW9kdWxOYnIsCisJCQkJCSAgQllURSBiX0ludGVycnVwdEVuYWJsZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICBCWVRFIGJfTW9kdWxOYnIpOworCisvKiBJTlNOIFJFQUQgKi8KK0lOVCBpX0FQQ0kxNzEwX1JlYWRMYXRjaFJlZ2lzdGVyU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0xhdGNoUmVnLAorCQkJCSAgICAgICBQQllURSBwYl9MYXRjaFN0YXR1cyk7CisKK0lOVCBpX0FQQ0kxNzEwX1JlYWRMYXRjaFJlZ2lzdGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9MYXRjaFJlZywKKwkJCQkgICAgICBQVUxPTkcgcHVsX0xhdGNoVmFsdWUpOworCitJTlQgaV9BUENJMTcxMF9SZWFkMTZCaXRDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1NlbGVjdGVkQ291bnRlciwKKwkJCQkgICAgIFBVSU5UIHB1aV9Db3VudGVyVmFsdWUpOworCitJTlQgaV9BUENJMTcxMF9SZWFkMzJCaXRDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIEJZVEUgYl9Nb2R1bE5iciwgUFVMT05HIHB1bF9Db3VudGVyVmFsdWUpOworCitJTlQgaV9BUENJMTcxMF9HZXRJbmRleFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgICAgQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9JbmRleFN0YXR1cyk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldFJlZmVyZW5jZVN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9SZWZlcmVuY2VTdGF0dXMpOworCitJTlQgaV9BUENJMTcxMF9HZXRVQVNTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICBCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1VBU1N0YXR1cyk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldENCU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICBCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX0NCU3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0MTZCaXRDQlN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCUJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfQ0JTdGF0dXNDb3VudGVyMCwKKwkJCQlQQllURSBwYl9DQlN0YXR1c0NvdW50ZXIxKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0VURTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgIEJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfVURTdGF0dXMpOworCitJTlQgaV9BUENJMTcxMF9HZXRJbnRlcnJ1cHRVRExhdGNoZWRTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9VRFN0YXR1cyk7CisKK0lOVCBpX0FQQ0kxNzEwX1JlYWRGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQlCWVRFIGJfTW9kdWxOYnIsCisJCQkJCVBCWVRFIHBiX1N0YXR1cywgUEJZVEUgcGJfVURTdGF0dXMsCisJCQkJCVBVTE9ORyBwdWxfUmVhZFZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSW5wX2NwdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjNmEyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSW5wX2NwdC5jCkBAIC0wLDAgKzEsODYxIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogSW5wX0NQVC5DICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBwdWxzZSBlbmNvZGVyIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiQVBDSTE3MTBfSW5wX2NwdC5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Jbml0UHVsc2VFbmNvZGVyICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICAgICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX1B1bHNlRW5jb2Rlck5iciwgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfSW5wdXRMZXZlbFNlbGVjdGlvbiwgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9UcmlnZ2VyT3V0cHV0QWN0aW9uLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICAgICAgIHVsX1N0YXJ0VmFsdWUpICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZSB0aGUgcHVsc2UgZW5jb2RlciBvcGVyYXRpbmcgbW9kZSBzZWxlY3RlZCB2aWF8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9Nb2R1bE5iciBhbmQgYl9QdWxzZUVuY29kZXJOYnIuIFRoZSBwdWxzZSBlbmNvZGVyICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhZnRlciBlYWNoIHB1bHNlIGRlY3JlbWVudCB0aGUgY291bnRlciB2YWx1ZSBmcm9tIDEuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCBhbnkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgcHVsc2UgZW5jb2RlcnMuICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAzKSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9QdWxzZUVuY29kZXJOYnIgICAgIDogUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW5wdXRMZXZlbFNlbGVjdGlvbiA6IElucHV0IGxldmVsIHNlbGVjdGlvbiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgb3IgMSkgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFNldCBwdWxzZSBlbmNvZGVyfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgdGhlIHRoZSBsb3d8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCBwdWxzZS4gICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFNldCBwdWxzZSBlbmNvZGVyfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgdGhlIHRoZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoIGxldmVsIHB1bHNlLnwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1RyaWdnZXJPdXRwdXRBY3Rpb24gOiBEaWdpdGFsIFRSSUdHRVIgb3V0cHV0ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBObyBhY3Rpb24gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFNldCB0aGUgdHJpZ2dlciAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHRvICIxIiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlnaCkgYWZ0ZXIgdGhlIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NhZ2UgZnJvbSAxIHRvfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBmcm9tIHB1bHNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyLiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IFNldCB0aGUgdHJpZ2dlciAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHRvICIwIiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG93KSBhZnRlciB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NhZ2UgZnJvbSAxIHRvfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBmcm9tIHB1bHNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfU3RhcnRWYWx1ZSAgICAgICAgOiBQdWxzZSBlbmNvZGVyIHN0YXJ0IHZhbHVlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHRvIDQyOTQ5NjcyOTUpCisJYl9Nb2R1bE5icgkJCQk9KEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUHVsc2VFbmNvZGVyTmJyCQk9KEJZVEUpIGRhdGFbMF07CisJYl9JbnB1dExldmVsU2VsZWN0aW9uCT0oQllURSkgZGF0YVsxXTsKKwliX1RyaWdnZXJPdXRwdXRBY3Rpb24JPShCWVRFKSBkYXRhWzJdOworCXVsX1N0YXJ0VmFsdWUJCQk9KFVMT05HKSBkYXRhWzNdOworICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBpcyBub3QgYSBwdWxzZSBlbmNvZGVyIG1vZHVsZSAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IElucHV0IGxldmVsIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogRGlnaXRhbCBUUklHR0VSIG91dHB1dCBhY3Rpb24gc2VsZWN0aW9uIGlzIHdyb25nICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBQdWxzZSBlbmNvZGVyIHN0YXJ0IHZhbHVlIGlzIHdyb25nICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFB1bHNlRW5jb2RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X0ludFJlZ2lzdGVyOworCisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9QdWxzZUVuY29kZXJOYnI7CisJQllURSBiX0lucHV0TGV2ZWxTZWxlY3Rpb247CisJQllURSBiX1RyaWdnZXJPdXRwdXRBY3Rpb247CisJVUxPTkcgdWxfU3RhcnRWYWx1ZTsKKworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9QdWxzZUVuY29kZXJOYnIgPSAoQllURSkgZGF0YVswXTsKKwliX0lucHV0TGV2ZWxTZWxlY3Rpb24gPSAoQllURSkgZGF0YVsxXTsKKwliX1RyaWdnZXJPdXRwdXRBY3Rpb24gPSAoQllURSkgZGF0YVsyXTsKKwl1bF9TdGFydFZhbHVlID0gKFVMT05HKSBkYXRhWzNdOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDw9IDMpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBwdWxzZSBlbmNvZGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCUFQQ0kxNzEwX1BVTFNFX0VOQ09ERVIpID09CisJCQlBUENJMTcxMF9QVUxTRV9FTkNPREVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHNlbGVjdGVkIHB1bHNlIGVuY29kZXIgbnVtYmVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUHVsc2VFbmNvZGVyTmJyIDw9IDMpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgaW5wdXQgbGV2ZWwgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfSW5wdXRMZXZlbFNlbGVjdGlvbiA9PSAwKQorCQkJCQl8fCAoYl9JbnB1dExldmVsU2VsZWN0aW9uID09IDEpKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgb3VwdXQgVFJJR0dFUiBhY3Rpb24gc2VsZWN0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKGJfVHJpZ2dlck91dHB1dEFjdGlvbiA8PSAyKQorCQkJCQkJfHwgKGJfUHVsc2VFbmNvZGVyTmJyID4gMCkpIHsKKwkJCQkJCWlmICh1bF9TdGFydFZhbHVlID4gMSkgeworCisJCQkJCQkJZHdfSW50UmVnaXN0ZXIgPQorCQkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCTIwICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTZXQgdGhlIHN0YXJ0IHZhbHVlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCW91dGwodWxfU3RhcnRWYWx1ZSwKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCShiX1B1bHNlRW5jb2Rlck5icgorCQkJCQkJCQkJKiA0KSArCisJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2V0IHRoZSBpbnB1dCBsZXZlbCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIgPQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIgJgorCQkJCQkJCQkoMHhGRkZGRkZGRlVMIC0KKwkJCQkJCQkJCSgxVUwgPDwgKDggKyBiX1B1bHNlRW5jb2Rlck5icikpKSkgfCAoKDFVTCAmICh+Yl9JbnB1dExldmVsU2VsZWN0aW9uKSkgPDwgKDggKyBiX1B1bHNlRW5jb2Rlck5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgb3V0cHV0IHRyaWdnZXIgdXNlZCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoYl9UcmlnZ2VyT3V0cHV0QWN0aW9uID4gMCkgJiYgKGJfUHVsc2VFbmNvZGVyTmJyID4gMSkpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEVuYWJsZSB0aGUgb3V0cHV0IGFjdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJfCAoMVVMCisJCQkJCQkJCQk8PCAoNCArIGJfUHVsc2VFbmNvZGVyTmJyKSk7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2V0IHRoZSBvdXRwdXQgVFJJR0dFUiBhY3Rpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCSYKKwkJCQkJCQkJCSgweEZGRkZGRkZGVUwKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJKDFVTCA8PCAoMTIgKyBiX1B1bHNlRW5jb2Rlck5icikpKSkgfCAoKDFVTCAmIChiX1RyaWdnZXJPdXRwdXRBY3Rpb24gLSAxKSkgPDwgKDEyICsgYl9QdWxzZUVuY29kZXJOYnIpKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIERpc2FibGUgdGhlIG91dHB1dCBhY3Rpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyCisJCQkJCQkJCQkmCisJCQkJCQkJCQkoMHhGRkZGRkZGRlVMCisJCQkJCQkJCQktCisJCQkJCQkJCQkoMVVMIDw8ICg0ICsgYl9QdWxzZUVuY29kZXJOYnIpKSk7CisJCQkJCQkJfQorCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIsCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCXVpX0FkZHJlc3MgKworCQkJCQkJCQkyMCArCisJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCXNfUHVsc2VFbmNvZGVySW5mbworCQkJCQkJCQlbYl9QdWxzZUVuY29kZXJOYnJdLgorCQkJCQkJCQliX1B1bHNlRW5jb2RlckluaXQKKwkJCQkJCQkJPSAxOworCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFB1bHNlIGVuY29kZXIgc3RhcnQgdmFsdWUgaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBzdGFydCB2YWx1ZSBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBEaWdpdGFsIFRSSUdHRVIgb3V0cHV0IGFjdGlvbiBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJEaWdpdGFsIFRSSUdHRVIgb3V0cHV0IGFjdGlvbiBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbnB1dCBsZXZlbCBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIklucHV0IGxldmVsIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBwdWxzZSBlbmNvZGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBwdWxzZSBlbmNvZGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTI7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBwdWxzZSBlbmNvZGVyIG1vZHVsZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZVB1bHNlRW5jb2RlciAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUHVsc2VFbmNvZGVyTmJyLCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9DeWNsZVNlbGVjdGlvbiwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX0ludGVycnVwdEhhbmRsaW5nKSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZW9yIGRpc2FibGUgIHRoZSBzZWxlY3RlZCBwdWxzZSBlbmNvZGVyIChiX1B1bHNlRW5jb2Rlck5icikgIHwKK3wgICAgICAgICAgICAgICAgICAgICBmcm9tIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuIEVhY2ggaW5wdXQgcHVsc2UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudCB0aGUgcHVsc2UgZW5jb2RlciBjb3VudGVyIHZhbHVlIGZyb20gMS4gICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGVuYWJsZWQgdGhlIGludGVycnVwdCAoYl9JbnRlcnJ1cHRIYW5kbGluZyksIGEgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIHB1bHNlIGVuY29kZXIgaGFzIHJ1biAgfAorfCAgICAgICAgICAgICAgICAgICAgIGRvd24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfUHVsc2VFbmNvZGVyTmJyICAgOiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0N5Y2xlU2VsZWN0aW9uICAgIDogQVBDSTE3MTBfQ09OVElOVU9VUzogICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCB0aW1lIHRoZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGluZyB2YWx1ZSBpcyBzZXR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uICIwIiwgdGhlIHB1bHNlICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciBsb2FkIHRoZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCB2YWx1ZSBhZnRlciAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXh0IHB1bHNlLiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9TSU5HTEU6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY291bnRlciBpcyBzZXR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uICIwIiwgdGhlIHB1bHNlICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciBpcyBzdG9wcGVkLiAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9JbnRlcnJ1cHRIYW5kbGluZyA6IEludGVycnVwdHMgY2FuIGJlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLCB3aGVuIHRoZSBwdWxzZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIGhhcyBydW4gZG93bi4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBwYXJhbWV0ZXIgdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBkZWNpZGVzIGlmICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzIGFyZSB1c2VkIG9yICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdC4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEU6ICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYXJlIGVuYWJsZWQgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRTogICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAorCisgIAliX01vZHVsTmJyCQkJPShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0FjdGlvbgkJCT0oQllURSkgZGF0YVswXTsKKwliX1B1bHNlRW5jb2Rlck5icgk9KEJZVEUpIGRhdGFbMV07CisJYl9DeWNsZVNlbGVjdGlvbgk9KEJZVEUpIGRhdGFbMl07CisJYl9JbnRlcnJ1cHRIYW5kbGluZwk9KEJZVEUpIGRhdGFbM107fAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRQdWxzZUVuY29kZXIiICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBDeWNsZSBzZWxlY3Rpb24gbW9kZSBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IEludGVycnVwdCBoYW5kbGluZyBtb2RlIGlzIHdyb25nICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNzogSW50ZXJydXB0IHJvdXRpbmUgbm90IGluc3RhbGxlZC4gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVQdWxzZUVuY29kZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1B1bHNlRW5jb2Rlck5icjsKKwlCWVRFIGJfQ3ljbGVTZWxlY3Rpb247CisJQllURSBiX0ludGVycnVwdEhhbmRsaW5nOworCUJZVEUgYl9BY3Rpb247CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQWN0aW9uID0gKEJZVEUpIGRhdGFbMF07CisJYl9QdWxzZUVuY29kZXJOYnIgPSAoQllURSkgZGF0YVsxXTsKKwliX0N5Y2xlU2VsZWN0aW9uID0gKEJZVEUpIGRhdGFbMl07CisJYl9JbnRlcnJ1cHRIYW5kbGluZyA9IChCWVRFKSBkYXRhWzNdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8PSAzKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgc2VsZWN0ZWQgcHVsc2UgZW5jb2RlciBudW1iZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX1B1bHNlRW5jb2Rlck5iciA8PSAzKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIHB1bHNlIGVuY29kZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJc19QdWxzZUVuY29kZXJJbmZvW2JfUHVsc2VFbmNvZGVyTmJyXS4KKwkJCQliX1B1bHNlRW5jb2RlckluaXQgPT0gMSkgeworCQkJCXN3aXRjaCAoYl9BY3Rpb24pIHsKKworCQkJCWNhc2UgQVBDSTE3MTBfRU5BQkxFOgorCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGN5Y2xlIHNlbGVjdGlvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfQ3ljbGVTZWxlY3Rpb24gPT0KKwkJCQkJCUFQQ0kxNzEwX0NPTlRJTlVPVVMKKwkJCQkJCXx8IGJfQ3ljbGVTZWxlY3Rpb24gPT0KKwkJCQkJCUFQQ0kxNzEwX1NJTkdMRSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoYl9JbnRlcnJ1cHRIYW5kbGluZyA9PQorCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRQorCQkJCQkJCXx8IGJfSW50ZXJydXB0SGFuZGxpbmcKKwkJCQkJCQk9PSBBUENJMTcxMF9ESVNBQkxFKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG5vdCB1c2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfSW50ZXJydXB0SGFuZGxpbmcKKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRSkKKwkJCQkJCQl7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCSYKKwkJCQkJCQkJCSgweEZGRkZGRkZGVUwKKwkJCQkJCQkJCS0KKwkJCQkJCQkJCSgxVUwgPDwgYl9QdWxzZUVuY29kZXJOYnIpKTsKKwkJCQkJCQl9IGVsc2UgeworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCXwgKDFVTAorCQkJCQkJCQkJPDwKKwkJCQkJCQkJCWJfUHVsc2VFbmNvZGVyTmJyKTsKKwkJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKworCQkJCQkJCX0KKworCQkJCQkJCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlciwKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKyAyMCArCisJCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEVuYWJsZSB0aGUgcHVsc2UgZW5jb2RlciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlcgorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlcgorCQkJCQkJCQkJfCAoMVVMCisJCQkJCQkJCQk8PAorCQkJCQkJCQkJYl9QdWxzZUVuY29kZXJOYnIpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIGN5Y2xlIG1vZGUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlcgorCQkJCQkJCQkJPQorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19Db250cm9sUmVnaXN0ZXIKKwkJCQkJCQkJCSYKKwkJCQkJCQkJCSgweEZGRkZGRkZGVUwKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJKDEgPDwgKGJfUHVsc2VFbmNvZGVyTmJyICsgNCkpKSkgfCAoKGJfQ3ljbGVTZWxlY3Rpb24gJiAxVUwpIDw8ICg0ICsgYl9QdWxzZUVuY29kZXJOYnIpKTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRW5hYmxlIHRoZSBwdWxzZSBlbmNvZGVyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlciwKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKyAxNiArCisJCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogSW50ZXJydXB0IGhhbmRsaW5nIG1vZGUgaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJJbnRlcnJ1cHQgaGFuZGxpbmcgbW9kZSBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEN5Y2xlIHNlbGVjdGlvbiBtb2RlIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJDeWNsZSBzZWxlY3Rpb24gbW9kZSBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0RJU0FCTEU6CisJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlciA9CisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlciAmCisJCQkJCQkoMHhGRkZGRkZGRlVMIC0KKwkJCQkJCSgxVUwgPDwgYl9QdWxzZUVuY29kZXJOYnIpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIHRoZSBwdWxzZSBlbmNvZGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQlkd19Db250cm9sUmVnaXN0ZXIsCisJCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMTYgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCWJyZWFrOworCQkJCX0JLy8gc3dpdGNoIEVuZAorCisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBQdWxzZSBlbmNvZGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkUHVsc2VFbmNvZGVyU3RhdHVzICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1B1bHNlRW5jb2Rlck5iciwgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX1N0YXR1cykgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgQVBDSTE3MTBfUFVMU0VFTkNPREVSX1JFQUQgICAgICAgICAgOiBSZWFkcyB0aGUgcHVsc2UgZW5jb2RlciBzdGF0dXMKKwkJCQkJCQkJCQkJYW5kIHZhbHVlZnJvbSBzZWxlY3RlZCBwdWxzZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgKGJfUHVsc2VFbmNvZGVyTmJyKSBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCUJZVEUgICBiX1R5cGU7IGRhdGFbMF0KKyAgIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9XUklURQorIFdyaXRlcyBhIDMyLWJpdCB2YWx1ZSAodWxfV3JpdGVWYWx1ZSkgaW50byB0aGUgc2VsZWN0ZWR8Cit8ICAgICAgICAgICAgICAgICAgICAgcHVsc2UgZW5jb2RlciAoYl9QdWxzZUVuY29kZXJOYnIpIGZyb20gc2VsZWN0ZWQgbW9kdWxlIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIFRoaXMgb3BlcmF0aW9uIHNldCB0aGUgbmV3IHN0YXJ0IHB1bHNlICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgdmFsdWUuCisgQVBDSTE3MTBfUFVMU0VFTkNPREVSX1JFQUQKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgIENSQVJFRigpICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorfCAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICBCWVRFXyAgIGJfUHVsc2VFbmNvZGVyTmJyICAgOiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpCisgICBBUENJMTcxMF9QVUxTRUVOQ09ERVJfV1JJVEUKKwkJCQlkYXRhWzJdCQlVTE9OR18gdWxfV3JpdGVWYWx1ZSAgICAgICAgOiAzMi1iaXQgdmFsdWUgdG8gYmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW4gICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1N0YXR1cyAgICAgICAgICAgIDogUHVsc2UgZW5jb2RlciBzdGF0dXMuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IE5vIG92ZXJmbG93IG9jY3VyfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogT3ZlcmZsb3cgb2NjdXIKKwkJCQkJCVBVTE9OR18gcHVsX1JlYWRWYWx1ZSAgICAgICA6IFB1bHNlIGVuY29kZXIgdmFsdWUgICAgICB8ICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBQdWxzZSBlbmNvZGVyIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9Jbml0UHVsc2VFbmNvZGVyIiAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLypfSU5UXyAgIGlfQVBDSTE3MTBfUmVhZFB1bHNlRW5jb2RlclN0YXR1cyAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLAorCQkJCQkJIEJZVEVfICAgYl9Nb2R1bE5iciwKKwkJCQkJCSBCWVRFXyAgIGJfUHVsc2VFbmNvZGVyTmJyLAorCisgICAJCQkJCQkgUEJZVEVfIHBiX1N0YXR1cykKKwkJCQkJCSAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNSZWFkV3JpdGVQdWxzZUVuY29kZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWdpc3RlcjsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1B1bHNlRW5jb2Rlck5icjsKKwlQQllURSBwYl9TdGF0dXM7CisJQllURSBiX1R5cGU7CisJUFVMT05HIHB1bF9SZWFkVmFsdWU7CisJVUxPTkcgdWxfV3JpdGVWYWx1ZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9UeXBlID0gKEJZVEUpIGRhdGFbMF07CisJYl9QdWxzZUVuY29kZXJOYnIgPSAoQllURSkgZGF0YVsxXTsKKwlwYl9TdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKwlwdWxfUmVhZFZhbHVlID0gKFBVTE9ORykgJiBkYXRhWzFdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8PSAzKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgc2VsZWN0ZWQgcHVsc2UgZW5jb2RlciBudW1iZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX1B1bHNlRW5jb2Rlck5iciA8PSAzKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIHB1bHNlIGVuY29kZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJc19QdWxzZUVuY29kZXJJbmZvW2JfUHVsc2VFbmNvZGVyTmJyXS4KKwkJCQliX1B1bHNlRW5jb2RlckluaXQgPT0gMSkgeworCisJCQkJc3dpdGNoIChiX1R5cGUpIHsKKwkJCQljYXNlIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9SRUFEOgorCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzUmVnaXN0ZXIgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAxNiArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXIgPSBkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X1N0YXR1c1JlZ2lzdGVyIHwKKwkJCQkJCWR3X1N0YXR1c1JlZ2lzdGVyOworCisJCQkJCSpwYl9TdGF0dXMgPQorCQkJCQkJKEJZVEUpIChkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X1N0YXR1c1JlZ2lzdGVyID4+ICgxICsKKwkJCQkJCQliX1B1bHNlRW5jb2Rlck5icikpICYgMTsKKworCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQlkd19TdGF0dXNSZWdpc3RlciA9CisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X1N0YXR1c1JlZ2lzdGVyICYKKwkJCQkJCSgweEZGRkZGRkZGVUwgLSAoMSA8PCAoMSArCisJCQkJCQkJCWJfUHVsc2VFbmNvZGVyTmJyKSkpOworCisJCSAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkqcHVsX1JlYWRWYWx1ZSA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkoNCAqIGJfUHVsc2VFbmNvZGVyTmJyKSArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBBUENJMTcxMF9QVUxTRUVOQ09ERVJfV1JJVEU6CisJCQkJCXVsX1dyaXRlVmFsdWUgPSAoVUxPTkcpIGRhdGFbMl07CisJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogV3JpdGUgdGhlIHZhbHVlICovCisJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKHVsX1dyaXRlVmFsdWUsCisJCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCSg0ICogYl9QdWxzZUVuY29kZXJOYnIpICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCX0JLy9lbmQgb2Ygc3dpdGNoCisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBQdWxzZSBlbmNvZGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZEludGVycnVwdFB1bHNlRW5jb2RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlkYXRhWzBdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0uYl9PbGRNb2R1bGVNYXNrOworCWRhdGFbMV0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRJbnRlcnJ1cHRNYXNrOworCWRhdGFbMl0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogSW5jcmVtZW50IHRoZSByZWFkIEZJRk8gKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQl1aV9SZWFkID0gKGRldnByaXYtPgorCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZCArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwlyZXR1cm4gaW5zbi0+bjsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lucF9jcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI1Mjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF9TSU5HTEUJCQkwCisjZGVmaW5lIEFQQ0kxNzEwX0NPTlRJTlVPVVMJCTEKKworI2RlZmluZSBBUENJMTcxMF9QVUxTRUVOQ09ERVJfUkVBRAkwCisjZGVmaW5lIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9XUklURQkxCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0UHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlUHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQkgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBSRUFEIFBVTFNFIEVOQ09ERVIgRlVOQ1RJT05TCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkSW50ZXJydXB0UHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBXUklURSBQVUxTRSBFTkNPREVSIEZVTkNUSU9OUworICovCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRXcml0ZVB1bHNlRW5jb2RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfUHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkZDA5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfUHdtLmMKQEAgLTAsMCArMSwzNTg4IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogUFdNLkMgICAgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBXdWxzZSB3aWRlIG1vZHVsYXRpb24gbW9kdWxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJBUENJMTcxMF9Qd20uaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6SU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ1BXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBQd20gSW5pdCBhbmQgR2V0IFB3bSBJbml0aWFsaXNhdGlvbiAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlCWVRFIGJfQ29uZmlnVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJYl9Db25maWdUeXBlID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGJfQ29uZmlnVHlwZSkgeworCWNhc2UgQVBDSTE3MTBfUFdNX0lOSVQ6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0luaXRQV00oZGV2LCAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCS8vICBiX01vZHVsTmJyCisJCQkoQllURSkgZGF0YVswXSwJLy9iX1BXTQorCQkJKEJZVEUpIGRhdGFbMV0sCS8vIGJfQ2xvY2tTZWxlY3Rpb24KKwkJCShCWVRFKSBkYXRhWzJdLAkvLyBiX1RpbWluZ1VuaXQKKwkJCShVTE9ORykgZGF0YVszXSwJLy91bF9Mb3dUaW1pbmcKKwkJCShVTE9ORykgZGF0YVs0XSwJLy91bF9IaWdoVGltaW5nCisJCQkoUFVMT05HKSAmIGRhdGFbMF0sCS8vcHVsX1JlYWxMb3dUaW1pbmcKKwkJCShQVUxPTkcpICYgZGF0YVsxXQkvL3B1bF9SZWFsSGlnaFRpbWluZworCQkJKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX1BXTV9HRVRJTklUREFUQToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0UFdNSW5pdGlhbGlzYXRpb24oZGV2LCAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCS8vIGJfTW9kdWxOYnIKKwkJCShCWVRFKSBkYXRhWzBdLAkvL2JfUFdNCisJCQkoUEJZVEUpICYgZGF0YVswXSwJLy9wYl9UaW1pbmdVbml0CisJCQkoUFVMT05HKSAmIGRhdGFbMV0sCS8vcHVsX0xvd1RpbWluZworCQkJKFBVTE9ORykgJiBkYXRhWzJdLAkvL3B1bF9IaWdoVGltaW5nCisJCQkoUEJZVEUpICYgZGF0YVszXSwJLy8gcGJfU3RhcnRMZXZlbAorCQkJKFBCWVRFKSAmIGRhdGFbNF0sCS8vIHBiX1N0b3BNb2RlCisJCQkoUEJZVEUpICYgZGF0YVs1XSwJLy8gcGJfU3RvcExldmVsCisJCQkoUEJZVEUpICYgZGF0YVs2XSwJLy8gcGJfRXh0ZXJuR2F0ZQorCQkJKFBCWVRFKSAmIGRhdGFbN10sCS8vIHBiX0ludGVycnVwdEVuYWJsZQorCQkJKFBCWVRFKSAmIGRhdGFbOF0JLy8gcGJfRW5hYmxlCisJCQkpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiIENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCX0KKworCWlmIChpX1JldHVyblZhbHVlID49IDApCisJCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0luaXRQV00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfUFdNLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9DbG9ja1NlbGVjdGlvbiwgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWluZ1VuaXQsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgdWxfTG93VGltaW5nLCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICB1bF9IaWdoVGltaW5nLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1JlYWxMb3dUaW1pbmcsICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUmVhbEhpZ2hUaW1pbmcpICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBzZWxlY3RlZCBQV00gKGJfUFdNKSBmcm9tIHNlbGVjdGVkIG1vZHVsZXwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIFRoZSB1bF9Mb3dUaW1pbmcsIHVsX0hpZ2hUaW1pbmcgYW5kICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVsX1RpbWluZ1VuaXQgZGV0ZXJtaW5lIHRoZSBsb3cvaGlnaCB0aW1pbmcgYmFzZSBmb3IgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIHBlcmlvZC4gcHVsX1JlYWxMb3dUaW1pbmcsIHB1bF9SZWFsSGlnaFRpbWluZyAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhlIHJlYWwgdGltaW5nIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgYW55ICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgb3RoZXIgZnVuY3Rpb24gd2l0Y2ggYWNjZXNzIG9mIHRoZSBQV00uICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1BXTSAgICAgICAgICAgIDogU2VsZWN0ZWQgUFdNICgwIG9yIDEpLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfQ2xvY2tTZWxlY3Rpb24gOiBTZWxlY3Rpb24gZnJvbSBQQ0kgYnVzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfMzBNSFogOiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgUEMgaGF2ZSBhIDMwIE1IeiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSSBidXMgY2xvY2sgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfMzNNSFogOiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgUEMgaGF2ZSBhIDMzIE1IeiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSSBidXMgY2xvY2sgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfNDBNSFogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQVBDSS0xNzEwIGhhdmUgYSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVncmF0ZWQgNDBNaHogICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhcnR6LiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVGltaW5nVW5pdCAgICAgOiBCYXNlIHRpbWluZyBVbml0ICgwIHRvIDQpIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IG5zICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogw6ZzICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogbXMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBzICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA6IG1uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgICB1bF9Mb3dUaW1pbmcgICAgIDogTG93IGJhc2UgdGltaW5nIHZhbHVlLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgIHVsX0hpZ2hUaW1pbmcgICAgOiBIaWdoIGJhc2UgdGltaW5nIHZhbHVlLiAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9SZWFsTG93VGltaW5nICA6IFJlYWwgbG93IGJhc2UgdGltaW5nICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfICBwdWxfUmVhbEhpZ2hUaW1pbmcgOiBSZWFsIGhpZ2ggYmFzZSB0aW1pbmcgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIGlucHV0IGNsb2NrIGlzIHdyb25nICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUaW1pbmcgVW5pdCBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTc6IExvdyBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtODogSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC05OiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2l0aCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luaXRQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCUJZVEUgYl9QV00sCisJQllURSBiX0Nsb2NrU2VsZWN0aW9uLAorCUJZVEUgYl9UaW1pbmdVbml0LAorCVVMT05HIHVsX0xvd1RpbWluZywKKwlVTE9ORyB1bF9IaWdoVGltaW5nLAorCVBVTE9ORyBwdWxfUmVhbExvd1RpbWluZywgUFVMT05HIHB1bF9SZWFsSGlnaFRpbWluZykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUxPTkcgdWxfTG93VGltZXJWYWx1ZSA9IDA7CisJVUxPTkcgdWxfSGlnaFRpbWVyVmFsdWUgPSAwOworCURXT1JEIGR3X0NvbW1hbmQ7CisJZG91YmxlIGRfUmVhbExvd1RpbWluZyA9IDA7CisJZG91YmxlIGRfUmVhbEhpZ2hUaW1pbmcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFBXTSAqLworCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfUFdNKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgUFdNIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUFdNIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgY2xvY2sgKi8KKwkJIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopIHx8CisJCQkJCShiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSB8fAorCQkJCQkoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHRpbWluZyB1bml0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1RpbWluZ1VuaXQgPD0gNCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGxvdyB0aW1pbmcgc2VsZWN0aW9uICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMjY2KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJMHhGRkZGRkZGRlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTcxMjMwNjUwVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDIpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1NzEyMzBVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMykKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTU3MVVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSA0KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PSA5VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDI0MikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTB4RkZGRkZGRkZVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTUxOTY5MTA0M1VMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAyKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTE5NjkxVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDMpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1MjBVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gNCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0gOFVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAwKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAyMDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQkweEZGRkZGRkZGVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk0Mjk0OTY3MjlVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTQyOTQ5NlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAzKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNDI5VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDQpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk3VUwpKSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBIaWdoIHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9IaWdoVGltaW5nID49IDI2NikgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MTIzMDY1MFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MTIzMFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDlVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfSGlnaFRpbWluZyA+PSAyNDIpICYmICh1bF9IaWdoVGltaW5nIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MTk2OTEwNDNVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MTk2OTFVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MjBVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA4VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMjAwKSAmJiAodWxfSGlnaFRpbWluZyA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5NDk2NzI5VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5NDk2VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gN1VMKSkpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBib2FyZCB2ZXJzaW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmJfQm9hcmRWZXJzaW9uID4gMCkpIHx8IChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSkgeworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgbG93IGRpdmlzaW9uIGZhdG9yICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZnB1X2JlZ2luCisJCQkJCQkJCQkJKCk7CisKKwkJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0KSB7CisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBucyAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMDoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDAuMDAwMjUgKiBiX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlIC8gKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIMOmcyAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMToKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDAuMjUgKiBiX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJMC4yNQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBtcyAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMjoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlIC8gKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqLworCQkJCQkJCQkJCS8qIHMgKi8KKwkJCQkgICAvKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMzoKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWluZyAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG1uICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSA0OgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJNjApCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpKHVsX0xvd1RpbWluZyAqIDYwLjApICogKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSkKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQk2MDsKKwkJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSkKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQk2MC4wOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKCgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSAvIDYwLjApID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBoaWdoIGRpdmlzaW9uIGZhdG9yICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0KSB7CisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBucyAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMDoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltaW5nICogKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMC4wMDAyNQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsSGlnaFRpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogw6ZzICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAxOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgwLjI1ICogYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMC4yNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMC4yNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJMC4yNQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMC4yNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsSGlnaFRpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkgICAvKioqKioqLworCisJCQkJCQkJCQljYXNlIDI6CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWluZyAqICgyNTAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlIC8gKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqLworCQkJCQkJCQkJCS8qIHMgKi8KKwkJCQkgICAvKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMzoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltaW5nICogKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlIC8gKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBtbiAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgNDoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJNjApCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpKHVsX0hpZ2hUaW1pbmcgKiA2MC4wKSAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSkKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQk2MDsKKwkJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwLjA7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSAvIDYwLjApID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsSGlnaFRpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJZnB1X2VuZCgpOworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgY2xvY2sgc2VsZWN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbgorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIHRpbWluZyB1bml0ICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJCWJfVGltaW5nVW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1RpbWluZ1VuaXQ7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIGxvdyBiYXNlIHRpbWluZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJZF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nOworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmc7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIGhpZ2ggYmFzZSB0aW1pbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJCWRfSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nOworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZzsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBXcml0ZSB0aGUgbG93IHRpbWluZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCW91dGwodWxfTG93VGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAwICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBXcml0ZSB0aGUgaGlnaCB0aW1pbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCh1bF9IaWdoVGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCB0aGUgY2xvY2sgc2VsZWN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCQkrCisJCQkJCQkJCQkJOAorCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkweDdGOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJMHg4MDsKKwkJCQkJCQkJCX0KKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTZXQgdGhlIGNsb2NrIHNlbGVjdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCW91dGwoZHdfQ29tbWFuZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJLyoqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBQV00gaW5pdC4gKi8KKwkJCQkvKioqKioqKioqKioqKi8KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCQliX1BXTUluaXQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpdGggKi8KKwkJCQkJCQkJCS8qIHRoaXMgYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCURQUklOVEsoIllvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aXRoIHRoaXMgYm9hcmRcbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQktOTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEhpZ2ggYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCURQUklOVEsoIkhpZ2ggYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktODsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogTG93IGJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJRFBSSU5USygiTG93IGJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC03OworCQkJCQkJfQorCQkJCQl9CS8vIGlmICgoYl9UaW1pbmdVbml0ID49IDApICYmIChiX1RpbWluZ1VuaXQgPD0gNCkpCisJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaW1pbmcgdW5pdCBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJRFBSSU5USygiVGltaW5nIHVuaXQgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQkvLyBpZiAoKGJfVGltaW5nVW5pdCA+PSAwKSAmJiAoYl9UaW1pbmdVbml0IDw9IDQpKQorCQkJCX0JLy8gaWYgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgfHwgKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBjbG9jayBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBjbG9jayBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zME1IWikgfHwgKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzNNSFopIHx8IChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSkKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfR2V0UFdNSW5pdGlhbGlzYXRpb24gICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9QV00sICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1RpbWluZ1VuaXQsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfTG93VGltaW5nLCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9IaWdoVGltaW5nLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1N0YXJ0TGV2ZWwsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfU3RvcE1vZGUsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9TdG9wTGV2ZWwsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0V4dGVybkdhdGUsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfSW50ZXJydXB0RW5hYmxlLCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9FbmFibGUpICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIFBXTSAoYl9QV00pIGluaXRpYWxpc2F0aW9uIGZyb20gc2VsZWN0ZWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFBXTSIgZnVuY3Rpb24gYmUgZm9yIHlvdSBjYWxsIHRoaXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKSAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfUFdNICAgICAgICAgOiBTZWxlY3RlZCBQV00gKDAgb3IgMSkgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gIHBiX1RpbWluZ1VuaXQgICAgICA6IEJhc2UgdGltaW5nIFVuaXQgKDAgdG8gNCkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogbnMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiDDpnMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBtcyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IHMgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IDogbW4gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfTG93VGltaW5nICAgICAgOiBMb3cgYmFzZSB0aW1pbmcgdmFsdWUuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9IaWdoVGltaW5nICAgICA6IEhpZ2ggYmFzZSB0aW1pbmcgdmFsdWUuICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfU3RhcnRMZXZlbCAgICAgIDogU3RhcnQgcGVyaW9kIGxldmVsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFRoZSBwZXJpb2Qgc3RhcnQgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGxvdyBsZXZlbCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgcGVyaW9kIHN0YXJ0IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBoaWdoIGxldmVsfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfU3RvcE1vZGUgICAgICAgIDogU3RvcCBtb2RlIHNlbGVjdGlvbiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGhlIFBXTSBpcyBzdG9wcGVkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBhZnRlciB0aGUgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYW5kIGJyZWFrIHRoZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IHBlcmlvZCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEFmdGVyIHRoZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNInwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0aGUgUFdNIGlzICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwZWQgYXQgdGhlIGVuZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBsYXN0IHBlcmlvZCBjeWNsZXwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX1N0b3BMZXZlbCAgICAgICAgOiBTdG9wIFBXTSBsZXZlbCBzZWxlY3Rpb24gfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGhlIG91dHB1dCBzaWduYWwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwIHRoZSBsZXZlbCBhZnRlcnwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFRoZSBvdXRwdXQgc2lnbmFsIGlzfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRvIGxvdyBhZnRlciB0aGV8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNInwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogVGhlIG91dHB1dCBzaWduYWwgaXN8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gaGlnaCBhZnRlciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0V4dGVybkdhdGUgICAgICA6IEV4dGVybiBnYXRlIGFjdGlvbiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IEV4dGVybiBnYXRlIHNpZ25hbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHVzZWQuICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBFeHRlcm4gZ2F0ZSBzaWduYWwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBQV00gfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwX0VOQUJMRSA6ICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBQV00gaW50ZXJydXB0fAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGludGVycnVwdCBvY2N1ciBhZnRlciB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggcGVyaW9kICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfRElTQUJMRSA6ICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHRoZSBQV00gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0VuYWJsZSAgICAgICAgICA6IEluZGljYXRlIGlmIHRoZSBQV00gaXMgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCBvciBubyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBQV00gbm90IGVuYWJsZWQgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFBXTSBlbmFibGVkICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBQV00gbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRQV00iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0UFdNSW5pdGlhbGlzYXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCUJZVEUgYl9QV00sCisJUEJZVEUgcGJfVGltaW5nVW5pdCwKKwlQVUxPTkcgcHVsX0xvd1RpbWluZywKKwlQVUxPTkcgcHVsX0hpZ2hUaW1pbmcsCisJUEJZVEUgcGJfU3RhcnRMZXZlbCwKKwlQQllURSBwYl9TdG9wTW9kZSwKKwlQQllURSBwYl9TdG9wTGV2ZWwsCisJUEJZVEUgcGJfRXh0ZXJuR2F0ZSwgUEJZVEUgcGJfSW50ZXJydXB0RW5hYmxlLCBQQllURSBwYl9FbmFibGUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1czsKKwlEV09SRCBkd19Db21tYW5kOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFBXTSAqLworCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfUFdNKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgUFdNIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUFdNIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBQV00gaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoMjAgKiBiX1BXTSkgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBsb3cgdGltaW5nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJKnB1bF9Mb3dUaW1pbmcgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAwICsgKDIwICogYl9QV00pICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgaGlnaCB0aW1pbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJKnB1bF9IaWdoVGltaW5nID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgNCArICgyMCAqIGJfUFdNKSArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgY29tbWFuZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDggKyAoMjAgKiBiX1BXTSkgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCSpwYl9TdGFydExldmVsID0KKwkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4gNSkgJiAxKTsKKwkJCQkJKnBiX1N0b3BNb2RlID0KKwkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4gMCkgJiAxKTsKKwkJCQkJKnBiX1N0b3BMZXZlbCA9CisJCQkJCQkoQllURSkgKChkd19Db21tYW5kID4+IDEpICYgMSk7CisJCQkJCSpwYl9FeHRlcm5HYXRlID0KKwkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4gNCkgJiAxKTsKKwkJCQkJKnBiX0ludGVycnVwdEVuYWJsZSA9CisJCQkJCQkoQllURSkgKChkd19Db21tYW5kID4+IDMpICYgMSk7CisKKwkJCQkJaWYgKCpwYl9TdG9wTGV2ZWwpIHsKKwkJCQkJCSpwYl9TdG9wTGV2ZWwgPQorCQkJCQkJCSpwYl9TdG9wTGV2ZWwgKworCQkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4KKwkJCQkJCQkJMikgJiAxKTsKKwkJCQkJfQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIGNvbW1hbmQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19Db21tYW5kID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA4ICsgKDIwICogYl9QV00pICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkqcGJfRW5hYmxlID0KKwkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4gMCkgJiAxKTsKKworCQkJCQkqcGJfVGltaW5nVW5pdCA9IGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJc19QV01JbmZvW2JfUFdNXS5iX1RpbWluZ1VuaXQ7CisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUFdNIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCJQV00gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MTApCisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOklOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBQd20gRW5hYmxlIERpc2FibGUgYW5kIFNldCBOZXcgVGltaW5nICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9Xcml0ZVR5cGU7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCWJfV3JpdGVUeXBlID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGJfV3JpdGVUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9QV01fRU5BQkxFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9FbmFibGVQV00oZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKEJZVEUpIGRhdGFbMF0sCisJCQkoQllURSkgZGF0YVsxXSwKKwkJCShCWVRFKSBkYXRhWzJdLAorCQkJKEJZVEUpIGRhdGFbM10sIChCWVRFKSBkYXRhWzRdLCAoQllURSkgZGF0YVs1XSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9QV01fRElTQUJMRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfRGlzYWJsZVBXTShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChCWVRFKSBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX1BXTV9ORVdUSU1JTkc6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1NldE5ld1BXTVRpbWluZyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgZGF0YVswXSwKKwkJCShCWVRFKSBkYXRhWzFdLCAoVUxPTkcpIGRhdGFbMl0sIChVTE9ORykgZGF0YVszXSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJXcml0ZSBDb25maWcgUGFyYW1ldGVyIFdyb25nXG4iKTsKKwl9CisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKQorCQlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfRW5hYmxlUFdNICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1BXTSwgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfU3RhcnRMZXZlbCwgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9TdG9wTW9kZSwgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1N0b3BMZXZlbCwgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfRXh0ZXJuR2F0ZSwgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9JbnRlcnJ1cHRFbmFibGUpICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBFbmFibGUgdGhlIHNlbGVjdGVkIFBXTSAoYl9QV00pIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gWW91IG11c3QgY2FsbGluZyB0aGUgImlfQVBDSTE3MTBfSW5pdFBXTSJ8Cit8ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYmUgZm9yIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW5hYmxlIHRoZSBQV00gaW50ZXJydXB0LCB0aGUgUFdNIGdlbmVyYXRlIGEgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCBhZnRlciBlYWNoIHBlcmlvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgiIGFuZCB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgbWFzayBkZXNjcmlwdGlvbiBjaGFwdGVyLiAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9QV00gICAgICAgICAgICAgOiBTZWxlY3RlZCBQV00gKDAgb3IgMSkgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1N0YXJ0TGV2ZWwgICAgICA6IFN0YXJ0IHBlcmlvZCBsZXZlbCBzZWxlY3Rpb24gfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgcGVyaW9kIHN0YXJ0IHdpdGggYSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdyBsZXZlbCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVGhlIHBlcmlvZCBzdGFydCB3aXRoIGEgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoIGxldmVsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TdG9wTW9kZSAgICAgICAgOiBTdG9wIG1vZGUgc2VsZWN0aW9uICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGhlIFBXTSBpcyBzdG9wcGVkICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBhZnRlciB0aGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0Rpc2FibGVQV00iIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYW5kIGJyZWFrIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IHBlcmlvZCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEFmdGVyIHRoZSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSIgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdGhlIFBXTSBpcyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGVkIGF0IHRoZSBlbmQgZnJvbXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgcGVyaW9kIGN5Y2xlLiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU3RvcExldmVsICAgICAgIDogU3RvcCBQV00gbGV2ZWwgc2VsZWN0aW9uICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFRoZSBvdXRwdXQgc2lnbmFsIGtlZXAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxldmVsIGFmdGVyIHRoZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNIiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVGhlIG91dHB1dCBzaWduYWwgaXMgc2V0fAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBsb3cgYWZ0ZXIgdGhlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0Rpc2FibGVQV00iIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBUaGUgb3V0cHV0IHNpZ25hbCBpcyBzZXR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGhpZ2ggYWZ0ZXIgdGhlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSIgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9FeHRlcm5HYXRlICAgICAgOiBFeHRlcm4gZ2F0ZSBhY3Rpb24gc2VsZWN0aW9uIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogRXh0ZXJuIGdhdGUgc2lnbmFsIG5vdCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkLiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEV4dGVybiBnYXRlIHNpZ25hbCB1c2VkLnwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBQV00gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwX0VOQUJMRSA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBQV00gaW50ZXJydXB0ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGludGVycnVwdCBvY2N1ciBhZnRlciAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggcGVyaW9kICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfRElTQUJMRSA6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHRoZSBQV00gaW50ZXJydXB0ICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogIE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiAgVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6ICBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiAgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6ICBQV00gbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRQV00iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiAgUFdNIHN0YXJ0IGxldmVsIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTc6ICBQV00gc3RvcCBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtODogIFBXTSBzdG9wIGxldmVsIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC05OiAgRXh0ZXJuIGdhdGUgc2lnbmFsIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwOiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTE6IEludGVycnVwdCBmdW5jdGlvbiBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgiICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9FbmFibGVQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCUJZVEUgYl9QV00sCisJQllURSBiX1N0YXJ0TGV2ZWwsCisJQllURSBiX1N0b3BNb2RlLAorCUJZVEUgYl9TdG9wTGV2ZWwsIEJZVEUgYl9FeHRlcm5HYXRlLCBCWVRFIGJfSW50ZXJydXB0RW5hYmxlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJRFdPUkQgZHdfQ29tbWFuZDsKKworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFBXTSAqLworCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfUFdNKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgUFdNIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUFdNIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBQV00gaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoMjAgKiBiX1BXTSkgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHN0YXJ0IGxldmVsIHNlbGVjdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfU3RhcnRMZXZlbCA8PSAxKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIHN0b3AgbW9kZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChiX1N0b3BNb2RlIDw9IDEpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIHN0b3AgbGV2ZWwgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfU3RvcExldmVsIDw9IDIpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBleHRlcm4gZ2F0ZSBtb2RlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoYl9FeHRlcm5HYXRlCisJCQkJCQkJCQk8PSAxKSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGVzdCB0aGUgaW50ZXJydXB0IGFjdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSB8fCBiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUZXN0IGlmIGludGVycnVwdCBmdW5jdGlvbiBpbml0aWFsaXNlZCAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUmVhZCB0aGUgY29tbWFuZCAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQk4CisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJJgorCQkJCQkJCQkJCQkweDgwOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIE1ha2UgdGhlIGNvbW1hbmQgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCWJfU3RvcE1vZGUKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoYl9JbnRlcnJ1cHRFbmFibGUKKwkJCQkJCQkJCQkJPDwKKwkJCQkJCQkJCQkJMykKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoYl9FeHRlcm5HYXRlCisJCQkJCQkJCQkJCTw8CisJCQkJCQkJCQkJCTQpCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJKGJfU3RhcnRMZXZlbAorCQkJCQkJCQkJCQk8PAorCQkJCQkJCQkJCQk1KTsKKworCQkJCQkJCQkJCWlmIChiX1N0b3BMZXZlbCAmIDMpIHsKKwkJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCQlpZiAoYl9TdG9wTGV2ZWwgJiAyKSB7CisJCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCQkJNDsKKwkJCQkJCQkJCQkJfQorCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJCQliX0ludGVycnVwdEVuYWJsZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2V0IHRoZSBjb21tYW5kICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlvdXRsKGR3X0NvbW1hbmQsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgOCArICgyMCAqIGJfUFdNKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogRW5hYmxlIHRoZSBQV00gKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMiArICgyMCAqIGJfUFdNKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQkJCX0JLy8gaWYgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSB8fCBiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKQorCQkJCQkJCQkJZWxzZSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJRFBSSU5USygiSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCS0xMDsKKwkJCQkJCQkJCX0JLy8gaWYgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSB8fCBiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKQorCQkJCQkJCQl9CS8vIGlmIChiX0V4dGVybkdhdGUgPj0gMCAmJiBiX0V4dGVybkdhdGUgPD0gMSkKKwkJCQkJCQkJZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogRXh0ZXJuIGdhdGUgc2lnbmFsIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCURQUklOVEsoIkV4dGVybiBnYXRlIHNpZ25hbCBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQktOTsKKwkJCQkJCQkJfQkvLyBpZiAoYl9FeHRlcm5HYXRlID49IDAgJiYgYl9FeHRlcm5HYXRlIDw9IDEpCisJCQkJCQkJfQkvLyBpZiAoYl9TdG9wTGV2ZWwgPj0gMCAmJiBiX1N0b3BMZXZlbCA8PSAyKQorCQkJCQkJCWVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogUFdNIHN0b3AgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQlEUFJJTlRLKCJQV00gc3RvcCBsZXZlbCBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS04OworCQkJCQkJCX0JLy8gaWYgKGJfU3RvcExldmVsID49IDAgJiYgYl9TdG9wTGV2ZWwgPD0gMikKKwkJCQkJCX0JLy8gaWYgKGJfU3RvcE1vZGUgPj0gMCAmJiBiX1N0b3BNb2RlIDw9IDEpCisJCQkJCQllbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBQV00gc3RvcCBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCURQUklOVEsoIlBXTSBzdG9wIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQl9CS8vIGlmIChiX1N0b3BNb2RlID49IDAgJiYgYl9TdG9wTW9kZSA8PSAxKQorCQkJCQl9CS8vIGlmIChiX1N0YXJ0TGV2ZWwgPj0gMCAmJiBiX1N0YXJ0TGV2ZWwgPD0gMSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBQV00gc3RhcnQgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQlEUFJJTlRLKCJQV00gc3RhcnQgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQkvLyBpZiAoYl9TdGFydExldmVsID49IDAgJiYgYl9TdGFydExldmVsIDw9IDEpCisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUFdNIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCJQV00gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MTApCisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0Rpc2FibGVQV00gKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9QV00pICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGUgdGhlIHNlbGVjdGVkIFBXTSAoYl9QV00pIGZyb20gc2VsZWN0ZWQgbW9kdWxlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBUaGUgb3V0cHV0IHNpZ25hbCBsZXZlbCBkZXBlbmQgb2YgdGhlICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXNhdGlvbiBieSB0aGUgImlfQVBDSTE3MTBfRW5hYmxlUFdNIi4gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgYl9TdGFydExldmVsLCBiX1N0b3BNb2RlIGFuZCBiX1N0b3BMZXZlbCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBmcm9tIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6QllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKSAgIHwKK3wgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfUFdNICAgICAgICAgOiBTZWxlY3RlZCBQV00gKDAgb3IgMSkgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogUFdNIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0UFdNIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IFBXTSBub3QgZW5hYmxlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRW5hYmxlUFdNIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9EaXNhYmxlUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9QV00pCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1czsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBQV00gKi8KKwkgICAvKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1BXTSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIFBXTSBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1BXTSA8PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgUFdNIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDEyICsgKDIwICogYl9QV00pICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MTApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBQV00gZW5hYmxlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkd19TdGF0dXMgJiAweDEpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogRGlzYWJsZSB0aGUgUFdNICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyAxMiArCisJCQkJCQkJKDIwICogYl9QV00pICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFBXTSBub3QgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQlEUFJJTlRLKCJQV00gbm90IGVuYWJsZWRcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEpCisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUFdNIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCIgUFdNIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIlRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9TZXROZXdQV01UaW1pbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1BXTSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfQ2xvY2tTZWxlY3Rpb24sICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1pbmdVbml0LCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgIHVsX0xvd1RpbWluZywgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgdWxfSGlnaFRpbWluZykgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU2V0IGEgbmV3IHRpbWluZy4gVGhlIHVsX0xvd1RpbWluZywgdWxfSGlnaFRpbWluZyBhbmQgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bF9UaW1pbmdVbml0IGRldGVybWluZSB0aGUgbG93L2hpZ2ggdGltaW5nIGJhc2UgZm9yICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBwZXJpb2QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmV8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9QV00gICAgICAgICAgICA6IFNlbGVjdGVkIFBXTSAoMCBvciAxKS4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWluZ1VuaXQgICAgIDogQmFzZSB0aW1pbmcgVW5pdCAoMCB0byA0KSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBucyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IMOmcyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IG1zICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIDogcyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiBtbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICAgdWxfTG93VGltaW5nICAgICA6IExvdyBiYXNlIHRpbWluZyB2YWx1ZS4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgICB1bF9IaWdoVGltaW5nICAgIDogSGlnaCBiYXNlIHRpbWluZyB2YWx1ZS4gICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBQV00gc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFBXTSBub3QgaW5pdGlhbGlzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVGltaW5nIFVuaXQgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTg6IEhpZ2ggYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1NldE5ld1BXTVRpbWluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1BXTSwgQllURSBiX1RpbWluZ1VuaXQsIFVMT05HIHVsX0xvd1RpbWluZywgVUxPTkcgdWxfSGlnaFRpbWluZykKK3sKKwlCWVRFIGJfQ2xvY2tTZWxlY3Rpb247CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCVVMT05HIHVsX0xvd1RpbWVyVmFsdWUgPSAwOworCVVMT05HIHVsX0hpZ2hUaW1lclZhbHVlID0gMDsKKwlVTE9ORyB1bF9SZWFsTG93VGltaW5nID0gMDsKKwlVTE9ORyB1bF9SZWFsSGlnaFRpbWluZyA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCURXT1JEIGR3X0NvbW1hbmQ7CisJZG91YmxlIGRfUmVhbExvd1RpbWluZyA9IDA7CisJZG91YmxlIGRfUmVhbEhpZ2hUaW1pbmcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFBXTSAqLworCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfUFdNKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgUFdNIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUFdNIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBQV00gaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoMjAgKiBiX1BXTSkgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkJCQliX0Nsb2NrU2VsZWN0aW9uID0gZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQliX0Nsb2NrU2VsZWN0aW9uOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSB0aW1pbmcgdW5pdCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9UaW1pbmdVbml0IDw9IDQpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBsb3cgdGltaW5nIHNlbGVjdGlvbiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKCgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDI2NikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTB4RkZGRkZGRkZVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTU3MTIzMDY1MFVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAyKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTcxMjMwVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDMpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1NzFVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gNCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0gOVVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAwKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAyNDIpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQkweEZGRkZGRkZGVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1MTk2OTEwNDNVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTUxOTY5MVVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAzKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTIwVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDQpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9IDhVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMjAwKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJMHhGRkZGRkZGRlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNDI5NDk2NzI5VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDIpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk0Mjk0OTZVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMykKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTQyOVVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSA0KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJN1VMKSkpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgSGlnaCB0aW1pbmcgc2VsZWN0aW9uICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKCgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfSGlnaFRpbWluZyA+PSAyNjYpICYmICh1bF9IaWdoVGltaW5nIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1NzEyMzA2NTBVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1NzEyMzBVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1NzFVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA5VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMjQyKSAmJiAodWxfSGlnaFRpbWluZyA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTE5NjkxMDQzVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTE5NjkxVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTIwVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gOFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9IaWdoVGltaW5nID49IDIwMCkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDQyOTQ5NjcyOVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDQyOTQ5NlVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDQyOVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDdVTCkpKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgbG93IGRpdmlzaW9uIGZhdG9yICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZnB1X2JlZ2luKCk7CisJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0KSB7CisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIG5zICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDA6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDAuMDAwMjUgKiBiX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWluZyAqICgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMC4wMDAyNQorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlIC8gKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogw6ZzICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDE6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDAuMjUgKiBiX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWluZyAqICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMC4yNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMC4yNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiBtcyAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSAyOgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWluZyAqICgyNTAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlIC8gKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqLworCQkJCQkJCQkJLyogcyAqLworCQkJCS8qKioqKi8KKworCQkJCQkJCQljYXNlIDM6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1pbmcgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbW4gKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgNDoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKAorCQkJCQkJCQkJCSh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQk2MCkKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSkodWxfTG93VGltaW5nICogNjAuMCkgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQk2MDsKKwkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQk2MC4wOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpIC8gNjAuMCkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgaGlnaCBkaXZpc2lvbiBmYXRvciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlzd2l0Y2ggKGJfVGltaW5nVW5pdCkgeworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiBucyAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSAwOgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDAuMDAwMjUgKiBiX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJZF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlIC8gKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogw6ZzICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDE6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMC4yNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWluZyAqICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKAorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJMC4yNQorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsSGlnaFRpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIG1zICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDI6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltaW5nICogKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJZF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgyNTAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKi8KKwkJCQkJCQkJCS8qIHMgKi8KKwkJCQkvKioqKiovCisKKwkJCQkJCQkJY2FzZSAzOgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltaW5nICogKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbW4gKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgNDoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTYwKQorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKSh1bF9IaWdoVGltaW5nICogNjAuMCkgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJZF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSkKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJNjAuMDsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKCgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlIC8gKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgLyA2MC4wKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKworCQkJCQkJCQlmcHVfZW5kKCk7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2F2ZSB0aGUgdGltaW5nIHVuaXQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9CisJCQkJCQkJCQliX1RpbWluZ1VuaXQ7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNhdmUgdGhlIGxvdyBiYXNlIHRpbWluZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJZF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRfUmVhbExvd1RpbWluZzsKKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJPQorCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2F2ZSB0aGUgaGlnaCBiYXNlIHRpbWluZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJZF9IaWdoVGltaW5nCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nOworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJPQorCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmc7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogV3JpdGUgdGhlIGxvdyB0aW1pbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKHVsX0xvd1RpbWVyVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMCArICgyMCAqIGJfUFdNKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogV3JpdGUgdGhlIGhpZ2ggdGltaW5nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwodWxfSGlnaFRpbWVyVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgNCArICgyMCAqIGJfUFdNKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIGNsb2NrIHNlbGVjdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWR3X0NvbW1hbmQgPQorCQkJCQkJCQkJaW5sCisJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkrIDggKworCQkJCQkJCQkJKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCWR3X0NvbW1hbmQgPQorCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJJiAweDdGOworCisJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQl8CisJCQkJCQkJCQkJMHg4MDsKKwkJCQkJCQkJfQorCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgY2xvY2sgc2VsZWN0aW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bChkd19Db21tYW5kLAorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkrIDggKworCQkJCQkJCQkJKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEhpZ2ggYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCURQUklOVEsoIkhpZ2ggYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktODsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogTG93IGJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJRFBSSU5USygiTG93IGJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC03OworCQkJCQkJfQorCQkJCQl9CS8vIGlmICgoYl9UaW1pbmdVbml0ID49IDApICYmIChiX1RpbWluZ1VuaXQgPD0gNCkpCisJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaW1pbmcgdW5pdCBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJRFBSSU5USygiVGltaW5nIHVuaXQgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQkvLyBpZiAoKGJfVGltaW5nVW5pdCA+PSAwKSAmJiAoYl9UaW1pbmdVbml0IDw9IDQpKQorCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MTApCisJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFBXTSBub3QgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJRFBSSU5USygiUFdNIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIlRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRQV01TdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX1BXTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfUFdNT3V0cHV0U3RhdHVzLCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICBwYl9FeHRlcm5HYXRlU3RhdHVzKSAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBmcm9tIHNlbGVjdGVkIFBXTSAoYl9QV00pIGZyb20gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1BXTSAgICAgICAgIDogU2VsZWN0ZWQgUFdNICgwIG9yIDEpICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpCisJYl9Nb2R1bE5icgkJCT0oQllURSkgIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUFdNCQkJCT0oQllURSkgIGRhdGFbMF07CisKKyB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gIHBiX1BXTU91dHB1dFN0YXR1cyAgOiBSZXR1cm4gdGhlIFBXTSBvdXRwdXQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsIHN0YXR1cy4gICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgUFdNIG91dHB1dCBsZXZlbHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGxvdy4gICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVGhlIFBXTSBvdXRwdXQgbGV2ZWx8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBoaWdoLiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0V4dGVybkdhdGVTdGF0dXMgOiBSZXR1cm4gdGhlIGV4dGVybiBnYXRlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsIHN0YXR1cy4gICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgZXh0ZXJuIGdhdGUgaXMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdy4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVGhlIGV4dGVybiBnYXRlIGlzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoLgorICAgIHBiX1BXTU91dHB1dFN0YXR1cwk9KFBCWVRFKSBkYXRhWzBdOworCXBiX0V4dGVybkdhdGVTdGF0dXMgPShQQllURSkgZGF0YVsxXTsgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBQV00gbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRQV00iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogUFdNIG5vdCBlbmFibGVkIHNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9FbmFibGVQV00ifAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZEdldFBXTVN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1czsKKworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfUFdNOworCVBCWVRFIHBiX1BXTU91dHB1dFN0YXR1czsKKwlQQllURSBwYl9FeHRlcm5HYXRlU3RhdHVzOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1BXTSA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlwYl9QV01PdXRwdXRTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKwlwYl9FeHRlcm5HYXRlU3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMV07CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFBXTSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxMiArICgyMCAqIGJfUFdNKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgUFdNIGVuYWJsZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZHdfU3RhdHVzICYgMHgxKSB7CisJCQkJCQkqcGJfUFdNT3V0cHV0U3RhdHVzID0KKwkJCQkJCQkoQllURSkgKChkd19TdGF0dXMgPj4gNykKKwkJCQkJCQkmIDEpOworCQkJCQkJKnBiX0V4dGVybkdhdGVTdGF0dXMgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1cyA+PiA2KQorCQkJCQkJCSYgMSk7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFBXTSBub3QgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlBXTSBub3QgZW5hYmxlZCBcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEpCisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUFdNIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlBXTSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNSZWFkUFdNSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0uYl9PbGRNb2R1bGVNYXNrOworCWRhdGFbMV0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRJbnRlcnJ1cHRNYXNrOworCWRhdGFbMl0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogSW5jcmVtZW50IHRoZSByZWFkIEZJRk8gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWRldnByaXYtPgorCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXVpX1JlYWQgPSAoZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkICsgMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCXJldHVybiBpbnNuLT5uOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI3ZjRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwXzMwTUhaCQkzMAorI2RlZmluZSBBUENJMTcxMF8zM01IWgkJMzMKKyNkZWZpbmUgQVBDSTE3MTBfNDBNSFoJCTQwCisKKyNkZWZpbmUgQVBDSTE3MTBfUFdNX0lOSVQJCTAKKyNkZWZpbmUgQVBDSTE3MTBfUFdNX0dFVElOSVREQVRBCTEKKworI2RlZmluZSBBUENJMTcxMF9QV01fRElTQUJMRQkJMAorI2RlZmluZSBBUENJMTcxMF9QV01fRU5BQkxFCQkxCisjZGVmaW5lIEFQQ0kxNzEwX1BXTV9ORVdUSU1JTkcJCTIKKworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ1BXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9Jbml0UFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCSAgICAgICBCWVRFIGJfTW9kdWxOYnIsCisJCSAgICAgICBCWVRFIGJfUFdNLAorCQkgICAgICAgQllURSBiX0Nsb2NrU2VsZWN0aW9uLAorCQkgICAgICAgQllURSBiX1RpbWluZ1VuaXQsCisJCSAgICAgICBVTE9ORyB1bF9Mb3dUaW1pbmcsCisJCSAgICAgICBVTE9ORyB1bF9IaWdoVGltaW5nLAorCQkgICAgICAgUFVMT05HIHB1bF9SZWFsTG93VGltaW5nLCBQVUxPTkcgcHVsX1JlYWxIaWdoVGltaW5nKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0UFdNSW5pdGlhbGlzYXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgQllURSBiX01vZHVsTmJyLAorCQkJCSAgICBCWVRFIGJfUFdNLAorCQkJCSAgICBQQllURSBwYl9UaW1pbmdVbml0LAorCQkJCSAgICBQVUxPTkcgcHVsX0xvd1RpbWluZywKKwkJCQkgICAgUFVMT05HIHB1bF9IaWdoVGltaW5nLAorCQkJCSAgICBQQllURSBwYl9TdGFydExldmVsLAorCQkJCSAgICBQQllURSBwYl9TdG9wTW9kZSwKKwkJCQkgICAgUEJZVEUgcGJfU3RvcExldmVsLAorCQkJCSAgICBQQllURSBwYl9FeHRlcm5HYXRlLAorCQkJCSAgICBQQllURSBwYl9JbnRlcnJ1cHRFbmFibGUsIFBCWVRFIHBiX0VuYWJsZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJIEJZVEUgYl9Nb2R1bE5iciwKKwkJCSBCWVRFIGJfUFdNLAorCQkJIEJZVEUgYl9TdGFydExldmVsLAorCQkJIEJZVEUgYl9TdG9wTW9kZSwKKwkJCSBCWVRFIGJfU3RvcExldmVsLCBCWVRFIGJfRXh0ZXJuR2F0ZSwKKwkJCSBCWVRFIGJfSW50ZXJydXB0RW5hYmxlKTsKKworSU5UIGlfQVBDSTE3MTBfU2V0TmV3UFdNVGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICAgQllURSBiX01vZHVsTmJyLAorCQkJICAgICAgIEJZVEUgYl9QV00sIEJZVEUgYl9UaW1pbmdVbml0LAorCQkJICAgICAgIFVMT05HIHVsX0xvd1RpbWluZywgVUxPTkcgdWxfSGlnaFRpbWluZyk7CisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfUFdNKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRHZXRQV01TdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNSZWFkUFdNSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Tc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjZlMTYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Tc2kuYwpAQCAtMCwwICsxLDg0OCBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUEkgQVBDSTE3MTAgICAgfCBDb21waWxlciA6IGdjYyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IFNTSS5DICAgICAgICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE3MTAgU1NJIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAxMy8wNS85OCB8IFMuIFdlYmVyICB8IFNTSSBkaWdpdGFsIGlucHV0IC8gb3V0cHV0IGltcGxlbWVudGF0aW9uICAgICAgfAorICB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgIHwgMjIvMDMvMDAgfCBDLkd1aW5vdCAgfCAwMTAwLzAyMjYgLT4gMDIwMC8wMjI3ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IMOEbmRlcnVuZyBpbiBJbml0U1NJIEZ1bmt0aW9uICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IGJfU1NJUHJvZmlsZSA+PSAyIGFuc3RhdHQgYl9TU0lQcm9maWxlID4gMiAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiQVBDSTE3MTBfU3NpLmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0luaXRTU0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfU1NJUHJvZmlsZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9Qb3NpdGlvblR1cm5MZW5ndGgsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX1R1cm5DcHRMZW5ndGgsICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfUENJSW5wdXRDbG9jaywgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICB1bF9TU0lPdXRwdXRDbG9jaywgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX1NTSUNvdW50aW5nTW9kZSkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZSB0aGUgU1NJIG9wZXJhdGluZyBtb2RlIGZyb20gc2VsZWN0ZWQgbW9kdWxlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmUgZm9yIHlvdXwKK3wgICAgICAgICAgICAgICAgICAgICBjYWxsIGFueSBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgU1NJLiAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAzKSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfU1NJUHJvZmlsZSAgICAgICAgIDogU2VsZWN0aW9uIGZyb20gU1NJICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlIGxlbmd0aCAoMiB0byAzMikufAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1Bvc2l0aW9uVHVybkxlbmd0aCA6IFNlbGVjdGlvbiBmcm9tIFNTSSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gZGF0YSBsZW5ndGggICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB0byAzMSkuICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1R1cm5DcHRMZW5ndGggICAgICA6IFNlbGVjdGlvbiBmcm9tIFNTSSB0dXJuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciBkYXRhIGxlbmd0aCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB0byAzMSkuICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEUgICBiX1BDSUlucHV0Q2xvY2sgICAgICA6IFNlbGVjdGlvbiBmcm9tIFBDSSBidXMgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zME1IWiA6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMCBNSHogICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zM01IWiA6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMyBNSHogICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfU1NJT3V0cHV0Q2xvY2sgICAgOiBTZWxlY3Rpb24gZnJvbSBTU0kgb3V0cHV0fAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSAgMjI5IHRvIDUgMDAwIDAwMCBIenwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgMzAgTUh6IHNlbGVjdGlvbi4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb20gIDI1MiB0byA1IDAwMCAwMDAgSHp8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIDMzIE1IeiBzZWxlY3Rpb24uICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFICAgYl9TU0lDb3VudGluZ01vZGUgICAgOiBTU0kgY291bnRpbmcgbW9kZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfQklOQVJZX01PREUgOiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmluYXJ5IGNvdW50aW5nIG1vZGUuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwX0dSQVlfTU9ERSA6ICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXkgY291bnRpbmcgbW9kZS4KKworCWJfTW9kdWxOYnIJCQk9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU1NJUHJvZmlsZQkJPSAoQllURSkgZGF0YVswXTsKKwliX1Bvc2l0aW9uVHVybkxlbmd0aD0gKEJZVEUpIGRhdGFbMV07CisJYl9UdXJuQ3B0TGVuZ3RoCQk9IChCWVRFKSBkYXRhWzJdOworCWJfUENJSW5wdXRDbG9jawkJPSAoQllURSkgZGF0YVszXTsKKwl1bF9TU0lPdXRwdXRDbG9jawk9IChVTE9ORykgZGF0YVs0XTsKKwliX1NTSUNvdW50aW5nTW9kZQk9IChCWVRFKSAgZGF0YVs1XTsgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFNTSSBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBTU0kgcHJvZmlsZSBsZW5ndGggaXMgd3JvbmcgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIFNTSSBwb3NpdGlvbiBkYXRhIGxlbmd0aCBpcyB3cm9uZyAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUaGUgc2VsZWN0ZWQgU1NJIHR1cm4gY291bnRlciBkYXRhIGxlbmd0aCBpcyB3cm9uZyAgfAorfCAgICAgICAgICAgICAgICAgICAgLTc6IFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtODogVGhlIHNlbGVjdGVkIFNTSSBvdXRwdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC05OiBUaGUgc2VsZWN0ZWQgU1NJIGNvdW50aW5nIG1vZGUgcGFyYW1ldGVyIGlzIHdyb25nICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFNTSShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCVVJTlQgdWlfVGltZXJWYWx1ZTsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfU1NJUHJvZmlsZSwgYl9Qb3NpdGlvblR1cm5MZW5ndGgsIGJfVHVybkNwdExlbmd0aCwKKwkJYl9QQ0lJbnB1dENsb2NrLCBiX1NTSUNvdW50aW5nTW9kZTsKKwlVTE9ORyB1bF9TU0lPdXRwdXRDbG9jazsKKworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1NTSVByb2ZpbGUgPSAoQllURSkgZGF0YVswXTsKKwliX1Bvc2l0aW9uVHVybkxlbmd0aCA9IChCWVRFKSBkYXRhWzFdOworCWJfVHVybkNwdExlbmd0aCA9IChCWVRFKSBkYXRhWzJdOworCWJfUENJSW5wdXRDbG9jayA9IChCWVRFKSBkYXRhWzNdOworCXVsX1NTSU91dHB1dENsb2NrID0gKFVMT05HKSBkYXRhWzRdOworCWJfU1NJQ291bnRpbmdNb2RlID0gKEJZVEUpIGRhdGFbNV07CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBTU0kgY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9TU0lfQ09VTlRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgU1NJIHByb2ZpbGUgbGVuZ3RoICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8vIENHIDIyLzAzLzAwIGJfU1NJUHJvZmlsZSA+PSAyIGFuc3RhdHQgYl9TU0lQcm9maWxlID4gMgorCQkJaWYgKGJfU1NJUHJvZmlsZSA+PSAyICYmIGJfU1NJUHJvZmlsZSA8IDMzKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBTU0kgcG9zaXRpb24gZGF0YSBsZW5ndGggKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGJfUG9zaXRpb25UdXJuTGVuZ3RoID4gMAorCQkJCQkmJiBiX1Bvc2l0aW9uVHVybkxlbmd0aCA8IDMyKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIFNTSSB0dXJuIGNvdW50ZXIgZGF0YSBsZW5ndGggKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9UdXJuQ3B0TGVuZ3RoID4gMAorCQkJCQkJJiYgYl9UdXJuQ3B0TGVuZ3RoIDwgMzIpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBwcm9maWxlIGxlbmd0aCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKChiX1R1cm5DcHRMZW5ndGggKworCQkJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aCkKKwkJCQkJCQk8PSBiX1NTSVByb2ZpbGUpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgUENJIGlucHV0IGNsb2NrICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF8zME1IWgorCQkJCQkJCQl8fAorCQkJCQkJCQliX1BDSUlucHV0Q2xvY2sKKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCB0aGUgb3V0cHV0IGNsb2NrICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaICYmICh1bF9TU0lPdXRwdXRDbG9jayA+IDIyOCAmJiB1bF9TU0lPdXRwdXRDbG9jayA8PSA1MDAwMDAwVUwpKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaICYmICh1bF9TU0lPdXRwdXRDbG9jayA+IDI1MSAmJiB1bF9TU0lPdXRwdXRDbG9jayA8PSA1MDAwMDAwVUwpKSkgeworCQkJCQkJCQkJaWYgKGJfU1NJQ291bnRpbmdNb2RlID09IEFQQ0kxNzEwX0JJTkFSWV9NT0RFIHx8IGJfU1NJQ291bnRpbmdNb2RlID09IEFQQ0kxNzEwX0dSQVlfTU9ERSkgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFNhdmUgY29uZmlndXJhdGlvbiAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCQkJCQliX1NTSVByb2ZpbGUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQliX1NTSVByb2ZpbGU7CisKKwkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQkJCQkJYl9Qb3NpdGlvblR1cm5MZW5ndGgKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aDsKKworCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCQkJCQliX1R1cm5DcHRMZW5ndGgKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQliX1R1cm5DcHRMZW5ndGg7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIEluaXRpYWxpc2UgdGhlIHByb2ZpbGUgbGVuZ3RoICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmIChiX1NTSUNvdW50aW5nTW9kZSA9PSBBUENJMTcxMF9CSU5BUllfTU9ERSkgeworCisJCQkJCQkJCQkJCW91dGwoYl9TU0lQcm9maWxlICsgMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQkJCX0gZWxzZSB7CisKKwkJCQkJCQkJCQkJb3V0bChiX1NTSVByb2ZpbGUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQkJCQl9CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgb3V0cHV0IGNsb2NrICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVpX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoKFVMT05HKSAoYl9QQ0lJbnB1dENsb2NrKSAqIDUwMDAwMFVMKSAvIHVsX1NTSU91dHB1dENsb2NrKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogSW5pdGlhbGlzZSB0aGUgdGltZXIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJb3V0bCh1aV9UaW1lclZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBJbml0aWFsaXNlIHRoZSBjb3VudGluZyBtb2RlICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJb3V0bCg3ICogYl9TU0lDb3VudGluZ01vZGUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMTIgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQkJCQkJYl9TU0lJbml0CisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0gZWxzZSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRoZSBzZWxlY3RlZCBTU0kgY291bnRpbmcgbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIGNvdW50aW5nIG1vZGUgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJLTk7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRoZSBzZWxlY3RlZCBTU0kgb3V0cHV0IGNsb2NrIGlzIHdyb25nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFNTSSBvdXRwdXQgY2xvY2sgaXMgd3JvbmdcbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQktODsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTc7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRoZSBzZWxlY3RlZCBTU0kgcHJvZmlsZSBsZW5ndGggaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRoZSBzZWxlY3RlZCBTU0kgdHVybiBjb3VudGVyIGRhdGEgbGVuZ3RoIGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIHR1cm4gY291bnRlciBkYXRhIGxlbmd0aCBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaGUgc2VsZWN0ZWQgU1NJIHBvc2l0aW9uIGRhdGEgbGVuZ3RoIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFNTSSBwb3NpdGlvbiBkYXRhIGxlbmd0aCBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBTU0kgcHJvZmlsZSBsZW5ndGggaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBTU0kgcHJvZmlsZSBsZW5ndGggaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFNTSSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gIGlfQVBDSTE3MTBfUmVhZDFTU0lWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9TZWxlY3RlZFNTSSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1Bvc2l0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfVHVybkNwdCkKKyBJTlQgaV9BUENJMTcxMF9SZWFkU1NJVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDoKKworCisJCQkJCQlSZWFkIHRoZSBzZWxlY3RlZCBTU0kgY291bnRlciAoYl9TZWxlY3RlZFNTSSkgZnJvbSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuCisJCQkJCQlvciBSZWFkIGFsbCBTU0kgY291bnRlciAoYl9TZWxlY3RlZFNTSSkgZnJvbSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU2VsZWN0ZWRTU0kgICAgICAgICA6IFNlbGVjdGlvbiBmcm9tIFNTSSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciAoMCB0byAyKQorCisgICAgYl9Nb2R1bE5icgkJPSAgIChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1NlbGVjdGVkU1NJCT0JKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOyAoaW4gY2FzZSBvZiBzaW5nbGUgc3NpKQorCWJfUmVhZFR5cGUJCT0JKEJZVEUpIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKK3wKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9Qb3NpdGlvbiAgICAgICA6IFNTSSBwb3NpdGlvbiBpbiB0aGUgdHVybiB8Cit8ICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyAgcHVsX1R1cm5DcHQgICAgICAgIDogTnVtYmVyIG9mIHR1cm5zCisKK3B1bF9Qb3NpdGlvbgk9CShQVUxPTkcpICZkYXRhWzBdOworCXB1bF9UdXJuQ3B0CQk9CShQVUxPTkcpICZkYXRhWzFdOyAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogU1NJIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0U1NJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFRoZSBzZWxlY3RlZCBTU0kgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkU1NJVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfQ3B0OworCUJZVEUgYl9MZW5ndGg7CisJQllURSBiX1NjaGlmdDsKKwlCWVRFIGJfU1NJQ3B0OworCURXT1JEIGR3X0FuZDsKKwlEV09SRCBkd19BbmQxOworCURXT1JEIGR3X0FuZDI7CisJRFdPUkQgZHdfU3RhdHVzUmVnOworCURXT1JEIGR3X0NvdW50ZXJWYWx1ZTsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1NlbGVjdGVkU1NJOworCUJZVEUgYl9SZWFkVHlwZTsKKwlQVUxPTkcgcHVsX1Bvc2l0aW9uOworCVBVTE9ORyBwdWxfVHVybkNwdDsKKwlQVUxPTkcgcHVsX1Bvc2l0aW9uMTsKKwlQVUxPTkcgcHVsX1R1cm5DcHQxOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcHVsX1Bvc2l0aW9uMSA9IChQVUxPTkcpICYgZGF0YVswXTsKKy8vIEZvciBSZWFkMQorCXB1bF9UdXJuQ3B0MSA9IChQVUxPTkcpICYgZGF0YVsxXTsKKy8vIEZvciBSZWFkIGFsbAorCXB1bF9Qb3NpdGlvbiA9IChQVUxPTkcpICYgZGF0YVswXTsJLy8wLTIKKwlwdWxfVHVybkNwdCA9IChQVUxPTkcpICYgZGF0YVszXTsJLy8zLTUKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU2VsZWN0ZWRTU0kgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJYl9SZWFkVHlwZSA9IChCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBTU0kgY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9TU0lfQ09VTlRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIFNTSSBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TU0lDb3VudGVySW5mby5iX1NTSUluaXQgPT0gMSkgeworCisJCQkJc3dpdGNoIChiX1JlYWRUeXBlKSB7CisKKwkJCQljYXNlIEFQQ0kxNzEwX1NTSV9SRUFEMVZBTFVFOgorCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHNlbGVjdGVkIFNTSSBjb3VudGVyIG51bWJlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfU2VsZWN0ZWRTU0kgPCAzKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogU3RhcnQgdGhlIGNvbnZlcnNpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCWRvIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCX0KKwkJCQkJCXdoaWxlICgoZHdfU3RhdHVzUmVnICYgMHgxKSAhPQorCQkJCQkJCTApOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCB0aGUgU1NJIGNvdW50ZXIgdmFsdWUgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsgNCArCisJCQkJCQkJKGJfU2VsZWN0ZWRTU0kgKiA0KSArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQliX0xlbmd0aCA9CisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJYl9TU0lQcm9maWxlIC8gMjsKKworCQkJCQkJaWYgKChiX0xlbmd0aCAqIDIpICE9CisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJYl9TU0lQcm9maWxlKSB7CisJCQkJCQkJYl9MZW5ndGgrKzsKKwkJCQkJCX0KKworCQkJCQkJYl9TY2hpZnQgPQorCQkJCQkJCWJfTGVuZ3RoIC0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aDsKKworCQkJCQkJKnB1bF9Qb3NpdGlvbjEgPQorCQkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA+PgorCQkJCQkJCWJfU2NoaWZ0OworCisJCQkJCQlkd19BbmQgPSAxOworCisJCQkJCQlmb3IgKGJfQ3B0ID0gMDsKKwkJCQkJCQliX0NwdCA8CisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJYl9Qb3NpdGlvblR1cm5MZW5ndGg7CisJCQkJCQkJYl9DcHQrKykgeworCQkJCQkJCWR3X0FuZCA9IGR3X0FuZCAqIDI7CisJCQkJCQl9CisKKwkJCQkJCSpwdWxfUG9zaXRpb24xID0KKwkJCQkJCQkqcHVsX1Bvc2l0aW9uMSAmCisJCQkJCQkJKChkd19BbmQpIC0gMSk7CisKKwkJCQkJCSpwdWxfVHVybkNwdDEgPQorCQkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA+PgorCQkJCQkJCWJfTGVuZ3RoOworCisJCQkJCQlkd19BbmQgPSAxOworCisJCQkJCQlmb3IgKGJfQ3B0ID0gMDsKKwkJCQkJCQliX0NwdCA8CisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJYl9UdXJuQ3B0TGVuZ3RoOworCQkJCQkJCWJfQ3B0KyspIHsKKwkJCQkJCQlkd19BbmQgPSBkd19BbmQgKiAyOworCQkJCQkJfQorCisJCQkJCQkqcHVsX1R1cm5DcHQxID0KKwkJCQkJCQkqcHVsX1R1cm5DcHQxICYKKwkJCQkJCQkoKGR3X0FuZCkgLSAxKTsKKwkJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRoZSBzZWxlY3RlZCBTU0kgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFNTSSBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX1NTSV9SRUFEQUxMVkFMVUU6CisJCQkJCWR3X0FuZDEgPSAxOworCisJCQkJCWZvciAoYl9DcHQgPSAwOworCQkJCQkJYl9DcHQgPAorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJYl9Qb3NpdGlvblR1cm5MZW5ndGg7IGJfQ3B0KyspIHsKKwkJCQkJCWR3X0FuZDEgPSBkd19BbmQxICogMjsKKwkJCQkJfQorCisJCQkJCWR3X0FuZDIgPSAxOworCisJCQkJCWZvciAoYl9DcHQgPSAwOworCQkJCQkJYl9DcHQgPAorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJYl9UdXJuQ3B0TGVuZ3RoOyBiX0NwdCsrKSB7CisJCQkJCQlkd19BbmQyID0gZHdfQW5kMiAqIDI7CisJCQkJCX0KKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU3RhcnQgdGhlIGNvbnZlcnNpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgOCArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJZG8geworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBSZWFkIHRoZSBzdGF0dXMgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQl9CisJCQkJCXdoaWxlICgoZHdfU3RhdHVzUmVnICYgMHgxKSAhPSAwKTsKKworCQkJCQlmb3IgKGJfU1NJQ3B0ID0gMDsgYl9TU0lDcHQgPCAzOworCQkJCQkJYl9TU0lDcHQrKykgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFJlYWQgdGhlIFNTSSBjb3VudGVyIHZhbHVlICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlkd19Db3VudGVyVmFsdWUgPQorCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDQgKworCQkJCQkJCShiX1NTSUNwdCAqIDQpICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCWJfTGVuZ3RoID0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1NTSVByb2ZpbGUgLyAyOworCisJCQkJCQlpZiAoKGJfTGVuZ3RoICogMikgIT0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1NTSVByb2ZpbGUpIHsKKwkJCQkJCQliX0xlbmd0aCsrOworCQkJCQkJfQorCisJCQkJCQliX1NjaGlmdCA9CisJCQkJCQkJYl9MZW5ndGggLQorCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCWJfUG9zaXRpb25UdXJuTGVuZ3RoOworCisJCQkJCQlwdWxfUG9zaXRpb25bYl9TU0lDcHRdID0KKwkJCQkJCQlkd19Db3VudGVyVmFsdWUgPj4KKwkJCQkJCQliX1NjaGlmdDsKKwkJCQkJCXB1bF9Qb3NpdGlvbltiX1NTSUNwdF0gPQorCQkJCQkJCXB1bF9Qb3NpdGlvbltiX1NTSUNwdF0gJgorCQkJCQkJCSgoZHdfQW5kMSkgLSAxKTsKKworCQkJCQkJcHVsX1R1cm5DcHRbYl9TU0lDcHRdID0KKwkJCQkJCQlkd19Db3VudGVyVmFsdWUgPj4KKwkJCQkJCQliX0xlbmd0aDsKKwkJCQkJCXB1bF9UdXJuQ3B0W2JfU1NJQ3B0XSA9CisJCQkJCQkJcHVsX1R1cm5DcHRbYl9TU0lDcHRdICYKKwkJCQkJCQkoKGR3X0FuZDIpIC0gMSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlwcmludGsoIlJlYWQgVHlwZSBJbnB1dHMgV3JvbmdcbiIpOworCisJCQkJfQkvLyBzd2l0Y2ggIGVuZGluZworCisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNTSSBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlNTSSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFNTSSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgIGlfQVBDSTE3MTBfUmVhZFNTSTFEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfSW5wdXRDaGFubmVsLCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9DaGFubmVsU3RhdHVzKSAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOgorCQkJCQkoMCkgU2V0IHRoZSBkaWdpdGFsIG91dHB1dCBmcm9tIHNlbGVjdGVkIFNTSSBtb3VsZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bGVOYnIpIE9OCisgICAgICAgICAgICAgICAgICAgICgxKSBTZXQgdGhlIGRpZ2l0YWwgb3V0cHV0IGZyb20gc2VsZWN0ZWQgU1NJIG1vdWxlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsZU5icikgT0ZGCisJCQkJCSgyKVJlYWQgdGhlIHN0YXR1cyBmcm9tIHNlbGVjdGVkIFNTSSBkaWdpdGFsIGlucHV0ICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfSW5wdXRDaGFubmVsKQorICAgICAgICAgICAgICAgICAgICAoMylSZWFkIHRoZSBzdGF0dXMgZnJvbSBhbGwgU1NJIGRpZ2l0YWwgaW5wdXRzIGZyb20gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIFNTSSBtb2R1bGUgKGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICBDUl9BUkVGICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0lucHV0Q2hhbm5lbCBDUl9DSEFOICAgICAgIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdIHdoaWNoIElPVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ICggMCB0byAyKSAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gIHBiX0NoYW5uZWxTdGF0dXMgICAgOiBEaWdpdGFsIGlucHV0IGNoYW5uZWwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmxlIGlzIG5vdCBhY3RpdmV8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5ubGUgaXMgYWN0aXZlICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIFNTSSBkaWdpdGFsIGlucHV0IGlzIHdyb25nICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNTU0lEaWdpdGFsSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWc7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9JbnB1dENoYW5uZWw7CisJUEJZVEUgcGJfQ2hhbm5lbFN0YXR1czsKKwlQQllURSBwYl9JbnB1dFN0YXR1czsKKwlCWVRFIGJfSU9UeXBlOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9JT1R5cGUgPSAoQllURSkgZGF0YVswXTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFNTSSBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1NTSV9DT1VOVEVSKSB7CisJCQlzd2l0Y2ggKGJfSU9UeXBlKSB7CisJCQljYXNlIEFQQ0kxNzEwX1NTSV9TRVRfQ0hBTk5FTE9OOgorCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IHRoZSBkaWdpdGFsIG91dHB1dCBPTiAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMTYgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVBDSTE3MTBfU1NJX1NFVF9DSEFOTkVMT0ZGOgorCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCB0aGUgZGlnaXRhbCBvdXRwdXQgT0ZGICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMTYgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVBDSTE3MTBfU1NJX1JFQURfMUNIQU5ORUw6CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIGltbnB1dCBjaGFubmVsIG51bWJlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQliX0lucHV0Q2hhbm5lbCA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwkJCQlwYl9DaGFubmVsU3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMF07CisKKwkJCQlpZiAoYl9JbnB1dENoYW5uZWwgPD0gMikgeworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgYWxsIGRpZ2l0YWwgaW5wdXQgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJKnBiX0NoYW5uZWxTdGF0dXMgPQorCQkJCQkJKEJZVEUpICgoKH5kd19TdGF0dXNSZWcpID4+ICg0ICsKKwkJCQkJCQkJYl9JbnB1dENoYW5uZWwpKQorCQkJCQkJJiAxKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgZXJyb3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgZXJyb3JcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFQQ0kxNzEwX1NTSV9SRUFEX0FMTENIQU5ORUw6CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIGFsbCBkaWdpdGFsIGlucHV0ICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlwYl9JbnB1dFN0YXR1cyA9IChQQllURSkgJiBkYXRhWzBdOworCisJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCSpwYl9JbnB1dFN0YXR1cyA9CisJCQkJCShCWVRFKSAoKCh+ZHdfU3RhdHVzUmVnKSA+PiA0KSAmIDcpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXByaW50aygiSU8gdHlwZSB3cm9uZ1xuIik7CisKKwkJCX0JLy9zd2l0Y2ggZW5kCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFNTSSBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZGFhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgQVBDSTE3MTBfMzBNSFoJCTMwCisjZGVmaW5lIEFQQ0kxNzEwXzMzTUhaCQkzMworI2RlZmluZSBBUENJMTcxMF80ME1IWgkJNDAKKworI2RlZmluZSBBUENJMTcxMF9CSU5BUllfTU9ERQkweDEKKyNkZWZpbmUgQVBDSTE3MTBfR1JBWV9NT0RFCTB4MAorCisjZGVmaW5lIEFQQ0kxNzEwX1NTSV9SRUFEMVZBTFVFCQkxCisjZGVmaW5lIEFQQ0kxNzEwX1NTSV9SRUFEQUxMVkFMVUUJMgorCisjZGVmaW5lIEFQQ0kxNzEwX1NTSV9TRVRfQ0hBTk5FTE9OCTAKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX1NFVF9DSEFOTkVMT0ZGCTEKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX1JFQURfMUNIQU5ORUwJMgorI2RlZmluZSBBUENJMTcxMF9TU0lfUkVBRF9BTExDSEFOTkVMCTMKKworLyoKKyAqIFNTSSBJTklTSUFMSVNBVElPTiBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFNTSShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZFNTSVZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNTU0lEaWdpdGFsSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzE2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1Rvci5jCkBAIC0wLDAgKzEsMjA0OSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUEkgQVBDSTE3MTAgICAgfCBDb21waWxlciA6IGdjYyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IFRPUi5DICAgICAgICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE3MTAgdG9yIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAyNy8wMS85OSB8IFMuIFdlYmVyICB8IDQwIE1IeiBpbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMjgvMDQvMDAgfCBTLiBXZWJlciAgfCBTaW1wbGUsZG91YmxlIGFuZCBxdWFkcnVwbGUgbW9kZSBpbXBsZW1lbnRhdGlvbnwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IEV4dGVybiBjbG9jayBpbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMDgvMDUvMDAgfCBHdWlub3QgQyAgfCAtIDA0MDAvMDIyOCBBbGwgRnVuY3Rpb24gaW4gUklORyAwICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgIkFQQ0kxNzEwX1Rvci5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfSW5pdFRvckNvdW50ZXIgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RvckNvdW50ZXIsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfUENJSW5wdXRDbG9jaywgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1pbmdVbml0LCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgIHVsX1RpbWluZ0ludGVydmFsLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUmVhbFRpbWluZ0ludGVydmFsKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBzZWxlY3RlZCB0b3IgY291bnRlciAoYl9Ub3JDb3VudGVyKSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBmcm9tIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSB1bF9UaW1pbmdJbnRlcnZhbCBhbmQgdWxfVGltaW5nVW5pdCBkZXRlcm1pbmUgdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGltaW5nIGJhc2UgZm9yIHRoZSBtZWFzdXJlbWVudC4gICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCByZXR1cm4gdGhlIHJlYWwgdGltaW5nICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmUgZm9yIHlvdSBjYWxsICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiB0aGUgdG9yIGNvdW50ZXIuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgfAorfAorCQlDUl9BUkVGCUJZVEVfICAgYl9Nb2R1bE5iciAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgIGRhdGFbMF0gQllURV8gICBiX1RvckNvdW50ZXIgICAgIDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBvciAxKS4gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgZGF0YVsxXSBCWVRFXyAgIGJfUENJSW5wdXRDbG9jayAgOiBTZWxlY3Rpb24gZnJvbSBQQ0kgYnVzIGNsb2NrfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfMzBNSFogOiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgUEMgaGF2ZSBhIFBDSSBidXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIGZyb20gMzAgTUh6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfMzNNSFogOiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgUEMgaGF2ZSBhIFBDSSBidXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIGZyb20gMzMgTUh6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfNDBNSFogICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQVBDSS0xNzEwIGhhdmUgYSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVncmF0ZWQgNDBNaHogICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhcnR6LiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF9HQVRFX0lOUFVUICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgdGhlIGdhdGUgaW5wdXQgZm9yICAgfAorfAkJCQkJCSAgIHRoZSBiYXNlIGNsb2NrLiBJZiB5b3UgICAgfAorfAkJCQkJCSAgIGhhdmUgc2VsZWN0ZWQgdGhpcyBvcHRpb24sfAorfAkJCQkJCSAgIHRoYW4gaXQgaXMgbm90IHBvc3NpYmwgdG8gfAorfAkJCQkJCSAgIHVzZWQgdGhlIGdhdGUgaW5wdXQgZm9yICAgfAorfAkJCQkJCSAgIGVuYWJsZWQgdGhlIGFjcXVpc2l0aW9uICAgfAorfCAgICAgICAgICAgZGF0YVsyXSBCWVRFXyAgIGJfVGltaW5nVW5pdCAgICA6IEJhc2UgdGltaW5nIHVuaXQgKDAgdG8gNCkgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogbnMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiDCtXMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBtcyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IHMgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IDogbW4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICBkYXRhWzNdICAgICAgICAgIFVMT05HXyB1bF9UaW1pbmdJbnRlcnZhbCA6IEJhc2UgdGltaW5nIHZhbHVlLiAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfICBwdWxfUmVhbFRpbWluZ0ludGVydmFsIDogUmVhbCAgYmFzZSB0aW1pbmcgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IFRpbWluZyB1bml0IHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNzogQmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC04OiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtOTogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIFRPUiB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VG9yQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCVVMT05HIHVsX1RpbWVyVmFsdWUgPSAwOworCURXT1JEIGR3X0NvbW1hbmQ7CisJZG91YmxlIGRfUmVhbFRpbWluZ0ludGVydmFsID0gMDsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1RvckNvdW50ZXI7CisJQllURSBiX1BDSUlucHV0Q2xvY2s7CisJQllURSBiX1RpbWluZ1VuaXQ7CisJVUxPTkcgdWxfVGltaW5nSW50ZXJ2YWw7CisJVUxPTkcgdWxfUmVhbFRpbWluZ0ludGVydmFsID0gMDsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisKKwliX1RvckNvdW50ZXIgPSAoQllURSkgZGF0YVswXTsKKwliX1BDSUlucHV0Q2xvY2sgPSAoQllURSkgZGF0YVsxXTsKKwliX1RpbWluZ1VuaXQgPSAoQllURSkgZGF0YVsyXTsKKwl1bF9UaW1pbmdJbnRlcnZhbCA9IChVTE9ORykgZGF0YVszXTsKKwlwcmludGsoIklOUFVUIGNsb2NrICVkXG4iLCBiX1BDSUlucHV0Q2xvY2spOworCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1RPUl9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSB0b3IgY291bnRlciBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfVG9yQ291bnRlciA8PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgUENJIGJ1cyBjbG9jayAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopIHx8CisJCQkJCShiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopIHx8CisJCQkJCShiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopIHx8CisJCQkJCShiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCUFQQ0kxNzEwX0dBVEVfSU5QVVQpKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSB0aW1pbmcgdW5pdCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKGJfVGltaW5nVW5pdCA8PSA0KQorCQkJCQkJfHwgKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCUFQQ0kxNzEwX0dBVEVfSU5QVVQpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGJhc2UgdGltaW5nIHNlbGVjdGlvbiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMTMzKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA1NzEyMzA2NTBVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNTcxMjMwVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDU3MVVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA5VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMTIxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA1MTk2OTEwNDNVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNTE5NjkxVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDUyMFVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA4VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMTAwKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA0Mjk0OTY3MjlVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNDI5NDk2VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDQyOVVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA3VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF9HQVRFX0lOUFVUKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMikpKSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIGJvYXJkIHZlcnNpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmIChkZXZwcml2LT5zX0JvYXJkSW5mb3MuYl9Cb2FyZFZlcnNpb24gPiAwKSkgfHwgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCB0aGUgVE9SIHZlcnNpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PSAweDMxMzEpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF9HQVRFX0lOUFVUKSAmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTMyKSkgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGVzdCBpZiBub3QgZXh0ZXJuIGNsb2NrIHVzZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwX0dBVEVfSU5QVVQpIHsKKwkJCQkJCQkJCQlmcHVfYmVnaW4KKwkJCQkJCQkJCQkJKCk7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSB0aW1lciAwIGRpdmlzaW9uIGZhdG9yICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlzd2l0Y2ggKGJfVGltaW5nVW5pdCkgeworCQkJCSAgICAgIC8qKioqKiovCisJCQkJCQkJCQkJCS8qIG5zICovCisJCQkJICAgICAgLyoqKioqKi8KKworCQkJCQkJCQkJCWNhc2UgMDoKKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKDAuMDAwMjUgKiBiX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDAuMDAwMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCX0KKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgwLjAwMDI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKTsKKwkJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQkoMC4wMDAyNQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgwLjAwMDI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAgICAvKioqKioqLworCQkJCQkJCQkJCQkvKiDDpnMgKi8KKwkJCQkgICAgICAvKioqKioqLworCisJCQkJCQkJCQkJY2FzZSAxOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKHVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoMC4yNSAqIGJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMC4yNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDAuMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDAuMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgICAgIC8qKioqKiovCisJCQkJCQkJCQkJCS8qIG1zICovCisJCQkJICAgICAgLyoqKioqKi8KKworCQkJCQkJCQkJCWNhc2UgMjoKKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgyNTAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDI1MC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKTsKKwkJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMjUwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgICAgIC8qKioqKi8KKwkJCQkJCQkJCQkJLyogcyAqLworCQkJCSAgICAgIC8qKioqKi8KKworCQkJCQkJCQkJCWNhc2UgMzoKKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCX0KKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgICAgLyoqKioqKi8KKwkJCQkJCQkJCQkJLyogbW4gKi8KKwkJCQkgICAgICAvKioqKioqLworCisJCQkJCQkJCQkJY2FzZSA0OgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKHVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCTYwKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpKHVsX1RpbWluZ0ludGVydmFsICogNjAuMCkgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCX0KKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQk2MDsKKwkJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spKQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJNjAuMDsKKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgLyA2MC4wKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJZnB1X2VuZCgpOworCQkJCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwX0dBVEVfSU5QVVQpCisJCQkJCQkJCQllbHNlIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiAyIENsb2NrIHVzZWQgZm9yIHRoZSBvdmVyZmxvdyBhbmQgdGhlIHJlbG9hZCBmcm9tIGNvdW50ZXIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQl9CS8vIGlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfR0FURV9JTlBVVCkKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgUENJIGlucHV0IGNsb2NrICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2sKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIHRpbWluZyB1bml0ICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVG9yQ291bnRlck1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVySW5mbworCQkJCQkJCQkJCVtiX1RvckNvdW50ZXJdLgorCQkJCQkJCQkJCWJfVGltaW5nVW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1RpbWluZ1VuaXQ7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgYmFzZSB0aW1pbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVG9yQ291bnRlck1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVySW5mbworCQkJCQkJCQkJCVtiX1RvckNvdW50ZXJdLgorCQkJCQkJCQkJCWRfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWw7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfVG9yQ291bnRlckluZm8KKwkJCQkJCQkJCQlbYl9Ub3JDb3VudGVyXS4KKwkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsOworCisJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBHZXQgdGhlIGNvbW1hbmQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCQkrCisJCQkJCQkJCQkJNAorCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkd19Db21tYW5kCisJCQkJCQkJCQkJPj4KKwkJCQkJCQkJCQk0KQorCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkweEY7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGVzdCBpZiA0MCBNSHogKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2V0IHRoZSA0MCBNSHogc2VsZWN0aW9uICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCTB4MTA7CisJCQkJCQkJCQl9CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IGlmIGV4dGVybiBjbG9jayB1c2VkICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwX0dBVEVfSU5QVVQpIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIDQwIE1IeiBzZWxlY3Rpb24gKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJMHgyMDsKKwkJCQkJCQkJCX0KKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogV3JpdGUgdGhlIG5ldyBjb21tYW5kICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCW91dGwoZHdfQ29tbWFuZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogRGlzYWJsZSB0aGUgdG9yICovCisJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCB0aGUgdGltZXIgMSB2YWx1ZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlvdXRsKHVsX1RpbWVyVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMCArICgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVG9yIGNvdW50ZXIgaW5pdC4gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJJbmZvCisJCQkJCQkJCQkJW2JfVG9yQ291bnRlcl0uCisJCQkJCQkJCQkJYl9Ub3JDb3VudGVySW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRPUiB2ZXJzaW9uIGVycm9yIGZvciA0ME1IeiBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCURQUklOVEsoIlRPUiB2ZXJzaW9uIGVycm9yIGZvciA0ME1IeiBjbG9jayBzZWxlY3Rpb25cbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQktOTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggdGhpcyBib2FyZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggdGhpcyBib2FyZFxuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTg7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogQmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJRFBSSU5USygiQmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQl9CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRpbWluZyB1bml0IHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRpbWluZyB1bml0IHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikpCisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXJNb2RlID49IDAgJiYgYl9Ub3JDb3VudGVyTW9kZSA8PSA3KQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgQ291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVG9yIENvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXJNb2RlID49IDAgJiYgYl9Ub3JDb3VudGVyTW9kZSA8PSA3KQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCWRhdGFbMF0gPSAoVUlOVCkgdWxfUmVhbFRpbWluZ0ludGVydmFsOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZVRvckNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwgICAgICAgICAgIHwKK3wJCQkJCQkgQllURV8gYl9Ub3JDb3VudGVyLCAgICAgICAgIHwKK3wJCQkJCQkgQllURV8gYl9JbnB1dE1vZGUsICAgICAgICAgIHwKK3wJCQkJCQkgQllURV8gYl9FeHRlcm5HYXRlLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0N5Y2xlTW9kZSwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW50ZXJydXB0RW5hYmxlKSAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBFbmFibGUgdGhlIHRvciBjb3VudGVyIChiX1RvckNvdW50ZXIpIGZyb20gc2VsZWN0ZWQgICAgfAorfAkJICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gWW91IG11c3QgY2FsbGluZyB0aGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciIgZnVuY3Rpb24gYmUgZm9yIHlvdSBjYWxsICAgfAorfAkJICAgICAgdGhpcyBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW5hYmxlIHRoZSB0b3IgY291bnRlciBpbnRlcnJ1cHQsIHRoZSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRvciBjb3VudGVyIGdlbmVyYXRlIGEgaW50ZXJydXB0IGFmdGVyIHRoZSB0aW1pbmcgY3ljbGV8Cit8ICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgiIGFuZCB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgbWFzayBkZXNjcmlwdGlvbiBjaGFwdGVyIGZyb20gdGhpcyBtYW51YWwuICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBiX0N5Y2xlTW9kZSBwYXJhbWV0ZXIgZGV0ZXJtaW5lIGlmIHlvdSB3aWxsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZWQgYSBzaW5nbGUgb3IgbW9yZSBjeWNsZS4gICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1RvckNvdW50ZXIgICA6IFRvciBjb3VudGVyIHNlbGVjdGlvbiAoMCBvciAxKS4gfAorfAkJICAgICAgQllURV8gYl9JbnB1dE1vZGUgICAgOiBJbnB1dCBzaWduYWwgbGV2ZWwgc2VsZWN0aW9uICAgIHwKK3wJCQkJCQkwIDogVG9yIGNvdW50IGVhY2ggbG93IGxldmVsIHwKK3wJCQkJCQkxIDogVG9yIGNvdW50IGVhY2ggaGlnaCBsZXZlbHwKK3wJCSAgICAgIEJZVEVfIGJfRXh0ZXJuR2F0ZSAgIDogRXh0ZXJuIGdhdGUgYWN0aW9uIHNlbGVjdGlvbiAgICB8Cit8CQkJCQkJMCA6IEV4dGVybiBnYXRlIHNpZ25hbCBub3QgICB8Cit8CQkJCQkJICAgIHVzZWQgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJMSA6IEV4dGVybiBnYXRlIHNpZ25hbCB1c2VkLiB8Cit8CQkJCQkJICAgIElmIHlvdSBzZWxlY3RlZCB0aGUgICAgICB8Cit8CQkJCQkJICAgIHNpbmdsZSBtb2RlLCBlYWNoIGhpZ2ggICB8Cit8CQkJCQkJICAgIGxldmVsIHNpZ25hbCBzdGFydCB0aGUgICB8Cit8CQkJCQkJICAgIGNvdW50ZXIuICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJICAgIElmIHlvdSBzZWxlY3RlZCB0aGUgICAgICB8Cit8CQkJCQkJICAgIGNvbnRpbnVvdXMgbW9kZSwgdGhlICAgICB8Cit8CQkJCQkJICAgIGZpcnN0IGhpZ2ggbGV2ZWwgc2lnbmFsICB8Cit8CQkJCQkJICAgIHN0YXJ0IHRoZSB0b3IgY291bnRlciAgICB8Cit8CQkJCQkJCQkJICAgICB8Cit8CQkJCQkgICAgICBBUENJMTcxMF9UT1JfUVVBRFJVUExFIF9NT0RFIDogfAorfAkJCQkJICAgICAgSW4gdGhlIHF1YWRydXBsZSBtb2RlLCB0aGUgZWRnZXwKK3wJCQkJCSAgICAgIGFuYWx5c2lzIGNpcmN1aXQgZ2VuZXJhdGVzIGEgICB8Cit8CQkJCQkgICAgICBjb3VudGluZyBwdWxzZSBmcm9tIGVhY2ggZWRnZSAgfAorfAkJCQkJICAgICAgb2YgMiBzaWduYWxzIHdoaWNoIGFyZSBwaGFzZSAgIHwKK3wJCQkJCSAgICAgIHNoaWZ0ZWQgaW4gcmVsYXRpb24gdG8gZWFjaCAgICB8Cit8CQkJCQkgICAgICBvdGhlci4gICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICAgICAgVGhlIGdhdGUgaW5wdXQgaXMgdXNlZCBmb3IgdGhlIHwKK3wJCQkJCSAgICAgIHNpZ25hbCBCICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJICAgICB8Cit8CQkJCQkgICAgICBBUENJMTcxMF9UT1JfRE9VQkxFX01PREU6ICAgICAgfAorfAkJCQkJICAgICAgRnVuY3Rpb25zIGluIHRoZSBzYW1lIHdheSBhcyAgIHwKK3wJCQkJCSAgICAgIHRoZSBxdWFkcnVwbGUgbW9kZSwgZXhjZXB0IHRoYXR8Cit8CQkJCQkgICAgICBvbmx5IHR3byBvZiB0aGUgZm91ciBlZGdlcyBhcmUgfAorfAkJCQkJICAgICAgYW5hbHlzZWQgcGVyIHBlcmlvZC4gICAgICAgICAgIHwKK3wJCQkJCSAgICAgIFRoZSBnYXRlIGlucHV0IGlzIHVzZWQgZm9yIHRoZSB8Cit8CQkJCQkgICAgICBzaWduYWwgQiAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCSAgICAgfAorfAkJCQkJICAgICAgQVBDSTE3MTBfVE9SX1NJTVBMRV9NT0RFOiAgICAgIHwKK3wJCQkJCSAgICAgIEZ1bmN0aW9ucyBpbiB0aGUgc2FtZSB3YXkgYXMgICB8Cit8CQkJCQkgICAgICB0aGUgcXVhZHJ1cGxlIG1vZGUsIGV4Y2VwdCB0aGF0fAorfAkJCQkJICAgICAgb25seSBvbmUgb2YgdGhlIGZvdXIgZWRnZXMgaXMgIHwKK3wJCQkJCSAgICAgIGFuYWx5c2VkIHBlciBwZXJpb2QuICAgICAgICAgICB8Cit8CQkJCQkgICAgICBUaGUgZ2F0ZSBpbnB1dCBpcyB1c2VkIGZvciB0aGUgfAorfAkJCQkJICAgICAgc2lnbmFsIEIgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0N5Y2xlTW9kZSAgICA6IFNlbGVjdGVkIHRoZSB0b3IgY291bnRlciAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNxdWlzaXRpb24gbW9kZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnRlcnJ1cHRFbmFibGUgOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvciBjb3VudGVyIGludGVycnVwdC4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRU5BQkxFOiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIHRvciBjb3VudGVyICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRTogICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHRoZSB0b3IgY291bnRlciAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IFRvciBpbnB1dCBzaWduYWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNzogRXh0ZXJuIGdhdGUgc2lnbmFsIG1vZGUgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC04OiBUb3IgY291bnRlciBhY3F1aXNpdGlvbiBtb2RlIGN5Y2xlIGlzIHdyb25nICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTk6IEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTA6SW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9EaXNhYmxlVG9yQ291bnRlciAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyLCAgICAgICAgICB8Cit8CQkJCQkJIEJZVEVfICBiX1RvckNvdW50ZXIpICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBEaXNhYmxlIHRoZSB0b3IgY291bnRlciAoYl9Ub3JDb3VudGVyKSBmcm9tIHNlbGVjdGVkICAgfAorfAkJICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gSWYgeW91IGRpc2FibGUgdGhlIHRvciBjb3VudGVyICAgIHwKK3wJCSAgICAgIGFmdGVyIGEgc3RhcnQgY3ljbGUgb2NjdXIgYW5kIHlvdSByZXN0YXJ0IHRoZSB0b3IgICAgICB8Cit8CQkgICAgICBjb3VudGVyIHdpdGNoIHRoZSAiIGlfQVBDSTE3MTBfRW5hYmxlVG9yQ291bnRlciIgICAgICAgfAorfAkJICAgICAgZnVuY3Rpb24sIHRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1RvckNvdW50ZXIgICA6IFRvciBjb3VudGVyIHNlbGVjdGlvbiAoMCBvciAxKS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IFRvciBjb3VudGVyIG5vdCBlbmFibGVkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRW5hYmxlVG9yQ291bnRlciIgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVG9yQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1czsKKwlEV09SRCBkd19EdW1teVJlYWQ7CisJRFdPUkQgZHdfQ29uZmlnUmVnOworCUJZVEUgYl9Nb2R1bE5iciwgYl9BY3Rpb247CisJQllURSBiX1RvckNvdW50ZXI7CisJQllURSBiX0lucHV0TW9kZTsKKwlCWVRFIGJfRXh0ZXJuR2F0ZTsKKwlCWVRFIGJfQ3ljbGVNb2RlOworCUJZVEUgYl9JbnRlcnJ1cHRFbmFibGU7CisKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQWN0aW9uID0gKEJZVEUpIGRhdGFbMF07CS8vIGVuYWJsZSBvciBkaXNhYmxlCisJYl9Ub3JDb3VudGVyID0gKEJZVEUpIGRhdGFbMV07CisJYl9JbnB1dE1vZGUgPSAoQllURSkgZGF0YVsyXTsKKwliX0V4dGVybkdhdGUgPSAoQllURSkgZGF0YVszXTsKKwliX0N5Y2xlTW9kZSA9IChCWVRFKSBkYXRhWzRdOworCWJfSW50ZXJydXB0RW5hYmxlID0gKEJZVEUpIGRhdGFbNV07CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47OworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVE9SX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHRvciBjb3VudGVyIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Ub3JDb3VudGVyIDw9IDEpIHsKKwkJCQlzd2l0Y2ggKGJfQWN0aW9uKQkvLyBFbmFibGUgb3IgRGlzYWJsZQorCQkJCXsKKwkJCQljYXNlIEFQQ0kxNzEwX0VOQUJMRToKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiB0b3IgY291bnRlciBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDggKworCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MTApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBpbnB1dCBzaWduYWwgbW9kZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfSW5wdXRNb2RlID09IDAgfHwKKwkJCQkJCQliX0lucHV0TW9kZSA9PSAxIHx8CisJCQkJCQkJYl9JbnB1dE1vZGUgPT0KKwkJCQkJCQlBUENJMTcxMF9UT1JfU0lNUExFX01PREUKKwkJCQkJCQl8fCBiX0lucHV0TW9kZSA9PQorCQkJCQkJCUFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERQorCQkJCQkJCXx8IGJfSW5wdXRNb2RlID09CisJCQkJCQkJQVBDSTE3MTBfVE9SX1FVQURSVVBMRV9NT0RFKQorCQkJCQkJeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBleHRlcm4gZ2F0ZSBzaWduYWwgbW9kZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChiX0V4dGVybkdhdGUgPT0gMAorCQkJCQkJCQl8fCBiX0V4dGVybkdhdGUKKwkJCQkJCQkJPT0gMQorCQkJCQkJCQl8fCBiX0lucHV0TW9kZSA+CisJCQkJCQkJCTEpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCB0aGUgY3ljbGUgbW9kZSBwYXJhbWV0ZXIgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKGJfQ3ljbGVNb2RlID09IEFQQ0kxNzEwX1NJTkdMRSkgfHwgKGJfQ3ljbGVNb2RlID09IEFQQ0kxNzEwX0NPTlRJTlVPVVMpKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkgfHwgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpKSB7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFNhdmUgdGhlIGludGVycnVwdCBtb2RlICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJCQlzX1RvckNvdW50ZXJJbmZvCisJCQkJCQkJCQkJCVtiX1RvckNvdW50ZXJdLgorCQkJCQkJCQkJCQliX0ludGVycnVwdEVuYWJsZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogR2V0IHRoZSBjb21tYW5kICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQk0CisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJPj4KKwkJCQkJCQkJCQkJNCkKKwkJCQkJCQkJCQkJJgorCQkJCQkJCQkJCQkweDMwOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRlc3QgaWYgbm90IGRpcmVjdCBtb2RlIHVzZWQgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoYl9JbnB1dE1vZGUgPiAxKSB7CisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIEV4dGVybiBnYXRlIGNhbiBub3QgYmUgdXNlZCAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWJfRXh0ZXJuR2F0ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJMDsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBFbmFibGUgdGhlIGV4dGVybiBnYXRlIGZvciB0aGUgU2lnbmFsIEIgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkJMHg0MDsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogVGVzdCBpZiBzaW1wbGUgbW9kZSAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoYl9JbnB1dE1vZGUgPT0gQVBDSTE3MTBfVE9SX1NJTVBMRV9NT0RFKSB7CisJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCQkvKiBFbmFibGUgdGhlIHNpbnBsZSBtb2RlICovCisJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCQkJMHg3ODA7CisKKwkJCQkJCQkJCQkJfQkvLyBpZiAoYl9JbnB1dE1vZGUgPT0gQVBDSTE3MTBfVE9SX1NJTVBMRV9NT0RFKQorCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBUZXN0IGlmIGRvdWJsZSBtb2RlICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWlmIChiX0lucHV0TW9kZSA9PSBBUENJMTcxMF9UT1JfRE9VQkxFX01PREUpIHsKKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJCS8qIEVuYWJsZSB0aGUgZG91YmxlIG1vZGUgKi8KKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJCQkweDE4MDsKKworCQkJCQkJCQkJCQl9CS8vIGlmIChiX0lucHV0TW9kZSA9PSBBUENJMTcxMF9UT1JfRE9VQkxFX01PREUpCisKKwkJCQkJCQkJCQkJYl9JbnB1dE1vZGUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCTA7CisJCQkJCQkJCQkJfQkvLyBpZiAoYl9JbnB1dE1vZGUgPiAxKQorCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2V0IHRoZSBjb21tYW5kICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQliX0N5Y2xlTW9kZQorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCShiX0ludGVycnVwdEVuYWJsZQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTIpCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJKGJfSW5wdXRNb2RlCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJNCkKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoYl9FeHRlcm5HYXRlCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJOCk7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2xlYXIgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0R1bW15UmVhZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTAKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlkd19EdW1teVJlYWQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxMgorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2V0IHRoZSBjb21tYW5kbyAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCW91dGwoZHdfQ29uZmlnUmVnLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDQgKyAoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJICAgLyoqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2V0IHRoZSBnYXRlICovCisJCQkJICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgOCArICgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCX0JLy8gaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHx8IChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSkKKwkJCQkJCQkJCWVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJRFBSSU5USygiSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCS05OworCQkJCQkJCQkJfQkvLyBpZiAoKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkgfHwgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpKQorCQkJCQkJCQl9CS8vIGlmICgoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfU0lOR0xFKSB8fCAoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfQ09OVElOVU9VUykpCisJCQkJCQkJCWVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUb3IgY291bnRlciBhY3F1aXNpdGlvbiBtb2RlIGN5Y2xlIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgYWNxdWlzaXRpb24gbW9kZSBjeWNsZSBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS04OworCQkJCQkJCQl9CS8vIGlmICgoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfU0lOR0xFKSB8fCAoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfQ09OVElOVU9VUykpCisJCQkJCQkJfQkvLyBpZiAoYl9FeHRlcm5HYXRlID49IDAgJiYgYl9FeHRlcm5HYXRlIDw9IDEpCisJCQkJCQkJZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRXh0ZXJuIGdhdGUgaW5wdXQgbW9kZSBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiRXh0ZXJuIGdhdGUgaW5wdXQgbW9kZSBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTc7CisJCQkJCQkJfQkvLyBpZiAoYl9FeHRlcm5HYXRlID49IDAgJiYgYl9FeHRlcm5HYXRlIDw9IDEpCisJCQkJCQl9CS8vIGlmIChiX0lucHV0TW9kZSA+PSAwICYmIGJfSW5wdXRNb2RlIDw9IDEpCisJCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVG9yIGlucHV0IHNpZ25hbCBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJUb3IgaW5wdXQgc2lnbmFsIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBBUENJMTcxMF9ESVNBQkxFOgorCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiB0b3IgY291bnRlciBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgOCArCisJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MTApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIGNvdW50ZXIgZW5hYmxlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBtb2RlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJc19Ub3JDb3VudGVySW5mbworCQkJCQkJCQlbYl9Ub3JDb3VudGVyXS4KKwkJCQkJCQkJYl9JbnRlcnJ1cHRFbmFibGUKKwkJCQkJCQkJPQorCQkJCQkJCQlBUENJMTcxMF9ESVNBQkxFOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIENsZWFyIHRoZSBnYXRlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bCgwLCBkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsgOCArCisJCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEpCisJCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVG9yIGNvdW50ZXIgbm90IGVuYWJsZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBub3QgZW5hYmxlZCBcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0JLy8gLy8gaWYgKGR3X1N0YXR1cyAmIDB4MTApCisKKwkJCQl9CS8vIHN3aXRjaAorCQkJfQkvLyBpZiAoYl9Ub3JDb3VudGVyIDw9IDEpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlciA8PSAxKQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlIFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yIFxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRUb3JDb3VudGVySW5pdGlhbGlzYXRpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICB8Cit8CQkJCQkJIEJZVEVfICAgICBiX1RvckNvdW50ZXIsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkgUEJZVEVfICAgcGJfVGltaW5nVW5pdCwgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSBQVUxPTkdfIHB1bF9UaW1pbmdJbnRlcnZhbCwgfAorfAkJCQkJCSBQQllURV8gICBwYl9JbnB1dE1vZGUsICAgICAgfAorfAkJCQkJCSBQQllURV8gICBwYl9FeHRlcm5HYXRlLCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0N5Y2xlTW9kZSwgICAgICB8Cit8CQkJCQkJIFBCWVRFXyAgIHBiX0VuYWJsZSwgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfSW50ZXJydXB0RW5hYmxlKXwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgdG9yIGNvdW50ZXIgKGJfVG9yQ291bnRlcikgZnJvbSBzZWxlY3RlZCAgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgICB8Cit8CQkgICAgICB0aGlzIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbmFibGUgdGhlIHRvciBjb3VudGVyIGludGVycnVwdCwgdGhlICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdG9yIGNvdW50ZXIgZ2VuZXJhdGUgYSBpbnRlcnJ1cHQgYWZ0ZXIgdGhlIHRpbWluZyBjeWNsZXwKK3wgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgYW5kIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBtYXNrIGRlc2NyaXB0aW9uIGNoYXB0ZXIgZnJvbSB0aGlzIG1hbnVhbC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIGJfQ3ljbGVNb2RlIHBhcmFtZXRlciBkZXRlcm1pbmUgaWYgeW91IHdpbGwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZCBhIHNpbmdsZSBvciBtb3JlIGN5Y2xlLiAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVG9yQ291bnRlciAgIDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uICgwIG9yIDEpCisKKwliX01vZHVsTmJyCQkJPQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1RvckNvdW50ZXIJCT0JQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisuIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfVGltaW5nVW5pdCAgICA6IEJhc2UgdGltaW5nIHVuaXQgKDAgdG8gNCkgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBucyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IMK1cyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IG1zICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIDogcyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiBtbiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9UaW1pbmdJbnRlcnZhbCA6IEJhc2UgdGltaW5nIHZhbHVlLiAgICAgICAgfAorfAkJICAgICAgUEJZVEVfIHBiX0lucHV0TW9kZSAgICAgICAgOiBJbnB1dCBzaWduYWwgbGV2ZWwgICAgICAgIHwKK3wJCQkJCQkgICBzZWxlY3Rpb24gIAkJICAgICB8Cit8CQkJCQkJMCA6IFRvciBjb3VudCBlYWNoIGxvdyBsZXZlbCB8Cit8CQkJCQkJMSA6IFRvciBjb3VudCBlYWNoIGhpZ2ggbGV2ZWx8Cit8CQkgICAgICBQQllURV8gcGJfRXh0ZXJuR2F0ZQk6IEV4dGVybiBnYXRlIGFjdGlvbiAgICAgICAgIHwKK3wJCQkJCQkgIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkgIDAgOiBFeHRlcm4gZ2F0ZSBzaWduYWwgbm90IHwKK3wJCQkJCQkgICAgICB1c2VkICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkgIDEgOiBFeHRlcm4gZ2F0ZSBzaWduYWwgdXNlZHwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfQ3ljbGVNb2RlICAgICAgIDogVG9yIGNvdW50ZXIgYWNxdWlzaXRpb24gICAgfAorfAkJCQkJCSAgbW9kZSAgICAgICAgICAgCSAgICAgfAorfAkJICAgICAgUEJZVEVfIHBiX0VuYWJsZQkJOiBJbmRpY2F0ZSBpZiB0aGUgdG9yIGNvdW50ZXJ8Cit8CQkJCQkJICBpcyBlbmFibGVkIG9yIG5vICAgICAgICAgICB8Cit8CQkJCQkJICAwIDogVG9yIGNvdW50ZXIgZGlzYWJsZWQgICB8Cit8CQkJCQkJICAxIDogVG9yIGNvdW50ZXIgZW5hYmxlZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9yIGNvdW50ZXIgaW50ZXJydXB0LiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEU6ICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB0aGUgdG9yIGNvdW50ZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFOiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIHRvciBjb3VudGVyICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0CisJcGJfVGltaW5nVW5pdAkJPQkoUEJZVEUpICZkYXRhWzBdOworCXB1bF9UaW1pbmdJbnRlcnZhbAk9ICAoUFVMT05HKSAmZGF0YVsxXTsKKwlwYl9JbnB1dE1vZGUJCT0JKFBCWVRFKSAmZGF0YVsyXTsKKwlwYl9FeHRlcm5HYXRlCQk9CShQQllURSkgJmRhdGFbM107CisJcGJfQ3ljbGVNb2RlCQk9CShQQllURSkgJmRhdGFbNF07CisJcGJfRW5hYmxlCQkJPQkoUEJZVEUpICZkYXRhWzVdOworCXBiX0ludGVycnVwdEVuYWJsZQk9CShQQllURSkgJmRhdGFbNl07CisgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkR2V0VG9yQ291bnRlckluaXRpYWxpc2F0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfVG9yQ291bnRlcjsKKwlQQllURSBwYl9UaW1pbmdVbml0OworCVBVTE9ORyBwdWxfVGltaW5nSW50ZXJ2YWw7CisJUEJZVEUgcGJfSW5wdXRNb2RlOworCVBCWVRFIHBiX0V4dGVybkdhdGU7CisJUEJZVEUgcGJfQ3ljbGVNb2RlOworCVBCWVRFIHBiX0VuYWJsZTsKKwlQQllURSBwYl9JbnRlcnJ1cHRFbmFibGU7CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwliX01vZHVsTmJyID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9Ub3JDb3VudGVyID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlwYl9UaW1pbmdVbml0ID0gKFBCWVRFKSAmIGRhdGFbMF07CisJcHVsX1RpbWluZ0ludGVydmFsID0gKFBVTE9ORykgJiBkYXRhWzFdOworCXBiX0lucHV0TW9kZSA9IChQQllURSkgJiBkYXRhWzJdOworCXBiX0V4dGVybkdhdGUgPSAoUEJZVEUpICYgZGF0YVszXTsKKwlwYl9DeWNsZU1vZGUgPSAoUEJZVEUpICYgZGF0YVs0XTsKKwlwYl9FbmFibGUgPSAoUEJZVEUpICYgZGF0YVs1XTsKKwlwYl9JbnRlcnJ1cHRFbmFibGUgPSAoUEJZVEUpICYgZGF0YVs2XTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1RPUl9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSB0b3IgY291bnRlciBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfVG9yQ291bnRlciA8PSAxKSB7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgOCArICgxNiAqIGJfVG9yQ291bnRlcikgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkJCQkqcGJfRW5hYmxlID0gZHdfU3RhdHVzICYgMTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBHZXQgdGhlIGNvbW1hbmRvICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA0ICsKKwkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCSpwYl9DeWNsZU1vZGUgPQorCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzID4+IDQpICYgMSk7CisJCQkJCSpwYl9JbnRlcnJ1cHRFbmFibGUgPQorCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzID4+IDUpICYgMSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgZXh0ZXJuIGdhdGUgdXNlZCBmb3IgY2xvY2sgb3IgZm9yIHNpZ25hbCBCICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkd19TdGF0dXMgJiAweDYwMCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBleHRlcm4gZ2F0ZSB1c2VkIGZvciBzaWduYWwgQiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoZHdfU3RhdHVzICYgMHg0MDApIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgc2ltcGxlIG1vZGUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkd19TdGF0dXMgJiAweDc4MDApCisJCQkJCQkJCT09IDB4NzgwMCkgeworCQkJCQkJCQkqcGJfSW5wdXRNb2RlID0KKwkJCQkJCQkJCUFQQ0kxNzEwX1RPUl9TSU1QTEVfTU9ERTsKKwkJCQkJCQl9CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgZG91YmxlIG1vZGUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkd19TdGF0dXMgJiAweDc4MDApCisJCQkJCQkJCT09IDB4MTgwMCkgeworCQkJCQkJCQkqcGJfSW5wdXRNb2RlID0KKwkJCQkJCQkJCUFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERTsKKwkJCQkJCQl9CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgcXVhZHJ1cGxlIG1vZGUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkd19TdGF0dXMgJiAweDc4MDApCisJCQkJCQkJCT09IDB4MDAwMCkgeworCQkJCQkJCQkqcGJfSW5wdXRNb2RlID0KKwkJCQkJCQkJCUFQQ0kxNzEwX1RPUl9RVUFEUlVQTEVfTU9ERTsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDQwMCkKKwkJCQkJCWVsc2UgeworCQkJCQkJCSpwYl9JbnB1dE1vZGUgPSAxOworCQkJCQkJfQkvLyAvLyBpZiAoZHdfU3RhdHVzICYgMHg0MDApCisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBFeHRlcm4gZ2F0ZSBub3QgdXNlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJKnBiX0V4dGVybkdhdGUgPSAwOworCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDYwMCkKKwkJCQkJZWxzZSB7CisJCQkJCQkqcGJfSW5wdXRNb2RlID0KKwkJCQkJCQkoQllURSkgKChkd19TdGF0dXMgPj4gNikKKwkJCQkJCQkmIDEpOworCQkJCQkJKnBiX0V4dGVybkdhdGUgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1cyA+PiA3KQorCQkJCQkJCSYgMSk7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4NjAwKQorCisJCQkJCSpwYl9UaW1pbmdVbml0ID0KKwkJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCXNfVG9yQ291bnRlckluZm9bYl9Ub3JDb3VudGVyXS4KKwkJCQkJCWJfVGltaW5nVW5pdDsKKworCQkJCQkqcHVsX1RpbWluZ0ludGVydmFsID0KKwkJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCXNfVG9yQ291bnRlckluZm9bYl9Ub3JDb3VudGVyXS4KKwkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbDsKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKworCQkJfQkvLyBpZiAoYl9Ub3JDb3VudGVyIDw9IDEpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmcgXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXIgPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWRUb3JDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJIEJZVEVfICAgICBiX1RvckNvdW50ZXIsICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVF8gICAgdWlfVGltZU91dCwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9Ub3JDb3VudGVyU3RhdHVzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1RvckNvdW50ZXJWYWx1ZSkgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgIAljYXNlIEFQQ0kxNzEwX1RPUl9HRVRQUk9HUkVTU1NUQVRVUzogUmV0dXJuIHRoZSB0b3IgY291bnRlcgorKGJfVG9yQ291bnRlcikgc3RhdHVzIChwYl9Ub3JDb3VudGVyU3RhdHVzKSBmcm9tIHNlbGVjdGVkIHRvciBjb3VudGVyICAgICAgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLgorCisJCQkJIGNhc2UgQVBDSTE3MTBfVE9SX0dFVENPVU5URVJWQUxVRSA6CisgIFJldHVybiB0aGUgdG9yIGNvdW50ZXIgKGJfVG9yQ291bnRlcikgc3RhdHVzICAgICAgICAgICB8Cit8CQkgICAgICAocGJfVG9yQ291bnRlclN0YXR1cykgYW5kIHRoZSB0aW1pbmcgdmFsdWUgICAgICAgICAgICAgfAorfAkJICAgICAgKHB1bF9Ub3JDb3VudGVyVmFsdWUpIGFmdGVyIGEgY29udGluZyBjeWNsZSBzdG9wICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBmcm9tIHNlbGVjdGVkIHRvciBjb3VudGVyIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVG9yQ291bnRlciAgIDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uICgwIG9yIDEpLgorCWJfTW9kdWxOYnIgICAgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1JlYWRUeXBlICAgID0gKEJZVEUpIGRhdGFbMF07CisJYl9Ub3JDb3VudGVyICA9CShCWVRFKSBkYXRhWzFdOworCXVpX1RpbWVPdXQJICA9IChVSU5UKSBkYXRhWzJdOyB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gIHBiX1RvckNvdW50ZXJTdGF0dXMgOiBSZXR1cm4gdGhlIHRvciBjb3VudGVyICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ29udGluZyBjeWNsZSBub3Qgc3RhcnRlZHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBnYXRlIG5vdCBzZXQuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENvbnRpbmcgY3ljbGUgc3RhcnRlZC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZ2F0ZSBzZXQuICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBDb250aW5nIGN5Y2xlIHN0b3BwZWQuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb250aW5nIGN5Y2xlIGlzICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlLiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBBIG92ZXJmbG93IG9jY3VyLiBZb3UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgY2hhbmdlIHRoZSBiYXNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nIHdpdGNoIHRoZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciJ8Cit8CQkJCQkJNCA6IFRpbWVlb3V0IG9jY3VyICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUFVMT05HICBwdWxfVG9yQ291bnRlclZhbHVlICA6IFRvciBjb3VudGVyIHZhbHVlLgorCXBiX1RvckNvdW50ZXJTdGF0dXM9KFBCWVRFKSAmZGF0YVswXTsKKwlwdWxfVG9yQ291bnRlclZhbHVlPShQVUxPTkcpICZkYXRhWzFdOyAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUb3IgY291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRvckNvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC02OiBUb3IgY291bnRlciBub3QgZW5hYmxlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0VuYWJsZVRvckNvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNzogVGltZW91dCBwYXJhbWV0ZXIgaXMgd3JvbmcgKDAgdG8gNjU1MzUpICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c0dldFRvckNvdW50ZXJQcm9ncmVzc1N0YXR1c0FuZFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCURXT1JEIGR3X1RpbWVPdXQgPSAwOworCisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9Ub3JDb3VudGVyOworCUJZVEUgYl9SZWFkVHlwZTsKKwlVSU5UIHVpX1RpbWVPdXQ7CisJUEJZVEUgcGJfVG9yQ291bnRlclN0YXR1czsKKwlQVUxPTkcgcHVsX1RvckNvdW50ZXJWYWx1ZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1JlYWRUeXBlID0gKEJZVEUpIGRhdGFbMF07CisJYl9Ub3JDb3VudGVyID0gKEJZVEUpIGRhdGFbMV07CisJdWlfVGltZU91dCA9IChVSU5UKSBkYXRhWzJdOworCXBiX1RvckNvdW50ZXJTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKwlwdWxfVG9yQ291bnRlclZhbHVlID0gKFBVTE9ORykgJiBkYXRhWzFdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9SZWFkVHlwZSA9PSBBUENJMTcxMF9UT1JfUkVBRElOVEVSUlVQVCkgeworCisJCWRhdGFbMF0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLmJfT2xkTW9kdWxlTWFzazsKKwkJZGF0YVsxXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkSW50ZXJydXB0TWFzazsKKwkJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkQ291bnRlckxhdGNoVmFsdWU7CisKKwkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogSW5jcmVtZW50IHRoZSByZWFkIEZJRk8gKi8KKwkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQl1aV9SZWFkID0gKGRldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJdWlfUmVhZCArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJcmV0dXJuIGluc24tPm47CisJfQorCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1RPUl9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSB0b3IgY291bnRlciBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfVG9yQ291bnRlciA8PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiB0b3IgY291bnRlciBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDggKyAoMTYgKiBiX1RvckNvdW50ZXIpICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MTApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgY291bnRlciBlbmFibGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkd19TdGF0dXMgJiAweDEpIHsKKworCQkJCQkJc3dpdGNoIChiX1JlYWRUeXBlKSB7CisKKwkJCQkJCWNhc2UgQVBDSTE3MTBfVE9SX0dFVFBST0dSRVNTU1RBVFVTOgorCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUmVhZCB0aGUgc3RhdHVzICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsgNCArCisJCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJCQlkd19TdGF0dXMgJiAweEY7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIHN0YXJ0ICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoZHdfU3RhdHVzICYgMSkgeworCQkJCQkJCQlpZiAoZHdfU3RhdHVzICYKKwkJCQkJCQkJCTIpIHsKKwkJCQkJCQkJCWlmIChkd19TdGF0dXMgJiA0KSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUb3IgY291bnRlciBvd2VyZmxvdyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCTM7CisJCQkJCQkJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUb3IgY291bnRlciBzdGFydGVkICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkyOworCQkJCQkJCQkJfQorCQkJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUb3IgY291bnRlciBzdGFydGVkICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBzdGFydGVkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCT0gMDsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgQVBDSTE3MTBfVE9SX0dFVENPVU5URVJWQUxVRToKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIHRpbW91dCBwYXJhbWV0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgodWlfVGltZU91dCA+PSAwKQorCQkJCQkJCQkmJiAodWlfVGltZU91dAorCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTY1NTM1VUwpKQorCQkJCQkJCXsKKwkJCQkJCQkJZm9yICg7OykgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZHdfU3RhdHVzCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQk0CisJCQkJCQkJCQkJKworCQkJCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgaWYgb3ZlcmZsb3cgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDQpID09IDQpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIE92ZXJmbG93IG9jY3VyICovCisJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwYl9Ub3JDb3VudGVyU3RhdHVzCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJMzsKKworCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUmVhZCB0aGUgdmFsdWUgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9Ub3JDb3VudGVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkwCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiA0KSA9PSA0KQorCQkJCQkJCQkJZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGVzdCBpZiBtZWFzdXJlbWVudCBzdG9wcGVkICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIEEgc3RvcCBzaWduYWwgb2NjdXIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCTI7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBSZWFkIHRoZSB2YWx1ZSAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJKnB1bF9Ub3JDb3VudGVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMAorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgMikgPT0gMikKKwkJCQkJCQkJCQllbHNlIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogVGVzdCBpZiBtZWFzdXJlbWVudCBzdGFydGVkICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJaWYgKChkd19TdGF0dXMgJiAxKSA9PSAxKSB7CisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJCS8qIEEgc3RhcnQgc2lnbmFsIG9jY3VyICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpCisJCQkJCQkJCQkJCWVsc2UgeworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCQkvKiBNZWFzdXJlbWVudCBub3Qgc3RhcnRlZCAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJCSpwYl9Ub3JDb3VudGVyU3RhdHVzCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCTA7CisJCQkJCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAxKSA9PSAxKQorCQkJCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAyKSA9PSAyKQorCQkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDgpID09IDgpCisKKwkJCQkJCQkJCWlmIChkd19UaW1lT3V0ID09IHVpX1RpbWVPdXQpIHsKKwkJCQkvKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZW91dCBvY2N1ciAqLworCQkJCS8qKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfSBlbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHRpbWVvdXQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X1RpbWVPdXQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkd19UaW1lT3V0CisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKworCQkJCQkJCQkJCW1kZWxheSgxMDAwKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQkvLyBmb3IgKDs7KQorCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIHRpbWVvdXQgb2NjdXIgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKCgqcGJfVG9yQ291bnRlclN0YXR1cyAhPSAzKSAmJiAoZHdfVGltZU91dCA9PSB1aV9UaW1lT3V0KSAmJiAodWlfVGltZU91dCAhPSAwKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lb3V0IG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJNDsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRpbWVvdXQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiVGltZW91dCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS03OworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKworCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQlwcmludGsoIklucHV0cyB3cm9uZ1xuIik7CisJCQkJCQl9CS8vIHN3aXRjaCBlbmQKKwkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUb3IgY291bnRlciBub3QgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgbm90IGVuYWJsZWRcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEpCisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXIgPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9Ub3JDb3VudGVyIDw9IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0NWQxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF8zME1IWgkJMzAKKyNkZWZpbmUgQVBDSTE3MTBfMzNNSFoJCTMzCisjZGVmaW5lIEFQQ0kxNzEwXzQwTUhaCQk0MAorCisjZGVmaW5lIEFQQ0kxNzEwX0dBVEVfSU5QVVQJMTAKKworI2RlZmluZSBBUENJMTcxMF9UT1JfU0lNUExFX01PREUJMgorI2RlZmluZSBBUENJMTcxMF9UT1JfRE9VQkxFX01PREUJMworI2RlZmluZSBBUENJMTcxMF9UT1JfUVVBRFJVUExFX01PREUJNAorCisjZGVmaW5lIEFQQ0kxNzEwX1NJTkdMRQkJCTAKKyNkZWZpbmUgQVBDSTE3MTBfQ09OVElOVU9VUwkJMQorCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9HRVRQUk9HUkVTU1NUQVRVUwkwCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9HRVRDT1VOVEVSVkFMVUUJMQorI2RlZmluZSBBUENJMTcxMF9UT1JfUkVBRElOVEVSUlVQVAkyCisKKy8qCisgKiBUT1JfQ09VTlRFUiBJTklTSUFMSVNBVElPTiBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRvckNvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZVRvckNvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRHZXRUb3JDb3VudGVySW5pdGlhbGlzYXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKy8qCisgKiBUT1JfQ09VTlRFUiBSRUFEIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzR2V0VG9yQ291bnRlclByb2dyZXNzU3RhdHVzQW5kVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQkJICAgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1R0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjFkMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1R0bC5jCkBAIC0wLDAgKzEsMTAzOCBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUEkgQVBDSTE3MTAgICAgfCBDb21waWxlciA6IGdjYyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IFRUTC5DICAgICAgICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE3MTAgVFRMIEkvTyBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAxMy8wNS85OCB8IFMuIFdlYmVyICB8IFRUTCBkaWdpdGFsIGlucHV0IC8gb3V0cHV0IGltcGxlbWVudGF0aW9uICAgICAgfAorICB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgIHwgMDgvMDUvMDAgfCBHdWlub3QgQyAgfCAtIDA0MDAvMDIyOCBBbGwgRnVuY3Rpb24gaW4gUklORyAwICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgIkFQQ0kxNzEwX1R0bC5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Jbml0VFRMSU9EaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgQllURV8gICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXyAgICBiX1BvcnRBTW9kZSwgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJIEJZVEVfICAgIGJfUG9ydEJNb2RlLCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgQllURV8gICAgYl9Qb3J0Q01vZGUsICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXyAgICBiX1BvcnRETW9kZSkgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICBBUENJMTcxMF9UVExfSU5JVCAodXNpbmcgZGVmYXVsdHMpICAgOiBDb25maWd1cmUgdGhlIFRUTCBJL08gb3BlcmF0aW5nIG1vZGUgZnJvbSBzZWxlY3RlZCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmV8Cit8ICAgICAgICAgICAgICAgICAgICAgZm9yIHlvdSBjYWxsIGFueSBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgVFRMLiAgIHwKKwkJCQkgQVBDSTE3MTBfVFRMX0lOSVRESVJFQ1RJT04odXNlciBpbnB1dHMgZm9yIGRpcmVjdGlvbikKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAzKQorCQliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCQliX0luaXRUeXBlID0gKEJZVEUpIGRhdGFbMF07CisJCWJfUG9ydEFNb2RlCT0gKEJZVEUpIGRhdGFbMV07CisJCWJfUG9ydEJNb2RlID0gKEJZVEUpIGRhdGFbMl07CisJCWJfUG9ydENNb2RlID0gKEJZVEUpIGRhdGFbM107CisJCWJfUG9ydERNb2RlCT0gKEJZVEUpIGRhdGFbNF07fAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgIC00OiBGdW5jdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHZlcnNpb24gICAgICAgICAgICAgfAorfAkJICAgICAtNTogUG9ydCBBIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgLTY6IFBvcnQgQiBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgIC03OiBQb3J0IEMgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAtODogUG9ydCBEIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfSW5pdFR5cGU7CisJQllURSBiX1BvcnRBTW9kZTsKKwlCWVRFIGJfUG9ydEJNb2RlOworCUJZVEUgYl9Qb3J0Q01vZGU7CisJQllURSBiX1BvcnRETW9kZTsKKworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9Jbml0VHlwZSA9IChCWVRFKSBkYXRhWzBdOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgVFRMIEkvTyBtb2R1bGUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVFRMX0lPKSB7CisJCQlzd2l0Y2ggKGJfSW5pdFR5cGUpIHsKKwkJCWNhc2UgQVBDSTE3MTBfVFRMX0lOSVQ6CisKKwkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfVFRMSU9JbmZvLmJfVFRMSW5pdCA9IDE7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBUVEwgcG9ydCBBIHRvIGlucHV0ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19UVExJT0luZm8uYl9Qb3J0Q29uZmlndXJhdGlvblswXSA9IDA7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBUVEwgcG9ydCBCIHRvIGlucHV0ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19UVExJT0luZm8uYl9Qb3J0Q29uZmlndXJhdGlvblsxXSA9IDA7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBUVEwgcG9ydCBDIHRvIGlucHV0ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19UVExJT0luZm8uYl9Qb3J0Q29uZmlndXJhdGlvblsyXSA9IDA7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgVFRMIHBvcnQgRCB0byBvdXRwdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19UVExJT0luZm8uYl9Qb3J0Q29uZmlndXJhdGlvblszXSA9IDE7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMHg4LAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFQQ0kxNzEwX1RUTF9JTklURElSRUNUSU9OOgorCisJCQkJYl9Qb3J0QU1vZGUgPSAoQllURSkgZGF0YVsxXTsKKwkJCQliX1BvcnRCTW9kZSA9IChCWVRFKSBkYXRhWzJdOworCQkJCWJfUG9ydENNb2RlID0gKEJZVEUpIGRhdGFbM107CisJCQkJYl9Qb3J0RE1vZGUgPSAoQllURSkgZGF0YVs0XTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSB2ZXJzaW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PQorCQkJCQkweDMyMzApIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHBvcnQgQSBtb2RlICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9Qb3J0QU1vZGUgPT0gMCkKKwkJCQkJCXx8IChiX1BvcnRBTW9kZSA9PSAxKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIHBvcnQgQiBtb2RlICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGJfUG9ydEJNb2RlID09IDApCisJCQkJCQkJfHwgKGJfUG9ydEJNb2RlID09IDEpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIHBvcnQgQyBtb2RlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChiX1BvcnRDTW9kZSA9PSAwKQorCQkJCQkJCQl8fCAoYl9Qb3J0Q01vZGUKKwkJCQkJCQkJCT09IDEpKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgdGhlIHBvcnQgRCBtb2RlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKChiX1BvcnRETW9kZSA9PSAwKSB8fCAoYl9Qb3J0RE1vZGUgPT0gMSkpIHsKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCQkJCQliX1RUTEluaXQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJMTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTZXQgVFRMIHBvcnQgQSBtb2RlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJCQlbMF0KKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJYl9Qb3J0QU1vZGU7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2V0IFRUTCBwb3J0IEIgbW9kZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uCisJCQkJCQkJCQkJWzFdCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfUG9ydEJNb2RlOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCBUVEwgcG9ydCBDIG1vZGUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCQkJCVsyXQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BvcnRDTW9kZTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTZXQgVFRMIHBvcnQgRCBtb2RlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJCQlbM10KKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJYl9Qb3J0RE1vZGU7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCW91dGwoKGJfUG9ydEFNb2RlIDw8IDApIHwgKGJfUG9ydEJNb2RlIDw8IDEpIHwgKGJfUG9ydENNb2RlIDw8IDIpIHwgKGJfUG9ydERNb2RlIDw8IDMpLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFBvcnQgRCBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJRFBSSU5USygiUG9ydCBEIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCWlfUmV0dXJuVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJLTg7CisJCQkJCQkJCX0KKwkJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogUG9ydCBDIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCURQUklOVEsoIlBvcnQgQyBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTc7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFBvcnQgQiBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJQb3J0IEIgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUG9ydCBBIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiUG9ydCBBIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRnVuY3Rpb24gbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB2ZXJzaW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJGdW5jdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHZlcnNpb25cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJRFBSSU5USygiXG4iKTsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKCJCYWQgQ29uZmlnIFR5cGVcbiIpOworCQkJfQkvLyBzd2l0Y2ggZW5kCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgIGlfQVBDSTE3MTBfUmVhZFRUTElPQ2hhbm5lbFZhbHVlICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfU2VsZWN0ZWRQb3J0LCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9JbnB1dENoYW5uZWwsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0NoYW5uZWxTdGF0dXMpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgdGhlIHN0YXR1cyBmcm9tIHNlbGVjdGVkIFRUTCBkaWdpdGFsIGlucHV0ICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfSW5wdXRDaGFubmVsKQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdHVzIGZyb20gZGlnaXRhbCBpbnB1dCBwb3J0ICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9TZWxlY3RlZFBvcnQpIGZyb20gc2VsZWN0ZWQgVFRMIG1vZHVsZSAoYl9Nb2R1bE5icikgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gNykgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU2VsZWN0ZWRQb3J0LCAgICAgICA6IFNlbGVjdGlvbiBmcm9tIFRUTCBJL08gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCAoMCB0byAyKSAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogUG9ydCBBIHNlbGVjdGlvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBQb3J0IEIgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IFBvcnQgQyBzZWxlY3Rpb24gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIDogUG9ydCBEIHNlbGVjdGlvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW5wdXRDaGFubmVsICAgICAgICA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgKCAwIHRvIDIpCitBUENJMTcxMF9UVExfUkVBRENIQU5ORUwKKwliX01vZHVsTmJyCSAgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1NlbGVjdGVkUG9ydD0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWJfSW5wdXRDaGFubmVsPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwliX1JlYWRUeXBlCSAgPSAoQllURSkgZGF0YVswXTsKKworIEFQQ0kxNzEwX1RUTF9SRUFEUE9SVHwKKwliX01vZHVsTmJyCSAgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1NlbGVjdGVkUG9ydD0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWJfUmVhZFR5cGUJICA9IChCWVRFKSBkYXRhWzBdOworCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBkYXRhWzBdCisKKwlQQllURV8gIHBiX0NoYW5uZWxTdGF0dXMgICAgOiBEaWdpdGFsIGlucHV0IGNoYW5uZWwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5ubGUgaXMgbm90IGFjdGl2ZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5sZSBpcyBhY3RpdmUgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgVFRMIGlucHV0IHBvcnQgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFRoZSBzZWxlY3RlZCBUVEwgZGlnaXRhbCBpbnB1dCBpcyB3cm9uZyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNSZWFkVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWc7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9TZWxlY3RlZFBvcnQ7CisJQllURSBiX0lucHV0Q2hhbm5lbDsKKwlCWVRFIGJfUmVhZFR5cGU7CisJUEJZVEUgcGJfQ2hhbm5lbFN0YXR1czsKKwlQQllURSBwYl9Qb3J0VmFsdWU7CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwliX1JlYWRUeXBlID0gKEJZVEUpIGRhdGFbMF07CisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU2VsZWN0ZWRQb3J0ID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWJfSW5wdXRDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBUVEwgSS9PIG1vZHVsZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9UVExfSU8pIHsKKwkJCXN3aXRjaCAoYl9SZWFkVHlwZSkgeworCisJCQljYXNlIEFQQ0kxNzEwX1RUTF9SRUFEQ0hBTk5FTDoKKwkJCQlwYl9DaGFubmVsU3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMF07CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIFRUTCBJL08gcG9ydCBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKChiX1NlbGVjdGVkUG9ydCA8PSAyKQorCQkJCQkJJiYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQkJCVtiX01vZHVsTmJyXSAmCisJCQkJCQkJCTB4RkZGRikgPT0KKwkJCQkJCQkweDMxMzApKQorCQkJCQl8fCAoKGJfU2VsZWN0ZWRQb3J0IDw9IDMpCisJCQkJCQkmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQkJW2JfTW9kdWxOYnJdICYKKwkJCQkJCQkJMHhGRkZGKSA+PQorCQkJCQkJCTB4MzIzMCkpKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIGltbnB1dCBjaGFubmVsIG51bWJlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKChiX0lucHV0Q2hhbm5lbCA8PSA3KQorCQkJCQkJCSYmIChiX1NlbGVjdGVkUG9ydCA8IDMpKQorCQkJCQkJfHwgKChiX0lucHV0Q2hhbm5lbCA8PSAxKQorCQkJCQkJCSYmIChiX1NlbGVjdGVkUG9ydCA9PQorCQkJCQkJCQkzKSkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIHRoZSBUVEwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1RUTElPSW5mby5iX1RUTEluaXQgPT0KKwkJCQkJCQkxKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBUVEwgcG9ydCB1c2VkIGZvciBpbnB1dCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKCgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA9PSAweDMxMzApIHx8ICgoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMjMwKSAmJiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfVFRMSU9JbmZvLmJfUG9ydENvbmZpZ3VyYXRpb25bYl9TZWxlY3RlZFBvcnRdID09IDApKSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFJlYWQgYWxsIGRpZ2l0YWwgaW5wdXQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCSsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkqcGJfQ2hhbm5lbFN0YXR1cworCQkJCQkJCQkJPQorCQkJCQkJCQkJKEJZVEUpICgKKwkJCQkJCQkJCShkd19TdGF0dXNSZWcKKwkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCSg4ICogYl9TZWxlY3RlZFBvcnQpKSA+PiBiX0lucHV0Q2hhbm5lbCkgJiAxOworCQkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZWxlY3RlZCBUVEwgSS9PIHBvcnQgZXJyb3IgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNDsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUVEwgSS9PIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlRUTCBJL08gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTZWxlY3RlZCBkaWdpdGFsIGlucHV0IGVycm9yICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgZXJyb3JcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RlZCBUVEwgSS9PIHBvcnQgZXJyb3IgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlNlbGVjdGVkIFRUTCBJL08gcG9ydCBlcnJvclxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVBDSTE3MTBfVFRMX1JFQURQT1JUOgorCQkJCXBiX1BvcnRWYWx1ZSA9IChQQllURSkgJiBkYXRhWzBdOworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgVFRMIEkvTyBwb3J0IG51bWJlciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKChiX1NlbGVjdGVkUG9ydCA8PSAyKQorCQkJCQkJJiYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQkJCVtiX01vZHVsTmJyXSAmCisJCQkJCQkJCTB4RkZGRikgPT0KKwkJCQkJCQkweDMxMzApKQorCQkJCQl8fCAoKGJfU2VsZWN0ZWRQb3J0IDw9IDMpCisJCQkJCQkmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQkJW2JfTW9kdWxOYnJdICYKKwkJCQkJCQkJMHhGRkZGKSA+PQorCQkJCQkJCTB4MzIzMCkpKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHRoZSBUVEwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19UVExJT0luZm8uYl9UVExJbml0ID09IDEpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgVFRMIHBvcnQgdXNlZCBmb3IgaW5wdXQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKCgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQkJCVtiX01vZHVsTmJyXQorCQkJCQkJCQkJJgorCQkJCQkJCQkJMHhGRkZGKQorCQkJCQkJCQk9PSAweDMxMzApCisJCQkJCQkJfHwgKCgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PSAweDMyMzApICYmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc19UVExJT0luZm8uYl9Qb3J0Q29uZmlndXJhdGlvbltiX1NlbGVjdGVkUG9ydF0gPT0gMCkpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCXVpX0FkZHJlc3MgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkqcGJfUG9ydFZhbHVlID0KKwkJCQkJCQkJKEJZVEUpICgKKwkJCQkJCQkJKGR3X1N0YXR1c1JlZyA+PgorCQkJCQkJCQkJKDggKiBiX1NlbGVjdGVkUG9ydCkpICYgMHhGRik7CisJCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlNlbGVjdGVkIFRUTCBJL08gcG9ydCBlcnJvclxuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRUTCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUVEwgSS9PIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdGVkIFRUTCBJL08gcG9ydCBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIkJhZCBSZWFkVHlwZVxuIik7CisKKwkJCX0JLy9FbmQgU3dpdGNoCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCBpX0FQQ0kxNzEwX0luc25SZWFkVFRMSU9BbGxQb3J0VmFsdWUoY29tZWRpX2RldmljZQorKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdHVzIGZyb20gYWxsIGRpZ2l0YWwgaW5wdXQgcG9ydHMgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAocG9ydCBBLCBwb3J0IEIgYW5kIHBvcnQgQykgZnJvbSBzZWxlY3RlZCBUVEwgICAgICAgICAgfAorfAkJICAgICAgbW9kdWxlIChiX01vZHVsTmJyKSAJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9Qb3J0VmFsdWUgICAgICA6IERpZ2l0YWwgVFRMIGlucHV0cyBwb3J0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKwlCWVRFIGJfTW9kdWxOYnI7CisJUFVMT05HIHB1bF9Qb3J0VmFsdWU7CisKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXB1bF9Qb3J0VmFsdWUgPSAoUFVMT05HKSAmIGRhdGFbMF07CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBUVEwgSS9PIG1vZHVsZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9UVExfSU8pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiB0aGUgVFRMIEkvTyBtb2R1bGUgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfVFRMSU9JbmZvLmJfVFRMSW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfU3RhdHVzUmVnID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBUVEwgUmV2MS4wICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCVtiX01vZHVsTmJyXSAmIDB4RkZGRikgPT0KKwkJCQkJMHgzMTMwKSB7CisJCQkJCSpwdWxfUG9ydFZhbHVlID0KKwkJCQkJCWR3X1N0YXR1c1JlZyAmIDB4RkZGRkZGVUw7CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBwb3J0IEEgbm90IHVzZWQgZm9yIG91dHB1dCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb25bMF0gPT0gMSkgeworCQkJCQkJKnB1bF9Qb3J0VmFsdWUgPQorCQkJCQkJCWR3X1N0YXR1c1JlZyAmCisJCQkJCQkJMHgzRkZGRjAwVUw7CisJCQkJCX0KKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHBvcnQgQiBub3QgdXNlZCBmb3Igb3V0cHV0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uWzFdID09IDEpIHsKKwkJCQkJCSpwdWxfUG9ydFZhbHVlID0KKwkJCQkJCQlkd19TdGF0dXNSZWcgJgorCQkJCQkJCTB4M0ZGMDBGRlVMOworCQkJCQl9CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBwb3J0IEMgbm90IHVzZWQgZm9yIG91dHB1dCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvblsyXSA9PSAxKSB7CisJCQkJCQkqcHVsX1BvcnRWYWx1ZSA9CisJCQkJCQkJZHdfU3RhdHVzUmVnICYKKwkJCQkJCQkweDMwMEZGRkZVTDsKKwkJCQkJfQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgcG9ydCBEIG5vdCB1c2VkIGZvciBvdXRwdXQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb25bM10gPT0gMSkgeworCQkJCQkJKnB1bF9Qb3J0VmFsdWUgPQorCQkJCQkJCWR3X1N0YXR1c1JlZyAmCisJCQkJCQkJMHhGRkZGRkZVTDsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRUTCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIlRUTCBJL08gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfU2V0VFRMSU9DaGxPbiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgICAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgIGJfT3V0cHV0Q2hhbm5lbCkKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZVNldFRUTElPQ2hsT25PZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU2V0cyBvciByZXNldHMgIHRoZSBvdXRwdXQgd2l0Y2ggaGFzIGJlZW4gcGFzc2VkIHdpdGggdGhlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBiX0NoYW5uZWwuIFNldHRpbmcgYW4gb3V0cHV0IG1lYW5zIHNldHRpbmcgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYW4gb3VwdXQgaGlnaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKXwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX091dHB1dENoYW5uZWwgOiBTZWxlY3Rpb24gZnJvbSBkaWdpdGFsIG91dHB1dCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwgKDAgb3IgMSkgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgIDogUEQwICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgOiBQRDEgICAgICAgICAgICAgICAgfAorfAkJCQkJCSAyIHRvIDkgOiBQQSAgICAgICAgICAgICAgICAgfAorfAkJCQkJCTEwIHRvIDE3OiBQQiAgICAgICAgICAgICAgICAgfAorfAkJCQkJCTE4IHRvIDI1OiBQQyAgICAgICAgICAgICAgICAgfAorCisgIGJfTW9kdWxOYnIJICAgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX091dHB1dENoYW5uZWw9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVpX1N0YXRlCSAgID0gZGF0YVswXTsgLy8gT04gb3IgT0ZGCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFRUTCBJL08gbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIiBpX0FQQ0kxNzEwX0luaXRUVExJTyIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlU2V0VFRMSU9DaGxPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZyA9IDA7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9PdXRwdXRDaGFubmVsOworCVVJTlQgdWlfU3RhdGU7CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwliX01vZHVsTmJyID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9PdXRwdXRDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdWlfU3RhdGUgPSBkYXRhWzBdOwkvLyBPTiBvciBPRkYKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFRUTCBJL08gbW9kdWxlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1RUTF9JTykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIHRoZSBUVEwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19UVExJT0luZm8uYl9UVExJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBUVEwgSS9PIGNoYW5uZWwgbnVtYmVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKChiX091dHB1dENoYW5uZWwgPD0gMSkKKwkJCQkJCSYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQlbYl9Nb2R1bE5icl0gJgorCQkJCQkJCQkweEZGRkYpID09CisJCQkJCQkJMHgzMTMwKSkKKwkJCQkJfHwgKChiX091dHB1dENoYW5uZWwgPD0gMjUpCisJCQkJCQkmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQkJW2JfTW9kdWxOYnJdICYKKwkJCQkJCQkJMHhGRkZGKSA+PQorCQkJCQkJCTB4MzIzMCkpKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBpcyBhIG91dHB1dCBjaGFubmVsICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKChiX091dHB1dENoYW5uZWwgPD0gMSkKKwkJCQkJCQkmJiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uCisJCQkJCQkJCVszXSA9PSAxKSkKKwkJCQkJCXx8ICgoYl9PdXRwdXRDaGFubmVsID49IDIpCisJCQkJCQkJJiYgKGJfT3V0cHV0Q2hhbm5lbCA8PQorCQkJCQkJCQk5KQorCQkJCQkJCSYmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJWzBdID09IDEpKQorCQkJCQkJfHwgKChiX091dHB1dENoYW5uZWwgPj0gMTApCisJCQkJCQkJJiYgKGJfT3V0cHV0Q2hhbm5lbCA8PQorCQkJCQkJCQkxNykKKwkJCQkJCQkmJiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uCisJCQkJCQkJCVsxXSA9PSAxKSkKKwkJCQkJCXx8ICgoYl9PdXRwdXRDaGFubmVsID49IDE4KQorCQkJCQkJCSYmIChiX091dHB1dENoYW5uZWwgPD0KKwkJCQkJCQkJMjUpCisJCQkJCQkJJiYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCQlbMl0gPT0gMSkpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBQRDAgc2VsZWN0ZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChiX091dHB1dENoYW5uZWwgPT0gMCkgeworCisJCQkJCQkJb3V0bCh1aV9TdGF0ZSwKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBQRDEgc2VsZWN0ZWQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChiX091dHB1dENoYW5uZWwgPT0KKwkJCQkJCQkJMSkgeworCisJCQkJCQkJCW91dGwodWlfU3RhdGUsCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCSsgNCArCisJCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJYl9PdXRwdXRDaGFubmVsCisJCQkJCQkJCQk9CisJCQkJCQkJCQliX091dHB1dENoYW5uZWwKKwkJCQkJCQkJCS0gMjsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFJlYWQgYWxsIGNoYW5uZWwgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCSsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQkJaWYgKHVpX1N0YXRlKQkvLyBPTgorCQkJCQkJCQl7CisJCQkJCQkJCQlkd19TdGF0dXNSZWcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT4+CisJCQkJCQkJCQkJKChiX091dHB1dENoYW5uZWwgLyA4KSAqIDgpKSAmIDB4RkY7CisJCQkJCQkJCQlkd19TdGF0dXNSZWcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZHdfU3RhdHVzUmVnCisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCSgxCisJCQkJCQkJCQkJPDwKKwkJCQkJCQkJCQkoYl9PdXRwdXRDaGFubmVsCisJCQkJCQkJCQkJCSUKKwkJCQkJCQkJCQkJOCkpOworCQkJCQkJCQl9IGVsc2UJLy8gT2ZmCisJCQkJCQkJCXsKKwkJCQkJCQkJCWR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZHdfU3RhdHVzUmVnCisJCQkJCQkJCQkJPj4KKwkJCQkJCQkJCQkoKGJfT3V0cHV0Q2hhbm5lbCAvIDgpICogOCkpICYgMHhGRjsKKwkJCQkJCQkJCWR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19TdGF0dXNSZWcKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJKDB4RkYKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJKDEgPDwgKGJfT3V0cHV0Q2hhbm5lbCAlIDgpKSk7CisKKwkJCQkJCQkJfQorCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIG5ldyBvdXRwdXQgdmFsdWUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bChkd19TdGF0dXNSZWcsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgOCArICgoYl9PdXRwdXRDaGFubmVsIC8gOCkgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBvdXRwdXQgaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIiBUaGUgc2VsZWN0ZWQgVFRMIG91dHB1dCBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBvdXRwdXQgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFRUTCBvdXRwdXQgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJUVEwgSS9PIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIEkvTyBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIEkvTyBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5MTVkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF9UVExfSU5JVAkJMAorI2RlZmluZSBBUENJMTcxMF9UVExfSU5JVERJUkVDVElPTgkxCisKKyNkZWZpbmUgQVBDSTE3MTBfVFRMX1JFQURDSEFOTkVMCTAKKyNkZWZpbmUgQVBDSTE3MTBfVFRMX1JFQURQT1JUCQkxCisKKy8qCisgKiBUVEwgSU5JU0lBTElTQVRJT04gRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBUVEwgSU5QVVQgRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNSZWFkVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkVFRMSU9BbGxQb3J0VmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorICogVFRMIE9VVFBVVCBGVU5DVElPTlMKKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlU2V0VFRMSU9DaGxPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDkwN2VjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuYwpAQCAtMCwwICsxLDIwMyBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgOiBBRERJIEhFQURFUiBSRUFEIFdSSVRFUiB8ICAgICBDb21waWxlciAgIDogVmlzdWFsIEMrKyAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBTNTkyMC5jcHAgICAgICAgICAgIHwgICAgIFZlcnNpb24gICAgOiA2LjAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEF1dGhvciA6IEUuIExJQlMgICAgICAgICAgICAgICAgICAgICAgRGF0ZSA6IDAyLzA1LzIwMDIgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiAgIDogRExMIHdpdGggdGhlIFM1OTIwIFBDSSBDb250cm9sbGVyIGZ1bmN0aW9ucyAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURSdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAyOC8wOC8wMiB8IExJQlMgRXJpYyB8IEFkZCByZXR1cm4gY29kZXMgZWFjaCB0aW1lIGEgZnVuY3Rpb24gb2YgdGhlICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgQWRkaSBMaWJyYXJ5IGlzIGNhbGxlZCAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAzMS8wNy8wMyB8IEtSQVVUSCBKLiB8IENoYW5nZXMgZm9yIHRoZSBNU1gtQm94ICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiYWRkaV9hbWNjX1M1OTIwLmgiCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBGdW5jdGlvbiAgIE5hbWUgICA6IElOVCBpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5UICAgIGlfTmJPZldvcmRzVG9SZWFkLCAgICAgICAgICAgICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCAgICAgICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzLCAgICAgICAgICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdPUkQgcHdfRGF0YVJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgd29yZCBmcm9tIHRoZSA1OTIwIGVlcHJvbS4gICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBJbnB1dCBQYXJhbWV0ZXJzICA6IElOVCAgICBpX05iT2ZXb3Jkc1RvUmVhZCA6IE5ici4gb2Ygd29yZCB0byByZWFkICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgIERXT1JEIGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IEFkZHJlc3Mgb2YgdGhlIGVlcHJvbSB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgIFdPUkQgICB3X0VlcHJvbVN0YXJ0QWRkcmVzcyA6IEVlcHJvbSBzdHJhdCBhZGRyZXNzICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBXT1JEIHB3X0RhdGFSZWFkIDogUmVhZCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBSZXR1cm4gVmFsdWUgICAgICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKworSU5UIGlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oSU5UIGlfTmJPZldvcmRzVG9SZWFkLAorCURXT1JEIGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwlXT1JEIHdfRWVwcm9tU3RhcnRBZGRyZXNzLCBQV09SRCBwd19EYXRhUmVhZCkKK3sKKwlEV09SRCBkd19lZXByb21fYnVzeSA9IDA7CisJSU5UIGlfQ291bnRlciA9IDA7CisJSU5UIGlfV29yZENvdW50ZXI7CisJSU5UIGk7CisJQllURSBwYl9SZWFkQnl0ZVsxXTsKKwlCWVRFIGJfUmVhZExvd0J5dGUgPSAwOworCUJZVEUgYl9SZWFkSGlnaEJ5dGUgPSAwOworCUJZVEUgYl9TZWxlY3RlZEFkZHJlc3NMb3cgPSAwOworCUJZVEUgYl9TZWxlY3RlZEFkZHJlc3NIaWdoID0gMDsKKwlXT1JEIHdfUmVhZFdvcmQgPSAwOworCisJZm9yIChpX1dvcmRDb3VudGVyID0gMDsgaV9Xb3JkQ291bnRlciA8IGlfTmJPZldvcmRzVG9SZWFkOworCQlpX1dvcmRDb3VudGVyKyspIHsKKwkJZG8geworCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQl9CisJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJZm9yIChpX0NvdW50ZXIgPSAwOyBpX0NvdW50ZXIgPCAyOyBpX0NvdW50ZXIrKykgeworCQkJYl9TZWxlY3RlZEFkZHJlc3NMb3cgPSAod19FZXByb21TdGFydEFkZHJlc3MgKyBpX0NvdW50ZXIpICUgMjU2OwkvL1JlYWQgdGhlIGxvdyA4IGJpdCBwYXJ0CisJCQliX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAod19FZXByb21TdGFydEFkZHJlc3MgKyBpX0NvdW50ZXIpIC8gMjU2OwkvL1JlYWQgdGhlIGhpZ2ggOCBiaXQgcGFydAorCisJCQkvL1NlbGVjdCB0aGUgbG9hZCBsb3cgYWRkcmVzcyBtb2RlCisJCQlvdXRiKE5WQ01EX0xPQURfTE9XLAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIEFNQ0NfT1BfUkVHX01DU1IgKworCQkJCTMpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vTG9hZCB0aGUgbG93IGFkZHJlc3MKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NMb3csCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMik7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9TZWxlY3QgdGhlIGxvYWQgaGlnaCBhZGRyZXNzIG1vZGUKKwkJCW91dGIoTlZDTURfTE9BRF9ISUdILAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIEFNQ0NfT1BfUkVHX01DU1IgKworCQkJCTMpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vTG9hZCB0aGUgaGlnaCBhZGRyZXNzCisJCQlvdXRiKGJfU2VsZWN0ZWRBZGRyZXNzSGlnaCwKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkyKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1NlbGVjdCB0aGUgUkVBRCBtb2RlCisJCQlvdXRiKE5WQ01EX0JFR0lOX1JFQUQsCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9SZWFkIGRhdGEgaW50byB0aGUgRUVQUk9NCisJCQkqcGJfUmVhZEJ5dGUgPQorCQkJCWluYihkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCUFNQ0NfT1BfUkVHX01DU1IgKyAyKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1NlbGVjdCB0aGUgdXBwZXIgYWRkcmVzcyBwYXJ0CisJCQlpZiAoaV9Db3VudGVyID09IDApIHsKKwkJCQliX1JlYWRMb3dCeXRlID0gcGJfUmVhZEJ5dGVbMF07CisJCQl9IGVsc2UgeworCQkJCWJfUmVhZEhpZ2hCeXRlID0gcGJfUmVhZEJ5dGVbMF07CisJCQl9CisKKwkJCS8vU2xlZXAKKwkJCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSA7CisKKwkJfQorCQl3X1JlYWRXb3JkID0KKwkJCShiX1JlYWRMb3dCeXRlIHwgKCgodW5zaWduZWQgc2hvcnQpYl9SZWFkSGlnaEJ5dGUpICoKKwkJCQkyNTYpKTsKKworCQlwd19EYXRhUmVhZFtpX1dvcmRDb3VudGVyXSA9IHdfUmVhZFdvcmQ7CisKKwkJd19FZXByb21TdGFydEFkZHJlc3MgKz0gMjsJLy8gdG8gcmVhZCB0aGUgbmV4dCB3b3JkCisKKwl9CQkJLy8gZm9yICguLi4pIGlfTmJPZldvcmRzVG9SZWFkCisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTU2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01DU1IJMHgzYworI2RlZmluZSBFRVBST01fQlVTWQkJMHg4MDAwMDAwMAorI2RlZmluZSBOVkNNRF9MT0FEX0xPVwkJKDB4NCA8PCA1KQkvKiBudlJhbSBsb2FkIGxvdyBjb21tYW5kICovCisjZGVmaW5lIE5WQ01EX0xPQURfSElHSAkJKDB4NSA8PCA1KQkvKiBudlJhbSBsb2FkIGhpZ2ggY29tbWFuZCAqLworI2RlZmluZSBOVkNNRF9CRUdJTl9SRUFECSgweDcgPDwgNSkJLyogbnZSYW0gYmVnaW4gcmVhZCBjb21tYW5kICovCisjZGVmaW5lIE5WQ01EX0JFR0lOX1dSSVRFCSgweDYgPDwgNSkJLyogRUVQUk9NIGJlZ2luIHdyaXRlIGNvbW1hbmQgKi8KKworSU5UIGlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oSU5UIGlfTmJPZldvcmRzVG9SZWFkLAorCQkJICAgICAgRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJICAgICAgV09SRCB3X0VlcHJvbVN0YXJ0QWRkcmVzcywgUFdPUkQgcHdfRGF0YVJlYWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfczU5MzMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX3M1OTMzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwNzc0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX3M1OTMzLmgKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKiBIZWFkZXIgZmlsZSBmb3IgQU1DQyAgcyA1OTMzICovCisKKyNpZm5kZWYgX0FNQ0NfUzU5MzNfSF8KKyNkZWZpbmUgX0FNQ0NfUzU5MzNfSF8KKworI2luY2x1ZGUgIi4uLy4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiLi4vY29tZWRpX3BjaS5oIgorCisjaWZkZWYgUENJX1NVUFBPUlRfVkVSMQorI2Vycm9yICAgICBObyBzdXBwb3J0IGZvciAyLjEuNTUgYW5kIG9sZGVyCisjZW5kaWYKKworLyogd3JpdHRlbiBvbiBiYXNlMCAqLworI2RlZmluZSBGSUZPX0FEVkFOQ0VfT05fQllURV8yCTB4MjAwMDAwMDAKKworLyogYWRkZWQgZm9yIHN0ZXAgNiBkbWEgd3JpdHRlbiBvbiBiYXNlMiAqLworI2RlZmluZSBBTVdFTl9FTkFCTEUJCTB4MDIKKworI2RlZmluZSBBMlBfRklGT19XUklURV9FTkFCTEUJMHgwMQorCisvKiBmb3IgdHJhbnNmZXIgY291bnQgZW5hYmxlIGJpdCAqLworI2RlZmluZSBBR0NTVFNfVENfRU5BQkxFCTB4MTAwMDAwMDAKKworLyoKKyAqIEFERE9OIFJFTEFURUQgQURESVRJT05TCisgKi8KKy8qIENvbnN0YW50ICovCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fTE9XCQkweDAwCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fSElHSAkJMHgxMjAwCisjZGVmaW5lIEFQQ0kzMTIwX0EyUF9GSUZPX01BTkFHRU1FTlQJCQkweDA0MDAwNDAwTAorI2RlZmluZSBBUENJMzEyMF9BTVdFTl9FTkFCTEUJCQkJMHgwMgorI2RlZmluZSBBUENJMzEyMF9BMlBfRklGT19XUklURV9FTkFCTEUJCQkweDAxCisjZGVmaW5lIEFQQ0kzMTIwX0ZJRk9fQURWQU5DRV9PTl9CWVRFXzIJCQkweDIwMDAwMDAwTAorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfV1JJVEVfVENfSU5UCQkJMHgwMDAwNDAwMEwKKyNkZWZpbmUgQVBDSTMxMjBfQ0xFQVJfV1JJVEVfVENfSU5UCQkJMHgwMDA0MDAwMEwKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9BTVdFTl9BTkRfQTJQX0ZJRk9fV1JJVEUJMHgwCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfQlVTX01BU1RFUl9BRERfT04JCTB4MAorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX0JVU19NQVNURVJfUENJCQkJMHgwCisKKy8qIEFERF9PTiA6OjogdGhpcyBuZWVkZWQgc2luY2UgYXBjaSBzdXBwb3J0cyAxNiBiaXQgaW50ZXJmYWNlIHRvIGFkZCBvbiAqLworI2RlZmluZSBBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVwkweDNDCisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfSElHSAkoQVBDSTMxMjBfQUREX09OX0FHQ1NUU19MT1cgKyAyKQorI2RlZmluZSBBUENJMzEyMF9BRERfT05fTVdBUl9MT1cJMHgyNAorI2RlZmluZSBBUENJMzEyMF9BRERfT05fTVdBUl9ISUdICShBUENJMzEyMF9BRERfT05fTVdBUl9MT1cgKyAyKQorI2RlZmluZSBBUENJMzEyMF9BRERfT05fTVdUQ19MT1cJMHgwNTgKKyNkZWZpbmUgQVBDSTMxMjBfQUREX09OX01XVENfSElHSAkoQVBDSTMxMjBfQUREX09OX01XVENfTE9XICsgMikKKworLyogQU1DQyAqLworI2RlZmluZSBBUENJMzEyMF9BTUNDX09QX01DU1IJCTB4M0MKKyNkZWZpbmUgQVBDSTMxMjBfQU1DQ19PUF9SRUdfSU5UQ1NSCTB4MzgKKworLyoKKyAqIEFNQ0MgT3BlcmF0aW9uIFJlZ2lzdGVyIE9mZnNldHMgLSBQQ0kKKyAqLworI2RlZmluZSBBTUNDX09QX1JFR19PTUIxCQkweDAwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjIJCTB4MDQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfT01CMwkJMHgwOAorI2RlZmluZSBBTUNDX09QX1JFR19PTUI0CQkweDBjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjEJCTB4MTAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CMgkJMHgxNAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIzCQkweDE4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjQJCTB4MWMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfRklGTwkJMHgyMAorI2RlZmluZSBBTUNDX09QX1JFR19NV0FSCQkweDI0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX01XVEMJCTB4MjgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTVJBUgkJMHgyYworI2RlZmluZSBBTUNDX09QX1JFR19NUlRDCQkweDMwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01CRUYJCTB4MzQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU5UQ1NSCQkweDM4CisvKiBJTlQgc291cmNlICovCisjZGVmaW5lICBBTUNDX09QX1JFR19JTlRDU1JfU1JDCQkoQU1DQ19PUF9SRUdfSU5UQ1NSICsgMikKKy8qIEZJRk8gY3RybCAqLworI2RlZmluZSAgQU1DQ19PUF9SRUdfSU5UQ1NSX0ZFQwkJKEFNQ0NfT1BfUkVHX0lOVENTUiArIDMpCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01DU1IJCTB4M2MKKy8qIERhdGEgaW4gYnl0ZSAyICovCisjZGVmaW5lICBBTUNDX09QX1JFR19NQ1NSX05WREFUQQkoQU1DQ19PUF9SRUdfTUNTUiArIDIpCisvKiBDb21tYW5kIGluIGJ5dGUgMyAqLworI2RlZmluZSAgQU1DQ19PUF9SRUdfTUNTUl9OVkNNRAkJKEFNQ0NfT1BfUkVHX01DU1IgKyAzKQorCisjZGVmaW5lIEFNQ0NfRklGT19ERVBUSF9EV09SRAk4CisjZGVmaW5lIEFNQ0NfRklGT19ERVBUSF9CWVRFUwkoOCAqIHNpemVvZih1MzIpKQorCisvKgorICogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXJzIFNpemUgLSBQQ0kKKyAqLworI2RlZmluZSBBTUNDX09QX1JFR19TSVpFCSA2NAkvKiBpbiBieXRlcyAqLworCisvKgorICogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXIgT2Zmc2V0cyAtIEFkZC1vbgorICovCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIxCTB4MDAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjIJMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMwkweDA4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUI0CTB4MGMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjEJMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CMgkweDE0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIzCTB4MTgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjQJMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19BRklGTwkweDIwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNV0FSCTB4MjQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQVBUQQkweDI4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FQVEQJMHgyYworI2RlZmluZSBBTUNDX09QX1JFR19BTVJBUgkweDMwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNQkVGCTB4MzQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlOVAkweDM4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FHQ1NUUwkweDNjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNV1RDCTB4NTgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1SVEMJMHg1YworCisvKgorICogQU1DQyAtIEFkZC1vbiBHZW5lcmFsIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQUdDU1RTX0NPTlRST0xfTUFTSwkweGZmZmZmMDAwCisjZGVmaW5lICBBR0NTVFNfTlZfQUNDX01BU0sJMHhlMDAwMDAwMAorI2RlZmluZSAgQUdDU1RTX1JFU0VUX01BU0sJMHgwZTAwMDAwMAorI2RlZmluZSAgQUdDU1RTX05WX0RBX01BU0sJMHgwMGZmMDAwMAorI2RlZmluZSAgQUdDU1RTX0JJU1RfTUFTSwkweDAwMDBmMDAwCisjZGVmaW5lIEFHQ1NUU19TVEFUVVNfTUFTSwkweDAwMDAwMGZmCisjZGVmaW5lICBBR0NTVFNfVENaRVJPX01BU0sJMHgwMDAwMDBjMAorI2RlZmluZSAgQUdDU1RTX0ZJRk9fU1RfTUFTSwkweDAwMDAwMDNmCisKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX01CRkxBR1MJMHgwODAwMDAwMAorI2RlZmluZSBBR0NTVFNfUkVTRVRfUDJBX0ZJRk8JMHgwNDAwMDAwMAorI2RlZmluZSBBR0NTVFNfUkVTRVRfQTJQX0ZJRk8JMHgwMjAwMDAwMAorI2RlZmluZSBBR0NTVFNfUkVTRVRfRklGT1MJKEFHQ1NUU19SRVNFVF9BMlBfRklGTyB8IEFHQ1NUU19SRVNFVF9QMkFfRklGTykKKworI2RlZmluZSBBR0NTVFNfQTJQX1RDT1VOVAkweDAwMDAwMDgwCisjZGVmaW5lIEFHQ1NUU19QMkFfVENPVU5UCTB4MDAwMDAwNDAKKworI2RlZmluZSBBR0NTVFNfRlNfUDJBX0VNUFRZCTB4MDAwMDAwMjAKKyNkZWZpbmUgQUdDU1RTX0ZTX1AyQV9IQUxGCTB4MDAwMDAwMTAKKyNkZWZpbmUgQUdDU1RTX0ZTX1AyQV9GVUxMCTB4MDAwMDAwMDgKKworI2RlZmluZSBBR0NTVFNfRlNfQTJQX0VNUFRZCTB4MDAwMDAwMDQKKyNkZWZpbmUgQUdDU1RTX0ZTX0EyUF9IQUxGCTB4MDAwMDAwMDIKKyNkZWZpbmUgQUdDU1RTX0ZTX0EyUF9GVUxMCTB4MDAwMDAwMDEKKworLyoKKyAqIEFNQ0MgLSBBZGQtb24gSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQUlOVF9JTlRfTUFTSwkJMHgwMGZmMDAwMAorI2RlZmluZSBBSU5UX1NFTF9NQVNLCQkweDAwMDBmZmZmCisjZGVmaW5lICBBSU5UX0lTX0VOU0VMX01BU0sJMHgwMDAwMWYxZgorCisjZGVmaW5lIEFJTlRfSU5UX0FTU0VSVEVECTB4MDA4MDAwMDAKKyNkZWZpbmUgQUlOVF9CTV9FUlJPUgkJMHgwMDIwMDAwMAorI2RlZmluZSBBSU5UX0JJU1RfSU5UCQkweDAwMTAwMDAwCisKKyNkZWZpbmUgQUlOVF9SVF9DT01QTEVURQkweDAwMDgwMDAwCisjZGVmaW5lIEFJTlRfV1RfQ09NUExFVEUJMHgwMDA0MDAwMAorCisjZGVmaW5lIEFJTlRfT1VUX01CX0lOVAkJMHgwMDAyMDAwMAorI2RlZmluZSBBSU5UX0lOX01CX0lOVAkJMHgwMDAxMDAwMAorCisjZGVmaW5lIEFJTlRfUkVBRF9DT01QTAkJMHgwMDAwODAwMAorI2RlZmluZSBBSU5UX1dSSVRFX0NPTVBMCTB4MDAwMDQwMDAKKworI2RlZmluZSBBSU5UX09NQl9FTkFCTEUgCTB4MDAwMDEwMDAKKyNkZWZpbmUgQUlOVF9PTUJfU0VMRUNUIAkweDAwMDAwYzAwCisjZGVmaW5lIEFJTlRfT01CX0JZVEUJCTB4MDAwMDAzMDAKKworI2RlZmluZSBBSU5UX0lNQl9FTkFCTEUgCTB4MDAwMDAwMTAKKyNkZWZpbmUgQUlOVF9JTUJfU0VMRUNUIAkweDAwMDAwMDBjCisjZGVmaW5lIEFJTlRfSU1CX0JZVEUJCTB4MDAwMDAwMDMKKworLyogRW5hYmxlIEJ1cyBNYXN0ZXJpbmcgKi8KKyNkZWZpbmUgRU5fQTJQX1RSQU5TRkVSUwkweDAwMDAwNDAwCisvKiBGSUZPIEZsYWcgUmVzZXQgKi8KKyNkZWZpbmUgUkVTRVRfQTJQX0ZMQUdTCQkweDA0MDAwMDAwTAorLyogRklGTyBSZWxhdGl2ZSBQcmlvcml0eSAqLworI2RlZmluZSBBMlBfSElfUFJJT1JJVFkJCTB4MDAwMDAxMDBMCisvKiBJZGVudGlmeSBJbnRlcnJ1cHQgU291cmNlcyAqLworI2RlZmluZSBBTllfUzU5M1hfSU5UCQkweDAwODAwMDAwTAorI2RlZmluZSBSRUFEX1RDX0lOVAkJMHgwMDA4MDAwMEwKKyNkZWZpbmUgV1JJVEVfVENfSU5UCQkweDAwMDQwMDAwTAorI2RlZmluZSBJTl9NQl9JTlQJCTB4MDAwMjAwMDBMCisjZGVmaW5lIE1BU1RFUl9BQk9SVF9JTlQJMHgwMDEwMDAwMEwKKyNkZWZpbmUgVEFSR0VUX0FCT1JUX0lOVAkweDAwMjAwMDAwTAorI2RlZmluZSBCVVNfTUFTVEVSX0lOVAkJMHgwMDIwMDAwMEwKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBwY2lsc3Rfc3RydWN0IHsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqbmV4dDsKKwlpbnQgdXNlZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXVuc2lnbmVkIHNob3J0IHZlbmRvcjsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2U7CisJdW5zaWduZWQgY2hhciBwY2lfYnVzOworCXVuc2lnbmVkIGNoYXIgcGNpX3Nsb3Q7CisJdW5zaWduZWQgY2hhciBwY2lfZnVuYzsKKwlyZXNvdXJjZV9zaXplX3QgaW9fYWRkcls1XTsKKwl1bnNpZ25lZCBpbnQgaXJxOworfTsKKworLyogcHRyIHRvIHJvb3QgbGlzdCBvZiBhbGwgYW1jYyBkZXZpY2VzICovCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jY19kZXZpY2VzOworCitzdGF0aWMgY29uc3QgaW50IGlfQURESURBVEFEZXZpY2VJRFtdID0geyAweDE1QjgsIDB4MTBFOCB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCB2X3BjaV9jYXJkX2xpc3RfaW5pdCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yLCBjaGFyIGRpc3BsYXkpOwordm9pZCB2X3BjaV9jYXJkX2xpc3RfY2xlYW51cCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yKTsKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfZmluZF9mcmVlX3BjaV9jYXJkX2J5X2RldmljZSh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQKKwkJCQkJCSAgICAgICBkZXZpY2VfaWQpOworaW50IGlfZmluZF9mcmVlX3BjaV9jYXJkX2J5X3Bvc2l0aW9uKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwY2lfc2xvdCwKKwkJCQkgICAgIHN0cnVjdCBwY2lsc3Rfc3RydWN0ICoqY2FyZCk7CitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqcHRyX3NlbGVjdF9hbmRfYWxsb2NfcGNpX2NhcmQodW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBwY2lfYnVzLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCQkJICAgIGludCBpX01hc3Rlcik7CisKK2ludCBwY2lfY2FyZF9hbGxvYyhzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgaW50IG1hc3Rlcik7CitpbnQgaV9wY2lfY2FyZF9mcmVlKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjKTsKK3ZvaWQgdl9wY2lfY2FyZF9saXN0X2Rpc3BsYXkodm9pZCk7CitpbnQgaV9wY2lfY2FyZF9kYXRhKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLAorCQkgICAgdW5zaWduZWQgY2hhciAqcGNpX2J1cywgdW5zaWduZWQgY2hhciAqcGNpX3Nsb3QsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfZnVuYywgcmVzb3VyY2Vfc2l6ZV90ICogaW9fYWRkciwKKwkJICAgIHVuc2lnbmVkIGludCAqaXJxKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGJ1aWxkIGxpc3Qgb2YgYW1jYyBjYXJkcyBpbiB0aGlzIHN5c3RlbSAqLwordm9pZCB2X3BjaV9jYXJkX2xpc3RfaW5pdCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yLCBjaGFyIGRpc3BsYXkpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKmxhc3Q7CisJaW50IGk7CisJaW50IGlfQ291bnQgPSAwOworCWFtY2NfZGV2aWNlcyA9IE5VTEw7CisJbGFzdCA9IE5VTEw7CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCSAgICAgcGNpZGV2ICE9IE5VTEw7CisJICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCWZvciAoaV9Db3VudCA9IDA7IGlfQ291bnQgPCAyOyBpX0NvdW50KyspIHsKKwkJCXBjaV92ZW5kb3IgPSBpX0FERElEQVRBRGV2aWNlSURbaV9Db3VudF07CisJCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gcGNpX3ZlbmRvcikgeworCQkJCWFtY2MgPSBrbWFsbG9jKHNpemVvZigqYW1jYyksIEdGUF9LRVJORUwpOworCQkJCW1lbXNldChhbWNjLCAwLCBzaXplb2YoKmFtY2MpKTsKKworCQkJCWFtY2MtPnBjaWRldiA9IHBjaWRldjsKKwkJCQlpZiAobGFzdCkKKwkJCQkJbGFzdC0+bmV4dCA9IGFtY2M7CisJCQkJZWxzZQorCQkJCQlhbWNjX2RldmljZXMgPSBhbWNjOworCQkJCWxhc3QgPSBhbWNjOworCisJCQkJYW1jYy0+dmVuZG9yID0gcGNpZGV2LT52ZW5kb3I7CisJCQkJYW1jYy0+ZGV2aWNlID0gcGNpZGV2LT5kZXZpY2U7CisJCQkJYW1jYy0+cGNpX2J1cyA9IHBjaWRldi0+YnVzLT5udW1iZXI7CisJCQkJYW1jYy0+cGNpX3Nsb3QgPSBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKTsKKwkJCQlhbWNjLT5wY2lfZnVuYyA9IFBDSV9GVU5DKHBjaWRldi0+ZGV2Zm4pOworCQkJCS8qIE5vdGU6IHJlc291cmNlcyBtYXkgYmUgaW52YWxpZCBpZiBQQ0kgZGV2aWNlCisJCQkJICogbm90IGVuYWJsZWQsIGJ1dCB0aGV5IGFyZSBjb3JyZWN0ZWQgaW4KKwkJCQkgKiBwY2lfY2FyZF9hbGxvYy4gKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQkJCQlhbWNjLT5pb19hZGRyW2ldID0KKwkJCQkJICAgIHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIGkpOworCQkJCWFtY2MtPmlycSA9IHBjaWRldi0+aXJxOworCisJCQl9CisJCX0KKwl9CisKKwlpZiAoZGlzcGxheSkKKwkJdl9wY2lfY2FyZF9saXN0X2Rpc3BsYXkoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmcmVlIHVwIGxpc3Qgb2YgYW1jYyBjYXJkcyBpbiB0aGlzIHN5c3RlbSAqLwordm9pZCB2X3BjaV9jYXJkX2xpc3RfY2xlYW51cCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCWtmcmVlKGFtY2MpOworCX0KKworCWFtY2NfZGV2aWNlcyA9IE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZmluZCBmaXJzdCB1bnVzZWQgY2FyZCB3aXRoIHRoaXMgZGV2aWNlX2lkICovCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqcHRyX2ZpbmRfZnJlZV9wY2lfY2FyZF9ieV9kZXZpY2UodW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCkKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKm5leHQ7CisKKwlmb3IgKGFtY2MgPSBhbWNjX2RldmljZXM7IGFtY2M7IGFtY2MgPSBuZXh0KSB7CisJCW5leHQgPSBhbWNjLT5uZXh0OworCQlpZiAoKCFhbWNjLT51c2VkKSAmJiAoYW1jYy0+ZGV2aWNlID09IGRldmljZV9pZCkKKwkJICAgICYmIChhbWNjLT52ZW5kb3IgPT0gdmVuZG9yX2lkKSkKKwkJCXJldHVybiBhbWNjOworCisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZmluZCBjYXJkIG9uIHJlcXVlc3RlZCBwb3NpdGlvbiAqLworaW50IGlfZmluZF9mcmVlX3BjaV9jYXJkX2J5X3Bvc2l0aW9uKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwY2lfc2xvdCwKKwkJCQkgICAgIHN0cnVjdCBwY2lsc3Rfc3RydWN0ICoqY2FyZCkKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKm5leHQ7CisKKwkqY2FyZCA9IE5VTEw7CisJZm9yIChhbWNjID0gYW1jY19kZXZpY2VzOyBhbWNjOyBhbWNjID0gbmV4dCkgeworCQluZXh0ID0gYW1jYy0+bmV4dDsKKwkJaWYgKChhbWNjLT52ZW5kb3IgPT0gdmVuZG9yX2lkKSAmJiAoYW1jYy0+ZGV2aWNlID09IGRldmljZV9pZCkKKwkJICAgICYmIChhbWNjLT5wY2lfYnVzID09IHBjaV9idXMpCisJCSAgICAmJiAoYW1jYy0+cGNpX3Nsb3QgPT0gcGNpX3Nsb3QpKSB7CisJCQlpZiAoIShhbWNjLT51c2VkKSkgeworCQkJCSpjYXJkID0gYW1jYzsKKwkJCQlyZXR1cm4gMDsJLyogb2ssIGNhcmQgaXMgZm91bmQgKi8KKwkJCX0gZWxzZSB7CisJCQkJcnRfcHJpbnRrKCIgLSBcbkNhcmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uIGlzIHVzZWQgYjpzICVkOiVkIVxuIiwKKwkJCQkJICBwY2lfYnVzLCBwY2lfc2xvdCk7CisJCQkJcmV0dXJuIDI7CS8qIGNhcmQgZXhpc3QgYnV0IGlzIHVzZWQgKi8KKwkJCX0KKwkJfQorCX0KKworCS8qIG5vIGNhcmQgZm91bmQgKi8KKwlyZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBtYXJrIGNhcmQgYXMgdXNlZCAqLworaW50IHBjaV9jYXJkX2FsbG9jKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCBpbnQgbWFzdGVyKQoreworCWludCBpOworCisJaWYgKCFhbWNjKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYW1jYy0+dXNlZCkKKwkJcmV0dXJuIDE7CisJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKGFtY2MtPnBjaWRldiwgImFkZGlfYW1jY19zNTkzMyIpKQorCQlyZXR1cm4gLTE7CisJLyogUmVzb3VyY2VzIHdpbGwgYmUgYWNjdXJhdGUgbm93LiAqLworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWFtY2MtPmlvX2FkZHJbaV0gPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYW1jYy0+cGNpZGV2LCBpKTsKKwlpZiAobWFzdGVyKQorCQlwY2lfc2V0X21hc3RlcihhbWNjLT5wY2lkZXYpOworCWFtY2MtPnVzZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbWFyayBjYXJkIGFzIGZyZWUgKi8KK2ludCBpX3BjaV9jYXJkX2ZyZWUoc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MpCit7CisJaWYgKCFhbWNjKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWFtY2MtPnVzZWQpCisJCXJldHVybiAxOworCWFtY2MtPnVzZWQgPSAwOworCWNvbWVkaV9wY2lfZGlzYWJsZShhbWNjLT5wY2lkZXYpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGRpc3BsYXkgbGlzdCBvZiBmb3VuZCBjYXJkcyAqLwordm9pZCB2X3BjaV9jYXJkX2xpc3RfZGlzcGxheSh2b2lkKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCXByaW50ayhLRVJOX0RFQlVHICJMaXN0IG9mIHBjaSBjYXJkc1xuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImJ1czpzbG90OmZ1bmMgdmVuZG9yIGRldmljZSBpb19hbWNjIGlvX2RhcSBpcnEgdXNlZFxuIik7CisKKwlmb3IgKGFtY2MgPSBhbWNjX2RldmljZXM7IGFtY2M7IGFtY2MgPSBuZXh0KSB7CisJCW5leHQgPSBhbWNjLT5uZXh0OworCQlwcmludGsKKwkJICAgICgiJTJkICAgJTJkICAgJTJkICAweCU0eCAweCU0eCAgIDB4JThsbHggMHglOGxseCAgJTJ1ICAlMmRcbiIsCisJCSAgICAgYW1jYy0+cGNpX2J1cywgYW1jYy0+cGNpX3Nsb3QsIGFtY2MtPnBjaV9mdW5jLAorCQkgICAgIGFtY2MtPnZlbmRvciwgYW1jYy0+ZGV2aWNlLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYW1jYy0+aW9fYWRkclswXSwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFtY2MtPmlvX2FkZHJbMl0sIGFtY2MtPmlycSwKKwkJICAgICBhbWNjLT51c2VkKTsKKworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiByZXR1cm4gYWxsIGNhcmQgaW5mb3JtYXRpb24gZm9yIGRyaXZlciAqLworaW50IGlfcGNpX2NhcmRfZGF0YShzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywKKwkJICAgIHVuc2lnbmVkIGNoYXIgKnBjaV9idXMsIHVuc2lnbmVkIGNoYXIgKnBjaV9zbG90LAorCQkgICAgdW5zaWduZWQgY2hhciAqcGNpX2Z1bmMsIHJlc291cmNlX3NpemVfdCAqIGlvX2FkZHIsCisJCSAgICB1bnNpZ25lZCBpbnQgKmlycSkKK3sKKwlpbnQgaTsKKworCWlmICghYW1jYykKKwkJcmV0dXJuIC0xOworCSpwY2lfYnVzID0gYW1jYy0+cGNpX2J1czsKKwkqcGNpX3Nsb3QgPSBhbWNjLT5wY2lfc2xvdDsKKwkqcGNpX2Z1bmMgPSBhbWNjLT5wY2lfZnVuYzsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlpb19hZGRyW2ldID0gYW1jYy0+aW9fYWRkcltpXTsKKwkqaXJxID0gYW1jYy0+aXJxOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHNlbGVjdCBhbmQgYWxsb2MgY2FyZCAqLworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKnB0cl9zZWxlY3RfYW5kX2FsbG9jX3BjaV9jYXJkKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBwY2lfc2xvdCwKKwkJCQkJCSAgICBpbnQgaV9NYXN0ZXIpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmNhcmQ7CisKKwlpZiAoKHBjaV9idXMgPCAxKSAmIChwY2lfc2xvdCA8IDEpKSB7CisJCS8qIHVzZSBhdXRvZGV0ZWN0aW9uICovCisJCWNhcmQgPSBwdHJfZmluZF9mcmVlX3BjaV9jYXJkX2J5X2RldmljZSh2ZW5kb3JfaWQsIGRldmljZV9pZCk7CisJCWlmIChjYXJkID09IE5VTEwpIHsKKwkJCXJ0X3ByaW50aygiIC0gVW51c2VkIGNhcmQgbm90IGZvdW5kIGluIHN5c3RlbSFcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGlfZmluZF9mcmVlX3BjaV9jYXJkX2J5X3Bvc2l0aW9uKHZlbmRvcl9pZCwgZGV2aWNlX2lkLAorCQkJCQkJCSBwY2lfYnVzLCBwY2lfc2xvdCwKKwkJCQkJCQkgJmNhcmQpKSB7CisJCWNhc2UgMToKKwkJCXJ0X3ByaW50aygiIC0gQ2FyZCBub3QgZm91bmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uIGI6cyAlZDolZCFcbiIsCisJCQkJICBwY2lfYnVzLCBwY2lfc2xvdCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJY2FzZSAyOgorCQkJcnRfcHJpbnRrKCIgLSBDYXJkIG9uIHJlcXVlc3RlZCBwb3NpdGlvbiBpcyB1c2VkIGI6cyAlZDolZCFcbiIsCisJCQkJICBwY2lfYnVzLCBwY2lfc2xvdCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWlmIChwY2lfY2FyZF9hbGxvYyhjYXJkLCBpX01hc3RlcikgIT0gMCkgeworCQlydF9wcmludGsoIiAtIENhbid0IGFsbG9jYXRlIGNhcmQhXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisKKwl9CisKKwlyZXR1cm4gY2FyZDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOGM2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMKQEAgLTAsMCArMSwzMDYyIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmFzc2UgMyAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICA6IEFEREkgREFUQSAgICAgICAgIHwgQ29tcGlsZXIgOiBHQ0MgCQkgICAgICAgICAgfAorICB8IE1vZHVsbmFtZSA6IGFkZGlfY29tbW9uLmMgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBBdXRob3IgICAgOiAgICAgICAgICAgfCBEYXRlICAgICA6ICAgICAgICAgICAgICAgICAgICAJCSAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiBBRERJIENPTU1PTiBNYWluIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IENPTkZJRyBPUFRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJb3B0aW9uWzBdIC0gUENJIGJ1cyBudW1iZXIgLSBpZiBidXMgbnVtYmVyIGFuZCBzbG90IG51bWJlciBhcmUgMCwgfAorICB8CQkJICAgICAgICAgdGhlbiBkcml2ZXIgc2VhcmNoIGZvciBmaXJzdCB1bnVzZWQgY2FyZCB8CisgIHwJb3B0aW9uWzFdIC0gUENJIHNsb3QgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJCQkJCSAgICAgICAgICAgICAgICAgIHwKKyAgfAlvcHRpb25bMl0gPSAwICAtIERNQSBFTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICA9IDEgIC0gRE1BIERJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICIuLi8uLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpZiBkZWZpbmVkKENPTkZJR19BUENJXzE3MTApIHx8IGRlZmluZWQoQ09ORklHX0FQQ0lfMzIwMCkgfHwgZGVmaW5lZChDT05GSUdfQVBDSV8zMzAwKQorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisjZW5kaWYKKyNpbmNsdWRlICIuLi9jb21lZGlfZmMuaCIKKworI2luY2x1ZGUgImFkZGlfY29tbW9uLmgiCisjaW5jbHVkZSAiYWRkaV9hbWNjX3M1OTMzLmgiCisKKy8vVXBkYXRlLTAuNy41Ny0+MC43LjY4TU9EVUxFX0FVVEhPUigiQURESS1EQVRBIEdtYkggPGluZm9AYWRkaS1kYXRhLmNvbT4iKTsKKy8vVXBkYXRlLTAuNy41Ny0+MC43LjY4TU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgQURESS1EQVRBIG1vZHVsZSIpOworLy9VcGRhdGUtMC43LjU3LT4wLjcuNjhNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgZGV2cHJpdiAoKGFkZGlfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGJvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCisjaWYgZGVmaW5lZChDT05GSUdfQVBDSV8xNzEwKSB8fCBkZWZpbmVkKENPTkZJR19BUENJXzMyMDApIHx8IGRlZmluZWQoQ09ORklHX0FQQ0lfMzMwMCkKKy8vQllURSBiX1NhdmVGUFVSZWcgWzk0XTsKKwordm9pZCBmcHVfYmVnaW4odm9pZCkKK3sKKwkvL2FzbSAoImZzdGVudiBiX1NhdmVGUFVSZWciKTsKKwlrZXJuZWxfZnB1X2JlZ2luKCk7Cit9CisKK3ZvaWQgZnB1X2VuZCh2b2lkKQoreworCS8vIGFzbSAoImZyc3RvciBiX1NhdmVGUFVSZWciKTsKKwlrZXJuZWxfZnB1X2VuZCgpOworfQorI2VuZGlmCisKKyNpbmNsdWRlICJhZGRpX2VlcHJvbS5jIgorI2lmIChkZWZpbmVkIChDT05GSUdfQVBDSV8zMTIwKSB8fCBkZWZpbmVkIChDT05GSUdfQVBDSV8zMDAxKSkKKyNpbmNsdWRlICJod2Rydl9hcGNpMzEyMC5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTAzMgorI2luY2x1ZGUgImh3ZHJ2X2FwY2kxMDMyLmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNTE2CisjaW5jbHVkZSAiaHdkcnZfYXBjaTE1MTYuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzIwMTYKKyNpbmNsdWRlICJod2Rydl9hcGNpMjAxNi5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMjAzMgorI2luY2x1ZGUgImh3ZHJ2X2FwY2kyMDMyLmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMjAwCisjaW5jbHVkZSAiaHdkcnZfYXBjaTIyMDAuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE1NjQKKyNpbmNsdWRlICJod2Rydl9hcGNpMTU2NC5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTUwMAorI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNTAwLmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zNTAxCisjaW5jbHVkZSAiaHdkcnZfYXBjaTM1MDEuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzAzNQorI2luY2x1ZGUgImh3ZHJ2X2FwY2kwMzUuYyIKKyNlbmRpZgorI2lmIChkZWZpbmVkIChDT05GSUdfQVBDSV8zMjAwKSB8fCBkZWZpbmVkIChDT05GSUdfQVBDSV8zMzAwKSkKKyNpbmNsdWRlICJod2Rydl9hcGNpMzIwMC5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTcxMAorI2luY2x1ZGUgImh3ZHJ2X0FQQ0kxNzEwLmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNlhYCisjaW5jbHVkZSAiaHdkcnZfYXBjaTE2eHguYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzNYWFgKKyNpbmNsdWRlICJod2Rydl9hcGNpM3h4eC5jIgorI2VuZGlmCisKKyNpZm5kZWYgQ09NRURJX1NVQkRfVFRMSU8KKyNkZWZpbmUgQ09NRURJX1NVQkRfVFRMSU8gICAxMQkvKiBEaWdpdGFsIElucHV0IE91dHB1dCBCdXQgVFRMICovCisjZW5kaWYKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGFkZGlfYXBjaV90YmwpID0geworI2lmZGVmIENPTkZJR19BUENJXzMxMjAKKwl7QVBDSTMxMjBfQk9BUkRfVkVORE9SX0lELCAweDgxOEQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTAzMgorCXtBUENJMTAzMl9CT0FSRF9WRU5ET1JfSUQsIDB4MTAwMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNTE2CisJe0FQQ0kxNTE2X0JPQVJEX1ZFTkRPUl9JRCwgMHgxMDAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzIwMTYKKwl7QVBDSTIwMTZfQk9BUkRfVkVORE9SX0lELCAweDEwMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMjAzMgorCXtBUENJMjAzMl9CT0FSRF9WRU5ET1JfSUQsIDB4MTAwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMjAwCisJe0FQQ0kyMjAwX0JPQVJEX1ZFTkRPUl9JRCwgMHgxMDA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE1NjQKKwl7QVBDSTE1NjRfQk9BUkRfVkVORE9SX0lELCAweDEwMDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTUwMAorCXtBUENJMTUwMF9CT0FSRF9WRU5ET1JfSUQsIDB4ODBmYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMDAxCisJe0FQQ0kzMTIwX0JPQVJEX1ZFTkRPUl9JRCwgMHg4MjhELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzM1MDEKKwl7QVBDSTM1MDFfQk9BUkRfVkVORE9SX0lELCAweDMwMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMDM1CisJe0FQQ0kwMzVfQk9BUkRfVkVORE9SX0lELCAweDAzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMzIwMAorCXtBUENJMzIwMF9CT0FSRF9WRU5ET1JfSUQsIDB4MzAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMzAwCisJe0FQQ0kzMjAwX0JPQVJEX1ZFTkRPUl9JRCwgMHgzMDA3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE3MTAKKwl7QVBDSTE3MTBfQk9BUkRfVkVORE9SX0lELCBBUENJMTcxMF9CT0FSRF9ERVZJQ0VfSUQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTZYWAorCXsweDE1QjgsIDB4MTAwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgxMDBBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzNYWFgKKwl7MHgxNUI4LCAweDMwMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAwRiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDBFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDE4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxQSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDFCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMUMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDFFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMUYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAyMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDBCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAwMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDA0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWRkaV9hcGNpX3RibCk7CisKK3N0YXRpYyBjb25zdCBib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0geworI2lmZGVmIENPTkZJR19BUENJXzMxMjAKKwl7ImFwY2kzMTIwIiwKKwkJCUFQQ0kzMTIwX0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4ODE4RCwKKwkJCUFNQ0NfT1BfUkVHX1NJWkUsCisJCQlBUENJMzEyMF9BRERSRVNTX1JBTkdFLAorCQkJOCwKKwkJCTAsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlOVUxMLAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQk4LAorCQkJMHhmZmZmLAorCQkJMHgzZmZmLAorCQkJJnJhbmdlX2FwY2kzMTIwX2FpLAorCQkJJnJhbmdlX2FwY2kzMTIwX2FvLAorCQkJNCwKKwkJCTQsCisJCQkweDBmLAorCQkJMCwKKwkJCU5VTEwsCisJCQkxLAorCQkJMSwKKwkJCTEsCisJCQkxMDAwMCwKKwkJCTEwMDAwMCwKKwkJCXZfQVBDSTMxMjBfSW50ZXJydXB0LAorCQkJaV9BUENJMzEyMF9SZXNldCwKKwkJCWlfQVBDSTMxMjBfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJMzEyMF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMTIwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMTIwX0NvbW1hbmRBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMTIwX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kzMTIwX0luc25Db25maWdEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMzEyMF9JbnNuQ29uZmlnVGltZXIsCisJCQlpX0FQQ0kzMTIwX0luc25Xcml0ZVRpbWVyLAorCQkJaV9BUENJMzEyMF9JbnNuUmVhZFRpbWVyLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xMDMyCisJeyJhcGNpMTAzMiIsCisJCQlBUENJMTAzMl9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDEwMDMsCisJCQk0LAorCQkJQVBDSTEwMzJfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfOTNDNzYsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTMyLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJdl9BUENJMTAzMl9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kxMDMyX1Jlc2V0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTEwMzJfQ29uZmlnRGlnaXRhbElucHV0LAorCQkJaV9BUENJMTAzMl9SZWFkMURpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxMDMyX1JlYWRNb3JlRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTUxNgorCXsiYXBjaTE1MTYiLAorCQkJQVBDSTE1MTZfQk9BUkRfVkVORE9SX0lELAorCQkJMHgxMDAxLAorCQkJMTI4LAorCQkJQVBDSTE1MTZfQUREUkVTU19SQU5HRSwKKwkJCTMyLAorCQkJMCwKKwkJCUFERElEQVRBX0VFUFJPTSwKKwkJCUFERElEQVRBX1M1OTIwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQk4LAorCQkJOCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCWlfQVBDSTE1MTZfUmVzZXQsCisJCQlOVUxMLCBOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTUxNl9SZWFkMURpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNTE2X1JlYWRNb3JlRGlnaXRhbElucHV0LAorCQkJaV9BUENJMTUxNl9Db25maWdEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMTUxNl9Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kxNTE2X1JlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTE1MTZfQ29uZmlnV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTE2X1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTE2X1JlYWRXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMjAxNgorCXsiYXBjaTIwMTYiLAorCQkJQVBDSTIwMTZfQk9BUkRfVkVORE9SX0lELAorCQkJMHgxMDAyLAorCQkJMTI4LAorCQkJQVBDSTIwMTZfQUREUkVTU19SQU5HRSwKKwkJCTMyLAorCQkJMCwKKwkJCUFERElEQVRBX0VFUFJPTSwKKwkJCUFERElEQVRBX1M1OTIwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMTYsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMSwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kyMDE2X1Jlc2V0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kyMDE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kyMDE2X1dyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTIwMTZfQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMjAxNl9Db25maWdXYXRjaGRvZywKKwkJCWlfQVBDSTIwMTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZywKKwkJCWlfQVBDSTIwMTZfUmVhZFdhdGNoZG9nLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMDMyCisJeyJhcGNpMjAzMiIsCisJCQlBUENJMjAzMl9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDEwMDQsCisJCQk0LAorCQkJQVBDSTIwMzJfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfOTNDNzYsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTAsCisJCQkzMiwKKwkJCTB4ZmZmZmZmZmYsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJdl9BUENJMjAzMl9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kyMDMyX1Jlc2V0LAorCQkJTlVMTCwgTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTIwMzJfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTIwMzJfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjAzMl9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTIwMzJfUmVhZEludGVycnVwdFN0YXR1cywKKwkJCWlfQVBDSTIwMzJfQ29uZmlnV2F0Y2hkb2csCisJCQlpX0FQQ0kyMDMyX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2csCisJCQlpX0FQQ0kyMDMyX1JlYWRXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMjIwMAorCXsiYXBjaTIyMDAiLAorCQkJQVBDSTIyMDBfQk9BUkRfVkVORE9SX0lELAorCQkJMHgxMDA1LAorCQkJNCwKKwkJCUFQQ0kyMjAwX0FERFJFU1NfUkFOR0UsCisJCQkwLAorCQkJMCwKKwkJCUFERElEQVRBX0VFUFJPTSwKKwkJCUFERElEQVRBXzkzQzc2LAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQk4LAorCQkJMTYsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMSwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kyMjAwX1Jlc2V0LAorCQkJTlVMTCwgTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTIyMDBfUmVhZDFEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMjIwMF9SZWFkTW9yZURpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTIyMDBfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTIyMDBfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjIwMF9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kyMjAwX0NvbmZpZ1dhdGNoZG9nLAorCQkJaV9BUENJMjIwMF9TdGFydFN0b3BXcml0ZVdhdGNoZG9nLAorCQkJaV9BUENJMjIwMF9SZWFkV2F0Y2hkb2csCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE1NjQKKwl7ImFwY2kxNTY0IiwKKwkJCUFQQ0kxNTY0X0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MTAwNiwKKwkJCTEyOCwKKwkJCUFQQ0kxNTY0X0FERFJFU1NfUkFOR0UsCisJCQkwLAorCQkJMCwKKwkJCUFERElEQVRBX0VFUFJPTSwKKwkJCUFERElEQVRBXzkzQzc2LAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQkzMiwKKwkJCTMyLAorCQkJMHhmZmZmZmZmZiwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQl2X0FQQ0kxNTY0X0ludGVycnVwdCwKKwkJCWlfQVBDSTE1NjRfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTU2NF9Db25maWdEaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kxNTY0X1JlYWQxRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTE1NjRfUmVhZE1vcmVEaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kxNTY0X0NvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kxNTY0X1dyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1NjRfUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kxNTY0X1JlYWRJbnRlcnJ1cHRTdGF0dXMsCisJCQlpX0FQQ0kxNTY0X0NvbmZpZ1RpbWVyQ291bnRlcldhdGNoZG9nLAorCQkJaV9BUENJMTU2NF9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nLAorCQkJaV9BUENJMTU2NF9SZWFkVGltZXJDb3VudGVyV2F0Y2hkb2csCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE1MDAKKwl7ImFwY2kxNTAwIiwKKwkJCUFQQ0kxNTAwX0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4ODBmYywKKwkJCTEyOCwKKwkJCUFQQ0kxNTAwX0FERFJFU1NfUkFOR0UsCisJCQk0LAorCQkJMCwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTE2LAorCQkJMTYsCisJCQkweGZmZmYsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJdl9BUENJMTUwMF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kxNTAwX1Jlc2V0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbElucHV0RXZlbnQsCisJCQlpX0FQQ0kxNTAwX0luaXRpYWxpc2F0aW9uLAorCQkJaV9BUENJMTUwMF9TdGFydFN0b3BJbnB1dEV2ZW50LAorCQkJaV9BUENJMTUwMF9SZWFkTW9yZURpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbE91dHB1dEVycm9ySW50ZXJydXB0LAorCQkJaV9BUENJMTUwMF9Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kxNTAwX0NvbmZpZ3VyZUludGVycnVwdCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNTAwX0NvbmZpZ0NvdW50ZXJUaW1lcldhdGNoZG9nLAorCQkJaV9BUENJMTUwMF9TdGFydFN0b3BUcmlnZ2VyVGltZXJDb3VudGVyV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTAwX1JlYWRJbnRlcnJ1cHRNYXNrLAorCQkJaV9BUENJMTUwMF9SZWFkQ291bnRlclRpbWVyV2F0Y2hkb2csCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMzAwMQorCXsiYXBjaTMwMDEiLAorCQkJQVBDSTMxMjBfQk9BUkRfVkVORE9SX0lELAorCQkJMHg4MjhELAorCQkJQU1DQ19PUF9SRUdfU0laRSwKKwkJCUFQQ0kzMTIwX0FERFJFU1NfUkFOR0UsCisJCQk4LAorCQkJMCwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCU5VTEwsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTAsCisJCQkweGZmZiwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTMxMjBfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkweDBmLAorCQkJMCwKKwkJCU5VTEwsCisJCQkxLAorCQkJMSwKKwkJCTEsCisJCQkxMDAwMCwKKwkJCTEwMDAwMCwKKwkJCXZfQVBDSTMxMjBfSW50ZXJydXB0LAorCQkJaV9BUENJMzEyMF9SZXNldCwKKwkJCWlfQVBDSTMxMjBfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJMzEyMF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMTIwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMTIwX0NvbW1hbmRBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTMxMjBfSW5zbkNvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMTIwX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMTIwX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMTIwX0luc25Db25maWdUaW1lciwKKwkJCWlfQVBDSTMxMjBfSW5zbldyaXRlVGltZXIsCisJCQlpX0FQQ0kzMTIwX0luc25SZWFkVGltZXIsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzM1MDEKKwl7ImFwY2kzNTAxIiwKKwkJCUFQQ0kzNTAxX0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MzAwMSwKKwkJCTY0LAorCQkJQVBDSTM1MDFfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfUzU5MzMsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQk4LAorCQkJMCwKKwkJCTE2MzgzLAorCQkJTlVMTCwKKwkJCSZyYW5nZV9hcGNpMzUwMV9hbywKKwkJCTIsCisJCQkyLAorCQkJMHgzLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMSwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCXZfQVBDSTM1MDFfSW50ZXJydXB0LAorCQkJaV9BUENJMzUwMV9SZXNldCwKKwkJCU5VTEwsIE5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTM1MDFfQ29uZmlnQW5hbG9nT3V0cHV0LAorCQkJaV9BUENJMzUwMV9Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzNTAxX1JlYWREaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kzNTAxX0NvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzNTAxX1dyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTM1MDFfUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMzUwMV9Db25maWdUaW1lckNvdW50ZXJXYXRjaGRvZywKKwkJCWlfQVBDSTM1MDFfU3RhcnRTdG9wV3JpdGVUaW1lckNvdW50ZXJXYXRjaGRvZywKKwkJCWlfQVBDSTM1MDFfUmVhZFRpbWVyQ291bnRlcldhdGNoZG9nLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8wMzUKKwl7ImFwY2kwMzUiLAorCQkJQVBDSTAzNV9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDAzMDAsCisJCQkxMjcsCisJCQlBUENJMDM1X0FERFJFU1NfUkFOR0UsCisJCQkwLAorCQkJMCwKKwkJCTEsCisJCQlBRERJREFUQV9TNTkyMCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTB4ZmYsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kwMzVfYWksCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMSwKKwkJCTAsCisJCQkxMDAwMCwKKwkJCTEwMDAwMCwKKwkJCXZfQVBDSTAzNV9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kwMzVfUmVzZXQsCisJCQlpX0FQQ0kwMzVfQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kwMzVfUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTAzNV9Db25maWdUaW1lcldhdGNoZG9nLAorCQkJaV9BUENJMDM1X1N0YXJ0U3RvcFdyaXRlVGltZXJXYXRjaGRvZywKKwkJCWlfQVBDSTAzNV9SZWFkVGltZXJXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMzIwMAorCXsiYXBjaTMyMDAiLAorCQkJQVBDSTMyMDBfQk9BUkRfVkVORE9SX0lELAorCQkJMHgzMDAwLAorCQkJMTI4LAorCQkJMjU2LAorCQkJNCwKKwkJCTQsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV9TNTkyMCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTB4M2ZmZmYsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzMjAwX2FpLAorCQkJTlVMTCwKKwkJCTQsCisJCQk0LAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMTAwMDAsCisJCQkxMDAwMDAsCisJCQl2X0FQQ0kzMjAwX0ludGVycnVwdCwKKwkJCWlfQVBDSTMyMDBfUmVzZXQsCisJCQlpX0FQQ0kzMjAwX0NvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9SZWFkQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX0luc25Xcml0ZVJlbGVhc2VBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfSW5zbkJpdHNfQW5hbG9nSW5wdXRfVGVzdCwKKwkJCWlfQVBDSTMyMDBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfQ29tbWFuZEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24sCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMjAwX1JlYWREaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kzMjAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMjAwX1dyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTMyMDBfUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMzAwCisJLy9CZWdpbiBKSyAyMC4xMC4yMDA0OiBBUENJLTMzMDAgaW50ZWdyYXRpb24KKwl7ImFwY2kzMzAwIiwKKwkJCUFQQ0kzMjAwX0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MzAwNywKKwkJCTEyOCwKKwkJCTI1NiwKKwkJCTQsCisJCQk0LAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfUzU5MjAsCisJCQkwLAorCQkJOCwKKwkJCTgsCisJCQkwLAorCQkJMHgzZmZmZiwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTMzMDBfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkxMDAwMCwKKwkJCTEwMDAwMCwKKwkJCXZfQVBDSTMyMDBfSW50ZXJydXB0LAorCQkJaV9BUENJMzIwMF9SZXNldCwKKwkJCWlfQVBDSTMyMDBfQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX1JlYWRBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfSW5zbldyaXRlUmVsZWFzZUFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9JbnNuQml0c19BbmFsb2dJbnB1dF9UZXN0LAorCQkJaV9BUENJMzIwMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9Db21tYW5kQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbiwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMyMDBfUmVhZERpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTMyMDBfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTMyMDBfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzIwMF9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE3MTAKKwl7ImFwY2kxNzEwIiwgQVBDSTE3MTBfQk9BUkRfVkVORE9SX0lELCBBUENJMTcxMF9CT0FSRF9ERVZJQ0VfSUQsCisJCQkxMjgsCisJCQk4LAorCQkJMjU2LAorCQkJMCwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQl2X0FQQ0kxNzEwX0ludGVycnVwdCwKKwkJCWlfQVBDSTE3MTBfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE2WFgKKwl7ImFwY2kxNjQ4IiwKKwkJCTB4MTVCOCwKKwkJCTB4MTAwOSwKKwkJCTEyOCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTQ4LAorCQkJJnJhbmdlX2FwY2kxNnh4X3R0bCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCWlfQVBDSTE2WFhfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTZYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJMTZYWF9JbnNuQml0c1JlYWRUVExJTywKKwkJCWlfQVBDSTE2WFhfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZSwKKwkJaV9BUENJMTZYWF9JbnNuQml0c1dyaXRlVFRMSU99LAorCisJeyJhcGNpMTY5NiIsCisJCQkweDE1QjgsCisJCQkweDEwMEEsCisJCQkxMjgsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQk5NiwKKwkJCSZyYW5nZV9hcGNpMTZ4eF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNlhYX1Jlc2V0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTE2WFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTE2WFhfSW5zbkJpdHNSZWFkVFRMSU8sCisJCQlpX0FQQ0kxNlhYX0luc25SZWFkVFRMSU9BbGxQb3J0VmFsdWUsCisJCWlfQVBDSTE2WFhfSW5zbkJpdHNXcml0ZVRUTElPfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzNYWFgKKwl7ImFwY2kzMDAwLTE2IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxMCwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTAsCisJCQk0MDk1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDAtOCIsCisJCQkweDE1QjgsCisJCQkweDMwMEYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJMCwKKwkJCTQwOTUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTEwMDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzAwMC00IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAwRSwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQk0LAorCQkJMiwKKwkJCTQsCisJCQkwLAorCQkJNDA5NSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDA2LTE2IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxMywKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDA2LTgiLAorCQkJMHgxNUI4LAorCQkJMHgzMDE0LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTgsCisJCQk0LAorCQkJOCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDA2LTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDE1LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTQsCisJCQkyLAorCQkJNCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDEwLTE2IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxNiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTAsCisJCQk0MDk1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTAtOCIsCisJCQkweDE1QjgsCisJCQkweDMwMTcsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJMCwKKwkJCTQwOTUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzAxMC00IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxOCwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQk0LAorCQkJMiwKKwkJCTQsCisJCQkwLAorCQkJNDA5NSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDE2LTE2IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxOSwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDE2LTgiLAorCQkJMHgxNUI4LAorCQkJMHgzMDFBLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTgsCisJCQk0LAorCQkJOCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDE2LTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDFCLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTQsCisJCQkyLAorCQkJNCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTAwLTE2LTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDFDLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJNCwKKwkJCTQwOTUsCisJCQk0MDk1LAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FvLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzEwMC04LTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDFELAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTgsCisJCQk0LAorCQkJOCwKKwkJCTQsCisJCQk0MDk1LAorCQkJNDA5NSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9hbywKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTEwMDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMxMDYtMTYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUUsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQk0LAorCQkJNjU1MzUsCisJCQk0MDk1LAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FvLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzEwNi04LTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDFGLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTgsCisJCQk0LAorCQkJOCwKKwkJCTQsCisJCQk2NTUzNSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTEwLTE2LTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDIwLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJNCwKKwkJCTQwOTUsCisJCQk0MDk1LAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FvLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzExMC04LTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDIxLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTgsCisJCQk0LAorCQkJOCwKKwkJCTQsCisJCQk0MDk1LAorCQkJNDA5NSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9hbywKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMxMTYtMTYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMjIsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQk0LAorCQkJNjU1MzUsCisJCQk0MDk1LAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FvLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzExNi04LTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDIzLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTgsCisJCQk0LAorCQkJOCwKKwkJCTQsCisJCQk2NTUzNSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDAzIiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAwQiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkwLAorCQkJNCwKKwkJCTQsCisJCQkwLAorCQkJNjU1MzUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQk3LAorCQkJMjUwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKworCXsiYXBjaTMwMDItMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDAyLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTAsCisJCQkxNiwKKwkJCTE2LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisKKwl7ImFwY2kzMDAyLTgiLAorCQkJMHgxNUI4LAorCQkJMHgzMDAzLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTAsCisJCQk4LAorCQkJOCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorCisJeyJhcGNpMzAwMi00IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAwNCwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkwLAorCQkJNCwKKwkJCTQsCisJCQkwLAorCQkJNjU1MzUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKworCXsiYXBjaTM1MDAiLAorCQkJMHgxNUI4LAorCQkJMHgzMDI0LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTQsCisJCQkwLAorCQkJNDA5NSwKKwkJCU5VTEwsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKyNlbmRpZgorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2YoYm9hcmR0eXBlKSkKKworc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FkZGkgPSB7CisgICAgICBkcml2ZXJfbmFtZToiYWRkaV9jb21tb24iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmlfQURESV9BdHRhY2gsCisgICAgICBkZXRhY2g6aV9BRERJX0RldGFjaCwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLnBjX0RyaXZlck5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKGJvYXJkdHlwZSksCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hZGRpLCBhZGRpX2FwY2lfdGJsKTsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6c3RhdGljIGludCBpX0FERElfQXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICAgICAgICAgfAorfAkJCQkJCQkJCQlzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOkRldGVjdHMgdGhlIGNhcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgCQkJIENvbmZpZ3VyZSB0aGUgZHJpdmVyIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICAgICAgICAgICAgfAorfCAgCQkJIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgdGhlIGluaXRpYWxpemF0aW9ucyBhbmQgbWVtb3J5ICAgfAorfAkJCSBhbGxvY2F0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGRyaXZlci4JICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDpzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK3N0YXRpYyBpbnQgaV9BRERJX0F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0LCBwYWdlcywgaSwgbl9zdWJkZXZpY2VzOworCURXT1JEIGR3X0R1bW15OworCXJlc291cmNlX3NpemVfdCBpb19hZGRyWzVdOworCXVuc2lnbmVkIGludCBpcnE7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZV9hLCBpb2Jhc2VfbWFpbiwgaW9iYXNlX2FkZG9uLCBpb2Jhc2VfcmVzZXJ2ZWQ7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmNhcmQgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jOworCWludCBpX0RtYSA9IDA7CisJc3RhdGljIGNoYXIgY19JZGVudGlmaWVyWzE1MF07CisKKwlzcHJpbnRmKGNfSWRlbnRpZmllciwgIkFkZGktRGF0YSBHbWJIIENvbWVkaSAlcyIsCisJCXRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUpOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKGFkZGlfcHJpdmF0ZSkpKSA8IDApIHsKKwkgIAlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoIXBjaV9saXN0X2J1aWxkZWQpIHsKKwkJdl9wY2lfY2FyZF9saXN0X2luaXQodGhpc19ib2FyZC0+aV9WZW5kb3JJZCwgMSk7CS8vMSBmb3IgZGlzcGxheWluZyB0aGUgbGlzdC4uCisJCXBjaV9saXN0X2J1aWxkZWQgPSAxOworCX0KKwkvL3J0X3ByaW50aygiY29tZWRpJWQ6IGFkZGlfY29tbW9uOiBib2FyZD0lcyIsZGV2LT5taW5vcix0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lKTsKKworCWlmICgodGhpc19ib2FyZC0+aV9EbWEpICYmIChpdC0+b3B0aW9uc1syXSA9PSAwKSkgeworCQlpX0RtYSA9IDE7CisJfQorCisJaWYgKChjYXJkID0gcHRyX3NlbGVjdF9hbmRfYWxsb2NfcGNpX2NhcmQodGhpc19ib2FyZC0+aV9WZW5kb3JJZCwKKwkJCQl0aGlzX2JvYXJkLT5pX0RldmljZUlkLAorCQkJCWl0LT5vcHRpb25zWzBdLAorCQkJCWl0LT5vcHRpb25zWzFdLCBpX0RtYSkpID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldnByaXYtPmFsbG9jYXRlZCA9IDE7CisKKwlpZiAoKGlfcGNpX2NhcmRfZGF0YShjYXJkLCAmcGNpX2J1cywgJnBjaV9zbG90LCAmcGNpX2Z1bmMsICZpb19hZGRyWzBdLAorCQkJCSZpcnEpKSA8IDApIHsKKwkJaV9wY2lfY2FyZF9mcmVlKGNhcmQpOworCQlwcmludGsoIiAtIENhbid0IGdldCBBTUNDIGRhdGEhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaW9iYXNlX2EgPSBpb19hZGRyWzBdOworCWlvYmFzZV9tYWluID0gaW9fYWRkclsxXTsKKwlpb2Jhc2VfYWRkb24gPSBpb19hZGRyWzJdOworCWlvYmFzZV9yZXNlcnZlZCA9IGlvX2FkZHJbM107CisJcHJpbnRrKCJcbkJ1cyAlZDogU2xvdCAlZDogRnVuY3QlZFxuQmFzZTA6IDB4JThsbHhcbkJhc2UxOiAweCU4bGx4XG5CYXNlMjogMHglOGxseFxuQmFzZTM6IDB4JThsbHhcbiIsIHBjaV9idXMsIHBjaV9zbG90LCBwY2lfZnVuYywgKHVuc2lnbmVkIGxvbmcgbG9uZylpb19hZGRyWzBdLCAodW5zaWduZWQgbG9uZyBsb25nKWlvX2FkZHJbMV0sICh1bnNpZ25lZCBsb25nIGxvbmcpaW9fYWRkclsyXSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpb19hZGRyWzNdKTsKKworCWlmICgodGhpc19ib2FyZC0+cGNfRWVwcm9tQ2hpcCA9PSBOVUxMKQorCQl8fCAoc3RyY21wKHRoaXNfYm9hcmQtPnBjX0VlcHJvbUNoaXAsIEFERElEQVRBXzkwNTQpICE9IDApKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBtb3JlIHRoYXQgMSBhZGRyZXNzIHVzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICh0aGlzX2JvYXJkLT5pX0lvcmFuZ2VCYXNlMSAhPSAwKSB7CisJCQlkZXYtPmlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvYmFzZV9tYWluOwkvLyBEQVEgYmFzZSBhZGRyZXNzLi4uCisJCX0gZWxzZSB7CisJCQlkZXYtPmlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvYmFzZV9hOwkvLyBEQVEgYmFzZSBhZGRyZXNzLi4uCisJCX0KKworCQlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lOworCQlkZXZwcml2LT5hbWNjID0gY2FyZDsKKwkJZGV2cHJpdi0+aW9iYXNlID0gKElOVCkgZGV2LT5pb2Jhc2U7CisJCWRldnByaXYtPmlfSW9iYXNlQW1jYyA9IChJTlQpIGlvYmFzZV9hOwkvL0FNQ0MgYmFzZSBhZGRyZXNzLi4uCisJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gPSAoSU5UKSBpb2Jhc2VfYWRkb247CS8vQUREIE9OIGJhc2UgYWRkcmVzcy4uLi4KKwkJZGV2cHJpdi0+aV9Jb2Jhc2VSZXNlcnZlZCA9IChJTlQpIGlvYmFzZV9yZXNlcnZlZDsKKwkJZGV2cHJpdi0+cHNfQm9hcmRJbmZvID0gdGhpc19ib2FyZDsKKwl9IGVsc2UgeworCQlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lOworCQlkZXYtPmlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvX2FkZHJbMl07CisJCWRldnByaXYtPmFtY2MgPSBjYXJkOworCQlkZXZwcml2LT5pb2Jhc2UgPSAoSU5UKSBpb19hZGRyWzJdOworCQlkZXZwcml2LT5wc19Cb2FyZEluZm8gPSB0aGlzX2JvYXJkOworCQlkZXZwcml2LT5pX0lvYmFzZVJlc2VydmVkID0gKElOVCkgaW9fYWRkclszXTsKKwkJcHJpbnRrKCJcbmlvcmVtYXAgYmVnaW4iKTsKKwkJZGV2cHJpdi0+ZHdfQWlCYXNlID0KKwkJCShVTE9OR19QVFIpIGlvcmVtYXAoaW9fYWRkclszXSwKKwkJCXRoaXNfYm9hcmQtPmlfSW9yYW5nZUJhc2UzKTsKKwkJcHJpbnRrKCJcbmlvcmVtYXAgZW5kIik7CisJfQorCisJLy8jIworCisJaWYgKGlycSA+IDApIHsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIHZfQURESV9JbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJCWNfSWRlbnRpZmllciwgZGV2KSA8IDApIHsKKwkJCXByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCBESVNBQkxJTkcgSVQiLAorCQkJCWlycSk7CisJCQlpcnEgPSAwOwkvKiBDYW4ndCB1c2UgSVJRICovCisJCX0gZWxzZSB7CisJCQlydF9wcmludGsoIlxuaXJxPSV1IiwgaXJxKTsKKwkJfQorCX0gZWxzZSB7CisJCXJ0X3ByaW50aygiLCBJUlEgZGlzYWJsZWQiKTsKKwl9CisKKwlwcmludGsoIlxuT3B0aW9uICVkICVkICVkXG4iLCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0sCisJCWl0LT5vcHRpb25zWzJdKTsKKwlkZXYtPmlycSA9IGlycTsKKworCS8vIFJlYWQgZWVwZW9tIGFuZCBmaWxsIGJvYXJkdHlwZSBTdHJ1Y3R1cmUKKworCWlmICh0aGlzX2JvYXJkLT5pX1BDSUVlcHJvbSkgeworCQlwcmludGsoIlxuUENJIEVlcHJvbSB1c2VkIik7CisJCWlmICghKHN0cmNtcCh0aGlzX2JvYXJkLT5wY19FZXByb21DaGlwLCAiUzU5MjAiKSkpIHsKKwkJCS8vIFNldCAzIHdhaXQgc3RhaXQKKwkJCWlmICghKHN0cmNtcCh0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lLCAiYXBjaTAzNSIpKSkgeworCQkJCW91dGwoMHg4MDgwODA4MiwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHg2MCk7CisJCQl9IGVsc2UgeworCQkJCW91dGwoMHg4MzgzODM4MywgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHg2MCk7CisJCQl9CisJCQkvLyBFbmFibGUgdGhlIGludGVycnVwdCBmb3IgdGhlIGNvbnRyb2xlcgorCQkJZHdfRHVtbXkgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgzOCk7CisJCQlvdXRsKGR3X0R1bW15IHwgMHgyMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKwkJCXByaW50aygiXG5FbmFibGUgdGhlIGludGVycnVwdCBmb3IgdGhlIGNvbnRyb2xlciIpOworCQl9CisJCXByaW50aygiXG5SZWFkIEVlcHJvbSIpOworCQlpX0VlcHJvbVJlYWRNYWluSGVhZGVyKGlvX2FkZHJbMF0sIHRoaXNfYm9hcmQtPnBjX0VlcHJvbUNoaXAsCisJCQlkZXYpOworCX0gZWxzZSB7CisJCXByaW50aygiXG5QQ0kgRWVwcm9tIHVudXNlZCIpOworCX0KKworCWlmIChpdC0+b3B0aW9uc1syXSA+IDApIHsKKwkJZGV2cHJpdi0+dXNfVXNlRG1hID0gQURESV9ESVNBQkxFOworCX0gZWxzZSB7CisJCWRldnByaXYtPnVzX1VzZURtYSA9IEFERElfRU5BQkxFOworCX0KKworCWlmICh0aGlzX2JvYXJkLT5pX0RtYSkgeworCQlwcmludGsoIlxuRE1BIHVzZWQiKTsKKwkJaWYgKGRldnByaXYtPnVzX1VzZURtYSA9PSBBRERJX0VOQUJMRSkgeworCQkJLy8gYWxsb2MgRE1BIGJ1ZmZlcnMKKwkJCWRldnByaXYtPmJfRG1hRG91YmxlQnVmZmVyID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCQlmb3IgKHBhZ2VzID0gNDsgcGFnZXMgPj0gMDsgcGFnZXMtLSkgeworCQkJCQlpZiAoKGRldnByaXYtPnVsX0RtYUJ1ZmZlclZpcnR1YWxbaV0gPQorCQkJCQkJCSh2b2lkICopCisJCQkJCQkJX19nZXRfZnJlZV9wYWdlcworCQkJCQkJCShHRlBfS0VSTkVMLCBwYWdlcykpKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoZGV2cHJpdi0+dWxfRG1hQnVmZmVyVmlydHVhbFtpXSkgeworCQkJCQlkZXZwcml2LT51aV9EbWFCdWZmZXJQYWdlc1tpXSA9IHBhZ2VzOworCQkJCQlkZXZwcml2LT51aV9EbWFCdWZmZXJTaXplW2ldID0KKwkJCQkJCVBBR0VfU0laRSAqIHBhZ2VzOworCQkJCQlkZXZwcml2LT51aV9EbWFCdWZmZXJTYW1wbGVzW2ldID0KKwkJCQkJCWRldnByaXYtPgorCQkJCQkJdWlfRG1hQnVmZmVyU2l6ZVtpXSA+PiAxOworCQkJCQlkZXZwcml2LT51bF9EbWFCdWZmZXJId1tpXSA9CisJCQkJCQl2aXJ0X3RvX2J1cygodm9pZCAqKWRldnByaXYtPgorCQkJCQkJdWxfRG1hQnVmZmVyVmlydHVhbFtpXSk7CisJCQkJfQorCQkJfQorCQkJaWYgKCFkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsWzBdKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiLCBDYW4ndCBhbGxvY2F0ZSBETUEgYnVmZmVyLCBETUEgZGlzYWJsZWQhIik7CisJCQkJZGV2cHJpdi0+dXNfVXNlRG1hID0gQURESV9ESVNBQkxFOworCQkJfQorCisJCQlpZiAoZGV2cHJpdi0+dWxfRG1hQnVmZmVyVmlydHVhbFsxXSkgeworCQkJCWRldnByaXYtPmJfRG1hRG91YmxlQnVmZmVyID0gMTsKKwkJCX0KKwkJfQorCisJCWlmICgoZGV2cHJpdi0+dXNfVXNlRG1hID09IEFERElfRU5BQkxFKSkgeworCQkJcnRfcHJpbnRrKCJcbkRNQSBFTkFCTEVEXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiXG5ETUEgRElTQUJMRURcbiIpOworCQl9CisJfQorCisJaWYgKCFzdHJjbXAodGhpc19ib2FyZC0+cGNfRHJpdmVyTmFtZSwgImFwY2kxNzEwIikpIHsKKyNpZmRlZiBDT05GSUdfQVBDSV8xNzEwCisJCWlfQURESV9BdHRhY2hQQ0kxNzEwKGRldik7CisKKwkJLy8gc2F2ZSBiYXNlIGFkZHJlc3MKKwkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgPSBpb19hZGRyWzJdOworI2VuZGlmCisJfSBlbHNlIHsKKwkJLy9VcGRhdGUtMC43LjU3LT4wLjcuNjhkZXYtPm5fc3ViZGV2aWNlcyA9IDc7CisJCW5fc3ViZGV2aWNlcyA9IDc7CisJCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgQUkgU3ViZGV2aWNlIFN0cnVjdHVyZXMKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJCWlmICgodGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWwpCisJCQl8fCAodGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWxEaWZmKSkgeworCQkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9DT01NT04gfCBTREZfR1JPVU5ECisJCQkJfCBTREZfRElGRjsKKwkJCWlmICh0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbCkgeworCQkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsOworCQkJCWRldnByaXYtPmJfU2luZ2VsRGlmZiA9IDA7CisJCQl9IGVsc2UgeworCQkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsRGlmZjsKKwkJCQlkZXZwcml2LT5iX1NpbmdlbERpZmYgPSAxOworCQkJfQorCQkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmlfQWlNYXhkYXRhOworCQkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+aV9BaUNoYW5uZWxMaXN0OworCQkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5wcl9BaVJhbmdlbGlzdDsKKworCQkJLyogU2V0IHRoZSBpbml0aWFsaXNhdGlvbiBmbGFnICovCisJCQlkZXZwcml2LT5iX0FpSW5pdGlhbGlzYXRpb24gPSAxOworCisJCQlzLT5pbnNuX2NvbmZpZyA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnQW5hbG9nSW5wdXQ7CisJCQlzLT5pbnNuX3JlYWQgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25SZWFkQW5hbG9nSW5wdXQ7CisJCQlzLT5pbnNuX3dyaXRlID0KKwkJCQl0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25Xcml0ZUFuYWxvZ0lucHV0OworCQkJcy0+aW5zbl9iaXRzID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQml0c0FuYWxvZ0lucHV0OworCQkJcy0+ZG9fY21kdGVzdCA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9Db21tYW5kVGVzdEFuYWxvZ0lucHV0OworCQkJcy0+ZG9fY21kID0gdGhpc19ib2FyZC0+aV9od2Rydl9Db21tYW5kQW5hbG9nSW5wdXQ7CisJCQlzLT5jYW5jZWwgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0NhbmNlbEFuYWxvZ0lucHV0OworCisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisKKwkJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgQU8gU3ViZGV2aWNlIFN0cnVjdHVyZXMKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJCWlmICh0aGlzX2JvYXJkLT5pX05ickFvQ2hhbm5lbCkgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfV1JJVEVBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT04gfAorCQkJCVNERl9SVDsKKwkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPmlfTmJyQW9DaGFubmVsOworCQkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmlfQW9NYXhkYXRhOworCQkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+aV9OYnJBb0NoYW5uZWw7CisJCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnByX0FvUmFuZ2VsaXN0OworCQkJcy0+aW5zbl9jb25maWcgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkNvbmZpZ0FuYWxvZ091dHB1dDsKKwkJCXMtPmluc25fd3JpdGUgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlQW5hbG9nT3V0cHV0OworCQl9IGVsc2UgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfQorCQkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBESSBTdWJkZXZpY2UgU3RydWN0dXJlcworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkJaWYgKHRoaXNfYm9hcmQtPmlfTmJyRGlDaGFubmVsKSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWw7CisJCQlzLT5tYXhkYXRhID0gMTsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPmlfTmJyRGlDaGFubmVsOworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJCXMtPmlvX2JpdHMgPSAwOwkvKiBhbGwgYml0cyBpbnB1dCAqLworCQkJcy0+aW5zbl9jb25maWcgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkNvbmZpZ0RpZ2l0YWxJbnB1dDsKKwkJCXMtPmluc25fcmVhZCA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWREaWdpdGFsSW5wdXQ7CisJCQlzLT5pbnNuX3dyaXRlID0KKwkJCQl0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25Xcml0ZURpZ2l0YWxJbnB1dDsKKwkJCXMtPmluc25fYml0cyA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkJpdHNEaWdpdGFsSW5wdXQ7CisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisJCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIERPIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCQlpZiAodGhpc19ib2FyZC0+aV9OYnJEb0NoYW5uZWwpIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRFQUJMRSB8IFNERl9SVCB8CisJCQkJU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbDsKKwkJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5pX0RvTWF4ZGF0YTsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsOworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJCXMtPmlvX2JpdHMgPSAweGY7CS8qIGFsbCBiaXRzIG91dHB1dCAqLworCisJCQlzLT5pbnNuX2NvbmZpZyA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkNvbmZpZ0RpZ2l0YWxPdXRwdXQ7CS8vZm9yIGRpZ2l0YWwgb3V0cHV0IG1lbW9yeS4uCisJCQlzLT5pbnNuX3dyaXRlID0KKwkJCQl0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25Xcml0ZURpZ2l0YWxPdXRwdXQ7CisJCQlzLT5pbnNuX2JpdHMgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkJpdHNEaWdpdGFsT3V0cHV0OworCQkJcy0+aW5zbl9yZWFkID0KKwkJCQl0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25SZWFkRGlnaXRhbE91dHB1dDsKKwkJfSBlbHNlIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0KKworCQkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBUaW1lciBTdWJkZXZpY2UgU3RydWN0dXJlcworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwkJaWYgKHRoaXNfYm9hcmQtPmlfVGltZXIpIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9USU1FUjsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1dSSVRFQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfAorCQkJCVNERl9DT01NT047CisJCQlzLT5uX2NoYW4gPSAxOworCQkJcy0+bWF4ZGF0YSA9IDA7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSAxOworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCQkJcy0+aW5zbl93cml0ZSA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlVGltZXI7CisJCQlzLT5pbnNuX3JlYWQgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25SZWFkVGltZXI7CisJCQlzLT5pbnNuX2NvbmZpZyA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkNvbmZpZ1RpbWVyOworCQkJcy0+aW5zbl9iaXRzID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQml0c1RpbWVyOworCQl9IGVsc2UgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfQorCisJCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFRUTAorCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgNTsKKwkJaWYgKHRoaXNfYm9hcmQtPmlfTmJyVFRMQ2hhbm5lbCkgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RUTElPOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwKKwkJCQlTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPmlfTmJyVFRMQ2hhbm5lbDsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+aW9fYml0cyA9IDA7CS8qIGFsbCBiaXRzIGlucHV0ICovCisJCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5pX05iclRUTENoYW5uZWw7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW5zbl9jb25maWcgPSB0aGlzX2JvYXJkLT5pX2h3ZHJfQ29uZmlnSW5pdFRUTElPOworCQkJcy0+aW5zbl9iaXRzID0gdGhpc19ib2FyZC0+aV9od2RyX1JlYWRUVExJT0JpdHM7CisJCQlzLT5pbnNuX3JlYWQgPSB0aGlzX2JvYXJkLT5pX2h3ZHJfUmVhZFRUTElPQWxsUG9ydFZhbHVlOworCQkJcy0+aW5zbl93cml0ZSA9IHRoaXNfYm9hcmQtPmlfaHdkcl9Xcml0ZVRUTElPQ2hsT25PZmY7CisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisKKwkJLyogRUVQUk9NICovCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyA2OworCQlpZiAodGhpc19ib2FyZC0+aV9QQ0lFZXByb20pIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9NRU1PUlk7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfSU5URVJOQUw7CisJCQlzLT5uX2NoYW4gPSAyNTY7CisJCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQkJcy0+aW5zbl9yZWFkID0gaV9BRERJREFUQV9JbnNuUmVhZEVlcHJvbTsKKwkJfSBlbHNlIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0KKwl9CisKKwlwcmludGsoIlxuaV9BRERJX0F0dGFjaCBlbmRcbiIpOworCWlfQURESV9SZXNldChkZXYpOworCWRldnByaXYtPmJfVmFsaWREcml2ZXIgPSAxOworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogc3RhdGljIGludCBpX0FERElfRGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBEZWFsbG9jYXRlcyByZXNvdXJjZXMgb2YgdGhlIGFkZGlfY29tbW9uIGRyaXZlciAgICAgICAgfAorfAkJCSAgRnJlZSB0aGUgRE1BIGJ1ZmZlcnMsIHVucmVnaXN0ZXIgaXJxLgkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMCAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworc3RhdGljIGludCBpX0FERElfRGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+Yl9WYWxpZERyaXZlcikgeworCQkJaV9BRERJX1Jlc2V0KGRldik7CisJCX0KKworCQlpZiAoZGV2LT5pcnEpIHsKKwkJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJfQorCisJCWlmICgoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5wY19FZXByb21DaGlwID09IE5VTEwpCisJCQl8fCAoc3RyY21wKGRldnByaXYtPnBzX0JvYXJkSW5mby0+cGNfRWVwcm9tQ2hpcCwKKwkJCQkJQURESURBVEFfOTA1NCkgIT0gMCkpIHsKKwkJCWlmIChkZXZwcml2LT5hbGxvY2F0ZWQpIHsKKwkJCQlpX3BjaV9jYXJkX2ZyZWUoZGV2cHJpdi0+YW1jYyk7CisJCQl9CisKKwkJCWlmIChkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsWzBdKSB7CisJCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylkZXZwcml2LT4KKwkJCQkJdWxfRG1hQnVmZmVyVmlydHVhbFswXSwKKwkJCQkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyUGFnZXNbMF0pOworCQkJfQorCisJCQlpZiAoZGV2cHJpdi0+dWxfRG1hQnVmZmVyVmlydHVhbFsxXSkgeworCQkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpZGV2cHJpdi0+CisJCQkJCXVsX0RtYUJ1ZmZlclZpcnR1YWxbMV0sCisJCQkJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclBhZ2VzWzFdKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlvdW5tYXAoKHZvaWQgKilkZXZwcml2LT5kd19BaUJhc2UpOworCisJCQlpZiAoZGV2cHJpdi0+YWxsb2NhdGVkKSB7CisJCQkJaV9wY2lfY2FyZF9mcmVlKGRldnByaXYtPmFtY2MpOworCQkJfQorCQl9CisKKwkJaWYgKHBjaV9saXN0X2J1aWxkZWQpIHsKKwkJCS8vdl9wY2lfY2FyZF9saXN0X2NsZWFudXAoUENJX1ZFTkRPUl9JRF9BTUNDKTsKKwkJCXZfcGNpX2NhcmRfbGlzdF9jbGVhbnVwKHRoaXNfYm9hcmQtPmlfVmVuZG9ySWQpOworCQkJcGNpX2xpc3RfYnVpbGRlZCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6IHN0YXRpYyBpbnQgaV9BRERJX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGVzIGFsbCBpbnRlcnJ1cHRzLCBSZXNldHMgZGlnaXRhbCBvdXRwdXQgdG8gbG93LCB8Cit8CQkJCVNldCBhbGwgYW5hbG9nIG91dHB1dCB0byBsb3cJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK3N0YXRpYyBpbnQgaV9BRERJX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCisJdGhpc19ib2FyZC0+aV9od2Rydl9SZXNldChkZXYpOworCXJldHVybiAwOworfQorCisvLyBJbnRlcnJ1cHQgZnVuY3Rpb24KKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfHN0YXRpYyB2b2lkIHZfQURESV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCAgUFRfUkVHU19BUkcpICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWdpc3RlcmQgaW50ZXJydXB0IHJvdXRpbmUJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAJaW50IGlycQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCB2X0FERElfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJdGhpc19ib2FyZC0+dl9od2Rydl9JbnRlcnJ1cHQoaXJxLCBkKTsKKwlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKK30KKworLy8gRUVQUk9NIFJlYWQgRnVuY3Rpb24KKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfElOVCBpX0FERElEQVRBX0luc25SZWFkRWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgMjU2IHdvcmRzIGZyb20gRUVQUk9NICAgICAgICAgIAkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworc3RhdGljIGludCBpX0FERElEQVRBX0luc25SZWFkRWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlXT1JEIHdfRGF0YTsKKwlXT1JEIHdfQWRkcmVzczsKKwl3X0FkZHJlc3MgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gYWRkcmVzcyB0byBiZSByZWFkIGFzIDAsMSwyLDMuLi4yNTUKKworCXdfRGF0YSA9IHdfRWVwcm9tUmVhZFdvcmQoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjLAorCQl0aGlzX2JvYXJkLT5wY19FZXByb21DaGlwLCAweDEwMCArICgyICogd19BZGRyZXNzKSk7CisJZGF0YVswXSA9IHdfRGF0YTsKKwkvL211bHRpcGxpZWQgYnkgMiBiY296aW5wdXQgd2lsbCBiZSBsaWtlIDAsMSwyLi4uMjU1CisJcmV0dXJuIGluc24tPm47CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRmNWMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oCkBAIC0wLDAgKzEsNDYyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSAiLi4vLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSAiYWRkaV9hbWNjX3M1OTMzLmgiCisKKyNkZWZpbmUgRVJST1IJLTEKKyNkZWZpbmUgU1VDQ0VTUwkxCisKKy8qIHZhcmlhYmxlIHR5cGUgZGVmaW5pdGlvbiAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJZVEUsICpQQllURTsKK3R5cGVkZWYgc2hvcnQgU0hPUlQsICpQU0hPUlQ7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVTSE9SVCwgKlBVU0hPUlQ7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdPUkQsICpQV09SRDsKK3R5cGVkZWYgaW50IElOVCwgKlBJTlQ7OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVCwgKlBVSU5UOwordHlwZWRlZiBpbnQgTE9ORywgKlBMT05HOwkJLyogMzItYml0ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBVTE9ORywgKlBVTE9ORzsJLyogMzItYml0ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBEV09SRCwgKlBEV09SRDsJLyogMzItYml0ICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUxPTkdfUFRSOworCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpQQ1JBTkdFOworCisjZGVmaW5lIExPQllURShXKQkoQllURSkoKFcpICYgMHhGRikKKyNkZWZpbmUgSElCWVRFKFcpCShCWVRFKSgoKFcpID4+IDgpICYgMHhGRikKKyNkZWZpbmUgTUFLRVdPUkQoSCwgTCkJKFVTSE9SVCkoKEwpIHwgKChIKSA8PCA4KSkKKyNkZWZpbmUgTE9XT1JEKFcpCShVU0hPUlQpKChXKSAmIDB4RkZGRikKKyNkZWZpbmUgSElXT1JEKFcpCShVU0hPUlQpKCgoVykgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSBNQUtFRFdPUkQoSCwgTCkJKFVJTlQpKChMKSB8ICgoSCkgPDwgMTYpKQorCisjZGVmaW5lIEFERElfRU5BQkxFCQkxCisjZGVmaW5lIEFERElfRElTQUJMRQkJMAorI2RlZmluZSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVAkxCisKKyNkZWZpbmUgQURESURBVEFfRUVQUk9NCQkxCisjZGVmaW5lIEFERElEQVRBX05PX0VFUFJPTQkwCisjZGVmaW5lIEFERElEQVRBXzkzQzc2CQkiOTNDNzYiCisjZGVmaW5lIEFERElEQVRBX1M1OTIwCQkiUzU5MjAiCisjZGVmaW5lIEFERElEQVRBX1M1OTMzCQkiUzU5MzMiCisjZGVmaW5lIEFERElEQVRBXzkwNTQJCSI5MDU0IgorCisvKiBBRERJREFUQSBFbmFibGUgRGlzYWJsZSAqLworI2RlZmluZSBBRERJREFUQV9FTkFCTEUJCTEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRQkwCisKKy8qIFN0cnVjdHVyZXMgKi8KKworLyogc3RydWN0dXJlIGZvciB0aGUgYm9hcmR0eXBlICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhciAqcGNfRHJpdmVyTmFtZTsJLy8gZHJpdmVyIG5hbWUKKwlJTlQgaV9WZW5kb3JJZDsJCS8vUENJIHZlbmRvciBhIGRldmljZSBJRCBvZiBjYXJkCisJSU5UIGlfRGV2aWNlSWQ7CisJSU5UIGlfSW9yYW5nZUJhc2UwOworCUlOVCBpX0lvcmFuZ2VCYXNlMTsKKwlJTlQgaV9Jb3JhbmdlQmFzZTI7CS8vICBiYXNlIDIgcmFuZ2UKKwlJTlQgaV9Jb3JhbmdlQmFzZTM7CS8vICBiYXNlIDMgcmFuZ2UKKwlJTlQgaV9QQ0lFZXByb207CS8vIGVlcHJvbSBwcmVzZW50IG9yIG5vdAorCWNoYXIgKnBjX0VlcHJvbUNoaXA7CS8vIHR5cGUgb2YgY2hpcAorCUlOVCBpX05ickFpQ2hhbm5lbDsJLy8gbnVtIG9mIEEvRCBjaGFucworCUlOVCBpX05ickFpQ2hhbm5lbERpZmY7CS8vIG51bSBvZiBBL0QgY2hhbnMgaW4gZGlmZiBtb2RlCisJSU5UIGlfQWlDaGFubmVsTGlzdDsJLy8gbGVuIG9mIGNoYW5saXN0CisJSU5UIGlfTmJyQW9DaGFubmVsOwkvLyBudW0gb2YgRC9BIGNoYW5zCisJSU5UIGlfQWlNYXhkYXRhOwkvLyByZXNvbHV0aW9uIG9mIEEvRAorCUlOVCBpX0FvTWF4ZGF0YTsJLy8gcmVzb2x1dGlvbiBvZiBEL0EKKwlQQ1JBTkdFIHByX0FpUmFuZ2VsaXN0OwkvLyByYW5nZWxpc3QgZm9yIEEvRAorCVBDUkFOR0UgcHJfQW9SYW5nZWxpc3Q7CS8vIHJhbmdlbGlzdCBmb3IgRC9BCisKKwlJTlQgaV9OYnJEaUNoYW5uZWw7CS8vIE51bWJlciBvZiBESSBjaGFubmVscworCUlOVCBpX05ickRvQ2hhbm5lbDsJLy8gTnVtYmVyIG9mIERPIGNoYW5uZWxzCisJSU5UIGlfRG9NYXhkYXRhOwkvLyBkYXRhIHRvIHNldCBhbGwgY2hhbmVscyBoaWdoCisKKwlJTlQgaV9OYnJUVExDaGFubmVsOwkvLyBOdW1iZXIgb2YgVFRMIGNoYW5uZWxzCisJUENSQU5HRSBwcl9UVExSYW5nZWxpc3Q7CS8vIHJhbmdlbGlzdCBmb3IgVFRMCisKKwlJTlQgaV9EbWE7CQkvLyBkbWEgcHJlc2VudCBvciBub3QKKwlJTlQgaV9UaW1lcjsJCS8vICAgdGltZXIgc3ViZGV2aWNlIHByZXNlbnQgb3Igbm90CisJQllURSBiX0F2YWlsYWJsZUNvbnZlcnRVbml0OworCVVJTlQgdWlfTWluQWNxdWlzaXRpb250aW1lTnM7CS8vIE1pbmltdW0gQWNxdWlzaXRpb24gaW4gTmFubyBzZWNzCisJVUlOVCB1aV9NaW5EZWxheXRpbWVOczsJLy8gTWluaW11bSBEZWxheSBpbiBOYW5vIHNlY3MKKworCS8qIGludGVycnVwdCBhbmQgcmVzZXQgKi8KKwl2b2lkICgqdl9od2Rydl9JbnRlcnJ1cHQpKGludCBpcnEsIHZvaWQgKmQpOworCWludCAoKmlfaHdkcnZfUmVzZXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworCisJLyogU3ViZGV2aWNlIGZ1bmN0aW9ucyAqLworCisJLyogQU5BTE9HIElOUFVUICovCisJaW50ICgqaV9od2Rydl9JbnNuQ29uZmlnQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuUmVhZEFuYWxvZ0lucHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbldyaXRlQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuQml0c0FuYWxvZ0lucHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworCWludCAoKmlfaHdkcnZfQ29tbWFuZEFuYWxvZ0lucHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKKwlpbnQgKCppX2h3ZHJ2X0NhbmNlbEFuYWxvZ0lucHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworCisJLyogQW5hbG9nIE91dHB1dCAqLworCWludCAoKmlfaHdkcnZfSW5zbkNvbmZpZ0FuYWxvZ091dHB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25Xcml0ZUFuYWxvZ091dHB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25CaXRzQW5hbG9nT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisJLyogRGlnaXRhbCBJbnB1dCAqLworCWludCAoKmlfaHdkcnZfSW5zbkNvbmZpZ0RpZ2l0YWxJbnB1dCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuUmVhZERpZ2l0YWxJbnB1dCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuV3JpdGVEaWdpdGFsSW5wdXQpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbkJpdHNEaWdpdGFsSW5wdXQpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisJLyogRGlnaXRhbCBPdXRwdXQgKi8KKwlpbnQgKCppX2h3ZHJ2X0luc25Db25maWdEaWdpdGFsT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbldyaXRlRGlnaXRhbE91dHB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25CaXRzRGlnaXRhbE91dHB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25SZWFkRGlnaXRhbE91dHB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKworCS8qIFRJTUVSICovCisJaW50ICgqaV9od2Rydl9JbnNuQ29uZmlnVGltZXIpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuV3JpdGVUaW1lcikoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuUmVhZFRpbWVyKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25CaXRzVGltZXIpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisJLyogVFRMIElPICovCisJaW50ICgqaV9od2RyX0NvbmZpZ0luaXRUVExJTykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2RyX1JlYWRUVExJT0JpdHMpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2RyX1JlYWRUVExJT0FsbFBvcnRWYWx1ZSkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJfV3JpdGVUVExJT0NobE9uT2ZmKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7Cit9IGJvYXJkdHlwZTsKKworLy9NT0RVTEUgSU5GTyBTVFJVQ1RVUkUKKwordHlwZWRlZiB1bmlvbiB7CisJLyogSW5jcmVtZW50YWwgY291bnRlciBpbmZvcyAqLworCXN0cnVjdCB7CisJCXVuaW9uIHsKKwkJCXN0cnVjdCB7CisJCQkJQllURSBiX01vZGVSZWdpc3RlcjE7CisJCQkJQllURSBiX01vZGVSZWdpc3RlcjI7CisJCQkJQllURSBiX01vZGVSZWdpc3RlcjM7CisJCQkJQllURSBiX01vZGVSZWdpc3RlcjQ7CisJCQl9IHNfQnl0ZU1vZGVSZWdpc3RlcjsKKwkJCURXT1JEIGR3X01vZGVSZWdpc3RlcjFfMl8zXzQ7CisJCX0gc19Nb2RlUmVnaXN0ZXI7CisKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBiX0luZGV4SW5pdDoxOworCQkJdW5zaWduZWQgaW50IGJfQ291bnRlckluaXQ6MTsKKwkJCXVuc2lnbmVkIGludCBiX1JlZmVyZW5jZUluaXQ6MTsKKwkJCXVuc2lnbmVkIGludCBiX0luZGV4SW50ZXJydXB0T2NjdXI6MTsKKwkJCXVuc2lnbmVkIGludCBiX0NvbXBhcmVMb2dpY0luaXQ6MTsKKwkJCXVuc2lnbmVkIGludCBiX0ZyZXF1ZW5jeU1lYXN1cmVtZW50SW5pdDoxOworCQkJdW5zaWduZWQgaW50IGJfRnJlcXVlbmN5TWVhc3VyZW1lbnRFbmFibGU6MTsKKwkJfSBzX0luaXRGbGFnOworCisJfSBzX1NpZW1lbnNDb3VudGVySW5mbzsKKworCS8qIFNTSSBpbmZvcyAqLworCXN0cnVjdCB7CisJCUJZVEUgYl9TU0lQcm9maWxlOworCQlCWVRFIGJfUG9zaXRpb25UdXJuTGVuZ3RoOworCQlCWVRFIGJfVHVybkNwdExlbmd0aDsKKwkJQllURSBiX1NTSUluaXQ7CisJfSBzX1NTSUNvdW50ZXJJbmZvOworCisJLyogVFRMIEkvTyBpbmZvcyAqLworCXN0cnVjdCB7CisJCUJZVEUgYl9UVExJbml0OworCQlCWVRFIGJfUG9ydENvbmZpZ3VyYXRpb25bNF07CisJfSBzX1RUTElPSW5mbzsKKworCS8qIERpZ2l0YWwgSS9PIGluZm9zICovCisJc3RydWN0IHsKKwkJQllURSBiX0RpZ2l0YWxJbml0OworCQlCWVRFIGJfQ2hhbm5lbEFNb2RlOworCQlCWVRFIGJfQ2hhbm5lbEJNb2RlOworCQlCWVRFIGJfT3V0cHV0TWVtb3J5RW5hYmxlZDsKKwkJRFdPUkQgZHdfT3V0cHV0TWVtb3J5OworCX0gc19EaWdpdGFsSU9JbmZvOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCS8qIDgyWDU0IHRpbWVyIGluZm9zICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJc3RydWN0IHsKKwkJc3RydWN0IHsKKwkJCUJZVEUgYl84Mlg1NEluaXQ7CisJCQlCWVRFIGJfSW5wdXRDbG9ja1NlbGVjdGlvbjsKKwkJCUJZVEUgYl9JbnB1dENsb2NrTGV2ZWw7CisJCQlCWVRFIGJfT3V0cHV0TGV2ZWw7CisJCQlCWVRFIGJfSGFyZHdhcmVHYXRlTGV2ZWw7CisJCQlEV09SRCBkd19Db25maWd1cmF0aW9uV29yZDsKKwkJfSBzXzgyWDU0VGltZXJJbmZvWzNdOworCQlCWVRFIGJfSW50ZXJydXB0TWFzazsKKwl9IHNfODJYNTRNb2R1bGVJbmZvOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCS8qIENocm9ub21ldGVyIGluZm9zICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJc3RydWN0IHsKKwkJQllURSBiX0Nocm9ub0luaXQ7CisJCUJZVEUgYl9JbnRlcnJ1cHRNYXNrOworCQlCWVRFIGJfUENJSW5wdXRDbG9jazsKKwkJQllURSBiX1RpbWluZ1VuaXQ7CisJCUJZVEUgYl9DeWNsZU1vZGU7CisJCWRvdWJsZSBkX1RpbWluZ0ludGVydmFsOworCQlEV09SRCBkd19Db25maWdSZWc7CisJfSBzX0Nocm9ub01vZHVsZUluZm87CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBQdWxzZSBlbmNvZGVyIGluZm9zICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJQllURSBiX1B1bHNlRW5jb2RlckluaXQ7CisJCX0gc19QdWxzZUVuY29kZXJJbmZvWzRdOworCQlEV09SRCBkd19TZXRSZWdpc3RlcjsKKwkJRFdPUkQgZHdfQ29udHJvbFJlZ2lzdGVyOworCQlEV09SRCBkd19TdGF0dXNSZWdpc3RlcjsKKwl9IHNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mbzsKKworCS8qIFRvciBjb250ZXIgaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJQllURSBiX1RvckNvdW50ZXJJbml0OworCQkJQllURSBiX1RpbWluZ1VuaXQ7CisJCQlCWVRFIGJfSW50ZXJydXB0RW5hYmxlOworCQkJZG91YmxlIGRfVGltaW5nSW50ZXJ2YWw7CisJCQlVTE9ORyB1bF9SZWFsVGltaW5nSW50ZXJ2YWw7CisJCX0gc19Ub3JDb3VudGVySW5mb1syXTsKKwkJQllURSBiX1BDSUlucHV0Q2xvY2s7CisJfSBzX1RvckNvdW50ZXJNb2R1bGVJbmZvOworCisJLyogUFdNIGluZm9zICovCisJc3RydWN0IHsKKwkJc3RydWN0IHsKKwkJCUJZVEUgYl9QV01Jbml0OworCQkJQllURSBiX1RpbWluZ1VuaXQ7CisJCQlCWVRFIGJfSW50ZXJydXB0RW5hYmxlOworCQkJZG91YmxlIGRfTG93VGltaW5nOworCQkJZG91YmxlIGRfSGlnaFRpbWluZzsKKwkJCVVMT05HIHVsX1JlYWxMb3dUaW1pbmc7CisJCQlVTE9ORyB1bF9SZWFsSGlnaFRpbWluZzsKKwkJfSBzX1BXTUluZm9bMl07CisJCUJZVEUgYl9DbG9ja1NlbGVjdGlvbjsKKwl9IHNfUFdNTW9kdWxlSW5mbzsKKworCS8qIEVUTSBpbmZvcyAqLworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQlCWVRFIGJfRVRNRW5hYmxlOworCQkJQllURSBiX0VUTUludGVycnVwdDsKKwkJfSBzX0VUTUluZm9bMl07CisJCUJZVEUgYl9FVE1Jbml0OworCQlCWVRFIGJfVGltaW5nVW5pdDsKKwkJQllURSBiX0Nsb2NrU2VsZWN0aW9uOworCQlkb3VibGUgZF9UaW1pbmdJbnRlcnZhbDsKKwkJVUxPTkcgdWxfVGltaW5nOworCX0gc19FVE1Nb2R1bGVJbmZvOworCisJLyogQ0RBIGluZm9zICovCisJc3RydWN0IHsKKwkJQllURSBiX0NEQUVuYWJsZTsKKwkJQllURSBiX0NEQUludGVycnVwdDsKKwkJQllURSBiX0NEQUluaXQ7CisJCUJZVEUgYl9GY3RTZWxlY3Rpb247CisJCUJZVEUgYl9DREFSZWFkRklGT092ZXJmbG93OworCX0gc19DREFNb2R1bGVJbmZvOworCit9IHN0cl9Nb2R1bGVJbmZvOworCisvKiBQcml2YXRlIHN0cnVjdHVyZSBmb3IgdGhlIGFkZGlfYXBjaTMxMjAgZHJpdmVyICovCit0eXBlZGVmIHN0cnVjdCB7CisKKwlJTlQgaW9iYXNlOworCUlOVCBpX0lvYmFzZUFtY2M7CS8vIGJhc2Urc2l6ZSBmb3IgQU1DQyBjaGlwCisJSU5UIGlfSW9iYXNlQWRkb247CS8vYWRkb24gYmFzZSBhZGRyZXNzCisJSU5UIGlfSW9iYXNlUmVzZXJ2ZWQ7CisJVUxPTkdfUFRSIGR3X0FpQmFzZTsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYzsJLy8gcHRyIHRvbyBBTUNDIGRhdGEKKwlCWVRFIGFsbG9jYXRlZDsJCS8vIHdlIGhhdmUgYmxvY2tlZCBjYXJkCisJQllURSBiX1ZhbGlkRHJpdmVyOwkvLyBkcml2ZXIgaXMgb2sKKwlCWVRFIGJfQWlDb250aW51b3VzOwkvLyB3ZSBkbyB1bmxpbWl0ZWQgQUkKKwlCWVRFIGJfQWlJbml0aWFsaXNhdGlvbjsKKwlVSU5UIHVpX0FpQWN0dWFsU2NhbjsJLy9ob3cgbWFueSBzY2FucyB3ZSBmaW5pc2hlZAorCVVJTlQgdWlfQWlCdWZmZXJQdHI7CS8vIGRhdGEgYnVmZmVyIHB0ciBpbiBzYW1wbGVzCisJVUlOVCB1aV9BaU5icm9mQ2hhbm5lbHM7CS8vIGhvdyBtYW55IGNoYW5uZWxzIGlzIG1lYXN1cmVkCisJVUlOVCB1aV9BaVNjYW5MZW5ndGg7CS8vIExlbmd0aCBvZiBhY3R1YWwgc2Nhbmxpc3QKKwlVSU5UIHVpX0FpQWN0dWFsU2NhblBvc2l0aW9uOwkvLyBwb3NpdGlvbiBpbiBhY3R1YWwgc2NhbgorCVBVSU5UIHB1aV9BaUNoYW5uZWxMaXN0OwkvLyBhY3R1YWwgY2hhbmxpc3QKKwlVSU5UIHVpX0FpQ2hhbm5lbExpc3RbMzJdOwkvLyBhY3R1YWwgY2hhbmxpc3QKKwlCWVRFIGJfQWlDaGFubmVsQ29uZmlndXJhdGlvblszMl07CS8vIGFjdHVhbCBjaGFubGlzdAorCVVJTlQgdWlfQWlSZWFkRGF0YVszMl07CisJRFdPUkQgZHdfQWlJbml0aWFsaXNlZDsKKwlVSU5UIHVpX0FpVGltZXIwOwkvL1RpbWVyIENvbnN0YW50IGZvciBUaW1lcjAKKwlVSU5UIHVpX0FpVGltZXIxOwkvL1RpbWVyIGNvbnN0YW50IGZvciBUaW1lcjEKKwlVSU5UIHVpX0FpRmxhZ3M7CisJVUlOVCB1aV9BaURhdGFMZW5ndGg7CisJc2hvcnQgKkFpRGF0YTsJLy8gUG9pbnRlciB0byBzYW1wbGUgZGF0YQorCVVJTlQgdWlfQWlOYnJvZlNjYW5zOwkvLyBudW1iZXIgb2Ygc2NhbnMgdG8gZG8KKwlVU0hPUlQgdXNfVXNlRG1hOwkvLyBUbyB1c2UgRG1hIG9yIG5vdAorCUJZVEUgYl9EbWFEb3VibGVCdWZmZXI7CS8vIHdlIGNhbiB1c2UgZG91YmxlIGJ1ZmZlcmluZworCVVJTlQgdWlfRG1hQWN0dWFsQnVmZmVyOwkvLyB3aGljaCBidWZmZXIgaXMgdXNlZCBub3cKKwkvLypVUERBVEUtMC43LjU3LT4wLjcuNjgKKwkvL1VMT05HICAgICAgICAgICAgICAgdWxfRG1hQnVmZmVyVmlydHVhbFsyXTsvLyBwb2ludGVycyB0byBiZWdpbiBvZiBETUEgYnVmZmVyCisJc2hvcnQgKnVsX0RtYUJ1ZmZlclZpcnR1YWxbMl07CS8vIHBvaW50ZXJzIHRvIGJlZ2luIG9mIERNQSBidWZmZXIKKwlVTE9ORyB1bF9EbWFCdWZmZXJId1syXTsJLy8gaHcgYWRkcmVzcyBvZiBETUEgYnVmZgorCVVJTlQgdWlfRG1hQnVmZmVyU2l6ZVsyXTsJLy8gc2l6ZSBvZiBkbWEgYnVmZmVyIGluIGJ5dGVzCisJVUlOVCB1aV9EbWFCdWZmZXJVc2VzaXplWzJdOwkvLyB3aGljaCBzaXplIHdlIG1heSBub3cgdXNlZCBmb3IgdHJhbnNmZXIKKwlVSU5UIHVpX0RtYUJ1ZmZlclNhbXBsZXNbMl07CS8vIHNpemUgaW4gc2FtcGxlcworCVVJTlQgdWlfRG1hQnVmZmVyUGFnZXNbMl07CS8vIG51bWJlciBvZiBwYWdlcyBpbiBidWZmZXIKKwlCWVRFIGJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyOwkvLyBEaWdpdGFsIE91dHB1dCBSZWdpc3RlcgorCUJZVEUgYl9PdXRwdXRNZW1vcnlTdGF0dXM7CisJQllURSBiX0FuYWxvZ0lucHV0Q2hhbm5lbE5icjsJLy8gQW5hbG9nIGlucHV0IGNoYW5uZWwgTmJyCisJQllURSBiX0FuYWxvZ091dHB1dENoYW5uZWxOYnI7CS8vIEFuYWxvZyBpbnB1dCBPdXRwdXQgIE5icgorCUJZVEUgYl9UaW1lclNlbGVjdE1vZGU7CS8vIENvbnRhaW4gZGF0YSB3cml0dGVuIGF0IGlvYmFzZSArIDBDCisJQllURSBiX01vZGVTZWxlY3RSZWdpc3RlcjsJLy8gQ29udGFpbiBkYXRhIHdyaXR0ZW4gYXQgaW9iYXNlICsgMEUKKwlVU0hPUlQgdXNfT3V0cHV0UmVnaXN0ZXI7CS8vIENvbnRhaW4gZGF0YSB3cml0dGVuIGF0IGlvYmFzZSArIDAKKwlCWVRFIGJfSW50ZXJydXB0U3RhdGU7CisJQllURSBiX1RpbWVySW5pdDsJLy8gU3BlY2lmeSBpZiBJbml0VGltZXJXYXRjaGRvZyB3YXMgbG9hZAorCUJZVEUgYl9UaW1lclN0YXJ0ZWQ7CS8vIFNwZWNpZnkgaWYgdGltZXIgMiBpcyBydW5uaW5nIG9yIG5vdAorCUJZVEUgYl9UaW1lcjJNb2RlOwkvLyBTcGVjaWZ5IHRoZSB0aW1lciAyIG1vZGUKKwlCWVRFIGJfVGltZXIySW50ZXJydXB0OwkvL1RpbWVyMiAgaW50ZXJydXB0IGVuYWJsZSBvciBkaXNhYmxlCisJQllURSBiX0FpQ3ljbGljQWNxdWlzaXRpb247CS8vIGluZGljYXRlIGN5Y2xpYyBhY3F1aXNpdGlvbgorCUJZVEUgYl9JbnRlcnJ1cHRNb2RlOwkvLyBlb2MgZW9zIG9yIGRtYQorCUJZVEUgYl9Fb2NFb3NJbnRlcnJ1cHQ7CS8vIEVuYWJsZSBkaXNhYmxlIGVvYyBlb3MgaW50ZXJydXB0CisJVUlOVCB1aV9Fb2NFb3NDb252ZXJzaW9uVGltZTsKKwlCWVRFIGJfRW9jRW9zQ29udmVyc2lvblRpbWVCYXNlOworCUJZVEUgYl9TaW5nZWxEaWZmOworCUJZVEUgYl9FeHR0cmlnRW5hYmxlOwkvKiBUbyBlbmFibGUgb3IgZGlzYWJsZSBleHRlcm5hbCB0cmlnZ2VyICovCisKKwkvKiBQb2ludGVyIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MgKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRza19DdXJyZW50OworCWJvYXJkdHlwZSAqcHNfQm9hcmRJbmZvOworCisJLyogSGFyZHdhcmUgYm9hcmQgaW5mb3MgZm9yIDE3MTAgKi8KKwlzdHJ1Y3QgeworCQlVSU5UIHVpX0FkZHJlc3M7CS8qIEJvYXJkIGFkZHJlc3MgKi8KKwkJVUlOVCB1aV9GbGFzaEFkZHJlc3M7CisJCUJZVEUgYl9JbnRlcnJ1cHROYnI7CS8qIEJvYXJkIGludGVycnVwdCBudW1iZXIgKi8KKwkJQllURSBiX1Nsb3ROdW1iZXI7CS8qIFBDSSBzbG90IG51bWJlciAqLworCQlCWVRFIGJfQm9hcmRWZXJzaW9uOworCQlEV09SRCBkd19Nb2xkdWxlQ29uZmlndXJhdGlvbls0XTsJLyogTW9kdWxlIGNvbmZpZyAqLworCX0gc19Cb2FyZEluZm9zOworCisJLyogSW50ZXJydXB0IGluZm9zICovCisJc3RydWN0IHsKKwkJVUxPTkcgdWxfSW50ZXJydXB0T2NjdXI7CS8qIDAgICA6IE5vIGludGVycnVwdCBvY2N1ciAqLworCQkJCQkJLyogPiAwIDogSW50ZXJydXB0IG9jY3VyICovCisJCVVJTlQgdWlfUmVhZDsJLyogUmVhZCBGSUZPICovCisJCVVJTlQgdWlfV3JpdGU7CS8qIFdyaXRlIEZJRk8gKi8KKwkJc3RydWN0IHsKKwkJCUJZVEUgYl9PbGRNb2R1bGVNYXNrOworCQkJVUxPTkcgdWxfT2xkSW50ZXJydXB0TWFzazsJLyogSW50ZXJydXB0IG1hc2sgKi8KKwkJCVVMT05HIHVsX09sZENvdW50ZXJMYXRjaFZhbHVlOwkvKiBJbnRlcnJ1cHQgY291bnRlciB2YWx1ZSAqLworCQl9IHNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFRdOworCX0gc19JbnRlcnJ1cHRQYXJhbWV0ZXJzOworCisJc3RyX01vZHVsZUluZm8gc19Nb2R1bGVJbmZvWzRdOworCVVMT05HIHVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzEwXTsKKworfSBhZGRpX3ByaXZhdGU7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBwY2lfbGlzdF9idWlsZGVkOwkvKiBzZXQgdG8gMSB3aGVuIGxpc3Qgb2YgY2FyZCBpcyBrbm93biAqLworCisvKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgaV9BRERJX0F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBpX0FERElfRGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBpX0FERElfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB2X0FERElfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBpX0FERElEQVRBX0luc25SZWFkRWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2VlcHJvbS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2VlcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTFiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMKQEAgLTAsMCArMSwxMTU4IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmFzc2UgMyAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICA6IEFEREkgREFUQSAgICAgICAgIHwgQ29tcGlsZXIgOiBHQ0MgCQkJICAgICAgICAgICAgICB8CisgIHwgTW9kdWxuYW1lIDogYWRkaV9lZXByb20uYyAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6IEFEREkgRUVQUk9NICBNb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURSdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8IAkJIHwgCQkJCQkJICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAJCQkJCQkgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2RlZmluZSBOVkNNRF9CRUdJTl9SRUFEIAkoMHg3IDw8IDUgKQkvLyBudlJhbSBiZWdpbiByZWFkIGNvbW1hbmQKKyNkZWZpbmUgTlZDTURfTE9BRF9MT1cgICAJKDB4NCA8PCA1ICkJLy8gbnZSYW0gbG9hZCBsb3cgY29tbWFuZAorI2RlZmluZSBOVkNNRF9MT0FEX0hJR0ggIAkoMHg1IDw8IDUgKQkvLyBudlJhbSBsb2FkIGhpZ2ggY29tbWFuZAorI2RlZmluZSBFRTc2X0NNRF9MRU4gICAgCTEzCS8vIGJpdHMgaW4gaW5zdHJ1Y3Rpb25zCisjZGVmaW5lIEVFX1JFQUQgICAgICAgICAJMHgwMTgwCS8vIDAxIDEwMDAgMDAwMCByZWFkIGluc3RydWN0aW9uCisKKyNkZWZpbmUJV09SRAkJCQl1bnNpZ25lZCBzaG9ydAorI2RlZmluZSBQV09SRAkJCQl1bnNpZ25lZCBzaG9ydCAqCisjZGVmaW5lIFBEV09SRAkJCQl1bnNpZ25lZCBpbnQgICoKKworI2lmbmRlZiBEV09SRAorI2RlZmluZQlEV09SRAkJCQl1bnNpZ25lZCBpbnQKKyNlbmRpZgorCisjZGVmaW5lIEVFUFJPTV9ESUdJVEFMSU5QVVQgCQkJMAorI2RlZmluZSBFRVBST01fRElHSVRBTE9VVFBVVAkJCTEKKyNkZWZpbmUgRUVQUk9NX0FOQUxPR0lOUFVUCQkJCTIKKyNkZWZpbmUgRUVQUk9NX0FOQUxPR09VVFBVVAkJCQkzCisjZGVmaW5lIEVFUFJPTV9USU1FUgkJCQkJNAorI2RlZmluZSBFRVBST01fV0FUQ0hET0cJCQkJCTUKKyNkZWZpbmUgRUVQUk9NX1RJTUVSX1dBVENIRE9HX0NPVU5URVIJMTAKKworc3RydWN0IHN0cl9GdW5jdGlvbmFsaXR5IHsKKwlCWVRFIGJfVHlwZTsKKwlXT1JEIHdfQWRkcmVzczsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXT1JEIHdfSGVhZGVyU2l6ZTsKKwlCWVRFIGJfTmZ1bmN0aW9uczsKKwlzdHJ1Y3Qgc3RyX0Z1bmN0aW9uYWxpdHkgc19GdW5jdGlvbnNbN107Cit9IHN0cl9NYWluSGVhZGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisJV09SRCB3X05jaGFubmVsOworCUJZVEUgYl9JbnRlcnJ1cHRpYmxlOworCVdPUkQgd19OaW50ZXJydXB0TG9naWM7Cit9IHN0cl9EaWdpdGFsSW5wdXRIZWFkZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXT1JEIHdfTmNoYW5uZWw7Cit9IHN0cl9EaWdpdGFsT3V0cHV0SGVhZGVyOworCisvLyB1c2VkIGZvciB0aW1lciBhcyB3ZWxsIGFzIHdhdGNoZG9nCisKK3R5cGVkZWYgc3RydWN0IHsKKwlXT1JEIHdfSGVhZGVyU2l6ZTsKKwlCWVRFIGJfUmVzb2x1dGlvbjsKKwlCWVRFIGJfTW9kZTsJCS8vIGluIGNhc2Ugb2YgV2F0Y2hkb2cgaXQgaXMgZnVuY3Rpb25hbGl0eQorCVdPUkQgd19NaW5UaW1pbmc7CisJQllURSBiX1RpbWVCYXNlOworfSBzdHJfVGltZXJEZXRhaWxzOwordHlwZWRlZiBzdHJ1Y3QgeworCisJV09SRCB3X050aW1lcjsKKwlzdHJfVGltZXJEZXRhaWxzIHNfVGltZXJEZXRhaWxzWzRdOwkvLyAgc3VwcG9ydHMgNCB0aW1lcnMKK30gc3RyX1RpbWVyTWFpbkhlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdPUkQgd19OY2hhbm5lbDsKKwlCWVRFIGJfUmVzb2x1dGlvbjsKK30gc3RyX0FuYWxvZ091dHB1dEhlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdPUkQgd19OY2hhbm5lbDsKKwlXT1JEIHdfTWluQ29udmVydFRpbWluZzsKKwlXT1JEIHdfTWluRGVsYXlUaW1pbmc7CisJQllURSBiX0hhc0RtYTsKKwlCWVRFIGJfUmVzb2x1dGlvbjsKK30gc3RyX0FuYWxvZ0lucHV0SGVhZGVyOworCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogICAgICAgICAgICBSZWFkIEhlYWRlciBGdW5jdGlvbnMgICAgICAgICAgICAgICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworSU5UIGlfRWVwcm9tUmVhZE1haW5IZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworCitJTlQgaV9FZXByb21SZWFkRGlnaXRhbElucHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfRGlnaXRhbElucHV0SGVhZGVyICogc19IZWFkZXIpOworCitJTlQgaV9FZXByb21SZWFkRGlnaXRhbE91dHB1dEhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCWNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgV09SRCB3X0FkZHJlc3MsCisJc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXIgKiBzX0hlYWRlcik7CisKK0lOVCBpX0VlcHJvbVJlYWRUaW1lckhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCWNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgV09SRCB3X0FkZHJlc3MsCisJc3RyX1RpbWVyTWFpbkhlYWRlciAqIHNfSGVhZGVyKTsKKworSU5UIGlfRWVwcm9tUmVhZEFubG9nT3V0cHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfQW5hbG9nT3V0cHV0SGVhZGVyICogc19IZWFkZXIpOworCitJTlQgaV9FZXByb21SZWFkQW5sb2dJbnB1dEhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCWNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgV09SRCB3X0FkZHJlc3MsCisJc3RyX0FuYWxvZ0lucHV0SGVhZGVyICogc19IZWFkZXIpOworCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qICAgICAgRWVwcm9tIFNwZWNpZmljIEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworV09SRCB3X0VlcHJvbVJlYWRXb3JkKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwlXT1JEIHdfRWVwcm9tU3RhcnRBZGRyZXNzKTsKK3ZvaWQgdl9FZXByb21XYWl0QnVzeShXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzKTsKK3ZvaWQgdl9FZXByb21DbG9jazc2KERXT1JEIGR3X0FkZHJlc3MsIERXT1JEIGR3X1JlZ2lzdGVyVmFsdWUpOwordm9pZCB2X0VlcHJvbVdhaXRCdXN5KFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOwordm9pZCB2X0VlcHJvbVNlbmRDb21tYW5kNzYoRFdPUkQgZHdfQWRkcmVzcywgRFdPUkQgZHdfRWVwcm9tQ29tbWFuZCwKKwlCWVRFIGJfRGF0YUxlbmd0aEluQml0cyk7Cit2b2lkIHZfRWVwcm9tQ3M3NlJlYWQoRFdPUkQgZHdfQWRkcmVzcywgV09SRCB3X29mZnNldCwgUFdPUkQgcHdfVmFsdWUpOworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogV09SRCB3X0VlcHJvbVJlYWRXb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJKFdPUkQJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsICAgICAgICAgICAgIAkJIHwKK3wJCQkJIGNoYXIgKglwY19QQ0lDaGlwSW5mb3JtYXRpb24sICAgICAgICAgICAgICAgCQkgfAorfAkJCQkgV09SRCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzKSAgICAgICAgICAgICAgICAJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIGZyb20gZWVwcm9tbiBhIHdvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IFBDSSBlZXByb20gYWRkcmVzcyAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkgICAgICBjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24gIDogUENJIENoaXAgVHlwZS4gICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIFdPUkQgd19FZXByb21TdGFydEFkZHJlc3MgICAgOiBTZWxlY3RlZCBlZXByb20gYWRkcmVzcyB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogUmVhZCB3b3JkIHZhbHVlIGZyb20gZWVwcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworV09SRCB3X0VlcHJvbVJlYWRXb3JkKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwlXT1JEIHdfRWVwcm9tU3RhcnRBZGRyZXNzKQoreworCisJQllURSBiX0NvdW50ZXIgPSAwOworCisJQllURSBiX1JlYWRCeXRlID0gMDsKKworCUJZVEUgYl9SZWFkTG93Qnl0ZSA9IDA7CisKKwlCWVRFIGJfUmVhZEhpZ2hCeXRlID0gMDsKKworCUJZVEUgYl9TZWxlY3RlZEFkZHJlc3NMb3cgPSAwOworCisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAwOworCisJV09SRCB3X1JlYWRXb3JkID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFRlc3QgdGhlIFBDSSBjaGlwIHR5cGUgKi8KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmICgoIXN0cmNtcChwY19QQ0lDaGlwSW5mb3JtYXRpb24sICJTNTkyMCIpKSB8fAorCQkoIXN0cmNtcChwY19QQ0lDaGlwSW5mb3JtYXRpb24sICJTNTkzMyIpKSkKKwl7CisKKwkJZm9yIChiX0NvdW50ZXIgPSAwOyBiX0NvdW50ZXIgPCAyOyBiX0NvdW50ZXIrKykKKwkJeworCisJCQliX1NlbGVjdGVkQWRkcmVzc0xvdyA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGJfQ291bnRlcikgJSAyNTY7CS8vUmVhZCB0aGUgbG93IDggYml0IHBhcnQKKworCQkJYl9TZWxlY3RlZEFkZHJlc3NIaWdoID0gKHdfRWVwcm9tU3RhcnRBZGRyZXNzICsgYl9Db3VudGVyKSAvIDI1NjsJLy9SZWFkIHRoZSBoaWdoIDggYml0IHBhcnQKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8qIFNlbGVjdCB0aGUgbG9hZCBsb3cgYWRkcmVzcyBtb2RlICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRiKE5WQ01EX0xPQURfTE9XLCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0YpOworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCS8qIFdhaXQgb24gYnVzeSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCXZfRWVwcm9tV2FpdEJ1c3kod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLyogTG9hZCB0aGUgbG93IGFkZHJlc3MgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NMb3csCisJCQkJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyAweDNFKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQkvKiBXYWl0IG9uIGJ1c3kgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQl2X0VlcHJvbVdhaXRCdXN5KHdfUENJQm9hcmRFZXByb21BZGRyZXNzKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBTZWxlY3QgdGhlIGxvYWQgaGlnaCBhZGRyZXNzIG1vZGUgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRiKE5WQ01EX0xPQURfSElHSCwgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyAweDNGKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQkvKiBXYWl0IG9uIGJ1c3kgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQl2X0VlcHJvbVdhaXRCdXN5KHdfUENJQm9hcmRFZXByb21BZGRyZXNzKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBMb2FkIHRoZSBoaWdoIGFkZHJlc3MgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRiKGJfU2VsZWN0ZWRBZGRyZXNzSGlnaCwKKwkJCQl3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0UpOworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCS8qIFdhaXQgb24gYnVzeSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCXZfRWVwcm9tV2FpdEJ1c3kod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLyogU2VsZWN0IHRoZSBSRUFEIG1vZGUgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoTlZDTURfQkVHSU5fUkVBRCwgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyAweDNGKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQkvKiBXYWl0IG9uIGJ1c3kgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQl2X0VlcHJvbVdhaXRCdXN5KHdfUENJQm9hcmRFZXByb21BZGRyZXNzKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLyogUmVhZCBkYXRhIGludG8gdGhlIEVFUFJPTSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQliX1JlYWRCeXRlID0gaW5iKHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgMHgzRSk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJLyogV2FpdCBvbiBidXN5ICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJdl9FZXByb21XYWl0QnVzeSh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBTZWxlY3QgdGhlIHVwcGVyIGFkZHJlc3MgcGFydCAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfQ291bnRlciA9PSAwKQorCQkJeworCisJCQkJYl9SZWFkTG93Qnl0ZSA9IGJfUmVhZEJ5dGU7CisKKwkJCX0JLy8gaWYoYl9Db3VudGVyPT0wKQorCisJCQllbHNlCisJCQl7CisKKwkJCQliX1JlYWRIaWdoQnl0ZSA9IGJfUmVhZEJ5dGU7CisKKwkJCX0JLy8gaWYoYl9Db3VudGVyPT0wKQorCisJCX0JCS8vIGZvciAoYl9Db3VudGVyPTA7IGJfQ291bnRlcjwyOyBiX0NvdW50ZXIrKykKKworCQl3X1JlYWRXb3JkID0gKGJfUmVhZExvd0J5dGUgfCAoKChXT1JEKSBiX1JlYWRIaWdoQnl0ZSkgKiAyNTYpKTsKKworCX0JCQkvLyBlbmQgb2YgaWYgKCghc3RyY21wKHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgIlM1OTIwIikpIHx8ICghc3RyY21wKHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgIlM1OTMzIikpKQorCisJaWYgKCFzdHJjbXAocGNfUENJQ2hpcEluZm9ybWF0aW9uLCAiOTNDNzYiKSkKKwl7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBSZWFkIDE2IGJpdCBmcm9tIHRoZSBFRVBST00gOTNDNzYgKi8KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCXZfRWVwcm9tQ3M3NlJlYWQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHdfRWVwcm9tU3RhcnRBZGRyZXNzLAorCQkJJndfUmVhZFdvcmQpOworCisJfQorCisJcmV0dXJuICh3X1JlYWRXb3JkKTsKKworfQorCisvKgorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IHZvaWQgdl9FZXByb21XYWl0QnVzeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKK3wJCQkoV09SRAl3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcykgICAgICAgICAgICAgICAgICAgIAkgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBUYXNrICAgICAgICAgICAgICA6IFdhaXQgdGhlIGJ1c3kgZmxhZyBmcm9tIFBDSSBjb250cm9sbGVyICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IElucHV0IFBhcmFtZXRlcnMgIDogV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IFBDSSBlZXByb20gYmFzZSBhZGRyZXNzIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBSZXR1cm4gVmFsdWUgICAgICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisqLworCit2b2lkIHZfRWVwcm9tV2FpdEJ1c3koV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcykKK3sKKworCUJZVEUgYl9FZXByb21CdXN5ID0gMDsKKworCWRvCisJeworCisJICAgLyoqKioqKioqKioqKiovCisKKwkJLyogSU1QT1JUQU5UICovCisKKwkgICAvKioqKioqKioqKioqKi8KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLyogQW4gZXJyb3IgaGFzIGJlZW4gd3JpdHRlbiBpbiB0aGUgQU1DQyA1OTMzIGJvb2sgYXQgdGhlIHBhZ2UgQi0xMyAqLworCisJCS8qIEV4OiBpZiB5b3UgcmVhZCBhIGJ5dGUgYW5kIGxvb2sgZm9yIHRoZSBidXN5IHN0YXR1c0VFUFJPTT0weDgwIGFuZCAgICovCisKKwkJLyogICAgICB0aGUgb3BlcmF0b3IgcmVnaXN0ZXIgaXMgQU1DQ19PUF9SRUdfTUNTUiszICovCisKKwkJLyogICAgICBXT1JEIHJlYWQgIEVFUFJPTT0weDgwMDAgYW5kQU1DQ19PUF9SRUdfTUNTUisyICAgICAgICAgICAgICAgICAgKi8KKworCQkvKiAgICAgIERXT1JEIHJlYWQgIEVFUFJPTT0weDgwMDAwMDAwIGFuZCBBTUNDX09QX1JFR19NQ1NSICovCisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWJfRWVwcm9tQnVzeSA9IGluYih3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0YpOworCQliX0VlcHJvbUJ1c3kgPSBiX0VlcHJvbUJ1c3kgJiAweDgwOworCisJfQorCXdoaWxlIChiX0VlcHJvbUJ1c3kgPT0gMHg4MCk7CisKK30KKworLyoKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IHZvaWQgdl9FZXByb21DbG9jazc2KERXT1JEIGR3X0FkZHJlc3MsICAgICAgICAgICAgICAgICAgICAgIHwKKworfAkJCQkJICAgRFdPUkQgZHdfUmVnaXN0ZXJWYWx1ZSkgICAgICAgICAgICAgICAgIAkJCSAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFRhc2sgICAgICAgICAgICAgIDogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgY2xvY2tpbmcgc2VxdWVuY2UgdG8gdGhlIEVFUFJPTS4gICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IElucHV0IFBhcmFtZXRlcnMgIDogRFdPUkQgZHdfQWRkcmVzcyA6IFBDSSBlZXByb20gYmFzZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgfAorCit8CQkgICAgICBEV09SRCBkd19SZWdpc3RlclZhbHVlIDogUENJIGVlcHJvbSByZWdpc3RlciB2YWx1ZSB0byB3cml0ZS58CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyovCisKK3ZvaWQgdl9FZXByb21DbG9jazc2KERXT1JEIGR3X0FkZHJlc3MsIERXT1JEIGR3X1JlZ2lzdGVyVmFsdWUpCit7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBTZXQgRUVQUk9NIGNsb2NrIExvdyAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJb3V0bChkd19SZWdpc3RlclZhbHVlICYgMHg2LCBkd19BZGRyZXNzKTsKKworICAgLyoqKioqKioqKioqKioqKi8KKworCS8qIFdhaXQgMC4xIG1zICovCisKKyAgIC8qKioqKioqKioqKioqKiovCisKKwl1ZGVsYXkoMTAwKTsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBTZXQgRUVQUk9NIGNsb2NrIEhpZ2ggKi8KKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlvdXRsKGR3X1JlZ2lzdGVyVmFsdWUgfCAweDEsIGR3X0FkZHJlc3MpOworCisgICAvKioqKioqKioqKioqKioqLworCisJLyogV2FpdCAwLjEgbXMgKi8KKworICAgLyoqKioqKioqKioqKioqKi8KKworCXVkZWxheSgxMDApOworCit9CisKKy8qCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgRnVuY3Rpb24gICBOYW1lICAgOiB2b2lkIHZfRWVwcm9tU2VuZENvbW1hbmQ3NihEV09SRCBkd19BZGRyZXNzLCAgICAgICAgICAgICAgICB8CisKK3wJCQkJCSAgIERXT1JEICAgZHdfRWVwcm9tQ29tbWFuZCwgICAgICAgICAgICAgICAgCQkgIHwKKworfAkJCQkJICAgQllURSAgICBiX0RhdGFMZW5ndGhJbkJpdHMpICAgICAgICAgICAgICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFRhc2sgICAgICAgICAgICAgIDogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIENvbW1hbmQgdG8gdGhlIEVFUFJPTSA5M0M3Ni4gICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IElucHV0IFBhcmFtZXRlcnMgIDogRFdPUkQgZHdfQWRkcmVzcyA6IFBDSSBlZXByb20gYmFzZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgfAorCit8CQkgICAgICBEV09SRCBkd19FZXByb21Db21tYW5kIDogUENJIGVlcHJvbSBjb21tYW5kIHRvIHdyaXRlLiAgICAgICB8CisKK3wJCSAgICAgIEJZVEUgIGJfRGF0YUxlbmd0aEluQml0cyA6IFBDSSBlZXByb20gY29tbWFuZCBkYXRhIGxlbmd0aC4gIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBSZXR1cm4gVmFsdWUgICAgICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworKi8KKwordm9pZCB2X0VlcHJvbVNlbmRDb21tYW5kNzYoRFdPUkQgZHdfQWRkcmVzcywgRFdPUkQgZHdfRWVwcm9tQ29tbWFuZCwKKwlCWVRFIGJfRGF0YUxlbmd0aEluQml0cykKK3sKKworCWNoYXIgY19CaXRQb3MgPSAwOworCisJRFdPUkQgZHdfUmVnaXN0ZXJWYWx1ZSA9IDA7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIEVuYWJsZSBFRVBST00gQ2hpcCBTZWxlY3QgKi8KKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZHdfUmVnaXN0ZXJWYWx1ZSA9IDB4MjsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogVG9nZ2xlIEVFUFJPTSdzIENoaXAgc2VsZWN0IHRvIGdldCBpdCBvdXQgb2YgU2hpZnQgUmVnaXN0ZXIgTW9kZSAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlvdXRsKGR3X1JlZ2lzdGVyVmFsdWUsIGR3X0FkZHJlc3MpOworCisgICAvKioqKioqKioqKioqKioqLworCisJLyogV2FpdCAwLjEgbXMgKi8KKworICAgLyoqKioqKioqKioqKioqKi8KKworCXVkZWxheSgxMDApOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFNlbmQgRUVQUk9NIGNvbW1hbmQgLSBvbmUgYml0IGF0IGEgdGltZSAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWZvciAoY19CaXRQb3MgPSAoYl9EYXRhTGVuZ3RoSW5CaXRzIC0gMSk7IGNfQml0UG9zID49IDA7IGNfQml0UG9zLS0pCisJeworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBDaGVjayBpZiBjdXJyZW50IGJpdCBpcyAwIG9yIDEgKi8KKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGR3X0VlcHJvbUNvbW1hbmQgJiAoMSA8PCBjX0JpdFBvcykpCisJCXsKKworCSAvKioqKioqKioqKiovCisKKwkJCS8qIFdyaXRlIDEgKi8KKworCSAvKioqKioqKioqKiovCisKKwkJCWR3X1JlZ2lzdGVyVmFsdWUgPSBkd19SZWdpc3RlclZhbHVlIHwgMHg0OworCisJCX0KKworCQllbHNlCisJCXsKKworCSAvKioqKioqKioqKiovCisKKwkJCS8qIFdyaXRlIDAgKi8KKworCSAvKioqKioqKioqKiovCisKKwkJCWR3X1JlZ2lzdGVyVmFsdWUgPSBkd19SZWdpc3RlclZhbHVlICYgMHgzOworCisJCX0KKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBXcml0ZSB0aGUgY29tbWFuZCAqLworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCW91dGwoZHdfUmVnaXN0ZXJWYWx1ZSwgZHdfQWRkcmVzcyk7CisKKyAgICAgIC8qKioqKioqKioqKioqKiovCisKKwkJLyogV2FpdCAwLjEgbXMgKi8KKworICAgICAgLyoqKioqKioqKioqKioqKi8KKworCQl1ZGVsYXkoMTAwKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLyogVHJpZ2dlciB0aGUgRUVQUk9NIGNsb2NrICovCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCXZfRWVwcm9tQ2xvY2s3Nihkd19BZGRyZXNzLCBkd19SZWdpc3RlclZhbHVlKTsKKworCX0KKworfQorCisvKgorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogdm9pZCB2X0VlcHJvbUNzNzZSZWFkKERXT1JEIGR3X0FkZHJlc3MsICAgICAgICAgICAgICAgICAgICAgfAorCit8CQkJCQkgICBXT1JEICAgIHdfb2Zmc2V0LCAgICAgICAgICAgICAgICAgICAgICAJCQkgIHwKKworfAkJCQkJICAgUFdPUkQgICBwd19WYWx1ZSkgICAgICAgICAgICAgICAgICAgICAgCQkJICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGZ1bmN0aW9uIHJlYWQgYSB2YWx1ZSBmcm9tIHRoZSBFRVBST00gOTNDNzYuICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBEV09SRCBkd19BZGRyZXNzIDogUENJIGVlcHJvbSBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICB8CisKK3wJCSAgICAgIFdPUkQgICAgd19vZmZzZXQgOiBPZmZzZXQgb2YgdGhlIGFkcmVzcyB0byByZWFkICAgICAgICAgICAgIHwKKworfAkJICAgICAgUFdPUkQgICBwd19WYWx1ZSA6IFBDSSBlZXByb20gMTYgYml0IHJlYWQgdmFsdWUuICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisqLworCit2b2lkIHZfRWVwcm9tQ3M3NlJlYWQoRFdPUkQgZHdfQWRkcmVzcywgV09SRCB3X29mZnNldCwgUFdPUkQgcHdfVmFsdWUpCit7CisKKyAgICAgICAgY2hhciBjX0JpdFBvcyA9IDA7CisKKwlEV09SRCBkd19SZWdpc3RlclZhbHVlID0gMDsKKworCURXT1JEIGR3X1JlZ2lzdGVyVmFsdWVSZWFkID0gMDsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBTZW5kIEVFUFJPTSByZWFkIGNvbW1hbmQgYW5kIG9mZnNldCB0byBFRVBST00gKi8KKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwl2X0VlcHJvbVNlbmRDb21tYW5kNzYoZHdfQWRkcmVzcywgKEVFX1JFQUQgPDwgNCkgfCAod19vZmZzZXQgLyAyKSwKKwkJRUU3Nl9DTURfTEVOKTsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBHZXQgdGhlIGxhc3QgcmVnaXN0ZXIgdmFsdWUgKi8KKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlkd19SZWdpc3RlclZhbHVlID0gKCgod19vZmZzZXQgLyAyKSAmIDB4MSkgPDwgMikgfCAweDI7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFNldCB0aGUgMTYtYml0IHZhbHVlIG9mIDAgKi8KKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJKnB3X1ZhbHVlID0gMDsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIEdldCB0aGUgMTYtYml0IHZhbHVlICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlmb3IgKGNfQml0UG9zID0gMDsgY19CaXRQb3MgPCAxNjsgY19CaXRQb3MrKykKKwl7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIFRyaWdnZXIgdGhlIEVFUFJPTSBjbG9jayAqLworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQl2X0VlcHJvbUNsb2NrNzYoZHdfQWRkcmVzcywgZHdfUmVnaXN0ZXJWYWx1ZSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIEdldCB0aGUgcmVzdWx0IGJpdCAqLworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkd19SZWdpc3RlclZhbHVlUmVhZCA9IGlubChkd19BZGRyZXNzKTsKKworICAgICAgLyoqKioqKioqKioqKioqKi8KKworCQkvKiBXYWl0IDAuMSBtcyAqLworCisgICAgICAvKioqKioqKioqKioqKioqLworCisJCXVkZWxheSgxMDApOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIEdldCBiaXQgdmFsdWUgYW5kIHNoaWZ0IGludG8gcmVzdWx0ICovCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGR3X1JlZ2lzdGVyVmFsdWVSZWFkICYgMHg4KQorCQl7CisKKwkgLyoqKioqKioqKiovCisKKwkJCS8qIFJlYWQgMSAqLworCisJIC8qKioqKioqKioqLworCisJCQkqcHdfVmFsdWUgPSAoKnB3X1ZhbHVlIDw8IDEpIHwgMHgxOworCisJCX0KKworCQllbHNlCisJCXsKKworCSAvKioqKioqKioqKi8KKworCQkJLyogUmVhZCAwICovCisKKwkgLyoqKioqKioqKiovCisKKwkJCSpwd19WYWx1ZSA9ICgqcHdfVmFsdWUgPDwgMSk7CisKKwkJfQorCisJfQorCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIENsZWFyIGFsbCBFRVBST00gYml0cyAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWR3X1JlZ2lzdGVyVmFsdWUgPSAweDA7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFRvZ2dsZSBFRVBST00ncyBDaGlwIHNlbGVjdCB0byBnZXQgaXQgb3V0IG9mIFNoaWZ0IFJlZ2lzdGVyIE1vZGUgKi8KKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJb3V0bChkd19SZWdpc3RlclZhbHVlLCBkd19BZGRyZXNzKTsKKworICAgLyoqKioqKioqKioqKioqKi8KKworCS8qIFdhaXQgMC4xIG1zICovCisKKyAgIC8qKioqKioqKioqKioqKiovCisKKwl1ZGVsYXkoMTAwKTsKKworfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiAgICAgIEVFUFJPTSBIRUFERVIgUkVBRCBGVU5DVElPTlMgICAgICAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgOiBJTlQgaV9FZXByb21SZWFkTWFpbkhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCAgfAorfAkJCQljaGFyICoJcGNfUENJQ2hpcEluZm9ybWF0aW9uLHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgZnJvbSBlZXByb20gTWFpbiBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBhZGRyZXNzICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiAgOiBQQ0kgQ2hpcCBUeXBlLiAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJCSAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJICAgOiBjb21lZGkgZGV2aWNlIHN0cnVjdHVyZSB8Cit8CQkJCQkJCQkJCQkgcG9pbnRlcgkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0VlcHJvbVJlYWRNYWluSGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQoreworCVdPUkQgd19UZW1wLCBpLCB3X0NvdW50ID0gMDsKKwlVSU5UIHVpX1RlbXA7CisJc3RyX01haW5IZWFkZXIgc19NYWluSGVhZGVyOworCXN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgc19EaWdpdGFsSW5wdXRIZWFkZXI7CisJc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXIgc19EaWdpdGFsT3V0cHV0SGVhZGVyOworCS8vc3RyX1RpbWVyTWFpbkhlYWRlciAgICAgc19UaW1lck1haW5IZWFkZXIsc19XYXRjaGRvZ01haW5IZWFkZXI7CisJc3RyX0FuYWxvZ091dHB1dEhlYWRlciBzX0FuYWxvZ091dHB1dEhlYWRlcjsKKwlzdHJfQW5hbG9nSW5wdXRIZWFkZXIgc19BbmFsb2dJbnB1dEhlYWRlcjsKKworCS8vIFJlYWQgc2l6ZQorCXNfTWFpbkhlYWRlci53X0hlYWRlclNpemUgPQorCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCTB4MTAwICsgOCk7CisKKwkvLyBSZWFkIG5iciBvZiBmdW5jdGlvbmFsaXR5CisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIDEwKTsKKwlzX01haW5IZWFkZXIuYl9OZnVuY3Rpb25zID0gKEJZVEUpIHdfVGVtcCAmIDB4MDBGRjsKKworCS8vIFJlYWQgZnVuY3Rpb25hbGl0eSBkZXRhaWxzCisJZm9yIChpID0gMDsgaSA8IHNfTWFpbkhlYWRlci5iX05mdW5jdGlvbnM7IGkrKykgeworCQkvLyBSZWFkIFR5cGUKKwkJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgMHgxMDAgKyAxMiArIHdfQ291bnQpOworCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0uYl9UeXBlID0gKEJZVEUpIHdfVGVtcCAmIDB4M0Y7CisJCXdfQ291bnQgPSB3X0NvdW50ICsgMjsKKwkJLy9SZWFkIEFkZHJlc3MKKwkJc19NYWluSGVhZGVyLnNfRnVuY3Rpb25zW2ldLndfQWRkcmVzcyA9CisJCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIDEyICsgd19Db3VudCk7CisJCXdfQ291bnQgPSB3X0NvdW50ICsgMjsKKwl9CisKKwkvLyBEaXNwbGF5IG1haW4gaGVhZGVyIGluZm8KKwlmb3IgKGkgPSAwOyBpIDwgc19NYWluSGVhZGVyLmJfTmZ1bmN0aW9uczsgaSsrKSB7CisKKwkJc3dpdGNoIChzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0uYl9UeXBlKSB7CisJCWNhc2UgRUVQUk9NX0RJR0lUQUxJTlBVVDoKKwkJCWlfRWVwcm9tUmVhZERpZ2l0YWxJbnB1dEhlYWRlcih3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCQkJc19NYWluSGVhZGVyLnNfRnVuY3Rpb25zW2ldLndfQWRkcmVzcywKKwkJCQkmc19EaWdpdGFsSW5wdXRIZWFkZXIpOworCQkJdGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWwgPQorCQkJCXNfRGlnaXRhbElucHV0SGVhZGVyLndfTmNoYW5uZWw7CisJCQlicmVhazsKKworCQljYXNlIEVFUFJPTV9ESUdJVEFMT1VUUFVUOgorCQkJaV9FZXByb21SZWFkRGlnaXRhbE91dHB1dEhlYWRlcih3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCQkJc19NYWluSGVhZGVyLnNfRnVuY3Rpb25zW2ldLndfQWRkcmVzcywKKwkJCQkmc19EaWdpdGFsT3V0cHV0SGVhZGVyKTsKKwkJCXRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsID0KKwkJCQlzX0RpZ2l0YWxPdXRwdXRIZWFkZXIud19OY2hhbm5lbDsKKwkJCXVpX1RlbXAgPSAweGZmZmZmZmZmOworCQkJdGhpc19ib2FyZC0+aV9Eb01heGRhdGEgPQorCQkJCXVpX1RlbXAgPj4gKDMyIC0gdGhpc19ib2FyZC0+aV9OYnJEb0NoYW5uZWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBFRVBST01fQU5BTE9HSU5QVVQ6CisJCQlpX0VlcHJvbVJlYWRBbmxvZ0lucHV0SGVhZGVyKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0ud19BZGRyZXNzLAorCQkJCSZzX0FuYWxvZ0lucHV0SGVhZGVyKTsKKwkJCWlmICghKHN0cmNtcCh0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lLCAiYXBjaTMyMDAiKSkpCisJCQkJdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWwgPQorCQkJCQlzX0FuYWxvZ0lucHV0SGVhZGVyLndfTmNoYW5uZWwgKiA0OworCQkJZWxzZQorCQkJCXRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsID0KKwkJCQkJc19BbmFsb2dJbnB1dEhlYWRlci53X05jaGFubmVsOworCQkJdGhpc19ib2FyZC0+aV9EbWEgPSBzX0FuYWxvZ0lucHV0SGVhZGVyLmJfSGFzRG1hOworCQkJdGhpc19ib2FyZC0+dWlfTWluQWNxdWlzaXRpb250aW1lTnMgPQorCQkJCShVSU5UKSBzX0FuYWxvZ0lucHV0SGVhZGVyLndfTWluQ29udmVydFRpbWluZyAqCisJCQkJMTAwMDsKKwkJCXRoaXNfYm9hcmQtPnVpX01pbkRlbGF5dGltZU5zID0KKwkJCQkoVUlOVCkgc19BbmFsb2dJbnB1dEhlYWRlci53X01pbkRlbGF5VGltaW5nICoKKwkJCQkxMDAwOworCQkJdWlfVGVtcCA9IDB4ZmZmZjsKKwkJCXRoaXNfYm9hcmQtPmlfQWlNYXhkYXRhID0KKwkJCQl1aV9UZW1wID4+ICgxNiAtCisJCQkJc19BbmFsb2dJbnB1dEhlYWRlci5iX1Jlc29sdXRpb24pOworCQkJYnJlYWs7CisKKwkJY2FzZSBFRVBST01fQU5BTE9HT1VUUFVUOgorCQkJaV9FZXByb21SZWFkQW5sb2dPdXRwdXRIZWFkZXIod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkJCXNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS53X0FkZHJlc3MsCisJCQkJJnNfQW5hbG9nT3V0cHV0SGVhZGVyKTsKKwkJCXRoaXNfYm9hcmQtPmlfTmJyQW9DaGFubmVsID0KKwkJCQlzX0FuYWxvZ091dHB1dEhlYWRlci53X05jaGFubmVsOworCQkJdWlfVGVtcCA9IDB4ZmZmZjsKKwkJCXRoaXNfYm9hcmQtPmlfQW9NYXhkYXRhID0KKwkJCQl1aV9UZW1wID4+ICgxNiAtCisJCQkJc19BbmFsb2dPdXRwdXRIZWFkZXIuYl9SZXNvbHV0aW9uKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRUVQUk9NX1RJTUVSOgorCQkJdGhpc19ib2FyZC0+aV9UaW1lciA9IDE7CS8vVGltZXIgc3ViZGV2aWNlIHByZXNlbnQKKwkJCWJyZWFrOworCisJCWNhc2UgRUVQUk9NX1dBVENIRE9HOgorCQkJdGhpc19ib2FyZC0+aV9UaW1lciA9IDE7CS8vVGltZXIgc3ViZGV2aWNlIHByZXNlbnQKKwkJCWJyZWFrOworCisJCWNhc2UgRUVQUk9NX1RJTUVSX1dBVENIRE9HX0NPVU5URVI6CisJCQl0aGlzX2JvYXJkLT5pX1RpbWVyID0gMTsJLy9UaW1lciBzdWJkZXZpY2UgcHJlc2VudAorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgOiBJTlQgaV9FZXByb21SZWFkRGlnaXRhbElucHV0SGVhZGVyKFdPUkQgCQkJCQkgfAorfAkJCXdfUENJQm9hcmRFZXByb21BZGRyZXNzLGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwJIHwKK3wJCQlXT1JEIHdfQWRkcmVzcyxzdHJfRGlnaXRhbElucHV0SGVhZGVyICpzX0hlYWRlcikJCSB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBEaWdpdGFsIElucHV0IEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgOiBQQ0kgZWVwcm9tIGFkZHJlc3MgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJICAgICAgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uICA6IFBDSSBDaGlwIFR5cGUuICAgICAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkJIHN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgKnNfSGVhZGVyOiBEaWdpdGEgSW5wdXQgSGVhZGVyICAgfAorfAkJCQkJCQkJCQkJCSAgIFBvaW50ZXIJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9FZXByb21SZWFkRGlnaXRhbElucHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfRGlnaXRhbElucHV0SGVhZGVyICogc19IZWFkZXIpCit7CisJV09SRCB3X1RlbXA7CisKKwkvLyByZWFkIG5iciBvZiBjaGFubmVscworCXNfSGVhZGVyLT53X05jaGFubmVsID0KKwkJd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkweDEwMCArIHdfQWRkcmVzcyArIDYpOworCisJLy8gaW50ZXJydXB0aWJsZSBvciBub3QKKwl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgd19BZGRyZXNzICsgOCk7CisJc19IZWFkZXItPmJfSW50ZXJydXB0aWJsZSA9IChCWVRFKSAod19UZW1wID4+IDcpICYgMHgwMTsKKworLy8gSG93IG1hbnkgaW50ZXJydXB0aWJsZSBsb2dpYworCXNfSGVhZGVyLT53X05pbnRlcnJ1cHRMb2dpYyA9CisJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJMHgxMDAgKyB3X0FkZHJlc3MgKyAxMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICA6IElOVCBpX0VlcHJvbVJlYWREaWdpdGFsT3V0cHV0SGVhZGVyKFdPUkQgCQkJCSB8Cit8CQkJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAkgfAorfAkJCVdPUkQgd19BZGRyZXNzLHN0cl9EaWdpdGFsT3V0cHV0SGVhZGVyICpzX0hlYWRlcikJICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBEaWdpdGFsIE91dHB1dCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgOiBQQ0kgZWVwcm9tIGFkZHJlc3MgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJICAgICAgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uICA6IFBDSSBDaGlwIFR5cGUuICAgICAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkJIHN0cl9EaWdpdGFsT3V0cHV0SGVhZGVyICpzX0hlYWRlcjogRGlnaXRhbCBPdXRwdXQgSGVhZGVyfAorfAkJCQkJCQkJCQkJICAgUG9pbnRlcgkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9FZXByb21SZWFkRGlnaXRhbE91dHB1dEhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCWNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgV09SRCB3X0FkZHJlc3MsCisJc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXIgKiBzX0hlYWRlcikKK3sKKy8vIFJlYWQgTmJyIGNoYW5uZWxzCisJc19IZWFkZXItPndfTmNoYW5uZWwgPQorCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCTB4MTAwICsgd19BZGRyZXNzICsgNik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgOiBJTlQgaV9FZXByb21SZWFkVGltZXJIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgfAorfAkJCWNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbixXT1JEIHdfQWRkcmVzcywJCQkJIHwKK3wJCQlzdHJfVGltZXJNYWluSGVhZGVyICpzX0hlYWRlcikJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgVGltZXIgb3IgV2F0Y2hkb2cgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBhZGRyZXNzICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiAgOiBQQ0kgQ2hpcCBUeXBlLiAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJCSBzdHJfVGltZXJNYWluSGVhZGVyICpzX0hlYWRlcjogVGltZXIgSGVhZGVyCQkJIHwKK3wJCQkJCQkJCQkJCSAgIFBvaW50ZXIJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfRWVwcm9tUmVhZFRpbWVySGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfVGltZXJNYWluSGVhZGVyICogc19IZWFkZXIpCit7CisKKwlXT1JEIGksIHdfU2l6ZSA9IDAsIHdfVGVtcDsKKworLy9SZWFkIE5vIG9mIFRpbWVyCisJc19IZWFkZXItPndfTnRpbWVyID0KKwkJd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkweDEwMCArIHdfQWRkcmVzcyArIDYpOworLy9SZWFkIGhlYWRlciBzaXplCisKKwlmb3IgKGkgPSAwOyBpIDwgc19IZWFkZXItPndfTnRpbWVyOyBpKyspIHsKKwkJc19IZWFkZXItPnNfVGltZXJEZXRhaWxzW2ldLndfSGVhZGVyU2l6ZSA9CisJCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkJMHgxMDAgKyB3X0FkZHJlc3MgKyA4ICsgd19TaXplICsgMCk7CisJCXdfVGVtcCA9IHdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCQkweDEwMCArIHdfQWRkcmVzcyArIDggKyB3X1NpemUgKyAyKTsKKworCQkvL1JlYWQgUmVzb2x1dGlvbgorCQlzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0uYl9SZXNvbHV0aW9uID0KKwkJCShCWVRFKSAod19UZW1wID4+IDEwKSAmIDB4M0Y7CisKKwkJLy9SZWFkIE1vZGUKKwkJc19IZWFkZXItPnNfVGltZXJEZXRhaWxzW2ldLmJfTW9kZSA9CisJCQkoQllURSkgKHdfVGVtcCA+PiA0KSAmIDB4M0Y7CisKKwkJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJCTB4MTAwICsgd19BZGRyZXNzICsgOCArIHdfU2l6ZSArIDQpOworCisJCS8vUmVhZCBNaW5UaW1pbmcKKwkJc19IZWFkZXItPnNfVGltZXJEZXRhaWxzW2ldLndfTWluVGltaW5nID0gKHdfVGVtcCA+PiA2KSAmIDB4M0ZGOworCisJCS8vUmVhZCBUaW1lYmFzZQorCQlzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0uYl9UaW1lQmFzZSA9IChCWVRFKSAod19UZW1wKSAmIDB4M0Y7CisJCXdfU2l6ZSArPSBzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0ud19IZWFkZXJTaXplOworCX0KKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgIDogSU5UIGlfRWVwcm9tUmVhZEFubG9nT3V0cHV0SGVhZGVyKFdPUkQgCQkJCQkgfAorfAkJCXdfUENJQm9hcmRFZXByb21BZGRyZXNzLGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwJIHwKK3wJCQlXT1JEIHdfQWRkcmVzcyxzdHJfQW5hbG9nT3V0cHV0SGVhZGVyICpzX0hlYWRlcikgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIE5hbG9nIE91dHB1dCAgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IFBDSSBlZXByb20gYWRkcmVzcyAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkgICAgICBjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24gIDogUENJIENoaXAgVHlwZS4gICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCQkgc3RyX0FuYWxvZ091dHB1dEhlYWRlciAqc19IZWFkZXI6QW5sb2cgT3V0cHV0IEhlYWRlciAgICB8Cit8CQkJCQkJCQkJCQkgICBQb2ludGVyCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfRWVwcm9tUmVhZEFubG9nT3V0cHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfQW5hbG9nT3V0cHV0SGVhZGVyICogc19IZWFkZXIpCit7CisJV09SRCB3X1RlbXA7CisJLy8gTm8gb2YgY2hhbm5lbHMgZm9yIDFzdCBoYXJkIGNvbXBvbmVudAorCXdfVGVtcCA9IHdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgMHgxMDAgKyB3X0FkZHJlc3MgKyAxMCk7CisJc19IZWFkZXItPndfTmNoYW5uZWwgPSAod19UZW1wID4+IDQpICYgMHgwM0ZGOworCS8vIFJlc29sdXRpb24gZm9yIDFzdCBoYXJkIGNvbXBvbmVudAorCXdfVGVtcCA9IHdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgMHgxMDAgKyB3X0FkZHJlc3MgKyAxNik7CisJc19IZWFkZXItPmJfUmVzb2x1dGlvbiA9IChCWVRFKSAod19UZW1wID4+IDgpICYgMHhGRjsKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICA6IElOVCBpX0VlcHJvbVJlYWRBbmxvZ0lucHV0SGVhZGVyKFdPUkQgCQkJCQkgfAorfAkJCXdfUENJQm9hcmRFZXByb21BZGRyZXNzLGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgICAgIHwKK3wJCQlXT1JEIHdfQWRkcmVzcyxzdHJfQW5hbG9nSW5wdXRIZWFkZXIgKnNfSGVhZGVyKSAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIE5hbG9nIE91dHB1dCAgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IFBDSSBlZXByb20gYWRkcmVzcyAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkgICAgICBjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24gIDogUENJIENoaXAgVHlwZS4gICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCQkgc3RyX0FuYWxvZ0lucHV0SGVhZGVyICpzX0hlYWRlcjpBbmxvZyBJbnB1dCBIZWFkZXIgICAgICB8Cit8CQkJCQkJCQkJCQkgICBQb2ludGVyCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLy8gUmVhZHMgb25seSBmb3IgT05FICBoYXJkd2FyZSBjb21wb25lbnQKK0lOVCBpX0VlcHJvbVJlYWRBbmxvZ0lucHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfQW5hbG9nSW5wdXRIZWFkZXIgKiBzX0hlYWRlcikKK3sKKwlXT1JEIHdfVGVtcCwgd19PZmZzZXQ7CisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIDEwKTsKKwlzX0hlYWRlci0+d19OY2hhbm5lbCA9ICh3X1RlbXAgPj4gNCkgJiAweDAzRkY7CisJc19IZWFkZXItPndfTWluQ29udmVydFRpbWluZyA9CisJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJMHgxMDAgKyB3X0FkZHJlc3MgKyAxNik7CisJc19IZWFkZXItPndfTWluRGVsYXlUaW1pbmcgPQorCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCTB4MTAwICsgd19BZGRyZXNzICsgMzApOworCXdfVGVtcCA9IHdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgMHgxMDAgKyB3X0FkZHJlc3MgKyAyMCk7CisJc19IZWFkZXItPmJfSGFzRG1hID0gKHdfVGVtcCA+PiAxMykgJiAweDAxOwkvLyB3aGV0aGVyIGRtYSBwcmVzZW50IG9yIG5vdAorCisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIDcyKTsJLy8gcmVhZGluZyBZCisJd19UZW1wID0gd19UZW1wICYgMHgwMEZGOworCWlmICh3X1RlbXApCQkvL1k+MAorCXsKKwkJd19PZmZzZXQgPSA3NCArICgyICogd19UZW1wKSArICgxMCAqICgxICsgKHdfVGVtcCAvIDE2KSkpOwkvLyBvZmZzZXQgb2YgZmlyc3QgYW5hbG9nIGlucHV0IHNpbmdsZSBoZWFkZXIKKwkJd19PZmZzZXQgPSB3X09mZnNldCArIDI7CS8vIHJlc29sdXRpb24KKwl9IGVsc2UJCQkvL1k9MAorCXsKKwkJd19PZmZzZXQgPSA3NDsKKwkJd19PZmZzZXQgPSB3X09mZnNldCArIDI7CS8vIHJlc29sdXRpb24KKwl9CisKKy8vIHJlYWQgUmVzb2x1dGlvbgorCXdfVGVtcCA9IHdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgMHgxMDAgKyB3X0FkZHJlc3MgKyB3X09mZnNldCk7CisJc19IZWFkZXItPmJfUmVzb2x1dGlvbiA9IHdfVGVtcCAmIDB4MDAxRjsJLy8gbGFzdCA1IGJpdHMKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hbWNjX3M1OTMzXzU4LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FtY2NfczU5MzNfNTguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTdkYzA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hbWNjX3M1OTMzXzU4LmgKQEAgLTAsMCArMSw0NTcgQEAKKy8qCisJTW9kaWZpZWQgYnkgdW1lc2ggb24gMTZ0aCBtYXkgMjAwMQorCU1vZGlmaWVkIGJ5IHNhcmF0aCBvbiAyMm5kIG1heSAyMDAxCisqLworCisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2FtY2NfczU5MzNfdl81OC5oCisKKyAgICBTdHVmZiBmb3IgQU1DQyBTNTkzMyBQQ0kgQ29udHJvbGxlcgorCisgICAgQXV0aG9yOiBNaWNoYWwgRG9iZXMgPG1hamtsQHRlc25ldC5jej4KKworICAgIEluc3BpcmF0ZWQgZnJvbSBnZW5lcmFsLXB1cnBvc2UgQU1DQyBTNTkzMyBQQ0kgTWF0Y2htYWtlciBkcml2ZXIKKyAgICBtYWRlIGJ5IEFuZHJlYSBDaXN0ZXJuaW5vICA8YWNpc3RlckBwY2FwZTEucGkuaW5mbi5pdD4KKyAgICBhbmQgYXMgcmVzdWx0IG9mIGVzcGlvbmFnZSBmcm9tIE1JVEUgY29kZSBtYWRlIGJ5IERhdmlkIEEuIFNjaGxlZWYuCisgICAgVGhhbmtzIHRvIEFNQ0MgZm9yIHRoZWlyIG9uLWxpbmUgZG9jdW1lbnRhdGlvbiBhbmQgYnVzIG1hc3RlciBETUEKKyAgICBleGFtcGxlLgorKi8KKworI2lmbmRlZiBfQU1DQ19TNTkzM19IXworI2RlZmluZSBfQU1DQ19TNTkzM19IXworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSAiLi4vLi4vY29tZWRpZGV2LmgiCisKKyNpZmRlZiBQQ0lfU1VQUE9SVF9WRVIxCisjZXJyb3IgICAgU29ycnksIG5vIHN1cHBvcnQgZm9yIDIuMS41NSBhbmQgb2xkZXIhIDotKCgoKAorI2VuZGlmCisKKy8qKioqKioqKioqKkFkZGVkIGJ5IHNhcmF0aCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEFQQ0kzMTIwCisKKyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRklGT19BRFZBTkNFX09OX0JZVEVfMiAgICAgMHgyMDAwMDAwMAkvLyB3cml0dGVuIG9uIGJhc2UwCisKKyNkZWZpbmUgQU1XRU5fRU5BQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMgkvLyBhZGRlZCBmb3Igc3RlcCA2IGRtYSB3cml0dGVuIG9uIGJhc2UyCisjZGVmaW5lIEEyUF9GSUZPX1dSSVRFX0VOQUJMRSAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBBR0NTVFNfVENfRU5BQkxFCQkgICAweDEwMDAwMDAwCS8vIEFkZGVkIGZvciB0cmFuc2ZlciBjb3VudCBlbmFibGUgYml0CisKKy8vICBBRERPTiBSRUxBVEVEIEFERElUSU9OUworLy8gQ29uc3RhbnQKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fTE9XICAgICAgIDB4MDAKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fSElHSCAgICAgIDB4MTIwMAorI2RlZmluZSAgICAgQVBDSTMxMjBfQTJQX0ZJRk9fTUFOQUdFTUVOVCAgICAgICAgICAgICAgMHgwNDAwMDQwMEwKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FNV0VOX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0EyUF9GSUZPX1dSSVRFX0VOQUJMRSAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0ZJRk9fQURWQU5DRV9PTl9CWVRFXzIgICAgICAgICAgIDB4MjAwMDAwMDBMCisjZGVmaW5lICAgICBBUENJMzEyMF9FTkFCTEVfV1JJVEVfVENfSU5UICAgICAgICAgICAgICAweDAwMDA0MDAwTAorI2RlZmluZSAgICAgQVBDSTMxMjBfQ0xFQVJfV1JJVEVfVENfSU5UICAgICAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0RJU0FCTEVfQU1XRU5fQU5EX0EyUF9GSUZPX1dSSVRFIDB4MAorI2RlZmluZSAgICAgQVBDSTMxMjBfRElTQUJMRV9CVVNfTUFTVEVSX0FERF9PTiAgICAgICAgMHgwCisjZGVmaW5lICAgICBBUENJMzEyMF9ESVNBQkxFX0JVU19NQVNURVJfUENJICAgICAgICAgICAweDAKKworIC8vIEFERF9PTiA6OjogdGhpcyBuZWVkZWQgc2luY2UgYXBjaSBzdXBwb3J0cyAxNiBiaXQgaW50ZXJmYWNlIHRvIGFkZCBvbgorI2RlZmluZSAgICAgQVBDSTMxMjBfQUREX09OX0FHQ1NUU19MT1cgICAgICAgMHgzQworI2RlZmluZSAgICAgQVBDSTMxMjBfQUREX09OX0FHQ1NUU19ISUdIICAgICAgQVBDSTMxMjBfQUREX09OX0FHQ1NUU19MT1cgKyAyCisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fTVdBUl9MT1cgICAgICAgICAweDI0CisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fTVdBUl9ISUdIICAgICAgICBBUENJMzEyMF9BRERfT05fTVdBUl9MT1cgKyAyCisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fTVdUQ19MT1cgICAgICAgICAweDA1OAorI2RlZmluZSAgICAgQVBDSTMxMjBfQUREX09OX01XVENfSElHSCAgICAgICAgQVBDSTMxMjBfQUREX09OX01XVENfTE9XICsgMgorCisvLyBBTUNDCisjZGVmaW5lICAgICBBUENJMzEyMF9BTUNDX09QX01DU1IgICAgICAgICAgICAweDNDCisjZGVmaW5lICAgICBBUENJMzEyMF9BTUNDX09QX1JFR19JTlRDU1IgICAgICAweDM4CisKKy8qKioqKioqZnJvbSBoZXJlIGFsbCB1cHdhcmQgZGVmaW5pdGlvbnMgYXJlIGFkZGVkIGJ5IHNhcmF0aCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgT3BlcmF0aW9uIFJlZ2lzdGVyIE9mZnNldHMgLSBQQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfT01CMSAgICAgICAgIDB4MDAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfT01CMiAgICAgICAgIDB4MDQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfT01CMyAgICAgICAgIDB4MDgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfT01CNCAgICAgICAgIDB4MGMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CMSAgICAgICAgIDB4MTAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CMiAgICAgICAgIDB4MTQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CMyAgICAgICAgIDB4MTgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CNCAgICAgICAgIDB4MWMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfRklGTyAgICAgICAgIDB4MjAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTVdBUiAgICAgICAgIDB4MjQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTVdUQyAgICAgICAgIDB4MjgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTVJBUiAgICAgICAgIDB4MmMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTVJUQyAgICAgICAgIDB4MzAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUJFRiAgICAgICAgIDB4MzQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU5UQ1NSICAgICAgIDB4MzgKKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX0lOVENTUl9TUkMgIChBTUNDX09QX1JFR19JTlRDU1IgKyAyKQkvKiBJTlQgc291cmNlICovCisjZGVmaW5lICBBTUNDX09QX1JFR19JTlRDU1JfRkVDICAoQU1DQ19PUF9SRUdfSU5UQ1NSICsgMykJLyogRklGTyBjdHJsICovCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01DU1IgICAgICAgICAweDNjCisjZGVmaW5lICBBTUNDX09QX1JFR19NQ1NSX05WREFUQSAoQU1DQ19PUF9SRUdfTUNTUiArIDIpCS8qIERhdGEgaW4gYnl0ZSAyICovCisjZGVmaW5lICBBTUNDX09QX1JFR19NQ1NSX05WQ01EICAoQU1DQ19PUF9SRUdfTUNTUiArIDMpCS8qIENvbW1hbmQgaW4gYnl0ZSAzICovCisKKyNkZWZpbmUgQU1DQ19GSUZPX0RFUFRIX0RXT1JECTgKKyNkZWZpbmUgQU1DQ19GSUZPX0RFUFRIX0JZVEVTCSg4ICogc2l6ZW9mICh1MzIpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgT3BlcmF0aW9uIFJlZ2lzdGVycyBTaXplIC0gUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfU0laRQkgNjQJLyogaW4gYnl0ZXMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIE9wZXJhdGlvbiBSZWdpc3RlciBPZmZzZXRzIC0gQWRkLW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIxICAgICAgICAgMHgwMAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMiAgICAgICAgIDB4MDQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjMgICAgICAgICAweDA4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUI0ICAgICAgICAgMHgwYworI2RlZmluZSBBTUNDX09QX1JFR19BT01CMSAgICAgICAgIDB4MTAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjIgICAgICAgICAweDE0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIzICAgICAgICAgMHgxOAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CNCAgICAgICAgIDB4MWMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUZJRk8gICAgICAgICAweDIwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNV0FSICAgICAgICAgMHgyNAorI2RlZmluZSBBTUNDX09QX1JFR19BUFRBICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQVBURCAgICAgICAgICAweDJjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNUkFSICAgICAgICAgMHgzMAorI2RlZmluZSBBTUNDX09QX1JFR19BTUJFRiAgICAgICAgIDB4MzQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlOVCAgICAgICAgICAweDM4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FHQ1NUUyAgICAgICAgMHgzYworI2RlZmluZSBBTUNDX09QX1JFR19BTVdUQyAgICAgICAgIDB4NTgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1SVEMgICAgICAgICAweDVjCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIEFkZC1vbiBHZW5lcmFsIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBR0NTVFNfQ09OVFJPTF9NQVNLCTB4ZmZmZmYwMDAKKyNkZWZpbmUgIEFHQ1NUU19OVl9BQ0NfTUFTSwkweGUwMDAwMDAwCisjZGVmaW5lICBBR0NTVFNfUkVTRVRfTUFTSwkweDBlMDAwMDAwCisjZGVmaW5lICBBR0NTVFNfTlZfREFfTUFTSwkweDAwZmYwMDAwCisjZGVmaW5lICBBR0NTVFNfQklTVF9NQVNLCTB4MDAwMGYwMDAKKyNkZWZpbmUgQUdDU1RTX1NUQVRVU19NQVNLCTB4MDAwMDAwZmYKKyNkZWZpbmUgIEFHQ1NUU19UQ1pFUk9fTUFTSwkweDAwMDAwMGMwCisjZGVmaW5lICBBR0NTVFNfRklGT19TVF9NQVNLCTB4MDAwMDAwM2YKKworI2RlZmluZSBBR0NTVFNfUkVTRVRfTUJGTEFHUwkweDA4MDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9QMkFfRklGTwkweDA0MDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9BMlBfRklGTwkweDAyMDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9GSUZPUwkoQUdDU1RTX1JFU0VUX0EyUF9GSUZPIHwgQUdDU1RTX1JFU0VUX1AyQV9GSUZPKQorCisjZGVmaW5lIEFHQ1NUU19BMlBfVENPVU5UCTB4MDAwMDAwODAKKyNkZWZpbmUgQUdDU1RTX1AyQV9UQ09VTlQJMHgwMDAwMDA0MAorCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfRU1QVFkJMHgwMDAwMDAyMAorI2RlZmluZSBBR0NTVFNfRlNfUDJBX0hBTEYJMHgwMDAwMDAxMAorI2RlZmluZSBBR0NTVFNfRlNfUDJBX0ZVTEwJMHgwMDAwMDAwOAorCisjZGVmaW5lIEFHQ1NUU19GU19BMlBfRU1QVFkJMHgwMDAwMDAwNAorI2RlZmluZSBBR0NTVFNfRlNfQTJQX0hBTEYJMHgwMDAwMDAwMgorI2RlZmluZSBBR0NTVFNfRlNfQTJQX0ZVTEwJMHgwMDAwMDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgLSBBZGQtb24gSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBSU5UX0lOVF9NQVNLCQkweDAwZmYwMDAwCisjZGVmaW5lIEFJTlRfU0VMX01BU0sJCTB4MDAwMGZmZmYKKyNkZWZpbmUgIEFJTlRfSVNfRU5TRUxfTUFTSwkweDAwMDAxZjFmCisKKyNkZWZpbmUgQUlOVF9JTlRfQVNTRVJURUQJMHgwMDgwMDAwMAorI2RlZmluZSBBSU5UX0JNX0VSUk9SCQkweDAwMjAwMDAwCisjZGVmaW5lIEFJTlRfQklTVF9JTlQJCTB4MDAxMDAwMDAKKworI2RlZmluZSBBSU5UX1JUX0NPTVBMRVRFCTB4MDAwODAwMDAKKyNkZWZpbmUgQUlOVF9XVF9DT01QTEVURQkweDAwMDQwMDAwCisKKyNkZWZpbmUgQUlOVF9PVVRfTUJfSU5UCQkweDAwMDIwMDAwCisjZGVmaW5lIEFJTlRfSU5fTUJfSU5UCQkweDAwMDEwMDAwCisKKyNkZWZpbmUgQUlOVF9SRUFEX0NPTVBMCQkweDAwMDA4MDAwCisjZGVmaW5lIEFJTlRfV1JJVEVfQ09NUEwJMHgwMDAwNDAwMAorCisjZGVmaW5lIEFJTlRfT01CX0VOQUJMRSAJMHgwMDAwMTAwMAorI2RlZmluZSBBSU5UX09NQl9TRUxFQ1QgCTB4MDAwMDBjMDAKKyNkZWZpbmUgQUlOVF9PTUJfQllURQkJMHgwMDAwMDMwMAorCisjZGVmaW5lIEFJTlRfSU1CX0VOQUJMRSAJMHgwMDAwMDAxMAorI2RlZmluZSBBSU5UX0lNQl9TRUxFQ1QgCTB4MDAwMDAwMGMKKyNkZWZpbmUgQUlOVF9JTUJfQllURQkJMHgwMDAwMDAwMworCisvKiBFbmFibGUgQnVzIE1hc3RlcmluZyAqLworI2RlZmluZSBFTl9BMlBfVFJBTlNGRVJTCTB4MDAwMDA0MDAKKy8qIEZJRk8gRmxhZyBSZXNldCAqLworI2RlZmluZSBSRVNFVF9BMlBfRkxBR1MJCTB4MDQwMDAwMDBMCisvKiBGSUZPIFJlbGF0aXZlIFByaW9yaXR5ICovCisjZGVmaW5lIEEyUF9ISV9QUklPUklUWQkJMHgwMDAwMDEwMEwKKy8qIElkZW50aWZ5IEludGVycnVwdCBTb3VyY2VzICovCisjZGVmaW5lIEFOWV9TNTkzWF9JTlQJCTB4MDA4MDAwMDBMCisjZGVmaW5lIFJFQURfVENfSU5UCQkweDAwMDgwMDAwTAorI2RlZmluZSBXUklURV9UQ19JTlQJCTB4MDAwNDAwMDBMCisjZGVmaW5lIElOX01CX0lOVAkJMHgwMDAyMDAwMEwKKyNkZWZpbmUgTUFTVEVSX0FCT1JUX0lOVAkweDAwMTAwMDAwTAorI2RlZmluZSBUQVJHRVRfQUJPUlRfSU5UCTB4MDAyMDAwMDBMCisjZGVmaW5lIEJVU19NQVNURVJfSU5UCQkweDAwMjAwMDAwTAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgeworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICpuZXh0OworCWludCB1c2VkOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJdW5zaWduZWQgc2hvcnQgdmVuZG9yOworCXVuc2lnbmVkIHNob3J0IGRldmljZTsKKwl1bnNpZ25lZCBpbnQgbWFzdGVyOworCXVuc2lnbmVkIGNoYXIgcGNpX2J1czsKKwl1bnNpZ25lZCBjaGFyIHBjaV9zbG90OworCXVuc2lnbmVkIGNoYXIgcGNpX2Z1bmM7CisJdW5zaWduZWQgaW50IGlvX2FkZHJbNV07CisJdW5zaWduZWQgaW50IGlycTsKK307CisKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjX2RldmljZXM7CS8vIHB0ciB0byByb290IGxpc3Qgb2YgYWxsIGFtY2MgZGV2aWNlcworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCB2X3BjaV9jYXJkX2xpc3RfaW5pdCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yLCBjaGFyIGRpc3BsYXkpOwordm9pZCB2X3BjaV9jYXJkX2xpc3RfY2xlYW51cCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yKTsKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfZmluZF9mcmVlX3BjaV9jYXJkX2J5X2RldmljZSh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQKKwkJCQkJCSAgICAgICBkZXZpY2VfaWQpOworaW50IGlfZmluZF9mcmVlX3BjaV9jYXJkX2J5X3Bvc2l0aW9uKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwY2lfc2xvdCwKKwkJCQkgICAgIHN0cnVjdCBwY2lsc3Rfc3RydWN0ICoqY2FyZCk7CitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqcHRyX3NlbGVjdF9hbmRfYWxsb2NfcGNpX2NhcmQodW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBwY2lfYnVzLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90KTsKKworaW50IGlfcGNpX2NhcmRfYWxsb2Moc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MpOworaW50IGlfcGNpX2NhcmRfZnJlZShzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYyk7Cit2b2lkIHZfcGNpX2NhcmRfbGlzdF9kaXNwbGF5KHZvaWQpOworaW50IGlfcGNpX2NhcmRfZGF0YShzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywKKwkJICAgIHVuc2lnbmVkIGNoYXIgKnBjaV9idXMsIHVuc2lnbmVkIGNoYXIgKnBjaV9zbG90LAorCQkgICAgdW5zaWduZWQgY2hhciAqcGNpX2Z1bmMsIHVuc2lnbmVkIHNob3J0ICppb19hZGRyLAorCQkgICAgdW5zaWduZWQgc2hvcnQgKmlycSwgdW5zaWduZWQgc2hvcnQgKm1hc3Rlcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBidWlsZCBsaXN0IG9mIGFtY2MgY2FyZHMgaW4gdGhpcyBzeXN0ZW0gKi8KK3ZvaWQgdl9wY2lfY2FyZF9saXN0X2luaXQodW5zaWduZWQgc2hvcnQgcGNpX3ZlbmRvciwgY2hhciBkaXNwbGF5KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpsYXN0OworCWludCBpOworCisJYW1jY19kZXZpY2VzID0gTlVMTDsKKwlsYXN0ID0gTlVMTDsKKworCXBjaV9mb3JfZWFjaF9kZXYocGNpZGV2KSB7CisJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBwY2lfdmVuZG9yKSB7CisJCQlhbWNjID0ga21hbGxvYyhzaXplb2YoKmFtY2MpLCBHRlBfS0VSTkVMKTsKKwkJCW1lbXNldChhbWNjLCAwLCBzaXplb2YoKmFtY2MpKTsKKworCQkJYW1jYy0+cGNpZGV2ID0gcGNpZGV2OworCQkJaWYgKGxhc3QpIHsKKwkJCQlsYXN0LT5uZXh0ID0gYW1jYzsKKwkJCX0gZWxzZSB7CisJCQkJYW1jY19kZXZpY2VzID0gYW1jYzsKKwkJCX0KKwkJCWxhc3QgPSBhbWNjOworCisJCQlhbWNjLT52ZW5kb3IgPSBwY2lkZXYtPnZlbmRvcjsKKwkJCWFtY2MtPmRldmljZSA9IHBjaWRldi0+ZGV2aWNlOworI2lmIDAKKwkJCWFtY2MtPm1hc3RlciA9IHBjaWRldi0+bWFzdGVyOwkvLyBob3cgZ2V0IHRoaXMgaW5mb3JtYXRpb24gdW5kZXIgMi40IGtlcm5lbHM/CisjZW5kaWYKKwkJCWFtY2MtPnBjaV9idXMgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCQkJYW1jYy0+cGNpX3Nsb3QgPSBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKTsKKwkJCWFtY2MtPnBjaV9mdW5jID0gUENJX0ZVTkMocGNpZGV2LT5kZXZmbik7CisJCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQkJCWFtY2MtPmlvX2FkZHJbaV0gPQorCQkJCSAgICBwY2lkZXYtPnJlc291cmNlW2ldLnN0YXJ0ICYgfjNVTDsKKwkJCWFtY2MtPmlycSA9IHBjaWRldi0+aXJxOworCQl9CisJfQorCisJaWYgKGRpc3BsYXkpCisJCXZfcGNpX2NhcmRfbGlzdF9kaXNwbGF5KCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZnJlZSB1cCBsaXN0IG9mIGFtY2MgY2FyZHMgaW4gdGhpcyBzeXN0ZW0gKi8KK3ZvaWQgdl9wY2lfY2FyZF9saXN0X2NsZWFudXAodW5zaWduZWQgc2hvcnQgcGNpX3ZlbmRvcikKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKm5leHQ7CisKKwlmb3IgKGFtY2MgPSBhbWNjX2RldmljZXM7IGFtY2M7IGFtY2MgPSBuZXh0KSB7CisJCW5leHQgPSBhbWNjLT5uZXh0OworCQlrZnJlZShhbWNjKTsKKwl9CisKKwlhbWNjX2RldmljZXMgPSBOVUxMOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGZpbmQgZmlyc3QgdW51c2VkIGNhcmQgd2l0aCB0aGlzIGRldmljZV9pZCAqLworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKnB0cl9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpuZXh0OworCisJZm9yIChhbWNjID0gYW1jY19kZXZpY2VzOyBhbWNjOyBhbWNjID0gbmV4dCkgeworCQluZXh0ID0gYW1jYy0+bmV4dDsKKwkJaWYgKCghYW1jYy0+dXNlZCkgJiYgKGFtY2MtPmRldmljZSA9PSBkZXZpY2VfaWQpCisJCSAgICAmJiAoYW1jYy0+dmVuZG9yID09IHZlbmRvcl9pZCkpCisJCQlyZXR1cm4gYW1jYzsKKworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGZpbmQgY2FyZCBvbiByZXF1ZXN0ZWQgcG9zaXRpb24gKi8KK2ludCBpX2ZpbmRfZnJlZV9wY2lfY2FyZF9ieV9wb3NpdGlvbih1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQsCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwY2lfYnVzLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcGNpX3Nsb3QsCisJCQkJICAgICBzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqKmNhcmQpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpuZXh0OworCisJKmNhcmQgPSBOVUxMOworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCWlmICgoYW1jYy0+dmVuZG9yID09IHZlbmRvcl9pZCkgJiYgKGFtY2MtPmRldmljZSA9PSBkZXZpY2VfaWQpCisJCSAgICAmJiAoYW1jYy0+cGNpX2J1cyA9PSBwY2lfYnVzKQorCQkgICAgJiYgKGFtY2MtPnBjaV9zbG90ID09IHBjaV9zbG90KSkgeworCQkJaWYgKCEoYW1jYy0+dXNlZCkpIHsKKwkJCQkqY2FyZCA9IGFtY2M7CisJCQkJcmV0dXJuIDA7CS8vIG9rLCBjYXJkIGlzIGZvdW5kCisJCQl9IGVsc2UgeworCQkJCXJ0X3ByaW50aworCQkJCSAgICAoIiAtIFxuQ2FyZCBvbiByZXF1ZXN0ZWQgcG9zaXRpb24gaXMgdXNlZCBiOnMgJWQ6JWQhXG4iLAorCQkJCSAgICAgcGNpX2J1cywgcGNpX3Nsb3QpOworCQkJCXJldHVybiAyOwkvLyBjYXJkIGV4aXN0IGJ1dCBpcyB1c2VkCisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMTsJCS8vIG5vIGNhcmQgZm91bmQKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBtYXJrIGNhcmQgYXMgdXNlZCAqLworaW50IGlfcGNpX2NhcmRfYWxsb2Moc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MpCit7CisJaWYgKCFhbWNjKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYW1jYy0+dXNlZCkKKwkJcmV0dXJuIDE7CisJYW1jYy0+dXNlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbWFyayBjYXJkIGFzIGZyZWUgKi8KK2ludCBpX3BjaV9jYXJkX2ZyZWUoc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MpCit7CisJaWYgKCFhbWNjKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWFtY2MtPnVzZWQpCisJCXJldHVybiAxOworCWFtY2MtPnVzZWQgPSAwOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGRpc3BsYXkgbGlzdCBvZiBmb3VuZCBjYXJkcyAqLwordm9pZCB2X3BjaV9jYXJkX2xpc3RfZGlzcGxheSh2b2lkKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCXByaW50aygiTGlzdCBvZiBwY2kgY2FyZHNcbiIpOworCXByaW50aygiYnVzOnNsb3Q6ZnVuYyB2ZW5kb3IgZGV2aWNlIG1hc3RlciBpb19hbWNjIGlvX2RhcSBpcnEgdXNlZFxuIik7CisKKwlmb3IgKGFtY2MgPSBhbWNjX2RldmljZXM7IGFtY2M7IGFtY2MgPSBuZXh0KSB7CisJCW5leHQgPSBhbWNjLT5uZXh0OworCQlwcmludGsKKwkJICAgICgiJTJkICAgJTJkICAgJTJkICAweCU0eCAweCU0eCAgICUzcyAgIDB4JTR4IDB4JTR4ICAlMmQgICUyZFxuIiwKKwkJICAgICBhbWNjLT5wY2lfYnVzLCBhbWNjLT5wY2lfc2xvdCwgYW1jYy0+cGNpX2Z1bmMsCisJCSAgICAgYW1jYy0+dmVuZG9yLCBhbWNjLT5kZXZpY2UsIGFtY2MtPm1hc3RlciA/ICJ5ZXMiIDogIm5vIiwKKwkJICAgICBhbWNjLT5pb19hZGRyWzBdLCBhbWNjLT5pb19hZGRyWzJdLCBhbWNjLT5pcnEsIGFtY2MtPnVzZWQpOworCisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHJldHVybiBhbGwgY2FyZCBpbmZvcm1hdGlvbiBmb3IgZHJpdmVyICovCitpbnQgaV9wY2lfY2FyZF9kYXRhKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLAorCQkgICAgdW5zaWduZWQgY2hhciAqcGNpX2J1cywgdW5zaWduZWQgY2hhciAqcGNpX3Nsb3QsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfZnVuYywgdW5zaWduZWQgc2hvcnQgKmlvX2FkZHIsCisJCSAgICB1bnNpZ25lZCBzaG9ydCAqaXJxLCB1bnNpZ25lZCBzaG9ydCAqbWFzdGVyKQoreworCWludCBpOworCisJaWYgKCFhbWNjKQorCQlyZXR1cm4gLTE7CisJKnBjaV9idXMgPSBhbWNjLT5wY2lfYnVzOworCSpwY2lfc2xvdCA9IGFtY2MtPnBjaV9zbG90OworCSpwY2lfZnVuYyA9IGFtY2MtPnBjaV9mdW5jOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWlvX2FkZHJbaV0gPSBhbWNjLT5pb19hZGRyW2ldOworCSppcnEgPSBhbWNjLT5pcnE7CisJKm1hc3RlciA9IGFtY2MtPm1hc3RlcjsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBzZWxlY3QgYW5kIGFsbG9jIGNhcmQgKi8KK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZCh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgcGNpX3Nsb3QpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmNhcmQ7CisKKwlpZiAoKHBjaV9idXMgPCAxKSAmIChwY2lfc2xvdCA8IDEpKSB7CS8vIHVzZSBhdXRvZGV0ZWN0aW9uCisJCWlmICgoY2FyZCA9IHB0cl9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHZlbmRvcl9pZCwKKwkJCQkJCQkgICAgIGRldmljZV9pZCkpID09CisJCSAgICBOVUxMKSB7CisJCQlydF9wcmludGsoIiAtIFVudXNlZCBjYXJkIG5vdCBmb3VuZCBpbiBzeXN0ZW0hXG4iKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChpX2ZpbmRfZnJlZV9wY2lfY2FyZF9ieV9wb3NpdGlvbih2ZW5kb3JfaWQsIGRldmljZV9pZCwKKwkJCQkJCQkgcGNpX2J1cywgcGNpX3Nsb3QsCisJCQkJCQkJICZjYXJkKSkgeworCQljYXNlIDE6CisJCQlydF9wcmludGsKKwkJCSAgICAoIiAtIENhcmQgbm90IGZvdW5kIG9uIHJlcXVlc3RlZCBwb3NpdGlvbiBiOnMgJWQ6JWQhXG4iLAorCQkJICAgICBwY2lfYnVzLCBwY2lfc2xvdCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJY2FzZSAyOgorCQkJcnRfcHJpbnRrCisJCQkgICAgKCIgLSBDYXJkIG9uIHJlcXVlc3RlZCBwb3NpdGlvbiBpcyB1c2VkIGI6cyAlZDolZCFcbiIsCisJCQkgICAgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJaWYgKGlfcGNpX2NhcmRfYWxsb2MoY2FyZCkgIT0gMCkgeworCQlydF9wcmludGsoIiAtIENhbid0IGFsbG9jYXRlIGNhcmQhXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGNhcmQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9BUENJMTcxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9BUENJMTcxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODkyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmMKQEAgLTAsMCArMSwxMjY1IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTE3MTAgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kxNzEwLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0xNzEwICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgImh3ZHJ2X0FQQ0kxNzEwLmgiCisjaW5jbHVkZSAiQVBDSTE3MTBfSW5wX2NwdC5jIgorCisjaW5jbHVkZSAiQVBDSTE3MTBfU3NpLmMiCisjaW5jbHVkZSAiQVBDSTE3MTBfVG9yLmMiCisjaW5jbHVkZSAiQVBDSTE3MTBfVHRsLmMiCisjaW5jbHVkZSAiQVBDSTE3MTBfRGlnX2lvLmMiCisjaW5jbHVkZSAiQVBDSTE3MTBfODJ4NTQuYyIKKyNpbmNsdWRlICJBUENJMTcxMF9DaHJvbm8uYyIKKyNpbmNsdWRlICJBUENJMTcxMF9Qd20uYyIKKyNpbmNsdWRlICJBUENJMTcxMF9JTkNDUFQuYyIKKwordm9pZCBpX0FERElfQXR0YWNoUENJMTcxMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbl9zdWJkZXZpY2VzID0gOTsKKworCS8vVXBkYXRlLTAuNy41Ny0+MC43LjY4ZGV2LT5uX3N1YmRldmljZXMgPSA5OworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkKKwkJcmV0dXJuOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgVGltZXIgU3ViZGV2aWNlIFN0cnVjdHVyZXMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9USU1FUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gMzsKKwlzLT5tYXhkYXRhID0gMDsKKwlzLT5sZW5fY2hhbmxpc3QgPSAzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl93cml0ZSA9IGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZVRpbWVyOworCXMtPmluc25fcmVhZCA9IGlfQVBDSTE3MTBfSW5zblJlYWRBbGxUaW1lclZhbHVlOworCXMtPmluc25fY29uZmlnID0gaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRpbWVyOworCXMtPmluc25fYml0cyA9IGlfQVBDSTE3MTBfSW5zbkJpdHNUaW1lcjsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIERJTyBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNzsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA3OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdEaWdpdGFsSU87CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZERpZ2l0YWxJT0NobFZhbHVlOworCXMtPmluc25fYml0cyA9IGlfQVBDSTE3MTBfSW5zbkJpdHNEaWdpdGFsSU9Qb3J0T25PZmY7CisJcy0+aW5zbl93cml0ZSA9IGlfQVBDSTE3MTBfSW5zbldyaXRlRGlnaXRhbElPQ2hsT25PZmY7CisKKwkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBDaHJvbm8gU3ViZGV2aWNlIFN0cnVjdHVyZXMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DSFJPTk87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDA7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fd3JpdGUgPSBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVDaHJvbm87CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZENocm9ubzsKKwlzLT5pbnNuX2NvbmZpZyA9IGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRDaHJvbm87CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c0Nocm9ub0RpZ2l0YWxJTzsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFBXTSBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9QV007CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1dSSVRFQUJMRSB8IFNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMzsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmlvX2JpdHMgPSAwOwkJLy9hbGwgYml0cyBpbnB1dAorCXMtPmluc25fY29uZmlnID0gaV9BUENJMTcxMF9JbnNuQ29uZmlnUFdNOworCXMtPmluc25fcmVhZCA9IGlfQVBDSTE3MTBfSW5zblJlYWRHZXRQV01TdGF0dXM7CisJcy0+aW5zbl93cml0ZSA9IGlfQVBDSTE3MTBfSW5zbldyaXRlUFdNOworCXMtPmluc25fYml0cyA9IGlfQVBDSTE3MTBfSW5zbkJpdHNSZWFkUFdNSW50ZXJydXB0OworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgVFRMSU8gU3ViZGV2aWNlIFN0cnVjdHVyZXMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVFRMSU87CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1dSSVRFQUJMRSB8IFNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hcGNpMTcxMF90dGw7CS8vIHRvIHBhc3MgYXJndW1lbnRzIGluIHJhbmdlCisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VFRMSU87CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c1JlYWRUVExJTzsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVTZXRUVExJT0NobE9uT2ZmOworCXMtPmluc25fcmVhZCA9IGlfQVBDSTE3MTBfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZTsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFRPUiBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA1OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9UT1I7CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1dSSVRFQUJMRSB8IFNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmlvX2JpdHMgPSAwOwkJLy9hbGwgYml0cyBpbnB1dAorCXMtPmluc25fY29uZmlnID0gaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRvckNvdW50ZXI7CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZEdldFRvckNvdW50ZXJJbml0aWFsaXNhdGlvbjsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVG9yQ291bnRlcjsKKwlzLT5pbnNuX2JpdHMgPSBpX0FQQ0kxNzEwX0luc25CaXRzR2V0VG9yQ291bnRlclByb2dyZXNzU3RhdHVzQW5kVmFsdWU7CisKKwkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBTU0kgU3ViZGV2aWNlIFN0cnVjdHVyZXMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfU1NJOworCXMtPnN1YmRldl9mbGFncyA9CisJCVNERl9XUklURUFCTEUgfCBTREZfUkVBREFCTEUgfCBTREZfUlQgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSA0OworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDQ7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXBjaTE3MTBfc3NpOworCXMtPmluc25fY29uZmlnID0gaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFNTSTsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkU1NJVmFsdWU7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c1NTSURpZ2l0YWxJTzsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFBVTFNFRU5DT0RFUiBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA3OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9QVUxTRUVOQ09ERVI7CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1dSSVRFQUJMRSB8IFNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fY29uZmlnID0gaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFB1bHNlRW5jb2RlcjsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlUHVsc2VFbmNvZGVyOworCXMtPmluc25fYml0cyA9IGlfQVBDSTE3MTBfSW5zbkJpdHNSZWFkV3JpdGVQdWxzZUVuY29kZXI7CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZEludGVycnVwdFB1bHNlRW5jb2RlcjsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIElOQ1JFTUVOVEFMQ09VTlRFUiBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA4OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9JTkNSRU1FTlRBTENPVU5URVI7CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1dSSVRFQUJMRSB8IFNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDUwMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA1MDA7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXBjaTE3MTBfaW5jY3B0OworCXMtPmluc25fY29uZmlnID0gaV9BUENJMTcxMF9JbnNuQ29uZmlnSU5DQ1BUOworCXMtPmluc25fd3JpdGUgPSBpX0FQQ0kxNzEwX0luc25Xcml0ZUlOQ0NQVDsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkSU5DQ1BUOworCXMtPmluc25fYml0cyA9IGlfQVBDSTE3MTBfSW5zbkJpdHNJTkNDUFQ7Cit9CisKK2ludCBpX0FQQ0kxNzEwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3ZvaWQgdl9BUENJMTcxMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CisvL2ZvciAxNzEwCisKK2ludCBpX0FQQ0kxNzEwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCByZXQ7CisJRFdPUkQgZHdfRHVtbXk7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFJlYWQgYWxsIG1vZHVsZSBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlyZXQgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA2MCk7CisJZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uWzBdID0gcmV0OworCisJcmV0ID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMTI0KTsKKwlkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMV0gPSByZXQ7CisKKwlyZXQgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxODgpOworCWRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvblsyXSA9IHJldDsKKworCXJldCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDI1Mik7CisJZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uWzNdID0gcmV0OworCisJLy8gb3V0bCgweDgwODA4MDgyLGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzKzB4NjApOworCW91dGwoMHg4MzgzODM4MywgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAweDYwKTsKKworCWRldnByaXYtPnNfQm9hcmRJbmZvcy5iX0JvYXJkVmVyc2lvbiA9IDE7CisKKwkvLyBFbmFibGUgdGhlIGludGVycnVwdCBmb3IgdGhlIGNvbnRyb2xlcgorCWR3X0R1bW15ID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMHgzOCk7CisJb3V0bChkd19EdW1teSB8IDB4MjAwMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAweDM4KTsKKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uJ3MgTmFtZSAgIDogX192b2lkX18gdl9BUENJMTcxMF9JbnRlcnJ1cHRGdW5jdGlvbiAgICAgICAgICAgICAgICAgIHwKK3wJCQkJKEJZVEUgYl9JbnRlcnJ1cHQsIF9fQ1BQQVJHUykgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQVBDSS0xNzEwIGludGVycnVwdCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEUgYl9JbnRlcnJ1cHQgOiBJbnRlcnJ1cHQgbnVtYmVyICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMCA6IE9LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xIDogRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCit2b2lkIHZfQVBDSTE3MTBfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJQllURSBiX01vZHVsZUNwdCA9IDA7CisJQllURSBiX0ludGVycnVwdEZsYWcgPSAwOworCUJZVEUgYl9QV01DcHQgPSAwOworCUJZVEUgYl9Ub3JDb3VudGVyQ3B0ID0gMDsKKwlCWVRFIGJfUHVsc2VJbmNvZGVyQ3B0ID0gMDsKKwlVSU5UIHVpXzE2Qml0VmFsdWU7CisJVUxPTkcgdWxfSW50ZXJydXB0TGF0Y2hSZWcgPSAwOworCVVMT05HIHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9IDA7CisJVUxPTkcgdWxfODJYNTRJbnRlcnJ1cHRTdGF0dXM7CisJVUxPTkcgdWxfU3RhdHVzUmVnaXN0ZXI7CisKKwlzdHJfTW9kdWxlSW5mbyAqcHNfTW9kdWxlSW5mbzsKKworCXByaW50aygiQVBDSTE3MTAgSW50ZXJydXB0XG4iKTsKKwlmb3IgKGJfTW9kdWxlQ3B0ID0gMDsgYl9Nb2R1bGVDcHQgPCA0OyBiX01vZHVsZUNwdCsrLCBwc19Nb2R1bGVJbmZvKyspIHsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiAxMTk5LzAyMjUgdG8gMDEwMC8wMjI2ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXBzX01vZHVsZUluZm8gPSAmZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxlQ3B0XTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bGVDcHRdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwXzgyWDU0X1RJTUVSKSB7CisKKwkJCS8vcHJpbnRrKCJUSU1FUiBJbnRlcnJ1cHQgT2NjdXJyZWRcbiIpOworCQkJdWxfODJYNTRJbnRlcnJ1cHRTdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAxMiArICg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGludGVycnVwdCBvY2N1ciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKCh1bF84Mlg1NEludGVycnVwdFN0YXR1cyAmIHBzX01vZHVsZUluZm8tPgorCQkJCQlzXzgyWDU0TW9kdWxlSW5mby4KKwkJCQkJYl9JbnRlcnJ1cHRNYXNrKSAhPSAwKSB7CisJCQkJZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZV0uCisJCQkJCXVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkodWxfODJYNTRJbnRlcnJ1cHRTdGF0dXMgJgorCQkJCQlwc19Nb2R1bGVJbmZvLT5zXzgyWDU0TW9kdWxlSW5mby4KKwkJCQkJYl9JbnRlcnJ1cHRNYXNrKSA8PCA0OworCisJCQkJZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZV0uCisJCQkJCWJfT2xkTW9kdWxlTWFzayA9IDEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlXS51bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZSA9IDA7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJdWlfV3JpdGUgPSAoZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJdWlfV3JpdGUgKyAxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOworCisJCQl9CS8vIGlmICgodWxfODJYNTRJbnRlcnJ1cHRTdGF0dXMgJiAweDcpICE9IDApCisJCX0JCS8vIDgyWDU0IHRpbWVyCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgaW5jcmVtLiBjb3VudGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxlQ3B0XSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisKKwkJCXVsX0ludGVycnVwdExhdGNoUmVnID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW50ZXJydXB0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKHVsX0ludGVycnVwdExhdGNoUmVnICYgMHgyMikgJiYgKHBzX01vZHVsZUluZm8tPgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIyICYgMHg4MCkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBzdHJvYmUgbGF0Y2ggSSBpbnRlcnJ1cHQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAodWxfSW50ZXJydXB0TGF0Y2hSZWcgJiAyKSB7CisJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDQgKworCQkJCQkJKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0udWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCQkxVUw7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLmJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkxIDw8IGJfTW9kdWxlQ3B0OworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCXVsX09sZENvdW50ZXJMYXRjaFZhbHVlID0KKwkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIDA4OTkvMDIyNCB0byAxMTk5LzAyMjUgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGUgPSAoZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSArCisJCQkJCQkxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCQkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwKKwkJCQkJCTApOworCisJCQkJfQorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHN0cm9iZSBsYXRjaCBJSSBpbnRlcnJ1cHQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKHVsX0ludGVycnVwdExhdGNoUmVnICYgMHgyMCkgeworCisJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDggKworCQkJCQkJKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0udWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCQkyVUw7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLmJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkxIDw8IGJfTW9kdWxlQ3B0OworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCXVsX09sZENvdW50ZXJMYXRjaFZhbHVlID0KKwkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIDA4OTkvMDIyNCB0byAxMTk5LzAyMjUgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGUgPSAoZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSArCisJCQkJCQkxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCQkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwKKwkJCQkJCTApOworCisJCQkJfQorCQkJfQorCisJCQl1bF9JbnRlcnJ1cHRMYXRjaFJlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDI0ICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW5kZXggaW50ZXJydXB0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAodWxfSW50ZXJydXB0TGF0Y2hSZWcgJiAweDgpIHsKKwkJCQlwc19Nb2R1bGVJbmZvLT4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfSW5pdEZsYWcuYl9JbmRleEludGVycnVwdE9jY3VyID0gMTsKKworCQkJCWlmIChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMiAmCisJCQkJCUFQQ0kxNzEwX0lOREVYX0FVVE9fTU9ERSkgeworCisJCQkJCW91dGwocHNfTW9kdWxlSW5mby0+CisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAyMCArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCQkJCX0KKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGVuYWJsZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgocHNfTW9kdWxlSW5mby0+CisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzICYKKwkJCQkJCUFQQ0kxNzEwX0VOQUJMRV9JTkRFWF9JTlQpID09CisJCQkJCUFQQ0kxNzEwX0VOQUJMRV9JTkRFWF9JTlQpIHsKKwkJCQkJZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCTRVTDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPQorCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogMDg5OS8wMjI0IHRvIDExOTkvMDIyNSAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CisJCQl9CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY29tcGFyZSBpbnRlcnJ1cHQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKHVsX0ludGVycnVwdExhdGNoUmVnICYgMHgxMCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGVuYWJsZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgocHNfTW9kdWxlSW5mby0+CisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzICYKKwkJCQkJCUFQQ0kxNzEwX0VOQUJMRV9DT01QQVJFX0lOVCkgPT0KKwkJCQkJQVBDSTE3MTBfRU5BQkxFX0NPTVBBUkVfSU5UKSB7CisJCQkJCWRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0udWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCQk4VUw7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLmJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkxIDw8IGJfTW9kdWxlQ3B0OworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCXVsX09sZENvdW50ZXJMYXRjaFZhbHVlID0KKwkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIDA4OTkvMDIyNCB0byAxMTk5LzAyMjUgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGUgPSAoZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSArCisJCQkJCQkxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCQkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwKKwkJCQkJCTApOworCisJCQkJfQorCQkJfQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZnJlcXVlbmN5IG1lYXN1cmVtZW50IGludGVycnVwdCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICh1bF9JbnRlcnJ1cHRMYXRjaFJlZyAmIDB4MjApIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQl1bF9TdGF0dXNSZWdpc3RlciA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAzMiArICg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgdmFsdWUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKworCQkJCQkyOCArICg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJCQlzd2l0Y2ggKCh1bF9TdGF0dXNSZWdpc3RlciA+PiAxKSAmIDMpIHsKKwkJCQljYXNlIDA6CisJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGNvdW50ZXIgbW9kZSAqLworCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxlQ3B0XS4KKwkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIxICYKKwkJCQkJCQlBUENJMTcxMF8xNkJJVF9DT1VOVEVSKQorCQkJCQkJPT0gQVBDSTE3MTBfMTZCSVRfQ09VTlRFUikgeworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIDE2LWJpdCBjb3VudGVyIDEgcHVsc2Ugb2NjdXIgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSAmCisJCQkJCQkJCTB4RkZGRlUpICE9IDApIHsKKwkJCQkJCQl1aV8xNkJpdFZhbHVlID0KKwkJCQkJCQkJKFVJTlQpCisJCQkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZQorCQkJCQkJCQkmIDB4RkZGRlU7CisJCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCQkJKHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZQorCQkJCQkJCQkmIDB4RkZGRjAwMDBVTCkKKwkJCQkJCQkJfCAoMHhGRkZGVSAtCisJCQkJCQkJCXVpXzE2Qml0VmFsdWUpOworCQkJCQkJfQorCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMiBwdWxzZSBvY2N1ciAqLworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgodWxfTGF0Y2hSZWdpc3RlclZhbHVlICYKKwkJCQkJCQkJMHhGRkZGMDAwMFVMKSAhPQorCQkJCQkJCTApIHsKKwkJCQkJCQl1aV8xNkJpdFZhbHVlID0KKwkJCQkJCQkJKFVJTlQpICgKKwkJCQkJCQkJKHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZQorCQkJCQkJCQkJPj4gMTYpICYKKwkJCQkJCQkJMHhGRkZGVSk7CisJCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCQkJKHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZQorCQkJCQkJCQkmIDB4RkZGRlVMKSB8CisJCQkJCQkJCSgoMHhGRkZGVSAtCisJCQkJCQkJCQl1aV8xNkJpdFZhbHVlKQorCQkJCQkJCQk8PCAxNik7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAodWxfTGF0Y2hSZWdpc3RlclZhbHVlICE9IDApIHsKKwkJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCQkweEZGRkZGRkZGVUwgLQorCQkJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDE6CisJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMiBwdWxzZSBvY2N1ciAqLworCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgodWxfTGF0Y2hSZWdpc3RlclZhbHVlICYKKwkJCQkJCQkweEZGRkYwMDAwVUwpICE9IDApIHsKKwkJCQkJCXVpXzE2Qml0VmFsdWUgPQorCQkJCQkJCShVSU5UKSAoCisJCQkJCQkJKHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZQorCQkJCQkJCQk+PiAxNikgJgorCQkJCQkJCTB4RkZGRlUpOworCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlICYKKwkJCQkJCQkweEZGRkZVTCkgfCAoKDB4RkZGRlUgLQorCQkJCQkJCQl1aV8xNkJpdFZhbHVlKQorCQkJCQkJCTw8IDE2KTsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgMjoKKwkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAxIHB1bHNlIG9jY3VyICovCisJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKCh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJiAweEZGRkZVKSAhPQorCQkJCQkJMCkgeworCQkJCQkJdWlfMTZCaXRWYWx1ZSA9CisJCQkJCQkJKFVJTlQpCisJCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlICYKKwkJCQkJCQkweEZGRkZVOworCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlICYKKwkJCQkJCQkweEZGRkYwMDAwVUwpIHwgKDB4RkZGRlUKKwkJCQkJCQktIHVpXzE2Qml0VmFsdWUpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJdWlfV3JpdGVdLgorCQkJCQl1bF9PbGRJbnRlcnJ1cHRNYXNrID0gMHgxMDAwMFVMOworCisJCQkJZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZV0uCisJCQkJCWJfT2xkTW9kdWxlTWFzayA9IDEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlXS4KKwkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPQorCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWU7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiAwODk5LzAyMjQgdG8gMTE5OS8wMjI1ICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZSArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisKKwkJCX0KKwkJfQkJLy8gSW5jcmVtZW50YWwgY291bnRlcgorCisJCSAvKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIENEQSAqLworCQkgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsZUNwdF0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0RBKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBDREEgZW5hYmxlIGFuZCBmdW5jdGlvbmFsaXR5IDAgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxlQ3B0XS4KKwkJCQkJc19DREFNb2R1bGVJbmZvLgorCQkJCQliX0NEQUVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpCisJCQkJJiYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsZUNwdF0uCisJCQkJCXNfQ0RBTW9kdWxlSW5mby5iX0ZjdFNlbGVjdGlvbiA9PSAwKSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogR2V0IHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXVsX1N0YXR1c1JlZ2lzdGVyID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgb2NjdXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAodWxfU3RhdHVzUmVnaXN0ZXIgJiAxKSB7CisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCTB4ODAwMDBVTDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPSAwOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGUgPSAoZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSArCisJCQkJCQkxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CS8vIGlmICh1bF9TdGF0dXNSZWdpc3RlciAmIDEpCisKKwkJCX0KKwkJfQkJLy8gQ0RBCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBQV00gY291bnRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxlQ3B0XSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkJCWZvciAoYl9QV01DcHQgPSAwOyBiX1BXTUNwdCA8IDI7IGJfUFdNQ3B0KyspIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgUFdNIGludGVycnVwdCBpbml0aWFsaXNlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsZUNwdF0uCisJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJc19QV01JbmZvW2JfUFdNQ3B0XS4KKwkJCQkJYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJdWxfU3RhdHVzUmVnaXN0ZXIgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAxNiArCisJCQkJCQkoMjAgKiBiX1BXTUNwdCkgKworCQkJCQkJKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGludGVycnVwdCBvY2N1ciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICh1bF9TdGF0dXNSZWdpc3RlciAmIDB4MSkgeworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCQlbZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCQl1bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCQkweDQwMDBVTCA8PCBiX1BXTUNwdDsKKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCQlbZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCQliX09sZE1vZHVsZU1hc2sgPQorCQkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGUgPSAoZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCQkxKSAlCisJCQkJCQkJQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJCXNlbmRfc2lnKFNJR0lPLAorCQkJCQkJCWRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJCTApOworCisJCQkJCX0JLy8gaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMHgxKQorCQkJCX0JLy8gaWYgKEFQQ0kxNzEwX0VOQUJMRSkKKwkJCX0JLy8gZm9yIChiX1BXTUNwdCA9PSAwOyBiX1BXTUNwdCA8IDA7IGJfUFdNQ3B0ICsrKQorCQl9CQkvLyBQV00gY291bnRlcgorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsZUNwdF0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVE9SX0NPVU5URVIpIHsKKwkJCWZvciAoYl9Ub3JDb3VudGVyQ3B0ID0gMDsgYl9Ub3JDb3VudGVyQ3B0IDwgMjsKKwkJCQliX1RvckNvdW50ZXJDcHQrKykgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiB0b3IgaW50ZXJydXB0IGluaXRpYWxpc2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxlQ3B0XS4KKwkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJc19Ub3JDb3VudGVySW5mb1tiX1RvckNvdW50ZXJDcHRdLgorCQkJCQliX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQl1bF9TdGF0dXNSZWdpc3RlciA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJCSgxNiAqIGJfVG9yQ291bnRlckNwdCkgKworCQkJCQkJKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGludGVycnVwdCBvY2N1ciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICh1bF9TdGF0dXNSZWdpc3RlciAmIDB4MSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCB0aGUgdG9yIGNvdW50ZXIgdmFsdWUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyAwICsKKwkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXJDcHQpICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCXVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkJCTB4MTAwMFVMIDw8CisJCQkJCQkJYl9Ub3JDb3VudGVyQ3B0OworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCWJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCQlbZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZQorCQkJCQkJCT0gdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZSArCisJCQkJCQkJMSkgJQorCQkJCQkJCUFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCQkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJCXNlbmRfc2lnKFNJR0lPLAorCQkJCQkJCWRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJCTApOworCQkJCQl9CS8vIGlmICh1bF9TdGF0dXNSZWdpc3RlciAmIDB4MSkKKwkJCQl9CS8vIGlmIChBUENJMTcxMF9FTkFCTEUpCisJCQl9CS8vIGZvciAoYl9Ub3JDb3VudGVyQ3B0ID09IDA7IGJfVG9yQ291bnRlckNwdCA8IDA7IGJfVG9yQ291bnRlckNwdCArKykKKwkJfQkJLy8gVG9yIGNvdW50ZXIKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bGVDcHRdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0NIUk9OT01FVEVSKSB7CisKKwkJCS8vcHJpbnRrKCJBUENJMTcxMCBDaHJvbm8gSW50ZXJydXB0XG4iKTsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJdWxfSW50ZXJydXB0TGF0Y2hSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAxMiArICg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGludGVycnVwdCBvY2N1ciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKCh1bF9JbnRlcnJ1cHRMYXRjaFJlZyAmIDB4OCkgPT0gMHg4KSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAzMiArICg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBjb250aW51b3VzIG1vZGUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAocHNfTW9kdWxlSW5mby0+CisJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2xlYXIgdGhlIHN0YXR1cyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMzYgKworCQkJCQkJKDY0ICogYl9Nb2R1bGVDcHQpKTsKKwkJCQl9CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgdGhlIHRpbWluZyB2YWx1ZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKworCQkJCQk0ICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGVuYWJsZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLmJfSW50ZXJydXB0TWFzaykgeworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0udWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCQkweDgwOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS5iX09sZE1vZHVsZU1hc2sgPQorCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZSA9CisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWU7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CisJCQl9CisJCX0JCS8vIENocm9ub21ldGVyCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHB1bHNlIGVuY29kZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxlQ3B0XSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QVUxTRV9FTkNPREVSKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXVsX1N0YXR1c1JlZ2lzdGVyID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjAgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQlpZiAodWxfU3RhdHVzUmVnaXN0ZXIgJiAweEYpIHsKKwkJCQlmb3IgKGJfUHVsc2VJbmNvZGVyQ3B0ID0gMDsKKwkJCQkJYl9QdWxzZUluY29kZXJDcHQgPCA0OworCQkJCQliX1B1bHNlSW5jb2RlckNwdCsrKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHB1bHNlIGVuY29kZXIgaW5pdGlhbGlzZWQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJc19QdWxzZUVuY29kZXJJbmZvCisJCQkJCQkJW2JfUHVsc2VJbmNvZGVyQ3B0XS4KKwkJCQkJCQliX1B1bHNlRW5jb2RlckluaXQgPT0gMSkKKwkJCQkJCSYmICgoKHBzX01vZHVsZUluZm8tPnNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby5kd19TZXRSZWdpc3RlciA+PiBiX1B1bHNlSW5jb2RlckNwdCkgJiAxKSA9PSAxKSAmJiAoKCh1bF9TdGF0dXNSZWdpc3RlciA+PiAoYl9QdWxzZUluY29kZXJDcHQpKSAmIDEpID09IDEpKSB7CisJCQkJCQlkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCXVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkJCTB4MTAwVUwgPDwKKwkJCQkJCQliX1B1bHNlSW5jb2RlckNwdDsKKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCQlbZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCQliX09sZE1vZHVsZU1hc2sgPQorCQkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQkJW2RldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUKKwkJCQkJCQk9IHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiAwODk5LzAyMjQgdG8gMTE5OS8wMjI1ICAgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGUgKworCQkJCQkJCTEpICUKKwkJCQkJCQlBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQkJc2VuZF9zaWcoU0lHSU8sCisJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkJMCk7CisKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQkJLy9wdWxzZSBlbmNvZGVyCisKKwl9CisJcmV0dXJuOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4Y2JiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIENPTUVESV9TVUJEX1RUTElPCQkxMQkvKiBEaWdpdGFsIElucHV0IE91dHB1dCBCdXQgVFRMICovCisjZGVmaW5lIENPTUVESV9TVUJEX1BXTQkJCTEyCS8qIFB1bHNlIHdpZHRoIE1lYXN1cmVtZW50ICovCisjZGVmaW5lIENPTUVESV9TVUJEX1NTSQkJCTEzCS8qIFN5bmNocm9ub3VzIHNlcmlhbCBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgQ09NRURJX1NVQkRfVE9SCQkJMTQJLyogVG9yIGNvdW50ZXIgKi8KKyNkZWZpbmUgQ09NRURJX1NVQkRfQ0hST05PCQkxNQkvKiBDaHJvbm8gbWV0ZXIgKi8KKyNkZWZpbmUgQ09NRURJX1NVQkRfUFVMU0VFTkNPREVSCTE2CS8qIFB1bHNlIEVuY29kZXIgSU5QIENQVCAqLworI2RlZmluZSBDT01FRElfU1VCRF9JTkNSRU1FTlRBTENPVU5URVIJMTcJLyogSW5jcmVtZW50YWwgQ291bnRlciAqLworCisjZGVmaW5lIEFQQ0kxNzEwX0JPQVJEX05BTUUJCSJhcGNpMTcxMCIKKyNkZWZpbmUgQVBDSTE3MTBfQk9BUkRfVkVORE9SX0lECTB4MTBFOAorI2RlZmluZSBBUENJMTcxMF9CT0FSRF9ERVZJQ0VfSUQJMHg4MThGCisjZGVmaW5lIEFQQ0kxNzEwX0FERFJFU1NfUkFOR0UJCTI1NgorI2RlZmluZSBBUENJMTcxMF9DT05GSUdfQUREUkVTU19SQU5HRQk4CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIJMHg1MzQzMDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwX1NTSV9DT1VOVEVSCQkweDUzNDkwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfVFRMX0lPCQkJMHg1NDRDMDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwX0RJR0lUQUxfSU8JCTB4NDQ0OTAwMDBVTAorI2RlZmluZSBBUENJMTcxMF84Mlg1NF9USU1FUgkJMHg0OTQzMDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT01FVEVSCQkweDQzNDgwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfUFVMU0VfRU5DT0RFUgkJMHg0OTVBMDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9DT1VOVEVSCQkweDU0NEYwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfUFdNCQkJMHg1MDU3MDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwX0VUTQkJCTB4NDU1NDAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9DREEJCQkweDQzNDQwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRQkJMAorI2RlZmluZSBBUENJMTcxMF9FTkFCTEUJCQkxCisjZGVmaW5lIEFQQ0kxNzEwX1NZTkNIUk9OT1VTX01PREUJMQorI2RlZmluZSBBUENJMTcxMF9BU1lOQ0hST05PVVNfTU9ERQkwCisKKy8vTU9EVUxFIElORk8gU1RSVUNUVVJFCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMTcxMF90dGwgPSB7IDQsIHsKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgxMCksCisJCQkJCQkgICAgICBCSVBfUkFOR0UoNSksCisJCQkJCQkgICAgICBCSVBfUkFOR0UoMiksCisJCQkJCQkgICAgICBCSVBfUkFOR0UoMSkKKwkJCQkJCSAgICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMTcxMF9zc2kgPSB7IDQsIHsKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgxMCksCisJCQkJCQkgICAgICBCSVBfUkFOR0UoNSksCisJCQkJCQkgICAgICBCSVBfUkFOR0UoMiksCisJCQkJCQkgICAgICBCSVBfUkFOR0UoMSkKKwkJCQkJCSAgICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMTcxMF9pbmNjcHQgPSB7IDQsIHsKKwkJCQkJCQkgQklQX1JBTkdFKDEwKSwKKwkJCQkJCQkgQklQX1JBTkdFKDUpLAorCQkJCQkJCSBCSVBfUkFOR0UoMiksCisJCQkJCQkJIEJJUF9SQU5HRSgxKQorCQkJCQkJCSB9Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMDM1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDUyNzkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMDM1LmMKQEAgLTAsMCArMSw2MDAgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0wMzUgICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMDM1LmMgfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMDM1ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiaHdkcnZfYXBjaTAzNS5oIgorSU5UIGlfV2F0Y2hkb2dOYnIgPSAwOworSU5UIGlfVGVtcCA9IDA7CitJTlQgaV9GbGFnID0gMTsKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMDM1X0NvbmZpZ1RpbWVyV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIFRpbWVyICwgQ291bnRlciBvciBXYXRjaGRvZyAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVswXSAgICAgICAgICAgIDogMCBDb25maWd1cmUgQXMgVGltZXIgICAgICB8Cit8CQkJCQkJCQkJCSAgIDEgQ29uZmlndXJlIEFzIFdhdGNoZG9nICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgIDogV2F0Y2hkb2cgbnVtYmVyCit8CQkJCQkgIGRhdGFbMl0gICAgICAgICAgICA6IFRpbWUgYmFzZSBVbml0ICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzNdCQkJIDogUmVsb2FkIFZhbHVlCQkJICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzRdICAgICAgICAgICAgOiBFeHRlcm5hbCBUcmlnZ2VyICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6RW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOkRpc2FibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNV0gICAgICAgICAgICA6RXh0ZXJuYWwgVHJpZ2dlciBMZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMCBUcmlnZ2VyIERpc2FibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAxIFRyaWdnZXIgRW5hYmxlZCAoTG93IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCBUcmlnZ2VyIEVuYWJsZWQgKEhpZ2ggTGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExIFRyaWdnZXIgRW5hYmxlZCAoSGlnaC9Mb3cgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzZdICAgICAgICAgICAgOiBFeHRlcm5hbCBHYXRlICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpFbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6RGlzYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs3XSAgICAgICAgICAgIDogRXh0ZXJuYWwgR2F0ZSBsZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMCBHYXRlIERpc2FibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAxIEdhdGUgRW5hYmxlZCAoTG93IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCBHYXRlIEVuYWJsZWQgKEhpZ2ggTGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzhdICAgICAgICAgICAgOldhcm5pbmcgUmVsYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogRU5BQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IERJU0FCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbOV0gICAgICAgICAgICA6V2FybmluZyBEZWxheSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTBdICAgICAgICAgICA6V2FybmluZyBSZWxheSBUaW1lIHVuaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTFdICAgICAgICAgICA6V2FybmluZyBSZWxheSBUaW1lIFJlbG9hZCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMl0gICAgICAgICAgIDpSZXNldCBSZWxheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogRU5BQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBESVNBQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzEzXSAgICAgICAgICAgOkludGVycnVwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogRU5BQkxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBESVNBQkxFCisKK3wKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMDM1X0NvbmZpZ1RpbWVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfU3RhdHVzID0gMDsKKwlVSU5UIHVpX0NvbW1hbmQgPSAwOworCVVJTlQgdWlfTW9kZSA9IDA7CisJaV9UZW1wID0gMDsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBkYXRhWzBdOworCWlfV2F0Y2hkb2dOYnIgPSBkYXRhWzFdOworCWlmIChkYXRhWzBdID09IDApIHsKKwkJdWlfTW9kZSA9IDI7CisJfSBlbHNlIHsKKwkJdWlfTW9kZSA9IDA7CisJfQorLy91aV9Db21tYW5kID0gaW5sKGRldnByaXYtPmlvYmFzZSsoKGlfV2F0Y2hkb2dOYnItMSkqMzIpKzEyKTsKKwl1aV9Db21tYW5kID0gMDsKKy8vdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgJiAweEZGRkZGOUZFVUw7CisJb3V0bCh1aV9Db21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl1aV9Db21tYW5kID0gMDsKKwl1aV9Db21tYW5kID0gaW5sKGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNldCB0aGUgcmVsb2FkIHZhbHVlICovCisvKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGwoZGF0YVszXSwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyA0KTsKKy8qKioqKioqKioqKioqKioqKioqKiovCisvKiBTZXQgdGhlIHRpbWUgdW5pdCAqLworLyoqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRsKGRhdGFbMl0sIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgOCk7CisJaWYgKGRhdGFbMF0gPT0gQURESURBVEFfVElNRVIpIHsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2V0IHRoZSBtb2RlIDogICAgICAgICAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSBoYXJkd2FyZSAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSBjb3VudGVyIG1vZGUgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSB3YXJuaW5nICAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSByZXNldCAgICAgICAgKi8KKwkJLyogLSBFbmFibGUgdGhlIHRpbWVyIG1vZGUgICAgKi8KKwkJLyogLSBTZXQgdGhlIHRpbWVyIG1vZGUgICAgICAgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJdWlfQ29tbWFuZCA9CisJCQkodWlfQ29tbWFuZCAmIDB4RkZGNzE5RTJVTCkgfCB1aV9Nb2RlIDw8IDEzVUwgfCAweDEwVUw7CisKKwl9CQkJLy9pZiAoZGF0YVswXSA9PSBBRERJREFUQV9USU1FUikKKwllbHNlIHsKKwkJaWYgKGRhdGFbMF0gPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgbW9kZSA6ICAgICAgICAgICAgICovCisJCQkvKiAtIERpc2FibGUgdGhlIGhhcmR3YXJlICAgICAqLworCQkJLyogLSBEaXNhYmxlIHRoZSBjb3VudGVyIG1vZGUgKi8KKwkJCS8qIC0gRGlzYWJsZSB0aGUgd2FybmluZyAgICAgICovCisJCQkvKiAtIERpc2FibGUgdGhlIHJlc2V0ICAgICAgICAqLworCQkJLyogLSBEaXNhYmxlIHRoZSB0aW1lciBtb2RlICAgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kICYgMHhGRkY4MTlFMlVMOworCisJCX0gZWxzZSB7CisJCQlwcmludGsoIlxuIFRoZSBwYXJhbWV0ZXIgZm9yIFRpbWVyL3dhdGNoZG9nIHNlbGVjdGlvbiBpcyBpbiBlcnJvclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlvdXRsKHVpX0NvbW1hbmQsIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworCXVpX0NvbW1hbmQgPSAwOworCXVpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEaXNhYmxlIHRoZSBoYXJkd2FyZSB0cmlnZ2VyICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgJiAweEZGRkZGODlGVUw7CisJaWYgKGRhdGFbNF0gPT0gQURESURBVEFfRU5BQkxFKSB7CisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgaGFyZHdhcmUgdHJpZ2dlciBsZXZlbCAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl1aV9Db21tYW5kID0gdWlfQ29tbWFuZCB8IChkYXRhWzVdIDw8IDUpOworCX0KKwlvdXRsKHVpX0NvbW1hbmQsIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworCXVpX0NvbW1hbmQgPSAwOworCXVpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEaXNhYmxlIHRoZSBoYXJkd2FyZSBnYXRlICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgJiAweEZGRkZGODdGVUw7CisJaWYgKGRhdGFbNl0gPT0gQURESURBVEFfRU5BQkxFKSB7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNldCB0aGUgaGFyZHdhcmUgZ2F0ZSBsZXZlbCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kIHwgKGRhdGFbN10gPDwgNyk7CisJfQorCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJdWlfQ29tbWFuZCA9IDA7CisJdWlfQ29tbWFuZCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGlzYWJsZSB0aGUgaGFyZHdhcmUgb3V0cHV0ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kID0gdWlfQ29tbWFuZCAmIDB4RkZGRkY5RkJVTDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTZXQgdGhlIGhhcmR3YXJlIG91dHB1dCBsZXZlbCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kID0gdWlfQ29tbWFuZCB8IChkYXRhWzhdIDw8IDIpOworCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJaWYgKGRhdGFbOV0gPT0gQURESURBVEFfRU5BQkxFKSB7CisgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZXQgdGhlIHJlbG9hZCB2YWx1ZSAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0bChkYXRhWzExXSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMjQpOworICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgdGltZSB1bml0ZSAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGwoZGF0YVsxMF0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDI4KTsKKwl9CisKKwl1aV9Db21tYW5kID0gMDsKKwl1aV9Db21tYW5kID0gaW5sKGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIERpc2FibGUgdGhlIGhhcmR3YXJlIG91dHB1dCAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kICYgMHhGRkZGRjlGN1VMOworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGhhcmR3YXJlIG91dHB1dCBsZXZlbCAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kID0gdWlfQ29tbWFuZCB8IChkYXRhWzEyXSA8PCAzKTsKKwlvdXRsKHVpX0NvbW1hbmQsIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qKiAgRW5hYmxlIHRoZSB3YXRjaGRvZyBpbnRlcnJ1cHQgICoqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmQgPSAwOworCXVpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNldCB0aGUgaW50ZXJydXB0IHNlbGVjdGlvbiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfU3RhdHVzID0gaW5sKGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTYpOworCisJdWlfQ29tbWFuZCA9ICh1aV9Db21tYW5kICYgMHhGRkZGRjlGRFVMKSB8IChkYXRhWzEzXSA8PCAxKTsKKwlvdXRsKHVpX0NvbW1hbmQsIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMDM1X1N0YXJ0U3RvcFdyaXRlVGltZXJXYXRjaGRvZyAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgU2VsZWN0ZWQgVGltZXIgLCBvciBXYXRjaGRvZyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVswXSA6IDAgLSBTdG9wIFNlbGVjdGVkIFRpbWVyL1dhdGNoZG9nICAgICB8Cit8CQkJCQkgICAgICAgICAgICAxIC0gU3RhcnQgU2VsZWN0ZWQgVGltZXIvV2F0Y2hkb2cgICAgfAorfAkJCQkJICAgICAgICAgICAgMiAtIFRyaWdnZXIgU2VsZWN0ZWQgVGltZXIvV2F0Y2hkb2cgIHwKK3wJCQkJCSAgICAgICAgICAgIDMgLSBTdG9wIEFsbCBUaW1lci9XYXRjaGRvZyAgICAgICAgICB8Cit8CQkJCQkgICAgICAgICAgICA0IC0gU3RhcnQgQWxsIFRpbWVyL1dhdGNoZG9nICAgICAgICAgfAorfAkJCQkJICAgICAgICAgICAgNSAtIFRyaWdnZXIgQWxsIFRpbWVyL1dhdGNoZG9nICAgICAgIHwKK3wJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvcgkJCSB8Cit8CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTAzNV9TdGFydFN0b3BXcml0ZVRpbWVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfQ29tbWFuZCA9IDA7CisJSU5UIGlfQ291bnQgPSAwOworCWlmIChkYXRhWzBdID09IDEpIHsKKwkJdWlfQ29tbWFuZCA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTdGFydCB0aGUgaGFyZHdhcmUgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NvbW1hbmQgPSAodWlfQ29tbWFuZCAmIDB4RkZGRkY5RkZVTCkgfCAweDFVTDsKKwkJb3V0bCh1aV9Db21tYW5kLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJfQkJCS8vIGlmICAoZGF0YVswXT09MSkKKwlpZiAoZGF0YVswXSA9PSAyKSB7CisJCXVpX0NvbW1hbmQgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZXQgdGhlIHRyaWdnZXIgY29tbWFuZCAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl1aV9Db21tYW5kID0gKHVpX0NvbW1hbmQgJiAweEZGRkZGOUZGVUwpIHwgMHgyMDBVTDsKKwkJb3V0bCh1aV9Db21tYW5kLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJfQorCisJaWYgKGRhdGFbMF0gPT0gMCkJLy9TdG9wIFRoZSBXYXRjaGRvZworCXsKKwkJLy9TdG9wIFRoZSBXYXRjaGRvZworCQl1aV9Db21tYW5kID0gMDsKKwkJLy91aV9Db21tYW5kID0gaW5sKGRldnByaXYtPmlvYmFzZSsoKGlfV2F0Y2hkb2dOYnItMSkqMzIpKzEyKTsKKwkJLy91aV9Db21tYW5kID0gdWlfQ29tbWFuZCAmIDB4RkZGRkY5RkVVTDsKKwkJb3V0bCh1aV9Db21tYW5kLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJfQkJCS8vICBpZiAoZGF0YVsxXT09MCkKKwlpZiAoZGF0YVswXSA9PSAzKQkvL3N0b3AgYWxsIFdhdGNoZG9ncworCXsKKwkJdWlfQ29tbWFuZCA9IDA7CisJCWZvciAoaV9Db3VudCA9IDE7IGlfQ291bnQgPD0gNDsgaV9Db3VudCsrKSB7CisJCQlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJCQl1aV9Db21tYW5kID0gMHgyVUw7CisJCQl9IGVsc2UgeworCQkJCXVpX0NvbW1hbmQgPSAweDEwVUw7CisJCQl9CisJCQlpX1dhdGNoZG9nTmJyID0gaV9Db3VudDsKKwkJCW91dGwodWlfQ29tbWFuZCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArCisJCQkJMCk7CisJCX0KKworCX0KKwlpZiAoZGF0YVswXSA9PSA0KQkvL3N0YXJ0IGFsbCBXYXRjaGRvZ3MKKwl7CisJCXVpX0NvbW1hbmQgPSAwOworCQlmb3IgKGlfQ291bnQgPSAxOyBpX0NvdW50IDw9IDQ7IGlfQ291bnQrKykgeworCQkJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1dBVENIRE9HKSB7CisJCQkJdWlfQ29tbWFuZCA9IDB4MVVMOworCQkJfSBlbHNlIHsKKwkJCQl1aV9Db21tYW5kID0gMHg4VUw7CisJCQl9CisJCQlpX1dhdGNoZG9nTmJyID0gaV9Db3VudDsKKwkJCW91dGwodWlfQ29tbWFuZCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArCisJCQkJMCk7CisJCX0KKwl9CisJaWYgKGRhdGFbMF0gPT0gNSkJLy90cmlnZ2VyIGFsbCBXYXRjaGRvZ3MKKwl7CisJCXVpX0NvbW1hbmQgPSAwOworCQlmb3IgKGlfQ291bnQgPSAxOyBpX0NvdW50IDw9IDQ7IGlfQ291bnQrKykgeworCQkJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1dBVENIRE9HKSB7CisJCQkJdWlfQ29tbWFuZCA9IDB4NFVMOworCQkJfSBlbHNlIHsKKwkJCQl1aV9Db21tYW5kID0gMHgyMFVMOworCQkJfQorCisJCQlpX1dhdGNoZG9nTmJyID0gaV9Db3VudDsKKwkJCW91dGwodWlfQ29tbWFuZCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArCisJCQkJMCk7CisJCX0KKwkJaV9UZW1wID0gMTsKKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMDM1X1JlYWRUaW1lcldhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgVGhlIFNlbGVjdGVkIFRpbWVyICwgQ291bnRlciBvciBXYXRjaGRvZyAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgIAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CWRhdGFbMF0gICAgICAgICAgICA6IHNvZnR3YXJlIHRyaWdnZXIgc3RhdHVzCisgICAgICAgICAgICAgIGRhdGFbMV0gICAgICAgICAgICA6IGhhcmR3YXJlIHRyaWdnZXIgc3RhdHVzCit8ICAgICAJCQkJZGF0YVsyXSAgICAgICAgICAgIDogU29mdHdhcmUgY2xlYXIgc3RhdHVzCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzNdICAgICAgICAgICAgOiBPdmVyZmxvdyBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgIGRhdGFbNF0gICAgICAgICAgICA6IFRpbWVyIGFjdHVhbCB2YWx1ZQorCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kwMzVfUmVhZFRpbWVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfU3RhdHVzID0gMDsJLy8gU3RhdHVzIHJlZ2lzdGVyCisJaV9XYXRjaGRvZ05iciA9IGluc24tPnVudXNlZFswXTsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqLworCS8qIEdldCB0aGUgc3RhdHVzICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwl1aV9TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxNik7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogR2V0IHRoZSBzb2Z0d2FyZSB0cmlnZ2VyIHN0YXR1cyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRhdGFbMF0gPSAoKHVpX1N0YXR1cyA+PiAxKSAmIDEpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIEdldCB0aGUgaGFyZHdhcmUgdHJpZ2dlciBzdGF0dXMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlkYXRhWzFdID0gKCh1aV9TdGF0dXMgPj4gMikgJiAxKTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogR2V0IHRoZSBzb2Z0d2FyZSBjbGVhciBzdGF0dXMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZGF0YVsyXSA9ICgodWlfU3RhdHVzID4+IDMpICYgMSk7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIEdldCB0aGUgb3ZlcmZsb3cgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRhdGFbM10gPSAoKHVpX1N0YXR1cyA+PiAwKSAmIDEpOworCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9USU1FUikgeworCQlkYXRhWzRdID0gaW5sKGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMCk7CisKKwl9CQkJLy8gIGlmICAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX1RJTUVSKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBJTlQgaV9BUENJMDM1X0NvbmZpZ0FuYWxvZ0lucHV0ICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIEFuYWxvZyBJbnB1dCBTdWJkZXZpY2UgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgOiBJbnNuIFN0cnVjdHVyZSBQb2ludGVyICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgICAgICA6IFdhcm5pbmcgZGVsYXkgdmFsdWUKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kwMzVfQ29uZmlnQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKwlvdXRsKDB4MjAwIHwgMCwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMHg0KTsKKwlvdXRsKDAsIGRldnByaXYtPmlvYmFzZSArIDEyOCArIDApOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW5pdGlhbGlzZSB0aGUgd2FybmluZyB2YWx1ZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGwoMHgzMDAgfCAwLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAweDQpOworCW91dGwoKGRhdGFbMF0gPDwgOCksIGRldnByaXYtPmlvYmFzZSArIDEyOCArIDApOworCW91dGwoMHgyMDAwMDBVTCwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMTIpOworCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMDM1X1JlYWRBbmFsb2dJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gcmVhZCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8Cit8CQkJICAgICAgICAgIGRhdGFbMF0gIDogRGlnaXRhbCBWYWx1ZSBPZiBJbnB1dCAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kwMzVfUmVhZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisvKioqKioqKioqKioqKioqKioqLworLyogIFNldCB0aGUgc3RhcnQgKi8KKy8qKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gMHg4MDAwMDsKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlIHRoZSBjb21tYW5kIHJlZ2lzdGVyICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgOCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSZWFkIHRoZSBkaWdpdGFsIHZhbHVlIG9mIHRoZSBpbnB1dCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlkYXRhWzBdID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDEyOCArIDI4KTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6ICBpbnQgaV9BUENJMDM1X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCQkJICAgICB8Cit8CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOlJlc2V0cyB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBjYXJkICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTAzNV9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlJTlQgaV9Db3VudCA9IDA7CisJZm9yIChpX0NvdW50ID0gMTsgaV9Db3VudCA8PSA0OyBpX0NvdW50KyspIHsKKwkJaV9XYXRjaGRvZ05iciA9IGlfQ291bnQ7CisJCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDApOwkvL3N0b3AgYWxsIHRpbWVycworCX0KKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMTIpOwkvL0Rpc2FibGUgdGhlIHdhcm5pbmcgZGVsYXkKKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogc3RhdGljIHZvaWQgdl9BUENJMDM1X0ludGVycnVwdAkJCQkJICAgICB8Cit8CQkJCQkgIChpbnQgaXJxICwgdm9pZCAqZCkgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBSb3V0aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB2b2lkICpkICAgICAgICAgICAgICAgICA6IHZvaWQgcG9pbnRlciAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK3N0YXRpYyB2b2lkIHZfQVBDSTAzNV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlVSU5UIHVpX1N0YXR1c1JlZ2lzdGVyMSA9IDA7CisJVUlOVCB1aV9TdGF0dXNSZWdpc3RlcjIgPSAwOworCVVJTlQgdWlfUmVhZENvbW1hbmQgPSAwOworCVVJTlQgdWlfQ2hhbm5lbE51bWJlciA9IDA7CisJVUlOVCB1aV9EaWdpdGFsVGVtcGVyYXR1cmUgPSAwOworCWlmIChpX1RlbXAgPT0gMSkgeworCQlpX1dhdGNoZG9nTmJyID0gaV9GbGFnOworCQlpX0ZsYWcgPSBpX0ZsYWcgKyAxOworCX0KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGVtcGVyYXR1cmUgV2FybmluZyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfU3RhdHVzUmVnaXN0ZXIxID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDEyOCArIDE2KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgZm9yIFdhdGNoZG9nL3RpbWVyICovCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwl1aV9TdGF0dXNSZWdpc3RlcjIgPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAyMCk7CisKKwlpZiAoKCgodWlfU3RhdHVzUmVnaXN0ZXIxKSAmIDB4OCkgPT0gMHg4KSkJLy9UZXN0IGlmIHdhcm5pbmcgcmVsYXkgaW50ZXJydXB0CisJeworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBEaXNhYmxlIHRoZSB0ZW1wZXJhdHVyZSB3YXJuaW5nICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX1JlYWRDb21tYW5kID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDEyOCArIDEyKTsKKwkJdWlfUmVhZENvbW1hbmQgPSB1aV9SZWFkQ29tbWFuZCAmIDB4RkZERjAwMDBVTDsKKwkJb3V0bCh1aV9SZWFkQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMTIpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogUmVhZCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NoYW5uZWxOdW1iZXIgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgNjApOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogUmVhZCB0aGUgZGlnaXRhbCB0ZW1wZXJhdHVyZSB2YWx1ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfRGlnaXRhbFRlbXBlcmF0dXJlID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDEyOCArIDYwKTsKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCX0JCQkvL2lmICgoKHVpX1N0YXR1c1JlZ2lzdGVyMSAmIDB4OCkgPT0gMHg4KSkKKworCWVsc2UgeworCQlpZiAoKHVpX1N0YXR1c1JlZ2lzdGVyMiAmIDB4MSkgPT0gMHgxKSB7CisJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCX0KKwl9CQkJLy9lbHNlIGlmICgoKHVpX1N0YXR1c1JlZ2lzdGVyMSAmIDB4OCkgPT0gMHg4KSkKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTAzNS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMDM1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkN2MwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTAzNS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKiBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uICovCisjZGVmaW5lIEFQQ0kwMzVfQk9BUkRfVkVORE9SX0lECQkweDE1QjgKKyNkZWZpbmUgQVBDSTAzNV9BRERSRVNTX1JBTkdFCQkyNTUKKworSU5UIGlfVFdfTnVtYmVyOworc3RydWN0IHsKKwlJTlQgaV9HYWluOworCUlOVCBpX1BvbGFyaXR5OworCUlOVCBpX09mZnNldFJhbmdlOworCUlOVCBpX0NvdXBsaW5nOworCUlOVCBpX1NpbmdsZURpZmY7CisJSU5UIGlfQXV0b0NhbGlicmF0aW9uOworCVVJTlQgdWlfUmVsb2FkVmFsdWU7CisJVUlOVCB1aV9UaW1lVW5pdFJlbG9hZFZhbDsKKwlJTlQgaV9JbnRlcnJ1cHQ7CisJSU5UIGlfTW9kdWxlU2VsZWN0aW9uOworfSBDb25maWdfUGFyYW1ldGVyc19NYWluOworCisvKiBBTkFMT0cgSU5QVVQgUkFOR0UgKi8KK3N0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kwMzVfYWkgPSB7IDgsIHsKKwkJCQkgICAgICAgQklQX1JBTkdFKDEwKSwKKwkJCQkgICAgICAgQklQX1JBTkdFKDUpLAorCQkJCSAgICAgICBCSVBfUkFOR0UoMiksCisJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkgICAgICAgVU5JX1JBTkdFKDEwKSwKKwkJCQkgICAgICAgVU5JX1JBTkdFKDUpLAorCQkJCSAgICAgICBVTklfUkFOR0UoMiksCisJCQkJICAgICAgIFVOSV9SQU5HRSgxKQorCQkJCSAgICAgICB9Cit9OworCisvKiBUaW1lciAvIFdhdGNoZG9nIFJlbGF0ZWQgRGVmaW5lcyAqLworI2RlZmluZSBBUENJMDM1X1RDV19TWU5DX0VOQUJMRURJU0FCTEUJMAorI2RlZmluZSBBUENJMDM1X1RDV19SRUxPQURfVkFMVUUJNAorI2RlZmluZSBBUENJMDM1X1RDV19USU1FQkFTRQkJOAorI2RlZmluZSBBUENJMDM1X1RDV19QUk9HCQkxMgorI2RlZmluZSBBUENJMDM1X1RDV19UUklHX1NUQVRVUwkJMTYKKyNkZWZpbmUgQVBDSTAzNV9UQ1dfSVJRCQkJMjAKKyNkZWZpbmUgQVBDSTAzNV9UQ1dfV0FSTl9USU1FVkFMCTI0CisjZGVmaW5lIEFQQ0kwMzVfVENXX1dBUk5fVElNRUJBU0UJMjgKKworI2RlZmluZSBBRERJREFUQV9USU1FUgkJCTAKKy8qICNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cJCTEgKi8KKworI2RlZmluZSBBUENJMDM1X1RXMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kwMzVfVFcyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFQQ0kwMzVfVFczICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEFQQ0kwMzVfVFc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk2CisKKyNkZWZpbmUgQVBDSTAzNV9BSV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kwMzVfVEVNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4CisjZGVmaW5lIEFQQ0kwMzVfQUxSX1NFUSAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUENJMDM1X1NUQVJUX1NUT1BfSU5ERVggICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVBDSTAzNV9BTFJfU1RBUlRfU1RPUCAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBUENJMDM1X0FMUl9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFQQ0kwMzVfRU9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQVBDSTAzNV9DSEFOX05PICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBBUENJMDM1X0NIQU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEFQQ0kwMzVfQ09OVl9USU1FX1RJTUVfQkFTRQkzNgorI2RlZmluZSBBUENJMDM1X1JFTE9BRF9DT05WX1RJTUVfVkFMCTMyCisjZGVmaW5lIEFQQ0kwMzVfREVMQVlfVElNRV9USU1FX0JBU0UJNDQKKyNkZWZpbmUgQVBDSTAzNV9SRUxPQURfREVMQVlfVElNRV9WQUwJNDAKKyNkZWZpbmUgRU5BQkxFX0VYVF9UUklHCQkJMQorI2RlZmluZSBFTkFCTEVfRVhUX0dBVEUJCQkyCisjZGVmaW5lIEVOQUJMRV9FWFRfVFJJR19HQVRFCQkzCisKKyNkZWZpbmUgQU5BTE9HX0lOUFVUCQkJMAorI2RlZmluZSBURU1QRVJBVFVSRQkJCTEKKyNkZWZpbmUgUkVTSVNUQU5DRQkJCTIKKworI2RlZmluZSBBRERJREFUQV9HUkVBVEVSX1RIQU5fVEVTVAkwCisjZGVmaW5lIEFERElEQVRBX0xFU1NfVEhBTl9URVNUCQkxCisKKyNkZWZpbmUgQVBDSTAzNV9NQVhWT0xUICAgICAgICAgICAgICAgICAgICAgICAgIDIuNQorCisjZGVmaW5lIEFERElEQVRBX1VOSVBPTEFSICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBRERJREFUQV9CSVBPTEFSICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLyogQURESURBVEEgRW5hYmxlIERpc2FibGUgKi8KKyNkZWZpbmUgQURESURBVEFfRU5BQkxFCQkJCTEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRQkJCTAKKworLyogSGFyZHdhcmUgTGF5ZXIgZnVuY3Rpb25zIGZvciBBcGNpMDM1ICovCisKKy8qIFRJTUVSICovCisvKiB0aW1lciB2YWx1ZSBpcyBwYXNzZWQgYXMgdSBzZWNvbmRzICovCitJTlQgaV9BUENJMDM1X0NvbmZpZ1RpbWVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMDM1X1N0YXJ0U3RvcFdyaXRlVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kwMzVfUmVhZFRpbWVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKiBUZW1wZXJhdHVyZSBSZWxhdGVkIERlZmluZXMgKEFuYWxvZyBJbnB1dCBTdWJkZXZpY2UpICovCisKK0lOVCBpX0FQQ0kwMzVfQ29uZmlnQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTAzNV9SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qIEludGVycnVwdCAqLworc3RhdGljIHZvaWQgdl9BUENJMDM1X0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKworLyogUmVzZXQgZnVuY3Rpb25zICovCitJTlQgaV9BUENJMDM1X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTAzMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTAzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzk2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmMKQEAgLTAsMCArMSwyODUgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0xMDMyICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMTAzMi5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMTAzMiAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiaHdkcnZfYXBjaTEwMzIuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorLy9HbG9iYWwgdmFyaWFibGVzCitVSU5UIHVpX0ludGVycnVwdFN0YXR1cyA9IDA7CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTAzMl9Db25maWdEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgdGhlIGRpZ2l0YWwgaW5wdXQgU3ViZGV2aWNlICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICBkYXRhWzBdICAgICAgICAgICAgOiAxIEVuYWJsZSAgRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgfAorfAkJCQkJCQkJICAgMCBEaXNhYmxlIERpZ2l0YWwgSW5wdXQgSW50ZXJydXB0IHwKK3wJCQkgIGRhdGFbMV0gICAgICAgICAgICA6IDAgQURESURBVEEgSW50ZXJydXB0IE9SIExPR0lDCSB8Cit8CQkJCQkJCQkgOiAxIEFERElEQVRBIEludGVycnVwdCBBTkQgTE9HSUMgICAgfAorfAkJCSAgZGF0YVsyXQkJCSA6IEludGVycnVwdCBtYXNrIGZvciB0aGUgbW9kZSAxCSB8Cit8CQkJICBkYXRhWzNdCQkJIDogSW50ZXJydXB0IG1hc2sgZm9yIHRoZSBtb2RlIDIJIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTAzMl9Db25maWdEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVG1wVmFsdWU7CisKKwlVTE9ORyB1bF9Db21tYW5kMSA9IDA7CisJVUxPTkcgdWxfQ29tbWFuZDIgPSAwOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGRpZ2l0YWwgaW5wdXQgbG9naWMgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKGRhdGFbMF0gPT0gQURESURBVEFfRU5BQkxFKSB7CisJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgfCBkYXRhWzJdOworCQl1bF9Db21tYW5kMiA9IHVsX0NvbW1hbmQyIHwgZGF0YVszXTsKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUxKTsKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUyKTsKKwkJaWYgKGRhdGFbMV0gPT0gQURESURBVEFfT1IpIHsKKwkJCW91dGwoMHg0LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CisJCQl1aV9UbXBWYWx1ZSA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsKKwkJfQkJLy9pZiAoZGF0YVsxXSA9PSBBRERJREFUQV9PUikKKwkJZWxzZSB7CisJCQlvdXRsKDB4NiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOworCQl9CQkvL2Vsc2UgaWYoZGF0YVsxXSA9PSBBRERJREFUQV9PUikKKwl9CQkJLy8gaWYoIGRhdGFbMF0gPT0gQURESURBVEFfRU5BQkxFKQorCWVsc2UgeworCQl1bF9Db21tYW5kMSA9IHVsX0NvbW1hbmQxICYgMHhGRkZGMDAwMDsKKwkJdWxfQ29tbWFuZDIgPSB1bF9Db21tYW5kMiAmIDB4RkZGRjAwMDA7CisJCW91dGwodWxfQ29tbWFuZDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSk7CisJCW91dGwodWxfQ29tbWFuZDIsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMik7CisJCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CisJfQkJCS8vZWxzZSBpZiAgKCBkYXRhWzBdID09IEFERElEQVRBX0VOQUJMRSkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTEwMzJfUmVhZDFEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgZGlnaXRhbCBpbnB1dCAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICAgIFVJTlQgdWlfQ2hhbm5lbCA6IENoYW5uZWwgbnVtYmVyIHRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxMDMyX1JlYWQxRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RtcFZhbHVlID0gMDsKKwlVSU5UIHVpX0NoYW5uZWw7CisJdWlfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmICh1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PSAzMSkgeworCQl1aV9UbXBWYWx1ZSA9IChVSU5UKSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUCk7CisJCS8vICBzaW5jZSBvbmx5IDEgY2hhbm5lbCByZXFkICB0byBicmluZyBpdCB0byBsYXN0IGJpdCBpdCBpcyByb3RhdGVkCisJCS8vICA4ICsoY2hhbiAtIDEpIHRpbWVzIHRoZW4gQU5EZWQgd2l0aCAxIGZvciBsYXN0IGJpdC4KKwkJKmRhdGEgPSAodWlfVG1wVmFsdWUgPj4gdWlfQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vaWYodWlfQ2hhbm5lbCA+PSAwICYmIHVpX0NoYW5uZWwgPD0zMSkKKwllbHNlIHsKKwkJLy9jb21lZGlfZXJyb3IoZGV2LCIgXG4gY2hhbiBzcGVjIHdyb25nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCX0JCQkvL2Vsc2UgaWYodWlfQ2hhbm5lbCA+PSAwICYmIHVpX0NoYW5uZWwgPD0zMSkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxMDMyX1JlYWRNb3JlRGlnaXRhbElucHV0ICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIFJlcXVlc3RlZCBkaWdpdGFsIGlucHV0cyAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gYmUgUmVhZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxMDMyX1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1BvcnRWYWx1ZSA9IGRhdGFbMF07CisJVUlOVCB1aV9NYXNrID0gMDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsczsKKworCXVpX05vT2ZDaGFubmVscyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChkYXRhWzFdID09IDApIHsKKwkJKmRhdGEgPSAoVUlOVCkgaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVApOworCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVscykgeworCQljYXNlIDI6CisJCQl1aV9NYXNrID0gMzsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXVpX01hc2sgPSAxNTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXVpX01hc2sgPSAyNTU7CisJCQkqZGF0YSA9ICgqZGF0YSA+PiAoOCAqIHVpX1BvcnRWYWx1ZSkpICYgdWlfTWFzazsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJdWlfTWFzayA9IDY1NTM1OworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDE2ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgMzE6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8vY29tZWRpX2Vycm9yKGRldiwiIFxuY2hhbiBzcGVjIHdyb25nXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCWJyZWFrOworCQl9CQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJfQkJCS8vaWYoZGF0YVsxXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJKmRhdGEgPSB1aV9JbnRlcnJ1cHRTdGF0dXM7CisJCX0JCS8vaWYoZGF0YVsxXT09MSkKKwl9CQkJLy9lbHNlIGlmKGRhdGFbMV09PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kxMDMyX0ludGVycnVwdAkJCQkJICAgICB8Cit8CQkJCQkgIChpbnQgaXJxICwgdm9pZCAqZCkgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIGludGVycnVwdGlibGUgZGlnaXRhbCBpbnB1dHMgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB2b2lkICpkICAgICAgICAgICAgICAgICA6IHZvaWQgcG9pbnRlciAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworc3RhdGljIHZvaWQgdl9BUENJMTAzMl9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCVVJTlQgdWlfVGVtcDsKKwkvL2Rpc2FibGUgdGhlIGludGVycnVwdAorCXVpX1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOworCW91dGwodWlfVGVtcCAmIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX0RJU0FCTEUsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsKKwl1aV9JbnRlcnJ1cHRTdGF0dXMgPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfU1RBVFVTKTsKKwl1aV9JbnRlcnJ1cHRTdGF0dXMgPSB1aV9JbnRlcnJ1cHRTdGF0dXMgJiAwWDAwMDBGRkZGOworCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CS8vIHNlbmQgc2lnbmFsIHRvIHRoZSBzYW1wbGUKKwlvdXRsKHVpX1RlbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsJLy9lbmFibGUgdGhlIGludGVycnVwdAorCXJldHVybjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxMDMyX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOnJlc2V0cyBhbGwgdGhlIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTAzMl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOwkvL2Rpc2FibGUgdGhlIGludGVycnVwdHMKKwlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfU1RBVFVTKTsJLy9SZXNldCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSk7CS8vRGlzYWJsZSB0aGUgYW5kL29yIGludGVycnVwdAorCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5ZWY4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKioqKioqKioqICAgICAgRGVmaW5pdGlvbnMgZm9yIEFQQ0ktMTAzMiBjYXJkICAqKioqKi8KKworI2RlZmluZSBBUENJMTAzMl9CT0FSRF9WRU5ET1JfSUQgMHgxNUI4CisjZGVmaW5lIEFQQ0kxMDMyX0FERFJFU1NfUkFOR0UgIDIwCisvL0RJR0lUQUwgSU5QVVQgREVGSU5FCisKKyNkZWZpbmUgQVBDSTEwMzJfRElHSVRBTF9JUCAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTEgICAgIDQKKyNkZWZpbmUgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTIgICAgIDgKKyNkZWZpbmUgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEgICAgICAgICAgICAgICAgIDE2CisKKy8vRGlnaXRhbCBJbnB1dCBJUlEgRnVuY3Rpb24gU2VsZWN0aW9uCisjZGVmaW5lIEFERElEQVRBX09SICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRERJREFUQV9BTkQgICAgICAgICAgICAgICAgIDEKKworLy9EaWdpdGFsIElucHV0IEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfU1RBVFVTICAgIDEyCisKKy8vRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgRW5hYmxlIERpc2FibGUuCisjZGVmaW5lIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX0VOQUJMRSAgICAweDQKKyNkZWZpbmUgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfRElTQUJMRSAgIDB4RkZGRkZGRkIKKworLy9BRERJREFUQSBFbmFibGUgRGlzYWJsZQorCisjZGVmaW5lIEFERElEQVRBX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kxMDMyCisKKy8vREkKKy8vIGZvciBkaSByZWFkCisKK0lOVCBpX0FQQ0kxMDMyX0NvbmZpZ0RpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTEwMzJfUmVhZDFEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTEwMzJfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gSW50ZXJydXB0IGZ1bmN0aW9ucy4uLi4uCisKK3N0YXRpYyB2b2lkIHZfQVBDSTEwMzJfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworLy9SZXNldAorSU5UIGlfQVBDSTEwMzJfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2YWRjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuYwpAQCAtMCwwICsxLDMwNDUgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0xNTAwICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMTUwMC5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMTUwMCAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMTUwMC5oIgorCitpbnQgaV9UaW1lckNvdW50ZXIxSW5pdCA9IDA7CitpbnQgaV9UaW1lckNvdW50ZXIySW5pdCA9IDA7CitpbnQgaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdCA9IDA7CitpbnQgaV9FdmVudDFTdGF0dXMgPSAwLCBpX0V2ZW50MlN0YXR1cyA9IDA7CitpbnQgaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdCA9IDA7CitpbnQgaV9Mb2dpYyA9IDAsIGlfQ291bnRlckxvZ2ljID0gMDsKK2ludCBpX0ludGVycnVwdE1hc2sgPSAwOworaW50IGlfSW5wdXRDaGFubmVsID0gMDsKK2ludCBpX1RpbWVyQ291bnRlcjFFbmFibGVkID0gMCwgaV9UaW1lckNvdW50ZXIyRW5hYmxlZCA9CisJMCwgaV9XYXRjaGRvZ0NvdW50ZXIzRW5hYmxlZCA9IDA7CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX0NvbmZpZ0RpZ2l0YWxJbnB1dEV2ZW50ICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQW4gZXZlbnQgY2FuIGJlIGdlbmVyYXRlZCBmb3IgZWFjaCBwb3J0LiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZXZlbnQgaXMgcmVsYXRlZCB0byB0aGUgZmlyc3QgOCBjaGFubmVscyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChwb3J0IDEpIGFuZCB0aGUgc2Vjb25kIHRvIHRoZSBmb2xsb3dpbmcgNiBjaGFubmVscyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKHBvcnQgMikuIEFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgd2hlbiBvbmUgb3IgYm90aCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBldmVudHMgaGF2ZSBvY2N1cnJlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgZGF0YVswXSAgICAgICAgICAgIDpOdW1iZXIgb2YgdGhlIGlucHV0IHBvcnQgb24gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSBldmVudCB3aWxsIHRha2UgcGxhY2UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgb3IgMikKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgOiBUaGUgZXZlbnQgbG9naWMgZm9yIHBvcnQgMSBoYXMgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWUgcG9zc2liaWxpdGllcyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDowICBBUENJMTUwMF9BTkQgICAgICAgOlRoaXMgbG9naWMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua3MgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXRzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYW4gQU5EIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWMuICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgQVBDSTE1MDBfT1IgICAgICAgIDpUaGlzIGxvZ2ljICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlucHV0cyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIGxvZ2ljLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgIEFQQ0kxNTAwX09SX1BSSU9SSVRZICAgICAgICB8Cit8CQkJCQkJCQk6VGhpcyBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rcyAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnB1dHMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIGxvZ2ljLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgMSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgdGhlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3QgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCBhbmQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ICAgOCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNtYWxsZXN0fAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBzZWNvbmQgcG9ydCB0aGUgdXNlciBoYXN8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHBvc3NpYmlsaXR5OiAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNTAwX09SICAgICAgICA6VGhpcyBsb2dpYyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rcyAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnB1dHMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xhcml0eSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIGxvZ2ljICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdICAgICAgICAgICAgICA6IFRoZXNlIDgtY2hhcmFjdGVyIHdvcmQgZm9yIHBvcnQxfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDYtY2hhcmFjdGVyIHdvcmQgZm9yIHBvcnQgMiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlIHRoZSBtYXNrIG9mIHRoZSBldmVudC4gICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggcGxhY2UgZ2l2ZXMgdGhlIHN0YXRlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGlucHV0IGNoYW5uZWxzIGFuZCBjYW4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIG9uZSBvZiB0aGVzZSBzaXggY2hhcmFjdGVyc3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICA6IFRoaXMgaW5wdXQgbXVzdCBiZSBvbiAwICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDogVGhpcyBpbnB1dCBtdXN0IGJlIG9uIDEgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgOiBUaGlzIGlucHV0IHJlYWN0cyB0byAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZmFsbGluZyBlZGdlICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIDogVGhpcyBpbnB1dCByZWFjdHMgdG8gYSAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaXNpbmcgZWRnZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICA6IFRoaXMgaW5wdXQgcmVhY3RzIHRvIGJvdGggZWRnZXMgfAorfAorfAkJCQkJCQkJNSAgOiBUaGlzIGlucHV0IGlzIG5vdCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIGV2ZW50ICAgCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTUwMF9Db25maWdEaWdpdGFsSW5wdXRFdmVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlfUGF0dGVyblBvbGFyaXR5ID0gMCwgaV9QYXR0ZXJuVHJhbnNpdGlvbiA9IDAsIGlfUGF0dGVybk1hc2sgPSAwOworCWludCBpX01heENoYW5uZWwgPSAwLCBpX0NvdW50ID0gMCwgaV9FdmVudE1hc2sgPSAwOworCWludCBpX1BhdHRlcm5UcmFuc2l0aW9uQ291bnQgPSAwLCBpX1JlZ1ZhbHVlOworCWludCBpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIERpc2FibGVzICB0aGUgbWFpbiBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDB4MDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJaWYgKGRhdGFbMF0gPT0gMSkgeworCQlpX01heENoYW5uZWwgPSA4OworCX0JCQkvLyBpZiAoZGF0YVswXSA9PSAxKQorCWVsc2UgeworCQlpZiAoZGF0YVswXSA9PSAyKSB7CisJCQlpX01heENoYW5uZWwgPSA2OworCQl9CQkvLyBpZihkYXRhWzBdPT0yKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIHBvcnQgZXZlbnQgIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2UgaWYoZGF0YVswXT09MikKKwl9CQkJLy9lbHNlICBpZiAoZGF0YVswXSA9PSAxKQorCXN3aXRjaCAoZGF0YVsxXSkgeworCWNhc2UgMDoKKwkJZGF0YVsxXSA9IEFQQ0kxNTAwX0FORDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkYXRhWzFdID0gQVBDSTE1MDBfT1I7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YVsxXSA9IEFQQ0kxNTAwX09SX1BSSU9SSVRZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuVGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgbG9naWMgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goZGF0YVsxXSk7CisKKwlpX0xvZ2ljID0gZGF0YVsxXTsKKwlmb3IgKGlfQ291bnQgPSBpX01heENoYW5uZWwsIGkgPSAwOyBpX0NvdW50ID4gMDsgaV9Db3VudC0tLCBpKyspIHsKKwkJaV9FdmVudE1hc2sgPSBkYXRhWzIgKyBpXTsKKwkJc3dpdGNoIChpX0V2ZW50TWFzaykgeworCQljYXNlIDA6CisJCQlpX1BhdHRlcm5NYXNrID0KKwkJCQlpX1BhdHRlcm5NYXNrIHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtIGlfQ291bnQpKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpX1BhdHRlcm5NYXNrID0KKwkJCQlpX1BhdHRlcm5NYXNrIHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtIGlfQ291bnQpKTsKKwkJCWlfUGF0dGVyblBvbGFyaXR5ID0KKwkJCQlpX1BhdHRlcm5Qb2xhcml0eSB8ICgxIDw8IChpX01heENoYW5uZWwgLQorCQkJCQlpX0NvdW50KSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaV9QYXR0ZXJuTWFzayA9CisJCQkJaV9QYXR0ZXJuTWFzayB8ICgxIDw8IChpX01heENoYW5uZWwgLSBpX0NvdW50KSk7CisJCQlpX1BhdHRlcm5UcmFuc2l0aW9uID0KKwkJCQlpX1BhdHRlcm5UcmFuc2l0aW9uIHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtCisJCQkJCWlfQ291bnQpKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlpX1BhdHRlcm5NYXNrID0KKwkJCQlpX1BhdHRlcm5NYXNrIHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtIGlfQ291bnQpKTsKKwkJCWlfUGF0dGVyblBvbGFyaXR5ID0KKwkJCQlpX1BhdHRlcm5Qb2xhcml0eSB8ICgxIDw8IChpX01heENoYW5uZWwgLQorCQkJCQlpX0NvdW50KSk7CisJCQlpX1BhdHRlcm5UcmFuc2l0aW9uID0KKwkJCQlpX1BhdHRlcm5UcmFuc2l0aW9uIHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtCisJCQkJCWlfQ291bnQpKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlpX1BhdHRlcm5UcmFuc2l0aW9uID0KKwkJCQlpX1BhdHRlcm5UcmFuc2l0aW9uIHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtCisJCQkJCWlfQ291bnQpKTsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGUgb3B0aW9uIGluZGljYXRlZCBpbiB0aGUgZXZlbnQgbWFzayBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGlfRXZlbnRNYXNrKQorCX0JCQkvL2ZvciAoaV9Db3VudCA9IGlfTWF4Q2hhbm5lbDsgaV9Db3VudCA+MDtpX0NvdW50IC0tKQorCisJaWYgKGRhdGFbMF0gPT0gMSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGludGVycnVwdCBsb2dpYyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRhdGFbMV0gPT0gQVBDSTE1MDBfQU5EIHx8CisJCQlkYXRhWzFdID09IEFQQ0kxNTAwX09SIHx8CisJCQlkYXRhWzFdID09IEFQQ0kxNTAwX09SX1BSSU9SSVRZKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0cyBpZiBhIHRyYW5zaXRpb24gd2FzIGRlY2xhcmVkICovCisJCQkvKiBmb3IgYSBPUiBQUklPUklUWSBsb2dpYyAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkYXRhWzFdID09IEFQQ0kxNTAwX09SX1BSSU9SSVRZCisJCQkJJiYgaV9QYXR0ZXJuVHJhbnNpdGlvbiAhPSAwKSB7CisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVHJhbnNpdGlvbiBlcnJvciBvbiBhbiBPUiBQUklPUklUWSBsb2dpYyAqLworCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCXByaW50aygiXG5UcmFuc2l0aW9uIGVycm9yIG9uIGFuIE9SIFBSSU9SSVRZIGxvZ2ljXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy8gaWYgKGRhdGFbMV09PSBBUENJMTUwMF9PUl9QUklPUklUWSAmJiBpX1BhdHRlcm5UcmFuc2l0aW9uICE9IDApCisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdHMgaWYgbW9yZSB0aGFuIG9uZSB0cmFuc2l0aW9uICovCisJCQkvKiB3YXMgZGVjbGFyZWQgZm9yIGFuIEFORCBsb2dpYyAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9BTkQpIHsKKwkJCQlmb3IgKGlfQ291bnQgPSAwOyBpX0NvdW50IDwgODsgaV9Db3VudCsrKSB7CisJCQkJCWlfUGF0dGVyblRyYW5zaXRpb25Db3VudCA9CisJCQkJCQlpX1BhdHRlcm5UcmFuc2l0aW9uQ291bnQgKworCQkJCQkJKChpX1BhdHRlcm5UcmFuc2l0aW9uID4+CisJCQkJCQkJaV9Db3VudCkgJiAweDEpOworCisJCQkJfQkvL2ZvciAoaV9Db3VudCA9IDA7IGlfQ291bnQgPCA4OyBpX0NvdW50KyspCisKKwkJCQlpZiAoaV9QYXR0ZXJuVHJhbnNpdGlvbkNvdW50ID4gMSkgeworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRyYW5zaXRpb24gZXJyb3Igb24gYW4gQU5EIGxvZ2ljICAgICAqLworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCXByaW50aygiXG4gVHJhbnNpdGlvbiBlcnJvciBvbiBhbiBBTkQgbG9naWNcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CS8vIGlmIChpX1BhdHRlcm5UcmFuc2l0aW9uQ291bnQgPiAxKQorCQkJfQkvLyBpZiAoZGF0YVsxXT09IEFQQ0kxNTAwX0FORCkKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkvKiBEaXNhYmxlIFBvcnQgQSAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKDB4RjAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgcG9sYXJpdHkgcmVnaXN0ZXIgb2YgcG9ydCAxICAgICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9QQVRURVJOX1BPTEFSSVRZLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlvdXRiKGlfUGF0dGVyblBvbGFyaXR5LAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwYXR0ZXJuIG1hc2sgcmVnaXN0ZXIgb2YgICAgICAqLworCQkJLyogcG9ydCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfUEFUVEVSTl9NQVNLLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlvdXRiKGlfUGF0dGVybk1hc2ssCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIHBhdHRlcm4gdHJhbnNpdGlvbiByZWdpc3RlciAgKi8KKwkJCS8qIG9mIHBvcnQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9QQVRURVJOX1RSQU5TSVRJT04sCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuVHJhbnNpdGlvbiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gbWFzayAgICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCAxICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1NQRUNJRklDQVRJT04sCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWlfUmVnVmFsdWUgPQorCQkJCWluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gbWFzayAgICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCAxICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1NQRUNJRklDQVRJT04sCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFBvcnQgQSBuZXcgbW9kZSAgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHhGOSkgfCBkYXRhWzFdIHwgMHg5OworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCWlfRXZlbnQxU3RhdHVzID0gMTsKKworCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MIHJlZ2lzdGVyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCS8qIEVuYWJsZSBQb3J0IEEgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqLworCQkJb3V0YigweEY0LAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJfQkJLy8gaWYoZGF0YVsxXT09QVBDSTE1MDBfQU5EfHxkYXRhWzFdPT1BUENJMTUwMF9PUnx8ZGF0YVsxXT09QVBDSTE1MDBfT1JfUFJJT1JJVFkpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRoZSBjaG9pY2UgZm9yIGludGVycnVwdCBsb2dpYyBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gZWxzZSB9Ly8gaWYoZGF0YVsxXT09QVBDSTE1MDBfQU5EfHxkYXRhWzFdPT1BUENJMTUwMF9PUnx8ZGF0YVsxXT09QVBDSTE1MDBfT1JfUFJJT1JJVFkpCisJfQkJCS8vICAgaWYgKGRhdGFbMF09PSAxKQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgZXZlbnQgc2V0dGluZyBmb3IgcG9ydCAyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGRhdGFbMF0gPT0gMikgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgZXZlbnQgbG9naWMgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRhdGFbMV0gPT0gQVBDSTE1MDBfT1IpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERpc2FibGUgUG9ydCBCICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJb3V0YigweDc0LAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiBtYXNrICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCBCICAgICAgICAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJRklDQVRJT04sCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWlfUmVnVmFsdWUgPQorCQkJCWluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIG1hc2sgICAgKi8KKwkJCS8qIHJlZ2lzdGVyIG9mIHBvcnQgQiAgICAgICAgICAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9SZWdWYWx1ZSA9IGlfUmVnVmFsdWUgJiAweEY5OworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyBlcnJvciBjaGFubmVscyAxIGFuZCAyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaV9QYXR0ZXJuTWFzayA9IChpX1BhdHRlcm5NYXNrIHwgMHhDMCk7CisJCQlpX1BhdHRlcm5Qb2xhcml0eSA9IChpX1BhdHRlcm5Qb2xhcml0eSB8IDB4QzApOworCQkJaV9QYXR0ZXJuVHJhbnNpdGlvbiA9IChpX1BhdHRlcm5UcmFuc2l0aW9uIHwgMHhDMCk7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgcG9sYXJpdHkgcmVnaXN0ZXIgb2YgcG9ydCAyICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1BBVFRFUk5fUE9MQVJJVFksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuUG9sYXJpdHksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgcGF0dGVybiB0cmFuc2l0aW9uIHJlZ2lzdGVyICAgICovCisJCQkvKiBvZiBwb3J0IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9UUkFOU0lUSU9OLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlvdXRiKGlfUGF0dGVyblRyYW5zaXRpb24sCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgcGF0dGVybiBNYXNrIHJlZ2lzdGVyICAgICovCisJCQkvKiBvZiBwb3J0IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9QQVRURVJOX01BU0ssCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuTWFzaywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIG1hc2sgICAgKi8KKwkJCS8qIHJlZ2lzdGVyIG9mIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9SZWdWYWx1ZSA9CisJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIG1hc2sgICAgKi8KKwkJCS8qIHJlZ2lzdGVyIG9mIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHhGOSkgfCA0OworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCWlfRXZlbnQyU3RhdHVzID0gMTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkvKiBFbmFibGUgUG9ydCBCICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoMHhGNCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQl9CQkvLyAgaWYgKGRhdGFbMV0gPT0gQVBDSTE1MDBfT1IpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRoZSBjaG9pY2UgZm9yIGludGVycnVwdCBsb2dpYyBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlaWYgKGRhdGFbMV0gPT0gQVBDSTE1MDBfT1IpCisJfQkJCS8vaWYoZGF0YVswXT09MikKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfU3RhcnRTdG9wSW5wdXRFdmVudCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiAgQWxsb3dzIG9yIGRpc2FsbG93cyBhIHBvcnQgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICAgIFVJTlQgdWlfQ2hhbm5lbCA6IENoYW5uZWwgbnVtYmVyIHRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgICAgIDowIFN0YXJ0IGlucHV0IGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgU3RvcCBpbnB1dCBldmVudAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgICAgICAgICAgICAgIDpObyBvZiBwb3J0ICgxIG9yIDIpCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTE1MDBfU3RhcnRTdG9wSW5wdXRFdmVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlfRXZlbnQxSW50ZXJydXB0U3RhdHVzID0gMCwgaV9FdmVudDJJbnRlcnJ1cHRTdGF0dXMgPQorCQkwLCBpX1JlZ1ZhbHVlOworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgU1RBUlQ6CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3RzIHRoZSBwb3J0IG51bWJlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkYXRhWzFdID09IDEgfHwgZGF0YVsxXSA9PSAyKSB7CisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcG9ydCAxIHNlbGVjdGVkICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgZXZlbnQgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpZiAoaV9FdmVudDFTdGF0dXMgPT0gMSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MIHJlZ2lzdGVyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIFBvcnQgQSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEYwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mICAgICAgKi8KKwkJCQkJLyogcG9ydCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQWxsb3dzIHRoZSBwYXR0ZXJuIGludGVycnVwdCAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEMwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MIHJlZ2lzdGVyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEVuYWJsZSBQb3J0IEEgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEY0LAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlpX0V2ZW50MUludGVycnVwdFN0YXR1cyA9IDE7CisJCQkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1NQRUNJRklDQVRJT04sCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCWlfUmVnVmFsdWUgPQorCQkJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQXV0aG9yaXplcyB0aGUgbWFpbiBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEQwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJfQkvLyBpZihpX0V2ZW50MVN0YXR1cz09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcbkV2ZW50IDEgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQkvL2Vsc2UgaWYoaV9FdmVudDFTdGF0dXM9PTEpCisJCQl9CS8vaWYgKGRhdGFbMV09PTEpCisJCQlpZiAoZGF0YVsxXSA9PSAyKSB7CisKKwkJCQlpZiAoaV9FdmVudDJTdGF0dXMgPT0gMSkgeworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgUG9ydCBCICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4NzQsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgICAgICAqLworCQkJCQkvKiBwb3J0IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBBbGxvd3MgdGhlIHBhdHRlcm4gaW50ZXJydXB0ICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4QzAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRW5hYmxlIFBvcnQgQiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RjQsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEF1dGhvcml6ZXMgdGhlIG1haW4gaW50ZXJydXB0IG9uIHRoZSBib2FyZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhEMCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJaV9FdmVudDJJbnRlcnJ1cHRTdGF0dXMgPSAxOworCQkJCX0JLy8gaWYoaV9FdmVudDJTdGF0dXM9PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5FdmVudCAyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0JLy9lbHNlIGlmKGlfRXZlbnQyU3RhdHVzPT0xKQorCQkJfQkvLyBpZihkYXRhWzFdPT0yKQorCQl9CQkvLyBpZiAoZGF0YVsxXSA9PSAxIHx8IGRhdGFbMF0gPT0gMikKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGhlIHBvcnQgcGFyYW1ldGVyIGlzIGluIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2UgaWYgKGRhdGFbMV0gPT0gMSB8fCBkYXRhWzBdID09IDIpCisKKwkJYnJlYWs7CisKKwljYXNlIFNUT1A6CisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3RzIHRoZSBwb3J0IG51bWJlciAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkYXRhWzFdID09IDEgfHwgZGF0YVsxXSA9PSAyKSB7CisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcG9ydCAxIHNlbGVjdGVkICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgZXZlbnQgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpZiAoaV9FdmVudDFTdGF0dXMgPT0gMSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MIHJlZ2lzdGVyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIFBvcnQgQSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEYwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mICAgICAgKi8KKwkJCQkJLyogcG9ydCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogSW5oaWJpdHMgdGhlIHBhdHRlcm4gaW50ZXJydXB0ICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RTAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRW5hYmxlIFBvcnQgQSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RjQsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCWlfRXZlbnQxSW50ZXJydXB0U3RhdHVzID0gMDsKKwkJCQl9CS8vIGlmKGlfRXZlbnQxU3RhdHVzPT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuRXZlbnQgMSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CS8vZWxzZSBpZihpX0V2ZW50MVN0YXR1cz09MSkKKwkJCX0JLy9pZiAoZGF0YVsxXT09MSkKKwkJCWlmIChkYXRhWzFdID09IDIpIHsKKwkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBldmVudCBpbml0aWFsaXNlZCAqLworCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpZiAoaV9FdmVudDJTdGF0dXMgPT0gMSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIFBvcnQgQiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4NzQsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiAgICAgICovCisJCQkJCS8qIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmhpYml0cyB0aGUgcGF0dGVybiBpbnRlcnJ1cHQgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhFMCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkvKiBFbmFibGUgUG9ydCBCICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhGNCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJaV9FdmVudDJJbnRlcnJ1cHRTdGF0dXMgPSAwOworCQkJCX0JLy8gaWYoaV9FdmVudDJTdGF0dXM9PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5FdmVudCAyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0JLy9lbHNlIGlmKGlfRXZlbnQyU3RhdHVzPT0xKQorCQkJfQkvL2lmKGRhdGFbMV09PTIpCisKKwkJfQkJLy8gaWYgKGRhdGFbMV0gPT0gMSB8fCBkYXRhWzFdID09IDIpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRoZSBwb3J0IHBhcmFtZXRlciBpcyBpbiBlcnJvclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlIGlmIChkYXRhWzFdID09IDEgfHwgZGF0YVsxXSA9PSAyKQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuVGhlIG9wdGlvbiBvZiBTVEFSVC9TVE9QIGxvZ2ljIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vc3dpdGNoKGRhdGFbMF0pCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX0luaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGRpZ2l0YWwgaW5wdXQgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgICBVSU5UIHVpX0NoYW5uZWwgOiBDaGFubmVsIG51bWJlciB0byByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTUwMF9Jbml0aWFsaXNhdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlfRHVtbXlSZWFkID0gMDsKKyAgICAvKioqKioqKioqKioqKioqKioqLworCS8qIFNvZnR3YXJlIHJlc2V0ICovCisgICAgLyoqKioqKioqKioqKioqKioqKi8KKwlpX0R1bW15UmVhZCA9IGluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCWlfRHVtbXlSZWFkID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigxLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDB4RjQsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigweDEwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qIFNlbGVjdHMgdGhlIGRhdGEgcGF0aCBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9EQVRBX1BDSVRDSF9QT0xBUklUWSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogSGlnaCBsZXZlbCBvZiBwb3J0IEEgbWVhbnMgMSAqLworCW91dGIoMHhGRiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKiBTZWxlY3RzIHRoZSBkYXRhIGRpcmVjdGlvbiByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9EQVRBX0RJUkVDVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogQWxsIGJpdHMgdXNlZCBhcyBpbnB1dHMgKi8KKwlvdXRiKDB4RkYsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIHRoZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCBvZiBwb3J0IEE6ICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgaGFuZHNoYWtlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfSEFORFNIQUtFX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgdGhlIHJlZ2lzdGVyICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigweDEwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBkYXRhIHBhdGggcG9sYXJpdHkgcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfREFUQV9QQ0lUQ0hfUE9MQVJJVFksCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEEgaGlnaCBsZXZlbCBvZiBwb3J0IEIgbWVhbnMgMSAqLworCW91dGIoMHg3RiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgZGF0YSBkaXJlY3Rpb24gcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfREFUQV9ESVJFQ1RJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEFsbCBiaXRzIHVzZWQgYXMgaW5wdXRzICovCisJb3V0YigweEZGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIElQIGFuZCBJVVMgKi8KKwlvdXRiKDB4MjAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIHRoZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCBvZiBwb3J0IEI6ICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGhhbmRzaGFrZSBzcGVjaWZpY2F0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0hBTkRTSEFLRV9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIHRoZSByZWdpc3RlciAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgZGF0YSBwYXRoIHBvbGFyaXR5IHJlZ2lzdGVyIG9mIHBvcnQgQyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQ19EQVRBX1BDSVRDSF9QT0xBUklUWSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogSGlnaCBsZXZlbCBvZiBwb3J0IEMgbWVhbnMgMSAqLworCW91dGIoMHg5LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBkYXRhIGRpcmVjdGlvbiByZWdpc3RlciBvZiBwb3J0IEMgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQ19EQVRBX0RJUkVDVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogQWxsIGJpdHMgdXNlZCBhcyBpbnB1dHMgZXhjZXB0IGNoYW5uZWwgMSAqLworCW91dGIoMHgwRSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgc3BlY2lhbCBJTyByZWdpc3RlciBvZiBwb3J0IEMgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQ19TUEVDSUFMX0lPX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgaXQgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDEgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHRpbWVyIDEgICAgICAgICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMiAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIElQIGFuZCBJVVMgKi8KKwlvdXRiKDB4MjAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyBUaW1lciAyIGludGVycnVwdCBtYW5hZ2VtZW50OiAgICAgICAgICAgICAgICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDMgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIElQIGFuZCBJVVMgKi8KKwlvdXRiKDB4MjAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBUaW1lciAzICovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyBpbnRlcnJ1cHQgbWFuYWdlbWVudCBvZiB0aW1lciAzOiAgICAgICAgICAgICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIGFsbCBpbnRlcnJ1cHRzICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX1JlYWRNb3JlRGlnaXRhbElucHV0ICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIFJlcXVlc3RlZCBkaWdpdGFsIGlucHV0cyAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gYmUgUmVhZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgICAgICA6IDAgUmVhZCBhIHNpbmdsZSBjaGFubmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHJlYWQgYSBwb3J0IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgICAgICAgOiBwb3J0IHZhbHVlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQlkYXRhWzBdICAgIDpUaGUgcmVhZCBzdGF0dXMgdmFsdWUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE1MDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfUG9ydFZhbHVlID0gZGF0YVsxXTsKKwlVSU5UIHVpX01hc2sgPSAwOworCVVJTlQgdWlfQ2hhbm5lbDsKKwlVSU5UIHVpX1RtcFZhbHVlID0gMDsKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDA6CisJCWlmICh1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PSAxNSkgeworCQkJdWlfVG1wVmFsdWUgPQorCQkJCShVSU5UKSBpbncoZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQkJQVBDSTE1MDBfRElHSVRBTF9JUCk7CisJCQkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiB1aV9DaGFubmVsKSAmIDB4MTsKKwkJfQkJLy9pZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTE1KQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaGUgY2hhbm5lbCBzcGVjaWZpY2F0aW9uIGFyZSBpbiBlcnJvclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCX0JCS8vZWxzZSBpZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTE1KQorCQlicmVhazsKKwljYXNlIDE6CisKKwkJKmRhdGEgPSAoVUlOVCkgaW53KGRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJQVBDSTE1MDBfRElHSVRBTF9JUCk7CisJCXN3aXRjaCAodWlfQ2hhbm5lbCkgeworCQljYXNlIDI6CisJCQl1aV9NYXNrID0gMzsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXVpX01hc2sgPSAxNTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXVpX01hc2sgPSAyNTU7CisJCQkqZGF0YSA9ICgqZGF0YSA+PiAoOCAqIHVpX1BvcnRWYWx1ZSkpICYgdWlfTWFzazsKKwkJCWJyZWFrOworCQljYXNlIDE1OgorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBjYW5ub3QgYmUgcmVhZCBcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJYnJlYWs7CisJCX0JCS8vc3dpdGNoKHVpX0NoYW5uZWwpCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goZGF0YVswXSkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXRFcnJvckludGVycnVwdAorICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzIHN0cnVjdCBjb21lZGlfaW5zbgorICAgICAgICAgICAgICAgICAgICAgICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgdGhlIGRpZ2l0YWwgb3V0cHV0IG1lbW9yeSBhbmQgdGhlIGRpZ2l0YWwKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZXJyb3IgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gIDoxOk1lbW9yeSBvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICAgICAgICAgICAgMDpNZW1vcnkgb2ZmICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gIDoxIEVuYWJsZSB0aGUgdm9sdGFnZSBlcnJvciBpbnRlcnJ1cHQKK3wJCQkJCQkJICAgOjAgRGlzYWJsZSB0aGUgdm9sdGFnZSBlcnJvciBpbnRlcnJ1cHQgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMTUwMF9Db25maWdEaWdpdGFsT3V0cHV0RXJyb3JJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gZGF0YVswXTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX1dyaXRlRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGVzIHBvcnQgdmFsdWUgIFRvIHRoZSBzZWxlY3RlZCBwb3J0ICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gV3JpdGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTAwX1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RhdGljIFVJTlQgdWlfVGVtcCA9IDA7CisJVUlOVCB1aV9UZW1wMTsKKworCVVJTlQgdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gZ2V0IHRoZSBjaGFubmVsCisKKwlpZiAoIWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSAwOworCisJfQkJCS8vaWYoIWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoZGF0YVszXSA9PSAwKSB7CisJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgfCB1aV9UZW1wOworCQkJb3V0dyhkYXRhWzBdLAorCQkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBUENJMTUwMF9ESUdJVEFMX09QKTsKKwkJfQkJLy9pZihkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCQljYXNlIDI6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA0OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgODoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDE1OgorCQkJCQlkYXRhWzBdID0gZGF0YVswXSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJCQlBUENJMTUwMF9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCX0JCS8vZWxzZWlmKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPQorCQkJCQkoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXgorCQkJCQkweGZmZmZmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJCQlBUENJMTUwMF9ESUdJVEFMX09QKTsKKwkJCX0JLy9pZihkYXRhWzFdPT0wKQorCQkJZWxzZSB7CisJCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCQkJY2FzZSAyOgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgzOworCQkJCQkJdWlfVGVtcDEgPSAzOworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDIgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA0OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmOworCQkJCQkJdWlfVGVtcDEgPSAxNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA0ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgODoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZmY7CisJCQkJCQl1aV9UZW1wMSA9IDI1NTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA4ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDggKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgMTU6CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJCQkJQVBDSTE1MDBfRElHSVRBTF9PUCk7CisJCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJCX0JLy9lbHNlaWYoZGF0YVsxXT09MCkKKwkJfQkJLy9pZihkYXRhWzNdPT0xKTsKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vaWYgZWxzZSBkYXRhWzNdPT0xKQorCX0JCQkvL2lmIGVsc2UgZGF0YVszXT09MCkKKwl1aV9UZW1wID0gZGF0YVswXTsKKwlyZXR1cm4gKGluc24tPm4pOzsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX0NvbmZpZ0NvdW50ZXJUaW1lcldhdGNoZG9nKGNvbWVkaV9kZXZpY2UKKyAgICAgICAgICAgICAgICAgICAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpfAorfAkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICA6IDIgICAgIEFQQ0kxNTAwXzFfOF9LSFoKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgQVBDSTE1MDBfM182X0tIWiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICBBUENJMTUwMF8xMTVfS0haCisgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgICAgICA6IDAgICAgIENvdW50ZXIxL1RpbWVyMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBDb3VudGVyMi9UaW1lcjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgQ291bnRlcjMvV2F0Y2hkb2cKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBUaW1lci9XYXRjaGRvZworICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10gICAgICAgICAgICAgICAgOiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGhhcyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdvIG1lYW5pbmdzLiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJZiB0aGUgY291bnRlci90aW1lciAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgYXMgYSBjb3VudGVyICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxpbWl0IHZhbHVlIG9mICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY291bnRlciBpcyBnaXZlbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSWYgdGhlIGNvdW50ZXIvdGltZXIgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIGFzIGEgdGltZXIsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXZpZGVyIGZhY3RvciAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBvdXRwdXQgaXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs0XSAgICAgICAgICAgICAgICAgOiAwICAgIEFQQ0kxNTAwX0NPTlRJTlVPVVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgIEFQQ0kxNTAwX1NJTkdMRQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzVdICAgICAgICAgICAgICAgICA6IDAgICAgU29mdHdhcmUgVHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgSGFyZHdhcmUgVHJpZ2dlcgorCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNl0gICAgICAgICAgICAgICAgICA6MCAgICBTb2Z0d2FyZSBnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICBIYXJkd2FyZSBnYXRlCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbN10gICAgICAgICAgICAgICAgICA6MCAgICBJbnRlcnJ1cHQgRGlzYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgSW50ZXJydXB0IEVuYWJsZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE1MDBfQ29uZmlnQ291bnRlclRpbWVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpX1RpbWVyQ291bnRlck1vZGUsIGlfTWFzdGVyQ29uZmlndXJhdGlvbjsKKworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKworLy9TZWxlY3Rpb24gb2YgdGhlIGlucHV0IGNsb2NrCisJaWYgKGRhdGFbMF0gPT0gMCB8fCBkYXRhWzBdID09IDEgfHwgZGF0YVswXSA9PSAyKSB7CisJCW91dHcoZGF0YVswXSwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kxNTAwX0NMS19TRUxFQ1QpOworCX0JCQkvLyBpZihkYXRhWzBdPT0wfHxkYXRhWzBdPT0xfHxkYXRhWzBdPT0yKQorCWVsc2UgeworCQlpZiAoZGF0YVswXSAhPSAzKSB7CisJCQlwcmludGsoIlxuVGhlIG9wdGlvbiBmb3IgaW5wdXQgY2xvY2sgc2VsZWN0aW9uIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBpZihkYXRhWzBdIT0zKQorCX0JCQkvL2Vsc2VpZihkYXRhWzBdPT0wfHxkYXRhWzBdPT0xfHxkYXRhWzBdPT0yKQorCS8vU2VsZWN0IHRoZSBjb3VudGVyL3RpbWVyCisJc3dpdGNoIChkYXRhWzFdKSB7CisJY2FzZSBDT1VOVEVSMToKKwkJLy9zZWxlY3RpbmcgY291bnRlciBvciB0aW1lcgorCQlzd2l0Y2ggKGRhdGFbMl0pIHsKKwkJY2FzZSAwOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX0NPVU5URVI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX1RJTUVSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgaXMgbm90IGEgdGltZXIgbm9yIGEgY291bnRlclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbMl0pCisKKwkJLy9TZWxlY3RpbmcgIHNpbmdsZSBvciBjb250aW51b3VzIG1vZGUKKwkJc3dpdGNoIChkYXRhWzRdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9DT05USU5VT1VTOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9TSU5HTEU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGlzIG9wdGlvbiBmb3Igc2luZ2xlL2NvbnRpbnVvdXMgbW9kZSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbNF0pCisKKwkJaV9UaW1lckNvdW50ZXJNb2RlID0gZGF0YVsyXSB8IGRhdGFbNF0gfCA3OworCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSByZWxvYWQgdmFsdWUgKi8KKwkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRhdGFbM10gPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKSB7CisJCQlpZiAoZGF0YVs3XSA9PSBBUENJMTUwMF9FTkFCTEUKKwkJCQl8fCBkYXRhWzddID09IEFQQ0kxNTAwX0RJU0FCTEUpIHsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgbW9kZSByZWdpc3RlciBvZiB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfTU9ERV9TUEVDSUZJQ0FUSU9OLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGVzIHRoZSBuZXcgbW9kZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKGlfVGltZXJDb3VudGVyTW9kZSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb25zdGFudCByZWdpc3RlciBvZiB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfVElNRV9DU1RfTE9XLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGVzIHRoZSBsb3cgdmFsdWUgICovCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoZGF0YVszXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb25zdGFudCByZWdpc3RlciBvZiB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfVElNRV9DU1RfSElHSCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIGhpZ2ggdmFsdWUgICovCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkYXRhWzNdID0gZGF0YVszXSA+PiA4OworCQkJCW91dGIoZGF0YVszXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkcyB0aGUgcmVnaXN0ZXIgKi8KKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uID0KKwkJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBFbmFibGVzIHRpbWVyL2NvdW50ZXIgMSBhbmQgdHJpZ2dlcnMgdGltZXIvY291bnRlciAxICovCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfTWFzdGVyQ29uZmlndXJhdGlvbiA9CisJCQkJCWlfTWFzdGVyQ29uZmlndXJhdGlvbiB8IDB4NDA7CisKKwkJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCQkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGVzIHRoZSBuZXcgY29uZmlndXJhdGlvbiAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKGlfTWFzdGVyQ29uZmlndXJhdGlvbiwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyByZWdpc3RlciBvZiAgICAgKi8KKwkJCQkvKiB0aW1lci9jb3VudGVyIDEgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIERpc2FibGUgdGltZXIvY291bnRlciAxICovCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKDB4MCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgcmVnaXN0ZXIgb2YgICAgICovCisJCQkJLyogdGltZXIvY291bnRlciAxICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVHJpZ2dlciB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoMHgyLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCX0JLy9pZihkYXRhWzddPT0gQVBDSTE1MDBfRU5BQkxFIHx8ZGF0YVs3XT09IEFQQ0kxNTAwX0RJU0FCTEUpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuRXJyb3IgaW4gc2VsZWN0aW9uIG9mIGludGVycnVwdCBlbmFibGUgb3IgZGlzYWJsZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CS8vZWxzZWlmKGRhdGFbN109PSBBUENJMTUwMF9FTkFCTEUgfHxkYXRhWzddPT0gQVBDSTE1MDBfRElTQUJMRSkKKwkJfQkJLy8gaWYgKChkYXRhWzNdPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgcmVsb2FkIHZhbHVlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2UgaWYgKChkYXRhWzNdPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKQorCQlpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID0gZGF0YVs3XTsKKwkJaV9UaW1lckNvdW50ZXIxSW5pdCA9IDE7CisJCWJyZWFrOworCisJY2FzZSBDT1VOVEVSMjoJCS8vc2VsZWN0aW5nIGNvdW50ZXIgb3IgdGltZXIKKwkJc3dpdGNoIChkYXRhWzJdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbMl0gPSBBUENJMTUwMF9DT1VOVEVSOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbMl0gPSBBUENJMTUwMF9USU1FUjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoaXMgY2hvaWNlIGlzIG5vdCBhIHRpbWVyIG5vciBhIGNvdW50ZXJcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaChkYXRhWzJdKQorCisJCS8vU2VsZWN0aW5nICBzaW5nbGUgb3IgY29udGludW91cyBtb2RlCisJCXN3aXRjaCAoZGF0YVs0XSkgeworCQljYXNlIDA6CisJCQlkYXRhWzRdID0gQVBDSTE1MDBfQ09OVElOVU9VUzsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkYXRhWzRdID0gQVBDSTE1MDBfU0lOR0xFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBvcHRpb24gZm9yIHNpbmdsZS9jb250aW51b3VzIG1vZGUgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaChkYXRhWzRdKQorCisJCS8vU2VsZWN0aW5nICBzb2Z0d2FyZSBvciBoYXJkd2FyZSB0cmlnZ2VyCisJCXN3aXRjaCAoZGF0YVs1XSkgeworCQljYXNlIDA6CisJCQlkYXRhWzVdID0gQVBDSTE1MDBfU09GVFdBUkVfVFJJR0dFUjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkYXRhWzVdID0gQVBDSTE1MDBfSEFSRFdBUkVfVFJJR0dFUjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoaXMgY2hvaWNlIGZvciBzb2Z0d2FyZSBvciBoYXJkd2FyZSB0cmlnZ2VyIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goZGF0YVs1XSkKKworCQkvL1NlbGVjdGluZyAgc29mdHdhcmUgb3IgaGFyZHdhcmUgZ2F0ZQorCQlzd2l0Y2ggKGRhdGFbNl0pIHsKKwkJY2FzZSAwOgorCQkJZGF0YVs2XSA9IEFQQ0kxNTAwX1NPRlRXQVJFX0dBVEU7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YVs2XSA9IEFQQ0kxNTAwX0hBUkRXQVJFX0dBVEU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGlzIGNob2ljZSBmb3Igc29mdHdhcmUgb3IgaGFyZHdhcmUgZ2F0ZSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbNl0pCisKKwkJaV9UaW1lckNvdW50ZXJNb2RlID0gZGF0YVsyXSB8IGRhdGFbNF0gfCBkYXRhWzVdIHwgZGF0YVs2XSB8IDc7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIHJlbG9hZCB2YWx1ZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRhdGFbM10gPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKSB7CisJCQlpZiAoZGF0YVs3XSA9PSBBUENJMTUwMF9FTkFCTEUKKwkJCQl8fCBkYXRhWzddID09IEFQQ0kxNTAwX0RJU0FCTEUpIHsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgbW9kZSByZWdpc3RlciBvZiB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfTU9ERV9TUEVDSUZJQ0FUSU9OLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGVzIHRoZSBuZXcgbW9kZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKGlfVGltZXJDb3VudGVyTW9kZSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb25zdGFudCByZWdpc3RlciBvZiB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfVElNRV9DU1RfTE9XLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGVzIHRoZSBsb3cgdmFsdWUgICovCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoZGF0YVszXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb25zdGFudCByZWdpc3RlciBvZiB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfVElNRV9DU1RfSElHSCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIGhpZ2ggdmFsdWUgICovCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkYXRhWzNdID0gZGF0YVszXSA+PiA4OworCQkJCW91dGIoZGF0YVszXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkcyB0aGUgcmVnaXN0ZXIgKi8KKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uID0KKwkJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBFbmFibGVzIHRpbWVyL2NvdW50ZXIgMiBhbmQgdHJpZ2dlcnMgdGltZXIvY291bnRlciAyICovCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfTWFzdGVyQ29uZmlndXJhdGlvbiA9CisJCQkJCWlfTWFzdGVyQ29uZmlndXJhdGlvbiB8IDB4MjA7CisKKwkJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCQkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGVzIHRoZSBuZXcgY29uZmlndXJhdGlvbiAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKGlfTWFzdGVyQ29uZmlndXJhdGlvbiwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyByZWdpc3RlciBvZiAgICAgKi8KKwkJCQkvKiB0aW1lci9jb3VudGVyIDIgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIERpc2FibGUgdGltZXIvY291bnRlciAyICovCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKDB4MCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgcmVnaXN0ZXIgb2YgICAgICovCisJCQkJLyogdGltZXIvY291bnRlciAyICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVHJpZ2dlciB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoMHgyLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCX0JLy9pZihkYXRhWzddPT0gQVBDSTE1MDBfRU5BQkxFIHx8ZGF0YVs3XT09IEFQQ0kxNTAwX0RJU0FCTEUpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuRXJyb3IgaW4gc2VsZWN0aW9uIG9mIGludGVycnVwdCBlbmFibGUgb3IgZGlzYWJsZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CS8vZWxzZWlmKGRhdGFbN109PSBBUENJMTUwMF9FTkFCTEUgfHxkYXRhWzddPT0gQVBDSTE1MDBfRElTQUJMRSkKKwkJfQkJLy8gaWYgKChkYXRhWzNdPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgcmVsb2FkIHZhbHVlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2UgaWYgKChkYXRhWzNdPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKQorCQlpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID0gZGF0YVs3XTsKKwkJaV9UaW1lckNvdW50ZXIySW5pdCA9IDE7CisJCWJyZWFrOworCisJY2FzZSBDT1VOVEVSMzoJCS8vc2VsZWN0aW5nIGNvdW50ZXIgb3Igd2F0Y2hkb2cKKwkJc3dpdGNoIChkYXRhWzJdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbMl0gPSBBUENJMTUwMF9DT1VOVEVSOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbMl0gPSBBUENJMTUwMF9XQVRDSERPRzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoaXMgY2hvaWNlIGlzIG5vdCBhIHdhdGNoZG9nIG5vciBhIGNvdW50ZXJcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaChkYXRhWzJdKQorCisJCS8vU2VsZWN0aW5nICBzaW5nbGUgb3IgY29udGludW91cyBtb2RlCisJCXN3aXRjaCAoZGF0YVs0XSkgeworCQljYXNlIDA6CisJCQlkYXRhWzRdID0gQVBDSTE1MDBfQ09OVElOVU9VUzsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkYXRhWzRdID0gQVBDSTE1MDBfU0lOR0xFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBvcHRpb24gZm9yIHNpbmdsZS9jb250aW51b3VzIG1vZGUgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaChkYXRhWzRdKQorCisJCS8vU2VsZWN0aW5nICBzb2Z0d2FyZSBvciBoYXJkd2FyZSBnYXRlCisJCXN3aXRjaCAoZGF0YVs2XSkgeworCQljYXNlIDA6CisJCQlkYXRhWzZdID0gQVBDSTE1MDBfU09GVFdBUkVfR0FURTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkYXRhWzZdID0gQVBDSTE1MDBfSEFSRFdBUkVfR0FURTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoaXMgY2hvaWNlIGZvciBzb2Z0d2FyZSBvciBoYXJkd2FyZSBnYXRlIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goZGF0YVs2XSkKKworCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgdXNlZCBmb3Igd2F0Y2hkb2cgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkYXRhWzJdID09IEFQQ0kxNTAwX1dBVENIRE9HKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIC0gRW5hYmxlcyB0aGUgb3V0cHV0IGxpbmUgKi8KKwkJCS8qIC0gRW5hYmxlcyByZXRyaWdnZXIgICAgICAgKi8KKwkJCS8qIC0gUHVsc2VzIG91dHB1dCAgICAgICAgICAgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9UaW1lckNvdW50ZXJNb2RlID0gZGF0YVsyXSB8IGRhdGFbNF0gfCAweDU0OworCQl9CQkvL2lmIChkYXRhWzJdID09IEFQQ0kxNTAwX1dBVENIRE9HKQorCQllbHNlIHsKKwkJCWlfVGltZXJDb3VudGVyTW9kZSA9IGRhdGFbMl0gfCBkYXRhWzRdIHwgZGF0YVs2XSB8IDc7CisJCX0JCS8vZWxzZWlmIChkYXRhWzJdID09IEFQQ0kxNTAwX1dBVENIRE9HKQorCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgcmVsb2FkIHZhbHVlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGF0YVszXSA+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpIHsKKwkJCWlmIChkYXRhWzddID09IEFQQ0kxNTAwX0VOQUJMRQorCQkJCXx8IGRhdGFbN10gPT0gQVBDSTE1MDBfRElTQUJMRSkgeworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHJlZ2lzdGVyIG9mIHdhdGNoZG9nL2NvdW50ZXIgMyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19NT0RFX1NQRUNJRklDQVRJT04sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBtb2RlICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9UaW1lckNvdW50ZXJNb2RlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHdhdGNoZG9nL2NvdW50ZXIgMyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19USU1FX0NTVF9MT1csCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIGxvdyB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHdhdGNoZG9nL2NvdW50ZXIgMyAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19USU1FX0NTVF9ISUdILAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgaGlnaCB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRhdGFbM10gPSBkYXRhWzNdID4+IDg7CisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWRzIHRoZSByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gPQorCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEVuYWJsZXMgd2F0Y2hkb2cvY291bnRlciAzIGFuZCB0cmlnZ2VycyB3YXRjaGRvZy9jb3VudGVyIDMgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uID0KKwkJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uIHwgMHgxMDsKKworCQkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9NYXN0ZXJDb25maWd1cmF0aW9uLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIENPVU5URVIgKi8KKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJaWYgKGRhdGFbMl0gPT0gQVBDSTE1MDBfQ09VTlRFUikgeworCisJCQkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCByZWdpc3RlciBvZiAgICovCisJCQkJCS8qIHdhdGNoZG9nL2NvdW50ZXIgMyAgICAgICAgICAgICAgICAqLworCQkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIHRoZSAgd2F0Y2hkb2cvY291bnRlciAzIGFuZCBzdGFydHMgaXQgKi8KKwkJCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHgwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIHJlZ2lzdGVyIG9mICAgKi8KKwkJCQkJLyogd2F0Y2hkb2cvY291bnRlciAzICAgICAgICAgICAgICAgICovCisJCQkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVHJpZ2dlciB0aGUgIHdhdGNoZG9nL2NvdW50ZXIgMyBhbmQgc3RhcnRzIGl0ICovCisJCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHgyLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJfQkvL2Vsc2VpZihkYXRhWzJdPT1BUENJMTUwMF9DT1VOVEVSKQorCisJCQl9CS8vaWYoZGF0YVs3XT09IEFQQ0kxNTAwX0VOQUJMRSB8fGRhdGFbN109PSBBUENJMTUwMF9ESVNBQkxFKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcbkVycm9yIGluIHNlbGVjdGlvbiBvZiBpbnRlcnJ1cHQgZW5hYmxlIG9yIGRpc2FibGVcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQkvL2Vsc2VpZihkYXRhWzddPT0gQVBDSTE1MDBfRU5BQkxFIHx8ZGF0YVs3XT09IEFQQ0kxNTAwX0RJU0FCTEUpCisJCX0JCS8vIGlmICgoZGF0YVszXT49IDApICYmIChkYXRhWzNdIDw9IDY1NTM1KSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuRXJyb3IgaW4gc2VsZWN0aW9uIG9mIHJlbG9hZCB2YWx1ZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlIGlmICgoZGF0YVszXT49IDApICYmIChkYXRhWzNdIDw9IDY1NTM1KSkKKwkJaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdCA9IGRhdGFbN107CisJCWlfV2F0Y2hkb2dDb3VudGVyM0luaXQgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIGNvdW50ZXJcdGltZXIgb3B0aW9uIGRvZXMgbm90IGV4aXN0XG4iKTsKKwl9CQkJLy9zd2l0Y2goZGF0YVsxXSkKKwlpX0NvdW50ZXJMb2dpYyA9IGRhdGFbMl07CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUwMF9TdGFydFN0b3BUcmlnZ2VyVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICB8Cit8CQkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOyAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBvciB0cmlnZ2VyIHRoZSB0aW1lciBjb3VudGVyIG9yIFdhdGNoZG9nICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgICB8CisgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICA6IDAgICAgIENvdW50ZXIxL1RpbWVyMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBDb3VudGVyMi9UaW1lcjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgQ291bnRlcjMvV2F0Y2hkb2cKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgICAgIDogMCAgICAgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgc3RvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICBUcmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXSAgICAgICAgICAgICAgICA6IDAgICAgIENvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgVGltZXIvV2F0Y2hkb2cKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMTUwMF9TdGFydFN0b3BUcmlnZ2VyVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZTsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgQ09VTlRFUjE6CisJCXN3aXRjaCAoZGF0YVsxXSkgeworCQljYXNlIFNUQVJUOgorCQkJaWYgKGlfVGltZXJDb3VudGVyMUluaXQgPT0gMSkgeworCQkJCWlmIChpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID09IDEpIHsKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweEM0OwkvL0VuYWJsZSB0aGUgaW50ZXJydXB0CisJCQkJfQkvLyBpZihpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0PT0xKQorCQkJCWVsc2UgeworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4RTQ7CS8vZGlzYWJsZSB0aGUgaW50ZXJydXB0CisJCQkJfQkvL2Vsc2VpZihpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0PT0xKQorCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU3RhcnRzIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJaV9UaW1lckNvdW50ZXIxRW5hYmxlZCA9IDE7CisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMUluaXQ9PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuQ291bnRlci9UaW1lcjEgbm90IGNvbmZpZ3VyZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTVE9QOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFN0b3AgdGltZXIvY291bnRlciAxICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlvdXRiKDB4MDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWlfVGltZXJDb3VudGVyMUVuYWJsZWQgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUklHR0VSOgorCQkJaWYgKGlfVGltZXJDb3VudGVyMUluaXQgPT0gMSkgeworCQkJCWlmIChpX1RpbWVyQ291bnRlcjFFbmFibGVkID09IDEpIHsKKwkJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgVHJpZ2dlciBhbmQgZ2F0ZSAqLworCQkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDY7CisJCQkJfQkvL2lmKCBpX1RpbWVyQ291bnRlcjFFbmFibGVkPT0xKQorCQkJCWVsc2UgeworCQkJCQkJICAgLyoqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2V0IFRyaWdnZXIgKi8KKwkJCQkJCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDI7CisJCQkJfQkvL2Vsc2VpZihpX1RpbWVyQ291bnRlcjFFbmFibGVkPT0xKQorCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMUluaXQ9PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuQ291bnRlci9UaW1lcjEgbm90IGNvbmZpZ3VyZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIG9wdGlvbiBmb3Igc3RhcnQvc3RvcC90cmlnZ2VyIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL3N3aXRjaChkYXRhWzFdKQorCQlicmVhazsKKworCWNhc2UgQ09VTlRFUjI6CisJCXN3aXRjaCAoZGF0YVsxXSkgeworCQljYXNlIFNUQVJUOgorCQkJaWYgKGlfVGltZXJDb3VudGVyMkluaXQgPT0gMSkgeworCQkJCWlmIChpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID09IDEpIHsKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweEM0OwkvL0VuYWJsZSB0aGUgaW50ZXJydXB0CisJCQkJfQkvLyBpZihpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0PT0xKQorCQkJCWVsc2UgeworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4RTQ7CS8vZGlzYWJsZSB0aGUgaW50ZXJydXB0CisJCQkJfQkvL2Vsc2VpZihpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0PT0xKQorCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU3RhcnRzIHRpbWVyL2NvdW50ZXIgMiAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJaV9UaW1lckNvdW50ZXIyRW5hYmxlZCA9IDE7CisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuQ291bnRlci9UaW1lcjIgbm90IGNvbmZpZ3VyZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTVE9QOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFN0b3AgdGltZXIvY291bnRlciAyICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlvdXRiKDB4MDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWlfVGltZXJDb3VudGVyMkVuYWJsZWQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR0dFUjoKKwkJCWlmIChpX1RpbWVyQ291bnRlcjJJbml0ID09IDEpIHsKKwkJCQlpZiAoaV9UaW1lckNvdW50ZXIyRW5hYmxlZCA9PSAxKSB7CisJCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2V0IFRyaWdnZXIgYW5kIGdhdGUgKi8KKwkJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHg2OworCQkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIyRW5hYmxlZD09MSkKKwkJCQllbHNlIHsKKwkJCQkJCSAgIC8qKioqKioqKioqKioqKiovCisJCQkJCS8qIFNldCBUcmlnZ2VyICovCisJCQkJCQkgICAvKioqKioqKioqKioqKioqLworCisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHgyOworCQkJCX0JLy9lbHNlaWYoaV9UaW1lckNvdW50ZXIyRW5hYmxlZD09MSkKKworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCW91dGIoaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJfQkvL2lmKCBpX1RpbWVyQ291bnRlcjJJbml0PT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcbkNvdW50ZXIvVGltZXIyIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgb3B0aW9uIGZvciBzdGFydC9zdG9wL3RyaWdnZXIgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vc3dpdGNoKGRhdGFbMV0pCisJCWJyZWFrOworCWNhc2UgQ09VTlRFUjM6CisJCXN3aXRjaCAoZGF0YVsxXSkgeworCQljYXNlIFNUQVJUOgorCQkJaWYgKGlfV2F0Y2hkb2dDb3VudGVyM0luaXQgPT0gMSkgeworCisJCQkJaWYgKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPT0gMSkgeworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4QzQ7CS8vRW5hYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vIGlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhFNDsJLy9kaXNhYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTdGFydHMgV2F0Y2hkb2cvY291bnRlciAzICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkID0gMTsKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJfQkvLyBpZiggaV9XYXRjaGRvZ0NvdW50ZXIzaW5pdD09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5XYXRjaGRvZy9Db3VudGVyMyBub3QgY29uZmlndXJlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNUT1A6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU3RvcCBXYXRjaGRvZy9jb3VudGVyIDMgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoMHgwMCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9XYXRjaGRvZ0NvdW50ZXIzRW5hYmxlZCA9IDA7CisJCQlicmVhazsKKworCQljYXNlIFRSSUdHRVI6CisJCQlzd2l0Y2ggKGRhdGFbMl0pIHsKKwkJCWNhc2UgMDoJLy90cmlnZ2VyaW5nIGNvdW50ZXIgMworCQkJCWlmIChpX1dhdGNoZG9nQ291bnRlcjNJbml0ID09IDEpIHsKKwkJCQkJaWYgKGlfV2F0Y2hkb2dDb3VudGVyM0VuYWJsZWQgPT0gMSkgeworCQkJCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogU2V0IFRyaWdnZXIgYW5kIGdhdGUgKi8KKwkJCQkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDY7CisJCQkJCX0JLy9pZiggaV9XYXRjaGRvZ0NvdW50ZXIzRW5hYmxlZD09MSkKKwkJCQkJZWxzZSB7CisJCQkJCQkJICAgLyoqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFNldCBUcmlnZ2VyICovCisJCQkJCQkJICAgLyoqKioqKioqKioqKioqKi8KKworCQkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDI7CisJCQkJCX0JLy9lbHNlaWYoaV9XYXRjaGRvZ0NvdW50ZXIzRW5hYmxlZD09MSkKKworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQl9CS8vaWYoIGlfV2F0Y2hkb2dDb3VudGVyM0luaXQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5Db3VudGVyMyBub3QgY29uZmlndXJlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQkvL3RyaWdnZXJpbmcgV2F0Y2hkb2cgMworCQkJCWlmIChpX1dhdGNoZG9nQ291bnRlcjNJbml0ID09IDEpIHsKKworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJb3V0YigweDYsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJfQkvL2lmKCBpX1dhdGNoZG9nQ291bnRlcjNJbml0PT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuV2F0Y2hkb2cgMyBub3QgY29uZmlndXJlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKCJcbldyb25nIGNob2ljZSBvZiB3YXRjaGRvZy9jb3VudGVyM1xuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CS8vc3dpdGNoKGRhdGFbMl0pCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIG9wdGlvbiBmb3Igc3RhcnQvc3RvcC90cmlnZ2VyIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL3N3aXRjaChkYXRhWzFdKQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuVGhlIHNwZWNpZmllZCBjaG9pY2UgZm9yIGNvdW50ZXIvd2F0Y2hkb2cvdGltZXIgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goZGF0YVswXSkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX1JlYWRDb3VudGVyVGltZXJXYXRjaGRvZyAgICAgICAgICAgICAgICB8Cit8CQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOyAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICA6IDAgICAgIENvdW50ZXIxL1RpbWVyMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBDb3VudGVyMi9UaW1lcjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgQ291bnRlcjMvV2F0Y2hkb2cKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE1MDBfUmVhZENvdW50ZXJUaW1lcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaV9Db21tYW5kQW5kU3RhdHVzVmFsdWU7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBDT1VOVEVSMToKKwkJLy9SZWFkIGNvdW50ZXIvdGltZXIxCisJCWlmIChpX1RpbWVyQ291bnRlcjFJbml0ID09IDEpIHsKKwkJCWlmIChpX1RpbWVyQ291bnRlcjFFbmFibGVkID09IDEpIHsKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBSQ0MgYW5kIGdhdGUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweEM7CisJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMUluaXQ9PTEpCisJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFJDQyAqLworCQkgICAgLyoqKioqKioqKioqKioqKi8KKworCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHg4OworCQkJfQkvL2Vsc2VpZihpX1RpbWVyQ291bnRlcjFJbml0PT0xKQorCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb3VudGVyIHJlZ2lzdGVyIChoaWdoKSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUl9DUFRfVE1SMV9WQUxVRV9ISUdILAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0KKwkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPSBkYXRhWzBdIDw8IDg7CisJCQlkYXRhWzBdID0gZGF0YVswXSAmIDB4ZmYwMDsKKwkJCW91dGIoQVBDSTE1MDBfUl9DUFRfVE1SMV9WQUxVRV9MT1csCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPQorCQkJCWRhdGFbMF0gfCBpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJfQkJLy9pZiggaV9UaW1lckNvdW50ZXIxSW5pdD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGltZXIvQ291bnRlcjEgbm90IGNvbmZpZ3VyZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZWlmKCBpX1RpbWVyQ291bnRlcjFJbml0PT0xKQorCQlicmVhazsKKwljYXNlIENPVU5URVIyOgorCQkvL1JlYWQgY291bnRlci90aW1lcjIKKwkJaWYgKGlfVGltZXJDb3VudGVyMkluaXQgPT0gMSkgeworCQkJaWYgKGlfVGltZXJDb3VudGVyMkVuYWJsZWQgPT0gMSkgeworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFJDQyBhbmQgZ2F0ZSAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4QzsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIySW5pdD09MSkKKwkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgUkNDICovCisJCSAgICAvKioqKioqKioqKioqKioqLworCisJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDg7CisJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvdW50ZXIgcmVnaXN0ZXIgKGhpZ2gpICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SX0NQVF9UTVIyX1ZBTFVFX0hJR0gsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPQorCQkJCWluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9IGRhdGFbMF0gPDwgODsKKwkJCWRhdGFbMF0gPSBkYXRhWzBdICYgMHhmZjAwOworCQkJb3V0YihBUENJMTUwMF9SX0NQVF9UTVIyX1ZBTFVFX0xPVywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9CisJCQkJZGF0YVswXSB8IGluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQl9CQkvL2lmKCBpX1RpbWVyQ291bnRlcjJJbml0PT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaW1lci9Db3VudGVyMiBub3QgY29uZmlndXJlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlaWYoIGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisJCWJyZWFrOworCWNhc2UgQ09VTlRFUjM6CisJCS8vUmVhZCBjb3VudGVyL3dhdGNoZG9nMgorCQlpZiAoaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdCA9PSAxKSB7CisJCQlpZiAoaV9XYXRjaGRvZ0NvdW50ZXIzRW5hYmxlZCA9PSAxKSB7CisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgUkNDIGFuZCBnYXRlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhDOworCQkJfQkvL2lmKCBpX1RpbWVyQ291bnRlcjJJbml0PT0xKQorCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBSQ0MgKi8KKwkJICAgIC8qKioqKioqKioqKioqKiovCisKKwkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4ODsKKwkJCX0JLy9lbHNlaWYoaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdD09MSkKKworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY291bnRlciByZWdpc3RlciAoaGlnaCkgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JfQ1BUX1RNUjNfVkFMVUVfSElHSCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9CisJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0gZGF0YVswXSA8PCA4OworCQkJZGF0YVswXSA9IGRhdGFbMF0gJiAweGZmMDA7CisJCQlvdXRiKEFQQ0kxNTAwX1JfQ1BUX1RNUjNfVkFMVUVfTE9XLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0KKwkJCQlkYXRhWzBdIHwgaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCX0JCS8vaWYoIGlfV2F0Y2hkb2dDb3VudGVyM0luaXQ9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcbldhdGNoZG9nQ291bnRlcjMgbm90IGNvbmZpZ3VyZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZWlmKCBpX1dhdGNoZG9nQ291bnRlcjNJbml0PT0xKQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuVGhlIGNob2ljZSBvZiB0aW1lci9jb3VudGVyL3dhdGNoZG9nIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vc3dpdGNoKGRhdGFbMF0pCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCAgaV9BUENJMTUwMF9SZWFkSW50ZXJydXB0TWFzayAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOyAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgdGhlIGludGVycnVwdCBtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JZGF0YVswXTpUaGUgaW50ZXJydXB0IG1hc2sgdmFsdWUJCQkJCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdOkNoYW5uZWwgbm8KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kxNTAwX1JlYWRJbnRlcnJ1cHRNYXNrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gaV9JbnRlcnJ1cHRNYXNrOworCWRhdGFbMV0gPSBpX0lucHV0Q2hhbm5lbDsKKwlpX0ludGVycnVwdE1hc2sgPSAwOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50ICBpX0FQQ0kxNTAwX0NvbmZpZ3VyZUludGVycnVwdCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyB0aGUgaW50ZXJydXB0IHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgICAgICAgICAgICAgICAgIHwKKworCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTE1MDBfQ29uZmlndXJlSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1N0YXR1czsKKwlpbnQgaV9SZWdWYWx1ZTsKKwlpbnQgaV9Db25zdGFudDsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCWlmIChkYXRhWzBdID09IDEpIHsKKwkJaV9Db25zdGFudCA9IDB4QzA7CisJfQkJCS8vaWYoZGF0YVswXT09MSkKKwllbHNlIHsKKwkJaWYgKGRhdGFbMF0gPT0gMCkgeworCQkJaV9Db25zdGFudCA9IDB4MDA7CisJCX0JCS8vaWZ7ZGF0YVswXT09MCkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGhlIHBhcmFtZXRlciBwYXNzZWQgdG8gZHJpdmVyIGlzIGluIGVycm9yIGZvciBlbmFibGluZyB0aGUgdm9sdGFnZSBpbnRlcnJ1cHRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZihkYXRhWzBdPT0wKQorCX0JCQkvL2Vsc2VpZihkYXRhWzBdPT0xKQorCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBXcml0ZXMgdGhlIG5ldyBjb25maWd1cmF0aW9uIChBUENJMTUwMF9PUikgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHhGOSkgfCBBUENJMTUwMF9PUjsKKworCW91dGIoaV9SZWdWYWx1ZSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKyAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQXV0aG9yaXNlcyB0aGUgaW50ZXJydXB0IG9uIHRoZSBib2FyZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDB4QzAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgcGF0dGVybiBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1BBVFRFUk5fUE9MQVJJVFksCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoaV9Db25zdGFudCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIHBhdHRlcm4gdHJhbnNpdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9UUkFOU0lUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKGlfQ29uc3RhbnQsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBwYXR0ZXJuIG1hc2sgcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1BBVFRFUk5fTUFTSywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihpX0NvbnN0YW50LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJaV9SZWdWYWx1ZSA9IGluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHBvcnQgQSAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJb3V0YihpX1JlZ1ZhbHVlLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgIEIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgcG9ydCBCICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlfUmVnVmFsdWUgPSAoaV9SZWdWYWx1ZSAmIDB4MEYpIHwgMHgyMDsKKwlvdXRiKGlfUmVnVmFsdWUsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAxICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJaV9SZWdWYWx1ZSA9IGluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHRpbWVyIDEgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCW91dGIoaV9SZWdWYWx1ZSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJaV9SZWdWYWx1ZSA9IGluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHRpbWVyIDIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCW91dGIoaV9SZWdWYWx1ZSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDMgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgdGltZXIgMyAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJb3V0YihpX1JlZ1ZhbHVlLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIEF1dGhvcml6ZXMgdGhlIG1haW4gaW50ZXJydXB0IG9uIHRoZSBib2FyZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHhEMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRW5hYmxlcyB0aGUgUENJIGludGVycnVwdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGwoMHgzMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKwl1aV9TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgxMCk7CisJdWlfU3RhdHVzID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCW91dGwoMHgyMzAwMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgzOCk7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IHN0YXRpYyB2b2lkIHZfQVBDSTE1MDBfSW50ZXJydXB0CQkJCQkgICAgIHwKK3wJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKSAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEludGVycnVwdCBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxICAgICAgICAgICAgICAgICA6IGlycSBudW1iZXIgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworc3RhdGljIHZvaWQgdl9BUENJMTUwMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCVVJTlQgdWlfSW50ZXJydXB0U3RhdHVzID0gMDsKKwlpbnQgaV9SZWdWYWx1ZSA9IDA7CisJaV9JbnRlcnJ1cHRNYXNrID0gMDsKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBSZWFkIHRoZSBib2FyZCBpbnRlcnJ1cHQgc3RhdHVzICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0ludGVycnVwdFN0YXR1cyA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgYm9hcmQgZ2VuZXJhdGVkIGEgaW50ZXJydXB0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKCh1aV9JbnRlcnJ1cHRTdGF0dXMgJiAweDgwMDAwMCkgPT0gMHg4MDAwMDApIHsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIERpc2FibGUgYWxsIEludGVycnVwdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL291dGIoQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLGRldnByaXYtPmlvYmFzZStBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGlzYWJsZXMgIHRoZSBtYWluIGludGVycnVwdCBvbiB0aGUgYm9hcmQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLy9vdXRiKDB4MDAsZGV2cHJpdi0+aW9iYXNlK0FQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEEgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCWlfUmVnVmFsdWUgPQorCQkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgcG9ydCBBICovCisJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfUmVnVmFsdWUgPSAoaV9SZWdWYWx1ZSAmIDB4MEYpIHwgMHgyMDsKKwkJCW91dGIoaV9SZWdWYWx1ZSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9JbnRlcnJ1cHRNYXNrID0gaV9JbnRlcnJ1cHRNYXNrIHwgMTsKKwkJCWlmIChpX0xvZ2ljID09IEFQQ0kxNTAwX09SX1BSSU9SSVRZKSB7CisJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJaV9SZWdWYWx1ZSA9CisJCQkJCWluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgaW50ZXJydXB0IHZlY3RvciByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0lOVEVSUlVQVF9DT05UUk9MLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlpX1JlZ1ZhbHVlID0KKwkJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJaV9JbnB1dENoYW5uZWwgPSAxICsgKGlfUmVnVmFsdWUgPj4gMSk7CisKKwkJCX0JLy8gaWYoaV9Mb2dpYz09QVBDSTE1MDBfT1JfUFJJT1JJVFkpCisJCQllbHNlIHsKKwkJCQlpX0lucHV0Q2hhbm5lbCA9IDA7CisJCQl9CS8vZWxzZWlmKGlfTG9naWM9PUFQQ0kxNTAwX09SX1BSSU9SSVRZKQorCQl9CQkvLyBpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKQorCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaV9SZWdWYWx1ZSA9CisJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCWlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApIHsKKwkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHBvcnQgQiAqLworCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlwcmludGsoIlxuXG5cbiIpOworCSAgICAgLyoqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkcyBwb3J0IEIgKi8KKwkgICAgIC8qKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9CisJCQkJaW5iKChVSU5UKSBkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X1BPUlRfQik7CisKKwkJCWlfUmVnVmFsdWUgPSBpX1JlZ1ZhbHVlICYgMHhDMDsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0cyBpZiB0aGlzIGlzIGFuIGV4dGVybmFsIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoaV9SZWdWYWx1ZSkgeworCQkJCS8vRGlzYWJsZSB0aGUgaW50ZXJydXB0CisJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCisJCQkJaWYgKGlfUmVnVmFsdWUgJiAweDgwKSB7CisJCQkJCWlfSW50ZXJydXB0TWFzayA9CisJCQkJCQlpX0ludGVycnVwdE1hc2sgfCAweDQwOworCQkJCX0JLy9pZiAoaV9SZWdWYWx1ZSAmIDB4ODApCisKKwkJCQlpZiAoaV9SZWdWYWx1ZSAmIDB4NDApIHsKKwkJCQkJaV9JbnRlcnJ1cHRNYXNrID0KKwkJCQkJCWlfSW50ZXJydXB0TWFzayB8IDB4ODA7CisJCQkJfQkvL2lmIChpX1JlZ1ZhbHVlICYgMHg0MCkKKwkJCX0JLy8gaWYgKGlfUmVnVmFsdWUpCisJCQllbHNlIHsKKwkJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCAyOworCQkJfQkvLyBpZiAoaV9SZWdWYWx1ZSkKKwkJfQkJLy9pZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKQorCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDEgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaV9SZWdWYWx1ZSA9CisJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCWlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApIHsKKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDEgKi8KKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERlbGV0ZXMgdGhlIGludGVycnVwdCBvZiB0aW1lciAxICovCisJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfUmVnVmFsdWUgPSAoaV9SZWdWYWx1ZSAmIDB4MEYpIHwgMHgyMDsKKwkJCW91dGIoaV9SZWdWYWx1ZSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9JbnRlcnJ1cHRNYXNrID0gaV9JbnRlcnJ1cHRNYXNrIHwgNDsKKwkJfQkJLy8gaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMiAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpX1JlZ1ZhbHVlID0KKwkJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkgeworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMiAqLworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHRpbWVyIDIgKi8KKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCA4OworCQl9CQkvLyBpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKQorCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDMgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaV9SZWdWYWx1ZSA9CisJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCWlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApIHsKKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDMgKi8KKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERlbGV0ZXMgdGhlIGludGVycnVwdCBvZiB0aW1lciAzICovCisJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfUmVnVmFsdWUgPSAoaV9SZWdWYWx1ZSAmIDB4MEYpIHwgMHgyMDsKKwkJCW91dGIoaV9SZWdWYWx1ZSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaWYgKGlfQ291bnRlckxvZ2ljID09IEFQQ0kxNTAwX0NPVU5URVIpIHsKKwkJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCAweDEwOworCQkJfQkvL2lmKGlfQ291bnRlckxvZ2ljPT1BUENJMTUwMF9DT1VOVEVSKQorCQkJZWxzZSB7CisJCQkJaV9JbnRlcnJ1cHRNYXNrID0gaV9JbnRlcnJ1cHRNYXNrIHwgMHgyMDsKKwkJCX0KKwkJfQkJLy8gaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkKKworCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRW5hYmxlIGFsbCBJbnRlcnJ1cHRzICovCisJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogQXV0aG9yaXplcyB0aGUgbWFpbiBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRiKDB4RDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCX0JCQkvLyAgaWYgKCh1aV9JbnRlcnJ1cHRTdGF0dXMgJiAweDgwMDAwMCkgPT0gMHg4MDAwMDApCisJZWxzZSB7CisJCXByaW50aygiXG5JbnRlcnJ1cHQgZnJvbSB1bmtub3duIHNvdXJjZVxuIik7CisKKwl9CQkJLy9lbHNlIGlmICgodWlfSW50ZXJydXB0U3RhdHVzICYgMHg4MDAwMDApID09IDB4ODAwMDAwKQorCXJldHVybjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOnJlc2V0cyBhbGwgdGhlIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTUwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaV9EdW1teVJlYWQgPSAwOworCWlfVGltZXJDb3VudGVyMUluaXQgPSAwOworCWlfVGltZXJDb3VudGVyMkluaXQgPSAwOworCWlfV2F0Y2hkb2dDb3VudGVyM0luaXQgPSAwOworCWlfRXZlbnQxU3RhdHVzID0gMDsKKwlpX0V2ZW50MlN0YXR1cyA9IDA7CisJaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdCA9IDA7CisJaV9Mb2dpYyA9IDA7CisJaV9Db3VudGVyTG9naWMgPSAwOworCWlfSW50ZXJydXB0TWFzayA9IDA7CisJaV9JbnB1dENoYW5uZWwgPSAwOzsKKwlpX1RpbWVyQ291bnRlcjFFbmFibGVkID0gMDsKKwlpX1RpbWVyQ291bnRlcjJFbmFibGVkID0gMDsKKwlpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkID0gMDsKKworICAgIC8qKioqKioqKioqKioqKioqKiovCisJLyogU29mdHdhcmUgcmVzZXQgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqLworCWlfRHVtbXlSZWFkID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJaV9EdW1teVJlYWQgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDEsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gY29udHJvbCByZWdpc3RlciAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMHhGNCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDB4MTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyogU2VsZWN0cyB0aGUgZGF0YSBwYXRoIHBvbGFyaXR5IHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBIaWdoIGxldmVsIG9mIHBvcnQgQSBtZWFucyAxICovCisJb3V0YigweEZGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qIFNlbGVjdHMgdGhlIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfRElSRUNUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBbGwgYml0cyB1c2VkIGFzIGlucHV0cyAqLworCW91dGIoMHhGRiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiAgU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHBvcnQgQTogICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBoYW5kc2hha2Ugc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9IQU5EU0hBS0VfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyB0aGUgcmVnaXN0ZXIgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDB4MTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGRhdGEgcGF0aCBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBX1BDSVRDSF9QT0xBUklUWSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogQSBoaWdoIGxldmVsIG9mIHBvcnQgQiBtZWFucyAxICovCisJb3V0YigweDdGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBkYXRhIGRpcmVjdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBX0RJUkVDVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogQWxsIGJpdHMgdXNlZCBhcyBpbnB1dHMgKi8KKwlvdXRiKDB4RkYsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHBvcnQgQjogICAgICAgICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgaGFuZHNoYWtlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfSEFORFNIQUtFX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgdGhlIHJlZ2lzdGVyICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBkYXRhIHBhdGggcG9sYXJpdHkgcmVnaXN0ZXIgb2YgcG9ydCBDICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBIaWdoIGxldmVsIG9mIHBvcnQgQyBtZWFucyAxICovCisJb3V0YigweDksIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQyAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX0RBVEFfRElSRUNUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBbGwgYml0cyB1c2VkIGFzIGlucHV0cyBleGNlcHQgY2hhbm5lbCAxICovCisJb3V0YigweDBFLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBzcGVjaWFsIElPIHJlZ2lzdGVyIG9mIHBvcnQgQyAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX1NQRUNJQUxfSU9fQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBpdCAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIElQIGFuZCBJVVMgKi8KKwlvdXRiKDB4MjAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAxICovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgdGltZXIgMSAgICAgICAgICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIFRpbWVyIDIgaW50ZXJydXB0IG1hbmFnZW1lbnQ6ICAgICAgICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIFRpbWVyIDMgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHRpbWVyIDM6ICAgICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgYWxsIGludGVycnVwdHMgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8vcmVzZXQgYWxsIHRoZSBkaWdpdGFsIG91dHB1dHMKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kxNTAwX0RJR0lUQUxfT1ApOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEaXNhYmxlIHRoZSBib2FyZCBpbnRlcnJ1cHQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVhY3RpdmF0ZXMgYWxsIGludGVycnVwdHMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWFjdGl2YXRlcyBhbGwgaW50ZXJydXB0cyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDB4MDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVhY3RpdmF0ZXMgYWxsIGludGVycnVwdHMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YigweDAwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWFjdGl2YXRlcyBhbGwgaW50ZXJydXB0cyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDB4MDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlYWN0aXZhdGVzIGFsbCBpbnRlcnJ1cHRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHgwMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVhY3RpdmF0ZXMgYWxsIGludGVycnVwdHMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YigweDAwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDk2MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5oCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKioqKioqKioqICAgICAgRGVmaW5pdGlvbnMgZm9yIEFQQ0ktMTUwMCBjYXJkICAqKioqKi8KKworLy8gQ2FyZCBTcGVjaWZpYyBpbmZvcm1hdGlvbgorI2RlZmluZSBBUENJMTUwMF9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgIDB4MTBlOAorI2RlZmluZSBBUENJMTUwMF9BRERSRVNTX1JBTkdFICAgICAgICAgICAgICA0CisKKy8vRElHSVRBTCBJTlBVVC1PVVRQVVQgREVGSU5FCisKKyNkZWZpbmUgIEFQQ0kxNTAwX0RJR0lUQUxfT1AgICAgICAgICAgICAgICAgIAkyCisjZGVmaW5lICBBUENJMTUwMF9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICBBUENJMTUwMF9BTkQgICAgICAgICAgICAgICAJCSAgICAyCisjZGVmaW5lICBBUENJMTUwMF9PUiAgICAgICAgICAgICAgICAJCSAgICA0CisjZGVmaW5lICBBUENJMTUwMF9PUl9QUklPUklUWSAgICAgICAJCSAgICA2CisjZGVmaW5lICBBUENJMTUwMF9DTEtfU0VMRUNUICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICBDT1VOVEVSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICBDT1VOVEVSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICBDT1VOVEVSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICBBUENJMTUwMF9DT1VOVEVSICAgICAgICAgICAgICAgIAkJMHgyMAorI2RlZmluZSAgQVBDSTE1MDBfVElNRVIgICAgICAgICAgICAgICAgICAJCTAKKyNkZWZpbmUgIEFQQ0kxNTAwX1dBVENIRE9HICAgICAgICAgIAkJICAgIDAKKyNkZWZpbmUgIEFQQ0kxNTAwX1NJTkdMRSAgICAgICAgICAgIAkJICAgIDAKKyNkZWZpbmUgIEFQQ0kxNTAwX0NPTlRJTlVPVVMgICAgICAgIAkJICAgIDB4ODAKKyNkZWZpbmUgIEFQQ0kxNTAwX0RJU0FCTEUgICAgICAgICAgICAgICAgCQkwCisjZGVmaW5lICBBUENJMTUwMF9FTkFCTEUgICAgICAgICAgICAgICAgCQkxCisjZGVmaW5lICBBUENJMTUwMF9TT0ZUV0FSRV9UUklHR0VSICAJCSAgICAweDQKKyNkZWZpbmUgIEFQQ0kxNTAwX0hBUkRXQVJFX1RSSUdHRVIgIAkJICAgIDB4MTAKKyNkZWZpbmUgIEFQQ0kxNTAwX1NPRlRXQVJFX0dBVEUgICAgIAkJICAgIDAKKyNkZWZpbmUgIEFQQ0kxNTAwX0hBUkRXQVJFX0dBVEUgICAgIAkJICAgIDB4OAorI2RlZmluZSAgU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIAkJICAgIDAKKyNkZWZpbmUgIFNUT1AgICAgICAgICAgICAgICAgICAgICAgIAkJICAgIDEKKyNkZWZpbmUgIFRSSUdHRVIgICAgICAgICAgICAgICAgICAgICAgIAkJICAgIDIKKworLyoKKyAqIFppbGxvZyBJL08gZW51bWVyYXRpb24KKyAqLworZW51bSB7CisJQVBDSTE1MDBfWjg1MzZfUE9SVF9DLAorCUFQQ0kxNTAwX1o4NTM2X1BPUlRfQiwKKwlBUENJMTUwMF9aODUzNl9QT1JUX0EsCisJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUgorfTsKKworLyoKKyAqIFo4NTM2IENJTyBJbnRlcm5hbCBBZGRyZXNzCisgKi8KK2VudW0geworCUFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwKKwlBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9JTlRFUlJVUFRfQ09OVFJPTCwKKwlBUENJMTUwMF9SV19QT1JUX0JfSU5URVJSVVBUX0NPTlRST0wsCisJQVBDSTE1MDBfUldfVElNRVJfQ09VTlRFUl9JTlRFUlJVUFRfVkVDVE9SLAorCUFQQ0kxNTAwX1JXX1BPUlRfQ19EQVRBX1BDSVRDSF9QT0xBUklUWSwKKwlBUENJMTUwMF9SV19QT1JUX0NfREFUQV9ESVJFQ1RJT04sCisJQVBDSTE1MDBfUldfUE9SVF9DX1NQRUNJQUxfSU9fQ09OVFJPTCwKKworCUFQQ0kxNTAwX1JXX1BPUlRfQV9DT01NQU5EX0FORF9TVEFUVVMsCisJQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwlBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwlBUENJMTUwMF9SV19QT1JUX0FfREFUQSwKKwlBUENJMTUwMF9SV19QT1JUX0JfREFUQSwKKwlBUENJMTUwMF9SV19QT1JUX0NfREFUQSwKKworCUFQQ0kxNTAwX1JfQ1BUX1RNUjFfVkFMVUVfSElHSCwKKwlBUENJMTUwMF9SX0NQVF9UTVIxX1ZBTFVFX0xPVywKKwlBUENJMTUwMF9SX0NQVF9UTVIyX1ZBTFVFX0hJR0gsCisJQVBDSTE1MDBfUl9DUFRfVE1SMl9WQUxVRV9MT1csCisJQVBDSTE1MDBfUl9DUFRfVE1SM19WQUxVRV9ISUdILAorCUFQQ0kxNTAwX1JfQ1BUX1RNUjNfVkFMVUVfTE9XLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIxX1RJTUVfQ1NUX0hJR0gsCisJQVBDSTE1MDBfUldfQ1BUX1RNUjFfVElNRV9DU1RfTE9XLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIyX1RJTUVfQ1NUX0hJR0gsCisJQVBDSTE1MDBfUldfQ1BUX1RNUjJfVElNRV9DU1RfTE9XLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIzX1RJTUVfQ1NUX0hJR0gsCisJQVBDSTE1MDBfUldfQ1BUX1RNUjNfVElNRV9DU1RfTE9XLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIxX01PREVfU1BFQ0lGSUNBVElPTiwKKwlBUENJMTUwMF9SV19DUFRfVE1SMl9NT0RFX1NQRUNJRklDQVRJT04sCisJQVBDSTE1MDBfUldfQ1BUX1RNUjNfTU9ERV9TUEVDSUZJQ0FUSU9OLAorCUFQQ0kxNTAwX1JfQ1VSUkVOVF9WRUNUT1IsCisKKwlBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0FfSEFORFNIQUtFX1NQRUNJRklDQVRJT04sCisJQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9EQVRBX0RJUkVDVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lBTF9JT19DT05UUk9MLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9QQVRURVJOX1BPTEFSSVRZLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9QQVRURVJOX1RSQU5TSVRJT04sCisJQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fTUFTSywKKworCUFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9IQU5EU0hBS0VfU1BFQ0lGSUNBVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0JfREFUQV9QQ0lUQ0hfUE9MQVJJVFksCisJQVBDSTE1MDBfUldfUE9SVF9CX0RBVEFfRElSRUNUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUFMX0lPX0NPTlRST0wsCisJQVBDSTE1MDBfUldfUE9SVF9CX1BBVFRFUk5fUE9MQVJJVFksCisJQVBDSTE1MDBfUldfUE9SVF9CX1BBVFRFUk5fVFJBTlNJVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9NQVNLCit9OworCisgLyotLS0tLS0tLS0tRElHSVRBTCBJTlBVVC0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBpX0FQQ0kxNTAwX0luaXRpYWxpc2F0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBpX0FQQ0kxNTAwX0NvbmZpZ0RpZ2l0YWxJbnB1dEV2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK3N0YXRpYyBpbnQgaV9BUENJMTUwMF9TdGFydFN0b3BJbnB1dEV2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBpX0FQQ0kxNTAwX1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qLS0tLS0tLS0tLQlESUdJVEFMIE9VVFBVVC0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbE91dHB1dEVycm9ySW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJCXVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyotLS0tLS0tLS0tVElNRVItLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaV9BUENJMTUwMF9Db25maWdDb3VudGVyVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCSB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBpX0FQQ0kxNTAwX1N0YXJ0U3RvcFRyaWdnZXJUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBpX0FQQ0kxNTAwX1JlYWRDb3VudGVyVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBpX0FQQ0kxNTAwX1JlYWRJbnRlcnJ1cHRNYXNrKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qLS0tLS0tLS0tLUlOVEVSUlVQVCBIQU5ETEVSLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHZfQVBDSTE1MDBfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworc3RhdGljIGludCBpX0FQQ0kxNTAwX0NvbmZpZ3VyZUludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisvKi0tLS0tLS0tLS1SRVNFVC0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGlfQVBDSTE1MDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlOWE5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuYwpAQCAtMCwwICsxLDU0MiBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTE1MTYgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kxNTE2LmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0xNTE2ICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMTUxNi5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfUmVhZDFEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgZGlnaXRhbCBpbnB1dCAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTE2X1JlYWQxRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RtcFZhbHVlID0gMDsKKwlVSU5UIHVpX0NoYW5uZWw7CisJdWlfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmICh1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PSA3KSB7CisJCXVpX1RtcFZhbHVlID0gKFVJTlQpIGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX0lQKTsKKwkJLy8gIHNpbmNlIG9ubHkgMSBjaGFubmVsIHJlcWQgIHRvIGJyaW5nIGl0IHRvIGxhc3QgYml0IGl0IGlzIHJvdGF0ZWQKKwkJLy8gIDggKyhjaGFuIC0gMSkgdGltZXMgdGhlbiBBTkRlZCB3aXRoIDEgZm9yIGxhc3QgYml0LgorCQkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiB1aV9DaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTcpCisJZWxzZSB7CisJCS8vY29tZWRpX2Vycm9yKGRldiwiIFxuIGNoYW4gc3BlYyB3cm9uZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwl9CQkJLy9lbHNlIGlmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9NykKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfUmVhZE1vcmVEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgUmVxdWVzdGVkIGRpZ2l0YWwgaW5wdXRzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTE2X1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCVVJTlQgdWlfUG9ydFZhbHVlID0gZGF0YVswXTsKKwlVSU5UIHVpX01hc2sgPSAwOworCVVJTlQgdWlfTm9PZkNoYW5uZWxzOworCisJdWlfTm9PZkNoYW5uZWxzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkqZGF0YSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9JUCk7CisJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbHMpIHsKKwljYXNlIDI6CisJCXVpX01hc2sgPSAzOworCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIHVpX1BvcnRWYWx1ZSkpICYgdWlfTWFzazsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl1aV9NYXNrID0gMTU7CisJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQlicmVhazsKKwljYXNlIDc6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcbldyb25nIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCWJyZWFrOworCX0JCQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgIHwKK3wJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICA6MTpNZW1vcnkgb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgICAgICAgICAgIDA6TWVtb3J5IG9mZiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMTUxNl9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IGRhdGFbMF07CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTUxNl9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcCwgdWlfVGVtcDE7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKworCXByaW50aygiRUwzMTEwMDMgOiBAPSV4XG4iLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCWlmIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cykgeworCQl1aV9UZW1wID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1ApOworCisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWVsc2UgeworCQl1aV9UZW1wID0gMDsKKwl9CQkJLy9pZihkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJaWYgKGRhdGFbM10gPT0gMCkgeworCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIHwgdWlfVGVtcDsKKwkJCW91dHcoZGF0YVswXSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUCk7CisKKwkJCXByaW50aygiRUwzMTEwMDMgOiBkPSVkIEA9JXhcbiIsIGRhdGFbMF0sCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUCk7CisKKwkJfQkJLy9pZihkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCQljYXNlIDI6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA0OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgNzoKKwkJCQkJZGF0YVswXSA9IGRhdGFbMF0gfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQkJCXByaW50aygiRUwzMTEwMDMgOiBkPSVkIEA9JXhcbiIsIGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1ApOworCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJfQkJLy9lbHNlaWYoZGF0YVsxXT09MCkKKwl9CQkJLy9pZihkYXRhWzNdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVszXSA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgxOworCQkJCXVpX1RlbXAxID0gMTsKKwkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSBeIDB4ZmY7CisJCQkJZGF0YVswXSA9IGRhdGFbMF0gJiB1aV9UZW1wOworCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUCk7CisKKwkJCQlwcmludGsoIkVMMzExMDAzIDogZD0lZCBAPSV4XG4iLCBkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQkJfQkvL2lmKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCQljYXNlIDI6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDM7CisJCQkJCQl1aV9UZW1wMSA9IDM7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgMiAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDQ6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGY7CisJCQkJCQl1aV9UZW1wMSA9IDE1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDQgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoNCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA3OgorCQkJCQkJYnJlYWs7CisKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkJIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKworCQkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MTZfRElHSVRBTF9PUCk7CisKKwkJCQkJcHJpbnRrKCJFTDMxMTAwMyA6IGQ9JWQgQD0leFxuIiwKKwkJCQkJCWRhdGFbMF0sCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MTZfRElHSVRBTF9PUCk7CisJCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJCX0JLy9lbHNlaWYoZGF0YVsxXT09MCkKKwkJfQkJLy9pZihkYXRhWzNdPT0xKTsKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vaWYgZWxzZSBkYXRhWzNdPT0xKQorCX0JCQkvL2lmIGVsc2UgZGF0YVszXT09MCkKKwlyZXR1cm4gKGluc24tPm4pOzsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTE2X1JlYWREaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsIG9yIHBvcnQgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTE2X1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCVVJTlQgdWlfVGVtcDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCXVpX1RlbXAgPSBkYXRhWzBdOworCSpkYXRhID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1BfUlcpOworCWlmICh1aV9UZW1wID09IDApIHsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gdWlfTm9PZkNoYW5uZWwpICYgMHgxOworCX0JCQkvL2lmKHVpX1RlbXA9PTApCisJZWxzZSB7CisJCWlmICh1aV9UZW1wID09IDEpIHsKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJY2FzZSAyOgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogZGF0YVsxXSkpICYgMzsKKwkJCQlicmVhazsKKworCQkJY2FzZSA0OgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogZGF0YVsxXSkpICYgMTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNzoKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCX0JCS8vaWYodWlfVGVtcD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZCBcbiIpOworCQl9CQkvL2Vsc2VpZih1aV9UZW1wPT0xKQorCX0JCQkvL2Vsc2VpZih1aV9UZW1wPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfQ29uZmlnV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgfAorfAkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTUxNl9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGRhdGFbMF0gPT0gMCkgeworCQkvL0Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMTUxNl9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwkJLy9Mb2FkaW5nIHRoZSBSZWxvYWQgdmFsdWUKKwkJb3V0dyhkYXRhWzFdLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMTUxNl9XQVRDSERPR19SRUxPQURfVkFMVUUpOworCQlkYXRhWzFdID0gZGF0YVsxXSA+PiAxNjsKKwkJb3V0dyhkYXRhWzFdLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMTUxNl9XQVRDSERPR19SRUxPQURfVkFMVUUgKyAyKTsKKwl9CQkJLy9pZihkYXRhWzBdPT0wKQorCWVsc2UgeworCQlwcmludGsoIlxuVGhlIGlucHV0IHBhcmFtZXRlcnMgYXJlIHdyb25nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vZWxzZWlmKGRhdGFbMF09PTApCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworIC8qCisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTE2X1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2cgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOyAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOiAgICAgICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgKi8KKworaW50IGlfQVBDSTE1MTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJLy9zdG9wIHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kxNTE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOwkvL2Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCWJyZWFrOworCWNhc2UgMToJCS8vc3RhcnQgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwMDAxLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMTUxNl9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLy9Tb2Z0d2FyZSB0cmlnZ2VyCisJCW91dHcoMHgwMjAxLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMTUxNl9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIHN3aXRjaChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfUmVhZFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNTE2X1JlYWRXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGludyhkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MTZfV0FUQ0hET0dfU1RBVFVTKSAmIDB4MTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTE2X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOnJlc2V0cyBhbGwgdGhlIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTUxNl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUCk7CS8vUkVTRVRTIFRIRSBESUdJVEFMIE9VVFBVVFMKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kxNTE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFKTsKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kxNTE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSArIDIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUxNi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OGJhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyoqKioqKioqKiAgICAgIERlZmluaXRpb25zIGZvciBBUENJLTE1MTYgY2FyZCAgKioqKiovCisKKy8vIENhcmQgU3BlY2lmaWMgaW5mb3JtYXRpb24KKyNkZWZpbmUgQVBDSTE1MTZfQk9BUkRfVkVORE9SX0lEICAgICAgICAgICAgICAgICAweDE1QjgKKyNkZWZpbmUgQVBDSTE1MTZfQUREUkVTU19SQU5HRSAgICAgICAgICAgICAgICAgICA4CisKKy8vRElHSVRBTCBJTlBVVC1PVVRQVVQgREVGSU5FCisKKyNkZWZpbmUgQVBDSTE1MTZfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgCTQKKyNkZWZpbmUgQVBDSTE1MTZfRElHSVRBTF9PUF9SVyAgICAgICAgICAgICAgICAgCTQKKyNkZWZpbmUgQVBDSTE1MTZfRElHSVRBTF9JUCAgICAgICAgICAgICAgICAgICAgIDAKKworLy8gVElNRVIgQ09VTlRFUiBXQVRDSERPRyBERUZJTkVTCisKKyNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBDSTE1MTZfRElHSVRBTF9PUF9XQVRDSERPRyAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTE1MTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kxNTE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kxNTE2X1dBVENIRE9HX1NUQVRVUyAgICAgICAgICAgICAgICAgICAxNgorCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMTUxNgorCisvL0RpZ2l0YWwgSW5wdXQKK0lOVCBpX0FQQ0kxNTE2X1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMTUxNl9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL0RpZ2l0YWwgT3V0cHV0CitpbnQgaV9BUENJMTUxNl9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kxNTE2X1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kxNTE2X1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vIFRJTUVSCisvLyB0aW1lciB2YWx1ZSBpcyBwYXNzZWQgYXMgdSBzZWNvbmRzCitpbnQgaV9BUENJMTUxNl9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kxNTE2X1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTE1MTZfUmVhZFdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9yZXNldAorSU5UIGlfQVBDSTE1MTZfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiNTA0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYwpAQCAtMCwwICsxLDExMDUgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0xNTY0ICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMTU2NC5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMTU2NCAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNTY0LmgiCisKKy8vR2xvYmFsIHZhcmlhYmxlcworVUlOVCB1aV9JbnRlcnJ1cHRTdGF0dXNfMTU2NCA9IDA7CitVSU5UIHVpX0ludGVycnVwdERhdGEsIHVpX1R5cGU7CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9Db25maWdEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgdGhlIGRpZ2l0YWwgaW5wdXQgU3ViZGV2aWNlICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICBkYXRhWzBdICAgICAgICAgICAgOiAxIEVuYWJsZSAgRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgfAorfAkJCQkJCQkJICAgMCBEaXNhYmxlIERpZ2l0YWwgSW5wdXQgSW50ZXJydXB0IHwKK3wJCQkgIGRhdGFbMV0gICAgICAgICAgICA6IDAgQURESURBVEEgSW50ZXJydXB0IE9SIExPR0lDCSB8Cit8CQkJCQkJCQkgOiAxIEFERElEQVRBIEludGVycnVwdCBBTkQgTE9HSUMgICAgfAorfAkJCSAgZGF0YVsyXQkJCSA6IEludGVycnVwdCBtYXNrIGZvciB0aGUgbW9kZSAxCSB8Cit8CQkJICBkYXRhWzNdCQkJIDogSW50ZXJydXB0IG1hc2sgZm9yIHRoZSBtb2RlIDIJIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfQ29uZmlnRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGRpZ2l0YWwgaW5wdXQgbG9naWMgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWlmIChkYXRhWzBdID09IEFERElEQVRBX0VOQUJMRSkgeworCQlkYXRhWzJdID0gZGF0YVsyXSA8PCA0OworCQlkYXRhWzNdID0gZGF0YVszXSA8PCA0OworCQlvdXRsKGRhdGFbMl0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUxKTsKKwkJb3V0bChkYXRhWzNdLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMik7CisJCWlmIChkYXRhWzFdID09IEFERElEQVRBX09SKSB7CisJCQlvdXRsKDB4NCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJCX0JCS8vIGlmICAoZGF0YVsxXSA9PSBBRERJREFUQV9PUikKKwkJZWxzZSB7CisJCQlvdXRsKDB4NiwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJCX0JCS8vIGVsc2UgaWYgIChkYXRhWzFdID09IEFERElEQVRBX09SKQorCX0JCQkvLyBpZiAgKGRhdGFbMF0gPT0gQURESURBVEFfRU5BQkxFKQorCWVsc2UgeworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTEpOworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTIpOworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpOworCX0JCQkvLyBlbHNlIGlmICAoZGF0YVswXSA9PSBBRERJREFUQV9FTkFCTEUpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTY0X1JlYWQxRGlnaXRhbElucHV0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGRpZ2l0YWwgaW5wdXQgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgICBVSU5UIHVpX0NoYW5uZWwgOiBDaGFubmVsIG51bWJlciB0byByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTU2NF9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UbXBWYWx1ZSA9IDA7CisJVUlOVCB1aV9DaGFubmVsOworCisJdWlfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmICh1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PSAzMSkgeworCQl1aV9UbXBWYWx1ZSA9CisJCQkoVUlOVCkgaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVApOworCQkvLyAgc2luY2Ugb25seSAxIGNoYW5uZWwgcmVxZCAgdG8gYnJpbmcgaXQgdG8gbGFzdCBiaXQgaXQgaXMgcm90YXRlZAorCQkvLyAgOCArKGNoYW4gLSAxKSB0aW1lcyB0aGVuIEFORGVkIHdpdGggMSBmb3IgbGFzdCBiaXQuCisJCSpkYXRhID0gKHVpX1RtcFZhbHVlID4+IHVpX0NoYW5uZWwpICYgMHgxOworCX0JCQkvLyBpZiAgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9MzEpCisJZWxzZSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJOb3QgYSB2YWxpZCBjaGFubmVsIG51bWJlciAhISEgXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCX0JCQkvL2Vsc2UgaWYgICh1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTMxKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfUmVhZE1vcmVEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgUmVxdWVzdGVkIGRpZ2l0YWwgaW5wdXRzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBiZSBSZWFkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1BvcnRWYWx1ZSA9IGRhdGFbMF07CisJVUlOVCB1aV9NYXNrID0gMDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsczsKKworCXVpX05vT2ZDaGFubmVscyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChkYXRhWzFdID09IDApIHsKKwkJKmRhdGEgPSAoVUlOVCkgaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVApOworCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVscykgeworCQljYXNlIDI6CisJCQl1aV9NYXNrID0gMzsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXVpX01hc2sgPSAxNTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXVpX01hc2sgPSAyNTU7CisJCQkqZGF0YSA9ICgqZGF0YSA+PiAoOCAqIHVpX1BvcnRWYWx1ZSkpICYgdWlfTWFzazsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJdWlfTWFzayA9IDY1NTM1OworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDE2ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgMzE6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJOb3QgYSB2YWxpZCBDaGFubmVsIG51bWJlciAhISFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJYnJlYWs7CisJCX0JCS8vIHN3aXRjaCAgKHVpX05vT2ZDaGFubmVscykKKwl9CQkJLy8gaWYgIChkYXRhWzFdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkqZGF0YSA9IHVpX0ludGVycnVwdFN0YXR1c18xNTY0OworCQl9CQkvLyBpZiAgKGRhdGFbMV09PTEpCisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzFdPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfQ29uZmlnRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMV0gICAgICAgICAgICA6IDEgRW5hYmxlICBWQ0MgIEludGVycnVwdCAgfAorfAkJCQkJCQkJCQkgICAwIERpc2FibGUgVkNDICBJbnRlcnJ1cHQgIHwKK3wJCQkJCSAgZGF0YVsyXSAgICAgICAgICAgIDogMSBFbmFibGUgIENDICBJbnRlcnJ1cHQgICB8Cit8CQkJCQkJCQkJCSAgIDAgRGlzYWJsZSBDQyAgSW50ZXJydXB0ICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTU2NF9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVTE9ORyB1bF9Db21tYW5kID0gMDsKKworCWlmICgoZGF0YVswXSAhPSAwKSAmJiAoZGF0YVswXSAhPSAxKSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIk5vdCBhIHZhbGlkIERhdGEgISEhICxEYXRhIHNob3VsZCBiZSAxIG9yIDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gaWYgICgoZGF0YVswXSE9MCkgJiYgKGRhdGFbMF0hPTEpKQorCWlmIChkYXRhWzBdKSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQURESURBVEFfRU5BQkxFOworCX0JCQkvLyBpZiAgKGRhdGFbMF0pCisJZWxzZSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQURESURBVEFfRElTQUJMRTsKKwl9CQkJLy8gZWxzZSBpZiAgKGRhdGFbMF0pCisJaWYgKGRhdGFbMV0gPT0gQURESURBVEFfRU5BQkxFKSB7CisJCXVsX0NvbW1hbmQgPSB1bF9Db21tYW5kIHwgMHgxOworCX0JCQkvLyBpZiAgKGRhdGFbMV0gPT0gQURESURBVEFfRU5BQkxFKQorCWVsc2UgeworCQl1bF9Db21tYW5kID0gdWxfQ29tbWFuZCAmIDB4RkZGRkZGRkU7CisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzFdID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoZGF0YVsyXSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgfCAweDI7CisJfQkJCS8vIGlmICAoZGF0YVsyXSA9PSBBRERJREFUQV9FTkFCTEUpCisJZWxzZSB7CisJCXVsX0NvbW1hbmQgPSB1bF9Db21tYW5kICYgMHhGRkZGRkZGRDsKKwl9CQkJLy8gZWxzZSBpZiAgKGRhdGFbMl0gPT0gQURESURBVEFfRU5BQkxFKQorCW91dGwodWxfQ29tbWFuZCwKKwkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUKTsKKwl1aV9JbnRlcnJ1cHREYXRhID0KKwkJaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfT1AgKworCQlBUENJMTU2NF9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZXMgcG9ydCB2YWx1ZSAgVG8gdGhlIHNlbGVjdGVkIHBvcnQgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBXcml0ZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wLCB1aV9UZW1wMTsKKwlVSU5UIHVpX05vT2ZDaGFubmVsOworCisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9CisJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX09QX1JXKTsKKwl9CQkJLy8gaWYgIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJZWxzZSB7CisJCXVpX1RlbXAgPSAwOworCX0JCQkvLyBlbHNlIGlmICAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXRsKGRhdGFbMF0sCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9SVyk7CisJCX0JCS8vIGlmICAoZGF0YVsxXT09MCkKKwkJZWxzZSB7CisJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA0OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDg6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDggKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMTY6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDE2ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDMxOgorCQkJCQlkYXRhWzBdID0gZGF0YVswXSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQl9CS8vIHN3aXRjaCAodWlfTm9PZkNoYW5uZWxzKQorCQkJCW91dGwoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCQkJQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfUlcpOworCQkJfQkvLyBpZiAgKGRhdGFbMV09PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQl9CS8vIGVsc2UgaWYgIChkYXRhWzFdPT0xKQorCQl9CQkvLyBlbHNlIGlmIChkYXRhWzFdPT0wKQorCX0JCQkvL2lmKGRhdGFbM109PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzNdID09IDEpIHsKKwkJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDE7CisJCQkJdWlfVGVtcDEgPSAxOworCQkJCXVpX1RlbXAxID0gdWlfVGVtcDEgPDwgdWlfTm9PZkNoYW5uZWw7CisJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQlkYXRhWzBdID0KKwkJCQkJKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIF4KKwkJCQkJMHhmZmZmZmZmZjsKKwkJCQlkYXRhWzBdID0gZGF0YVswXSAmIHVpX1RlbXA7CisJCQkJb3V0bChkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJCQlBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9SVyk7CisJCQl9CS8vIGlmICAoZGF0YVsxXT09MCkKKwkJCWVsc2UgeworCQkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCQkJCQljYXNlIDI6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDM7CisJCQkJCQl1aV9UZW1wMSA9IDM7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgMiAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA0OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmOworCQkJCQkJdWlfVGVtcDEgPSAxNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA0ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDg6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGZmOworCQkJCQkJdWlfVGVtcDEgPSAyNTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgOCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAxNjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZmZmZjsKKwkJCQkJCXVpX1RlbXAxID0gNjU1MzU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgMTYgKgorCQkJCQkJCWRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICgxNiAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMzE6CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkJIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCQkJCW91dGwoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArCisJCQkJCQlBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfUlcpOworCQkJCX0JLy8gaWYgIChkYXRhWzFdPT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJfQkvLyBlbHNlIGlmICAoZGF0YVsxXT09MSkKKwkJCX0JLy8gZWxzZSBpZiAgKGRhdGFbMV09PTApCisJCX0JCS8vIGlmICAoZGF0YVszXT09MSk7CisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBlbHNlIGlmIChkYXRhWzNdPT0xKQorCX0JCQkvLyBlbHNlIGlmIChkYXRhWzNdPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbDsKKworCXVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdWlfVGVtcCA9IGRhdGFbMF07CisJKmRhdGEgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfUlcpOworCWlmICh1aV9UZW1wID09IDApIHsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gdWlfTm9PZkNoYW5uZWwpICYgMHgxOworCX0JCQkvLyBpZiAgKHVpX1RlbXA9PTApCisJZWxzZSB7CisJCWlmICh1aV9UZW1wID09IDEpIHsKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKwkJCWNhc2UgMjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIGRhdGFbMV0pKSAmIDM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNDoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoNCAqIGRhdGFbMV0pKSAmIDE1OworCQkJCWJyZWFrOworCisJCQljYXNlIDg6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDggKiBkYXRhWzFdKSkgJiAyNTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTY6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDE2ICogZGF0YVsxXSkpICYgNjU1MzU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzE6CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQkJYnJlYWs7CisJCQl9CS8vIHN3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCX0JCS8vIGlmICAodWlfVGVtcD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZCBcbiIpOworCQl9CQkvLyBlbHNlIGlmICh1aV9UZW1wPT0xKQorCX0JCQkvLyBlbHNlIGlmICAodWlfVGVtcD09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTY0X0NvbmZpZ1RpbWVyQ291bnRlcldhdGNoZG9nICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICAgICAgICAgICAgOiAwIENvbmZpZ3VyZSBBcyBUaW1lciAgICAgIHwKK3wJCQkJCQkJCQkJICAgMSBDb25maWd1cmUgQXMgQ291bnRlciAgICB8Cit8CQkJCQkJCQkJCSAgIDIgQ29uZmlndXJlIEFzIFdhdGNoZG9nICAgfAorfAkJCQkJICBkYXRhWzFdICAgICAgICAgICAgOiAxIEVuYWJsZSAgSW50ZXJydXB0ICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIEludGVycnVwdCAJICAgICB8Cit8CQkJCQkgIGRhdGFbMl0gICAgICAgICAgICA6IFRpbWUgVW5pdCAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzNdCQkJIDogUmVsb2FkIFZhbHVlCQkJICAgICB8Cit8CQkJCQkgIGRhdGFbNF0gICAgICAgICAgICA6IFRpbWVyIE1vZGUgICAgICAgICAgICAgCSB8Cit8CQkJCQkgIGRhdGFbNV0JCQkgOiBUaW1lciBDb3VudGVyIFdhdGNoZG9nIE51bWJlcnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNl0gICAgICAgICAgICA6ICBDb3VudGVyIERpcmVjdGlvbgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X0NvbmZpZ1RpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVTE9ORyB1bF9Db21tYW5kMSA9IDA7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCWlmIChkYXRhWzBdID09IEFERElEQVRBX1dBVENIRE9HKSB7CisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfV0FUQ0hET0c7CisKKwkJLy9EaXNhYmxlIHRoZSB3YXRjaGRvZworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQkvL0xvYWRpbmcgdGhlIFJlbG9hZCB2YWx1ZQorCQlvdXRsKGRhdGFbM10sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCUFQQ0kxNTY0X1RDV19SRUxPQURfVkFMVUUpOworCX0JCQkvLyBpZiAgKGRhdGFbMF09PUFERElEQVRBX1dBVENIRE9HKQorCWVsc2UgaWYgKGRhdGFbMF0gPT0gQURESURBVEFfVElNRVIpIHsKKwkJLy9GaXJzdCBTdG9wIFRoZSBUaW1lcgorCQl1bF9Db21tYW5kMSA9CisJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQl1bF9Db21tYW5kMSA9IHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRVVMOworCQlvdXRsKHVsX0NvbW1hbmQxLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArIEFQQ0kxNTY0X1RDV19QUk9HKTsJLy9TdG9wIFRoZSBUaW1lcgorCisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfVElNRVI7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCW91dGwoMHgwMiwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CS8vRW5hYmxlIFRJTUVSIGludCAmIERJU0FCTEUgQUxMIFRIRSBPVEhFUiBpbnQgU09VUkNFUworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQkJQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCQlBUENJMTU2NF9UQ1dfSVJRKTsKKwkJCW91dGwoMHgwLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIxICsKKwkJCQlBUENJMTU2NF9UQ1dfSVJRKTsKKwkJCW91dGwoMHgwLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIyICsKKwkJCQlBUENJMTU2NF9UQ1dfSVJRKTsKKwkJCW91dGwoMHgwLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIzICsKKwkJCQlBUENJMTU2NF9UQ1dfSVJRKTsKKwkJCW91dGwoMHgwLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVI0ICsKKwkJCQlBUENJMTU2NF9UQ1dfSVJRKTsKKwkJfQkJLy8gaWYgIChkYXRhWzFdPT0xKQorCQllbHNlIHsKKwkJCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArIEFQQ0kxNTY0X1RDV19QUk9HKTsJLy9kaXNhYmxlIFRpbWVyIGludGVycnVwdAorCQl9CQkvLyBlbHNlIGlmICAoZGF0YVsxXT09MSkKKworCQkvLyBMb2FkaW5nIFRpbWViYXNlCisKKwkJb3V0bChkYXRhWzJdLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJQVBDSTE1NjRfVENXX1RJTUVCQVNFKTsKKworCQkvL0xvYWRpbmcgdGhlIFJlbG9hZCB2YWx1ZQorCQlvdXRsKGRhdGFbM10sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUkVMT0FEX1ZBTFVFKTsKKworCQl1bF9Db21tYW5kMSA9CisJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQl1bF9Db21tYW5kMSA9CisJCQkodWxfQ29tbWFuZDEgJiAweEZGRjcxOUUyVUwpIHwgMlVMIDw8IDEzVUwgfCAweDEwVUw7CisJCW91dGwodWxfQ29tbWFuZDEsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsgQVBDSTE1NjRfVENXX1BST0cpOwkvL21vZGUgMgorCX0JCQkvLyBlbHNlIGlmICAoZGF0YVswXT09QURESURBVEFfVElNRVIpCisJZWxzZSBpZiAoZGF0YVswXSA9PSBBRERJREFUQV9DT1VOVEVSKSB7CisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfQ09VTlRFUjsKKwkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPSBkYXRhWzVdOworCisJCS8vRmlyc3QgU3RvcCBUaGUgQ291bnRlcgorCQl1bF9Db21tYW5kMSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CisJCW91dGwodWxfQ29tbWFuZDEsIGRldnByaXYtPmlvYmFzZSArICgoZGF0YVs1XSAtIDEpICogMHgyMCkgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CS8vU3RvcCBUaGUgVGltZXIKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2V0IHRoZSByZWxvYWQgdmFsdWUgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGwoZGF0YVszXSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoZGF0YVs1XSAtIDEpICogMHgyMCkgKworCQkJQVBDSTE1NjRfVENXX1JFTE9BRF9WQUxVRSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgbW9kZSA6ICAgICAgICAgICAgICovCisJCS8qIC0gRGlzYWJsZSB0aGUgaGFyZHdhcmUgICAgICovCisJCS8qIC0gRGlzYWJsZSB0aGUgY291bnRlciBtb2RlICovCisJCS8qIC0gRGlzYWJsZSB0aGUgd2FybmluZyAgICAgICovCisJCS8qIC0gRGlzYWJsZSB0aGUgcmVzZXQgICAgICAgICovCisJCS8qIC0gRGlzYWJsZSB0aGUgdGltZXIgbW9kZSAgICovCisJCS8qIC0gRW5hYmxlIHRoZSBjb3VudGVyIG1vZGUgICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl1bF9Db21tYW5kMSA9CisJCQkodWxfQ29tbWFuZDEgJiAweEZGRkMxOUUyVUwpIHwgMHg4MDAwMFVMIHwKKwkJCShVTE9ORykgKChVTE9ORykgZGF0YVs0XSA8PCAxNlVMKTsKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoZGF0YVs1XSAtIDEpICogMHgyMCkgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCisJCS8vIEVuYWJsZSBvciBEaXNhYmxlIEludGVycnVwdAorCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkQpIHwgKGRhdGFbMV0gPDwgMSk7CisJCW91dGwodWxfQ29tbWFuZDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGRhdGFbNV0gLSAxKSAqIDB4MjApICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZXQgdGhlIFVwL0Rvd24gc2VsZWN0aW9uICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZCRjlGRlVMKSB8IChkYXRhWzZdIDw8IDE4KTsKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoZGF0YVs1XSAtIDEpICogMHgyMCkgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCX0JCQkvLyBlbHNlIGlmICAoZGF0YVswXT09QURESURBVEFfQ09VTlRFUikKKwllbHNlIHsKKwkJcHJpbnRrKCIgSW52YWxpZCBzdWJkZXZpY2UuIik7CisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdPT1BRERJREFUQV9XQVRDSERPRykKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfU3RhcnRTdG9wV3JpdGVUaW1lckNvdW50ZXJXYXRjaGRvZyAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTdGFydCAvIFN0b3AgVGhlIFNlbGVjdGVkIFRpbWVyICwgQ291bnRlciBvciBXYXRjaGRvZyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDAgVGltZXIgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkgICAxIENvdW50ZXIgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMiBXYXRjaGRvZyAgICAgICAgCQkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAkJCQkJICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgIDogMSBTdGFydCAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDAgU3RvcCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBUcmlnZ2VyICAgICAgICAgICAgIAkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhciAoT25seSBDb3VudGVyKSAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfU3RhcnRTdG9wV3JpdGVUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUxPTkcgdWxfQ29tbWFuZDEgPSAwOworCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCQlzd2l0Y2ggKGRhdGFbMV0pIHsKKwkJY2FzZSAwOgkvL3N0b3AgdGhlIHdhdGNoZG9nCisJCQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArIEFQQ0kxNTY0X1RDV19QUk9HKTsJLy9kaXNhYmxlIHRoZSB3YXRjaGRvZworCQkJYnJlYWs7CisJCWNhc2UgMToJLy9zdGFydCB0aGUgd2F0Y2hkb2cKKwkJCW91dGwoMHgwMDAxLAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArCisJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQkJYnJlYWs7CisJCWNhc2UgMjoJLy9Tb2Z0d2FyZSB0cmlnZ2VyCisJCQlvdXRsKDB4MDIwMSwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2ggKGRhdGFbMV0pCisJfQkJCS8vIGlmICAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX1dBVENIRE9HKQorCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9USU1FUikgeworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQl1bF9Db21tYW5kMSA9CisJCQkJaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDFVTDsKKworCQkJLy9FbmFibGUgdGhlIFRpbWVyCisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCX0JCS8vIGlmICAoZGF0YVsxXT09MSkKKwkJZWxzZSBpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkvL1N0b3AgVGhlIFRpbWVyCisKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCX0JCS8vIGVsc2UgaWYoZGF0YVsxXT09MCkKKwl9CQkJLy8gaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfVElNRVIpCisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX0NPVU5URVIpIHsKKwkJdWxfQ29tbWFuZDEgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArICgoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLQorCQkJCQkxKSAqIDB4MjApICsgQVBDSTE1NjRfVENXX1BST0cpOworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkvL1N0YXJ0IHRoZSBDb3VudGVyIHN1YmRldmljZQorCQkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkZGOUZGVUwpIHwgMHgxVUw7CisJCX0JCS8vIGlmICAoZGF0YVsxXSA9PSAxKQorCQllbHNlIGlmIChkYXRhWzFdID09IDApIHsKKwkJCS8vIFN0b3BzIHRoZSBDb3VudGVyIHN1YmRldmljZQorCQkJdWxfQ29tbWFuZDEgPSAwOworCisJCX0JCS8vIGVsc2UgaWYgIChkYXRhWzFdID09IDApCisJCWVsc2UgaWYgKGRhdGFbMV0gPT0gMikgeworCQkJLy8gQ2xlYXJzIHRoZSBDb3VudGVyIHN1YmRldmljZQorCQkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkZGOUZGVUwpIHwgMHg0MDA7CisJCX0JCS8vIGVsc2UgaWYgIChkYXRhWzFdID09IDMpCisJCW91dGwodWxfQ29tbWFuZDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyIC0KKwkJCQkJMSkgKiAweDIwKSArIEFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9DT1VOVEVSKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfUmVhZFRpbWVyQ291bnRlcldhdGNoZG9nICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIFRoZSBTZWxlY3RlZCBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTU2NF9SZWFkVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQxID0gMDsKKworCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCQkvLyBTdG9yZXMgdGhlIHN0YXR1cyBvZiB0aGUgV2F0Y2hkb2cKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJQVBDSTE1NjRfVENXX1RSSUdfU1RBVFVTKSAmIDB4MTsKKwkJZGF0YVsxXSA9CisJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cpOworCX0JCQkvLyBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9XQVRDSERPRykKKwllbHNlIGlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9USU1FUikgeworCQkvLyBTdG9yZXMgdGhlIHN0YXR1cyBvZiB0aGUgVGltZXIKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJQVBDSTE1NjRfVENXX1RSSUdfU1RBVFVTKSAmIDB4MTsKKworCQkvLyBTdG9yZXMgdGhlIEFjdHVhbCB2YWx1ZSBvZiB0aGUgVGltZXIKKwkJZGF0YVsxXSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUik7CisJfQkJCS8vIGVsc2UgaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfVElNRVIpCisJZWxzZSBpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfQ09VTlRFUikgeworCQkvLyBSZWFkIHRoZSBDb3VudGVyIEFjdHVhbCBWYWx1ZS4KKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAtCisJCQkJCTEpICogMHgyMCkgKworCQkJQVBDSTE1NjRfVENXX1NZTkNfRU5BQkxFRElTQUJMRSk7CisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyIC0KKwkJCQkJMSkgKiAweDIwKSArIEFQQ0kxNTY0X1RDV19UUklHX1NUQVRVUyk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBzb2Z0d2FyZSB0cmlnZ2VyIHN0YXR1cyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlkYXRhWzFdID0gKEJZVEUpICgodWxfQ29tbWFuZDEgPj4gMSkgJiAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGhhcmR3YXJlIHRyaWdnZXIgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRhdGFbMl0gPSAoQllURSkgKCh1bF9Db21tYW5kMSA+PiAyKSAmIDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIHNvZnR3YXJlIGNsZWFyIHN0YXR1cyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJZGF0YVszXSA9IChCWVRFKSAoKHVsX0NvbW1hbmQxID4+IDMpICYgMSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgb3ZlcmZsb3cgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlkYXRhWzRdID0gKEJZVEUpICgodWxfQ29tbWFuZDEgPj4gMCkgJiAxKTsKKwl9CQkJLy8gZWxzZSAgaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfQ09VTlRFUikKKwllbHNlIGlmICgoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgIT0gQURESURBVEFfVElNRVIpCisJCSYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSAhPSBBRERJREFUQV9XQVRDSERPRykKKwkJJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlICE9IEFERElEQVRBX0NPVU5URVIpKSB7CisJCXByaW50aygiXG4gSW52YWxpZCBTdWJkZXZpY2UgISEhXG4iKTsKKwl9CQkJLy8gZWxzZSBpZiAoKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlIT1BRERJREFUQV9USU1FUikgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlIT1BRERJREFUQV9XQVRDSERPRykmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUhPUFERElEQVRBX0NPVU5URVIpKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogIGludCBpX0FQQ0kxNTY0X1JlYWRJbnRlcnJ1cHRTdGF0dXMgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOlJlYWRzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE1NjRfUmVhZEludGVycnVwdFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJKmRhdGEgPSB1aV9UeXBlOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogc3RhdGljIHZvaWQgdl9BUENJMTU2NF9JbnRlcnJ1cHQJCQkJCSAgICAgfAorfAkJCQkJICAoaW50IGlycSAsIHZvaWQgKmQpICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBpbnRlcnJ1cHRpYmxlIGRpZ2l0YWwgaW5wdXRzIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGludCBpcnEgICAgICAgICAgICAgICAgIDogaXJxIG51bWJlciAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZCAgICAgICAgICAgICAgICAgOiB2b2lkIHBvaW50ZXIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitzdGF0aWMgdm9pZCB2X0FQQ0kxNTY0X0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCVVJTlQgdWlfRE8sIHVpX0RJOworCVVJTlQgdWlfVGltZXI7CisJVUlOVCB1aV9DMSwgdWlfQzIsIHVpX0MzLCB1aV9DNDsKKwlVTE9ORyB1bF9Db21tYW5kMiA9IDA7CisJdWlfREkgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSVJRKSAmIDB4MDE7CisJdWlfRE8gPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfSVJRKSAmIDB4MDE7CisJdWlfVGltZXIgPQorCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQlBUENJMTU2NF9UQ1dfSVJRKSAmIDB4MDE7CisJdWlfQzEgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjEgKworCQlBUENJMTU2NF9UQ1dfSVJRKSAmIDB4MTsKKwl1aV9DMiA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMiArCisJCUFQQ0kxNTY0X1RDV19JUlEpICYgMHgxOworCXVpX0MzID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIzICsKKwkJQVBDSTE1NjRfVENXX0lSUSkgJiAweDE7CisJdWlfQzQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjQgKworCQlBUENJMTU2NF9UQ1dfSVJRKSAmIDB4MTsKKwlpZiAodWlfREkgPT0gMCAmJiB1aV9ETyA9PSAwICYmIHVpX1RpbWVyID09IDAgJiYgdWlfQzEgPT0gMAorCQkmJiB1aV9DMiA9PSAwICYmIHVpX0MzID09IDAgJiYgdWlfQzQgPT0gMCkgeworCQlwcmludGsoIlxuSW50ZXJydXB0IGZyb20gdW5rbm93biBzb3VyY2VcbiIpOworCX0JCQkvLyBpZih1aV9EST09MCAmJiB1aV9ETz09MCAmJiB1aV9UaW1lcj09MCAmJiB1aV9DMT09MCAmJiB1aV9DMj09MCAmJiB1aV9DMz09MCAmJiB1aV9DND09MCkKKworCWlmICh1aV9ESSA9PSAxKSB7CisJCXVpX0RJID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpOworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpOworCQl1aV9JbnRlcnJ1cHRTdGF0dXNfMTU2NCA9CisJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMpOworCQl1aV9JbnRlcnJ1cHRTdGF0dXNfMTU2NCA9IHVpX0ludGVycnVwdFN0YXR1c18xNTY0ICYgMFgwMDBGRkZGMDsKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCQlvdXRsKHVpX0RJLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsgQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpOwkvL2VuYWJsZSB0aGUgaW50ZXJydXB0CisJCXJldHVybjsKKwl9CisKKwlpZiAodWlfRE8gPT0gMSkgeworCQkvLyBDaGVjayBmb3IgRGlnaXRhbCBPdXRwdXQgaW50ZXJydXB0IFR5cGUgLSAxOiBWY2MgaW50ZXJydXB0IDI6IENDIGludGVycnVwdC4KKwkJdWlfVHlwZSA9CisJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX09QX0lOVEVSUlVQVF9TVEFUVVMpICYgMHgzOworCQkvL0Rpc2FibGUgdGhlICBJbnRlcnJ1cHQKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUKTsKKworCQkvL1NlbmRzIHNpZ25hbCB0byB1c2VyIHNwYWNlCisJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisKKwl9CQkJLy8gaWYgICh1aV9ETykKKworCWlmICgodWlfVGltZXIgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfVElNRVIpKSB7CisJCS8vIERpc2FibGUgVGltZXIgSW50ZXJydXB0CisJCXVsX0NvbW1hbmQyID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCisJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisKKwkJLy8gRW5hYmxlIFRpbWVyIEludGVycnVwdAorCisJCW91dGwodWxfQ29tbWFuZDIsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJfQkJCS8vIGlmICAoKHVpX1RpbWVyID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9QURESURBVEFfVElNRVIpKQorCisJaWYgKCh1aV9DMSA9PSAxKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9DT1VOVEVSKSkgeworCQkvLyBEaXNhYmxlIENvdW50ZXIgSW50ZXJydXB0CisJCXVsX0NvbW1hbmQyID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjEgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCisJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisKKwkJLy8gRW5hYmxlIENvdW50ZXIgSW50ZXJydXB0CisJCW91dGwodWxfQ29tbWFuZDIsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJfQkJCS8vIGlmICAoKHVpX0MxID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX0NPVU5URVIpKQorCisJaWYgKCh1aV9DMiA9PSAxKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9DT1VOVEVSKSkgeworCQkvLyBEaXNhYmxlIENvdW50ZXIgSW50ZXJydXB0CisJCXVsX0NvbW1hbmQyID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjIgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCisJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisKKwkJLy8gRW5hYmxlIENvdW50ZXIgSW50ZXJydXB0CisJCW91dGwodWxfQ29tbWFuZDIsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJfQkJCS8vIGlmICAoKHVpX0MyID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9QURESURBVEFfQ09VTlRFUikpCisKKwlpZiAoKHVpX0MzID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX0NPVU5URVIpKSB7CisJCS8vIERpc2FibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIzICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMyArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIzICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgKCh1aV9DMyA9PSAxKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPUFERElEQVRBX0NPVU5URVIpKQorCisJaWYgKCh1aV9DNCA9PSAxKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9DT1VOVEVSKSkgeworCQkvLyBEaXNhYmxlIENvdW50ZXIgSW50ZXJydXB0CisJCXVsX0NvbW1hbmQyID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSNCArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjQgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCisJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisKKwkJLy8gRW5hYmxlIENvdW50ZXIgSW50ZXJydXB0CisJCW91dGwodWxfQ29tbWFuZDIsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSNCArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJfQkJCS8vIGlmICgodWlfQzQgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID1BRERJREFUQV9DT1VOVEVSKSkKKwlyZXR1cm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpyZXNldHMgYWxsIHRoZSByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE1NjRfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVBfSVJRKTsJLy9kaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCisJaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX1NUQVRVUyk7CS8vUmVzZXQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTEpOwkvL0Rpc2FibGUgdGhlIGFuZC9vciBpbnRlcnJ1cHQKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTIpOworCWRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyID0gMDsKKwl1aV9UeXBlID0gMDsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCk7CS8vUmVzZXRzIHRoZSBvdXRwdXQgY2hhbm5lbHMKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUF9JTlRFUlJVUFQpOwkvL0Rpc2FibGVzIHRoZSBpbnRlcnJ1cHQuCisJb3V0bCgweDAsCisJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQlBUENJMTU2NF9UQ1dfUkVMT0FEX1ZBTFVFKTsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIpOworCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArIEFQQ0kxNTY0X1RDV19QUk9HKTsKKworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMSArIEFQQ0kxNTY0X1RDV19QUk9HKTsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjIgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIzICsgQVBDSTE1NjRfVENXX1BST0cpOworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSNCArIEFQQ0kxNTY0X1RDV19QUk9HKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGM0NjFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKioqKioqKioqICAgICAgRGVmaW5pdGlvbnMgZm9yIEFQQ0ktMTU2NCBjYXJkICAqKioqKi8KKworI2RlZmluZSBBUENJMTU2NF9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgMHgxNUI4CisjZGVmaW5lIEFQQ0kxNTY0X0FERFJFU1NfUkFOR0UgICAgICAgICAgICAgICAgICAxMjgKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKy8vIElucHV0IGRlZmluZXMKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9JUCAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTEgICAgIDQKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTIgICAgIDgKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEgICAgICAgICAgICAgICAgIDE2CisKKy8vIE91dHB1dCBkZWZpbmVzCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1AgICAgICAgICAgICAgICAgIAkweDE4CisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfUlcgICAgICAgICAgICAgICAJMAorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX09QX0lOVEVSUlVQVCAgICAgICAgICAgNAorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX09QX0lSUSAgICAgICAgICAgICAgICAgMTIKKworLy9EaWdpdGFsIElucHV0IElSUSBGdW5jdGlvbiBTZWxlY3Rpb24KKyNkZWZpbmUgQURESURBVEFfT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURESURBVEFfQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy9EaWdpdGFsIElucHV0IEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfU1RBVFVTICAgIDEyCisKKy8vRGlnaXRhbCBPdXRwdXQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX09QX0lOVEVSUlVQVF9TVEFUVVMgICAgOAorCisvL0RpZ2l0YWwgSW5wdXQgSW50ZXJydXB0IEVuYWJsZSBEaXNhYmxlLgorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9FTkFCTEUgICAgMHg0CisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX0RJU0FCTEUgICAweEZGRkZGRkZCCisKKy8vRGlnaXRhbCBPdXRwdXQgSW50ZXJydXB0IEVuYWJsZSBEaXNhYmxlLgorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX09QX1ZDQ19JTlRFUlJVUFRfRU5BQkxFICAgMHgxCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfVkNDX0lOVEVSUlVQVF9ESVNBQkxFICAweEZGRkZGRkZFCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfQ0NfSU5URVJSVVBUX0VOQUJMRSAgICAweDIKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9DQ19JTlRFUlJVUFRfRElTQUJMRSAgIDB4RkZGRkZGRkQKKworLy9BRERJREFUQSBFbmFibGUgRGlzYWJsZQorCisjZGVmaW5lIEFERElEQVRBX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vIFRJTUVSIENPVU5URVIgV0FUQ0hET0cgREVGSU5FUworCisjZGVmaW5lIEFERElEQVRBX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFERElEQVRBX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX1dBVENIRE9HICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIEFQQ0kxNTY0X1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIEFQQ0kxNTY0X0NPVU5URVIxICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgQVBDSTE1NjRfQ09VTlRFUjIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQVBDSTE1NjRfQ09VTlRFUjMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQVBDSTE1NjRfQ09VTlRFUjQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1NZTkNfRU5BQkxFRElTQUJMRSAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1JFTE9BRF9WQUxVRSAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1RJTUVCQVNFICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1BST0cgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kxNTY0X1RDV19UUklHX1NUQVRVUyAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBUENJMTU2NF9UQ1dfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1dBUk5fVElNRVZBTCAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEFQQ0kxNTY0X1RDV19XQVJOX1RJTUVCQVNFICAgICAgICAgICAgICAgICAyOAorCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMTU2NAorCisvL0RJCisvLyBmb3IgZGkgcmVhZAorSU5UIGlfQVBDSTE1NjRfQ29uZmlnRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1NjRfUmVhZDFEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kxNTY0X1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vRE8KK2ludCBpX0FQQ0kxNTY0X0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1NjRfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1NjRfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kxNTY0X1JlYWRJbnRlcnJ1cHRTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBUSU1FUgorLy8gdGltZXIgdmFsdWUgaXMgcGFzc2VkIGFzIHUgc2Vjb25kcworSU5UIGlfQVBDSTE1NjRfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMTU2NF9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQkgIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMTU2NF9SZWFkVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gSU5URVJSVVBUCitzdGF0aWMgdm9pZCB2X0FQQ0kxNTY0X0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKworLy8gUkVTRVQKK0lOVCBpX0FQQ0kxNTY0X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTZ4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTZ4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmQ2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMKQEAgLTAsMCArMSw3ODAgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBJIEFQQ0kxNjQ4ICAgIHwgQ29tcGlsZXIgOiBnY2MgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBUVEwuQyAgICAgICAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogUy4gV2ViZXIgICAgIHwgRGF0ZSAgICAgOiAgMjUvMDUvMjAwNSAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNlhYIFRUTCBJL08gbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwyNS4wNS4yMDA1fCBTLldlYmVyICAgfCBDcmVhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNnh4LmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgICBpX0FQQ0kxNlhYX0luc25Db25maWdJbml0VFRMSU8gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgIEFQQ0kxNlhYX1RUTF9JTklUICh1c2luZyBkZWZhdWx0cykgICA6ICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgQ29uZmlndXJlIHRoZSBUVEwgSS9PIG9wZXJhdGluZyBtb2RlIGZyb20gYWxsIHBvcnRzICAgICAgICAgfAorfCAgICAgICAgICAgICAgICBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmUgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIGZvciB5b3UgY2FsbCBhbnkgb3RoZXIgZnVuY3Rpb24gd2l0Y2ggYWNjZXNzIG9mIFRUTC4gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgQVBDSTE2WFhfVFRMX0lOSVRESVJFQ1RJT04odXNlciBpbnB1dHMgZm9yIGRpcmVjdGlvbikgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9Jbml0VHlwZSAgICA9IChCWVRFKSBkYXRhWzBdOyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1BvcnQwTW9kZSAgID0gKEJZVEUpIGRhdGFbMV07ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfUG9ydDFNb2RlICAgPSAoQllURSkgZGF0YVsyXTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9Qb3J0Mk1vZGUgICA9IChCWVRFKSBkYXRhWzNdOyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1BvcnQzTW9kZSAgID0gKEJZVEUpIGRhdGFbNF07ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC4uLi4uLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDo+MDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBQb3J0IDAgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFBvcnQgMSBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogUG9ydCAyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBQb3J0IDMgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLVg6IFBvcnQgWC0xIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBDb25maWcgY29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25Db25maWdJbml0VFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ29tbWFuZCA9IDA7CisJQllURSBiX0NwdCA9IDA7CisJQllURSBiX051bWJlck9mUG9ydCA9CisJCShCWVRFKSAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05iclRUTENoYW5uZWwgLyA4KTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGNvbW1hbmQgKi8KKwkJLyogKioqKioqKioqKioqKioqKiAqLworCisJCWJfQ29tbWFuZCA9IChCWVRFKSBkYXRhWzBdOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjb21tYW5kICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9JTklUKSB8fAorCQkJKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfSU5JVERJUkVDVElPTikgfHwKKwkJCShiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX09VVFBVVE1FTU9SWSkpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgaW5pdGlhbGlzYXRpb24gYnVmZmVyIHNpemUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfSU5JVERJUkVDVElPTikKKwkJCQkmJiAoKEJZVEUpIChpbnNuLT5uIC0gMSkgIT0gYl9OdW1iZXJPZlBvcnQpKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJCQl9CisKKwkJCWlmICgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9PVVRQVVRNRU1PUlkpCisJCQkJJiYgKChCWVRFKSAoaW5zbi0+bikgIT0gMikpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqLworCQkJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIlxuQnVmZmVyIHNpemUgZXJyb3IiKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ29uZmlnIGNvbW1hbmQgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIlxuQ29tbWFuZCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMTAwOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyIGFuZCBBUENJMTZYWF9UVExfSU5JVERJUkVDVElPTiBjb21tYW5kIHNlbGVjdGVkICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKChpX1JldHVyblZhbHVlID49IDApICYmIChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX0lOSVRESVJFQ1RJT04pKSB7CisJCW1lbXNldChkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvbiwgMCwKKwkJCXNpemVvZihkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvbikpOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIHBvcnQgZGlyZWN0aW9uIHNlbGVjdGlvbiAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWZvciAoYl9DcHQgPSAxOworCQkJKGJfQ3B0IDw9IGJfTnVtYmVyT2ZQb3J0KSAmJiAoaV9SZXR1cm5WYWx1ZSA+PSAwKTsKKwkJCWJfQ3B0KyspIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGRpcmVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRhdGFbYl9DcHRdICE9IDApICYmIChkYXRhW2JfQ3B0XSAhPSAweEZGKSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBQb3J0IGRpcmVjdGlvbiBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXByaW50aygiXG5Qb3J0ICVkIGRpcmVjdGlvbiBzZWxlY3Rpb24gZXJyb3IiLAorCQkJCQkoSU5UKSBiX0NwdCk7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0oSU5UKSBiX0NwdDsKKwkJCX0KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNhdmUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWyhiX0NwdCAtIDEpIC8gNF0gPQorCQkJCWRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWyhiX0NwdCAtCisJCQkJCTEpIC8gNF0gfCAoZGF0YVtiX0NwdF0gPDwgKDggKiAoKGJfQ3B0IC0KKwkJCQkJCQkxKSAlIDQpKSk7CisJCX0KKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBubyBlcnJvciBvY2N1ciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgVFRMIHBvcnQgaW5pdGlsYWlzYXRpb24gKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX0lOSVQpCisJCQl8fCAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9JTklURElSRUNUSU9OKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZXQgYWxsIHBvcnQgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWZvciAoYl9DcHQgPSAwOyBiX0NwdCA8PSBiX051bWJlck9mUG9ydDsgYl9DcHQrKykgeworCQkJCWlmICgoYl9DcHQgJSA0KSA9PSAwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2V0IHRoZSBjb25maWd1cmF0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGRldnByaXYtPgorCQkJCQkJdWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bYl9DcHQgLworCQkJCQkJCTRdLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsgMzIgKyBiX0NwdCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG91dHB1dCBtZW1vcnkgaW5pdGlhbGlzYXRpb24gY29tbWFuZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9PVVRQVVRNRU1PUlkpIHsKKwkJaWYgKGRhdGFbMV0pIHsKKwkJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQURESURBVEFfRU5BQkxFOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCQl9CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgICAgIGlfQVBDSTE2WFhfSW5zbkJpdHNSZWFkVFRMSU8gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgaW5wdXQgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9JbnB1dENoYW5uZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdHVzIGZyb20gZGlnaXRhbCBpbnB1dCBwb3J0ICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9TZWxlY3RlZFBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIEFQQ0kxNlhYX1RUTF9SRUFEQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9TZWxlY3RlZFBvcnQ9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX0lucHV0Q2hhbm5lbD0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIGJfUmVhZFR5cGUJICA9IChCWVRFKSBkYXRhWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICBBUENJMTZYWF9UVExfUkVBRFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIGJfU2VsZWN0ZWRQb3J0PSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9SZWFkVHlwZQkgID0gKEJZVEUpIGRhdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBkYXRhWzBdICAgIDAgOiBDaGFubmxlIGlzIG5vdCBhY3RpdmUgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5ubGUgaXMgYWN0aXZlICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiA+MCAgOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMCA6IENvbmZpZyBjb21tYW5kIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDIgOiBUaGUgc2VsZWN0ZWQgVFRMIGlucHV0IHBvcnQgaXMgd3JvbmcgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMyA6IFRoZSBzZWxlY3RlZCBUVEwgZGlnaXRhbCBpbnB1dCBpcyB3cm9uZyAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25CaXRzUmVhZFRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJQllURSBiX0NvbW1hbmQgPSAwOworCUJZVEUgYl9OdW1iZXJPZlBvcnQgPQorCQkoQllURSkgKGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJUVExDaGFubmVsIC8gOCk7CisJQllURSBiX1NlbGVjdGVkUG9ydCA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwlCWVRFIGJfSW5wdXRDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJQllURSAqcGJfU3RhdHVzOworCURXT1JEIGR3X1N0YXR1czsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGNvbW1hbmQgKi8KKwkJLyogKioqKioqKioqKioqKioqKiAqLworCisJCWJfQ29tbWFuZCA9IChCWVRFKSBkYXRhWzBdOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjb21tYW5kICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9SRUFEQ0hBTk5FTCkKKwkJCXx8IChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1JFQURQT1JUKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHNlbGVjdGVkIHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1NlbGVjdGVkUG9ydCA8IGJfTnVtYmVyT2ZQb3J0KSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGlucHV0IHBvcnQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKCgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQlbYl9TZWxlY3RlZFBvcnQgLworCQkJCQkJCQk0XSA+PiAoOCAqCisJCQkJCQkJCShiX1NlbGVjdGVkUG9ydAorCQkJCQkJCQkJJQorCQkJCQkJCQkJNCkpKSAmCisJCQkJCQkweEZGKSA9PSAwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKGJfQ29tbWFuZCA9PQorCQkJCQkJCUFQQ0kxNlhYX1RUTF9SRUFEQ0hBTk5FTCkKKwkJCQkJCSYmIChiX0lucHV0Q2hhbm5lbCA+IDcpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRoZSBzZWxlY3RlZCBUVEwgZGlnaXRhbCBpbnB1dCBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCXByaW50aygiXG5DaGFubmVsIHNlbGVjdGlvbiBlcnJvciIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDM7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBUVEwgaW5wdXQgcG9ydCBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJcHJpbnRrKCJcblBvcnQgc2VsZWN0aW9uIGVycm9yIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAyOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUaGUgc2VsZWN0ZWQgVFRMIGlucHV0IHBvcnQgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJcHJpbnRrKCJcblBvcnQgc2VsZWN0aW9uIGVycm9yIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDI7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvbmZpZyBjb21tYW5kIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJcbkNvbW1hbmQgc2VsZWN0aW9uIGVycm9yIik7CisJCQlpX1JldHVyblZhbHVlID0gLTEwMDsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiXG5CdWZmZXIgc2l6ZSBlcnJvciIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBubyBlcnJvciBvY2N1ciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKwkJcGJfU3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBkaWdpdGFsIGlucHUgc3RhdHVzICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZHdfU3RhdHVzID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyA4ICsgKChiX1NlbGVjdGVkUG9ydCAvIDQpICogNCkpOworCQlkd19TdGF0dXMgPSAoZHdfU3RhdHVzID4+ICg4ICogKGJfU2VsZWN0ZWRQb3J0ICUgNCkpKSAmIDB4RkY7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNhdmUgdGhlIHBvcnQgdmFsdWUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJKnBiX1N0YXR1cyA9IChCWVRFKSBkd19TdGF0dXM7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHJlYWQgY2hhbm5lbCBzdGF0dXMgY29tbWFuZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfUkVBRENIQU5ORUwpIHsKKwkJCSpwYl9TdGF0dXMgPSAoKnBiX1N0YXR1cyA+PiBiX0lucHV0Q2hhbm5lbCkgJiAxOworCQl9CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCBpX0FQQ0kxNlhYX0luc25SZWFkVFRMSU9BbGxQb3J0VmFsdWUgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBhbGwgZGlnaXRhbCBpbnB1dCBwb3J0cyAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gOiBQb3J0IDAgdG8gMyBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSA6IFBvcnQgNCB0byA3IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBSZWFkIGNvbW1hbmQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25SZWFkVFRMSU9BbGxQb3J0VmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9Db21tYW5kID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ3B0ID0gMDsKKwlCWVRFIGJfTnVtYmVyT2ZQb3J0ID0gMDsKKwl1bnNpZ25lZCBpbnQgKnBsc19SZWFkRGF0YSA9IGRhdGE7CisKKwkvKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgY29tbWFuZCAqLworCS8qKioqKioqKioqKioqKioqKioqKi8KKworCWlmICgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9SRUFEX0FMTF9JTlBVVFMpCisJCXx8IChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1JFQURfQUxMX09VVFBVVFMpKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgbnVtYmVyIG9mIDMyLUJpdCBwb3J0cyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWJfTnVtYmVyT2ZQb3J0ID0KKwkJCShCWVRFKSAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05iclRUTENoYW5uZWwgLyAzMik7CisJCWlmICgoYl9OdW1iZXJPZlBvcnQgKiAzMikgPAorCQkJZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05iclRUTENoYW5uZWwpIHsKKwkJCWJfTnVtYmVyT2ZQb3J0ID0gYl9OdW1iZXJPZlBvcnQgKyAxOworCQl9CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGluc24tPm4gPj0gYl9OdW1iZXJPZlBvcnQpIHsKKwkJCWlmIChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1JFQURfQUxMX0lOUFVUUykgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgYWxsIGRpZ2l0YWwgaW5wdXQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWZvciAoYl9DcHQgPSAwOyBiX0NwdCA8IGJfTnVtYmVyT2ZQb3J0OyBiX0NwdCsrKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSAzMi1CaXQgcG9ydCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwbHNfUmVhZERhdGFbYl9DcHRdID0KKwkJCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyA4ICsKKwkJCQkJCShiX0NwdCAqIDQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBNYXNrIGFsbCBjaGFubmVscyB1c2VkIGFscyBvdXRwdXRzICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJcGxzX1JlYWREYXRhW2JfQ3B0XSA9CisJCQkJCQlwbHNfUmVhZERhdGFbYl9DcHRdICYKKwkJCQkJCSh+ZGV2cHJpdi0+CisJCQkJCQl1bF9UVExQb3J0Q29uZmlndXJhdGlvbltiX0NwdF0pOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIGFsbCBkaWdpdGFsIG91dHB1dHMgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZm9yIChiX0NwdCA9IDA7IGJfQ3B0IDwgYl9OdW1iZXJPZlBvcnQ7IGJfQ3B0KyspIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIDMyLUJpdCBwb3J0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXBsc19SZWFkRGF0YVtiX0NwdF0gPQorCQkJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIDIwICsKKwkJCQkJCShiX0NwdCAqIDQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBNYXNrIGFsbCBjaGFubmVscyB1c2VkIGFscyBvdXRwdXRzICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJcGxzX1JlYWREYXRhW2JfQ3B0XSA9CisJCQkJCQlwbHNfUmVhZERhdGFbYl9DcHRdICYgZGV2cHJpdi0+CisJCQkJCQl1bF9UVExQb3J0Q29uZmlndXJhdGlvbltiX0NwdF07CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiXG5CdWZmZXIgc2l6ZSBlcnJvciIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKi8KKwkJLyogQ29tbWFuZCBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIlxuQ29tbWFuZCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDA7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVQgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgICAgIGlfQVBDSTE2WFhfSW5zbkJpdHNXcml0ZVRUTElPICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU2V0IHRoZSBzdGF0ZSBmcm9tIHNlbGVjdGVkIFRUTCBkaWdpdGFsIG91dHB1dCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9PdXRwdXRDaGFubmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU2V0IHRoZSBzdGF0ZSBmcm9tIGRpZ2l0YWwgb3V0cHV0IHBvcnQgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9TZWxlY3RlZFBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT04gfCBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09GRiAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9TZWxlY3RlZFBvcnQgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX091dHB1dENoYW5uZWw9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIGJfQ29tbWFuZCAgICAgID0gKEJZVEUpIGRhdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09OIHwgQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PRkYgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIGJfU2VsZWN0ZWRQb3J0ID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOyAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9Db21tYW5kICAgICAgPSAoQllURSkgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBkYXRhWzBdIDogVFRMIG91dHB1dCBwb3J0IDAgdG8gMyBkYXRhICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gOiBUVEwgb3V0cHV0IHBvcnQgNCB0byA3IGRhdGEgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ID4wICA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAwIDogQ29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMiA6IFRoZSBzZWxlY3RlZCBUVEwgb3V0cHV0IHBvcnQgaXMgd3JvbmcgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAzIDogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDQgOiBPdXRwdXQgbWVtb3J5IGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTZYWF9JbnNuQml0c1dyaXRlVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ29tbWFuZCA9IDA7CisJQllURSBiX051bWJlck9mUG9ydCA9CisJCShCWVRFKSAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05iclRUTENoYW5uZWwgLyA4KTsKKwlCWVRFIGJfU2VsZWN0ZWRQb3J0ID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCUJZVEUgYl9PdXRwdXRDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGNvbW1hbmQgKi8KKwkJLyogKioqKioqKioqKioqKioqKiAqLworCisJCWJfQ29tbWFuZCA9IChCWVRFKSBkYXRhWzBdOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjb21tYW5kICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT04pIHx8CisJCQkoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT04pIHx8CisJCQkoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT0ZGKSB8fAorCQkJKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRikpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBzZWxlY3RlZCBwb3J0ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9TZWxlY3RlZFBvcnQgPCBiX051bWJlck9mUG9ydCkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgb3V0cHV0IHBvcnQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uCisJCQkJCQkJW2JfU2VsZWN0ZWRQb3J0IC8KKwkJCQkJCQkJNF0gPj4gKDggKgorCQkJCQkJCQkoYl9TZWxlY3RlZFBvcnQKKwkJCQkJCQkJCSUKKwkJCQkJCQkJCTQpKSkgJgorCQkJCQkJMHhGRikgPT0gMHhGRikgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKCgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT04pIHx8IChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PRkYpKSAmJiAoYl9PdXRwdXRDaGFubmVsID4gNykpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRoZSBzZWxlY3RlZCBUVEwgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJcHJpbnRrKCJcbkNoYW5uZWwgc2VsZWN0aW9uIGVycm9yIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTEwMzsKKwkJCQkJfQorCisJCQkJCWlmICgoKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09GRikgfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRikpICYmIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9PSBBRERJREFUQV9ESVNBQkxFKSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlwcmludGsoIlxuT3V0cHV0IG1lbW9yeSBkaXNhYmxlZCIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDQ7CisJCQkJCX0KKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKCgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT04pIHx8IChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PRkYpKSAmJiAoaW5zbi0+biA8IDIpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCXByaW50aygiXG5CdWZmZXIgc2l6ZSBlcnJvciIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaGUgc2VsZWN0ZWQgVFRMIG91dHB1dCBwb3J0IGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJcHJpbnRrKCJcblBvcnQgc2VsZWN0aW9uIGVycm9yICVsWCIsCisJCQkJCQkodW5zaWduZWQgbG9uZylkZXZwcml2LT4KKwkJCQkJCXVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDI7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBUVEwgb3V0cHV0IHBvcnQgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJcHJpbnRrKCJcblBvcnQgc2VsZWN0aW9uIGVycm9yICVkICVkIiwKKwkJCQkJYl9TZWxlY3RlZFBvcnQsIGJfTnVtYmVyT2ZQb3J0KTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTEwMjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ29uZmlnIGNvbW1hbmQgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIlxuQ29tbWFuZCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMTAwOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBkaWdpdGFsIG91dHB1dCBzdGF0ZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkd19TdGF0dXMgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIDIwICsgKChiX1NlbGVjdGVkUG9ydCAvIDQpICogNCkpOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgb3V0cHV0IG1lbW9yeSBub3QgdXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9PSBBRERJREFUQV9ESVNBQkxFKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENsZWFyIHRoZSBzZWxlY3RlZCBwb3J0IHZhbHVlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJZHdfU3RhdHVzID0KKwkJCQlkd19TdGF0dXMgJiAoMHhGRkZGRkZGRlVMIC0KKwkJCQkoMHhGRlVMIDw8ICg4ICogKGJfU2VsZWN0ZWRQb3J0ICUgNCkpKSk7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgc2V0dGluZyBjaGFubmVsIE9OICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT04pIHsKKwkJCWR3X1N0YXR1cyA9CisJCQkJZHdfU3RhdHVzIHwgKDFVTCA8PCAoKDggKiAoYl9TZWxlY3RlZFBvcnQgJQorCQkJCQkJCTQpKSArIGJfT3V0cHV0Q2hhbm5lbCkpOworCQl9CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHNldHRpbmcgcG9ydCBPTiAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09OKSB7CisJCQlkd19TdGF0dXMgPQorCQkJCWR3X1N0YXR1cyB8ICgoZGF0YVsxXSAmIDB4RkYpIDw8ICg4ICoKKwkJCQkJKGJfU2VsZWN0ZWRQb3J0ICUgNCkpKTsKKwkJfQorCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgc2V0dGluZyBjaGFubmVsIE9GRiAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PRkYpIHsKKwkJCWR3X1N0YXR1cyA9CisJCQkJZHdfU3RhdHVzICYgKDB4RkZGRkZGRkZVTCAtCisJCQkJKDFVTCA8PCAoKDggKiAoYl9TZWxlY3RlZFBvcnQgJSA0KSkgKworCQkJCQkJYl9PdXRwdXRDaGFubmVsKSkpOworCQl9CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBzZXR0aW5nIHBvcnQgT0ZGICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRikgeworCQkJZHdfU3RhdHVzID0KKwkJCQlkd19TdGF0dXMgJiAoMHhGRkZGRkZGRlVMIC0KKwkJCQkoKGRhdGFbMV0gJiAweEZGKSA8PCAoOCAqIChiX1NlbGVjdGVkUG9ydCAlCisJCQkJCQkJNCkpKSk7CisJCX0KKworCQlvdXRsKGR3X1N0YXR1cywKKwkJCWRldnByaXYtPmlvYmFzZSArIDIwICsgKChiX1NlbGVjdGVkUG9ydCAvIDQpICogNCkpOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOnJlc2V0cyBhbGwgdGhlIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE2WFhfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmOTFlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIENPTUVESV9TVUJEX1RUTElPCisjZGVmaW5lIENPTUVESV9TVUJEX1RUTElPICAgMTEJLyogRGlnaXRhbCBJbnB1dCBPdXRwdXQgQnV0IFRUTCAqLworI2VuZGlmCisKKyNpZm5kZWYgQURESURBVEFfRU5BQkxFCisjZGVmaW5lIEFERElEQVRBX0VOQUJMRSAgMQorI2RlZmluZSBBRERJREFUQV9ESVNBQkxFIDAKKyNlbmRpZgorCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9JTklUICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9JTklURElSRUNUSU9OICAxCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9PVVRQVVRNRU1PUlkgICAyCisKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX1JFQURDSEFOTkVMICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMTZYWF9UVExfUkVBRFBPUlQgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTiAgICAgICAgMAorI2RlZmluZSBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09GRiAgICAgICAxCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT04gICAgICAgICAgIDIKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PRkYgICAgICAgICAgMworCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9SRUFEX0FMTF9JTlBVVFMgICAgICAgIDAKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX1JFQURfQUxMX09VVFBVVFMgICAgICAgMQorCisjaWZkZWYgX19LRVJORUxfXworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTE2eHhfdHRsID0geyAxMiwKKwl7QklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKX0KK307CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgIFRUTCBJTklTSUFMSVNBVElPTiBGVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTZYWF9JbnNuQ29uZmlnSW5pdFRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICBUVEwgSU5QVVQgRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE2WFhfSW5zbkJpdHNSZWFkVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgdW5zaWduZWQgaW50ICpkYXRhKTsKKworaW50IGlfQVBDSTE2WFhfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRMIE9VVFBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTZYWF9JbnNuQml0c1dyaXRlVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitpbnQgaV9BUENJMTZYWF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZjU1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDE2LmMKQEAgLTAsMCArMSw0NjAgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0yMDE2ICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMjAxNi5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMjAxNiAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiaHdkcnZfYXBjaTIwMTYuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgRGlnaXRhbCBPdXRwdXQgU3ViZGV2aWNlLiAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgZGF0YVswXSAgICAgICAgICAgIDogMSBEaWdpdGFsIE1lbW9yeSBPbiAgICAgICAgICAgICAgIHwKK3wJCQkJICAgICAJCQkgICAwIERpZ2l0YWwgTWVtb3J5IE9mZiAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmICgoZGF0YVswXSAhPSAwKSAmJiAoZGF0YVswXSAhPSAxKSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIk5vdCBhIHZhbGlkIERhdGEgISEhICxEYXRhIHNob3VsZCBiZSAxIG9yIDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gaWYgICgoZGF0YVswXSE9MCkgJiYgKGRhdGFbMF0hPTEpKQorCWlmIChkYXRhWzBdKSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQURESURBVEFfRU5BQkxFOworCX0JCQkvLyBpZiAgKGRhdGFbMF0KKwllbHNlIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCX0JCQkvLyBlbHNlIGlmICAoZGF0YVswXQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMTZfV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZXMgcG9ydCB2YWx1ZSAgVG8gdGhlIHNlbGVjdGVkIHBvcnQgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBXcml0ZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDE2X1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbDsKKwlVSU5UIHVpX1RlbXAsIHVpX1RlbXAxOworCXVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKCh1aV9Ob09mQ2hhbm5lbCA8IDApIHx8ICh1aV9Ob09mQ2hhbm5lbCA+IDE1KSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIkludmFsaWQgQ2hhbm5lbCBOdW1iZXJzICEhISwgQ2hhbm5lbCBOdW1iZXJzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxNVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBpZiAgKCh1aV9Ob09mQ2hhbm5lbDwwKSB8fCAodWlfTm9PZkNoYW5uZWw+MTUpKQorCWlmIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cykgeworCQl1aV9UZW1wID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDE2X0RJR0lUQUxfT1ApOworCX0JCQkvLyBpZiAgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vIGVsc2UgaWYgIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJaWYgKChkYXRhWzFdICE9IDApICYmIChkYXRhWzFdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiSW52YWxpZCBEYXRhWzFdIHZhbHVlICEhISwgRGF0YVsxXSBzaG91bGQgYmUgMCBvciAxXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIGlmICAoKGRhdGFbMV0hPTApICYmIChkYXRhWzFdIT0xKSkKKworCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXR3KGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDE2X0RJR0lUQUxfT1ApOworCQl9CQkvLyBpZiAoZGF0YVsxXT09MCkKKwkJZWxzZSB7CisJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA0OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDg6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDggKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMTU6CisJCQkJCWRhdGFbMF0gPSBkYXRhWzBdIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMTZfRElHSVRBTF9PUCk7CisJCQl9CS8vIGlmICAoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy8gZWxzZSBpZiAgKGRhdGFbMV09PTEpCisJCX0JCS8vIGVsc2UgaWYgKGRhdGFbMV09PTApCisJfQkJCS8vIGlmIChkYXRhWzNdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVszXSA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgxOworCQkJCXVpX1RlbXAxID0gMTsKKwkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSBeIDB4ZmZmZjsKKwkJCQlkYXRhWzBdID0gZGF0YVswXSAmIHVpX1RlbXA7CisJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAxNl9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYgIChkYXRhWzFdPT0wKQorCQkJZWxzZSB7CisJCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNDoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZjsKKwkJCQkJCXVpX1RlbXAxID0gMTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgNCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDg6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGZmOworCQkJCQkJdWlfVGVtcDEgPSAyNTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgOCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE1OgorCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJCSIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCQkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTIwMTZfRElHSVRBTF9PUCk7CisJCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJCX0JLy9lbHNlaWYoZGF0YVsxXT09MCkKKwkJfQkJLy9pZihkYXRhWzNdPT0xKTsKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vaWYgZWxzZSBkYXRhWzNdPT0xKQorCX0JCQkvL2lmIGVsc2UgZGF0YVszXT09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X0JpdHNEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsIG9yIHBvcnQgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gcmVhZCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMjAxNl9CaXRzRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoKHVpX05vT2ZDaGFubmVsIDwgMCkgfHwgKHVpX05vT2ZDaGFubmVsID4gMTUpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiSW52YWxpZCBDaGFubmVsIE51bWJlcnMgISEhLCBDaGFubmVsIE51bWJlcnMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDE1XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIGlmICAoKHVpX05vT2ZDaGFubmVsPDApIHx8ICh1aV9Ob09mQ2hhbm5lbD4xNSkpCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiSW52YWxpZCBEYXRhWzBdIHZhbHVlICEhISwgRGF0YVswXSBzaG91bGQgYmUgMCBvciAxXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIGlmICAoKGRhdGFbMF0hPTApICYmIChkYXRhWzBdIT0xKSkKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAxNl9ESUdJVEFMX09QX1JXKTsKKwlpZiAodWlfVGVtcCA9PSAwKSB7CisJCSpkYXRhID0gKCpkYXRhID4+IHVpX05vT2ZDaGFubmVsKSAmIDB4MTsKKwl9CQkJLy8gaWYgICh1aV9UZW1wPT0wKQorCWVsc2UgeworCQlpZiAodWlfVGVtcCA9PSAxKSB7CisJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQljYXNlIDI6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiBkYXRhWzFdKSkgJiAzOworCQkJCWJyZWFrOworCisJCQljYXNlIDQ6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiBkYXRhWzFdKSkgJiAxNTsKKwkJCQlicmVhazsKKworCQkJY2FzZSA4OgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICg4ICogZGF0YVsxXSkpICYgMjU1OworCQkJCWJyZWFrOworCisJCQljYXNlIDE1OgorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbCkKKwkJfQkJLy8gaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vIGVsc2UgaWYgICh1aV9UZW1wPT0xKQorCX0JCQkvLyBpZiAgKHVpX1RlbXA9PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAxNl9Db25maWdXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMjAxNl9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoZGF0YVswXSA9PSAwKSB7CisJCS8vRGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQkvL0xvYWRpbmcgdGhlIFJlbG9hZCB2YWx1ZQorCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kyMDE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSk7CisJCWRhdGFbMV0gPSBkYXRhWzFdID4+IDE2OworCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kyMDE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSArIDIpOworCX0gZWxzZSB7CisJCXByaW50aygiXG5UaGUgaW5wdXQgcGFyYW1ldGVycyBhcmUgd3JvbmdcbiIpOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2cgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDE2X1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJLy9zdG9wIHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOwkvL2Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCWJyZWFrOworCWNhc2UgMToJCS8vc3RhcnQgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwMDAxLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMjAxNl9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLy9Tb2Z0d2FyZSB0cmlnZ2VyCisJCW91dHcoMHgwMjAxLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMjAxNl9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIHN3aXRjaChkYXRhWzBdKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAxNl9SZWFkV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kyMDE2X1JlYWRXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdWRlbGF5KDUpOworCWRhdGFbMF0gPSBpbncoZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kyMDE2X1dBVENIRE9HX1NUQVRVUykgJiAweDE7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAxNl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpyZXNldHMgYWxsIHRoZSByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTIwMTZfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJb3V0dygweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDE2X0RJR0lUQUxfT1ApOwkvLyBSZXNldHMgdGhlIGRpZ2l0YWwgb3V0cHV0IGNoYW5uZWxzCisJb3V0dygweDAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBUENJMjAxNl9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kyMDE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSk7CisJb3V0dygweDAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBUENJMjAxNl9XQVRDSERPR19SRUxPQURfVkFMVUUgKyAyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMTYuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjYxYWFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisvKioqKioqKioqICAgICAgRGVmaW5pdGlvbnMgZm9yIEFQQ0ktMjAxNiBjYXJkICAqKioqKi8KKworI2RlZmluZSBBUENJMjAxNl9CT0FSRF9WRU5ET1JfSUQgMHgxNUI4CisjZGVmaW5lIEFQQ0kyMDE2X0FERFJFU1NfUkFOR0UgICA4CisKKy8vRElHSVRBTCBJTlBVVC1PVVRQVVQgREVGSU5FCisKKyNkZWZpbmUgQVBDSTIwMTZfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgCTB4MDQKKyNkZWZpbmUgQVBDSTIwMTZfRElHSVRBTF9PUF9SVyAgICAgICAgICAgICAgICAgCTQKKworLy9BRERJREFUQSBFbmFibGUgRGlzYWJsZQorCisjZGVmaW5lIEFERElEQVRBX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vIFRJTUVSIENPVU5URVIgV0FUQ0hET0cgREVGSU5FUworCisjZGVmaW5lIEFERElEQVRBX1dBVENIRE9HICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFQQ0kyMDE2X0RJR0lUQUxfT1BfV0FUQ0hET0cgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUgICAgICAgICAgICAxMgorI2RlZmluZSBBUENJMjAxNl9XQVRDSERPR19SRUxPQURfVkFMVUUgICAgICAgICAgICAgNAorI2RlZmluZSBBUENJMjAxNl9XQVRDSERPR19TVEFUVVMgICAgICAgICAgICAgICAgICAgMTYKKworLy8gSGFyZHdhcmUgTGF5ZXIgIGZ1bmN0aW9ucyBmb3IgQXBjaTIwMTYKKworLy9ETworaW50IGlfQVBDSTIwMTZfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK2ludCBpX0FQQ0kyMDE2X1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworaW50IGlfQVBDSTIwMTZfQml0c0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKKy8vIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMKKworaW50IGlfQVBDSTIwMTZfQ29uZmlnV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK2ludCBpX0FQQ0kyMDE2X1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitpbnQgaV9BUENJMjAxNl9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBJbnRlcnJ1cHQgZnVuY3Rpb25zLi4uLi4KKworLy8gdm9pZCB2X0FQQ0kyMDE2X0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKSA7CisKKyAvL3ZvaWQgdl9BUENJMjAxNl9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CisvLyBSRVNFVAorSU5UIGlfQVBDSTIwMTZfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0N2JjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTIwMzIgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kyMDMyLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0yMDMyICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgImh3ZHJ2X2FwY2kyMDMyLmgiCitVSU5UIHVpX0ludGVycnVwdERhdGEsIHVpX1R5cGU7CisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMzJfQ29uZmlnRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMV0gICAgICAgICAgICA6IDEgRW5hYmxlICBWQ0MgIEludGVycnVwdCAgfAorfAkJCQkJCQkJCQkgICAwIERpc2FibGUgVkNDICBJbnRlcnJ1cHQgIHwKK3wJCQkJCSAgZGF0YVsyXSAgICAgICAgICAgIDogMSBFbmFibGUgIENDICBJbnRlcnJ1cHQgICB8Cit8CQkJCQkJCQkJCSAgIDAgRGlzYWJsZSBDQyAgSW50ZXJydXB0ICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMjAzMl9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVTE9ORyB1bF9Db21tYW5kID0gMDsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisKKwlpZiAoKGRhdGFbMF0gIT0gMCkgJiYgKGRhdGFbMF0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJOb3QgYSB2YWxpZCBEYXRhICEhISAsRGF0YSBzaG91bGQgYmUgMSBvciAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYgICggKGRhdGFbMF0hPTApICYmIChkYXRhWzBdIT0xKSApCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXSkKKwllbHNlIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCX0JCQkvL2Vsc2UgaWYgIChkYXRhWzBdKQorCisJaWYgKGRhdGFbMV0gPT0gQURESURBVEFfRU5BQkxFKSB7CisJCXVsX0NvbW1hbmQgPSB1bF9Db21tYW5kIHwgMHgxOworCX0JCQkvL2lmICAoZGF0YVsxXSA9PSBBRERJREFUQV9FTkFCTEUpCisJZWxzZSB7CisJCXVsX0NvbW1hbmQgPSB1bF9Db21tYW5kICYgMHhGRkZGRkZGRTsKKwl9CQkJLy9lbHNlaWYgIChkYXRhWzFdID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoZGF0YVsyXSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgfCAweDI7CisJfQkJCS8vaWYgIChkYXRhWzJdID09IEFERElEQVRBX0VOQUJMRSkKKwllbHNlIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgJiAweEZGRkZGRkZEOworCX0JCQkvL2Vsc2VpZiAgKGRhdGFbMl0gPT0gQURESURBVEFfRU5BQkxFKQorCW91dGwodWxfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9JTlRFUlJVUFQpOworCXVpX0ludGVycnVwdERhdGEgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9JTlRFUlJVUFQpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMzJfV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZXMgcG9ydCB2YWx1ZSAgVG8gdGhlIHNlbGVjdGVkIHBvcnQgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBXcml0ZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTIwMzJfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXAsIHVpX1RlbXAxOworCVVJTlQgdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gZ2V0IHRoZSBjaGFubmVsCisJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUCk7CisKKwl9CQkJLy9pZihkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJZWxzZSB7CisJCXVpX1RlbXAgPSAwOworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoZGF0YVszXSA9PSAwKSB7CisJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgfCB1aV9UZW1wOworCQkJb3V0bChkYXRhWzBdLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QKTsKKwkJfQkJLy9pZihkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCQljYXNlIDI6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA0OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgODoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDE2OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICgxNiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzMToKKwkJCQkJZGF0YVswXSA9IGRhdGFbMF0gfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJb3V0bChkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCX0JCS8vZWxzZWlmKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPQorCQkJCQkoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXgorCQkJCQkweGZmZmZmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXRsKGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1ApOworCQkJfQkvL2lmKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCQljYXNlIDI6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDM7CisJCQkJCQl1aV9UZW1wMSA9IDM7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgMiAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDQ6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGY7CisJCQkJCQl1aV9UZW1wMSA9IDE1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDQgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoNCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA4OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZjsKKwkJCQkJCXVpX1RlbXAxID0gMjU1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDggKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSAxNjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZmZmZjsKKwkJCQkJCXVpX1RlbXAxID0gNjU1MzU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgMTYgKgorCQkJCQkJCWRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICgxNiAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSAzMToKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJCW91dGwoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMjAzMl9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiAoaW5zbi0+bik7OworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMzJfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTIwMzJfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsOworCXVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdWlfVGVtcCA9IGRhdGFbMF07CisJKmRhdGEgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9SVyk7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vaWYgICh1aV9UZW1wPT0wKQorCWVsc2UgeworCQlpZiAodWlfVGVtcCA9PSAxKSB7CisJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCWNhc2UgMjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIGRhdGFbMV0pKSAmIDM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNDoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoNCAqIGRhdGFbMV0pKSAmIDE1OworCQkJCWJyZWFrOworCisJCQljYXNlIDg6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDggKiBkYXRhWzFdKSkgJiAyNTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTY6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDE2ICogZGF0YVsxXSkpICYgNjU1MzU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzE6CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCQl9CQkvL2lmICAodWlfVGVtcD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZCBcbiIpOworCQl9CQkvL2Vsc2VpZiAgKHVpX1RlbXA9PTEpCisJfQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogSU5UIGlfQVBDSTIwMzJfQ29uZmlnV2F0Y2hkb2coY29tZWRpX2RldmljZQorICAgICAgICAgICAgICAgICAgICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSl8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kyMDMyX0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSA9PSAwKSB7CisJCS8vRGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCUFQQ0kyMDMyX1RDV19QUk9HKTsKKwkJLy9Mb2FkaW5nIHRoZSBSZWxvYWQgdmFsdWUKKwkJb3V0bChkYXRhWzFdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQlBUENJMjAzMl9UQ1dfUkVMT0FEX1ZBTFVFKTsKKwl9IGVsc2UgeworCQlwcmludGsoIlxuVGhlIGlucHV0IHBhcmFtZXRlcnMgYXJlIHdyb25nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKyAvKgorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAzMl9TdGFydFN0b3BXcml0ZVdhdGNoZG9nICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKyAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgVGFzayAgICAgICAgICAgICAgOiBTdGFydCAvIFN0b3AgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IE91dHB1dCBQYXJhbWV0ZXJzIDogICAgICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICovCisKK2ludCBpX0FQQ0kyMDMyX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgMDoJCS8vc3RvcCB0aGUgd2F0Y2hkb2cKKwkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgKyBBUENJMjAzMl9UQ1dfUFJPRyk7CS8vZGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJYnJlYWs7CisJY2FzZSAxOgkJLy9zdGFydCB0aGUgd2F0Y2hkb2cKKwkJb3V0bCgweDAwMDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCUFQQ0kyMDMyX1RDV19QUk9HKTsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLy9Tb2Z0d2FyZSB0cmlnZ2VyCisJCW91dGwoMHgwMjAxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQlBUENJMjAzMl9UQ1dfUFJPRyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDMyX1JlYWRXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOyAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMjAzMl9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJZGF0YVswXSA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJQVBDSTIwMzJfVENXX1RSSUdfU1RBVFVTKSAmIDB4MTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6ICB2b2lkIHZfQVBDSTIwMzJfSW50ZXJydXB0CQkJCQkgICAgICAgICB8Cit8CQkJCQkgIChpbnQgaXJxICwgdm9pZCAqZCkgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZXMgcG9ydCB2YWx1ZSAgVG8gdGhlIHNlbGVjdGVkIHBvcnQgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB2b2lkICpkICAgICAgICAgICAgICAgICA6IHZvaWQgcG9pbnRlciAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK3ZvaWQgdl9BUENJMjAzMl9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwl1bnNpZ25lZCBpbnQgdWlfRE87CisKKwl1aV9ETyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX0lSUSkgJiAweDE7CS8vQ2hlY2sgaWYgVkNDIE9SIENDIGludGVycnVwdCBoYXMgb2NjdXJlZC4KKworCWlmICh1aV9ETyA9PSAwKSB7CisJCXByaW50aygiXG5JbnRlcnJ1cHQgZnJvbSB1bktub3duIHNvdXJjZVxuIik7CisJfQkJCS8vIGlmKHVpX0RPPT0wKQorCWlmICh1aV9ETykgeworCQkvLyBDaGVjayBmb3IgRGlnaXRhbCBPdXRwdXQgaW50ZXJydXB0IFR5cGUgLSAxOiBWY2MgaW50ZXJydXB0IDI6IENDIGludGVycnVwdC4KKwkJdWlfVHlwZSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCUFQQ0kyMDMyX0RJR0lUQUxfT1BfSU5URVJSVVBUX1NUQVRVUykgJiAweDM7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUCArCisJCQlBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CisJCWlmICh1aV9UeXBlID09IDEpIHsKKwkJCS8vU2VuZHMgc2lnbmFsIHRvIHVzZXIgc3BhY2UKKwkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisJCX0JCS8vIGlmICh1aV9UeXBlPT0xKQorCQllbHNlIHsKKwkJCWlmICh1aV9UeXBlID09IDIpIHsKKwkJCQkvLyBTZW5kcyBzaWduYWwgdG8gdXNlciBzcGFjZQorCQkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisJCQl9CS8vaWYgKHVpX1R5cGU9PTIpCisJCX0JCS8vZWxzZSBpZiAodWlfVHlwZT09MSkKKwl9CQkJLy9pZih1aV9ETykKKworCXJldHVybjsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogIGludCBpX0FQQ0kyMDMyX1JlYWRJbnRlcnJ1cHRTdGF0dXMgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOlJlYWRzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTIwMzJfUmVhZEludGVycnVwdFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJKmRhdGEgPSB1aV9UeXBlOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogIGludCBpX0FQQ0kyMDMyX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCQkJICAgICB8Cit8CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpSZXNldHMgdGhlIHJlZ2lzdGVycyBvZiB0aGUgY2FyZCAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kyMDMyX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyID0gMDsKKwl1aV9UeXBlID0gMDsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUCk7CS8vUmVzZXRzIHRoZSBvdXRwdXQgY2hhbm5lbHMKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9JTlRFUlJVUFQpOwkvL0Rpc2FibGVzIHRoZSBpbnRlcnJ1cHQuCisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgKyBBUENJMjAzMl9UQ1dfUFJPRyk7CS8vZGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9XQVRDSERPRyArIEFQQ0kyMDMyX1RDV19SRUxPQURfVkFMVUUpOwkvL3JlbG9hZD0wCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwMDJlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKioqKioqKioqICAgICAgRGVmaW5pdGlvbnMgZm9yIEFQQ0ktMjAzMiBjYXJkICAqKioqKi8KKworLy8gQ2FyZCBTcGVjaWZpYyBpbmZvcm1hdGlvbgorI2RlZmluZSBBUENJMjAzMl9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTVCOAorI2RlZmluZSBBUENJMjAzMl9BRERSRVNTX1JBTkdFICAgICAgICAgICAgICAgICAgIDYzCisKKy8vRElHSVRBTCBJTlBVVC1PVVRQVVQgREVGSU5FCisKKyNkZWZpbmUgQVBDSTIwMzJfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgCTAKKyNkZWZpbmUgQVBDSTIwMzJfRElHSVRBTF9PUF9SVyAgICAgICAgICAgICAgICAgCTAKKyNkZWZpbmUgQVBDSTIwMzJfRElHSVRBTF9PUF9JTlRFUlJVUFQgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTIwMzJfRElHSVRBTF9PUF9JUlEgICAgICAgICAgICAgICAgIDEyCisKKy8vRGlnaXRhbCBPdXRwdXQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVF9TVEFUVVMgICAgOAorCisvL0RpZ2l0YWwgT3V0cHV0IEludGVycnVwdCBFbmFibGUgRGlzYWJsZS4KKyNkZWZpbmUgQVBDSTIwMzJfRElHSVRBTF9PUF9WQ0NfSU5URVJSVVBUX0VOQUJMRSAgIDB4MQorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX1ZDQ19JTlRFUlJVUFRfRElTQUJMRSAgMHhGRkZGRkZGRQorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX0NDX0lOVEVSUlVQVF9FTkFCTEUgICAgMHgyCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfQ0NfSU5URVJSVVBUX0RJU0FCTEUgICAweEZGRkZGRkZECisKKy8vQURESURBVEEgRW5hYmxlIERpc2FibGUKKworI2RlZmluZSBBRERJREFUQV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBRERJREFUQV9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyBUSU1FUiBDT1VOVEVSIFdBVENIRE9HIERFRklORVMKKworI2RlZmluZSBBRERJREFUQV9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVBDSTIwMzJfVENXX1JFTE9BRF9WQUxVRSAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTIwMzJfVENXX1RJTUVCQVNFICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVBDSTIwMzJfVENXX1BST0cgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kyMDMyX1RDV19UUklHX1NUQVRVUyAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBUENJMjAzMl9UQ1dfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gSGFyZHdhcmUgTGF5ZXIgIGZ1bmN0aW9ucyBmb3IgQXBjaTIwMzIKKworLy9ETworaW50IGlfQVBDSTIwMzJfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMjAzMl9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMjAzMl9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTIwMzJfUmVhZEludGVycnVwdFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vIFRJTUVSCisvLyB0aW1lciB2YWx1ZSBpcyBwYXNzZWQgYXMgdSBzZWNvbmRzCitJTlQgaV9BUENJMjAzMl9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kyMDMyX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTIwMzJfUmVhZFdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gSW50ZXJydXB0IGZ1bmN0aW9ucy4uLi4uCisKK3ZvaWQgdl9BUENJMjAzMl9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CisKKy8vUmVzZXQgZnVuY3Rpb25zCitpbnQgaV9BUENJMjAzMl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDdlMThlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5jCkBAIC0wLDAgKzEsNTQ5IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktMjIwMCAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTIyMDAuY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEhhcmR3YXJlIExheWVyIEFjY2VzIEZvciBBUENJLTIyMDAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgImh3ZHJ2X2FwY2kyMjAwLmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9SZWFkMURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBkaWdpdGFsIGlucHV0ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTIyMDBfUmVhZDFEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVG1wVmFsdWUgPSAwOworCVVJTlQgdWlfQ2hhbm5lbDsKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDcpIHsKKwkJdWlfVG1wVmFsdWUgPSAoVUlOVCkgaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX0RJR0lUQUxfSVApOworCQkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiB1aV9DaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTcpCisJZWxzZSB7CisJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIGNoYW5uZWwgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJfQkJCS8vZWxzZSBpZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTcpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX1JlYWRNb3JlRGlnaXRhbElucHV0ICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIFJlcXVlc3RlZCBkaWdpdGFsIGlucHV0cyAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjIwMF9SZWFkTW9yZURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlVSU5UIHVpX1BvcnRWYWx1ZSA9IGRhdGFbMF07CisJVUlOVCB1aV9NYXNrID0gMDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsczsKKworCXVpX05vT2ZDaGFubmVscyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJKmRhdGEgPSAoVUlOVCkgaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX0RJR0lUQUxfSVApOworCXN3aXRjaCAodWlfTm9PZkNoYW5uZWxzKSB7CisJY2FzZSAyOgorCQl1aV9NYXNrID0gMzsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdWlfTWFzayA9IDE1OworCQkqZGF0YSA9ICgqZGF0YSA+PiAoNCAqIHVpX1BvcnRWYWx1ZSkpICYgdWlfTWFzazsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiXG5Xcm9uZyBwYXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQlicmVhazsKKwl9CQkJLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9Db25maWdEaWdpdGFsT3V0cHV0IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICB8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgRGlnaXRhbCBPdXRwdXQgU3ViZGV2aWNlLiAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVswXSAgOjE6TWVtb3J5IG9uICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgICAgICAgICAgICAwOk1lbW9yeSBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTIyMDBfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBkYXRhWzBdOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIyMDBfV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZXMgcG9ydCB2YWx1ZSAgVG8gdGhlIHNlbGVjdGVkIHBvcnQgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTIyMDBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXAsIHVpX1RlbXAxOworCVVJTlQgdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gZ2V0IHRoZSBjaGFubmVsCisJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9PUCk7CisKKwl9CQkJLy9pZihkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJZWxzZSB7CisJCXVpX1RlbXAgPSAwOworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoZGF0YVszXSA9PSAwKSB7CisJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgfCB1aV9UZW1wOworCQkJb3V0dyhkYXRhWzBdLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9ESUdJVEFMX09QKTsKKwkJfQkJLy9pZihkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCQljYXNlIDI6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA0OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgODoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxNToKKwkJCQkJZGF0YVswXSA9IGRhdGFbMF0gfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKworCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9PUCk7CisJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQl9CQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCX0JCQkvL2lmKGRhdGFbM109PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzNdID09IDEpIHsKKwkJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDE7CisJCQkJdWlfVGVtcDEgPSAxOworCQkJCXVpX1RlbXAxID0gdWlfVGVtcDEgPDwgdWlfTm9PZkNoYW5uZWw7CisJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIF4gMHhmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX0RJR0lUQUxfT1ApOworCQkJfQkvL2lmKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCQljYXNlIDI6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDM7CisJCQkJCQl1aV9UZW1wMSA9IDM7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgMiAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgNDoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZjsKKwkJCQkJCXVpX1RlbXAxID0gMTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgNCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgODoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZmY7CisJCQkJCQl1aV9UZW1wMSA9IDI1NTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA4ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDggKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMTU6CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMjIwMF9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiAoaW5zbi0+bik7OworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIyMDBfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTIyMDBfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gZ2V0IHRoZSBjaGFubmVsCisJdWlfVGVtcCA9IGRhdGFbMF07CisJKmRhdGEgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9PUCk7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vaWYodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQljYXNlIDI6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiBkYXRhWzFdKSkgJiAzOworCQkJCWJyZWFrOworCisJCQljYXNlIDQ6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiBkYXRhWzFdKSkgJiAxNTsKKwkJCQlicmVhazsKKworCQkJY2FzZSA4OgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICg4ICogZGF0YVsxXSkpICYgMjU1OworCQkJCWJyZWFrOworCisJCQljYXNlIDE1OgorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy9pZih1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vZWxzZWlmKHVpX1RlbXA9PTEpCisJfQkJCS8vZWxzZWlmKHVpX1RlbXA9PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICB8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTIyMDBfQ29uZmlnV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdID09IDApIHsKKwkJLy9EaXNhYmxlIHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MCwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJCUFQQ0kyMjAwX1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQkvL0xvYWRpbmcgdGhlIFJlbG9hZCB2YWx1ZQorCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCQlBUENJMjIwMF9XQVRDSERPR19SRUxPQURfVkFMVUUpOworCQlkYXRhWzFdID0gZGF0YVsxXSA+PiAxNjsKKwkJb3V0dyhkYXRhWzFdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKworCQkJQVBDSTIyMDBfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICsgMik7CisJfQkJCS8vaWYoZGF0YVswXT09MCkKKwllbHNlIHsKKwkJcHJpbnRrKCJcblRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSB3cm9uZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL2Vsc2VpZihkYXRhWzBdPT0wKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKyAvKgorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9TdGFydFN0b3BXcml0ZVdhdGNoZG9nICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKyAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgVGFzayAgICAgICAgICAgICAgOiBTdGFydCAvIFN0b3AgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IE91dHB1dCBQYXJhbWV0ZXJzIDogICAgICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICovCisKK2ludCBpX0FQQ0kyMjAwX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgMDoJCS8vc3RvcCB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsgQVBDSTIyMDBfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CS8vZGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJYnJlYWs7CisJY2FzZSAxOgkJLy9zdGFydCB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAwMDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCQlBUENJMjIwMF9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLy9Tb2Z0d2FyZSB0cmlnZ2VyCisJCW91dHcoMHgwMjAxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKworCQkJQVBDSTIyMDBfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBzd2l0Y2goZGF0YVswXSkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX1JlYWRXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOyAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMjIwMF9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPQorCQlpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKworCQlBUENJMjIwMF9XQVRDSERPR19TVEFUVVMpICYgMHgxOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIyMDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kyMjAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCW91dHcoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9ESUdJVEFMX09QKTsJLy9SRVNFVFMgVEhFIERJR0lUQUwgT1VUUFVUUworCW91dHcoMHgwLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCUFQQ0kyMjAwX1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCW91dHcoMHgwLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCUFQQ0kyMjAwX1dBVENIRE9HX1JFTE9BRF9WQUxVRSk7CisJb3V0dygweDAsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJQVBDSTIyMDBfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICsgMik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMjAwLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMjAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExMTViNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKioqKioqKioqICAgICAgRGVmaW5pdGlvbnMgZm9yIEFQQ0ktMjIwMCBjYXJkICAqKioqKi8KKworLy8gQ2FyZCBTcGVjaWZpYyBpbmZvcm1hdGlvbgorI2RlZmluZSBBUENJMjIwMF9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTViOAorI2RlZmluZSBBUENJMjIwMF9BRERSRVNTX1JBTkdFICAgICAgICAgICAgICAgICAgIDY0CisKKy8vRElHSVRBTCBJTlBVVC1PVVRQVVQgREVGSU5FCisKKyNkZWZpbmUgQVBDSTIyMDBfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgCTQKKyNkZWZpbmUgQVBDSTIyMDBfRElHSVRBTF9JUCAgICAgICAgICAgICAgICAgICAgIDAKKworLy8gVElNRVIgQ09VTlRFUiBXQVRDSERPRyBERUZJTkVTCisKKyNkZWZpbmUgQVBDSTIyMDBfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQVBDSTIyMDBfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kyMjAwX1dBVENIRE9HX1JFTE9BRF9WQUxVRSAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kyMjAwX1dBVENIRE9HX1NUQVRVUyAgICAgICAgICAgICAgICAgICAxNgorCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMjIwMAorCisvL0RpZ2l0YWwgSW5wdXQKK0lOVCBpX0FQQ0kyMjAwX1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMjIwMF9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL0RpZ2l0YWwgT3V0cHV0CitpbnQgaV9BUENJMjIwMF9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kyMjAwX1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kyMjAwX1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vIFRJTUVSCitpbnQgaV9BUENJMjIwMF9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kyMjAwX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTIyMDBfUmVhZFdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9yZXNldAorSU5UIGlfQVBDSTIyMDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlYjhkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYwpAQCAtMCwwICsxLDI2OTcgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmFzc2UgMyAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0zMTIwICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMzEyMC5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6QVBDSTMxMjAgTW9kdWxlLiAgSGFyZHdhcmUgYWJzdHJhY3Rpb24gTGF5ZXIgZm9yIEFQQ0kzMTIwfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURSdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8IAkJIHwgCQkJCQkJICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfAkJCQkJCSAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiaHdkcnZfYXBjaTMxMjAuaCIKK3N0YXRpYyBVSU5UIHVpX1RlbXAgPSAwOworCisvLyBGVU5DVElPTiBERUZJTklUSU9OUworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5BTE9HIElOUFVUIFNVQkRFVklDRSAgIAkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHwKK3wgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ2FsbHMgY2FyZCBzcGVjaWZpYyBmdW5jdGlvbiAgCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgCQkJCQkgICAgICAgICAJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgaTsKKworCWlmICgoZGF0YVswXSAhPSBBUENJMzEyMF9FT0NfTU9ERSkgJiYgKGRhdGFbMF0gIT0gQVBDSTMxMjBfRU9TX01PREUpKQorCQlyZXR1cm4gLTE7CisKKwkvLyBDaGVjayBmb3IgQ29udmVyc2lvbiB0aW1lIHRvIGJlIGFkZGVkID8/CisJZGV2cHJpdi0+dWlfRW9jRW9zQ29udmVyc2lvblRpbWUgPSBkYXRhWzJdOworCisJaWYgKGRhdGFbMF0gPT0gQVBDSTMxMjBfRU9TX01PREUpIHsKKworCQkvL1Rlc3QgdGhlIG51bWJlciBvZiB0aGUgY2hhbm5lbAorCQlmb3IgKGkgPSAwOyBpIDwgZGF0YVszXTsgaSsrKSB7CisKKwkJCWlmIChDUl9DSEFOKGRhdGFbNCArIGldKSA+PSB0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbCkgeworCQkJCXByaW50aygiYmFkIGNoYW5uZWwgbGlzdFxuIik7CisJCQkJcmV0dXJuIC0yOworCQkJfQorCQl9CisKKwkJZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID0gQVBDSTMxMjBfRU9TX01PREU7CisKKwkJaWYgKGRhdGFbMV0pIHsKKwkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRU5BQkxFOworCQl9IGVsc2UKKwkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJLy8gQ29weSBjaGFubmVsIGxpc3QgYW5kIFJhbmdlIExpc3QgdG8gZGV2cHJpdgorCisJCWRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVscyA9IGRhdGFbM107CisJCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHM7IGkrKykgeworCQkJZGV2cHJpdi0+dWlfQWlDaGFubmVsTGlzdFtpXSA9IGRhdGFbNCArIGldOworCQl9CisKKwl9IGVsc2UJCQkvLyBFT0MKKwl7CisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOworCQlpZiAoZGF0YVsxXSkgeworCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9FTkFCTEU7CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJCX0KKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zblJlYWRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgfAorfAkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogIGNhcmQgc3BlY2lmaWMgZnVuY3Rpb24JCQkJCQkJCSB8Cit8CQkJCVJlYWRzIGFuYWxvZyBpbnB1dCBpbiBzeW5jaHJvbm91cyBtb2RlICAgICAgICAgICAgICAgfAorfAkJCSAgRU9DIGFuZCBFT1MgaXMgc2VsZWN0ZWQgYXMgcGVyIGNvbmZpZ3VyZWQgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpZiBubyBjb252ZXJzaW9uIHRpbWUgaXMgc2V0IHVzZXMgZGVmYXVsdCBjb252ZXJzaW9uICAgfAorfAkJCSAgdGltZSAxMCBtaWNyb3NlYy4JCQkJCSAgICAgIAkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuUmVhZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVU0hPUlQgdXNfQ29udmVydFRpbWluZywgdXNfVG1wVmFsdWUsIGk7CisJQllURSBiX1RtcDsKKworCS8vIGZpeCBjb252ZXJ0aW9uIHRpbWUgdG8gMTAgdXMKKwlpZiAoIWRldnByaXYtPnVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lKSB7CisJCXByaW50aygiTm8gdGltZXIwIFZhbHVlIHVzaW5nIDEwIHVzXG4iKTsKKwkJdXNfQ29udmVydFRpbWluZyA9IDEwOworCX0gZWxzZQorCQl1c19Db252ZXJ0VGltaW5nID0gKFVTSE9SVCkgKGRldnByaXYtPnVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lIC8gMTAwMCk7CS8vIG5hbm8gdG8gdXNlY29uZHMKKworCS8vIHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWRBbmFsb2dJbnB1dChkZXYsdXNfQ29udmVydFRpbWluZyxpbnNuLT5uLCZpbnNuLT5jaGFuc3BlYyxkYXRhLGluc24tPnVudXNlZFswXSk7CisKKwkvLyBDbGVhciBzb2Z0d2FyZSByZWdpc3RlcnMKKwlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IDA7CisJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPSAwOworCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gMDsKKy8vICAgICAgICBkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3Rlcj0wOworCisJaWYgKGluc24tPnVudXNlZFswXSA9PSAyMjIpCS8vIHNlY29uZCBpbnNuIHJlYWQKKwl7CisKKwkJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkJZGF0YVtpXSA9IGRldnByaXYtPnVpX0FpUmVhZERhdGFbaV07CisJCX0KKworCX0gZWxzZSB7CisJCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisJCS8vVGVzdGluZyBpZiBib2FyZCBoYXZlIHRoZSBuZXcgUXVhcnR6IGFuZCBjYWxjdWxhdGUgdGhlIHRpbWUgdmFsdWUKKwkJLy90byBzZXQgaW4gdGhlIHRpbWVyCisKKwkJdXNfVG1wVmFsdWUgPQorCQkJKFVTSE9SVCkgaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisKKwkJLy9FTDI1MDgwNDogVGVzdGluZyBpZiBib2FyZCBBUENJMzEyMCBoYXZlIHRoZSBuZXcgUXVhcnR6IG9yIGlmIGl0IGlzIGFuIEFQQ0kzMDAxCisJCWlmICgodXNfVG1wVmFsdWUgJiAweDAwQjApID09IDB4MDBCMAorCQkJfHwgIXN0cmNtcCh0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lLCAiYXBjaTMwMDEiKSkgeworCQkJdXNfQ29udmVydFRpbWluZyA9ICh1c19Db252ZXJ0VGltaW5nICogMikgLSAyOworCQl9IGVsc2UgeworCQkJdXNfQ29udmVydFRpbWluZyA9CisJCQkJKCh1c19Db252ZXJ0VGltaW5nICogMTI5MjYpIC8gMTAwMDApIC0gMTsKKwkJfQorCisJCXVzX1RtcFZhbHVlID0gKFVTSE9SVCkgZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlOworCisJCXN3aXRjaCAodXNfVG1wVmFsdWUpIHsKKworCQljYXNlIEFQQ0kzMTIwX0VPQ19NT0RFOgorCisJCQkvLyBUZXN0aW5nIHRoZSBpbnRlcnJ1cHQgZmxhZyBhbmQgc2V0IHRoZSBFT0MgYml0CisJCQkvLyBDbGVhcnMgdGhlIEZJRk8KKwkJCWludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsKKworCQkJLy8gSW5pdGlhbGl6ZSB0aGUgc2VxdWVuY2UgYXJyYXkKKworCQkJLy9pZiAoIWlfQVBDSTMxMjBfU2V0dXBDaGFubmVsTGlzdChkZXYscywxLGNoYW5saXN0LDApKSAgcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmICghaV9BUENJMzEyMF9TZXR1cENoYW5uZWxMaXN0KGRldiwgcywgMSwKKwkJCQkJJmluc24tPmNoYW5zcGVjLCAwKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJLy9Jbml0aWFsaXplIFRpbWVyIDAgbW9kZSA0CisJCQlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9CisJCQkJKGRldnByaXYtPgorCQkJCWJfVGltZXJTZWxlY3RNb2RlICYgMHhGQykgfAorCQkJCUFQQ0kzMTIwX1RJTUVSXzBfTU9ERV80OworCQkJb3V0YihkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQxKTsKKworCQkJLy8gUmVzZXQgdGhlIHNjYW4gYml0IGFuZCBEaXNhYmxlcyB0aGUgIEVPUywgRE1BLCBFT0MgaW50ZXJydXB0CisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1NDQU47CisKKwkJCWlmIChkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKworCQkJCS8vRGlzYWJsZXMgdGhlIEVPUyxETUEgYW5kIGVuYWJsZXMgdGhlIEVPQyBpbnRlcnJ1cHQKKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJCShkZXZwcml2LT4KKwkJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCQlBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQpIHwKKwkJCQkJQVBDSTMxMjBfRU5BQkxFX0VPQ19JTlQ7CisJCQkJaW53KGRldnByaXYtPmlvYmFzZSk7CisKKwkJCX0gZWxzZSB7CisJCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCQlkZXZwcml2LT4KKwkJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCQlBUENJMzEyMF9ESVNBQkxFX0FMTF9JTlRFUlJVUFRfV0lUSE9VVF9USU1FUjsKKwkJCX0KKworCQkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJCS8vIFNldHMgZ2F0ZSAwCisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQkJKGRldnByaXYtPgorCQkJCXVzX091dHB1dFJlZ2lzdGVyICYgQVBDSTMxMjBfQ0xFQVJfUEFfUFIpIHwKKwkJCQlBUENJMzEyMF9FTkFCTEVfVElNRVIwOworCQkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCQkJLy8gU2VsZWN0IFRpbWVyIDAKKwkJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQ7CisJCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQkJLy9TZXQgdGhlIGNvbnZlcnRpb24gdGltZQorCQkJb3V0dyh1c19Db252ZXJ0VGltaW5nLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkJdXNfVG1wVmFsdWUgPQorCQkJCShVU0hPUlQpIGludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisKKwkJCWlmIChkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9PSBBUENJMzEyMF9ESVNBQkxFKSB7CisKKwkJCQlkbyB7CisJCQkJCS8vIFdhaXRpbmcgZm9yIHRoZSBlbmQgb2YgY29udmVyc2lvbgorCQkJCQl1c19UbXBWYWx1ZSA9CisJCQkJCQlpbncoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kzMTIwX1JEX1NUQVRVUyk7CisJCQkJfSB3aGlsZSAoKHVzX1RtcFZhbHVlICYgQVBDSTMxMjBfRU9DKSA9PQorCQkJCQlBUENJMzEyMF9FT0MpOworCisJCQkJLy9SZWFkIHRoZSByZXN1bHQgaW4gRklGTyAgYW5kIHB1dCBpdCBpbiBpbnNuIGRhdGEgcG9pbnRlcgorCQkJCXVzX1RtcFZhbHVlID0gaW53KGRldnByaXYtPmlvYmFzZSArIDApOworCQkJCSpkYXRhID0gdXNfVG1wVmFsdWU7CisKKwkJCQlpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkVTRVRfRklGTyk7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgQVBDSTMxMjBfRU9TX01PREU6CisKKwkJCWludyhkZXZwcml2LT5pb2Jhc2UpOworCQkJLy8gQ2xlYXJzIHRoZSBGSUZPCisJCQlpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkVTRVRfRklGTyk7CisJCQkvLyBjbGVhciBQQSBQUiAgYW5kIGRpc2FibGUgdGltZXIgMAorCisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQkJKGRldnByaXYtPgorCQkJCXVzX091dHB1dFJlZ2lzdGVyICYgQVBDSTMxMjBfQ0xFQVJfUEFfUFIpIHwKKwkJCQlBUENJMzEyMF9ESVNBQkxFX1RJTUVSMDsKKworCQkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCQkJaWYgKCFpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3QoZGV2LCBzLAorCQkJCQlkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMsCisJCQkJCWRldnByaXYtPnVpX0FpQ2hhbm5lbExpc3QsIDApKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQkvL0luaXRpYWxpemUgVGltZXIgMCBtb2RlIDIKKwkJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweEZDKSB8CisJCQkJQVBDSTMxMjBfVElNRVJfMF9NT0RFXzI7CisJCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDEpOworCisJCQkvL1NlbGVjdCBUaW1lciAwCisJCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMF9XT1JEOworCQkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisKKwkJCS8vU2V0IHRoZSBjb252ZXJ0aW9uIHRpbWUKKwkJCW91dHcodXNfQ29udmVydFRpbWluZywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisKKwkJCS8vU2V0IHRoZSBzY2FuIGJpdAorCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyIHwgQVBDSTMxMjBfRU5BQkxFX1NDQU47CisJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkJLy9JZiBJbnRlcnJ1cHQgZnVuY3Rpb24gaXMgbG9hZGVkCisJCQlpZiAoZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisJCQkJLy9EaXNhYmxlcyB0aGUgRU9DLERNQSBhbmQgZW5hYmxlcyB0aGUgRU9TIGludGVycnVwdAorCQkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQkJKGRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJCUFQQ0kzMTIwX0RJU0FCTEVfRU9DX0lOVCkgfAorCQkJCQlBUENJMzEyMF9FTkFCTEVfRU9TX0lOVDsKKwkJCQlpbncoZGV2cHJpdi0+aW9iYXNlKTsKKworCQkJfSBlbHNlCisJCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCQlkZXZwcml2LT4KKwkJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCQlBUENJMzEyMF9ESVNBQkxFX0FMTF9JTlRFUlJVUFRfV0lUSE9VVF9USU1FUjsKKworCQkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJCWludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworCisJCQkvL1NldHMgZ2F0ZSAwCisKKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQl1c19PdXRwdXRSZWdpc3RlciB8IEFQQ0kzMTIwX0VOQUJMRV9USU1FUjA7CisJCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJCQkvL1N0YXJ0IGNvbnZlcnNpb24KKwkJCW91dHcoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfU1RBUlRfQ09OVkVSU0lPTik7CisKKwkJCS8vV2FpdGluZyBvZiBlbmQgb2YgY29udmVydGlvbiBpZiBpbnRlcnJ1cHQgaXMgbm90IGluc3RhbGxlZAorCQkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0RJU0FCTEUpIHsKKwkJCQkvL1dhaXRpbmcgdGhlIGVuZCBvZiBjb252ZXJ0aW9uCisJCQkJZG8geworCQkJCQl1c19UbXBWYWx1ZSA9CisJCQkJCQlpbncoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kzMTIwX1JEX1NUQVRVUyk7CisJCQkJfQorCQkJCXdoaWxlICgodXNfVG1wVmFsdWUgJiBBUENJMzEyMF9FT1MpICE9CisJCQkJCUFQQ0kzMTIwX0VPUyk7CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOworCQkJCQlpKyspIHsKKwkJCQkJLy9SZWFkIHRoZSByZXN1bHQgaW4gRklGTyBhbmQgd3JpdGUgdGhlbSBpbiBzaGFyZWQgbWVtb3J5CisJCQkJCXVzX1RtcFZhbHVlID0gaW53KGRldnByaXYtPmlvYmFzZSk7CisJCQkJCWRhdGFbaV0gPSAoVUlOVCkgdXNfVG1wVmFsdWU7CisJCQkJfQorCisJCQkJZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID0gQVBDSTMxMjBfRU9DX01PREU7CS8vIFJlc3RvcmUgZGVmYXVsdHMuCisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJpbnB1dHMgd3JvbmdcbiIpOworCisJCX0KKwkJZGV2cHJpdi0+dWlfRW9jRW9zQ29udmVyc2lvblRpbWUgPSAwOwkvLyByZSBpbml0aWFsaXppbmcgdGhlIHZhcmlhYmxlOworCX0KKworCXJldHVybiBpbnNuLT5uOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHwKK3wgCQkJCQkJCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFN0b3BzIEN5Y2xpYyBhY3F1aXNpdGlvbiAgCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6MCAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8vIERpc2FibGUgQTJQIEZpZm8gd3JpdGUgYW5kIEFNV0VOIHNpZ25hbAorCW91dHcoMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDQpOworCisJLy9EaXNhYmxlIEJ1cyBNYXN0ZXIgQUREIE9OCisJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCW91dHcoMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCW91dHcoQVBDSTMxMjBfQUREX09OX0FHQ1NUU19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJb3V0dygwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkvL0Rpc2FibGUgQlVTIE1hc3RlciBQQ0kKKwlvdXRsKDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX01DU1IpOworCisJLy9vdXRsKGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MrQU1DQ19PUF9SRUdfSU5UQ1NSKSYofkFJTlRfV1JJVEVfQ09NUEwpLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MrQU1DQ19PUF9SRUdfSU5UQ1NSKTsgICAgLy8gc3RvcCBhbWNjIGlycXMKKwkvL291dGwoaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYytBTUNDX09QX1JFR19NQ1NSKSYofkVOX0EyUF9UUkFOU0ZFUlMpLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MrQU1DQ19PUF9SRUdfTUNTUik7IC8vIHN0b3AgRE1BCisKKwkvL0Rpc2FibGUgZXh0IHRyaWdnZXIKKwlpX0FQQ0kzMTIwX0V4dHRyaWdEaXNhYmxlKGRldik7CisKKwlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9IDA7CisJLy9zdG9wICBjb3VudGVycworCW91dHcoZGV2cHJpdi0+CisJCXVzX091dHB1dFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9USU1FUjAgJgorCQlBUENJMzEyMF9ESVNBQkxFX1RJTUVSMSwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCW91dHcoQVBDSTMxMjBfRElTQUJMRV9BTExfVElNRVIsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkvL0RJU0FCTEVfQUxMX0lOVEVSUlVQVAorCW91dGIoQVBDSTMxMjBfRElTQUJMRV9BTExfSU5URVJSVVBULAorCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKwkvL0ZsdXNoIEZJRk8KKwlpbmIoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsKKwlpbncoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworCWRldnByaXYtPnVpX0FpQWN0dWFsU2NhbiA9IDA7CisJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuUG9zaXRpb24gPSAwOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisJZGV2cHJpdi0+dWlfQWlCdWZmZXJQdHIgPSAwOworCWRldnByaXYtPmJfQWlDb250aW51b3VzID0gMDsKKwlkZXZwcml2LT51aV9EbWFBY3R1YWxCdWZmZXIgPSAwOworCisJZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRElTQUJMRTsKKwlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT0NfTU9ERTsKKwlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJaV9BUENJMzEyMF9SZXNldChkZXYpOworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXZ8Cit8CQkJLHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfY21kICpjbWQpCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogVGVzdCB2YWxpZGl0eSBmb3IgYSBjb21tYW5kIGZvciBjeWNsaWMgYW5sb2cgaW5wdXQgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgIGFjcXVpc2l0aW9uICAJCQkJCQkgICAgIAkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDowICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CQkvLyBkaXZpc29yMSxkaXZpc29yMjsKKworCS8vIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8vc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkgeworCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvLyBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCS8vIFRlc3QgRGVsYXkgdGltaW5nCisJeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IHRoaXNfYm9hcmQtPnVpX01pbkRlbGF5dGltZU5zKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdGhpc19ib2FyZC0+dWlfTWluRGVsYXl0aW1lTnM7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCS8vIFRlc3QgQWNxdWlzaXRpb24gdGltaW5nCisJeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQlpZiAoKGNtZC0+Y29udmVydF9hcmcpCisJCQkJJiYgKGNtZC0+Y29udmVydF9hcmcgPAorCQkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcykpIHsKKwkJCQljbWQtPmNvbnZlcnRfYXJnID0KKwkJCQkJdGhpc19ib2FyZC0+dWlfTWluQWNxdWlzaXRpb250aW1lTnM7CisJCQkJZXJyKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8CisJCQkJdGhpc19ib2FyZC0+dWlfTWluQWNxdWlzaXRpb250aW1lTnMpIHsKKwkJCQljbWQtPmNvbnZlcnRfYXJnID0KKwkJCQkJdGhpc19ib2FyZC0+dWlfTWluQWNxdWlzaXRpb250aW1lTnM7CisJCQkJZXJyKys7CisKKwkJCX0KKwkJfQorCX0KKworCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gdGhpc19ib2FyZC0+aV9BaUNoYW5uZWxMaXN0KSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gdGhpc19ib2FyZC0+aV9BaUNoYW5uZWxMaXN0OworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLy8gVFJJR19OT05FCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8vIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMKKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCisJCQljbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogaW50IGlfQVBDSTMxMjBfQ29tbWFuZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICB8Cit8CQkJCQkJCQkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERvZXMgYXN5bmNocm9ub3VzIGFjcXVpc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbW9kZSAxIG9yIDIuCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0NvbW1hbmRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCS8vbG9hZGluZyBwcml2YXRlIHN0cnVjdHVyZSB3aXRoIGNtZCBzdHJ1Y3R1cmUgaW5wdXRzCisJZGV2cHJpdi0+dWlfQWlGbGFncyA9IGNtZC0+ZmxhZ3M7CisJZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzID0gY21kLT5jaGFubGlzdF9sZW47CisJZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoID0gY21kLT5zY2FuX2VuZF9hcmc7CisJZGV2cHJpdi0+cHVpX0FpQ2hhbm5lbExpc3QgPSBjbWQtPmNoYW5saXN0OworCisJLy9VUERBVEUtMC43LjU3LT4wLjcuNjhkZXZwcml2LT5BaURhdGE9cy0+YXN5bmMtPmRhdGE7CisJZGV2cHJpdi0+QWlEYXRhID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZjsKKwkvL1VQREFURS0wLjcuNTctPjAuNy42OGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aD1zLT5hc3luYy0+ZGF0YV9sZW47CisJZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6OworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgPSBjbWQtPnN0b3BfYXJnOworCX0gZWxzZSB7CisJCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9IDA7CisJfQorCisJZGV2cHJpdi0+dWlfQWlUaW1lcjAgPSAwOwkvLyB2YXJpYWJsZXMgY2hhbmdlZCB0byB0aW1lcjAsdGltZXIxCisJZGV2cHJpdi0+dWlfQWlUaW1lcjEgPSAwOworCWlmICgoZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zID09IDApIHx8IChkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgPT0gLTEpKQorCQlkZXZwcml2LT5iX0FpQ29udGludW91cyA9IDE7CS8vIHVzZXIgd2FudCBuZXZlcmVuZGluZyBhbmFsb2cgYWNxdWlzaXRpb24KKwkvLyBzdG9wcGVkIHVzaW5nIGNhbmNlbAorCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKQorCQlkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPSBBUENJMzEyMF9FTkFCTEU7CisJZWxzZQorCQlkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPSBBUENJMzEyMF9ESVNBQkxFOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJLy8gbW9kZSAxIG9yIDMKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkJLy8gbW9kZSAxCisKKwkJCWRldnByaXYtPnVpX0FpVGltZXIwID0gY21kLT5jb252ZXJ0X2FyZzsJLy8gdGltZXIgY29uc3RhbnQgaW4gbmFubyBzZWNvbmRzCisJCQkvL3JldHVybiB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0NvbW1hbmRBbmFsb2dJbnB1dCgxLGRldixzKTsKKwkJCXJldHVybiBpX0FQQ0kzMTIwX0N5Y2xpY0FuYWxvZ0lucHV0KDEsIGRldiwgcyk7CisJCX0KKworCX0KKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJJiYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikpIHsKKwkJLy8gbW9kZSAyCisJCWRldnByaXYtPnVpX0FpVGltZXIxID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJZGV2cHJpdi0+dWlfQWlUaW1lcjAgPSBjbWQtPmNvbnZlcnRfYXJnOwkvLyB2YXJpYWJsZSBjaGFuZ2VkIHRpbWVyMiB0byB0aW1lcjAKKwkJLy9yZXR1cm4gdGhpc19ib2FyZC0+aV9od2Rydl9Db21tYW5kQW5hbG9nSW5wdXQoMixkZXYscyk7CisJCXJldHVybiBpX0FQQ0kzMTIwX0N5Y2xpY0FuYWxvZ0lucHV0KDIsIGRldiwgcyk7CisJfQorCXJldHVybiAtMTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6ICBpbnQgaV9BUENJMzEyMF9DeWNsaWNBbmFsb2dJbnB1dChpbnQgbW9kZSwgICAgICAgICAgICB8Cit8CQkgCSAgIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogVGhpcyBpcyB1c2VkIGZvciBhbmFsb2cgaW5wdXQgY3ljbGljIGFjcXVpc2l0aW9uICAgICAgIHwKK3wJCQkgIFBlcmZvcm1zIHRoZSBjb21tYW5kIG9wZXJhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICBJZiBETUEgaXMgY29uZmlndXJlZCBkb2VzIERNQSBpbml0aWFsaXphdGlvbiAgICAgICAgICAgfAorfAkJCSAgb3RoZXJ3aXNlIGRvZXMgdGhlIGFjcXVpc2l0aW9uIHdpdGggRU9TIGludGVycnVwdC4gICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0N5Y2xpY0FuYWxvZ0lucHV0KGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJQllURSBiX1RtcDsKKwlVSU5UIHVpX1RtcCwgdWlfRGVsYXlUaW1pbmcgPSAwLCB1aV9UaW1lclZhbHVlMSA9IDAsIGRtYWxlbjAgPQorCQkwLCBkbWFsZW4xID0gMCwgdWlfVGltZXJWYWx1ZTIgPQorCQkwLCB1aV9UaW1lclZhbHVlMCwgdWlfQ29udmVydFRpbWluZzsKKwlVU0hPUlQgdXNfVG1wVmFsdWU7CisKKwkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCS8vZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uPUFQQ0kzMTIwX0VOQUJMRTsKKwkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKworCS8qKioqKioqKioqKioqKioqKioqLworCS8qIFJlc2V0cyB0aGUgRklGTyAqLworCS8qKioqKioqKioqKioqKioqKioqLworCWluYihkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JFU0VUX0ZJRk8pOworCisJLy9CRUdJTiBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwkvL2ludyhkZXYtPmlvYmFzZStBUENJMzEyMF9SRF9TVEFUVVMpOworCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBBY3F1aXNpdGlvbiBpbml0aWFsaXplZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CRUdJTiBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9FTkFCTEU7CisJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisKKwkvLyBjbGVhciBzb2Z0d2FyZSAgcmVnaXN0ZXJzCisJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSAwOworCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gMDsKKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IDA7CisJLy9kZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3Rlcj0wOworCisJLy9DT01NRU5UIEpLIDA3LjA1LjA0OiBGb2xsb3dpbmdzIGNhbGxzIGFyZSBpbiBpX0FQQ0kzMTIwX1N0YXJ0QW5hbG9nSW5wdXRBY3F1aXNpdGlvbgorCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBDbGVhciBUaW1lciBXcml0ZSBUQyBJTlQgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGwoQVBDSTMxMjBfQ0xFQVJfV1JJVEVfVENfSU5ULAorCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMzEyMF9BTUNDX09QX1JFR19JTlRDU1IpOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIENsZWFycyB0aGUgdGltZXIgc3RhdHVzIHJlZ2lzdGVyICovCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJLy9pbncoZGV2LT5pb2Jhc2UrQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKwlpbmIoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9TVEFUVVNfUkVHSVNURVIpOworCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGlzYWJsZXMgQWxsIFRpbWVyICAgICAqLworCS8qIFNldHMgUFIgYW5kIFBBIHRvIDAgICAgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9IGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyICYKKwkJQVBDSTMxMjBfRElTQUJMRV9USU1FUjAgJgorCQlBUENJMzEyMF9ESVNBQkxFX1RJTUVSMSAmIEFQQ0kzMTIwX0NMRUFSX1BBX1BSOworCisJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworICAgLyoqKioqKioqKioqKioqKioqKiovCisJLyogUmVzZXRzIHRoZSBGSUZPICovCisgICAvKioqKioqKioqKioqKioqKioqKi8KKwkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsKKwkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKworCWRldnByaXYtPnVpX0FpQWN0dWFsU2NhbiA9IDA7CisJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuUG9zaXRpb24gPSAwOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisJZGV2cHJpdi0+dWlfQWlCdWZmZXJQdHIgPSAwOworCWRldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlciA9IDA7CisKKwkvLyB2YWx1ZSBmb3IgdGltZXIyICBtaW51cyAtMiBoYXMgdG8gYmUgZG9uZSAuLi4uLmR1bm5vIHk/PworCXVpX1RpbWVyVmFsdWUyID0gZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zIC0gMjsKKwl1aV9Db252ZXJ0VGltaW5nID0gZGV2cHJpdi0+dWlfQWlUaW1lcjA7CisKKwlpZiAobW9kZSA9PSAyKQorCQl1aV9EZWxheVRpbWluZyA9IGRldnByaXYtPnVpX0FpVGltZXIxOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBJbml0aWFsaXplcyB0aGUgc2VxdWVuY2UgYXJyYXkgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWlmICghaV9BUENJMzEyMF9TZXR1cENoYW5uZWxMaXN0KGRldiwgcywgZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzLAorCQkJZGV2cHJpdi0+cHVpX0FpQ2hhbm5lbExpc3QsIDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVzX1RtcFZhbHVlID0gKFVTSE9SVCkgaW53KGRldi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKy8qKiogRUwyNDEwMDMgOiBhZGQgdGhpcyBzZWN0aW9uIGluIGNvbW1lbnQgYmVjYXVzZSBmbG9hdHMgbXVzdCBub3QgYmUgdXNlZAorCSBpZigodXNfVG1wVmFsdWUgJiAweDAwQjApPT0weDAwQjApCisJIHsKKyAgICAgICAgICAgZl9Db252ZXJ0VmFsdWU9KCgoZmxvYXQpdWlfQ29udmVydFRpbWluZyAqIDAuMDAyKSAtIDIpOworCQl1aV9UaW1lclZhbHVlMD0oVUlOVClmX0NvbnZlcnRWYWx1ZTsKKwkJaWYgKG1vZGU9PTIpCisJCXsKKwkJCWZfRGVsYXlWYWx1ZSAgICAgPSAoKChmbG9hdCl1aV9EZWxheVRpbWluZyAqIDAuMDAwMDIpIC0gMik7CisJCQl1aV9UaW1lclZhbHVlMSAgPSAgIChVSU5UKSBmX0RlbGF5VmFsdWU7CisJCX0KKwkgfQorICAgCSBlbHNlCisJIHsKKwkJZl9Db252ZXJ0VmFsdWU9KCgoZmxvYXQpdWlfQ29udmVydFRpbWluZyAqIDAuMDAxMjkyNikgLSAxKTsKKwkJdWlfVGltZXJWYWx1ZTA9KFVJTlQpZl9Db252ZXJ0VmFsdWU7CisJCWlmIChtb2RlID09IDIpCisJCXsKKwkJICAgICBmX0RlbGF5VmFsdWUgICAgID0gKCgoZmxvYXQpdWlfRGVsYXlUaW1pbmcgKiAwLjAwMDAxMjkyNikgLSAxKTsKKwkJICAgICB1aV9UaW1lclZhbHVlMSAgPSAgIChVSU5UKSBmX0RlbGF5VmFsdWU7CisJCX0KKwl9CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiogRUwyNDEwMDMgQmVnaW4gOiBhZGQgdGhpcyBzZWN0aW9uIHRvIHJlcGxhY2UgZmxvYXRzIGNhbGN1bGF0aW9uIGJ5IGludGVnZXIgY2FsY3VsYXRpb25zICoqLworCS8vRUwyNTA4MDQ6IFRlc3RpbmcgaWYgYm9hcmQgQVBDSTMxMjAgaGF2ZSB0aGUgbmV3IFF1YXJ0eiBvciBpZiBpdCBpcyBhbiBBUENJMzAwMQorCWlmICgodXNfVG1wVmFsdWUgJiAweDAwQjApID09IDB4MDBCMAorCQl8fCAhc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMzAwMSIpKSB7CisJCXVpX1RpbWVyVmFsdWUwID0gdWlfQ29udmVydFRpbWluZyAqIDIgLSAyMDAwOworCQl1aV9UaW1lclZhbHVlMCA9IHVpX1RpbWVyVmFsdWUwIC8gMTAwMDsKKworCQlpZiAobW9kZSA9PSAyKSB7CisJCQl1aV9EZWxheVRpbWluZyA9IHVpX0RlbGF5VGltaW5nIC8gMTAwMDsKKwkJCXVpX1RpbWVyVmFsdWUxID0gdWlfRGVsYXlUaW1pbmcgKiAyIC0gMjAwOworCQkJdWlfVGltZXJWYWx1ZTEgPSB1aV9UaW1lclZhbHVlMSAvIDEwMDsKKwkJfQorCX0gZWxzZSB7CisJCXVpX0NvbnZlcnRUaW1pbmcgPSB1aV9Db252ZXJ0VGltaW5nIC8gMTAwMDsKKwkJdWlfVGltZXJWYWx1ZTAgPSB1aV9Db252ZXJ0VGltaW5nICogMTI5MjYgLSAxMDAwMDsKKwkJdWlfVGltZXJWYWx1ZTAgPSB1aV9UaW1lclZhbHVlMCAvIDEwMDAwOworCisJCWlmIChtb2RlID09IDIpIHsKKwkJCXVpX0RlbGF5VGltaW5nID0gdWlfRGVsYXlUaW1pbmcgLyAxMDAwOworCQkJdWlfVGltZXJWYWx1ZTEgPSB1aV9EZWxheVRpbWluZyAqIDEyOTI2IC0gMTsKKwkJCXVpX1RpbWVyVmFsdWUxID0gdWlfVGltZXJWYWx1ZTEgLyAxMDAwMDAwOworCQl9CisJfQorLyoqKiBFTDI0MTAwMyBFbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJaV9BUENJMzEyMF9FeHR0cmlnRW5hYmxlKGRldik7CS8vIGFjdGl2YXRlIEVYVCB0cmlnZ2VyCisJfQorCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToKKwkJLy8gaW5pdCB0aW1lcjAgaW4gbW9kZSAyCisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCShkZXZwcml2LT4KKwkJCWJfVGltZXJTZWxlY3RNb2RlICYgMHhGQykgfCBBUENJMzEyMF9USU1FUl8wX01PREVfMjsKKwkJb3V0YihkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJLy9TZWxlY3QgVGltZXIgMAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKwkJLy9TZXQgdGhlIGNvbnZlcnRpb24gdGltZQorCQlvdXR3KCgoVVNIT1JUKSB1aV9UaW1lclZhbHVlMCksCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCS8vIGluaXQgdGltZXIxIGluIG1vZGUgMgorCQlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9CisJCQkoZGV2cHJpdi0+CisJCQliX1RpbWVyU2VsZWN0TW9kZSAmIDB4RjMpIHwgQVBDSTMxMjBfVElNRVJfMV9NT0RFXzI7CisJCW91dGIoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDEpOworCisJCS8vU2VsZWN0IFRpbWVyIDEKKwkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8xX1dPUkQ7CisJCW91dGIoYl9UbXAsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisJCS8vU2V0IHRoZSBjb252ZXJ0aW9uIHRpbWUKKwkJb3V0dygoKFVTSE9SVCkgdWlfVGltZXJWYWx1ZTEpLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisKKwkJLy8gaW5pdCB0aW1lcjAgaW4gbW9kZSAyCisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCShkZXZwcml2LT4KKwkJCWJfVGltZXJTZWxlY3RNb2RlICYgMHhGQykgfCBBUENJMzEyMF9USU1FUl8wX01PREVfMjsKKwkJb3V0YihkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJLy9TZWxlY3QgVGltZXIgMAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQkvL1NldCB0aGUgY29udmVydGlvbiB0aW1lCisJCW91dHcoKChVU0hPUlQpIHVpX1RpbWVyVmFsdWUwKSwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCQlicmVhazsKKworCX0KKwkvLyAgICMjIyMjIyMjIyNjb21tb24gZm9yIGFsbCBtb2RlcyMjIyMjIyMjIyMjIyMjIyMjCisKKwkvKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQ2xlYXJzIHRoZSBTQ0FOIGJpdCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCS8vZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXI9ZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgfCBBUENJMzEyMF9ESVNBQkxFX1NDQU47CisJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPSBkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCUFQQ0kzMTIwX0RJU0FCTEVfU0NBTjsKKwkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCS8vIElmIERNQSBpcyBkaXNhYmxlZAorCWlmIChkZXZwcml2LT51c19Vc2VEbWEgPT0gQVBDSTMxMjBfRElTQUJMRSkgeworCQkvLyBkaXNhYmxlIEVPQyBhbmQgZW5hYmxlIEVPUworCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT1NfTU9ERTsKKwkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9FTkFCTEU7CisKKwkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJKGRldnByaXYtPgorCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX0VPQ19JTlQpIHwKKwkJCUFQQ0kzMTIwX0VOQUJMRV9FT1NfSU5UOworCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJaWYgKCFkZXZwcml2LT5iX0FpQ29udGludW91cykgeworCQkJLy8gY29uZmlndXJlIFRpbWVyMiBGb3IgY291bnRpbmcgIEVPUworCQkJLy9SZXNldCBnYXRlIDIgb2YgVGltZXIgMiB0byBkaXNhYmxlIGl0IChTZXQgQml0IEQxNCB0byAwKQorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCXVzX091dHB1dFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9USU1FUjI7CisJCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkJCS8vIERJU0FCTEUgVElNRVIgSU5URVJSVVBUCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfSU5UICYgMHhFRjsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJCS8vKDEpIEluaXQgdGltZXIgMiBpbiBtb2RlIDAgYW5kIHdyaXRlIHRpbWVyIHZhbHVlCisJCQlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9CisJCQkJKGRldnByaXYtPgorCQkJCWJfVGltZXJTZWxlY3RNb2RlICYgMHgwRikgfAorCQkJCUFQQ0kzMTIwX1RJTUVSXzJfTU9ERV8wOworCQkJb3V0YihkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDEpOworCisJCQkvL1dyaXRpbmcgTE9XIFdPUkQKKwkJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0xPV19XT1JEOworCQkJb3V0YihiX1RtcCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKwkJCW91dHcoTE9XT1JEKHVpX1RpbWVyVmFsdWUyKSwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkJLy9Xcml0aW5nIEhJR0ggV09SRAorCQkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfSElHSF9XT1JEOworCQkJb3V0YihiX1RtcCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKwkJCW91dHcoSElXT1JEKHVpX1RpbWVyVmFsdWUyKSwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkJLy8oMikgUmVzZXQgRkNfVElNRVIgQklUICBDbGVhcmluZyB0aW1lciBzdGF0dXMgcmVnaXN0ZXIKKwkJCWluYihkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJCQkvLyBlbmFibGUgdGltZXIgY291bnRlciBhbmQgZGlzYWJsZSB3YXRjaCBkb2cKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgfAorCQkJCUFQQ0kzMTIwX0VOQUJMRV9USU1FUl9DT1VOVEVSKSAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9XQVRDSERPRzsKKwkJCS8vIHNlbGVjdCBFT1MgY2xvY2sgaW5wdXQgZm9yIHRpbWVyIDIKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciB8CisJCQkJQVBDSTMxMjBfVElNRVIyX1NFTEVDVF9FT1M7CisJCQkvLyBFbmFibGUgdGltZXIyICBpbnRlcnJ1cHQKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1RJTUVSX0lOVDsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisJCQlkZXZwcml2LT5iX1RpbWVyMk1vZGUgPSBBUENJMzEyMF9DT1VOVEVSOworCQkJZGV2cHJpdi0+Yl9UaW1lcjJJbnRlcnJ1cHQgPSBBUENJMzEyMF9FTkFCTEU7CisJCX0KKwl9IGVsc2UgeworCQkvLyBJZiBETUEgRW5hYmxlZAorCQkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCQkvL2ludyhkZXYtPmlvYmFzZSswKTsvLyByZXNldCBFT0MgYml0CisJCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9ETUFfTU9ERTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGlzYWJsZXMgdGhlIEVPQywgRU9TIGludGVycnVwdCAgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0gZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UICYgQVBDSTMxMjBfRElTQUJMRV9FT1NfSU5UOworCisJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQlkbWFsZW4wID0gZGV2cHJpdi0+dWlfRG1hQnVmZmVyU2l6ZVswXTsKKwkJZG1hbGVuMSA9IGRldnByaXYtPnVpX0RtYUJ1ZmZlclNpemVbMV07CisKKwkJaWYgKCFkZXZwcml2LT5iX0FpQ29udGludW91cykgeworCisJCQlpZiAoZG1hbGVuMCA+IChkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgKiBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyKSkgewkvLyBtdXN0IHdlIGZpbGwgZnVsbCBmaXJzdCBidWZmZXI/CisJCQkJZG1hbGVuMCA9CisJCQkJCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyAqCisJCQkJCWRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDI7CisJCQl9IGVsc2UgaWYgKGRtYWxlbjEgPiAoZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zICogZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoICogMiAtIGRtYWxlbjApKQkvLyBhbmQgbXVzdCB3ZSBmaWxsIGZ1bGwgc2Vjb25kIGJ1ZmZlciB3aGVuIGZpcnN0IGlzIG9uY2UgZmlsbGVkPworCQkJCWRtYWxlbjEgPQorCQkJCQlkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgKgorCQkJCQlkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyIC0gZG1hbGVuMDsKKwkJfQorCisJCWlmIChkZXZwcml2LT51aV9BaUZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQkJLy8gZG9uJ3Qgd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/CisJCQlpZiAoZG1hbGVuMCA+IChkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyKSkgeworCQkJCWRtYWxlbjAgPSBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyOworCQkJCWlmIChkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggJiAxKQorCQkJCQlkbWFsZW4wICs9IDI7CisJCQl9CisJCQlpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyKSkgeworCQkJCWRtYWxlbjEgPSBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyOworCQkJCWlmIChkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggJiAxKQorCQkJCQlkbWFsZW4xIC09IDI7CisJCQkJaWYgKGRtYWxlbjEgPCA0KQorCQkJCQlkbWFsZW4xID0gNDsKKwkJCX0KKwkJfSBlbHNlIHsJLy8gaXNuJ3Qgb3V0cHV0IGJ1ZmYgc21hbGxlciB0aGF0IG91ciBETUEgYnVmZj8KKwkJCWlmIChkbWFsZW4wID4gKGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCkpIHsKKwkJCQlkbWFsZW4wID0gZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoOworCQkJfQorCQkJaWYgKGRtYWxlbjEgPiAoZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoKSkgeworCQkJCWRtYWxlbjEgPSBkZXZwcml2LT51aV9BaURhdGFMZW5ndGg7CisJCQl9CisJCX0KKwkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVswXSA9IGRtYWxlbjA7CisJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMV0gPSBkbWFsZW4xOworCisJCS8vSW5pdGlhbGl6ZSBETUEKKworCQkvLyBTZXQgVHJhbnNmZXIgY291bnQgZW5hYmxlIGJpdCBhbmQgQTJQX2ZpZm8gcmVzZXQgYml0IGluIEFHQ1NUUyByZWdpc3RlcgorCQkvLzEKKwkJdWlfVG1wID0gQUdDU1RTX1RDX0VOQUJMRSB8IEFHQ1NUU19SRVNFVF9BMlBfRklGTzsKKwkJb3V0bCh1aV9UbXAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX0FHQ1NUUyk7CisKKwkJLy8gY2hhbmdlZCAgc2luY2UgMTYgYml0IGludGVyZmFjZSBmb3IgYWRkIG9uCisJCS8qKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEVOQUJMRSBCVVMgTUFTVEVSICovCisJCS8qKioqKioqKioqKioqKioqKioqKiovCisJCW91dHcoQVBDSTMxMjBfQUREX09OX0FHQ1NUU19MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhBUENJMzEyMF9FTkFCTEVfVFJBTlNGRVJfQUREX09OX0xPVywKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fSElHSCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKworCQkvLyBUTyBWRVJJRklFRAorCQkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCQlvdXR3KDB4MTAwMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCQkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKworCQkvLzIgIE5vIGNoYW5nZQorCQkvLyBBMlAgRklGTyBNQU5BR0VNRU5UCisJCS8vIEEyUCBmaWZvIHJlc2V0ICAmIHRyYW5zZmVyIGNvbnRyb2wgZW5hYmxlCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEEyUCBGSUZPIE1BTkFHRU1FTlQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0bChBUENJMzEyMF9BMlBfRklGT19NQU5BR0VNRU5ULCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJQVBDSTMxMjBfQU1DQ19PUF9NQ1NSKTsKKworCQkvLzMKKwkJLy9iZWdpbm5pbmcgYWRkcmVzcyBvZiBkbWEgYnVmCisJCS8vVGhlIDMyIGJpdCBhZGRyZXNzIG9mIGRtYSBidWZmZXIgaXMgY29udmVydGVkIGludG8gdHdvIDE2IGJpdCBhZGRyZXNzZXMKKwkJLy8gQ2FuIGRvbmUgYnkgdXNpbmcgX2F0dGFjaCBhbmQgcHV0IGludG8gaW50byBhbiBhcnJheQorCQkvLyBhcnJheSB1c2VkIG1heSBiZSBmb3IgZGlmZmVybmV0IHBhZ2VzCisKKwkJLy8gRE1BIFN0YXJ0IEFkcmVzcyBMb3cKKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdBUl9MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dygoZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbMF0gJiAweEZGRkYpLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRE1BIFN0YXJ0IEFkcmVzcyBIaWdoICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdBUl9ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoKGRldnByaXYtPnVsX0RtYUJ1ZmZlckh3WzBdIC8gNjU1MzYpLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCS8vNAorCQkvLyBhbW91bnQgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJlZCAgc2V0IHRyYW5zZmVyIGNvdW50CisJCS8vIHVzZWQgQURET04gTVdUQyByZWdpc3RlcgorCQkvL2NvbW1lbnRlZCB0ZXN0aW5nICAgICAgICAgICAgIG91dGwoZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVswXSwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbitBTUNDX09QX1JFR19BTVdUQyk7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTmJyIG9mIGFjcXVpc2l0aW9uIExPVyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV1RDX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KChkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdICYgMHhGRkZGKSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTmJyIG9mIGFjcXVpc2l0aW9uIEhJR0ggKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XVENfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KChkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdIC8gNjU1MzYpLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCS8vNQorCQkvLyBUbyBjb25maWd1cmUgQTJQIEZJRk8KKwkJLy8gdGVzdGluZyBvdXRsKCBGSUZPX0FEVkFOQ0VfT05fQllURV8yLGRldnByaXYtPmlfSW9iYXNlQW1jYytBTUNDX09QX1JFR19JTlRDU1IpOworCisJCS8qKioqKioqKioqKioqKioqKiovCisJCS8qIEEyUCBGSUZPIFJFU0VUICovCisJCS8qKioqKioqKioqKioqKioqKiovCisJCS8vIFRPIFZFUklGWQorCQkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCQlvdXRsKDB4MDQwMDAwMDBVTCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfTUNTUik7CisJCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJCS8vNgorCQkvL0VOQUJMRSBBMlAgRklGTyBXUklURSBBTkQgRU5BQkxFIEFNV0VOCisJCS8vIEFNV0VOX0VOQUJMRSB8IEEyUF9GSUZPX1dSSVRFX0VOQUJMRSAoMHgwMXwweDAyKT0weDAzCisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCS8vb3V0dygzLGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyA0KTsKKwkJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisKKwkJLy83CisJCS8vaW5pdGlhbGlzZSBlbmQgb2YgZG1hIGludGVycnVwdCAgQUlOVF9XUklURV9DT01QTCA9IEVOQUJMRV9XUklURV9UQ19JTlQoQURESSkKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogQTJQIEZJRk8gQ09ORklHVVJBVEUsIEVORCBPRiBETUEgSU5URVJSVVBUIElOSVQgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0bCgoQVBDSTMxMjBfRklGT19BRFZBTkNFX09OX0JZVEVfMiB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1dSSVRFX1RDX0lOVCksCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBTUNDX09QX1JFR19JTlRDU1IpOworCisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEVOQUJMRSBBMlAgRklGTyBXUklURSBBTkQgRU5BQkxFIEFNV0VOICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dHcoMywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDQpOworCQkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKworCQkvKioqKioqKioqKioqKioqKioqLworCQkvKiBBMlAgRklGTyBSRVNFVCAqLworCQkvKioqKioqKioqKioqKioqKioqLworCQkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCQlvdXRsKDB4MDQwMDAwMDBVTCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kzMTIwX0FNQ0NfT1BfTUNTUik7CisJCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCX0KKworCWlmICgoZGV2cHJpdi0+dXNfVXNlRG1hID09IEFQQ0kzMTIwX0RJU0FCTEUpCisJCSYmICFkZXZwcml2LT5iX0FpQ29udGludW91cykgeworCQkvLyBzZXQgZ2F0ZSAyICAgdG8gc3RhcnQgY29udmVyc2lvbgorCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciB8IEFQQ0kzMTIwX0VOQUJMRV9USU1FUjI7CisJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCX0KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToKKwkJLy8gc2V0IGdhdGUgMCAgIHRvIHN0YXJ0IGNvbnZlcnNpb24KKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgfCBBUENJMzEyMF9FTkFCTEVfVElNRVIwOworCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkvLyBzZXQgIGdhdGUgMCBhbmQgZ2F0ZSAxCisJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyIHwgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMTsKKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgfCBBUENJMzEyMF9FTkFCTEVfVElNRVIwOworCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKwkJYnJlYWs7CisKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IAkJCUlOVEVSTkFMIEZVTkNUSU9OUwkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogaW50IGlfQVBDSTMxMjBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBIYXJkd2FyZSByZXNldCBmdW5jdGlvbiAgIAkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgc2hvcnQgdXNfVG1wVmFsdWU7CisKKwlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9ESVNBQkxFOworCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKKwlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT0NfTU9ERTsKKwlkZXZwcml2LT51aV9Fb2NFb3NDb252ZXJzaW9uVGltZSA9IDA7CS8vIHNldCBlb2MgZW9zIGNvbnYgdGltZSB0byAwCisJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSAwOworCisJLy8gdmFyaWFibGVzIHVzZWQgaW4gdGltZXIgc3ViZGV2aWNlCisJZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID0gMDsKKwlkZXZwcml2LT5iX1RpbWVyMkludGVycnVwdCA9IDA7CisJZGV2cHJpdi0+Yl9FeHR0cmlnRW5hYmxlID0gMDsJLy8gRGlzYWJsZSBleHQgdHJpZ2dlcgorCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cywgd2F0Y2hkb2cgZm9yIHRoZSBhbm9sb2cgb3V0cHV0ICovCisJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPSAwOworCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJLy8gRGlzYWJsZXMgYWxsIGNvdW50ZXJzLCBleHQgdHJpZ2dlciBhbmQgY2xlYXJzIFBBLCBQUgorCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gMDsKKwlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJLy9Db2RlIHRvIHNldCB0aGUgYWxsIGFub2xvZyBvL3AgY2hhbm5lbCB0byAwdgorCS8vODE5MSBpcyBkZWNpbWFsIHZhbHVlIGZvciB6ZXJvKDAgdil2b2x0IGluIGJpcG9sYXIgbW9kZShkZWZhdWx0KQorCW91dHcoODE5MSB8IEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzEsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8xKTsJLy9jaGFubmVsIDEKKwlvdXR3KDgxOTEgfCBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF8yLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX0FOQUxPR19PVVRQVVRfMSk7CS8vY2hhbm5lbCAyCisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfMywgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzEpOwkvL2NoYW5uZWwgMworCW91dHcoODE5MSB8IEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzQsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8xKTsJLy9jaGFubmVsIDQKKworCW91dHcoODE5MSB8IEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzUsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8yKTsJLy9jaGFubmVsIDUKKwlvdXR3KDgxOTEgfCBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF82LCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX0FOQUxPR19PVVRQVVRfMik7CS8vY2hhbm5lbCA2CisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNywgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIpOwkvL2NoYW5uZWwgNworCW91dHcoODE5MSB8IEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzgsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8yKTsJLy9jaGFubmVsIDgKKworCS8vICBSZXNldCBkaWdpdGFsIG91dHB1dCB0byBMMFcKKworLy9FUzA1ICBvdXRiKDB4MCxkZXYtPmlvYmFzZStBUENJMzEyMF9ESUdJVEFMX09VVFBVVCk7CisJdWRlbGF5KDEwKTsKKworCWludyhkZXYtPmlvYmFzZSArIDApOwkvL21ha2UgYSBkdW1teSByZWFkCisJaW5iKGRldi0+aW9iYXNlICsgQVBDSTMxMjBfUkVTRVRfRklGTyk7CS8vIGZsdXNoIEZJRk8KKwlpbncoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOwkvLyBmbHVzaCBBL0Qgc3RhdHVzIHJlZ2lzdGVyCisKKwkvL2NvZGUgdG8gcmVzZXQgdGhlIFJBTSBzZXF1ZW5jZQorCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXVzX1RtcFZhbHVlID0gaSA8PCA4OwkvL3NlbGVjdCB0aGUgbG9jYXRpb24KKwkJb3V0dyh1c19UbXBWYWx1ZSwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9TRVFfUkFNX0FERFJFU1MpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6IGludCBpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgaW50IG5fY2hhbix1bnNpZ25lZCBpbnQgKmNoYW5saXN0fAorfAkJCSAgLGNoYXIgY2hlY2spCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpUaGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgY2hlY2sgY2hhbm5lbCBsaXN0IGlzIG9rIG9yIG5vdHwKK3xhbmQgdGhlbiBpbml0aWFsaXplIHRoZSBzZXF1ZW5jZSBSQU0gd2l0aCB0aGUgcG9sYXJpdHksIEdhaW4sQ2hhbm5lbCBudW1iZXIgfAorfElmIHRoZSBsYXN0IGFyZ3VtZW50IG9mIGZ1bmN0aW9uICJjaGVjayJpcyAxIHRoZW4gaXQgb25seSBjaGVja3MgdGhlIGNoYW5uZWx8Cit8bGlzdCBpcyBvayBvciBub3QuCQkJCQkJCQkJCQkJICAgICAJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgaW50IG5fY2hhbiAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKwkJCSAgdW5zaWduZWQgaW50ICpjaGFubGlzdAorCQkJICBjaGFyIGNoZWNrCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9TZXR1cENoYW5uZWxMaXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG5fY2hhbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCwgY2hhciBjaGVjaykKK3sKKwl1bnNpZ25lZCBpbnQgaTsJCS8vLCBkaWZmZXJlbmNpYWw9MCwgYmlwb2xhcj0wOworCXVuc2lnbmVkIGludCBnYWluOworCXVuc2lnbmVkIHNob3J0IHVzX1RtcFZhbHVlOworCisJLyogY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jICovCisJaWYgKG5fY2hhbiA8IDEpIHsKKwkJaWYgKCFjaGVjaykKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJyYW5nZS9jaGFubmVsIGxpc3QgaXMgZW1wdHkhIik7CisJCXJldHVybiAwOworCX0KKwkvLyBBbGwgaXMgb2ssIHNvIHdlIGNhbiBzZXR1cCBjaGFubmVsL3JhbmdlIGxpc3QKKwlpZiAoY2hlY2spCisJCXJldHVybiAxOworCisJLy9Db2RlICB0byBzZXQgdGhlIFBBIGFuZCBQUi4uLkhlcmUgaXQgc2V0IFBBIHRvIDAuLgorCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9DTEVBUl9QQV9QUjsKKwlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9ICgobl9jaGFuIC0gMSkgJiAweGYpIDw8IDg7CisJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCWZvciAoaSA9IDA7IGkgPCBuX2NoYW47IGkrKykgeworCQkvLyBzdG9yZSByYW5nZSBsaXN0IHRvIGNhcmQKKwkJdXNfVG1wVmFsdWUgPSBDUl9DSEFOKGNoYW5saXN0W2ldKTsJLy8gZ2V0IGNoYW5uZWwgbnVtYmVyOworCisJCWlmIChDUl9SQU5HRShjaGFubGlzdFtpXSkgPCBBUENJMzEyMF9CSVBPTEFSX1JBTkdFUykgeworCQkJdXNfVG1wVmFsdWUgJj0gKCh+QVBDSTMxMjBfVU5JUE9MQVIpICYgMHhmZik7CS8vIHNldCBiaXBvbGFyCisJCX0gZWxzZSB7CisJCQl1c19UbXBWYWx1ZSB8PSBBUENJMzEyMF9VTklQT0xBUjsJLy8gZW5hYmxlIHVuaXBvbGFyLi4uLi4uCisJCX0KKworCQlnYWluID0gQ1JfUkFOR0UoY2hhbmxpc3RbaV0pOwkvLyBnZXQgZ2FpbiBudW1iZXIKKwkJdXNfVG1wVmFsdWUgfD0gKChnYWluICYgMHgwMykgPDwgNCk7CS8vPDw0IGZvciBHMCBhbmQgRzEgYml0IGluIFJBTQorCQl1c19UbXBWYWx1ZSB8PSBpIDw8IDg7CS8vVG8gc2VsZWN0IHRoZSBSQU0gTE9DQVRJT04uLi4uCisJCW91dHcodXNfVG1wVmFsdWUsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfU0VRX1JBTV9BRERSRVNTKTsKKworCQlwcmludGsoIlxuIEdhaW4gPSAlaSIsCisJCQkoKCh1bnNpZ25lZCBjaGFyKUNSX1JBTkdFKGNoYW5saXN0W2ldKSAmIDB4MDMpIDw8IDIpKTsKKwkJcHJpbnRrKCJcbiBDaGFubmVsID0gJWkiLCBDUl9DSEFOKGNoYW5saXN0W2ldKSk7CisJCXByaW50aygiXG4gUG9sYXJpdHkgPSAlaSIsIHVzX1RtcFZhbHVlICYgQVBDSTMxMjBfVU5JUE9MQVIpOworCX0KKwlyZXR1cm4gMTsJCS8vIHdlIGNhbiBzZXJ2ZSB0aGlzIHdpdGggc2NhbiBsb2dpYworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDoJaW50IGlfQVBDSTMxMjBfRXh0dHJpZ0VuYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogCUVuYWJsZSB0aGUgZXh0ZXJuYWwgdHJpZ2dlcgkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgMCAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9FeHR0cmlnRW5hYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgfD0gQVBDSTMxMjBfRU5BQkxFX0VYVF9UUklHR0VSOworCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiAJaW50IGlfQVBDSTMxMjBfRXh0dHJpZ0Rpc2FibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogCURpc2FibGVzIHRoZSBleHRlcm5hbCB0cmlnZ2VyCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAJc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAwICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfRXh0dHJpZ0Rpc2FibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgJj0gfkFQQ0kzMTIwX0VOQUJMRV9FWFRfVFJJR0dFUjsKKwlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICBJTlRFUlJVUFQgRlVOQ1RJT05TCQkgICAgCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6IHZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkgCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpJbnRlcnJ1cHQgaGFuZGxlciBmb3IgQVBDSTMxMjAgICAgICAgICAgICAgICAgICAgICAgICAJIHwKK3wJCQkgV2hlbiBpbnRlcnJ1cHQgb2NjdXJzIHRoaXMgZ2V0cyBjYWxsZWQuICAgICAgICAgICAgICAgICB8Cit8CQkJIEZpcnN0IGl0IGZpbmRzIHdoaWNoIGludGVycnVwdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYW5kICAgfAorfAkJCSBoYW5kbGVzICBjb3JyZXNwb25kaW5nIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAJaW50IGlycSAJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZAkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiB2b2lkICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCit2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJVVNIT1JUIGludF9kYXE7CisKKwl1bnNpZ25lZCBpbnQgaW50X2FtY2MsIHVpX0NoZWNrLCBpOworCVVTSE9SVCB1c19UbXBWYWx1ZTsKKwlCWVRFIGJfRHVtbXlSZWFkOworCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXVpX0NoZWNrID0gMTsKKworCWludF9kYXEgPSBpbncoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpICYgMHhmMDAwOwkvLyBnZXQgSVJRIHJlYXNvbnMKKwlpbnRfYW1jYyA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBnZXQgQU1DQyBJTlQgcmVnaXN0ZXIKKworCWlmICgoIWludF9kYXEpICYmICghKGludF9hbWNjICYgQU5ZX1M1OTNYX0lOVCkpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJUlEgZnJvbSB1bmtub3cgc291cmNlIik7CisJCXJldHVybjsKKwl9CisKKwlvdXRsKGludF9hbWNjIHwgMHgwMGZmMDAwMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsJLy8gc2h1dGRvd24gSVJRIHJlYXNvbnMgaW4gQU1DQworCisJaW50X2RhcSA9IChpbnRfZGFxID4+IDEyKSAmIDB4RjsKKworCWlmIChkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisJCS8vRGlzYWJsZSBleHQgdHJpZ2dlcgorCQlpX0FQQ0kzMTIwX0V4dHRyaWdEaXNhYmxlKGRldik7CisJCWRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJfQorCS8vY2xlYXIgdGhlIHRpbWVyIDIgaW50ZXJydXB0CisJaW5iKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisKKwlpZiAoaW50X2FtY2MgJiBNQVNURVJfQUJPUlRfSU5UKQorCQljb21lZGlfZXJyb3IoZGV2LCAiQU1DQyBJUlEgLSBNQVNURVIgRE1BIEFCT1JUISIpOworCWlmIChpbnRfYW1jYyAmIFRBUkdFVF9BQk9SVF9JTlQpCisJCWNvbWVkaV9lcnJvcihkZXYsICJBTUNDIElSUSAtIFRBUkdFVCBETUEgQUJPUlQhIik7CisKKwkvLyBDa2VjayBpZiBFT0MgaW50ZXJydXB0CisJaWYgKCgoaW50X2RhcSAmIDB4OCkgPT0gMCkKKwkJJiYgKGRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9PSBBUENJMzEyMF9FT0NfTU9ERSkpIHsKKwkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0VOQUJMRSkgeworCisJCQkvLyBSZWFkIHRoZSBBSSBWYWx1ZQorCisJCQlkZXZwcml2LT51aV9BaVJlYWREYXRhWzBdID0KKwkJCQkoVUlOVCkgaW53KGRldnByaXYtPmlvYmFzZSArIDApOworCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOworCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCQl9IGVsc2UgeworCQkJLy9EaXNhYmxlIEVPQyBJbnRlcnJ1cHQKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9DX0lOVDsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJCX0KKwl9CisKKwkvLyBDaGVjayBJZiBFT1MgaW50ZXJydXB0CisJaWYgKChpbnRfZGFxICYgMHgyKSAmJiAoZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID09IEFQQ0kzMTIwX0VPU19NT0RFKSkgeworCisJCWlmIChkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9PSBBUENJMzEyMF9FTkFCTEUpCS8vIGVuYWJsZSB0aGlzIGluIHdpdGhvdXQgRE1BID8/PworCQl7CisKKwkJCWlmIChkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisJCQkJdWlfQ2hlY2sgPSAwOworCQkJCWlfQVBDSTMxMjBfSW50ZXJydXB0SGFuZGxlRW9zKGRldik7CisJCQkJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuKys7CisJCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCQlkZXZwcml2LT4KKwkJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgfAorCQkJCQlBUENJMzEyMF9FTkFCTEVfRU9TX0lOVDsKKwkJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCQlkZXYtPmlvYmFzZSArCisJCQkJCUFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKwkJCX0gZWxzZSB7CisJCQkJdWlfQ2hlY2sgPSAwOworCQkJCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHM7CisJCQkJCWkrKykgeworCQkJCQl1c19UbXBWYWx1ZSA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyAwKTsKKwkJCQkJZGV2cHJpdi0+dWlfQWlSZWFkRGF0YVtpXSA9CisJCQkJCQkoVUlOVCkgdXNfVG1wVmFsdWU7CisJCQkJfQorCQkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT0NfTU9ERTsKKworCQkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CS8vIHNlbmQgc2lnbmFsIHRvIHRoZSBzYW1wbGUKKworCQkJfQorCisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQ7CisJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOwkvL0RlZmF1bHQgc2V0dGluZ3MKKwkJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOworCQl9CisKKwl9CisJLy9UaW1lcjIgaW50ZXJydXB0CisJaWYgKGludF9kYXEgJiAweDEpIHsKKworCQlzd2l0Y2ggKGRldnByaXYtPmJfVGltZXIyTW9kZSkgeworCQljYXNlIEFQQ0kzMTIwX0NPVU5URVI6CisKKwkJCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQ7CisJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJCQkvLyBzdG9wIHRpbWVyIDIKKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQl1c19PdXRwdXRSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfQUxMX1RJTUVSOworCQkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJCQkvL3N0b3AgdGltZXIgMCBhbmQgdGltZXIgMQorCQkJaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24oZGV2LCBzKTsKKwkJCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0RJU0FCTEU7CisKKwkJCS8vVVBEQVRFLTAuNy41Ny0+MC43LjY4Y29tZWRpX2RvbmUoZGV2LHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisKKwkJCWJyZWFrOworCisJCWNhc2UgQVBDSTMxMjBfVElNRVI6CisKKwkJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBBUENJMzEyMF9XQVRDSERPRzoKKworCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCisJCQkvLyBkaXNhYmxlIFRpbWVyIEludGVycnVwdAorCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfSU5UOworCisJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJCX0KKworCQliX0R1bW15UmVhZCA9IGluYihkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisKKwl9CisKKwlpZiAoKGludF9kYXEgJiAweDQpICYmIChkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPT0gQVBDSTMxMjBfRE1BX01PREUpKSB7CisJCWlmIChkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisKKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2xlYXIgVGltZXIgV3JpdGUgVEMgSU5UICovCisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bChBUENJMzEyMF9DTEVBUl9XUklURV9UQ19JTlQsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCQlBUENJMzEyMF9BTUNDX09QX1JFR19JTlRDU1IpOworCisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2xlYXJzIHRoZSB0aW1lciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpbncoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9TVEFUVVNfUkVHSVNURVIpOworCQkJdl9BUENJMzEyMF9JbnRlcnJ1cHREbWEoaXJxLCBkKTsJLy8gZG8gc29tZSBkYXRhIHRyYW5zZmVyCisJCX0gZWxzZSB7CisJCQkvKiBTdG9wcyB0aGUgVGltZXIgKi8KKwkJCW91dHcoZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMCAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUjEsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKwkJfQorCisJfQorCisJcmV0dXJuOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnRlcnJ1cHRIYW5kbGVFb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgRU9TIGludGVycnVwdC4gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBhY3F1aXJlZCBkYXRhKGZyb20gRklGTykgICAgICB8Cit8CQkJCXRvIENvbWVkaSBidWZmZXIuCQkgCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisgKiBpbnQgaV9BUENJMzEyMF9JbnRlcnJ1cHRIYW5kbGVFb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3sKKyAgICAgICBpbnQgbl9jaGFuLGk7CisgICAgICAgc2hvcnQgKmRhdGE7CisgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM9ZGV2LT5zdWJkZXZpY2VzKzA7CisgICAgICAgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKyAgICAgICBkYXRhPWFzeW5jLT5kYXRhK2FzeW5jLT5idWZfaW50X3B0cjsKKyAgICAgICAgbl9jaGFuPWRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVsczsKKworICAgICAgIGZvcihpPTA7aTxuX2NoYW47aSsrKQorICAgICAgICAgeworICAgICAgICAgICBkYXRhW2ldPWludyhkZXYtPmlvYmFzZSswKTsKKyAgICAgICAgIH0KKyAgICAgICBhc3luYy0+YnVmX2ludF9jb3VudCs9bl9jaGFuKnNpemVvZihzaG9ydCk7CisgICAgICAgYXN5bmMtPmJ1Zl9pbnRfcHRyKz1uX2NoYW4qc2l6ZW9mKHNob3J0KTsKKyAgICAgICBjb21lZGlfZW9zKGRldixzKTsKKyAgICAgICBpZiAocy0+YXN5bmMtPmJ1Zl9pbnRfcHRyPj1zLT5hc3luYy0+ZGF0YV9sZW4pIC8vICBmb3IgYnVmZmVyIHJvb2wgb3ZlcgorCQkgICAgICAgICB7CisqLy8qIGJ1ZmZlciByb2xsb3ZlciAqLworLyoJICAgICAgICBzLT5hc3luYy0+YnVmX2ludF9wdHI9MDsKKwkJY29tZWRpX2VvYnVmKGRldixzKTsKKyAgICAgICAgIH0KKyAJcmV0dXJuIDA7Cit9Ki8KK2ludCBpX0FQQ0kzMTIwX0ludGVycnVwdEhhbmRsZUVvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgbl9jaGFuLCBpOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpbnQgZXJyID0gMTsKKworCW5fY2hhbiA9IGRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVsczsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKQorCQllcnIgJj0gY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGludyhkZXYtPmlvYmFzZSArIDApKTsKKworCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKKworCWlmIChlcnIgPT0gMCkKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogdm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYShpbnQgaXJxLCB2b2lkICpkKSAJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogVGhpcyBpcyBhIGhhbmRsZXIgZm9yIHRoZSBETUEgaW50ZXJydXB0ICAgICAgICAgICAgICAgIHwKK3wJCQkgIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBkYXRhIHRvIENvbWVkaSBCdWZmZXIuICAgICAgICB8Cit8CQkJICBGb3IgY29udGludW91cyBETUEgaXQgcmVpbml0aWFsaXplcyB0aGUgRE1BIG9wZXJhdGlvbi4gfAorfAkJCSAgRm9yIHNpbmdsZSBtb2RlIERNQSBpdCBzdG9wIHRoZSBhY3F1aXNpdGlvbi4gICAgICAgICAgIHwKK3wJCQkJCQkJCQkJCQkJICAgICAJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSwgdm9pZCAqZAkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICB2b2lkICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK3ZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHREbWEoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJdW5zaWduZWQgaW50IG5leHRfZG1hX2J1Ziwgc2FtcGxlc2luYnVmOworCXVuc2lnbmVkIGxvbmcgbG93X3dvcmQsIGhpZ2hfd29yZCwgdmFyOworCisJVUlOVCB1aV9UbXA7CisJc2FtcGxlc2luYnVmID0KKwkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVtkZXZwcml2LT51aV9EbWFBY3R1YWxCdWZmZXJdIC0KKwkJaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX01XVEMpOworCisJaWYgKHNhbXBsZXNpbmJ1ZiA8CisJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyXSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiSW50ZXJydXB0ZWQgRE1BIHRyYW5zZmVyISIpOworCX0KKwlpZiAoc2FtcGxlc2luYnVmICYgMSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiT2RkIGNvdW50IG9mIGJ5dGVzIGluIERNQSByaW5nISIpOworCQlpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihkZXYsIHMpOworCQlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9ESVNBQkxFOworCisJCXJldHVybjsKKwl9CisJc2FtcGxlc2luYnVmID0gc2FtcGxlc2luYnVmID4+IDE7CS8vIG51bWJlciBvZiByZWNlaXZlZCBzYW1wbGVzCisJaWYgKGRldnByaXYtPmJfRG1hRG91YmxlQnVmZmVyKSB7CisJCS8vIHN3aXRjaCBETUEgYnVmZmVycyBpZiBpcyB1c2VkIGRvdWJsZSBidWZmZXJpbmcKKwkJbmV4dF9kbWFfYnVmID0gMSAtIGRldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlcjsKKworCQl1aV9UbXAgPSBBR0NTVFNfVENfRU5BQkxFIHwgQUdDU1RTX1JFU0VUX0EyUF9GSUZPOworCQlvdXRsKHVpX1RtcCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFNQ0NfT1BfUkVHX0FHQ1NUUyk7CisKKwkJLy8gY2hhbmdlZCAgc2luY2UgMTYgYml0IGludGVyZmFjZSBmb3IgYWRkIG9uCisJCW91dHcoQVBDSTMxMjBfQUREX09OX0FHQ1NUU19MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhBUENJMzEyMF9FTkFCTEVfVFJBTlNGRVJfQUREX09OX0xPVywKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKwkJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhBUENJMzEyMF9FTkFCTEVfVFJBTlNGRVJfQUREX09OX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsJLy8gMHgxMDAwIGlzIG91dCBwdXR0ZWQgaW4gd2luZG93cyBkcml2ZXIKKworCQl2YXIgPSBkZXZwcml2LT51bF9EbWFCdWZmZXJId1tuZXh0X2RtYV9idWZdOworCQlsb3dfd29yZCA9IHZhciAmIDB4ZmZmZjsKKwkJdmFyID0gZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbbmV4dF9kbWFfYnVmXTsKKwkJaGlnaF93b3JkID0gdmFyIC8gNjU1MzY7CisKKwkJLyogRE1BIFN0YXJ0IEFkcmVzcyBMb3cgKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdBUl9MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhsb3dfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCS8qIERNQSBTdGFydCBBZHJlc3MgSGlnaCAqLworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhoaWdoX3dvcmQsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKworCQl2YXIgPSBkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplW25leHRfZG1hX2J1Zl07CisJCWxvd193b3JkID0gdmFyICYgMHhmZmZmOworCQl2YXIgPSBkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplW25leHRfZG1hX2J1Zl07CisJCWhpZ2hfd29yZCA9IHZhciAvIDY1NTM2OworCisJCS8qIE5iciBvZiBhY3F1aXNpdGlvbiBMT1cgKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdUQ19MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhsb3dfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCS8qIE5iciBvZiBhY3F1aXNpdGlvbiBISUdIICovCisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XVENfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGhpZ2hfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCS8vIFRvIGNvbmZpZ3VyZSBBMlAgRklGTworCQkvLyBFTkFCTEUgQTJQIEZJRk8gV1JJVEUgQU5EIEVOQUJMRSBBTVdFTgorCQkvLyBBTVdFTl9FTkFCTEUgfCBBMlBfRklGT19XUklURV9FTkFCTEUgKDB4MDF8MHgwMik9MHgwMworCQlvdXR3KDMsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyA0KTsKKwkJLy9pbml0aWFsaXNlIGVuZCBvZiBkbWEgaW50ZXJydXB0ICBBSU5UX1dSSVRFX0NPTVBMID0gRU5BQkxFX1dSSVRFX1RDX0lOVChBRERJKQorCQlvdXRsKChBUENJMzEyMF9GSUZPX0FEVkFOQ0VfT05fQllURV8yIHwKKwkJCQlBUENJMzEyMF9FTkFCTEVfV1JJVEVfVENfSU5UKSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisKKwl9CisvKlVQREFURS0wLjcuNTctPjAuNy42OAorCXB0cj0oc2hvcnQgKilkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsW2RldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlcl07CisKKworCS8vIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgbGVmdCBpbiB0aGUgYnVmZmVyIHRvIGNvcHkgYWxsIGRhdGEgY29udGFpbmVkIGluIHRoZSBETUFCdWZmZXJWaXJ0dWFsCisJaWYocy0+YXN5bmMtPmJ1Zl9pbnRfcHRyK3NhbXBsZXNpbmJ1ZipzaXplb2Yoc2hvcnQpPj1kZXZwcml2LT51aV9BaURhdGFMZW5ndGgpCisJeworCQltPShkZXZwcml2LT51aV9BaURhdGFMZW5ndGgtcy0+YXN5bmMtPmJ1Zl9pbnRfcHRyKS9zaXplb2Yoc2hvcnQpOworCQl2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KGRldixzLCh2b2lkICopcHRyLCgodm9pZCAqKShkZXZwcml2LT5BaURhdGEpKStzLT5hc3luYy0+YnVmX2ludF9wdHIsbSk7CisJCXMtPmFzeW5jLT5idWZfaW50X2NvdW50Kz1tKnNpemVvZihzaG9ydCk7CisJCXB0cis9bSpzaXplb2Yoc2hvcnQpOworICAgICAgICAgICAgICAgIHNhbXBsZXNpbmJ1Zi09bTsKKwkJcy0+YXN5bmMtPmJ1Zl9pbnRfcHRyPTA7CisJCWNvbWVkaV9lb2J1ZihkZXYscyk7CisJfQorCisJaWYgKHNhbXBsZXNpbmJ1ZikKKwl7CisJICAgICAgICB2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KGRldixzLCh2b2lkICopcHRyLCgodm9pZCAqKShkZXZwcml2LT5BaURhdGEpKStzLT5hc3luYy0+YnVmX2ludF9wdHIsc2FtcGxlc2luYnVmKTsKKworCQlzLT5hc3luYy0+YnVmX2ludF9jb3VudCs9c2FtcGxlc2luYnVmKnNpemVvZihzaG9ydCk7CisJCXMtPmFzeW5jLT5idWZfaW50X3B0cis9c2FtcGxlc2luYnVmKnNpemVvZihzaG9ydCk7CisJCWlmICghKGRldnByaXYtPnVpX0FpRmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkKKwkJeworCQkJY29tZWRpX2J1ZmNoZWNrKGRldixzKTsKKyAgICAgICAgICAgICAgICB9CisJfQorCWlmICghZGV2cHJpdi0+Yl9BaUNvbnRpbnVvdXMpCisJaWYgKCBkZXZwcml2LT51aV9BaUFjdHVhbFNjYW4+PWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyApCisJeworCSAgICAvLyBhbGwgZGF0YSBzYW1wbGVkCisJICAgIGlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKGRldixzKTsKKyAgICAgICAgICAgIGRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbj1BUENJMzEyMF9ESVNBQkxFOworCSAgICAvL0RQUklOVEsoIlxuIFNpbmdsZSBETUEgY29tcGxldGVkLi5cbiIpOworCQljb21lZGlfZG9uZShkZXYscyk7CisgICAgICAgICAgICAJcmV0dXJuOworCX0KKyovCisJaWYgKHNhbXBsZXNpbmJ1ZikgeworCQl2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KGRldiwgcywKKwkJCWRldnByaXYtPnVsX0RtYUJ1ZmZlclZpcnR1YWxbZGV2cHJpdi0+CisJCQkJdWlfRG1hQWN0dWFsQnVmZmVyXSwgc2FtcGxlc2luYnVmKTsKKworCQlpZiAoIShkZXZwcml2LT51aV9BaUZsYWdzICYgVFJJR19XQUtFX0VPUykpIHsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQl9CisJfQorCWlmICghZGV2cHJpdi0+Yl9BaUNvbnRpbnVvdXMpCisJCWlmIChkZXZwcml2LT51aV9BaUFjdHVhbFNjYW4gPj0gZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zKSB7CisJCQkvLyBhbGwgZGF0YSBzYW1wbGVkCisJCQlpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihkZXYsIHMpOworCQkJZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJcmV0dXJuOworCQl9CisKKwlpZiAoZGV2cHJpdi0+Yl9EbWFEb3VibGVCdWZmZXIpIHsJLy8gc3dpdGNoIGRtYSBidWZmZXJzCisJCWRldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlciA9IDEgLSBkZXZwcml2LT51aV9EbWFBY3R1YWxCdWZmZXI7CisJfSBlbHNlIHsKKwkJLy8gcmVzdGFydCBETUEgaWYgaXMgbm90IHVzZWQgZG91YmxlIGJ1ZmZlcmluZworCQkvL0FEREVEIFJFSU5JVElBTElTRSBUSEUgRE1BCisJCXVpX1RtcCA9IEFHQ1NUU19UQ19FTkFCTEUgfCBBR0NTVFNfUkVTRVRfQTJQX0ZJRk87CisJCW91dGwodWlfVG1wLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQU1DQ19PUF9SRUdfQUdDU1RTKTsKKworCQkvLyBjaGFuZ2VkICBzaW5jZSAxNiBiaXQgaW50ZXJmYWNlIGZvciBhZGQgb24KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fTE9XLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOwkvLworCQkvLyBBMlAgRklGTyBNQU5BR0VNRU5UCisJCS8vIEEyUCBmaWZvIHJlc2V0ICAmIHRyYW5zZmVyIGNvbnRyb2wgZW5hYmxlCisJCW91dGwoQVBDSTMxMjBfQTJQX0ZJRk9fTUFOQUdFTUVOVCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX01DU1IpOworCisJCXZhciA9IGRldnByaXYtPnVsX0RtYUJ1ZmZlckh3WzBdOworCQlsb3dfd29yZCA9IHZhciAmIDB4ZmZmZjsKKwkJdmFyID0gZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbMF07CisJCWhpZ2hfd29yZCA9IHZhciAvIDY1NTM2OworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGxvd193b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGhpZ2hfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCXZhciA9IGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMF07CisJCWxvd193b3JkID0gdmFyICYgMHhmZmZmOwkvL2NoYW5nZWQKKwkJdmFyID0gZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVswXTsKKwkJaGlnaF93b3JkID0gdmFyIC8gNjU1MzY7CisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XVENfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcobG93X3dvcmQsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdUQ19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoaGlnaF93b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLy8gVG8gY29uZmlndXJlIEEyUCBGSUZPCisJCS8vRU5BQkxFIEEyUCBGSUZPIFdSSVRFIEFORCBFTkFCTEUgQU1XRU4KKwkJLy8gQU1XRU5fRU5BQkxFIHwgQTJQX0ZJRk9fV1JJVEVfRU5BQkxFICgweDAxfDB4MDIpPTB4MDMKKwkJb3V0dygzLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgNCk7CisJCS8vaW5pdGlhbGlzZSBlbmQgb2YgZG1hIGludGVycnVwdCAgQUlOVF9XUklURV9DT01QTCA9IEVOQUJMRV9XUklURV9UQ19JTlQoQURESSkKKwkJb3V0bCgoQVBDSTMxMjBfRklGT19BRFZBTkNFX09OX0JZVEVfMiB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1dSSVRFX1RDX0lOVCksCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBTUNDX09QX1JFR19JTlRDU1IpOworCX0KK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6dm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KGNvbWVkaV9kZXZpY2V8Cit8KmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzaG9ydCAqZG1hLHNob3J0ICpkYXRhLGludCBuKQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBkYXRhIGZyb20gRE1BIGJ1ZmZlciB0byB0aGUgICB8Cit8CQkJCSBDb21lZGkgYnVmZmVyICAJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqZG1hCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpkYXRhLGludCBuICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogdm9pZCAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyp2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzaG9ydCAqZG1hLHNob3J0ICpkYXRhLGludCBuKQoreworCWludCBpLGosbTsKKworCWo9cy0+YXN5bmMtPmN1cl9jaGFuOworCW09ZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuUG9zaXRpb247CisgICAgICAgIGZvcihpPTA7aTxuO2krKykKKwl7CisJCSpkYXRhPSpkbWE7CisgICAJCWRhdGErKzsgZG1hKys7CisJCWorKzsKKwkJaWYoaj49ZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzKQorCQl7CisJCQltKz1qOworCQkJaj0wOworCQkJaWYobT49ZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoKQorCQkJeworCQkJCW09MDsKKwkJCSAgICAgICAgZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuKys7CisJCQkJaWYgKGRldnByaXYtPnVpX0FpRmxhZ3MgJiBUUklHX1dBS0VfRU9TKQorOy8vVVBEQVRFLTAuNy41Ny0+MC43LjY4CQkJCQljb21lZGlfZW9zKGRldixzKTsKKwkJCX0KKwkJfQorCX0KKyAgICAgICAgZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuUG9zaXRpb249bTsKKwlzLT5hc3luYy0+Y3VyX2NoYW49ajsKKworfQorKi8KK3ZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHREbWFNb3ZlQmxvY2sxNmJpdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHNob3J0ICogZG1hX2J1ZmZlciwgdW5zaWduZWQgaW50IG51bV9zYW1wbGVzKQoreworCWRldnByaXYtPnVpX0FpQWN0dWFsU2NhbiArPQorCQkocy0+YXN5bmMtPmN1cl9jaGFuICsgbnVtX3NhbXBsZXMpIC8gZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoOworCXMtPmFzeW5jLT5jdXJfY2hhbiArPSBudW1fc2FtcGxlczsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gJT0gZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoOworCisJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBkbWFfYnVmZmVyLCBudW1fc2FtcGxlcyAqIHNpemVvZihzaG9ydCkpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNRVIgU1VCREVWSUNFICAgCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuQ29uZmlnVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgfAorfAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6Q29uZmlndXJlIFRpbWVyIDIgIAkJCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF09IFRJTUVSICBjb25maWd1cmUgYXMgdGltZXIgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIAkJCQkgPSBXQVRDSERPRyBjb25maWd1cmUgYXMgd2F0Y2hkb2cJCQkJIHwKK3wgICAgICAgCQkJICBkYXRhWzFdID0gVGltZXIgY29uc3RhbnQJCQkJCQkJIHwKK3wgICAgICAgCQkJICBkYXRhWzJdID0gVGltZXIyIGludGVycnVwdCAoMSllbmFibGUgb3IoMCkgZGlzYWJsZSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zbkNvbmZpZ1RpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCVVJTlQgdWlfVGltZXJ2YWx1ZTI7CisJVVNIT1JUIHVzX1RtcFZhbHVlOworCUJZVEUgYl9UbXA7CisKKwlpZiAoIWRhdGFbMV0pCisJCWNvbWVkaV9lcnJvcihkZXYsICJjb25maWc6Tm8gdGltZXIgY29uc3RhbnQgISIpOworCisJZGV2cHJpdi0+Yl9UaW1lcjJJbnRlcnJ1cHQgPSAoQllURSkgZGF0YVsyXTsJLy8gc2F2ZSBpbmZvIHdoZXRoZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0CisKKwl1aV9UaW1lcnZhbHVlMiA9IGRhdGFbMV0gLyAxMDAwOwkvLyBjb252ZXJ0IG5hbm8gc2Vjb25kcyAgdG8gdSBzZWNvbmRzCisKKwkvL3RoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkNvbmZpZ1RpbWVyKGRldiwgdWlfVGltZXJ2YWx1ZTIsKEJZVEUpZGF0YVswXSk7CisJdXNfVG1wVmFsdWUgPSAoVVNIT1JUKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKworCS8vRUwyNTA4MDQ6IFRlc3RpbmcgaWYgYm9hcmQgQVBDSTMxMjAgaGF2ZSB0aGUgbmV3IFF1YXJ0eiBvciBpZiBpdCBpcyBhbiBBUENJMzAwMQorCS8vIGFuZCBjYWxjdWxhdGUgdGhlIHRpbWUgdmFsdWUgdG8gc2V0IGluIHRoZSB0aW1lcgorCWlmICgodXNfVG1wVmFsdWUgJiAweDAwQjApID09IDB4MDBCMAorCQl8fCAhc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMzAwMSIpKSB7CisJCS8vQ2FsY3VsYXRlIHRoZSB0aW1lIHZhbHVlIHRvIHNldCBpbiB0aGUgdGltZXIKKwkJdWlfVGltZXJ2YWx1ZTIgPSB1aV9UaW1lcnZhbHVlMiAvIDUwOworCX0gZWxzZSB7CisJCS8vQ2FsY3VsYXRlIHRoZSB0aW1lIHZhbHVlIHRvIHNldCBpbiB0aGUgdGltZXIKKwkJdWlfVGltZXJ2YWx1ZTIgPSB1aV9UaW1lcnZhbHVlMiAvIDcwOworCX0KKworCS8vUmVzZXQgZ2F0ZSAyIG9mIFRpbWVyIDIgdG8gZGlzYWJsZSBpdCAoU2V0IEJpdCBEMTQgdG8gMCkKKwlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9USU1FUjI7CisJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkvLyBEaXNhYmxlIFRJTUVSIEludGVycnVwdAorCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJZGV2cHJpdi0+CisJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQgJiAweEVGOworCisJLy8gRGlzYWJsZSBFb2MgYW5kIEVvcyBJbnRlcnJ1cHRzCisJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQlkZXZwcml2LT4KKwkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX0VPQ19JTlQgJgorCQlBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQ7CisJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCWlmIChkYXRhWzBdID09IEFQQ0kzMTIwX1RJTUVSKQkvL2luaXRpYWxpemUgdGltZXIKKwl7CisKKwkJLy9kZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3Rlcj1kZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlcnwgQVBDSTMxMjBfRU5BQkxFX1RJTUVSX0lOVCA7CisJCS8vb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlcixkZXZwcml2LT5pb2Jhc2UrQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJCS8vU2V0IHRoZSBUaW1lciAyIGluIG1vZGUgMihUaW1lcikKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJKGRldnByaXYtPgorCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweDBGKSB8IEFQQ0kzMTIwX1RJTUVSXzJfTU9ERV8yOworCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJLy9Db25maWd1cmUgdGhlIHRpbWVyIDIgZm9yIHdyaXRpbmcgdGhlIExPVyBXT1JEIG9mIHRpbWVyIGlzIERlbGF5IHZhbHVlCisJCS8vWW91IG11c3QgbWFrZSBhIGJfdG1wIHZhcmlhYmxlIHdpdGggRGlnaXRhbE91dFB1dFJlZ2lzdGVyIGJlY2F1c2UgYXQgQWRkcmVzc18xK0FQQ0kzMTIwX1RJTUVSX0NSVDAKKwkJLy95b3UgY2FuIHNldCB0aGUgZGlnaXRhbCBvdXRwdXQgYW5kIGNvbmZpZ3VyZSB0aGUgdGltZXIgMixhbmQgaWYgeW91IGRvbid0IG1ha2UgdGhpcywgZGlnaXRhbCBvdXRwdXQKKwkJLy9hcmUgZXJhc2UgKFNldCB0byAwKQorCisJCS8vV3JpdGluZyBMT1cgV09SRAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfTE9XX1dPUkQ7CisJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQlvdXR3KExPV09SRCh1aV9UaW1lcnZhbHVlMiksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisKKwkJLy9Xcml0aW5nIEhJR0ggV09SRAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfSElHSF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKwkJb3V0dyhISVdPUkQodWlfVGltZXJ2YWx1ZTIpLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCQkvLyB0aW1lcjIgaW4gVGltZXIgbW9kZSBlbmFibGVkCisJCWRldnByaXYtPmJfVGltZXIyTW9kZSA9IEFQQ0kzMTIwX1RJTUVSOworCisJfSBlbHNlCQkJLy8gSW5pdGlhbGl6ZSBXYXRjaCBkb2cKKwl7CisKKwkJLy9TZXQgdGhlIFRpbWVyIDIgaW4gbW9kZSA1KFdhdGNoZG9nKQorCisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCShkZXZwcml2LT4KKwkJCWJfVGltZXJTZWxlY3RNb2RlICYgMHgwRikgfCBBUENJMzEyMF9USU1FUl8yX01PREVfNTsKKwkJb3V0YihkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDEpOworCisJCS8vQ29uZmlndXJlIHRoZSB0aW1lciAyIGZvciB3cml0aW5nIHRoZSBMT1cgV09SRCBvZiB0aW1lciBpcyBEZWxheSB2YWx1ZQorCQkvL1lvdSBtdXN0IG1ha2UgYSBiX3RtcCB2YXJpYWJsZSB3aXRoIERpZ2l0YWxPdXRQdXRSZWdpc3RlciBiZWNhdXNlIGF0IEFkZHJlc3NfMStBUENJMzEyMF9USU1FUl9DUlQwCisJCS8veW91IGNhbiBzZXQgdGhlIGRpZ2l0YWwgb3V0cHV0IGFuZCBjb25maWd1cmUgdGhlIHRpbWVyIDIsYW5kIGlmIHlvdSBkb24ndCBtYWtlIHRoaXMsIGRpZ2l0YWwgb3V0cHV0CisJCS8vYXJlIGVyYXNlIChTZXQgdG8gMCkKKworCQkvL1dyaXRpbmcgTE9XIFdPUkQKKwkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0xPV19XT1JEOworCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKwkJb3V0dyhMT1dPUkQodWlfVGltZXJ2YWx1ZTIpLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCS8vV3JpdGluZyBISUdIIFdPUkQKKwkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0hJR0hfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisKKwkJb3V0dyhISVdPUkQodWlfVGltZXJ2YWx1ZTIpLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCQkvL3dhdGNoZG9nIGVuYWJsZWQKKwkJZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID0gQVBDSTMxMjBfV0FUQ0hET0c7CisKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiAgICBUbyBzdGFydCBhbmQgc3RvcCB0aGUgdGltZXIJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCWRhdGFbMF0gPSAxIChzdGFydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQlkYXRhWzBdID0gMCAoc3RvcCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJIAkJCWRhdGFbMF0gPSAyICAod3JpdGUgbmV3IHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgfAorfAkgICAJCQlkYXRhWzFdPSBuZXcgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAJCQkJZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID0gIDAgRElTQUJMRSAgICAgICAgICAgICAgICAgICB8Cit8CSAgICAgICAgICAgICAgICAgICAgIAkJCQkJIDEgVGltZXIgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgCQkJCQkgMiBXYXRjaCBkb2cJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlVSU5UIHVpX1RpbWVydmFsdWUyID0gMDsKKwlVU0hPUlQgdXNfVG1wVmFsdWU7CisJQllURSBiX1RtcDsKKworCWlmICgoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1dBVENIRE9HKQorCQkmJiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1RJTUVSKSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiXG53cml0ZTp0aW1lcjIgIG5vdCBjb25maWd1cmVkICIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGF0YVswXSA9PSAyKQkvLyB3cml0ZSBuZXcgdmFsdWUKKwl7CisJCWlmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgIT0gQVBDSTMxMjBfVElNRVIpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJIndyaXRlIDp0aW1lcjIgIG5vdCBjb25maWd1cmVkICBpbiBUSU1FUiBNT0RFIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChkYXRhWzFdKQorCQkJdWlfVGltZXJ2YWx1ZTIgPSBkYXRhWzFdOworCQllbHNlCisJCQl1aV9UaW1lcnZhbHVlMiA9IDA7CisJfQorCisJLy90aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25Xcml0ZVRpbWVyKGRldixkYXRhWzBdLHVpX1RpbWVydmFsdWUyKTsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgQVBDSTMxMjBfU1RBUlQ6CisKKwkJLy8gUmVzZXQgRkNfVElNRVIgQklUCisJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9TVEFUVVNfUkVHSVNURVIpOworCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID09IEFQQ0kzMTIwX1RJTUVSKQkvL3N0YXJ0IHRpbWVyCisJCXsKKwkJCS8vRW5hYmxlIFRpbWVyCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiAweDBCOworCQl9IGVsc2UJCS8vc3RhcnQgd2F0Y2ggZG9nCisJCXsKKwkJCS8vRW5hYmxlIFdhdGNoRG9nCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJKGRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyICYgMHgwQikgfAorCQkJCUFQQ0kzMTIwX0VOQUJMRV9XQVRDSERPRzsKKwkJfQorCisJCS8vZW5hYmxlIGRpc2FibGUgaW50ZXJydXB0CisJCWlmICgoZGV2cHJpdi0+Yl9UaW1lcjJJbnRlcnJ1cHQpID09IEFQQ0kzMTIwX0VOQUJMRSkgeworCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgfAorCQkJCUFQQ0kzMTIwX0VOQUJMRV9USU1FUl9JTlQ7CisJCQkvLyBzYXZlIHRoZSB0YXNrIHN0cnVjdHVyZSB0byBwYXNzIGluZm8gdG8gdXNlcgorCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCQl9IGVsc2UgeworCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfSU5UOworCQl9CisJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSA9PSBBUENJMzEyMF9USU1FUikJLy9zdGFydCB0aW1lcgorCQl7CisJCQkvL0ZvciBUaW1lciBtb2RlIGlzICBHYXRlMiBtdXN0IGJlIGFjdGl2YXRlZCAgICoqdGltZXIgc3RhcnRlZAorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCXVzX091dHB1dFJlZ2lzdGVyIHwgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMjsKKwkJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgQVBDSTMxMjBfU1RPUDoKKwkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSA9PSBBUENJMzEyMF9USU1FUikgeworCQkJLy9EaXNhYmxlIHRpbWVyCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfQ09VTlRFUjsKKwkJfSBlbHNlIHsKKwkJCS8vRGlzYWJsZSBXYXRjaERvZworCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyICYKKwkJCQlBUENJMzEyMF9ESVNBQkxFX1dBVENIRE9HOworCQl9CisJCS8vIERpc2FibGUgdGltZXIgaW50ZXJydXB0CisJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCWRldnByaXYtPgorCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSX0lOVDsKKworCQkvLyBXcml0ZSBhYm92ZSBzdGF0ZXMgIHRvIHJlZ2lzdGVyCisJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJLy8gUmVzZXQgR2F0ZSAyCisJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQ7CisJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCQkvLyBSZXNldCBGQ19USU1FUiBCSVQKKwkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisKKwkJLy8gRGlzYWJsZSB0aW1lcgorCQkvL2RldnByaXYtPmJfVGltZXIyTW9kZT1BUENJMzEyMF9ESVNBQkxFOworCisJCWJyZWFrOworCisJY2FzZSAyOgkJLy93cml0ZSBuZXcgdmFsdWUgdG8gVGltZXIKKwkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSAhPSBBUENJMzEyMF9USU1FUikgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkid3JpdGUgOnRpbWVyMiAgbm90IGNvbmZpZ3VyZWQgIGluIFRJTUVSIE1PREUiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8vIHVpX1RpbWVydmFsdWUyPWRhdGFbMV07IC8vIHBhc3NlZCBhcyBhcmd1bWVudAorCQl1c19UbXBWYWx1ZSA9CisJCQkoVVNIT1JUKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKworCQkvL0VMMjUwODA0OiBUZXN0aW5nIGlmIGJvYXJkIEFQQ0kzMTIwIGhhdmUgdGhlIG5ldyBRdWFydHogb3IgaWYgaXQgaXMgYW4gQVBDSTMwMDEKKwkJLy8gYW5kIGNhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHRpbWVyCisJCWlmICgodXNfVG1wVmFsdWUgJiAweDAwQjApID09IDB4MDBCMAorCQkJfHwgIXN0cmNtcCh0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lLCAiYXBjaTMwMDEiKSkgeworCQkJLy9DYWxjdWxhdGUgdGhlIHRpbWUgdmFsdWUgdG8gc2V0IGluIHRoZSB0aW1lcgorCQkJdWlfVGltZXJ2YWx1ZTIgPSB1aV9UaW1lcnZhbHVlMiAvIDUwOworCQl9IGVsc2UgeworCQkJLy9DYWxjdWxhdGUgdGhlIHRpbWUgdmFsdWUgdG8gc2V0IGluIHRoZSB0aW1lcgorCQkJdWlfVGltZXJ2YWx1ZTIgPSB1aV9UaW1lcnZhbHVlMiAvIDcwOworCQl9CisJCS8vV3JpdGluZyBMT1cgV09SRAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfTE9XX1dPUkQ7CisJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCisJCW91dHcoTE9XT1JEKHVpX1RpbWVydmFsdWUyKSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkvL1dyaXRpbmcgSElHSCBXT1JECisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9ISUdIX1dPUkQ7CisJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCisJCW91dHcoSElXT1JEKHVpX1RpbWVydmFsdWUyKSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsJLy8gTm90IGEgdmFsaWQgaW5wdXQKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6IGludCBpX0FQQ0kzMTIwX0luc25SZWFkVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgIHwKK3wJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKSAJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiByZWFkIHRoZSBUaW1lciB2YWx1ZSAJCQkJICAgICAgICAgICAgICAgICAJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgCQkJCQkJCQkJCQkJCSB8Cit8CQkJZm9yIFRpbWVyOglkYXRhWzBdPSBUaW1lciBjb25zdGFudAkJCQkJCSB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgIAkJZm9yIHdhdGNoZG9nOiBkYXRhWzBdPTAgKHN0aWxsIHJ1bm5pbmcpICAgICAgICAgICAgICAgICAgfAorfAkgICAgICAgICAgICAgICAJCQkgIGRhdGFbMF09MSAgKHJ1biBkb3duKSAgICAgICAgICAgIAkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzEyMF9JbnNuUmVhZFRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlCWVRFIGJfVG1wOworCVVTSE9SVCB1c19UbXBWYWx1ZSwgdXNfVG1wVmFsdWVfMiwgdXNfU3RhdHVzVmFsdWU7CisKKwlpZiAoKGRldnByaXYtPmJfVGltZXIyTW9kZSAhPSBBUENJMzEyMF9XQVRDSERPRykKKwkJJiYgKGRldnByaXYtPmJfVGltZXIyTW9kZSAhPSBBUENJMzEyMF9USU1FUikpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIlxucmVhZDp0aW1lcjIgIG5vdCBjb25maWd1cmVkICIpOworCX0KKworCS8vdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuUmVhZFRpbWVyKGRldixkYXRhKTsKKwlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID09IEFQQ0kzMTIwX1RJTUVSKSB7CisKKwkJLy9SZWFkIHRoZSBMT1cgV09SRCBvZiBUaW1lciAyIHJlZ2lzdGVyCisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9MT1dfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisKKwkJdXNfVG1wVmFsdWUgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCS8vUmVhZCB0aGUgSElHSCBXT1JEIG9mIFRpbWVyIDIgcmVnaXN0ZXIKKwkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0hJR0hfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisKKwkJdXNfVG1wVmFsdWVfMiA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisKKwkJLy8gY29tYmluaW5nIGJvdGggd29yZHMKKwkJZGF0YVswXSA9IChVSU5UKSAoKHVzX1RtcFZhbHVlKSB8ICgodXNfVG1wVmFsdWVfMikgPDwgMTYpKTsKKworCX0gZWxzZQkJCS8vIFJlYWQgd2F0Y2ggZG9nIHN0YXR1cworCXsKKworCQl1c19TdGF0dXNWYWx1ZSA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworCQl1c19TdGF0dXNWYWx1ZSA9CisJCQkoKHVzX1N0YXR1c1ZhbHVlICYgQVBDSTMxMjBfRkNfVElNRVIpID4+IDEyKSAmIDE7CisJCWlmICh1c19TdGF0dXNWYWx1ZSA9PSAxKSB7CisJCQkvLyBSRVNFVCBGQ19USU1FUiBCSVQKKwkJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9TVEFUVVNfUkVHSVNURVIpOworCQl9CisJCWRhdGFbMF0gPSB1c19TdGF0dXNWYWx1ZTsJLy8gd2hlbiBkYXRhWzBdID0gMSB0aGVuIHRoZSB3YXRjaCBkb2cgaGFzIHJ1bmRvd24KKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBESUdJVEFMIElOUFVUIFNVQkRFVklDRSAgIAkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25SZWFkRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICB8Cit8CQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZHMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgIERpZ2l0YWwgaW5wdXQgY2hhbm5lbHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zblJlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgICAgdW5zaWduZWQgaW50ICpkYXRhKQoreworCVVJTlQgdWlfQ2hhbiwgdWlfVG1wVmFsdWU7CisKKwl1aV9DaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGNoYW5uZWwgc3BlY2lmaWVkCisKKwkvL3RoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWREaWdpdGFsSW5wdXQoZGV2LHVpX0NoYW4sZGF0YSk7CisJaWYgKHVpX0NoYW4gPj0gMCAmJiB1aV9DaGFuIDw9IDMpIHsKKwkJdWlfVG1wVmFsdWUgPSAoVUlOVCkgaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisKKwkJLy8gICAgICBzaW5jZSBvbmx5IDEgY2hhbm5lbCByZXFkICB0byBicmluZyBpdCB0byBsYXN0IGJpdCBpdCBpcyByb3RhdGVkCisJCS8vICA4ICsoY2hhbiAtIDEpIHRpbWVzIHRoZW4gQU5EZWQgd2l0aCAxIGZvciBsYXN0IGJpdC4KKwkJKmRhdGEgPSAodWlfVG1wVmFsdWUgPj4gKHVpX0NoYW4gKyA4KSkgJiAxOworCQkvL3JldHVybiAwOworCX0gZWxzZSB7CisJCS8vICAgICAgY29tZWRpX2Vycm9yKGRldiwiIGNoYW4gc3BlYyB3cm9uZyIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJfQorCXJldHVybiBpbnNuLT5uOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25CaXRzRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHwKK3xzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZHMgdGhlIHZhbHVlIG9mIHRoZSBEaWdpdGFsIGlucHV0IFBvcnQgaS5lLjRjaGFubmVsc3wKK3wgICB2YWx1ZSBpcyByZXR1cm5lZCBpbiBkYXRhWzBdCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVG1wVmFsdWU7CisJdWlfVG1wVmFsdWUgPSAoVUlOVCkgaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisJLyoqKioqCXN0YXRlIG9mIDQgY2hhbm5lbHMgIGluIHRoZSAxMSwgMTAsIDksIDggICBiaXRzIG9mIHN0YXR1cyByZWcKKwkJCXJvdGF0ZWQgcmlnaHQgOCB0aW1lcyB0byBicmluZyB0aGVtIHRvIGxhc3QgZm91ciBiaXRzCisJCQlBTkRlZCB3aXRoIG94ZiBmb3IgIHZhbHVlLgorCSoqKioqLworCisJKmRhdGEgPSAodWlfVG1wVmFsdWUgPj4gOCkgJiAweGY7CisJLy90aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25CaXRzRGlnaXRhbElucHV0KGRldixkYXRhKTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgIERJR0lUQUwgT1VUUFVUIFNVQkRFVklDRSAgIAkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICB8Cit8ICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6Q29uZmlndXJlIHRoZSBvdXRwdXQgbWVtb3J5IE9OIG9yIE9GRgkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOnN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCWlmICgoZGF0YVswXSAhPSAwKSAmJiAoZGF0YVswXSAhPSAxKSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIk5vdCBhIHZhbGlkIERhdGEgISEhICxEYXRhIHNob3VsZCBiZSAxIG9yIDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBUENJMzEyMF9FTkFCTEU7CisKKwl9IGVsc2UgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJCWRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyID0gMDsKKwl9CisJaWYgKCFkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cykgeworCQl1aV9UZW1wID0gMDsKKworCX0JCQkvL2lmKCFkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgIHwKK3wJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiB3cml0ZSBkaWF0YWwgb3V0cHV0IHBvcnQJCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAJCQkJCQkJCQkJIHwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICBWYWx1ZSB0byBiZSB3cml0dGVuCisgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICA6MSBTZXQgZGlnaXRhbCBvL3AgT04KKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAyIFNldCBkaWdpdGFsIG8vcCBPRkYgd2l0aCBtZW1vcnkgT04KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25CaXRzRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKQoreworCWlmICgoZGF0YVswXSA+IHRoaXNfYm9hcmQtPmlfRG9NYXhkYXRhKSB8fCAoZGF0YVswXSA8IDApKSB7CisKKwkJY29tZWRpX2Vycm9yKGRldiwgIkRhdGEgaXMgbm90IHZhbGlkICEhISBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGRhdGFbMV0pIHsKKwljYXNlIDE6CisJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCA0KSB8IGRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJZGF0YVswXSA9IGRhdGFbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgcGFyYW1ldGVyIHBhc3NlZCBpcyBpbiBlcnJvciBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gc3dpdGNoKGRhdGFbMV0pCisJb3V0YihkYXRhWzBdLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9ESUdJVEFMX09VVFBVVCk7CisKKwlkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlciA9IGRhdGFbMF0gJiAweEYwOworCisJcmV0dXJuIGluc24tPm47CisKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zbldyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHwKK3xzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAJCQkgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGUgZGlnaWF0bCBvdXRwdXQJCQkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCSAJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgIFZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgIDoxIFNldCBkaWdpdGFsIG8vcCBPTgorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgIDIgU2V0IGRpZ2l0YWwgby9wIE9GRiB3aXRoIG1lbW9yeSBPTgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zbldyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisKKwlVSU5UIHVpX1RlbXAxOworCisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKworCWlmICgoZGF0YVswXSAhPSAwKSAmJiAoZGF0YVswXSAhPSAxKSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIk5vdCBhIHZhbGlkIERhdGEgISEhICxEYXRhIHNob3VsZCBiZSAxIG9yIDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKCh1aV9Ob09mQ2hhbm5lbCA+ICh0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbCAtIDEpKQorCQl8fCAodWlfTm9PZkNoYW5uZWwgPCAwKSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIlRoaXMgYm9hcmQgZG9lc24ndCBoYXZlIHNwZWNpZmllZCBjaGFubmVsICEhISBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGRhdGFbMV0pIHsKKwljYXNlIDE6CisJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCk7CisvL0VTMDUgICAgICAgICAgICAgICAgICAgZGF0YVswXT0oZGF0YVswXTw8NCl8dWlfVGVtcDsKKwkJZGF0YVswXSA9IChkYXRhWzBdIDw8IDQpIHwgZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXI7CisJCWJyZWFrOworCisJY2FzZSAyOgorCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDE7CisJCXVpX1RlbXAxID0gMTsKKwkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCA0OworLy9FUzA1ICAgICAgICAgICAgICAgICAgIHVpX1RlbXA9dWlfVGVtcHx1aV9UZW1wMTsKKwkJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgfCB1aV9UZW1wMTsKKworCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIF4gMHhmOworCQlkYXRhWzBdID0gZGF0YVswXSA8PCA0OworLy9FUzA1ICAgICAgICAgICAgICAgICAgIGRhdGFbMF09ZGF0YVswXSYgdWlfVGVtcDsKKwkJZGF0YVswXSA9IGRhdGFbMF0gJiBkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblRoZSBwYXJhbWV0ZXIgcGFzc2VkIGlzIGluIGVycm9yIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBzd2l0Y2goZGF0YVsxXSkKKwlvdXRiKGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX0RJR0lUQUxfT1VUUFVUKTsKKworLy9FUzA1ICAgICAgICB1aV9UZW1wPWRhdGFbMF0gJiAweGYwOworCWRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyID0gZGF0YVswXSAmIDB4ZjA7CisJcmV0dXJuIChpbnNuLT5uKTsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOQUxPRyBPVVRQVVQgU1VCREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zbldyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAorfHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQkJCSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSAgYW5hbG9nIG91dHB1dCAgIAkJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25Xcml0ZUFuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisJVUlOVCB1aV9SYW5nZSwgdWlfQ2hhbm5lbDsKKwlVU0hPUlQgdXNfVG1wVmFsdWU7CisKKwl1aV9SYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvL3RoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlQW5hbG9nT3V0cHV0KGRldiwgdWlfUmFuZ2UsIHVpX0NoYW5uZWwsZGF0YVswXSk7CisJaWYgKHVpX1JhbmdlKQkJLy8gaWYgMSB0aGVuIHVuaXBvbGFyCisJeworCisJCWlmIChkYXRhWzBdICE9IDApCisJCQlkYXRhWzBdID0KKwkJCQkoKCgodWlfQ2hhbm5lbCAmIDB4MDMpIDw8IDE0KSAmIDB4QzAwMCkgfCAoMSA8PAorCQkJCQkxMykgfCAoZGF0YVswXSArIDgxOTEpKTsKKwkJZWxzZQorCQkJZGF0YVswXSA9CisJCQkJKCgoKHVpX0NoYW5uZWwgJiAweDAzKSA8PCAxNCkgJiAweEMwMDApIHwgKDEgPDwKKwkJCQkJMTMpIHwgODE5Mik7CisKKwl9IGVsc2UJCQkvLyBpZiAwIHRoZW4gICBiaXBvbGFyCisJeworCQlkYXRhWzBdID0KKwkJCSgoKCh1aV9DaGFubmVsICYgMHgwMykgPDwgMTQpICYgMHhDMDAwKSB8ICgwIDw8IDEzKSB8CisJCQlkYXRhWzBdKTsKKworCX0KKworCS8vb3V0IHB1dCBuIHZhbHVlcyBhdCB0aGUgZ2l2ZW4gY2hhbm5lbC4KKwkvLyBydF9wcmludGsoIlxud2FpdGluZyBmb3IgREFfUkVBRFkgQklUIik7CisJZG8JCQkvL1dhaXRpbmcgb2YgREFfUkVBRFkgQklUCisJeworCQl1c19UbXBWYWx1ZSA9CisJCQkoKFVTSE9SVCkgaW53KGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTMxMjBfUkRfU1RBVFVTKSkgJiAweDAwMDE7CisJfSB3aGlsZSAodXNfVG1wVmFsdWUgIT0gMHgwMDAxKTsKKworCWlmICh1aV9DaGFubmVsIDw9IDMpCisJCS8vIGZvciBjaGFubmVsIDAtMyBvdXQgYXQgIHRoZSByZWdpc3RlciAxICh3ckRhYzEtOCkKKwkJLy8gZGF0YVtpXSB0eXBlY2FzdGVkIHRvIHVzaG9ydCBzaW5jZSAgd29yZCB3cml0ZSBpcyB0byBiZSBkb25lCisJCW91dHcoKFVTSE9SVCkgZGF0YVswXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX0FOQUxPR19PVVRQVVRfMSk7CisJZWxzZQorCQkvLyBmb3IgY2hhbm5lbCA0LTcgb3V0IGF0IHRoZSByZWdpc3RlciAyICh3ckRhYzUtOCkKKwkJLy9kYXRhW2ldIHR5cGVjYXN0ZWQgdG8gdXNob3J0IHNpbmNlICB3b3JkIHdyaXRlIGlzIHRvIGJlIGRvbmUKKwkJb3V0dygoVVNIT1JUKSBkYXRhWzBdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8yKTsKKworCXJldHVybiBpbnNuLT5uOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZDVkODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmgKQEAgLTAsMCArMSwyNDEgQEAKKworLy8gaHdkcnZfYXBjaTMxMjAuaAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvLyBjb21lZGkgcmVsYXRlZCBkZWZpbmVzCisKKy8vQU5BTE9HIElOUFVUIFJBTkdFCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTMxMjBfYWkgPSB7IDgsIHsKKwkJCQkJCSAgICAgQklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDUpLAorCQkJCQkJICAgICBCSVBfUkFOR0UoMiksCisJCQkJCQkgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDUpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMiksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgxKQorCQkJCQkJICAgICB9Cit9OworCisvLyBBTkFMT0cgT1VUUFVUIFJBTkdFCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTMxMjBfYW8gPSB7IDIsIHsKKwkJCQkJCSAgICAgQklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEwKQorCQkJCQkJICAgICB9Cit9OworCisjZGVmaW5lIEFQQ0kzMTIwX0JJUE9MQVJfUkFOR0VTCTQJLy8gdXNlZCBmb3IgdGVzdCBvbiBtaXh0dXJlIG9mIEJJUC9VTkkgcmFuZ2VzCisKKyNkZWZpbmUgQVBDSTMxMjBfQk9BUkRfVkVORE9SX0lEICAgICAgICAgICAgICAgICAweDEwRTgKKyNkZWZpbmUgQVBDSTMxMjBfQUREUkVTU19SQU5HRSAgICAgICAgICAgIAkJCTE2CisKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIEFQQ0kzMTIwX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBUENJMzEyMF9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSAgICAgQVBDSTMxMjBfRU9DX01PREUgICAgICAgICAxCisjZGVmaW5lICAgICBBUENJMzEyMF9FT1NfTU9ERSAgICAgICAgIDIKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0RNQV9NT0RFICAgICAgICAgMworCisvL0RJR0lUQUwgSU5QVVQtT1VUUFVUIERFRklORQorCisjZGVmaW5lIEFQQ0kzMTIwX0RJR0lUQUxfT1VUUFVUICAgICAgICAgICAgICAgICAgCTB4MEQKKyNkZWZpbmUgQVBDSTMxMjBfUkRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAJMHgwMgorI2RlZmluZSBBUENJMzEyMF9SRF9GSUZPICAgICAgICAgICAgICAgICAgICAgCQkweDAwCisKKy8vIGRpZ2l0YWwgb3V0cHV0IGluc25fd3JpdGUgT04gL09GRiBzZWxlY3Rpb24KKyNkZWZpbmUJQVBDSTMxMjBfU0VUNERJR0lUQUxPVVRQVVRPTgkJCQkxCisjZGVmaW5lIEFQQ0kzMTIwX1NFVDRESUdJVEFMT1VUUFVUT0ZGCQkJCTAKKworLy8gYW5hbG9nIG91dHB1dCBTRUxFQ1QgQklUCisjZGVmaW5lIEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzEgICAweDAwMDAKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfMiAgIDB4NDAwMAorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF8zICAgMHg4MDAwCisjZGVmaW5lIEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzQgICAweEMwMDAKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNSAgIDB4MDAwMAorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF82ICAgMHg0MDAwCisjZGVmaW5lIEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzcgICAweDgwMDAKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfOCAgIDB4QzAwMAorCisvLyBFbmFibGUgZXh0ZXJuYWwgdHJpZ2dlciBiaXQgaW4gbldyQWRkcmVzcworI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfRVhUX1RSSUdHRVIgICAgMHg4MDAwCisKKy8vQU5BTE9HIE9VVFBVVCBBTkQgSU5QVVQgREVGSU5FCisjZGVmaW5lIEFQQ0kzMTIwX1VOSVBPTEFSIDB4ODAJLy8kJCBSQU0gc2VxdWVuY2UgcG9sYXJpdHkgQklUCisjZGVmaW5lIEFQQ0kzMTIwX0JJUE9MQVIgIDB4MDAJLy8kJCBSQU0gc2VxdWVuY2UgcG9sYXJpdHkgQklUCisjZGVmaW5lIEFQQ0kzMTIwX0FOQUxPR19PVVRQVVRfMSAweDA4CS8vIChBRERSRVNTICkKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8yIDB4MEEJLy8gKEFERFJFU1MgKQorI2RlZmluZSBBUENJMzEyMF8xX0dBSU4gICAgICAgICAgICAgIDB4MDAJLy8kJCBSQU0gc2VxdWVuY2UgR2FpbiBCaXRzIGZvciBnYWluIDEKKyNkZWZpbmUgQVBDSTMxMjBfMl9HQUlOICAgICAgICAgICAgICAweDEwCS8vJCQgUkFNIHNlcXVlbmNlIEdhaW4gQml0cyBmb3IgZ2FpbiAyCisjZGVmaW5lIEFQQ0kzMTIwXzVfR0FJTiAgICAgICAgICAgICAgMHgyMAkvLyQkIFJBTSBzZXF1ZW5jZSBHYWluIEJpdHMgZm9yIGdhaW4gNQorI2RlZmluZSBBUENJMzEyMF8xMF9HQUlOICAgICAgICAgICAgIDB4MzAJLy8kJCBSQU0gc2VxdWVuY2UgR2FpbiBCaXRzIGZvciBnYWluIDEwCisjZGVmaW5lIEFQQ0kzMTIwX1NFUV9SQU1fQUREUkVTUyAgICAgICAgMHgwNgkvLyQkIEVBUkxJRVIgTkFNRUQgQVBDSTMxMjBfRklGT19BRERSRVNTCisjZGVmaW5lIEFQQ0kzMTIwX1JFU0VUX0ZJRk8gICAgICAgICAgMHgwQwkvLyhBRERSRVNTKQorI2RlZmluZSBBUENJMzEyMF9USU1FUl8wX01PREVfMiAgICAgIDB4MDEJLy8kJCBCaXRzIGZvciB0aW1lciBtb2RlCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzBfTU9ERV80ICAgICAgIDB4MgorI2RlZmluZSBBUENJMzEyMF9TRUxFQ1RfVElNRVJfMF9XT1JEIDB4MDAKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMCAgICAgMHgxMDAwCS8vJCRHYXRlYml0IDAgaW4gbldyQWRkcmVzcworI2RlZmluZSBBUENJMzEyMF9DTEVBUl9QUiAgICAgICAgICAweEYwRkYKKyNkZWZpbmUgQVBDSTMxMjBfQ0xFQVJfUEEgICAgICAgICAgMHhGRkYwCisjZGVmaW5lIEFQQ0kzMTIwX0NMRUFSX1BBX1BSICAgICAgIChBUENJMzEyMF9DTEVBUl9QUiAmIEFQQ0kzMTIwX0NMRUFSX1BBKQorCisvLyBuV3JNb2RlX1NlbGVjdAorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfU0NBTiAgICAgICAgICAweDgJLy8kJCBiaXQgaW4gbldyTW9kZV9TZWxlY3QKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9TQ0FOICAgICAgKH5BUENJMzEyMF9FTkFCTEVfU0NBTikKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX0VPU19JTlQgICAgICAgMHgyCS8vJCQgYml0IGluIG5Xck1vZGVfU2VsZWN0CisKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9FT1NfSU5UICAgKH5BUENJMzEyMF9FTkFCTEVfRU9TX0lOVCkKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX0VPQ19JTlQgICAgICAgMHgxCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfRU9DX0lOVCAgICh+QVBDSTMxMjBfRU5BQkxFX0VPQ19JTlQpCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfQUxMX0lOVEVSUlVQVF9XSVRIT1VUX1RJTUVSICAgKEFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVCAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9DX0lOVCkKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9BTExfSU5URVJSVVBUICAgKEFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfSU5UICYgQVBDSTMxMjBfRElTQUJMRV9FT1NfSU5UICYgQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UKQorCisvL3N0YXR1cyByZWdpc3RlciBiaXRzCisjZGVmaW5lIEFQQ0kzMTIwX0VPQyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBBUENJMzEyMF9FT1MgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKworLy8gc29mdHdhcmUgdHJpZ2dlciBkdW1teSByZWdpc3RlcgorI2RlZmluZSBBUENJMzEyMF9TVEFSVF9DT05WRVJTSU9OICAgICAgICAweDAyCS8vKEFERFJFU1MpCisKKy8vVElNRVIgREVGSU5FCisjZGVmaW5lIEFQQ0kzMTIwX1FVQVJUWl9BCQkJCSAgNzAKKyNkZWZpbmUgQVBDSTMxMjBfUVVBUlRaX0IJCQkJICA1MAorI2RlZmluZSBBUENJMzEyMF9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQQ0kzMTIwX1dBVENIRE9HICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMzEyMF9USU1FUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9USU1FUjIgICAgICAgICAgICAgICAgICAgIDB4NDAwMAkvLyQkIGdhdGViaXQgMiBpbiBuV3JBZGRyZXNzCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIyICAgICAgICAgICAgICAgICAgICh+QVBDSTMxMjBfRU5BQkxFX1RJTUVSMikKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RJTUVSX0lOVCAgICAgICAgICAgICAgICAgMHgwNAkvLyQkIEVOQUlSUV9GQ19CaXQgaW4gbldyTW9kZVNlbGVjdAorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX1RJTUVSX0lOVCAgICAgICAgICAgICAgICAofkFQQ0kzMTIwX0VOQUJMRV9USU1FUl9JTlQpCisjZGVmaW5lIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUICAgICAgICAgICAgICAgIDB4MEUJLy8gKEFERFJFU1MpCisjZGVmaW5lIEFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQgIDB4MDAKKyNkZWZpbmUgQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzFfV09SRCAgMHgwMQorI2RlZmluZSBBUENJMzEyMF9USU1FUl8xX01PREVfMiAgICAgICAweDQKKworLy8kJCBCSVQgRk9SIE1PREUgSU4gbkNzVGltZXJDdHIxCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzJfTU9ERV8wICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBBUENJMzEyMF9USU1FUl8yX01PREVfMiAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzJfTU9ERV81ICAgICAgICAgICAgICAgICAgIDB4MzAKKworLy8kJCBCSVQgRk9SIE1PREUgSU4gbkNzVGltZXJDdHIwCisjZGVmaW5lIEFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0xPV19XT1JEICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfSElHSF9XT1JEICAgICAgICAgMHgwMworCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSX0NSVDAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQJLy8oQUREUkVTUyBmb3IgY0NzVGltZXJDdHIwKQorI2RlZmluZSBBUENJMzEyMF9USU1FUl9DUlQxICAgICAgICAgICAgICAgICAgICAgICAweDBDCS8vKEFERFJFU1MgZm9yIGNDc1RpbWVyQ3RyMSkKKworI2RlZmluZSBBUENJMzEyMF9USU1FUl9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAweDA0CS8vQUREUkVTUyBmb3IgbkNzVGltZXJXZXJ0CisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgIDB4MEQJLy9BRERSRVNTIGZvciBkZWxldGUgdGltZXIgMiBpbnRlcnJ1cHQKKyNkZWZpbmUgQVBDSTMxMjBfUkRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgkvL0FERFJFU1MKKyNkZWZpbmUgQVBDSTMxMjBfV1JfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMAkvL0FERFJFU1MKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1dBVENIRE9HICAgICAgICAgICAgICAgICAgMHgyMAkvLyQkQklUIGluIG5Xck1vZGVfU2VsZWN0CisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfV0FUQ0hET0cgICAgICAgICAgICAgICAgICh+QVBDSTMxMjBfRU5BQkxFX1dBVENIRE9HKQorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfVElNRVJfQ09VTlRFUiAgICAJCSAgMHgxMAkvLyQkQklUIGluIG5Xck1vZGVfU2VsZWN0CisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfQ09VTlRFUiAgICAgICAgICAgICh+QVBDSTMxMjBfRU5BQkxFX1RJTUVSX0NPVU5URVIpCisjZGVmaW5lIEFQQ0kzMTIwX0ZDX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAkvL2JpdCBpbiAgc3RhdHVzIHJlZ2lzdGVyCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9USU1FUjAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfVElNRVIxICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMiAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIwCQkJICAgICAgICAgICh+QVBDSTMxMjBfRU5BQkxFX1RJTUVSMCkKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9USU1FUjEJCSAgICAgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfVElNRVIxKQorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMgkgICAgICAgICAgICAgICAgICAofkFQQ0kzMTIwX0VOQUJMRV9USU1FUjIpCisKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVIyX1NFTEVDVF9FT1MgICAgICAgICAgICAgICAgMHhDMAkvLyBBRERFRCBvbiAyMC02CisjZGVmaW5lIEFQQ0kzMTIwX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgIDMJLy8gb24gMjAtNgorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX0FMTF9USU1FUiAgICAgICAgICAgICAgICAoIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIwICYgQVBDSTMxMjBfRElTQUJMRV9USU1FUjEgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMiApCS8vIG9uIDIwLTYKKworI2RlZmluZSBNQVhfQU5BTE9HSU5QVVRfQ0hBTk5FTFMgICAgMzIKKwordHlwZWRlZiBzdHJ1Y3QgeworCUJZVEUgYl9UeXBlOwkJLyogRU9DIG9yIEVPUyAqLworCUJZVEUgYl9JbnRlcnJ1cHRGbGFnOwkvKiBJbnRlcnJ1cHQgdXNlIG9yIG5vdCAgICAgICAgICAgICAgICAgICAgKi8KKwlVSU5UIHVpX0NvbnZlcnRUaW1pbmc7CS8qIFNlbGVjdGlvbiBvZiB0aGUgY29udmVydGlvbiB0aW1lICAgICAgICAqLworCUJZVEUgYl9OYnJPZkNoYW5uZWw7CS8qIE51bWJlciBvZiBjaGFubmVsIHRvIHJlYWQgICAgICAgICAgICAgICAqLworCVVJTlQgdWlfQ2hhbm5lbExpc3RbTUFYX0FOQUxPR0lOUFVUX0NIQU5ORUxTXTsJLyogTnVtYmVyIG9mIHRoZSBjaGFubmVsIHRvIGJlIHJlYWQgICAgICAgICovCisJVUlOVCB1aV9SYW5nZUxpc3RbTUFYX0FOQUxPR0lOUFVUX0NIQU5ORUxTXTsJLyogR2FpbiBvZiBlYWNoIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICovCisKK30gc3RyX0FuYWxvZ1JlYWRJbmZvcm1hdGlvbjsKKworLy8gRnVuY3Rpb24gRGVjbGFyYXRpb24gRm9yIEFQQ0ktMzEyMAorCisvLyBJbnRlcm5hbCBmdW5jdGlvbnMKK2ludCBpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJaW50IG5fY2hhbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCwgY2hhciBjaGVjayk7CitpbnQgaV9BUENJMzEyMF9FeHR0cmlnRW5hYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworaW50IGlfQVBDSTMxMjBfRXh0dHJpZ0Rpc2FibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitpbnQgaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworaW50IGlfQVBDSTMxMjBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitpbnQgaV9BUENJMzEyMF9DeWNsaWNBbmFsb2dJbnB1dChpbnQgbW9kZSwgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworLy8gSW50ZXJydXB0IGZ1bmN0aW9ucwordm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKy8vVVBEQVRFLTAuNy41Ny0+MC43LjY4IHZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHREbWFNb3ZlQmxvY2sxNmJpdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHNob3J0ICpkbWEsc2hvcnQgKmRhdGEsaW50IG4pOwordm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICBzaG9ydCAqZG1hX2J1ZmZlciwKKwkJCQkJICAgdW5zaWduZWQgaW50IG51bV9zYW1wbGVzKTsKK2ludCBpX0FQQ0kzMTIwX0ludGVycnVwdEhhbmRsZUVvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3ZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHREbWEoaW50IGlycSwgdm9pZCAqZCk7CisKKy8vIFRJTUVSCisKK2ludCBpX0FQQ0kzMTIwX0luc25Db25maWdUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0luc25SZWFkVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9ESQorLy8gZm9yIGRpIHJlYWQKKworaW50IGlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0luc25SZWFkRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vRE8KKy8vaW50IGlfQVBDSTMxMjBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgZGF0YSk7CitpbnQgaV9BUENJMzEyMF9JbnNuQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMxMjBfSW5zbldyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vQU8KKy8vaW50IGlfQVBDSTMxMjBfV3JpdGUxQW5hbG9nVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixVSU5UIHVpX1JhbmdlLFVJTlQgdWlfQ2hhbm5lbCxVSU5UIGRhdGEgKTsKK2ludCBpX0FQQ0kzMTIwX0luc25Xcml0ZUFuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9BSSBIQXJkd2FyZSBsYXllcgorCitpbnQgaV9BUENJMzEyMF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMzEyMF9JbnNuUmVhZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitpbnQgaV9BUENJMzEyMF9Db21tYW5kQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworLy9pbnQgaV9BUENJMzEyMF9DYW5jZWxBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitpbnQgaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjY2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMKQEAgLTAsMCArMSwzNjQyIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktMzIwMCAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTMyMDAuY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEhhcmR3YXJlIExheWVyIEFjY2VzIEZvciBBUENJLTMyMDAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMDIuMDcuMDQgfCBKLiBLcmF1dGggfCBNb2RpZmljYXRpb24gZnJvbSB0aGUgZHJpdmVyIGluIG9yZGVyIHRvICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IGNvcnJlY3Qgc29tZSBlcnJvcnMgd2hlbiB1c2luZyBzZXZlcmFsIGJvYXJkcy4gfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDI2LjEwLjA0IHwgSi4gS3JhdXRoIHwgLSBVcGRhdGUgZm9yIENPTUVESSAwLjcuNjggICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAtIFJlYWQgZWVwcm9tIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IC0gQXBwZW5kIEFQQ0ktMzMwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMzIwMC5oIgorLy9CZWdpbiBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisjaW5jbHVkZSAiYWRkaV9hbWNjX1M1OTIwLmgiCisvLyNkZWZpbmUgUFJJTlRfSU5GTworCisvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKy8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKy8qCisgIElOVCBpX0NKQ0F2YWlsYWJsZT0xOworICBJTlQgaV9DSkNQb2xhcml0eT0wOworICBJTlQgaV9DSkNHYWluPTI7Ly9jaGFuZ2VkIGZyb20gMCB0byAyCisgIElOVCBpX0ludGVycnVwdEZsYWc9MDsKKyAgSU5UIGlfQURESURBVEFQb2xhcml0eTsKKyAgSU5UIGlfQURESURBVEFHYWluOworICBJTlQgaV9BdXRvQ2FsaWJyYXRpb249MDsgICAvLzogYXV0byBjYWxpYnJhdGlvbgorICBJTlQgaV9BRERJREFUQUNvbnZlcnNpb25UaW1lOworICBJTlQgaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdDsKKyAgSU5UIGlfQURESURBVEFUeXBlOworICBJTlQgaV9DaGFubmVsTm87CisgIElOVCBpX0NoYW5uZWxDb3VudD0wOworICBJTlQgaV9TY2FuVHlwZTsKKyAgSU5UIGlfRmlyc3RDaGFubmVsOworICBJTlQgaV9MYXN0Q2hhbm5lbDsKKyAgSU5UIGlfU3VtPTA7CisgIElOVCBpX09mZnNldDsKKyAgVUlOVCB1aV9DaGFubmVsX251bT0wOworICBzdGF0aWMgaW50IGlfQ291bnQ9MDsKKyAgSU5UIGlfSW5pdGlhbGlzZWQ9MDsKKyAgVUlOVCB1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbOTZdOyAvL0J1ZmZlcgorKi8KK3N0cl9Cb2FyZEluZm9zIHNfQm9hcmRJbmZvc1sxMDBdOwkvLyAxMDAgd2lsbCBiZSB0aGUgbWF4IG51bWJlciBvZiBib2FyZHMgdG8gYmUgdXNlZAorLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworLy9CZWdpbiBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBGdW5jdGlvbiAgIE5hbWUgICA6IElOVCBpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5UICAgIGlfTmJPZldvcmRzVG9SZWFkLCAgICAgICAgICAgICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCAgICAgICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzLCAgICAgICAgICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdPUkQgcHdfRGF0YVJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgd29yZCBmcm9tIHRoZSA1OTIwIGVlcHJvbS4gICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBJbnB1dCBQYXJhbWV0ZXJzICA6IElOVCAgICBpX05iT2ZXb3Jkc1RvUmVhZCA6IE5ici4gb2Ygd29yZCB0byByZWFkICAgICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgIERXT1JEIGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IEFkZHJlc3Mgb2YgdGhlIGVlcHJvbSB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgIFdPUkQgICB3X0VlcHJvbVN0YXJ0QWRkcmVzcyA6IEVlcHJvbSBzdHJhdCBhZGRyZXNzICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBXT1JEIHB3X0RhdGFSZWFkIDogUmVhZCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKy8qfCBSZXR1cm4gVmFsdWUgICAgICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KKworSU5UIGlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oSU5UIGlfTmJPZldvcmRzVG9SZWFkLAorCURXT1JEIGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwlXT1JEIHdfRWVwcm9tU3RhcnRBZGRyZXNzLCBQV09SRCBwd19EYXRhUmVhZCkKK3sKKwlEV09SRCBkd19lZXByb21fYnVzeSA9IDA7CisJSU5UIGlfQ291bnRlciA9IDA7CisJSU5UIGlfV29yZENvdW50ZXI7CisJSU5UIGk7CisJQllURSBwYl9SZWFkQnl0ZVsxXTsKKwlCWVRFIGJfUmVhZExvd0J5dGUgPSAwOworCUJZVEUgYl9SZWFkSGlnaEJ5dGUgPSAwOworCUJZVEUgYl9TZWxlY3RlZEFkZHJlc3NMb3cgPSAwOworCUJZVEUgYl9TZWxlY3RlZEFkZHJlc3NIaWdoID0gMDsKKwlXT1JEIHdfUmVhZFdvcmQgPSAwOworCisJZm9yIChpX1dvcmRDb3VudGVyID0gMDsgaV9Xb3JkQ291bnRlciA8IGlfTmJPZldvcmRzVG9SZWFkOworCQlpX1dvcmRDb3VudGVyKyspIHsKKwkJZG8geworCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQl9CisJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJZm9yIChpX0NvdW50ZXIgPSAwOyBpX0NvdW50ZXIgPCAyOyBpX0NvdW50ZXIrKykgeworCQkJYl9TZWxlY3RlZEFkZHJlc3NMb3cgPSAod19FZXByb21TdGFydEFkZHJlc3MgKyBpX0NvdW50ZXIpICUgMjU2OwkvL1JlYWQgdGhlIGxvdyA4IGJpdCBwYXJ0CisJCQliX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAod19FZXByb21TdGFydEFkZHJlc3MgKyBpX0NvdW50ZXIpIC8gMjU2OwkvL1JlYWQgdGhlIGhpZ2ggOCBiaXQgcGFydAorCisJCQkvL1NlbGVjdCB0aGUgbG9hZCBsb3cgYWRkcmVzcyBtb2RlCisJCQlvdXRiKE5WQ01EX0xPQURfTE9XLAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIEFNQ0NfT1BfUkVHX01DU1IgKworCQkJCTMpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vTG9hZCB0aGUgbG93IGFkZHJlc3MKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NMb3csCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMik7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9TZWxlY3QgdGhlIGxvYWQgaGlnaCBhZGRyZXNzIG1vZGUKKwkJCW91dGIoTlZDTURfTE9BRF9ISUdILAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIEFNQ0NfT1BfUkVHX01DU1IgKworCQkJCTMpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vTG9hZCB0aGUgaGlnaCBhZGRyZXNzCisJCQlvdXRiKGJfU2VsZWN0ZWRBZGRyZXNzSGlnaCwKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkyKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1NlbGVjdCB0aGUgUkVBRCBtb2RlCisJCQlvdXRiKE5WQ01EX0JFR0lOX1JFQUQsCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9SZWFkIGRhdGEgaW50byB0aGUgRUVQUk9NCisJCQkqcGJfUmVhZEJ5dGUgPQorCQkJCWluYihkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCUFNQ0NfT1BfUkVHX01DU1IgKyAyKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1NlbGVjdCB0aGUgdXBwZXIgYWRkcmVzcyBwYXJ0CisJCQlpZiAoaV9Db3VudGVyID09IDApIHsKKwkJCQliX1JlYWRMb3dCeXRlID0gcGJfUmVhZEJ5dGVbMF07CisJCQl9IGVsc2UgeworCQkJCWJfUmVhZEhpZ2hCeXRlID0gcGJfUmVhZEJ5dGVbMF07CisJCQl9CisKKwkJCS8vU2xlZXAKKwkJCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSA7CisKKwkJfQorCQl3X1JlYWRXb3JkID0KKwkJCShiX1JlYWRMb3dCeXRlIHwgKCgodW5zaWduZWQgc2hvcnQpYl9SZWFkSGlnaEJ5dGUpICoKKwkJCQkyNTYpKTsKKworCQlwd19EYXRhUmVhZFtpX1dvcmRDb3VudGVyXSA9IHdfUmVhZFdvcmQ7CisKKwkJd19FZXByb21TdGFydEFkZHJlc3MgKz0gMjsJLy8gdG8gcmVhZCB0aGUgbmV4dCB3b3JkCisKKwl9CQkJLy8gZm9yICguLi4pIGlfTmJPZldvcmRzVG9SZWFkCisJcmV0dXJuICgwKTsKK30KKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IEZ1bmN0aW9uICAgTmFtZSAgIDogdm9pZCB2X0dldEFQQ0kzMjAwRWVwcm9tQ2FsaWJyYXRpb25WYWx1ZSAodm9pZCkgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBjYWxpYnJhdGlvbiB2YWx1ZSBmcm9tIHRoZSBBUENJLTMyMDAgZWVwcm9tLiAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IElucHV0IFBhcmFtZXRlcnMgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworCit2b2lkIHZfR2V0QVBDSTMyMDBFZXByb21DYWxpYnJhdGlvblZhbHVlKERXT1JEIGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwlzdHJfQm9hcmRJbmZvcyAqIEJvYXJkSW5mb3JtYXRpb25zKQoreworCVdPUkQgd19BbmFsb2dJbnB1dE1haW5IZWFkZXJBZGRyZXNzOworCVdPUkQgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3M7CisJV09SRCB3X051bWJlck9mTW9kdWxzID0gMDsKKwlXT1JEIHdfQ3VycmVudFNvdXJjZXNbMl07CisJV09SRCB3X01vZHVsQ291bnRlciA9IDA7CisJV09SRCB3X0ZpcnN0SGVhZGVyU2l6ZSA9IDA7CisJV09SRCB3X051bWJlck9mSW5wdXRzID0gMDsKKwlXT1JEIHdfQ0pDRmxhZyA9IDA7CisJV09SRCB3X051bWJlck9mR2FpblZhbHVlID0gMDsKKwlXT1JEIHdfU2luZ2xlSGVhZGVyQWRkcmVzcyA9IDA7CisJV09SRCB3X1NpbmdsZUhlYWRlclNpemUgPSAwOworCVdPUkQgd19JbnB1dCA9IDA7CisJV09SRCB3X0dhaW5GYWN0b3JBZGRyZXNzID0gMDsKKwlXT1JEIHdfR2FpbkZhY3RvclZhbHVlWzJdOworCVdPUkQgd19HYWluSW5kZXggPSAwOworCVdPUkQgd19HYWluVmFsdWUgPSAwOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqIEdldCB0aGUgQW5hbG9nIGlucHV0IGhlYWRlciBhZGRyZXNzICoqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbSgxLAkvL2lfTmJPZldvcmRzVG9SZWFkCisJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgMHgxMTYsCS8vd19FZXByb21TdGFydEFkZHJlc3M6IEFuYWxvZyBpbnB1dCBoZWFkZXIgYWRkcmVzcworCQkmd19BbmFsb2dJbnB1dE1haW5IZWFkZXJBZGRyZXNzKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqIENvbXB1dGUgdGhlIHJlYWwgYW5hbG9nIGlucHV0IGFkZHJlc3MgKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXdfQW5hbG9nSW5wdXRNYWluSGVhZGVyQWRkcmVzcyA9IHdfQW5hbG9nSW5wdXRNYWluSGVhZGVyQWRkcmVzcyArIDB4MTAwOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKiBHZXQgdGhlIG51bWJlciBvZiBtb2R1bHMgKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbSgxLAkvL2lfTmJPZldvcmRzVG9SZWFkCisJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dE1haW5IZWFkZXJBZGRyZXNzICsgMHgwMiwJLy93X0VlcHJvbVN0YXJ0QWRkcmVzczogTnVtYmVyIG9mIGNvbnBvbm1lbnQKKwkJJndfTnVtYmVyT2ZNb2R1bHMpOworCisJZm9yICh3X01vZHVsQ291bnRlciA9IDA7IHdfTW9kdWxDb3VudGVyIDwgd19OdW1iZXJPZk1vZHVsczsKKwkJd19Nb2R1bENvdW50ZXIrKykgeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIENvbXB1dGUgdGhlIGNvbXBvbmVudCBhZGRyZXNzICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl3X0FuYWxvZ0lucHV0Q29tcG9uZW50QWRkcmVzcyA9CisJCQl3X0FuYWxvZ0lucHV0TWFpbkhlYWRlckFkZHJlc3MgKworCQkJKHdfRmlyc3RIZWFkZXJTaXplICogd19Nb2R1bENvdW50ZXIpICsgMHgwNDsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCBmaXJzdCBoZWFkZXIgc2l6ZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MsCS8vIEFkZHJlc3Mgb2YgdGhlIGZpcnN0IGhlYWRlcgorCQkJJndfRmlyc3RIZWFkZXJTaXplKTsKKworCQl3X0ZpcnN0SGVhZGVyU2l6ZSA9IHdfRmlyc3RIZWFkZXJTaXplID4+IDQ7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCBudW1iZXIgb2YgaW5wdXRzICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbSgxLAkvL2lfTmJPZldvcmRzVG9SZWFkCisJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHdfQW5hbG9nSW5wdXRDb21wb25lbnRBZGRyZXNzICsgMHgwNiwJLy8gTnVtYmVyIG9mIGlucHV0cyBmb3IgdGhlIGZpcnN0IG1vZHVsCisJCQkmd19OdW1iZXJPZklucHV0cyk7CisKKwkJd19OdW1iZXJPZklucHV0cyA9IHdfTnVtYmVyT2ZJbnB1dHMgPj4gNDsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIFJlYWQgdGhlIENKQyBmbGFnICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyAweDA4LAkvLyBDSkMgZmxhZworCQkJJndfQ0pDRmxhZyk7CisKKwkJd19DSkNGbGFnID0gKHdfQ0pDRmxhZyA+PiAzKSAmIDB4MTsJLy8gR2V0IG9ubHkgdGhlIENKQyBmbGFnCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIFJlYWQgbnVtYmVyIG9mIGdhaW4gdmFsdWUgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbSgxLAkvL2lfTmJPZldvcmRzVG9SZWFkCisJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHdfQW5hbG9nSW5wdXRDb21wb25lbnRBZGRyZXNzICsgMHg0NCwJLy8gTnVtYmVyIG9mIGdhaW4gdmFsdWUKKwkJCSZ3X051bWJlck9mR2FpblZhbHVlKTsKKworCQl3X051bWJlck9mR2FpblZhbHVlID0gd19OdW1iZXJPZkdhaW5WYWx1ZSAmIDB4RkY7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKiBDb21wdXRlIHNpbmdsZSBoZWFkZXIgYWRkcmVzcyAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJd19TaW5nbGVIZWFkZXJBZGRyZXNzID0KKwkJCXdfQW5hbG9nSW5wdXRDb21wb25lbnRBZGRyZXNzICsgMHg0NiArCisJCQkoKCh3X051bWJlck9mR2FpblZhbHVlIC8gMTYpICsgMSkgKiAyKSArCisJCQkoNiAqIHdfTnVtYmVyT2ZHYWluVmFsdWUpICsKKwkJCSg0ICogKCgod19OdW1iZXJPZkdhaW5WYWx1ZSAvIDE2KSArIDEpICogMikpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCBjdXJyZW50IHNvdXJjZXMgdmFsdWUgZm9yIGlucHV0IDEgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMSwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB3X1NpbmdsZUhlYWRlckFkZHJlc3MsCS8vd19FZXByb21TdGFydEFkZHJlc3M6IFNpbmdsZSBoZWFkZXIgYWRkcmVzcworCQkJJndfU2luZ2xlSGVhZGVyU2l6ZSk7CisKKwkJd19TaW5nbGVIZWFkZXJTaXplID0gd19TaW5nbGVIZWFkZXJTaXplID4+IDQ7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIFJlYWQgZ2FpbiBmYWN0b3IgZm9yIHRoZSBtb2R1bGUgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJd19HYWluRmFjdG9yQWRkcmVzcyA9IHdfQW5hbG9nSW5wdXRDb21wb25lbnRBZGRyZXNzOworCisJCWZvciAod19HYWluSW5kZXggPSAwOyB3X0dhaW5JbmRleCA8IHdfTnVtYmVyT2ZHYWluVmFsdWU7CisJCQl3X0dhaW5JbmRleCsrKSB7CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCSAgLyoqIFJlYWQgZ2FpbiB2YWx1ZSBmb3IgdGhlIG1vZHVsZSAqKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHdfQW5hbG9nSW5wdXRDb21wb25lbnRBZGRyZXNzICsgNzAgKyAoMiAqICgxICsgKHdfTnVtYmVyT2ZHYWluVmFsdWUgLyAxNikpKSArICgweDAyICogd19HYWluSW5kZXgpLAkvLyBHYWluIHZhbHVlCisJCQkJJndfR2FpblZhbHVlKTsKKworCQkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCQl3X0dhaW5WYWx1ZVt3X0dhaW5JbmRleF0gPSB3X0dhaW5WYWx1ZTsKKworIyAgICAgICAgICAgICBpZmRlZiBQUklOVF9JTkZPCisJCQlwcmludGsoIlxuIEdhaW4gdmFsdWUgPSAlZCIsCisJCQkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCQl3X0dhaW5WYWx1ZVt3X0dhaW5JbmRleF0pOworIyAgICAgICAgICAgICBlbmRpZgorCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkgIC8qKiBSZWFkIGdhaW4gZmFjdG9yIGZvciB0aGUgbW9kdWxlICoqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDIsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHdfQW5hbG9nSW5wdXRDb21wb25lbnRBZGRyZXNzICsgNzAgKyAoKDIgKiB3X051bWJlck9mR2FpblZhbHVlKSArICgyICogKDEgKyAod19OdW1iZXJPZkdhaW5WYWx1ZSAvIDE2KSkpKSArICgweDA0ICogd19HYWluSW5kZXgpLAkvLyBHYWluIGZhY3RvcgorCQkJCXdfR2FpbkZhY3RvclZhbHVlKTsKKworCQkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCQl1bF9HYWluRmFjdG9yW3dfR2FpbkluZGV4XSA9CisJCQkJKHdfR2FpbkZhY3RvclZhbHVlWzFdIDw8IDE2KSArCisJCQkJd19HYWluRmFjdG9yVmFsdWVbMF07CisKKyMgICAgICAgICAgICAgaWZkZWYgUFJJTlRfSU5GTworCQkJcHJpbnRrKCJcbiB3X0dhaW5GYWN0b3JWYWx1ZSBbJWRdID0gJWx1Iiwgd19HYWluSW5kZXgsCisJCQkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCQl1bF9HYWluRmFjdG9yW3dfR2FpbkluZGV4XSk7CisjICAgICAgICAgICAgIGVuZGlmCisJCX0KKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKiBSZWFkIGN1cnJlbnQgc291cmNlIHZhbHVlIGZvciBlYWNoIGNoYW5uZWxzIG9mIHRoZSBtb2R1bGUgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlmb3IgKHdfSW5wdXQgPSAwOyB3X0lucHV0IDwgd19OdW1iZXJPZklucHV0czsgd19JbnB1dCsrKSB7CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJICAvKiogUmVhZCBjdXJyZW50IHNvdXJjZXMgdmFsdWUgZm9yIGlucHV0IDEgKiovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDIsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQkJKHdfSW5wdXQgKiB3X1NpbmdsZUhlYWRlclNpemUpICsKKwkJCQl3X1NpbmdsZUhlYWRlckFkZHJlc3MgKyAweDBDLCB3X0N1cnJlbnRTb3VyY2VzKTsKKworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkgIC8qKiBTYXZlIHRoZSBjdXJyZW50IHNvdXJjZXMgdmFsdWUgKiovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCQl1bF9DdXJyZW50U291cmNlW3dfSW5wdXRdID0KKwkJCQkod19DdXJyZW50U291cmNlc1swXSArCisJCQkJKCh3X0N1cnJlbnRTb3VyY2VzWzFdICYgMHhGRkYpIDw8IDE2KSk7CisKKyMgICAgICAgICAgICAgaWZkZWYgUFJJTlRfSU5GTworCQkJcHJpbnRrKCJcbiBDdXJyZW50IHNvdXJjZXMgWyVkXSA9ICVsdSIsIHdfSW5wdXQsCisJCQkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCQl1bF9DdXJyZW50U291cmNlW3dfSW5wdXRdKTsKKyMgICAgICAgICAgICAgZW5kaWYKKwkJfQorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIFJlYWQgdGhlIENKQyBjdXJyZW50IHNvdXJjZSB2YWx1ZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMiwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJKHdfSW5wdXQgKiB3X1NpbmdsZUhlYWRlclNpemUpICsgd19TaW5nbGVIZWFkZXJBZGRyZXNzICsKKwkJCTB4MEMsIHdfQ3VycmVudFNvdXJjZXMpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIFNhdmUgdGhlIGN1cnJlbnQgc291cmNlcyB2YWx1ZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCUJvYXJkSW5mb3JtYXRpb25zLT5zX01vZHVsZVt3X01vZHVsQ291bnRlcl0uCisJCQl1bF9DdXJyZW50U291cmNlQ0pDID0KKwkJCSh3X0N1cnJlbnRTb3VyY2VzWzBdICsKKwkJCSgod19DdXJyZW50U291cmNlc1sxXSAmIDB4RkZGKSA8PCAxNikpOworCisjICAgICAgICAgIGlmZGVmIFBSSU5UX0lORk8KKwkJcHJpbnRrKCJcbiBDdXJyZW50IHNvdXJjZXMgQ0pDID0gJWx1IiwKKwkJCUJvYXJkSW5mb3JtYXRpb25zLT5zX01vZHVsZVt3X01vZHVsQ291bnRlcl0uCisJCQl1bF9DdXJyZW50U291cmNlQ0pDKTsKKyMgICAgICAgICAgZW5kaWYKKwl9Cit9CisKK0lOVCBpX0FQQ0kzMjAwX0dldENoYW5uZWxDYWxpYnJhdGlvblZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCB1aV9DaGFubmVsX251bSwgdW5zaWduZWQgaW50ICogQ0pDQ3VycmVudFNvdXJjZSwKKwl1bnNpZ25lZCBpbnQgKiBDaGFubmVsQ3VycmVudFNvdXJjZSwgdW5zaWduZWQgaW50ICogQ2hhbm5lbEdhaW5GYWN0b3IpCit7CisJaW50IGlfRGlmZkNoYW5uZWwgPSAwOworCWludCBpX01vZHVsZSA9IDA7CisKKyNpZmRlZiBQUklOVF9JTkZPCisJcHJpbnRrKCJcbiBDaGFubmVsID0gJXUiLCB1aV9DaGFubmVsX251bSk7CisjZW5kaWYKKworCS8vVGVzdCBpZiBzaW5nbGUgb3IgZGlmZmVyZW50aWFsIG1vZGUKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ29ubmVjdGlvblR5cGUgPT0gMSkgeworCQkvL2lmIGRpZmYKKworCQlpZiAoKHVpX0NoYW5uZWxfbnVtID49IDApICYmICh1aV9DaGFubmVsX251bSA8PSAxKSkKKwkJCWlfRGlmZkNoYW5uZWwgPSB1aV9DaGFubmVsX251bSwgaV9Nb2R1bGUgPSAwOworCQllbHNlIGlmICgodWlfQ2hhbm5lbF9udW0gPj0gMikgJiYgKHVpX0NoYW5uZWxfbnVtIDw9IDMpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IHVpX0NoYW5uZWxfbnVtIC0gMiwgaV9Nb2R1bGUgPSAxOworCQllbHNlIGlmICgodWlfQ2hhbm5lbF9udW0gPj0gNCkgJiYgKHVpX0NoYW5uZWxfbnVtIDw9IDUpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IHVpX0NoYW5uZWxfbnVtIC0gNCwgaV9Nb2R1bGUgPSAyOworCQllbHNlIGlmICgodWlfQ2hhbm5lbF9udW0gPj0gNikgJiYgKHVpX0NoYW5uZWxfbnVtIDw9IDcpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IHVpX0NoYW5uZWxfbnVtIC0gNiwgaV9Nb2R1bGUgPSAzOworCisJfSBlbHNlIHsKKwkJLy8gaWYgc2luZ2xlCisJCWlmICgodWlfQ2hhbm5lbF9udW0gPT0gMCkgfHwgKHVpX0NoYW5uZWxfbnVtID09IDEpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDAsIGlfTW9kdWxlID0gMDsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDIpIHx8ICh1aV9DaGFubmVsX251bSA9PSAzKSkKKwkJCWlfRGlmZkNoYW5uZWwgPSAxLCBpX01vZHVsZSA9IDA7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA9PSA0KSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gNSkpCisJCQlpX0RpZmZDaGFubmVsID0gMCwgaV9Nb2R1bGUgPSAxOworCQllbHNlIGlmICgodWlfQ2hhbm5lbF9udW0gPT0gNikgfHwgKHVpX0NoYW5uZWxfbnVtID09IDcpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDEsIGlfTW9kdWxlID0gMTsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDgpIHx8ICh1aV9DaGFubmVsX251bSA9PSA5KSkKKwkJCWlfRGlmZkNoYW5uZWwgPSAwLCBpX01vZHVsZSA9IDI7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA9PSAxMCkgfHwgKHVpX0NoYW5uZWxfbnVtID09IDExKSkKKwkJCWlfRGlmZkNoYW5uZWwgPSAxLCBpX01vZHVsZSA9IDI7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA9PSAxMikgfHwgKHVpX0NoYW5uZWxfbnVtID09IDEzKSkKKwkJCWlfRGlmZkNoYW5uZWwgPSAwLCBpX01vZHVsZSA9IDM7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA9PSAxNCkgfHwgKHVpX0NoYW5uZWxfbnVtID09IDE1KSkKKwkJCWlfRGlmZkNoYW5uZWwgPSAxLCBpX01vZHVsZSA9IDM7CisJfQorCisJLy9UZXN0IGlmIHRoZXJtb2NvdXBsZSBvciBSVEQgbW9kZQorCSpDSkNDdXJyZW50U291cmNlID0KKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW2lfTW9kdWxlXS51bF9DdXJyZW50U291cmNlQ0pDOworI2lmZGVmIFBSSU5UX0lORk8KKwlwcmludGsoIlxuIENKQ0N1cnJlbnRTb3VyY2UgPSAlbHUiLCAqQ0pDQ3VycmVudFNvdXJjZSk7CisjZW5kaWYKKworCSpDaGFubmVsQ3VycmVudFNvdXJjZSA9CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZVtpX01vZHVsZV0uCisJCXVsX0N1cnJlbnRTb3VyY2VbaV9EaWZmQ2hhbm5lbF07CisjaWZkZWYgUFJJTlRfSU5GTworCXByaW50aygiXG4gQ2hhbm5lbEN1cnJlbnRTb3VyY2UgPSAlbHUiLCAqQ2hhbm5lbEN1cnJlbnRTb3VyY2UpOworI2VuZGlmCisJLy8gICAgICB9CisJLy8gICB9CisKKwkvL0NoYW5ubGUgZ2FpbiBmYWN0b3IKKwkqQ2hhbm5lbEdhaW5GYWN0b3IgPQorCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGVbaV9Nb2R1bGVdLgorCQl1bF9HYWluRmFjdG9yW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBR2Fpbl07CisjaWZkZWYgUFJJTlRfSU5GTworCXByaW50aygiXG4gQ2hhbm5lbEdhaW5GYWN0b3IgPSAlbHUiLCAqQ2hhbm5lbEdhaW5GYWN0b3IpOworI2VuZGlmCisJLy9FbmQgSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCisJcmV0dXJuICgwKTsKK30KKworLy9FbmQgSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1JlYWREaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgIGZvciBQb3J0CisgIENoYW5uZWwgTnVtYmVyZm9yIHNpbmdsZSBjaGFubmVsCisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UIGRhdGFbMF0gICAgICAgICAgICA6IDA6IFJlYWQgc2luZ2xlIGNoYW5uZWwKKyAgMTogUmVhZCBwb3J0IHZhbHVlCisgIGRhdGFbMV0gICAgICAgICAgICAgIFBvcnQgbnVtYmVyCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JZGF0YVswXSA6UmVhZCBzdGF0dXMgdmFsdWUKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kzMjAwX1JlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcCA9IDA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IDA7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGlubChkZXZwcml2LT5pX0lvYmFzZVJlc2VydmVkKTsKKworCWlmICh1aV9UZW1wID09IDApIHsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gdWlfTm9PZkNoYW5uZWwpICYgMHgxOworCX0JCQkvL2lmICAodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPCAwIHx8IGRhdGFbMV0gPiAxKSB7CisJCQkJcHJpbnRrKCJcblRoZSBwb3J0IG51bWJlciBpcyBpbiBlcnJvclxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CS8vaWYoZGF0YVsxXSA8IDAgfHwgZGF0YVsxXSA+MSkKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJY2FzZSAyOgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogZGF0YVsxXSkpICYgMHgzOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCSpkYXRhID0gKCpkYXRhICYgMTUpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCX0JCS8vaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vZWxzZWlmICAodWlfVGVtcD09MSkKKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfQ29uZmlnRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgRGlnaXRhbCBPdXRwdXQgU3ViZGV2aWNlLiAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgZGF0YVswXSAgOjEgIE1lbW9yeSBlbmFibGUKKyAgMCAgTWVtb3J5IERpc2FibGUKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvcgkJCSB8CisgIHwJCQkJCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzMjAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL2lmICAoIChkYXRhWzBdIT0wKSAmJiAoZGF0YVswXSE9MSkgKQorCWlmIChkYXRhWzBdKSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQURESURBVEFfRU5BQkxFOworCX0JCQkvLyBpZiAgKGRhdGFbMF0pCisJZWxzZSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQURESURBVEFfRElTQUJMRTsKKwl9CQkJLy9lbHNlIGlmICAoZGF0YVswXSkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiB3cml0ZXMgVG8gdGhlIGRpZ2l0YWwgT3V0cHV0IFN1YmRldmljZSAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgICAgIDogU3ViZGV2aWNlIFBvaW50ZXIgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgOiBJbnNuIFN0cnVjdHVyZSBQb2ludGVyICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgOlZhbHVlIHRvIG91dHB1dAorICBkYXRhWzFdICAgICAgICAgICAgIDogMCBvL3Agc2luZ2xlIGNoYW5uZWwKKyAgMSBvL3AgcG9ydAorICBkYXRhWzJdICAgICAgICAgICAgIDogcG9ydCBubworICBkYXRhWzNdICAgICAgICAgICAgIDowIHNldCB0aGUgZGlnaXRhbCBvL3Agb24KKyAgMSBzZXQgdGhlIGRpZ2l0YWwgby9wIG9mZgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yCSAgICAgCSB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzMjAwX1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wID0gMCwgdWlfVGVtcDEgPSAwOworCVVJTlQgdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gZ2V0IHRoZSBjaGFubmVsCisJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbik7CisKKwl9CQkJLy9pZihkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJZWxzZSB7CisJCXVpX1RlbXAgPSAwOworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoZGF0YVszXSA9PSAwKSB7CisJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgfCB1aV9UZW1wOworCQkJb3V0bChkYXRhWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKwkJfQkJLy9pZihkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCQljYXNlIDI6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQkJZGF0YVswXSA9IChkYXRhWzBdIHwgdWlfVGVtcCk7CisJCQkJCWJyZWFrOworCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJb3V0bChkYXRhWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKwkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCX0JCS8vZWxzZWlmKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXiAweGY7CisJCQkJZGF0YVswXSA9IGRhdGFbMF0gJiB1aV9UZW1wOworCQkJCW91dGwoZGF0YVswXSwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbik7CisJCQl9CS8vaWYoZGF0YVsxXT09MCkKKwkJCWVsc2UgeworCQkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZikgJiB1aV9UZW1wOworCisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAzOgorCQkJCQkJYnJlYWs7CisKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkJIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQkJb3V0bChkYXRhWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1JlYWREaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgIGRhdGFbMF0gICAgICAgICAgICAgICAgIDowIHJlYWQgc2luZ2xlIGNoYW5uZWwKKyAgMSByZWFkIHBvcnQgdmFsdWUKKyAgZGF0YVsxXSAgICAgICAgICAgICAgICAgIHBvcnQgbm8KKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTMyMDBfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsOworCXVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdWlfVGVtcCA9IGRhdGFbMF07CisJKmRhdGEgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbik7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vIGlmICAodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPCAwIHx8IGRhdGFbMV0gPiAxKSB7CisJCQkJcHJpbnRrKCJcblRoZSBwb3J0IHNlbGVjdGlvbiBpcyBpbiBlcnJvclxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CS8vaWYoZGF0YVsxXSA8MCB8fGRhdGFbMV0gPjEpCisJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQljYXNlIDI6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiBkYXRhWzFdKSkgJiAzOworCQkJCWJyZWFrOworCisJCQljYXNlIDM6CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQkJYnJlYWs7CisJCQl9CS8vIHN3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCX0JCS8vIGlmICAodWlfVGVtcD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZCBcbiIpOworCQl9CQkvLyBlbHNlIGlmICh1aV9UZW1wPT0xKQorCX0JCQkvLyBlbHNlIGlmICAodWlfVGVtcD09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBJTlQgaV9BUENJMzIwMF9Db25maWdBbmFsb2dJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgQW5hbG9nIElucHV0IFN1YmRldmljZSAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzICAgICA6IFN1YmRldmljZSBQb2ludGVyICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgIDogSW5zbiBTdHJ1Y3R1cmUgUG9pbnRlciAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJCQlkYXRhWzBdCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6Tm9ybWFsIEFJICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOlJURCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjpUSEVSTU9DT1VQTEUgICAgICAgICAgICAgICB8CisgIHwJCQkJICAgIGRhdGFbMV0gICAgICAgICAgICA6IEdhaW4gVG8gVXNlICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXSAgICAgICAgICAgIDogUG9sYXJpdHkKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6Qmlwb2xhciAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOlVuaXBvbGFyICAgICAgICAgICAgICAgICAgfAorICB8CQkJCQkJCQkJCQkJCQkJICAgIAkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVszXSAgICAgICAgICAgIDogT2Zmc2V0IFJhbmdlCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs0XSAgICAgICAgICAgIDogQ291cGxpbmcKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6REMgQ291cGxpbmcgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOkFDIENvdXBsaW5nICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNV0gICAgICAgICAgICA6RGlmZmVyZW50aWFsL1NpbmdsZQorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpTaW5nbGUgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6RGlmZmVyZW50aWFsICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs2XSAgICAgICAgICAgIDpUaW1lclJlbG9hZFZhbHVlCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs3XSAgICAgICAgICAgIDpDb252ZXJ0aW5nVGltZVVuaXQKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzhdICAgICAgICAgICAgIDowIEFuYWxvZyB2b2x0YWdlIG1lYXN1cmVtZW50CisgIDEgUmVzaXN0YW5jZSBtZWFzdXJlbWVudAorICAyIFRlbXBlcmF0dXJlIG1lYXN1cmVtZW50CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzldICAgICAgICAgICAgOkludGVycnVwdAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6RGlzYWJsZQorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6RW5hYmxlCisgIGRhdGFbMTBdICAgICAgICAgICA6VHlwZSBvZiBUaGVybW9jb3VwbGUKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMV0gICAgICAgICAgIDogMDogc2luZ2xlIGNoYW5uZWwKKyAgTW9kdWxlIE51bWJlcgorICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTJdCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOlNpbmdsZSBSZWFkCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOlJlYWQgbW9yZSBjaGFubmVsCisgIDI6U2luZ2xlIHNjYW4KKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6Q29udGlub3VzIFNjYW4KKyAgZGF0YVsxM10gICAgICAgICAgOk51bWJlciBvZiBjaGFubmVscyB0byByZWFkCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTRdICAgICAgICAgIDpSVEQgY29ubmVjdGlvbiB0eXBlCisgIDowOlJURCBub3QgdXNlZAorICAxOlJURCAyIHdpcmUgY29ubmVjdGlvbgorICAyOlJURCAzIHdpcmUgY29ubmVjdGlvbgorICAzOlJURCA0IHdpcmUgY29ubmVjdGlvbgorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTMyMDBfQ29uZmlnQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJVUlOVCB1bF9Db25maWcgPSAwLCB1bF9UZW1wID0gMDsKKwlVSU5UIHVpX0NoYW5uZWxObyA9IDA7CisJVUlOVCB1aV9EdW1teSA9IDA7CisJSU5UIGlfZXJyID0gMDsKKworCS8vQmVnaW4gSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCisjaWZkZWYgUFJJTlRfSU5GTworCUlOVCBpID0gMCwgaTIgPSAwOworI2VuZGlmCisJLy9FbmQgSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uYl9TdHJ1Y3RJbml0aWFsaXplZCAhPSAxKSB7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ0F2YWlsYWJsZSA9IDE7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ1BvbGFyaXR5ID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ0pDR2FpbiA9IDI7CS8vY2hhbmdlZCBmcm9tIDAgdG8gMgorCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQXV0b0NhbGlicmF0aW9uID0gMDsJLy86IGF1dG8gY2FsaWJyYXRpb24KKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ2hhbm5lbENvdW50ID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU3VtID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Jbml0aWFsaXNlZCA9IDA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5iX1N0cnVjdEluaXRpYWxpemVkID0gMTsKKworCQkvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ29ubmVjdGlvblR5cGUgPSAwOworCQkvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkJLy9CZWdpbiBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCW1lbXNldChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGUsIDAsCisJCQlzaXplb2Yoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW01BWF9NT0RVTEVdKSk7CisKKwkJdl9HZXRBUENJMzIwMEVlcHJvbUNhbGlicmF0aW9uVmFsdWUoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjLAorCQkJJnNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXSk7CisKKyNpZmRlZiBQUklOVF9JTkZPCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfTU9EVUxFOyBpKyspIHsKKwkJCXByaW50aygiXG4gc19Nb2R1bGVbJWldLnVsX0N1cnJlbnRTb3VyY2VDSkMgPSAlbHUiLCBpLAorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZVtpXS4KKwkJCQl1bF9DdXJyZW50U291cmNlQ0pDKTsKKworCQkJZm9yIChpMiA9IDA7IGkyIDwgNTsgaTIrKykgeworCQkJCXByaW50aygiXG4gc19Nb2R1bGVbJWldLnVsX0N1cnJlbnRTb3VyY2UgWyVpXSA9ICVsdSIsIGksIGkyLCBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGVbaV0udWxfQ3VycmVudFNvdXJjZVtpMl0pOworCQkJfQorCisJCQlmb3IgKGkyID0gMDsgaTIgPCA4OyBpMisrKSB7CisJCQkJcHJpbnRrKCJcbiBzX01vZHVsZVslaV0udWxfR2FpbkZhY3RvciBbJWldID0gJWx1IiwgaSwgaTIsIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZVtpXS51bF9HYWluRmFjdG9yW2kyXSk7CisJCQl9CisKKwkJCWZvciAoaTIgPSAwOyBpMiA8IDg7IGkyKyspIHsKKwkJCQlwcmludGsoIlxuIHNfTW9kdWxlWyVpXS53X0dhaW5WYWx1ZSBbJWldID0gJXUiLAorCQkJCQlpLCBpMiwKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW2ldLgorCQkJCQl3X0dhaW5WYWx1ZVtpMl0pOworCQkJfQorCQl9CisjZW5kaWYKKwkJLy9FbmQgSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCX0KKworCWlmIChkYXRhWzBdICE9IDAgJiYgZGF0YVswXSAhPSAxICYmIGRhdGFbMF0gIT0gMikgeworCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBhY3F1aXNpdGlvbiB0eXBlIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzBdIT0wICYmIGRhdGFbMF0hPTEgJiYgZGF0YVswXSE9MikKKwlpZiAoZGF0YVswXSA9PSAxKSB7CisJCWlmIChkYXRhWzE0XSAhPSAwICYmIGRhdGFbMTRdICE9IDEgJiYgZGF0YVsxNF0gIT0gMgorCQkJJiYgZGF0YVsxNF0gIT0gNCkgeworCQkJcHJpbnRrKCJcbiBFcnJvciBpbiBzZWxlY3Rpb24gb2YgUlREIGNvbm5lY3Rpb24gdHlwZVxuIik7CisJCQlpX2VycisrOworCQl9CQkvL2lmKGRhdGFbMTRdIT0wICYmIGRhdGFbMTRdIT0xICYmIGRhdGFbMTRdIT0yICYmIGRhdGFbMTRdIT00KQorCX0JCQkvL2lmKGRhdGFbMF09PTEgKQorCWlmIChkYXRhWzFdIDwgMCB8fCBkYXRhWzFdID4gNykgeworCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBnYWluIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy8gaWYoZGF0YVsxXTwwIHx8IGRhdGFbMV0+NykKKwlpZiAoZGF0YVsyXSAhPSAwICYmIGRhdGFbMl0gIT0gMSkgeworCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBwb2xhcml0eSBpcyBpbiBlcnJvclxuIik7CisJCWlfZXJyKys7CisJfQkJCS8vaWYoZGF0YVsyXSE9MCAmJiAgZGF0YVsyXSE9MSkKKwlpZiAoZGF0YVszXSAhPSAwKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIG9mZnNldCByYW5nZSAgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvLyBpZihkYXRhWzNdIT0wKQorCWlmIChkYXRhWzRdICE9IDAgJiYgZGF0YVs0XSAhPSAxKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGNvdXBsaW5nIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzRdIT0wICYmICBkYXRhWzRdIT0xKQorCWlmIChkYXRhWzVdICE9IDAgJiYgZGF0YVs1XSAhPSAxKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIHNpbmdsZS9kaWZmZXJlbnRpYWwgbW9kZSBpcyBpbiBlcnJvclxuIik7CisJCWlfZXJyKys7CisJfQkJCS8vaWYoZGF0YVs1XSE9MCAmJiAgZGF0YVs1XSE9MSkKKwlpZiAoZGF0YVs4XSAhPSAwICYmIGRhdGFbOF0gIT0gMSAmJiBkYXRhWzJdICE9IDIpIHsKKwkJcHJpbnRrKCJcbkVycm9yIGluIHNlbGVjdGlvbiBvZiBmdW5jdGlvbmFsaXR5XG4iKTsKKwl9CQkJLy9pZihkYXRhWzhdIT0wICYmIGRhdGFbOF0hPTEgJiYgZGF0YVsyXSE9MikKKwlpZiAoZGF0YVsxMl0gPT0gMCB8fCBkYXRhWzEyXSA9PSAxKSB7CisJCWlmIChkYXRhWzZdICE9IDIwICYmIGRhdGFbNl0gIT0gNDAgJiYgZGF0YVs2XSAhPSA4MAorCQkJJiYgZGF0YVs2XSAhPSAxNjApIHsKKwkJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGNvbnZlcnNpb24gdGltZSByZWxvYWQgdmFsdWUgaXMgaW4gZXJyb3JcbiIpOworCQkJaV9lcnIrKzsKKwkJfQkJLy8gaWYgKGRhdGFbNl0hPTIwICYmIGRhdGFbNl0hPTQwICYmIGRhdGFbNl0hPTgwICYmIGRhdGFbNl0hPTE2MCApCisJCWlmIChkYXRhWzddICE9IDIpIHsKKwkJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGNvbnZlcnNpb24gdGltZSB1bml0ICBpcyBpbiBlcnJvclxuIik7CisJCQlpX2VycisrOworCQl9CQkvLyBpZihkYXRhWzddIT0yKQorCX0KKwlpZiAoZGF0YVs5XSAhPSAwICYmIGRhdGFbOV0gIT0gMSkgeworCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBpbnRlcnJ1cHQgZW5hYmxlIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzldIT0wICYmICBkYXRhWzldIT0xKQorCWlmIChkYXRhWzExXSA8IDAgfHwgZGF0YVsxMV0gPiA0KSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIG1vZHVsZSBpcyBpbiBlcnJvclxuIik7CisJCWlfZXJyKys7CisJfQkJCS8vaWYoZGF0YVsxMV0gPDAgfHwgIGRhdGFbMTFdPjEpCisJaWYgKGRhdGFbMTJdIDwgMCB8fCBkYXRhWzEyXSA+IDMpIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2Ygc2luZ2xlY2hhbm5lbC9zY2FuIHNlbGVjdGlvbiBpcyBpbiBlcnJvclxuIik7CisJCWlfZXJyKys7CisJfQkJCS8vaWYoZGF0YVsxMl0gPCAwIHx8ICBkYXRhWzEyXT4gMykKKwlpZiAoZGF0YVsxM10gPCAwIHx8IGRhdGFbMTNdID4gMTYpIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgbnVtYmVyIG9mIGNoYW5uZWxzIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy8gaWYoZGF0YVsxM10gPDAgfHxkYXRhWzEzXSA+MTUpCisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLyoKKwkgICBpX0NoYW5uZWxDb3VudD1kYXRhWzEzXTsKKwkgICBpX1NjYW5UeXBlPWRhdGFbMTJdOworCSAgIGlfQURESURBVEFQb2xhcml0eSA9IGRhdGFbMl07CisJICAgaV9BRERJREFUQUdhaW49ZGF0YVsxXTsKKwkgICBpX0FERElEQVRBQ29udmVyc2lvblRpbWU9ZGF0YVs2XTsKKwkgICBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0PWRhdGFbN107CisJICAgaV9BRERJREFUQVR5cGU9ZGF0YVswXTsKKwkgKi8KKworCS8vIFNhdmUgYWNxdWlzaXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGFjdHVhbCBib2FyZAorCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxDb3VudCA9IGRhdGFbMTNdOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlID0gZGF0YVsxMl07CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFQb2xhcml0eSA9IGRhdGFbMl07CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFHYWluID0gZGF0YVsxXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lID0gZGF0YVs2XTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCA9IGRhdGFbN107CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFUeXBlID0gZGF0YVswXTsKKwkvL0JlZ2luIEpLIDE5LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db25uZWN0aW9uVHlwZSA9IGRhdGFbNV07CisJLy9FbmQgSksgMTkuMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkvL0JlZ2luIEpLIDE5LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwltZW1zZXQoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX1NjYW5WYWx1ZUFycmF5LCAwLCAoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsJLy8gNyBpcyB0aGUgbWF4aW1hbCBudW1iZXIgb2YgY2hhbm5lbHMKKwkvL0VuZCBKSyAxOS4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisKKwkvL0JFR0lOIEpLIDAyLjA3LjA0IDogVGhpcyB3aGlsZSBjYW4ndCBiZSBkbywgaXQgYmxvY2sgdGhlIHByb2Nlc3Mgd2hlbiB1c2luZyBzZXZlcmFscyBib2FyZHMKKwkvL3doaWxlKGlfSW50ZXJydXB0RmxhZz09MSkKKwl3aGlsZSAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSAxKSB7CisjaWZuZGVmIE1TWEJPWAorCQl1ZGVsYXkoMSk7CisjZWxzZQorCQkvLyBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGZvciB0aGUgTVNYLUJveAorCQkvLyB3ZSB1c2VkIGEgcHJpbnRrIHRvIGhhdmUgYSBsaXR0bGUgZGVsYXkgYmVjYXVzZSB1ZGVsYXkKKwkJLy8gc2VlbXMgdG8gYmUgYnJva2VuIHVuZGVyIHRoZSBNU1gtQm94LgorCQkvLyBUaGlzIHNvbHV0aW9uIGhhdCB0byBiZSBzdHVkaWVkLgorCQlwcmludGsoIiIpOworI2VuZGlmCisJfQorCS8vRU5EIEpLIDAyLjA3LjA0IDogVGhpcyB3aGlsZSBjYW4ndCBiZSBkbywgaXQgYmxvY2sgdGhlIHByb2Nlc3Mgd2hlbiB1c2luZyBzZXZlcmFscyBib2FyZHMKKworCXVpX0NoYW5uZWxObyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy9pX0NoYW5uZWxObz11aV9DaGFubmVsTm87CisJLy91aV9DaGFubmVsX251bSA9dWlfQ2hhbm5lbE5vOworCisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ2hhbm5lbE5vID0gdWlfQ2hhbm5lbE5vOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSA9IHVpX0NoYW5uZWxObzsKKworCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwlpZiAoZGF0YVs1XSA9PSAwKSB7CisJCWlmICh1aV9DaGFubmVsTm8gPCAwIHx8IHVpX0NoYW5uZWxObyA+IDE1KSB7CisJCQlwcmludGsoIlxuVGhlIFNlbGVjdGlvbiBvZiB0aGUgY2hhbm5lbCBpcyBpbiBlcnJvclxuIik7CisJCQlpX2VycisrOworCQl9CQkvLyBpZih1aV9DaGFubmVsTm88MCB8fCB1aV9DaGFubmVsTm8+MTUpCisJfQkJCS8vaWYoZGF0YVs1XT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbMTRdID09IDIpIHsKKwkJCWlmICh1aV9DaGFubmVsTm8gPCAwIHx8IHVpX0NoYW5uZWxObyA+IDMpIHsKKwkJCQlwcmludGsoIlxuVGhlIFNlbGVjdGlvbiBvZiB0aGUgY2hhbm5lbCBpcyBpbiBlcnJvclxuIik7CisJCQkJaV9lcnIrKzsKKwkJCX0JLy8gaWYodWlfQ2hhbm5lbE5vPDAgfHwgdWlfQ2hhbm5lbE5vPjMpCisJCX0JCS8vaWYoZGF0YVsxNF09PTIpCisJCWVsc2UgeworCQkJaWYgKHVpX0NoYW5uZWxObyA8IDAgfHwgdWlfQ2hhbm5lbE5vID4gNykgeworCQkJCXByaW50aygiXG5UaGUgU2VsZWN0aW9uIG9mIHRoZSBjaGFubmVsIGlzIGluIGVycm9yXG4iKTsKKwkJCQlpX2VycisrOworCQkJfQkvLyBpZih1aV9DaGFubmVsTm88MCB8fCB1aV9DaGFubmVsTm8+NykKKwkJfQkJLy9lbHNlaWYoZGF0YVsxNF09PTIpCisJfQkJCS8vZWxzZWlmKGRhdGFbNV09PTApCisJaWYgKGRhdGFbMTJdID09IDAgfHwgZGF0YVsxMl0gPT0gMSkgeworCQlzd2l0Y2ggKGRhdGFbNV0pIHsKKwkJY2FzZSAwOgorCQkJaWYgKHVpX0NoYW5uZWxObyA+PSAwICYmIHVpX0NoYW5uZWxObyA8PSAzKSB7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9PZmZzZXQ9MDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSAwOworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID49MCAmJiB1aV9DaGFubmVsTm8gPD0zKQorCQkJaWYgKHVpX0NoYW5uZWxObyA+PSA0ICYmIHVpX0NoYW5uZWxObyA8PSA3KSB7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9PZmZzZXQ9NjQ7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gNjQ7CisJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj00ICYmIHVpX0NoYW5uZWxObyA8PTcpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDggJiYgdWlfQ2hhbm5lbE5vIDw9IDExKSB7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9PZmZzZXQ9MTI4OworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDEyODsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJfQkvL2lmKHVpX0NoYW5uZWxObyA+PTggJiYgdWlfQ2hhbm5lbE5vIDw9MTEpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDEyICYmIHVpX0NoYW5uZWxObyA8PSAxNSkgeworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL2lfT2Zmc2V0PTE5MjsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSAxOTI7CisJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj0xMiAmJiB1aV9DaGFubmVsTm8gPD0xNSkKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpZiAoZGF0YVsxNF0gPT0gMikgeworCQkJCWlmICh1aV9DaGFubmVsTm8gPT0gMCkgeworCQkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJCS8vaV9PZmZzZXQ9MDsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMDsKKwkJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID09MCApCisJCQkJaWYgKHVpX0NoYW5uZWxObyA9PSAxKSB7CisJCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkJLy9pX09mZnNldD0wOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSA2NDsKKwkJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQl9CS8vIGlmKHVpX0NoYW5uZWxObyA9PTEpCisJCQkJaWYgKHVpX0NoYW5uZWxObyA9PSAyKSB7CisJCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkJLy9pX09mZnNldD0xMjg7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDEyODsKKwkJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID09MiApCisJCQkJaWYgKHVpX0NoYW5uZWxObyA9PSAzKSB7CisJCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkJLy9pX09mZnNldD0xOTI7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDE5MjsKKwkJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID09MykKKworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL2lfQ2hhbm5lbE5vPTA7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ2hhbm5lbE5vID0gMDsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCXVpX0NoYW5uZWxObyA9IDA7CisJCQkJYnJlYWs7CisJCQl9CS8vaWYoZGF0YVsxNF09PTIpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDAgJiYgdWlfQ2hhbm5lbE5vIDw9IDEpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX09mZnNldD0wOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDA7CisJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj0wICYmIHVpX0NoYW5uZWxObyA8PTEpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDIgJiYgdWlfQ2hhbm5lbE5vIDw9IDMpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX0NoYW5uZWxObz1pX0NoYW5uZWxOby0yOworCQkJCS8vaV9PZmZzZXQ9NjQ7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ2hhbm5lbE5vID0KKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ2hhbm5lbE5vIC0KKwkJCQkJMjsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSA2NDsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCXVpX0NoYW5uZWxObyA9IHVpX0NoYW5uZWxObyAtIDI7CisJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID49MiAmJiB1aV9DaGFubmVsTm8gPD0zKQorCQkJaWYgKHVpX0NoYW5uZWxObyA+PSA0ICYmIHVpX0NoYW5uZWxObyA8PSA1KSB7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9DaGFubmVsTm89aV9DaGFubmVsTm8tNDsKKwkJCQkvL2lfT2Zmc2V0PTEyODsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gPQorCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gLQorCQkJCQk0OworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDEyODsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCXVpX0NoYW5uZWxObyA9IHVpX0NoYW5uZWxObyAtIDQ7CisJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID49NCAmJiB1aV9DaGFubmVsTm8gPD01KQorCQkJaWYgKHVpX0NoYW5uZWxObyA+PSA2ICYmIHVpX0NoYW5uZWxObyA8PSA3KSB7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9DaGFubmVsTm89aV9DaGFubmVsTm8tNjsKKwkJCQkvL2lfT2Zmc2V0PTE5MjsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gPQorCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gLQorCQkJCQk2OworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDE5MjsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCXVpX0NoYW5uZWxObyA9IHVpX0NoYW5uZWxObyAtIDY7CisJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID49NiAmJiB1aV9DaGFubmVsTm8gPD03KQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG4gVGhpcyBzZWxlY3Rpb24gb2YgcG9sYXJpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJaV9lcnIrKzsKKwkJfQkJLy9zd2l0Y2goZGF0YVsyXSkKKwl9CQkJLy9pZihkYXRhWzEyXT09MCB8fCBkYXRhWzEyXT09MSkKKwllbHNlIHsKKwkJc3dpdGNoIChkYXRhWzExXSkgeworCQljYXNlIDE6CisJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkvL2lfT2Zmc2V0PTA7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSAwOworCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkvL2lfT2Zmc2V0PTY0OworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gNjQ7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vaV9PZmZzZXQ9MTI4OworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTI4OworCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkvL2lfT2Zmc2V0PTE5MjsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDE5MjsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5FcnJvciBpbiBtb2R1bGUgc2VsZWN0aW9uXG4iKTsKKwkJCWlfZXJyKys7CisJCX0JCS8vIHN3aXRjaChkYXRhWzExXSkKKwl9CQkJLy8gZWxzZWlmKGRhdGFbMTJdPT0wIHx8IGRhdGFbMTJdPT0xKQorCWlmIChpX2VycikgeworCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvL2lmKGlfU2NhblR5cGUhPTEpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlICE9IDEpIHsKKwkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkvL2lfQ291bnQ9MDsKKwkJLy9pX1N1bT0wOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCA9IDA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1N1bSA9IDA7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJfQkJCS8vaWYoaV9TY2FuVHlwZSE9MSkKKworCXVsX0NvbmZpZyA9CisJCWRhdGFbMV0gfCAoZGF0YVsyXSA8PCA2KSB8IChkYXRhWzVdIDw8IDcpIHwgKGRhdGFbM10gPDwgOCkgfAorCQkoZGF0YVs0XSA8PCA5KTsKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBXcml0ZSB0aGUgY2hhbm5lbCB0byBjb25maWd1cmUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy9vdXRsKDAgfCB1aV9DaGFubmVsTm8gLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDQpOworCW91dGwoMCB8IHVpX0NoYW5uZWxObywKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg0KTsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBSZXNldCB0aGUgY29uZmlndXJhdGlvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vb3V0bCgwICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMHgwKTsKKwlvdXRsKDAsIGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDB4MCk7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy9vdXRsKHVsX0NvbmZpZyAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDB4MCk7CisJb3V0bCh1bF9Db25maWcsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDB4MCk7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qUmVzZXQgdGhlIGNhbGlicmF0aW9uIGJpdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL3VsX1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCXVsX1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL291dGwoKHVsX1RlbXAgJiAweEZGRjlGRkZGKSAsIGRldnByaXYtPmlvYmFzZSsuaV9PZmZzZXQgKyAxMik7CisJb3V0bCgodWxfVGVtcCAmIDB4RkZGOUZGRkYpLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCWlmIChkYXRhWzldID09IDEpIHsKKwkJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaV9JbnRlcnJ1cHRGbGFnPTE7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPSAxOworCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCX0JCQkvLyBpZihkYXRhWzldPT0xKQorCWVsc2UgeworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaV9JbnRlcnJ1cHRGbGFnPTA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPSAwOworCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCX0JCQkvL2Vsc2UgIGlmKGRhdGFbOV09PTEpCisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy9pX0luaXRpYWxpc2VkPTE7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPSAxOworCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy9pZihpX1NjYW5UeXBlPT0xKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TY2FuVHlwZSA9PSAxKQorCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCXsKKwkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkvL2lfU3VtPWlfU3VtKzE7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1N1bSA9CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TdW0gKyAxOworCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJCWluc24tPnVudXNlZFswXSA9IDA7CisJCWlfQVBDSTMyMDBfUmVhZEFuYWxvZ0lucHV0KGRldiwgcywgaW5zbiwgJnVpX0R1bW15KTsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9SZWFkQW5hbG9nSW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsCQkJICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgfAkJCQlkYXRhWzBdICA6IERpZ2l0YWwgVmFsdWUgT2YgSW5wdXQgICAgICAgICAgICAgfAorICB8CQkJCWRhdGFbMV0gIDogQ2FsaWJyYXRpb24gT2Zmc2V0IFZhbHVlICAgICAgICAgICB8CisgIHwJCQkJZGF0YVsyXSAgOiBDYWxpYnJhdGlvbiBHYWluIFZhbHVlCisgIHwJCQkJZGF0YVszXSAgOiBDSkMgdmFsdWUKKyAgfAkJCQlkYXRhWzRdICA6IENKQyBvZmZzZXQgdmFsdWUKKyAgfAkJCQlkYXRhWzVdICA6IENKQyBnYWluIHZhbHVlCisgIHwgQmVnaW4gSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworICB8CQkJCWRhdGFbNl0gOiBDSkMgY3VycmVudCBzb3VyY2UgZnJvbSBlZXByb20KKyAgfAkJCQlkYXRhWzddIDogQ2hhbm5lbCBjdXJyZW50IHNvdXJjZSBmcm9tIGVlcHJvbQorICB8CQkJCWRhdGFbOF0gOiBDaGFubmxlIGdhaW4gZmFjdG9yIGZyb20gZWVwcm9tCisgIHwgRW5kIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzIwMF9SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfRHVtbXlWYWx1ZSA9IDA7CisJaW50IGlfQ29udmVydENKQ0NhbGlicmF0aW9uOworCWludCBpID0gMDsKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL2lmKGlfSW5pdGlhbGlzZWQ9PTApCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0luaXRpYWxpc2VkID09IDApCisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJeworCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL2lmKGlfSW5pdGlhbGlzZWQ9PTApOworCisjaWZkZWYgUFJJTlRfSU5GTworCXByaW50aygiXG4gaW5zbi0+dW51c2VkWzBdID0gJWkiLCBpbnNuLT51bnVzZWRbMF0pOworI2VuZGlmCisKKwlzd2l0Y2ggKGluc24tPnVudXNlZFswXSkgeworCWNhc2UgMDoKKworCQlpX0FQQ0kzMjAwX1JlYWQxQW5hbG9nSW5wdXRDaGFubmVsKGRldiwgcywgaW5zbiwKKwkJCSZ1aV9EdW1teVZhbHVlKTsKKwkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50KzBdPXVpX0R1bW15VmFsdWU7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQlpX0NvdW50ICsgMF0gPSB1aV9EdW1teVZhbHVlOworCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJCS8vQmVnaW4gSksgMjUuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQlpX0FQQ0kzMjAwX0dldENoYW5uZWxDYWxpYnJhdGlvblZhbHVlKGRldiwKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSwKKwkJCSZzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCWlfQ291bnQgKyA2XSwKKwkJCSZzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCWlfQ291bnQgKyA3XSwKKwkJCSZzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCWlfQ291bnQgKyA4XSk7CisKKyNpZmRlZiBQUklOVF9JTkZPCisJCXByaW50aygiXG4gc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50KzZdID0gJWx1Iiwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCArIDZdKTsKKworCQlwcmludGsoIlxuIHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCs3XSA9ICVsdSIsIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgKyA3XSk7CisKKwkJcHJpbnRrKCJcbiBzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQrOF0gPSAlbHUiLCBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ICsgOF0pOworI2VuZGlmCisKKwkJLy9FbmQgSksgMjUuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pZigoaV9BRERJREFUQVR5cGU9PTIpICYmIChpX0ludGVycnVwdEZsYWcgPT0gRkFMU0UpICYmIChpX0NKQ0F2YWlsYWJsZT09MSkpCisJCWlmICgoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFUeXBlID09IDIpCisJCQkmJiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DSkNBdmFpbGFibGUgPT0gMSkpCisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQl7CisJCQlpX0FQQ0kzMjAwX1JlYWRDSkNWYWx1ZShkZXYsICZ1aV9EdW1teVZhbHVlKTsKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAzXT11aV9EdW1teVZhbHVlOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJbWlub3JdLmlfQ291bnQgKyAzXSA9IHVpX0R1bW15VmFsdWU7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQl9CQkvL2lmKChpX0FERElEQVRBVHlwZT09MikgJiYgKGlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkpCisJCWVsc2UgeworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDNdPTA7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQltaW5vcl0uaV9Db3VudCArIDNdID0gMDsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCX0JCS8vZWxzZWlmKChpX0FERElEQVRBVHlwZT09MikgJiYgKGlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkgJiYgKGlfQ0pDQXZhaWxhYmxlPT0xKSkKKworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaWYgKCggaV9BdXRvQ2FsaWJyYXRpb24gPT0gRkFMU0UpICYmIChpX0ludGVycnVwdEZsYWcgPT0gRkFMU0UpKQorCQlpZiAoKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0F1dG9DYWxpYnJhdGlvbiA9PSBGQUxTRSkKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSkKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCXsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUoZGV2LAorCQkJCSZ1aV9EdW1teVZhbHVlKTsKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAxXT11aV9EdW1teVZhbHVlOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJbWlub3JdLmlfQ291bnQgKyAxXSA9IHVpX0R1bW15VmFsdWU7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25HYWluVmFsdWUoZGV2LAorCQkJCSZ1aV9EdW1teVZhbHVlKTsKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAyXT11aV9EdW1teVZhbHVlOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJbWlub3JdLmlfQ291bnQgKyAyXSA9IHVpX0R1bW15VmFsdWU7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQl9CQkvL2lmICgoIGlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKSAmJiAoaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSkKKworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaWYoKGlfQURESURBVEFUeXBlPT0yKSAmJiAoaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSYmIChpX0NKQ0F2YWlsYWJsZT09MSkpCisJCWlmICgoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFUeXBlID09IDIpCisJCQkmJiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DSkNBdmFpbGFibGUgPT0gMSkpCisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQl7CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qVGVzdCBpZiB0aGUgQ2FsaWJyYXRpb24gY2hhbm5lbCBtdXN0IGJlIHJlYWQgZm9yIHRoZSBDSkMgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKlRlc3QgaWYgdGhlIHBvbGFyaXR5IGlzIHRoZSBzYW1lICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vaWYoaV9DSkNQb2xhcml0eSE9aV9BRERJREFUQVBvbGFyaXR5KQorCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ1BvbGFyaXR5ICE9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFQb2xhcml0eSkKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJeworCQkJCWlfQ29udmVydENKQ0NhbGlicmF0aW9uID0gMTsKKwkJCX0JLy9pZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQllbHNlIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pZihpX0NKQ0dhaW49PWlfQURESURBVEFHYWluKQorCQkJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DSkNHYWluID09CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBR2FpbikKKwkJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQl7CisJCQkJCWlfQ29udmVydENKQ0NhbGlicmF0aW9uID0gMDsKKwkJCQl9CS8vaWYoaV9DSkNHYWluPT1pX0FERElEQVRBR2FpbikKKwkJCQllbHNlIHsKKwkJCQkJaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24gPSAxOworCQkJCX0JLy9lbHNlaWYoaV9DSkNHYWluPT1pX0FERElEQVRBR2FpbikKKwkJCX0JLy9lbHNlaWYoaV9DSkNQb2xhcml0eSE9aV9BRERJREFUQVBvbGFyaXR5KQorCQkJaWYgKGlfQ29udmVydENKQ0NhbGlicmF0aW9uID09IDEpIHsKKwkJCQlpX0FQQ0kzMjAwX1JlYWRDSkNDYWxPZmZzZXQoZGV2LAorCQkJCQkmdWlfRHVtbXlWYWx1ZSk7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQrNF09dWlfRHVtbXlWYWx1ZTsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MKKwkJCQkJW2Rldi0+bWlub3JdLmlfQ291bnQgKyA0XSA9CisJCQkJCXVpX0R1bW15VmFsdWU7CisJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCQkJCWlfQVBDSTMyMDBfUmVhZENKQ0NhbEdhaW4oZGV2LCAmdWlfRHVtbXlWYWx1ZSk7CisKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCs1XT11aV9EdW1teVZhbHVlOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcworCQkJCQlbZGV2LT5taW5vcl0uaV9Db3VudCArIDVdID0KKwkJCQkJdWlfRHVtbXlWYWx1ZTsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJfQkvL2lmKGlfQ29udmVydENKQ0NhbGlicmF0aW9uPT0xKQorCQkJZWxzZSB7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQrNF09MDsKKwkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50KzVdPTA7CisKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MKKwkJCQkJW2Rldi0+bWlub3JdLmlfQ291bnQgKyA0XSA9IDA7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zCisJCQkJCVtkZXYtPm1pbm9yXS5pX0NvdW50ICsgNV0gPSAwOworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQl9CS8vZWxzZWlmKGlfQ29udmVydENKQ0NhbGlicmF0aW9uPT0xKQorCQl9CQkvL2lmKChpX0FERElEQVRBVHlwZT09MikgJiYgKGlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkpCisKKwkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkvL2lmKGlfU2NhblR5cGUhPTEpCisJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TY2FuVHlwZSAhPSAxKSB7CisJCQkvL2lfQ291bnQ9MDsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0gMDsKKwkJfQkJLy9pZihpX1NjYW5UeXBlIT0xKQorCQllbHNlIHsKKwkJCS8vaV9Db3VudD1pX0NvdW50ICs2OworCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkvL3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudD1zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQgKzY7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgKyA5OworCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQl9CQkvL2Vsc2UgaWYoaV9TY2FuVHlwZSE9MSkKKworCQkvL2lmKChpX1NjYW5UeXBlPT0xKSAmJihpX0ludGVycnVwdEZsYWc9PTEpKQorCQlpZiAoKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlID09IDEpCisJCQkmJiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSAxKSkgeworCQkJLy9pX0NvdW50PWlfQ291bnQtNjsKKwkJCS8vQmVnaW4gSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJLy9zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQ9c19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50LTY7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgLSA5OworCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQl9CisJCS8vaWYoaV9TY2FuVHlwZT09MCkKKwkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlID09IDApIHsKKwkJCS8qCisJCQkgICBkYXRhWzBdPSB1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMF07CisJCQkgICBkYXRhWzFdPSB1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMV07CisJCQkgICBkYXRhWzJdPSB1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMl07CisJCQkgICBkYXRhWzNdPSB1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbM107CisJCQkgICBkYXRhWzRdPSB1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbNF07CisJCQkgICBkYXRhWzVdPSB1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbNV07CisJCQkgKi8KKyNpZmRlZiBQUklOVF9JTkZPCisJCQlwcmludGsoIlxuIGRhdGFbMF09IHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzBdOyIpOworI2VuZGlmCisJCQlkYXRhWzBdID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzBdOworCQkJZGF0YVsxXSA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsxXTsKKwkJCWRhdGFbMl0gPQorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMl07CisJCQlkYXRhWzNdID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzNdOworCQkJZGF0YVs0XSA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs0XTsKKwkJCWRhdGFbNV0gPQorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbNV07CisKKwkJCS8vQmVnaW4gSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJLy9wcmludGsoIlxuIDAgLSBpX0FQQ0kzMjAwX0dldENoYW5uZWxDYWxpYnJhdGlvblZhbHVlIGRhdGEgWzZdID0gJWx1LCBkYXRhIFs3XSA9ICVsdSwgZGF0YSBbOF0gPSAlbHUiLCBkYXRhIFs2XSwgZGF0YSBbN10sIGRhdGEgWzhdKTsKKwkJCWlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUoZGV2LAorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSwKKwkJCQkmZGF0YVs2XSwgJmRhdGFbN10sICZkYXRhWzhdKTsKKwkJCS8vRW5kIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CisKKwkJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkJLy9kYXRhW2ldPXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpXTsKKwkJCWRhdGFbaV0gPQorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV07CisJCX0KKworCQkvL2lfQ291bnQ9MDsKKwkJLy9pX1N1bT0wOworCQkvL2lmKGlfU2NhblR5cGU9PTEpCisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU3VtID0gMDsKKwkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlID09IDEpIHsKKwkJCS8vaV9Jbml0aWFsaXNlZD0wOworCQkJLy9pX0ludGVycnVwdEZsYWc9MDsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0luaXRpYWxpc2VkID0gMDsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPSAwOworCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuVGhlIHBhcmFtZXRlcnMgcGFzc2VkIGFyZSBpbiBlcnJvclxuIik7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vc3dpdGNoKGluc24tPnVudXNlZFswXSkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1JlYWQxQW5hbG9nSW5wdXRDaGFubmVsICAgICAgICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwJCQkgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVsICAgIDogQ2hhbm5lbCBObyB0byByZWFkICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorICB8CQkJICAgICAgICAgIGRhdGFbMF0gIDogRGlnaXRhbCBWYWx1ZSByZWFkICAgICAgICAgICAgICAgICAgIHwKKyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzMjAwX1JlYWQxQW5hbG9nSW5wdXRDaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0VPQyA9IDA7CisJVUlOVCB1aV9DaGFubmVsTm8gPSAwOworCVVJTlQgdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL3VpX0NoYW5uZWxObz1pX0NoYW5uZWxObzsKKwl1aV9DaGFubmVsTm8gPSBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm87CisKKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBXcml0ZSB0aGUgY2hhbm5lbCB0byBjb25maWd1cmUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL0JlZ2luIEpLIDIwLjEwLjIwMDQ6IEJhZCBjaGFubmVsIHZhbHVlIGlzIHVzZWQgd2hlbiB1c2luZyBkaWZmZXJlbnRpYWwgbW9kZQorCS8vb3V0bCgwIHwgdWlfQ2hhbm5lbF9udW0gLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDQpOworCS8vb3V0bCgwIHwgc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSAsIGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg0KTsKKwlvdXRsKDAgfCBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8sCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDB4NCk7CisJLy9FbmQgSksgMjAuMTAuMjAwNDogQmFkIGNoYW5uZWwgdmFsdWUgaXMgdXNlZCB3aGVuIHVzaW5nIGRpZmZlcmVudGlhbCBtb2RlCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyB1bml0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzNik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKworCS8vb3V0bChpX0FERElEQVRBQ29udmVyc2lvblRpbWUgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzMik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzMik7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgc3RhcnQgZW5kIHN0b3AgaW5kZXggdG8gdGhlIHNlbGVjdGVkIGNoYW5uZWwgYW5kIHNldCB0aGUgc3RhcnQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ2hhbm5lbE5vIHwgKHVpX0NoYW5uZWxObyA8PCA4KSB8IDB4ODAwMDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgdGhlIGludGVycnVwdCBpcyBlbmFibGUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKSB7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBFbmFibGUgdGhlIGludGVycnVwdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDEwMDAwMDsKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlIHRoZSBjb21tYW5kIHJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwodWlfQ29tbWFuZFJlZ2lzdGVyLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKSB7CisJCWRvIHsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBFT0MgU3RhdHVzIGJpdCAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8vdWlfRU9DID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDIwKSAmIDE7CisJCQl1aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyMCkgJiAxOworCisJCX0gd2hpbGUgKHVpX0VPQyAhPSAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogUmVhZCB0aGUgZGlnaXRhbCB2YWx1ZSBvZiB0aGUgaW5wdXQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLy9kYXRhWzBdID0gaW5sIChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyOCk7CisJCWRhdGFbMF0gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyOCk7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwl9CQkJLy8gaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCXJldHVybiAwOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbk9mZnNldFZhbHVlICAgICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBSZWFkIGNhbGlicmF0aW9uIG9mZnNldCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorICB8CQkJICAgICAgICAgIGRhdGFbMF0gIDogQ2FsaWJyYXRpb24gb2Zmc2V0IFZhbHVlICAgfAorICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIFVJTlQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcCA9IDAsIHVpX0VPQyA9IDA7CisJVUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlIHRoZSBjaGFubmVsIHRvIGNvbmZpZ3VyZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQmVnaW4gSksgMjAuMTAuMjAwNDogVGhpcyBzZWVtcyBub3QgbmVjZXNzYXJ5ICEKKwkvL291dGwoMCB8IHVpX0NoYW5uZWxfbnVtICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMHg0KTsKKwkvL291dGwoMCB8IHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfQ2hhbm5lbF9udW0gLCBkZXZwcml2LT5pb2Jhc2Urc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX09mZnNldCArIDB4NCk7CisJLy9FbmQgSksgMjAuMTAuMjAwNDogVGhpcyBzZWVtcyBub3QgbmVjZXNzYXJ5ICEKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzNik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qUmVhZCB0aGUgY2FsaWJyYXRpb24gb2Zmc2V0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3VpX1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCXVpX1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypDb25maWd1cmUgdGhlIE9mZnNldCBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKCh1aV9UZW1wIHwgMHgwMDAyMDAwMCksIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDEyKTsKKwlvdXRsKCh1aV9UZW1wIHwgMHgwMDAyMDAwMCksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypJbml0aWFsaXNlIHVpX0NvbW1hbmRSZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgdGhlIGludGVycnVwdCBpcyBlbmFibGUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKSB7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKkVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMTAwMDAwOworCisJfQkJCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJLypTdGFydCB0aGUgY29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMDgwMDAwOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypXcml0ZSB0aGUgY29tbWFuZCByZWdpdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKSB7CisKKwkJZG8geworCSAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKlJlYWQgdGhlIEVPQyBmbGFnICovCisJICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJLy91aV9FT0MgPSBpbmwgKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDIwKSAmIDE7CisJCQl1aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyMCkgJiAxOworCisJCX0gd2hpbGUgKHVpX0VPQyAhPSAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKlJlYWQgdGhlIGRpZ2l0YWwgdmFsdWUgb2YgdGhlIGNhbGlicmF0aW9uIE9mZnNldCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8vZGF0YVswXSA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrIDI4KTsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uR2FpblZhbHVlICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgY2FsaWJyYXRpb24gZ2FpbiAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBDYWxpYnJhdGlvbiBnYWluIFZhbHVlIE9mIElucHV0ICAgICB8CisgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25HYWluVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIFVJTlQgKiBkYXRhKQoreworCVVJTlQgdWlfRU9DID0gMDsKKwlJTlQgdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlIHRoZSBjaGFubmVsIHRvIGNvbmZpZ3VyZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQmVnaW4gSksgMjAuMTAuMjAwNDogVGhpcyBzZWVtcyBub3QgbmVjZXNzYXJ5ICEKKwkvL291dGwoMCB8IHVpX0NoYW5uZWxfbnVtICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMHg0KTsKKwkvL291dGwoMCB8IHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfQ2hhbm5lbF9udW0gLCBkZXZwcml2LT5pb2Jhc2Urc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX09mZnNldCArIDB4NCk7CisJLy9FbmQgSksgMjAuMTAuMjAwNDogVGhpcyBzZWVtcyBub3QgbmVjZXNzYXJ5ICEKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qUmVhZCB0aGUgY2FsaWJyYXRpb24gZ2FpbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzNik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypDb25maWd1cmUgdGhlIEdhaW4gQ29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoMHgwMDA0MDAwMCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDEyKTsKKwlvdXRsKDB4MDAwNDAwMDAsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkluaXRpYWxpc2UgdWlfQ29tbWFuZFJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAxMDAwMDA7CisKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDA4MDAwMDsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb21tYW5kIHJlZ2l0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29tbWFuZFJlZ2lzdGVyICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKSB7CisKKwkJZG8geworCisJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qUmVhZCB0aGUgRU9DIGZsYWcgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkvL3VpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyMCkgJiAxOworCQkJdWlfRU9DID0gaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjApICYgMTsKKworCQl9IHdoaWxlICh1aV9FT0MgIT0gMSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qUmVhZCB0aGUgZGlnaXRhbCB2YWx1ZSBvZiB0aGUgY2FsaWJyYXRpb24gR2FpbiAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvL2RhdGFbMF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjgpOworCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCisJfQkJCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCXJldHVybiAwOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1JlYWRDSkNWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBSZWFkIENKQyAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorICB8CQkJICAgICAgICAgIGRhdGFbMF0gIDogQ0pDIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzIwMF9SZWFkQ0pDVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9FT0MgPSAwOworCUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypTZXQgdGhlIGNvbnZlcnRpbmcgdGltZSB1bml0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKworCS8vb3V0bChpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0ICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzYpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDM2KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qQ29uZmlndXJlIHRoZSBDSkMgQ29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJLy9vdXRsKCAweDAwMDAwNDAwICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJb3V0bCgweDAwMDAwNDAwLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA0KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypJbml0aWFsaXNlIGR3X0NvbW1hbmRSZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKSB7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypFbmFibGUgdGhlIGludGVycnVwdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAxMDAwMDA7CisJfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMDgwMDAwOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypXcml0ZSB0aGUgY29tbWFuZCByZWdpdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKHVpX0NvbW1hbmRSZWdpc3RlciAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDgpOworCW91dGwodWlfQ29tbWFuZFJlZ2lzdGVyLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIGludGVycnVwdCBpcyBlbmFibGUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkgeworCQlkbyB7CisKKwkgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBFT0MgZmxhZyAqLworCSAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCS8vdWlfRU9DID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDIwKSAmIDE7CisJCQl1aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyMCkgJiAxOworCisJCX0gd2hpbGUgKHVpX0VPQyAhPSAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKlJlYWQgdGhlIGRpZ2l0YWwgdmFsdWUgb2YgdGhlIENKQyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8vZGF0YVswXSA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyOCk7CisJCWRhdGFbMF0gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyOCk7CisKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZENKQ0NhbE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgQ0pDIGNhbGlicmF0aW9uIG9mZnNldCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBDSkMgY2FsaWJyYXRpb24gb2Zmc2V0IFZhbHVlCisgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzIwMF9SZWFkQ0pDQ2FsT2Zmc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfRU9DID0gMDsKKwlJTlQgdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIGNhbGlicmF0aW9uIG9mZnNldCB2YWx1ZSBmb3IgdGhlIENKQyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyB1bml0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bChpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0ICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzYpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDM2KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bChpX0FERElEQVRBQ29udmVyc2lvblRpbWUgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzMik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzMik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypDb25maWd1cmUgdGhlIENKQyBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKDB4MDAwMDA0MDAgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwlvdXRsKDB4MDAwMDA0MDAsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qQ29uZmlndXJlIHRoZSBPZmZzZXQgQ29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCgweDAwMDIwMDAwLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMik7CisJb3V0bCgweDAwMDIwMDAwLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qSW5pdGlhbGlzZSB1aV9Db21tYW5kUmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgdGhlIGludGVycnVwdCBpcyBlbmFibGUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKSB7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypFbmFibGUgdGhlIGludGVycnVwdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAxMDAwMDA7CisKKwl9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJLypTdGFydCB0aGUgY29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMDgwMDAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXRlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIsZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpIHsKKwkJZG8geworCSAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKlJlYWQgdGhlIEVPQyBmbGFnICovCisJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8vdWlfRU9DID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDIwKSAmIDE7CisJCQl1aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyMCkgJiAxOworCQl9IHdoaWxlICh1aV9FT0MgIT0gMSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBkaWdpdGFsIHZhbHVlIG9mIHRoZSBjYWxpYnJhdGlvbiBPZmZzZXQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLy9kYXRhWzBdID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZENKQ0dhaW5WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgQ0pDIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gcmVhZCAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBDSkMgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZQorICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTMyMDBfUmVhZENKQ0NhbEdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9FT0MgPSAwOworCUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzNik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkNvbmZpZ3VyZSB0aGUgQ0pDIENvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoMHgwMDAwMDQwMCxkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwlvdXRsKDB4MDAwMDA0MDAsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkNvbmZpZ3VyZSB0aGUgR2FpbiBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCgweDAwMDQwMDAwLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDEyKTsKKwlvdXRsKDB4MDAwNDAwMDAsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkluaXRpYWxpc2UgZHdfQ29tbWFuZFJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKkVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDEwMDAwMDsKKwl9CisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDA4MDAwMDsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb21tYW5kIHJlZ2l0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29tbWFuZFJlZ2lzdGVyICxkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkgeworCQlkbyB7CisJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qUmVhZCB0aGUgRU9DIGZsYWcgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLy91aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisJCX0gd2hpbGUgKHVpX0VPQyAhPSAxKTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qUmVhZCB0aGUgZGlnaXRhbCB2YWx1ZSBvZiB0aGUgY2FsaWJyYXRpb24gR2FpbiAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLy9kYXRhWzBdID0gaW5sIChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyOCk7CisJCWRhdGFbMF0gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyOCk7CisJfQkJCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCXJldHVybiAwOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX0luc25CaXRzX0FuYWxvZ0lucHV0X1Rlc3QgICAgICAgICAgICAgICB8CisgIHwJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBUZXN0cyB0aGUgU2VsZWN0ZWQgQW5sb2cgSW5wdXQgQ2hhbm5lbCAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgICAgIDogU3ViZGV2aWNlIFBvaW50ZXIgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgOiBJbnNuIFN0cnVjdHVyZSBQb2ludGVyICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKKyAgfAorICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgOiAwIFRlc3RBbmFsb2dJbnB1dFNob3J0Q2lyY3VpdAorICB8CQkJCQkJCQkJICAgICAxIFRlc3RBbmFsb2dJbnB1dENvbm5lY3Rpb24JCQkJCQkJIAkJCQkJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgfAorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgfAkJCSAgICAgICAgZGF0YVswXSAgICAgICAgICAgIDogRGlnaXRhbCB2YWx1ZSBvYnRhaW5lZCAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgICAgICAgICA6IGNhbGlicmF0aW9uIG9mZnNldCAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdICAgICAgICAgICAgOiBjYWxpYnJhdGlvbiBnYWluICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTMyMDBfSW5zbkJpdHNfQW5hbG9nSW5wdXRfVGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9Db25maWd1cmF0aW9uID0gMDsKKwlJTlQgaV9UZW1wOwkJLy8saV9UaW1lVW5pdDsKKwkvL2lmKGlfSW5pdGlhbGlzZWQ9PTApCisKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPT0gMCkgeworCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL2lmKGlfSW5pdGlhbGlzZWQ9PTApOworCWlmIChkYXRhWzBdICE9IDAgJiYgZGF0YVswXSAhPSAxKSB7CisJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgZnVuY3Rpb25hbGl0eVxuIik7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYoZGF0YVswXSE9MCAmJiBkYXRhWzBdIT0xKQorCisJaWYgKGRhdGFbMF0gPT0gMSkJLy9QZXJmb3JtIFNob3J0IENpcmN1aXQgVEVTVAorCXsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypTZXQgdGhlIHNob3J0LWNpY3VpdCBiaXQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX09mZnNldCArIDEyKSA+PiAxOSkgJiAxKSAhPQorCQkJMSkgOworCQkvL291dGwoKDB4MDAwMDEwMDAgfGlfQ2hhbm5lbE5vKSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCQlvdXRsKCgweDAwMDAxMDAwIHwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ2hhbm5lbE5vKSwKKwkJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQk0KTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKlNldCB0aGUgdGltZSB1bml0IHRvIG5zICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogaV9UaW1lVW5pdD0gaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdDsKKwkJICAgaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdD0gMTsgKi8KKwkJLy9pX1RlbXA9IGlfSW50ZXJydXB0RmxhZyA7CisJCWlfVGVtcCA9IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWc7CisJCS8vaV9JbnRlcnJ1cHRGbGFnID0gQURESURBVEFfRElTQUJMRTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IEFERElEQVRBX0RJU0FCTEU7CisJCWlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwoZGV2LCBzLCBpbnNuLCBkYXRhKTsKKwkJLy9pZihpX0F1dG9DYWxpYnJhdGlvbiA9PSBGQUxTRSkKKwkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0F1dG9DYWxpYnJhdGlvbiA9PSBGQUxTRSkgeworCQkJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJCQl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfT2Zmc2V0ICsKKwkJCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJCQkvL291dGwoKDB4MDAwMDEwMDAgfGlfQ2hhbm5lbE5vKSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCQkJb3V0bCgoMHgwMDAwMTAwMCB8IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJaV9DaGFubmVsTm8pLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNCk7CisJCQlkYXRhKys7CisJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbk9mZnNldFZhbHVlKGRldiwgZGF0YSk7CisJCQlkYXRhKys7CisJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShkZXYsIGRhdGEpOworCQl9CisJfSBlbHNlIHsKKwkJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX09mZnNldCArIDEyKSA+PiAxOSkgJiAxKSAhPQorCQkJMSkgOworCQkvL291dGwoKDB4MDAwMDA4MDB8aV9DaGFubmVsTm8pICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJCW91dGwoKDB4MDAwMDA4MDAgfCBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8pLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCTQpOworCQkvL3VpX0NvbmZpZ3VyYXRpb24gPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMCk7CisJCXVpX0NvbmZpZ3VyYXRpb24gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAwKTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKlNldCB0aGUgdGltZSB1bml0IHRvIG5zICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogaV9UaW1lVW5pdD0gaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdDsKKwkJICAgaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdD0gMTsgKi8KKwkJLy9pX1RlbXA9IGlfSW50ZXJydXB0RmxhZyA7CisJCWlfVGVtcCA9IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWc7CisJCS8vaV9JbnRlcnJ1cHRGbGFnID0gQURESURBVEFfRElTQUJMRTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IEFERElEQVRBX0RJU0FCTEU7CisJCWlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwoZGV2LCBzLCBpbnNuLCBkYXRhKTsKKwkJLy9pZihpX0F1dG9DYWxpYnJhdGlvbiA9PSBGQUxTRSkKKwkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0F1dG9DYWxpYnJhdGlvbiA9PSBGQUxTRSkgeworCQkJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJCQl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfT2Zmc2V0ICsKKwkJCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCQkJLy9vdXRsKCgweDAwMDAwODAwfGlfQ2hhbm5lbE5vKSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCQkJb3V0bCgoMHgwMDAwMDgwMCB8IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJaV9DaGFubmVsTm8pLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNCk7CisJCQlkYXRhKys7CisJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbk9mZnNldFZhbHVlKGRldiwgZGF0YSk7CisJCQlkYXRhKys7CisJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShkZXYsIGRhdGEpOworCQl9CisJfQorCS8vaV9JbnRlcnJ1cHRGbGFnPWlfVGVtcCA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IGlfVGVtcDsKKwkvL3ByaW50aygiXG5pX0ludGVycnVwdEZsYWc9JWRcbiIsaV9JbnRlcnJ1cHRGbGFnKTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9JbnNuV3JpdGVSZWxlYXNlQW5hbG9nSW5wdXQgICAgICAgICAgICAgfAorICB8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogIFJlc2V0cyB0aGUgY2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTMyMDBfSW5zbldyaXRlUmVsZWFzZUFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzIwMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXZ8CisgIHwJCQksc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkJCQkgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBUZXN0IHZhbGlkaXR5IGZvciBhIGNvbW1hbmQgZm9yIGN5Y2xpYyBhbmxvZyBpbnB1dCAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXNpdGlvbiAgCQkJCQkJICAgICAJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOjAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMyMDBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCisJaW50IGVyciA9IDA7CisJaW50IHRtcDsJCS8vIGRpdmlzb3IxLGRpdmlzb3IyOworCVVJTlQgdWlfQ29udmVydFRpbWUgPSAwOworCVVJTlQgdWlfQ29udmVydFRpbWVCYXNlID0gMDsKKwlVSU5UIHVpX0RlbGF5VGltZSA9IDA7CisJVUlOVCB1aV9EZWxheVRpbWVCYXNlID0gMDsKKwlJTlQgaV9UcmlnZ2VybW9kZSA9IDA7CisJSU5UIGlfVHJpZ2dlckVkZ2UgPSAwOworCUlOVCBpX05ick9mQ2hhbm5lbCA9IDA7CisJSU5UIGlfQ3B0ID0gMDsKKwlkb3VibGUgZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzID0gMC4wOworCWRvdWJsZSBkX1NDQU5UaW1lTmV3VW5pdCA9IDAuMDsKKwkvLyBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZAorCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKwkvL2lmKGlfSW50ZXJydXB0RmxhZz09MCkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSAwKSB7CisJCWVycisrOworCQkvLyAgICAgICAgICBwcmludGsoIlxuVGhlIGludGVycnVwdCBzaG91bGQgYmUgZW5hYmxlZFxuIik7CisJfQorCWlmIChlcnIpIHsKKwkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQlpX1RyaWdnZXJFZGdlID0gY21kLT5zdGFydF9hcmcgJiAweEZGRkY7CisJCWlfVHJpZ2dlcm1vZGUgPSBjbWQtPnN0YXJ0X2FyZyA+PiAxNjsKKwkJaWYgKGlfVHJpZ2dlckVkZ2UgPCAxIHx8IGlfVHJpZ2dlckVkZ2UgPiAzKSB7CisJCQllcnIrKzsKKwkJCXByaW50aygiXG5UaGUgdHJpZ2dlciBlZGdlIHNlbGVjdGlvbiBpcyBpbiBlcnJvclxuIik7CisJCX0KKwkJaWYgKGlfVHJpZ2dlcm1vZGUgIT0gMikgeworCQkJZXJyKys7CisJCQlwcmludGsoIlxuVGhlIHRyaWdnZXIgbW9kZSBzZWxlY3Rpb24gaXMgaW4gZXJyb3JcbiIpOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKQorCQllcnIrKzsKKworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpCisJCWVycisrOworCisJaWYgKGNtZC0+c2Nhbl9lbmRfc3JjICE9IFRSSUdfQ09VTlQpIHsKKwkJY21kLT5zY2FuX2VuZF9zcmMgPSBUUklHX0NPVU5UOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKwkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQlyZXR1cm4gMjsKKwl9CisJLy9pX0ZpcnN0Q2hhbm5lbD1jbWQtPmNoYW5saXN0WzBdOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbCA9IGNtZC0+Y2hhbmxpc3RbMF07CisJLy9pX0xhc3RDaGFubmVsPWNtZC0+Y2hhbmxpc3RbMV07CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfTGFzdENoYW5uZWwgPSBjbWQtPmNoYW5saXN0WzFdOworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl1aV9Db252ZXJ0VGltZSA9IGNtZC0+Y29udmVydF9hcmcgJiAweEZGRkY7CisJCXVpX0NvbnZlcnRUaW1lQmFzZSA9IGNtZC0+Y29udmVydF9hcmcgPj4gMTY7CisJCWlmICh1aV9Db252ZXJ0VGltZSAhPSAyMCAmJiB1aV9Db252ZXJ0VGltZSAhPSA0MAorCQkJJiYgdWlfQ29udmVydFRpbWUgIT0gODAgJiYgdWlfQ29udmVydFRpbWUgIT0gMTYwKQorCQl7CisJCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBjb252ZXJzaW9uIHRpbWUgcmVsb2FkIHZhbHVlIGlzIGluIGVycm9yXG4iKTsKKwkJCWVycisrOworCQl9CQkvLyBpZiAodWlfQ29udmVydFRpbWUhPTIwICYmIHVpX0NvbnZlcnRUaW1lIT00MCAmJiB1aV9Db252ZXJ0VGltZSE9ODAgJiYgdWlfQ29udmVydFRpbWUhPTE2MCApCisJCWlmICh1aV9Db252ZXJ0VGltZUJhc2UgIT0gMikgeworCQkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgY29udmVyc2lvbiB0aW1lIHVuaXQgIGlzIGluIGVycm9yXG4iKTsKKwkJCWVycisrOworCQl9CQkvL2lmKHVpX0NvbnZlcnRUaW1lQmFzZSE9MikKKwl9IGVsc2UgeworCQl1aV9Db252ZXJ0VGltZSA9IDA7CisJCXVpX0NvbnZlcnRUaW1lQmFzZSA9IDA7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CisJCXVpX0RlbGF5VGltZSA9IDA7CisJCXVpX0RlbGF5VGltZUJhc2UgPSAwOworCX0JCQkvL2lmKGNtZC0+c2Nhbl9iZWdpbl9zcmM9PVRSSUdfRk9MTE9XKQorCWVsc2UgeworCQl1aV9EZWxheVRpbWUgPSBjbWQtPnNjYW5fYmVnaW5fYXJnICYgMHhGRkZGOworCQl1aV9EZWxheVRpbWVCYXNlID0gY21kLT5zY2FuX2JlZ2luX2FyZyA+PiAxNjsKKwkJaWYgKHVpX0RlbGF5VGltZUJhc2UgIT0gMiAmJiB1aV9EZWxheVRpbWVCYXNlICE9IDMpIHsKKwkJCWVycisrOworCQkJcHJpbnRrKCJcblRoZSBEZWxheSB0aW1lIGJhc2Ugc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJfQorCQlpZiAodWlfRGVsYXlUaW1lIDwgMSAmJiB1aV9EZWxheVRpbWUgPiAxMDIzKSB7CisJCQllcnIrKzsKKwkJCXByaW50aygiXG5UaGUgRGVsYXkgdGltZSB2YWx1ZSBpcyBpbiBlcnJvclxuIik7CisJCX0KKwkJaWYgKGVycikgeworCQkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQkJcmV0dXJuIDM7CisJCX0KKwkJZnB1X2JlZ2luKCk7CisJCWRfU0NBTlRpbWVOZXdVbml0ID0gKGRvdWJsZSl1aV9EZWxheVRpbWU7CisJCS8vaV9OYnJPZkNoYW5uZWw9IGlfTGFzdENoYW5uZWwtaV9GaXJzdENoYW5uZWwgKyA0OworCQlpX05ick9mQ2hhbm5lbCA9CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9MYXN0Q2hhbm5lbCAtCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9GaXJzdENoYW5uZWwgKyA0OworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qY2FsY3VsYXRlIHRoZSB0b3RhbCBjb252ZXJzaW9uIHRpbWUgZm9yIGFsbCB0aGUgY2hhbm5lbHMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgPQorCQkJKGRvdWJsZSkoKGRvdWJsZSl1aV9Db252ZXJ0VGltZSAvCisJCQkoZG91YmxlKWlfTmJyT2ZDaGFubmVsKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qQ29udmVydCB0aGUgZnJlcXVlbmNlIGluIHRpbWUgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgPQorCQkJKGRvdWJsZSkxLjAgLyBkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHM7CisJCXVpX0NvbnZlcnRUaW1lQmFzZSA9IDM7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qVGVzdCBpZiB0aGUgdGltZSB1bml0IGlzIHRoZSBzYW1lICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKHVpX0RlbGF5VGltZUJhc2UgPD0gdWlfQ29udmVydFRpbWVCYXNlKSB7CisKKwkJCWZvciAoaV9DcHQgPSAwOworCQkJCWlfQ3B0IDwgKHVpX0NvbnZlcnRUaW1lQmFzZSAtIHVpX0RlbGF5VGltZUJhc2UpOworCQkJCWlfQ3B0KyspIHsKKworCQkJCWRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVscyA9CisJCQkJCWRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVscyAqIDEwMDA7CisJCQkJZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzID0KKwkJCQkJZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzICsgMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZvciAoaV9DcHQgPSAwOworCQkJCWlfQ3B0IDwgKHVpX0RlbGF5VGltZUJhc2UgLSB1aV9Db252ZXJ0VGltZUJhc2UpOworCQkJCWlfQ3B0KyspIHsKKwkJCQlkX1NDQU5UaW1lTmV3VW5pdCA9IGRfU0NBTlRpbWVOZXdVbml0ICogMTAwMDsKKworCQkJfQorCQl9CisKKwkJaWYgKGRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVscyA+PSBkX1NDQU5UaW1lTmV3VW5pdCkgeworCisJCQlwcmludGsoIlxuU0NBTiBEZWxheSB2YWx1ZSBjYW5ub3QgYmUgdXNlZFxuIik7CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLypTQ0FOIERlbGF5IHZhbHVlIGNhbm5vdCBiZSB1c2VkICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJZXJyKys7CisJCX0KKwkJZnB1X2VuZCgpOworCX0JCQkvL2Vsc2UgaWYoY21kLT5zY2FuX2JlZ2luX3NyYz09VFJJR19GT0xMT1cpCisKKwlpZiAoZXJyKSB7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIDQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzIwMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldix8CisgIHwgCQkJCQkJCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKXwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFN0b3AgdGhlICBhY3F1aXNpdGlvbiAgCQkJCQkJICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDowICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMjAwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCVVJTlQgdWlfQ29uZmlndXJhdGlvbiA9IDA7CisJLy9pX0ludGVycnVwdEZsYWc9MDsKKwkvL2lfSW5pdGlhbGlzZWQ9MDsKKwkvL2lfQ291bnQ9MDsKKwkvL2lfU3VtPTA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPSAwOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0gMDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TdW0gPSAwOworCisgIC8qKioqKioqKioqKioqKioqKioqLworCS8qUmVhZCB0aGUgcmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKiovCisJLy91aV9Db25maWd1cmF0aW9uID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDgpOworCXVpX0NvbmZpZ3VyYXRpb24gPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlc2V0IHRoZSBTVEFSVCBhbmQgSVJRIGJpdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKCh1aV9Db25maWd1cmF0aW9uICYgMHhGRkU3RkZGRiksZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJb3V0bCgodWlfQ29uZmlndXJhdGlvbiAmIDB4RkZFN0ZGRkYpLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gbmFtZSAgICAgOiBpbnQgaV9BUENJMzIwMF9Db21tYW5kQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgIHwKKyAgfAkJCQkJCQkJCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBEb2VzIGFzeW5jaHJvbm91cyBhY3F1aXNpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbW9kZSAxIG9yIDIuCQkJCQkJICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMjAwX0NvbW1hbmRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlVSU5UIHVpX0NvbmZpZ3VyYXRpb24gPSAwOworCS8vSU5UICBpX0N1cnJlbnRTb3VyY2UgPSAwOworCVVJTlQgdWlfVHJpZ2dlciA9IDA7CisJVUlOVCB1aV9UcmlnZ2VyRWRnZSA9IDA7CisJVUlOVCB1aV9UcmlnZ2VybW9kZSA9IDA7CisJVUlOVCB1aV9TY2FuTW9kZSA9IDA7CisJVUlOVCB1aV9Db252ZXJ0VGltZSA9IDA7CisJVUlOVCB1aV9Db252ZXJ0VGltZUJhc2UgPSAwOworCVVJTlQgdWlfRGVsYXlUaW1lID0gMDsKKwlVSU5UIHVpX0RlbGF5VGltZUJhc2UgPSAwOworCVVJTlQgdWlfRGVsYXlNb2RlID0gMDsKKwkvL2lfRmlyc3RDaGFubmVsPWNtZC0+Y2hhbmxpc3RbMF07CisJLy9pX0xhc3RDaGFubmVsPWNtZC0+Y2hhbmxpc3RbMV07CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsID0gY21kLT5jaGFubGlzdFswXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9MYXN0Q2hhbm5lbCA9IGNtZC0+Y2hhbmxpc3RbMV07CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCXVpX1RyaWdnZXIgPSAxOworCQl1aV9UcmlnZ2VyRWRnZSA9IGNtZC0+c3RhcnRfYXJnICYgMHhGRkZGOworCQl1aV9UcmlnZ2VybW9kZSA9IGNtZC0+c3RhcnRfYXJnID4+IDE2OworCX0JCQkvL2lmKGNtZC0+c3RhcnRfc3JjPT1UUklHX0VYVCkKKwllbHNlIHsKKwkJdWlfVHJpZ2dlciA9IDA7CisJfQkJCS8vZWxzZWlmKGNtZC0+c3RhcnRfc3JjPT1UUklHX0VYVCkKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJdWlfU2Nhbk1vZGUgPSAwOworCX0JCQkvLyBpZiAoY21kLT5zdG9wX3NyYz09VFJJR19DT1VOVCkKKwllbHNlIHsKKwkJdWlfU2Nhbk1vZGUgPSAyOworCX0JCQkvL2Vsc2UgaWYgKGNtZC0+c3RvcF9zcmM9PVRSSUdfQ09VTlQpCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQl1aV9EZWxheVRpbWUgPSAwOworCQl1aV9EZWxheVRpbWVCYXNlID0gMDsKKwkJdWlfRGVsYXlNb2RlID0gMDsKKwl9CQkJLy9pZihjbWQtPnNjYW5fYmVnaW5fc3JjPT1UUklHX0ZPTExPVykKKwllbHNlIHsKKwkJdWlfRGVsYXlUaW1lID0gY21kLT5zY2FuX2JlZ2luX2FyZyAmIDB4RkZGRjsKKwkJdWlfRGVsYXlUaW1lQmFzZSA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgPj4gMTY7CisJCXVpX0RlbGF5TW9kZSA9IDE7CisJfQkJCS8vZWxzZSBpZihjbWQtPnNjYW5fYmVnaW5fc3JjPT1UUklHX0ZPTExPVykKKwkvLyAgICAgICAgcHJpbnRrKCJcbnVpX0RlbGF5VGltZT0ldVxuIix1aV9EZWxheVRpbWUpOworCS8vICAgICAgICBwcmludGsoIlxudWlfRGVsYXlUaW1lQmFzZT0ldVxuIix1aV9EZWxheVRpbWVCYXNlKTsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVpX0NvbnZlcnRUaW1lID0gY21kLT5jb252ZXJ0X2FyZyAmIDB4RkZGRjsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gY21kLT5jb252ZXJ0X2FyZyA+PiAxNjsKKwl9IGVsc2UgeworCQl1aV9Db252ZXJ0VGltZSA9IDA7CisJCXVpX0NvbnZlcnRUaW1lQmFzZSA9IDA7CisJfQorCisJLy8gaWYoaV9BRERJREFUQVR5cGUgPT0xIHx8ICgoaV9BRERJREFUQVR5cGU9PTIpKSkKKwkvLyAgIHsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qUmVhZCB0aGUgb2xkIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGN1cnJlbnQgc291cmNlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3VpX0NvbmZpZ3VyYXRpb24gPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCXVpX0NvbmZpZ3VyYXRpb24gPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypXcml0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgY3VycmVudCBzb3VyY2UgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCgodWlfQ29uZmlndXJhdGlvbiAmIDB4RkZDMDAwMDAgKSwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsxMik7CisJb3V0bCgodWlfQ29uZmlndXJhdGlvbiAmIDB4RkZDMDAwMDApLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisJLy8gfQorCXVpX0NvbmZpZ3VyYXRpb24gPSAwOworCS8vICAgICBwcmludGsoIlxuZmlyc3RjaGFubmVsPSV1XG4iLGlfRmlyc3RDaGFubmVsKTsKKwkvLyAgICAgcHJpbnRrKCJcbmxhc3RjaGFubmVsPSV1XG4iLGlfTGFzdENoYW5uZWwpOworCS8vICAgICBwcmludGsoIlxudWlfVHJpZ2dlcj0ldVxuIix1aV9UcmlnZ2VyKTsKKwkvLyAgICAgcHJpbnRrKCJcbnVpX1RyaWdnZXJFZGdlPSV1XG4iLHVpX1RyaWdnZXJFZGdlKTsKKwkvLyAgICAgcHJpbnRrKCJcbnVpX1RyaWdnZXJtb2RlPSV1XG4iLHVpX1RyaWdnZXJtb2RlKTsKKwkvLyAgICAgIHByaW50aygiXG51aV9EZWxheU1vZGU9JXVcbiIsdWlfRGVsYXlNb2RlKTsKKwkvLyAgICAgcHJpbnRrKCJcbnVpX1NjYW5Nb2RlPSV1XG4iLHVpX1NjYW5Nb2RlKTsKKworCS8vdWlfQ29uZmlndXJhdGlvbiA9IGlfRmlyc3RDaGFubmVsIHwoaV9MYXN0Q2hhbm5lbCA8PCA4KXwgMHgwMDEwMDAwMCB8CisJdWlfQ29uZmlndXJhdGlvbiA9CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbCB8IChzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCW1pbm9yXS4KKwkJaV9MYXN0Q2hhbm5lbCA8PCA4KSB8IDB4MDAxMDAwMDAgfCAodWlfVHJpZ2dlciA8PCAyNCkgfAorCQkodWlfVHJpZ2dlckVkZ2UgPDwgMjUpIHwgKHVpX1RyaWdnZXJtb2RlIDw8IDI3KSB8ICh1aV9EZWxheU1vZGUKKwkJPDwgMTgpIHwgKHVpX1NjYW5Nb2RlIDw8IDE2KTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBDb25maWd1cmF0aW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCggdWlfQ29uZmlndXJhdGlvbiwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMHg4KTsKKwlvdXRsKHVpX0NvbmZpZ3VyYXRpb24sCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDB4OCk7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBEZWxheSBWYWx1ZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKHVpX0RlbGF5VGltZSxkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0MCk7CisJb3V0bCh1aV9EZWxheVRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQwKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBEZWxheSB0aW1lIGJhc2UgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfRGVsYXlUaW1lQmFzZSxkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0NCk7CisJb3V0bCh1aV9EZWxheVRpbWVCYXNlLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA0NCk7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypXcml0ZSB0aGUgY29udmVyc2lvbiB0aW1lIHZhbHVlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKHVpX0NvbnZlcnRUaW1lLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHVpX0NvbnZlcnRUaW1lLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzMik7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIGNvbnZlcnNpb24gdGltZSBiYXNlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29udmVydFRpbWVCYXNlLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHVpX0NvbnZlcnRUaW1lQmFzZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworICAvKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlYWQgdGhlIHJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqLworCS8vdWlfQ29uZmlndXJhdGlvbiA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwl1aV9Db25maWd1cmF0aW9uID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQpOworICAvKioqKioqKioqKioqKioqKioqLworCS8qU2V0IHRoZSBTQ0FOIGJpdCAqLworICAvKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJLy9vdXRsKCgodWlfQ29uZmlndXJhdGlvbiAmIDB4MUUwRkYpIHwgMHgwMDAwMjAwMCksZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJb3V0bCgoKHVpX0NvbmZpZ3VyYXRpb24gJiAweDFFMEZGKSB8IDB4MDAwMDIwMDApLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA0KTsKKyAgLyoqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSByZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db25maWd1cmF0aW9uID0gMDsKKwkvL3VpX0NvbmZpZ3VyYXRpb24gPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJdWlfQ29uZmlndXJhdGlvbiA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKworICAvKioqKioqKioqKioqKioqKioqKi8KKwkvKlNldCB0aGUgU1RBUlQgYml0ICovCisgIC8qKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCgodWlfQ29uZmlndXJhdGlvbiB8IDB4MDAwODAwMDApLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDgpOworCW91dGwoKHVpX0NvbmZpZ3VyYXRpb24gfCAweDAwMDgwMDAwKSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogIGludCBpX0FQQ0kzMjAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCQkJICAgICB8CisgIHwJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDpSZXNldHMgdGhlIHJlZ2lzdGVycyBvZiB0aGUgY2FyZCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzIwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlJTlQgaV9UZW1wOworCURXT1JEIGR3X0R1bW15OworCS8vaV9JbnRlcnJ1cHRGbGFnPTA7CisJLy9pX0luaXRpYWxpc2VkPT0wOworCS8vaV9Db3VudD0wOworCS8vaV9TdW09MDsKKworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPSAwOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0luaXRpYWxpc2VkID0gMDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCA9IDA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU3VtID0gMDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uYl9TdHJ1Y3RJbml0aWFsaXplZCA9IDA7CisKKwlvdXRsKDB4ODM4MzgzODMsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4NjApOworCisJLy8gRW5hYmxlIHRoZSBpbnRlcnJ1cHQgZm9yIHRoZSBjb250cm9sZXIKKwlkd19EdW1teSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKwlvdXRsKGR3X0R1bW15IHwgMHgyMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKwlvdXRsKDAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24pOwkvL1Jlc2V0cyB0aGUgb3V0cHV0CisgIC8qKioqKioqKioqKioqKiovCisJLypFbXB0eSB0aGUgYnVmZmVyICovCisgIC8qKioqKioqKioqKioqKi8KKwlmb3IgKGlfVGVtcCA9IDA7IGlfVGVtcCA8PSA5NTsgaV9UZW1wKyspIHsKKwkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9UZW1wXT0wOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfVGVtcF0gPSAwOworCX0JCQkvL2ZvcihpX1RlbXA9MDtpX1RlbXA8PTk1O2lfVGVtcCsrKQorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZXNldCB0aGUgU1RBUlQgYW5kIElSUSBiaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWZvciAoaV9UZW1wID0gMDsgaV9UZW1wIDw9IDE5MjspIHsKKwkJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIGlfVGVtcCArIDEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJCW91dGwoMCwgZGV2cHJpdi0+aW9iYXNlICsgaV9UZW1wICsgOCk7CisJCWlfVGVtcCA9IGlfVGVtcCArIDY0OworCX0JCQkvL2ZvcihpX1RlbXA9MDtpX1RlbXA8PTE5MjtpX1RlbXArNjQpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogc3RhdGljIHZvaWQgdl9BUENJMzIwMF9JbnRlcnJ1cHQJCQkJCSAgICAgfAorICB8CQkJCQkgIChpbnQgaXJxICwgdm9pZCAqZCkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBSb3V0aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGludCBpcnEgICAgICAgICAgICAgICAgIDogaXJxIG51bWJlciAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICB2b2lkICpkICAgICAgICAgICAgICAgICA6IHZvaWQgcG9pbnRlciAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yCQkJCQkgfAorICB8CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK3ZvaWQgdl9BUENJMzIwMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlVSU5UIHVpX1N0YXR1c1JlZ2lzdGVyID0gMDsKKwlVSU5UIHVpX0NoYW5uZWxOdW1iZXIgPSAwOworCUlOVCBpX0NhbGlicmF0aW9uRmxhZyA9IDA7CisJSU5UIGlfQ0pDRmxhZyA9IDA7CisJVUlOVCB1aV9EdW1teVZhbHVlID0gMDsKKwlVSU5UIHVpX0RpZ2l0YWxUZW1wZXJhdHVyZSA9IDA7CisJVUlOVCB1aV9EaWdpdGFsSW5wdXQgPSAwOworCWludCBpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbjsKKworCS8vQkVHSU4gSksgVEVTVAorCWludCBpX1JldHVyblZhbHVlID0gMDsKKwkvL0VORCBKSyBURVNUCisKKwkvL3ByaW50ayAoIlxuIGlfU2NhblR5cGUgPSAlaSBpX0FERElEQVRBVHlwZSA9ICVpIiwgc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX1NjYW5UeXBlLCBzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQURESURBVEFUeXBlKTsKKworCS8vc3dpdGNoKGlfU2NhblR5cGUpCisJc3dpdGNoIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TY2FuVHlwZSkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCS8vc3dpdGNoKGlfQURESURBVEFUeXBlKQorCQlzd2l0Y2ggKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBVHlwZSkgeworCQljYXNlIDA6CisJCWNhc2UgMToKKworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8vdWlfU3RhdHVzUmVnaXN0ZXIgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTYpOworCQkJdWlfU3RhdHVzUmVnaXN0ZXIgPQorCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDE2KTsKKwkJCWlmICgodWlfU3RhdHVzUmVnaXN0ZXIgJiAweDIpID09IDB4MikgeworCQkJCS8vaV9DYWxpYnJhdGlvbkZsYWcgPSAoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMikgJiAweDAwMDYwMDAwKSA+PiAxNyk7CisJCQkJaV9DYWxpYnJhdGlvbkZsYWcgPQorCQkJCQkoKGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uCisJCQkJCQkJaV9PZmZzZXQgKworCQkJCQkJCTEyKSAmIDB4MDAwNjAwMDApID4+CisJCQkJCTE3KTsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlJlYWQgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLy91aV9DaGFubmVsTnVtYmVyID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI0KTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qUmVhZCB0aGUgZGlnaXRhbCBhbmFsb2cgaW5wdXQgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvL3VpX0RpZ2l0YWxJbnB1dCA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyOCk7CisJCQkJdWlfRGlnaXRhbElucHV0ID0KKwkJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRoZSB2YWx1ZSByZWFkIGlzIHRoZSBjaGFubmVsIHZhbHVlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChpX0NhbGlicmF0aW9uRmxhZyA9PSAwKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAwXSA9IHVpX0RpZ2l0YWxJbnB1dDsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlCisJCQkJCQlbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9Db3VudCArIDBdID0gdWlfRGlnaXRhbElucHV0OworCisJCQkJCS8vQmVnaW4gSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJCQkvKgorCQkJCQkgICBwcmludGsoIlxuIDEgLSBpX0FQQ0kzMjAwX0dldENoYW5uZWxDYWxpYnJhdGlvblZhbHVlIChkZXYsIHNfQm9hcmRJbmZvcyAlaSIsIHVpX0NoYW5uZWxOdW1iZXIpOworCQkJCQkgICBpX0FQQ0kzMjAwX0dldENoYW5uZWxDYWxpYnJhdGlvblZhbHVlIChkZXYsIHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfQ2hhbm5lbF9udW0sCisJCQkJCSAgICZzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQgKyA2XSwKKwkJCQkJICAgJnNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCArIDddLAorCQkJCQkgICAmc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50ICsgOF0pOworCQkJCQkgKi8KKwkJCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLypTdGFydCB0aGUgY29udmVyc2lvbiBvZiB0aGUgY2FsaWJyYXRpb24gb2Zmc2V0IHZhbHVlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25PZmZzZXRWYWx1ZQorCQkJCQkJKGRldiwgJnVpX0R1bW15VmFsdWUpOworCQkJCX0JLy9pZiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMCkKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRoZSB2YWx1ZSByZWFkIGlzIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChpX0NhbGlicmF0aW9uRmxhZyA9PSAxKSB7CisKKwkJICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTYXZlIHRoZSB2YWx1ZSAqLworCQkgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDFdID0gdWlfRGlnaXRhbElucHV0OworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgMV0gPSB1aV9EaWdpdGFsSW5wdXQ7CisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTdGFydCB0aGUgY29udmVyc2lvbiBvZiB0aGUgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZSAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uR2FpblZhbHVlKGRldiwKKwkJCQkJCSZ1aV9EdW1teVZhbHVlKTsKKwkJCQl9CS8vaWYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDEpCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDIpIHsKKworCQkgIC8qKioqKioqKioqKioqKioqLworCQkJCQkvKlNhdmUgdGhlIHZhbHVlICovCisJCSAgLyoqKioqKioqKioqKioqKiovCisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAyXSA9IHVpX0RpZ2l0YWxJbnB1dDsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlCisJCQkJCQlbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9Db3VudCArIDJdID0gdWlfRGlnaXRhbElucHV0OworCQkJCQkvL2lmKGlfU2NhblR5cGU9PTEpCisJCQkJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX1NjYW5UeXBlID09IDEpIHsKKworCQkJCQkJLy9pX0ludGVycnVwdEZsYWc9MDsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0ludGVycnVwdEZsYWcgPSAwOworCQkJCQkJLy9pX0NvdW50PWlfQ291bnQgKyA2OworCQkJCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkJCQkvL3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudD1zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQgKyA2OworCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfQ291bnQgPQorCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCW1pbm9yXS5pX0NvdW50ICsgOTsKKwkJCQkJCS8vRW5kIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJCQkJfQkvL2lmKGlfU2NhblR5cGU9PTEpCisJCQkJCWVsc2UgeworCQkJCQkJLy9pX0NvdW50PTA7CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9Db3VudCA9IDA7CisJCQkJCX0JLy9lbHNlaWYoaV9TY2FuVHlwZT09MSkKKwkJCQkJLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9TY2FuVHlwZSAhPSAxKSB7CisJCQkJCQlpX1JldHVyblZhbHVlID0gc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCQkJCQl9CS8vaWYoaV9TY2FuVHlwZSE9MSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL2lmKGlfQ2hhbm5lbENvdW50PT1pX1N1bSkKKwkJCQkJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9DaGFubmVsQ291bnQgPT0KKwkJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQkJbWlub3JdLmlfU3VtKSB7CisJCQkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCQkJCQkJfQorCQkJCQl9CS8vaWYoaV9TY2FuVHlwZSE9MSkKKwkJCQl9CS8vaWYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDIpCisJCQl9CS8vIGlmICgodWlfU3RhdHVzUmVnaXN0ZXIgJiAweDIpID09IDB4MikKKworCQkJYnJlYWs7CisKKwkJY2FzZSAyOgorCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLy91aV9TdGF0dXNSZWdpc3RlciA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxNik7CisJCQl1aV9TdGF0dXNSZWdpc3RlciA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTYpOworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKlRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKSB7CisKKwkJCQkvL2lfQ0pDRmxhZyA9ICgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpICYgMHgwMDAwMDQwMCkgPj4gMTApOworCQkJCWlfQ0pDRmxhZyA9CisJCQkJCSgoaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJCW1pbm9yXS4KKwkJCQkJCQlpX09mZnNldCArCisJCQkJCQkJNCkgJiAweDAwMDAwNDAwKSA+PiAxMCk7CisKKwkJCQkvL2lfQ2FsaWJyYXRpb25GbGFnID0gKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpICYgMHgwMDA2MDAwMCkgPj4gMTcpOworCQkJCWlfQ2FsaWJyYXRpb25GbGFnID0KKwkJCQkJKChpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQkJbWlub3JdLgorCQkJCQkJCWlfT2Zmc2V0ICsKKwkJCQkJCQkxMikgJiAweDAwMDYwMDAwKSA+PgorCQkJCQkxNyk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlJlYWQgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkvL3VpX0NoYW5uZWxOdW1iZXIgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjQpOworCQkJCXVpX0NoYW5uZWxOdW1iZXIgPQorCQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjQpOworCQkJCS8vQmVnaW4gSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSA9CisJCQkJCXVpX0NoYW5uZWxOdW1iZXI7CisJCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlJlYWQgdGhlIGRpZ2l0YWwgdGVtcGVyYXR1cmUgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8vdWlfRGlnaXRhbFRlbXBlcmF0dXJlID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmUgPQorCQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNoYW5uZWwgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAwKQorCQkJCQkmJiAoaV9DSkNGbGFnID09IDApKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAwXT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAwXSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBDSkMgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpX0FQQ0kzMjAwX1JlYWRDSkNWYWx1ZShkZXYsCisJCQkJCQkmdWlfRHVtbXlWYWx1ZSk7CisKKwkJCQl9CS8vaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAwKSAmJiAoaV9DSkNGbGFnID09IDApKQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLypUZXN0IGlmIHRoZSB2YWx1ZSByZWFkIGlzIHRoZSBDSkMgdmFsdWUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoaV9DSkNGbGFnID09IDEpCisJCQkJCSYmIChpX0NhbGlicmF0aW9uRmxhZyA9PSAwKSkgeworCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgM109dWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgM10gPQorCQkJCQkJdWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLypTdGFydCB0aGUgY29udmVyc2lvbiBvZiB0aGUgY2FsaWJyYXRpb24gb2Zmc2V0IHZhbHVlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25PZmZzZXRWYWx1ZQorCQkJCQkJKGRldiwgJnVpX0R1bW15VmFsdWUpOworCQkJCX0JLy8gaWYgKChpX0NKQ0ZsYWcgPT0gMSkgJiYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDApKQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLypUZXN0IGlmIHRoZSB2YWx1ZSByZWFkIGlzIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgdmFsdWUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMSkKKwkJCQkJJiYgKGlfQ0pDRmxhZyA9PSAwKSkgeworCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgMV09dWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgMV0gPQorCQkJCQkJdWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gb2YgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25HYWluVmFsdWUoZGV2LAorCQkJCQkJJnVpX0R1bW15VmFsdWUpOworCisJCQkJfQkvL2lmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMSkgJiYgKGlfQ0pDRmxhZyA9PSAwKSkKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLypUZXN0IGlmIHRoZSB2YWx1ZSByZWFkIGlzIHRoZSBjYWxpYnJhdGlvbiBnYWluIHZhbHVlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikKKwkJCQkJJiYgKGlfQ0pDRmxhZyA9PSAwKSkgeworCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgMl09dWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgMl0gPQorCQkJCQkJdWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qVGVzdCBpZiB0aGUgQ2FsaWJyYXRpb24gY2hhbm5lbCBtdXN0IGJlIHJlYWQgZm9yIHRoZSBDSkMgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkvKlRlc3QgaWYgdGhlIHBvbGFyaXR5IGlzIHRoZSBzYW1lICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8vaWYoaV9DSkNQb2xhcml0eSE9aV9BRERJREFUQVBvbGFyaXR5KQorCQkJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9DSkNQb2xhcml0eSAhPQorCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9BRERJREFUQVBvbGFyaXR5KSB7CisJCQkJCQlpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbiA9IDE7CisJCQkJCX0JLy9pZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQkJCWVsc2UgeworCQkJCQkJLy9pZihpX0NKQ0dhaW49PWlfQURESURBVEFHYWluKQorCQkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NKQ0dhaW4gPT0KKwkJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQkJbWlub3JdLgorCQkJCQkJCWlfQURESURBVEFHYWluKSB7CisJCQkJCQkJaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24KKwkJCQkJCQkJPSAwOworCQkJCQkJfQkvL2lmKGlfQ0pDR2Fpbj09aV9BRERJREFUQUdhaW4pCisJCQkJCQllbHNlIHsKKwkJCQkJCQlpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbgorCQkJCQkJCQk9IDE7CisJCQkJCQl9CS8vZWxzZWlmKGlfQ0pDR2Fpbj09aV9BRERJREFUQUdhaW4pCisJCQkJCX0JLy9lbHNlaWYoaV9DSkNQb2xhcml0eSE9aV9BRERJREFUQVBvbGFyaXR5KQorCQkJCQlpZiAoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24gPT0gMSkgeworCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gb2YgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgZm9yIHRoZSBDSkMgKi8KKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQlpX0FQQ0kzMjAwX1JlYWRDSkNDYWxPZmZzZXQoZGV2LAorCQkJCQkJCSZ1aV9EdW1teVZhbHVlKTsKKworCQkJCQl9CS8vaWYoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb249PTEpCisJCQkJCWVsc2UgeworCQkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDRdPTA7CisJCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgNV09MDsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCQlbc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJCW1pbm9yXS5pX0NvdW50ICsKKwkJCQkJCQk0XSA9IDA7CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlCisJCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uaV9Db3VudCArCisJCQkJCQkJNV0gPSAwOworCQkJCQl9CS8vZWxzZWlmKGlfQ29udmVydENKQ0NhbGlicmF0aW9uPT0xKQorCQkJCX0JLy9lbHNlIGlmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikgJiYgKGlfQ0pDRmxhZyA9PSAwKSkKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qVGVzdCBpZiB0aGUgdmFsdWUgcmVhZCBpcyB0aGUgY2FsaWJyYXRpb24gb2Zmc2V0IHZhbHVlIGZvciB0aGUgQ0pDICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGlfQ2FsaWJyYXRpb25GbGFnID09IDEpCisJCQkJCSYmIChpX0NKQ0ZsYWcgPT0gMSkpIHsKKwkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDRdPXVpX0RpZ2l0YWxUZW1wZXJhdHVyZTsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlCisJCQkJCQlbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9Db3VudCArIDRdID0KKwkJCQkJCXVpX0RpZ2l0YWxUZW1wZXJhdHVyZTsKKworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBjYWxpYnJhdGlvbiBnYWluIHZhbHVlIGZvciB0aGUgQ0pDICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCWlfQVBDSTMyMDBfUmVhZENKQ0NhbEdhaW4oZGV2LAorCQkJCQkJJnVpX0R1bW15VmFsdWUpOworCisJCQkJfQkvL2lmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMSkgJiYgKGlfQ0pDRmxhZyA9PSAxKSkKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLypUZXN0IGlmIHRoZSB2YWx1ZSByZWFkIGlzIHRoZSBjYWxpYnJhdGlvbiBnYWluIHZhbHVlIGZvciB0aGUgQ0pDICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikKKwkJCQkJJiYgKGlfQ0pDRmxhZyA9PSAxKSkgeworCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgNV09dWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgNV0gPQorCQkJCQkJdWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCisJCQkJCS8vaWYoaV9TY2FuVHlwZT09MSkKKwkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfU2NhblR5cGUgPT0gMSkgeworCisJCQkJCQkvL2lfSW50ZXJydXB0RmxhZz0wOworCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfSW50ZXJydXB0RmxhZyA9IDA7CisJCQkJCQkvL2lfQ291bnQ9aV9Db3VudCArIDY7CisJCQkJCQkvL0JlZ2luIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJCQkJCS8vc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50PXNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCArIDY7CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9Db3VudCA9CisJCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJbWlub3JdLmlfQ291bnQgKyA5OworCQkJCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJCQl9CS8vaWYoaV9TY2FuVHlwZT09MSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL2lfQ291bnQ9MDsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NvdW50ID0gMDsKKwkJCQkJfQkvL2Vsc2VpZihpX1NjYW5UeXBlPT0xKQorCisJCQkJCS8vaWYoaV9TY2FuVHlwZSE9MSkKKwkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfU2NhblR5cGUgIT0gMSkgeworCQkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCQkJCQl9CS8vaWYoaV9TY2FuVHlwZSE9MSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL2lmKGlfQ2hhbm5lbENvdW50PT1pX1N1bSkKKwkJCQkJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9DaGFubmVsQ291bnQgPT0KKwkJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQkJbWlub3JdLmlfU3VtKSB7CisJCQkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCisJCQkJCQl9CS8vaWYoaV9DaGFubmVsQ291bnQ9PWlfU3VtKQorCQkJCQl9CS8vZWxzZSBpZihpX1NjYW5UeXBlIT0xKQorCQkJCX0JLy9pZiAoKGlfQ2FsaWJyYXRpb25GbGFnID09IDIpICYmIChpX0NKQ0ZsYWcgPT0gMSkpCisKKwkJCX0JLy9lbHNlIGlmICgodWlfU3RhdHVzUmVnaXN0ZXIgJiAweDIpID09IDB4MikKKwkJCWJyZWFrOworCQl9CQkvL3N3aXRjaChpX0FERElEQVRBVHlwZSkKKwkJYnJlYWs7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJaV9BUENJMzIwMF9JbnRlcnJ1cHRIYW5kbGVFb3MoZGV2KTsKKwkJYnJlYWs7CisJfQkJCS8vc3dpdGNoKGlfU2NhblR5cGUpCisJcmV0dXJuOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMyMDBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiAuICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBhY3F1aXJlZCBkYXRhKGZyb20gRklGTykgICAgICB8CisgIHwJCQkJdG8gQ29tZWRpIGJ1ZmZlci4JCSAJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAwICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzMjAwX0ludGVycnVwdEhhbmRsZUVvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlVSU5UIHVpX1N0YXR1c1JlZ2lzdGVyID0gMDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKwkvL0JFR0lOIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwkvL2NvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwkvL1VJTlQgKmRhdGE7CisJLy9kYXRhPWFzeW5jLT5kYXRhK2FzeW5jLT5idWZfaW50X3B0cjsvL25ldyBzYW1wbGVzIGFkZGVkIGZyb20gaGVyZSBvbndhcmRzCisJaW50IG4gPSAwLCBpID0gMDsKKwkvL0VORCBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3VpX1N0YXR1c1JlZ2lzdGVyID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDE2KTsKKwl1aV9TdGF0dXNSZWdpc3RlciA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxNik7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIGludGVycnVwdCBvY2N1ciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmICgodWlfU3RhdHVzUmVnaXN0ZXIgJiAweDIpID09IDB4MikgeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qUmVhZCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL3VpX0NoYW5uZWxOdW1iZXIgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjQpOworCQkvL0JFR0lOIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwkJLy9UaGlzIHZhbHVlIGlzIG5vdCB1c2VkCisJCS8vdWlfQ2hhbm5lbE51bWJlciA9IGlubChkZXZwcml2LT5pb2Jhc2Urc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX09mZnNldCArIDI0KTsKKwkJcy0+YXN5bmMtPmV2ZW50cyA9IDA7CisJCS8vRU5EIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qUmVhZCB0aGUgZGlnaXRhbCBBbmFsb2cgSW5wdXQgdmFsdWUgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8vZGF0YVtpX0NvdW50XSA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyOCk7CisJCS8vQmVnaW4gSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCQkvL2RhdGFbc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50XSA9IGlubChkZXZwcml2LT5pb2Jhc2Urc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX1NjYW5WYWx1ZUFycmF5W3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCW1pbm9yXS5pX0NvdW50XSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKwkJLy9FbmQgSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCisJCS8vaWYoKGlfQ291bnQgPT0gKGlfTGFzdENoYW5uZWwtaV9GaXJzdENoYW5uZWwrMykpKQorCQlpZiAoKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID09CisJCQkJKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0xhc3RDaGFubmVsIC0KKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQlpX0ZpcnN0Q2hhbm5lbCArIDMpKSkgeworCisJCQkvL0JlZ2luIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50Kys7CisKKwkJCWZvciAoaSA9IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbDsKKwkJCQlpIDw9IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0xhc3RDaGFubmVsOworCQkJCWkrKykgeworCQkJCWlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUoZGV2LCBpLAorCQkJCQkmc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQl1aV9TY2FuVmFsdWVBcnJheVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQltaW5vcl0uaV9Db3VudCArICgoaSAtCisJCQkJCQkJCXNfQm9hcmRJbmZvcworCQkJCQkJCQlbZGV2LT5taW5vcl0uCisJCQkJCQkJCWlfRmlyc3RDaGFubmVsKQorCQkJCQkJCSogMyldLAorCQkJCQkmc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQl1aV9TY2FuVmFsdWVBcnJheVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQltaW5vcl0uaV9Db3VudCArICgoaSAtCisJCQkJCQkJCXNfQm9hcmRJbmZvcworCQkJCQkJCQlbZGV2LT5taW5vcl0uCisJCQkJCQkJCWlfRmlyc3RDaGFubmVsKQorCQkJCQkJCSogMykgKyAxXSwKKwkJCQkJJnNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJdWlfU2NhblZhbHVlQXJyYXlbc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJbWlub3JdLmlfQ291bnQgKyAoKGkgLQorCQkJCQkJCQlzX0JvYXJkSW5mb3MKKwkJCQkJCQkJW2Rldi0+bWlub3JdLgorCQkJCQkJCQlpX0ZpcnN0Q2hhbm5lbCkKKwkJCQkJCQkqIDMpICsgMl0pOworCQkJfQorCisJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkJCS8vaV9Db3VudD0tMTsKKworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPSAtMTsKKworCQkJLy9hc3luYy0+YnVmX2ludF9jb3VudCs9KGlfTGFzdENoYW5uZWwtaV9GaXJzdENoYW5uZWwrNCkqc2l6ZW9mKFVJTlQpOworCQkJLy9CZWdpbiBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCQkvL2FzeW5jLT5idWZfaW50X2NvdW50Kz0oc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0xhc3RDaGFubmVsLXNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9GaXJzdENoYW5uZWwrNCkqc2l6ZW9mKFVJTlQpOworCQkJLy9FbmQgSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCQkJLy9hc3luYy0+YnVmX2ludF9wdHIrPShpX0xhc3RDaGFubmVsLWlfRmlyc3RDaGFubmVsKzQpKnNpemVvZihVSU5UKTsKKwkJCS8vQmVnaW4gSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCQkJLy9hc3luYy0+YnVmX2ludF9wdHIrPShzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfTGFzdENoYW5uZWwtc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbCs0KSpzaXplb2YoVUlOVCk7CisJCQkvL2NvbWVkaV9lb3MoZGV2LHMpOworCisJCQkvLyBTZXQgdGhlIGV2ZW50IHR5cGUgKENvbWVkaSBCdWZmZXIgRW5kIE9mIFNjYW4pCisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisKKwkJCS8vIFRlc3QgaWYgZW5vdWd0aCBtZW1vcnkgaXMgYXZhaWxhYmxlIGFuZCBhbGxvY2F0ZSBpdCBmb3IgNyB2YWx1ZXMKKwkJCS8vbiA9IGNvbWVkaV9idWZfd3JpdGVfYWxsb2Mocy0+YXN5bmMsIDcqc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCQkJbiA9IGNvbWVkaV9idWZfd3JpdGVfYWxsb2Mocy0+YXN5bmMsCisJCQkJKDcgKyAxMikgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CisKKwkJCS8vIElmIG5vdCBlbm91Z3RoIG1lbW9yeSBhdmFpbGFibGUsIGV2ZW50IGlzIHNldCB0byBDb21lZGkgQnVmZmVyIEVycnJvcgorCQkJaWYgKG4gPiAoKDcgKyAxMikgKiBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKKwkJCQlwcmludGsoIlxuY29tZWRpX2J1Zl93cml0ZV9hbGxvYyBuID0gJWkiLCBuKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJCX0KKwkJCS8vIFdyaXRlIGFsbCA3IHNjYW4gdmFsdWVzIGluIHRoZSBjb21lZGkgYnVmZmVyCisJCQljb21lZGlfYnVmX21lbWNweV90byhzLT5hc3luYywgMCwKKwkJCQkodW5zaWduZWQgaW50ICopIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9TY2FuVmFsdWVBcnJheSwgKDcgKyAxMikgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CisKKwkJCS8vIFVwZGF0ZSBjb21lZGkgYnVmZmVyIHBpbnRlcnMgaW5kZXhlcworCQkJY29tZWRpX2J1Zl93cml0ZV9mcmVlKHMtPmFzeW5jLAorCQkJCSg3ICsgMTIpICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCisJCQkvLyBTZW5kIGV2ZW50cworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkvL0VuZCBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisKKwkJCS8vQkVHSU4gSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCQkJLy8KKwkJCS8vaWYgKHMtPmFzeW5jLT5idWZfaW50X3B0cj49cy0+YXN5bmMtPmRhdGFfbGVuKSAvLyAgZm9yIGJ1ZmZlciByb29sIG92ZXIKKwkJCS8vICB7CisJCQkvLyAgICAvKiBidWZmZXIgcm9sbG92ZXIgKi8KKwkJCS8vICAgIHMtPmFzeW5jLT5idWZfaW50X3B0cj0wOworCQkJLy8gICAgY29tZWRpX2VvYnVmKGRldixzKTsKKwkJCS8vICB9CisJCQkvL0VuZCBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCX0KKwkJLy9pX0NvdW50Kys7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50Kys7CisJfQorCS8vaV9JbnRlcnJ1cHRGbGFnPTA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDA7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmNTdmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLy8gQ2FyZCBTcGVjaWZpYyBpbmZvcm1hdGlvbgorI2RlZmluZSBBUENJMzIwMF9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTVCOAorLy8jZGVmaW5lIEFQQ0kzMjAwX0FERFJFU1NfUkFOR0UgICAgICAgICAgICAgICAgICAgMjY0CisKK2ludCBNT0RVTEVfTk87CitzdHJ1Y3QgeworCUlOVCBpX0dhaW47CisJSU5UIGlfUG9sYXJpdHk7CisJSU5UIGlfT2Zmc2V0UmFuZ2U7CisJSU5UIGlfQ291cGxpbmc7CisJSU5UIGlfU2luZ2xlRGlmZjsKKwlJTlQgaV9BdXRvQ2FsaWJyYXRpb247CisJVUlOVCB1aV9SZWxvYWRWYWx1ZTsKKwlVSU5UIHVpX1RpbWVVbml0UmVsb2FkVmFsOworCUlOVCBpX0ludGVycnVwdDsKKwlJTlQgaV9Nb2R1bGVTZWxlY3Rpb247Cit9IENvbmZpZ19QYXJhbWV0ZXJzX01vZHVsZTEsIENvbmZpZ19QYXJhbWV0ZXJzX01vZHVsZTIsCisgICAgQ29uZmlnX1BhcmFtZXRlcnNfTW9kdWxlMywgQ29uZmlnX1BhcmFtZXRlcnNfTW9kdWxlNDsKKworLy9BTkFMT0cgSU5QVVQgUkFOR0UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMzIwMF9haSA9IHsgOCwgeworCQkJCQkJICAgICBCSVBfUkFOR0UoMTApLAorCQkJCQkJICAgICBCSVBfUkFOR0UoNSksCisJCQkJCQkgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMTApLAorCQkJCQkJICAgICBVTklfUkFOR0UoNSksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgyKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEpCisJCQkJCQkgICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMzMwMF9haSA9IHsgNCwgeworCQkJCQkJICAgICBVTklfUkFOR0UoMTApLAorCQkJCQkJICAgICBVTklfUkFOR0UoNSksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgyKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEpCisJCQkJCQkgICAgIH0KK307CisKKy8vQW5hbG9nIElucHV0IHJlbGF0ZWQgRGVmaW5lcworI2RlZmluZSBBUENJMzIwMF9BSV9PRkZTRVRfR0FJTiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTMyMDBfQUlfU0NfVEVTVCAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kzMjAwX0FJX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBUENJMzIwMF9BSV9BVVRPQ0FMICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kzMjAwX1JFTE9BRF9DT05WX1RJTUVfVkFMICAgICAgICAgICAgMzIKKyNkZWZpbmUgQVBDSTMyMDBfQ09OVl9USU1FX1RJTUVfQkFTRSAgICAgICAgICAgICAzNgorI2RlZmluZSBBUENJMzIwMF9SRUxPQURfREVMQVlfVElNRV9WQUwgICAgICAgICAgIDQwCisjZGVmaW5lIEFQQ0kzMjAwX0RFTEFZX1RJTUVfVElNRV9CQVNFICAgICAgICAgICAgNDQKKyNkZWZpbmUgQVBDSTMyMDBfQUlfTU9EVUxFMSAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kzMjAwX0FJX01PRFVMRTIgICAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgQVBDSTMyMDBfQUlfTU9EVUxFMyAgICAgICAgICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgQVBDSTMyMDBfQUlfTU9EVUxFNCAgICAgICAgICAgICAgICAgICAgICAxOTIKKyNkZWZpbmUgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMzIwMF9BSV9FT1NJUlEgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFQQ0kzMjAwX0FJX0VPUyAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQVBDSTMyMDBfQUlfQ0hBTl9JRCAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBBUENJMzIwMF9BSV9DSEFOX1ZBTCAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEFOQUxPR19JTlBVVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBURU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkVTSVNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgRU5BQkxFX0VYVF9UUklHICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEVOQUJMRV9FWFRfR0FURSAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBFTkFCTEVfRVhUX1RSSUdfR0FURSAgICAgICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBBUENJMzIwMF9NQVhWT0xUICAgICAgICAgICAgICAgICAgICAgICAgIDIuNQorI2RlZmluZSBBRERJREFUQV9HUkVBVEVSX1RIQU5fVEVTVCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURESURBVEFfTEVTU19USEFOX1RFU1QgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQURESURBVEFfVU5JUE9MQVIgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX0JJUE9MQVIgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvL0JFR0lOIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKyNkZWZpbmUgTUFYX01PRFVMRQkJCQk0CisvL0VORCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKK3R5cGVkZWYgc3RydWN0IHsKKwlVTE9ORyB1bF9OdW1iZXJPZlZhbHVlOworCVVMT05HICpwdWxfUmVzaXN0YW5jZVZhbHVlOworCVVMT05HICpwdWxfVGVtcGVyYXR1cmVWYWx1ZTsKK30gc3RyX0FERElEQVRBX1JURFN0cnVjdCwgKnBzdHJfQURESURBVEFfUlREU3RydWN0OworCisvL0JFR0lOIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKK3R5cGVkZWYgc3RydWN0IHsKKwkvLyBCZWdpbiBKSyAwNS8wOC8yMDAzIGNoYW5nZSBmb3IgTGludXgKKwl1bnNpZ25lZCBsb25nIHVsX0N1cnJlbnRTb3VyY2VDSkM7CisJdW5zaWduZWQgbG9uZyB1bF9DdXJyZW50U291cmNlWzVdOworCS8vIEVuZCBKSyAwNS8wOC8yMDAzIGNoYW5nZSBmb3IgTGludXgKKworCS8vIEJlZ2luIENHIDE1LzAyLzAyIFJldiAxLjAgLT4gUmV2IDEuMSA6IEFkZCBIZWFkZXIgVHlwZSAxCisJdW5zaWduZWQgbG9uZyB1bF9HYWluRmFjdG9yWzhdOwkvLyBHYWluIEZhY3RvcgorCXVuc2lnbmVkIGludCB3X0dhaW5WYWx1ZVsxMF07CisJLy8gRW5kIENHIDE1LzAyLzAyIFJldiAxLjAgLT4gUmV2IDEuMSA6IEFkZCBIZWFkZXIgVHlwZSAxCit9IHN0cl9Nb2R1bGU7CisvL0VORCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKy8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKK3R5cGVkZWYgc3RydWN0IHsKKwlJTlQgaV9DSkNBdmFpbGFibGU7CisJSU5UIGlfQ0pDUG9sYXJpdHk7CisJSU5UIGlfQ0pDR2FpbjsKKwlJTlQgaV9JbnRlcnJ1cHRGbGFnOworCUlOVCBpX0FERElEQVRBUG9sYXJpdHk7CisJSU5UIGlfQURESURBVEFHYWluOworCUlOVCBpX0F1dG9DYWxpYnJhdGlvbjsKKwlJTlQgaV9BRERJREFUQUNvbnZlcnNpb25UaW1lOworCUlOVCBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0OworCUlOVCBpX0FERElEQVRBVHlwZTsKKwlJTlQgaV9DaGFubmVsTm87CisJSU5UIGlfQ2hhbm5lbENvdW50OworCUlOVCBpX1NjYW5UeXBlOworCUlOVCBpX0ZpcnN0Q2hhbm5lbDsKKwlJTlQgaV9MYXN0Q2hhbm5lbDsKKwlJTlQgaV9TdW07CisJSU5UIGlfT2Zmc2V0OworCVVJTlQgdWlfQ2hhbm5lbF9udW07CisJSU5UIGlfQ291bnQ7CisJSU5UIGlfSW5pdGlhbGlzZWQ7CisJLy9VSU5UIHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs5Nl07IC8vQnVmZmVyCisJVUlOVCB1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMTQ0XTsJLy9CdWZmZXIKKwlCWVRFIGJfU3RydWN0SW5pdGlhbGl6ZWQ7CisJLy9CZWdpbiBKSyAxOS4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJdW5zaWduZWQgaW50IHVpX1NjYW5WYWx1ZUFycmF5WzcgKyAxMl07CS8vIDcgaXMgdGhlIG1heGltYWwgbnVtYmVyIG9mIGNoYW5uZWxzCisJLy9FbmQgSksgMTkuMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCisJLy9CZWdpbiBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJSU5UIGlfQ29ubmVjdGlvblR5cGU7CisJSU5UIGlfTmJyT2ZNb2R1bGU7CisJc3RyX01vZHVsZSBzX01vZHVsZVtNQVhfTU9EVUxFXTsKKwkvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCit9IHN0cl9Cb2FyZEluZm9zOworLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworLy8gSGFyZHdhcmUgTGF5ZXIgIGZ1bmN0aW9ucyBmb3IgQXBjaTMyMDAKKworLy9BSQorCitJTlQgaV9BUENJMzIwMF9Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTMyMDBfUmVhZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kzMjAwX0luc25Xcml0ZVJlbGVhc2VBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTMyMDBfSW5zbkJpdHNfQW5hbG9nSW5wdXRfVGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMzIwMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworSU5UIGlfQVBDSTMyMDBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworSU5UIGlfQVBDSTMyMDBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKK0lOVCBpX0FQQ0kzMjAwX0NvbW1hbmRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitJTlQgaV9BUENJMzIwMF9SZWFkRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKy8vSW50ZXJydXB0Cit2b2lkIHZfQVBDSTMyMDBfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworaW50IGlfQVBDSTMyMDBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworLy9SZXNldCBmdW5jdGlvbnMKK0lOVCBpX0FQQ0kzMjAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworCitpbnQgaV9BUENJMzIwMF9SZWFkQ0pDQ2FsT2Zmc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMzIwMF9SZWFkQ0pDVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBVSU5UICpkYXRhKTsKK2ludCBpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbk9mZnNldFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIFVJTlQgKmRhdGEpOworaW50IGlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNDYWxHYWluKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzNTAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzNTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzOTFhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYwpAQCAtMCwwICsxLDc0MiBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qLgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0zNTAxICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMzUwMS5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMzUwMSAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiaHdkcnZfYXBjaTM1MDEuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX1JlYWREaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9ESUdJVEFMX0lQKTsKKwlpZiAodWlfVGVtcCA9PSAwKSB7CisJCSpkYXRhID0gKCpkYXRhID4+IHVpX05vT2ZDaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZiAgKHVpX1RlbXA9PTApCisJZWxzZSB7CisJCWlmICh1aV9UZW1wID09IDEpIHsKKworCQkJKmRhdGEgPSAqZGF0YSAmIDB4MzsKKwkJfQkJLy9pZiAgKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy9lbHNlaWYgICh1aV9UZW1wPT0xKQorCX0JCQkvL2Vsc2VpZiAgKHVpX1RlbXA9PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzUwMV9Db25maWdEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIERpZ2l0YWwgT3V0cHV0IFN1YmRldmljZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMSBFbmFibGUgIFZDQyAgSW50ZXJydXB0ICB8Cit8CQkJCQkJCQkJCSAgIDAgRGlzYWJsZSBWQ0MgIEludGVycnVwdCAgfAorfAkJCQkJICBkYXRhWzJdICAgICAgICAgICAgOiAxIEVuYWJsZSAgQ0MgIEludGVycnVwdCAgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIENDICBJbnRlcnJ1cHQgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzNTAxX0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL2lmICAoIChkYXRhWzBdIT0wKSAmJiAoZGF0YVswXSE9MSkgKQorCWlmIChkYXRhWzBdKSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQURESURBVEFfRU5BQkxFOworCX0JCQkvLyBpZiAgKGRhdGFbMF0pCisJZWxzZSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQURESURBVEFfRElTQUJMRTsKKwl9CQkJLy9lbHNlIGlmICAoZGF0YVswXSkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX1dyaXRlRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogd3JpdGVzIFRvIHRoZSBkaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzICAgICA6IFN1YmRldmljZSBQb2ludGVyICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzUwMV9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcCwgdWlfVGVtcDE7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwlpZiAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9ESUdJVEFMX09QKTsKKwl9CQkJLy9pZihkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJZWxzZSB7CisJCXVpX1RlbXAgPSAwOworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoZGF0YVszXSA9PSAwKSB7CisJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgfCB1aV9UZW1wOworCQkJb3V0bChkYXRhWzBdLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9ESUdJVEFMX09QKTsKKwkJfQkJLy9pZihkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgKDIgKiBkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCW91dGwoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfRElHSVRBTF9PUCk7CisJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQl9CQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCX0JCQkvL2lmKGRhdGFbM109PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzNdID09IDEpIHsKKwkJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDE7CisJCQkJdWlfVGVtcDEgPSAxOworCQkJCXVpX1RlbXAxID0gdWlfVGVtcDEgPDwgdWlfTm9PZkNoYW5uZWw7CisJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQlkYXRhWzBdID0KKwkJCQkJKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIF4KKwkJCQkJMHhmZmZmZmZmZjsKKwkJCQlkYXRhWzBdID0gZGF0YVswXSAmIHVpX1RlbXA7CisJCQkJb3V0bChkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9ESUdJVEFMX09QKTsKKwkJCX0JLy9pZihkYXRhWzFdPT0wKQorCQkJZWxzZSB7CisJCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDM7CisJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQlkYXRhWzJdKSkgXgorCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQlvdXRsKGRhdGFbMF0sCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTM1MDFfRElHSVRBTF9PUCk7CisJCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJCX0JLy9lbHNlaWYoZGF0YVsxXT09MCkKKwkJfQkJLy9pZihkYXRhWzNdPT0xKTsKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vaWYgZWxzZSBkYXRhWzNdPT0xKQorCX0JCQkvL2lmIGVsc2UgZGF0YVszXT09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX1JlYWREaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsIG9yIHBvcnQgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gcmVhZCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzUwMV9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVpX1RlbXAgPSBkYXRhWzBdOworCSpkYXRhID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfT1ApOworCWlmICh1aV9UZW1wID09IDApIHsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gdWlfTm9PZkNoYW5uZWwpICYgMHgxOworCX0JCQkvLyBpZiAgKHVpX1RlbXA9PTApCisJZWxzZSB7CisJCWlmICh1aV9UZW1wID09IDEpIHsKKwkJCSpkYXRhID0gKmRhdGEgJiAweDM7CisKKwkJfQkJLy8gaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vIGVsc2UgaWYgKHVpX1RlbXA9PTEpCisJfQkJCS8vIGVsc2UgaWYgICh1aV9UZW1wPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfQ29uZmlnQW5hbG9nT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBBbmFsb2cgT3V0cHV0IFN1YmRldmljZSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgICAgIDogU3ViZGV2aWNlIFBvaW50ZXIgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgIDogSW5zbiBTdHJ1Y3R1cmUgUG9pbnRlciAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJZGF0YVswXSAgICAgICAgICAgIDogVm9sdGFnZSBNb2RlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOk1vZGUgMCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6TW9kZSAxICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzUwMV9Db25maWdBbmFsb2dPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCW91dGwoZGF0YVswXSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfQU5BTE9HX09VVFBVVCArCisJCUFQQ0kzNTAxX0FPX1ZPTFRfTU9ERSk7CisKKwlpZiAoZGF0YVswXSkgeworCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBNT0RFMTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBNT0RFMDsKKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzUwMV9Xcml0ZUFuYWxvZ091dHB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBUbyB0aGUgU2VsZWN0ZWQgQW5sb2cgT3V0cHV0IENoYW5uZWwgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgOiBJbnNuIFN0cnVjdHVyZSBQb2ludGVyICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzUwMV9Xcml0ZUFuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUxPTkcgdWxfQ29tbWFuZDEgPSAwLCB1bF9DaGFubmVsX25vLCB1bF9Qb2xhcml0eSwgdWxfREFDX1JlYWR5ID0gMDs7CisKKwl1bF9DaGFubmVsX25vID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlpZiAoZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID09IE1PREUxKSB7CisJCXVsX1BvbGFyaXR5ID0gMHg4MDAwMDAwMDsKKwkJaWYgKCgqZGF0YSA8IDApIHx8ICgqZGF0YSA+IDE2Mzg0KSkgeworCQkJcHJpbnRrKCJcbkluIFdyaXRlQW5hbG9nT3V0cHV0IDo6IE5vdCBWYWxpZCBEYXRhXG4iKTsKKwkJfQorCisJfQkJCS8vIGVuZCBpZihkZXZwcml2LT5iX0ludGVycnVwdE1vZGU9PU1PREUxKQorCWVsc2UgeworCQl1bF9Qb2xhcml0eSA9IDA7CisJCWlmICgoKmRhdGEgPCAwKSB8fCAoKmRhdGEgPiA4MTkyKSkgeworCQkJcHJpbnRrKCJcbkluIFdyaXRlQW5hbG9nT3V0cHV0IDo6IE5vdCBWYWxpZCBEYXRhXG4iKTsKKwkJfQorCisJfQkJCS8vIGVuZCBlbHNlCisKKwlpZiAoKHVsX0NoYW5uZWxfbm8gPCAwKSB8fCAodWxfQ2hhbm5lbF9ubyA+IDcpKSB7CisJCXByaW50aygiXG5JbiBXcml0ZUFuYWxvZ091dHB1dCA6OiBOb3QgVmFsaWQgQ2hhbm5lbFxuIik7CisJfQkJCS8vIGVuZCBpZigodWxfQ2hhbm5lbF9ubzwwKXx8KHVsX0NoYW5uZWxfbm8+NykpCisKKwl1bF9EQUNfUmVhZHkgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfQU5BTE9HX09VVFBVVCk7CisKKwl3aGlsZSAodWxfREFDX1JlYWR5ID09IDApIHsKKwkJdWxfREFDX1JlYWR5ID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0FOQUxPR19PVVRQVVQpOworCQl1bF9EQUNfUmVhZHkgPSAodWxfREFDX1JlYWR5ID4+IDgpICYgMTsKKwl9CisKKwlpZiAodWxfREFDX1JlYWR5KSB7CisvLyBPdXRwdXQgdGhlIFZhbHVlIG9uIHRoZSBvdXRwdXQgY2hhbm5lbHMuCisJCXVsX0NvbW1hbmQxID0KKwkJCShVTE9ORykgKChVTE9ORykgKHVsX0NoYW5uZWxfbm8gJiAweEZGKSB8CisJCQkoVUxPTkcpICgoKmRhdGEgPDwgMHg4KSAmIDB4N0ZGRkZGMDBMKSB8CisJCQkoVUxPTkcpICh1bF9Qb2xhcml0eSkpOworCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfQU5BTE9HX09VVFBVVCArCisJCQlBUENJMzUwMV9BT19QUk9HKTsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX0NvbmZpZ1RpbWVyQ291bnRlcldhdGNoZG9nICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICAgICAgICAgICAgOiAwIENvbmZpZ3VyZSBBcyBUaW1lciAgICAgIHwKK3wJCQkJCQkJCQkJICAgMSBDb25maWd1cmUgQXMgQ291bnRlciAgICB8Cit8CQkJCQkJCQkJCSAgIDIgQ29uZmlndXJlIEFzIFdhdGNoZG9nICAgfAorfAkJCQkJICBkYXRhWzFdICAgICAgICAgICAgOiAxIEVuYWJsZSAgSW50ZXJydXB0ICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIEludGVycnVwdCAJICAgICB8Cit8CQkJCQkgIGRhdGFbMl0gICAgICAgICAgICA6IFRpbWUgVW5pdCAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzNdCQkJIDogUmVsb2FkIFZhbHVlCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTM1MDFfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQxID0gMDsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJaWYgKGRhdGFbMF0gPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKworCQlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX1dBVENIRE9HOworCQkvL0Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsJLy9kaXNhYmxlIFdhCisKKwkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJLy9FbmFibGUgVElNRVIgaW50ICYgRElTQUJMRSBBTEwgVEhFIE9USEVSIGludCBTT1VSQ0VTCisJCQlvdXRsKDB4MDIsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJfSBlbHNlIHsKKwkJCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsJLy9kaXNhYmxlIFRpbWVyIGludGVycnVwdAorCQl9CisKKwkJLy9Mb2FkaW5nIHRoZSBUaW1lYmFzZSB2YWx1ZQorCQlvdXRsKGRhdGFbMl0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQlBUENJMzUwMV9UQ1dfVElNRUJBU0UpOworCisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dGwoZGF0YVszXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19SRUxPQURfVkFMVUUpOworCQkvL1NldCB0aGUgbW9kZQorCQl1bF9Db21tYW5kMSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKSB8IDB4RkZGODE5RTBVTDsJLy9lMi0+ZTAKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwl9CQkJLy9lbmQgaWYoZGF0YVswXT09QURESURBVEFfV0FUQ0hET0cpCisKKwllbHNlIGlmIChkYXRhWzBdID09IEFERElEQVRBX1RJTUVSKSB7CisJCS8vRmlyc3QgU3RvcCBUaGUgVGltZXIKKwkJdWxfQ29tbWFuZDEgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkVVTDsKKwkJb3V0bCh1bF9Db21tYW5kMSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKyBBUENJMzUwMV9UQ1dfUFJPRyk7CS8vU3RvcCBUaGUgVGltZXIKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9USU1FUjsKKwkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJLy9FbmFibGUgVElNRVIgaW50ICYgRElTQUJMRSBBTEwgVEhFIE9USEVSIGludCBTT1VSQ0VTCisJCQlvdXRsKDB4MDIsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJfSBlbHNlIHsKKwkJCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsJLy9kaXNhYmxlIFRpbWVyIGludGVycnVwdAorCQl9CisKKwkJLy8gTG9hZGluZyBUaW1lYmFzZQorCQlvdXRsKGRhdGFbMl0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQlBUENJMzUwMV9UQ1dfVElNRUJBU0UpOworCisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dGwoZGF0YVszXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19SRUxPQURfVkFMVUUpOworCisJCS8vIHByaW50ayAoIlxuVGltZXIgQWRkcmVzcyA6OiAleFxuIiwgKGRldnByaXYtPmlvYmFzZStBUENJMzUwMV9XQVRDSERPRykpOworCQl1bF9Db21tYW5kMSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl1bF9Db21tYW5kMSA9CisJCQkodWxfQ29tbWFuZDEgJiAweEZGRjcxOUUyVUwpIHwgMlVMIDw8IDEzVUwgfCAweDEwVUw7CisJCW91dGwodWxfQ29tbWFuZDEsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOwkvL21vZGUgMgorCisJfQkJCS8vZW5kIGlmKGRhdGFbMF09PUFERElEQVRBX1RJTUVSKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzUwMV9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgU2VsZWN0ZWQgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVswXSAgICAgICAgICAgIDogMCBUaW1lciAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDEgQ291bnRlciAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkgICAyIFdhdGNoZG9nICAgICAgICAgIAkJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAJCQkJIGRhdGFbMV0gICAgICAgICAgICA6IDEgU3RhcnQgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkgICAwIFN0b3AgICAgICAJCQkJIHwJCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBUcmlnZ2VyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzUwMV9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVTE9ORyB1bF9Db21tYW5kMSA9IDA7CisJaW50IGlfVGVtcDsKKwlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQl1bF9Db21tYW5kMSA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDFVTDsKKwkJCS8vRW5hYmxlIHRoZSBXYXRjaGRvZworCQkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9CisKKwkJZWxzZSBpZiAoZGF0YVsxXSA9PSAwKQkvL1N0b3AgVGhlIFdhdGNoZG9nCisJCXsKKwkJCS8vU3RvcCBUaGUgV2F0Y2hkb2cKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CisJCQlvdXRsKDB4MCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9IGVsc2UgaWYgKGRhdGFbMV0gPT0gMikgeworCQkJdWxfQ29tbWFuZDEgPQorCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkZGOUZGVUwpIHwgMHgyMDBVTDsKKwkJCW91dGwodWxfQ29tbWFuZDEsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJfQkJLy9pZihkYXRhWzFdPT0yKQorCX0JCQkvLyBlbmQgaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9XQVRDSERPRykKKworCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9USU1FUikgeworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOworCQkJLy9FbmFibGUgdGhlIFRpbWVyCisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0gZWxzZSBpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkvL1N0b3AgVGhlIFRpbWVyCisJCQl1bF9Db21tYW5kMSA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCQl1bF9Db21tYW5kMSA9IHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRVVMOworCQkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9CisKKwkJZWxzZSBpZiAoZGF0YVsxXSA9PSAyKSB7CisJCQkvL1RyaWdnZXIgdGhlIFRpbWVyCisJCQl1bF9Db21tYW5kMSA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDIwMFVMOworCQkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9CisKKwl9CQkJLy8gZW5kIGlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfVElNRVIpCisJaV9UZW1wID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJQVBDSTM1MDFfVENXX1RSSUdfU1RBVFVTKSAmIDB4MTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgU2VsZWN0ZWQgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICAgICAgICAgICAgOiAwIFRpbWVyICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMSBDb3VudGVyICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDIgV2F0Y2hkb2cgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAkJCQkJICBkYXRhWzFdICAgICAgICAgICAgIDogVGltZXIgQ291bnRlciBXYXRjaGRvZyBOdW1iZXIgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzUwMV9SZWFkVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1dBVENIRE9HKSB7CisJCWRhdGFbMF0gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19UUklHX1NUQVRVUykgJiAweDE7CisJCWRhdGFbMV0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cpOworCX0JCQkvLyBlbmQgaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfV0FUQ0hET0cpCisKKwllbHNlIGlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9USU1FUikgeworCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQlBUENJMzUwMV9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCQlkYXRhWzFdID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HKTsKKwl9CQkJLy8gZW5kIGlmICAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX1RJTUVSKQorCisJZWxzZSBpZiAoKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlICE9IEFERElEQVRBX1RJTUVSKQorCQkmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgIT0gQURESURBVEFfV0FUQ0hET0cpKSB7CisJCXByaW50aygiXG5JbiBSZWFkVGltZXJDb3VudGVyV2F0Y2hkb2cgOjogSW52YWxpZCBTdWJkZXZpY2UgXG4iKTsKKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTM1MDFfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgICAgIHwKK3wJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOlJlc2V0cyB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBjYXJkICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTM1MDFfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGlfQ291bnQgPSAwLCBpX3RlbXAgPSAwOworCVVMT05HIHVsX0NvbW1hbmQxID0gMCwgdWxfUG9sYXJpdHksIHVsX0RBQ19SZWFkeSA9IDA7CisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfT1ApOworCW91dGwoMSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfQU5BTE9HX09VVFBVVCArCisJCUFQQ0kzNTAxX0FPX1ZPTFRfTU9ERSk7CisKKwl1bF9Qb2xhcml0eSA9IDB4ODAwMDAwMDA7CisKKwlmb3IgKGlfQ291bnQgPSAwOyBpX0NvdW50IDw9IDc7IGlfQ291bnQrKykgeworCQl1bF9EQUNfUmVhZHkgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfQU5BTE9HX09VVFBVVCk7CisKKwkJd2hpbGUgKHVsX0RBQ19SZWFkeSA9PSAwKSB7CisJCQl1bF9EQUNfUmVhZHkgPQorCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUKTsKKwkJCXVsX0RBQ19SZWFkeSA9ICh1bF9EQUNfUmVhZHkgPj4gOCkgJiAxOworCQl9CisKKwkJaWYgKHVsX0RBQ19SZWFkeSkgeworCQkJLy8gT3V0cHV0IHRoZSBWYWx1ZSBvbiB0aGUgb3V0cHV0IGNoYW5uZWxzLgorCQkJdWxfQ29tbWFuZDEgPQorCQkJCShVTE9ORykgKChVTE9ORykgKGlfQ291bnQgJiAweEZGKSB8CisJCQkJKFVMT05HKSAoKGlfdGVtcCA8PCAweDgpICYgMHg3RkZGRkYwMEwpIHwKKwkJCQkoVUxPTkcpICh1bF9Qb2xhcml0eSkpOworCQkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICsKKwkJCQlBUENJMzUwMV9BT19QUk9HKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogc3RhdGljIHZvaWQgdl9BUENJMzUwMV9JbnRlcnJ1cHQJCQkJCSAgICAgfAorfAkJCQkJICAoaW50IGlycSAsIHZvaWQgKmQpICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogSW50ZXJydXB0IHByb2Nlc3NpbmcgUm91dGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGludCBpcnEgICAgICAgICAgICAgICAgIDogaXJxIG51bWJlciAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZCAgICAgICAgICAgICAgICAgOiB2b2lkIHBvaW50ZXIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCit2b2lkIHZfQVBDSTM1MDFfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpCit7CisJaW50IGlfdGVtcDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwl1bnNpZ25lZCBpbnQgdWlfVGltZXJfQU9XYXRjaGRvZzsKKwl1bnNpZ25lZCBsb25nIHVsX0NvbW1hbmQxOworCS8vIERpc2FibGUgSW50ZXJydXB0CisJdWxfQ29tbWFuZDEgPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKyBBUENJMzUwMV9UQ1dfUFJPRyk7CisKKwl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkR1bCk7CisJb3V0bCh1bF9Db21tYW5kMSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKyBBUENJMzUwMV9UQ1dfUFJPRyk7CisKKwl1aV9UaW1lcl9BT1dhdGNoZG9nID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJQVBDSTM1MDFfVENXX0lSUSkgJiAweDE7CisKKwlpZiAoKCF1aV9UaW1lcl9BT1dhdGNoZG9nKSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiSVJRIGZyb20gdW5rbm93IHNvdXJjZSIpOworCQlyZXR1cm47CisJfQorCisJLy8gRW5hYmxlIEludGVycnVwdAorCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKwl1bF9Db21tYW5kMSA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsKKwl1bF9Db21tYW5kMSA9ICgodWxfQ29tbWFuZDEgJiAweEZGRkZGOUZEdWwpIHwgMSA8PCAxKTsKKwlvdXRsKHVsX0NvbW1hbmQxLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsKKwlpX3RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQlBUENJMzUwMV9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWU3YjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8vIENhcmQgU3BlY2lmaWMgaW5mb3JtYXRpb24KKyNkZWZpbmUgQVBDSTM1MDFfQk9BUkRfVkVORE9SX0lEICAgICAgICAgICAgICAgICAweDE1QjgKKyNkZWZpbmUgQVBDSTM1MDFfQUREUkVTU19SQU5HRSAgICAgICAgICAgICAgICAgICAyNTUKKworI2RlZmluZSBBUENJMzUwMV9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgICAweDUwCisjZGVmaW5lIEFQQ0kzNTAxX0RJR0lUQUxfT1AgICAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQVBDSTM1MDFfQU5BTE9HX09VVFBVVCAgICAgICAgICAgICAgICAgICAgMHgwMAorCisvL0FuYWxvZyBPdXRwdXQgcmVsYXRlZCBEZWZpbmVzCisjZGVmaW5lIEFQQ0kzNTAxX0FPX1ZPTFRfTU9ERSAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTM1MDFfQU9fUFJPRyAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUENJMzUwMV9BT19UUklHX1NDUyAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFVOSVBPTEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQklQT0xBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNT0RFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1PREUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKy8vIEFOQUxPRyBPVVRQVVQgUkFOR0UKK3N0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kzNTAxX2FvID0geyAyLCB7CisJCQkJCUJJUF9SQU5HRSgxMCksCisJCQkJCVVOSV9SQU5HRSgxMCkKKwkJCQkJfQorfTsKKworLy9XYXRjaGRvZyBSZWxhdGVkIERlZmluZXMKKworI2RlZmluZSBBUENJMzUwMV9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIEFQQ0kzNTAxX1RDV19TWU5DX0VOQUJMRURJU0FCTEUgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1JFTE9BRF9WQUxVRSAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUENJMzUwMV9UQ1dfVElNRUJBU0UgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFQQ0kzNTAxX1RDV19QUk9HICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kzNTAxX1RDV19UUklHX1NUQVRVUyAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFQQ0kzNTAxX1RDV19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEFQQ0kzNTAxX1RDV19XQVJOX1RJTUVWQUwgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEFQQ0kzNTAxX1RDV19XQVJOX1RJTUVCQVNFICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEFERElEQVRBX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMzUwMQorCisvL0FPCitJTlQgaV9BUENJMzUwMV9Db25maWdBbmFsb2dPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMzUwMV9Xcml0ZUFuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL0RJCisvLyBmb3IgZGkgcmVhZAorLy9JTlQgaV9BUENJMzUwMV9SZWFkRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kzNTAxX1JlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL0RPCitpbnQgaV9BUENJMzUwMV9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kzNTAxX1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kzNTAxX1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vIFRJTUVSCisvLyB0aW1lciB2YWx1ZSBpcyBwYXNzZWQgYXMgdSBzZWNvbmRzCitJTlQgaV9BUENJMzUwMV9Db25maWdUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzNTAxX1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCSAgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzNTAxX1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworLy9JbnRlcnJ1cHQKK3ZvaWQgdl9BUENJMzUwMV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CisKKy8vUmVzZXQgZnVuY3Rpb25zCitpbnQgaV9BUENJMzUwMV9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTN4eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTN4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI2OGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jCkBAIC0wLDAgKzEsMTY5MSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYXNzZSAzICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTNYWFggICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kzeHh4LmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBTLiBXZWJlciAgICAgfCBEYXRlICAgICAgIDogIDE1LzA5LzIwMDUgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDpBUENJM1hYWCBNb2R1bGUuICBIYXJkd2FyZSBhYnN0cmFjdGlvbiBMYXllciBmb3IgQVBDSTNYWFh8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFJ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgCQkgfCAJCQkJCQkgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8CQkJCQkJICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJod2Rydl9hcGNpM3h4eC5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgIEFOQUxPRyBJTlBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfVGVzdENvbnZlcnNpb25TdGFydGVkICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldikgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgICBUZXN0IGlmIGFueSBjb252ZXJzaW9uIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwIDogQ29udmVyc2lvbiBub3Qgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIDEgOiBDb252ZXJzaW9uIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX1Rlc3RDb252ZXJzaW9uU3RhcnRlZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoKHJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDgpKSAmIDB4ODAwMDBVTCkgPT0gMHg4MDAwMFVMKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgICBpX0FQQ0kzWFhYX0FuYWxvZ0lucHV0Q29uZmlnT3BlcmF0aW5nTW9kZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgIENvbnZlcnRpbmcgbW9kZSBhbmQgY29udmVydCB0aW1lIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfU2luZ2xlRGlmZiAgPSAoQllURSkgIGRhdGFbMV07ICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9UaW1lQmFzZSAgICA9IChCWVRFKSAgZGF0YVsyXTsgKDA6IG5zLCAxOm1pY3JvcyAyOm1zKXwKK3wgICAgICAgICAgICAgICAgICAgIGR3X1JlbG9hZFZhbHVlID0gKERXT1JEKSBkYXRhWzNdOyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC4uLi4uLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDo+MCA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xIDogU2luZ2xlL0RpZmYgc2VsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTIgOiBDb252ZXJ0IHRpbWUgYmFzZSB1bml0eSBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMyA6IENvbnZlcnQgdGltZSB2YWx1ZSBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDogQW55IGNvbnZlcnNpb24gc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAwIDogQ29uZmlnIGNvbW1hbmQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9BbmFsb2dJbnB1dENvbmZpZ09wZXJhdGluZ01vZGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfVGltZUJhc2UgPSAwOworCUJZVEUgYl9TaW5nbGVEaWZmID0gMDsKKwlEV09SRCBkd19SZWxvYWRWYWx1ZSA9IDA7CisJRFdPUkQgZHdfVGVzdFJlbG9hZFZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPT0gNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIFNpbmdlbC9EaWZmIGZsYWcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQliX1NpbmdsZURpZmYgPSAoQllURSkgZGF0YVsxXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIHRpbWUgYmFzZSB1bml0aXkgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQliX1RpbWVCYXNlID0gKEJZVEUpIGRhdGFbMl07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBjb252ZXJ0IHRpbWUgcmVsb2FkIHZhbHVlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZHdfUmVsb2FkVmFsdWUgPSAoRFdPUkQpIGRhdGFbM107CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgdGltZSBiYXNlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5wc19Cb2FyZEluZm8tPgorCQkJCWJfQXZhaWxhYmxlQ29udmVydFVuaXQgJiAoMSA8PCBiX1RpbWVCYXNlKSkgIT0KKwkJCTApIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGNvbnZlcnQgdGltZSB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGR3X1JlbG9hZFZhbHVlID49IDApICYmIChkd19SZWxvYWRWYWx1ZSA8PSA2NTUzNSkpIHsKKwkJCQlkd19UZXN0UmVsb2FkVmFsdWUgPSBkd19SZWxvYWRWYWx1ZTsKKworCQkJCWlmIChiX1RpbWVCYXNlID09IDEpIHsKKwkJCQkJZHdfVGVzdFJlbG9hZFZhbHVlID0KKwkJCQkJCWR3X1Rlc3RSZWxvYWRWYWx1ZSAqIDEwMDBVTDsKKwkJCQl9CisJCQkJaWYgKGJfVGltZUJhc2UgPT0gMikgeworCQkJCQlkd19UZXN0UmVsb2FkVmFsdWUgPQorCQkJCQkJZHdfVGVzdFJlbG9hZFZhbHVlICogMTAwMDAwMFVMOworCQkJCX0KKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgY29udmVydCB0aW1lIHZhbHVlICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkd19UZXN0UmVsb2FkVmFsdWUgPj0KKwkJCQkJZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT4KKwkJCQkJdWlfTWluQWNxdWlzaXRpb250aW1lTnMpIHsKKwkJCQkJaWYgKChiX1NpbmdsZURpZmYgPT0gQVBDSTNYWFhfU0lOR0xFKQorCQkJCQkJfHwgKGJfU2luZ2xlRGlmZiA9PQorCQkJCQkJCUFQQ0kzWFhYX0RJRkYpKSB7CisJCQkJCQlpZiAoKChiX1NpbmdsZURpZmYgPT0gQVBDSTNYWFhfU0lOR0xFKSAmJiAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickFpQ2hhbm5lbCA9PSAwKSkgfHwgKChiX1NpbmdsZURpZmYgPT0gQVBDSTNYWFhfRElGRikgJiYgKGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJBaUNoYW5uZWxEaWZmID09IDApKSkgeworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2luZ2xlL0RpZmYgc2VsZWN0aW9uIGVycm9yICovCisJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCXByaW50aygiU2luZ2xlL0RpZmYgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTE7CisJCQkJCQl9IGVsc2UgeworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBjb252ZXJzaW9uIG5vdCBzdGFydGVkICovCisJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChpX0FQQ0kzWFhYX1Rlc3RDb252ZXJzaW9uU3RhcnRlZChkZXYpID09IDApIHsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQl1aV9Fb2NFb3NDb252ZXJzaW9uVGltZQorCQkJCQkJCQkJPQorCQkJCQkJCQkJKFVJTlQpCisJCQkJCQkJCQlkd19SZWxvYWRWYWx1ZTsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQliX0VvY0Vvc0NvbnZlcnNpb25UaW1lQmFzZQorCQkJCQkJCQkJPQorCQkJCQkJCQkJYl9UaW1lQmFzZTsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQliX1NpbmdlbERpZmYKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWJfU2luZ2xlRGlmZjsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQliX0FpSW5pdGlhbGlzYXRpb24KKwkJCQkJCQkJCT0gMTsKKworCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgdW5pdCAqLworCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJd3JpdGVsKChEV09SRCkKKwkJCQkJCQkJCWJfVGltZUJhc2UsCisJCQkJCQkJCQkodm9pZCAqKQorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCWR3X0FpQmFzZQorCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkzNikpOworCisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgKi8KKwkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCXdyaXRlbChkd19SZWxvYWRWYWx1ZSwgKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsgMzIpKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBBbnkgY29udmVyc2lvbiBzdGFydGVkICovCisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJcHJpbnRrKCJBbnkgY29udmVyc2lvbiBzdGFydGVkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktMTA7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTaW5nbGUvRGlmZiBzZWxlY3Rpb24gZXJyb3IgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlwcmludGsoIlNpbmdsZS9EaWZmIHNlbGVjdGlvbiBlcnJvclxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTE7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGltZSBzZWxlY3Rpb24gZXJyb3IgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJcHJpbnRrKCJDb252ZXJ0IHRpbWUgdmFsdWUgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRpbWUgc2VsZWN0aW9uIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJcHJpbnRrKCJDb252ZXJ0IHRpbWUgdmFsdWUgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGltZSBiYXNlIHNlbGVjdGlvbiBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJDb252ZXJ0IHRpbWUgYmFzZSB1bml0eSBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgICBpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgIENvbnZlcnRpbmcgbW9kZSBhbmQgY29udmVydCB0aW1lIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfQ29udmVydE1vZGUgPSAoQllURSkgIGRhdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9UaW1lQmFzZSAgICA9IChCWVRFKSAgZGF0YVsxXTsgKDA6IG5zLCAxOm1pY3JvcyAyOm1zKXwKK3wgICAgICAgICAgICAgICAgICAgIGR3X1JlbG9hZFZhbHVlID0gKERXT1JEKSBkYXRhWzJdOyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC4uLi4uLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDo+MDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMCA6IENvbmZpZyBjb21tYW5kIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDEpIHsKKwkJc3dpdGNoICgoQllURSkgZGF0YVswXSkgeworCQljYXNlIEFQQ0kzWFhYX0NPTkZJR1VSQVRJT046CisJCQlpX1JldHVyblZhbHVlID0KKwkJCQlpX0FQQ0kzWFhYX0FuYWxvZ0lucHV0Q29uZmlnT3BlcmF0aW5nTW9kZShkZXYsCisJCQkJcywgaW5zbiwgZGF0YSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDA7CisJCQlwcmludGsoIkNvbmZpZyBjb21tYW5kIGVycm9yICVkXG4iLCBkYXRhWzBdKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgICBpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgICAgUmVhZCAxIGFuYWxvZyBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfUmFuZ2UgICAgICAgICAgICAgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7ICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9DaGFubmVsICAgICAgICAgICA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBkd19OYnJPZkFjcXVpc2l0aW9uID0gaW5zbi0+bjsgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6PjA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMyA6IENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00IDogQ29uZmlndXJhdGlvbiBzZWxlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwOiBBbnkgY29udmVyc2lvbiBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBDb25maWcgY29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ29uZmlndXJhdGlvbiA9IChCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJQllURSBiX0NoYW5uZWwgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJRFdPUkQgZHdfVGVtcCA9IDA7CisJRFdPUkQgZHdfQ29uZmlndXJhdGlvbiA9IDA7CisJRFdPUkQgZHdfQWNxdWlzaXRpb25DcHQgPSAwOworCUJZVEUgYl9JbnRlcnJ1cHQgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBvcGVyYXRpbmcgbW9kZSBjb25maWd1cmVkICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoZGV2cHJpdi0+Yl9BaUluaXRpYWxpc2F0aW9uKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoKGJfQ2hhbm5lbCA8IGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJBaUNoYW5uZWwpCisJCQkJJiYgKGRldnByaXYtPmJfU2luZ2VsRGlmZiA9PSBBUENJM1hYWF9TSU5HTEUpKQorCQkJfHwgKChiX0NoYW5uZWwgPCBkZXZwcml2LT5wc19Cb2FyZEluZm8tPgorCQkJCQlpX05ickFpQ2hhbm5lbERpZmYpCisJCQkJJiYgKGRldnByaXYtPmJfU2luZ2VsRGlmZiA9PSBBUENJM1hYWF9ESUZGKSkpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Db25maWd1cmF0aW9uID4gNykgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaGFubmVsIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQlwcmludGsoIkNoYW5uZWwgJWQgcmFuZ2UgJWQgc2VsZWN0aW9uIGVycm9yXG4iLAorCQkJCQliX0NoYW5uZWwsIGJfQ29uZmlndXJhdGlvbik7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwgYl9DaGFubmVsKTsKKwkJfQorCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGJfSW50ZXJydXB0ICE9IDApIHx8ICgoYl9JbnRlcnJ1cHQgPT0gMCkKKwkJCQkJJiYgKGluc24tPm4gPj0gMSkpKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGNvbnZlcnNpb24gbm90IHN0YXJ0ZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGlfQVBDSTNYWFhfVGVzdENvbnZlcnNpb25TdGFydGVkKGRldikgPT0gMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2xlYXIgdGhlIEZJRk8gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJd3JpdGVsKDB4MTAwMDBVTCwKKwkJCQkJCSh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArCisJCQkJCQkJMTIpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEdldCBhbmQgc2F2ZSB0aGUgZGVsYXkgbW9kZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfVGVtcCA9CisJCQkJCQlyZWFkbCgodm9pZCAqKShkZXZwcml2LT4KKwkJCQkJCQlkd19BaUJhc2UgKyA0KSk7CisJCQkJCWR3X1RlbXAgPSBkd19UZW1wICYgMHhGRkZGRkVGMFVMOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgY29uZmlndXJhdGlvbiBzZWxlY3Rpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQl3cml0ZWwoZHdfVGVtcCwKKwkJCQkJCSh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArCisJCQkJCQkJNCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIE1ha2UgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19Db25maWd1cmF0aW9uID0KKwkJCQkJCShiX0NvbmZpZ3VyYXRpb24gJiAzKSB8CisJCQkJCQkoKERXT1JEKSAoYl9Db25maWd1cmF0aW9uID4+IDIpCisJCQkJCQk8PCA2KSB8ICgoRFdPUkQpIGRldnByaXYtPgorCQkJCQkJYl9TaW5nZWxEaWZmIDw8IDcpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQl3cml0ZWwoZHdfQ29uZmlndXJhdGlvbiwKKwkJCQkJCSh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArCisJCQkJCQkJMCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDaGFubmVsIHNlbGVjdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQl3cml0ZWwoZHdfVGVtcCB8IDB4MTAwVUwsCisJCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKworCQkJCQkJCTQpKTsKKwkJCQkJd3JpdGVsKChEV09SRCkgYl9DaGFubmVsLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQkwKSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVzdGF1cmUgZGVsYXkgbW9kZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXdyaXRlbChkd19UZW1wLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQk0KSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2V0IHRoZSBudW1iZXIgb2Ygc2VxdWVuY2UgdG8gMSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXdyaXRlbCgxLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQk0OCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTYXZlIHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9CisJCQkJCQliX0ludGVycnVwdDsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNhdmUgdGhlIG51bWJlciBvZiBjaGFubmVscyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzID0gMTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgbm90IHVzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfSW50ZXJydXB0ID09IDApIHsKKwkJCQkJCWZvciAoZHdfQWNxdWlzaXRpb25DcHQgPSAwOworCQkJCQkJCWR3X0FjcXVpc2l0aW9uQ3B0IDwKKwkJCQkJCQlpbnNuLT5uOworCQkJCQkJCWR3X0FjcXVpc2l0aW9uQ3B0KyspIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTdGFydCB0aGUgY29udmVyc2lvbiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJd3JpdGVsKDB4ODAwMDBVTCwKKwkJCQkJCQkJKHZvaWQgKikKKwkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJZHdfQWlCYXNlCisJCQkJCQkJCQkrIDgpKTsKKworCQkJICAvKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBXYWl0IHRoZSBFT1MgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkbyB7CisJCQkJCQkJCWR3X1RlbXAgPQorCQkJCQkJCQkJcmVhZGwoCisJCQkJCQkJCQkodm9pZCAqKQorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCWR3X0FpQmFzZQorCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkyMCkpOworCQkJCQkJCQlkd19UZW1wID0KKwkJCQkJCQkJCWR3X1RlbXAKKwkJCQkJCQkJCSYgMTsKKwkJCQkJCQl9CisJCQkJCQkJd2hpbGUgKGR3X1RlbXAgIT0gMSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUmVhZCB0aGUgYW5hbG9nIHZhbHVlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJZGF0YVtkd19BY3F1aXNpdGlvbkNwdF0KKwkJCQkJCQkJPQorCQkJCQkJCQkodW5zaWduZWQgaW50KQorCQkJCQkJCQlyZWFkbCgodm9pZAorCQkJCQkJCQkJKikKKwkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJZHdfQWlCYXNlCisJCQkJCQkJCQkrIDI4KSk7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogU3RhcnQgdGhlIGNvbnZlcnNpb24gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCXdyaXRlbCgweDE4MDAwMFVMLAorCQkJCQkJCSh2b2lkICopKGRldnByaXYtPgorCQkJCQkJCQlkd19BaUJhc2UgKyA4KSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBBbnkgY29udmVyc2lvbiBzdGFydGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJcHJpbnRrKCJBbnkgY29udmVyc2lvbiBzdGFydGVkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGF0YSBzaXplIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJPcGVyYXRpbmcgbW9kZSBub3QgY29uZmlndXJlZFxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTsKKwl9CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6IHZvaWQgdl9BUENJM1hYWF9JbnRlcnJ1cHQgKGludCAgICAgICAgICAgIGlycSwgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgKmQpICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6SW50ZXJydXB0IGhhbmRsZXIgZm9yIEFQQ0kzWFhYICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBXaGVuIGludGVycnVwdCBvY2N1cnMgdGhpcyBnZXRzIGNhbGxlZC4gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIEZpcnN0IGl0IGZpbmRzIHdoaWNoIGludGVycnVwdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYW5kICAgfAorfCAgICAgICAgICAgICAgICAgICAgaGFuZGxlcyAgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKwordm9pZCB2X0FQQ0kzWFhYX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCUJZVEUgYl9Db3B5Q3B0ID0gMDsKKwlEV09SRCBkd19TdGF0dXMgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIGludGVycnVwdCBvY2N1ciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKChkd19TdGF0dXMgPSByZWFkbCgodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAxNikpKSAmIDB4MlVMKSA9PQorCQkweDJVTCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogUmVzZXQgdGhlIGludGVycnVwdCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQl3cml0ZWwoZHdfU3RhdHVzLCAodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAxNikpOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGludGVycnVwdCBlbmFibGVkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCBhbGwgYW5hbG9nIGlucHV0cyB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJZm9yIChiX0NvcHlDcHQgPSAwOworCQkJCWJfQ29weUNwdCA8IGRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVsczsKKwkJCQliX0NvcHlDcHQrKykgeworCQkJCWRldnByaXYtPnVpX0FpUmVhZERhdGFbYl9Db3B5Q3B0XSA9CisJCQkJCShVSU5UKSByZWFkbCgodm9pZCAqKShkZXZwcml2LT4KKwkJCQkJCWR3X0FpQmFzZSArIDI4KSk7CisJCQl9CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZXQgdGhlIGludGVycnVwdCBmbGFnICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IDI7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOworCQl9CisJfQorfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOQUxPRyBPVVRQVVQgU1VCREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0ICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgICBSZWFkIDEgYW5hbG9nIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9SYW5nZSAgICA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX0NoYW5uZWwgID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgPSBhbmFsb2cgdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDo+MDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zIDogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQgOiBDb25maWd1cmF0aW9uIHNlbGVsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9SYW5nZSA9IChCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJQllURSBiX0NoYW5uZWwgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDEpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ2hhbm5lbCA8IGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJBb0NoYW5uZWwpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9SYW5nZSA8IDIpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IHRoZSByYW5nZSBzZWxlY3Rpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQl3cml0ZWwoYl9SYW5nZSwKKwkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsgOTYpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlIHRoZSBhbmFsb2cgdmFsdWUgdG8gdGhlIHNlbGVjdGVkIGNoYW5uZWwgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXdyaXRlbCgoZGF0YVswXSA8PCA4KSB8IGJfQ2hhbm5lbCwKKwkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsgMTAwKSk7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdhaXQgdGhlIGVuZCBvZiB0cmFuc2ZlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkbyB7CisJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQlyZWFkbCgodm9pZCAqKShkZXZwcml2LT4KKwkJCQkJCQlkd19BaUJhc2UgKyA5NikpOworCQkJCX0KKwkJCQl3aGlsZSAoKGR3X1N0YXR1cyAmIDB4MTAwKSAhPSAweDEwMCk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaGFubmVsIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQlwcmludGsoIkNoYW5uZWwgJWQgcmFuZ2UgJWQgc2VsZWN0aW9uIGVycm9yXG4iLAorCQkJCQliX0NoYW5uZWwsIGJfUmFuZ2UpOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCXByaW50aygiQ2hhbm5lbCAlZCBzZWxlY3Rpb24gZXJyb3JcbiIsIGJfQ2hhbm5lbCk7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUTCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgICBpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgZm9yIHlvdSBjYWxsIGFueSBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgVFRMLiAgICAgICAgfAorfCAgICAgICAgICAgICAgICBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIodXNlciBpbnB1dHMgZm9yIGRpcmVjdGlvbil8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX0luaXRUeXBlICAgID0gKEJZVEUpIGRhdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfUG9ydDJNb2RlICAgPSAoQllURSkgZGF0YVsxXTsgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDo+MDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBQb3J0IDIgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAwIDogQ29uZmlnIGNvbW1hbmQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJQllURSBiX0NvbW1hbmQgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkvKiAqKioqKioqKioqKioqKioqICovCisKKwkJYl9Db21tYW5kID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNvbW1hbmQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ29tbWFuZCA9PSBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgaW5pdGlhbGlzYXRpb24gYnVmZmVyIHNpemUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGJfQ29tbWFuZCA9PSBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIpCisJCQkJJiYgKGluc24tPm4gIT0gMikpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqLworCQkJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ29uZmlnIGNvbW1hbmQgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNvbW1hbmQgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMTAwOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBubyBlcnJvciBvY2N1ciBhbmQgQVBDSTNYWFhfVFRMX0lOSVRfRElSRUNUSU9OX1BPUlQyIGNvbW1hbmQgc2VsZWN0ZWQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKChpX1JldHVyblZhbHVlID49IDApCisJCSYmIChiX0NvbW1hbmQgPT0gQVBDSTNYWFhfVFRMX0lOSVRfRElSRUNUSU9OX1BPUlQyKSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBkaXJlY3Rpb24gKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRhdGFbMV0gPT0gMCkgfHwgKGRhdGFbMV0gPT0gMHhGRikpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTYXZlIHRoZSBjb25maWd1cmF0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvblswXSA9CisJCQkJZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0gfCBkYXRhWzFdOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBQb3J0IGRpcmVjdGlvbiBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiUG9ydCAyIGRpcmVjdGlvbiBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0xOworCQl9CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgbm8gZXJyb3Igb2NjdXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFRUTCBwb3J0IGluaXRpbGFpc2F0aW9uICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX0NvbW1hbmQgPT0gQVBDSTNYWFhfVFRMX0lOSVRfRElSRUNUSU9OX1BPUlQyKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bChkYXRhWzFdLCBkZXZwcml2LT5pb2Jhc2UgKyAyMjQpOworCQl9CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgIFRUTCBJTlBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgICAgIGlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGUgdGhlIHNlbGVjdGVkIG91dHB1dCBtYXNrIGFuZCByZWFkIHRoZSBzdGF0dXMgZnJvbXwKK3wgICAgICAgICAgICAgICAgICAgICBhbGwgVFRMIGNoYW5ubGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogZHdfQ2hhbm5lbE1hc2sgPSBkYXRhIFswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBkd19CaXRNYXNrICAgICA9IGRhdGEgWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogZGF0YVsxXSA6IEFsbCBUVEwgY2hhbm5sZXMgc3RhdGVzICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ID4wICA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNCAgIDogQ2hhbm5lbCBtYXNrIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9JbnNuQml0c1RUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJQllURSBiX0NoYW5uZWxDcHQgPSAwOworCURXT1JEIGR3X0NoYW5uZWxNYXNrID0gMDsKKwlEV09SRCBkd19CaXRNYXNrID0gMDsKKwlEV09SRCBkd19TdGF0dXMgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAyKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgY2hhbm5lIGFuZCBiaXQgbWFzayAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWR3X0NoYW5uZWxNYXNrID0gZGF0YVswXTsKKwkJZHdfQml0TWFzayA9IGRhdGFbMV07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgY2hhbm5lbCBtYXNrICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKCgoZHdfQ2hhbm5lbE1hc2sgJiAwWEZGMDBGRjAwKSA9PSAwKSAmJgorCQkJKCgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0gJiAweEZGKSA9PSAweEZGKQorCQkJCXx8ICgoKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdICYKKwkJCQkJCQkweEZGKSA9PSAwKQorCQkJCQkmJiAoKGR3X0NoYW5uZWxNYXNrICYgMFhGRjAwMDApID09CisJCQkJCQkwKSkpKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgc2V0L3Jlc2V0IGFueSBjaGFubmVsICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGR3X0NoYW5uZWxNYXNrKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHNldC9yZXN0IGFueSBwb3J0IDAgY2hhbm5lbHMgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGR3X0NoYW5uZWxNYXNrICYgMHhGRikgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgcG9ydCAwIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDgwKTsKKworCQkJCQlmb3IgKGJfQ2hhbm5lbENwdCA9IDA7IGJfQ2hhbm5lbENwdCA8IDg7CisJCQkJCQliX0NoYW5uZWxDcHQrKykgeworCQkJCQkJaWYgKChkd19DaGFubmVsTWFzayA+PgorCQkJCQkJCQliX0NoYW5uZWxDcHQpICYKKwkJCQkJCQkxKSB7CisJCQkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCQkJKGR3X1N0YXR1cyAmCisJCQkJCQkJCSgweEZGIC0gKDEgPDwgYl9DaGFubmVsQ3B0KSkpIHwgKGR3X0JpdE1hc2sgJiAoMSA8PCBiX0NoYW5uZWxDcHQpKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCW91dGwoZHdfU3RhdHVzLCBkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CisJCQkJfQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHNldC9yZXN0IGFueSBwb3J0IDIgY2hhbm5lbHMgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGR3X0NoYW5uZWxNYXNrICYgMHhGRjAwMDApIHsKKwkJCQkJZHdfQml0TWFzayA9IGR3X0JpdE1hc2sgPj4gMTY7CisJCQkJCWR3X0NoYW5uZWxNYXNrID0gZHdfQ2hhbm5lbE1hc2sgPj4gMTY7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCBwb3J0IDIgKHNlY29uZCBkaWdpdGFsIG91dHB1dCBwb3J0KSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAxMTIpOworCisJCQkJCWZvciAoYl9DaGFubmVsQ3B0ID0gMDsgYl9DaGFubmVsQ3B0IDwgODsKKwkJCQkJCWJfQ2hhbm5lbENwdCsrKSB7CisJCQkJCQlpZiAoKGR3X0NoYW5uZWxNYXNrID4+CisJCQkJCQkJCWJfQ2hhbm5lbENwdCkgJgorCQkJCQkJCTEpIHsKKwkJCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJCQkoZHdfU3RhdHVzICYKKwkJCQkJCQkJKDB4RkYgLSAoMSA8PCBiX0NoYW5uZWxDcHQpKSkgfCAoZHdfQml0TWFzayAmICgxIDw8IGJfQ2hhbm5lbENwdCkpOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJb3V0bChkd19TdGF0dXMsIGRldnByaXYtPmlvYmFzZSArIDExMik7CisJCQkJfQorCQkJfQorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHBvcnQgMCAoZmlyc3QgZGlnaXRhbCBvdXRwdXQgcG9ydCkgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJZGF0YVsxXSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCBwb3J0IDEgKGZpcnN0IGRpZ2l0YWwgaW5wdXQgcG9ydCkgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkYXRhWzFdID0gZGF0YVsxXSB8IChpbmwoZGV2cHJpdi0+aW9iYXNlICsgNjQpIDw8IDgpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcG9ydCAyIGlucHV0ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvblswXSAmIDB4RkYpID09IDApIHsKKwkJCQlkYXRhWzFdID0KKwkJCQkJZGF0YVsxXSB8IChpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCTk2KSA8PCAxNik7CisJCQl9IGVsc2UgeworCQkJCWRhdGFbMV0gPQorCQkJCQlkYXRhWzFdIHwgKGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJMTEyKSA8PCAxNik7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvbmZpZyBjb21tYW5kIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJDaGFubmVsIG1hc2sgZXJyb3JcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICAgICpkZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAgICAgICppbnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgY2hhbm5lbCAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBkYXRhWzBdIDogU2VsZWN0ZWQgVFRMIGNoYW5uZWwgc3RhdGUgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMCAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zICAgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9DaGFubmVsID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwl1bnNpZ25lZCBpbnQgKnBsc19SZWFkRGF0YSA9IGRhdGE7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDEpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgcmVhZCBwb3J0IDAgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ2hhbm5lbCA8IDgpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgcG9ydCAwIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwbHNfUmVhZERhdGFbMF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgODApOworCQkJcGxzX1JlYWREYXRhWzBdID0gKHBsc19SZWFkRGF0YVswXSA+PiBiX0NoYW5uZWwpICYgMTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIHJlYWQgcG9ydCAxICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGJfQ2hhbm5lbCA+IDcpICYmIChiX0NoYW5uZWwgPCAxNikpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCBwb3J0IDEgKGZpcnN0IGRpZ2l0YWwgaW5wdXQgcG9ydCkgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwbHNfUmVhZERhdGFbMF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgNjQpOworCQkJCXBsc19SZWFkRGF0YVswXSA9CisJCQkJCShwbHNfUmVhZERhdGFbMF0gPj4gKGJfQ2hhbm5lbCAtCisJCQkJCQk4KSkgJiAxOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHJlYWQgcG9ydCAyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfQ2hhbm5lbCA+IDE1KSAmJiAoYl9DaGFubmVsIDwgMjQpKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHBvcnQgMiBpbnB1dCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdCisJCQkJCQkJJiAweEZGKSA9PSAwKSB7CisJCQkJCQlwbHNfUmVhZERhdGFbMF0gPQorCQkJCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJCTk2KTsKKwkJCQkJCXBsc19SZWFkRGF0YVswXSA9CisJCQkJCQkJKHBsc19SZWFkRGF0YVswXSA+PgorCQkJCQkJCShiX0NoYW5uZWwgLSAxNikpICYgMTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXBsc19SZWFkRGF0YVswXSA9CisJCQkJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQkJMTEyKTsKKwkJCQkJCXBsc19SZWFkRGF0YVswXSA9CisJCQkJCQkJKHBsc19SZWFkRGF0YVswXSA+PgorCQkJCQkJCShiX0NoYW5uZWwgLSAxNikpICYgMTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQkJCXByaW50aygiQ2hhbm5lbCAlZCBzZWxlY3Rpb24gZXJyb3JcbiIsCisJCQkJCQliX0NoYW5uZWwpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgVFRMIE9VVFBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgICAgaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJTyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgdGhlIHN0YXRlIGZyb20gVFRMIG91dHB1dCBjaGFubmVsICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1N0YXRlICAgPSBkYXRhIFswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAgICA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMyAgIDogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9DaGFubmVsID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCUJZVEUgYl9TdGF0ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCQliX1N0YXRlID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgcmVhZCBwb3J0IDAgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ2hhbm5lbCA8IDgpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHBvcnQgMCAoZmlyc3QgZGlnaXRhbCBvdXRwdXQgcG9ydCkgYW5kIHNldC9yZXNldCB0aGUgc2VsY3RlZCBjaGFubmVsICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgODApOworCQkJZHdfU3RhdHVzID0KKwkJCQkoZHdfU3RhdHVzICYgKDB4RkYgLQorCQkJCQkoMSA8PCBiX0NoYW5uZWwpKSkgfCAoKGJfU3RhdGUgJiAxKSA8PAorCQkJCWJfQ2hhbm5lbCk7CisJCQlvdXRsKGR3X1N0YXR1cywgZGV2cHJpdi0+aW9iYXNlICsgODApOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcmVhZCBwb3J0IDIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9DaGFubmVsID4gMTUpICYmIChiX0NoYW5uZWwgPCAyNCkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgcG9ydCAyIG91dHB1dCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdICYgMHhGRikKKwkJCQkJPT0gMHhGRikgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHBvcnQgMiAoZmlyc3QgZGlnaXRhbCBvdXRwdXQgcG9ydCkgYW5kIHNldC9yZXNldCB0aGUgc2VsY3RlZCBjaGFubmVsICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDExMik7CisJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkoZHdfU3RhdHVzICYgKDB4RkYgLQorCQkJCQkJCSgxIDw8IChiX0NoYW5uZWwgLQorCQkJCQkJCQkJMTYpKSkpIHwKKwkJCQkJCSgoYl9TdGF0ZSAmIDEpIDw8IChiX0NoYW5uZWwgLQorCQkJCQkJCTE2KSk7CisJCQkJCW91dGwoZHdfU3RhdHVzLCBkZXZwcml2LT5pb2Jhc2UgKyAxMTIpOworCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQkJCXByaW50aygiQ2hhbm5lbCAlZCBzZWxlY3Rpb24gZXJyb3JcbiIsCisJCQkJCQliX0NoYW5uZWwpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJCXByaW50aygiQ2hhbm5lbCAlZCBzZWxlY3Rpb24gZXJyb3JcbiIsCisJCQkJCWJfQ2hhbm5lbCk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgIERJR0lUQUwgSU5QVVQgU1VCREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0ICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZHMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgRGlnaXRhbCBpbnB1dCBjaGFubmVsIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICgwIHRvIDMpICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBkYXRhWzBdIDogQ2hhbm5lbCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMCAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zICAgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJQllURSBiX0NoYW5uZWwgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJRFdPUkQgZHdfVGVtcCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX0NoYW5uZWwgPD0gZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickRpQ2hhbm5lbCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoaW5zbi0+biA+PSAxKSB7CisJCQlkd19UZW1wID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDMyKTsKKwkJCSpkYXRhID0gKGR3X1RlbXAgPj4gYl9DaGFubmVsKSAmIDE7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTM7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkcyB0aGUgdmFsdWUgb2YgdGhlIERpZ2l0YWwgaW5wdXQgUG9ydCBpLmUuNGNoYW5uZWxzfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gOiBQb3J0IHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJRFdPUkQgZHdfVGVtcCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDEpIHsKKwkJZHdfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAzMik7CisJCSpkYXRhID0gZHdfVGVtcCAmIDB4ZjsKKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgIERJR0lUQUwgT1VUUFVUIFNVQkRFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSB0aGUgc2VsZWN0ZWQgb3V0cHV0IG1hc2sgYW5kIHJlYWQgdGhlIHN0YXR1cyBmcm9tfAorfCAgICAgICAgICAgICAgICAgICAgIGFsbCBkaWdpdGFsIG91dHB1dCBjaGFubmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBkd19DaGFubmVsTWFzayA9IGRhdGEgWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGR3X0JpdE1hc2sgICAgID0gZGF0YSBbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBkYXRhWzFdIDogQWxsIGRpZ2l0YWwgb3V0cHV0IGNoYW5ubGVzIHN0YXRlcyAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00ICAgOiBDaGFubmVsIG1hc2sgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ2hhbm5lbENwdCA9IDA7CisJRFdPUkQgZHdfQ2hhbm5lbE1hc2sgPSAwOworCURXT1JEIGR3X0JpdE1hc2sgPSAwOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDIpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBjaGFubmUgYW5kIGJpdCBtYXNrICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZHdfQ2hhbm5lbE1hc2sgPSBkYXRhWzBdOworCQlkd19CaXRNYXNrID0gZGF0YVsxXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjaGFubmVsIG1hc2sgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGR3X0NoYW5uZWxNYXNrICYgMFhGRkZGRkZGMCkgPT0gMCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIHNldC9yZXNldCBhbnkgY2hhbm5lbCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkd19DaGFubmVsTWFzayAmIDB4RikgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgdGhlIGRpZ2l0YWwgb3V0cHV0IHBvcnQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA0OCk7CisKKwkJCQlmb3IgKGJfQ2hhbm5lbENwdCA9IDA7IGJfQ2hhbm5lbENwdCA8IDQ7CisJCQkJCWJfQ2hhbm5lbENwdCsrKSB7CisJCQkJCWlmICgoZHdfQ2hhbm5lbE1hc2sgPj4gYl9DaGFubmVsQ3B0KSAmCisJCQkJCQkxKSB7CisJCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJCShkd19TdGF0dXMgJiAoMHhGIC0KKwkJCQkJCQkJKDEgPDwgYl9DaGFubmVsQ3B0KSkpIHwgKGR3X0JpdE1hc2sgJiAoMSA8PCBiX0NoYW5uZWxDcHQpKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCW91dGwoZHdfU3RhdHVzLCBkZXZwcml2LT5pb2Jhc2UgKyA0OCk7CisJCQl9CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHRoZSBkaWdpdGFsIG91dHB1dCBwb3J0ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkYXRhWzFdID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDQ4KTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ29uZmlnIGNvbW1hbmQgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNoYW5uZWwgbWFzayBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgdGhlIHN0YXRlIGZyb20gZGlnaXRhbCBvdXRwdXQgY2hhbm5lbCAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1N0YXRlICAgPSBkYXRhIFswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ID4wICA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMyAgIDogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJQllURSBiX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlCWVRFIGJfU3RhdGUgPSAwOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDEpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ2hhbm5lbCA8IGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJEb0NoYW5uZWwpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQliX1N0YXRlID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHRoZSBkaWdpdGFsIG91dHB1dCBwb3J0ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgNDgpOworCisJCQlkd19TdGF0dXMgPQorCQkJCShkd19TdGF0dXMgJiAoMHhGIC0KKwkJCQkJKDEgPDwgYl9DaGFubmVsKSkpIHwgKChiX1N0YXRlICYgMSkgPDwKKwkJCQliX0NoYW5uZWwpOworCQkJb3V0bChkd19TdGF0dXMsIGRldnByaXYtPmlvYmFzZSArIDQ4KTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNoYW5uZWwgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgdGhlIHN0YXRlIGZyb20gZGlnaXRhbCBvdXRwdXQgY2hhbm5lbCAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogYl9TdGF0ZSAgID0gZGF0YSBbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ID4wICA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMyAgIDogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDEpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ2hhbm5lbCA8IGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJEb0NoYW5uZWwpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHRoZSBkaWdpdGFsIG91dHB1dCBwb3J0ICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgNDgpOworCisJCQlkd19TdGF0dXMgPSAoZHdfU3RhdHVzID4+IGJfQ2hhbm5lbCkgJiAxOworCQkJKmRhdGEgPSBkd19TdGF0dXM7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJDaGFubmVsIHNlbGVjdGlvbiBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzWFhYX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBjaGFyIGJfQ3B0ID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIERpc2FibGUgdGhlIGludGVycnVwdCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogUmVzZXQgdGhlIGludGVycnVwdCBmbGFnICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIENsZWFyIHRoZSBzdGFydCBjb21tYW5kICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXdyaXRlbCgwLCAodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyA4KSk7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogUmVzZXQgdGhlIGludGVycnVwdCBmbGFncyAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXdyaXRlbChyZWFkbCgodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAxNikpLAorCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAxNikpOworCisJLyoqKioqKioqKioqKioqKioqLworCS8qIGNsZWFyIHRoZSBFT1MgKi8KKwkvKioqKioqKioqKioqKioqKiovCisKKwlyZWFkbCgodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAyMCkpOworCisJLyoqKioqKioqKioqKioqKioqKi8KKwkvKiBDbGVhciB0aGUgRklGTyAqLworCS8qKioqKioqKioqKioqKioqKiovCisKKwlmb3IgKGJfQ3B0ID0gMDsgYl9DcHQgPCAxNjsgYl9DcHQrKykgeworCQlyZWFkbCgodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAyOCkpOworCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZW5hYmxlX2lycShkZXYtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTN4eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTN4eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODhkN2MxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQ09NRURJX1NVQkRfVFRMSU8KKyNkZWZpbmUgQ09NRURJX1NVQkRfVFRMSU8gICAxMQkvKiBEaWdpdGFsIElucHV0IE91dHB1dCBCdXQgVFRMICovCisjZW5kaWYKKworI2lmbmRlZiBBRERJREFUQV9FTkFCTEUKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAxCisjZGVmaW5lIEFERElEQVRBX0RJU0FCTEUgMAorI2VuZGlmCisKKyNkZWZpbmUgQVBDSTNYWFhfU0lOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJM1hYWF9ESUZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQQ0kzWFhYX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIgICAwCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpM1hYWF9haSA9IHsgOCwge0JJUF9SQU5HRSgxMCksCisJCQkJCQkgICAgIEJJUF9SQU5HRSg1KSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDIpLAorCQkJCQkJICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgxMCksCisJCQkJCQkgICAgIFVOSV9SQU5HRSg1KSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDIpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMSl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTNYWFhfdHRsID0geyAxMiwge0JJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kzWFhYX2FvID0geyAyLCB7QklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEwKX0KK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMDM1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzAzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYzAxODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzAzNS5jCkBAIC0wLDAgKzEsNSBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8wMzUgMQorCisjZGVmaW5lIEFERElEQVRBX1dBVENIRE9HIDIJLy8gT3Igc2hvbGQgaXQgYmUgc29tZXRoaW5nIGVsc2UKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xMDMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzEwMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTIwNTZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xMDMyLmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzEwMzIgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNWNhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MDAuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTUwMCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0MTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUxNi5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8xNTE2IDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzUxY2RkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzE1NjQgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTZ4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjc5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTZYWCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTcxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzMzQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTcxMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8xNzEwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzFjNDdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzIwMTYgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDhlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMzIuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMjAzMiAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzOWY4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8yMjAwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMwMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjk3YzMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzMwMDEgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzEyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODMxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzEyMCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1YTcwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzIwMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8zMjAwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMzAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMzMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU0Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMzAwLmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzMzMDAgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzUwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDllMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzUwMSAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfM3h4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5ZGViNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfM3h4eC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8zWFhYIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV9hbGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViMWIyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfYWxsLmMKQEAgLTAsMCArMSwxOCBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8wMzUgIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTAzMiAxCisjZGVmaW5lIENPTkZJR19BUENJXzE1MDAgMQorI2RlZmluZSBDT05GSUdfQVBDSV8xNTE2IDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTU2NCAxCisjZGVmaW5lIENPTkZJR19BUENJXzE2WFggMQorI2RlZmluZSBDT05GSUdfQVBDSV8xNzEwIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMjAxNiAxCisjZGVmaW5lIENPTkZJR19BUENJXzIwMzIgMQorI2RlZmluZSBDT05GSUdfQVBDSV8yMjAwIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzAwMSAxCisjZGVmaW5lIENPTkZJR19BUENJXzMxMjAgMQorI2RlZmluZSBDT05GSUdfQVBDSV8zMjAwIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzMwMCAxCisjZGVmaW5lIENPTkZJR19BUENJXzM1MDEgMQorI2RlZmluZSBDT05GSUdfQVBDSV8zWFhYIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k2MjA4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTYyMDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzEwZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k2MjA4LmMKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYWRsX3BjaTYyMDguYworCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBBRExpbmsgNjIwOCBzZXJpZXMgY2FyZHM6CisJY2FyZAkgICAgIHwgdm9sdGFnZSBvdXRwdXQgICAgfCBjdXJyZW50IG91dHB1dAorCS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KKwlQQ0ktNjIwOFYgICAgfCAgOCBjaGFubmVscyAgICAgICB8IC0KKwlQQ0ktNjIxNlYgICAgfCAxNiBjaGFubmVscyAgICAgICB8IC0KKwlQQ0ktNjIwOEEgICAgfCAgOCBjaGFubmVscyAgICAgICB8IDggY2hhbm5lbHMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBhZGxfcGNpNjIwOAorRGVzY3JpcHRpb246IEFETGluayBQQ0ktNjIwOEEKK0RldmljZXM6IFtBRExpbmtdIFBDSS02MjA4QSAoYWRsX3BjaTYyMDgpCitBdXRob3I6IG5zeWVvdyA8bnN5ZW93QHBkLmphcmluZy5teT4KK1VwZGF0ZWQ6IEZyaSwgMzAgSmFuIDIwMDQgMTQ6NDQ6MjcgKzA4MDAKK1N0YXR1czogdW50ZXN0ZWQKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBub25lCisKK1JlZmVyZW5jZXM6CisJLSBuaV82NjB4LmMKKwktIGFkbF9wY2k5MTExLmMJCWNvcGllZCB0aGUgZW50aXJlIHBjaSBzZXR1cCBzZWN0aW9uCisJLSBhZGxfcGNpOTExOC5jCisqLworLyoKKyAqIFRoZXNlIGhlYWRlcnMgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSwgYW5kIGFueSBjb21tZW50cworICogeW91IHdpc2ggdG8gc2F5IGFib3V0IHRoZSBkcml2ZXIuICBUaGUgY29tbWVudCBhcmVhIGlzIHRoZSBwbGFjZQorICogdG8gcHV0IGFueSBrbm93biBidWdzLCBsaW1pdGF0aW9ucywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIHN1cHBvcnRlZAorICogY29tbWFuZCB0cmlnZ2Vycywgd2hldGhlciBvciBub3QgY29tbWFuZHMgYXJlIHN1cHBvcnRlZCBvbiBwYXJ0aWN1bGFyCisgKiBzdWJkZXZpY2VzLCBldGMuCisgKgorICogU29tZXdoZXJlIGluIHRoZSBjb21tZW50IHNob3VsZCBiZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmF0aW9uCisgKiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgd2l0aCBjb21lZGlfY29uZmlnLgorICovCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorCisjZGVmaW5lIFBDSTYyMDhfRFJJVkVSX05BTUUgCSJhZGxfcGNpNjIwOCIKKworLyogQm9hcmQgZGVzY3JpcHRpb25zICovCitzdHJ1Y3QgcGNpNjIwOF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZfaWQ7CS8qIGBsc3BjaWAgd2lsbCBzaG93IHlvdSB0aGlzICovCisJaW50IGFvX2NoYW5zOworCS8vaW50IGFvX2JpdHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaTYyMDhfYm9hcmQgcGNpNjIwOF9ib2FyZHNbXSA9IHsKKwkvKnsKKwkgICBuYW1lIDogICJwY2k2MjA4diIsCisJICAgZGV2X2lkICAgICAgIDogIDB4NjIwOCwgICAgICAvL25vdCBzdXJlCisJICAgYW9fY2hhbnM6ICA4CisJICAgLy8sICBhb19iaXRzIDogIDE2CisJICAgfSwKKwkgICB7CisJICAgbmFtZSA6ICAicGNpNjIxNnYiLAorCSAgIGRldl9pZCAgICAgICA6ICAweDYyMDgsICAgICAgLy9ub3Qgc3VyZQorCSAgIGFvX2NoYW5zOiAgMTYKKwkgICAvLywgIGFvX2JpdHMgOiAgMTYKKwkgICB9LCAqLworCXsKKwkgICAgICBuYW1lOgkicGNpNjIwOGEiLAorCSAgICAgIGRldl9pZDoJMHg2MjA4LAorCSAgICAgIGFvX2NoYW5zOjgKKwkJCS8vLCAgICAgYW9fYml0cyA6ICAxNgorCQl9Cit9OworCisvKiBUaGlzIGlzIHVzZWQgYnkgbW9kcHJvYmUgdG8gdHJhbnNsYXRlIFBDSSBJRHMgdG8gZHJpdmVycy4gIFNob3VsZAorICogb25seSBiZSB1c2VkIGZvciBQQ0kgYW5kIElTQS1QblAgZGV2aWNlcyAqLworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaTYyMDhfcGNpX3RhYmxlKSA9IHsKKwkvL3sgUENJX1ZFTkRPUl9JRF9BRExJTkssIDB4NjIwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCS8veyBQQ0lfVkVORE9SX0lEX0FETElOSywgMHg2MjA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCisJe1BDSV9WRU5ET1JfSURfQURMSU5LLCAweDYyMDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTYyMDhfcGNpX3RhYmxlKTsKKworLyogV2lsbCBiZSBpbml0aWFsaXplZCBpbiBwY2k2MjA4X2ZpbmQgZGV2aWNlKCkuICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBwY2k2MjA4X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBwY2k2MjA4X3ByaXZhdGUgeworCWludCBkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwkvKiBmb3IgYSBQQ0kgZGV2aWNlICovCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaTYyMDhfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBwY2k2MjA4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjaTYyMDhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworI2RlZmluZSBwY2k2MjA4X2JvYXJkX25iciBcCisJKHNpemVvZihwY2k2MjA4X2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjaTYyMDhfYm9hcmQpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjaTYyMDggPSB7CisgICAgICBkcml2ZXJfbmFtZTpQQ0k2MjA4X0RSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaTYyMDhfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjaTYyMDhfZGV0YWNoLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpNjIwOCwgcGNpNjIwOF9wY2lfdGFibGUpOworCitzdGF0aWMgaW50IHBjaTYyMDhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KTsKK3N0YXRpYyBpbnQKK3BjaTYyMDhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCB1bnNpZ25lZCBsb25nICppb19iYXNlX3B0ciwKKwlpbnQgZGV2X21pbm9yKTsKKworLypyZWFkL3dyaXRlIGZ1bmN0aW9ucyovCitzdGF0aWMgaW50IHBjaTYyMDhfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNpNjIwOF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworLy9zdGF0aWMgaW50IHBjaTYyMDhfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorLy8gICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsKKy8vc3RhdGljIGludCBwY2k2MjA4X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorLy8gICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjaTYyMDhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBpb19iYXNlOworCisJcHJpbnRrKCJjb21lZGklZDogcGNpNjIwODogIiwgZGV2LT5taW5vcik7CisKKwlyZXR2YWwgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2k2MjA4X3ByaXZhdGUpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IHBjaTYyMDhfZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gcGNpNjIwOF9wY2lfc2V0dXAoZGV2cHJpdi0+cGNpX2RldiwgJmlvX2Jhc2UsIGRldi0+bWlub3IpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZGV2LT5pb2Jhc2UgPSBpb19iYXNlOworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsJLy9hbnl0aGluZyBlbHNlIHRvIGFkZCBoZXJlPz8KKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX2NoYW5zOworCXMtPm1heGRhdGEgPSAweGZmZmY7CS8vMTYtYml0IERBQworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsJLy90aGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQuCisJcy0+aW5zbl93cml0ZSA9IHBjaTYyMDhfYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gcGNpNjIwOF9hb19yaW5zbjsKKworCS8vcz1kZXYtPnN1YmRldmljZXMrMTsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwkvL3MtPnR5cGU9Q09NRURJX1NVQkRfRElPOworCS8vcy0+c3ViZGV2X2ZsYWdzPVNERl9SRUFEQUJMRXxTREZfV1JJVEFCTEU7CisJLy9zLT5uX2NoYW49MTY7CisJLy9zLT5tYXhkYXRhPTE7CisJLy9zLT5yYW5nZV90YWJsZT0mcmFuZ2VfZGlnaXRhbDsKKwkvL3MtPmluc25fYml0cyA9IHBjaTYyMDhfZGlvX2luc25fYml0czsKKwkvL3MtPmluc25fY29uZmlnID0gcGNpNjIwOF9kaW9faW5zbl9jb25maWc7CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IHBjaTYyMDhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHBjaTYyMDg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2cHJpdiAmJiBkZXZwcml2LT5wY2lfZGV2KSB7CisJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTYyMDhfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpID0gMCwgRGF0YV9SZWFkOworCXVuc2lnbmVkIHNob3J0IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBsb25nIGludmVydCA9IDEgPDwgKDE2IC0gMSk7CisJdW5zaWduZWQgbG9uZyBvdXRfdmFsdWU7CisJLyogV3JpdGluZyBhIGxpc3Qgb2YgdmFsdWVzIHRvIGFuIEFPIGNoYW5uZWwgaXMgcHJvYmFibHkgbm90CisJICogdmVyeSB1c2VmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBpbnRlcmZhY2UgaXMgZGVmaW5lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCW91dF92YWx1ZSA9IGRhdGFbaV0gXiBpbnZlcnQ7CisJCS8qIGEgdHlwaWNhbCBwcm9ncmFtbWluZyBzZXF1ZW5jZSAqLworCQlkbyB7CisJCQlEYXRhX1JlYWQgPSAoaW53KGRldi0+aW9iYXNlKSAmIDEpOworCQl9IHdoaWxlIChEYXRhX1JlYWQpOworCQlvdXR3KG91dF92YWx1ZSwgZGV2LT5pb2Jhc2UgKyAoMHgwMiAqIGNoYW4pKTsKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBvdXRfdmFsdWU7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKyAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCitzdGF0aWMgaW50IHBjaTYyMDhfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisKKwlyZXR1cm4gaTsKK30KKworLyogRElPIGRldmljZXMgYXJlIHNsaWdodGx5IHNwZWNpYWwuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0bworICogaW1wbGVtZW50IHRoZSBpbnNuX3JlYWQvaW5zbl93cml0ZSBpbnRlcmZhY2UsIGl0IGlzIG11Y2ggbW9yZQorICogdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBpZiB5b3UgaW1wbGVtZW50IHRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlLgorICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCisgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCisvL3N0YXRpYyBpbnQgcGNpNjIwOF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisvL3sKKy8vICAgICAgaWYoaW5zbi0+biE9MilyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworLy8gICAgICBpZihkYXRhWzBdKXsKKy8vICAgICAgICAgICAgICBzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKy8vICAgICAgICAgICAgICBzLT5zdGF0ZSB8PSBkYXRhWzBdJmRhdGFbMV07CisJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IGxpbmVzICovCisJCS8vb3V0dyhzLT5zdGF0ZSxkZXYtPmlvYmFzZSArIFNLRUxfRElPKTsKKy8vICAgICAgfQorCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbAorCSAqIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuICovCisJLy9kYXRhWzFdPWludyhkZXYtPmlvYmFzZSArIFNLRUxfRElPKTsKKwkvKiBvciB3ZSBjb3VsZCBqdXN0IHJldHVybiB0aGUgc29mdHdhcmUgY29weSBvZiB0aGUgb3V0cHV0IHZhbHVlcyBpZgorCSAqIGl0IHdhcyBhIHB1cmVseSBkaWdpdGFsIG91dHB1dCBzdWJkZXZpY2UgKi8KKwkvL2RhdGFbMV09cy0+c3RhdGU7CisKKy8vICAgICAgcmV0dXJuIDI7CisvL30KKworLy9zdGF0aWMgaW50IHBjaTYyMDhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisvL3sKKy8vICAgICAgaW50IGNoYW49Q1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBUaGUgaW5wdXQgb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBkaWdpdGFsIGxpbmUgaXMKKwkgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCisJICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisJICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCisKKy8vICAgICAgaWYoZGF0YVswXT09Q09NRURJX09VVFBVVCl7CisvLyAgICAgICAgICAgICAgcy0+aW9fYml0cyB8PSAxPDxjaGFuOworLy8gICAgICB9ZWxzZXsKKy8vICAgICAgICAgICAgICBzLT5pb19iaXRzICY9IH4oMTw8Y2hhbik7CisvLyAgICAgIH0KKwkvL291dHcocy0+aW9fYml0cyxkZXYtPmlvYmFzZSArIFNLRUxfRElPX0NPTkZJRyk7CisKKy8vICAgICAgcmV0dXJuIDE7CisvL30KKworc3RhdGljIGludCBwY2k2MjA4X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlpbnQgaTsKKworCWZvciAocGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lfZGV2ICE9IE5VTEw7CisJCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCQlpZiAocGNpX2Rldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQURMSU5LKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgcGNpNjIwOF9ib2FyZF9uYnI7IGkrKykgeworCQkJCWlmIChwY2k2MjA4X2JvYXJkc1tpXS5kZXZfaWQgPT0gcGNpX2Rldi0+ZGV2aWNlKSB7CisJCQkJCS8vIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPworCQkJCQlpZiAoKGJ1cyAhPSAwKSB8fCAoc2xvdCAhPSAwKSkgeworCQkJCQkJLy8gYXJlIHdlIG9uIHRoZSB3cm9uZyBidXMvc2xvdD8KKwkJCQkJCWlmIChwY2lfZGV2LT5idXMtPm51bWJlcgorCQkJCQkJCSE9IGJ1cyB8fAorCQkJCQkJCVBDSV9TTE9UKHBjaV9kZXYtPmRldmZuKQorCQkJCQkJCSE9IHNsb3QpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlkZXYtPmJvYXJkX3B0ciA9IHBjaTYyMDhfYm9hcmRzICsgaTsKKwkJCQkJZ290byBmb3VuZDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiBubyBzdXBwb3J0ZWQgYm9hcmQgZm91bmQhIChyZXEuIGJ1cy9zbG90IDogJWQvJWQpXG4iLAorCQlkZXYtPm1pbm9yLCBidXMsIHNsb3QpOworCXJldHVybiAtRUlPOworCisgICAgICBmb3VuZDoKKwlwcmludGsoImNvbWVkaSVkOiBmb3VuZCAlcyAoYjpzOmY9JWQ6JWQ6JWQpICwgaXJxPSVkXG4iLAorCQlkZXYtPm1pbm9yLAorCQlwY2k2MjA4X2JvYXJkc1tpXS5uYW1lLAorCQlwY2lfZGV2LT5idXMtPm51bWJlciwKKwkJUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pLAorCQlQQ0lfRlVOQyhwY2lfZGV2LT5kZXZmbiksIHBjaV9kZXYtPmlycSk7CisKKwkvLyBUT0RPOiBXYXJuIGFib3V0IG5vbi10ZXN0ZWQgYm9hcmRzLgorCS8vc3dpdGNoKGJvYXJkLT5kZXZpY2VfaWQpCisJLy97CisJLy99OworCisJZGV2cHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcGNpNjIwOF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHVuc2lnbmVkIGxvbmcgKmlvX2Jhc2VfcHRyLAorCWludCBkZXZfbWlub3IpCit7CisJdW5zaWduZWQgbG9uZyBpb19iYXNlLCBpb19yYW5nZSwgbGNyX2lvX2Jhc2UsIGxjcl9pb19yYW5nZTsKKworCS8vIEVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgUENJNjIwOF9EUklWRVJfTkFNRSkgPCAwKSB7CisJCXByaW50aygiY29tZWRpJWQ6IEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iLCBkZXZfbWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLy8gUmVhZCBsb2NhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyBbUENJX0JBU0VfQUREUkVTUyAjMV0uCisJbGNyX2lvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMSk7CisJbGNyX2lvX3JhbmdlID0gcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCAxKTsKKworCXByaW50aygiY29tZWRpJWQ6IGxvY2FsIGNvbmZpZyByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bHggWzB4JTRseF1cbiIsCisJCWRldl9taW5vciwgbGNyX2lvX2Jhc2UsIGxjcl9pb19yYW5nZSk7CisKKwkvLyBSZWFkIFBDSTYyMDggcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIFtQQ0lfQkFTRV9BRERSRVNTICMyXS4KKwlpb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDIpOworCWlvX3JhbmdlID0gcGNpX3Jlc291cmNlX2VuZChwY2lfZGV2LCAyKSAtIGlvX2Jhc2UgKyAxOworCisJcHJpbnRrKCJjb21lZGklZDogNjIwOCByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bHggWzB4JTRseF1cbiIsCisJCWRldl9taW5vciwgaW9fYmFzZSwgaW9fcmFuZ2UpOworCisJKmlvX2Jhc2VfcHRyID0gaW9fYmFzZTsKKwkvL2RldnByaXYtPmlvX3JhbmdlID0gaW9fcmFuZ2U7CisJLy9kZXZwcml2LT5pc192YWxpZD0wOworCS8vZGV2cHJpdi0+bGNyX2lvX2Jhc2U9bGNyX2lvX2Jhc2U7CisJLy9kZXZwcml2LT5sY3JfaW9fcmFuZ2U9bGNyX2lvX3JhbmdlOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTcyOTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGY5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTcyOTYuYwpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBhZGxfcGNpNzI5NgorRGVzY3JpcHRpb246IERyaXZlciBmb3IgdGhlIEFkbGluayBQQ0ktNzI5NiA5NiBjaC4gZGlnaXRhbCBpbyBib2FyZAorRGV2aWNlczogW0FETGlua10gUENJLTcyOTYgKGFkbF9wY2k3Mjk2KQorQXV0aG9yOiBKb24gR3JpZXJzb24gPGpkQHJlbmtvLmNvLnVrPgorVXBkYXRlZDogTW9uLCAxNCBBcHIgMjAwOCAxNTowNTo1NiArMDEwMAorU3RhdHVzOiB0ZXN0aW5nCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKy8vICNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgUE9SVDFBIDAKKyNkZWZpbmUgUE9SVDJBIDQKKyNkZWZpbmUgUE9SVDNBIDgKKyNkZWZpbmUgUE9SVDRBIDEyCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ0k3Mjk2IDB4NzI5NgorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYWRsX3BjaTcyOTZfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BRExJTkssIFBDSV9ERVZJQ0VfSURfUENJNzI5NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwKKwkJMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWRsX3BjaTcyOTZfcGNpX3RhYmxlKTsKKworc3RydWN0IGFkbF9wY2k3Mjk2X3ByaXZhdGUgeworCWludCBkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworfTsKKworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYWRsX3BjaTcyOTZfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBhZGxfcGNpNzI5Nl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBhZGxfcGNpNzI5Nl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hZGxfcGNpNzI5NiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhZGxfcGNpNzI5NiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YWRsX3BjaTcyOTZfYXR0YWNoLAorICAgICAgZGV0YWNoOmFkbF9wY2k3Mjk2X2RldGFjaCwKK307CisKK3N0YXRpYyBpbnQgYWRsX3BjaTcyOTZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGJ1cywgc2xvdDsKKwlpbnQgcmV0OworCisJcHJpbnRrKCJjb21lZGk6IGF0dGVtcHQgdG8gYXR0YWNoLi4uXG4iKTsKKwlwcmludGsoImNvbWVkaSVkOiBhZGxfcGNpNzQzMlxuIiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAicGNpNzQzMiI7CisJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGFkbF9wY2k3Mjk2X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKworCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTksgJiYKKwkJCXBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJNzI5NikgeworCQkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQkJLyogcmVxdWVzdGVkIHBhcnRpY3VsYXIgYnVzL3Nsb3QgKi8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBidXMKKwkJCQkJfHwgUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0gc2xvdCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCQkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgImFkbF9wY2k3Mjk2IikgPCAwKSB7CisJCQkJcHJpbnRrKCJjb21lZGklZDogRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldi0+bWlub3IpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlkZXYtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpOworCQkJcHJpbnRrKCJjb21lZGk6IGJhc2UgYWRkciAlNGx4XG4iLCBkZXYtPmlvYmFzZSk7CisKKwkJCS8vIGZvdXIgODI1NSBkaWdpdGFsIGlvIHN1YmRldmljZXMKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsCisJCQkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlKSk7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCQkJcmV0ID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsCisJCQkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsgUE9SVDJBKSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkJCXJldCA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLAorCQkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIFBPUlQzQSkpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJCQlyZXQgPSBzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwKKwkJCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKyBQT1JUNEEpKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXByaW50aygiY29tZWRpJWQ6IG5vIHN1cHBvcnRlZCBib2FyZCBmb3VuZCEgKHJlcS4gYnVzL3Nsb3QgOiAlZC8lZClcbiIsCisJCWRldi0+bWlub3IsIGJ1cywgc2xvdCk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTcyOTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHBjaTc0MzI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2cHJpdiAmJiBkZXZwcml2LT5wY2lfZGV2KSB7CisJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCX0KKwkvLyBkZXRhY2ggZm91ciA4MjU1IGRpZ2l0YWwgaW8gc3ViZGV2aWNlcworCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDApOworCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMSk7CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAyKTsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDMpOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkbF9wY2k3Mjk2LCBhZGxfcGNpNzI5Nl9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3NDMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTc0MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYxNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3NDMyLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYWRsX3BjaTc0MzIuYworCisgICAgSGFyZHdhcmUgY29tZWRpIGRyaXZlciBmb3QgUENJNzQzMiBBZGxpbmsgY2FyZAorICAgIENvcHlyaWdodCAoQykgMjAwNCBNaWNoZWwgTGFjaGluZSA8bWlrZUBtaWtlbGFjaGFpbmUuY2E+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFkbF9wY2k3NDMyCitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciB0aGUgQWRsaW5rIFBDSS03NDMyIDY0IGNoLiBpc29sYXRlZCBkaWdpdGFsIGlvIGJvYXJkCitEZXZpY2VzOiBbQURMaW5rXSBQQ0ktNzQzMiAoYWRsX3BjaTc0MzIpCitBdXRob3I6IE1pY2hlbCBMYWNoYWluZSA8bWlrZUBtaWtlbGFjaGFpbmUuY2E+CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorVXBkYXRlZDogTW9uLCAxNCBBcHIgMjAwOCAxNTowODoxNCArMDEwMAorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IHN1cHBvcnRlZAorICBQQ0kgZGV2aWNlIGZvdW5kIHdpbGwgYmUgdXNlZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNkZWZpbmUgUENJNzQzMl9ESSAgICAgIDB4MDAKKyNkZWZpbmUgUENJNzQzMl9ETwkgICAgMHgwMAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENJNzQzMiAweDc0MzIKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGFkbF9wY2k3NDMyX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQURMSU5LLCBQQ0lfREVWSUNFX0lEX1BDSTc0MzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsCisJCTAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFkbF9wY2k3NDMyX3BjaV90YWJsZSk7CisKK3N0cnVjdCBhZGxfcGNpNzQzMl9wcml2YXRlIHsKKwlpbnQgZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBhZGxfcGNpNzQzMl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FkbF9wY2k3NDMyID0geworICAgICAgZHJpdmVyX25hbWU6ImFkbF9wY2k3NDMyIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphZGxfcGNpNzQzMl9hdHRhY2gsCisgICAgICBkZXRhY2g6YWRsX3BjaTc0MzJfZGV0YWNoLAorfTsKKworLyogRGlnaXRhbCBJTyAqLworCitzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKiAgICAgICAgICAgICovCisKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGJ1cywgc2xvdDsKKworCXByaW50aygiY29tZWRpOiBhdHRlbXB0IHRvIGF0dGFjaC4uLlxuIik7CisJcHJpbnRrKCJjb21lZGklZDogYWRsX3BjaTc0MzJcbiIsIGRldi0+bWlub3IpOworCisJZGV2LT5ib2FyZF9uYW1lID0gInBjaTc0MzIiOworCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhZGxfcGNpNzQzMl9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisKKwkJaWYgKHBjaWRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQURMSU5LICYmCisJCQlwY2lkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BDSTc0MzIpIHsKKwkJCWlmIChidXMgfHwgc2xvdCkgeworCQkJCS8qIHJlcXVlc3RlZCBwYXJ0aWN1bGFyIGJ1cy9zbG90ICovCisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gYnVzCisJCQkJCXx8IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9IHNsb3QpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwkJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJhZGxfcGNpNzQzMiIpIDwgMCkgeworCQkJCXByaW50aygiY29tZWRpJWQ6IEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iLCBkZXYtPm1pbm9yKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWRldi0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisJCQlwcmludGsoImNvbWVkaTogYmFzZSBhZGRyICU0bHhcbiIsIGRldi0+aW9iYXNlKTsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCQkJcy0+bl9jaGFuID0gMzI7CisJCQlzLT5tYXhkYXRhID0gMTsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDMyOworCQkJcy0+aW9fYml0cyA9IDB4MDAwMDAwMDA7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW5zbl9iaXRzID0gYWRsX3BjaTc0MzJfZGlfaW5zbl9iaXRzOworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCQlzLT5uX2NoYW4gPSAzMjsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+bGVuX2NoYW5saXN0ID0gMzI7CisJCQlzLT5pb19iaXRzID0gMHhmZmZmZmZmZjsKKwkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCQlzLT5pbnNuX2JpdHMgPSBhZGxfcGNpNzQzMl9kb19pbnNuX2JpdHM7CisKKwkJCXByaW50aygiY29tZWRpOiBhdHRhY2hlZFxuIik7CisKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogbm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kISAocmVxLiBidXMvc2xvdCA6ICVkLyVkKVxuIiwKKwkJZGV2LT5taW5vciwgYnVzLCBzbG90KTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBhZGxfcGNpNzQzMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNpNzQzMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKKwkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlwcmludGsoImNvbWVkaTogcGNpNzQzMl9kb19pbnNuX2JpdHMgY2FsbGVkXG4iKTsKKwlwcmludGsoImNvbWVkaTogZGF0YTA6ICU4eCBkYXRhMTogJTh4XG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisKKwkJcHJpbnRrKCJjb21lZGk6IG91dDogJTh4IG9uIGlvYmFzZSAlNGx4XG4iLCBzLT5zdGF0ZSwKKwkJCWRldi0+aW9iYXNlICsgUENJNzQzMl9ETyk7CisJCW91dGwocy0+c3RhdGUgJiAweGZmZmZmZmZmLCBkZXYtPmlvYmFzZSArIFBDSTc0MzJfRE8pOworCX0KKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhZGxfcGNpNzQzMl9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXByaW50aygiY29tZWRpOiBwY2k3NDMyX2RpX2luc25fYml0cyBjYWxsZWRcbiIpOworCXByaW50aygiY29tZWRpOiBkYXRhMDogJTh4IGRhdGExOiAlOHhcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gaW5sKGRldi0+aW9iYXNlICsgUENJNzQzMl9ESSkgJiAweGZmZmZmZmZmOworCXByaW50aygiY29tZWRpOiBkYXRhMSAlOHhcbiIsIGRhdGFbMV0pOworCisJcmV0dXJuIDI7Cit9CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkbF9wY2k3NDMyLCBhZGxfcGNpNzQzMl9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k4MTY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGY5MGJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k4MTY0LmMKQEAgLTAsMCArMSw1MTIgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYworCisgICAgSGFyZHdhcmUgY29tZWRpIGRyaXZlciBmb3QgUENJLTgxNjQgQWRsaW5rIGNhcmQKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWljaGVsIExhY2hpbmUgPG1pa2VAbWlrZWxhY2hhaW5lLmNhPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBhZGxfcGNpODE2NAorRGVzY3JpcHRpb246IERyaXZlciBmb3IgdGhlIEFkbGluayBQQ0ktODE2NCA0IEF4ZXMgTW90aW9uIENvbnRyb2wgYm9hcmQKK0RldmljZXM6IFtBRExpbmtdIFBDSS04MTY0IChhZGxfcGNpODE2NCkKK0F1dGhvcjogTWljaGVsIExhY2hhaW5lIDxtaWtlQG1pa2VsYWNoYWluZS5jYT4KK1N0YXR1czogZXhwZXJpbWVudGFsCitVcGRhdGVkOiBNb24sIDE0IEFwciAyMDA4IDE1OjEwOjMyICswMTAwCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgIjgyNTMuaCIKKworI2RlZmluZSBQQ0k4MTY0X0FYSVNfWCAgMHgwMAorI2RlZmluZSBQQ0k4MTY0X0FYSVNfWSAgMHgwOAorI2RlZmluZSBQQ0k4MTY0X0FYSVNfWiAgMHgxMAorI2RlZmluZSBQQ0k4MTY0X0FYSVNfVSAgMHgxOAorCisjZGVmaW5lIFBDSTgxNjRfTVNUUwkweDAwCisjZGVmaW5lIFBDSTgxNjRfU1NUUyAgICAweDAyCisjZGVmaW5lIFBDSTgxNjRfQlVGMCAgICAweDA0CisjZGVmaW5lIFBDSTgxNjRfQlVGMSAgICAweDA2CisKKyNkZWZpbmUgUENJODE2NF9DTUQgICAgIDB4MDAKKyNkZWZpbmUgUENJODE2NF9PVFAgICAgIDB4MDIKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDSTgxNjQgMHg4MTY0CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhZGxfcGNpODE2NF9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FETElOSywgUENJX0RFVklDRV9JRF9QQ0k4MTY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLAorCQkwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZGxfcGNpODE2NF9wY2lfdGFibGUpOworCitzdHJ1Y3QgYWRsX3BjaTgxNjRfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYWRsX3BjaTgxNjRfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBhZGxfcGNpODE2NF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hZGxfcGNpODE2NCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhZGxfcGNpODE2NCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YWRsX3BjaTgxNjRfYXR0YWNoLAorICAgICAgZGV0YWNoOmFkbF9wY2k4MTY0X2RldGFjaCwKK307CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl9yZWFkX21zdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfc3N0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fcmVhZF9idWYwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl9yZWFkX2J1ZjEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfb3RwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9idWYwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9idWYxKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGJ1cywgc2xvdDsKKworCXByaW50aygiY29tZWRpOiBhdHRlbXB0IHRvIGF0dGFjaC4uLlxuIik7CisJcHJpbnRrKCJjb21lZGklZDogYWRsX3BjaTgxNjRcbiIsIGRldi0+bWlub3IpOworCisJZGV2LT5ib2FyZF9uYW1lID0gInBjaTgxNjQiOworCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhZGxfcGNpODE2NF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisKKwkJaWYgKHBjaWRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQURMSU5LICYmCisJCQlwY2lkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BDSTgxNjQpIHsKKwkJCWlmIChidXMgfHwgc2xvdCkgeworCQkJCS8qIHJlcXVlc3RlZCBwYXJ0aWN1bGFyIGJ1cy9zbG90ICovCisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gYnVzCisJCQkJCXx8IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9IHNsb3QpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwkJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJhZGxfcGNpODE2NCIpIDwgMCkgeworCQkJCXByaW50aygiY29tZWRpJWQ6IEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iLCBkZXYtPm1pbm9yKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWRldi0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisJCQlwcmludGsoImNvbWVkaTogYmFzZSBhZGRyICU0bHhcbiIsIGRldi0+aW9iYXNlKTsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfUFJPQzsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJCXMtPm5fY2hhbiA9IDQ7CisJCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQkJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwkJCS8vcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXhpczsKKwkJCXMtPmluc25fcmVhZCA9IGFkbF9wY2k4MTY0X2luc25fcmVhZF9tc3RzOworCQkJcy0+aW5zbl93cml0ZSA9IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfY21kOworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9QUk9DOworCQkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQkJcy0+bl9jaGFuID0gNDsKKwkJCXMtPm1heGRhdGEgPSAweGZmZmY7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSA0OworCQkJLy9zLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9heGlzOworCQkJcy0+aW5zbl9yZWFkID0gYWRsX3BjaTgxNjRfaW5zbl9yZWFkX3NzdHM7CisJCQlzLT5pbnNuX3dyaXRlID0gYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9vdHA7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BST0M7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCQlzLT5uX2NoYW4gPSA0OworCQkJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDQ7CisJCQkvL3MtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2F4aXM7CisJCQlzLT5pbnNuX3JlYWQgPSBhZGxfcGNpODE2NF9pbnNuX3JlYWRfYnVmMDsKKwkJCXMtPmluc25fd3JpdGUgPSBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX2J1ZjA7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BST0M7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCQlzLT5uX2NoYW4gPSA0OworCQkJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDQ7CisJCQkvL3MtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2F4aXM7CisJCQlzLT5pbnNuX3JlYWQgPSBhZGxfcGNpODE2NF9pbnNuX3JlYWRfYnVmMTsKKwkJCXMtPmluc25fd3JpdGUgPSBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX2J1ZjE7CisKKwkJCXByaW50aygiY29tZWRpOiBhdHRhY2hlZFxuIik7CisKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogbm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kISAocmVxLiBidXMvc2xvdCA6ICVkLyVkKVxuIiwKKwkJZGV2LT5taW5vciwgYnVzLCBzbG90KTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBhZGxfcGNpODE2NF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNpODE2NDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKKwkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl9yZWFkX21zdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBheGlzLCBheGlzX3JlZzsKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCWRhdGFbMF0gPSBpbncoZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfTVNUUyk7CisJcHJpbnRrKCJjb21lZGk6IHBjaTgxNjQgTVNUUyByZWFkIC0+ICUwNFg6JTA0WCBvbiBheGlzICVzXG4iLCBkYXRhWzBdLAorCQlkYXRhWzFdLCBheGlzbmFtZSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfc3N0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGF4aXMsIGF4aXNfcmVnOworCWNoYXIgKmF4aXNuYW1lOworCisJYXhpcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChheGlzKSB7CisJY2FzZSAwOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19ZOworCQlheGlzbmFtZSA9ICJZIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19aOworCQlheGlzbmFtZSA9ICJaIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19VOworCQlheGlzbmFtZSA9ICJVIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJfQorCisJZGF0YVswXSA9IGludyhkZXYtPmlvYmFzZSArIGF4aXNfcmVnICsgUENJODE2NF9TU1RTKTsKKwlwcmludGsoImNvbWVkaTogcGNpODE2NCBTU1RTIHJlYWQgLT4gJTA0WDolMDRYIG9uIGF4aXMgJXNcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0sIGF4aXNuYW1lKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fcmVhZF9idWYwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYXhpcywgYXhpc19yZWc7CisJY2hhciAqYXhpc25hbWU7CisKKwlheGlzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGF4aXMpIHsKKwljYXNlIDA6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCQlicmVhazsKKwljYXNlIDE6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1k7CisJCWF4aXNuYW1lID0gIlkiOworCQlicmVhazsKKwljYXNlIDI6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1o7CisJCWF4aXNuYW1lID0gIloiOworCQlicmVhazsKKwljYXNlIDM6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1U7CisJCWF4aXNuYW1lID0gIlUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwl9CisKKwlkYXRhWzBdID0gaW53KGRldi0+aW9iYXNlICsgYXhpc19yZWcgKyBQQ0k4MTY0X0JVRjApOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IEJVRjAgcmVhZCAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl9yZWFkX2J1ZjEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBheGlzLCBheGlzX3JlZzsKKworCWNoYXIgKmF4aXNuYW1lOworCisJYXhpcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChheGlzKSB7CisJY2FzZSAwOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19ZOworCQlheGlzbmFtZSA9ICJZIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19aOworCQlheGlzbmFtZSA9ICJaIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19VOworCQlheGlzbmFtZSA9ICJVIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJfQorCisJZGF0YVswXSA9IGludyhkZXYtPmlvYmFzZSArIGF4aXNfcmVnICsgUENJODE2NF9CVUYxKTsKKwlwcmludGsoImNvbWVkaTogcGNpODE2NCBCVUYxIHJlYWQgLT4gJTA0WDolMDRYIG9uIGF4aXMgJXNcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0sIGF4aXNuYW1lKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYXhpcywgYXhpc19yZWc7CisKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCW91dHcoZGF0YVswXSwgZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfQ01EKTsKKwlwcmludGsoImNvbWVkaTogcGNpODE2NCBDTUQgd3JpdGUgLT4gJTA0WDolMDRYIG9uIGF4aXMgJXNcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0sIGF4aXNuYW1lKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfb3RwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYXhpcywgYXhpc19yZWc7CisKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCW91dHcoZGF0YVswXSwgZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfT1RQKTsKKwlwcmludGsoImNvbWVkaTogcGNpODE2NCBPVFAgd3JpdGUgLT4gJTA0WDolMDRYIG9uIGF4aXMgJXNcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0sIGF4aXNuYW1lKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfYnVmMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGF4aXMsIGF4aXNfcmVnOworCisJY2hhciAqYXhpc25hbWU7CisKKwlheGlzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGF4aXMpIHsKKwljYXNlIDA6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCQlicmVhazsKKwljYXNlIDE6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1k7CisJCWF4aXNuYW1lID0gIlkiOworCQlicmVhazsKKwljYXNlIDI6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1o7CisJCWF4aXNuYW1lID0gIloiOworCQlicmVhazsKKwljYXNlIDM6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1U7CisJCWF4aXNuYW1lID0gIlUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwl9CisKKwlvdXR3KGRhdGFbMF0sIGRldi0+aW9iYXNlICsgYXhpc19yZWcgKyBQQ0k4MTY0X0JVRjApOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IEJVRjAgd3JpdGUgLT4gJTA0WDolMDRYIG9uIGF4aXMgJXNcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0sIGF4aXNuYW1lKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfYnVmMShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGF4aXMsIGF4aXNfcmVnOworCisJY2hhciAqYXhpc25hbWU7CisKKwlheGlzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGF4aXMpIHsKKwljYXNlIDA6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCQlicmVhazsKKwljYXNlIDE6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1k7CisJCWF4aXNuYW1lID0gIlkiOworCQlicmVhazsKKwljYXNlIDI6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1o7CisJCWF4aXNuYW1lID0gIloiOworCQlicmVhazsKKwljYXNlIDM6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1U7CisJCWF4aXNuYW1lID0gIlUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwl9CisKKwlvdXR3KGRhdGFbMF0sIGRldi0+aW9iYXNlICsgYXhpc19yZWcgKyBQQ0k4MTY0X0JVRjEpOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IEJVRjEgd3JpdGUgLT4gJTA0WDolMDRYIG9uIGF4aXMgJXNcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0sIGF4aXNuYW1lKTsKKworCXJldHVybiAyOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hZGxfcGNpODE2NCwgYWRsX3BjaTgxNjRfcGNpX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhNjFjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jCkBAIC0wLDAgKzEsMTM5MSBAQAorLyoKKworICAgY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTEuYworCisgICBIYXJkd2FyZSBkcml2ZXIgZm9yIFBDSTkxMTEgQURMaW5rIGNhcmRzOgorCisgICAgIFBDSS05MTExSFIKKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgRW1tYW51ZWwgUGFjYXVkIDxlbW1hbnVlbC5wYWNhdWRAdW5pdi1wb2l0aWVycy5mcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworLyoKK0RyaXZlcjogYWRsX3BjaTkxMTEKK0Rlc2NyaXB0aW9uOiBBZGxpbmsgUENJLTkxMTFIUgorQXV0aG9yOiBFbW1hbnVlbCBQYWNhdWQgPGVtbWFudWVsLnBhY2F1ZEB1bml2LXBvaXRpZXJzLmZyPgorRGV2aWNlczogW0FETGlua10gUENJLTkxMTFIUiAoYWRsX3BjaTkxMTEpCitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitTdXBwb3J0czoKKworICAtIGFpX2luc24gcmVhZAorICAtIGFvX2luc24gcmVhZC93cml0ZQorICAtIGRpX2luc24gcmVhZAorICAtIGRvX2luc24gcmVhZC93cml0ZQorICAtIGFpX2RvX2NtZCBtb2RlIHdpdGggdGhlIGZvbGxvd2luZyBzb3VyY2VzOgorCisgICAgLSBzdGFydF9zcmMgCQlUUklHX05PVworICAgIC0gc2Nhbl9iZWdpbl9zcmMgCQlUUklHX0ZPTExPVwlUUklHX1RJTUVSCVRSSUdfRVhUCisgICAgLSBjb252ZXJ0X3NyYwkJCQlUUklHX1RJTUVSCVRSSUdfRVhUCisgICAgLSBzY2FuX2VuZF9zcmMJCVRSSUdfQ09VTlQKKyAgICAtIHN0b3Bfc3JjCQkJVFJJR19DT1VOVAlUUklHX05PTkUKKworICAgIFRoZSBzY2FubmVkIGNoYW5uZWxzIG11c3QgYmUgY29uc2VjdXRpdmUgYW5kIHN0YXJ0IGZyb20gMC4gVGhleSBtdXN0CisgICAgYWxsIGhhdmUgdGhlIHNhbWUgcmFuZ2UgYW5kIGFyZWYuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKworICAgIFswXSAtIFBDSSBidXMgbnVtYmVyIChvcHRpb25hbCkKKyAgICBbMV0gLSBQQ0kgc2xvdCBudW1iZXIgKG9wdGlvbmFsKQorCisgICAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kKKyAgICBkZXZpY2Ugd2lsbCBiZSB1c2VkLgorCisqLworCisvKgorQ0hBTkdFTE9HOgorCisgIDIwMDUvMDIvMTcgRXh0ZW5kIEFJIHN0cmVhbWluZyBjYXBhYmlsaXRpZXMuIE5vdywgc2Nhbl9iZWdpbl9hcmcgY2FuIGJlCisgIGEgbXVsdGlwbGUgb2YgY2hhbmxpc3RfbGVuKmNvbnZlcnRfYXJnLgorICAyMDAyLzAyLzE5IEZpeGVkIHRoZSB0d28ncyBjb21wbGVtZW50IGNvbnZlcnNpb24gaW4gcGNpOTExMV8oaHJfKWFpX2dldF9kYXRhLgorICAyMDAyLzAyLzE4IEFkZGVkIGV4dGVybmFsIHRyaWdnZXIgc3VwcG9ydCBmb3IgYW5hbG9nIGlucHV0LgorCitUT0RPOgorCisgIC0gUmVhbGx5IHRlc3QgaW1wbGVtZW50ZWQgZnVuY3Rpb25hbGl0eS4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFBDSS05MTExREcgd2l0aCBhIHByb2JlIHJvdXRpbmUgdG8gaWRlbnRpZnkgdGhlIGNhcmQgdHlwZQorICAgIChwZXJoYXBzIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNoYW5uZWwgbnVtYmVyIHJlYWRiYWNrIG9mIHRoZSBBL0QgRGF0YSByZWdpc3RlcikuCisgIC0gQWRkIGV4dGVybmFsIG11bHRpcGxleGVyIHN1cHBvcnQuCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisjZGVmaW5lIFBDSTkxMTFfRFJJVkVSX05BTUUgCSJhZGxfcGNpOTExMSIKKyNkZWZpbmUgUENJOTExMV9IUl9ERVZJQ0VfSUQgCTB4OTExMQorCisvKiAgVE9ETzogQWRkIG90aGVyIHBjaTkxMTEgYm9hcmQgaWQgKi8KKworI2RlZmluZSBQQ0k5MTExX0lPX1JBTkdFIAkweDAxMDAKKworI2RlZmluZSBQQ0k5MTExX0ZJRk9fSEFMRl9TSVpFCTUxMgorCisjZGVmaW5lIFBDSTkxMTFfQUlfQ0hBTk5FTF9OQlIJCQkxNgorCisjZGVmaW5lIFBDSTkxMTFfQUlfUkVTT0xVVElPTgkJCTEyCisjZGVmaW5lIFBDSTkxMTFfQUlfUkVTT0xVVElPTl9NQVNLCQkweDBGRkYKKyNkZWZpbmUgUENJOTExMV9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVAkJMHgwODAwCisKKyNkZWZpbmUgUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OCQkxNgorI2RlZmluZSBQQ0k5MTExX0hSX0FJX1JFU09MVVRJT05fTUFTSwkJMHhGRkZGCisjZGVmaW5lIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQJMHg4MDAwCisKKyNkZWZpbmUgUENJOTExMV9BSV9BQ1FVSVNJVElPTl9QRVJJT0RfTUlOX05TCTEwMDAwCisjZGVmaW5lIFBDSTkxMTFfQU9fQ0hBTk5FTF9OQlIJCQkxCisjZGVmaW5lCVBDSTkxMTFfQU9fUkVTT0xVVElPTgkJCTEyCisjZGVmaW5lIFBDSTkxMTFfQU9fUkVTT0xVVElPTl9NQVNLCQkweDBGRkYKKyNkZWZpbmUgUENJOTExMV9ESV9DSEFOTkVMX05CUgkJCTE2CisjZGVmaW5lCVBDSTkxMTFfRE9fQ0hBTk5FTF9OQlIJCQkxNgorI2RlZmluZSBQQ0k5MTExX0RPX01BU0sJCQkJMHhGRkZGCisKKyNkZWZpbmUgUENJOTExMV9SQU5HRV9TRVRUSU5HX0RFTEFZCQkxMAorI2RlZmluZSBQQ0k5MTExX0FJX0lOU1RBTlRfUkVBRF9VREVMQVlfVVMJMgorI2RlZmluZSBQQ0k5MTExX0FJX0lOU1RBTlRfUkVBRF9USU1FT1VUCQkxMDAKKworI2RlZmluZSBQQ0k5MTExXzgyNTRfQ0xPQ0tfUEVSSU9EX05TCQk1MDAKKworI2RlZmluZSBQQ0k5MTExXzgyNTRfQ09VTlRFUl8wCQkJMHgwMAorI2RlZmluZSBQQ0k5MTExXzgyNTRfQ09VTlRFUl8xCQkJMHg0MAorI2RlZmluZSBQQ0k5MTExXzgyNTRfQ09VTlRFUl8yCQkJMHg4MAorI2RlZmluZSBQQ0k5MTExXzgyNTRfQ09VTlRFUl9MQVRDSAkJMHgwMAorI2RlZmluZSBQQ0k5MTExXzgyNTRfUkVBRF9MT0FEX0xTQl9PTkxZCQkweDEwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9SRUFEX0xPQURfTVNCX09OTFkJCTB4MjAKKyNkZWZpbmUgUENJOTExMV84MjU0X1JFQURfTE9BRF9MU0JfTVNCCQkweDMwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9NT0RFXzAJCQkweDAwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9NT0RFXzEJCQkweDAyCisjZGVmaW5lIFBDSTkxMTFfODI1NF9NT0RFXzIJCQkweDA0CisjZGVmaW5lIFBDSTkxMTFfODI1NF9NT0RFXzMJCQkweDA2CisjZGVmaW5lIFBDSTkxMTFfODI1NF9NT0RFXzQJCQkweDA4CisjZGVmaW5lIFBDSTkxMTFfODI1NF9NT0RFXzUJCQkweDBBCisjZGVmaW5lIFBDSTkxMTFfODI1NF9CSU5BUllfQ09VTlRFUgkJMHgwMAorI2RlZmluZSBQQ0k5MTExXzgyNTRfQkNEX0NPVU5URVIJCTB4MDEKKworLyogSU8gYWRkcmVzcyBtYXAgKi8KKworI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX0ZJRk9fVkFMVUUgCQkJMHgwMAkvKiAgQUQgRGF0YSBzdG9yZWQgaW4gRklGTyAqLworI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0RBX09VVFBVVCAJCQkweDAwCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfRElHSVRBTF9JTyAJCQkweDAyCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfRVhURU5ERURfSU9fUE9SVFMgCQkweDA0CisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfQ0hBTk5FTF9DT05UUk9MIAkJMHgwNgkvKiAgQ2hhbm5lbCBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX1JFQURCQUNLIAkJMHgwNgorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0lOUFVUX1NJR05BTF9SQU5HRSAJCTB4MDgKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9SQU5HRV9TVEFUVVNfUkVBREJBQ0sgCQkweDA4CisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfVFJJR0dFUl9NT0RFX0NPTlRST0wgCQkweDBBCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfTU9ERV9JTlRFUlJVUFRfUkVBREJBQ0sgCTB4MEEKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9TT0ZUV0FSRV9UUklHR0VSIAkJMHgwRQorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MIAkJMHgwQworI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8wCQkJMHg0MAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8xCQkJMHg0MgorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8yIAkJMFg0NAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09OVFJPTAkJCTB4NDYKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ0xFQVIgCQkweDQ4CisKKyNkZWZpbmUgUENJOTExMV9UUklHR0VSX01BU0sgCQkJCTB4MEYKKyNkZWZpbmUgUENJOTExMV9QVFJHX09GRiAJCQkJKDAgPDwgMykKKyNkZWZpbmUgUENJOTExMV9QVFJHX09OIAkJCQkoMSA8PCAzKQorI2RlZmluZSBQQ0k5MTExX0VJVFNfRVhURVJOQUwJCQkJKDEgPDwgMikKKyNkZWZpbmUgUENJOTExMV9FSVRTX0lOVEVSTkFMCQkJCSgwIDw8IDIpCisjZGVmaW5lIFBDSTkxMTFfVFBTVF9TT0ZUV0FSRV9UUklHR0VSCQkJKDAgPDwgMSkKKyNkZWZpbmUgUENJOTExMV9UUFNUX1RJTUVSX1BBQ0VSCQkJKDEgPDwgMSkKKyNkZWZpbmUgUENJOTExMV9BU0NBTl9PTgkJCQkoMSA8PCAwKQorI2RlZmluZSBQQ0k5MTExX0FTQ0FOX09GRgkJCQkoMCA8PCAwKQorCisjZGVmaW5lIFBDSTkxMTFfSVNDMF9TRVRfSVJRX09OX0VORElOR19PRl9BRF9DT05WRVJTSU9OICgwIDw8IDApCisjZGVmaW5lIFBDSTkxMTFfSVNDMF9TRVRfSVJRX09OX0ZJRk9fSEFMRl9GVUxMCQkoMSA8PCAwKQorI2RlZmluZSBQQ0k5MTExX0lTQzFfU0VUX0lSUV9PTl9USU1FUl9USUNLICAJCSgwIDw8IDEpCisjZGVmaW5lIFBDSTkxMTFfSVNDMV9TRVRfSVJRX09OX0VYVF9UUkcgCQkoMSA8PCAxKQorI2RlZmluZSBQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRU5BQkxFIAkJCSgwIDw8IDIpCisjZGVmaW5lIFBDSTkxMTFfRkZFTl9TRVRfRklGT19ESVNBQkxFCQkJKDEgPDwgMikKKworI2RlZmluZSBQQ0k5MTExX0NIQU5ORUxfTUFTSwkJCQkweDBGCisKKyNkZWZpbmUgUENJOTExMV9SQU5HRV9NQVNLCQkJCTB4MDcKKyNkZWZpbmUgUENJOTExMV9GSUZPX0VNUFRZX01BU0sJCQkJMHgxMAorI2RlZmluZSBQQ0k5MTExX0ZJRk9fSEFMRl9GVUxMX01BU0sJCQkweDIwCisjZGVmaW5lIFBDSTkxMTFfRklGT19GVUxMX01BU0sJCQkJMHg0MAorI2RlZmluZSBQQ0k5MTExX0FEX0JVU1lfTUFTSwkJCQkweDgwCisKKyNkZWZpbmUgUENJOTExMV9JT19CQVNFIGRldi0+aW9iYXNlCisKKy8qCisgKiBEZWZpbmUgaW5saW5lZCBmdW5jdGlvbgorICovCisKKyNkZWZpbmUgcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9nZXQoKSBcCisgIChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfTU9ERV9JTlRFUlJVUFRfUkVBREJBQ0spJjB4MEYpCisKKyNkZWZpbmUgcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9zZXQoZmxhZ3MpIFwKKyAgb3V0YihmbGFncyxQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9UUklHR0VSX01PREVfQ09OVFJPTCkKKworI2RlZmluZSBwY2k5MTExX2ludGVycnVwdF9hbmRfZmlmb19nZXQoKSBcCisgICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0FEX01PREVfSU5URVJSVVBUX1JFQURCQUNLKSA+PiA0KSAmMHgwMykKKworI2RlZmluZSBwY2k5MTExX2ludGVycnVwdF9hbmRfZmlmb19zZXQoZmxhZ3MpIFwKKyAgb3V0YihmbGFncyxQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCkKKworI2RlZmluZSBwY2k5MTExX2ludGVycnVwdF9jbGVhcigpIFwKKyAgb3V0YigwLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DTEVBUikKKworI2RlZmluZSBwY2k5MTExX3NvZnR3YXJlX3RyaWdnZXIoKSBcCisgIG91dGIoMCxQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9TT0ZUV0FSRV9UUklHR0VSKQorCisjZGVmaW5lIHBjaTkxMTFfZmlmb19yZXNldCgpIFwKKyAgb3V0YihQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRU5BQkxFLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKTsgXAorICBvdXRiKFBDSTkxMTFfRkZFTl9TRVRfRklGT19ESVNBQkxFLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKTsgXAorICBvdXRiKFBDSTkxMTFfRkZFTl9TRVRfRklGT19FTkFCTEUsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpCisKKyNkZWZpbmUgcGNpOTExMV9pc19maWZvX2Z1bGwoKSBcCisgICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykmIFwKKyAgICBQQ0k5MTExX0ZJRk9fRlVMTF9NQVNLKT09MCkKKworI2RlZmluZSBwY2k5MTExX2lzX2ZpZm9faGFsZl9mdWxsKCkgXAorICAoKGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9SQU5HRV9TVEFUVVNfUkVBREJBQ0spJiBcCisgICAgUENJOTExMV9GSUZPX0hBTEZfRlVMTF9NQVNLKT09MCkKKworI2RlZmluZSBwY2k5MTExX2lzX2ZpZm9fZW1wdHkoKSBcCisgICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykmIFwKKyAgICBQQ0k5MTExX0ZJRk9fRU1QVFlfTUFTSyk9PTApCisKKyNkZWZpbmUgcGNpOTExMV9haV9jaGFubmVsX3NldChjaGFubmVsKSBcCisgIG91dGIoKGNoYW5uZWwpJlBDSTkxMTFfQ0hBTk5FTF9NQVNLLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfQ09OVFJPTCkKKworI2RlZmluZSBwY2k5MTExX2FpX2NoYW5uZWxfZ2V0KCkgXAorICBpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfQ0hBTk5FTF9SRUFEQkFDSykmUENJOTExMV9DSEFOTkVMX01BU0sKKworI2RlZmluZSBwY2k5MTExX2FpX3JhbmdlX3NldChyYW5nZSkgXAorICBvdXRiKChyYW5nZSkmUENJOTExMV9SQU5HRV9NQVNLLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOUFVUX1NJR05BTF9SQU5HRSkKKworI2RlZmluZSBwY2k5MTExX2FpX3JhbmdlX2dldCgpIFwKKyAgaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykmUENJOTExMV9SQU5HRV9NQVNLCisKKyNkZWZpbmUgcGNpOTExMV9haV9nZXRfZGF0YSgpIFwKKyAgKChpbncoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSk+PjQpJlBDSTkxMTFfQUlfUkVTT0xVVElPTl9NQVNLKSBcCisgIF4gUENJOTExMV9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVAorCisjZGVmaW5lIHBjaTkxMTFfaHJfYWlfZ2V0X2RhdGEoKSBcCisgIChpbncoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSkgJiBQQ0k5MTExX0hSX0FJX1JFU09MVVRJT05fTUFTSykgXAorICBeIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQKKworI2RlZmluZSBwY2k5MTExX2FvX3NldF9kYXRhKGRhdGEpIFwKKyAgb3V0dyhkYXRhJlBDSTkxMTFfQU9fUkVTT0xVVElPTl9NQVNLLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0RBX09VVFBVVCkKKworI2RlZmluZSBwY2k5MTExX2RpX2dldF9iaXRzKCkgXAorICBpbncoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfRElHSVRBTF9JTykKKworI2RlZmluZSBwY2k5MTExX2RvX3NldF9iaXRzKGJpdHMpIFwKKyAgb3V0dyhiaXRzLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0RJR0lUQUxfSU8pCisKKyNkZWZpbmUgcGNpOTExMV84MjU0X2NvbnRyb2xfc2V0KGZsYWdzKSBcCisgIG91dGIoZmxhZ3MsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfODI1NF9DT05UUk9MKQorCisjZGVmaW5lIHBjaTkxMTFfODI1NF9jb3VudGVyXzBfc2V0KGRhdGEpIFwKKyAgb3V0YihkYXRhICYgMHhGRiwgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzApOyBcCisgIG91dGIoIChkYXRhID4+IDgpICYgMHhGRiwgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzApCisKKyNkZWZpbmUgcGNpOTExMV84MjU0X2NvdW50ZXJfMV9zZXQoZGF0YSkgXAorICBvdXRiKGRhdGEgJiAweEZGLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMSk7IFwKKyAgb3V0YiggKGRhdGEgPj4gOCkgJiAweEZGLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMSkKKworI2RlZmluZSBwY2k5MTExXzgyNTRfY291bnRlcl8yX3NldChkYXRhKSBcCisgIG91dGIoZGF0YSAmIDB4RkYsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8yKTsgXAorICBvdXRiKCAoZGF0YSA+PiA4KSAmIDB4RkYsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8yKQorCisvKiAgRnVuY3Rpb24gcHJvdG90eXBlcyAqLworCitzdGF0aWMgaW50IHBjaTkxMTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpOTExMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgcGNpOTExMV9haV9tdW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMsIHVuc2lnbmVkIGludCBzdGFydF9jaGFuX2luZGV4KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHBjaTkxMTFfaHJfYWlfcmFuZ2UgPSB7CisJNSwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpCisJCX0KK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2k5MTExX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQURMSU5LLCBQQ0k5MTExX0hSX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwKKwkJMCwgMH0sCisJLyogeyBQQ0lfVkVORE9SX0lEX0FETElOSywgUENJOTExMV9IR19ERVZJQ0VfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgKi8KKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2k5MTExX3BjaV90YWJsZSk7CisKKy8qICAqLworLyogIEJvYXJkIHNwZWNpZmljYXRpb24gc3RydWN0dXJlICovCisvKiAgKi8KKworc3RydWN0IHBjaTkxMTFfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qICBkcml2ZXIgbmFtZSAqLworCWludCBkZXZpY2VfaWQ7CisJaW50IGFpX2NoYW5uZWxfbmJyOwkvKiAgbnVtIG9mIEEvRCBjaGFucyAqLworCWludCBhb19jaGFubmVsX25icjsJLyogIG51bSBvZiBEL0EgY2hhbnMgKi8KKwlpbnQgYWlfcmVzb2x1dGlvbjsJLyogIHJlc29sdXRpb24gb2YgQS9EICovCisJaW50IGFpX3Jlc29sdXRpb25fbWFzazsKKwlpbnQgYW9fcmVzb2x1dGlvbjsJLyogIHJlc29sdXRpb24gb2YgRC9BICovCisJaW50IGFvX3Jlc29sdXRpb25fbWFzazsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfbGlzdDsJLyogIHJhbmdlbGlzdCBmb3IgQS9EICovCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX2xpc3Q7CS8qICByYW5nZWxpc3QgZm9yIEQvQSAqLworCXVuc2lnbmVkIGludCBhaV9hY3F1aXNpdGlvbl9wZXJpb2RfbWluX25zOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2k5MTExX2JvYXJkIHBjaTkxMTFfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2k5MTExX2hyIiwKKwkgICAgICBkZXZpY2VfaWQ6UENJOTExMV9IUl9ERVZJQ0VfSUQsCisJICAgICAgYWlfY2hhbm5lbF9uYnI6UENJOTExMV9BSV9DSEFOTkVMX05CUiwKKwkgICAgICBhb19jaGFubmVsX25icjpQQ0k5MTExX0FPX0NIQU5ORUxfTkJSLAorCSAgICAgIGFpX3Jlc29sdXRpb246UENJOTExMV9IUl9BSV9SRVNPTFVUSU9OLAorCSAgICAgIGFpX3Jlc29sdXRpb25fbWFzazpQQ0k5MTExX0hSX0FJX1JFU09MVVRJT05fTUFTSywKKwkgICAgICBhb19yZXNvbHV0aW9uOlBDSTkxMTFfQU9fUkVTT0xVVElPTiwKKwkgICAgICBhb19yZXNvbHV0aW9uX21hc2s6UENJOTExMV9BT19SRVNPTFVUSU9OX01BU0ssCisJICAgICAgYWlfcmFuZ2VfbGlzdDomcGNpOTExMV9ocl9haV9yYW5nZSwKKwkgICAgICBhb19yYW5nZV9saXN0OiZyYW5nZV9iaXBvbGFyMTAsCisgICAgICBhaV9hY3F1aXNpdGlvbl9wZXJpb2RfbWluX25zOlBDSTkxMTFfQUlfQUNRVUlTSVRJT05fUEVSSU9EX01JTl9OU30KK307CisKKyNkZWZpbmUgcGNpOTExMV9ib2FyZF9uYnIgXAorICAoc2l6ZW9mKHBjaTkxMTFfYm9hcmRzKS9zaXplb2Yoc3RydWN0IHBjaTkxMTFfYm9hcmQpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgcGNpOTExMV9kcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZTpQQ0k5MTExX0RSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaTkxMTFfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjaTkxMTFfZGV0YWNoLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChwY2k5MTExX2RyaXZlciwgcGNpOTExMV9wY2lfdGFibGUpOworCisvKiAgUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworCitzdHJ1Y3QgcGNpOTExMV9wcml2YXRlX2RhdGEgeworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgaW9fcmFuZ2U7CS8qICBQQ0k2NTAzIGlvIHJhbmdlICovCisKKwl1bnNpZ25lZCBsb25nIGxjcl9pb19iYXNlOwkvKiAgTG9jYWwgY29uZmlndXJhdGlvbiByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGxjcl9pb19yYW5nZTsKKworCWludCBzdG9wX2NvdW50ZXI7CisJaW50IHN0b3BfaXNfbm9uZTsKKworCXVuc2lnbmVkIGludCBzY2FuX2RlbGF5OworCXVuc2lnbmVkIGludCBjaGFubGlzdF9sZW47CisJdW5zaWduZWQgaW50IGNodW5rX2NvdW50ZXI7CisJdW5zaWduZWQgaW50IGNodW5rX251bV9zYW1wbGVzOworCisJaW50IGFvX3JlYWRiYWNrOwkvKiAgTGFzdCB3cml0dGVuIGFuYWxvZyBvdXRwdXQgZGF0YSAqLworCisJaW50IHRpbWVyX2Rpdmlzb3JfMTsJLyogIERpdmlzb3IgdmFsdWVzIGZvciB0aGUgODI1NCB0aW1lciBwYWNlciAqLworCWludCB0aW1lcl9kaXZpc29yXzI7CisKKwlpbnQgaXNfdmFsaWQ7CQkvKiAgSXMgZGV2aWNlIHZhbGlkICovCisKKwlzaG9ydCBhaV9ib3VuY2VfYnVmZmVyWzIgKiBQQ0k5MTExX0ZJRk9fSEFMRl9TSVpFXTsKK307CisKKyNkZWZpbmUgZGV2X3ByaXZhdGUgCSgoc3RydWN0IHBjaTkxMTFfcHJpdmF0ZV9kYXRhICopZGV2LT5wcml2YXRlKQorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgUExYOTA1MCBTRUNUSU9OICovCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgUExYOTA1MF9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCAweDRjCisKKyNkZWZpbmUgUExYOTA1MF9MSU5USTFfRU5BQkxFCQkoMSA8PCAwKQorI2RlZmluZSBQTFg5MDUwX0xJTlRJMV9BQ1RJVkVfSElHSAkoMSA8PCAxKQorI2RlZmluZSBQTFg5MDUwX0xJTlRJMV9TVEFUVVMJCSgxIDw8IDIpCisjZGVmaW5lIFBMWDkwNTBfTElOVEkyX0VOQUJMRQkJKDEgPDwgMykKKyNkZWZpbmUgUExYOTA1MF9MSU5USTJfQUNUSVZFX0hJR0gJKDEgPDwgNCkKKyNkZWZpbmUgUExYOTA1MF9MSU5USTJfU1RBVFVTCQkoMSA8PCA1KQorI2RlZmluZSBQTFg5MDUwX1BDSV9JTlRFUlJVUFRfRU5BQkxFCSgxIDw8IDYpCisjZGVmaW5lIFBMWDkwNTBfU09GVFdBUkVfSU5URVJSVVBUCSgxIDw8IDcpCisKK3N0YXRpYyB2b2lkIHBseDkwNTBfaW50ZXJydXB0X2NvbnRyb2wodW5zaWduZWQgbG9uZyBpb19iYXNlLAorCWJvb2wgTElOVGkxX2VuYWJsZSwKKwlib29sIExJTlRpMV9hY3RpdmVfaGlnaCwKKwlib29sIExJTlRpMl9lbmFibGUsIGJvb2wgTElOVGkyX2FjdGl2ZV9oaWdoLCBib29sIGludGVycnVwdF9lbmFibGUpCit7CisJaW50IGZsYWdzID0gMDsKKworCWlmIChMSU5UaTFfZW5hYmxlKQorCQlmbGFncyB8PSBQTFg5MDUwX0xJTlRJMV9FTkFCTEU7CisJaWYgKExJTlRpMV9hY3RpdmVfaGlnaCkKKwkJZmxhZ3MgfD0gUExYOTA1MF9MSU5USTFfQUNUSVZFX0hJR0g7CisJaWYgKExJTlRpMl9lbmFibGUpCisJCWZsYWdzIHw9IFBMWDkwNTBfTElOVEkyX0VOQUJMRTsKKwlpZiAoTElOVGkyX2FjdGl2ZV9oaWdoKQorCQlmbGFncyB8PSBQTFg5MDUwX0xJTlRJMl9BQ1RJVkVfSElHSDsKKworCWlmIChpbnRlcnJ1cHRfZW5hYmxlKQorCQlmbGFncyB8PSBQTFg5MDUwX1BDSV9JTlRFUlJVUFRfRU5BQkxFOworCisJb3V0YihmbGFncywgaW9fYmFzZSArIFBMWDkwNTBfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpOworfQorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgTUlTQ0VMTEFORU9VUyBTRUNUSU9OICovCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qICA4MjU0IHRpbWVyICovCisKK3N0YXRpYyB2b2lkIHBjaTkxMTFfdGltZXJfc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXBjaTkxMTFfODI1NF9jb250cm9sX3NldChQQ0k5MTExXzgyNTRfQ09VTlRFUl8wIHwKKwkJUENJOTExMV84MjU0X1JFQURfTE9BRF9MU0JfTVNCIHwKKwkJUENJOTExMV84MjU0X01PREVfMCB8IFBDSTkxMTFfODI1NF9CSU5BUllfQ09VTlRFUik7CisKKwlwY2k5MTExXzgyNTRfY29udHJvbF9zZXQoUENJOTExMV84MjU0X0NPVU5URVJfMSB8CisJCVBDSTkxMTFfODI1NF9SRUFEX0xPQURfTFNCX01TQiB8CisJCVBDSTkxMTFfODI1NF9NT0RFXzIgfCBQQ0k5MTExXzgyNTRfQklOQVJZX0NPVU5URVIpOworCisJcGNpOTExMV84MjU0X2NvbnRyb2xfc2V0KFBDSTkxMTFfODI1NF9DT1VOVEVSXzIgfAorCQlQQ0k5MTExXzgyNTRfUkVBRF9MT0FEX0xTQl9NU0IgfAorCQlQQ0k5MTExXzgyNTRfTU9ERV8yIHwgUENJOTExMV84MjU0X0JJTkFSWV9DT1VOVEVSKTsKKworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwlwY2k5MTExXzgyNTRfY291bnRlcl8yX3NldChkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8yKTsKKwlwY2k5MTExXzgyNTRfY291bnRlcl8xX3NldChkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8xKTsKK30KKworZW51bSBwY2k5MTExX3RyaWdnZXJfc291cmNlcyB7CisJc29mdHdhcmUsCisJdGltZXJfcGFjZXIsCisJZXh0ZXJuYWwKK307CisKK3N0YXRpYyB2b2lkIHBjaTkxMTFfdHJpZ2dlcl9zb3VyY2Vfc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCWVudW0gcGNpOTExMV90cmlnZ2VyX3NvdXJjZXMgc291cmNlKQoreworCWludCBmbGFnczsKKworCWZsYWdzID0gcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9nZXQoKSAmIDB4MDk7CisKKwlzd2l0Y2ggKHNvdXJjZSkgeworCWNhc2Ugc29mdHdhcmU6CisJCWZsYWdzIHw9IFBDSTkxMTFfRUlUU19JTlRFUk5BTCB8IFBDSTkxMTFfVFBTVF9TT0ZUV0FSRV9UUklHR0VSOworCQlicmVhazsKKworCWNhc2UgdGltZXJfcGFjZXI6CisJCWZsYWdzIHw9IFBDSTkxMTFfRUlUU19JTlRFUk5BTCB8IFBDSTkxMTFfVFBTVF9USU1FUl9QQUNFUjsKKwkJYnJlYWs7CisKKwljYXNlIGV4dGVybmFsOgorCQlmbGFncyB8PSBQQ0k5MTExX0VJVFNfRVhURVJOQUw7CisJCWJyZWFrOworCX0KKworCXBjaTkxMTFfdHJpZ2dlcl9hbmRfYXV0b3NjYW5fc2V0KGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcGNpOTExMV9wcmV0cmlnZ2VyX3NldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgYm9vbCBwcmV0cmlnZ2VyKQoreworCWludCBmbGFnczsKKworCWZsYWdzID0gcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9nZXQoKSAmIDB4MDc7CisKKwlpZiAocHJldHJpZ2dlcikKKwkJZmxhZ3MgfD0gUENJOTExMV9QVFJHX09OOworCisJcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9zZXQoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBwY2k5MTExX2F1dG9zY2FuX3NldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgYm9vbCBhdXRvc2NhbikKK3sKKwlpbnQgZmxhZ3M7CisKKwlmbGFncyA9IHBjaTkxMTFfdHJpZ2dlcl9hbmRfYXV0b3NjYW5fZ2V0KCkgJiAweDBlOworCisJaWYgKGF1dG9zY2FuKQorCQlmbGFncyB8PSBQQ0k5MTExX0FTQ0FOX09OOworCisJcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9zZXQoZmxhZ3MpOworfQorCitlbnVtIHBjaTkxMTFfSVNDMF9zb3VyY2VzIHsKKwlpcnFfb25fZW9jLAorCWlycV9vbl9maWZvX2hhbGZfZnVsbAorfTsKKworZW51bSBwY2k5MTExX0lTQzFfc291cmNlcyB7CisJaXJxX29uX3RpbWVyX3RpY2ssCisJaXJxX29uX2V4dGVybmFsX3RyaWdnZXIKK307CisKK3N0YXRpYyB2b2lkIHBjaTkxMTFfaW50ZXJydXB0X3NvdXJjZV9zZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJZW51bSBwY2k5MTExX0lTQzBfc291cmNlcyBpcnFfMF9zb3VyY2UsIGVudW0gcGNpOTExMV9JU0MxX3NvdXJjZXMgaXJxXzFfc291cmNlKQoreworCWludCBmbGFnczsKKworCWZsYWdzID0gcGNpOTExMV9pbnRlcnJ1cHRfYW5kX2ZpZm9fZ2V0KCkgJiAweDA0OworCisJaWYgKGlycV8wX3NvdXJjZSA9PSBpcnFfb25fZmlmb19oYWxmX2Z1bGwpCisJCWZsYWdzIHw9IFBDSTkxMTFfSVNDMF9TRVRfSVJRX09OX0ZJRk9fSEFMRl9GVUxMOworCisJaWYgKGlycV8xX3NvdXJjZSA9PSBpcnFfb25fZXh0ZXJuYWxfdHJpZ2dlcikKKwkJZmxhZ3MgfD0gUENJOTExMV9JU0MxX1NFVF9JUlFfT05fRVhUX1RSRzsKKworCXBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX3NldChmbGFncyk7Cit9CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBIQVJEV0FSRSBUUklHR0VSRUQgQU5BTE9HIElOUFVUIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogIENhbmNlbCBhbmFsb2cgaW5wdXQgYXV0b3NjYW4gKi8KKworI3VuZGVmIEFJX0RPX0NNRF9ERUJVRworCitzdGF0aWMgaW50IHBjaTkxMTFfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogIERpc2FibGUgaW50ZXJydXB0cyAqLworCisJcGx4OTA1MF9pbnRlcnJ1cHRfY29udHJvbChkZXZfcHJpdmF0ZS0+bGNyX2lvX2Jhc2UsIHRydWUsIHRydWUsIHRydWUsCisJCXRydWUsIGZhbHNlKTsKKworCXBjaTkxMTFfdHJpZ2dlcl9zb3VyY2Vfc2V0KGRldiwgc29mdHdhcmUpOworCisJcGNpOTExMV9hdXRvc2Nhbl9zZXQoZGV2LCBmYWxzZSk7CisKKwlwY2k5MTExX2ZpZm9fcmVzZXQoKTsKKworI2lmZGVmIEFJX0RPX0NNRF9ERUJVRworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IGFpX2NhbmNlbFxuIik7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKiAgVGVzdCBhbmFsb2cgaW5wdXQgY29tbWFuZCAqLworCisjZGVmaW5lIHBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoc3JjLGZsYWdzKSBcCisgIHRtcCA9IHNyYzsgXAorICBzcmMgJj0gZmxhZ3M7IFwKKyAgaWYgKCFzcmMgfHwgdG1wICE9IHNyYykgZXJyb3IrKworCitzdGF0aWMgaW50CitwY2k5MTExX2FpX2RvX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IHRtcDsKKwlpbnQgZXJyb3IgPSAwOworCWludCByYW5nZSwgcmVmZXJlbmNlOworCWludCBpOworCXN0cnVjdCBwY2k5MTExX2JvYXJkICpib2FyZCA9IChzdHJ1Y3QgcGNpOTExMV9ib2FyZCAqKSBkZXYtPmJvYXJkX3B0cjsKKworCS8qICBTdGVwIDEgOiBjaGVjayBpZiB0cmlnZ2VyIGFyZSB0cml2aWFseSB2YWxpZCAqLworCisJcGNpOTExMV9jaGVja190cmlnZ2VyX3NyYyhjbWQtPnN0YXJ0X3NyYywgVFJJR19OT1cpOworCXBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoY21kLT5zY2FuX2JlZ2luX3NyYywKKwkJVFJJR19USU1FUiB8IFRSSUdfRk9MTE9XIHwgVFJJR19FWFQpOworCXBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoY21kLT5jb252ZXJ0X3NyYywgVFJJR19USU1FUiB8IFRSSUdfRVhUKTsKKwlwY2k5MTExX2NoZWNrX3RyaWdnZXJfc3JjKGNtZC0+c2Nhbl9lbmRfc3JjLCBUUklHX0NPVU5UKTsKKwlwY2k5MTExX2NoZWNrX3RyaWdnZXJfc3JjKGNtZC0+c3RvcF9zcmMsIFRSSUdfQ09VTlQgfCBUUklHX05PTkUpOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gMTsKKworCS8qICBzdGVwIDIgOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyb3IrKzsKKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSKSAmJgorCQkoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgJiYKKwkJKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpKQorCQllcnJvcisrOworCisJaWYgKChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpICYmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKSkgeworCQllcnJvcisrOworCX0KKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgJiYKKwkJISgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB8fAorCQkJKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpKSkgeworCQllcnJvcisrOworCX0KKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpICYmCisJCSEoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHx8CisJCQkoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykpKSB7CisJCWVycm9yKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfc3JjICE9IFRSSUdfQ09VTlQpCisJCWVycm9yKys7CisJaWYgKChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpICYmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkpCisJCWVycm9yKys7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiAyOworCisJLyogIFN0ZXAgMyA6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA8IDEpIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnJvcisrOworCX0KKworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IGJvYXJkLT5haV9jaGFubmVsX25icikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IGJvYXJkLT5haV9jaGFubmVsX25icjsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKSAmJiAoY21kLT5zdGFydF9hcmcgIT0gMCkpIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnJvcisrOworCX0KKworCWlmICgoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSAmJgorCQkoY21kLT5jb252ZXJ0X2FyZyA8IGJvYXJkLT5haV9hY3F1aXNpdGlvbl9wZXJpb2RfbWluX25zKSkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gYm9hcmQtPmFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnM7CisJCWVycm9yKys7CisJfQorCWlmICgoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkgJiYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkpIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycm9yKys7CisJfQorCisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpICYmCisJCShjbWQtPnNjYW5fYmVnaW5fYXJnIDwgYm9hcmQtPmFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnMpKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBib2FyZC0+YWlfYWNxdWlzaXRpb25fcGVyaW9kX21pbl9uczsKKwkJZXJyb3IrKzsKKwl9CisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSAmJiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyb3IrKzsKKwl9CisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSAmJiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjID09IFRSSUdfQ09VTlQpICYmCisJCShjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikpIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgJiYgKGNtZC0+c3RvcF9hcmcgPCAxKSkgeworCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJZXJyb3IrKzsKKwl9CisJaWYgKChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgJiYgKGNtZC0+c3RvcF9hcmcgIT0gMCkpIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycm9yKys7CisJfQorCisJaWYgKGVycm9yKQorCQlyZXR1cm4gMzsKKworCS8qICBTdGVwIDQgOiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoUENJOTExMV84MjU0X0NMT0NLX1BFUklPRF9OUywKKwkJCSYoZGV2X3ByaXZhdGUtPnRpbWVyX2Rpdmlzb3JfMSksCisJCQkmKGRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzIpLAorCQkJJihjbWQtPmNvbnZlcnRfYXJnKSwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycm9yKys7CisJfQorCS8qICBUaGVyZSdzIG9ubHkgb25lIHRpbWVyIG9uIHRoaXMgY2FyZCwgc28gdGhlIHNjYW5fYmVnaW4gdGltZXIgbXVzdCAqLworCS8qICBiZSBhIG11bHRpcGxlIG9mIGNoYW5saXN0X2xlbipjb252ZXJ0X2FyZyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCisJCXVuc2lnbmVkIGludCBzY2FuX2JlZ2luX21pbjsKKwkJdW5zaWduZWQgaW50IHNjYW5fYmVnaW5fYXJnOworCQl1bnNpZ25lZCBpbnQgc2Nhbl9mYWN0b3I7CisKKwkJc2Nhbl9iZWdpbl9taW4gPSBjbWQtPmNoYW5saXN0X2xlbiAqIGNtZC0+Y29udmVydF9hcmc7CisKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gc2Nhbl9iZWdpbl9taW4pIHsKKwkJCWlmIChzY2FuX2JlZ2luX21pbiA8IGNtZC0+c2Nhbl9iZWdpbl9hcmcpIHsKKwkJCQlzY2FuX2ZhY3RvciA9CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgLyBzY2FuX2JlZ2luX21pbjsKKwkJCQlzY2FuX2JlZ2luX2FyZyA9IHNjYW5fZmFjdG9yICogc2Nhbl9iZWdpbl9taW47CisJCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gc2Nhbl9iZWdpbl9hcmcpIHsKKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHNjYW5fYmVnaW5fYXJnOworCQkJCQllcnJvcisrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHNjYW5fYmVnaW5fbWluOworCQkJCWVycm9yKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiA0OworCisJLyogIFN0ZXAgNSA6IGNoZWNrIGNoYW5uZWwgbGlzdCAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlyZWZlcmVuY2UgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pOworCisJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDEpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gaSkgeworCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSAiCisJCQkJCQkiY2hhbm5lbHMsY291bnRpbmcgdXB3YXJkcyBmcm9tIDBcbiIpOworCQkJCQllcnJvcisrOworCQkJCX0KKwkJCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkgIT0gcmFuZ2UpIHsKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgZ2FpblxuIik7CisJCQkJCWVycm9yKys7CisJCQkJfQorCQkJCWlmIChDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaV0pICE9IHJlZmVyZW5jZSkgeworCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSByZWZlcmVuY2VcbiIpOworCQkJCQllcnJvcisrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICgoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSA+CisJCQkJCShib2FyZC0+YWlfY2hhbm5lbF9uYnIgLSAxKSkKKwkJCQl8fCAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSA8IDApKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImNoYW5uZWwgbnVtYmVyIGlzIG91dCBvZiBsaW1pdHNcbiIpOworCQkJCWVycm9yKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7CisKK30KKworLyogIEFuYWxvZyBpbnB1dCBjb21tYW5kICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9haV9kb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2aWNlKQoreworCXN0cnVjdCBjb21lZGlfY21kICphc3luY19jbWQgPSAmc3ViZGV2aWNlLT5hc3luYy0+Y21kOworCisJaWYgKCFkZXYtPmlycSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIm5vIGlycSBhc3NpZ25lZCBmb3IgUENJOTExMSwgY2Fubm90IGRvIGhhcmR3YXJlIGNvbnZlcnNpb24iKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiAgU2V0IGNoYW5uZWwgc2NhbiBsaW1pdCAqLworCS8qICBQQ0k5MTExIGFsbG93cyBvbmx5IHNjYW5uaW5nIGZyb20gY2hhbm5lbCAwIHRvIGNoYW5uZWwgbiAqLworCS8qICBUT0RPOiBoYW5kbGUgdGhlIGNhc2Ugb2YgYW4gZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgKi8KKworCWlmIChhc3luY19jbWQtPmNoYW5saXN0X2xlbiA+IDEpIHsKKwkJcGNpOTExMV9haV9jaGFubmVsX3NldCgoYXN5bmNfY21kLT5jaGFubGlzdF9sZW4pIC0gMSk7CisJCXBjaTkxMTFfYXV0b3NjYW5fc2V0KGRldiwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJcGNpOTExMV9haV9jaGFubmVsX3NldChDUl9DSEFOKGFzeW5jX2NtZC0+Y2hhbmxpc3RbMF0pKTsKKwkJcGNpOTExMV9hdXRvc2Nhbl9zZXQoZGV2LCBmYWxzZSk7CisJfQorCisJLyogIFNldCBnYWluICovCisJLyogIFRoaXMgaXMgdGhlIHNhbWUgZ2FpbiBvbiBldmVyeSBjaGFubmVsICovCisKKwlwY2k5MTExX2FpX3JhbmdlX3NldChDUl9SQU5HRShhc3luY19jbWQtPmNoYW5saXN0WzBdKSk7CisKKwkvKiBTZXQgY291bnRlciAqLworCisJc3dpdGNoIChhc3luY19jbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0NPVU5UOgorCQlkZXZfcHJpdmF0ZS0+c3RvcF9jb3VudGVyID0KKwkJCWFzeW5jX2NtZC0+c3RvcF9hcmcgKiBhc3luY19jbWQtPmNoYW5saXN0X2xlbjsKKwkJZGV2X3ByaXZhdGUtPnN0b3BfaXNfbm9uZSA9IDA7CisJCWJyZWFrOworCisJY2FzZSBUUklHX05PTkU6CisJCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgPSAwOworCQlkZXZfcHJpdmF0ZS0+c3RvcF9pc19ub25lID0gMTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAiSW52YWxpZCBzdG9wIHRyaWdnZXIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qICBTZXQgdGltZXIgcGFjZXIgKi8KKworCWRldl9wcml2YXRlLT5zY2FuX2RlbGF5ID0gMDsKKwlzd2l0Y2ggKGFzeW5jX2NtZC0+Y29udmVydF9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihQQ0k5MTExXzgyNTRfQ0xPQ0tfUEVSSU9EX05TLAorCQkJJihkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8xKSwKKwkJCSYoZGV2X3ByaXZhdGUtPnRpbWVyX2Rpdmlzb3JfMiksCisJCQkmKGFzeW5jX2NtZC0+Y29udmVydF9hcmcpLAorCQkJYXN5bmNfY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisjaWZkZWYgQUlfRE9fQ01EX0RFQlVHCisJCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IGRpdmlzb3JzID0gJWQsICVkXG4iLAorCQkJZGV2X3ByaXZhdGUtPnRpbWVyX2Rpdmlzb3JfMSwKKwkJCWRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzIpOworI2VuZGlmCisKKwkJcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoZGV2LCBzb2Z0d2FyZSk7CisJCXBjaTkxMTFfdGltZXJfc2V0KGRldik7CisJCXBjaTkxMTFfZmlmb19yZXNldCgpOworCQlwY2k5MTExX2ludGVycnVwdF9zb3VyY2Vfc2V0KGRldiwgaXJxX29uX2ZpZm9faGFsZl9mdWxsLAorCQkJaXJxX29uX3RpbWVyX3RpY2spOworCQlwY2k5MTExX3RyaWdnZXJfc291cmNlX3NldChkZXYsIHRpbWVyX3BhY2VyKTsKKwkJcGx4OTA1MF9pbnRlcnJ1cHRfY29udHJvbChkZXZfcHJpdmF0ZS0+bGNyX2lvX2Jhc2UsIHRydWUsIHRydWUsCisJCQlmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisKKwkJZGV2X3ByaXZhdGUtPnNjYW5fZGVsYXkgPQorCQkJKGFzeW5jX2NtZC0+c2Nhbl9iZWdpbl9hcmcgLyAoYXN5bmNfY21kLT5jb252ZXJ0X2FyZyAqCisJCQkJYXN5bmNfY21kLT5jaGFubGlzdF9sZW4pKSAtIDE7CisKKwkJYnJlYWs7CisKKwljYXNlIFRSSUdfRVhUOgorCisJCXBjaTkxMTFfdHJpZ2dlcl9zb3VyY2Vfc2V0KGRldiwgZXh0ZXJuYWwpOworCQlwY2k5MTExX2ZpZm9fcmVzZXQoKTsKKwkJcGNpOTExMV9pbnRlcnJ1cHRfc291cmNlX3NldChkZXYsIGlycV9vbl9maWZvX2hhbGZfZnVsbCwKKwkJCWlycV9vbl90aW1lcl90aWNrKTsKKwkJcGx4OTA1MF9pbnRlcnJ1cHRfY29udHJvbChkZXZfcHJpdmF0ZS0+bGNyX2lvX2Jhc2UsIHRydWUsIHRydWUsCisJCQlmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAiSW52YWxpZCBjb252ZXJ0IHRyaWdnZXIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgKj0gKDEgKyBkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSk7CisJZGV2X3ByaXZhdGUtPmNoYW5saXN0X2xlbiA9IGFzeW5jX2NtZC0+Y2hhbmxpc3RfbGVuOworCWRldl9wcml2YXRlLT5jaHVua19jb3VudGVyID0gMDsKKwlkZXZfcHJpdmF0ZS0+Y2h1bmtfbnVtX3NhbXBsZXMgPQorCQlkZXZfcHJpdmF0ZS0+Y2hhbmxpc3RfbGVuICogKDEgKyBkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSk7CisKKyNpZmRlZiBBSV9ET19DTURfREVCVUcKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBzdGFydCBpbnRlcnJ1cHRpb25zIVxuIik7CisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogdHJpZ2dlciBzb3VyY2UgPSAlMnhcbiIsCisJCXBjaTkxMTFfdHJpZ2dlcl9hbmRfYXV0b3NjYW5fZ2V0KCkpOworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IGlycSBzb3VyY2UgICAgID0gJTJ4XG4iLAorCQlwY2k5MTExX2ludGVycnVwdF9hbmRfZmlmb19nZXQoKSk7CisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogYWlfZG9fY21kXG4iKTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBzdG9wIGNvdW50ZXIgICA9ICVkXG4iLAorCQlkZXZfcHJpdmF0ZS0+c3RvcF9jb3VudGVyKTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBzY2FuIGRlbGF5ICAgICA9ICVkXG4iLAorCQlkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSk7CisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogY2hhbmxpc3RfbGVuICAgPSAlZFxuIiwKKwkJZGV2X3ByaXZhdGUtPmNoYW5saXN0X2xlbik7CisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogY2h1bmsgbnVtIHNhbXBsZXMgPSAlZFxuIiwKKwkJZGV2X3ByaXZhdGUtPmNodW5rX251bV9zYW1wbGVzKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTkxMTFfYWlfbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCB1bnNpZ25lZCBpbnQgc3RhcnRfY2hhbl9pbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbnVtX3NhbXBsZXMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCXNob3J0ICphcnJheSA9IGRhdGE7CisJaW50IHJlc29sdXRpb24gPQorCQkoKHN0cnVjdCBwY2k5MTExX2JvYXJkICopIGRldi0+Ym9hcmRfcHRyKS0+YWlfcmVzb2x1dGlvbjsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKSB7CisJCWlmIChyZXNvbHV0aW9uID09IFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTikKKwkJCWFycmF5W2ldID0KKwkJCQkoYXJyYXlbaV0gJiBQQ0k5MTExX0hSX0FJX1JFU09MVVRJT05fTUFTSykgXgorCQkJCVBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQ7CisJCWVsc2UKKwkJCWFycmF5W2ldID0KKwkJCQkoKGFycmF5W2ldID4+IDQpICYgUENJOTExMV9BSV9SRVNPTFVUSU9OX01BU0spIF4KKwkJCQlQQ0k5MTExX0FJX1JFU09MVVRJT05fMl9DTVBfQklUOworCX0KK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIElOVEVSUlVQVCBTRUNUSU9OICovCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyN1bmRlZiBJTlRFUlJVUFRfREVCVUcKKworc3RhdGljIGlycXJldHVybl90IHBjaTkxMTFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBfZGV2aWNlIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBwX2RldmljZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwl1bnNpZ25lZCBjaGFyIGludGNzcjsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQkvKiAgSWdub3JlIGludGVycnVwdCBiZWZvcmUgZGV2aWNlIGZ1bGx5IGF0dGFjaGVkLiAqLworCQkvKiAgTWlnaHQgbm90IGV2ZW4gaGF2ZSBhbGxvY2F0ZWQgc3ViZGV2aWNlcyB5ZXQhICovCisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlhc3luYyA9IHN1YmRldmljZS0+YXN5bmM7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisKKwkvKiAgQ2hlY2sgaWYgd2UgYXJlIHNvdXJjZSBvZiBpbnRlcnJ1cHQgKi8KKwlpbnRjc3IgPSBpbmIoZGV2X3ByaXZhdGUtPmxjcl9pb19iYXNlICsKKwkJUExYOTA1MF9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCk7CisJaWYgKCEoKChpbnRjc3IgJiBQTFg5MDUwX1BDSV9JTlRFUlJVUFRfRU5BQkxFKSAhPSAwKQorCQkJJiYgKCgoaW50Y3NyICYgKFBMWDkwNTBfTElOVEkxX0VOQUJMRSB8CisJCQkJCQkJUExYOTA1MF9MSU5USTFfU1RBVFVTKSkKKwkJCQkJPT0KKwkJCQkJKFBMWDkwNTBfTElOVEkxX0VOQUJMRSB8CisJCQkJCQlQTFg5MDUwX0xJTlRJMV9TVEFUVVMpKQorCQkJCXx8ICgoaW50Y3NyICYgKFBMWDkwNTBfTElOVEkyX0VOQUJMRSB8CisJCQkJCQkJUExYOTA1MF9MSU5USTJfU1RBVFVTKSkKKwkJCQkJPT0KKwkJCQkJKFBMWDkwNTBfTElOVEkyX0VOQUJMRSB8CisJCQkJCQlQTFg5MDUwX0xJTlRJMl9TVEFUVVMpKSkpKSB7CisJCS8qICBOb3QgdGhlIHNvdXJjZSBvZiB0aGUgaW50ZXJydXB0LiAqLworCQkvKiAgKE4uQi4gbm90IHVzaW5nIFBMWDkwNTBfU09GVFdBUkVfSU5URVJSVVBUKSAqLworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmICgoaW50Y3NyICYgKFBMWDkwNTBfTElOVEkxX0VOQUJMRSB8IFBMWDkwNTBfTElOVEkxX1NUQVRVUykpID09CisJCShQTFg5MDUwX0xJTlRJMV9FTkFCTEUgfCBQTFg5MDUwX0xJTlRJMV9TVEFUVVMpKSB7CisJCS8qICBJbnRlcnJ1cHQgY29tZXMgZnJvbSBmaWZvX2hhbGYtZnVsbCBzaWduYWwgKi8KKworCQlpZiAocGNpOTExMV9pc19maWZvX2Z1bGwoKSkgeworCQkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssCisJCQkJaXJxX2ZsYWdzKTsKKwkJCWNvbWVkaV9lcnJvcihkZXYsIFBDSTkxMTFfRFJJVkVSX05BTUUgIiBmaWZvIG92ZXJmbG93Iik7CisJCQlwY2k5MTExX2ludGVycnVwdF9jbGVhcigpOworCQkJcGNpOTExMV9haV9jYW5jZWwoZGV2LCBzdWJkZXZpY2UpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQkJY29tZWRpX2V2ZW50KGRldiwgc3ViZGV2aWNlKTsKKworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisKKwkJaWYgKHBjaTkxMTFfaXNfZmlmb19oYWxmX2Z1bGwoKSkgeworCQkJdW5zaWduZWQgaW50IG51bV9zYW1wbGVzOworCQkJdW5zaWduZWQgaW50IGJ5dGVzX3dyaXR0ZW4gPSAwOworCisjaWZkZWYgSU5URVJSVVBUX0RFQlVHCisJCQlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBmaWZvIGlzIGhhbGYgZnVsbFxuIik7CisjZW5kaWYKKworCQkJbnVtX3NhbXBsZXMgPQorCQkJCVBDSTkxMTFfRklGT19IQUxGX1NJWkUgPgorCQkJCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIKKwkJCQkmJiAhZGV2X3ByaXZhdGUtPnN0b3BfaXNfbm9uZSA/IGRldl9wcml2YXRlLT4KKwkJCQlzdG9wX2NvdW50ZXIgOiBQQ0k5MTExX0ZJRk9fSEFMRl9TSVpFOworCQkJaW5zdyhQQ0k5MTExX0lPX0JBU0UgKyBQQ0k5MTExX1JFR0lTVEVSX0FEX0ZJRk9fVkFMVUUsCisJCQkJZGV2X3ByaXZhdGUtPmFpX2JvdW5jZV9idWZmZXIsIG51bV9zYW1wbGVzKTsKKworCQkJaWYgKGRldl9wcml2YXRlLT5zY2FuX2RlbGF5IDwgMSkgeworCQkJCWJ5dGVzX3dyaXR0ZW4gPQorCQkJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHN1YmRldmljZSwKKwkJCQkJZGV2X3ByaXZhdGUtPmFpX2JvdW5jZV9idWZmZXIsCisJCQkJCW51bV9zYW1wbGVzICogc2l6ZW9mKHNob3J0KSk7CisJCQl9IGVsc2UgeworCQkJCWludCBwb3NpdGlvbiA9IDA7CisJCQkJaW50IHRvX3JlYWQ7CisKKwkJCQl3aGlsZSAocG9zaXRpb24gPCBudW1fc2FtcGxlcykgeworCQkJCQlpZiAoZGV2X3ByaXZhdGUtPmNodW5rX2NvdW50ZXIgPAorCQkJCQkJZGV2X3ByaXZhdGUtPmNoYW5saXN0X2xlbikgeworCQkJCQkJdG9fcmVhZCA9CisJCQkJCQkJZGV2X3ByaXZhdGUtPgorCQkJCQkJCWNoYW5saXN0X2xlbiAtCisJCQkJCQkJZGV2X3ByaXZhdGUtPgorCQkJCQkJCWNodW5rX2NvdW50ZXI7CisKKwkJCQkJCWlmICh0b19yZWFkID4KKwkJCQkJCQludW1fc2FtcGxlcyAtIHBvc2l0aW9uKQorCQkJCQkJCXRvX3JlYWQgPQorCQkJCQkJCQludW1fc2FtcGxlcyAtCisJCQkJCQkJCXBvc2l0aW9uOworCisJCQkJCQlieXRlc193cml0dGVuICs9CisJCQkJCQkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcgorCQkJCQkJCShzdWJkZXZpY2UsCisJCQkJCQkJZGV2X3ByaXZhdGUtPgorCQkJCQkJCWFpX2JvdW5jZV9idWZmZXIgKworCQkJCQkJCXBvc2l0aW9uLAorCQkJCQkJCXRvX3JlYWQgKgorCQkJCQkJCXNpemVvZihzaG9ydCkpOworCQkJCQl9IGVsc2UgeworCQkJCQkJdG9fcmVhZCA9CisJCQkJCQkJZGV2X3ByaXZhdGUtPgorCQkJCQkJCWNodW5rX251bV9zYW1wbGVzIC0KKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJY2h1bmtfY291bnRlcjsKKwkJCQkJCWlmICh0b19yZWFkID4KKwkJCQkJCQludW1fc2FtcGxlcyAtIHBvc2l0aW9uKQorCQkJCQkJCXRvX3JlYWQgPQorCQkJCQkJCQludW1fc2FtcGxlcyAtCisJCQkJCQkJCXBvc2l0aW9uOworCisJCQkJCQlieXRlc193cml0dGVuICs9CisJCQkJCQkJc2l6ZW9mKHNob3J0KSAqCisJCQkJCQkJdG9fcmVhZDsKKwkJCQkJfQorCisJCQkJCXBvc2l0aW9uICs9IHRvX3JlYWQ7CisJCQkJCWRldl9wcml2YXRlLT5jaHVua19jb3VudGVyICs9IHRvX3JlYWQ7CisKKwkJCQkJaWYgKGRldl9wcml2YXRlLT5jaHVua19jb3VudGVyID49CisJCQkJCQlkZXZfcHJpdmF0ZS0+Y2h1bmtfbnVtX3NhbXBsZXMpCisJCQkJCQlkZXZfcHJpdmF0ZS0+Y2h1bmtfY291bnRlciA9IDA7CisJCQkJfQorCQkJfQorCisJCQlkZXZfcHJpdmF0ZS0+c3RvcF9jb3VudGVyIC09CisJCQkJYnl0ZXNfd3JpdHRlbiAvIHNpemVvZihzaG9ydCk7CisJCX0KKwl9CisKKwlpZiAoKGRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgPT0gMCkgJiYgKCFkZXZfcHJpdmF0ZS0+c3RvcF9pc19ub25lKSkgeworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXBjaTkxMTFfYWlfY2FuY2VsKGRldiwgc3ViZGV2aWNlKTsKKwl9CisKKwkvKiBWZXJ5IGltcG9ydGFudCwgb3RoZXJ3aXNlIGFub3RoZXIgaW50ZXJydXB0IHJlcXVlc3Qgd2lsbCBiZSBpbnNlcnRlZAorCSAqIGFuZCB3aWxsIGNhdXNlIGRyaXZlciBoYW5ncyBvbiBwcm9jZXNzaW5nIGludGVycnVwdCBldmVudC4gKi8KKworCXBjaTkxMTFfaW50ZXJydXB0X2NsZWFyKCk7CisKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCWNvbWVkaV9ldmVudChkZXYsIHN1YmRldmljZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBJTlNUQU5UIEFOQUxPRyBJTlBVVCBPVVRQVVQgU0VDVElPTiAqLworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAgYW5hbG9nIGluc3RhbnQgaW5wdXQgKi8KKworI3VuZGVmIEFJX0lOU05fREVCVUcKKworc3RhdGljIGludCBwY2k5MTExX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldmljZSwgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgcmVzb2x1dGlvbiA9CisJCSgoc3RydWN0IHBjaTkxMTFfYm9hcmQgKikgZGV2LT5ib2FyZF9wdHIpLT5haV9yZXNvbHV0aW9uOworCisJaW50IHRpbWVvdXQsIGk7CisKKyNpZmRlZiBBSV9JTlNOX0RFQlVHCisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogYWlfaW5zbiBzZXQgYy9yL24gPSAlMngvJTJ4LyUyeFxuIiwKKwkJQ1JfQ0hBTigoJmluc24tPmNoYW5zcGVjKVswXSksCisJCUNSX1JBTkdFKCgmaW5zbi0+Y2hhbnNwZWMpWzBdKSwgaW5zbi0+bik7CisjZW5kaWYKKworCXBjaTkxMTFfYWlfY2hhbm5lbF9zZXQoQ1JfQ0hBTigoJmluc24tPmNoYW5zcGVjKVswXSkpOworCisJaWYgKChwY2k5MTExX2FpX3JhbmdlX2dldCgpKSAhPSBDUl9SQU5HRSgoJmluc24tPmNoYW5zcGVjKVswXSkpIHsKKwkJcGNpOTExMV9haV9yYW5nZV9zZXQoQ1JfUkFOR0UoKCZpbnNuLT5jaGFuc3BlYylbMF0pKTsKKwl9CisKKwlwY2k5MTExX2ZpZm9fcmVzZXQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJcGNpOTExMV9zb2Z0d2FyZV90cmlnZ2VyKCk7CisKKwkJdGltZW91dCA9IFBDSTkxMTFfQUlfSU5TVEFOVF9SRUFEX1RJTUVPVVQ7CisKKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJaWYgKCFwY2k5MTExX2lzX2ZpZm9fZW1wdHkoKSkKKwkJCQlnb3RvIGNvbnZlcnNpb25fZG9uZTsKKwkJfQorCisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgcmVhZCB0aW1lb3V0Iik7CisJCWRhdGFbaV0gPSAwOworCQlwY2k5MTExX2ZpZm9fcmVzZXQoKTsKKwkJcmV0dXJuIC1FVElNRTsKKworCSAgICAgIGNvbnZlcnNpb25fZG9uZToKKworCQlpZiAocmVzb2x1dGlvbiA9PSBQQ0k5MTExX0hSX0FJX1JFU09MVVRJT04pIHsKKwkJCWRhdGFbaV0gPSBwY2k5MTExX2hyX2FpX2dldF9kYXRhKCk7CisJCX0gZWxzZSB7CisJCQlkYXRhW2ldID0gcGNpOTExMV9haV9nZXRfZGF0YSgpOworCQl9CisJfQorCisjaWZkZWYgQUlfSU5TTl9ERUJVRworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IGFpX2luc24gZ2V0IGMvci90ID0gJTJ4LyUyeC8lMnhcbiIsCisJCXBjaTkxMTFfYWlfY2hhbm5lbF9nZXQoKSwKKwkJcGNpOTExMV9haV9yYW5nZV9nZXQoKSwgcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9nZXQoKSk7CisjZW5kaWYKKworCXJldHVybiBpOworfQorCisvKiAgQW5hbG9nIGluc3RhbnQgb3V0cHV0ICovCisKK3N0YXRpYyBpbnQKK3BjaTkxMTFfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCXBjaTkxMTFfYW9fc2V0X2RhdGEoZGF0YVtpXSk7CisJCWRldl9wcml2YXRlLT5hb19yZWFkYmFjayA9IGRhdGFbaV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKKy8qICBBbmFsb2cgb3V0cHV0IHJlYWRiYWNrICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZGV2X3ByaXZhdGUtPmFvX3JlYWRiYWNrICYgUENJOTExMV9BT19SRVNPTFVUSU9OX01BU0s7CisJfQorCisJcmV0dXJuIGk7Cit9CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBESUdJVEFMIElOUFVUIE9VVFBVVCBTRUNUSU9OICovCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qICBEaWdpdGFsIGlucHV0cyAqLworCitzdGF0aWMgaW50IHBjaTkxMTFfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2aWNlLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBiaXRzOworCisJYml0cyA9IHBjaTkxMTFfZGlfZ2V0X2JpdHMoKTsKKwlkYXRhWzFdID0gYml0czsKKworCXJldHVybiAyOworfQorCisvKiAgRGlnaXRhbCBvdXRwdXRzICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXZpY2UsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwkvKiAgT25seSBzZXQgYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQgKi8KKwkvKiAgZGF0YVswXSA9IG1hc2sgKi8KKwkvKiAgZGF0YVsxXSA9IGJpdCBzdGF0ZSAqLworCisJZGF0YVswXSAmPSBQQ0k5MTExX0RPX01BU0s7CisKKwliaXRzID0gc3ViZGV2aWNlLT5zdGF0ZTsKKwliaXRzICY9IH5kYXRhWzBdOworCWJpdHMgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJc3ViZGV2aWNlLT5zdGF0ZSA9IGJpdHM7CisKKwlwY2k5MTExX2RvX3NldF9iaXRzKGJpdHMpOworCisJZGF0YVsxXSA9IGJpdHM7CisKKwlyZXR1cm4gMjsKK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIElOSVRJQUxJU0FUSU9OIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogIFJlc2V0IGRldmljZSAqLworCitzdGF0aWMgaW50IHBjaTkxMTFfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLyogIFNldCB0cmlnZ2VyIHNvdXJjZSB0byBzb2Z0d2FyZSAqLworCisJcGx4OTA1MF9pbnRlcnJ1cHRfY29udHJvbChkZXZfcHJpdmF0ZS0+bGNyX2lvX2Jhc2UsIHRydWUsIHRydWUsIHRydWUsCisJCXRydWUsIGZhbHNlKTsKKworCXBjaTkxMTFfdHJpZ2dlcl9zb3VyY2Vfc2V0KGRldiwgc29mdHdhcmUpOworCXBjaTkxMTFfcHJldHJpZ2dlcl9zZXQoZGV2LCBmYWxzZSk7CisJcGNpOTExMV9hdXRvc2Nhbl9zZXQoZGV2LCBmYWxzZSk7CisKKwkvKiAgUmVzZXQgODI1NCBjaGlwICovCisKKwlkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8xID0gMDsKKwlkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8yID0gMDsKKworCXBjaTkxMTFfdGltZXJfc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyogIEF0dGFjaCAqLworLyogICAgICAgLSBSZWdpc3RlciBQQ0kgZGV2aWNlICovCisvKiAgICAgICAtIERlY2xhcmUgZGV2aWNlIGRyaXZlciBjYXBhYmlsaXR5ICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKKwl1bnNpZ25lZCBsb25nIGlvX2Jhc2UsIGlvX3JhbmdlLCBsY3JfaW9fYmFzZSwgbGNyX2lvX3JhbmdlOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlOworCWludCBlcnJvciwgaTsKKwljb25zdCBzdHJ1Y3QgcGNpOTExMV9ib2FyZCAqYm9hcmQ7CisKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNpOTExMV9wcml2YXRlX2RhdGEpKSA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qICBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLiAqLworCisJcHJpbnRrKCJjb21lZGklZDogIiBQQ0k5MTExX0RSSVZFUl9OQU1FICIgZHJpdmVyXG4iLCBkZXYtPm1pbm9yKTsKKworCWZvciAocGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lfZGV2aWNlICE9IE5VTEw7CisJCXBjaV9kZXZpY2UgPQorCQlwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2aWNlKSkgeworCQlpZiAocGNpX2RldmljZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQURMSU5LKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgcGNpOTExMV9ib2FyZF9uYnI7IGkrKykgeworCQkJCWlmIChwY2k5MTExX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0KKwkJCQkJcGNpX2RldmljZS0+ZGV2aWNlKSB7CisJCQkJCS8qICB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8gKi8KKwkJCQkJaWYgKChpdC0+b3B0aW9uc1swXSAhPSAwKQorCQkJCQkJfHwgKGl0LT5vcHRpb25zWzFdICE9IDApKSB7CisJCQkJCQkvKiAgYXJlIHdlIG9uIHRoZSB3cm9uZyBidXMvc2xvdD8gKi8KKwkJCQkJCWlmIChwY2lfZGV2aWNlLT5idXMtPm51bWJlciAhPQorCQkJCQkJCWl0LT5vcHRpb25zWzBdCisJCQkJCQkJfHwgUENJX1NMT1QocGNpX2RldmljZS0+CisJCQkJCQkJCWRldmZuKSAhPQorCQkJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlkZXYtPmJvYXJkX3B0ciA9IHBjaTkxMTFfYm9hcmRzICsgaTsKKwkJCQkJYm9hcmQgPSAoc3RydWN0IHBjaTkxMTFfYm9hcmQgKikgZGV2LT4KKwkJCQkJCWJvYXJkX3B0cjsKKwkJCQkJZGV2X3ByaXZhdGUtPnBjaV9kZXZpY2UgPSBwY2lfZGV2aWNlOworCQkJCQlnb3RvIGZvdW5kOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXByaW50aygiY29tZWRpJWQ6IG5vIHN1cHBvcnRlZCBib2FyZCBmb3VuZCEgKHJlcS4gYnVzL3Nsb3QgOiAlZC8lZClcbiIsCisJCWRldi0+bWlub3IsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCisJcHJpbnRrKCJjb21lZGklZDogZm91bmQgJXMgKGI6czpmPSVkOiVkOiVkKSAsIGlycT0lZFxuIiwKKwkJZGV2LT5taW5vciwKKwkJcGNpOTExMV9ib2FyZHNbaV0ubmFtZSwKKwkJcGNpX2RldmljZS0+YnVzLT5udW1iZXIsCisJCVBDSV9TTE9UKHBjaV9kZXZpY2UtPmRldmZuKSwKKwkJUENJX0ZVTkMocGNpX2RldmljZS0+ZGV2Zm4pLCBwY2lfZGV2aWNlLT5pcnEpOworCisJLyogIFRPRE86IFdhcm4gYWJvdXQgbm9uLXRlc3RlZCBib2FyZHMuICovCisKKwlzd2l0Y2ggKGJvYXJkLT5kZXZpY2VfaWQpIHsKKwl9OworCisJLyogIFJlYWQgbG9jYWwgY29uZmlndXJhdGlvbiByZWdpc3RlciBiYXNlIGFkZHJlc3MgW1BDSV9CQVNFX0FERFJFU1MgIzFdLiAqLworCisJbGNyX2lvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldmljZSwgMSk7CisJbGNyX2lvX3JhbmdlID0gcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2aWNlLCAxKTsKKworCXByaW50aygiY29tZWRpJWQ6IGxvY2FsIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGF0IGFkZHJlc3MgMHglNGx4IFsweCU0bHhdXG4iLCBkZXYtPm1pbm9yLCBsY3JfaW9fYmFzZSwgbGNyX2lvX3JhbmdlKTsKKworCS8qICBFbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zICovCisJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaV9kZXZpY2UsIFBDSTkxMTFfRFJJVkVSX05BTUUpIDwgMCkgeworCQlwcmludGsoImNvbWVkaSVkOiBGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRUlPOworCX0KKwkvKiAgUmVhZCBQQ0k2MzA4IHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyBbUENJX0JBU0VfQUREUkVTUyAjMl0uICovCisKKwlpb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXZpY2UsIDIpOworCWlvX3JhbmdlID0gcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2aWNlLCAyKTsKKworCXByaW50aygiY29tZWRpJWQ6IDY1MDMgcmVnaXN0ZXJzIGF0IGFkZHJlc3MgMHglNGx4IFsweCU0bHhdXG4iLAorCQlkZXYtPm1pbm9yLCBpb19iYXNlLCBpb19yYW5nZSk7CisKKwlkZXYtPmlvYmFzZSA9IGlvX2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmQtPm5hbWU7CisJZGV2X3ByaXZhdGUtPmlvX3JhbmdlID0gaW9fcmFuZ2U7CisJZGV2X3ByaXZhdGUtPmlzX3ZhbGlkID0gMDsKKwlkZXZfcHJpdmF0ZS0+bGNyX2lvX2Jhc2UgPSBsY3JfaW9fYmFzZTsKKwlkZXZfcHJpdmF0ZS0+bGNyX2lvX3JhbmdlID0gbGNyX2lvX3JhbmdlOworCisJcGNpOTExMV9yZXNldChkZXYpOworCisJLyogIElycSBzZXR1cCAqLworCisJZGV2LT5pcnEgPSAwOworCWlmIChwY2lfZGV2aWNlLT5pcnEgPiAwKSB7CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEocGNpX2RldmljZS0+aXJxLAorCQkJCXBjaTkxMTFfaW50ZXJydXB0LAorCQkJCUlSUUZfU0hBUkVELCBQQ0k5MTExX0RSSVZFUl9OQU1FLCBkZXYpICE9IDApIHsKKwkJCXByaW50aygiY29tZWRpJWQ6IHVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgICV1XG4iLAorCQkJCWRldi0+bWlub3IsIHBjaV9kZXZpY2UtPmlycSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlkZXYtPmlycSA9IHBjaV9kZXZpY2UtPmlycTsKKworCS8qICBUT0RPOiBBZGQgZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgc2V0dXAgKGFjY29yZGluZyB0byBvcHRpb25bMl0pLiAqLworCisJaWYgKChlcnJvciA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlzdWJkZXZpY2UgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzdWJkZXZpY2U7CisKKwlzdWJkZXZpY2UtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzdWJkZXZpY2UtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DT01NT04gfCBTREZfQ01EX1JFQUQ7CisKKwkvKiAgVE9ETzogQWRkIGV4dGVybmFsIG11bHRpcGxleGVyIGRhdGEgKi8KKwkvKiAgICAgaWYgKGRldnByaXYtPnVzZW11eCkgeyBzdWJkZXZpY2UtPm5fY2hhbiA9IGRldnByaXYtPnVzZW11eDsgfSAqLworCS8qICAgICBlbHNlIHsgc3ViZGV2aWNlLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsgfSAqLworCisJc3ViZGV2aWNlLT5uX2NoYW4gPSBib2FyZC0+YWlfY2hhbm5lbF9uYnI7CisJc3ViZGV2aWNlLT5tYXhkYXRhID0gYm9hcmQtPmFpX3Jlc29sdXRpb25fbWFzazsKKwlzdWJkZXZpY2UtPmxlbl9jaGFubGlzdCA9IGJvYXJkLT5haV9jaGFubmVsX25icjsKKwlzdWJkZXZpY2UtPnJhbmdlX3RhYmxlID0gYm9hcmQtPmFpX3JhbmdlX2xpc3Q7CisJc3ViZGV2aWNlLT5jYW5jZWwgPSBwY2k5MTExX2FpX2NhbmNlbDsKKwlzdWJkZXZpY2UtPmluc25fcmVhZCA9IHBjaTkxMTFfYWlfaW5zbl9yZWFkOworCXN1YmRldmljZS0+ZG9fY21kdGVzdCA9IHBjaTkxMTFfYWlfZG9fY21kX3Rlc3Q7CisJc3ViZGV2aWNlLT5kb19jbWQgPSBwY2k5MTExX2FpX2RvX2NtZDsKKwlzdWJkZXZpY2UtPm11bmdlID0gcGNpOTExMV9haV9tdW5nZTsKKworCXN1YmRldmljZSA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJc3ViZGV2aWNlLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJc3ViZGV2aWNlLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfQ09NTU9OOworCXN1YmRldmljZS0+bl9jaGFuID0gYm9hcmQtPmFvX2NoYW5uZWxfbmJyOworCXN1YmRldmljZS0+bWF4ZGF0YSA9IGJvYXJkLT5hb19yZXNvbHV0aW9uX21hc2s7CisJc3ViZGV2aWNlLT5sZW5fY2hhbmxpc3QgPSBib2FyZC0+YW9fY2hhbm5lbF9uYnI7CisJc3ViZGV2aWNlLT5yYW5nZV90YWJsZSA9IGJvYXJkLT5hb19yYW5nZV9saXN0OworCXN1YmRldmljZS0+aW5zbl93cml0ZSA9IHBjaTkxMTFfYW9faW5zbl93cml0ZTsKKwlzdWJkZXZpY2UtPmluc25fcmVhZCA9IHBjaTkxMTFfYW9faW5zbl9yZWFkOworCisJc3ViZGV2aWNlID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzdWJkZXZpY2UtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzdWJkZXZpY2UtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzdWJkZXZpY2UtPm5fY2hhbiA9IFBDSTkxMTFfRElfQ0hBTk5FTF9OQlI7CisJc3ViZGV2aWNlLT5tYXhkYXRhID0gMTsKKwlzdWJkZXZpY2UtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJc3ViZGV2aWNlLT5pbnNuX2JpdHMgPSBwY2k5MTExX2RpX2luc25fYml0czsKKworCXN1YmRldmljZSA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJc3ViZGV2aWNlLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJc3ViZGV2aWNlLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJc3ViZGV2aWNlLT5uX2NoYW4gPSBQQ0k5MTExX0RPX0NIQU5ORUxfTkJSOworCXN1YmRldmljZS0+bWF4ZGF0YSA9IDE7CisJc3ViZGV2aWNlLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXN1YmRldmljZS0+aW5zbl9iaXRzID0gcGNpOTExMV9kb19pbnNuX2JpdHM7CisKKwlkZXZfcHJpdmF0ZS0+aXNfdmFsaWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qICBEZXRhY2ggKi8KKworc3RhdGljIGludCBwY2k5MTExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvKiAgUmVzZXQgZGV2aWNlICovCisKKwlpZiAoZGV2LT5wcml2YXRlICE9IDApIHsKKwkJaWYgKGRldl9wcml2YXRlLT5pc192YWxpZCkKKwkJCXBjaTkxMTFfcmVzZXQoZGV2KTsKKworCX0KKwkvKiAgUmVsZWFzZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBpcnEgKi8KKworCWlmIChkZXYtPmlycSAhPSAwKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisKKwlpZiAoZGV2X3ByaXZhdGUgIT0gMCAmJiBkZXZfcHJpdmF0ZS0+cGNpX2RldmljZSAhPSAwKSB7CisJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldl9wcml2YXRlLT5wY2lfZGV2aWNlKTsKKwkJfQorCQlwY2lfZGV2X3B1dChkZXZfcHJpdmF0ZS0+cGNpX2RldmljZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OGNmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYwpAQCAtMCwwICsxLDIxMDAgQEAKKy8qCisgKiAgY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYworICoKKyAqICBoYXJkd2FyZSBkcml2ZXIgZm9yIEFETGluayBjYXJkczoKKyAqICAgY2FyZDogICBQQ0ktOTExOERHLCBQQ0ktOTExOEhHLCBQQ0ktOTExOEhSCisgKiAgIGRyaXZlcjogcGNpOTExOGRnLCAgcGNpOTExOGhnLCAgcGNpOTExOGhyCisgKgorICogQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KKyAqCisqLworLyoKK0RyaXZlcjogYWRsX3BjaTkxMTgKK0Rlc2NyaXB0aW9uOiBBZGxpbmsgUENJLTkxMThERywgUENJLTkxMThIRywgUENJLTkxMThIUgorQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KK0RldmljZXM6IFtBRExpbmtdIFBDSS05MTE4REcgKHBjaTkxMThkZyksIFBDSS05MTE4SEcgKHBjaTkxMThoZyksCisgIFBDSS05MTE4SFIgKHBjaTkxMThocikKK1N0YXR1czogd29ya3MKKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgQUksIEFPLCBESSBhbmQgRE8gc3ViZGV2aWNlcy4KK0FJIHN1YmRldmljZSBzdXBwb3J0cyBjbWQgYW5kIGluc24gaW50ZXJmYWNlLAorb3RoZXIgc3ViZGV2aWNlcyBzdXBwb3J0IG9ubHkgaW5zbiBpbnRlcmZhY2UuCitGb3IgQUk6CistIElmIGNtZC0+c2Nhbl9iZWdpbl9zcmM9VFJJR19FWFQgdGhlbiB0cmlnZ2VyIGlucHV0IGlzIFRHSU4gKHBpbiA0NikuCistIElmIGNtZC0+Y29udmVydF9zcmM9VFJJR19FWFQgdGhlbiB0cmlnZ2VyIGlucHV0IGlzIEVYVFRSRyAocGluIDQ0KS4KKy0gSWYgY21kLT5zdGFydF9zcmMvc3RvcF9zcmM9VFJJR19FWFQgdGhlbiB0cmlnZ2VyIGlucHV0IGlzIFRHSU4gKHBpbiA0NikuCistIEl0IGlzIG5vdCBuZWNjZXNzYXJ5IHRvIGhhdmUgY21kLnNjYW5fZW5kX2FyZz1jbWQuY2hhbmxpc3RfbGVuIGJ1dAorICBjbWQuc2Nhbl9lbmRfYXJnIG1vZHVsbyBjbWQuY2hhbmxpc3RfbGVuIG11c3QgYnkgMC4KKy0gSWYgcmV0dXJuIHZhbHVlIG9mIGNtZHRlc3QgaXMgNSB0aGVuIHlvdSd2ZSBiYWQgY2hhbm5lbCBsaXN0CisgIChpdCBpc24ndCBwb3NzaWJsZSBtaXh0dXJlIFMuRS4gYW5kIERJRkYgaW5wdXRzIG9yIGJpcG9sYXIgYW5kIHVuaXBvbGFyCisgIHJhbmdlcykuCisKK1RoZXJlIGFyZSBzb21lIGhhcmR3YXJlIGxpbWl0YXRpb25zOgorYSkgWW91IGNhbm4ndCB1c2UgbWl4dHVyZSBvZiB1bmlwb2xhci9iaXBvYXIgcmFuZ2VzIG9yIGRpZmZlcmVuY2lhbC9zaW5nbGUKKyAgIGVuZGVkIGlucHV0cy4KK2IpIERNQSB0cmFuc2ZlcnMgbXVzdCBoYXZlIHRoZSBsZW5ndGggYWxpZ25lZCB0byB0d28gc2FtcGxlcyAoMzIgYml0KSwKKyAgIHNvIHRoZXJlIGlzIHNvbWUgcHJvYmxlbXMgaWYgY21kLT5jaGFubGlzdF9sZW4gaXMgb2RkLiBUaGlzIGRyaXZlciB0cmllcworICAgYnlwYXNzIHRoaXMgd2l0aCBhZGRpbmcgb25lIHNhbXBsZSB0byB0aGUgZW5kIG9mIHRoZSBldmVyeSBzY2FuIGFuZCBkaXNjYXJkCisgICBpdCBvbiBvdXRwdXQgYnV0IHRoaXMgY2Fubid0IGJlIHVzZWQgaWYgY21kLT5zY2FuX2JlZ2luX3NyYz1UUklHX0ZPTExPVworICAgYW5kIGlzIHVzZWQgZmxhZyBUUklHX1dBS0VfRU9TLCB0aGVuIGRyaXZlciBzd2l0Y2ggdG8gaW50ZXJydXB0IGRyaXZlbiBtb2RlCisgICB3aXRoIGludGVycnVwdCBhZnRlciBldmVyeSBzYW1wbGUuCitjKSBJZiBpc24ndCB1c2VkIERNQSB0aGVuIHlvdSBjYW4gdXNlIG9ubHkgbW9kZSB3aGVyZQorICAgY21kLT5zY2FuX2JlZ2luX3NyYz1UUklHX0ZPTExPVy4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgICAgICAgICAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBmaXJzdCBhdmFpbGFibGUgUENJCisgICAgICAgICAgY2FyZCB3aWxsIGJlIHVzZWQuCisgIFsyXSAtIDA9IHN0YW5kYXJkIDggRElGRi8xNiBTRSBjaGFubmVscyBjb25maWd1cmF0aW9uCisgICAgICAgIG49IGV4dGVybmFsIG11bHRpcGxleGVyIGNvbm5lY3RlZCwgMTw9bjw9MjU2CisgIFszXSAtIDA9YXV0b3NlbGVjdCBETUEgb3IgRU9DIGludGVycnVwdHMgb3BlcmF0aW9uCisgICAgICAgIDE9ZGlzYWJsZSBETUEgbW9kZQorICAgICAgICAzPWRpc2FibGUgRE1BIGFuZCBJTlQsIG9ubHkgaW5zbiBpbnRlcmZhY2Ugd2lsbCB3b3JrCisgIFs0XSAtIHNhbXBsZSZob2xkIHNpZ25hbCAtIGNhcmQgY2FuIGdlbmVyYXRlIHNpZ25hbCBmb3IgZXh0ZXJuYWwgUyZIIGJvYXJkCisgICAgICAgIDA9dXNlIFNTSE8gKHBpbiA0NSkgc2lnbmFsIGlzIGdlbmVyYXRlZCBpbiBvbmJvYXJkIGhhcmR3YXJlIFMmSCBsb2dpYworICAgICAgICAwIT11c2UgQURDSE43IChwaW4gMjMpIHNpZ25hbCBpcyBnZW5lcmF0ZWQgZnJvbSBkcml2ZXIsIG51bWJlcgorICAgICAgICAgICBzYXkgaG93IGxvbmcgZGVsYXkgaXMgcmVxdWVzdGVkIGluIG5zIGFuZCBzaWduIHBvbGFyaXR5IG9mIHRoZSBob2xkCisgICAgICAgICAgIChpbiB0aGlzIGNhc2UgZXh0ZXJuYWwgbXVsdGlwbGV4b3IgY2FuIHNlcnZlIG9ubHkgMTI4IGNoYW5uZWxzKQorICBbNV0gLSAwPXN0b3AgbWVhc3VyZSBvbiBhbGwgaGFyZHdhcmUgZXJyb3JzCisgICAgICAgIDJ8PWlnbm9yZSBBRE9SIC0gQS9EIE92ZXJydW4gc3RhdHVzCisJOHw9aWdub3JlIEJvdmVyIC0gQS9EIEJ1cnN0IE1vZGUgT3ZlcnJ1biBzdGF0dXMKKwkyNTZ8PWlnbm9yZSBuRnVsbCAtIEEvRCBGSUZPIEZ1bGwgc3RhdHVzCisKKyovCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSAiLi4vcGNpX2lkcy5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImFtY2NfczU5MzMuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisvKiBwYXJhbm9pZCBjaGVja3MgYXJlIGJyb2tlbiAqLworI3VuZGVmIFBDSTkxMThfUEFSQU5PSURDSEVDSwkvKiBpZiBkZWZpbmVkLCB0aGVuIGlzIHVzZWQgY29kZSB3aGljaCBjb250cm9sIGNvcnJlY3QgY2hhbm5lbCBudW1iZXIgb24gZXZlcnkgMTIgYml0IHNhbXBsZSAqLworCisjdW5kZWYgUENJOTExOF9FWFRERUJVRwkJLyogaWYgZGVmaW5lZCB0aGVuIGRyaXZlciBwcmludHMgYSBsb3Qgb2YgbWVzc2FnZXMgKi8KKworI3VuZGVmIERQUklOVEsKKyNpZmRlZiBQQ0k5MTE4X0VYVERFQlVHCisjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBydF9wcmludGsoZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBJT1JBTkdFXzkxMTggCTY0CS8qIEkgaG9wZSAqLworI2RlZmluZSBQQ0k5MTE4X0NIQU5MRU4JMjU1CS8qIGxlbiBvZiBjaGFubGlzdCwgc29tZSBzb3VyY2Ugc2F5IDI1NiwgYnV0IHJlYWxpdHkgbG9va3MgbGlrZSAyNTUgOi0oICovCisKKyNkZWZpbmUgUENJOTExOF9DTlQwCTB4MDAJLyogUi9XOiA4MjU0IGNvdXRlciAwICovCisjZGVmaW5lIFBDSTkxMThfQ05UMQkweDA0CS8qIFIvVzogODI1NCBjb3V0ZXIgMCAqLworI2RlZmluZSBQQ0k5MTE4X0NOVDIJMHgwOAkvKiBSL1c6IDgyNTQgY291dGVyIDAgKi8KKyNkZWZpbmUgUENJOTExOF9DTlRDVFJMCTB4MGMJLyogVzogICA4MjU0IGNvdW50ZXIgY29udHJvbCAqLworI2RlZmluZSBQQ0k5MTE4X0FEX0RBVEEJMHgxMAkvKiBSOiAgIEEvRCBkYXRhICovCisjZGVmaW5lIFBDSTkxMThfREExCTB4MTAJLyogVzogICBEL0EgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBDSTkxMThfREEyCTB4MTQKKyNkZWZpbmUgUENJOTExOF9BRFNUQVQJMHgxOAkvKiBSOiAgIEEvRCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9BRENOVFJMCTB4MTgJLyogVzogICBBL0QgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBQQ0k5MTE4X0RJCTB4MWMJLyogUjogICBkaWdpIGlucHV0IHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTkxMThfRE8JMHgxYwkvKiBXOiAgIGRpZ2kgb3V0cHV0IHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTkxMThfU09GVFRSRwkweDIwCS8qIFc6ICAgc29mdCB0cmlnZ2VyIGZvciBBL0QgKi8KKyNkZWZpbmUgUENJOTExOF9HQUlOCTB4MjQJLyogVzogICBBL0QgZ2Fpbi9jaGFubmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTkxMThfQlVSU1QJMHgyOAkvKiBXOiAgIEEvRCBidXJzdCBudW1iZXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9TQ0FOTU9ECTB4MmMJLyogVzogICBBL0QgYXV0byBzY2FuIG1vZGUgKi8KKyNkZWZpbmUgUENJOTExOF9BREZVTkMJMHgzMAkvKiBXOiAgIEEvRCBmdW5jdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBQQ0k5MTE4X0RFTEZJRk8JMHgzNAkvKiBXOiAgIEEvRCBkYXRhIEZJRk8gcmVzZXQgKi8KKyNkZWZpbmUgUENJOTExOF9JTlRTUkMJMHgzOAkvKiBSOiAgIGludGVycnVwdCByZWFzb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9JTlRDVFJMCTB4MzgJLyogVzogICBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworCisvLyBiaXRzIGZyb20gQS9EIGNvbnRyb2wgcmVnaXN0ZXIgKFBDSTkxMThfQURDTlRSTCkKKyNkZWZpbmUgQWRDb250cm9sX1VuaVAJMHg4MAkvKiAxPWJpcG9sYXIsIDA9dW5pcG9sYXIgKi8KKyNkZWZpbmUgQWRDb250cm9sX0RpZmYJMHg0MAkvKiAxPWRpZmZlcmVudGlhbCwgMD0gc2luZ2xlIGVuZCBpbnB1dHMgKi8KKyNkZWZpbmUgQWRDb250cm9sX1NvZnRHCTB4MjAJLyogMT04MjU0IGNvdW50ZXIgd29ya3MsIDA9Y291bnRlciBzdG9wcyAqLworI2RlZmluZQlBZENvbnRyb2xfRXh0RwkweDEwCS8qIDE9ODI1NCBjb3VudHJvbCBjb250cm9sbGVkIGJ5IFRHSU4ocGluIDQ2KSwgMD1jb250cm9sZWQgYnkgU29mdEcgKi8KKyNkZWZpbmUgQWRDb250cm9sX0V4dE0JMHgwOAkvKiAxPWV4dGVybmFsIGhhcmR3YXJlIHRyaWdnZXIgKHBpbiA0NCksIDA9aW50ZXJuYWwgdHJpZ2dlciAqLworI2RlZmluZSBBZENvbnRyb2xfVG1yVHIJMHgwNAkvKiAxPTgyNTQgaXMgaXRlcm5hbCB0cmlnZ2VyIHNvdXJjZSwgMD1zb2Z0d2FyZSB0cmlnZ2VyIGlzIHNvdXJjZSAocmVnaXN0ZXIgUENJOTExOF9TT0ZUVFJHKSAqLworI2RlZmluZSBBZENvbnRyb2xfSW50CTB4MDIJLyogMT1lbmFibGUgSU5ULCAwPWRpc2FibGUgKi8KKyNkZWZpbmUgQWRDb250cm9sX0RtYQkweDAxCS8qIDE9ZW5hYmxlIERNQSwgMD1kaXNhYmxlICovCisKKy8vIGJpdHMgZnJvbSBBL0QgZnVuY3Rpb24gcmVnaXN0ZXIgKFBDSTkxMThfQURGVU5DKQorI2RlZmluZSBBZEZ1bmN0aW9uX1BEVHJnCTB4ODAJLyogMT1wb3NpdGl2ZSwgMD1uZWdhdGl2ZSBkaWdpdGFsIHRyaWdnZXIgKG9ubHkgcG9zaXRpdmUgaXMgY29ycmVjdCkgKi8KKyNkZWZpbmUgQWRGdW5jdGlvbl9QRVRyZwkweDQwCS8qIDE9cG9zaXRpdmUsIDA9bmVnYXRpdmUgZXh0ZXJuYWwgdHJpZ2dlciAob25seSBwb3NpdGl2ZSBpcyBjb3JyZWN0KSAqLworI2RlZmluZSBBZEZ1bmN0aW9uX0JTU0gJCTB4MjAJLyogMT13aXRoIHNhbXBsZSZob2xkLCAwPXdpdGhvdXQgKi8KKyNkZWZpbmUgQWRGdW5jdGlvbl9CTQkJMHgxMAkvKiAxPWJ1cnN0IG1vZGUsIDA9bm9ybWFsIG1vZGUgKi8KKyNkZWZpbmUgQWRGdW5jdGlvbl9CUwkJMHgwOAkvKiAxPWJ1cnN0IG1vZGUgc3RhcnQsIDA9YnVyc3QgbW9kZSBzdG9wICovCisjZGVmaW5lIEFkRnVuY3Rpb25fUE0JCTB4MDQJLyogMT1wb3N0IHRyaWdnZXIgbW9kZSwgMD1ub3QgcG9zdCB0cmlnZ2VyICovCisjZGVmaW5lIEFkRnVuY3Rpb25fQU0JCTB4MDIJLyogMT1hYm91dCB0cmlnZ2VyIG1vZGUsIDA9bm90IGFib3V0IHRyaWdnZXIgKi8KKyNkZWZpbmUgQWRGdW5jdGlvbl9TdGFydAkweDAxCS8qIDE9dHJpZ2dlciBzdGFydCwgMD10cmlnZ2VyIHN0b3AgKi8KKworLy8gYml0cyBmcm9tIEEvRCBzdGF0dXMgcmVnaXN0ZXIgKFBDSTkxMThfQURTVEFUKQorI2RlZmluZSBBZFN0YXR1c19uRnVsbAkweDEwMAkvKiAwPUZJRk8gZnVsbCAoZmF0YWwpLCAxPW5vdCBmdWxsICovCisjZGVmaW5lIEFkU3RhdHVzX25IZnVsbAkweDA4MAkvKiAwPUZJRk8gaGFsZiBmdWxsLCAxPUZJRk8gbm90IGhhbGYgZnVsbCAqLworI2RlZmluZSBBZFN0YXR1c19uRXB0eQkweDA0MAkvKiAwPUZJRk8gZW1wdHksIDE9RklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgQWRTdGF0dXNfQWNtcAkweDAyMAkvKiAgKi8KKyNkZWZpbmUgQWRTdGF0dXNfRFRICTB4MDEwCS8qIDE9ZXh0ZXJuYWwgZGlnaXRhbCB0cmlnZ2VyICovCisjZGVmaW5lIEFkU3RhdHVzX0JvdmVyCTB4MDA4CS8qIDE9YnVyc3QgbW9kZSBvdmVycnVuIChmYXRhbCkgKi8KKyNkZWZpbmUgQWRTdGF0dXNfQURPUwkweDAwNAkvKiAxPUEvRCBvdmVyIHNwZWVkICh3YXJuaW5nKSAqLworI2RlZmluZSBBZFN0YXR1c19BRE9SCTB4MDAyCS8qIDE9QS9EIG92ZXJydW4gKGZhdGFsKSAqLworI2RlZmluZSBBZFN0YXR1c19BRHJkeQkweDAwMQkvKiAxPUEvRCBhbHJlYWR5IHJlYWR5LCAwPW5vdCByZWFkeSAqLworCisvLyBiaXRzIGZvciBpbnRlcnJ1cHQgcmVhc29uIGFuZCBjb250cm9sIChQQ0k5MTE4X0lOVFNSQywgUENJOTExOF9JTlRDVFJMKQorLy8gMT1pbnRlcnJ1cHQgb2NjdXIsIGVuYWJsZSBzb3VyY2UsICAwPWludGVycnVwdCBub3Qgb2NjdXIsIGRpc2FibGUgc291cmNlCisjZGVmaW5lIEludF9UaW1lcgkweDA4CS8qIHRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJbnRfQWJvdXQJMHgwNAkvKiBhYm91dCB0cmlnZ2VyIGNvbXBsZXRlICovCisjZGVmaW5lIEludF9IZnVsbAkweDAyCS8qIEEvRCBGSUZPIGhsYWYgZnVsbCAqLworI2RlZmluZSBJbnRfRFRyZwkweDAxCS8qIGV4dGVybmFsIGRpZ2l0YWwgdHJpZ2dlciAqLworCisjZGVmaW5lIFNUQVJUX0FJX0VYVAkweDAxCS8qIHN0YXJ0IG1lYXN1cmUgb24gZXh0ZXJuYWwgdHJpZ2dlciAqLworI2RlZmluZSBTVE9QX0FJX0VYVAkweDAyCS8qIHN0b3AgbWVhc3VyZSBvbiBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIFNUQVJUX0FJX0lOVAkweDA0CS8qIHN0YXJ0IG1lYXN1cmUgb24gaW50ZXJuYWwgdHJpZ2dlciAqLworI2RlZmluZSBTVE9QX0FJX0lOVAkweDA4CS8qIHN0b3AgbWVhc3VyZSBvbiBpbnRlcm5hbCB0cmlnZ2VyICovCisKKyNkZWZpbmUgRVhUVFJHX0FJCTAJLyogZXh0IHRyZyBpcyB1c2VkIGJ5IEFJICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2k5MTE4ZGdfaHIgPSB7IDgsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2k5MTE4aGcgPSB7IDgsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDA1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKQorCX0KK307CisKKyNkZWZpbmUgUENJOTExOF9CSVBPTEFSX1JBTkdFUwk0CS8qIHVzZWQgZm9yIHRlc3Qgb24gbWl4dHVyZSBvZiBCSVAvVU5JIHJhbmdlcyAqLworCitzdGF0aWMgaW50IHBjaTkxMThfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpOTExOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgYm9hcmR0eXBlIHsKKwljb25zdCBjaGFyICpuYW1lOwkvLyBib2FyZCBuYW1lCisJaW50IHZlbmRvcl9pZDsJCS8vIFBDSSB2ZW5kb3IgYSBkZXZpY2UgSUQgb2YgY2FyZAorCWludCBkZXZpY2VfaWQ7CisJaW50IGlvcmFuZ2VfYW1jYzsJLy8gaW9yYW5nZSBmb3Igb3duIFM1OTMzIHJlZ2lvbgorCWludCBpb3JhbmdlXzkxMTg7CS8vIHBhc3MgdGhydSBjYXJkIHJlZ2lvbiBzaXplCisJaW50IG5fYWljaGFuOwkJLy8gbnVtIG9mIEEvRCBjaGFucworCWludCBuX2FpY2hhbmQ7CQkvLyBudW0gb2YgQS9EIGNoYW5zIGluIGRpZmYgbW9kZQorCWludCBtdXhfYWljaGFuOwkJLy8gbnVtIG9mIEEvRCBjaGFucyB3aXRoIGV4dGVybmFsIG11bHRpcGxleG9yCisJaW50IG5fYWljaGFubGlzdDsJLy8gbGVuIG9mIGNoYW5saXN0CisJaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIEQvQSBjaGFucworCWludCBhaV9tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBBL0QKKwlpbnQgYW9fbWF4ZGF0YTsJCS8vIHJlc29sdXRpb24gb2YgRC9BCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9haTsJLy8gcmFuZ2VsaXN0IGZvciBBL0QKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvLyByYW5nZWxpc3QgZm9yIEQvQQorCXVuc2lnbmVkIGludCBhaV9uc19taW47CS8vIG1heCBzYW1wbGUgc3BlZWQgb2YgY2FyZCB2IG5zCisJdW5zaWduZWQgaW50IGFpX3BhY2VyX21pbjsJLy8gbWluaW1hbCBwYWNlciB2YWx1ZSAoYzEqYzIgb3IgYzEgaW4gYnVyc3QpCisJaW50IGhhbGZfZmlmb19zaXplOwkvLyBzaXplIG9mIEZJRk8vMgorCit9OworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpOTExOF9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FNQ0MsIDB4ODBkOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpOTExOF9wY2lfdGFibGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CisJeyJwY2k5MTE4ZGciLCBQQ0lfVkVORE9SX0lEX0FNQ0MsIDB4ODBkOSwKKwkJCUFNQ0NfT1BfUkVHX1NJWkUsIElPUkFOR0VfOTExOCwKKwkJCTE2LCA4LCAyNTYsIFBDSTkxMThfQ0hBTkxFTiwgMiwgMHgwZmZmLCAweDBmZmYsCisJCQkmcmFuZ2VfcGNpOTExOGRnX2hyLCAmcmFuZ2VfYmlwb2xhcjEwLAorCQkzMDAwLCAxMiwgNTEyfSwKKwl7InBjaTkxMThoZyIsIFBDSV9WRU5ET1JfSURfQU1DQywgMHg4MGQ5LAorCQkJQU1DQ19PUF9SRUdfU0laRSwgSU9SQU5HRV85MTE4LAorCQkJMTYsIDgsIDI1NiwgUENJOTExOF9DSEFOTEVOLCAyLCAweDBmZmYsIDB4MGZmZiwKKwkJCSZyYW5nZV9wY2k5MTE4aGcsICZyYW5nZV9iaXBvbGFyMTAsCisJCTMwMDAsIDEyLCA1MTJ9LAorCXsicGNpOTExOGhyIiwgUENJX1ZFTkRPUl9JRF9BTUNDLCAweDgwZDksCisJCQlBTUNDX09QX1JFR19TSVpFLCBJT1JBTkdFXzkxMTgsCisJCQkxNiwgOCwgMjU2LCBQQ0k5MTE4X0NIQU5MRU4sIDIsIDB4ZmZmZiwgMHgwZmZmLAorCQkJJnJhbmdlX3BjaTkxMThkZ19ociwgJnJhbmdlX2JpcG9sYXIxMCwKKwkJMTAwMDAsIDQwLCA1MTJ9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IGJvYXJkdHlwZSkpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNpOTExOCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhZGxfcGNpOTExOCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpOTExOF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNpOTExOF9kZXRhY2gsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSwKK307CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTkxMTgsIHBjaTkxMThfcGNpX3RhYmxlKTsKKworc3RydWN0IHBjaTkxMThfcHJpdmF0ZSB7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2VfYTsJLy8gYmFzZStzaXplIGZvciBBTUNDIGNoaXAKKwl1bnNpZ25lZCBpbnQgbWFzdGVyOwkvLyBtYXN0ZXIgY2FwYWJsZQorCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CS8vIHB0ciB0byBhY3R1YWwgcGNpZGV2CisJdW5zaWduZWQgaW50IHVzZW11eDsJLy8gd2Ugd2FudCB0byB1c2UgZXh0ZXJuYWwgbXVsdGlwbGV4b3IhCisjaWZkZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCisJdW5zaWduZWQgc2hvcnQgY2hhbmxpc3RbUENJOTExOF9DSEFOTEVOICsgMV07CS8vIGxpc3Qgb2Ygc2NhbmVkIGNoYW5uZWwKKwl1bnNpZ25lZCBjaGFyIGNoYW5saXN0bGVuOwkvLyBudW1iZXIgb2Ygc2Nhbmxpc3QKKyNlbmRpZgorCXVuc2lnbmVkIGNoYXIgQWRDb250cm9sUmVnOwkvLyBBL0QgY29udHJvbCByZWdpc3RlcgorCXVuc2lnbmVkIGNoYXIgSW50Q29udHJvbFJlZzsJLy8gSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIKKwl1bnNpZ25lZCBjaGFyIEFkRnVuY3Rpb25SZWc7CS8vIEEvRCBmdW5jdGlvbiByZWdpc3RlcgorCWNoYXIgdmFsaWQ7CQkvLyBkcml2ZXIgaXMgb2sKKwljaGFyIGFpX25ldmVyZW5kaW5nOwkvLyB3ZSBkbyB1bmxpbWl0ZWQgQUkKKwl1bnNpZ25lZCBpbnQgaTgyNTRfb3NjX2Jhc2U7CS8vIGZyZXF1ZW5jZSBvZiBvbmJvYXJkIG9zY2lsYXRvcgorCXVuc2lnbmVkIGludCBhaV9kbzsJLy8gd2hhdCBkbyBBST8gMD1ub3RoaW5nLCAxIHRvIDQgbW9kZQorCXVuc2lnbmVkIGludCBhaV9hY3Rfc2NhbjsJLy8gaG93IG1hbnkgc2NhbnMgd2UgZmluaXNoZWQKKwl1bnNpZ25lZCBpbnQgYWlfYnVmX3B0cjsJLy8gZGF0YSBidWZmZXIgcHRyIGluIHNhbXBsZXMKKwl1bnNpZ25lZCBpbnQgYWlfbl9jaGFuOwkvLyBob3cgbWFueSBjaGFubmVscyBpcyBtZWFzdXJlZAorCXVuc2lnbmVkIGludCBhaV9uX3NjYW5sZW47CS8vIGxlbiBvZiBhY3R1YWwgc2Nhbmxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfbl9yZWFsc2NhbmxlbjsJLy8gd2hhdCB3ZSBtdXN0IHRyYW5zZmVyIGZvciBvbmUgb3V0Z29pbmcgc2NhbiBpbmNsdWRlIGZyb250L2JhY2sgYWRkcworCXVuc2lnbmVkIGludCBhaV9hY3RfZG1hcG9zOwkvLyBwb3NpdGlvbiBpbiBhY3R1YWwgcmVhbCBzdHJlYW0KKwl1bnNpZ25lZCBpbnQgYWlfYWRkX2Zyb250OwkvLyBob3cgbWFueSBjaGFubmVscyB3ZSBtdXN0IGFkZCBiZWZvcmUgc2NhbiB0byBzYXRpc2Z5IFMmSD8KKwl1bnNpZ25lZCBpbnQgYWlfYWRkX2JhY2s7CS8vIGhvdyBtYW55IGNoYW5uZWxzIHdlIG11c3QgYWRkIGJlZm9yZSBzY2FuIHRvIHNhdGlzZnkgRE1BPworCXVuc2lnbmVkIGludCAqYWlfY2hhbmxpc3Q7CS8vIGFjdGF1bCBjaGFubGlzdAorCXVuc2lnbmVkIGludCBhaV90aW1lcjE7CisJdW5zaWduZWQgaW50IGFpX3RpbWVyMjsKKwl1bnNpZ25lZCBpbnQgYWlfZmxhZ3M7CisJY2hhciBhaTEyX3N0YXJ0c3RvcDsJLy8gbWVhc3VyZSBjYW4gc3RhcnQvc3RvcCBvbiBleHRlcm5hbCB0cmlnZ2VyCisJdW5zaWduZWQgaW50IGFpX2Rpdmlzb3IxLCBhaV9kaXZpc29yMjsJLy8gZGl2aXNvcnMgZm9yIHN0YXJ0IG9mIG1lYXN1cmUgb24gZXh0ZXJuYWwgc3RhcnQKKwl1bnNpZ25lZCBpbnQgYWlfZGF0YV9sZW47CisJc2hvcnQgKmFpX2RhdGE7CisJc2hvcnQgYW9fZGF0YVsyXTsJLy8gZGF0YSBvdXRwdXQgYnVmZmVyCisJdW5zaWduZWQgaW50IGFpX3NjYW5zOwkvLyBudW1iZXIgb2Ygc2NhbnMgdG8gZG8KKwljaGFyIGRtYV9kb3VibGVidWY7CS8vIHdlIGNhbiB1c2UgZG91YmxlIGJ1ZmZyaW5nCisJdW5zaWduZWQgaW50IGRtYV9hY3RidWY7CS8vIHdoaWNoIGJ1ZmZlciBpcyB1c2VkIG5vdworCXNob3J0ICpkbWFidWZfdmlydFsyXTsJLy8gcG9pbnRlcnMgdG8gYmVnaW4gb2YgRE1BIGJ1ZmZlcgorCXVuc2lnbmVkIGxvbmcgZG1hYnVmX2h3WzJdOwkvLyBodyBhZGRyZXNzIG9mIERNQSBidWZmCisJdW5zaWduZWQgaW50IGRtYWJ1Zl9zaXplWzJdOwkvLyBzaXplIG9mIGRtYSBidWZmZXIgaW4gYnl0ZXMKKwl1bnNpZ25lZCBpbnQgZG1hYnVmX3VzZV9zaXplWzJdOwkvLyB3aGljaCBzaXplIHdlIG1heSBub3cgdXNlZCBmb3IgdHJhbnNmZXIKKwl1bnNpZ25lZCBpbnQgZG1hYnVmX3VzZWRfc2l6ZVsyXTsJLy8gd2hpY2ggc2l6ZSB3YXMgdHJ1bGx5IHVzZWQKKwl1bnNpZ25lZCBpbnQgZG1hYnVmX3BhbmljX3NpemVbMl07CisJdW5zaWduZWQgaW50IGRtYWJ1Zl9zYW1wbGVzWzJdOwkvLyBzaXplIGluIHNhbXBsZXMKKwlpbnQgZG1hYnVmX3BhZ2VzWzJdOwkvLyBudW1iZXIgb2YgcGFnZXMgaW4gYnVmZmVyCisJdW5zaWduZWQgY2hhciBjbnQwX3VzZXJzOwkvLyBiaXQgZmllbGQgb2YgODI1NCBDTlQwIHVzZXJzICgwLXVudXNlZCwgMS1BTywgMi1ESSwgMy1ETykKKwl1bnNpZ25lZCBjaGFyIGV4dHRyZ191c2VyczsJLy8gYml0IGZpZWxkIG9mIGV4dGVybmFsIHRyaWdnZXIgdXNlcnMgKDAtQUksIDEtQU8sIDItREksIDMtRE8pCisJdW5zaWduZWQgaW50IGNudDBfZGl2aXNvcjsJLy8gYWN0dWFsIENOVDAgZGl2aXNvcgorCXZvaWQgKCppbnRfYWlfZnVuYykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIHNob3J0KTsJLy8gcHRyIHRvIGFjdHVhbCBpbnRlcnJ1cHQgQUkgZnVuY3Rpb24KKwl1bnNpZ25lZCBjaGFyIGFpMTZiaXRzOwkvLyA9MSAxNiBiaXQgY2FyZAorCXVuc2lnbmVkIGNoYXIgdXNlZG1hOwkvLyA9MSB1c2UgRE1BIHRyYW5zZmVyIGFuZCBub3QgSU5UCisJdW5zaWduZWQgY2hhciB1c2Vlb3NoYW5kbGU7CS8vID0xIGNoYW5nZSBXQUtFX0VPUyBETUEgdHJhbnNmZXIgdG8gZml0IG9uIGV2ZXJ5IHNlY29uZAorCXVuc2lnbmVkIGNoYXIgdXNlc3NoOwkvLyA9MSB0dXJuIG9uIFMmSCBzdXBwb3J0CisJaW50IHNvZnRzc2hkZWxheTsJLy8gPjAgdXNlIHNvZnR3YXJlIFMmSCwgbnVtZXIgaXMgcmVxdWVzdGVkIGRlbGF5IGluIG5zCisJdW5zaWduZWQgY2hhciBzb2Z0c3Noc2FtcGxlOwkvLyBwb2xhcml0eSBvZiBTJkggc2lnbmFsIGluIHNhbXBsZSBzdGF0ZQorCXVuc2lnbmVkIGNoYXIgc29mdHNzaGhvbGQ7CS8vIHBvbGFyaXR5IG9mIFMmSCBzaWduYWwgaW4gaG9sZCBzdGF0ZQorCXVuc2lnbmVkIGludCBhaV9tYXNrZXJyOwkvLyB3aGljaCB3YXJuaW5nIHdhcyBwcmludGVkCisJdW5zaWduZWQgaW50IGFpX21hc2toYXJkZXJyOwkvLyBvbiB3aGljaCBlcnJvciBiaXRzIHN0b3BzCisJdW5zaWduZWQgaW50IGFpX2ludHRyaWdfc3RhcnQ7CS8vIFRSSUdfSU5UIGZvciBzdGFydAorfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaTkxMThfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKHN0cnVjdCBib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworc3RhdGljIGludCBjaGVja19jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBpbnQgZnJvbnRhZGQsIGludCBiYWNrYWRkKTsKK3N0YXRpYyBpbnQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG5fY2hhbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCwgaW50IHJvdCwgaW50IGZyb250YWRkLCBpbnQgYmFja2FkZCwKKwlpbnQgdXNlZG1hLCBjaGFyIGVvc2hhbmRsZSk7CitzdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpOworc3RhdGljIGludCBwY2k5MTE4X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgcGNpOTExOF9leHR0cmdfYWRkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFyIHNvdXJjZSk7CitzdGF0aWMgaW50IHBjaTkxMThfZXh0dHJnX2RlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhciBzb3VyY2UpOworc3RhdGljIGludCBwY2k5MTE4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHBjaTkxMThfY2FsY19kaXZpc29ycyhjaGFyIG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgaW50ICp0aW0xLCB1bnNpZ25lZCBpbnQgKnRpbTIsCisJdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgY2hhbnMsIHVuc2lnbmVkIGludCAqZGl2MSwgdW5zaWduZWQgaW50ICpkaXYyLAorCWNoYXIgdXNlc3NoLCB1bnNpZ25lZCBpbnQgY2huc3NoZnJvbnQpOworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2luc25fcmVhZF9haShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpbnQgbiwgdGltZW91dDsKKworCWRldnByaXYtPkFkQ29udHJvbFJlZyA9IEFkQ29udHJvbF9JbnQgJiAweGZmOworCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPSBBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZzsKKwlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOwkvLyBwb3NpdGl2ZSB0cmlnZ2Vycywgbm8gUyZILCBubyBidXJzdCwgYnVyc3Qgc3RvcCwgbm8gcG9zdCB0cmlnZ2VyLCBubyBhYm91dCB0cmlnZ2VyLCB0cmlnZ2VyIHN0b3AKKworCWlmICghc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgMSwgJmluc24tPmNoYW5zcGVjLCAwLCAwLCAwLCAwLCAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9ERUxGSUZPKTsJLy8gZmx1c2ggRklGTworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9TT0ZUVFJHKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQljb21lZGlfdWRlbGF5KDIpOworCQl0aW1lb3V0ID0gMTAwOworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoaW5sKGRldi0+aW9iYXNlICsgUENJOTExOF9BRFNUQVQpICYgQWRTdGF0dXNfQURyZHkpCisJCQkJZ290byBjb252X2ZpbmlzaDsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKworCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIGluc24gdGltZW91dCIpOworCQlkYXRhW25dID0gMDsKKwkJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfREVMRklGTyk7CS8vIGZsdXNoIEZJRk8KKwkJcmV0dXJuIC1FVElNRTsKKworCSAgICAgIGNvbnZfZmluaXNoOgorCQlpZiAoZGV2cHJpdi0+YWkxNmJpdHMpIHsKKwkJCWRhdGFbbl0gPQorCQkJCShpbmwoZGV2LT5pb2Jhc2UgKworCQkJCQlQQ0k5MTE4X0FEX0RBVEEpICYgMHhmZmZmKSBeIDB4ODAwMDsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbbl0gPQorCQkJCShpbncoZGV2LT5pb2Jhc2UgKworCQkJCQlQQ0k5MTE4X0FEX0RBVEEpID4+IDQpICYgMHhmZmY7CisJCX0KKwl9CisKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9ERUxGSUZPKTsJLy8gZmx1c2ggRklGTworCXJldHVybiBuOworCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfaW5zbl93cml0ZV9hbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGNoYW5yZWcsIGNoOworCisJY2ggPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoY2gpIHsKKwkJY2hhbnJlZyA9IFBDSTkxMThfREEyOworCX0gZWxzZSB7CisJCWNoYW5yZWcgPSBQQ0k5MTE4X0RBMTsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dGwoZGF0YVtuXSwgZGV2LT5pb2Jhc2UgKyBjaGFucmVnKTsKKwkJZGV2cHJpdi0+YW9fZGF0YVtjaF0gPSBkYXRhW25dOworCX0KKworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2luc25fcmVhZF9hbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykKKwkJZGF0YVtuXSA9IGRldnByaXYtPmFvX2RhdGFbY2hhbl07CisKKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9pbnNuX2JpdHNfZGkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMV0gPSBpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RJKSAmIDB4ZjsKKworCXJldHVybiAyOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2luc25fYml0c19kbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCW91dGwocy0+c3RhdGUgJiAweDBmLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfRE8pOworCX0KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIGludGVycnVwdF9wY2k5MTE4X2FpX21vZGU0X3N3aXRjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnID0KKwkJQWRGdW5jdGlvbl9QRFRyZyB8IEFkRnVuY3Rpb25fUEVUcmcgfCBBZEZ1bmN0aW9uX0FNOworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJb3V0bCgweDMwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UQ1RSTCk7CisJb3V0bCgoZGV2cHJpdi0+ZG1hYnVmX2h3WzEgLSBkZXZwcml2LT5kbWFfYWN0YnVmXSA+PiAxKSAmIDB4ZmYsCisJCWRldi0+aW9iYXNlICsgUENJOTExOF9DTlQwKTsKKwlvdXRsKChkZXZwcml2LT5kbWFidWZfaHdbMSAtIGRldnByaXYtPmRtYV9hY3RidWZdID4+IDkpICYgMHhmZiwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDApOworCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgfD0gQWRGdW5jdGlvbl9TdGFydDsKKwlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGRlZnJhZ21lbnRfZG1hX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHNob3J0ICogZG1hX2J1ZmZlciwgdW5zaWduZWQgaW50IG51bV9zYW1wbGVzKQoreworCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CisJdW5zaWduZWQgaW50IHN0YXJ0X3BvcyA9IGRldnByaXYtPmFpX2FkZF9mcm9udCwKKwkJc3RvcF9wb3MgPSBkZXZwcml2LT5haV9hZGRfZnJvbnQgKyBkZXZwcml2LT5haV9uX2NoYW47CisJdW5zaWduZWQgaW50IHJhd19zY2FubGVuID0gZGV2cHJpdi0+YWlfYWRkX2Zyb250ICsgZGV2cHJpdi0+YWlfbl9jaGFuICsKKwkJZGV2cHJpdi0+YWlfYWRkX2JhY2s7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgeworCQlpZiAoZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyA+PSBzdGFydF9wb3MgJiYKKwkJCWRldnByaXYtPmFpX2FjdF9kbWFwb3MgPCBzdG9wX3BvcykgeworCQkJZG1hX2J1ZmZlcltqKytdID0gZG1hX2J1ZmZlcltpXTsKKwkJfQorCQlkZXZwcml2LT5haV9hY3RfZG1hcG9zKys7CisJCWRldnByaXYtPmFpX2FjdF9kbWFwb3MgJT0gcmF3X3NjYW5sZW47CisJfQorCisJcmV0dXJuIGo7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdW5zaWduZWQgaW50IG1vdmVfYmxvY2tfZnJvbV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzaG9ydCAqIGRtYV9idWZmZXIsIHVuc2lnbmVkIGludCBudW1fc2FtcGxlcykKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzOworCisJbnVtX3NhbXBsZXMgPSBkZWZyYWdtZW50X2RtYV9idWZmZXIoZGV2LCBzLCBkbWFfYnVmZmVyLCBudW1fc2FtcGxlcyk7CisJZGV2cHJpdi0+YWlfYWN0X3NjYW4gKz0KKwkJKHMtPmFzeW5jLT5jdXJfY2hhbiArIG51bV9zYW1wbGVzKSAvIGRldnByaXYtPmFpX25fc2NhbmxlbjsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gKz0gbnVtX3NhbXBsZXM7CisJcy0+YXN5bmMtPmN1cl9jaGFuICU9IGRldnByaXYtPmFpX25fc2NhbmxlbjsKKwludW1fYnl0ZXMgPQorCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRtYV9idWZmZXIsCisJCW51bV9zYW1wbGVzICogc2l6ZW9mKHNob3J0KSk7CisJaWYgKG51bV9ieXRlcyA8IG51bV9zYW1wbGVzICogc2l6ZW9mKHNob3J0KSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGNoYXIgcGNpOTExOF9kZWNvZGVfZXJyb3Jfc3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgY2hhciBtKQoreworCWlmIChtICYgMHgxMDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBGSUZPIEZ1bGwgc3RhdHVzIChGYXRhbCBFcnJvciEpIik7CisJCWRldnByaXYtPmFpX21hc2tlcnIgJj0gfjB4MTAwTDsKKwl9CisJaWYgKG0gJiAweDAwOCkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIkEvRCBCdXJzdCBNb2RlIE92ZXJydW4gU3RhdHVzIChGYXRhbCBFcnJvciEpIik7CisJCWRldnByaXYtPmFpX21hc2tlcnIgJj0gfjB4MDA4TDsKKwl9CisJaWYgKG0gJiAweDAwNCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIE92ZXIgU3BlZWQgU3RhdHVzIChXYXJuaW5nISkiKTsKKwkJZGV2cHJpdi0+YWlfbWFza2VyciAmPSB+MHgwMDRMOworCX0KKwlpZiAobSAmIDB4MDAyKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgT3ZlcnJ1biBTdGF0dXMgKEZhdGFsIEVycm9yISkiKTsKKwkJZGV2cHJpdi0+YWlfbWFza2VyciAmPSB+MHgwMDJMOworCX0KKwlpZiAobSAmIGRldnByaXYtPmFpX21hc2toYXJkZXJyKSB7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwY2k5MTE4X2FpX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5faW5kZXgpCit7CisJdW5zaWduZWQgaW50IGksIG51bV9zYW1wbGVzID0gbnVtX2J5dGVzIC8gc2l6ZW9mKHNob3J0KTsKKwlzaG9ydCAqYXJyYXkgPSBkYXRhOworCisJZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsKKwkJaWYgKGRldnByaXYtPnVzZWRtYSkKKwkJCWFycmF5W2ldID0gYmUxNl90b19jcHUoYXJyYXlbaV0pOworCQlpZiAoZGV2cHJpdi0+YWkxNmJpdHMpIHsKKwkJCWFycmF5W2ldIF49IDB4ODAwMDsKKwkJfSBlbHNlIHsKKwkJCWFycmF5W2ldID0gKGFycmF5W2ldID4+IDQpICYgMHgwZmZmOworCQl9CisJfQorfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgaW50ZXJydXB0X3BjaTkxMThfYWlfb25lc2FtcGxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgc2hvcnQgaW50X2Fkc3RhdCwgdW5zaWduZWQgaW50IGludF9hbWNjLAorCXVuc2lnbmVkIHNob3J0IGludF9kYXEpCit7CisJcmVnaXN0ZXIgc2hvcnQgc2FtcGw7CisKKwlzLT5hc3luYy0+ZXZlbnRzID0gMDsKKworCWlmIChpbnRfYWRzdGF0ICYgZGV2cHJpdi0+YWlfbWFza2VycikKKwkJaWYgKHBjaTkxMThfZGVjb2RlX2Vycm9yX3N0YXR1cyhkZXYsIHMsIGludF9hZHN0YXQpKQorCQkJcmV0dXJuOworCisJc2FtcGwgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEX0RBVEEpOworCisjaWZkZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCisJaWYgKGRldnByaXYtPmFpMTZiaXRzID09IDApIHsKKwkJaWYgKChzYW1wbCAmIDB4MDAwZikgIT0gZGV2cHJpdi0+Y2hhbmxpc3Rbcy0+YXN5bmMtPmN1cl9jaGFuXSkgewkvLyBkYXRhIGRyb3BvdXQhCisJCQlydF9wcmludGsKKwkJCQkoImNvbWVkaTogQS9EICBTQU1QTCAtIGRhdGEgZHJvcG91dDogcmVjZWl2ZWQgY2hhbm5lbCAlZCwgZXhwZWN0ZWQgJWQhXG4iLAorCQkJCXNhbXBsICYgMHgwMDBmLAorCQkJCWRldnByaXYtPmNoYW5saXN0W3MtPmFzeW5jLT5jdXJfY2hhbl0pOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJcmV0dXJuOworCQl9CisJfQorI2VuZGlmCisJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBzYW1wbCk7CisJcy0+YXN5bmMtPmN1cl9jaGFuKys7CisJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX3NjYW5sZW4pIHsJLyogb25lIHNjYW4gZG9uZSAqLworCQlzLT5hc3luYy0+Y3VyX2NoYW4gJT0gZGV2cHJpdi0+YWlfbl9zY2FubGVuOworCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOworCQlpZiAoIShkZXZwcml2LT5haV9uZXZlcmVuZGluZykpCisJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCXBjaTkxMThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJfQorCX0KKworCWlmIChzLT5hc3luYy0+ZXZlbnRzKQorCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIGludGVycnVwdF9wY2k5MTE4X2FpX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIHNob3J0IGludF9hZHN0YXQsIHVuc2lnbmVkIGludCBpbnRfYW1jYywKKwl1bnNpZ25lZCBzaG9ydCBpbnRfZGFxKQoreworCXVuc2lnbmVkIGludCBuZXh0X2RtYV9idWYsIHNhbXBsZXNpbmJ1Ziwgc2FtcGxzLCBtOworCisJaWYgKGludF9hbWNjICYgTUFTVEVSX0FCT1JUX0lOVCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiQU1DQyBJUlEgLSBNQVNURVIgRE1BIEFCT1JUISIpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCXBjaTkxMThfYWlfY2FuY2VsKGRldiwgcyk7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKGludF9hbWNjICYgVEFSR0VUX0FCT1JUX0lOVCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiQU1DQyBJUlEgLSBUQVJHRVQgRE1BIEFCT1JUISIpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCXBjaTkxMThfYWlfY2FuY2VsKGRldiwgcyk7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKGludF9hZHN0YXQgJiBkZXZwcml2LT5haV9tYXNrZXJyKQorLy8gICAgICBpZiAoaW50X2Fkc3RhdCAmIDB4MTA2KQorCQlpZiAocGNpOTExOF9kZWNvZGVfZXJyb3Jfc3RhdHVzKGRldiwgcywgaW50X2Fkc3RhdCkpCisJCQlyZXR1cm47CisKKwlzYW1wbGVzaW5idWYgPSBkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbZGV2cHJpdi0+ZG1hX2FjdGJ1Zl0gPj4gMTsJLy8gbnVtYmVyIG9mIHJlY2VpdmVkIHJlYWwgc2FtcGxlcworLy8gICAgICBEUFJJTlRLKCJkbWFfYWN0YnVmPSVkXG4iLGRldnByaXYtPmRtYV9hY3RidWYpOworCisJaWYgKGRldnByaXYtPmRtYV9kb3VibGVidWYpIHsJLy8gc3dpdGNoIERNQSBidWZmZXJzIGlmIGlzIHVzZWQgZG91YmxlIGJ1ZmZlcmluZworCQluZXh0X2RtYV9idWYgPSAxIC0gZGV2cHJpdi0+ZG1hX2FjdGJ1ZjsKKwkJb3V0bChkZXZwcml2LT5kbWFidWZfaHdbbmV4dF9kbWFfYnVmXSwKKwkJCWRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTVdBUik7CisJCW91dGwoZGV2cHJpdi0+ZG1hYnVmX3VzZV9zaXplW25leHRfZG1hX2J1Zl0sCisJCQlkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01XVEMpOworCQlkZXZwcml2LT5kbWFidWZfdXNlZF9zaXplW25leHRfZG1hX2J1Zl0gPQorCQkJZGV2cHJpdi0+ZG1hYnVmX3VzZV9zaXplW25leHRfZG1hX2J1Zl07CisJCWlmIChkZXZwcml2LT5haV9kbyA9PSA0KQorCQkJaW50ZXJydXB0X3BjaTkxMThfYWlfbW9kZTRfc3dpdGNoKGRldik7CisJfQorCisJaWYgKHNhbXBsZXNpbmJ1ZikgeworCQltID0gZGV2cHJpdi0+YWlfZGF0YV9sZW4gPj4gMTsJLy8gaG93IG1hbnkgc2FtcGxlcyBpcyB0byBlbmQgb2YgYnVmZmVyCisvLyAgICAgICAgICAgICAgRFBSSU5USygic2FtcHM9JWQgbT0lZCAlZCAlZFxuIixzYW1wbGVzaW5idWYsbSxzLT5hc3luYy0+YnVmX2ludF9jb3VudCxzLT5hc3luYy0+YnVmX2ludF9wdHIpOworCQlzYW1wbHMgPSBtOworCQltb3ZlX2Jsb2NrX2Zyb21fZG1hKGRldiwgcywKKwkJCWRldnByaXYtPmRtYWJ1Zl92aXJ0W2RldnByaXYtPmRtYV9hY3RidWZdLAorCQkJc2FtcGxlc2luYnVmKTsKKwkJbSA9IG0gLSBzYW1wbHM7CS8vIG09IGhvdyBtYW55IHNhbXBsZXMgd2FzIHRyYW5zZmVyZWQKKwl9CisvLyAgICAgIERQUklOVEsoIllZWVxuIik7CisKKwlpZiAoIWRldnByaXYtPmFpX25ldmVyZW5kaW5nKQorCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCisJaWYgKGRldnByaXYtPmRtYV9kb3VibGVidWYpIHsJLy8gc3dpdGNoIGRtYSBidWZmZXJzCisJCWRldnByaXYtPmRtYV9hY3RidWYgPSAxIC0gZGV2cHJpdi0+ZG1hX2FjdGJ1ZjsKKwl9IGVsc2UgewkJLy8gcmVzdGFydCBETUEgaWYgaXMgbm90IHVzZWQgZG91YmxlIGJ1ZmZlcmluZworCQlvdXRsKGRldnByaXYtPmRtYWJ1Zl9od1swXSwKKwkJCWRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTVdBUik7CisJCW91dGwoZGV2cHJpdi0+ZG1hYnVmX3VzZV9zaXplWzBdLAorCQkJZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NV1RDKTsKKwkJaWYgKGRldnByaXYtPmFpX2RvID09IDQpCisJCQlpbnRlcnJ1cHRfcGNpOTExOF9haV9tb2RlNF9zd2l0Y2goZGV2KTsKKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNpOTExOChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXVuc2lnbmVkIGludCBpbnRfZGFxID0gMCwgaW50X2FtY2MsIGludF9hZHN0YXQ7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpCisJCXJldHVybiBJUlFfTk9ORTsJLy8gbm90IGZ1bGx5IGluaXRpYWxpemVkCisKKwlpbnRfZGFxID0gaW5sKGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRTUkMpICYgMHhmOwkvLyBnZXQgSVJRIHJlYXNvbnMgZnJvbSBjYXJkCisJaW50X2FtY2MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBnZXQgSU5UIHJlZ2lzdGVyIGZyb20gQU1DQyBjaGlwCisKKy8vICAgICAgRFBSSU5USygiSU5UIGRhcT0weCUwMXggYW1jYz0weCUwOHggTVdBUj0weCUwOHggTVdUQz0weCUwOHggQURTVEFUPTB4JTAyeCBhaV9kbz0lZFxuIiwgaW50X2RhcSwgaW50X2FtY2MsIGlubChkZXZwcml2LT5pb2Jhc2VfYStBTUNDX09QX1JFR19NV0FSKSwgaW5sKGRldnByaXYtPmlvYmFzZV9hK0FNQ0NfT1BfUkVHX01XVEMpLCBpbncoZGV2LT5pb2Jhc2UrUENJOTExOF9BRFNUQVQpJjB4MWZmLGRldnByaXYtPmFpX2RvKTsKKworCWlmICgoIWludF9kYXEpICYmICghKGludF9hbWNjICYgQU5ZX1M1OTNYX0lOVCkpKQorCQlyZXR1cm4gSVJRX05PTkU7CS8vIGludGVycnVwdCBmcm9tIG90aGVyIHNvdXJjZQorCisJb3V0bChpbnRfYW1jYyB8IDB4MDBmZjAwMDAsIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsJLy8gc2h1dGRvd24gSVJRIHJlYXNvbnMgaW4gQU1DQworCisJaW50X2Fkc3RhdCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTkxMThfQURTVEFUKSAmIDB4MWZmOwkvLyBnZXQgU1RBVFVTIHJlZ2lzdGVyCisKKwlpZiAoZGV2cHJpdi0+YWlfZG8pIHsKKwkJaWYgKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wKQorCQkJaWYgKChpbnRfYWRzdGF0ICYgQWRTdGF0dXNfRFRIKSAmJiAoaW50X2RhcSAmIEludF9EVHJnKSkgewkvLyBzdGFydCBzdG9wIG9mIG1lYXN1cmUKKwkJCQlpZiAoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJiBTVEFSVF9BSV9FWFQpIHsKKwkJCQkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJj0KKwkJCQkJCX5TVEFSVF9BSV9FWFQ7CisJCQkJCWlmICghKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wICYKKwkJCQkJCQlTVE9QX0FJX0VYVCkpCisJCQkJCQlwY2k5MTE4X2V4dHRyZ19kZWwoZGV2LCBFWFRUUkdfQUkpOwkvLyBkZWFjdGl2YXRlIEVYVCB0cmlnZ2VyCisJCQkJCXN0YXJ0X3BhY2VyKGRldiwgZGV2cHJpdi0+YWlfZG8sIGRldnByaXYtPmFpX2Rpdmlzb3IxLCBkZXZwcml2LT5haV9kaXZpc29yMik7CS8vIHN0YXJ0IHBhY2VyCisJCQkJCW91dGwoZGV2cHJpdi0+QWRDb250cm9sUmVnLAorCQkJCQkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCWFpMTJfc3RhcnRzdG9wICYgU1RPUF9BSV9FWFQpIHsKKwkJCQkJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wICY9CisJCQkJCQkJflNUT1BfQUlfRVhUOworCQkJCQkJcGNpOTExOF9leHR0cmdfZGVsKGRldiwgRVhUVFJHX0FJKTsJLy8gZGVhY3RpdmF0ZSBFWFQgdHJpZ2dlcgorCQkJCQkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOwkvL3dlbGwsIG9uIG5leHQgaW50ZXJydXB0IGZyb20gRE1BL0VPQyBtZWFzdXJlIHdpbGwgc3RvcAorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCShkZXZwcml2LT5pbnRfYWlfZnVuYykgKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCwgaW50X2Fkc3RhdCwKKwkJCWludF9hbWNjLCBpbnRfZGFxKTsKKworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCWlmICh0cmlnbnVtICE9IGRldnByaXYtPmFpX2ludHRyaWdfc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJj0gflNUQVJUX0FJX0lOVDsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKKwlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOworCWlmIChkZXZwcml2LT5haV9kbyAhPSAzKSB7CisJCXN0YXJ0X3BhY2VyKGRldiwgZGV2cHJpdi0+YWlfZG8sIGRldnByaXYtPmFpX2Rpdmlzb3IxLAorCQkJZGV2cHJpdi0+YWlfZGl2aXNvcjIpOworCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX1NvZnRHOworCX0KKwlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIGRpdmlzb3IxLCBkaXZpc29yMjsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUIHwgVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwlpZiAoZGV2cHJpdi0+bWFzdGVyKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUIHwgVFJJR19GT0xMT1c7CisJfSBlbHNlIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKKwl9CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJaWYgKGRldnByaXYtPm1hc3RlcikgeworCQljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVCB8IFRSSUdfTk9XOworCX0gZWxzZSB7CisJCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCX0KKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORSB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYKKwkJY21kLT5zdGFydF9zcmMgIT0gVFJJR19JTlQgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19JTlQgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjID0gVFJJR19GT0xMT1c7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKSB7CisJCWNtZC0+Y29udmVydF9zcmMgPSBUUklHX1RJTUVSOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkgeworCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJgorCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYKKwkJY21kLT5zdG9wX3NyYyAhPSBUUklHX0lOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUKSB7CisJCWNtZC0+c3RvcF9zcmMgPSBUUklHX0NPVU5UOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgeworCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19JTlQgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0lOVCkgeworCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoVFJJR19USU1FUiB8IFRSSUdfRVhUKSkgJiYKKwkJKCEoY21kLT5jb252ZXJ0X3NyYyAmIChUUklHX1RJTUVSIHwgVFJJR19OT1cpKSkpIHsKKwkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CisJCWVycisrOworCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgJiYKKwkJKCEoY21kLT5jb252ZXJ0X3NyYyAmIChUUklHX1RJTUVSIHwgVFJJR19FWFQpKSkpIHsKKwkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUICYmIGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJY21kLT5zdG9wX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICYgKFRSSUdfTk9XIHwgVFJJR19FWFQpKQorCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJY21kLT5zdGFydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICYgKFRSSUdfRk9MTE9XIHwgVFJJR19FWFQpKQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgJiYKKwkJKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgJiYgKGNtZC0+c2Nhbl9lbmRfYXJnID09IDEpKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPSBUUklHX0ZPTExPVzsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQkJZXJyKys7CisJCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJCWlmIChjbWQtPnNjYW5fZW5kX2FyZyA+IDY1NTM1KSB7CisJCQkJY21kLT5zY2FuX2VuZF9hcmcgPSA2NTUzNTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgJiAoVFJJR19USU1FUiB8IFRSSUdfTk9XKSkKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCQllcnIrKzsKKwkJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiB0aGlzX2JvYXJkLT5uX2FpY2hhbmxpc3QpIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbmxpc3Q7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyA8IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCWlmICgoY21kLT5zY2FuX2VuZF9hcmcgJSBjbWQtPmNoYW5saXN0X2xlbikpIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPQorCQkJY21kLT5jaGFubGlzdF9sZW4gKiAoY21kLT5zY2FuX2VuZF9hcmcgLworCQkJY21kLT5jaGFubGlzdF9sZW4pOworCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKy8vICAgICAgICAgICAgICBydF9wcmludGsoIlMxIHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsY21kLT5zY2FuX2JlZ2luX2FyZyxjbWQtPmNvbnZlcnRfYXJnKTsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiUzIgdGltZXIxPSV1IHRpbWVyMj0ldVxuIixjbWQtPnNjYW5fYmVnaW5fYXJnLGNtZC0+Y29udmVydF9hcmcpOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjICYgKFRSSUdfVElNRVIgfCBUUklHX05PVykpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiczEgdGltZXIxPSV1IHRpbWVyMj0ldVxuIixjbWQtPnNjYW5fYmVnaW5fYXJnLGNtZC0+Y29udmVydF9hcmcpOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSCisJCQkmJiBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA9PSAwKSB7CisJCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJCQl0aGlzX2JvYXJkLT5haV9uc19taW4gKgorCQkJCQkoY21kLT5zY2FuX2VuZF9hcmcgKyAyKSkgeworCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQkJCXRoaXNfYm9hcmQtPmFpX25zX21pbiAqCisJCQkJCQkoY21kLT5zY2FuX2VuZF9hcmcgKyAyKTsKKy8vICAgICAgICAgICAgICBydF9wcmludGsoInMyIHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsY21kLT5zY2FuX2JlZ2luX2FyZyxjbWQtPmNvbnZlcnRfYXJnKTsKKwkJCQkJZXJyKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbikgeworCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQkJCWNtZC0+Y29udmVydF9hcmcgKgorCQkJCQkJY21kLT5jaGFubGlzdF9sZW47CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCJzMyB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLGNtZC0+c2Nhbl9iZWdpbl9hcmcsY21kLT5jb252ZXJ0X2FyZyk7CisJCQkJCWVycisrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJaWYgKGNtZC0+Y2hhbmxpc3QpCisJCWlmICghY2hlY2tfY2hhbm5lbF9saXN0KGRldiwgcywgY21kLT5jaGFubGlzdF9sZW4sCisJCQkJY21kLT5jaGFubGlzdCwgMCwgMCkpCisJCQlyZXR1cm4gNTsJLy8gaW5jb3JyZWN0IGNoYW5uZWxzIGxpc3QKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBDb21wdXRlX2FuZF9zZXR1cF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGRtYWxlbjAsIGRtYWxlbjEsIGk7CisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBCR046IENvbXB1dGVfYW5kX3NldHVwX2RtYSgpXG4iKTsKKwlkbWFsZW4wID0gZGV2cHJpdi0+ZG1hYnVmX3NpemVbMF07CisJZG1hbGVuMSA9IGRldnByaXYtPmRtYWJ1Zl9zaXplWzFdOworCURQUklOVEsoIjEgZG1hbGVuMD0lZCBkbWFsZW4xPSVkIGFpX2RhdGFfbGVuPSVkXG4iLCBkbWFsZW4wLCBkbWFsZW4xLAorCQlkZXZwcml2LT5haV9kYXRhX2xlbik7CisJLy8gaXNuJ3Qgb3V0cHV0IGJ1ZmYgc21hbGxlciB0aGF0IG91ciBETUEgYnVmZj8KKwlpZiAoZG1hbGVuMCA+IChkZXZwcml2LT5haV9kYXRhX2xlbikpIHsKKwkJZG1hbGVuMCA9IGRldnByaXYtPmFpX2RhdGFfbGVuICYgfjNMOwkvLyBhbGxpZ24gdG8gMzJiaXQgZG93bgorCX0KKwlpZiAoZG1hbGVuMSA+IChkZXZwcml2LT5haV9kYXRhX2xlbikpIHsKKwkJZG1hbGVuMSA9IGRldnByaXYtPmFpX2RhdGFfbGVuICYgfjNMOwkvLyBhbGxpZ24gdG8gMzJiaXQgZG93bgorCX0KKwlEUFJJTlRLKCIyIGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsIGRtYWxlbjEpOworCisJLy8gd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/CisJaWYgKGRldnByaXYtPmFpX2ZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQlpZiAoZG1hbGVuMCA8IChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpKSB7CisJCQkvLyB1ZmYsIHRvbyBzaG9ydCBETUEgYnVmZmVyLCBkaXNhYmxlIEVPUyBzdXBwb3J0IQorCQkJZGV2cHJpdi0+YWlfZmxhZ3MgJj0gKH5UUklHX1dBS0VfRU9TKTsKKwkJCXJ0X3ByaW50aworCQkJCSgiY29tZWRpJWQ6IFdBUjogRE1BMCBidWYgdG9vIHNob3J0LCBjYW5uJ3Qgc3VwcG9ydCBUUklHX1dBS0VfRU9TICglZDwlZClcbiIsCisJCQkJZGV2LT5taW5vciwgZG1hbGVuMCwKKwkJCQlkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpOworCQl9IGVsc2UgeworCQkJLy8gc2hvcnQgZmlyc3QgRE1BIGJ1ZmZlciB0byBvbmUgc2NhbgorCQkJZG1hbGVuMCA9IGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMTsKKwkJCURQUklOVEsoIjIxIGRtYWxlbjA9JWQgYWlfbl9yZWFsc2Nhbmxlbj0lZCB1c2Vlb3NoYW5kbGU9JWRcbiIsIGRtYWxlbjAsIGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sIGRldnByaXYtPnVzZWVvc2hhbmRsZSk7CisJCQlpZiAoZGV2cHJpdi0+dXNlZW9zaGFuZGxlKQorCQkJCWRtYWxlbjAgKz0gMjsKKwkJCWlmIChkbWFsZW4wIDwgNCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBFUlI6IERNQTAgYnVmIGxlbiBidWc/ICglZDw0KVxuIiwKKwkJCQkJZGV2LT5taW5vciwgZG1hbGVuMCk7CisJCQkJZG1hbGVuMCA9IDQ7CisJCQl9CisJCX0KKwl9CisJaWYgKGRldnByaXYtPmFpX2ZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQlpZiAoZG1hbGVuMSA8IChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpKSB7CisJCQkvLyB1ZmYsIHRvbyBzaG9ydCBETUEgYnVmZmVyLCBkaXNhYmxlIEVPUyBzdXBwb3J0IQorCQkJZGV2cHJpdi0+YWlfZmxhZ3MgJj0gKH5UUklHX1dBS0VfRU9TKTsKKwkJCXJ0X3ByaW50aworCQkJCSgiY29tZWRpJWQ6IFdBUjogRE1BMSBidWYgdG9vIHNob3J0LCBjYW5uJ3Qgc3VwcG9ydCBUUklHX1dBS0VfRU9TICglZDwlZClcbiIsCisJCQkJZGV2LT5taW5vciwgZG1hbGVuMSwKKwkJCQlkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpOworCQl9IGVsc2UgeworCQkJLy8gc2hvcnQgc2Vjb25kIERNQSBidWZmZXIgdG8gb25lIHNjYW4KKwkJCWRtYWxlbjEgPSBkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDE7CisJCQlEUFJJTlRLKCIyMiBkbWFsZW4xPSVkIGFpX25fcmVhbHNjYW5sZW49JWQgdXNlZW9zaGFuZGxlPSVkXG4iLCBkbWFsZW4xLCBkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuLCBkZXZwcml2LT51c2Vlb3NoYW5kbGUpOworCQkJaWYgKGRldnByaXYtPnVzZWVvc2hhbmRsZSkKKwkJCQlkbWFsZW4xIC09IDI7CisJCQlpZiAoZG1hbGVuMSA8IDQpIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCJjb21lZGklZDogRVJSOiBETUExIGJ1ZiBsZW4gYnVnPyAoJWQ8NClcbiIsCisJCQkJCWRldi0+bWlub3IsIGRtYWxlbjEpOworCQkJCWRtYWxlbjEgPSA0OworCQkJfQorCQl9CisJfQorCisJRFBSSU5USygiMyBkbWFsZW4wPSVkIGRtYWxlbjE9JWQgXG4iLCBkbWFsZW4wLCBkbWFsZW4xKTsKKwkvLyB0cmFuc2ZlciB3aXRob3V0IFRSSUdfV0FLRV9FT1MKKwlpZiAoIShkZXZwcml2LT5haV9mbGFncyAmIFRSSUdfV0FLRV9FT1MpKSB7CisJCS8vIGlmIGl0J3MgcG9zc2libGUgdGhlbiBhbGxpZ24gRE1BIGJ1ZmZlcnMgdG8gbGVuZ3RoIG9mIHNjYW4KKwkJaSA9IGRtYWxlbjA7CisJCWRtYWxlbjAgPQorCQkJKGRtYWxlbjAgLyAoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxKSkgKgorCQkJKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSk7CisJCWRtYWxlbjAgJj0gfjNMOworCQlpZiAoIWRtYWxlbjApCisJCQlkbWFsZW4wID0gaTsJLy8gdWZmLiB2ZXJ5IGxvbmcgc2Nhbj8KKwkJaSA9IGRtYWxlbjE7CisJCWRtYWxlbjEgPQorCQkJKGRtYWxlbjEgLyAoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxKSkgKgorCQkJKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSk7CisJCWRtYWxlbjEgJj0gfjNMOworCQlpZiAoIWRtYWxlbjEpCisJCQlkbWFsZW4xID0gaTsJLy8gdWZmLiB2ZXJ5IGxvbmcgc2Nhbj8KKwkJLy8gaWYgbWVhc3VyZSBpc24ndCBuZXZlcmVuZGluZyB0aGVuIHRlc3QsIGlmIGl0IHdob2xlIGZpdHMgaW50byBvbmUgb3IgdHdvIERNQSBidWZmZXJzCisJCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKKwkJCS8vIGZpdHMgd2hvbGUgbWVhc3VyZSBpbnRvIG9uZSBETUEgYnVmZmVyPworCQkJaWYgKGRtYWxlbjAgPgorCQkJCSgoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxKSAqCisJCQkJCWRldnByaXYtPmFpX3NjYW5zKSkgeworCQkJCURQUklOVEsoIjMuMCBhaV9uX3JlYWxzY2FubGVuPSVkIGFpX3NjYW5zPSVkIFxuIiwgZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwgZGV2cHJpdi0+YWlfc2NhbnMpOworCQkJCWRtYWxlbjAgPQorCQkJCQkoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxKSAqCisJCQkJCWRldnByaXYtPmFpX3NjYW5zOworCQkJCURQUklOVEsoIjMuMSBkbWFsZW4wPSVkIGRtYWxlbjE9JWQgXG4iLCBkbWFsZW4wLAorCQkJCQlkbWFsZW4xKTsKKwkJCQlkbWFsZW4wICY9IH4zTDsKKwkJCX0gZWxzZSB7CS8vIGZpdHMgd2hvbGUgbWVhc3VyZSBpbnRvIHR3byBETUEgYnVmZmVyPworCQkJCWlmIChkbWFsZW4xID4KKwkJCQkJKChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpICoKKwkJCQkJCWRldnByaXYtPmFpX3NjYW5zIC0gZG1hbGVuMCkpCisJCQkJCWRtYWxlbjEgPQorCQkJCQkJKGRldnByaXYtPgorCQkJCQkJYWlfbl9yZWFsc2NhbmxlbiA8PCAxKSAqCisJCQkJCQlkZXZwcml2LT5haV9zY2FucyAtIGRtYWxlbjA7CisJCQkJRFBSSU5USygiMy4yIGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsCisJCQkJCWRtYWxlbjEpOworCQkJCWRtYWxlbjEgJj0gfjNMOworCQkJfQorCQl9CisJfQorCisJRFBSSU5USygiNCBkbWFsZW4wPSVkIGRtYWxlbjE9JWQgXG4iLCBkbWFsZW4wLCBkbWFsZW4xKTsKKworCS8vIHRoZXNlIERNQSBidWZmZXIgc2l6ZSB3ZSdsbCBiZSB1c2VkCisJZGV2cHJpdi0+ZG1hX2FjdGJ1ZiA9IDA7CisJZGV2cHJpdi0+ZG1hYnVmX3VzZV9zaXplWzBdID0gZG1hbGVuMDsKKwlkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbMV0gPSBkbWFsZW4xOworCisJRFBSSU5USygiNSBkbWFsZW4wPSVkIGRtYWxlbjE9JWQgXG4iLCBkbWFsZW4wLCBkbWFsZW4xKTsKKyNpZiAwCisJaWYgKGRldnByaXYtPmFpX25fc2NhbmxlbiA8IHRoaXNfYm9hcmQtPmhhbGZfZmlmb19zaXplKSB7CisJCWRldnByaXYtPmRtYWJ1Zl9wYW5pY19zaXplWzBdID0KKwkJCSh0aGlzX2JvYXJkLT5oYWxmX2ZpZm9fc2l6ZSAvIGRldnByaXYtPmFpX25fc2NhbmxlbiArCisJCQkxKSAqIGRldnByaXYtPmFpX25fc2NhbmxlbiAqIHNpemVvZihzaG9ydCk7CisJCWRldnByaXYtPmRtYWJ1Zl9wYW5pY19zaXplWzFdID0KKwkJCSh0aGlzX2JvYXJkLT5oYWxmX2ZpZm9fc2l6ZSAvIGRldnByaXYtPmFpX25fc2NhbmxlbiArCisJCQkxKSAqIGRldnByaXYtPmFpX25fc2NhbmxlbiAqIHNpemVvZihzaG9ydCk7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+ZG1hYnVmX3BhbmljX3NpemVbMF0gPQorCQkJKGRldnByaXYtPmFpX25fc2NhbmxlbiA8PCAxKSAlIGRldnByaXYtPmRtYWJ1Zl9zaXplWzBdOworCQlkZXZwcml2LT5kbWFidWZfcGFuaWNfc2l6ZVsxXSA9CisJCQkoZGV2cHJpdi0+YWlfbl9zY2FubGVuIDw8IDEpICUgZGV2cHJpdi0+ZG1hYnVmX3NpemVbMV07CisJfQorI2VuZGlmCisKKwlvdXRsKGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01DU1IpICYgKH5FTl9BMlBfVFJBTlNGRVJTKSwgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NQ1NSKTsJLy8gc3RvcCBETUEKKwlvdXRsKGRldnByaXYtPmRtYWJ1Zl9od1swXSwgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NV0FSKTsKKwlvdXRsKGRldnByaXYtPmRtYWJ1Zl91c2Vfc2l6ZVswXSwgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NV1RDKTsKKwkvLyBpbml0IERNQSB0cmFuc2ZlcgorCW91dGwoMHgwMDAwMDAwMCB8IEFJTlRfV1JJVEVfQ09NUEwsCisJCWRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKy8vICAgICAgb3V0bCgweDAyMDAwMDAwfEFJTlRfV1JJVEVfQ09NUEwsIGRldnByaXYtPmlvYmFzZV9hK0FNQ0NfT1BfUkVHX0lOVENTUik7CisKKwlvdXRsKGlubChkZXZwcml2LT5pb2Jhc2VfYSArCisJCQlBTUNDX09QX1JFR19NQ1NSKSB8IFJFU0VUX0EyUF9GTEFHUyB8IEEyUF9ISV9QUklPUklUWSB8CisJCUVOX0EyUF9UUkFOU0ZFUlMsIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTUNTUik7CisJb3V0bChpbmwoZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpIHwgRU5fQTJQX1RSQU5TRkVSUywgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBhbGxvdyBidXMgbWFzdGVyaW5nCisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBFTkQ6IENvbXB1dGVfYW5kX3NldHVwX2RtYSgpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9haV9kb2NtZF9zYW1wbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEJHTjogcGNpOTExOF9haV9kb2NtZF9zYW1wbCglZCwpIFslZF1cbiIsCisJCWRldi0+bWlub3IsIGRldnByaXYtPmFpX2RvKTsKKwlzd2l0Y2ggKGRldnByaXYtPmFpX2RvKSB7CisJY2FzZSAxOgorCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX1RtclRyOworCQlicmVhazsKKwljYXNlIDI6CisJCWNvbWVkaV9lcnJvcihkZXYsICJwY2k5MTE4X2FpX2RvY21kX3NhbXBsKCkgbW9kZSAyIGJ1ZyFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwljYXNlIDM6CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfRXh0TTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQljb21lZGlfZXJyb3IoZGV2LCAicGNpOTExOF9haV9kb2NtZF9zYW1wbCgpIG1vZGUgNCBidWchXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJwY2k5MTE4X2FpX2RvY21kX3NhbXBsKCkgbW9kZSBudW1iZXIgYnVnIVxuIik7CisJCXJldHVybiAtRUlPOworCX07CisKKwlkZXZwcml2LT5pbnRfYWlfZnVuYyA9IGludGVycnVwdF9wY2k5MTE4X2FpX29uZXNhbXBsZTsJLy90cmFuc2ZlciBmdW5jdGlvbgorCisJaWYgKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wKQorCQlwY2k5MTE4X2V4dHRyZ19hZGQoZGV2LCBFWFRUUkdfQUkpOwkvLyBhY3RpdmF0ZSBFWFQgdHJpZ2dlcgorCisJaWYgKChkZXZwcml2LT5haV9kbyA9PSAxKSB8fCAoZGV2cHJpdi0+YWlfZG8gPT0gMikpCisJCWRldnByaXYtPkludENvbnRyb2xSZWcgfD0gSW50X1RpbWVyOworCisJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9JbnQ7CisKKwlvdXRsKGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUikgfCAweDFmMDAsIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsJLy8gYWxsb3cgSU5UIGluIEFNQ0MKKworCWlmICghKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wICYgKFNUQVJUX0FJX0VYVCB8IFNUQVJUX0FJX0lOVCkpKSB7CisJCW91dGwoZGV2cHJpdi0+SW50Q29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVENUUkwpOworCQlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOworCQlpZiAoZGV2cHJpdi0+YWlfZG8gIT0gMykgeworCQkJc3RhcnRfcGFjZXIoZGV2LCBkZXZwcml2LT5haV9kbywgZGV2cHJpdi0+YWlfZGl2aXNvcjEsCisJCQkJZGV2cHJpdi0+YWlfZGl2aXNvcjIpOworCQkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9Tb2Z0RzsKKwkJfQorCQlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKKwl9CisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBFTkQ6IHBjaTkxMThfYWlfZG9jbWRfc2FtcGwoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfYWlfZG9jbWRfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogQkdOOiBwY2k5MTE4X2FpX2RvY21kX2RtYSglZCwpIFslZCwlZF1cbiIsCisJCWRldi0+bWlub3IsIGRldnByaXYtPmFpX2RvLCBkZXZwcml2LT51c2VkbWEpOworCUNvbXB1dGVfYW5kX3NldHVwX2RtYShkZXYpOworCisJc3dpdGNoIChkZXZwcml2LT5haV9kbykgeworCWNhc2UgMToKKwkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9CisJCQkoKEFkQ29udHJvbF9UbXJUciB8IEFkQ29udHJvbF9EbWEpICYgMHhmZik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9CisJCQkoKEFkQ29udHJvbF9UbXJUciB8IEFkQ29udHJvbF9EbWEpICYgMHhmZik7CisJCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPQorCQkJQWRGdW5jdGlvbl9QRFRyZyB8IEFkRnVuY3Rpb25fUEVUcmcgfCBBZEZ1bmN0aW9uX0JNIHwKKwkJCUFkRnVuY3Rpb25fQlM7CisJCWlmIChkZXZwcml2LT51c2Vzc2ggJiYgKCFkZXZwcml2LT5zb2Z0c3NoZGVsYXkpKQorCQkJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyB8PSBBZEZ1bmN0aW9uX0JTU0g7CisJCW91dGwoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0JVUlNUKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0KKwkJCSgoQWRDb250cm9sX0V4dE0gfCBBZENvbnRyb2xfRG1hKSAmIDB4ZmYpOworCQlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnID0gQWRGdW5jdGlvbl9QRFRyZyB8IEFkRnVuY3Rpb25fUEVUcmc7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9CisJCQkoKEFkQ29udHJvbF9UbXJUciB8IEFkQ29udHJvbF9EbWEpICYgMHhmZik7CisJCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPQorCQkJQWRGdW5jdGlvbl9QRFRyZyB8IEFkRnVuY3Rpb25fUEVUcmcgfCBBZEZ1bmN0aW9uX0FNOworCQlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOworCQlvdXRsKDB4MzAsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKwkJb3V0bCgoZGV2cHJpdi0+ZG1hYnVmX2h3WzBdID4+IDEpICYgMHhmZiwKKwkJCWRldi0+aW9iYXNlICsgUENJOTExOF9DTlQwKTsKKwkJb3V0bCgoZGV2cHJpdi0+ZG1hYnVmX2h3WzBdID4+IDkpICYgMHhmZiwKKwkJCWRldi0+aW9iYXNlICsgUENJOTExOF9DTlQwKTsKKwkJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyB8PSBBZEZ1bmN0aW9uX1N0YXJ0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAicGNpOTExOF9haV9kb2NtZF9kbWEoKSBtb2RlIG51bWJlciBidWchXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfTsKKworCWlmIChkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCkgeworCQlwY2k5MTE4X2V4dHRyZ19hZGQoZGV2LCBFWFRUUkdfQUkpOwkvLyBhY3RpdmF0ZSBFWFQgdHJpZ2dlcgorCX0KKworCWRldnByaXYtPmludF9haV9mdW5jID0gaW50ZXJydXB0X3BjaTkxMThfYWlfZG1hOwkvL3RyYW5zZmVyIGZ1bmN0aW9uCisKKwlvdXRsKDB4MDIwMDAwMDAgfCBBSU5UX1dSSVRFX0NPTVBMLAorCQlkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisKKwlpZiAoIShkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmIChTVEFSVF9BSV9FWFQgfCBTVEFSVF9BSV9JTlQpKSkgeworCQlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOworCQlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKKwkJaWYgKGRldnByaXYtPmFpX2RvICE9IDMpIHsKKwkJCXN0YXJ0X3BhY2VyKGRldiwgZGV2cHJpdi0+YWlfZG8sIGRldnByaXYtPmFpX2Rpdmlzb3IxLAorCQkJCWRldnByaXYtPmFpX2Rpdmlzb3IyKTsKKwkJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfU29mdEc7CisJCX0KKwkJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsKKwl9CisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBCR046IHBjaTkxMThfYWlfZG9jbWRfZG1hKClcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgYWRkY2hhbnMgPSAwOworCWludCByZXQgPSAwOworCisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogQkdOOiBwY2k5MTE4X2FpX2NtZCglZCwpXG4iLCBkZXYtPm1pbm9yKTsKKwlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCA9IDA7CisJZGV2cHJpdi0+YWlfZmxhZ3MgPSBjbWQtPmZsYWdzOworCWRldnByaXYtPmFpX25fY2hhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCWRldnByaXYtPmFpX25fc2NhbmxlbiA9IGNtZC0+c2Nhbl9lbmRfYXJnOworCWRldnByaXYtPmFpX2NoYW5saXN0ID0gY21kLT5jaGFubGlzdDsKKwlkZXZwcml2LT5haV9kYXRhID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZjsKKwlkZXZwcml2LT5haV9kYXRhX2xlbiA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzejsKKwlkZXZwcml2LT5haV90aW1lcjEgPSAwOworCWRldnByaXYtPmFpX3RpbWVyMiA9IDA7CisJZGV2cHJpdi0+YWlfYWRkX2Zyb250ID0gMDsKKwlkZXZwcml2LT5haV9hZGRfYmFjayA9IDA7CisJZGV2cHJpdi0+YWlfbWFza2VyciA9IDB4MTBlOworCisJLy8gcHJlcGFyZSBmb3Igc3RhcnQvc3RvcCBjb25kaXRpb25zCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKQorCQlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCB8PSBTVEFSVF9BSV9FWFQ7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAxOworCQlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCB8PSBTVE9QX0FJX0VYVDsKKwl9CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKSB7CisJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wIHw9IFNUQVJUX0FJX0lOVDsKKwkJZGV2cHJpdi0+YWlfaW50dHJpZ19zdGFydCA9IGNtZC0+c3RhcnRfYXJnOworCQlzLT5hc3luYy0+aW50dHJpZyA9IHBjaTkxMThfYWlfaW50dHJpZzsKKwl9CisjaWYgMAorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfSU5UKSB7CisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMTsKKwkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgfD0gU1RPUF9BSV9JTlQ7CisJfQorI2VuZGlmCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKQorCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZyA9IDE7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5haV9zY2FucyA9IDA7CisJfQorCisJLy8gdXNlIHNhbXBsZSZob2xkIHNpZ25hbD8KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVykgeworCQlkZXZwcml2LT51c2Vzc2ggPSAxOworCX0JCQkvLyB5ZXMKKwllbHNlIHsKKwkJZGV2cHJpdi0+dXNlc3NoID0gMDsKKwl9CQkJLy8gbm8KKworCURQUklOVEsoIjEgbmV2ZXJlbmRpbmc9JWQgc2NhbnM9JXUgdXNlc3NoPSVkIGFpX3N0YXJ0c3RvcD0weCUyeFxuIiwKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcsIGRldnByaXYtPmFpX3NjYW5zLCBkZXZwcml2LT51c2Vzc2gsCisJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wKTsKKworCS8vIHVzZSBhZGRpdGlvbmFsIHNhbXBsZSBhdCBlbmQgb2YgZXZlcnkgc2NhbiB0byBzYXRpc3R5IERNQSAzMiBiaXQgdHJhbnNmZXI/CisJZGV2cHJpdi0+YWlfYWRkX2Zyb250ID0gMDsKKwlkZXZwcml2LT5haV9hZGRfYmFjayA9IDA7CisJZGV2cHJpdi0+dXNlZW9zaGFuZGxlID0gMDsKKwlpZiAoZGV2cHJpdi0+bWFzdGVyKSB7CisJCWRldnByaXYtPnVzZWRtYSA9IDE7CisJCWlmICgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpICYmCisJCQkoZGV2cHJpdi0+YWlfbl9zY2FubGVuID09IDEpKSB7CisJCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVykgeworCQkJCWRldnByaXYtPmFpX2FkZF9iYWNrID0gMTsKKwkJCX0KKwkJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJCQlkZXZwcml2LT51c2VkbWEgPSAwOwkvLyB1c2UgSU5UIHRyYW5zZmVyIGlmIHNjYW5saXN0IGhhdmUgb25seSBvbmUgY2hhbm5lbAorCQkJfQorCQl9CisJCWlmICgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpICYmCisJCQkoZGV2cHJpdi0+YWlfbl9zY2FubGVuICYgMSkgJiYKKwkJCShkZXZwcml2LT5haV9uX3NjYW5sZW4gPiAxKSkgeworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJCQkvL3Zwcml2LT51c2Vlb3NoYW5kbGU9MTsgLy8gY2hhbmdlIERNQSB0cmFuc2ZlciBibG9jayB0byBmaXQgRU9TIG9uIGV2ZXJ5IHNlY29uZCBjYWxsCisJCQkJZGV2cHJpdi0+dXNlZG1hID0gMDsJLy8gWFhYIG1heWJlIGNhbiBiZSBjb3JyZWN0ZWQgdG8gdXNlIDE2IGJpdCBETUEKKwkJCX0gZWxzZSB7CS8vIHdlbGwsIHdlIG11c3QgaW5zZXJ0IG9uZSBzYW1wbGUgdG8gZW5kIG9mIEVPUyB0byBtZWV0IDMyIGJpdCB0cmFuc2ZlcgorCQkJCWRldnByaXYtPmFpX2FkZF9iYWNrID0gMTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CQkvLyBpbnRlcnJ1cHQgdHJhbnNmZXIgZG9uJ3QgbmVlZCBhbnkgY29ycmVjdGlvbgorCQlkZXZwcml2LT51c2VkbWEgPSAwOworCX0KKworCS8vIHdlIG5lZWQgc29mdHdhcmUgUyZIIHNpZ25hbD8gSXQgYWRkICB0d28gc2FtcGxlcyBiZWZvcmUgZXZlcnkgc2NhbiBhcyBtaW5pbXVtCisJaWYgKGRldnByaXYtPnVzZXNzaCAmJiBkZXZwcml2LT5zb2Z0c3NoZGVsYXkpIHsKKwkJZGV2cHJpdi0+YWlfYWRkX2Zyb250ID0gMjsKKwkJaWYgKChkZXZwcml2LT51c2VkbWEgPT0gMSkgJiYgKGRldnByaXYtPmFpX2FkZF9iYWNrID09IDEpKSB7CS8vIG1vdmUgaXQgdG8gZnJvbnQKKwkJCWRldnByaXYtPmFpX2FkZF9mcm9udCsrOworCQkJZGV2cHJpdi0+YWlfYWRkX2JhY2sgPSAwOworCQl9CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJYWRkY2hhbnMgPSBkZXZwcml2LT5zb2Z0c3NoZGVsYXkgLyBjbWQtPmNvbnZlcnRfYXJnOworCQlpZiAoZGV2cHJpdi0+c29mdHNzaGRlbGF5ICUgY21kLT5jb252ZXJ0X2FyZykKKwkJCWFkZGNoYW5zKys7CisJCWlmIChhZGRjaGFucyA+IChkZXZwcml2LT5haV9hZGRfZnJvbnQgLSAxKSkgewkvLyB1ZmYsIHN0aWxsIHNob3J0IDotKAorCQkJZGV2cHJpdi0+YWlfYWRkX2Zyb250ID0gYWRkY2hhbnMgKyAxOworCQkJaWYgKGRldnByaXYtPnVzZWRtYSA9PSAxKQorCQkJCWlmICgoZGV2cHJpdi0+YWlfYWRkX2Zyb250ICsKKwkJCQkJCWRldnByaXYtPmFpX25fY2hhbiArCisJCQkJCQlkZXZwcml2LT5haV9hZGRfYmFjaykgJiAxKQorCQkJCQlkZXZwcml2LT5haV9hZGRfZnJvbnQrKzsJLy8gcm91bmQgdXAgdG8gMzIgYml0CisJCX0KKwl9CQkJLy8gd2VsbCwgd2Ugbm93IGtub3cgd2hhdCBtdXN0IGJlIGFsbCBhZGRlZAorCisJZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA9CS8vIHdoYXQgd2UgbXVzdCB0YWtlIGZyb20gY2FyZCBpbiByZWFsIHRvIGhhdmUgYWlfbl9zY2FubGVuIG9uIG91dHB1dD8KKwkJKGRldnByaXYtPmFpX2FkZF9mcm9udCArIGRldnByaXYtPmFpX25fY2hhbiArCisJCWRldnByaXYtPmFpX2FkZF9iYWNrKSAqIChkZXZwcml2LT5haV9uX3NjYW5sZW4gLworCQlkZXZwcml2LT5haV9uX2NoYW4pOworCisJRFBSSU5USygiMiB1c2VkbWE9JWQgcmVhbHNjYW49JWQgYWY9JXUgbl9jaGFuPSVkIGFiPSVkIG5fc2Nhbmxlbj0lZFxuIiwKKwkJZGV2cHJpdi0+dXNlZG1hLAorCQlkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuLCBkZXZwcml2LT5haV9hZGRfZnJvbnQsCisJCWRldnByaXYtPmFpX25fY2hhbiwgZGV2cHJpdi0+YWlfYWRkX2JhY2ssCisJCWRldnByaXYtPmFpX25fc2Nhbmxlbik7CisKKwkvLyBjaGVjayBhbmQgc2V0dXAgY2hhbm5lbCBsaXN0CisJaWYgKCFjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBkZXZwcml2LT5haV9uX2NoYW4sCisJCQlkZXZwcml2LT5haV9jaGFubGlzdCwgZGV2cHJpdi0+YWlfYWRkX2Zyb250LAorCQkJZGV2cHJpdi0+YWlfYWRkX2JhY2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXNldHVwX2NoYW5uZWxfbGlzdChkZXYsIHMsIGRldnByaXYtPmFpX25fY2hhbiwKKwkJCWRldnByaXYtPmFpX2NoYW5saXN0LCAwLCBkZXZwcml2LT5haV9hZGRfZnJvbnQsCisJCQlkZXZwcml2LT5haV9hZGRfYmFjaywgZGV2cHJpdi0+dXNlZG1hLAorCQkJZGV2cHJpdi0+dXNlZW9zaGFuZGxlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvLyBjb21wdXRlIHRpbWVycyBzZXR0aW5ncworCS8vIHNpbXBsZXN0IHdheSwgZnI9NE1oei8odGltMSp0aW0yKSwgY2hhbm5lbCBtYW5pcHVsYXRpb24gd2l0aG91dCB0aW1lcnMgZWZmZWN0CisJaWYgKCgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgfHwgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHx8IChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfSU5UKSkgJiYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikpIHsJLy8gYm90aCB0aW1lciBpcyB1c2VkIGZvciBvbmUgdGltZQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgeworCQkJZGV2cHJpdi0+YWlfZG8gPSA0OworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+YWlfZG8gPSAxOworCQl9CisJCXBjaTkxMThfY2FsY19kaXZpc29ycyhkZXZwcml2LT5haV9kbywgZGV2LCBzLAorCQkJJmNtZC0+c2Nhbl9iZWdpbl9hcmcsICZjbWQtPmNvbnZlcnRfYXJnLAorCQkJZGV2cHJpdi0+YWlfZmxhZ3MsIGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sCisJCQkmZGV2cHJpdi0+YWlfZGl2aXNvcjEsICZkZXZwcml2LT5haV9kaXZpc29yMiwKKwkJCWRldnByaXYtPnVzZXNzaCwgZGV2cHJpdi0+YWlfYWRkX2Zyb250KTsKKwkJZGV2cHJpdi0+YWlfdGltZXIyID0gY21kLT5jb252ZXJ0X2FyZzsKKwl9CisKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgJiYgKChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHx8IChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSkpIHsJLy8gZG91YmxlIHRpbWVkIGFjdGlvbgorCQlpZiAoIWRldnByaXYtPnVzZWRtYSkgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiY21kLT5zY2FuX2JlZ2luX3NyYz1UUklHX1RJTUVSIHdvcmtzIG9ubHkgd2l0aCBidXMgbWFzdGVyaW5nISIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlkZXZwcml2LT5haV9kbyA9IDI7CisJCXBjaTkxMThfY2FsY19kaXZpc29ycyhkZXZwcml2LT5haV9kbywgZGV2LCBzLAorCQkJJmNtZC0+c2Nhbl9iZWdpbl9hcmcsICZjbWQtPmNvbnZlcnRfYXJnLAorCQkJZGV2cHJpdi0+YWlfZmxhZ3MsIGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sCisJCQkmZGV2cHJpdi0+YWlfZGl2aXNvcjEsICZkZXZwcml2LT5haV9kaXZpc29yMiwKKwkJCWRldnByaXYtPnVzZXNzaCwgZGV2cHJpdi0+YWlfYWRkX2Zyb250KTsKKwkJZGV2cHJpdi0+YWlfdGltZXIxID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJZGV2cHJpdi0+YWlfdGltZXIyID0gY21kLT5jb252ZXJ0X2FyZzsKKwl9CisKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpCisJCSYmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSkgeworCQlkZXZwcml2LT5haV9kbyA9IDM7CisJfQorCisJc3RhcnRfcGFjZXIoZGV2LCAtMSwgMCwgMCk7CS8vIHN0b3AgcGFjZXIKKworCWRldnByaXYtPkFkQ29udHJvbFJlZyA9IDA7CS8vIGJpcG9sYXIsIFMuRS4sIHVzZSA4MjU0LCBzdG9wIDgzNTQsIGludGVybmFsIHRyaWdnZXIsIHNvZnQgdHJpZ2dlciwgZGlzYWJsZSBETUEKKwlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOworCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPSBBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZzsJLy8gcG9zaXRpdmUgdHJpZ2dlcnMsIG5vIFMmSCwgbm8gYnVyc3QsIGJ1cnN0IHN0b3AsIG5vIHBvc3QgdHJpZ2dlciwgbm8gYWJvdXQgdHJpZ2dlciwgdHJpZ2dlciBzdG9wCisJb3V0bChkZXZwcml2LT5BZEZ1bmN0aW9uUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURGVU5DKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RFTEZJRk8pOwkvLyBmbHVzaCBGSUZPCisJaW5sKGRldi0+aW9iYXNlICsgUENJOTExOF9BRFNUQVQpOwkvLyBmbHVzaCBBL0QgYW5kIElOVCBzdGF0dXMgcmVnaXN0ZXIKKwlpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVFNSQyk7CisKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CisJZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT5haV9idWZfcHRyID0gMDsKKworCWlmIChkZXZwcml2LT51c2VkbWEpIHsKKwkJcmV0ID0gcGNpOTExOF9haV9kb2NtZF9kbWEoZGV2LCBzKTsKKwl9IGVsc2UgeworCQlyZXQgPSBwY2k5MTE4X2FpX2RvY21kX3NhbXBsKGRldiwgcyk7CisJfQorCisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogRU5EOiBwY2k5MTE4X2FpX2NtZCgpXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBjaGVja19jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBpbnQgZnJvbnRhZGQsIGludCBiYWNrYWRkKQoreworCXVuc2lnbmVkIGludCBpLCBkaWZmZXJlbmNpYWwgPSAwLCBiaXBvbGFyID0gMDsKKworCS8qIGNvcnJlY3QgY2hhbm5lbCBhbmQgcmFuZ2UgbnVtYmVyIGNoZWNrIGl0c2VsZiBjb21lZGkvcmFuZ2UuYyAqLworCWlmIChuX2NoYW4gPCAxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyYW5nZS9jaGFubmVsIGxpc3QgaXMgZW1wdHkhIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoKGZyb250YWRkICsgbl9jaGFuICsgYmFja2FkZCkgPiBzLT5sZW5fY2hhbmxpc3QpIHsKKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaSVkOiByYW5nZS9jaGFubmVsIGxpc3QgaXMgdG9vIGxvbmcgZm9yIGFjdHVhbCBjb25maWd1cmF0aW9uICglZD4lZCkhIiwKKwkJCWRldi0+bWlub3IsIG5fY2hhbiwKKwkJCXMtPmxlbl9jaGFubGlzdCAtIGZyb250YWRkIC0gYmFja2FkZCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChDUl9BUkVGKGNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpCisJCWRpZmZlcmVuY2lhbCA9IDE7CS8vIGFsbCBpbnB1dCBtdXN0IGJlIGRpZmYKKwlpZiAoQ1JfUkFOR0UoY2hhbmxpc3RbMF0pIDwgUENJOTExOF9CSVBPTEFSX1JBTkdFUykKKwkJYmlwb2xhciA9IDE7CS8vIGFsbCBpbnB1dCBtdXN0IGJlIGJpcG9sYXIKKwlpZiAobl9jaGFuID4gMSkKKwkJZm9yIChpID0gMTsgaSA8IG5fY2hhbjsgaSsrKSB7CS8vIGNoZWNrIFMuRS9kaWZmCisJCQlpZiAoKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikgIT0KKwkJCQkoZGlmZmVyZW5jaWFsKSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJEaWZmZXJlbmNpYWwgYW5kIHNpbmdsZSBlbmRlZCBpbnB1dHMgY2Fubid0IGJlIG1peHR1cmVkISIpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJaWYgKChDUl9SQU5HRShjaGFubGlzdFtpXSkgPCBQQ0k5MTE4X0JJUE9MQVJfUkFOR0VTKSAhPQorCQkJCShiaXBvbGFyKSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJCaXBvbGFyIGFuZCB1bmlwb2xhciByYW5nZXMgY2Fubid0IGJlIG1peHR1cmVkISIpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJaWYgKCghZGV2cHJpdi0+dXNlbXV4KSAmIChkaWZmZXJlbmNpYWwpICYKKwkJCQkoQ1JfQ0hBTihjaGFubGlzdFtpXSkgPj0KKwkJCQkJdGhpc19ib2FyZC0+bl9haWNoYW5kKSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJJZiBBUkVGX0RJRkYgaXMgdXNlZCB0aGVuIGlzIGF2YWlsYWJsZSBvbmx5IGZpcnN0IDggY2hhbm5lbHMhIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKworCXJldHVybiAxOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBpbnQgcm90LCBpbnQgZnJvbnRhZGQsIGludCBiYWNrYWRkLAorCWludCB1c2VkbWEsIGNoYXIgdXNlZW9zKQoreworCXVuc2lnbmVkIGludCBpLCBkaWZmZXJlbmNpYWwgPSAwLCBiaXBvbGFyID0gMDsKKwl1bnNpZ25lZCBpbnQgc2NhbnF1YWQsIGdhaW4sIHNzaCA9IDB4MDA7CisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBCR046IHNldHVwX2NoYW5uZWxfbGlzdCglZCwuLCVkLC4sJWQsJWQsJWQsJWQpXG4iLCBkZXYtPm1pbm9yLCBuX2NoYW4sIHJvdCwgZnJvbnRhZGQsIGJhY2thZGQsIHVzZWRtYSk7CisKKwlpZiAodXNlZG1hID09IDEpIHsKKwkJcm90ID0gODsKKwkJdXNlZG1hID0gMDsKKwl9CisKKwlpZiAoQ1JfQVJFRihjaGFubGlzdFswXSkgPT0gQVJFRl9ESUZGKQorCQlkaWZmZXJlbmNpYWwgPSAxOwkvLyBhbGwgaW5wdXQgbXVzdCBiZSBkaWZmCisJaWYgKENSX1JBTkdFKGNoYW5saXN0WzBdKSA8IFBDSTkxMThfQklQT0xBUl9SQU5HRVMpCisJCWJpcG9sYXIgPSAxOwkvLyBhbGwgaW5wdXQgbXVzdCBiZSBiaXBvbGFyCisKKwkvLyBBbGwgaXMgb2ssIHNvIHdlIGNhbiBzZXR1cCBjaGFubmVsL3JhbmdlIGxpc3QKKworCWlmICghYmlwb2xhcikgeworCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX1VuaVA7CS8vIHNldCB1bmliaXBvbGFyCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+QWRDb250cm9sUmVnICY9ICgofkFkQ29udHJvbF9VbmlQKSAmIDB4ZmYpOwkvLyBlbmFibGUgYmlwb2xhcgorCX0KKworCWlmIChkaWZmZXJlbmNpYWwpIHsKKwkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9EaWZmOwkvLyBlbmFibGUgZGlmZiBpbnB1dHMKKwl9IGVsc2UgeworCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgJj0gKCh+QWRDb250cm9sX0RpZmYpICYgMHhmZik7CS8vIHNldCBzaW5nbGUgZW5kZWQgaW5wdXRzCisJfQorCisJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsJLy8gc2V0dXAgbW9kZQorCisJb3V0bCgyLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfU0NBTk1PRCk7CS8vIGdvZHMga25vdyB3aHkgdGhpcyBzZXF1ZW5jZSEKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9TQ0FOTU9EKTsKKwlvdXRsKDEsIGRldi0+aW9iYXNlICsgUENJOTExOF9TQ0FOTU9EKTsKKworI2lmZGVmIFBDSTkxMThfUEFSQU5PSURDSEVDSworCWRldnByaXYtPmNoYW5saXN0bGVuID0gbl9jaGFuOworCWZvciAoaSA9IDA7IGkgPCAoUENJOTExOF9DSEFOTEVOICsgMSk7IGkrKykKKwkJZGV2cHJpdi0+Y2hhbmxpc3RbaV0gPSAweDU1YWE7CisjZW5kaWYKKworCWlmIChmcm9udGFkZCkgewkJLy8gaW5zZXJ0IGNoYW5uZWxzIGZvciBTJkgKKwkJc3NoID0gZGV2cHJpdi0+c29mdHNzaHNhbXBsZTsKKwkJRFBSSU5USygiRkE6ICUwNHg6ICIsIHNzaCk7CisJCWZvciAoaSA9IDA7IGkgPCBmcm9udGFkZDsgaSsrKSB7CS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQkJc2NhbnF1YWQgPSBDUl9DSEFOKGNoYW5saXN0WzBdKTsJLy8gZ2V0IGNoYW5uZWwgbnVtYmVyOworCQkJZ2FpbiA9IENSX1JBTkdFKGNoYW5saXN0WzBdKTsJLy8gZ2V0IGdhaW4gbnVtYmVyCisJCQlzY2FucXVhZCB8PSAoKGdhaW4gJiAweDAzKSA8PCA4KTsKKwkJCW91dGwoc2NhbnF1YWQgfCBzc2gsIGRldi0+aW9iYXNlICsgUENJOTExOF9HQUlOKTsKKwkJCURQUklOVEsoIiUwMnggIiwgc2NhbnF1YWQgfCBzc2gpOworCQkJc3NoID0gZGV2cHJpdi0+c29mdHNzaGhvbGQ7CisJCX0KKwkJRFBSSU5USygiXG4gIik7CisJfQorCisJRFBSSU5USygiU0w6ICIsIHNzaCk7CisJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7CS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQlzY2FucXVhZCA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOwkvLyBnZXQgY2hhbm5lbCBudW1iZXI7CisjaWZkZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCisJCWRldnByaXYtPmNoYW5saXN0W2kgXiB1c2VkbWFdID0gKHNjYW5xdWFkICYgMHhmKSA8PCByb3Q7CisjZW5kaWYKKwkJZ2FpbiA9IENSX1JBTkdFKGNoYW5saXN0W2ldKTsJLy8gZ2V0IGdhaW4gbnVtYmVyCisJCXNjYW5xdWFkIHw9ICgoZ2FpbiAmIDB4MDMpIDw8IDgpOworCQlvdXRsKHNjYW5xdWFkIHwgc3NoLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfR0FJTik7CisJCURQUklOVEsoIiUwMnggIiwgc2NhbnF1YWQgfCBzc2gpOworCX0KKwlEUFJJTlRLKCJcbiAiKTsKKworCWlmIChiYWNrYWRkKSB7CQkvLyBpbnNlcnQgY2hhbm5lbHMgZm9yIGZpdCBvbnRvIDMyYml0IERNQQorCQlEUFJJTlRLKCJCQTogJTA0eDogIiwgc3NoKTsKKwkJZm9yIChpID0gMDsgaSA8IGJhY2thZGQ7IGkrKykgewkvLyBzdG9yZSByYW5nZSBsaXN0IHRvIGNhcmQKKwkJCXNjYW5xdWFkID0gQ1JfQ0hBTihjaGFubGlzdFswXSk7CS8vIGdldCBjaGFubmVsIG51bWJlcjsKKwkJCWdhaW4gPSBDUl9SQU5HRShjaGFubGlzdFswXSk7CS8vIGdldCBnYWluIG51bWJlcgorCQkJc2NhbnF1YWQgfD0gKChnYWluICYgMHgwMykgPDwgOCk7CisJCQlvdXRsKHNjYW5xdWFkIHwgc3NoLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfR0FJTik7CisJCQlEUFJJTlRLKCIlMDJ4ICIsIHNjYW5xdWFkIHwgc3NoKTsKKwkJfQorCQlEUFJJTlRLKCJcbiAiKTsKKwl9CisjaWZkZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCisJZGV2cHJpdi0+Y2hhbmxpc3Rbbl9jaGFuIF4gdXNlZG1hXSA9IGRldnByaXYtPmNoYW5saXN0WzAgXiB1c2VkbWFdOwkvLyBmb3IgMzJiaXQgb2VyYXRpb25zCisJaWYgKHVzZWVvcykgeworCQlmb3IgKGkgPSAxOyBpIDwgbl9jaGFuOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCQlkZXZwcml2LT5jaGFubGlzdFsobl9jaGFuICsgaSkgXiB1c2VkbWFdID0KKwkJCQkoQ1JfQ0hBTihjaGFubGlzdFtpXSkgJiAweGYpIDw8IHJvdDsKKwkJfQorCQlkZXZwcml2LT5jaGFubGlzdFsoMiAqIG5fY2hhbikgXiB1c2VkbWFdID0gZGV2cHJpdi0+Y2hhbmxpc3RbMCBeIHVzZWRtYV07CS8vIGZvciAzMmJpdCBvZXJhdGlvbnMKKwkJdXNlZW9zID0gMjsKKwl9IGVsc2UgeworCQl1c2Vlb3MgPSAxOworCX0KKyNpZmRlZiBQQ0k5MTE4X0VYVERFQlVHCisJRFBSSU5USygiQ0hMOiAiKTsKKwlmb3IgKGkgPSAwOyBpIDw9ICh1c2Vlb3MgKiBuX2NoYW4pOyBpKyspIHsKKwkJRFBSSU5USygiJTA0eCAiLCBkZXZwcml2LT5jaGFubGlzdFtpXSk7CisJfQorCURQUklOVEsoIlxuICIpOworI2VuZGlmCisjZW5kaWYKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9TQ0FOTU9EKTsJLy8gY2xvc2Ugc2NhbiBxdWV1ZQorLy8gICAgICBjb21lZGlfdWRlbGF5KDEwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBvcnRhbnQgZGVsYXksIG9yIGZpcnN0IHNhbXBsZSB3aWxsIGJlIGNyaXBsZWQKKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEVORDogc2V0dXBfY2hhbm5lbF9saXN0KClcbiIpOworCXJldHVybiAxOwkJLy8gd2UgY2FuIHNlcnZlIHRoaXMgd2l0aCBzY2FuIGxvZ2ljCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgY2FsY3VsYXRlIDgyNTQgZGl2aXNvcnMgaWYgdGhleSBhcmUgdXNlZCBmb3IgZHVhbCB0aW1pbmcKKyovCitzdGF0aWMgdm9pZCBwY2k5MTE4X2NhbGNfZGl2aXNvcnMoY2hhciBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCAqdGltMSwgdW5zaWduZWQgaW50ICp0aW0yLAorCXVuc2lnbmVkIGludCBmbGFncywgaW50IGNoYW5zLCB1bnNpZ25lZCBpbnQgKmRpdjEsIHVuc2lnbmVkIGludCAqZGl2MiwKKwljaGFyIHVzZXNzaCwgdW5zaWduZWQgaW50IGNobnNzaGZyb250KQoreworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEJHTjogcGNpOTExOF9jYWxjX2Rpdmlzb3JzKCVkLCVkLC4sJXUsJXUsJXUsJWQsLiwuLCwldSwldSlcbiIsIG1vZGUsIGRldi0+bWlub3IsICp0aW0xLCAqdGltMiwgZmxhZ3MsIGNoYW5zLCB1c2Vzc2gsIGNobnNzaGZyb250KTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDE6CisJY2FzZSA0OgorCQlpZiAoKnRpbTIgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCisJCQkqdGltMiA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwgZGl2MSwgZGl2MiwKKwkJCXRpbTIsIGZsYWdzICYgVFJJR19ST1VORF9ORUFSRVNUKTsKKwkJRFBSSU5USygiT1NDIGJhc2U9JXUgZGl2MT0ldSBkaXYyPSV1IHRpbWVyMT0ldVxuIiwKKwkJCWRldnByaXYtPmk4MjU0X29zY19iYXNlLCAqZGl2MSwgKmRpdjIsICp0aW0xKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoKnRpbTIgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCisJCQkqdGltMiA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJRFBSSU5USygiMSBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1IHRpbWVyMj0ldVxuIiwgKmRpdjEsICpkaXYyLAorCQkJKnRpbTEsICp0aW0yKTsKKwkJKmRpdjEgPSAqdGltMiAvIGRldnByaXYtPmk4MjU0X29zY19iYXNlOwkvLyBjb252ZXJ0IHRpbWVyIChidXJzdCkKKwkJRFBSSU5USygiMiBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1IHRpbWVyMj0ldVxuIiwgKmRpdjEsICpkaXYyLAorCQkJKnRpbTEsICp0aW0yKTsKKwkJaWYgKCpkaXYxIDwgdGhpc19ib2FyZC0+YWlfcGFjZXJfbWluKQorCQkJKmRpdjEgPSB0aGlzX2JvYXJkLT5haV9wYWNlcl9taW47CisJCURQUklOVEsoIjMgZGl2MT0ldSBkaXYyPSV1IHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsICpkaXYxLCAqZGl2MiwKKwkJCSp0aW0xLCAqdGltMik7CisJCSpkaXYyID0gKnRpbTEgLyBkZXZwcml2LT5pODI1NF9vc2NfYmFzZTsJLy8gc2NhbiB0aW1lcgorCQlEUFJJTlRLKCI0IGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCQkqZGl2MiA9ICpkaXYyIC8gKmRpdjE7CS8vIG1ham9yIHRpbWVyIGlzIGMxKmMyCisJCURQUklOVEsoIjUgZGl2MT0ldSBkaXYyPSV1IHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsICpkaXYxLCAqZGl2MiwKKwkJCSp0aW0xLCAqdGltMik7CisJCWlmICgqZGl2MiA8IGNoYW5zKQorCQkJKmRpdjIgPSBjaGFuczsKKwkJRFBSSU5USygiNiBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1IHRpbWVyMj0ldVxuIiwgKmRpdjEsICpkaXYyLAorCQkJKnRpbTEsICp0aW0yKTsKKworCQkqdGltMiA9ICpkaXYxICogZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2U7CS8vIHJlYWwgY29udmVydCB0aW1lcgorCisJCWlmICh1c2Vzc2ggJiAoY2huc3NoZnJvbnQgPT0gMCkpCS8vIHVzZSBCU1NIIHNpZ25hbAorCQkJaWYgKCpkaXYyIDwgKGNoYW5zICsgMikpCisJCQkJKmRpdjIgPSBjaGFucyArIDI7CisKKwkJRFBSSU5USygiNyBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1IHRpbWVyMj0ldVxuIiwgKmRpdjEsICpkaXYyLAorCQkJKnRpbTEsICp0aW0yKTsKKwkJKnRpbTEgPSAqZGl2MSAqICpkaXYyICogZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2U7CisJCURQUklOVEsoIk9TQyBiYXNlPSV1IGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLAorCQkJZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UsICpkaXYxLCAqZGl2MiwgKnRpbTEsICp0aW0yKTsKKwkJYnJlYWs7CisJfQorCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEVORDogcGNpOTExOF9jYWxjX2Rpdmlzb3JzKCV1LCV1KVxuIiwKKwkJKmRpdjEsICpkaXYyKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMikKK3sKKwlvdXRsKDB4NzQsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKwlvdXRsKDB4YjQsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKy8vICAgICAgb3V0bCgweDMwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UQ1RSTCk7CisJY29tZWRpX3VkZWxheSgxKTsKKworCWlmICgobW9kZSA9PSAxKSB8fCAobW9kZSA9PSAyKSB8fCAobW9kZSA9PSA0KSkgeworCQlvdXRsKGRpdmlzb3IyICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDIpOworCQlvdXRsKChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlQyKTsKKwkJb3V0bChkaXZpc29yMSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlQxKTsKKwkJb3V0bCgoZGl2aXNvcjEgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UMSk7CisJfQorfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2V4dHRyZ19hZGQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYXIgc291cmNlKQoreworCWlmIChzb3VyY2UgPiAzKQorCQlyZXR1cm4gLTE7CS8vIGluY29ycmVjdCBzb3VyY2UKKwlkZXZwcml2LT5leHR0cmdfdXNlcnMgfD0gKDEgPDwgc291cmNlKTsKKwlkZXZwcml2LT5JbnRDb250cm9sUmVnIHw9IEludF9EVHJnOworCW91dGwoZGV2cHJpdi0+SW50Q29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVENUUkwpOworCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKSB8IDB4MWYwMCwgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBhbGxvdyBJTlQgaW4gQU1DQworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2V4dHRyZ19kZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYXIgc291cmNlKQoreworCWlmIChzb3VyY2UgPiAzKQorCQlyZXR1cm4gLTE7CS8vIGluY29ycmVjdCBzb3VyY2UKKwlkZXZwcml2LT5leHR0cmdfdXNlcnMgJj0gfigxIDw8IHNvdXJjZSk7CisJaWYgKCFkZXZwcml2LT5leHR0cmdfdXNlcnMpIHsJLy8gc2h1dGRvd24gZXh0IHRyZyBpbnR0ZXJydXB0cworCQlkZXZwcml2LT5JbnRDb250cm9sUmVnICY9IH5JbnRfRFRyZzsKKwkJaWYgKCFkZXZwcml2LT5JbnRDb250cm9sUmVnKQkvLyBhbGwgSVJRIGRpc2FibGVkCisJCQlvdXRsKGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUikgJiAofjB4MDAwMDFmMDApLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGRpc2FibGUgaW50IGluIEFNQ0MKKwkJb3V0bChkZXZwcml2LT5JbnRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UQ1RSTCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWlmIChkZXZwcml2LT51c2VkbWEpCisJCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTUNTUikgJiAofkVOX0EyUF9UUkFOU0ZFUlMpLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01DU1IpOwkvLyBzdG9wIERNQQorCXBjaTkxMThfZXh0dHJnX2RlbChkZXYsIEVYVFRSR19BSSk7CisJc3RhcnRfcGFjZXIoZGV2LCAwLCAwLCAwKTsJLy8gc3RvcCA4MjU0IGNvdW50ZXJzCisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9IEFkRnVuY3Rpb25fUERUcmcgfCBBZEZ1bmN0aW9uX1BFVHJnOworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CS8vIHBvc2l0aXZlIHRyaWdnZXJzLCBubyBTJkgsIG5vIGJ1cnN0LCBidXJzdCBzdG9wLCBubyBwb3N0IHRyaWdnZXIsIG5vIGFib3V0IHRyaWdnZXIsIHRyaWdnZXIgc3RvcAorCWRldnByaXYtPkFkQ29udHJvbFJlZyA9IDB4MDA7CisJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsJLy8gYmlwb2xhciwgUy5FLiwgdXNlIDgyNTQsIHN0b3AgODM1NCwgaW50ZXJuYWwgdHJpZ2dlciwgc29mdCB0cmlnZ2VyLCBkaXNhYmxlIElOVCBhbmQgRE1BCisJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQlVSU1QpOworCW91dGwoMSwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOworCW91dGwoMiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOwkvLyByZXNldCBzY2FuIHF1ZXVlCisJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfREVMRklGTyk7CS8vIGZsdXNoIEZJRk8KKworCWRldnByaXYtPmFpX2RvID0gMDsKKwlkZXZwcml2LT51c2VkbWEgPSAwOworCisJZGV2cHJpdi0+YWlfYWN0X3NjYW4gPSAwOworCWRldnByaXYtPmFpX2FjdF9kbWFwb3MgPSAwOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOworCWRldnByaXYtPmFpX2J1Zl9wdHIgPSAwOworCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMDsKKwlkZXZwcml2LT5kbWFfYWN0YnVmID0gMDsKKworCWlmICghZGV2cHJpdi0+SW50Q29udHJvbFJlZykKKwkJb3V0bChpbmwoZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpIHwgMHgxZjAwLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGFsbG93IElOVCBpbiBBTUNDCisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlkZXZwcml2LT5JbnRDb250cm9sUmVnID0gMDsKKwlkZXZwcml2LT5leHR0cmdfdXNlcnMgPSAwOworCWlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UQ1RSTCk7CisJb3V0bChkZXZwcml2LT5JbnRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UQ1RSTCk7CS8vIGRpc2FibGUgaW50ZXJydXB0cyBzb3VyY2UKKwlvdXRsKDB4MzAsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKy8vICAgICAgICBvdXRsKDB4YjQsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKwlzdGFydF9wYWNlcihkZXYsIDAsIDAsIDApOwkvLyBzdG9wIDgyNTQgY291bnRlcnMKKwlkZXZwcml2LT5BZENvbnRyb2xSZWcgPSAwOworCW91dGwoZGV2cHJpdi0+QWRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURDTlRSTCk7CS8vIGJpcG9sYXIsIFMuRS4sIHVzZSA4MjU0LCBzdG9wIDgzNTQsIGludGVybmFsIHRyaWdnZXIsIHNvZnQgdHJpZ2dlciwgZGlzYWJsZSBJTlQgYW5kIERNQQorCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0JVUlNUKTsKKwlvdXRsKDEsIGRldi0+aW9iYXNlICsgUENJOTExOF9TQ0FOTU9EKTsKKwlvdXRsKDIsIGRldi0+aW9iYXNlICsgUENJOTExOF9TQ0FOTU9EKTsJLy8gcmVzZXQgc2NhbiBxdWV1ZQorCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPSBBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZzsKKwlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOwkvLyBwb3NpdGl2ZSB0cmlnZ2Vycywgbm8gUyZILCBubyBidXJzdCwgYnVyc3Qgc3RvcCwgbm8gcG9zdCB0cmlnZ2VyLCBubyBhYm91dCB0cmlnZ2VyLCB0cmlnZ2VyIHN0b3AKKworCWRldnByaXYtPmFvX2RhdGFbMF0gPSAyMDQ3OworCWRldnByaXYtPmFvX2RhdGFbMV0gPSAyMDQ3OworCW91dGwoZGV2cHJpdi0+YW9fZGF0YVswXSwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RBMSk7CS8vIHJlc2V0IEEvRCBvdXRzIHRvIDBWCisJb3V0bChkZXZwcml2LT5hb19kYXRhWzFdLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfREEyKTsKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9ETyk7CS8vIHJlc2V0IGRpZ2kgb3V0cyB0byBMCisJY29tZWRpX3VkZWxheSgxMCk7CisJaW5sKGRldi0+aW9iYXNlICsgUENJOTExOF9BRF9EQVRBKTsKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9ERUxGSUZPKTsJLy8gZmx1c2ggRklGTworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVFNSQyk7CS8vIHJlbW92ZSBJTlQgcmVxdWVzdHMKKwlpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEU1RBVCk7CS8vIGZsdXNoIEEvRCBzdGF0dXMgcmVnaXN0ZXIKKwlpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVFNSQyk7CS8vIGZsdXNoIElOVCByZXF1ZXN0cworCWRldnByaXYtPkFkQ29udHJvbFJlZyA9IDA7CisJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsJLy8gYmlwb2xhciwgUy5FLiwgdXNlIDgyNTQsIHN0b3AgODM1NCwgaW50ZXJuYWwgdHJpZ2dlciwgc29mdCB0cmlnZ2VyLCBkaXNhYmxlIElOVCBhbmQgRE1BCisKKwlkZXZwcml2LT5jbnQwX3VzZXJzID0gMDsKKwlkZXZwcml2LT5leHR0cmdfdXNlcnMgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQsIHBhZ2VzLCBpOworCXVuc2lnbmVkIHNob3J0IG1hc3RlcjsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlX2EsIGlvYmFzZV85OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IG9wdF9idXMsIG9wdF9zbG90OworCWNvbnN0IGNoYXIgKmVycnN0cjsKKwl1bnNpZ25lZCBjaGFyIHBjaV9idXMsIHBjaV9zbG90LCBwY2lfZnVuYzsKKwl1MTYgdTE2dzsKKworCXJ0X3ByaW50aygiY29tZWRpJWQ6IGFkbF9wY2k5MTE4OiBib2FyZD0lcyIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUpOworCisJb3B0X2J1cyA9IGl0LT5vcHRpb25zWzBdOworCW9wdF9zbG90ID0gaXQtPm9wdGlvbnNbMV07CisJaWYgKGl0LT5vcHRpb25zWzNdICYgMSkgeworCQltYXN0ZXIgPSAwOwkvLyB1c2VyIGRvbid0IHdhbnQgdXNlIGJ1cyBtYXN0ZXIKKwl9IGVsc2UgeworCQltYXN0ZXIgPSAxOworCX0KKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNpOTExOF9wcml2YXRlKSkpIDwgMCkgeworCQlydF9wcmludGsoIiAtIEFsbG9jYXRpb24gZmFpbGVkIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UgKi8KKwllcnJzdHIgPSAibm90IGZvdW5kISI7CisJcGNpZGV2ID0gTlVMTDsKKwl3aGlsZSAoTlVMTCAhPSAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUNDLAorCQkJCXRoaXNfYm9hcmQtPmRldmljZV9pZCwgcGNpZGV2KSkpIHsKKwkJLyogRm91bmQgbWF0Y2hpbmcgdmVuZG9yL2RldmljZS4gKi8KKwkJaWYgKG9wdF9idXMgfHwgb3B0X3Nsb3QpIHsKKwkJCS8qIENoZWNrIGJ1cy9zbG90LiAqLworCQkJaWYgKG9wdF9idXMgIT0gcGNpZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IG9wdF9zbG90ICE9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOwkvKiBubyBtYXRjaCAqLworCQl9CisJCS8qCisJCSAqIExvb2sgZm9yIGRldmljZSB0aGF0IGlzbid0IGluIHVzZS4KKwkJICogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucy4KKwkJICovCisJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJhZGxfcGNpOTExOCIpKSB7CisJCQllcnJzdHIgPSAiZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhIjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKworCWlmICghcGNpZGV2KSB7CisJCWlmIChvcHRfYnVzIHx8IG9wdF9zbG90KSB7CisJCQlydF9wcmludGsoIiAtIENhcmQgYXQgYjpzICVkOiVkICVzXG4iLAorCQkJCW9wdF9idXMsIG9wdF9zbG90LCBlcnJzdHIpOworCQl9IGVsc2UgeworCQkJcnRfcHJpbnRrKCIgLSBDYXJkICVzXG4iLCBlcnJzdHIpOworCQl9CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChtYXN0ZXIpIHsKKwkJcGNpX3NldF9tYXN0ZXIocGNpZGV2KTsKKwl9CisKKwlwY2lfYnVzID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwlwY2lfc2xvdCA9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pOworCXBjaV9mdW5jID0gUENJX0ZVTkMocGNpZGV2LT5kZXZmbik7CisJaXJxID0gcGNpZGV2LT5pcnE7CisJaW9iYXNlX2EgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwlpb2Jhc2VfOSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpOworCisJcnRfcHJpbnRrKCIsIGI6czpmPSVkOiVkOiVkLCBpbz0weCU0bHgsIDB4JTRseCIsIHBjaV9idXMsIHBjaV9zbG90LAorCQlwY2lfZnVuYywgaW9iYXNlXzksIGlvYmFzZV9hKTsKKworCWRldi0+aW9iYXNlID0gaW9iYXNlXzk7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWRldnByaXYtPnBjaWRldiA9IHBjaWRldjsKKwlkZXZwcml2LT5pb2Jhc2VfYSA9IGlvYmFzZV9hOworCisJcGNpOTExOF9yZXNldChkZXYpOworCisJaWYgKGl0LT5vcHRpb25zWzNdICYgMikKKwkJaXJxID0gMDsJLy8gdXNlciBkb24ndCB3YW50IHVzZSBJUlEKKwlpZiAoaXJxID4gMCkgeworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgaW50ZXJydXB0X3BjaTkxMTgsIElSUUZfU0hBUkVELAorCQkJCSJBRExpbmsgUENJLTkxMTgiLCBkZXYpKSB7CisJCQlydF9wcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAlZCwgRElTQUJMSU5HIElUIiwKKwkJCQlpcnEpOworCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQl9IGVsc2UgeworCQkJcnRfcHJpbnRrKCIsIGlycT0ldSIsIGlycSk7CisJCX0KKwl9IGVsc2UgeworCQlydF9wcmludGsoIiwgSVJRIGRpc2FibGVkIik7CisJfQorCisJZGV2LT5pcnEgPSBpcnE7CisKKwlpZiAobWFzdGVyKSB7CQkvLyBhbGxvYyBETUEgYnVmZmVycworCQlkZXZwcml2LT5kbWFfZG91YmxlYnVmID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJZm9yIChwYWdlcyA9IDQ7IHBhZ2VzID49IDA7IHBhZ2VzLS0pCisJCQkJaWYgKChkZXZwcml2LT5kbWFidWZfdmlydFtpXSA9IChzaG9ydCAqKQorCQkJCQkJX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAorCQkJCQkJCXBhZ2VzKSkpCisJCQkJCWJyZWFrOworCQkJaWYgKGRldnByaXYtPmRtYWJ1Zl92aXJ0W2ldKSB7CisJCQkJZGV2cHJpdi0+ZG1hYnVmX3BhZ2VzW2ldID0gcGFnZXM7CisJCQkJZGV2cHJpdi0+ZG1hYnVmX3NpemVbaV0gPSBQQUdFX1NJWkUgKiBwYWdlczsKKwkJCQlkZXZwcml2LT5kbWFidWZfc2FtcGxlc1tpXSA9CisJCQkJCWRldnByaXYtPmRtYWJ1Zl9zaXplW2ldID4+IDE7CisJCQkJZGV2cHJpdi0+ZG1hYnVmX2h3W2ldID0KKwkJCQkJdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT4KKwkJCQkJZG1hYnVmX3ZpcnRbaV0pOworCQkJfQorCQl9CisJCWlmICghZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbMF0pIHsKKwkJCXJ0X3ByaW50aygiLCBDYW4ndCBhbGxvY2F0ZSBETUEgYnVmZmVyLCBETUEgZGlzYWJsZWQhIik7CisJCQltYXN0ZXIgPSAwOworCQl9CisKKwkJaWYgKGRldnByaXYtPmRtYWJ1Zl92aXJ0WzFdKQorCQkJZGV2cHJpdi0+ZG1hX2RvdWJsZWJ1ZiA9IDE7CisKKwl9CisKKwlpZiAoKGRldnByaXYtPm1hc3RlciA9IG1hc3RlcikpIHsKKwkJcnRfcHJpbnRrKCIsIGJ1cyBtYXN0ZXIiKTsKKwl9IGVsc2UgeworCQlydF9wcmludGsoIiwgbm8gYnVzIG1hc3RlciIpOworCX0KKworCWRldnByaXYtPnVzZW11eCA9IDA7CisJaWYgKGl0LT5vcHRpb25zWzJdID4gMCkgeworCQlkZXZwcml2LT51c2VtdXggPSBpdC0+b3B0aW9uc1syXTsKKwkJaWYgKGRldnByaXYtPnVzZW11eCA+IDI1NikKKwkJCWRldnByaXYtPnVzZW11eCA9IDI1NjsJLy8gbWF4IDI1NiBjaGFubmVscyEKKwkJaWYgKGl0LT5vcHRpb25zWzRdID4gMCkKKwkJCWlmIChkZXZwcml2LT51c2VtdXggPiAxMjgpIHsKKwkJCQlkZXZwcml2LT51c2VtdXggPSAxMjg7CS8vIG1heCAxMjggY2hhbm5lbHMgd2l0aCBzb2Z0YXJlIFMmSCEKKwkJCX0KKwkJcnRfcHJpbnRrKCIsIGV4dC4gbXV4ICVkIGNoYW5uZWxzIiwgZGV2cHJpdi0+dXNlbXV4KTsKKwl9CisKKwlkZXZwcml2LT5zb2Z0c3NoZGVsYXkgPSBpdC0+b3B0aW9uc1s0XTsKKwlpZiAoZGV2cHJpdi0+c29mdHNzaGRlbGF5IDwgMCkgewkvLyBzZWxlY3Qgc2FtcGxlJmhvbGQgc2lnbmFsIHBvbGFyaXR5CisJCWRldnByaXYtPnNvZnRzc2hkZWxheSA9IC1kZXZwcml2LT5zb2Z0c3NoZGVsYXk7CisJCWRldnByaXYtPnNvZnRzc2hzYW1wbGUgPSAweDgwOworCQlkZXZwcml2LT5zb2Z0c3NoaG9sZCA9IDB4MDA7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+c29mdHNzaHNhbXBsZSA9IDB4MDA7CisJCWRldnByaXYtPnNvZnRzc2hob2xkID0gMHg4MDsKKwl9CisKKwlydF9wcmludGsoIi5cbiIpOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2cHJpdi0+cGNpZGV2LCBQQ0lfQ09NTUFORCwgJnUxNncpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXZwcml2LT5wY2lkZXYsIFBDSV9DT01NQU5ELCB1MTZ3IHwgNjQpOwkvLyBFbmFibGUgcGFyaXR5IGNoZWNrIGZvciBwYXJpdHkgZXJyb3IKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKKwlpZiAoZGV2cHJpdi0+dXNlbXV4KSB7CisJCXMtPm5fY2hhbiA9IGRldnByaXYtPnVzZW11eDsKKwl9IGVsc2UgeworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwl9CisJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmFpX21heGRhdGE7CisJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9haWNoYW5saXN0OworCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FpOworCXMtPmNhbmNlbCA9IHBjaTkxMThfYWlfY2FuY2VsOworCXMtPmluc25fcmVhZCA9IHBjaTkxMThfaW5zbl9yZWFkX2FpOworCWlmIChkZXYtPmlycSkgeworCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOworCQlzLT5kb19jbWR0ZXN0ID0gcGNpOTExOF9haV9jbWR0ZXN0OworCQlzLT5kb19jbWQgPSBwY2k5MTE4X2FpX2NtZDsKKwkJcy0+bXVuZ2UgPSBwY2k5MTE4X2FpX211bmdlOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YW9fbWF4ZGF0YTsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnJhbmdlbGlzdF9hbzsKKwlzLT5pbnNuX3dyaXRlID0gcGNpOTExOF9pbnNuX3dyaXRlX2FvOworCXMtPmluc25fcmVhZCA9IHBjaTkxMThfaW5zbl9yZWFkX2FvOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmlvX2JpdHMgPSAwOwkJLyogYWxsIGJpdHMgaW5wdXQgKi8KKwlzLT5pbnNuX2JpdHMgPSBwY2k5MTE4X2luc25fYml0c19kaTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSA0OworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDQ7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pb19iaXRzID0gMHhmOwkvKiBhbGwgYml0cyBvdXRwdXQgKi8KKwlzLT5pbnNuX2JpdHMgPSBwY2k5MTE4X2luc25fYml0c19kbzsKKworCWRldnByaXYtPnZhbGlkID0gMTsKKwlkZXZwcml2LT5pODI1NF9vc2NfYmFzZSA9IDI1MDsJLy8gMjUwbnM9NE1IegorCWRldnByaXYtPmFpX21hc2toYXJkZXJyID0gMHgxMGE7CS8vIGRlZmF1bHQgbWVhc3VyZSBjcmFzaCBjb25kaXRpb24KKwlpZiAoaXQtPm9wdGlvbnNbNV0pCS8vIGRpc2FibGUgc29tZSByZXF1ZXN0ZWQKKwkJZGV2cHJpdi0+YWlfbWFza2hhcmRlcnIgJj0gfml0LT5vcHRpb25zWzVdOworCisJc3dpdGNoICh0aGlzX2JvYXJkLT5haV9tYXhkYXRhKSB7CisJY2FzZSAweGZmZmY6CisJCWRldnByaXYtPmFpMTZiaXRzID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2cHJpdi0+YWkxNmJpdHMgPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJaWYgKGRldnByaXYtPnZhbGlkKQorCQkJcGNpOTExOF9yZXNldChkZXYpOworCQlpZiAoZGV2LT5pcnEpCisJCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJCWlmIChkZXZwcml2LT5wY2lkZXYpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lkZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpZGV2KTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbMF0pCisJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWRldnByaXYtPmRtYWJ1Zl92aXJ0WzBdLAorCQkJCWRldnByaXYtPmRtYWJ1Zl9wYWdlc1swXSk7CisJCWlmIChkZXZwcml2LT5kbWFidWZfdmlydFsxXSkKKwkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbMV0sCisJCQkJZGV2cHJpdi0+ZG1hYnVmX3BhZ2VzWzFdKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY2Mjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCkBAIC0wLDAgKzEsMzk0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCisgICAgZHJpdmVyIGZvciBNaWNyb0F4aWFsIEFEUTEyLUIgZGF0YSBhY3F1aXNpdGlvbiBhbmQgY29udHJvbCBjYXJkCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBhZHExMmIKK0Rlc2NyaXB0aW9uOiBkcml2ZXIgZm9yIE1pY3JvQXhpYWwgQURRMTItQiBkYXRhIGFjcXVpc2l0aW9uIGFuZCBjb250cm9sIGNhcmQKK0RldmljZXM6IFtNaWNyb0F4aWFsXSBBRFExMi1CIChhZHExMmIpCitBdXRob3I6IGplcmVteSB0aGVsZXIgPHRoZWxlcmdAaWIuY25lYS5nb3YuYXI+CitVcGRhdGVkOiBUaHUsIDIxIEZlYiAyMDA4IDAyOjU2OjI3IC0wMzAwCitTdGF0dXM6IHdvcmtzCisKK0RyaXZlciBmb3IgdGhlIGFjcXVpc2l0aW9uIGNhcmQgQURRMTItQiAod2l0aG91dCBhbnkgYWRkLW9uKS4KKworIC0gQW5hbG9nIGlucHV0IGlzIHN1YmRldmljZSAwICgxNiBjaGFubmVscyBzaW5nbGUtZW5kZWQgb3IgOCBkaWZmZXJlbnRpYWwpCisgLSBEaWdpdGFsIGlucHV0IGlzIHN1YmRldmljZSAxICg1IGNoYW5uZWxzKQorIC0gRGlnaXRhbCBvdXRwdXQgaXMgc3ViZGV2aWNlIDEgKDggY2hhbm5lbHMpCisgLSBUaGUgUEFDRVIgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24KKworSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueSBvcHRpb25zLCB0aGV5IHdpbGwgZGVmYXVsdCB0bworCisgICMgY29tZWRpX2NvbmZpZyAvZGV2L2NvbWVkaTAgYWRxMTJiIDB4MzAwLDAsMAorCisgIG9wdGlvbiAxOiBJL08gYmFzZSBhZGRyZXNzLiBUaGUgZm9sbG93aW5nIHRhYmxlIGlzIHByb3ZpZGVkIGFzIGEgaGVscAorICAgb2YgdGhlIGhhcmR3YXJlIGp1bXBlcnMuCisKKyAgICAgICAgIGFkZHJlc3MgICAgICAgICAgICBqdW1wZXIgSkFEUgorICAgICAgICAgIDB4MzAwICAgICAgICAgICAgICAgICAxIChmYWN0b3J5IGRlZmF1bHQpCisgICAgICAgICAgMHgzMjAgICAgICAgICAgICAgICAgIDIKKyAgICAgICAgICAweDM0MCAgICAgICAgICAgICAgICAgMworICAgICAgICAgIDB4MzYwICAgICAgICAgICAgICAgICA0CisgICAgICAgICAgMHgzODAgICAgICAgICAgICAgICAgIDUKKyAgICAgICAgICAweDNBMCAgICAgICAgICAgICAgICAgNgorCisgIG9wdGlvbiAyOiB1bmlwb2xhci9iaXBvbGFyIEFEQyBzZWxlY3Rpb246IDAgLT4gYmlwb2xhciwgMSAtPiB1bmlwb2xhcgorCisgICAgICAgIHNlbGVjdGlvbiAgICAgICAgIGNvbWVkaV9jb25maWcgb3B0aW9uICAgICAgICAgICAgSlVCCisgICAgICAgICBiaXBvbGFyICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgMi0zIChmYWN0b3J5IGRlZmF1bHQpCisgICAgICAgICB1bmlwb2xhciAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgMS0yCisKKyAgb3B0aW9uIDM6IHNpbmdsZS1lbmRlZC9kaWZmZXJlbnRpYWwgQUkgc2VsZWN0aW9uOiAwIC0+IFNFLCAxIC0+IGRpZmZlcmVudGlhbAorCisgICAgICAgIHNlbGVjdGlvbiAgICAgICAgIGNvbWVkaV9jb25maWcgb3B0aW9uICAgICBKQ0hBICAgIEpDSEIKKyAgICAgICBzaW5nbGUtZW5kZWQgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgIDEtMiAgICAgMS0yIChmYWN0b3J5IGRlZmF1bHQpCisgICAgICAgZGlmZmVyZW50aWFsICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAyLTMgICAgIDItMworCisKKyAgIHdyaXR0ZW4gYnkgamVyZW15IHRoZWxlciA8dGhlbGVyZ0BpYi5jbmVhLmdvdi5hcj4KKworICAgaW5zdGl0dXRvIGJhbHNlaXJvCisgICBjb21pc2lvbiBuYWNpb25hbCBkZSBlbmVyZ2lhIGF0b21pY2EKKyAgIHVuaXZlcnNpZGFkIG5hY2lvbmFsIGRlIGN1eW8KKyAgIGFyZ2VudGluYQorCisgICAyMS1mZWItMjAwOAorICAgICArIGNoYW5nZWQgc3VwcG9ydGVkIGRldmljZXMgc3RyaW5nIChtaXNzdXNlZCB0aGUgW10gYW5kICgpKQorCisgICAxMy1vY3QtMjAwNworICAgICArIGZpcnN0IHRyeQorCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworLy8gYWRkcmVzcyBzY2hlbWUgKHBhZ2UgMi4xNyBvZiB0aGUgbWFudWFsKQorI2RlZmluZSBBRFExMkJfU0laRSAgICAgMTYKKworI2RlZmluZSBBRFExMkJfQ1RSRUcgICAgMHgwMAorI2RlZmluZSBBRFExMkJfU1RJTlIgICAgMHgwMAorI2RlZmluZSBBRFExMkJfT1VUQlIgICAgMHgwNAorI2RlZmluZSBBRFExMkJfQURMT1cgICAgMHgwOAorI2RlZmluZSBBRFExMkJfQURISUcgICAgMHgwOQorI2RlZmluZSBBRFExMkJfQ09OVDAgICAgMHgwYworI2RlZmluZSBBRFExMkJfQ09OVDEgICAgMHgwZAorI2RlZmluZSBBRFExMkJfQ09OVDIgICAgMHgwZQorI2RlZmluZSBBRFExMkJfQ09XT1JEICAgMHgwZgorCisvLyBtYXNrIG9mIHRoZSBiaXQgYXQgU1RJTlIgdG8gY2hlY2sgZW5kIG9mIGNvbnZlcnNpb24KKyNkZWZpbmUgQURRMTJCX0VPQyAgICAgMHgyMAorCisjZGVmaW5lIFRJTUVPVVQgICAgICAgIDIwCisKKy8vIGF2YWlsYWJsZSByYW5nZXMgdGhyb3VnaCB0aGUgUEdBIGdhaW5zCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWRxMTJiX2FpX2JpcG9sYXIgPSB7IDQsIHsKKyAgICAgICAgQklQX1JBTkdFKCA1ICksCisgICAgICAgIEJJUF9SQU5HRSggMiApLAorICAgICAgICBCSVBfUkFOR0UoIDEgKSwKKyAgICAgICAgQklQX1JBTkdFKCAwLjUgKQorfX07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hZHExMmJfYWlfdW5pcG9sYXIgPSB7IDQsIHsKKyAgICAgICAgVU5JX1JBTkdFKCA1ICksCisgICAgICAgIFVOSV9SQU5HRSggMiApLAorICAgICAgICBVTklfUkFOR0UoIDEgKSwKKyAgICAgICAgVU5JX1JBTkdFKCAwLjUgKQorfX07CisKKworCitzdHJ1Y3QgYWRxMTJiX2JvYXJkIHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgaW50IGFpX3NlX2NoYW5zOworICAgICAgICBpbnQgYWlfZGlmZl9jaGFuczsKKyAgICAgICAgaW50IGFpX2JpdHM7CisgICAgICAgIGludCBkaV9jaGFuczsKKyAgICAgICAgaW50IGRvX2NoYW5zOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZHExMmJfYm9hcmQgYWRxMTJiX2JvYXJkc1tdID0geworICAgICAgICB7CisgICAgICAgIG5hbWU6ICAgICAgICAgICAiYWRxMTJiIiwKKyAgICAgICAgYWlfc2VfY2hhbnM6ICAgIDE2LAorICAgICAgICBhaV9kaWZmX2NoYW5zOiAgOCwKKyAgICAgICAgYWlfYml0czogICAgICAgIDEyLAorICAgICAgICBkaV9jaGFuczogICAgICAgNSwKKyAgICAgICAgZG9fY2hhbnM6ICAgICAgIDgKKyAgICAgICAgfQorLy8gcG90ZW50aWFsbHksIG1vcmUgYWRxLWJhc2VkIGRldmljZWQgd2lsbCBiZSBhZGRlZAorLyosCisgICAgICAgIG5hbWU6ICAgICAgICAgICAiYWRxMTJiIiwKKyAgICAgICAgYWlfY2hhbnM6ICAgICAgIDE2LCAgLy8gdGhpcyBpcyBqdXN0IGZvciByZWZlcmVuY2UsIGhhcmRjb2RlZCBhZ2FpbiBsYXRlcgorICAgICAgICBhaV9iaXRzOiAgICAgICAgMTIsCisgICAgICAgIGRpX2NoYW5zOiAgICAgICA4LAorICAgICAgICBkb19jaGFuczogICAgICAgNQorICAgICAgICB9Ki8KK307CisKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGFkcTEyYl9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgYWRxMTJiX3ByaXZhdGUgeworICAgICAgICBpbnQgdW5pcG9sYXI7ICAgICAgICAgIC8qIG9wdGlvbiAyIG9mIGNvbWVkaV9jb25maWcgKDEgaXMgaW9iYXNlKSAqLworICAgICAgICBpbnQgZGlmZmVyZW50aWFsOyAgICAgIC8qIG9wdGlvbiAzIG9mIGNvbWVkaV9jb25maWcgKi8KKyAgICAgICAgaW50IGxhc3RfY2hhbm5lbDsKKyAgICAgICAgaW50IGxhc3RfcmFuZ2U7CisgICAgICAgIHVuc2lnbmVkIGludCBkaWdpdGFsX3N0YXRlOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGFkcTEyYl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBhZHExMmJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgYWRxMTJiX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYWRxMTJiPXsKKyAgICAgICAgZHJpdmVyX25hbWU6ICAgICJhZHExMmIiLAorICAgICAgICBtb2R1bGU6ICAgICAgICAgVEhJU19NT0RVTEUsCisgICAgICAgIGF0dGFjaDogICAgICAgICBhZHExMmJfYXR0YWNoLAorICAgICAgICBkZXRhY2g6ICAgICAgICAgYWRxMTJiX2RldGFjaCwKKyAgICAgICAgYm9hcmRfbmFtZTogICAgICZhZHExMmJfYm9hcmRzWzBdLm5hbWUsCisgICAgICAgIG9mZnNldDogICAgICAgICBzaXplb2Yoc3RydWN0IGFkcTEyYl9ib2FyZCksCisgICAgICAgIG51bV9uYW1lczogICAgICBzaXplb2YoYWRxMTJiX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IGFkcTEyYl9ib2FyZCksCit9OworCitzdGF0aWMgaW50IGFkcTEyYl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBhZHExMmJfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBhZHExMmJfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgYWRxMTJiX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKK3sKKyAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW9iYXNlOworICAgICAgICBpbnQgdW5pcG9sYXIsIGRpZmZlcmVudGlhbDsKKworICAgICAgICBpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKyAgICAgICAgdW5pcG9sYXIgPSBpdC0+b3B0aW9uc1sxXTsKKyAgICAgICAgZGlmZmVyZW50aWFsID0gaXQtPm9wdGlvbnNbMl07CisKKyAgICAgICAgcHJpbnRrKCJjb21lZGklZDogYWRxMTJiIGNhbGxlZCB3aXRoIG9wdGlvbnMgYmFzZT0weCUwM2x4LCAlcyBhbmQgJXNcbiIsZGV2LT5taW5vciwgaW9iYXNlLCAodW5pcG9sYXI9PTEpPyJ1bmlwb2xhciI6ImJpcG9sYXIiLCAoZGlmZmVyZW50aWFsPT0xKT8iZGlmZmVyZW50aWFsIjoic2luZ2xlLWVuZGVkIik7CisKKyAgICAgICAgLyogaWYgbm8gYWRkcmVzcyB3YXMgc3BlY2lmaWVkLCB0cnkgdGhlIGRlZmF1bHQgMHgzMDAgKi8KKyAgICAgICAgaWYgKGlvYmFzZSA9PSAwKSB7CisgICAgICAgICAgcHJpbnRrKCJjb21lZGklZDogYWRxMTJiIHdhcm5pbmc6IEkvTyBiYXNlIGFkZHJlc3Mgbm90IHNwZWNpZmllZC4gVHJ5aW5nIHRoZSBkZWZhdWx0IDB4MzAwLlxuIiwgZGV2LT5taW5vcik7CisgICAgICAgICAgaW9iYXNlID0gMHgzMDA7CisgICAgICAgIH0KKworICAgICAgICBwcmludGsoImNvbWVkaSVkOiBhZHExMmI6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKyAgICAgICAgaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIEFEUTEyQl9TSVpFLCAiYWRxMTJiIikpIHsKKyAgICAgICAgICBwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKyAgICAgICAgICByZXR1cm4gLUVJTzsKKyAgICAgICAgfQorICAgICAgICBkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworLyoKKyAqIEluaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lLiAgTm90ZSB0aGF0IHdlIGNhbiB1c2UgdGhlICJ0aGlzYm9hcmQiCisgKiBtYWNybyBub3csIHNpbmNlIHdlIGp1c3QgaW5pdGlhbGl6ZWQgaXQgaW4gdGhlIGxhc3QgbGluZS4KKyAqLworICAgICAgICBkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKyAgICAgICAgaWYoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYWRxMTJiX3ByaXZhdGUpKSA8IDApCisgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKy8qIGZpbGwgaW4gZGV2cHJpdiBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgZGV2cHJpdi0+dW5pcG9sYXIgPSB1bmlwb2xhcjsKKyAgICAgICAgZGV2cHJpdi0+ZGlmZmVyZW50aWFsID0gZGlmZmVyZW50aWFsOworCWRldnByaXYtPmRpZ2l0YWxfc3RhdGUgPSAwOworLyogaW5pdGlhbGl6ZSBjaGFubmVsIGFuZCByYW5nZSB0byAtMSBzbyB3ZSBtYWtlIHN1cmUgd2UgYWx3YXlzIHdyaXRlCisgICBhdCBsZWFzdCBvbmNlIHRvIHRoZSBDVFJFRyBpbiB0aGUgaW5zdHJ1Y3Rpb24gKi8KKyAgICAgICAgZGV2cHJpdi0+bGFzdF9jaGFubmVsID0gLTE7CisgICAgICAgIGRldnByaXYtPmxhc3RfcmFuZ2UgPSAtMTsKKworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisgICAgICAgIGlmKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKTwwKQorICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICBzID0gZGV2LT5zdWJkZXZpY2VzKzA7CisgICAgICAgIC8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKyAgICAgICAgcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworICAgICAgICBpZiAoZGlmZmVyZW50aWFsKSB7CisgICAgICAgICAgcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFfFNERl9HUk9VTkR8U0RGX0RJRkY7CisgICAgICAgICAgcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haV9kaWZmX2NoYW5zOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRXxTREZfR1JPVU5EOworICAgICAgICAgIHMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YWlfc2VfY2hhbnM7CisgICAgICAgIH0KKworICAgICAgICBpZiAodW5pcG9sYXIpIHsKKyAgICAgICAgICBzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hZHExMmJfYWlfdW5pcG9sYXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYWRxMTJiX2FpX2JpcG9sYXI7CisgICAgICAgIH0KKworICAgICAgICBzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9iaXRzKS0xOworCisKKyAgICAgICAgcy0+bGVuX2NoYW5saXN0ID0gNDsgIC8qIFRoaXMgaXMgdGhlIG1heGltdW0gY2hhbmxpc3QgbGVuZ3RoIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBib2FyZCBjYW4gaGFuZGxlICovCisgICAgICAgIHMtPmluc25fcmVhZCA9IGFkcTEyYl9haV9yaW5zbjsKKworCisgICAgICAgIHMgPSBkZXYtPnN1YmRldmljZXMrMTsKKyAgICAgICAgLyogZGlnaXRhbCBpbnB1dCBzdWJkZXZpY2UgKi8KKyAgICAgICAgcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworICAgICAgICBzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisgICAgICAgIHMtPm5fY2hhbj10aGlzYm9hcmQtPmRpX2NoYW5zOworICAgICAgICBzLT5tYXhkYXRhID0gMTsKKyAgICAgICAgcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKyAgICAgICAgcy0+aW5zbl9iaXRzID0gYWRxMTJiX2RpX2luc25fYml0czsKKworICAgICAgICBzID0gZGV2LT5zdWJkZXZpY2VzKzI7CisgICAgICAgIC8qIGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworICAgICAgICBzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisgICAgICAgIHMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKyAgICAgICAgcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5kb19jaGFuczsKKyAgICAgICAgcy0+bWF4ZGF0YSA9IDE7CisgICAgICAgIHMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisgICAgICAgIHMtPmluc25fYml0cyA9IGFkcTEyYl9kb19pbnNuX2JpdHM7CisKKworICAgICAgICBwcmludGsoImF0dGFjaGVkXG4iKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IGFkcTEyYl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3sKKyAgICAgICAgaWYgKGRldi0+aW9iYXNlKQorICAgICAgICAgIHJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBBRFExMkJfU0laRSk7CisKKyAgICAgICAga2ZyZWUoZGV2cHJpdik7CisKKyAgICAgICAgcHJpbnRrKCJjb21lZGklZDogYWRxMTJiOiByZW1vdmVkXG4iLGRldi0+bWlub3IpOworCisgICAgICAgIHJldHVybiAwOworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KKworc3RhdGljIGludCBhZHExMmJfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQoreworICAgICAgICBpbnQgbiwgaTsKKyAgICAgICAgaW50IHJhbmdlLCBjaGFubmVsOworICAgICAgICB1bnNpZ25lZCBjaGFyIGhpLCBsbywgc3RhdHVzOworCisgICAgICAgIC8qIGNoYW5nZSBjaGFubmVsIGFuZCByYW5nZSBvbmx5IGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyAqLworICAgICAgICByYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKyAgICAgICAgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworICAgICAgICBpZiAoY2hhbm5lbCAhPSBkZXZwcml2LT5sYXN0X2NoYW5uZWwgfHwgcmFuZ2UgIT0gZGV2cHJpdi0+bGFzdF9yYW5nZSkgeworICAgICAgICAgIG91dGIoKHJhbmdlIDw8IDQpIHwgY2hhbm5lbCwgZGV2LT5pb2Jhc2UgKyBBRFExMkJfQ1RSRUcpOworICAgICAgICAgIGNvbWVkaV91ZGVsYXkoNTApOyAgIC8qIHdhaXQgZm9yIHRoZSBtdXggdG8gc2V0dGxlICovCisgICAgICAgIH0KKworICAgICAgICAvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKyAgICAgICAgc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgQURRMTJCX0FETE9XKTsKKworICAgICAgICAvKiBjb252ZXJ0IG4gc2FtcGxlcyAqLworICAgICAgICBmb3Iobj0wOyBuIDwgaW5zbi0+bjsgbisrKXsKKworICAgICAgICAgIC8qIHdhaXQgZm9yIGVuZCBvZiBjb252ZXJ0aW9uICovCisJICBpID0gMDsKKyAgICAgICAgICBkbyB7CisvLyAgICAgICAgICAgIGNvbWVkaV91ZGVsYXkoMSk7CisJICAgIHN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIEFEUTEyQl9TVElOUik7CisgICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMgJiBBRFExMkJfRU9DOworICAgICAgICAgIH0gd2hpbGUgKHN0YXR1cyA9PSAwICYmICsraSA8IFRJTUVPVVQpOworLy8gICAgICAgICAgfSB3aGlsZSAoKytpIDwgMTApOworCisgICAgICAgICAgLyogcmVhZCBkYXRhICovCisgICAgICAgICAgaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBBRFExMkJfQURISUcpOworICAgICAgICAgIGxvID0gaW5iKGRldi0+aW9iYXNlICsgQURRMTJCX0FETE9XKTsKKworICAgICAgICAgIC8vcnRfcHJpbnRrKCJkZWJ1ZzogY2hhbj0lZCByYW5nZT0lZCBzdGF0dXM9JWQgaGk9JWQgbG89JWRcbiIsIGNoYW5uZWwsIHJhbmdlLCBzdGF0dXMsICBoaSwgbG8pOworICAgICAgICAgIGRhdGFbbl0gPSAoaGkgPDwgOCkgfCBsbzsKKworICAgICAgICB9CisKKyAgICAgICAgLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKyAgICAgICAgcmV0dXJuIG47Cit9CisKKworc3RhdGljIGludCBhZHExMmJfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIAlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQoreworCisgICAgICAgIC8qIG9ubHkgYml0cyAwLTQgaGF2ZSBpbmZvcm1hdGlvbiBhYm91dCBkaWdpdGFsIGlucHV0cyAqLworICAgICAgICBkYXRhWzFdID0gKGluYihkZXYtPmlvYmFzZStBRFExMkJfU1RJTlIpICYgKDB4MWYpKTsKKworICAgICAgICByZXR1cm4gMjsKK30KKworCitzdGF0aWMgaW50IGFkcTEyYl9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisgICAgICAgIGludCBjaGFubmVsOworCisJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IDg7IGNoYW5uZWwrKykKKwkgIGlmICgoKGRhdGFbMF0+PmNoYW5uZWwpICYgMHgwMSkgIT0gMCkKKyAgICAgICAgICAgIG91dGIoKCgoZGF0YVsxXT4+Y2hhbm5lbCkmMHgwMSk8PDMpIHwgY2hhbm5lbCwgZGV2LT5pb2Jhc2UgKyBBRFExMkJfT1VUQlIpOworCisgICAgICAgIC8qIHN0b3JlIGluZm9ybWF0aW9uIHRvIHJldHJpZXZlIHdoZW4gYXNrZWQgZm9yIHJlYWRpbmcgKi8KKyAgICAgICAgaWYgKGRhdGFbMF0pIHsKKyAgICAgICAgICBkZXZwcml2LT5kaWdpdGFsX3N0YXRlICY9IH5kYXRhWzBdOworICAgICAgICAgIGRldnByaXYtPmRpZ2l0YWxfc3RhdGUgfD0gKGRhdGFbMF0mZGF0YVsxXSk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhWzFdID0gZGV2cHJpdi0+ZGlnaXRhbF9zdGF0ZTsKKworICAgICAgICByZXR1cm4gMjsKK30KKworCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FkcTEyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWFjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYwpAQCAtMCwwICsxLDE1NjggQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCisgKgorICogQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KKyAqCisgKiBUaGFua3MgdG8gWmhlbkdhbmcgU2hhbmcgPFpoZW5HYW5nLlNoYW5nQEFkdmFudGVjaC5jb20uY24+CisgKiBmb3IgdGVzdGluZyBhbmQgaW5mb3JtYXRpb25zLgorICoKKyAqICBoYXJkd2FyZSBkcml2ZXIgZm9yIEFkdmFudGVjaCBjYXJkczoKKyAqICAgY2FyZDogICBQQ0ktMTcxMCwgUENJLTE3MTBIRywgUENJLTE3MTEsIFBDSS0xNzEzLCBQQ0ktMTcyMCwgUENJLTE3MzEKKyAqICAgZHJpdmVyOiBwY2kxNzEwLCAgcGNpMTcxMGhnLCAgcGNpMTcxMSwgIHBjaTE3MTMsICBwY2kxNzIwLCAgcGNpMTczMQorICoKKyAqIE9wdGlvbnM6CisgKiAgWzBdIC0gUENJIGJ1cyBudW1iZXIgLSBpZiBidXMgbnVtYmVyIGFuZCBzbG90IG51bWJlciBhcmUgMCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZHJpdmVyIHNlYXJjaCBmb3IgZmlyc3QgdW51c2VkIGNhcmQKKyAqICBbMV0gLSBQQ0kgc2xvdCBudW1iZXIKKyAqCisqLworLyoKK0RyaXZlcjogYWR2X3BjaTE3MTAKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENJLTE3MTAsIFBDSS0xNzEwSEcsIFBDSS0xNzExLCBQQ0ktMTcxMywKKyAgICAgICAgICAgICBBZHZhbnRlY2ggUENJLTE3MjAsIFBDSS0xNzMxCitBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorRGV2aWNlczogW0FkdmFudGVjaF0gUENJLTE3MTAgKGFkdl9wY2kxNzEwKSwgUENJLTE3MTBIRyAocGNpMTcxMGhnKSwKKyAgUENJLTE3MTEgKGFkdl9wY2kxNzEwKSwgUENJLTE3MTMsIFBDSS0xNzIwLAorICBQQ0ktMTczMQorU3RhdHVzOiB3b3JrcworCitUaGlzIGRyaXZlciBzdXBwb3J0cyBBSSwgQU8sIERJIGFuZCBETyBzdWJkZXZpY2VzLgorQUkgc3ViZGV2aWNlIHN1cHBvcnRzIGNtZCBhbmQgaW5zbiBpbnRlcmZhY2UsCitvdGhlciBzdWJkZXZpY2VzIHN1cHBvcnQgb25seSBpbnNuIGludGVyZmFjZS4KKworVGhlIFBDSS0xNzEwIGFuZCBQQ0ktMTcxMEhHIGhhdmUgdGhlIHNhbWUgUENJIGRldmljZSBJRCwgc28gdGhlCitkcml2ZXIgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSwgYXMgd291bGQgYmUgbm9ybWFsIGZvciBhCitQQ0kgZHJpdmVyLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSQorICAgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiYW1jY19zNTkzMy5oIgorCisjZGVmaW5lIFBDSTE3MXhfUEFSQU5PSURDSEVDSwkvKiBpZiBkZWZpbmVkLCB0aGVuIGlzIHVzZWQgY29kZSB3aGljaCBjb250cm9sIGNvcnJlY3QgY2hhbm5lbCBudW1iZXIgb24gZXZlcnkgMTIgYml0IHNhbXBsZSAqLworCisjdW5kZWYgUENJMTcxWF9FWFRERUJVRworCisjZGVmaW5lIERSVl9OQU1FICJhZHZfcGNpMTcxMCIKKworI3VuZGVmIERQUklOVEsKKyNpZmRlZiBQQ0kxNzFYX0VYVERFQlVHCisjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBydF9wcmludGsoZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCisjZW5kaWYKKworLy8gaGFyZHdhcmUgdHlwZXMgb2YgdGhlIGNhcmRzCisjZGVmaW5lIFRZUEVfUENJMTcxWAkwCisjZGVmaW5lIFRZUEVfUENJMTcxMwkyCisjZGVmaW5lIFRZUEVfUENJMTcyMAkzCisKKyNkZWZpbmUgSU9SQU5HRV8xNzF4IAkzMgorI2RlZmluZSBJT1JBTkdFXzE3MjAgCTE2CisKKyNkZWZpbmUgUENJMTcxeF9BRF9EQVRBCSAwCS8qIFI6ICAgQS9EIGRhdGEgKi8KKyNkZWZpbmUgUENJMTcxeF9TT0ZUVFJHCSAwCS8qIFc6ICAgc29mdCB0cmlnZ2VyIGZvciBBL0QgKi8KKyNkZWZpbmUgUENJMTcxeF9SQU5HRQkgMgkvKiBXOiAgIEEvRCBnYWluL3JhbmdlIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3MXhfTVVYCSA0CS8qIFc6ICAgQS9EIG11bHRpcGxleG9yIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJMTcxeF9TVEFUVVMJIDYJLyogUjogICBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcxeF9DT05UUk9MCSA2CS8qIFc6ICAgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBQQ0kxNzF4X0NMUklOVAkgOAkvKiBXOiAgIGNsZWFyIGludGVycnVwdHMgcmVxdWVzdCAqLworI2RlZmluZSBQQ0kxNzF4X0NMUkZJRk8JIDkJLyogVzogICBjbGVhciBGSUZPICovCisjZGVmaW5lIFBDSTE3MXhfREExCTEwCS8qIFc6ICAgRC9BIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3MXhfREEyCTEyCS8qIFc6ICAgRC9BIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3MXhfREFSRUYJMTQJLyogVzogICBEL0EgcmVmZXJlbmNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJMTcxeF9ESQkxNgkvKiBSOiAgIGRpZ2kgaW5wdXRzICovCisjZGVmaW5lIFBDSTE3MXhfRE8JMTYJLyogUjogICBkaWdpIGlucHV0cyAqLworI2RlZmluZSBQQ0kxNzF4X0NOVDAJMjQJLyogUi9XOiA4MjU0IGNvdXRlciAwICovCisjZGVmaW5lIFBDSTE3MXhfQ05UMQkyNgkvKiBSL1c6IDgyNTQgY291dGVyIDEgKi8KKyNkZWZpbmUgUENJMTcxeF9DTlQyCTI4CS8qIFIvVzogODI1NCBjb3V0ZXIgMiAqLworI2RlZmluZSBQQ0kxNzF4X0NOVENUUkwJMzAJLyogVzogICA4MjU0IGNvdW50ZXIgY29udHJvbCAqLworCisvLyB1cHBlciBiaXRzIGZyb20gc3RhdHVzIHJlZ2lzdGVyIChQQ0kxNzF4X1NUQVRVUykgKGxvd2VyIGlzIHNhbWUgd290aCBjb250cm9sIHJlZykKKyNkZWZpbmUJU3RhdHVzX0ZFCTB4MDEwMAkvKiAxPUZJRk8gaXMgZW1wdHkgKi8KKyNkZWZpbmUgU3RhdHVzX0ZICTB4MDIwMAkvKiAxPUZJRk8gaXMgaGFsZiBmdWxsICovCisjZGVmaW5lIFN0YXR1c19GRgkweDA0MDAJLyogMT1GSUZPIGlzIGZ1bGwsIGZhdGFsIGVycm9yICovCisjZGVmaW5lIFN0YXR1c19JUlEJMHgwODAwCS8qIDE9SVJRIG9jY3VyZWQgKi8KKy8vIGJpdHMgZnJvbSBjb250cm9sIHJlZ2lzdGVyIChQQ0kxNzF4X0NPTlRST0wpCisjZGVmaW5lIENvbnRyb2xfQ05UMAkweDAwNDAJLyogMT1DTlQwIGhhdmUgZXh0ZXJuYWwgc291cmNlLCAwPWhhdmUgaW50ZXJuYWwgMTAwa0h6IHNvdXJjZSAqLworI2RlZmluZSBDb250cm9sX09ORUZICTB4MDAyMAkvKiAxPUlSUSBvbiBGSUZPIGlzIGhhbGYgZnVsbCwgMD1ldmVyeSBzYW1wbGUgKi8KKyNkZWZpbmUgQ29udHJvbF9JUlFFTgkweDAwMTAJLyogMT1lbmFibGUgSVJRICovCisjZGVmaW5lIENvbnRyb2xfR0FURQkweDAwMDgJLyogMT1lbmFibGUgZXh0ZXJuYWwgdHJpZ2dlciBHQVRFICg4MjU0PykgKi8KKyNkZWZpbmUgQ29udHJvbF9FWFQJMHgwMDA0CS8qIDE9ZXh0ZXJuYWwgdHJpZ2dlciBzb3VyY2UgKi8KKyNkZWZpbmUgQ29udHJvbF9QQUNFUgkweDAwMDIJLyogMT1lbmFibGUgaW50ZXJuYWwgODI1NCB0cmlnZ2VyIHNvdXJjZSAqLworI2RlZmluZSBDb250cm9sX1NXCTB4MDAwMQkvKiAxPWVuYWJsZSBzb2Z0d2FyZSB0cmlnZ2VyIHNvdXJjZSAqLworLy8gYml0cyBmcm9tIGNvdW50ZXIgY29udHJvbCByZWdpc3RlciAoUENJMTcxeF9DTlRDVFJMKQorI2RlZmluZSBDb3VudGVyX0JDRCAgICAgMHgwMDAxCS8qIDAgPSBiaW5hcnkgY291bnRlciwgMSA9IEJDRCBjb3VudGVyICovCisjZGVmaW5lIENvdW50ZXJfTTAgICAgICAweDAwMDIJLyogTTAtTTIgc2VsZWN0IG1vZGVzIDAtNSAqLworI2RlZmluZSBDb3VudGVyX00xICAgICAgMHgwMDA0CS8qIDAwMCA9IG1vZGUgMCwgMDEwID0gbW9kZSAyIC4uLiAqLworI2RlZmluZSBDb3VudGVyX00yICAgICAgMHgwMDA4CisjZGVmaW5lIENvdW50ZXJfUlcwICAgICAweDAwMTAJLyogUlcwL1JXMSBzZWxlY3QgcmVhZC93cml0ZSBtb2RlICovCisjZGVmaW5lIENvdW50ZXJfUlcxICAgICAweDAwMjAKKyNkZWZpbmUgQ291bnRlcl9TQzAgICAgIDB4MDA0MAkvKiBTZWxlY3QgQ291bnRlci4gT25seSAwMCBvciAxMSBtYXkgKi8KKyNkZWZpbmUgQ291bnRlcl9TQzEgICAgIDB4MDA4MAkvKiBiZSB1c2VkLCAwMCBmb3IgQ05UMCwgMTEgZm9yIHJlYWQtYmFjayBjb21tYW5kICovCisKKyNkZWZpbmUgUENJMTcyMF9EQTAJIDAJLyogVzogICBEL0EgcmVnaXN0ZXIgMCAqLworI2RlZmluZSBQQ0kxNzIwX0RBMQkgMgkvKiBXOiAgIEQvQSByZWdpc3RlciAxICovCisjZGVmaW5lIFBDSTE3MjBfREEyCSA0CS8qIFc6ICAgRC9BIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgUENJMTcyMF9EQTMJIDYJLyogVzogICBEL0EgcmVnaXN0ZXIgMyAqLworI2RlZmluZSBQQ0kxNzIwX1JBTkdFCSA4CS8qIFIvVzogRC9BIHJhbmdlIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3MjBfU1lOQ09VVAkgOQkvKiBXOiAgIEQvQSBzeW5jaHJvbml6ZWQgb3V0cHV0IHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3MjBfU1lOQ09OVAkxNQkvKiBSL1c6IEQvQSBzeW5jaHJvbml6ZWQgY29udHJvbCAqLworCisvLyBEL0Egc3luY2hyb25pemVkIGNvbnRyb2wgKFBDSTE3MjBfU1lOQ09OVCkKKyNkZWZpbmUgU3luY29udF9TQzAJIDEJLyogc2V0IHN5bmNocm9ub3VzIG91dHB1dCBtb2RlICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kxNzEwXzMgPSB7IDksIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSkKKwl9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciByYW5nZV9jb2Rlc19wY2kxNzEwXzNbXSA9CisJeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDEwLCAweDExLCAweDEyLCAweDEzIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kxNzEwaGcgPSB7IDEyLCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjA1KSwKKwkJCUJJUF9SQU5HRSgwLjAwNSksCisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wMSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCQlVTklfUkFOR0UoMC4wMSkKKwl9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciByYW5nZV9jb2Rlc19wY2kxNzEwaGdbXSA9CisJeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLAorCQkweDEzIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kxN3gxID0geyA1LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpCisJfQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgcmFuZ2VfY29kZXNfcGNpMTd4MVtdID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kxNzIwID0geyA0LCB7CisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEwKQorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kxNzF4X2RhID0geyAyLCB7CisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMTApLAorCX0KK307CisKK3N0YXRpYyBpbnQgcGNpMTcxMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2kxNzEwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGJvYXJkIG5hbWUKKwlpbnQgZGV2aWNlX2lkOworCWludCBpb3JhbmdlOwkJLy8gSS9PIHJhbmdlIGxlbgorCWNoYXIgaGF2ZV9pcnE7CQkvLyAxPWNhcmQgc3VwcG9ydCBJUlEKKwljaGFyIGNhcmR0eXBlOwkJLy8gMD0xNzEwJiBjby4gMj0xNzEzLCAuLi4KKwlpbnQgbl9haWNoYW47CQkvLyBudW0gb2YgQS9EIGNoYW5zCisJaW50IG5fYWljaGFuZDsJCS8vIG51bSBvZiBBL0QgY2hhbnMgaW4gZGlmZiBtb2RlCisJaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIEQvQSBjaGFucworCWludCBuX2RpY2hhbjsJCS8vIG51bSBvZiBESSBjaGFucworCWludCBuX2RvY2hhbjsJCS8vIG51bSBvZiBETyBjaGFucworCWludCBuX2NvdW50ZXI7CQkvLyBudW0gb2YgY291bnRlcnMKKwlpbnQgYWlfbWF4ZGF0YTsJCS8vIHJlc29sdXRpb24gb2YgQS9ECisJaW50IGFvX21heGRhdGE7CQkvLyByZXNvbHV0aW9uIG9mIEQvQQorCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYWk7CS8vIHJhbmdlbGlzdCBmb3IgQS9ECisJY29uc3QgY2hhciAqcmFuZ2Vjb2RlX2FpOwkvLyByYW5nZSBjb2RlcyBmb3IgcHJvZ3JhbW1pbmcKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvLyByYW5nZWxpc3QgZm9yIEQvQQorCXVuc2lnbmVkIGludCBhaV9uc19taW47CS8vIG1heCBzYW1wbGUgc3BlZWQgb2YgY2FyZCB2IG5zCisJdW5zaWduZWQgaW50IGZpZm9faGFsZl9zaXplOwkvLyBzaXplIG9mIEZJRk8vMgorfTsKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaTE3MTBfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTcxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzEzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTcyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTE3MTBfcGNpX3RhYmxlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0geworCXsicGNpMTcxMCIsIDB4MTcxMCwKKwkJSU9SQU5HRV8xNzF4LCAxLCBUWVBFX1BDSTE3MVgsCisJCTE2LCA4LCAyLCAxNiwgMTYsIDEsIDB4MGZmZiwgMHgwZmZmLAorCQkmcmFuZ2VfcGNpMTcxMF8zLCByYW5nZV9jb2Rlc19wY2kxNzEwXzMsCisJCSZyYW5nZV9wY2kxNzF4X2RhLAorCQkxMDAwMCwgMjA0OH0sCisJeyJwY2kxNzEwaGciLCAweDE3MTAsCisJCUlPUkFOR0VfMTcxeCwgMSwgVFlQRV9QQ0kxNzFYLAorCQkxNiwgOCwgMiwgMTYsIDE2LCAxLCAweDBmZmYsIDB4MGZmZiwKKwkJJnJhbmdlX3BjaTE3MTBoZywgcmFuZ2VfY29kZXNfcGNpMTcxMGhnLAorCQkmcmFuZ2VfcGNpMTcxeF9kYSwKKwkJMTAwMDAsIDIwNDh9LAorCXsicGNpMTcxMSIsIDB4MTcxMSwKKwkJSU9SQU5HRV8xNzF4LCAxLCBUWVBFX1BDSTE3MVgsCisJCTE2LCAwLCAyLCAxNiwgMTYsIDEsIDB4MGZmZiwgMHgwZmZmLAorCQkmcmFuZ2VfcGNpMTd4MSwgcmFuZ2VfY29kZXNfcGNpMTd4MSwgJnJhbmdlX3BjaTE3MXhfZGEsCisJCTEwMDAwLCA1MTJ9LAorCXsicGNpMTcxMyIsIDB4MTcxMywKKwkJSU9SQU5HRV8xNzF4LCAxLCBUWVBFX1BDSTE3MTMsCisJCTMyLCAxNiwgMCwgMCwgMCwgMCwgMHgwZmZmLCAweDAwMDAsCisJCSZyYW5nZV9wY2kxNzEwXzMsIHJhbmdlX2NvZGVzX3BjaTE3MTBfMywgTlVMTCwKKwkJMTAwMDAsIDIwNDh9LAorCXsicGNpMTcyMCIsIDB4MTcyMCwKKwkJSU9SQU5HRV8xNzIwLCAwLCBUWVBFX1BDSTE3MjAsCisJCTAsIDAsIDQsIDAsIDAsIDAsIDB4MDAwMCwgMHgwZmZmLAorCQlOVUxMLCBOVUxMLCAmcmFuZ2VfcGNpMTcyMCwKKwkJMCwgMH0sCisJeyJwY2kxNzMxIiwgMHgxNzMxLAorCQlJT1JBTkdFXzE3MXgsIDEsIFRZUEVfUENJMTcxWCwKKwkJMTYsIDAsIDAsIDE2LCAxNiwgMCwgMHgwZmZmLCAweDAwMDAsCisJCSZyYW5nZV9wY2kxN3gxLCByYW5nZV9jb2Rlc19wY2kxN3gxLCBOVUxMLAorCQkxMDAwMCwgNTEyfSwKKwkvLyBkdW1teSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGRyaXZlciBuYW1lCisJey5uYW1lID0gRFJWX05BTUV9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IGJvYXJkdHlwZSkpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNpMTcxMCA9IHsKKwkuZHJpdmVyX25hbWUgPSBEUlZfTkFNRSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmF0dGFjaCA9IHBjaTE3MTBfYXR0YWNoLAorCS5kZXRhY2ggPSBwY2kxNzEwX2RldGFjaCwKKwkubnVtX25hbWVzID0gbl9ib2FyZHR5cGVzLAorCS5ib2FyZF9uYW1lID0gJmJvYXJkdHlwZXNbMF0ubmFtZSwKKwkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpLAorfTsKKworc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSB7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsJLy8gcHRyIHRvIFBDSSBkZXZpY2UKKwljaGFyIHZhbGlkOwkJLy8gY2FyZCBpcyB1c2FibGUKKwljaGFyIG5ldmVyZW5kaW5nX2FpOwkvLyB3ZSBkbyB1bmxpbWl0ZWQgQUkKKwl1bnNpZ25lZCBpbnQgQ250cmxSZWc7CS8vIENvbnRyb2wgcmVnaXN0ZXIKKwl1bnNpZ25lZCBpbnQgaTgyNTRfb3NjX2Jhc2U7CS8vIGZyZXF1ZW5jZSBvZiBvbmJvYXJkIG9zY2lsYXRvcgorCXVuc2lnbmVkIGludCBhaV9kbzsJLy8gd2hhdCBkbyBBST8gMD1ub3RoaW5nLCAxIHRvIDQgbW9kZQorCXVuc2lnbmVkIGludCBhaV9hY3Rfc2NhbjsJLy8gaG93IG1hbnkgc2NhbnMgd2UgZmluaXNoZWQKKwl1bnNpZ25lZCBpbnQgYWlfYWN0X2NoYW47CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBhY3R1YWwgc2NhbgorCXVuc2lnbmVkIGludCBhaV9idWZfcHRyOwkvLyBkYXRhIGJ1ZmZlciBwdHIgaW4gc2FtcGxlcworCXVuc2lnbmVkIGNoYXIgYWlfZW9zOwkvLyAxPUVPUyB3YWtlIHVwCisJdW5zaWduZWQgY2hhciBhaV9ldDsKKwl1bnNpZ25lZCBpbnQgYWlfZXRfQ250cmxSZWc7CisJdW5zaWduZWQgaW50IGFpX2V0X011eFZhbDsKKwl1bnNpZ25lZCBpbnQgYWlfZXRfZGl2MSwgYWlfZXRfZGl2MjsKKwl1bnNpZ25lZCBpbnQgYWN0X2NoYW5saXN0WzMyXTsJLy8gbGlzdCBvZiBzY2FuZWQgY2hhbm5lbAorCXVuc2lnbmVkIGNoYXIgYWN0X2NoYW5saXN0X2xlbjsJLy8gbGVuIG9mIHNjYW5saXN0CisJdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfcG9zOwkvLyBhY3R1YWwgcG9zaXRpb24gaW4gTVVYIGxpc3QKKwl1bnNpZ25lZCBjaGFyIGRhX3JhbmdlczsJLy8gY29weSBvZiBEL0Egb3V0cGl0IHJhbmdlIHJlZ2lzdGVyCisJdW5zaWduZWQgaW50IGFpX3NjYW5zOwkvLyBsZW4gb2Ygc2Nhbmxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfbl9jaGFuOwkvLyBob3cgbWFueSBjaGFubmVscyBpcyBtZWFzdXJlZAorCXVuc2lnbmVkIGludCAqYWlfY2hhbmxpc3Q7CS8vIGFjdGF1bCBjaGFubGlzdAorCXVuc2lnbmVkIGludCBhaV9mbGFnczsJLy8gZmxhZ2xpc3QKKwl1bnNpZ25lZCBpbnQgYWlfZGF0YV9sZW47CS8vIGxlbiBvZiBkYXRhIGJ1ZmZlcgorCXNob3J0ICphaV9kYXRhOwkvLyBkYXRhIGJ1ZmZlcgorCXVuc2lnbmVkIGludCBhaV90aW1lcjE7CS8vIHRpbWVycworCXVuc2lnbmVkIGludCBhaV90aW1lcjI7CisJc2hvcnQgYW9fZGF0YVs0XTsJLy8gZGF0YSBvdXRwdXQgYnVmZmVyCisJdW5zaWduZWQgaW50IGNudDBfd3JpdGVfd2FpdDsJLy8gYWZ0ZXIgYSB3cml0ZSwgd2FpdCBmb3IgdXBkYXRlIG9mIHRoZSBpbnRlcm5hbCBzdGF0ZQorfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworc3RhdGljIGludCBjaGVja19jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuKTsKK3N0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4sIHVuc2lnbmVkIGludCBzZWdsZW4pOworc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKTsKK3N0YXRpYyBpbnQgcGNpMTcxMF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHBjaTE3MXhfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG11eG9uZWNoYW5bXSA9IHsgMHgwMDAwLCAweDAxMDEsIDB4MDIwMiwgMHgwMzAzLCAweDA0MDQsIDB4MDUwNSwgMHgwNjA2LCAweDA3MDcsCS8vIHVzZWQgZm9yIGdhaW4gbGlzdCBwcm9ncmFtbWluZworCTB4MDgwOCwgMHgwOTA5LCAweDBhMGEsIDB4MGIwYiwgMHgwYzBjLCAweDBkMGQsIDB4MGUwZSwgMHgwZjBmLAorCTB4MTAxMCwgMHgxMTExLCAweDEyMTIsIDB4MTMxMywgMHgxNDE0LCAweDE1MTUsIDB4MTYxNiwgMHgxNzE3LAorCTB4MTgxOCwgMHgxOTE5LCAweDFhMWEsIDB4MWIxYiwgMHgxYzFjLCAweDFkMWQsIDB4MWUxZSwgMHgxZjFmCit9OworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2luc25fcmVhZF9haShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIHRpbWVvdXQ7CisjaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCisJdW5zaWduZWQgaW50IGlkYXRhOworI2VuZGlmCisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MXhfaW5zbl9yZWFkX2FpKC4uLilcbiIpOworCWRldnByaXYtPkNudHJsUmVnICY9IENvbnRyb2xfQ05UMDsKKwlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX1NXOwkvLyBzZXQgc29mdHdhcmUgdHJpZ2dlcgorCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJGSUZPKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOworCisJc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgJmluc24tPmNoYW5zcGVjLCAxLCAxKTsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEEgU1Q9JTR4IElPPSV4XG4iLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUyksCisJCWRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfU09GVFRSRyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgQiBuPSVkIFNUPSU0eFxuIiwgbiwKKwkJCWludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKSk7CisJCS8vY29tZWRpX3VkZWxheSgxKTsKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgQyBuPSVkIFNUPSU0eFxuIiwgbiwKKwkJCWludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKSk7CisJCXRpbWVvdXQgPSAxMDA7CisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWlmICghKGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKSAmIFN0YXR1c19GRSkpCisJCQkJZ290byBjb252X2ZpbmlzaDsKKwkJCWlmICghKHRpbWVvdXQgJSAxMCkpCisJCQkJRFBSSU5USygiYWR2X3BjaTE3MTAgRCBuPSVkIHRtPSVkIFNUPSU0eFxuIiwgbiwKKwkJCQkJdGltZW91dCwKKwkJCQkJaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpKTsKKwkJfQorCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIGluc24gdGltZW91dCIpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJGSUZPKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsKKwkJZGF0YVtuXSA9IDA7CisJCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxeF9pbnNuX3JlYWRfYWkoLi4uKSBuPSVkXG4iLCBuKTsKKwkJcmV0dXJuIC1FVElNRTsKKworCSAgICAgIGNvbnZfZmluaXNoOgorI2lmZGVmIFBDSTE3MXhfUEFSQU5PSURDSEVDSworCQlpZGF0YSA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQURfREFUQSk7CisJCWlmICh0aGlzX2JvYXJkLT5jYXJkdHlwZSAhPSBUWVBFX1BDSTE3MTMpCisJCQlpZiAoKGlkYXRhICYgMHhmMDAwKSAhPSBkZXZwcml2LT5hY3RfY2hhbmxpc3RbMF0pIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIGluc24gZGF0YSBkcm9wdXQhIik7CisJCQkJcmV0dXJuIC1FVElNRTsKKwkJCX0KKwkJZGF0YVtuXSA9IGlkYXRhICYgMHgwZmZmOworI2Vsc2UKKwkJZGF0YVtuXSA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQURfREFUQSkgJiAweDBmZmY7CisjZW5kaWYKKworCX0KKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IHBjaTE3MXhfaW5zbl9yZWFkX2FpKC4uLikgbj0lZFxuIiwgbik7CisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl93cml0ZV9hbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGNoYW4sIHJhbmdlLCBvZnM7CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJaWYgKGNoYW4pIHsKKwkJZGV2cHJpdi0+ZGFfcmFuZ2VzICY9IDB4ZmI7CisJCWRldnByaXYtPmRhX3JhbmdlcyB8PSAocmFuZ2UgPDwgMik7CisJCW91dHcoZGV2cHJpdi0+ZGFfcmFuZ2VzLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfREFSRUYpOworCQlvZnMgPSBQQ0kxNzF4X0RBMjsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5kYV9yYW5nZXMgJj0gMHhmZTsKKwkJZGV2cHJpdi0+ZGFfcmFuZ2VzIHw9IHJhbmdlOworCQlvdXR3KGRldnByaXYtPmRhX3JhbmdlcywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0RBUkVGKTsKKwkJb2ZzID0gUENJMTcxeF9EQTE7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykKKwkJb3V0dyhkYXRhW25dLCBkZXYtPmlvYmFzZSArIG9mcyk7CisKKwlkZXZwcml2LT5hb19kYXRhW2NoYW5dID0gZGF0YVtuXTsKKworCXJldHVybiBuOworCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9yZWFkX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQorCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fZGF0YVtjaGFuXTsKKworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2luc25fYml0c19kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVsxXSA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfREkpOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9iaXRzX2RvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0RPKTsKKwl9CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9jb3VudGVyX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBtc2IsIGxzYiwgY2NudHJsOworCWludCBpOworCisJY2NudHJsID0gMHhEMjsJCS8qIGNvdW50IG9ubHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCW91dHcoY2NudHJsLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UQ1RSTCk7CisKKwkJbHNiID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQwKSAmIDB4RkY7CisJCW1zYiA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UMCkgJiAweEZGOworCisJCWRhdGFbMF0gPSBsc2IgfCAobXNiIDw8IDgpOworCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2luc25fY291bnRlcl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdWludCBtc2IsIGxzYiwgY2NudHJsLCBzdGF0dXM7CisKKwlsc2IgPSBkYXRhWzBdICYgMHgwMEZGOworCW1zYiA9IChkYXRhWzBdICYgMHhGRjAwKSA+PiA4OworCisJLyogd3JpdGUgbHNiLCB0aGVuIG1zYiAqLworCW91dHcobHNiLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UMCk7CisJb3V0dyhtc2IsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQwKTsKKworCWlmIChkZXZwcml2LT5jbnQwX3dyaXRlX3dhaXQpIHsKKwkJLyogd2FpdCBmb3IgdGhlIG5ldyBjb3VudCB0byBiZSBsb2FkZWQgKi8KKwkJY2NudHJsID0gMHhFMjsKKwkJZG8geworCQkJb3V0dyhjY250cmwsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlRDVFJMKTsKKwkJCXN0YXR1cyA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UMCkgJiAweEZGOworCQl9IHdoaWxlIChzdGF0dXMgJiAweDQwKTsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX2NvdW50ZXJfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKyNpZmRlZiB1bnVzZWQKKwkvKiBUaGlzIGRvZXNuJ3Qgd29yayBsaWtlIGEgbm9ybWFsIENvbWVkaSBjb3VudGVyIGNvbmZpZyAqLworCXVpbnQgY2NudHJsID0gMDsKKworCWRldnByaXYtPmNudDBfd3JpdGVfd2FpdCA9IGRhdGFbMF0gJiAweDIwOworCisJLyogaW50ZXJuYWwgb3IgZXh0ZXJuYWwgY2xvY2s/ICovCisJaWYgKCEoZGF0YVswXSAmIDB4MTApKSB7CS8qIGludGVybmFsICovCisJCWRldnByaXYtPkNudHJsUmVnICY9IH5Db250cm9sX0NOVDA7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+Q250cmxSZWcgfD0gQ29udHJvbF9DTlQwOworCX0KKwlvdXR3KGRldnByaXYtPkNudHJsUmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ09OVFJPTCk7CisKKwlpZiAoZGF0YVswXSAmIDB4MDEpCisJCWNjbnRybCB8PSBDb3VudGVyX00wOworCWlmIChkYXRhWzBdICYgMHgwMikKKwkJY2NudHJsIHw9IENvdW50ZXJfTTE7CisJaWYgKGRhdGFbMF0gJiAweDA0KQorCQljY250cmwgfD0gQ291bnRlcl9NMjsKKwlpZiAoZGF0YVswXSAmIDB4MDgpCisJCWNjbnRybCB8PSBDb3VudGVyX0JDRDsKKwljY250cmwgfD0gQ291bnRlcl9SVzA7CS8qIHNldCByZWFkL3dyaXRlIG1vZGUgKi8KKwljY250cmwgfD0gQ291bnRlcl9SVzE7CisJb3V0dyhjY250cmwsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlRDVFJMKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MjBfaW5zbl93cml0ZV9hbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIHJhbmdlcmVnLCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlcmVnID0gZGV2cHJpdi0+ZGFfcmFuZ2VzICYgKH4oMHgwMyA8PCAoY2hhbiA8PCAxKSkpOworCXJhbmdlcmVnIHw9IChDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykgPDwgKGNoYW4gPDwgMSkpOworCWlmIChyYW5nZXJlZyAhPSBkZXZwcml2LT5kYV9yYW5nZXMpIHsKKwkJb3V0YihyYW5nZXJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX1JBTkdFKTsKKwkJZGV2cHJpdi0+ZGFfcmFuZ2VzID0gcmFuZ2VyZWc7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlvdXR3KGRhdGFbbl0sIGRldi0+aW9iYXNlICsgUENJMTcyMF9EQTAgKyAoY2hhbiA8PCAxKSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX1NZTkNPVVQpOwkvLyB1cGRhdGUgb3V0cHV0cworCX0KKworCWRldnByaXYtPmFvX2RhdGFbY2hhbl0gPSBkYXRhW25dOworCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBpbnRlcnJ1cHRfcGNpMTcxMF9ldmVyeV9zYW1wbGUodm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaW50IG07CisjaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCisJc2hvcnQgc2FtcGw7CisjZW5kaWYKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogaW50ZXJydXB0X3BjaTE3MTBfZXZlcnlfc2FtcGxlKC4uLilcbiIpOworCW0gPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUyk7CisJaWYgKG0gJiBTdGF0dXNfRkUpIHsKKwkJcnRfcHJpbnRrKCJjb21lZGklZDogQS9EIEZJRk8gZW1wdHkgKCU0eClcbiIsIGRldi0+bWlub3IsIG0pOworCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm47CisJfQorCWlmIChtICYgU3RhdHVzX0ZGKSB7CisJCXJ0X3ByaW50aworCQkJKCJjb21lZGklZDogQS9EIEZJRk8gRnVsbCBzdGF0dXMgKEZhdGFsIEVycm9yISkgKCU0eClcbiIsCisJCQlkZXYtPm1pbm9yLCBtKTsKKwkJcGNpMTcxeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuOworCX0KKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CS8vIGNsZWFyIG91ciBJTlQgcmVxdWVzdAorCisJRFBSSU5USygiRk9SICIpOworCWZvciAoOyAhKGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKSAmIFN0YXR1c19GRSk7KSB7CisjaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCisJCXNhbXBsID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKTsKKwkJRFBSSU5USygiJTA0eDoiLCBzYW1wbCk7CisJCWlmICh0aGlzX2JvYXJkLT5jYXJkdHlwZSAhPSBUWVBFX1BDSTE3MTMpCisJCQlpZiAoKHNhbXBsICYgMHhmMDAwKSAhPQorCQkJCWRldnByaXYtPmFjdF9jaGFubGlzdFtzLT5hc3luYy0+Y3VyX2NoYW5dKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY29tZWRpOiBBL0QgZGF0YSBkcm9wb3V0OiByZWNlaXZlZCBkYXRhIGZyb20gY2hhbm5lbCAlZCwgZXhwZWN0ZWQgJWQhXG4iLAorCQkJCQkoc2FtcGwgJiAweGYwMDApID4+IDEyLAorCQkJCQkoZGV2cHJpdi0+YWN0X2NoYW5saXN0W3MtPmFzeW5jLT4KKwkJCQkJCQljdXJfY2hhbl0gJiAweGYwMDApID4+CisJCQkJCTEyKTsKKwkJCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0KKwkJCQkJQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCURQUklOVEsoIiU4ZCAlMmQgJThkfiIsIHMtPmFzeW5jLT5idWZfaW50X3B0ciwKKwkJCXMtPmFzeW5jLT5jdXJfY2hhbiwgcy0+YXN5bmMtPmJ1Zl9pbnRfY291bnQpOworCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgc2FtcGwgJiAweDBmZmYpOworI2Vsc2UKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsCisJCQlpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0FEX0RBVEEpICYgMHgwZmZmKTsKKyNlbmRpZgorCQkrK3MtPmFzeW5jLT5jdXJfY2hhbjsKKworCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID49IGRldnByaXYtPmFpX25fY2hhbikgeworCQkJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwkJfQorCisJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgewkvLyBvbmUgc2NhbiBkb25lCisJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOworCQkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogRU9TMSBiaWMgJWQgYmlwICVkIGJ1YyAlZCBidXAgJWRcbiIsIHMtPmFzeW5jLT5idWZfaW50X2NvdW50LCBzLT5hc3luYy0+YnVmX2ludF9wdHIsIHMtPmFzeW5jLT5idWZfdXNlcl9jb3VudCwgcy0+YXN5bmMtPmJ1Zl91c2VyX3B0cik7CisJCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFT1MyXG4iKTsKKwkJCWlmICgoIWRldnByaXYtPm5ldmVyZW5kaW5nX2FpKSAmJiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpKSB7CS8vIGFsbCBkYXRhIHNhbXBsZWQKKwkJCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOwkvLyBjbGVhciBvdXIgSU5UIHJlcXVlc3QKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IGludGVycnVwdF9wY2kxNzEwX2V2ZXJ5X3NhbXBsZSguLi4pXG4iKTsKKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBtb3ZlX2Jsb2NrX2Zyb21fZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBuLCBpbnQgdHVybikKK3sKKwlpbnQgaSwgajsKKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwlpbnQgc2FtcGw7CisjZW5kaWYKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IG1vdmVfYmxvY2tfZnJvbV9maWZvKC4uLiwlZCwlZClcbiIsIG4sCisJCXR1cm4pOworCWogPSBzLT5hc3luYy0+Y3VyX2NoYW47CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworI2lmZGVmIFBDSTE3MXhfUEFSQU5PSURDSEVDSworCQlzYW1wbCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQURfREFUQSk7CisJCWlmICh0aGlzX2JvYXJkLT5jYXJkdHlwZSAhPSBUWVBFX1BDSTE3MTMpCisJCQlpZiAoKHNhbXBsICYgMHhmMDAwKSAhPSBkZXZwcml2LT5hY3RfY2hhbmxpc3Rbal0pIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCJjb21lZGklZDogQS9EICBGSUZPIGRhdGEgZHJvcG91dDogcmVjZWl2ZWQgZGF0YSBmcm9tIGNoYW5uZWwgJWQsIGV4cGVjdGVkICVkISAoJWQvJWQvJWQvJWQvJWQvJTR4KVxuIiwKKwkJCQkJZGV2LT5taW5vciwgKHNhbXBsICYgMHhmMDAwKSA+PiAxMiwKKwkJCQkJKGRldnByaXYtPgorCQkJCQkJYWN0X2NoYW5saXN0W2pdICYgMHhmMDAwKSA+PiAxMiwKKwkJCQkJaSwgaiwgZGV2cHJpdi0+YWlfYWN0X3NjYW4sIG4sIHR1cm4sCisJCQkJCXNhbXBsKTsKKwkJCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0KKwkJCQkJQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHNhbXBsICYgMHgwZmZmKTsKKyNlbHNlCisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLAorCQkJaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKSAmIDB4MGZmZik7CisjZW5kaWYKKwkJaisrOworCQlpZiAoaiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKKwkJCWogPSAwOworCQkJZGV2cHJpdi0+YWlfYWN0X3NjYW4rKzsKKwkJfQorCX0KKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IG1vdmVfYmxvY2tfZnJvbV9maWZvKC4uLilcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgaW50ZXJydXB0X3BjaTE3MTBfaGFsZl9maWZvKHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBtLCBzYW1wbGVzaW5idWY7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IGludGVycnVwdF9wY2kxNzEwX2hhbGZfZmlmbyguLi4pXG4iKTsKKwltID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpOworCWlmICghKG0gJiBTdGF0dXNfRkgpKSB7CisJCXJ0X3ByaW50aygiY29tZWRpJWQ6IEEvRCBGSUZPIG5vdCBoYWxmIGZ1bGwhICglNHgpXG4iLAorCQkJZGV2LT5taW5vciwgbSk7CisJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisJaWYgKG0gJiBTdGF0dXNfRkYpIHsKKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaSVkOiBBL0QgRklGTyBGdWxsIHN0YXR1cyAoRmF0YWwgRXJyb3IhKSAoJTR4KVxuIiwKKwkJCWRldi0+bWlub3IsIG0pOworCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm47CisJfQorCisJc2FtcGxlc2luYnVmID0gdGhpc19ib2FyZC0+Zmlmb19oYWxmX3NpemU7CisJaWYgKHNhbXBsZXNpbmJ1ZiAqIHNpemVvZihzaG9ydCkgPj0gZGV2cHJpdi0+YWlfZGF0YV9sZW4pIHsKKwkJbSA9IGRldnByaXYtPmFpX2RhdGFfbGVuIC8gc2l6ZW9mKHNob3J0KTsKKwkJaWYgKG1vdmVfYmxvY2tfZnJvbV9maWZvKGRldiwgcywgbSwgMCkpCisJCQlyZXR1cm47CisJCXNhbXBsZXNpbmJ1ZiAtPSBtOworCX0KKworCWlmIChzYW1wbGVzaW5idWYpIHsKKwkJaWYgKG1vdmVfYmxvY2tfZnJvbV9maWZvKGRldiwgcywgc2FtcGxlc2luYnVmLCAxKSkKKwkJCXJldHVybjsKKwl9CisKKwlpZiAoIWRldnByaXYtPm5ldmVyZW5kaW5nX2FpKQorCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJcGNpMTcxeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJcmV0dXJuOworCQl9CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsJLy8gY2xlYXIgb3VyIElOVCByZXF1ZXN0CisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogRU5EOiBpbnRlcnJ1cHRfcGNpMTcxMF9oYWxmX2ZpZm8oLi4uKVxuIik7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfc2VydmljZV9wY2kxNzEwKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IGludGVycnVwdF9zZXJ2aWNlX3BjaTE3MTAoJWQsLi4uKVxuIiwKKwkJaXJxKTsKKwlpZiAoIWRldi0+YXR0YWNoZWQpCS8vIGlzIGRldmljZSBhdHRhY2hlZD8KKwkJcmV0dXJuIElSUV9OT05FOwkvLyBubywgZXhpdAorCisJaWYgKCEoaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpICYgU3RhdHVzX0lSUSkpCS8vIGlzIHRoaXMgaW50ZXJydXB0IGZyb20gb3VyIGJvYXJkPworCQlyZXR1cm4gSVJRX05PTkU7CS8vIG5vLCBleGl0CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBpbnRlcnJ1cHRfc2VydmljZV9wY2kxNzEwKCkgU1Q6ICU0eFxuIiwKKwkJaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpKTsKKworCWlmIChkZXZwcml2LT5haV9ldCkgewkvLyBTd2l0Y2ggZnJvbSBpbml0aWFsIFRSSUdfRVhUIHRvIFRSSUdfeHh4LgorCQlkZXZwcml2LT5haV9ldCA9IDA7CisJCWRldnByaXYtPkNudHJsUmVnICY9IENvbnRyb2xfQ05UMDsKKwkJZGV2cHJpdi0+Q250cmxSZWcgfD0gQ29udHJvbF9TVzsJLy8gc2V0IHNvZnR3YXJlIHRyaWdnZXIKKwkJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOworCQlkZXZwcml2LT5DbnRybFJlZyA9IGRldnByaXYtPmFpX2V0X0NudHJsUmVnOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJGSUZPKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsKKwkJb3V0dyhkZXZwcml2LT5haV9ldF9NdXhWYWwsIGRldi0+aW9iYXNlICsgUENJMTcxeF9NVVgpOworCQlvdXR3KGRldnByaXYtPkNudHJsUmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ09OVFJPTCk7CisJCS8vIHN0YXJ0IHBhY2VyCisJCXN0YXJ0X3BhY2VyKGRldiwgMSwgZGV2cHJpdi0+YWlfZXRfZGl2MSwgZGV2cHJpdi0+YWlfZXRfZGl2Mik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKGRldnByaXYtPmFpX2VvcykgewkvLyBXZSB1c2UgRklGTyBoYWxmIGZ1bGwgSU5UIG9yIG5vdD8KKwkJaW50ZXJydXB0X3BjaTE3MTBfZXZlcnlfc2FtcGxlKGQpOworCX0gZWxzZSB7CisJCWludGVycnVwdF9wY2kxNzEwX2hhbGZfZmlmbyhkKTsKKwl9CisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogRU5EOiBpbnRlcnJ1cHRfc2VydmljZV9wY2kxNzEwKC4uLilcbiIpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9haV9kb2NtZF9hbmRfbW9kZShpbnQgbW9kZSwgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yMSwgZGl2aXNvcjI7CisJdW5zaWduZWQgaW50IHNlZ2xlbjsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9kb2NtZF9hbmRfbW9kZSglZCwuLi4pXG4iLAorCQltb2RlKTsKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCBwYWNlcgorCisJc2VnbGVuID0gY2hlY2tfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3QsCisJCWRldnByaXYtPmFpX25fY2hhbik7CisJaWYgKHNlZ2xlbiA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCXNldHVwX2NoYW5uZWxfbGlzdChkZXYsIHMsIGRldnByaXYtPmFpX2NoYW5saXN0LAorCQlkZXZwcml2LT5haV9uX2NoYW4sIHNlZ2xlbik7CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJGSUZPKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOworCisJZGV2cHJpdi0+YWlfZG8gPSBtb2RlOworCisJZGV2cHJpdi0+YWlfYWN0X3NjYW4gPSAwOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisJZGV2cHJpdi0+YWlfYnVmX3B0ciA9IDA7CisJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCisJZGV2cHJpdi0+Q250cmxSZWcgJj0gQ29udHJvbF9DTlQwOworCWlmICgoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewkvLyBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8gICAgICAgICAgICBkZXZwcml2LT5haV9lb3M9MTsKKwkJZGV2cHJpdi0+YWlfZW9zID0gMTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX09ORUZIOworCQlkZXZwcml2LT5haV9lb3MgPSAwOworCX0KKworCWlmICgoZGV2cHJpdi0+YWlfc2NhbnMgPT0gMCkgfHwgKGRldnByaXYtPmFpX3NjYW5zID09IC0xKSkgeworCQlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDE7CisJfQkJCS8vd2VsbCwgdXNlciB3YW50IG5ldmVyZW5kaW5nCisJZWxzZSB7CisJCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMDsKKwl9CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJaWYgKGRldnByaXYtPmFpX3RpbWVyMSA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWRldnByaXYtPmFpX3RpbWVyMSA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJZGV2cHJpdi0+Q250cmxSZWcgfD0gQ29udHJvbF9QQUNFUiB8IENvbnRyb2xfSVJRRU47CisJCWlmIChtb2RlID09IDIpIHsKKwkJCWRldnByaXYtPmFpX2V0X0NudHJsUmVnID0gZGV2cHJpdi0+Q250cmxSZWc7CisJCQlkZXZwcml2LT5DbnRybFJlZyAmPQorCQkJCX4oQ29udHJvbF9QQUNFUiB8IENvbnRyb2xfT05FRkggfCBDb250cm9sX0dBVEUpOworCQkJZGV2cHJpdi0+Q250cmxSZWcgfD0gQ29udHJvbF9FWFQ7CisJCQlkZXZwcml2LT5haV9ldCA9IDE7CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5haV9ldCA9IDA7CisJCX0KKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmZGV2cHJpdi0+YWlfdGltZXIxLAorCQkJZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBPU0MgYmFzZT0ldSBkaXYxPSV1IGRpdjI9JXUgdGltZXI9JXVcbiIsIGRldnByaXYtPmk4MjU0X29zY19iYXNlLCBkaXZpc29yMSwgZGl2aXNvcjIsIGRldnByaXYtPmFpX3RpbWVyMSk7CisJCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsKKwkJaWYgKG1vZGUgIT0gMikgeworCQkJLy8gc3RhcnQgcGFjZXIKKwkJCXN0YXJ0X3BhY2VyKGRldiwgbW9kZSwgZGl2aXNvcjEsIGRpdmlzb3IyKTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmFpX2V0X2RpdjEgPSBkaXZpc29yMTsKKwkJCWRldnByaXYtPmFpX2V0X2RpdjIgPSBkaXZpc29yMjsKKwkJfQorCQlicmVhazsKKwljYXNlIDM6CisJCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfRVhUIHwgQ29udHJvbF9JUlFFTjsKKwkJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOworCQlicmVhazsKKwl9CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IHBjaTE3MXhfYWlfZG9jbWRfYW5kX21vZGUoLi4uKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBQQ0kxNzFYX0VYVERFQlVHCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgcGNpMTcxeF9jbWR0ZXN0X291dChpbnQgZSwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJcnRfcHJpbnRrKCJhZHZfcGNpMTcxMCBlPSVkIHN0YXJ0c3JjPSV4IHNjYW5zcmM9JXggY29udnNyYz0leFxuIiwgZSwKKwkJY21kLT5zdGFydF9zcmMsIGNtZC0+c2Nhbl9iZWdpbl9zcmMsIGNtZC0+Y29udmVydF9zcmMpOworCXJ0X3ByaW50aygiYWR2X3BjaTE3MTAgZT0lZCBzdGFydGFyZz0lZCBzY2FuYXJnPSVkIGNvbnZhcmc9JWRcbiIsIGUsCisJCWNtZC0+c3RhcnRfYXJnLCBjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmNvbnZlcnRfYXJnKTsKKwlydF9wcmludGsoImFkdl9wY2kxNzEwIGU9JWQgc3RvcHNyYz0leCBzY2FuZW5kPSV4XG4iLCBlLCBjbWQtPnN0b3Bfc3JjLAorCQljbWQtPnNjYW5fZW5kX3NyYyk7CisJcnRfcHJpbnRrKCJhZHZfcGNpMTcxMCBlPSVkIHN0b3Bhcmc9JWQgc2NhbmVuZGFyZz0lZCBjaGFubGlzdGxlbj0lZFxuIiwKKwkJZSwgY21kLT5zdG9wX2FyZywgY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wLCBkaXZpc29yMSwgZGl2aXNvcjI7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MXhfYWlfY21kdGVzdCguLi4pXG4iKTsKKyNpZmRlZiBQQ0kxNzFYX0VYVERFQlVHCisJcGNpMTcxeF9jbWR0ZXN0X291dCgtMSwgY21kKTsKKyNlbmRpZgorCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikgeworI2lmZGVmIFBDSTE3MVhfRVhUREVCVUcKKwkJcGNpMTcxeF9jbWR0ZXN0X291dCgxLCBjbWQpOworI2VuZGlmCisJCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWR0ZXN0KC4uLikgZXJyPSVkIHJldD0xXG4iLCBlcnIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKSB7CisJCWNtZC0+c3RhcnRfc3JjID0gVFJJR19OT1c7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPSBUUklHX0ZPTExPVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENJMTcxWF9FWFRERUJVRworCQlwY2kxNzF4X2NtZHRlc3Rfb3V0KDIsIGNtZCk7CisjZW5kaWYKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTJcbiIsIGVycik7CisJCXJldHVybiAyOworCX0KKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfRk9MTE9XICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IHRoaXNfYm9hcmQtPm5fYWljaGFuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikgeworI2lmZGVmIFBDSTE3MVhfRVhUREVCVUcKKwkJcGNpMTcxeF9jbWR0ZXN0X291dCgzLCBjbWQpOworI2VuZGlmCisJCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWR0ZXN0KC4uLikgZXJyPSVkIHJldD0zXG4iLCBlcnIpOworCQlyZXR1cm4gMzsKKwl9CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UsICZkaXZpc29yMSwKKwkJCSZkaXZpc29yMiwgJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKSB7CisJCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWR0ZXN0KC4uLikgZXJyPSVkIHJldD00XG4iLCBlcnIpOworCQlyZXR1cm4gNDsKKwl9CisKKwkvKiBzdGVwIDU6IGNvbXBsYWluIGFib3V0IHNwZWNpYWwgY2hhbmxpc3QgY29uc2lkZXJhdGlvbnMgKi8KKworCWlmIChjbWQtPmNoYW5saXN0KSB7CisJCWlmICghY2hlY2tfY2hhbm5lbF9saXN0KGRldiwgcywgY21kLT5jaGFubGlzdCwKKwkJCQljbWQtPmNoYW5saXN0X2xlbikpCisJCQlyZXR1cm4gNTsJLy8gaW5jb3JyZWN0IGNoYW5uZWxzIGxpc3QKKwl9CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MXhfYWlfY21kdGVzdCguLi4pIHJldD0wXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MXhfYWlfY21kKC4uLilcbiIpOworCWRldnByaXYtPmFpX25fY2hhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCWRldnByaXYtPmFpX2NoYW5saXN0ID0gY21kLT5jaGFubGlzdDsKKwlkZXZwcml2LT5haV9mbGFncyA9IGNtZC0+ZmxhZ3M7CisJZGV2cHJpdi0+YWlfZGF0YV9sZW4gPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3o7CisJZGV2cHJpdi0+YWlfZGF0YSA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWY7CisJZGV2cHJpdi0+YWlfdGltZXIxID0gMDsKKwlkZXZwcml2LT5haV90aW1lcjIgPSAwOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+YWlfc2NhbnMgPSAwOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CS8vIG1vZGUgMSwgMiwgMworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CS8vIG1vZGUgMSBhbmQgMgorCQkJZGV2cHJpdi0+YWlfdGltZXIxID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJCXJldHVybiBwY2kxNzF4X2FpX2RvY21kX2FuZF9tb2RlKGNtZC0+c3RhcnRfc3JjID09CisJCQkJVFJJR19FWFQgPyAyIDogMSwgZGV2LCBzKTsKKwkJfQorCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkgewkvLyBtb2RlIDMKKwkJCXJldHVybiBwY2kxNzF4X2FpX2RvY21kX2FuZF9tb2RlKDMsIGRldiwgcyk7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBDaGVjayBpZiBjaGFubmVsIGxpc3QgZnJvbSB1c2VyIGlzIGJ1aWxkZWQgY29ycmVjdGx5CisgSWYgaXQncyBvaywgdGhlbiBwcm9ncmFtIHNjYW4vZ2FpbiBsb2dpYy4KKyBUaGlzIHdvcmtzIGZvciBhbGwgY2FyZHMuCisqLworc3RhdGljIGludCBjaGVja19jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuKQoreworCXVuc2lnbmVkIGludCBjaGFuc2VnbWVudFszMl07CisJdW5zaWduZWQgaW50IGksIG5vd211c3RiZWNoYW4sIHNlZ2xlbiwgc2VncG9zOworCisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogIGNoZWNrX2NoYW5uZWxfbGlzdCguLi4sJWQpXG4iLCBuX2NoYW4pOworCS8qIGNvcnJlY3QgY2hhbm5lbCBhbmQgcmFuZ2UgbnVtYmVyIGNoZWNrIGl0c2VsZiBjb21lZGkvcmFuZ2UuYyAqLworCWlmIChuX2NoYW4gPCAxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyYW5nZS9jaGFubmVsIGxpc3QgaXMgZW1wdHkhIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChuX2NoYW4gPiAxKSB7CisJCWNoYW5zZWdtZW50WzBdID0gY2hhbmxpc3RbMF07CS8vIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnl0aW1lIG9rCisJCWZvciAoaSA9IDEsIHNlZ2xlbiA9IDE7IGkgPCBuX2NoYW47IGkrKywgc2VnbGVuKyspIHsJLy8gYnVpbGQgcGFydCBvZiBjaGFubGlzdAorCQkJLy8gcnRfcHJpbnRrKCIlZC4gJWQgJWRcbiIsaSxDUl9DSEFOKGNoYW5saXN0W2ldKSxDUl9SQU5HRShjaGFubGlzdFtpXSkpOworCQkJaWYgKGNoYW5saXN0WzBdID09IGNoYW5saXN0W2ldKQorCQkJCWJyZWFrOwkvLyB3ZSBkZXRlY3QgbG9vcCwgdGhpcyBtdXN0IGJ5IGZpbmlzaAorCQkJaWYgKENSX0NIQU4oY2hhbmxpc3RbaV0pICYgMSkJLy8gb2RkIGNoYW5uZWwgY2Fubid0IGJ5IGRpZmZlcmVuY2lhbAorCQkJCWlmIChDUl9BUkVGKGNoYW5saXN0W2ldKSA9PSBBUkVGX0RJRkYpIHsKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCSJPZGQgY2hhbm5lbCBjYW4ndCBiZSBkaWZmZXJlbnRpYWwgaW5wdXQhXG4iKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJbm93bXVzdGJlY2hhbiA9CisJCQkJKENSX0NIQU4oY2hhbnNlZ21lbnRbaSAtIDFdKSArIDEpICUgcy0+bl9jaGFuOworCQkJaWYgKENSX0FSRUYoY2hhbnNlZ21lbnRbaSAtIDFdKSA9PSBBUkVGX0RJRkYpCisJCQkJbm93bXVzdGJlY2hhbiA9IChub3dtdXN0YmVjaGFuICsgMSkgJSBzLT5uX2NoYW47CisJCQlpZiAobm93bXVzdGJlY2hhbiAhPSBDUl9DSEFOKGNoYW5saXN0W2ldKSkgewkvLyBjaGFubmVsIGxpc3QgaXNuJ3QgY29udGlub3VzIDotKAorCQkJCXJ0X3ByaW50aworCQkJCQkoImNoYW5uZWwgbGlzdCBtdXN0IGJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKKwkJCQkJaSwgQ1JfQ0hBTihjaGFubGlzdFtpXSksIG5vd211c3RiZWNoYW4sCisJCQkJCUNSX0NIQU4oY2hhbmxpc3RbMF0pKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWNoYW5zZWdtZW50W2ldID0gY2hhbmxpc3RbaV07CS8vIHdlbGwsIHRoaXMgaXMgbmV4dCBjb3JyZWN0IGNoYW5uZWwgaW4gbGlzdAorCQl9CisKKwkJZm9yIChpID0gMCwgc2VncG9zID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7CS8vIGNoZWNrIHdob2xlIGNoYW5saXN0CisJCQkvL3J0X3ByaW50aygiJWQgJWQ9JWQgJWRcbiIsQ1JfQ0hBTihjaGFuc2VnbWVudFtpJXNlZ2xlbl0pLENSX1JBTkdFKGNoYW5zZWdtZW50W2klc2VnbGVuXSksQ1JfQ0hBTihjaGFubGlzdFtpXSksQ1JfUkFOR0UoY2hhbmxpc3RbaV0pKTsKKwkJCWlmIChjaGFubGlzdFtpXSAhPSBjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImJhZCBjaGFubmVsLCByZWZlcmVuY2Ugb3IgcmFuZ2UgbnVtYmVyISBjaGFubGlzdFslaV09JWQsJWQsJWQgYW5kIG5vdCAlZCwlZCwlZCFcbiIsCisJCQkJCWksIENSX0NIQU4oY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9SQU5HRShjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX0FSRUYoY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9DSEFOKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKKwkJCQkJQ1JfUkFOR0UoY2hhbmxpc3RbaSAlIHNlZ2xlbl0pLAorCQkJCQlDUl9BUkVGKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSk7CisJCQkJcmV0dXJuIDA7CS8vIGNoYW4vZ2FpbiBsaXN0IGlzIHN0cmFuZ2UKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXNlZ2xlbiA9IDE7CisJfQorCXJldHVybiBzZWdsZW47Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4sIHVuc2lnbmVkIGludCBzZWdsZW4pCit7CisJdW5zaWduZWQgaW50IGksIHJhbmdlLCBjaGFucHJvZzsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6ICBzZXR1cF9jaGFubmVsX2xpc3QoLi4uLCVkLCVkKVxuIiwgbl9jaGFuLAorCQlzZWdsZW4pOworCWRldnByaXYtPmFjdF9jaGFubGlzdF9sZW4gPSBzZWdsZW47CisJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA9IDA7CisKKwlEUFJJTlRLKCJTZWdMZW46ICVkXG4iLCBzZWdsZW4pOworCWZvciAoaSA9IDA7IGkgPCBzZWdsZW47IGkrKykgewkvLyBzdG9yZSByYW5nZSBsaXN0IHRvIGNhcmQKKwkJY2hhbnByb2cgPSBtdXhvbmVjaGFuW0NSX0NIQU4oY2hhbmxpc3RbaV0pXTsKKwkJb3V0dyhjaGFucHJvZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X01VWCk7CS8qIHNlbGVjdCBjaGFubmVsICovCisJCXJhbmdlID0gdGhpc19ib2FyZC0+cmFuZ2Vjb2RlX2FpW0NSX1JBTkdFKGNoYW5saXN0W2ldKV07CisJCWlmIChDUl9BUkVGKGNoYW5saXN0W2ldKSA9PSBBUkVGX0RJRkYpCisJCQlyYW5nZSB8PSAweDAwMjA7CisJCW91dHcocmFuZ2UsIGRldi0+aW9iYXNlICsgUENJMTcxeF9SQU5HRSk7CS8qIHNlbGVjdCBnYWluICovCisjaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCisJCWRldnByaXYtPmFjdF9jaGFubGlzdFtpXSA9CisJCQkoQ1JfQ0hBTihjaGFubGlzdFtpXSkgPDwgMTIpICYgMHhmMDAwOworI2VuZGlmCisJCURQUklOVEsoIkdTOiAlMmQuIFslNHhdPSU0eCAlNHhcbiIsIGksIGNoYW5wcm9nLCByYW5nZSwKKwkJCWRldnByaXYtPmFjdF9jaGFubGlzdFtpXSk7CisJfQorCisJZGV2cHJpdi0+YWlfZXRfTXV4VmFsID0KKwkJQ1JfQ0hBTihjaGFubGlzdFswXSkgfCAoQ1JfQ0hBTihjaGFubGlzdFtzZWdsZW4gLSAxXSkgPDwgOCk7CisJb3V0dyhkZXZwcml2LT5haV9ldF9NdXhWYWwsIGRldi0+aW9iYXNlICsgUENJMTcxeF9NVVgpOwkvKiBzZWxlY3QgY2hhbm5lbCBpbnRlcnZhbCB0byBzY2FuICovCisJRFBSSU5USygiTVVYOiAlNHggTCU0eC5IJTR4XG4iLAorCQlDUl9DSEFOKGNoYW5saXN0WzBdKSB8IChDUl9DSEFOKGNoYW5saXN0W3NlZ2xlbiAtIDFdKSA8PCA4KSwKKwkJQ1JfQ0hBTihjaGFubGlzdFswXSksIENSX0NIQU4oY2hhbmxpc3Rbc2VnbGVuIC0gMV0pKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMikKK3sKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHN0YXJ0X3BhY2VyKCVkLCV1LCV1KVxuIiwgbW9kZSwKKwkJZGl2aXNvcjEsIGRpdmlzb3IyKTsKKwlvdXR3KDB4YjQsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlRDVFJMKTsKKwlvdXR3KDB4NzQsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlRDVFJMKTsKKworCWlmIChtb2RlID09IDEpIHsKKwkJb3V0dyhkaXZpc29yMiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQyKTsKKwkJb3V0dygoZGl2aXNvcjIgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UMik7CisJCW91dHcoZGl2aXNvcjEgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UMSk7CisJCW91dHcoKGRpdmlzb3IxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDEpOworCX0KKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IHN0YXJ0X3BhY2VyKC4uLilcbiIpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jYW5jZWwoLi4uKVxuIik7CisKKwlzd2l0Y2ggKHRoaXNfYm9hcmQtPmNhcmR0eXBlKSB7CisJZGVmYXVsdDoKKwkJZGV2cHJpdi0+Q250cmxSZWcgJj0gQ29udHJvbF9DTlQwOworCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX1NXOworCisJCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsJLy8gcmVzZXQgYW55IG9wZXJhdGlvbnMKKwkJc3RhcnRfcGFjZXIoZGV2LCAtMSwgMCwgMCk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOworCQlicmVhazsKKwl9CisKKwlkZXZwcml2LT5haV9kbyA9IDA7CisJZGV2cHJpdi0+YWlfYWN0X3NjYW4gPSAwOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisJZGV2cHJpdi0+YWlfYnVmX3B0ciA9IDA7CisJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogRU5EOiBwY2kxNzF4X2FpX2NhbmNlbCguLi4pXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MXhfcmVzZXQoLi4uKVxuIik7CisJb3V0dygweDMwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UQ1RSTCk7CisJZGV2cHJpdi0+Q250cmxSZWcgPSBDb250cm9sX1NXIHwgQ29udHJvbF9DTlQwOwkvLyBTb2Z0d2FyZSB0cmlnZ2VyLCBDTlQwPWV4dGVybmFsCisJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOwkvLyByZXNldCBhbnkgb3BlcmF0aW9ucworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOwkvLyBjbGVhciBGSUZPCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsJLy8gY2xlYXIgSU5UIHJlcXVlc3QKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCA4MjU0CisJZGV2cHJpdi0+ZGFfcmFuZ2VzID0gMDsKKwlpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4pIHsKKwkJb3V0YihkZXZwcml2LT5kYV9yYW5nZXMsIGRldi0+aW9iYXNlICsgUENJMTcxeF9EQVJFRik7CS8vIHNldCBEQUNzIHRvIDAuLjVWCisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0RBMSk7CS8vIHNldCBEQSBvdXRwdXRzIHRvIDBWCisJCWRldnByaXYtPmFvX2RhdGFbMF0gPSAweDAwMDA7CisJCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbiA+IDEpIHsKKwkJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0RBMik7CisJCQlkZXZwcml2LT5hb19kYXRhWzFdID0gMHgwMDAwOworCQl9CisJfQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0RPKTsJLy8gZGlnaXRhbCBvdXRwdXRzIHRvIDAKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJGSUZPKTsJLy8gY2xlYXIgRklGTworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CS8vIGNsZWFyIElOVCByZXF1ZXN0CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IHBjaTE3MXhfcmVzZXQoLi4uKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MjBfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzIwX3Jlc2V0KC4uLilcbiIpOworCW91dGIoU3luY29udF9TQzAsIGRldi0+aW9iYXNlICsgUENJMTcyMF9TWU5DT05UKTsJLy8gc2V0IHN5bmNocm9ub3VzIG91dHB1dCBtb2RlCisJZGV2cHJpdi0+ZGFfcmFuZ2VzID0gMHhBQTsKKwlvdXRiKGRldnByaXYtPmRhX3JhbmdlcywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX1JBTkdFKTsJLy8gc2V0IGFsbCByYW5nZXMgdG8gKy8tNVYKKwlvdXR3KDB4MDgwMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX0RBMCk7CS8vIHNldCBvdXRwdXRzIHRvIDBWCisJb3V0dygweDA4MDAsIGRldi0+aW9iYXNlICsgUENJMTcyMF9EQTEpOworCW91dHcoMHgwODAwLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfREEyKTsKKwlvdXR3KDB4MDgwMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX0RBMyk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfU1lOQ09VVCk7CS8vIHVwZGF0ZSBvdXRwdXRzCisJZGV2cHJpdi0+YW9fZGF0YVswXSA9IDB4MDgwMDsKKwlkZXZwcml2LT5hb19kYXRhWzFdID0gMHgwODAwOworCWRldnByaXYtPmFvX2RhdGFbMl0gPSAweDA4MDA7CisJZGV2cHJpdi0+YW9fZGF0YVszXSA9IDB4MDgwMDsKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IHBjaTE3MjBfcmVzZXQoLi4uKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MTBfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzEwX3Jlc2V0KC4uLilcbiIpOworCXN3aXRjaCAodGhpc19ib2FyZC0+Y2FyZHR5cGUpIHsKKwljYXNlIFRZUEVfUENJMTcyMDoKKwkJcmV0dXJuIHBjaTE3MjBfcmVzZXQoZGV2KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gcGNpMTcxeF9yZXNldChkZXYpOworCX0KKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IHBjaTE3MTBfcmVzZXQoLi4uKVxuIik7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MTBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQsIHN1YmRldiwgbl9zdWJkZXZpY2VzOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlpbnQgb3B0X2J1cywgb3B0X3Nsb3Q7CisJY29uc3QgY2hhciAqZXJyc3RyOworCXVuc2lnbmVkIGNoYXIgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jOworCWludCBpOworCWludCBib2FyZF9pbmRleDsKKworCXJ0X3ByaW50aygiY29tZWRpJWQ6IGFkdl9wY2kxNzEwOiAiLCBkZXYtPm1pbm9yKTsKKworCW9wdF9idXMgPSBpdC0+b3B0aW9uc1swXTsKKwlvcHRfc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2kxNzEwX3ByaXZhdGUpKSkgPCAwKSB7CisJCXJ0X3ByaW50aygiIC0gQWxsb2NhdGlvbiBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTG9vayBmb3IgbWF0Y2hpbmcgUENJIGRldmljZSAqLworCWVycnN0ciA9ICJub3QgZm91bmQhIjsKKwlwY2lkZXYgPSBOVUxMOworCWJvYXJkX2luZGV4ID0gdGhpc19ib2FyZCAtIGJvYXJkdHlwZXM7CisJd2hpbGUgKE5VTEwgIT0gKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQURWQU5URUNILAorCQlQQ0lfQU5ZX0lELCBwY2lkZXYpKSkgeworCQlpZihzdHJjbXAodGhpc19ib2FyZC0+bmFtZSwgRFJWX05BTUUpID09IDApCisJCXsKKwkJCWZvcihpID0gMDsgaSA8IG5fYm9hcmR0eXBlczsgKytpKQorCQkJeworCQkJCWlmKHBjaWRldi0+ZGV2aWNlID09IGJvYXJkdHlwZXNbaV0uZGV2aWNlX2lkKQorCQkJCXsKKwkJCQkJYm9hcmRfaW5kZXggPSBpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZihpID09IG5fYm9hcmR0eXBlcykgY29udGludWU7CisJCX1lbHNlCisJCXsKKwkJCWlmKHBjaWRldi0+ZGV2aWNlICE9IGJvYXJkdHlwZXNbYm9hcmRfaW5kZXhdLmRldmljZV9pZCkgY29udGludWU7CisJCX0KKworCQkvKiBGb3VuZCBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlLiAqLworCQlpZiAob3B0X2J1cyB8fCBvcHRfc2xvdCkgeworCQkJLyogQ2hlY2sgYnVzL3Nsb3QuICovCisJCQlpZiAob3B0X2J1cyAhPSBwY2lkZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgb3B0X3Nsb3QgIT0gUENJX1NMT1QocGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CS8qIG5vIG1hdGNoICovCisJCX0KKwkJLyoKKwkJKiBMb29rIGZvciBkZXZpY2UgdGhhdCBpc24ndCBpbiB1c2UuCisJCSogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucy4KKwkJKi8KKwkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgRFJWX05BTUUpKSB7CisJCQllcnJzdHIgPSAiZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhIjsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8vIGZpeHVwIGJvYXJkX3B0ciBpbiBjYXNlIHdlIHdlcmUgdXNpbmcgdGhlIGR1bW15IGVudHJ5IHdpdGggdGhlIGRyaXZlciBuYW1lCisJCWRldi0+Ym9hcmRfcHRyID0gJmJvYXJkdHlwZXNbYm9hcmRfaW5kZXhdOworCQlicmVhazsKKwl9CisKKwlpZiAoIXBjaWRldikgeworCQlpZiAob3B0X2J1cyB8fCBvcHRfc2xvdCkgeworCQkJcnRfcHJpbnRrKCIgLSBDYXJkIGF0IGI6cyAlZDolZCAlc1xuIiwKKwkJCQlvcHRfYnVzLCBvcHRfc2xvdCwgZXJyc3RyKTsKKwkJfSBlbHNlIHsKKwkJCXJ0X3ByaW50aygiIC0gQ2FyZCAlc1xuIiwgZXJyc3RyKTsKKwkJfQorCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwY2lfYnVzID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwlwY2lfc2xvdCA9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pOworCXBjaV9mdW5jID0gUENJX0ZVTkMocGNpZGV2LT5kZXZmbik7CisJaXJxID0gcGNpZGV2LT5pcnE7CisJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisKKwlydF9wcmludGsoIiwgYjpzOmY9JWQ6JWQ6JWQsIGlvPTB4JTRseCIsIHBjaV9idXMsIHBjaV9zbG90LCBwY2lfZnVuYywKKwkJaW9iYXNlKTsKKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKwlkZXZwcml2LT5wY2lkZXYgPSBwY2lkZXY7CisKKwluX3N1YmRldmljZXMgPSAwOworCWlmICh0aGlzX2JvYXJkLT5uX2FpY2hhbikKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4pCisJCW5fc3ViZGV2aWNlcysrOworCWlmICh0aGlzX2JvYXJkLT5uX2RvY2hhbikKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fY291bnRlcikKKwkJbl9zdWJkZXZpY2VzKys7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApIHsKKwkJcnRfcHJpbnRrKCIgLSBBbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBjaTE3MTBfcmVzZXQoZGV2KTsKKworCWlmICh0aGlzX2JvYXJkLT5oYXZlX2lycSkgeworCQlpZiAoaXJxKSB7CisJCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgaW50ZXJydXB0X3NlcnZpY2VfcGNpMTcxMCwKKwkJCQkJSVJRRl9TSEFSRUQsICJBZHZhbnRlY2ggUENJLTE3MTAiLAorCQkJCQlkZXYpKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICVkLCBESVNBQkxJTkcgSVQiLAorCQkJCQlpcnEpOworCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KKwkJCX0gZWxzZSB7CisJCQkJcnRfcHJpbnRrKCIsIGlycT0ldSIsIGlycSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlydF9wcmludGsoIiwgSVJRIGRpc2FibGVkIik7CisJCX0KKwl9IGVsc2UgeworCQlpcnEgPSAwOworCX0KKworCWRldi0+aXJxID0gaXJxOworCisJcHJpbnRrKCIuXG4iKTsKKworCXN1YmRldiA9IDA7CisKKwlpZiAodGhpc19ib2FyZC0+bl9haWNoYW4pIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQ7CisJCWlmICh0aGlzX2JvYXJkLT5uX2FpY2hhbmQpCisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0RJRkY7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YWlfbWF4ZGF0YTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FpOworCQlzLT5jYW5jZWwgPSBwY2kxNzF4X2FpX2NhbmNlbDsKKwkJcy0+aW5zbl9yZWFkID0gcGNpMTcxeF9pbnNuX3JlYWRfYWk7CisJCWlmIChpcnEpIHsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCQlzLT5kb19jbWR0ZXN0ID0gcGNpMTcxeF9haV9jbWR0ZXN0OworCQkJcy0+ZG9fY21kID0gcGNpMTcxeF9haV9jbWQ7CisJCX0KKwkJZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UgPSAxMDA7CS8vIDEwMG5zPTEwTUh6CisJCXN1YmRldisrOworCX0KKworCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmFvX21heGRhdGE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnJhbmdlbGlzdF9hbzsKKwkJc3dpdGNoICh0aGlzX2JvYXJkLT5jYXJkdHlwZSkgeworCQljYXNlIFRZUEVfUENJMTcyMDoKKwkJCXMtPmluc25fd3JpdGUgPSBwY2kxNzIwX2luc25fd3JpdGVfYW87CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXMtPmluc25fd3JpdGUgPSBwY2kxNzF4X2luc25fd3JpdGVfYW87CisJCQlicmVhazsKKwkJfQorCQlzLT5pbnNuX3JlYWQgPSBwY2kxNzF4X2luc25fcmVhZF9hbzsKKwkJc3ViZGV2Kys7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPm5fZGljaGFuKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9kaWNoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmlvX2JpdHMgPSAwOwkvKiBhbGwgYml0cyBpbnB1dCAqLworCQlzLT5pbnNuX2JpdHMgPSBwY2kxNzF4X2luc25fYml0c19kaTsKKwkJc3ViZGV2Kys7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPm5fZG9jaGFuKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmlvX2JpdHMgPSAoMSA8PCB0aGlzX2JvYXJkLT5uX2RvY2hhbikgLSAxOwkvKiBhbGwgYml0cyBvdXRwdXQgKi8KKwkJcy0+c3RhdGUgPSAwOworCQlzLT5pbnNuX2JpdHMgPSBwY2kxNzF4X2luc25fYml0c19kbzsKKwkJc3ViZGV2Kys7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPm5fY291bnRlcikgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2NvdW50ZXI7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fY291bnRlcjsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJcy0+aW5zbl9yZWFkID0gcGNpMTcxeF9pbnNuX2NvdW50ZXJfcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9IHBjaTE3MXhfaW5zbl9jb3VudGVyX3dyaXRlOworCQlzLT5pbnNuX2NvbmZpZyA9IHBjaTE3MXhfaW5zbl9jb3VudGVyX2NvbmZpZzsKKwkJc3ViZGV2Kys7CisJfQorCisJZGV2cHJpdi0+dmFsaWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MTBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+dmFsaWQpCisJCQlwY2kxNzEwX3Jlc2V0KGRldik7CisJCWlmIChkZXYtPmlycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJaWYgKGRldnByaXYtPnBjaWRldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lkZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2kxNzEwLCBwY2kxNzEwX3BjaV90YWJsZSk7CisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzIzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWY3ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzIzLmMKQEAgLTAsMCArMSw0NjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBjb21lZGkvZHJpdmVycy9wY2kxNzIzLmMKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK0RyaXZlcjogYWR2X3BjaTE3MjMKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENJLTE3MjMKK0F1dGhvcjogeW9uZ2dhbmcgPHJzbWdudUBnbWFpbC5jb20+LCBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDSS0xNzIzIChhZHZfcGNpMTcyMykKK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6MTI6NTYgKzAxMDAKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IHN1cHBvcnRlZAorICBQQ0kgZGV2aWNlIGZvdW5kIHdpbGwgYmUgdXNlZC4KKworU3ViZGV2aWNlIDAgaXMgOC1jaGFubmVsIEFPLCAxNi1iaXQsIHJhbmdlICsvLSAxMCBWLgorCitTdWJkZXZpY2UgMSBpcyAxNi1jaGFubmVsIERJTy4gIFRoZSBjaGFubmVscyBhcmUgY29uZmlndXJhYmxlIGFzIGlucHV0IG9yCitvdXRwdXQgaW4gMiBncm91cHMgKDAgdG8gNywgOCB0byAxNSkuICBDb25maWd1cmluZyBhbnkgY2hhbm5lbCBpbXBsaWNpdGx5Citjb25maWd1cmVzIGFsbCBjaGFubmVscyBpbiB0aGUgc2FtZSBncm91cC4KKworVE9ETzoKKworMS4gQWRkIHRoZSB0d28gbWlsbGlhbXAgcmFuZ2VzIHRvIHRoZSBBTyBzdWJkZXZpY2UgKDAgdG8gMjAgbUEsIDQgdG8gMjAgbUEpLgorMi4gUmVhZCB0aGUgaW5pdGlhbCByYW5nZXMgYW5kIHZhbHVlcyBvZiB0aGUgQU8gc3ViZGV2aWNlIGF0IHN0YXJ0LXVwIGluc3RlYWQKKyAgIG9mIHJlaW5pdGlhbGl6aW5nIHRoZW0uCiszLiBJbXBsZW1lbnQgY2FsaWJyYXRpb24uCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNkZWZpbmUgQURWQU5URUNIX1ZFTkRPUiAgICAgICAgMHgxM2ZlCS8qIEFkdmFudGVjaCBQQ0kgdmVuZG9yIElEICovCisKKy8vIGhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcworI2RlZmluZSBUWVBFX1BDSTE3MjMgMAorCisjZGVmaW5lIElPUkFOR0VfMTcyMyAgMHgyQQorCisvKiBhbGwgdGhlIHJlZ2lzdGVycyBmb3IgdGhlIHBjaTE3MjMgYm9hcmQgKi8KKyNkZWZpbmUgUENJMTcyM19EQShOKSAgICgoTik8PDEpCS8qIFc6ICAgRC9BIHJlZ2lzdGVyIE4gKDAgdG8gNykgKi8KKworI2RlZmluZSBQQ0kxNzIzX1NZTl9TRVQgIDB4MTIJLypzeW5jaHJvbml6ZWQgc2V0IHJlZ2lzdGVyICAgICAgICovCisjZGVmaW5lIFBDSTE3MjNfQUxMX0NITk5FTEVfU1lOX1NUUk9CRSAgMHgxMgkvKnN5bmNocm9uaXplZCBzdGF0dXMgcmVnaXN0ZXIgICAgKi8KKworI2RlZmluZSBQQ0kxNzIzX1JBTkdFX0NBTElCUkFUSU9OX01PREUgMHgxNAkvKiByYW5nZSBhbmQgY2FsaWJyYXRpb24gbW9kZSAgICovCisjZGVmaW5lIFBDSTE3MjNfUkFOR0VfQ0FMSUJSQVRJT05fU1RBVFVTIDB4MTQJLyogcmFuZ2UgYW5kIGNhbGlicmF0aW9uIHN0YXR1cyAqLworCisjZGVmaW5lIFBDSTE3MjNfQ09OVFJPTF9DTURfQ0FMSUJSQVRJT05fRlVOIDB4MTYJLyogU0FEQyBjb250cm9sIGNvbW1hbmQgZm9yIGNhbGlicmF0aW9uIGZ1bmN0aW9uICovCisjZGVmaW5lIFBDSTE3MjNfU1RBVFVTX0NNRF9DQUxJQlJBVElPTl9GVU4gMHgxNgkvKiBTQURDIGNvbnRyb2wgc3RhdHVzIGZvciBjYWxpYnJhdGlvbiBmdW5jdGlvbiAqLworCisjZGVmaW5lIFBDSTE3MjNfQ0FMSUJSQVRJT05fUEFSQV9TVFJPQkUgMHgxOAkvKiBDYWxpYnJhdGlvbiBwYXJhbWV0ZXIgc3Ryb2JlICovCisKKyNkZWZpbmUgUENJMTcyM19ESUdJVEFMX0lPX1BPUlRfU0VUIDB4MUEJLyogRGlnaXRhbCBJL08gcG9ydCBzZXR0aW5nICovCisjZGVmaW5lIFBDSTE3MjNfRElHSVRBTF9JT19QT1JUX01PREUgMHgxQQkvKiBEaWdpdGFsIEkvTyBwb3J0IG1vZGUgKi8KKworI2RlZmluZSBQQ0kxNzIzX1dSSVRFX0RJR0lUQUxfT1VUUFVUX0NNRCAweDFDCS8qIFdyaXRlIGRpZ2l0YWwgb3V0cHV0IGNvbW1hbmQgKi8KKyNkZWZpbmUgUENJMTcyM19SRUFEX0RJR0lUQUxfSU5QVVRfREFUQSAweDFDCS8qIFJlYWQgZGlnaXRhbCBpbnB1dCBkYXRhICovCisKKyNkZWZpbmUgUENJMTcyM19XUklURV9DQUxfQ01EIDB4MUUJLyogV3JpdGUgY2FsaWJyYXRpb24gY29tbWFuZCAqLworI2RlZmluZSBQQ0kxNzIzX1JFQURfQ0FMX1NUQVRVUyAweDFFCS8qIFJlYWQgY2FsaWJyYXRpb24gc3RhdHVzICovCisKKyNkZWZpbmUgUENJMTcyM19TWU5fU1RST0JFIDB4MjAJLyogU3luY2hyb25pemVkIHN0cm9iZSAqLworCisjZGVmaW5lIFBDSTE3MjNfUkVTRVRfQUxMX0NITl9TVFJPQkUgMHgyMgkvKiBSZXNldCBhbGwgRC9BIGNoYW5uZWxzIHN0cm9iZSAqLworCisjZGVmaW5lIFBDSTE3MjNfUkVTRVRfQ0FMX0NPTlRST0xfU1RST0JFIDB4MjQJLyogUmVzZXQgdGhlIGNhbGlicmF0aW9uIGNvbnRyb2xsZXIgc3Ryb2JlICovCisKKyNkZWZpbmUgUENJMTcyM19DSEFOR0VfQ0hBX09VVFBVVF9UWVBFX1NUUk9CRSAweDI2CS8qIENoYW5nZSBEL0EgY2hhbm5lbHMgb3V0cHV0IHR5cGUgc3Ryb2JlICovCisKKyNkZWZpbmUgUENJMTcyM19TRUxFQ1RfQ0FMSUJSQVRJT04gMHgyOAkvKiBTZWxlY3QgdGhlIGNhbGlicmF0aW9uIFJlZl9WICovCisKKy8vc3RhdGljIHVuc2lnbmVkIHNob3J0IHBjaV9saXN0X2J1aWxkZWQ9MDsgICAgIC8qPTEgbGlzdCBvZiBjYXJkIGlzIGtub3cgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MjMgPSB7IDEsIHsKKwkJCUJJUF9SQU5HRSgxMCkKKwl9Cit9OworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciBwY2kxNzIzIGJvYXJkcy4KKyAqLworc3RydWN0IHBjaTE3MjNfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHZlbmRvcl9pZDsJCS8vIFBDSSB2ZW5kb3IgYSBkZXZpY2UgSUQgb2YgY2FyZAorCWludCBkZXZpY2VfaWQ7CisJaW50IGlvcmFuZ2U7CisJY2hhciBjYXJkdHlwZTsKKwlpbnQgbl9hb2NoYW47CQkvLyBudW0gb2YgRC9BIGNoYW5zCisJaW50IG5fZGlvY2hhbjsJCS8vIG51bSBvZiBESU8gY2hhbnMKKwlpbnQgYW9fbWF4ZGF0YTsJCS8vIHJlc29sdXRpb24gb2YgRC9BCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9hbzsJLy8gcmFuZ2VsaXN0IGZvciBEL0EKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpMTcyM19ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2kxNzIzIiwKKwkgICAgICB2ZW5kb3JfaWQ6QURWQU5URUNIX1ZFTkRPUiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxNzIzLAorCSAgICAgIGlvcmFuZ2U6CUlPUkFOR0VfMTcyMywKKwkgICAgICBjYXJkdHlwZTpUWVBFX1BDSTE3MjMsCisJICAgICAgbl9hb2NoYW46OCwKKwkgICAgICBuX2Rpb2NoYW46MTYsCisJICAgICAgYW9fbWF4ZGF0YToweGZmZmYsCisJICAgICAgcmFuZ2VsaXN0X2FvOiZyYW5nZV9wY2kxNzIzLAorCQl9LAorfTsKKworLyogVGhpcyBpcyB1c2VkIGJ5IG1vZHByb2JlIHRvIHRyYW5zbGF0ZSBQQ0kgSURzIHRvIGRyaXZlcnMuICBTaG91bGQKKyAqIG9ubHkgYmUgdXNlZCBmb3IgUENJIGFuZCBJU0EtUG5QIGRldmljZXMgKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2kxNzIzX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTE3MjNfcGNpX3RhYmxlKTsKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGNpMTcyM19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2kxNzIzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2kxNzIzX2JvYXJkKSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2kxNzIzID0geworICAgICAgZHJpdmVyX25hbWU6ImFkdl9wY2kxNzIzIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2kxNzIzX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2kxNzIzX2RldGFjaCwKK307CisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gKi8KK3N0cnVjdCBwY2kxNzIzX3ByaXZhdGUgeworCWludCB2YWxpZDsJCS8vY2FyZCBpcyB1c2FibGU7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXVuc2lnbmVkIGNoYXIgZGFfcmFuZ2VbOF07CS8vIEQvQSBvdXRwdXQgcmFuZ2UgZm9yIGVhY2ggY2hhbm5lbAorCisJc2hvcnQgYW9fZGF0YVs4XTsJLy8gZGF0YSBvdXRwdXQgYnVmZmVyCit9OworCisvKnRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaTE3MjNfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworI2RlZmluZSB0aGlzX2JvYXJkIGJvYXJkdHlwZXMKKworLyoKKyAqICAgdGhlIHBjaTE3MjMgY2FyZCByZXNldDsKKyAqLworc3RhdGljIGludCBwY2kxNzIzX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCURQUklOVEsoImFkdl9wY2kxNzIzIEVEQkc6IEJHTjogcGNpMTcyM19yZXNldCguLi4pXG4iKTsKKworCW91dHcoMHgwMSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1NZTl9TRVQpOwkvLyBzZXQgc3luY2hyb25vdXMgb3V0cHV0IG1vZGUKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJLy8gc2V0IGFsbCBvdXRwdXRzIHRvIDBWCisJCWRldnByaXYtPmFvX2RhdGFbaV0gPSAweDgwMDA7CisJCW91dHcoZGV2cHJpdi0+YW9fZGF0YVtpXSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX0RBKGkpKTsKKwkJLy8gc2V0IGFsbCByYW5nZXMgdG8gKy8tIDEwVgorCQlkZXZwcml2LT5kYV9yYW5nZVtpXSA9IDA7CisJCW91dHcoKChkZXZwcml2LT5kYV9yYW5nZVtpXSA8PCA0KSB8IGkpLAorCQkJUENJMTcyM19SQU5HRV9DQUxJQlJBVElPTl9NT0RFKTsKKwl9CisKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTcyM19DSEFOR0VfQ0hBX09VVFBVVF9UWVBFX1NUUk9CRSk7CS8vIHVwZGF0ZSByYW5nZXMKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTcyM19TWU5fU1RST0JFKTsJLy8gdXBkYXRlIG91dHB1dHMKKworCS8vIHNldCBhc3luY2hyb25vdXMgb3V0cHV0IG1vZGUKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTcyM19TWU5fU0VUKTsKKworCURQUklOVEsoImFkdl9wY2kxNzIzIEVEQkc6IEVORDogcGNpMTcyM19yZXNldCguLi4pXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2kxNzIzX2luc25fcmVhZF9hbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJRFBSSU5USygiIGFkdl9QQ0kxNzIzIERFQlVHOiBwY2kxNzIzX2luc25fcmVhZF9hbygpIC0tLS0tIFxuIik7CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykKKwkJZGF0YVtuXSA9IGRldnByaXYtPmFvX2RhdGFbY2hhbl07CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAgYW5hbG9nIGRhdGEgb3V0cHV0OworKi8KK3N0YXRpYyBpbnQgcGNpMTcyM19hb193cml0ZV93aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGNoYW47CisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJRFBSSU5USygiUENJMTcyMzogdGhlIHBjaTE3MjNfYW9fd3JpdGVfd2luc24oKSAtLS0tLS1cbiIpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCisJCWRldnByaXYtPmFvX2RhdGFbY2hhbl0gPSBkYXRhW25dOworCQlvdXR3KGRhdGFbbl0sIGRldi0+aW9iYXNlICsgUENJMTcyM19EQShjaGFuKSk7CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qCisgIGRpZ2l0YWwgaS9vIGNvbmZpZy9xdWVyeQorKi8KK3N0YXRpYyBpbnQgcGNpMTcyM19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBtYXNrOworCXVuc2lnbmVkIGludCBiaXRzOworCXVuc2lnbmVkIHNob3J0IGRpb19tb2RlOworCisJbWFzayA9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKG1hc2sgJiAweDAwRkYpIHsKKwkJYml0cyA9IDB4MDBGRjsKKwl9IGVsc2UgeworCQliaXRzID0gMHhGRjAwOworCX0KKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+Yml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IGJpdHM7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0gKHMtPmlvX2JpdHMgJiBiaXRzKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIHVwZGF0ZSBoYXJkd2FyZSBESU8gbW9kZQorCWRpb19tb2RlID0gMHgwMDAwOwkvLyBsb3cgYnl0ZSBvdXRwdXQsIGhpZ2ggYnl0ZSBvdXRwdXQKKwlpZiAoKHMtPmlvX2JpdHMgJiAweDAwRkYpID09IDApCisJCWRpb19tb2RlIHw9IDB4MDAwMTsJLy8gbG93IGJ5dGUgaW5wdXQKKwlpZiAoKHMtPmlvX2JpdHMgJiAweEZGMDApID09IDApCisJCWRpb19tb2RlIHw9IDB4MDAwMjsJLy8gaGlnaCBieXRlIGlucHV0CisJb3V0dyhkaW9fbW9kZSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX0RJR0lUQUxfSU9fUE9SVF9TRVQpOworCXJldHVybiAxOworfQorCisvKgorICBkaWdpdGFsIGkvbyBiaXRzIHJlYWQvd3JpdGUKKyovCitzdGF0aWMgaW50IHBjaTE3MjNfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCW91dHcocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgUENJMTcyM19XUklURV9ESUdJVEFMX09VVFBVVF9DTUQpOworCX0KKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcyM19SRUFEX0RJR0lUQUxfSU5QVVRfREFUQSk7CisJcmV0dXJuIDI7Cit9CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGNpMTcyMyBib2FyZC4KKyAqLworc3RhdGljIGludCBwY2kxNzIzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0LCBzdWJkZXYsIG5fc3ViZGV2aWNlczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXVuc2lnbmVkIGludCBpb2Jhc2U7CisJdW5zaWduZWQgY2hhciBwY2lfYnVzLCBwY2lfc2xvdCwgcGNpX2Z1bmM7CisJaW50IG9wdF9idXMsIG9wdF9zbG90OworCWNvbnN0IGNoYXIgKmVycnN0cjsKKworCXJ0X3ByaW50aygiY29tZWRpJWQ6IGFkdl9wY2kxNzIzOiBib2FyZD0lcyIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUpOworCisJb3B0X2J1cyA9IGl0LT5vcHRpb25zWzBdOworCW9wdF9zbG90ID0gaXQtPm9wdGlvbnNbMV07CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTE3MjNfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcnRfcHJpbnRrKCIgLSBBbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBMb29rIGZvciBtYXRjaGluZyBQQ0kgZGV2aWNlICovCisJZXJyc3RyID0gIm5vdCBmb3VuZCEiOworCXBjaWRldiA9IE5VTEw7CisJd2hpbGUgKE5VTEwgIT0gKHBjaWRldiA9CisJCQlwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwKKwkJCQl0aGlzX2JvYXJkLT5kZXZpY2VfaWQsIHBjaWRldikpKSB7CisJCS8qIEZvdW5kIG1hdGNoaW5nIHZlbmRvci9kZXZpY2UuICovCisJCWlmIChvcHRfYnVzIHx8IG9wdF9zbG90KSB7CisJCQkvKiBDaGVjayBidXMvc2xvdC4gKi8KKwkJCWlmIChvcHRfYnVzICE9IHBjaWRldi0+YnVzLT5udW1iZXIKKwkJCQl8fCBvcHRfc2xvdCAhPSBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsJLyogbm8gbWF0Y2ggKi8KKwkJfQorCQkvKgorCQkgKiBMb29rIGZvciBkZXZpY2UgdGhhdCBpc24ndCBpbiB1c2UuCisJCSAqIEVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMuCisJCSAqLworCQlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCAiYWR2X3BjaTE3MjMiKSkgeworCQkJZXJyc3RyID0gImZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zISI7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAoIXBjaWRldikgeworCQlpZiAob3B0X2J1cyB8fCBvcHRfc2xvdCkgeworCQkJcnRfcHJpbnRrKCIgLSBDYXJkIGF0IGI6cyAlZDolZCAlc1xuIiwKKwkJCQlvcHRfYnVzLCBvcHRfc2xvdCwgZXJyc3RyKTsKKwkJfSBlbHNlIHsKKwkJCXJ0X3ByaW50aygiIC0gQ2FyZCAlc1xuIiwgZXJyc3RyKTsKKwkJfQorCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwY2lfYnVzID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwlwY2lfc2xvdCA9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pOworCXBjaV9mdW5jID0gUENJX0ZVTkMocGNpZGV2LT5kZXZmbik7CisJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisKKwlydF9wcmludGsoIiwgYjpzOmY9JWQ6JWQ6JWQsIGlvPTB4JTR4IiwgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jLAorCQlpb2Jhc2UpOworCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCWRldnByaXYtPnBjaWRldiA9IHBjaWRldjsKKworCW5fc3ViZGV2aWNlcyA9IDA7CisKKwlpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4pCisJCW5fc3ViZGV2aWNlcysrOworCWlmICh0aGlzX2JvYXJkLT5uX2Rpb2NoYW4pCisJCW5fc3ViZGV2aWNlcysrOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKSB7CisJCXJ0X3ByaW50aygiIC0gQWxsb2NhdGlvbiBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwY2kxNzIzX3Jlc2V0KGRldik7CisJc3ViZGV2ID0gMDsKKwlpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4pIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJZGV2LT53cml0ZV9zdWJkZXYgPSBzOworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5hb19tYXhkYXRhOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5yYW5nZWxpc3RfYW87CisKKwkJcy0+aW5zbl93cml0ZSA9IHBjaTE3MjNfYW9fd3JpdGVfd2luc247CisJCXMtPmluc25fcmVhZCA9IHBjaTE3MjNfaW5zbl9yZWFkX2FvOworCisJCS8vIHJlYWQgRElPIGNvbmZpZworCQlzd2l0Y2ggKGludyhkZXYtPmlvYmFzZSArIFBDSTE3MjNfRElHSVRBTF9JT19QT1JUX01PREUpICYgMHgwMykgeworCQljYXNlIDB4MDA6CS8vIGxvdyBieXRlIG91dHB1dCwgaGlnaCBieXRlIG91dHB1dAorCQkJcy0+aW9fYml0cyA9IDB4RkZGRjsKKwkJCWJyZWFrOworCQljYXNlIDB4MDE6CS8vIGxvdyBieXRlIGlucHV0LCBoaWdoIGJ5dGUgb3V0cHV0CisJCQlzLT5pb19iaXRzID0gMHhGRjAwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMjoJLy8gbG93IGJ5dGUgb3V0cHV0LCBoaWdoIGJ5dGUgaW5wdXQKKwkJCXMtPmlvX2JpdHMgPSAweDAwRkY7CisJCQlicmVhazsKKwkJY2FzZSAweDAzOgkvLyBsb3cgYnl0ZSBpbnB1dCwgaGlnaCBieXRlIGlucHV0CisJCQlzLT5pb19iaXRzID0gMHgwMDAwOworCQkJYnJlYWs7CisJCX0KKwkJLy8gcmVhZCBESU8gcG9ydCBzdGF0ZQorCQlzLT5zdGF0ZSA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MjNfUkVBRF9ESUdJVEFMX0lOUFVUX0RBVEEpOworCisJCXN1YmRldisrOworCX0KKworCWlmICh0aGlzX2JvYXJkLT5uX2Rpb2NoYW4pIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCVNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2Rpb2NoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2Rpb2NoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fY29uZmlnID0gcGNpMTcyM19kaW9faW5zbl9jb25maWc7CisJCXMtPmluc25fYml0cyA9IHBjaTE3MjNfZGlvX2luc25fYml0czsKKwkJc3ViZGV2Kys7CisJfQorCisJZGV2cHJpdi0+dmFsaWQgPSAxOworCisJcGNpMTcyM19yZXNldChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNpMTcyM19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNpMTcyMzogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJaWYgKGRldnByaXYtPnZhbGlkKQorCQkJcGNpMTcyM19yZXNldChkZXYpOworCisJCWlmIChkZXZwcml2LT5wY2lkZXYpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lkZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpZGV2KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2kxNzIzLCBwY2kxNzIzX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaV9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MDQ0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaV9kaW8uYwpAQCAtMCwwICsxLDEwNzcgQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCisgKgorICogQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KKyAqCisgKiAgSGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggUENJIERJTyBjYXJkcy4KKyovCisvKgorRHJpdmVyOiBhZHZfcGNpX2RpbworRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0ktMTczMCwgUENJLTE3MzMsIFBDSS0xNzM0LCBQQ0ktMTczNlVQLAorICAgICAgICAgICAgIFBDSS0xNzUwLCBQQ0ktMTc1MSwgUENJLTE3NTIsIFBDSS0xNzUzL0UsIFBDSS0xNzU0LAorICAgICAgICAgICAgIFBDSS0xNzU2LCBQQ0ktMTc2MgorQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDSS0xNzMwIChhZHZfcGNpX2RpbyksIFBDSS0xNzMzLAorICBQQ0ktMTczNCwgUENJLTE3MzZVUCwgUENJLTE3NTAsCisgIFBDSS0xNzUxLCBQQ0ktMTc1MiwgUENJLTE3NTMsCisgIFBDSS0xNzUzK1BDSS0xNzUzRSwgUENJLTE3NTQsIFBDSS0xNzU2LAorICBQQ0ktMTc2MCwgUENJLTE3NjIKK1N0YXR1czogdW50ZXN0ZWQKK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTA6NDM6MDggKzAxMDAKKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgbm93IG9ubHkgaW5zbiBpbnRlcmZhY2UgZm9yIERJL0RPL0RJTy4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgICAgICAgICAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kKKyAgICAgICAgICBkZXZpY2Ugd2lsbCBiZSB1c2VkLgorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKworI3VuZGVmIFBDSV9ESU9fRVhUREVCVUcJCS8qIGlmIGRlZmluZWQsIGVuYWJsZSBleHRlbnNpdmUgZGVidWcgbG9nZ2luZyAqLworCisjdW5kZWYgRFBSSU5USworI2lmZGVmIFBDSV9ESU9fRVhUREVCVUcKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIHJ0X3ByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisvKiBoYXJkd2FyZSB0eXBlcyBvZiB0aGUgY2FyZHMgKi8KK2VudW0gaHdfY2FyZHNfaWQgeworCVRZUEVfUENJMTczMCwgVFlQRV9QQ0kxNzMzLCBUWVBFX1BDSTE3MzQsIFRZUEVfUENJMTczNiwKKwlUWVBFX1BDSTE3NTAsCisJVFlQRV9QQ0kxNzUxLAorCVRZUEVfUENJMTc1MiwKKwlUWVBFX1BDSTE3NTMsIFRZUEVfUENJMTc1M0UsCisJVFlQRV9QQ0kxNzU0LCBUWVBFX1BDSTE3NTYsCisJVFlQRV9QQ0kxNzYwLAorCVRZUEVfUENJMTc2MgorfTsKKworLyogd2hpY2ggSS9PIGluc3RydWN0aW9ucyB0byB1c2UgKi8KK2VudW0gaHdfaW9fYWNjZXNzIHsKKwlJT184YiwgSU9fMTZiCit9OworCisjZGVmaW5lIE1BWF9ESV9TVUJERVZTCTIJLyogbWF4IG51bWJlciBvZiBESSBzdWJkZXZpY2VzIHBlciBjYXJkICovCisjZGVmaW5lIE1BWF9ET19TVUJERVZTCTIJLyogbWF4IG51bWJlciBvZiBETyBzdWJkZXZpY2VzIHBlciBjYXJkICovCisjZGVmaW5lIE1BWF9ESU9fU1VCREVWRwkyCS8qIG1heCBudW1iZXIgb2YgRElPIHN1YmRldmljZXMgZ3JvdXAgcGVyIGNhcmQgKi8KKworI2RlZmluZSBTSVpFXzgyNTUJICAgNAkvKiA4MjU1IElPIHNwYWNlIGxlbmd0aCAqLworCisjZGVmaW5lIFBDSURJT19NQUlOUkVHCSAgIDIJLyogbWFpbiBJL08gcmVnaW9uIGZvciBhbGwgQWR2YW50ZWNoIGNhcmRzPyAqLworCisvKiBSZWdpc3RlciBvZmZzZXQgZGVmaW5pdGlvbnMgKi8KKy8qICBBZHZhbnRlY2ggUENJLTE3MzAvMy80ICovCisjZGVmaW5lIFBDSTE3MzBfSURJCSAgIDAJLyogUjogICBJc29sYXRlZCBkaWdpdGFsIGlucHV0ICAwLTE1ICovCisjZGVmaW5lIFBDSTE3MzBfSURPCSAgIDAJLyogVzogICBJc29sYXRlZCBkaWdpdGFsIG91dHB1dCAwLTE1ICovCisjZGVmaW5lIFBDSTE3MzBfREkJICAgMgkvKiBSOiAgIERpZ2l0YWwgaW5wdXQgIDAtMTUgKi8KKyNkZWZpbmUgUENJMTczMF9ETwkgICAyCS8qIFc6ICAgRGlnaXRhbCBvdXRwdXQgMC0xNSAqLworI2RlZmluZSBQQ0kxNzMzX0lESQkgICAwCS8qIFI6ICAgSXNvbGF0ZWQgZGlnaXRhbCBpbnB1dCAgMC0zMSAqLworI2RlZmluZQlQQ0kxNzMwXzNfSU5UX0VOCTB4MDgJLyogUi9XOiBlbmFibGUvZGlzYWJsZSBpbnRlcnJ1cHRzICovCisjZGVmaW5lCVBDSTE3MzBfM19JTlRfUkYJMHgwYwkvKiBSL1c6IHNldCBmYWxsaW5nL3JhaXNpbmcgZWRnZSBmb3IgaW50ZXJydXB0cyAqLworI2RlZmluZQlQQ0kxNzMwXzNfSU5UX0NMUgkweDEwCS8qIFIvVzogY2xlYXIgaW50ZXJydXB0cyAqLworI2RlZmluZSBQQ0kxNzM0X0lETwkgICAwCS8qIFc6ICAgSXNvbGF0ZWQgZGlnaXRhbCBvdXRwdXQgMC0zMSAqLworI2RlZmluZSBQQ0kxNzN4X0JPQVJESUQJICAgNAkvKiBSOiAgIEJvYXJkIEkvRCBzd2l0Y2ggZm9yIDE3MzAvMy80ICovCisKKy8qICBBZHZhbnRlY2ggUENJLTE3MzZVUCAqLworI2RlZmluZSBQQ0kxNzM2X0lESSAgICAgICAgMCAgICAvKiBSOiAgIElzb2xhdGVkIGRpZ2l0YWwgaW5wdXQgIDAtMTUgKi8KKyNkZWZpbmUgUENJMTczNl9JRE8gICAgICAgIDAgICAgLyogVzogICBJc29sYXRlZCBkaWdpdGFsIG91dHB1dCAwLTE1ICovCisjZGVmaW5lIFBDSTE3MzZfM19JTlRfRU4gICAgICAgIDB4MDggICAgLyogUi9XOiBlbmFibGUvZGlzYWJsZSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFBDSTE3MzZfM19JTlRfUkYgICAgICAgIDB4MGMgICAgLyogUi9XOiBzZXQgZmFsbGluZy9yYWlzaW5nIGVkZ2UgZm9yIGludGVycnVwdHMgKi8KKyNkZWZpbmUgUENJMTczNl8zX0lOVF9DTFIgICAgICAgMHgxMCAgICAvKiBSL1c6IGNsZWFyIGludGVycnVwdHMgKi8KKyNkZWZpbmUgUENJMTczNl9CT0FSRElEICAgIDQgICAgICAgICAgICAvKiBSOiAgIEJvYXJkIEkvRCBzd2l0Y2ggZm9yIDE3MzZVUCAqLworI2RlZmluZSBQQ0kxNzM2X01BSU5SRUcgICAgMCAgICAgICAgICAgIC8qIE5vcm1hbCByZWdpc3RlciAoMikgZG9lc24ndCB3b3JrICovCisKKy8qICBBZHZhbnRlY2ggUENJLTE3NTAgKi8KKyNkZWZpbmUgUENJMTc1MF9JREkJICAgMAkvKiBSOiAgIElzb2xhdGVkIGRpZ2l0YWwgaW5wdXQgIDAtMTUgKi8KKyNkZWZpbmUgUENJMTc1MF9JRE8JICAgMAkvKiBXOiAgIElzb2xhdGVkIGRpZ2l0YWwgb3V0cHV0IDAtMTUgKi8KKyNkZWZpbmUgUENJMTc1MF9JQ1IJICAzMgkvKiBXOiAgIEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3NTBfSVNSCSAgMzIJLyogUjogICBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisKKy8qICBBZHZhbnRlY2ggUENJLTE3NTEvMy8zRSAqLworI2RlZmluZSBQQ0kxNzUxX0RJTwkgICAwCS8qIFIvVzogYmVnaW4gb2YgODI1NSByZWdpc3RlcnMgYmxvY2sgKi8KKyNkZWZpbmUgUENJMTc1MV9JQ1IJICAzMgkvKiBXOiAgIEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3NTFfSVNSCSAgMzIJLyogUjogICBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3NTNfRElPCSAgIDAJLyogUi9XOiBiZWdpbiBvZiA4MjU1IHJlZ2lzdGVycyBibG9jayAqLworI2RlZmluZSBQQ0kxNzUzX0lDUjAJICAxNgkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDAgKi8KKyNkZWZpbmUgUENJMTc1M19JQ1IxCSAgMTcJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAxICovCisjZGVmaW5lIFBDSTE3NTNfSUNSMgkgIDE4CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMiAqLworI2RlZmluZSBQQ0kxNzUzX0lDUjMJICAxOQkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDMgKi8KKyNkZWZpbmUgUENJMTc1M0VfRElPCSAgMzIJLyogUi9XOiBiZWdpbiBvZiA4MjU1IHJlZ2lzdGVycyBibG9jayAqLworI2RlZmluZSBQQ0kxNzUzRV9JQ1IwCSAgNDgJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAwICovCisjZGVmaW5lIFBDSTE3NTNFX0lDUjEJICA0OQkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDEgKi8KKyNkZWZpbmUgUENJMTc1M0VfSUNSMgkgIDUwCS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMiAqLworI2RlZmluZSBQQ0kxNzUzRV9JQ1IzCSAgNTEJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAzICovCisKKy8qICBBZHZhbnRlY2ggUENJLTE3NTIvNC82ICovCisjZGVmaW5lIFBDSTE3NTJfSURPCSAgIDAJLyogUi9XOiBEaWdpdGFsIG91dHB1dCAgMC0zMSAqLworI2RlZmluZSBQQ0kxNzUyX0lETzIJICAgNAkvKiBSL1c6IERpZ2l0YWwgb3V0cHV0IDMyLTYzICovCisjZGVmaW5lIFBDSTE3NTRfSURJCSAgIDAJLyogUjogICBEaWdpdGFsIGlucHV0ICAgMC0zMSAqLworI2RlZmluZSBQQ0kxNzU0X0lESTIJICAgNAkvKiBSOiAgIERpZ2l0YWwgaW5wdXQgIDMyLTY0ICovCisjZGVmaW5lIFBDSTE3NTZfSURJCSAgIDAJLyogUjogICBEaWdpdGFsIGlucHV0ICAgMC0zMSAqLworI2RlZmluZSBQQ0kxNzU2X0lETwkgICA0CS8qIFIvVzogRGlnaXRhbCBvdXRwdXQgIDAtMzEgKi8KKyNkZWZpbmUgUENJMTc1NF82X0lDUjAJMHgwOAkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDAgKi8KKyNkZWZpbmUgUENJMTc1NF82X0lDUjEJMHgwYQkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDEgKi8KKyNkZWZpbmUgUENJMTc1NF9JQ1IyCTB4MGMJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAyICovCisjZGVmaW5lIFBDSTE3NTRfSUNSMwkweDBlCS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMyAqLworI2RlZmluZSBQQ0kxNzUyXzZfQ0ZDCTB4MTIJLyogUi9XOiBzZXQvcmVhZCBjaGFubmVsIGZyZWV6ZSBmdW5jdGlvbiAqLworI2RlZmluZSBQQ0kxNzV4X0JPQVJESUQJMHgxMAkvKiBSOiAgIEJvYXJkIEkvRCBzd2l0Y2ggZm9yIDE3NTIvNC82ICovCisKKy8qICBBZHZhbnRlY2ggUENJLTE3NjIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBDSTE3NjJfUk8JICAgMAkvKiBSL1c6IFJlbGF5cyBzdGF0dXMvb3V0cHV0ICovCisjZGVmaW5lIFBDSTE3NjJfSURJCSAgIDIJLyogUjogICBJc29sYXRlZCBpbnB1dCBzdGF0dXMgKi8KKyNkZWZpbmUgUENJMTc2Ml9CT0FSRElECSAgIDQJLyogUjogICBCb2FyZCBJL0Qgc3dpdGNoICovCisjZGVmaW5lIFBDSTE3NjJfSUNSCSAgIDYJLyogVzogICBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBQQ0kxNzYyX0lTUgkgICA2CS8qIFI6ICAgSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworCisvKiAgQWR2YW50ZWNoIFBDSS0xNzYwIHJlZ2lzdGVycyAqLworI2RlZmluZSBPTUIwCQkweDBjCS8qIFc6ICAgTWFpbGJveCBvdXRnb2luZyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT01CMQkJMHgwZAorI2RlZmluZSBPTUIyCQkweDBlCisjZGVmaW5lIE9NQjMJCTB4MGYKKyNkZWZpbmUgSU1CMAkJMHgxYwkvKiBSOiAgIE1haWxib3ggaW5jb21pbmcgcmVnaXN0ZXJzICovCisjZGVmaW5lIElNQjEJCTB4MWQKKyNkZWZpbmUgSU1CMgkJMHgxZQorI2RlZmluZSBJTUIzCQkweDFmCisjZGVmaW5lIElOVENTUjAJCTB4MzgJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSU5UQ1NSMQkJMHgzOQorI2RlZmluZSBJTlRDU1IyCQkweDNhCisjZGVmaW5lIElOVENTUjMJCTB4M2IKKworLyogIFBDSS0xNzYwIG1haWxib3ggY29tbWFuZHMgKi8KKyNkZWZpbmUgQ01EX0NsZWFySU1CMgkJMHgwMAkvKiBDbGVhciBJTUIyIHN0YXR1cyBhbmQgcmV0dXJuIGFjdGF1bCBESSBzdGF0dXMgaW4gSU1CMyAqLworI2RlZmluZSBDTURfU2V0UmVsYXlzT3V0cHV0CTB4MDEJLyogU2V0IHJlbGF5IG91dHB1dCBmcm9tIE9NQjAgKi8KKyNkZWZpbmUgQ01EX0dldFJlbGF5c1N0YXR1cwkweDAyCS8qIEdldCByZWxheSBzdGF0dXMgdG8gSU1CMCAqLworI2RlZmluZSBDTURfUmVhZEN1cnJlbnRTdGF0dXMJMHgwNwkvKiBSZWFkIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcmVnaXN0ZXIgaW4gT01CMCwgcmVzdWx0IGluIElNQjAgKi8KKyNkZWZpbmUgQ01EX1JlYWRGaXJtd2FyZVZlcnNpb24JMHgwZQkvKiBSZWFkIHRoZSBmaXJtd2FyZSB2ZXIuLCByZXN1bHQgaW4gSU1CMS5JTUIwICovCisjZGVmaW5lIENNRF9SZWFkSGFyZHdhcmVWZXJzaW9uCTB4MGYJLyogUmVhZCB0aGUgaGFyZHdhcmUgdmVyLiwgcmVzdWx0IGluIElNQjEuSU1CMCAqLworI2RlZmluZSBDTURfRW5hYmxlSURJRmlsdGVycwkweDIwCS8qIEVuYWJsZSBJREkgZmlsdGVycyBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX0VuYWJsZUlESVBhdHRlcm5NYXRjaCAweDIxCS8qIEVuYWJsZSBJREkgcGF0dGVybiBtYXRjaCBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESVBhdHRlcm5NYXRjaAkweDIyCS8qIEVuYWJsZSBJREkgcGF0dGVybiBtYXRjaCBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX0VuYWJsZUlESUNvdW50ZXJzCTB4MjgJLyogRW5hYmxlIElESSBjb3VudGVycyBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX1Jlc2V0SURJQ291bnRlcnMJMHgyOQkvKiBSZXNldCBJREkgY291bnRlcnMgYmFzZWQgb24gYml0cyBpbiBPTUIwIHRvIGl0cyByZXNldCB2YWx1ZXMgKi8KKyNkZWZpbmUgQ01EX092ZXJmbG93SURJQ291bnRlcnMJMHgyYQkvKiBFbmFibGUgSURJIGNvdW50ZXJzIG92ZXJmbG93IGludGVycnVwdHMgIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfTWF0Y2hJbnRJRElDb3VudGVycwkweDJiCS8qIEVuYWJsZSBJREkgY291bnRlcnMgbWF0Y2ggdmFsdWUgaW50ZXJydXB0cyAgYmFzZWQgb24gYml0cyBpbiBPTUIwICovCisjZGVmaW5lIENNRF9FZGdlSURJQ291bnRlcnMJMHgyYwkvKiBTZXQgSURJIHVwIGNvdW50ZXJzIGNvdW50IGVkZ2UgKGJpdD0wIC0gcmlzaW5nLCA9MSAtIGZhbGxpbmcpICovCisjZGVmaW5lIENNRF9HZXRJRElDbnRDdXJWYWx1ZQkweDJmCS8qIFJlYWQgSURJe09NQjB9IHVwIGNvdW50ZXIgY3VycmVudCB2YWx1ZSAqLworI2RlZmluZSBDTURfU2V0SURJMENudFJlc2V0VmFsdWUgMHg0MAkvKiBTZXQgSURJMCBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTFDbnRSZXNldFZhbHVlIDB4NDEJLyogU2V0IElESTEgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkyQ250UmVzZXRWYWx1ZSAweDQyCS8qIFNldCBJREkyIENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJM0NudFJlc2V0VmFsdWUgMHg0MwkvKiBTZXQgSURJMyBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTRDbnRSZXNldFZhbHVlIDB4NDQJLyogU2V0IElESTQgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk1Q250UmVzZXRWYWx1ZSAweDQ1CS8qIFNldCBJREk1IENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNkNudFJlc2V0VmFsdWUgMHg0NgkvKiBTZXQgSURJNiBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTdDbnRSZXNldFZhbHVlIDB4NDcJLyogU2V0IElESTcgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkwQ250TWF0Y2hWYWx1ZSAweDQ4CS8qIFNldCBJREkwIENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJMUNudE1hdGNoVmFsdWUgMHg0OQkvKiBTZXQgSURJMSBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTJDbnRNYXRjaFZhbHVlIDB4NGEJLyogU2V0IElESTIgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkzQ250TWF0Y2hWYWx1ZSAweDRiCS8qIFNldCBJREkzIENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNENudE1hdGNoVmFsdWUgMHg0YwkvKiBTZXQgSURJNCBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTVDbnRNYXRjaFZhbHVlIDB4NGQJLyogU2V0IElESTUgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk2Q250TWF0Y2hWYWx1ZSAweDRlCS8qIFNldCBJREk2IENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJN0NudE1hdGNoVmFsdWUgMHg0ZgkvKiBTZXQgSURJNyBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKworI2RlZmluZSBPTUJDTURfUkVUUlkJMHgwMwkvKiAzIHRpbWVzIHRyeSByZXF1ZXN0IGJlZm9yZSBlcnJvciAqLworCitzdGF0aWMgaW50IHBjaV9kaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpX2Rpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgZGlvc3ViZF9kYXRhIHsKKwlpbnQgY2hhbnM7CQkvKiAgbnVtIG9mIGNoYW5zICovCisJaW50IGFkZHI7CQkvKiAgUENJIGFkZHJlc3Mgb2ZzZXQgKi8KKwlpbnQgcmVnczsJCS8qICBudW1iZXIgb2YgcmVnaXN0ZXJzIHRvIHJlYWQgb3IgODI1NSBzdWJkZXZpY2VzICovCisJdW5zaWduZWQgaW50IHNwZWNmbGFnczsJLyogIGFkZG9uIHN1YmRldmljZSBmbGFncyAqLworfTsKKworc3RydWN0IGRpb19ib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qICBib2FyZCBuYW1lICovCisJaW50IHZlbmRvcl9pZDsJCS8qICB2ZW5kb3IvZGV2aWNlIFBDSSBJRCAqLworCWludCBkZXZpY2VfaWQ7CisJaW50IG1haW5fcGNpX3JlZ2lvbjsJLyogIG1haW4gSS9PIFBDSSByZWdpb24gKi8KKwllbnVtIGh3X2NhcmRzX2lkIGNhcmR0eXBlOworCXN0cnVjdCBkaW9zdWJkX2RhdGEgc2RpW01BWF9ESV9TVUJERVZTXTsJLyogIERJIGNoYW5zICovCisJc3RydWN0IGRpb3N1YmRfZGF0YSBzZG9bTUFYX0RPX1NVQkRFVlNdOwkvKiAgRE8gY2hhbnMgKi8KKwlzdHJ1Y3QgZGlvc3ViZF9kYXRhIHNkaW9bTUFYX0RJT19TVUJERVZHXTsJLyogIERJTyA4MjU1IGNoYW5zICovCisJc3RydWN0IGRpb3N1YmRfZGF0YSBib2FyZGlkOwkvKiAgY2FyZCBzdXBwb3J0cyBib2FyZCBJRCBzd2l0Y2ggKi8KKwllbnVtIGh3X2lvX2FjY2VzcyBpb19hY2Nlc3M7Cit9OworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpX2Rpb19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzU2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV9kaW9fcGNpX3RhYmxlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaW9fYm9hcmR0eXBlIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjaTE3MzAiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzMwLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTczMCwKKwkJCXt7MTYsIFBDSTE3MzBfREksIDIsIDB9LCB7MTYsIFBDSTE3MzBfSURJLCAyLCAwfX0sCisJCQl7ezE2LCBQQ0kxNzMwX0RPLCAyLCAwfSwgezE2LCBQQ0kxNzMwX0lETywgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXs0LCBQQ0kxNzN4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCQlJT184YiwKKwkJfSwKKwl7InBjaTE3MzMiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzMzLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTczMywKKwkJCXt7MCwgMCwgMCwgMH0sIHszMiwgUENJMTczM19JREksIDQsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3M3hfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJSU9fOGJ9LAorCXsicGNpMTczNCIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzQsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzM0LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHszMiwgUENJMTczNF9JRE8sIDQsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7NCwgUENJMTczeF9CT0FSRElELCAxLCBTREZfSU5URVJOQUx9LAorCQlJT184Yn0sCisJeyJwY2kxNzM2IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczNiwgUENJMTczNl9NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzM2LAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzM2X0lESSwgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzM2X0lETywgMiwgMH19LAorCQkJe3sgMCwgMCwgMCwgMH0sIHsgMCwgMCwgMCwgMH19LAorCQkJeyA0LCBQQ0kxNzM2X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCQlJT184YiwKKyAgICAgICAgfSwKKwl7InBjaTE3NTAiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUwLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTc1MCwKKwkJCXt7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTc1MF9JREksIDIsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTc1MF9JRE8sIDIsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7MCwgMCwgMCwgMH0sCisJCUlPXzhifSwKKwl7InBjaTE3NTEiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUxLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTc1MSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3s0OCwgUENJMTc1MV9ESU8sIDIsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezAsIDAsIDAsIDB9LAorCQlJT184Yn0sCisJeyJwY2kxNzUyIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MiwgUENJRElPX01BSU5SRUcsCisJCQlUWVBFX1BDSTE3NTIsCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3szMiwgUENJMTc1Ml9JRE8sIDIsIDB9LCB7MzIsIFBDSTE3NTJfSURPMiwgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXs0LCBQQ0kxNzV4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCUlPXzE2Yn0sCisJeyJwY2kxNzUzIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MywgUENJRElPX01BSU5SRUcsCisJCQlUWVBFX1BDSTE3NTMsCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7OTYsIFBDSTE3NTNfRElPLCA0LCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXswLCAwLCAwLCAwfSwKKwkJSU9fOGJ9LAorCXsicGNpMTc1M2UiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUzLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTc1M0UsCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7OTYsIFBDSTE3NTNfRElPLCA0LCAwfSwgezk2LCBQQ0kxNzUzRV9ESU8sIDQsIDB9fSwKKwkJCXswLCAwLCAwLCAwfSwKKwkJSU9fOGJ9LAorCXsicGNpMTc1NCIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTQsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzU0LAorCQkJe3szMiwgUENJMTc1NF9JREksIDIsIDB9LCB7MzIsIFBDSTE3NTRfSURJMiwgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7NCwgUENJMTc1eF9CT0FSRElELCAxLCBTREZfSU5URVJOQUx9LAorCQlJT18xNmJ9LAorCXsicGNpMTc1NiIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTYsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzU2LAorCQkJe3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzU2X0lESSwgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzU2X0lETywgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXs0LCBQQ0kxNzV4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCUlPXzE2Yn0sCisJeyJwY2kxNzYwIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc2MCwgMCwKKwkJCVRZUEVfUENJMTc2MCwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCS8qICBUaGlzIGNhcmQgaGF2ZSBvd24gc2V0dXAgd29yayAqLworCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7MCwgMCwgMCwgMH0sCisJCUlPXzhifSwKKwl7InBjaTE3NjIiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzYyLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTc2MiwKKwkJCXt7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTc2Ml9JREksIDEsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTc2Ml9STywgMSwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXs0LCBQQ0kxNzYyX0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCUlPXzE2Yn0KK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBkaW9fYm9hcmR0eXBlKSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2lfZGlvID0geworICAgICAgZHJpdmVyX25hbWU6ImFkdl9wY2lfZGlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2lfZGlvX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2lfZGlvX2RldGFjaAorfTsKKworc3RydWN0IHBjaV9kaW9fcHJpdmF0ZSB7CisJc3RydWN0IHBjaV9kaW9fcHJpdmF0ZSAqcHJldjsJLyogIHByZXZpb3VzIHByaXZhdGUgc3RydWN0ICovCisJc3RydWN0IHBjaV9kaW9fcHJpdmF0ZSAqbmV4dDsJLyogIG5leHQgcHJpdmF0ZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwkvKiAgcG9pbnRlciB0byBib2FyZCdzIHBjaV9kZXYgKi8KKwljaGFyIHZhbGlkOwkJLyogIGNhcmQgaXMgdXNhYmxlICovCisJY2hhciBHbG9iYWxJcnFFbmFibGVkOwkvKiAgMT0gYW55IElSUSBzb3VyY2UgaXMgZW5hYmxlZCAqLworCS8qICBQQ0ktMTc2MCBzcGVjaWZpYyBkYXRhICovCisJdW5zaWduZWQgY2hhciBJRElDbnRFbmFibGU7CS8qICBjb3VudGVyJ3MgY291bnRpbmcgZW5hYmxlIHN0YXR1cyAqLworCXVuc2lnbmVkIGNoYXIgSURJQ250T3ZlckVuYWJsZTsJLyogIGNvdW50ZXIncyBvdmVyZmxvdyBpbnRlcnJ1cHRzIGVuYWJsZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIElESUNudE1hdGNoRW5hYmxlOwkvKiAgY291bnRlcidzIG1hdGNoIGludGVycnVwdHMgZW5hYmxlIHN0YXR1cyAqLworCXVuc2lnbmVkIGNoYXIgSURJQ250RWRnZTsJLyogIGNvdW50ZXIncyBjb3VudCBlZGdlIHZhbHVlIChiaXQ9MCAtIHJpc2luZywgPTEgLSBmYWxsaW5nKSAqLworCXVuc2lnbmVkIHNob3J0IENudFJlc1ZhbHVlWzhdOwkvKiAgY291bnRlcnMnIHJlc2V0IHZhbHVlICovCisJdW5zaWduZWQgc2hvcnQgQ250TWF0Y2hWYWx1ZVs4XTsJLyogIGNvdW50ZXJzJyBtYXRjaCBpbnRlcnJ1cHQgdmFsdWUgKi8KKwl1bnNpZ25lZCBjaGFyIElESUZpbHRlcnNFbjsJLyogIElESSdzIGRpZ2l0YWwgZmlsdGVycyBlbmFibGUgc3RhdHVzICovCisJdW5zaWduZWQgY2hhciBJRElQYXRNYXRjaEVuOwkvKiAgSURJJ3MgcGF0dGVybiBtYXRjaCBlbmFibGUgc3RhdHVzICovCisJdW5zaWduZWQgY2hhciBJRElQYXRNYXRjaFZhbHVlOwkvKiAgSURJJ3MgcGF0dGVybiBtYXRjaCB2YWx1ZSAqLworCXVuc2lnbmVkIHNob3J0IElESUZpbHRyTG93WzhdOwkvKiAgSURJJ3MgZmlsdGVyIHZhbHVlIGxvdyBzaWduYWwgKi8KKwl1bnNpZ25lZCBzaG9ydCBJRElGaWx0ckhpZ2hbOF07CS8qICBJREkncyBmaWx0ZXIgdmFsdWUgaGlnaCBzaWduYWwgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlICpwY2lfcHJpdiA9IE5VTEw7CS8qIGxpc3Qgb2YgYWxsb2NhdGVkIGNhcmRzICovCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2lfZGlvX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGlvX2JvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2luc25fYml0c19kaV9iKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICpkID0gKGNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKilzLT5wcml2YXRlOworCWludCBpOworCisJZGF0YVsxXSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGQtPnJlZ3M7IGkrKykgeworCQlkYXRhWzFdIHw9IGluYihkZXYtPmlvYmFzZSArIGQtPmFkZHIgKyBpKSA8PCAoOCAqIGkpOworCX0KKworCXJldHVybiAyOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2luc25fYml0c19kaV93KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICpkID0gKGNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKilzLT5wcml2YXRlOworCWludCBpOworCisJZGF0YVsxXSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGQtPnJlZ3M7IGkrKykKKwkJZGF0YVsxXSB8PSBpbncoZGV2LT5pb2Jhc2UgKyBkLT5hZGRyICsgMiAqIGkpIDw8ICgxNiAqIGkpOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaV9kaW9faW5zbl9iaXRzX2RvX2Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKmQgPSAoY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqKXMtPnByaXZhdGU7CisJaW50IGk7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJZm9yIChpID0gMDsgaSA8IGQtPnJlZ3M7IGkrKykKKwkJCW91dGIoKHMtPnN0YXRlID4+ICg4ICogaSkpICYgMHhmZiwKKwkJCQlkZXYtPmlvYmFzZSArIGQtPmFkZHIgKyBpKTsKKwl9CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaV9kaW9faW5zbl9iaXRzX2RvX3coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKmQgPSAoY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqKXMtPnByaXZhdGU7CisJaW50IGk7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJZm9yIChpID0gMDsgaSA8IGQtPnJlZ3M7IGkrKykKKwkJCW91dHcoKHMtPnN0YXRlID4+ICgxNiAqIGkpKSAmIDB4ZmZmZiwKKwkJCQlkZXYtPmlvYmFzZSArIGQtPmFkZHIgKyAyICogaSk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzYwX3VuY2hlY2tlZF9tYnhyZXF1ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGNoYXIgKm9tYiwgdW5zaWduZWQgY2hhciAqaW1iLCBpbnQgcmVwZWF0cykKK3sKKwlpbnQgY250LCB0b3V0LCBvayA9IDA7CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IHJlcGVhdHM7IGNudCsrKSB7CisJCW91dGIob21iWzBdLCBkZXYtPmlvYmFzZSArIE9NQjApOworCQlvdXRiKG9tYlsxXSwgZGV2LT5pb2Jhc2UgKyBPTUIxKTsKKwkJb3V0YihvbWJbMl0sIGRldi0+aW9iYXNlICsgT01CMik7CisJCW91dGIob21iWzNdLCBkZXYtPmlvYmFzZSArIE9NQjMpOworCQlmb3IgKHRvdXQgPSAwOyB0b3V0IDwgMjUxOyB0b3V0KyspIHsKKwkJCWlmICgoaW1iWzJdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMikpID09IG9tYlsyXSkgeworCQkJCWltYlswXSA9IGluYihkZXYtPmlvYmFzZSArIElNQjApOworCQkJCWltYlsxXSA9IGluYihkZXYtPmlvYmFzZSArIElNQjEpOworCQkJCWltYlszXSA9IGluYihkZXYtPmlvYmFzZSArIElNQjMpOworCQkJCW9rID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKG9rKQorCQkJcmV0dXJuIDA7CisJfQorCisJY29tZWRpX2Vycm9yKGRldiwgIlBDSS0xNzYwIG1haWxib3ggcmVxdWVzdCB0aW1lb3V0ISIpOworCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyBpbnQgcGNpMTc2MF9jbGVhcl9pbWIyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGNoYXIgb21iWzRdID0geyAweDAsIDB4MCwgQ01EX0NsZWFySU1CMiwgMHgwIH07CisJdW5zaWduZWQgY2hhciBpbWJbNF07CisJLyogY2hlY2sgaWYgaW1iMiBpcyBhbHJlYWR5IGNsZWFyICovCisJaWYgKGluYihkZXYtPmlvYmFzZSArIElNQjIpID09IENNRF9DbGVhcklNQjIpCisJCXJldHVybiAwOworCXJldHVybiBwY2kxNzYwX3VuY2hlY2tlZF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIsIE9NQkNNRF9SRVRSWSk7Cit9CisKK3N0YXRpYyBpbnQgcGNpMTc2MF9tYnhyZXF1ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGNoYXIgKm9tYiwgdW5zaWduZWQgY2hhciAqaW1iKQoreworCWlmIChvbWJbMl0gPT0gQ01EX0NsZWFySU1CMikgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImJ1ZyEgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgZm9yIENNRF9DbGVhcklNQjIgY29tbWFuZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGluYihkZXYtPmlvYmFzZSArIElNQjIpID09IG9tYlsyXSkgeworCQlpbnQgcmV0dmFsOworCQlyZXR2YWwgPSBwY2kxNzYwX2NsZWFyX2ltYjIoZGV2KTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gcGNpMTc2MF91bmNoZWNrZWRfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iLCBPTUJDTURfUkVUUlkpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzYwX2luc25fYml0c19kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIElNQjMpOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfaW5zbl9iaXRzX2RvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgb21iWzRdID0geworCQkweDAwLAorCQkweDAwLAorCQlDTURfU2V0UmVsYXlzT3V0cHV0LAorCQkweDAwCisJfTsKKwl1bnNpZ25lZCBjaGFyIGltYls0XTsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlvbWJbMF0gPSBzLT5zdGF0ZTsKKwkJaWYgKCEocmV0ID0gcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpKSkKKwkJCXJldHVybiByZXQ7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzYwX2luc25fY250X3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXQsIG47CisJdW5zaWduZWQgY2hhciBvbWJbNF0gPSB7CisJCUNSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICYgMHgwNywKKwkJMHgwMCwKKwkJQ01EX0dldElESUNudEN1clZhbHVlLAorCQkweDAwCisJfTsKKwl1bnNpZ25lZCBjaGFyIGltYls0XTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJaWYgKCEocmV0ID0gcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpKSkKKwkJCXJldHVybiByZXQ7CisJCWRhdGFbbl0gPSAoaW1iWzFdIDw8IDgpICsgaW1iWzBdOworCX0KKworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzYwX2luc25fY250X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICYgMHgwNzsKKwl1bnNpZ25lZCBjaGFyIGJpdG1hc2sgPSAxIDw8IGNoYW47CisJdW5zaWduZWQgY2hhciBvbWJbNF0gPSB7CisJCWRhdGFbMF0gJiAweGZmLAorCQkoZGF0YVswXSA+PiA4KSAmIDB4ZmYsCisJCUNNRF9TZXRJREkwQ250UmVzZXRWYWx1ZSArIGNoYW4sCisJCTB4MDAKKwl9OworCXVuc2lnbmVkIGNoYXIgaW1iWzRdOworCisJaWYgKGRldnByaXYtPkNudFJlc1ZhbHVlW2NoYW5dICE9IChkYXRhWzBdICYgMHhmZmZmKSkgewkvKiAgU2V0IHJlc2V0IHZhbHVlIGlmIGRpZmZlcmVudCAqLworCQlpZiAoIShyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYikpKQorCQkJcmV0dXJuIHJldDsKKwkJZGV2cHJpdi0+Q250UmVzVmFsdWVbY2hhbl0gPSBkYXRhWzBdICYgMHhmZmZmOworCX0KKworCW9tYlswXSA9IGJpdG1hc2s7CS8qICByZXNldCBjb3VudGVyIHRvIGl0IHJlc2V0IHZhbHVlICovCisJb21iWzJdID0gQ01EX1Jlc2V0SURJQ291bnRlcnM7CisJaWYgKCEocmV0ID0gcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpKSkKKwkJcmV0dXJuIHJldDsKKworCWlmICghKGJpdG1hc2sgJiBkZXZwcml2LT5JRElDbnRFbmFibGUpKSB7CS8qICBzdGFydCBjb3VudGVyIGlmIGl0IGRvbid0IHJ1biAqLworCQlvbWJbMF0gPSBiaXRtYXNrOworCQlvbWJbMl0gPSBDTURfRW5hYmxlSURJQ291bnRlcnM7CisJCWlmICghKHJldCA9IHBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKSkpCisJCQlyZXR1cm4gcmV0OworCQlkZXZwcml2LT5JRElDbnRFbmFibGUgfD0gYml0bWFzazsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBvbWJbNF0gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwl1bnNpZ25lZCBjaGFyIGltYls0XTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBJTlRDU1IwKTsJLyogIGRpc2FibGUgSVJRICovCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIElOVENTUjEpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBJTlRDU1IyKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgSU5UQ1NSMyk7CisJZGV2cHJpdi0+R2xvYmFsSXJxRW5hYmxlZCA9IDA7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9TZXRSZWxheXNPdXRwdXQ7CS8qICByZXNldCByZWxheSBvdXRwdXRzICovCisJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCisJb21iWzBdID0gMHgwMDsKKwlvbWJbMl0gPSBDTURfRW5hYmxlSURJQ291bnRlcnM7CS8qICBkaXNhYmxlIElESSB1cCBjb3VudGVycyAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElDbnRFbmFibGUgPSAwOworCisJb21iWzBdID0gMHgwMDsKKwlvbWJbMl0gPSBDTURfT3ZlcmZsb3dJRElDb3VudGVyczsJLyogIGRpc2FibGUgY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0cyAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElDbnRPdmVyRW5hYmxlID0gMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX01hdGNoSW50SURJQ291bnRlcnM7CS8qICBkaXNhYmxlIGNvdW50ZXJzIG1hdGNoIHZhbHVlIGludGVycnVwdHMgKi8KKwlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisJZGV2cHJpdi0+SURJQ250TWF0Y2hFbmFibGUgPSAwOworCisJb21iWzBdID0gMHgwMDsKKwlvbWJbMV0gPSAweDgwOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsJLyogIHNldCBJREkgdXAgY291bnRlcnMgbWF0Y2ggdmFsdWUgKi8KKwkJb21iWzJdID0gQ01EX1NldElESTBDbnRNYXRjaFZhbHVlICsgaTsKKwkJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCQlkZXZwcml2LT5DbnRNYXRjaFZhbHVlW2ldID0gMHg4MDAwOworCX0KKworCW9tYlswXSA9IDB4MDA7CisJb21iWzFdID0gMHgwMDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CS8qICBzZXQgSURJIHVwIGNvdW50ZXJzIHJlc2V0IHZhbHVlICovCisJCW9tYlsyXSA9IENNRF9TZXRJREkwQ250UmVzZXRWYWx1ZSArIGk7CisJCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwkJZGV2cHJpdi0+Q250UmVzVmFsdWVbaV0gPSAweDAwMDA7CisJfQorCisJb21iWzBdID0gMHhmZjsKKwlvbWJbMl0gPSBDTURfUmVzZXRJRElDb3VudGVyczsJLyogIHJlc2V0IElESSB1cCBjb3VudGVycyB0byByZXNldCB2YWx1ZXMgKi8KKwlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9FZGdlSURJQ291bnRlcnM7CS8qICBzZXQgSURJIHVwIGNvdW50ZXJzIGNvdW50IGVkZ2UgKi8KKwlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisJZGV2cHJpdi0+SURJQ250RWRnZSA9IDB4MDA7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9FbmFibGVJRElGaWx0ZXJzOwkvKiAgZGlzYWJsZSBhbGwgZGlnaXRhbCBpbiBmaWx0ZXJzICovCisJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCWRldnByaXYtPklESUZpbHRlcnNFbiA9IDB4MDA7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9FbmFibGVJRElQYXR0ZXJuTWF0Y2g7CS8qICBkaXNhYmxlIHBhdHRlcm4gbWF0Y2hpbmcgKi8KKwlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisJZGV2cHJpdi0+SURJUGF0TWF0Y2hFbiA9IDB4MDA7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9TZXRJRElQYXR0ZXJuTWF0Y2g7CS8qICBzZXQgcGF0dGVybiBtYXRjaCB2YWx1ZSAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElQYXRNYXRjaFZhbHVlID0gMHgwMDsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCURQUklOVEsoImFkdl9wY2lfZGlvIEVEQkc6IEJHTjogcGNpMTcxeF9yZXNldCguLi4pXG4iKTsKKworCXN3aXRjaCAodGhpc19ib2FyZC0+Y2FyZHR5cGUpIHsKKwljYXNlIFRZUEVfUENJMTczMDoKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzBfRE8pOwkvKiAgY2xlYXIgb3V0cHV0cyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF9ETyArIDEpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF9JRE8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF9JRE8gKyAxKTsKKwkJLyogTk8gYnJlYWsgdGhlcmUhICovCisJY2FzZSBUWVBFX1BDSTE3MzM6CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX0VOKTsJLyogIGRpc2FibGUgaW50ZXJydXB0cyAqLworCQlvdXRiKDB4MGYsIGRldi0+aW9iYXNlICsgUENJMTczMF8zX0lOVF9DTFIpOwkvKiAgY2xlYXIgaW50ZXJydXB0cyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF8zX0lOVF9SRik7CS8qICBzZXQgcmlzaW5nIGVkZ2UgdHJpZ2dlciAqLworCQlicmVhazsKKwljYXNlIFRZUEVfUENJMTczNDoKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzRfSURPKTsJLyogIGNsZWFyIG91dHB1dHMgKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzRfSURPICsgMSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM0X0lETyArIDIpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNF9JRE8gKyAzKTsKKwkJYnJlYWs7CisKKwljYXNlIFRZUEVfUENJMTczNjoKKwkJb3V0YigwLCBkZXYtPmlvYmFzZStQQ0kxNzM2X0lETyk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UrUENJMTczNl9JRE8rMSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UrUENJMTczNl8zX0lOVF9FTik7ICAvKiAgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJCW91dGIoMHgwZiwgZGV2LT5pb2Jhc2UrUENJMTczNl8zX0lOVF9DTFIpOy8qICBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UrUENJMTczNl8zX0lOVF9SRik7ICAvKiAgc2V0IHJpc2luZyBlZGdlIHRyaWdnZXIgKi8KKwkJYnJlYWs7CisKKwljYXNlIFRZUEVfUENJMTc1MDoKKwljYXNlIFRZUEVfUENJMTc1MToKKwkJb3V0YigweDg4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTBfSUNSKTsJLyogIGRpc2FibGUgJiBjbGVhciBpbnRlcnJ1cHRzICovCisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzUyOgorCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml82X0NGQyk7CS8qICBkaXNhYmxlIGNoYW5uZWwgZnJlZXplIGZ1bmN0aW9uICovCisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyX0lETyk7CS8qICBjbGVhciBvdXRwdXRzICovCisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyX0lETyArIDIpOworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml9JRE8yKTsKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfSURPMiArIDIpOworCQlicmVhazsKKwljYXNlIFRZUEVfUENJMTc1M0U6CisJCW91dGIoMHg4OCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzRV9JQ1IwKTsJLyogIGRpc2FibGUgJiBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzRV9JQ1IxKTsKKwkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNFX0lDUjIpOworCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M0VfSUNSMyk7CisJCS8qIE5PIGJyZWFrIHRoZXJlISAqLworCWNhc2UgVFlQRV9QQ0kxNzUzOgorCQlvdXRiKDB4ODgsIGRldi0+aW9iYXNlICsgUENJMTc1M19JQ1IwKTsJLyogIGRpc2FibGUgJiBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjEpOworCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M19JQ1IyKTsKKwkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNfSUNSMyk7CisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzU0OgorCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF82X0lDUjApOwkvKiAgZGlzYWJsZSBhbmQgY2xlYXIgaW50ZXJydXB0cyAqLworCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF82X0lDUjEpOworCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF9JQ1IyKTsKKwkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfSUNSMyk7CisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzU2OgorCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml82X0NGQyk7CS8qICBkaXNhYmxlIGNoYW5uZWwgZnJlZXplIGZ1bmN0aW9uICovCisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMCk7CS8qICBkaXNhYmxlIGFuZCBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMSk7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU2X0lETyk7CS8qICBjbGVhciBvdXRwdXRzICovCisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU2X0lETyArIDIpOworCQlicmVhazsKKwljYXNlIFRZUEVfUENJMTc2MDoKKwkJcGNpMTc2MF9yZXNldChkZXYpOworCQlicmVhazsKKwljYXNlIFRZUEVfUENJMTc2MjoKKwkJb3V0dygweDAxMDEsIGRldi0+aW9iYXNlICsgUENJMTc2Ml9JQ1IpOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJYnJlYWs7CisJfQorCisJRFBSSU5USygiYWR2X3BjaV9kaW8gRURCRzogRU5EOiBwY2kxNzF4X3Jlc2V0KC4uLilcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBzdWJkZXYgPSAwOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA4OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gcGNpMTc2MF9pbnNuX2JpdHNfZGk7CisJc3ViZGV2Kys7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5zdGF0ZSA9IDA7CisJcy0+aW5zbl9iaXRzID0gcGNpMTc2MF9pbnNuX2JpdHNfZG87CisJc3ViZGV2Kys7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9USU1FUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfTFNBTVBMOworCXMtPm5fY2hhbiA9IDI7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZmZmZmY7CisJcy0+bGVuX2NoYW5saXN0ID0gMjsKKy8qICAgICAgIHMtPmluc25fY29uZmlnPXBjaTE3NjBfaW5zbl9wd21fY2ZnOyAqLworCXN1YmRldisrOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJcy0+aW5zbl9yZWFkID0gcGNpMTc2MF9pbnNuX2NudF9yZWFkOworCXMtPmluc25fd3JpdGUgPSBwY2kxNzYwX2luc25fY250X3dyaXRlOworLyogICAgICAgcy0+aW5zbl9jb25maWc9cGNpMTc2MF9pbnNuX2NudF9jZmc7ICovCisJc3ViZGV2Kys7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpX2Rpb19hZGRfZGkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwljb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICogZCwgaW50IHN1YmRldikKK3sKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT04gfCBkLT5zcGVjZmxhZ3M7CisJaWYgKGQtPmNoYW5zID4gMTYpCisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfTFNBTVBMOworCXMtPm5fY2hhbiA9IGQtPmNoYW5zOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IGQtPmNoYW5zOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJc3dpdGNoICh0aGlzX2JvYXJkLT5pb19hY2Nlc3MpIHsKKwljYXNlIElPXzhiOgorCQlzLT5pbnNuX2JpdHMgPSBwY2lfZGlvX2luc25fYml0c19kaV9iOworCQlicmVhazsKKwljYXNlIElPXzE2YjoKKwkJcy0+aW5zbl9iaXRzID0gcGNpX2Rpb19pbnNuX2JpdHNfZGlfdzsKKwkJYnJlYWs7CisJfQorCXMtPnByaXZhdGUgPSAodm9pZCAqKWQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpX2Rpb19hZGRfZG8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwljb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICogZCwgaW50IHN1YmRldikKK3sKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJaWYgKGQtPmNoYW5zID4gMTYpCisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfTFNBTVBMOworCXMtPm5fY2hhbiA9IGQtPmNoYW5zOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IGQtPmNoYW5zOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+c3RhdGUgPSAwOworCXN3aXRjaCAodGhpc19ib2FyZC0+aW9fYWNjZXNzKSB7CisJY2FzZSBJT184YjoKKwkJcy0+aW5zbl9iaXRzID0gcGNpX2Rpb19pbnNuX2JpdHNfZG9fYjsKKwkJYnJlYWs7CisJY2FzZSBJT18xNmI6CisJCXMtPmluc25fYml0cyA9IHBjaV9kaW9faW5zbl9iaXRzX2RvX3c7CisJCWJyZWFrOworCX0KKwlzLT5wcml2YXRlID0gKHZvaWQgKilkOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IENoZWNrQW5kQWxsb2NDYXJkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0LAorCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IHBjaV9kaW9fcHJpdmF0ZSAqcHIsICpwcmV2OworCisJZm9yIChwciA9IHBjaV9wcml2LCBwcmV2ID0gTlVMTDsgcHIgIT0gTlVMTDsgcHJldiA9IHByLCBwciA9IHByLT5uZXh0KSB7CisJCWlmIChwci0+cGNpZGV2ID09IHBjaWRldikgeworCQkJcmV0dXJuIDA7CS8qICB0aGlzIGNhcmQgaXMgdXNlZCwgbG9vayBmb3IgYW5vdGhlciAqLworCQl9CisJfQorCisJaWYgKHByZXYpIHsKKwkJZGV2cHJpdi0+cHJldiA9IHByZXY7CisJCXByZXYtPm5leHQgPSBkZXZwcml2OworCX0gZWxzZSB7CisJCXBjaV9wcml2ID0gZGV2cHJpdjsKKwl9CisKKwlkZXZwcml2LT5wY2lkZXYgPSBwY2lkZXY7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpX2Rpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldCwgc3ViZGV2LCBuX3N1YmRldmljZXMsIGksIGo7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKworCXJ0X3ByaW50aygiY29tZWRpJWQ6IGFkdl9wY2lfZGlvOiAiLCBkZXYtPm1pbm9yKTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlKSkpIDwgMCkgeworCQlydF9wcmludGsoIiwgRXJyb3I6IENhbm4ndCBhbGxvY2F0ZSBwcml2YXRlIG1lbW9yeSFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCQkvKiAgbG9vcCB0aHJvdWdoIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAqLworCQlmb3IgKGkgPSAwOyBpIDwgbl9ib2FyZHR5cGVzOyArK2kpIHsKKwkJCWlmIChib2FyZHR5cGVzW2ldLnZlbmRvcl9pZCAhPSBwY2lkZXYtPnZlbmRvcikKKwkJCQljb250aW51ZTsKKwkJCWlmIChib2FyZHR5cGVzW2ldLmRldmljZV9pZCAhPSBwY2lkZXYtPmRldmljZSkKKwkJCQljb250aW51ZTsKKwkJCS8qICB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8gKi8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCS8qICBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PyAqLworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCXJldCA9IENoZWNrQW5kQWxsb2NDYXJkKGRldiwgaXQsIHBjaWRldik7CisJCQlpZiAocmV0ICE9IDEpIGNvbnRpbnVlOworCQkJZGV2LT5ib2FyZF9wdHIgPSBib2FyZHR5cGVzICsgaTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChkZXYtPmJvYXJkX3B0cikKKwkJCWJyZWFrOworCX0KKworCWlmICghZGV2LT5ib2FyZF9wdHIpIHsKKwkJcnRfcHJpbnRrCisJCQkoIiwgRXJyb3I6IFJlcXVlc3RlZCB0eXBlIG9mIHRoZSBjYXJkIHdhcyBub3QgZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgZHJpdmVyX3BjaV9kaW8uZHJpdmVyX25hbWUpKSB7CisJCXJ0X3ByaW50aworCQkJKCIsIEVycm9yOiBDYW4ndCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCB0aGlzX2JvYXJkLT5tYWluX3BjaV9yZWdpb24pOworCXJ0X3ByaW50aygiLCBiOnM6Zj0lZDolZDolZCwgaW89MHglNGx4IiwKKwkJcGNpZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QocGNpZGV2LT5kZXZmbiksCisJCVBDSV9GVU5DKHBjaWRldi0+ZGV2Zm4pLCBpb2Jhc2UpOworCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlmICh0aGlzX2JvYXJkLT5jYXJkdHlwZSA9PSBUWVBFX1BDSTE3NjApIHsKKwkJbl9zdWJkZXZpY2VzID0gNDsJLyogIDggSURJLCA4IElETywgMiBQV00sIDggQ05UICovCisJfSBlbHNlIHsKKwkJbl9zdWJkZXZpY2VzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9ESV9TVUJERVZTOyBpKyspCisJCQlpZiAodGhpc19ib2FyZC0+c2RpW2ldLmNoYW5zKQorCQkJCW5fc3ViZGV2aWNlcysrOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RPX1NVQkRFVlM7IGkrKykKKwkJCWlmICh0aGlzX2JvYXJkLT5zZG9baV0uY2hhbnMpCisJCQkJbl9zdWJkZXZpY2VzKys7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRElPX1NVQkRFVkc7IGkrKykKKwkJCW5fc3ViZGV2aWNlcyArPSB0aGlzX2JvYXJkLT5zZGlvW2ldLnJlZ3M7CisJCWlmICh0aGlzX2JvYXJkLT5ib2FyZGlkLmNoYW5zKQorCQkJbl9zdWJkZXZpY2VzKys7CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKSB7CisJCXJ0X3ByaW50aygiLCBFcnJvcjogQ2Fubid0IGFsbG9jYXRlIHN1YmRldmljZSBtZW1vcnkhXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlydF9wcmludGsoIi5cbiIpOworCisJc3ViZGV2ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRElfU1VCREVWUzsgaSsrKQorCQlpZiAodGhpc19ib2FyZC0+c2RpW2ldLmNoYW5zKSB7CisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQkJcGNpX2Rpb19hZGRfZGkoZGV2LCBzLCAmdGhpc19ib2FyZC0+c2RpW2ldLCBzdWJkZXYpOworCQkJc3ViZGV2Kys7CisJCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRE9fU1VCREVWUzsgaSsrKQorCQlpZiAodGhpc19ib2FyZC0+c2RvW2ldLmNoYW5zKSB7CisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQkJcGNpX2Rpb19hZGRfZG8oZGV2LCBzLCAmdGhpc19ib2FyZC0+c2RvW2ldLCBzdWJkZXYpOworCQkJc3ViZGV2Kys7CisJCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRElPX1NVQkRFVkc7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IHRoaXNfYm9hcmQtPnNkaW9baV0ucmVnczsgaisrKSB7CisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsCisJCQkJZGV2LT5pb2Jhc2UgKyB0aGlzX2JvYXJkLT5zZGlvW2ldLmFkZHIgKworCQkJCVNJWkVfODI1NSAqIGopOworCQkJc3ViZGV2Kys7CisJCX0KKworCWlmICh0aGlzX2JvYXJkLT5ib2FyZGlkLmNoYW5zKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcGNpX2Rpb19hZGRfZGkoZGV2LCBzLCAmdGhpc19ib2FyZC0+Ym9hcmRpZCwgc3ViZGV2KTsKKwkJc3ViZGV2Kys7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlID09IFRZUEVfUENJMTc2MCkKKwkJcGNpMTc2MF9hdHRhY2goZGV2LCBpdCk7CisKKwlkZXZwcml2LT52YWxpZCA9IDE7CisKKwlwY2lfZGlvX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpX2Rpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGksIGo7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHN1YmRldjsKKworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJaWYgKGRldnByaXYtPnZhbGlkKSB7CisJCQlwY2lfZGlvX3Jlc2V0KGRldik7CisJCX0KKworCQkvKiBUaGlzIHNob3dzIHRoZSBzaWxsaW5lc3Mgb2YgdXNpbmcgdGhpcyBraW5kIG9mCisJCSAqIHNjaGVtZSBmb3IgbnVtYmVyaW5nIHN1YmRldmljZXMuICBEb24ndCBkbyBpdC4gIC0tZHMgKi8KKwkJc3ViZGV2ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9ESV9TVUJERVZTOyBpKyspIHsKKwkJCWlmICh0aGlzX2JvYXJkLT5zZGlbaV0uY2hhbnMpIHsKKwkJCQlzdWJkZXYrKzsKKwkJCX0KKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RPX1NVQkRFVlM7IGkrKykgeworCQkJaWYgKHRoaXNfYm9hcmQtPnNkb1tpXS5jaGFucykgeworCQkJCXN1YmRldisrOworCQkJfQorCQl9CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRElPX1NVQkRFVkc7IGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IHRoaXNfYm9hcmQtPnNkaW9baV0ucmVnczsgaisrKSB7CisJCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgcyk7CisJCQkJc3ViZGV2Kys7CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIGk7CisJCQlzLT5wcml2YXRlID0gTlVMTDsKKwkJfQorCisJCWlmIChkZXZwcml2LT5wY2lkZXYpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lkZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpZGV2KTsKKwkJfQorCisJCWlmIChkZXZwcml2LT5wcmV2KSB7CisJCQlkZXZwcml2LT5wcmV2LT5uZXh0ID0gZGV2cHJpdi0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXBjaV9wcml2ID0gZGV2cHJpdi0+bmV4dDsKKwkJfQorCQlpZiAoZGV2cHJpdi0+bmV4dCkgeworCQkJZGV2cHJpdi0+bmV4dC0+cHJldiA9IGRldnByaXYtPnByZXY7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaV9kaW8sIHBjaV9kaW9fcGNpX3RhYmxlKTsKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2FpbzEyXzguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9fYWlvMTJfOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5N2I0ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2FpbzEyXzguYwpAQCAtMCwwICsxLDIyNiBAQAorLyoKKworICAgIGNvbWVkaS9kcml2ZXJzL2Fpb19haW8xMl84LmMKKworICAgIERyaXZlciBmb3IgQWNjZXMgSS9PIFByb2R1Y3RzIFBDLTEwNCBBSU8xMi04IEFuYWxvZyBJL08gQm9hcmQKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQyZDIFRlY2hub2xvZ2llcywgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisvKgorCitEcml2ZXI6IGFpb19haW8xMl84CitEZXNjcmlwdGlvbjogQWNjZXMgSS9PIFByb2R1Y3RzIFBDLTEwNCBBSU8xMi04IEFuYWxvZyBJL08gQm9hcmQKK0F1dGhvcjogUGFibG8gTWVqaWEgPHBhYmxvLm1lamlhQGNjdGVjaG5vbC5jb20+CitEZXZpY2VzOgorIFtBY2NlcyBJL09dIFBDLTEwNCBBSU8xMi04CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworCitOb3RlczoKKworICBPbmx5IHN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgIjgyNTUuaCIKKworI2RlZmluZSBBSU8xMl84X1NUQVRVUwkJCTB4MDAKKyNkZWZpbmUgQUlPMTJfOF9JTlRFUlJVUFQJCTB4MDEKKyNkZWZpbmUgQUlPMTJfOF9BREMJCQkweDAyCisjZGVmaW5lIEFJTzEyXzhfREFDXzAJCQkweDA0CisjZGVmaW5lIEFJTzEyXzhfREFDXzEJCQkweDA2CisjZGVmaW5lIEFJTzEyXzhfREFDXzIJCQkweDA4CisjZGVmaW5lIEFJTzEyXzhfREFDXzMJCQkweDBBCisjZGVmaW5lIEFJTzEyXzhfQ09VTlRFUl8wCQkweDBDCisjZGVmaW5lIEFJTzEyXzhfQ09VTlRFUl8xCQkweDBECisjZGVmaW5lIEFJTzEyXzhfQ09VTlRFUl8yCQkweDBFCisjZGVmaW5lIEFJTzEyXzhfQ09VTlRFUl9DT05UUk9MCQkweDBGCisjZGVmaW5lIEFJTzEyXzhfRElPXzAJCQkweDEwCisjZGVmaW5lIEFJTzEyXzhfRElPXzEJCQkweDExCisjZGVmaW5lIEFJTzEyXzhfRElPXzIJCQkweDEyCisjZGVmaW5lIEFJTzEyXzhfRElPX1NUQVRVUwkJMHgxMworI2RlZmluZSBBSU8xMl84X0RJT19DT05UUk9MCQkweDE0CisjZGVmaW5lIEFJTzEyXzhfQURDX1RSSUdHRVJfQ09OVFJPTAkweDE1CisjZGVmaW5lIEFJTzEyXzhfVFJJR0dFUgkJCTB4MTYKKyNkZWZpbmUgQUlPMTJfOF9QT1dFUgkJCTB4MTcKKworI2RlZmluZSBTVEFUVVNfQURDX0VPQwkJCTB4ODAKKworI2RlZmluZSBBRENfTU9ERV9OT1JNQUwJCQkweDAwCisjZGVmaW5lIEFEQ19NT0RFX0lOVEVSTkFMX0NMT0NLCQkweDQwCisjZGVmaW5lIEFEQ19NT0RFX1NUQU5EQlkJCTB4ODAKKyNkZWZpbmUgQURDX01PREVfUE9XRVJET1dOCQkweEMwCisKKyNkZWZpbmUgREFDX0VOQUJMRQkJCTB4MTgKKworc3RydWN0IGFpbzEyXzhfYm9hcmR0eXBlIHsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhaW8xMl84X2JvYXJkdHlwZSBib2FyZF90eXBlc1tdID0geworCXsKKyAgICAgIG5hbWU6CSJhaW9fYWlvMTJfOCJ9LAorfTsKKworI2RlZmluZQl0aGlzYm9hcmQJKChjb25zdCBzdHJ1Y3QgYWlvMTJfOF9ib2FyZHR5cGUgICopIGRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgYWlvMTJfOF9wcml2YXRlIHsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbNF07Cit9OworCisjZGVmaW5lIGRldnByaXYJKChzdHJ1Y3QgYWlvMTJfOF9wcml2YXRlICopIGRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBhaW9fYWlvMTJfOF9haV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwl1bnNpZ25lZCBjaGFyIGNvbnRyb2wgPQorCQlBRENfTU9ERV9OT1JNQUwgfAorCQkoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpIDw8IDMpIHwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvL3JlYWQgc3RhdHVzIHRvIGNsZWFyIEVPQyBsYXRjaAorCWluYihkZXYtPmlvYmFzZSArIEFJTzEyXzhfU1RBVFVTKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJaW50IHRpbWVvdXQgPSA1OworCisJCS8vIFNldHVwIGFuZCBzdGFydCBjb252ZXJzaW9uCisJCW91dGIoY29udHJvbCwgZGV2LT5pb2Jhc2UgKyBBSU8xMl84X0FEQyk7CisKKwkJLy8gV2FpdCBmb3IgY29udmVyc2lvbiB0byBjb21wbGV0ZQorCQl3aGlsZSAodGltZW91dCAmJgorCQkJIShpbmIoZGV2LT5pb2Jhc2UgKyBBSU8xMl84X1NUQVRVUykgJiBTVEFUVVNfQURDX0VPQykpIHsKKwkJCXRpbWVvdXQtLTsKKwkJCXByaW50aygidGltZW91dCAlZFxuIiwgdGltZW91dCk7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCWlmICh0aW1lb3V0ID09IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBREMgdGltZW91dCIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlkYXRhW25dID0gaW53KGRldi0+aW9iYXNlICsgQUlPMTJfOF9BREMpICYgMHgwRkZGOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBhaW9fYWlvMTJfOF9hb19yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgdmFsID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IHZhbDsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGludCBhaW9fYWlvMTJfOF9hb193cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBsb25nIHBvcnQgPSBkZXYtPmlvYmFzZSArIEFJTzEyXzhfREFDXzAgKyAoMiAqIGNoYW4pOworCisJLy9lbmFibGUgREFDcworCW91dGIoMHgwMSwgZGV2LT5pb2Jhc2UgKyBEQUNfRU5BQkxFKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0YihkYXRhW2ldICYgMHhGRiwgcG9ydCk7CS8vIExTQgorCQlvdXRiKChkYXRhW2ldID4+IDgpICYgMHgwRiwgcG9ydCArIDEpOwkvLyBNU0IKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2Fpb19haW8xMl84ID0geworCTQsCisJeworCQkJVU5JX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCX0KK307CisKK3N0YXRpYyBpbnQgYWlvX2FpbzEyXzhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCBpb2Jhc2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgMjQsICJhaW9fYWlvMTJfOCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3QiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYWlvMTJfOF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSAmZGV2LT5zdWJkZXZpY2VzWzBdOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0RJRkY7CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9haW9fYWlvMTJfODsKKwlzLT5pbnNuX3JlYWQgPSBhaW9fYWlvMTJfOF9haV9yZWFkOworCisJcyA9ICZkZXYtPnN1YmRldmljZXNbMV07CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKKwlzLT5uX2NoYW4gPSA0OworCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2Fpb19haW8xMl84OworCXMtPmluc25fcmVhZCA9IGFpb19haW8xMl84X2FvX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IGFpb19haW8xMl84X2FvX3dyaXRlOworCisJcyA9ICZkZXYtPnN1YmRldmljZXNbMl07CisJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldi0+aW9iYXNlICsgQUlPMTJfOF9ESU9fMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaW9fYWlvMTJfOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsICZkZXYtPnN1YmRldmljZXNbMl0pOworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIDI0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9haW9fYWlvMTJfOCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhaW9fYWlvMTJfOCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YWlvX2FpbzEyXzhfYXR0YWNoLAorICAgICAgZGV0YWNoOmFpb19haW8xMl84X2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkX3R5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6MSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGFpbzEyXzhfYm9hcmR0eXBlKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYWlvX2FpbzEyXzgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2lpcm9fMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYwZmRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisKKyAgICBjb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCisKKyAgICBEcml2ZXIgZm9yIEFjY2VzIEkvTyBQcm9kdWN0cyBQQy0xMDQgQUlPLUlJUk8tMTYgRGlnaXRhbCBJL08gYm9hcmQKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQyZDIFRlY2hub2xvZ2llcywgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisvKgorCitEcml2ZXI6IGFpb19paXJvXzE2CitEZXNjcmlwdGlvbjogQWNjZXMgSS9PIFByb2R1Y3RzIFBDLTEwNCBJSVJPMTYgUmVsYXkgQW5kIElzb2xhdGVkIElucHV0IEJvYXJkCitBdXRob3I6IFphY2hhcnkgV2FyZSA8emFjaC53YXJlQGNjdGVjaG5vbC5jb20+CitEZXZpY2VzOgorIFtBY2NlcyBJL09dIFBDLTEwNCBBSU8xMi04CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgQUlPX0lJUk9fMTZfU0laRQkweDA4CisjZGVmaW5lIEFJT19JSVJPXzE2X1JFTEFZXzBfNwkweDAwCisjZGVmaW5lIEFJT19JSVJPXzE2X0lOUFVUXzBfNwkweDAxCisjZGVmaW5lIEFJT19JSVJPXzE2X0lSUQkJMHgwMgorI2RlZmluZSBBSU9fSUlST18xNl9SRUxBWV84XzE1CTB4MDQKKyNkZWZpbmUgQUlPX0lJUk9fMTZfSU5QVVRfOF8xNQkweDA1CisKK3N0cnVjdCBhaW9faWlyb18xNl9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZG9fOworCWludCBkaTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWlvX2lpcm9fMTZfYm9hcmQgYWlvX2lpcm9fMTZfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJhaW9faWlyb18xNiIsCisJICAgICAgZGk6CTE2LAorICAgICAgZG9fOgkxNn0sCit9OworCisjZGVmaW5lCXRoaXNib2FyZAkoKGNvbnN0IHN0cnVjdCBhaW9faWlyb18xNl9ib2FyZCAqKSBkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGFpb19paXJvXzE2X3ByaXZhdGUgeworCWludCBkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKK307CisKKyNkZWZpbmUJZGV2cHJpdgkoKHN0cnVjdCBhaW9faWlyb18xNl9wcml2YXRlICopIGRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBhaW9faWlyb18xNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYWlvX2lpcm9fMTYgPSB7CisgICAgICBkcml2ZXJfbmFtZToiYWlvX2lpcm9fMTYiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmFpb19paXJvXzE2X2F0dGFjaCwKKyAgICAgIGRldGFjaDphaW9faWlyb18xNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZhaW9faWlyb18xNl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGFpb19paXJvXzE2X2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoYWlvX2lpcm9fMTZfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgYWlvX2lpcm9fMTZfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBhaW9faWlyb18xNl9kaW9faW5zbl9iaXRzX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhaW9faWlyb18xNl9kaW9faW5zbl9iaXRzX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWlvX2lpcm9fMTZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCBpb2Jhc2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlwcmludGsoImNvbWVkaSVkOiBhaW9faWlyb18xNjogIiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBBSU9fSUlST18xNl9TSVpFLCBkZXYtPmJvYXJkX25hbWUpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3QiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYWlvX2lpcm9fMTZfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfd3JpdGU7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfcmVhZDsKKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYWlvX2lpcm9fMTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGFpb19paXJvXzE2OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgQUlPX0lJUk9fMTZfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaW9faWlyb18xNl9kaW9faW5zbl9iaXRzX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgQUlPX0lJUk9fMTZfUkVMQVlfMF83KTsKKwkJb3V0Yigocy0+c3RhdGUgPj4gOCkgJiAweGZmLAorCQkJZGV2LT5pb2Jhc2UgKyBBSU9fSUlST18xNl9SRUxBWV84XzE1KTsKKwl9CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhaW9faWlyb18xNl9kaW9faW5zbl9iaXRzX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IDA7CisJZGF0YVsxXSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBBSU9fSUlST18xNl9JTlBVVF8wXzcpOworCWRhdGFbMV0gfD0gaW5iKGRldi0+aW9iYXNlICsgQUlPX0lJUk9fMTZfSU5QVVRfOF8xNSkgPDwgODsKKworCXJldHVybiAyOworfQorCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2Fpb19paXJvXzE2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbTk1MTMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbTk1MTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMzY2YxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtOTUxMy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgICAgbW9kdWxlL2FtOTUxMy5oCisgICAgdmFsdWUgYWRkZWQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIGZvciBBbTk1MTMgdGltZXIgY2hpcAorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9BTTk1MTNfSF8KKyNkZWZpbmUgX0FNOTUxM19IXworCisjaWYgMAorCisvKgorICoJQmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUsIHRoZSBmb2xsb3dpbmcgbmVlZCB0byBiZSBkZWZpbmVkOgorICovCisjZGVmaW5lIEFtOTUxM184QklUQlVTIHh4eAorLyogb3IgKi8KKyNkZWZpbmUgQW05NTEzXzE2QklUQlVTIHh4eAorCisjZGVmaW5lIEFtOTUxM19vdXRwdXRfY29udHJvbChhKQl4eHgKKyNkZWZpbmUgQW05NTEzX2lucHV0X3N0YXR1cygpCQl4eHgKKyNkZWZpbmUgQW05NTEzX291dHB1dF9kYXRhKGEpCQl4eHgKKyNkZWZpbmUgQW05NTEzX2lucHV0X2RhdGEoKQkJeHh4CisKKyNlbmRpZgorCisvKgorICoKKyAqLworCisjaWZkZWYgQW05NTEzXzhCSVRCVVMKKworI2RlZmluZSBBbTk1MTNfd3JpdGVfcmVnaXN0ZXIocmVnLHZhbCkJCQkJXAorCWRvewkJCQkJCQlcCisJCUFtOTUxM19vdXRwdXRfY29udHJvbChyZWcpOwkJCVwKKwkJQW05NTEzX291dHB1dF9kYXRhKHZhbD4+OCk7CQkJXAorCQlBbTk1MTNfb3V0cHV0X2RhdGEodmFsJjB4ZmYpOwkJCVwKKwl9d2hpbGUoMCkKKworI2RlZmluZSBBbTk1MTNfcmVhZF9yZWdpc3RlcihyZWcsdmFsKQkJCQlcCisJZG97CQkJCQkJCVwKKwkJQW05NTEzX291dHB1dF9jb250cm9sKHJlZyk7CQkJXAorCQl2YWw9QW05NTEzX2lucHV0X2RhdGEoKTw8ODsJCQlcCisJCXZhbHw9QW05NTEzX2lucHV0X2RhdGEoKTsJCQlcCisJfXdoaWxlKDApCisKKyNlbHNlIC8qIEFtOTUxM18xNkJJVEJVUyAqLworCisjZGVmaW5lIEFtOTUxM193cml0ZV9yZWdpc3RlcihyZWcsdmFsKQkJCQlcCisJZG97CQkJCQkJCVwKKwkJQW05NTEzX291dHB1dF9jb250cm9sKHJlZyk7CQkJXAorCQlBbTk1MTNfb3V0cHV0X2RhdGEodmFsKTsJCQlcCisJfXdoaWxlKDApCisKKyNkZWZpbmUgQW05NTEzX3JlYWRfcmVnaXN0ZXIocmVnLHZhbCkJCQkJXAorCWRvewkJCQkJCQlcCisJCUFtOTUxM19vdXRwdXRfY29udHJvbChyZWcpOwkJCVwKKwkJdmFsPUFtOTUxM19pbnB1dF9kYXRhKCk7CQkJXAorCX13aGlsZSgwKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1jY19zNTkzMy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtY2NfczU5MzMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2VmZmNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtY2NfczU5MzMuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hbWNjX3M1OTMzLmgKKworICAgIFN0dWZmIGZvciBBTUNDIFM1OTMzIFBDSSBDb250cm9sbGVyCisKKyAgICBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorCisgICAgSW5zcGlyYXRlZCBmcm9tIGdlbmVyYWwtcHVycG9zZSBBTUNDIFM1OTMzIFBDSSBNYXRjaG1ha2VyIGRyaXZlcgorICAgIG1hZGUgYnkgQW5kcmVhIENpc3Rlcm5pbm8gIDxhY2lzdGVyQHBjYXBlMS5waS5pbmZuLml0PgorICAgIGFuZCBhcyByZXN1bHQgb2YgZXNwaW9uYWdlIGZyb20gTUlURSBjb2RlIG1hZGUgYnkgRGF2aWQgQS4gU2NobGVlZi4KKyAgICBUaGFua3MgdG8gQU1DQyBmb3IgdGhlaXIgb24tbGluZSBkb2N1bWVudGF0aW9uIGFuZCBidXMgbWFzdGVyIERNQQorICAgIGV4YW1wbGUuCisqLworCisjaWZuZGVmIF9BTUNDX1M1OTMzX0hfCisjZGVmaW5lIF9BTUNDX1M1OTMzX0hfCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXIgT2Zmc2V0cyAtIFBDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBTUNDX09QX1JFR19PTUIxICAgICAgICAgMHgwMAorI2RlZmluZSBBTUNDX09QX1JFR19PTUIyICAgICAgICAgMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19PTUIzICAgICAgICAgMHgwOAorI2RlZmluZSBBTUNDX09QX1JFR19PTUI0ICAgICAgICAgMHgwYworI2RlZmluZSBBTUNDX09QX1JFR19JTUIxICAgICAgICAgMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIyICAgICAgICAgMHgxNAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIzICAgICAgICAgMHgxOAorI2RlZmluZSBBTUNDX09QX1JFR19JTUI0ICAgICAgICAgMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19GSUZPICAgICAgICAgMHgyMAorI2RlZmluZSBBTUNDX09QX1JFR19NV0FSICAgICAgICAgMHgyNAorI2RlZmluZSBBTUNDX09QX1JFR19NV1RDICAgICAgICAgMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19NUkFSICAgICAgICAgMHgyYworI2RlZmluZSBBTUNDX09QX1JFR19NUlRDICAgICAgICAgMHgzMAorI2RlZmluZSBBTUNDX09QX1JFR19NQkVGICAgICAgICAgMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19JTlRDU1IgICAgICAgMHgzOAorI2RlZmluZSAgQU1DQ19PUF9SRUdfSU5UQ1NSX1NSQyAgKEFNQ0NfT1BfUkVHX0lOVENTUiArIDIpCS8qIElOVCBzb3VyY2UgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX0lOVENTUl9GRUMgIChBTUNDX09QX1JFR19JTlRDU1IgKyAzKQkvKiBGSUZPIGN0cmwgKi8KKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUNTUiAgICAgICAgIDB4M2MKKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBIChBTUNDX09QX1JFR19NQ1NSICsgMikJLyogRGF0YSBpbiBieXRlIDIgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX01DU1JfTlZDTUQgIChBTUNDX09QX1JFR19NQ1NSICsgMykJLyogQ29tbWFuZCBpbiBieXRlIDMgKi8KKworI2RlZmluZSBBTUNDX0ZJRk9fREVQVEhfRFdPUkQJOAorI2RlZmluZSBBTUNDX0ZJRk9fREVQVEhfQllURVMJKDggKiBzaXplb2YgKHUzMikpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIFBDSSBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJTlRDU1JfT1VUQk9YX0JZVEUoeCkJKCh4KSAmIDB4MykKKyNkZWZpbmUgSU5UQ1NSX09VVEJPWF9TRUxFQ1QoeCkJKCgoeCkgJiAweDMpIDw8IDIpCisjZGVmaW5lIElOVENTUl9PVVRCT1hfRU1QVFlfSU5UCTB4MTAJLy8gZW5hYmxlIG91dGJveCBlbXB0eSBpbnRlcnJ1cHQKKyNkZWZpbmUgSU5UQ1NSX0lOQk9YX0JZVEUoeCkJKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lIElOVENTUl9JTkJPWF9TRUxFQ1QoeCkJKCgoeCkgJiAweDMpIDw8IDEwKQorI2RlZmluZSBJTlRDU1JfSU5CT1hfRlVMTF9JTlQJMHgxMDAwCS8vIGVuYWJsZSBpbmJveCBmdWxsIGludGVycnVwdAorI2RlZmluZSBJTlRDU1JfSU5CT1hfSU5UUl9TVEFUVVMJMHgyMDAwMAkvLyByZWFkLCBvciB3cml0ZSBjbGVhciBpbmJveCBmdWxsIGludGVycnVwdAorI2RlZmluZSBJTlRDU1JfSU5UUl9BU1NFUlRFRAkweDgwMDAwMAkvLyByZWFkIG9ubHksIGludGVycnVwdCBhc3NlcnRlZAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgLSBQQ0kgbm9uLXZvbGF0aWxlIHJhbSBjb21tYW5kIHJlZ2lzdGVyIChieXRlIDMgb2YgbWFzdGVyIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyKSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE1DU1JfTlZfTE9BRF9MT1dfQUREUgkweDAKKyNkZWZpbmUgTUNTUl9OVl9MT0FEX0hJR0hfQUREUgkweDIwCisjZGVmaW5lIE1DU1JfTlZfV1JJVEUJMHg0MAorI2RlZmluZSBNQ1NSX05WX1JFQUQJMHg2MAorI2RlZmluZSBNQ1NSX05WX01BU0sJMHg2MAorI2RlZmluZSBNQ1NSX05WX0VOQUJMRQkweDgwCisjZGVmaW5lIE1DU1JfTlZfQlVTWQlNQ1NSX05WX0VOQUJMRQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgT3BlcmF0aW9uIFJlZ2lzdGVycyBTaXplIC0gUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfU0laRQkgNjQJLyogaW4gYnl0ZXMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIE9wZXJhdGlvbiBSZWdpc3RlciBPZmZzZXRzIC0gQWRkLW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIxICAgICAgICAgMHgwMAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMiAgICAgICAgIDB4MDQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjMgICAgICAgICAweDA4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUI0ICAgICAgICAgMHgwYworI2RlZmluZSBBTUNDX09QX1JFR19BT01CMSAgICAgICAgIDB4MTAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjIgICAgICAgICAweDE0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIzICAgICAgICAgMHgxOAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CNCAgICAgICAgIDB4MWMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUZJRk8gICAgICAgICAweDIwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNV0FSICAgICAgICAgMHgyNAorI2RlZmluZSBBTUNDX09QX1JFR19BUFRBICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQVBURCAgICAgICAgICAweDJjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNUkFSICAgICAgICAgMHgzMAorI2RlZmluZSBBTUNDX09QX1JFR19BTUJFRiAgICAgICAgIDB4MzQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlOVCAgICAgICAgICAweDM4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FHQ1NUUyAgICAgICAgMHgzYworI2RlZmluZSBBTUNDX09QX1JFR19BTVdUQyAgICAgICAgIDB4NTgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1SVEMgICAgICAgICAweDVjCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIEFkZC1vbiBHZW5lcmFsIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBR0NTVFNfQ09OVFJPTF9NQVNLCTB4ZmZmZmYwMDAKKyNkZWZpbmUgIEFHQ1NUU19OVl9BQ0NfTUFTSwkweGUwMDAwMDAwCisjZGVmaW5lICBBR0NTVFNfUkVTRVRfTUFTSwkweDBlMDAwMDAwCisjZGVmaW5lICBBR0NTVFNfTlZfREFfTUFTSwkweDAwZmYwMDAwCisjZGVmaW5lICBBR0NTVFNfQklTVF9NQVNLCTB4MDAwMGYwMDAKKyNkZWZpbmUgQUdDU1RTX1NUQVRVU19NQVNLCTB4MDAwMDAwZmYKKyNkZWZpbmUgIEFHQ1NUU19UQ1pFUk9fTUFTSwkweDAwMDAwMGMwCisjZGVmaW5lICBBR0NTVFNfRklGT19TVF9NQVNLCTB4MDAwMDAwM2YKKworI2RlZmluZSBBR0NTVFNfUkVTRVRfTUJGTEFHUwkweDA4MDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9QMkFfRklGTwkweDA0MDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9BMlBfRklGTwkweDAyMDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9GSUZPUwkoQUdDU1RTX1JFU0VUX0EyUF9GSUZPIHwgQUdDU1RTX1JFU0VUX1AyQV9GSUZPKQorCisjZGVmaW5lIEFHQ1NUU19BMlBfVENPVU5UCTB4MDAwMDAwODAKKyNkZWZpbmUgQUdDU1RTX1AyQV9UQ09VTlQJMHgwMDAwMDA0MAorCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfRU1QVFkJMHgwMDAwMDAyMAorI2RlZmluZSBBR0NTVFNfRlNfUDJBX0hBTEYJMHgwMDAwMDAxMAorI2RlZmluZSBBR0NTVFNfRlNfUDJBX0ZVTEwJMHgwMDAwMDAwOAorCisjZGVmaW5lIEFHQ1NUU19GU19BMlBfRU1QVFkJMHgwMDAwMDAwNAorI2RlZmluZSBBR0NTVFNfRlNfQTJQX0hBTEYJMHgwMDAwMDAwMgorI2RlZmluZSBBR0NTVFNfRlNfQTJQX0ZVTEwJMHgwMDAwMDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgLSBBZGQtb24gSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBSU5UX0lOVF9NQVNLCQkweDAwZmYwMDAwCisjZGVmaW5lIEFJTlRfU0VMX01BU0sJCTB4MDAwMGZmZmYKKyNkZWZpbmUgIEFJTlRfSVNfRU5TRUxfTUFTSwkweDAwMDAxZjFmCisKKyNkZWZpbmUgQUlOVF9JTlRfQVNTRVJURUQJMHgwMDgwMDAwMAorI2RlZmluZSBBSU5UX0JNX0VSUk9SCQkweDAwMjAwMDAwCisjZGVmaW5lIEFJTlRfQklTVF9JTlQJCTB4MDAxMDAwMDAKKworI2RlZmluZSBBSU5UX1JUX0NPTVBMRVRFCTB4MDAwODAwMDAKKyNkZWZpbmUgQUlOVF9XVF9DT01QTEVURQkweDAwMDQwMDAwCisKKyNkZWZpbmUgQUlOVF9PVVRfTUJfSU5UCQkweDAwMDIwMDAwCisjZGVmaW5lIEFJTlRfSU5fTUJfSU5UCQkweDAwMDEwMDAwCisKKyNkZWZpbmUgQUlOVF9SRUFEX0NPTVBMCQkweDAwMDA4MDAwCisjZGVmaW5lIEFJTlRfV1JJVEVfQ09NUEwJMHgwMDAwNDAwMAorCisjZGVmaW5lIEFJTlRfT01CX0VOQUJMRSAJMHgwMDAwMTAwMAorI2RlZmluZSBBSU5UX09NQl9TRUxFQ1QgCTB4MDAwMDBjMDAKKyNkZWZpbmUgQUlOVF9PTUJfQllURQkJMHgwMDAwMDMwMAorCisjZGVmaW5lIEFJTlRfSU1CX0VOQUJMRSAJMHgwMDAwMDAxMAorI2RlZmluZSBBSU5UX0lNQl9TRUxFQ1QgCTB4MDAwMDAwMGMKKyNkZWZpbmUgQUlOVF9JTUJfQllURQkJMHgwMDAwMDAwMworCisvLyB0aGVzZSBhcmUgYml0cyBmcm9tIHZhcmlvdXMgZGlmZmVyZW50IHJlZ2lzdGVycywgbmVlZHMgY2xlYW51cCBYWFgKKy8qIEVuYWJsZSBCdXMgTWFzdGVyaW5nICovCisjZGVmaW5lIEVOX0EyUF9UUkFOU0ZFUlMJMHgwMDAwMDQwMAorLyogRklGTyBGbGFnIFJlc2V0ICovCisjZGVmaW5lIFJFU0VUX0EyUF9GTEFHUwkJMHgwNDAwMDAwMEwKKy8qIEZJRk8gUmVsYXRpdmUgUHJpb3JpdHkgKi8KKyNkZWZpbmUgQTJQX0hJX1BSSU9SSVRZCQkweDAwMDAwMTAwTAorLyogSWRlbnRpZnkgSW50ZXJydXB0IFNvdXJjZXMgKi8KKyNkZWZpbmUgQU5ZX1M1OTNYX0lOVAkJMHgwMDgwMDAwMEwKKyNkZWZpbmUgUkVBRF9UQ19JTlQJCTB4MDAwODAwMDBMCisjZGVmaW5lIFdSSVRFX1RDX0lOVAkJMHgwMDA0MDAwMEwKKyNkZWZpbmUgSU5fTUJfSU5UCQkweDAwMDIwMDAwTAorI2RlZmluZSBNQVNURVJfQUJPUlRfSU5UCTB4MDAxMDAwMDBMCisjZGVmaW5lIFRBUkdFVF9BQk9SVF9JTlQJMHgwMDIwMDAwMEwKKyNkZWZpbmUgQlVTX01BU1RFUl9JTlQJCTB4MDAyMDAwMDBMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTVlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKQEAgLTAsMCArMSwxNDgzIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMC5jCisgICAgRHJpdmVyIGZvciBBbXBsaWNvbiBQQzI3MkUgYW5kIFBDSTI3MiBESU8gYm9hcmRzLgorICAgIChTdXBwb3J0IGZvciBvdGhlciBib2FyZHMgaW4gQW1wbGljb24gMjAwIHNlcmllcyBtYXkgYmUgYWRkZWQgYXQKKyAgICBhIGxhdGVyIGRhdGUsIGUuZy4gUENJMjE1LikKKworICAgIENvcHlyaWdodCAoQykgMjAwNSBNRVYgTHRkLiA8aHR0cDovL3d3dy5tZXYuY28udWsvPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCwyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBhbXBsY19kaW8yMDAKK0Rlc2NyaXB0aW9uOiBBbXBsaWNvbiAyMDAgU2VyaWVzIERpZ2l0YWwgSS9PCitBdXRob3I6IElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FtcGxpY29uXSBQQzIxMkUgKHBjMjEyZSksIFBDMjE0RSAocGMyMTRlKSwgUEMyMTVFIChwYzIxNWUpLAorICBQQ0kyMTUgKHBjaTIxNSBvciBhbXBsY19kaW8yMDApLCBQQzIxOEUgKHBjMjE4ZSksIFBDMjcyRSAocGMyNzJlKSwKKyAgUENJMjcyIChwY2kyNzIgb3IgYW1wbGNfZGlvMjAwKQorVXBkYXRlZDogV2VkLCAyMiBPY3QgMjAwOCAxMzozNjowMiArMDEwMAorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBQQzIxMkUsIFBDMjE0RSwgUEMyMTVFLCBQQzIxOEUsIFBDMjcyRToKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSAob3B0aW9uYWwsIGJ1dCBjb21tYW5kcyB3b24ndCB3b3JrIHdpdGhvdXQgaXQpCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIFBDSTIxNSwgUENJMjcyOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJIGRldmljZSB3aWxsCisgIGJlIHVzZWQuCisKK1Bhc3NpbmcgYSB6ZXJvIGZvciBhbiBvcHRpb24gaXMgdGhlIHNhbWUgYXMgbGVhdmluZyBpdCB1bnNwZWNpZmllZC4KKworU1VCREVWSUNFUworCisgICAgICAgICAgICAgICAgICAgIFBDMjE4RSAgICAgICAgIFBDMjEyRSAgICAgIFBDMjE1RS9QQ0kyMTUKKyAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLQorICBTdWJkZXZpY2VzICAgICAgICAgICA3ICAgICAgICAgICAgICA2ICAgICAgICAgICAgICA1CisgICAwICAgICAgICAgICAgICAgICBDVFItWDEgICAgICAgICBQUEktWCAgICAgICAgICBQUEktWAorICAgMSAgICAgICAgICAgICAgICAgQ1RSLVgyICAgICAgICAgQ1RSLVkxICAgICAgICAgUFBJLVkKKyAgIDIgICAgICAgICAgICAgICAgIENUUi1ZMSAgICAgICAgIENUUi1ZMiAgICAgICAgIENUUi1aMQorICAgMyAgICAgICAgICAgICAgICAgQ1RSLVkyICAgICAgICAgQ1RSLVoxICAgICAgICAgQ1RSLVoyCisgICA0ICAgICAgICAgICAgICAgICBDVFItWjEgICAgICAgICBDVFItWjIgICAgICAgSU5URVJSVVBUCisgICA1ICAgICAgICAgICAgICAgICBDVFItWjIgICAgICAgSU5URVJSVVBUCisgICA2ICAgICAgICAgICAgICAgSU5URVJSVVBUCisKKyAgICAgICAgICAgICAgICAgICAgUEMyMTRFICAgICAgUEMyNzJFL1BDSTI3MgorICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCisgIFN1YmRldmljZXMgICAgICAgICAgIDQgICAgICAgICAgICAgIDQKKyAgIDAgICAgICAgICAgICAgICAgIFBQSS1YICAgICAgICAgIFBQSS1YCisgICAxICAgICAgICAgICAgICAgICBQUEktWSAgICAgICAgICBQUEktWQorICAgMiAgICAgICAgICAgICAgICAgQ1RSLVoxKiAgICAgICAgUFBJLVoKKyAgIDMgICAgICAgICAgICAgICBJTlRFUlJVUFQqICAgICBJTlRFUlJVUFQKKworRWFjaCBQUEkgaXMgYSA4MjU1IGNoaXAgcHJvdmlkaW5nIDI0IERJTyBjaGFubmVscy4gIFRoZSBESU8gY2hhbm5lbHMKK2FyZSBjb25maWd1cmFibGUgYXMgaW5wdXRzIG9yIG91dHB1dHMgaW4gZm91ciBncm91cHM6CisKKyAgUG9ydCBBICAtIGNoYW5uZWxzICAwIHRvICA3CisgIFBvcnQgQiAgLSBjaGFubmVscyAgOCB0byAxNQorICBQb3J0IENMIC0gY2hhbm5lbHMgMTYgdG8gMTkKKyAgUG9ydCBDSCAtIGNoYW5uZWxzIDIwIHRvIDIzCisKK09ubHkgbW9kZSAwIG9mIHRoZSA4MjU1IGNoaXBzIGlzIHN1cHBvcnRlZC4KKworRWFjaCBDVFIgaXMgYSA4MjU0IGNoaXAgcHJvdmlkaW5nIDMgMTYtYml0IGNvdW50ZXIgY2hhbm5lbHMuICBFYWNoCitjaGFubmVsIGlzIGNvbmZpZ3VyZWQgaW5kaXZpZHVhbGx5IHdpdGggSU5TTl9DT05GSUcgaW5zdHJ1Y3Rpb25zLiAgVGhlCitzcGVjaWZpYyB0eXBlIG9mIGNvbmZpZ3VyYXRpb24gaW5zdHJ1Y3Rpb24gaXMgc3BlY2lmaWVkIGluIGRhdGFbMF0uCitTb21lIGNvbmZpZ3VyYXRpb24gaW5zdHJ1Y3Rpb25zIGV4cGVjdCBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbgorZGF0YVsxXTsgb3RoZXJzIHJldHVybiBhIHZhbHVlIGluIGRhdGFbMV0uICBUaGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24KK2luc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisgIElOU05fQ09ORklHX1NFVF9DT1VOVEVSX01PREUuICBTZXRzIHRoZSBjb3VudGVyIGNoYW5uZWwncyBtb2RlIGFuZAorICAgIEJDRC9iaW5hcnkgc2V0dGluZyBzcGVjaWZpZWQgaW4gZGF0YVsxXS4KKworICBJTlNOX0NPTkZJR184MjU0X1JFQURfU1RBVFVTLiAgUmVhZHMgdGhlIHN0YXR1cyByZWdpc3RlciB2YWx1ZSBmb3IgdGhlCisgICAgY291bnRlciBjaGFubmVsIGludG8gZGF0YVsxXS4KKworICBJTlNOX0NPTkZJR19TRVRfQ0xPQ0tfU1JDLiAgU2V0cyB0aGUgY291bnRlciBjaGFubmVsJ3MgY2xvY2sgc291cmNlIGFzCisgICAgc3BlY2lmaWVkIGluIGRhdGFbMV0gKHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyB2YWx1ZSkuICBOb3QKKyAgICBzdXBwb3J0ZWQgb24gUEMyMTRFLiAgRm9yIHRoZSBvdGhlciBib2FyZHMsIHZhbGlkIGNsb2NrIHNvdXJjZXMgYXJlCisgICAgMCB0byA3IGFzIGZvbGxvd3M6CisKKyAgICAgIDAuICBDTEsgbiwgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIGRlZGljYXRlZCBDTEsgaW5wdXQgZnJvbSB0aGUgU0sxCisgICAgICAgIGNvbm5lY3Rvci4gIChOLkIuIGZvciBvdGhlciB2YWx1ZXMsIHRoZSBjb3VudGVyIGNoYW5uZWwncyBDTEtuCisgICAgICAgIHBpbiBvbiB0aGUgU0sxIGNvbm5lY3RvciBpcyBhbiBvdXRwdXQhKQorICAgICAgMS4gIEludGVybmFsIDEwIE1IeiBjbG9jay4KKyAgICAgIDIuICBJbnRlcm5hbCAxIE1IeiBjbG9jay4KKyAgICAgIDMuICBJbnRlcm5hbCAxMDAga0h6IGNsb2NrLgorICAgICAgNC4gIEludGVybmFsIDEwIGtIeiBjbG9jay4KKyAgICAgIDUuICBJbnRlcm5hbCAxIGtIeiBjbG9jay4KKyAgICAgIDYuICBPVVQgbi0xLCB0aGUgb3V0cHV0IG9mIGNvdW50ZXIgY2hhbm5lbCBuLTEgKHNlZSBub3RlIDEgYmVsb3cpLgorICAgICAgNy4gIEV4dCBDbG9jaywgdGhlIGNvdW50ZXIgY2hpcCdzIGRlZGljYXRlZCBFeHQgQ2xvY2sgaW5wdXQgZnJvbQorICAgICAgICB0aGUgU0sxIGNvbm5lY3Rvci4gIFRoaXMgcGluIGlzIHNoYXJlZCBieSBhbGwgdGhyZWUgY291bnRlcgorICAgICAgICBjaGFubmVscyBvbiB0aGUgY2hpcC4KKworICBJTlNOX0NPTkZJR19HRVRfQ0xPQ0tfU1JDLiAgUmV0dXJucyB0aGUgY291bnRlciBjaGFubmVsJ3MgY3VycmVudAorICAgIGNsb2NrIHNvdXJjZSBpbiBkYXRhWzFdLiAgRm9yIGludGVybmFsIGNsb2NrIHNvdXJjZXMsIGRhdGFbMl0gaXMgc2V0CisgICAgdG8gdGhlIHBlcmlvZCBpbiBucy4KKworICBJTlNOX0NPTkZJR19TRVRfR0FURV9TUkMuICBTZXRzIHRoZSBjb3VudGVyIGNoYW5uZWwncyBnYXRlIHNvdXJjZSBhcworICAgIHNwZWNpZmllZCBpbiBkYXRhWzJdICh0aGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgdmFsdWUpLiAgTm90CisgICAgc3VwcG9ydGVkIG9uIFBDMjE0RS4gIEZvciB0aGUgb3RoZXIgYm9hcmRzLCB2YWxpZCBnYXRlIHNvdXJjZXMgYXJlIDAKKyAgICB0byA3IGFzIGZvbGxvd3M6CisKKyAgICAgIDAuICBWQ0MgKGludGVybmFsICs1ViBkLmMuKSwgaS5lLiBnYXRlIHBlcm1hbmVudGx5IGVuYWJsZWQuCisgICAgICAxLiAgR05EIChpbnRlcm5hbCAwViBkLmMuKSwgaS5lLiBnYXRlIHBlcm1hbmVudGx5IGRpc2FibGVkLgorICAgICAgMi4gIEdBVCBuLCB0aGUgY291bnRlciBjaGFubmVsJ3MgZGVkaWNhdGVkIEdBVCBpbnB1dCBmcm9tIHRoZSBTSzEKKyAgICAgICAgY29ubmVjdG9yLiAgKE4uQi4gZm9yIG90aGVyIHZhbHVlcywgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIEdBVG4KKyAgICAgICAgcGluIG9uIHRoZSBTSzEgY29ubmVjdG9yIGlzIGFuIG91dHB1dCEpCisgICAgICAzLiAgL09VVCBuLTIsIHRoZSBpbnZlcnRlZCBvdXRwdXQgb2YgY291bnRlciBjaGFubmVsIG4tMiAoc2VlIG5vdGUKKyAgICAgICAgMiBiZWxvdykuCisgICAgICA0LiAgUmVzZXJ2ZWQuCisgICAgICA1LiAgUmVzZXJ2ZWQuCisgICAgICA2LiAgUmVzZXJ2ZWQuCisgICAgICA3LiAgUmVzZXJ2ZWQuCisKKyAgSU5TTl9DT05GSUdfR0VUX0dBVEVfU1JDLiAgUmV0dXJucyB0aGUgY291bnRlciBjaGFubmVsJ3MgY3VycmVudCBnYXRlCisgICAgc291cmNlIGluIGRhdGFbMl0uCisKK0Nsb2NrIGFuZCBnYXRlIGludGVyY29ubmVjdGlvbiBub3RlczoKKworICAxLiAgQ2xvY2sgc291cmNlIE9VVCBuLTEgaXMgdGhlIG91dHB1dCBvZiB0aGUgcHJlY2VkaW5nIGNoYW5uZWwgb24gdGhlCisgIHNhbWUgY291bnRlciBzdWJkZXZpY2UgaWYgbiA+IDAsIG9yIHRoZSBvdXRwdXQgb2YgY2hhbm5lbCAyIG9uIHRoZQorICBwcmVjZWRpbmcgY291bnRlciBzdWJkZXZpY2UgKHNlZSBub3RlIDMpIGlmIG4gPSAwLgorCisgIDIuICBHYXRlIHNvdXJjZSAvT1VUIG4tMiBpcyB0aGUgaW52ZXJ0ZWQgb3V0cHV0IG9mIGNoYW5uZWwgMCBvbiB0aGUKKyAgc2FtZSBjb3VudGVyIHN1YmRldmljZSBpZiBuID0gMiwgb3IgdGhlIGludmVydGVkIG91dHB1dCBvZiBjaGFubmVsIG4rMQorICBvbiB0aGUgcHJlY2VkaW5nIGNvdW50ZXIgc3ViZGV2aWNlIChzZWUgbm90ZSAzKSBpZiBuIDwgMi4KKworICAzLiAgVGhlIGNvdW50ZXIgc3ViZGV2aWNlcyBhcmUgY29ubmVjdGVkIGluIGEgcmluZywgc28gdGhlIGhpZ2hlc3QKKyAgY291bnRlciBzdWJkZXZpY2UgcHJlY2VkZXMgdGhlIGxvd2VzdC4KKworVGhlICdJTlRFUlJVUFQnIHN1YmRldmljZSBwcmV0ZW5kcyB0byBiZSBhIGRpZ2l0YWwgaW5wdXQgc3ViZGV2aWNlLiAgVGhlCitkaWdpdGFsIGlucHV0cyBjb21lIGZyb20gdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuICBUaGUgbnVtYmVyIG9mCitjaGFubmVscyBtYXRjaGVzIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0IHNvdXJjZXMuICBUaGUgUEMyMTRFIGRvZXMgbm90CitoYXZlIGFuIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXI7IHNlZSBub3RlcyBvbiAnSU5URVJSVVBUIFNPVVJDRVMnCitiZWxvdy4KKworSU5URVJSVVBUIFNPVVJDRVMKKworICAgICAgICAgICAgICAgICAgICBQQzIxOEUgICAgICAgICBQQzIxMkUgICAgICBQQzIxNUUvUENJMjE1CisgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKyAgU291cmNlcyAgICAgICAgICAgICAgNiAgICAgICAgICAgICAgNiAgICAgICAgICAgICAgNgorICAgMCAgICAgICAgICAgICAgQ1RSLVgxLU9VVCAgICAgIFBQSS1YLUMwICAgICAgIFBQSS1YLUMwCisgICAxICAgICAgICAgICAgICBDVFItWDItT1VUICAgICAgUFBJLVgtQzMgICAgICAgUFBJLVgtQzMKKyAgIDIgICAgICAgICAgICAgIENUUi1ZMS1PVVQgICAgIENUUi1ZMS1PVVQgICAgICBQUEktWS1DMAorICAgMyAgICAgICAgICAgICAgQ1RSLVkyLU9VVCAgICAgQ1RSLVkyLU9VVCAgICAgIFBQSS1ZLUMzCisgICA0ICAgICAgICAgICAgICBDVFItWjEtT1VUICAgICBDVFItWjEtT1VUICAgICBDVFItWjEtT1VUCisgICA1ICAgICAgICAgICAgICBDVFItWjItT1VUICAgICBDVFItWjItT1VUICAgICBDVFItWjItT1VUCisKKyAgICAgICAgICAgICAgICAgICAgUEMyMTRFICAgICAgUEMyNzJFL1BDSTI3MgorICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCisgIFNvdXJjZXMgICAgICAgICAgICAgIDEgICAgICAgICAgICAgIDYKKyAgIDAgICAgICAgICAgICAgICBKVU1QRVItSjUgICAgICBQUEktWC1DMAorICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQSS1YLUMzCisgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBJLVktQzAKKyAgIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEktWS1DMworICAgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQSS1aLUMwCisgICA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBJLVotQzMKKworV2hlbiBhbiBpbnRlcnJ1cHQgc291cmNlIGlzIGVuYWJsZWQgaW4gdGhlIGludGVycnVwdCBzb3VyY2UgZW5hYmxlCityZWdpc3RlciwgYSByaXNpbmcgZWRnZSBvbiB0aGUgc291cmNlIHNpZ25hbCBsYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nCitiaXQgdG8gMSBpbiB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KKworV2hlbiB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB2YWx1ZSBhcyBhIHdob2xlIChhY3R1YWxseSwganVzdCB0aGUKKzYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cykgZ29lcyBmcm9tIHplcm8gdG8gbm9uLXplcm8sIHRoZSBib2FyZCB3aWxsCitnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuICBGb3IgbGV2ZWwtdHJpZ2dlcmVkIGhhcmR3YXJlIGludGVycnVwdHMgKFBDSQorY2FyZCksIHRoZSBpbnRlcnJ1cHQgd2lsbCByZW1haW4gYXNzZXJ0ZWQgdW50aWwgdGhlIGludGVycnVwdCBzdGF0dXMKK3JlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gemVyby4gIEZvciBlZGdlLXRyaWdnZXJlZCBoYXJkd2FyZSBpbnRlcnJ1cHRzCisoSVNBIGNhcmQpLCBubyBmdXJ0aGVyIGludGVycnVwdHMgd2lsbCBvY2N1ciB1bnRpbCB0aGUgaW50ZXJydXB0IHN0YXR1cworcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byB6ZXJvLiAgVG8gY2xlYXIgYSBiaXQgdG8gemVybyBpbiB0aGUgaW50ZXJydXB0CitzdGF0dXMgcmVnaXN0ZXIsIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCBzb3VyY2UgbXVzdCBiZSBkaXNhYmxlZAoraW4gdGhlIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHJlZ2lzdGVyICh0aGVyZSBpcyBubyBzZXBhcmF0ZSBpbnRlcnJ1cHQKK2NsZWFyIHJlZ2lzdGVyKS4KKworVGhlIFBDMjE0RSBkb2VzIG5vdCBoYXZlIGFuIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHJlZ2lzdGVyIG9yIGFuCitpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyOyBpdHMgJ0lOVEVSUlVQVCcgc3ViZGV2aWNlIGhhcyBhIHNpbmdsZQorY2hhbm5lbCBhbmQgaXRzIGludGVycnVwdCBzb3VyY2UgaXMgc2VsZWN0ZWQgYnkgdGhlIHBvc2l0aW9uIG9mIGp1bXBlcgorSjUuCisKK0NPTU1BTkRTCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgYSByZWFkIHN0cmVhbWluZyBhY3F1aXNpdGlvbiBjb21tYW5kIG9uIHRoZQorJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLiAgVGhlIGNoYW5uZWwgbGlzdCBzZWxlY3RzIHRoZSBpbnRlcnJ1cHQgc291cmNlcwordG8gYmUgZW5hYmxlZC4gIEFsbCBjaGFubmVscyB3aWxsIGJlIHNhbXBsZWQgdG9nZXRoZXIgKGNvbnZlcnRfc3JjID09CitUUklHX05PVykuICBUaGUgc2NhbiBiZWdpbnMgYSBzaG9ydCB0aW1lIGFmdGVyIHRoZSBoYXJkd2FyZSBpbnRlcnJ1cHQKK29jY3Vycywgc3ViamVjdCB0byBpbnRlcnJ1cHQgbGF0ZW5jaWVzIChzY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCwKK3NjYW5fYmVnaW5fYXJnID09IDApLiAgVGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgoraXMgcGFja2VkIGludG8gYSBzaG9ydCB2YWx1ZSwgb25lIGJpdCBwZXIgcmVxdWVzdGVkIGNoYW5uZWwsIGluIHRoZQorb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIGNoYW5uZWwgbGlzdC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgRElPMjAwX0RSSVZFUl9OQU1FCSJhbXBsY19kaW8yMDAiCisKKy8qIFBDSSBJRHMgKi8KKy8qICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyNzIgMHgwMDBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjE1IDB4MDAwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQgMHhmZmZmCisKKy8qIDIwMCBzZXJpZXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIERJTzIwMF9JT19TSVpFCQkweDIwCisjZGVmaW5lIERJTzIwMF9YQ0xLX1NDRQkJMHgxOAkvKiBHcm91cCBYIGNsb2NrIHNlbGVjdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBESU8yMDBfWUNMS19TQ0UJCTB4MTkJLyogR3JvdXAgWSBjbG9jayBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX1pDTEtfU0NFCQkweDFhCS8qIEdyb3VwIFogY2xvY2sgc2VsZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIERJTzIwMF9YR0FUX1NDRQkJMHgxYgkvKiBHcm91cCBYIGdhdGUgc2VsZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIERJTzIwMF9ZR0FUX1NDRQkJMHgxYwkvKiBHcm91cCBZIGdhdGUgc2VsZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIERJTzIwMF9aR0FUX1NDRQkJMHgxZAkvKiBHcm91cCBaIGdhdGUgc2VsZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIERJTzIwMF9JTlRfU0NFCQkweDFlCS8qIEludGVycnVwdCBlbmFibGUvc3RhdHVzIHJlZ2lzdGVyICovCisKKy8qCisgKiBNYWNyb3MgZm9yIGNvbnN0cnVjdGluZyB2YWx1ZSBmb3IgRElPXzIwMF8/Q0xLX1NDRSBhbmQKKyAqIERJT18yMDBfP0dBVF9TQ0UgcmVnaXN0ZXJzOgorICoKKyAqICd3aGljaCcgaXM6IDAgZm9yIENUUi1YMSwgQ1RSLVkxLCBDVFItWjE7IDEgZm9yIENUUi1YMiwgQ1RSLVkyIG9yIENUUi1aMi4KKyAqICdjaGFuJyBpcyB0aGUgY2hhbm5lbDogMCwgMSBvciAyLgorICogJ3NvdXJjZScgaXMgdGhlIHNpZ25hbCBzb3VyY2U6IDAgdG8gNy4KKyAqLworI2RlZmluZSBDTEtfU0NFKHdoaWNoLCBjaGFuLCBzb3VyY2UpICgoKHdoaWNoKSA8PCA1KSB8ICgoY2hhbikgPDwgMykgfCAoc291cmNlKSkKKyNkZWZpbmUgR0FUX1NDRSh3aGljaCwgY2hhbiwgc291cmNlKSAoKCh3aGljaCkgPDwgNSkgfCAoKGNoYW4pIDw8IDMpIHwgKHNvdXJjZSkpCisKKy8qCisgKiBQZXJpb2RzIG9mIHRoZSBpbnRlcm5hbCBjbG9jayBzb3VyY2VzIGluIG5hbm9zZWNvbmRzLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2xvY2tfcGVyaW9kWzhdID0geworCTAsCQkJLyogZGVkaWNhdGVkIGNsb2NrIGlucHV0L291dHB1dCBwaW4gKi8KKwkxMDAsCQkJLyogMTAgTUh6ICovCisJMTAwMCwJCQkvKiAxIE1IeiAqLworCTEwMDAwLAkJCS8qIDEwMCBrSHogKi8KKwkxMDAwMDAsCQkJLyogMTAga0h6ICovCisJMTAwMDAwMCwJCS8qIDEga0h6ICovCisJMCwJCQkvKiBPVVQgTi0xICovCisJMAkJCS8qIGdyb3VwIGNsb2NrIGlucHV0IHBpbiAqLworfTsKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucy4KKyAqLworCitlbnVtIGRpbzIwMF9idXN0eXBlIHsgaXNhX2J1c3R5cGUsIHBjaV9idXN0eXBlIH07CisKK2VudW0gZGlvMjAwX21vZGVsIHsKKwlwYzIxMmVfbW9kZWwsCisJcGMyMTRlX21vZGVsLAorCXBjMjE1ZV9tb2RlbCwgcGNpMjE1X21vZGVsLAorCXBjMjE4ZV9tb2RlbCwKKwlwYzI3MmVfbW9kZWwsIHBjaTI3Ml9tb2RlbCwKKwlhbnlwY2lfbW9kZWwKK307CisKK2VudW0gZGlvMjAwX2xheW91dCB7CisJcGMyMTJfbGF5b3V0LAorCXBjMjE0X2xheW91dCwKKwlwYzIxNV9sYXlvdXQsCisJcGMyMThfbGF5b3V0LAorCXBjMjcyX2xheW91dAorfTsKKworc3RydWN0IGRpbzIwMF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpZDsKKwllbnVtIGRpbzIwMF9idXN0eXBlIGJ1c3R5cGU7CisJZW51bSBkaW8yMDBfbW9kZWwgbW9kZWw7CisJZW51bSBkaW8yMDBfbGF5b3V0IGxheW91dDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGlvMjAwX2JvYXJkIGRpbzIwMF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjMjEyZSIsCisJICAgICAgYnVzdHlwZToJaXNhX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CXBjMjEyZV9tb2RlbCwKKwkgICAgICBsYXlvdXQ6CXBjMjEyX2xheW91dCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjMjE0ZSIsCisJICAgICAgYnVzdHlwZToJaXNhX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CXBjMjE0ZV9tb2RlbCwKKwkgICAgICBsYXlvdXQ6CXBjMjE0X2xheW91dCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjMjE1ZSIsCisJICAgICAgYnVzdHlwZToJaXNhX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CXBjMjE1ZV9tb2RlbCwKKwkgICAgICBsYXlvdXQ6CXBjMjE1X2xheW91dCwKKwkJfSwKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCXsKKwkgICAgICBuYW1lOgkicGNpMjE1IiwKKwkgICAgICBkZXZpZDoJUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMTUsCisJICAgICAgYnVzdHlwZToJcGNpX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CXBjaTIxNV9tb2RlbCwKKwkgICAgICBsYXlvdXQ6CXBjMjE1X2xheW91dCwKKwkJfSwKKyNlbmRpZgorCXsKKwkgICAgICBuYW1lOgkicGMyMThlIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyMThlX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMThfbGF5b3V0LAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGMyNzJlIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyNzJlX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyNzJfbGF5b3V0LAorCQl9LAorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CSJwY2kyNzIiLAorCSAgICAgIGRldmlkOglQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTI3MiwKKwkgICAgICBidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGNpMjcyX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyNzJfbGF5b3V0LAorCQl9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJICAgICAgbmFtZToJRElPMjAwX0RSSVZFUl9OQU1FLAorCSAgICAgIGRldmlkOglQQ0lfREVWSUNFX0lEX0lOVkFMSUQsCisJICAgICAgYnVzdHlwZToJcGNpX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CWFueXBjaV9tb2RlbCwJLyogd2lsZGNhcmQgKi8KKwkJfSwKKyNlbmRpZgorfTsKKworLyoKKyAqIExheW91dCBkZXNjcmlwdGlvbnMgLSBzb21lIElTQSBhbmQgUENJIGJvYXJkIGRlc2NyaXB0aW9ucyBzaGFyZSB0aGUgc2FtZQorICogbGF5b3V0LgorICovCisKK2VudW0gZGlvMjAwX3NkdHlwZSB7IHNkX25vbmUsIHNkX2ludHIsIHNkXzgyNTUsIHNkXzgyNTQgfTsKKworI2RlZmluZSBESU8yMDBfTUFYX1NVQkRFVlMJNworI2RlZmluZSBESU8yMDBfTUFYX0lTTlMJCTYKKworc3RydWN0IGRpbzIwMF9sYXlvdXRfc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBuX3N1YmRldnM7CS8qIG51bWJlciBvZiBzdWJkZXZpY2VzICovCisJdW5zaWduZWQgY2hhciBzZHR5cGVbRElPMjAwX01BWF9TVUJERVZTXTsJLyogZW51bSBkaW8yMDBfc2R0eXBlICovCisJdW5zaWduZWQgY2hhciBzZGluZm9bRElPMjAwX01BWF9TVUJERVZTXTsJLyogZGVwZW5kcyBvbiBzZHR5cGUgKi8KKwljaGFyIGhhc19pbnRfc2NlOwkvKiBoYXMgaW50ZXJydXB0IGVuYWJsZS9zdGF0dXMgcmVnaXN0ZXIgKi8KKwljaGFyIGhhc19jbGtfZ2F0X3NjZTsJLyogaGFzIGNsb2NrL2dhdGUgc2VsZWN0aW9uIHJlZ2lzdGVycyAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaW8yMDBfbGF5b3V0X3N0cnVjdCBkaW8yMDBfbGF5b3V0c1tdID0geworCVtwYzIxMl9sYXlvdXRdID0geworCSAgICAgIG5fc3ViZGV2czo2LAorCSAgICAgIHNkdHlwZToJe3NkXzgyNTUsIHNkXzgyNTQsIHNkXzgyNTQsIHNkXzgyNTQsCisJCQkJCXNkXzgyNTQsCisJCQkJc2RfaW50cn0sCisJICAgICAgc2RpbmZvOgl7MHgwMCwgMHgwOCwgMHgwQywgMHgxMCwgMHgxNCwKKwkJCQkweDNGfSwKKwkgICAgICBoYXNfaW50X3NjZToxLAorCSAgICAgIGhhc19jbGtfZ2F0X3NjZToxLAorCQl9LAorCVtwYzIxNF9sYXlvdXRdID0geworCSAgICAgIG5fc3ViZGV2czo0LAorCSAgICAgIHNkdHlwZToJe3NkXzgyNTUsIHNkXzgyNTUsIHNkXzgyNTQsCisJCQkJc2RfaW50cn0sCisJICAgICAgc2RpbmZvOgl7MHgwMCwgMHgwOCwgMHgxMCwgMHgwMX0sCisJICAgICAgaGFzX2ludF9zY2U6MCwKKwkgICAgICBoYXNfY2xrX2dhdF9zY2U6MCwKKwkJfSwKKwlbcGMyMTVfbGF5b3V0XSA9IHsKKwkgICAgICBuX3N1YmRldnM6NSwKKwkgICAgICBzZHR5cGU6CXtzZF84MjU1LCBzZF84MjU1LCBzZF84MjU0LAorCQkJCQlzZF84MjU0LAorCQkJCXNkX2ludHJ9LAorCSAgICAgIHNkaW5mbzoJezB4MDAsIDB4MDgsIDB4MTAsIDB4MTQsIDB4M0Z9LAorCSAgICAgIGhhc19pbnRfc2NlOjEsCisJICAgICAgaGFzX2Nsa19nYXRfc2NlOjEsCisJCX0sCisJW3BjMjE4X2xheW91dF0gPSB7CisJICAgICAgbl9zdWJkZXZzOjcsCisJICAgICAgc2R0eXBlOgl7c2RfODI1NCwgc2RfODI1NCwgc2RfODI1NSwgc2RfODI1NCwKKwkJCQkJc2RfODI1NCwKKwkJCQlzZF9pbnRyfSwKKwkgICAgICBzZGluZm86CXsweDAwLCAweDA0LCAweDA4LCAweDBDLCAweDEwLAorCQkJCQkweDE0LAorCQkJCTB4M0Z9LAorCSAgICAgIGhhc19pbnRfc2NlOjEsCisJICAgICAgaGFzX2Nsa19nYXRfc2NlOjEsCisJCX0sCisJW3BjMjcyX2xheW91dF0gPSB7CisJICAgICAgbl9zdWJkZXZzOjQsCisJICAgICAgc2R0eXBlOgl7c2RfODI1NSwgc2RfODI1NSwgc2RfODI1NSwKKwkJCQlzZF9pbnRyfSwKKwkgICAgICBzZGluZm86CXsweDAwLCAweDA4LCAweDEwLCAweDNGfSwKKwkgICAgICBoYXNfaW50X3NjZToxLAorCSAgICAgIGhhc19jbGtfZ2F0X3NjZTowLAorCQl9LAorfTsKKworLyoKKyAqIFBDSSBkcml2ZXIgdGFibGUuCisgKi8KKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZGlvMjAwX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjE1LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyNzIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRpbzIwMF9wY2lfdGFibGUpOworI2VuZGlmIC8qIENPTkZJR19DT01FRElfUENJICovCisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRpbzIwMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorI2RlZmluZSB0aGlzbGF5b3V0ICgmZGlvMjAwX2xheW91dHNbKChzdHJ1Y3QgZGlvMjAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpLT5sYXlvdXRdKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgZGlvMjAwX3ByaXZhdGUgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CS8qIFBDSSBkZXZpY2UgKi8KKyNlbmRpZgorCWludCBpbnRyX3NkOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRpbzIwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0IHsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsJLyogQ291bnRlciBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGNsa19zY2VfaW9iYXNlOwkvKiBDTEtfU0NFIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgZ2F0X3NjZV9pb2Jhc2U7CS8qIEdBVF9TQ0UgYmFzZSBhZGRyZXNzICovCisJaW50IHdoaWNoOwkJLyogQml0IDUgb2YgQ0xLX1NDRSBvciBHQVRfU0NFICovCisJaW50IGhhc19jbGtfZ2F0X3NjZTsKKwl1bnNpZ25lZCBjbG9ja19zcmNbM107CS8qIEN1cnJlbnQgY2xvY2sgc291cmNlcyAqLworCXVuc2lnbmVkIGdhdGVfc3JjWzNdOwkvKiBDdXJyZW50IGdhdGUgc291cmNlcyAqLworfTsKKworc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciB7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJc3BpbmxvY2tfdCBzcGlubG9jazsKKwlpbnQgYWN0aXZlOworCWludCBoYXNfaW50X3NjZTsKKwl1bnNpZ25lZCBpbnQgdmFsaWRfaXNuczsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlZF9pc25zOworCXVuc2lnbmVkIGludCBzdG9wY291bnQ7CisJaW50IGNvbnRpbnVvdXM7Cit9OworCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGlvMjAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FtcGxjX2RpbzIwMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOkRJTzIwMF9EUklWRVJfTkFNRSwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkaW8yMDBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRpbzIwMF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkaW8yMDBfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkaW8yMDBfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihkaW8yMDBfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgZGlvMjAwX2JvYXJkKSwKK307CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfZGlvMjAwLCBkaW8yMDBfcGNpX3RhYmxlKTsKKyNlbHNlCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX2RpbzIwMCk7CisjZW5kaWYKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbG9va3MgZm9yIGEgUENJIGRldmljZSBtYXRjaGluZyB0aGUgcmVxdWVzdGVkIGJvYXJkIG5hbWUsCisgKiBidXMgYW5kIHNsb3QuCisgKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIGludAorZGlvMjAwX2ZpbmRfcGNpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwlzdHJ1Y3QgcGNpX2RldiAqKnBjaV9kZXZfcCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisKKwkqcGNpX2Rldl9wID0gTlVMTDsKKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UuICovCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1QTElDT04sCisJCQlQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCQkvKiBJZiBidXMvc2xvdCBzcGVjaWZpZWQsIGNoZWNrIHRoZW0uICovCisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBwY2lfZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IHNsb3QgIT0gUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0aGlzYm9hcmQtPm1vZGVsID09IGFueXBjaV9tb2RlbCkgeworCQkJLyogTWF0Y2ggYW55IHN1cHBvcnRlZCBtb2RlbC4gKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaW8yMDBfYm9hcmRzKTsgaSsrKSB7CisJCQkJaWYgKGRpbzIwMF9ib2FyZHNbaV0uYnVzdHlwZSAhPSBwY2lfYnVzdHlwZSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHBjaV9kZXYtPmRldmljZSA9PSBkaW8yMDBfYm9hcmRzW2ldLmRldmlkKSB7CisJCQkJCS8qIENoYW5nZSBib2FyZF9wdHIgdG8gbWF0Y2hlZCBib2FyZC4gKi8KKwkJCQkJZGV2LT5ib2FyZF9wdHIgPSAmZGlvMjAwX2JvYXJkc1tpXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gQVJSQVlfU0laRShkaW8yMDBfYm9hcmRzKSkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCS8qIE1hdGNoIHNwZWNpZmljIG1vZGVsIG5hbWUuICovCisJCQlpZiAocGNpX2Rldi0+ZGV2aWNlICE9IHRoaXNib2FyZC0+ZGV2aWQpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBGb3VuZCBhIG1hdGNoLiAqLworCQkqcGNpX2Rldl9wID0gcGNpX2RldjsKKwkJcmV0dXJuIDA7CisJfQorCS8qIE5vIG1hdGNoIGZvdW5kLiAqLworCWlmIChidXMgfHwgc2xvdCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogZXJyb3IhIG5vICVzIGZvdW5kIGF0IHBjaSAlMDJ4OiUwMnghXG4iLAorCQkJZGV2LT5taW5vciwgdGhpc2JvYXJkLT5uYW1lLCBidXMsIHNsb3QpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBubyAlcyBmb3VuZCFcbiIsCisJCQlkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUpOworCX0KKwlyZXR1cm4gLUVJTzsKK30KKyNlbmRpZgorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgYW5kIHJlcXVlc3RzIGFuIEkvTyByZWdpb24sIHJlcG9ydGluZyBhbiBlcnJvcgorICogaWYgdGhlcmUgaXMgYSBjb25mbGljdC4KKyAqLworc3RhdGljIGludAorZGlvMjAwX3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgZXh0ZW50KQoreworCWlmICghZnJvbSB8fCAhcmVxdWVzdF9yZWdpb24oZnJvbSwgZXh0ZW50LCBESU8yMDBfRFJJVkVSX05BTUUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IEkvTyBwb3J0IGNvbmZsaWN0ICglI2x4LCVsdSkhXG4iLAorCQkJbWlub3IsIGZyb20sIGV4dGVudCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICdpbnNuX2JpdHMnIGZ1bmN0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK2RpbzIwMF9zdWJkZXZfaW50cl9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCisJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKSB7CisJCS8qIEp1c3QgcmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4gICovCisJCWRhdGFbMV0gPSBpbmIoc3VicHJpdi0+aW9iYXNlKSAmIHN1YnByaXYtPnZhbGlkX2lzbnM7CisJfSBlbHNlIHsKKwkJLyogTm8gaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4gKi8KKwkJZGF0YVswXSA9IDA7CisJfQorCisJcmV0dXJuIDI7Cit9CisKKy8qCisgKiBDYWxsZWQgdG8gc3RvcCBhY3F1aXNpdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCBkaW8yMDBfc3RvcF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisKKwlzdWJwcml2LT5hY3RpdmUgPSAwOworCXN1YnByaXYtPmVuYWJsZWRfaXNucyA9IDA7CisJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKSB7CisJCW91dGIoMCwgc3VicHJpdi0+aW9iYXNlKTsKKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgdG8gc3RhcnQgYWNxdWlzaXRpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGludCBuOworCXVuc2lnbmVkIGlzbl9iaXRzOworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICghc3VicHJpdi0+Y29udGludW91cyAmJiBzdWJwcml2LT5zdG9wY291bnQgPT0gMCkgeworCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQlzdWJwcml2LT5hY3RpdmUgPSAwOworCQlyZXR2YWwgPSAxOworCX0gZWxzZSB7CisJCS8qIERldGVybWluZSBpbnRlcnJ1cHQgc291cmNlcyB0byBlbmFibGUuICovCisJCWlzbl9iaXRzID0gMDsKKwkJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJCWZvciAobiA9IDA7IG4gPCBjbWQtPmNoYW5saXN0X2xlbjsgbisrKSB7CisJCQkJaXNuX2JpdHMgfD0gKDFVIDw8IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSkpOworCQkJfQorCQl9CisJCWlzbl9iaXRzICY9IHN1YnByaXYtPnZhbGlkX2lzbnM7CisJCS8qIEVuYWJsZSBpbnRlcnJ1cHQgc291cmNlcy4gKi8KKwkJc3VicHJpdi0+ZW5hYmxlZF9pc25zID0gaXNuX2JpdHM7CisJCWlmIChzdWJwcml2LT5oYXNfaW50X3NjZSkgeworCQkJb3V0Yihpc25fYml0cywgc3VicHJpdi0+aW9iYXNlKTsKKwkJfQorCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB0cmlnZ2VyIGZ1bmN0aW9uIHRvIHN0YXJ0IGFjcXVpc2l0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK2RpbzIwMF9pbnR0cmlnX3N0YXJ0X2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGV2ZW50ID0gMDsKKworCWlmICh0cmlnbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3VicHJpdiA9IHMtPnByaXZhdGU7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisJcy0+YXN5bmMtPmludHRyaWcgPSAwOworCWlmIChzdWJwcml2LT5hY3RpdmUpIHsKKwkJZXZlbnQgPSBkaW8yMDBfc3RhcnRfaW50cihkZXYsIHMpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChldmVudCkgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgdG8gaGFuZGxlIGEgcmVhZAorICogc2NhbiBvbiBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgZGlvMjAwX2hhbmRsZV9yZWFkX2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKwl1bnNpZ25lZCB0cmlnZ2VyZWQ7CisJdW5zaWduZWQgaW50c3RhdDsKKwl1bnNpZ25lZCBjdXJfZW5hYmxlZDsKKwl1bnNpZ25lZCBpbnQgb2xkZXZlbnRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl0cmlnZ2VyZWQgPSAwOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCW9sZGV2ZW50cyA9IHMtPmFzeW5jLT5ldmVudHM7CisJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKSB7CisJCS8qCisJCSAqIENvbGxlY3QgaW50ZXJydXB0IHNvdXJjZXMgdGhhdCBoYXZlIHRyaWdnZXJlZCBhbmQgZGlzYWJsZQorCQkgKiB0aGVtIHRlbXBvcmFyaWx5LiAgTG9vcCBhcm91bmQgdW50aWwgbm8gZXh0cmEgaW50ZXJydXB0CisJCSAqIHNvdXJjZXMgaGF2ZSB0cmlnZ2VyZWQsIGF0IHdoaWNoIHBvaW50LCB0aGUgdmFsaWQgcGFydCBvZgorCQkgKiB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB3aWxsIHJlYWQgemVybywgY2xlYXJpbmcgdGhlCisJCSAqIGNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQuCisJCSAqCisJCSAqIE1hc2sgb2ZmIGludGVycnVwdCBzb3VyY2VzIGFscmVhZHkgc2VlbiB0byBhdm9pZCBpbmZpbml0ZQorCQkgKiBsb29wIGluIGNhc2Ugb2YgbWlzY29uZmlndXJhdGlvbi4KKwkJICovCisJCWN1cl9lbmFibGVkID0gc3VicHJpdi0+ZW5hYmxlZF9pc25zOworCQl3aGlsZSAoKGludHN0YXQgPSAoaW5iKHN1YnByaXYtPmlvYmFzZSkgJiBzdWJwcml2LT52YWxpZF9pc25zCisJCQkJCSYgfnRyaWdnZXJlZCkpICE9IDApIHsKKwkJCXRyaWdnZXJlZCB8PSBpbnRzdGF0OworCQkJY3VyX2VuYWJsZWQgJj0gfnRyaWdnZXJlZDsKKwkJCW91dGIoY3VyX2VuYWJsZWQsIHN1YnByaXYtPmlvYmFzZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBObyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiAgQXNzdW1lIHRoZSBzaW5nbGUgaW50ZXJydXB0CisJCSAqIHNvdXJjZSBoYXMgdHJpZ2dlcmVkLgorCQkgKi8KKwkJdHJpZ2dlcmVkID0gc3VicHJpdi0+ZW5hYmxlZF9pc25zOworCX0KKworCWlmICh0cmlnZ2VyZWQpIHsKKwkJLyoKKwkJICogU29tZSBpbnRlcnJ1cHQgc291cmNlcyBoYXZlIHRyaWdnZXJlZCBhbmQgaGF2ZSBiZWVuCisJCSAqIHRlbXBvcmFyaWx5IGRpc2FibGVkIHRvIGNsZWFyIHRoZSBjYXVzZSBvZiB0aGUgaW50ZXJydXB0LgorCQkgKgorCQkgKiBSZWVuYWJsZSB0aGVtIE5PVyB0byBtaW5pbWl6ZSB0aGUgdGltZSB0aGV5IGFyZSBkaXNhYmxlZC4KKwkJICovCisJCWN1cl9lbmFibGVkID0gc3VicHJpdi0+ZW5hYmxlZF9pc25zOworCQlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpIHsKKwkJCW91dGIoY3VyX2VuYWJsZWQsIHN1YnByaXYtPmlvYmFzZSk7CisJCX0KKworCQlpZiAoc3VicHJpdi0+YWN0aXZlKSB7CisJCQkvKgorCQkJICogVGhlIGNvbW1hbmQgaXMgc3RpbGwgYWN0aXZlLgorCQkJICoKKwkJCSAqIElnbm9yZSBpbnRlcnJ1cHQgc291cmNlcyB0aGF0IHRoZSBjb21tYW5kIGlzbid0CisJCQkgKiBpbnRlcmVzdGVkIGluIChqdXN0IGluIGNhc2UgdGhlcmUncyBhIHJhY2UKKwkJCSAqIGNvbmRpdGlvbikuCisJCQkgKi8KKwkJCWlmICh0cmlnZ2VyZWQgJiBzdWJwcml2LT5lbmFibGVkX2lzbnMpIHsKKwkJCQkvKiBDb2xsZWN0IHNjYW4gZGF0YS4gKi8KKwkJCQlzaG9ydCB2YWw7CisJCQkJdW5zaWduZWQgaW50IG4sIGNoLCBsZW47CisKKwkJCQl2YWwgPSAwOworCQkJCWxlbiA9IHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOworCQkJCWZvciAobiA9IDA7IG4gPCBsZW47IG4rKykgeworCQkJCQljaCA9IENSX0NIQU4ocy0+YXN5bmMtPmNtZC5jaGFubGlzdFtuXSk7CisJCQkJCWlmICh0cmlnZ2VyZWQgJiAoMVUgPDwgY2gpKSB7CisJCQkJCQl2YWwgfD0gKDFVIDw8IG4pOworCQkJCQl9CisJCQkJfQorCQkJCS8qIFdyaXRlIHRoZSBzY2FuIHRvIHRoZSBidWZmZXIuICovCisJCQkJaWYgKGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB2YWwpKSB7CisJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gKENPTUVESV9DQl9CTE9DSyB8CisJCQkJCQlDT01FRElfQ0JfRU9TKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBFcnJvciEgIFN0b3AgYWNxdWlzaXRpb24uICAqLworCQkJCQlkaW8yMDBfc3RvcF9pbnRyKGRldiwgcyk7CisJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SCisJCQkJCQl8IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZmZlciBvdmVyZmxvdyIpOworCQkJCX0KKworCQkJCS8qIENoZWNrIGZvciBlbmQgb2YgYWNxdWlzaXRpb24uICovCisJCQkJaWYgKCFzdWJwcml2LT5jb250aW51b3VzKSB7CisJCQkJCS8qIHN0b3Bfc3JjID09IFRSSUdfQ09VTlQgKi8KKwkJCQkJaWYgKHN1YnByaXYtPnN0b3Bjb3VudCA+IDApIHsKKwkJCQkJCXN1YnByaXYtPnN0b3Bjb3VudC0tOworCQkJCQkJaWYgKHN1YnByaXYtPnN0b3Bjb3VudCA9PSAwKSB7CisJCQkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQorCQkJCQkJCQlDT01FRElfQ0JfRU9BOworCQkJCQkJCWRpbzIwMF9zdG9wX2ludHIoZGV2LAorCQkJCQkJCQlzKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChvbGRldmVudHMgIT0gcy0+YXN5bmMtPmV2ZW50cykgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gKHRyaWdnZXJlZCAhPSAwKTsKK30KKworLyoKKyAqICdjYW5jZWwnIGZ1bmN0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgZGlvMjAwX3N1YmRldl9pbnRyX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKHN1YnByaXYtPmFjdGl2ZSkgeworCQlkaW8yMDBfc3RvcF9pbnRyKGRldiwgcyk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAnZG9fY21kdGVzdCcgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorZGlvMjAwX3N1YmRldl9pbnRyX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IChUUklHX05PVyB8IFRSSUdfSU5UKTsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gKFRSSUdfQ09VTlQgfCBUUklHX05PTkUpOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiB0aGVzZSB0ZXN0cyBhcmUgdHJ1ZSBpZiBtb3JlIHRoYW4gb25lIF9zcmMgYml0IGlzIHNldCAqLworCWlmICgoY21kLT5zdGFydF9zcmMgJiAoY21kLT5zdGFydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjICYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPmNvbnZlcnRfc3JjICYgKGNtZC0+Y29udmVydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fZW5kX3NyYyAmIChjbWQtPnNjYW5fZW5kX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c3RvcF9zcmMgJiAoY21kLT5zdG9wX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cgfHwgY21kLT5zdGFydF9zcmMgPT0gVFJJR19JTlQgKi8KKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XICovCisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5zY2FuX2VuZF9zcmMgPT0gVFJJR19DT1VOVCAqLworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCS8qIGFueSBjb3VudCBhbGxvd2VkICovCisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJLyogaWYgKGVycikgcmV0dXJuIDQ7ICovCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICdkb19jbWQnIGZ1bmN0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgZGlvMjAwX3N1YmRldl9pbnRyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBldmVudCA9IDA7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisJc3VicHJpdi0+YWN0aXZlID0gMTsKKworCS8qIFNldCB1cCBlbmQgb2YgYWNxdWlzaXRpb24uICovCisJc3dpdGNoIChjbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0NPVU5UOgorCQlzdWJwcml2LT5jb250aW51b3VzID0gMDsKKwkJc3VicHJpdi0+c3RvcGNvdW50ID0gY21kLT5zdG9wX2FyZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVFJJR19OT05FICovCisJCXN1YnByaXYtPmNvbnRpbnVvdXMgPSAxOworCQlzdWJwcml2LT5zdG9wY291bnQgPSAwOworCQlicmVhazsKKwl9CisKKwkvKiBTZXQgdXAgc3RhcnQgb2YgYWNxdWlzaXRpb24uICovCisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19JTlQ6CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gZGlvMjAwX2ludHRyaWdfc3RhcnRfaW50cjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVFJJR19OT1cgKi8KKwkJZXZlbnQgPSBkaW8yMDBfc3RhcnRfaW50cihkZXYsIHMpOworCQlicmVhazsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXZlbnQpIHsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorZGlvMjAwX3N1YmRldl9pbnRyX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSwgdW5zaWduZWQgdmFsaWRfaXNucywgaW50IGhhc19pbnRfc2NlKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXY7CisKKwlzdWJwcml2ID0ga3phbGxvYyhzaXplb2YoKnN1YnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN1YnByaXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzdWJwcml2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJc3VicHJpdi0+aGFzX2ludF9zY2UgPSBoYXNfaW50X3NjZTsKKwlzdWJwcml2LT52YWxpZF9pc25zID0gdmFsaWRfaXNuczsKKwlzcGluX2xvY2tfaW5pdCgmc3VicHJpdi0+c3BpbmxvY2spOworCisJaWYgKGhhc19pbnRfc2NlKSB7CisJCW91dGIoMCwgc3VicHJpdi0+aW9iYXNlKTsJLyogRGlzYWJsZSBpbnRlcnJ1cHQgc291cmNlcy4gKi8KKwl9CisKKwlzLT5wcml2YXRlID0gc3VicHJpdjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0NNRF9SRUFEOworCWlmIChoYXNfaW50X3NjZSkgeworCQlzLT5uX2NoYW4gPSBESU8yMDBfTUFYX0lTTlM7CisJCXMtPmxlbl9jaGFubGlzdCA9IERJTzIwMF9NQVhfSVNOUzsKKwl9IGVsc2UgeworCQkvKiBObyBpbnRlcnJ1cHQgc291cmNlIHJlZ2lzdGVyLiAgU3VwcG9ydCBzaW5nbGUgY2hhbm5lbC4gKi8KKwkJcy0+bl9jaGFuID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwl9CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pbnNuX2JpdHMgPSBkaW8yMDBfc3ViZGV2X2ludHJfaW5zbl9iaXRzOworCXMtPmRvX2NtZHRlc3QgPSBkaW8yMDBfc3ViZGV2X2ludHJfY21kdGVzdDsKKwlzLT5kb19jbWQgPSBkaW8yMDBfc3ViZGV2X2ludHJfY21kOworCXMtPmNhbmNlbCA9IGRpbzIwMF9zdWJkZXZfaW50cl9jYW5jZWw7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIHZvaWQKK2RpbzIwMF9zdWJkZXZfaW50cl9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisKKwlpZiAoc3VicHJpdikgeworCQlrZnJlZShzdWJwcml2KTsKKwl9Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZGlvMjAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCWludCBoYW5kbGVkOworCisJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAoZGV2cHJpdi0+aW50cl9zZCA+PSAwKSB7CisJCWhhbmRsZWQgPSBkaW8yMDBfaGFuZGxlX3JlYWRfaW50cihkZXYsCisJCQlkZXYtPnN1YmRldmljZXMgKyBkZXZwcml2LT5pbnRyX3NkKTsKKwl9IGVsc2UgeworCQloYW5kbGVkID0gMDsKKwl9CisKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworLyoKKyAqIEhhbmRsZSAnaW5zbl9yZWFkJyBmb3IgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2XzgyNTRfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfODI1NCAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWRhdGFbMF0gPSBpODI1NF9yZWFkKHN1YnByaXYtPmlvYmFzZSwgMCwgY2hhbik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEhhbmRsZSAnaW5zbl93cml0ZScgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorZGlvMjAwX3N1YmRldl84MjU0X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJaTgyNTRfd3JpdGUoc3VicHJpdi0+aW9iYXNlLCAwLCBjaGFuLCBkYXRhWzBdKTsKKworCXJldHVybiAxOworfQorCisvKgorICogU2V0IGdhdGUgc291cmNlIGZvciBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UgY2hhbm5lbC4KKyAqLworc3RhdGljIGludAorZGlvMjAwX3NldF9nYXRlX3NyYyhzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICogc3VicHJpdiwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLAorCXVuc2lnbmVkIGludCBnYXRlX3NyYykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKwlpZiAoIXN1YnByaXYtPmhhc19jbGtfZ2F0X3NjZSkKKwkJcmV0dXJuIC0xOworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKwlpZiAoZ2F0ZV9zcmMgPiA3KQorCQlyZXR1cm4gLTE7CisKKwlzdWJwcml2LT5nYXRlX3NyY1tjb3VudGVyX251bWJlcl0gPSBnYXRlX3NyYzsKKwlieXRlID0gR0FUX1NDRShzdWJwcml2LT53aGljaCwgY291bnRlcl9udW1iZXIsIGdhdGVfc3JjKTsKKwlvdXRiKGJ5dGUsIHN1YnByaXYtPmdhdF9zY2VfaW9iYXNlKTsKKworCXJldHVybiAwOworfQorCisvKgorICogR2V0IGdhdGUgc291cmNlIGZvciBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UgY2hhbm5lbC4KKyAqLworc3RhdGljIGludAorZGlvMjAwX2dldF9nYXRlX3NyYyhzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICogc3VicHJpdiwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyKQoreworCWlmICghc3VicHJpdi0+aGFzX2Nsa19nYXRfc2NlKQorCQlyZXR1cm4gLTE7CisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHN1YnByaXYtPmdhdGVfc3JjW2NvdW50ZXJfbnVtYmVyXTsKK30KKworLyoKKyAqIFNldCBjbG9jayBzb3VyY2UgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZSBjaGFubmVsLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc2V0X2Nsb2NrX3NyYyhzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICogc3VicHJpdiwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLAorCXVuc2lnbmVkIGludCBjbG9ja19zcmMpCit7CisJdW5zaWduZWQgY2hhciBieXRlOworCisJaWYgKCFzdWJwcml2LT5oYXNfY2xrX2dhdF9zY2UpCisJCXJldHVybiAtMTsKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisJaWYgKGNsb2NrX3NyYyA+IDcpCisJCXJldHVybiAtMTsKKworCXN1YnByaXYtPmNsb2NrX3NyY1tjb3VudGVyX251bWJlcl0gPSBjbG9ja19zcmM7CisJYnl0ZSA9IENMS19TQ0Uoc3VicHJpdi0+d2hpY2gsIGNvdW50ZXJfbnVtYmVyLCBjbG9ja19zcmMpOworCW91dGIoYnl0ZSwgc3VicHJpdi0+Y2xrX3NjZV9pb2Jhc2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgY2xvY2sgc291cmNlIGZvciBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UgY2hhbm5lbC4KKyAqLworc3RhdGljIGludAorZGlvMjAwX2dldF9jbG9ja19zcmMoc3RydWN0IGRpbzIwMF9zdWJkZXZfODI1NCAqIHN1YnByaXYsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwKKwl1bnNpZ25lZCBpbnQgKiBwZXJpb2RfbnMpCit7CisJdW5zaWduZWQgY2xvY2tfc3JjOworCisJaWYgKCFzdWJwcml2LT5oYXNfY2xrX2dhdF9zY2UpCisJCXJldHVybiAtMTsKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisKKwljbG9ja19zcmMgPSBzdWJwcml2LT5jbG9ja19zcmNbY291bnRlcl9udW1iZXJdOworCSpwZXJpb2RfbnMgPSBjbG9ja19wZXJpb2RbY2xvY2tfc3JjXTsKKwlyZXR1cm4gY2xvY2tfc3JjOworfQorCisvKgorICogSGFuZGxlICdpbnNuX2NvbmZpZycgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorZGlvMjAwX3N1YmRldl84MjU0X2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfODI1NCAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisJaW50IHJldDsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfQ09VTlRFUl9NT0RFOgorCQlyZXQgPSBpODI1NF9zZXRfbW9kZShzdWJwcml2LT5pb2Jhc2UsIDAsIGNoYW4sIGRhdGFbMV0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHXzgyNTRfUkVBRF9TVEFUVVM6CisJCWRhdGFbMV0gPSBpODI1NF9zdGF0dXMoc3VicHJpdi0+aW9iYXNlLCAwLCBjaGFuKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfR0FURV9TUkM6CisJCXJldCA9IGRpbzIwMF9zZXRfZ2F0ZV9zcmMoc3VicHJpdiwgY2hhbiwgZGF0YVsyXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0dBVEVfU1JDOgorCQlyZXQgPSBkaW8yMDBfZ2V0X2dhdGVfc3JjKHN1YnByaXYsIGNoYW4pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkYXRhWzJdID0gcmV0OworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1NFVF9DTE9DS19TUkM6CisJCXJldCA9IGRpbzIwMF9zZXRfY2xvY2tfc3JjKHN1YnByaXYsIGNoYW4sIGRhdGFbMV0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9DTE9DS19TUkM6CisJCXJldCA9IGRpbzIwMF9nZXRfY2xvY2tfc3JjKHN1YnByaXYsIGNoYW4sICZkYXRhWzJdKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGF0YVsxXSA9IHJldDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlLgorICoKKyAqIE5vdGU6IGlvYmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBib2FyZCwgbm90IHRoZSBzdWJkZXZpY2U7CisgKiBvZmZzZXQgaXMgdGhlIG9mZnNldCB0byB0aGUgODI1NCBjaGlwLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2XzgyNTRfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgaW9iYXNlLCB1bnNpZ25lZCBvZmZzZXQsIGludCBoYXNfY2xrX2dhdF9zY2UpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfODI1NCAqc3VicHJpdjsKKwl1bnNpZ25lZCBpbnQgY2hhbjsKKworCXN1YnByaXYgPSBremFsbG9jKHNpemVvZigqc3VicHJpdiksIEdGUF9LRVJORUwpOworCWlmICghc3VicHJpdikgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcy0+cHJpdmF0ZSA9IHN1YnByaXY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDM7CisJcy0+bWF4ZGF0YSA9IDB4RkZGRjsKKwlzLT5pbnNuX3JlYWQgPSBkaW8yMDBfc3ViZGV2XzgyNTRfcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gZGlvMjAwX3N1YmRldl84MjU0X3dyaXRlOworCXMtPmluc25fY29uZmlnID0gZGlvMjAwX3N1YmRldl84MjU0X2NvbmZpZzsKKworCXN1YnByaXYtPmlvYmFzZSA9IG9mZnNldCArIGlvYmFzZTsKKwlzdWJwcml2LT5oYXNfY2xrX2dhdF9zY2UgPSBoYXNfY2xrX2dhdF9zY2U7CisJaWYgKGhhc19jbGtfZ2F0X3NjZSkgeworCQkvKiBEZXJpdmUgQ0xLX1NDRSBhbmQgR0FUX1NDRSByZWdpc3RlciBvZmZzZXRzIGZyb20KKwkJICogODI1NCBvZmZzZXQuICovCisJCXN1YnByaXYtPmNsa19zY2VfaW9iYXNlID0KKwkJCURJTzIwMF9YQ0xLX1NDRSArIChvZmZzZXQgPj4gMykgKyBpb2Jhc2U7CisJCXN1YnByaXYtPmdhdF9zY2VfaW9iYXNlID0KKwkJCURJTzIwMF9YR0FUX1NDRSArIChvZmZzZXQgPj4gMykgKyBpb2Jhc2U7CisJCXN1YnByaXYtPndoaWNoID0gKG9mZnNldCA+PiAyKSAmIDE7CisJfQorCisJLyogSW5pdGlhbGl6ZSBjaGFubmVscy4gKi8KKwlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgMzsgY2hhbisrKSB7CisJCWk4MjU0X3NldF9tb2RlKHN1YnByaXYtPmlvYmFzZSwgMCwgY2hhbiwKKwkJCUk4MjU0X01PREUwIHwgSTgyNTRfQklOQVJZKTsKKwkJaWYgKHN1YnByaXYtPmhhc19jbGtfZ2F0X3NjZSkgeworCQkJLyogR2F0ZSBzb3VyY2UgMCBpcyBWQ0MgKGxvZ2ljIDEpLiAqLworCQkJZGlvMjAwX3NldF9nYXRlX3NyYyhzdWJwcml2LCBjaGFuLCAwKTsKKwkJCS8qIENsb2NrIHNvdXJjZSAwIGlzIHRoZSBkZWRpY2F0ZWQgY2xvY2sgaW5wdXQuICovCisJCQlkaW8yMDBfc2V0X2Nsb2NrX3NyYyhzdWJwcml2LCBjaGFuLCAwKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlLgorICovCitzdGF0aWMgdm9pZAorZGlvMjAwX3N1YmRldl84MjU0X2NsZWFudXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKworCWlmIChzdWJwcml2KSB7CisJCWtmcmVlKHN1YnByaXYpOworCX0KK30KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IGRpbzIwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSAwOworCXVuc2lnbmVkIGludCBpcnEgPSAwOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworCWludCBidXMgPSAwLCBzbG90ID0gMDsKKyNlbmRpZgorCWNvbnN0IHN0cnVjdCBkaW8yMDBfbGF5b3V0X3N0cnVjdCAqbGF5b3V0OworCWludCBzaGFyZV9pcnEgPSAwOworCWludCBzZHg7CisJdW5zaWduZWQgbjsKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiAlczogYXR0YWNoXG4iLCBkZXYtPm1pbm9yLAorCQlESU8yMDBfRFJJVkVSX05BTUUpOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkaW8yMDBfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUHJvY2VzcyBvcHRpb25zLiAqLworCXN3aXRjaCAodGhpc2JvYXJkLT5idXN0eXBlKSB7CisJY2FzZSBpc2FfYnVzdHlwZToKKwkJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlzaGFyZV9pcnEgPSAwOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWNhc2UgcGNpX2J1c3R5cGU6CisJCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCQlzbG90ID0gaXQtPm9wdGlvbnNbMV07CisJCXNoYXJlX2lycSA9IDE7CisKKwkJaWYgKChyZXQgPSBkaW8yMDBfZmluZF9wY2koZGV2LCBidXMsIHNsb3QsICZwY2lfZGV2KSkgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6ICVzOiBCVUchIGNhbm5vdCBkZXRlcm1pbmUgYm9hcmQgdHlwZSFcbiIsCisJCQlkZXYtPm1pbm9yLCBESU8yMDBfRFJJVkVSX05BTUUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJZGV2cHJpdi0+aW50cl9zZCA9IC0xOworCisJLyogRW5hYmxlIGRldmljZSBhbmQgcmVzZXJ2ZSBJL08gc3BhY2VzLiAqLworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaWYgKHBjaV9kZXYpIHsKKwkJcmV0ID0gY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgRElPMjAwX0RSSVZFUl9OQU1FKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJjb21lZGklZDogZXJyb3IhIGNhbm5vdCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zIVxuIiwKKwkJCQlkZXYtPm1pbm9yKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDIpOworCQlpcnEgPSBwY2lfZGV2LT5pcnE7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCXJldCA9IGRpbzIwMF9yZXF1ZXN0X3JlZ2lvbihkZXYtPm1pbm9yLCBpb2Jhc2UsIERJTzIwMF9JT19TSVpFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlsYXlvdXQgPSB0aGlzbGF5b3V0OworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIGxheW91dC0+bl9zdWJkZXZzKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAobiA9IDA7IG4gPCBkZXYtPm5fc3ViZGV2aWNlczsgbisrKSB7CisJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW25dOworCQlzd2l0Y2ggKGxheW91dC0+c2R0eXBlW25dKSB7CisJCWNhc2Ugc2RfODI1NDoKKwkJCS8qIGNvdW50ZXIgc3ViZGV2aWNlICg4MjU0KSAqLworCQkJcmV0ID0gZGlvMjAwX3N1YmRldl84MjU0X2luaXQoZGV2LCBzLCBpb2Jhc2UsCisJCQkJbGF5b3V0LT5zZGluZm9bbl0sIGxheW91dC0+aGFzX2Nsa19nYXRfc2NlKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHNkXzgyNTU6CisJCQkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKDgyNTUpICovCisJCQlyZXQgPSBzdWJkZXZfODI1NV9pbml0KGRldiwgcywgMCwKKwkJCQlpb2Jhc2UgKyBsYXlvdXQtPnNkaW5mb1tuXSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBzZF9pbnRyOgorCQkJLyogJ0lOVEVSUlVQVCcgc3ViZGV2aWNlICovCisJCQlpZiAoaXJxKSB7CisJCQkJcmV0ID0gZGlvMjAwX3N1YmRldl9pbnRyX2luaXQoZGV2LCBzLAorCQkJCQlpb2Jhc2UgKyBESU8yMDBfSU5UX1NDRSwKKwkJCQkJbGF5b3V0LT5zZGluZm9bbl0sIGxheW91dC0+aGFzX2ludF9zY2UpOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCXJldHVybiByZXQ7CisJCQkJfQorCQkJCWRldnByaXYtPmludHJfc2QgPSBuOworCQkJfSBlbHNlIHsKKwkJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzZHggPSBkZXZwcml2LT5pbnRyX3NkOworCWlmIChzZHggPj0gMCAmJiBzZHggPCBkZXYtPm5fc3ViZGV2aWNlcykgeworCQlkZXYtPnJlYWRfc3ViZGV2ID0gJmRldi0+c3ViZGV2aWNlc1tzZHhdOworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChpcnEpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFncyA9IHNoYXJlX2lycSA/IElSUUZfU0hBUkVEIDogMDsKKworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgZGlvMjAwX2ludGVycnVwdCwgZmxhZ3MsCisJCQkJRElPMjAwX0RSSVZFUl9OQU1FLCBkZXYpID49IDApIHsKKwkJCWRldi0+aXJxID0gaXJxOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJjb21lZGklZDogd2FybmluZyEgaXJxICV1IHVuYXZhaWxhYmxlIVxuIiwKKwkJCQlkZXYtPm1pbm9yLCBpcnEpOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzICIsIGRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBpc2FfYnVzdHlwZSkgeworCQlwcmludGsoIihiYXNlICUjbHgpICIsIGlvYmFzZSk7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlwcmludGsoIihwY2kgJXMpICIsIHBjaV9uYW1lKHBjaV9kZXYpKTsKKyNlbmRpZgorCX0KKwlpZiAoaXJxKSB7CisJCXByaW50aygiKGlycSAldSVzKSAiLCBpcnEsIChkZXYtPmlycSA/ICIiIDogIiBVTkFWQUlMQUJMRSIpKTsKKwl9IGVsc2UgeworCQlwcmludGsoIihubyBpcnEpICIpOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgZGlvMjAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwljb25zdCBzdHJ1Y3QgZGlvMjAwX2xheW91dF9zdHJ1Y3QgKmxheW91dDsKKwl1bnNpZ25lZCBuOworCisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiAlczogZGV0YWNoXG4iLCBkZXYtPm1pbm9yLAorCQlESU8yMDBfRFJJVkVSX05BTUUpOworCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldi0+c3ViZGV2aWNlcykgeworCQlsYXlvdXQgPSB0aGlzbGF5b3V0OworCQlmb3IgKG4gPSAwOyBuIDwgZGV2LT5uX3N1YmRldmljZXM7IG4rKykgeworCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSAmZGV2LT5zdWJkZXZpY2VzW25dOworCQkJc3dpdGNoIChsYXlvdXQtPnNkdHlwZVtuXSkgeworCQkJY2FzZSBzZF84MjU0OgorCQkJCWRpbzIwMF9zdWJkZXZfODI1NF9jbGVhbnVwKGRldiwgcyk7CisJCQkJYnJlYWs7CisJCQljYXNlIHNkXzgyNTU6CisJCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIHMpOworCQkJCWJyZWFrOworCQkJY2FzZSBzZF9pbnRyOgorCQkJCWRpbzIwMF9zdWJkZXZfaW50cl9jbGVhbnVwKGRldiwgcyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWlmIChkZXZwcml2KSB7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9IGVsc2UKKyNlbmRpZgorCQl7CisJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRElPMjAwX0lPX1NJWkUpOworCQkJfQorCQl9CisJfQorCWlmIChkZXYtPmJvYXJkX25hbWUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzIHJlbW92ZWRcbiIsCisJCQlkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjM2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDI3Yzc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjM2LmMKQEAgLTAsMCArMSw2NTQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYworICAgIERyaXZlciBmb3IgQW1wbGljb24gUEMzNkFUIGFuZCBQQ0kyMzYgRElPIGJvYXJkcy4KKworICAgIENvcHlyaWdodCAoQykgMjAwMiBNRVYgTHRkLiA8aHR0cDovL3d3dy5tZXYuY28udWsvPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogYW1wbGNfcGMyMzYKK0Rlc2NyaXB0aW9uOiBBbXBsaWNvbiBQQzM2QVQsIFBDSTIzNgorQXV0aG9yOiBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4KK0RldmljZXM6IFtBbXBsaWNvbl0gUEMzNkFUIChwYzM2YXQpLCBQQ0kyMzYgKHBjaTIzNiBvciBhbXBsY19wYzIzNikKK1VwZGF0ZWQ6IFdlZCwgMjIgT2N0IDIwMDggMTM6NDA6MDMgKzAxMDAKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUEMzNkFUOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCkKKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUENJMjM2OgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJIGRldmljZSB3aWxsIGJlCisgIHVzZWQuCisKK1RoZSBQQzM2QVQgSVNBIGJvYXJkIGFuZCBQQ0kyMzYgUENJIGJvYXJkIGhhdmUgYSBzaW5nbGUgODI1NSBhcHBlYXJpbmcKK2FzIHN1YmRldmljZSAwLgorCitTdWJkZXZpY2UgMSBwcmV0ZW5kcyB0byBiZSBhIGRpZ2l0YWwgaW5wdXQgZGV2aWNlLCBidXQgaXQgYWx3YXlzIHJldHVybnMKKzAgd2hlbiByZWFkLiBIb3dldmVyLCBpZiB5b3UgcnVuIGEgY29tbWFuZCB3aXRoIHNjYW5fYmVnaW5fc3JjPVRSSUdfRVhULAorYSByaXNpbmcgZWRnZSBvbiBwb3J0IEMgYml0IDcgYWN0cyBhcyBhbiBleHRlcm5hbCB0cmlnZ2VyLCB3aGljaCBjYW4gYmUKK3VzZWQgdG8gd2FrZSB1cCB0YXNrcy4gIFRoaXMgaXMgbGlrZSB0aGUgY29tZWRpX3BhcnBvcnQgZGV2aWNlLCBidXQgdGhlCitvbmx5IHdheSB0byBwaHlzaWNhbGx5IGRpc2FibGUgdGhlIGludGVycnVwdCBvbiB0aGUgUEMzNkFUIGlzIHRvIHJlbW92ZQordGhlIElSUSBqdW1wZXIuICBJZiBubyBpbnRlcnJ1cHQgaXMgY29ubmVjdGVkLCB0aGVuIHN1YmRldmljZSAxIGlzCit1bnVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAicGx4OTA1Mi5oIgorCisjZGVmaW5lIFBDMjM2X0RSSVZFUl9OQU1FCSJhbXBsY19wYzIzNiIKKworLyogUENJMjM2IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1QTElDT04gMHgxNGRjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjM2IDB4MDAwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQgMHhmZmZmCisKKy8qIFBDMzZBVCAvIFBDSTIzNiByZWdpc3RlcnMgKi8KKworI2RlZmluZSBQQzIzNl9JT19TSVpFCQk0CisjZGVmaW5lIFBDMjM2X0xDUl9JT19TSVpFCTEyOAorCisvKgorICogSU5UQ1NSIHZhbHVlcyBmb3IgUENJMjM2LgorICovCisvKiBEaXNhYmxlIGludGVycnVwdCwgYWxzbyBjbGVhciBhbnkgaW50ZXJydXB0IHRoZXJlICovCisjZGVmaW5lIFBDSTIzNl9JTlRSX0RJU0FCTEUgKCBQTFg5MDUyX0lOVENTUl9MSTFFTkFCX0RJU0FCTEVEIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTFQT0xfSElHSCBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkyUE9MX0hJR0ggXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX1BDSUVOQUJfRElTQUJMRUQgXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMVNFTF9FREdFIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfQVNTRVJURUQgKQorLyogRW5hYmxlIGludGVycnVwdCwgYWxzbyBjbGVhciBhbnkgaW50ZXJydXB0IHRoZXJlLiAqLworI2RlZmluZSBQQ0kyMzZfSU5UUl9FTkFCTEUgKCBQTFg5MDUyX0lOVENTUl9MSTFFTkFCX0VOQUJMRUQgXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9ISUdIIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTJQT0xfSElHSCBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9FTkFCTEVEIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTFTRUxfRURHRSBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxQ0xSSU5UX0FTU0VSVEVEICkKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgQW1wbGljb24gUEMzNkFUIGFuZCBQQ0kyMzYuCisgKi8KKworZW51bSBwYzIzNl9idXN0eXBlIHsgaXNhX2J1c3R5cGUsIHBjaV9idXN0eXBlIH07CitlbnVtIHBjMjM2X21vZGVsIHsgcGMzNmF0X21vZGVsLCBwY2kyMzZfbW9kZWwsIGFueXBjaV9tb2RlbCB9OworCitzdHJ1Y3QgcGMyMzZfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZmFuY3lfbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpZDsKKwllbnVtIHBjMjM2X2J1c3R5cGUgYnVzdHlwZTsKKwllbnVtIHBjMjM2X21vZGVsIG1vZGVsOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGMyMzZfYm9hcmQgcGMyMzZfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwYzM2YXQiLAorCSAgICAgIGZhbmN5X25hbWU6IlBDMzZBVCIsCisJICAgICAgYnVzdHlwZToJaXNhX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CXBjMzZhdF9tb2RlbCwKKwkJfSwKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCXsKKwkgICAgICBuYW1lOgkicGNpMjM2IiwKKwkgICAgICBmYW5jeV9uYW1lOiJQQ0kyMzYiLAorCSAgICAgIGRldmlkOglQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTIzNiwKKwkgICAgICBidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGNpMjM2X21vZGVsLAorCQl9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJICAgICAgbmFtZToJUEMyMzZfRFJJVkVSX05BTUUsCisJICAgICAgZmFuY3lfbmFtZTpQQzIzNl9EUklWRVJfTkFNRSwKKwkgICAgICBkZXZpZDoJUENJX0RFVklDRV9JRF9JTlZBTElELAorCSAgICAgIGJ1c3R5cGU6CXBjaV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglhbnlwY2lfbW9kZWwsCS8qIHdpbGRjYXJkICovCisJCX0sCisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjMjM2X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjM2LCBQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwYzIzNl9wY2lfdGFibGUpOworI2VuZGlmIC8qIENPTkZJR19DT01FRElfUENJICovCisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjMjM2X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBwYzIzNl9wcml2YXRlIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCS8qIFBDSSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwl1bnNpZ25lZCBsb25nIGxjcl9pb2Jhc2U7CS8qIFBMWCBQQ0k5MDUyIGNvbmZpZyByZWdpc3RlcnMgaW4gUENJQkFSMSAqLworI2VuZGlmCisJaW50IGVuYWJsZV9pcnE7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGMyMzZfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGMyMzZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGMyMzZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGMyMzYgPSB7CisgICAgICBkcml2ZXJfbmFtZTpQQzIzNl9EUklWRVJfTkFNRSwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwYzIzNl9hdHRhY2gsCisgICAgICBkZXRhY2g6cGMyMzZfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomcGMyMzZfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwYzIzNl9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjMjM2X2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjMjM2X2JvYXJkKSwKK307CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGMyMzYsIHBjMjM2X3BjaV90YWJsZSk7CisjZWxzZQorQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wYzIzNik7CisjZW5kaWYKKworc3RhdGljIGludCBwYzIzNl9yZXF1ZXN0X3JlZ2lvbih1bnNpZ25lZCBtaW5vciwgdW5zaWduZWQgbG9uZyBmcm9tLAorCXVuc2lnbmVkIGxvbmcgZXh0ZW50KTsKK3N0YXRpYyB2b2lkIHBjMjM2X2ludHJfZGlzYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBwYzIzNl9pbnRyX2VuYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHBjMjM2X2ludHJfY2hlY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBwYzIzNl9pbnRyX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGMyMzZfaW50cl9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBwYzIzNl9pbnRyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGMyMzZfaW50cl9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgcGMyMzZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgYSBQQ0kgZGV2aWNlIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgYm9hcmQgbmFtZSwKKyAqIGJ1cyBhbmQgc2xvdC4KKyAqLworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgaW50CitwYzIzNl9maW5kX3BjaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QsCisJc3RydWN0IHBjaV9kZXYgKipwY2lfZGV2X3ApCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworCisJKnBjaV9kZXZfcCA9IE5VTEw7CisKKwkvKiBMb29rIGZvciBtYXRjaGluZyBQQ0kgZGV2aWNlLiAqLworCWZvciAocGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lfZGV2ICE9IE5VTEw7CisJCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNUExJQ09OLAorCQkJUENJX0FOWV9JRCwgcGNpX2RldikpIHsKKwkJLyogSWYgYnVzL3Nsb3Qgc3BlY2lmaWVkLCBjaGVjayB0aGVtLiAqLworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gcGNpX2Rldi0+YnVzLT5udW1iZXIKKwkJCQl8fCBzbG90ICE9IFBDSV9TTE9UKHBjaV9kZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGhpc2JvYXJkLT5tb2RlbCA9PSBhbnlwY2lfbW9kZWwpIHsKKwkJCS8qIE1hdGNoIGFueSBzdXBwb3J0ZWQgbW9kZWwuICovCisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGMyMzZfYm9hcmRzKTsgaSsrKSB7CisJCQkJaWYgKHBjMjM2X2JvYXJkc1tpXS5idXN0eXBlICE9IHBjaV9idXN0eXBlKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocGNpX2Rldi0+ZGV2aWNlID09IHBjMjM2X2JvYXJkc1tpXS5kZXZpZCkgeworCQkJCQkvKiBDaGFuZ2UgYm9hcmRfcHRyIHRvIG1hdGNoZWQgYm9hcmQuICovCisJCQkJCWRldi0+Ym9hcmRfcHRyID0gJnBjMjM2X2JvYXJkc1tpXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gQVJSQVlfU0laRShwYzIzNl9ib2FyZHMpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogTWF0Y2ggc3BlY2lmaWMgbW9kZWwgbmFtZS4gKi8KKwkJCWlmIChwY2lfZGV2LT5kZXZpY2UgIT0gdGhpc2JvYXJkLT5kZXZpZCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZvdW5kIGEgbWF0Y2guICovCisJCSpwY2lfZGV2X3AgPSBwY2lfZGV2OworCQlyZXR1cm4gMDsKKwl9CisJLyogTm8gbWF0Y2ggZm91bmQuICovCisJaWYgKGJ1cyB8fCBzbG90KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiBlcnJvciEgbm8gJXMgZm91bmQgYXQgcGNpICUwMng6JTAyeCFcbiIsCisJCQlkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsIGJ1cywgc2xvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG5vICVzIGZvdW5kIVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSk7CisJfQorCXJldHVybiAtRUlPOworfQorI2VuZGlmCisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBwYzIzNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSAwOworCXVuc2lnbmVkIGludCBpcnEgPSAwOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworCWludCBidXMgPSAwLCBzbG90ID0gMDsKKyNlbmRpZgorCWludCBzaGFyZV9pcnEgPSAwOworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBhdHRhY2hcbiIsIGRldi0+bWlub3IsCisJCVBDMjM2X0RSSVZFUl9OQU1FKTsKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjMjM2X3ByaXZhdGUpKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBQcm9jZXNzIG9wdGlvbnMuICovCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIGlzYV9idXN0eXBlOgorCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwkJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJCXNoYXJlX2lycSA9IDA7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJY2FzZSBwY2lfYnVzdHlwZToKKwkJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKwkJc2hhcmVfaXJxID0gMTsKKworCQlpZiAoKHJldCA9IHBjMjM2X2ZpbmRfcGNpKGRldiwgYnVzLCBzbG90LCAmcGNpX2RldikpIDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWRldnByaXYtPnBjaV9kZXYgPSBwY2lfZGV2OworCQlicmVhazsKKyNlbmRpZiAvKiBDT05GSUdfQ09NRURJX1BDSSAqLworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiAlczogQlVHISBjYW5ub3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGUhXG4iLAorCQkJZGV2LT5taW5vciwgUEMyMzZfRFJJVkVSX05BTUUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwkvKiBFbmFibGUgZGV2aWNlIGFuZCByZXNlcnZlIEkvTyBzcGFjZXMuICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlpZiAocGNpX2RldikgeworCQlpZiAoKHJldCA9IGNvbWVkaV9wY2lfZW5hYmxlKHBjaV9kZXYsIFBDMjM2X0RSSVZFUl9OQU1FKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiY29tZWRpJWQ6IGVycm9yISBjYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucyFcbiIsCisJCQkJZGV2LT5taW5vcik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWRldnByaXYtPmxjcl9pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMSk7CisJCWlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAyKTsKKwkJaXJxID0gcGNpX2Rldi0+aXJxOworCX0gZWxzZQorI2VuZGlmCisJeworCQlyZXQgPSBwYzIzNl9yZXF1ZXN0X3JlZ2lvbihkZXYtPm1pbm9yLCBpb2Jhc2UsIFBDMjM2X0lPX1NJWkUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICg4MjU1KSAqLworCWlmICgocmV0ID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGlvYmFzZSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwlwYzIzNl9pbnRyX2Rpc2FibGUoZGV2KTsKKwlpZiAoaXJxKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBzaGFyZV9pcnEgPyBJUlFGX1NIQVJFRCA6IDA7CisKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIHBjMjM2X2ludGVycnVwdCwgZmxhZ3MsCisJCQkJUEMyMzZfRFJJVkVSX05BTUUsIGRldikgPj0gMCkgeworCQkJZGV2LT5pcnEgPSBpcnE7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQ7CisJCQlzLT5uX2NoYW4gPSAxOworCQkJcy0+bWF4ZGF0YSA9IDE7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW5zbl9iaXRzID0gcGMyMzZfaW50cl9pbnNuOworCQkJcy0+ZG9fY21kdGVzdCA9IHBjMjM2X2ludHJfY21kdGVzdDsKKwkJCXMtPmRvX2NtZCA9IHBjMjM2X2ludHJfY21kOworCQkJcy0+Y2FuY2VsID0gcGMyMzZfaW50cl9jYW5jZWw7CisJCX0KKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzICIsIGRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBpc2FfYnVzdHlwZSkgeworCQlwcmludGsoIihiYXNlICUjbHgpICIsIGlvYmFzZSk7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlwcmludGsoIihwY2kgJXMpICIsIHBjaV9uYW1lKHBjaV9kZXYpKTsKKyNlbmRpZgorCX0KKwlpZiAoaXJxKSB7CisJCXByaW50aygiKGlycSAldSVzKSAiLCBpcnEsIChkZXYtPmlycSA/ICIiIDogIiBVTkFWQUlMQUJMRSIpKTsKKwl9IGVsc2UgeworCQlwcmludGsoIihubyBpcnEpICIpOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGMyMzZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGRldGFjaFxuIiwgZGV2LT5taW5vciwKKwkJUEMyMzZfRFJJVkVSX05BTUUpOworCWlmIChkZXZwcml2KSB7CisJCXBjMjM2X2ludHJfZGlzYWJsZShkZXYpOworCX0KKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAwKTsKKwl9CisJaWYgKGRldnByaXYpIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0gZWxzZQorI2VuZGlmCisJCXsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBQQzIzNl9JT19TSVpFKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZGV2LT5ib2FyZF9uYW1lKSB7CisJCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiAlcyByZW1vdmVkXG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBhbmQgcmVxdWVzdHMgYW4gSS9PIHJlZ2lvbiwgcmVwb3J0aW5nIGFuIGVycm9yCisgKiBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0LgorICovCitzdGF0aWMgaW50IHBjMjM2X3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBsb25nIGZyb20sCisJdW5zaWduZWQgbG9uZyBleHRlbnQpCit7CisJaWYgKCFmcm9tIHx8ICFyZXF1ZXN0X3JlZ2lvbihmcm9tLCBleHRlbnQsIFBDMjM2X0RSSVZFUl9OQU1FKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdCAoJSNseCwlbHUpIVxuIiwKKwkJCW1pbm9yLCBmcm9tLCBleHRlbnQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBtYXJrIHRoZSBpbnRlcnJ1cHQgYXMgZGlzYWJsZWQgKG5vIGNvbW1hbmQKKyAqIGNvbmZpZ3VyZWQgb24gc3ViZGV2aWNlIDEpIGFuZCB0byBwaHlzaWNhbGx5IGRpc2FibGUgdGhlIGludGVycnVwdAorICogKG5vdCBwb3NzaWJsZSBvbiB0aGUgUEMzNkFULCBleGNlcHQgYnkgcmVtb3ZpbmcgdGhlIElSUSBqdW1wZXIhKS4KKyAqLworc3RhdGljIHZvaWQgcGMyMzZfaW50cl9kaXNhYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5lbmFibGVfaXJxID0gMDsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChkZXZwcml2LT5sY3JfaW9iYXNlKQorCQlvdXRsKFBDSTIzNl9JTlRSX0RJU0FCTEUsIGRldnByaXYtPmxjcl9pb2Jhc2UgKyBQTFg5MDUyX0lOVENTUik7CisjZW5kaWYKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbWFyayB0aGUgaW50ZXJydXB0IGFzIGVuYWJsZWQgKGEgY29tbWFuZAorICogY29uZmlndXJlZCBvbiBzdWJkZXZpY2UgMSkgYW5kIHRvIHBoeXNpY2FsbHkgZW5hYmxlIHRoZSBpbnRlcnJ1cHQKKyAqIChub3QgcG9zc2libGUgb24gdGhlIFBDMzZBVCwgZXhjZXB0IGJ5IChyZSljb25uZWN0aW5nIHRoZSBJUlEganVtcGVyISkuCisgKi8KK3N0YXRpYyB2b2lkIHBjMjM2X2ludHJfZW5hYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5lbmFibGVfaXJxID0gMTsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChkZXZwcml2LT5sY3JfaW9iYXNlKQorCQlvdXRsKFBDSTIzNl9JTlRSX0VOQUJMRSwgZGV2cHJpdi0+bGNyX2lvYmFzZSArIFBMWDkwNTJfSU5UQ1NSKTsKKyNlbmRpZgorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGludGVycnVwdCBvY2N1cnMgdG8gY2hlY2sgd2hldGhlcgorICogdGhlIGludGVycnVwdCBoYXMgYmVlbiBtYXJrZWQgYXMgZW5hYmxlZCBhbmQgd2FzIGdlbmVyYXRlZCBieSB0aGUKKyAqIGJvYXJkLiAgSWYgc28sIHRoZSBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgaGFyZHdhcmUgZm9yIHRoZSBuZXh0CisgKiBpbnRlcnJ1cHQuCisgKiBSZXR1cm5zIDAgaWYgdGhlIGludGVycnVwdCBzaG91bGQgYmUgaWdub3JlZC4KKyAqLworc3RhdGljIGludCBwYzIzNl9pbnRyX2NoZWNrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+ZW5hYmxlX2lycSkgeworCQlyZXR2YWwgPSAxOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJCWlmIChkZXZwcml2LT5sY3JfaW9iYXNlKSB7CisJCQlpZiAoKGlubChkZXZwcml2LT5sY3JfaW9iYXNlICsgUExYOTA1Ml9JTlRDU1IpCisJCQkJCSYgUExYOTA1Ml9JTlRDU1JfTEkxU1RBVF9NQVNLKQorCQkJCT09IFBMWDkwNTJfSU5UQ1NSX0xJMVNUQVRfSU5BQ1RJVkUpIHsKKwkJCQlyZXR2YWwgPSAwOworCQkJfSBlbHNlIHsKKwkJCQkvKiBDbGVhciBpbnRlcnJ1cHQgYW5kIGtlZXAgaXQgZW5hYmxlZC4gKi8KKwkJCQlvdXRsKFBDSTIzNl9JTlRSX0VOQUJMRSwKKwkJCQkJZGV2cHJpdi0+bGNyX2lvYmFzZSArIFBMWDkwNTJfSU5UQ1NSKTsKKwkJCX0KKwkJfQorI2VuZGlmCisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogSW5wdXQgZnJvbSBzdWJkZXZpY2UgMS4KKyAqIENvcGllZCBmcm9tIHRoZSBjb21lZGlfcGFycG9ydCBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgcGMyMzZfaW50cl9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzFdID0gMDsKKwlyZXR1cm4gMjsKK30KKworLyoKKyAqIFN1YmRldmljZSAxIGNvbW1hbmQgdGVzdC4KKyAqIENvcGllZCBmcm9tIHRoZSBjb21lZGlfcGFycG9ydCBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgcGMyMzZfaW50cl9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMSAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IGlnbm9yZWQgKi8KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gMSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCWNtZC0+c3RvcF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogaWdub3JlZCAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFN1YmRldmljZSAxIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgcGMyMzZfaW50cl9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlwYzIzNl9pbnRyX2VuYWJsZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdWJkZXZpY2UgMSBjYW5jZWwgY29tbWFuZC4KKyAqLworc3RhdGljIGludCBwYzIzNl9pbnRyX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXBjMjM2X2ludHJfZGlzYWJsZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgorICogQmFzZWQgb24gdGhlIGNvbWVkaV9wYXJwb3J0IGRyaXZlci4KKyAqLworc3RhdGljIGlycXJldHVybl90IHBjMjM2X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlpbnQgaGFuZGxlZDsKKworCWhhbmRsZWQgPSBwYzIzNl9pbnRyX2NoZWNrKGRldik7CisJaWYgKGRldi0+YXR0YWNoZWQgJiYgaGFuZGxlZCkgeworCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgMCk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLIHwgQ09NRURJX0NCX0VPUzsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjYzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2FjNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjYzLmMKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYworICAgIERyaXZlciBmb3IgQW1wbGljb24gUEMyNjMgYW5kIFBDSTI2MyByZWxheSBib2FyZHMuCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgTUVWIEx0ZC4gPGh0dHA6Ly93d3cubWV2LmNvLnVrLz4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFtcGxjX3BjMjYzCitEZXNjcmlwdGlvbjogQW1wbGljb24gUEMyNjMsIFBDSTI2MworQXV0aG9yOiBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4KK0RldmljZXM6IFtBbXBsaWNvbl0gUEMyNjMgKHBjMjYzKSwgUENJMjYzIChwY2kyNjMgb3IgYW1wbGNfcGMyNjMpCitVcGRhdGVkOiBXZWQsIDIyIE9jdCAyMDA4IDE0OjEwOjUzICswMTAwCitTdGF0dXM6IHdvcmtzCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIFBDMjYzOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUENJMjYzOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJIGRldmljZSB3aWxsIGJlCisgIHVzZWQuCisKK0VhY2ggYm9hcmQgYXBwZWFycyBhcyBvbmUgc3ViZGV2aWNlLCB3aXRoIDE2IGRpZ2l0YWwgb3V0cHV0cywgZWFjaAorY29ubmVjdGVkIHRvIGEgcmVlZC1yZWxheS4gUmVsYXkgY29udGFjdHMgYXJlIGNsb3NlZCB3aGVuIG91dHB1dCBpcyAxLgorVGhlIHN0YXRlIG9mIHRoZSBvdXRwdXRzIGNhbiBiZSByZWFkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorCisjZGVmaW5lIFBDMjYzX0RSSVZFUl9OQU1FCSJhbXBsY19wYzI2MyIKKworLyogUENJMjYzIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1QTElDT04gMHgxNGRjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjYzIDB4MDAwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQgMHhmZmZmCisKKy8qIFBDMjYzIC8gUENJMjYzIHJlZ2lzdGVycyAqLworI2RlZmluZSBQQzI2M19JT19TSVpFCTIKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgQW1wbGljb24gUEMyNjMgLyBQQ0kyNjMuCisgKi8KKworZW51bSBwYzI2M19idXN0eXBlIHsgaXNhX2J1c3R5cGUsIHBjaV9idXN0eXBlIH07CitlbnVtIHBjMjYzX21vZGVsIHsgcGMyNjNfbW9kZWwsIHBjaTI2M19tb2RlbCwgYW55cGNpX21vZGVsIH07CisKK3N0cnVjdCBwYzI2M19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpmYW5jeV9uYW1lOworCXVuc2lnbmVkIHNob3J0IGRldmlkOworCWVudW0gcGMyNjNfYnVzdHlwZSBidXN0eXBlOworCWVudW0gcGMyNjNfbW9kZWwgbW9kZWw7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBwYzI2M19ib2FyZCBwYzI2M19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjMjYzIiwKKwkgICAgICBmYW5jeV9uYW1lOiJQQzI2MyIsCisJICAgICAgYnVzdHlwZToJaXNhX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CXBjMjYzX21vZGVsLAorCQl9LAorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CSJwY2kyNjMiLAorCSAgICAgIGZhbmN5X25hbWU6IlBDSTI2MyIsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjYzLAorCSAgICAgIGJ1c3R5cGU6CXBjaV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwY2kyNjNfbW9kZWwsCisJCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCXsKKwkgICAgICBuYW1lOglQQzI2M19EUklWRVJfTkFNRSwKKwkgICAgICBmYW5jeV9uYW1lOlBDMjYzX0RSSVZFUl9OQU1FLAorCSAgICAgIGRldmlkOglQQ0lfREVWSUNFX0lEX0lOVkFMSUQsCisJICAgICAgYnVzdHlwZToJcGNpX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CWFueXBjaV9tb2RlbCwJLyogd2lsZGNhcmQgKi8KKwkJfSwKKyNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGMyNjNfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyNjMsIFBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjMjYzX3BjaV90YWJsZSk7CisjZW5kaWYgLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGMyNjNfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdHJ1Y3QgcGMyNjNfcHJpdmF0ZSB7CisJLyogUENJIGRldmljZS4gKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwYzI2M19wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2VuZGlmIC8qIENPTkZJR19DT01FRElfUENJICovCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IHBjMjYzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjMjYzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FtcGxjX3BjMjYzID0geworICAgICAgZHJpdmVyX25hbWU6UEMyNjNfRFJJVkVSX05BTUUsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGMyNjNfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjMjYzX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JnBjMjYzX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGMyNjNfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihwYzI2M19ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBwYzI2M19ib2FyZCksCit9OworCitzdGF0aWMgaW50IHBjMjYzX3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBsb25nIGZyb20sCisJdW5zaWduZWQgbG9uZyBleHRlbnQpOworc3RhdGljIGludCBwYzI2M19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHBjMjYzX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgYSBQQ0kgZGV2aWNlIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgYm9hcmQgbmFtZSwKKyAqIGJ1cyBhbmQgc2xvdC4KKyAqLworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgaW50CitwYzI2M19maW5kX3BjaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QsCisJc3RydWN0IHBjaV9kZXYgKipwY2lfZGV2X3ApCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworCisJKnBjaV9kZXZfcCA9IE5VTEw7CisKKwkvKiBMb29rIGZvciBtYXRjaGluZyBQQ0kgZGV2aWNlLiAqLworCWZvciAocGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lfZGV2ICE9IE5VTEw7CisJCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNUExJQ09OLAorCQkJUENJX0FOWV9JRCwgcGNpX2RldikpIHsKKwkJLyogSWYgYnVzL3Nsb3Qgc3BlY2lmaWVkLCBjaGVjayB0aGVtLiAqLworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gcGNpX2Rldi0+YnVzLT5udW1iZXIKKwkJCQl8fCBzbG90ICE9IFBDSV9TTE9UKHBjaV9kZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGhpc2JvYXJkLT5tb2RlbCA9PSBhbnlwY2lfbW9kZWwpIHsKKwkJCS8qIE1hdGNoIGFueSBzdXBwb3J0ZWQgbW9kZWwuICovCisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGMyNjNfYm9hcmRzKTsgaSsrKSB7CisJCQkJaWYgKHBjMjYzX2JvYXJkc1tpXS5idXN0eXBlICE9IHBjaV9idXN0eXBlKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocGNpX2Rldi0+ZGV2aWNlID09IHBjMjYzX2JvYXJkc1tpXS5kZXZpZCkgeworCQkJCQkvKiBDaGFuZ2UgYm9hcmRfcHRyIHRvIG1hdGNoZWQgYm9hcmQuICovCisJCQkJCWRldi0+Ym9hcmRfcHRyID0gJnBjMjYzX2JvYXJkc1tpXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gQVJSQVlfU0laRShwYzI2M19ib2FyZHMpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogTWF0Y2ggc3BlY2lmaWMgbW9kZWwgbmFtZS4gKi8KKwkJCWlmIChwY2lfZGV2LT5kZXZpY2UgIT0gdGhpc2JvYXJkLT5kZXZpZCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZvdW5kIGEgbWF0Y2guICovCisJCSpwY2lfZGV2X3AgPSBwY2lfZGV2OworCQlyZXR1cm4gMDsKKwl9CisJLyogTm8gbWF0Y2ggZm91bmQuICovCisJaWYgKGJ1cyB8fCBzbG90KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiBlcnJvciEgbm8gJXMgZm91bmQgYXQgcGNpICUwMng6JTAyeCFcbiIsCisJCQlkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsIGJ1cywgc2xvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG5vICVzIGZvdW5kIVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSk7CisJfQorCXJldHVybiAtRUlPOworfQorI2VuZGlmCisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBwYzI2M19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSAwOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworCWludCBidXMgPSAwLCBzbG90ID0gMDsKKyNlbmRpZgorCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBhdHRhY2hcbiIsIGRldi0+bWlub3IsCisJCVBDMjYzX0RSSVZFUl9OQU1FKTsKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGMyNjNfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorI2VuZGlmCisJLyogUHJvY2VzcyBvcHRpb25zLiAqLworCXN3aXRjaCAodGhpc2JvYXJkLT5idXN0eXBlKSB7CisJY2FzZSBpc2FfYnVzdHlwZToKKwkJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJY2FzZSBwY2lfYnVzdHlwZToKKwkJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCQlpZiAoKHJldCA9IHBjMjYzX2ZpbmRfcGNpKGRldiwgYnVzLCBzbG90LCAmcGNpX2RldikpIDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWRldnByaXYtPnBjaV9kZXYgPSBwY2lfZGV2OworCQlicmVhazsKKyNlbmRpZiAvKiBDT05GSUdfQ09NRURJX1BDSSAqLworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiAlczogQlVHISBjYW5ub3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGUhXG4iLAorCQkJZGV2LT5taW5vciwgUEMyNjNfRFJJVkVSX05BTUUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwkvKiBFbmFibGUgZGV2aWNlIGFuZCByZXNlcnZlIEkvTyBzcGFjZXMuICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlpZiAocGNpX2RldikgeworCQlpZiAoKHJldCA9IGNvbWVkaV9wY2lfZW5hYmxlKHBjaV9kZXYsIFBDMjYzX0RSSVZFUl9OQU1FKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiY29tZWRpJWQ6IGVycm9yISBjYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucyFcbiIsCisJCQkJZGV2LT5taW5vcik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAyKTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJcmV0ID0gcGMyNjNfcmVxdWVzdF9yZWdpb24oZGV2LT5taW5vciwgaW9iYXNlLCBQQzI2M19JT19TSVpFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX1JUOworCXMtPm5fY2hhbiA9IDE2OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gcGMyNjNfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IHBjMjYzX2Rpb19pbnNuX2NvbmZpZzsKKwkvKiBhbGwgb3V0cHV0cyAqLworCXMtPmlvX2JpdHMgPSAweGZmZmY7CisJLyogcmVhZCBpbml0aWFsIHJlbGF5IHN0YXRlICovCisJcy0+c3RhdGUgPSBpbmIoZGV2LT5pb2Jhc2UpOworCXMtPnN0YXRlID0gcy0+c3RhdGUgfCAoaW5iKGRldi0+aW9iYXNlKSA8PCA4KTsKKworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiAlcyAiLCBkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUpOworCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gaXNhX2J1c3R5cGUpIHsKKwkJcHJpbnRrKCIoYmFzZSAlI2x4KSAiLCBpb2Jhc2UpOworCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwkJcHJpbnRrKCIocGNpICVzKSAiLCBwY2lfbmFtZShwY2lfZGV2KSk7CisjZW5kaWYKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IHBjMjYzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBkZXRhY2hcbiIsIGRldi0+bWlub3IsCisJCVBDMjYzX0RSSVZFUl9OQU1FKTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaWYgKGRldnByaXYpCisjZW5kaWYKKwl7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9IGVsc2UKKyNlbmRpZgorCQl7CisJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUEMyNjNfSU9fU0laRSk7CisJCQl9CisJCX0KKwl9CisJaWYgKGRldi0+Ym9hcmRfbmFtZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogJXMgcmVtb3ZlZFxuIiwKKwkJCWRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgYW5kIHJlcXVlc3RzIGFuIEkvTyByZWdpb24sIHJlcG9ydGluZyBhbiBlcnJvcgorICogaWYgdGhlcmUgaXMgYSBjb25mbGljdC4KKyAqLworc3RhdGljIGludCBwYzI2M19yZXF1ZXN0X3JlZ2lvbih1bnNpZ25lZCBtaW5vciwgdW5zaWduZWQgbG9uZyBmcm9tLAorCXVuc2lnbmVkIGxvbmcgZXh0ZW50KQoreworCWlmICghZnJvbSB8fCAhcmVxdWVzdF9yZWdpb24oZnJvbSwgZXh0ZW50LCBQQzI2M19EUklWRVJfTkFNRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogSS9PIHBvcnQgY29uZmxpY3QgKCUjbHgsJWx1KSFcbiIsCisJCQltaW5vciwgZnJvbSwgZXh0ZW50KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKiBESU8gZGV2aWNlcyBhcmUgc2xpZ2h0bHkgc3BlY2lhbC4gIEFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBpbXBsZW1lbnQgdGhlIGluc25fcmVhZC9pbnNuX3dyaXRlIGludGVyZmFjZSwgaXQgaXMgbXVjaCBtb3JlCisgKiB1c2VmdWwgdG8gYXBwbGljYXRpb25zIGlmIHlvdSBpbXBsZW1lbnQgdGhlIGluc25fYml0cyBpbnRlcmZhY2UuCisgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUKKyAqIGNvbWVkaSBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KK3N0YXRpYyBpbnQgcGMyNjNfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEKKwkgKiBpbiBkYXRhWzFdLCBlYWNoIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gKi8KKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IGxpbmVzICovCisJCW91dGIocy0+c3RhdGUgJiAweEZGLCBkZXYtPmlvYmFzZSk7CisJCW91dGIocy0+c3RhdGUgPj4gOCwgZGV2LT5pb2Jhc2UgKyAxKTsKKwl9CisKKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwkvKiBvciB3ZSBjb3VsZCBqdXN0IHJldHVybiB0aGUgc29mdHdhcmUgY29weSBvZiB0aGUgb3V0cHV0IHZhbHVlcyBpZgorCSAqIGl0IHdhcyBhIHB1cmVseSBkaWdpdGFsIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwYzI2M19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAxOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX3BjMjYzLCBwYzI2M19wY2lfdGFibGUpOworI2Vsc2UKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGMyNjMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwYjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYwpAQCAtMCwwICsxLDE1NDUgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjI0LmMKKyAgICBEcml2ZXIgZm9yIEFtcGxpY29uIFBDSTIyNCBhbmQgUENJMjM0IEFPIGJvYXJkcy4KKworICAgIENvcHlyaWdodCAoQykgMjAwNSBNRVYgTHRkLiA8aHR0cDovL3d3dy5tZXYuY28udWsvPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCwyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBhbXBsY19wY2kyMjQKK0Rlc2NyaXB0aW9uOiBBbXBsaWNvbiBQQ0kyMjQsIFBDSTIzNAorQXV0aG9yOiBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4KK0RldmljZXM6IFtBbXBsaWNvbl0gUENJMjI0IChhbXBsY19wY2kyMjQgb3IgcGNpMjI0KSwKKyAgUENJMjM0IChhbXBsY19wY2kyMjQgb3IgcGNpMjM0KQorVXBkYXRlZDogV2VkLCAyMiBPY3QgMjAwOCAxMjoyNTowOCArMDEwMAorU3RhdHVzOiB3b3JrcywgYnV0IHNlZSBjYXZlYXRzCisKK1N1cHBvcnRzOgorCisgIC0gYW9faW5zbiByZWFkL3dyaXRlCisgIC0gYW9fZG9fY21kIG1vZGUgd2l0aCB0aGUgZm9sbG93aW5nIHNvdXJjZXM6CisKKyAgICAtIHN0YXJ0X3NyYyAgICAgICAgIFRSSUdfSU5UICAgICAgICBUUklHX0VYVAorICAgIC0gc2Nhbl9iZWdpbl9zcmMgICAgVFJJR19USU1FUiAgICAgIFRSSUdfRVhUCisgICAgLSBjb252ZXJ0X3NyYyAgICAgICBUUklHX05PVworICAgIC0gc2Nhbl9lbmRfc3JjICAgICAgVFJJR19DT1VOVAorICAgIC0gc3RvcF9zcmMgICAgICAgICAgVFJJR19DT1VOVCAgICAgIFRSSUdfRVhUICAgICAgICBUUklHX05PTkUKKworICAgIFRoZSBjaGFubmVsIGxpc3QgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFubmVsIHdpdGggbm8gcmVwZWF0ZWQKKyAgICBjaGFubmVscy4gIFRoZSBzY2FuIGVuZCBjb3VudCBtdXN0IGVxdWFsIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW4KKyAgICB0aGUgY2hhbm5lbCBsaXN0LgorCisgICAgVGhlcmUgaXMgb25seSBvbmUgZXh0ZXJuYWwgdHJpZ2dlciBzb3VyY2Ugc28gb25seSBvbmUgb2Ygc3RhcnRfc3JjLAorICAgIHNjYW5fYmVnaW5fc3JjIG9yIHN0b3Bfc3JjIG1heSB1c2UgVFJJR19FWFQuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIFBDSTIyNDoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKS4KKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkuCisgICAgICAgICAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kgZGV2aWNlCisgICAgICAgICAgd2lsbCBiZSB1c2VkLgorICBbMl0gLSBTZWxlY3QgYXZhaWxhYmxlIHJhbmdlcyBhY2NvcmRpbmcgdG8ganVtcGVyIExLMS4gIEFsbCBjaGFubmVscworICAgICAgICBhcmUgc2V0IHRvIHRoZSBzYW1lIHJhbmdlOgorICAgICAgICAwPUp1bXBlciBwb3NpdGlvbiAxLTIgKGZhY3RvcnkgZGVmYXVsdCksIDQgc29mdHdhcmUtc2VsZWN0YWJsZQorICAgICAgICAgIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlcywgZ2l2aW5nIDQgYmlwb2xhciBhbmQgNCB1bmlwb2xhcgorICAgICAgICAgIHJhbmdlczoKKyAgICAgICAgICAgIFstMTBWLCsxMFZdLCBbLTVWLCs1Vl0sIFstMi41ViwrMi41Vl0sIFstMS4yNVYsKzEuMjVWXSwKKyAgICAgICAgICAgIFswLCsxMFZdLCBbMCwrNVZdLCBbMCwrMi41Vl0sIFswLDEuMjVWXS4KKyAgICAgICAgMT1KdW1wZXIgcG9zaXRpb24gMi0zLCAxIGV4dGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlLCBnaXZpbmcKKyAgICAgICAgICAxIGJpcG9sYXIgYW5kIDEgdW5pcG9sYXIgcmFuZ2U6CisgICAgICAgICAgICBbLVZleHQsK1ZleHRdLCBbMCwrVmV4dF0uCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIFBDSTIzNDoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKS4KKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkuCisgICAgICAgICAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kgZGV2aWNlCisgICAgICAgICAgd2lsbCBiZSB1c2VkLgorICBbMl0gLSBTZWxlY3QgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UgYWNjb3JkaW5nIHRvCisgICAgICAgIGp1bXBlciBMSzEuICBUaGlzIGFmZmVjdHMgYWxsIGNoYW5uZWxzOgorICAgICAgICAwPUp1bXBlciBwb3NpdGlvbiAxLTIgKGZhY3RvcnkgZGVmYXVsdCksIFZyZWY9NVYgaW50ZXJuYWwuCisgICAgICAgIDE9SnVtcGVyIHBvc2l0aW9uIDItMywgVnJlZj1WZXh0IGV4dGVybmFsLgorICBbM10gLSBTZWxlY3QgY2hhbm5lbCAwIHJhbmdlIGFjY29yZGluZyB0byBqdW1wZXIgTEsyOgorICAgICAgICAwPUp1bXBlciBwb3NpdGlvbiAyLTMgKGZhY3RvcnkgZGVmYXVsdCksIHJhbmdlIFstMipWcmVmLCsyKlZyZWZdCisgICAgICAgICAgKDEwViBiaXBvbGFyIHdoZW4gb3B0aW9uc1syXT0wKS4KKyAgICAgICAgMT1KdW1wZXIgcG9zaXRpb24gMS0yLCByYW5nZSBbLVZyZWYsK1ZyZWZdCisgICAgICAgICAgKDVWIGJpcG9sYXIgd2hlbiBvcHRpb25zWzJdPTApLgorICBbNF0gLSBTZWxlY3QgY2hhbm5lbCAxIHJhbmdlIGFjY29yZGluZyB0byBqdW1wZXIgTEszOiBjZi4gb3B0aW9uc1szXS4KKyAgWzVdIC0gU2VsZWN0IGNoYW5uZWwgMiByYW5nZSBhY2NvcmRpbmcgdG8ganVtcGVyIExLNDogY2YuIG9wdGlvbnNbM10uCisgIFs2XSAtIFNlbGVjdCBjaGFubmVsIDMgcmFuZ2UgYWNjb3JkaW5nIHRvIGp1bXBlciBMSzU6IGNmLiBvcHRpb25zWzNdLgorCitQYXNzaW5nIGEgemVybyBmb3IgYW4gb3B0aW9uIGlzIHRoZSBzYW1lIGFzIGxlYXZpbmcgaXQgdW5zcGVjaWZpZWQuCisKK0NhdmVhdHM6CisKKyAgMSkgQWxsIGNoYW5uZWxzIG9uIHRoZSBQQ0kyMjQgc2hhcmUgdGhlIHNhbWUgcmFuZ2UuICBBbnkgY2hhbmdlIHRvIHRoZQorICAgICByYW5nZSBhcyBhIHJlc3VsdCBvZiBpbnNuX3dyaXRlIG9yIGEgc3RyZWFtaW5nIGNvbW1hbmQgd2lsbCBhZmZlY3QKKyAgICAgdGhlIG91dHB1dCB2b2x0YWdlcyBvZiBhbGwgY2hhbm5lbHMsIGluY2x1ZGluZyB0aG9zZSBub3Qgc3BlY2lmaWVkCisgICAgIGJ5IHRoZSBpbnN0cnVjdGlvbiBvciBjb21tYW5kLgorCisgIDIpIEZvciB0aGUgYW5hbG9nIG91dHB1dCBjb21tYW5kLCAgdGhlIGZpcnN0IHNjYW4gbWF5IGJlIHRyaWdnZXJlZAorICAgICBmYWxzZWx5IGF0IHRoZSBzdGFydCBvZiBhY3F1aXNpdGlvbi4gIFRoaXMgb2NjdXJzIHdoZW4gdGhlIERBQyBzY2FuCisgICAgIHRyaWdnZXIgc291cmNlIGlzIHN3aXRjaGVkIGZyb20gJ25vbmUnIHRvICd0aW1lcicgKHNjYW5fYmVnaW5fc3JjID0KKyAgICAgVFJJR19USU1FUikgb3IgJ2V4dGVybmFsJyAoc2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIGF0IHRoZSBzdGFydAorICAgICBvZiBhY3F1aXNpdGlvbiBhbmQgdGhlIHRyaWdnZXIgc291cmNlIGlzIGF0IGxvZ2ljIGxldmVsIDEgYXQgdGhlCisgICAgIHRpbWUgb2YgdGhlIHN3aXRjaC4gIFRoaXMgaXMgdmVyeSBsaWtlbHkgZm9yIFRSSUdfVElNRVIuICBGb3IKKyAgICAgVFJJR19FWFQsIGl0IGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mIHRoZSBleHRlcm5hbCBsaW5lIGFuZCB3aGV0aGVyCisgICAgIHRoZSBDUl9JTlZFUlQgZmxhZyBoYXMgYmVlbiBzZXQuICBUaGUgcmVtYWluaW5nIHNjYW5zIGFyZSB0cmlnZ2VyZWQKKyAgICAgY29ycmVjdGx5LgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisjaW5jbHVkZSAiODI1My5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FCSJhbXBsY19wY2kyMjQiCisKKy8qCisgKiBQQ0kgSURzLgorICovCisvKiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1QTElDT04gMHgxNGRjICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjI0IDB4MDAwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTIzNCAweDAwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlZBTElEIDB4ZmZmZgorCisvKgorICogUENJMjI0LzIzNCBpL28gc3BhY2UgMSAoUENJQkFSMikgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFBDSTIyNF9JTzFfU0laRQkweDIwCS8qIFNpemUgb2YgaS9vIHNwYWNlIDEgKDgtYml0IHJlZ2lzdGVycykgKi8KKyNkZWZpbmUgUENJMjI0X1oyX0NUMAkweDE0CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgMCAqLworI2RlZmluZSBQQ0kyMjRfWjJfQ1QxCTB4MTUJLyogODJDNTQgY291bnRlci90aW1lciAxICovCisjZGVmaW5lIFBDSTIyNF9aMl9DVDIJMHgxNgkvKiA4MkM1NCBjb3VudGVyL3RpbWVyIDIgKi8KKyNkZWZpbmUgUENJMjI0X1oyX0NUQwkweDE3CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgY29udHJvbCB3b3JkICovCisjZGVmaW5lIFBDSTIyNF9aQ0xLX1NDRQkweDFBCS8qIEdyb3VwIFogQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0kyMjRfWkdBVF9TQ0UJMHgxRAkvKiBHcm91cCBaIEdhdGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0kyMjRfSU5UX1NDRQkweDFFCS8qIElTUiBJbnRlcnJ1cHQgc291cmNlIG1hc2sgcmVnaXN0ZXIgKi8KKwkJCQkvKiAvSW50ZXJydXB0IHN0YXR1cyAqLworCisvKgorICogUENJMjI0LzIzNCBpL28gc3BhY2UgMiAoUENJQkFSMykgMTYtYml0IHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBQQ0kyMjRfSU8yX1NJWkUJMHgxMAkvKiBTaXplIG9mIGkvbyBzcGFjZSAyICgxNi1iaXQgcmVnaXN0ZXJzKS4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0RBVEEJMHgwMAkvKiAody1vKSBEQUMgRklGTyBkYXRhLiAqLworI2RlZmluZSBQQ0kyMjRfU09GVFRSSUcJMHgwMAkvKiAoci1vKSBEQUMgc29mdHdhcmUgc2NhbiB0cmlnZ2VyLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OCTB4MDIJLyogKHIvdykgREFDIHN0YXR1cy9jb25maWd1cmF0aW9uLiAqLworI2RlZmluZSBQQ0kyMjRfRklGT1NJWgkweDA0CS8qICh3LW8pIEZJRk8gc2l6ZSBmb3Igd3JhcGFyb3VuZCBtb2RlLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ0VOCTB4MDYJLyogKHctbykgREFDIGNoYW5uZWwgZW5hYmxlIHJlZ2lzdGVyLiAqLworCisvKgorICogREFDQ09OIHZhbHVlcy4KKyAqLworLyogKHIvdykgU2NhbiB0cmlnZ2VyLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfTUFTSwkJKDcgPDwgMCkKKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9UUklHX05PTkUJCSgwIDw8IDApCS8qIG5vbmUgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9UUklHX1NXCQkoMSA8PCAwKQkvKiBzb2Z0d2FyZSB0cmlnICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19FWFRQCQkoMiA8PCAwKQkvKiBleHQgK3ZlIGVkZ2UgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9UUklHX0VYVE4JCSgzIDw8IDApCS8qIGV4dCAtdmUgZWRnZSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfWjJDVDAJKDQgPDwgMCkJLyogWjIgQ1QwIG91dCAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfWjJDVDEJKDUgPDwgMCkJLyogWjIgQ1QxIG91dCAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfWjJDVDIJKDYgPDwgMCkJLyogWjIgQ1QyIG91dCAqLworLyogKHIvdykgUG9sYXJpdHkgKFBDSTIyNCBvbmx5LCBQQ0kyMzQgYWx3YXlzIGJpcG9sYXIhKS4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9QT0xBUl9NQVNLCSgxIDw8IDMpCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fUE9MQVJfVU5JCQkoMCA8PCAzKQkvKiByYW5nZSBbMCxWcmVmXSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1BPTEFSX0JJCQkoMSA8PCAzKQkvKiByYW5nZSBbLVZyZWYsVnJlZl0gKi8KKy8qIChyL3cpIEludGVybmFsIFZyZWYgKFBDSTIyNCBvbmx5LCB3aGVuIExLMSBpbiBwb3NpdGlvbiAxLTIpLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1ZSRUZfTUFTSwkJKDMgPDwgNCkKKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9WUkVGXzFfMjUJCSgwIDw8IDQpCS8qIFZyZWYgPSAxLjI1ViAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1ZSRUZfMl81CQkoMSA8PCA0KQkvKiBWcmVmID0gMi41ViAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1ZSRUZfNQkJKDIgPDwgNCkJLyogVnJlZiA9IDVWICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVlJFRl8xMAkJKDMgPDwgNCkJLyogVnJlZiA9IDEwViAqLworLyogKHIvdykgV3JhcGFyb3VuZCBtb2RlIGVuYWJsZSAodG8gcGxheSBiYWNrIHN0b3JlZCB3YXZlZm9ybSkuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT1dSQVAJCSgxIDw8IDcpCisvKiAoci93KSBGSUZPIGVuYWJsZS4gIEl0IE1VU1QgYmUgc2V0ISAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9FTkFCCQkoMSA8PCA4KQorLyogKHIvdykgRklGTyBpbnRlcnJ1cHQgdHJpZ2dlciBsZXZlbCAobW9zdCB2YWx1ZXMgYXJlIG5vdCB2ZXJ5IHVzZWZ1bCkuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0lOVFJfTUFTSwkoNyA8PCA5KQorI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0VNUFRZCSgwIDw8IDkpCS8qIHdoZW4gZW1wdHkgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9ORU1QVFkJKDEgPDwgOSkJLyogd2hlbiBub3QgZW1wdHkgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9OSEFMRgkoMiA8PCA5KQkvKiB3aGVuIG5vdCBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9IQUxGCSgzIDw8IDkpCS8qIHdoZW4gaGFsZiBmdWxsICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0lOVFJfTkZVTEwJKDQgPDwgOSkJLyogd2hlbiBub3QgZnVsbCAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0ZVTEwJKDUgPDwgOSkJLyogd2hlbiBmdWxsICovCisvKiAoci1vKSBGSUZPIGZpbGwgbGV2ZWwuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0ZMX01BU0sJKDcgPDwgMTIpCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0ZMX0VNUFRZCSgxIDw8IDEyKQkvKiAwICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0ZMX09ORVRPSEFMRgkoMCA8PCAxMikJLyogWzEsMjA0OF0gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPRkxfSEFMRlRPRlVMTAkoNCA8PCAxMikJLyogWzIwNDksNDA5NV0gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPRkxfRlVMTAkoNiA8PCAxMikJLyogNDA5NiAqLworLyogKHItbykgREFDIGJ1c3kgZmxhZy4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9CVVNZCQkoMSA8PCAxNSkKKy8qICh3LW8pIEZJRk8gcmVzZXQuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT1JFU0VUCQkoMSA8PCAxMikKKy8qICh3LW8pIEdsb2JhbCByZXNldCAobm90IHN1cmUgd2hhdCBpdCBkb2VzKS4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9HTE9CQUxSRVNFVAkoMSA8PCAxMykKKworLyoKKyAqIERBQyBGSUZPIHNpemUuCisgKi8KKyNkZWZpbmUgUENJMjI0X0ZJRk9fU0laRQk0MDk2CisKKy8qCisgKiBEQUMgRklGTyBndWFyYW50ZWVkIG1pbmltdW0gcm9vbSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiByZXBvcnRlZCBmaWxsIGxldmVsLgorICogVGhlIG1heGltdW0gcm9vbSBhdmFpbGFibGUgZGVwZW5kcyBvbiB0aGUgcmVwb3J0ZWQgZmlsbCBsZXZlbCBhbmQgaG93IG11Y2gKKyAqIGhhcyBiZWVuIHdyaXR0ZW4hCisgKi8KKyNkZWZpbmUgUENJMjI0X0ZJRk9fUk9PTV9FTVBUWQkJUENJMjI0X0ZJRk9fU0laRQorI2RlZmluZSBQQ0kyMjRfRklGT19ST09NX09ORVRPSEFMRgkoUENJMjI0X0ZJRk9fU0laRSAvIDIpCisjZGVmaW5lIFBDSTIyNF9GSUZPX1JPT01fSEFMRlRPRlVMTAkxCisjZGVmaW5lIFBDSTIyNF9GSUZPX1JPT01fRlVMTAkJMAorCisvKgorICogQ291bnRlci90aW1lciBjbG9jayBpbnB1dCBjb25maWd1cmF0aW9uIHNvdXJjZXMuCisgKi8KKyNkZWZpbmUgQ0xLX0NMSwkJMAkvKiByZXNlcnZlZCAoY2hhbm5lbC1zcGVjaWZpYyBjbG9jaykgKi8KKyNkZWZpbmUgQ0xLXzEwTUhaCTEJLyogaW50ZXJuYWwgMTAgTUh6IGNsb2NrICovCisjZGVmaW5lIENMS18xTUhaCTIJLyogaW50ZXJuYWwgMSBNSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLXzEwMEtIWgkzCS8qIGludGVybmFsIDEwMCBrSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLXzEwS0haCTQJLyogaW50ZXJuYWwgMTAga0h6IGNsb2NrICovCisjZGVmaW5lIENMS18xS0haCTUJLyogaW50ZXJuYWwgMSBrSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLX09VVE5NMQk2CS8qIG91dHB1dCBvZiBjaGFubmVsLTEgbW9kdWxvIHRvdGFsICovCisjZGVmaW5lIENMS19FWFQJCTcJLyogZXh0ZXJuYWwgY2xvY2sgKi8KKy8qIE1hY3JvIHRvIGNvbnN0cnVjdCBjbG9jayBpbnB1dCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHZhbHVlLiAqLworI2RlZmluZSBDTEtfQ09ORklHKGNoYW4sIHNyYykJKCgoKGNoYW4pICYgMykgPDwgMykgfCAoKHNyYykgJiA3KSkKKy8qIFRpbWViYXNlcyBpbiBucy4gKi8KKyNkZWZpbmUgVElNRUJBU0VfMTBNSFoJCTEwMAorI2RlZmluZSBUSU1FQkFTRV8xTUhaCQkxMDAwCisjZGVmaW5lIFRJTUVCQVNFXzEwMEtIWgkJMTAwMDAKKyNkZWZpbmUgVElNRUJBU0VfMTBLSFoJCTEwMDAwMAorI2RlZmluZSBUSU1FQkFTRV8xS0haCQkxMDAwMDAwCisKKy8qCisgKiBDb3VudGVyL3RpbWVyIGdhdGUgaW5wdXQgY29uZmlndXJhdGlvbiBzb3VyY2VzLgorICovCisjZGVmaW5lIEdBVF9WQ0MJCTAJLyogVkNDIChpLmUuIGVuYWJsZWQpICovCisjZGVmaW5lIEdBVF9HTkQJCTEJLyogR05EIChpLmUuIGRpc2FibGVkKSAqLworI2RlZmluZSBHQVRfRVhUCQkyCS8qIHJlc2VydmVkIChleHRlcm5hbCBnYXRlIGlucHV0KSAqLworI2RlZmluZSBHQVRfTk9VVE5NMgkzCS8qIGludmVydGVkIG91dHB1dCBvZiBjaGFubmVsLTIgbW9kdWxvIHRvdGFsICovCisvKiBNYWNybyB0byBjb25zdHJ1Y3QgZ2F0ZSBpbnB1dCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHZhbHVlLiAqLworI2RlZmluZSBHQVRfQ09ORklHKGNoYW4sIHNyYykJKCgoKGNoYW4pICYgMykgPDwgMykgfCAoKHNyYykgJiA3KSkKKworLyoKKyAqIFN1bW1hcnkgb2YgQ0xLX09VVE5NMSBhbmQgR0FUX05PVVROTTIgY29ubmVjdGlvbnMgZm9yIFBDSTIyNCBhbmQgUENJMjM0OgorICoKKyAqICAgICAgICAgICAgICBDaGFubmVsJ3MgICAgICAgQ2hhbm5lbCdzCisgKiAgICAgICAgICAgICAgY2xvY2sgaW5wdXQgICAgIGdhdGUgaW5wdXQKKyAqIENoYW5uZWwgICAgICBDTEtfT1VUTk0xICAgICAgR0FUX05PVVROTTIKKyAqIC0tLS0tLS0gICAgICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0KKyAqIFoyLUNUMCAgICAgICBaMi1DVDItT1VUICAgICAgL1oyLUNUMS1PVVQKKyAqIFoyLUNUMSAgICAgICBaMi1DVDAtT1VUICAgICAgL1oyLUNUMi1PVVQKKyAqIFoyLUNUMiAgICAgICBaMi1DVDEtT1VUICAgICAgL1oyLUNUMC1PVVQKKyAqLworCisvKgorICogSW50ZXJydXB0IGVuYWJsZS9zdGF0dXMgYml0cworICovCisjZGVmaW5lIFBDSTIyNF9JTlRSX0VYVAkJMHgwMQkvKiByaXNpbmcgZWRnZSBvbiBleHRlcm5hbCBpbnB1dCAqLworI2RlZmluZSBQQ0kyMjRfSU5UUl9EQUMJCTB4MDQJLyogREFDIChGSUZPKSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUENJMjI0X0lOVFJfWjJDVDEJMHgyMAkvKiByaXNpbmcgZWRnZSBvbiBaMi1DVDEgb3V0cHV0ICovCisKKyNkZWZpbmUgUENJMjI0X0lOVFJfRURHRV9CSVRTCShQQ0kyMjRfSU5UUl9FWFQgfCBQQ0kyMjRfSU5UUl9aMkNUMSkKKyNkZWZpbmUgUENJMjI0X0lOVFJfTEVWRUxfQklUUwlQQ0kyMjRfSU5UUl9EQUNGSUZPCisKKy8qCisgKiBIYW5keSBtYWNyb3MuCisgKi8KKworLyogQ29tYmluZSBvbGQgYW5kIG5ldyBiaXRzLiAqLworI2RlZmluZSBDT01CSU5FKG9sZCwgbmV3LCBtYXNrKQkoKChvbGQpICYgfihtYXNrKSkgfCAoKG5ldykgJiAobWFzaykpKQorCisvKiBBIGdlbmVyaWMgbnVsbCBmdW5jdGlvbiBwb2ludGVyIHZhbHVlLiAgKi8KKyNkZWZpbmUgTlVMTEZVTkMJMAorCisvKiBDdXJyZW50IENQVS4gIFhYWCBzaG91bGQgdGhpcyBiZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKT8gKi8KKyNkZWZpbmUgVEhJU0NQVQkJc21wX3Byb2Nlc3Nvcl9pZCgpCisKKy8qIFN0YXRlIGJpdHMgZm9yIHVzZSB3aXRoIGF0b21pYyBiaXQgb3BlcmF0aW9ucy4gKi8KKyNkZWZpbmUgQU9fQ01EX1NUQVJURUQJMAorCisvKgorICogUmFuZ2UgdGFibGVzLgorICovCisKKy8qIFRoZSBzb2Z0d2FyZSBzZWxlY3RhYmxlIGludGVybmFsIHJhbmdlcyBmb3IgUENJMjI0IChvcHRpb25bMl0gPT0gMCkuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNpMjI0X2ludGVybmFsID0geworCTgsCisJeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCQl9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaHdyYW5nZV9wY2kyMjRfaW50ZXJuYWxbOF0gPSB7CisJUENJMjI0X0RBQ0NPTl9QT0xBUl9CSSB8IFBDSTIyNF9EQUNDT05fVlJFRl8xMCwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzUsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9CSSB8IFBDSTIyNF9EQUNDT05fVlJFRl8yXzUsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9CSSB8IFBDSTIyNF9EQUNDT05fVlJFRl8xXzI1LAorCVBDSTIyNF9EQUNDT05fUE9MQVJfVU5JIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzEwLAorCVBDSTIyNF9EQUNDT05fUE9MQVJfVU5JIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzUsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfMl81LAorCVBDSTIyNF9EQUNDT05fUE9MQVJfVU5JIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzFfMjUsCit9OworCisvKiBUaGUgc29mdHdhcmUgc2VsZWN0YWJsZSBleHRlcm5hbCByYW5nZXMgZm9yIFBDSTIyNCAob3B0aW9uWzJdID09IDEpLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTIyNF9leHRlcm5hbCA9IHsKKwkyLAorCXsKKwkJCVJBTkdFX2V4dCgtMSwgMSksCS8qIGJpcG9sYXIgWy1WcmVmLCtWcmVmXSAqLworCQkJUkFOR0VfZXh0KDAsIDEpLAkvKiB1bmlwb2xhciBbMCwrVnJlZl0gKi8KKwkJfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGh3cmFuZ2VfcGNpMjI0X2V4dGVybmFsWzJdID0geworCVBDSTIyNF9EQUNDT05fUE9MQVJfQkksCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkksCit9OworCisvKiBUaGUgaGFyZHdhcmUgc2VsZWN0YWJsZSBWcmVmKjIgZXh0ZXJuYWwgcmFuZ2UgZm9yIFBDSTIzNAorICogKG9wdGlvblsyXSA9PSAxLCBvcHRpb25bMytuXSA9PSAwKS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kyMzRfZXh0MiA9IHsKKwkxLAorCXsKKwkJCVJBTkdFX2V4dCgtMiwgMiksCisJCX0KK307CisKKy8qIFRoZSBoYXJkd2FyZSBzZWxlY3RhYmxlIFZyZWYgZXh0ZXJuYWwgcmFuZ2UgZm9yIFBDSTIzNAorICogKG9wdGlvblsyXSA9PSAxLCBvcHRpb25bMytuXSA9PSAxKS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kyMzRfZXh0ID0geworCTEsCisJeworCQkJUkFOR0VfZXh0KC0xLCAxKSwKKwkJfQorfTsKKworLyogVGhpcyBzZXJ2ZXMgZm9yIGFsbCB0aGUgUENJMjM0IHJhbmdlcy4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBod3JhbmdlX3BjaTIzNFsxXSA9IHsKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJLAkvKiBiaXBvbGFyIC0gaGFyZHdhcmUgaWdub3JlcyBpdCEgKi8KK307CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMuCisgKi8KKworZW51bSBwY2kyMjRfbW9kZWwgeyBhbnlfbW9kZWwsIHBjaTIyNF9tb2RlbCwgcGNpMjM0X21vZGVsIH07CisKK3N0cnVjdCBwY2kyMjRfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgc2hvcnQgZGV2aWQ7CisJZW51bSBwY2kyMjRfbW9kZWwgbW9kZWw7CisJdW5zaWduZWQgaW50IGFvX2NoYW5zOworCXVuc2lnbmVkIGludCBhb19iaXRzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2kyMjRfYm9hcmQgcGNpMjI0X2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNpMjI0IiwKKwkgICAgICBkZXZpZDogUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMjQsCisJICAgICAgbW9kZWw6CXBjaTIyNF9tb2RlbCwKKwkgICAgICBhb19jaGFuczoxNiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaTIzNCIsCisJICAgICAgZGV2aWQ6IFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjM0LAorCSAgICAgIG1vZGVsOglwY2kyMzRfbW9kZWwsCisJICAgICAgYW9fY2hhbnM6NCwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJRFJJVkVSX05BTUUsCisJICAgICAgZGV2aWQ6IFBDSV9ERVZJQ0VfSURfSU5WQUxJRCwKKwkgICAgICBtb2RlbDoJYW55X21vZGVsLAkvKiB3aWxkY2FyZCAqLworCQl9LAorfTsKKworLyoKKyAqIFBDSSBkcml2ZXIgdGFibGUuCisgKi8KKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaTIyNF9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTIyNCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjM0LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2kyMjRfcGNpX3RhYmxlKTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChzdHJ1Y3QgcGNpMjI0X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBwY2kyMjRfcHJpdmF0ZSB7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CS8qIFBDSSBkZXZpY2UgKi8KKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqaHdyYW5nZTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTE7CisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwlzcGlubG9ja190IGFvX3NwaW5sb2NrOworCXVuc2lnbmVkIGludCAqYW9fcmVhZGJhY2s7CisJc2hvcnQgKmFvX3NjYW5fdmFsczsKKwl1bnNpZ25lZCBjaGFyICphb19zY2FuX29yZGVyOworCWludCBpbnRyX2NwdWlkOworCXNob3J0IGludHJfcnVubmluZzsKKwl1bnNpZ25lZCBzaG9ydCBkYWNjb247CisJdW5zaWduZWQgaW50IGNhY2hlZF9kaXYxOworCXVuc2lnbmVkIGludCBjYWNoZWRfZGl2MjsKKwl1bnNpZ25lZCBpbnQgYW9fc3RvcF9jb3VudDsKKwlzaG9ydCBhb19zdG9wX2NvbnRpbnVvdXM7CisJdW5zaWduZWQgc2hvcnQgYW9fZW5hYjsJLyogbWF4IDE2IGNoYW5uZWxzIHNvICdzaG9ydCcgd2lsbCBkbyAqLworCXVuc2lnbmVkIGNoYXIgaW50c2NlOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaTIyNF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY2kyMjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpMjI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FtcGxjX3BjaTIyNCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOkRSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaTIyNF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNpMjI0X2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JnBjaTIyNF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjaTIyNF9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjaTIyNF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBwY2kyMjRfYm9hcmQpLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGNpMjI0LCBwY2kyMjRfcGNpX3RhYmxlKTsKKworLyoKKyAqIENhbGxlZCBmcm9tIHRoZSAnaW5zbl93cml0ZScgZnVuY3Rpb24gdG8gcGVyZm9ybSBhIHNpbmdsZSB3cml0ZS4KKyAqLworc3RhdGljIHZvaWQKK3BjaTIyNF9hb19zZXRfZGF0YShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGNoYW4sIGludCByYW5nZSwgdW5zaWduZWQgaW50IGRhdGEpCit7CisJdW5zaWduZWQgc2hvcnQgbWFuZ2xlZDsKKworCS8qIFN0b3JlIHVubWFuZ2xlZCBkYXRhIGZvciByZWFkYmFjay4gKi8KKwlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGE7CisJLyogRW5hYmxlIHRoZSBjaGFubmVsLiAqLworCW91dHcoMSA8PCBjaGFuLCBkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDRU4pOworCS8qIFNldCByYW5nZSBhbmQgcmVzZXQgRklGTy4gKi8KKwlkZXZwcml2LT5kYWNjb24gPSBDT01CSU5FKGRldnByaXYtPmRhY2NvbiwgZGV2cHJpdi0+aHdyYW5nZVtyYW5nZV0sCisJCShQQ0kyMjRfREFDQ09OX1BPTEFSX01BU0sgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfTUFTSykpOworCW91dHcoZGV2cHJpdi0+ZGFjY29uIHwgUENJMjI0X0RBQ0NPTl9GSUZPUkVTRVQsCisJCWRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NPTik7CisJLyoKKwkgKiBNYW5nbGUgdGhlIGRhdGEuICBUaGUgaGFyZHdhcmUgZXhwZWN0czoKKwkgKiAtIGJpcG9sYXI6IDE2LWJpdCAyJ3MgY29tcGxlbWVudAorCSAqIC0gdW5pcG9sYXI6IDE2LWJpdCB1bnNpZ25lZAorCSAqLworCW1hbmdsZWQgPSAodW5zaWduZWQgc2hvcnQpZGF0YSA8PCAoMTYgLSB0aGlzYm9hcmQtPmFvX2JpdHMpOworCWlmICgoZGV2cHJpdi0+ZGFjY29uICYgUENJMjI0X0RBQ0NPTl9QT0xBUl9NQVNLKSA9PQorCQlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJKSB7CisJCW1hbmdsZWQgXj0gMHg4MDAwOworCX0KKwkvKiBXcml0ZSBtYW5nbGVkIGRhdGEgdG8gdGhlIEZJRk8uICovCisJb3V0dyhtYW5nbGVkLCBkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNEQVRBKTsKKwkvKiBUcmlnZ2VyIHRoZSBjb252ZXJzaW9uLiAqLworCWludyhkZXYtPmlvYmFzZSArIFBDSTIyNF9TT0ZUVFJJRyk7Cit9CisKKy8qCisgKiAnaW5zbl93cml0ZScgZnVuY3Rpb24gZm9yIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNpMjI0X2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuLCByYW5nZTsKKworCS8qIFVucGFjayBjaGFubmVsIGFuZCByYW5nZS4gKi8KKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBXcml0aW5nIGEgbGlzdCBvZiB2YWx1ZXMgdG8gYW4gQU8gY2hhbm5lbCBpcyBwcm9iYWJseSBub3QKKwkgKiB2ZXJ5IHVzZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJcGNpMjI0X2FvX3NldF9kYXRhKGRldiwgY2hhbiwgcmFuZ2UsIGRhdGFbaV0pOworCX0KKwlyZXR1cm4gaTsKK30KKworLyoKKyAqICdpbnNuX3JlYWQnIGZ1bmN0aW9uIGZvciBBTyBzdWJkZXZpY2UuCisgKgorICogTi5CLiBUaGUgdmFsdWUgcmVhZCB3aWxsIG5vdCBiZSB2YWxpZCBpZiB0aGUgREFDIGNoYW5uZWwgaGFzCisgKiBuZXZlciBiZWVuIHdyaXR0ZW4gc3VjY2Vzc2Z1bGx5IHNpbmNlIHRoZSBkZXZpY2Ugd2FzIGF0dGFjaGVkCisgKiBvciBzaW5jZSB0aGUgY2hhbm5lbCBoYXMgYmVlbiB1c2VkIGJ5IGFuIEFPIHN0cmVhbWluZyB3cml0ZQorICogY29tbWFuZC4KKyAqLworc3RhdGljIGludAorcGNpMjI0X2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIEp1c3QgYSB3cmFwcGVyIGZvciB0aGUgaW5saW5lIGZ1bmN0aW9uICdpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyJy4KKyAqLworc3RhdGljIHZvaWQKK3BjaTIyNF9jYXNjYWRlX25zX3RvX3RpbWVyKGludCBvc2NfYmFzZSwgdW5zaWduZWQgaW50ICpkMSwgdW5zaWduZWQgaW50ICpkMiwKKwl1bnNpZ25lZCBpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKQoreworCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIob3NjX2Jhc2UsIGQxLCBkMiwgbmFub3NlYywgcm91bmRfbW9kZSk7Cit9CisKKy8qCisgKiBLaWxscyBhIGNvbW1hbmQgcnVubmluZyBvbiB0aGUgQU8gc3ViZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCBwY2kyMjRfYW9fc3RvcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChBT19DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKSkgeworCQlyZXR1cm47CisJfQorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCS8qIEtpbGwgdGhlIGludGVycnVwdHMuICovCisJZGV2cHJpdi0+aW50c2NlID0gMDsKKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfSU5UX1NDRSk7CisJLyoKKwkgKiBJbnRlcnJ1cHQgcm91dGluZSBtYXkgb3IgbWF5IG5vdCBiZSBydW5uaW5nLiAgV2UgbWF5IG9yIG1heSBub3QKKwkgKiBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCByb3V0aW5lIChkaXJlY3RseSBvcgorCSAqIGluZGlyZWN0bHkgdmlhIGEgY29tZWRpX2V2ZW50cygpIGNhbGxiYWNrIHJvdXRpbmUpLiAgSXQncyBoaWdobHkKKwkgKiB1bmxpa2VseSB0aGF0IHdlJ3ZlIGJlZW4gY2FsbGVkIGZyb20gc29tZSBvdGhlciBpbnRlcnJ1cHQgcm91dGluZQorCSAqIGJ1dCB3aG8ga25vd3Mgd2hhdCBzdHJhbmdlIHRoaW5ncyBjb2RlcnMgZ2V0IHVwIHRvIQorCSAqCisJICogSWYgdGhlIGludGVycnVwdCByb3V0aW5lIGlzIGN1cnJlbnRseSBydW5uaW5nLCB3YWl0IGZvciBpdCB0bworCSAqIGZpbmlzaCwgdW5sZXNzIHdlIGFwcGVhciB0byBoYXZlIGJlZW4gY2FsbGVkIHZpYSB0aGUgaW50ZXJydXB0CisJICogcm91dGluZS4KKwkgKi8KKwl3aGlsZSAoZGV2cHJpdi0+aW50cl9ydW5uaW5nICYmIGRldnByaXYtPmludHJfY3B1aWQgIT0gVEhJU0NQVSkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkvKiBSZWNvbmZpZ3VyZSBEQUMgZm9yIGluc25fd3JpdGUgdXNhZ2UuICovCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDRU4pOwkvKiBEaXNhYmxlIGNoYW5uZWxzLiAqLworCWRldnByaXYtPmRhY2NvbiA9IENPTUJJTkUoZGV2cHJpdi0+ZGFjY29uLAorCQlQQ0kyMjRfREFDQ09OX1RSSUdfU1cgfCBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0VNUFRZLAorCQlQQ0kyMjRfREFDQ09OX1RSSUdfTUFTSyB8IFBDSTIyNF9EQUNDT05fRklGT0lOVFJfTUFTSyk7CisJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMjRfREFDQ09OX0ZJRk9SRVNFVCwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKK30KKworLyoKKyAqIEhhbmRsZXMgc3RhcnQgb2YgYWNxdWlzaXRpb24gZm9yIHRoZSBBTyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIHBjaTIyNF9hb19zdGFydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2V0X2JpdChBT19DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKTsKKwlpZiAoIWRldnByaXYtPmFvX3N0b3BfY29udGludW91cyAmJiBkZXZwcml2LT5hb19zdG9wX2NvdW50ID09IDApIHsKKwkJLyogQW4gZW1wdHkgYWNxdWlzaXRpb24hICovCisJCXBjaTIyNF9hb19zdG9wKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIGludGVycnVwdHMuICovCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJCWRldnByaXYtPmludHNjZSA9IFBDSTIyNF9JTlRSX0VYVCB8IFBDSTIyNF9JTlRSX0RBQzsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmludHNjZSA9IFBDSTIyNF9JTlRSX0RBQzsKKwkJfQorCQlvdXRiKGRldnByaXYtPmludHNjZSwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9JTlRfU0NFKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogSGFuZGxlcyBpbnRlcnJ1cHRzIGZyb20gdGhlIERBQyBGSUZPLgorICovCitzdGF0aWMgdm9pZCBwY2kyMjRfYW9faGFuZGxlX2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IG51bV9zY2FuczsKKwl1bnNpZ25lZCBpbnQgcm9vbTsKKwl1bnNpZ25lZCBzaG9ydCBkYWNzdGF0OworCXVuc2lnbmVkIGludCBpLCBuOworCXVuc2lnbmVkIGludCBieXRlc19wZXJfc2NhbjsKKworCWlmIChjbWQtPmNoYW5saXN0X2xlbikgeworCQlieXRlc19wZXJfc2NhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuICogc2l6ZW9mKHNob3J0KTsKKwl9IGVsc2UgeworCQkvKiBTaG91bGRuJ3QgZ2V0IGhlcmUhICovCisJCWJ5dGVzX3Blcl9zY2FuID0gc2l6ZW9mKHNob3J0KTsKKwl9CisJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBzY2FucyBhdmFpbGFibGUgaW4gYnVmZmVyLiAqLworCW51bV9zY2FucyA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzLT5hc3luYykgLyBieXRlc19wZXJfc2NhbjsKKwlpZiAoIWRldnByaXYtPmFvX3N0b3BfY29udGludW91cykgeworCQkvKiBGaXhlZCBudW1iZXIgb2Ygc2NhbnMuICovCisJCWlmIChudW1fc2NhbnMgPiBkZXZwcml2LT5hb19zdG9wX2NvdW50KSB7CisJCQludW1fc2NhbnMgPSBkZXZwcml2LT5hb19zdG9wX2NvdW50OworCQl9CisJfQorCisJLyogRGV0ZXJtaW5lIGhvdyBtdWNoIHJvb20gaXMgaW4gdGhlIEZJRk8gKGluIHNhbXBsZXMpLiAqLworCWRhY3N0YXQgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKwlzd2l0Y2ggKGRhY3N0YXQgJiBQQ0kyMjRfREFDQ09OX0ZJRk9GTF9NQVNLKSB7CisJY2FzZSBQQ0kyMjRfREFDQ09OX0ZJRk9GTF9FTVBUWToKKwkJcm9vbSA9IFBDSTIyNF9GSUZPX1JPT01fRU1QVFk7CisJCWlmICghZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzCisJCQkmJiBkZXZwcml2LT5hb19zdG9wX2NvdW50ID09IDApIHsKKwkJCS8qIEZJRk8gZW1wdHkgYXQgZW5kIG9mIGNvdW50ZWQgYWNxdWlzaXRpb24uICovCisJCQlwY2kyMjRfYW9fc3RvcChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0kyMjRfREFDQ09OX0ZJRk9GTF9PTkVUT0hBTEY6CisJCXJvb20gPSBQQ0kyMjRfRklGT19ST09NX09ORVRPSEFMRjsKKwkJYnJlYWs7CisJY2FzZSBQQ0kyMjRfREFDQ09OX0ZJRk9GTF9IQUxGVE9GVUxMOgorCQlyb29tID0gUENJMjI0X0ZJRk9fUk9PTV9IQUxGVE9GVUxMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyb29tID0gUENJMjI0X0ZJRk9fUk9PTV9GVUxMOworCQlicmVhazsKKwl9CisJaWYgKHJvb20gPj0gUENJMjI0X0ZJRk9fUk9PTV9PTkVUT0hBTEYpIHsKKwkJLyogRklGTyBpcyBsZXNzIHRoYW4gaGFsZi1mdWxsLiAqLworCQlpZiAobnVtX3NjYW5zID09IDApIHsKKwkJCS8qIE5vdGhpbmcgbGVmdCB0byBwdXQgaW4gdGhlIEZJRk8uICovCisJCQlwY2kyMjRfYW9fc3RvcChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJCQlydF9wcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiAiCisJCQkJIkFPIGJ1ZmZlciB1bmRlcnJ1blxuIiwgZGV2LT5taW5vcik7CisJCX0KKwl9CisJLyogRGV0ZXJtaW5lIGhvdyBtYW55IG5ldyBzY2FucyBjYW4gYmUgcHV0IGluIHRoZSBGSUZPLiAqLworCWlmIChjbWQtPmNoYW5saXN0X2xlbikgeworCQlyb29tIC89IGNtZC0+Y2hhbmxpc3RfbGVuOworCX0KKwkvKiBEZXRlcm1pbmUgaG93IG1hbnkgc2NhbnMgdG8gcHJvY2Vzcy4gKi8KKwlpZiAobnVtX3NjYW5zID4gcm9vbSkgeworCQludW1fc2NhbnMgPSByb29tOworCX0KKwkvKiBQcm9jZXNzIHNjYW5zLiAqLworCWZvciAobiA9IDA7IG4gPCBudW1fc2NhbnM7IG4rKykgeworCQljZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzLCAmZGV2cHJpdi0+YW9fc2Nhbl92YWxzWzBdLAorCQkJYnl0ZXNfcGVyX3NjYW4pOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJb3V0dyhkZXZwcml2LT5hb19zY2FuX3ZhbHNbZGV2cHJpdi0+CisJCQkJCWFvX3NjYW5fb3JkZXJbaV1dLAorCQkJCWRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0RBVEEpOworCQl9CisJfQorCWlmICghZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzKSB7CisJCWRldnByaXYtPmFvX3N0b3BfY291bnQgLT0gbnVtX3NjYW5zOworCQlpZiAoZGV2cHJpdi0+YW9fc3RvcF9jb3VudCA9PSAwKSB7CisJCQkvKgorCQkJICogQ2hhbmdlIEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgdG8gd2FpdAorCQkJICogdW50aWwgRklGTyBpcyBlbXB0eS4KKwkJCSAqLworCQkJZGV2cHJpdi0+ZGFjY29uID0gQ09NQklORShkZXZwcml2LT5kYWNjb24sCisJCQkJUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9FTVBUWSwKKwkJCQlQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX01BU0spOworCQkJb3V0dyhkZXZwcml2LT5kYWNjb24sCisJCQkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKwkJfQorCX0KKwlpZiAoKGRldnByaXYtPmRhY2NvbiAmIFBDSTIyNF9EQUNDT05fVFJJR19NQVNLKSA9PQorCQlQQ0kyMjRfREFDQ09OX1RSSUdfTk9ORSkgeworCQl1bnNpZ25lZCBzaG9ydCB0cmlnOworCisJCS8qCisJCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgREFDIEZJRk8gaW50ZXJydXB0IGF0IHRoZQorCQkgKiBzdGFydCBvZiB0aGUgYWNxdWlzaXRpb24uICBUaGUgREFDJ3Mgc2NhbiB0cmlnZ2VyCisJCSAqIGhhcyBiZWVuIHNldCB0byAnbm9uZScgdXAgdW50aWwgbm93LgorCQkgKgorCQkgKiBOb3cgdGhhdCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIEZJRk8sIHRoZQorCQkgKiBEQUMncyBzY2FuIHRyaWdnZXIgc291cmNlIGNhbiBiZSBzZXQgdG8gdGhlCisJCSAqIGNvcnJlY3QgdmFsdWUuCisJCSAqCisJCSAqIEJVRzogVGhlIGZpcnN0IHNjYW4gd2lsbCBiZSB0cmlnZ2VyZWQgaW1tZWRpYXRlbHkKKwkJICogaWYgdGhlIHNjYW4gdHJpZ2dlciBzb3VyY2UgaXMgYXQgbG9naWMgbGV2ZWwgMS4KKwkJICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJCXRyaWcgPSBQQ0kyMjRfREFDQ09OX1RSSUdfWjJDVDA7CisJCX0gZWxzZSB7CisJCQkvKiBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUICovCisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkgeworCQkJCXRyaWcgPSBQQ0kyMjRfREFDQ09OX1RSSUdfRVhUTjsKKwkJCX0gZWxzZSB7CisJCQkJdHJpZyA9IFBDSTIyNF9EQUNDT05fVFJJR19FWFRQOworCQkJfQorCQl9CisJCWRldnByaXYtPmRhY2NvbiA9IENPTUJJTkUoZGV2cHJpdi0+ZGFjY29uLCB0cmlnLAorCQkJUENJMjI0X0RBQ0NPTl9UUklHX01BU0spOworCQlvdXR3KGRldnByaXYtPmRhY2NvbiwgZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKwl9CisJaWYgKHMtPmFzeW5jLT5ldmVudHMpIHsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorfQorCisvKgorICogSW50ZXJuYWwgdHJpZ2dlciBmdW5jdGlvbiB0byBzdGFydCBhY3F1aXNpdGlvbiBvbiBBTyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK3BjaTIyNF9hb19pbnR0cmlnX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTExGVU5DOworCXBjaTIyNF9hb19zdGFydChkZXYsIHMpOworCisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgTUFYX1NDQU5fUEVSSU9ECQkweEZGRkZGRkZGVQorI2RlZmluZSBNSU5fU0NBTl9QRVJJT0QJCTI1MDAKKyNkZWZpbmUgQ09OVkVSVF9QRVJJT0QJCTYyNQorCisvKgorICogJ2RvX2NtZHRlc3QnIGZ1bmN0aW9uIGZvciBBTyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK3BjaTIyNF9hb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBTdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZC4gKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfSU5UIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUIHwgVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19FWFQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogU3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5CisJICogY29tcGF0aWJsZS4gKi8KKworCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCisJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoY21kLT5zY2FuX2JlZ2luX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgJiAoY21kLT5jb252ZXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjICYgKGNtZC0+c2Nhbl9lbmRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zdG9wX3NyYyAmIChjbWQtPnN0b3Bfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCisJLyogVGhlcmUncyBvbmx5IG9uZSBleHRlcm5hbCB0cmlnZ2VyIHNpZ25hbCAod2hpY2ggbWFrZXMgdGhlc2UKKwkgKiB0ZXN0cyBlYXNpZXIpLiAgT25seSBvbmUgdGhpbmcgY2FuIHVzZSBpdC4gKi8KKwl0bXAgPSAwOworCWlmIChjbWQtPnN0YXJ0X3NyYyAmIFRSSUdfRVhUKQorCQl0bXArKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAmIFRSSUdfRVhUKQorCQl0bXArKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAmIFRSSUdfRVhUKQorCQl0bXArKzsKKwlpZiAodG1wID4gMSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIFN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUuICovCisKKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0lOVDoKKwkJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIEZvcmNlIHRvIGV4dGVybmFsIHRyaWdnZXIgMC4gKi8KKwkJaWYgKChjbWQtPnN0YXJ0X2FyZyAmIH5DUl9GTEFHU19NQVNLKSAhPSAwKSB7CisJCQljbWQtPnN0YXJ0X2FyZyA9IENPTUJJTkUoY21kLT5zdGFydF9hcmcsIDAsCisJCQkJfkNSX0ZMQUdTX01BU0spOworCQkJZXJyKys7CisJCX0KKwkJLyogVGhlIG9ubHkgZmxhZyBhbGxvd2VkIGlzIENSX0VER0UsIHdoaWNoIGlzIGlnbm9yZWQuICovCisJCWlmICgoY21kLT5zdGFydF9hcmcgJiBDUl9GTEFHU19NQVNLICYgfkNSX0VER0UpICE9IDApIHsKKwkJCWNtZC0+c3RhcnRfYXJnID0gQ09NQklORShjbWQtPnN0YXJ0X2FyZywgMCwKKwkJCQlDUl9GTEFHU19NQVNLICYgfkNSX0VER0UpOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IE1BWF9TQ0FOX1BFUklPRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TQ0FOX1BFUklPRDsKKwkJCWVycisrOworCQl9CisJCXRtcCA9IGNtZC0+Y2hhbmxpc3RfbGVuICogQ09OVkVSVF9QRVJJT0Q7CisJCWlmICh0bXAgPCBNSU5fU0NBTl9QRVJJT0QpIHsKKwkJCXRtcCA9IE1JTl9TQ0FOX1BFUklPRDsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IHRtcCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHRtcDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIEZvcmNlIHRvIGV4dGVybmFsIHRyaWdnZXIgMC4gKi8KKwkJaWYgKChjbWQtPnNjYW5fYmVnaW5fYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBDT01CSU5FKGNtZC0+c2Nhbl9iZWdpbl9hcmcsIDAsCisJCQkJfkNSX0ZMQUdTX01BU0spOworCQkJZXJyKys7CisJCX0KKwkJLyogT25seSBhbGxvdyBmbGFncyBDUl9FREdFIGFuZCBDUl9JTlZFUlQuICBJZ25vcmUgQ1JfRURHRS4gKi8KKwkJaWYgKChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfRkxBR1NfTUFTSyAmCisJCQkJfihDUl9FREdFIHwgQ1JfSU5WRVJUKSkgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IENPTUJJTkUoY21kLT5zY2FuX2JlZ2luX2FyZywgMCwKKwkJCQlDUl9GTEFHU19NQVNLICYgfihDUl9FREdFIHwgQ1JfSU5WRVJUKSk7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKiBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XICovCisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5zY2FuX2VuZF9hcmcgPT0gVFJJR19DT1VOVCAqLworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCS8qIEFueSBjb3VudCBhbGxvd2VkLiAqLworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQkvKiBGb3JjZSB0byBleHRlcm5hbCB0cmlnZ2VyIDAuICovCisJCWlmICgoY21kLT5zdG9wX2FyZyAmIH5DUl9GTEFHU19NQVNLKSAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gQ09NQklORShjbWQtPnN0b3BfYXJnLCAwLAorCQkJCX5DUl9GTEFHU19NQVNLKTsKKwkJCWVycisrOworCQl9CisJCS8qIFRoZSBvbmx5IGZsYWcgYWxsb3dlZCBpcyBDUl9FREdFLCB3aGljaCBpcyBpZ25vcmVkLiAqLworCQlpZiAoKGNtZC0+c3RvcF9hcmcgJiBDUl9GTEFHU19NQVNLICYgfkNSX0VER0UpICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSBDT01CSU5FKGNtZC0+c3RvcF9hcmcsIDAsCisJCQkJQ1JfRkxBR1NfTUFTSyAmIH5DUl9FREdFKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIFN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMuICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyLCByb3VuZDsKKwkJaW50IHJvdW5kX21vZGUgPSBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLOworCisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCS8qIENoZWNrIHdoZXRoZXIgdG8gdXNlIGEgc2luZ2xlIHRpbWVyLiAqLworCQlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCWRlZmF1bHQ6CisJCQlyb3VuZCA9IFRJTUVCQVNFXzEwTUhaIC8gMjsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJCXJvdW5kID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQlyb3VuZCA9IFRJTUVCQVNFXzEwTUhaIC0gMTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEJlIGNhcmVmdWwgdG8gYXZvaWQgb3ZlcmZsb3chICovCisJCWRpdjIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gVElNRUJBU0VfMTBNSFo7CisJCWRpdjIgKz0gKHJvdW5kICsgY21kLT5zY2FuX2JlZ2luX2FyZyAlIFRJTUVCQVNFXzEwTUhaKSAvCisJCQlUSU1FQkFTRV8xME1IWjsKKwkJaWYgKGRpdjIgPD0gMHgxMDAwMCkgeworCQkJLyogQSBzaW5nbGUgdGltZXIgd2lsbCBzdWZmaWNlLiAqLworCQkJaWYgKGRpdjIgPCAyKQorCQkJCWRpdjIgPSAyOworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IGRpdjIgKiBUSU1FQkFTRV8xME1IWjsKKwkJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgZGl2MiB8fAorCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBUSU1FQkFTRV8xME1IWikgeworCQkJCS8qIE92ZXJmbG93ISAqLworCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBNQVhfU0NBTl9QRVJJT0Q7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBVc2UgdHdvIHRpbWVycy4gKi8KKwkJCWRpdjEgPSBkZXZwcml2LT5jYWNoZWRfZGl2MTsKKwkJCWRpdjIgPSBkZXZwcml2LT5jYWNoZWRfZGl2MjsKKwkJCXBjaTIyNF9jYXNjYWRlX25zX3RvX3RpbWVyKFRJTUVCQVNFXzEwTUhaLCAmZGl2MSwgJmRpdjIsCisJCQkJJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIHJvdW5kX21vZGUpOworCQkJZGV2cHJpdi0+Y2FjaGVkX2RpdjEgPSBkaXYxOworCQkJZGV2cHJpdi0+Y2FjaGVkX2RpdjIgPSBkaXYyOworCQl9CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0LiAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gMCkpIHsKKwkJdW5zaWduZWQgaW50IHJhbmdlOworCQllbnVtIHsgcmFuZ2VfZXJyID0gMSwgZHVwY2hhbl9lcnIgPSAyLCB9OworCQl1bnNpZ25lZCBlcnJvcnM7CisJCXVuc2lnbmVkIGludCBuOworCQl1bnNpZ25lZCBpbnQgY2g7CisKKwkJLyoKKwkJICogQ2hlY2sgYWxsIGNoYW5uZWxzIGhhdmUgdGhlIHNhbWUgcmFuZ2UgaW5kZXguICBEb24ndCBjYXJlCisJCSAqIGFib3V0IGFuYWxvZ3VlIHJlZmVyZW5jZSwgYXMgd2UgY2FuJ3QgY29uZmlndXJlIGl0LgorCQkgKgorCQkgKiBDaGVjayB0aGUgbGlzdCBoYXMgbm8gZHVwbGljYXRlIGNoYW5uZWxzLgorCQkgKi8KKwkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJZXJyb3JzID0gMDsKKwkJdG1wID0gMDsKKwkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCWNoID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W25dKTsKKwkJCWlmICh0bXAgJiAoMVUgPDwgY2gpKSB7CisJCQkJZXJyb3JzIHw9IGR1cGNoYW5fZXJyOworCQkJfQorCQkJdG1wIHw9ICgxVSA8PCBjaCk7CisJCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtuXSkgIT0gcmFuZ2UpIHsKKwkJCQllcnJvcnMgfD0gcmFuZ2VfZXJyOworCQkJfQorCQl9CisJCWlmIChlcnJvcnMpIHsKKwkJCWlmIChlcnJvcnMgJiBkdXBjaGFuX2VycikgeworCQkJCURQUklOVEsoImNvbWVkaSVkOiAiIERSSVZFUl9OQU1FCisJCQkJCSI6IGFvX2NtZHRlc3Q6ICIKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBjb250YWluIG5vICIKKwkJCQkJImR1cGxpY2F0ZSBjaGFubmVsc1xuIiwgZGV2LT5taW5vcik7CisJCQl9CisJCQlpZiAoZXJyb3JzICYgcmFuZ2VfZXJyKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6ICIgRFJJVkVSX05BTUUKKwkJCQkJIjogYW9fY21kdGVzdDogIgorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlICIKKwkJCQkJInRoZSBzYW1lIHJhbmdlIGluZGV4XG4iLCBkZXYtPm1pbm9yKTsKKwkJCX0KKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICdkb19jbWQnIGZ1bmN0aW9uIGZvciBBTyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgcGNpMjI0X2FvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgcmFuZ2U7CisJdW5zaWduZWQgaW50IGksIGo7CisJdW5zaWduZWQgaW50IGNoOworCXVuc2lnbmVkIGludCByYW5rOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBDYW5ub3QgaGFuZGxlIG51bGwvZW1wdHkgY2hhbmxpc3QuICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgPT0gTlVMTCB8fCBjbWQtPmNoYW5saXN0X2xlbiA9PSAwKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIERldGVybWluZSB3aGljaCBjaGFubmVscyBhcmUgZW5hYmxlZCBhbmQgdGhlaXIgbG9hZCBvcmRlci4gICovCisJZGV2cHJpdi0+YW9fZW5hYiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQljaCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCWRldnByaXYtPmFvX2VuYWIgfD0gMVUgPDwgY2g7CisJCXJhbmsgPSAwOworCQlmb3IgKGogPSAwOyBqIDwgY21kLT5jaGFubGlzdF9sZW47IGorKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtqXSkgPCBjaCkgeworCQkJCXJhbmsrKzsKKwkJCX0KKwkJfQorCQlkZXZwcml2LT5hb19zY2FuX29yZGVyW3JhbmtdID0gaTsKKwl9CisKKwkvKiBTZXQgZW5hYmxlZCBjaGFubmVscy4gKi8KKwlvdXR3KGRldnByaXYtPmFvX2VuYWIsIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NFTik7CisKKwkvKiBEZXRlcm1pbmUgcmFuZ2UgYW5kIHBvbGFyaXR5LiAgQWxsIGNoYW5uZWxzIHRoZSBzYW1lLiAgKi8KKwlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCisJLyoKKwkgKiBTZXQgREFDIHJhbmdlIGFuZCBwb2xhcml0eS4KKwkgKiBTZXQgREFDIHNjYW4gdHJpZ2dlciBzb3VyY2UgdG8gJ25vbmUnLgorCSAqIFNldCBEQUMgRklGTyBpbnRlcnJ1cHQgdHJpZ2dlciBsZXZlbCB0byAnbm90IGhhbGYgZnVsbCcuCisJICogUmVzZXQgREFDIEZJRk8uCisJICoKKwkgKiBOLkIuIERBQyBGSUZPIGludGVycnVwdHMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZC4KKwkgKi8KKwlkZXZwcml2LT5kYWNjb24gPSBDT01CSU5FKGRldnByaXYtPmRhY2NvbiwKKwkJKGRldnByaXYtPmh3cmFuZ2VbcmFuZ2VdIHwgUENJMjI0X0RBQ0NPTl9UUklHX05PTkUgfAorCQkJUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9OSEFMRiksCisJCShQQ0kyMjRfREFDQ09OX1BPTEFSX01BU0sgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfTUFTSyB8CisJCQlQQ0kyMjRfREFDQ09OX1RSSUdfTUFTSyB8IFBDSTIyNF9EQUNDT05fRklGT0lOVFJfTUFTSykpOworCW91dHcoZGV2cHJpdi0+ZGFjY29uIHwgUENJMjI0X0RBQ0NPTl9GSUZPUkVTRVQsCisJCWRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NPTik7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyLCByb3VuZDsKKwkJdW5zaWduZWQgaW50IG5zID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJaW50IHJvdW5kX21vZGUgPSBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLOworCisJCS8qIENoZWNrIHdoZXRoZXIgdG8gdXNlIGEgc2luZ2xlIHRpbWVyLiAqLworCQlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCWRlZmF1bHQ6CisJCQlyb3VuZCA9IFRJTUVCQVNFXzEwTUhaIC8gMjsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJCXJvdW5kID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQlyb3VuZCA9IFRJTUVCQVNFXzEwTUhaIC0gMTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEJlIGNhcmVmdWwgdG8gYXZvaWQgb3ZlcmZsb3chICovCisJCWRpdjIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gVElNRUJBU0VfMTBNSFo7CisJCWRpdjIgKz0gKHJvdW5kICsgY21kLT5zY2FuX2JlZ2luX2FyZyAlIFRJTUVCQVNFXzEwTUhaKSAvCisJCQlUSU1FQkFTRV8xME1IWjsKKwkJaWYgKGRpdjIgPD0gMHgxMDAwMCkgeworCQkJLyogQSBzaW5nbGUgdGltZXIgd2lsbCBzdWZmaWNlLiAqLworCQkJaWYgKGRpdjIgPCAyKQorCQkJCWRpdjIgPSAyOworCQkJZGl2MiAmPSAweGZmZmY7CisJCQlkaXYxID0gMTsJLyogRmxhZyB0aGF0IHNpbmdsZSB0aW1lciB0byBiZSB1c2VkLiAqLworCQl9IGVsc2UgeworCQkJLyogVXNlIHR3byB0aW1lcnMuICovCisJCQlkaXYxID0gZGV2cHJpdi0+Y2FjaGVkX2RpdjE7CisJCQlkaXYyID0gZGV2cHJpdi0+Y2FjaGVkX2RpdjI7CisJCQlwY2kyMjRfY2FzY2FkZV9uc190b190aW1lcihUSU1FQkFTRV8xME1IWiwgJmRpdjEsICZkaXYyLAorCQkJCSZucywgcm91bmRfbW9kZSk7CisJCX0KKworCQkvKgorCQkgKiBUaGUgb3V0cHV0IG9mIHRpbWVyIFoyLTAgd2lsbCBiZSB1c2VkIGFzIHRoZSBzY2FuIHRyaWdnZXIKKwkJICogc291cmNlLgorCQkgKi8KKwkJLyogTWFrZSBzdXJlIFoyLTAgaXMgZ2F0ZWQgb24uICAqLworCQlvdXRiKEdBVF9DT05GSUcoMCwgR0FUX1ZDQyksCisJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X1pHQVRfU0NFKTsKKwkJaWYgKGRpdjEgPT0gMSkgeworCQkJLyogTm90IGNhc2NhZGluZy4gIFoyLTAgbmVlZHMgMTAgTUh6IGNsb2NrLiAqLworCQkJb3V0YihDTEtfQ09ORklHKDAsIENMS18xME1IWiksCisJCQkJZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aQ0xLX1NDRSk7CisJCX0gZWxzZSB7CisJCQkvKiBDYXNjYWRpbmcgd2l0aCBaMi0yLiAqLworCQkJLyogTWFrZSBzdXJlIFoyLTIgaXMgZ2F0ZWQgb24uICAqLworCQkJb3V0YihHQVRfQ09ORklHKDIsIEdBVF9WQ0MpLAorCQkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkdBVF9TQ0UpOworCQkJLyogWjItMiBuZWVkcyAxMCBNSHogY2xvY2suICovCisJCQlvdXRiKENMS19DT05GSUcoMiwgQ0xLXzEwTUhaKSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X1pDTEtfU0NFKTsKKwkJCS8qIExvYWQgWjItMiBtb2RlICgyKSBhbmQgY291bnRlciAoZGl2MSkuICovCisJCQlpODI1NF9sb2FkKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWjJfQ1QwLCAwLAorCQkJCTIsIGRpdjEsIDIpOworCQkJLyogWjItMCBpcyBjbG9ja2VkIGZyb20gWjItMidzIG91dHB1dC4gKi8KKwkJCW91dGIoQ0xLX0NPTkZJRygwLCBDTEtfT1VUTk0xKSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X1pDTEtfU0NFKTsKKwkJfQorCQkvKiBMb2FkIFoyLTAgbW9kZSAoMikgYW5kIGNvdW50ZXIgKGRpdjIpLiAqLworCQlpODI1NF9sb2FkKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWjJfQ1QwLCAwLCAwLCBkaXYyLCAyKTsKKwl9CisKKwkvKgorCSAqIFNvcnQgb3V0IGVuZCBvZiBhY3F1aXNpdGlvbi4KKwkgKi8KKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCS8qIEZpeGVkIG51bWJlciBvZiBzY2Fucy4gICovCisJCWRldnByaXYtPmFvX3N0b3BfY29udGludW91cyA9IDA7CisJCWRldnByaXYtPmFvX3N0b3BfY291bnQgPSBjbWQtPnN0b3BfYXJnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBDb250aW51b3VzIHNjYW5zLiAqLworCQlkZXZwcml2LT5hb19zdG9wX2NvbnRpbnVvdXMgPSAxOworCQlkZXZwcml2LT5hb19zdG9wX2NvdW50ID0gMDsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBTb3J0IG91dCBzdGFydCBvZiBhY3F1aXNpdGlvbi4KKwkgKi8KKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0lOVDoKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQlzLT5hc3luYy0+aW50dHJpZyA9ICZwY2kyMjRfYW9faW50dHJpZ19zdGFydDsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIEVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgdHJpZ2dlciB0byBzdGFydCBhY3F1aXNpdGlvbi4gKi8KKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQlkZXZwcml2LT5pbnRzY2UgfD0gUENJMjI0X0lOVFJfRVhUOworCQlvdXRiKGRldnByaXYtPmludHNjZSwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9JTlRfU0NFKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogJ2NhbmNlbCcgZnVuY3Rpb24gZm9yIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBwY2kyMjRfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcGNpMjI0X2FvX3N0b3AoZGV2LCBzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICdtdW5nZScgZGF0YSBmb3IgQU8gY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQKK3BjaTIyNF9hb19tdW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB2b2lkICpkYXRhLAorCXVuc2lnbmVkIGludCBudW1fYnl0ZXMsIHVuc2lnbmVkIGludCBjaGFuX2luZGV4KQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc2hvcnQgKmFycmF5ID0gZGF0YTsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gbnVtX2J5dGVzIC8gc2l6ZW9mKCphcnJheSk7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgc2hpZnQ7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBUaGUgaGFyZHdhcmUgZXhwZWN0cyAxNi1iaXQgbnVtYmVycy4gKi8KKwlzaGlmdCA9IDE2IC0gdGhpc2JvYXJkLT5hb19iaXRzOworCS8qIENoYW5uZWxzIHdpbGwgYmUgYWxsIGJpcG9sYXIgb3IgYWxsIHVuaXBvbGFyLiAqLworCWlmICgoZGV2cHJpdi0+aHdyYW5nZVtDUl9SQU5HRShhc3luYy0+Y21kLmNoYW5saXN0WzBdKV0gJgorCQkJUENJMjI0X0RBQ0NPTl9QT0xBUl9NQVNLKSA9PSBQQ0kyMjRfREFDQ09OX1BPTEFSX1VOSSkgeworCQkvKiBVbmlwb2xhciAqLworCQlvZmZzZXQgPSAwOworCX0gZWxzZSB7CisJCS8qIEJpcG9sYXIgKi8KKwkJb2Zmc2V0ID0gMzI3Njg7CisJfQorCS8qIE11bmdlIHRoZSBkYXRhLiAqLworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlhcnJheVtpXSA9IChhcnJheVtpXSA8PCBzaGlmdCkgLSBvZmZzZXQ7CisJfQorfQorCisvKgorICogSW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwY2kyMjRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSAmZGV2LT5zdWJkZXZpY2VzWzBdOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJdW5zaWduZWQgY2hhciBpbnRzdGF0LCB2YWxpZF9pbnRzdGF0OworCXVuc2lnbmVkIGNoYXIgY3VyZW5hYjsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW50c3RhdCA9IGluYihkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpICYgMHgzRjsKKwlpZiAoaW50c3RhdCkgeworCQlyZXR2YWwgPSAxOworCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCXZhbGlkX2ludHN0YXQgPSBkZXZwcml2LT5pbnRzY2UgJiBpbnRzdGF0OworCQkvKiBUZW1wb3JhcmlseSBkaXNhYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLworCQljdXJlbmFiID0gZGV2cHJpdi0+aW50c2NlICYgfmludHN0YXQ7CisJCW91dGIoY3VyZW5hYiwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9JTlRfU0NFKTsKKwkJZGV2cHJpdi0+aW50cl9ydW5uaW5nID0gMTsKKwkJZGV2cHJpdi0+aW50cl9jcHVpZCA9IFRISVNDUFU7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQlpZiAodmFsaWRfaW50c3RhdCAhPSAwKSB7CisJCQljbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwkJCWlmICh2YWxpZF9pbnRzdGF0ICYgUENJMjI0X0lOVFJfRVhUKSB7CisJCQkJZGV2cHJpdi0+aW50c2NlICY9IH5QQ0kyMjRfSU5UUl9FWFQ7CisJCQkJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCQkJCXBjaTIyNF9hb19zdGFydChkZXYsIHMpOworCQkJCX0gZWxzZSBpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQkJCQlwY2kyMjRfYW9fc3RvcChkZXYsIHMpOworCQkJCX0KKwkJCX0KKwkJCWlmICh2YWxpZF9pbnRzdGF0ICYgUENJMjI0X0lOVFJfREFDKSB7CisJCQkJcGNpMjI0X2FvX2hhbmRsZV9maWZvKGRldiwgcyk7CisJCQl9CisJCX0KKwkJLyogUmVlbmFibGUgaW50ZXJydXB0IHNvdXJjZXMuICovCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJaWYgKGN1cmVuYWIgIT0gZGV2cHJpdi0+aW50c2NlKSB7CisJCQlvdXRiKGRldnByaXYtPmludHNjZSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCQl9CisJCWRldnByaXYtPmludHJfcnVubmluZyA9IDA7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gSVJRX1JFVFZBTChyZXR2YWwpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgYSBQQ0kgZGV2aWNlIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgYm9hcmQgbmFtZSwKKyAqIGJ1cyBhbmQgc2xvdC4KKyAqLworc3RhdGljIGludAorcGNpMjI0X2ZpbmRfcGNpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwlzdHJ1Y3QgcGNpX2RldiAqKnBjaV9kZXZfcCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisKKwkqcGNpX2Rldl9wID0gTlVMTDsKKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UuICovCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9BTllfSUQsCisJCQlwY2lfZGV2KSkgeworCQkvKiBJZiBidXMvc2xvdCBzcGVjaWZpZWQsIGNoZWNrIHRoZW0uICovCisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBwY2lfZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IHNsb3QgIT0gUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0aGlzYm9hcmQtPm1vZGVsID09IGFueV9tb2RlbCkgeworCQkJLyogTWF0Y2ggYW55IHN1cHBvcnRlZCBtb2RlbC4gKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwY2kyMjRfYm9hcmRzKTsgaSsrKSB7CisJCQkJaWYgKHBjaV9kZXYtPmRldmljZSA9PSBwY2kyMjRfYm9hcmRzW2ldLmRldmlkKSB7CisJCQkJCS8qIENoYW5nZSBib2FyZF9wdHIgdG8gbWF0Y2hlZCBib2FyZC4gKi8KKwkJCQkJZGV2LT5ib2FyZF9wdHIgPSAmcGNpMjI0X2JvYXJkc1tpXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gQVJSQVlfU0laRShwY2kyMjRfYm9hcmRzKSkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCS8qIE1hdGNoIHNwZWNpZmljIG1vZGVsIG5hbWUuICovCisJCQlpZiAodGhpc2JvYXJkLT5kZXZpZCAhPSBwY2lfZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBGb3VuZCBhIG1hdGNoLiAqLworCQkqcGNpX2Rldl9wID0gcGNpX2RldjsKKwkJcmV0dXJuIDA7CisJfQorCS8qIE5vIG1hdGNoIGZvdW5kLiAqLworCWlmIChidXMgfHwgc2xvdCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgIgorCQkJIm5vICVzIGZvdW5kIGF0IHBjaSAlMDJ4OiUwMnghXG4iLAorCQkJZGV2LT5taW5vciwgdGhpc2JvYXJkLT5uYW1lLCBidXMsIHNsb3QpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBubyAlcyBmb3VuZCFcbiIsCisJCQlkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUpOworCX0KKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjaTIyNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgYnVzID0gMCwgc2xvdCA9IDA7CisJdW5zaWduZWQgbjsKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiAlczogYXR0YWNoXG4iLCBkZXYtPm1pbm9yLCBEUklWRVJfTkFNRSk7CisKKwlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwlzbG90ID0gaXQtPm9wdGlvbnNbMV07CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2kyMjRfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCWlmICgocmV0ID0gcGNpMjI0X2ZpbmRfcGNpKGRldiwgYnVzLCBzbG90LCAmcGNpX2RldikpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXZwcml2LT5wY2lfZGV2ID0gcGNpX2RldjsKKworCWlmICgocmV0ID0gY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgRFJJVkVSX05BTUUpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IGVycm9yISBjYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgIgorCQkJImFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iLCBkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPmFvX3NwaW5sb2NrKTsKKworCWRldnByaXYtPmlvYmFzZTEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMik7CisJZGV2LT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMyk7CisJaXJxID0gcGNpX2Rldi0+aXJxOworCisJLyogQWxsb2NhdGUgcmVhZGJhY2sgYnVmZmVyIGZvciBBTyBjaGFubmVscy4gKi8KKwlkZXZwcml2LT5hb19yZWFkYmFjayA9IGttYWxsb2Moc2l6ZW9mKGRldnByaXYtPmFvX3JlYWRiYWNrWzBdKSAqCisJCXRoaXNib2FyZC0+YW9fY2hhbnMsIEdGUF9LRVJORUwpOworCWlmICghZGV2cHJpdi0+YW9fcmVhZGJhY2spIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQWxsb2NhdGUgYnVmZmVyIHRvIGhvbGQgdmFsdWVzIGZvciBBTyBjaGFubmVsIHNjYW4uICovCisJZGV2cHJpdi0+YW9fc2Nhbl92YWxzID0ga21hbGxvYyhzaXplb2YoZGV2cHJpdi0+YW9fc2Nhbl92YWxzWzBdKSAqCisJCXRoaXNib2FyZC0+YW9fY2hhbnMsIEdGUF9LRVJORUwpOworCWlmICghZGV2cHJpdi0+YW9fc2Nhbl92YWxzKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciB0byBob2xkIEFPIGNoYW5uZWwgc2NhbiBvcmRlci4gKi8KKwlkZXZwcml2LT5hb19zY2FuX29yZGVyID0ga21hbGxvYyhzaXplb2YoZGV2cHJpdi0+YW9fc2Nhbl9vcmRlclswXSkgKgorCQl0aGlzYm9hcmQtPmFvX2NoYW5zLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldnByaXYtPmFvX3NjYW5fb3JkZXIpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogRGlzYWJsZSBpbnRlcnJ1cHQgc291cmNlcy4gKi8KKwlkZXZwcml2LT5pbnRzY2UgPSAwOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9JTlRfU0NFKTsKKworCS8qIEluaXRpYWxpemUgdGhlIERBQyBoYXJkd2FyZS4gKi8KKwlvdXR3KFBDSTIyNF9EQUNDT05fR0xPQkFMUkVTRVQsIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NPTik7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDRU4pOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfRklGT1NJWik7CisJZGV2cHJpdi0+ZGFjY29uID0gKFBDSTIyNF9EQUNDT05fVFJJR19TVyB8IFBDSTIyNF9EQUNDT05fUE9MQVJfQkkgfAorCQlQQ0kyMjRfREFDQ09OX0ZJRk9FTkFCIHwgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9FTVBUWSk7CisJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMjRfREFDQ09OX0ZJRk9SRVNFVCwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKworCS8qIEFsbG9jYXRlIHN1YmRldmljZXMuICBUaGVyZSBpcyBvbmx5IG9uZSEgICovCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBBbmFsb2cgb3V0cHV0IHN1YmRldmljZS4gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DTURfV1JJVEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzKSAtIDE7CisJcy0+aW5zbl93cml0ZSA9ICZwY2kyMjRfYW9faW5zbl93cml0ZTsKKwlzLT5pbnNuX3JlYWQgPSAmcGNpMjI0X2FvX2luc25fcmVhZDsKKwlzLT5sZW5fY2hhbmxpc3QgPSBzLT5uX2NoYW47CisKKwlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJcy0+ZG9fY21kID0gJnBjaTIyNF9hb19jbWQ7CisJcy0+ZG9fY21kdGVzdCA9ICZwY2kyMjRfYW9fY21kdGVzdDsKKwlzLT5jYW5jZWwgPSAmcGNpMjI0X2FvX2NhbmNlbDsKKwlzLT5tdW5nZSA9ICZwY2kyMjRfYW9fbXVuZ2U7CisKKwkvKiBTb3J0IG91dCBjaGFubmVsIHJhbmdlIG9wdGlvbnMuICovCisJaWYgKHRoaXNib2FyZC0+bW9kZWwgPT0gcGNpMjM0X21vZGVsKSB7CisJCS8qIFBDSTIzNCByYW5nZSBvcHRpb25zLiAqLworCQljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKnJhbmdlX3RhYmxlX2xpc3Q7CisKKwkJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IHJhbmdlX3RhYmxlX2xpc3QgPQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9scmFuZ2UgKikgKiBzLT5uX2NoYW4sCisJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFzLT5yYW5nZV90YWJsZV9saXN0KSB7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlmb3IgKG4gPSAyOyBuIDwgMyArIHMtPm5fY2hhbjsgbisrKSB7CisJCQlpZiAoaXQtPm9wdGlvbnNbbl0gPCAwIHx8IGl0LT5vcHRpb25zW25dID4gMSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvbWVkaSVkOiAlczogd2FybmluZyEgIgorCQkJCQkiYmFkIG9wdGlvbnNbJXVdPSVkXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBEUklWRVJfTkFNRSwgbiwKKwkJCQkJaXQtPm9wdGlvbnNbbl0pOworCQkJfQorCQl9CisJCWZvciAobiA9IDA7IG4gPCBzLT5uX2NoYW47IG4rKykgeworCQkJaWYgKG4gPCBDT01FRElfTkRFVkNPTkZPUFRTIC0gMyAmJgorCQkJCWl0LT5vcHRpb25zWzMgKyBuXSA9PSAxKSB7CisJCQkJaWYgKGl0LT5vcHRpb25zWzJdID09IDEpIHsKKwkJCQkJcmFuZ2VfdGFibGVfbGlzdFtuXSA9ICZyYW5nZV9wY2kyMzRfZXh0OworCQkJCX0gZWxzZSB7CisJCQkJCXJhbmdlX3RhYmxlX2xpc3Rbbl0gPSAmcmFuZ2VfYmlwb2xhcjU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoaXQtPm9wdGlvbnNbMl0gPT0gMSkgeworCQkJCQlyYW5nZV90YWJsZV9saXN0W25dID0KKwkJCQkJCSZyYW5nZV9wY2kyMzRfZXh0MjsKKwkJCQl9IGVsc2UgeworCQkJCQlyYW5nZV90YWJsZV9saXN0W25dID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJCQl9CisJCQl9CisJCX0KKwkJZGV2cHJpdi0+aHdyYW5nZSA9IGh3cmFuZ2VfcGNpMjM0OworCX0gZWxzZSB7CisJCS8qIFBDSTIyNCByYW5nZSBvcHRpb25zLiAqLworCQlpZiAoaXQtPm9wdGlvbnNbMl0gPT0gMSkgeworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcGNpMjI0X2V4dGVybmFsOworCQkJZGV2cHJpdi0+aHdyYW5nZSA9IGh3cmFuZ2VfcGNpMjI0X2V4dGVybmFsOworCQl9IGVsc2UgeworCQkJaWYgKGl0LT5vcHRpb25zWzJdICE9IDApIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb21lZGklZDogJXM6IHdhcm5pbmchICIKKwkJCQkJImJhZCBvcHRpb25zWzJdPSVkXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBEUklWRVJfTkFNRSwKKwkJCQkJaXQtPm9wdGlvbnNbMl0pOworCQkJfQorCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcGNpMjI0X2ludGVybmFsOworCQkJZGV2cHJpdi0+aHdyYW5nZSA9IGh3cmFuZ2VfcGNpMjI0X2ludGVybmFsOworCQl9CisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGlycSkgeworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBwY2kyMjRfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCURSSVZFUl9OQU1FLCBkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhICIKKwkJCQkidW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgZGV2LT5taW5vciwgaXJxKTsKKwkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQlkZXYtPmlycSA9IGlycTsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiAlcyAiLCBkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUpOworCXByaW50aygiKHBjaSAlcykgIiwgcGNpX25hbWUocGNpX2RldikpOworCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIoaXJxICV1JXMpICIsIGlycSwgKGRldi0+aXJxID8gIiIgOiAiIFVOQVZBSUxBQkxFIikpOworCX0gZWxzZSB7CisJCXByaW50aygiKG5vIGlycSkgIik7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY2kyMjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGRldGFjaFxuIiwgZGV2LT5taW5vciwgRFJJVkVSX05BTUUpOworCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldi0+c3ViZGV2aWNlcykgeworCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkJLyogQU8gc3ViZGV2aWNlICovCisJCWlmIChzLT5yYW5nZV90YWJsZV9saXN0KSB7CisJCQlrZnJlZShzLT5yYW5nZV90YWJsZV9saXN0KTsKKwkJfQorCX0KKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+YW9fcmVhZGJhY2spIHsKKwkJCWtmcmVlKGRldnByaXYtPmFvX3JlYWRiYWNrKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+YW9fc2Nhbl92YWxzKSB7CisJCQlrZnJlZShkZXZwcml2LT5hb19zY2FuX3ZhbHMpOworCQl9CisJCWlmIChkZXZwcml2LT5hb19zY2FuX29yZGVyKSB7CisJCQlrZnJlZShkZXZwcml2LT5hb19zY2FuX29yZGVyKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwl9CisJaWYgKGRldi0+Ym9hcmRfbmFtZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogJXMgcmVtb3ZlZFxuIiwKKwkJCWRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5ZTU3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYwpAQCAtMCwwICsxLDI5NzcgQEAKKyAvKgorICAgIGNvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIzMC5jCisgICAgRHJpdmVyIGZvciBBbXBsaWNvbiBQQ0kyMzAgYW5kIFBDSTI2MCBNdWx0aWZ1bmN0aW9uIEkvTyBib2FyZHMuCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgQWxsYW4gV2lsbGNveCA8YWxsYW53aWxsY294QG96ZW1haWwuY29tLmF1PgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICAqLworLyoKK0RyaXZlcjogYW1wbGNfcGNpMjMwCitEZXNjcmlwdGlvbjogQW1wbGljb24gUENJMjMwLCBQQ0kyNjAgTXVsdGlmdW5jdGlvbiBJL08gYm9hcmRzCitBdXRob3I6IEFsbGFuIFdpbGxjb3ggPGFsbGFud2lsbGNveEBvemVtYWlsLmNvbS5hdT4sCisgIFN0ZXZlIEQgU2hhcnBsZXMgPHN0ZXZlLnNoYXJwbGVzQG5vdHRpbmdoYW0uYWMudWs+LAorICBJYW4gQWJib3R0IDxhYmJvdHRpQG1ldi5jby51az4KK1VwZGF0ZWQ6IFdlZCwgMjIgT2N0IDIwMDggMTI6MzQ6NDkgKzAxMDAKK0RldmljZXM6IFtBbXBsaWNvbl0gUENJMjMwIChwY2kyMzAgb3IgYW1wbGNfcGNpMjMwKSwKKyAgUENJMjMwKyAocGNpMjMwKyBvciBhbXBsY19wY2kyMzApLAorICBQQ0kyNjAgKHBjaTI2MCBvciBhbXBsY19wY2kyMzApLCBQQ0kyNjArIChwY2kyNjArIG9yIGFtcGxjX3BjaTIzMCkKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpLgorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKS4KKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSSBkZXZpY2UKKyAgICAgICAgICB3aWxsIGJlIHVzZWQuCisKK0NvbmZpZ3VyaW5nIGEgImFtcGxjX3BjaTIzMCIgd2lsbCBtYXRjaCBhbnkgc3VwcG9ydGVkIGNhcmQgYW5kIGl0IHdpbGwKK2Nob29zZSB0aGUgYmVzdCBtYXRjaCwgcGlja2luZyB0aGUgIisiIG1vZGVscyBpZiBwb3NzaWJsZS4gIENvbmZpZ3VyaW5nCithICJwY2kyMzAiIHdpbGwgbWF0Y2ggYSBQQ0kyMzAgb3IgUENJMjMwKyBjYXJkIGFuZCBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMKK2EgUENJMjMwLiAgQ29uZmlndXJpbmcgYSAicGNpMjYwIiB3aWxsIG1hdGNoIGEgUENJMjYwIG9yIFBDSTI2MCsgY2FyZAorYW5kIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIFBDSTI2MC4gIENvbmZpZ3VyaW5nIGEgInBjaTIzMCsiIHdpbGwgbWF0Y2gKK2EgUENJMjMwKyBjYXJkLiAgQ29uZmlndXJpbmcgYSAicGNpMjYwKyIgd2lsbCBtYXRjaCBhIFBDSTI2MCsgY2FyZC4KKworU3ViZGV2aWNlczoKKworICAgICAgICAgICAgICAgIFBDSTIzMCgrKSAgICBQQ0kyNjAoKykKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0gICAgLS0tLS0tLS0tCisgIFN1YmRldmljZXMgICAgICAgMyAgICAgICAgICAgIDEKKyAgICAgICAgMCAgICAgICAgICBBSSAgICAgICAgICAgQUkKKwkxICAgICAgICAgIEFPCisJMiAgICAgICAgICBESU8KKworQUkgU3ViZGV2aWNlOgorCisgIFRoZSBBSSBzdWJkZXZpY2UgaGFzIDE2IHNpbmdsZS1lbmRlZCBjaGFubmVscyBvciA4IGRpZmZlcmVudGlhbAorICBjaGFubmVscy4KKworICBUaGUgUENJMjMwIGFuZCBQQ0kyNjAgY2FyZHMgaGF2ZSAxMi1iaXQgcmVzb2x1dGlvbi4gIFRoZSBQQ0kyMzArIGFuZAorICBQQ0kyNjArIGNhcmRzIGhhdmUgMTYtYml0IHJlc29sdXRpb24uCisKKyAgRm9yIGRpZmZlcmVudGlhbCBtb2RlLCB1c2UgaW5wdXRzIDJOIGFuZCAyTisxIGZvciBjaGFubmVsIE4gKGUuZy4gdXNlCisgIGlucHV0cyAxNCBhbmQgMTUgZm9yIGNoYW5uZWwgNykuICBJZiB0aGUgY2FyZCBpcyBwaHlzaWNhbGx5IGEgUENJMjMwCisgIG9yIFBDSTI2MCB0aGVuIGl0IGFjdHVhbGx5IHVzZXMgYSAicHNldWRvLWRpZmZlcmVudGlhbCIgbW9kZSB3aGVyZSB0aGUKKyAgaW5wdXRzIGFyZSBzYW1wbGVkIGEgZmV3IG1pY3Jvc2Vjb25kcyBhcGFydC4gIFRoZSBQQ0kyMzArIGFuZCBQQ0kyNjArCisgIHVzZSB0cnVlIGRpZmZlcmVudGlhbCBzYW1wbGluZy4gIEFub3RoZXIgZGlmZmVyZW5jZSBpcyB0aGF0IGlmIHRoZQorICBjYXJkIGlzIHBoeXNpY2FsbHkgYSBQQ0kyMzAgb3IgUENJMjYwLCB0aGUgaW52ZXJ0aW5nIGlucHV0IGlzIDJOLAorICB3aGVyZWFzIGZvciBhIFBDSTIzMCsgb3IgUENJMjYwKyB0aGUgaW52ZXJ0aW5nIGlucHV0IGlzIDJOKzEuICBTbyBpZiBhCisgIFBDSTIzMCBpcyBwaHlzaWNhbGx5IHJlcGxhY2VkIGJ5IGEgUENJMjMwKyAob3IgYSBQQ0kyNjAgd2l0aCBhCisgIFBDSTI2MCspIGFuZCBkaWZmZXJlbnRpYWwgbW9kZSBpcyB1c2VkLCB0aGUgZGlmZmVyZW50aWFsIGlucHV0cyBuZWVkCisgIHRvIGJlIHBoeXNpY2FsbHkgc3dhcHBlZCBvbiB0aGUgY29ubmVjdG9yLgorCisgIFRoZSBmb2xsb3dpbmcgaW5wdXQgcmFuZ2VzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICAwID0+IFstMTAsICsxMF0gVgorICAgIDEgPT4gWy01LCArNV0gVgorICAgIDIgPT4gWy0yLjUsICsyLjVdIFYKKyAgICAzID0+IFstMS4yNSwgKzEuMjVdIFYKKyAgICA0ID0+IFswLCAxMF0gVgorICAgIDUgPT4gWzAsIDVdIFYKKyAgICA2ID0+IFswLCAyLjVdIFYKKworQUkgQ29tbWFuZHM6CisKKyAgKz09PT09PT09PSs9PT09PT09PT09PT09PSs9PT09PT09PT09PSs9PT09PT09PT09PT0rPT09PT09PT09PSsKKyAgfHN0YXJ0X3NyY3xzY2FuX2JlZ2luX3NyY3xjb252ZXJ0X3NyY3xzY2FuX2VuZF9zcmN8IHN0b3Bfc3JjIHwKKyAgKz09PT09PT09PSs9PT09PT09PT09PT09PSs9PT09PT09PT09PSs9PT09PT09PT09PT0rPT09PT09PT09PSsKKyAgfFRSSUdfTk9XIHwgVFJJR19GT0xMT1cgIHxUUklHX1RJTUVSIHwgVFJJR19DT1VOVCB8VFJJR19OT05FIHwKKyAgfFRSSUdfSU5UIHwgICAgICAgICAgICAgIHxUUklHX0VYVCgzKXwgICAgICAgICAgICB8VFJJR19DT1VOVHwKKyAgfCAgICAgICAgIHwgICAgICAgICAgICAgIHxUUklHX0lOVCAgIHwgICAgICAgICAgICB8ICAgICAgICAgIHwKKyAgfCAgICAgICAgIHwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwgICAgICAgICAgICB8ICAgICAgICAgIHwKKyAgfCAgICAgICAgIHwgVFJJR19USU1FUigxKXxUUklHX1RJTUVSIHwgICAgICAgICAgICB8ICAgICAgICAgIHwKKyAgfCAgICAgICAgIHwgVFJJR19FWFQoMikgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgIHwKKyAgfCAgICAgICAgIHwgVFJJR19JTlQgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKworICBOb3RlIDE6IElmIEFJIGNvbW1hbmQgYW5kIEFPIGNvbW1hbmQgYXJlIHVzZWQgc2ltdWx0YW5lb3VzbHksIG9ubHkKKyAgICAgICAgICBvbmUgbWF5IGhhdmUgc2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUi4KKworICBOb3RlIDI6IEZvciBQQ0kyMzAgYW5kIFBDSTIzMCssIHNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUIHVzZXMKKyAgICAgICAgICBESU8gY2hhbm5lbCAxNiAocGluIDQ5KSB3aGljaCB3aWxsIG5lZWQgdG8gYmUgY29uZmlndXJlZCBhcworICAgICAgICAgIGEgZGlnaXRhbCBpbnB1dC4gIEZvciBQQ0kyNjArLCB0aGUgRVhUVFJJRy9FWFRDT05WQ0xLIGlucHV0CisgICAgICAgICAgKHBpbiAxNykgaXMgdXNlZCBpbnN0ZWFkLiAgRm9yIFBDSTIzMCwgc2Nhbl9iZWdpbl9zcmMgPT0KKyAgICAgICAgICBUUklHX0VYVCBpcyBub3Qgc3VwcG9ydGVkLiAgVGhlIHRyaWdnZXIgaXMgYSByaXNpbmcgZWRnZQorICAgICAgICAgIG9uIHRoZSBpbnB1dC4KKworICBOb3RlIDM6IEZvciBjb252ZXJ0X3NyYyA9PSBUUklHX0VYVCwgdGhlIEVYVFRSSUcvRVhUQ09OVkNMSyBpbnB1dAorICAgICAgICAgIChwaW4gMjUgb24gUENJMjMwKCspLCBwaW4gMTcgb24gUENJMjYwKCspKSBpcyB1c2VkLiAgVGhlCisgICAgICAgICAgY29udmVydF9hcmcgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgICAgY29udmVydF9hcmcgPT0gKENSX0VER0UgfCAwKSA9PiByaXNpbmcgZWRnZQorICAgICAgICAgICAgY29udmVydF9hcmcgPT0gKENSX0VER0UgfCBDUl9JTlZFUlQgfCAwKSA9PiBmYWxsaW5nIGVkZ2UKKyAgICAgICAgICAgIGNvbnZlcnRfYXJnID09IDAgPT4gZmFsbGluZyBlZGdlIChiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkKKyAgICAgICAgICAgIGNvbnZlcnRfYXJnID09IDEgPT4gcmlzaW5nIGVkZ2UgKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KQorCisgIEFsbCBlbnRyaWVzIGluIHRoZSBjaGFubmVsIGxpc3QgbXVzdCB1c2UgdGhlIHNhbWUgYW5hbG9ndWUgcmVmZXJlbmNlLgorICBJZiB0aGUgYW5hbG9ndWUgcmVmZXJlbmNlIGlzIG5vdCBBUkVGX0RJRkYgKG5vdCBkaWZmZXJlbnRpYWwpIGVhY2gKKyAgcGFpciBvZiBjaGFubmVsIG51bWJlcnMgKDAgYW5kIDEsIDIgYW5kIDMsIGV0Yy4pIG11c3QgdXNlIHRoZSBzYW1lCisgIGlucHV0IHJhbmdlLiAgVGhlIGlucHV0IHJhbmdlcyB1c2VkIGluIHRoZSBzZXF1ZW5jZSBtdXN0IGJlIGFsbAorICBiaXBvbGFyIChyYW5nZXMgMCB0byAzKSBvciBhbGwgdW5pcG9sYXIgKHJhbmdlcyA0IHRvIDYpLiAgVGhlIGNoYW5uZWwKKyAgc2VxdWVuY2UgbXVzdCBjb25zaXN0IG9mIDEgb3IgbW9yZSBpZGVudGljYWwgc3Vic2VxdWVuY2VzLiAgV2l0aGluIHRoZQorICBzdWJzZXF1ZW5jZSwgY2hhbm5lbHMgbXVzdCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIgd2l0aCBubyByZXBlYXRlZAorICBjaGFubmVscy4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlcyBhcmUgdmFsaWQ6IDAgMSAyIDMKKyAgKHNpbmdsZSB2YWxpZCBzdWJzZXF1ZW5jZSksIDAgMiAzIDUgMCAyIDMgNSAocmVwZWF0ZWQgdmFsaWQKKyAgc3Vic2VxdWVuY2UpLCAxIDEgMSAxIChyZXBlYXRlZCB2YWxpZCBzdWJzZXF1ZW5jZSkuICBUaGUgZm9sbG93aW5nCisgIHNlcXVlbmNlcyBhcmUgaW52YWxpZDogMCAzIDIgMSAoaW52YWxpZCBzdWJzZXF1ZW5jZSksIDAgMiAzIDUgMCAyIDMKKyAgKGluY29tcGxldGVseSByZXBlYXRlZCBzdWJzZXF1ZW5jZSkuICBTb21lIHZlcnNpb25zIG9mIHRoZSBQQ0kyMzArIGFuZAorICBQQ0kyNjArIGhhdmUgYSBidWcgdGhhdCByZXF1aXJlcyBhIHN1YnNlcXVlbmNlIGxvbmdlciB0aGFuIG9uZSBlbnRyeQorICBsb25nIHRvIGluY2x1ZGUgY2hhbm5lbCAwLgorCitBTyBTdWJkZXZpY2U6CisKKyAgVGhlIEFPIHN1YmRldmljZSBoYXMgMiBjaGFubmVscyB3aXRoIDEyLWJpdCByZXNvbHV0aW9uLgorCisgIFRoZSBmb2xsb3dpbmcgb3V0cHV0IHJhbmdlcyBhcmUgc3VwcG9ydGVkOgorCisgICAgMCA9PiBbMCwgMTBdIFYKKyAgICAxID0+IFstMTAsICsxMF0gVgorCitBTyBDb21tYW5kczoKKworICArPT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09PT09PT09KworICB8c3RhcnRfc3JjfHNjYW5fYmVnaW5fc3JjfGNvbnZlcnRfc3JjfHNjYW5fZW5kX3NyY3wgc3RvcF9zcmMgfAorICArPT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09PT09PT09KworICB8VFJJR19JTlQgfCBUUklHX1RJTUVSKDEpfCBUUklHX05PVyAgfCBUUklHX0NPVU5UIHxUUklHX05PTkUgfAorICB8ICAgICAgICAgfCBUUklHX0VYVCgyKSAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHxUUklHX0NPVU5UfAorICB8ICAgICAgICAgfCBUUklHX0lOVCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworCisgIE5vdGUgMTogSWYgQUkgY29tbWFuZCBhbmQgQU8gY29tbWFuZCBhcmUgdXNlZCBzaW11bHRhbmVvdXNseSwgb25seQorICAgICAgICAgIG9uZSBtYXkgaGF2ZSBzY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSLgorCisgIE5vdGUgMjogc2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQgaXMgb25seSBzdXBwb3J0ZWQgaWYgdGhlIGNhcmQgaXMKKyAgICAgICAgICBjb25maWd1cmVkIGFzIGEgUENJMjMwKyBhbmQgaXMgb25seSBzdXBwb3J0ZWQgb24gbGF0ZXIKKyAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgY2FyZC4gIEFzIGEgY2FyZCBjb25maWd1cmVkIGFzIGEgUENJMjMwKyBpcworICAgICAgICAgIG5vdCBndWFyYW50ZWVkIHRvIHN1cHBvcnQgZXh0ZXJuYWwgdHJpZ2dlcmluZywgcGxlYXNlIGNvbnNpZGVyCisgICAgICAgICAgdGhpcyBzdXBwb3J0IHRvIGJlIGEgYm9udXMuICBJdCB1c2VzIHRoZSBFWFRUUklHLyBFWFRDT05WQ0xLCisgICAgICAgICAgaW5wdXQgKFBDSTIzMCsgcGluIDI1KS4gIFRyaWdnZXJpbmcgd2lsbCBiZSBvbiB0aGUgcmlzaW5nIGVkZ2UKKyAgICAgICAgICB1bmxlc3MgdGhlIENSX0lOVkVSVCBmbGFnIGlzIHNldCBpbiBzY2FuX2JlZ2luX2FyZy4KKworICBUaGUgY2hhbm5lbHMgaW4gdGhlIGNoYW5uZWwgc2VxdWVuY2UgbXVzdCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIgd2l0aAorICBubyByZXBlYXRzLiAgQWxsIGVudHJpZXMgaW4gdGhlIGNoYW5uZWwgc2VxdWVuY2UgbXVzdCB1c2UgdGhlIHNhbWUKKyAgb3V0cHV0IHJhbmdlLgorCitESU8gU3ViZGV2aWNlOgorCisgIFRoZSBESU8gc3ViZGV2aWNlIGlzIGEgODI1NSBjaGlwIHByb3ZpZGluZyAyNCBESU8gY2hhbm5lbHMuICBUaGUgRElPCisgIGNoYW5uZWxzIGFyZSBjb25maWd1cmFibGUgYXMgaW5wdXRzIG9yIG91dHB1dHMgaW4gZm91ciBncm91cHM6CisKKyAgICBQb3J0IEEgIC0gY2hhbm5lbHMgIDAgdG8gIDcKKyAgICBQb3J0IEIgIC0gY2hhbm5lbHMgIDggdG8gMTUKKyAgICBQb3J0IENMIC0gY2hhbm5lbHMgMTYgdG8gMTkKKyAgICBQb3J0IENIIC0gY2hhbm5lbHMgMjAgdG8gMjMKKworICBPbmx5IG1vZGUgMCBvZiB0aGUgODI1NSBjaGlwIGlzIHN1cHBvcnRlZC4KKworICBCaXQgMCBvZiBwb3J0IEMgKERJTyBjaGFubmVsIDE2KSBpcyBhbHNvIHVzZWQgYXMgYW4gZXh0ZXJuYWwgc2NhbgorICB0cmlnZ2VyIGlucHV0IGZvciBBSSBjb21tYW5kcyBvbiBQQ0kyMzAgYW5kIFBDSTIzMCssIHNvIHdvdWxkIG5lZWQgdG8KKyAgYmUgY29uZmlndXJlZCBhcyBhbiBpbnB1dCB0byB1c2UgaXQgZm9yIHRoYXQgcHVycG9zZS4KKyovCisvKgorRXh0cmEgdHJpZ2dlcmVkIHNjYW4gZnVuY3Rpb25hbGl0eSwgaW50ZXJydXB0IGJ1Zy1maXggYWRkZWQgYnkgU3RldmUgU2hhcnBsZXMuCitTdXBwb3J0IGZvciBQQ0kyMzArLzI2MCssIG1vcmUgdHJpZ2dlcmVkIHNjYW4gZnVuY3Rpb25hbGl0eSwgYW5kIHdvcmthcm91bmRzCitmb3IgKG9yIGRldGVjdGlvbiBvZikgdmFyaW91cyBoYXJkd2FyZSBwcm9ibGVtcyBhZGRlZCBieSBJYW4gQWJib3R0LgorKi8KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKworLyogUENJMjMwIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1QTElDT04gMHgxNGRjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENJMjMwIDB4MDAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDSTI2MCAweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlZBTElEIDB4ZmZmZgorCisjZGVmaW5lIFBDSTIzMF9JTzFfU0laRSAzMgkvKiBTaXplIG9mIEkvTyBzcGFjZSAxICovCisjZGVmaW5lIFBDSTIzMF9JTzJfU0laRSAxNgkvKiBTaXplIG9mIEkvTyBzcGFjZSAyICovCisKKy8qIFBDSTIzMCBpL28gc3BhY2UgMSByZWdpc3RlcnMuICovCisjZGVmaW5lIFBDSTIzMF9QUElfWF9CQVNFCTB4MDAJLyogVXNlciBQUEkgKDgyQzU1KSBiYXNlICovCisjZGVmaW5lIFBDSTIzMF9QUElfWF9BCQkweDAwCS8qIFVzZXIgUFBJICg4MkM1NSkgcG9ydCBBICovCisjZGVmaW5lIFBDSTIzMF9QUElfWF9CCQkweDAxCS8qIFVzZXIgUFBJICg4MkM1NSkgcG9ydCBCICovCisjZGVmaW5lIFBDSTIzMF9QUElfWF9DCQkweDAyCS8qIFVzZXIgUFBJICg4MkM1NSkgcG9ydCBDICovCisjZGVmaW5lIFBDSTIzMF9QUElfWF9DTUQJMHgwMwkvKiBVc2VyIFBQSSAoODJDNTUpIGNvbnRyb2wgd29yZCAqLworI2RlZmluZSBQQ0kyMzBfWjJfQ1RfQkFTRQkweDE0CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgYmFzZSAqLworI2RlZmluZSBQQ0kyMzBfWjJfQ1QwCQkweDE0CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgMCAqLworI2RlZmluZSBQQ0kyMzBfWjJfQ1QxCQkweDE1CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgMSAqLworI2RlZmluZSBQQ0kyMzBfWjJfQ1QyCQkweDE2CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgMiAqLworI2RlZmluZSBQQ0kyMzBfWjJfQ1RDCQkweDE3CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgY29udHJvbCB3b3JkICovCisjZGVmaW5lIFBDSTIzMF9aQ0xLX1NDRQkJMHgxQQkvKiBHcm91cCBaIENsb2NrIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUENJMjMwX1pHQVRfU0NFCQkweDFECS8qIEdyb3VwIFogR2F0ZSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFBDSTIzMF9JTlRfU0NFCQkweDFFCS8qIEludGVycnVwdCBzb3VyY2UgbWFzayAodykgKi8KKyNkZWZpbmUgUENJMjMwX0lOVF9TVEFUCQkweDFFCS8qIEludGVycnVwdCBzdGF0dXMgKHIpICovCisKKy8qIFBDSTIzMCBpL28gc3BhY2UgMiByZWdpc3RlcnMuICovCisjZGVmaW5lIFBDSTIzMF9EQUNDT04JCTB4MDAJLyogREFDIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJMjMwX0RBQ09VVDEJCTB4MDIJLyogREFDIGNoYW5uZWwgMCAodykgKi8KKyNkZWZpbmUgUENJMjMwX0RBQ09VVDIJCTB4MDQJLyogREFDIGNoYW5uZWwgMSAodykgKG5vdCBGSUZPIG1vZGUpICovCisjZGVmaW5lIFBDSTIzMF9BRENEQVRBCQkweDA4CS8qIEFEQyBkYXRhIChyKSAqLworI2RlZmluZSBQQ0kyMzBfQURDU1dUUklHCTB4MDgJLyogQURDIHNvZnR3YXJlIHRyaWdnZXIgKHcpICovCisjZGVmaW5lIFBDSTIzMF9BRENDT04JCTB4MEEJLyogQURDIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ0VOCQkweDBDCS8qIEFEQyBjaGFubmVsIGVuYWJsZSBiaXRzICovCisjZGVmaW5lIFBDSTIzMF9BRENHCQkweDBFCS8qIEFEQyBnYWluIGNvbnRyb2wgYml0cyAqLworLyogUENJMjMwKyBpL28gc3BhY2UgMiBhZGRpdGlvbmFsIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgUENJMjMwUF9BRENUUklHCQkweDEwCS8qIEFEQyBzdGFydCBhY3F1aXNpdGlvbiB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFBfQURDVEgJCTB4MTIJLyogQURDIGFuYWxvZyB0cmlnZ2VyIHRocmVzaG9sZCAqLworI2RlZmluZSBQQ0kyMzBQX0FEQ0ZGVEgJCTB4MTQJLyogQURDIEZJRk8gaW50ZXJydXB0IHRocmVzaG9sZCAqLworI2RlZmluZSBQQ0kyMzBQX0FEQ0ZGTEVWCTB4MTYJLyogQURDIEZJRk8gbGV2ZWwgKHIpICovCisjZGVmaW5lIFBDSTIzMFBfQURDUFRTQwkJMHgxOAkvKiBBREMgcHJlLXRyaWdnZXIgc2FtcGxlIGNvdW50IChyKSAqLworI2RlZmluZSBQQ0kyMzBQX0FEQ0hZU1QJCTB4MUEJLyogQURDIGFuYWxvZyB0cmlnZ2VyIGh5c3RlcmVzeXMgKi8KKyNkZWZpbmUgUENJMjMwUF9FWFRGVU5DCQkweDFDCS8qIEV4dGVuZGVkIGZ1bmN0aW9ucyAqLworI2RlZmluZSBQQ0kyMzBQX0hXVkVSCQkweDFFCS8qIEhhcmR3YXJlIHZlcnNpb24gKHIpICovCisvKiBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzLiAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNEQVRBCTB4MDIJLyogREFDIGRhdGEgKEZJRk8gbW9kZSkgKHcpICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ1NXVFJJRwkweDAyCS8qIERBQyBzb2Z0IHRyaWdnZXIgKEZJRk8gbW9kZSkgKHIpICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ0VOCQkweDA2CS8qIERBQyBjaGFubmVsIGVuYWJsZSAoRklGTyBtb2RlKSAqLworCisvKiBDb252ZXJ0b3IgcmVsYXRlZCBjb25zdGFudHMuICovCisjZGVmaW5lIFBDSTIzMF9EQUNfU0VUVExFIDUJLyogQW5hbG9ndWUgb3V0cHV0IHNldHRsaW5nIHRpbWUgaW4gwrVzICovCisJCQkJLyogKERBQyBpdHNlbGYgaXMgMcK1cyBub21pbmFsbHkpLiAqLworI2RlZmluZSBQQ0kyMzBfQURDX1NFVFRMRSAxCS8qIEFuYWxvZ3VlIGlucHV0IHNldHRsaW5nIHRpbWUgaW4gwrVzICovCisJCQkJLyogKEFEQyBpdHNlbGYgaXMgMS42wrVzIG5vbWluYWxseSBidXQgd2UgcG9sbAorCQkJCSAqIGFueXdheSkuICovCisjZGVmaW5lIFBDSTIzMF9NVVhfU0VUVExFIDEwCS8qIEFEQyBNVVggc2V0dGxpbmcgdGltZSBpbiDCtVMgKi8KKwkJCQkvKiAtIDEwwrVzIGZvciBzZSwgMjDCtXMgZGUuICovCisKKy8qIERBQ0NPTiByZWFkLXdyaXRlIHZhbHVlcy4gKi8KKyNkZWZpbmUgUENJMjMwX0RBQ19PUl9VTkkJCSgwPDwwKQkvKiBPdXRwdXQgcmFuZ2UgdW5pcG9sYXIgKi8KKyNkZWZpbmUgUENJMjMwX0RBQ19PUl9CSVAJCSgxPDwwKQkvKiBPdXRwdXQgcmFuZ2UgYmlwb2xhciAqLworI2RlZmluZSBQQ0kyMzBfREFDX09SX01BU0sJCSgxPDwwKQorLyogVGhlIGZvbGxvd2luZyBhcHBsaWVzIG9ubHkgaWYgREFDIEZJRk8gc3VwcG9ydCBpcyBlbmFibGVkIGluIHRoZSBFWFRGVU5DCisgKiByZWdpc3RlciAoYW5kIG9ubHkgZm9yIFBDSTIzMCsgaGFyZHdhcmUgdmVyc2lvbiAyIG9ud2FyZHMpLiAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19FTgkJKDE8PDgpCS8qIEZJRk8gZW5hYmxlICovCisvKiBUaGUgZm9sbG93aW5nIGFwcGx5IG9ubHkgaWYgdGhlIERBQyBGSUZPIGlzIGVuYWJsZWQgKGFuZCBvbmx5IGZvciBQQ0kyMzArCisgKiBoYXJkd2FyZSB2ZXJzaW9uIDIgb253YXJkcykuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX05PTkUJCSgwPDwyKQkvKiBObyB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX1NXCQkoMTw8MikJLyogU29mdHdhcmUgdHJpZ2dlciB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX0VYVFAJCSgyPDwyKQkvKiBFWFRUUklHICt2ZSBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX1RSSUdfRVhUTgkJKDM8PDIpCS8qIEVYVFRSSUcgLXZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfVFJJR19aMkNUMAkJKDQ8PDIpCS8qIENUMC1PVVQgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfVFJJR19aMkNUMQkJKDU8PDIpCS8qIENUMS1PVVQgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfVFJJR19aMkNUMgkJKDY8PDIpCS8qIENUMi1PVVQgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfVFJJR19NQVNLCQkoNzw8MikKKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fV1JBUAkJKDE8PDcpCS8qIEZJRk8gd3JhcGFyb3VuZCBtb2RlICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19JTlRfRklGT19FTVBUWQkoMDw8OSkJLyogRklGTyBpbnRlcnJ1cHQgZW1wdHkgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0lOVF9GSUZPX05FTVBUWQkoMTw8OSkKKyNkZWZpbmUgUENJMjMwUDJfREFDX0lOVF9GSUZPX05IQUxGCSgyPDw5KQkvKiBGSUZPIGludHIgbm90IGhhbGYgZnVsbCAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fSEFMRgkoMzw8OSkKKyNkZWZpbmUgUENJMjMwUDJfREFDX0lOVF9GSUZPX05GVUxMCSg0PDw5KQkvKiBGSUZPIGludGVycnVwdCBub3QgZnVsbCAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fRlVMTAkoNTw8OSkKKyNkZWZpbmUgUENJMjMwUDJfREFDX0lOVF9GSUZPX01BU0sJKDc8PDkpCisKKy8qIERBQ0NPTiByZWFkLW9ubHkgdmFsdWVzLiAqLworI2RlZmluZSBQQ0kyMzBfREFDX0JVU1kJCQkoMTw8MSkJLyogREFDIGJ1c3kuICovCisvKiBUaGUgZm9sbG93aW5nIGFwcGx5IG9ubHkgaWYgdGhlIERBQyBGSUZPIGlzIGVuYWJsZWQgKGFuZCBvbmx5IGZvciBQQ0kyMzArCisgKiBoYXJkd2FyZSB2ZXJzaW9uIDIgb253YXJkcykuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0xBVENIRUQJKDE8PDUpCS8qIFVuZGVycnVuIGVycm9yICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPX0VNUFRZCQkoMTw8MTMpCS8qIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fRlVMTAkJKDE8PDE0KQkvKiBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fSEFMRgkJKDE8PDE1KQkvKiBGSUZPIGhhbGYgZnVsbCAqLworCisvKiBEQUNDT04gd3JpdGUtb25seSwgdHJhbnNpZW50IHZhbHVlcy4gKi8KKy8qIFRoZSBmb2xsb3dpbmcgYXBwbHkgb25seSBpZiB0aGUgREFDIEZJRk8gaXMgZW5hYmxlZCAoYW5kIG9ubHkgZm9yIFBDSTIzMCsKKyAqIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzKS4gKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fVU5ERVJSVU5fQ0xFQVIJKDE8PDUpCS8qIENsZWFyIHVuZGVycnVuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPX1JFU0VUCQkoMTw8MTIpCS8qIEZJRk8gcmVzZXQgKi8KKworLyogUENJMjMwKyBoYXJkd2FyZSB2ZXJzaW9uIDIgREFDIEZJRk8gbGV2ZWxzLiAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT0xFVkVMX0hBTEYJNTEyCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPTEVWRUxfRlVMTAkxMDI0CisvKiBGcmVlIHNwYWNlIGluIERBQyBGSUZPLiAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT1JPT01fRU1QVFkJCVBDSTIzMFAyX0RBQ19GSUZPTEVWRUxfRlVMTAorI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT1JPT01fT05FVE9IQUxGCQlcCisJKFBDSTIzMFAyX0RBQ19GSUZPTEVWRUxfRlVMTCAtIFBDSTIzMFAyX0RBQ19GSUZPTEVWRUxfSEFMRikKKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9ST09NX0hBTEZUT0ZVTEwJMQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT1JPT01fRlVMTAkJMAorCisvKiBBRENDT04gcmVhZC93cml0ZSB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMF9BRENfVFJJR19OT05FCQkoMDw8MCkJLyogTm8gdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfU1cJCSgxPDwwKQkvKiBTb2Z0d2FyZSB0cmlnZ2VyIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19UUklHX0VYVFAJCSgyPDwwKQkvKiBFWFRUUklHICt2ZSBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19UUklHX0VYVE4JCSgzPDwwKQkvKiBFWFRUUklHIC12ZSBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19UUklHX1oyQ1QwCQkoNDw8MCkJLyogQ1QwLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMF9BRENfVFJJR19aMkNUMQkJKDU8PDApCS8qIENUMS1PVVQgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfWjJDVDIJCSg2PDwwKQkvKiBDVDItT1VUICt2ZSBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19UUklHX01BU0sJCSg3PDwwKQorI2RlZmluZSBQQ0kyMzBfQURDX0lSX1VOSQkJKDA8PDMpCS8qIElucHV0IHJhbmdlIHVuaXBvbGFyICovCisjZGVmaW5lIFBDSTIzMF9BRENfSVJfQklQCQkoMTw8MykJLyogSW5wdXQgcmFuZ2UgYmlwb2xhciAqLworI2RlZmluZSBQQ0kyMzBfQURDX0lSX01BU0sJCSgxPDwzKQorI2RlZmluZSBQQ0kyMzBfQURDX0lNX1NFCQkoMDw8NCkJLyogSW5wdXQgbW9kZSBzaW5nbGUgZW5kZWQgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19JTV9ESUYJCSgxPDw0KQkvKiBJbnB1dCBtb2RlIGRpZmZlcmVudGlhbCAqLworI2RlZmluZSBQQ0kyMzBfQURDX0lNX01BU0sJCSgxPDw0KQorI2RlZmluZSBQQ0kyMzBfQURDX0ZJRk9fRU4JCSgxPDw4KQkvKiBGSUZPIGVuYWJsZSAqLworI2RlZmluZSBQQ0kyMzBfQURDX0lOVF9GSUZPX0VNUFRZCSgwPDw5KQorI2RlZmluZSBQQ0kyMzBfQURDX0lOVF9GSUZPX05FTVBUWQkoMTw8OSkJLyogRklGTyBpbnRlcnJ1cHQgbm90IGVtcHR5ICovCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fTkhBTEYJKDI8PDkpCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fSEFMRgkoMzw8OSkJLyogRklGTyBpbnRlcnJ1cHQgaGFsZiBmdWxsICovCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fTkZVTEwJKDQ8PDkpCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fRlVMTAkoNTw8OSkJLyogRklGTyBpbnRlcnJ1cHQgZnVsbCAqLworI2RlZmluZSBQQ0kyMzBQX0FEQ19JTlRfRklGT19USFJFU0gJKDc8PDkpCS8qIEZJRk8gaW50ZXJydXB0IHRocmVzaG9sZCAqLworI2RlZmluZSBQQ0kyMzBfQURDX0lOVF9GSUZPX01BU0sJKDc8PDkpCisKKy8qIEFEQ0NPTiB3cml0ZS1vbmx5LCB0cmFuc2llbnQgdmFsdWVzLiAqLworI2RlZmluZSBQQ0kyMzBfQURDX0ZJRk9fUkVTRVQJCSgxPDwxMikJLyogRklGTyByZXNldCAqLworI2RlZmluZSBQQ0kyMzBfQURDX0dMT0JfUkVTRVQJCSgxPDwxMykJLyogR2xvYmFsIHJlc2V0ICovCisKKy8qIEFEQ0NPTiByZWFkLW9ubHkgdmFsdWVzLiAqLworI2RlZmluZSBQQ0kyMzBfQURDX0JVU1kJCQkoMTw8MTUpCS8qIEFEQyBidXN5ICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19FTVBUWQkJKDE8PDEyKQkvKiBGSUZPIGVtcHR5ICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19GVUxMCQkoMTw8MTMpCS8qIEZJRk8gZnVsbCAqLworI2RlZmluZSBQQ0kyMzBfQURDX0ZJRk9fSEFMRgkJKDE8PDE0KQkvKiBGSUZPIGhhbGYgZnVsbCAqLworI2RlZmluZSBQQ0kyMzBfQURDX0ZJRk9fRlVMTF9MQVRDSEVECSgxPDw1KQkvKiBJbmRpY2F0ZXMgb3ZlcnJ1biBvY2N1cnJlZCAqLworCisvKiBQQ0kyMzAgQURDIEZJRk8gbGV2ZWxzLiAqLworI2RlZmluZSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTAkyMDQ5CS8qIFZhbHVlIGZvciBGSUZPIGhhbGYgZnVsbCAqLworI2RlZmluZSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9GVUxMCTQwOTYJLyogRklGTyBzaXplICovCisKKy8qIFZhbHVlIHRvIHdyaXRlIHRvIEFEQ1NXVFJJRyB0byB0cmlnZ2VyIEFEQyBjb252ZXJzaW9uIGluIHNvZnR3YXJlIHRyaWdnZXIKKyAqIG1vZGUuICBDYW4gYmUgYW55dGhpbmcuICAqLworI2RlZmluZSBQQ0kyMzBfQURDX0NPTlYJCQkweGZmZmYKKworLyogUENJMjMwKyBFWFRGVU5DIHZhbHVlcy4gKi8KKyNkZWZpbmUgUENJMjMwUF9FWFRGVU5DX0dBVF9FWFRUUklHCSgxPDwwKQorCQkJLyogUm91dGUgRVhUVFJJRyBwaW4gdG8gZXh0ZXJuYWwgZ2F0ZSBpbnB1dHMuICovCisvKiBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMFAyX0VYVEZVTkNfREFDRklGTwkoMTw8MSkKKwkJCS8qIEFsbG93IERBQyBGSUZPIHRvIGJlIGVuYWJsZWQuICovCisKKy8qCisgKiBDb3VudGVyL3RpbWVyIGNsb2NrIGlucHV0IGNvbmZpZ3VyYXRpb24gc291cmNlcy4KKyAqLworI2RlZmluZSBDTEtfQ0xLCQkwCS8qIHJlc2VydmVkIChjaGFubmVsLXNwZWNpZmljIGNsb2NrKSAqLworI2RlZmluZSBDTEtfMTBNSFoJMQkvKiBpbnRlcm5hbCAxMCBNSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLXzFNSFoJMgkvKiBpbnRlcm5hbCAxIE1IeiBjbG9jayAqLworI2RlZmluZSBDTEtfMTAwS0haCTMJLyogaW50ZXJuYWwgMTAwIGtIeiBjbG9jayAqLworI2RlZmluZSBDTEtfMTBLSFoJNAkvKiBpbnRlcm5hbCAxMCBrSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLXzFLSFoJNQkvKiBpbnRlcm5hbCAxIGtIeiBjbG9jayAqLworI2RlZmluZSBDTEtfT1VUTk0xCTYJLyogb3V0cHV0IG9mIGNoYW5uZWwtMSBtb2R1bG8gdG90YWwgKi8KKyNkZWZpbmUgQ0xLX0VYVAkJNwkvKiBleHRlcm5hbCBjbG9jayAqLworLyogTWFjcm8gdG8gY29uc3RydWN0IGNsb2NrIGlucHV0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmFsdWUuICovCisjZGVmaW5lIENMS19DT05GSUcoY2hhbiwgc3JjKQkoKCgoY2hhbikgJiAzKSA8PCAzKSB8ICgoc3JjKSAmIDcpKQorLyogVGltZWJhc2VzIGluIG5zLiAqLworI2RlZmluZSBUSU1FQkFTRV8xME1IWgkJMTAwCisjZGVmaW5lIFRJTUVCQVNFXzFNSFoJCTEwMDAKKyNkZWZpbmUgVElNRUJBU0VfMTAwS0haCQkxMDAwMAorI2RlZmluZSBUSU1FQkFTRV8xMEtIWgkJMTAwMDAwCisjZGVmaW5lIFRJTUVCQVNFXzFLSFoJCTEwMDAwMDAKKworLyoKKyAqIENvdW50ZXIvdGltZXIgZ2F0ZSBpbnB1dCBjb25maWd1cmF0aW9uIHNvdXJjZXMuCisgKi8KKyNkZWZpbmUgR0FUX1ZDQwkJMAkvKiBWQ0MgKGkuZS4gZW5hYmxlZCkgKi8KKyNkZWZpbmUgR0FUX0dORAkJMQkvKiBHTkQgKGkuZS4gZGlzYWJsZWQpICovCisjZGVmaW5lIEdBVF9FWFQJCTIJLyogZXh0ZXJuYWwgZ2F0ZSBpbnB1dCAoUFBDbiBvbiBQQ0kyMzApICovCisjZGVmaW5lIEdBVF9OT1VUTk0yCTMJLyogaW52ZXJ0ZWQgb3V0cHV0IG9mIGNoYW5uZWwtMiBtb2R1bG8gdG90YWwgKi8KKy8qIE1hY3JvIHRvIGNvbnN0cnVjdCBnYXRlIGlucHV0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmFsdWUuICovCisjZGVmaW5lIEdBVF9DT05GSUcoY2hhbiwgc3JjKQkoKCgoY2hhbikgJiAzKSA8PCAzKSB8ICgoc3JjKSAmIDcpKQorCisvKgorICogU3VtbWFyeSBvZiBDTEtfT1VUTk0xIGFuZCBHQVRfTk9VVE5NMiBjb25uZWN0aW9ucyBmb3IgUENJMjMwIGFuZCBQQ0kyNjA6CisgKgorICogICAgICAgICAgICAgIENoYW5uZWwncyAgICAgICBDaGFubmVsJ3MKKyAqICAgICAgICAgICAgICBjbG9jayBpbnB1dCAgICAgZ2F0ZSBpbnB1dAorICogQ2hhbm5lbCAgICAgIENMS19PVVROTTEgICAgICBHQVRfTk9VVE5NMgorICogLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLQorICogWjItQ1QwICAgICAgIFoyLUNUMi1PVVQgICAgICAvWjItQ1QxLU9VVAorICogWjItQ1QxICAgICAgIFoyLUNUMC1PVVQgICAgICAvWjItQ1QyLU9VVAorICogWjItQ1QyICAgICAgIFoyLUNUMS1PVVQgICAgICAvWjItQ1QwLU9VVAorICovCisKKy8qIEludGVycnVwdCBlbmFibGVzL3N0YXR1cyByZWdpc3RlciB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMF9JTlRfRElTQUJMRQkJMAorI2RlZmluZSBQQ0kyMzBfSU5UX1BQSV9DMAkJKDE8PDApCisjZGVmaW5lIFBDSTIzMF9JTlRfUFBJX0MzCQkoMTw8MSkKKyNkZWZpbmUgUENJMjMwX0lOVF9BREMJCQkoMTw8MikKKyNkZWZpbmUgUENJMjMwX0lOVF9aQ0xLX0NUMQkJKDE8PDUpCisvKiBGb3IgUENJMjMwKyBoYXJkd2FyZSB2ZXJzaW9uIDIgd2hlbiBEQUMgRklGTyBlbmFibGVkLiAqLworI2RlZmluZSBQQ0kyMzBQMl9JTlRfREFDCQkoMTw8NCkKKworI2RlZmluZSBQQ0kyMzBfVEVTVF9CSVQodmFsLCBuKQkoKHZhbD4+bikmMSkKKwkJCS8qIEFzc3VtZXMgYml0cyBudW1iZXJlZCB3aXRoIHplcm8gb2Zmc2V0LCBpZS4gMC0xNSAqLworCisvKiAoUG90ZW50aWFsbHkpIHNoYXJlZCByZXNvdXJjZXMgYW5kIHRoZWlyIG93bmVycyAqLworZW51bSB7CisJUkVTX1oyQ1QwLAkJLyogWjItQ1QwICovCisJUkVTX1oyQ1QxLAkJLyogWjItQ1QxICovCisJUkVTX1oyQ1QyLAkJLyogWjItQ1QyICovCisJTlVNX1JFU09VUkNFUwkJLyogTnVtYmVyIG9mIChwb3RlbnRpYWxseSkgc2hhcmVkIHJlc291cmNlcy4gKi8KK307CisKK2VudW0geworCU9XTkVSX05PTkUsCQkvKiBOb3Qgb3duZWQgKi8KKwlPV05FUl9BSUNNRCwJCS8qIE93bmVkIGJ5IEFJIGNvbW1hbmQgKi8KKwlPV05FUl9BT0NNRAkJLyogT3duZWQgYnkgQU8gY29tbWFuZCAqLworfTsKKworLyoKKyAqIEhhbmR5IG1hY3Jvcy4KKyAqLworCisvKiBDb21iaW5lIG9sZCBhbmQgbmV3IGJpdHMuICovCisjZGVmaW5lIENPTUJJTkUob2xkLCBuZXcsIG1hc2spCSgoKG9sZCkgJiB+KG1hc2spKSB8ICgobmV3KSAmIChtYXNrKSkpCisKKy8qIEEgZ2VuZXJpYyBudWxsIGZ1bmN0aW9uIHBvaW50ZXIgdmFsdWUuICAqLworI2RlZmluZSBOVUxMRlVOQwkwCisKKy8qIEN1cnJlbnQgQ1BVLiAgWFhYIHNob3VsZCB0aGlzIGJlIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpPyAqLworI2RlZmluZSBUSElTQ1BVCQlzbXBfcHJvY2Vzc29yX2lkKCkKKworLyogU3RhdGUgZmxhZ3MgZm9yIGF0b21pYyBiaXQgb3BlcmF0aW9ucyAqLworI2RlZmluZSBBSV9DTURfU1RBUlRFRAkwCisjZGVmaW5lIEFPX0NNRF9TVEFSVEVECTEKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgdGhlIHR3byBib2FyZHMgc3VwcG9ydGVkLgorICovCisKK3N0cnVjdCBwY2kyMzBfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgc2hvcnQgaWQ7CisJaW50IGFpX2NoYW5zOworCWludCBhaV9iaXRzOworCWludCBhb19jaGFuczsKKwlpbnQgYW9fYml0czsKKwlpbnQgaGF2ZV9kaW87CisJdW5zaWduZWQgaW50IG1pbl9od3ZlcjsJLyogTWluaW11bSBoYXJkd2FyZSB2ZXJzaW9uIHN1cHBvcnRlZC4gKi8KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaTIzMF9ib2FyZCBwY2kyMzBfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2kyMzArIiwKKwkgICAgICBpZDoJUENJX0RFVklDRV9JRF9QQ0kyMzAsCisJICAgICAgYWlfY2hhbnM6MTYsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYW9fY2hhbnM6MiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBoYXZlX2RpbzoxLAorCSAgICAgIG1pbl9od3ZlcjoxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpMjYwKyIsCisJICAgICAgaWQ6CVBDSV9ERVZJQ0VfSURfUENJMjYwLAorCSAgICAgIGFpX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFvX2NoYW5zOjAsCisJICAgICAgYW9fYml0czoJMCwKKwkgICAgICBoYXZlX2RpbzowLAorCSAgICAgIG1pbl9od3ZlcjoxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpMjMwIiwKKwkgICAgICBpZDoJUENJX0RFVklDRV9JRF9QQ0kyMzAsCisJICAgICAgYWlfY2hhbnM6MTYsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYW9fY2hhbnM6MiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpMjYwIiwKKwkgICAgICBpZDoJUENJX0RFVklDRV9JRF9QQ0kyNjAsCisJICAgICAgYWlfY2hhbnM6MTYsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYW9fY2hhbnM6MCwKKwkgICAgICBhb19iaXRzOgkwLAorCSAgICAgIGhhdmVfZGlvOjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJhbXBsY19wY2kyMzAiLAkvKiBXaWxkY2FyZCBtYXRjaGVzIGFueSBhYm92ZSAqLworCSAgICAgIGlkOglQQ0lfREVWSUNFX0lEX0lOVkFMSUQsCisJCX0sCit9OworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpMjMwX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9ERVZJQ0VfSURfUENJMjMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9QQ0kyNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTIzMF9wY2lfdGFibGUpOworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBuX3BjaTIzMF9ib2FyZHMgKHNpemVvZihwY2kyMzBfYm9hcmRzKS9zaXplb2YocGNpMjMwX2JvYXJkc1swXSkpCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBwY2kyMzBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHBjaTIzMF9wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlzcGlubG9ja190IGlzcl9zcGlubG9jazsJLyogSW50ZXJydXB0IHNwaW4gbG9jayAqLworCXNwaW5sb2NrX3QgcmVzX3NwaW5sb2NrOwkvKiBTaGFyZWQgcmVzb3VyY2VzIHNwaW4gbG9jayAqLworCXNwaW5sb2NrX3QgYWlfc3RvcF9zcGlubG9jazsJLyogU3BpbiBsb2NrIGZvciBzdG9wcGluZyBBSSBjb21tYW5kICovCisJc3BpbmxvY2tfdCBhb19zdG9wX3NwaW5sb2NrOwkvKiBTcGluIGxvY2sgZm9yIHN0b3BwaW5nIEFPIGNvbW1hbmQgKi8KKwl1bnNpZ25lZCBsb25nIHN0YXRlOwkvKiBTdGF0ZSBmbGFncyAqLworCXVuc2lnbmVkIGxvbmcgaW9iYXNlMTsJLyogUENJMjMwJ3MgSS9PIHNwYWNlIDEgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07CS8qIFVzZWQgZm9yIEFPIHJlYWRiYWNrICovCisJdW5zaWduZWQgaW50IGFpX3NjYW5fY291bnQ7CS8qIE51bWJlciBvZiBhbmFsb2d1ZSBpbnB1dCBzY2FucworCQkJCQkgKiByZW1haW5pbmcuICAqLworCXVuc2lnbmVkIGludCBhaV9zY2FuX3BvczsJLyogQ3VycmVudCBwb3NpdGlvbiB3aXRoaW4gYW5hbG9ndWUKKwkJCQkJICogaW5wdXQgc2NhbiAqLworCXVuc2lnbmVkIGludCBhb19zY2FuX2NvdW50OwkvKiBOdW1iZXIgb2YgYW5hbG9ndWUgb3V0cHV0IHNjYW5zCisJCQkJCSAqIHJlbWFpbmluZy4gICovCisJaW50IGludHJfY3B1aWQ7CQkvKiBJRCBvZiBDUFUgcnVubmluZyBpbnRlcnJ1cHQgcm91dGluZS4gKi8KKwl1bnNpZ25lZCBzaG9ydCBod3ZlcjsJLyogSGFyZHdhcmUgdmVyc2lvbiAoZm9yICcrJyBtb2RlbHMpLiAqLworCXVuc2lnbmVkIHNob3J0IGFkY2NvbjsJLyogQURDQ09OIHJlZ2lzdGVyIHZhbHVlLiAqLworCXVuc2lnbmVkIHNob3J0IGRhY2NvbjsJLyogREFDQ09OIHJlZ2lzdGVyIHZhbHVlLiAqLworCXVuc2lnbmVkIHNob3J0IGFkY2ZpZm90aHJlc2g7CS8qIEFEQyBGSUZPIHByb2dyYW1tYWJsZSBpbnRlcnJ1cHQKKwkJCQkJICogbGV2ZWwgdGhyZXNob2xkIChQQ0kyMzArLzI2MCspLiAqLworCXVuc2lnbmVkIHNob3J0IGFkY2c7CS8qIEFEQ0cgcmVnaXN0ZXIgdmFsdWUuICovCisJdW5zaWduZWQgY2hhciBpbnRfZW47CS8qIEludGVycnVwdCBlbmFibGVzIGJpdHMuICovCisJdW5zaWduZWQgY2hhciBhaV9jb250aW51b3VzOwkvKiBGbGFnIHNldCB3aGVuIGNtZC0+c3RvcF9zcmMgPT0KKwkJCQkJICogVFJJR19OT05FIC0gdXNlciBjaG9vc2VzIHRvIHN0b3AKKwkJCQkJICogY29udGludW91cyBjb252ZXJzaW9uIGJ5CisJCQkJCSAqIGNhbmNlbGF0aW9uLiAqLworCXVuc2lnbmVkIGNoYXIgYW9fY29udGludW91czsJLyogRmxhZyBzZXQgd2hlbiBjbWQtPnN0b3Bfc3JjID09CisJCQkJCSAqIFRSSUdfTk9ORSAtIHVzZXIgY2hvb3NlcyB0byBzdG9wCisJCQkJCSAqIGNvbnRpbnVvdXMgY29udmVyc2lvbiBieQorCQkJCQkgKiBjYW5jZWxhdGlvbi4gKi8KKwl1bnNpZ25lZCBjaGFyIGFpX2JpcG9sYXI7CS8qIFNldCBpZiBiaXBvbGFyIGlucHV0IHJhbmdlIHNvIHdlCisJCQkJCSAqIGtub3cgdG8gbWFuZ2xlIGl0LiAqLworCXVuc2lnbmVkIGNoYXIgYW9fYmlwb2xhcjsJLyogU2V0IGlmIGJpcG9sYXIgb3V0cHV0IHJhbmdlIHNvIHdlCisJCQkJCSAqIGtub3cgdG8gbWFuZ2xlIGl0LiAqLworCXVuc2lnbmVkIGNoYXIgaWVyOwkvKiBDb3B5IG9mIGludGVycnVwdCBlbmFibGVzL3N0YXR1cyByZWdpc3Rlci4gKi8KKwl1bnNpZ25lZCBjaGFyIGludHJfcnVubmluZzsJLyogRmxhZyBzZXQgaW4gaW50ZXJydXB0IHJvdXRpbmUuICovCisJdW5zaWduZWQgY2hhciByZXNfb3duZXJbTlVNX1JFU09VUkNFU107CS8qIFNoYXJlZCByZXNvdXJjZSBvd25lcnMuICovCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpMjMwX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qIFBDSTIzMCBjbG9jayBzb3VyY2UgcGVyaW9kcyBpbiBucyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwY2kyMzBfdGltZWJhc2VbOF0gPSB7CisJW0NMS18xME1IWl0gPSBUSU1FQkFTRV8xME1IWiwKKwlbQ0xLXzFNSFpdID0gVElNRUJBU0VfMU1IWiwKKwlbQ0xLXzEwMEtIWl0gPSBUSU1FQkFTRV8xMDBLSFosCisJW0NMS18xMEtIWl0gPSBUSU1FQkFTRV8xMEtIWiwKKwlbQ0xLXzFLSFpdID0gVElNRUJBU0VfMUtIWiwKK307CisKKy8qIFBDSTIzMCBhbmFsb2d1ZSBpbnB1dCByYW5nZSB0YWJsZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHBjaTIzMF9haV9yYW5nZSA9IHsgNywgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpCisJfQorfTsKKworLyogUENJMjMwIGFuYWxvZ3VlIGdhaW4gYml0cyBmb3IgZWFjaCBpbnB1dCByYW5nZS4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBjaTIzMF9haV9nYWluWzddID0geyAwLCAxLCAyLCAzLCAxLCAyLCAzIH07CisKKy8qIFBDSTIzMCBhZGNjb24gYmlwb2xhciBmbGFnIGZvciBlYWNoIGFuYWxvZ3VlIGlucHV0IHJhbmdlLiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGNpMjMwX2FpX2JpcG9sYXJbN10gPSB7IDEsIDEsIDEsIDEsIDAsIDAsIDAgfTsKKworLyogUENJMjMwIGFuYWxvZ3VlIG91dHB1dCByYW5nZSB0YWJsZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHBjaTIzMF9hb19yYW5nZSA9IHsgMiwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxMCkKKwl9Cit9OworCisvKiBQQ0kyMzAgZGFjY29uIGJpcG9sYXIgZmxhZyBmb3IgZWFjaCBhbmFsb2d1ZSBvdXRwdXQgcmFuZ2UuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwY2kyMzBfYW9fYmlwb2xhclsyXSA9IHsgMCwgMSB9OworCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY2kyMzBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpMjMwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FtcGxjX3BjaTIzMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhbXBsY19wY2kyMzAiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaTIzMF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNpMjMwX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JnBjaTIzMF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2YocGNpMjMwX2JvYXJkc1swXSksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjaTIzMF9ib2FyZHMpIC8gc2l6ZW9mKHBjaTIzMF9ib2FyZHNbMF0pLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGNpMjMwLCBwY2kyMzBfcGNpX3RhYmxlKTsKKworc3RhdGljIGludCBwY2kyMzBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHBjaTIzMF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHZvaWQgcGNpMjMwX2N0X3NldHVwX25zX21vZGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjdCwKKwl1bnNpZ25lZCBpbnQgbW9kZSwgdWludDY0X3QgbnMsIHVuc2lnbmVkIGludCByb3VuZCk7CitzdGF0aWMgdm9pZCBwY2kyMzBfbnNfdG9fc2luZ2xlX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIHVuc2lnbmVkIGludCByb3VuZCk7CitzdGF0aWMgdm9pZCBwY2kyMzBfY2FuY2VsX2N0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY3QpOworc3RhdGljIGlycXJldHVybl90IHBjaTIzMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgaW50IHBjaTIzMF9hb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBwY2kyMzBfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwY2kyMzBfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgcGNpMjMwX2FvX3N0b3Aoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBwY2kyMzBfaGFuZGxlX2FvX25vZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNpMjMwX2hhbmRsZV9hb19maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwY2kyMzBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgcGNpMjMwX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNpMjMwX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHBjaTIzMF9haV9zdG9wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgcGNpMjMwX2hhbmRsZV9haShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIHNob3J0IHBjaTIzMF9haV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qIFJlYWQgc2FtcGxlLiAqLworCXNob3J0IGRhdGEgPSAoc2hvcnQpIGludyhkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENEQVRBKTsKKworCS8qIFBDSTIzMCBpcyAxMiBiaXQgLSBzdG9yZWQgaW4gdXBwZXIgYml0cyBvZiAxNiBiaXQgcmVnaXN0ZXIgKGxvd2VyCisJICogZm91ciBiaXRzIHJlc2VydmVkIGZvciBleHBhbnNpb24pLiAqLworCS8qIFBDSTIzMCsgaXMgMTYgYml0IEFJLiAqLworCWRhdGEgPSBkYXRhID4+ICgxNiAtIHRoaXNib2FyZC0+YWlfYml0cyk7CisKKwkvKiBJZiBhIGJpcG9sYXIgcmFuZ2Ugd2FzIHNwZWNpZmllZCwgbWFuZ2xlIGl0ICh0d29zCisJICogY29tcGxlbWVudC0+c3RyYWlnaHQgYmluYXJ5KS4gKi8KKwlpZiAoZGV2cHJpdi0+YWlfYmlwb2xhcikgeworCQlkYXRhIF49IDEgPDwgKHRoaXNib2FyZC0+YWlfYml0cyAtIDEpOworCX0KKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBwY2kyMzBfYW9fbWFuZ2xlX2RhdHVtKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXNob3J0IGRhdHVtKQoreworCS8qIElmIGEgYmlwb2xhciByYW5nZSB3YXMgc3BlY2lmaWVkLCBtYW5nbGUgaXQgKHN0cmFpZ2h0IGJpbmFyeS0+dHdvcworCSAqIGNvbXBsZW1lbnQpLiAqLworCWlmIChkZXZwcml2LT5hb19iaXBvbGFyKSB7CisJCWRhdHVtIF49IDEgPDwgKHRoaXNib2FyZC0+YW9fYml0cyAtIDEpOworCX0KKworCS8qIFBDSTIzMCBpcyAxMiBiaXQgLSBzdG9yZWQgaW4gdXBwZXIgYml0cyBvZiAxNiBiaXQgcmVnaXN0ZXIgKGxvd2VyCisJICogZm91ciBiaXRzIHJlc2VydmVkIGZvciBleHBhbnNpb24pLiAqLworCS8qIFBDSTIzMCsgaXMgYWxzbyAxMiBiaXQgQU8uICovCisJZGF0dW0gPDw9ICgxNiAtIHRoaXNib2FyZC0+YW9fYml0cyk7CisJcmV0dXJuICh1bnNpZ25lZCBzaG9ydClkYXR1bTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaTIzMF9hb193cml0ZV9ub2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHNob3J0IGRhdHVtLAorCXVuc2lnbmVkIGludCBjaGFuKQoreworCS8qIFN0b3JlIHVubWFuZ2xlZCBkYXR1bSB0byBiZSByZWFkIGJhY2sgbGF0ZXIuICovCisJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXR1bTsKKworCS8qIFdyaXRlIG1hbmdsZWQgZGF0dW0gdG8gYXBwcm9wcmlhdGUgREFDT1VUIHJlZ2lzdGVyLiAqLworCW91dHcocGNpMjMwX2FvX21hbmdsZV9kYXR1bShkZXYsIGRhdHVtKSwgZGV2LT5pb2Jhc2UgKyAoKChjaGFuKSA9PSAwKQorCQkJPyBQQ0kyMzBfREFDT1VUMSA6IFBDSTIzMF9EQUNPVVQyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2kyMzBfYW9fd3JpdGVfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc2hvcnQgZGF0dW0sCisJdW5zaWduZWQgaW50IGNoYW4pCit7CisJLyogU3RvcmUgdW5tYW5nbGVkIGRhdHVtIHRvIGJlIHJlYWQgYmFjayBsYXRlci4gKi8KKwlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdHVtOworCisJLyogV3JpdGUgbWFuZ2xlZCBkYXR1bSB0byBhcHByb3ByaWF0ZSBEQUNEQVRBIHJlZ2lzdGVyLiAqLworCW91dHcocGNpMjMwX2FvX21hbmdsZV9kYXR1bShkZXYsIGRhdHVtKSwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMzBQMl9EQUNEQVRBKTsKK30KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjaTIzMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UxLCBpb2Jhc2UyOworCS8qIFBDSTIzMCdzIEkvTyBzcGFjZXMgMSBhbmQgMiByZXNwZWN0aXZlbHkuICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJaW50IGkgPSAwLCBpcnFfaGRsLCByYzsKKworCXByaW50aygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYXR0YWNoICVzICVkLCVkXG4iLCBkZXYtPm1pbm9yLAorCQl0aGlzYm9hcmQtPm5hbWUsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYSB1c2luZyBhbGxvY19wcml2YXRlKCkuCisJICogTWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaCAtIG1lbXNldHMgc3RydWN0IGZpZWxkcyB0byAwLiAqLworCWlmICgoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNpMjMwX3ByaXZhdGUpKSkgPCAwKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+cmVzX3NwaW5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPmFvX3N0b3Bfc3BpbmxvY2spOworCS8qIEZpbmQgY2FyZCAqLworCWZvciAocGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lfZGV2ICE9IE5VTEw7CisJCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCS8qIE1hdGNoIGFnYWluc3QgYnVzL3Nsb3Qgb3B0aW9ucy4gKi8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSAhPSBwY2lfZGV2LT5idXMtPm51bWJlciB8fAorCQkJCWl0LT5vcHRpb25zWzFdICE9IFBDSV9TTE9UKHBjaV9kZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAocGNpX2Rldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQU1QTElDT04pCisJCQljb250aW51ZTsKKwkJaWYgKHRoaXNib2FyZC0+aWQgPT0gUENJX0RFVklDRV9JRF9JTlZBTElEKSB7CisJCQkvKiBUaGUgbmFtZSB3YXMgc3BlY2lmaWVkIGFzICJhbXBsY19wY2kyMzAiIHdoaWNoIGlzCisJCQkgKiB1c2VkIHRvIG1hdGNoIGFueSBzdXBwb3J0ZWQgZGV2aWNlLiAgUmVwbGFjZSB0aGUKKwkJCSAqIGN1cnJlbnQgZGV2LT5ib2FyZF9wdHIgd2l0aCBvbmUgdGhhdCBtYXRjaGVzIHRoZQorCQkJICogUENJIGRldmljZSBJRC4gKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBuX3BjaTIzMF9ib2FyZHM7IGkrKykgeworCQkJCWlmIChwY2lfZGV2LT5kZXZpY2UgPT0gcGNpMjMwX2JvYXJkc1tpXS5pZCkgeworCQkJCQlpZiAocGNpMjMwX2JvYXJkc1tpXS5taW5faHd2ZXIgPiAwKSB7CisJCQkJCQkvKiBDaGVjayBmb3IgYSAnKycgbW9kZWwuCisJCQkJCQkgKiBGaXJzdCBjaGVjayBsZW5ndGggb2YKKwkJCQkJCSAqIHJlZ2lzdGVycy4gKi8KKwkJCQkJCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIDMpCisJCQkJCQkJPCAzMikgeworCQkJCQkJCS8qIE5vdCBhICcrJyBtb2RlbC4gKi8KKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCS8qIFRPRE86IHRlbXBvcmFyaWx5IGVuYWJsZSB0aGUKKwkJCQkJCSAqIFBDSSBkZXZpY2UgYW5kIHJlYWQgdGhlCisJCQkJCQkgKiBoYXJkd2FyZSB2ZXJzaW9uIHJlZ2lzdGVyLgorCQkJCQkJICogRm9yIG5vdyBhc3N1bWUgaXQncyBva2F5LiAqLworCQkJCQl9CisJCQkJCS8qIENoYW5nZSBib2FyZF9wdHIgdG8gbWF0Y2hlZCBib2FyZCAqLworCQkJCQlkZXYtPmJvYXJkX3B0ciA9ICZwY2kyMzBfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA8IG5fcGNpMjMwX2JvYXJkcykKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBuYW1lIHdhcyBzcGVjaWZpZWQgYXMgYSBzcGVjaWZpYyBkZXZpY2UgbmFtZS4KKwkJCSAqIFRoZSBjdXJyZW50IGRldi0+Ym9hcmRfcHRyIGlzIGNvcnJlY3QuICBDaGVjaworCQkJICogd2hldGhlciBpdCBtYXRjaGVzIHRoZSBQQ0kgZGV2aWNlIElELiAqLworCQkJaWYgKHRoaXNib2FyZC0+aWQgPT0gcGNpX2Rldi0+ZGV2aWNlKSB7CisJCQkJLyogQ2hlY2sgbWluaW11bSBoYXJkd2FyZSB2ZXJzaW9uLiAqLworCQkJCWlmICh0aGlzYm9hcmQtPm1pbl9od3ZlciA+IDApIHsKKwkJCQkJLyogTG9va2luZyBmb3IgYSAnKycgbW9kZWwuICBGaXJzdAorCQkJCQkgKiBjaGVjayBsZW5ndGggb2YgcmVnaXN0ZXJzLiAqLworCQkJCQlpZiAocGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCAzKSA8IDMyKSB7CisJCQkJCQkvKiBOb3QgYSAnKycgbW9kZWwuICovCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQkvKiBUT0RPOiB0ZW1wb3JhcmlseSBlbmFibGUgdGhlIFBDSQorCQkJCQkgKiBkZXZpY2UgYW5kIHJlYWQgdGhlIGhhcmR3YXJlIHZlcnNpb24KKwkJCQkJICogcmVnaXN0ZXIuICBGb3Igbm93LCBhc3N1bWUgaXQncworCQkJCQkgKiBva2F5LiAqLworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJaWYgKCFwY2lfZGV2KSB7CisJCXByaW50aygiY29tZWRpJWQ6IE5vICVzIGNhcmQgZm91bmRcbiIsIGRldi0+bWlub3IsCisJCQl0aGlzYm9hcmQtPm5hbWUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2cHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CisKKwkvKgorCSAqIEluaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lLgorCSAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCS8qIEVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXNlcnZlIEkvTyBzcGFjZXMuICovCisJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaV9kZXYsICJhbXBsY19wY2kyMzAiKSA8IDApIHsKKwkJcHJpbnRrKCJjb21lZGklZDogZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlICIKKwkJCSJhbmQgcmVxdWVzdCByZWdpb25zXG4iLCBkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogUmVhZCBiYXNlIGFkZHJlc3NlcyBvZiB0aGUgUENJMjMwJ3MgdHdvIEkvTyByZWdpb25zIGZyb20gUENJCisJICogY29uZmlndXJhdGlvbiByZWdpc3Rlci4gKi8KKwlpb2Jhc2UxID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDIpOworCWlvYmFzZTIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMyk7CisKKwlwcmludGsoImNvbWVkaSVkOiAlcyBJL08gcmVnaW9uIDEgMHglMDRseCBJL08gcmVnaW9uIDIgMHglMDRseFxuIiwKKwkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lLCBpb2Jhc2UxLCBpb2Jhc2UyKTsKKworCWRldnByaXYtPmlvYmFzZTEgPSBpb2Jhc2UxOworCWRldi0+aW9iYXNlID0gaW9iYXNlMjsKKworCS8qIFJlYWQgYml0cyBvZiBEQUNDT04gcmVnaXN0ZXIgLSBvbmx5IHRoZSBvdXRwdXQgcmFuZ2UuICovCisJZGV2cHJpdi0+ZGFjY29uID0gaW53KGRldi0+aW9iYXNlICsgUENJMjMwX0RBQ0NPTikgJiBQQ0kyMzBfREFDX09SX01BU0s7CisKKwkvKiBSZWFkIGhhcmR3YXJlIHZlcnNpb24gcmVnaXN0ZXIgYW5kIHNldCBleHRlbmRlZCBmdW5jdGlvbiByZWdpc3RlcgorCSAqIGlmIHRoZXkgZXhpc3QuICovCisJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgMykgPj0gMzIpIHsKKwkJdW5zaWduZWQgc2hvcnQgZXh0ZnVuYyA9IDA7CisKKwkJZGV2cHJpdi0+aHd2ZXIgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kyMzBQX0hXVkVSKTsKKwkJaWYgKGRldnByaXYtPmh3dmVyIDwgdGhpc2JvYXJkLT5taW5faHd2ZXIpIHsKKwkJCXByaW50aygiY29tZWRpJWQ6ICVzIC0gYmFkIGhhcmR3YXJlIHZlcnNpb24gIgorCQkJCSItIGdvdCAldSwgbmVlZCAldVxuIiwgZGV2LT5taW5vciwKKwkJCQlkZXYtPmJvYXJkX25hbWUsIGRldnByaXYtPmh3dmVyLAorCQkJCXRoaXNib2FyZC0+bWluX2h3dmVyKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChkZXZwcml2LT5od3ZlciA+IDApIHsKKwkJCWlmICghdGhpc2JvYXJkLT5oYXZlX2RpbykgeworCQkJCS8qIE5vIERJTyBwb3J0cy4gIFJvdXRlIGNvdW50ZXJzJyBleHRlcm5hbCBnYXRlcworCQkJCSAqIHRvIHRoZSBFWFRUUklHIHNpZ25hbCAoUENJMjYwKyBwaW4gMTcpLgorCQkJCSAqIChPdGhlcndpc2UsIHRoZXkgd291bGQgYmUgcm91dGVkIHRvIERJTworCQkJCSAqIGlucHV0cyBQQzAsIFBDMSBhbmQgUEMyIHdoaWNoIGRvbid0IGV4aXN0CisJCQkJICogb24gUENJMjYwWytdLikgKi8KKwkJCQlleHRmdW5jIHw9IFBDSTIzMFBfRVhURlVOQ19HQVRfRVhUVFJJRzsKKwkJCX0KKwkJCWlmICgodGhpc2JvYXJkLT5hb19jaGFucyA+IDApCisJCQkJJiYgKGRldnByaXYtPmh3dmVyID49IDIpKSB7CisJCQkJLyogRW5hYmxlIERBQyBGSUZPIGZ1bmN0aW9uYWxpdHkuICovCisJCQkJZXh0ZnVuYyB8PSBQQ0kyMzBQMl9FWFRGVU5DX0RBQ0ZJRk87CisJCQl9CisJCX0KKwkJb3V0dyhleHRmdW5jLCBkZXYtPmlvYmFzZSArIFBDSTIzMFBfRVhURlVOQyk7CisJCWlmICgoZXh0ZnVuYyAmIFBDSTIzMFAyX0VYVEZVTkNfREFDRklGTykgIT0gMCkgeworCQkJLyogVGVtcG9yYXJpbHkgZW5hYmxlIERBQyBGSUZPLCByZXNldCBpdCBhbmQgZGlzYWJsZQorCQkJICogRklGTyB3cmFwYXJvdW5kLiAqLworCQkJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMzBQMl9EQUNfRklGT19FTgorCQkJCXwgUENJMjMwUDJfREFDX0ZJRk9fUkVTRVQsCisJCQkJZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKKwkJCS8qIENsZWFyIERBQyBGSUZPIGNoYW5uZWwgZW5hYmxlIHJlZ2lzdGVyLiAqLworCQkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTIzMFAyX0RBQ0VOKTsKKwkJCS8qIERpc2FibGUgREFDIEZJRk8uICovCisJCQlvdXR3KGRldnByaXYtPmRhY2NvbiwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKKwkJfQorCX0KKworCS8qIERpc2FibGUgYm9hcmQncyBpbnRlcnJ1cHRzLiAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKworCS8qIFNldCBBREMgdG8gYSByZWFzb25hYmxlIHN0YXRlLiAqLworCWRldnByaXYtPmFkY2cgPSAwOworCWRldnByaXYtPmFkY2NvbiA9IFBDSTIzMF9BRENfVFJJR19OT05FIHwgUENJMjMwX0FEQ19JTV9TRQorCQl8IFBDSTIzMF9BRENfSVJfQklQOworCW91dHcoMSA8PCAwLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENFTik7CisJb3V0dyhkZXZwcml2LT5hZGNnLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENHKTsKKwlvdXR3KGRldnByaXYtPmFkY2NvbiB8IFBDSTIzMF9BRENfRklGT19SRVNFVCwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfQURDQ09OKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KKwlpcnFfaGRsID0gY29tZWRpX3JlcXVlc3RfaXJxKGRldnByaXYtPnBjaV9kZXYtPmlycSwgcGNpMjMwX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJhbXBsY19wY2kyMzAiLCBkZXYpOworCWlmIChpcnFfaGRsIDwgMCkgeworCQlwcmludGsoImNvbWVkaSVkOiB1bmFibGUgdG8gcmVnaXN0ZXIgaXJxLCAiCisJCQkiY29tbWFuZHMgd2lsbCBub3QgYmUgYXZhaWxhYmxlICVkXG4iLCBkZXYtPm1pbm9yLAorCQkJZGV2cHJpdi0+cGNpX2Rldi0+aXJxKTsKKwl9IGVsc2UgeworCQlkZXYtPmlycSA9IGRldnByaXYtPnBjaV9kZXYtPmlycTsKKwkJcHJpbnRrKCJjb21lZGklZDogcmVnaXN0ZXJlZCBpcnEgJXVcbiIsIGRldi0+bWlub3IsCisJCQlkZXZwcml2LT5wY2lfZGV2LT5pcnEpOworCX0KKworCS8qCisJICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorCSAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKwkgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9ESUZGIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZwY2kyMzBfYWlfcmFuZ2U7CisJcy0+aW5zbl9yZWFkID0gJnBjaTIzMF9haV9yaW5zbjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAyNTY7CS8qIGJ1dCB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zLiAqLworCS8qIE9ubHkgcmVnaXN0ZXIgY29tbWFuZHMgaWYgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIGluc3RhbGxlZC4gKi8KKwlpZiAoaXJxX2hkbCA9PSAwKSB7CisJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOworCQlzLT5kb19jbWQgPSAmcGNpMjMwX2FpX2NtZDsKKwkJcy0+ZG9fY21kdGVzdCA9ICZwY2kyMzBfYWlfY21kdGVzdDsKKwkJcy0+Y2FuY2VsID0gcGNpMjMwX2FpX2NhbmNlbDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmFvX2NoYW5zID4gMCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW9fY2hhbnM7OworCQlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnBjaTIzMF9hb19yYW5nZTsKKwkJcy0+aW5zbl93cml0ZSA9ICZwY2kyMzBfYW9fd2luc247CisJCXMtPmluc25fcmVhZCA9ICZwY2kyMzBfYW9fcmluc247CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNib2FyZC0+YW9fY2hhbnM7CisJCS8qIE9ubHkgcmVnaXN0ZXIgY29tbWFuZHMgaWYgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzCisJCSAqIGluc3RhbGxlZC4gKi8KKwkJaWYgKGlycV9oZGwgPT0gMCkgeworCQkJZGV2LT53cml0ZV9zdWJkZXYgPSBzOworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfV1JJVEU7CisJCQlzLT5kb19jbWQgPSAmcGNpMjMwX2FvX2NtZDsKKwkJCXMtPmRvX2NtZHRlc3QgPSAmcGNpMjMwX2FvX2NtZHRlc3Q7CisJCQlzLT5jYW5jZWwgPSBwY2kyMzBfYW9fY2FuY2VsOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwlpZiAodGhpc2JvYXJkLT5oYXZlX2RpbykgeworCQlyYyA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLAorCQkJKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfUFBJX1hfQkFTRSkpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogYXR0YWNoZWRcbiIsIGRldi0+bWlub3IpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5zdWJkZXZpY2VzICYmIHRoaXNib2FyZC0+aGF2ZV9kaW8pCisJCS8qIENsZWFuIHVwIGRpbyBzdWJkZXZpY2UuICovCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAyKTsKKworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHJlc19tYXNrLAorCXVuc2lnbmVkIGNoYXIgb3duZXIpCit7CisJaW50IG9rOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBiOworCXVuc2lnbmVkIGludCBjbGFpbWVkOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlvayA9IDE7CisJY2xhaW1lZCA9IDA7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5yZXNfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlmb3IgKGIgPSAxLCBpID0gMDsgKGkgPCBOVU1fUkVTT1VSQ0VTKQorCQkmJiAocmVzX21hc2sgIT0gMCk7IGIgPDw9IDEsIGkrKykgeworCQlpZiAoKHJlc19tYXNrICYgYikgIT0gMCkgeworCQkJcmVzX21hc2sgJj0gfmI7CisJCQlpZiAoZGV2cHJpdi0+cmVzX293bmVyW2ldID09IE9XTkVSX05PTkUpIHsKKwkJCQlkZXZwcml2LT5yZXNfb3duZXJbaV0gPSBvd25lcjsKKwkJCQljbGFpbWVkIHw9IGI7CisJCQl9IGVsc2UgaWYgKGRldnByaXYtPnJlc19vd25lcltpXSAhPSBvd25lcikgeworCQkJCWZvciAoYiA9IDEsIGkgPSAwOyBjbGFpbWVkICE9IDA7IGIgPDw9IDEsIGkrKykgeworCQkJCQlpZiAoKGNsYWltZWQgJiBiKSAhPSAwKSB7CisJCQkJCQlkZXZwcml2LT5yZXNfb3duZXJbaV0KKwkJCQkJCQk9IE9XTkVSX05PTkU7CisJCQkJCQljbGFpbWVkICY9IH5iOworCQkJCQl9CisJCQkJfQorCQkJCW9rID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+cmVzX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfb25lX3Jlc291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJdW5zaWduZWQgY2hhciBvd25lcikKK3sKKwlyZXR1cm4gZ2V0X3Jlc291cmNlcyhkZXYsICgxVSA8PCByZXNvdXJjZSksIG93bmVyKTsKK30KKworc3RhdGljIHZvaWQgcHV0X3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHJlc19tYXNrLAorCXVuc2lnbmVkIGNoYXIgb3duZXIpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGI7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+cmVzX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJZm9yIChiID0gMSwgaSA9IDA7IChpIDwgTlVNX1JFU09VUkNFUykKKwkJJiYgKHJlc19tYXNrICE9IDApOyBiIDw8PSAxLCBpKyspIHsKKwkJaWYgKChyZXNfbWFzayAmIGIpICE9IDApIHsKKwkJCXJlc19tYXNrICY9IH5iOworCQkJaWYgKGRldnByaXYtPnJlc19vd25lcltpXSA9PSBvd25lcikgeworCQkJCWRldnByaXYtPnJlc19vd25lcltpXSA9IE9XTkVSX05PTkU7CisJCQl9CisJCX0KKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPnJlc19zcGlubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X29uZV9yZXNvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHJlc291cmNlLAorCXVuc2lnbmVkIGNoYXIgb3duZXIpCit7CisJcHV0X3Jlc291cmNlcyhkZXYsICgxVSA8PCByZXNvdXJjZSksIG93bmVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9hbGxfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFyIG93bmVyKQoreworCXB1dF9yZXNvdXJjZXMoZGV2LCAoMVUgPDwgTlVNX1JFU09VUkNFUykgLSAxLCBvd25lcik7Cit9CisKKy8qCisgKiAgQ09NRURJX1NVQkRfQUkgaW5zdHJ1Y3Rpb247CisgKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgbiwgaTsKKwl1bnNpZ25lZCBpbnQgY2hhbiwgcmFuZ2UsIGFyZWY7CisJdW5zaWduZWQgaW50IGdhaW5zaGlmdDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIHNob3J0IGFkY2NvbiwgYWRjZW47CisKKwkvKiBVbnBhY2sgY2hhbm5lbCBhbmQgcmFuZ2UuICovCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWFyZWYgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoYXJlZiA9PSBBUkVGX0RJRkYpIHsKKwkJLyogRGlmZmVyZW50aWFsLiAqLworCQlpZiAoY2hhbiA+PSBzLT5uX2NoYW4gLyAyKSB7CisJCQlEUFJJTlRLKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhaV9yaW5zbjogIgorCQkJCSJkaWZmZXJlbnRpYWwgY2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICIKKwkJCQkiMCB0byAldVxuIiwgZGV2LT5taW5vciwgKHMtPm5fY2hhbiAvIDIpIC0gMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIFVzZSBaMi1DVDIgYXMgYSBjb252ZXJzaW9uIHRyaWdnZXIgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4KKwkgKiBzb2Z0d2FyZSB0cmlnZ2VyLCBhcyBvdGhlcndpc2UgdHJpZ2dlcmluZyBvZiBkaWZmZXJlbnRpYWwgY2hhbm5lbHMKKwkgKiBkb2Vzbid0IHdvcmsgcHJvcGVybHkgZm9yIHNvbWUgdmVyc2lvbnMgb2YgUENJMjMwLzI2MC4gIEFsc28gc2V0CisJICogRklGTyBtb2RlIGJlY2F1c2UgdGhlIEFEQyBidXN5IGJpdCBvbmx5IHdvcmtzIGZvciBzb2Z0d2FyZSB0cmlnZ2Vycy4KKwkgKi8KKwlhZGNjb24gPSBQQ0kyMzBfQURDX1RSSUdfWjJDVDIgfCBQQ0kyMzBfQURDX0ZJRk9fRU47CisJLyogU2V0IFoyLUNUMiBvdXRwdXQgbG93IHRvIGF2b2lkIGFueSBmYWxzZSB0cmlnZ2Vycy4gKi8KKwlpODI1NF9zZXRfbW9kZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIDIsIEk4MjU0X01PREUwKTsKKwlkZXZwcml2LT5haV9iaXBvbGFyID0gcGNpMjMwX2FpX2JpcG9sYXJbcmFuZ2VdOworCWlmIChhcmVmID09IEFSRUZfRElGRikgeworCQkvKiBEaWZmZXJlbnRpYWwuICovCisJCWdhaW5zaGlmdCA9IGNoYW4gKiAyOworCQlpZiAoZGV2cHJpdi0+aHd2ZXIgPT0gMCkgeworCQkJLyogT3JpZ2luYWwgUENJMjMwLzI2MCBleHBlY3RzIGJvdGggaW5wdXRzIG9mIHRoZQorCQkJICogZGlmZmVyZW50aWFsIGNoYW5uZWwgdG8gYmUgZW5hYmxlZC4gKi8KKwkJCWFkY2VuID0gMyA8PCBnYWluc2hpZnQ7CisJCX0gZWxzZSB7CisJCQkvKiBQQ0kyMzArLzI2MCsgZXhwZWN0cyBvbmx5IG9uZSBpbnB1dCBvZiB0aGUKKwkJCSAqIGRpZmZlcmVudGlhbCBjaGFubmVsIHRvIGJlIGVuYWJsZWQuICovCisJCQlhZGNlbiA9IDEgPDwgZ2FpbnNoaWZ0OworCQl9CisJCWFkY2NvbiB8PSBQQ0kyMzBfQURDX0lNX0RJRjsKKwl9IGVsc2UgeworCQkvKiBTaW5nbGUgZW5kZWQuICovCisJCWFkY2VuID0gMSA8PCBjaGFuOworCQlnYWluc2hpZnQgPSBjaGFuICYgfjE7CisJCWFkY2NvbiB8PSBQQ0kyMzBfQURDX0lNX1NFOworCX0KKwlkZXZwcml2LT5hZGNnID0gKGRldnByaXYtPmFkY2cgJiB+KDMgPDwgZ2FpbnNoaWZ0KSkKKwkJfCAocGNpMjMwX2FpX2dhaW5bcmFuZ2VdIDw8IGdhaW5zaGlmdCk7CisJaWYgKGRldnByaXYtPmFpX2JpcG9sYXIpIHsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSVJfQklQOworCX0gZWxzZSB7CisJCWFkY2NvbiB8PSBQQ0kyMzBfQURDX0lSX1VOSTsKKwl9CisKKwkvKiBFbmFibGUgb25seSB0aGlzIGNoYW5uZWwgaW4gdGhlIHNjYW4gbGlzdCAtIG90aGVyd2lzZSBieSBkZWZhdWx0CisJICogd2UnbGwgZ2V0IG9uZSBzYW1wbGUgZnJvbSBlYWNoIGNoYW5uZWwuICovCisJb3V0dyhhZGNlbiwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfQURDRU4pOworCisJLyogU2V0IGdhaW4gZm9yIGNoYW5uZWwuICovCisJb3V0dyhkZXZwcml2LT5hZGNnLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENHKTsKKworCS8qIFNwZWNpZnkgdW5pL2JpcCwgc2UvZGlmZiwgY29udmVyc2lvbiBzb3VyY2UsIGFuZCByZXNldCBGSUZPLiAqLworCWRldnByaXYtPmFkY2NvbiA9IGFkY2NvbjsKKwlvdXR3KGFkY2NvbiB8IFBDSTIzMF9BRENfRklGT19SRVNFVCwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfQURDQ09OKTsKKworCS8qIENvbnZlcnQgbiBzYW1wbGVzICovCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiBUcmlnZ2VyIGNvbnZlcnNpb24gYnkgdG9nZ2xpbmcgWjItQ1QyIG91dHB1dCAoZmluaXNoIHdpdGgKKwkJICogb3V0cHV0IGhpZ2gpLiAqLworCQlpODI1NF9zZXRfbW9kZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIDIsCisJCQlJODI1NF9NT0RFMCk7CisJCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwKKwkJCUk4MjU0X01PREUxKTsKKworI2RlZmluZSBUSU1FT1VUIDEwMAorCQkvKiB3YWl0IGZvciBjb252ZXJzaW9uIHRvIGVuZCAqLworCQlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVDsgaSsrKSB7CisJCQlzdGF0dXMgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfQURDQ09OKTsKKwkJCWlmICghKHN0YXR1cyAmIFBDSTIzMF9BRENfRklGT19FTVBUWSkpCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCWlmIChpID09IFRJTUVPVVQpIHsKKwkJCS8qIHJ0X3ByaW50aygpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgcHJpbnRrKCkKKwkJCSAqIHdoZW5ldmVyIHRoZSBjb2RlIGNhbiBiZSBjYWxsZWQgZnJvbSByZWFsLXRpbWUuICovCisJCQlydF9wcmludGsoInRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQkvKiByZWFkIGRhdGEgKi8KKwkJZGF0YVtuXSA9IHBjaTIzMF9haV9yZWFkKGRldik7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gbjsKK30KKworLyoKKyAqICBDT01FRElfU1VCRF9BTyBpbnN0cnVjdGlvbnM7CisgKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiwgcmFuZ2U7CisKKwkvKiBVbnBhY2sgY2hhbm5lbCBhbmQgcmFuZ2UuICovCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLyogU2V0IHJhbmdlIC0gc2VlIGFuYWxvZ3VlIG91dHB1dCByYW5nZSB0YWJsZTsgMCA9PiB1bmlwb2xhciAxMFYsCisJICogMSA9PiBiaXBvbGFyICsvLTEwViByYW5nZSBzY2FsZSAqLworCWRldnByaXYtPmFvX2JpcG9sYXIgPSBwY2kyMzBfYW9fYmlwb2xhcltyYW5nZV07CisJb3V0dyhyYW5nZSwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiBXcml0ZSB2YWx1ZSB0byBEQUMgYW5kIHN0b3JlIGl0LiAqLworCQlwY2kyMzBfYW9fd3JpdGVfbm9maWZvKGRldiwgZGF0YVtpXSwgY2hhbik7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKyAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCitzdGF0aWMgaW50IHBjaTIzMF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IHBjaTIzMF9hb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIGNtZHRlc3QgdGVzdHMgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLgorCSAqIFVzaW5nIHRoZSBjbWR0ZXN0IGlvY3RsLCBhIHVzZXIgY2FuIGNyZWF0ZSBhIHZhbGlkIGNtZAorCSAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZXMgYnkgdGhlIGNtZCBpb2N0bC4KKwkgKgorCSAqIGNtZHRlc3QgcmV0dXJucyAxLDIsMyw0IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIFN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkLgorCSAqICJpbnZhbGlkIHNvdXJjZSIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfSU5UOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJaWYgKCh0aGlzYm9hcmQtPm1pbl9od3ZlciA+IDApICYmIChkZXZwcml2LT5od3ZlciA+PSAyKSkgeworCQkvKgorCQkgKiBGb3IgUENJMjMwKyBoYXJkd2FyZSB2ZXJzaW9uIDIgb253YXJkcywgYWxsb3cgZXh0ZXJuYWwKKwkJICogdHJpZ2dlciBmcm9tIEVYVFRSSUcvRVhUQ09OVkNMSyBpbnB1dCAoUENJMjMwKyBwaW4gMjUpLgorCQkgKgorCQkgKiBGSVhNRTogVGhlIHBlcm1pdHRlZCBzY2FuX2JlZ2luX3NyYyB2YWx1ZXMgc2hvdWxkbid0IGRlcGVuZAorCQkgKiBvbiBkZXZwcml2LT5od3ZlciAodGhlIGRldGVjdGVkIGNhcmQncyBhY3R1YWwgaGFyZHdhcmUKKwkJICogdmVyc2lvbikuICBUaGV5IHNob3VsZCBvbmx5IGRlcGVuZCBvbiB0aGlzYm9hcmQtPm1pbl9od3ZlcgorCQkgKiAodGhlIHN0YXRpYyBjYXBhYmlsaXRpZXMgb2YgdGhlIGNvbmZpZ3VyZWQgY2FyZCkuICBUbyBmaXgKKwkJICogaXQsIGEgbmV3IGNhcmQgbW9kZWwsIGUuZy4gInBjaTIzMCsyIiB3b3VsZCBoYXZlIHRvIGJlCisJCSAqIGRlZmluZWQgd2l0aCBtaW5faHd2ZXIgc2V0IHRvIDIuICBJdCBkb2Vzbid0IHNlZW0gd29ydGggaXQKKwkJICogZm9yIHRoaXMgYWxvbmUuICBBdCB0aGUgbW9tZW50LCBwbGVhc2UgY29uc2lkZXIKKwkJICogc2Nhbl9iZWdpbl9zcmM9PVRSSUdfRVhUIHN1cHBvcnQgdG8gYmUgYSBib251cyByYXRoZXIgdGhhbiBhCisJCSAqIGd1YXJhbnRlZSEKKwkJICovCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfSU5UIHwgVFJJR19FWFQ7CisJfSBlbHNlIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19JTlQ7CisJfQorCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogU3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKwkgKiAic291cmNlIGNvbmZsaWN0IiByZXR1cm5lZCBieSBjb21lZGlsaWIgdG8gdXNlciBtb2RlIHByb2Nlc3MKKwkgKiBpZiB0aGlzIGZhaWxzLiAqLworCisJLyogdGhlc2UgdGVzdHMgYXJlIHRydWUgaWYgbW9yZSB0aGFuIG9uZSBfc3JjIGJpdCBpcyBzZXQgKi8KKwlpZiAoKGNtZC0+c3RhcnRfc3JjICYgKGNtZC0+c3RhcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAmIChjbWQtPnNjYW5fYmVnaW5fc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5jb252ZXJ0X3NyYyAmIChjbWQtPmNvbnZlcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2VuZF9zcmMgJiAoY21kLT5zY2FuX2VuZF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnN0b3Bfc3JjICYgKGNtZC0+c3RvcF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIFN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUuCisJICogImludmFsaWQgYXJndW1lbnQiIHJldHVybmVkIGJ5IGNvbWVkaWxpYiB0byB1c2VyIG1vZGUgcHJvY2VzcworCSAqIGlmIHRoaXMgZmFpbHMuICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKyNkZWZpbmUgTUFYX1NQRUVEX0FPCTgwMDAJLyogODAwMCBucyA9PiAxMjUga0h6ICovCisjZGVmaW5lIE1JTl9TUEVFRF9BTwk0Mjk0OTY3Mjk1dQkvKiA0Mjk0OTY3Mjk1bnMgPSA0LjI5cyAqLworCQkJLyotIENvbWVkaSBsaW1pdCBkdWUgdG8gdW5zaWduZWQgaW50IGNtZC4gIERyaXZlciBsaW1pdAorCQkJICogPSAyXjE2ICgxNmJpdCAqIGNvdW50ZXIpICogMTAwMDAwMG5zICgxa0h6IG9uYm9hcmQKKwkJCSAqIGNsb2NrKSA9IDY1LjUzNnMgKi8KKworCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU1BFRURfQU8pIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBNQVhfU1BFRURfQU87CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IE1JTl9TUEVFRF9BTykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1JTl9TUEVFRF9BTzsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIEV4dGVybmFsIHRyaWdnZXIgLSBmb3IgUENJMjMwKyBoYXJkd2FyZSB2ZXJzaW9uIDIgb253YXJkcy4gKi8KKwkJLyogVHJpZ2dlciBudW1iZXIgbXVzdCBiZSAwLiAqLworCQlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiB+Q1JfRkxBR1NfTUFTSykgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IENPTUJJTkUoY21kLT5zY2FuX2JlZ2luX2FyZywgMCwKKwkJCQl+Q1JfRkxBR1NfTUFTSyk7CisJCQllcnIrKzsKKwkJfQorCQkvKiBUaGUgb25seSBmbGFncyBhbGxvd2VkIGFyZSBDUl9FREdFIGFuZCBDUl9JTlZFUlQuICBUaGUKKwkJICogQ1JfRURHRSBmbGFnIGlzIGlnbm9yZWQuICovCisJCWlmICgoY21kLT5zY2FuX2JlZ2luX2FyZworCQkJCSYgKENSX0ZMQUdTX01BU0sgJiB+KENSX0VER0UgfCBDUl9JTlZFUlQpKSkgIT0KKwkJCTApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCUNPTUJJTkUoY21kLT5zY2FuX2JlZ2luX2FyZywgMCwKKwkJCQlDUl9GTEFHU19NQVNLICYgfihDUl9FREdFIHwgQ1JfSU5WRVJUKSk7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBTdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzLgorCSAqICJhcmd1bWVudCBjb25mbGljdCIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJcGNpMjMwX25zX3RvX3NpbmdsZV90aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0IGlmIGl0IGV4aXN0cy4gKi8KKworCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMCkgeworCQllbnVtIHsKKwkJCXNlcV9lcnIgPSAoMSA8PCAwKSwKKwkJCXJhbmdlX2VyciA9ICgxIDw8IDEpCisJCX07CisJCXVuc2lnbmVkIGludCBlcnJvcnM7CisJCXVuc2lnbmVkIGludCBuOworCQl1bnNpZ25lZCBpbnQgY2hhbiwgcHJldl9jaGFuOworCQl1bnNpZ25lZCBpbnQgcmFuZ2UsIGZpcnN0X3JhbmdlOworCisJCXByZXZfY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJCWZpcnN0X3JhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJCWVycm9ycyA9IDA7CisJCWZvciAobiA9IDE7IG4gPCBjbWQtPmNoYW5saXN0X2xlbjsgbisrKSB7CisJCQljaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W25dKTsKKwkJCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtuXSk7CisJCQkvKiBDaGFubmVsIG51bWJlcnMgbXVzdCBzdHJpY3RseSBpbmNyZWFzZS4gKi8KKwkJCWlmIChjaGFuIDwgcHJldl9jaGFuKSB7CisJCQkJZXJyb3JzIHw9IHNlcV9lcnI7CisJCQl9CisJCQkvKiBSYW5nZXMgbXVzdCBiZSB0aGUgc2FtZS4gKi8KKwkJCWlmIChyYW5nZSAhPSBmaXJzdF9yYW5nZSkgeworCQkJCWVycm9ycyB8PSByYW5nZV9lcnI7CisJCQl9CisJCQlwcmV2X2NoYW4gPSBjaGFuOworCQl9CisJCWlmIChlcnJvcnMgIT0gMCkgeworCQkJZXJyKys7CisJCQlpZiAoKGVycm9ycyAmIHNlcV9lcnIpICE9IDApIHsKKwkJCQlEUFJJTlRLKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhb19jbWR0ZXN0OiAiCisJCQkJCSJjaGFubmVsIG51bWJlcnMgbXVzdCBpbmNyZWFzZVxuIiwKKwkJCQkJZGV2LT5taW5vcik7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIHJhbmdlX2VycikgIT0gMCkgeworCQkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFvX2NtZHRlc3Q6ICIKKwkJCQkJImNoYW5uZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSByYW5nZVxuIiwKKwkJCQkJZGV2LT5taW5vcik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTIzMF9hb19pbnR0cmlnX3NjYW5fYmVnaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBpbnQgdHJpZ19udW0pCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YW9fc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCWlmICh0ZXN0X2JpdChBT19DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKSkgeworCQkvKiBQZXJmb3JtIHNjYW4uICovCisJCWlmIChkZXZwcml2LT5od3ZlciA8IDIpIHsKKwkJCS8qIE5vdCB1c2luZyBEQUMgRklGTy4gKi8KKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT4KKwkJCQlhb19zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCQlwY2kyMzBfaGFuZGxlX2FvX25vZmlmbyhkZXYsIHMpOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCX0gZWxzZSB7CisJCQkvKiBVc2luZyBEQUMgRklGTy4gKi8KKwkJCS8qIFJlYWQgREFDU1dUUklHIHJlZ2lzdGVyIHRvIHRyaWdnZXIgY29udmVyc2lvbi4gKi8KKwkJCWludyhkZXYtPmlvYmFzZSArIFBDSTIzMFAyX0RBQ1NXVFJJRyk7CisJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+CisJCQkJYW9fc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCQl9CisJCS8qIERlbGF5LiAgU2hvdWxkIGRyaXZlciBiZSByZXNwb25zaWJsZSBmb3IgdGhpcz8gKi8KKwkJLyogWFhYIFRPRE86IFNlZSBpZiBEQUMgYnVzeSBiaXQgY2FuIGJlIHVzZWQuICovCisJCWNvbWVkaV91ZGVsYXkoOCk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9hb19zdGFydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlzZXRfYml0KEFPX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOworCWlmICghZGV2cHJpdi0+YW9fY29udGludW91cyAmJiAoZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9PSAwKSkgeworCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQlwY2kyMzBfYW9fc3RvcChkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9IGVsc2UgeworCQlpZiAoZGV2cHJpdi0+aHd2ZXIgPj0gMikgeworCQkJLyogVXNpbmcgREFDIEZJRk8uICovCisJCQl1bnNpZ25lZCBzaG9ydCBzY2FudHJpZzsKKwkJCWludCBydW47CisKKwkJCS8qIFByZWxvYWQgRklGTyBkYXRhLiAqLworCQkJcnVuID0gcGNpMjMwX2hhbmRsZV9hb19maWZvKGRldiwgcyk7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCWlmICghcnVuKSB7CisJCQkJLyogU3RvcHBlZC4gKi8KKwkJCQlyZXR1cm47CisJCQl9CisJCQkvKiBTZXQgc2NhbiB0cmlnZ2VyIHNvdXJjZS4gKi8KKwkJCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCQkJY2FzZSBUUklHX1RJTUVSOgorCQkJCXNjYW50cmlnID0gUENJMjMwUDJfREFDX1RSSUdfWjJDVDE7CisJCQkJYnJlYWs7CisJCQljYXNlIFRSSUdfRVhUOgorCQkJCS8qIFRyaWdnZXIgb24gRVhUVFJJRy9FWFRDT05WQ0xLIHBpbi4gKi8KKwkJCQlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiBDUl9JTlZFUlQpID09IDApIHsKKwkJCQkJLyogK3ZlIGVkZ2UgKi8KKwkJCQkJc2NhbnRyaWcgPSBQQ0kyMzBQMl9EQUNfVFJJR19FWFRQOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIC12ZSBlZGdlICovCisJCQkJCXNjYW50cmlnID0gUENJMjMwUDJfREFDX1RSSUdfRVhUTjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFRSSUdfSU5UOgorCQkJCXNjYW50cmlnID0gUENJMjMwUDJfREFDX1RSSUdfU1c7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIFNob3VsZG4ndCBnZXQgaGVyZS4gKi8KKwkJCQlzY2FudHJpZyA9IFBDSTIzMFAyX0RBQ19UUklHX05PTkU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZXZwcml2LT5kYWNjb24gPSAoZGV2cHJpdi0+ZGFjY29uCisJCQkJJiB+UENJMjMwUDJfREFDX1RSSUdfTUFTSykgfCBzY2FudHJpZzsKKwkJCW91dHcoZGV2cHJpdi0+ZGFjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCisJCX0KKwkJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJCWNhc2UgVFJJR19USU1FUjoKKwkJCWlmIChkZXZwcml2LT5od3ZlciA8IDIpIHsKKwkJCQkvKiBOb3QgdXNpbmcgREFDIEZJRk8uICovCisJCQkJLyogRW5hYmxlIENUMSB0aW1lciBpbnRlcnJ1cHQuICovCisJCQkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssCisJCQkJCWlycWZsYWdzKTsKKwkJCQlkZXZwcml2LT5pbnRfZW4gfD0gUENJMjMwX0lOVF9aQ0xLX0NUMTsKKwkJCQlkZXZwcml2LT5pZXIgfD0gUENJMjMwX0lOVF9aQ0xLX0NUMTsKKwkJCQlvdXRiKGRldnByaXYtPmllciwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwkJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+CisJCQkJCWlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCQkJfQorCQkJLyogU2V0IENUMSBnYXRlIGhpZ2ggdG8gc3RhcnQgY291bnRpbmcuICovCisJCQlvdXRiKEdBVF9DT05GSUcoMSwgR0FUX1ZDQyksCisJCQkJZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX0lOVDoKKwkJCWFzeW5jLT5pbnR0cmlnID0gcGNpMjMwX2FvX2ludHRyaWdfc2Nhbl9iZWdpbjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChkZXZwcml2LT5od3ZlciA+PSAyKSB7CisJCQkvKiBVc2luZyBEQUMgRklGTy4gIEVuYWJsZSBEQUMgRklGTyBpbnRlcnJ1cHQuICovCisJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywKKwkJCQlpcnFmbGFncyk7CisJCQlkZXZwcml2LT5pbnRfZW4gfD0gUENJMjMwUDJfSU5UX0RBQzsKKwkJCWRldnByaXYtPmllciB8PSBQQ0kyMzBQMl9JTlRfREFDOworCQkJb3V0YihkZXZwcml2LT5pZXIsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfSU5UX1NDRSk7CisJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLAorCQkJCWlycWZsYWdzKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwY2kyMzBfYW9faW50dHJpZ19zdGFydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnX251bSkKK3sKKwlpZiAodHJpZ19udW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTExGVU5DOworCXBjaTIzMF9hb19zdGFydChkZXYsIHMpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIHNob3J0IGRhY2NvbjsKKwl1bnNpZ25lZCBpbnQgcmFuZ2U7CisKKwkvKiBHZXQgdGhlIGNvbW1hbmQuICovCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBDbGFpbSBaMi1DVDEuICovCisJCWlmICghZ2V0X29uZV9yZXNvdXJjZShkZXYsIFJFU19aMkNUMSwgT1dORVJfQU9DTUQpKSB7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJLyogR2V0IG51bWJlciBvZiBzY2FucyByZXF1aXJlZC4gKi8KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFvX3NjYW5fY291bnQgPSBjbWQtPnN0b3BfYXJnOworCQlkZXZwcml2LT5hb19jb250aW51b3VzID0gMDsKKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUsIHVzZXIgY2FsbHMgY2FuY2VsLiAqLworCQlkZXZwcml2LT5hb19zY2FuX2NvdW50ID0gMDsKKwkJZGV2cHJpdi0+YW9fY29udGludW91cyA9IDE7CisJfQorCisJLyogU2V0IHJhbmdlIC0gc2VlIGFuYWxvZ3VlIG91dHB1dCByYW5nZSB0YWJsZTsgMCA9PiB1bmlwb2xhciAxMFYsCisJICogMSA9PiBiaXBvbGFyICsvLTEwViByYW5nZSBzY2FsZSAqLworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJZGV2cHJpdi0+YW9fYmlwb2xhciA9IHBjaTIzMF9hb19iaXBvbGFyW3JhbmdlXTsKKwlkYWNjb24gPSBkZXZwcml2LT5hb19iaXBvbGFyID8gUENJMjMwX0RBQ19PUl9CSVAgOiBQQ0kyMzBfREFDX09SX1VOSTsKKwkvKiBVc2UgREFDIEZJRk8gZm9yIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzLiAqLworCWlmIChkZXZwcml2LT5od3ZlciA+PSAyKSB7CisJCXVuc2lnbmVkIHNob3J0IGRhY2VuOworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlkYWNlbiA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlkYWNlbiB8PSAxIDw8IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCX0KKwkJLyogU2V0IGNoYW5uZWwgc2NhbiBsaXN0LiAqLworCQlvdXR3KGRhY2VuLCBkZXYtPmlvYmFzZSArIFBDSTIzMFAyX0RBQ0VOKTsKKwkJLyoKKwkJICogRW5hYmxlIERBQyBGSUZPLgorCQkgKiBTZXQgREFDIHNjYW4gc291cmNlIHRvICdub25lJy4KKwkJICogU2V0IERBQyBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIHRvICdub3QgaGFsZiBmdWxsJy4KKwkJICogUmVzZXQgREFDIEZJRk8gYW5kIGNsZWFyIHVuZGVycnVuLgorCQkgKgorCQkgKiBOLkIuIERBQyBGSUZPIGludGVycnVwdHMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZC4KKwkJICovCisJCWRhY2NvbiB8PSBQQ0kyMzBQMl9EQUNfRklGT19FTiB8IFBDSTIzMFAyX0RBQ19GSUZPX1JFU0VUCisJCQl8IFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0NMRUFSCisJCQl8IFBDSTIzMFAyX0RBQ19UUklHX05PTkUgfCBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTkhBTEY7CisJfQorCisJLyogU2V0IERBQ0NPTi4gKi8KKwlvdXR3KGRhY2NvbiwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKKwkvKiBQcmVzZXJ2ZSBtb3N0IG9mIERBQ0NPTiBhcGFydCBmcm9tIHdyaXRlLW9ubHksIHRyYW5zaWVudCBiaXRzLiAqLworCWRldnByaXYtPmRhY2NvbiA9IGRhY2NvbgorCQkmIH4oUENJMjMwUDJfREFDX0ZJRk9fUkVTRVQgfCBQQ0kyMzBQMl9EQUNfRklGT19VTkRFUlJVTl9DTEVBUik7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8qIFNldCB0aGUgY291bnRlciB0aW1lciAxIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBmcmVxdWVuY3kuICovCisJCS8qIGNtZC0+c2Nhbl9iZWdpbl9hcmcgaXMgc2FtcGxpbmcgcGVyaW9kIGluIG5zICovCisJCS8qIGdhdGUgaXQgb2ZmIGZvciBub3cuICovCisJCW91dGIoR0FUX0NPTkZJRygxLCBHQVRfR05EKSwKKwkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQlwY2kyMzBfY3Rfc2V0dXBfbnNfbW9kZShkZXYsIDEsIEk4MjU0X01PREUzLAorCQkJY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJfQorCisJLyogTi5CLiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCAqLworCXMtPmFzeW5jLT5pbnR0cmlnID0gcGNpMjMwX2FvX2ludHRyaWdfc3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2kyMzBfYWlfY2hlY2tfc2Nhbl9wZXJpb2Qoc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdW5zaWduZWQgaW50IG1pbl9zY2FuX3BlcmlvZCwgY2hhbmxpc3RfbGVuOworCWludCBlcnIgPSAwOworCisJY2hhbmxpc3RfbGVuID0gY21kLT5jaGFubGlzdF9sZW47CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDApIHsKKwkJY2hhbmxpc3RfbGVuID0gMTsKKwl9CisJbWluX3NjYW5fcGVyaW9kID0gY2hhbmxpc3RfbGVuICogY21kLT5jb252ZXJ0X2FyZzsKKwlpZiAoKG1pbl9zY2FuX3BlcmlvZCA8IGNoYW5saXN0X2xlbikKKwkJfHwgKG1pbl9zY2FuX3BlcmlvZCA8IGNtZC0+Y29udmVydF9hcmcpKSB7CisJCS8qIEFyaXRobWV0aWMgb3ZlcmZsb3cuICovCisJCW1pbl9zY2FuX3BlcmlvZCA9IFVJTlRfTUFYOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBtaW5fc2Nhbl9wZXJpb2QpIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IG1pbl9zY2FuX3BlcmlvZDsKKwkJZXJyKys7CisJfQorCisJcmV0dXJuICFlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogY21kdGVzdCB0ZXN0cyBhIHBhcnRpY3VsYXIgY29tbWFuZCB0byBzZWUgaWYgaXQgaXMgdmFsaWQuCisJICogVXNpbmcgdGhlIGNtZHRlc3QgaW9jdGwsIGEgdXNlciBjYW4gY3JlYXRlIGEgdmFsaWQgY21kCisJICogYW5kIHRoZW4gaGF2ZSBpdCBleGVjdXRlcyBieSB0aGUgY21kIGlvY3RsLgorCSAqCisJICogY21kdGVzdCByZXR1cm5zIDEsMiwzLDQsNSBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBTdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZC4KKwkgKiAiaW52YWxpZCBzb3VyY2UiIHJldHVybmVkIGJ5IGNvbWVkaWxpYiB0byB1c2VyIG1vZGUgcHJvY2VzcworCSAqIGlmIHRoaXMgZmFpbHMuICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfSU5UOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJLyogVW5mb3J0dW5hdGVseSwgd2UgY2Fubm90IHRyaWdnZXIgYSBzY2FuIG9mZiBhbiBleHRlcm5hbCBzb3VyY2UKKwkgKiBvbiB0aGUgUENJMjYwIGJvYXJkLCBzaW5jZSBpdCB1c2VzIHRoZSBQUElDMCAoRElPKSBpbnB1dCwgd2hpY2gKKwkgKiBpc24ndCBwcmVzZW50IG9uIHRoZSBQQ0kyNjAuICBGb3IgUENJMjYwKyB3ZSBjYW4gdXNlIHRoZQorCSAqIEVYVFRSSUcvRVhUQ09OVkNMSyBpbnB1dCBvbiBwaW4gMTcgaW5zdGVhZC4gKi8KKwlpZiAoKHRoaXNib2FyZC0+aGF2ZV9kaW8pIHx8ICh0aGlzYm9hcmQtPm1pbl9od3ZlciA+IDApKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1cgfCBUUklHX1RJTUVSIHwgVFJJR19JTlQKKwkJCXwgVFJJR19FWFQ7CisJfSBlbHNlIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVyB8IFRSSUdfVElNRVIgfCBUUklHX0lOVDsKKwl9CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19JTlQgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBTdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZQorCSAqICJzb3VyY2UgY29uZmxpY3QiIHJldHVybmVkIGJ5IGNvbWVkaWxpYiB0byB1c2VyIG1vZGUgcHJvY2VzcworCSAqIGlmIHRoaXMgZmFpbHMuICovCisKKwkvKiB0aGVzZSB0ZXN0cyBhcmUgdHJ1ZSBpZiBtb3JlIHRoYW4gb25lIF9zcmMgYml0IGlzIHNldCAqLworCWlmICgoY21kLT5zdGFydF9zcmMgJiAoY21kLT5zdGFydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjICYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPmNvbnZlcnRfc3JjICYgKGNtZC0+Y29udmVydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fZW5kX3NyYyAmIChjbWQtPnNjYW5fZW5kX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c3RvcF9zcmMgJiAoY21kLT5zdG9wX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKworCS8qIElmIHNjYW5fYmVnaW5fc3JjIGlzIG5vdCBUUklHX0ZPTExPVywgdGhlbiBhIG1vbm9zdGFibGUgd2lsbCBiZQorCSAqIHNldCB1cCB0byBnZW5lcmF0ZSBhIGZpeGVkIG51bWJlciBvZiB0aW1lZCBjb252ZXJzaW9uIHB1bHNlcy4gKi8KKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCSYmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogU3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZS4KKwkgKiAiaW52YWxpZCBhcmd1bWVudCIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRURfQUlfU0UJCTMyMDAJLyogUENJMjMwIFNFOiAgIDMyMDAgbnMgPT4gMzEyLjUga0h6ICovCisjZGVmaW5lIE1BWF9TUEVFRF9BSV9ESUZGCTgwMDAJLyogUENJMjMwIERJRkY6IDgwMDAgbnMgPT4gMTI1IGtIeiAqLworI2RlZmluZSBNQVhfU1BFRURfQUlfUExVUwk0MDAwCS8qIFBDSTIzMCs6ICAgICA0MDAwIG5zID0+IDI1MCBrSHogKi8KKyNkZWZpbmUgTUlOX1NQRUVEX0FJCTQyOTQ5NjcyOTV1CS8qIDQyOTQ5NjcyOTVucyA9IDQuMjlzICovCisJCQkvKi0gQ29tZWRpIGxpbWl0IGR1ZSB0byB1bnNpZ25lZCBpbnQgY21kLiAgRHJpdmVyIGxpbWl0CisJCQkgKiA9IDJeMTYgKDE2Yml0ICogY291bnRlcikgKiAxMDAwMDAwbnMgKDFrSHogb25ib2FyZAorCQkJICogY2xvY2spID0gNjUuNTM2cyAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl1bnNpZ25lZCBpbnQgbWF4X3NwZWVkX2FpOworCisJCWlmIChkZXZwcml2LT5od3ZlciA9PSAwKSB7CisJCQkvKiBQQ0kyMzAgb3IgUENJMjYwLiAgTWF4IHNwZWVkIGRlcGVuZHMgd2hldGhlcgorCQkJICogc2luZ2xlLWVuZGVkIG9yIHBzZXVkby1kaWZmZXJlbnRpYWwuICovCisJCQlpZiAoY21kLT5jaGFubGlzdCAmJiAoY21kLT5jaGFubGlzdF9sZW4gPiAwKSkgeworCQkJCS8qIFBlZWsgYW5hbG9ndWUgcmVmZXJlbmNlIG9mIGZpcnN0IGNoYW5uZWwuICovCisJCQkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFswXSkgPT0gQVJFRl9ESUZGKSB7CisJCQkJCW1heF9zcGVlZF9haSA9IE1BWF9TUEVFRF9BSV9ESUZGOworCQkJCX0gZWxzZSB7CisJCQkJCW1heF9zcGVlZF9haSA9IE1BWF9TUEVFRF9BSV9TRTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIE5vIGNoYW5uZWwgbGlzdC4gIEFzc3VtZSBzaW5nbGUtZW5kZWQuICovCisJCQkJbWF4X3NwZWVkX2FpID0gTUFYX1NQRUVEX0FJX1NFOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogUENJMjMwKyBvciBQQ0kyNjArLiAqLworCQkJbWF4X3NwZWVkX2FpID0gTUFYX1NQRUVEX0FJX1BMVVM7CisJCX0KKworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IG1heF9zcGVlZF9haSkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IG1heF9zcGVlZF9haTsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gTUlOX1NQRUVEX0FJKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gTUlOX1NQRUVEX0FJOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJLyoKKwkJICogZXh0ZXJuYWwgdHJpZ2dlcgorCQkgKgorCQkgKiBjb252ZXJ0X2FyZyA9PSAoQ1JfRURHRSB8IDApCisJCSAqICAgICAgICAgICAgICAgID0+IHRyaWdnZXIgb24gK3ZlIGVkZ2UuCisJCSAqIGNvbnZlcnRfYXJnID09IChDUl9FREdFIHwgQ1JfSU5WRVJUIHwgMCkKKwkJICogICAgICAgICAgICAgICAgPT4gdHJpZ2dlciBvbiAtdmUgZWRnZS4KKwkJICovCisJCWlmICgoY21kLT5jb252ZXJ0X2FyZyAmIENSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCS8qIFRyaWdnZXIgbnVtYmVyIG11c3QgYmUgMC4gKi8KKwkJCWlmICgoY21kLT5jb252ZXJ0X2FyZyAmIH5DUl9GTEFHU19NQVNLKSAhPSAwKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IENPTUJJTkUoY21kLT5jb252ZXJ0X2FyZywgMCwKKwkJCQkJfkNSX0ZMQUdTX01BU0spOworCQkJCWVycisrOworCQkJfQorCQkJLyogVGhlIG9ubHkgZmxhZ3MgYWxsb3dlZCBhcmUgQ1JfSU5WRVJUIGFuZCBDUl9FREdFLgorCQkJICogQ1JfRURHRSBpcyByZXF1aXJlZC4gKi8KKwkJCWlmICgoY21kLT5jb252ZXJ0X2FyZyAmIChDUl9GTEFHU19NQVNLICYgfkNSX0lOVkVSVCkpCisJCQkJIT0gQ1JfRURHRSkgeworCQkJCS8qIFNldCBDUl9FREdFLCBwcmVzZXJ2ZSBDUl9JTlZFUlQuICovCisJCQkJY21kLT5jb252ZXJ0X2FyZyA9CisJCQkJCUNPTUJJTkUoY21kLT5zdGFydF9hcmcsIChDUl9FREdFIHwgMCksCisJCQkJCUNSX0ZMQUdTX01BU0sgJiB+Q1JfSU5WRVJUKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMuICovCisJCQkvKiBjb252ZXJ0X2FyZyA9PSAwID0+IHRyaWdnZXIgb24gLXZlIGVkZ2UuICovCisJCQkvKiBjb252ZXJ0X2FyZyA9PSAxID0+IHRyaWdnZXIgb24gK3ZlIGVkZ2UuICovCisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IDEpIHsKKwkJCQkvKiBEZWZhdWx0IHRvIHRyaWdnZXIgb24gK3ZlIGVkZ2UuICovCisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IDE7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJLyogZXh0ZXJuYWwgInRyaWdnZXIiIHRvIGJlZ2luIGVhY2ggc2NhbgorCQkgKiBzY2FuX2JlZ2luX2FyZz09MCA9PiB1c2UgUFBDMCBpbnB1dCAtPiBnYXRlIG9mIENUMCAtPiBnYXRlCisJCSAqIG9mIENUMiAoc2FtcGxlIGNvbnZlcnQgdHJpZ2dlciBpcyBDVDIpICovCisJCWlmICgoY21kLT5zY2FuX2JlZ2luX2FyZyAmIH5DUl9GTEFHU19NQVNLKSAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gQ09NQklORShjbWQtPnNjYW5fYmVnaW5fYXJnLCAwLAorCQkJCX5DUl9GTEFHU19NQVNLKTsKKwkJCWVycisrOworCQl9CisJCS8qIFRoZSBvbmx5IGZsYWcgYWxsb3dlZCBpcyBDUl9FREdFLCB3aGljaCBpcyBpZ25vcmVkLiAqLworCQlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiBDUl9GTEFHU19NQVNLICYgfkNSX0VER0UpICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBDT01CSU5FKGNtZC0+c2Nhbl9iZWdpbl9hcmcsIDAsCisJCQkJQ1JfRkxBR1NfTUFTSyAmIH5DUl9FREdFKTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIGlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyogTi5CLiBjbWQtPmNvbnZlcnRfYXJnIGlzIGFsc28gVFJJR19USU1FUiAqLworCQlpZiAoIXBjaTIzMF9haV9jaGVja19zY2FuX3BlcmlvZChjbWQpKSB7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIFN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMuCisJICogImFyZ3VtZW50IGNvbmZsaWN0IiByZXR1cm5lZCBieSBjb21lZGlsaWIgdG8gdXNlciBtb2RlIHByb2Nlc3MKKwkgKiBpZiB0aGlzIGZhaWxzLiAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlwY2kyMzBfbnNfdG9fc2luZ2xlX3RpbWVyKCZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyogTi5CLiBjbWQtPmNvbnZlcnRfYXJnIGlzIGFsc28gVFJJR19USU1FUiAqLworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlwY2kyMzBfbnNfdG9fc2luZ2xlX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICghcGNpMjMwX2FpX2NoZWNrX3NjYW5fcGVyaW9kKGNtZCkpIHsKKwkJCS8qIFdhcyBiZWxvdyBtaW5pbXVtIHJlcXVpcmVkLiAgUm91bmQgdXAuICovCisJCQlwY2kyMzBfbnNfdG9fc2luZ2xlX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJCVRSSUdfUk9VTkRfVVApOworCQkJcGNpMjMwX2FpX2NoZWNrX3NjYW5fcGVyaW9kKGNtZCk7CisJCX0KKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvKiBTdGVwIDU6IGNoZWNrIGNoYW5uZWwgbGlzdCBpZiBpdCBleGlzdHMuICovCisKKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDApIHsKKwkJZW51bSB7CisJCQlzZXFfZXJyID0gMSA8PCAwLAorCQkJcmFuZ2VwYWlyX2VyciA9IDEgPDwgMSwKKwkJCXBvbGFyaXR5X2VyciA9IDEgPDwgMiwKKwkJCWFyZWZfZXJyID0gMSA8PCAzLAorCQkJZGlmZmNoYW5fZXJyID0gMSA8PCA0LAorCQkJYnVnZ3lfY2hhbjBfZXJyID0gMSA8PCA1CisJCX07CisJCXVuc2lnbmVkIGludCBlcnJvcnM7CisJCXVuc2lnbmVkIGludCBjaGFuLCBwcmV2X2NoYW47CisJCXVuc2lnbmVkIGludCByYW5nZSwgcHJldl9yYW5nZTsKKwkJdW5zaWduZWQgaW50IHBvbGFyaXR5LCBwcmV2X3BvbGFyaXR5OworCQl1bnNpZ25lZCBpbnQgYXJlZiwgcHJldl9hcmVmOworCQl1bnNpZ25lZCBpbnQgc3Vic2VxX2xlbjsKKwkJdW5zaWduZWQgaW50IG47CisKKwkJc3Vic2VxX2xlbiA9IDA7CisJCWVycm9ycyA9IDA7CisJCXByZXZfY2hhbiA9IHByZXZfYXJlZiA9IHByZXZfcmFuZ2UgPSBwcmV2X3BvbGFyaXR5ID0gMDsKKwkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKTsKKwkJCWFyZWYgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJcG9sYXJpdHkgPSBwY2kyMzBfYWlfYmlwb2xhcltyYW5nZV07CisJCQkvKiBPbmx5IHRoZSBmaXJzdCBoYWxmIG9mIHRoZSBjaGFubmVscyBhcmUgYXZhaWxhYmxlIGlmCisJCQkgKiBkaWZmZXJlbnRpYWwuICAoVGhlc2UgYXJlIHJlbWFwcGVkIGluIHNvZnR3YXJlLiAgSW4KKwkJCSAqIGhhcmR3YXJlLCBvbmx5IHRoZSBldmVuIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUuKSAqLworCQkJaWYgKChhcmVmID09IEFSRUZfRElGRikKKwkJCQkmJiAoY2hhbiA+PSAocy0+bl9jaGFuIC8gMikpKSB7CisJCQkJZXJyb3JzIHw9IGRpZmZjaGFuX2VycjsKKwkJCX0KKwkJCWlmIChuID4gMCkgeworCQkJCS8qIENoYW5uZWwgbnVtYmVycyBtdXN0IHN0cmljdGx5IGluY3JlYXNlIG9yCisJCQkJICogc3Vic2VxdWVuY2UgbXVzdCByZXBlYXQgZXhhY3RseS4gKi8KKwkJCQlpZiAoKGNoYW4gPD0gcHJldl9jaGFuKQorCQkJCQkmJiAoc3Vic2VxX2xlbiA9PSAwKSkgeworCQkJCQlzdWJzZXFfbGVuID0gbjsKKwkJCQl9CisJCQkJaWYgKChzdWJzZXFfbGVuID4gMCkKKwkJCQkJJiYgKGNtZC0+Y2hhbmxpc3Rbbl0gIT0KKwkJCQkJCWNtZC0+Y2hhbmxpc3RbbiAlCisJCQkJCQkJc3Vic2VxX2xlbl0pKSB7CisJCQkJCWVycm9ycyB8PSBzZXFfZXJyOworCQkJCX0KKwkJCQkvKiBDaGFubmVscyBtdXN0IGhhdmUgc2FtZSBBUkVGLiAqLworCQkJCWlmIChhcmVmICE9IHByZXZfYXJlZikgeworCQkJCQllcnJvcnMgfD0gYXJlZl9lcnI7CisJCQkJfQorCQkJCS8qIENoYW5uZWwgcmFuZ2VzIG11c3QgaGF2ZSBzYW1lIHBvbGFyaXR5LiAqLworCQkJCWlmIChwb2xhcml0eSAhPSBwcmV2X3BvbGFyaXR5KSB7CisJCQkJCWVycm9ycyB8PSBwb2xhcml0eV9lcnI7CisJCQkJfQorCQkJCS8qIFNpbmdsZS1lbmRlZCBjaGFubmVsIHBhaXJzIG11c3QgaGF2ZSBzYW1lCisJCQkJICogcmFuZ2UuICAqLworCQkJCWlmICgoYXJlZiAhPSBBUkVGX0RJRkYpCisJCQkJCSYmICgoKGNoYW4gXiBwcmV2X2NoYW4pICYgfjEpID09IDApCisJCQkJCSYmIChyYW5nZSAhPSBwcmV2X3JhbmdlKSkgeworCQkJCQllcnJvcnMgfD0gcmFuZ2VwYWlyX2VycjsKKwkJCQl9CisJCQl9CisJCQlwcmV2X2NoYW4gPSBjaGFuOworCQkJcHJldl9yYW5nZSA9IHJhbmdlOworCQkJcHJldl9hcmVmID0gYXJlZjsKKwkJCXByZXZfcG9sYXJpdHkgPSBwb2xhcml0eTsKKwkJfQorCQlpZiAoc3Vic2VxX2xlbiA9PSAwKSB7CisJCQkvKiBTdWJzZXF1ZW5jZSBpcyB3aG9sZSBzZXF1ZW5jZS4gKi8KKwkJCXN1YnNlcV9sZW4gPSBuOworCQl9CisJCS8qIElmIGNoYW5uZWwgbGlzdCBpcyBhIHJlcGVhdGluZyBzdWJzZXF1ZW5jZSwgbmVlZCBhIHdob2xlCisJCSAqIG51bWJlciBvZiByZXBlYXRzLiAqLworCQlpZiAoKG4gJSBzdWJzZXFfbGVuKSAhPSAwKSB7CisJCQllcnJvcnMgfD0gc2VxX2VycjsKKwkJfQorCQlpZiAoKGRldnByaXYtPmh3dmVyID4gMCkgJiYgKGRldnByaXYtPmh3dmVyIDwgNCkpIHsKKwkJCS8qCisJCQkgKiBCdWdneSBQQ0kyMzArIG9yIFBDSTI2MCsgcmVxdWlyZXMgY2hhbm5lbCAwIHRvIGJlCisJCQkgKiAoZmlyc3QpIGluIHRoZSBzZXF1ZW5jZSBpZiB0aGUgc2VxdWVuY2UgY29udGFpbnMKKwkJCSAqIG1vcmUgdGhhbiBvbmUgY2hhbm5lbC4gIEhhcmR3YXJlIHZlcnNpb25zIDEgYW5kIDIKKwkJCSAqIGhhdmUgdGhlIGJ1Zy4gIFRoZXJlIGlzIG5vIGhhcmR3YXJlIHZlcnNpb24gMy4KKwkJCSAqCisJCQkgKiBBY3R1YWxseSwgdGhlcmUgYXJlIHR3byBmaXJtd2FyZXMgdGhhdCByZXBvcnQKKwkJCSAqIHRoZW1zZWx2ZXMgYXMgaGFyZHdhcmUgdmVyc2lvbiAxICh0aGUgYm9hcmRzCisJCQkgKiBoYXZlIGRpZmZlcmVudCBBREMgY2hpcHMgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQKKwkJCSAqIHRpbWluZyByZXF1aXJlbWVudHMsIHdoaWNoIHdhcyBzdXBwb3NlZCB0byBiZQorCQkJICogaW52aXNpYmxlIHRvIHNvZnR3YXJlKS4gIFRoZSBmaXJzdCBvbmUgZG9lc24ndAorCQkJICogc2VlbSB0byBoYXZlIHRoZSBidWcsIGJ1dCB0aGUgc2Vjb25kIG9uZQorCQkJICogZG9lcywgYW5kIHdlIGNhbid0IHRlbGwgdGhlbSBhcGFydCEKKwkJCSAqLworCQkJaWYgKChzdWJzZXFfbGVuID4gMSkKKwkJCQkmJiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSAhPSAwKSkgeworCQkJCWVycm9ycyB8PSBidWdneV9jaGFuMF9lcnI7CisJCQl9CisJCX0KKwkJaWYgKGVycm9ycyAhPSAwKSB7CisJCQllcnIrKzsKKwkJCWlmICgoZXJyb3JzICYgc2VxX2VycikgIT0gMCkgeworCQkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFpX2NtZHRlc3Q6ICIKKwkJCQkJImNoYW5uZWwgbnVtYmVycyBtdXN0IGluY3JlYXNlIG9yICIKKwkJCQkJInNlcXVlbmNlIG11c3QgcmVwZWF0IGV4YWN0bHlcbiIsCisJCQkJCWRldi0+bWlub3IpOworCQkJfQorCQkJaWYgKChlcnJvcnMgJiByYW5nZXBhaXJfZXJyKSAhPSAwKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYWlfY21kdGVzdDogIgorCQkJCQkic2luZ2xlLWVuZGVkIGNoYW5uZWwgcGFpcnMgbXVzdCAiCisJCQkJCSJoYXZlIHRoZSBzYW1lIHJhbmdlXG4iLCBkZXYtPm1pbm9yKTsKKwkJCX0KKwkJCWlmICgoZXJyb3JzICYgcG9sYXJpdHlfZXJyKSAhPSAwKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYWlfY21kdGVzdDogIgorCQkJCQkiY2hhbm5lbCBzZXF1ZW5jZSByYW5nZXMgbXVzdCBiZSBhbGwgIgorCQkJCQkiYmlwb2xhciBvciBhbGwgdW5pcG9sYXJcbiIsCisJCQkJCWRldi0+bWlub3IpOworCQkJfQorCQkJaWYgKChlcnJvcnMgJiBhcmVmX2VycikgIT0gMCkgeworCQkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFpX2NtZHRlc3Q6ICIKKwkJCQkJImNoYW5uZWwgc2VxdWVuY2UgYW5hbG9ndWUgcmVmZXJlbmNlcyAiCisJCQkJCSJtdXN0IGJlIGFsbCB0aGUgc2FtZSAoc2luZ2xlLWVuZGVkICIKKwkJCQkJIm9yIGRpZmZlcmVudGlhbClcbiIsIGRldi0+bWlub3IpOworCQkJfQorCQkJaWYgKChlcnJvcnMgJiBkaWZmY2hhbl9lcnIpICE9IDApIHsKKwkJCQlEUFJJTlRLKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhaV9jbWR0ZXN0OiAiCisJCQkJCSJkaWZmZXJlbnRpYWwgY2hhbm5lbCBudW1iZXIgb3V0IG9mICIKKwkJCQkJInJhbmdlIDAgdG8gJXVcbiIsIGRldi0+bWlub3IsCisJCQkJCShzLT5uX2NoYW4gLyAyKSAtIDEpOworCQkJfQorCQkJaWYgKChlcnJvcnMgJiBidWdneV9jaGFuMF9lcnIpICE9IDApIHsKKwkJCQkvKiBVc2UgcHJpbnRrIGluc3RlYWQgb2YgRFBSSU5USyBoZXJlLiAqLworCQkJCXByaW50aygiY29tZWRpOiBjb21lZGklZDogYW1wbGNfcGNpMjMwOiAiCisJCQkJCSJhaV9jbWR0ZXN0OiBCdWdneSBQQ0kyMzArLzI2MCsgIgorCQkJCQkiaC93IHZlcnNpb24gJXUgcmVxdWlyZXMgZmlyc3QgY2hhbm5lbCAiCisJCQkJCSJvZiBtdWx0aS1jaGFubmVsIHNlcXVlbmNlIHRvIGJlIDAgIgorCQkJCQkiKGNvcnJlY3RlZCBpbiBoL3cgdmVyc2lvbiA0KVxuIiwKKwkJCQkJZGV2LT5taW5vciwgZGV2cHJpdi0+aHd2ZXIpOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX2FpX3VwZGF0ZV9maWZvX3RyaWdnZXJfbGV2ZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgc2NhbmxlbiA9IGNtZC0+c2Nhbl9lbmRfYXJnOworCXVuc2lnbmVkIGludCB3YWtlOworCXVuc2lnbmVkIHNob3J0IHRyaWdsZXY7CisJdW5zaWduZWQgc2hvcnQgYWRjY29uOworCisJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgIT0gMCkgeworCQkvKiBXYWtlIGF0IGVuZCBvZiBzY2FuLiAqLworCQl3YWtlID0gc2NhbmxlbiAtIGRldnByaXYtPmFpX3NjYW5fcG9zOworCX0gZWxzZSB7CisJCWlmIChkZXZwcml2LT5haV9jb250aW51b3VzCisJCQl8fCAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudAorCQkJCT49IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMKQorCQkJfHwgKHNjYW5sZW4gPj0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEwpKSB7CisJCQl3YWtlID0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEw7CisJCX0gZWxzZSB7CisJCQl3YWtlID0gKGRldnByaXYtPmFpX3NjYW5fY291bnQgKiBzY2FubGVuKQorCQkJCS0gZGV2cHJpdi0+YWlfc2Nhbl9wb3M7CisJCX0KKwl9CisJaWYgKHdha2UgPj0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEwpIHsKKwkJdHJpZ2xldiA9IFBDSTIzMF9BRENfSU5UX0ZJRk9fSEFMRjsKKwl9IGVsc2UgeworCQlpZiAoKHdha2UgPiAxKSAmJiAoZGV2cHJpdi0+aHd2ZXIgPiAwKSkgeworCQkJLyogUENJMjMwKy8yNjArIHByb2dyYW1tYWJsZSBGSUZPIGludGVycnVwdCBsZXZlbC4gKi8KKwkJCWlmIChkZXZwcml2LT5hZGNmaWZvdGhyZXNoICE9IHdha2UpIHsKKwkJCQlkZXZwcml2LT5hZGNmaWZvdGhyZXNoID0gd2FrZTsKKwkJCQlvdXR3KHdha2UsIGRldi0+aW9iYXNlICsgUENJMjMwUF9BRENGRlRIKTsKKwkJCX0KKwkJCXRyaWdsZXYgPSBQQ0kyMzBQX0FEQ19JTlRfRklGT19USFJFU0g7CisJCX0gZWxzZSB7CisJCQl0cmlnbGV2ID0gUENJMjMwX0FEQ19JTlRfRklGT19ORU1QVFk7CisJCX0KKwl9CisJYWRjY29uID0gKGRldnByaXYtPmFkY2NvbiAmIH5QQ0kyMzBfQURDX0lOVF9GSUZPX01BU0spIHwgdHJpZ2xldjsKKwlpZiAoYWRjY29uICE9IGRldnByaXYtPmFkY2NvbikgeworCQlkZXZwcml2LT5hZGNjb24gPSBhZGNjb247CisJCW91dHcoYWRjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCX0KK30KKworc3RhdGljIGludCBwY2kyMzBfYWlfaW50dHJpZ19jb252ZXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlpZiAodHJpZ19udW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFpX3N0b3Bfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlpZiAodGVzdF9iaXQoQUlfQ01EX1NUQVJURUQsICZkZXZwcml2LT5zdGF0ZSkpIHsKKwkJdW5zaWduZWQgaW50IGRlbGF5dXM7CisKKwkJLyogVHJpZ2dlciBjb252ZXJzaW9uIGJ5IHRvZ2dsaW5nIFoyLUNUMiBvdXRwdXQuICBGaW5pc2gKKwkJICogd2l0aCBvdXRwdXQgaGlnaC4gKi8KKwkJaTgyNTRfc2V0X21vZGUoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aMl9DVF9CQVNFLCAwLCAyLAorCQkJSTgyNTRfTU9ERTApOworCQlpODI1NF9zZXRfbW9kZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIDIsCisJCQlJODI1NF9NT0RFMSk7CisJCS8qIERlbGF5LiAgU2hvdWxkIGRyaXZlciBiZSByZXNwb25zaWJsZSBmb3IgdGhpcz8gIEFuCisJCSAqIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIHdhaXQgdW50aWwgY29udmVyc2lvbiBpcyBjb21wbGV0ZSwKKwkJICogYnV0IHdlIGNhbid0IHRlbGwgd2hlbiBpdCdzIGNvbXBsZXRlIGJlY2F1c2UgdGhlIEFEQyBidXN5CisJCSAqIGJpdCBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZyB3aGVuIEZJRk8gZW5hYmxlZCAoYW5kIHdoZW4KKwkJICogRklGTyBub3QgZW5hYmxlZCwgaXQgb25seSB3b3JrcyBmb3Igc29mdHdhcmUgdHJpZ2dlcnMpLiAqLworCQlpZiAoKChkZXZwcml2LT5hZGNjb24gJiBQQ0kyMzBfQURDX0lNX01BU0spCisJCQkJPT0gUENJMjMwX0FEQ19JTV9ESUYpCisJCQkmJiAoZGV2cHJpdi0+aHd2ZXIgPT0gMCkpIHsKKwkJCS8qIFBDSTIzMC8yNjAgaW4gZGlmZmVyZW50aWFsIG1vZGUgKi8KKwkJCWRlbGF5dXMgPSA4OworCQl9IGVsc2UgeworCQkJLyogc2luZ2xlLWVuZGVkIG9yIFBDSTIzMCsvMjYwKyAqLworCQkJZGVsYXl1cyA9IDQ7CisJCX0KKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFpX3N0b3Bfc3BpbmxvY2ssCisJCQlpcnFmbGFncyk7CisJCWNvbWVkaV91ZGVsYXkoZGVsYXl1cyk7CisJfSBlbHNlIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFpX3N0b3Bfc3BpbmxvY2ssCisJCQlpcnFmbGFncyk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FpX2ludHRyaWdfc2Nhbl9iZWdpbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCB0cmlnX251bSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXVuc2lnbmVkIGNoYXIgemdhdDsKKworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCWlmICh0ZXN0X2JpdChBSV9DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKSkgeworCQkvKiBUcmlnZ2VyIHNjYW4gYnkgd2FnZ2xpbmcgQ1QwIGdhdGUgc291cmNlLiAqLworCQl6Z2F0ID0gR0FUX0NPTkZJRygwLCBHQVRfR05EKTsKKwkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX1ZDQyk7CisJCW91dGIoemdhdCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5haV9zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX2FpX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1bnNpZ25lZCBzaG9ydCBjb252OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCisJc2V0X2JpdChBSV9DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKTsKKwlpZiAoIWRldnByaXYtPmFpX2NvbnRpbnVvdXMgJiYgKGRldnByaXYtPmFpX3NjYW5fY291bnQgPT0gMCkpIHsKKwkJLyogQW4gZW1wdHkgYWNxdWlzaXRpb24hICovCisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJcGNpMjMwX2FpX3N0b3AoZGV2LCBzKTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIEFEQyBGSUZPIHRyaWdnZXIgbGV2ZWwgaW50ZXJydXB0LiAqLworCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCQlkZXZwcml2LT5pbnRfZW4gfD0gUENJMjMwX0lOVF9BREM7CisJCWRldnByaXYtPmllciB8PSBQQ0kyMzBfSU5UX0FEQzsKKwkJb3V0YihkZXZwcml2LT5pZXIsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfSU5UX1NDRSk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCQkvKiBVcGRhdGUgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZSB3aGljaCBpcyBjdXJyZW50bHkgc2V0CisJCSAqIHRvIENUMiBvdXRwdXQsIHdoaWNoIGlzIGN1cnJlbnRseSBzdHVjayBoaWdoLiAqLworCQlzd2l0Y2ggKGNtZC0+Y29udmVydF9zcmMpIHsKKwkJZGVmYXVsdDoKKwkJCWNvbnYgPSBQQ0kyMzBfQURDX1RSSUdfTk9ORTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfVElNRVI6CisJCQkvKiBVc2luZyBDVDIgb3V0cHV0LiAqLworCQkJY29udiA9IFBDSTIzMF9BRENfVFJJR19aMkNUMjsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfRVhUOgorCQkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgQ1JfRURHRSkgIT0gMCkgeworCQkJCWlmICgoY21kLT5jb252ZXJ0X2FyZyAmIENSX0lOVkVSVCkgPT0gMCkgeworCQkJCQkvKiBUcmlnZ2VyIG9uICt2ZSBlZGdlLiAqLworCQkJCQljb252ID0gUENJMjMwX0FEQ19UUklHX0VYVFA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVHJpZ2dlciBvbiAtdmUgZWRnZS4gKi8KKwkJCQkJY29udiA9IFBDSTIzMF9BRENfVFJJR19FWFROOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovCisJCQkJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQkJCQkvKiBUcmlnZ2VyIG9uICt2ZSBlZGdlLiAqLworCQkJCQljb252ID0gUENJMjMwX0FEQ19UUklHX0VYVFA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVHJpZ2dlciBvbiAtdmUgZWRnZS4gKi8KKwkJCQkJY29udiA9IFBDSTIzMF9BRENfVFJJR19FWFROOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRSSUdfSU5UOgorCQkJLyogVXNlIENUMiBvdXRwdXQgZm9yIHNvZnR3YXJlIHRyaWdnZXIgZHVlIHRvIHByb2JsZW1zCisJCQkgKiBpbiBkaWZmZXJlbnRpYWwgbW9kZSBvbiBQQ0kyMzAvMjYwLiAqLworCQkJY29udiA9IFBDSTIzMF9BRENfVFJJR19aMkNUMjsKKwkJCWJyZWFrOworCQl9CisJCWRldnByaXYtPmFkY2NvbiA9IChkZXZwcml2LT5hZGNjb24gJiB+UENJMjMwX0FEQ19UUklHX01BU0spCisJCQl8IGNvbnY7CisJCW91dHcoZGV2cHJpdi0+YWRjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0lOVCkgeworCQkJYXN5bmMtPmludHRyaWcgPSBwY2kyMzBfYWlfaW50dHJpZ19jb252ZXJ0OworCQl9CisJCS8qIFVwZGF0ZSBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsLCB3aGljaCBpcyBjdXJyZW50bHkKKwkJICogc2V0IHRvICJmdWxsIi4gICovCisJCXBjaTIzMF9haV91cGRhdGVfZmlmb190cmlnZ2VyX2xldmVsKGRldiwgcyk7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJCS8qIFVwZGF0ZSB0aW1lciBnYXRlcy4gKi8KKwkJCXVuc2lnbmVkIGNoYXIgemdhdDsKKworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJCQkvKiBDb252ZXJzaW9uIHRpbWVyIENUMiBuZWVkcyB0byBiZSBnYXRlZCBieQorCQkJCSAqIGludmVydGVkIG91dHB1dCBvZiBtb25vc3RhYmxlIENUMi4gKi8KKwkJCQl6Z2F0ID0gR0FUX0NPTkZJRygyLCBHQVRfTk9VVE5NMik7CisJCQl9IGVsc2UgeworCQkJCS8qIENvbnZlcnNpb24gdGltZXIgQ1QyIG5lZWRzIHRvIGJlIGdhdGVkIG9uCisJCQkJICogY29udGludW91c2x5LiAqLworCQkJCXpnYXQgPSBHQVRfQ09ORklHKDIsIEdBVF9WQ0MpOworCQkJfQorCQkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwkJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CisJCQkJLyogU2V0IG1vbm9zdGFibGUgQ1QwIHRyaWdnZXIgc291cmNlLiAqLworCQkJCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCQkJCWRlZmF1bHQ6CisJCQkJCXpnYXQgPSBHQVRfQ09ORklHKDAsIEdBVF9WQ0MpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRSSUdfRVhUOgorCQkJCQkvKgorCQkJCQkgKiBGb3IgQ1QwIG9uIFBDSTIzMCwgdGhlIGV4dGVybmFsCisJCQkJCSAqIHRyaWdnZXIgKGdhdGUpIHNpZ25hbCBjb21lcyBmcm9tCisJCQkJCSAqIFBQQzAsIHdoaWNoIGlzIGNoYW5uZWwgMTYgb2YgdGhlIERJTworCQkJCQkgKiBzdWJkZXZpY2UuICBUaGUgYXBwbGljYXRpb24gbmVlZHMgdG8KKwkJCQkJICogY29uZmlndXJlIHRoaXMgYXMgYW4gaW5wdXQgaW4gb3JkZXIKKwkJCQkJICogdG8gdXNlIGl0IGFzIGFuIGV4dGVybmFsIHNjYW4KKwkJCQkJICogdHJpZ2dlci4KKwkJCQkJICovCisJCQkJCXpnYXQgPSBHQVRfQ09ORklHKDAsIEdBVF9FWFQpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRSSUdfVElNRVI6CisJCQkJCS8qCisJCQkJCSAqIE1vbm9zdGFibGUgQ1QwIHRyaWdnZXJlZCBieSByaXNpbmcKKwkJCQkJICogZWRnZSBvbiBpbnZlcnRlZCBvdXRwdXQgb2YgQ1QxCisJCQkJCSAqIChmYWxsaW5nIGVkZ2Ugb24gQ1QxKS4KKwkJCQkJICovCisJCQkJCXpnYXQgPSBHQVRfQ09ORklHKDAsIEdBVF9OT1VUTk0yKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUUklHX0lOVDoKKwkJCQkJLyoKKwkJCQkJICogTW9ub3N0YWJsZSBDVDAgaXMgdHJpZ2dlcmVkIGJ5CisJCQkJCSAqIGludHRyaWcgZnVuY3Rpb24gd2FnZ2xpbmcgdGhlIENUMAorCQkJCQkgKiBnYXRlIHNvdXJjZS4KKwkJCQkJICovCisJCQkJCXpnYXQgPSBHQVRfQ09ORklHKDAsIEdBVF9WQ0MpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwkJCQlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwkJCQljYXNlIFRSSUdfVElNRVI6CisJCQkJCS8qIFNjYW4gcGVyaW9kIHRpbWVyIENUMSBuZWVkcyB0byBiZQorCQkJCQkgKiBnYXRlZCBvbiB0byBzdGFydCBjb3VudGluZy4gKi8KKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMSwgR0FUX1ZDQyk7CisJCQkJCW91dGIoemdhdCwgZGV2cHJpdi0+aW9iYXNlMQorCQkJCQkJKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRSSUdfSU5UOgorCQkJCQlhc3luYy0+aW50dHJpZyA9CisJCQkJCQlwY2kyMzBfYWlfaW50dHJpZ19zY2FuX2JlZ2luOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0lOVCkgeworCQkJLyogTm8gbG9uZ2VyIG5lZWQgWjItQ1QyLiAqLworCQkJcHV0X29uZV9yZXNvdXJjZShkZXYsIFJFU19aMkNUMiwgT1dORVJfQUlDTUQpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHBjaTIzMF9haV9pbnR0cmlnX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTEZVTkM7CisJcGNpMjMwX2FpX3N0YXJ0KGRldiwgcyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMzBfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgaW50IGksIGNoYW4sIHJhbmdlLCBkaWZmOworCXVuc2lnbmVkIGludCByZXNfbWFzazsKKwl1bnNpZ25lZCBzaG9ydCBhZGNjb24sIGFkY2VuOworCXVuc2lnbmVkIGNoYXIgemdhdDsKKworCS8qIEdldCB0aGUgY29tbWFuZC4gKi8KKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoaWNoIHNoYXJlZCByZXNvdXJjZXMgYXJlIG5lZWRlZC4KKwkgKi8KKwlyZXNfbWFzayA9IDA7CisJLyogTmVlZCBaMi1DVDIgdG8gc3VwcGx5IGEgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZSBhdCBhIGhpZ2gKKwkgKiBsb2dpYyBsZXZlbCwgZXZlbiBpZiBub3QgZG9pbmcgdGltZWQgY29udmVyc2lvbnMuICovCisJcmVzX21hc2sgfD0gKDFVIDw8IFJFU19aMkNUMik7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJLyogVXNpbmcgWjItQ1QwIG1vbm9zdGFibGUgdG8gZ2F0ZSBaMi1DVDIgY29udmVyc2lvbiB0aW1lciAqLworCQlyZXNfbWFzayB8PSAoMVUgPDwgUkVTX1oyQ1QwKTsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJLyogVXNpbmcgWjItQ1QxIGZvciBzY2FuIGZyZXF1ZW5jeSAqLworCQkJcmVzX21hc2sgfD0gKDFVIDw8IFJFU19aMkNUMSk7CisJCX0KKwl9CisJLyogQ2xhaW0gcmVzb3VyY2VzLiAqLworCWlmICghZ2V0X3Jlc291cmNlcyhkZXYsIHJlc19tYXNrLCBPV05FUl9BSUNNRCkpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBHZXQgbnVtYmVyIG9mIHNjYW5zIHJlcXVpcmVkLiAqLworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CisJCWRldnByaXYtPmFpX2NvbnRpbnVvdXMgPSAwOworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSwgdXNlciBjYWxscyBjYW5jZWwuICovCisJCWRldnByaXYtPmFpX3NjYW5fY291bnQgPSAwOworCQlkZXZwcml2LT5haV9jb250aW51b3VzID0gMTsKKwl9CisJZGV2cHJpdi0+YWlfc2Nhbl9wb3MgPSAwOwkvKiBQb3NpdGlvbiB3aXRoaW4gc2Nhbi4gKi8KKworCS8qIFN0ZXBzOworCSAqIC0gU2V0IGNoYW5uZWwgc2NhbiBsaXN0LgorCSAqIC0gU2V0IGNoYW5uZWwgZ2FpbnMuCisJICogLSBFbmFibGUgYW5kIHJlc2V0IEZJRk8sIHNwZWNpZnkgdW5pL2JpcCwgc2UvZGlmZiwgYW5kIHNldAorCSAqICAgc3RhcnQgY29udmVyc2lvbiBzb3VyY2UgdG8gcG9pbnQgdG8gc29tZXRoaW5nIGF0IGEgaGlnaCBsb2dpYworCSAqICAgbGV2ZWwgKHdlIHVzZSB0aGUgb3V0cHV0IG9mIGNvdW50ZXIvdGltZXIgMiBmb3IgdGhpcyBwdXJwb3NlLgorCSAqIC0gUEFVU0UgdG8gYWxsb3cgdGhpbmdzIHRvIHNldHRsZSBkb3duLgorCSAqIC0gUmVzZXQgdGhlIEZJRk8gYWdhaW4gYmVjYXVzZSBpdCBuZWVkcyByZXNldHRpbmcgdHdpY2UgYW5kIHRoZXJlCisJICogICBtYXkgaGF2ZSBiZWVuIGEgZmFsc2UgY29udmVyc2lvbiB0cmlnZ2VyIG9uIHNvbWUgdmVyc2lvbnMgb2YKKwkgKiAgIFBDSTIzMC8yNjAgZHVlIHRvIHRoZSBzdGFydCBjb252ZXJzaW9uIHNvdXJjZSBiZWluZyBzZXQgdG8gYQorCSAqICAgaGlnaCBsb2dpYyBsZXZlbC4KKwkgKiAtIEVuYWJsZSBBREMgRklGTyBsZXZlbCBpbnRlcnJ1cHQuCisJICogLSBTZXQgYWN0dWFsIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2UgYW5kIEZJRk8gaW50ZXJydXB0IHRyaWdnZXIKKwkgKiAgIGxldmVsLgorCSAqIC0gSWYgY29udmVydF9zcmMgaXMgVFJJR19USU1FUiwgc2V0IHVwIHRoZSB0aW1lcnMuCisJICovCisKKwlhZGNjb24gPSBQQ0kyMzBfQURDX0ZJRk9fRU47CisJYWRjZW4gPSAwOworCisJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFswXSkgPT0gQVJFRl9ESUZGKSB7CisJCS8qIERpZmZlcmVudGlhbCAtIGFsbCBjaGFubmVscyBtdXN0IGJlIGRpZmZlcmVudGlhbC4gKi8KKwkJZGlmZiA9IDE7CisJCWFkY2NvbiB8PSBQQ0kyMzBfQURDX0lNX0RJRjsKKwl9IGVsc2UgeworCQkvKiBTaW5nbGUgZW5kZWQgLSBhbGwgY2hhbm5lbHMgbXVzdCBiZSBzaW5nbGUtZW5kZWQuICovCisJCWRpZmYgPSAwOworCQlhZGNjb24gfD0gUENJMjMwX0FEQ19JTV9TRTsKKwl9CisKKwlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCWRldnByaXYtPmFpX2JpcG9sYXIgPSBwY2kyMzBfYWlfYmlwb2xhcltyYW5nZV07CisJaWYgKGRldnByaXYtPmFpX2JpcG9sYXIpIHsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSVJfQklQOworCX0gZWxzZSB7CisJCWFkY2NvbiB8PSBQQ0kyMzBfQURDX0lSX1VOSTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGdhaW5zaGlmdDsKKworCQljaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKTsKKwkJaWYgKGRpZmYpIHsKKwkJCWdhaW5zaGlmdCA9IDIgKiBjaGFuOworCQkJaWYgKGRldnByaXYtPmh3dmVyID09IDApIHsKKwkJCQkvKiBPcmlnaW5hbCBQQ0kyMzAvMjYwIGV4cGVjdHMgYm90aCBpbnB1dHMgb2YKKwkJCQkgKiB0aGUgZGlmZmVyZW50aWFsIGNoYW5uZWwgdG8gYmUgZW5hYmxlZC4gKi8KKwkJCQlhZGNlbiB8PSAzIDw8IGdhaW5zaGlmdDsKKwkJCX0gZWxzZSB7CisJCQkJLyogUENJMjMwKy8yNjArIGV4cGVjdHMgb25seSBvbmUgaW5wdXQgb2YgdGhlCisJCQkJICogZGlmZmVyZW50aWFsIGNoYW5uZWwgdG8gYmUgZW5hYmxlZC4gKi8KKwkJCQlhZGNlbiB8PSAxIDw8IGdhaW5zaGlmdDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWdhaW5zaGlmdCA9IChjaGFuICYgfjEpOworCQkJYWRjZW4gfD0gMSA8PCBjaGFuOworCQl9CisJCWRldnByaXYtPmFkY2cgPSAoZGV2cHJpdi0+YWRjZyAmIH4oMyA8PCBnYWluc2hpZnQpKQorCQkJfCAocGNpMjMwX2FpX2dhaW5bcmFuZ2VdIDw8IGdhaW5zaGlmdCk7CisJfQorCisJLyogU2V0IGNoYW5uZWwgc2NhbiBsaXN0LiAqLworCW91dHcoYWRjZW4sIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0VOKTsKKworCS8qIFNldCBjaGFubmVsIGdhaW5zLiAqLworCW91dHcoZGV2cHJpdi0+YWRjZywgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfQURDRyk7CisKKwkvKiBTZXQgY291bnRlci90aW1lciAyIG91dHB1dCBoaWdoIGZvciB1c2UgYXMgdGhlIGluaXRpYWwgc3RhcnQKKwkgKiBjb252ZXJzaW9uIHNvdXJjZS4gKi8KKwlpODI1NF9zZXRfbW9kZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIDIsIEk4MjU0X01PREUxKTsKKworCS8qIFRlbXBvcmFyaWx5IHVzZSBDVDIgb3V0cHV0IGFzIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2UgYW5kCisJICogdGVtcG9yYXJpbHkgc2V0IEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgdG8gJ2Z1bGwnLiAqLworCWFkY2NvbiB8PSBQQ0kyMzBfQURDX0lOVF9GSUZPX0ZVTEwgfCBQQ0kyMzBfQURDX1RSSUdfWjJDVDI7CisKKwkvKiBFbmFibGUgYW5kIHJlc2V0IEZJRk8sIHNwZWNpZnkgRklGTyB0cmlnZ2VyIGxldmVsIGZ1bGwsIHNwZWNpZnkKKwkgKiB1bmkvYmlwLCBzZS9kaWZmLCBhbmQgdGVtcG9yYXJpbHkgc2V0IHRoZSBzdGFydCBjb252ZXJzaW9uIHNvdXJjZQorCSAqIHRvIENUMiBvdXRwdXQuICBOb3RlIHRoYXQgQ1QyIG91dHB1dCBpcyBjdXJyZW50bHkgaGlnaCwgYW5kIHRoaXMKKwkgKiB3aWxsIHByb2R1Y2UgYSBmYWxzZSBjb252ZXJzaW9uIHRyaWdnZXIgb24gc29tZSB2ZXJzaW9ucyBvZiB0aGUKKwkgKiBQQ0kyMzAvMjYwLCBidXQgdGhhdCB3aWxsIGJlIGRlYWx0IHdpdGggbGF0ZXIuICovCisJZGV2cHJpdi0+YWRjY29uID0gYWRjY29uOworCW91dHcoYWRjY29uIHwgUENJMjMwX0FEQ19GSUZPX1JFU0VULCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJLyogRGVsYXkgKi8KKwkvKiBGYWlsdXJlIHRvIGluY2x1ZGUgdGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUgZmlyc3QgZmV3IGNoYW5uZWxzJy13b3J0aAorCSAqIG9mIGRhdGEgYmVpbmcgY29ycnVwdCwgbm9ybWFsbHkgbWFuaWZlc3RpbmcgaXRzZWxmIGJ5IGxhcmdlIG5lZ2F0aXZlCisJICogdm9sdGFnZXMuIEl0IHNlZW1zIHRoZSBib2FyZCBuZWVkcyB0aW1lIHRvIHNldHRsZSBiZXR3ZWVuIHRoZSBmaXJzdAorCSAqIEZJRk8gcmVzZXQgKGFib3ZlKSBhbmQgdGhlIHNlY29uZCBGSUZPIHJlc2V0IChiZWxvdykuIFNldHRpbmcgdGhlCisJICogY2hhbm5lbCBnYWlucyBhbmQgc2NhbiBsaXN0IF9iZWZvcmVfIHRoZSBmaXJzdCBGSUZPIHJlc2V0IGFsc28KKwkgKiBoZWxwcywgdGhvdWdoIG9ubHkgc2xpZ2h0bHkuICovCisJY29tZWRpX3VkZWxheSgyNSk7CisKKwkvKiBSZXNldCBGSUZPIGFnYWluLiAqLworCW91dHcoYWRjY29uIHwgUENJMjMwX0FEQ19GSUZPX1JFU0VULCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBTZXQgdXAgQ1QyIGFzIGNvbnZlcnNpb24gdGltZXIsIGJ1dCBnYXRlIGl0IG9mZiBmb3Igbm93LgorCQkgKiBOb3RlLCBjb3VudGVyL3RpbWVyIG91dHB1dCAyIGNhbiBiZSBtb25pdG9yZWQgb24gdGhlCisJCSAqIGNvbm5lY3RvcjogUENJMjMwIHBpbiAyMSwgUENJMjYwIHBpbiAxOC4gKi8KKwkJemdhdCA9IEdBVF9DT05GSUcoMiwgR0FUX0dORCk7CisJCW91dGIoemdhdCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJCS8qIFNldCBjb3VudGVyL3RpbWVyIDIgdG8gdGhlIHNwZWNpZmllZCBjb252ZXJzaW9uIHBlcmlvZC4gKi8KKwkJcGNpMjMwX2N0X3NldHVwX25zX21vZGUoZGV2LCAyLCBJODI1NF9NT0RFMywgY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQkJLyoKKwkJCSAqIFNldCB1cCBtb25vc3RhYmxlIG9uIENUMCBvdXRwdXQgZm9yIHNjYW4gdGltaW5nLiAgQQorCQkJICogcmlzaW5nIGVkZ2Ugb24gdGhlIHRyaWdnZXIgKGdhdGUpIGlucHV0IG9mIENUMCB3aWxsCisJCQkgKiB0cmlnZ2VyIHRoZSBtb25vc3RhYmxlLCBjYXVzaW5nIGl0cyBvdXRwdXQgdG8gZ28gbG93CisJCQkgKiBmb3IgdGhlIGNvbmZpZ3VyZWQgcGVyaW9kLiAgVGhlIHBlcmlvZCBkZXBlbmRzIG9uCisJCQkgKiB0aGUgY29udmVyc2lvbiBwZXJpb2QgYW5kIHRoZSBudW1iZXIgb2YgY29udmVyc2lvbnMKKwkJCSAqIGluIHRoZSBzY2FuLgorCQkJICoKKwkJCSAqIFNldCB0aGUgdHJpZ2dlciBoaWdoIGJlZm9yZSBzZXR0aW5nIHVwIHRoZQorCQkJICogbW9ub3N0YWJsZSB0byBzdG9wIGl0IHRyaWdnZXJpbmcuICBUaGUgdHJpZ2dlcgorCQkJICogc291cmNlIHdpbGwgYmUgY2hhbmdlZCBsYXRlci4KKwkJCSAqLworCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX1ZDQyk7CisJCQlvdXRiKHpnYXQsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQkJcGNpMjMwX2N0X3NldHVwX25zX21vZGUoZGV2LCAwLCBJODI1NF9NT0RFMSwKKwkJCQkoKHVpbnQ2NF90KSBjbWQtPmNvbnZlcnRfYXJnCisJCQkJCSogY21kLT5zY2FuX2VuZF9hcmcpLCBUUklHX1JPVU5EX1VQKTsKKwkJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJCQkvKgorCQkJCSAqIE1vbm9zdGFibGUgb24gQ1QwIHdpbGwgYmUgdHJpZ2dlcmVkIGJ5CisJCQkJICogb3V0cHV0IG9mIENUMSBhdCBjb25maWd1cmVkIHNjYW4gZnJlcXVlbmN5LgorCQkJCSAqCisJCQkJICogU2V0IHVwIENUMSBidXQgZ2F0ZSBpdCBvZmYgZm9yIG5vdy4KKwkJCQkgKi8KKwkJCQl6Z2F0ID0gR0FUX0NPTkZJRygxLCBHQVRfR05EKTsKKwkJCQlvdXRiKHpnYXQsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQkJCXBjaTIzMF9jdF9zZXR1cF9uc19tb2RlKGRldiwgMSwgSTgyNTRfTU9ERTMsCisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQkJfQorCQl9CisJfQorCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKSB7CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gcGNpMjMwX2FpX2ludHRyaWdfc3RhcnQ7CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT1cgKi8KKwkJcGNpMjMwX2FpX3N0YXJ0KGRldiwgcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGl2aWRlX25zKHVpbnQ2NF90IG5zLCB1bnNpZ25lZCBpbnQgdGltZWJhc2UsCisJdW5zaWduZWQgaW50IHJvdW5kX21vZGUpCit7CisJdWludDY0X3QgZGl2OworCXVuc2lnbmVkIGludCByZW07CisKKwlkaXYgPSBuczsKKwlyZW0gPSBkb19kaXYoZGl2LCB0aW1lYmFzZSk7CisJcm91bmRfbW9kZSAmPSBUUklHX1JPVU5EX01BU0s7CisJc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJZGVmYXVsdDoKKwljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJZGl2ICs9IChyZW0gKyAodGltZWJhc2UgLyAyKSkgLyB0aW1lYmFzZTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJZGl2ICs9IChyZW0gKyB0aW1lYmFzZSAtIDEpIC8gdGltZWJhc2U7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZGl2ID4gVUlOVF9NQVggPyBVSU5UX01BWCA6ICh1bnNpZ25lZCBpbnQpZGl2OworfQorCisvKiBHaXZlbiBkZXNpcmVkIHBlcmlvZCBpbiBucywgcmV0dXJucyB0aGUgcmVxdWlyZWQgaW50ZXJuYWwgY2xvY2sgc291cmNlCisgKiBhbmQgZ2V0cyB0aGUgaW5pdGlhbCBjb3VudC4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNpMjMwX2Nob29zZV9jbGtfY291bnQodWludDY0X3QgbnMsIHVuc2lnbmVkIGludCAqY291bnQsCisJdW5zaWduZWQgaW50IHJvdW5kX21vZGUpCit7CisJdW5zaWduZWQgaW50IGNsa19zcmMsIGNudDsKKworCWZvciAoY2xrX3NyYyA9IENMS18xME1IWjs7IGNsa19zcmMrKykgeworCQljbnQgPSBkaXZpZGVfbnMobnMsIHBjaTIzMF90aW1lYmFzZVtjbGtfc3JjXSwgcm91bmRfbW9kZSk7CisJCWlmICgoY250IDw9IDY1NTM2KSB8fCAoY2xrX3NyYyA9PSBDTEtfMUtIWikpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCSpjb3VudCA9IGNudDsKKwlyZXR1cm4gY2xrX3NyYzsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX25zX3RvX3NpbmdsZV90aW1lcih1bnNpZ25lZCBpbnQgKm5zLCB1bnNpZ25lZCBpbnQgcm91bmQpCit7CisJdW5zaWduZWQgaW50IGNvdW50OworCXVuc2lnbmVkIGludCBjbGtfc3JjOworCisJY2xrX3NyYyA9IHBjaTIzMF9jaG9vc2VfY2xrX2NvdW50KCpucywgJmNvdW50LCByb3VuZCk7CisJKm5zID0gY291bnQgKiBwY2kyMzBfdGltZWJhc2VbY2xrX3NyY107CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfY3Rfc2V0dXBfbnNfbW9kZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGN0LAorCXVuc2lnbmVkIGludCBtb2RlLCB1aW50NjRfdCBucywgdW5zaWduZWQgaW50IHJvdW5kKQoreworCXVuc2lnbmVkIGludCBjbGtfc3JjOworCXVuc2lnbmVkIGludCBjb3VudDsKKworCS8qIFNldCBtb2RlLiAqLworCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgY3QsIG1vZGUpOworCS8qIERldGVybWluZSBjbG9jayBzb3VyY2UgYW5kIGNvdW50LiAqLworCWNsa19zcmMgPSBwY2kyMzBfY2hvb3NlX2Nsa19jb3VudChucywgJmNvdW50LCByb3VuZCk7CisJLyogUHJvZ3JhbSBjbG9jayBzb3VyY2UuICovCisJb3V0YihDTEtfQ09ORklHKGN0LCBjbGtfc3JjKSwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aQ0xLX1NDRSk7CisJLyogU2V0IGluaXRpYWwgY291bnQuICovCisJaWYgKGNvdW50ID49IDY1NTM2KSB7CisJCWNvdW50ID0gMDsKKwl9CisJaTgyNTRfd3JpdGUoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aMl9DVF9CQVNFLCAwLCBjdCwgY291bnQpOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfY2FuY2VsX2N0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY3QpCit7CisJaTgyNTRfc2V0X21vZGUoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aMl9DVF9CQVNFLCAwLCBjdCwKKwkJSTgyNTRfTU9ERTEpOworCS8qIENvdW50ZXIgY3QsIDgyNTQgbW9kZSAxLCBpbml0aWFsIGNvdW50IG5vdCB3cml0dGVuLiAqLworfQorCisvKiBJbnRlcnJ1cHQgaGFuZGxlciAqLworc3RhdGljIGlycXJldHVybl90IHBjaTIzMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwl1bnNpZ25lZCBjaGFyIHN0YXR1c19pbnQsIHZhbGlkX3N0YXR1c19pbnQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwkvKiBSZWFkIGludGVycnVwdCBzdGF0dXMvZW5hYmxlIHJlZ2lzdGVyLiAqLworCXN0YXR1c19pbnQgPSBpbmIoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU1RBVCk7CisKKwlpZiAoc3RhdHVzX2ludCA9PSBQQ0kyMzBfSU5UX0RJU0FCTEUpIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJdmFsaWRfc3RhdHVzX2ludCA9IGRldnByaXYtPmludF9lbiAmIHN0YXR1c19pbnQ7CisJLyogRGlzYWJsZSB0cmlnZ2VyZWQgaW50ZXJydXB0cy4KKwkgKiAoT25seSB0aG9zZSBpbnRlcnJ1cHRzIHRoYXQgbmVlZCByZS1lbmFibGluZywgYXJlLCBsYXRlciBpbiB0aGUKKwkgKiBoYW5kbGVyKS4gICovCisJZGV2cHJpdi0+aWVyID0gZGV2cHJpdi0+aW50X2VuICYgfnN0YXR1c19pbnQ7CisJb3V0YihkZXZwcml2LT5pZXIsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfSU5UX1NDRSk7CisJZGV2cHJpdi0+aW50cl9ydW5uaW5nID0gMTsKKwlkZXZwcml2LT5pbnRyX2NwdWlkID0gVEhJU0NQVTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisKKwkvKgorCSAqIENoZWNrIHRoZSBzb3VyY2Ugb2YgaW50ZXJydXB0IGFuZCBoYW5kbGUgaXQuCisJICogVGhlIFBDSTIzMCBjYW4gY29wZSB3aXRoIGNvbmN1cnJlbnQgQURDLCBEQUMsIFBQSSBDMCBhbmQgQzMKKwkgKiBpbnRlcnJ1cHRzLiAgSG93ZXZlciwgYXQgcHJlc2VudCAoQ29tZWRpLTAuNy42MCkgZG9lcyBub3QgYWxsb3cKKwkgKiBjb25jdXJyZW50IGV4ZWN1dGlvbiBvZiBjb21tYW5kcywgaW5zdHJ1Y3Rpb25zIG9yIGEgbWl4dHVyZSBvZiB0aGUKKwkgKiB0d28uCisJICovCisKKwlpZiAoKHZhbGlkX3N0YXR1c19pbnQgJiBQQ0kyMzBfSU5UX1pDTEtfQ1QxKSAhPSAwKSB7CisJCXMgPSBkZXYtPndyaXRlX3N1YmRldjsKKwkJcGNpMjMwX2hhbmRsZV9hb19ub2ZpZm8oZGV2LCBzKTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCisJaWYgKCh2YWxpZF9zdGF0dXNfaW50ICYgUENJMjMwUDJfSU5UX0RBQykgIT0gMCkgeworCQlzID0gZGV2LT53cml0ZV9zdWJkZXY7CisJCXBjaTIzMF9oYW5kbGVfYW9fZmlmbyhkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlpZiAoKHZhbGlkX3N0YXR1c19pbnQgJiBQQ0kyMzBfSU5UX0FEQykgIT0gMCkgeworCQlzID0gZGV2LT5yZWFkX3N1YmRldjsKKwkJcGNpMjMwX2hhbmRsZV9haShkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwkvKiBSZWVuYWJsZSBpbnRlcnJ1cHRzLiAqLworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJaWYgKGRldnByaXYtPmllciAhPSBkZXZwcml2LT5pbnRfZW4pIHsKKwkJZGV2cHJpdi0+aWVyID0gZGV2cHJpdi0+aW50X2VuOworCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwl9CisJZGV2cHJpdi0+aW50cl9ydW5uaW5nID0gMDsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9oYW5kbGVfYW9fbm9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc2hvcnQgZGF0YTsKKwlpbnQgaSwgcmV0OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCisJaWYgKCFkZXZwcml2LT5hb19jb250aW51b3VzICYmIChkZXZwcml2LT5hb19zY2FuX2NvdW50ID09IDApKSB7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkvKiBSZWFkIHNhbXBsZSBmcm9tIENvbWVkaSdzIGNpcmN1bGFyIGJ1ZmZlci4gKi8KKwkJcmV0ID0gY29tZWRpX2J1Zl9nZXQocy0+YXN5bmMsICZkYXRhKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJCXBjaTIzMF9hb19zdG9wKGRldiwgcyk7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiQU8gYnVmZmVyIHVuZGVycnVuIik7CisJCQlyZXR1cm47CisJCX0KKwkJLyogV3JpdGUgdmFsdWUgdG8gREFDLiAqLworCQlwY2kyMzBfYW9fd3JpdGVfbm9maWZvKGRldiwgZGF0YSwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSk7CisJfQorCisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOworCWlmICghZGV2cHJpdi0+YW9fY29udGludW91cykgeworCQlkZXZwcml2LT5hb19zY2FuX2NvdW50LS07CisJCWlmIChkZXZwcml2LT5hb19zY2FuX2NvdW50ID09IDApIHsKKwkJCS8qIEVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCXBjaTIzMF9hb19zdG9wKGRldiwgcyk7CisJCX0KKwl9Cit9CisKKy8qIExvYWRzIERBQyBGSUZPIChpZiB1c2luZyBpdCkgZnJvbSBidWZmZXIuICovCisvKiBSZXR1cm5zIDAgaWYgQU8gZmluaXNoZWQgZHVlIHRvIGNvbXBsZXRpb24gb3IgZXJyb3IsIDEgaWYgc3RpbGwgZ29pbmcuICovCitzdGF0aWMgaW50IHBjaTIzMF9oYW5kbGVfYW9fZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBudW1fc2NhbnM7CisJdW5zaWduZWQgaW50IHJvb207CisJdW5zaWduZWQgc2hvcnQgZGFjc3RhdDsKKwl1bnNpZ25lZCBpbnQgaSwgbjsKKwl1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3NjYW47CisJdW5zaWduZWQgaW50IGV2ZW50cyA9IDA7CisJaW50IHJ1bm5pbmc7CisKKwkvKiBHZXQgREFDIEZJRk8gc3RhdHVzLiAqLworCWRhY3N0YXQgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKKworCS8qIERldGVybWluZSBudW1iZXIgb2Ygc2NhbnMgYXZhaWxhYmxlIGluIGJ1ZmZlci4gKi8KKwlieXRlc19wZXJfc2NhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuICogc2l6ZW9mKHNob3J0KTsKKwludW1fc2NhbnMgPSBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUoYXN5bmMpIC8gYnl0ZXNfcGVyX3NjYW47CisJaWYgKCFkZXZwcml2LT5hb19jb250aW51b3VzKSB7CisJCS8qIEZpeGVkIG51bWJlciBvZiBzY2Fucy4gKi8KKwkJaWYgKG51bV9zY2FucyA+IGRldnByaXYtPmFvX3NjYW5fY291bnQpIHsKKwkJCW51bV9zY2FucyA9IGRldnByaXYtPmFvX3NjYW5fY291bnQ7CisJCX0KKwkJaWYgKGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkgeworCQkJLyogRW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCQkJZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCX0KKwl9CisJaWYgKGV2ZW50cyA9PSAwKSB7CisJCS8qIENoZWNrIGZvciBGSUZPIHVuZGVycnVuLiAqLworCQlpZiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19VTkRFUlJVTl9MQVRDSEVEKSAhPSAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiQU8gRklGTyB1bmRlcnJ1biIpOworCQkJZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FUlJPUjsKKwkJfQorCQkvKiBDaGVjayBmb3IgYnVmZmVyIHVuZGVycnVuIGlmIEZJRk8gbGVzcyB0aGFuIGhhbGYgZnVsbAorCQkgKiAob3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgbG9hZHMgb2YgIkRBQyBGSUZPIG5vdCBoYWxmIGZ1bGwiCisJCSAqIGludGVycnVwdHMpLiAqLworCQlpZiAoKG51bV9zY2FucyA9PSAwKQorCQkJJiYgKChkYWNzdGF0ICYgUENJMjMwUDJfREFDX0ZJRk9fSEFMRikgPT0gMCkpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBTyBidWZmZXIgdW5kZXJydW4iKTsKKwkJCWV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1cgfCBDT01FRElfQ0JfRVJST1I7CisJCX0KKwl9CisJaWYgKGV2ZW50cyA9PSAwKSB7CisJCS8qIERldGVybWluZSBob3cgbXVjaCByb29tIGlzIGluIHRoZSBGSUZPIChpbiBzYW1wbGVzKS4gKi8KKwkJaWYgKChkYWNzdGF0ICYgUENJMjMwUDJfREFDX0ZJRk9fRlVMTCkgIT0gMCkgeworCQkJcm9vbSA9IFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9GVUxMOworCQl9IGVsc2UgaWYgKChkYWNzdGF0ICYgUENJMjMwUDJfREFDX0ZJRk9fSEFMRikgIT0gMCkgeworCQkJcm9vbSA9IFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9IQUxGVE9GVUxMOworCQl9IGVsc2UgaWYgKChkYWNzdGF0ICYgUENJMjMwUDJfREFDX0ZJRk9fRU1QVFkpICE9IDApIHsKKwkJCXJvb20gPSBQQ0kyMzBQMl9EQUNfRklGT1JPT01fRU1QVFk7CisJCX0gZWxzZSB7CisJCQlyb29tID0gUENJMjMwUDJfREFDX0ZJRk9ST09NX09ORVRPSEFMRjsKKwkJfQorCQkvKiBDb252ZXJ0IHJvb20gdG8gbnVtYmVyIG9mIHNjYW5zIHRoYXQgY2FuIGJlIGFkZGVkLiAqLworCQlyb29tIC89IGNtZC0+Y2hhbmxpc3RfbGVuOworCQkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIHNjYW5zIHRvIHByb2Nlc3MuICovCisJCWlmIChudW1fc2NhbnMgPiByb29tKSB7CisJCQludW1fc2NhbnMgPSByb29tOworCQl9CisJCS8qIFByb2Nlc3Mgc2NhbnMuICovCisJCWZvciAobiA9IDA7IG4gPCBudW1fc2NhbnM7IG4rKykgeworCQkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCQlzaG9ydCBkYXR1bTsKKworCQkJCWNvbWVkaV9idWZfZ2V0KGFzeW5jLCAmZGF0dW0pOworCQkJCXBjaTIzMF9hb193cml0ZV9maWZvKGRldiwgZGF0dW0sCisJCQkJCUNSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkpOworCQkJfQorCQl9CisJCWV2ZW50cyB8PSBDT01FRElfQ0JfRU9TIHwgQ09NRURJX0NCX0JMT0NLOworCQlpZiAoIWRldnByaXYtPmFvX2NvbnRpbnVvdXMpIHsKKwkJCWRldnByaXYtPmFvX3NjYW5fY291bnQgLT0gbnVtX3NjYW5zOworCQkJaWYgKGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkgeworCQkJCS8qIEFsbCBkYXRhIGZvciB0aGUgY29tbWFuZCBoYXMgYmVlbiB3cml0dGVuCisJCQkJICogdG8gRklGTy4gIFNldCBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsCisJCQkJICogdG8gJ2VtcHR5Jy4gKi8KKwkJCQlkZXZwcml2LT5kYWNjb24gPSAoZGV2cHJpdi0+ZGFjY29uCisJCQkJCSYgflBDSTIzMFAyX0RBQ19JTlRfRklGT19NQVNLKQorCQkJCQl8IFBDSTIzMFAyX0RBQ19JTlRfRklGT19FTVBUWTsKKwkJCQlvdXR3KGRldnByaXYtPmRhY2NvbiwKKwkJCQkJZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKKwkJCX0KKwkJfQorCQkvKiBDaGVjayBpZiBGSUZPIHVuZGVycnVuIG9jY3VycmVkIHdoaWxlIHdyaXRpbmcgdG8gRklGTy4gKi8KKwkJZGFjc3RhdCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCQlpZiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19VTkRFUlJVTl9MQVRDSEVEKSAhPSAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiQU8gRklGTyB1bmRlcnJ1biIpOworCQkJZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FUlJPUjsKKwkJfQorCX0KKwlpZiAoKGV2ZW50cyAmIChDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX09WRVJGTE9XKSkKKwkJIT0gMCkgeworCQkvKiBTdG9wcGluZyBBTyBkdWUgdG8gY29tcGxldGlvbiBvciBlcnJvci4gKi8KKwkJcGNpMjMwX2FvX3N0b3AoZGV2LCBzKTsKKwkJcnVubmluZyA9IDA7CisJfSBlbHNlIHsKKwkJcnVubmluZyA9IDE7CisJfQorCWFzeW5jLT5ldmVudHMgfD0gZXZlbnRzOworCXJldHVybiBydW5uaW5nOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfaGFuZGxlX2FpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgaW50IGV2ZW50cyA9IDA7CisJdW5zaWduZWQgaW50IHN0YXR1c19maWZvOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCB0b2RvOworCXVuc2lnbmVkIGludCBmaWZvYW1vdW50OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJdW5zaWduZWQgaW50IHNjYW5sZW4gPSBhc3luYy0+Y21kLnNjYW5fZW5kX2FyZzsKKworCS8qIERldGVybWluZSBudW1iZXIgb2Ygc2FtcGxlcyB0byByZWFkLiAqLworCWlmIChkZXZwcml2LT5haV9jb250aW51b3VzKSB7CisJCXRvZG8gPSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTDsKKwl9IGVsc2UgaWYgKGRldnByaXYtPmFpX3NjYW5fY291bnQgPT0gMCkgeworCQl0b2RvID0gMDsKKwl9IGVsc2UgaWYgKChkZXZwcml2LT5haV9zY2FuX2NvdW50ID4gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEwpCisJCXx8IChzY2FubGVuID4gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEwpKSB7CisJCXRvZG8gPSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTDsKKwl9IGVsc2UgeworCQl0b2RvID0gKGRldnByaXYtPmFpX3NjYW5fY291bnQgKiBzY2FubGVuKQorCQkJLSBkZXZwcml2LT5haV9zY2FuX3BvczsKKwkJaWYgKHRvZG8gPiBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkgeworCQkJdG9kbyA9IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMOworCQl9CisJfQorCisJaWYgKHRvZG8gPT0gMCkgeworCQlyZXR1cm47CisJfQorCisJZmlmb2Ftb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHRvZG87IGkrKykgeworCQlpZiAoZmlmb2Ftb3VudCA9PSAwKSB7CisJCQkvKiBSZWFkIEZJRk8gc3RhdGUuICovCisJCQlzdGF0dXNfZmlmbyA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJCQlpZiAoKHN0YXR1c19maWZvICYgUENJMjMwX0FEQ19GSUZPX0ZVTExfTEFUQ0hFRCkgIT0gMCkgeworCQkJCS8qIFJlcG9ydCBlcnJvciBvdGhlcndpc2UgRklGTyBvdmVycnVucyB3aWxsIGdvCisJCQkJICogdW5ub3RpY2VkIGJ5IHRoZSBjYWxsZXIuICovCisJCQkJY29tZWRpX2Vycm9yKGRldiwgIkFJIEZJRk8gb3ZlcnJ1biIpOworCQkJCWV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1cgfCBDT01FRElfQ0JfRVJST1I7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKChzdGF0dXNfZmlmbyAmIFBDSTIzMF9BRENfRklGT19FTVBUWSkgIT0gMCkgeworCQkJCS8qIEZJRk8gZW1wdHkuICovCisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKChzdGF0dXNfZmlmbyAmIFBDSTIzMF9BRENfRklGT19IQUxGKSAhPSAwKSB7CisJCQkJLyogRklGTyBoYWxmIGZ1bGwuICovCisJCQkJZmlmb2Ftb3VudCA9IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMOworCQkJfSBlbHNlIHsKKwkJCQkvKiBGSUZPIG5vdCBlbXB0eS4gKi8KKwkJCQlpZiAoZGV2cHJpdi0+aHd2ZXIgPiAwKSB7CisJCQkJCS8qIFJlYWQgUENJMjMwKy8yNjArIEFEQyBGSUZPIGxldmVsLiAqLworCQkJCQlmaWZvYW1vdW50ID0gaW53KGRldi0+aW9iYXNlCisJCQkJCQkrIFBDSTIzMFBfQURDRkZMRVYpOworCQkJCQlpZiAoZmlmb2Ftb3VudCA9PSAwKSB7CisJCQkJCQkvKiBTaG91bGRuJ3QgaGFwcGVuLiAqLworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlmaWZvYW1vdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBSZWFkIHNhbXBsZSBhbmQgc3RvcmUgaW4gQ29tZWRpJ3MgY2lyY3VsYXIgYnVmZmVyLiAqLworCQlpZiAoY29tZWRpX2J1Zl9wdXQoYXN5bmMsIHBjaTIzMF9haV9yZWFkKGRldikpID09IDApIHsKKwkJCWV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfT1ZFUkZMT1c7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiQUkgYnVmZmVyIG92ZXJmbG93Iik7CisJCQlicmVhazsKKwkJfQorCQlmaWZvYW1vdW50LS07CisJCWRldnByaXYtPmFpX3NjYW5fcG9zKys7CisJCWlmIChkZXZwcml2LT5haV9zY2FuX3BvcyA9PSBzY2FubGVuKSB7CisJCQkvKiBFbmQgb2Ygc2Nhbi4gKi8KKwkJCWRldnByaXYtPmFpX3NjYW5fcG9zID0gMDsKKwkJCWRldnByaXYtPmFpX3NjYW5fY291bnQtLTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKKwkJfQorCX0KKworCWlmICghZGV2cHJpdi0+YWlfY29udGludW91cyAmJiAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSkgeworCQkvKiBFbmQgb2YgYWNxdWlzaXRpb24uICovCisJCWV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0gZWxzZSB7CisJCS8qIE1vcmUgc2FtcGxlcyByZXF1aXJlZCwgdGVsbCBDb21lZGkgdG8gYmxvY2suICovCisJCWV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisJfQorCWFzeW5jLT5ldmVudHMgfD0gZXZlbnRzOworCisJaWYgKChhc3luYy0+ZXZlbnRzICYgKENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1IgfAorCQkJCUNPTUVESV9DQl9PVkVSRkxPVykpICE9IDApIHsKKwkJLyogZGlzYWJsZSBoYXJkd2FyZSBjb252ZXJzaW9ucyAqLworCQlwY2kyMzBfYWlfc3RvcChkZXYsIHMpOworCX0gZWxzZSB7CisJCS8qIHVwZGF0ZSBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsICovCisJCXBjaTIzMF9haV91cGRhdGVfZmlmb190cmlnZ2VyX2xldmVsKGRldiwgcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfYW9fc3RvcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdW5zaWduZWQgY2hhciBpbnRzcmM7CisJaW50IHN0YXJ0ZWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YW9fc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCXN0YXJ0ZWQgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoQU9fQ01EX1NUQVJURUQsICZkZXZwcml2LT5zdGF0ZSk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3N0b3Bfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlpZiAoIXN0YXJ0ZWQpIHsKKwkJcmV0dXJuOworCX0KKworCWNtZCA9ICZzLT5hc3luYy0+Y21kOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyogU3RvcCBzY2FuIHJhdGUgZ2VuZXJhdG9yLiAqLworCQlwY2kyMzBfY2FuY2VsX2N0KGRldiwgMSk7CisJfQorCisJLyogRGV0ZXJtaW5lIGludGVycnVwdCBzb3VyY2UuICovCisJaWYgKGRldnByaXYtPmh3dmVyIDwgMikgeworCQkvKiBOb3QgdXNpbmcgREFDIEZJRk8uICBVc2luZyBDVDEgaW50ZXJydXB0LiAqLworCQlpbnRzcmMgPSBQQ0kyMzBfSU5UX1pDTEtfQ1QxOworCX0gZWxzZSB7CisJCS8qIFVzaW5nIERBQyBGSUZPIGludGVycnVwdC4gKi8KKwkJaW50c3JjID0gUENJMjMwUDJfSU5UX0RBQzsKKwl9CisJLyogRGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHdhaXQgZm9yIGludGVycnVwdCByb3V0aW5lIHRvIGZpbmlzaCBydW5uaW5nCisJICogdW5sZXNzIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHJvdXRpbmUuICovCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlkZXZwcml2LT5pbnRfZW4gJj0gfmludHNyYzsKKwl3aGlsZSAoZGV2cHJpdi0+aW50cl9ydW5uaW5nICYmIGRldnByaXYtPmludHJfY3B1aWQgIT0gVEhJU0NQVSkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJfQorCWlmIChkZXZwcml2LT5pZXIgIT0gZGV2cHJpdi0+aW50X2VuKSB7CisJCWRldnByaXYtPmllciA9IGRldnByaXYtPmludF9lbjsKKwkJb3V0YihkZXZwcml2LT5pZXIsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfSU5UX1NDRSk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCWlmIChkZXZwcml2LT5od3ZlciA+PSAyKSB7CisJCS8qIFVzaW5nIERBQyBGSUZPLiAgUmVzZXQgRklGTywgY2xlYXIgdW5kZXJydW4gZXJyb3IsCisJCSAqIGRpc2FibGUgRklGTy4gKi8KKwkJZGV2cHJpdi0+ZGFjY29uICY9IFBDSTIzMF9EQUNfT1JfTUFTSzsKKwkJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMzBQMl9EQUNfRklGT19SRVNFVAorCQkJfCBQQ0kyMzBQMl9EQUNfRklGT19VTkRFUlJVTl9DTEVBUiwKKwkJCWRldi0+aW9iYXNlICsgUENJMjMwX0RBQ0NPTik7CisJfQorCisJLyogUmVsZWFzZSByZXNvdXJjZXMuICovCisJcHV0X2FsbF9yZXNvdXJjZXMoZGV2LCBPV05FUl9BT0NNRCk7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXBjaTIzMF9hb19zdG9wKGRldiwgcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9haV9zdG9wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOworCWludCBzdGFydGVkOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5haV9zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJc3RhcnRlZCA9IHRlc3RfYW5kX2NsZWFyX2JpdChBSV9DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCWlmICghc3RhcnRlZCkgeworCQlyZXR1cm47CisJfQorCisJY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBTdG9wIGNvbnZlcnNpb24gcmF0ZSBnZW5lcmF0b3IuICovCisJCXBjaTIzMF9jYW5jZWxfY3QoZGV2LCAyKTsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJLyogU3RvcCBzY2FuIHBlcmlvZCBtb25vc3RhYmxlLiAqLworCQlwY2kyMzBfY2FuY2VsX2N0KGRldiwgMCk7CisJfQorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwkvKiBEaXNhYmxlIEFEQyBpbnRlcnJ1cHQgYW5kIHdhaXQgZm9yIGludGVycnVwdCByb3V0aW5lIHRvIGZpbmlzaAorCSAqIHJ1bm5pbmcgdW5sZXNzIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHJvdXRpbmUuICovCisJZGV2cHJpdi0+aW50X2VuICY9IH5QQ0kyMzBfSU5UX0FEQzsKKwl3aGlsZSAoZGV2cHJpdi0+aW50cl9ydW5uaW5nICYmIGRldnByaXYtPmludHJfY3B1aWQgIT0gVEhJU0NQVSkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJfQorCWlmIChkZXZwcml2LT5pZXIgIT0gZGV2cHJpdi0+aW50X2VuKSB7CisJCWRldnByaXYtPmllciA9IGRldnByaXYtPmludF9lbjsKKwkJb3V0YihkZXZwcml2LT5pZXIsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfSU5UX1NDRSk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCS8qIFJlc2V0IEZJRk8sIGRpc2FibGUgRklGTyBhbmQgc2V0IHN0YXJ0IGNvbnZlcnNpb24gc291cmNlIHRvIG5vbmUuCisJICogS2VlcCBzZS9kaWZmIGFuZCBiaXAvdW5pIHNldHRpbmdzICovCisJZGV2cHJpdi0+YWRjY29uID0gKGRldnByaXYtPmFkY2NvbiAmIChQQ0kyMzBfQURDX0lSX01BU0sKKwkJCXwgUENJMjMwX0FEQ19JTV9NQVNLKSkgfCBQQ0kyMzBfQURDX1RSSUdfTk9ORTsKKwlvdXR3KGRldnByaXYtPmFkY2NvbiB8IFBDSTIzMF9BRENfRklGT19SRVNFVCwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfQURDQ09OKTsKKworCS8qIFJlbGVhc2UgcmVzb3VyY2VzLiAqLworCXB1dF9hbGxfcmVzb3VyY2VzKGRldiwgT1dORVJfQUlDTUQpOworfQorCitzdGF0aWMgaW50IHBjaTIzMF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlwY2kyMzBfYWlfc3RvcChkZXYsIHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2M2eGRpZ2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWZmZmIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2M2eGRpZ2lvLmMKQEAgLTAsMCArMSw1MTcgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCisKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgTWVjaGF0cm9uaWMgU3lzdGVtcyBJbmMuIEM2eF9ESUdJTyBEU1AgZGF1Z2h0ZXIgY2FyZC4KKyAgIChodHRwOi8vcm9ib3QwLmdlLnVpdWMuZWR1L35zcG9uZy9tZWNoYS8pCisKKyAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgIENvcHlyaWdodCAoQykgMTk5OSBEYW4gQmxvY2sKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBjNnhkaWdpbworRGVzY3JpcHRpb246IE1lY2hhdHJvbmljIFN5c3RlbXMgSW5jLiBDNnhfRElHSU8gRFNQIGRhdWdodGVyIGNhcmQKK0F1dGhvcjogRGFuIEJsb2NrCitTdGF0dXM6IHVua25vd24KK0RldmljZXM6IFtNZWNoYXRyb25pYyBTeXN0ZW1zIEluYy5dIEM2eF9ESUdJTyBEU1AgZGF1Z2h0ZXIgY2FyZCAoYzZ4ZGlnaW8pCitVcGRhdGVkOiBTdW4gTm92IDIwIDIwOjE4OjM0IEVTVCAyMDA1CisKK1RoaXMgZHJpdmVyIHdpbGwgbm90IHdvcmsgd2l0aCBhIDIuNCBrZXJuZWwuCitodHRwOi8vcm9ib3QwLmdlLnVpdWMuZWR1L35zcG9uZy9tZWNoYS8KKworKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKK3N0YXRpYyB1OCBSZWFkQnl0ZUZyb21Id1BvcnQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXU4IHJlc3VsdCA9IGluYihhZGRyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBXcml0ZUJ5dGVUb0h3UG9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHU4IHZhbCkKK3sKKwlvdXRiX3AodmFsLCBhZGRyKTsKK30KKworI2RlZmluZSBDNlhESUdJT19TSVpFIDMKKworLyoKKyAqIHBvcnQgb2Zmc2V0cworICovCisjZGVmaW5lIEM2WERJR0lPX1BBUkFMTEVMX0RBVEEgMAorI2RlZmluZSBDNlhESUdJT19QQVJBTExFTF9TVEFUVVMgMQorI2RlZmluZSBDNlhESUdJT19QQVJBTExFTF9DT05UUk9MIDIKK3N0cnVjdCBwd21iaXRzdHlwZSB7CisJdW5zaWduZWQgc2IwOjI7CisJdW5zaWduZWQgc2IxOjI7CisJdW5zaWduZWQgc2IyOjI7CisJdW5zaWduZWQgc2IzOjI7CisJdW5zaWduZWQgc2I0OjI7Cit9OwordW5pb24gcHdtY21kdHlwZSB7CisJdW5zaWduZWQgY21kOwkJLy8gYXNzdW1pbmcgaGVyZSB0aGF0IGludCBpcyAzMmJpdAorCXN0cnVjdCBwd21iaXRzdHlwZSBiaXRzOworfTsKK3N0cnVjdCBlbmNiaXRzdHlwZSB7CisJdW5zaWduZWQgc2IwOjM7CisJdW5zaWduZWQgc2IxOjM7CisJdW5zaWduZWQgc2IyOjM7CisJdW5zaWduZWQgc2IzOjM7CisJdW5zaWduZWQgc2I0OjM7CisJdW5zaWduZWQgc2I1OjM7CisJdW5zaWduZWQgc2I2OjM7CisJdW5zaWduZWQgc2I3OjM7Cit9OwordW5pb24gZW5jdmFsdWV0eXBlIHsKKwl1bnNpZ25lZCB2YWx1ZTsKKwlzdHJ1Y3QgZW5jYml0c3R5cGUgYml0czsKK307CisKKyNkZWZpbmUgQzZYRElHSU9fVElNRV9PVVQgMjAKKworc3RhdGljIGludCBjNnhkaWdpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBjNnhkaWdpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2M2eGRpZ2lvID0geworICAgICAgZHJpdmVyX25hbWU6ImM2eGRpZ2lvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpjNnhkaWdpb19hdHRhY2gsCisgICAgICBkZXRhY2g6YzZ4ZGlnaW9fZGV0YWNoLAorfTsKKworc3RhdGljIHZvaWQgQzZYX3B3bUluaXQodW5zaWduZWQgbG9uZyBiYXNlQWRkcikKK3sKKwlpbnQgdGltZW91dCA9IDA7CisKKy8vcHJpbnRrKCJJbnNpZGUgQzZYX3B3bUluaXRcbiIpOworCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIDB4NzApOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDc0KTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSAmIDB4ODApID09IDB4ODApCisJCSYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRpbWVvdXQrKzsKKwl9CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHg3MCk7CisJdGltZW91dCA9IDA7CisJd2hpbGUgKCgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgJiAweDgwKSA9PSAweDApCisJCSYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRpbWVvdXQrKzsKKwl9CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHgwKTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSAmIDB4ODApID09IDB4ODApCisJCSYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRpbWVvdXQrKzsKKwl9CisKK30KKworc3RhdGljIHZvaWQgQzZYX3B3bU91dHB1dCh1bnNpZ25lZCBsb25nIGJhc2VBZGRyLCB1bnNpZ25lZCBjaGFubmVsLCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgcHBjbWQ7CisJdW5pb24gcHdtY21kdHlwZSBwd207CisJaW50IHRpbWVvdXQgPSAwOworCXVuc2lnbmVkIHRtcDsKKworCS8vcHJpbnRrKCJJbnNpZGUgQzZYX3B3bU91dHB1dFxuIik7CisKKwlwd20uY21kID0gdmFsdWU7CisJaWYgKHB3bS5jbWQgPiA0OTgpCisJCXB3bS5jbWQgPSA0OTg7CisJaWYgKHB3bS5jbWQgPCAyKQorCQlwd20uY21kID0gMjsKKworCWlmIChjaGFubmVsID09IDApIHsKKwkJcHBjbWQgPSAweDI4OworCX0gZWxzZSB7CQkvLyBpZiBjaGFubmVsID09IDEKKwkJcHBjbWQgPSAweDMwOworCX0JCQkvKiBlbmRpZiAqLworCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgcHdtLmJpdHMuc2IwKTsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCArIHB3bS5iaXRzLnNiMSArIDB4NCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMHg4MCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyBwd20uYml0cy5zYjIpOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgcHdtLmJpdHMuc2IzICsgMHg0KTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCArIHB3bS5iaXRzLnNiNCk7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHgwKTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworfQorCitzdGF0aWMgaW50IEM2WF9lbmNJbnB1dCh1bnNpZ25lZCBsb25nIGJhc2VBZGRyLCB1bnNpZ25lZCBjaGFubmVsKQoreworCXVuc2lnbmVkIHBwY21kOworCXVuaW9uIGVuY3ZhbHVldHlwZSBlbmM7CisJaW50IHRpbWVvdXQgPSAwOworCWludCB0bXA7CisKKwkvL3ByaW50aygiSW5zaWRlIEM2WF9lbmNJbnB1dFxuIik7CisKKwllbmMudmFsdWUgPSAwOworCWlmIChjaGFubmVsID09IDApIHsKKwkJcHBjbWQgPSAweDQ4OworCX0gZWxzZSB7CisJCXBwY21kID0gMHg1MDsKKwl9CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kKTsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCWVuYy5iaXRzLnNiMCA9ICgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgPj4gMykgJiAweDcpOworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCArIDB4NCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMHg4MCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisJZW5jLmJpdHMuc2IxID0gKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSA+PiAzKSAmIDB4Nyk7CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kKTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjIgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyAweDQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCWVuYy5iaXRzLnNiMyA9ICgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgPj4gMykgJiAweDcpOworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisJZW5jLmJpdHMuc2I0ID0gKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSA+PiAzKSAmIDB4Nyk7CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgMHg0KTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjUgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4MCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisJZW5jLmJpdHMuc2I2ID0gKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSA+PiAzKSAmIDB4Nyk7CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgMHg0KTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjcgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4MCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHgwKTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCXJldHVybiAoZW5jLnZhbHVlIF4gMHg4MDAwMDApOworfQorCitzdGF0aWMgdm9pZCBDNlhfZW5jUmVzZXRBbGwodW5zaWduZWQgbG9uZyBiYXNlQWRkcikKK3sKKwl1bnNpZ25lZCB0aW1lb3V0ID0gMDsKKworLy9wcmludGsoIkluc2lkZSBDNlhfZW5jUmVzZXRBbGxcbiIpOworCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIDB4NjgpOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHg2Qyk7CisJdGltZW91dCA9IDA7CisJd2hpbGUgKCgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgJiAweDgwKSA9PSAweDgwKQorCQkmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0aW1lb3V0Kys7CisJfQorCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDY4KTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSAmIDB4ODApID09IDB4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHgwKTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSAmIDB4ODApID09IDB4ODApCisJCSYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRpbWVvdXQrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYzZ4ZGlnaW9fcHdtb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXByaW50aygiYzZ4ZGlnaW9fcHdtb19pbnNuX3JlYWQgJXhcbiIsIGluc24tPm4pOworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IGM2eGRpZ2lvX3B3bW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8vICBwcmludGsoImM2eGRpZ2lvX3B3bW9faW5zbl93cml0ZSAleFxuIiwgaW5zbi0+bik7CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlDNlhfcHdtT3V0cHV0KGRldi0+aW9iYXNlLCBjaGFuLCBkYXRhW2ldKTsKKwkJLyogICAgZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOyAqLworCX0KKwlyZXR1cm4gaTsKK30KKworLy9zdGF0aWMgaW50IGM2eGRpZ2lvX2VpX2luaXRfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkKKy8veworLy8gIHByaW50aygiYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3JlYWQgJXhcbiIsIGluc24tPm4pOworLy8gIHJldHVybiBpbnNuLT5uOworLy99CisKKy8vc3RhdGljIGludCBjNnhkaWdpb19laV9pbml0X2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKQorLy97CisvLyAgaW50IGk7CisvLyAgaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKy8vCisvLyAgQzZYX2VuY1Jlc2V0QWxsKCBkZXYtPmlvYmFzZSApOworLy8KKy8vICByZXR1cm4gaW5zbi0+bjsKKy8vfQorCitzdGF0aWMgaW50IGM2eGRpZ2lvX2VpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJLy8gIHByaW50aygiYzZ4ZGlnaW9fZWlfX2luc25fcmVhZCAleFxuIiwgaW5zbi0+bik7CisJaW50IG47CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJZGF0YVtuXSA9IChDNlhfZW5jSW5wdXQoZGV2LT5pb2Jhc2UsIGNoYW4pICYgMHhmZmZmZmYpOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgdm9pZCBib2FyZF9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCisJLy9wcmludGsoIkluc2lkZSBib2FyZF9pbml0XG4iKTsKKworCUM2WF9wd21Jbml0KGRldi0+aW9iYXNlKTsKKwlDNlhfZW5jUmVzZXRBbGwoZGV2LT5pb2Jhc2UpOworCit9CisKKy8vc3RhdGljIHZvaWQgYm9hcmRfaGFsdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSB7CisvLyAgQzZYX3B3bUluaXQoZGV2LT5pb2Jhc2UpOworLy99CisKKy8qCisgICBvcHRpb25zWzBdIC0gSS9PIHBvcnQKKyAgIG9wdGlvbnNbMV0gLSBpcnEKKyAgIG9wdGlvbnNbMl0gLSBudW1iZXIgb2YgZW5jb2RlciBjaGlwcyBpbnN0YWxsZWQKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgYzZ4ZGlnaW9fcG5wX3RibFtdID0geworCS8qIFN0YW5kYXJkIExQVCBQcmludGVyIFBvcnQgKi8KKwl7LmlkID0gIlBOUDA0MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAorCS8qIEVDUCBQcmludGVyIFBvcnQgKi8KKwl7LmlkID0gIlBOUDA0MDEiLC5kcml2ZXJfZGF0YSA9IDB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgYzZ4ZGlnaW9fcG5wX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjNnhkaWdpbyIsCisJLmlkX3RhYmxlID0gYzZ4ZGlnaW9fcG5wX3RibCwKK307CisKK3N0YXRpYyBpbnQgYzZ4ZGlnaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBjNnhkaWdpbzogMHglMDRseFxuIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgQzZYRElHSU9fU0laRSwgImM2eGRpZ2lvIikpIHsKKwkJcHJpbnRrKCJjb21lZGklZDogSS9PIHBvcnQgY29uZmxpY3RcbiIsIGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gImM2eGRpZ2lvIjsKKworCXJlc3VsdCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKTsJLy8gMyB3aXRoIGVuY29kZXJfaW5pdCB3cml0ZQorCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJLy8gTWFrZSBzdXJlIHRoYXQgUG5QIHBvcnRzIGdldHMgYWN0aXZhdGVkCisJcG5wX3JlZ2lzdGVyX2RyaXZlcigmYzZ4ZGlnaW9fcG5wX2RyaXZlcik7CisKKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXJxID4gMCkgeworCQlwcmludGsoImNvbWVkaSVkOiBpcnEgPSAldSBpZ25vcmVkXG4iLCBkZXYtPm1pbm9yLCBpcnEpOworCX0gZWxzZSBpZiAoaXJxID09IDApIHsKKwkJcHJpbnRrKCJjb21lZGklZDogbm8gaXJxXG4iLCBkZXYtPm1pbm9yKTsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBwd20gb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsJLy8gTm90IHN1cmUgd2hhdCB0byBwdXQgaGVyZQorCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwkvKiAgICAgIHMtPnRyaWdbMF0gPSBjNnhkaWdpb19wd21vOyAqLworCXMtPmluc25fcmVhZCA9IGM2eGRpZ2lvX3B3bW9faW5zbl9yZWFkOworCXMtPmluc25fd3JpdGUgPSBjNnhkaWdpb19wd21vX2luc25fd3JpdGU7CisJcy0+bWF4ZGF0YSA9IDUwMDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CS8vIEEgc3VpdGFibGUgbGllCisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBlbmNvZGVyIChjb3VudGVyKSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfTFNBTVBMOworCXMtPm5fY2hhbiA9IDI7CisJLyogcy0+dHJpZ1swXSA9IGM2eGRpZ2lvX2VpOyAqLworCXMtPmluc25fcmVhZCA9IGM2eGRpZ2lvX2VpX2luc25fcmVhZDsKKwlzLT5tYXhkYXRhID0gMHhmZmZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKworCS8vICAgICAgICAgIHMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8vICAgICAgLyogcHdtIG91dHB1dCBzdWJkZXZpY2UgKi8KKwkvLyAgICAgIHMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOyAgLy8gTm90IHN1cmUgd2hhdCB0byBwdXQgaGVyZQorCS8vICAgICAgcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRTsKKwkvLyAgICAgIHMtPm5fY2hhbiA9IDE7CisJLy8gICAgICAvKiBzLT50cmlnWzBdID0gYzZ4ZGlnaW9fZWlfaW5pdDsgKi8KKwkvLyAgICAgIHMtPmluc25fcmVhZCA9IGM2eGRpZ2lvX2VpX2luaXRfaW5zbl9yZWFkOworCS8vICAgICAgcy0+aW5zbl93cml0ZSA9IGM2eGRpZ2lvX2VpX2luaXRfaW5zbl93cml0ZTsKKwkvLyAgICAgIHMtPm1heGRhdGEgPSAweEZGRkY7ICAvLyBSZWFsbHkganVzdCBhIGRvbid0IGNhcmUKKwkvLyAgICAgIHMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247IC8vIE5vdCBzdXJlIHdoYXQgdG8gcHV0IGhlcmUKKworCS8vIEkgd2lsbCBjYWxsIHRoaXMgaW5pdCBhbnl3YXkgYnV0IG1vcmUgdGhhbiBsaWtlbHkgdGhlIERTUCBib2FyZCB3aWxsIG5vdCBiZSBjb25uZWN0CisJLy8gd2hlbiBkZXZpY2UgZHJpdmVyIGlzIGxvYWRlZC4KKwlib2FyZF9pbml0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjNnhkaWdpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisvLyAgYm9hcmRfaGFsdChkZXYpOyAgLy8gbWF5IG5vdCBuZWVkIHRoaXMKKworCXByaW50aygiY29tZWRpJWQ6IGM2eGRpZ2lvOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKSB7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBDNlhESUdJT19TSVpFKTsKKwl9CisJaWYgKGRldi0+aXJxKSB7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0JCQkvLyBOb3QgdXNpbmcgSVJRIHNvIEkgYW0gbm90IHN1cmUgaWYgSSBuZWVkIHRoaXMKKwlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmM2eGRpZ2lvX3BucF9kcml2ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYzZ4ZGlnaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmZlNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKQEAgLTAsMCArMSw5NzYgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZGFzMTZjcy5jCisgICAgRHJpdmVyIGZvciBDb21wdXRlciBCb2FyZHMgUEMtQ0FSRCBEQVMxNi8xNi4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGNiX2RhczE2X2NzCitEZXNjcmlwdGlvbjogQ29tcHV0ZXIgQm9hcmRzIFBDLUNBUkQgREFTMTYvMTYKK0RldmljZXM6IFtDb21wdXRlckJvYXJkc10gUEMtQ0FSRCBEQVMxNi8xNiAoY2JfZGFzMTZfY3MpLCBQQy1DQVJEIERBUzE2LzE2LUFPCitBdXRob3I6IGRzCitVcGRhdGVkOiBNb24sIDA0IE5vdiAyMDAyIDIwOjA0OjIxIC0wODAwCitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorCisjaW5jbHVkZSAiODI1My5oIgorCisjZGVmaW5lIERBUzE2Q1NfU0laRQkJCTE4CisKKyNkZWZpbmUgREFTMTZDU19BRENfREFUQQkJMAorI2RlZmluZSBEQVMxNkNTX0RJT19NVVgJCQkyCisjZGVmaW5lIERBUzE2Q1NfTUlTQzEJCQk0CisjZGVmaW5lIERBUzE2Q1NfTUlTQzIJCQk2CisjZGVmaW5lIERBUzE2Q1NfQ1RSMAkJCTgKKyNkZWZpbmUgREFTMTZDU19DVFIxCQkJMTAKKyNkZWZpbmUgREFTMTZDU19DVFIyCQkJMTIKKyNkZWZpbmUgREFTMTZDU19DVFJfQ09OVFJPTAkJMTQKKyNkZWZpbmUgREFTMTZDU19ESU8JCQkxNgorCitzdHJ1Y3QgZGFzMTZjc19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOworCWludCBuX2FvX2NoYW5zOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFzMTZjc19ib2FyZCBkYXMxNmNzX2JvYXJkc1tdID0geworCXsKKwkgICAgICBkZXZpY2VfaWQ6MHgwMDAwLC8qIHVua25vd24gKi8KKwkgICAgICBuYW1lOgkiUEMtQ0FSRCBEQVMxNi8xNiIsCisJICAgICAgbl9hb19jaGFuczowLAorCQl9LAorCXsKKwkgICAgICBkZXZpY2VfaWQ6MHgwMDM5LAorCSAgICAgIG5hbWU6CSJQQy1DQVJEIERBUzE2LzE2LUFPIiwKKwkgICAgICBuX2FvX2NoYW5zOjIsCisJCX0sCisJeworCSAgICAgIGRldmljZV9pZDoweDQwMDksCisJICAgICAgbmFtZToJIlBDTS1EQVMxNnMvMTYiLAorCSAgICAgIG5fYW9fY2hhbnM6MCwKKwkJfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHMgKHNpemVvZihkYXMxNmNzX2JvYXJkcykvc2l6ZW9mKGRhczE2Y3NfYm9hcmRzWzBdKSkKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRhczE2Y3NfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGRhczE2Y3NfcHJpdmF0ZSB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzMTsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMyOworfTsKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXMxNmNzX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgZGFzMTZjc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkYXMxNmNzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhczE2Y3MgPSB7CisgICAgICBkcml2ZXJfbmFtZToiY2JfZGFzMTZfY3MiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczE2Y3NfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhczE2Y3NfZGV0YWNoLAorfTsKKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpjdXJfZGV2ID0gTlVMTDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGRhczE2Y3NfYWlfcmFuZ2UgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwl9Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZjc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgaW50IGRhczE2Y3NfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRhczE2Y3NfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNmNzX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNmNzX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNmNzX3RpbWVyX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNmNzX3RpbWVyX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgZ2V0X3Byb2RpZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJdHVwbGVfdCB0dXBsZTsKKwl1X3Nob3J0IGJ1ZlsxMjhdOworCWludCBwcm9kaWQgPSAwOworCisJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOworCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOworCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IDApICYmCisJCShwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSA9PSAwKSkgeworCQlwcm9kaWQgPSBsZTE2X3RvX2NwdShidWZbMV0pOworCX0KKworCXJldHVybiBwcm9kaWQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFzMTZjc19ib2FyZCAqZGFzMTZjc19wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlpbnQgaWQ7CisJaW50IGk7CisKKwlpZCA9IGdldF9wcm9kaWQoZGV2LCBsaW5rKTsKKworCWZvciAoaSA9IDA7IGkgPCBuX2JvYXJkczsgaSsrKSB7CisJCWlmIChkYXMxNmNzX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0gaWQpIHsKKwkJCXJldHVybiBkYXMxNmNzX2JvYXJkcyArIGk7CisJCX0KKwl9CisKKwlwcmludGsoInVua25vd24gYm9hcmQhXG4iKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQ7CisJaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBjYl9kYXMxNl9jczogIiwgZGV2LT5taW5vcik7CisKKwlsaW5rID0gY3VyX2RldjsJCS8qIFhYWCBoYWNrICovCisJaWYgKCFsaW5rKQorCQlyZXR1cm4gLUVJTzsKKworCWRldi0+aW9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworCXByaW50aygiSS9PIGJhc2U9MHglMDRseCAiLCBkZXYtPmlvYmFzZSk7CisKKwlwcmludGsoImZpbmdlcnByaW50OlxuIik7CisJZm9yIChpID0gMDsgaSA8IDQ4OyBpICs9IDIpIHsKKwkJcHJpbnRrKCIlMDR4ICIsIGludyhkZXYtPmlvYmFzZSArIGkpKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGxpbmstPmlycS5Bc3NpZ25lZElSUSwgZGFzMTZjc19pbnRlcnJ1cHQsCisJCUlSUUZfU0hBUkVELCAiY2JfZGFzMTZfY3MiLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiByZXQ7CisJfQorCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCXByaW50aygiaXJxPSV1ICIsIGRldi0+aXJxKTsKKworCWRldi0+Ym9hcmRfcHRyID0gZGFzMTZjc19wcm9iZShkZXYsIGxpbmspOworCWlmICghZGV2LT5ib2FyZF9wdHIpCisJCXJldHVybiAtRUlPOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczE2Y3NfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRiB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPnJhbmdlX3RhYmxlID0gJmRhczE2Y3NfYWlfcmFuZ2U7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CisJcy0+aW5zbl9yZWFkID0gZGFzMTZjc19haV9yaW5zbjsKKwlzLT5kb19jbWQgPSBkYXMxNmNzX2FpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gZGFzMTZjc19haV9jbWR0ZXN0OworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlpZiAodGhpc2JvYXJkLT5uX2FvX2NoYW5zKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPm5fYW9fY2hhbnM7CisJCXMtPm1heGRhdGEgPSAweGZmZmY7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJcy0+aW5zbl93cml0ZSA9ICZkYXMxNmNzX2FvX3dpbnNuOworCQlzLT5pbnNuX3JlYWQgPSAmZGFzMTZjc19hb19yaW5zbjsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwlpZiAoMSkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IDg7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBkYXMxNmNzX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gZGFzMTZjc19kaW9faW5zbl9jb25maWc7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiB0aW1lciBzdWJkZXZpY2UgKi8KKwlpZiAoMCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVElNRVI7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMTsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisJCXMtPmluc25fcmVhZCA9IGRhczE2Y3NfdGltZXJfaW5zbl9yZWFkOworCQlzLT5pbnNuX2NvbmZpZyA9IGRhczE2Y3NfdGltZXJfaW5zbl9jb25maWc7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhczE2Y3M6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZjc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwkvL3N0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqICJpbnN0cnVjdGlvbnMiIHJlYWQvd3JpdGUgZGF0YSBpbiAib25lLXNob3QiIG9yICJzb2Z0d2FyZS10cmlnZ2VyZWQiCisgKiBtb2RlLgorICovCitzdGF0aWMgaW50IGRhczE2Y3NfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCB0bzsKKwlpbnQgYXJlZjsKKwlpbnQgcmFuZ2U7CisJaW50IGNoYW47CisJc3RhdGljIGludCByYW5nZV9iaXRzW10gPSB7IDB4ODAwLCAweDAwMCwgMHgxMDAsIDB4MjAwIH07CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJYXJlZiA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJb3V0dyhjaGFuLCBkZXYtPmlvYmFzZSArIDIpOworCisJZGV2cHJpdi0+c3RhdHVzMSAmPSB+MHhmMzIwOworCWRldnByaXYtPnN0YXR1czEgfD0gKGFyZWYgPT0gQVJFRl9ESUZGKSA/IDAgOiAweDAwMjA7CisJb3V0dyhkZXZwcml2LT5zdGF0dXMxLCBkZXYtPmlvYmFzZSArIDQpOworCisJZGV2cHJpdi0+c3RhdHVzMiAmPSB+MHhmZjAwOworCWRldnByaXYtPnN0YXR1czIgfD0gcmFuZ2VfYml0c1tyYW5nZV07CisJb3V0dyhkZXZwcml2LT5zdGF0dXMyLCBkZXYtPmlvYmFzZSArIDYpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXR3KDAsIGRldi0+aW9iYXNlKTsKKworI2RlZmluZSBUSU1FT1VUIDEwMDAKKwkJZm9yICh0byA9IDA7IHRvIDwgVElNRU9VVDsgdG8rKykgeworCQkJaWYgKGludyhkZXYtPmlvYmFzZSArIDQpICYgMHgwMDgwKQorCQkJCWJyZWFrOworCQl9CisJCWlmICh0byA9PSBUSU1FT1VUKSB7CisJCQlwcmludGsoImNiX2RhczE2X2NzOiBhaSB0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJZGF0YVtpXSA9ICh1bnNpZ25lZCBzaG9ydClpbncoZGV2LT5pb2Jhc2UgKyAwKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkYXMxNmNzX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRUQJMTAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKyNkZWZpbmUgTUlOX1NQRUVECTEwMDAwMDAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzaG91bGQgYmUgbGV2ZWwvZWRnZSwgaGkvbG8gc3BlY2lmaWNhdGlvbiBoZXJlICovCisJCS8qIHNob3VsZCBzcGVjaWZ5IG11bHRpcGxlIGV4dGVybmFsIHRyaWdnZXJzICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gOSkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDk7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgTUFYX1NQRUVEKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gTUFYX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiBNSU5fU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNSU5fU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2VlIGFib3ZlICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gOSkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDk7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoY21kLT5zdG9wX2FyZyA+IDB4MDBmZmZmZmYpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAweDAwZmZmZmZmOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl1bnNpZ25lZCBpbnQgZGl2MSwgZGl2MjsKKworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKDEwMCwgJmRpdjEsICZkaXYyLAorCQkJJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl1bnNpZ25lZCBpbnQgZGl2MSwgZGl2MjsKKworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKDEwMCwgJmRpdjEsICZkaXYyLAorCQkJJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNmNzX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIHNob3J0IHN0YXR1czE7CisJdW5zaWduZWQgc2hvcnQgZDsKKwlpbnQgYml0OworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJCWQgPSBkYXRhW2ldOworCisJCW91dHcoZGV2cHJpdi0+c3RhdHVzMSwgZGV2LT5pb2Jhc2UgKyA0KTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKworCQlzdGF0dXMxID0gZGV2cHJpdi0+c3RhdHVzMSAmIH4weGY7CisJCWlmIChjaGFuKQorCQkJc3RhdHVzMSB8PSAweDAwMDE7CisJCWVsc2UKKwkJCXN0YXR1czEgfD0gMHgwMDA4OworCisvKiAJCXByaW50aygiMHglMDR4XG4iLHN0YXR1czEpOyovCisJCW91dHcoc3RhdHVzMSwgZGV2LT5pb2Jhc2UgKyA0KTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKworCQlmb3IgKGJpdCA9IDE1OyBiaXQgPj0gMDsgYml0LS0pIHsKKwkJCWludCBiID0gKGQgPj4gYml0KSAmIDB4MTsKKwkJCWIgPDw9IDE7CisvKgkJCXByaW50aygiMHglMDR4XG4iLHN0YXR1czEgfCBiIHwgMHgwMDAwKTsqLworCQkJb3V0dyhzdGF0dXMxIHwgYiB8IDB4MDAwMCwgZGV2LT5pb2Jhc2UgKyA0KTsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisvKgkJCXByaW50aygiMHglMDR4XG4iLHN0YXR1czEgfCBiIHwgMHgwMDA0KTsqLworCQkJb3V0dyhzdGF0dXMxIHwgYiB8IDB4MDAwNCwgZGV2LT5pb2Jhc2UgKyA0KTsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKy8qCQltYWtlIGhpZ2ggYm90aCBEQUMwQ1MgYW5kIERBQzFDUyB0byBsb2FkCisJCW5ldyBkYXRhIGFuZCB1cGRhdGUgYW5hbG9nIG91dHB1dCovCisJCW91dHcoc3RhdHVzMSB8IDB4OSwgZGV2LT5pb2Jhc2UgKyA0KTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKyAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCitzdGF0aWMgaW50IGRhczE2Y3NfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisKKwlyZXR1cm4gaTsKK30KKworLyogRElPIGRldmljZXMgYXJlIHNsaWdodGx5IHNwZWNpYWwuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0bworICogaW1wbGVtZW50IHRoZSBpbnNuX3JlYWQvaW5zbl93cml0ZSBpbnRlcmZhY2UsIGl0IGlzIG11Y2ggbW9yZQorICogdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBpZiB5b3UgaW1wbGVtZW50IHRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlLgorICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCisgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCitzdGF0aWMgaW50IGRhczE2Y3NfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisKKwkJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyAxNik7CisJfQorCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbAorCSAqIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuICovCisJZGF0YVsxXSA9IGludyhkZXYtPmlvYmFzZSArIDE2KTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCBiaXRzOworCisJaWYgKGNoYW4gPCA0KQorCQliaXRzID0gMHgwZjsKKwllbHNlCisJCWJpdHMgPSAweGYwOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IGJpdHM7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IGJpdHM7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT4KKwkJCWlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWRldnByaXYtPnN0YXR1czIgJj0gfjB4MDBjMDsKKwlkZXZwcml2LT5zdGF0dXMyIHw9IChzLT5pb19iaXRzICYgMHhmMCkgPyAweDAwODAgOiAwOworCWRldnByaXYtPnN0YXR1czIgfD0gKHMtPmlvX2JpdHMgJiAweDBmKSA/IDB4MDA0MCA6IDA7CisKKwlvdXR3KGRldnByaXYtPnN0YXR1czIsIGRldi0+aW9iYXNlICsgNik7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGludCBkYXMxNmNzX3RpbWVyX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc190aW1lcl9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIFBDTUNJQSBzdHVmZiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoZSBmb2xsb3dpbmcgcGNtY2lhIGNvZGUgZm9yIHRoZSBwY20tZGFzMDggaXMgYWRhcHRlZCBmcm9tIHRoZQorICAgIGR1bW15X2NzLmMgZHJpdmVyIG9mIHRoZSBMaW51eCBQQ01DSUEgQ2FyZCBTZXJ2aWNlcyBwYWNrYWdlLgorCisgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgorICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKKyAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAorICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCisgICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCisqLworI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgfHwgZGVmaW5lZChDT05GSUdfUENNQ0lBX01PRFVMRSkKKworI2lmZGVmIFBDTUNJQV9ERUJVRworc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKK21vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKK3N0YXRpYyBjaGFyICp2ZXJzaW9uID0KKwkiY2JfZGFzMTZfY3MuYyBwY21jaWEgY29kZSAoRGF2aWQgU2NobGVlZiksIG1vZGlmaWVkIGZyb20gZHVtbXlfY3MuYyAxLjMxIDIwMDEvMDgvMjQgMTI6MTM6MTMgKERhdmlkIEhpbmRzKSI7CisjZWxzZQorI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBkYXMxNmNzX3BjbWNpYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgaW50IGRhczE2Y3NfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK3N0YXRpYyBpbnQgZGFzMTZjc19wY21jaWFfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CisKKy8qCisgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKKyAgICJpbnN0YW5jZXMiIG9mIHRoZSBkcml2ZXIsIHdoZXJlIGVhY2ggaW5zdGFuY2UgcmVwcmVzZW50cyBldmVyeXRoaW5nCisgICBuZWVkZWQgdG8gbWFuYWdlIG9uZSBhY3R1YWwgUENNQ0lBIGNhcmQuCisqLworCitzdGF0aWMgaW50IGRhczE2Y3NfcGNtY2lhX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIGRhczE2Y3NfcGNtY2lhX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKKworLyoKKyAgIFlvdSdsbCBhbHNvIG5lZWQgdG8gcHJvdG90eXBlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBhY3R1YWxseQorICAgYmUgdXNlZCB0byB0YWxrIHRvIHlvdXIgZGV2aWNlLiAgU2VlICdtZW1vcnlfY3MnIGZvciBhIGdvb2QgZXhhbXBsZQorICAgb2YgYSBmdWxseSBzZWxmLXN1ZmZpY2llbnQgZHJpdmVyOyB0aGUgb3RoZXIgZHJpdmVycyByZWx5IG1vcmUgb3IKKyAgIGxlc3Mgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KKyovCisKKy8qCisgICBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCisgICBkZXZpY2UgZHJpdmVyIHdpdGggYXBwcm9wcmlhdGUgY2FyZHMsIHRocm91Z2ggdGhlIGNhcmQgY29uZmlndXJhdGlvbgorICAgZGF0YWJhc2UuCisqLworCitzdGF0aWMgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJjYl9kYXMxNl9jcyI7CisKK3N0cnVjdCBsb2NhbF9pbmZvX3QgeworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWRldl9ub2RlX3Qgbm9kZTsKKwlpbnQgc3RvcDsKKwlzdHJ1Y3QgYnVzX29wZXJhdGlvbnMgKmJ1czsKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGFzMTZjc19wY21jaWFfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKKyAgICBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuCisKKyAgICBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKyAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQorICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkYXMxNmNzX3BjbWNpYV9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWw7CisKKwlERUJVRygwLCAiZGFzMTZjc19wY21jaWFfYXR0YWNoKClcbiIpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsKQorCQlyZXR1cm4gLUVOT01FTTsKKwlsb2NhbC0+bGluayA9IGxpbms7CisJbGluay0+cHJpdiA9IGxvY2FsOworCisJLyogSW5pdGlhbGl6ZSB0aGUgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKi8KKwkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOworCisJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKKwlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKworCWN1cl9kZXYgPSBsaW5rOworCisJZGFzMTZjc19wY21jaWFfY29uZmlnKGxpbmspOworCisJcmV0dXJuIDA7Cit9CQkJCS8qIGRhczE2Y3NfcGNtY2lhX2F0dGFjaCAqLworCitzdGF0aWMgdm9pZCBkYXMxNmNzX3BjbWNpYV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJREVCVUcoMCwgImRhczE2Y3NfcGNtY2lhX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisKKwlpZiAobGluay0+ZGV2X25vZGUpIHsKKwkJKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIGxpbmstPnByaXYpLT5zdG9wID0gMTsKKwkJZGFzMTZjc19wY21jaWFfcmVsZWFzZShsaW5rKTsKKwl9CisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgbG9jYWxfaW5mb190IHN0cnVjdCAqLworCWlmIChsaW5rLT5wcml2KQorCQlrZnJlZShsaW5rLT5wcml2KTsKK30JCQkJLyogZGFzMTZjc19wY21jaWFfZGV0YWNoICovCisKK3N0YXRpYyB2b2lkIGRhczE2Y3NfcGNtY2lhX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OworCXR1cGxlX3QgdHVwbGU7CisJY2lzcGFyc2VfdCBwYXJzZTsKKwlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisJdV9jaGFyIGJ1Zls2NF07CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CisKKwlERUJVRygwLCAiZGFzMTZjc19wY21jaWFfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKworCS8qCisJICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCisJICAgcmVnaXN0ZXJzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwlsYXN0X2ZuID0gR2V0Rmlyc3RUdXBsZTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKwlsYXN0X2ZuID0gR2V0VHVwbGVEYXRhOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworCS8qCisJICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKwkgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCisJICAgdm9sdGFnZSwgSU8gd2luZG93LCBtZW1vcnkgd2luZG93LCBhbmQgaW50ZXJydXB0IHNldHRpbmdzLgorCisJICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKwkgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAorCSAgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQorCSAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKwkgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCisJICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCWxhc3RfZm4gPSBHZXRGaXJzdFR1cGxlOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpCisJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJZGZsdCA9ICpjZmc7CisJCWlmIChjZmctPmluZGV4ID09IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworCisJCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworLyoJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwl9CisqLworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQorCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisKKwkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLworCQlicmVhazsKKworCSAgICAgIG5leHRfZW50cnk6CisJCWxhc3RfZm4gPSBHZXROZXh0VHVwbGU7CisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkKKwkJCWdvdG8gY3NfZmFpbGVkOworCX0KKworCS8qCisJICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQorCSAgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQorCSAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgeworCQlsYXN0X2ZuID0gUmVxdWVzdElSUTsKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkgIT0gMCkKKwkJCWdvdG8gY3NfZmFpbGVkOworCX0KKwkvKgorCSAgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQorCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCisJICovCisJbGFzdF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisKKwkvKgorCSAgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCisJICAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2LgorCSAqLworCXNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCAiY2JfZGFzMTZfY3MiKTsKKwlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4IiwKKwkJZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICV1IiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCXByaW50aygiXG4iKTsKKworCXJldHVybjsKKworICAgICAgY3NfZmFpbGVkOgorCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwlkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKGxpbmspOworfQkJCQkvKiBkYXMxNmNzX3BjbWNpYV9jb25maWcgKi8KKworc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAiZGFzMTZjc19wY21jaWFfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworfQkJCQkvKiBkYXMxNmNzX3BjbWNpYV9yZWxlYXNlICovCisKK3N0YXRpYyBpbnQgZGFzMTZjc19wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwkvKiBNYXJrIHRoZSBkZXZpY2UgYXMgc3RvcHBlZCwgdG8gYmxvY2sgSU8gdW50aWwgbGF0ZXIgKi8KKwlsb2NhbC0+c3RvcCA9IDE7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGFzMTZjc19wY21jaWFfc3VzcGVuZCAqLworCitzdGF0aWMgaW50IGRhczE2Y3NfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwlsb2NhbC0+c3RvcCA9IDA7CisJcmV0dXJuIDA7Cit9CQkJCS8qIGRhczE2Y3NfcGNtY2lhX3Jlc3VtZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIGRhczE2Y3NfaWRfdGFibGVbXSA9IHsKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxYzUsIDB4MDAzOSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMWM1LCAweDQwMDkpLAorCVBDTUNJQV9ERVZJQ0VfTlVMTAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIGRhczE2Y3NfaWRfdGFibGUpOworCitzdHJ1Y3QgcGNtY2lhX2RyaXZlciBkYXMxNmNzX2RyaXZlciA9IHsKKwkucHJvYmUgPSBkYXMxNmNzX3BjbWNpYV9hdHRhY2gsCisJLnJlbW92ZSA9IGRhczE2Y3NfcGNtY2lhX2RldGFjaCwKKwkuc3VzcGVuZCA9IGRhczE2Y3NfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGRhczE2Y3NfcGNtY2lhX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSBkYXMxNmNzX2lkX3RhYmxlLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCQkubmFtZSA9IGRldl9pbmZvLAorCQl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9kYXMxNmNzX3BjbWNpYV9jcyh2b2lkKQoreworCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CisJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGFzMTZjc19kcml2ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9kYXMxNmNzX3BjbWNpYV9jcyh2b2lkKQoreworCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9jczogdW5sb2FkaW5nXG4iKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmRhczE2Y3NfZHJpdmVyKTsKK30KKworaW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2RhczE2Y3NfcGNtY2lhX2NzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RhczE2Y3MpOworfQorCit2b2lkIF9fZXhpdCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWV4aXRfZGFzMTZjc19wY21jaWFfY3MoKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXMxNmNzKTsKK30KKworI2Vsc2UKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzMTZjcyk7CisjZW5kaWYgLy9DT05GSUdfUENNQ0lBCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNjNTUxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYwpAQCAtMCwwICsxLDE4MzEgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKKworICAgIERldmVsb3BlZCBieSBJdmFuIE1hcnRpbmV6IGFuZCBGcmFuayBNb3JpIEhlc3MsIHdpdGggdmFsdWFibGUgaGVscCBmcm9tCisgICAgRGF2aWQgU2NobGVlZiBhbmQgdGhlIHJlc3Qgb2YgdGhlIENvbWVkaSBkZXZlbG9wZXJzIGNvbXVuaXR5LgorCisgICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgSXZhbiBNYXJ0aW5leiA8aW1yQG9lcnN0ZWQuZHR1LmRrPgorICAgIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTctOCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisvKgorRHJpdmVyOiBjYl9wY2lkYXMKK0Rlc2NyaXB0aW9uOiBNZWFzdXJlbWVudENvbXB1dGluZyBQQ0ktREFTIHNlcmllcyB3aXRoIHRoZSBBTUNDIFM1OTMzIFBDSSBjb250cm9sbGVyCitBdXRob3I6IEl2YW4gTWFydGluZXogPGltckBvZXJzdGVkLmR0dS5kaz4sCisgIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK1VwZGF0ZWQ6IDIwMDMtMy0xMQorRGV2aWNlczogW01lYXN1cmVtZW50IENvbXB1dGluZ10gUENJLURBUzE2MDIvMTYgKGNiX3BjaWRhcyksCisgIFBDSS1EQVMxNjAyLzE2anIsIFBDSS1EQVMxNjAyLzEyLCBQQ0ktREFTMTIwMCwgUENJLURBUzEyMDBqciwKKyAgUENJLURBUzEwMDAsIFBDSS1EQVMxMDAxLCBQQ0lfREFTMTAwMgorCitTdGF0dXM6CisgIFRoZXJlIGFyZSBtYW55IHJlcG9ydHMgb2YgdGhlIGRyaXZlciBiZWluZyB1c2VkIHdpdGggbW9zdCBvZiB0aGUKKyAgc3VwcG9ydGVkIGNhcmRzLiBEZXNwaXRlIG5vIGRldGFpbGVkIGxvZyBpcyBtYWludGFpbmVkLCBpdCBjYW4KKyAgYmUgc2FpZCB0aGF0IHRoZSBkcml2ZXIgaXMgcXVpdGUgdGVzdGVkIGFuZCBzdGFibGUuCisKKyAgVGhlIGJvYXJkcyBtYXkgYmUgYXV0b2NhbGlicmF0ZWQgdXNpbmcgdGhlIGNvbWVkaV9jYWxpYnJhdGUKKyAgdXRpbGl0eS4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisKK0ZvciBjb21tYW5kcywgdGhlIHNjYW5uZWQgY2hhbm5lbHMgbXVzdCBiZSBjb25zZWN1dGl2ZQorKGkuZS4gNC01LTYtNywgMi0zLTQsLi4uKSwgYW5kIG11c3QgYWxsIGhhdmUgdGhlIHNhbWUKK3JhbmdlIGFuZCBhcmVmLgorKi8KKy8qCisKK1RPRE86CisKK2FuYWxvZyB0cmlnZ2VyaW5nIG9uIDE2MDIgc2VyaWVzCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAiYW1jY19zNTkzMy5oIgorI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI3VuZGVmIENCX1BDSURBU19ERUJVRwkJLy8gZGlzYWJsZSBkZWJ1Z2dpbmcgY29kZQorLy8jZGVmaW5lIENCX1BDSURBU19ERUJVRyAgICAgICAvLyBlbmFibGUgZGVidWdnaW5nIGNvZGUKKworLy8gUENJIHZlbmRvciBudW1iZXIgb2YgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DQgkweDEzMDcKKyNkZWZpbmUgVElNRVJfQkFTRSAxMDAJCS8vIDEwTUh6IG1hc3RlciBjbG9jaworI2RlZmluZSBBSV9CVUZGRVJfU0laRSAxMDI0CS8vIG1heGltdW0gZmlmbyBzaXplIG9mIGFueSBzdXBwb3J0ZWQgYm9hcmQKKyNkZWZpbmUgQU9fQlVGRkVSX1NJWkUgMTAyNAkvLyBtYXhpbXVtIGZpZm8gc2l6ZSBvZiBhbnkgc3VwcG9ydGVkIGJvYXJkCisjZGVmaW5lIE5VTV9DSEFOTkVMU184ODAwIDgKKyNkZWZpbmUgTlVNX0NIQU5ORUxTXzczNzYgMQorI2RlZmluZSBOVU1fQ0hBTk5FTFNfODQwMiAyCisjZGVmaW5lIE5VTV9DSEFOTkVMU19EQUMwOCAxCisKKy8qIFBDSS1EQVMgYmFzZSBhZGRyZXNzZXMgKi8KKworLy8gaW5kaWNlcyBvZiBiYXNlIGFkZHJlc3MgcmVnaW9ucworI2RlZmluZSBTNTkzM19CQURSSU5ERVggMAorI2RlZmluZSBDT05UX1NUQVRfQkFEUklOREVYIDEKKyNkZWZpbmUgQURDX0ZJRk9fQkFEUklOREVYIDIKKyNkZWZpbmUgUEFDRVJfQkFEUklOREVYIDMKKyNkZWZpbmUgQU9fQkFEUklOREVYIDQKKy8vIHNpemVzIG9mIGlvIHJlZ2lvbnMKKyNkZWZpbmUgQ09OVF9TVEFUX1NJWkUgMTAKKyNkZWZpbmUgQURDX0ZJRk9fU0laRSA0CisjZGVmaW5lIFBBQ0VSX1NJWkUgMTIKKyNkZWZpbmUgQU9fU0laRSA0CisKKy8qIENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVycyAqLworI2RlZmluZSBJTlRfQURDRklGTwkwCS8vIElOVEVSUlVQVCAvIEFEQyBGSUZPIHJlZ2lzdGVyCisjZGVmaW5lICAgSU5UX0VPUyAweDEJCS8vIGludGVycnVwdCBlbmQgb2Ygc2NhbgorI2RlZmluZSAgIElOVF9GSEYgMHgyCQkvLyBpbnRlcnJ1cHQgZmlmbyBoYWxmIGZ1bGwKKyNkZWZpbmUgICBJTlRfRk5FIDB4MwkJLy8gaW50ZXJydXB0IGZpZm8gbm90IGVtcHR5CisjZGVmaW5lICAgSU5UX01BU0sgMHgzCQkvLyBtYXNrIG9mIGludGVycnVwdCBzZWxlY3QgYml0cworI2RlZmluZSAgIElOVEUgMHg0CQkvLyBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lICAgREFIRklFIDB4OAkJLy8gZGFjIGhhbGYgZnVsbCBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lICAgRU9BSUUJMHgxMAkJLy8gZW5kIG9mIGFxdWlzaXRpb24gaW50ZXJydXB0IGVuYWJsZQorI2RlZmluZSAgIERBSEZJCTB4MjAJCS8vIGRhYyBoYWxmIGZ1bGwgcmVhZCBzdGF0dXMgLyB3cml0ZSBpbnRlcnJ1cHQgY2xlYXIKKyNkZWZpbmUgICBFT0FJIDB4NDAJCS8vIHJlYWQgZW5kIG9mIGFjcS4gaW50ZXJydXB0IHN0YXR1cyAvIHdyaXRlIGNsZWFyCisjZGVmaW5lICAgSU5UIDB4ODAJCS8vIHJlYWQgaW50ZXJydXB0IHN0YXR1cyAvIHdyaXRlIGNsZWFyCisjZGVmaW5lICAgRU9CSSAweDIwMAkJLy8gcmVhZCBlbmQgb2YgYnVyc3QgaW50ZXJydXB0IHN0YXR1cworI2RlZmluZSAgIEFESEZJIDB4NDAwCQkvLyByZWFkIGhhbGYtZnVsbCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICAgQURORUkgMHg4MDAJCS8vIHJlYWQgZmlmbyBub3QgZW1wdHkgaW50ZXJydXB0IGxhdGNoIHN0YXR1cworI2RlZmluZSAgIEFETkUgMHgxMDAwCQkvLyByZWFkLCBmaWZvIG5vdCBlbXB0eSAocmVhbHRpbWUsIG5vdCBsYXRjaGVkKSBzdGF0dXMKKyNkZWZpbmUgICBEQUVNSUUJMHgxMDAwCS8vIHdyaXRlLCBkYWMgZW1wdHkgaW50ZXJydXB0IGVuYWJsZQorI2RlZmluZSAgIExBREZVTCAweDIwMDAJCS8vIHJlYWQgZmlmbyBvdmVyZmxvdyAvIHdyaXRlIGNsZWFyCisjZGVmaW5lICAgREFFTUkgMHg0MDAwCQkvLyBkYWMgZmlmbyBlbXB0eSBpbnRlcnJ1cHQgc3RhdHVzIC8gd3JpdGUgY2xlYXIKKworI2RlZmluZSBBRENNVVhfQ09OVAkyCS8vIEFEQyBDSEFOTkVMIE1VWCBBTkQgQ09OVFJPTCByZWdpc3RlcgorI2RlZmluZSAgIEJFR0lOX1NDQU4oeCkJKCh4KSAmIDB4ZikKKyNkZWZpbmUgICBFTkRfU0NBTih4KQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgICBHQUlOX0JJVFMoeCkJKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lICAgVU5JUAkweDgwMAkJLy8gQW5hbG9nIGZyb250LWVuZCB1bmlwb2xhciBmb3IgcmFuZ2UKKyNkZWZpbmUgICBTRQkweDQwMAkJLy8gSW5wdXRzIGluIHNpbmdsZS1lbmRlZCBtb2RlCisjZGVmaW5lICAgUEFDRVJfTUFTSwkweDMwMDAJLy8gcGFjZXIgc291cmNlIGJpdHMKKyNkZWZpbmUgICBQQUNFUl9JTlQgMHgxMDAwCS8vIGludGVybmFsIHBhY2VyCisjZGVmaW5lICAgUEFDRVJfRVhUX0ZBTEwJMHgyMDAwCS8vIGV4dGVybmFsIGZhbGxpbmcgZWRnZQorI2RlZmluZSAgIFBBQ0VSX0VYVF9SSVNFCTB4MzAwMAkvLyBleHRlcm5hbCByaXNpbmcgZWRnZQorI2RlZmluZSAgIEVPQwkweDQwMDAJCS8vIGFkYyBub3QgYnVzeQorCisjZGVmaW5lIFRSSUdfQ09OVFNUQVQgNAkJLy8gVFJJR0dFUiBDT05UUk9ML1NUQVRVUyByZWdpc3RlcgorI2RlZmluZSAgIFNXX1RSSUdHRVIgMHgxCS8vIHNvZnR3YXJlIHN0YXJ0IHRyaWdnZXIKKyNkZWZpbmUgICBFWFRfVFJJR0dFUiAweDIJLy8gZXh0ZXJuYWwgc3RhcnQgdHJpZ2dlcgorI2RlZmluZSAgIEFOQUxPR19UUklHR0VSIDB4MwkvLyBleHRlcm5hbCBhbmFsb2cgdHJpZ2dlcgorI2RlZmluZSAgIFRSSUdHRVJfTUFTSwkweDMJLy8gbWFzayBvZiBiaXRzIHRoYXQgZGV0ZXJtaW5lIHN0YXJ0IHRyaWdnZXIKKyNkZWZpbmUgICBUR0VOCTB4MTAJCS8vIGVuYWJsZSBleHRlcm5hbCBzdGFydCB0cmlnZ2VyCisjZGVmaW5lICAgQlVSU1RFIDB4MjAJCS8vIGJ1cnN0IG1vZGUgZW5hYmxlCisjZGVmaW5lICAgWFRSQ0wJMHg4MAkJLy8gY2xlYXIgZXh0ZXJuYWwgdHJpZ2dlcgorCisjZGVmaW5lIENBTElCUkFUSU9OX1JFRwk2CS8vIENBTElCUkFUSU9OIHJlZ2lzdGVyCisjZGVmaW5lICAgU0VMRUNUXzg4MDBfQklUCTB4MTAwCS8vIHNlbGVjdCA4ODAwIGNhbGRhYworI2RlZmluZSAgIFNFTEVDVF9UUklNUE9UX0JJVAkweDIwMAkvLyBzZWxlY3QgYWQ3Mzc2IHRyaW0gcG90CisjZGVmaW5lICAgU0VMRUNUX0RBQzA4X0JJVAkweDQwMAkvLyBzZWxlY3QgZGFjMDggY2FsZGFjCisjZGVmaW5lICAgQ0FMX1NSQ19CSVRTKHgpCSgoKHgpICYgMHg3KSA8PCAxMSkKKyNkZWZpbmUgICBDQUxfRU5fQklUCTB4NDAwMAkvLyByZWFkIGNhbGlicmF0aW9uIHNvdXJjZSBpbnN0ZWFkIG9mIGFuYWxvZyBpbnB1dCBjaGFubmVsIDAKKyNkZWZpbmUgICBTRVJJQUxfREFUQV9JTl9CSVQJMHg4MDAwCS8vIHNlcmlhbCBkYXRhIHN0cmVhbSBnb2luZyB0byA4ODAwIGFuZCA3Mzc2CisKKyNkZWZpbmUgREFDX0NTUgkweDgJCS8vIGRhYyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIKK2VudW0gZGFjX2Nzcl9iaXRzIHsKKwlEQUNFTiA9IDB4MiwJCS8vIGRhYyBlbmFibGUKKwlEQUNfTU9ERV9VUERBVEVfQk9USCA9IDB4ODAsCS8vIHVwZGF0ZSBib3RoIGRhY3Mgd2hlbiBkYWMwIGlzIHdyaXR0ZW4KK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBEQUNfUkFOR0UodW5zaWduZWQgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCByYW5nZSkKK3sKKwlyZXR1cm4gKHJhbmdlICYgMHgzKSA8PCAoOCArIDIgKiAoY2hhbm5lbCAmIDB4MSkpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgREFDX1JBTkdFX01BU0sodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDB4MyA8PCAoOCArIDIgKiAoY2hhbm5lbCAmIDB4MSkpOworfTsKKworLy8gYml0cyBmb3IgMTYwMiBzZXJpZXMgb25seQorZW51bSBkYWNfY3NyX2JpdHNfMTYwMiB7CisJREFDX0VNUFRZID0gMHgxLAkvLyBkYWMgZmlmbyBlbXB0eSwgcmVhZCwgd3JpdGUgY2xlYXIKKwlEQUNfU1RBUlQgPSAweDQsCS8vIHN0YXJ0L2FybSBkYWMgZmlmbyBvcGVyYXRpb25zCisJREFDX1BBQ0VSX01BU0sgPSAweDE4LAkvLyBiaXRzIHRoYXQgc2V0IGRhYyBwYWNlciBzb3VyY2UKKwlEQUNfUEFDRVJfSU5UID0gMHg4LAkvLyBkYWMgaW50ZXJuYWwgcGFjaW5nCisJREFDX1BBQ0VSX0VYVF9GQUxMID0gMHgxMCwJLy8gZGFjIGV4dGVybmFsIHBhY2luZywgZmFsbGluZyBlZGdlCisJREFDX1BBQ0VSX0VYVF9SSVNFID0gMHgxOCwJLy8gZGFjIGV4dGVybmFsIHBhY2luZywgcmlzaW5nIGVkZ2UKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBEQUNfQ0hBTl9FTih1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMSA8PCAoNSArIChjaGFubmVsICYgMHgxKSk7CS8vIGVuYWJsZSBjaGFubmVsIDAgb3IgMQorfTsKKworLyogYW5hbG9nIGlucHV0IGZpZm8gKi8KKyNkZWZpbmUgQURDREFUQQkwCQkvLyBBREMgREFUQSByZWdpc3RlcgorI2RlZmluZSBBRENGSUZPQ0xSCTIJLy8gQURDIEZJRk8gQ0xFQVIKKworLy8gcGFjZXIsIGNvdW50ZXIsIGRpbyByZWdpc3RlcnMKKyNkZWZpbmUgQURDODI1NCAwCisjZGVmaW5lIERJT184MjU1IDQKKyNkZWZpbmUgREFDODI1NCA4CisKKy8vIGFuYWxvZyBvdXRwdXQgcmVnaXN0ZXJzIGZvciAxMDB4LCAxMjAwIHNlcmllcworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgREFDX0RBVEFfUkVHKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAyICogKGNoYW5uZWwgJiAweDEpOworfQorCisvKiBhbmFsb2cgb3V0cHV0IHJlZ2lzdGVycyBmb3IgMTYwMiBzZXJpZXMqLworI2RlZmluZSBEQUNEQVRBCTAJCS8vIERBQyBEQVRBIHJlZ2lzdGVyCisjZGVmaW5lIERBQ0ZJRk9DTFIJMgkvLyBEQUMgRklGTyBDTEVBUgorCisvLyBiaXQgaW4gaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgcmFuZ2UgaW5kZXggdGhhdCBpbmRpY2F0ZXMgdW5pcG9sYXIgaW5wdXQgcmFuZ2UKKyNkZWZpbmUgSVNfVU5JUE9MQVIgMHg0CisvLyBhbmFsb2cgaW5wdXQgcmFuZ2VzIGZvciBtb3N0IGJvYXJkcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGNiX3BjaWRhc19yYW5nZXMgPSB7CisJOCwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSkKKwkJfQorfTsKKworLy8gcGNpLWRhczEwMDEgaW5wdXQgcmFuZ2VzCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgY2JfcGNpZGFzX2FsdF9yYW5nZXMgPSB7CisJOCwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wMSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCQlVTklfUkFOR0UoMC4wMSkKKwkJfQorfTsKKworLy8gYW5hbG9nIG91dHB1dCByYW5nZXMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBjYl9wY2lkYXNfYW9fcmFuZ2VzID0geworCTQsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCX0KK307CisKK2VudW0gdHJpbXBvdF9tb2RlbCB7CisJQUQ3Mzc2LAorCUFEODQwMiwKK307CisKK3N0cnVjdCBjYl9wY2lkYXNfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOworCWludCBhaV9zZV9jaGFuczsJLy8gSW5wdXRzIGluIHNpbmdsZS1lbmRlZCBtb2RlCisJaW50IGFpX2RpZmZfY2hhbnM7CS8vIElucHV0cyBpbiBkaWZmZXJlbnRpYWwgbW9kZQorCWludCBhaV9iaXRzOwkJLy8gYW5hbG9nIGlucHV0IHJlc29sdXRpb24KKwlpbnQgYWlfc3BlZWQ7CQkvLyBmYXN0ZXN0IGNvbnZlcnNpb24gcGVyaW9kIGluIG5zCisJaW50IGFvX25jaGFuOwkJLy8gbnVtYmVyIG9mIGFuYWxvZyBvdXQgY2hhbm5lbHMKKwlpbnQgaGFzX2FvX2ZpZm87CS8vIGFuYWxvZyBvdXRwdXQgaGFzIGZpZm8KKwlpbnQgYW9fc2Nhbl9zcGVlZDsJLy8gYW5hbG9nIG91dHB1dCBzcGVlZCBmb3IgMTYwMiBzZXJpZXMgKGZvciBhIHNjYW4sIG5vdCBjb252ZXJzaW9uKQorCWludCBmaWZvX3NpemU7CQkvLyBudW1iZXIgb2Ygc2FtcGxlcyBmaWZvIGNhbiBob2xkCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlczsKKwllbnVtIHRyaW1wb3RfbW9kZWwgdHJpbXBvdDsKKwl1bnNpZ25lZCBoYXNfZGFjMDg6MTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2JfcGNpZGFzX2JvYXJkIGNiX3BjaWRhc19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxNjAyLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2RpZmZfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgaGFzX2FvX2ZpZm86MSwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGZpZm9fc2l6ZTo1MTIsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGFzX3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDg0MDIsCisJICAgICAgaGFzX2RhYzA4OjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzMTIwMCIsCisJICAgICAgZGV2aWNlX2lkOjB4RiwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6MzIwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGhhc19hb19maWZvOjAsCisJICAgICAgZmlmb19zaXplOjEwMjQsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGFzX3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDczNzYsCisJICAgICAgaGFzX2RhYzA4OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzMTYwMi8xMiIsCisJICAgICAgZGV2aWNlX2lkOjB4MTAsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfZGlmZl9jaGFuczo4LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjMyMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBoYXNfYW9fZmlmbzoxLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6NDAwMCwKKwkgICAgICBmaWZvX3NpemU6MTAyNCwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFENzM3NiwKKwkgICAgICBoYXNfZGFjMDg6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxMjAwL2pyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxOSwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6MzIwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGhhc19hb19maWZvOjAsCisJICAgICAgZmlmb19zaXplOjEwMjQsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGFzX3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDczNzYsCisJICAgICAgaGFzX2RhYzA4OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzMTYwMi8xNi9qciIsCisJICAgICAgZGV2aWNlX2lkOjB4MUMsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfZGlmZl9jaGFuczo4LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBoYXNfYW9fZmlmbzowLAorCSAgICAgIGZpZm9fc2l6ZTo1MTIsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGFzX3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDg0MDIsCisJICAgICAgaGFzX2RhYzA4OjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzMTAwMCIsCisJICAgICAgZGV2aWNlX2lkOjB4NEMsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfZGlmZl9jaGFuczo4LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjQwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBoYXNfYW9fZmlmbzowLAorCSAgICAgIGZpZm9fc2l6ZToxMDI0LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRhc19yYW5nZXMsCisJICAgICAgdHJpbXBvdDoJQUQ3Mzc2LAorCSAgICAgIGhhc19kYWMwODowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczEwMDEiLAorCSAgICAgIGRldmljZV9pZDoweDFhLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2RpZmZfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDo2ODAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgaGFzX2FvX2ZpZm86MCwKKwkgICAgICBmaWZvX3NpemU6MTAyNCwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfYWx0X3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDczNzYsCisJICAgICAgaGFzX2RhYzA4OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzMTAwMiIsCisJICAgICAgZGV2aWNlX2lkOjB4MWIsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfZGlmZl9jaGFuczo4LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjY4MDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBoYXNfYW9fZmlmbzowLAorCSAgICAgIGZpZm9fc2l6ZToxMDI0LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRhc19yYW5nZXMsCisJICAgICAgdHJpbXBvdDoJQUQ3Mzc2LAorCSAgICAgIGhhc19kYWMwODowLAorCQl9LAorfTsKKworLy8gTnVtYmVyIG9mIGJvYXJkcyBpbiBjYl9wY2lkYXNfYm9hcmRzCisjZGVmaW5lIE5fQk9BUkRTCShzaXplb2YoY2JfcGNpZGFzX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IGNiX3BjaWRhc19ib2FyZCkpCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjYl9wY2lkYXNfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDBmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDE5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDFjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDRjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDFhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDFiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjYl9wY2lkYXNfcGNpX3RhYmxlKTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgY2JfcGNpZGFzX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBjYl9wY2lkYXNfcHJpdmF0ZSB7CisJLyogd291bGQgYmUgdXNlZnVsIGZvciBhIFBDSSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwkvLyBiYXNlIGFkZHJlc3NlcworCXVuc2lnbmVkIGxvbmcgczU5MzNfY29uZmlnOworCXVuc2lnbmVkIGxvbmcgY29udHJvbF9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBhZGNfZmlmbzsKKwl1bnNpZ25lZCBsb25nIHBhY2VyX2NvdW50ZXJfZGlvOworCXVuc2lnbmVkIGxvbmcgYW9fcmVnaXN0ZXJzOworCS8vIGRpdmlzb3JzIG9mIG1hc3RlciBjbG9jayBmb3IgYW5hbG9nIGlucHV0IHBhY2luZworCXVuc2lnbmVkIGludCBkaXZpc29yMTsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvdW50OwkvLyBudW1iZXIgb2YgYW5hbG9nIGlucHV0IHNhbXBsZXMgcmVtYWluaW5nCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFkY19maWZvX2JpdHM7CS8vIGJpdHMgdG8gd3JpdGUgdG8gaW50ZXJ1cHQvYWRjZmlmbyByZWdpc3RlcgorCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzNTkzM19pbnRjc3JfYml0czsJLy8gYml0cyB0byB3cml0ZSB0byBhbWNjIHM1OTMzIGludGVycnVwdCBjb250cm9sL3N0YXR1cyByZWdpc3RlcgorCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhb19jb250cm9sX2JpdHM7CS8vIGJpdHMgdG8gd3JpdGUgdG8gYW8gY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyCisJc2hvcnQgYWlfYnVmZmVyW0FJX0JVRkZFUl9TSVpFXTsKKwlzaG9ydCBhb19idWZmZXJbQU9fQlVGRkVSX1NJWkVdOworCS8vIGRpdmlzb3JzIG9mIG1hc3RlciBjbG9jayBmb3IgYW5hbG9nIG91dHB1dCBwYWNpbmcKKwl1bnNpZ25lZCBpbnQgYW9fZGl2aXNvcjE7CisJdW5zaWduZWQgaW50IGFvX2Rpdmlzb3IyOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhb19jb3VudDsJLy8gbnVtYmVyIG9mIGFuYWxvZyBvdXRwdXQgc2FtcGxlcyByZW1haW5pbmcKKwlpbnQgYW9fdmFsdWVbMl07CS8vIHJlbWVtYmVyIHdoYXQgdGhlIGFuYWxvZyBvdXRwdXRzIGFyZSBzZXQgdG8sIHRvIGFsbG93IHJlYWRiYWNrCisJdW5zaWduZWQgaW50IGNhbGRhY192YWx1ZVtOVU1fQ0hBTk5FTFNfODgwMF07CS8vIGZvciByZWFkYmFjayBvZiBjYWxkYWMKKwl1bnNpZ25lZCBpbnQgdHJpbXBvdF92YWx1ZVtOVU1fQ0hBTk5FTFNfODQwMl07CS8vIGZvciByZWFkYmFjayBvZiB0cmltcG90CisJdW5zaWduZWQgaW50IGRhYzA4X3ZhbHVlOworCXVuc2lnbmVkIGludCBjYWxpYnJhdGlvbl9zb3VyY2U7Cit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGNiX3BjaWRhc19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBjYl9wY2lkYXNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2NiX3BjaWRhcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9wY2lkYXMiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmNiX3BjaWRhc19hdHRhY2gsCisgICAgICBkZXRhY2g6Y2JfcGNpZGFzX2RldGFjaCwKK307CisKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX25vZmlmb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fZmlmb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fcmVhZGJhY2tfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2lkYXNfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBjYl9wY2lkYXNfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2LAorCQkJCXVuc2lnbmVkIGludCB0cmlnX251bSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGlycXJldHVybl90IGNiX3BjaWRhc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgdm9pZCBoYW5kbGVfYW9faW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIGNiX3BjaWRhc19sb2FkX2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKm5zLAorCWludCByb3VuZF9mbGFncyk7CitzdGF0aWMgaW50IGVlcHJvbV9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgY2FsZGFjX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYWxkYWNfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCB0cmltcG90X3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2lkYXNfdHJpbXBvdF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgdHJpbXBvdF93cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhYzA4X3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYWMwOF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgZGFjMDhfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYWxkYWNfODgwMF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCisJdWludDhfdCB2YWx1ZSk7CitzdGF0aWMgaW50IHRyaW1wb3RfNzM3Nl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCB2YWx1ZSk7CitzdGF0aWMgaW50IHRyaW1wb3RfODQwMl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdWludDhfdCB2YWx1ZSk7CitzdGF0aWMgaW50IG52cmFtX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBhZGRyZXNzLAorCXVpbnQ4X3QgKiBkYXRhKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FsX2VuYWJsZV9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBDQUxfRU5fQklUIHwgQ0FMX1NSQ19CSVRTKGRldnByaXYtPmNhbGlicmF0aW9uX3NvdXJjZSk7Cit9CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4KKyAqLworc3RhdGljIGludCBjYl9wY2lkYXNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IGluZGV4OworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGFzOiAiLCBkZXYtPm1pbm9yKTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGNiX3BjaWRhc19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCisgKi8KKwlwcmludGsoIlxuIik7CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCQkvLyBpcyBpdCBub3QgYSBjb21wdXRlciBib2FyZHMgY2FyZD8KKwkJaWYgKHBjaWRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQ0IpCisJCQljb250aW51ZTsKKwkJLy8gbG9vcCB0aHJvdWdoIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcgorCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOX0JPQVJEUzsgaW5kZXgrKykgeworCQkJaWYgKGNiX3BjaWRhc19ib2FyZHNbaW5kZXhdLmRldmljZV9pZCAhPSBwY2lkZXYtPmRldmljZSkKKwkJCQljb250aW51ZTsKKwkJCS8vIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJLy8gYXJlIHdlIG9uIHRoZSB3cm9uZyBidXMvc2xvdD8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBpdC0+b3B0aW9uc1swXSB8fAorCQkJCQlQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSAhPQorCQkJCQlpdC0+b3B0aW9uc1sxXSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCQkJZGV2LT5ib2FyZF9wdHIgPSBjYl9wY2lkYXNfYm9hcmRzICsgaW5kZXg7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCisJcHJpbnRrKCJObyBzdXBwb3J0ZWQgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgY2FyZCBmb3VuZCBvbiAiCisJCSJyZXF1ZXN0ZWQgcG9zaXRpb25cbiIpOworCXJldHVybiAtRUlPOworCisgICAgICBmb3VuZDoKKworCXByaW50aygiRm91bmQgJXMgb24gYnVzICVpLCBzbG90ICVpXG4iLCBjYl9wY2lkYXNfYm9hcmRzW2luZGV4XS5uYW1lLAorCQlwY2lkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSk7CisKKwkvKgorCSAqIEVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXNlcnZlIEkvTyBwb3J0cy4KKwkgKi8KKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCAiY2JfcGNpZGFzIikpIHsKKwkJcHJpbnRrKCIgRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyoKKwkgKiBJbml0aWFsaXplIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzIGFuZCBkZXZwcml2LT5hZGNfZmlmbyB0byBwb2ludCB0bworCSAqIHRoZWlyIGJhc2UgYWRkcmVzcy4KKwkgKi8KKwlkZXZwcml2LT5zNTkzM19jb25maWcgPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgUzU5MzNfQkFEUklOREVYKTsKKwlkZXZwcml2LT5jb250cm9sX3N0YXR1cyA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCBDT05UX1NUQVRfQkFEUklOREVYKTsKKwlkZXZwcml2LT5hZGNfZmlmbyA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCBBRENfRklGT19CQURSSU5ERVgpOworCWRldnByaXYtPnBhY2VyX2NvdW50ZXJfZGlvID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIFBBQ0VSX0JBRFJJTkRFWCk7CisJaWYgKHRoaXNib2FyZC0+YW9fbmNoYW4pIHsKKwkJZGV2cHJpdi0+YW9fcmVnaXN0ZXJzID0KKwkJCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCBBT19CQURSSU5ERVgpOworCX0KKwkvLyBkaXNhYmxlIGFuZCBjbGVhciBpbnRlcnJ1cHRzIG9uIGFtY2MgczU5MzMKKwlvdXRsKElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUywKKwkJZGV2cHJpdi0+czU5MzNfY29uZmlnICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCS8vIGdldCBpcnEKKwlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGRldnByaXYtPnBjaV9kZXYtPmlycSwgY2JfcGNpZGFzX2ludGVycnVwdCwKKwkJCUlSUUZfU0hBUkVELCAiY2JfcGNpZGFzIiwgZGV2KSkgeworCQlwcmludGsoIiB1bmFibGUgdG8gYWxsb2NhdGUgaXJxICVkXG4iLCBkZXZwcml2LT5wY2lfZGV2LT5pcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2LT5pcnEgPSBkZXZwcml2LT5wY2lfZGV2LT5pcnE7CisKKwkvL0luaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA3KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0RJRkYgfCBTREZfQ01EX1JFQUQ7CisJLyogV0FSTklORzogTnVtYmVyIG9mIGlucHV0cyBpbiBkaWZmZXJlbnRpYWwgbW9kZSBpcyBpZ25vcmVkICovCisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haV9zZV9jaGFuczsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzYm9hcmQtPmFpX3NlX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+cmFuZ2VzOworCXMtPmluc25fcmVhZCA9IGNiX3BjaWRhc19haV9yaW5zbjsKKwlzLT5pbnNuX2NvbmZpZyA9IGFpX2NvbmZpZ19pbnNuOworCXMtPmRvX2NtZCA9IGNiX3BjaWRhc19haV9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGNiX3BjaWRhc19haV9jbWR0ZXN0OworCXMtPmNhbmNlbCA9IGNiX3BjaWRhc19jYW5jZWw7CisKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWlmICh0aGlzYm9hcmQtPmFvX25jaGFuKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORDsKKwkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19uY2hhbjsKKwkJLy8gYW5hbG9nIG91dCByZXNvbHV0aW9uIGlzIHRoZSBzYW1lIGFzIGFuYWxvZyBpbnB1dCByZXNvbHV0aW9uLCBzbyB1c2UgYWlfYml0cworCQlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9iaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJmNiX3BjaWRhc19hb19yYW5nZXM7CisJCXMtPmluc25fcmVhZCA9IGNiX3BjaWRhc19hb19yZWFkYmFja19pbnNuOworCQlpZiAodGhpc2JvYXJkLT5oYXNfYW9fZmlmbykgeworCQkJZGV2LT53cml0ZV9zdWJkZXYgPSBzOworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfV1JJVEU7CisJCQlzLT5pbnNuX3dyaXRlID0gY2JfcGNpZGFzX2FvX2ZpZm9fd2luc247CisJCQlzLT5kb19jbWR0ZXN0ID0gY2JfcGNpZGFzX2FvX2NtZHRlc3Q7CisJCQlzLT5kb19jbWQgPSBjYl9wY2lkYXNfYW9fY21kOworCQkJcy0+Y2FuY2VsID0gY2JfcGNpZGFzX2FvX2NhbmNlbDsKKwkJfSBlbHNlIHsKKwkJCXMtPmluc25fd3JpdGUgPSBjYl9wY2lkYXNfYW9fbm9maWZvX3dpbnNuOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwkvKiA4MjU1ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldnByaXYtPnBhY2VyX2NvdW50ZXJfZGlvICsgRElPXzgyNTUpOworCisJLy8gc2VyaWFsIEVFUFJPTSwKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfTUVNT1JZOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9JTlRFUk5BTDsKKwlzLT5uX2NoYW4gPSAyNTY7CisJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJcy0+aW5zbl9yZWFkID0gZWVwcm9tX3JlYWRfaW5zbjsKKworCS8vIDg4MDAgY2FsZGFjCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NBTElCOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwlzLT5uX2NoYW4gPSBOVU1fQ0hBTk5FTFNfODgwMDsKKwlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX3JlYWQgPSBjYWxkYWNfcmVhZF9pbnNuOworCXMtPmluc25fd3JpdGUgPSBjYWxkYWNfd3JpdGVfaW5zbjsKKwlmb3IgKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyBpKyspCisJCWNhbGRhY184ODAwX3dyaXRlKGRldiwgaSwgcy0+bWF4ZGF0YSAvIDIpOworCisJLy8gdHJpbSBwb3RlbnRpb21ldGVyCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDU7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NBTElCOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwlpZiAodGhpc2JvYXJkLT50cmltcG90ID09IEFENzM3NikgeworCQlzLT5uX2NoYW4gPSBOVU1fQ0hBTk5FTFNfNzM3NjsKKwkJcy0+bWF4ZGF0YSA9IDB4N2Y7CisJfSBlbHNlIHsKKwkJcy0+bl9jaGFuID0gTlVNX0NIQU5ORUxTXzg0MDI7CisJCXMtPm1heGRhdGEgPSAweGZmOworCX0KKwlzLT5pbnNuX3JlYWQgPSB0cmltcG90X3JlYWRfaW5zbjsKKwlzLT5pbnNuX3dyaXRlID0gdHJpbXBvdF93cml0ZV9pbnNuOworCWZvciAoaSA9IDA7IGkgPCBzLT5uX2NoYW47IGkrKykKKwkJY2JfcGNpZGFzX3RyaW1wb3Rfd3JpdGUoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisKKwkvLyBkYWMwOCBjYWxkYWMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNjsKKwlpZiAodGhpc2JvYXJkLT5oYXNfZGFjMDgpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NBTElCOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJCXMtPm5fY2hhbiA9IE5VTV9DSEFOTkVMU19EQUMwODsKKwkJcy0+aW5zbl9yZWFkID0gZGFjMDhfcmVhZF9pbnNuOworCQlzLT5pbnNuX3dyaXRlID0gZGFjMDhfd3JpdGVfaW5zbjsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJCWRhYzA4X3dyaXRlKGRldiwgcy0+bWF4ZGF0YSAvIDIpOworCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLy8gbWFrZSBzdXJlIG1haWxib3ggNCBpcyBlbXB0eQorCWlubChkZXZwcml2LT5zNTkzM19jb25maWcgKyBBTUNDX09QX1JFR19JTUI0KTsKKwkvKiBTZXQgYml0cyB0byBlbmFibGUgaW5jb21pbmcgbWFpbGJveCBpbnRlcnJ1cHRzIG9uIGFtY2MgczU5MzMuICovCisJZGV2cHJpdi0+czU5MzNfaW50Y3NyX2JpdHMgPQorCQlJTlRDU1JfSU5CT1hfQllURSgzKSB8IElOVENTUl9JTkJPWF9TRUxFQ1QoMykgfAorCQlJTlRDU1JfSU5CT1hfRlVMTF9JTlQ7CisJLy8gY2xlYXIgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgb24gYW1jYyBzNTkzMworCW91dGwoZGV2cHJpdi0+czU5MzNfaW50Y3NyX2JpdHMgfCBJTlRDU1JfSU5CT1hfSU5UUl9TVEFUVVMsCisJCWRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIGNiX3BjaWRhc19kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBjYl9wY2lkYXNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRhczogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5zNTkzM19jb25maWcpIHsKKwkJCS8vIGRpc2FibGUgYW5kIGNsZWFyIGludGVycnVwdHMgb24gYW1jYyBzNTkzMworCQkJb3V0bChJTlRDU1JfSU5CT1hfSU5UUl9TVEFUVVMsCisJCQkJZGV2cHJpdi0+czU5MzNfY29uZmlnICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwkJCXJ0X3ByaW50aygiZGV0YWNoaW5nLCBpbmNzciBpcyAweCV4XG4iLAorCQkJCWlubChkZXZwcml2LT5zNTkzM19jb25maWcgKworCQkJCQlBTUNDX09QX1JFR19JTlRDU1IpKTsKKyNlbmRpZgorCQl9CisJfQorCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAyKTsKKwlpZiAoZGV2cHJpdiAmJiBkZXZwcml2LT5wY2lfZGV2KSB7CisJCWlmIChkZXZwcml2LT5zNTkzM19jb25maWcpIHsKKwkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJpbnN0cnVjdGlvbnMiIHJlYWQvd3JpdGUgZGF0YSBpbiAib25lLXNob3QiIG9yICJzb2Z0d2FyZS10cmlnZ2VyZWQiCisgKiBtb2RlLgorICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGk7CisJdW5zaWduZWQgaW50IGJpdHM7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CisJaW50IGNoYW5uZWw7CisJLy8gZW5hYmxlIGNhbGlicmF0aW9uIGlucHV0IGlmIGFwcHJvcHJpYXRlCisJaWYgKGluc24tPmNoYW5zcGVjICYgQ1JfQUxUX1NPVVJDRSkgeworCQlvdXR3KGNhbF9lbmFibGVfYml0cyhkZXYpLAorCQkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCQljaGFubmVsID0gMDsKKwl9IGVsc2UgeworCQlvdXR3KDAsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKwkJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCX0KKwkvLyBzZXQgbXV4IGxpbWl0cyBhbmQgZ2FpbgorCWJpdHMgPSBCRUdJTl9TQ0FOKGNoYW5uZWwpIHwKKwkJRU5EX1NDQU4oY2hhbm5lbCkgfCBHQUlOX0JJVFMoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpKTsKKwkvLyBzZXQgdW5pcG9sYXIvYmlwb2xhcgorCWlmIChDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykgJiBJU19VTklQT0xBUikKKwkJYml0cyB8PSBVTklQOworCS8vIHNldCBzaW5nbGVlbmRlZC9kaWZmZXJlbnRpYWwKKwlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgIT0gQVJFRl9ESUZGKQorCQliaXRzIHw9IFNFOworCW91dHcoYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBBRENNVVhfQ09OVCk7CisKKwkvKiBjbGVhciBmaWZvICovCisJb3V0dygwLCBkZXZwcml2LT5hZGNfZmlmbyArIEFEQ0ZJRk9DTFIpOworCisJLyogY29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXR3KDAsIGRldnByaXYtPmFkY19maWZvICsgQURDREFUQSk7CisKKwkJLyogd2FpdCBmb3IgY29udmVyc2lvbiB0byBlbmQgKi8KKwkJLyogcmV0dXJuIC1FVElNRURPVVQgaWYgdGhlcmUgaXMgYSB0aW1lb3V0ICovCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChpbncoZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBBRENNVVhfQ09OVCkgJiBFT0MpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCisJCS8qIHJlYWQgZGF0YSAqLworCQlkYXRhW25dID0gaW53KGRldnByaXYtPmFkY19maWZvICsgQURDREFUQSk7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBhaV9jb25maWdfY2FsaWJyYXRpb25fc291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0YXRpYyBjb25zdCBpbnQgbnVtX2NhbGlicmF0aW9uX3NvdXJjZXMgPSA4OworCXVuc2lnbmVkIGludCBzb3VyY2UgPSBkYXRhWzFdOworCisJaWYgKHNvdXJjZSA+PSBudW1fY2FsaWJyYXRpb25fc291cmNlcykgeworCQlwcmludGsoImludmFsaWQgY2FsaWJyYXRpb24gc291cmNlOiAlaVxuIiwgc291cmNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2cHJpdi0+Y2FsaWJyYXRpb25fc291cmNlID0gc291cmNlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpZCA9IGRhdGFbMF07CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBJTlNOX0NPTkZJR19BTFRfU09VUkNFOgorCQlyZXR1cm4gYWlfY29uZmlnX2NhbGlicmF0aW9uX3NvdXJjZShkZXYsIGRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvLyBhbmFsb2cgb3V0cHV0IGluc24gZm9yIHBjaWRhcy0xMDAwIGFuZCAxMjAwIHNlcmllcworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fbm9maWZvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbm5lbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLy8gc2V0IGNoYW5uZWwgYW5kIHJhbmdlCisJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyAmPQorCQl+REFDX01PREVfVVBEQVRFX0JPVEggJiB+REFDX1JBTkdFX01BU0soY2hhbm5lbCk7CisJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzIHw9CisJCURBQ0VOIHwgREFDX1JBTkdFKGNoYW5uZWwsIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSk7CisJb3V0dyhkZXZwcml2LT5hb19jb250cm9sX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgREFDX0NTUik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIHJlbWVtYmVyIHZhbHVlIGZvciByZWFkYmFjaworCWRldnByaXYtPmFvX3ZhbHVlW2NoYW5uZWxdID0gZGF0YVswXTsKKwkvLyBzZW5kIGRhdGEKKwlvdXR3KGRhdGFbMF0sIGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ19EQVRBX1JFRyhjaGFubmVsKSk7CisKKwlyZXR1cm4gMTsKK30KKworLy8gYW5hbG9nIG91dHB1dCBpbnNuIGZvciBwY2lkYXMtMTYwMiBzZXJpZXMKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2ZpZm9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBjbGVhciBkYWMgZmlmbworCW91dHcoMCwgZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDRklGT0NMUik7CisKKwkvLyBzZXQgY2hhbm5lbCBhbmQgcmFuZ2UKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzICY9CisJCX5EQUNfQ0hBTl9FTigwKSAmIH5EQUNfQ0hBTl9FTigxKSAmIH5EQUNfUkFOR0VfTUFTSyhjaGFubmVsKSAmCisJCX5EQUNfUEFDRVJfTUFTSzsKKwlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgfD0KKwkJREFDRU4gfCBEQUNfUkFOR0UoY2hhbm5lbCwKKwkJQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpKSB8IERBQ19DSEFOX0VOKGNoYW5uZWwpIHwgREFDX1NUQVJUOworCW91dHcoZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIERBQ19DU1IpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyByZW1lbWJlciB2YWx1ZSBmb3IgcmVhZGJhY2sKKwlkZXZwcml2LT5hb192YWx1ZVtjaGFubmVsXSA9IGRhdGFbMF07CisJLy8gc2VuZCBkYXRhCisJb3V0dyhkYXRhWzBdLCBkZXZwcml2LT5hb19yZWdpc3RlcnMgKyBEQUNEQVRBKTsKKworCXJldHVybiAxOworfQorCisvLyBhbmFsb2cgb3V0cHV0IHJlYWRiYWNrIGluc24KKy8vIFhYWCBsb3NlcyB0cmFjayBvZiBhbmFsb2cgb3V0cHV0IHZhbHVlIGJhY2sgYWZ0ZXIgYW4gYW5hbG9nIG91cHV0IGNvbW1hbmQgaXMgZXhlY3V0ZWQKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX3JlYWRiYWNrX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5hb192YWx1ZVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBlZXByb21fcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1aW50OF90IG52cmFtX2RhdGE7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG52cmFtX3JlYWQoZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgJm52cmFtX2RhdGEpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZGF0YVswXSA9IG52cmFtX2RhdGE7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjYWxkYWNfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJY29uc3QgdW5zaWduZWQgaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXJldHVybiBjYWxkYWNfODgwMF93cml0ZShkZXYsIGNoYW5uZWwsIGRhdGFbMF0pOworfQorCitzdGF0aWMgaW50IGNhbGRhY19yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5jYWxkYWNfdmFsdWVbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKKy8qIDE2MDIvMTYgcHJlZ2FpbiBvZmZzZXQgKi8KK3N0YXRpYyBpbnQgZGFjMDhfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlpZiAoZGV2cHJpdi0+ZGFjMDhfdmFsdWUgPT0gdmFsdWUpCisJCXJldHVybiAxOworCisJZGV2cHJpdi0+ZGFjMDhfdmFsdWUgPSB2YWx1ZTsKKworCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldikgfCAodmFsdWUgJiAweGZmKSwKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJb3V0dyhjYWxfZW5hYmxlX2JpdHMoZGV2KSB8IFNFTEVDVF9EQUMwOF9CSVQgfCAodmFsdWUgJiAweGZmKSwKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJb3V0dyhjYWxfZW5hYmxlX2JpdHMoZGV2KSB8ICh2YWx1ZSAmIDB4ZmYpLAorCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJY29tZWRpX3VkZWxheSgxKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRhYzA4X3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXJldHVybiBkYWMwOF93cml0ZShkZXYsIGRhdGFbMF0pOworfQorCitzdGF0aWMgaW50IGRhYzA4X3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmRhYzA4X3ZhbHVlOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX3RyaW1wb3Rfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlpZiAoZGV2cHJpdi0+dHJpbXBvdF92YWx1ZVtjaGFubmVsXSA9PSB2YWx1ZSkKKwkJcmV0dXJuIDE7CisKKwlkZXZwcml2LT50cmltcG90X3ZhbHVlW2NoYW5uZWxdID0gdmFsdWU7CisJc3dpdGNoICh0aGlzYm9hcmQtPnRyaW1wb3QpIHsKKwljYXNlIEFENzM3NjoKKwkJdHJpbXBvdF83Mzc2X3dyaXRlKGRldiwgdmFsdWUpOworCQlicmVhazsKKwljYXNlIEFEODQwMjoKKwkJdHJpbXBvdF84NDAyX3dyaXRlKGRldiwgY2hhbm5lbCwgdmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAiZHJpdmVyIGJ1Zz8iKTsKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0cmltcG90X3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlyZXR1cm4gY2JfcGNpZGFzX3RyaW1wb3Rfd3JpdGUoZGV2LCBjaGFubmVsLCBkYXRhWzBdKTsKK30KKworc3RhdGljIGludCB0cmltcG90X3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWRhdGFbMF0gPSBkZXZwcml2LT50cmltcG90X3ZhbHVlW2NoYW5uZWxdOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCWludCBpLCBnYWluLCBzdGFydF9jaGFuOworCisJLyogY21kdGVzdCB0ZXN0cyBhIHBhcnRpY3VsYXIgY29tbWFuZCB0byBzZWUgaWYgaXQgaXMgdmFsaWQuCisJICogVXNpbmcgdGhlIGNtZHRlc3QgaW9jdGwsIGEgdXNlciBjYW4gY3JlYXRlIGEgdmFsaWQgY21kCisJICogYW5kIHRoZW4gaGF2ZSBpdCBleGVjdXRlcyBieSB0aGUgY21kIGlvY3RsLgorCSAqCisJICogY21kdGVzdCByZXR1cm5zIDEsMiwzLDQgb3IgMCwgZGVwZW5kaW5nIG9uIHdoaWNoIHRlc3RzCisJICogdGhlIGNvbW1hbmQgcGFzc2VzLiAqLworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XIHwgVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCS8vIG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cgJiYgY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmCisJCShjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUCisJCQl8fCBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQl0aGlzYm9hcmQtPmFpX3NwZWVkICogY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbjsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzYm9hcmQtPmFpX3NwZWVkKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc2JvYXJkLT5haV9zcGVlZDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkmKGNtZC0+c2Nhbl9iZWdpbl9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkmKGNtZC0+Y29udmVydF9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvLyBjaGVjayBjaGFubmVsL2dhaW4gbGlzdCBhZ2FpbnN0IGNhcmQncyBsaW1pdGF0aW9ucworCWlmIChjbWQtPmNoYW5saXN0KSB7CisJCWdhaW4gPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJc3RhcnRfY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPQorCQkJCShzdGFydF9jaGFuICsgaSkgJSBzLT5uX2NoYW4pIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlIGNoYW5uZWxzLCBjb3VudGluZyB1cHdhcmRzXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSBnYWluKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBiaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBtYWtlIHN1cmUgQ0FMX0VOX0JJVCBpcyBkaXNhYmxlZAorCW91dHcoMCwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCS8vIGluaXRpYWxpemUgYmVmb3JlIHNldHRpbmdzIHBhY2VyIHNvdXJjZSBhbmQgY291bnQgdmFsdWVzCisJb3V0dygwLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIFRSSUdfQ09OVFNUQVQpOworCS8vIGNsZWFyIGZpZm8KKwlvdXR3KDAsIGRldnByaXYtPmFkY19maWZvICsgQURDRklGT0NMUik7CisKKwkvLyBzZXQgbXV4IGxpbWl0cywgZ2FpbiBhbmQgcGFjZXIgc291cmNlCisJYml0cyA9IEJFR0lOX1NDQU4oQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSkgfAorCQlFTkRfU0NBTihDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbY21kLT5jaGFubGlzdF9sZW4gLSAxXSkpIHwKKwkJR0FJTl9CSVRTKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pKTsKKwkvLyBzZXQgdW5pcG9sYXIvYmlwb2xhcgorCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKSAmIElTX1VOSVBPTEFSKQorCQliaXRzIHw9IFVOSVA7CisJLy8gc2V0IHNpbmdsZWVuZGVkL2RpZmZlcmVudGlhbAorCWlmIChDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pICE9IEFSRUZfRElGRikKKwkJYml0cyB8PSBTRTsKKwkvLyBzZXQgcGFjZXIgc291cmNlCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQgfHwgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkKKwkJYml0cyB8PSBQQUNFUl9FWFRfUklTRTsKKwllbHNlCisJCWJpdHMgfD0gUEFDRVJfSU5UOworCW91dHcoYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBBRENNVVhfQ09OVCk7CisKKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwlydF9wcmludGsoImNvbWVkaTogc2VudCAweCV4IHRvIGFkY211eCBjb250cm9sXG4iLCBiaXRzKTsKKyNlbmRpZgorCisJLy8gbG9hZCBjb3VudGVycworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCisJCWNiX3BjaWRhc19sb2FkX2NvdW50ZXJzKGRldiwgJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwllbHNlIGlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCisJCWNiX3BjaWRhc19sb2FkX2NvdW50ZXJzKGRldiwgJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKworCS8vIHNldCBudW1iZXIgb2YgY29udmVyc2lvbnMKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmNvdW50ID0gY21kLT5jaGFubGlzdF9sZW4gKiBjbWQtPnN0b3BfYXJnOworCX0KKwkvLyBlbmFibGUgaW50ZXJydXB0cworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRldnByaXYtPmFkY19maWZvX2JpdHMgfD0gSU5URTsKKwlkZXZwcml2LT5hZGNfZmlmb19iaXRzICY9IH5JTlRfTUFTSzsKKwlpZiAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAxKQorCQkJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8PSBJTlRfRU9TOwkvLyBpbnRlcnJ1cHQgZW5kIG9mIGJ1cnN0CisJCWVsc2UKKwkJCWRldnByaXYtPmFkY19maWZvX2JpdHMgfD0gSU5UX0ZORTsJLy8gaW50ZXJydXB0IGZpZm8gbm90IGVtcHR5CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8PSBJTlRfRkhGOwkvL2ludGVycnVwdCBmaWZvIGhhbGYgZnVsbAorCX0KKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwlydF9wcmludGsoImNvbWVkaTogYWRjX2ZpZm9fYml0cyBhcmUgMHgleFxuIiwgZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyk7CisjZW5kaWYKKwkvLyBlbmFibGUgKGFuZCBjbGVhcikgaW50ZXJydXB0cworCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IEVPQUkgfCBJTlQgfCBMQURGVUwsCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgSU5UX0FEQ0ZJRk8pOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBzZXQgc3RhcnQgdHJpZ2dlciBhbmQgYnVyc3QgbW9kZQorCWJpdHMgPSAwOworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykKKwkJYml0cyB8PSBTV19UUklHR0VSOworCWVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKQorCQliaXRzIHw9IEVYVF9UUklHR0VSIHwgVEdFTiB8IFhUUkNMOworCWVsc2UgeworCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkKKwkJYml0cyB8PSBCVVJTVEU7CisJb3V0dyhiaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIFRSSUdfQ09OVFNUQVQpOworI2lmZGVmIENCX1BDSURBU19ERUJVRworCXJ0X3ByaW50aygiY29tZWRpOiBzZW50IDB4JXggdG8gdHJpZyBjb250cm9sXG4iLCBiaXRzKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogY21kdGVzdCB0ZXN0cyBhIHBhcnRpY3VsYXIgY29tbWFuZCB0byBzZWUgaWYgaXQgaXMgdmFsaWQuCisJICogVXNpbmcgdGhlIGNtZHRlc3QgaW9jdGwsIGEgdXNlciBjYW4gY3JlYXRlIGEgdmFsaWQgY21kCisJICogYW5kIHRoZW4gaGF2ZSBpdCBleGVjdXRlcyBieSB0aGUgY21kIGlvY3RsLgorCSAqCisJICogY21kdGVzdCByZXR1cm5zIDEsMiwzLDQgb3IgMCwgZGVwZW5kaW5nIG9uIHdoaWNoIHRlc3RzCisJICogdGhlIGNvbW1hbmQgcGFzc2VzLiAqLworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfSU5UOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdGhpc2JvYXJkLT5hb19zY2FuX3NwZWVkKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdGhpc2JvYXJkLT5hb19zY2FuX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwKKwkJCSYoZGV2cHJpdi0+YW9fZGl2aXNvcjEpLCAmKGRldnByaXYtPmFvX2Rpdmlzb3IyKSwKKwkJCSYoY21kLT5zY2FuX2JlZ2luX2FyZyksIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIGNoZWNrIGNoYW5uZWwvZ2FpbiBsaXN0IGFnYWluc3QgY2FyZCdzIGxpbWl0YXRpb25zCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAxKSB7CisJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pICE9IDAgfHwKKwkJCUNSX0NIQU4oY21kLT5jaGFubGlzdFsxXSkgIT0gMSkgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiY2hhbm5lbHMgbXVzdCBiZSBvcmRlcmVkIGNoYW5uZWwgMCwgY2hhbm5lbCAxIGluIGNoYW5saXN0XG4iKTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIHNldCBjaGFubmVsIGxpbWl0cywgZ2FpbgorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCS8vIGVuYWJsZSBjaGFubmVsCisJCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PQorCQkJREFDX0NIQU5fRU4oQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSk7CisJCS8vIHNldCByYW5nZQorCQlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgfD0gREFDX1JBTkdFKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSksCisJCQlDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSk7CisJfQorCisJLy8gZGlzYWJsZSBhbmFsb2cgb3V0IGJlZm9yZSBzZXR0aW5ncyBwYWNlciBzb3VyY2UgYW5kIGNvdW50IHZhbHVlcworCW91dHcoZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIERBQ19DU1IpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBjbGVhciBmaWZvCisJb3V0dygwLCBkZXZwcml2LT5hb19yZWdpc3RlcnMgKyBEQUNGSUZPQ0xSKTsKKworCS8vIGxvYWQgY291bnRlcnMKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihUSU1FUl9CQVNFLAorCQkJJihkZXZwcml2LT5hb19kaXZpc29yMSksICYoZGV2cHJpdi0+YW9fZGl2aXNvcjIpLAorCQkJJihjbWQtPnNjYW5fYmVnaW5fYXJnKSwgY21kLT5mbGFncyk7CisKKwkJLyogV3JpdGUgdGhlIHZhbHVlcyBvZiBjdHIxIGFuZCBjdHIyIGludG8gY291bnRlcnMgMSBhbmQgMiAqLworCQlpODI1NF9sb2FkKGRldnByaXYtPnBhY2VyX2NvdW50ZXJfZGlvICsgREFDODI1NCwgMCwgMSwKKwkJCWRldnByaXYtPmFvX2Rpdmlzb3IxLCAyKTsKKwkJaTgyNTRfbG9hZChkZXZwcml2LT5wYWNlcl9jb3VudGVyX2RpbyArIERBQzgyNTQsIDAsIDIsCisJCQlkZXZwcml2LT5hb19kaXZpc29yMiwgMik7CisJfQorCS8vIHNldCBudW1iZXIgb2YgY29udmVyc2lvbnMKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFvX2NvdW50ID0gY21kLT5jaGFubGlzdF9sZW4gKiBjbWQtPnN0b3BfYXJnOworCX0KKwkvLyBzZXQgcGFjZXIgc291cmNlCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgfD0gREFDX1BBQ0VSX0lOVDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzIHw9IERBQ19QQUNFUl9FWFRfUklTRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwgImVycm9yIHNldHRpbmcgZGFjIHBhY2VyIHNvdXJjZSIpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJYXN5bmMtPmludHRyaWcgPSBjYl9wY2lkYXNfYW9faW50dHJpZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCXVuc2lnbmVkIGludCBudW1fYnl0ZXMsIG51bV9wb2ludHMgPSB0aGlzYm9hcmQtPmZpZm9fc2l6ZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHRyaWdfbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLy8gbG9hZCB1cCBmaWZvCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5hb19jb3VudCA8IG51bV9wb2ludHMpCisJCW51bV9wb2ludHMgPSBkZXZwcml2LT5hb19jb3VudDsKKworCW51bV9ieXRlcyA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsIGRldnByaXYtPmFvX2J1ZmZlciwKKwkJbnVtX3BvaW50cyAqIHNpemVvZihzaG9ydCkpOworCW51bV9wb2ludHMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5hb19jb3VudCAtPSBudW1fcG9pbnRzOworCX0KKwkvLyB3cml0ZSBkYXRhIHRvIGJvYXJkJ3MgZmlmbworCW91dHN3KGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ0RBVEEsIGRldnByaXYtPmFvX2J1ZmZlciwgbnVtX2J5dGVzKTsKKworCS8vIGVuYWJsZSBkYWMgaGFsZi1mdWxsIGFuZCBlbXB0eSBpbnRlcnJ1cHRzCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8PSBEQUVNSUUgfCBEQUhGSUU7CisjaWZkZWYgQ0JfUENJREFTX0RFQlVHCisJcnRfcHJpbnRrKCJjb21lZGk6IGFkY19maWZvX2JpdHMgYXJlIDB4JXhcbiIsIGRldnByaXYtPmFkY19maWZvX2JpdHMpOworI2VuZGlmCisJLy8gZW5hYmxlIGFuZCBjbGVhciBpbnRlcnJ1cHRzCisJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgREFFTUkgfCBEQUhGSSwKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisKKwkvLyBzdGFydCBkYWMKKwlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgfD0gREFDX1NUQVJUIHwgREFDRU4gfCBEQUNfRU1QVFk7CisJb3V0dyhkZXZwcml2LT5hb19jb250cm9sX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgREFDX0NTUik7CisjaWZkZWYgQ0JfUENJREFTX0RFQlVHCisJcnRfcHJpbnRrKCJjb21lZGk6IHNlbnQgMHgleCB0byBkYWMgY29udHJvbFxuIiwKKwkJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzKTsKKyNlbmRpZgorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlhc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IGNiX3BjaWRhc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCWludCBzdGF0dXMsIHM1OTMzX3N0YXR1czsKKwlpbnQgaGFsZl9maWZvID0gdGhpc2JvYXJkLT5maWZvX3NpemUgLyAyOworCXVuc2lnbmVkIGludCBudW1fc2FtcGxlcywgaTsKKwlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJYXN5bmMgPSBzLT5hc3luYzsKKwlhc3luYy0+ZXZlbnRzID0gMDsKKworCXM1OTMzX3N0YXR1cyA9IGlubChkZXZwcml2LT5zNTkzM19jb25maWcgKyBBTUNDX09QX1JFR19JTlRDU1IpOworI2lmZGVmIENCX1BDSURBU19ERUJVRworCXJ0X3ByaW50aygiaW50Y3NyIDB4JXhcbiIsIHM1OTMzX3N0YXR1cyk7CisJcnRfcHJpbnRrKCJtYmVmIDB4JXhcbiIsIGlubChkZXZwcml2LT5zNTkzM19jb25maWcgKyBBTUNDX09QX1JFR19NQkVGKSk7CisjZW5kaWYKKworCWlmICgoSU5UQ1NSX0lOVFJfQVNTRVJURUQgJiBzNTkzM19zdGF0dXMpID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8vIG1ha2Ugc3VyZSBtYWlsYm94IDQgaXMgZW1wdHkKKwlpbmxfcChkZXZwcml2LT5zNTkzM19jb25maWcgKyBBTUNDX09QX1JFR19JTUI0KTsKKwkvLyBjbGVhciBpbnRlcnJ1cHQgb24gYW1jYyBzNTkzMworCW91dGwoZGV2cHJpdi0+czU5MzNfaW50Y3NyX2JpdHMgfCBJTlRDU1JfSU5CT1hfSU5UUl9TVEFUVVMsCisJCWRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisKKwlzdGF0dXMgPSBpbncoZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisjaWZkZWYgQ0JfUENJREFTX0RFQlVHCisJaWYgKChzdGF0dXMgJiAoSU5UIHwgRU9BSSB8IExBREZVTCB8IERBSEZJIHwgREFFTUkpKSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQiKTsKKwl9CisjZW5kaWYKKworCS8vIGNoZWNrIGZvciBhbmFsb2cgb3V0cHV0IGludGVycnVwdAorCWlmIChzdGF0dXMgJiAoREFIRkkgfCBEQUVNSSkpIHsKKwkJaGFuZGxlX2FvX2ludGVycnVwdChkZXYsIHN0YXR1cyk7CisJfQorCS8vIGNoZWNrIGZvciBhbmFsb2cgaW5wdXQgaW50ZXJydXB0cworCS8vIGlmIGZpZm8gaGFsZi1mdWxsCisJaWYgKHN0YXR1cyAmIEFESEZJKSB7CisJCS8vIHJlYWQgZGF0YQorCQludW1fc2FtcGxlcyA9IGhhbGZfZmlmbzsKKwkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJgorCQkJbnVtX3NhbXBsZXMgPiBkZXZwcml2LT5jb3VudCkgeworCQkJbnVtX3NhbXBsZXMgPSBkZXZwcml2LT5jb3VudDsKKwkJfQorCQlpbnN3KGRldnByaXYtPmFkY19maWZvICsgQURDREFUQSwgZGV2cHJpdi0+YWlfYnVmZmVyLAorCQkJbnVtX3NhbXBsZXMpOworCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRldnByaXYtPmFpX2J1ZmZlciwKKwkJCW51bV9zYW1wbGVzICogc2l6ZW9mKHNob3J0KSk7CisJCWRldnByaXYtPmNvdW50IC09IG51bV9zYW1wbGVzOworCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPmNvdW50ID09IDApIHsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCWNiX3BjaWRhc19jYW5jZWwoZGV2LCBzKTsKKwkJfQorCQkvLyBjbGVhciBoYWxmLWZ1bGwgaW50ZXJydXB0IGxhdGNoCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMgfCBJTlQsCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJLy8gZWxzZSBpZiBmaWZvIG5vdCBlbXB0eQorCX0gZWxzZSBpZiAoc3RhdHVzICYgKEFETkVJIHwgRU9CSSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQkJLy8gYnJlYWsgaWYgZmlmbyBpcyBlbXB0eQorCQkJaWYgKChBRE5FICYgaW53KGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsKKwkJCQkJCUlOVF9BRENGSUZPKSkgPT0gMCkKKwkJCQlicmVhazsKKwkJCWNmY193cml0ZV90b19idWZmZXIocywgaW53KGRldnByaXYtPmFkY19maWZvKSk7CisJCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIC0tZGV2cHJpdi0+Y291bnQgPT0gMCkgewkvKiBlbmQgb2YgYWNxdWlzaXRpb24gKi8KKwkJCQljYl9wY2lkYXNfY2FuY2VsKGRldiwgcyk7CisJCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8vIGNsZWFyIG5vdC1lbXB0eSBpbnRlcnJ1cHQgbGF0Y2gKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IElOVCwKKwkJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgSU5UX0FEQ0ZJRk8pOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoc3RhdHVzICYgRU9BSSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImJ1ZyEgZW5jb3VudGVyZWQgZW5kIG9mIGFxdWlzaXRpb24gaW50ZXJydXB0PyIpOworCQkvLyBjbGVhciBFT0EgaW50ZXJydXB0IGxhdGNoCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMgfCBFT0FJLAorCQkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJfQorCS8vY2hlY2sgZm9yIGZpZm8gb3ZlcmZsb3cKKwlpZiAoc3RhdHVzICYgTEFERlVMKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJmaWZvIG92ZXJmbG93Iik7CisJCS8vIGNsZWFyIG92ZXJmbG93IGludGVycnVwdCBsYXRjaAorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgTEFERlVMLAorCQkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCWNiX3BjaWRhc19jYW5jZWwoZGV2LCBzKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYW9faW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT53cml0ZV9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IGhhbGZfZmlmbyA9IHRoaXNib2FyZC0+Zmlmb19zaXplIC8gMjsKKwl1bnNpZ25lZCBpbnQgbnVtX3BvaW50czsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwlhc3luYy0+ZXZlbnRzID0gMDsKKworCWlmIChzdGF0dXMgJiBEQUVNSSkgeworCQkvLyBjbGVhciBkYWMgZW1wdHkgaW50ZXJydXB0IGxhdGNoCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMgfCBEQUVNSSwKKwkJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgSU5UX0FEQ0ZJRk8pOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlpZiAoaW53KGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ19DU1IpICYgREFDX0VNUFRZKSB7CisJCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUgfHwKKwkJCQkoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UCisJCQkJCSYmIGRldnByaXYtPmFvX2NvdW50KSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsICJkYWMgZmlmbyB1bmRlcmZsb3ciKTsKKwkJCQljYl9wY2lkYXNfYW9fY2FuY2VsKGRldiwgcyk7CisJCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7CisJCQl9CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCX0KKwl9IGVsc2UgaWYgKHN0YXR1cyAmIERBSEZJKSB7CisJCXVuc2lnbmVkIGludCBudW1fYnl0ZXM7CisKKwkJLy8gZmlndXJlIG91dCBob3cgbWFueSBwb2ludHMgd2UgYXJlIHdyaXRpbmcgdG8gZmlmbworCQludW1fcG9pbnRzID0gaGFsZl9maWZvOworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJCQlkZXZwcml2LT5hb19jb3VudCA8IG51bV9wb2ludHMpCisJCQludW1fcG9pbnRzID0gZGV2cHJpdi0+YW9fY291bnQ7CisJCW51bV9ieXRlcyA9CisJCQljZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzLCBkZXZwcml2LT5hb19idWZmZXIsCisJCQludW1fcG9pbnRzICogc2l6ZW9mKHNob3J0KSk7CisJCW51bV9wb2ludHMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCisJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJCWRldnByaXYtPmFvX2NvdW50IC09IG51bV9wb2ludHM7CisJCX0KKwkJLy8gd3JpdGUgZGF0YSB0byBib2FyZCdzIGZpZm8KKwkJb3V0c3coZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDREFUQSwgZGV2cHJpdi0+YW9fYnVmZmVyLAorCQkJbnVtX3BvaW50cyk7CisJCS8vIGNsZWFyIGhhbGYtZnVsbCBpbnRlcnJ1cHQgbGF0Y2gKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IERBSEZJLAorCQkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKKy8qIGNhbmNlbCBhbmFsb2cgaW5wdXQgY29tbWFuZCAqLworc3RhdGljIGludCBjYl9wY2lkYXNfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCS8vIGRpc2FibGUgaW50ZXJydXB0cworCWRldnByaXYtPmFkY19maWZvX2JpdHMgJj0gfklOVEUgJiB+RU9BSUU7CisJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gZGlzYWJsZSBzdGFydCB0cmlnZ2VyIHNvdXJjZSBhbmQgYnVyc3QgbW9kZQorCW91dHcoMCwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBUUklHX0NPTlRTVEFUKTsKKwkvLyBzb2Z0d2FyZSBwYWNlciBzb3VyY2UKKwlvdXR3KDAsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQURDTVVYX0NPTlQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbmNlbCBhbmFsb2cgb3V0cHV0IGNvbW1hbmQgKi8KK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkvLyBkaXNhYmxlIGludGVycnVwdHMKKwlkZXZwcml2LT5hZGNfZmlmb19iaXRzICY9IH5EQUhGSUUgJiB+REFFTUlFOworCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisKKwkvLyBkaXNhYmxlIG91dHB1dAorCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyAmPSB+REFDRU4gJiB+REFDX1BBQ0VSX01BU0s7CisJb3V0dyhkZXZwcml2LT5hb19jb250cm9sX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgREFDX0NTUik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjYl9wY2lkYXNfbG9hZF9jb3VudGVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpucywKKwlpbnQgcm91bmRpbmdfZmxhZ3MpCit7CisJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsICYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgbnMsIHJvdW5kaW5nX2ZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKworCS8qIFdyaXRlIHRoZSB2YWx1ZXMgb2YgY3RyMSBhbmQgY3RyMiBpbnRvIGNvdW50ZXJzIDEgYW5kIDIgKi8KKwlpODI1NF9sb2FkKGRldnByaXYtPnBhY2VyX2NvdW50ZXJfZGlvICsgQURDODI1NCwgMCwgMSwKKwkJZGV2cHJpdi0+ZGl2aXNvcjEsIDIpOworCWk4MjU0X2xvYWQoZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBBREM4MjU0LCAwLCAyLAorCQlkZXZwcml2LT5kaXZpc29yMiwgMik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NhbGlicmF0aW9uX2JpdHN0cmVhbShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgcmVnaXN0ZXJfYml0cywgdW5zaWduZWQgaW50IGJpdHN0cmVhbSwKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtX2xlbmd0aCkKK3sKKwlzdGF0aWMgY29uc3QgaW50IHdyaXRlX2RlbGF5ID0gMTsKKwl1bnNpZ25lZCBpbnQgYml0OworCisJZm9yIChiaXQgPSAxIDw8IChiaXRzdHJlYW1fbGVuZ3RoIC0gMSk7IGJpdDsgYml0ID4+PSAxKSB7CisJCWlmIChiaXRzdHJlYW0gJiBiaXQpCisJCQlyZWdpc3Rlcl9iaXRzIHw9IFNFUklBTF9EQVRBX0lOX0JJVDsKKwkJZWxzZQorCQkJcmVnaXN0ZXJfYml0cyAmPSB+U0VSSUFMX0RBVEFfSU5fQklUOworCQljb21lZGlfdWRlbGF5KHdyaXRlX2RlbGF5KTsKKwkJb3V0dyhyZWdpc3Rlcl9iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJfQorfQorCitzdGF0aWMgaW50IGNhbGRhY184ODAwX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywKKwl1aW50OF90IHZhbHVlKQoreworCXN0YXRpYyBjb25zdCBpbnQgbnVtX2NhbGRhY19jaGFubmVscyA9IDg7CisJc3RhdGljIGNvbnN0IGludCBiaXRzdHJlYW1fbGVuZ3RoID0gMTE7CisJdW5zaWduZWQgaW50IGJpdHN0cmVhbSA9ICgoYWRkcmVzcyAmIDB4NykgPDwgOCkgfCB2YWx1ZTsKKwlzdGF0aWMgY29uc3QgaW50IGNhbGRhY184ODAwX2NvbWVkaV91ZGVsYXkgPSAxOworCisJaWYgKGFkZHJlc3MgPj0gbnVtX2NhbGRhY19jaGFubmVscykgeworCQljb21lZGlfZXJyb3IoZGV2LCAiaWxsZWdhbCBjYWxkYWMgY2hhbm5lbCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHZhbHVlID09IGRldnByaXYtPmNhbGRhY192YWx1ZVthZGRyZXNzXSkKKwkJcmV0dXJuIDE7CisKKwlkZXZwcml2LT5jYWxkYWNfdmFsdWVbYWRkcmVzc10gPSB2YWx1ZTsKKworCXdyaXRlX2NhbGlicmF0aW9uX2JpdHN0cmVhbShkZXYsIGNhbF9lbmFibGVfYml0cyhkZXYpLCBiaXRzdHJlYW0sCisJCWJpdHN0cmVhbV9sZW5ndGgpOworCisJY29tZWRpX3VkZWxheShjYWxkYWNfODgwMF9jb21lZGlfdWRlbGF5KTsKKwlvdXR3KGNhbF9lbmFibGVfYml0cyhkZXYpIHwgU0VMRUNUXzg4MDBfQklULAorCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJY29tZWRpX3VkZWxheShjYWxkYWNfODgwMF9jb21lZGlfdWRlbGF5KTsKKwlvdXR3KGNhbF9lbmFibGVfYml0cyhkZXYpLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0cmltcG90XzczNzZfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQ4X3QgdmFsdWUpCit7CisJc3RhdGljIGNvbnN0IGludCBiaXRzdHJlYW1fbGVuZ3RoID0gNzsKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtID0gdmFsdWUgJiAweDdmOworCXVuc2lnbmVkIGludCByZWdpc3Rlcl9iaXRzOworCXN0YXRpYyBjb25zdCBpbnQgYWQ3Mzc2X2NvbWVkaV91ZGVsYXkgPSAxOworCisJcmVnaXN0ZXJfYml0cyA9IGNhbF9lbmFibGVfYml0cyhkZXYpIHwgU0VMRUNUX1RSSU1QT1RfQklUOworCWNvbWVkaV91ZGVsYXkoYWQ3Mzc2X2NvbWVkaV91ZGVsYXkpOworCW91dHcocmVnaXN0ZXJfYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCisJd3JpdGVfY2FsaWJyYXRpb25fYml0c3RyZWFtKGRldiwgcmVnaXN0ZXJfYml0cywgYml0c3RyZWFtLAorCQliaXRzdHJlYW1fbGVuZ3RoKTsKKworCWNvbWVkaV91ZGVsYXkoYWQ3Mzc2X2NvbWVkaV91ZGVsYXkpOworCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldiksIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKworCXJldHVybiAwOworfQorCisvKiBGb3IgMTYwMi8xNiBvbmx5CisgKiBjaCAwIDogYWRjIGdhaW4KKyAqIGNoIDEgOiBhZGMgcG9zdGdhaW4gb2Zmc2V0ICovCitzdGF0aWMgaW50IHRyaW1wb3RfODQwMl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdWludDhfdCB2YWx1ZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IGJpdHN0cmVhbV9sZW5ndGggPSAxMDsKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtID0gKChjaGFubmVsICYgMHgzKSA8PCA4KSB8ICh2YWx1ZSAmIDB4ZmYpOworCXVuc2lnbmVkIGludCByZWdpc3Rlcl9iaXRzOworCXN0YXRpYyBjb25zdCBpbnQgYWQ4NDAyX2NvbWVkaV91ZGVsYXkgPSAxOworCisJcmVnaXN0ZXJfYml0cyA9IGNhbF9lbmFibGVfYml0cyhkZXYpIHwgU0VMRUNUX1RSSU1QT1RfQklUOworCWNvbWVkaV91ZGVsYXkoYWQ4NDAyX2NvbWVkaV91ZGVsYXkpOworCW91dHcocmVnaXN0ZXJfYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCisJd3JpdGVfY2FsaWJyYXRpb25fYml0c3RyZWFtKGRldiwgcmVnaXN0ZXJfYml0cywgYml0c3RyZWFtLAorCQliaXRzdHJlYW1fbGVuZ3RoKTsKKworCWNvbWVkaV91ZGVsYXkoYWQ4NDAyX2NvbWVkaV91ZGVsYXkpOworCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldiksIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdhaXRfZm9yX252cmFtX3JlYWR5KHVuc2lnbmVkIGxvbmcgczU5MzNfYmFzZV9hZGRyKQoreworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDA7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCWlmICgoaW5iKHM1OTMzX2Jhc2VfYWRkciArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1JfTlZDTUQpICYgTUNTUl9OVl9CVVNZKQorCQkJPT0gMCkKKwkJCXJldHVybiAwOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgbnZyYW1fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsIHVpbnQ4X3QgKiBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2cHJpdi0+czU5MzNfY29uZmlnOworCisJaWYgKHdhaXRfZm9yX252cmFtX3JlYWR5KGlvYmFzZSkgPCAwKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCW91dGIoTUNTUl9OVl9FTkFCTEUgfCBNQ1NSX05WX0xPQURfTE9XX0FERFIsCisJCWlvYmFzZSArIEFNQ0NfT1BfUkVHX01DU1JfTlZDTUQpOworCW91dGIoYWRkcmVzcyAmIDB4ZmYsIGlvYmFzZSArIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBKTsKKwlvdXRiKE1DU1JfTlZfRU5BQkxFIHwgTUNTUl9OVl9MT0FEX0hJR0hfQUREUiwKKwkJaW9iYXNlICsgQU1DQ19PUF9SRUdfTUNTUl9OVkNNRCk7CisJb3V0YigoYWRkcmVzcyA+PiA4KSAmIDB4ZmYsIGlvYmFzZSArIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBKTsKKwlvdXRiKE1DU1JfTlZfRU5BQkxFIHwgTUNTUl9OVl9SRUFELCBpb2Jhc2UgKyBBTUNDX09QX1JFR19NQ1NSX05WQ01EKTsKKworCWlmICh3YWl0X2Zvcl9udnJhbV9yZWFkeShpb2Jhc2UpIDwgMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkqZGF0YSA9IGluYihpb2Jhc2UgKyBBTUNDX09QX1JFR19NQ1NSX05WREFUQSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpZGFzLCBjYl9wY2lkYXNfcGNpX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXM2NC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1ODBiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXM2NC5jCkBAIC0wLDAgKzEsNDIyMiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jYl9wY2lkYXM2NC5jCisgICAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIENvbXB1dGVyQm9hcmRzL01lYXN1cmVtZW50Q29tcHV0aW5nIFBDSS1EQVMKKyAgICA2NHh4LCA2MHh4LCBhbmQgNDAyMCBjYXJkcy4KKworICAgIEF1dGhvcjogIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJhbmsgTW9yaSBIZXNzCisKKyAgICBUaGFua3MgYWxzbyBnbyB0byB0aGUgZm9sbG93aW5nIHBlb3BsZToKKworICAgIFN0ZXZlIFJvc2VuYmx1dGgsIGZvciBwcm92aWRpbmcgdGhlIHNvdXJjZSBjb2RlIGZvcgorICAgIGhpcyBwY2ktZGFzNjQwMiBkcml2ZXIsIGFuZCBzb3VyY2UgY29kZSBmb3Igd29ya2luZyBRTlggcGNpLTY0MDIKKyAgICBkcml2ZXJzIGJ5IEdyZWcgTGFpcmQgYW5kIE1hcml1c3ogQm9nYWN6LiAgTm9uZSBvZiB0aGUgY29kZSB3YXMKKyAgICB1c2VkIGRpcmVjdGx5IGhlcmUsIGJ1dCBpdCB3YXMgdXNlZnVsIGFzIGFuIGFkZGl0aW9uYWwgc291cmNlIG9mCisgICAgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gcHJvZ3JhbSB0aGUgYm9hcmRzLgorCisgICAgSm9obiBTaW1zLCBmb3IgbXVjaCB0ZXN0aW5nIGFuZCBmZWVkYmFjayBvbiBwY2lkYXMtNDAyMCBzdXBwb3J0LgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5Ny04IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKworRHJpdmVyOiBjYl9wY2lkYXM2NAorRGVzY3JpcHRpb246IE1lYXN1cmVtZW50Q29tcHV0aW5nIFBDSS1EQVM2NHh4LCA2MFhYLCBhbmQgNDAyMCBzZXJpZXMgd2l0aCB0aGUgUExYIDkwODAgUENJIGNvbnRyb2xsZXIKK0F1dGhvcjogRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorU3RhdHVzOiB3b3JrcworVXBkYXRlZDogMjAwMi0xMC0wOQorRGV2aWNlczogW01lYXN1cmVtZW50IENvbXB1dGluZ10gUENJLURBUzY0MDIvMTYgKGNiX3BjaWRhczY0KSwKKyAgUENJLURBUzY0MDIvMTIsIFBDSS1EQVM2NC9NMS8xNiwgUENJLURBUzY0L00yLzE2LAorICBQQ0ktREFTNjQvTTMvMTYsIFBDSS1EQVM2NDAyLzE2L0pSLCBQQ0ktREFTNjQvTTEvMTYvSlIsCisgIFBDSS1EQVM2NC9NMi8xNi9KUiwgUENJLURBUzY0L00zLzE2L0pSLCBQQ0ktREFTNjQvTTEvMTQsCisgIFBDSS1EQVM2NC9NMi8xNCwgUENJLURBUzY0L00zLzE0LCBQQ0ktREFTNjAxMywgUENJLURBUzYwMTQsCisgIFBDSS1EQVM2MDIzLCBQQ0ktREFTNjAyNSwgUENJLURBUzYwMzAsCisgIFBDSS1EQVM2MDMxLCBQQ0ktREFTNjAzMiwgUENJLURBUzYwMzMsIFBDSS1EQVM2MDM0LAorICBQQ0ktREFTNjAzNSwgUENJLURBUzYwMzYsIFBDSS1EQVM2MDQwLCBQQ0ktREFTNjA1MiwKKyAgUENJLURBUzYwNzAsIFBDSS1EQVM2MDcxLCBQQ0ktREFTNDAyMC8xMgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorCitUaGVzZSBib2FyZHMgbWF5IGJlIGF1dG9jYWxpYnJhdGVkIHdpdGggdGhlIGNvbWVkaV9jYWxpYnJhdGUgdXRpbGl0eS4KKworVG8gc2VsZWN0IHRoZSBibmMgdHJpZ2dlciBpbnB1dCBvbiB0aGUgNDAyMCAoaW5zdGVhZCBvZiB0aGUgZGlvIGlucHV0KSwKK3NwZWNpZnkgYSBub256ZXJvIGNoYW5uZWwgaW4gdGhlIGNoYW5zcGVjLiAgSWYgeW91IHdpc2ggdG8gdXNlIGFuIGV4dGVybmFsCittYXN0ZXIgY2xvY2sgb24gdGhlIDQwMjAsIHlvdSBtYXkgZG8gc28gYnkgc2V0dGluZyB0aGUgc2Nhbl9iZWdpbl9zcmMKK3RvIFRSSUdfT1RIRVIsIGFuZCB1c2luZyBhbiBJTlNOX0NPTkZJR19USU1FUl8xIGNvbmZpZ3VyYXRpb24gaW5zbgordG8gY29uZmlndXJlIHRoZSBkaXZpc29yIHRvIHVzZSBmb3IgdGhlIGV4dGVybmFsIGNsb2NrLgorCitTb21lIGRldmljZXMgYXJlIG5vdCBpZGVudGlmaWVkIGJlY2F1c2UgdGhlIFBDSSBkZXZpY2UgSURzIGFyZSBub3QgeWV0Citrbm93bi4gSWYgeW91IGhhdmUgc3VjaCBhIGJvYXJkLCBwbGVhc2UgZmlsZSBhIGJ1ZyByZXBvcnQgYXQKK2h0dHBzOi8vYnVncy5jb21lZGkub3JnLgorCisqLworCisvKgorCitUT0RPOgorCW1ha2UgaXQgcmV0dXJuIGVycm9yIGlmIHVzZXIgYXR0ZW1wdHMgYW4gYWkgY29tbWFuZCB0aGF0IHVzZXMgdGhlCisJCWV4dGVybmFsIHF1ZXVlLCBhbmQgYW4gYW8gY29tbWFuZCBzaW11bHRhbmVvdXNseQorCXVzZXIgY291bnRlciBzdWJkZXZpY2UKKwl0aGVyZSBhcmUgYSBudW1iZXIgb2YgYm9hcmRzIHRoaXMgZHJpdmVyIHdpbGwgc3VwcG9ydCB3aGVuIHRoZXkgYXJlCisJCWZ1bGx5IHJlbGVhc2VkLCBidXQgZG9lcyBub3QgeWV0IHNpbmNlIHRoZSBwY2kgZGV2aWNlIGlkIG51bWJlcnMKKwkJYXJlIG5vdCB5ZXQgYXZhaWxhYmxlLgorCXN1cHBvcnQgcHJlc2NhbGVkIDEwMGtoeiBjbG9jayBmb3Igc2xvdyBwYWNpbmcgKG5vdCBhdmFpbGFibGUgb24gNjAwMCBzZXJpZXM/KQorCW1ha2UgYW8gZmlmbyBzaXplIGFkanVzdGFibGUgbGlrZSBhaSBmaWZvCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJwbHg5MDgwLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyN1bmRlZiBQQ0lEQVM2NF9ERUJVRwkJLy8gZGlzYWJsZSBkZWJ1Z2dpbmcgY29kZQorLy8jZGVmaW5lIFBDSURBUzY0X0RFQlVHICAgICAgICAvLyBlbmFibGUgZGVidWdnaW5nIGNvZGUKKworI2lmZGVmIFBDSURBUzY0X0RFQlVHCisjZGVmaW5lIERFQlVHX1BSSU5UKGZvcm1hdCwgYXJncy4uLikgIHJ0X3ByaW50ayhmb3JtYXQgLCAjIyBhcmdzICkKKyNlbHNlCisjZGVmaW5lIERFQlVHX1BSSU5UKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIFRJTUVSX0JBU0UgMjUJCS8vIDQwTUh6IG1hc3RlciBjbG9jaworI2RlZmluZSBQUkVTQ0FMRURfVElNRVJfQkFTRQkxMDAwMAkvLyAxMDBrSHogJ3ByZXNjYWxlZCcgY2xvY2sgZm9yIHNsb3cgYXF1aXNpdGlvbiwgbWF5YmUgSSdsbCBzdXBwb3J0IHRoaXMgc29tZWRheQorI2RlZmluZSBETUFfQlVGRkVSX1NJWkUgMHgxMDAwCisKKy8qIG1heGltdW0gdmFsdWUgdGhhdCBjYW4gYmUgbG9hZGVkIGludG8gYm9hcmQncyAyNC1iaXQgY291bnRlcnMqLworc3RhdGljIGNvbnN0IGludCBtYXhfY291bnRlcl92YWx1ZSA9IDB4ZmZmZmZmOworCisvKiBQQ0ktREFTNjR4eHggYmFzZSBhZGRyZXNzZXMgKi8KKworLy8gaW5kaWNlcyBvZiBiYXNlIGFkZHJlc3MgcmVnaW9ucworZW51bSBiYXNlX2FkZHJlc3NfcmVnaW9ucyB7CisJUExYOTA4MF9CQUREUklOREVYID0gMCwKKwlNQUlOX0JBRERSSU5ERVggPSAyLAorCURJT19DT1VOVEVSX0JBRERSSU5ERVggPSAzLAorfTsKKworLy8gcHJpdihkZXYpLT5tYWluX2lvYmFzZSByZWdpc3RlcnMKK2VudW0gd3JpdGVfb25seV9yZWdpc3RlcnMgeworCUlOVFJfRU5BQkxFX1JFRyA9IDB4MCwJLy8gaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlcgorCUhXX0NPTkZJR19SRUcgPSAweDIsCS8vIGhhcmR3YXJlIGNvbmZpZyByZWdpc3RlcgorCURBUV9TWU5DX1JFRyA9IDB4YywKKwlEQVFfQVRSSUdfTE9XXzQwMjBfUkVHID0gMHhjLAorCUFEQ19DT05UUk9MMF9SRUcgPSAweDEwLAkvLyBhZGMgY29udHJvbCByZWdpc3RlciAwCisJQURDX0NPTlRST0wxX1JFRyA9IDB4MTIsCS8vIGFkYyBjb250cm9sIHJlZ2lzdGVyIDEKKwlDQUxJQlJBVElPTl9SRUcgPSAweDE0LAorCUFEQ19TQU1QTEVfSU5URVJWQUxfTE9XRVJfUkVHID0gMHgxNiwJLy8gbG93ZXIgMTYgYml0cyBvZiBhZGMgc2FtcGxlIGludGVydmFsIGNvdW50ZXIKKwlBRENfU0FNUExFX0lOVEVSVkFMX1VQUEVSX1JFRyA9IDB4MTgsCS8vIHVwcGVyIDggYml0cyBvZiBhZGMgc2FtcGxlIGludGVydmFsIGNvdW50ZXIKKwlBRENfREVMQVlfSU5URVJWQUxfTE9XRVJfUkVHID0gMHgxYSwJLy8gbG93ZXIgMTYgYml0cyBvZiBkZWxheSBpbnRlcnZhbCBjb3VudGVyCisJQURDX0RFTEFZX0lOVEVSVkFMX1VQUEVSX1JFRyA9IDB4MWMsCS8vIHVwcGVyIDggYml0cyBvZiBkZWxheSBpbnRlcnZhbCBjb3VudGVyCisJQURDX0NPVU5UX0xPV0VSX1JFRyA9IDB4MWUsCS8vIGxvd2VyIDE2IGJpdHMgb2YgaGFyZHdhcmUgY29udmVyc2lvbi9zY2FuIGNvdW50ZXIKKwlBRENfQ09VTlRfVVBQRVJfUkVHID0gMHgyMCwJLy8gdXBwZXIgOCBiaXRzIG9mIGhhcmR3YXJlIGNvbnZlcnNpb24vc2NhbiBjb3VudGVyCisJQURDX1NUQVJUX1JFRyA9IDB4MjIsCS8vIHNvZnR3YXJlIHRyaWdnZXIgdG8gc3RhcnQgYXF1aXNpdGlvbgorCUFEQ19DT05WRVJUX1JFRyA9IDB4MjQsCS8vIGluaXRpYXRlcyBzaW5nbGUgY29udmVyc2lvbgorCUFEQ19RVUVVRV9DTEVBUl9SRUcgPSAweDI2LAkvLyBjbGVhcnMgYWRjIHF1ZXVlCisJQURDX1FVRVVFX0xPQURfUkVHID0gMHgyOCwJLy8gbG9hZHMgYWRjIHF1ZXVlCisJQURDX0JVRkZFUl9DTEVBUl9SRUcgPSAweDJhLAorCUFEQ19RVUVVRV9ISUdIX1JFRyA9IDB4MmMsCS8vIGhpZ2ggY2hhbm5lbCBmb3IgaW50ZXJuYWwgcXVldWUsIHVzZSBhZGNfY2hhbl9iaXRzKCkgaW5saW5lIGFib3ZlCisJREFDX0NPTlRST0wwX1JFRyA9IDB4NTAsCS8vIGRhYyBjb250cm9sIHJlZ2lzdGVyIDAKKwlEQUNfQ09OVFJPTDFfUkVHID0gMHg1MiwJLy8gZGFjIGNvbnRyb2wgcmVnaXN0ZXIgMAorCURBQ19TQU1QTEVfSU5URVJWQUxfTE9XRVJfUkVHID0gMHg1NCwJLy8gbG93ZXIgMTYgYml0cyBvZiBkYWMgc2FtcGxlIGludGVydmFsIGNvdW50ZXIKKwlEQUNfU0FNUExFX0lOVEVSVkFMX1VQUEVSX1JFRyA9IDB4NTYsCS8vIHVwcGVyIDggYml0cyBvZiBkYWMgc2FtcGxlIGludGVydmFsIGNvdW50ZXIKKwlEQUNfU0VMRUNUX1JFRyA9IDB4NjAsCisJREFDX1NUQVJUX1JFRyA9IDB4NjQsCisJREFDX0JVRkZFUl9DTEVBUl9SRUcgPSAweDY2LAkvLyBjbGVhciBkYWMgYnVmZmVyCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFjX2NvbnZlcnRfcmVnKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAweDcwICsgKDIgKiAoY2hhbm5lbCAmIDB4MSkpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFjX2xzYl80MDIwX3JlZyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHg3MCArICg0ICogKGNoYW5uZWwgJiAweDEpKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhY19tc2JfNDAyMF9yZWcodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDB4NzIgKyAoNCAqIChjaGFubmVsICYgMHgxKSk7Cit9CisKK2VudW0gcmVhZF9vbmx5X3JlZ2lzdGVycyB7CisJSFdfU1RBVFVTX1JFRyA9IDB4MCwJLy8gaGFyZHdhcmUgc3RhdHVzIHJlZ2lzdGVyLCByZWFkaW5nIHRoaXMgYXBwYXJlbnRseSBjbGVhcnMgcGVuZGluZyBpbnRlcnJ1cHRzIGFzIHdlbGwKKwlQSVBFMV9SRUFEX1JFRyA9IDB4NCwKKwlBRENfUkVBRF9QTlRSX1JFRyA9IDB4OCwKKwlMT1dFUl9YRkVSX1JFRyA9IDB4MTAsCisJQURDX1dSSVRFX1BOVFJfUkVHID0gMHhjLAorCVBSRVBPU1RfUkVHID0gMHgxNCwKK307CisKK2VudW0gcmVhZF93cml0ZV9yZWdpc3RlcnMgeworCUk4MjU1XzQwMjBfUkVHID0gMHg0OCwJLy8gODI1NSBvZmZzZXQsIGZvciA0MDIwIG9ubHkKKwlBRENfUVVFVUVfRklGT19SRUcgPSAweDEwMCwJLy8gZXh0ZXJuYWwgY2hhbm5lbC9nYWluIHF1ZXVlLCB1c2VzIHNhbWUgYml0cyBhcyBBRENfUVVFVUVfTE9BRF9SRUcKKwlBRENfRklGT19SRUcgPSAweDIwMCwJLyogYWRjIGRhdGEgZmlmbyAqLworCURBQ19GSUZPX1JFRyA9IDB4MzAwLAkvKiBkYWMgZGF0YSBmaWZvLCBoYXMgd2VpcmQgaW50ZXJhY3Rpb25zIHdpdGggZXh0ZXJuYWwgY2hhbm5lbCBxdWV1ZSAqLworfTsKKworLy8gcHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UgcmVnaXN0ZXJzCitlbnVtIGRpb19jb3VudGVyX3JlZ2lzdGVycyB7CisJRElPXzgyNTVfT0ZGU0VUID0gMHgwLAorCURPX1JFRyA9IDB4MjAsCisJRElfUkVHID0gMHgyOCwKKwlESU9fRElSRUNUSU9OXzYwWFhfUkVHID0gMHg0MCwKKwlESU9fREFUQV82MFhYX1JFRyA9IDB4NDgsCit9OworCisvLyBiaXQgZGVmaW5pdGlvbnMgZm9yIHdyaXRlLW9ubHkgcmVnaXN0ZXJzCisKK2VudW0gaW50cl9lbmFibGVfY29udGVudHMgeworCUFEQ19JTlRSX1NSQ19NQVNLID0gMHgzLAkvLyBiaXRzIHRoYXQgc2V0IGFkYyBpbnRlcnJ1cHQgc291cmNlCisJQURDX0lOVFJfUUZVTExfQklUUyA9IDB4MCwJLy8gaW50ZXJydXB0IGZpZm8gcXVhdGVyIGZ1bGwKKwlBRENfSU5UUl9FT0NfQklUUyA9IDB4MSwJLy8gaW50ZXJydXB0IGVuZCBvZiBjb252ZXJzaW9uCisJQURDX0lOVFJfRU9TQ0FOX0JJVFMgPSAweDIsCS8vIGludGVycnVwdCBlbmQgb2Ygc2NhbgorCUFEQ19JTlRSX0VPU0VRX0JJVFMgPSAweDMsCS8vIGludGVycnVwdCBlbmQgb2Ygc2VxdWVuY2UgKHByb2JhYmx5IHdvbnQgdXNlIHRoaXMgaXQncyBwcmV0dHkgZmFuY3kpCisJRU5fQURDX0lOVFJfU1JDX0JJVCA9IDB4NCwJLy8gZW5hYmxlIGFkYyBpbnRlcnJ1cHQgc291cmNlCisJRU5fQURDX0RPTkVfSU5UUl9CSVQgPSAweDgsCS8vIGVuYWJsZSBhZGMgYXF1aXNpdGlvbiBkb25lIGludGVycnVwdAorCURBQ19JTlRSX1NSQ19NQVNLID0gMHgzMCwKKwlEQUNfSU5UUl9RRU1QVFlfQklUUyA9IDB4MCwKKwlEQUNfSU5UUl9ISUdIX0NIQU5fQklUUyA9IDB4MTAsCisJRU5fREFDX0lOVFJfU1JDX0JJVCA9IDB4NDAsCS8vIGVuYWJsZSBkYWMgaW50ZXJydXB0IHNvdXJjZQorCUVOX0RBQ19ET05FX0lOVFJfQklUID0gMHg4MCwKKwlFTl9BRENfQUNUSVZFX0lOVFJfQklUID0gMHgyMDAsCS8vIGVuYWJsZSBhZGMgYWN0aXZlIGludGVycnVwdAorCUVOX0FEQ19TVE9QX0lOVFJfQklUID0gMHg0MDAsCS8vIGVuYWJsZSBhZGMgc3RvcCB0cmlnZ2VyIGludGVycnVwdAorCUVOX0RBQ19BQ1RJVkVfSU5UUl9CSVQgPSAweDgwMCwJLy8gZW5hYmxlIGRhYyBhY3RpdmUgaW50ZXJydXB0CisJRU5fREFDX1VOREVSUlVOX0JJVCA9IDB4NDAwMCwJLy8gZW5hYmxlIGRhYyB1bmRlcnJ1biBzdGF0dXMgYml0CisJRU5fQURDX09WRVJSVU5fQklUID0gMHg4MDAwLAkvLyBlbmFibGUgYWRjIG92ZXJydW4gc3RhdHVzIGJpdAorfTsKKworZW51bSBod19jb25maWdfY29udGVudHMgeworCU1BU1RFUl9DTE9DS180MDIwX01BU0sgPSAweDMsCS8vIGJpdHMgdGhhdCBzcGVjaWZ5IG1hc3RlciBjbG9jayBzb3VyY2UgZm9yIDQwMjAKKwlJTlRFUk5BTF9DTE9DS180MDIwX0JJVFMgPSAweDEsCS8vIHVzZSA0MCBNSHogaW50ZXJuYWwgbWFzdGVyIGNsb2NrIGZvciA0MDIwCisJQk5DX0NMT0NLXzQwMjBfQklUUyA9IDB4MiwJLy8gdXNlIEJOQyBpbnB1dCBmb3IgbWFzdGVyIGNsb2NrCisJRVhUX0NMT0NLXzQwMjBfQklUUyA9IDB4MywJLy8gdXNlIGRpbyBpbnB1dCBmb3IgbWFzdGVyIGNsb2NrCisJRVhUX1FVRVVFX0JJVCA9IDB4MjAwLAkvLyB1c2UgZXh0ZXJuYWwgY2hhbm5lbC9nYWluIHF1ZXVlIChtb3JlIHZlcnNhdGlsZSB0aGFuIGludGVybmFsIHF1ZXVlKQorCVNMT1dfREFDX0JJVCA9IDB4NDAwLAkvLyB1c2UgMjI1IG5hbm9zZWMgc3Ryb2JlIHdoZW4gbG9hZGluZyBkYWMgaW5zdGVhZCBvZiA1MCBuYW5vc2VjCisJSFdfQ09ORklHX0RVTU1ZX0JJVFMgPSAweDIwMDAsCS8vIGJpdCB3aXRoIHVua25vd24gZnVuY3Rpb24geWV0IGdpdmVuIGFzIGRlZmF1bHQgdmFsdWUgaW4gcGNpLWRhczY0IG1hbnVhbAorCURNQV9DSF9TRUxFQ1RfQklUID0gMHg4MDAwLAkvLyBiaXQgc2VsZWN0cyBjaGFubmVscyAxLzAgZm9yIGFuYWxvZyBpbnB1dC9vdXRwdXQsIG90aGVyd2lzZSAwLzEKKwlGSUZPX1NJWkVfUkVHID0gMHg0LAkvLyBhbGxvd3MgYWRqdXN0bWVudCBvZiBmaWZvIHNpemVzCisJREFDX0ZJRk9fU0laRV9NQVNLID0gMHhmZjAwLAkvLyBiaXRzIHRoYXQgc2V0IGRhYyBmaWZvIHNpemUKKwlEQUNfRklGT19CSVRTID0gMHhmODAwLAkvKiA4ayBzYW1wbGUgYW8gZmlmbyAqLworfTsKKyNkZWZpbmUgREFDX0ZJRk9fU0laRSAweDIwMDAKKworZW51bSBkYXFfYXRyaWdfbG93XzQwMjBfY29udGVudHMgeworCUVYVF9BR0FURV9CTkNfQklUID0gMHg4MDAwLAkvLyB1c2UgdHJpZy9leHQgY2xrIGJuYyBpbnB1dCBmb3IgYW5hbG9nIGdhdGUgc2lnbmFsCisJRVhUX1NUT1BfVFJJR19CTkNfQklUID0gMHg0MDAwLAkvLyB1c2UgdHJpZy9leHQgY2xrIGJuYyBpbnB1dCBmb3IgZXh0ZXJuYWwgc3RvcCB0cmlnZ2VyIHNpZ25hbAorCUVYVF9TVEFSVF9UUklHX0JOQ19CSVQgPSAweDIwMDAsCS8vIHVzZSB0cmlnL2V4dCBjbGsgYm5jIGlucHV0IGZvciBleHRlcm5hbCBzdGFydCB0cmlnZ2VyIHNpZ25hbAorfTsKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgYW5hbG9nX3RyaWdfbG93X3RocmVzaG9sZF9iaXRzKHVpbnQxNl90IHRocmVzaG9sZCkKK3sKKwlyZXR1cm4gdGhyZXNob2xkICYgMHhmZmY7Cit9CisKK2VudW0gYWRjX2NvbnRyb2wwX2NvbnRlbnRzIHsKKwlBRENfR0FURV9TUkNfTUFTSyA9IDB4MywJLy8gYml0cyB0aGF0IHNlbGVjdCBnYXRlCisJQURDX1NPRlRfR0FURV9CSVRTID0gMHgxLAkvLyBzb2Z0d2FyZSBnYXRlCisJQURDX0VYVF9HQVRFX0JJVFMgPSAweDIsCS8vIGV4dGVybmFsIGRpZ2l0YWwgZ2F0ZQorCUFEQ19BTkFMT0dfR0FURV9CSVRTID0gMHgzLAkvLyBhbmFsb2cgbGV2ZWwgZ2F0ZQorCUFEQ19HQVRFX0xFVkVMX0JJVCA9IDB4NCwJLy8gbGV2ZWwtc2Vuc2l0aXZlIGdhdGUgKGZvciBkaWdpdGFsKQorCUFEQ19HQVRFX1BPTEFSSVRZX0JJVCA9IDB4OCwJLy8gZ2F0ZSBhY3RpdmUgbG93CisJQURDX1NUQVJUX1RSSUdfU09GVF9CSVRTID0gMHgxMCwKKwlBRENfU1RBUlRfVFJJR19FWFRfQklUUyA9IDB4MjAsCisJQURDX1NUQVJUX1RSSUdfQU5BTE9HX0JJVFMgPSAweDMwLAorCUFEQ19TVEFSVF9UUklHX01BU0sgPSAweDMwLAorCUFEQ19TVEFSVF9UUklHX0ZBTExJTkdfQklUID0gMHg0MCwJLy8gdHJpZyAxIHVzZXMgZmFsbGluZyBlZGdlCisJQURDX0VYVF9DT05WX0ZBTExJTkdfQklUID0gMHg4MDAsCS8vIGV4dGVybmFsIHBhY2luZyB1c2VzIGZhbGxpbmcgZWRnZQorCUFEQ19TQU1QTEVfQ09VTlRFUl9FTl9CSVQgPSAweDEwMDAsCS8vIGVuYWJsZSBoYXJkd2FyZSBzY2FuIGNvdW50ZXIKKwlBRENfRE1BX0RJU0FCTEVfQklUID0gMHg0MDAwLAkvLyBkaXNhYmxlcyBkbWEKKwlBRENfRU5BQkxFX0JJVCA9IDB4ODAwMCwJLy8gbWFzdGVyIGFkYyBlbmFibGUKK307CisKK2VudW0gYWRjX2NvbnRyb2wxX2NvbnRlbnRzIHsKKwlBRENfUVVFVUVfQ09ORklHX0JJVCA9IDB4MSwJLy8gc2hvdWxkIGJlIHNldCBmb3IgYm9hcmRzIHdpdGggPiAxNiBjaGFubmVscworCUNPTlZFUlRfUE9MQVJJVFlfQklUID0gMHgxMCwKKwlFT0NfUE9MQVJJVFlfQklUID0gMHgyMCwKKwlBRENfU1dfR0FURV9CSVQgPSAweDQwLAkvLyBzb2Z0d2FyZSBnYXRlIG9mIGFkYworCUFEQ19ESVRIRVJfQklUID0gMHgyMDAsCS8vIHR1cm4gb24gZXh0cmEgbm9pc2UgZm9yIGRpdGhlcmluZworCVJFVFJJR0dFUl9CSVQgPSAweDgwMCwKKwlBRENfTE9fQ0hBTk5FTF80MDIwX01BU0sgPSAweDMwMCwKKwlBRENfSElfQ0hBTk5FTF80MDIwX01BU0sgPSAweGMwMCwKKwlUV09fQ0hBTk5FTF80MDIwX0JJVFMgPSAweDEwMDAsCS8vIHR3byBjaGFubmVsIG1vZGUgZm9yIDQwMjAKKwlGT1VSX0NIQU5ORUxfNDAyMF9CSVRTID0gMHgyMDAwLAkvLyBmb3VyIGNoYW5uZWwgbW9kZSBmb3IgNDAyMAorCUNIQU5ORUxfTU9ERV80MDIwX01BU0sgPSAweDMwMDAsCisJQURDX01PREVfTUFTSyA9IDB4ZjAwMCwKK307CitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGFkY19sb19jaGFuXzQwMjBfYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gKGNoYW5uZWwgJiAweDMpIDw8IDg7Cit9Oworc3RhdGljIGlubGluZSB1aW50MTZfdCBhZGNfaGlfY2hhbl80MDIwX2JpdHModW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIChjaGFubmVsICYgMHgzKSA8PCAxMDsKK307CitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGFkY19tb2RlX2JpdHModW5zaWduZWQgaW50IG1vZGUpCit7CisJcmV0dXJuIChtb2RlICYgMHhmKSA8PCAxMjsKK307CisKK2VudW0gY2FsaWJyYXRpb25fY29udGVudHMgeworCVNFTEVDVF84ODAwX0JJVCA9IDB4MSwKKwlTRUxFQ1RfODQwMl82NFhYX0JJVCA9IDB4MiwKKwlTRUxFQ1RfMTU5MF82MFhYX0JJVCA9IDB4MiwKKwlDQUxfRU5fNjRYWF9CSVQgPSAweDQwLAkvLyBjYWxpYnJhdGlvbiBlbmFibGUgZm9yIDY0eHggc2VyaWVzCisJU0VSSUFMX0RBVEFfSU5fQklUID0gMHg4MCwKKwlTRVJJQUxfQ0xPQ0tfQklUID0gMHgxMDAsCisJQ0FMX0VOXzYwWFhfQklUID0gMHgyMDAsCS8vIGNhbGlicmF0aW9uIGVuYWJsZSBmb3IgNjB4eCBzZXJpZXMKKwlDQUxfR0FJTl9CSVQgPSAweDgwMCwKK307CisvKiBjYWxpYnJhdGlvbiBzb3VyY2VzIGZvciA2MDI1IGFyZToKKyAqICAwIDogZ3JvdW5kCisgKiAgMSA6IDEwVgorICogIDIgOiA1VgorICogIDMgOiAwLjVWCisgKiAgNCA6IDAuMDVWCisgKiAgNSA6IGdyb3VuZAorICogIDYgOiBkYWMgY2hhbm5lbCAwCisgKiAgNyA6IGRhYyBjaGFubmVsIDEKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBhZGNfc3JjX2JpdHModW5zaWduZWQgaW50IHNvdXJjZSkKK3sKKwlyZXR1cm4gKHNvdXJjZSAmIDB4ZikgPDwgMzsKK307CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgYWRjX2NvbnZlcnRfY2hhbl80MDIwX2JpdHModW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIChjaGFubmVsICYgMHgzKSA8PCA4OworfTsKKworZW51bSBhZGNfcXVldWVfbG9hZF9jb250ZW50cyB7CisJVU5JUF9CSVQgPSAweDgwMCwJLy8gdW5pcG9sYXIvYmlwb2xhciBiaXQKKwlBRENfU0VfRElGRl9CSVQgPSAweDEwMDAsCS8vIHNpbmdsZS1lbmRlZC8gZGlmZmVyZW50aWFsIGJpdAorCUFEQ19DT01NT05fQklUID0gMHgyMDAwLAkvLyBub24tcmVmZXJlbmNlZCBzaW5nbGUtZW5kZWQgKGNvbW1vbi1tb2RlIGlucHV0KQorCVFVRVVFX0VPU0VRX0JJVCA9IDB4NDAwMCwJLy8gcXVldWUgZW5kIG9mIHNlcXVlbmNlCisJUVVFVUVfRU9TQ0FOX0JJVCA9IDB4ODAwMCwJLy8gcXVldWUgZW5kIG9mIHNjYW4KK307CitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGFkY19jaGFuX2JpdHModW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIGNoYW5uZWwgJiAweDNmOworfTsKKworZW51bSBkYWNfY29udHJvbDBfY29udGVudHMgeworCURBQ19FTkFCTEVfQklUID0gMHg4MDAwLAkvLyBkYWMgY29udHJvbGxlciBlbmFibGUgYml0CisJREFDX0NZQ0xJQ19TVE9QX0JJVCA9IDB4NDAwMCwKKwlEQUNfV0FWRUZPUk1fTU9ERV9CSVQgPSAweDEwMCwKKwlEQUNfRVhUX1VQREFURV9GQUxMSU5HX0JJVCA9IDB4ODAsCisJREFDX0VYVF9VUERBVEVfRU5BQkxFX0JJVCA9IDB4NDAsCisJV0FWRUZPUk1fVFJJR19NQVNLID0gMHgzMCwKKwlXQVZFRk9STV9UUklHX0RJU0FCTEVEX0JJVFMgPSAweDAsCisJV0FWRUZPUk1fVFJJR19TT0ZUX0JJVFMgPSAweDEwLAorCVdBVkVGT1JNX1RSSUdfRVhUX0JJVFMgPSAweDIwLAorCVdBVkVGT1JNX1RSSUdfQURDMV9CSVRTID0gMHgzMCwKKwlXQVZFRk9STV9UUklHX0ZBTExJTkdfQklUID0gMHg4LAorCVdBVkVGT1JNX0dBVEVfTEVWRUxfQklUID0gMHg0LAorCVdBVkVGT1JNX0dBVEVfRU5BQkxFX0JJVCA9IDB4MiwKKwlXQVZFRk9STV9HQVRFX1NFTEVDVF9CSVQgPSAweDEsCit9OworCitlbnVtIGRhY19jb250cm9sMV9jb250ZW50cyB7CisJREFDX1dSSVRFX1BPTEFSSVRZX0JJVCA9IDB4ODAwLAkvKiBib2FyZC1kZXBlbmRlbnQgc2V0dGluZyAqLworCURBQzFfRVhUX1JFRl9CSVQgPSAweDIwMCwKKwlEQUMwX0VYVF9SRUZfQklUID0gMHgxMDAsCisJREFDX09VVFBVVF9FTkFCTEVfQklUID0gMHg4MCwJLy8gZGFjIG91dHB1dCBlbmFibGUgYml0CisJREFDX1VQREFURV9QT0xBUklUWV9CSVQgPSAweDQwLAkvKiBib2FyZC1kZXBlbmRlbnQgc2V0dGluZyAqLworCURBQ19TV19HQVRFX0JJVCA9IDB4MjAsCisJREFDMV9VTklQT0xBUl9CSVQgPSAweDgsCisJREFDMF9VTklQT0xBUl9CSVQgPSAweDIsCit9OworCisvLyBiaXQgZGVmaW5pdGlvbnMgZm9yIHJlYWQtb25seSByZWdpc3RlcnMKK2VudW0gaHdfc3RhdHVzX2NvbnRlbnRzIHsKKwlEQUNfVU5ERVJSVU5fQklUID0gMHgxLAorCUFEQ19PVkVSUlVOX0JJVCA9IDB4MiwKKwlEQUNfQUNUSVZFX0JJVCA9IDB4NCwKKwlBRENfQUNUSVZFX0JJVCA9IDB4OCwKKwlEQUNfSU5UUl9QRU5ESU5HX0JJVCA9IDB4MTAsCisJQURDX0lOVFJfUEVORElOR19CSVQgPSAweDIwLAorCURBQ19ET05FX0JJVCA9IDB4NDAsCisJQURDX0RPTkVfQklUID0gMHg4MCwKKwlFWFRfSU5UUl9QRU5ESU5HX0JJVCA9IDB4MTAwLAorCUFEQ19TVE9QX0JJVCA9IDB4MjAwLAorfTsKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgcGlwZV9mdWxsX2JpdHModWludDE2X3QgaHdfc3RhdHVzX2JpdHMpCit7CisJcmV0dXJuIChod19zdGF0dXNfYml0cyA+PiAxMCkgJiAweDM7Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkbWFfY2hhaW5fZmxhZ19iaXRzKHVpbnQxNl90IHByZXBvc3RfYml0cykKK3sKKwlyZXR1cm4gKHByZXBvc3RfYml0cyA+PiA2KSAmIDB4MzsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFkY191cHBlcl9yZWFkX3B0cl9jb2RlKHVpbnQxNl90IHByZXBvc3RfYml0cykKK3sKKwlyZXR1cm4gKHByZXBvc3RfYml0cyA+PiAxMikgJiAweDM7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhZGNfdXBwZXJfd3JpdGVfcHRyX2NvZGUodWludDE2X3QgcHJlcG9zdF9iaXRzKQoreworCXJldHVybiAocHJlcG9zdF9iaXRzID4+IDE0KSAmIDB4MzsKK30KKworLy8gSTJDIGFkZHJlc3NlcyBmb3IgNDAyMAorZW51bSBpMmNfYWRkcmVzc2VzIHsKKwlSQU5HRV9DQUxfSTJDX0FERFIgPSAweDIwLAorCUNBTERBQzBfSTJDX0FERFIgPSAweGMsCisJQ0FMREFDMV9JMkNfQUREUiA9IDB4ZCwKK307CisKK2VudW0gcmFuZ2VfY2FsX2kyY19jb250ZW50cyB7CisJQURDX1NSQ180MDIwX01BU0sgPSAweDcwLAkvLyBiaXRzIHRoYXQgc2V0IHdoYXQgc291cmNlIHRoZSBhZGMgY29udmVydGVyIG1lYXN1cmVzCisJQk5DX1RSSUdfVEhSRVNIT0xEXzBWX0JJVCA9IDB4ODAsCS8vIG1ha2UgYm5jIHRyaWcvZXh0IGNsb2NrIHRocmVzaG9sZCAwViBpbnN0ZWFkIG9mIDIuNVYKK307CitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgYWRjX3NyY180MDIwX2JpdHModW5zaWduZWQgaW50IHNvdXJjZSkKK3sKKwlyZXR1cm4gKHNvdXJjZSA8PCA0KSAmIEFEQ19TUkNfNDAyMF9NQVNLOworfTsKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBhdHRlbnVhdGVfYml0KHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCS8vIGF0dGVudWF0ZSBjaGFubmVsICgrLTVWIGlucHV0IHJhbmdlKQorCXJldHVybiAxIDw8IChjaGFubmVsICYgMHgzKTsKK307CisKKy8vIGFuYWxvZyBpbnB1dCByYW5nZXMgZm9yIDY0eHggYm9hcmRzCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgYWlfcmFuZ2VzXzY0eHggPSB7CisJOCwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSkKKwkJfQorfTsKKworLyogYW5hbG9nIGlucHV0IHJhbmdlcyBmb3IgNjB4eCBib2FyZHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhaV9yYW5nZXNfNjB4eCA9IHsKKwk0LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjA1KSwKKwkJfQorfTsKKworLyogYW5hbG9nIGlucHV0IHJhbmdlcyBmb3IgNjAzMCwgZXRjIGJvYXJkcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFpX3Jhbmdlc182MDMwID0geworCTE0LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMiksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjIpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIpLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuNSksCisJCQlVTklfUkFOR0UoMC4yKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQl9Cit9OworCisvKiBhbmFsb2cgaW5wdXQgcmFuZ2VzIGZvciA2MDUyLCBldGMgYm9hcmRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgYWlfcmFuZ2VzXzYwNTIgPSB7CisJMTUsCisJeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4yNSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjA1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMiksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC41KSwKKwkJCVVOSV9SQU5HRSgwLjIpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCX0KK307CisKKy8vIGFuYWxvZyBpbnB1dCByYW5nZXMgZm9yIDQwMjAgYm9hcmQKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhaV9yYW5nZXNfNDAyMCA9IHsKKwkyLAorCXsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJfQorfTsKKworLy8gYW5hbG9nIG91dHB1dCByYW5nZXMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhb19yYW5nZXNfNjR4eCA9IHsKKwk0LAorCXsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMTApLAorCQl9Cit9Oworc3RhdGljIGNvbnN0IGludCBhb19yYW5nZV9jb2RlXzY0eHhbXSA9IHsKKwkweDAsCisJMHgxLAorCTB4MiwKKwkweDMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgYW9fcmFuZ2VzXzYweHggPSB7CisJMSwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQl9Cit9Oworc3RhdGljIGNvbnN0IGludCBhb19yYW5nZV9jb2RlXzYweHhbXSA9IHsKKwkweDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgYW9fcmFuZ2VzXzYwMzAgPSB7CisJMiwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJfQorfTsKK3N0YXRpYyBjb25zdCBpbnQgYW9fcmFuZ2VfY29kZV82MDMwW10gPSB7CisJMHgwLAorCTB4MiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhb19yYW5nZXNfNDAyMCA9IHsKKwkyLAorCXsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCX0KK307CitzdGF0aWMgY29uc3QgaW50IGFvX3JhbmdlX2NvZGVfNDAyMFtdID0geworCTB4MSwKKwkweDAsCit9OworCitlbnVtIHJlZ2lzdGVyX2xheW91dCB7CisJTEFZT1VUXzYwWFgsCisJTEFZT1VUXzY0WFgsCisJTEFZT1VUXzQwMjAsCit9OworCitzdHJ1Y3QgaHdfZmlmb19pbmZvIHsKKwl1bnNpZ25lZCBpbnQgbnVtX3NlZ21lbnRzOworCXVuc2lnbmVkIGludCBtYXhfc2VnbWVudF9sZW5ndGg7CisJdW5zaWduZWQgaW50IHNhbXBsZV9wYWNraW5nX3JhdGlvOworCXVpbnQxNl90IGZpZm9fc2l6ZV9yZWdfbWFzazsKK307CisKK3N0cnVjdCBwY2lkYXM2NF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOwkJLy8gcGNpIGRldmljZSBpZAorCWludCBhaV9zZV9jaGFuczsJLy8gbnVtYmVyIG9mIGFpIGlucHV0cyBpbiBzaW5nbGUtZW5kZWQgbW9kZQorCWludCBhaV9iaXRzOwkJLy8gYW5hbG9nIGlucHV0IHJlc29sdXRpb24KKwlpbnQgYWlfc3BlZWQ7CQkvLyBmYXN0ZXN0IGNvbnZlcnNpb24gcGVyaW9kIGluIG5zCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlX3RhYmxlOworCWludCBhb19uY2hhbjsJCS8vIG51bWJlciBvZiBhbmFsb2cgb3V0IGNoYW5uZWxzCisJaW50IGFvX2JpdHM7CQkvLyBhbmFsb2cgb3V0cHV0IHJlc29sdXRpb24KKwlpbnQgYW9fc2Nhbl9zcGVlZDsJLy8gYW5hbG9nIG91dHB1dCBzcGVlZCAoZm9yIGEgc2Nhbiwgbm90IGNvbnZlcnNpb24pCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX3RhYmxlOworCWNvbnN0IGludCAqYW9fcmFuZ2VfY29kZTsKKwljb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvICpjb25zdCBhaV9maWZvOworCWVudW0gcmVnaXN0ZXJfbGF5b3V0IGxheW91dDsJLy8gZGlmZmVyZW50IGJvYXJkIGZhbWlsaWVzIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHJlZ2lzdGVycworCXVuc2lnbmVkIGhhc184MjU1OjE7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGh3X2ZpZm9faW5mbyBhaV9maWZvXzQwMjAgPSB7CisgICAgICBudW1fc2VnbWVudHM6MiwKKyAgICAgIG1heF9zZWdtZW50X2xlbmd0aDoweDgwMDAsCisgICAgICBzYW1wbGVfcGFja2luZ19yYXRpbzoyLAorICAgICAgZmlmb19zaXplX3JlZ19tYXNrOjB4N2YsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGh3X2ZpZm9faW5mbyBhaV9maWZvXzY0eHggPSB7CisgICAgICBudW1fc2VnbWVudHM6NCwKKyAgICAgIG1heF9zZWdtZW50X2xlbmd0aDoweDgwMCwKKyAgICAgIHNhbXBsZV9wYWNraW5nX3JhdGlvOjEsCisgICAgICBmaWZvX3NpemVfcmVnX21hc2s6MHgzZiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvIGFpX2ZpZm9fNjB4eCA9IHsKKyAgICAgIG51bV9zZWdtZW50czo0LAorICAgICAgbWF4X3NlZ21lbnRfbGVuZ3RoOjB4ODAwLAorICAgICAgc2FtcGxlX3BhY2tpbmdfcmF0aW86MSwKKyAgICAgIGZpZm9fc2l6ZV9yZWdfbWFzazoweDdmLAorfTsKKworLyogbWF4aW11bSBudW1iZXIgb2YgZG1hIHRyYW5zZmVycyB3ZSB3aWxsIGNoYWluIHRvZ2V0aGVyIGludG8gYSByaW5nCisgKiAoYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkbWEgYnVmZmVycyB3ZSBtYWludGFpbikgKi8KKyNkZWZpbmUgTUFYX0FJX0RNQV9SSU5HX0NPVU5UICgweDgwMDAwIC8gRE1BX0JVRkZFUl9TSVpFKQorI2RlZmluZSBNSU5fQUlfRE1BX1JJTkdfQ09VTlQgKDB4MTAwMDAgLyBETUFfQlVGRkVSX1NJWkUpCisjZGVmaW5lIEFPX0RNQV9SSU5HX0NPVU5UICgweDEwMDAwIC8gRE1BX0JVRkZFUl9TSVpFKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWlfZG1hX3JpbmdfY291bnQoc3RydWN0IHBjaWRhczY0X2JvYXJkICogYm9hcmQpCit7CisJaWYgKGJvYXJkLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCXJldHVybiBNQVhfQUlfRE1BX1JJTkdfQ09VTlQ7CisJZWxzZQorCQlyZXR1cm4gTUlOX0FJX0RNQV9SSU5HX0NPVU5UOworfQorCitzdGF0aWMgY29uc3QgaW50IGJ5dGVzX2luX3NhbXBsZSA9IDI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQgcGNpZGFzNjRfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQwMi8xNiIsCisJICAgICAgZGV2aWNlX2lkOjB4MWQsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182NHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82NHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NDAyLzEyIiwJLy8gWFhYIGNoZWNrCisJICAgICAgZGV2aWNlX2lkOjB4MWUsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182NHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82NHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMS8xNiIsCisJICAgICAgZGV2aWNlX2lkOjB4MzUsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182NHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82NHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMi8xNiIsCisJICAgICAgZGV2aWNlX2lkOjB4MzYsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6NTAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzY0eHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20zLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgzNywKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDozMzMsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjR4eCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisJeworCQkubmFtZSA9ICJwY2ktZGFzNjAxMyIsCisJCS5kZXZpY2VfaWQgPSAweDc4LAorCQkuYWlfc2VfY2hhbnMgPSAxNiwKKwkJLmFpX2JpdHMgPSAxNiwKKwkJLmFpX3NwZWVkID0gNTAwMCwKKwkJLmFvX25jaGFuID0gMCwKKwkJLmFvX2JpdHMgPSAxNiwKKwkJLmxheW91dCA9IExBWU9VVF82MFhYLAorCQkuYWlfcmFuZ2VfdGFibGUgPSAmYWlfcmFuZ2VzXzYweHgsCisJCS5hb19yYW5nZV90YWJsZSA9ICZhb19yYW5nZXNfNjB4eCwKKwkJLmFvX3JhbmdlX2NvZGUgPSBhb19yYW5nZV9jb2RlXzYweHgsCisJCS5haV9maWZvID0gJmFpX2ZpZm9fNjB4eCwKKwkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDE0IiwKKwkgICAgICBkZXZpY2VfaWQ6MHg3OSwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDIzIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg1ZCwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDI1IiwKKwkgICAgICBkZXZpY2VfaWQ6MHg1ZSwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDMwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg1ZiwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MDMwLAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MDMwLAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDMxIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2MCwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MDMwLAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MDMwLAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDMyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2MSwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDMwLAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDMzIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2MiwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDMwLAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDM0IiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2MywKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgYW9fc2Nhbl9zcGVlZDowLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDM1IiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2NCwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDM2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2ZiwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDQwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2NSwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDoyMDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDUyLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjAzMCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182MHh4LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjA1MiIsCisJICAgICAgZGV2aWNlX2lkOjB4NjYsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6MzMzMywKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MzMzMywKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjA1MiwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwNzAiLAorCSAgICAgIGRldmljZV9pZDoweDY3LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjgwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjA1MiwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwNzEiLAorCSAgICAgIGRldmljZV9pZDoweDY4LAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjgwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjA1MiwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczQwMjAvMTIiLAorCSAgICAgIGRldmljZV9pZDoweDUyLAorCSAgICAgIGFpX3NlX2NoYW5zOjQsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6NTAsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjAsCS8vIG5vIGhhcmR3YXJlIHBhY2luZyBvbiBhbworCSAgICAgIGxheW91dDoJTEFZT1VUXzQwMjAsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc180MDIwLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNDAyMCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNDAyMCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb180MDIwLAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisjaWYgMAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0MDIvMTYvanIiLAorCSAgICAgIGRldmljZV9pZDowCS8vIFhYWCwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhaV9maWZvOglhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMS8xNi9qciIsCisJICAgICAgZGV2aWNlX2lkOjAJLy8gWFhYLAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFpX2ZpZm86CWFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20yLzE2L2pyIiwKKwkgICAgICBkZXZpY2VfaWQ6MAkvLyBYWFgsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6NTAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhaV9maWZvOglhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMy8xNi9qciIsCisJICAgICAgZGV2aWNlX2lkOjAJLy8gWFhYLAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjMzMywKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYWlfZmlmbzoJYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQvbTEvMTQiLAorCSAgICAgIGRldmljZV9pZDowLAkvLyBYWFgKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNCwKKwkgICAgICBhaV9zcGVlZDoxMDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhaV9maWZvOglhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMi8xNCIsCisJICAgICAgZGV2aWNlX2lkOjAsCS8vIFhYWAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE0LAorCSAgICAgIGFpX3NwZWVkOjUwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYWlfZmlmbzoJYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQvbTMvMTQiLAorCSAgICAgIGRldmljZV9pZDowLAkvLyBYWFgKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNCwKKwkgICAgICBhaV9zcGVlZDozMzMsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFpX2ZpZm86CWFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorI2VuZGlmCit9OworCisvLyBOdW1iZXIgb2YgYm9hcmRzIGluIGNiX3BjaWRhc19ib2FyZHMKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG51bV9ib2FyZHModm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKHBjaWRhczY0X2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjaWRhczY0X2JvYXJkKTsKK30KKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaWRhczY0X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDAxZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDAxZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDAzNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDAzNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDAzNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA1ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA1ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA1ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA2NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA2NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA2OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA2ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA3OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpZGFzNjRfcGNpX3RhYmxlKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQgKmJvYXJkKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiAoc3RydWN0IHBjaWRhczY0X2JvYXJkICopIGRldi0+Ym9hcmRfcHRyOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHNlX2RpZmZfYml0XzZ4eHgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJaW50IHVzZV9kaWZmZXJlbnRpYWwpCit7CisJaWYgKChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzY0WFggJiYgIXVzZV9kaWZmZXJlbnRpYWwpIHx8CisJCShib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzYwWFggJiYgdXNlX2RpZmZlcmVudGlhbCkpCisJCXJldHVybiBBRENfU0VfRElGRl9CSVQ7CisJZWxzZQorCQlyZXR1cm4gMDsKK307CisKK3N0cnVjdCBleHRfY2xvY2tfaW5mbyB7CisJdW5zaWduZWQgaW50IGRpdmlzb3I7CS8vIG1hc3RlciBjbG9jayBkaXZpc29yIHRvIHVzZSBmb3Igc2NhbnMgd2l0aCBleHRlcm5hbCBtYXN0ZXIgY2xvY2sKKwl1bnNpZ25lZCBpbnQgY2hhbnNwZWM7CS8vIGNoYW5zcGVjIGZvciBtYXN0ZXIgY2xvY2sgaW5wdXQgd2hlbiB1c2VkIGFzIHNjYW4gYmVnaW4gc3JjCit9OworCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICovCitzdHJ1Y3QgcGNpZGFzNjRfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgcGNpX2RldiAqaHdfZGV2OwkvLyBwb2ludGVyIHRvIGJvYXJkJ3MgcGNpX2RldiBzdHJ1Y3QKKwkvLyBiYXNlIGFkZHJlc3NlcyAocGh5c2ljYWwpCisJcmVzb3VyY2Vfc2l6ZV90IHBseDkwODBfcGh5c19pb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IG1haW5fcGh5c19pb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGRpb19jb3VudGVyX3BoeXNfaW9iYXNlOworCS8vIGJhc2UgYWRkcmVzc2VzIChpb3JlbWFwcGVkKQorCXZvaWQgKnBseDkwODBfaW9iYXNlOworCXZvaWQgKm1haW5faW9iYXNlOworCXZvaWQgKmRpb19jb3VudGVyX2lvYmFzZTsKKwkvLyBsb2NhbCBhZGRyZXNzICh1c2VkIGJ5IGRtYSBjb250cm9sbGVyKQorCXVpbnQzMl90IGxvY2FsMF9pb2Jhc2U7CisJdWludDMyX3QgbG9jYWwxX2lvYmFzZTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYWlfY291bnQ7CS8vIG51bWJlciBvZiBhbmFsb2cgaW5wdXQgc2FtcGxlcyByZW1haW5pbmcKKwl1aW50MTZfdCAqYWlfYnVmZmVyW01BWF9BSV9ETUFfUklOR19DT1VOVF07CS8vIGRtYSBidWZmZXJzIGZvciBhbmFsb2cgaW5wdXQKKwlkbWFfYWRkcl90IGFpX2J1ZmZlcl9idXNfYWRkcltNQVhfQUlfRE1BX1JJTkdfQ09VTlRdOwkvLyBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgYWkgZG1hIGJ1ZmZlcnMKKwlzdHJ1Y3QgcGx4X2RtYV9kZXNjICphaV9kbWFfZGVzYzsJLy8gYXJyYXkgb2YgYWkgZG1hIGRlc2NyaXB0b3JzIHJlYWQgYnkgcGx4OTA4MCwgYWxsb2NhdGVkIHRvIGdldCBwcm9wZXIgYWxpZ25tZW50CisJZG1hX2FkZHJfdCBhaV9kbWFfZGVzY19idXNfYWRkcjsJLy8gcGh5c2ljYWwgYWRkcmVzcyBvZiBhaSBkbWEgZGVzY3JpcHRvciBhcnJheQorCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhaV9kbWFfaW5kZXg7CS8vIGluZGV4IG9mIHRoZSBhaSBkbWEgZGVzY3JpcHRvci9idWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZAorCXVpbnQxNl90ICphb19idWZmZXJbQU9fRE1BX1JJTkdfQ09VTlRdOwkvLyBkbWEgYnVmZmVycyBmb3IgYW5hbG9nIG91dHB1dAorCWRtYV9hZGRyX3QgYW9fYnVmZmVyX2J1c19hZGRyW0FPX0RNQV9SSU5HX0NPVU5UXTsJLy8gcGh5c2ljYWwgYWRkcmVzc2VzIG9mIGFvIGRtYSBidWZmZXJzCisJc3RydWN0IHBseF9kbWFfZGVzYyAqYW9fZG1hX2Rlc2M7CisJZG1hX2FkZHJfdCBhb19kbWFfZGVzY19idXNfYWRkcjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYW9fZG1hX2luZGV4OwkvLyBrZWVwcyB0cmFjayBvZiBidWZmZXIgd2hlcmUgdGhlIG5leHQgYW8gc2FtcGxlIHNob3VsZCBnbworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYW9fY291bnQ7CS8vIG51bWJlciBvZiBhbmFsb2cgb3V0cHV0IHNhbXBsZXMgcmVtYWluaW5nCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFvX3ZhbHVlWzJdOwkvLyByZW1lbWJlciB3aGF0IHRoZSBhbmFsb2cgb3V0cHV0cyBhcmUgc2V0IHRvLCB0byBhbGxvdyByZWFkYmFjaworCXVuc2lnbmVkIGludCBod19yZXZpc2lvbjsJLy8gc3RjIGNoaXAgaGFyZHdhcmUgcmV2aXNpb24gbnVtYmVyCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGludHJfZW5hYmxlX2JpdHM7CS8vIGxhc3QgYml0cyBzZW50IHRvIElOVFJfRU5BQkxFX1JFRyByZWdpc3RlcgorCXZvbGF0aWxlIHVpbnQxNl90IGFkY19jb250cm9sMV9iaXRzOwkvLyBsYXN0IGJpdHMgc2VudCB0byBBRENfQ09OVFJPTDFfUkVHIHJlZ2lzdGVyCisJdm9sYXRpbGUgdWludDE2X3QgZmlmb19zaXplX2JpdHM7CS8vIGxhc3QgYml0cyBzZW50IHRvIEZJRk9fU0laRV9SRUcgcmVnaXN0ZXIKKwl2b2xhdGlsZSB1aW50MTZfdCBod19jb25maWdfYml0czsJLy8gbGFzdCBiaXRzIHNlbnQgdG8gSFdfQ09ORklHX1JFRyByZWdpc3RlcgorCXZvbGF0aWxlIHVpbnQxNl90IGRhY19jb250cm9sMV9iaXRzOworCXZvbGF0aWxlIHVpbnQzMl90IHBseF9jb250cm9sX2JpdHM7CS8vIGxhc3QgYml0cyB3cml0dGVuIHRvIHBseDkwODAgY29udHJvbCByZWdpc3RlcgorCXZvbGF0aWxlIHVpbnQzMl90IHBseF9pbnRjc3JfYml0czsJLy8gbGFzdCBiaXRzIHdyaXR0ZW4gdG8gcGx4IGludGVycnVwdCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIKKwl2b2xhdGlsZSBpbnQgY2FsaWJyYXRpb25fc291cmNlOwkvLyBpbmRleCBvZiBjYWxpYnJhdGlvbiBzb3VyY2UgcmVhZGFibGUgdGhyb3VnaCBhaSBjaDAKKwl2b2xhdGlsZSB1aW50OF90IGkyY19jYWxfcmFuZ2VfYml0czsJLy8gYml0cyB3cml0dGVuIHRvIGkyYyBjYWxpYnJhdGlvbi9yYW5nZSByZWdpc3RlcgorCXZvbGF0aWxlIHVuc2lnbmVkIGludCBleHRfdHJpZ19mYWxsaW5nOwkvLyBjb25maWd1cmUgZGlnaXRhbCB0cmlnZ2VycyB0byB0cmlnZ2VyIG9uIGZhbGxpbmcgZWRnZQorCS8vIHN0YXRlcyBvZiB2YXJpb3VzIGRldmljZXMgc3RvcmVkIHRvIGVuYWJsZSByZWFkLWJhY2sKKwl1bnNpZ25lZCBpbnQgYWQ4NDAyX3N0YXRlWzJdOworCXVuc2lnbmVkIGludCBjYWxkYWNfc3RhdGVbOF07CisJdm9sYXRpbGUgc2hvcnQgYWlfY21kX3J1bm5pbmc7CisJdW5zaWduZWQgaW50IGFpX2ZpZm9fc2VnbWVudF9sZW5ndGg7CisJc3RydWN0IGV4dF9jbG9ja19pbmZvIGV4dF9jbG9jazsKKwlzaG9ydCBhb19ib3VuY2VfYnVmZmVyW0RBQ19GSUZPX1NJWkVdOworfTsKKworCisvKiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaWRhczY0X3ByaXZhdGUgKnByaXYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGRldi0+cHJpdmF0ZTsKK30KKworLyoKKyAqIFRoZSBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBhdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9jYl9wY2lkYXMgPSB7CisgICAgICBkcml2ZXJfbmFtZToiY2JfcGNpZGFzNjQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmF0dGFjaCwKKyAgICAgIGRldGFjaDpkZXRhY2gsCit9OworCitzdGF0aWMgaW50IGFpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGFpX2NvbmZpZ19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGFvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGFvX3JlYWRiYWNrX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBhaV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBhb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGFvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LAorCXVuc2lnbmVkIGludCB0cmlnX251bSk7CitzdGF0aWMgaW50IGFvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgaGFuZGxlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBhb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRpb19jYWxsYmFjayhpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgZGlvX2NhbGxiYWNrXzQwMjAoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgaW50IGRpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRpb182MHh4X2NvbmZpZ19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRpb182MHh4X3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNhbGliX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYWxpYl93cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGFkODQwMl9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyB2b2lkIGFkODQwMl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgYWQ4NDAyX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZWVwcm9tX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHZvaWQgY2hlY2tfYWRjX3RpbWluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfZGl2aXNvcih1bnNpZ25lZCBpbnQgbnMsIHVuc2lnbmVkIGludCBmbGFncyk7CitzdGF0aWMgdm9pZCBpMmNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBhZGRyZXNzLAorCWNvbnN0IHVpbnQ4X3QgKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIGNhbGRhY193cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgY2FsZGFjXzg4MDBfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBhZGRyZXNzLAorCXVpbnQ4X3QgdmFsdWUpOworLy9zdGF0aWMgaW50IGRhY18xNTkwX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBkYWNfYSwgdW5zaWduZWQgaW50IGRhY19iKTsKK3N0YXRpYyBpbnQgY2FsZGFjX2kyY193cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNhbGRhY19jaGFubmVsLAorCXVuc2lnbmVkIGludCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhYm9ydF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKTsKK3N0YXRpYyB2b2lkIGRpc2FibGVfcGx4X2ludGVycnVwdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBzZXRfYWlfZmlmb19zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpOworc3RhdGljIHVuc2lnbmVkIGludCBhaV9maWZvX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBzZXRfYWlfZmlmb19zZWdtZW50X2xlbmd0aChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXMpOworc3RhdGljIHZvaWQgZGlzYWJsZV9haV9wYWNpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgZGlzYWJsZV9haV9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIGVuYWJsZV9haV9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9hb19kaXZpc29yKHVuc2lnbmVkIGludCBucywgdW5zaWduZWQgaW50IGZsYWdzKTsKK3N0YXRpYyB2b2lkIGxvYWRfYW9fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2NiX3BjaWRhcywgcGNpZGFzNjRfcGNpX3RhYmxlKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBhaV9yYW5nZV9iaXRzXzZ4eHgoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IHJhbmdlX2luZGV4KQoreworCWNvbnN0IHN0cnVjdCBjb21lZGlfa3JhbmdlICpyYW5nZSA9CisJCSZib2FyZChkZXYpLT5haV9yYW5nZV90YWJsZS0+cmFuZ2VbcmFuZ2VfaW5kZXhdOworCXVuc2lnbmVkIGludCBiaXRzID0gMDsKKworCXN3aXRjaCAocmFuZ2UtPm1heCkgeworCWNhc2UgMTAwMDAwMDA6CisJCWJpdHMgPSAweDAwMDsKKwkJYnJlYWs7CisJY2FzZSA1MDAwMDAwOgorCQliaXRzID0gMHgxMDA7CisJCWJyZWFrOworCWNhc2UgMjAwMDAwMDoKKwljYXNlIDI1MDAwMDA6CisJCWJpdHMgPSAweDIwMDsKKwkJYnJlYWs7CisJY2FzZSAxMDAwMDAwOgorCWNhc2UgMTI1MDAwMDoKKwkJYml0cyA9IDB4MzAwOworCQlicmVhazsKKwljYXNlIDUwMDAwMDoKKwkJYml0cyA9IDB4NDAwOworCQlicmVhazsKKwljYXNlIDIwMDAwMDoKKwljYXNlIDI1MDAwMDoKKwkJYml0cyA9IDB4NTAwOworCQlicmVhazsKKwljYXNlIDEwMDAwMDoKKwkJYml0cyA9IDB4NjAwOworCQlicmVhazsKKwljYXNlIDUwMDAwOgorCQliaXRzID0gMHg3MDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIGluIGFpX3JhbmdlX2JpdHNfNnh4eCIpOworCQlicmVhazsKKwl9CisJaWYgKHJhbmdlLT5taW4gPT0gMCkKKwkJYml0cyArPSAweDkwMDsKKwlyZXR1cm4gYml0czsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBod19yZXZpc2lvbihjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1aW50MTZfdCBod19zdGF0dXNfYml0cykKK3sKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQlyZXR1cm4gKGh3X3N0YXR1c19iaXRzID4+IDEzKSAmIDB4NzsKKworCXJldHVybiAoaHdfc3RhdHVzX2JpdHMgPj4gMTIpICYgMHhmOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGFjX3JhbmdlX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHZvbGF0aWxlIHVpbnQxNl90ICogYml0cywKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHJhbmdlKQoreworCXVuc2lnbmVkIGludCBjb2RlID0gYm9hcmQoZGV2KS0+YW9fcmFuZ2VfY29kZVtyYW5nZV07CisKKwlpZiAoY2hhbm5lbCA+IDEpCisJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIGJhZCBjaGFubmVsPyIpOworCWlmIChjb2RlICYgfjB4MykKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgYmFkIHJhbmdlIGNvZGU/Iik7CisKKwkqYml0cyAmPSB+KDB4MyA8PCAoMiAqIGNoYW5uZWwpKTsKKwkqYml0cyB8PSBjb2RlIDw8ICgyICogY2hhbm5lbCk7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBhb19jbWRfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBwY2lkYXM2NF9ib2FyZCAqIGJvYXJkKQoreworCXJldHVybiBib2FyZC0+YW9fbmNoYW4gJiYgYm9hcmQtPmxheW91dCAhPSBMQVlPVVRfNDAyMDsKK30KKworLy8gaW5pdGlhbGl6ZSBwbHg5MDgwIGNoaXAKK3N0YXRpYyB2b2lkIGluaXRfcGx4OTA4MChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1aW50MzJfdCBiaXRzOworCXZvaWQgKnBseF9pb2Jhc2UgPSBwcml2KGRldiktPnBseDkwODBfaW9iYXNlOworCisJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9DT05UUk9MX1JFRyk7CisKKwkvLyBwbHg5MDgwIGR1bXAKKwlERUJVR19QUklOVCgiIHBseCBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfSU5UUkNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGlkIGJpdHMgMHgleFxuIiwgcmVhZGwocGx4X2lvYmFzZSArIFBMWF9JRF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBjb250cm9sIHJlZyAweCV4XG4iLCBwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMpOworCURFQlVHX1BSSU5UKCIgcGx4IG1vZGUvYXJiaXRyYXRpb24gcmVnIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfTUFSQl9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCByZWdpb24wIHJlZyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX1JFR0lPTjBfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggcmVnaW9uMSByZWcgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9SRUdJT04xX1JFRykpOworCisJREVCVUdfUFJJTlQoIiBwbHggcmV2aXNpb24gMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9SRVZJU0lPTl9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAwIG1vZGUgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX01PREVfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMSBtb2RlIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMV9NT0RFX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgcGNpIGFkZHJlc3MgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgbG9jYWwgYWRkcmVzcyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfTE9DQUxfQUREUkVTU19SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAwIHRyYW5zZmVyIHNpemUgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX1RSQU5TRkVSX1NJWkVfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBkZXNjcmlwdG9yIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgY29tbWFuZCBzdGF0dXMgMHgleFxuIiwKKwkJcmVhZGIocGx4X2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgdGhyZXNob2xkIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9USFJFU0hPTERfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggYmlnZW5kIDB4JXhcbiIsIHJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfQklHRU5EX1JFRykpOworCisjaWZkZWYgX19CSUdfRU5ESUFOCisJYml0cyA9IEJJR0VORF9ETUEwIHwgQklHRU5EX0RNQTE7CisjZWxzZQorCWJpdHMgPSAwOworI2VuZGlmCisJd3JpdGVsKGJpdHMsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfQklHRU5EX1JFRyk7CisKKwlkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKGRldik7CisKKwlhYm9ydF9kbWEoZGV2LCAwKTsKKwlhYm9ydF9kbWEoZGV2LCAxKTsKKworCS8vIGNvbmZpZ3VyZSBkbWEwIG1vZGUKKwliaXRzID0gMDsKKwkvLyBlbmFibGUgcmVhZHkgaW5wdXQsIG5vdCBzdXJlIGlmIHRoaXMgaXMgbmVjZXNzYXJ5CisJYml0cyB8PSBQTFhfRE1BX0VOX1JFQURZSU5fQklUOworCS8vIGVuYWJsZSBidGVybSwgbm90IHN1cmUgaWYgdGhpcyBpcyBuZWNlc3NhcnkKKwliaXRzIHw9IFBMWF9FTl9CVEVSTV9CSVQ7CisJLy8gZW5hYmxlIGRtYSBjaGFpbmluZworCWJpdHMgfD0gUExYX0VOX0NIQUlOX0JJVDsKKwkvLyBlbmFibGUgaW50ZXJydXB0IG9uIGRtYSBkb25lIChwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMsIHNpbmNlIGNoYWluIG5ldmVyIGZpbmlzaGVzKQorCWJpdHMgfD0gUExYX0VOX0RNQV9ET05FX0lOVFJfQklUOworCS8vIGRvbid0IGluY3JlbWVudCBsb2NhbCBhZGRyZXNzIGR1cmluZyB0cmFuc2ZlcnMgKHdlIGFyZSB0cmFuc2ZlcnJpbmcgZnJvbSBhIGZpeGVkIGZpZm8gcmVnaXN0ZXIpCisJYml0cyB8PSBQTFhfTE9DQUxfQUREUl9DT05TVF9CSVQ7CisJLy8gcm91dGUgZG1hIGludGVycnVwdCB0byBwY2kgYnVzCisJYml0cyB8PSBQTFhfRE1BX0lOVFJfUENJX0JJVDsKKwkvLyBlbmFibGUgZGVtYW5kIG1vZGUKKwliaXRzIHw9IFBMWF9ERU1BTkRfTU9ERV9CSVQ7CisJLy8gZW5hYmxlIGxvY2FsIGJ1cnN0IG1vZGUKKwliaXRzIHw9IFBMWF9ETUFfTE9DQUxfQlVSU1RfRU5fQklUOworCS8vIDQwMjAgdXNlcyAzMiBiaXQgZG1hCisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkgeworCQliaXRzIHw9IFBMWF9MT0NBTF9CVVNfMzJfV0lERV9CSVRTOworCX0gZWxzZSB7CQkvLyBsb2NhbHNwYWNlMCBidXMgaXMgMTYgYml0cyB3aWRlCisJCWJpdHMgfD0gUExYX0xPQ0FMX0JVU18xNl9XSURFX0JJVFM7CisJfQorCXdyaXRlbChiaXRzLCBwbHhfaW9iYXNlICsgUExYX0RNQTFfTU9ERV9SRUcpOworCWlmIChhb19jbWRfaXNfc3VwcG9ydGVkKGJvYXJkKGRldikpKQorCQl3cml0ZWwoYml0cywgcGx4X2lvYmFzZSArIFBMWF9ETUEwX01PREVfUkVHKTsKKworCS8vIGVuYWJsZSBpbnRlcnJ1cHRzIG9uIHBseCA5MDgwCisJcHJpdihkZXYpLT5wbHhfaW50Y3NyX2JpdHMgfD0KKwkJSUNTX0FFUlIgfCBJQ1NfUEVSUiB8IElDU19QSUUgfCBJQ1NfUExJRSB8IElDU19QQUlFIHwgSUNTX0xJRSB8CisJCUlDU19ETUEwX0UgfCBJQ1NfRE1BMV9FOworCXdyaXRlbChwcml2KGRldiktPnBseF9pbnRjc3JfYml0cywKKwkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKTsKK30KKworLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLgorICovCitzdGF0aWMgaW50IHNldHVwX3N1YmRldmljZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdm9pZCAqZGlvXzgyNTVfaW9iYXNlOworCWludCBpOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxMCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESVRIRVIgfCBTREZfQ01EX1JFQUQ7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjBYWCkKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DT01NT04gfCBTREZfRElGRjsKKwllbHNlIGlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzY0WFgpCisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkvKiBYWFggTnVtYmVyIG9mIGlucHV0cyBpbiBkaWZmZXJlbnRpYWwgbW9kZSBpcyBpZ25vcmVkICovCisJcy0+bl9jaGFuID0gYm9hcmQoZGV2KS0+YWlfc2VfY2hhbnM7CisJcy0+bGVuX2NoYW5saXN0ID0gMHgyMDAwOworCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZChkZXYpLT5haV9iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSBib2FyZChkZXYpLT5haV9yYW5nZV90YWJsZTsKKwlzLT5pbnNuX3JlYWQgPSBhaV9yaW5zbjsKKwlzLT5pbnNuX2NvbmZpZyA9IGFpX2NvbmZpZ19pbnNuOworCXMtPmRvX2NtZCA9IGFpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gYWlfY21kdGVzdDsKKwlzLT5jYW5jZWwgPSBhaV9jYW5jZWw7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkgeworCQl1bnNpZ25lZCBpbnQgaTsKKwkJdWludDhfdCBkYXRhOworCQkvLyBzZXQgYWRjIHRvIHJlYWQgZnJvbSBpbnB1dHMgKG5vdCBpbnRlcm5hbCBjYWxpYnJhdGlvbiBzb3VyY2VzKQorCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyA9IGFkY19zcmNfNDAyMF9iaXRzKDQpOworCQkvLyBzZXQgY2hhbm5lbHMgdG8gKy01IHZvbHQgaW5wdXQgcmFuZ2VzCisJCWZvciAoaSA9IDA7IGkgPCBzLT5uX2NoYW47IGkrKykKKwkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzIHw9IGF0dGVudWF0ZV9iaXQoaSk7CisJCWRhdGEgPSBwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0czsKKwkJaTJjX3dyaXRlKGRldiwgUkFOR0VfQ0FMX0kyQ19BRERSLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwl9CisKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWlmIChib2FyZChkZXYpLT5hb19uY2hhbikgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9CisJCQlTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwKKwkJCVNERl9DTURfV1JJVEU7CisJCXMtPm5fY2hhbiA9IGJvYXJkKGRldiktPmFvX25jaGFuOworCQlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmQoZGV2KS0+YW9fYml0cykgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9IGJvYXJkKGRldiktPmFvX3JhbmdlX3RhYmxlOworCQlzLT5pbnNuX3JlYWQgPSBhb19yZWFkYmFja19pbnNuOworCQlzLT5pbnNuX3dyaXRlID0gYW9fd2luc247CisJCWlmIChhb19jbWRfaXNfc3VwcG9ydGVkKGJvYXJkKGRldikpKSB7CisJCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCQlzLT5kb19jbWR0ZXN0ID0gYW9fY21kdGVzdDsKKwkJCXMtPmRvX2NtZCA9IGFvX2NtZDsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IGJvYXJkKGRldiktPmFvX25jaGFuOworCQkJcy0+Y2FuY2VsID0gYW9fY2FuY2VsOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwkvLyBkaWdpdGFsIGlucHV0CisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjRYWCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gNDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IGRpX3JiaXRzOworCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLy8gZGlnaXRhbCBvdXRwdXQKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82NFhYKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gNDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IGRvX3diaXRzOworCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLyogODI1NSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA0OworCWlmIChib2FyZChkZXYpLT5oYXNfODI1NSkgeworCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCQlkaW9fODI1NV9pb2Jhc2UgPQorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBJODI1NV80MDIwX1JFRzsKKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBkaW9fY2FsbGJhY2tfNDAyMCwKKwkJCQkodW5zaWduZWQgbG9uZylkaW9fODI1NV9pb2Jhc2UpOworCQl9IGVsc2UgeworCQkJZGlvXzgyNTVfaW9iYXNlID0KKwkJCQlwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIERJT184MjU1X09GRlNFVDsKKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBkaW9fY2FsbGJhY2ssCisJCQkJKHVuc2lnbmVkIGxvbmcpZGlvXzgyNTVfaW9iYXNlKTsKKwkJfQorCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLy8gOCBjaGFubmVsIGRpbyBmb3IgNjB4eAorCXMgPSBkZXYtPnN1YmRldmljZXMgKyA1OworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzYwWFgpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSA4OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9jb25maWcgPSBkaW9fNjB4eF9jb25maWdfaW5zbjsKKwkJcy0+aW5zbl9iaXRzID0gZGlvXzYweHhfd2JpdHM7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyBjYWxkYWMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCXMtPm5fY2hhbiA9IDg7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkKKwkJcy0+bWF4ZGF0YSA9IDB4ZmZmOworCWVsc2UKKwkJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJcy0+aW5zbl9yZWFkID0gY2FsaWJfcmVhZF9pbnNuOworCXMtPmluc25fd3JpdGUgPSBjYWxpYl93cml0ZV9pbnNuOworCWZvciAoaSA9IDA7IGkgPCBzLT5uX2NoYW47IGkrKykKKwkJY2FsZGFjX3dyaXRlKGRldiwgaSwgcy0+bWF4ZGF0YSAvIDIpOworCisJLy8gMiBjaGFubmVsIGFkODQwMiBwb3RlbnRpb21ldGVyCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDc7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjRYWCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJcy0+bl9jaGFuID0gMjsKKwkJcy0+aW5zbl9yZWFkID0gYWQ4NDAyX3JlYWRfaW5zbjsKKwkJcy0+aW5zbl93cml0ZSA9IGFkODQwMl93cml0ZV9pbnNuOworCQlzLT5tYXhkYXRhID0gMHhmZjsKKwkJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQkJYWQ4NDAyX3dyaXRlKGRldiwgaSwgcy0+bWF4ZGF0YSAvIDIpOworCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLy9zZXJpYWwgRUVQUk9NLCBpZiBwcmVzZW50CisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDg7CisJaWYgKHJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfQ09OVFJPTF9SRUcpICYgQ1RMX0VFQ0hLKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9NRU1PUlk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJcy0+bl9jaGFuID0gMTI4OworCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQlzLT5pbnNuX3JlYWQgPSBlZXByb21fcmVhZF9pbnNuOworCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLy8gdXNlciBjb3VudGVyIHN1YmQgWFhYCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDk7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaXYoZGV2KS0+cGx4X2ludGNzcl9iaXRzID0gMDsKKwl3cml0ZWwocHJpdihkZXYpLT5wbHhfaW50Y3NyX2JpdHMsCisJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfSU5UUkNTX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfc3RjX3JlZ2lzdGVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1aW50MTZfdCBiaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIGJpdCBzaG91bGQgYmUgc2V0IGZvciA2MDI1LCBhbHRob3VnaCBkb2NzIHNheSBib2FyZHMgd2l0aCA8PSAxNiBjaGFucyBzaG91bGQgYmUgY2xlYXJlZCBYWFgKKwlpZiAoMSkKKwkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyB8PSBBRENfUVVFVUVfQ09ORklHX0JJVDsKKwl3cml0ZXcocHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT05UUk9MMV9SRUcpOworCisJLy8gNjQwMi8xNiBtYW51YWwgc2F5cyB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gMHhmZj8KKwl3cml0ZXcoMHhmZiwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19TQU1QTEVfSU5URVJWQUxfVVBQRVJfUkVHKTsKKworCWJpdHMgPSBTTE9XX0RBQ19CSVQgfCBETUFfQ0hfU0VMRUNUX0JJVDsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQliaXRzIHw9IElOVEVSTkFMX0NMT0NLXzQwMjBfQklUUzsKKwlwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzIHw9IGJpdHM7CisJd3JpdGV3KHByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBIV19DT05GSUdfUkVHKTsKKworCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFRX1NZTkNfUkVHKTsKKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gc2V0IGZpZm9zIHRvIG1heGltdW0gc2l6ZQorCXByaXYoZGV2KS0+Zmlmb19zaXplX2JpdHMgfD0gREFDX0ZJRk9fQklUUzsKKwlzZXRfYWlfZmlmb19zZWdtZW50X2xlbmd0aChkZXYsCisJCWJvYXJkKGRldiktPmFpX2ZpZm8tPm1heF9zZWdtZW50X2xlbmd0aCk7CisKKwlwcml2KGRldiktPmRhY19jb250cm9sMV9iaXRzID0gREFDX09VVFBVVF9FTkFCTEVfQklUOworCXByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cyA9CS8qIEVOX0RBQ19JTlRSX1NSQ19CSVQgfCBEQUNfSU5UUl9RRU1QVFlfQklUUyB8ICovCisJCUVOX0RBQ19ET05FX0lOVFJfQklUIHwgRU5fREFDX1VOREVSUlVOX0JJVDsKKwl3cml0ZXcocHJpdihkZXYpLT5pbnRyX2VuYWJsZV9iaXRzLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgSU5UUl9FTkFCTEVfUkVHKTsKKworCWRpc2FibGVfYWlfcGFjaW5nKGRldik7Cit9OworCitpbnQgYWxsb2NfYW5kX2luaXRfZG1hX21lbWJlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisKKwkvLyBhbG9jYXRlIHBjaSBkbWEgYnVmZmVycworCWZvciAoaSA9IDA7IGkgPCBhaV9kbWFfcmluZ19jb3VudChib2FyZChkZXYpKTsgaSsrKSB7CisJCXByaXYoZGV2KS0+YWlfYnVmZmVyW2ldID0KKwkJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LCBETUFfQlVGRkVSX1NJWkUsCisJCQkmcHJpdihkZXYpLT5haV9idWZmZXJfYnVzX2FkZHJbaV0pOworCQlpZiAocHJpdihkZXYpLT5haV9idWZmZXJbaV0gPT0gTlVMTCkgeworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IEFPX0RNQV9SSU5HX0NPVU5UOyBpKyspIHsKKwkJaWYgKGFvX2NtZF9pc19zdXBwb3J0ZWQoYm9hcmQoZGV2KSkpIHsKKwkJCXByaXYoZGV2KS0+YW9fYnVmZmVyW2ldID0KKwkJCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2KGRldiktPmh3X2RldiwKKwkJCQlETUFfQlVGRkVSX1NJWkUsCisJCQkJJnByaXYoZGV2KS0+YW9fYnVmZmVyX2J1c19hZGRyW2ldKTsKKwkJCWlmIChwcml2KGRldiktPmFvX2J1ZmZlcltpXSA9PSBOVUxMKSB7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKwl9CisJLy8gYWxsb2NhdGUgZG1hIGRlc2NyaXB0b3JzCisJcHJpdihkZXYpLT5haV9kbWFfZGVzYyA9CisJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQlzaXplb2Yoc3RydWN0IHBseF9kbWFfZGVzYykgKiBhaV9kbWFfcmluZ19jb3VudChib2FyZChkZXYpKSwKKwkJJnByaXYoZGV2KS0+YWlfZG1hX2Rlc2NfYnVzX2FkZHIpOworCWlmIChwcml2KGRldiktPmFpX2RtYV9kZXNjID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCURFQlVHX1BSSU5UKCJhaSBkbWEgZGVzY3JpcHRvcnMgc3RhcnQgYXQgYnVzIGFkZHIgMHgleFxuIiwKKwkJcHJpdihkZXYpLT5haV9kbWFfZGVzY19idXNfYWRkcik7CisJaWYgKGFvX2NtZF9pc19zdXBwb3J0ZWQoYm9hcmQoZGV2KSkpIHsKKwkJcHJpdihkZXYpLT5hb19kbWFfZGVzYyA9CisJCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2KGRldiktPmh3X2RldiwKKwkJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqIEFPX0RNQV9SSU5HX0NPVU5ULAorCQkJJnByaXYoZGV2KS0+YW9fZG1hX2Rlc2NfYnVzX2FkZHIpOworCQlpZiAocHJpdihkZXYpLT5hb19kbWFfZGVzYyA9PSBOVUxMKSB7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlERUJVR19QUklOVCgiYW8gZG1hIGRlc2NyaXB0b3JzIHN0YXJ0IGF0IGJ1cyBhZGRyIDB4JXhcbiIsCisJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjX2J1c19hZGRyKTsKKwl9CisJLy8gaW5pdGlhbGl6ZSBkbWEgZGVzY3JpcHRvcnMKKwlmb3IgKGkgPSAwOyBpIDwgYWlfZG1hX3JpbmdfY291bnQoYm9hcmQoZGV2KSk7IGkrKykgeworCQlwcml2KGRldiktPmFpX2RtYV9kZXNjW2ldLnBjaV9zdGFydF9hZGRyID0KKwkJCWNwdV90b19sZTMyKHByaXYoZGV2KS0+YWlfYnVmZmVyX2J1c19hZGRyW2ldKTsKKwkJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkKKwkJCXByaXYoZGV2KS0+YWlfZG1hX2Rlc2NbaV0ubG9jYWxfc3RhcnRfYWRkciA9CisJCQkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT5sb2NhbDFfaW9iYXNlICsKKwkJCQlBRENfRklGT19SRUcpOworCQllbHNlCisJCQlwcml2KGRldiktPmFpX2RtYV9kZXNjW2ldLmxvY2FsX3N0YXJ0X2FkZHIgPQorCQkJCWNwdV90b19sZTMyKHByaXYoZGV2KS0+bG9jYWwwX2lvYmFzZSArCisJCQkJQURDX0ZJRk9fUkVHKTsKKwkJcHJpdihkZXYpLT5haV9kbWFfZGVzY1tpXS50cmFuc2Zlcl9zaXplID0gY3B1X3RvX2xlMzIoMCk7CisJCXByaXYoZGV2KS0+YWlfZG1hX2Rlc2NbaV0ubmV4dCA9CisJCQljcHVfdG9fbGUzMigocHJpdihkZXYpLT5haV9kbWFfZGVzY19idXNfYWRkciArICgoaSArCisJCQkJCQkxKSAlCisJCQkJCWFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpKSAqCisJCQkJc2l6ZW9mKHByaXYoZGV2KS0+CisJCQkJCWFpX2RtYV9kZXNjWzBdKSkgfCBQTFhfREVTQ19JTl9QQ0lfQklUIHwKKwkJCVBMWF9JTlRSX1RFUk1fQ09VTlQgfCBQTFhfWEZFUl9MT0NBTF9UT19QQ0kpOworCX0KKwlpZiAoYW9fY21kX2lzX3N1cHBvcnRlZChib2FyZChkZXYpKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQU9fRE1BX1JJTkdfQ09VTlQ7IGkrKykgeworCQkJcHJpdihkZXYpLT5hb19kbWFfZGVzY1tpXS5wY2lfc3RhcnRfYWRkciA9CisJCQkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT5hb19idWZmZXJfYnVzX2FkZHJbaV0pOworCQkJcHJpdihkZXYpLT5hb19kbWFfZGVzY1tpXS5sb2NhbF9zdGFydF9hZGRyID0KKwkJCQljcHVfdG9fbGUzMihwcml2KGRldiktPmxvY2FsMF9pb2Jhc2UgKworCQkJCURBQ19GSUZPX1JFRyk7CisJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjW2ldLnRyYW5zZmVyX3NpemUgPQorCQkJCWNwdV90b19sZTMyKDApOworCQkJcHJpdihkZXYpLT5hb19kbWFfZGVzY1tpXS5uZXh0ID0KKwkJCQljcHVfdG9fbGUzMigocHJpdihkZXYpLT5hb19kbWFfZGVzY19idXNfYWRkciArCisJCQkJCSgoaSArIDEpICUgKEFPX0RNQV9SSU5HX0NPVU5UKSkgKgorCQkJCQlzaXplb2YocHJpdihkZXYpLT4KKwkJCQkJCWFvX2RtYV9kZXNjWzBdKSkgfAorCQkJCVBMWF9ERVNDX0lOX1BDSV9CSVQgfCBQTFhfSU5UUl9URVJNX0NPVU5UKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdhcm5fZXh0ZXJuYWxfcXVldWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJY29tZWRpX2Vycm9yKGRldiwKKwkJIkFPIGNvbW1hbmQgYW5kIEFJIGV4dGVybmFsIGNoYW5uZWwgcXVldWUgY2Fubm90IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkuIik7CisJY29tZWRpX2Vycm9yKGRldiwKKwkJIlVzZSBpbnRlcm5hbCBBSSBjaGFubmVsIHF1ZXVlIChjaGFubmVscyBtdXN0IGJlIGNvbnNlY3V0aXZlIGFuZCB1c2Ugc2FtZSByYW5nZS9hcmVmKSIpOworfQorCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuCisgKi8KK3N0YXRpYyBpbnQgYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCWludCBpbmRleDsKKwl1aW50MzJfdCBsb2NhbF9yYW5nZSwgbG9jYWxfZGVjb2RlOworCWludCByZXR2YWw7CisKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2lkYXM2NFxuIiwgZGV2LT5taW5vcik7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4KKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2lkYXM2NF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCisgKi8KKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8vIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPworCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUykKKwkJCWNvbnRpbnVlOworCQkvLyBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9ib2FyZHMoKTsgaW5kZXgrKykgeworCQkJaWYgKHBjaWRhczY0X2JvYXJkc1tpbmRleF0uZGV2aWNlX2lkICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCXByaXYoZGV2KS0+aHdfZGV2ID0gcGNpZGV2OworCQkJZGV2LT5ib2FyZF9wdHIgPSBwY2lkYXM2NF9ib2FyZHMgKyBpbmRleDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChkZXYtPmJvYXJkX3B0cikKKwkJCWJyZWFrOworCX0KKworCWlmIChkZXYtPmJvYXJkX3B0ciA9PSBOVUxMKSB7CisJCXByaW50aygiTm8gc3VwcG9ydGVkIENvbXB1dGVyQm9hcmRzL01lYXN1cmVtZW50Q29tcHV0aW5nIGNhcmQgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwcmludGsoIkZvdW5kICVzIG9uIGJ1cyAlaSwgc2xvdCAlaVxuIiwgYm9hcmQoZGV2KS0+bmFtZSwKKwkJcGNpZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QocGNpZGV2LT5kZXZmbikpOworCisJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgZHJpdmVyX2NiX3BjaWRhcy5kcml2ZXJfbmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIiBmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCisJLy9Jbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZQorCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkKGRldiktPm5hbWU7CisKKwlwcml2KGRldiktPnBseDkwODBfcGh5c19pb2Jhc2UgPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCBQTFg5MDgwX0JBRERSSU5ERVgpOworCXByaXYoZGV2KS0+bWFpbl9waHlzX2lvYmFzZSA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIE1BSU5fQkFERFJJTkRFWCk7CisJcHJpdihkZXYpLT5kaW9fY291bnRlcl9waHlzX2lvYmFzZSA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIERJT19DT1VOVEVSX0JBRERSSU5ERVgpOworCisJLy8gcmVtYXAsIHdvbid0IHdvcmsgd2l0aCAyLjAga2VybmVscyBidXQgd2hvIGNhcmVzCisJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSA9IGlvcmVtYXAocHJpdihkZXYpLT5wbHg5MDgwX3BoeXNfaW9iYXNlLAorCQlwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgUExYOTA4MF9CQUREUklOREVYKSk7CisJcHJpdihkZXYpLT5tYWluX2lvYmFzZSA9IGlvcmVtYXAocHJpdihkZXYpLT5tYWluX3BoeXNfaW9iYXNlLAorCQlwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgTUFJTl9CQUREUklOREVYKSk7CisJcHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UgPQorCQlpb3JlbWFwKHByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfcGh5c19pb2Jhc2UsCisJCXBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBESU9fQ09VTlRFUl9CQUREUklOREVYKSk7CisKKwlpZiAoIXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgfHwgIXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UKKwkJfHwgIXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlKSB7CisJCXByaW50aygiIGZhaWxlZCB0byByZW1hcCBpbyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlERUJVR19QUklOVCgiIHBseDkwODAgcmVtYXBwZWQgdG8gMHglcFxuIiwgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSk7CisJREVCVUdfUFJJTlQoIiBtYWluIHJlbWFwcGVkIHRvIDB4JXBcbiIsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UpOworCURFQlVHX1BSSU5UKCIgZGlvY291bnRlciByZW1hcHBlZCB0byAweCVwXG4iLAorCQlwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSk7CisKKwkvLyBmaWd1cmUgb3V0IHdoYXQgbG9jYWwgYWRkcmVzc2VzIGFyZQorCWxvY2FsX3JhbmdlID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCVBMWF9MQVMwUk5HX1JFRykgJiBMUk5HX01FTV9NQVNLOworCWxvY2FsX2RlY29kZSA9CisJCXJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKworCQlQTFhfTEFTME1BUF9SRUcpICYgbG9jYWxfcmFuZ2UgJiBMTUFQX01FTV9NQVNLOworCXByaXYoZGV2KS0+bG9jYWwwX2lvYmFzZSA9CisJCSgodWludDMyX3QpIHByaXYoZGV2KS0+CisJCW1haW5fcGh5c19pb2Jhc2UgJiB+bG9jYWxfcmFuZ2UpIHwgbG9jYWxfZGVjb2RlOworCWxvY2FsX3JhbmdlID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCVBMWF9MQVMxUk5HX1JFRykgJiBMUk5HX01FTV9NQVNLOworCWxvY2FsX2RlY29kZSA9CisJCXJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKworCQlQTFhfTEFTMU1BUF9SRUcpICYgbG9jYWxfcmFuZ2UgJiBMTUFQX01FTV9NQVNLOworCXByaXYoZGV2KS0+bG9jYWwxX2lvYmFzZSA9CisJCSgodWludDMyX3QpIHByaXYoZGV2KS0+CisJCWRpb19jb3VudGVyX3BoeXNfaW9iYXNlICYgfmxvY2FsX3JhbmdlKSB8IGxvY2FsX2RlY29kZTsKKworCURFQlVHX1BSSU5UKCIgbG9jYWwgMCBpbyBhZGRyIDB4JXhcbiIsIHByaXYoZGV2KS0+bG9jYWwwX2lvYmFzZSk7CisJREVCVUdfUFJJTlQoIiBsb2NhbCAxIGlvIGFkZHIgMHgleFxuIiwgcHJpdihkZXYpLT5sb2NhbDFfaW9iYXNlKTsKKworCXJldHZhbCA9IGFsbG9jX2FuZF9pbml0X2RtYV9tZW1iZXJzKGRldik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlwcml2KGRldiktPmh3X3JldmlzaW9uID0KKwkJaHdfcmV2aXNpb24oZGV2LCByZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfU1RBVFVTX1JFRykpOworCXByaW50aygiIHN0YyBoYXJkd2FyZSByZXZpc2lvbiAlaVxuIiwgcHJpdihkZXYpLT5od19yZXZpc2lvbik7CisJaW5pdF9wbHg5MDgwKGRldik7CisJaW5pdF9zdGNfcmVnaXN0ZXJzKGRldik7CisJLy8gZ2V0IGlycQorCWlmIChjb21lZGlfcmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsIGhhbmRsZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJImNiX3BjaWRhczY0IiwgZGV2KSkgeworCQlwcmludGsoIiB1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBwY2lkZXYtPmlycSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYtPmlycSA9IHBjaWRldi0+aXJxOworCXByaW50aygiIGlycSAldVxuIiwgZGV2LT5pcnEpOworCisJcmV0dmFsID0gc2V0dXBfc3ViZGV2aWNlcyhkZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGFzOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKHByaXYoZGV2KSkgeworCQlpZiAocHJpdihkZXYpLT5od19kZXYpIHsKKwkJCWlmIChwcml2KGRldiktPnBseDkwODBfaW9iYXNlKSB7CisJCQkJZGlzYWJsZV9wbHhfaW50ZXJydXB0cyhkZXYpOworCQkJCWlvdW5tYXAoKHZvaWQgKilwcml2KGRldiktPnBseDkwODBfaW9iYXNlKTsKKwkJCX0KKwkJCWlmIChwcml2KGRldiktPm1haW5faW9iYXNlKQorCQkJCWlvdW5tYXAoKHZvaWQgKilwcml2KGRldiktPm1haW5faW9iYXNlKTsKKwkJCWlmIChwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSkKKwkJCQlpb3VubWFwKCh2b2lkICopcHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UpOworCQkJLy8gZnJlZSBwY2kgZG1hIGJ1ZmZlcnMKKwkJCWZvciAoaSA9IDA7IGkgPCBhaV9kbWFfcmluZ19jb3VudChib2FyZChkZXYpKTsgaSsrKSB7CisJCQkJaWYgKHByaXYoZGV2KS0+YWlfYnVmZmVyW2ldKQorCQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJCQkJRE1BX0JVRkZFUl9TSVpFLAorCQkJCQkJcHJpdihkZXYpLT5haV9idWZmZXJbaV0sCisJCQkJCQlwcml2KGRldiktPgorCQkJCQkJYWlfYnVmZmVyX2J1c19hZGRyW2ldKTsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBBT19ETUFfUklOR19DT1VOVDsgaSsrKSB7CisJCQkJaWYgKHByaXYoZGV2KS0+YW9fYnVmZmVyW2ldKQorCQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJCQkJRE1BX0JVRkZFUl9TSVpFLAorCQkJCQkJcHJpdihkZXYpLT5hb19idWZmZXJbaV0sCisJCQkJCQlwcml2KGRldiktPgorCQkJCQkJYW9fYnVmZmVyX2J1c19hZGRyW2ldKTsKKwkJCX0KKwkJCS8vIGZyZWUgZG1hIGRlc2NyaXB0b3JzCisJCQlpZiAocHJpdihkZXYpLT5haV9kbWFfZGVzYykKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IHBseF9kbWFfZGVzYykgKgorCQkJCQlhaV9kbWFfcmluZ19jb3VudChib2FyZChkZXYpKSwKKwkJCQkJcHJpdihkZXYpLT5haV9kbWFfZGVzYywKKwkJCQkJcHJpdihkZXYpLT5haV9kbWFfZGVzY19idXNfYWRkcik7CisJCQlpZiAocHJpdihkZXYpLT5hb19kbWFfZGVzYykKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IHBseF9kbWFfZGVzYykgKgorCQkJCQlBT19ETUFfUklOR19DT1VOVCwKKwkJCQkJcHJpdihkZXYpLT5hb19kbWFfZGVzYywKKwkJCQkJcHJpdihkZXYpLT5hb19kbWFfZGVzY19idXNfYWRkcik7CisJCQlpZiAocHJpdihkZXYpLT5tYWluX3BoeXNfaW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKHByaXYoZGV2KS0+aHdfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KHByaXYoZGV2KS0+aHdfZGV2KTsKKwkJfQorCX0KKwlpZiAoZGV2LT5zdWJkZXZpY2VzKQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgNCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdHMgPSAwLCBuLCBpOworCXVuc2lnbmVkIGludCBjaGFubmVsLCByYW5nZSwgYXJlZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDsKKworCURFQlVHX1BSSU5UKCJjaGFuc3BlYyAweCV4XG4iLCBpbnNuLT5jaGFuc3BlYyk7CisJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWFyZWYgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKworCS8vIGRpc2FibGUgY2FyZCdzIGFuYWxvZyBpbnB1dCBpbnRlcnJ1cHQgc291cmNlcyBhbmQgcGFjaW5nCisJLy8gNDAyMCBnZW5lcmF0ZXMgZGFjIGRvbmUgaW50ZXJydXB0cyBldmVuIHRob3VnaCB0aGV5IGFyZSBkaXNhYmxlZAorCWRpc2FibGVfYWlfcGFjaW5nKGRldik7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfRklMVEVSKQorCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzIHw9IEFEQ19ESVRIRVJfQklUOworCWVsc2UKKwkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyAmPSB+QURDX0RJVEhFUl9CSVQ7CisJd3JpdGV3KHByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09OVFJPTDFfUkVHKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGJvYXJkKGRldiktPmxheW91dCAhPSBMQVlPVVRfNDAyMCkgeworCQkvLyB1c2UgaW50ZXJuYWwgcXVldWUKKwkJcHJpdihkZXYpLT5od19jb25maWdfYml0cyAmPSB+RVhUX1FVRVVFX0JJVDsKKwkJd3JpdGV3KHByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfQ09ORklHX1JFRyk7CisKKwkJLy8gQUxUX1NPVVJDRSBpcyBpbnRlcm5hbCBjYWxpYnJhdGlvbiByZWZlcmVuY2UKKwkJaWYgKGluc24tPmNoYW5zcGVjICYgQ1JfQUxUX1NPVVJDRSkgeworCQkJdW5zaWduZWQgaW50IGNhbF9lbl9iaXQ7CisKKwkJCURFQlVHX1BSSU5UKCJyZWFkaW5nIGNhbGlicmF0aW9uIHNvdXJjZVxuIik7CisJCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82MFhYKQorCQkJCWNhbF9lbl9iaXQgPSBDQUxfRU5fNjBYWF9CSVQ7CisJCQllbHNlCisJCQkJY2FsX2VuX2JpdCA9IENBTF9FTl82NFhYX0JJVDsKKwkJCS8vIHNlbGVjdCBpbnRlcm5hbCByZWZlcmVuY2Ugc291cmNlIHRvIGNvbm5lY3QgdG8gY2hhbm5lbCAwCisJCQl3cml0ZXcoY2FsX2VuX2JpdCB8IGFkY19zcmNfYml0cyhwcml2KGRldiktPgorCQkJCQljYWxpYnJhdGlvbl9zb3VyY2UpLAorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCQl9IGVsc2UgeworCQkJLy8gbWFrZSBzdXJlIGludGVybmFsIGNhbGlicmF0aW9uIHNvdXJjZSBpcyB0dXJuZWQgb2ZmCisJCQl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJCX0KKwkJLy8gbG9hZCBpbnRlcm5hbCBxdWV1ZQorCQliaXRzID0gMDsKKwkJLy8gc2V0IGdhaW4KKwkJYml0cyB8PSBhaV9yYW5nZV9iaXRzXzZ4eHgoZGV2LCBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykpOworCQkvLyBzZXQgc2luZ2xlLWVuZGVkIC8gZGlmZmVyZW50aWFsCisJCWJpdHMgfD0gc2VfZGlmZl9iaXRfNnh4eChkZXYsIGFyZWYgPT0gQVJFRl9ESUZGKTsKKwkJaWYgKGFyZWYgPT0gQVJFRl9DT01NT04pCisJCQliaXRzIHw9IEFEQ19DT01NT05fQklUOworCQliaXRzIHw9IGFkY19jaGFuX2JpdHMoY2hhbm5lbCk7CisJCS8vIHNldCBzdG9wIGNoYW5uZWwKKwkJd3JpdGV3KGFkY19jaGFuX2JpdHMoY2hhbm5lbCksCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1FVRVVFX0hJR0hfUkVHKTsKKwkJLy8gc2V0IHN0YXJ0IGNoYW5uZWwsIGFuZCByZXN0IG9mIHNldHRpbmdzCisJCXdyaXRldyhiaXRzLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1FVRVVFX0xPQURfUkVHKTsKKwl9IGVsc2UgeworCQl1aW50OF90IG9sZF9jYWxfcmFuZ2VfYml0cyA9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzOworCisJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzICY9IH5BRENfU1JDXzQwMjBfTUFTSzsKKwkJaWYgKGluc24tPmNoYW5zcGVjICYgQ1JfQUxUX1NPVVJDRSkgeworCQkJREVCVUdfUFJJTlQoInJlYWRpbmcgY2FsaWJyYXRpb24gc291cmNlXG4iKTsKKwkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzIHw9CisJCQkJYWRjX3NyY180MDIwX2JpdHMocHJpdihkZXYpLT4KKwkJCQljYWxpYnJhdGlvbl9zb3VyY2UpOworCQl9IGVsc2UgewkvL3NlbGVjdCBCTkMgaW5wdXRzCisJCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyB8PSBhZGNfc3JjXzQwMjBfYml0cyg0KTsKKwkJfQorCQkvLyBzZWxlY3QgcmFuZ2UKKwkJaWYgKHJhbmdlID09IDApCisJCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyB8PSBhdHRlbnVhdGVfYml0KGNoYW5uZWwpOworCQllbHNlCisJCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyAmPQorCQkJCX5hdHRlbnVhdGVfYml0KGNoYW5uZWwpOworCQkvLyB1cGRhdGUgY2FsaWJyYXRpb24vcmFuZ2UgaTJjIHJlZ2lzdGVyIG9ubHkgaWYgbmVjZXNzYXJ5LCBhcyBpdCBpcyB2ZXJ5IHNsb3cKKwkJaWYgKG9sZF9jYWxfcmFuZ2VfYml0cyAhPSBwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cykgeworCQkJdWludDhfdCBpMmNfZGF0YSA9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzOworCQkJaTJjX3dyaXRlKGRldiwgUkFOR0VfQ0FMX0kyQ19BRERSLCAmaTJjX2RhdGEsCisJCQkJc2l6ZW9mKGkyY19kYXRhKSk7CisJCX0KKworCQkvKiA0MDIwIG1hbnVhbCBhc2tzIHRoYXQgc2FtcGxlIGludGVydmFsIHJlZ2lzdGVyIHRvIGJlIHNldCBiZWZvcmUgd3JpdGluZyB0byBjb252ZXJ0IHJlZ2lzdGVyLgorCQkgKiBVc2luZyBzb21ld2hhdCBhcmJpdHJhcnkgc2V0dGluZyBvZiA0IG1hc3RlciBjbG9jayB0aWNrcyA9IDAuMSB1c2VjICovCisJCXdyaXRldygwLAorCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19TQU1QTEVfSU5URVJWQUxfVVBQRVJfUkVHKTsKKwkJd3JpdGV3KDIsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1NBTVBMRV9JTlRFUlZBTF9MT1dFUl9SRUcpOworCX0KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKworCQkvLyBjbGVhciBhZGMgYnVmZmVyIChpbnNpZGUgbG9vcCBmb3IgNDAyMCBzYWtlKQorCQl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19CVUZGRVJfQ0xFQVJfUkVHKTsKKworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24sIGJpdHMgc2VudCBvbmx5IG1hdHRlciBmb3IgNDAyMCAqLworCQl3cml0ZXcoYWRjX2NvbnZlcnRfY2hhbl80MDIwX2JpdHMoQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpLAorCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT05WRVJUX1JFRyk7CisKKwkJLy8gd2FpdCBmb3IgZGF0YQorCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQliaXRzID0gcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEhXX1NUQVRVU19SRUcpOworCQkJREVCVUdfUFJJTlQoIiBwaXBlIGJpdHMgMHgleFxuIiwgcGlwZV9mdWxsX2JpdHMoYml0cykpOworCQkJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkgeworCQkJCWlmIChyZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsKKwkJCQkJCUFEQ19XUklURV9QTlRSX1JFRykpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAocGlwZV9mdWxsX2JpdHMoYml0cykpCisJCQkJCWJyZWFrOworCQkJfQorCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCQlERUJVR19QUklOVCgiIGxvb3BlZCAlaSB0aW1lcyB3YWl0aW5nIGZvciBkYXRhXG4iLCBpKTsKKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgIiBhbmFsb2cgaW5wdXQgcmVhZCBpbnNuIHRpbWVkIG91dCIpOworCQkJcnRfcHJpbnRrKCIgc3RhdHVzIDB4JXhcbiIsIGJpdHMpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQkJZGF0YVtuXSA9CisJCQkJcmVhZGwocHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UgKworCQkJCUFEQ19GSUZPX1JFRykgJiAweGZmZmY7CisJCWVsc2UKKwkJCWRhdGFbbl0gPQorCQkJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBQSVBFMV9SRUFEX1JFRyk7CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2NhbGlicmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgc291cmNlID0gZGF0YVsxXTsKKwlpbnQgbnVtX2NhbGlicmF0aW9uX3NvdXJjZXM7CisKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82MFhYKQorCQludW1fY2FsaWJyYXRpb25fc291cmNlcyA9IDE2OworCWVsc2UKKwkJbnVtX2NhbGlicmF0aW9uX3NvdXJjZXMgPSA4OworCWlmIChzb3VyY2UgPj0gbnVtX2NhbGlicmF0aW9uX3NvdXJjZXMpIHsKKwkJcHJpbnRrKCJpbnZhbGlkIGNhbGlicmF0aW9uIHNvdXJjZTogJWlcbiIsIHNvdXJjZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCURFQlVHX1BSSU5UKCJzZXR0aW5nIGNhbGlicmF0aW9uIHNvdXJjZSB0byAlaVxuIiwgc291cmNlKTsKKwlwcml2KGRldiktPmNhbGlicmF0aW9uX3NvdXJjZSA9IHNvdXJjZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFpX2NvbmZpZ19ibG9ja19zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBmaWZvX3NpemU7CisJY29uc3Qgc3RydWN0IGh3X2ZpZm9faW5mbyAqY29uc3QgZmlmbyA9IGJvYXJkKGRldiktPmFpX2ZpZm87CisJdW5zaWduZWQgaW50IGJsb2NrX3NpemUsIHJlcXVlc3RlZF9ibG9ja19zaXplOworCWludCByZXR2YWw7CisKKwlyZXF1ZXN0ZWRfYmxvY2tfc2l6ZSA9IGRhdGFbMV07CisKKwlpZiAocmVxdWVzdGVkX2Jsb2NrX3NpemUpIHsKKwkJZmlmb19zaXplID0KKwkJCXJlcXVlc3RlZF9ibG9ja19zaXplICogZmlmby0+bnVtX3NlZ21lbnRzIC8KKwkJCWJ5dGVzX2luX3NhbXBsZTsKKworCQlyZXR2YWwgPSBzZXRfYWlfZmlmb19zaXplKGRldiwgZmlmb19zaXplKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcmV0dmFsOworCisJfQorCisJYmxvY2tfc2l6ZSA9IGFpX2ZpZm9fc2l6ZShkZXYpIC8gZmlmby0+bnVtX3NlZ21lbnRzICogYnl0ZXNfaW5fc2FtcGxlOworCisJZGF0YVsxXSA9IGJsb2NrX3NpemU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhaV9jb25maWdfbWFzdGVyX2Nsb2NrXzQwMjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGRpdmlzb3IgPSBkYXRhWzRdOworCWludCByZXR2YWwgPSAwOworCisJaWYgKGRpdmlzb3IgPCAyKSB7CisJCWRpdmlzb3IgPSAyOworCQlyZXR2YWwgPSAtRUFHQUlOOworCX0KKworCXN3aXRjaCAoZGF0YVsxXSkgeworCWNhc2UgQ09NRURJX0VWX1NDQU5fQkVHSU46CisJCXByaXYoZGV2KS0+ZXh0X2Nsb2NrLmRpdmlzb3IgPSBkaXZpc29yOworCQlwcml2KGRldiktPmV4dF9jbG9jay5jaGFuc3BlYyA9IGRhdGFbMl07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlkYXRhWzRdID0gZGl2aXNvcjsKKworCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiA1OworfQorCisvLyBYWFggY291bGQgYWRkIHN1cHBvcnQgZm9yIDYweHggc2VyaWVzCitzdGF0aWMgaW50IGFpX2NvbmZpZ19tYXN0ZXJfY2xvY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlzd2l0Y2ggKGJvYXJkKGRldiktPmxheW91dCkgeworCWNhc2UgTEFZT1VUXzQwMjA6CisJCXJldHVybiBhaV9jb25maWdfbWFzdGVyX2Nsb2NrXzQwMjAoZGV2LCBkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGFpX2NvbmZpZ19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaWQgPSBkYXRhWzBdOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgSU5TTl9DT05GSUdfQUxUX1NPVVJDRToKKwkJcmV0dXJuIGFpX2NvbmZpZ19jYWxpYnJhdGlvbl9zb3VyY2UoZGV2LCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19CTE9DS19TSVpFOgorCQlyZXR1cm4gYWlfY29uZmlnX2Jsb2NrX3NpemUoZGV2LCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19USU1FUl8xOgorCQlyZXR1cm4gYWlfY29uZmlnX21hc3Rlcl9jbG9jayhkZXYsIGRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGFpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCXVuc2lnbmVkIGludCB0bXBfYXJnLCB0bXBfYXJnMjsKKwlpbnQgaTsKKwlpbnQgYXJlZjsKKwl1bnNpZ25lZCBpbnQgdHJpZ2dlcnM7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCXRyaWdnZXJzID0gVFJJR19USU1FUjsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQl0cmlnZ2VycyB8PSBUUklHX09USEVSOworCWVsc2UKKwkJdHJpZ2dlcnMgfD0gVFJJR19GT0xMT1c7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSB0cmlnZ2VyczsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwl0cmlnZ2VycyA9IFRSSUdfVElNRVI7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkKKwkJdHJpZ2dlcnMgfD0gVFJJR19OT1c7CisJZWxzZQorCQl0cmlnZ2VycyB8PSBUUklHX0VYVDsKKwljbWQtPmNvbnZlcnRfc3JjICY9IHRyaWdnZXJzOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19FWFQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8vIHVuaXF1ZW5lc3MgY2hlY2sKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX09USEVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJLy8gY29tcGF0aWJpbGl0eSBjaGVjaworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUICYmIGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJgorCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZykgeworCQkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJCWVycisrOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCBib2FyZChkZXYpLT5haV9zcGVlZCkgeworCQkJCWNtZC0+Y29udmVydF9hcmcgPSBib2FyZChkZXYpLT5haV9zcGVlZDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJCQkvLyBpZiBzY2FucyBhcmUgdGltZWQgZmFzdGVyIHRoYW4gY29udmVyc2lvbiByYXRlIGFsbG93cworCQkJCWlmIChjbWQtPmNvbnZlcnRfYXJnICogY21kLT5jaGFubGlzdF9sZW4gPgorCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnKSB7CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCQkJY21kLT5jb252ZXJ0X2FyZyAqCisJCQkJCQljbWQtPmNoYW5saXN0X2xlbjsKKwkJCQkJZXJyKys7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJc3dpdGNoIChjbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0VYVDoKKwkJYnJlYWs7CisJY2FzZSBUUklHX0NPVU5UOgorCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcF9hcmcgPSBjbWQtPmNvbnZlcnRfYXJnOworCQl0bXBfYXJnMiA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWNoZWNrX2FkY190aW1pbmcoZGV2LCBjbWQpOworCQlpZiAodG1wX2FyZyAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJCWlmICh0bXBfYXJnMiAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvLyBtYWtlIHN1cmUgdXNlciBpcyBkb2Vzbid0IGNoYW5nZSBhbmFsb2cgcmVmZXJlbmNlIG1pZCBjaGFubGlzdAorCWlmIChjbWQtPmNoYW5saXN0KSB7CisJCWFyZWYgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKGFyZWYgIT0gQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJhbGwgZWxlbWVudHMgaW4gY2hhbmxpc3QgbXVzdCB1c2UgdGhlIHNhbWUgYW5hbG9nIHJlZmVyZW5jZSIpOworCQkJCWVycisrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8vIGNoZWNrIDQwMjAgY2hhbmxpc3QKKwkJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkgeworCQkJdW5zaWduZWQgaW50IGZpcnN0X2NoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPQorCQkJCQlmaXJzdF9jaGFubmVsICsgaSkgeworCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJImNoYW5saXN0IG11c3QgdXNlIGNvbnNlY3V0aXZlIGNoYW5uZWxzIik7CisJCQkJCWVycisrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMykgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJjaGFubGlzdCBjYW5ub3QgYmUgMyBjaGFubmVscyBsb25nLCB1c2UgMSwgMiwgb3IgNCBjaGFubmVscyIpOworCQkJCWVycisrOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2VfaHdfc2FtcGxlX2NvdW50ZXIoc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisvLyBkaXNhYmxlIGZvciBub3cgdW50aWwgSSB3b3JrIG91dCBhIHJhY2UKKwlyZXR1cm4gMDsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX2FyZyA8PSBtYXhfY291bnRlcl92YWx1ZSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc2FtcGxlX2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCS8vIHNldCBzb2Z0d2FyZSBjb3VudAorCQlwcml2KGRldiktPmFpX2NvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCX0KKwkvLyBsb2FkIGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlcgorCWlmICh1c2VfaHdfc2FtcGxlX2NvdW50ZXIoY21kKSkgeworCQl3cml0ZXcoY21kLT5zdG9wX2FyZyAmIDB4ZmZmZiwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09VTlRfTE9XRVJfUkVHKTsKKwkJd3JpdGV3KChjbWQtPnN0b3BfYXJnID4+IDE2KSAmIDB4ZmYsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPVU5UX1VQUEVSX1JFRyk7CisJfSBlbHNlIHsKKwkJd3JpdGV3KDEsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09VTlRfTE9XRVJfUkVHKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRtYV90cmFuc2Zlcl9zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBudW1fc2FtcGxlczsKKworCW51bV9zYW1wbGVzID0KKwkJcHJpdihkZXYpLT5haV9maWZvX3NlZ21lbnRfbGVuZ3RoICoKKwkJYm9hcmQoZGV2KS0+YWlfZmlmby0+c2FtcGxlX3BhY2tpbmdfcmF0aW87CisJaWYgKG51bV9zYW1wbGVzID4gRE1BX0JVRkZFUl9TSVpFIC8gc2l6ZW9mKHVpbnQxNl90KSkKKwkJbnVtX3NhbXBsZXMgPSBETUFfQlVGRkVSX1NJWkUgLyBzaXplb2YodWludDE2X3QpOworCisJcmV0dXJuIG51bV9zYW1wbGVzOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2FpX3BhY2luZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGlzYWJsZV9haV9pbnRlcnJ1cHRzKGRldik7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzICY9IH5BRENfU1dfR0FURV9CSVQ7CisJd3JpdGV3KHByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09OVFJPTDFfUkVHKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLyogZGlzYWJsZSBwYWNpbmcsIHRyaWdnZXJpbmcsIGV0YyAqLworCXdyaXRldyhBRENfRE1BX0RJU0FCTEVfQklUIHwgQURDX1NPRlRfR0FURV9CSVRTIHwgQURDX0dBVEVfTEVWRUxfQklULAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPTlRST0wwX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfYWlfaW50ZXJydXB0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJcHJpdihkZXYpLT5pbnRyX2VuYWJsZV9iaXRzICY9CisJCX5FTl9BRENfSU5UUl9TUkNfQklUICYgfkVOX0FEQ19ET05FX0lOVFJfQklUICYKKwkJfkVOX0FEQ19BQ1RJVkVfSU5UUl9CSVQgJiB+RU5fQURDX1NUT1BfSU5UUl9CSVQgJgorCQl+RU5fQURDX09WRVJSVU5fQklUICYgfkFEQ19JTlRSX1NSQ19NQVNLOworCXdyaXRldyhwcml2KGRldiktPmludHJfZW5hYmxlX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBJTlRSX0VOQUJMRV9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlERUJVR19QUklOVCgiaW50ciBlbmFibGUgYml0cyAweCV4XG4iLCBwcml2KGRldiktPmludHJfZW5hYmxlX2JpdHMpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfYWlfaW50ZXJydXB0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdWludDMyX3QgYml0czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYml0cyA9IEVOX0FEQ19PVkVSUlVOX0JJVCB8IEVOX0FEQ19ET05FX0lOVFJfQklUIHwKKwkJRU5fQURDX0FDVElWRV9JTlRSX0JJVCB8IEVOX0FEQ19TVE9QX0lOVFJfQklUOworCS8vIFVzZSBwaW8gdHJhbnNmZXIgYW5kIGludGVycnVwdCBvbiBlbmQgb2YgY29udmVyc2lvbiBpZiBUUklHX1dBS0VfRU9TIGZsYWcgaXMgc2V0LgorCWlmIChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQkvLyA0MDIwIGRvZXNuJ3Qgc3VwcG9ydCBwaW8gdHJhbnNmZXJzIGV4Y2VwdCBmb3IgZmlmbyBkcmVncworCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ICE9IExBWU9VVF80MDIwKQorCQkJYml0cyB8PSBBRENfSU5UUl9FT1NDQU5fQklUUyB8IEVOX0FEQ19JTlRSX1NSQ19CSVQ7CisJfQorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCXByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cyB8PSBiaXRzOworCXdyaXRldyhwcml2KGRldiktPmludHJfZW5hYmxlX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBJTlRSX0VOQUJMRV9SRUcpOworCURFQlVHX1BSSU5UKCJpbnRyIGVuYWJsZSBiaXRzIDB4JXhcbiIsIHByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVpbnQzMl90IGFpX2NvbnZlcnRfY291bnRlcl82eHh4KGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCS8vIHN1cHBvc2VkIHRvIGxvYWQgY291bnRlciB3aXRoIGRlc2lyZWQgZGl2aXNvciBtaW51cyAzCisJcmV0dXJuIGNtZC0+Y29udmVydF9hcmcgLyBUSU1FUl9CQVNFIC0gMzsKK30KKworc3RhdGljIHVpbnQzMl90IGFpX3NjYW5fY291bnRlcl82eHh4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1aW50MzJfdCBjb3VudDsKKwkvLyBmaWd1cmUgb3V0IGhvdyBsb25nIHdlIG5lZWQgdG8gZGVsYXkgYXQgZW5kIG9mIHNjYW4KKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWNvdW50ID0gKGNtZC0+c2Nhbl9iZWdpbl9hcmcgLQorCQkJKGNtZC0+Y29udmVydF9hcmcgKiAoY21kLT5jaGFubGlzdF9sZW4gLSAxKSkpCisJCQkvIFRJTUVSX0JBU0U7CisJCWJyZWFrOworCWNhc2UgVFJJR19GT0xMT1c6CisJCWNvdW50ID0gY21kLT5jb252ZXJ0X2FyZyAvIFRJTUVSX0JBU0U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIGNvdW50IC0gMzsKK30KKworc3RhdGljIHVpbnQzMl90IGFpX2NvbnZlcnRfY291bnRlcl80MDIwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjsKKworCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJZGl2aXNvciA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgLyBUSU1FUl9CQVNFOworCQlicmVhazsKKwljYXNlIFRSSUdfT1RIRVI6CisJCWRpdmlzb3IgPSBwcml2KGRldiktPmV4dF9jbG9jay5kaXZpc29yOworCQlicmVhazsKKwlkZWZhdWx0OgkJLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISBmYWlsZWQgdG8gc2V0IGFpIHBhY2luZyEiKTsKKwkJZGl2aXNvciA9IDEwMDA7CisJCWJyZWFrOworCX0KKworCS8vIHN1cHBvc2VkIHRvIGxvYWQgY291bnRlciB3aXRoIGRlc2lyZWQgZGl2aXNvciBtaW51cyAyIGZvciA0MDIwCisJcmV0dXJuIGRpdmlzb3IgLSAyOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3RfbWFzdGVyX2Nsb2NrXzQwMjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJLy8gc2VsZWN0IGludGVybmFsL2V4dGVybmFsIG1hc3RlciBjbG9jaworCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgJj0gfk1BU1RFUl9DTE9DS180MDIwX01BU0s7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19PVEhFUikgeworCQlpbnQgY2hhbnNwZWMgPSBwcml2KGRldiktPmV4dF9jbG9jay5jaGFuc3BlYzsKKworCQlpZiAoQ1JfQ0hBTihjaGFuc3BlYykpCisJCQlwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzIHw9IEJOQ19DTE9DS180MDIwX0JJVFM7CisJCWVsc2UKKwkJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gRVhUX0NMT0NLXzQwMjBfQklUUzsKKwl9IGVsc2UgeworCQlwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzIHw9IElOVEVSTkFMX0NMT0NLXzQwMjBfQklUUzsKKwl9CisJd3JpdGV3KHByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBIV19DT05GSUdfUkVHKTsKK30KKworc3RhdGljIHZvaWQgc2VsZWN0X21hc3Rlcl9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJc3dpdGNoIChib2FyZChkZXYpLT5sYXlvdXQpIHsKKwljYXNlIExBWU9VVF80MDIwOgorCQlzZWxlY3RfbWFzdGVyX2Nsb2NrXzQwMjAoZGV2LCBjbWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3RhcnRfc3luYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIHNwaW5sb2NrIGZvciBwbHggZG1hIGNvbnRyb2wvc3RhdHVzIHJlZworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWlmIChjaGFubmVsKQorCQl3cml0ZWIoUExYX0RNQV9FTl9CSVQgfCBQTFhfRE1BX1NUQVJUX0JJVCB8CisJCQlQTFhfQ0xFQVJfRE1BX0lOVFJfQklULAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX0NTX1JFRyk7CisJZWxzZQorCQl3cml0ZWIoUExYX0RNQV9FTl9CSVQgfCBQTFhfRE1BX1NUQVJUX0JJVCB8CisJCQlQTFhfQ0xFQVJfRE1BX0lOVFJfQklULAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2FpX3BhY2luZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdWludDMyX3QgY29udmVydF9jb3VudGVyID0gMCwgc2Nhbl9jb3VudGVyID0gMDsKKworCWNoZWNrX2FkY190aW1pbmcoZGV2LCBjbWQpOworCisJc2VsZWN0X21hc3Rlcl9jbG9jayhkZXYsIGNtZCk7CisKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCWNvbnZlcnRfY291bnRlciA9IGFpX2NvbnZlcnRfY291bnRlcl80MDIwKGRldiwgY21kKTsKKwl9IGVsc2UgeworCQljb252ZXJ0X2NvdW50ZXIgPSBhaV9jb252ZXJ0X2NvdW50ZXJfNnh4eChkZXYsIGNtZCk7CisJCXNjYW5fY291bnRlciA9IGFpX3NjYW5fY291bnRlcl82eHh4KGRldiwgY21kKTsKKwl9CisKKwkvLyBsb2FkIGxvd2VyIDE2IGJpdHMgb2YgY29udmVydCBpbnRlcnZhbAorCXdyaXRldyhjb252ZXJ0X2NvdW50ZXIgJiAweGZmZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfU0FNUExFX0lOVEVSVkFMX0xPV0VSX1JFRyk7CisJREVCVUdfUFJJTlQoImNvbnZlcnQgY291bnRlciAweCV4XG4iLCBjb252ZXJ0X2NvdW50ZXIpOworCS8vIGxvYWQgdXBwZXIgOCBiaXRzIG9mIGNvbnZlcnQgaW50ZXJ2YWwKKwl3cml0ZXcoKGNvbnZlcnRfY291bnRlciA+PiAxNikgJiAweGZmLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1NBTVBMRV9JTlRFUlZBTF9VUFBFUl9SRUcpOworCS8vIGxvYWQgbG93ZXIgMTYgYml0cyBvZiBzY2FuIGRlbGF5CisJd3JpdGV3KHNjYW5fY291bnRlciAmIDB4ZmZmZiwKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19ERUxBWV9JTlRFUlZBTF9MT1dFUl9SRUcpOworCS8vIGxvYWQgdXBwZXIgOCBiaXRzIG9mIHNjYW4gZGVsYXkKKwl3cml0ZXcoKHNjYW5fY291bnRlciA+PiAxNikgJiAweGZmLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0RFTEFZX0lOVEVSVkFMX1VQUEVSX1JFRyk7CisJREVCVUdfUFJJTlQoInNjYW4gY291bnRlciAweCV4XG4iLCBzY2FuX2NvdW50ZXIpOworfQorCitzdGF0aWMgaW50IHVzZV9pbnRlcm5hbF9xdWV1ZV82eHh4KGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgKyAxIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2kgKyAxXSkgIT0KKwkJCUNSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgKyAxKQorCQkJcmV0dXJuIDA7CisJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2kgKyAxXSkgIT0KKwkJCUNSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pKQorCQkJcmV0dXJuIDA7CisJCWlmIChDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaSArIDFdKSAhPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaV0pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNldHVwX2NoYW5uZWxfcXVldWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIHNob3J0IGJpdHM7CisJaW50IGk7CisKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ICE9IExBWU9VVF80MDIwKSB7CisJCWlmICh1c2VfaW50ZXJuYWxfcXVldWVfNnh4eChjbWQpKSB7CisJCQlwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzICY9IH5FWFRfUVVFVUVfQklUOworCQkJd3JpdGV3KHByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMsCisJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEhXX0NPTkZJR19SRUcpOworCQkJYml0cyA9IDA7CisJCQkvLyBzZXQgY2hhbm5lbAorCQkJYml0cyB8PSBhZGNfY2hhbl9iaXRzKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkpOworCQkJLy8gc2V0IGdhaW4KKwkJCWJpdHMgfD0gYWlfcmFuZ2VfYml0c182eHh4KGRldiwKKwkJCQlDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKSk7CisJCQkvLyBzZXQgc2luZ2xlLWVuZGVkIC8gZGlmZmVyZW50aWFsCisJCQliaXRzIHw9IHNlX2RpZmZfYml0XzZ4eHgoZGV2LAorCQkJCUNSX0FSRUYoY21kLT5jaGFubGlzdFswXSkgPT0gQVJFRl9ESUZGKTsKKwkJCWlmIChDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pID09IEFSRUZfQ09NTU9OKQorCQkJCWJpdHMgfD0gQURDX0NPTU1PTl9CSVQ7CisJCQkvLyBzZXQgc3RvcCBjaGFubmVsCisJCQl3cml0ZXcoYWRjX2NoYW5fYml0cyhDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbY21kLT4KKwkJCQkJCQljaGFubGlzdF9sZW4gLSAxXSkpLAorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfSElHSF9SRUcpOworCQkJLy8gc2V0IHN0YXJ0IGNoYW5uZWwsIGFuZCByZXN0IG9mIHNldHRpbmdzCisJCQl3cml0ZXcoYml0cywKKwkJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1FVRVVFX0xPQURfUkVHKTsKKwkJfSBlbHNlIHsKKwkJCS8vIHVzZSBleHRlcm5hbCBxdWV1ZQorCQkJaWYgKGRldi0+d3JpdGVfc3ViZGV2ICYmIGRldi0+d3JpdGVfc3ViZGV2LT5idXN5KSB7CisJCQkJd2Fybl9leHRlcm5hbF9xdWV1ZShkZXYpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCQlwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzIHw9IEVYVF9RVUVVRV9CSVQ7CisJCQl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfQ09ORklHX1JFRyk7CisJCQkvLyBjbGVhciBEQUMgYnVmZmVyIHRvIHByZXZlbnQgd2VpcmQgaW50ZXJhY3Rpb25zCisJCQl3cml0ZXcoMCwKKwkJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0JVRkZFUl9DTEVBUl9SRUcpOworCQkJLy8gY2xlYXIgcXVldWUgcG9pbnRlcgorCQkJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfQ0xFQVJfUkVHKTsKKwkJCS8vIGxvYWQgZXh0ZXJuYWwgcXVldWUKKwkJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQkJYml0cyA9IDA7CisJCQkJLy8gc2V0IGNoYW5uZWwKKwkJCQliaXRzIHw9IGFkY19jaGFuX2JpdHMoQ1JfQ0hBTihjbWQtPgorCQkJCQkJY2hhbmxpc3RbaV0pKTsKKwkJCQkvLyBzZXQgZ2FpbgorCQkJCWJpdHMgfD0gYWlfcmFuZ2VfYml0c182eHh4KGRldiwKKwkJCQkJQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkpOworCQkJCS8vIHNldCBzaW5nbGUtZW5kZWQgLyBkaWZmZXJlbnRpYWwKKwkJCQliaXRzIHw9IHNlX2RpZmZfYml0XzZ4eHgoZGV2LAorCQkJCQlDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaV0pID09IEFSRUZfRElGRik7CisJCQkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkgPT0gQVJFRl9DT01NT04pCisJCQkJCWJpdHMgfD0gQURDX0NPTU1PTl9CSVQ7CisJCQkJLy8gbWFyayBlbmQgb2YgcXVldWUKKwkJCQlpZiAoaSA9PSBjbWQtPmNoYW5saXN0X2xlbiAtIDEpCisJCQkJCWJpdHMgfD0gUVVFVUVfRU9TQ0FOX0JJVCB8CisJCQkJCQlRVUVVRV9FT1NFUV9CSVQ7CisJCQkJd3JpdGV3KGJpdHMsCisJCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKworCQkJCQlBRENfUVVFVUVfRklGT19SRUcpOworCQkJCURFQlVHX1BSSU5UCisJCQkJCSgid3JvdGUgMHgleCB0byBleHRlcm5hbCBjaGFubmVsIHF1ZXVlXG4iLAorCQkJCQliaXRzKTsKKwkJCX0KKwkJCS8qIGRvaW5nIGEgcXVldWUgY2xlYXIgaXMgbm90IHNwZWNpZmllZCBpbiBib2FyZCBkb2NzLAorCQkJICogYnV0IHJlcXVpcmVkIGZvciByZWxpYWJsZSBvcGVyYXRpb24gKi8KKwkJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1FVRVVFX0NMRUFSX1JFRyk7CisJCQkvLyBwcmltZSBxdWV1ZSBob2xkaW5nIHJlZ2lzdGVyCisJCQl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19RVUVVRV9MT0FEX1JFRyk7CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBzaG9ydCBvbGRfY2FsX3JhbmdlX2JpdHMgPQorCQkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHM7CisKKwkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgJj0gfkFEQ19TUkNfNDAyMF9NQVNLOworCQkvL3NlbGVjdCBCTkMgaW5wdXRzCisJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzIHw9IGFkY19zcmNfNDAyMF9iaXRzKDQpOworCQkvLyBzZWxlY3QgcmFuZ2VzCisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCQl1bnNpZ25lZCBpbnQgcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKTsKKworCQkJaWYgKHJhbmdlID09IDApCisJCQkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgfD0KKwkJCQkJYXR0ZW51YXRlX2JpdChjaGFubmVsKTsKKwkJCWVsc2UKKwkJCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyAmPQorCQkJCQl+YXR0ZW51YXRlX2JpdChjaGFubmVsKTsKKwkJfQorCQkvLyB1cGRhdGUgY2FsaWJyYXRpb24vcmFuZ2UgaTJjIHJlZ2lzdGVyIG9ubHkgaWYgbmVjZXNzYXJ5LCBhcyBpdCBpcyB2ZXJ5IHNsb3cKKwkJaWYgKG9sZF9jYWxfcmFuZ2VfYml0cyAhPSBwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cykgeworCQkJdWludDhfdCBpMmNfZGF0YSA9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzOworCQkJaTJjX3dyaXRlKGRldiwgUkFOR0VfQ0FMX0kyQ19BRERSLCAmaTJjX2RhdGEsCisJCQkJc2l6ZW9mKGkyY19kYXRhKSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2ZpcnN0X2RtYV9kZXNjcmlwdG9yKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBkbWFfY2hhbm5lbCwgdW5zaWduZWQgaW50IGRlc2NyaXB0b3JfYml0cykKK3sKKwkvKiBUaGUgdHJhbnNmZXIgc2l6ZSwgcGNpIGFkZHJlc3MsIGFuZCBsb2NhbCBhZGRyZXNzIHJlZ2lzdGVycworCSAqIGFyZSBzdXBwb3NlZGx5IHVudXNlZCBkdXJpbmcgY2hhaW5lZCBkbWEsCisJICogYnV0IEkgaGF2ZSBmb3VuZCB0aGF0IGxlZnQgb3ZlciB2YWx1ZXMgZnJvbSBsYXN0IG9wZXJhdGlvbgorCSAqIG9jY2FzaW9uYWxseSBjYXVzZSBwcm9ibGVtcyB3aXRoIHRyYW5zZmVyIG9mIGZpcnN0IGRtYQorCSAqIGJsb2NrLiAgSW5pdGlhbGl6aW5nIHRoZW0gdG8gemVybyBzZWVtcyB0byBmaXggdGhlIHByb2JsZW0uICovCisJaWYgKGRtYV9jaGFubmVsKSB7CisJCXdyaXRlbCgwLAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX1RSQU5TRkVSX1NJWkVfUkVHKTsKKwkJd3JpdGVsKDAsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9QQ0lfQUREUkVTU19SRUcpOworCQl3cml0ZWwoMCwKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9MT0NBTF9BRERSRVNTX1JFRyk7CisJCXdyaXRlbChkZXNjcmlwdG9yX2JpdHMsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfREVTQ1JJUFRPUl9SRUcpOworCX0gZWxzZSB7CisJCXdyaXRlbCgwLAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1RSQU5TRkVSX1NJWkVfUkVHKTsKKwkJd3JpdGVsKDAsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUcpOworCQl3cml0ZWwoMCwKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9MT0NBTF9BRERSRVNTX1JFRyk7CisJCXdyaXRlbChkZXNjcmlwdG9yX2JpdHMsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfREVTQ1JJUFRPUl9SRUcpOworCX0KK30KKworc3RhdGljIGludCBhaV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1aW50MzJfdCBiaXRzOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKKworCWRpc2FibGVfYWlfcGFjaW5nKGRldik7CisJYWJvcnRfZG1hKGRldiwgMSk7CisKKwlyZXR2YWwgPSBzZXR1cF9jaGFubmVsX3F1ZXVlKGRldiwgY21kKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8vIG1ha2Ugc3VyZSBpbnRlcm5hbCBjYWxpYnJhdGlvbiBzb3VyY2UgaXMgdHVybmVkIG9mZgorCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKworCXNldF9haV9wYWNpbmcoZGV2LCBjbWQpOworCisJc2V0dXBfc2FtcGxlX2NvdW50ZXJzKGRldiwgY21kKTsKKworCWVuYWJsZV9haV9pbnRlcnJ1cHRzKGRldiwgY21kKTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCS8qIHNldCBtb2RlLCBhbGxvdyBjb252ZXJzaW9ucyB0aHJvdWdoIHNvZnR3YXJlIGdhdGUgKi8KKwlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzIHw9IEFEQ19TV19HQVRFX0JJVDsKKwlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzICY9IH5BRENfRElUSEVSX0JJVDsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ICE9IExBWU9VVF80MDIwKSB7CisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkFEQ19NT0RFX01BU0s7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKQorCQkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyB8PSBhZGNfbW9kZV9iaXRzKDEzKTsJLy8gZ29vZCBvbGQgbW9kZSAxMworCQllbHNlCisJCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzIHw9IGFkY19tb2RlX2JpdHMoOCk7CS8vIG1vZGUgOC4gIFdoYXQgZWxzZSBjb3VsZCB5b3UgbmVlZD8KKwl9IGVsc2UgeworCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzICY9IH5DSEFOTkVMX01PREVfNDAyMF9NQVNLOworCQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gNCkKKwkJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0gRk9VUl9DSEFOTkVMXzQwMjBfQklUUzsKKwkJZWxzZSBpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMikKKwkJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0gVFdPX0NIQU5ORUxfNDAyMF9CSVRTOworCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzICY9IH5BRENfTE9fQ0hBTk5FTF80MDIwX01BU0s7CisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0KKwkJCWFkY19sb19jaGFuXzQwMjBfYml0cyhDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pKTsKKwkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyAmPSB+QURDX0hJX0NIQU5ORUxfNDAyMF9NQVNLOworCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzIHw9CisJCQlhZGNfaGlfY2hhbl80MDIwX2JpdHMoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2NtZC0+CisJCQkJCWNoYW5saXN0X2xlbiAtIDFdKSk7CisJfQorCXdyaXRldyhwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPTlRST0wxX1JFRyk7CisJREVCVUdfUFJJTlQoImNvbnRyb2wxIGJpdHMgMHgleFxuIiwgcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIGNsZWFyIGFkYyBidWZmZXIKKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19CVUZGRVJfQ0xFQVJfUkVHKTsKKworCWlmICgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpID09IDAgfHwKKwkJYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCXByaXYoZGV2KS0+YWlfZG1hX2luZGV4ID0gMDsKKworCQkvLyBzZXQgZG1hIHRyYW5zZmVyIHNpemUKKwkJZm9yIChpID0gMDsgaSA8IGFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpOyBpKyspCisJCQlwcml2KGRldiktPmFpX2RtYV9kZXNjW2ldLnRyYW5zZmVyX3NpemUgPQorCQkJCWNwdV90b19sZTMyKGRtYV90cmFuc2Zlcl9zaXplKGRldikgKgorCQkJCXNpemVvZih1aW50MTZfdCkpOworCisJCS8vIGdpdmUgbG9jYXRpb24gb2YgZmlyc3QgZG1hIGRlc2NyaXB0b3IKKwkJbG9hZF9maXJzdF9kbWFfZGVzY3JpcHRvcihkZXYsIDEsCisJCQlwcml2KGRldiktPgorCQkJYWlfZG1hX2Rlc2NfYnVzX2FkZHIgfCBQTFhfREVTQ19JTl9QQ0lfQklUIHwKKwkJCVBMWF9JTlRSX1RFUk1fQ09VTlQgfCBQTFhfWEZFUl9MT0NBTF9UT19QQ0kpOworCisJCWRtYV9zdGFydF9zeW5jKGRldiwgMSk7CisJfQorCisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkgeworCQkvKiBzZXQgc291cmNlIGZvciBleHRlcm5hbCB0cmlnZ2VycyAqLworCQliaXRzID0gMDsKKwkJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmIENSX0NIQU4oY21kLT5zdGFydF9hcmcpKQorCQkJYml0cyB8PSBFWFRfU1RBUlRfVFJJR19CTkNfQklUOworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCAmJiBDUl9DSEFOKGNtZC0+c3RvcF9hcmcpKQorCQkJYml0cyB8PSBFWFRfU1RPUF9UUklHX0JOQ19CSVQ7CisJCXdyaXRldyhiaXRzLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFRX0FUUklHX0xPV180MDIwX1JFRyk7CisJfQorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvKiBlbmFibGUgcGFjaW5nLCB0cmlnZ2VyaW5nLCBldGMgKi8KKwliaXRzID0gQURDX0VOQUJMRV9CSVQgfCBBRENfU09GVF9HQVRFX0JJVFMgfCBBRENfR0FURV9MRVZFTF9CSVQ7CisJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKQorCQliaXRzIHw9IEFEQ19ETUFfRElTQUJMRV9CSVQ7CisJLy8gc2V0IHN0YXJ0IHRyaWdnZXIKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJYml0cyB8PSBBRENfU1RBUlRfVFJJR19FWFRfQklUUzsKKwkJaWYgKGNtZC0+c3RhcnRfYXJnICYgQ1JfSU5WRVJUKQorCQkJYml0cyB8PSBBRENfU1RBUlRfVFJJR19GQUxMSU5HX0JJVDsKKwl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQorCQliaXRzIHw9IEFEQ19TVEFSVF9UUklHX1NPRlRfQklUUzsKKwlpZiAodXNlX2h3X3NhbXBsZV9jb3VudGVyKGNtZCkpCisJCWJpdHMgfD0gQURDX1NBTVBMRV9DT1VOVEVSX0VOX0JJVDsKKwl3cml0ZXcoYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT05UUk9MMF9SRUcpOworCURFQlVHX1BSSU5UKCJjb250cm9sMCBiaXRzIDB4JXhcbiIsIGJpdHMpOworCisJcHJpdihkZXYpLT5haV9jbWRfcnVubmluZyA9IDE7CisKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gc3RhcnQgYXF1aXNpdGlvbgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgeworCQl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19TVEFSVF9SRUcpOworCQlERUJVR19QUklOVCgic29mdCB0cmlnXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gcmVhZCBudW1fc2FtcGxlcyBmcm9tIDE2IGJpdCB3aWRlIGFpIGZpZm8KK3N0YXRpYyB2b2lkIHBpb19kcmFpbl9haV9maWZvXzE2KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1aW50MTZfdCBwcmVwb3N0X2JpdHM7CisJaW50IHJlYWRfc2VnbWVudCwgcmVhZF9pbmRleCwgd3JpdGVfc2VnbWVudCwgd3JpdGVfaW5kZXg7CisJaW50IG51bV9zYW1wbGVzOworCisJZG8geworCQkvLyBnZXQgbGVhc3Qgc2lnbmlmaWNhbnQgMTUgYml0cworCQlyZWFkX2luZGV4ID0KKwkJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKworCQkJQURDX1JFQURfUE5UUl9SRUcpICYgMHg3ZmZmOworCQl3cml0ZV9pbmRleCA9CisJCQlyZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsKKwkJCUFEQ19XUklURV9QTlRSX1JFRykgJiAweDdmZmY7CisJCS8qIEdldCBtb3N0IHNpZ25pZmljYW50IGJpdHMgKGdyZXkgY29kZSkuICBEaWZmZXJlbnQgYm9hcmRzIHVzZSBkaWZmZXJlbnQgY29kZQorCQkgKiBzbyB1c2UgYSBzY2hlbWUgdGhhdCBkb2Vzbid0IGRlcGVuZCBvbiBlbmNvZGluZy4gIFRoaXMgcmVhZCBtdXN0CisJCSAqIG9jY3VyIGFmdGVyIHJlYWRpbmcgbGVhc3Qgc2lnbmlmaWNhbnQgMTUgYml0cyB0byBhdm9pZCByYWNlCisJCSAqIHdpdGggZmlmbyBzd2l0Y2hpbmcgdG8gbmV4dCBzZWdtZW50LiAqLworCQlwcmVwb3N0X2JpdHMgPSByZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgUFJFUE9TVF9SRUcpOworCisJCS8qIGlmIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzIGFyZSBub3Qgb24gdGhlIHNhbWUgZmlmbyBzZWdtZW50LCByZWFkIHRvIHRoZQorCQkgKiBlbmQgb2YgdGhlIHJlYWQgc2VnbWVudCAqLworCQlyZWFkX3NlZ21lbnQgPSBhZGNfdXBwZXJfcmVhZF9wdHJfY29kZShwcmVwb3N0X2JpdHMpOworCQl3cml0ZV9zZWdtZW50ID0gYWRjX3VwcGVyX3dyaXRlX3B0cl9jb2RlKHByZXBvc3RfYml0cyk7CisKKwkJREVCVUdfUFJJTlQoIiByZCBzZWcgJWksIHdydCBzZWcgJWksIHJkIGlkeCAlaSwgd3J0IGlkeCAlaVxuIiwKKwkJCXJlYWRfc2VnbWVudCwgd3JpdGVfc2VnbWVudCwgcmVhZF9pbmRleCwgd3JpdGVfaW5kZXgpOworCisJCWlmIChyZWFkX3NlZ21lbnQgIT0gd3JpdGVfc2VnbWVudCkKKwkJCW51bV9zYW1wbGVzID0KKwkJCQlwcml2KGRldiktPmFpX2ZpZm9fc2VnbWVudF9sZW5ndGggLSByZWFkX2luZGV4OworCQllbHNlCisJCQludW1fc2FtcGxlcyA9IHdyaXRlX2luZGV4IC0gcmVhZF9pbmRleDsKKworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCQlpZiAocHJpdihkZXYpLT5haV9jb3VudCA9PSAwKQorCQkJCWJyZWFrOworCQkJaWYgKG51bV9zYW1wbGVzID4gcHJpdihkZXYpLT5haV9jb3VudCkgeworCQkJCW51bV9zYW1wbGVzID0gcHJpdihkZXYpLT5haV9jb3VudDsKKwkJCX0KKwkJCXByaXYoZGV2KS0+YWlfY291bnQgLT0gbnVtX3NhbXBsZXM7CisJCX0KKworCQlpZiAobnVtX3NhbXBsZXMgPCAwKSB7CisJCQlydF9wcmludGsoIiBjYl9wY2lkYXM2NDogYnVnISBudW1fc2FtcGxlcyA8IDBcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlERUJVR19QUklOVCgiIHJlYWQgJWkgc2FtcGxlcyBmcm9tIGZpZm9cbiIsIG51bV9zYW1wbGVzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgeworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLAorCQkJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfRklGT19SRUcpKTsKKwkJfQorCisJfSB3aGlsZSAocmVhZF9zZWdtZW50ICE9IHdyaXRlX3NlZ21lbnQpOworfQorCisvKiBSZWFkIGZyb20gMzIgYml0IHdpZGUgYWkgZmlmbyBvZiA0MDIwIC0gZGVhbCB3aXRoIGluc2FuZSBncmV5IGNvZGluZyBvZiBwb2ludGVycy4KKyAqIFRoZSBwY2ktNDAyMCBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzCisgKiBkbWEgdHJhbnNmZXJzIChpdCBvbmx5IHN1cHBvcnRzIHRoZSB1c2Ugb2YgcGlvIGZvciBkcmFpbmluZyB0aGUgbGFzdCByZW1haW5pbmcKKyAqIHBvaW50cyBmcm9tIHRoZSBmaWZvIHdoZW4gYSBkYXRhIGFxdWlzaXRpb24gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQpLgorICovCitzdGF0aWMgdm9pZCBwaW9fZHJhaW5fYWlfZmlmb18zMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IG1heF90cmFuc2ZlciA9IDEwMDAwMDsKKwl1aW50MzJfdCBmaWZvX2RhdGE7CisJaW50IHdyaXRlX2NvZGUgPQorCQlyZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1dSSVRFX1BOVFJfUkVHKSAmIDB4N2ZmZjsKKwlpbnQgcmVhZF9jb2RlID0KKwkJcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19SRUFEX1BOVFJfUkVHKSAmIDB4N2ZmZjsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKG1heF90cmFuc2ZlciA+IHByaXYoZGV2KS0+YWlfY291bnQpIHsKKwkJCW1heF90cmFuc2ZlciA9IHByaXYoZGV2KS0+YWlfY291bnQ7CisJCX0KKwl9CisJZm9yIChpID0gMDsgcmVhZF9jb2RlICE9IHdyaXRlX2NvZGUgJiYgaSA8IG1heF90cmFuc2ZlcjspIHsKKwkJZmlmb19kYXRhID0gcmVhZGwocHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UgKyBBRENfRklGT19SRUcpOworCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGZpZm9fZGF0YSAmIDB4ZmZmZik7CisJCWkrKzsKKwkJaWYgKGkgPCBtYXhfdHJhbnNmZXIpIHsKKwkJCWNmY193cml0ZV90b19idWZmZXIocywgKGZpZm9fZGF0YSA+PiAxNikgJiAweGZmZmYpOworCQkJaSsrOworCQl9CisJCXJlYWRfY29kZSA9CisJCQlyZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsKKwkJCUFEQ19SRUFEX1BOVFJfUkVHKSAmIDB4N2ZmZjsKKwl9CisJcHJpdihkZXYpLT5haV9jb3VudCAtPSBpOworfQorCisvLyBlbXB0eSBmaWZvCitzdGF0aWMgdm9pZCBwaW9fZHJhaW5fYWlfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCXBpb19kcmFpbl9haV9maWZvXzMyKGRldik7CisJfSBlbHNlCisJCXBpb19kcmFpbl9haV9maWZvXzE2KGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGRyYWluX2RtYV9idWZmZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IGRldi0+cmVhZF9zdWJkZXYtPmFzeW5jOworCXVpbnQzMl90IG5leHRfdHJhbnNmZXJfYWRkcjsKKwlpbnQgajsKKwlpbnQgbnVtX3NhbXBsZXMgPSAwOworCXZvaWQgKnBjaV9hZGRyX3JlZzsKKworCWlmIChjaGFubmVsKQorCQlwY2lfYWRkcl9yZWcgPQorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX1BDSV9BRERSRVNTX1JFRzsKKwllbHNlCisJCXBjaV9hZGRyX3JlZyA9CisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHOworCisJLy8gbG9vcCB1bnRpbCB3ZSBoYXZlIHJlYWQgYWxsIHRoZSBmdWxsIGJ1ZmZlcnMKKwlmb3IgKGogPSAwLCBuZXh0X3RyYW5zZmVyX2FkZHIgPSByZWFkbChwY2lfYWRkcl9yZWcpOworCQkobmV4dF90cmFuc2Zlcl9hZGRyIDwKKwkJCXByaXYoZGV2KS0+YWlfYnVmZmVyX2J1c19hZGRyW3ByaXYoZGV2KS0+YWlfZG1hX2luZGV4XQorCQkJfHwgbmV4dF90cmFuc2Zlcl9hZGRyID49CisJCQlwcml2KGRldiktPmFpX2J1ZmZlcl9idXNfYWRkcltwcml2KGRldiktPmFpX2RtYV9pbmRleF0gKworCQkJRE1BX0JVRkZFUl9TSVpFKSAmJiBqIDwgYWlfZG1hX3JpbmdfY291bnQoYm9hcmQoZGV2KSk7CisJCWorKykgeworCQkvLyB0cmFuc2ZlciBkYXRhIGZyb20gZG1hIGJ1ZmZlciB0byBjb21lZGkgYnVmZmVyCisJCW51bV9zYW1wbGVzID0gZG1hX3RyYW5zZmVyX3NpemUoZGV2KTsKKwkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkJaWYgKG51bV9zYW1wbGVzID4gcHJpdihkZXYpLT5haV9jb3VudCkKKwkJCQludW1fc2FtcGxlcyA9IHByaXYoZGV2KS0+YWlfY291bnQ7CisJCQlwcml2KGRldiktPmFpX2NvdW50IC09IG51bV9zYW1wbGVzOworCQl9CisJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIoZGV2LT5yZWFkX3N1YmRldiwKKwkJCXByaXYoZGV2KS0+YWlfYnVmZmVyW3ByaXYoZGV2KS0+YWlfZG1hX2luZGV4XSwKKwkJCW51bV9zYW1wbGVzICogc2l6ZW9mKHVpbnQxNl90KSk7CisJCXByaXYoZGV2KS0+YWlfZG1hX2luZGV4ID0KKwkJCShwcml2KGRldiktPmFpX2RtYV9pbmRleCArCisJCQkxKSAlIGFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpOworCisJCURFQlVHX1BSSU5UKCJuZXh0IGJ1ZmZlciBhZGRyIDB4JWx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpcHJpdihkZXYpLT5haV9idWZmZXJfYnVzX2FkZHJbcHJpdihkZXYpLT4KKwkJCQlhaV9kbWFfaW5kZXhdKTsKKwkJREVCVUdfUFJJTlQoInBjaSBhZGRyIHJlZyAweCV4XG4iLCBuZXh0X3RyYW5zZmVyX2FkZHIpOworCX0KKwkvKiBYWFggY2hlY2sgZm9yIGRtYSByaW5nIGJ1ZmZlciBvdmVycnVuICh1c2UgZW5kLW9mLWNoYWluIGJpdCB0byBtYXJrIGxhc3QKKwkgKiB1bnVzZWQgYnVmZmVyKSAqLworfQorCit2b2lkIGhhbmRsZV9haV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IHN0YXR1cywKKwl1bnNpZ25lZCBpbnQgcGx4X3N0YXR1cykKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdWludDhfdCBkbWExX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLy8gY2hlY2sgZm9yIGZpZm8gb3ZlcnJ1bgorCWlmIChzdGF0dXMgJiBBRENfT1ZFUlJVTl9CSVQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImZpZm8gb3ZlcnJ1biIpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJfQorCS8vIHNwaW4gbG9jayBtYWtlcyBzdXJlIG5vb25lIGVsc2UgY2hhbmdlcyBwbHggZG1hIGNvbnRyb2wgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZG1hMV9zdGF0dXMgPSByZWFkYihwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfQ1NfUkVHKTsKKwlpZiAocGx4X3N0YXR1cyAmIElDU19ETUExX0EpIHsJLy8gZG1hIGNoYW4gMSBpbnRlcnJ1cHQKKwkJd3JpdGViKChkbWExX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSB8IFBMWF9DTEVBUl9ETUFfSU5UUl9CSVQsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfQ1NfUkVHKTsKKwkJREVCVUdfUFJJTlQoImRtYTEgc3RhdHVzIDB4JXhcbiIsIGRtYTFfc3RhdHVzKTsKKworCQlpZiAoZG1hMV9zdGF0dXMgJiBQTFhfRE1BX0VOX0JJVCkgeworCQkJZHJhaW5fZG1hX2J1ZmZlcnMoZGV2LCAxKTsKKwkJfQorCQlERUJVR19QUklOVCgiIGNsZWFyZWQgZG1hIGNoMSBpbnRlcnJ1cHRcbiIpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKHN0YXR1cyAmIEFEQ19ET05FX0JJVCkKKwkJREVCVUdfUFJJTlQoImFkYyBkb25lIGludGVycnVwdFxuIik7CisKKwkvLyBkcmFpbiBmaWZvIHdpdGggcGlvCisJaWYgKChzdGF0dXMgJiBBRENfRE9ORV9CSVQpIHx8CisJCSgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpICYmCisJCQkoc3RhdHVzICYgQURDX0lOVFJfUEVORElOR19CSVQpICYmCisJCQkoYm9hcmQoZGV2KS0+bGF5b3V0ICE9IExBWU9VVF80MDIwKSkpIHsKKwkJREVCVUdfUFJJTlQoInBpbyBmaWZvIGRyYWluXG4iKTsKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCWlmIChwcml2KGRldiktPmFpX2NtZF9ydW5uaW5nKSB7CisJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQkJcGlvX2RyYWluX2FpX2ZpZm8oZGV2KTsKKwkJfSBlbHNlCisJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCX0KKwkvLyBpZiB3ZSBhcmUgaGF2ZSBhbGwgdGhlIGRhdGEsIHRoZW4gcXVpdAorCWlmICgoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIHByaXYoZGV2KS0+YWlfY291bnQgPD0gMCkgfHwKKwkJKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19FWFQgJiYgKHN0YXR1cyAmIEFEQ19TVE9QX0JJVCkpKSB7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwl9CisKKwljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwcmV2X2FvX2RtYV9pbmRleChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2luZGV4OworCisJaWYgKHByaXYoZGV2KS0+YW9fZG1hX2luZGV4ID09IDApCisJCWJ1ZmZlcl9pbmRleCA9IEFPX0RNQV9SSU5HX0NPVU5UIC0gMTsKKwllbHNlCisJCWJ1ZmZlcl9pbmRleCA9IHByaXYoZGV2KS0+YW9fZG1hX2luZGV4IC0gMTsKKwlyZXR1cm4gYnVmZmVyX2luZGV4OworfQorCitzdGF0aWMgaW50IGxhc3RfYW9fZG1hX2xvYWRfY29tcGxldGVkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBidWZmZXJfaW5kZXg7CisJdW5zaWduZWQgaW50IHRyYW5zZmVyX2FkZHJlc3M7CisJdW5zaWduZWQgc2hvcnQgZG1hX3N0YXR1czsKKworCWJ1ZmZlcl9pbmRleCA9IHByZXZfYW9fZG1hX2luZGV4KGRldik7CisJZG1hX3N0YXR1cyA9IHJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOworCWlmICgoZG1hX3N0YXR1cyAmIFBMWF9ETUFfRE9ORV9CSVQpID09IDApCisJCXJldHVybiAwOworCisJdHJhbnNmZXJfYWRkcmVzcyA9CisJCXJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUcpOworCWlmICh0cmFuc2Zlcl9hZGRyZXNzICE9IHByaXYoZGV2KS0+YW9fYnVmZmVyX2J1c19hZGRyW2J1ZmZlcl9pbmRleF0pCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYW9fc3RvcHBlZF9ieV9lcnJvcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKQorCQlyZXR1cm4gMTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChwcml2KGRldiktPmFvX2NvdW50KQorCQkJcmV0dXJuIDE7CisJCWlmIChsYXN0X2FvX2RtYV9sb2FkX2NvbXBsZXRlZChkZXYpID09IDApCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFvX2RtYV9uZWVkc19yZXN0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIHNob3J0IGRtYV9zdGF0dXMpCit7CisJaWYgKChkbWFfc3RhdHVzICYgUExYX0RNQV9ET05FX0JJVCkgPT0gMCB8fAorCQkoZG1hX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAobGFzdF9hb19kbWFfbG9hZF9jb21wbGV0ZWQoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmVzdGFydF9hb19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGRtYV9kZXNjX2JpdHM7CisKKwlkbWFfZGVzY19iaXRzID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0RFU0NSSVBUT1JfUkVHKTsKKwlkbWFfZGVzY19iaXRzICY9IH5QTFhfRU5EX09GX0NIQUlOX0JJVDsKKwlERUJVR19QUklOVCgicmVzdGFydGluZyBhbyBkbWEsIGRlc2NyaXB0b3IgcmVnIDB4JXhcbiIsIGRtYV9kZXNjX2JpdHMpOworCWxvYWRfZmlyc3RfZG1hX2Rlc2NyaXB0b3IoZGV2LCAwLCBkbWFfZGVzY19iaXRzKTsKKworCWRtYV9zdGFydF9zeW5jKGRldiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hb19pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IHN0YXR1cywKKwl1bnNpZ25lZCBpbnQgcGx4X3N0YXR1cykKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+d3JpdGVfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJdWludDhfdCBkbWEwX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogYm9hcmQgbWlnaHQgbm90IHN1cHBvcnQgYW8sIGluIHdoaWNoIGNhc2Ugd3JpdGVfc3ViZGV2IGlzIE5VTEwgKi8KKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm47CisJYXN5bmMgPSBzLT5hc3luYzsKKwljbWQgPSAmYXN5bmMtPmNtZDsKKworCS8vIHNwaW4gbG9jayBtYWtlcyBzdXJlIG5vb25lIGVsc2UgY2hhbmdlcyBwbHggZG1hIGNvbnRyb2wgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZG1hMF9zdGF0dXMgPSByZWFkYihwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKKwlpZiAocGx4X3N0YXR1cyAmIElDU19ETUEwX0EpIHsJLy8gZG1hIGNoYW4gMCBpbnRlcnJ1cHQKKwkJaWYgKChkbWEwX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKQorCQkJJiYgIShkbWEwX3N0YXR1cyAmIFBMWF9ETUFfRE9ORV9CSVQpKQorCQkJd3JpdGViKFBMWF9ETUFfRU5fQklUIHwgUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKKwkJZWxzZQorCQkJd3JpdGViKFBMWF9DTEVBUl9ETUFfSU5UUl9CSVQsCisJCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCURFQlVHX1BSSU5UKCJkbWEwIHN0YXR1cyAweCV4XG4iLCBkbWEwX3N0YXR1cyk7CisJCWlmIChkbWEwX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSB7CisJCQlsb2FkX2FvX2RtYShkZXYsIGNtZCk7CisJCQkvKiB0cnkgdG8gcmVjb3ZlciBmcm9tIGRtYSBlbmQtb2YtY2hhaW4gZXZlbnQgKi8KKwkJCWlmIChhb19kbWFfbmVlZHNfcmVzdGFydChkZXYsIGRtYTBfc3RhdHVzKSkKKwkJCQlyZXN0YXJ0X2FvX2RtYShkZXYpOworCQl9CisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBkbWEgY2gwIGludGVycnVwdFxuIik7CisJfSBlbHNlCisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoKHN0YXR1cyAmIERBQ19ET05FX0JJVCkpIHsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQlpZiAoYW9fc3RvcHBlZF9ieV9lcnJvcihkZXYsIGNtZCkpCisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJREVCVUdfUFJJTlQoInBseCBkbWEwIGRlc2MgcmVnIDB4JXhcbiIsCisJCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsKKwkJCQlQTFhfRE1BMF9ERVNDUklQVE9SX1JFRykpOworCQlERUJVR19QUklOVCgicGx4IGRtYTAgYWRkcmVzcyByZWcgMHgleFxuIiwKKwkJCXJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKworCQkJCVBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRykpOworCX0KKwljZmNfaGFuZGxlX2V2ZW50cyhkZXYsIHMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaGFuZGxlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKKwl1aW50MzJfdCBwbHhfc3RhdHVzOworCXVpbnQzMl90IHBseF9iaXRzOworCisJcGx4X3N0YXR1cyA9IHJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfSU5UUkNTX1JFRyk7CisJc3RhdHVzID0gcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEhXX1NUQVRVU19SRUcpOworCisJREVCVUdfUFJJTlQoImNiX3BjaWRhczY0OiBodyBzdGF0dXMgMHgleCAiLCBzdGF0dXMpOworCURFQlVHX1BSSU5UKCJwbHggc3RhdHVzIDB4JXhcbiIsIHBseF9zdGF0dXMpOworCisJLyogYW4gaW50ZXJydXB0IGJlZm9yZSBhbGwgdGhlIHBvc3Rjb25maWcgc3R1ZmYgZ2V0cyBkb25lIGNvdWxkCisJICogY2F1c2UgYSBOVUxMIGRlcmVmZXJlbmNlIGlmIHdlIGNvbnRpbnVlIHRocm91Z2ggdGhlCisJICogaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKSB7CisJCURFQlVHX1BSSU5UKCJjYl9wY2lkYXM2NDogcHJlbWF0dXJlIGludGVycnVwdCwgaWdub3JpbmciLAorCQkJc3RhdHVzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwloYW5kbGVfYWlfaW50ZXJydXB0KGRldiwgc3RhdHVzLCBwbHhfc3RhdHVzKTsKKwloYW5kbGVfYW9faW50ZXJydXB0KGRldiwgc3RhdHVzLCBwbHhfc3RhdHVzKTsKKworCS8vIGNsZWFyIHBvc3NpYmxlIHBseDkwODAgaW50ZXJydXB0IHNvdXJjZXMKKwlpZiAocGx4X3N0YXR1cyAmIElDU19MRElBKSB7CS8vIGNsZWFyIGxvY2FsIGRvb3JiZWxsIGludGVycnVwdAorCQlwbHhfYml0cyA9IHJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfREJSX09VVF9SRUcpOworCQl3cml0ZWwocGx4X2JpdHMsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfREJSX09VVF9SRUcpOworCQlERUJVR19QUklOVCgiIGNsZWFyZWQgbG9jYWwgZG9vcmJlbGwgYml0cyAweCV4XG4iLCBwbHhfYml0cyk7CisJfQorCisJREVCVUdfUFJJTlQoImV4aXRpbmcgaGFuZGxlclxuIik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgYWJvcnRfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLy8gc3BpbmxvY2sgZm9yIHBseCBkbWEgY29udHJvbC9zdGF0dXMgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlwbHg5MDgwX2Fib3J0X2RtYShwcml2KGRldiktPnBseDkwODBfaW9iYXNlLCBjaGFubmVsKTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWlmIChwcml2KGRldiktPmFpX2NtZF9ydW5uaW5nID09IDApIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaXYoZGV2KS0+YWlfY21kX3J1bm5pbmcgPSAwOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlkaXNhYmxlX2FpX3BhY2luZyhkZXYpOworCisJYWJvcnRfZG1hKGRldiwgMSk7CisKKwlERUJVR19QUklOVCgiYWkgY2FuY2VsZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCByYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKworCS8vIGRvIHNvbWUgaW5pdGlhbGl6aW5nCisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfQ09OVFJPTDBfUkVHKTsKKworCS8vIHNldCByYW5nZQorCXNldF9kYWNfcmFuZ2VfYml0cyhkZXYsICZwcml2KGRldiktPmRhY19jb250cm9sMV9iaXRzLCBjaGFuLCByYW5nZSk7CisJd3JpdGV3KHByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfQ09OVFJPTDFfUkVHKTsKKworCS8vIHdyaXRlIHRvIGNoYW5uZWwKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCXdyaXRldyhkYXRhWzBdICYgMHhmZiwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBkYWNfbHNiXzQwMjBfcmVnKGNoYW4pKTsKKwkJd3JpdGV3KChkYXRhWzBdID4+IDgpICYgMHhmLAorCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIGRhY19tc2JfNDAyMF9yZWcoY2hhbikpOworCX0gZWxzZSB7CisJCXdyaXRldyhkYXRhWzBdLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgZGFjX2NvbnZlcnRfcmVnKGNoYW4pKTsKKwl9CisKKwkvLyByZW1lbWJlciBvdXRwdXQgdmFsdWUKKwlwcml2KGRldiktPmFvX3ZhbHVlW2NoYW5dID0gZGF0YVswXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFvX3JlYWRiYWNrX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBwcml2KGRldiktPmFvX3ZhbHVlW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGFjX2NvbnRyb2wwX3JlZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdW5zaWduZWQgaW50IGJpdHMgPSBEQUNfRU5BQkxFX0JJVCB8IFdBVkVGT1JNX0dBVEVfTEVWRUxfQklUIHwKKwkJV0FWRUZPUk1fR0FURV9FTkFCTEVfQklUIHwgV0FWRUZPUk1fR0FURV9TRUxFQ1RfQklUOworCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCWJpdHMgfD0gV0FWRUZPUk1fVFJJR19FWFRfQklUUzsKKwkJaWYgKGNtZC0+c3RhcnRfYXJnICYgQ1JfSU5WRVJUKQorCQkJYml0cyB8PSBXQVZFRk9STV9UUklHX0ZBTExJTkdfQklUOworCX0gZWxzZSB7CisJCWJpdHMgfD0gV0FWRUZPUk1fVFJJR19TT0ZUX0JJVFM7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSB7CisJCWJpdHMgfD0gREFDX0VYVF9VUERBVEVfRU5BQkxFX0JJVDsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiBDUl9JTlZFUlQpCisJCQliaXRzIHw9IERBQ19FWFRfVVBEQVRFX0ZBTExJTkdfQklUOworCX0KKwl3cml0ZXcoYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMF9SRUcpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGFjX2NvbnRyb2wxX3JlZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQlpbnQgY2hhbm5lbCwgcmFuZ2U7CisKKwkJY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSk7CisJCXNldF9kYWNfcmFuZ2VfYml0cyhkZXYsICZwcml2KGRldiktPmRhY19jb250cm9sMV9iaXRzLCBjaGFubmVsLAorCQkJcmFuZ2UpOworCX0KKwlwcml2KGRldiktPmRhY19jb250cm9sMV9iaXRzIHw9IERBQ19TV19HQVRFX0JJVDsKKwl3cml0ZXcocHJpdihkZXYpLT5kYWNfY29udHJvbDFfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMV9SRUcpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGFjX3NlbGVjdF9yZWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVpbnQxNl90IGJpdHM7CisJdW5zaWduZWQgaW50IGZpcnN0X2NoYW5uZWwsIGxhc3RfY2hhbm5lbDsKKworCWZpcnN0X2NoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCWxhc3RfY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPmNoYW5saXN0X2xlbiAtIDFdKTsKKwlpZiAobGFzdF9jaGFubmVsIDwgZmlyc3RfY2hhbm5lbCkKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgbGFzdCBhbyBjaGFubmVsIDwgZmlyc3QgYW8gY2hhbm5lbCIpOworCisJYml0cyA9IChmaXJzdF9jaGFubmVsICYgMHg3KSB8IChsYXN0X2NoYW5uZWwgJiAweDcpIDw8IDM7CisKKwl3cml0ZXcoYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19TRUxFQ1RfUkVHKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2RhY19pbnRlcnZhbF9yZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjsKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIpCisJCXJldHVybjsKKworCWRpdmlzb3IgPSBnZXRfYW9fZGl2aXNvcihjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzKTsKKwlpZiAoZGl2aXNvciA+IG1heF9jb3VudGVyX3ZhbHVlKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIGFvIGRpdmlzb3IgdG9vIGJpZyIpOworCQlkaXZpc29yID0gbWF4X2NvdW50ZXJfdmFsdWU7CisJfQorCXdyaXRldyhkaXZpc29yICYgMHhmZmZmLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX1NBTVBMRV9JTlRFUlZBTF9MT1dFUl9SRUcpOworCXdyaXRldygoZGl2aXNvciA+PiAxNikgJiAweGZmLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX1NBTVBMRV9JTlRFUlZBTF9VUFBFUl9SRUcpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGxvYWRfYW9fZG1hX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCBidWZmZXJfaW5kZXgsIHByZXZfYnVmZmVyX2luZGV4OworCXVuc2lnbmVkIGludCBuZXh0X2JpdHM7CisKKwlidWZmZXJfaW5kZXggPSBwcml2KGRldiktPmFvX2RtYV9pbmRleDsKKwlwcmV2X2J1ZmZlcl9pbmRleCA9IHByZXZfYW9fZG1hX2luZGV4KGRldik7CisKKwlERUJVR19QUklOVCgiYXR0ZW1wdGluZyB0byBsb2FkIGFvIGJ1ZmZlciAlaSAoMHgleClcbiIsIGJ1ZmZlcl9pbmRleCwKKwkJcHJpdihkZXYpLT5hb19idWZmZXJfYnVzX2FkZHJbYnVmZmVyX2luZGV4XSk7CisKKwludW1fYnl0ZXMgPSBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUoZGV2LT53cml0ZV9zdWJkZXYtPmFzeW5jKTsKKwlpZiAobnVtX2J5dGVzID4gRE1BX0JVRkZFUl9TSVpFKQorCQludW1fYnl0ZXMgPSBETUFfQlVGRkVSX1NJWkU7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBudW1fYnl0ZXMgPiBwcml2KGRldiktPmFvX2NvdW50KQorCQludW1fYnl0ZXMgPSBwcml2KGRldiktPmFvX2NvdW50OworCW51bV9ieXRlcyAtPSBudW1fYnl0ZXMgJSBieXRlc19pbl9zYW1wbGU7CisKKwlpZiAobnVtX2J5dGVzID09IDApCisJCXJldHVybiAwOworCisJREVCVUdfUFJJTlQoImxvYWRpbmcgJWkgYnl0ZXNcbiIsIG51bV9ieXRlcyk7CisKKwludW1fYnl0ZXMgPSBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihkZXYtPndyaXRlX3N1YmRldiwKKwkJcHJpdihkZXYpLT5hb19idWZmZXJbYnVmZmVyX2luZGV4XSwgbnVtX2J5dGVzKTsKKwlwcml2KGRldiktPmFvX2RtYV9kZXNjW2J1ZmZlcl9pbmRleF0udHJhbnNmZXJfc2l6ZSA9CisJCWNwdV90b19sZTMyKG51bV9ieXRlcyk7CisJLyogc2V0IGVuZCBvZiBjaGFpbiBiaXQgc28gd2UgY2F0Y2ggdW5kZXJydW5zICovCisJbmV4dF9iaXRzID0gbGUzMl90b19jcHUocHJpdihkZXYpLT5hb19kbWFfZGVzY1tidWZmZXJfaW5kZXhdLm5leHQpOworCW5leHRfYml0cyB8PSBQTFhfRU5EX09GX0NIQUlOX0JJVDsKKwlwcml2KGRldiktPmFvX2RtYV9kZXNjW2J1ZmZlcl9pbmRleF0ubmV4dCA9IGNwdV90b19sZTMyKG5leHRfYml0cyk7CisJLyogY2xlYXIgZW5kIG9mIGNoYWluIGJpdCBvbiBwcmV2aW91cyBidWZmZXIgbm93IHRoYXQgd2UgaGF2ZSBzZXQgaXQKKwkgKiBmb3IgdGhlIGxhc3QgYnVmZmVyICovCisJbmV4dF9iaXRzID0gbGUzMl90b19jcHUocHJpdihkZXYpLT5hb19kbWFfZGVzY1twcmV2X2J1ZmZlcl9pbmRleF0ubmV4dCk7CisJbmV4dF9iaXRzICY9IH5QTFhfRU5EX09GX0NIQUlOX0JJVDsKKwlwcml2KGRldiktPmFvX2RtYV9kZXNjW3ByZXZfYnVmZmVyX2luZGV4XS5uZXh0ID0gY3B1X3RvX2xlMzIobmV4dF9iaXRzKTsKKworCXByaXYoZGV2KS0+YW9fZG1hX2luZGV4ID0gKGJ1ZmZlcl9pbmRleCArIDEpICUgQU9fRE1BX1JJTkdfQ09VTlQ7CisJcHJpdihkZXYpLT5hb19jb3VudCAtPSBudW1fYnl0ZXM7CisKKwlyZXR1cm4gbnVtX2J5dGVzOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2FvX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdW5zaWduZWQgaW50IG51bV9ieXRlczsKKwl1bnNpZ25lZCBpbnQgbmV4dF90cmFuc2Zlcl9hZGRyOworCXZvaWQgKnBjaV9hZGRyX3JlZyA9CisJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUc7CisJdW5zaWduZWQgaW50IGJ1ZmZlcl9pbmRleDsKKworCWRvIHsKKwkJYnVmZmVyX2luZGV4ID0gcHJpdihkZXYpLT5hb19kbWFfaW5kZXg7CisJCS8qIGRvbid0IG92ZXJ3cml0ZSBkYXRhIHRoYXQgaGFzbid0IGJlZW4gdHJhbnNmZXJyZWQgeWV0ICovCisJCW5leHRfdHJhbnNmZXJfYWRkciA9IHJlYWRsKHBjaV9hZGRyX3JlZyk7CisJCWlmIChuZXh0X3RyYW5zZmVyX2FkZHIgPj0KKwkJCXByaXYoZGV2KS0+YW9fYnVmZmVyX2J1c19hZGRyW2J1ZmZlcl9pbmRleF0KKwkJCSYmIG5leHRfdHJhbnNmZXJfYWRkciA8CisJCQlwcml2KGRldiktPmFvX2J1ZmZlcl9idXNfYWRkcltidWZmZXJfaW5kZXhdICsKKwkJCURNQV9CVUZGRVJfU0laRSkKKwkJCXJldHVybjsKKwkJbnVtX2J5dGVzID0gbG9hZF9hb19kbWFfYnVmZmVyKGRldiwgY21kKTsKKwl9IHdoaWxlIChudW1fYnl0ZXMgPj0gRE1BX0JVRkZFUl9TSVpFKTsKK30KKworc3RhdGljIGludCBwcmVwX2FvX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdW5zaWduZWQgaW50IG51bV9ieXRlczsKKwlpbnQgaTsKKworCS8qIGNsZWFyIHF1ZXVlIHBvaW50ZXIgdG9vLCBzaW5jZSBleHRlcm5hbCBxdWV1ZSBoYXMKKwkgKiB3ZWlyZCBpbnRlcmFjdGlvbnMgd2l0aCBhbyBmaWZvICovCisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfQ0xFQVJfUkVHKTsKKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19CVUZGRVJfQ0xFQVJfUkVHKTsKKworCW51bV9ieXRlcyA9IChEQUNfRklGT19TSVpFIC8gMikgKiBieXRlc19pbl9zYW1wbGU7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJgorCQludW1fYnl0ZXMgLyBieXRlc19pbl9zYW1wbGUgPiBwcml2KGRldiktPmFvX2NvdW50KQorCQludW1fYnl0ZXMgPSBwcml2KGRldiktPmFvX2NvdW50ICogYnl0ZXNfaW5fc2FtcGxlOworCW51bV9ieXRlcyA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKGRldi0+d3JpdGVfc3ViZGV2LAorCQlwcml2KGRldiktPmFvX2JvdW5jZV9idWZmZXIsIG51bV9ieXRlcyk7CisJZm9yIChpID0gMDsgaSA8IG51bV9ieXRlcyAvIGJ5dGVzX2luX3NhbXBsZTsgaSsrKSB7CisJCXdyaXRldyhwcml2KGRldiktPmFvX2JvdW5jZV9idWZmZXJbaV0sCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0ZJRk9fUkVHKTsKKwl9CisJcHJpdihkZXYpLT5hb19jb3VudCAtPSBudW1fYnl0ZXMgLyBieXRlc19pbl9zYW1wbGU7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBwcml2KGRldiktPmFvX2NvdW50ID09IDApCisJCXJldHVybiAwOworCW51bV9ieXRlcyA9IGxvYWRfYW9fZG1hX2J1ZmZlcihkZXYsIGNtZCk7CisJaWYgKG51bV9ieXRlcyA9PSAwKQorCQlyZXR1cm4gLTE7CisJaWYgKG51bV9ieXRlcyA+PSBETUFfQlVGRkVSX1NJWkUpIDsKKwlsb2FkX2FvX2RtYShkZXYsIGNtZCk7CisKKwlkbWFfc3RhcnRfc3luYyhkZXYsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dGVybmFsX2FpX3F1ZXVlX2luX3VzZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5yZWFkX3N1YmRldi0+YnVzeSkKKwkJcmV0dXJuIDA7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAodXNlX2ludGVybmFsX3F1ZXVlXzZ4eHgoJmRldi0+cmVhZF9zdWJkZXYtPmFzeW5jLT5jbWQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlpZiAoZXh0ZXJuYWxfYWlfcXVldWVfaW5fdXNlKGRldikpIHsKKwkJd2Fybl9leHRlcm5hbF9xdWV1ZShkZXYpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwkvKiBkaXNhYmxlIGFuYWxvZyBvdXRwdXQgc3lzdGVtIGR1cmluZyBzZXR1cCAqLworCXdyaXRldygweDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfQ09OVFJPTDBfUkVHKTsKKworCXByaXYoZGV2KS0+YW9fZG1hX2luZGV4ID0gMDsKKwlwcml2KGRldiktPmFvX2NvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCisJc2V0X2RhY19zZWxlY3RfcmVnKGRldiwgY21kKTsKKwlzZXRfZGFjX2ludGVydmFsX3JlZ3MoZGV2LCBjbWQpOworCWxvYWRfZmlyc3RfZG1hX2Rlc2NyaXB0b3IoZGV2LCAwLCBwcml2KGRldiktPmFvX2RtYV9kZXNjX2J1c19hZGRyIHwKKwkJUExYX0RFU0NfSU5fUENJX0JJVCB8IFBMWF9JTlRSX1RFUk1fQ09VTlQpOworCisJc2V0X2RhY19jb250cm9sMV9yZWcoZGV2LCBjbWQpOworCXMtPmFzeW5jLT5pbnR0cmlnID0gYW9faW50dHJpZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ19udW0pCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByZXR2YWw7CisKKwlpZiAodHJpZ19udW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR2YWwgPSBwcmVwX2FvX2RtYShkZXYsIGNtZCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiAtRVBJUEU7CisKKwlzZXRfZGFjX2NvbnRyb2wwX3JlZyhkZXYsIGNtZCk7CisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19JTlQpCisJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX1NUQVJUX1JFRyk7CisKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgdG1wX2FyZzsKKwlpbnQgaTsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX0lOVCB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvLyB1bmlxdWVuZXNzIGNoZWNrCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfSU5UICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJLy8gY29tcGF0aWJpbGl0eSBjaGVjaworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUICYmIGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJgorCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IGJvYXJkKGRldiktPmFvX3NjYW5fc3BlZWQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBib2FyZChkZXYpLT5hb19zY2FuX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGdldF9hb19kaXZpc29yKGNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQkJY21kLT5mbGFncykgPiBtYXhfY291bnRlcl92YWx1ZSkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJKG1heF9jb3VudGVyX3ZhbHVlICsgMikgKiBUSU1FUl9CQVNFOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wX2FyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJZ2V0X2Rpdmlzb3IoY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MpICogVElNRVJfQkFTRTsKKwkJaWYgKHRtcF9hcmcgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJdW5zaWduZWQgaW50IGZpcnN0X2NoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gZmlyc3RfY2hhbm5lbCArIGkpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiY2hhbmxpc3QgbXVzdCB1c2UgY29uc2VjdXRpdmUgY2hhbm5lbHMiKTsKKwkJCQllcnIrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJd3JpdGV3KDB4MCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMF9SRUcpOworCWFib3J0X2RtYShkZXYsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpb19jYWxsYmFjayhpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCWlmIChkaXIpIHsKKwkJd3JpdGViKGRhdGEsICh2b2lkICopKGlvYmFzZSArIHBvcnQpKTsKKwkJREVCVUdfUFJJTlQoIndyb3RlIDB4JXggdG8gcG9ydCAlaVxuIiwgZGF0YSwgcG9ydCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiByZWFkYigodm9pZCAqKShpb2Jhc2UgKyBwb3J0KSk7CisJfQorfQorCitzdGF0aWMgaW50IGRpb19jYWxsYmFja180MDIwKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJaWYgKGRpcikgeworCQl3cml0ZXcoZGF0YSwgKHZvaWQgKikoaW9iYXNlICsgMiAqIHBvcnQpKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHJlYWR3KCh2b2lkICopKGlvYmFzZSArIDIgKiBwb3J0KSk7CisJfQorfQorCitzdGF0aWMgaW50IGRpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCWJpdHMgPSByZWFkYihwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIERJX1JFRyk7CisJYml0cyAmPSAweGY7CisJZGF0YVsxXSA9IGJpdHM7CisJZGF0YVswXSA9IDA7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSAmPSAweGY7CisJLy8gemVybyBiaXRzIHdlIGFyZSBnb2luZyB0byBjaGFuZ2UKKwlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkvLyBzZXQgbmV3IGJpdHMKKwlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKworCXdyaXRlYihzLT5zdGF0ZSwgcHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UgKyBET19SRUcpOworCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGlvXzYweHhfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBtYXNrOworCisJbWFzayA9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0gKHMtPmlvX2JpdHMgJiBtYXNrKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiAyOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyaXRlYihzLT5pb19iaXRzLAorCQlwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIERJT19ESVJFQ1RJT05fNjBYWF9SRUcpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGlvXzYweHhfd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQl3cml0ZWIocy0+c3RhdGUsCisJCQlwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIERJT19EQVRBXzYwWFhfUkVHKTsKKwl9CisKKwlkYXRhWzFdID0gcmVhZGIocHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UgKyBESU9fREFUQV82MFhYX1JFRyk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIHZvaWQgY2FsZGFjX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJcHJpdihkZXYpLT5jYWxkYWNfc3RhdGVbY2hhbm5lbF0gPSB2YWx1ZTsKKworCXN3aXRjaCAoYm9hcmQoZGV2KS0+bGF5b3V0KSB7CisJY2FzZSBMQVlPVVRfNjBYWDoKKwljYXNlIExBWU9VVF82NFhYOgorCQljYWxkYWNfODgwMF93cml0ZShkZXYsIGNoYW5uZWwsIHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBMQVlPVVRfNDAyMDoKKwkJY2FsZGFjX2kyY193cml0ZShkZXYsIGNoYW5uZWwsIHZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGNhbGliX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiByZXR1cm4gaW1tZWRpYXRlbHkgaWYgc2V0dGluZyBoYXNuJ3QgY2hhbmdlZCwgc2luY2UKKwkgKiBwcm9ncmFtbWluZyB0aGVzZSB0aGluZ3MgaXMgc2xvdyAqLworCWlmIChwcml2KGRldiktPmNhbGRhY19zdGF0ZVtjaGFubmVsXSA9PSBkYXRhWzBdKQorCQlyZXR1cm4gMTsKKworCWNhbGRhY193cml0ZShkZXYsIGNoYW5uZWwsIGRhdGFbMF0pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2FsaWJfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZGF0YVswXSA9IHByaXYoZGV2KS0+Y2FsZGFjX3N0YXRlW2NoYW5uZWxdOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGFkODQwMl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0YXRpYyBjb25zdCBpbnQgYml0c3RyZWFtX2xlbmd0aCA9IDEwOworCXVuc2lnbmVkIGludCBiaXQsIHJlZ2lzdGVyX2JpdHM7CisJdW5zaWduZWQgaW50IGJpdHN0cmVhbSA9ICgoY2hhbm5lbCAmIDB4MykgPDwgOCkgfCAodmFsdWUgJiAweGZmKTsKKwlzdGF0aWMgY29uc3QgaW50IGFkODQwMl9jb21lZGlfdWRlbGF5ID0gMTsKKworCXByaXYoZGV2KS0+YWQ4NDAyX3N0YXRlW2NoYW5uZWxdID0gdmFsdWU7CisKKwlyZWdpc3Rlcl9iaXRzID0gU0VMRUNUXzg0MDJfNjRYWF9CSVQ7CisJY29tZWRpX3VkZWxheShhZDg0MDJfY29tZWRpX3VkZWxheSk7CisJd3JpdGV3KHJlZ2lzdGVyX2JpdHMsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCisJZm9yIChiaXQgPSAxIDw8IChiaXRzdHJlYW1fbGVuZ3RoIC0gMSk7IGJpdDsgYml0ID4+PSAxKSB7CisJCWlmIChiaXRzdHJlYW0gJiBiaXQpCisJCQlyZWdpc3Rlcl9iaXRzIHw9IFNFUklBTF9EQVRBX0lOX0JJVDsKKwkJZWxzZQorCQkJcmVnaXN0ZXJfYml0cyAmPSB+U0VSSUFMX0RBVEFfSU5fQklUOworCQljb21lZGlfdWRlbGF5KGFkODQwMl9jb21lZGlfdWRlbGF5KTsKKwkJd3JpdGV3KHJlZ2lzdGVyX2JpdHMsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCQljb21lZGlfdWRlbGF5KGFkODQwMl9jb21lZGlfdWRlbGF5KTsKKwkJd3JpdGV3KHJlZ2lzdGVyX2JpdHMgfCBTRVJJQUxfQ0xPQ0tfQklULAorCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJfQorCisJY29tZWRpX3VkZWxheShhZDg0MDJfY29tZWRpX3VkZWxheSk7CisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworfQorCisvKiBmb3IgcGNpLWRhczY0MDIvMTYsIGNoYW5uZWwgMCBpcyBhbmFsb2cgaW5wdXQgZ2FpbiBhbmQgY2hhbm5lbCAxIGlzIG9mZnNldCAqLworc3RhdGljIGludCBhZDg0MDJfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIHJldHVybiBpbW1lZGlhdGVseSBpZiBzZXR0aW5nIGhhc24ndCBjaGFuZ2VkLCBzaW5jZQorCSAqIHByb2dyYW1taW5nIHRoZXNlIHRoaW5ncyBpcyBzbG93ICovCisJaWYgKHByaXYoZGV2KS0+YWQ4NDAyX3N0YXRlW2NoYW5uZWxdID09IGRhdGFbMF0pCisJCXJldHVybiAxOworCisJcHJpdihkZXYpLT5hZDg0MDJfc3RhdGVbY2hhbm5lbF0gPSBkYXRhWzBdOworCisJYWQ4NDAyX3dyaXRlKGRldiwgY2hhbm5lbCwgZGF0YVswXSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhZDg0MDJfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZGF0YVswXSA9IHByaXYoZGV2KS0+YWQ4NDAyX3N0YXRlW2NoYW5uZWxdOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1aW50MTZfdCByZWFkX2VlcHJvbShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCBhZGRyZXNzKQoreworCXN0YXRpYyBjb25zdCBpbnQgYml0c3RyZWFtX2xlbmd0aCA9IDExOworCXN0YXRpYyBjb25zdCBpbnQgcmVhZF9jb21tYW5kID0gMHg2OworCXVuc2lnbmVkIGludCBiaXRzdHJlYW0gPSAocmVhZF9jb21tYW5kIDw8IDgpIHwgYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgYml0OworCXZvaWQgKmNvbnN0IHBseF9jb250cm9sX2FkZHIgPQorCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHOworCXVpbnQxNl90IHZhbHVlOworCXN0YXRpYyBjb25zdCBpbnQgdmFsdWVfbGVuZ3RoID0gMTY7CisJc3RhdGljIGNvbnN0IGludCBlZXByb21fY29tZWRpX3VkZWxheSA9IDE7CisKKwljb21lZGlfdWRlbGF5KGVlcHJvbV9jb21lZGlfdWRlbGF5KTsKKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9DTEsgJiB+Q1RMX0VFX0NTOworCS8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBzZW5kIGFueXRoaW5nIHRvIHRoZSBpMmMgYnVzIG9uIDQwMjAKKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgfD0gQ1RMX1VTRVJPOworCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCS8vIGFjdGl2YXRlIHNlcmlhbCBlZXByb20KKwljb21lZGlfdWRlbGF5KGVlcHJvbV9jb21lZGlfdWRlbGF5KTsKKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgfD0gQ1RMX0VFX0NTOworCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCisJLy8gd3JpdGUgcmVhZCBjb21tYW5kIGFuZCBkZXNpcmVkIG1lbW9yeSBhZGRyZXNzCisJZm9yIChiaXQgPSAxIDw8IChiaXRzdHJlYW1fbGVuZ3RoIC0gMSk7IGJpdDsgYml0ID4+PSAxKSB7CisJCS8vIHNldCBiaXQgdG8gYmUgd3JpdHRlbgorCQljb21lZGlfdWRlbGF5KGVlcHJvbV9jb21lZGlfdWRlbGF5KTsKKwkJaWYgKGJpdHN0cmVhbSAmIGJpdCkKKwkJCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBDVExfRUVfVzsKKwkJZWxzZQorCQkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzICY9IH5DVExfRUVfVzsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCS8vIGNsb2NrIGluIGJpdAorCQljb21lZGlfdWRlbGF5KGVlcHJvbV9jb21lZGlfdWRlbGF5KTsKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzIHw9IENUTF9FRV9DTEs7CisJCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCQljb21lZGlfdWRlbGF5KGVlcHJvbV9jb21lZGlfdWRlbGF5KTsKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzICY9IH5DVExfRUVfQ0xLOworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwl9CisJLy8gcmVhZCBiYWNrIHZhbHVlIGZyb20gZWVwcm9tIG1lbW9yeSBsb2NhdGlvbgorCXZhbHVlID0gMDsKKwlmb3IgKGJpdCA9IDEgPDwgKHZhbHVlX2xlbmd0aCAtIDEpOyBiaXQ7IGJpdCA+Pj0gMSkgeworCQkvLyBjbG9jayBvdXQgYml0CisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgfD0gQ1RMX0VFX0NMSzsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9DTEs7CisJCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCQljb21lZGlfdWRlbGF5KGVlcHJvbV9jb21lZGlfdWRlbGF5KTsKKwkJaWYgKHJlYWRsKHBseF9jb250cm9sX2FkZHIpICYgQ1RMX0VFX1IpCisJCQl2YWx1ZSB8PSBiaXQ7CisJfQorCisJLy8gZGVhY3RpdmF0ZSBlZXByb20gc2VyaWFsIGlucHV0CisJY29tZWRpX3VkZWxheShlZXByb21fY29tZWRpX3VkZWxheSk7CisJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzICY9IH5DVExfRUVfQ1M7CisJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgZWVwcm9tX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IHJlYWRfZWVwcm9tKGRldiwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOworCisJcmV0dXJuIDE7Cit9CisKKy8qIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCByb3VuZHMgZGVzaXJlZCB0aW1pbmcgdG8gYW4gYWNoaWV2YWJsZSB0aW1lLCBhbmQKKyAqIHNldHMgY21kIG1lbWJlcnMgYXBwcm9wcmlhdGVseS4KKyAqIGFkYyBwYWNlcyBjb252ZXJzaW9ucyBmcm9tIG1hc3RlciBjbG9jayBieSBkaXZpZGluZyBieSAoeCArIDMpIHdoZXJlIHggaXMgMjQgYml0IG51bWJlcgorICovCitzdGF0aWMgdm9pZCBjaGVja19hZGNfdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCit7CisJdW5zaWduZWQgaW50IGNvbnZlcnRfZGl2aXNvciA9IDAsIHNjYW5fZGl2aXNvcjsKKwlzdGF0aWMgY29uc3QgaW50IG1pbl9jb252ZXJ0X2Rpdmlzb3IgPSAzOworCXN0YXRpYyBjb25zdCBpbnQgbWF4X2NvbnZlcnRfZGl2aXNvciA9CisJCW1heF9jb3VudGVyX3ZhbHVlICsgbWluX2NvbnZlcnRfZGl2aXNvcjsKKwlzdGF0aWMgY29uc3QgaW50IG1pbl9zY2FuX2Rpdmlzb3JfNDAyMCA9IDI7CisJdW5zaWduZWQgbG9uZyBsb25nIG1heF9zY2FuX2Rpdmlzb3IsIG1pbl9zY2FuX2Rpdmlzb3I7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQl9IGVsc2UgeworCQkJY29udmVydF9kaXZpc29yID0KKwkJCQlnZXRfZGl2aXNvcihjbWQtPmNvbnZlcnRfYXJnLCBjbWQtPmZsYWdzKTsKKwkJCWlmIChjb252ZXJ0X2Rpdmlzb3IgPiBtYXhfY29udmVydF9kaXZpc29yKQorCQkJCWNvbnZlcnRfZGl2aXNvciA9IG1heF9jb252ZXJ0X2Rpdmlzb3I7CisJCQlpZiAoY29udmVydF9kaXZpc29yIDwgbWluX2NvbnZlcnRfZGl2aXNvcikKKwkJCQljb252ZXJ0X2Rpdmlzb3IgPSBtaW5fY29udmVydF9kaXZpc29yOworCQkJY21kLT5jb252ZXJ0X2FyZyA9IGNvbnZlcnRfZGl2aXNvciAqIFRJTUVSX0JBU0U7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpCisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlzY2FuX2Rpdmlzb3IgPSBnZXRfZGl2aXNvcihjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzKTsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkJLy8gWFhYIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93cworCQkJbWluX3NjYW5fZGl2aXNvciA9IGNvbnZlcnRfZGl2aXNvciAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCQkJbWF4X3NjYW5fZGl2aXNvciA9CisJCQkJKGNvbnZlcnRfZGl2aXNvciAqIGNtZC0+Y2hhbmxpc3RfbGVuIC0gMSkgKworCQkJCW1heF9jb3VudGVyX3ZhbHVlOworCQl9IGVsc2UgeworCQkJbWluX3NjYW5fZGl2aXNvciA9IG1pbl9zY2FuX2Rpdmlzb3JfNDAyMDsKKwkJCW1heF9zY2FuX2Rpdmlzb3IgPSBtYXhfY291bnRlcl92YWx1ZSArIG1pbl9zY2FuX2Rpdmlzb3I7CisJCX0KKwkJaWYgKHNjYW5fZGl2aXNvciA+IG1heF9zY2FuX2Rpdmlzb3IpCisJCQlzY2FuX2Rpdmlzb3IgPSBtYXhfc2Nhbl9kaXZpc29yOworCQlpZiAoc2Nhbl9kaXZpc29yIDwgbWluX3NjYW5fZGl2aXNvcikKKwkJCXNjYW5fZGl2aXNvciA9IG1pbl9zY2FuX2Rpdmlzb3I7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBzY2FuX2Rpdmlzb3IgKiBUSU1FUl9CQVNFOworCX0KKworCXJldHVybjsKK30KKworLyogR2V0cyBuZWFyZXN0IGFjaGlldmFibGUgdGltaW5nIGdpdmVuIG1hc3RlciBjbG9jayBzcGVlZCwgZG9lcyBub3QKKyAqIHRha2UgaW50byBhY2NvdW50IHBvc3NpYmxlIG1pbmltdW0vbWF4aW11bSBkaXZpc29yIHZhbHVlcy4gIFVzZWQKKyAqIGJ5IG90aGVyIHRpbWluZyBjaGVja2luZyBmdW5jdGlvbnMuICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9kaXZpc29yKHVuc2lnbmVkIGludCBucywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yOworCisJc3dpdGNoIChmbGFncyAmIFRSSUdfUk9VTkRfTUFTSykgeworCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJZGl2aXNvciA9IChucyArIFRJTUVSX0JBU0UgLSAxKSAvIFRJTUVSX0JBU0U7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQlkaXZpc29yID0gbnMgLyBUSU1FUl9CQVNFOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwlkZWZhdWx0OgorCQlkaXZpc29yID0gKG5zICsgVElNRVJfQkFTRSAvIDIpIC8gVElNRVJfQkFTRTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBkaXZpc29yOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9hb19kaXZpc29yKHVuc2lnbmVkIGludCBucywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiBnZXRfZGl2aXNvcihucywgZmxhZ3MpIC0gMjsKK30KKworLy8gYWRqdXN0cyB0aGUgc2l6ZSBvZiBoYXJkd2FyZSBmaWZvICh3aGljaCBkZXRlcm1pbmVzIGJsb2NrIHNpemUgZm9yIGRtYSB4ZmVycykKK3N0YXRpYyBpbnQgc2V0X2FpX2ZpZm9fc2l6ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG51bV9zYW1wbGVzKQoreworCXVuc2lnbmVkIGludCBudW1fZmlmb19lbnRyaWVzOworCWludCByZXR2YWw7CisJY29uc3Qgc3RydWN0IGh3X2ZpZm9faW5mbyAqY29uc3QgZmlmbyA9IGJvYXJkKGRldiktPmFpX2ZpZm87CisKKwludW1fZmlmb19lbnRyaWVzID0gbnVtX3NhbXBsZXMgLyBmaWZvLT5zYW1wbGVfcGFja2luZ19yYXRpbzsKKworCXJldHZhbCA9IHNldF9haV9maWZvX3NlZ21lbnRfbGVuZ3RoKGRldiwKKwkJbnVtX2ZpZm9fZW50cmllcyAvIGZpZm8tPm51bV9zZWdtZW50cyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwludW1fc2FtcGxlcyA9IHJldHZhbCAqIGZpZm8tPm51bV9zZWdtZW50cyAqIGZpZm8tPnNhbXBsZV9wYWNraW5nX3JhdGlvOworCisJREVCVUdfUFJJTlQoInNldCBoYXJkd2FyZSBmaWZvIHNpemUgdG8gJWlcbiIsIG51bV9zYW1wbGVzKTsKKworCXJldHVybiBudW1fc2FtcGxlczsKK30KKworLy8gcXVlcnkgbGVuZ3RoIG9mIGZpZm8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWlfZmlmb19zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBwcml2KGRldiktPmFpX2ZpZm9fc2VnbWVudF9sZW5ndGggKgorCQlib2FyZChkZXYpLT5haV9maWZvLT5udW1fc2VnbWVudHMgKgorCQlib2FyZChkZXYpLT5haV9maWZvLT5zYW1wbGVfcGFja2luZ19yYXRpbzsKK30KKworc3RhdGljIGludCBzZXRfYWlfZmlmb19zZWdtZW50X2xlbmd0aChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXMpCit7CisJc3RhdGljIGNvbnN0IGludCBpbmNyZW1lbnRfc2l6ZSA9IDB4MTAwOworCWNvbnN0IHN0cnVjdCBod19maWZvX2luZm8gKmNvbnN0IGZpZm8gPSBib2FyZChkZXYpLT5haV9maWZvOworCXVuc2lnbmVkIGludCBudW1faW5jcmVtZW50czsKKwl1aW50MTZfdCBiaXRzOworCisJaWYgKG51bV9lbnRyaWVzIDwgaW5jcmVtZW50X3NpemUpCisJCW51bV9lbnRyaWVzID0gaW5jcmVtZW50X3NpemU7CisJaWYgKG51bV9lbnRyaWVzID4gZmlmby0+bWF4X3NlZ21lbnRfbGVuZ3RoKQorCQludW1fZW50cmllcyA9IGZpZm8tPm1heF9zZWdtZW50X2xlbmd0aDsKKworCS8vIDEgPT0gMjU2IGVudHJpZXMsIDIgPT0gNTEyIGVudHJpZXMsIGV0YworCW51bV9pbmNyZW1lbnRzID0gKG51bV9lbnRyaWVzICsgaW5jcmVtZW50X3NpemUgLyAyKSAvIGluY3JlbWVudF9zaXplOworCisJYml0cyA9ICh+KG51bV9pbmNyZW1lbnRzIC0gMSkpICYgZmlmby0+Zmlmb19zaXplX3JlZ19tYXNrOworCXByaXYoZGV2KS0+Zmlmb19zaXplX2JpdHMgJj0gfmZpZm8tPmZpZm9fc2l6ZV9yZWdfbWFzazsKKwlwcml2KGRldiktPmZpZm9fc2l6ZV9iaXRzIHw9IGJpdHM7CisJd3JpdGV3KHByaXYoZGV2KS0+Zmlmb19zaXplX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBGSUZPX1NJWkVfUkVHKTsKKworCXByaXYoZGV2KS0+YWlfZmlmb19zZWdtZW50X2xlbmd0aCA9IG51bV9pbmNyZW1lbnRzICogaW5jcmVtZW50X3NpemU7CisKKwlERUJVR19QUklOVCgic2V0IGhhcmR3YXJlIGZpZm8gc2VnbWVudCBsZW5ndGggdG8gJWlcbiIsCisJCXByaXYoZGV2KS0+YWlfZmlmb19zZWdtZW50X2xlbmd0aCk7CisKKwlyZXR1cm4gcHJpdihkZXYpLT5haV9maWZvX3NlZ21lbnRfbGVuZ3RoOworfQorCisvKiBwY2ktNjAyNSA4ODAwIGNhbGRhYzoKKyAqIGFkZHJlc3MgMCA9PSBkYWMgY2hhbm5lbCAwIG9mZnNldAorICogYWRkcmVzcyAxID09IGRhYyBjaGFubmVsIDAgZ2FpbgorICogYWRkcmVzcyAyID09IGRhYyBjaGFubmVsIDEgb2Zmc2V0CisgKiBhZGRyZXNzIDMgPT0gZGFjIGNoYW5uZWwgMSBnYWluCisgKiBhZGRyZXNzIDQgPT0gZmluZSBhZGMgb2Zmc2V0CisgKiBhZGRyZXNzIDUgPT0gY29hcnNlIGFkYyBvZmZzZXQKKyAqIGFkZHJlc3MgNiA9PSBjb2Fyc2UgYWRjIGdhaW4KKyAqIGFkZHJlc3MgNyA9PSBmaW5lIGFkYyBnYWluCisgKi8KKy8qIHBjaS02NDAyLzE2IHVzZXMgYWxsIDggY2hhbm5lbHMgZm9yIGRhYzoKKyAqIGFkZHJlc3MgMCA9PSBkYWMgY2hhbm5lbCAwIGZpbmUgZ2FpbgorICogYWRkcmVzcyAxID09IGRhYyBjaGFubmVsIDAgY29hcnNlIGdhaW4KKyAqIGFkZHJlc3MgMiA9PSBkYWMgY2hhbm5lbCAwIGNvYXJzZSBvZmZzZXQKKyAqIGFkZHJlc3MgMyA9PSBkYWMgY2hhbm5lbCAxIGNvYXJzZSBvZmZzZXQKKyAqIGFkZHJlc3MgNCA9PSBkYWMgY2hhbm5lbCAxIGZpbmUgZ2FpbgorICogYWRkcmVzcyA1ID09IGRhYyBjaGFubmVsIDEgY29hcnNlIGdhaW4KKyAqIGFkZHJlc3MgNiA9PSBkYWMgY2hhbm5lbCAwIGZpbmUgb2Zmc2V0CisgKiBhZGRyZXNzIDcgPT0gZGFjIGNoYW5uZWwgMSBmaW5lIG9mZnNldAorKi8KKworc3RhdGljIGludCBjYWxkYWNfODgwMF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCisJdWludDhfdCB2YWx1ZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IG51bV9jYWxkYWNfY2hhbm5lbHMgPSA4OworCXN0YXRpYyBjb25zdCBpbnQgYml0c3RyZWFtX2xlbmd0aCA9IDExOworCXVuc2lnbmVkIGludCBiaXRzdHJlYW0gPSAoKGFkZHJlc3MgJiAweDcpIDw8IDgpIHwgdmFsdWU7CisJdW5zaWduZWQgaW50IGJpdCwgcmVnaXN0ZXJfYml0czsKKwlzdGF0aWMgY29uc3QgaW50IGNhbGRhY184ODAwX3VkZWxheSA9IDE7CisKKwlpZiAoYWRkcmVzcyA+PSBudW1fY2FsZGFjX2NoYW5uZWxzKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpbGxlZ2FsIGNhbGRhYyBjaGFubmVsIik7CisJCXJldHVybiAtMTsKKwl9CisJZm9yIChiaXQgPSAxIDw8IChiaXRzdHJlYW1fbGVuZ3RoIC0gMSk7IGJpdDsgYml0ID4+PSAxKSB7CisJCXJlZ2lzdGVyX2JpdHMgPSAwOworCQlpZiAoYml0c3RyZWFtICYgYml0KQorCQkJcmVnaXN0ZXJfYml0cyB8PSBTRVJJQUxfREFUQV9JTl9CSVQ7CisJCWNvbWVkaV91ZGVsYXkoY2FsZGFjXzg4MDBfdWRlbGF5KTsKKwkJd3JpdGV3KHJlZ2lzdGVyX2JpdHMsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCQlyZWdpc3Rlcl9iaXRzIHw9IFNFUklBTF9DTE9DS19CSVQ7CisJCWNvbWVkaV91ZGVsYXkoY2FsZGFjXzg4MDBfdWRlbGF5KTsKKwkJd3JpdGV3KHJlZ2lzdGVyX2JpdHMsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCX0KKwljb21lZGlfdWRlbGF5KGNhbGRhY184ODAwX3VkZWxheSk7CisJd3JpdGV3KFNFTEVDVF84ODAwX0JJVCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJY29tZWRpX3VkZWxheShjYWxkYWNfODgwMF91ZGVsYXkpOworCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKwljb21lZGlfdWRlbGF5KGNhbGRhY184ODAwX3VkZWxheSk7CisJcmV0dXJuIDA7Cit9CisKKy8vIDQwMjAgY2FsZGFjcworc3RhdGljIGludCBjYWxkYWNfaTJjX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2FsZGFjX2NoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXVpbnQ4X3Qgc2VyaWFsX2J5dGVzWzNdOworCXVpbnQ4X3QgaTJjX2FkZHI7CisJZW51bSBwb2ludGVyX2JpdHMgeworCQkvLyBtYW51YWwgaGFzIGdhaW4gYW5kIG9mZnNldCBiaXRzIHN3aXRjaGVkCisJCU9GRlNFVF8wXzIgPSAweDEsCisJCUdBSU5fMF8yID0gMHgyLAorCQlPRkZTRVRfMV8zID0gMHg0LAorCQlHQUlOXzFfMyA9IDB4OCwKKwl9OworCWVudW0gZGF0YV9iaXRzIHsKKwkJTk9UX0NMRUFSX1JFR0lTVEVSUyA9IDB4MjAsCisJfTsKKworCXN3aXRjaCAoY2FsZGFjX2NoYW5uZWwpIHsKKwljYXNlIDA6CQkvLyBjaGFuIDAgb2Zmc2V0CisJCWkyY19hZGRyID0gQ0FMREFDMF9JMkNfQUREUjsKKwkJc2VyaWFsX2J5dGVzWzBdID0gT0ZGU0VUXzBfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgkJLy8gY2hhbiAxIG9mZnNldAorCQlpMmNfYWRkciA9IENBTERBQzBfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IE9GRlNFVF8xXzM7CisJCWJyZWFrOworCWNhc2UgMjoJCS8vIGNoYW4gMiBvZmZzZXQKKwkJaTJjX2FkZHIgPSBDQUxEQUMxX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBPRkZTRVRfMF8yOworCQlicmVhazsKKwljYXNlIDM6CQkvLyBjaGFuIDMgb2Zmc2V0CisJCWkyY19hZGRyID0gQ0FMREFDMV9JMkNfQUREUjsKKwkJc2VyaWFsX2J5dGVzWzBdID0gT0ZGU0VUXzFfMzsKKwkJYnJlYWs7CisJY2FzZSA0OgkJLy8gY2hhbiAwIGdhaW4KKwkJaTJjX2FkZHIgPSBDQUxEQUMwX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBHQUlOXzBfMjsKKwkJYnJlYWs7CisJY2FzZSA1OgkJLy8gY2hhbiAxIGdhaW4KKwkJaTJjX2FkZHIgPSBDQUxEQUMwX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBHQUlOXzFfMzsKKwkJYnJlYWs7CisJY2FzZSA2OgkJLy8gY2hhbiAyIGdhaW4KKwkJaTJjX2FkZHIgPSBDQUxEQUMxX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBHQUlOXzBfMjsKKwkJYnJlYWs7CisJY2FzZSA3OgkJLy8gY2hhbiAzIGdhaW4KKwkJaTJjX2FkZHIgPSBDQUxEQUMxX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBHQUlOXzFfMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImludmFsaWQgY2FsZGFjIGNoYW5uZWxcbiIpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKwlzZXJpYWxfYnl0ZXNbMV0gPSBOT1RfQ0xFQVJfUkVHSVNURVJTIHwgKCh2YWx1ZSA+PiA4KSAmIDB4Zik7CisJc2VyaWFsX2J5dGVzWzJdID0gdmFsdWUgJiAweGZmOworCWkyY193cml0ZShkZXYsIGkyY19hZGRyLCBzZXJpYWxfYnl0ZXMsIDMpOworCXJldHVybiAwOworfQorCisvLyBUaGVpciBpMmMgcmVxdWlyZXMgYSBodWdlIGRlbGF5IG9uIHNldHRpbmcgY2xvY2sgb3IgZGF0YSBoaWdoIGZvciBzb21lIHJlYXNvbgorc3RhdGljIGNvbnN0IGludCBpMmNfaGlnaF9jb21lZGlfdWRlbGF5ID0gMTAwMDsKK3N0YXRpYyBjb25zdCBpbnQgaTJjX2xvd19jb21lZGlfdWRlbGF5ID0gMTA7CisKKy8vIHNldCBpMmMgZGF0YSBsaW5lIGhpZ2ggb3IgbG93CitzdGF0aWMgdm9pZCBpMmNfc2V0X3NkYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IHN0YXRlKQoreworCXN0YXRpYyBjb25zdCBpbnQgZGF0YV9iaXQgPSBDVExfRUVfVzsKKwl2b2lkICpwbHhfY29udHJvbF9hZGRyID0gcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9DT05UUk9MX1JFRzsKKworCWlmIChzdGF0ZSkgeworCQkvLyBzZXQgZGF0YSBsaW5lIGhpZ2gKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzICY9IH5kYXRhX2JpdDsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoaTJjX2hpZ2hfY29tZWRpX3VkZWxheSk7CisJfSBlbHNlCQkJLy8gc2V0IGRhdGEgbGluZSBsb3cKKwl7CisJCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBkYXRhX2JpdDsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoaTJjX2xvd19jb21lZGlfdWRlbGF5KTsKKwl9Cit9CisKKy8vIHNldCBpMmMgY2xvY2sgbGluZSBoaWdoIG9yIGxvdworc3RhdGljIHZvaWQgaTJjX3NldF9zY2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBzdGF0ZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IGNsb2NrX2JpdCA9IENUTF9VU0VSTzsKKwl2b2lkICpwbHhfY29udHJvbF9hZGRyID0gcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9DT05UUk9MX1JFRzsKKworCWlmIChzdGF0ZSkgeworCQkvLyBzZXQgY2xvY2sgbGluZSBoaWdoCisJCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyAmPSB+Y2xvY2tfYml0OworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJY29tZWRpX3VkZWxheShpMmNfaGlnaF9jb21lZGlfdWRlbGF5KTsKKwl9IGVsc2UJCQkvLyBzZXQgY2xvY2sgbGluZSBsb3cKKwl7CisJCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBjbG9ja19iaXQ7CisJCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCQljb21lZGlfdWRlbGF5KGkyY19sb3dfY29tZWRpX3VkZWxheSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpMmNfd3JpdGVfYnl0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCBieXRlKQoreworCXVpbnQ4X3QgYml0OworCXVuc2lnbmVkIGludCBudW1fYml0cyA9IDg7CisKKwlERUJVR19QUklOVCgid3JpdGluZyB0byBpMmMgYnl0ZSAweCV4XG4iLCBieXRlKTsKKworCWZvciAoYml0ID0gMSA8PCAobnVtX2JpdHMgLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJaTJjX3NldF9zY2woZGV2LCAwKTsKKwkJaWYgKChieXRlICYgYml0KSkKKwkJCWkyY19zZXRfc2RhKGRldiwgMSk7CisJCWVsc2UKKwkJCWkyY19zZXRfc2RhKGRldiwgMCk7CisJCWkyY19zZXRfc2NsKGRldiwgMSk7CisJfQorfQorCisvLyB3ZSBjYW4ndCByZWFsbHkgcmVhZCB0aGUgbGluZXMsIHNvIGZha2UgaXQKK3N0YXRpYyBpbnQgaTJjX3JlYWRfYWNrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWkyY19zZXRfc2NsKGRldiwgMCk7CisJaTJjX3NldF9zZGEoZGV2LCAxKTsKKwlpMmNfc2V0X3NjbChkZXYsIDEpOworCisJcmV0dXJuIDA7CQkvLyByZXR1cm4gZmFrZSBhY2tub3dsZWRnZSBiaXQKK30KKworLy8gc2VuZCBzdGFydCBiaXQKK3N0YXRpYyB2b2lkIGkyY19zdGFydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpMmNfc2V0X3NjbChkZXYsIDEpOworCWkyY19zZXRfc2RhKGRldiwgMSk7CisJaTJjX3NldF9zZGEoZGV2LCAwKTsKK30KKworLy8gc2VuZCBzdG9wIGJpdAorc3RhdGljIHZvaWQgaTJjX3N0b3Aoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaTJjX3NldF9zY2woZGV2LCAwKTsKKwlpMmNfc2V0X3NkYShkZXYsIDApOworCWkyY19zZXRfc2NsKGRldiwgMSk7CisJaTJjX3NldF9zZGEoZGV2LCAxKTsKK30KKworc3RhdGljIHZvaWQgaTJjX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywKKwljb25zdCB1aW50OF90ICogZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1aW50OF90IGJpdHN0cmVhbTsKKwlzdGF0aWMgY29uc3QgaW50IHJlYWRfYml0ID0gMHgxOworCisvL1hYWCBuZWVkIG11dGV4IHRvIHByZXZlbnQgc2ltdWx0YW5lb3VzIGF0dGVtcHRzIHRvIGFjY2VzcyBlZXByb20gYW5kIGkyYyBidXMKKworCS8vIG1ha2Ugc3VyZSB3ZSBkb250IHNlbmQgYW55dGhpbmcgdG8gZWVwcm9tCisJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzICY9IH5DVExfRUVfQ1M7CisKKwlpMmNfc3RvcChkZXYpOworCWkyY19zdGFydChkZXYpOworCisJLy8gc2VuZCBhZGRyZXNzIGFuZCB3cml0ZSBiaXQKKwliaXRzdHJlYW0gPSAoYWRkcmVzcyA8PCAxKSAmIH5yZWFkX2JpdDsKKwlpMmNfd3JpdGVfYnl0ZShkZXYsIGJpdHN0cmVhbSk7CisKKwkvLyBnZXQgYWNrbm93bGVkZ2UKKwlpZiAoaTJjX3JlYWRfYWNrKGRldikgIT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiaTJjIHdyaXRlIGZhaWxlZDogbm8gYWNrbm93bGVkZ2UiKTsKKwkJaTJjX3N0b3AoZGV2KTsKKwkJcmV0dXJuOworCX0KKwkvLyB3cml0ZSBkYXRhIGJ5dGVzCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCWkyY193cml0ZV9ieXRlKGRldiwgZGF0YVtpXSk7CisJCWlmIChpMmNfcmVhZF9hY2soZGV2KSAhPSAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiaTJjIHdyaXRlIGZhaWxlZDogbm8gYWNrbm93bGVkZ2UiKTsKKwkJCWkyY19zdG9wKGRldik7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaTJjX3N0b3AoZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkZGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBhNWViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCkBAIC0wLDAgKzEsODQxIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCisgICAgVGhpcyBpbnRlbmRzIHRvIGJlIGEgZHJpdmVyIGZvciB0aGUgQ29tcHV0ZXJCb2FyZHMgLyBNZWFzdXJlbWVudENvbXB1dGluZworICAgIFBDSS1EREEgc2VyaWVzLgorCisJIENvcHlyaWdodCAoQykgMjAwMSBJdmFuIE1hcnRpbmV6IDxpdmFubXJAYWx0YXZpc3RhLmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5Ny04IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjYl9wY2lkZGEKK0Rlc2NyaXB0aW9uOiBNZWFzdXJlbWVudENvbXB1dGluZyBQQ0ktRERBIHNlcmllcworQXV0aG9yOiBJdmFuIE1hcnRpbmV6IDxpdmFubXJAYWx0YXZpc3RhLmNvbT4sIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK1N0YXR1czogU3VwcG9ydHMgMDgvMTYsIDA0LzE2LCAwMi8xNiwgMDgvMTIsIDA0LzEyLCBhbmQgMDIvMTIKK0RldmljZXM6IFtNZWFzdXJlbWVudCBDb21wdXRpbmddIFBDSS1EREEwOC8xMiAoY2JfcGNpZGRhKSwgUENJLUREQTA0LzEyLAorICBQQ0ktRERBMDIvMTIsIFBDSS1EREEwOC8xNiwgUENJLUREQTA0LzE2LCBQQ0ktRERBMDIvMTYKKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJCisgIGRldmljZSB3aWxsIGJlIHVzZWQuCisKK09ubHkgc2ltcGxlIGFuYWxvZyBvdXRwdXQgd3JpdGluZyBpcyBzdXBwb3J0ZWQuCisKK1NvIGZhciBpdCBoYXMgb25seSBiZWVuIHRlc3RlZCB3aXRoOgorICAtIFBDSS1EREEwOC8xMgorUGxlYXNlIHJlcG9ydCBzdWNjZXNzL2ZhaWx1cmUgd2l0aCBvdGhlciBkaWZmZXJlbnQgY2FyZHMgdG8KKzxjb21lZGlAY29tZWRpLm9yZz4uCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0IJMHgxMzA3CS8vIFBDSSB2ZW5kb3IgbnVtYmVyIG9mIENvbXB1dGVyQm9hcmRzCisjZGVmaW5lIE5fQk9BUkRTCTEwCS8vIE51bWJlciBvZiBib2FyZHMgaW4gY2JfcGNpZGRhX2JvYXJkcworI2RlZmluZSBFRVBST01fU0laRQkxMjgJLy8gbnVtYmVyIG9mIGVudHJpZXMgaW4gZWVwcm9tCisjZGVmaW5lIE1BWF9BT19DSEFOTkVMUyA4CS8vIG1heGltdW0gbnVtYmVyIG9mIGFvIGNoYW5uZWxzIGZvciBzdXBwb3J0ZWQgYm9hcmRzCisKKy8qIFBDSS1EREEgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgRElHSVRBTElPX0JBRFJJTkRFWAkyCisJLy8gRElHSVRBTCBJL08gaXMgcGNpX2Rldi0+cmVzb3VyY2VbMl0KKyNkZWZpbmUgRElHSVRBTElPX1NJWkUgOAorCS8vIERJR0lUQUwgSS9PIHVzZXMgOCBJL08gcG9ydCBhZGRyZXNzZXMKKyNkZWZpbmUgREFDX0JBRFJJTkRFWAkzCisJLy8gREFDIGlzIHBjaV9kZXYtPnJlc291cmNlWzNdCisKKy8qIERpZ2l0YWwgSS9PIHJlZ2lzdGVycyAqLworI2RlZmluZSBQT1JUMUEgMAkJLy8gUE9SVCAxQSBEQVRBCisKKyNkZWZpbmUgUE9SVDFCIDEJCS8vIFBPUlQgMUIgREFUQQorCisjZGVmaW5lIFBPUlQxQyAyCQkvLyBQT1JUIDFDIERBVEEKKworI2RlZmluZSBDT05UUk9MMSAzCQkvLyBDT05UUk9MIFJFR0lTVEVSIDEKKworI2RlZmluZSBQT1JUMkEgNAkJLy8gUE9SVCAyQSBEQVRBCisKKyNkZWZpbmUgUE9SVDJCIDUJCS8vIFBPUlQgMkIgREFUQQorCisjZGVmaW5lIFBPUlQyQyA2CQkvLyBQT1JUIDJDIERBVEEKKworI2RlZmluZSBDT05UUk9MMiA3CQkvLyBDT05UUk9MIFJFR0lTVEVSIDIKKworLyogREFDIHJlZ2lzdGVycyAqLworI2RlZmluZSBEQUNPTlRST0wJMAkvLyBEL0EgQ09OVFJPTCBSRUdJU1RFUgorI2RlZmluZQlTVQkwMDAwMDAxCQkvLyBTaW11bHRhbmVvdXMgdXBkYXRlIGVuYWJsZWQKKyNkZWZpbmUgTk9TVQkwMDAwMDAwCQkvLyBTaW11bHRhbmVvdXMgdXBkYXRlIGRpc2FibGVkCisjZGVmaW5lCUVOQUJMRURBQwkwMDAwMDAyCS8vIEVuYWJsZSBzcGVjaWZpZWQgREFDCisjZGVmaW5lCURJU0FCTEVEQUMJMDAwMDAwMAkvLyBEaXNhYmxlIHNwZWNpZmllZCBEQUMKKyNkZWZpbmUgUkFOR0UyVjUJMDAwMDAwMAkvLyAyLjVWCisjZGVmaW5lIFJBTkdFNVYJMDAwMDIwMAkJLy8gNVYKKyNkZWZpbmUgUkFOR0UxMFYJMDAwMDMwMAkvLyAxMFYKKyNkZWZpbmUgVU5JUAkwMDAwNDAwCQkvLyBVbmlwb2xhciBvdXRwdXRzCisjZGVmaW5lIEJJUAkwMDAwMDAwCQkvLyBCaXBvbGFyIG91dHB1dHMKKworI2RlZmluZSBEQUNBTElCUkFUSU9OMQk0CS8vIEQvQSBDQUxJQlJBVElPTiBSRUdJU1RFUiAxCisvL3dyaXRlIGJpdHMKKyNkZWZpbmUJU0VSSUFMX0lOX0JJVAkweDEJLy8gc2VyaWFsIGRhdGEgaW5wdXQgZm9yIGVlcHJvbSwgY2FsZGFjcywgcmVmZXJlbmNlIGRhYworI2RlZmluZQlDQUxfQ0hBTk5FTF9NQVNLCSgweDcgPDwgMSkKKyNkZWZpbmUJQ0FMX0NIQU5ORUxfQklUUyhjaGFubmVsKQkoKChjaGFubmVsKSA8PCAxKSAmIENBTF9DSEFOTkVMX01BU0spCisvL3JlYWQgYml0cworI2RlZmluZQlDQUxfQ09VTlRFUl9NQVNLCTB4MWYKKyNkZWZpbmUJQ0FMX0NPVU5URVJfT1ZFUkZMT1dfQklUCTB4MjAJLy8gY2FsaWJyYXRpb24gY291bnRlciBvdmVyZmxvdyBzdGF0dXMgYml0CisjZGVmaW5lCUFPX0JFTE9XX1JFRl9CSVQJMHg0MAkvLyBhbmFsb2cgb3V0cHV0IGlzIGxlc3MgdGhhbiByZWZlcmVuY2UgZGFjIHZvbHRhZ2UKKyNkZWZpbmUJU0VSSUFMX09VVF9CSVQJMHg4MAkvLyBzZXJpYWwgZGF0YSBvdXQsIGZvciByZWFkaW5nIGZyb20gZWVwcm9tCisKKyNkZWZpbmUgREFDQUxJQlJBVElPTjIJNgkvLyBEL0EgQ0FMSUJSQVRJT04gUkVHSVNURVIgMgorI2RlZmluZQlTRUxFQ1RfRUVQUk9NX0JJVAkweDEJLy8gc2VuZCBzZXJpYWwgZGF0YSBpbiB0byBlZXByb20KKyNkZWZpbmUJREVTRUxFQ1RfUkVGX0RBQ19CSVQJMHgyCS8vIGRvbid0IHNlbmQgc2VyaWFsIGRhdGEgdG8gTUFYNTQyIHJlZmVyZW5jZSBkYWMKKyNkZWZpbmUJREVTRUxFQ1RfQ0FMREFDX0JJVChuKQkoMHg0IDw8IChuKSkJLy8gZG9uJ3Qgc2VuZCBzZXJpYWwgZGF0YSB0byBjYWxkYWMgbgorI2RlZmluZQlEVU1NWV9CSVQJMHg0MAkvLyBtYW51YWwgc2F5cyB0byBzZXQgdGhpcyBiaXQgd2l0aCBubyBleHBsYW5hdGlvbgorCisjZGVmaW5lIERBREFUQQk4CQkvLyBGSVJTVCBEL0EgREFUQSBSRUdJU1RFUiAoMCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGNiX3BjaWRkYV9yYW5nZXMgPSB7CisJNiwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCX0KK307CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgY2JfcGNpZGRhX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNoYXIgc3RhdHVzOwkJLy8gRHJpdmVyIHN0YXR1czoKKwkvLyAwIC0gdGVzdGVkCisJLy8gMSAtIG1hbnVhbCByZWFkLCBub3QgdGVzdGVkCisJLy8gMiAtIG1hbnVhbCBub3QgcmVhZAorCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZDsKKwlpbnQgYW9fY2hhbnM7CisJaW50IGFvX2JpdHM7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlczsKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNiX3BjaWRkYV9ib2FyZCBjYl9wY2lkZGFfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2ktZGRhMDIvMTIiLAorCSAgICAgIHN0YXR1czoJMSwKKwkgICAgICBkZXZpY2VfaWQ6MHgyMCwKKwkgICAgICBhb19jaGFuczoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRkYV9yYW5nZXMsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGRhMDQvMTIiLAorCSAgICAgIHN0YXR1czoJMSwKKwkgICAgICBkZXZpY2VfaWQ6MHgyMSwKKwkgICAgICBhb19jaGFuczo0LAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRkYV9yYW5nZXMsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGRhMDgvMTIiLAorCSAgICAgIHN0YXR1czoJMCwKKwkgICAgICBkZXZpY2VfaWQ6MHgyMiwKKwkgICAgICBhb19jaGFuczo4LAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRkYV9yYW5nZXMsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGRhMDIvMTYiLAorCSAgICAgIHN0YXR1czoJMiwKKwkgICAgICBkZXZpY2VfaWQ6MHgyMywKKwkgICAgICBhb19jaGFuczoyLAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRkYV9yYW5nZXMsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGRhMDQvMTYiLAorCSAgICAgIHN0YXR1czoJMiwKKwkgICAgICBkZXZpY2VfaWQ6MHgyNCwKKwkgICAgICBhb19jaGFuczo0LAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRkYV9yYW5nZXMsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGRhMDgvMTYiLAorCSAgICAgIHN0YXR1czoJMCwKKwkgICAgICBkZXZpY2VfaWQ6MHgyNSwKKwkgICAgICBhb19jaGFuczo4LAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRkYV9yYW5nZXMsCisJCX0sCit9OworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2JfcGNpZGRhX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAyMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAyMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAyNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2JfcGNpZGRhX3BjaV90YWJsZSk7CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGNiX3BjaWRkYV9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgY2JfcGNpZGRhX3ByaXZhdGUgeworCWludCBkYXRhOworCisJLyogd291bGQgYmUgdXNlZnVsIGZvciBhIFBDSSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKworCXVuc2lnbmVkIGxvbmcgZGlnaXRhbGlvOworCXVuc2lnbmVkIGxvbmcgZGFjOworCS8vdW5zaWduZWQgbG9uZyBjb250cm9sX3N0YXR1czsKKwkvL3Vuc2lnbmVkIGxvbmcgYWRjX2ZpZm87CisJdW5zaWduZWQgaW50IGRhY19jYWwxX2JpdHM7CS8vIGJpdHMgbGFzdCB3cml0dGVuIHRvIGRhIGNhbGlicmF0aW9uIHJlZ2lzdGVyIDEKKwl1bnNpZ25lZCBpbnQgYW9fcmFuZ2VbTUFYX0FPX0NIQU5ORUxTXTsJLy8gY3VycmVudCByYW5nZSBzZXR0aW5ncyBmb3Igb3V0cHV0IGNoYW5uZWxzCisJdTE2IGVlcHJvbV9kYXRhW0VFUFJPTV9TSVpFXTsJLy8gc29mdHdhcmUgY29weSBvZiBib2FyZCdzIGVlcHJvbQorfTsKKworLyoKKyAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBjYl9wY2lkZGFfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBjYl9wY2lkZGFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgY2JfcGNpZGRhX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisvL3N0YXRpYyBpbnQgY2JfcGNpZGRhX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRkYV9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworLy9zdGF0aWMgaW50IGNiX3BjaWRkYV9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisvL3N0YXRpYyBpbnQgY2JfcGNpZGRhX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CisvL3N0YXRpYyBpbnQgY2JfcGNpZGRhX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsaW50IHJvdW5kKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2JfcGNpZGRhX3NlcmlhbF9pbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBjYl9wY2lkZGFfc2VyaWFsX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlLAorCXVuc2lnbmVkIGludCBudW1fYml0cyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGNiX3BjaWRkYV9yZWFkX2VlcHJvbShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgYWRkcmVzcyk7CitzdGF0aWMgdm9pZCBjYl9wY2lkZGFfY2FsaWJyYXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UpOworCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9jYl9wY2lkZGEgPSB7CisgICAgICBkcml2ZXJfbmFtZToiY2JfcGNpZGRhIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpjYl9wY2lkZGFfYXR0YWNoLAorICAgICAgZGV0YWNoOmNiX3BjaWRkYV9kZXRhY2gsCit9OworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuCisgKi8KK3N0YXRpYyBpbnQgY2JfcGNpZGRhX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCWludCBpbmRleDsKKworCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRkYTogIiwgZGV2LT5taW5vcik7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4KKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBjYl9wY2lkZGFfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKy8qCisgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgorICovCisJcHJpbnRrKCJcbiIpOworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwkJaWYgKHBjaWRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ0IpIHsKKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5fQk9BUkRTOyBpbmRleCsrKSB7CisJCQkJaWYgKGNiX3BjaWRkYV9ib2FyZHNbaW5kZXhdLmRldmljZV9pZCA9PQorCQkJCQlwY2lkZXYtPmRldmljZSkgeworCQkJCQlnb3RvIGZvdW5kOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoIXBjaWRldikgeworCQlwcmludGsoIk5vdCBhIENvbXB1dGVyQm9hcmRzL01lYXN1cmVtZW50Q29tcHV0aW5nIGNhcmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorICAgICAgZm91bmQ6CisJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwlkZXYtPmJvYXJkX3B0ciA9IGNiX3BjaWRkYV9ib2FyZHMgKyBpbmRleDsKKwkvLyAidGhpc2JvYXJkIiBtYWNybyBjYW4gYmUgdXNlZCBmcm9tIGhlcmUuCisJcHJpbnRrKCJGb3VuZCAlcyBhdCByZXF1ZXN0ZWQgcG9zaXRpb25cbiIsIHRoaXNib2FyZC0+bmFtZSk7CisKKwkvKgorCSAqIEVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMuCisJICovCisJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgdGhpc2JvYXJkLT5uYW1lKSkgeworCQlwcmludGsoImNiX3BjaWRkYTogZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgSS9PIHBvcnRzLgorICovCisJZGV2cHJpdi0+ZGlnaXRhbGlvID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIERJR0lUQUxJT19CQURSSU5ERVgpOworCWRldnByaXYtPmRhYyA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCBEQUNfQkFEUklOREVYKTsKKworLyoKKyAqIFdhcm4gYWJvdXQgdGhlIHN0YXR1cyBvZiB0aGUgZHJpdmVyLgorICovCisJaWYgKHRoaXNib2FyZC0+c3RhdHVzID09IDIpCisJCXByaW50aygiV0FSTklORzogRFJJVkVSIEZPUiBUSElTIEJPQVJEIE5PVCBDSEVDS0VEIFdJVEggTUFOVUFMLiAiICJXT1JLUyBBU1NVTUlORyBGVUxMIENPTVBBVElCSUxJVFkgV0lUSCBQQ0ktRERBMDgvMTIuICIgIlBMRUFTRSBSRVBPUlQgVVNBR0UgVE8gPGl2YW5tckBhbHRhdmlzdGEuY29tPi5cbiIpOworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuCisgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPnJhbmdlczsKKwlzLT5pbnNuX3dyaXRlID0gY2JfcGNpZGRhX2FvX3dpbnNuOworLy8gICAgICBzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOworLy8gICAgICBzLT5kb19jbWQgPSBjYl9wY2lkZGFfYWlfY21kOworLy8gICAgICBzLT5kb19jbWR0ZXN0ID0gY2JfcGNpZGRhX2FpX2NtZHRlc3Q7CisKKwkvLyB0d28gODI1NSBkaWdpdGFsIGlvIHN1YmRldmljZXMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2cHJpdi0+ZGlnaXRhbGlvKTsKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2cHJpdi0+ZGlnaXRhbGlvICsgUE9SVDJBKTsKKworCXByaW50aygiIGVlcHJvbToiKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBFRVBST01fU0laRTsgaW5kZXgrKykgeworCQlkZXZwcml2LT5lZXByb21fZGF0YVtpbmRleF0gPSBjYl9wY2lkZGFfcmVhZF9lZXByb20oZGV2LCBpbmRleCk7CisJCXByaW50aygiICVpOjB4JXggIiwgaW5kZXgsIGRldnByaXYtPmVlcHJvbV9kYXRhW2luZGV4XSk7CisJfQorCXByaW50aygiXG4iKTsKKworCS8vIHNldCBjYWxpYnJhdGlvbnMgZGFjcworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRoaXNib2FyZC0+YW9fY2hhbnM7IGluZGV4KyspCisJCWNiX3BjaWRkYV9jYWxpYnJhdGUoZGV2LCBpbmRleCwgZGV2cHJpdi0+YW9fcmFuZ2VbaW5kZXhdKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IGNiX3BjaWRkYV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisvKgorICogRGVhbGxvY2F0ZSB0aGUgSS9PIHBvcnRzLgorICovCisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCWlmIChkZXZwcml2LT5kYWMpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCX0KKwkvLyBjbGVhbnVwIDgyNTUKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAxKTsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCX0KKworCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRkYTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSSB3aWxsIHByb2dyYW0gdGhpcyBsYXRlci4uLiA7LSkKKyAqLworI2lmIDAKK3N0YXRpYyBpbnQgY2JfcGNpZGRhX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXByaW50aygiY2JfcGNpZGRhX2FpX2NtZFxuIik7CisJcHJpbnRrKCJzdWJkZXY6ICVkXG4iLCBjbWQtPnN1YmRldik7CisJcHJpbnRrKCJmbGFnczogJWRcbiIsIGNtZC0+ZmxhZ3MpOworCXByaW50aygic3RhcnRfc3JjOiAlZFxuIiwgY21kLT5zdGFydF9zcmMpOworCXByaW50aygic3RhcnRfYXJnOiAlZFxuIiwgY21kLT5zdGFydF9hcmcpOworCXByaW50aygic2Nhbl9iZWdpbl9zcmM6ICVkXG4iLCBjbWQtPnNjYW5fYmVnaW5fc3JjKTsKKwlwcmludGsoImNvbnZlcnRfc3JjOiAlZFxuIiwgY21kLT5jb252ZXJ0X3NyYyk7CisJcHJpbnRrKCJjb252ZXJ0X2FyZzogJWRcbiIsIGNtZC0+Y29udmVydF9hcmcpOworCXByaW50aygic2Nhbl9lbmRfc3JjOiAlZFxuIiwgY21kLT5zY2FuX2VuZF9zcmMpOworCXByaW50aygic2Nhbl9lbmRfYXJnOiAlZFxuIiwgY21kLT5zY2FuX2VuZF9hcmcpOworCXByaW50aygic3RvcF9zcmM6ICVkXG4iLCBjbWQtPnN0b3Bfc3JjKTsKKwlwcmludGsoInN0b3BfYXJnOiAlZFxuIiwgY21kLT5zdG9wX2FyZyk7CisJcHJpbnRrKCJjaGFubGlzdF9sZW46ICVkXG4iLCBjbWQtPmNoYW5saXN0X2xlbik7Cit9CisjZW5kaWYKKworI2lmIDAKK3N0YXRpYyBpbnQgY2JfcGNpZGRhX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogY21kdGVzdCB0ZXN0cyBhIHBhcnRpY3VsYXIgY29tbWFuZCB0byBzZWUgaWYgaXQgaXMgdmFsaWQuCisJICogVXNpbmcgdGhlIGNtZHRlc3QgaW9jdGwsIGEgdXNlciBjYW4gY3JlYXRlIGEgdmFsaWQgY21kCisJICogYW5kIHRoZW4gaGF2ZSBpdCBleGVjdXRlcyBieSB0aGUgY21kIGlvY3RsLgorCSAqCisJICogY21kdGVzdCByZXR1cm5zIDEsMiwzLDQgb3IgMCwgZGVwZW5kaW5nIG9uIHdoaWNoIHRlc3RzCisJICogdGhlIGNvbW1hbmQgcGFzc2VzLiAqLworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUgorCQkmJiBjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRUQJMTAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKyNkZWZpbmUgTUlOX1NQRUVECTEwMDAwMDAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzaG91bGQgYmUgbGV2ZWwvZWRnZSwgaGkvbG8gc3BlY2lmaWNhdGlvbiBoZXJlICovCisJCS8qIHNob3VsZCBzcGVjaWZ5IG11bHRpcGxlIGV4dGVybmFsIHRyaWdnZXJzICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gOSkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDk7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgTUFYX1NQRUVEKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gTUFYX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiBNSU5fU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNSU5fU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2VlIGFib3ZlICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gOSkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDk7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoY21kLT5zdG9wX2FyZyA+IDB4MDBmZmZmZmYpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAweDAwZmZmZmZmOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQljYl9wY2lkZGFfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJY2JfcGNpZGRhX25zX3RvX3RpbWVyKCZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCisJCQljbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCByZXF1aXJlIGEgcGFydGljdWxhciBmb3JtLCB0aGlzIGlzIGp1c3QKKyAqIHdoYXQgaGFwcGVucyB0byBiZSB1c2VkIGluIHNvbWUgb2YgdGhlIGRyaXZlcnMuICBJdCBzaG91bGQKKyAqIGNvbnZlcnQgbnMgbmFub3NlY29uZHMgdG8gYSBjb3VudGVyIHZhbHVlIHN1aXRhYmxlIGZvciBwcm9ncmFtbWluZworICogdGhlIGRldmljZS4gIEFsc28sIGl0IHNob3VsZCBhZGp1c3QgbnMgc28gdGhhdCBpdCBjb29yZXNwb25kcyB0bworICogdGhlIGFjdHVhbCB0aW1lIHRoYXQgdGhlIGRldmljZSB3aWxsIHVzZS4gKi8KKyNpZiAwCitzdGF0aWMgaW50IGNiX3BjaWRkYV9uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCBpbnQgcm91bmQpCit7CisJLyogdHJpdmlhbCB0aW1lciAqLworCXJldHVybiAqbnM7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBjYl9wY2lkZGFfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjb21tYW5kOworCXVuc2lnbmVkIGludCBjaGFubmVsLCByYW5nZTsKKworCWNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKworCS8vIGFkanVzdCBjYWxpYnJhdGlvbiBkYWNzIGlmIHJhbmdlIGhhcyBjaGFuZ2VkCisJaWYgKHJhbmdlICE9IGRldnByaXYtPmFvX3JhbmdlW2NoYW5uZWxdKQorCQljYl9wY2lkZGFfY2FsaWJyYXRlKGRldiwgY2hhbm5lbCwgcmFuZ2UpOworCisJLyogb3V0cHV0IGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCWNvbW1hbmQgPSBOT1NVIHwgRU5BQkxFREFDOworCisJLyogb3V0cHV0IGNoYW5uZWwgcmFuZ2UgKi8KKwlzd2l0Y2ggKHJhbmdlKSB7CisJY2FzZSAwOgorCQljb21tYW5kIHw9IEJJUCB8IFJBTkdFMTBWOworCQlicmVhazsKKwljYXNlIDE6CisJCWNvbW1hbmQgfD0gQklQIHwgUkFOR0U1VjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljb21tYW5kIHw9IEJJUCB8IFJBTkdFMlY1OworCQlicmVhazsKKwljYXNlIDM6CisJCWNvbW1hbmQgfD0gVU5JUCB8IFJBTkdFMTBWOworCQlicmVhazsKKwljYXNlIDQ6CisJCWNvbW1hbmQgfD0gVU5JUCB8IFJBTkdFNVY7CisJCWJyZWFrOworCWNhc2UgNToKKwkJY29tbWFuZCB8PSBVTklQIHwgUkFOR0UyVjU7CisJCWJyZWFrOworCX07CisKKwkvKiBvdXRwdXQgY2hhbm5lbCBzcGVjaWZpY2F0aW9uICovCisJY29tbWFuZCB8PSBjaGFubmVsIDw8IDI7CisJb3V0dyhjb21tYW5kLCBkZXZwcml2LT5kYWMgKyBEQUNPTlRST0wpOworCisJLyogd3JpdGUgZGF0YSAqLworCW91dHcoZGF0YVswXSwgZGV2cHJpdi0+ZGFjICsgREFEQVRBICsgY2hhbm5lbCAqIDIpOworCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gMTsKK30KKworLy8gbG93bGV2ZWwgcmVhZCBmcm9tIGVlcHJvbQorc3RhdGljIHVuc2lnbmVkIGludCBjYl9wY2lkZGFfc2VyaWFsX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisJaW50IGk7CisJY29uc3QgaW50IHZhbHVlX3dpZHRoID0gMTY7CS8vIG51bWJlciBvZiBiaXRzIHdpZGUgdmFsdWVzIGFyZQorCisJZm9yIChpID0gMTsgaSA8PSB2YWx1ZV93aWR0aDsgaSsrKSB7CisJCS8vIHJlYWQgYml0cyBtb3N0IHNpZ25pZmljYW50IGJpdCBmaXJzdAorCQlpZiAoaW53X3AoZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjEpICYgU0VSSUFMX09VVF9CSVQpIHsKKwkJCXZhbHVlIHw9IDEgPDwgKHZhbHVlX3dpZHRoIC0gaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8vIGxvd2xldmVsIHdyaXRlIHRvIGVlcHJvbS9kYWMKK3N0YXRpYyB2b2lkIGNiX3BjaWRkYV9zZXJpYWxfb3V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUsCisJdW5zaWduZWQgaW50IG51bV9iaXRzKQoreworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8PSBudW1fYml0czsgaSsrKSB7CisJCS8vIHNlbmQgYml0cyBtb3N0IHNpZ25pZmljYW50IGJpdCBmaXJzdAorCQlpZiAodmFsdWUgJiAoMSA8PCAobnVtX2JpdHMgLSBpKSkpCisJCQlkZXZwcml2LT5kYWNfY2FsMV9iaXRzIHw9IFNFUklBTF9JTl9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmRhY19jYWwxX2JpdHMgJj0gflNFUklBTF9JTl9CSVQ7CisJCW91dHdfcChkZXZwcml2LT5kYWNfY2FsMV9iaXRzLCBkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMSk7CisJfQorfQorCisvLyByZWFkcyBhIDE2IGJpdCB2YWx1ZSBmcm9tIGJvYXJkJ3MgZWVwcm9tCitzdGF0aWMgdW5zaWduZWQgaW50IGNiX3BjaWRkYV9yZWFkX2VlcHJvbShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgY2FsMl9iaXRzOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwljb25zdCBpbnQgbWF4X251bV9jYWxkYWNzID0gNDsJLy8gb25lIGNhbGRhYyBmb3IgZXZlcnkgdHdvIGRhYyBjaGFubmVscworCWNvbnN0IGludCByZWFkX2luc3RydWN0aW9uID0gMHg2OwkvLyBiaXRzIHRvIHNlbmQgdG8gdGVsbCBlZXByb20gd2Ugd2FudCB0byByZWFkCisJY29uc3QgaW50IGluc3RydWN0aW9uX2xlbmd0aCA9IDM7CisJY29uc3QgaW50IGFkZHJlc3NfbGVuZ3RoID0gODsKKworCS8vIHNlbmQgc2VyaWFsIG91dHB1dCBzdHJlYW0gdG8gZWVwcm9tCisJY2FsMl9iaXRzID0gU0VMRUNUX0VFUFJPTV9CSVQgfCBERVNFTEVDVF9SRUZfREFDX0JJVCB8IERVTU1ZX0JJVDsKKwkvLyBkZWFjdGl2YXRlIGNhbGRhY3MgKG9uZSBjYWxkYWMgZm9yIGV2ZXJ5IHR3byBjaGFubmVscykKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X251bV9jYWxkYWNzOyBpKyspIHsKKwkJY2FsMl9iaXRzIHw9IERFU0VMRUNUX0NBTERBQ19CSVQoaSk7CisJfQorCW91dHdfcChjYWwyX2JpdHMsIGRldnByaXYtPmRhYyArIERBQ0FMSUJSQVRJT04yKTsKKworCS8vIHRlbGwgZWVwcm9tIHdlIHdhbnQgdG8gcmVhZAorCWNiX3BjaWRkYV9zZXJpYWxfb3V0KGRldiwgcmVhZF9pbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb25fbGVuZ3RoKTsKKwkvLyBzZW5kIGFkZHJlc3Mgd2Ugd2FudCB0byByZWFkIGZyb20KKwljYl9wY2lkZGFfc2VyaWFsX291dChkZXYsIGFkZHJlc3MsIGFkZHJlc3NfbGVuZ3RoKTsKKworCXZhbHVlID0gY2JfcGNpZGRhX3NlcmlhbF9pbihkZXYpOworCisJLy8gZGVhY3RpdmF0ZSBlZXByb20KKwljYWwyX2JpdHMgJj0gflNFTEVDVF9FRVBST01fQklUOworCW91dHdfcChjYWwyX2JpdHMsIGRldnByaXYtPmRhYyArIERBQ0FMSUJSQVRJT04yKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworLy8gd3JpdGVzIHRvIDggYml0IGNhbGlicmF0aW9uIGRhY3MKK3N0YXRpYyB2b2lkIGNiX3BjaWRkYV93cml0ZV9jYWxkYWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjYWxkYWMsCisJdW5zaWduZWQgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY2FsMl9iaXRzOworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IGludCBudW1fY2hhbm5lbF9iaXRzID0gMzsJLy8gY2FsZGFjcyB1c2UgMyBiaXQgY2hhbm5lbCBzcGVjaWZpY2F0aW9uCisJY29uc3QgaW50IG51bV9jYWxkYWNfYml0cyA9IDg7CS8vIDggYml0IGNhbGlicmF0aW9uIGRhY3MKKwljb25zdCBpbnQgbWF4X251bV9jYWxkYWNzID0gNDsJLy8gb25lIGNhbGRhYyBmb3IgZXZlcnkgdHdvIGRhYyBjaGFubmVscworCisJLyogd3JpdGUgMyBiaXQgY2hhbm5lbCAqLworCWNiX3BjaWRkYV9zZXJpYWxfb3V0KGRldiwgY2hhbm5lbCwgbnVtX2NoYW5uZWxfYml0cyk7CisJLy8gd3JpdGUgOCBiaXQgY2FsZGFjIHZhbHVlCisJY2JfcGNpZGRhX3NlcmlhbF9vdXQoZGV2LCB2YWx1ZSwgbnVtX2NhbGRhY19iaXRzKTsKKworCS8vIGxhdGNoIHN0cmVhbSBpbnRvIGFwcHJvcHJpYXRlIGNhbGRhYworCS8vIGRlc2VsZWN0IHJlZmVyZW5jZSBkYWMKKwljYWwyX2JpdHMgPSBERVNFTEVDVF9SRUZfREFDX0JJVCB8IERVTU1ZX0JJVDsKKwkvLyBkZWFjdGl2YXRlIGNhbGRhY3MgKG9uZSBjYWxkYWMgZm9yIGV2ZXJ5IHR3byBjaGFubmVscykKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X251bV9jYWxkYWNzOyBpKyspIHsKKwkJY2FsMl9iaXRzIHw9IERFU0VMRUNUX0NBTERBQ19CSVQoaSk7CisJfQorCS8vIGFjdGl2YXRlIHRoZSBjYWxkYWMgd2Ugd2FudAorCWNhbDJfYml0cyAmPSB+REVTRUxFQ1RfQ0FMREFDX0JJVChjYWxkYWMpOworCW91dHdfcChjYWwyX2JpdHMsIGRldnByaXYtPmRhYyArIERBQ0FMSUJSQVRJT04yKTsKKwkvLyBkZWFjdGl2YXRlIGNhbGRhYworCWNhbDJfYml0cyB8PSBERVNFTEVDVF9DQUxEQUNfQklUKGNhbGRhYyk7CisJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOworfQorCisvLyByZXR1cm5zIGNhbGRhYyB0aGF0IGNhbGlicmF0ZXMgZ2l2ZW4gYW5hbG9nIG91dCBjaGFubmVsCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGRhY19udW1iZXIodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIGNoYW5uZWwgLyAyOworfQorCisvLyByZXR1cm5zIGNhbGRhYyBjaGFubmVsIHRoYXQgcHJvdmlkZXMgZmluZSBnYWluIGZvciBnaXZlbiBhbyBjaGFubmVsCitzdGF0aWMgdW5zaWduZWQgaW50IGZpbmVfZ2Fpbl9jaGFubmVsKHVuc2lnbmVkIGludCBhb19jaGFubmVsKQoreworCXJldHVybiA0ICogKGFvX2NoYW5uZWwgJSAyKTsKK30KKworLy8gcmV0dXJucyBjYWxkYWMgY2hhbm5lbCB0aGF0IHByb3ZpZGVzIGNvYXJzZSBnYWluIGZvciBnaXZlbiBhbyBjaGFubmVsCitzdGF0aWMgdW5zaWduZWQgaW50IGNvYXJzZV9nYWluX2NoYW5uZWwodW5zaWduZWQgaW50IGFvX2NoYW5uZWwpCit7CisJcmV0dXJuIDEgKyA0ICogKGFvX2NoYW5uZWwgJSAyKTsKK30KKworLy8gcmV0dXJucyBjYWxkYWMgY2hhbm5lbCB0aGF0IHByb3ZpZGVzIGNvYXJzZSBvZmZzZXQgZm9yIGdpdmVuIGFvIGNoYW5uZWwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29hcnNlX29mZnNldF9jaGFubmVsKHVuc2lnbmVkIGludCBhb19jaGFubmVsKQoreworCXJldHVybiAyICsgNCAqIChhb19jaGFubmVsICUgMik7Cit9CisKKy8vIHJldHVybnMgY2FsZGFjIGNoYW5uZWwgdGhhdCBwcm92aWRlcyBmaW5lIG9mZnNldCBmb3IgZ2l2ZW4gYW8gY2hhbm5lbAorc3RhdGljIHVuc2lnbmVkIGludCBmaW5lX29mZnNldF9jaGFubmVsKHVuc2lnbmVkIGludCBhb19jaGFubmVsKQoreworCXJldHVybiAzICsgNCAqIChhb19jaGFubmVsICUgMik7Cit9CisKKy8vIHJldHVybnMgZWVwcm9tIGFkZHJlc3MgdGhhdCBwcm92aWRlcyBvZmZzZXQgZm9yIGdpdmVuIGFvIGNoYW5uZWwgYW5kIHJhbmdlCitzdGF0aWMgdW5zaWduZWQgaW50IG9mZnNldF9lZXByb21fYWRkcmVzcyh1bnNpZ25lZCBpbnQgYW9fY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UpCit7CisJcmV0dXJuIDB4NyArIDIgKiByYW5nZSArIDEyICogYW9fY2hhbm5lbDsKK30KKworLy8gcmV0dXJucyBlZXByb20gYWRkcmVzcyB0aGF0IHByb3ZpZGVzIGdhaW4gY2FsaWJyYXRpb24gZm9yIGdpdmVuIGFvIGNoYW5uZWwgYW5kIHJhbmdlCitzdGF0aWMgdW5zaWduZWQgaW50IGdhaW5fZWVwcm9tX2FkZHJlc3ModW5zaWduZWQgaW50IGFvX2NoYW5uZWwsCisJdW5zaWduZWQgaW50IHJhbmdlKQoreworCXJldHVybiAweDggKyAyICogcmFuZ2UgKyAxMiAqIGFvX2NoYW5uZWw7Cit9CisKKy8vIHJldHVybnMgdXBwZXIgYnl0ZSBvZiBlZXByb20gZW50cnksIHdoaWNoIGdpdmVzIHRoZSBjb2Fyc2UgYWRqdXN0bWVudCB2YWx1ZXMKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWVwcm9tX2NvYXJzZV9ieXRlKHVuc2lnbmVkIGludCB3b3JkKQoreworCXJldHVybiAod29yZCA+PiA4KSAmIDB4ZmY7Cit9CisKKy8vIHJldHVybnMgbG93ZXIgYnl0ZSBvZiBlZXByb20gZW50cnksIHdoaWNoIGdpdmVzIHRoZSBmaW5lIGFkanVzdG1lbnQgdmFsdWVzCitzdGF0aWMgdW5zaWduZWQgaW50IGVlcHJvbV9maW5lX2J5dGUodW5zaWduZWQgaW50IHdvcmQpCit7CisJcmV0dXJuIHdvcmQgJiAweGZmOworfQorCisvLyBzZXQgY2FsZGFjcyB0byBlZXByb20gdmFsdWVzIGZvciBnaXZlbiBjaGFubmVsIGFuZCByYW5nZQorc3RhdGljIHZvaWQgY2JfcGNpZGRhX2NhbGlicmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IHJhbmdlKQoreworCXVuc2lnbmVkIGludCBjb2Fyc2Vfb2Zmc2V0LCBmaW5lX29mZnNldCwgY29hcnNlX2dhaW4sIGZpbmVfZ2FpbjsKKworCS8vIHJlbWVtYmVyIHJhbmdlIHNvIHdlIGNhbiB0ZWxsIHdoZW4gd2UgbmVlZCB0byByZWFkanVzdCBjYWxpYnJhdGlvbgorCWRldnByaXYtPmFvX3JhbmdlW2NoYW5uZWxdID0gcmFuZ2U7CisKKwkvLyBnZXQgdmFsdWVzIGZyb20gZWVwcm9tIGRhdGEKKwljb2Fyc2Vfb2Zmc2V0ID0KKwkJZWVwcm9tX2NvYXJzZV9ieXRlKGRldnByaXYtPgorCQllZXByb21fZGF0YVtvZmZzZXRfZWVwcm9tX2FkZHJlc3MoY2hhbm5lbCwgcmFuZ2UpXSk7CisJZmluZV9vZmZzZXQgPQorCQllZXByb21fZmluZV9ieXRlKGRldnByaXYtPgorCQllZXByb21fZGF0YVtvZmZzZXRfZWVwcm9tX2FkZHJlc3MoY2hhbm5lbCwgcmFuZ2UpXSk7CisJY29hcnNlX2dhaW4gPQorCQllZXByb21fY29hcnNlX2J5dGUoZGV2cHJpdi0+CisJCWVlcHJvbV9kYXRhW2dhaW5fZWVwcm9tX2FkZHJlc3MoY2hhbm5lbCwgcmFuZ2UpXSk7CisJZmluZV9nYWluID0KKwkJZWVwcm9tX2ZpbmVfYnl0ZShkZXZwcml2LT4KKwkJZWVwcm9tX2RhdGFbZ2Fpbl9lZXByb21fYWRkcmVzcyhjaGFubmVsLCByYW5nZSldKTsKKworCS8vIHNldCBjYWxkYWNzCisJY2JfcGNpZGRhX3dyaXRlX2NhbGRhYyhkZXYsIGNhbGRhY19udW1iZXIoY2hhbm5lbCksCisJCWNvYXJzZV9vZmZzZXRfY2hhbm5lbChjaGFubmVsKSwgY29hcnNlX29mZnNldCk7CisJY2JfcGNpZGRhX3dyaXRlX2NhbGRhYyhkZXYsIGNhbGRhY19udW1iZXIoY2hhbm5lbCksCisJCWZpbmVfb2Zmc2V0X2NoYW5uZWwoY2hhbm5lbCksIGZpbmVfb2Zmc2V0KTsKKwljYl9wY2lkZGFfd3JpdGVfY2FsZGFjKGRldiwgY2FsZGFjX251bWJlcihjaGFubmVsKSwKKwkJY29hcnNlX2dhaW5fY2hhbm5lbChjaGFubmVsKSwgY29hcnNlX2dhaW4pOworCWNiX3BjaWRkYV93cml0ZV9jYWxkYWMoZGV2LCBjYWxkYWNfbnVtYmVyKGNoYW5uZWwpLAorCQlmaW5lX2dhaW5fY2hhbm5lbChjaGFubmVsKSwgZmluZV9nYWluKTsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpZGRhLCBjYl9wY2lkZGFfcGNpX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWE0YjE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCisgICAgQSBDb21lZGkgZHJpdmVyIGZvciBQQ0ktRElPMjRIICYgUENJLURJTzQ4SCBvZiBDb21wdXRlckJvYXJkcyAoY3VycmVudGx5IE1lYXN1cmVtZW50Q29tcHV0aW5nKQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogY2JfcGNpZGlvCitEZXNjcmlwdGlvbjogQ29tcHV0ZXJCb2FyZHMnIERJTyBib2FyZHMgd2l0aCBQQ0kgaW50ZXJmYWNlCitEZXZpY2VzOiBbTWVhc3VyZW1lbnQgQ29tcHV0aW5nXSBQQ0ktRElPMjQgKGNiX3BjaWRpbyksIFBDSS1ESU8yNEgsIFBDSS1ESU80OEgKK0F1dGhvcjogWW9zaGl5YSBNYXRzdXpha2EKK1VwZGF0ZWQ6IE1vbiwgMjkgT2N0IDIwMDcgMTU6NDA6NDcgKzAwMDAKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK1RoaXMgZHJpdmVyIGhhcyBiZWVuIG1vZGlmaWVkIGZyb20gc2tlbC5jIG9mIGNvbWVkaS0wLjcuNzAuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSSBkZXZpY2Ugd2lsbAorICBiZSB1c2VkLgorCitQYXNzaW5nIGEgemVybyBmb3IgYW4gb3B0aW9uIGlzIHRoZSBzYW1lIGFzIGxlYXZpbmcgaXQgdW5zcGVjaWZpZWQuCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIRUFERVIgRklMRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1BQ1JPUyBhbmQgREFUQVRZUEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DQgkweDEzMDcKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgdHdvIGltYWdpbmFyeSBib2FyZHMuICBEZXNjcmliaW5nIHRoZQorICogYm9hcmRzIGluIHRoaXMgd2F5IGlzIG9wdGlvbmFsLCBhbmQgY29tcGxldGVseSBkcml2ZXItZGVwZW5kZW50LgorICogU29tZSBkcml2ZXJzIHVzZSBhcnJheXMgc3VjaCBhcyB0aGlzLCBvdGhlciBkbyBub3QuCisgKi8KK3N0cnVjdCBwY2lkaW9fYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGFubWUgb2YgdGhlIGJvYXJkCisJaW50IG5fODI1NTsJCS8vIG51bWJlciBvZiA4MjU1IGNoaXBzIG9uIGJvYXJkCisKKwkvLyBpbmRpY2VzIG9mIGJhc2UgYWRkcmVzcyByZWdpb25zCisJaW50IHBjaWNvbnRyb2xlcl9iYWRyaW5kZXg7CisJaW50IGRpb3JlZ3NfYmFkcmluZGV4OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lkaW9fYm9hcmQgcGNpZGlvX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNpLWRpbzI0IiwKKwkgICAgICBuXzgyNTU6CTEsCisJICAgICAgcGNpY29udHJvbGVyX2JhZHJpbmRleDoxLAorCSAgICAgIGRpb3JlZ3NfYmFkcmluZGV4OjIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGlvMjRoIiwKKwkgICAgICBuXzgyNTU6CTEsCisJICAgICAgcGNpY29udHJvbGVyX2JhZHJpbmRleDoxLAorCSAgICAgIGRpb3JlZ3NfYmFkcmluZGV4OjIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGlvNDhoIiwKKwkgICAgICBuXzgyNTU6CTIsCisJICAgICAgcGNpY29udHJvbGVyX2JhZHJpbmRleDowLAorCSAgICAgIGRpb3JlZ3NfYmFkcmluZGV4OjEsCisJCX0sCit9OworCisvKiBUaGlzIGlzIHVzZWQgYnkgbW9kcHJvYmUgdG8gdHJhbnNsYXRlIFBDSSBJRHMgdG8gZHJpdmVycy4gIFNob3VsZAorICogb25seSBiZSB1c2VkIGZvciBQQ0kgYW5kIElTQS1QblAgZGV2aWNlcyAqLworLyogUGxlYXNlIGFkZCB5b3VyIFBDSSB2ZW5kb3IgSUQgdG8gY29tZWRpZGV2LmgsIGFuZCBpdCB3aWxsIGJlIGZvcndhcmRlZAorICogdXBzdHJlYW0uICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpZGlvX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAyOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAxNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQ0IsIDB4MDAwYiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpZGlvX3BjaV90YWJsZSk7CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjaWRpb19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgcGNpZGlvX3ByaXZhdGUgeworCWludCBkYXRhOwkJLy8gY3VyZW50bHkgdW51c2VkCisKKwkvKiB3b3VsZCBiZSB1c2VmdWwgZm9yIGEgUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCisJLyogdXNlZCBmb3IgRE8gcmVhZGJhY2ssIGN1cmVudGx5IHVudXNlZCAqLworCXVuc2lnbmVkIGludCBkb19yZWFkYmFja1s0XTsJLyogdXAgdG8gNCB1bnNpZ25lZCBpbnQgc3VmZmljZSB0byBob2xkIDk2IGJpdHMgZm9yIFBDSS1ESU85NiAqLworCisJdW5zaWduZWQgbG9uZyBkaW9fcmVnX2Jhc2U7CS8vIGFkZHJlc3Mgb2YgcG9ydCBBIG9mIHRoZSBmaXJzdCA4MjU1IGNoaXAgb24gYm9hcmQKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpZGlvX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IHBjaWRpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2lkaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfY2JfcGNpZGlvID0geworICAgICAgZHJpdmVyX25hbWU6ImNiX3BjaWRpbyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpZGlvX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2lkaW9fZGV0YWNoLAorLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGlmIHlvdSBhcmUKKyAqIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgSVNBIFBuUCBvciBQQ0kgY2FyZCAqLworCS8qIE1vc3QgZHJpdmVycyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgdHlwZXMgb2YgYm9hcmRzIGJ5CisJICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKwkgKiBpbiBwY2lkaW9fYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisJICogd2FzIGZpcnN0IGluIHRoZSBzdHJ1Y3R1cmUgLS0gQ29tZWRpIHVzZXMgdGhpcyBmYWN0IHRvCisJICogZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUgYm9hcmQgd2l0aG91dCBrbm93aW5nIGFueSBkZXRhaWxzCisJICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisJICogV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZCAoYnkgY29tZWRpX2NvbmZpZyksIHRoZSBuYW1lCisJICogb2YgdGhlIGRldmljZSBpcyBnaXZlbiB0byBDb21lZGksIGFuZCBDb21lZGkgdHJpZXMgdG8KKwkgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKwkgKiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciBpcyBwdXQKKwkgKiBpbnRvIGRldi0+Ym9hcmRfcHRyIGFuZCBkcml2ZXItPmF0dGFjaCgpIGlzIGNhbGxlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgY2FuIGRldGVybWluZQorCSAqIHRoZSB0eXBlIG9mIGJvYXJkIGluIHNvZnR3YXJlLiAgSVNBIFBuUCwgUENJLCBhbmQgUENNQ0lBCisJICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisJICovCisvLyBUaGUgZm9sbG93aW5nIGZpZWxkcyBzaG91bGQgTk9UIGJlIGluaXRpYWxpemVkIGlmIHlvdSBhcmUgZGVhbGluZyB3aXRoIFBDSSBkZXZpY2VzCisvLyAgICAgIGJvYXJkX25hbWU6ICAgICBwY2lkaW9fYm9hcmRzLAorLy8gICAgICBvZmZzZXQ6ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBwY2lkaW9fYm9hcmQpLAorLy8gICAgICBudW1fbmFtZXM6ICAgICAgc2l6ZW9mKHBjaWRpb19ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBwY2lkaW9fYm9hcmQpLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBwY2lkaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOworCWludCBpbmRleDsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRpbzogXG4iLCBkZXYtPm1pbm9yKTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2lkaW9fcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisvKgorICogSWYgeW91IGNhbiBwcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiBhIHNlcmllcworICogaXQgaXMsIHRoaXMgaXMgdGhlIHBsYWNlIHRvIGRvIGl0LiAgT3RoZXJ3aXNlLCBkZXYtPmJvYXJkX3B0cgorICogc2hvdWxkIGFscmVhZHkgYmUgaW5pdGlhbGl6ZWQuCisgKi8KKy8qCisgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgorICovCisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCQkvLyBpcyBpdCBub3QgYSBjb21wdXRlciBib2FyZHMgY2FyZD8KKwkJaWYgKHBjaWRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQ0IpCisJCQljb250aW51ZTsKKwkJLy8gbG9vcCB0aHJvdWdoIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcgorCQlmb3IgKGluZGV4ID0gMDsKKwkJCWluZGV4IDwgc2l6ZW9mIHBjaWRpb19ib2FyZHMgLyBzaXplb2Yoc3RydWN0IHBjaWRpb19ib2FyZCk7CisJCQlpbmRleCsrKSB7CisJCQlpZiAocGNpZGlvX3BjaV90YWJsZVtpbmRleF0uZGV2aWNlICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCisJCQkvLyB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCS8vIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZGV2LT5ib2FyZF9wdHIgPSBwY2lkaW9fYm9hcmRzICsgaW5kZXg7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCisJcHJpbnRrKCJObyBzdXBwb3J0ZWQgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgY2FyZCBmb3VuZCBvbiAiCisJCSJyZXF1ZXN0ZWQgcG9zaXRpb25cbiIpOworCXJldHVybiAtRUlPOworCisgICAgICBmb3VuZDoKKworLyoKKyAqIEluaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lLiAgTm90ZSB0aGF0IHdlIGNhbiB1c2UgdGhlICJ0aGlzYm9hcmQiCisgKiBtYWNybyBub3csIHNpbmNlIHdlIGp1c3QgaW5pdGlhbGl6ZWQgaXQgaW4gdGhlIGxhc3QgbGluZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CisJcHJpbnRrKCJGb3VuZCAlcyBvbiBidXMgJWksIHNsb3QgJWlcbiIsIHRoaXNib2FyZC0+bmFtZSwKKwkJZGV2cHJpdi0+cGNpX2Rldi0+YnVzLT5udW1iZXIsCisJCVBDSV9TTE9UKGRldnByaXYtPnBjaV9kZXYtPmRldmZuKSk7CisJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgdGhpc2JvYXJkLT5uYW1lKSkgeworCQlwcmludGsoImNiX3BjaWRpbzogZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2cHJpdi0+ZGlvX3JlZ19iYXNlCisJCT0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsCisJCXBjaWRpb19ib2FyZHNbaW5kZXhdLmRpb3JlZ3NfYmFkcmluZGV4KTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgdGhpc2JvYXJkLT5uXzgyNTUpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgdGhpc2JvYXJkLT5uXzgyNTU7IGkrKykgeworCQlzdWJkZXZfODI1NV9pbml0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSwKKwkJCU5VTEwsIGRldnByaXYtPmRpb19yZWdfYmFzZSArIGkgKiA0KTsKKwkJcHJpbnRrKCIgc3ViZGV2ICVkOiBiYXNlID0gMHglbHhcbiIsIGksCisJCQlkZXZwcml2LT5kaW9fcmVnX2Jhc2UgKyBpICogNCk7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNpZGlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2lkaW86IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCWlmIChkZXZwcml2LT5kaW9fcmVnX2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCX0KKwlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgdGhpc2JvYXJkLT5uXzgyNTU7IGkrKykgeworCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGkpOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2lkaW8sIHBjaWRpb19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3MDVmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jCisgICAgQ29tZWRpIGRyaXZlciBmb3IgQ29tcHV0ZXIgQm9hcmRzIFBDSU0tREFTMTYwMi8xNgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogY2JfcGNpbWRhcworRGVzY3JpcHRpb246IE1lYXN1cmVtZW50IENvbXB1dGluZyBQQ0kgTWlncmF0aW9uIHNlcmllcyBib2FyZHMKK0RldmljZXM6IFtDb21wdXRlckJvYXJkc10gUENJTS1EQVMxNjAyLzE2IChjYl9wY2ltZGFzKQorQXV0aG9yOiBSaWNoYXJkIEJ5dGhld2F5CitVcGRhdGVkOiBXZWQsIDEzIE5vdiAyMDAyIDEyOjM0OjU2ICswMDAwCitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitXcml0dGVuIHRvIHN1cHBvcnQgdGhlIFBDSU0tREFTMTYwMi8xNiBvbiBhIDIuNCBzZXJpZXMga2VybmVsLgorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgICAgWzBdIC0gUENJIGJ1cyBudW1iZXIKKyAgICBbMV0gLSBQQ0kgc2xvdCBudW1iZXIKKworRGV2ZWxvcGVkIGZyb20gY2JfcGNpZGFzIGFuZCBza2VsIGJ5IFJpY2hhcmQgQnl0aGV3YXkgKG1vY2VsZXRAc3Vjcy5vcmcpLgorT25seSBzdXBwb3J0cyBESU8sIEFPIGFuZCBzaW1wbGUgQUkgaW4gaXQncyBwcmVzZW50IGZvcm0uCitObyBpbnRlcnJ1cHRzLCBtdWx0aSBjaGFubmVsIG9yIEZJRk8gQUksIGFsdGhvdWdoIHRoZSBjYXJkIGxvb2tzIGxpa2UgaXQgY291bGQgc3VwcG9ydCB0aGlzLgorU2VlIGh0dHA6Ly93d3cubWVhc3VyZW1lbnRjb21wdXRpbmcuY29tL1BERk1hbnVhbHMvcGNpbS1kYXMxNjAyXzE2LnBkZiBmb3IgbW9yZSBkZXRhaWxzLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICJwbHg5MDUyLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisvLyNkZWZpbmUgQ0JQQ0lNREFTX0RFQlVHCisjdW5kZWYgQ0JQQ0lNREFTX0RFQlVHCisKKy8qIFJlZ2lzdGVycyBmb3IgdGhlIFBDSU0tREFTMTYwMi8xNiAqLworCisvLyBzaXplcyBvZiBpbyByZWdpb25zIChieXRlcykKKyNkZWZpbmUgQkFEUjBfU0laRSAyCQkvLz8/CisjZGVmaW5lIEJBRFIxX1NJWkUgNAorI2RlZmluZSBCQURSMl9TSVpFIDYKKyNkZWZpbmUgQkFEUjNfU0laRSAxNgorI2RlZmluZSBCQURSNF9TSVpFIDQKKworLy9EQUMgT2Zmc2V0cworI2RlZmluZSBBRENfVFJJRyAwCisjZGVmaW5lIERBQzBfT0ZGU0VUIDIKKyNkZWZpbmUgREFDMV9PRkZTRVQgNAorCisvL0FJIGFuZCBDb3VudGVyIENvbnN0YW50cworI2RlZmluZSBNVVhfTElNSVRTIDAKKyNkZWZpbmUgTUFJTl9DT05OX0RJTyAxCisjZGVmaW5lIEFEQ19TVEFUIDIKKyNkZWZpbmUgQURDX0NPTlZfU1RBVCAzCisjZGVmaW5lIEFEQ19JTlQgNAorI2RlZmluZSBBRENfUEFDRVIgNQorI2RlZmluZSBCVVJTVF9NT0RFIDYKKyNkZWZpbmUgUFJPR19HQUlOIDcKKyNkZWZpbmUgQ0xLODI1NF8xX0RBVEEgOAorI2RlZmluZSBDTEs4MjU0XzJfREFUQSA5CisjZGVmaW5lIENMSzgyNTRfM19EQVRBIDEwCisjZGVmaW5lIENMSzgyNTRfQ09OVFJPTCAxMQorI2RlZmluZSBVU0VSX0NPVU5URVIgMTIKKyNkZWZpbmUgUkVTSURfQ09VTlRfSCAxMworI2RlZmluZSBSRVNJRF9DT1VOVF9MIDE0CisKKy8qIEJvYXJkIGRlc2NyaXB0aW9uICovCitzdHJ1Y3QgY2JfcGNpbWRhc19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CisJaW50IGFpX3NlX2NoYW5zOwkvLyBJbnB1dHMgaW4gc2luZ2xlLWVuZGVkIG1vZGUKKwlpbnQgYWlfZGlmZl9jaGFuczsJLy8gSW5wdXRzIGluIGRpZmZlcmVudGlhbCBtb2RlCisJaW50IGFpX2JpdHM7CQkvLyBhbmFsb2cgaW5wdXQgcmVzb2x1dGlvbgorCWludCBhaV9zcGVlZDsJCS8vIGZhc3Rlc3QgY29udmVyc2lvbiBwZXJpb2QgaW4gbnMKKwlpbnQgYW9fbmNoYW47CQkvLyBudW1iZXIgb2YgYW5hbG9nIG91dCBjaGFubmVscworCWludCBhb19iaXRzOwkJLy8gYW5hbG9ndWUgb3V0cHV0IHJlc29sdXRpb24KKwlpbnQgaGFzX2FvX2ZpZm87CS8vIGFuYWxvZyBvdXRwdXQgaGFzIGZpZm8KKwlpbnQgYW9fc2Nhbl9zcGVlZDsJLy8gYW5hbG9nIG91dHB1dCBzcGVlZCBmb3IgMTYwMiBzZXJpZXMgKGZvciBhIHNjYW4sIG5vdCBjb252ZXJzaW9uKQorCWludCBmaWZvX3NpemU7CQkvLyBudW1iZXIgb2Ygc2FtcGxlcyBmaWZvIGNhbiBob2xkCisJaW50IGRpb19iaXRzOwkJLy8gbnVtYmVyIG9mIGRpbyBiaXRzCisJaW50IGhhc19kaW87CQkvLyBoYXMgRElPCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlczsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2JfcGNpbWRhc19ib2FyZCBjYl9wY2ltZGFzX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiUENJTS1EQVMxNjAyLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHg1NiwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCS8vPz8KKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGhhc19hb19maWZvOjAsCS8vPz8KKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCQkJLy8/PworCSAgICAgIGZpZm9fc2l6ZToxMDI0LAorCSAgICAgIGRpb19iaXRzOjI0LAorCSAgICAgIGhhc19kaW86CTEsCisvLyAgICAgICAgICAgICAgcmFuZ2VzOiAgICAgICAgICZjYl9wY2ltZGFzX3JhbmdlcywKKwkJfSwKK307CisKKy8qIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLiAgU2hvdWxkCisgKiBvbmx5IGJlIHVzZWQgZm9yIFBDSSBhbmQgSVNBLVBuUCBkZXZpY2VzICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2JfcGNpbWRhc19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTLCAweDAwNTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNiX3BjaW1kYXNfcGNpX3RhYmxlKTsKKworI2RlZmluZSBOX0JPQVJEUyAxCQkvLyBNYXggbnVtYmVyIG9mIGJvYXJkcyBzdXBwb3J0ZWQKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgY2JfcGNpbWRhc19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgY2JfcGNpbWRhc19wcml2YXRlIHsKKwlpbnQgZGF0YTsKKworCS8vIHdvdWxkIGJlIHVzZWZ1bCBmb3IgYSBQQ0kgZGV2aWNlCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKwkvL2Jhc2UgYWRkcmVzc2VzCisJdW5zaWduZWQgbG9uZyBCQURSMDsKKwl1bnNpZ25lZCBsb25nIEJBRFIxOworCXVuc2lnbmVkIGxvbmcgQkFEUjI7CisJdW5zaWduZWQgbG9uZyBCQURSMzsKKwl1bnNpZ25lZCBsb25nIEJBRFI0OworCisJLyogVXNlZCBmb3IgQU8gcmVhZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07CisKKwkvLyBVc2VkIGZvciBESU8KKwl1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydF9hOwkvLyBjb3B5IG9mIEJBRFI0KzAKKwl1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydF9iOwkvLyBjb3B5IG9mIEJBRFI0KzEKKwl1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydF9jOwkvLyBjb3B5IG9mIEJBRFI0KzIKKwl1bnNpZ25lZCBzaG9ydCBpbnQgZGlvX21vZGU7CS8vIGNvcHkgb2YgQkFEUjQrMworCit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGNiX3BjaW1kYXNfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgY2JfcGNpbWRhc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBjYl9wY2ltZGFzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2NiX3BjaW1kYXMgPSB7CisgICAgICBkcml2ZXJfbmFtZToiY2JfcGNpbWRhcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6Y2JfcGNpbWRhc19hdHRhY2gsCisgICAgICBkZXRhY2g6Y2JfcGNpbWRhc19kZXRhY2gsCit9OworCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgY2JfcGNpbWRhc19hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2ltZGFzX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBjYl9wY2ltZGFzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCWludCBpbmRleDsKKwkvL2ludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpbWRhczogIiwgZGV2LT5taW5vcik7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4KKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBjYl9wY2ltZGFzX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisvKgorICogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4KKyAqLworCXByaW50aygiXG4iKTsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8vIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPworCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUykKKwkJCWNvbnRpbnVlOworCQkvLyBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5fQk9BUkRTOyBpbmRleCsrKSB7CisJCQlpZiAoY2JfcGNpbWRhc19ib2FyZHNbaW5kZXhdLmRldmljZV9pZCAhPQorCQkJCXBjaWRldi0+ZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CisJCQlkZXYtPmJvYXJkX3B0ciA9IGNiX3BjaW1kYXNfYm9hcmRzICsgaW5kZXg7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCisJcHJpbnRrKCJObyBzdXBwb3J0ZWQgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgY2FyZCBmb3VuZCBvbiAiCisJCSJyZXF1ZXN0ZWQgcG9zaXRpb25cbiIpOworCXJldHVybiAtRUlPOworCisgICAgICBmb3VuZDoKKworCXByaW50aygiRm91bmQgJXMgb24gYnVzICVpLCBzbG90ICVpXG4iLCBjYl9wY2ltZGFzX2JvYXJkc1tpbmRleF0ubmFtZSwKKwkJcGNpZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QocGNpZGV2LT5kZXZmbikpOworCisJLy8gV2FybiBhYm91dCBub24tdGVzdGVkIGZlYXR1cmVzCisJc3dpdGNoICh0aGlzYm9hcmQtPmRldmljZV9pZCkgeworCWNhc2UgMHg1NjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJUSElTIENBUkQgSVMgVU5TVVBQT1JURUQuXG4iCisJCQkiUExFQVNFIFJFUE9SVCBVU0FHRSBUTyA8bW9jZWxldEBzdWNzLm9yZz5cbiIpOworCX07CisKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCAiY2JfcGNpbWRhcyIpKSB7CisJCXByaW50aygiIEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2cHJpdi0+QkFEUjAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgMCk7CisJZGV2cHJpdi0+QkFEUjEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgMSk7CisJZGV2cHJpdi0+QkFEUjIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgMik7CisJZGV2cHJpdi0+QkFEUjMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgMyk7CisJZGV2cHJpdi0+QkFEUjQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgNCk7CisKKyNpZmRlZiBDQlBDSU1EQVNfREVCVUcKKwlwcmludGsoImRldnByaXYtPkJBRFIwID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFIwKTsKKwlwcmludGsoImRldnByaXYtPkJBRFIxID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFIxKTsKKwlwcmludGsoImRldnByaXYtPkJBRFIyID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFIyKTsKKwlwcmludGsoImRldnByaXYtPkJBRFIzID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFIzKTsKKwlwcmludGsoImRldnByaXYtPkJBRFI0ID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFI0KTsKKyNlbmRpZgorCisvLyBEb250IHN1cHBvcnQgSVJRIHlldAorLy8gICAgICAvLyBnZXQgaXJxCisvLyAgICAgIGlmKGNvbWVkaV9yZXF1ZXN0X2lycShkZXZwcml2LT5wY2lfZGV2LT5pcnEsIGNiX3BjaW1kYXNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgImNiX3BjaW1kYXMiLCBkZXYgKSkKKy8vICAgICAgeworLy8gICAgICAgICAgICAgIHByaW50aygiIHVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIGRldnByaXYtPnBjaV9kZXYtPmlycSk7CisvLyAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisvLyAgICAgIH0KKy8vICAgICAgZGV2LT5pcnEgPSBkZXZwcml2LT5wY2lfZGV2LT5pcnE7CisKKwkvL0luaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLy9kZXYtPnJlYWRfc3ViZGV2PXM7CisJLy8gYW5hbG9nIGlucHV0IHN1YmRldmljZQorCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YWlfc2VfY2hhbnM7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YWlfYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisJcy0+bGVuX2NoYW5saXN0ID0gMTsJLy8gVGhpcyBpcyB0aGUgbWF4aW11bSBjaGFubGlzdCBsZW5ndGggdGhhdAorCS8vIHRoZSBib2FyZCBjYW4gaGFuZGxlCisJcy0+aW5zbl9yZWFkID0gY2JfcGNpbWRhc19haV9yaW5zbjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8vIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX25jaGFuOworCXMtPm1heGRhdGEgPSAxIDw8IHRoaXNib2FyZC0+YW9fYml0czsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOwkvL3JhbmdlcyBhcmUgaGFyZHdhcmUgc2V0dGFibGUsIGJ1dCBub3Qgc29mdHdhcmUgcmVhZGFibGUuCisJcy0+aW5zbl93cml0ZSA9ICZjYl9wY2ltZGFzX2FvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZjYl9wY2ltZGFzX2FvX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJaWYgKHRoaXNib2FyZC0+aGFzX2RpbykgeworCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2cHJpdi0+QkFEUjQpOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBjYl9wY2ltZGFzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKyNpZmRlZiBDQlBDSU1EQVNfREVCVUcKKwlpZiAoZGV2cHJpdikgeworCQlwcmludGsoImRldnByaXYtPkJBRFIwID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFIwKTsKKwkJcHJpbnRrKCJkZXZwcml2LT5CQURSMSA9IDB4JWx4XG4iLCBkZXZwcml2LT5CQURSMSk7CisJCXByaW50aygiZGV2cHJpdi0+QkFEUjIgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjIpOworCQlwcmludGsoImRldnByaXYtPkJBRFIzID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFIzKTsKKwkJcHJpbnRrKCJkZXZwcml2LT5CQURSNCA9IDB4JWx4XG4iLCBkZXZwcml2LT5CQURSNCk7CisJfQorI2VuZGlmCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpbWRhczogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldnByaXYtPkJBRFIwKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJpbnN0cnVjdGlvbnMiIHJlYWQvd3JpdGUgZGF0YSBpbiAib25lLXNob3QiIG9yICJzb2Z0d2FyZS10cmlnZ2VyZWQiCisgKiBtb2RlLgorICovCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBpOworCXVuc2lnbmVkIGludCBkOworCXVuc2lnbmVkIGludCBidXN5OworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgc2hvcnQgY2hhbmxpbXM7CisJaW50IG1heGNoYW5zOworCisJLy8gb25seSBzdXBwb3J0IHN3IGluaXRpYXRlZCByZWFkcyBmcm9tIGEgc2luZ2xlIGNoYW5uZWwKKworCS8vY2hlY2sgY2hhbm5lbCBudW1iZXIKKwlpZiAoKGluYihkZXZwcml2LT5CQURSMyArIDIpICYgMHgyMCkgPT0gMCkJLy9kaWZmZXJlbnRpYWwgbW9kZQorCQltYXhjaGFucyA9IHRoaXNib2FyZC0+YWlfZGlmZl9jaGFuczsKKwllbHNlCisJCW1heGNoYW5zID0gdGhpc2JvYXJkLT5haV9zZV9jaGFuczsKKworCWlmIChjaGFuID4gKG1heGNoYW5zIC0gMSkpCisJCXJldHVybiAtRVRJTUVET1VUOwkvLyoqKiBXcm9uZyBlcnJvciBjb2RlLiBGaXhtZS4KKworCS8vY29uZmlndXJlIGZvciBzdyBpbml0aWF0ZWQgcmVhZAorCWQgPSBpbmIoZGV2cHJpdi0+QkFEUjMgKyA1KTsKKwlpZiAoKGQgJiAweDAzKSA+IDApIHsJLy9vbmx5IHJlc2V0IGlmIG5lZWRlZC4KKwkJZCA9IGQgJiAweGZkOworCQlvdXRiKGQsIGRldnByaXYtPkJBRFIzICsgNSk7CisJfQorCW91dGIoMHgwMSwgZGV2cHJpdi0+QkFEUjMgKyA2KTsJLy9zZXQgYnVyc3Rpbmcgb2ZmLCBjb252ZXJzaW9ucyBvbgorCW91dGIoMHgwMCwgZGV2cHJpdi0+QkFEUjMgKyA3KTsJLy9zZXQgcmFuZ2UgdG8gMTBWLiBVUC9CUCBpcyBjb250cm9sbGVkIGJ5IGEgc3dpdGNoIG9uIHRoZSBib2FyZAorCisJLy8gd3JpdGUgY2hhbm5lbCBsaW1pdHMgdG8gbXVsdGlwbGV4ZXIsIHNldCBMb3cgKGJpdHMgMC0zKSBhbmQgSGlnaCAoYml0cyA0LTcpIGNoYW5uZWxzIHRvIGNoYW4uCisJY2hhbmxpbXMgPSBjaGFuIHwgKGNoYW4gPDwgNCk7CisJb3V0YihjaGFubGltcywgZGV2cHJpdi0+QkFEUjMgKyAwKTsKKworCS8qIGNvbnZlcnQgbiBzYW1wbGVzICovCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJb3V0dygwLCBkZXZwcml2LT5CQURSMiArIDApOworCisjZGVmaW5lIFRJTUVPVVQgMTAwMAkJLy90eXBpY2FsbHkgdGFrZXMgNSBsb29wcyBvbiBhIGxpZ2h0bHkgbG9hZGVkIFBlbnRpdW0gMTAwTUh6LAorCQkvL3RoaXMgaXMgbGlrZWx5IHRvIGJlIDEwMCBsb29wcyBvbiBhIDJHSHogbWFjaGluZSwgc28gc2V0IDEwMDAgYXMgdGhlIGxpbWl0LgorCisJCS8qIHdhaXQgZm9yIGNvbnZlcnNpb24gdG8gZW5kICovCisJCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJCWJ1c3kgPSBpbmIoZGV2cHJpdi0+QkFEUjMgKyAyKSAmIDB4ODA7CisJCQlpZiAoIWJ1c3kpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gVElNRU9VVCkgeworCQkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCS8qIHJlYWQgZGF0YSAqLworCQlkID0gaW53KGRldnByaXYtPkJBRFIyICsgMCk7CisKKwkJLyogbWFuZ2xlIHRoZSBkYXRhIGFzIG5lY2Vzc2FyeSAqLworCQkvL2QgXj0gMTw8KHRoaXNib2FyZC0+YWlfYml0cy0xKTsgLy8gMTYgYml0IGRhdGEgZnJvbSBBREMsIHNvIG5vIG1hbmdsZSBuZWVkZWQuCisKKwkJZGF0YVtuXSA9IGQ7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBjYl9wY2ltZGFzX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyogV3JpdGluZyBhIGxpc3Qgb2YgdmFsdWVzIHRvIGFuIEFPIGNoYW5uZWwgaXMgcHJvYmFibHkgbm90CisJICogdmVyeSB1c2VmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBpbnRlcmZhY2UgaXMgZGVmaW5lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCXN3aXRjaCAoY2hhbikgeworCQljYXNlIDA6CisJCQlvdXR3KGRhdGFbaV0gJiAweDBGRkYsIGRldnByaXYtPkJBRFIyICsgREFDMF9PRkZTRVQpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCW91dHcoZGF0YVtpXSAmIDB4MEZGRiwgZGV2cHJpdi0+QkFEUjIgKyBEQUMxX09GRlNFVCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKyAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpbWRhcywgY2JfcGNpbWRhc19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjNWI0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMKQEAgLTAsMCArMSw0NzQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jCisgICAgQ29tcHV0ZXIgQm9hcmRzIFBDSU0tRERBMDYtMTYgQ29tZWRpIGRyaXZlcgorICAgIEF1dGhvcjogQ2FsaW4gQ3VsaWFudSA8Y2FsaW5AYWp2YXIub3JnPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogY2JfcGNpbWRkYQorRGVzY3JpcHRpb246IE1lYXN1cmVtZW50IENvbXB1dGluZyBQQ0lNLUREQTA2LTE2CitEZXZpY2VzOiBbTWVhc3VyZW1lbnQgQ29tcHV0aW5nXSBQQ0lNLUREQTA2LTE2IChjYl9wY2ltZGRhKQorQXV0aG9yOiBDYWxpbiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CitVcGRhdGVkOiBNb24sIDE0IEFwciAyMDA4IDE1OjE1OjUxICswMTAwCitTdGF0dXM6IHdvcmtzCisKK0FsbCBmZWF0dXJlcyBvZiB0aGUgUENJTS1EREEwNi0xNiBib2FyZCBhcmUgc3VwcG9ydGVkLiAgVGhpcyBib2FyZAoraGFzIDYgMTYtYml0IEFPIGNoYW5uZWxzLCBhbmQgdGhlIHVzdWFsIDgyNTUgRElPIHNldHVwLiAgKDI0IGNoYW5uZWxzLAorY29uZmlndXJhYmxlIGluIGJhbmtzIG9mIDggYW5kIDQsIGV0Yy4pLiAgVGhpcyBib2FyZCBkb2VzIG5vdCBzdXBwb3J0IGNvbW1hbmRzLgorCitUaGUgYm9hcmQgaGFzIGEgcGVjdWxpYXIgd2F5IG9mIHNwZWNpZnlpbmcgQU8gZ2Fpbi9yYW5nZSBzZXR0aW5ncyAtLSBZb3UgaGF2ZQorMSBqdW1wZXIgYmFuayBvbiB0aGUgY2FyZCwgd2hpY2ggZWl0aGVyIG1ha2VzIGFsbCA2IEFPIGNoYW5uZWxzIGVpdGhlcgorNSBWb2x0IHVuaXBvbGFyLCA1ViBiaXBvbGFyLCAxMCBWb2x0IHVuaXBvbGFyIG9yIDEwViBiaXBvbGFyLgorCitTaW5jZSB0aGVyZSBpcyBhYnNvbHV0ZWx5IF9ub18gd2F5IHRvIHRlbGwgaW4gc29mdHdhcmUgaG93IHRoaXMganVtcGVyIGlzIHNldAorKHdlbGwsIGF0IGxlYXN0IGFjY29yZGluZyAgdG8gdGhlIHJhdGhlciB0aGluIHNwZWMuIGZyb20gTWVhc3VyZW1lbnQgQ29tcHV0aW5nCisgdGhhdCBjb21lcyB3aXRoIHRoZSBib2FyZCksIHRoZSBkcml2ZXIgYXNzdW1lcyB0aGUganVtcGVyIGlzIGF0IGl0cyBmYWN0b3J5CitkZWZhdWx0IHNldHRpbmcgb2YgKy8tNVYuCisKK0Fsc28gb2Ygbm90ZSBpcyB0aGUgZmFjdCB0aGF0IHRoaXMgYm9hcmQgZmVhdHVyZXMgYW5vdGhlciBqdW1wZXIsIHdob3NlCitzdGF0ZSBpcyBhbHNvIGNvbXBsZXRlbHkgaW52aXNpYmxlIHRvIHNvZnR3YXJlLiAgSXQgdG9nZ2xlcyB0d28gcG9zc2libGUgQU8KK291dHB1dCBtb2RlcyBvbiB0aGUgYm9hcmQ6CisKKyAgLSBVcGRhdGUgTW9kZTogV3JpdGluZyB0byBhbiBBTyBjaGFubmVsIGluc3RhbnRhbmVvdXNseSB1cGRhdGVzIHRoZSBhY3R1YWwKKyAgICBzaWduYWwgb3V0cHV0IGJ5IHRoZSBEQUMgb24gdGhlIGJvYXJkICh0aGlzIGlzIHRoZSBmYWN0b3J5IGRlZmF1bHQpLgorICAtIFNpbXVsdGFuZW91cyBYRkVSIE1vZGU6IFdyaXRpbmcgdG8gYW4gQU8gY2hhbm5lbCBoYXMgbm8gZWZmZWN0IHVudGlsCisgICAgeW91IHJlYWQgZnJvbSBhbnkgb25lIG9mIHRoZSBBTyBjaGFubmVscy4gIFRoaXMgaXMgdXNlZnVsIGZvciBsb2FkaW5nCisgICAgYWxsIDYgQU8gdmFsdWVzLCBhbmQgdGhlbiByZWFkaW5nIGZyb20gYW55IG9uZSBvZiB0aGUgQU8gY2hhbm5lbHMgb24gdGhlCisgICAgZGV2aWNlIHRvIGluc3RhbnRseSB1cGRhdGUgYWxsIDYgQU8gdmFsdWVzIGluIHVuaXNvbi4gIFVzZWZ1bCBmb3Igc29tZQorICAgIGNvbnRyb2wgYXBwcywgSSB3b3VsZCBhc3N1bWU/ICBJZiB5b3VyIGp1bXBlciBpcyBpbiB0aGlzIHNldHRpbmcsIHRoZW4geW91CisgICAgbmVlZCB0byBpc3N1ZSB5b3VyIGNvbWVkaV9kYXRhX3dyaXRlKClzIHRvIGxvYWQgYWxsIHRoZSB2YWx1ZXMgeW91IHdhbnQsCisgICAgdGhlbiBpc3N1ZSBvbmUgY29tZWRpX2RhdGFfcmVhZCgpIG9uIGFueSBjaGFubmVsIG9uIHRoZSBBTyBzdWJkZXZpY2UKKyAgICB0byBpbml0aWF0ZSB0aGUgc2ltdWx0YW5lb3VzIFhGRVIuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIFBDSSBidXMgKG9wdGlvbmFsKQorICBbMV0gUENJIHNsb3QgKG9wdGlvbmFsKQorICBbMl0gYW5hbG9nIG91dHB1dCByYW5nZSBqdW1wZXIgc2V0dGluZworICAgICAgMCA9PSArLy0gNSBWCisgICAgICAxID09ICsvLSAxMCBWCisqLworCisvKgorICAgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBDb21wdXRlciBCb2FyZHMgUENJTS1EREEwNi0xNiBBbmFsb2cgT3V0cHV0CisgICAgY2FyZC4gIFRoaXMgYm9hcmQgaGFzIGEgdW5pcXVlIHJlZ2lzdGVyIGxheW91dCBhbmQgYXMgc3VjaCBwcm9iYWJseQorICAgIGRlc2VydmVzIGl0cyBvd24gZHJpdmVyIGZpbGUuCisKKyAgICBJdCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHRvIGludGVncmF0ZSB0aGlzIGJvYXJkIGludG8gdGhlIGNiX3BjaWRkYQorICAgIGZpbGUsIGJ1dCBzaW5jZSB0aGF0IGlzbid0IG15IGNvZGUsIEkgZGlkbid0IHdhbnQgdG8gc2lnbmlmaWNhbnRseQorICAgIG1vZGlmeSB0aGF0IGZpbGUgdG8gc3VwcG9ydCB0aGlzIGJvYXJkIChJIHRob3VnaHQgaXQgaW1wb2xpdGUgdG8gZG8gc28pLgorCisgICAgQXQgYW55IHJhdGUsIGlmIHlvdSBmZWVsIGFtYml0aW91cywgcGxlYXNlIGZlZWwgZnJlZSB0byB0YWtlCisgICAgdGhlIGNvZGUgb3V0IG9mIHRoaXMgZmlsZSBhbmQgY29tYmluZSBpdCB3aXRoIGEgbW9yZSB1bmlmaWVkIGRyaXZlcgorICAgIGZpbGUuCisKKyAgICBJIHdvdWxkIGxpa2UgdG8gdGhhbmsgVGltb3RoeSBDdXJyeSA8VGltb3RoeS5DdXJyeUByZGVjLnJlZHN0b25lLmFybXkubWlsPgorICAgIGZvciBsZW5kaW5nIG1lIGEgYm9hcmQgc28gdGhhdCBJIGNvdWxkIHdyaXRlIHRoaXMgZHJpdmVyLgorCisgICAgLUNhbGluIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNpbmNsdWRlICI4MjU1LmgiCisKKy8qIGRldmljZSBpZHMgb2YgdGhlIGNhcmRzIHdlIHN1cHBvcnQgLS0gY3VycmVudGx5IG9ubHkgMSBjYXJkIHN1cHBvcnRlZCAqLworI2RlZmluZSBQQ0lfSURfUENJTV9EREEwNl8xNiAweDAwNTMKKworLyoKKyAqIFRoaXMgaXMgc3RyYWlnaHQgZnJvbSBza2VsLmMgLS0gSSBkaWQgdGhpcyBpbiBjYXNlIHRoaXMgc291cmNlIGZpbGUKKyAqIHdpbGwgc29tZWRheSBzdXBwb3J0IG1vcmUgdGhhbiAxIGJvYXJkLi4uCisgKi8KK3N0cnVjdCBib2FyZF9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOworCWludCBhb19jaGFuczsKKwlpbnQgYW9fYml0czsKKwlpbnQgZGlvX2NoYW5zOworCWludCBkaW9fbWV0aG9kOworCWludCBkaW9fb2Zmc2V0OwkJLyogaG93IG1hbnkgYnl0ZXMgaW50byB0aGUgQkFEUiBhcmUgdGhlIERJTyBwb3J0cyAqLworCWludCByZWdzX2JhZHJpbmRleDsJLyogSU8gUmVnaW9uIGZvciB0aGUgY29udHJvbCwgYW5hbG9nIG91dHB1dCwKKwkJCQkgICBhbmQgRElPIHJlZ2lzdGVycyAqLworCWludCByZWdfc3o7CQkvKiBudW1iZXIgb2YgYnl0ZXMgb2YgcmVnaXN0ZXJzIGluIGlvIHJlZ2lvbiAqLworfTsKKworZW51bSBESU9fTUVUSE9EUyB7CisJRElPX05PTkUgPSAwLAorCURJT184MjU1LAorCURJT19JTlRFUk5BTAkJLyogdW5pbXBsZW1lbnRlZCAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBib2FyZF9zdHJ1Y3QgYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJjYl9wY2ltZGRhMDYtMTYiLAorCSAgICAgIGRldmljZV9pZDpQQ0lfSURfUENJTV9EREEwNl8xNiwKKwkgICAgICBhb19jaGFuczo2LAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIGRpb19jaGFuczoyNCwKKwkgICAgICBkaW9fbWV0aG9kOkRJT184MjU1LAorCSAgICAgIGRpb19vZmZzZXQ6MTIsCisJICAgICAgcmVnc19iYWRyaW5kZXg6MywKKwkgICAgICByZWdfc3o6CTE2LAorCQl9Cit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAgICAoKGNvbnN0IHN0cnVjdCBib2FyZF9zdHJ1Y3QgKilkZXYtPmJvYXJkX3B0cikKKworLyogTnVtYmVyIG9mIGJvYXJkcyBpbiBib2FyZHNbXSAqLworI2RlZmluZSBOX0JPQVJEUwkoc2l6ZW9mKGJvYXJkcykgLyBzaXplb2Yoc3RydWN0IGJvYXJkX3N0cnVjdCkpCisjZGVmaW5lIFJFR19TWiAodGhpc2JvYXJkLT5yZWdfc3opCisjZGVmaW5lIFJFR1NfQkFEUklOREVYICh0aGlzYm9hcmQtPnJlZ3NfYmFkcmluZGV4KQorCisvKiBUaGlzIGlzIHVzZWQgYnkgbW9kcHJvYmUgdG8gdHJhbnNsYXRlIFBDSSBJRHMgdG8gZHJpdmVycy4gIFNob3VsZAorICogb25seSBiZSB1c2VkIGZvciBQQ0kgYW5kIElTQS1QblAgZGV2aWNlcyAqLworLyogUGxlYXNlIGFkZCB5b3VyIFBDSSB2ZW5kb3IgSUQgdG8gY29tZWRpZGV2LmgsIGFuZCBpdCB3aWxsIGJlIGZvcndhcmRlZAorICogdXBzdHJlYW0uICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgUENJX0lEX1BDSU1fRERBMDZfMTYsIFBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV90YWJsZSk7CisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBib2FyZF9wcml2YXRlX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyByZWdpc3RlcnM7CS8qIHNldCBieSBwcm9iZSAqLworCXVuc2lnbmVkIGxvbmcgZGlvX3JlZ2lzdGVyczsKKwljaGFyIGF0dGFjaGVkX3RvXzgyNTU7CS8qIGJvb2xlYW4gKi8KKwljaGFyIGF0dGFjaGVkX3N1Y2Nlc3NmdWxseTsJLyogYm9vbGVhbiAqLworCS8qIHdvdWxkIGJlIHVzZWZ1bCBmb3IgYSBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKyNkZWZpbmUgTUFYX0FPX1JFQURCQUNLX0NIQU5ORUxTIDYKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1tNQVhfQU9fUkVBREJBQ0tfQ0hBTk5FTFNdOworCit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGJvYXJkX3ByaXZhdGVfc3RydWN0ICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBhdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGNiX3BjaW1kZGFfZHJpdmVyID0geworICAgICAgZHJpdmVyX25hbWU6ImNiX3BjaW1kZGEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmF0dGFjaCwKKyAgICAgIGRldGFjaDpkZXRhY2gsCit9OworCitNT0RVTEVfQVVUSE9SKCJDYWxpbiBBLiBDdWxpYW51IDxjYWxpbkBydGxhYi5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIGZvciB0aGUgQ29tcHV0ZXJib2FyZHMgUENJTS1EREEgIgorCSJzZXJpZXMuICBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBQQ0lNLUREQTA2LTE2ICh3aGljaCAiCisJImFsc28gaGFwcGVucyB0byBiZSB0aGUgb25seSBib2FyZCBpbiB0aGlzIHNlcmllcy4gOikgKSAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVBfTk9NT0RVTEUoY2JfcGNpbWRkYV9kcml2ZXIsIHBjaV90YWJsZSk7CisKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSEVMUEVSIEZVTkNUSU9OIERFQ0xBUkFUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiByZXR1cm5zIGEgbWF4ZGF0YSB2YWx1ZSBmb3IgYSBnaXZlbiBuX2JpdHMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZpZ3VyZV9vdXRfbWF4ZGF0YShpbnQgYml0cykKK3sKKwlyZXR1cm4gKCgodW5zaWduZWQgaW50KSAxIDw8IGJpdHMpIC0gMSk7Cit9CisKKy8qCisgKiAgUHJvYmVzIGZvciBhIHN1cHBvcnRlZCBkZXZpY2UuCisgKgorICogIFByZXJlcXVpc2l0ZTogcHJpdmF0ZSBiZSBhbGxvY2F0ZWQgYWxyZWFkeSBpbnNpZGUgZGV2CisgKgorICogIElmIHRoZSBkZXZpY2UgaXMgZm91bmQsIGl0IHJldHVybnMgMCBhbmQgaGFzIHRoZSBmb2xsb3dpbmcgc2lkZSBlZmZlY3RzOgorICoKKyAqICBvICBhc3NpZ25zIGEgc3RydWN0IHBjaV9kZXYgKiB0byBkZXYtPnByaXZhdGUtPnBjaV9kZXYKKyAqICBvICBhc3NpZ25zIGEgc3RydWN0IGJvYXJkICogdG8gZGV2LT5ib2FyZF9wdHIKKyAqICBvICBzZXRzIGRldi0+cHJpdmF0ZS0+cmVnaXN0ZXJzCisgKiAgbyAgc2V0cyBkZXYtPnByaXZhdGUtPmRpb19yZWdpc3RlcnMKKyAqCisgKiAgT3RoZXJ3aXNlLCByZXR1cm5zIGEgLWVycm5vIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBGVU5DVElPTiBERUZJTklUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBlcnI7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKiBpZiB0aGlzIGZ1bmN0aW9uIGZhaWxzIChyZXR1cm5zIG5lZ2F0aXZlKSB0aGVuIHRoZSBwcml2YXRlIGFyZWEgaXMKKyAqIGtmcmVlJ2QgYnkgY29tZWRpCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYm9hcmRfcHJpdmF0ZV9zdHJ1Y3QpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisvKgorICogSWYgeW91IGNhbiBwcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiBhIHNlcmllcworICogaXQgaXMsIHRoaXMgaXMgdGhlIHBsYWNlIHRvIGRvIGl0LiAgT3RoZXJ3aXNlLCBkZXYtPmJvYXJkX3B0cgorICogc2hvdWxkIGFscmVhZHkgYmUgaW5pdGlhbGl6ZWQuCisgKi8KKwlpZiAoKGVyciA9IHByb2JlKGRldiwgaXQpKSkKKwkJcmV0dXJuIGVycjsKKworLyogT3V0cHV0IHNvbWUgaW5mbyAqLworCXByaW50aygiY29tZWRpJWQ6ICVzOiAiLCBkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUpOworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwlzLT5tYXhkYXRhID0gZmlndXJlX291dF9tYXhkYXRhKHRoaXNib2FyZC0+YW9fYml0cyk7CisJLyogdGhpcyBpcyBoYXJkLWNvZGVkIGhlcmUgKi8KKwlpZiAoaXQtPm9wdGlvbnNbMl0pIHsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCX0gZWxzZSB7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCX0KKwlzLT5pbnNuX3dyaXRlID0gJmFvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZhb19yaW5zbjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmRpb19jaGFucykgeworCQlzd2l0Y2ggKHRoaXNib2FyZC0+ZGlvX21ldGhvZCkgeworCQljYXNlIERJT184MjU1OgorCQkJLyogdGhpcyBpcyBhIHN0cmFpZ2h0IDgyNTUsIHNvIHJlZ2lzdGVyIHVzIHdpdGggdGhlIDgyNTUgZHJpdmVyICovCisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2cHJpdi0+ZGlvX3JlZ2lzdGVycyk7CisJCQlkZXZwcml2LT5hdHRhY2hlZF90b184MjU1ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIERJT19JTlRFUk5BTDoKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiRElPX0lOVEVSTkFMIG5vdCBpbXBsZW1lbnRlZCB5ZXQhXG4iKTsKKwkJCXJldHVybiAtRU5YSU87CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJZGV2cHJpdi0+YXR0YWNoZWRfc3VjY2Vzc2Z1bGx5ID0gMTsKKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXZwcml2KSB7CisKKwkJaWYgKGRldi0+c3ViZGV2aWNlcyAmJiBkZXZwcml2LT5hdHRhY2hlZF90b184MjU1KSB7CisJCQkvKiBkZS1yZWdpc3RlciB1cyBmcm9tIHRoZSA4MjU1IGRyaXZlciAqLworCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCQkJZGV2cHJpdi0+YXR0YWNoZWRfdG9fODI1NSA9IDA7CisJCX0KKworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldnByaXYtPnJlZ2lzdGVycykgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisKKwkJaWYgKGRldnByaXYtPmF0dGFjaGVkX3N1Y2Nlc3NmdWxseSAmJiB0aGlzYm9hcmQpCisJCQlwcmludGsoImNvbWVkaSVkOiAlczogZGV0YWNoZWRcbiIsIGRldi0+bWlub3IsCisJCQkJdGhpc2JvYXJkLT5uYW1lKTsKKworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gZGV2cHJpdi0+cmVnaXN0ZXJzICsgY2hhbiAqIDI7CisKKwkvKiBXcml0aW5nIGEgbGlzdCBvZiB2YWx1ZXMgdG8gYW4gQU8gY2hhbm5lbCBpcyBwcm9iYWJseSBub3QKKwkgKiB2ZXJ5IHVzZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJLyogIGZpcnN0LCBsb2FkIHRoZSBsb3cgYnl0ZSAqLworCQlvdXRiKChjaGFyKShkYXRhW2ldICYgMHgwMGZmKSwgb2Zmc2V0KTsKKwkJLyogIG5leHQsIHdyaXRlIHRoZSBoaWdoIGJ5dGUgLS0gb25seSBhZnRlciB0aGlzIGlzIHdyaXR0ZW4gaXMKKwkJICAgdGhlIGNoYW5uZWwgdm9sdGFnZSB1cGRhdGVkIGluIHRoZSBEQUMsIHVubGVzcworCQkgICB3ZSdyZSBpbiBzaW11bHRhbmVvdXMgeGZlciBtb2RlIChqdW1wZXIgb24gY2FyZCkKKwkJICAgdGhlbiBhIHJpbnNuIGlzIG5lY2Vzc2FyeSB0byBhY3R1YWxseSB1cGRhdGUgdGhlIERBQyAtLQorCQkgICBzZWUgYW9fcmluc24oKSBiZWxvdy4uLiAqLworCQlvdXRiKChjaGFyKShkYXRhW2ldID4+IDggJiAweDAwZmYpLCBvZmZzZXQgKyAxKTsKKworCQkvKiBmb3IgdGVzdGluZyBvbmx5Li4gdGhlIGFjdHVhbCByaW5zbiBTSE9VTEQgZG8gYW4gaW53IQorCQkgICAoc2VlIHRoZSBzdHVmZiBhYm91dCBzaW11bHRhbmVvdXMgWEZFUiBtb2RlIG9uIHRoaXMgYm9hcmQpICovCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorCisgICBVc3VhbGx5IHRoaXMgbWVhbnMgY29weWluZyBhIHZhbHVlIHN0b3JlZCBpbiBkZXZwcml2LT5hb19yZWFkYmFjay4KKyAgIEhvd2V2ZXIsIHNpbmNlIHRoaXMgYm9hcmQgaGFzIHRoaXMganVtcGVyIHNldHRpbmcgY2FsbGVkICJTaW11bHRhbmVvdXMKKyAgIFhmZXIgbW9kZSIgKG9mZiBieSBkZWZhdWx0KSwgd2Ugd2lsbCBzdXBwb3J0IGl0LiAgU2ltdWx0YW5lYW91cyB4ZmVyCisgICBtb2RlIGlzIGFjY29tcGxpc2hlZCBieSBsb2FkaW5nIEFMTCB0aGUgdmFsdWVzIHlvdSB3YW50IGZvciBBTyBpbiBhbGwgdGhlCisgICBjaGFubmVscywgdGhlbiBSRUFEaW5nIG9mZiBvbmUgb2YgdGhlIEFPIHJlZ2lzdGVycyB0byBpbml0aWF0ZSB0aGUKKyAgIGluc3RhbnRhbmVvdXMgc2ltdWx0YW5lb3VzIHVwZGF0ZSBvZiBhbGwgREFDIG91dHB1dHMsIHdoaWNoIG1ha2VzCisgICBhbGwgQU8gY2hhbm5lbHMgdXBkYXRlIHNpbXVsdGFuZW91c2x5LiAgVGhpcyBpcyB1c2VmdWwgZm9yIHNvbWUgY29udHJvbAorICAgYXBwbGljYXRpb25zLCBJIHdvdWxkIGltYWdpbmUuCisqLworc3RhdGljIGludCBhb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJaW53KGRldnByaXYtPnJlZ2lzdGVycyArIGNoYW4gKiAyKTsKKwkJLyogc2hvdWxkIEkgc2V0IGRhdGFbaV0gdG8gdGhlIHJlc3VsdCBvZiB0aGUgYWN0dWFsIHJlYWQgb24gdGhlIHJlZ2lzdGVyCisJCSAgIG9yIHRoZSBjYWNoZWQgdW5zaWduZWQgaW50IGluIGRldnByaXYtPmFvX3JlYWRiYWNrW10/ICovCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSEVMUEVSIEZVTkNUSU9OIERFRklOSVRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiAgUHJvYmVzIGZvciBhIHN1cHBvcnRlZCBkZXZpY2UuCisgKgorICogIFByZXJlcXVpc2l0ZTogcHJpdmF0ZSBiZSBhbGxvY2F0ZWQgYWxyZWFkeSBpbnNpZGUgZGV2CisgKgorICogIElmIHRoZSBkZXZpY2UgaXMgZm91bmQsIGl0IHJldHVybnMgMCBhbmQgaGFzIHRoZSBmb2xsb3dpbmcgc2lkZSBlZmZlY3RzOgorICoKKyAqICBvICBhc3NpZ25zIGEgc3RydWN0IHBjaV9kZXYgKiB0byBkZXYtPnByaXZhdGUtPnBjaV9kZXYKKyAqICBvICBhc3NpZ25zIGEgc3RydWN0IGJvYXJkICogdG8gZGV2LT5ib2FyZF9wdHIKKyAqICBvICBzZXRzIGRldi0+cHJpdmF0ZS0+cmVnaXN0ZXJzCisgKiAgbyAgc2V0cyBkZXYtPnByaXZhdGUtPmRpb19yZWdpc3RlcnMKKyAqCisgKiAgT3RoZXJ3aXNlLCByZXR1cm5zIGEgLWVycm5vIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlpbnQgaW5kZXg7CisJdW5zaWduZWQgbG9uZyByZWdpc3RlcnM7CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCQkvLyBpcyBpdCBub3QgYSBjb21wdXRlciBib2FyZHMgY2FyZD8KKwkJaWYgKHBjaWRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMpCisJCQljb250aW51ZTsKKwkJLy8gbG9vcCB0aHJvdWdoIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcgorCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOX0JPQVJEUzsgaW5kZXgrKykgeworCQkJaWYgKGJvYXJkc1tpbmRleF0uZGV2aWNlX2lkICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCS8qIGZvdW5kICEgKi8KKworCQkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwkJCWRldi0+Ym9hcmRfcHRyID0gYm9hcmRzICsgaW5kZXg7CisJCQlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCB0aGlzYm9hcmQtPm5hbWUpKSB7CisJCQkJcHJpbnRrKCJjYl9wY2ltZGRhOiBGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlyZWdpc3RlcnMgPQorCQkJCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LAorCQkJCVJFR1NfQkFEUklOREVYKTsKKwkJCWRldnByaXYtPnJlZ2lzdGVycyA9IHJlZ2lzdGVyczsKKwkJCWRldnByaXYtPmRpb19yZWdpc3RlcnMKKwkJCQk9IGRldnByaXYtPnJlZ2lzdGVycyArIHRoaXNib2FyZC0+ZGlvX29mZnNldDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcHJpbnRrKCJjYl9wY2ltZGRhOiBObyBzdXBwb3J0ZWQgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgIgorCQkiY2FyZCBmb3VuZCBhdCB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfYm9uZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMKaW5kZXggOWU1NDk2Zi4uMWVlNDg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMKQEAgLTU5LDcgKzU5LDcgQEAKICAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQogICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAogICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KLSAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlCisgKiAgIFNlZSB0aGUgY29tbWVudCBuZWFyIGJvYXJkX25hbWU6IGluIHRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUKICAqICAgYmVsb3cuICBJZiAobWFudWZhY3R1cmVyKSBvciBbY29tZWRpIG5hbWVdIGlzIG1pc3NpbmcsIHRoZSBwcmV2aW91cwogICogICB2YWx1ZSBpcyB1c2VkLgogICogQXV0aG9yOiB5b3UKQEAgLTE0Miw3ICsxNDIsNyBAQAogI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgQm9uZGluZ0JvYXJkICopZGV2LT5ib2FyZF9wdHIpCiAKIHN0cnVjdCBCb25kZWREZXZpY2UgewotCWNvbWVkaV90ICpkZXY7CisJdm9pZCAqZGV2OwogCXVuc2lnbmVkIG1pbm9yOwogCXVuc2lnbmVkIHN1YmRldjsKIAl1bnNpZ25lZCBzdWJkZXZfdHlwZTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgogICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKLSAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCiBzdHJ1Y3QgUHJpdmF0ZSB7CiAjIGRlZmluZSBNQVhfQk9BUkRfTkFNRSAyNTYKIAljaGFyIG5hbWVbTUFYX0JPQVJEX05BTUVdOwpAQCAtMTcxLDIxICsxNzEsMjEgQEAKICNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBQcml2YXRlICopZGV2LT5wcml2YXRlKQogCiAvKgotICogVGhlIGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQogICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQogICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCiAgKiB0aGUgZGV2aWNlIGNvZGUuCiAgKi8KLXN0YXRpYyBpbnQgYm9uZGluZ19hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCk7Ci1zdGF0aWMgaW50IGJvbmRpbmdfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGJvbmRpbmdfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IGJvbmRpbmdfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogLyoqIEJ1aWxkIFByaXZhdGUgYXJyYXkgb2YgYWxsIGRldmljZXMuLiAqLwotc3RhdGljIGludCBkb0RldkNvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KTsKLXN0YXRpYyB2b2lkIGRvRGV2VW5jb25maWcoY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgZG9EZXZDb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyB2b2lkIGRvRGV2VW5jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAvKiBVZ2x5IGltcGxlbWVudGF0aW9uIG9mIHJlYWxsb2MgdGhhdCBhbHdheXMgY29waWVzIG1lbW9yeSBhcm91bmQgLS0gSSdtIGxhenksCiAgKiB3aGF0IGNhbiBJIHNheT8gIEkgbGlrZSB0byBkbyB3YXN0ZWZ1bCBtZW1jb3BpZXMuLiA6KSAqLwogc3RhdGljIHZvaWQgKlJlYWxsb2MoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuLCBzaXplX3Qgb2xkX2xlbik7CiAKLXN0YXRpYyBjb21lZGlfZHJpdmVyIGRyaXZlcl9ib25kaW5nID0geworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9ib25kaW5nID0gewogICAgICAgLmRyaXZlcl9uYW1lID0JTU9EVUxFX05BTUUsCiAgICAgICAubW9kdWxlID0JCVRISVNfTU9EVUxFLAogICAgICAgLmF0dGFjaCA9CQlib25kaW5nX2F0dGFjaCwKQEAgLTIxMywxMCArMjEzLDEwIEBACiAgICAgICAubnVtX25hbWVzID0Jc2l6ZW9mKGJvbmRpbmdCb2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBCb25kaW5nQm9hcmQpLAogfTsKIAotc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpOwotc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKTsKK3N0YXRpYyBpbnQgYm9uZGluZ19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAogLyoKICAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCkBAIC0yMjQsOSArMjI0LDkgQEAKICAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CiAgKiBhZGRyZXNzLgogICovCi1zdGF0aWMgaW50IGJvbmRpbmdfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpCitzdGF0aWMgaW50IGJvbmRpbmdfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJTE9HX01TRygiY29tZWRpJWRcbiIsIGRldi0+bWlub3IpOwogCkBAIC0yODEsNyArMjgxLDcgQEAKICAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKICAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCiAgKi8KLXN0YXRpYyBpbnQgYm9uZGluZ19kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIGludCBib25kaW5nX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCUxPR19NU0coImNvbWVkaSVkOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCWRvRGV2VW5jb25maWcoZGV2KTsKQEAgLTI5MywxMCArMjkzLDEwIEBACiAgKiB1c2VmdWwgdG8gYXBwbGljYXRpb25zIGlmIHlvdSBpbXBsZW1lbnQgdGhlIGluc25fYml0cyBpbnRlcmZhY2UuCiAgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUKICAqIGNvbWVkaSBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KLXN0YXRpYyBpbnQgYm9uZGluZ19kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewotI2RlZmluZSBMU0FNUExfQklUUyAoc2l6ZW9mKGxzYW1wbF90KSo4KQorI2RlZmluZSBMU0FNUExfQklUUyAoc2l6ZW9mKHVuc2lnbmVkIGludCkqOCkKIAl1bnNpZ25lZCBuY2hhbnMgPSBMU0FNUExfQklUUywgbnVtX2RvbmUgPSAwLCBpOwogCWlmIChpbnNuLT5uICE9IDIpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzEyLDEyICszMTIsMTIgQEAKIAkJICAgdG8gdGhpcyBzdWJkZXZpY2UuLiBuZWVkIHRvIHNoaWZ0IHRoZW0gdG8gemVybyBwb3NpdGlvbiBvZgogCQkgICBjb3Vyc2UuICovCiAJCS8qIEJpdHMgY29ycmVzcG9uZGluZyB0byB0aGlzIHN1YmRldi4gKi8KLQkJbHNhbXBsX3Qgc3ViZGV2TWFzayA9ICgoMSA8PCBiZGV2LT5uY2hhbnMpIC0gMSk7Ci0JCWxzYW1wbF90IHdyaXRlTWFzaywgZGF0YUJpdHM7CisJCXVuc2lnbmVkIGludCBzdWJkZXZNYXNrID0gKCgxIDw8IGJkZXYtPm5jaGFucykgLSAxKTsKKwkJdW5zaWduZWQgaW50IHdyaXRlTWFzaywgZGF0YUJpdHM7CiAKIAkJLyogQXJnaCwgd2UgaGF2ZSA+PSBMU0FNUExfQklUUyBjaGFucy4uIHRha2UgYWxsIGJpdHMgKi8KIAkJaWYgKGJkZXYtPm5jaGFucyA+PSBMU0FNUExfQklUUykKLQkJCXN1YmRldk1hc2sgPSAobHNhbXBsX3QpICgtMSk7CisJCQlzdWJkZXZNYXNrID0gKHVuc2lnbmVkIGludCkgKC0xKTsKIAogCQl3cml0ZU1hc2sgPSAoZGF0YVswXSA+PiBudW1fZG9uZSkgJiBzdWJkZXZNYXNrOwogCQlkYXRhQml0cyA9IChkYXRhWzFdID4+IG51bV9kb25lKSAmIHN1YmRldk1hc2s7CkBAIC0zNDAsOCArMzQwLDggQEAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KIAotc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCByZXQsIGlvX2JpdHMgPSBzLT5pb19iaXRzOwogCXVuc2lnbmVkIGludCBpbzsKQEAgLTM5NCwxMCArMzk0LDEwIEBACiAJcmV0dXJuIG5ld21lbTsKIH0KIAotc3RhdGljIGludCBkb0RldkNvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCBkb0RldkNvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJaW50IGk7Ci0JY29tZWRpX3QgKmRldnNfb3BlbmVkW0NPTUVESV9OVU1fQk9BUkRfTUlOT1JTXTsKKwl2b2lkICpkZXZzX29wZW5lZFtDT01FRElfTlVNX0JPQVJEX01JTk9SU107CiAKIAltZW1zZXQoZGV2c19vcGVuZWQsIDAsIHNpemVvZihkZXZzX29wZW5lZCkpOwogCWRldnByaXYtPm5hbWVbMF0gPSAwOzsKQEAgLTQwNiw3ICs0MDYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBDT01FRElfTkRFVkNPTkZPUFRTICYmICghaSB8fCBpdC0+b3B0aW9uc1tpXSk7ICsraSkgewogCQljaGFyIGZpbGVbXSA9ICIvZGV2L2NvbWVkaVhYWFhYWCI7CiAJCWludCBtaW5vciA9IGl0LT5vcHRpb25zW2ldOwotCQljb21lZGlfdCAqZDsKKwkJdm9pZCAqZDsKIAkJaW50IHNkZXYgPSAtMSwgbmNoYW5zLCB0bXA7CiAJCXN0cnVjdCBCb25kZWREZXZpY2UgKmJkZXYgPSBOVUxMOwogCkBAIC00OTcsNyArNDk3LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgZG9EZXZVbmNvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBkb0RldlVuY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBkZXZzX2Nsb3NlZCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfZmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfZmMuYwppbmRleCBjZDc0ZGJlLi45ZmE0Y2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5jCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgogCi1zdGF0aWMgdm9pZCBpbmNyZW1lbnRfc2Nhbl9wcm9ncmVzcyhjb21lZGlfc3ViZGV2aWNlICpzdWJkLAorc3RhdGljIHZvaWQgaW5jcmVtZW50X3NjYW5fcHJvZ3Jlc3Moc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQsCiAJCQkJICAgIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpCiB7Ci0JY29tZWRpX2FzeW5jICphc3luYyA9IHN1YmQtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gc3ViZC0+YXN5bmM7CiAJdW5zaWduZWQgaW50IHNjYW5fbGVuZ3RoID0gY2ZjX2J5dGVzX3Blcl9zY2FuKHN1YmQpOwogCiAJYXN5bmMtPnNjYW5fcHJvZ3Jlc3MgKz0gbnVtX2J5dGVzOwpAQCAtNDIsMTAgKzQyLDEwIEBACiB9CiAKIC8qIFdyaXRlcyBhbiBhcnJheSBvZiBkYXRhIHBvaW50cyB0byBjb21lZGkncyBidWZmZXIgKi8KLXVuc2lnbmVkIGludCBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQsIHZvaWQgKmRhdGEsCit1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwgdm9pZCAqZGF0YSwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKLQljb21lZGlfYXN5bmMgKmFzeW5jID0gc3ViZC0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzdWJkLT5hc3luYzsKIAl1bnNpZ25lZCBpbnQgcmV0dmFsOwogCiAJaWYgKG51bV9ieXRlcyA9PSAwKQpAQCAtNjcsMTAgKzY3LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNmY193cml0ZV9hcnJheV90b19idWZmZXIpOwogCi11bnNpZ25lZCBpbnQgY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIoY29tZWRpX3N1YmRldmljZSAqc3ViZCwgdm9pZCAqZGF0YSwKK3Vuc2lnbmVkIGludCBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwgdm9pZCAqZGF0YSwKIAkJCQkJdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKLQljb21lZGlfYXN5bmMgKmFzeW5jID0gc3ViZC0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzdWJkLT5hc3luYzsKIAogCWlmIChudW1fYnl0ZXMgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC04NSw3ICs4NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKTsKIAotdW5zaWduZWQgaW50IGNmY19oYW5kbGVfZXZlbnRzKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqc3ViZCkKK3Vuc2lnbmVkIGludCBjZmNfaGFuZGxlX2V2ZW50cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCkKIHsKIAl1bnNpZ25lZCBpbnQgZXZlbnRzID0gc3ViZC0+YXN5bmMtPmV2ZW50czsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5oCmluZGV4IDY5NTJmZTIuLjQ5NGFlM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfZmMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmgKQEAgLTMwLDMwICszMCwzMCBAQAogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCiAvKiBXcml0ZXMgYW4gYXJyYXkgb2YgZGF0YSBwb2ludHMgdG8gY29tZWRpJ3MgYnVmZmVyICovCi1leHRlcm4gdW5zaWduZWQgaW50IGNmY193cml0ZV9hcnJheV90b19idWZmZXIoY29tZWRpX3N1YmRldmljZSAqc3ViZCwKK2V4dGVybiB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwKIAkJCQkJICAgICAgdm9pZCAqZGF0YSwKIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9ieXRlcyk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNmY193cml0ZV90b19idWZmZXIoY29tZWRpX3N1YmRldmljZSAqc3ViZCwKLQkJCQkJICAgICAgIHNhbXBsX3QgZGF0YSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNmY193cml0ZV90b19idWZmZXIoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQsCisJCQkJCSAgICAgICBzaG9ydCBkYXRhKQogewogCXJldHVybiBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHN1YmQsICZkYXRhLCBzaXplb2YoZGF0YSkpOwogfTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX2xvbmdfdG9fYnVmZmVyKGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQsCi0JCQkJCQkgICAgbHNhbXBsX3QgZGF0YSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNmY193cml0ZV9sb25nX3RvX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YSkKIHsKIAlyZXR1cm4gY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzdWJkLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKIH07CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIoY29tZWRpX3N1YmRldmljZSAqc3ViZCwKK2V4dGVybiB1bnNpZ25lZCBpbnQgY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQsCiAJCQkJCSAgICAgICB2b2lkICpkYXRhLAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9ieXRlcyk7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgY2ZjX2hhbmRsZV9ldmVudHMoY29tZWRpX2RldmljZSAqZGV2LAotCQkJCSAgICAgIGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfaGFuZGxlX2V2ZW50cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2ZjX2J5dGVzX3Blcl9zY2FuKGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjZmNfYnl0ZXNfcGVyX3NjYW4oc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQpCiB7CiAJaW50IG51bV9zYW1wbGVzOwogCWludCBiaXRzX3Blcl9zYW1wbGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3BhcnBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jCmluZGV4IGJhODM4ZmYuLmEyMzMzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jCkBAIC05MCw5ICs5MCw5IEBACiAjZGVmaW5lIFBBUlBPUlRfQiAxCiAjZGVmaW5lIFBBUlBPUlRfQyAyCiAKLXN0YXRpYyBpbnQgcGFycG9ydF9hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCk7Ci1zdGF0aWMgaW50IHBhcnBvcnRfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldik7Ci1zdGF0aWMgY29tZWRpX2RyaXZlciBkcml2ZXJfcGFycG9ydCA9IHsKK3N0YXRpYyBpbnQgcGFycG9ydF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgcGFycG9ydF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BhcnBvcnQgPSB7CiAgICAgICAuZHJpdmVyX25hbWUgPQkiY29tZWRpX3BhcnBvcnQiLAogICAgICAgLm1vZHVsZSA9CQlUSElTX01PRFVMRSwKICAgICAgIC5hdHRhY2ggPQkJcGFycG9ydF9hdHRhY2gsCkBAIC0xMDgsOCArMTA4LDggQEAKIH07CiAjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGFycG9ydF9wcml2YXRlICopKGRldi0+cHJpdmF0ZSkpCiAKLXN0YXRpYyBpbnQgcGFycG9ydF9pbnNuX2EoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9hKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpZiAoZGF0YVswXSkgewogCQlkZXZwcml2LT5hX2RhdGEgJj0gfmRhdGFbMF07CkBAIC0xMjMsOCArMTIzLDggQEAKIAlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2luc25fY29uZmlnX2EoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9jb25maWdfYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaWYgKGRhdGFbMF0pIHsKIAkJcy0+aW9fYml0cyA9IDB4ZmY7CkBAIC0xMzgsOCArMTM4LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2luc25fYihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnNuX2Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWlmIChkYXRhWzBdKSB7CiAJCS8qIHNob3VsZCB3cml0ZXMgYmUgaWdub3JlZD8gKi8KQEAgLTE1MSw4ICsxNTEsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9jKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBwYXJwb3J0X2luc25fYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJZGF0YVswXSAmPSAweDBmOwogCWlmIChkYXRhWzBdKSB7CkBAIC0xNjcsOCArMTY3LDggQEAKIAlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2ludHJfaW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnRyX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWlmIChpbnNuLT5uIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzcsOCArMTc3LDggQEAKIAlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2ludHJfY21kdGVzdChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJY29tZWRpX2NtZCAqY21kKQorc3RhdGljIGludCBwYXJwb3J0X2ludHJfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwOwogCWludCB0bXA7CkBAIC0yNTIsNyArMjUyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2ludHJfY21kKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnRyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlkZXZwcml2LT5jX2RhdGEgfD0gMHgxMDsKIAlvdXRiKGRldnByaXYtPmNfZGF0YSwgZGV2LT5pb2Jhc2UgKyBQQVJQT1JUX0MpOwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFycG9ydF9pbnRyX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHBhcnBvcnRfaW50cl9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgInBhcnBvcnRfaW50cl9jYW5jZWwoKVxuIik7CiAKQEAgLTI3Niw4ICsyNzYsOCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcGFycG9ydF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKIAogCWlmICghZGV2cHJpdi0+ZW5hYmxlX2lycSkgewogCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV9wYXJwb3J0OiBib2d1cyBpcnEsIGlnbm9yZWRcbiIpOwpAQCAtMjkxLDEyICsyOTEsMTIgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcGFycG9ydF9hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCkKK3N0YXRpYyBpbnQgcGFycG9ydF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGlycTsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CiAJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBhcnBvcnQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKQEAgLTM3Niw3ICszNzYsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcGFycG9ydF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlwcmludGsoImNvbWVkaSVkOiBwYXJwb3J0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3J0X3RpbWVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3J0X3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwYzhjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcnRfdGltZXIuYwpAQCAtMCwwICsxLDcyOCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jb21lZGlfcnRfdGltZXIuYworICAgIHZpcnR1YWwgZHJpdmVyIGZvciB1c2luZyBSVEwgdGltaW5nIHNvdXJjZXMKKworICAgIEF1dGhvcnM6IERhdmlkIEEuIFNjaGxlZWYsIEZyYW5rIE0uIEhlc3MKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGNvbWVkaV9ydF90aW1lcgorRGVzY3JpcHRpb246IENvbW1hbmQgZW11bGF0b3IgdXNpbmcgcmVhbC10aW1lIHRhc2tzCitBdXRob3I6IGRzLCBmbWhlc3MKK0RldmljZXM6CitTdGF0dXM6IHdvcmtzCisKK1RoaXMgZHJpdmVyIHJlcXVpcmVzIFJUQUkgb3IgUlRMaW51eCB0byB3b3JrIGNvcnJlY3RseS4gIEl0IGRvZXNuJ3QKK2FjdHVhbGx5IGRyaXZlIGhhcmR3YXJlIGRpcmVjdGx5LCBidXQgY2FsbHMgb3RoZXIgZHJpdmVycyBhbmQgdXNlcworYSByZWFsLXRpbWUgdGFzayB0byBlbXVsYXRlIGNvbW1hbmRzIGZvciBkcml2ZXJzIGFuZCBkZXZpY2VzIHRoYXQKK2FyZSBpbmNhcGFibGUgb2YgbmF0aXZlIGNvbW1hbmRzLiAgVGh1cywgeW91IGNhbiBnZXQgYWNjdXJhdGVseQordGltZWQgSS9PIG9uIGFueSBkZXZpY2UuCisKK1NpbmNlIHRoZSB0aW1pbmcgaXMgYWxsIGRvbmUgaW4gc29mdHdhcmUsIHNhbXBsaW5nIGppdHRlciBpcyBtdWNoCitoaWdoZXIgdGhhbiB3aXRoIGEgZGV2aWNlIHRoYXQgaGFzIGFuIG9uLWJvYXJkIHRpbWVyLCBhbmQgbWF4aW11bQorc2FtcGxlIHJhdGUgaXMgbXVjaCBsb3dlci4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBtaW5vciBudW1iZXIgb2YgZGV2aWNlIHlvdSB3aXNoIHRvIGVtdWxhdGUgY29tbWFuZHMgZm9yCisgIFsxXSAtIHN1YmRldmljZSBudW1iZXIgeW91IHdpc2ggdG8gZW11bGF0ZSBjb21tYW5kcyBmb3IKKyovCisvKgorVE9ETzoKKwlTdXBwb3J0IGZvciBkaWdpdGFsIGlvIGNvbW1hbmRzIGNvdWxkIGJlIGFkZGVkLCBleGNlcHQgSSBjYW4ndCBzZWUgd2h5CisJCWFueW9uZSB3b3VsZCB3YW50IHRvIHVzZSB0aGVtCisJV2hhdCBoYXBwZW5zIGlmIGRldmljZSB3ZSBhcmUgZW11bGF0aW5nIGZvciBpcyBkZS1jb25maWd1cmVkPworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgIi4uL2NvbWVkaWxpYi5oIgorCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1JUTF9WMQorI2luY2x1ZGUgPHJ0bF9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9ydF9pcnEuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19DT01FRElfUlRMCisjaW5jbHVkZSA8cnRsLmg+CisjaW5jbHVkZSA8cnRsX3NjaGVkLmg+CisjaW5jbHVkZSA8cnRsX2NvbXBhdC5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaWZuZGVmIFJUTElOVVhfVkVSU0lPTl9DT0RFCisjZGVmaW5lIFJUTElOVVhfVkVSU0lPTl9DT0RFIDAKKyNlbmRpZgorI2lmbmRlZiBSVExJTlVYX1ZFUlNJT04KKyNkZWZpbmUgUlRMSU5VWF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorI2VuZGlmCisKKy8vIGJlZ2luIGhhY2sgdG8gd29ya2Fyb3VuZCBicm9rZW4gSFJUX1RPXzgyNTQoKSBmdW5jdGlvbiBvbiBydGxpbnV4CisjaWYgUlRMSU5VWF9WRVJTSU9OX0NPREUgPD0gUlRMSU5VWF9WRVJTSU9OKDMsMCwxMDApCisvLyB0aGlzIGZ1bmN0aW9uIHNvbGUgcHVycG9zZSBpcyB0byBkaXZpZGUgYSBsb25nIGxvbmcgYnkgODM4CitzdGF0aWMgaW5saW5lIFJUSU1FIG5hbm8yY291bnQobG9uZyBsb25nIG5zKQoreworCWRvX2RpdihucywgODM4KTsKKwlyZXR1cm4gbnM7Cit9CisKKyNpZmRlZiBydF9nZXRfdGltZSgpCisjdW5kZWYgcnRfZ2V0X3RpbWUoKQorI2VuZGlmCisjZGVmaW5lIHJ0X2dldF90aW1lKCkgbmFubzJjb3VudChnZXRocnRpbWUoKSkKKworI2Vsc2UKKworI2RlZmluZSBuYW5vMmNvdW50KHgpIEhSVF9UT184MjU0KHgpCisjZW5kaWYKKy8vIGVuZCBoYWNrCisKKy8vIHJ0bC1ydGFpIGNvbXBhdGliaWxpdHkKKyNkZWZpbmUgcnRfdGFza193YWl0X3BlcmlvZCgpIHJ0X3Rhc2tfd2FpdCgpCisjZGVmaW5lIHJ0X3BlbmRfbGludXhfc3JxKGlycSkgcnRsX2dsb2JhbF9wZW5kX2lycShpcnEpCisjZGVmaW5lIHJ0X2ZyZWVfc3JxKGlycSkgcnRsX2ZyZWVfc29mdF9pcnEoaXJxKQorI2RlZmluZSBydF9yZXF1ZXN0X3NycSh4LHkseikgcnRsX2dldF9zb2Z0X2lycSh5LCJ0aW1lciIpCisjZGVmaW5lIHJ0X3Rhc2tfaW5pdChhLGIsYyxkLGUsZixnKSBydF90YXNrX2luaXQoYSxiLGMsZCwoZSkrMSkKKyNkZWZpbmUgcnRfdGFza19yZXN1bWUoeCkgcnRfdGFza193YWtldXAoeCkKKyNkZWZpbmUgcnRfc2V0X29uZXNob3RfbW9kZSgpCisjZGVmaW5lIHN0YXJ0X3J0X3RpbWVyKHgpCisjZGVmaW5lIHN0b3BfcnRfdGltZXIoKQorCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09NRURJX1JUQUkKKyNpbmNsdWRlIDxydGFpLmg+CisjaW5jbHVkZSA8cnRhaV9zY2hlZC5oPgorCisjaWYgUlRBSV9WRVJTSU9OX0NPREUgPCBSVEFJX01BTkdMRV9WRVJTSU9OKDMsMywwKQorI2RlZmluZSBjb21lZGlfcnRfdGFza19jb250ZXh0X3QJaW50CisjZWxzZQorI2RlZmluZSBjb21lZGlfcnRfdGFza19jb250ZXh0X3QJbG9uZworI2VuZGlmCisKKyNlbmRpZgorCisvKiBUaGlzIGRlZmluZXMgdGhlIGZhc3Rlc3Qgc3BlZWQgd2Ugd2lsbCBlbXVsYXRlLiAgTm90ZSB0aGF0CisgKiB3aXRob3V0IGEgd2F0Y2hkb2cgKGxpa2UgaW4gUlRBSSksIHdlIGNvdWxkIGVhc2lseSBvdmVycnVuIG91cgorICogdGFzayBwZXJpb2QgYmVjYXVzZSBhbmFsb2cgaW5wdXQgdGVuZHMgdG8gYmUgc2xvdy4gKi8KKyNkZWZpbmUgU1BFRURfTElNSVQgMTAwMDAwCS8qIGluIG5hbm9zZWNvbmRzICovCisKK3N0YXRpYyBpbnQgdGltZXJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgdGltZXJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgdGltZXJfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnX251bSk7CitzdGF0aWMgaW50IHRpbWVyX3N0YXJ0X2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl90aW1lciA9IHsKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGRyaXZlcl9uYW1lOiJjb21lZGlfcnRfdGltZXIiLAorICAgICAgYXR0YWNoOnRpbWVyX2F0dGFjaCwKKyAgICAgIGRldGFjaDp0aW1lcl9kZXRhY2gsCisvLyAgICAgIG9wZW46ICAgICAgICAgICB0aW1lcl9vcGVuLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl90aW1lcik7CisKK3N0cnVjdCB0aW1lcl9wcml2YXRlIHsKKwljb21lZGlfdCAqZGV2aWNlOwkvLyBkZXZpY2Ugd2UgYXJlIGVtdWxhdGluZyBjb21tYW5kcyBmb3IKKwlpbnQgc3ViZDsJCS8vIHN1YmRldmljZSB3ZSBhcmUgZW11bGF0aW5nIGNvbW1hbmRzIGZvcgorCVJUX1RBU0sgKnJ0X3Rhc2s7CS8vIHJ0IHRhc2sgdGhhdCBzdGFydHMgc2NhbnMKKwlSVF9UQVNLICpzY2FuX3Rhc2s7CS8vIHJ0IHRhc2sgdGhhdCBjb250cm9scyBjb252ZXJzaW9uIHRpbWluZyBpbiBhIHNjYW4KKwkvKiBpb19mdW5jdGlvbiBjYW4gcG9pbnQgdG8gZWl0aGVyIGFuIGlucHV0IG9yIG91dHB1dCBmdW5jdGlvbgorCSAqIGRlcGVuZGluZyBvbiB3aGF0IGtpbmQgb2Ygc3ViZGV2aWNlIHdlIGFyZSBlbXVsYXRpbmcgZm9yICovCisJaW50ICgqaW9fZnVuY3Rpb24pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQsCisJCXVuc2lnbmVkIGludCBpbmRleCk7CisJLy8gUlRJTUUgaGFzIHVuaXRzIG9mIDEgPSA4MzggbmFub3NlY29uZHMKKwkvLyB0aW1lIGF0IHdoaWNoIGZpcnN0IHNjYW4gc3RhcnRlZCwgdXNlZCB0byBjaGVjayBzY2FuIHRpbWluZworCVJUSU1FIHN0YXJ0OworCS8vIHRpbWUgYmV0d2VlbiBzY2FucworCVJUSU1FIHNjYW5fcGVyaW9kOworCS8vIHRpbWUgYmV0d2VlbiBjb252ZXJzaW9ucyBpbiBhIHNjYW4KKwlSVElNRSBjb252ZXJ0X3BlcmlvZDsKKwkvLyBmbGFncworCXZvbGF0aWxlIGludCBzdG9wOwkvLyBpbmRpY2F0ZXMgd2Ugc2hvdWxkIHN0b3AKKwl2b2xhdGlsZSBpbnQgcnRfdGFza19hY3RpdmU7CS8vIGluZGljYXRlcyBydF90YXNrIGlzIHNlcnZpY2luZyBhIHN0cnVjdCBjb21lZGlfY21kCisJdm9sYXRpbGUgaW50IHNjYW5fdGFza19hY3RpdmU7CS8vIGluZGljYXRlcyBzY2FuX3Rhc2sgaXMgc2VydmljaW5nIGEgc3RydWN0IGNvbWVkaV9jbWQKKwl1bnNpZ25lZCB0aW1lcl9ydW5uaW5nOjE7Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHRpbWVyX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgdGltZXJfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJZGV2cHJpdi0+c3RvcCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLy8gY2hlY2tzIGZvciBzY2FuIHRpbWluZyBlcnJvcgoraW5saW5lIHN0YXRpYyBpbnQgY2hlY2tfc2Nhbl90aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgbG9uZyBsb25nIHNjYW4pCit7CisJUlRJTUUgbm93LCB0aW1pbmdfZXJyb3I7CisKKwlub3cgPSBydF9nZXRfdGltZSgpOworCXRpbWluZ19lcnJvciA9IG5vdyAtIChkZXZwcml2LT5zdGFydCArIHNjYW4gKiBkZXZwcml2LT5zY2FuX3BlcmlvZCk7CisJaWYgKHRpbWluZ19lcnJvciA+IGRldnByaXYtPnNjYW5fcGVyaW9kKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1pbmcgZXJyb3IiKTsKKwkJcnRfcHJpbnRrKCJzY2FuIHN0YXJ0ZWQgJWkgbnMgbGF0ZVxuIiwgdGltaW5nX2Vycm9yICogODM4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvLyBjaGVja3MgZm9yIGNvbnZlcnNpb24gdGltaW5nIGVycm9yCitpbmxpbmUgc3RhdGljIGludCBjaGVja19jb252ZXJzaW9uX3RpbWluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlSVElNRSBzY2FuX3N0YXJ0LCB1bnNpZ25lZCBpbnQgY29udmVyc2lvbikKK3sKKwlSVElNRSBub3csIHRpbWluZ19lcnJvcjsKKworCW5vdyA9IHJ0X2dldF90aW1lKCk7CisJdGltaW5nX2Vycm9yID0KKwkJbm93IC0gKHNjYW5fc3RhcnQgKyBjb252ZXJzaW9uICogZGV2cHJpdi0+Y29udmVydF9wZXJpb2QpOworCWlmICh0aW1pbmdfZXJyb3IgPiBkZXZwcml2LT5jb252ZXJ0X3BlcmlvZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAidGltaW5nIGVycm9yIik7CisJCXJ0X3ByaW50aygiY29udmVyc2lvbiBzdGFydGVkICVpIG5zIGxhdGVcbiIsCisJCQl0aW1pbmdfZXJyb3IgKiA4MzgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGRldnByaXYtPmlvX2Z1bmN0aW9uIGZvciBhbiBpbnB1dCBzdWJkZXZpY2UKK3N0YXRpYyBpbnQgdGltZXJfZGF0YV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwKKwl1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGRhdGE7CisKKwlyZXQgPSBjb21lZGlfZGF0YV9yZWFkKGRldnByaXYtPmRldmljZSwgZGV2cHJpdi0+c3ViZCwKKwkJQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2luZGV4XSksCisJCUNSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaW5kZXhdKSwKKwkJQ1JfQVJFRihjbWQtPmNoYW5saXN0W2luZGV4XSksICZkYXRhKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicmVhZCBlcnJvciIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHMtPmZsYWdzICYgU0RGX0xTQU1QTCkgeworCQljZmNfd3JpdGVfbG9uZ190b19idWZmZXIocywgZGF0YSk7CisJfSBlbHNlIHsKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGRhdGEpOworCX0KKworCXJldHVybiAwOworfQorCisvLyBkZXZwcml2LT5pb19mdW5jdGlvbiBmb3IgYW4gb3V0cHV0IHN1YmRldmljZQorc3RhdGljIGludCB0aW1lcl9kYXRhX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwKKwl1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPndyaXRlX3N1YmRldjsKKwl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzOworCXNob3J0IGRhdGE7CisJdW5zaWduZWQgaW50IGxvbmdfZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKHMtPmZsYWdzICYgU0RGX0xTQU1QTCkgeworCQludW1fYnl0ZXMgPQorCQkJY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIocywgJmxvbmdfZGF0YSwKKwkJCXNpemVvZihsb25nX2RhdGEpKTsKKwl9IGVsc2UgeworCQludW1fYnl0ZXMgPSBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwkJbG9uZ19kYXRhID0gZGF0YTsKKwl9CisKKwlpZiAobnVtX2J5dGVzID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZmZlciB1bmRlcnJ1biIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJcmV0ID0gY29tZWRpX2RhdGFfd3JpdGUoZGV2cHJpdi0+ZGV2aWNlLCBkZXZwcml2LT5zdWJkLAorCQlDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaW5kZXhdKSwKKwkJQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpbmRleF0pLAorCQlDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaW5kZXhdKSwgbG9uZ19kYXRhKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAid3JpdGUgZXJyb3IiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGRldnByaXYtPmlvX2Z1bmN0aW9uIGZvciBESU8gc3ViZGV2aWNlcworc3RhdGljIGludCB0aW1lcl9kaW9fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQsCisJdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBkYXRhOworCisJcmV0ID0gY29tZWRpX2Rpb19iaXRmaWVsZChkZXZwcml2LT5kZXZpY2UsIGRldnByaXYtPnN1YmQsIDAsICZkYXRhKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicmVhZCBlcnJvciIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAocy0+ZmxhZ3MgJiBTREZfTFNBTVBMKQorCQljZmNfd3JpdGVfbG9uZ190b19idWZmZXIocywgZGF0YSk7CisJZWxzZQorCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKy8vIHBlcmZvcm1zIHNjYW5zCitzdGF0aWMgdm9pZCBzY2FuX3Rhc2tfZnVuYyhjb21lZGlfcnRfdGFza19jb250ZXh0X3QgZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCWludCBpLCByZXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIG47CisJUlRJTUUgc2Nhbl9zdGFydDsKKworCS8vIGV2ZXJ5IHN0cnVjdCBjb21lZGlfY21kIGNhdXNlcyBvbmUgZXhlY3V0aW9uIG9mIHdoaWxlIGxvb3AKKwl3aGlsZSAoMSkgeworCQlkZXZwcml2LT5zY2FuX3Rhc2tfYWN0aXZlID0gMTsKKwkJLy8gZWFjaCBmb3IgbG9vcCBjb21wbGV0ZXMgb25lIHNjYW4KKwkJZm9yIChuID0gMDsgbiA8IGNtZC0+c3RvcF9hcmcgfHwgY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkU7CisJCQluKyspIHsKKwkJCWlmIChuKSB7CisJCQkJLy8gc3VzcGVuZCB0YXNrIHVudGlsIG5leHQgc2NhbgorCQkJCXJldCA9IHJ0X3Rhc2tfc3VzcGVuZChkZXZwcml2LT5zY2FuX3Rhc2spOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkiZXJyb3Igc3VzcGVuZGluZyBzY2FuIHRhc2siKTsKKwkJCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQl9CisJCQkvLyBjaGVjayBpZiBzdG9wIGZsYWcgd2FzIHNldCAoYnkgdGltZXJfY2FuY2VsKCkpCisJCQlpZiAoZGV2cHJpdi0+c3RvcCkKKwkJCQlnb3RvIGNsZWFudXA7CisJCQlyZXQgPSBjaGVja19zY2FuX3RpbWluZyhkZXYsIG4pOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCQlzY2FuX3N0YXJ0ID0gcnRfZ2V0X3RpbWUoKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjbWQtPnNjYW5fZW5kX2FyZzsgaSsrKSB7CisJCQkJLy8gY29udmVyc2lvbiB0aW1pbmcKKwkJCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSICYmIGkpIHsKKwkJCQkJcnRfdGFza193YWl0X3BlcmlvZCgpOworCQkJCQlyZXQgPSBjaGVja19jb252ZXJzaW9uX3RpbWluZyhkZXYsCisJCQkJCQlzY2FuX3N0YXJ0LCBpKTsKKwkJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJCWFzeW5jLT5ldmVudHMgfD0KKwkJCQkJCQlDT01FRElfQ0JfRVJST1I7CisJCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJCX0KKwkJCQl9CisJCQkJcmV0ID0gZGV2cHJpdi0+aW9fZnVuY3Rpb24oZGV2LCBjbWQsIGkpOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJfQorCQkJfQorCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCQl9CisKKwkgICAgICBjbGVhbnVwOgorCisJCWNvbWVkaV91bmxvY2soZGV2cHJpdi0+ZGV2aWNlLCBkZXZwcml2LT5zdWJkKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJYXN5bmMtPmV2ZW50cyA9IDA7CisJCWRldnByaXYtPnNjYW5fdGFza19hY3RpdmUgPSAwOworCQkvLyBzdXNwZW5kIHRhc2sgdW50aWwgbmV4dCBzdHJ1Y3QgY29tZWRpX2NtZAorCQlydF90YXNrX3N1c3BlbmQoZGV2cHJpdi0+c2Nhbl90YXNrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVyX3Rhc2tfZnVuYyhjb21lZGlfcnRfdGFza19jb250ZXh0X3QgZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBuOworCisJLy8gZXZlcnkgc3RydWN0IGNvbWVkaV9jbWQgY2F1c2VzIG9uZSBleGVjdXRpb24gb2Ygd2hpbGUgbG9vcAorCXdoaWxlICgxKSB7CisJCWRldnByaXYtPnJ0X3Rhc2tfYWN0aXZlID0gMTsKKwkJZGV2cHJpdi0+c2Nhbl90YXNrX2FjdGl2ZSA9IDE7CisJCWRldnByaXYtPnN0YXJ0ID0gcnRfZ2V0X3RpbWUoKTsKKworCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5zdG9wX2FyZyB8fCBjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORTsKKwkJCW4rKykgeworCQkJLy8gc2NhbiB0aW1pbmcKKwkJCWlmIChuKQorCQkJCXJ0X3Rhc2tfd2FpdF9wZXJpb2QoKTsKKwkJCWlmIChkZXZwcml2LT5zY2FuX3Rhc2tfYWN0aXZlID09IDApIHsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCQlyZXQgPSBydF90YXNrX21ha2VfcGVyaW9kaWMoZGV2cHJpdi0+c2Nhbl90YXNrLAorCQkJCWRldnByaXYtPnN0YXJ0ICsgZGV2cHJpdi0+c2Nhbl9wZXJpb2QgKiBuLAorCQkJCWRldnByaXYtPmNvbnZlcnRfcGVyaW9kKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEiKTsKKwkJCX0KKwkJfQorCisJICAgICAgY2xlYW51cDoKKworCQlkZXZwcml2LT5ydF90YXNrX2FjdGl2ZSA9IDA7CisJCS8vIHN1c3BlbmQgdW50aWwgbmV4dCBzdHJ1Y3QgY29tZWRpX2NtZAorCQlydF90YXNrX3N1c3BlbmQoZGV2cHJpdi0+cnRfdGFzayk7CisJfQorfQorCitzdGF0aWMgaW50IHRpbWVyX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBjb21lZGlfaW5zbiB4aW5zbiA9ICppbnNuOworCisJeGluc24uZGF0YSA9IGRhdGE7CisJeGluc24uc3ViZGV2ID0gZGV2cHJpdi0+c3ViZDsKKworCXJldHVybiBjb21lZGlfZG9faW5zbihkZXZwcml2LT5kZXZpY2UsICZ4aW5zbik7Cit9CisKK3N0YXRpYyBpbnQgY21kdGVzdF9oZWxwZXIoc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQsCisJdW5zaWduZWQgaW50IHN0YXJ0X3NyYywKKwl1bnNpZ25lZCBpbnQgc2Nhbl9iZWdpbl9zcmMsCisJdW5zaWduZWQgaW50IGNvbnZlcnRfc3JjLAorCXVuc2lnbmVkIGludCBzY2FuX2VuZF9zcmMsIHVuc2lnbmVkIGludCBzdG9wX3NyYykKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gc3RhcnRfc3JjOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBzY2FuX2JlZ2luX3NyYzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IGNvbnZlcnRfc3JjOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBzY2FuX2VuZF9zcmM7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IHN0b3Bfc3JjOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRpbWVyX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhcnRfc3JjID0gMDsKKworCWlmIChzLT50eXBlID09IENPTUVESV9TVUJEX0FPKQorCQlzdGFydF9zcmMgPSBUUklHX0lOVDsKKwllbHNlCisJCXN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCisJZXJyID0gY21kdGVzdF9oZWxwZXIoY21kLCBzdGFydF9zcmMsCS8qIHN0YXJ0X3NyYyAqLworCQlUUklHX1RJTUVSIHwgVFJJR19GT0xMT1csCS8qIHNjYW5fYmVnaW5fc3JjICovCisJCVRSSUdfTk9XIHwgVFJJR19USU1FUiwJLyogY29udmVydF9zcmMgKi8KKwkJVFJJR19DT1VOVCwJLyogc2Nhbl9lbmRfc3JjICovCisJCVRSSUdfQ09VTlQgfCBUUklHX05PTkUpOwkvKiBzdG9wX3NyYyAqLworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5CisJICogY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfSU5UKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cKKwkJJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVyAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJLy8gbGltaXQgZnJlcXVlbmN5LCB0aGlzIGlzIGZhaXJseSBhcmJpdHJhcnkKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgU1BFRURfTElNSVQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBTUEVFRF9MSU1JVDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCBTUEVFRF9MSU1JVCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IFNQRUVEX0xJTUlUOworCQkJZXJyKys7CisJCX0KKwl9CisJLy8gbWFrZSBzdXJlIGNvbnZlcnNpb24gYW5kIHNjYW4gZnJlcXVlbmNpZXMgYXJlIGNvbXBhdGlibGUKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSICYmIGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnID4gY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbmQgYXJndW1lbnRzICovCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1lcl9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCS8qIGhhY2sgYXR0YWNrOiBkcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gZG8gdGhpczogKi8KKwlkZXYtPnJ0ID0gMTsKKworCS8vIG1ha2Ugc3VyZSB0YXNrcyBoYXZlIGZpbmlzaGVkIGNsZWFudXAgb2YgbGFzdCBzdHJ1Y3QgY29tZWRpX2NtZAorCWlmIChkZXZwcml2LT5ydF90YXNrX2FjdGl2ZSB8fCBkZXZwcml2LT5zY2FuX3Rhc2tfYWN0aXZlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0ID0gY29tZWRpX2xvY2soZGV2cHJpdi0+ZGV2aWNlLCBkZXZwcml2LT5zdWJkKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZmFpbGVkIHRvIG9idGFpbiBsb2NrIik7CisJCXJldHVybiByZXQ7CisJfQorCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJZGV2cHJpdi0+c2Nhbl9wZXJpb2QgPSBuYW5vMmNvdW50KGNtZC0+c2Nhbl9iZWdpbl9hcmcpOworCQlicmVhazsKKwljYXNlIFRSSUdfRk9MTE9XOgorCQlkZXZwcml2LT5zY2FuX3BlcmlvZCA9CisJCQluYW5vMmNvdW50KGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJidWcgc2V0dGluZyBzY2FuIHBlcmlvZCEiKTsKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisJc3dpdGNoIChjbWQtPmNvbnZlcnRfc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5jb252ZXJ0X3BlcmlvZCA9IG5hbm8yY291bnQoY21kLT5jb252ZXJ0X2FyZyk7CisJCWJyZWFrOworCWNhc2UgVFJJR19OT1c6CisJCWRldnByaXYtPmNvbnZlcnRfcGVyaW9kID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyBzZXR0aW5nIGNvbnZlcnNpb24gcGVyaW9kISIpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykKKwkJcmV0dXJuIHRpbWVyX3N0YXJ0X2NtZChkZXYsIHMpOworCisJcy0+YXN5bmMtPmludHRyaWcgPSB0aW1lcl9pbnR0cmlnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnX251bSkKK3sKKwlpZiAodHJpZ19udW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gdGltZXJfc3RhcnRfY21kKGRldiwgcyk7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfc3RhcnRfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJUlRJTUUgbm93LCBkZWxheSwgcGVyaW9kOworCWludCByZXQ7CisKKwlkZXZwcml2LT5zdG9wID0gMDsKKwlzLT5hc3luYy0+ZXZlbnRzID0gMDsKKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykKKwkJZGVsYXkgPSBuYW5vMmNvdW50KGNtZC0+c3RhcnRfYXJnKTsKKwllbHNlCisJCWRlbGF5ID0gMDsKKworCW5vdyA9IHJ0X2dldF90aW1lKCk7CisJLyogVXNpbmcgJ3BlcmlvZCcgdGhpcyB3YXkgZ2V0cyBhcm91bmQgc29tZSB3ZWlyZCBidWcgaW4gZ2NjLTIuOTUuMgorCSAqIHRoYXQgZ2VuZXJhdGVzIHRoZSBjb21waWxlIGVycm9yICdpbnRlcm5hbCBlcnJvci0tdW5yZWNvZ25pemFibGUgaW5zbicKKwkgKiB3aGVuIHJ0X3Rhc2tfbWFrZV9wZXJpb2QoKSBpcyBjYWxsZWQgKG9ic2VydmVkIHdpdGggcnRsaW51eC0zLjEsIGxpbnV4LTIuMi4xOSkuCisJICogIC0gZm1oZXNzICovCisJcGVyaW9kID0gZGV2cHJpdi0+c2Nhbl9wZXJpb2Q7CisJcmV0ID0gcnRfdGFza19tYWtlX3BlcmlvZGljKGRldnByaXYtPnJ0X3Rhc2ssIG5vdyArIGRlbGF5LCBwZXJpb2QpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJlcnJvciBzdGFydGluZyBydF90YXNrIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWVyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAqZW11bF9zOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICplbXVsX2RldjsKKwkvKiBUaGVzZSBzaG91bGQgcHJvYmFibHkgYmUgZGV2Y29uZmlnIG9wdGlvbnNbXSAqLworCWNvbnN0IGludCB0aW1lcl9wcmlvcml0eSA9IDQ7CisJY29uc3QgaW50IHNjYW5fcHJpb3JpdHkgPSB0aW1lcl9wcmlvcml0eSArIDE7CisJY2hhciBwYXRoWzIwXTsKKworCXByaW50aygiY29tZWRpJWQ6IHRpbWVyOiAiLCBkZXYtPm1pbm9yKTsKKworCWRldi0+Ym9hcmRfbmFtZSA9ICJ0aW1lciI7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgdGltZXJfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzcHJpbnRmKHBhdGgsICIvZGV2L2NvbWVkaSVkIiwgaXQtPm9wdGlvbnNbMF0pOworCWRldnByaXYtPmRldmljZSA9IGNvbWVkaV9vcGVuKHBhdGgpOworCWRldnByaXYtPnN1YmQgPSBpdC0+b3B0aW9uc1sxXTsKKworCXByaW50aygiZW11bGF0aW5nIGNvbW1hbmRzIGZvciBtaW5vciAlaSwgc3ViZGV2aWNlICVkXG4iLAorCQlpdC0+b3B0aW9uc1swXSwgZGV2cHJpdi0+c3ViZCk7CisKKwllbXVsX2RldiA9IGRldnByaXYtPmRldmljZTsKKwllbXVsX3MgPSBlbXVsX2Rldi0+c3ViZGV2aWNlcyArIGRldnByaXYtPnN1YmQ7CisKKwkvLyBpbnB1dCBvciBvdXRwdXQgc3ViZGV2aWNlCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IGVtdWxfcy0+dHlwZTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBlbXVsX3MtPnN1YmRldl9mbGFnczsJLyogU0RGX0dST1VORCAodG8gZm9vbCBjaGVja19kcml2ZXIpICovCisJcy0+bl9jaGFuID0gZW11bF9zLT5uX2NoYW47CisJcy0+bGVuX2NoYW5saXN0ID0gMTAyNDsKKwlzLT5kb19jbWQgPSB0aW1lcl9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IHRpbWVyX2NtZHRlc3Q7CisJcy0+Y2FuY2VsID0gdGltZXJfY2FuY2VsOworCXMtPm1heGRhdGEgPSBlbXVsX3MtPm1heGRhdGE7CisJcy0+cmFuZ2VfdGFibGUgPSBlbXVsX3MtPnJhbmdlX3RhYmxlOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBlbXVsX3MtPnJhbmdlX3RhYmxlX2xpc3Q7CisJc3dpdGNoIChlbXVsX3MtPnR5cGUpIHsKKwljYXNlIENPTUVESV9TVUJEX0FJOgorCQlzLT5pbnNuX3JlYWQgPSB0aW1lcl9pbnNuOworCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJZGV2cHJpdi0+aW9fZnVuY3Rpb24gPSB0aW1lcl9kYXRhX3JlYWQ7CisJCWJyZWFrOworCWNhc2UgQ09NRURJX1NVQkRfQU86CisJCXMtPmluc25fd3JpdGUgPSB0aW1lcl9pbnNuOworCQlzLT5pbnNuX3JlYWQgPSB0aW1lcl9pbnNuOworCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1dSSVRFOworCQlkZXZwcml2LT5pb19mdW5jdGlvbiA9IHRpbWVyX2RhdGFfd3JpdGU7CisJCWJyZWFrOworCWNhc2UgQ09NRURJX1NVQkRfRElPOgorCQlzLT5pbnNuX3dyaXRlID0gdGltZXJfaW5zbjsKKwkJcy0+aW5zbl9yZWFkID0gdGltZXJfaW5zbjsKKwkJcy0+aW5zbl9iaXRzID0gdGltZXJfaW5zbjsKKwkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCWRldnByaXYtPmlvX2Z1bmN0aW9uID0gdGltZXJfZGlvX3JlYWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJmYWlsZWQgdG8gZGV0ZXJtaW5lIHN1YmRldmljZSB0eXBlISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlydF9zZXRfb25lc2hvdF9tb2RlKCk7CisJc3RhcnRfcnRfdGltZXIoMSk7CisJZGV2cHJpdi0+dGltZXJfcnVubmluZyA9IDE7CisKKwlkZXZwcml2LT5ydF90YXNrID0ga3phbGxvYyhzaXplb2YoUlRfVEFTSyksIEdGUF9LRVJORUwpOworCisJLy8gaW5pdGlhbGl6ZSByZWFsLXRpbWUgdGFza3MKKwlyZXQgPSBydF90YXNrX2luaXQoZGV2cHJpdi0+cnRfdGFzaywgdGltZXJfdGFza19mdW5jLAorCQkoY29tZWRpX3J0X3Rhc2tfY29udGV4dF90KSBkZXYsIDMwMDAsIHRpbWVyX3ByaW9yaXR5LCAwLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgaW5pdGFsaXppbmcgcnRfdGFzayIpOworCQlrZnJlZShkZXZwcml2LT5ydF90YXNrKTsKKwkJZGV2cHJpdi0+cnRfdGFzayA9IDA7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2cHJpdi0+c2Nhbl90YXNrID0ga3phbGxvYyhzaXplb2YoUlRfVEFTSyksIEdGUF9LRVJORUwpOworCisJcmV0ID0gcnRfdGFza19pbml0KGRldnByaXYtPnNjYW5fdGFzaywgc2Nhbl90YXNrX2Z1bmMsCisJCShjb21lZGlfcnRfdGFza19jb250ZXh0X3QpIGRldiwgMzAwMCwgc2Nhbl9wcmlvcml0eSwgMCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImVycm9yIGluaXRhbGl6aW5nIHNjYW5fdGFzayIpOworCQlrZnJlZShkZXZwcml2LT5zY2FuX3Rhc2spOworCQlkZXZwcml2LT5zY2FuX3Rhc2sgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAxOworfQorCisvLyBmcmVlIGFsbG9jYXRlZCByZXNvdXJjZXMKK3N0YXRpYyBpbnQgdGltZXJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHRpbWVyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPnJ0X3Rhc2spIHsKKwkJCXJ0X3Rhc2tfZGVsZXRlKGRldnByaXYtPnJ0X3Rhc2spOworCQkJa2ZyZWUoZGV2cHJpdi0+cnRfdGFzayk7CisJCX0KKwkJaWYgKGRldnByaXYtPnNjYW5fdGFzaykgeworCQkJcnRfdGFza19kZWxldGUoZGV2cHJpdi0+c2Nhbl90YXNrKTsKKwkJCWtmcmVlKGRldnByaXYtPnNjYW5fdGFzayk7CisJCX0KKwkJaWYgKGRldnByaXYtPnRpbWVyX3J1bm5pbmcpCisJCQlzdG9wX3J0X3RpbWVyKCk7CisJCWlmIChkZXZwcml2LT5kZXZpY2UpCisJCQljb21lZGlfY2xvc2UoZGV2cHJpdi0+ZGV2aWNlKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3Rlc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCmluZGV4IDRiNGMzN2QuLmU2NzkzMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCkBAIC04OSwxMyArODksMTMgQEAKIAl1bnNpZ25lZCBpbnQgc2Nhbl9wZXJpb2Q7CS8qIHNjYW4gcGVyaW9kIGluIHVzZWMgKi8KIAl1bnNpZ25lZCBpbnQgY29udmVydF9wZXJpb2Q7CS8qIGNvbnZlcnNpb24gcGVyaW9kIGluIHVzZWMgKi8KIAl1bnNpZ25lZCB0aW1lcl9ydW5uaW5nOjE7Ci0JbHNhbXBsX3QgYW9fbG9vcGJhY2tzW05fQ0hBTlNdOworCXVuc2lnbmVkIGludCBhb19sb29wYmFja3NbTl9DSEFOU107CiB9OwogI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHdhdmVmb3JtX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpOwotc3RhdGljIGludCB3YXZlZm9ybV9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KTsKLXN0YXRpYyBjb21lZGlfZHJpdmVyIGRyaXZlcl93YXZlZm9ybSA9IHsKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IHdhdmVmb3JtX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfd2F2ZWZvcm0gPSB7CiAgICAgICAuZHJpdmVyX25hbWUgPQkiY29tZWRpX3Rlc3QiLAogICAgICAgLm1vZHVsZSA9CQlUSElTX01PRFVMRSwKICAgICAgIC5hdHRhY2ggPQkJd2F2ZWZvcm1fYXR0YWNoLApAQCAtMTA3LDI4ICsxMDcsMjggQEAKIAogQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl93YXZlZm9ybSk7CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgICAgY29tZWRpX2NtZCAqY21kKTsKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY21kKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcyk7Ci1zdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpOwotc3RhdGljIGludCB3YXZlZm9ybV9haV9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpOwotc3RhdGljIGludCB3YXZlZm9ybV9hb19pbnNuX3dyaXRlKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSk7Ci1zdGF0aWMgc2FtcGxfdCBmYWtlX3Nhd3Rvb3RoKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlLAorc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworc3RhdGljIGludCB3YXZlZm9ybV9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworc3RhdGljIGludCB3YXZlZm9ybV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBzaG9ydCBmYWtlX3Nhd3Rvb3RoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpOwotc3RhdGljIHNhbXBsX3QgZmFrZV9zcXVhcmV3YXZlKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlLAorc3RhdGljIHNob3J0IGZha2Vfc3F1YXJld2F2ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2UsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpOwotc3RhdGljIHNhbXBsX3QgZmFrZV9mbGF0bGluZShjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZSwKK3N0YXRpYyBzaG9ydCBmYWtlX2ZsYXRsaW5lKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpOwotc3RhdGljIHNhbXBsX3QgZmFrZV93YXZlZm9ybShjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAorc3RhdGljIHNob3J0IGZha2Vfd2F2ZWZvcm0oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCiAJCQkgICAgIHVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpOwogCiAvKiAxMDAwIG5hbm9zZWMgaW4gYSBtaWNyb3NlYyAqLwogc3RhdGljIGNvbnN0IGludCBuYW5vX3Blcl9taWNybyA9IDEwMDA7CiAKIC8qIGZha2UgYW5hbG9nIGlucHV0IHJhbmdlcyAqLwotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2Ugd2F2ZWZvcm1fYWlfcmFuZ2VzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHdhdmVmb3JtX2FpX3JhbmdlcyA9IHsKIAkyLAogCXsKIAkJCUJJUF9SQU5HRSgxMCksCkBAIC0xNDMsOSArMTQzLDkgQEAKICovCiBzdGF0aWMgdm9pZCB3YXZlZm9ybV9haV9pbnRlcnJ1cHQodW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgYXJnOwotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBkZXYtPnJlYWRfc3ViZGV2LT5hc3luYzsKLQljb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGFyZzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IGRldi0+cmVhZF9zdWJkZXYtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAkvKiBhbGwgdGltZXMgaW4gbWljcm9zZWMgKi8KIAl1bnNpZ25lZCBsb25nIGVsYXBzZWRfdGltZTsKQEAgLTE5Miw5ICsxOTIsOSBAQAogCWNvbWVkaV9ldmVudChkZXYsIGRldi0+cmVhZF9zdWJkZXYpOwogfQogCi1zdGF0aWMgaW50IHdhdmVmb3JtX2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCB3YXZlZm9ybV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IGFtcGxpdHVkZSA9IGl0LT5vcHRpb25zWzBdOwogCWludCBwZXJpb2QgPSBpdC0+b3B0aW9uc1sxXTsKIAlpbnQgaTsKQEAgLTI1OSw3ICsyNTksNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHdhdmVmb3JtX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHdhdmVmb3JtX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXByaW50aygiY29tZWRpJWQ6IGNvbWVkaV90ZXN0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCkBAIC0yNjksOCArMjY5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgICBjb21lZGlfY21kICpjbWQpCitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMDsKIAlpbnQgdG1wOwpAQCAtMzk3LDkgKzM5Nyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY21kKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCWNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAogCWlmIChjbWQtPmZsYWdzICYgVFJJR19SVCkgewogCQljb21lZGlfZXJyb3IoZGV2LApAQCAtNDI5LDIwICs0MjksMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3YXZlZm9ybV9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCB3YXZlZm9ybV9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJZGV2cHJpdi0+dGltZXJfcnVubmluZyA9IDA7CiAJZGVsX3RpbWVyKCZkZXZwcml2LT50aW1lcik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzYW1wbF90IGZha2Vfc2F3dG9vdGgoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2VfaW5kZXgsCitzdGF0aWMgc2hvcnQgZmFrZV9zYXd0b290aChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2VfaW5kZXgsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgY3VycmVudF90aW1lKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcy0+bWF4ZGF0YSAvIDI7CiAJdTY0IHZhbHVlOwotCWNvbnN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSA9ICZzLT5yYW5nZV90YWJsZS0+cmFuZ2VbcmFuZ2VfaW5kZXhdOworCWNvbnN0IHN0cnVjdCBjb21lZGlfa3JhbmdlICprcmFuZ2UgPSAmcy0+cmFuZ2VfdGFibGUtPnJhbmdlW3JhbmdlX2luZGV4XTsKIAl1NjQgYmluYXJ5X2FtcGxpdHVkZTsKIAogCWJpbmFyeV9hbXBsaXR1ZGUgPSBzLT5tYXhkYXRhOwpAQCAtNDU3LDEzICs0NTcsMTMgQEAKIAogCXJldHVybiBvZmZzZXQgKyB2YWx1ZTsKIH0KLXN0YXRpYyBzYW1wbF90IGZha2Vfc3F1YXJld2F2ZShjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZV9pbmRleCwKK3N0YXRpYyBzaG9ydCBmYWtlX3NxdWFyZXdhdmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlX2luZGV4LAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY3VycmVudF90aW1lKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcy0+bWF4ZGF0YSAvIDI7CiAJdTY0IHZhbHVlOwotCWNvbnN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSA9ICZzLT5yYW5nZV90YWJsZS0+cmFuZ2VbcmFuZ2VfaW5kZXhdOworCWNvbnN0IHN0cnVjdCBjb21lZGlfa3JhbmdlICprcmFuZ2UgPSAmcy0+cmFuZ2VfdGFibGUtPnJhbmdlW3JhbmdlX2luZGV4XTsKIAljdXJyZW50X3RpbWUgJT0gZGV2cHJpdi0+dXNlY19wZXJpb2Q7CiAKIAl2YWx1ZSA9IHMtPm1heGRhdGE7CkBAIC00NzYsMTQgKzQ3NiwxNCBAQAogCXJldHVybiBvZmZzZXQgKyB2YWx1ZTsKIH0KIAotc3RhdGljIHNhbXBsX3QgZmFrZV9mbGF0bGluZShjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZV9pbmRleCwKK3N0YXRpYyBzaG9ydCBmYWtlX2ZsYXRsaW5lKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZV9pbmRleCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpCiB7CiAJcmV0dXJuIGRldi0+cmVhZF9zdWJkZXYtPm1heGRhdGEgLyAyOwogfQogCiAvKiBnZW5lcmF0ZXMgYSBkaWZmZXJlbnQgd2F2ZWZvcm0gZGVwZW5kaW5nIG9uIHdoYXQgY2hhbm5lbCBpcyByZWFkICovCi1zdGF0aWMgc2FtcGxfdCBmYWtlX3dhdmVmb3JtKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCitzdGF0aWMgc2hvcnQgZmFrZV93YXZlZm9ybShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKIAkJCSAgICAgdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSkKIHsKIAllbnVtIHsKQEAgLTUwNCw4ICs1MDQsOCBAQAogCXJldHVybiBmYWtlX2ZsYXRsaW5lKGRldiwgcmFuZ2UsIGN1cnJlbnRfdGltZSk7CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB3YXZlZm9ybV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBpLCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKQEAgLTUxNSw4ICs1MTUsOCBAQAogCXJldHVybiBpbnNuLT5uOwogfQogCi1zdGF0aWMgaW50IHdhdmVmb3JtX2FvX2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB3YXZlZm9ybV9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGksIGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbnRlY19wY2lfZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE5NGEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbnRlY19wY2lfZGlvLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogY29udGVjX3BjaV9kaW8KK0Rlc2NyaXB0aW9uOiBDb250ZWMgUElPMTYxNkwgZGlnaXRhbCBJL08gYm9hcmQKK0RldmljZXM6IFtDb250ZWNdIFBJTzE2MTZMIChjb250ZWNfcGNpX2RpbykKK0F1dGhvcjogU3RlZmFubyBSaXZvaXIgPHMucml2b2lyQGd0cy5pdD4KK1VwZGF0ZWQ6IFdlZCwgMjcgSnVuIDIwMDcgMTM6MDA6MDYgKzAxMDAKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKK2VudW0gY29udGVjX21vZGVsIHsKKwlQSU8xNjE2TCA9IDAsCit9OworCitzdHJ1Y3QgY29udGVjX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBtb2RlbDsKKwlpbnQgaW5fcG9ydHM7CisJaW50IG91dF9wb3J0czsKKwlpbnQgaW5fb2ZmczsKKwlpbnQgb3V0X29mZnM7CisJaW50IG91dF9ib2ZmczsKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRlY19ib2FyZCBjb250ZWNfYm9hcmRzW10gPSB7CisJeyJQSU8xNjE2TCIsIFBJTzE2MTZMLCAxNiwgMTYsIDAsIDIsIDEwfSwKK307CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QSU8xNjE2TCAweDgxNzIKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjb250ZWNfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DT05URUMsIFBDSV9ERVZJQ0VfSURfUElPMTYxNkwsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsIFBJTzE2MTZMfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjb250ZWNfcGNpX3RhYmxlKTsKKworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgY29udGVjX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBjb250ZWNfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGNvbnRlY19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGNvbnRlY19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBjb250ZWNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfY29udGVjID0geworICAgICAgZHJpdmVyX25hbWU6ImNvbnRlY19wY2lfZGlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpjb250ZWNfYXR0YWNoLAorICAgICAgZGV0YWNoOmNvbnRlY19kZXRhY2gsCit9OworCisvKiBDbGFzc2ljIGRpZ2l0YWwgSU8gKi8KK3N0YXRpYyBpbnQgY29udGVjX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjb250ZWNfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKyNpZiAwCitzdGF0aWMgaW50IGNvbnRlY19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworCitzdGF0aWMgaW50IGNvbnRlY19uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCBpbnQgcm91bmQpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgY29udGVjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJcHJpbnRrKCJjb21lZGklZDogY29udGVjOiAiLCBkZXYtPm1pbm9yKTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBjb250ZWNfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCisJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTlRFQyAmJgorCQkJcGNpZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QSU8xNjE2TCkgeworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJLyogQ2hlY2sgYnVzIGFuZCBzbG90LiAqLworCQkJCWlmIChpdC0+b3B0aW9uc1swXSAhPSBwY2lkZXYtPmJ1cy0+bnVtYmVyIHx8CisJCQkJCWl0LT5vcHRpb25zWzFdICE9CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CisJCQlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCAiY29udGVjX3BjaV9kaW8iKSkgeworCQkJCXByaW50aygiZXJyb3IgZW5hYmxpbmcgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zIVxuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlkZXYtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCQkJcHJpbnRrKCIgYmFzZSBhZGRyICVseCAiLCBkZXYtPmlvYmFzZSk7CisKKwkJCWRldi0+Ym9hcmRfcHRyID0gY29udGVjX2JvYXJkcyArIDA7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJCQlzLT5uX2NoYW4gPSAxNjsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJCXMtPmluc25fYml0cyA9IGNvbnRlY19kaV9pbnNuX2JpdHM7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCQkJcy0+bl9jaGFuID0gMTY7CisJCQlzLT5tYXhkYXRhID0gMTsKKwkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCQlzLT5pbnNuX2JpdHMgPSBjb250ZWNfZG9faW5zbl9iaXRzOworCisJCQlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGsoImNhcmQgbm90IHByZXNlbnQhXG4iKTsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGNvbnRlY19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogY29udGVjOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpX2RldikgeworCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmIDAKK3N0YXRpYyBpbnQgY29udGVjX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlwcmludGsoImNvbnRlY19jbWR0ZXN0IGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29udGVjX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwlyZXR1cm4gKm5zOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgY29udGVjX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlwcmludGsoImNvbnRlY19kb19pbnNuX2JpdHMgY2FsbGVkXG4iKTsKKwlwcmludGsoIiBkYXRhOiAlZCAlZFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJcnRfcHJpbnRrKCIgIG91dDogJWQgb24gJWx4XG4iLCBzLT5zdGF0ZSwKKwkJCWRldi0+aW9iYXNlICsgdGhpc2JvYXJkLT5vdXRfb2Zmcyk7CisJCW91dHcocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgdGhpc2JvYXJkLT5vdXRfb2Zmcyk7CisJfQorCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGNvbnRlY19kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJcnRfcHJpbnRrKCJjb250ZWNfZGlfaW5zbl9iaXRzIGNhbGxlZFxuIik7CisJcnRfcHJpbnRrKCIgZGF0YTogJWQgJWRcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgdGhpc2JvYXJkLT5pbl9vZmZzKTsKKworCXJldHVybiAyOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jb250ZWMsIGNvbnRlY19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhcWJvYXJkMjAwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhcWJvYXJkMjAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODQ0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFxYm9hcmQyMDAwLmMKQEAgLTAsMCArMSw4NzcgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9kYXFib2FyZDIwMDAuYworICAgaGFyZHdhcmUgZHJpdmVyIGZvciBJT3RlY2ggREFRYm9hcmQvMjAwMAorCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogZGFxYm9hcmQyMDAwCitEZXNjcmlwdGlvbjogSU9UZWNoIERBUUJvYXJkLzIwMDAKK0F1dGhvcjogQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiBNb24sIDE0IEFwciAyMDA4IDE1OjI4OjUyICswMTAwCitEZXZpY2VzOiBbSU9UZWNoXSBEQVFCb2FyZC8yMDAwIChkYXFib2FyZDIwMDApCisKK011Y2ggb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBkcml2ZXIgd2FzIGRldGVybWluZWQgZnJvbSByZWFkaW5nCit0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBXaW5kb3dzIGRyaXZlci4KKworVGhlIEZQR0Egb24gdGhlIGJvYXJkIHJlcXVpcmVzIGluaXRpYWxpemF0aW9uIGNvZGUsIHdoaWNoIGNhbgorYmUgbG9hZGVkIGJ5IGNvbWVkaV9jb25maWcgdXNpbmcgdGhlIC1pCitvcHRpb24uICBUaGUgaW5pdGlhbGl6YXRpb24gY29kZSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmNvbWVkaS5vcmcKK2luIHRoZSBjb21lZGlfbm9uZnJlZV9maXJtd2FyZSB0YXJiYWxsLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IHN1cHBvcnRlZAorICBQQ0kgZGV2aWNlIGZvdW5kIHdpbGwgYmUgdXNlZC4KKyovCisvKgorICAgVGhpcyBjYXJkIHdhcyBvYnZpb3VzbHkgbmV2ZXIgaW50ZW5kZWQgdG8gbGVhdmUgdGhlIFdpbmRvd3Mgd29ybGQsCisgICBzaW5jZSBpdCBsYWNrZWQgYWxsIGtpbmQgb2YgaGFyZHdhcmUgZG9jdW1lbnRhdGlvbiAoZXhjZXB0IGZvciBjYWJsZQorICAgcGlub3V0cywgcGx1ZyBhbmQgcHJheSBoYXMgc29tZXRoaW5nIHRvIGNhdGNoIHVwIHdpdGggeWV0KS4KKworICAgV2l0aCBzb21lIGhlbHAgZnJvbSBvdXIgc3dlZGlzaCBkaXN0cmlidXRvciwgd2UgZ290IHRoZSBXaW5kb3dzIHNvdXJjZWNvZGUKKyAgIGZvciB0aGUgY2FyZCwgYW5kIGhlcmUgYXJlIHRoZSBmaW5kaW5ncyBzbyBmYXIuCisKKyAgIDEuIEEgZ29vZCBkb2N1bWVudCB0aGF0IGRlc2NyaWJlcyB0aGUgUENJIGludGVyZmFjZSBjaGlwIGlzIGZvdW5kIGF0OgorICAgICAgaHR0cDovL3BseC5wbHh0ZWNoLmNvbS9kb3dubG9hZC85MDgwL2RhdGFib29rLzkwODBkYi0xMDYucGRmCisKKyAgIDIuIFRoZSBpbml0aWFsaXphdGlvbiBkb25lIHNvIGZhciBpczoKKyAgICAgICAgYS4gcHJvZ3JhbSB0aGUgRlBHQSAod2luZG93cyBjb2RlIHNhbnMgYSBsb3Qgb2YgZXJyb3IgbWVzc2FnZXMpCisJYi4KKworICAgMy4gQW5hbG9nIG91dCBzZWVtcyB0byB3b3JrIE9LIHdpdGggREFDJ3MgZGlzYWJsZWQsIGlmIERBQydzIGFyZSBlbmFibGVkLAorICAgICAgeW91IGhhdmUgdG8gb3V0cHV0IHZhbHVlcyB0byBhbGwgZW5hYmxlZCBEQUMncyB1bnRpbCByZXN1bHQgYXBwZWFycywgSQorICAgICAgZ3Vlc3MgdGhhdCBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggcGFjZXIgY2xvY2tzLCBidXQgdGhlIHNvdXJjZQorICAgICAgZ2l2ZXMgbWUgbm8gY2x1ZXMuIEknbGwga2VlcCBpdCBzaW1wbGUgc28gZmFyLgorCisgICA0LiBBbmFsb2cgaW4uCisgICAgICAgIEVhY2ggY2hhbm5lbCBpbiB0aGUgc2Nhbmxpc3Qgc2VlbXMgdG8gYmUgY29udHJvbGxlZCBieSBmb3VyCisJY29udHJvbCB3b3JkczoKKworICAgICAgICBXb3JkMDoKKyAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAhIHwgfCB8ICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEKKyAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICAgICAgICBXb3JkMToKKyAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAhIHwgfCB8ICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEKKyAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICB8ICAgICAgICAgICAgIHwgICAgICAgfCB8IHwgfCB8CisgICAgICAgICAgICstLS0tLS0rLS0tLS0tKyAgICAgICB8IHwgfCB8ICstLSBEaWdpdGFsIGlucHV0ICg/PykKKwkJICB8CQkgfCB8IHwgKy0tLS0gMTAgdXMgc2V0dGxpbmcgdGltZQorCQkgIHwJCSB8IHwgKy0tLS0tLSBTdXNwZW5kIGFjcXVpc2l0aW9uIChsYXN0IHRvIHNjYW4pCisJCSAgfAkJIHwgKy0tLS0tLS0tIFNpbXVsdGFuZW91cyBzYW1wbGUgYW5kIGhvbGQKKwkJICB8CQkgKy0tLS0tLS0tLS0gU2lnbmVkIGRhdGEgZm9ybWF0CisJCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29ycmVjdGlvbiBvZmZzZXQgbG93CisKKyAgICAgICAgV29yZDI6CisgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgISB8IHwgfCAhIHwgfCB8ICEgfCB8IHwgISB8IHwgfCAhCisgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgIHwgICAgIHwgfCAgICAgfCB8IHwgfCB8IHwgICAgIHwKKyAgICAgICAgICAgKy0tLS0tKyArLS0rLS0rICsrKyArKysgKy0tKy0tKworICAgICAgICAgICAgICB8ICAgICAgIHwgICAgIHwgICB8ICAgICArLS0tLS0gRXhwYW5zaW9uIGNoYW5uZWwKKwkgICAgICB8ICAgICAgIHwgICAgIHwgICArLS0tLS0tLS0tLS0gRXhwYW5zaW9uIGdhaW4KKyAgICAgICAgICAgICAgfCAgICAgICB8ICAgICArLS0tLS0tLS0tLS0tLS0tIENoYW5uZWwgKGxvdykKKwkgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29ycmVjdGlvbiBvZmZzZXQgaGlnaAorCSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb3JyZWN0aW9uIGdhaW4gbG93CisgICAgICAgIFdvcmQzOgorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEgfCB8IHwgIQorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICB8ICAgICAgICAgICAgIHwgfCB8IHwgICB8IHwgfCB8CisgICAgICAgICAgICstLS0tLS0rLS0tLS0tKyB8IHwgKy0rLSsgfCB8ICstLSBMb3cgYmFuayBlbmFibGUKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgfCAgIHwgICB8ICstLS0tIEhpZ2ggYmFuayBlbmFibGUKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgfCAgIHwgICArLS0tLS0tIEhpL2xvdyBzZWxlY3QKKwkJICB8ICAgIAkgICB8IHwgICArLS0tLS0tLS0tLSBHYWluICgxLD8sMiw0LDgsMTYsMzIsNjQpCisJCSAgfCAgICAJICAgfCArLS0tLS0tLS0tLS0tLS0gZGlmZmVyZW50aWFsL3NpbmdsZSBlbmRlZAorCQkgIHwgICAgCSAgICstLS0tLS0tLS0tLS0tLS0tIFVuaXBvbGFyCisJCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29ycmVjdGlvbiBnYWluIGhpZ2gKKworCisKKyAgIDk5OS4gVGhlIGNhcmQgc2VlbXMgdG8gaGF2ZSBhbiBpbmNyZWRpYmxlIGFtb3VudCBvZiBjYXBhYmlsaXRpZXMsIGJ1dAorICAgICAgICB0cnlpbmcgdG8gcmV2ZXJzZSBlbmdpbmVlciB0aGVtIGZyb20gdGhlIFdpbmRvd3Mgc291cmNlIGlzIGJleW9uZCBteQorCXBhdGllbmNlLgorCisKKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKworI2RlZmluZSBEQVFCT0FSRDIwMDBfU1VCU1lTVEVNX0lEUzIgCTB4MDAwMjE2MTYJLyogRGFxYm9hcmQvMjAwMCAtIDIgRGFjcyAqLworI2RlZmluZSBEQVFCT0FSRDIwMDBfU1VCU1lTVEVNX0lEUzQgCTB4MDAwNDE2MTYJLyogRGFxYm9hcmQvMjAwMCAtIDQgRGFjcyAqLworCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EQVFfU0laRSAJCTB4MTAwMgorI2RlZmluZSBEQVFCT0FSRDIwMDBfUExYX1NJWkUgCQkweDEwMAorCisvLyBJbml0aWFsaXphdGlvbiBiaXRzIGZvciB0aGUgU2VyaWFsIEVFUFJPTSBDb250cm9sIFJlZ2lzdGVyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TRUNSUHJvZ1BpbkhpICAgICAgMHg4MDAxNzY3ZQorI2RlZmluZSBEQVFCT0FSRDIwMDBfU0VDUlByb2dQaW5MbyAgICAgIDB4ODAwMDc2N2UKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NFQ1JMb2NhbEJ1c0hpICAgICAweGMwMDA3NjdlCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TRUNSTG9jYWxCdXNMbyAgICAgMHg4MDAwNzY3ZQorI2RlZmluZSBEQVFCT0FSRDIwMDBfU0VDUlJlbG9hZEhpICAgICAgIDB4YTAwMDc2N2UKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NFQ1JSZWxvYWRMbyAgICAgICAweDgwMDA3NjdlCisKKy8vIFNFQ1Igc3RhdHVzIGJpdHMKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0VFUFJPTV9QUkVTRU5UICAgICAweDEwMDAwMDAwCisKKy8vIENQTEQgc3RhdHVzIGJpdHMKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0NQTERfSU5JVCAJCTB4MDAwMgorI2RlZmluZSBEQVFCT0FSRDIwMDBfQ1BMRF9ET05FIAkJMHgwMDA0CisKKy8vIEF2YWlsYWJsZSByYW5nZXMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXFib2FyZDIwMDBfYWkgPSB7IDEzLCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMS4yNSwgMS4yNSksCisJCQlSQU5HRSgtMC42MjUsIDAuNjI1KSwKKwkJCVJBTkdFKC0wLjMxMjUsIDAuMzEyNSksCisJCQlSQU5HRSgtMC4xNTYsIDAuMTU2KSwKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKDAsIDEuMjUpLAorCQkJUkFOR0UoMCwgMC42MjUpLAorCQkJUkFOR0UoMCwgMC4zMTI1KQorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXFib2FyZDIwMDBfYW8gPSB7IDEsIHsKKwkJCVJBTkdFKC0xMCwgMTApCisJfQorfTsKKworc3RydWN0IGRhcWJvYXJkMjAwMF9odyB7CisJdm9sYXRpbGUgdTE2IGFjcUNvbnRyb2w7CS8vIDB4MDAKKwl2b2xhdGlsZSB1MTYgYWNxU2Nhbkxpc3RGSUZPOwkvLyAweDAyCisJdm9sYXRpbGUgdTMyIGFjcVBhY2VyQ2xvY2tEaXZMb3c7CS8vIDB4MDQKKworCXZvbGF0aWxlIHUxNiBhY3FTY2FuQ291bnRlcjsJLy8gMHgwOAorCXZvbGF0aWxlIHUxNiBhY3FQYWNlckNsb2NrRGl2SGlnaDsJLy8gMHgwYQorCXZvbGF0aWxlIHUxNiBhY3FUcmlnZ2VyQ291bnQ7CS8vIDB4MGMKKwl2b2xhdGlsZSB1MTYgZmlsbDI7CS8vIDB4MGUKKwl2b2xhdGlsZSB1MTYgYWNxUmVzdWx0c0ZJRk87CS8vIDB4MTAKKwl2b2xhdGlsZSB1MTYgZmlsbDM7CS8vIDB4MTIKKwl2b2xhdGlsZSB1MTYgYWNxUmVzdWx0c1NoYWRvdzsJLy8gMHgxNAorCXZvbGF0aWxlIHUxNiBmaWxsNDsJLy8gMHgxNgorCXZvbGF0aWxlIHUxNiBhY3FBZGNSZXN1bHQ7CS8vIDB4MTgKKwl2b2xhdGlsZSB1MTYgZmlsbDU7CS8vIDB4MWEKKwl2b2xhdGlsZSB1MTYgZGFjU2NhbkNvdW50ZXI7CS8vIDB4MWMKKwl2b2xhdGlsZSB1MTYgZmlsbDY7CS8vIDB4MWUKKworCXZvbGF0aWxlIHUxNiBkYWNDb250cm9sOwkvLyAweDIwCisJdm9sYXRpbGUgdTE2IGZpbGw3OwkvLyAweDIyCisJdm9sYXRpbGUgczE2IGRhY0ZJRk87CS8vIDB4MjQKKwl2b2xhdGlsZSB1MTYgZmlsbDhbMl07CS8vIDB4MjYKKwl2b2xhdGlsZSB1MTYgZGFjUGFjZXJDbG9ja0RpdjsJLy8gMHgyYQorCXZvbGF0aWxlIHUxNiByZWZEYWNzOwkvLyAweDJjCisJdm9sYXRpbGUgdTE2IGZpbGw5OwkvLyAweDJlCisKKwl2b2xhdGlsZSB1MTYgZGlvQ29udHJvbDsJLy8gMHgzMAorCXZvbGF0aWxlIHMxNiBkaW9QM2hzaW9EYXRhOwkvLyAweDMyCisJdm9sYXRpbGUgdTE2IGRpb1AzQ29udHJvbDsJLy8gMHgzNAorCXZvbGF0aWxlIHUxNiBjYWxFZXByb21Db250cm9sOwkvLyAweDM2CisJdm9sYXRpbGUgczE2IGRhY1NldHRpbmdbNF07CS8vIDB4MzgKKwl2b2xhdGlsZSBzMTYgZGlvUDJFeHBhbnNpb25JTzhCaXRbMzJdOwkvLyAweDQwCisKKwl2b2xhdGlsZSB1MTYgY3RyVG1yQ29udHJvbDsJLy8gMHg4MAorCXZvbGF0aWxlIHUxNiBmaWxsMTBbM107CS8vIDB4ODIKKwl2b2xhdGlsZSBzMTYgY3RySW5wdXRbNF07CS8vIDB4ODgKKwl2b2xhdGlsZSB1MTYgZmlsbDExWzhdOwkvLyAweDkwCisJdm9sYXRpbGUgdTE2IHRpbWVyRGl2aXNvclsyXTsJLy8gMHhhMAorCXZvbGF0aWxlIHUxNiBmaWxsMTJbNl07CS8vIDB4YTQKKworCXZvbGF0aWxlIHUxNiBkbWFDb250cm9sOwkvLyAweGIwCisJdm9sYXRpbGUgdTE2IHRyaWdDb250cm9sOwkvLyAweGIyCisJdm9sYXRpbGUgdTE2IGZpbGwxM1syXTsJLy8gMHhiNAorCXZvbGF0aWxlIHUxNiBjYWxFZXByb207CS8vIDB4YjgKKwl2b2xhdGlsZSB1MTYgYWNxRGlnaXRhbE1hcms7CS8vIDB4YmEKKwl2b2xhdGlsZSB1MTYgdHJpZ0RhY3M7CS8vIDB4YmMKKwl2b2xhdGlsZSB1MTYgZmlsbDE0OwkvLyAweGJlCisJdm9sYXRpbGUgczE2IGRpb1AyRXhwYW5zaW9uSU8xNkJpdFszMl07CS8vIDB4YzAKK307CisKKy8qIFNjYW4gU2VxdWVuY2VyIHByb2dyYW1taW5nICovCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TZXFTdGFydFNjYW5MaXN0ICAgICAgICAgICAgMHgwMDExCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TZXFTdG9wU2Nhbkxpc3QgICAgICAgICAgICAgMHgwMDEwCisKKy8vIFByZXBhcmUgZm9yIGFjcXVpc2l0aW9uCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BY3FSZXNldFNjYW5MaXN0RmlmbyAgICAgICAgMHgwMDA0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9BY3FSZXNldFJlc3VsdHNGaWZvICAgICAgICAgMHgwMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BY3FSZXNldENvbmZpZ1BpcGUgICAgICAgICAgMHgwMDAxCisKKy8vIEFjcXVzaXRpb24gc3RhdHVzIGJpdHMKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc3VsdHNGSUZPTW9yZTFTYW1wbGUgICAweDAwMDEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc3VsdHNGSUZPSGFzVmFsaWREYXRhICAweDAwMDIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc3VsdHNGSUZPT3ZlcnJ1biAgICAgICAweDAwMDQKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcUxvZ2ljU2Nhbm5pbmcgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcUNvbmZpZ1BpcGVGdWxsICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVNjYW5MaXN0RklGT0VtcHR5ICAgICAgICAweDAwMjAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcUFkY05vdFJlYWR5ICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FyYml0cmF0aW9uRmFpbHVyZSAgICAgICAgICAweDAwODAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVBhY2VyT3ZlcnJ1biAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1BhY2VyT3ZlcnJ1biAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcUhhcmR3YXJlRXJyb3IgICAgICAgICAgICAweDAxYzAKKworLy8gU2NhbiBTZXF1ZW5jZXIgcHJvZ3JhbW1pbmcKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NlcVN0YXJ0U2Nhbkxpc3QgICAgICAgICAgICAweDAwMTEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NlcVN0b3BTY2FuTGlzdCAgICAgICAgICAgICAweDAwMTAKKworLyogUGFjZXIgQ2xvY2sgQ29udHJvbCAqLworI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJJbnRlcm5hbCAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJFeHRlcm5hbCAgICAgICAgICAgIDB4MDAzMgorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJFbmFibGUgICAgICAgICAgICAgIDB4MDAzMQorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJFbmFibGVEYWNQYWNlciAgICAgIDB4MDAzNAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJEaXNhYmxlICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJOb3JtYWxNb2RlICAgICAgICAgIDB4MDA2MAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJDb21wYXRpYmlsaXR5TW9kZSAgIDB4MDA2MQorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJJbnRlcm5hbE91dEVuYWJsZSAgIDB4MDAwOAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJFeHRlcm5hbFJpc2luZyAgICAgIDB4MDEwMAorCisvLyBEQUMgc3RhdHVzCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWNGdWxsICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9SZWZCdXN5ICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmdCdXN5ICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9DYWxCdXN5ICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMwQnVzeSAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMxQnVzeSAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMyQnVzeSAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMzQnVzeSAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisKKy8vIERBQyBjb250cm9sCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMwRW5hYmxlICAgICAgICAgICAgICAgICAgMHgwMDIxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMxRW5hYmxlICAgICAgICAgICAgICAgICAgMHgwMDMxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMyRW5hYmxlICAgICAgICAgICAgICAgICAgMHgwMDQxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMzRW5hYmxlICAgICAgICAgICAgICAgICAgMHgwMDUxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWNFbmFibGVCaXQgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMwRGlzYWJsZSAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMxRGlzYWJsZSAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMyRGlzYWJsZSAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWMzRGlzYWJsZSAgICAgICAgICAgICAgICAgMHgwMDUwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWNSZXNldEZpZm8gICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWNQYXR0ZXJuRGlzYWJsZSAgICAgICAgICAgMHgwMDYwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWNQYXR0ZXJuRW5hYmxlICAgICAgICAgICAgMHgwMDYxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWNTZWxlY3RTaWduZWREYXRhICAgICAgICAgMHgwMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9EYWNTZWxlY3RVbnNpZ25lZERhdGEgICAgICAgMHgwMDAwCisKKy8qIFRyaWdnZXIgQ29udHJvbCAqLworI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ0FuYWxvZyAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ1RUTCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ1RyYW5zSGlMbyAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ1RyYW5zTG9IaSAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ0Fib3ZlICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ0JlbG93ICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ0xldmVsU2Vuc2UgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ0VkZ2VTZW5zZSAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ0VuYWJsZSAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBEQVFCT0FSRDIwMDBfVHJpZ0Rpc2FibGUgICAgICAgICAgICAgICAgIDB4MDAwMAorCisvLyBSZWZlcmVuY2UgRGFjIFNlbGVjdGlvbgorI2RlZmluZSBEQVFCT0FSRDIwMDBfUG9zUmVmRGFjU2VsZWN0ICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfTmVnUmVmRGFjU2VsZWN0ICAgICAgICAgICAgIDB4MDAwMAorCitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkYXFib2FyZDIwMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXFib2FyZDIwMDAgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFxYm9hcmQyMDAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkYXFib2FyZDIwMDBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhcWJvYXJkMjAwMF9kZXRhY2gsCit9OworCitzdHJ1Y3QgZGFxMjAwX2JvYXJkdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaWQ7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXEyMDBfYm9hcmR0eXBlIGJvYXJkdHlwZXNbXSA9IHsKKwl7ImlkczIiLCBEQVFCT0FSRDIwMDBfU1VCU1lTVEVNX0lEUzJ9LAorCXsiaWRzNCIsIERBUUJPQVJEMjAwMF9TVUJTWVNURU1fSURTNH0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgZGFxMjAwX2JvYXJkdHlwZSkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFxMjAwX2JvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZGFxYm9hcmQyMDAwX3BjaV90YWJsZSkgPSB7CisJezB4MTYxNiwgMHgwNDA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkYXFib2FyZDIwMDBfcGNpX3RhYmxlKTsKKworc3RydWN0IGRhcWJvYXJkMjAwMF9wcml2YXRlIHsKKwllbnVtIHsKKwkJY2FyZF9kYXFib2FyZF8yMDAwCisJfSBjYXJkOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXZvaWQgKmRhcTsKKwl2b2lkICpwbHg7CisJaW50IGdvdF9yZWdpb25zOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXFib2FyZDIwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIHZvaWQgd3JpdGVBY3FTY2FuTGlzdEVudHJ5KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1MTYgZW50cnkpCit7CisJc3RydWN0IGRhcWJvYXJkMjAwMF9odyAqZnBnYSA9IGRldnByaXYtPmRhcTsKKworLy8gIGNvbWVkaV91ZGVsYXkoNCk7CisJZnBnYS0+YWNxU2Nhbkxpc3RGSUZPID0gZW50cnkgJiAweDAwZmY7CisvLyAgY29tZWRpX3VkZWxheSg0KTsKKwlmcGdhLT5hY3FTY2FuTGlzdEZJRk8gPSAoZW50cnkgPj4gOCkgJiAweDAwZmY7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3NhbXBsaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbiwgaW50IGdhaW4pCit7CisJdTE2IHdvcmQwLCB3b3JkMSwgd29yZDIsIHdvcmQzOworCisJLyogQ2hhbm5lbCAwLTcgZGlmZiwgY2hhbm5lbCA4LTIzIHNpbmdsZSBlbmRlZCAqLworCXdvcmQwID0gMDsKKwl3b3JkMSA9IDB4MDAwNDsJCS8qIExhc3Qgc2NhbiAqLworCXdvcmQyID0gKGNoYW4gPDwgNikgJiAweDAwYzA7CisJc3dpdGNoIChjaGFuIC8gNCkgeworCWNhc2UgMDoKKwkJd29yZDMgPSAweDAwMDE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJd29yZDMgPSAweDAwMDI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJd29yZDMgPSAweDAwMDU7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJd29yZDMgPSAweDAwMDY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJd29yZDMgPSAweDAwNDE7CisJCWJyZWFrOworCWNhc2UgNToKKwkJd29yZDMgPSAweDAwNDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdvcmQzID0gMDsKKwkJYnJlYWs7CisJfQorLyoKKyAgZGV2LT5lZXByb20uY29ycmVjdGlvbkRBQ1NFW2ldW2pdW2tdLm9mZnNldCA9IDB4ODAwOworICBkZXYtPmVlcHJvbS5jb3JyZWN0aW9uREFDU0VbaV1bal1ba10uZ2FpbiA9IDB4YzAwOworKi8KKwkvKiBUaGVzZSBzaG91bGQgYmUgcmVhZCBmcm9tIEVFUFJPTSAqLworCXdvcmQyIHw9IDB4MDgwMDsKKwl3b3JkMyB8PSAweGMwMDA7CisvKiAgcHJpbnRrKCIlZCAlNC40eCAlNC40eCAlNC40eCAlNC40eFxuIiwgY2hhbiwgd29yZDAsIHdvcmQxLCB3b3JkMiwgd29yZDMpOyovCisJd3JpdGVBY3FTY2FuTGlzdEVudHJ5KGRldiwgd29yZDApOworCXdyaXRlQWNxU2Nhbkxpc3RFbnRyeShkZXYsIHdvcmQxKTsKKwl3cml0ZUFjcVNjYW5MaXN0RW50cnkoZGV2LCB3b3JkMik7CisJd3JpdGVBY3FTY2FuTGlzdEVudHJ5KGRldiwgd29yZDMpOworfQorCitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCXN0cnVjdCBkYXFib2FyZDIwMDBfaHcgKmZwZ2EgPSBkZXZwcml2LT5kYXE7CisJaW50IGdhaW4sIGNoYW4sIHRpbWVvdXQ7CisKKwlmcGdhLT5hY3FDb250cm9sID0KKwkJREFRQk9BUkQyMDAwX0FjcVJlc2V0U2Nhbkxpc3RGaWZvIHwKKwkJREFRQk9BUkQyMDAwX0FjcVJlc2V0UmVzdWx0c0ZpZm8gfAorCQlEQVFCT0FSRDIwMDBfQWNxUmVzZXRDb25maWdQaXBlOworCisJLyogSWYgcGFjZXIgY2xvY2sgaXMgbm90IHNldCB0byBzb21lIGhpZ2ggdmFsdWUgKD4gMTAgdXMpLCB3ZQorCSAgIHJpc2sgbXVsdGlwbGUgc2FtcGxlcyB0byBiZSBwdXQgaW50byB0aGUgcmVzdWx0IEZJRk8uICovCisJZnBnYS0+YWNxUGFjZXJDbG9ja0RpdkxvdyA9IDEwMDAwMDA7CS8qIDEgc2Vjb25kLCBzaG91bGQgYmUgbG9uZyBlbm91Z2ggKi8KKwlmcGdhLT5hY3FQYWNlckNsb2NrRGl2SGlnaCA9IDA7CisKKwlnYWluID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFRoaXMgZG9lc24ndCBsb29rIGVmZmljaWVudC4gIEkgZGVjaWRlZCB0byB0YWtlIHRoZSBjb25zZXJ2YXRpdmUKKwkgKiBhcHByb2FjaCB3aGVuIEkgZGlkIHRoZSBpbnNuIGNvbnZlcnNpb24uICBQZXJoYXBzIGl0IHdvdWxkIGJlCisJICogYmV0dGVyIHRvIGhhdmUgYnJva2VuIGl0IGNvbXBsZXRlbHksIHRoZW4gc29tZW9uZSB3b3VsZCBoYXZlIGJlZW4KKwkgKiBmb3JjZWQgdG8gZml4IGl0LiAgLS1kcyAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJc2V0dXBfc2FtcGxpbmcoZGV2LCBjaGFuLCBnYWluKTsKKwkJLyogRW5hYmxlIHJlYWRpbmcgZnJvbSB0aGUgc2Nhbmxpc3QgRklGTyAqLworCQlmcGdhLT5hY3FDb250cm9sID0gREFRQk9BUkQyMDAwX1NlcVN0YXJ0U2Nhbkxpc3Q7CisJCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAyMDsgdGltZW91dCsrKSB7CisJCQlpZiAoZnBnYS0+YWNxQ29udHJvbCAmIERBUUJPQVJEMjAwMF9BY3FDb25maWdQaXBlRnVsbCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJLy9jb21lZGlfdWRlbGF5KDIpOworCQl9CisJCWZwZ2EtPmFjcUNvbnRyb2wgPSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJFbmFibGU7CisJCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAyMDsgdGltZW91dCsrKSB7CisJCQlpZiAoZnBnYS0+YWNxQ29udHJvbCAmIERBUUJPQVJEMjAwMF9BY3FMb2dpY1NjYW5uaW5nKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvL2NvbWVkaV91ZGVsYXkoMik7CisJCX0KKwkJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJCWlmIChmcGdhLT4KKwkJCQlhY3FDb250cm9sICYKKwkJCQlEQVFCT0FSRDIwMDBfQWNxUmVzdWx0c0ZJRk9IYXNWYWxpZERhdGEpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8vY29tZWRpX3VkZWxheSgyKTsKKwkJfQorCQlkYXRhW2ldID0gZnBnYS0+YWNxUmVzdWx0c0ZJRk87CisJCWZwZ2EtPmFjcUNvbnRyb2wgPSBEQVFCT0FSRDIwMDBfQWRjUGFjZXJEaXNhYmxlOworCQlmcGdhLT5hY3FDb250cm9sID0gREFRQk9BUkQyMDAwX1NlcVN0b3BTY2FuTGlzdDsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkYXFib2FyZDIwMDBfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJc3RydWN0IGRhcWJvYXJkMjAwMF9odyAqZnBnYSA9IGRldnByaXYtPmRhcTsKKwlpbnQgdGltZW91dDsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJLyoKKwkJICogT0ssIHNpbmNlIGl0IHdvcmtzIE9LIHdpdGhvdXQgZW5hYmxpbmcgdGhlIERBQydzLCBsZXQncyBrZWVwCisJCSAqIGl0IGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4uLgorCQkgKi8KKwkJLy9mcGdhLT5kYWNDb250cm9sID0gKGNoYW4gKyAyKSAqIDB4MDAxMCB8IDB4MDAwMTsgY29tZWRpX3VkZWxheSgxMDAwKTsKKwkJZnBnYS0+ZGFjU2V0dGluZ1tjaGFuXSA9IGRhdGFbaV07CisJCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAyMDsgdGltZW91dCsrKSB7CisJCQlpZiAoKGZwZ2EtPmRhY0NvbnRyb2wgJiAoKGNoYW4gKyAxKSAqIDB4MDAxMCkpID09IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8vY29tZWRpX3VkZWxheSgyKTsKKwkJfQorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJCS8qCisJCSAqIFNpbmNlIHdlIG5ldmVyIGVuYWJsZWQgdGhlIERBQydzLCB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgaXQuLi4KKwkJICogZnBnYS0+ZGFjQ29udHJvbCA9IChjaGFuICsgMikgKiAweDAwMTAgfCAweDAwMDA7IGNvbWVkaV91ZGVsYXkoMTAwMCk7CisJCSAqLworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfcmVzZXRMb2NhbEJ1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImRhcWJvYXJkMjAwMF9yZXNldExvY2FsQnVzXG4iKTsKKwl3cml0ZWwoREFRQk9BUkQyMDAwX1NFQ1JMb2NhbEJ1c0hpLCBkZXZwcml2LT5wbHggKyAweDZjKTsKKwljb21lZGlfdWRlbGF5KDEwMDAwKTsKKwl3cml0ZWwoREFRQk9BUkQyMDAwX1NFQ1JMb2NhbEJ1c0xvLCBkZXZwcml2LT5wbHggKyAweDZjKTsKKwljb21lZGlfdWRlbGF5KDEwMDAwKTsKK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX3JlbG9hZFBMWChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImRhcWJvYXJkMjAwMF9yZWxvYWRQTFhcbiIpOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUlJlbG9hZExvLCBkZXZwcml2LT5wbHggKyAweDZjKTsKKwljb21lZGlfdWRlbGF5KDEwMDAwKTsKKwl3cml0ZWwoREFRQk9BUkQyMDAwX1NFQ1JSZWxvYWRIaSwgZGV2cHJpdi0+cGx4ICsgMHg2Yyk7CisJY29tZWRpX3VkZWxheSgxMDAwMCk7CisJd3JpdGVsKERBUUJPQVJEMjAwMF9TRUNSUmVsb2FkTG8sIGRldnByaXYtPnBseCArIDB4NmMpOworCWNvbWVkaV91ZGVsYXkoMTAwMDApOworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfcHVsc2VQcm9nUGluKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiZGFxYm9hcmQyMDAwX3B1bHNlUHJvZ1BpbiAxXG4iKTsKKwl3cml0ZWwoREFRQk9BUkQyMDAwX1NFQ1JQcm9nUGluSGksIGRldnByaXYtPnBseCArIDB4NmMpOworCWNvbWVkaV91ZGVsYXkoMTAwMDApOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUlByb2dQaW5MbywgZGV2cHJpdi0+cGx4ICsgMHg2Yyk7CisJY29tZWRpX3VkZWxheSgxMDAwMCk7CS8qIE5vdCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgYnV0IEkgbGlrZSBzeW1tZXRyeS4uLiAqLworfQorCitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF9wb2xsQ1BMRChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1hc2spCit7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGk7CisJaW50IGNwbGQ7CisKKwkvKiB0aW1lb3V0IGFmdGVyIDUwIHRyaWVzIC0+IDVtcyAqLworCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7CisJCWNwbGQgPSByZWFkdyhkZXZwcml2LT5kYXEgKyAweDEwMDApOworCQlpZiAoKGNwbGQgJiBtYXNrKSA9PSBtYXNrKSB7CisJCQlyZXN1bHQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJY29tZWRpX3VkZWxheSgxMDApOworCX0KKwljb21lZGlfdWRlbGF5KDUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX3dyaXRlQ1BMRChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGRhdGEpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwljb21lZGlfdWRlbGF5KDEwKTsKKwl3cml0ZXcoZGF0YSwgZGV2cHJpdi0+ZGFxICsgMHgxMDAwKTsKKwlpZiAoKHJlYWR3KGRldnByaXYtPmRhcSArIDB4MTAwMCkgJiBEQVFCT0FSRDIwMDBfQ1BMRF9JTklUKSA9PQorCQlEQVFCT0FSRDIwMDBfQ1BMRF9JTklUKSB7CisJCXJlc3VsdCA9IDE7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZV9kYXFib2FyZDIwMDAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgY2hhciAqY3BsZF9hcnJheSwgaW50IGxlbikKK3sKKwlpbnQgcmVzdWx0ID0gLUVJTzsKKwkvKiBSZWFkIHRoZSBzZXJpYWwgRUVQUk9NIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlpbnQgc2VjcjsKKwlpbnQgcmV0cnk7CisJaW50IGk7CisKKwkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHNlcmlhbCBlZXByb20gaXMgcHJlc2VudCBvbiB0aGUgYm9hcmQgKi8KKwlzZWNyID0gcmVhZGwoZGV2cHJpdi0+cGx4ICsgMHg2Yyk7CisJaWYgKCEoc2VjciAmIERBUUJPQVJEMjAwMF9FRVBST01fUFJFU0VOVCkpIHsKKyNpZmRlZiBERUJVR19FRVBST00KKwkJcHJpbnRrKCJubyBzZXJpYWwgZWVwcm9tXG4iKTsKKyNlbmRpZgorCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCAzOyByZXRyeSsrKSB7CisjaWZkZWYgREVCVUdfRUVQUk9NCisJCXByaW50aygiUHJvZ3JhbW1pbmcgRUVQUk9NIHRyeSAleFxuIiwgcmV0cnkpOworI2VuZGlmCisKKwkJZGFxYm9hcmQyMDAwX3Jlc2V0TG9jYWxCdXMoZGV2KTsKKwkJZGFxYm9hcmQyMDAwX3JlbG9hZFBMWChkZXYpOworCQlkYXFib2FyZDIwMDBfcHVsc2VQcm9nUGluKGRldik7CisJCWlmIChkYXFib2FyZDIwMDBfcG9sbENQTEQoZGV2LCBEQVFCT0FSRDIwMDBfQ1BMRF9JTklUKSkgeworCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQkJaWYgKGNwbGRfYXJyYXlbaV0gPT0gMHhmZgorCQkJCQkmJiBjcGxkX2FycmF5W2kgKyAxXSA9PSAweDIwKSB7CisjaWZkZWYgREVCVUdfRUVQUk9NCisJCQkJCXByaW50aygiUHJlYW1ibGUgZm91bmQgYXQgJWRcbiIsIGkpOworI2VuZGlmCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWZvciAoOyBpIDwgbGVuOyBpICs9IDIpIHsKKwkJCQlpbnQgZGF0YSA9CisJCQkJCShjcGxkX2FycmF5W2ldIDw8IDgpICsgY3BsZF9hcnJheVtpICsKKwkJCQkJMV07CisJCQkJaWYgKCFkYXFib2FyZDIwMDBfd3JpdGVDUExEKGRldiwgZGF0YSkpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPj0gbGVuKSB7CisjaWZkZWYgREVCVUdfRUVQUk9NCisJCQkJcHJpbnRrKCJQcm9ncmFtbWVkXG4iKTsKKyNlbmRpZgorCQkJCWRhcWJvYXJkMjAwMF9yZXNldExvY2FsQnVzKGRldik7CisJCQkJZGFxYm9hcmQyMDAwX3JlbG9hZFBMWChkZXYpOworCQkJCXJlc3VsdCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2FkY1N0b3BEbWFUcmFuc2ZlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8qICBwcmludGsoIkltcGxlbWVudDogZGFxYm9hcmQyMDAwX2FkY1N0b3BEbWFUcmFuc2ZlclxuIik7Ki8KK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2FkY0Rpc2FybShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3ICpmcGdhID0gZGV2cHJpdi0+ZGFxOworCisJLyogRGlzYWJsZSBoYXJkd2FyZSB0cmlnZ2VycyAqLworCWNvbWVkaV91ZGVsYXkoMik7CisJZnBnYS0+dHJpZ0NvbnRyb2wgPSBEQVFCT0FSRDIwMDBfVHJpZ0FuYWxvZyB8IERBUUJPQVJEMjAwMF9UcmlnRGlzYWJsZTsKKwljb21lZGlfdWRlbGF5KDIpOworCWZwZ2EtPnRyaWdDb250cm9sID0gREFRQk9BUkQyMDAwX1RyaWdUVEwgfCBEQVFCT0FSRDIwMDBfVHJpZ0Rpc2FibGU7CisKKwkvKiBTdG9wIHRoZSBzY2FuIGxpc3QgRklGTyBmcm9tIGxvYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcGlwZSAqLworCWNvbWVkaV91ZGVsYXkoMik7CisJZnBnYS0+YWNxQ29udHJvbCA9IERBUUJPQVJEMjAwMF9TZXFTdG9wU2Nhbkxpc3Q7CisKKwkvKiBTdG9wIHRoZSBwYWNlciBjbG9jayAqLworCWNvbWVkaV91ZGVsYXkoMik7CisJZnBnYS0+YWNxQ29udHJvbCA9IERBUUJPQVJEMjAwMF9BZGNQYWNlckRpc2FibGU7CisKKwkvKiBTdG9wIHRoZSBpbnB1dCBkbWEgKGFib3J0IGNoYW5uZWwgMSkgKi8KKwlkYXFib2FyZDIwMDBfYWRjU3RvcERtYVRyYW5zZmVyKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9hY3RpdmF0ZVJlZmVyZW5jZURhY3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGRhcWJvYXJkMjAwMF9odyAqZnBnYSA9IGRldnByaXYtPmRhcTsKKwlpbnQgdGltZW91dDsKKworCS8vIFNldCB0aGUgKyByZWZlcmVuY2UgZGFjIHZhbHVlIGluIHRoZSBGUEdBCisJZnBnYS0+cmVmRGFjcyA9IDB4ODAgfCBEQVFCT0FSRDIwMDBfUG9zUmVmRGFjU2VsZWN0OworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAyMDsgdGltZW91dCsrKSB7CisJCWlmICgoZnBnYS0+ZGFjQ29udHJvbCAmIERBUUJPQVJEMjAwMF9SZWZCdXN5KSA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCQljb21lZGlfdWRlbGF5KDIpOworCX0KKy8qICBwcmludGsoIkRBUUJPQVJEMjAwMF9Qb3NSZWZEYWNTZWxlY3QgJWRcbiIsIHRpbWVvdXQpOyovCisKKwkvLyBTZXQgdGhlIC0gcmVmZXJlbmNlIGRhYyB2YWx1ZSBpbiB0aGUgRlBHQQorCWZwZ2EtPnJlZkRhY3MgPSAweDgwIHwgREFRQk9BUkQyMDAwX05lZ1JlZkRhY1NlbGVjdDsKKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgMjA7IHRpbWVvdXQrKykgeworCQlpZiAoKGZwZ2EtPmRhY0NvbnRyb2wgJiBEQVFCT0FSRDIwMDBfUmVmQnVzeSkgPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwkJY29tZWRpX3VkZWxheSgyKTsKKwl9CisvKiAgcHJpbnRrKCJEQVFCT0FSRDIwMDBfTmVnUmVmRGFjU2VsZWN0ICVkXG4iLCB0aW1lb3V0KTsqLworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZUN0cnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisvKiAgcHJpbnRrKCJJbXBsZW1lbnQ6IGRhcWJvYXJkMjAwMF9pbml0aWFsaXplQ3Ryc1xuIik7Ki8KK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2luaXRpYWxpemVUbXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworLyogIHByaW50aygiSW1wbGVtZW50OiBkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZVRtcnNcbiIpOyovCit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9kYWNEaXNhcm0oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisvKiAgcHJpbnRrKCJJbXBsZW1lbnQ6IGRhcWJvYXJkMjAwMF9kYWNEaXNhcm1cbiIpOyovCit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9pbml0aWFsaXplQWRjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWRhcWJvYXJkMjAwMF9hZGNEaXNhcm0oZGV2KTsKKwlkYXFib2FyZDIwMDBfYWN0aXZhdGVSZWZlcmVuY2VEYWNzKGRldik7CisJZGFxYm9hcmQyMDAwX2luaXRpYWxpemVDdHJzKGRldik7CisJZGFxYm9hcmQyMDAwX2luaXRpYWxpemVUbXJzKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9pbml0aWFsaXplRGFjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWRhcWJvYXJkMjAwMF9kYWNEaXNhcm0oZGV2KTsKK30KKworLyoKK1RoZSB0ZXN0IGNvbW1hbmQsIFJFTU9WRSEhOgorCitybW1vZCBkYXFib2FyZDIwMDAgOyBybW1vZCBjb21lZGk7IG1ha2UgaW5zdGFsbCA7IG1vZHByb2JlIGRhcWJvYXJkMjAwMDsgL3Vzci9zYmluL2NvbWVkaV9jb25maWcgL2Rldi9jb21lZGkwIGRhcWJvYXJkLzIwMDAgOyB0YWlsIC00MCAvdmFyL2xvZy9tZXNzYWdlcworKi8KKworc3RhdGljIGludCBkYXFib2FyZDIwMDBfODI1NV9jYihpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsCisJdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IHJlc3VsdCA9IDA7CisJaWYgKGRpcikgeworCQl3cml0ZXcoZGF0YSwgKCh2b2lkICopaW9hZGRyKSArIHBvcnQgKiAyKTsKKwkJcmVzdWx0ID0gMDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSByZWFkdygoKHZvaWQgKilpb2FkZHIpICsgcG9ydCAqIDIpOworCX0KKy8qCisgIHByaW50aygiZGFxYm9hcmQyMDAwXzgyNTVfY2IgJXggJWQgJWQgJTIuMnggLT4gJTIuMnhcbiIsCisgICAgICAgIGFyZywgZGlyLCBwb3J0LCBkYXRhLCByZXN1bHQpOworKi8KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IHBjaV9kZXYgKmNhcmQgPSBOVUxMOworCXZvaWQgKmF1eF9kYXRhOworCXVuc2lnbmVkIGludCBhdXhfbGVuOworCWludCBidXMsIHNsb3Q7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXFib2FyZDIwMDA6IiwgZGV2LT5taW5vcik7CisKKwlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwlzbG90ID0gaXQtPm9wdGlvbnNbMV07CisKKwlyZXN1bHQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkYXFib2FyZDIwMDBfcHJpdmF0ZSkpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmb3IgKGNhcmQgPSBwY2lfZ2V0X2RldmljZSgweDE2MTYsIDB4MDQwOSwgTlVMTCk7CisJCWNhcmQgIT0gTlVMTDsKKwkJY2FyZCA9IHBjaV9nZXRfZGV2aWNlKDB4MTYxNiwgMHgwNDA5LCBjYXJkKSkgeworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCS8qIHJlcXVlc3RlZCBwYXJ0aWN1bGFyIGJ1cy9zbG90ICovCisJCQlpZiAoY2FyZC0+YnVzLT5udW1iZXIgIT0gYnVzIHx8CisJCQkJUENJX1NMT1QoY2FyZC0+ZGV2Zm4pICE9IHNsb3QpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlicmVhazsgIC8qIGZvdW5kIG9uZSAqLworCX0KKwlpZiAoIWNhcmQpIHsKKwkJaWYgKGJ1cyB8fCBzbG90KQorCQkJcHJpbnRrKCIgbm8gZGFxYm9hcmQyMDAwIGZvdW5kIGF0IGJ1cy9zbG90OiAlZC8lZFxuIiwKKwkJCQlidXMsIHNsb3QpOworCQllbHNlCisJCQlwcmludGsoIiBubyBkYXFib2FyZDIwMDAgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9IGVsc2UgeworCQl1MzIgaWQ7CisJCWludCBpOworCQlkZXZwcml2LT5wY2lfZGV2ID0gY2FyZDsKKwkJaWQgPSAoKHUzMikgY2FyZC0+c3Vic3lzdGVtX2RldmljZSA8PCAxNikgfCBjYXJkLT4KKwkJCXN1YnN5c3RlbV92ZW5kb3I7CisJCWZvciAoaSA9IDA7IGkgPCBuX2JvYXJkdHlwZXM7IGkrKykgeworCQkJaWYgKGJvYXJkdHlwZXNbaV0uaWQgPT0gaWQpIHsKKwkJCQlwcmludGsoIiAlcyIsIGJvYXJkdHlwZXNbaV0ubmFtZSk7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBib2FyZHR5cGVzICsgaTsKKwkJCX0KKwkJfQorCQlpZiAoIWRldi0+Ym9hcmRfcHRyKSB7CisJCQlwcmludGsoIiB1bmtub3duIHN1YnN5c3RlbSBpZCAlMDh4IChwcmV0ZW5kIGl0IGlzIGFuIGlkczIpIiwgaWQpOworCQkJZGV2LT5ib2FyZF9wdHIgPSBib2FyZHR5cGVzOworCQl9CisJfQorCisJaWYgKChyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShjYXJkLCAiZGFxYm9hcmQyMDAwIikpIDwgMCkgeworCQlwcmludGsoIiBmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXZwcml2LT5nb3RfcmVnaW9ucyA9IDE7CisJZGV2cHJpdi0+cGx4ID0KKwkJaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoY2FyZCwgMCksIERBUUJPQVJEMjAwMF9QTFhfU0laRSk7CisJZGV2cHJpdi0+ZGFxID0KKwkJaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoY2FyZCwgMiksIERBUUJPQVJEMjAwMF9EQVFfU0laRSk7CisJaWYgKCFkZXZwcml2LT5wbHggfHwgIWRldnByaXYtPmRhcSkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXN1bHQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0OworCisJcmVhZGwoZGV2cHJpdi0+cGx4ICsgMHg2Yyk7CisKKwkvKgorCSAgIHU4IGludGVycnVwdDsKKwkgICBXaW5kb3dzIGNvZGUgZG9lcyByZXN0b3JlIGludGVycnVwdHMsIGJ1dCBzaW5jZSB3ZSBkb24ndCB1c2UgdGhlbS4uLgorCSAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGNhcmQsIFBDSV9JTlRFUlJVUFRfTElORSwgJmludGVycnVwdCk7CisJICAgcHJpbnRrKCJJbnRlcnJ1cHQgYmVmb3JlIGlzOiAleFxuIiwgaW50ZXJydXB0KTsKKwkgKi8KKworCWF1eF9kYXRhID0gY29tZWRpX2F1eF9kYXRhKGl0LT5vcHRpb25zLCAwKTsKKwlhdXhfbGVuID0gaXQtPm9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEFfTEVOR1RIXTsKKworCWlmIChhdXhfZGF0YSAmJiBhdXhfbGVuKSB7CisJCXJlc3VsdCA9IGluaXRpYWxpemVfZGFxYm9hcmQyMDAwKGRldiwgYXV4X2RhdGEsIGF1eF9sZW4pOworCX0gZWxzZSB7CisJCXByaW50aygibm8gRlBHQSBpbml0aWFsaXphdGlvbiBjb2RlLCBhYm9ydGluZ1xuIik7CisJCXJlc3VsdCA9IC1FSU87CisJfQorCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIG91dDsKKwlkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZUFkYyhkZXYpOworCWRhcWJvYXJkMjAwMF9pbml0aWFsaXplRGFjKGRldik7CisJLyoKKwkgICBXaW5kb3dzIGNvZGUgZG9lcyByZXN0b3JlIGludGVycnVwdHMsIGJ1dCBzaW5jZSB3ZSBkb24ndCB1c2UgdGhlbS4uLgorCSAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGNhcmQsIFBDSV9JTlRFUlJVUFRfTElORSwgJmludGVycnVwdCk7CisJICAgcHJpbnRrKCJJbnRlcnJ1cHQgYWZ0ZXIgaXM6ICV4XG4iLCBpbnRlcnJ1cHQpOworCSAqLworCisJZGV2LT5pb2Jhc2UgPSAodW5zaWduZWQgbG9uZylkZXZwcml2LT5kYXE7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYWkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gMjQ7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5pbnNuX3JlYWQgPSBkYXFib2FyZDIwMDBfYWlfaW5zbl9yZWFkOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RhcWJvYXJkMjAwMF9haTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPmluc25fcmVhZCA9IGRhcWJvYXJkMjAwMF9hb19pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IGRhcWJvYXJkMjAwMF9hb19pbnNuX3dyaXRlOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RhcWJvYXJkMjAwMF9hbzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXJlc3VsdCA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBkYXFib2FyZDIwMDBfODI1NV9jYiwKKwkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsgMHg0MCkpOworCisJcHJpbnRrKCJcbiIpOworICAgICAgb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkYXFib2FyZDIwMDA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMik7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5kYXEpCisJCQlpb3VubWFwKGRldnByaXYtPmRhcSk7CisJCWlmIChkZXZwcml2LT5wbHgpCisJCQlpb3VubWFwKGRldnByaXYtPnBseCk7CisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+Z290X3JlZ2lvbnMpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfZGFxYm9hcmQyMDAwLCBkYXFib2FyZDIwMDBfcGNpX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1NjMzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5jCkBAIC0wLDAgKzEsMTA2OCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kYXMwOC5jCisgICAgREFTMDggZHJpdmVyCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwMSwyMDAyLDIwMDMgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICAgIENvcHlyaWdodCAoQykgMjAwNCBTYWx2YWRvciBFLiBUcm9wZWEgPHNldEB1c2Vycy5zZi5uZXQ+IDxzZXRAaWVlZS5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKi8KKy8qCitEcml2ZXI6IGRhczA4CitEZXNjcmlwdGlvbjogREFTLTA4IGNvbXBhdGlibGUgYm9hcmRzCitBdXRob3I6IFdhcnJlbiBKYXNwZXIsIGRzLCBGcmFuayBIZXNzCitEZXZpY2VzOiBbS2VpdGhsZXkgTWV0cmFieXRlXSBEQVMwOCAoaXNhLWRhczA4KSwgW0NvbXB1dGVyQm9hcmRzXSBEQVMwOCAoaXNhLWRhczA4KSwKKyAgREFTMDgtUEdNIChkYXMwOC1wZ20pLAorICBEQVMwOC1QR0ggKGRhczA4LXBnaCksIERBUzA4LVBHTCAoZGFzMDgtcGdsKSwgREFTMDgtQU9IIChkYXMwOC1hb2gpLAorICBEQVMwOC1BT0wgKGRhczA4LWFvbCksIERBUzA4LUFPTSAoZGFzMDgtYW9tKSwgREFTMDgvSlItQU8gKGRhczA4L2pyLWFvKSwKKyAgREFTMDgvSlItMTYtQU8gKGRhczA4anItMTYtYW8pLCBQQ0ktREFTMDggKGRhczA4KSwKKyAgUEMxMDQtREFTMDggKHBjMTA0LWRhczA4KSwgREFTMDgvSlIvMTYgKGRhczA4anIvMTYpCitTdGF0dXM6IHdvcmtzCisKK1RoaXMgaXMgYSByZXdyaXRlIG9mIHRoZSBkYXMwOCBhbmQgZGFzMDhqciBkcml2ZXJzLgorCitPcHRpb25zIChmb3IgSVNBIGNhcmRzKToKKyAgICAgICAgWzBdIC0gYmFzZSBpbyBhZGRyZXNzCisKK09wdGlvbnMgKGZvciBwY2ktZGFzMDgpOgorICAgICAgICBbMF0gLSBidXMgIChvcHRpb25hbCkKKyAgICAgICAgWzFdID0gc2xvdCAob3B0aW9uYWwpCisKK1RoZSBkYXMwOCBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IGFzeW5jaHJvbm91cyBjb21tYW5kcywgc2luY2UKK3RoZSBjaGVhcCBkYXMwOCBoYXJkd2FyZSBkb2Vzbid0IHJlYWxseSBzdXBwb3J0IHRoZW0uICBUaGUKK2NvbWVkaV9ydF90aW1lciBkcml2ZXIgY2FuIGJlIHVzZWQgdG8gZW11bGF0ZSBjb21tYW5kcyBmb3IgdGhpcworZHJpdmVyLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAiZGFzMDguaCIKKworI2RlZmluZSBEUlZfTkFNRSAiZGFzMDgiCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUyAweDEzMDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ0lEQVMwOCAweDI5CisjZGVmaW5lIFBDSURBUzA4X1NJWkUgMHg1NAorCisvLyBwY2kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyNkZWZpbmUgSU5UQ1NSICAgICAgICAgICAgICAgMHg0YworI2RlZmluZSAgIElOVFIxX0VOQUJMRSAgICAgICAgIDB4MQorI2RlZmluZSAgIElOVFIxX0hJR0hfUE9MQVJJVFkgIDB4MgorI2RlZmluZSAgIFBDSV9JTlRSX0VOQUJMRSAgICAgIDB4NDAKKyNkZWZpbmUgICBJTlRSMV9FREdFX1RSSUcgICAgICAweDEwMAkvLyByZXF1aXJlcyBoaWdoIHBvbGFyaXR5CisjZGVmaW5lIENOVFJMICAgICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgICBDTlRSTF9ESVIgICAgICAgICAgICAweDIKKyNkZWZpbmUgICBDTlRSTF9JTlRSICAgICAgICAgICAweDQKKworLyoKKyAgICBjaW8tZGFzMDgucGRmCisKKyAgImlzYS1kYXMwOCIKKworICAwCWEvZCBiaXRzIDAtMwkJc3RhcnQgOCBiaXQKKyAgMQlhL2QgYml0cyA0LTExCQlzdGFydCAxMiBiaXQKKyAgMgllb2MsIGlwMS0zLCBpcnEsIG11eAlvcDEtNCwgaW50ZSwgbXV4CisgIDMJdW51c2VkCQkJdW51c2VkCisgIDQ1NjcJODI1NAorICA4OWFiCTgyNTUKKworICByZXF1aXJlcyBoYXJkLXdpcmluZyBmb3IgYXN5bmMgYWkKKworKi8KKworI2RlZmluZSBEQVMwOF9MU0IJCTAKKyNkZWZpbmUgREFTMDhfTVNCCQkxCisjZGVmaW5lIERBUzA4X1RSSUdfMTJCSVQJMQorI2RlZmluZSBEQVMwOF9TVEFUVVMJCTIKKyNkZWZpbmUgICBEQVMwOF9FT0MJCQkoMTw8NykKKyNkZWZpbmUgICBEQVMwOF9JUlEJCQkoMTw8MykKKyNkZWZpbmUgICBEQVMwOF9JUCh4KQkJCSgoKHgpPj40KSYweDcpCisjZGVmaW5lIERBUzA4X0NPTlRST0wJCTIKKyNkZWZpbmUgICBEQVMwOF9NVVhfTUFTSwkweDcKKyNkZWZpbmUgICBEQVMwOF9NVVgoeCkJCSgoeCkgJiBEQVMwOF9NVVhfTUFTSykKKyNkZWZpbmUgICBEQVMwOF9JTlRFCQkJKDE8PDMpCisjZGVmaW5lICAgREFTMDhfRE9fTUFTSwkJMHhmMAorI2RlZmluZSAgIERBUzA4X09QKHgpCQkoKCh4KSA8PCA0KSAmIERBUzA4X0RPX01BU0spCisKKy8qCisgICAgY2lvLWRhczA4anIucGRmCisKKyAgImRhczA4L2pyLWFvIgorCisgIDAJYS9kIGJpdHMgMC0zCQl1bnVzZWQKKyAgMQlhL2QgYml0cyA0LTExCQlzdGFydCAxMiBiaXQKKyAgMgllb2MsIG11eAkJbXV4CisgIDMJZGkJCQlkbworICA0CXVudXNlZAkJCWFvMF9sc2IKKyAgNQl1bnVzZWQJCQlhbzBfbXNiCisgIDYJdW51c2VkCQkJYW8xX2xzYgorICA3CXVudXNlZAkJCWFvMV9tc2IKKworKi8KKworI2RlZmluZSBEQVMwOEpSX0RJTwkJMworI2RlZmluZSBEQVMwOEpSX0FPX0xTQih4KQkoKHgpPzY6NCkKKyNkZWZpbmUgREFTMDhKUl9BT19NU0IoeCkJKCh4KT83OjUpCisKKy8qCisgICAgY2lvLWRhczA4X2FveC5wZGYKKworICAiZGFzMDgtYW9oIgorICAiZGFzMDgtYW9sIgorICAiZGFzMDgtYW9tIgorCisgIDAJYS9kIGJpdHMgMC0zCQlzdGFydCA4IGJpdAorICAxCWEvZCBiaXRzIDQtMTEJCXN0YXJ0IDEyIGJpdAorICAyCWVvYywgaXAxLTMsIGlycSwgbXV4CW9wMS00LCBpbnRlLCBtdXgKKyAgMwltdXgsIGdhaW4gc3RhdHVzCWdhaW4gY29udHJvbAorICA0NTY3CTgyNTQKKyAgOAl1bnVzZWQJCQlhbzBfbHNiCisgIDkJdW51c2VkCQkJYW8wX21zYgorICBhCXVudXNlZAkJCWFvMV9sc2IKKyAgYgl1bnVzZWQJCQlhbzFfbXNiCisgIDg5YWIKKyAgY2RlZgk4MjU1CisqLworCisjZGVmaW5lIERBUzA4QU9fR0FJTl9DT05UUk9MCTMKKyNkZWZpbmUgREFTMDhBT19HQUlOX1NUQVRVUwkzCisKKyNkZWZpbmUgREFTMDhBT19BT19MU0IoeCkJKCh4KT8weGE6OCkKKyNkZWZpbmUgREFTMDhBT19BT19NU0IoeCkJKCh4KT8weGI6OSkKKyNkZWZpbmUgREFTMDhBT19BT19VUERBVEUJOAorCisvKiBnYWlubGlzdCBzYW1lIGFzIF9wZ3hfIGJlbG93ICovCisKK3N0YXRpYyBpbnQgZGFzMDhfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMDhfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMDhfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMDhqcl9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOGpyX2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczA4anJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMDhhb19hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHZvaWQgaTgyNTRfc2V0X21vZGVfbG93KHVuc2lnbmVkIGludCBiYXNlLCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgbW9kZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXMwOF9wZ2wgPSB7IDksIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczA4X3BnaCA9IHsgMTIsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDEpLAorCQkJQklQX1JBTkdFKDAuMDA1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczA4X3BnbSA9IHsgOSwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDEpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpCisJfQorfTsJCQkJLyoKKwkJCQkgICBjaW8tZGFzMDhqci5wZGYKKworCQkJCSAgICJkYXMwOC9qci1hbyIKKworCQkJCSAgIDAgYS9kIGJpdHMgMC0zICAgICAgICAgICAgdW51c2VkCisJCQkJICAgMSBhL2QgYml0cyA0LTExICAgICAgICAgICBzdGFydCAxMiBiaXQKKwkJCQkgICAyIGVvYywgbXV4ICAgICAgICAgICAgICAgIG11eAorCQkJCSAgIDMgZGkgICAgICAgICAgICAgICAgICAgICAgZG8KKwkJCQkgICA0IHVudXNlZCAgICAgICAgICAgICAgICAgIGFvMF9sc2IKKwkJCQkgICA1IHVudXNlZCAgICAgICAgICAgICAgICAgIGFvMF9tc2IKKwkJCQkgICA2IHVudXNlZCAgICAgICAgICAgICAgICAgIGFvMV9sc2IKKwkJCQkgICA3IHVudXNlZCAgICAgICAgICAgICAgICAgIGFvMV9tc2IKKworCQkJCSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IGRhczA4X2FpX2xyYW5nZXNbXSA9IHsKKwkmcmFuZ2VfdW5rbm93biwKKwkmcmFuZ2VfYmlwb2xhcjUsCisJJnJhbmdlX2RhczA4X3BnaCwKKwkmcmFuZ2VfZGFzMDhfcGdsLAorCSZyYW5nZV9kYXMwOF9wZ20sCit9OworCitzdGF0aWMgY29uc3QgaW50IGRhczA4X3BnaF9nYWlubGlzdFtdID0KKwl7IDgsIDAsIDEwLCAyLCAxMiwgNCwgMTQsIDYsIDEsIDMsIDUsIDcgfTsKK3N0YXRpYyBjb25zdCBpbnQgZGFzMDhfcGdsX2dhaW5saXN0W10gPSB7IDgsIDAsIDIsIDQsIDYsIDEsIDMsIDUsIDcgfTsKK3N0YXRpYyBjb25zdCBpbnQgZGFzMDhfcGdtX2dhaW5saXN0W10gPSB7IDgsIDAsIDEwLCAxMiwgMTQsIDksIDExLCAxMywgMTUgfTsKKworc3RhdGljIGNvbnN0IGludCAqY29uc3QgZGFzMDhfZ2Fpbmxpc3RzW10gPSB7CisJTlVMTCwKKwlOVUxMLAorCWRhczA4X3BnaF9nYWlubGlzdCwKKwlkYXMwOF9wZ2xfZ2Fpbmxpc3QsCisJZGFzMDhfcGdtX2dhaW5saXN0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QgZGFzMDhfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJpc2EtZGFzMDgiLAkvLyBjaW8tZGFzMDgucGRmCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdfbm9uZSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDo4LAorCSAgICAgIGk4MjU0X29mZnNldDo0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgtcGdtIiwJLy8gY2lvLWRhczA4cGd4LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnbSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDA0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgtcGdoIiwJLy8gY2lvLWRhczA4cGd4LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnaCwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDA0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgtcGdsIiwJLy8gY2lvLWRhczA4cGd4LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnbCwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDA0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgtYW9oIiwJLy8gY2lvLWRhczA4X2FveC5wZGYKKwkgICAgICBidXN0eXBlOglpc2EsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9wZ2gsCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTIsCisJICAgICAgYW86CWRhczA4YW9fYW9fd2luc24sCS8vIDgKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDoweDBjLAorCSAgICAgIGk4MjU0X29mZnNldDoweDA0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgtYW9sIiwJLy8gY2lvLWRhczA4X2FveC5wZGYKKwkgICAgICBidXN0eXBlOglpc2EsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9wZ2wsCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTIsCisJICAgICAgYW86CWRhczA4YW9fYW9fd2luc24sCS8vIDgKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDoweDBjLAorCSAgICAgIGk4MjU0X29mZnNldDoweDA0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgtYW9tIiwJLy8gY2lvLWRhczA4X2FveC5wZGYKKwkgICAgICBidXN0eXBlOglpc2EsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9wZ20sCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTIsCisJICAgICAgYW86CWRhczA4YW9fYW9fd2luc24sCS8vIDgKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDoweDBjLAorCSAgICAgIGk4MjU0X29mZnNldDoweDA0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgvanItYW8iLAkvLyBjaW8tZGFzMDgtanItYW8ucGRmCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdfbm9uZSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJZGFzMDhqcl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMDhqcl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4anJfZG9fd2JpdHMsCisJICAgICAgZG9fbmNoYW46OCwKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MCwKKwkgICAgICBpb3NpemU6CTE2LAkvLyB1bmNoZWNrZWQKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhczA4anItMTYtYW8iLAkvLyBjaW8tZGFzMDhqci0xNi1hby5wZGYKKwkgICAgICBidXN0eXBlOglpc2EsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjE2LAorCSAgICAgIGFpX3BnOglkYXMwOF9wZ19ub25lLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglkYXMwOGpyX2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjE2LAorCSAgICAgIGRpOglkYXMwOGpyX2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMDhqcl9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo4LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDA0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CSJkYXMwOCIsCS8vIHBjaS1kYXMwOAorCSAgICAgIGlkOglQQ0lfREVWSUNFX0lEX1BDSURBUzA4LAorCSAgICAgIGJ1c3R5cGU6CXBjaSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X2JpcG9sYXI1LAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGFvX25iaXRzOjAsCisJICAgICAgZGk6CWRhczA4X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMDhfZG9fd2JpdHMsCisJICAgICAgZG9fbmNoYW46NCwKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6NCwKKwkgICAgICBpb3NpemU6CTgsCisJCX0sCisjZW5kaWYKKwl7CisJICAgICAgbmFtZToJInBjMTA0LWRhczA4IiwKKwkgICAgICBidXN0eXBlOglwYzEwNCwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnX25vbmUsCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgYW9fbmJpdHM6MCwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDo0LAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorI2lmIDAKKwl7CisJICAgICAgbmFtZToJImRhczA4L2YiLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDhqciIsCisJCX0sCisjZW5kaWYKKwl7CisJICAgICAgbmFtZToJImRhczA4anIvMTYiLAorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTYsCisJICAgICAgYWlfcGc6CWRhczA4X3BnX25vbmUsCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTYsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgYW9fbmJpdHM6MCwKKwkgICAgICBkaToJZGFzMDhqcl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4anJfZG9fd2JpdHMsCisJICAgICAgZG9fbmNoYW46OCwKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MCwKKwkgICAgICBpb3NpemU6CTE2LAkvLyB1bmNoZWNrZWQKKwkJfSwKKyNpZiAwCisJeworCSAgICAgIG5hbWU6CSJkYXM0OC1wZ2EiLAkvLyBjaW8tZGFzNDgtcGdhLnBkZgorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgtcGdhLWcyIiwJLy8gYSBLTSBib2FyZAorCQl9LAorI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ01DSUEKK3N0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QgZGFzMDhfY3NfYm9hcmRzW05VTV9EQVMwOF9DU19CT0FSRFNdID0geworCXsKKwkgICAgICBuYW1lOgkicGNtLWRhczA4IiwKKwkgICAgICBpZDoJMHgwLAkvLyBYWFgKKwkgICAgICBidXN0eXBlOglwY21jaWEsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9iaXBvbGFyNSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9wY21fZW5jb2RlMTIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgYW9fbmJpdHM6MCwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjozLAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDowLAorCSAgICAgIGlvc2l6ZToJMTYsCisJCX0sCisJLy8gZHVwbGljYXRlIHNvIGRyaXZlciBuYW1lIGNhbiBiZSB1c2VkIGFsc28KKwl7CisJICAgICAgbmFtZToJImRhczA4X2NzIiwKKwkgICAgICBpZDoJMHgwLAkvLyBYWFgKKwkgICAgICBidXN0eXBlOglwY21jaWEsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9iaXBvbGFyNSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9wY21fZW5jb2RlMTIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgYW9fbmJpdHM6MCwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjozLAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDowLAorCSAgICAgIGlvc2l6ZToJMTYsCisJCX0sCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGRhczA4X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIFBDSV9ERVZJQ0VfSURfUENJREFTMDgsIFBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRhczA4X3BjaV90YWJsZSk7CisjZW5kaWYKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczA4X3ByaXZhdGVfc3RydWN0ICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzMDhfYm9hcmRfc3RydWN0ICopZGV2LT5ib2FyZF9wdHIpCisKKyNkZWZpbmUgVElNRU9VVCAxMDAwMDAKKworc3RhdGljIGludCBkYXMwOF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IGNoYW47CisJaW50IHJhbmdlOworCWludCBsc2IsIG1zYjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKworCS8qIGNsZWFyIGNyYXAgKi8KKwlpbmIoZGV2LT5pb2Jhc2UgKyBEQVMwOF9MU0IpOworCWluYihkZXYtPmlvYmFzZSArIERBUzA4X01TQik7CisKKwkvKiBzZXQgbXVsdGlwbGV4ZXIgKi8KKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOwkvLyBsb2NrIHRvIHByZXZlbnQgcmFjZSB3aXRoIGRpZ2l0YWwgb3V0cHV0CisJZGV2cHJpdi0+ZG9fbXV4X2JpdHMgJj0gfkRBUzA4X01VWF9NQVNLOworCWRldnByaXYtPmRvX211eF9iaXRzIHw9IERBUzA4X01VWChjaGFuKTsKKwlvdXRiKGRldnByaXYtPmRvX211eF9iaXRzLCBkZXYtPmlvYmFzZSArIERBUzA4X0NPTlRST0wpOworCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKworCWlmIChzLT5yYW5nZV90YWJsZS0+bGVuZ3RoID4gMSkgeworCQkvKiBzZXQgZ2Fpbi9yYW5nZSAqLworCQlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwkJb3V0YihkZXZwcml2LT5wZ19nYWlubGlzdFtyYW5nZV0sCisJCQlkZXYtPmlvYmFzZSArIERBUzA4QU9fR0FJTl9DT05UUk9MKTsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIGNsZWFyIG92ZXItcmFuZ2UgYml0cyBmb3IgMTYtYml0IGJvYXJkcyAqLworCQlpZiAodGhpc2JvYXJkLT5haV9uYml0cyA9PSAxNikKKwkJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBEQVMwOF9NU0IpICYgMHg4MCkKKwkJCQlydF9wcmludGsoImRhczA4OiBvdmVyLXJhbmdlXG4iKTsKKworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJb3V0Yl9wKDAsIGRldi0+aW9iYXNlICsgREFTMDhfVFJJR18xMkJJVCk7CisKKwkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgeworCQkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgREFTMDhfU1RBVFVTKSAmIERBUzA4X0VPQykpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gVElNRU9VVCkgeworCQkJcnRfcHJpbnRrKCJkYXMwODogdGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCW1zYiA9IGluYihkZXYtPmlvYmFzZSArIERBUzA4X01TQik7CisJCWxzYiA9IGluYihkZXYtPmlvYmFzZSArIERBUzA4X0xTQik7CisJCWlmICh0aGlzYm9hcmQtPmFpX2VuY29kaW5nID09IGRhczA4X2VuY29kZTEyKSB7CisJCQlkYXRhW25dID0gKGxzYiA+PiA0KSB8IChtc2IgPDwgNCk7CisJCX0gZWxzZSBpZiAodGhpc2JvYXJkLT5haV9lbmNvZGluZyA9PSBkYXMwOF9wY21fZW5jb2RlMTIpIHsKKwkJCWRhdGFbbl0gPSAobXNiIDw8IDgpICsgbHNiOworCQl9IGVsc2UgaWYgKHRoaXNib2FyZC0+YWlfZW5jb2RpbmcgPT0gZGFzMDhfZW5jb2RlMTYpIHsKKwkJCS8qIEZQT1MgMTYtYml0IGJvYXJkcyBhcmUgc2lnbi1tYWduaXR1ZGUgKi8KKwkJCWlmIChtc2IgJiAweDgwKQorCQkJCWRhdGFbbl0gPSAoMSA8PCAxNSkgfCBsc2IgfCAoKG1zYiAmIDB4N2YpIDw8IDgpOworCQkJZWxzZQorCQkJCWRhdGFbbl0gPSAoMSA8PCAxNSkgLSAobHNiIHwgKG1zYiAmIDB4N2YpIDw8IDgpOworCQl9IGVsc2UgeworCQkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgdW5rbm93biBhaSBlbmNvZGluZyIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSAwOworCWRhdGFbMV0gPSBEQVMwOF9JUChpbmIoZGV2LT5pb2Jhc2UgKyBEQVMwOF9TVEFUVVMpKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczA4X2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgd2JpdHM7CisKKwkvLyBnZXQgY3VycmVudCBzZXR0aW5ncyBvZiBkaWdpdGFsIG91dHB1dCBsaW5lcworCXdiaXRzID0gKGRldnByaXYtPmRvX211eF9iaXRzID4+IDQpICYgMHhmOworCS8vIG51bGwgYml0cyB3ZSBhcmUgZ29pbmcgdG8gc2V0CisJd2JpdHMgJj0gfmRhdGFbMF07CisJLy8gc2V0IG5ldyBiaXQgdmFsdWVzCisJd2JpdHMgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJLy8gcmVtZW1iZXIgZGlnaXRhbCBvdXRwdXQgYml0cworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CS8vIHByZXZlbnQgcmFjZSB3aXRoIHNldHRpbmcgb2YgYW5hbG9nIGlucHV0IG11eAorCWRldnByaXYtPmRvX211eF9iaXRzICY9IH5EQVMwOF9ET19NQVNLOworCWRldnByaXYtPmRvX211eF9iaXRzIHw9IERBUzA4X09QKHdiaXRzKTsKKwlvdXRiKGRldnByaXYtPmRvX211eF9iaXRzLCBkZXYtPmlvYmFzZSArIERBUzA4X0NPTlRST0wpOworCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKworCWRhdGFbMV0gPSB3Yml0czsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczA4anJfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSAwOworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMwOEpSX0RJTyk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMwOGpyX2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwkvLyBudWxsIGJpdHMgd2UgYXJlIGdvaW5nIHRvIHNldAorCWRldnByaXYtPmRvX2JpdHMgJj0gfmRhdGFbMF07CisJLy8gc2V0IG5ldyBiaXQgdmFsdWVzCisJZGV2cHJpdi0+ZG9fYml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlvdXRiKGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMDhKUl9ESU8pOworCisJZGF0YVsxXSA9IGRldnByaXYtPmRvX2JpdHM7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMwOGpyX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgbHNiLCBtc2I7CisJaW50IGNoYW47CisKKwlsc2IgPSBkYXRhWzBdICYgMHhmZjsKKwltc2IgPSAoZGF0YVswXSA+PiA4KSAmIDB4ZjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKyNpZiAwCisJCW91dGIobHNiLCBkZXYtPmlvYmFzZSArIGRldnByaXYtPmFvX29mZnNldF9sc2JbY2hhbl0pOworCQlvdXRiKG1zYiwgZGV2LT5pb2Jhc2UgKyBkZXZwcml2LT5hb19vZmZzZXRfbXNiW2NoYW5dKTsKKyNlbHNlCisJCW91dGIobHNiLCBkZXYtPmlvYmFzZSArIERBUzA4SlJfQU9fTFNCKGNoYW4pKTsKKwkJb3V0Yihtc2IsIGRldi0+aW9iYXNlICsgREFTMDhKUl9BT19NU0IoY2hhbikpOworI2VuZGlmCisKKwkJLyogbG9hZCBEQUNzICovCisJCWluYihkZXYtPmlvYmFzZSArIERBUzA4SlJfRElPKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqCisgKiBUaGUgLWFveCBib2FyZHMgaGF2ZSB0aGUgREFDcyBhdCBhIGRpZmZlcmVudCBvZmZzZXQgYW5kIHVzZQorICogYSBkaWZmZXJlbnQgbWV0aG9kIHRvIGZvcmNlIGFuIHVwZGF0ZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgZGFzMDhhb19hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGxzYiwgbXNiOworCWludCBjaGFuOworCisJbHNiID0gZGF0YVswXSAmIDB4ZmY7CisJbXNiID0gKGRhdGFbMF0gPj4gOCkgJiAweGY7CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisjaWYgMAorCQlvdXRiKGxzYiwgZGV2LT5pb2Jhc2UgKyBkZXZwcml2LT5hb19vZmZzZXRfbHNiW2NoYW5dKTsKKwkJb3V0Yihtc2IsIGRldi0+aW9iYXNlICsgZGV2cHJpdi0+YW9fb2Zmc2V0X21zYltjaGFuXSk7CisjZWxzZQorCQlvdXRiKGxzYiwgZGV2LT5pb2Jhc2UgKyBEQVMwOEFPX0FPX0xTQihjaGFuKSk7CisJCW91dGIobXNiLCBkZXYtPmlvYmFzZSArIERBUzA4QU9fQU9fTVNCKGNoYW4pKTsKKyNlbmRpZgorCisJCS8qIGxvYWQgREFDcyAqLworCQlpbmIoZGV2LT5pb2Jhc2UgKyBEQVMwOEFPX0FPX1VQREFURSk7CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTgyNTRfcmVhZF9jaGFubmVsX2xvdyh1bnNpZ25lZCBpbnQgYmFzZSwgaW50IGNoYW4pCit7CisJdW5zaWduZWQgaW50IG1zYiwgbHNiOworCisJLyogVGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgbXVzdCBiZSBpbiBvcmRlci4KKwkgICBXZSBtdXN0IGF2b2lkIG90aGVyIHByb2Nlc3MgcmVhZGluZyB0aGUgY291bnRlcidzIHZhbHVlIGluIHRoZQorCSAgIG1pZGRsZS4KKwkgICBUaGUgc3Bpbl9sb2NrIGlzbid0IG5lZWRlZCBzaW5jZSBpb2N0bCBjYWxscyBncmFiIHRoZSBiaWcga2VybmVsCisJICAgbG9jayBhdXRvbWF0aWNhbGx5ICovCisJLypzcGluX2xvY2soc3ApOyAqLworCW91dGIoY2hhbiA8PCA2LCBiYXNlICsgSTgyNTRfQ1RSTCk7CisJYmFzZSArPSBjaGFuOworCWxzYiA9IGluYihiYXNlKTsKKwltc2IgPSBpbmIoYmFzZSk7CisJLypzcGluX3VubG9jayhzcCk7ICovCisKKwlyZXR1cm4gbHNiIHwgKG1zYiA8PCA4KTsKK30KKworc3RhdGljIHZvaWQgaTgyNTRfd3JpdGVfY2hhbm5lbF9sb3codW5zaWduZWQgaW50IGJhc2UsIGludCBjaGFuLAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbXNiLCBsc2I7CisKKwlsc2IgPSB2YWx1ZSAmIDB4RkY7CisJbXNiID0gdmFsdWUgPj4gODsKKworCS8qIHdyaXRlIGxzYiwgdGhlbiBtc2IgKi8KKwliYXNlICs9IGNoYW47CisJLyogU2VlIGNvbW1lbnRzIGluIGk4MjU0X3JlYWRfY2hhbm5lbF9sb3cgKi8KKwkvKnNwaW5fbG9jayhzcCk7ICovCisJb3V0Yihsc2IsIGJhc2UpOworCW91dGIobXNiLCBiYXNlKTsKKwkvKnNwaW5fdW5sb2NrKHNwKTsgKi8KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpODI1NF9yZWFkX2NoYW5uZWwoc3RydWN0IGk4MjU0X3N0cnVjdCAqc3QsIGludCBjaGFubmVsKQoreworCWludCBjaGFuID0gc3QtPmxvZ2ljMnBoeXNbY2hhbm5lbF07CisKKwlyZXR1cm4gaTgyNTRfcmVhZF9jaGFubmVsX2xvdyhzdC0+aW9iYXNlLCBjaGFuKTsKK30KKworc3RhdGljIHZvaWQgaTgyNTRfd3JpdGVfY2hhbm5lbChzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCwgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCWludCBjaGFuID0gc3QtPmxvZ2ljMnBoeXNbY2hhbm5lbF07CisKKwlpODI1NF93cml0ZV9jaGFubmVsX2xvdyhzdC0+aW9iYXNlLCBjaGFuLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGk4MjU0X2luaXRpYWxpemUoc3RydWN0IGk4MjU0X3N0cnVjdCAqc3QpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDM7ICsraSkKKwkJaTgyNTRfc2V0X21vZGVfbG93KHN0LT5pb2Jhc2UsIGksIHN0LT5tb2RlW2ldKTsKK30KKworc3RhdGljIHZvaWQgaTgyNTRfc2V0X21vZGVfbG93KHVuc2lnbmVkIGludCBiYXNlLCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlvdXRiKChjaGFubmVsIDw8IDYpIHwgMHgzMCB8IChtb2RlICYgMHgwRiksIGJhc2UgKyBJODI1NF9DVFJMKTsKK30KKworc3RhdGljIHZvaWQgaTgyNTRfc2V0X21vZGUoc3RydWN0IGk4MjU0X3N0cnVjdCAqc3QsIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCBtb2RlKQoreworCWludCBjaGFuID0gc3QtPmxvZ2ljMnBoeXNbY2hhbm5lbF07CisKKwlzdC0+bW9kZVtjaGFuXSA9IG1vZGU7CisJcmV0dXJuIGk4MjU0X3NldF9tb2RlX2xvdyhzdC0+aW9iYXNlLCBjaGFuLCBtb2RlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpODI1NF9yZWFkX3N0YXR1c19sb3codW5zaWduZWQgaW50IGJhc2UsIGludCBjaGFubmVsKQoreworCW91dGIoMHhFMCB8ICgyIDw8IGNoYW5uZWwpLCBiYXNlICsgSTgyNTRfQ1RSTCk7CisJcmV0dXJuIGluYihiYXNlICsgY2hhbm5lbCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTgyNTRfcmVhZF9zdGF0dXMoc3RydWN0IGk4MjU0X3N0cnVjdCAqc3QsIGludCBjaGFubmVsKQoreworCWludCBjaGFuID0gc3QtPmxvZ2ljMnBoeXNbY2hhbm5lbF07CisKKwlyZXR1cm4gaTgyNTRfcmVhZF9zdGF0dXNfbG93KHN0LT5pb2Jhc2UsIGNoYW4pOworfQorCitzdGF0aWMgaW50IGRhczA4X2NvdW50ZXJfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBpbnNuLT5jaGFuc3BlYzsKKworCS8vcHJpbnRrKCJSZWFkaW5nIGNvdW50ZXIgY2hhbm5lbCAlZCAiLGNoYW4pOworCWRhdGFbMF0gPSBpODI1NF9yZWFkX2NoYW5uZWwoJmRldnByaXYtPmk4MjU0LCBjaGFuKTsKKwkvL3ByaW50aygiPT4gMHglMDhYXG4iLGRhdGFbMF0pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfY291bnRlcl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBpbnNuLT5jaGFuc3BlYzsKKworCS8vcHJpbnRrKCJXcml0aW5nIGNvdW50ZXIgY2hhbm5lbCAlZCB3aXRoIDB4JTA0WFxuIixjaGFuLGRhdGFbMF0pOworCWk4MjU0X3dyaXRlX2NoYW5uZWwoJmRldnByaXYtPmk4MjU0LCBjaGFuLCBkYXRhWzBdKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRhczA4X2NvdW50ZXJfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IGluc24tPmNoYW5zcGVjOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX1NFVF9DT1VOVEVSX01PREU6CisJCWk4MjU0X3NldF9tb2RlKCZkZXZwcml2LT5pODI1NCwgY2hhbiwgZGF0YVsxXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfODI1NF9SRUFEX1NUQVRVUzoKKwkJZGF0YVsxXSA9IGk4MjU0X3JlYWRfc3RhdHVzKCZkZXZwcml2LT5pODI1NCwgY2hhbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXMwOCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiBEUlZfTkFNRSwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkYXMwOF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFzMDhfY29tbW9uX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmRhczA4X2JvYXJkc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOnNpemVvZihkYXMwOF9ib2FyZHMpIC8KKwkJc2l6ZW9mKHN0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QpLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZGFzMDhfYm9hcmRfc3RydWN0KSwKK307CisKK2ludCBkYXMwOF9jb21tb25fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIGlvYmFzZSkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0OworCisJLy8gYWxsb2NhdGUgaW9wb3J0cyBmb3Igbm9uLXBjbWNpYSwgbm9uLXBjaSBib2FyZHMKKwlpZiAoKHRoaXNib2FyZC0+YnVzdHlwZSAhPSBwY21jaWEpICYmICh0aGlzYm9hcmQtPmJ1c3R5cGUgIT0gcGNpKSkgeworCQlwcmludGsoIiBpb2Jhc2UgMHglbHhcbiIsIGlvYmFzZSk7CisJCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCB0aGlzYm9hcmQtPmlvc2l6ZSwgRFJWX05BTUUpKSB7CisJCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDYpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhaSAqLworCWlmICh0aGlzYm9hcmQtPmFpKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJLyogWFhYIHNvbWUgYm9hcmRzIGFjdHVhbGx5IGhhdmUgZGlmZmVyZW50aWFsIGlucHV0cyBpbnN0ZWFkIG9mIHNpbmdsZSBlbmRlZC4KKwkJICogIFRoZSBkcml2ZXIgZG9lcyBub3RoaW5nIHdpdGggYXJlZnMgdGhvdWdoLCBzbyBpdCdzIG5vIGJpZyBkZWFsLiAqLworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworCQlzLT5uX2NoYW4gPSA4OworCQlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9uYml0cykgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9IGRhczA4X2FpX2xyYW5nZXNbdGhpc2JvYXJkLT5haV9wZ107CisJCXMtPmluc25fcmVhZCA9IHRoaXNib2FyZC0+YWk7CisJCWRldnByaXYtPnBnX2dhaW5saXN0ID0gZGFzMDhfZ2Fpbmxpc3RzW3RoaXNib2FyZC0+YWlfcGddOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW8gKi8KKwlpZiAodGhpc2JvYXJkLT5hbykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisvLyBYWFggbGFja3MgcmVhZC1iYWNrIGluc24KKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSAyOworCQlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5hb19uYml0cykgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyNTsKKwkJcy0+aW5zbl93cml0ZSA9IHRoaXNib2FyZC0+YW87CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkaSAqLworCWlmICh0aGlzYm9hcmQtPmRpKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSAodGhpc2JvYXJkLT5kaSA9PSBkYXMwOF9kaV9yYml0cykgPyAzIDogODsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHRoaXNib2FyZC0+ZGk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiBkbyAqLworCWlmICh0aGlzYm9hcmQtPmRvXykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5kb19uY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHRoaXNib2FyZC0+ZG9fOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJLyogODI1NSAqLworCWlmICh0aGlzYm9hcmQtPmk4MjU1X29mZnNldCAhPSAwKSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCAodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKworCQkJCXRoaXNib2FyZC0+aTgyNTVfb2Zmc2V0KSk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNTsKKwkvKiA4MjU0ICovCisJaWYgKHRoaXNib2FyZC0+aTgyNTRfb2Zmc2V0ICE9IDApIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gMzsKKwkJcy0+bWF4ZGF0YSA9IDB4RkZGRjsKKwkJcy0+aW5zbl9yZWFkID0gZGFzMDhfY291bnRlcl9yZWFkOworCQlzLT5pbnNuX3dyaXRlID0gZGFzMDhfY291bnRlcl93cml0ZTsKKwkJcy0+aW5zbl9jb25maWcgPSBkYXMwOF9jb3VudGVyX2NvbmZpZzsKKwkJLyogU2V0LXVwIHRoZSA4MjU0IHN0cnVjdHVyZSAqLworCQlkZXZwcml2LT5pODI1NC5jaGFubmVscyA9IDM7CisJCWRldnByaXYtPmk4MjU0LmxvZ2ljMnBoeXNbMF0gPSAwOworCQlkZXZwcml2LT5pODI1NC5sb2dpYzJwaHlzWzFdID0gMTsKKwkJZGV2cHJpdi0+aTgyNTQubG9naWMycGh5c1syXSA9IDI7CisJCWRldnByaXYtPmk4MjU0LmlvYmFzZSA9IGlvYmFzZSArIHRoaXNib2FyZC0+aTgyNTRfb2Zmc2V0OworCQlkZXZwcml2LT5pODI1NC5tb2RlWzBdID0KKwkJCWRldnByaXYtPmk4MjU0Lm1vZGVbMV0gPQorCQkJZGV2cHJpdi0+aTgyNTQubW9kZVsyXSA9IEk4MjU0X01PREUwIHwgSTgyNTRfQklOQVJZOworCQlpODI1NF9pbml0aWFsaXplKCZkZXZwcml2LT5pODI1NCk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMwOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCXVuc2lnbmVkIGxvbmcgcGNpX2lvYmFzZSA9IDA7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisjZW5kaWYKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzMDhfcHJpdmF0ZV9zdHJ1Y3QpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcHJpbnRrKCJjb21lZGklZDogZGFzMDg6ICIsIGRldi0+bWlub3IpOworCS8vIGRlYWwgd2l0aCBhIHBjaSBib2FyZAorCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNpKSB7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQlwcmludGsoImJ1cyAlaSBzbG90ICVpICIsCisJCQkJaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJCS8vIGZpbmQgY2FyZAorCQlmb3IgKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJCXBkZXYgIT0gTlVMTDsKKwkJCXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZGV2KSkgeworCQkJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTCisJCQkJJiYgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJREFTMDgpIHsKKwkJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJaWYgKHBkZXYtPmJ1cy0+bnVtYmVyID09IGl0LT5vcHRpb25zWzBdCisJCQkJCQkmJiBQQ0lfU0xPVChwZGV2LT5kZXZmbikgPT0KKwkJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoIXBkZXYpIHsKKwkJCXByaW50aygiTm8gcGNpIGRhczA4IGNhcmRzIGZvdW5kXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWRldnByaXYtPnBkZXYgPSBwZGV2OworCQkvLyBlbmFibGUgUENJIGRldmljZSBhbmQgcmVzZXJ2ZSBJL08gc3BhY2VzCisJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwZGV2LCBEUlZfTkFNRSkpIHsKKwkJCXByaW50aygiIEVycm9yIGVuYWJsaW5nIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3RpbmcgcmVnaW9uc1xuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQkvLyByZWFkIGJhc2UgYWRkcmVzc2VzCisJCXBjaV9pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJCWlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwkJcHJpbnRrKCJwY2liYXNlIDB4JWx4ICBpb2Jhc2UgMHglbHhcbiIsIHBjaV9pb2Jhc2UsIGlvYmFzZSk7CisJCWRldnByaXYtPnBjaV9pb2Jhc2UgPSBwY2lfaW9iYXNlOworI2lmIDAKKy8qIFdlIGNvdWxkIGVuYWJsZSB0byBwY2ktZGFzMDgncyBpbnRlcnJ1cHQgaGVyZSB0byBtYWtlIGl0IHBvc3NpYmxlCisgKiB0byBkbyB0aW1lZCBpbnB1dCBpbiB0aGlzIGRyaXZlciwgYnV0IHRoZXJlIGlzIGxpdHRsZSBwb2ludCBzaW5jZQorICogY29udmVyc2lvbnMgd291bGQgaGF2ZSB0byBiZSBzdGFydGVkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorICogc28geW91IG1pZ2h0IGFzIHdlbGwgdXNlIGNvbWVkaV9ydF90aW1lciB0byBlbXVsYXRlIGNvbW1hbmRzCisgKi8KKwkJLyogc2V0IHNvdXJjZSBvZiBpbnRlcnJ1cHQgdHJpZ2dlciB0byBjb3VudGVyMiBvdXRwdXQgKi8KKwkJb3V0YihDTlRSTF9JTlRSIHwgQ05UUkxfRElSLCBwY2lfaW9iYXNlICsgQ05UUkwpOworCQkvKiBFbmFibGUgbG9jYWwgaW50ZXJydXB0IDEgYW5kIHBjaSBpbnRlcnJ1cHQgKi8KKwkJb3V0dyhJTlRSMV9FTkFCTEUgfCBQQ0lfSU5UUl9FTkFCTEUsIHBjaV9pb2Jhc2UgKyBJTlRDU1IpOworI2VuZGlmCisjZWxzZQkvKiBDT05GSUdfQ09NRURJX1BDSSAqLworCQlwcmludGsoInRoaXMgZHJpdmVyIGhhcyBub3QgYmVlbiBidWlsdCB3aXRoIFBDSSBzdXBwb3J0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCS8qIENPTkZJR19DT01FRElfUENJICovCisJfSBlbHNlIHsKKwkJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJfQorCXByaW50aygiXG4iKTsKKworCXJldHVybiBkYXMwOF9jb21tb25fYXR0YWNoKGRldiwgaW9iYXNlKTsKK30KKworaW50IGRhczA4X2NvbW1vbl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IGRhczA4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDQpOworCisJLy8gZGVhbGxvY2F0ZSBpb3BvcnRzIGZvciBub24tcGNtY2lhLCBub24tcGNpIGJvYXJkcworCWlmICgodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjbWNpYSkgJiYgKHRoaXNib2FyZC0+YnVzdHlwZSAhPSBwY2kpKSB7CisJCWlmIChkZXYtPmlvYmFzZSkKKwkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzYm9hcmQtPmlvc2l6ZSk7CisJfQorCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGRldikgeworCQkJaWYgKGRldnByaXYtPnBjaV9pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGRldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wZGV2KTsKKwkJfQorCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzMDgsIGRhczA4X3BjaV90YWJsZSk7CisjZWxzZQorQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMwOCk7CisjZW5kaWYKKworRVhQT1JUX1NZTUJPTF9HUEwoZGFzMDhfY29tbW9uX2F0dGFjaCk7CitFWFBPUlRfU1lNQk9MX0dQTChkYXMwOF9jb21tb25fZGV0YWNoKTsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDTUNJQQorRVhQT1JUX1NZTUJPTF9HUEwoZGFzMDhfY3NfYm9hcmRzKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTA4OWNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAgICBkYXMwOC5oCisKKyAgICBIZWFkZXIgZm9yIGRhczA4LmMgYW5kIGRhczA4X2NzLmMKKworICAgIENvcHlyaWdodCAoQykgMjAwMyBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2lmbmRlZiBfREFTMDhfSAorI2RlZmluZSBfREFTMDhfSAorCitlbnVtIGRhczA4X2J1c3R5cGUgeyBpc2EsIHBjaSwgcGNtY2lhLCBwYzEwNCB9OworLy8gZGlmZmVyZW50IHdheXMgYWkgZGF0YSBpcyBlbmNvZGVkIGluIGZpcnN0IHR3byByZWdpc3RlcnMKK2VudW0gZGFzMDhfYWlfZW5jb2RpbmcgeyBkYXMwOF9lbmNvZGUxMiwgZGFzMDhfZW5jb2RlMTYsIGRhczA4X3BjbV9lbmNvZGUxMiB9OworZW51bSBkYXMwOF9scmFuZ2UgeyBkYXMwOF9wZ19ub25lLCBkYXMwOF9iaXBvbGFyNSwgZGFzMDhfcGdoLCBkYXMwOF9wZ2wsCisJCWRhczA4X3BnbSB9OworCitzdHJ1Y3QgZGFzMDhfYm9hcmRfc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBpZDsJLy8gaWQgZm9yIHBjaS9wY21jaWEgYm9hcmRzCisJZW51bSBkYXMwOF9idXN0eXBlIGJ1c3R5cGU7CisJdm9pZCAqYWk7CisJdW5zaWduZWQgaW50IGFpX25iaXRzOworCWVudW0gZGFzMDhfbHJhbmdlIGFpX3BnOworCWVudW0gZGFzMDhfYWlfZW5jb2RpbmcgYWlfZW5jb2Rpbmc7CisJdm9pZCAqYW87CisJdW5zaWduZWQgaW50IGFvX25iaXRzOworCXZvaWQgKmRpOworCXZvaWQgKmRvXzsKKwl1bnNpZ25lZCBpbnQgZG9fbmNoYW47CisJdW5zaWduZWQgaW50IGk4MjU1X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgaTgyNTRfb2Zmc2V0OworCXVuc2lnbmVkIGludCBpb3NpemU7CS8vIG51bWJlciBvZiBpb3BvcnRzIHVzZWQKK307CisKK3N0cnVjdCBpODI1NF9zdHJ1Y3QgeworCWludCBjaGFubmVsczsJCS8vIGF2YWlsYWJsZSBjaGFubmVscy4gU29tZSBjb3VsZCBiZSB1c2VkIGludGVybmFsbHkuCisJaW50IGxvZ2ljMnBoeXNbM107CS8vIHRvIGtub3cgd2hpY2ggcGh5c2ljYWwgY2hhbm5lbCBpcy4KKwlpbnQgbW9kZVszXTsJCS8vIHRoZSBpbmRleCBpcyB0aGUgcmVhbCBjb3VudGVyLgorCXVuc2lnbmVkIGludCBpb2Jhc2U7Cit9OworCisjZGVmaW5lIEk4MjU0X0NOVDAgMAorI2RlZmluZSBJODI1NF9DTlQxIDEKKyNkZWZpbmUgSTgyNTRfQ05UMiAyCisjZGVmaW5lIEk4MjU0X0NUUkwgMworCitzdHJ1Y3QgZGFzMDhfcHJpdmF0ZV9zdHJ1Y3QgeworCXVuc2lnbmVkIGludCBkb19tdXhfYml0czsJLy8gYml0cyBmb3IgZG8vbXV4IHJlZ2lzdGVyIG9uIGJvYXJkcyB3aXRob3V0IHNlcGVyYXRlIGRvIHJlZ2lzdGVyCisJdW5zaWduZWQgaW50IGRvX2JpdHM7CS8vIGJpdHMgZm9yIGRvIHJlZ2lzdGVyIG9uIGJvYXJkcyB3aXRoIHJlZ2lzdGVyIGRlZGljYXRlZCB0byBkaWdpdGFsIG91dCBvbmx5CisJY29uc3QgdW5zaWduZWQgaW50ICpwZ19nYWlubGlzdDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsJLy8gc3RydWN0IGZvciBwY2ktZGFzMDgKKwl1bnNpZ25lZCBpbnQgcGNpX2lvYmFzZTsJLy8gYWRkaXRpb25hbCBiYXNlIGFkZHJlc3MgZm9yIHBjaS1kYXMwOAorCXN0cnVjdCBpODI1NF9zdHJ1Y3QgaTgyNTQ7Cit9OworCisjZGVmaW5lIE5VTV9EQVMwOF9DU19CT0FSRFMgMgorZXh0ZXJuIHN0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QgZGFzMDhfY3NfYm9hcmRzW05VTV9EQVMwOF9DU19CT0FSRFNdOworCitpbnQgZGFzMDhfY29tbW9uX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgbG9uZyBpb2Jhc2UpOworaW50IGRhczA4X2NvbW1vbl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCisjZW5kaWYgLyogX0RBUzA4X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOF9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2Yzg4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOF9jcy5jCkBAIC0wLDAgKzEsNDg4IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKKyAgICBEQVMwOCBkcml2ZXIKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIsMjAwMyBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKi8KKy8qCitEcml2ZXI6IGRhczA4X2NzCitEZXNjcmlwdGlvbjogREFTLTA4IFBDTUNJQSBib2FyZHMKK0F1dGhvcjogV2FycmVuIEphc3BlciwgZHMsIEZyYW5rIEhlc3MKK0RldmljZXM6IFtDb21wdXRlckJvYXJkc10gUENNLURBUzA4IChwY20tZGFzMDgpCitTdGF0dXM6IHdvcmtzCisKK1RoaXMgaXMgdGhlIFBDTUNJQS1zcGVjaWZpYyBzdXBwb3J0IHNwbGl0IG9mZiBmcm9tIHRoZQorZGFzMDggZHJpdmVyLgorCitPcHRpb25zIChmb3IgcGNtLWRhczA4KToKKyAgICAgICAgTk9ORQorCitDb21tYW5kIHN1cHBvcnQgZG9lcyBub3QgZXhpc3QsIGJ1dCBjb3VsZCBiZSBhZGRlZCBmb3IgdGhpcyBib2FyZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJkYXMwOC5oIgorCisvLyBwY21jaWEgaW5jbHVkZXMKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqY3VyX2RldiA9IE5VTEw7CisKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgaW50IGRhczA4X2NzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzMDhfY3MgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFzMDhfY3MiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczA4X2NzX2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXMwOF9jb21tb25fZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomZGFzMDhfY3NfYm9hcmRzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRhczA4X2NzX2JvYXJkcykgLworCQlzaXplb2Yoc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCksCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QpLAorfTsKKworc3RhdGljIGludCBkYXMwOF9jc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGN1cl9kZXY7CS8vIFhYWCBoYWNrCisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczA4X3ByaXZhdGVfc3RydWN0KSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50aygiY29tZWRpJWQ6IGRhczA4X2NzOiAiLCBkZXYtPm1pbm9yKTsKKwkvLyBkZWFsIHdpdGggYSBwY2kgYm9hcmQKKworCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNtY2lhKSB7CisJCWlmIChsaW5rID09IE5VTEwpIHsKKwkJCXByaW50aygiIG5vIHBjbWNpYSBjYXJkcyBmb3VuZFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgYnVnISBib2FyZCBkb2VzIG5vdCBoYXZlIFBDTUNJQSBidXN0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIGRhczA4X2NvbW1vbl9hdHRhY2goZGV2LCBpb2Jhc2UpOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoZSBmb2xsb3dpbmcgcGNtY2lhIGNvZGUgZm9yIHRoZSBwY20tZGFzMDggaXMgYWRhcHRlZCBmcm9tIHRoZQorICAgIGR1bW15X2NzLmMgZHJpdmVyIG9mIHRoZSBMaW51eCBQQ01DSUEgQ2FyZCBTZXJ2aWNlcyBwYWNrYWdlLgorCisgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgorICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKKyAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAorICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCisgICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCisqLworCisjaWZkZWYgUENNQ0lBX0RFQlVHCitzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOworbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQorc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPQorCSJkYXMwOC5jIHBjbWNpYSBjb2RlIChGcmFuayBIZXNzKSwgbW9kaWZpZWQgZnJvbSBkdW1teV9jcy5jIDEuMzEgMjAwMS8wOC8yNCAxMjoxMzoxMyAoRGF2aWQgSGluZHMpIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgZGFzMDhfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK3N0YXRpYyBpbnQgZGFzMDhfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworCisvKgorICAgVGhlIGF0dGFjaCgpIGFuZCBkZXRhY2goKSBlbnRyeSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGFuZCBkZXN0cm95CisgICAiaW5zdGFuY2VzIiBvZiB0aGUgZHJpdmVyLCB3aGVyZSBlYWNoIGluc3RhbmNlIHJlcHJlc2VudHMgZXZlcnl0aGluZworICAgbmVlZGVkIHRvIG1hbmFnZSBvbmUgYWN0dWFsIFBDTUNJQSBjYXJkLgorKi8KKworc3RhdGljIGludCBkYXMwOF9wY21jaWFfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIHZvaWQgZGFzMDhfcGNtY2lhX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKKworLyoKKyAgIFlvdSdsbCBhbHNvIG5lZWQgdG8gcHJvdG90eXBlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBhY3R1YWxseQorICAgYmUgdXNlZCB0byB0YWxrIHRvIHlvdXIgZGV2aWNlLiAgU2VlICdtZW1vcnlfY3MnIGZvciBhIGdvb2QgZXhhbXBsZQorICAgb2YgYSBmdWxseSBzZWxmLXN1ZmZpY2llbnQgZHJpdmVyOyB0aGUgb3RoZXIgZHJpdmVycyByZWx5IG1vcmUgb3IKKyAgIGxlc3Mgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KKyovCisKKy8qCisgICBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCisgICBkZXZpY2UgZHJpdmVyIHdpdGggYXBwcm9wcmlhdGUgY2FyZHMsIHRocm91Z2ggdGhlIGNhcmQgY29uZmlndXJhdGlvbgorICAgZGF0YWJhc2UuCisqLworCitzdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJwY20tZGFzMDgiOworCitzdHJ1Y3QgbG9jYWxfaW5mb190IHsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlkZXZfbm9kZV90IG5vZGU7CisJaW50IHN0b3A7CisJc3RydWN0IGJ1c19vcGVyYXRpb25zICpidXM7Cit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGRhczA4X3BjbWNpYV9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZworICAgIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KKworICAgIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorICAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCisgICAgY2FyZCBpbnNlcnRpb24gZXZlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRhczA4X3BjbWNpYV9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWw7CisKKwlERUJVRygwLCAiZGFzMDhfcGNtY2lhX2F0dGFjaCgpXG4iKTsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCisJbG9jYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbG9jYWwtPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSBsb2NhbDsKKworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CisKKwkvKgorCSAgIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCisJICAgY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yIGFsbW9zdAorCSAgIGV2ZXJ5dGhpbmcuICBJbiBtb3N0IGNsaWVudHMsIG1hbnkgZGV0YWlscyAoaS5lLiwgbnVtYmVyLCBzaXplcywKKwkgICBhbmQgYXR0cmlidXRlcyBvZiBJTyB3aW5kb3dzKSBhcmUgZml4ZWQgYnkgdGhlIG5hdHVyZSBvZiB0aGUKKwkgICBkZXZpY2UsIGFuZCBjYW4gYmUgaGFyZC13aXJlZCBoZXJlLgorCSAqLworCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CisJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisKKwljdXJfZGV2ID0gbGluazsKKworCWRhczA4X3BjbWNpYV9jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGFzMDhfcGNtY2lhX2F0dGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoaXMgZGVsZXRlcyBhIGRyaXZlciAiaW5zdGFuY2UiLiAgVGhlIGRldmljZSBpcyBkZS1yZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCisgICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKKyAgICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCisJREVCVUcoMCwgImRhczA4X3BjbWNpYV9kZXRhY2goMHglcClcbiIsIGxpbmspOworCisJaWYgKGxpbmstPmRldl9ub2RlKSB7CisJCSgoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBsaW5rLT5wcml2KS0+c3RvcCA9IDE7CisJCWRhczA4X3BjbWNpYV9yZWxlYXNlKGxpbmspOworCX0KKworCS8qIFRoaXMgcG9pbnRzIHRvIHRoZSBwYXJlbnQgc3RydWN0IGxvY2FsX2luZm9fdCBzdHJ1Y3QgKi8KKwlpZiAobGluay0+cHJpdikKKwkJa2ZyZWUobGluay0+cHJpdik7CisKK30JCQkJLyogZGFzMDhfcGNtY2lhX2RldGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGRhczA4X3BjbWNpYV9jb25maWcoKSBpcyBzY2hlZHVsZWQgdG8gcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQKKyAgICBpcyByZWNlaXZlZCwgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0LCBhbmQgdG8gbWFrZSB0aGUKKyAgICBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwl1X2NoYXIgYnVmWzY0XTsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKworCURFQlVHKDAsICJkYXMwOF9wY21jaWFfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKworCS8qCisJICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCisJICAgcmVnaXN0ZXJzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwlsYXN0X2ZuID0gR2V0Rmlyc3RUdXBsZTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKwlsYXN0X2ZuID0gR2V0VHVwbGVEYXRhOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJbGFzdF9mbiA9IFBhcnNlVHVwbGU7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworCS8qCisJICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKwkgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCisJICAgdm9sdGFnZSwgSU8gd2luZG93LCBtZW1vcnkgd2luZG93LCBhbmQgaW50ZXJydXB0IHNldHRpbmdzLgorCisJICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKwkgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAorCSAgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQorCSAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKwkgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCisJICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCWxhc3RfZm4gPSBHZXRGaXJzdFR1cGxlOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkgIT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpICE9IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJZGZsdCA9ICpjZmc7CisJCWlmIChjZmctPmluZGV4ID09IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworCisJCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworLyoJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwl9CisqLworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQorCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKworCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJICAgICAgbmV4dF9lbnRyeToKKwkJbGFzdF9mbiA9IEdldE5leHRUdXBsZTsKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQkJZ290byBjc19mYWlsZWQ7CisJfQorCisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgeworCQlsYXN0X2ZuID0gUmVxdWVzdElSUTsKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkgIT0gMCkKKwkJCWdvdG8gY3NfZmFpbGVkOworCX0KKworCS8qCisJICAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCisJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KKwkgKi8KKwlsYXN0X2ZuID0gUmVxdWVzdENvbmZpZ3VyYXRpb247CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKworCS8qCisJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKKwkgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICovCisJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJwY20tZGFzMDgiKTsKKwlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4IiwKKwkJZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICV1IiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCXByaW50aygiXG4iKTsKKworCXJldHVybjsKKworICAgICAgY3NfZmFpbGVkOgorCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwlkYXMwOF9wY21jaWFfcmVsZWFzZShsaW5rKTsKKworfQkJCQkvKiBkYXMwOF9wY21jaWFfY29uZmlnICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgQWZ0ZXIgYSBjYXJkIGlzIHJlbW92ZWQsIGRhczA4X3BjbWNpYV9yZWxlYXNlKCkgd2lsbCB1bnJlZ2lzdGVyIHRoZQorICAgIGRldmljZSwgYW5kIHJlbGVhc2UgdGhlIFBDTUNJQSBjb25maWd1cmF0aW9uLiAgSWYgdGhlIGRldmljZSBpcworICAgIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGFzMDhfcGNtY2lhX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJREVCVUcoMCwgImRhczA4X3BjbWNpYV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CQkJCS8qIGRhczA4X3BjbWNpYV9yZWxlYXNlICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGNhcmQgc3RhdHVzIGV2ZW50IGhhbmRsZXIuICBNb3N0bHksIHRoaXMgc2NoZWR1bGVzIG90aGVyCisgICAgc3R1ZmYgdG8gcnVuIGFmdGVyIGFuIGV2ZW50IGlzIHJlY2VpdmVkLgorCisgICAgV2hlbiBhIENBUkRfUkVNT1ZBTCBldmVudCBpcyByZWNlaXZlZCwgd2UgaW1tZWRpYXRlbHkgc2V0IGEKKyAgICBwcml2YXRlIGZsYWcgdG8gYmxvY2sgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZGV2aWNlLiAgQWxsIHRoZQorICAgIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGFjY2VzcyB0aGUgZGV2aWNlIHNob3VsZCBjaGVjayB0aGlzIGZsYWcKKyAgICB0byBtYWtlIHN1cmUgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGFzMDhfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLworCWxvY2FsLT5zdG9wID0gMTsKKworCXJldHVybiAwOworfQkJCQkvKiBkYXMwOF9wY21jaWFfc3VzcGVuZCAqLworCitzdGF0aWMgaW50IGRhczA4X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJbG9jYWwtPnN0b3AgPSAwOworCXJldHVybiAwOworfQkJCQkvKiBkYXMwOF9wY21jaWFfcmVzdW1lICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgZGFzMDhfY3NfaWRfdGFibGVbXSA9IHsKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxYzUsIDB4NDAwMSksCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgZGFzMDhfY3NfaWRfdGFibGUpOworCitzdHJ1Y3QgcGNtY2lhX2RyaXZlciBkYXMwOF9jc19kcml2ZXIgPSB7CisJLnByb2JlID0gZGFzMDhfcGNtY2lhX2F0dGFjaCwKKwkucmVtb3ZlID0gZGFzMDhfcGNtY2lhX2RldGFjaCwKKwkuc3VzcGVuZCA9IGRhczA4X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBkYXMwOF9wY21jaWFfcmVzdW1lLAorCS5pZF90YWJsZSA9IGRhczA4X2NzX2lkX3RhYmxlLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCQkubmFtZSA9IGRldl9pbmZvLAorCQl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9kYXMwOF9wY21jaWFfY3Modm9pZCkKK3sKKwlERUJVRygwLCAiJXNcbiIsIHZlcnNpb24pOworCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmRhczA4X2NzX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2RhczA4X3BjbWNpYV9jcyh2b2lkKQoreworCURFQlVHKDAsICJkYXMwOF9wY21jaWFfY3M6IHVubG9hZGluZ1xuIik7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZkYXMwOF9jc19kcml2ZXIpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkYXMwOF9jc19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2RhczA4X3BjbWNpYV9jcygpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXMwOF9jcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYXMwOF9jc19leGl0X21vZHVsZSh2b2lkKQoreworCWV4aXRfZGFzMDhfcGNtY2lhX2NzKCk7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGFzMDhfY3MpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfaW5pdChkYXMwOF9jc19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkYXMwOF9jc19leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNmIwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTYuYwpAQCAtMCwwICsxLDE3MzAgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZGFzMTYuYworICAgIERBUzE2IGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgQ2hyaXMgUi4gQmF1Z2hlciA8YmF1Z2hlckBlbnRlcmFjdC5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGRhczE2CitEZXNjcmlwdGlvbjogREFTMTYgY29tcGF0aWJsZSBib2FyZHMKK0F1dGhvcjogU2FtIE1vb3JlLCBXYXJyZW4gSmFzcGVyLCBkcywgQ2hyaXMgQmF1Z2hlciwgRnJhbmsgSGVzcywgUm9tYW4gRmlldHplCitEZXZpY2VzOiBbS2VpdGhsZXkgTWV0cmFieXRlXSBEQVMtMTYgKGRhcy0xNiksIERBUy0xNkcgKGRhcy0xNmcpLAorICBEQVMtMTZGIChkYXMtMTZmKSwgREFTLTEyMDEgKGRhcy0xMjAxKSwgREFTLTEyMDIgKGRhcy0xMjAyKSwKKyAgREFTLTE0MDEgKGRhcy0xNDAxKSwgREFTLTE0MDIgKGRhcy0xNDAyKSwgREFTLTE2MDEgKGRhcy0xNjAxKSwKKyAgREFTLTE2MDIgKGRhcy0xNjAyKSwKKyAgW0NvbXB1dGVyQm9hcmRzXSBQQzEwNC1EQVMxNi9KUiAocGMxMDQtZGFzMTZqciksCisgIFBDMTA0LURBUzE2SlIvMTYgKHBjMTA0LWRhczE2anIvMTYpLAorICBDSU8tREFTMTZKUi8xNiAoY2lvLWRhczE2anIvMTYpLAorICBDSU8tREFTMTYvSlIgKGNpby1kYXMxNi9qciksIENJTy1EQVMxNDAxLzEyIChjaW8tZGFzMTQwMS8xMiksCisgIENJTy1EQVMxNDAyLzEyIChjaW8tZGFzMTQwMi8xMiksIENJTy1EQVMxNDAyLzE2IChjaW8tZGFzMTQwMi8xNiksCisgIENJTy1EQVMxNjAxLzEyIChjaW8tZGFzMTYwMS8xMiksIENJTy1EQVMxNjAyLzEyIChjaW8tZGFzMTYwMi8xMiksCisgIENJTy1EQVMxNjAyLzE2IChjaW8tZGFzMTYwMi8xNiksIENJTy1EQVMxNi8zMzAgKGNpby1kYXMxNi8zMzApCitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiAyMDAzLTEwLTEyCisKK0EgcmV3cml0ZSBvZiB0aGUgZGFzMTYgYW5kIGRhczE2MDAgZHJpdmVycy4KK09wdGlvbnM6CisJWzBdIC0gYmFzZSBpbyBhZGRyZXNzCisJWzFdIC0gaXJxIChkb2VzIG5vdGhpbmcsIGlycSBpcyBub3QgdXNlZCBhbnltb3JlKQorCVsyXSAtIGRtYSAob3B0aW9uYWwsIHJlcXVpcmVkIGZvciBjb21lZGlfY29tbWFuZCBzdXBwb3J0KQorCVszXSAtIG1hc3RlciBjbG9jayBzcGVlZCBpbiBNSHogKG9wdGlvbmFsLCAxIG9yIDEwLCBpZ25vcmVkIGlmCisJCWJvYXJkIGNhbiBwcm9iZSBjbG9jaywgZGVmYXVsdHMgdG8gMSkKKwlbNF0gLSBhbmFsb2cgaW5wdXQgcmFuZ2UgbG93ZXN0IHZvbHRhZ2UgaW4gbWljcm92b2x0cyAob3B0aW9uYWwsCisJCW9ubHkgdXNlZnVsIGlmIHlvdXIgYm9hcmQgZG9lcyBub3QgaGF2ZSBzb2Z0d2FyZQorCQlwcm9ncmFtbWFibGUgZ2FpbikKKwlbNV0gLSBhbmFsb2cgaW5wdXQgcmFuZ2UgaGlnaGVzdCB2b2x0YWdlIGluIG1pY3Jvdm9sdHMgKG9wdGlvbmFsLAorCQlvbmx5IHVzZWZ1bCBpZiBib2FyZCBkb2VzIG5vdCBoYXZlIHNvZnR3YXJlIHByb2dyYW1tYWJsZQorCQlnYWluKQorCVs2XSAtIGFuYWxvZyBvdXRwdXQgcmFuZ2UgbG93ZXN0IHZvbHRhZ2UgaW4gbWljcm92b2x0cyAob3B0aW9uYWwpCisJWzddIC0gYW5hbG9nIG91dHB1dCByYW5nZSBoaWdoZXN0IHZvbHRhZ2UgaW4gbWljcm92b2x0cyAob3B0aW9uYWwpCisJWzhdIC0gdXNlIHRpbWVyIG1vZGUgZm9yIERNQS4gIFRpbWVyIG1vZGUgaXMgbmVlZGVkIGUuZy4gZm9yCisJCWJ1Z2d5IERNQSBjb250cm9sbGVycyBpbiBOUyBDUzU1MzBBIChHZW9kZSBDb21wYW5pb24pLCBhbmQgZm9yCisJCSdqcicgY2FyZHMgdGhhdCBsYWNrIGEgaGFyZHdhcmUgZmlmby4gIFRoaXMgb3B0aW9uIGlzIG5vCisJCWxvbmdlciBuZWVkZWQsIHNpbmNlIHRpbWVyIG1vZGUgaXMgX2Fsd2F5c18gdXNlZC4KKworUGFzc2luZyBhIHplcm8gZm9yIGFuIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBsZWF2aW5nIGl0IHVuc3BlY2lmaWVkLgorCisqLworLyoKKworVGVzdGluZyBhbmQgZGVidWdnaW5nIGhlbHAgcHJvdmlkZWQgYnkgRGFuaWVsIEtvY2guCisKK0tlaXRobGV5IE1hbnVhbHM6CisJMjMwOS5QREYgKGRhczE2KQorCTQ5MTkuUERGIChkYXMxNDAwLCAxNjAwKQorCTQ5MjIuUERGIChkYXMtMTQwMCkKKwk0OTIzLlBERiAoZGFzMTIwMCwgMTQwMCwgMTYwMCkKKworQ29tcHV0ZXIgYm9hcmRzIG1hbnVhbHMgYWxzbyBhdmFpbGFibGUgZnJvbSB0aGVpciB3ZWJzaXRlIHd3dy5tZWFzdXJlbWVudGNvbXB1dGluZy5jb20KKworKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyN1bmRlZiBERUJVRworLy8jZGVmaW5lIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBERUJVR19QUklOVChmb3JtYXQsIGFyZ3MuLi4pIHJ0X3ByaW50aygiZGFzMTY6ICIgZm9ybWF0LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfUFJJTlQoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgREFTMTZfU0laRSAyMAkJLy8gbnVtYmVyIG9mIGlvcG9ydHMKKyNkZWZpbmUgREFTMTZfRE1BX1NJWkUgMHhmZjAwCS8vIHNpemUgaW4gYnl0ZXMgb2YgYWxsb2NhdGVkIGRtYSBidWZmZXIKKworLyoKKyAgICBjaW8tZGFzMTYucGRmCisKKyAgICAiZGFzMTYiCisgICAgImRhczE2L2YiCisKKyAgMAlhL2QgYml0cyAwLTMJCXN0YXJ0IDEyIGJpdAorICAxCWEvZCBiaXRzIDQtMTEJCXVudXNlZAorICAyCW11eCByZWFkCQltdXggc2V0CisgIDMJZGkgNCBiaXQJCWRvIDQgYml0CisgIDQJdW51c2VkCQkJYW8wX2xzYgorICA1CXVudXNlZAkJCWFvMF9tc2IKKyAgNgl1bnVzZWQJCQlhbzFfbHNiCisgIDcJdW51c2VkCQkJYW8xX21zYgorICA4CXN0YXR1cyBlb2MgdW5pL2JpcAlpbnRlcnJ1cHQgcmVzZXQKKyAgOQlkbWEsIGludCwgdHJpZyBjdHJsCXNldCBkbWEsIGludAorICBhCXBhY2VyIGNvbnRyb2wJCXVudXNlZAorICBiCXJlc2VydmVkCQlyZXNlcnZlZAorICBjZGVmCTgyNTQKKyAgMDEyMwk4MjU1CisKKyovCisKKy8qCisgICAgY2lvLWRhczE2anIucGRmCisKKyAgICAiZGFzMTZqciIKKworICAwCWEvZCBiaXRzIDAtMwkJc3RhcnQgMTIgYml0CisgIDEJYS9kIGJpdHMgNC0xMQkJdW51c2VkCisgIDIJbXV4IHJlYWQJCW11eCBzZXQKKyAgMwlkaSA0IGJpdAkJZG8gNCBiaXQKKyAgNDU2Nwl1bnVzZWQJCQl1bnVzZWQKKyAgOAlzdGF0dXMgZW9jIHVuaS9iaXAJaW50ZXJydXB0IHJlc2V0CisgIDkJZG1hLCBpbnQsIHRyaWcgY3RybAlzZXQgZG1hLCBpbnQKKyAgYQlwYWNlciBjb250cm9sCQl1bnVzZWQKKyAgYglnYWluIHN0YXR1cwkJZ2FpbiBjb250cm9sCisgIGNkZWYJODI1NAorCisqLworCisvKgorICAgIGNpby1kYXMxNmpyXzE2LnBkZgorCisgICAgImRhczE2anJfMTYiCisKKyAgMAlhL2QgYml0cyAwLTcJCXN0YXJ0IDE2IGJpdAorICAxCWEvZCBiaXRzIDgtMTUJCXVudXNlZAorICAyCW11eCByZWFkCQltdXggc2V0CisgIDMJZGkgNCBiaXQJCWRvIDQgYml0CisgIDQ1NjcJdW51c2VkCQkJdW51c2VkCisgIDgJc3RhdHVzIGVvYyB1bmkvYmlwCWludGVycnVwdCByZXNldAorICA5CWRtYSwgaW50LCB0cmlnIGN0cmwJc2V0IGRtYSwgaW50CisgIGEJcGFjZXIgY29udHJvbAkJdW51c2VkCisgIGIJZ2FpbiBzdGF0dXMJCWdhaW4gY29udHJvbAorICBjZGVmCTgyNTQKKworKi8KKy8qCisgICAgY2lvLWRhczE2MHgtMXgucGRmCisKKyAgICAiZGFzMTYwMS8xMiIKKyAgICAiZGFzMTYwMi8xMiIKKyAgICAiZGFzMTYwMi8xNiIKKworICAwCWEvZCBiaXRzIDAtMwkJc3RhcnQgMTIgYml0CisgIDEJYS9kIGJpdHMgNC0xMQkJdW51c2VkCisgIDIJbXV4IHJlYWQJCW11eCBzZXQKKyAgMwlkaSA0IGJpdAkJZG8gNCBiaXQKKyAgNAl1bnVzZWQJCQlhbzBfbHNiCisgIDUJdW51c2VkCQkJYW8wX21zYgorICA2CXVudXNlZAkJCWFvMV9sc2IKKyAgNwl1bnVzZWQJCQlhbzFfbXNiCisgIDgJc3RhdHVzIGVvYyB1bmkvYmlwCWludGVycnVwdCByZXNldAorICA5CWRtYSwgaW50LCB0cmlnIGN0cmwJc2V0IGRtYSwgaW50CisgIGEJcGFjZXIgY29udHJvbAkJdW51c2VkCisgIGIJZ2FpbiBzdGF0dXMJCWdhaW4gY29udHJvbAorICBjZGVmCTgyNTQKKyAgNDAwCTgyNTUKKyAgNDA0CXVudXNlZAkJCWNvbnZlcnNpb24gZW5hYmxlCisgIDQwNQl1bnVzZWQJCQlidXJzdCBlbmFibGUKKyAgNDA2CXVudXNlZAkJCWRhczE2MDAgZW5hYmxlCisgIDQwNwlzdGF0dXMKKworKi8KKworc3RhdGljIGNvbnN0IGludCBzYW1wbGVfc2l6ZSA9IDI7CS8vIHNpemUgaW4gYnl0ZXMgb2YgYSBzYW1wbGUgZnJvbSBib2FyZAorCisjZGVmaW5lIERBUzE2X1RSSUcJCTAKKyNkZWZpbmUgREFTMTZfQUlfTFNCCQkwCisjZGVmaW5lIERBUzE2X0FJX01TQgkJMQorI2RlZmluZSBEQVMxNl9NVVgJCTIKKyNkZWZpbmUgREFTMTZfRElPCQkzCisjZGVmaW5lIERBUzE2X0FPX0xTQih4KQkoKHgpPzY6NCkKKyNkZWZpbmUgREFTMTZfQU9fTVNCKHgpCSgoeCk/Nzo1KQorI2RlZmluZSBEQVMxNl9TVEFUVVMJCTgKKyNkZWZpbmUgICBCVVNZCQkJKDE8PDcpCisjZGVmaW5lICAgVU5JUE9MQVIJCQkoMTw8NikKKyNkZWZpbmUgICBEQVMxNl9NVVhCSVQJCQkoMTw8NSkKKyNkZWZpbmUgICBEQVMxNl9JTlQJCQkoMTw8NCkKKyNkZWZpbmUgREFTMTZfQ09OVFJPTAkJOQorI2RlZmluZSAgIERBUzE2X0lOVEUJCQkoMTw8NykKKyNkZWZpbmUgICBEQVMxNl9JUlEoeCkJCQkoKCh4KSAmIDB4NykgPDwgNCkKKyNkZWZpbmUgICBETUFfRU5BQkxFCQkJKDE8PDIpCisjZGVmaW5lICAgUEFDSU5HX01BU0sJMHgzCisjZGVmaW5lICAgSU5UX1BBQ0VSCQkweDAzCisjZGVmaW5lICAgRVhUX1BBQ0VSCQkJMHgwMgorI2RlZmluZSAgIERBUzE2X1NPRlQJCTB4MDAKKyNkZWZpbmUgREFTMTZfUEFDRVIJCTB4MEEKKyNkZWZpbmUgICBEQVMxNl9DVFIwCQkJKDE8PDEpCisjZGVmaW5lICAgREFTMTZfVFJJRzAJCQkoMTw8MCkKKyNkZWZpbmUgICBCVVJTVF9MRU5fQklUUyh4KQkJCSgoKHgpICYgMHhmKSA8PCA0KQorI2RlZmluZSBEQVMxNl9HQUlOCQkweDBCCisjZGVmaW5lIERBUzE2X0NOVFIwX0RBVEEJCTB4MEMKKyNkZWZpbmUgREFTMTZfQ05UUjFfREFUQQkJMHgwRAorI2RlZmluZSBEQVMxNl9DTlRSMl9EQVRBCQkweDBFCisjZGVmaW5lIERBUzE2X0NOVFJfQ09OVFJPTAkweDBGCisjZGVmaW5lICAgREFTMTZfVEVSTV9DTlQJMHgwMAorI2RlZmluZSAgIERBUzE2X09ORV9TSE9UCTB4MDIKKyNkZWZpbmUgICBEQVMxNl9SQVRFX0dFTgkweDA0CisjZGVmaW5lICAgREFTMTZfQ05UUl9MU0JfTVNCCTB4MzAKKyNkZWZpbmUgICBEQVMxNl9DTlRSMAkJMHgwMAorI2RlZmluZSAgIERBUzE2X0NOVFIxCQkweDQwCisjZGVmaW5lICAgREFTMTZfQ05UUjIJCTB4ODAKKworI2RlZmluZSBEQVMxNjAwX0NPTlYJCTB4NDA0CisjZGVmaW5lICAgREFTMTYwMF9DT05WX0RJU0FCTEUJCTB4NDAKKyNkZWZpbmUgREFTMTYwMF9CVVJTVAkJMHg0MDUKKyNkZWZpbmUgICBEQVMxNjAwX0JVUlNUX1ZBTAkJMHg0MAorI2RlZmluZSBEQVMxNjAwX0VOQUJMRQkJMHg0MDYKKyNkZWZpbmUgICBEQVMxNjAwX0VOQUJMRV9WQUwJCTB4NDAKKyNkZWZpbmUgREFTMTYwMF9TVEFUVVNfQgkweDQwNworI2RlZmluZSAgIERBUzE2MDBfQk1FCQkweDQwCisjZGVmaW5lICAgREFTMTYwMF9NRQkJMHgyMAorI2RlZmluZSAgIERBUzE2MDBfQ0QJCQkweDEwCisjZGVmaW5lICAgREFTMTYwMF9XUwkJCTB4MDIKKyNkZWZpbmUgICBEQVMxNjAwX0NMS18xME1IWgkJMHgwMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMXgwMV9iaXAgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAxKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczF4MDFfdW5pcCA9IHsgNCwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMXgwMl9iaXAgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczF4MDJfdW5pcCA9IHsgNCwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMTZqciA9IHsgOSwgeworCQkJLy8gYWxzbyB1c2VkIGJ5IDE2LzMzMAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczE2anJfMTYgPSB7IDgsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwl9Cit9OworCitzdGF0aWMgY29uc3QgaW50IGRhczE2anJfZ2Fpbmxpc3RbXSA9IHsgOCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyB9Oworc3RhdGljIGNvbnN0IGludCBkYXMxNmpyXzE2X2dhaW5saXN0W10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcgfTsKK3N0YXRpYyBjb25zdCBpbnQgZGFzMTYwMF9nYWlubGlzdFtdID0geyAwLCAxLCAyLCAzIH07CitlbnVtIHsKKwlkYXMxNl9wZ19ub25lID0gMCwKKwlkYXMxNl9wZ18xNmpyLAorCWRhczE2X3BnXzE2anJfMTYsCisJZGFzMTZfcGdfMTYwMSwKKwlkYXMxNl9wZ18xNjAyLAorfTsKK3N0YXRpYyBjb25zdCBpbnQgKmNvbnN0IGRhczE2X2dhaW5saXN0c1tdID0geworCU5VTEwsCisJZGFzMTZqcl9nYWlubGlzdCwKKwlkYXMxNmpyXzE2X2dhaW5saXN0LAorCWRhczE2MDBfZ2Fpbmxpc3QsCisJZGFzMTYwMF9nYWlubGlzdCwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IGRhczE2X2FpX3VuaV9scmFuZ2VzW10gPSB7CisJJnJhbmdlX3Vua25vd24sCisJJnJhbmdlX2RhczE2anIsCisJJnJhbmdlX2RhczE2anJfMTYsCisJJnJhbmdlX2RhczF4MDFfdW5pcCwKKwkmcmFuZ2VfZGFzMXgwMl91bmlwLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgZGFzMTZfYWlfYmlwX2xyYW5nZXNbXSA9IHsKKwkmcmFuZ2VfdW5rbm93biwKKwkmcmFuZ2VfZGFzMTZqciwKKwkmcmFuZ2VfZGFzMTZqcl8xNiwKKwkmcmFuZ2VfZGFzMXgwMV9iaXAsCisJJnJhbmdlX2RhczF4MDJfYmlwLAorfTsKKworc3RydWN0IG11bmdlX2luZm8geworCXVpbnQ4X3QgYnl0ZTsKKwl1bnNpZ25lZCBoYXZlX2J5dGU6MTsKK307CisKK3N0YXRpYyBpbnQgZGFzMTZfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTZfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTZfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTZfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBkYXMxNl9jbWRfdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgZGFzMTZfY21kX2V4ZWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRhczE2X2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIGRhczE2X2FpX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdm9pZCAqYXJyYXksIHVuc2lnbmVkIGludCBudW1fYnl0ZXMsIHVuc2lnbmVkIGludCBzdGFydF9jaGFuX2luZGV4KTsKKworc3RhdGljIHZvaWQgZGFzMTZfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGlycXJldHVybl90IGRhczE2X2RtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgdm9pZCBkYXMxNl90aW1lcl9pbnRlcnJ1cHQodW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgZGFzMTZfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHVuc2lnbmVkIGludCBkYXMxNl9zZXRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBucywKKwlpbnQgZmxhZ3MpOworc3RhdGljIGludCBkYXMxNjAwX21vZGVfZGV0ZWN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFzMTZfc3VnZ2VzdF90cmFuc2Zlcl9zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfY21kIGNtZCk7CisKK3N0YXRpYyB2b2lkIHJlZ19kdW1wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RydWN0IGRhczE2X2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKmFpOworCXVuc2lnbmVkIGludCBhaV9uYml0czsKKwl1bnNpZ25lZCBpbnQgYWlfc3BlZWQ7CS8vIG1heCBjb252ZXJzaW9uIHNwZWVkIGluIG5hbm9zZWMKKwl1bnNpZ25lZCBpbnQgYWlfcGc7CisJdm9pZCAqYW87CisJdW5zaWduZWQgaW50IGFvX25iaXRzOworCXZvaWQgKmRpOworCXZvaWQgKmRvXzsKKworCXVuc2lnbmVkIGludCBpODI1NV9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGk4MjU0X29mZnNldDsKKworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGludCBpZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFzMTZfYm9hcmQgZGFzMTZfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkYXMtMTYiLAorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxNTAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfbm9uZSwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MTAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxNCwKKwkgICAgICBpZDoJMHgwMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNmciLAorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxNTAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfbm9uZSwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MTAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxNCwKKwkgICAgICBpZDoJMHgwMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNmYiLAorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDo4NTAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgxMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorCSAgICAgIGlkOgkweDAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2IiwJLy8gY2lvLWRhczE2LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfbm9uZSwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MTAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxNCwKKwkgICAgICBpZDoJMHg4MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNi9mIiwJLy8gZGFzMTYucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgxMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorCSAgICAgIGlkOgkweDgwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2L2pyIiwJLy8gY2lvLWRhczE2anIucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjc2OTIsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2anIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxMCwKKwkgICAgICBpZDoJMHgwMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjMTA0LWRhczE2anIiLAkvLyBwYzEwNC1kYXMxNmpyX3h4LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDozMzAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNmpyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4MTAsCisJICAgICAgaWQ6CTB4MDAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTZqci8xNiIsCS8vIGNpby1kYXMxNmpyXzE2LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTZqcl8xNiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDEwLAorCSAgICAgIGlkOgkweDAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGMxMDQtZGFzMTZqci8xNiIsCS8vIHBjMTA0LWRhczE2anJfeHgucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNmpyXzE2LAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4MTAsCisJICAgICAgaWQ6CTB4MDAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTIwMSIsCS8vIDQ5MjQucGRmIChrZWl0aGxleSB1c2VyJ3MgbWFudWFsKQorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfbm9uZSwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHg0MDAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisJICAgICAgaWQ6CTB4MjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTIwMiIsCS8vIDQ5MjQucGRmIChrZWl0aGxleSB1c2VyJ3MgbWFudWFsKQorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfbm9uZSwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHg0MDAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisJICAgICAgaWQ6CTB4MjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTQwMSIsCS8vIDQ5MTkucGRmIGFuZCA0OTIyLnBkZiAoa2VpdGhsZXkgdXNlcidzIG1hbnVhbCkKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDEsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKwkgICAgICBpZDoJMHhjMAkvLyA0OTE5LnBkZiBzYXlzIGlkIGJpdHMgYXJlIDB4ZTAsIDQ5MjIucGRmIHNheXMgMHhjMAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE0MDIiLAkvLyA0OTE5LnBkZiBhbmQgNDkyMi5wZGYgKGtlaXRobGV5IHVzZXIncyBtYW51YWwpCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNjAyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisJICAgICAgaWQ6CTB4YzAJLy8gNDkxOS5wZGYgc2F5cyBpZCBiaXRzIGFyZSAweGUwLCA0OTIyLnBkZiBzYXlzIDB4YzAKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNjAxIiwJLy8gNDkxOS5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDEsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNjAyIiwJLy8gNDkxOS5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDIsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNDAxLzEyIiwJLy8gY2lvLWRhczE0MDBfc2VyaWVzLnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDo2MjUwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNjAxLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorICAgICAgaWQ6CTB4YzB9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE0MDIvMTIiLAkvLyBjaW8tZGFzMTQwMF9zZXJpZXMucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisgICAgICBpZDoJMHhjMH0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTQwMi8xNiIsCS8vIGNpby1kYXMxNDAwX3Nlcmllcy5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisgICAgICBpZDoJMHhjMH0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYwMS8xMiIsCS8vIGNpby1kYXMxNjB4LTF4LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDo2MjUwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNjAxLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHg0MDAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisgICAgICBpZDoJMHhjMH0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYwMi8xMiIsCS8vIGNpby1kYXMxNjB4LTF4LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4NDAwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorICAgICAgaWQ6CTB4YzB9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2MDIvMTYiLAkvLyBjaW8tZGFzMTYweC0xeC5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDIsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNi8zMzAiLAkvLyA/CisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjMwMzAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2anIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxNCwKKyAgICAgIGlkOgkweGYwfSwKKyNpZiAwCisJeworCSAgICAgIG5hbWU6CSJkYXMxNi8zMzBpIiwJLy8gPworCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMTYvanIvY3RyNSIsCS8vID8KKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNi9tMS8xNiIsCS8vIGNpby1kYXMxNl9tMV8xNi5wZGYsIHRoaXMgYm9hcmQgaXMgYSBiaXQgcXVpcmt5LCBubyBkbWEKKwkJfSwKKyNlbmRpZgorfTsKKworI2RlZmluZSBuX2RhczE2X2JvYXJkcyAoKHNpemVvZihkYXMxNl9ib2FyZHMpKS8oc2l6ZW9mKHN0cnVjdCBkYXMxNl9ib2FyZCkpKQorCitzdGF0aWMgaW50IGRhczE2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRhczE2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhczE2ID0geworICAgICAgZHJpdmVyX25hbWU6ImRhczE2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkYXMxNl9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFzMTZfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomZGFzMTZfYm9hcmRzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9kYXMxNl9ib2FyZHMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKGRhczE2X2JvYXJkc1swXSksCit9OworCisjZGVmaW5lIERBUzE2X1RJTUVPVVQgMTAwMAorCisvKiBQZXJpb2QgZm9yIHRpbWVyIGludGVycnVwdCBpbiBqaWZmaWVzLiAgSXQncyBhIGZ1bmN0aW9uCisgKiB0byBkZWFsIHdpdGggcG9zc2liaWxpdHkgb2YgZHluYW1pYyBIWiBwYXRjaGVzICAqLworc3RhdGljIGlubGluZSBpbnQgdGltZXJfcGVyaW9kKHZvaWQpCit7CisJcmV0dXJuIEhaIC8gMjA7Cit9CitzdHJ1Y3QgZGFzMTZfcHJpdmF0ZV9zdHJ1Y3QgeworCXVuc2lnbmVkIGludCBhaV91bmlwb2xhcjsJLy8gdW5pcG9sYXIgZmxhZworCXVuc2lnbmVkIGludCBhaV9zaW5nbGVlbmRlZDsJLy8gc2luZ2xlIGVuZGVkIGZsYWcKKwl1bnNpZ25lZCBpbnQgY2xvY2tiYXNlOwkvLyBtYXN0ZXIgY2xvY2sgc3BlZWQgaW4gbnMKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsJLy8gZG1hLCBpbnRlcnJ1cHQgYW5kIHRyaWdnZXIgY29udHJvbCBiaXRzCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhZGNfYnl0ZV9jb3VudDsJLy8gbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZworCXVuc2lnbmVkIGludCBkaXZpc29yMTsJLy8gZGl2aXNvciBkaXZpZGluZyBtYXN0ZXIgY2xvY2sgdG8gZ2V0IGNvbnZlcnNpb24gZnJlcXVlbmN5CisJdW5zaWduZWQgaW50IGRpdmlzb3IyOwkvLyBkaXZpc29yIGRpdmlkaW5nIG1hc3RlciBjbG9jayB0byBnZXQgY29udmVyc2lvbiBmcmVxdWVuY3kKKwl1bnNpZ25lZCBpbnQgZG1hX2NoYW47CS8vIGRtYSBjaGFubmVsCisJdWludDE2X3QgKmRtYV9idWZmZXJbMl07CisJZG1hX2FkZHJfdCBkbWFfYnVmZmVyX2FkZHJbMl07CisJdW5zaWduZWQgaW50IGN1cnJlbnRfYnVmZmVyOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBkbWFfdHJhbnNmZXJfc2l6ZTsJLy8gdGFyZ2V0IG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciBwZXIgZG1hIHNob3QKKwkvLyB1c2VyLWRlZmluZWQgYW5hbG9nIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIGRlZmluZWQgZnJvbSBjb25maWcgb3B0aW9ucworCXN0cnVjdCBjb21lZGlfbHJhbmdlICp1c2VyX2FpX3JhbmdlX3RhYmxlOworCXN0cnVjdCBjb21lZGlfbHJhbmdlICp1c2VyX2FvX3JhbmdlX3RhYmxlOworCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CS8vIGZvciB0aW1lZCBpbnRlcnJ1cHQKKwl2b2xhdGlsZSBzaG9ydCB0aW1lcl9ydW5uaW5nOworCXZvbGF0aWxlIHNob3J0IHRpbWVyX21vZGU7CS8vIHRydWUgaWYgdXNpbmcgdGltZXIgbW9kZQorfTsKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXMxNl9wcml2YXRlX3N0cnVjdCAqKShkZXYtPnByaXZhdGUpKQorI2RlZmluZSB0aGlzYm9hcmQgKChzdHJ1Y3QgZGFzMTZfYm9hcmQgKikoZGV2LT5ib2FyZF9wdHIpKQorCitzdGF0aWMgaW50IGRhczE2X2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDAsIHRtcDsKKwlpbnQgZ2Fpbiwgc3RhcnRfY2hhbiwgaTsKKwlpbnQgbWFzazsKKworCS8qIG1ha2Ugc3VyZSB0cmlnZ2VycyBhcmUgdmFsaWQgKi8KKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCW1hc2sgPSBUUklHX0ZPTExPVzsKKwkvLyBpZiBib2FyZCBzdXBwb3J0cyBidXJzdCBtb2RlCisJaWYgKHRoaXNib2FyZC0+c2l6ZSA+IDB4NDAwKQorCQltYXNrIHw9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IG1hc2s7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJbWFzayA9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwkvLyBpZiBib2FyZCBzdXBwb3J0cyBidXJzdCBtb2RlCisJaWYgKHRoaXNib2FyZC0+c2l6ZSA+IDB4NDAwKQorCQltYXNrIHw9IFRSSUdfTk9XOworCWNtZC0+Y29udmVydF9zcmMgJj0gbWFzazsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwkvLyBtYWtlIHN1cmUgc2Nhbl9iZWdpbl9zcmMgYW5kIGNvbnZlcnRfc3JjIGRvbnQgY29uZmxpY3QKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVyAmJiBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJLyogaW50ZXJuYWwgdHJpZ2dlciAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwkvLyBjaGVjayBhZ2FpbnN0IG1heGltdW0gZnJlcXVlbmN5CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQl0aGlzYm9hcmQtPmFpX3NwZWVkICogY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbjsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzYm9hcmQtPmFpX3NwZWVkKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc2JvYXJkLT5haV9zcGVlZDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvLyBzdGVwIDQ6IGZpeCB1cCBhcmd1bWVudHMKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCB0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQkvLyBzZXQgZGl2aXNvcnMsIGNvcnJlY3QgdGltaW5nIGFyZ3VtZW50cworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoZGV2cHJpdi0+Y2xvY2tiYXNlLAorCQkJJihkZXZwcml2LT5kaXZpc29yMSksICYoZGV2cHJpdi0+ZGl2aXNvcjIpLAorCQkJJihjbWQtPnNjYW5fYmVnaW5fYXJnKSwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWVyciArPSAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCB0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQkvLyBzZXQgZGl2aXNvcnMsIGNvcnJlY3QgdGltaW5nIGFyZ3VtZW50cworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoZGV2cHJpdi0+Y2xvY2tiYXNlLAorCQkJJihkZXZwcml2LT5kaXZpc29yMSksICYoZGV2cHJpdi0+ZGl2aXNvcjIpLAorCQkJJihjbWQtPmNvbnZlcnRfYXJnKSwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWVyciArPSAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIGNoZWNrIGNoYW5uZWwvZ2FpbiBsaXN0IGFnYWluc3QgY2FyZCdzIGxpbWl0YXRpb25zCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlzdGFydF9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9CisJCQkJKHN0YXJ0X2NoYW4gKyBpKSAlIHMtPm5fY2hhbikgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUgY2hhbm5lbHMsIGNvdW50aW5nIHVwd2FyZHNcbiIpOworCQkJCWVycisrOworCQkJfQorCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGdhaW4pIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOworCQkJCWVycisrOworCQkJfQorCQl9CisJfQorCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfY21kX2V4ZWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYW5nZTsKKworCWlmIChkZXZwcml2LT5kbWFfY2hhbiA9PSAwIHx8IChkZXYtPmlycSA9PSAwCisJCQkmJiBkZXZwcml2LT50aW1lcl9tb2RlID09IDApKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiaXJxIChvciB1c2Ugb2YgJ3RpbWVyIG1vZGUnKSBkbWEgcmVxdWlyZWQgdG8gZXhlY3V0ZSBjb21lZGlfY21kIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiaXNhIGRtYSB0cmFuc2ZlcnMgY2Fubm90IGJlIHBlcmZvcm1lZCB3aXRoIFRSSUdfUlQsIGFib3J0aW5nIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkZXZwcml2LT5hZGNfYnl0ZV9jb3VudCA9CisJCWNtZC0+c3RvcF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbiAqIHNpemVvZih1aW50MTZfdCk7CisKKwkvLyBkaXNhYmxlIGNvbnZlcnNpb25zIGZvciBkYXMxNjAwIG1vZGUKKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApIHsKKwkJb3V0YihEQVMxNjAwX0NPTlZfRElTQUJMRSwgZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0NPTlYpOworCX0KKwkvLyBzZXQgc2NhbiBsaW1pdHMKKwlieXRlID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwlieXRlIHw9IENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPmNoYW5saXN0X2xlbiAtIDFdKSA8PCA0OworCW91dGIoYnl0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9NVVgpOworCisJLyogc2V0IGdhaW4gKHRoaXMgaXMgYWxzbyBidXJzdCByYXRlIHJlZ2lzdGVyIGJ1dCBhY2NvcmRpbmcgdG8KKwkgKiBjb21wdXRlciBib2FyZHMgbWFudWFsLCBidXJzdCByYXRlIGRvZXMgbm90aGluZywgZXZlbiBvbiBrZWl0aGxleSBjYXJkcykgKi8KKwlpZiAodGhpc2JvYXJkLT5haV9wZyAhPSBkYXMxNl9wZ19ub25lKSB7CisJCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJCW91dGIoKGRhczE2X2dhaW5saXN0c1t0aGlzYm9hcmQtPmFpX3BnXSlbcmFuZ2VdLAorCQkJZGV2LT5pb2Jhc2UgKyBEQVMxNl9HQUlOKTsKKwl9CisKKwkvKiBzZXQgY291bnRlciBtb2RlIGFuZCBjb3VudHMgKi8KKwljbWQtPmNvbnZlcnRfYXJnID0KKwkJZGFzMTZfc2V0X3BhY2VyKGRldiwgY21kLT5jb252ZXJ0X2FyZywKKwkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJREVCVUdfUFJJTlQoInBhY2VyIHBlcmlvZDogJWQgbnNcbiIsIGNtZC0+Y29udmVydF9hcmcpOworCisJLyogZW5hYmxlIGNvdW50ZXJzICovCisJYnl0ZSA9IDA7CisJLyogRW5hYmxlIGJ1cnN0IG1vZGUgaWYgYXBwcm9wcmlhdGUuICovCisJaWYgKHRoaXNib2FyZC0+c2l6ZSA+IDB4NDAwKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCQlvdXRiKERBUzE2MDBfQlVSU1RfVkFMLCBkZXYtPmlvYmFzZSArIERBUzE2MDBfQlVSU1QpOworCQkJLy8gc2V0IGJ1cnN0IGxlbmd0aAorCQkJYnl0ZSB8PSBCVVJTVF9MRU5fQklUUyhjbWQtPmNoYW5saXN0X2xlbiAtIDEpOworCQl9IGVsc2UgeworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2MDBfQlVSU1QpOworCQl9CisJfQorCW91dGIoYnl0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9QQUNFUik7CisKKwkvLyBzZXQgdXAgZG1hIHRyYW5zZmVyCisJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJICogY291bnQgYW5kIGFkZHJlc3MgZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hX2NoYW4pOworCWRldnByaXYtPmN1cnJlbnRfYnVmZmVyID0gMDsKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hX2NoYW4sCisJCWRldnByaXYtPmRtYV9idWZmZXJfYWRkcltkZXZwcml2LT5jdXJyZW50X2J1ZmZlcl0pOworCS8vIHNldCBhcHByb3ByaWF0ZSBzaXplIG9mIHRyYW5zZmVyCisJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPSBkYXMxNl9zdWdnZXN0X3RyYW5zZmVyX3NpemUoZGV2LCAqY21kKTsKKwlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYV9jaGFuLCBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSk7CisJZW5hYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisKKwkvLyBzZXQgdXAgaW50ZXJydXB0CisJaWYgKGRldnByaXYtPnRpbWVyX21vZGUpIHsKKwkJZGV2cHJpdi0+dGltZXJfcnVubmluZyA9IDE7CisJCWRldnByaXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZXJfcGVyaW9kKCk7CisJCWFkZF90aW1lcigmZGV2cHJpdi0+dGltZXIpOworCQlkZXZwcml2LT5jb250cm9sX3N0YXRlICY9IH5EQVMxNl9JTlRFOworCX0gZWxzZSB7CisJCS8qIGNsZWFyIGludGVycnVwdCBiaXQgKi8KKwkJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERBUzE2X1NUQVRVUyk7CisJCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gREFTMTZfSU5URTsKKwl9CisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBETUFfRU5BQkxFOworCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflBBQ0lOR19NQVNLOworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKQorCQlkZXZwcml2LT5jb250cm9sX3N0YXRlIHw9IEVYVF9QQUNFUjsKKwllbHNlCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gSU5UX1BBQ0VSOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9DT05UUk9MKTsKKworCS8qIEVuYWJsZSBjb252ZXJzaW9ucyBpZiB1c2luZyBkYXMxNjAwIG1vZGUgKi8KKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApIHsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2MDBfQ09OVik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCS8qIGRpc2FibGUgaW50ZXJydXB0cywgZG1hIGFuZCBwYWNlciBjbG9ja2VkIGNvbnZlcnNpb25zICovCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+REFTMTZfSU5URSAmIH5QQUNJTkdfTUFTSyAmIH5ETUFfRU5BQkxFOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9DT05UUk9MKTsKKwlpZiAoZGV2cHJpdi0+ZG1hX2NoYW4pCisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKworCS8vIGRpc2FibGUgU1cgdGltZXIKKwlpZiAoZGV2cHJpdi0+dGltZXJfbW9kZSAmJiBkZXZwcml2LT50aW1lcl9ydW5uaW5nKSB7CisJCWRldnByaXYtPnRpbWVyX3J1bm5pbmcgPSAwOworCQlkZWxfdGltZXIoJmRldnByaXYtPnRpbWVyKTsKKwl9CisKKwkvKiBkaXNhYmxlIGJ1cnN0IG1vZGUgKi8KKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApIHsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2MDBfQlVSU1QpOworCX0KKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGFzMTZfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2X1NUQVRVUyk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2X0NPTlRST0wpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9QQUNFUik7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2X0NOVFJfQ09OVFJPTCk7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpLCBuOworCWludCByYW5nZTsKKwlpbnQgY2hhbjsKKwlpbnQgbXNiLCBsc2I7CisKKwkvLyBkaXNhYmxlIGludGVycnVwdHMgYW5kIHBhY2luZworCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgJj0gfkRBUzE2X0lOVEUgJiB+RE1BX0VOQUJMRSAmIH5QQUNJTkdfTUFTSzsKKwlvdXRiKGRldnByaXYtPmNvbnRyb2xfc3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZfQ09OVFJPTCk7CisKKwkvKiBzZXQgbXVsdGlwbGV4ZXIgKi8KKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJY2hhbiB8PSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSA8PCA0OworCW91dGIoY2hhbiwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9NVVgpOworCisJLyogc2V0IGdhaW4gKi8KKwlpZiAodGhpc2JvYXJkLT5haV9wZyAhPSBkYXMxNl9wZ19ub25lKSB7CisJCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCQlvdXRiKChkYXMxNl9nYWlubGlzdHNbdGhpc2JvYXJkLT5haV9wZ10pW3JhbmdlXSwKKwkJCWRldi0+aW9iYXNlICsgREFTMTZfR0FJTik7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJb3V0Yl9wKDAsIGRldi0+aW9iYXNlICsgREFTMTZfVFJJRyk7CisKKwkJZm9yIChpID0gMDsgaSA8IERBUzE2X1RJTUVPVVQ7IGkrKykgeworCQkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKSAmIEJVU1kpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IERBUzE2X1RJTUVPVVQpIHsKKwkJCXJ0X3ByaW50aygiZGFzMTY6IHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQltc2IgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9BSV9NU0IpOworCQlsc2IgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9BSV9MU0IpOworCQlpZiAodGhpc2JvYXJkLT5haV9uYml0cyA9PSAxMikgeworCQkJZGF0YVtuXSA9ICgobHNiID4+IDQpICYgMHhmKSB8IChtc2IgPDwgNCk7CisJCX0gZWxzZSB7CisJCQlkYXRhW25dID0gbHNiIHwgKG1zYiA8PCA4KTsKKwkJfQorCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGRhczE2X2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCWJpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9ESU8pICYgMHhmOworCWRhdGFbMV0gPSBiaXRzOworCWRhdGFbMF0gPSAwOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCB3Yml0czsKKworCS8vIG9ubHkgc2V0IGJpdHMgdGhhdCBoYXZlIGJlZW4gbWFza2VkCisJZGF0YVswXSAmPSAweGY7CisJd2JpdHMgPSBzLT5zdGF0ZTsKKwkvLyB6ZXJvIGJpdHMgdGhhdCBoYXZlIGJlZW4gbWFza2VkCisJd2JpdHMgJj0gfmRhdGFbMF07CisJLy8gc2V0IG1hc2tlZCBiaXRzCisJd2JpdHMgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJcy0+c3RhdGUgPSB3Yml0czsKKwlkYXRhWzFdID0gd2JpdHM7CisKKwlvdXRiKHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X0RJTyk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMxNl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGxzYiwgbXNiOworCWludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlpZiAodGhpc2JvYXJkLT5hb19uYml0cyA9PSAxMikgeworCQkJbHNiID0gKGRhdGFbaV0gPDwgNCkgJiAweGZmOworCQkJbXNiID0gKGRhdGFbaV0gPj4gNCkgJiAweGZmOworCQl9IGVsc2UgeworCQkJbHNiID0gZGF0YVtpXSAmIDB4ZmY7CisJCQltc2IgPSAoZGF0YVtpXSA+PiA4KSAmIDB4ZmY7CisJCX0KKwkJb3V0Yihsc2IsIGRldi0+aW9iYXNlICsgREFTMTZfQU9fTFNCKGNoYW4pKTsKKwkJb3V0Yihtc2IsIGRldi0+aW9iYXNlICsgREFTMTZfQU9fTVNCKGNoYW4pKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGlycXJldHVybl90IGRhczE2X2RtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCisJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKTsKKworCWlmICgoc3RhdHVzICYgREFTMTZfSU5UKSA9PSAwKSB7CisJCURFQlVHX1BSSU5UKCJzcHVyaW91cyBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJLyogY2xlYXIgaW50ZXJydXB0ICovCisJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERBUzE2X1NUQVRVUyk7CisJZGFzMTZfaW50ZXJydXB0KGRldik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBkYXMxNl90aW1lcl9pbnRlcnJ1cHQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBhcmc7CisKKwlkYXMxNl9pbnRlcnJ1cHQoZGV2KTsKKworCWlmIChkZXZwcml2LT50aW1lcl9ydW5uaW5nKQorCQltb2RfdGltZXIoJmRldnByaXYtPnRpbWVyLCBqaWZmaWVzICsgdGltZXJfcGVyaW9kKCkpOworfQorCisvKiB0aGUgcGMxMDQtZGFzMTZqciAoYXQgbGVhc3QpIGhhcyBwcm9ibGVtcyBpZiB0aGUgZG1hCisJdHJhbnNmZXIgaXMgaW50ZXJydXB0ZWQgaW4gdGhlIG1pZGRsZSBvZiB0cmFuc2ZlcnJpbmcKKwlhIDE2IGJpdCBzYW1wbGUsIHNvIHRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSB0byBnZXQKKwlhbiBldmVuIHRyYW5zZmVyIGNvdW50IGFmdGVyIGRpc2FibGluZyBkbWEKKwljaGFubmVsLgorKi8KK3N0YXRpYyBpbnQgZGlzYWJsZV9kbWFfb25fZXZlbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgcmVzaWR1ZTsKKwlpbnQgaTsKKwlzdGF0aWMgY29uc3QgaW50IGRpc2FibGVfbGltaXQgPSAxMDA7CisJc3RhdGljIGNvbnN0IGludCBlbmFibGVfdGltZW91dCA9IDEwMDsKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJcmVzaWR1ZSA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWFfY2hhbik7CisJZm9yIChpID0gMDsgaSA8IGRpc2FibGVfbGltaXQgJiYgKHJlc2lkdWUgJSAyKTsgKytpKSB7CisJCWludCBqOworCQllbmFibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJZm9yIChqID0gMDsgaiA8IGVuYWJsZV90aW1lb3V0OyArK2opIHsKKwkJCWludCBuZXdfcmVzaWR1ZTsKKwkJCWNvbWVkaV91ZGVsYXkoMik7CisJCQluZXdfcmVzaWR1ZSA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWFfY2hhbik7CisJCQlpZiAobmV3X3Jlc2lkdWUgIT0gcmVzaWR1ZSkKKwkJCQlicmVhazsKKwkJfQorCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJCXJlc2lkdWUgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+ZG1hX2NoYW4pOworCX0KKwlpZiAoaSA9PSBkaXNhYmxlX2xpbWl0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiZmFpbGVkIHRvIGdldCBhbiBldmVuIGRtYSB0cmFuc2ZlciwgY291bGQgYmUgdHJvdWJsZS4iKTsKKwl9CisJcmV0dXJuIHJlc2lkdWU7Cit9CisKK3N0YXRpYyB2b2lkIGRhczE2X2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGRtYV9mbGFncywgc3Bpbl9mbGFnczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKKwlpbnQgbnVtX2J5dGVzLCByZXNpZHVlOworCWludCBidWZmZXJfaW5kZXg7CisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJwcmVtYXR1cmUgaW50ZXJydXB0Iik7CisJCXJldHVybjsKKwl9CisJLy8gaW5pdGlhbGl6ZSBhc3luYyBoZXJlIHRvIG1ha2Ugc3VyZSBpdCBpcyBub3QgTlVMTAorCWFzeW5jID0gcy0+YXN5bmM7CisJY21kID0gJmFzeW5jLT5jbWQ7CisKKwlpZiAoZGV2cHJpdi0+ZG1hX2NoYW4gPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiaW50ZXJydXB0IHdpdGggbm8gZG1hIGNoYW5uZWw/Iik7CisJCXJldHVybjsKKwl9CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIHNwaW5fZmxhZ3MpOworCWlmICgoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmIERNQV9FTkFCTEUpID09IDApIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIHNwaW5fZmxhZ3MpOworCQlERUJVR19QUklOVCgiaW50ZXJydXB0IHdoaWxlIGRtYSBkaXNhYmxlZD9cbiIpOworCQlyZXR1cm47CisJfQorCisJZG1hX2ZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hX2NoYW4pOworCXJlc2lkdWUgPSBkaXNhYmxlX2RtYV9vbl9ldmVuKGRldik7CisKKwkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB0byByZWFkCisJaWYgKHJlc2lkdWUgPiBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicmVzaWR1ZSA+IHRyYW5zZmVyIHNpemUhXG4iKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQludW1fYnl0ZXMgPSAwOworCX0gZWxzZQorCQludW1fYnl0ZXMgPSBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAtIHJlc2lkdWU7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIG51bV9ieXRlcyA+PSBkZXZwcml2LT5hZGNfYnl0ZV9jb3VudCkgeworCQludW1fYnl0ZXMgPSBkZXZwcml2LT5hZGNfYnl0ZV9jb3VudDsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKworCWJ1ZmZlcl9pbmRleCA9IGRldnByaXYtPmN1cnJlbnRfYnVmZmVyOworCWRldnByaXYtPmN1cnJlbnRfYnVmZmVyID0gKGRldnByaXYtPmN1cnJlbnRfYnVmZmVyICsgMSkgJSAyOworCWRldnByaXYtPmFkY19ieXRlX2NvdW50IC09IG51bV9ieXRlczsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgYnl0ZXMgZm9yIG5leHQgdHJhbnNmZXIKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPnRpbWVyX21vZGUgPT0gMCAmJgorCQlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA+IGRldnByaXYtPmFkY19ieXRlX2NvdW50KQorCQlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA9IGRldnByaXYtPmFkY19ieXRlX2NvdW50OworCisJLy8gcmUtZW5hYmxlICBkbWEKKwlpZiAoKGFzeW5jLT5ldmVudHMgJiBDT01FRElfQ0JfRU9BKSA9PSAwKSB7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY2hhbiwKKwkJCWRldnByaXYtPmRtYV9idWZmZXJfYWRkcltkZXZwcml2LT5jdXJyZW50X2J1ZmZlcl0pOworCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYV9jaGFuLCBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSk7CisJCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCQkvKiByZWVuYWJsZSBjb252ZXJzaW9ucyBmb3IgZGFzMTYwMCBtb2RlLCAoc3R1cGlkIGhhcmR3YXJlKSAqLworCQlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDAgJiYgZGV2cHJpdi0+dGltZXJfbW9kZSA9PSAwKSB7CisJCQlvdXRiKDB4MDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9DT05WKTsKKwkJfQorCX0KKwlyZWxlYXNlX2RtYV9sb2NrKGRtYV9mbGFncyk7CisKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgc3Bpbl9mbGFncyk7CisKKwljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsCisJCWRldnByaXYtPmRtYV9idWZmZXJbYnVmZmVyX2luZGV4XSwgbnVtX2J5dGVzKTsKKworCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFzMTZfc2V0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbnMsCisJaW50IHJvdW5kaW5nX2ZsYWdzKQoreworCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihkZXZwcml2LT5jbG9ja2Jhc2UsICYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJm5zLCByb3VuZGluZ19mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisKKwkvKiBXcml0ZSB0aGUgdmFsdWVzIG9mIGN0cjEgYW5kIGN0cjIgaW50byBjb3VudGVycyAxIGFuZCAyICovCisJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE2X0NOVFIwX0RBVEEsIDAsIDEsIGRldnByaXYtPmRpdmlzb3IxLCAyKTsKKwlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTMTZfQ05UUjBfREFUQSwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIsIDIpOworCisJcmV0dXJuIG5zOworfQorCitzdGF0aWMgdm9pZCByZWdfZHVtcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlERUJVR19QUklOVCgiKioqKioqKipEQVMxNjAwIFJFR0lTVEVSIERVTVAqKioqKioqKlxuIik7CisJREVCVUdfUFJJTlQoIkRBUzE2X01VWDogJXhcbiIsIGluYihkZXYtPmlvYmFzZSArIERBUzE2X01VWCkpOworCURFQlVHX1BSSU5UKCJEQVMxNl9ESU86ICV4XG4iLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9ESU8pKTsKKwlERUJVR19QUklOVCgiREFTMTZfU1RBVFVTOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2X0NPTlRST0w6ICV4XG4iLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9DT05UUk9MKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2X1BBQ0VSOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTZfUEFDRVIpKTsKKwlERUJVR19QUklOVCgiREFTMTZfR0FJTjogJXhcbiIsIGluYihkZXYtPmlvYmFzZSArIERBUzE2X0dBSU4pKTsKKwlERUJVR19QUklOVCgiREFTMTZfQ05UUl9DT05UUk9MOiAleFxuIiwKKwkJaW5iKGRldi0+aW9iYXNlICsgREFTMTZfQ05UUl9DT05UUk9MKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2MDBfQ09OVjogJXhcbiIsIGluYihkZXYtPmlvYmFzZSArIERBUzE2MDBfQ09OVikpOworCURFQlVHX1BSSU5UKCJEQVMxNjAwX0JVUlNUOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCkpOworCURFQlVHX1BSSU5UKCJEQVMxNjAwX0VOQUJMRTogJXhcbiIsIGluYihkZXYtPmlvYmFzZSArIERBUzE2MDBfRU5BQkxFKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2MDBfU1RBVFVTX0I6ICV4XG4iLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX1NUQVRVU19CKSk7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHN0YXR1czsKKwlpbnQgZGlvYml0czsKKworCS8qIHN0YXR1cyBpcyBhdmFpbGFibGUgb24gYWxsIGJvYXJkcyAqLworCisJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKTsKKworCWlmICgoc3RhdHVzICYgVU5JUE9MQVIpKSB7CisJCWRldnByaXYtPmFpX3VuaXBvbGFyID0gMTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5haV91bmlwb2xhciA9IDA7CisJfQorCisJaWYgKChzdGF0dXMgJiBEQVMxNl9NVVhCSVQpKSB7CisJCWRldnByaXYtPmFpX3NpbmdsZWVuZGVkID0gMTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5haV9zaW5nbGVlbmRlZCA9IDA7CisJfQorCisJLyogZGlvYml0cyBpbmRpY2F0ZXMgYm9hcmRzICovCisKKwlkaW9iaXRzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTZfRElPKSAmIDB4ZjA7CisKKwlwcmludGsoIiBpZCBiaXRzIGFyZSAweCUwMnhcbiIsIGRpb2JpdHMpOworCWlmICh0aGlzYm9hcmQtPmlkICE9IGRpb2JpdHMpIHsKKwkJcHJpbnRrKCIgcmVxdWVzdGVkIGJvYXJkJ3MgaWQgYml0cyBhcmUgMHgleCAoaWdub3JlKVxuIiwKKwkJCXRoaXNib2FyZC0+aWQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2MDBfbW9kZV9kZXRlY3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX1NUQVRVU19CKTsKKworCWlmIChzdGF0dXMgJiBEQVMxNjAwX0NMS18xME1IWikgeworCQlkZXZwcml2LT5jbG9ja2Jhc2UgPSAxMDA7CisJCXByaW50aygiIDEwTUh6IHBhY2VyIGNsb2NrXG4iKTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5jbG9ja2Jhc2UgPSAxMDAwOworCQlwcmludGsoIiAxTUh6IHBhY2VyIGNsb2NrXG4iKTsKKwl9CisKKwlyZWdfZHVtcChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKgorICogT3B0aW9ucyBsaXN0OgorICogICAwICBJL08gYmFzZQorICogICAxICBJUlEKKyAqICAgMiAgRE1BCisgKiAgIDMgIENsb2NrIHNwZWVkIChpbiBNSHopCisgKi8KKworc3RhdGljIGludCBkYXMxNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBkbWFfY2hhbjsKKwlpbnQgdGltZXJfbW9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjb21lZGlfa3JhbmdlICp1c2VyX2FpX3JhbmdlLCAqdXNlcl9hb19yYW5nZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworI2lmIDAKKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwl0aW1lcl9tb2RlID0gaXQtPm9wdGlvbnNbOF07CisjZW5kaWYKKwkvKiBhbHdheXMgdXNlIHRpbWVfbW9kZSBzaW5jZSB1c2luZyBpcnEgY2FuIGRyb3Agc2FtcGxlcyB3aGlsZQorCSAqIHdhaXRpbmcgZm9yIGRtYSBkb25lIGludGVycnVwdCAoZHVlIHRvIGhhcmR3YXJlIGxpbWl0YXRpb25zKSAqLworCWlycSA9IDA7CisJdGltZXJfbW9kZSA9IDE7CisJaWYgKHRpbWVyX21vZGUpCisJCWlycSA9IDA7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXMxNjoiLCBkZXYtPm1pbm9yKTsKKworCS8vIGNoZWNrIHRoYXQgY2xvY2sgc2V0dGluZyBpcyB2YWxpZAorCWlmIChpdC0+b3B0aW9uc1szXSkgeworCQlpZiAoaXQtPm9wdGlvbnNbM10gIT0gMCAmJgorCQkJaXQtPm9wdGlvbnNbM10gIT0gMSAmJiBpdC0+b3B0aW9uc1szXSAhPSAxMCkgeworCQkJcHJpbnRrKCJcbiBJbnZhbGlkIG9wdGlvbi4gIE1hc3RlciBjbG9jayBtdXN0IGJlIHNldCB0byAxIG9yIDEwIChNSHopXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkYXMxNl9wcml2YXRlX3N0cnVjdCkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAodGhpc2JvYXJkLT5zaXplIDwgMHg0MDApIHsKKwkJcHJpbnRrKCIgMHglMDRseC0weCUwNGx4XG4iLCBpb2Jhc2UsIGlvYmFzZSArIHRoaXNib2FyZC0+c2l6ZSk7CisJCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCB0aGlzYm9hcmQtPnNpemUsICJkYXMxNiIpKSB7CisJCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50aygiIDB4JTA0bHgtMHglMDRseCAweCUwNGx4LTB4JTA0bHhcbiIsCisJCQlpb2Jhc2UsIGlvYmFzZSArIDB4MGYsCisJCQlpb2Jhc2UgKyAweDQwMCwKKwkJCWlvYmFzZSArIDB4NDAwICsgKHRoaXNib2FyZC0+c2l6ZSAmIDB4M2ZmKSk7CisJCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCAweDEwLCAiZGFzMTYiKSkgeworCQkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3Q6ICAweCUwNGx4LTB4JTA0bHhcbiIsCisJCQkJaW9iYXNlLCBpb2Jhc2UgKyAweDBmKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlICsgMHg0MDAsIHRoaXNib2FyZC0+c2l6ZSAmIDB4M2ZmLAorCQkJCSJkYXMxNiIpKSB7CisJCQlyZWxlYXNlX3JlZ2lvbihpb2Jhc2UsIDB4MTApOworCQkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3Q6ICAweCUwNGx4LTB4JTA0bHhcbiIsCisJCQkJaW9iYXNlICsgMHg0MDAsCisJCQkJaW9iYXNlICsgMHg0MDAgKyAodGhpc2JvYXJkLT5zaXplICYgMHgzZmYpKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvLyBwcm9iZSBpZCBiaXRzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBjb25zaXN0ZW50CisJaWYgKGRhczE2X3Byb2JlKGRldiwgaXQpKSB7CisJCXByaW50aygiIGlkIGJpdHMgZG8gbm90IG1hdGNoIHNlbGVjdGVkIGJvYXJkLCBhYm9ydGluZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwkvLyBnZXQgbWFzdGVyIGNsb2NrIHNwZWVkCisJaWYgKHRoaXNib2FyZC0+c2l6ZSA8IDB4NDAwKSB7CisJCWlmIChpdC0+b3B0aW9uc1szXSkKKwkJCWRldnByaXYtPmNsb2NrYmFzZSA9IDEwMDAgLyBpdC0+b3B0aW9uc1szXTsKKwkJZWxzZQorCQkJZGV2cHJpdi0+Y2xvY2tiYXNlID0gMTAwMDsJLy8gMSBNSHogZGVmYXVsdAorCX0gZWxzZSB7CisJCWRhczE2MDBfbW9kZV9kZXRlY3QoZGV2KTsKKwl9CisKKwkvKiBub3cgZm9yIHRoZSBpcnEgKi8KKwlpZiAoaXJxID4gMSAmJiBpcnEgPCA4KSB7CisJCWlmICgocmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgZGFzMTZfZG1hX2ludGVycnVwdCwgMCwKKwkJCQkJImRhczE2IiwgZGV2KSkgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZGV2LT5pcnEgPSBpcnE7CisJCXByaW50aygiICggaXJxID0gJXUgKSIsIGlycSk7CisJfSBlbHNlIGlmIChpcnEgPT0gMCkgeworCQlwcmludGsoIiAoIG5vIGlycSApIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgaW52YWxpZCBpcnFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyBpbml0aWFsaXplIGRtYQorCWRtYV9jaGFuID0gaXQtPm9wdGlvbnNbMl07CisJaWYgKGRtYV9jaGFuID09IDEgfHwgZG1hX2NoYW4gPT0gMykgeworCQkvLyBhbGxvY2F0ZSBkbWEgYnVmZmVycworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJZGV2cHJpdi0+ZG1hX2J1ZmZlcltpXSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KE5VTEwsCisJCQkJREFTMTZfRE1BX1NJWkUsICZkZXZwcml2LT5kbWFfYnVmZmVyX2FkZHJbaV0pOworCQkJaWYgKGRldnByaXYtPmRtYV9idWZmZXJbaV0gPT0gTlVMTCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlpZiAocmVxdWVzdF9kbWEoZG1hX2NoYW4sICJkYXMxNiIpKSB7CisJCQlwcmludGsoIiBmYWlsZWQgdG8gYWxsb2NhdGUgZG1hIGNoYW5uZWwgJWlcbiIsCisJCQkJZG1hX2NoYW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGV2cHJpdi0+ZG1hX2NoYW4gPSBkbWFfY2hhbjsKKwkJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWFfY2hhbiwgRE1BX01PREVfUkVBRCk7CisJCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCQlwcmludGsoIiAoIGRtYSA9ICV1KVxuIiwgZG1hX2NoYW4pOworCX0gZWxzZSBpZiAoZG1hX2NoYW4gPT0gMCkgeworCQlwcmludGsoIiAoIG5vIGRtYSApXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiBpbnZhbGlkIGRtYSBjaGFubmVsXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLy8gZ2V0IGFueSB1c2VyLWRlZmluZWQgaW5wdXQgcmFuZ2UKKwlpZiAodGhpc2JvYXJkLT5haV9wZyA9PSBkYXMxNl9wZ19ub25lICYmCisJCShpdC0+b3B0aW9uc1s0XSB8fCBpdC0+b3B0aW9uc1s1XSkpIHsKKwkJLy8gYWxsb2NhdGUgc2luZ2xlLXJhbmdlIHJhbmdlIHRhYmxlCisJCWRldnByaXYtPnVzZXJfYWlfcmFuZ2VfdGFibGUgPQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9scmFuZ2UpICsgc2l6ZW9mKHN0cnVjdCBjb21lZGlfa3JhbmdlKSwKKwkJCUdGUF9LRVJORUwpOworCQkvLyBpbml0aWFsaXplIGFpIHJhbmdlCisJCWRldnByaXYtPnVzZXJfYWlfcmFuZ2VfdGFibGUtPmxlbmd0aCA9IDE7CisJCXVzZXJfYWlfcmFuZ2UgPSBkZXZwcml2LT51c2VyX2FpX3JhbmdlX3RhYmxlLT5yYW5nZTsKKwkJdXNlcl9haV9yYW5nZS0+bWluID0gaXQtPm9wdGlvbnNbNF07CisJCXVzZXJfYWlfcmFuZ2UtPm1heCA9IGl0LT5vcHRpb25zWzVdOworCQl1c2VyX2FpX3JhbmdlLT5mbGFncyA9IFVOSVRfdm9sdDsKKwl9CisJLy8gZ2V0IGFueSB1c2VyLWRlZmluZWQgb3V0cHV0IHJhbmdlCisJaWYgKGl0LT5vcHRpb25zWzZdIHx8IGl0LT5vcHRpb25zWzddKSB7CisJCS8vIGFsbG9jYXRlIHNpbmdsZS1yYW5nZSByYW5nZSB0YWJsZQorCQlkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlID0KKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21lZGlfbHJhbmdlKSArIHNpemVvZihzdHJ1Y3QgY29tZWRpX2tyYW5nZSksCisJCQlHRlBfS0VSTkVMKTsKKwkJLy8gaW5pdGlhbGl6ZSBhbyByYW5nZQorCQlkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlLT5sZW5ndGggPSAxOworCQl1c2VyX2FvX3JhbmdlID0gZGV2cHJpdi0+dXNlcl9hb19yYW5nZV90YWJsZS0+cmFuZ2U7CisJCXVzZXJfYW9fcmFuZ2UtPm1pbiA9IGl0LT5vcHRpb25zWzZdOworCQl1c2VyX2FvX3JhbmdlLT5tYXggPSBpdC0+b3B0aW9uc1s3XTsKKwkJdXNlcl9hb19yYW5nZS0+ZmxhZ3MgPSBVTklUX3ZvbHQ7CisJfQorCisJaWYgKHRpbWVyX21vZGUpIHsKKwkJaW5pdF90aW1lcigmKGRldnByaXYtPnRpbWVyKSk7CisJCWRldnByaXYtPnRpbWVyLmZ1bmN0aW9uID0gZGFzMTZfdGltZXJfaW50ZXJydXB0OworCQlkZXZwcml2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCX0KKwlkZXZwcml2LT50aW1lcl9tb2RlID0gdGltZXJfbW9kZSA/IDEgOiAwOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCS8qIGFpICovCisJaWYgKHRoaXNib2FyZC0+YWkpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQ7CisJCWlmIChkZXZwcml2LT5haV9zaW5nbGVlbmRlZCkgeworCQkJcy0+bl9jaGFuID0gMTY7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSAxNjsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfR1JPVU5EOworCQl9IGVsc2UgeworCQkJcy0+bl9jaGFuID0gODsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0RJRkY7CisJCX0KKwkJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YWlfbmJpdHMpIC0gMTsKKwkJaWYgKGRldnByaXYtPnVzZXJfYWlfcmFuZ2VfdGFibGUpIHsJLy8gdXNlciBkZWZpbmVkIGFpIHJhbmdlCisJCQlzLT5yYW5nZV90YWJsZSA9IGRldnByaXYtPnVzZXJfYWlfcmFuZ2VfdGFibGU7CisJCX0gZWxzZSBpZiAoZGV2cHJpdi0+YWlfdW5pcG9sYXIpIHsKKwkJCXMtPnJhbmdlX3RhYmxlID0gZGFzMTZfYWlfdW5pX2xyYW5nZXNbdGhpc2JvYXJkLT5haV9wZ107CisJCX0gZWxzZSB7CisJCQlzLT5yYW5nZV90YWJsZSA9IGRhczE2X2FpX2JpcF9scmFuZ2VzW3RoaXNib2FyZC0+YWlfcGddOworCQl9CisJCXMtPmluc25fcmVhZCA9IHRoaXNib2FyZC0+YWk7CisJCXMtPmRvX2NtZHRlc3QgPSBkYXMxNl9jbWRfdGVzdDsKKwkJcy0+ZG9fY21kID0gZGFzMTZfY21kX2V4ZWM7CisJCXMtPmNhbmNlbCA9IGRhczE2X2NhbmNlbDsKKwkJcy0+bXVuZ2UgPSBkYXMxNl9haV9tdW5nZTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFvICovCisJaWYgKHRoaXNib2FyZC0+YW8pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IDI7CisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX25iaXRzKSAtIDE7CisJCWlmIChkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlKSB7CS8vIHVzZXIgZGVmaW5lZCBhbyByYW5nZQorCQkJcy0+cmFuZ2VfdGFibGUgPSBkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlOworCQl9IGVsc2UgeworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJfQorCQlzLT5pbnNuX3dyaXRlID0gdGhpc2JvYXJkLT5hbzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpICovCisJaWYgKHRoaXNib2FyZC0+ZGkpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJCXMtPm5fY2hhbiA9IDQ7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSB0aGlzYm9hcmQtPmRpOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJLyogZG8gKi8KKwlpZiAodGhpc2JvYXJkLT5kb18pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJCXMtPm5fY2hhbiA9IDQ7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSB0aGlzYm9hcmQtPmRvXzsKKwkJLy8gaW5pdGlhbGl6ZSBkaWdpdGFsIG91dHB1dCBsaW5lcworCQlvdXRiKHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X0RJTyk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwkvKiA4MjU1ICovCisJaWYgKHRoaXNib2FyZC0+aTgyNTVfb2Zmc2V0ICE9IDApIHsKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIChkZXYtPmlvYmFzZSArCisJCQkJdGhpc2JvYXJkLT5pODI1NV9vZmZzZXQpKTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCWRhczE2X3Jlc2V0KGRldik7CisJLyogc2V0IHRoZSBpbnRlcnJ1cHQgbGV2ZWwgKi8KKwlkZXZwcml2LT5jb250cm9sX3N0YXRlID0gREFTMTZfSVJRKGRldi0+aXJxKTsKKwlvdXRiKGRldnByaXYtPmNvbnRyb2xfc3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZfQ09OVFJPTCk7CisKKwkvLyB0dXJuIG9uIGRhczE2MDAgbW9kZSBpZiBhdmFpbGFibGUKKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApIHsKKwkJb3V0YihEQVMxNjAwX0VOQUJMRV9WQUwsIGRldi0+aW9iYXNlICsgREFTMTYwMF9FTkFCTEUpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9DT05WKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2MDBfQlVSU1QpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkYXMxNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWRhczE2X3Jlc2V0KGRldik7CisKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgNCk7CisKKwlpZiAoZGV2cHJpdikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJaWYgKGRldnByaXYtPmRtYV9idWZmZXJbaV0pCisJCQkJcGNpX2ZyZWVfY29uc2lzdGVudChOVUxMLCBEQVMxNl9ETUFfU0laRSwKKwkJCQkJZGV2cHJpdi0+ZG1hX2J1ZmZlcltpXSwKKwkJCQkJZGV2cHJpdi0+ZG1hX2J1ZmZlcl9hZGRyW2ldKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+ZG1hX2NoYW4pCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJCWlmIChkZXZwcml2LT51c2VyX2FpX3JhbmdlX3RhYmxlKQorCQkJa2ZyZWUoZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZSk7CisJCWlmIChkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlKQorCQkJa2ZyZWUoZGV2cHJpdi0+dXNlcl9hb19yYW5nZV90YWJsZSk7CisJfQorCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJaWYgKHRoaXNib2FyZC0+c2l6ZSA8IDB4NDAwKSB7CisJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc2JvYXJkLT5zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCAweDEwKTsKKwkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlICsgMHg0MDAsCisJCQkJdGhpc2JvYXJkLT5zaXplICYgMHgzZmYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzMTYpOworCisvLyB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgc3VnZ2VzdHMgYSBkbWEgdHJhbnNmZXIgc2l6ZSBpbiBieXRlcworc3RhdGljIHVuc2lnbmVkIGludCBkYXMxNl9zdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9jbWQgY21kKQoreworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGludCBmcmVxOworCisJLyogaWYgd2UgYXJlIHVzaW5nIHRpbWVyIGludGVycnVwdCwgd2UgZG9uJ3QgY2FyZSBob3cgbG9uZyBpdAorCSAqIHdpbGwgdGFrZSB0byBjb21wbGV0ZSB0cmFuc2ZlciBzaW5jZSBpdCB3aWxsIGJlIGludGVycnVwdGVkCisJICogYnkgdGltZXIgaW50ZXJydXB0ICovCisJaWYgKGRldnByaXYtPnRpbWVyX21vZGUpCisJCXJldHVybiBEQVMxNl9ETUFfU0laRTsKKworCS8qIG90aGVyd2lzZSwgd2UgYXJlIHJlbHlpbmcgb24gZG1hIHRlcm1pbmFsIGNvdW50IGludGVycnVwdCwKKwkgKiBzbyBwaWNrIGEgcmVhc29uYWJsZSBzaXplICovCisJaWYgKGNtZC5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQorCQlmcmVxID0gMTAwMDAwMDAwMCAvIGNtZC5jb252ZXJ0X2FyZzsKKwllbHNlIGlmIChjbWQuc2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJZnJlcSA9ICgxMDAwMDAwMDAwIC8gY21kLnNjYW5fYmVnaW5fYXJnKSAqIGNtZC5jaGFubGlzdF9sZW47CisJLy8gcmV0dXJuIHNvbWUgZGVmYXVsdCB2YWx1ZQorCWVsc2UKKwkJZnJlcSA9IDB4ZmZmZmZmZmY7CisKKwlpZiAoY21kLmZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQlzaXplID0gc2FtcGxlX3NpemUgKiBjbWQuY2hhbmxpc3RfbGVuOworCX0gZWxzZSB7CisJCS8vIG1ha2UgYnVmZmVyIGZpbGwgaW4gbm8gbW9yZSB0aGFuIDEvMyBzZWNvbmQKKwkJc2l6ZSA9IChmcmVxIC8gMykgKiBzYW1wbGVfc2l6ZTsKKwl9CisKKwkvLyBzZXQgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemUgYWxsb3dlZAorCWlmIChzaXplID4gREFTMTZfRE1BX1NJWkUpCisJCXNpemUgPSBEQVMxNl9ETUFfU0laRSAtIERBUzE2X0RNQV9TSVpFICUgc2FtcGxlX3NpemU7CisJZWxzZSBpZiAoc2l6ZSA8IHNhbXBsZV9zaXplKQorCQlzaXplID0gc2FtcGxlX3NpemU7CisKKwlpZiAoY21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgc2l6ZSA+IGRldnByaXYtPmFkY19ieXRlX2NvdW50KQorCQlzaXplID0gZGV2cHJpdi0+YWRjX2J5dGVfY291bnQ7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgZGFzMTZfYWlfbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICphcnJheSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5faW5kZXgpCit7CisJdW5zaWduZWQgaW50IGksIG51bV9zYW1wbGVzID0gbnVtX2J5dGVzIC8gc2l6ZW9mKHNob3J0KTsKKwlzaG9ydCAqZGF0YSA9IGFycmF5OworCisJZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsKKwkJZGF0YVtpXSA9IGxlMTZfdG9fY3B1KGRhdGFbaV0pOworCQlpZiAodGhpc2JvYXJkLT5haV9uYml0cyA9PSAxMikgeworCQkJZGF0YVtpXSA9IChkYXRhW2ldID4+IDQpICYgMHhmZmY7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2bTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTQyM2UxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2bTEuYwpAQCAtMCwwICsxLDc2NSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kYXMxNm0xLmMKKyAgICBDSU8tREFTMTYvTTEgZHJpdmVyCisgICAgQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MsIGJhc2VkIG9uIGNvZGUgZnJvbSB0aGUgZGFzMTYKKyAgICAgIGRyaXZlci4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisvKgorRHJpdmVyOiBkYXMxNm0xCitEZXNjcmlwdGlvbjogQ0lPLURBUzE2L00xCitBdXRob3I6IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RldmljZXM6IFtNZWFzdXJlbWVudCBDb21wdXRpbmddIENJTy1EQVMxNi9NMSAoY2lvLWRhczE2L20xKQorU3RhdHVzOiB3b3JrcworCitUaGlzIGRyaXZlciBzdXBwb3J0cyBhIHNpbmdsZSBib2FyZCAtIHRoZSBDSU8tREFTMTYvTTEuCitBcyBmYXIgYXMgSSBrbm93LCB0aGVyZSBhcmUgbm8gb3RoZXIgYm9hcmRzIHRoYXQgaGF2ZQordGhlIHNhbWUgcmVnaXN0ZXIgbGF5b3V0LiAgRXZlbiB0aGUgQ0lPLURBUzE2L00xLzE2IGlzCitzaWduaWZpY2FudGx5IGRpZmZlcmVudC4KKworSSB3YXMgX2JhcmVseV8gYWJsZSB0byByZWFjaCB0aGUgZnVsbCAxIE1IeiBjYXBhYmlsaXR5CitvZiB0aGlzIGJvYXJkLCB1c2luZyBhIGhhcmQgcmVhbC10aW1lIGludGVycnVwdAorKHNldCB0aGUgVFJJR19SVCBmbGFnIGluIHlvdXIgc3RydWN0IGNvbWVkaV9jbWQgYW5kIHVzZQorcnRsaW51eCBvciBSVEFJKS4gIFRoZSBib2FyZCBjYW4ndCBkbyBkbWEsIHNvIHRoZSBib3R0bGVuZWNrIGlzCitwdWxsaW5nIHRoZSBkYXRhIGFjcm9zcyB0aGUgSVNBIGJ1cy4gIEkgdGltZWQgdGhlIGludGVycnVwdAoraGFuZGxlciwgYW5kIGl0IHRvb2sgbXkgY29tcHV0ZXIgfjQ3MCBtaWNyb3NlY29uZHMgdG8gcHVsbCA1MTIKK3NhbXBsZXMgZnJvbSB0aGUgYm9hcmQuICBTbyBhdCAxIE1oeiBzYW1wbGluZyByYXRlLAorZXhwZWN0IHlvdXIgQ1BVIHRvIGJlIHNwZW5kaW5nIGFsbW9zdCBhbGwgb2YgaXRzCit0aW1lIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKworVGhpcyBib2FyZCBoYXMgc29tZSB1bnVzdWFsIHJlc3RyaWN0aW9ucyBmb3IgaXRzIGNoYW5uZWwvZ2FpbiBsaXN0LiAgSWYgdGhlCitsaXN0IGhhcyAyIG9yIG1vcmUgY2hhbm5lbHMgaW4gaXQsIHRoZW4gdHdvIGNvbmRpdGlvbnMgbXVzdCBiZSBzYXRpc2ZpZWQ6CisoMSkgLSBldmVuL29kZCBjaGFubmVscyBtdXN0IGFwcGVhciBhdCBldmVuL29kZCBpbmRpY2VzIGluIHRoZSBsaXN0CisoMikgLSB0aGUgbGlzdCBtdXN0IGhhdmUgYW4gZXZlbiBudW1iZXIgb2YgZW50cmllcy4KKworT3B0aW9uczoKKyAgICAgICAgWzBdIC0gYmFzZSBpbyBhZGRyZXNzCisgICAgICAgIFsxXSAtIGlycSAob3B0aW9uYWwsIGJ1dCB5b3UgcHJvYmFibHkgd2FudCBpdCkKKworaXJxIGNhbiBiZSBvbWl0dGVkLCBhbHRob3VnaCB0aGUgY21kIGludGVyZmFjZSB3aWxsIG5vdCB3b3JrIHdpdGhvdXQgaXQuCisqLworCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisjZGVmaW5lIERBUzE2TTFfU0laRSAxNgorI2RlZmluZSBEQVMxNk0xX1NJWkUyIDgKKworI2RlZmluZSBEQVMxNk0xX1hUQUwgMTAwCS8vMTAgTUh6IG1hc3RlciBjbG9jaworCisjZGVmaW5lIEZJRk9fU0laRSAxMDI0CQkvLyAxMDI0IHNhbXBsZSBmaWZvCisKKy8qCisgICAgQ0lPLURBUzE2X00xLnBkZgorCisgICAgImNpby1kYXMxNi9tMSIKKworICAwCWEvZCBiaXRzIDAtMywgbXV4CQlzdGFydCAxMiBiaXQKKyAgMQlhL2QgYml0cyA0LTExCQl1bnVzZWQKKyAgMglzdGF0dXMJCWNvbnRyb2wKKyAgMwlkaSA0IGJpdAkJZG8gNCBiaXQKKyAgNAl1bnVzZWQJCQljbGVhciBpbnRlcnJ1cHQKKyAgNQlpbnRlcnJ1cHQsIHBhY2VyCisgIDYJY2hhbm5lbC9nYWluIHF1ZXVlIGFkZHJlc3MKKyAgNwljaGFubmVsL2dhaW4gcXVldWUgZGF0YQorICA4OWFiCTgyNTQKKyAgY2RlZgk4MjU0CisgIDQwMAk4MjU1CisgIDQwNC00MDcgCTgyNTQKKworKi8KKworI2RlZmluZSBEQVMxNk0xX0FJICAgICAgICAgICAgIDAJLy8gMTYtYml0IHdpZGUgcmVnaXN0ZXIKKyNkZWZpbmUgICBBSV9DSEFOKHgpICAgICAgICAgICAgICgoeCkgJiAweGYpCisjZGVmaW5lIERBUzE2TTFfQ1MgICAgICAgICAgICAgMgorI2RlZmluZSAgIEVYVF9UUklHX0JJVCAgICAgICAgICAgMHgxCisjZGVmaW5lICAgT1ZSVU4gICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lICAgSVJRREFUQSAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIERBUzE2TTFfRElPICAgICAgICAgICAgMworI2RlZmluZSBEQVMxNk0xX0NMRUFSX0lOVFIgICAgIDQKKyNkZWZpbmUgREFTMTZNMV9JTlRSX0NPTlRST0wgICA1CisjZGVmaW5lICAgRVhUX1BBQ0VSICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgICBJTlRfUEFDRVIgICAgICAgICAgICAgIDB4MworI2RlZmluZSAgIFBBQ0VSX01BU0sgICAgICAgICAgICAgMHgzCisjZGVmaW5lICAgSU5URSAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIERBUzE2TTFfUVVFVUVfQUREUiAgICAgNgorI2RlZmluZSBEQVMxNk0xX1FVRVVFX0RBVEEgICAgIDcKKyNkZWZpbmUgICBRX0NIQU4oeCkgICAgICAgICAgICAgICgoeCkgJiAweDcpCisjZGVmaW5lICAgUV9SQU5HRSh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgICBVTklQT0xBUiAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgREFTMTZNMV84MjU0X0ZJUlNUICAgICAgICAgICAgIDB4OAorI2RlZmluZSBEQVMxNk0xXzgyNTRfRklSU1RfQ05UUkwgICAgICAgMHhiCisjZGVmaW5lICAgVE9UQUxfQ0xFQVIgICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgREFTMTZNMV84MjU0X1NFQ09ORCAgICAgICAgICAgIDB4YworI2RlZmluZSBEQVMxNk0xXzgyQzU1ICAgICAgICAgICAgICAgICAgMHg0MDAKKyNkZWZpbmUgREFTMTZNMV84MjU0X1RISVJEICAgICAgICAgICAgIDB4NDA0CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXMxNm0xID0geyA5LAorCXsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCX0KK307CisKK3N0YXRpYyBpbnQgZGFzMTZtMV9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNm0xX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2bTFfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBkYXMxNm0xX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXMxNm0xX2NtZF9leGVjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkYXMxNm0xX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIGludCBkYXMxNm0xX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZtMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgdm9pZCBkYXMxNm0xX2hhbmRsZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBzdGF0dXMpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGRhczE2bTFfc2V0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbnMsCisJaW50IHJvdW5kX2ZsYWcpOworCitzdGF0aWMgaW50IGRhczE2bTFfaXJxX2JpdHModW5zaWduZWQgaW50IGlycSk7CisKK3N0cnVjdCBkYXMxNm0xX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBhaV9zcGVlZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFzMTZtMV9ib2FyZCBkYXMxNm0xX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2L20xIiwJLy8gQ0lPLURBUzE2X00xLnBkZgorCSAgICAgIGFpX3NwZWVkOjEwMDAsCS8vIDFNSHogbWF4IHNwZWVkCisJCX0sCit9OworCisjZGVmaW5lIGRhczE2bTFfbnVtX2JvYXJkcyAoKHNpemVvZihkYXMxNm0xX2JvYXJkcykpIC8gKHNpemVvZihkYXMxNm0xX2JvYXJkc1swXSkpKQorCitzdGF0aWMgaW50IGRhczE2bTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFzMTZtMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXMxNm0xID0geworICAgICAgZHJpdmVyX25hbWU6ImRhczE2bTEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczE2bTFfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhczE2bTFfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomZGFzMTZtMV9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpkYXMxNm0xX251bV9ib2FyZHMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKGRhczE2bTFfYm9hcmRzWzBdKSwKK307CisKK3N0cnVjdCBkYXMxNm0xX3ByaXZhdGVfc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYWRjX2NvdW50OwkvLyBudW1iZXIgb2Ygc2FtcGxlcyBjb21wbGV0ZWQKKwkvKiBpbml0aWFsIHZhbHVlIGluIGxvd2VyIGhhbGYgb2YgaGFyZHdhcmUgY29udmVyc2lvbiBjb3VudGVyLAorCSAqIG5lZWRlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgbmV3IGNvdW50IGhhcyBiZWVuIGxvYWRlZCBpbnRvCisJICogY291bnRlciB5ZXQgKGxvYWRlZCBieSBmaXJzdCBzYW1wbGUgY29udmVyc2lvbikgKi8KKwl1MTYgaW5pdGlhbF9od19jb3VudDsKKwlzaG9ydCBhaV9idWZmZXJbRklGT19TSVpFXTsKKwl1bnNpZ25lZCBpbnQgZG9fYml0czsJLy8gc2F2ZXMgc3RhdHVzIG9mIGRpZ2l0YWwgb3V0cHV0IGJpdHMKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjE7CS8vIGRpdmlkZXMgbWFzdGVyIGNsb2NrIHRvIG9idGFpbiBjb252ZXJzaW9uIHNwZWVkCisJdW5zaWduZWQgaW50IGRpdmlzb3IyOwkvLyBkaXZpZGVzIG1hc3RlciBjbG9jayB0byBvYnRhaW4gY29udmVyc2lvbiBzcGVlZAorfTsKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXMxNm0xX3ByaXZhdGVfc3RydWN0ICopKGRldi0+cHJpdmF0ZSkpCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkYXMxNm0xX2JvYXJkICopKGRldi0+Ym9hcmRfcHRyKSkKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMxNm0xKTsKKworc3RhdGljIGlubGluZSBzaG9ydCBtdW5nZV9zYW1wbGUoc2hvcnQgZGF0YSkKK3sKKwlyZXR1cm4gKGRhdGEgPj4gNCkgJiAweGZmZjsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdW5zaWduZWQgaW50IGVyciA9IDAsIHRtcCwgaTsKKworCS8qIG1ha2Ugc3VyZSB0cmlnZ2VycyBhcmUgdmFsaWQgKi8KKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJLyogaW50ZXJuYWwgdHJpZ2dlciAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkvKiBhbnkgY291bnQgaXMgYWxsb3dlZCAqLworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJLyogY2FsY3VsYXRlIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHRpbWluZyAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoREFTMTZNMV9YVEFMLAorCQkJJihkZXZwcml2LT5kaXZpc29yMSksICYoZGV2cHJpdi0+ZGl2aXNvcjIpLAorCQkJJihjbWQtPmNvbnZlcnRfYXJnKSwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLy8gY2hlY2sgY2hhbmxpc3QgYWdhaW5zdCBib2FyZCdzIHBlY3VsaWFyaXRpZXMKKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCS8vIGV2ZW4vb2RkIGNoYW5uZWxzIG11c3QgZ28gaW50byBldmVuL29kZCBxdWV1ZSBhZGRyZXNzZXMKKwkJCWlmICgoaSAlIDIpICE9IChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICUgMikpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiYmFkIGNoYW5saXN0OlxuIgorCQkJCQkiIGV2ZW4vb2RkIGNoYW5uZWxzIG11c3QgZ28gaGF2ZSBldmVuL29kZCBjaGFubGlzdCBpbmRpY2VzIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwkJaWYgKChjbWQtPmNoYW5saXN0X2xlbiAlIDIpICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJImNoYW5saXN0IG11c3QgYmUgb2YgZXZlbiBsZW5ndGggb3IgbGVuZ3RoIDEiKTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2NtZF9leGVjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IGJ5dGUsIGk7CisKKwlpZiAoZGV2LT5pcnEgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiaXJxIHJlcXVpcmVkIHRvIGV4ZWN1dGUgY29tZWRpX2NtZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBpbnRlcm5hbCBwYWNlciAqLworCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgJj0gfklOVEUgJiB+UEFDRVJfTUFTSzsKKwlvdXRiKGRldnByaXYtPmNvbnRyb2xfc3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZNMV9JTlRSX0NPTlRST0wpOworCisJLy8gc2V0IHNvZnR3YXJlIGNvdW50CisJZGV2cHJpdi0+YWRjX2NvdW50ID0gMDsKKwkvKiBJbml0aWFsaXplIGxvd2VyIGhhbGYgb2YgaGFyZHdhcmUgY291bnRlciwgdXNlZCB0byBkZXRlcm1pbmUgaG93CisJICogbWFueSBzYW1wbGVzIGFyZSBpbiBmaWZvLiAgVmFsdWUgZG9lc24ndCBhY3R1YWxseSBsb2FkIGludG8gY291bnRlcgorCSAqIHVudGlsIGNvdW50ZXIncyBuZXh0IGNsb2NrICh0aGUgbmV4dCBhL2QgY29udmVyc2lvbikgKi8KKwlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTMTZNMV84MjU0X0ZJUlNULCAwLCAxLCAwLCAyKTsKKwkvKiByZW1lbWJlciBjdXJyZW50IHJlYWRpbmcgb2YgY291bnRlciBzbyB3ZSBrbm93IHdoZW4gY291bnRlciBoYXMKKwkgKiBhY3R1YWxseSBiZWVuIGxvYWRlZCAqLworCWRldnByaXYtPmluaXRpYWxfaHdfY291bnQgPQorCQlpODI1NF9yZWFkKGRldi0+aW9iYXNlICsgREFTMTZNMV84MjU0X0ZJUlNULCAwLCAxKTsKKwkvKiBzZXR1cCBjaGFubmVsL2dhaW4gcXVldWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQlvdXRiKGksIGRldi0+aW9iYXNlICsgREFTMTZNMV9RVUVVRV9BRERSKTsKKwkJYnl0ZSA9IFFfQ0hBTihDUl9DSEFOKGNtZC0+CisJCQkJY2hhbmxpc3RbaV0pKSB8IFFfUkFOR0UoQ1JfUkFOR0UoY21kLT4KKwkJCQljaGFubGlzdFtpXSkpOworCQlvdXRiKGJ5dGUsIGRldi0+aW9iYXNlICsgREFTMTZNMV9RVUVVRV9EQVRBKTsKKwl9CisKKwkvKiBzZXQgY291bnRlciBtb2RlIGFuZCBjb3VudHMgKi8KKwljbWQtPmNvbnZlcnRfYXJnID0KKwkJZGFzMTZtMV9zZXRfcGFjZXIoZGV2LCBjbWQtPmNvbnZlcnRfYXJnLAorCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKworCS8vIHNldCBjb250cm9sICYgc3RhdHVzIHJlZ2lzdGVyCisJYnl0ZSA9IDA7CisJLyogaWYgd2UgYXJlIHVzaW5nIGV4dGVybmFsIHN0YXJ0IHRyaWdnZXIgKGFsc28gYm9hcmQgZGlzbGlrZXMgaGF2aW5nCisJICogYm90aCBzdGFydCBhbmQgY29udmVyc2lvbiB0cmlnZ2VycyBleHRlcm5hbCBzaW11bHRhbmVvdXNseSkgKi8KKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCQlieXRlIHw9IEVYVF9UUklHX0JJVDsKKwl9CisJb3V0YihieXRlLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfQ1MpOworCS8qIGNsZWFyIGludGVycnVwdCBiaXQgKi8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZNMV9DTEVBUl9JTlRSKTsKKworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCBpbnRlcm5hbCBwYWNlciAqLworCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflBBQ0VSX01BU0s7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlkZXZwcml2LT5jb250cm9sX3N0YXRlIHw9IElOVF9QQUNFUjsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5jb250cm9sX3N0YXRlIHw9IEVYVF9QQUNFUjsKKwl9CisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBJTlRFOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgJj0gfklOVEUgJiB+UEFDRVJfTUFTSzsKKwlvdXRiKGRldnByaXYtPmNvbnRyb2xfc3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZNMV9JTlRSX0NPTlRST0wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZtMV9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IGJ5dGU7CisJY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBpbnRlcm5hbCBwYWNlciAqLworCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgJj0gfklOVEUgJiB+UEFDRVJfTUFTSzsKKwlvdXRiKGRldnByaXYtPmNvbnRyb2xfc3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZNMV9JTlRSX0NPTlRST0wpOworCisJLyogc2V0dXAgY2hhbm5lbC9nYWluIHF1ZXVlICovCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfUVVFVUVfQUREUik7CisJYnl0ZSA9IFFfQ0hBTihDUl9DSEFOKGluc24tPmNoYW5zcGVjKSkgfCBRX1JBTkdFKENSX1JBTkdFKGluc24tPgorCQkJY2hhbnNwZWMpKTsKKwlvdXRiKGJ5dGUsIGRldi0+aW9iYXNlICsgREFTMTZNMV9RVUVVRV9EQVRBKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogY2xlYXIgSVJRREFUQSBiaXQgKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfQ0xFQVJfSU5UUik7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQlpZiAoaW5iKGRldi0+aW9iYXNlICsgREFTMTZNMV9DUykgJiBJUlFEQVRBKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IHRpbWVvdXQpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCWRhdGFbbl0gPSBtdW5nZV9zYW1wbGUoaW53KGRldi0+aW9iYXNlKSk7CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZtMV9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwliaXRzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTZNMV9ESU8pICYgMHhmOworCWRhdGFbMV0gPSBiaXRzOworCWRhdGFbMF0gPSAwOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZtMV9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IHdiaXRzOworCisJLy8gb25seSBzZXQgYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQKKwlkYXRhWzBdICY9IDB4ZjsKKwl3Yml0cyA9IGRldnByaXYtPmRvX2JpdHM7CisJLy8gemVybyBiaXRzIHRoYXQgaGF2ZSBiZWVuIG1hc2tlZAorCXdiaXRzICY9IH5kYXRhWzBdOworCS8vIHNldCBtYXNrZWQgYml0cworCXdiaXRzIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCWRldnByaXYtPmRvX2JpdHMgPSB3Yml0czsKKwlkYXRhWzFdID0gd2JpdHM7CisKKwlvdXRiKGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMTZNMV9ESU8pOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZtMV9wb2xsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJLy8gcHJldmVudCByYWNlIHdpdGggaW50ZXJydXB0IGhhbmRsZXIKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0NTKTsKKwlkYXMxNm0xX2hhbmRsZXIoZGV2LCBzdGF0dXMpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcy0+YXN5bmMtPmJ1Zl93cml0ZV9jb3VudCAtIHMtPmFzeW5jLT5idWZfcmVhZF9jb3VudDsKK30KKworc3RhdGljIGlycXJldHVybl90IGRhczE2bTFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInByZW1hdHVyZSBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwkvLyBwcmV2ZW50IHJhY2Ugd2l0aCBjb21lZGlfcG9sbCgpCisJc3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKworCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2TTFfQ1MpOworCisJaWYgKChzdGF0dXMgJiAoSVJRREFUQSB8IE9WUlVOKSkgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWRhczE2bTFfaGFuZGxlcihkZXYsIHN0YXR1cyk7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZNMV9DTEVBUl9JTlRSKTsKKworCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG11bmdlX3NhbXBsZV9hcnJheShzaG9ydCAqIGFycmF5LCB1bnNpZ25lZCBpbnQgbnVtX2VsZW1lbnRzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lbGVtZW50czsgaSsrKSB7CisJCWFycmF5W2ldID0gbXVuZ2Vfc2FtcGxlKGFycmF5W2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRhczE2bTFfaGFuZGxlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOworCXUxNiBudW1fc2FtcGxlczsKKwl1MTYgaHdfY291bnRlcjsKKworCXMgPSBkZXYtPnJlYWRfc3ViZGV2OworCWFzeW5jID0gcy0+YXN5bmM7CisJYXN5bmMtPmV2ZW50cyA9IDA7CisJY21kID0gJmFzeW5jLT5jbWQ7CisKKwkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHNhbXBsZXMgYXJlIGluIGZpZm8KKwlod19jb3VudGVyID0gaTgyNTRfcmVhZChkZXYtPmlvYmFzZSArIERBUzE2TTFfODI1NF9GSVJTVCwgMCwgMSk7CisJLyogbWFrZSBzdXJlIGhhcmR3YXJlIGNvdW50ZXIgcmVhZGluZyBpcyBub3QgYm9ndXMgZHVlIHRvIGluaXRpYWwgdmFsdWUKKwkgKiBub3QgaGF2aW5nIGJlZW4gbG9hZGVkIHlldCAqLworCWlmIChkZXZwcml2LT5hZGNfY291bnQgPT0gMCAmJiBod19jb3VudGVyID09IGRldnByaXYtPmluaXRpYWxfaHdfY291bnQpIHsKKwkJbnVtX3NhbXBsZXMgPSAwOworCX0gZWxzZSB7CisJCS8qIFRoZSBjYWxjdWxhdGlvbiBvZiBudW1fc2FtcGxlcyBsb29rcyBvZGQsIGJ1dCBpdCB1c2VzIHRoZSBmb2xsb3dpbmcgZmFjdHMuCisJCSAqIDE2IGJpdCBoYXJkd2FyZSBjb3VudGVyIGlzIGluaXRpYWxpemVkIHdpdGggdmFsdWUgb2YgemVybyAod2hpY2ggcmVhbGx5CisJCSAqIG1lYW5zIDB4MTAwMCkuICBUaGUgY291bnRlciBkZWNyZW1lbnRzIGJ5IG9uZSBvbiBlYWNoIGNvbnZlcnNpb24KKwkJICogKHdoZW4gdGhlIGNvdW50ZXIgZGVjcmVtZW50cyBmcm9tIHplcm8gaXQgZ29lcyB0byAweGZmZmYpLiAgbnVtX3NhbXBsZXMKKwkJICogaXMgYSAxNiBiaXQgdmFyaWFibGUsIHNvIGl0IHdpbGwgcm9sbCBvdmVyIGluIGEgc2ltaWxhciBmYXNoaW9uIHRvIHRoZQorCQkgKiBoYXJkd2FyZSBjb3VudGVyLiAgV29yayBpdCBvdXQsIGFuZCB0aGlzIGlzIHdoYXQgeW91IGdldC4gKi8KKwkJbnVtX3NhbXBsZXMgPSAtaHdfY291bnRlciAtIGRldnByaXYtPmFkY19jb3VudDsKKwl9CisJLy8gY2hlY2sgaWYgd2Ugb25seSBuZWVkIHNvbWUgb2YgdGhlIHBvaW50cworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKG51bV9zYW1wbGVzID4gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuKQorCQkJbnVtX3NhbXBsZXMgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJfQorCS8vIG1ha2Ugc3VyZSB3ZSBkb250IHRyeSB0byBnZXQgdG9vIG1hbnkgcG9pbnRzIGlmIGZpZm8gaGFzIG92ZXJydW4KKwlpZiAobnVtX3NhbXBsZXMgPiBGSUZPX1NJWkUpCisJCW51bV9zYW1wbGVzID0gRklGT19TSVpFOworCWluc3coZGV2LT5pb2Jhc2UsIGRldnByaXYtPmFpX2J1ZmZlciwgbnVtX3NhbXBsZXMpOworCW11bmdlX3NhbXBsZV9hcnJheShkZXZwcml2LT5haV9idWZmZXIsIG51bV9zYW1wbGVzKTsKKwljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRldnByaXYtPmFpX2J1ZmZlciwKKwkJbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKKwlkZXZwcml2LT5hZGNfY291bnQgKz0gbnVtX3NhbXBsZXM7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChkZXZwcml2LT5hZGNfY291bnQgPj0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuKSB7CS8qIGVuZCBvZiBhY3F1aXNpdGlvbiAqLworCQkJZGFzMTZtMV9jYW5jZWwoZGV2LCBzKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCX0KKworCS8qIHRoaXMgcHJvYmFibHkgd29uJ3QgY2F0Y2ggb3ZlcnJ1bnMgc2luY2UgdGhlIGNhcmQgZG9lc24ndCBnZW5lcmF0ZQorCSAqIG92ZXJydW4gaW50ZXJydXB0cywgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgdHJ5ICovCisJaWYgKHN0YXR1cyAmIE9WUlVOKSB7CisJCWRhczE2bTFfY2FuY2VsKGRldiwgcyk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2Vycm9yKGRldiwgImZpZm8gb3ZlcmZsb3ciKTsKKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgdGltZSBpbiBuYW5vc2Vjb25kcyBhbmQgc2V0cyB0aGUgICAgICoKKyAqIDIgcGFjZXIgY2xvY2tzIHRvIHRoZSBjbG9zZXN0IGZyZXF1ZW5jeSBwb3NzaWJsZS4gSXQgYWxzbyAgKgorICogcmV0dXJucyB0aGUgYWN0dWFsIHNhbXBsaW5nIHBlcmlvZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworc3RhdGljIHVuc2lnbmVkIGludCBkYXMxNm0xX3NldF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG5zLAorCWludCByb3VuZGluZ19mbGFncykKK3sKKwlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoREFTMTZNMV9YVEFMLCAmKGRldnByaXYtPmRpdmlzb3IxKSwKKwkJJihkZXZwcml2LT5kaXZpc29yMiksICZucywgcm91bmRpbmdfZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCisJLyogV3JpdGUgdGhlIHZhbHVlcyBvZiBjdHIxIGFuZCBjdHIyIGludG8gY291bnRlcnMgMSBhbmQgMiAqLworCWk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfU0VDT05ELCAwLCAxLCBkZXZwcml2LT5kaXZpc29yMSwKKwkJMik7CisJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE2TTFfODI1NF9TRUNPTkQsIDAsIDIsIGRldnByaXYtPmRpdmlzb3IyLAorCQkyKTsKKworCXJldHVybiBuczsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2lycV9iaXRzKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSAxMDoKKwkJcmV0ID0gMHgwOworCQlicmVhazsKKwljYXNlIDExOgorCQlyZXQgPSAweDE7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCXJldCA9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSAxNToKKwkJcmV0ID0gMHgzOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldCA9IDB4NDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXQgPSAweDU7CisJCWJyZWFrOworCWNhc2UgNToKKwkJcmV0ID0gMHg2OworCQlicmVhazsKKwljYXNlIDc6CisJCXJldCA9IDB4NzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisJcmV0dXJuIChyZXQgPDwgNCk7Cit9CisKKy8qCisgKiBPcHRpb25zIGxpc3Q6CisgKiAgIDAgIEkvTyBiYXNlCisgKiAgIDEgIElSUQorICovCisKK3N0YXRpYyBpbnQgZGFzMTZtMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXMxNm0xOiIsIGRldi0+bWlub3IpOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IGRhczE2bTFfcHJpdmF0ZV9zdHJ1Y3QpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJcHJpbnRrKCIgaW8gMHglbHgtMHglbHggMHglbHgtMHglbHgiLAorCQlpb2Jhc2UsIGlvYmFzZSArIERBUzE2TTFfU0laRSwKKwkJaW9iYXNlICsgREFTMTZNMV84MkM1NSwgaW9iYXNlICsgREFTMTZNMV84MkM1NSArIERBUzE2TTFfU0laRTIpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEQVMxNk0xX1NJWkUsIGRyaXZlcl9kYXMxNm0xLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSArIERBUzE2TTFfODJDNTUsIERBUzE2TTFfU0laRTIsCisJCQlkcml2ZXJfZGFzMTZtMS5kcml2ZXJfbmFtZSkpIHsKKwkJcmVsZWFzZV9yZWdpb24oaW9iYXNlLCBEQVMxNk0xX1NJWkUpOworCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCS8qIG5vdyBmb3IgdGhlIGlycSAqLworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCS8vIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZAorCWlmIChkYXMxNm0xX2lycV9iaXRzKGlycSkgPj0gMCkgeworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkYXMxNm0xX2ludGVycnVwdCwgMCwKKwkJCWRyaXZlcl9kYXMxNm0xLmRyaXZlcl9uYW1lLCBkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKCIsIGlycSB1bmF2YWlsYWJsZVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWRldi0+aXJxID0gaXJxOworCQlwcmludGsoIiwgaXJxICV1XG4iLCBpcnEpOworCX0gZWxzZSBpZiAoaXJxID09IDApIHsKKwkJcHJpbnRrKCIsIG5vIGlycVxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIsIGludmFsaWQgaXJxXG4iCisJCQkiIHZhbGlkIGlycXMgYXJlIDIsIDMsIDUsIDcsIDEwLCAxMSwgMTIsIG9yIDE1XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCS8qIGFpICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSA4OworCXMtPnN1YmRldl9mbGFncyA9IFNERl9ESUZGOworCXMtPmxlbl9jaGFubGlzdCA9IDI1NjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kYXMxNm0xOworCXMtPmluc25fcmVhZCA9IGRhczE2bTFfYWlfcmluc247CisJcy0+ZG9fY21kdGVzdCA9IGRhczE2bTFfY21kX3Rlc3Q7CisJcy0+ZG9fY21kID0gZGFzMTZtMV9jbWRfZXhlYzsKKwlzLT5jYW5jZWwgPSBkYXMxNm0xX2NhbmNlbDsKKwlzLT5wb2xsID0gZGFzMTZtMV9wb2xsOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkYXMxNm0xX2RpX3JiaXRzOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZG8gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkYXMxNm0xX2RvX3diaXRzOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJLyogODI1NSAqLworCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfODJDNTUpOworCisJLy8gZGlzYWJsZSB1cHBlciBoYWxmIG9mIGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlciBzbyBpdCBkb2Vzbid0IG1lc3Mgd2l0aCB1cworCW91dGIoVE9UQUxfQ0xFQVIsIGRldi0+aW9iYXNlICsgREFTMTZNMV84MjU0X0ZJUlNUX0NOVFJMKTsKKworCS8vIGluaXRpYWxpemUgZGlnaXRhbCBvdXRwdXQgbGluZXMKKwlvdXRiKGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMTZNMV9ESU8pOworCisJLyogc2V0IHRoZSBpbnRlcnJ1cHQgbGV2ZWwgKi8KKwlpZiAoZGV2LT5pcnEpCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgPSBkYXMxNm0xX2lycV9iaXRzKGRldi0+aXJxKTsKKwllbHNlCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgPSAwOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkYXMxNm0xOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisvLyAgICAgIGRhczE2bTFfcmVzZXQoZGV2KTsKKworCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAzKTsKKworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJaWYgKGRldi0+aW9iYXNlKSB7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEQVMxNk0xX1NJWkUpOworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSArIERBUzE2TTFfODJDNTUsIERBUzE2TTFfU0laRTIpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0Y2Q0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMKQEAgLTAsMCArMSwxNzU4IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RhczE4MDAuYworICAgIERyaXZlciBmb3IgS2VpdGxleSBkYXMxNzAwL2RhczE4MDAgc2VyaWVzIGJvYXJkcworICAgIENvcHlyaWdodCAoQykgMjAwMCBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGRhczE4MDAKK0Rlc2NyaXB0aW9uOiBLZWl0aGxleSBNZXRyYWJ5dGUgREFTMTgwMCAoJiBjb21wYXRpYmxlcykKK0F1dGhvcjogRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGV2aWNlczogW0tlaXRobGV5IE1ldHJhYnl0ZV0gREFTLTE3MDFTVCAoZGFzLTE3MDFzdCksCisgIERBUy0xNzAxU1QtREEgKGRhcy0xNzAxc3QtZGEpLCBEQVMtMTcwMS9BTyAoZGFzLTE3MDFhbyksCisgIERBUy0xNzAyU1QgKGRhcy0xNzAyc3QpLCBEQVMtMTcwMlNULURBIChkYXMtMTcwMnN0LWRhKSwKKyAgREFTLTE3MDJIUiAoZGFzLTE3MDJociksIERBUy0xNzAySFItREEgKGRhcy0xNzAyaHItZGEpLAorICBEQVMtMTcwMi9BTyAoZGFzLTE3MDJhbyksIERBUy0xODAxU1QgKGRhcy0xODAxc3QpLAorICBEQVMtMTgwMVNULURBIChkYXMtMTgwMXN0LWRhKSwgREFTLTE4MDFIQyAoZGFzLTE4MDFoYyksCisgIERBUy0xODAxQU8gKGRhcy0xODAxYW8pLCBEQVMtMTgwMlNUIChkYXMtMTgwMnN0KSwKKyAgREFTLTE4MDJTVC1EQSAoZGFzLTE4MDJzdC1kYSksIERBUy0xODAySFIgKGRhcy0xODAyaHIpLAorICBEQVMtMTgwMkhSLURBIChkYXMtMTgwMmhyLWRhKSwgREFTLTE4MDJIQyAoZGFzLTE4MDJoYyksCisgIERBUy0xODAyQU8gKGRhcy0xODAyYW8pCitTdGF0dXM6IHdvcmtzCisKK1RoZSB3YXZlZm9ybSBhbmFsb2cgb3V0cHV0IG9uIHRoZSAnYW8nIGNhcmRzIGlzIG5vdCBzdXBwb3J0ZWQuCitJZiB5b3UgbmVlZCBpdCwgc2VuZCBtZSAoRnJhbmsgSGVzcykgYW4gZW1haWwuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSAob3B0aW9uYWwsIHJlcXVpcmVkIGZvciB0aW1lZCBvciBleHRlcm5hbGx5IHRyaWdnZXJlZCBjb252ZXJzaW9ucykKKyAgWzJdIC0gRE1BMCAob3B0aW9uYWwsIHJlcXVpcmVzIGlycSkKKyAgWzNdIC0gRE1BMSAob3B0aW9uYWwsIHJlcXVpcmVzIGlycSBhbmQgZG1hMCkKKyovCisvKgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIEtlaXRobGV5IGJvYXJkczoKKworZGFzLTE3MDFzdAorZGFzLTE3MDFzdC1kYQorZGFzLTE3MDFhbworZGFzLTE3MDJzdAorZGFzLTE3MDJzdC1kYQorZGFzLTE3MDJocgorZGFzLTE3MDJoci1kYQorZGFzLTE3MDJhbworZGFzLTE4MDFzdAorZGFzLTE4MDFzdC1kYQorZGFzLTE4MDFoYworZGFzLTE4MDFhbworZGFzLTE4MDJzdAorZGFzLTE4MDJzdC1kYQorZGFzLTE4MDJocgorZGFzLTE4MDJoci1kYQorZGFzLTE4MDJoYworZGFzLTE4MDJhbworCitPcHRpb25zOgorCVswXSAtIGJhc2UgaW8gYWRkcmVzcworCVsxXSAtIGlycSAob3B0aW9uYWwsIHJlcXVpcmVkIGZvciB0aW1lZCBvciBleHRlcm5hbGx5IHRyaWdnZXJlZCBjb252ZXJzaW9ucykKKwlbMl0gLSBkbWEwIChvcHRpb25hbCwgcmVxdWlyZXMgaXJxKQorCVszXSAtIGRtYTEgKG9wdGlvbmFsLCByZXF1aXJlcyBpcnEgYW5kIGRtYTApCisKK2lycSBjYW4gYmUgb21pdHRlZCwgYWx0aG91Z2ggdGhlIGNtZCBpbnRlcmZhY2Ugd2lsbCBub3Qgd29yayB3aXRob3V0IGl0LgorCithbmFsb2cgaW5wdXQgY21kIHRyaWdnZXJzIHN1cHBvcnRlZDoKKwlzdGFydF9zcmM6ICAgICAgVFJJR19OT1cgfCBUUklHX0VYVAorCXNjYW5fYmVnaW5fc3JjOiBUUklHX0ZPTExPVyB8IFRSSUdfVElNRVIgfCBUUklHX0VYVAorCXNjYW5fZW5kX3NyYzogICBUUklHX0NPVU5UCisJY29udmVydF9zcmM6ICAgIFRSSUdfVElNRVIgfCBUUklHX0VYVCAoVFJJR19FWFQgcmVxdWlyZXMgc2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpCisJc3RvcF9zcmM6ICAgICAgIFRSSUdfQ09VTlQgfCBUUklHX0VYVCB8IFRSSUdfTk9ORQorCitzY2FuX2JlZ2luX3NyYyB0cmlnZ2VycyBUUklHX1RJTUVSIGFuZCBUUklHX0VYVCB1c2UgdGhlIGNhcmQncworJ2J1cnN0IG1vZGUnIHdoaWNoIGxpbWl0cyB0aGUgdmFsaWQgY29udmVyc2lvbiB0aW1lIHRvIDY0IG1pY3Jvc2Vjb25kcworKGNvbnZlcnRfYXJnIDw9IDY0MDAwKS4gIFRoaXMgbGltaXRhdGlvbiBkb2VzIG5vdCBhcHBseSBpZiBzY2FuX2JlZ2luX3NyYworaXMgVFJJR19GT0xMT1cuCisKK05PVEVTOgorT25seSB0aGUgREFTLTE4MDFTVCBoYXMgYmVlbiB0ZXN0ZWQgYnkgbWUuCitVbmlwb2xhciBhbmQgYmlwb2xhciByYW5nZXMgY2Fubm90IGJlIG1peGVkIGluIHRoZSBjaGFubmVsL2dhaW4gbGlzdC4KKworVE9ETzoKKwlNYWtlIGl0IGF1dG9tYXRpY2FsbHkgYWxsb2NhdGUgaXJxIGFuZCBkbWEgY2hhbm5lbHMgaWYgdGhleSBhcmUgbm90IHNwZWNpZmllZAorCUFkZCBzdXBwb3J0IGZvciBhbmFsb2cgb3V0IG9uICdhbycgY2FyZHMKKwlyZWFkIGluc24gZm9yIGFuYWxvZyBvdXQKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworLy8gbWlzYy4gZGVmaW5lcworI2RlZmluZSBEQVMxODAwX1NJWkUgICAgICAgICAgIDE2CS8vdXNlcyAxNiBpbyBhZGRyZXNzZXMKKyNkZWZpbmUgRklGT19TSVpFICAgICAgICAgICAgICAxMDI0CS8vIDEwMjQgc2FtcGxlIGZpZm8KKyNkZWZpbmUgVElNRVJfQkFTRSAgICAgICAgICAgICAyMDAJLy8gNSBNaHogbWFzdGVyIGNsb2NrCisjZGVmaW5lIFVOSVBPTEFSICAgICAgICAgICAgICAgMHg0CS8vIGJpdCB0aGF0IGRldGVybWluZXMgd2hldGhlciBpbnB1dCByYW5nZSBpcyB1bmkvYmlwb2xhcgorI2RlZmluZSBETUFfQlVGX1NJWkUgICAgICAgICAgIDB4MWZmMDAJLy8gc2l6ZSBpbiBieXRlcyBvZiBkbWEgYnVmZmVycworCisvKiBSZWdpc3RlcnMgZm9yIHRoZSBkYXMxODAwICovCisjZGVmaW5lIERBUzE4MDBfRklGTyAgICAgICAgICAgIDB4MAorI2RlZmluZSBEQVMxODAwX1FSQU0gICAgICAgICAgICAweDAKKyNkZWZpbmUgREFTMTgwMF9EQUMgICAgICAgICAgICAgMHgwCisjZGVmaW5lIERBUzE4MDBfU0VMRUNUICAgICAgICAgIDB4MgorI2RlZmluZSAgIEFEQyAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgIFFSQU0gICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgIERBQyhhKSAgICAgICAgICAgICAgICAgICgweDIgKyBhKQorI2RlZmluZSBEQVMxODAwX0RJR0lUQUwgICAgICAgICAweDMKKyNkZWZpbmUgREFTMTgwMF9DT05UUk9MX0EgICAgICAgMHg0CisjZGVmaW5lICAgRkZFTiAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgQ0dFTiAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICAgQ0dTTCAgICAgICAgICAgICAgICAgICAgMHg4CisjZGVmaW5lICAgVEdFTiAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgIFRHU0wgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgICBBVEVOICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIERBUzE4MDBfQ09OVFJPTF9CICAgICAgIDB4NQorI2RlZmluZSAgIERNQV9DSDUgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgIERNQV9DSDYgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSAgIERNQV9DSDcgICAgICAgICAgICAgICAgIDB4MworI2RlZmluZSAgIERNQV9DSDVfQ0g2ICAgICAgICAgICAgIDB4NQorI2RlZmluZSAgIERNQV9DSDZfQ0g3ICAgICAgICAgICAgIDB4NgorI2RlZmluZSAgIERNQV9DSDdfQ0g1ICAgICAgICAgICAgIDB4NworI2RlZmluZSAgIERNQV9FTkFCTEVEICAgICAgICAgICAgIDB4MwkvL21hc2sgdXNlZCB0byBkZXRlcm1pbmUgaWYgZG1hIGlzIGVuYWJsZWQKKyNkZWZpbmUgICBETUFfRFVBTCAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgICBJUlEzICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICBJUlE1ICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgSVJRNyAgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSAgIElSUTEwICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgICBJUlExMSAgICAgICAgICAgICAgICAgICAweDMwCisjZGVmaW5lICAgSVJRMTUgICAgICAgICAgICAgICAgICAgMHgzOAorI2RlZmluZSAgIEZJTUQgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgREFTMTgwMF9DT05UUk9MX0MgICAgICAgMFg2CisjZGVmaW5lICAgSVBDTEsgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgWFBDTEsgICAgICAgICAgICAgICAgICAgMHgzCisjZGVmaW5lICAgQk1ERSAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICAgQ01FTiAgICAgICAgICAgICAgICAgICAgMHg4CisjZGVmaW5lICAgVVFFTiAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgIFNEICAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgICBVQiAgICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIERBUzE4MDBfU1RBVFVTICAgICAgICAgIDB4NworLy8gYml0cyB0aGF0IHByZXZlbnQgaW50ZXJydXB0IHN0YXR1cyBiaXRzIChhbmQgQ1ZFTikgZnJvbSBiZWluZyBjbGVhcmVkIG9uIHdyaXRlCisjZGVmaW5lICAgQ0xFQVJfSU5UUl9NQVNLICAgICAgICAgKENWRU5fTUFTSyB8IDB4MWYpCisjZGVmaW5lICAgSU5UICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgRE1BVEMgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgQ1QwVEMgICAgICAgICAgICAgICAgICAgMHg4CisjZGVmaW5lICAgT1ZGICAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgIEZIRiAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgICBGTkUgICAgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lICAgQ1ZFTl9NQVNLICAgICAgICAgICAgICAgMHg0MAkvLyBtYXNrcyBDVkVOIG9uIHdyaXRlCisjZGVmaW5lICAgQ1ZFTiAgICAgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBEQVMxODAwX0JVUlNUX0xFTkdUSCAgICAweDgKKyNkZWZpbmUgREFTMTgwMF9CVVJTVF9SQVRFICAgICAgMHg5CisjZGVmaW5lIERBUzE4MDBfUVJBTV9BRERSRVNTICAgIDB4YQorI2RlZmluZSBEQVMxODAwX0NPVU5URVIgICAgICAgICAweGMKKworI2RlZmluZSBJT0JBU0UyICAgICAgICAgICAgICAgICAgIDB4NDAwCS8vb2Zmc2V0IG9mIGFkZGl0aW9uYWwgaW9wb3J0cyB1c2VkIG9uICdhbycgY2FyZHMKKworZW51bSB7CisJZGFzMTcwMXN0LCBkYXMxNzAxc3RfZGEsIGRhczE3MDJzdCwgZGFzMTcwMnN0X2RhLCBkYXMxNzAyaHIsCisJZGFzMTcwMmhyX2RhLAorCWRhczE3MDFhbywgZGFzMTcwMmFvLCBkYXMxODAxc3QsIGRhczE4MDFzdF9kYSwgZGFzMTgwMnN0LCBkYXMxODAyc3RfZGEsCisJZGFzMTgwMmhyLCBkYXMxODAyaHJfZGEsIGRhczE4MDFoYywgZGFzMTgwMmhjLCBkYXMxODAxYW8sIGRhczE4MDJhbworfTsKKworc3RhdGljIGludCBkYXMxODAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRhczE4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGRhczE4MDBfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGlycXJldHVybl90IGRhczE4MDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBkYXMxODAwX2FpX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBkYXMxODAwX2FpX2hhbmRsZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgZGFzMTgwMF9oYW5kbGVfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHN0YXR1cyk7CitzdGF0aWMgdm9pZCBkYXMxODAwX2ZsdXNoX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIGRhczE4MDBfZmx1c2hfZG1hX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdWludDE2X3QgKiBidWZmZXIpOworc3RhdGljIHZvaWQgZGFzMTgwMF9oYW5kbGVfZmlmb19oYWxmX2Z1bGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIGRhczE4MDBfaGFuZGxlX2ZpZm9fbm90X2VtcHR5KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRhczE4MDBfYWlfZG9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9kb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRhczE4MDBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxODAwX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE4MDBfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBkYXMxODAwX3NldF9mcmVxdWVuY3koc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHVuc2lnbmVkIGludCBidXJzdF9jb252ZXJ0X2FyZyh1bnNpZ25lZCBpbnQgY29udmVydF9hcmcsIGludCByb3VuZF9tb2RlKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VnZ2VzdF90cmFuc2Zlcl9zaXplKHN0cnVjdCBjb21lZGlfY21kICogY21kKTsKKworLy8gYW5hbG9nIGlucHV0IHJhbmdlcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FpX2RhczE4MDEgPSB7CisJOCwKKwl7CisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCQkJUkFOR0UoLTAuMDIsIDAuMDIpLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAxKSwKKwkJCVJBTkdFKDAsIDAuMSksCisJCQlSQU5HRSgwLCAwLjAyKSwKKwkJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FpX2RhczE4MDIgPSB7CisJOCwKKwl7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMS4yNSwgMS4yNSksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDIuNSksCisJCQlSQU5HRSgwLCAxLjI1KSwKKwkJfQorfTsKKworc3RydWN0IGRhczE4MDBfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFpX3NwZWVkOwkJLyogbWF4IGNvbnZlcnNpb24gcGVyaW9kIGluIG5hbm9zZWNvbmRzICovCisJaW50IHJlc29sdXRpb247CQkvKiBiaXRzIG9mIGFpIHJlc29sdXRpb24gKi8KKwlpbnQgcXJhbV9sZW47CQkvKiBsZW5ndGggb2YgY2FyZCdzIGNoYW5uZWwgLyBnYWluIHF1ZXVlICovCisJaW50IGNvbW1vbjsJCS8qIHN1cHBvcnRzIEFSRUZfQ09NTU9OIGZsYWcgKi8KKwlpbnQgZG9fbl9jaGFuOwkJLyogbnVtYmVyIG9mIGRpZ2l0YWwgb3V0cHV0IGNoYW5uZWxzICovCisJaW50IGFvX2FiaWxpdHk7CQkvKiAwID09IG5vIGFuYWxvZyBvdXQsIDEgPT0gYmFzaWMgYW5hbG9nIG91dCwgMiA9PSB3YXZlZm9ybSBhbmFsb2cgb3V0ICovCisJaW50IGFvX25fY2hhbjsJCS8qIG51bWJlciBvZiBhbmFsb2cgb3V0IGNoYW5uZWxzICovCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlX2FpOwkvKiBhdmFpbGFibGUgaW5wdXQgcmFuZ2VzICovCit9OworCisvKiBXYXJuaW5nOiB0aGUgbWF4aW11bSBjb252ZXJzaW9uIHNwZWVkcyBsaXN0ZWQgYmVsb3cgYXJlCisgKiBub3QgYWx3YXlzIGFjaGlldmFibGUgZGVwZW5kaW5nIG9uIGJvYXJkIHNldHVwIChzZWUKKyAqIHVzZXIgbWFudWFsLikKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxODAwX2JvYXJkIGRhczE4MDBfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkYXMtMTcwMXN0IiwKKwkgICAgICBhaV9zcGVlZDo2MjUwLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjAsCisJICAgICAgYW9fbl9jaGFuOjAsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTcwMXN0LWRhIiwKKwkgICAgICBhaV9zcGVlZDo2MjUwLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjEsCisJICAgICAgYW9fbl9jaGFuOjQsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTcwMnN0IiwKKwkgICAgICBhaV9zcGVlZDo2MjUwLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjAsCisJICAgICAgYW9fbl9jaGFuOjAsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTcwMnN0LWRhIiwKKwkgICAgICBhaV9zcGVlZDo2MjUwLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjEsCisJICAgICAgYW9fbl9jaGFuOjQsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTcwMmhyIiwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICByZXNvbHV0aW9uOjE2LAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eTowLAorCSAgICAgIGFvX25fY2hhbjowLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE3MDJoci1kYSIsCisJICAgICAgYWlfc3BlZWQ6MjAwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxNiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46MiwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAxYW8iLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MiwKKwkgICAgICBhb19uX2NoYW46MiwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAyYW8iLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MiwKKwkgICAgICBhb19uX2NoYW46MiwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAxc3QiLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46MCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAxc3QtZGEiLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46NCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAyc3QiLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46MCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAyc3QtZGEiLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46NCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAyaHIiLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIHJlc29sdXRpb246MTYsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjAsCisJICAgICAgYW9fbl9jaGFuOjAsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTgwMmhyLWRhIiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICByZXNvbHV0aW9uOjE2LAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToxLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDFoYyIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjY0LAorCSAgICAgIGNvbW1vbjoJMCwKKwkgICAgICBkb19uX2NoYW46OCwKKwkgICAgICBhb19hYmlsaXR5OjEsCisJICAgICAgYW9fbl9jaGFuOjIsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTgwMmhjIiwKKwkgICAgICBhaV9zcGVlZDozMDAwLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJICAgICAgcXJhbV9sZW46NjQsCisJICAgICAgY29tbW9uOgkwLAorCSAgICAgIGRvX25fY2hhbjo4LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46MiwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAxYW8iLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MiwKKwkgICAgICBhb19uX2NoYW46MiwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAyYW8iLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MiwKKwkgICAgICBhb19uX2NoYW46MiwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRhczE4MDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGRhczE4MDBfcHJpdmF0ZSB7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvdW50OwkvKiBudW1iZXIgb2YgZGF0YSBwb2ludHMgbGVmdCB0byBiZSB0YWtlbiAqLworCXVuc2lnbmVkIGludCBkaXZpc29yMTsJLyogdmFsdWUgdG8gbG9hZCBpbnRvIGJvYXJkJ3MgY291bnRlciAxIGZvciB0aW1lZCBjb252ZXJzaW9ucyAqLworCXVuc2lnbmVkIGludCBkaXZpc29yMjsJLyogdmFsdWUgdG8gbG9hZCBpbnRvIGJvYXJkJ3MgY291bnRlciAyIGZvciB0aW1lZCBjb252ZXJzaW9ucyAqLworCWludCBkb19iaXRzOwkJLyogZGlnaXRhbCBvdXRwdXQgYml0cyAqLworCWludCBpcnFfZG1hX2JpdHM7CS8qIGJpdHMgZm9yIGNvbnRyb2wgcmVnaXN0ZXIgYiAqLworCS8qIGRtYSBiaXRzIGZvciBjb250cm9sIHJlZ2lzdGVyIGIsIHN0b3JlZCBzbyB0aGF0IGRtYSBjYW4gYmUKKwkgKiB0dXJuZWQgb24gYW5kIG9mZiAqLworCWludCBkbWFfYml0czsKKwl1bnNpZ25lZCBpbnQgZG1hMDsJLyogZG1hIGNoYW5uZWxzIHVzZWQgKi8KKwl1bnNpZ25lZCBpbnQgZG1hMTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX2N1cnJlbnQ7CS8qIGRtYSBjaGFubmVsIGN1cnJlbnRseSBpbiB1c2UgKi8KKwl1aW50MTZfdCAqYWlfYnVmMDsJLyogcG9pbnRlcnMgdG8gZG1hIGJ1ZmZlcnMgKi8KKwl1aW50MTZfdCAqYWlfYnVmMTsKKwl1aW50MTZfdCAqZG1hX2N1cnJlbnRfYnVmOwkvKiBwb2ludGVyIHRvIGRtYSBidWZmZXIgY3VycmVudGx5IGJlaW5nIHVzZWQgKi8KKwl1bnNpZ25lZCBpbnQgZG1hX3RyYW5zZmVyX3NpemU7CS8qIHNpemUgb2YgdHJhbnNmZXIgY3VycmVudGx5IHVzZWQsIGluIGJ5dGVzICovCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UyOwkvKiBzZWNvbmRhcnkgaW8gYWRkcmVzcyB1c2VkIGZvciBhbmFsb2cgb3V0IG9uICdhbycgYm9hcmRzICovCisJc2hvcnQgYW9fdXBkYXRlX2JpdHM7CS8qIHJlbWVtYmVycyB0aGUgbGFzdCB3cml0ZSB0byB0aGUgJ3VwZGF0ZScgZGFjICovCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZGFzMTgwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvLyBhbmFsb2cgb3V0IHJhbmdlIGZvciBib2FyZHMgd2l0aCBiYXNpYyBhbmFsb2cgb3V0CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYW9fMSA9IHsKKwkxLAorCXsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQl9Cit9OworCisvLyBhbmFsb2cgb3V0IHJhbmdlIGZvciAnYW8nIGJvYXJkcworLyoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hb18yID0geworCTIsCisJeworCQlSQU5HRSgtMTAsIDEwKSwKKwkJUkFOR0UoLTUsIDUpLAorCX0KK307CisqLworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhczE4MDAgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFzMTgwMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFzMTgwMF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFzMTgwMF9kZXRhY2gsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRhczE4MDBfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgZGFzMTgwMF9ib2FyZCksCisgICAgICBib2FyZF9uYW1lOiZkYXMxODAwX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZGFzMTgwMF9ib2FyZCksCit9OworCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczE4MDApOworCitzdGF0aWMgaW50IGRhczE4MDBfaW5pdF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBkbWEwLAorCXVuc2lnbmVkIGludCBkbWExKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBuZWVkIGFuIGlycSB0byBkbyBkbWEKKwlpZiAoZGV2LT5pcnEgJiYgZG1hMCkgeworCQkvL2VuY29kZSBkbWEwIGFuZCBkbWExIGludG8gMiBkaWdpdCBoZXhhZGVjaW1hbCBmb3Igc3dpdGNoCisJCXN3aXRjaCAoKGRtYTAgJiAweDcpIHwgKGRtYTEgPDwgNCkpIHsKKwkJY2FzZSAweDU6CS8vIGRtYTAgPT0gNQorCQkJZGV2cHJpdi0+ZG1hX2JpdHMgfD0gRE1BX0NINTsKKwkJCWJyZWFrOworCQljYXNlIDB4NjoJLy8gZG1hMCA9PSA2CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g2OworCQkJYnJlYWs7CisJCWNhc2UgMHg3OgkvLyBkbWEwID09IDcKKwkJCWRldnByaXYtPmRtYV9iaXRzIHw9IERNQV9DSDc7CisJCQlicmVhazsKKwkJY2FzZSAweDY1OgkvLyBkbWEwID09IDUsIGRtYTEgPT0gNgorCQkJZGV2cHJpdi0+ZG1hX2JpdHMgfD0gRE1BX0NINV9DSDY7CisJCQlicmVhazsKKwkJY2FzZSAweDc2OgkvLyBkbWEwID09IDYsIGRtYTEgPT0gNworCQkJZGV2cHJpdi0+ZG1hX2JpdHMgfD0gRE1BX0NINl9DSDc7CisJCQlicmVhazsKKwkJY2FzZSAweDU3OgkvLyBkbWEwID09IDcsIGRtYTEgPT0gNQorCQkJZGV2cHJpdi0+ZG1hX2JpdHMgfD0gRE1BX0NIN19DSDU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiIG9ubHkgc3VwcG9ydHMgZG1hIGNoYW5uZWxzIDUgdGhyb3VnaCA3XG4iCisJCQkJIiBEdWFsIGRtYSBvbmx5IGFsbG93cyB0aGUgZm9sbG93aW5nIGNvbWJpbmF0aW9uczpcbiIKKwkJCQkiIGRtYSA1LDYgLyA2LDcgLyBvciA3LDVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmVxdWVzdF9kbWEoZG1hMCwgZHJpdmVyX2RhczE4MDAuZHJpdmVyX25hbWUpKSB7CisJCQlwcmludGsoIiBmYWlsZWQgdG8gYWxsb2NhdGUgZG1hIGNoYW5uZWwgJWlcbiIsIGRtYTApOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGV2cHJpdi0+ZG1hMCA9IGRtYTA7CisJCWRldnByaXYtPmRtYV9jdXJyZW50ID0gZG1hMDsKKwkJaWYgKGRtYTEpIHsKKwkJCWlmIChyZXF1ZXN0X2RtYShkbWExLCBkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSkpIHsKKwkJCQlwcmludGsoIiBmYWlsZWQgdG8gYWxsb2NhdGUgZG1hIGNoYW5uZWwgJWlcbiIsCisJCQkJCWRtYTEpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJZGV2cHJpdi0+ZG1hMSA9IGRtYTE7CisJCX0KKwkJZGV2cHJpdi0+YWlfYnVmMCA9IGttYWxsb2MoRE1BX0JVRl9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJCWlmIChkZXZwcml2LT5haV9idWYwID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMDsKKwkJaWYgKGRtYTEpIHsKKwkJCWRldnByaXYtPmFpX2J1ZjEgPQorCQkJCWttYWxsb2MoRE1BX0JVRl9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJCQlpZiAoZGV2cHJpdi0+YWlfYnVmMSA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMCk7CisJCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWEwLCBETUFfTU9ERV9SRUFEKTsKKwkJaWYgKGRtYTEpIHsKKwkJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYTEpOworCQkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYTEsIERNQV9NT0RFX1JFQUQpOworCQl9CisJCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxODAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXVuc2lnbmVkIGludCBpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwl1bnNpZ25lZCBpbnQgZG1hMCA9IGl0LT5vcHRpb25zWzJdOworCXVuc2lnbmVkIGludCBkbWExID0gaXQtPm9wdGlvbnNbM107CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UyOworCWludCBib2FyZDsKKwlpbnQgcmV0dmFsOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczE4MDBfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcmludGsoImNvbWVkaSVkOiAlczogaW8gMHglbHgiLCBkZXYtPm1pbm9yLCBkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlKTsKKwlpZiAoaXJxKSB7CisJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOworCQlpZiAoZG1hMCkgeworCQkJcHJpbnRrKCIsIGRtYSAldSIsIGRtYTApOworCQkJaWYgKGRtYTEpCisJCQkJcHJpbnRrKCIgYW5kICV1IiwgZG1hMSk7CisJCX0KKwl9CisJcHJpbnRrKCJcbiIpOworCisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXByaW50aygiIGlvIGJhc2UgYWRkcmVzcyByZXF1aXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGlmIGlvIGFkZHJlc3NlcyBhcmUgYXZhaWxhYmxlICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERBUzE4MDBfU0laRSwgZHJpdmVyX2RhczE4MDAuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0OiBmYWlsZWQgdG8gYWxsb2NhdGUgcG9ydHMgMHglbHggdG8gMHglbHhcbiIsIGlvYmFzZSwgaW9iYXNlICsgREFTMTgwMF9TSVpFIC0gMSk7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWJvYXJkID0gZGFzMTgwMF9wcm9iZShkZXYpOworCWlmIChib2FyZCA8IDApIHsKKwkJcHJpbnRrKCIgdW5hYmxlIHRvIGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2LT5ib2FyZF9wdHIgPSBkYXMxODAwX2JvYXJkcyArIGJvYXJkOworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCS8vIGlmIGl0IGlzIGFuICdhbycgYm9hcmQgd2l0aCBmYW5jeSBhbmFsb2cgb3V0IHRoZW4gd2UgbmVlZCBleHRyYSBpbyBwb3J0cworCWlmICh0aGlzYm9hcmQtPmFvX2FiaWxpdHkgPT0gMikgeworCQlpb2Jhc2UyID0gaW9iYXNlICsgSU9CQVNFMjsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UyLCBEQVMxODAwX1NJWkUsCisJCQkJZHJpdmVyX2RhczE4MDAuZHJpdmVyX25hbWUpKSB7CisJCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdDogZmFpbGVkIHRvIGFsbG9jYXRlIHBvcnRzIDB4JWx4IHRvIDB4JWx4XG4iLCBpb2Jhc2UyLCBpb2Jhc2UyICsgREFTMTgwMF9TSVpFIC0gMSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlkZXZwcml2LT5pb2Jhc2UyID0gaW9iYXNlMjsKKwl9CisKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlpZiAoaXJxKSB7CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkYXMxODAwX2ludGVycnVwdCwgMCwKKwkJCQlkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSwgZGV2KSkgeworCQkJcHJpbnRrKCIgdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWRldi0+aXJxID0gaXJxOworCisJLy8gc2V0IGJpdHMgdGhhdCB0ZWxsIGNhcmQgd2hpY2ggaXJxIHRvIHVzZQorCXN3aXRjaCAoaXJxKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDM6CisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSAweDg7CisJCWJyZWFrOworCWNhc2UgNToKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IDB4MTA7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IDB4MTg7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSAweDI4OworCQlicmVhazsKKwljYXNlIDExOgorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gMHgzMDsKKwkJYnJlYWs7CisJY2FzZSAxNToKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IDB4Mzg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiIGlycSBvdXQgb2YgcmFuZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dmFsID0gZGFzMTgwMF9pbml0X2RtYShkZXYsIGRtYTAsIGRtYTEpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGRldnByaXYtPmFpX2J1ZjAgPT0gTlVMTCkgeworCQlkZXZwcml2LT5haV9idWYwID0KKwkJCWttYWxsb2MoRklGT19TSVpFICogc2l6ZW9mKHVpbnQxNl90KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChkZXZwcml2LT5haV9idWYwID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9ESUZGIHwgU0RGX0dST1VORCB8IFNERl9DTURfUkVBRDsKKwlpZiAodGhpc2JvYXJkLT5jb21tb24pCisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+cXJhbV9sZW47CisJcy0+bGVuX2NoYW5saXN0ID0gdGhpc2JvYXJkLT5xcmFtX2xlbjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5yZXNvbHV0aW9uKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPnJhbmdlX2FpOworCXMtPmRvX2NtZCA9IGRhczE4MDBfYWlfZG9fY21kOworCXMtPmRvX2NtZHRlc3QgPSBkYXMxODAwX2FpX2RvX2NtZHRlc3Q7CisJcy0+aW5zbl9yZWFkID0gZGFzMTgwMF9haV9yaW5zbjsKKwlzLT5wb2xsID0gZGFzMTgwMF9haV9wb2xsOworCXMtPmNhbmNlbCA9IGRhczE4MDBfY2FuY2VsOworCisJLyogYW5hbG9nIG91dCAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWlmICh0aGlzYm9hcmQtPmFvX2FiaWxpdHkgPT0gMSkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19uX2NoYW47CisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPnJlc29sdXRpb24pIC0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYW9fMTsKKwkJcy0+aW5zbl93cml0ZSA9IGRhczE4MDBfYW9fd2luc247CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwkvKiBkaSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczE4MDBfZGlfcmJpdHM7CisKKwkvKiBkbyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5kb19uX2NoYW47CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkYXMxODAwX2RvX3diaXRzOworCisJZGFzMTgwMF9jYW5jZWwoZGV2LCBkZXYtPnJlYWRfc3ViZGV2KTsKKworCS8vIGluaXRpYWxpemUgZGlnaXRhbCBvdXQgY2hhbm5lbHMKKwlvdXRiKGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9ESUdJVEFMKTsKKworCS8vIGluaXRpYWxpemUgYW5hbG9nIG91dCBjaGFubmVscworCWlmICh0aGlzYm9hcmQtPmFvX2FiaWxpdHkgPT0gMSkgeworCQkvLyBzZWxlY3QgJ3VwZGF0ZScgZGFjIGNoYW5uZWwgZm9yIGJhc2VBZGRyZXNzICsgMHgwCisJCW91dGIoREFDKHRoaXNib2FyZC0+YW9fbl9jaGFuIC0gMSksCisJCQlkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsKKwkJb3V0dyhkZXZwcml2LT5hb191cGRhdGVfYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0RBQyk7CisJfQorCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IGRhczE4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qIG9ubHkgZnJlZSBzdHVmZiBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCAqLworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERBUzE4MDBfU0laRSk7CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+aW9iYXNlMikKKwkJCXJlbGVhc2VfcmVnaW9uKGRldnByaXYtPmlvYmFzZTIsIERBUzE4MDBfU0laRSk7CisJCWlmIChkZXZwcml2LT5kbWEwKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hMCk7CisJCWlmIChkZXZwcml2LT5kbWExKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hMSk7CisJCWlmIChkZXZwcml2LT5haV9idWYwKQorCQkJa2ZyZWUoZGV2cHJpdi0+YWlfYnVmMCk7CisJCWlmIChkZXZwcml2LT5haV9idWYxKQorCQkJa2ZyZWUoZGV2cHJpdi0+YWlfYnVmMSk7CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogJXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vciwKKwkJZHJpdmVyX2RhczE4MDAuZHJpdmVyX25hbWUpOworCisJcmV0dXJuIDA7Cit9OworCisvKiBwcm9iZXMgYW5kIGNoZWNrcyBkYXMtMTgwMCBzZXJpZXMgYm9hcmQgdHlwZQorICovCitzdGF0aWMgaW50IGRhczE4MDBfcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGlkOworCWludCBib2FyZDsKKworCWlkID0gKGluYihkZXYtPmlvYmFzZSArIERBUzE4MDBfRElHSVRBTCkgPj4gNCkgJiAweGY7CS8qIGdldCBpZCBiaXRzICovCisJYm9hcmQgPSAoKHN0cnVjdCBkYXMxODAwX2JvYXJkICopIGRldi0+Ym9hcmRfcHRyKSAtIGRhczE4MDBfYm9hcmRzOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgMHgzOgorCQlpZiAoYm9hcmQgPT0gZGFzMTgwMXN0X2RhIHx8IGJvYXJkID09IGRhczE4MDJzdF9kYSB8fAorCQkJYm9hcmQgPT0gZGFzMTcwMXN0X2RhIHx8IGJvYXJkID09IGRhczE3MDJzdF9kYSkgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6ICVzXG4iLAorCQkJCWRhczE4MDBfYm9hcmRzW2JvYXJkXS5uYW1lKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkLCBub3QgcmVjb21tZW5kZWQpOiBkYXMtMTgwMHN0LWRhIHNlcmllc1xuIik7CisJCXJldHVybiBkYXMxODAxc3Q7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQlpZiAoYm9hcmQgPT0gZGFzMTgwMmhyX2RhIHx8IGJvYXJkID09IGRhczE3MDJocl9kYSkgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6ICVzXG4iLAorCQkJCWRhczE4MDBfYm9hcmRzW2JvYXJkXS5uYW1lKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkLCBub3QgcmVjb21tZW5kZWQpOiBkYXMtMTgwMmhyLWRhXG4iKTsKKwkJcmV0dXJuIGRhczE4MDJocjsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCWlmIChib2FyZCA9PSBkYXMxODAxYW8gfHwgYm9hcmQgPT0gZGFzMTgwMmFvIHx8CisJCQlib2FyZCA9PSBkYXMxNzAxYW8gfHwgYm9hcmQgPT0gZGFzMTcwMmFvKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogJXNcbiIsCisJCQkJZGFzMTgwMF9ib2FyZHNbYm9hcmRdLm5hbWUpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQsIG5vdCByZWNvbW1lbmRlZCk6IGRhcy0xODAwYW8gc2VyaWVzXG4iKTsKKwkJcmV0dXJuIGRhczE4MDFhbzsKKwkJYnJlYWs7CisJY2FzZSAweDY6CisJCWlmIChib2FyZCA9PSBkYXMxODAyaHIgfHwgYm9hcmQgPT0gZGFzMTcwMmhyKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogJXNcbiIsCisJCQkJZGFzMTgwMF9ib2FyZHNbYm9hcmRdLm5hbWUpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQsIG5vdCByZWNvbW1lbmRlZCk6IGRhcy0xODAyaHJcbiIpOworCQlyZXR1cm4gZGFzMTgwMmhyOworCQlicmVhazsKKwljYXNlIDB4NzoKKwkJaWYgKGJvYXJkID09IGRhczE4MDFzdCB8fCBib2FyZCA9PSBkYXMxODAyc3QgfHwKKwkJCWJvYXJkID09IGRhczE3MDFzdCB8fCBib2FyZCA9PSBkYXMxNzAyc3QpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiAlc1xuIiwKKwkJCQlkYXMxODAwX2JvYXJkc1tib2FyZF0ubmFtZSk7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCwgbm90IHJlY29tbWVuZGVkKTogZGFzLTE4MDBzdCBzZXJpZXNcbiIpOworCQlyZXR1cm4gZGFzMTgwMXN0OworCQlicmVhazsKKwljYXNlIDB4ODoKKwkJaWYgKGJvYXJkID09IGRhczE4MDFoYyB8fCBib2FyZCA9PSBkYXMxODAyaGMpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiAlc1xuIiwKKwkJCQlkYXMxODAwX2JvYXJkc1tib2FyZF0ubmFtZSk7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCwgbm90IHJlY29tbWVuZGVkKTogZGFzLTE4MDBoYyBzZXJpZXNcbiIpOworCQlyZXR1cm4gZGFzMTgwMWhjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIiBCb2FyZCBtb2RlbDogcHJvYmUgcmV0dXJuZWQgMHgleCAodW5rbm93biwgcGxlYXNlIHJlcG9ydClcbiIsIGlkKTsKKwkJcmV0dXJuIGJvYXJkOworCQlicmVhazsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGRhczE4MDBfYWlfcG9sbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBwcmV2ZW50IHJhY2Ugd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcgorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRhczE4MDBfYWlfaGFuZGxlcihkZXYpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcy0+YXN5bmMtPmJ1Zl93cml0ZV9jb3VudCAtIHMtPmFzeW5jLT5idWZfcmVhZF9jb3VudDsKK30KKworc3RhdGljIGlycXJldHVybl90IGRhczE4MDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInByZW1hdHVyZSBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCS8qIFByZXZlbnQgcmFjZSB3aXRoIGRhczE4MDBfYWlfcG9sbCgpIG9uIG11bHRpIHByb2Nlc3NvciBzeXN0ZW1zLgorCSAqIEFsc28gcHJvdGVjdHMgaW5kaXJlY3QgYWRkcmVzc2luZyBpbiBkYXMxODAwX2FpX2hhbmRsZXIgKi8KKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzE4MDBfU1RBVFVTKTsKKworCS8qIGlmIGludGVycnVwdCB3YXMgbm90IGNhdXNlZCBieSBkYXMtMTgwMCAqLworCWlmICghKHN0YXR1cyAmIElOVCkpIHsKKwkJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBJTlQgKi8KKwlvdXRiKENMRUFSX0lOVFJfTUFTSyAmIH5JTlQsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCS8vIGhhbmRsZSBpbnRlcnJ1cHQKKwlkYXMxODAwX2FpX2hhbmRsZXIoZGV2KTsKKworCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8vIHRoZSBndXRzIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgdGhhdCBpcyBzaGFyZWQgd2l0aCBkYXMxODAwX2FpX3BvbGwKK3N0YXRpYyB2b2lkIGRhczE4MDBfYWlfaGFuZGxlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCisJYXN5bmMtPmV2ZW50cyA9IDA7CisJLy8gc2VsZWN0IGFkYyBmb3IgYmFzZSBhZGRyZXNzICsgMAorCW91dGIoQURDLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsKKwkvLyBkbWEgYnVmZmVyIGZ1bGwKKwlpZiAoZGV2cHJpdi0+aXJxX2RtYV9iaXRzICYgRE1BX0VOQUJMRUQpIHsKKwkJLy8gbG9vayBmb3IgZGF0YSBmcm9tIGRtYSB0cmFuc2ZlciBldmVuIGlmIGRtYSB0ZXJtaW5hbCBjb3VudCBoYXNuJ3QgaGFwcGVuZWQgeWV0CisJCWRhczE4MDBfaGFuZGxlX2RtYShkZXYsIHMsIHN0YXR1cyk7CisJfSBlbHNlIGlmIChzdGF0dXMgJiBGSEYpIHsJLy8gaWYgZmlmbyBoYWxmIGZ1bGwKKwkJZGFzMTgwMF9oYW5kbGVfZmlmb19oYWxmX2Z1bGwoZGV2LCBzKTsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIEZORSkgewkvLyBpZiBmaWZvIG5vdCBlbXB0eQorCQlkYXMxODAwX2hhbmRsZV9maWZvX25vdF9lbXB0eShkZXYsIHMpOworCX0KKworCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCS8qIGlmIHRoZSBjYXJkJ3MgZmlmbyBoYXMgb3ZlcmZsb3dlZCAqLworCWlmIChzdGF0dXMgJiBPVkYpIHsKKwkJLy8gY2xlYXIgT1ZGIGludGVycnVwdCBiaXQKKwkJb3V0YihDTEVBUl9JTlRSX01BU0sgJiB+T1ZGLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU1RBVFVTKTsKKwkJY29tZWRpX2Vycm9yKGRldiwgIkRBUzE4MDAgRklGTyBvdmVyZmxvdyIpOworCQlkYXMxODAwX2NhbmNlbChkZXYsIHMpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm47CisJfQorCS8vIHN0b3AgdGFraW5nIGRhdGEgaWYgYXBwcm9wcmlhdGUKKwkvKiBzdG9wX3NyYyBUUklHX0VYVCAqLworCWlmIChzdGF0dXMgJiBDVDBUQykgeworCQkvLyBjbGVhciBDVDBUQyBpbnRlcnJ1cHQgYml0CisJCW91dGIoQ0xFQVJfSU5UUl9NQVNLICYgfkNUMFRDLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU1RBVFVTKTsKKwkJLy8gbWFrZSBzdXJlIHdlIGdldCBhbGwgcmVtYWluaW5nIGRhdGEgZnJvbSBib2FyZCBiZWZvcmUgcXVpdHRpbmcKKwkJaWYgKGRldnByaXYtPmlycV9kbWFfYml0cyAmIERNQV9FTkFCTEVEKQorCQkJZGFzMTgwMF9mbHVzaF9kbWEoZGV2LCBzKTsKKwkJZWxzZQorCQkJZGFzMTgwMF9oYW5kbGVfZmlmb19ub3RfZW1wdHkoZGV2LCBzKTsKKwkJZGFzMTgwMF9jYW5jZWwoZGV2LCBzKTsJLyogZGlzYWJsZSBoYXJkd2FyZSBjb252ZXJzaW9ucyAqLworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfSBlbHNlIGlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+Y291bnQgPT0gMCkgewkvLyBzdG9wX3NyYyBUUklHX0NPVU5UCisJCWRhczE4MDBfY2FuY2VsKGRldiwgcyk7CS8qIGRpc2FibGUgaGFyZHdhcmUgY29udmVyc2lvbnMgKi8KKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkYXMxODAwX2hhbmRsZV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29uc3QgaW50IGR1YWxfZG1hID0gZGV2cHJpdi0+aXJxX2RtYV9iaXRzICYgRE1BX0RVQUw7CisKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGFzMTgwMF9mbHVzaF9kbWFfY2hhbm5lbChkZXYsIHMsIGRldnByaXYtPmRtYV9jdXJyZW50LAorCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYpOworCS8vIHJlLWVuYWJsZSAgZG1hIGNoYW5uZWwKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hX2N1cnJlbnQsCisJCXZpcnRfdG9fYnVzKGRldnByaXYtPmRtYV9jdXJyZW50X2J1ZikpOworCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2N1cnJlbnQsIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYV9jdXJyZW50KTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKworCWlmIChzdGF0dXMgJiBETUFUQykgeworCQkvLyBjbGVhciBETUFUQyBpbnRlcnJ1cHQgYml0CisJCW91dGIoQ0xFQVJfSU5UUl9NQVNLICYgfkRNQVRDLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU1RBVFVTKTsKKwkJLy8gc3dpdGNoIGRtYSBjaGFubmVscyBmb3IgbmV4dCB0aW1lLCBpZiBhcHByb3ByaWF0ZQorCQlpZiAoZHVhbF9kbWEpIHsKKwkJCS8vIHJlYWQgZGF0YSBmcm9tIHRoZSBvdGhlciBjaGFubmVsIG5leHQgdGltZQorCQkJaWYgKGRldnByaXYtPmRtYV9jdXJyZW50ID09IGRldnByaXYtPmRtYTApIHsKKwkJCQlkZXZwcml2LT5kbWFfY3VycmVudCA9IGRldnByaXYtPmRtYTE7CisJCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPSBkZXZwcml2LT5kbWEwOworCQkJCWRldnByaXYtPmRtYV9jdXJyZW50X2J1ZiA9IGRldnByaXYtPmFpX2J1ZjA7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgbXVuZ2VfYmlwb2xhcl9zYW1wbGUoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdWludDE2X3Qgc2FtcGxlKQoreworCXNhbXBsZSArPSAxIDw8ICh0aGlzYm9hcmQtPnJlc29sdXRpb24gLSAxKTsKKwlyZXR1cm4gc2FtcGxlOworfQorCitzdGF0aWMgdm9pZCBtdW5nZV9kYXRhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCAqIGFycmF5LAorCXVuc2lnbmVkIGludCBudW1fZWxlbWVudHMpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHVuaXBvbGFyOworCisJLyogc2VlIGlmIGNhcmQgaXMgdXNpbmcgYSB1bmlwb2xhciBvciBiaXBvbGFyIHJhbmdlIHNvIHdlIGNhbiBtdW5nZSBkYXRhIGNvcnJlY3RseSAqLworCXVuaXBvbGFyID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0MpICYgVUI7CisKKwkvKiBjb252ZXJ0IHRvIHVuc2lnbmVkIHR5cGUgaWYgd2UgYXJlIGluIGEgYmlwb2xhciBtb2RlICovCisJaWYgKCF1bmlwb2xhcikgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRzOyBpKyspIHsKKwkJCWFycmF5W2ldID0gbXVuZ2VfYmlwb2xhcl9zYW1wbGUoZGV2LCBhcnJheVtpXSk7CisJCX0KKwl9Cit9CisKKy8qIFV0aWxpdHkgZnVuY3Rpb24gdXNlZCBieSBkYXMxODAwX2ZsdXNoX2RtYSgpIGFuZCBkYXMxODAwX2hhbmRsZV9kbWEoKS4KKyAqIEFzc3VtZXMgZG1hIGxvY2sgaXMgaGVsZCAqLworc3RhdGljIHZvaWQgZGFzMTgwMF9mbHVzaF9kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCBjaGFubmVsLCB1aW50MTZfdCAqIGJ1ZmZlcikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCBudW1fc2FtcGxlczsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlkaXNhYmxlX2RtYShjaGFubmVsKTsKKworCS8qIGNsZWFyIGZsaXAtZmxvcCB0byBtYWtlIHN1cmUgMi1ieXRlIHJlZ2lzdGVycworCSAqIGdldCBzZXQgY29ycmVjdGx5ICovCisJY2xlYXJfZG1hX2ZmKGNoYW5uZWwpOworCisJLy8gZmlndXJlIG91dCBob3cgbWFueSBwb2ludHMgdG8gcmVhZAorCW51bV9ieXRlcyA9IGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplIC0gZ2V0X2RtYV9yZXNpZHVlKGNoYW5uZWwpOworCW51bV9zYW1wbGVzID0gbnVtX2J5dGVzIC8gc2l6ZW9mKHNob3J0KTsKKworCS8qIGlmIHdlIG9ubHkgbmVlZCBzb21lIG9mIHRoZSBwb2ludHMgKi8KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPmNvdW50IDwgbnVtX3NhbXBsZXMpCisJCW51bV9zYW1wbGVzID0gZGV2cHJpdi0+Y291bnQ7CisKKwltdW5nZV9kYXRhKGRldiwgYnVmZmVyLCBudW1fc2FtcGxlcyk7CisJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBidWZmZXIsIG51bV9ieXRlcyk7CisJaWYgKHMtPmFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJZGV2cHJpdi0+Y291bnQgLT0gbnVtX3NhbXBsZXM7CisKKwlyZXR1cm47Cit9CisKKy8qIGZsdXNoZXMgcmVtYWluaW5nIGRhdGEgZnJvbSBib2FyZCB3aGVuIGV4dGVybmFsIHRyaWdnZXIgaGFzIHN0b3BwZWQgYXF1aXNpdGlvbgorICogYW5kIHdlIGFyZSB1c2luZyBkbWEgdHJhbnNmZXJzICovCitzdGF0aWMgdm9pZCBkYXMxODAwX2ZsdXNoX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29uc3QgaW50IGR1YWxfZG1hID0gZGV2cHJpdi0+aXJxX2RtYV9iaXRzICYgRE1BX0RVQUw7CisKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGFzMTgwMF9mbHVzaF9kbWFfY2hhbm5lbChkZXYsIHMsIGRldnByaXYtPmRtYV9jdXJyZW50LAorCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYpOworCisJaWYgKGR1YWxfZG1hKSB7CisJCS8vIHN3aXRjaCB0byBvdGhlciBjaGFubmVsIGFuZCBmbHVzaCBpdAorCQlpZiAoZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPT0gZGV2cHJpdi0+ZG1hMCkgeworCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPSBkZXZwcml2LT5kbWExOworCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmRtYV9jdXJyZW50ID0gZGV2cHJpdi0+ZG1hMDsKKwkJCWRldnByaXYtPmRtYV9jdXJyZW50X2J1ZiA9IGRldnByaXYtPmFpX2J1ZjA7CisJCX0KKwkJZGFzMTgwMF9mbHVzaF9kbWFfY2hhbm5lbChkZXYsIHMsIGRldnByaXYtPmRtYV9jdXJyZW50LAorCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmKTsKKwl9CisKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKworCS8vIGdldCBhbnkgcmVtYWluaW5nIHNhbXBsZXMgaW4gZmlmbworCWRhczE4MDBfaGFuZGxlX2ZpZm9fbm90X2VtcHR5KGRldiwgcyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGRhczE4MDBfaGFuZGxlX2ZpZm9faGFsZl9mdWxsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgbnVtUG9pbnRzID0gMDsJLyogbnVtYmVyIG9mIHBvaW50cyB0byByZWFkICovCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJbnVtUG9pbnRzID0gRklGT19TSVpFIC8gMjsKKwkvKiBpZiB3ZSBvbmx5IG5lZWQgc29tZSBvZiB0aGUgcG9pbnRzICovCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5jb3VudCA8IG51bVBvaW50cykKKwkJbnVtUG9pbnRzID0gZGV2cHJpdi0+Y291bnQ7CisJaW5zdyhkZXYtPmlvYmFzZSArIERBUzE4MDBfRklGTywgZGV2cHJpdi0+YWlfYnVmMCwgbnVtUG9pbnRzKTsKKwltdW5nZV9kYXRhKGRldiwgZGV2cHJpdi0+YWlfYnVmMCwgbnVtUG9pbnRzKTsKKwljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRldnByaXYtPmFpX2J1ZjAsCisJCW51bVBvaW50cyAqIHNpemVvZihkZXZwcml2LT5haV9idWYwWzBdKSk7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJZGV2cHJpdi0+Y291bnQgLT0gbnVtUG9pbnRzOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZGFzMTgwMF9oYW5kbGVfZmlmb19ub3RfZW1wdHkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXNob3J0IGRwbnQ7CisJaW50IHVuaXBvbGFyOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCXVuaXBvbGFyID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0MpICYgVUI7CisKKwl3aGlsZSAoaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpICYgRk5FKSB7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+Y291bnQgPT0gMCkKKwkJCWJyZWFrOworCQlkcG50ID0gaW53KGRldi0+aW9iYXNlICsgREFTMTgwMF9GSUZPKTsKKwkJLyogY29udmVydCB0byB1bnNpZ25lZCB0eXBlIGlmIHdlIGFyZSBpbiBhIGJpcG9sYXIgbW9kZSAqLworCQlpZiAoIXVuaXBvbGFyKSA7CisJCWRwbnQgPSBtdW5nZV9iaXBvbGFyX3NhbXBsZShkZXYsIGRwbnQpOworCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRwbnQpOworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQkJZGV2cHJpdi0+Y291bnQtLTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZGFzMTgwMF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlvdXRiKDB4MCwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUyk7CS8qIGRpc2FibGUgY29udmVyc2lvbnMgKi8KKwlvdXRiKDB4MCwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQik7CS8qIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgZG1hICovCisJb3V0YigweDAsIGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0EpOwkvKiBkaXNhYmxlIGFuZCBjbGVhciBmaWZvIGFuZCBzdG9wIHRyaWdnZXJpbmcgKi8KKwlpZiAoZGV2cHJpdi0+ZG1hMCkKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMCk7CisJaWYgKGRldnByaXYtPmRtYTEpCisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYTEpOworCXJldHVybiAwOworfQorCisvKiB0ZXN0IGFuYWxvZyBpbnB1dCBjbWQgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9kb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgdG1wX2FyZzsKKwlpbnQgaTsKKwlpbnQgdW5pcG9sYXI7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1cgfCBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX0VYVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLy8gdW5pcXVlbmVzcyBjaGVjaworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJgorCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwkvL2NvbXBhdGliaWxpdHkgY2hlY2sKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc2JvYXJkLT5haV9zcGVlZCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNib2FyZC0+YWlfc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLy8gaWYgd2UgYXJlIG5vdCBpbiBidXJzdCBtb2RlCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CisJCQl0bXBfYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJCS8qIGNhbGN1bGF0ZSBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCB0aW1pbmcgKi8KKwkJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihUSU1FUl9CQVNFLAorCQkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLCAmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCQkmKGNtZC0+Y29udmVydF9hcmcpLAorCQkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQkJaWYgKHRtcF9hcmcgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCQllcnIrKzsKKwkJfQorCQkvLyBpZiB3ZSBhcmUgaW4gYnVyc3QgbW9kZQorCQllbHNlIHsKKwkJCS8vIGNoZWNrIHRoYXQgY29udmVydF9hcmcgaXMgY29tcGF0aWJsZQorCQkJdG1wX2FyZyA9IGNtZC0+Y29udmVydF9hcmc7CisJCQljbWQtPmNvbnZlcnRfYXJnID0KKwkJCQlidXJzdF9jb252ZXJ0X2FyZyhjbWQtPmNvbnZlcnRfYXJnLAorCQkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQkJaWYgKHRtcF9hcmcgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCQllcnIrKzsKKworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJCS8vIGlmIHNjYW5zIGFyZSB0aW1lZCBmYXN0ZXIgdGhhbiBjb252ZXJzaW9uIHJhdGUgYWxsb3dzCisJCQkJaWYgKGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbiA+CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcpIHsKKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJCQljbWQtPmNvbnZlcnRfYXJnICoKKwkJCQkJCWNtZC0+Y2hhbmxpc3RfbGVuOworCQkJCQllcnIrKzsKKwkJCQl9CisJCQkJdG1wX2FyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCQkJLyogY2FsY3VsYXRlIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHRpbWluZyAqLworCQkJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihUSU1FUl9CQVNFLAorCQkJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwKKwkJCQkJJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkJCSYoY21kLT5zY2FuX2JlZ2luX2FyZyksCisJCQkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQkJCWlmICh0bXBfYXJnICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQkJCWVycisrOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvLyBtYWtlIHN1cmUgdXNlciBpcyBub3QgdHJ5aW5nIHRvIG1peCB1bmlwb2xhciBhbmQgYmlwb2xhciByYW5nZXMKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQl1bmlwb2xhciA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pICYgVU5JUE9MQVI7CisJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlpZiAodW5pcG9sYXIgIT0gKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICYgVU5JUE9MQVIpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJInVuaXBvbGFyIGFuZCBiaXBvbGFyIHJhbmdlcyBjYW5ub3QgYmUgbWl4ZWQgaW4gdGhlIGNoYW5saXN0Iik7CisJCQkJZXJyKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCisvKiBhbmFsb2cgaW5wdXQgY21kIGludGVyZmFjZSAqLworCisvLyBmaXJzdCwgc29tZSB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGluIHRoZSBtYWluIGFpX2RvX2NtZCgpCisKKy8vIHJldHVybnMgYXBwcm9wcmlhdGUgYml0cyBmb3IgY29udHJvbCByZWdpc3RlciBhLCBkZXBlbmRpbmcgb24gY29tbWFuZAorc3RhdGljIGludCBjb250cm9sX2FfYml0cyhzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJaW50IGNvbnRyb2xfYTsKKworCWNvbnRyb2xfYSA9IEZGRU47CS8vZW5hYmxlIGZpZm8KKwlpZiAoY21kLnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7CisJCWNvbnRyb2xfYSB8PSBBVEVOOworCX0KKwlzd2l0Y2ggKGNtZC5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfRVhUOgorCQljb250cm9sX2EgfD0gVEdFTiB8IENHU0w7CisJCWJyZWFrOworCWNhc2UgVFJJR19OT1c6CisJCWNvbnRyb2xfYSB8PSBDR0VOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY29udHJvbF9hOworfQorCisvLyByZXR1cm5zIGFwcHJvcHJpYXRlIGJpdHMgZm9yIGNvbnRyb2wgcmVnaXN0ZXIgYywgZGVwZW5kaW5nIG9uIGNvbW1hbmQKK3N0YXRpYyBpbnQgY29udHJvbF9jX2JpdHMoc3RydWN0IGNvbWVkaV9jbWQgY21kKQoreworCWludCBjb250cm9sX2M7CisJaW50IGFyZWY7CisKKwkvKiBzZXQgY2xvY2sgc291cmNlIHRvIGludGVybmFsIG9yIGV4dGVybmFsLCBzZWxlY3QgYW5hbG9nIHJlZmVyZW5jZSwKKwkgKiBzZWxlY3QgdW5pcG9sYXIgLyBiaXBvbGFyCisJICovCisJYXJlZiA9IENSX0FSRUYoY21kLmNoYW5saXN0WzBdKTsKKwljb250cm9sX2MgPSBVUUVOOwkvL2VuYWJsZSB1cHBlciBxcmFtIGFkZHJlc3NlcworCWlmIChhcmVmICE9IEFSRUZfRElGRikKKwkJY29udHJvbF9jIHw9IFNEOworCWlmIChhcmVmID09IEFSRUZfQ09NTU9OKQorCQljb250cm9sX2MgfD0gQ01FTjsKKwkvKiBpZiBhIHVuaXBvbGFyIHJhbmdlIHdhcyBzZWxlY3RlZCAqLworCWlmIChDUl9SQU5HRShjbWQuY2hhbmxpc3RbMF0pICYgVU5JUE9MQVIpCisJCWNvbnRyb2xfYyB8PSBVQjsKKwlzd2l0Y2ggKGNtZC5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19GT0xMT1c6CS8vIG5vdCBpbiBidXJzdCBtb2RlCisJCXN3aXRjaCAoY21kLmNvbnZlcnRfc3JjKSB7CisJCWNhc2UgVFJJR19USU1FUjoKKwkJCS8qIHRyaWcgb24gY2FzY2FkZWQgY291bnRlcnMgKi8KKwkJCWNvbnRyb2xfYyB8PSBJUENMSzsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfRVhUOgorCQkJLyogdHJpZyBvbiBmYWxsaW5nIGVkZ2Ugb2YgZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkJY29udHJvbF9jIHw9IFhQQ0xLOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfVElNRVI6CisJCS8vIGJ1cnN0IG1vZGUgd2l0aCBpbnRlcm5hbCBwYWNlciBjbG9jaworCQljb250cm9sX2MgfD0gQk1ERSB8IElQQ0xLOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQkvLyBidXJzdCBtb2RlIHdpdGggZXh0ZXJuYWwgdHJpZ2dlcgorCQljb250cm9sX2MgfD0gQk1ERSB8IFhQQ0xLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY29udHJvbF9jOworfQorCisvLyBzZXRzIHVwIGNvdW50ZXJzCitzdGF0aWMgaW50IHNldHVwX2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJLy8gc2V0dXAgY2FzY2FkZWQgY291bnRlcnMgZm9yIGNvbnZlcnNpb24vc2NhbiBmcmVxdWVuY3kKKwlzd2l0Y2ggKGNtZC5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19GT0xMT1c6CS8vIG5vdCBpbiBidXJzdCBtb2RlCisJCWlmIChjbWQuY29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkJLyogc2V0IGNvbnZlcnNpb24gZnJlcXVlbmN5ICovCisJCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwKKwkJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkJJihjbWQuY29udmVydF9hcmcpLAorCQkJCWNtZC5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQlpZiAoZGFzMTgwMF9zZXRfZnJlcXVlbmN5KGRldikgPCAwKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19USU1FUjoJLy8gaW4gYnVyc3QgbW9kZQorCQkvKiBzZXQgc2NhbiBmcmVxdWVuY3kgKi8KKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsICYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkJJihkZXZwcml2LT5kaXZpc29yMiksICYoY21kLnNjYW5fYmVnaW5fYXJnKSwKKwkJCWNtZC5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmIChkYXMxODAwX3NldF9mcmVxdWVuY3koZGV2KSA8IDApIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvLyBzZXR1cCBjb3VudGVyIDAgZm9yICdhYm91dCB0cmlnZ2VyaW5nJworCWlmIChjbWQuc3RvcF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJLy8gbG9hZCBjb3VudGVyIDAgaW4gbW9kZSAwCisJCWk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPVU5URVIsIDAsIDAsIDEsIDApOworCX0KKworCXJldHVybiAwOworfQorCisvLyBzZXRzIHVwIGRtYQorc3RhdGljIHZvaWQgc2V0dXBfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWNvbnN0IGludCBkdWFsX2RtYSA9IGRldnByaXYtPmlycV9kbWFfYml0cyAmIERNQV9EVUFMOworCisJaWYgKChkZXZwcml2LT5pcnFfZG1hX2JpdHMgJiBETUFfRU5BQkxFRCkgPT0gMCkKKwkJcmV0dXJuOworCisJLyogZGV0ZXJtaW5lIGEgcmVhc29uYWJsZSBkbWEgdHJhbnNmZXIgc2l6ZSAqLworCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID0gc3VnZ2VzdF90cmFuc2Zlcl9zaXplKCZjbWQpOworCWxvY2tfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYTApOworCS8qIGNsZWFyIGZsaXAtZmxvcCB0byBtYWtlIHN1cmUgMi1ieXRlIHJlZ2lzdGVycyBmb3IKKwkgKiBjb3VudCBhbmQgYWRkcmVzcyBnZXQgc2V0IGNvcnJlY3RseSAqLworCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWEwKTsKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hMCwgdmlydF90b19idXMoZGV2cHJpdi0+YWlfYnVmMCkpOworCS8vIHNldCBhcHByb3ByaWF0ZSBzaXplIG9mIHRyYW5zZmVyCisJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEwLCBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSk7CisJZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPSBkZXZwcml2LT5kbWEwOworCWRldnByaXYtPmRtYV9jdXJyZW50X2J1ZiA9IGRldnByaXYtPmFpX2J1ZjA7CisJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEwKTsKKwkvLyBzZXQgdXAgZHVhbCBkbWEgaWYgYXBwcm9wcmlhdGUKKwlpZiAoZHVhbF9kbWEpIHsKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMSk7CisJCS8qIGNsZWFyIGZsaXAtZmxvcCB0byBtYWtlIHN1cmUgMi1ieXRlIHJlZ2lzdGVycyBmb3IKKwkJICogY291bnQgYW5kIGFkZHJlc3MgZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwkJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYTEpOworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hMSwgdmlydF90b19idXMoZGV2cHJpdi0+YWlfYnVmMSkpOworCQkvLyBzZXQgYXBwcm9wcmlhdGUgc2l6ZSBvZiB0cmFuc2ZlcgorCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYTEsIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWExKTsKKwl9CisJcmVsZWFzZV9kbWFfbG9jayhsb2NrX2ZsYWdzKTsKKworCXJldHVybjsKK30KKworLy8gcHJvZ3JhbXMgY2hhbm5lbC9nYWluIGxpc3QgaW50byBjYXJkCitzdGF0aWMgdm9pZCBwcm9ncmFtX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJaW50IGksIG4sIGNoYW5fcmFuZ2U7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJY29uc3QgaW50IHJhbmdlX21hc2sgPSAweDM7CS8vbWFza3MgdW5pcG9sYXIvYmlwb2xhciBiaXQgb2ZmIHJhbmdlCisJY29uc3QgaW50IHJhbmdlX2JpdHNoaWZ0ID0gODsKKworCW4gPSBjbWQuY2hhbmxpc3RfbGVuOworCS8vIHNwaW5sb2NrIHByb3RlY3RzIGluZGlyZWN0IGFkZHJlc3NpbmcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihRUkFNLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsJLyogc2VsZWN0IFFSQU0gZm9yIGJhc2VBZGRyZXNzICsgMHgwICovCisJb3V0YihuIC0gMSwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1FSQU1fQUREUkVTUyk7CS8qc2V0IFFSQU0gYWRkcmVzcyBzdGFydCAqLworCS8qIG1ha2UgY2hhbm5lbCAvIGdhaW4gbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJY2hhbl9yYW5nZSA9CisJCQlDUl9DSEFOKGNtZC5jaGFubGlzdFtpXSkgfCAoKENSX1JBTkdFKGNtZC4KKwkJCQkJY2hhbmxpc3RbaV0pICYgcmFuZ2VfbWFzaykgPDwKKwkJCXJhbmdlX2JpdHNoaWZ0KTsKKwkJb3V0dyhjaGFuX3JhbmdlLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfUVJBTSk7CisJfQorCW91dGIobiAtIDEsIGRldi0+aW9iYXNlICsgREFTMTgwMF9RUkFNX0FERFJFU1MpOwkvKmZpbmlzaCB3cml0ZSB0byBRUkFNICovCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm47Cit9CisKKy8vIGFuYWxvZyBpbnB1dCBkb19jbWQKK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9kb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgcmV0OworCWludCBjb250cm9sX2EsIGNvbnRyb2xfYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kIGNtZCA9IGFzeW5jLT5jbWQ7CisKKwlpZiAoIWRldi0+aXJxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkibm8gaXJxIGFzc2lnbmVkIGZvciBkYXMtMTgwMCwgY2Fubm90IGRvIGhhcmR3YXJlIGNvbnZlcnNpb25zIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBkaXNhYmxlIGRtYSBvbiBUUklHX1dBS0VfRU9TLCBvciBUUklHX1JUCisJICogKGJlY2F1c2UgZG1hIGluIGhhbmRsZXIgaXMgdW5zYWZlIGF0IGhhcmQgcmVhbC10aW1lIHByaW9yaXR5KSAqLworCWlmIChjbWQuZmxhZ3MgJiAoVFJJR19XQUtFX0VPUyB8IFRSSUdfUlQpKSB7CisJCWRldnByaXYtPmlycV9kbWFfYml0cyAmPSB+RE1BX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IGRldnByaXYtPmRtYV9iaXRzOworCX0KKwkvLyBpbnRlcnJ1cHQgb24gZW5kIG9mIGNvbnZlcnNpb24gZm9yIFRSSUdfV0FLRV9FT1MKKwlpZiAoY21kLmZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQkvLyBpbnRlcnJ1cHQgZmlmbyBub3QgZW1wdHkKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzICY9IH5GSU1EOworCX0gZWxzZSB7CisJCS8vIGludGVycnVwdCBmaWZvIGhhbGYgZnVsbAorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gRklNRDsKKwl9CisJLy8gZGV0ZXJtaW5lIGhvdyBtYW55IGNvbnZlcnNpb25zIHdlIG5lZWQKKwlpZiAoY21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+Y291bnQgPSBjbWQuc3RvcF9hcmcgKiBjbWQuY2hhbmxpc3RfbGVuOworCX0KKworCWRhczE4MDBfY2FuY2VsKGRldiwgcyk7CisKKwkvLyBkZXRlcm1pbmUgcHJvcGVyIGJpdHMgZm9yIGNvbnRyb2wgcmVnaXN0ZXJzCisJY29udHJvbF9hID0gY29udHJvbF9hX2JpdHMoY21kKTsKKwljb250cm9sX2MgPSBjb250cm9sX2NfYml0cyhjbWQpOworCisJLyogc2V0dXAgY2FyZCBhbmQgc3RhcnQgKi8KKwlwcm9ncmFtX2NoYW5saXN0KGRldiwgY21kKTsKKwlyZXQgPSBzZXR1cF9jb3VudGVycyhkZXYsIGNtZCk7CisJaWYgKHJldCA8IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIkVycm9yIHNldHRpbmcgdXAgY291bnRlcnMiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc2V0dXBfZG1hKGRldiwgY21kKTsKKwlvdXRiKGNvbnRyb2xfYywgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQyk7CisJLy8gc2V0IGNvbnZlcnNpb24gcmF0ZSBhbmQgbGVuZ3RoIGZvciBidXJzdCBtb2RlCisJaWYgKGNvbnRyb2xfYyAmIEJNREUpIHsKKwkJLy8gcHJvZ3JhbSBjb252ZXJzaW9uIHBlcmlvZCB3aXRoIG51bWJlciBvZiBtaWNyb3NlY29uZHMgbWludXMgMQorCQlvdXRiKGNtZC5jb252ZXJ0X2FyZyAvIDEwMDAgLSAxLAorCQkJZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0JVUlNUX1JBVEUpOworCQlvdXRiKGNtZC5jaGFubGlzdF9sZW4gLSAxLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQlVSU1RfTEVOR1RIKTsKKwl9CisJb3V0YihkZXZwcml2LT5pcnFfZG1hX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0IpOwkvLyBlbmFibGUgaXJxL2RtYQorCW91dGIoY29udHJvbF9hLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9BKTsJLyogZW5hYmxlIGZpZm8gYW5kIHRyaWdnZXJpbmcgKi8KKwlvdXRiKENWRU4sIGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOwkvKiBlbmFibGUgY29udmVyc2lvbnMgKi8KKworCXJldHVybiAwOworfQorCisvKiByZWFkIGFuYWxvZyBpbnB1dCAqLworc3RhdGljIGludCBkYXMxODAwX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgY2hhbiwgcmFuZ2UsIGFyZWYsIGNoYW5fcmFuZ2U7CisJaW50IHRpbWVvdXQgPSAxMDAwOworCXNob3J0IGRwbnQ7CisJaW50IGNvbnZfZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJLyogc2V0IHVwIGFuYWxvZyByZWZlcmVuY2UgYW5kIHVuaXBvbGFyIC8gYmlwb2xhciBtb2RlICovCisJYXJlZiA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWNvbnZfZmxhZ3MgfD0gVVFFTjsKKwlpZiAoYXJlZiAhPSBBUkVGX0RJRkYpCisJCWNvbnZfZmxhZ3MgfD0gU0Q7CisJaWYgKGFyZWYgPT0gQVJFRl9DT01NT04pCisJCWNvbnZfZmxhZ3MgfD0gQ01FTjsKKwkvKiBpZiBhIHVuaXBvbGFyIHJhbmdlIHdhcyBzZWxlY3RlZCAqLworCWlmIChDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykgJiBVTklQT0xBUikKKwkJY29udl9mbGFncyB8PSBVQjsKKworCW91dGIoY29udl9mbGFncywgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQyk7CS8qIHNvZnR3YXJlIGNvbnZlcnNpb24gZW5hYmxlZCAqLworCW91dGIoQ1ZFTiwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUyk7CS8qIGVuYWJsZSBjb252ZXJzaW9ucyAqLworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9BKTsJLyogcmVzZXQgZmlmbyAqLworCW91dGIoRkZFTiwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQSk7CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJLyogbWFzayBvZiB1bmlwb2xhci9iaXBvbGFyIGJpdCBmcm9tIHJhbmdlICovCisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykgJiAweDM7CisJY2hhbl9yYW5nZSA9IGNoYW4gfCAocmFuZ2UgPDwgOCk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoUVJBTSwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NFTEVDVCk7CS8qIHNlbGVjdCBRUkFNIGZvciBiYXNlQWRkcmVzcyArIDB4MCAqLworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfUVJBTV9BRERSRVNTKTsJLyogc2V0IFFSQU0gYWRkcmVzcyBzdGFydCAqLworCW91dHcoY2hhbl9yYW5nZSwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1FSQU0pOworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfUVJBTV9BRERSRVNTKTsJLypmaW5pc2ggd3JpdGUgdG8gUVJBTSAqLworCW91dGIoQURDLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsJLyogc2VsZWN0IEFEQyBmb3IgYmFzZUFkZHJlc3MgKyAweDAgKi8KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogdHJpZ2dlciBjb252ZXJzaW9uICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0ZJRk8pOworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQlpZiAoaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpICYgRk5FKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IHRpbWVvdXQpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCWRwbnQgPSBpbncoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0ZJRk8pOworCQkvKiBzaGlmdCBkYXRhIHRvIG9mZnNldCBiaW5hcnkgZm9yIGJpcG9sYXIgcmFuZ2VzICovCisJCWlmICgoY29udl9mbGFncyAmIFVCKSA9PSAwKQorCQkJZHBudCArPSAxIDw8ICh0aGlzYm9hcmQtPnJlc29sdXRpb24gLSAxKTsKKwkJZGF0YVtuXSA9IGRwbnQ7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCisJcmV0dXJuIG47Cit9CisKKy8qIHdyaXRlcyB0byBhbiBhbmFsb2cgb3V0cHV0IGNoYW5uZWwgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKy8vICAgICAgaW50IHJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWludCB1cGRhdGVfY2hhbiA9IHRoaXNib2FyZC0+YW9fbl9jaGFuIC0gMTsKKwlzaG9ydCBvdXRwdXQ7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwkvLyAgY2FyZCBleHBlY3RzIHR3bydzIGNvbXBsZW1lbnQgZGF0YQorCW91dHB1dCA9IGRhdGFbMF0gLSAoMSA8PCAodGhpc2JvYXJkLT5yZXNvbHV0aW9uIC0gMSkpOworCS8vIGlmIHRoZSB3cml0ZSBpcyB0byB0aGUgJ3VwZGF0ZScgY2hhbm5lbCwgd2UgbmVlZCB0byByZW1lbWJlciBpdHMgdmFsdWUKKwlpZiAoY2hhbiA9PSB1cGRhdGVfY2hhbikKKwkJZGV2cHJpdi0+YW9fdXBkYXRlX2JpdHMgPSBvdXRwdXQ7CisJLy8gd3JpdGUgdG8gY2hhbm5lbAorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlvdXRiKERBQyhjaGFuKSwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NFTEVDVCk7CS8qIHNlbGVjdCBkYWMgY2hhbm5lbCBmb3IgYmFzZUFkZHJlc3MgKyAweDAgKi8KKwlvdXR3KG91dHB1dCwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0RBQyk7CisJLy8gbm93IHdlIG5lZWQgdG8gd3JpdGUgdG8gJ3VwZGF0ZScgY2hhbm5lbCB0byB1cGRhdGUgYWxsIGRhYyBjaGFubmVscworCWlmIChjaGFuICE9IHVwZGF0ZV9jaGFuKSB7CisJCW91dGIoREFDKHVwZGF0ZV9jaGFuKSwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NFTEVDVCk7CS8qIHNlbGVjdCAndXBkYXRlJyBjaGFubmVsIGZvciBiYXNlQWRkcmVzcyArIDB4MCAqLworCQlvdXR3KGRldnByaXYtPmFvX3VwZGF0ZV9iaXRzLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfREFDKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm4gMTsKK30KKworLyogcmVhZHMgZnJvbSBkaWdpdGFsIGlucHV0IGNoYW5uZWxzICovCitzdGF0aWMgaW50IGRhczE4MDBfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIERBUzE4MDBfRElHSVRBTCkgJiAweGY7CisJZGF0YVswXSA9IDA7CisKKwlyZXR1cm4gMjsKK30KKworLyogd3JpdGVzIHRvIGRpZ2l0YWwgb3V0cHV0IGNoYW5uZWxzICovCitzdGF0aWMgaW50IGRhczE4MDBfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCB3Yml0czsKKworCS8vIG9ubHkgc2V0IGJpdHMgdGhhdCBoYXZlIGJlZW4gbWFza2VkCisJZGF0YVswXSAmPSAoMSA8PCBzLT5uX2NoYW4pIC0gMTsKKwl3Yml0cyA9IGRldnByaXYtPmRvX2JpdHM7CisJd2JpdHMgJj0gfmRhdGFbMF07CisJd2JpdHMgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJZGV2cHJpdi0+ZG9fYml0cyA9IHdiaXRzOworCisJb3V0YihkZXZwcml2LT5kb19iaXRzLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfRElHSVRBTCk7CisKKwlkYXRhWzFdID0gZGV2cHJpdi0+ZG9fYml0czsKKworCXJldHVybiAyOworfQorCisvKiBsb2FkcyBjb3VudGVycyB3aXRoIGRpdmlzb3IxLCBkaXZpc29yMiBmcm9tIHByaXZhdGUgc3RydWN0dXJlICovCitzdGF0aWMgaW50IGRhczE4MDBfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCS8vIGNvdW50ZXIgMSwgbW9kZSAyCisJaWYgKGk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPVU5URVIsIDAsIDEsIGRldnByaXYtPmRpdmlzb3IxLAorCQkJMikpCisJCWVycisrOworCS8vIGNvdW50ZXIgMiwgbW9kZSAyCisJaWYgKGk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPVU5URVIsIDAsIDIsIGRldnByaXYtPmRpdmlzb3IyLAorCQkJMikpCisJCWVycisrOworCWlmIChlcnIpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKiBjb252ZXJ0cyByZXF1ZXN0ZWQgY29udmVyc2lvbiB0aW1pbmcgdG8gdGltaW5nIGNvbXBhdGlibGUgd2l0aAorICogaGFyZHdhcmUsIHVzZWQgb25seSB3aGVuIGNhcmQgaXMgaW4gJ2J1cnN0IG1vZGUnCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYnVyc3RfY29udmVydF9hcmcodW5zaWduZWQgaW50IGNvbnZlcnRfYXJnLCBpbnQgcm91bmRfbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWljcm9fc2VjOworCisJLy8gaW4gYnVyc3QgbW9kZSwgdGhlIG1heGltdW0gY29udmVyc2lvbiB0aW1lIGlzIDY0IG1pY3Jvc2Vjb25kcworCWlmIChjb252ZXJ0X2FyZyA+IDY0MDAwKQorCQljb252ZXJ0X2FyZyA9IDY0MDAwOworCisJLy8gdGhlIGNvbnZlcnNpb24gdGltZSBtdXN0IGJlIGFuIGludGVncmFsIG51bWJlciBvZiBtaWNyb3NlY29uZHMKKwlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwlkZWZhdWx0OgorCQltaWNyb19zZWMgPSAoY29udmVydF9hcmcgKyA1MDApIC8gMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCW1pY3JvX3NlYyA9IGNvbnZlcnRfYXJnIC8gMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQltaWNyb19zZWMgPSAoY29udmVydF9hcmcgLSAxKSAvIDEwMDAgKyAxOworCQlicmVhazsKKwl9CisKKwkvLyByZXR1cm4gbnVtYmVyIG9mIG5hbm9zZWNvbmRzCisJcmV0dXJuIG1pY3JvX3NlYyAqIDEwMDA7Cit9CisKKy8vIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBzdWdnZXN0cyBhIGRtYSB0cmFuc2ZlciBzaXplIGJhc2VkIG9uIHRoZSBjb252ZXJzaW9uIHBlcmlvZCAnbnMnCitzdGF0aWMgdW5zaWduZWQgaW50IHN1Z2dlc3RfdHJhbnNmZXJfc2l6ZShzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IERNQV9CVUZfU0laRTsKKwlzdGF0aWMgY29uc3QgaW50IHNhbXBsZV9zaXplID0gMjsJLy8gc2l6ZSBpbiBieXRlcyBvZiBvbmUgc2FtcGxlIGZyb20gYm9hcmQKKwl1bnNpZ25lZCBpbnQgZmlsbF90aW1lID0gMzAwMDAwMDAwOwkvLyB0YXJnZXQgdGltZSBpbiBuYW5vc2Vjb25kcyBmb3IgZmlsbGluZyBkbWEgYnVmZmVyCisJdW5zaWduZWQgaW50IG1heF9zaXplOwkvLyBtYXhpbXVtIHNpemUgd2Ugd2lsbCBhbGxvdyBmb3IgYSB0cmFuc2ZlcgorCisJLy8gbWFrZSBkbWEgYnVmZmVyIGZpbGwgaW4gMC4zIHNlY29uZHMgZm9yIHRpbWVkIG1vZGVzCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX0ZPTExPVzoJLy8gbm90IGluIGJ1cnN0IG1vZGUKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikKKwkJCXNpemUgPSAoZmlsbF90aW1lIC8gY21kLT5jb252ZXJ0X2FyZykgKiBzYW1wbGVfc2l6ZTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1RJTUVSOgorCQlzaXplID0gKGZpbGxfdGltZSAvIChjbWQtPnNjYW5fYmVnaW5fYXJnICogY21kLT5jaGFubGlzdF9sZW4pKSAqCisJCQlzYW1wbGVfc2l6ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2l6ZSA9IERNQV9CVUZfU0laRTsKKwkJYnJlYWs7CisJfQorCisJLy8gc2V0IGEgbWluaW11bSBhbmQgbWF4aW11bSBzaXplIGFsbG93ZWQKKwltYXhfc2l6ZSA9IERNQV9CVUZfU0laRTsKKwkvLyBpZiB3ZSBhcmUgdGFraW5nIGxpbWl0ZWQgbnVtYmVyIG9mIGNvbnZlcnNpb25zLCBsaW1pdCB0cmFuc2ZlciBzaXplIHRvIHRoYXQKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJCWNtZC0+c3RvcF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbiAqIHNhbXBsZV9zaXplIDwgbWF4X3NpemUpCisJCW1heF9zaXplID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuICogc2FtcGxlX3NpemU7CisKKwlpZiAoc2l6ZSA+IG1heF9zaXplKQorCQlzaXplID0gbWF4X3NpemU7CisJaWYgKHNpemUgPCBzYW1wbGVfc2l6ZSkKKwkJc2l6ZSA9IHNhbXBsZV9zaXplOworCisJcmV0dXJuIHNpemU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczY0MDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYThjYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczY0MDIuYwpAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAgIFNvbWUgY29tbWVudHMgb24gdGhlIGNvZGUuLgorCisgICAtIGl0IHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgdG8gdXNlIG91dGJfcCgpLgorCisgICAtIGlnbm9yZWlycSBjcmVhdGVzIGEgcmFjZSBjb25kaXRpb24uICBJdCBuZWVkcyB0byBiZSBmaXhlZC4KKworICovCisKKy8qCisgICBjb21lZGkvZHJpdmVycy9kYXM2NDAyLmMKKyAgIEFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIENvbXB1dGVyYm9hcmRzJyBEQVM2NDAyIEkvTyBjYXJkCisKKyAgIENvcHlyaWdodCAoQykgMTk5OSBPeXN0ZWluIFN2ZW5kc2VuIDxzdmVuZHNlbkBwdnYub3JnPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKy8qCitEcml2ZXI6IGRhczY0MDIKK0Rlc2NyaXB0aW9uOiBLZWl0aGxleSBNZXRyYWJ5dGUgREFTNjQwMiAoJiBjb21wYXRpYmxlcykKK0F1dGhvcjogT3lzdGVpbiBTdmVuZHNlbiA8c3ZlbmRzZW5AcHZ2Lm9yZz4KK1N0YXR1czogYml0cm90dGVuCitEZXZpY2VzOiBbS2VpdGhsZXkgTWV0cmFieXRlXSBEQVM2NDAyIChkYXM2NDAyKQorCitUaGlzIGRyaXZlciBoYXMgc3VmZmVyZWQgYml0cm90LgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgREFTNjQwMl9TSVpFIDE2CisKKyNkZWZpbmUgTl9XT1JEUyAzMDAwKjY0CisKKyNkZWZpbmUgU1RPUCAgICAwCisjZGVmaW5lIFNUQVJUICAgMQorCisjZGVmaW5lIFNDQU5MIDB4M2YwMAorI2RlZmluZSBCWVRFIHVuc2lnbmVkIGNoYXIKKyNkZWZpbmUgV09SRCB1bnNpZ25lZCBzaG9ydAorCisvKi0tLS0tIHJlZ2lzdGVyIDggLS0tLSovCisjZGVmaW5lIENMUklOVCAweDAxCisjZGVmaW5lIENMUlhUUiAweDAyCisjZGVmaW5lIENMUlhJTiAweDA0CisjZGVmaW5lIEVYVEVORCAweDEwCisjZGVmaW5lIEFSTUVEIDB4MjAJCS8qIGVuYWJsZSBjb250aW5nIG9mIHBvc3Qgc2FtcGxlIGNvbnYgKi8KKyNkZWZpbmUgUE9TVE1PREUgMHg0MAorI2RlZmluZSBNSFogMHg4MAkJLyogMTAgTUh6IGNsb2NrICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0gcmVnaXN0ZXIgOSAtLS0tKi8KKyNkZWZpbmUgSVJRICgweDA0IDw8IDQpCQkvKiB0aGVzZSB0d28gYXJlICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElSUVYgMTAJCQkvKiAgICAgICAgICAgICAgIGRlcGVuZGVudCBvbiBlYWNoIG90aGVyICovCisKKyNkZWZpbmUgQ09OVlNSQyAweDAzCQkvKiB0cmlnIHNyYyBpcyBJbnRhcm5hbCBwYWNlciAqLworI2RlZmluZSBCVVJTVEVOIDB4MDQJCS8qIGVuYWJsZSBidXJzdCAqLworI2RlZmluZSBYSU5URSAweDA4CQkvKiB1c2UgZXh0ZXJuYWwgaW50LiB0cmlnICovCisjZGVmaW5lIElOVEUgMHg4MAkJLyogZW5hYmxlIGFuYWxvZyBpbnRlcnJ1cHRzICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0gcmVnaXN0ZXIgMTAgLS0tKi8KKyNkZWZpbmUgVEdFTiAweDAxCQkvKiBVc2UgcGluIERJMSBmb3IgZXh0ZXJubCB0cmlnZ2luZz8gKi8KKyNkZWZpbmUgVEdTRUwgMHgwMgkJLyogVXNlIGVkZ2UgdHJpZ2dlcmluZyAqLworI2RlZmluZSBUR1BPTCAweDA0CQkvKiBhY3RpdmUgZWRnZSBpcyBmYWxsaW5nICovCisjZGVmaW5lIFBSRVRSSUcgMHgwOAkJLyogcHJldHJpZyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tIHJlZ2lzdGVyIDExIC0tLSovCisjZGVmaW5lIEVPQiAweDBjCisjZGVmaW5lIEZJRk9IRlVMTCAweDA4CisjZGVmaW5lIEdBSU4gMHgwMQorI2RlZmluZSBGSUZPTkVQVFkgMHgwNAorI2RlZmluZSBNT0RFIDB4MTAKKyNkZWZpbmUgU0VNIDB4MjAKKyNkZWZpbmUgQklQIDB4NDAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBNMCAweDAwCisjZGVmaW5lIE0yIDB4MDQKKworI2RlZmluZQlDMCAweDAwCisjZGVmaW5lCUMxIDB4NDAKKyNkZWZpbmUJQzIgMHg4MAorI2RlZmluZQlSV0xIIDB4MzAKKworc3RhdGljIGludCBkYXM2NDAyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRhczY0MDJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzNjQwMiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkYXM2NDAyIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkYXM2NDAyX2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXM2NDAyX2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzNjQwMik7CisKK3N0cnVjdCBkYXM2NDAyX3ByaXZhdGUgeworCWludCBhaV9ieXRlc190b19yZWFkOworCisJaW50IGRhczY0MDJfaWdub3JlaXJxOworfTsKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXM2NDAyX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyB2b2lkIGRhczY0MDJfYWlfZmlmb19kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIHZvaWQgZGFzNjQwMl9zZXRjb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCUJZVEUgcDsKKwl1bnNpZ25lZCBzaG9ydCBjdHJsd3JkOworCisJLyogc2V0IHVwIGNvdW50ZXIwIGZpcnN0LCBtb2RlIDAgKi8KKwlwID0gTTAgfCBDMCB8IFJXTEg7CisJb3V0Yl9wKHAsIGRldi0+aW9iYXNlICsgMTUpOworCWN0cmx3cmQgPSAyMDAwOworCXAgPSAoQllURSkgKDB4ZmYgJiBjdHJsd3JkKTsKKwlvdXRiX3AocCwgZGV2LT5pb2Jhc2UgKyAxMik7CisJcCA9IChCWVRFKSAoMHhmZiAmIChjdHJsd3JkID4+IDgpKTsKKwlvdXRiX3AocCwgZGV2LT5pb2Jhc2UgKyAxMik7CisKKwkvKiBzZXQgdXAgY291bnRlcjEsIG1vZGUgMiAqLworCXAgPSBNMiB8IEMxIHwgUldMSDsKKwlvdXRiX3AocCwgZGV2LT5pb2Jhc2UgKyAxNSk7CisJY3RybHdyZCA9IDEwOworCXAgPSAoQllURSkgKDB4ZmYgJiBjdHJsd3JkKTsKKwlvdXRiX3AocCwgZGV2LT5pb2Jhc2UgKyAxMyk7CisJcCA9IChCWVRFKSAoMHhmZiAmIChjdHJsd3JkID4+IDgpKTsKKwlvdXRiX3AocCwgZGV2LT5pb2Jhc2UgKyAxMyk7CisKKwkvKiBzZXQgdXAgY291bnRlcjEsIG1vZGUgMiAqLworCXAgPSBNMiB8IEMyIHwgUldMSDsKKwlvdXRiX3AocCwgZGV2LT5pb2Jhc2UgKyAxNSk7CisJY3RybHdyZCA9IDEwMDA7CisJcCA9IChCWVRFKSAoMHhmZiAmIGN0cmx3cmQpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDE0KTsKKwlwID0gKEJZVEUpICgweGZmICYgKGN0cmx3cmQgPj4gOCkpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDE0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzOworCisJaWYgKCFkZXYtPmF0dGFjaGVkIHx8IGRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxKSB7CisJCXByaW50aygiZGFzNjQwMjogQlVHOiBzcHVyaW91cyBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorI2lmZGVmIERFQlVHCisJcHJpbnRrKCJkYXM2NDAyOiBpbnRlcnJ1cHQhIGRhczY0MDJfaXJxY291bnQ9JWlcbiIsCisJCWRldnByaXYtPmRhczY0MDJfaXJxY291bnQpOworCXByaW50aygiZGFzNjQwMjogaW9iYXNlKzI9JWlcbiIsIGlud19wKGRldi0+aW9iYXNlICsgMikpOworI2VuZGlmCisKKwlkYXM2NDAyX2FpX2ZpZm9fZHJlZ3MoZGV2LCBzKTsKKworCWlmIChzLT5hc3luYy0+YnVmX3dyaXRlX2NvdW50ID49IGRldnByaXYtPmFpX2J5dGVzX3RvX3JlYWQpIHsKKwkJb3V0d19wKFNDQU5MLCBkZXYtPmlvYmFzZSArIDIpOwkvKiBjbGVhcnMgdGhlIGZpZm8gKi8KKwkJb3V0YigweDA3LCBkZXYtPmlvYmFzZSArIDgpOwkvKiBjbGVhcnMgYWxsIGZsaXAtZmxvcHMgKi8KKyNpZmRlZiBERUJVRworCQlwcmludGsoImRhczY0MDI6IEdvdCAlaSBzYW1wbGVzXG5cbiIsCisJCQlkZXZwcml2LT5kYXM2NDAyX3dvcmRzcmVhZCAtIGRpZmYpOworI2VuZGlmCisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCisJb3V0YigweDAxLCBkZXYtPmlvYmFzZSArIDgpOwkvKiBjbGVhciBvbmx5IHRoZSBpbnRlcnJ1cHQgZmxpcC1mbG9wICovCisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZiAwCitzdGF0aWMgdm9pZCBkYXM2NDAyX2FpX2ZpZm9fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc2hvcnQgKiBkYXRhLCBpbnQgbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWRhdGFbaV0gPSBpbncoZGV2LT5pb2Jhc2UpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRhczY0MDJfYWlfZmlmb19kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXdoaWxlICgxKSB7CisJCWlmICghKGluYihkZXYtPmlvYmFzZSArIDgpICYgMHgwMSkpCisJCQlyZXR1cm47CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBpbncoZGV2LT5pb2Jhc2UpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGFzNjQwMl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvKgorCSAqICBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXNldCB0aGUgYm9hcmQgZnJvbSB3aGF0ZXZlciBjb25kaXRpb24gaXQKKwkgKiAgaXMgaW4gKGkuZS4sIGFjcXVpcmluZyBkYXRhKSwgdG8gYSBub24tYWN0aXZlIHN0YXRlLgorCSAqLworCisJZGV2cHJpdi0+ZGFzNjQwMl9pZ25vcmVpcnEgPSAxOworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJkYXM2NDAyOiBTdG9wcGluZyBhY3F1aXNpdGlvblxuIik7CisjZW5kaWYKKwlkZXZwcml2LT5kYXM2NDAyX2lnbm9yZWlycSA9IDE7CisJb3V0Yl9wKDB4MDIsIGRldi0+aW9iYXNlICsgMTApOwkvKiBkaXNhYmxlIGV4dGVybmFsIHRyaWdnaW5nICovCisJb3V0d19wKFNDQU5MLCBkZXYtPmlvYmFzZSArIDIpOwkvKiByZXNldHMgdGhlIGNhcmQgZmlmbyAqLworCW91dGJfcCgwLCBkZXYtPmlvYmFzZSArIDkpOwkvKiBkaXNhYmxlcyBpbnRlcnJ1cHRzICovCisKKwlvdXR3X3AoU0NBTkwsIGRldi0+aW9iYXNlICsgMik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIHVudXNlZAorc3RhdGljIGludCBkYXM2NDAyX2FpX21vZGUyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJY29tZWRpX3RyaWcgKiBpdCkKK3sKKwlkZXZwcml2LT5kYXM2NDAyX2lnbm9yZWlycSA9IDE7CisKKyNpZmRlZiBERUJVRworCXByaW50aygiZGFzNjQwMjogU3RhcnRpbmcgYWNxdWlzaXRpb25cbiIpOworI2VuZGlmCisJb3V0Yl9wKDB4MDMsIGRldi0+aW9iYXNlICsgMTApOwkvKiBlbmFibGUgZXh0ZXJuYWwgdHJpZ2dpbmcgKi8KKwlvdXR3X3AoU0NBTkwsIGRldi0+aW9iYXNlICsgMik7CS8qIHJlc2V0cyB0aGUgY2FyZCBmaWZvICovCisJb3V0Yl9wKElSUSB8IENPTlZTUkMgfCBCVVJTVEVOIHwgSU5URSwgZGV2LT5pb2Jhc2UgKyA5KTsKKworCWRldnByaXYtPmFpX2J5dGVzX3RvX3JlYWQgPSBpdC0+biAqIHNpemVvZihzaG9ydCk7CisKKwkvKiB1bS4uLiBpZ25vcmVpcnEgaXMgYSBuYXN0eSByYWNlIGNvbmRpdGlvbiAqLworCWRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxID0gMDsKKworCW91dHdfcChTQ0FOTCwgZGV2LT5pb2Jhc2UgKyAyKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgYm9hcmRfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlCWVRFIGI7CisKKwlkZXZwcml2LT5kYXM2NDAyX2lnbm9yZWlycSA9IDE7CisKKwlvdXRiKDB4MDcsIGRldi0+aW9iYXNlICsgOCk7CisKKwkvKiByZWdpc3RlciAxMSAgKi8KKwlvdXRiX3AoTU9ERSwgZGV2LT5pb2Jhc2UgKyAxMSk7CisJYiA9IEJJUCB8IFNFTSB8IE1PREUgfCBHQUlOIHwgRklGT0hGVUxMOworCW91dGJfcChiLCBkZXYtPmlvYmFzZSArIDExKTsKKworCS8qIHJlZ2lzdGVyIDggICAqLworCW91dGJfcChFWFRFTkQsIGRldi0+aW9iYXNlICsgOCk7CisJYiA9IEVYVEVORCB8IE1IWjsKKwlvdXRiX3AoYiwgZGV2LT5pb2Jhc2UgKyA4KTsKKwliID0gTUhaIHwgQ0xSSU5UIHwgQ0xSWFRSIHwgQ0xSWElOOworCW91dGJfcChiLCBkZXYtPmlvYmFzZSArIDgpOworCisJLyogcmVnaXN0ZXIgOSAgICAqLworCWIgPSBJUlEgfCBDT05WU1JDIHwgQlVSU1RFTiB8IElOVEU7CisJb3V0Yl9wKGIsIGRldi0+aW9iYXNlICsgOSk7CisKKwkvKiByZWdpc3RlciAxMCAgICovCisJYiA9IFRHU0VMIHwgVEdFTjsKKwlvdXRiX3AoYiwgZGV2LT5pb2Jhc2UgKyAxMCk7CisKKwliID0gMHgwNzsKKwlvdXRiX3AoYiwgZGV2LT5pb2Jhc2UgKyA4KTsKKworCWRhczY0MDJfc2V0Y291bnRlcihkZXYpOworCisJb3V0d19wKFNDQU5MLCBkZXYtPmlvYmFzZSArIDIpOwkvKiByZXNldCBjYXJkIGZpZm8gKi8KKworCWRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczY0MDJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERBUzY0MDJfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXM2NDAyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAiZGFzNjQwMiI7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpZiAoaW9iYXNlID09IDApCisJCWlvYmFzZSA9IDB4MzAwOworCisJcHJpbnRrKCJjb21lZGklZDogZGFzNjQwMjogMHglMDRseCIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgREFTNjQwMl9TSVpFLCAiZGFzNjQwMiIpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJLyogc2hvdWxkIGRvIGEgcHJvYmUgaGVyZSAqLworCisJaXJxID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCIgKCBpcnEgPSAldSApIiwgaXJxKTsKKwlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRyX2hhbmRsZXIsIDAsICJkYXM2NDAyIiwgZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoImlycSBjb25mbGljdFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWRldi0+aXJxID0gaXJxOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkYXM2NDAyX3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGFpIHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworCXMtPm5fY2hhbiA9IDg7CisJLy9zLT50cmlnWzJdPWRhczY0MDJfYWlfbW9kZTI7CisJcy0+Y2FuY2VsID0gZGFzNjQwMl9haV9jYW5jZWw7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IDEyKSAtIDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CS8qID8gKi8KKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCisJYm9hcmRfaW5pdChkZXYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2NjU2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwpAQCAtMCwwICsxLDg5NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kYXM4MDAuYworICAgIERyaXZlciBmb3IgS2VpdGxleSBkYXM4MDAgc2VyaWVzIGJvYXJkcyBhbmQgY29tcGF0aWJsZXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisvKgorRHJpdmVyOiBkYXM4MDAKK0Rlc2NyaXB0aW9uOiBLZWl0aGxleSBNZXRyYWJ5dGUgREFTODAwICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXZpY2VzOiBbS2VpdGhsZXkgTWV0cmFieXRlXSBEQVMtODAwIChkYXMtODAwKSwgREFTLTgwMSAoZGFzLTgwMSksCisgIERBUy04MDIgKGRhcy04MDIpLAorICBbTWVhc3VyZW1lbnQgQ29tcHV0aW5nXSBDSU8tREFTODAwIChjaW8tZGFzODAwKSwKKyAgQ0lPLURBUzgwMSAoY2lvLWRhczgwMSksIENJTy1EQVM4MDIgKGNpby1kYXM4MDIpLAorICBDSU8tREFTODAyLzE2IChjaW8tZGFzODAyLzE2KQorU3RhdHVzOiB3b3JrcywgY2lvLWRhczgwMi8xNiB1bnRlc3RlZCAtIGVtYWlsIG1lIGlmIHlvdSBoYXZlIHRlc3RlZCBpdAorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKG9wdGlvbmFsLCByZXF1aXJlZCBmb3IgdGltZWQgb3IgZXh0ZXJuYWxseSB0cmlnZ2VyZWQgY29udmVyc2lvbnMpCisKK05vdGVzOgorCUlSUSBjYW4gYmUgb21pdHRlZCwgYWx0aG91Z2ggdGhlIGNtZCBpbnRlcmZhY2Ugd2lsbCBub3Qgd29yayB3aXRob3V0IGl0LgorCisJQWxsIGVudHJpZXMgaW4gdGhlIGNoYW5uZWwvZ2FpbiBsaXN0IG11c3QgdXNlIHRoZSBzYW1lIGdhaW4gYW5kIGJlCisJY29uc2VjdXRpdmUgY2hhbm5lbHMgY291bnRpbmcgdXB3YXJkcyBpbiBjaGFubmVsIG51bWJlciAodGhlc2UgYXJlCisJaGFyZHdhcmUgbGltaXRhdGlvbnMuKQorCisJSSd2ZSBuZXZlciB0ZXN0ZWQgdGhlIGdhaW4gc2V0dGluZyBzdHVmZiBzaW5jZSBJIG9ubHkgaGF2ZSBhCisJREFTLTgwMCBib2FyZCB3aXRoIGZpeGVkIGdhaW4uCisKKwlUaGUgY2lvLWRhczgwMi8xNiBkb2VzIG5vdCBoYXZlIGEgZmlmby1lbXB0eSBzdGF0dXMgYml0ISAgVGhlcmVmb3JlCisJb25seSBmaWZvLWhhbGYtZnVsbCB0cmFuc2ZlcnMgYXJlIHBvc3NpYmxlIHdpdGggdGhpcyBjYXJkLgorKi8KKy8qCisKK2NtZCB0cmlnZ2VycyBzdXBwb3J0ZWQ6CisJc3RhcnRfc3JjOiAgICAgIFRSSUdfTk9XIHwgVFJJR19FWFQKKwlzY2FuX2JlZ2luX3NyYzogVFJJR19GT0xMT1cKKwlzY2FuX2VuZF9zcmM6ICAgVFJJR19DT1VOVAorCWNvbnZlcnRfc3JjOiAgICBUUklHX1RJTUVSIHwgVFJJR19FWFQKKwlzdG9wX3NyYzogICAgICAgVFJJR19OT05FIHwgVFJJR19DT1VOVAorCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNkZWZpbmUgREFTODAwX1NJWkUgICAgICAgICAgIDgKKyNkZWZpbmUgVElNRVJfQkFTRSAgICAgICAgICAgIDEwMDAKKyNkZWZpbmUgTl9DSEFOX0FJICAgICAgICAgICAgIDgJLy8gbnVtYmVyIG9mIGFuYWxvZyBpbnB1dCBjaGFubmVscworCisvKiBSZWdpc3RlcnMgZm9yIHRoZSBkYXM4MDAgKi8KKworI2RlZmluZSBEQVM4MDBfTFNCICAgICAgICAgICAgMAorI2RlZmluZSAgIEZJRk9fRU1QVFkgICAgICAgICAgICAweDEKKyNkZWZpbmUgICBGSUZPX09WRiAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIERBUzgwMF9NU0IgICAgICAgICAgICAxCisjZGVmaW5lIERBUzgwMF9DT05UUk9MMSAgICAgICAyCisjZGVmaW5lICAgQ09OVFJPTDFfSU5URSAgICAgICAgIDB4OAorI2RlZmluZSBEQVM4MDBfQ09OVl9DT05UUk9MICAgMgorI2RlZmluZSAgIElURSAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICBDQVNDICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgRFRFTiAgICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSAgIElFT0MgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICBFQUNTICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgIENPTlZfSENFTiAgICAgICAgICAgICAweDgwCisjZGVmaW5lIERBUzgwMF9TQ0FOX0xJTUlUUyAgICAyCisjZGVmaW5lIERBUzgwMF9TVEFUVVMgICAgICAgICAyCisjZGVmaW5lICAgSVJRICAgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgIEJVU1kgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIERBUzgwMF9HQUlOICAgICAgICAgICAzCisjZGVmaW5lICAgQ0lPX0ZGT1YgICAgICAgICAgICAgIDB4OAkvLyBmaWZvIG92ZXJmbG93IGZvciBjaW8tZGFzODAyLzE2CisjZGVmaW5lICAgQ0lPX0VOSEYgICAgICAgICAgICAgIDB4OTAJLy8gaW50ZXJydXB0IGZpZm8gaGFsZiBmdWxsIGZvciBjaW8tZGFzODAyLzE2CisjZGVmaW5lICAgQ09OVFJPTDEgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgICBDT05WX0NPTlRST0wgICAgICAgICAgMHhhMAorI2RlZmluZSAgIFNDQU5fTElNSVRTICAgICAgICAgICAweGMwCisjZGVmaW5lICAgSUQgICAgICAgICAgICAgICAgICAgIDB4ZTAKKyNkZWZpbmUgREFTODAwXzgyNTQgICAgICAgICAgIDQKKyNkZWZpbmUgREFTODAwX1NUQVRVUzIgICAgICAgIDcKKyNkZWZpbmUgICBTVEFUVVMyX0hDRU4gICAgICAgICAgMHg4MAorI2RlZmluZSAgIFNUQVRVUzJfSU5URSAgICAgICAgICAwWDIwCisjZGVmaW5lIERBUzgwMF9JRCAgICAgICAgICAgICA3CisKK3N0cnVjdCBkYXM4MDBfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFpX3NwZWVkOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZTsKKwlpbnQgcmVzb2x1dGlvbjsKK307CisKKy8vYW5hbG9nIGlucHV0IHJhbmdlcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczgwMF9haSA9IHsKKwkxLAorCXsKKwkJCVJBTkdFKC01LCA1KSwKKwkJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczgwMV9haSA9IHsKKwk5LAorCXsKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoLTAuNSwgMC41KSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoLTAuMDUsIDAuMDUpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwkJCVJBTkdFKC0wLjAxLCAwLjAxKSwKKwkJCVJBTkdFKDAsIDAuMDIpLAorCQl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfY2lvX2RhczgwMV9haSA9IHsKKwk5LAorCXsKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoLTAuNSwgMC41KSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoLTAuMDUsIDAuMDUpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwkJCVJBTkdFKC0wLjAwNSwgMC4wMDUpLAorCQkJUkFOR0UoMCwgMC4wMSksCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXM4MDJfYWkgPSB7CisJOSwKKwl7CisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKDAsIDIuNSksCisJCQlSQU5HRSgtMC42MjUsIDAuNjI1KSwKKwkJCVJBTkdFKDAsIDEuMjUpLAorCQl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzODAyMTZfYWkgPSB7CisJOCwKKwl7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKDAsIDIuNSksCisJCQlSQU5HRSgtMS4yNSwgMS4yNSksCisJCQlSQU5HRSgwLCAxLjI1KSwKKwkJfQorfTsKKworZW51bSB7IGRhczgwMCwgY2lvZGFzODAwLCBkYXM4MDEsIGNpb2RhczgwMSwgZGFzODAyLCBjaW9kYXM4MDIsIGNpb2RhczgwMjE2IH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGFzODAwX2JvYXJkIGRhczgwMF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcy04MDAiLAorCSAgICAgIGFpX3NwZWVkOjI1MDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDBfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXM4MDAiLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDBfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy04MDEiLAorCSAgICAgIGFpX3NwZWVkOjI1MDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDFfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXM4MDEiLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9jaW9fZGFzODAxX2FpLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtODAyIiwKKwkgICAgICBhaV9zcGVlZDoyNTAwMCwKKwkgICAgICBhaV9yYW5nZTomcmFuZ2VfZGFzODAyX2FpLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzODAyIiwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBhaV9yYW5nZTomcmFuZ2VfZGFzODAyX2FpLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzODAyLzE2IiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9yYW5nZTomcmFuZ2VfZGFzODAyMTZfYWksCisJICAgICAgcmVzb2x1dGlvbjoxNiwKKwkJfSwKK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRhczgwMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgZGFzODAwX3ByaXZhdGUgeworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjb3VudDsJLyogbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGxlZnQgdG8gYmUgdGFrZW4gKi8KKwl2b2xhdGlsZSBpbnQgZm9yZXZlcjsJLyogZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgd2Ugc2hvdWxkIHRha2UgZGF0YSBmb3JldmVyICovCisJdW5zaWduZWQgaW50IGRpdmlzb3IxOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIDEgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCisJdW5zaWduZWQgaW50IGRpdmlzb3IyOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIDIgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCisJdm9sYXRpbGUgaW50IGRvX2JpdHM7CS8qIGRpZ2l0YWwgb3V0cHV0IGJpdHMgKi8KK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXM4MDBfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBkYXM4MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFzODAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGRhczgwMF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzODAwID0geworICAgICAgZHJpdmVyX25hbWU6ImRhczgwMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFzODAwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXM4MDBfZGV0YWNoLAorICAgICAgbnVtX25hbWVzOnNpemVvZihkYXM4MDBfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgZGFzODAwX2JvYXJkKSwKKyAgICAgIGJvYXJkX25hbWU6JmRhczgwMF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGRhczgwMF9ib2FyZCksCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzODAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIGVuYWJsZV9kYXM4MDAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgZGlzYWJsZV9kYXM4MDAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBkYXM4MDBfYWlfZG9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgZGFzODAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzODAwX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczgwMF9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXM4MDBfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzODAwX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgZGFzODAwX3NldF9mcmVxdWVuY3koc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCisvKiBjaGVja3MgYW5kIHByb2JlcyBkYXMtODAwIHNlcmllcyBib2FyZCB0eXBlICovCitzdGF0aWMgaW50IGRhczgwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaWRfYml0czsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgYm9hcmQ7CisKKwkvLyAnY29tZWRpIHNwaW4gbG9jayBpcnFzYXZlJyBkaXNhYmxlcyBldmVuIHJ0IGludGVycnVwdHMsIHdlIHVzZSB0aGVtIHRvIHByb3RlY3QgaW5kaXJlY3QgYWRkcmVzc2luZworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlvdXRiKElELCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGJhc2UgYWRkcmVzcyArIDcgdG8gYmUgSUQgcmVnaXN0ZXIgKi8KKwlpZF9iaXRzID0gaW5iKGRldi0+aW9iYXNlICsgREFTODAwX0lEKSAmIDB4MzsJLyogZ2V0IGlkIGJpdHMgKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCWJvYXJkID0gdGhpc2JvYXJkIC0gZGFzODAwX2JvYXJkczsKKworCXN3aXRjaCAoaWRfYml0cykgeworCWNhc2UgMHgwOgorCQlpZiAoYm9hcmQgPT0gZGFzODAwKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogREFTLTgwMFxuIik7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJaWYgKGJvYXJkID09IGNpb2RhczgwMCkgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IENJTy1EQVM4MDBcbiIpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQpOiBEQVMtODAwXG4iKTsKKwkJcmV0dXJuIGRhczgwMDsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJCWlmIChib2FyZCA9PSBkYXM4MDEpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiBEQVMtODAxXG4iKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlpZiAoYm9hcmQgPT0gY2lvZGFzODAxKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogQ0lPLURBUzgwMVxuIik7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCk6IERBUy04MDFcbiIpOworCQlyZXR1cm4gZGFzODAxOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJaWYgKGJvYXJkID09IGRhczgwMikgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IERBUy04MDJcbiIpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCWlmIChib2FyZCA9PSBjaW9kYXM4MDIpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiBDSU8tREFTODAyXG4iKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlpZiAoYm9hcmQgPT0gY2lvZGFzODAyMTYpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiBDSU8tREFTODAyLzE2XG4iKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkKTogREFTLTgwMlxuIik7CisJCXJldHVybiBkYXM4MDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiIEJvYXJkIG1vZGVsOiBwcm9iZSByZXR1cm5lZCAweCV4ICh1bmtub3duKVxuIiwKKwkJCWlkX2JpdHMpOworCQlyZXR1cm4gYm9hcmQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzODAwKTsKKworLyogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLworc3RhdGljIGlycXJldHVybl90IGRhczgwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzaG9ydCBpOwkJLyogbG9vcCBpbmRleCAqLworCXNob3J0IGRhdGFQb2ludCA9IDA7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdGF0aWMgY29uc3QgaW50IG1heF9sb29wcyA9IDEyODsJLy8gaGFsZi1maWZvIHNpemUgZm9yIGNpby1kYXM4MDIvMTYKKwkvLyBmbGFncworCWludCBmaWZvX2VtcHR5ID0gMDsKKwlpbnQgZmlmb19vdmVyZmxvdyA9IDA7CisKKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfU1RBVFVTKTsKKwkvKiBpZiBpbnRlcnJ1cHQgd2FzIG5vdCBnZW5lcmF0ZWQgYnkgYm9hcmQgb3IgZHJpdmVyIG5vdCBhdHRhY2hlZCwgcXVpdCAqLworCWlmICghKHN0YXR1cyAmIElSUSkpCisJCXJldHVybiBJUlFfTk9ORTsKKwlpZiAoIShkZXYtPmF0dGFjaGVkKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJLyogd2FpdCB1bnRpbCBoZXJlIHRvIGluaXRpYWxpemUgYXN5bmMsIHNpbmNlIHdlIHdpbGwgZ2V0IG51bGwgZGVyZWZlcmVuY2UKKwkgKiBpZiBpbnRlcnJ1cHQgb2NjdXJzIGJlZm9yZSBkcml2ZXIgaXMgZnVsbHkgYXR0YWNoZWQhCisJICovCisJYXN5bmMgPSBzLT5hc3luYzsKKworCS8vIGlmIGhhcmR3YXJlIGNvbnZlcnNpb25zIGFyZSBub3QgZW5hYmxlZCwgdGhlbiBxdWl0CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgYmFzZSBhZGRyZXNzICsgNyB0byBiZSBTVEFUVVMyIHJlZ2lzdGVyICovCisJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFTODAwX1NUQVRVUzIpICYgU1RBVFVTMl9IQ0VOOworCS8qIGRvbid0IHJlbGVhc2Ugc3BpbmxvY2sgeWV0IHNpbmNlIHdlIHdhbnQgdG8gbWFrZSBzdXJlIG5vb25lIGVsc2UgZGlzYWJsZXMgaGFyZHdhcmUgY29udmVyc2lvbnMgKi8KKwlpZiAoc3RhdHVzID09IDApIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwkvKiBsb29wIHdoaWxlIGNhcmQncyBmaWZvIGlzIG5vdCBlbXB0eSAoYW5kIGxpbWl0IHRvIGhhbGYgZmlmbyBmb3IgY2lvLWRhczgwMi8xNikgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2xvb3BzOyBpKyspIHsKKwkJLyogcmVhZCAxNiBiaXRzIGZyb20gZGV2LT5pb2Jhc2UgYW5kIGRldi0+aW9iYXNlICsgMSAqLworCQlkYXRhUG9pbnQgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfTFNCKTsKKwkJZGF0YVBvaW50ICs9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9NU0IpIDw8IDg7CisJCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIpIHsKKwkJCWZpZm9fZW1wdHkgPSBkYXRhUG9pbnQgJiBGSUZPX0VNUFRZOworCQkJZmlmb19vdmVyZmxvdyA9IGRhdGFQb2ludCAmIEZJRk9fT1ZGOworCQkJaWYgKGZpZm9fb3ZlcmZsb3cpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlmaWZvX2VtcHR5ID0gMDsJLy8gY2lvLWRhczgwMi8xNiBoYXMgbm8gZmlmbyBlbXB0eSBzdGF0dXMgYml0CisJCX0KKwkJaWYgKGZpZm9fZW1wdHkpIHsKKwkJCWJyZWFrOworCQl9CisJCS8qIHN0cmlwIG9mZiBleHRyYW5lb3VzIGJpdHMgZm9yIDEyIGJpdCBjYXJkcyAqLworCQlpZiAodGhpc2JvYXJkLT5yZXNvbHV0aW9uID09IDEyKQorCQkJZGF0YVBvaW50ID0gKGRhdGFQb2ludCA+PiA0KSAmIDB4ZmZmOworCQkvKiBpZiB0aGVyZSBhcmUgbW9yZSBkYXRhIHBvaW50cyB0byBjb2xsZWN0ICovCisJCWlmIChkZXZwcml2LT5jb3VudCA+IDAgfHwgZGV2cHJpdi0+Zm9yZXZlciA9PSAxKSB7CisJCQkvKiB3cml0ZSBkYXRhIHBvaW50IHRvIGJ1ZmZlciAqLworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkYXRhUG9pbnQpOworCQkJaWYgKGRldnByaXYtPmNvdW50ID4gMCkKKwkJCQlkZXZwcml2LT5jb3VudC0tOworCQl9CisJfQorCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCS8qIGNoZWNrIGZvciBmaWZvIG92ZXJmbG93ICovCisJaWYgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiA9PSAxMikgeworCQlmaWZvX292ZXJmbG93ID0gZGF0YVBvaW50ICYgRklGT19PVkY7CisJCS8vIGVsc2UgY2lvLWRhczgwMi8xNgorCX0gZWxzZSB7CisJCWZpZm9fb3ZlcmZsb3cgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTikgJiBDSU9fRkZPVjsKKwl9CisJaWYgKGZpZm9fb3ZlcmZsb3cpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJCWNvbWVkaV9lcnJvcihkZXYsICJEQVM4MDAgRklGTyBvdmVyZmxvdyIpOworCQlkYXM4MDBfY2FuY2VsKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCWFzeW5jLT5ldmVudHMgPSAwOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCWlmIChkZXZwcml2LT5jb3VudCA+IDAgfHwgZGV2cHJpdi0+Zm9yZXZlciA9PSAxKSB7CisJCS8qIFJlLWVuYWJsZSBjYXJkJ3MgaW50ZXJydXB0LgorCQkgKiBXZSBhbHJlYWR5IGhhdmUgc3BpbmxvY2ssIHNvIGluZGlyZWN0IGFkZHJlc3NpbmcgaXMgc2FmZSAqLworCQlvdXRiKENPTlRST0wxLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGRldi0+aW9iYXNlICsgMiB0byBiZSBjb250cm9sIHJlZ2lzdGVyIDEgKi8KKwkJb3V0YihDT05UUk9MMV9JTlRFIHwgZGV2cHJpdi0+ZG9fYml0cywKKwkJCWRldi0+aW9iYXNlICsgREFTODAwX0NPTlRST0wxKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJCS8qIG90aGVyd2lzZSwgc3RvcCB0YWtpbmcgZGF0YSAqLworCX0gZWxzZSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCQlkaXNhYmxlX2RhczgwMChkZXYpOwkvKiBkaWFibGUgaGFyZHdhcmUgdHJpZ2dlcmVkIGNvbnZlcnNpb25zICovCisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwl9CisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJYXN5bmMtPmV2ZW50cyA9IDA7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGRhczgwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gaXQtPm9wdGlvbnNbMV07CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IGJvYXJkOworCisJcHJpbnRrKCJjb21lZGklZDogZGFzODAwOiBpbyAweCVseCIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKGlycSkgeworCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczgwMF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChpb2Jhc2UgPT0gMCkgeworCQlwcmludGsoImlvIGJhc2UgYWRkcmVzcyByZXF1aXJlZCBmb3IgZGFzODAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgaWYgaW8gYWRkcmVzc2VzIGFyZSBhdmFpbGFibGUgKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgREFTODAwX1NJWkUsICJkYXM4MDAiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJYm9hcmQgPSBkYXM4MDBfcHJvYmUoZGV2KTsKKwlpZiAoYm9hcmQgPCAwKSB7CisJCXByaW50aygidW5hYmxlIHRvIGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldi0+Ym9hcmRfcHRyID0gZGFzODAwX2JvYXJkcyArIGJvYXJkOworCisJLyogZ3JhYiBvdXIgSVJRICovCisJaWYgKGlycSA9PSAxIHx8IGlycSA+IDcpIHsKKwkJcHJpbnRrKCJpcnEgb3V0IG9mIHJhbmdlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChpcnEpIHsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGRhczgwMF9pbnRlcnJ1cHQsIDAsICJkYXM4MDAiLCBkZXYpKSB7CisJCQlwcmludGsoInVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIGlycSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlkZXYtPmlycSA9IGlycTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+cmVzb2x1dGlvbikgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gdGhpc2JvYXJkLT5haV9yYW5nZTsKKwlzLT5kb19jbWQgPSBkYXM4MDBfYWlfZG9fY21kOworCXMtPmRvX2NtZHRlc3QgPSBkYXM4MDBfYWlfZG9fY21kdGVzdDsKKwlzLT5pbnNuX3JlYWQgPSBkYXM4MDBfYWlfcmluc247CisJcy0+Y2FuY2VsID0gZGFzODAwX2NhbmNlbDsKKworCS8qIGRpICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSAzOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gZGFzODAwX2RpX3JiaXRzOworCisJLyogZG8gKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkYXM4MDBfZG9fd2JpdHM7CisKKwlkaXNhYmxlX2RhczgwMChkZXYpOworCisJLyogaW5pdGlhbGl6ZSBkaWdpdGFsIG91dCBjaGFubmVscyAqLworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlvdXRiKENPTlRST0wxLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGRldi0+aW9iYXNlICsgMiB0byBiZSBjb250cm9sIHJlZ2lzdGVyIDEgKi8KKwlvdXRiKENPTlRST0wxX0lOVEUgfCBkZXZwcml2LT5kb19iaXRzLCBkZXYtPmlvYmFzZSArIERBUzgwMF9DT05UUk9MMSk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgZGFzODAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkYXM4MDA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwkvKiBvbmx5IGZyZWUgc3R1ZmYgaWYgaXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IF9hdHRhY2ggKi8KKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEQVM4MDBfU0laRSk7CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IGRhczgwMF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlkZXZwcml2LT5mb3JldmVyID0gMDsKKwlkZXZwcml2LT5jb3VudCA9IDA7CisJZGlzYWJsZV9kYXM4MDAoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyogZW5hYmxlX2RhczgwMCBtYWtlcyB0aGUgY2FyZCBzdGFydCB0YWtpbmcgaGFyZHdhcmUgdHJpZ2dlcmVkIGNvbnZlcnNpb25zICovCitzdGF0aWMgdm9pZCBlbmFibGVfZGFzODAwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwkvLyBlbmFibGUgZmlmby1oYWxmIGZ1bGwgaW50ZXJydXB0cyBmb3IgY2lvLWRhczgwMi8xNgorCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTYpCisJCW91dGIoQ0lPX0VOSEYsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOworCW91dGIoQ09OVl9DT05UUk9MLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGRldi0+aW9iYXNlICsgMiB0byBiZSBjb252ZXJzaW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlvdXRiKENPTlZfSENFTiwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfQ09OVl9DT05UUk9MKTsJLyogZW5hYmxlIGhhcmR3YXJlIHRyaWdnZXJpbmcgKi8KKwlvdXRiKENPTlRST0wxLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGRldi0+aW9iYXNlICsgMiB0byBiZSBjb250cm9sIHJlZ2lzdGVyIDEgKi8KKwlvdXRiKENPTlRST0wxX0lOVEUgfCBkZXZwcml2LT5kb19iaXRzLCBkZXYtPmlvYmFzZSArIERBUzgwMF9DT05UUk9MMSk7CS8qIGVuYWJsZSBjYXJkJ3MgaW50ZXJydXB0ICovCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7Cit9CisKKy8qIGRpc2FibGVfZGFzODAwIHN0b3BzIGhhcmR3YXJlIHRyaWdnZXJlZCBjb252ZXJzaW9ucyAqLworc3RhdGljIHZvaWQgZGlzYWJsZV9kYXM4MDAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVl9DT05UUk9MLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGRldi0+aW9iYXNlICsgMiB0byBiZSBjb252ZXJzaW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlvdXRiKDB4MCwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfQ09OVl9DT05UUk9MKTsJLyogZGlzYWJsZSBoYXJkd2FyZSB0cmlnZ2VyaW5nIG9mIGNvbnZlcnNpb25zICovCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2FpX2RvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCWludCBnYWluLCBzdGFydENoYW47CisJaW50IGk7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCS8qIGNhbGN1bGF0ZSBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCB0aW1pbmcgKi8KKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsICYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkJJihkZXZwcml2LT5kaXZpc29yMiksICYoY21kLT5jb252ZXJ0X2FyZyksCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvLyBjaGVjayBjaGFubmVsL2dhaW4gbGlzdCBhZ2FpbnN0IGNhcmQncyBsaW1pdGF0aW9ucworCWlmIChjbWQtPmNoYW5saXN0KSB7CisJCWdhaW4gPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJc3RhcnRDaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9CisJCQkJKHN0YXJ0Q2hhbiArIGkpICUgTl9DSEFOX0FJKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSBjaGFubmVscywgY291bnRpbmcgdXB3YXJkc1xuIik7CisJCQkJZXJyKys7CisJCQl9CisJCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkgIT0gZ2FpbikgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgZ2FpblxuIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczgwMF9haV9kb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgc3RhcnRDaGFuLCBlbmRDaGFuLCBzY2FuLCBnYWluOworCWludCBjb252X2JpdHM7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKworCWlmICghZGV2LT5pcnEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJubyBpcnEgYXNzaWduZWQgZm9yIGRhcy04MDAsIGNhbm5vdCBkbyBoYXJkd2FyZSBjb252ZXJzaW9ucyIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGlzYWJsZV9kYXM4MDAoZGV2KTsKKworCS8qIHNldCBjaGFubmVsIHNjYW4gbGltaXRzICovCisJc3RhcnRDaGFuID0gQ1JfQ0hBTihhc3luYy0+Y21kLmNoYW5saXN0WzBdKTsKKwllbmRDaGFuID0gKHN0YXJ0Q2hhbiArIGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuIC0gMSkgJSA4OworCXNjYW4gPSAoZW5kQ2hhbiA8PCAzKSB8IHN0YXJ0Q2hhbjsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlvdXRiKFNDQU5fTElNSVRTLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGJhc2UgYWRkcmVzcyArIDIgdG8gYmUgc2NhbiBsaW1pdHMgcmVnaXN0ZXIgKi8KKwlvdXRiKHNjYW4sIGRldi0+aW9iYXNlICsgREFTODAwX1NDQU5fTElNSVRTKTsJLyogc2V0IHNjYW4gbGltaXRzICovCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisKKwkvKiBzZXQgZ2FpbiAqLworCWdhaW4gPSBDUl9SQU5HRShhc3luYy0+Y21kLmNoYW5saXN0WzBdKTsKKwlpZiAodGhpc2JvYXJkLT5yZXNvbHV0aW9uID09IDEyICYmIGdhaW4gPiAwKQorCQlnYWluICs9IDB4NzsKKwlnYWluICY9IDB4ZjsKKwlvdXRiKGdhaW4sIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOworCisJc3dpdGNoIChhc3luYy0+Y21kLnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0NPVU5UOgorCQlkZXZwcml2LT5jb3VudCA9IGFzeW5jLT5jbWQuc3RvcF9hcmcgKiBhc3luYy0+Y21kLmNoYW5saXN0X2xlbjsKKwkJZGV2cHJpdi0+Zm9yZXZlciA9IDA7CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlkZXZwcml2LT5mb3JldmVyID0gMTsKKwkJZGV2cHJpdi0+Y291bnQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBlbmFibGUgYXV0byBjaGFubmVsIHNjYW4sIHNlbmQgaW50ZXJydXB0cyBvbiBlbmQgb2YgY29udmVyc2lvbgorCSAqIGFuZCBzZXQgY2xvY2sgc291cmNlIHRvIGludGVybmFsIG9yIGV4dGVybmFsCisJICovCisJY29udl9iaXRzID0gMDsKKwljb252X2JpdHMgfD0gRUFDUyB8IElFT0M7CisJaWYgKGFzeW5jLT5jbWQuc3RhcnRfc3JjID09IFRSSUdfRVhUKQorCQljb252X2JpdHMgfD0gRFRFTjsKKwlzd2l0Y2ggKGFzeW5jLT5jbWQuY29udmVydF9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWNvbnZfYml0cyB8PSBDQVNDIHwgSVRFOworCQkvKiBzZXQgY29udmVyc2lvbiBmcmVxdWVuY3kgKi8KKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsICYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkJJihkZXZwcml2LT5kaXZpc29yMiksICYoYXN5bmMtPmNtZC5jb252ZXJ0X2FyZyksCisJCQlhc3luYy0+Y21kLmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKGRhczgwMF9zZXRfZnJlcXVlbmN5KGRldikgPCAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiRXJyb3Igc2V0dGluZyB1cCBjb3VudGVycyIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlvdXRiKENPTlZfQ09OVFJPTCwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CS8qIHNlbGVjdCBkZXYtPmlvYmFzZSArIDIgdG8gYmUgY29udmVyc2lvbiBjb250cm9sIHJlZ2lzdGVyICovCisJb3V0Yihjb252X2JpdHMsIGRldi0+aW9iYXNlICsgREFTODAwX0NPTlZfQ09OVFJPTCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJYXN5bmMtPmV2ZW50cyA9IDA7CisJZW5hYmxlX2RhczgwMChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczgwMF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IGNoYW47CisJaW50IHJhbmdlOworCWludCBsc2IsIG1zYjsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlkaXNhYmxlX2RhczgwMChkZXYpOwkvKiBkaXNhYmxlIGhhcmR3YXJlIGNvbnZlcnNpb25zIChlbmFibGVzIHNvZnR3YXJlIGNvbnZlcnNpb25zKSAqLworCisJLyogc2V0IG11bHRpcGxleGVyICovCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCW91dGIoY2hhbiB8IGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTODAwX0NPTlRST0wxKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCS8qIHNldCBnYWluIC8gcmFuZ2UgKi8KKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwlpZiAodGhpc2JvYXJkLT5yZXNvbHV0aW9uID09IDEyICYmIHJhbmdlKQorCQlyYW5nZSArPSAweDc7CisJcmFuZ2UgJj0gMHhmOworCW91dGIocmFuZ2UsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOworCisJY29tZWRpX3VkZWxheSg1KTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogdHJpZ2dlciBjb252ZXJzaW9uICovCisJCW91dGJfcCgwLCBkZXYtPmlvYmFzZSArIERBUzgwMF9NU0IpOworCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmICghKGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9TVEFUVVMpICYgQlVTWSkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJbHNiID0gaW5iKGRldi0+aW9iYXNlICsgREFTODAwX0xTQik7CisJCW1zYiA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9NU0IpOworCQlpZiAodGhpc2JvYXJkLT5yZXNvbHV0aW9uID09IDEyKSB7CisJCQlkYXRhW25dID0gKGxzYiA+PiA0KSAmIDB4ZmY7CisJCQlkYXRhW25dIHw9IChtc2IgPDwgNCk7CisJCX0gZWxzZSB7CisJCQlkYXRhW25dID0gKG1zYiA8PCA4KSB8IGxzYjsKKwkJfQorCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGRhczgwMF9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwliaXRzID0gaW5iKGRldi0+aW9iYXNlICsgREFTODAwX1NUQVRVUykgPj4gNDsKKwliaXRzICY9IDB4NzsKKwlkYXRhWzFdID0gYml0czsKKwlkYXRhWzBdID0gMDsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczgwMF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IHdiaXRzOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJLy8gb25seSBzZXQgYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQKKwlkYXRhWzBdICY9IDB4ZjsKKwl3Yml0cyA9IGRldnByaXYtPmRvX2JpdHMgPj4gNDsKKwl3Yml0cyAmPSB+ZGF0YVswXTsKKwl3Yml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlkZXZwcml2LT5kb19iaXRzID0gd2JpdHMgPDwgNDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlvdXRiKENPTlRST0wxLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGRldi0+aW9iYXNlICsgMiB0byBiZSBjb250cm9sIHJlZ2lzdGVyIDEgKi8KKwlvdXRiKGRldnByaXYtPmRvX2JpdHMgfCBDT05UUk9MMV9JTlRFLCBkZXYtPmlvYmFzZSArIERBUzgwMF9DT05UUk9MMSk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisKKwlkYXRhWzFdID0gd2JpdHM7CisKKwlyZXR1cm4gMjsKK30KKworLyogbG9hZHMgY291bnRlcnMgd2l0aCBkaXZpc29yMSwgZGl2aXNvcjIgZnJvbSBwcml2YXRlIHN0cnVjdHVyZSAqLworc3RhdGljIGludCBkYXM4MDBfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTODAwXzgyNTQsIDAsIDEsIGRldnByaXYtPmRpdmlzb3IxLCAyKSkKKwkJZXJyKys7CisJaWYgKGk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfODI1NCwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIsIDIpKQorCQllcnIrKzsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTA4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCkBAIC0wLDAgKzEsMTA4MSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKKyAgICBEaWFtb25kIFN5c3RlbXMgbW0zMmF0IGNvZGUgZm9yIGEgQ29tZWRpIGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogZG1tMzJhdAorRGVzY3JpcHRpb246IERpYW1vbmQgU3lzdGVtcyBtbTMyYXQgZHJpdmVyLgorRGV2aWNlczoKK0F1dGhvcjogUGVycnkgSi4gUGlwbGFuaSA8cGVycnkuai5waXBsYW5pQG5hc2EuZ292PgorVXBkYXRlZDogRnJpIEp1biAgNCAwOToxMzoyNCBDRFQgMjAwNAorU3RhdHVzOiBleHBlcmltZW50YWwKKworVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBEaWFtb25kIFN5c3RlbXMgTU0tMzItQVQgYm9hcmQKK2h0dHA6Ly93d3cuZGlhbW9uZHN5c3RlbXMuY29tL3Byb2R1Y3RzL2RpYW1vbmRtbTMyYXQgSXQgaXMgYmVpbmcgdXNlZAorb24gc2VydmVyYWwgcHJvamVjdHMgaW5zaWRlIE5BU0EsIHdpdGhvdXQgcHJvYmxlbXMgc28gZmFyLiBGb3IgYW5hbG9nCitpbnB1dCBjb21tYW5kcywgVFJJR19FWFQgaXMgbm90IHlldCBzdXBwb3J0ZWQgYXQgYWxsLi4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBjb21lZGlfY29uZmlnIC9kZXYvY29tZWRpMCBkbW0zMmF0IGJhc2VhZGRyLGlycQorKi8KKworLyoKKyAqIFRoZSBwcmV2aW91cyBibG9jayBjb21tZW50IGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZQorICogZG9jdW1lbnRhdGlvbiBpbiBDb21lZGkgYW5kIENvbWVkaWxpYi4gIFRoZSBmaWVsZHM6CisgKgorICogRHJpdmVyOiB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyCisgKiBEZXNjcmlwdGlvbjogYSBzaG9ydCBwaHJhc2UgZGVzY3JpYmluZyB0aGUgZHJpdmVyLiAgRG9uJ3QgbGlzdCBib2FyZHMuCisgKiBEZXZpY2VzOiBhIGZ1bGwgbGlzdCBvZiB0aGUgYm9hcmRzIHRoYXQgYXR0ZW1wdCB0byBiZSBzdXBwb3J0ZWQgYnkKKyAqICAgdGhlIGRyaXZlci4gIEZvcm1hdCBpcyAiKG1hbnVmYWN0dXJlcikgYm9hcmQgbmFtZSBbY29tZWRpIG5hbWVdIiwKKyAqICAgd2hlcmUgY29tZWRpX25hbWUgaXMgdGhlIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYm9hcmQuCisgKiAgIFNlZSB0aGUgY29tbWVudCBuZWFyIGJvYXJkX25hbWU6IGluIHRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUKKyAqICAgYmVsb3cuICBJZiAobWFudWZhY3R1cmVyKSBvciBbY29tZWRpIG5hbWVdIGlzIG1pc3NpbmcsIHRoZSBwcmV2aW91cworICogICB2YWx1ZSBpcyB1c2VkLgorICogQXV0aG9yOiB5b3UKKyAqIFVwZGF0ZWQ6IGRhdGUgd2hlbiB0aGUgX2RvY3VtZW50YXRpb25fIHdhcyBsYXN0IHVwZGF0ZWQuICBVc2UgJ2RhdGUgLVInCisgKiAgIHRvIGdldCBhIHZhbHVlIGZvciB0aGlzLgorICogU3RhdHVzOiBhIG9uZS13b3JkIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0dXMuICBWYWxpZCB2YWx1ZXMgYXJlOgorICogICB3b3JrcyAtIGRyaXZlciB3b3JrcyBjb3JyZWN0bHkgb24gbW9zdCBib2FyZHMgc3VwcG9ydGVkLCBhbmQKKyAqICAgICBwYXNzZXMgY29tZWRpX3Rlc3QuCisgKiAgIHVua25vd24gLSB1bmtub3duLiAgVXN1YWxseSBwdXQgdGhlcmUgYnkgZHMuCisgKiAgIGV4cGVyaW1lbnRhbCAtIG1heSBub3Qgd29yayBpbiBhbnkgcGFydGljdWxhciByZWxlYXNlLiAgQXV0aG9yCisgKiAgICAgcHJvYmFibHkgd2FudHMgYXNzaXN0YW5jZSB0ZXN0aW5nIGl0LgorICogICBiaXRyb3R0ZW4gLSBkcml2ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZSBpbiBhIGxvbmcgdGltZSwgcHJvYmFibHkKKyAqICAgICBkb2Vzbid0IHdvcmssIGFuZCBwcm9iYWJseSBpcyBtaXNzaW5nIHN1cHBvcnQgZm9yIHNpZ25pZmljYW50CisgKiAgICAgQ29tZWRpIGludGVyZmFjZSBmZWF0dXJlcy4KKyAqICAgdW50ZXN0ZWQgLSBhdXRob3IgcHJvYmFibHkgd3JvdGUgaXQgImJsaW5kIiwgYW5kIGlzIGJlbGlldmVkIHRvCisgKiAgICAgd29yaywgYnV0IG5vIGNvbmZpcm1hdGlvbi4KKyAqCisgKiBUaGVzZSBoZWFkZXJzIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUsIGFuZCBhbnkgY29tbWVudHMKKyAqIHlvdSB3aXNoIHRvIHNheSBhYm91dCB0aGUgZHJpdmVyLiAgVGhlIGNvbW1lbnQgYXJlYSBpcyB0aGUgcGxhY2UKKyAqIHRvIHB1dCBhbnkga25vd24gYnVncywgbGltaXRhdGlvbnMsIHVuc3VwcG9ydGVkIGZlYXR1cmVzLCBzdXBwb3J0ZWQKKyAqIGNvbW1hbmQgdHJpZ2dlcnMsIHdoZXRoZXIgb3Igbm90IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQgb24gcGFydGljdWxhcgorICogc3ViZGV2aWNlcywgZXRjLgorICoKKyAqIFNvbWV3aGVyZSBpbiB0aGUgY29tbWVudCBzaG91bGQgYmUgaW5mb3JtYXRpb24gYWJvdXQgY29uZmlndXJhdGlvbgorICogb3B0aW9ucyB0aGF0IGFyZSB1c2VkIHdpdGggY29tZWRpX2NvbmZpZy4KKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKy8qIEJvYXJkIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLworCisjZGVmaW5lIERNTTMyQVRfTUVNU0laRSAweDEwCisKKyNkZWZpbmUgRE1NMzJBVF9DT05WIDB4MDAKKyNkZWZpbmUgRE1NMzJBVF9BSUxTQiAweDAwCisjZGVmaW5lIERNTTMyQVRfQVVYRE9VVCAweDAxCisjZGVmaW5lIERNTTMyQVRfQUlNU0IgMHgwMQorI2RlZmluZSBETU0zMkFUX0FJTE9XIDB4MDIKKyNkZWZpbmUgRE1NMzJBVF9BSUhJR0ggMHgwMworCisjZGVmaW5lIERNTTMyQVRfREFDTFNCIDB4MDQKKyNkZWZpbmUgRE1NMzJBVF9EQUNTVEFUIDB4MDQKKyNkZWZpbmUgRE1NMzJBVF9EQUNNU0IgMHgwNQorCisjZGVmaW5lIERNTTMyQVRfRklGT0NOVFJMIDB4MDcKKyNkZWZpbmUgRE1NMzJBVF9GSUZPU1RBVCAweDA3CisKKyNkZWZpbmUgRE1NMzJBVF9DTlRSTCAweDA4CisjZGVmaW5lIERNTTMyQVRfQUlTVEFUIDB4MDgKKworI2RlZmluZSBETU0zMkFUX0lOVENMT0NLIDB4MDkKKworI2RlZmluZSBETU0zMkFUX0NOVFJESU8gMHgwYQorCisjZGVmaW5lIERNTTMyQVRfQUlDT05GIDB4MGIKKyNkZWZpbmUgRE1NMzJBVF9BSVJCQUNLIDB4MGIKKworI2RlZmluZSBETU0zMkFUX0NMSzEgMHgwZAorI2RlZmluZSBETU0zMkFUX0NMSzIgMHgwZQorI2RlZmluZSBETU0zMkFUX0NMS0NUIDB4MGYKKworI2RlZmluZSBETU0zMkFUX0RJT0EgMHgwYworI2RlZmluZSBETU0zMkFUX0RJT0IgMHgwZAorI2RlZmluZSBETU0zMkFUX0RJT0MgMHgwZQorI2RlZmluZSBETU0zMkFUX0RJT0NPTkYgMHgwZgorCisjZGVmaW5lIGRtbV9pbmIoY2RldixyZWcpIGluYigoY2Rldi0+aW9iYXNlKStyZWcpCisjZGVmaW5lIGRtbV9vdXRiKGNkZXYscmVnLHZhbHUpIG91dGIodmFsdSwoY2Rldi0+aW9iYXNlKStyZWcpCisKKy8qIEJvYXJkIHJlZ2lzdGVyIHZhbHVlcy4gKi8KKworLyogRE1NMzJBVF9EQUNTVEFUIDB4MDQgKi8KKyNkZWZpbmUgRE1NMzJBVF9EQUNCVVNZIDB4ODAKKworLyogRE1NMzJBVF9GSUZPQ05UUkwgMHgwNyAqLworI2RlZmluZSBETU0zMkFUX0ZJRk9SRVNFVCAweDAyCisjZGVmaW5lIERNTTMyQVRfU0NBTkVOQUJMRSAweDA0CisKKy8qIERNTTMyQVRfQ05UUkwgMHgwOCAqLworI2RlZmluZSBETU0zMkFUX1JFU0VUIDB4MjAKKyNkZWZpbmUgRE1NMzJBVF9JTlRSRVNFVCAweDA4CisjZGVmaW5lIERNTTMyQVRfQ0xLQUNDIDB4MDAKKyNkZWZpbmUgRE1NMzJBVF9ESU9BQ0MgMHgwMQorCisvKiBETU0zMkFUX0FJU1RBVCAweDA4ICovCisjZGVmaW5lIERNTTMyQVRfU1RBVFVTIDB4ODAKKworLyogRE1NMzJBVF9JTlRDTE9DSyAweDA5ICovCisjZGVmaW5lIERNTTMyQVRfQURJTlQgMHg4MAorI2RlZmluZSBETU0zMkFUX0NMS1NFTCAweDAzCisKKy8qIERNTTMyQVRfQ05UUkRJTyAweDBhICovCisjZGVmaW5lIERNTTMyQVRfRlJFUTEyIDB4ODAKKworLyogRE1NMzJBVF9BSUNPTkYgMHgwYiAqLworI2RlZmluZSBETU0zMkFUX1JBTkdFX1UxMCAweDBjCisjZGVmaW5lIERNTTMyQVRfUkFOR0VfVTUgMHgwZAorI2RlZmluZSBETU0zMkFUX1JBTkdFX0IxMCAweDA4CisjZGVmaW5lIERNTTMyQVRfUkFOR0VfQjUgMHgwMAorI2RlZmluZSBETU0zMkFUX1NDSU5UXzIwIDB4MDAKKyNkZWZpbmUgRE1NMzJBVF9TQ0lOVF8xNSAweDEwCisjZGVmaW5lIERNTTMyQVRfU0NJTlRfMTAgMHgyMAorI2RlZmluZSBETU0zMkFUX1NDSU5UXzUgMHgzMAorCisvKiBETU0zMkFUX0NMS0NUIDB4MGYgKi8KKyNkZWZpbmUgRE1NMzJBVF9DTEtDVDEgMHg1NgkvKiBtb2RlMyBjb3VudGVyIDEgLSB3cml0ZSBsb3cgYnl0ZSBvbmx5ICovCisjZGVmaW5lIERNTTMyQVRfQ0xLQ1QyIDB4YjYJLyogIG1vZGUzIGNvdW50ZXIgMiAtIHdyaXRlIGhpZ2ggYW5kIGxvdyBieXRlICovCisKKy8qIERNTTMyQVRfRElPQ09ORiAweDBmICovCisjZGVmaW5lIERNTTMyQVRfRElFTkFCTEUgMHg4MAorI2RlZmluZSBETU0zMkFUX0RJUkEgMHgxMAorI2RlZmluZSBETU0zMkFUX0RJUkIgMHgwMgorI2RlZmluZSBETU0zMkFUX0RJUkNMIDB4MDEKKyNkZWZpbmUgRE1NMzJBVF9ESVJDSCAweDA4CisKKy8qIGJvYXJkIEFJIHJhbmdlcyBpbiBjb21lZGkgc3RydWN0dXJlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgZG1tMzJhdF9haXJhbmdlcyA9IHsKKwk0LAorCXsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQl9Cit9OworCisvKiByZWdpc3RlciB2YWx1ZXMgZm9yIGFib3ZlIHJhbmdlcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1tMzJhdF9yYW5nZWJpdHNbXSA9IHsKKwlETU0zMkFUX1JBTkdFX1UxMCwKKwlETU0zMkFUX1JBTkdFX1U1LAorCURNTTMyQVRfUkFOR0VfQjEwLAorCURNTTMyQVRfUkFOR0VfQjUsCit9OworCisvKiBvbmx5IG9uZSBvZiB0aGVzZSByYW5nZXMgaXMgdmFsaWQsIGFzIHNldCBieSBhIGp1bXBlciBvbiB0aGUKKyAqIGJvYXJkLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIG9ubHkgdXNlIHRoZSByYW5nZSBzZXQgYnkgdGhlIGp1bXBlcgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgZG1tMzJhdF9hb3JhbmdlcyA9IHsKKwk0LAorCXsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQl9Cit9OworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IGRtbTMyYXRfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFpX2NoYW5zOworCWludCBhaV9iaXRzOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZXM7CisJaW50IGFvX2NoYW5zOworCWludCBhb19iaXRzOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphb19yYW5nZXM7CisJaW50IGhhdmVfZGlvOworCWludCBkaW9fY2hhbnM7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBkbW0zMmF0X2JvYXJkIGRtbTMyYXRfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkbW0zMmF0IiwKKwkgICAgICBhaV9jaGFuczozMiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9yYW5nZXM6JmRtbTMyYXRfYWlyYW5nZXMsCisJICAgICAgYW9fY2hhbnM6NCwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19yYW5nZXM6JmRtbTMyYXRfYW9yYW5nZXMsCisJICAgICAgaGF2ZV9kaW86MSwKKwkgICAgICBkaW9fY2hhbnM6MjQsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkbW0zMmF0X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgKiBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICogZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LgorICovCitzdHJ1Y3QgZG1tMzJhdF9wcml2YXRlIHsKKworCWludCBkYXRhOworCWludCBhaV9pbnVzZTsKKwl1bnNpZ25lZCBpbnQgYWlfc2NhbnNfbGVmdDsKKworCS8qIFVzZWQgZm9yIEFPIHJlYWRiYWNrICovCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzRdOworCXVuc2lnbmVkIGNoYXIgZGlvX2NvbmZpZzsKKworfTsKKworLyoKKyAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkbW0zMmF0X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGRtbTMyYXRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZG1tMzJhdF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kbW0zMmF0ID0geworICAgICAgZHJpdmVyX25hbWU6ImRtbTMyYXQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRtbTMyYXRfYXR0YWNoLAorICAgICAgZGV0YWNoOmRtbTMyYXRfZGV0YWNoLAorLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGlmIHlvdSBhcmUKKyAqIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgSVNBIFBuUCBvciBQQ0kgY2FyZCAqLworLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKyAqIGhhdmluZyBhbiBhcnJheSBvZiBib2FyZCBzdHJ1Y3R1cmVzLiAgVGhlc2Ugd2VyZSBkZWZpbmVkCisgKiBpbiBkbW0zMmF0X2JvYXJkc1tdIGFib3ZlLiAgTm90ZSB0aGF0IHRoZSBlbGVtZW50ICduYW1lJworICogd2FzIGZpcnN0IGluIHRoZSBzdHJ1Y3R1cmUgLS0gQ29tZWRpIHVzZXMgdGhpcyBmYWN0IHRvCisgKiBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZSBib2FyZCB3aXRob3V0IGtub3dpbmcgYW55IGRldGFpbHMKKyAqIGFib3V0IHRoZSBzdHJ1Y3R1cmUgZXhjZXB0IGZvciBpdHMgbGVuZ3RoLgorICogV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZCAoYnkgY29tZWRpX2NvbmZpZyksIHRoZSBuYW1lCisgKiBvZiB0aGUgZGV2aWNlIGlzIGdpdmVuIHRvIENvbWVkaSwgYW5kIENvbWVkaSB0cmllcyB0bworICogbWF0Y2ggaXQgYnkgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBib2FyZCBuYW1lcy4gIElmCisgKiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciBpcyBwdXQKKyAqIGludG8gZGV2LT5ib2FyZF9wdHIgYW5kIGRyaXZlci0+YXR0YWNoKCkgaXMgY2FsbGVkLgorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgY2FuIGRldGVybWluZQorICogdGhlIHR5cGUgb2YgYm9hcmQgaW4gc29mdHdhcmUuICBJU0EgUG5QLCBQQ0ksIGFuZCBQQ01DSUEKKyAqIGRldmljZXMgYXJlIHN1Y2ggYm9hcmRzLgorICovCisgICAgICBib2FyZF9uYW1lOiZkbW0zMmF0X2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZG1tMzJhdF9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRtbTMyYXRfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgZG1tMzJhdF9ib2FyZCksCit9OworCisvKiBwcm90b3R5cGVzIGZvciBkcml2ZXIgZnVuY3Rpb25zIGJlbG93ICovCitzdGF0aWMgaW50IGRtbTMyYXRfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZG1tMzJhdF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkbW0zMmF0X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRtbTMyYXRfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkbW0zMmF0X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkbW0zMmF0X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGRtbTMyYXRfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkbW0zMmF0X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZG1tMzJhdF9uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCBpbnQgcm91bmQpOworc3RhdGljIGlycXJldHVybl90IGRtbTMyYXRfaXNyKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOwordm9pZCBkbW0zMmF0X3NldGFpdGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBuYW5zZWMpOworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgZG1tMzJhdF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBjaGFyIGFpaGksIGFpbG8sIGZpZm9zdGF0LCBhaXN0YXQsIGludHN0YXQsIGFpcmJhY2s7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCisJcHJpbnRrKCJjb21lZGklZDogZG1tMzJhdDogYXR0YWNoaW5nXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoImRtbTMyYXQ6IHByb2JpbmcgYXQgYWRkcmVzcyAweCUwNGx4LCBpcnEgJXVcbiIsIGlvYmFzZSwgaXJxKTsKKworCS8qIHJlZ2lzdGVyIGFkZHJlc3Mgc3BhY2UgKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRE1NMzJBVF9NRU1TSVpFLCB0aGlzYm9hcmQtPm5hbWUpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvKiB0aGUgZm9sbG93aW5nIGp1c3QgbWFrZXMgc3VyZSB0aGUgYm9hcmQgaXMgdGhlcmUgYW5kIGdldHMKKwkgICBpdCB0byBhIGtub3duIHN0YXRlICovCisKKwkvKiByZXNldCB0aGUgYm9hcmQgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkwsIERNTTMyQVRfUkVTRVQpOworCisJLyogYWxsb3cgYSBtaWxsaXNlY29uZCB0byByZXNldCAqLworCXVkZWxheSgxMDAwKTsKKworCS8qIHplcm8gc2NhbiBhbmQgZmlmbyBjb250cm9sICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0ZJRk9DTlRSTCwgMHgwKTsKKworCS8qIHplcm8gaW50ZXJydXB0IGFuZCBjbG9jayBjb250cm9sICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0lOVENMT0NLLCAweDApOworCisJLyogd3JpdGUgYSB0ZXN0IGNoYW5uZWwgcmFuZ2UsIHRoZSBoaWdoIDMgYml0cyBzaG91bGQgZHJvcCAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUxPVywgMHg4MCk7CisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJSElHSCwgMHhmZik7CisKKwkvKiBzZXQgdGhlIHJhbmdlIGF0IDEwdiB1bmlwb2xhciAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUNPTkYsIERNTTMyQVRfUkFOR0VfVTEwKTsKKworCS8qIHNob3VsZCB0YWtlIDEwIHVzIHRvIHNldHRsZSwgaGVyZSdzIGEgaHVuZHJlZCAqLworCXVkZWxheSgxMDApOworCisJLyogcmVhZCBiYWNrIHRoZSB2YWx1ZXMgKi8KKwlhaWxvID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlMT1cpOworCWFpaGkgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSUhJR0gpOworCWZpZm9zdGF0ID0gZG1tX2luYihkZXYsIERNTTMyQVRfRklGT1NUQVQpOworCWFpc3RhdCA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJU1RBVCk7CisJaW50c3RhdCA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0lOVENMT0NLKTsKKwlhaXJiYWNrID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlSQkFDSyk7CisKKwlwcmludGsoImRtbTMyYXQ6IGxvPTB4JTAyeCBoaT0weCUwMnggZmlmb3N0YXQ9MHglMDJ4XG4iLAorCQlhaWxvLCBhaWhpLCBmaWZvc3RhdCk7CisJcHJpbnRrKCJkbW0zMmF0OiBhaXN0YXQ9MHglMDJ4IGludHN0YXQ9MHglMDJ4IGFpcmJhY2s9MHglMDJ4XG4iLAorCQlhaXN0YXQsIGludHN0YXQsIGFpcmJhY2spOworCisJaWYgKChhaWxvICE9IDB4MDApIHx8IChhaWhpICE9IDB4MWYpIHx8IChmaWZvc3RhdCAhPSAweDgwKSB8fAorCQkoYWlzdGF0ICE9IDB4NjAgfHwgKGludHN0YXQgIT0gMHgwMCkgfHwgYWlyYmFjayAhPSAweDBjKSkgeworCQlwcmludGsoImRtbWF0MzI6IGJvYXJkIGRldGVjdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBib2FyZCBpcyB0aGVyZSwgcmVnaXN0ZXIgaW50ZXJydXB0ICovCisJaWYgKGlycSkgeworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkbW0zMmF0X2lzciwgMCwgdGhpc2JvYXJkLT5uYW1lLAorCQkJZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50aygiaXJxIGNvbmZsaWN0XG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2LT5pcnEgPSBpcnE7CisJfQorCisvKgorICogSWYgeW91IGNhbiBwcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiBhIHNlcmllcworICogaXQgaXMsIHRoaXMgaXMgdGhlIHBsYWNlIHRvIGRvIGl0LiAgT3RoZXJ3aXNlLCBkZXYtPmJvYXJkX3B0cgorICogc2hvdWxkIGFscmVhZHkgYmUgaW5pdGlhbGl6ZWQuCisgKi8KKwkvL2Rldi0+Ym9hcmRfcHRyID0gZG1tMzJhdF9wcm9iZShkZXYpOworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuICBhbGxvY19wcml2YXRlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRtbTMyYXRfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCS8qIHdlIHN1cHBvcnQgc2luZ2xlLWVuZGVkIChncm91bmQpIGFuZCBkaWZmZXJlbnRpYWwgKi8KKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0RJRkYgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haV9jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFpX3JhbmdlczsKKwlzLT5sZW5fY2hhbmxpc3QgPSAzMjsJLyogVGhpcyBpcyB0aGUgbWF4aW11bSBjaGFubGlzdCBsZW5ndGggdGhhdAorCQkJCSAgIHRoZSBib2FyZCBjYW4gaGFuZGxlICovCisJcy0+aW5zbl9yZWFkID0gZG1tMzJhdF9haV9yaW5zbjsKKwlzLT5kb19jbWQgPSBkbW0zMmF0X2FpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gZG1tMzJhdF9haV9jbWR0ZXN0OworCXMtPmNhbmNlbCA9IGRtbTMyYXRfYWlfY2FuY2VsOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW9fY2hhbnM7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YW9fYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gdGhpc2JvYXJkLT5hb19yYW5nZXM7CisJcy0+aW5zbl93cml0ZSA9IGRtbTMyYXRfYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gZG1tMzJhdF9hb19yaW5zbjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisKKwkJLyogZ2V0IGFjY2VzcyB0byB0aGUgRElPIHJlZ3MgKi8KKwkJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0RJT0FDQyk7CisJCS8qIHNldCB0aGUgRElPJ3MgdG8gdGhlIGRlZnVhbHQgaW5wdXQgc2V0dGluZyAqLworCQlkZXZwcml2LT5kaW9fY29uZmlnID0gRE1NMzJBVF9ESVJBIHwgRE1NMzJBVF9ESVJCIHwKKwkJCURNTTMyQVRfRElSQ0wgfCBETU0zMkFUX0RJUkNIIHwgRE1NMzJBVF9ESUVOQUJMRTsKKwkJZG1tX291dGIoZGV2LCBETU0zMkFUX0RJT0NPTkYsIGRldnByaXYtPmRpb19jb25maWcpOworCisJCS8qIHNldCB1cCB0aGUgc3ViZGV2aWNlICovCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5kaW9fY2hhbnM7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5zdGF0ZSA9IDA7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IGRtbTMyYXRfZGlvX2luc25fYml0czsKKwkJcy0+aW5zbl9jb25maWcgPSBkbW0zMmF0X2Rpb19pbnNuX2NvbmZpZzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIHN1Y2Nlc3MgKi8KKwlwcmludGsoImNvbWVkaSVkOiBkbW0zMmF0OiBhdHRhY2hlZFxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMTsKKworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IGRtbTMyYXRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRtbTMyYXQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRE1NMzJBVF9NRU1TSVpFKTsKKworCXJldHVybiAwOworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KKworc3RhdGljIGludCBkbW0zMmF0X2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgaTsKKwl1bnNpZ25lZCBpbnQgZDsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCBtc2IsIGxzYjsKKwl1bnNpZ25lZCBjaGFyIGNoYW47CisJaW50IHJhbmdlOworCisJLyogZ2V0IHRoZSBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgKi8KKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSAmIChzLT5uX2NoYW4gLSAxKTsKKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKworCS8vcHJpbnRrKCJjaGFubmVsPTB4JTAyeCwgcmFuZ2U9JWRcbiIsY2hhbixyYW5nZSk7CisKKwkvKiB6ZXJvIHNjYW4gYW5kIGZpZm8gY29udHJvbCBhbmQgcmVzZXQgZmlmbyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9GSUZPQ05UUkwsIERNTTMyQVRfRklGT1JFU0VUKTsKKworCS8qIHdyaXRlIHRoZSBhaSBjaGFubmVsIHJhbmdlIHJlZ3MgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQUlMT1csIGNoYW4pOworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUhJR0gsIGNoYW4pOworCS8qIHNldCB0aGUgcmFuZ2UgYml0cyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUNPTkYsIGRtbTMyYXRfcmFuZ2ViaXRzW3JhbmdlXSk7CisKKwkvKiB3YWl0IGZvciBjaXJjdWl0IHRvIHNldHRsZSAqLworCWZvciAoaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisJCXN0YXR1cyA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJUkJBQ0spOworCQlpZiAoKHN0YXR1cyAmIERNTTMyQVRfU1RBVFVTKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDQwMDAwKSB7CisJCXByaW50aygidGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCS8qIGNvbnZlcnQgbiBzYW1wbGVzICovCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJZG1tX291dGIoZGV2LCBETU0zMkFUX0NPTlYsIDB4ZmYpOworCQkvKiB3YWl0IGZvciBjb252ZXJzaW9uIHRvIGVuZCAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworCQkJc3RhdHVzID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlTVEFUKTsKKwkJCWlmICgoc3RhdHVzICYgRE1NMzJBVF9TVEFUVVMpID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gNDAwMDApIHsKKwkJCXByaW50aygidGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCS8qIHJlYWQgZGF0YSAqLworCQlsc2IgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSUxTQik7CisJCW1zYiA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJTVNCKTsKKworCQkvKiBpbnZlcnQgc2lnbiBiaXQgdG8gbWFrZSByYW5nZSB1bnNpZ25lZCwgdGhpcyBpcyBhbgorCQkgICBpZGlvc3luY3JhY3kgb2YgdGhlIGRpYW1vbmQgYm9hcmQsIGl0IHJldHVybgorCQkgICBjb252ZXJzaW9ucyBhcyBhIHNpZ25lZCB2YWx1ZSwgaS5lLiAtMzI3NjggdG8KKwkJICAgMzI3NjcsIGZsaXBwaW5nIHRoZSBiaXQgYW5kIGludGVycHJldGluZyBpdCBhcworCQkgICBzaWduZWQgZ2l2ZXMgeW91IGEgcmFuZ2Ugb2YgMCB0byA2NTUzNSB3aGljaCBpcworCQkgICB1c2VkIGJ5IGNvbWVkaSAqLworCQlkID0gKChtc2IgXiAweDAwODApIDw8IDgpICsgbHNiOworCisJCWRhdGFbbl0gPSBkOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgZG1tMzJhdF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKwlpbnQgc3RhcnRfY2hhbiwgZ2FpbiwgaTsKKworCS8vcHJpbnRrKCJkbW1hdDMyIGluIGNvbW1hbmQgdGVzdFxuIik7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgLyp8IFRSSUdfRVhUICovIDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgLyp8IFRSSUdfRVhUICovIDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU0NBTl9TUEVFRAkxMDAwMDAwCS8qIGluIG5hbm9zZWNvbmRzICovCisjZGVmaW5lIE1JTl9TQ0FOX1NQRUVECTEwMDAwMDAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU0NBTl9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TQ0FOX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiBNSU5fU0NBTl9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1JTl9TQ0FOX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJLyogc2hvdWxkIHNwZWNpZnkgbXVsdGlwbGUgZXh0ZXJuYWwgdHJpZ2dlcnMgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiA5KSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPj0gMTc1MDApCisJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDA7CisJCWVsc2UgaWYgKGNtZC0+Y29udmVydF9hcmcgPj0gMTI1MDApCisJCQljbWQtPmNvbnZlcnRfYXJnID0gMTUwMDA7CisJCWVsc2UgaWYgKGNtZC0+Y29udmVydF9hcmcgPj0gNzUwMCkKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAxMDAwMDsKKwkJZWxzZQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IDUwMDA7CisKKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNlZSBhYm92ZSAqLworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IDkpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSA5OworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGNtZC0+c3RvcF9hcmcgPiAweGZmZmZmZmYwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMHhmZmZmZmZmMDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnN0b3BfYXJnID09IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlkbW0zMmF0X25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWRtbTMyYXRfbnNfdG9fdGltZXIoJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLyogc3RlcCA1IGNoZWNrIHRoZSBjaGFubmVsIGxpc3QsIHRoZSBjaGFubmVsIGxpc3QgZm9yIHRoaXMKKwkgICBib2FyZCBtdXN0IGJlIGNvbnNlY3V0aXZlIGFuZCBnYWlucyBtdXN0IGJlIHRoZSBzYW1lICovCisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlnYWluID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJCXN0YXJ0X2NoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KKwkJCQkoc3RhcnRfY2hhbiArIGkpICUgcy0+bl9jaGFuKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSBjaGFubmVscywgY291bnRpbmcgdXB3YXJkc1xuIik7CisJCQkJZXJyKys7CisJCQl9CisJCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkgIT0gZ2FpbikgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgZ2FpblxuIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRtbTMyYXRfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBpLCByYW5nZTsKKwl1bnNpZ25lZCBjaGFyIGNoYW5sbywgY2hhbmhpLCBzdGF0dXM7CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3QpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZ2V0IHRoZSBjaGFubmVsIGxpc3QgYW5kIHJhbmdlICovCisJY2hhbmxvID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSAmIChzLT5uX2NoYW4gLSAxKTsKKwljaGFuaGkgPSBjaGFubG8gKyBjbWQtPmNoYW5saXN0X2xlbiAtIDE7CisJaWYgKGNoYW5oaSA+PSBzLT5uX2NoYW4pCisJCXJldHVybiAtRUlOVkFMOworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisKKwkvKiByZXNldCBmaWZvICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0ZJRk9DTlRSTCwgRE1NMzJBVF9GSUZPUkVTRVQpOworCisJLyogc2V0IHNjYW4gZW5hYmxlICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0ZJRk9DTlRSTCwgRE1NMzJBVF9TQ0FORU5BQkxFKTsKKworCS8qIHdyaXRlIHRoZSBhaSBjaGFubmVsIHJhbmdlIHJlZ3MgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQUlMT1csIGNoYW5sbyk7CisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJSElHSCwgY2hhbmhpKTsKKworCS8qIHNldCB0aGUgcmFuZ2UgYml0cyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUNPTkYsIGRtbTMyYXRfcmFuZ2ViaXRzW3JhbmdlXSk7CisKKwkvKiByZXNldCB0aGUgaW50ZXJydXB0IGp1c3QgaW4gY2FzZSAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTlRSTCwgRE1NMzJBVF9JTlRSRVNFVCk7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQlkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID0gY21kLT5zdG9wX2FyZzsKKwllbHNlIHsJCQkvKiBUUklHX05PTkUgKi8KKwkJZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCA9IDB4ZmZmZmZmZmY7CS8qIGluZGljYXRlcyBUUklHX05PTkUgdG8gaXNyICovCisJfQorCisJLyogd2FpdCBmb3IgY2lyY3VpdCB0byBzZXR0bGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworCQlzdGF0dXMgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSVJCQUNLKTsKKwkJaWYgKChzdGF0dXMgJiBETU0zMkFUX1NUQVRVUykgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSA0MDAwMCkgeworCQlwcmludGsoInRpbWVvdXRcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCA+IDEpIHsKKwkJLyogc3RhcnQgdGhlIGNsb2NrIGFuZCBlbmFibGUgdGhlIGludGVycnVwdHMgKi8KKwkJZG1tMzJhdF9zZXRhaXRpbWVyKGRldiwgY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJfSBlbHNlIHsKKwkJLyogc3RhcnQgdGhlIGludGVycnVwcyBhbmQgaW5pdGlhdGUgYSBzaW5nbGUgc2NhbiAqLworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfSU5UQ0xPQ0ssIERNTTMyQVRfQURJTlQpOworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ09OViwgMHhmZik7CisJfQorCisvKiAJcHJpbnRrKCJkbW1hdDMyIGluIGNvbW1hbmRcbiIpOyAqLworCisvKiAJZm9yKGk9MDtpPGNtZC0+Y2hhbmxpc3RfbGVuO2krKykgKi8KKy8qIAkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsaSoxMDApOyAqLworCisvKiAJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOyAqLworLyogCWNvbWVkaV9ldmVudChkZXYsIHMpOyAqLworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBkbW0zMmF0X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWRldnByaXYtPmFpX3NjYW5zX2xlZnQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1tMzJhdF9pc3IoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwl1bnNpZ25lZCBjaGFyIGludHN0YXQ7CisJdW5zaWduZWQgaW50IHNhbXA7CisJdW5zaWduZWQgc2hvcnQgbXNiLCBsc2I7CisJaW50IGk7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaW50c3RhdCA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0lOVENMT0NLKTsKKworCWlmIChpbnRzdGF0ICYgRE1NMzJBVF9BRElOVCkgeworCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJLyogcmVhZCBkYXRhICovCisJCQlsc2IgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSUxTQik7CisJCQltc2IgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSU1TQik7CisKKwkJCS8qIGludmVydCBzaWduIGJpdCB0byBtYWtlIHJhbmdlIHVuc2lnbmVkICovCisJCQlzYW1wID0gKChtc2IgXiAweDAwODApIDw8IDgpICsgbHNiOworCQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHNhbXApOworCQl9CisKKwkJaWYgKGRldnByaXYtPmFpX3NjYW5zX2xlZnQgIT0gMHhmZmZmZmZmZikgewkvKiBUUklHX0NPVU5UICovCisJCQlkZXZwcml2LT5haV9zY2Fuc19sZWZ0LS07CisJCQlpZiAoZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCA9PSAwKSB7CisJCQkJLyogZGlzYWJsZSBmdXJ0aGVyIGludGVycnVwdHMgYW5kIGNsb2NrcyAqLworCQkJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9JTlRDTE9DSywgMHgwKTsKKwkJCQkvKiBzZXQgdGhlIGJ1ZmZlciB0byBiZSBmbHVzaGVkIHdpdGggYW4gRU9GICovCisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJfQorCisJCX0KKwkJLyogZmx1c2ggdGhlIGJ1ZmZlciAqLworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwkvKiByZXNldCB0aGUgaW50ZXJydXB0ICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0lOVFJFU0VUKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCByZXF1aXJlIGEgcGFydGljdWxhciBmb3JtLCB0aGlzIGlzIGp1c3QKKyAqIHdoYXQgaGFwcGVucyB0byBiZSB1c2VkIGluIHNvbWUgb2YgdGhlIGRyaXZlcnMuICBJdCBzaG91bGQKKyAqIGNvbnZlcnQgbnMgbmFub3NlY29uZHMgdG8gYSBjb3VudGVyIHZhbHVlIHN1aXRhYmxlIGZvciBwcm9ncmFtbWluZworICogdGhlIGRldmljZS4gIEFsc28sIGl0IHNob3VsZCBhZGp1c3QgbnMgc28gdGhhdCBpdCBjb29yZXNwb25kcyB0bworICogdGhlIGFjdHVhbCB0aW1lIHRoYXQgdGhlIGRldmljZSB3aWxsIHVzZS4gKi8KK3N0YXRpYyBpbnQgZG1tMzJhdF9uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCBpbnQgcm91bmQpCit7CisJLyogdHJpdmlhbCB0aW1lciAqLworCS8qIGlmIHlvdXIgdGltaW5nIGlzIGRvbmUgdGhyb3VnaCB0d28gY2FzY2FkZWQgdGltZXJzLCB0aGUKKwkgKiBpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKCkgZnVuY3Rpb24gaW4gODI1My5oIGNhbiBiZQorCSAqIHZlcnkgaGVscGZ1bC4gIFRoZXJlIGFyZSBhbHNvIGk4MjU0X2xvYWQoKSBhbmQgaTgyNTRfbW1fbG9hZCgpCisJICogd2hpY2ggY2FuIGJlIHVzZWQgdG8gbG9hZCB2YWx1ZXMgaW50byB0aGUgdWJpcXVpdG91cyA4MjU0IGNvdW50ZXJzCisJICovCisKKwlyZXR1cm4gKm5zOworfQorCitzdGF0aWMgaW50IGRtbTMyYXRfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgY2hhciBoaSwgbG8sIHN0YXR1czsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKworCQkvKiBnZXQgdGhlIGxvdyBieXRlICovCisJCWxvID0gZGF0YVtpXSAmIDB4MDBmZjsKKwkJLyogaGlnaCBieXRlIGFsc28gY29udGFpbnMgY2hhbm5lbCBudW1iZXIgKi8KKwkJaGkgPSAoZGF0YVtpXSA+PiA4KSArIGNoYW4gKiAoMSA8PCA2KTsKKwkJLy9wcmludGsoIndyaXRpbmcgMHglMDJ4ICAweCUwMnhcbiIsaGksbG8pOworCQkvKiB3cml0ZSB0aGUgbG93IGFuZCBoaWdoIHZhbHVlcyB0byB0aGUgYm9hcmQgKi8KKwkJZG1tX291dGIoZGV2LCBETU0zMkFUX0RBQ0xTQiwgbG8pOworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfREFDTVNCLCBoaSk7CisKKwkJLyogd2FpdCBmb3IgY2lyY3VpdCB0byBzZXR0bGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKwkJCXN0YXR1cyA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0RBQ1NUQVQpOworCQkJaWYgKChzdGF0dXMgJiBETU0zMkFUX0RBQ0JVU1kpID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gNDAwMDApIHsKKwkJCXByaW50aygidGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQkvKiBkdW1teSByZWFkIHRvIHVwZGF0ZSB0cmlnZ2VyIHRoZSBvdXRwdXQgKi8KKwkJc3RhdHVzID0gZG1tX2luYihkZXYsIERNTTMyQVRfREFDTVNCKTsKKworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIGk7Cit9CisKKy8qIEFPIHN1YmRldmljZXMgc2hvdWxkIGhhdmUgYSByZWFkIGluc24gYXMgd2VsbCBhcyBhIHdyaXRlIGluc24uCisgKiBVc3VhbGx5IHRoaXMgbWVhbnMgY29weWluZyBhIHZhbHVlIHN0b3JlZCBpbiBkZXZwcml2LiAqLworc3RhdGljIGludCBkbW0zMmF0X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBkbW0zMmF0X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgZGlvYml0czsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhCisJICogaW4gZGF0YVsxXSwgZWFjaCBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICovCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQkvKiBXcml0ZSBvdXQgdGhlIG5ldyBkaWdpdGFsIG91dHB1dCBsaW5lcyAqLworCQkvL291dHcocy0+c3RhdGUsZGV2LT5pb2Jhc2UgKyBETU0zMkFUX0RJTyk7CisJfQorCisJLyogZ2V0IGFjY2VzcyB0byB0aGUgRElPIHJlZ3MgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkwsIERNTTMyQVRfRElPQUNDKTsKKworCS8qIGlmIGVpdGhlciBwYXJ0IG9mIGRpbyBpcyBzZXQgZm9yIG91dHB1dCAqLworCWlmICgoKGRldnByaXYtPmRpb19jb25maWcgJiBETU0zMkFUX0RJUkNMKSA9PSAwKSB8fAorCQkoKGRldnByaXYtPmRpb19jb25maWcgJiBETU0zMkFUX0RJUkNIKSA9PSAwKSkgeworCQlkaW9iaXRzID0gKHMtPnN0YXRlICYgMHgwMGZmMDAwMCkgPj4gMTY7CisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9ESU9DLCBkaW9iaXRzKTsKKwl9CisJaWYgKChkZXZwcml2LT5kaW9fY29uZmlnICYgRE1NMzJBVF9ESVJCKSA9PSAwKSB7CisJCWRpb2JpdHMgPSAocy0+c3RhdGUgJiAweDAwMDBmZjAwKSA+PiA4OworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfRElPQiwgZGlvYml0cyk7CisJfQorCWlmICgoZGV2cHJpdi0+ZGlvX2NvbmZpZyAmIERNTTMyQVRfRElSQSkgPT0gMCkgeworCQlkaW9iaXRzID0gKHMtPnN0YXRlICYgMHgwMDAwMDBmZik7CisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9ESU9BLCBkaW9iaXRzKTsKKwl9CisKKwkvKiBub3cgcmVhZCB0aGUgc3RhdGUgYmFjayBpbiAqLworCXMtPnN0YXRlID0gZG1tX2luYihkZXYsIERNTTMyQVRfRElPQyk7CisJcy0+c3RhdGUgPDw9IDg7CisJcy0+c3RhdGUgfD0gZG1tX2luYihkZXYsIERNTTMyQVRfRElPQik7CisJcy0+c3RhdGUgPDw9IDg7CisJcy0+c3RhdGUgfD0gZG1tX2luYihkZXYsIERNTTMyQVRfRElPQSk7CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbAorCSAqIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuICovCisJLy9kYXRhWzFdPWludyhkZXYtPmlvYmFzZSArIERNTTMyQVRfRElPKTsKKwkvKiBvciB3ZSBjb3VsZCBqdXN0IHJldHVybiB0aGUgc29mdHdhcmUgY29weSBvZiB0aGUgb3V0cHV0IHZhbHVlcyBpZgorCSAqIGl0IHdhcyBhIHB1cmVseSBkaWdpdGFsIG91dHB1dCBzdWJkZXZpY2UgKi8KKwkvL2RhdGFbMV09cy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkbW0zMmF0X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgY2hhciBjaGFuYml0OworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlpZiAoaW5zbi0+biAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGFuIDwgOCkKKwkJY2hhbmJpdCA9IERNTTMyQVRfRElSQTsKKwllbHNlIGlmIChjaGFuIDwgMTYpCisJCWNoYW5iaXQgPSBETU0zMkFUX0RJUkI7CisJZWxzZSBpZiAoY2hhbiA8IDIwKQorCQljaGFuYml0ID0gRE1NMzJBVF9ESVJDTDsKKwllbHNlCisJCWNoYW5iaXQgPSBETU0zMkFUX0RJUkNIOworCisJLyogVGhlIGlucHV0IG9yIG91dHB1dCBjb25maWd1cmF0aW9uIG9mIGVhY2ggZGlnaXRhbCBsaW5lIGlzCisJICogY29uZmlndXJlZCBieSBhIHNwZWNpYWwgaW5zbl9jb25maWcgaW5zdHJ1Y3Rpb24uICBjaGFuc3BlYworCSAqIGNvbnRhaW5zIHRoZSBjaGFubmVsIHRvIGJlIGNoYW5nZWQsIGFuZCBkYXRhWzBdIGNvbnRhaW5zIHRoZQorCSAqIHZhbHVlIENPTUVESV9JTlBVVCBvciBDT01FRElfT1VUUFVULiAqLworCisJLyogaWYgb3V0cHV0IGNsZWFyIHRoZSBiaXQsIG90aGVyd2lzZSBzZXQgaXQgKi8KKwlpZiAoZGF0YVswXSA9PSBDT01FRElfT1VUUFVUKSB7CisJCWRldnByaXYtPmRpb19jb25maWcgJj0gfmNoYW5iaXQ7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+ZGlvX2NvbmZpZyB8PSBjaGFuYml0OworCX0KKwkvKiBnZXQgYWNjZXNzIHRvIHRoZSBESU8gcmVncyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTlRSTCwgRE1NMzJBVF9ESU9BQ0MpOworCS8qIHNldCB0aGUgRElPJ3MgdG8gdGhlIG5ldyBjb25maWd1cmF0aW9uIHNldHRpbmcgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfRElPQ09ORiwgZGV2cHJpdi0+ZGlvX2NvbmZpZyk7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBkbW0zMmF0X3NldGFpdGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBuYW5zZWMpCit7CisJdW5zaWduZWQgY2hhciBsbzEsIGxvMiwgaGkyOworCXVuc2lnbmVkIHNob3J0IGJvdGgyOworCisJLyogYmFzZWQgb24gMTBtaHogY2xvY2sgKi8KKwlsbzEgPSAyMDA7CisJYm90aDIgPSBuYW5zZWMgLyAyMDAwMDsKKwloaTIgPSAoYm90aDIgJiAweGZmMDApID4+IDg7CisJbG8yID0gYm90aDIgJiAweDAwZmY7CisKKwkvKiBzZXQgdGhlIGNvdW50ZXIgZnJlcXVlbmN5IHRvIDEwbWh6ICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJESU8sIDApOworCisJLyogZ2V0IGFjY2VzcyB0byB0aGUgY2xvY2sgcmVncyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTlRSTCwgRE1NMzJBVF9DTEtBQ0MpOworCisJLyogd3JpdGUgdGhlIGNvdW50ZXIgMSBjb250cm9sIHdvcmQgYW5kIGxvdyBieXRlIHRvIGNvdW50ZXIgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ0xLQ1QsIERNTTMyQVRfQ0xLQ1QxKTsKKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ0xLMSwgbG8xKTsKKworCS8qIHdyaXRlIHRoZSBjb3VudGVyIDIgY29udHJvbCB3b3JkIGFuZCBsb3cgYnl0ZSB0aGVuIHRvIGNvdW50ZXIgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ0xLQ1QsIERNTTMyQVRfQ0xLQ1QyKTsKKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ0xLMiwgbG8yKTsKKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ0xLMiwgaGkyKTsKKworCS8qIGVuYWJsZSB0aGUgYWkgY29udmVyc2lvbiBpbnRlcnJ1cHQgYW5kIHRoZSBjbG9jayB0byBzdGFydCBzY2FucyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9JTlRDTE9DSywgRE1NMzJBVF9BRElOVCB8IERNTTMyQVRfQ0xLU0VMKTsKKworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RtbTMyYXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGVlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMKQEAgLTAsMCArMSw2OTcgQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9kdDI4MDEuYworICogRGV2aWNlIERyaXZlciBmb3IgRGF0YVRyYW5zbGF0aW9uIERUMjgwMQorICoKKyAqLworLyoKK0RyaXZlcjogZHQyODAxCitEZXNjcmlwdGlvbjogRGF0YSBUcmFuc2xhdGlvbiBEVDI4MDEgc2VyaWVzIGFuZCBEVDAxLUVaCitBdXRob3I6IGRzCitTdGF0dXM6IHdvcmtzCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQyODAxIChkdDI4MDEpLCBEVDI4MDEtQSwgRFQyODAxLzU3MTZBLAorICBEVDI4MDUsIERUMjgwNS81NzE2QSwgRFQyODA4LCBEVDI4MTgsIERUMjgwOSwgRFQwMS1FWgorCitUaGlzIGRyaXZlciBjYW4gYXV0b3Byb2JlIHRoZSB0eXBlIG9mIGJvYXJkLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSB1bnVzZWQKKyAgWzJdIC0gQS9EIHJlZmVyZW5jZSAwPWRpZmZlcmVudGlhbCwgMT1zaW5nbGUtZW5kZWQKKyAgWzNdIC0gQS9EIHJhbmdlCisgICAgICAgICAgMCA9IFstMTAsMTBdCisJICAxID0gWzAsMTBdCisgIFs0XSAtIEQvQSAwIHJhbmdlCisgICAgICAgICAgMCA9IFstMTAsMTBdCisJICAxID0gWy01LDVdCisJICAyID0gWy0yLjUsMi41XQorCSAgMyA9IFswLDEwXQorCSAgNCA9IFswLDVdCisgIFs1XSAtIEQvQSAxIHJhbmdlIChzYW1lIGNob2ljZXMpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBEVDI4MDFfVElNRU9VVCAxMDAwCisKKy8qIEhhcmR3YXJlIENvbmZpZ3VyYXRpb24gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBEVDI4MDFfTUFYX0RNQV9TSVpFICg2NCAqIDEwMjQpCisKKy8qIFBvcnRzICovCisjZGVmaW5lIERUMjgwMV9JT1NJWkUgMgorCisvKiBkZWZpbmUncyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBDb21tYW5kcyAqLworI2RlZmluZSBEVF9DX1JFU0VUICAgICAgIDB4MAorI2RlZmluZSBEVF9DX0NMRUFSX0VSUiAgIDB4MQorI2RlZmluZSBEVF9DX1JFQURfRVJSUkVHIDB4MgorI2RlZmluZSBEVF9DX1NFVF9DTE9DSyAgIDB4MworCisjZGVmaW5lIERUX0NfVEVTVCAgICAgICAgMHhiCisjZGVmaW5lIERUX0NfU1RPUCAgICAgICAgMHhmCisKKyNkZWZpbmUgRFRfQ19TRVRfRElHSU4gICAweDQKKyNkZWZpbmUgRFRfQ19TRVRfRElHT1VUICAweDUKKyNkZWZpbmUgRFRfQ19SRUFEX0RJRyAgICAweDYKKyNkZWZpbmUgRFRfQ19XUklURV9ESUcgICAweDcKKworI2RlZmluZSBEVF9DX1dSSVRFX0RBSU0gIDB4OAorI2RlZmluZSBEVF9DX1NFVF9EQSAgICAgIDB4OQorI2RlZmluZSBEVF9DX1dSSVRFX0RBICAgIDB4YQorCisjZGVmaW5lIERUX0NfUkVBRF9BRElNICAgMHhjCisjZGVmaW5lIERUX0NfU0VUX0FEICAgICAgMHhkCisjZGVmaW5lIERUX0NfUkVBRF9BRCAgICAgMHhlCisKKy8qIENvbW1hbmQgbW9kaWZpZXJzIChvbmx5IHVzZWQgd2l0aCByZWFkL3dyaXRlKSwgRVhUVFJJRyBjYW4gYmUKKyAgIHVzZWQgd2l0aCBzb21lIG90aGVyIGNvbW1hbmRzLgorKi8KKyNkZWZpbmUgRFRfTU9EX0RNQSAgICAgKDE8PDQpCisjZGVmaW5lIERUX01PRF9DT05UICAgICgxPDw1KQorI2RlZmluZSBEVF9NT0RfRVhUQ0xLICAoMTw8NikKKyNkZWZpbmUgRFRfTU9EX0VYVFRSSUcgKDE8PDcpCisKKy8qIEJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIERUX1NfREFUQV9PVVRfUkVBRFkgICAoMTw8MCkKKyNkZWZpbmUgRFRfU19EQVRBX0lOX0ZVTEwgICAgICgxPDwxKQorI2RlZmluZSBEVF9TX1JFQURZICAgICAgICAgICAgKDE8PDIpCisjZGVmaW5lIERUX1NfQ09NTUFORCAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgRFRfU19DT01QT1NJVEVfRVJST1IgICgxPDw3KQorCisvKiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRFQyODAxX0RBVEEJCTAKKyNkZWZpbmUgRFQyODAxX1NUQVRVUwkJMQorI2RlZmluZSBEVDI4MDFfQ01ECQkxCisKK3N0YXRpYyBpbnQgZHQyODAxX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MjgwMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDI4MDEgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQyODAxIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDI4MDFfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MjgwMV9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgwMSk7CisKKyNpZiAwCisvLyBpZ25vcmUgJ2RlZmluZWQgYnV0IG5vdCB1c2VkJyB3YXJuaW5nCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODAxX2FpX3BnaF9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMS4yNSwgMS4yNSksCisJfQorfTsKKyNlbmRpZgorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgwMV9haV9wZ2xfYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCQkJUkFOR0UoLTAuMDIsIDAuMDIpLAorCX0KK307CisKKyNpZiAwCisvLyBpZ25vcmUgJ2RlZmluZWQgYnV0IG5vdCB1c2VkJyB3YXJuaW5nCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODAxX2FpX3BnaF91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyLjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJfQorfTsKKyNlbmRpZgorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgwMV9haV9wZ2xfdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwkJCVJBTkdFKDAsIDAuMDIpLAorCX0KK307CisKK3N0cnVjdCBkdDI4MDFfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYm9hcmRjb2RlOworCWludCBhZF9kaWZmOworCWludCBhZF9jaGFuOworCWludCBhZGJpdHM7CisJaW50IGFkcmFuZ2V0eXBlOworCWludCBkYWJpdHM7Cit9OworCisKKy8qIFR5cGVpZCdzIGZvciB0aGUgZGlmZmVyZW50IGJvYXJkcyBvZiB0aGUgRFQyODAxLXNlcmllcworICAgKHRha2VuIGZyb20gdGhlIHRlc3Qtc29mdHdhcmUsIHRoYXQgY29tZXMgd2l0aCB0aGUgYm9hcmQpCisgICAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkdDI4MDFfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiZHQyODAxIiwKKwkgICAgICBib2FyZGNvZGU6MHgwOSwKKwkgICAgICBhZF9kaWZmOgkyLAorCSAgICAgIGFkX2NoYW46CTE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRyYW5nZXR5cGU6MCwKKyAgICAgIGRhYml0czoJMTJ9LAorCXsKKwkgICAgICBuYW1lOgkiZHQyODAxLWEiLAorCSAgICAgIGJvYXJkY29kZToweDUyLAorCSAgICAgIGFkX2RpZmY6CTIsCisJICAgICAgYWRfY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdldHlwZTowLAorICAgICAgZGFiaXRzOgkxMn0sCisJeworCSAgICAgIG5hbWU6CSJkdDI4MDEvNTcxNmEiLAorCSAgICAgIGJvYXJkY29kZToweDgyLAorCSAgICAgIGFkX2RpZmY6CTEsCisJICAgICAgYWRfY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZHJhbmdldHlwZToxLAorICAgICAgZGFiaXRzOgkxMn0sCisJeworCSAgICAgIG5hbWU6CSJkdDI4MDUiLAorCSAgICAgIGJvYXJkY29kZToweDEyLAorCSAgICAgIGFkX2RpZmY6CTEsCisJICAgICAgYWRfY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdldHlwZTowLAorICAgICAgZGFiaXRzOgkxMn0sCisJeworCSAgICAgIG5hbWU6CSJkdDI4MDUvNTcxNmEiLAorCSAgICAgIGJvYXJkY29kZToweDkyLAorCSAgICAgIGFkX2RpZmY6CTEsCisJICAgICAgYWRfY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZHJhbmdldHlwZToxLAorICAgICAgZGFiaXRzOgkxMn0sCisJeworCSAgICAgIG5hbWU6CSJkdDI4MDgiLAorCSAgICAgIGJvYXJkY29kZToweDIwLAorCSAgICAgIGFkX2RpZmY6CTAsCisJICAgICAgYWRfY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdldHlwZToyLAorICAgICAgZGFiaXRzOgk4fSwKKwl7CisJICAgICAgbmFtZToJImR0MjgxOCIsCisJICAgICAgYm9hcmRjb2RlOjB4YTIsCisJICAgICAgYWRfZGlmZjoJMCwKKwkgICAgICBhZF9jaGFuOgk0LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRyYW5nZXR5cGU6MCwKKyAgICAgIGRhYml0czoJMTJ9LAorCXsKKwkgICAgICBuYW1lOgkiZHQyODA5IiwKKwkgICAgICBib2FyZGNvZGU6MHhiMCwKKwkgICAgICBhZF9kaWZmOgkwLAorCSAgICAgIGFkX2NoYW46CTgsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdldHlwZToxLAorICAgICAgZGFiaXRzOgkxMn0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoKHNpemVvZihib2FyZHR5cGVzKSkvKHNpemVvZihib2FyZHR5cGVzWzBdKSkpCisjZGVmaW5lIGJvYXJkdHlwZSAoKihjb25zdCBzdHJ1Y3QgZHQyODAxX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBkdDI4MDFfcHJpdmF0ZSB7CisKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqZGFjX3JhbmdlX3R5cGVzWzJdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDI4MDFfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBkdDI4MDFfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGR0MjgwMV9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZHQyODAxX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZHQyODAxX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZHQyODAxX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKiBUaGVzZSBhcmUgdGhlIGxvdy1sZXZlbCByb3V0aW5lczoKKyAgIHdyaXRlY29tbWFuZDogd3JpdGUgYSBjb21tYW5kIHRvIHRoZSBib2FyZAorICAgd3JpdGVkYXRhOiB3cml0ZSBkYXRhIGJ5dGUKKyAgIHJlYWRkYXRhOiByZWFkIGRhdGEgYnl0ZQorICovCisKKy8qIE9ubHkgY2hlY2tzIERhdGFPdXRSZWFkeS1mbGFnLCBub3QgdGhlIFJlYWR5LWZsYWcgYXMgaXQgaXMgZG9uZQorICAgaW4gdGhlIGV4YW1wbGVzIG9mIHRoZSBtYW51YWwuIEkgZG9uJ3Qgc2VlIHdoeSB0aGlzIHNob3VsZCBiZQorICAgbmVjZXNzYXJ5LiAqLworc3RhdGljIGludCBkdDI4MDFfcmVhZGRhdGEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCAqZGF0YSkKK3sKKwlpbnQgc3RhdCA9IDA7CisJaW50IHRpbWVvdXQgPSBEVDI4MDFfVElNRU9VVDsKKworCWRvIHsKKwkJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7CisJCWlmIChzdGF0ICYgKERUX1NfQ09NUE9TSVRFX0VSUk9SIHwgRFRfU19SRUFEWSkpIHsKKwkJCXJldHVybiBzdGF0OworCQl9CisJCWlmIChzdGF0ICYgRFRfU19EQVRBX09VVF9SRUFEWSkgeworCQkJKmRhdGEgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAoLS10aW1lb3V0ID4gMCk7CisKKwlyZXR1cm4gLUVUSU1FOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9yZWFkZGF0YTIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCAqZGF0YSkKK3sKKwlpbnQgbGIsIGhiOworCWludCByZXQ7CisKKwlyZXQgPSBkdDI4MDFfcmVhZGRhdGEoZGV2LCAmbGIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gZHQyODAxX3JlYWRkYXRhKGRldiwgJmhiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJKmRhdGEgPSAoaGIgPDwgOCkgKyBsYjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDI4MDFfd3JpdGVkYXRhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgZGF0YSkKK3sKKwlpbnQgc3RhdCA9IDA7CisJaW50IHRpbWVvdXQgPSBEVDI4MDFfVElNRU9VVDsKKworCWRvIHsKKwkJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7CisKKwkJaWYgKHN0YXQgJiBEVF9TX0NPTVBPU0lURV9FUlJPUikgeworCQkJcmV0dXJuIHN0YXQ7CisJCX0KKwkJaWYgKCEoc3RhdCAmIERUX1NfREFUQV9JTl9GVUxMKSkgeworCQkJb3V0Yl9wKGRhdGEgJiAweGZmLCBkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKwkJCXJldHVybiAwOworCQl9CisjaWYgMAorCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpIHsKKwkJCXByaW50aygiZHQyODAxOiByZWFkeSBmbGFnIHNldCAoYmFkISkgaW4gZHQyODAxX3dyaXRlZGF0YSgpXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisjZW5kaWYKKwl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKKworCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX3dyaXRlZGF0YTIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkdDI4MDFfd3JpdGVkYXRhKGRldiwgZGF0YSAmIDB4ZmYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IGR0MjgwMV93cml0ZWRhdGEoZGV2LCAoZGF0YSA+PiA4KSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDI4MDFfd2FpdF9mb3JfcmVhZHkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHRpbWVvdXQgPSBEVDI4MDFfVElNRU9VVDsKKwlpbnQgc3RhdDsKKworCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOworCWlmIChzdGF0ICYgRFRfU19SRUFEWSkgeworCQlyZXR1cm4gMDsKKwl9CisJZG8geworCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKKworCQlpZiAoc3RhdCAmIERUX1NfQ09NUE9TSVRFX0VSUk9SKSB7CisJCQlyZXR1cm4gc3RhdDsKKwkJfQorCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpIHsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAoLS10aW1lb3V0ID4gMCk7CisKKwlyZXR1cm4gLUVUSU1FOworfQorCitzdGF0aWMgaW50IGR0MjgwMV93cml0ZWNtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGNvbW1hbmQpCit7CisJaW50IHN0YXQ7CisKKwlkdDI4MDFfd2FpdF9mb3JfcmVhZHkoZGV2KTsKKworCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOworCWlmIChzdGF0ICYgRFRfU19DT01QT1NJVEVfRVJST1IpIHsKKwkJcHJpbnRrKCJkdDI4MDE6IGNvbXBvc2l0ZS1lcnJvciBpbiBkdDI4MDFfd3JpdGVjbWQoKSwgaWdub3JpbmdcbiIpOworCX0KKwlpZiAoIShzdGF0ICYgRFRfU19SRUFEWSkpIHsKKwkJcHJpbnRrKCJkdDI4MDE6ICFyZWFkeSBpbiBkdDI4MDFfd3JpdGVjbWQoKSwgaWdub3JpbmdcbiIpOworCX0KKwlvdXRiX3AoY29tbWFuZCwgZGV2LT5pb2Jhc2UgKyBEVDI4MDFfQ01EKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgYm9hcmRfY29kZSA9IDA7CisJdW5zaWduZWQgaW50IHN0YXQ7CisJaW50IHRpbWVvdXQ7CisKKwlEUFJJTlRLKCJkdDI4MDE6IHJlc2V0dGluZyBib2FyZC4uLlxuIik7CisJRFBSSU5USygiZmluZ2VycHJpbnQ6IDB4JTAyeCAweCUwMnhcbiIsIGluYl9wKGRldi0+aW9iYXNlKSwKKwkJaW5iX3AoZGV2LT5pb2Jhc2UgKyAxKSk7CisKKwkvKiBwdWxsIHJhbmRvbSBkYXRhIGZyb20gZGF0YSBwb3J0ICovCisJaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfREFUQSk7CisJaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfREFUQSk7CisJaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfREFUQSk7CisJaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfREFUQSk7CisKKwlEUFJJTlRLKCJkdDI4MDE6IHN0b3BcbiIpOworCS8vZHQyODAxX3dyaXRlY21kKGRldixEVF9DX1NUT1ApOworCW91dGJfcChEVF9DX1NUT1AsIGRldi0+aW9iYXNlICsgRFQyODAxX0NNRCk7CisKKwkvL2R0MjgwMV93YWl0X2Zvcl9yZWFkeShkZXYpOworCWNvbWVkaV91ZGVsYXkoMTAwKTsKKwl0aW1lb3V0ID0gMTAwMDA7CisJZG8geworCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKKwkJaWYgKHN0YXQgJiBEVF9TX1JFQURZKQorCQkJYnJlYWs7CisJfSB3aGlsZSAodGltZW91dC0tKTsKKwlpZiAoIXRpbWVvdXQpIHsKKwkJcHJpbnRrKCJkdDI4MDE6IHRpbWVvdXQgMSBzdGF0dXM9MHglMDJ4XG4iLCBzdGF0KTsKKwl9CisJLy9wcmludGsoImR0MjgwMTogcmVhZGluZyBkdW1teVxuIik7CisJLy9kdDI4MDFfcmVhZGRhdGEoZGV2LCZib2FyZF9jb2RlKTsKKworCURQUklOVEsoImR0MjgwMTogcmVzZXRcbiIpOworCW91dGJfcChEVF9DX1JFU0VULCBkZXYtPmlvYmFzZSArIERUMjgwMV9DTUQpOworCS8vZHQyODAxX3dyaXRlY21kKGRldixEVF9DX1JFU0VUKTsKKworCWNvbWVkaV91ZGVsYXkoMTAwKTsKKwl0aW1lb3V0ID0gMTAwMDA7CisJZG8geworCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKKwkJaWYgKHN0YXQgJiBEVF9TX1JFQURZKQorCQkJYnJlYWs7CisJfSB3aGlsZSAodGltZW91dC0tKTsKKwlpZiAoIXRpbWVvdXQpIHsKKwkJcHJpbnRrKCJkdDI4MDE6IHRpbWVvdXQgMiBzdGF0dXM9MHglMDJ4XG4iLCBzdGF0KTsKKwl9CisKKwlEUFJJTlRLKCJkdDI4MDE6IHJlYWRpbmcgY29kZVxuIik7CisJZHQyODAxX3JlYWRkYXRhKGRldiwgJmJvYXJkX2NvZGUpOworCisJRFBSSU5USygiZHQyODAxOiBvay4gIGNvZGU9MHglMDJ4XG4iLCBib2FyZF9jb2RlKTsKKworCXJldHVybiBib2FyZF9jb2RlOworfQorCitzdGF0aWMgaW50IHByb2JlX251bWJlcl9vZl9haV9jaGFucyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgbl9jaGFuczsKKwlpbnQgc3RhdDsKKwlpbnQgZGF0YTsKKworCWZvciAobl9jaGFucyA9IDA7IG5fY2hhbnMgPCAxNjsgbl9jaGFucysrKSB7CisJCXN0YXQgPSBkdDI4MDFfd3JpdGVjbWQoZGV2LCBEVF9DX1JFQURfQURJTSk7CisJCWR0MjgwMV93cml0ZWRhdGEoZGV2LCAwKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIG5fY2hhbnMpOworCQlzdGF0ID0gZHQyODAxX3JlYWRkYXRhMihkZXYsICZkYXRhKTsKKworCQlpZiAoc3RhdCkKKwkJCWJyZWFrOworCX0KKworCWR0MjgwMV9yZXNldChkZXYpOworCWR0MjgwMV9yZXNldChkZXYpOworCisJcmV0dXJuIG5fY2hhbnM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqZGFjX3JhbmdlX3RhYmxlW10gPSB7CisJJnJhbmdlX2JpcG9sYXIxMCwKKwkmcmFuZ2VfYmlwb2xhcjUsCisJJnJhbmdlX2JpcG9sYXIyXzUsCisJJnJhbmdlX3VuaXBvbGFyMTAsCisJJnJhbmdlX3VuaXBvbGFyNQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpkYWNfcmFuZ2VfbGt1cChpbnQgb3B0KQoreworCWlmIChvcHQgPCAwIHx8IG9wdCA+IDUpCisJCXJldHVybiAmcmFuZ2VfdW5rbm93bjsKKwlyZXR1cm4gZGFjX3JhbmdlX3RhYmxlW29wdF07Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfbGt1cChpbnQgdHlwZSwgaW50IG9wdCkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDA6CisJCXJldHVybiAob3B0KSA/CisJCQkmcmFuZ2VfZHQyODAxX2FpX3BnbF91bmlwb2xhciA6CisJCQkmcmFuZ2VfZHQyODAxX2FpX3BnbF9iaXBvbGFyOworCWNhc2UgMToKKwkJcmV0dXJuIChvcHQpID8gJnJhbmdlX3VuaXBvbGFyMTAgOiAmcmFuZ2VfYmlwb2xhcjEwOworCWNhc2UgMjoKKwkJcmV0dXJuICZyYW5nZV91bmlwb2xhcjU7CisJfQorCXJldHVybiAmcmFuZ2VfdW5rbm93bjsKK30KKworLyoKKyAgIG9wdGlvbnM6CisJWzBdIC0gaS9vIGJhc2UKKwlbMV0gLSB1bnVzZWQKKwlbMl0gLSBhL2QgMD1kaWZmZXJlbnRpYWwsIDE9c2luZ2xlLWVuZGVkCisJWzNdIC0gYS9kIHJhbmdlIDA9Wy0xMCwxMF0sIDE9WzAsMTBdCisJWzRdIC0gZGFjMCByYW5nZSAwPVstMTAsMTBdLCAxPVstNSw1XSwgMj1bLTIuNSwyLjVdIDM9WzAsMTBdLCA0PVswLDVdCisJWzVdIC0gZGFjMSByYW5nZSAwPVstMTAsMTBdLCAxPVstNSw1XSwgMj1bLTIuNSwyLjVdIDM9WzAsMTBdLCA0PVswLDVdCisqLworc3RhdGljIGludCBkdDI4MDFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCWludCBib2FyZF9jb2RlLCB0eXBlOworCWludCByZXQgPSAwOworCWludCBuX2FpX2NoYW5zOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERUMjgwMV9JT1NJWkUsICJkdDI4MDEiKSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiSS9PIHBvcnQgY29uZmxpY3QiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJLyogZG8gc29tZSBjaGVja2luZyAqLworCisJYm9hcmRfY29kZSA9IGR0MjgwMV9yZXNldChkZXYpOworCisJLyogaGVoLiAgaWYgaXQgZGlkbid0IHdvcmssIHRyeSBpdCBhZ2Fpbi4gKi8KKwlpZiAoIWJvYXJkX2NvZGUpCisJCWJvYXJkX2NvZGUgPSBkdDI4MDFfcmVzZXQoZGV2KTsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBuX2JvYXJkdHlwZXM7IHR5cGUrKykgeworCQlpZiAoYm9hcmR0eXBlc1t0eXBlXS5ib2FyZGNvZGUgPT0gYm9hcmRfY29kZSkKKwkJCWdvdG8gaGF2ZXR5cGU7CisJfQorCXByaW50aygiZHQyODAxOiB1bnJlY29nbml6ZWQgYm9hcmQgY29kZT0weCUwMngsIGNvbnRhY3QgYXV0aG9yXG4iLAorCQlib2FyZF9jb2RlKTsKKwl0eXBlID0gMDsKKworICAgICAgaGF2ZXR5cGU6CisJZGV2LT5ib2FyZF9wdHIgPSBib2FyZHR5cGVzICsgdHlwZTsKKwlwcmludGsoImR0MjgwMTogJXMgYXQgcG9ydCAweCVseCIsIGJvYXJkdHlwZS5uYW1lLCBpb2Jhc2UpOworCisJbl9haV9jaGFucyA9IHByb2JlX251bWJlcl9vZl9haV9jaGFucyhkZXYpOworCXByaW50aygiIChhaSBjaGFubmVscyA9ICVkKSIsIG5fYWlfY2hhbnMpOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGR0MjgwMV9wcml2YXRlKSkpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZHR5cGUubmFtZTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworI2lmIDEKKwlzLT5uX2NoYW4gPSBuX2FpX2NoYW5zOworI2Vsc2UKKwlpZiAoaXQtPm9wdGlvbnNbMl0pCisJCXMtPm5fY2hhbiA9IGJvYXJkdHlwZS5hZF9jaGFuOworCWVsc2UKKwkJcy0+bl9jaGFuID0gYm9hcmR0eXBlLmFkX2NoYW4gLyAyOworI2VuZGlmCisJcy0+bWF4ZGF0YSA9ICgxIDw8IGJvYXJkdHlwZS5hZGJpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IGFpX3JhbmdlX2xrdXAoYm9hcmR0eXBlLmFkcmFuZ2V0eXBlLCBpdC0+b3B0aW9uc1szXSk7CisJcy0+aW5zbl9yZWFkID0gZHQyODAxX2FpX2luc25fcmVhZDsKKworCXMrKzsKKwkvKiBhbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDI7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IGJvYXJkdHlwZS5kYWJpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZV9saXN0ID0gZGV2cHJpdi0+ZGFjX3JhbmdlX3R5cGVzOworCWRldnByaXYtPmRhY19yYW5nZV90eXBlc1swXSA9IGRhY19yYW5nZV9sa3VwKGl0LT5vcHRpb25zWzRdKTsKKwlkZXZwcml2LT5kYWNfcmFuZ2VfdHlwZXNbMV0gPSBkYWNfcmFuZ2VfbGt1cChpdC0+b3B0aW9uc1s1XSk7CisJcy0+aW5zbl9yZWFkID0gZHQyODAxX2FvX2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gZHQyODAxX2FvX2luc25fd3JpdGU7CisKKwlzKys7CisJLyogMXN0IGRpZ2l0YWwgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGR0MjgwMV9kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gZHQyODAxX2Rpb19pbnNuX2NvbmZpZzsKKworCXMrKzsKKwkvKiAybmQgZGlnaXRhbCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gZHQyODAxX2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBkdDI4MDFfZGlvX2luc25fY29uZmlnOworCisJcmV0ID0gMDsKKyAgICAgIG91dDoKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR0MjgwMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRFQyODAxX0lPU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDI4MDFfZXJyb3Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBzdGF0KQoreworCWlmIChzdGF0IDwgMCkgeworCQlpZiAoc3RhdCA9PSAtRVRJTUUpIHsKKwkJCXByaW50aygiZHQyODAxOiB0aW1lb3V0XG4iKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiZHQyODAxOiBlcnJvciAlZFxuIiwgc3RhdCk7CisJCX0KKwkJcmV0dXJuIHN0YXQ7CisJfQorCXByaW50aygiZHQyODAxOiBlcnJvciBzdGF0dXMgMHglMDJ4LCByZXNldHRpbmcuLi5cbiIsIHN0YXQpOworCisJZHQyODAxX3Jlc2V0KGRldik7CisJZHQyODAxX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBkdDI4MDFfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgZDsKKwlpbnQgc3RhdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJc3RhdCA9IGR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfUkVBRF9BRElNKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSk7CisJCWR0MjgwMV93cml0ZWRhdGEoZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisJCXN0YXQgPSBkdDI4MDFfcmVhZGRhdGEyKGRldiwgJmQpOworCisJCWlmIChzdGF0ICE9IDApCisJCQlyZXR1cm4gZHQyODAxX2Vycm9yKGRldiwgc3RhdCk7CisKKwkJZGF0YVtpXSA9IGQ7CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkdDI4MDFfd3JpdGVjbWQoZGV2LCBEVF9DX1dSSVRFX0RBSU0pOworCWR0MjgwMV93cml0ZWRhdGEoZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisJZHQyODAxX3dyaXRlZGF0YTIoZGV2LCBkYXRhWzBdKTsKKworCWRldnByaXYtPmFvX3JlYWRiYWNrW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXSA9IGRhdGFbMF07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkdDI4MDFfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IHdoaWNoID0gMDsKKworCWlmIChzID09IGRldi0+c3ViZGV2aWNlcyArIDQpCisJCXdoaWNoID0gMTsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlkdDI4MDFfd3JpdGVjbWQoZGV2LCBEVF9DX1dSSVRFX0RJRyk7CisJCWR0MjgwMV93cml0ZWRhdGEoZGV2LCB3aGljaCk7CisJCWR0MjgwMV93cml0ZWRhdGEoZGV2LCBzLT5zdGF0ZSk7CisJfQorCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfUkVBRF9ESUcpOworCWR0MjgwMV93cml0ZWRhdGEoZGV2LCB3aGljaCk7CisJZHQyODAxX3JlYWRkYXRhKGRldiwgZGF0YSArIDEpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IHdoaWNoID0gMDsKKworCWlmIChzID09IGRldi0+c3ViZGV2aWNlcyArIDQpCisJCXdoaWNoID0gMTsKKworCS8qIGNvbmZpZ3VyZSAqLworCWlmIChkYXRhWzBdKSB7CisJCXMtPmlvX2JpdHMgPSAweGZmOworCQlkdDI4MDFfd3JpdGVjbWQoZGV2LCBEVF9DX1NFVF9ESUdPVVQpOworCX0gZWxzZSB7CisJCXMtPmlvX2JpdHMgPSAwOworCQlkdDI4MDFfd3JpdGVjbWQoZGV2LCBEVF9DX1NFVF9ESUdJTik7CisJfQorCWR0MjgwMV93cml0ZWRhdGEoZGV2LCB3aGljaCk7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTU5MzJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jCkBAIC0wLDAgKzEsNjA0IEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvZHQyODExLmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgRGF0YSBUcmFuc2xhdGlvbiBEVDI4MTEKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgSGlzdG9yeToKKyAgIEJhc2UgVmVyc2lvbiAgLSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAgIERlY2VtYmVyIDE5OTggLSBVcGRhdGVkIHRvIHdvcmsuICBEYXZpZCBkb2VzIG5vdCBoYXZlIGEgRFQyODExCisgICBib2FyZCBhbnkgbG9uZ2VyIHNvIHRoaXMgd2FzIHN1ZmZlcmluZyBmcm9tIGJpdHJvdC4KKyAgIFVwZGF0ZWQgcGVyZm9ybWVkIGJ5IC4uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisvKgorRHJpdmVyOiBkdDI4MTEKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgxMQorQXV0aG9yOiBkcworRGV2aWNlczogW0RhdGEgVHJhbnNsYXRpb25dIERUMjgxMS1QR0wgKGR0MjgxMS1wZ2wpLCBEVDI4MTEtUEdIIChkdDI4MTEtcGdoKQorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEsIGFsdGhvdWdoIHRoaXMgaXMgY3VycmVudGx5IHVudXNlZAorICBbMl0gLSBBL0QgcmVmZXJlbmNlCisgICAgICAgICAgMCA9IHNpZ25sZS1lbmRlZAorICAgICAgICAgIDEgPSBkaWZmZXJlbnRpYWwKKwkgIDIgPSBwc2V1ZG8tZGlmZmVyZW50aWFsIChjb21tb24gcmVmZXJlbmNlKQorICBbM10gLSBBL0QgcmFuZ2UKKyAgICAgICAgICAwID0gWy01LDVdCisJICAxID0gWy0yLjUsMi41XQorCSAgMiA9IFswLDVdCisgIFs0XSAtIEQvQSAwIHJhbmdlIChzYW1lIGNob2ljZXMpCisgIFs0XSAtIEQvQSAxIHJhbmdlIChzYW1lIGNob2ljZXMpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKmRyaXZlcl9uYW1lID0gImR0MjgxMSI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MTFfcGdoX2FpXzVfdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKDAsIDEuMjUpLAorCQkJUkFOR0UoMCwgMC42MjUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MTFfcGdoX2FpXzJfNV9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCQkJUkFOR0UoLTAuNjI1LCAwLjYyNSksCisJCQlSQU5HRSgtMC4zMTI1LCAwLjMxMjUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MTFfcGdoX2FpXzVfYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKC0wLjYyNSwgMC42MjUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MTFfcGdsX2FpXzVfdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMC41KSwKKwkJCVJBTkdFKDAsIDAuMDUpLAorCQkJUkFOR0UoMCwgMC4wMSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2xfYWlfMl81X2JpcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMC4yNSwgMC4yNSksCisJCQlSQU5HRSgtMC4wMjUsIDAuMDI1KSwKKwkJCVJBTkdFKC0wLjAwNSwgMC4wMDUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MTFfcGdsX2FpXzVfYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTAuNSwgMC41KSwKKwkJCVJBTkdFKC0wLjA1LCAwLjA1KSwKKwkJCVJBTkdFKC0wLjAxLCAwLjAxKQorCX0KK307CisKKy8qCisKKyAgIDB4MDAgICAgQURDU1IgUi9XICBBL0QgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKKyAgIGJpdCA3IC0gKFIpIDEgaW5kaWNhdGVzIEEvRCBjb252ZXJzaW9uIGRvbmUKKyAgIHJlYWRpbmcgQUREQVQgY2xlYXJzIGJpdAorICAgKFcpIGlnbm9yZWQKKyAgIGJpdCA2IC0gKFIpIDEgaW5kaWNhdGVzIEEvRCBlcnJvcgorICAgKFcpIGlnbm9yZWQKKyAgIGJpdCA1IC0gKFIpIDEgaW5kaWNhdGVzIEEvRCBidXN5LCBjbGVhcmVkIGF0IGVuZAorICAgb2YgY29udmVyc2lvbgorICAgKFcpIGlnbm9yZWQKKyAgIGJpdCA0IC0gKFIpIDAKKyAgIChXKQorICAgYml0IDMgLSAoUikgMAorICAgYml0IDIgLSAoUi9XKSAxIGluZGljYXRlcyBpbnRlcnJ1cHRzIGVuYWJsZWQKKyAgIGJpdHMgMSwwIC0gKFIvVykgbW9kZSBiaXRzCisgICAwMCAgc2luZ2xlIGNvbnZlcnNpb24gb24gQURHQ1IgbG9hZAorICAgMDEgIGNvbnRpbnVvdXMgY29udmVyc2lvbiwgaW50ZXJuYWwgY2xvY2ssCisgICAoY2xvY2sgZW5hYmxlZCBvbiBBREdDUiBsb2FkKQorICAgMTAgIGNvbnRpbnVvdXMgY29udmVyc2lvbiwgaW50ZXJuYWwgY2xvY2ssCisgICBleHRlcm5hbCB0cmlnZ2VyCisgICAxMSAgY29udGludW91cyBjb252ZXJzaW9uLCBleHRlcm5hbCBjbG9jaywKKyAgIGV4dGVybmFsIHRyaWdnZXIKKworICAgMHgwMSAgICBBREdDUiBSL1cgQS9EIEdhaW4vQ2hhbm5lbCBSZWdpc3RlcgorICAgYml0IDYsNyAtIChSL1cpIGdhaW4gc2VsZWN0CisgICAwMCAgZ2Fpbj0xLCBib3RoIFBHSCwgUEdMIG1vZGVscworICAgMDEgIGdhaW49MiBQR0gsIDEwIFBHTAorICAgMTAgIGdhaW49NCBQR0gsIDEwMCBQR0wKKyAgIDExICBnYWluPTggUEdILCA1MDAgUEdMCisgICBiaXQgNCw1IC0gcmVzZXJ2ZWQKKyAgIGJpdCAzLTAgLSAoUi9XKSBjaGFubmVsIHNlbGVjdAorICAgY2hhbm5lbCBudW1iZXIgZnJvbSAwLTE1CisKKyAgIDB4MDIsMHgwMyAoUikgQUREQVQgQS9EIERhdGEgUmVnaXN0ZXIKKyAgIChXKSBEQURBVDAgRC9BIERhdGEgUmVnaXN0ZXIgMAorICAgMHgwMiBsb3cgYnl0ZQorICAgMHgwMyBoaWdoIGJ5dGUKKworICAgMHgwNCwweDA1IChXKSBEQURBVDAgRC9BIERhdGEgUmVnaXN0ZXIgMQorCisgICAweDA2IChSKSBESU8wIERpZ2l0YWwgSW5wdXQgUG9ydCAwCisgICAoVykgRElPMSBEaWdpdGFsIE91dHB1dCBQb3J0IDEKKworICAgMHgwNyBUTVJDVFIgKFIvVykgVGltZXIvQ291bnRlciBSZWdpc3RlcgorICAgYml0cyA2LDcgLSByZXNlcnZlZAorICAgYml0cyA1LTMgLSBUaW1lciBmcmVxdWVuY3kgY29udHJvbCAobWFudGlzc2EpCisgICA1NDMgIGRpdmlzb3IgIGZyZXFlbmN5IChrSHopCisgICAwMDAgIDEgICAgICAgIDYwMAorICAgMDAxICAxMCAgICAgICA2MAorICAgMDEwICAyICAgICAgICAzMDAKKyAgIDAxMSAgMyAgICAgICAgMjAwCisgICAxMDAgIDQgICAgICAgIDE1MAorICAgMTAxICA1ICAgICAgICAxMjAKKyAgIDExMCAgNiAgICAgICAgMTAwCisgICAxMTEgIDEyICAgICAgIDUwCisgICBiaXRzIDItMCAtIFRpbWVyIGZyZXF1ZW5jeSBjb250cm9sIChleHBvbmVudCkKKyAgIDIxMCAgbXVsdGlwbHkgZGl2aXNvci9kaXZpZGUgZnJlcXVlbmN5IGJ5CisgICAwMDAgIDEKKyAgIDAwMSAgMTAKKyAgIDAxMCAgMTAwCisgICAwMTEgIDEwMDAKKyAgIDEwMCAgMTAwMDAKKyAgIDEwMSAgMTAwMDAwCisgICAxMTAgIDEwMDAwMDAKKyAgIDExMSAgMTAwMDAwMDAKKworICovCisKKyNkZWZpbmUgVElNRU9VVCAxMDAwMAorCisjZGVmaW5lIERUMjgxMV9TSVpFIDgKKworI2RlZmluZSBEVDI4MTFfQURDU1IgMAorI2RlZmluZSBEVDI4MTFfQURHQ1IgMQorI2RlZmluZSBEVDI4MTFfQUREQVRMTyAyCisjZGVmaW5lIERUMjgxMV9BRERBVEhJIDMKKyNkZWZpbmUgRFQyODExX0RBREFUMExPIDIKKyNkZWZpbmUgRFQyODExX0RBREFUMEhJIDMKKyNkZWZpbmUgRFQyODExX0RBREFUMUxPIDQKKyNkZWZpbmUgRFQyODExX0RBREFUMUhJIDUKKyNkZWZpbmUgRFQyODExX0RJTyA2CisjZGVmaW5lIERUMjgxMV9UTVJDVFIgNworCisvKgorICogZmxhZ3MKKyAqLworCisvKiBBRENTUiAqLworCisjZGVmaW5lIERUMjgxMV9BRERPTkUgICAweDgwCisjZGVmaW5lIERUMjgxMV9BREVSUk9SICAweDQwCisjZGVmaW5lIERUMjgxMV9BREJVU1kgICAweDIwCisjZGVmaW5lIERUMjgxMV9DTFJFUlJPUiAweDEwCisjZGVmaW5lIERUMjgxMV9JTlRFTkIgICAweDA0CisjZGVmaW5lIERUMjgxMV9BRE1PREUgICAweDAzCisKK3N0cnVjdCBkdDI4MTFfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYmlwXzU7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmJpcF8yXzU7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnVuaXBfNTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHQyODExX2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7ImR0MjgxMS1wZ2giLAorCQkJJnJhbmdlX2R0MjgxMV9wZ2hfYWlfNV9iaXBvbGFyLAorCQkJJnJhbmdlX2R0MjgxMV9wZ2hfYWlfMl81X2JpcG9sYXIsCisJCQkmcmFuZ2VfZHQyODExX3BnaF9haV81X3VuaXBvbGFyLAorCQl9LAorCXsiZHQyODExLXBnbCIsCisJCQkmcmFuZ2VfZHQyODExX3BnbF9haV81X2JpcG9sYXIsCisJCQkmcmFuZ2VfZHQyODExX3BnbF9haV8yXzVfYmlwb2xhciwKKwkJCSZyYW5nZV9kdDI4MTFfcGdsX2FpXzVfdW5pcG9sYXIsCisJCX0sCit9OworCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgZHQyODExX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBpbnQgZHQyODExX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MjgxMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDI4MTEgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQyODExIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDI4MTFfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MjgxMV9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGJvYXJkdHlwZXMpIC8gc2l6ZW9mKHN0cnVjdCBkdDI4MTFfYm9hcmQpLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZHQyODExX2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZHQyODExKTsKKworc3RhdGljIGludCBkdDI4MTFfYWlfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MTFfYW9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MTFfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGR0MjgxMV9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZHQyODExX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitlbnVtIHsgY2FyZF8yODExX3BnaCwgY2FyZF8yODExX3BnbCB9OworCitzdHJ1Y3QgZHQyODExX3ByaXZhdGUgeworCWludCBudHJpZzsKKwlpbnQgY3VyYWRjaGFuOworCWVudW0geworCQlhZGNfc2luZ2xlZW5kZWQsIGFkY19kaWZmLCBhZGNfcHNldWRvX2RpZmYKKwl9IGFkY19tdXg7CisJZW51bSB7CisJCWRhY19iaXBvbGFyXzUsIGRhY19iaXBvbGFyXzJfNSwgZGFjX3VuaXBvbGFyXzUKKwl9IGRhY19yYW5nZVsyXTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfdHlwZV9saXN0WzJdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDI4MTFfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpkYWNfcmFuZ2VfdHlwZXNbXSA9IHsKKwkmcmFuZ2VfYmlwb2xhcjUsCisJJnJhbmdlX2JpcG9sYXIyXzUsCisJJnJhbmdlX3VuaXBvbGFyNQorfTsKKworI2RlZmluZSBEVDI4MTFfVElNRU9VVCA1CisKKyNpZiAwCitzdGF0aWMgaXJxcmV0dXJuX3QgZHQyODExX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCWludCBsbywgaGk7CisJaW50IGRhdGE7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRMTyk7CisJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRISSk7CisKKwlkYXRhID0gbG8gKyAoaGkgPDwgOCk7CisKKwlpZiAoISgtLWRldnByaXYtPm50cmlnKSkgeworCQkvKiBob3cgdG8gdHVybiBvZmYgYWNxdWlzaXRpb24gKi8KKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfU0JfRU9BOworCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisjZW5kaWYKKworLyoKKyAgb3B0aW9uc1swXSAgIEJvYXJkIGJhc2UgYWRkcmVzcworICBvcHRpb25zWzFdICAgSVJRCisgIG9wdGlvbnNbMl0gICBJbnB1dCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgIDAgPT0gc2luZ2xlLWVuZGVkCisgICAgICAgICAgICAgICAgIDEgPT0gZGlmZmVyZW50aWFsCisgICAgICAgICAgICAgICAgIDIgPT0gcHNldWRvLWRpZmZlcmVudGlhbAorICBvcHRpb25zWzNdICAgQW5hbG9nIGlucHV0IHJhbmdlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgMCA9PSBiaXBvbGFyIDUgICgtNVYgLS0gKzVWKQorICAgICAgICAgICAgICAgICAxID09IGJpcG9sYXIgMi41ViAgKC0yLjVWIC0tICsyLjVWKQorICAgICAgICAgICAgICAgICAyID09IHVuaXBvbGFyIDVWICAoMFYgLS0gKzVWKQorICBvcHRpb25zWzRdICAgQW5hbG9nIG91dHB1dCAwIHJhbmdlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgMCA9PSBiaXBvbGFyIDUgICgtNVYgLS0gKzVWKQorICAgICAgICAgICAgICAgICAxID09IGJpcG9sYXIgMi41ViAgKC0yLjVWIC0tICsyLjVWKQorICAgICAgICAgICAgICAgICAyID09IHVuaXBvbGFyIDVWICAoMFYgLS0gKzVWKQorICBvcHRpb25zWzVdICAgQW5hbG9nIG91dHB1dCAxIHJhbmdlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgMCA9PSBiaXBvbGFyIDUgICgtNVYgLS0gKzVWKQorICAgICAgICAgICAgICAgICAxID09IGJpcG9sYXIgMi41ViAgKC0yLjVWIC0tICsyLjVWKQorICAgICAgICAgICAgICAgICAyID09IHVuaXBvbGFyIDVWICAoMFYgLS0gKzVWKQorKi8KKworc3RhdGljIGludCBkdDI4MTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCS8vaW50IGksIGlycTsKKwkvL3Vuc2lnbmVkIGxvbmcgaXJxczsKKwkvL2xvbmcgZmxhZ3M7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCisJcHJpbnRrKCJjb21lZGklZDogZHQyODExOiBiYXNlPTB4JTA0bHhcbiIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODExX1NJWkUsIGRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworI2lmIDAKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgRFQyODExX0FEQ1NSKTsKKwljb21lZGlfdWRlbGF5KDEwMCk7CisJaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVExPKTsKKwlpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEREFUSEkpOworI2VuZGlmCisKKyNpZiAwCisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJaWYgKGlycSA8IDApIHsKKwkJc2F2ZV9mbGFncyhmbGFncyk7CisJCXN0aSgpOworCQlpcnFzID0gcHJvYmVfaXJxX29uKCk7CisKKwkJb3V0YihEVDI4MTFfQ0xSRVJST1IgfCBEVDI4MTFfSU5URU5CLAorCQkJZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQURDU1IpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgRFQyODExX0FER0NSKTsKKworCQljb21lZGlfdWRlbGF5KDEwMCk7CisKKwkJaXJxID0gcHJvYmVfaXJxX29mZihpcnFzKTsKKwkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkJLypvdXRiKERUMjgxMV9DTFJFUlJPUnxEVDI4MTFfSU5URU5CLGRldi0+aW9iYXNlK0RUMjgxMV9BRENTUik7ICovCisKKwkJaWYgKGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRENTUikgJiBEVDI4MTFfQURFUlJPUikgeworCQkJcHJpbnRrKCJlcnJvciBwcm9iaW5nIGlycSAoYmFkKSBcbiIpOworCQl9CisJCWRldi0+aXJxID0gMDsKKwkJaWYgKGlycSA+IDApIHsKKwkJCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRMTyk7CisJCQlpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEREFUSEkpOworCQkJcHJpbnRrKCIoaXJxID0gJWQpXG4iLCBpcnEpOworCQkJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgZHQyODExX2ludGVycnVwdCwgMCwKKwkJCQlkcml2ZXJfbmFtZSwgZGV2KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiAtRUlPOworCQkJZGV2LT5pcnEgPSBpcnE7CisJCX0gZWxzZSBpZiAoaXJxID09IDApIHsKKwkJCXByaW50aygiKG5vIGlycSlcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCIoIG11bHRpcGxlIGlycSdzIC0tIHRoaXMgaXMgYmFkISApXG4iKTsKKwkJfQorCX0KKyNlbmRpZgorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGR0MjgxMV9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlzd2l0Y2ggKGl0LT5vcHRpb25zWzJdKSB7CisJY2FzZSAwOgorCQlkZXZwcml2LT5hZGNfbXV4ID0gYWRjX3NpbmdsZWVuZGVkOworCQlicmVhazsKKwljYXNlIDE6CisJCWRldnByaXYtPmFkY19tdXggPSBhZGNfZGlmZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkZXZwcml2LT5hZGNfbXV4ID0gYWRjX3BzZXVkb19kaWZmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5hZGNfbXV4ID0gYWRjX3NpbmdsZWVuZGVkOworCQlicmVhazsKKwl9CisJc3dpdGNoIChpdC0+b3B0aW9uc1s0XSkgeworCWNhc2UgMDoKKwkJZGV2cHJpdi0+ZGFjX3JhbmdlWzBdID0gZGFjX2JpcG9sYXJfNTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMF0gPSBkYWNfYmlwb2xhcl8yXzU7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGV2cHJpdi0+ZGFjX3JhbmdlWzBdID0gZGFjX3VuaXBvbGFyXzU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldnByaXYtPmRhY19yYW5nZVswXSA9IGRhY19iaXBvbGFyXzU7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGl0LT5vcHRpb25zWzVdKSB7CisJY2FzZSAwOgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMV0gPSBkYWNfYmlwb2xhcl81OworCQlicmVhazsKKwljYXNlIDE6CisJCWRldnByaXYtPmRhY19yYW5nZVsxXSA9IGRhY19iaXBvbGFyXzJfNTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMV0gPSBkYWNfdW5pcG9sYXJfNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2cHJpdi0+ZGFjX3JhbmdlWzFdID0gZGFjX2JpcG9sYXJfNTsKKwkJYnJlYWs7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogaW5pdGlhbGl6ZSB0aGUgQURDIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworCXMtPm5fY2hhbiA9IGRldnByaXYtPmFkY19tdXggPT0gYWRjX2RpZmYgPyA4IDogMTY7CisJcy0+aW5zbl9yZWFkID0gZHQyODExX2FpX2luc247CisJcy0+bWF4ZGF0YSA9IDB4ZmZmOworCXN3aXRjaCAoaXQtPm9wdGlvbnNbM10pIHsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5iaXBfNTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmJpcF8yXzU7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT51bmlwXzU7CisJCWJyZWFrOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5pbnNuX3dyaXRlID0gZHQyODExX2FvX2luc247CisJcy0+aW5zbl9yZWFkID0gZHQyODExX2FvX2luc25fcmVhZDsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IGRldnByaXYtPnJhbmdlX3R5cGVfbGlzdDsKKwlkZXZwcml2LT5yYW5nZV90eXBlX2xpc3RbMF0gPSBkYWNfcmFuZ2VfdHlwZXNbZGV2cHJpdi0+ZGFjX3JhbmdlWzBdXTsKKwlkZXZwcml2LT5yYW5nZV90eXBlX2xpc3RbMV0gPSBkYWNfcmFuZ2VfdHlwZXNbZGV2cHJpdi0+ZGFjX3JhbmdlWzFdXTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBkdDI4MTFfZGlfaW5zbl9iaXRzOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiBkbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gZHQyODExX2RvX2luc25fYml0czsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5zdGF0ZSA9IDA7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgxMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZHQyODExOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldi0+aW9iYXNlKSB7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MTFfU0laRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODExX2FpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IHRpbWVvdXQgPSBEVDI4MTFfVElNRU9VVDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0YihjaGFuLCBkZXYtPmlvYmFzZSArIERUMjgxMV9BREdDUik7CisKKwkJd2hpbGUgKHRpbWVvdXQKKwkJCSYmIGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRENTUikgJiBEVDI4MTFfQURCVVNZKQorCQkJdGltZW91dC0tOworCQlpZiAoIXRpbWVvdXQpCisJCQlyZXR1cm4gLUVUSU1FOworCisJCWRhdGFbaV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRMTyk7CisJCWRhdGFbaV0gfD0gaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEREFUSEkpIDw8IDg7CisJCWRhdGFbaV0gJj0gMHhmZmY7CisJfQorCisJcmV0dXJuIGk7Cit9CisKKyNpZiAwCisvKiBXb3cuICBUaGlzIGlzIGNvZGUgZnJvbSB0aGUgQ29tZWRpIHN0b25lIGFnZS4gIEJ1dCBpdCBoYXNuJ3QgYmVlbgorICogcmVwbGFjZWQsIHNvIEknbGwgbGV0IGl0IHN0YXkuICovCitpbnQgZHQyODExX2FkdHJpZyhrZGV2X3QgbWlub3IsIGNvbWVkaV9hZHRyaWcgKiBhZHRyaWcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGNvbWVkaV9kZXZpY2VzICsgbWlub3I7CisKKwlpZiAoYWR0cmlnLT5uIDwgMSkKKwkJcmV0dXJuIDA7CisJZGV2LT5jdXJhZGNoYW4gPSBhZHRyaWctPmNoYW47CisJc3dpdGNoIChkZXYtPmlfYWRtb2RlKSB7CisJY2FzZSBDT01FRElfTURFTUFORDoKKwkJZGV2LT5udHJpZyA9IGFkdHJpZy0+biAtIDE7CisJCS8qcHJpbnRrKCJkdDI4MTE6IEFEIHNvZnQgdHJpZ2dlclxuIik7ICovCisJCS8qb3V0YihEVDI4MTFfQ0xSRVJST1J8RFQyODExX0lOVEVOQixkZXYtPmlvYmFzZStEVDI4MTFfQURDU1IpOyAqLy8qIG5vdCBuZWNjZXNzYXJ5ICovCisJCW91dGIoZGV2LT5jdXJhZGNoYW4sIGRldi0+aW9iYXNlICsgRFQyODExX0FER0NSKTsKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0cmlndGltZSk7CisJCWJyZWFrOworCWNhc2UgQ09NRURJX01DT05UUzoKKwkJZGV2LT5udHJpZyA9IGFkdHJpZy0+bjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBkdDI4MTFfYW9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCW91dGIoZGF0YVtpXSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgRFQyODExX0RBREFUMExPICsgMiAqIGNoYW4pOworCQlvdXRiKChkYXRhW2ldID4+IDgpICYgMHhmZiwKKwkJCWRldi0+aW9iYXNlICsgRFQyODExX0RBREFUMEhJICsgMiAqIGNoYW4pOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZHQyODExX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MTFfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfRElPKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGR0MjgxMV9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJb3V0YihzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfRElPKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMjAxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZHQyODE0LmMKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIERhdGEgVHJhbnNsYXRpb24gRFQyODE0CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBkdDI4MTQKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgxNAorQXV0aG9yOiBkcworU3RhdHVzOiBjb21wbGV0ZQorRGV2aWNlczogW0RhdGEgVHJhbnNsYXRpb25dIERUMjgxNCAoZHQyODE0KQorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEKKworVGhpcyBjYXJkIGhhcyAxNiBhbmFsb2cgaW5wdXRzIG11bHRpcGxleGVkIG9udG8gYSAxMiBiaXQgQURDLiAgVGhlcmUKK2lzIGEgbWluaW1hbGx5IHVzZWZ1bCBvbmJvYXJkIGNsb2NrLiAgVGhlIGJhc2UgZnJlcXVlbmN5IGZvciB0aGUKK2Nsb2NrIGlzIHNlbGVjdGVkIGJ5IGp1bXBlcnMsIGFuZCB0aGUgY2xvY2sgZGl2aWRlciBjYW4gYmUgc2VsZWN0ZWQKK3ZpYSBwcm9ncmFtbWVkIEkvTy4gIFVuZm9ydHVuYXRlbHksIHRoZSBjbG9jayBkaXZpZGVyIGNhbiBvbmx5IGJlCithIHBvd2VyIG9mIDEwLCBmcm9tIDEgdG8gMTBeNywgb2Ygd2hpY2ggb25seSAzIG9yIDQgYXJlIHVzZWZ1bC4gIEluCithZGRpdGlvbiwgdGhlIGNsb2NrIGRvZXMgbm90IHNlZW0gdG8gYmUgdmVyeSBhY2N1cmF0ZS4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNkZWZpbmUgRFQyODE0X1NJWkUgMgorCisjZGVmaW5lIERUMjgxNF9DU1IgMAorI2RlZmluZSBEVDI4MTRfREFUQSAxCisKKy8qCisgKiBmbGFncworICovCisKKyNkZWZpbmUgRFQyODE0X0ZJTklTSCAweDgwCisjZGVmaW5lIERUMjgxNF9FUlIgMHg0MAorI2RlZmluZSBEVDI4MTRfQlVTWSAweDIwCisjZGVmaW5lIERUMjgxNF9FTkIgMHgxMAorI2RlZmluZSBEVDI4MTRfQ0hBTk1BU0sgMHgwZgorCitzdGF0aWMgaW50IGR0MjgxNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkdDI4MTRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZHQyODE0ID0geworICAgICAgZHJpdmVyX25hbWU6ImR0MjgxNCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZHQyODE0X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkdDI4MTRfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTQpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgZHQyODE0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYgUFRfUkVHU19BUkcpOworCitzdHJ1Y3QgZHQyODE0X3ByaXZhdGUgeworCisJaW50IG50cmlnOworCWludCBjdXJhZGNoYW47Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZHQyODE0X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKyNkZWZpbmUgRFQyODE0X1RJTUVPVVQgMTAKKyNkZWZpbmUgRFQyODE0X01BWF9TUEVFRCAxMDAwMDAJLyogQXJiaXRyYXJ5IDEwIGtoeiBsaW1pdCAqLworCitzdGF0aWMgaW50IGR0MjgxNF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBpLCBoaSwgbG87CisJaW50IGNoYW47CisJaW50IHN0YXR1cyA9IDA7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCQlvdXRiKGNoYW4sIGRldi0+aW9iYXNlICsgRFQyODE0X0NTUik7CisJCWZvciAoaSA9IDA7IGkgPCBEVDI4MTRfVElNRU9VVDsgaSsrKSB7CisJCQlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKwkJCXByaW50aygiZHQyODE0OiBzdGF0dXM6ICUwMnhcbiIsIHN0YXR1cyk7CisJCQljb21lZGlfdWRlbGF5KDEwKTsKKwkJCWlmIChzdGF0dXMgJiBEVDI4MTRfRklOSVNIKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID49IERUMjgxNF9USU1FT1VUKSB7CisJCQlwcmludGsoImR0MjgxNDogc3RhdHVzOiAlMDJ4XG4iLCBzdGF0dXMpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQloaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKwkJbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfREFUQSk7CisKKwkJZGF0YVtuXSA9IChoaSA8PCA0KSB8IChsbyA+PiA0KTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBkdDI4MTRfbnNfdG9fdGltZXIodW5zaWduZWQgaW50ICpucywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBmOworCisJLyogWFhYIGlnbm9yZXMgZmxhZ3MgKi8KKworCWYgPSAxMDAwMDsJCS8qIG5zICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoKDIgKiAoKm5zKSkgPCAoZiAqIDExKSkKKwkJCWJyZWFrOworCQlmICo9IDEwOworCX0KKworCSpucyA9IGY7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MTRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IDEwMDAwMDAwMDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDEwMDAwMDAwMDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IERUMjgxNF9NQVhfU1BFRUQpIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IERUMjgxNF9NQVhfU1BFRUQ7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGNtZC0+c3RvcF9hcmcgPCAyKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJZHQyODE0X25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDI4MTRfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBjaGFuOworCWludCB0cmlndmFyOworCisJdHJpZ3ZhciA9CisJCWR0MjgxNF9uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisKKwljaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKworCWRldnByaXYtPm50cmlnID0gY21kLT5zdG9wX2FyZzsKKwlvdXRiKGNoYW4gfCBEVDI4MTRfRU5CIHwgKHRyaWd2YXIgPDwgNSksIGRldi0+aW9iYXNlICsgRFQyODE0X0NTUik7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGR0MjgxNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IGksIGlycTsKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogZHQyODE0OiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERUMjgxNF9TSVpFLCAiZHQyODE0IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiZHQyODE0IjsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKwljb21lZGlfdWRlbGF5KDEwMCk7CisJaWYgKGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpICYgRFQyODE0X0VSUikgeworCQlwcmludGsoInJlc2V0IGVycm9yIChmYXRhbClcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKwlpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisjaWYgMAorCWlmIChpcnEgPCAwKSB7CisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQlzdGkoKTsKKwkJaXJxcyA9IHByb2JlX2lycV9vbigpOworCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKworCQljb21lZGlfdWRlbGF5KDEwMCk7CisKKwkJaXJxID0gcHJvYmVfaXJxX29mZihpcnFzKTsKKwkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKSAmIERUMjgxNF9FUlIpIHsKKwkJCXByaW50aygiZXJyb3IgcHJvYmluZyBpcnEgKGJhZCkgXG4iKTsKKwkJfQorCisJCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfREFUQSk7CisJCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfREFUQSk7CisJfQorI2VuZGlmCisJZGV2LT5pcnEgPSAwOworCWlmIChpcnEgPiAwKSB7CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkdDI4MTRfaW50ZXJydXB0LCAwLCAiZHQyODE0IiwgZGV2KSkgeworCQkJcHJpbnRrKCIoaXJxICVkIHVuYXZhaWxhYmxlKVxuIiwgaXJxKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiKCBpcnEgPSAlZCApXG4iLCBpcnEpOworCQkJZGV2LT5pcnEgPSBpcnE7CisJCX0KKwl9IGVsc2UgaWYgKGlycSA9PSAwKSB7CisJCXByaW50aygiKG5vIGlycSlcbiIpOworCX0gZWxzZSB7CisjaWYgMAorCQlwcmludGsoIihwcm9iZSByZXR1cm5lZCBtdWx0aXBsZSBpcnFzLS1iYWQpXG4iKTsKKyNlbHNlCisJCXByaW50aygiKGlycSBwcm9iZSBub3QgaW1wbGVtZW50ZWQpXG4iKTsKKyNlbmRpZgorCX0KKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkdDI4MTRfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSAxNjsJCS8qIFhYWCAqLworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+aW5zbl9yZWFkID0gZHQyODE0X2FpX2luc25fcmVhZDsKKwlzLT5kb19jbWQgPSBkdDI4MTRfYWlfY21kOworCXMtPmRvX2NtZHRlc3QgPSBkdDI4MTRfYWlfY21kdGVzdDsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsJLyogWFhYICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDI4MTRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGR0MjgxNDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCWlmIChkZXYtPmlvYmFzZSkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRFQyODE0X1NJWkUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZHQyODE0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCWludCBsbywgaGk7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGRhdGE7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKwloaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKwlsbyA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKworCWRhdGEgPSAoaGkgPDwgNCkgfCAobG8gPj4gNCk7CisKKwlpZiAoISgtLWRldnByaXYtPm50cmlnKSkgeworCQlpbnQgaTsKKworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgRFQyODE0X0NTUik7CisJCS8qIG5vdGU6IHR1cm5pbmcgb2ZmIHRpbWVkIG1vZGUgdHJpZ2dlcnMgYW5vdGhlcgorCQkgICBzYW1wbGUuICovCisKKwkJZm9yIChpID0gMDsgaSA8IERUMjgxNF9USU1FT1VUOyBpKyspIHsKKwkJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKSAmIERUMjgxNF9GSU5JU0gpCisJCQkJYnJlYWs7CisJCX0KKwkJaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCQlpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfREFUQSk7CisKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNjZWM4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2R0MjgxNS5jCisgICBIYXJkd2FyZSBkcml2ZXIgZm9yIERhdGEgVHJhbnNsYXRpb24gRFQyODE1CisKKyAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgIENvcHlyaWdodCAoQykgMTk5OSBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBkdDI4MTUKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgxNQorQXV0aG9yOiBkcworU3RhdHVzOiBtb3N0bHkgY29tcGxldGUsIHVudGVzdGVkCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQyODE1IChkdDI4MTUpCisKK0knbSBub3Qgc3VyZSBhbnlvbmUgaGFzIGV2ZXIgdGVzdGVkIHRoaXMgYm9hcmQuICBJZiB5b3UgaGF2ZSBpbmZvcm1hdGlvbgorY29udHJhcnksIHBsZWFzZSB1cGRhdGUuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRICh1bnVzZWQpCisgIFsyXSAtIFZvbHRhZ2UgdW5pcG9sYXIvYmlwb2xhciBjb25maWd1cmF0aW9uCisgICAgICAgICAgMCA9PSB1bmlwb2xhciA1ViAgKDBWIC0tICs1VikKKwkgIDEgPT0gYmlwb2xhciA1ViAgKC01ViAtLSArNVYpCisgIFszXSAtIEN1cnJlbnQgb2Zmc2V0IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAwID09IGRpc2FibGVkICAoMG1BIC0tICszMm1BVikKKyAgICAgICAgICAxID09IGVuYWJsZWQgICgrNG1BIC0tICsyMG1BVikKKyAgWzRdIC0gRmlybXdhcmUgcHJvZ3JhbSBjb25maWd1cmF0aW9uCisgICAgICAgICAgMCA9PSBwcm9ncmFtIDEgKHNlZSBtYW51YWwgdGFibGUgNS00KQorICAgICAgICAgIDEgPT0gcHJvZ3JhbSAyIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKyAgICAgICAgICAyID09IHByb2dyYW0gMyAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgICAgICAgICAgMyA9PSBwcm9ncmFtIDQgKHNlZSBtYW51YWwgdGFibGUgNS00KQorICBbNV0gLSBBbmFsb2cgb3V0cHV0IDAgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgIDAgPT0gdm9sdGFnZQorICAgICAgICAgIDEgPT0gY3VycmVudAorICBbNl0gLSBBbmFsb2cgb3V0cHV0IDEgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQorICBbN10gLSBBbmFsb2cgb3V0cHV0IDIgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQorICBbOF0gLSBBbmFsb2cgb3V0cHV0IDMgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQorICBbOV0gLSBBbmFsb2cgb3V0cHV0IDQgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQorICBbMTBdIC0gQW5hbG9nIG91dHB1dCA1IHJhbmdlIGNvbmZpZ3VyYXRpb24gKHNhbWUgb3B0aW9ucykKKyAgWzExXSAtIEFuYWxvZyBvdXRwdXQgNiByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFsxMl0gLSBBbmFsb2cgb3V0cHV0IDcgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxNV9hb18zMl9jdXJyZW50ID0geyAxLCB7CisJCQlSQU5HRV9tQSgwLCAzMikKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxNV9hb18yMF9jdXJyZW50ID0geyAxLCB7CisJCQlSQU5HRV9tQSg0LCAyMCkKKwl9Cit9OworCisjZGVmaW5lIERUMjgxNV9TSVpFIDIKKworI2RlZmluZSBEVDI4MTVfREFUQSAwCisjZGVmaW5lIERUMjgxNV9TVEFUVVMgMQorCitzdGF0aWMgaW50IGR0MjgxNV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkdDI4MTVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZHQyODE1ID0geworICAgICAgZHJpdmVyX25hbWU6ImR0MjgxNSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZHQyODE1X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkdDI4MTVfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTUpOworCitzdGF0aWMgdm9pZCBkdDI4MTVfZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgZHQyODE1X3ByaXZhdGUgeworCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlX3R5cGVfbGlzdFs4XTsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbOF07Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDI4MTVfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBkdDI4MTVfd2FpdF9mb3Jfc3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgc3RhdHVzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTVfU1RBVFVTKSA9PSBzdGF0dXMpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkdDI4MTVfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZHQyODE1X2FvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgbG8sIGhpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlsbyA9ICgoZGF0YVtpXSAmIDB4MGYpIDw8IDQpIHwgKGNoYW4gPDwgMSkgfCAweDAxOworCQloaSA9IChkYXRhW2ldICYgMHhmZjApID4+IDQ7CisKKwkJc3RhdHVzID0gZHQyODE1X3dhaXRfZm9yX3N0YXR1cyhkZXYsIDB4MDApOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXJ0X3ByaW50aworCQkJCSgiZHQyODE1OiBmYWlsZWQgdG8gd3JpdGUgbG93IGJ5dGUgb24gJWQgcmVhc29uICV4XG4iLAorCQkJCWNoYW4sIHN0YXR1cyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJb3V0YihsbywgZGV2LT5pb2Jhc2UgKyBEVDI4MTVfREFUQSk7CisKKwkJc3RhdHVzID0gZHQyODE1X3dhaXRfZm9yX3N0YXR1cyhkZXYsIDB4MTApOworCQlpZiAoc3RhdHVzICE9IDB4MTApIHsKKwkJCXJ0X3ByaW50aworCQkJCSgiZHQyODE1OiBmYWlsZWQgdG8gd3JpdGUgaGlnaCBieXRlIG9uICVkIHJlYXNvbiAleFxuIiwKKwkJCQljaGFuLCBzdGF0dXMpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCXJldHVybiBpOworfQorCisvKgorICBvcHRpb25zWzBdICAgQm9hcmQgYmFzZSBhZGRyZXNzCisgIG9wdGlvbnNbMV0gICBJUlEgKG5vdCBhcHBsaWNhYmxlKQorICBvcHRpb25zWzJdICAgVm9sdGFnZSB1bmlwb2xhci9iaXBvbGFyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgMCA9PSB1bmlwb2xhciA1ViAgKDBWIC0tICs1VikKKwkJIDEgPT0gYmlwb2xhciA1ViAgKC01ViAtLSArNVYpCisgIG9wdGlvbnNbM10gICBDdXJyZW50IG9mZnNldCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgIDAgPT0gZGlzYWJsZWQgICgwbUEgLS0gKzMybUFWKQorICAgICAgICAgICAgICAgICAxID09IGVuYWJsZWQgICgrNG1BIC0tICsyMG1BVikKKyAgb3B0aW9uc1s0XSAgIEZpcm13YXJlIHByb2dyYW0gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IHByb2dyYW0gMSAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgICAgICAgICAgICAgICAgIDEgPT0gcHJvZ3JhbSAyIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKyAgICAgICAgICAgICAgICAgMiA9PSBwcm9ncmFtIDMgKHNlZSBtYW51YWwgdGFibGUgNS00KQorICAgICAgICAgICAgICAgICAzID09IHByb2dyYW0gNCAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgIG9wdGlvbnNbNV0gICBBbmFsb2cgb3V0cHV0IDAgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IHZvbHRhZ2UKKyAgICAgICAgICAgICAgICAgMSA9PSBjdXJyZW50CisgIG9wdGlvbnNbNl0gICBBbmFsb2cgb3V0cHV0IDEgcmFuZ2UgY29uZmlndXJhdGlvbgorICAuLi4KKyAgb3B0aW9uc1sxMl0gICBBbmFsb2cgb3V0cHV0IDcgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IHZvbHRhZ2UKKyAgICAgICAgICAgICAgICAgMSA9PSBjdXJyZW50CisgKi8KKworc3RhdGljIGludCBkdDI4MTVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBpOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjdXJyZW50X3JhbmdlX3R5cGUsICp2b2x0YWdlX3JhbmdlX3R5cGU7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTU6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODE1X1NJWkUsICJkdDI4MTUiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gImR0MjgxNSI7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGR0MjgxNV9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXM7CisJLyogYW8gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX3dyaXRlID0gZHQyODE1X2FvX2luc247CisJcy0+aW5zbl9yZWFkID0gZHQyODE1X2FvX2luc25fcmVhZDsKKwlzLT5yYW5nZV90YWJsZV9saXN0ID0gZGV2cHJpdi0+cmFuZ2VfdHlwZV9saXN0OworCisJY3VycmVudF9yYW5nZV90eXBlID0gKGl0LT5vcHRpb25zWzNdKQorCQk/ICZyYW5nZV9kdDI4MTVfYW9fMjBfY3VycmVudCA6ICZyYW5nZV9kdDI4MTVfYW9fMzJfY3VycmVudDsKKwl2b2x0YWdlX3JhbmdlX3R5cGUgPSAoaXQtPm9wdGlvbnNbMl0pCisJCT8gJnJhbmdlX2JpcG9sYXI1IDogJnJhbmdlX3VuaXBvbGFyNTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWRldnByaXYtPnJhbmdlX3R5cGVfbGlzdFtpXSA9IChpdC0+b3B0aW9uc1s1ICsgaV0pCisJCQk/IGN1cnJlbnRfcmFuZ2VfdHlwZSA6IHZvbHRhZ2VfcmFuZ2VfdHlwZTsKKwl9CisKKwkvKiBJbml0IHRoZSAyODE1ICovCisJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERUMjgxNV9TVEFUVVMpOworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQkvKiBUaGlzIGlzIGluY3JlZGlibHkgc2xvdyAoYXBwcm94IDIwIG1zKSAqLworCQl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJCWNvbWVkaV91ZGVsYXkoMTAwMCk7CisJCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNV9TVEFUVVMpOworCQlpZiAoc3RhdHVzID09IDQpIHsKKwkJCXVuc2lnbmVkIGludCBwcm9ncmFtOworCQkJcHJvZ3JhbSA9IChpdC0+b3B0aW9uc1s0XSAmIDB4MykgPDwgMyB8IDB4NzsKKwkJCW91dGIocHJvZ3JhbSwgZGV2LT5pb2Jhc2UgKyBEVDI4MTVfREFUQSk7CisJCQlwcmludGsoIiwgcHJvZ3JhbTogMHgleCAoQHQ9JWQpXG4iLCBwcm9ncmFtLCBpKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHN0YXR1cyAhPSAweDAwKSB7CisJCQlwcmludGsoImR0MjgxNTogdW5leHBlY3RlZCBzdGF0dXMgMHgleCAoQHQ9JWQpXG4iLAorCQkJCXN0YXR1cywgaSk7CisJCQlpZiAoc3RhdHVzICYgMHg2MCkgeworCQkJCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTVfU1RBVFVTKTsKKwkJCX0KKwkJfQorCX0KKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkdDI4MTVfZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRFQyODE1X1NJWkUpOworfQorCitzdGF0aWMgaW50IGR0MjgxNV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZHQyODE1OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJZHQyODE1X2ZyZWVfcmVzb3VyY2VzKGRldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGMzOTZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNy5jCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2R0MjgxNy5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBEYXRhIFRyYW5zbGF0aW9uIERUMjgxNworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogZHQyODE3CitEZXNjcmlwdGlvbjogRGF0YSBUcmFuc2xhdGlvbiBEVDI4MTcKK0F1dGhvcjogZHMKK1N0YXR1czogY29tcGxldGUKK0RldmljZXM6IFtEYXRhIFRyYW5zbGF0aW9uXSBEVDI4MTcgKGR0MjgxNykKKworQSB2ZXJ5IHNpbXBsZSBkaWdpdGFsIEkvTyBjYXJkLiAgRm91ciBiYW5rcyBvZiA4IGxpbmVzLCBlYWNoIGJhbmsKK2lzIGNvbmZpZ3VyYWJsZSBmb3IgaW5wdXQgb3Igb3V0cHV0LiAgT25lIHdvbmRlcnMgd2h5IGl0IHRha2VzIGEKKzUwIHBhZ2UgbWFudWFsIHRvIGRlc2NyaWJlIHRoaXMgdGhpbmcuCisKK1RoZSBkcml2ZXIgKHdoaWNoLCBidHcsIGlzIG11Y2ggbGVzcyB0aGFuIDUwIHBhZ2VzKSBoYXMgMSBzdWJkZXZpY2UKK3dpdGggMzIgY2hhbm5lbHMsIGNvbmZpZ3VyYWJsZSBpbiBncm91cHMgb2YgOC4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGJhc2UgYWRkcmVzcworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgRFQyODE3X1NJWkUgNQorCisjZGVmaW5lIERUMjgxN19DUiAwCisjZGVmaW5lIERUMjgxN19EQVRBIDEKKworc3RhdGljIGludCBkdDI4MTdfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZHQyODE3X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2R0MjgxNyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkdDI4MTciLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmR0MjgxN19hdHRhY2gsCisgICAgICBkZXRhY2g6ZHQyODE3X2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZHQyODE3KTsKKworc3RhdGljIGludCBkdDI4MTdfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbWFzazsKKwlpbnQgY2hhbjsKKwlpbnQgb2UgPSAwOworCisJaWYgKGluc24tPm4gIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKGNoYW4gPCA4KSB7CisJCW1hc2sgPSAweGZmOworCX0gZWxzZSBpZiAoY2hhbiA8IDE2KSB7CisJCW1hc2sgPSAweGZmMDA7CisJfSBlbHNlIGlmIChjaGFuIDwgMjQpIHsKKwkJbWFzayA9IDB4ZmYwMDAwOworCX0gZWxzZQorCQltYXNrID0gMHhmZjAwMDAwMDsKKwlpZiAoZGF0YVswXSkKKwkJcy0+aW9fYml0cyB8PSBtYXNrOworCWVsc2UKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKworCWlmIChzLT5pb19iaXRzICYgMHgwMDAwMDBmZikKKwkJb2UgfD0gMHgxOworCWlmIChzLT5pb19iaXRzICYgMHgwMDAwZmYwMCkKKwkJb2UgfD0gMHgyOworCWlmIChzLT5pb19iaXRzICYgMHgwMGZmMDAwMCkKKwkJb2UgfD0gMHg0OworCWlmIChzLT5pb19iaXRzICYgMHhmZjAwMDAwMCkKKwkJb2UgfD0gMHg4OworCisJb3V0YihvZSwgZGV2LT5pb2Jhc2UgKyBEVDI4MTdfQ1IpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZHQyODE3X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFuZ2VkOworCisJLyogSXQncyBxdWVzdGlvbmFibGUgd2hldGhlciBpdCBpcyBtb3JlIGltcG9ydGFudCBpbgorCSAqIGEgZHJpdmVyIGxpa2UgdGhpcyB0byBiZSBkZXRlcm1pbmlzdGljIG9yIGZhc3QuCisJICogV2UgY2hvb3NlIGZhc3QuICovCisKKwlpZiAoZGF0YVswXSkgeworCQljaGFuZ2VkID0gcy0+c3RhdGU7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQljaGFuZ2VkIF49IHMtPnN0YXRlOworCQljaGFuZ2VkICY9IHMtPmlvX2JpdHM7CisJCWlmIChjaGFuZ2VkICYgMHgwMDAwMDBmZikKKwkJCW91dGIocy0+c3RhdGUgJiAweGZmLCBkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMCk7CisJCWlmIChjaGFuZ2VkICYgMHgwMDAwZmYwMCkKKwkJCW91dGIoKHMtPnN0YXRlID4+IDgpICYgMHhmZiwKKwkJCQlkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMSk7CisJCWlmIChjaGFuZ2VkICYgMHgwMGZmMDAwMCkKKwkJCW91dGIoKHMtPnN0YXRlID4+IDE2KSAmIDB4ZmYsCisJCQkJZGV2LT5pb2Jhc2UgKyBEVDI4MTdfREFUQSArIDIpOworCQlpZiAoY2hhbmdlZCAmIDB4ZmYwMDAwMDApCisJCQlvdXRiKChzLT5zdGF0ZSA+PiAyNCkgJiAweGZmLAorCQkJCWRldi0+aW9iYXNlICsgRFQyODE3X0RBVEEgKyAzKTsKKwl9CisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMCk7CisJZGF0YVsxXSB8PSAoaW5iKGRldi0+aW9iYXNlICsgRFQyODE3X0RBVEEgKyAxKSA8PCA4KTsKKwlkYXRhWzFdIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTdfREFUQSArIDIpIDw8IDE2KTsKKwlkYXRhWzFdIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTdfREFUQSArIDMpIDw8IDI0KTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGR0MjgxN19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IGR0MjgxNzogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEVDI4MTdfU0laRSwgImR0MjgxNyIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gImR0MjgxNyI7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKwlzLT5uX2NoYW4gPSAzMjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPm1heGRhdGEgPSAxOworCXMtPmluc25fYml0cyA9IGR0MjgxN19kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gZHQyODE3X2Rpb19pbnNuX2NvbmZpZzsKKworCXMtPnN0YXRlID0gMDsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgRFQyODE3X0NSKTsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgxN19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZHQyODE3OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRFQyODE3X1NJWkUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4MmMzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MnguYwpAQCAtMCwwICsxLDE0NzEgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9kdDI4MnguYworICAgSGFyZHdhcmUgZHJpdmVyIGZvciBEYXRhIFRyYW5zbGF0aW9uIERUMjgyMSBzZXJpZXMKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk3LTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogZHQyODJ4CitEZXNjcmlwdGlvbjogRGF0YSBUcmFuc2xhdGlvbiBEVDI4MjEgc2VyaWVzIChpbmNsdWRpbmcgRFQtRVopCitBdXRob3I6IGRzCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQyODIxIChkdDI4MjEpLAorICBEVDI4MjEtRi0xNlNFIChkdDI4MjEtZiksIERUMjgyMS1GLThESSAoZHQyODIxLWYpLAorICBEVDI4MjEtRy0xNlNFIChkdDI4MjEtZiksIERUMjgyMS1HLThESSAoZHQyODIxLWcpLAorICBEVDI4MjMgKGR0MjgyMyksCisgIERUMjgyNC1QR0ggKGR0MjgyNC1wZ2gpLCBEVDI4MjQtUEdMIChkdDI4MjQtcGdsKSwgRFQyODI1IChkdDI4MjUpLAorICBEVDI4MjcgKGR0MjgyNyksIERUMjgyOCAoZHQyODI4KSwgRFQyMS1FWiAoZHQyMS1leiksIERUMjMtRVogKGR0MjMtZXopLAorICBEVDI0LUVaIChkdDI0LWV6KSwgRFQyNC1FWi1QR0wgKGR0MjQtZXotcGdsKQorU3RhdHVzOiBjb21wbGV0ZQorVXBkYXRlZDogV2VkLCAyMiBBdWcgMjAwMSAxNzoxMTozNCAtMDcwMAorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEKKyAgWzJdIC0gRE1BIDEKKyAgWzNdIC0gRE1BIDIKKyAgWzRdIC0gQUkganVtcGVyZWQgZm9yIDA9c2luZ2xlIGVuZGVkLCAxPWRpZmZlcmVudGlhbAorICBbNV0gLSBBSSBqdW1wZXJlZCBmb3IgMD1zdHJhaWdodCBiaW5hcnksIDE9MidzIGNvbXBsZW1lbnQKKyAgWzZdIC0gQU8gMCBqdW1wZXJlZCBmb3IgMD1zdHJhaWdodCBiaW5hcnksIDE9MidzIGNvbXBsZW1lbnQKKyAgWzddIC0gQU8gMSBqdW1wZXJlZCBmb3IgMD1zdHJhaWdodCBiaW5hcnksIDE9MidzIGNvbXBsZW1lbnQKKyAgWzhdIC0gQUkganVtcGVyZWQgZm9yIDA9Wy0xMCwxMF1WLCAxPVswLDEwXSwgMj1bLTUsNV0sIDM9WzAsNV0KKyAgWzldIC0gQU8gMCBqdW1wZXJlZCBmb3IgMD1bLTEwLDEwXVYsIDE9WzAsMTBdLCAyPVstNSw1XSwgMz1bMCw1XSwKKyAgICAgICAgND1bLTIuNSwyLjVdCisgIFsxMF0tIEEwIDEganVtcGVyZWQgZm9yIDA9Wy0xMCwxMF1WLCAxPVswLDEwXSwgMj1bLTUsNV0sIDM9WzAsNV0sCisgICAgICAgIDQ9Wy0yLjUsMi41XQorCitOb3RlczoKKyAgLSBBTyBjb21tYW5kcyBtaWdodCBiZSBicm9rZW4uCisgIC0gSWYgeW91IHRyeSB0byBydW4gYSBjb21tYW5kIG9uIGJvdGggdGhlIEFJIGFuZCBBTyBzdWJkZXZpY2VzCisgICAgc2ltdWx0YW5lb3VzbHksIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4uICBUaGUgZHJpdmVyIG5lZWRzIHRvCisgICAgYmUgZml4ZWQgdG8gY2hlY2sgZm9yIHRoaXMgc2l0dWF0aW9uIGFuZCByZXR1cm4gYW4gZXJyb3IuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNkZWZpbmUgREVCVUcKKworI2RlZmluZSBEVDI4MjFfVElNRU9VVAkJMTAwCS8qIDUwMCB1cyAqLworI2RlZmluZSBEVDI4MjFfU0laRSAweDEwCisKKy8qCisgKiAgICBSZWdpc3RlcnMgaW4gdGhlIERUMjgyeAorICovCisKKyNkZWZpbmUgRFQyODIxX0FEQ1NSCTB4MDAJLyogQS9EIENvbnRyb2wvU3RhdHVzICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9DSEFOQ1NSCTB4MDIJLyogQ2hhbm5lbCBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBEVDI4MjFfQUREQVQJMHgwNAkvKiBBL0QgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBQ1NSCTB4MDYJLyogRC9BIENvbnRyb2wvU3RhdHVzICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9EQURBVAkweDA4CS8qIEQvQSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfRElPREFUCTB4MGEJLyogZGlnaXRhbCBkYXRhICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9TVVBDU1IJMHgwYwkvKiBTdXBlcnZpc29yIENvbnRyb2wvU3RhdHVzICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1RNUkNUUgkweDBlCS8qIFRpbWVyL0NvdW50ZXIgICAgICAgICAgKi8KKworLyoKKyAqICBBdCBwb3dlciB1cCwgc29tZSByZWdpc3RlcnMgYXJlIGluIGEgd2VsbC1rbm93biBzdGF0ZS4gIFRoZQorICogIG1hc2tzIGFuZCB2YWx1ZXMgYXJlIGFzIGZvbGxvd3M6CisgKi8KKworI2RlZmluZSBEVDI4MjFfQURDU1JfTUFTSyAweGZmZjAKKyNkZWZpbmUgRFQyODIxX0FEQ1NSX1ZBTCAweDdjMDAKKworI2RlZmluZSBEVDI4MjFfQ0hBTkNTUl9NQVNLIDB4ZjBmMAorI2RlZmluZSBEVDI4MjFfQ0hBTkNTUl9WQUwgMHg3MGYwCisKKyNkZWZpbmUgRFQyODIxX0RBQ1NSX01BU0sgMHg3YzkzCisjZGVmaW5lIERUMjgyMV9EQUNTUl9WQUwgMHg3YzkwCisKKyNkZWZpbmUgRFQyODIxX1NVUENTUl9NQVNLIDB4ZjhmZgorI2RlZmluZSBEVDI4MjFfU1VQQ1NSX1ZBTCAweDAwMDAKKworI2RlZmluZSBEVDI4MjFfVE1SQ1RSX01BU0sgMHhmZjAwCisjZGVmaW5lIERUMjgyMV9UTVJDVFJfVkFMIDB4ZjAwMAorCisvKgorICogICAgQml0IGZpZWxkcyBvZiBlYWNoIHJlZ2lzdGVyCisgKi8KKworLyogQURDU1IgKi8KKworI2RlZmluZSBEVDI4MjFfQURFUlIJMHg4MDAwCS8qIChSKSAgIDEgZm9yIEEvRCBlcnJvciAgKi8KKyNkZWZpbmUgRFQyODIxX0FEQ0xLCTB4MDIwMAkvKiAoUi9XKSBBL0QgY2xvY2sgZW5hYmxlICovCisJCS8qICAgICAgMHg3YzAwICAgICAgICAgICByZWFkIGFzIDEncyAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9NVVhCVVNZCTB4MDEwMAkvKiAoUikgICBtdWx0aXBsZXhlciBidXN5ICovCisjZGVmaW5lIERUMjgyMV9BRERPTkUJMHgwMDgwCS8qIChSKSAgIEEvRCBkb25lICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0lBRERPTkUJMHgwMDQwCS8qIChSL1cpIGludGVycnVwdCBvbiBBL0QgZG9uZSAgICAqLworCQkvKiAgICAgIDB4MDAzMCAgICAgICAgICAgZ2FpbiBzZWxlY3QgICAgICAgICAgICAqLworCQkvKiAgICAgIDB4MDAwZiAgICAgICAgICAgY2hhbm5lbCBzZWxlY3QgICAgICAgICAqLworCisvKiBDSEFOQ1NSICovCisKKyNkZWZpbmUgRFQyODIxX0xMRQkweDgwMDAJLyogKFIvVykgTG9hZCBMaXN0IEVuYWJsZSAqLworCQkvKiAgICAgIDB4NzAwMCAgICAgICAgICAgcmVhZCBhcyAxJ3MgICAgICAgICAgICAqLworCQkvKiAgICAgIDB4MGYwMCAgICAgKFIpICAgcHJlc2VudCBhZGRyZXNzICAgICAgICAqLworCQkvKiAgICAgIDB4MDBmMCAgICAgICAgICAgcmVhZCBhcyAxJ3MgICAgICAgICAgICAqLworCQkvKiAgICAgIDB4MDAwZiAgICAgKFIpICAgbnVtYmVyIG9mIGVudHJpZXMgLSAxICAqLworCisvKiBEQUNTUiAqLworCisjZGVmaW5lIERUMjgyMV9EQUVSUgkweDgwMDAJLyogKFIpICAgRC9BIGVycm9yICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9ZU0VMCTB4MDIwMAkvKiAoUi9XKSBEQUMgMSBzZWxlY3QgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1NTRUwJMHgwMTAwCS8qIChSL1cpIHNpbmdsZSBjaGFubmVsIHNlbGVjdCAgICAqLworI2RlZmluZSBEVDI4MjFfREFDUkRZCTB4MDA4MAkvKiAoUikgICBEQUMgcmVhZHkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0lEQVJEWQkweDAwNDAJLyogKFIvVykgaW50ZXJydXB0IG9uIERBQyByZWFkeSAgICovCisjZGVmaW5lIERUMjgyMV9EQUNMSwkweDAwMjAJLyogKFIvVykgRC9BIGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBEVDI4MjFfSEJPRQkweDAwMDIJLyogKFIvVykgRElPIGhpZ2ggYnl0ZSBvdXRwdXQgZW5hYmxlICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0xCT0UJMHgwMDAxCS8qIChSL1cpIERJTyBsb3cgYnl0ZSBvdXRwdXQgZW5hYmxlICAgICAgICovCisKKy8qIFNVUENTUiAqLworCisjZGVmaW5lIERUMjgyMV9ETUFECTB4ODAwMAkvKiAoUikgICBETUEgZG9uZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0VSUklOVEVOCTB4NDAwMAkvKiAoUi9XKSBpbnRlcnJ1cHQgb24gZXJyb3IgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfQ0xSRE1BRE5FIDB4MjAwMAkvKiAoVykgICBjbGVhciBETUEgZG9uZSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfRERNQQkweDEwMDAJLyogKFIvVykgZHVhbCBETUEgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9EUzEJMHgwODAwCS8qIChSL1cpIERNQSBzZWxlY3QgMSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9EUzAJMHgwNDAwCS8qIChSL1cpIERNQSBzZWxlY3QgMCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9CVUZGQgkweDAyMDAJLyogKFIvVykgYnVmZmVyIEIgc2VsZWN0ZWQgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1NDRE4JMHgwMTAwCS8qIChSKSAgIHNjYW4gZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9EQUNPTgkweDAwODAJLyogKFcpICAgREFDIHNpbmdsZSBjb252ZXJzaW9uICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0FEQ0lOSVQJMHgwMDQwCS8qIChXKSAgIEEvRCBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9EQUNJTklUCTB4MDAyMAkvKiAoVykgICBEL0EgaW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfUFJMRAkweDAwMTAJLyogKFcpICAgcHJlbG9hZCBtdWx0aXBsZXhlciAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1NUUklHCTB4MDAwOAkvKiAoVykgICBzb2Z0d2FyZSB0cmlnZ2VyICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1hUUklHCTB4MDAwNAkvKiAoUi9XKSBleHRlcm5hbCB0cmlnZ2VyIGVuYWJsZSAgKi8KKyNkZWZpbmUgRFQyODIxX1hDTEsJMHgwMDAyCS8qIChSL1cpIGV4dGVybmFsIGNsb2NrIGVuYWJsZSAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9CRElOSVQJMHgwMDAxCS8qIChXKSAgIGluaXRpYWxpemUgYm9hcmQgICAgICAgICAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODJ4X2FpX2xvX2JpcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODJ4X2FpX2xvX3VuaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDIuNSksCisJCQlSQU5HRSgwLCAxLjI1KQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODJ4X2FpXzVfYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKC0wLjYyNSwgMC42MjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODJ4X2FpXzVfdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKDAsIDEuMjUpLAorCQkJUkFOR0UoMCwgMC42MjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODJ4X2FpX2hpX2JpcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTEsIDEpLAorCQkJUkFOR0UoLTAuMSwgMC4xKSwKKwkJCVJBTkdFKC0wLjAyLCAwLjAyKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODJ4X2FpX2hpX3VuaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCAxKSwKKwkJCVJBTkdFKDAsIDAuMSksCisJCQlSQU5HRSgwLCAwLjAyKQorCX0KK307CisKK3N0cnVjdCBkdDI4MnhfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFkYml0czsKKwlpbnQgYWRjaGFuX3NlOworCWludCBhZGNoYW5fZGk7CisJaW50IGFpX3NwZWVkOworCWludCBpc3BnbDsKKwlpbnQgZGFjaGFuOworCWludCBkYWJpdHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGR0MjgyeF9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisgICAgICB7bmFtZToiZHQyODIxIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjEtZiIsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZGNoYW5fc2U6MTYsCisJICAgICAgYWRjaGFuX2RpOjgsCisJICAgICAgYWlfc3BlZWQ6NjUwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjEtZyIsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZGNoYW5fc2U6MTYsCisJICAgICAgYWRjaGFuX2RpOjgsCisJICAgICAgYWlfc3BlZWQ6NDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjMiLAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWRjaGFuX3NlOjAsCisJICAgICAgYWRjaGFuX2RpOjQsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgaXNwZ2w6CTAsCisJICAgICAgZGFjaGFuOgkyLAorCSAgICAgIGRhYml0czoJMTYsCisJCX0sCisgICAgICB7bmFtZToiZHQyODI0LXBnaCIsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZGNoYW5fc2U6MTYsCisJICAgICAgYWRjaGFuX2RpOjgsCisJICAgICAgYWlfc3BlZWQ6MjAwMDAsCisJICAgICAgaXNwZ2w6CTAsCisJICAgICAgZGFjaGFuOgkwLAorCSAgICAgIGRhYml0czoJMCwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjQtcGdsIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBpc3BnbDoJMSwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyNSIsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZGNoYW5fc2U6MTYsCisJICAgICAgYWRjaGFuX2RpOjgsCisJICAgICAgYWlfc3BlZWQ6MjAwMDAsCisJICAgICAgaXNwZ2w6CTEsCisJICAgICAgZGFjaGFuOgkyLAorCSAgICAgIGRhYml0czoJMTIsCisJCX0sCisgICAgICB7bmFtZToiZHQyODI3IiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFkY2hhbl9zZTowLAorCSAgICAgIGFkY2hhbl9kaTo0LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyOCIsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZGNoYW5fc2U6NCwKKwkgICAgICBhZGNoYW5fZGk6MCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjkiLAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWRjaGFuX3NlOjgsCisJICAgICAgYWRjaGFuX2RpOjAsCisJICAgICAgYWlfc3BlZWQ6MzMyNTAsCisJICAgICAgaXNwZ2w6CTAsCisJICAgICAgZGFjaGFuOgkyLAorCSAgICAgIGRhYml0czoJMTYsCisJCX0sCisgICAgICB7bmFtZToiZHQyMS1leiIsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZGNoYW5fc2U6MTYsCisJICAgICAgYWRjaGFuX2RpOjgsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgaXNwZ2w6CTAsCisJICAgICAgZGFjaGFuOgkyLAorCSAgICAgIGRhYml0czoJMTIsCisJCX0sCisgICAgICB7bmFtZToiZHQyMy1leiIsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZGNoYW5fc2U6MTYsCisJICAgICAgYWRjaGFuX2RpOjgsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgaXNwZ2w6CTAsCisJICAgICAgZGFjaGFuOgkwLAorCSAgICAgIGRhYml0czoJMCwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI0LWV6IiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorICAgICAge25hbWU6ImR0MjQtZXotcGdsIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMSwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgZHQyODJ4X2JvYXJkKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IGR0MjgyeF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgZHQyODJ4X3ByaXZhdGUgeworCWludCBhZF8yc2NvbXA7CQkvKiB3ZSBoYXZlIDIncyBjb21wIGp1bXBlciBzZXQgICovCisJaW50IGRhMF8yc2NvbXA7CQkvKiBzYW1lLCBmb3IgREFDMCAgICAgICAgICAgICAgICovCisJaW50IGRhMV8yc2NvbXA7CQkvKiBzYW1lLCBmb3IgREFDMSAgICAgICAgICAgICAgICovCisKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqZGFyYW5nZWxpc3RbMl07CisKKwlzaG9ydCBhb1syXTsKKworCXZvbGF0aWxlIGludCBkYWNzcjsJLyogc29mdHdhcmUgY29waWVzIG9mIHJlZ2lzdGVycyAqLworCXZvbGF0aWxlIGludCBhZGNzcjsKKwl2b2xhdGlsZSBpbnQgc3VwY3NyOworCisJdm9sYXRpbGUgaW50IG50cmlnOworCXZvbGF0aWxlIGludCBucmVhZDsKKworCXN0cnVjdCB7CisJCWludCBjaGFuOworCQlzaG9ydCAqYnVmOwkvKiBETUEgYnVmZmVyICovCisJCXZvbGF0aWxlIGludCBzaXplOwkvKiBzaXplIG9mIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwl9IGRtYVsyXTsKKwlpbnQgZG1hX21heHNpemU7CS8qIG1heCBzaXplIG9mIERNQSB0cmFuc2ZlciAoaW4gYnl0ZXMpICovCisJaW50IHVzZWRtYTsJCS8qIGRyaXZlciB1c2VzIERNQSAgICAgICAgICAgICAgKi8KKwl2b2xhdGlsZSBpbnQgY3VycmVudF9kbWFfaW5kZXg7CisJaW50IGRtYV9kaXI7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZHQyODJ4X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIGJvYXJkdHlwZSAoKihjb25zdCBzdHJ1Y3QgZHQyODJ4X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qCisgKiAgICBTb21lIHVzZWxlc3MgYWJzdHJhY3Rpb25zCisgKi8KKyNkZWZpbmUgY2hhbl90b19EQUMoYSkJKChhKSYxKQorI2RlZmluZSB1cGRhdGVfZGFjc3IoYSkJb3V0dyhkZXZwcml2LT5kYWNzcnwoYSksZGV2LT5pb2Jhc2UrRFQyODIxX0RBQ1NSKQorI2RlZmluZSB1cGRhdGVfYWRjc3IoYSkJb3V0dyhkZXZwcml2LT5hZGNzcnwoYSksZGV2LT5pb2Jhc2UrRFQyODIxX0FEQ1NSKQorI2RlZmluZSBtdXhfYnVzeSgpIChpbncoZGV2LT5pb2Jhc2UrRFQyODIxX0FEQ1NSKSZEVDI4MjFfTVVYQlVTWSkKKyNkZWZpbmUgYWRfZG9uZSgpIChpbncoZGV2LT5pb2Jhc2UrRFQyODIxX0FEQ1NSKSZEVDI4MjFfQURET05FKQorI2RlZmluZSB1cGRhdGVfc3VwY3NyKGEpCW91dHcoZGV2cHJpdi0+c3VwY3NyfChhKSxkZXYtPmlvYmFzZStEVDI4MjFfU1VQQ1NSKQorCisvKgorICogICAgZGFuZ2VyISBtYWNybyBhYnVzZS4uLiBhIGlzIHRoZSBleHByZXNzaW9uIHRvIHdhaXQgb24sIGFuZCBiIGlzCisgKiAgICAgIHRoZSBzdGF0ZW1lbnQocykgdG8gZXhlY3V0ZSBpZiBpdCBkb2Vzbid0IGhhcHBlbi4KKyAqLworI2RlZmluZSB3YWl0X2ZvcihhLGIpCSAJCQkJXAorCWRvewkJCQkJCVwKKwkJaW50IF9pOwkJCQkJXAorCQlmb3IoX2k9MDtfaTxEVDI4MjFfVElNRU9VVDtfaSsrKXsJXAorCQkJaWYoYSl7X2k9MDticmVhazt9CQlcCisJCQljb21lZGlfdWRlbGF5KDUpOwkJCVwKKwkJfQkJCQkJXAorCQlpZihfaSl7Yn0JCQkJXAorCX13aGlsZSgwKQorCitzdGF0aWMgaW50IGR0MjgyeF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkdDI4MnhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZHQyODJ4ID0geworICAgICAgZHJpdmVyX25hbWU6ImR0MjgyeCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZHQyODJ4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkdDI4MnhfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGR0MjgyeF9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgyeCk7CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgcHJlcF9haV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuLCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IHByZXBfYW9fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbiwgaW50IHNpemUpOworc3RhdGljIGludCBkdDI4MnhfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkdDI4MnhfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkdDI4MnhfbnNfdG9fdGltZXIoaW50ICpuYW5vc2VjLCBpbnQgcm91bmRfbW9kZSk7CitzdGF0aWMgdm9pZCBkdDI4MnhfZGlzYWJsZV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgaW50IGR0MjgyeF9ncmFiX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGRtYTEsIGludCBkbWEyKTsKKworc3RhdGljIHZvaWQgZHQyODJ4X211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzaG9ydCAqIGJ1ZiwKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIHNob3J0IG1hc2sgPSAoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDE7CisJdW5zaWduZWQgc2hvcnQgc2lnbiA9IDEgPDwgKGJvYXJkdHlwZS5hZGJpdHMgLSAxKTsKKwlpbnQgbjsKKworCWlmIChkZXZwcml2LT5hZF8yc2NvbXApIHsKKwkJc2lnbiA9IDEgPDwgKGJvYXJkdHlwZS5hZGJpdHMgLSAxKTsKKwl9IGVsc2UgeworCQlzaWduID0gMDsKKwl9CisKKwlpZiAobmJ5dGVzICUgMikKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgb2RkIG51bWJlciBvZiBieXRlcyBmcm9tIGRtYSB4ZmVyIik7CisJbiA9IG5ieXRlcyAvIDI7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlidWZbaV0gPSAoYnVmW2ldICYgbWFzaykgXiBzaWduOworCX0KK30KKworc3RhdGljIHZvaWQgZHQyODJ4X2FvX2RtYV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdm9pZCAqcHRyOworCWludCBzaXplOworCWludCBpOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0NMUkRNQURORSk7CisKKwlpZiAoIXMtPmFzeW5jLT5wcmVhbGxvY19idWYpIHsKKwkJcHJpbnRrKCJhc3luYy0+ZGF0YSBkaXNhcHBlYXJlZC4gIGRhbmchXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWkgPSBkZXZwcml2LT5jdXJyZW50X2RtYV9pbmRleDsKKwlwdHIgPSBkZXZwcml2LT5kbWFbaV0uYnVmOworCisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hW2ldLmNoYW4pOworCisJZGV2cHJpdi0+Y3VycmVudF9kbWFfaW5kZXggPSAxIC0gaTsKKworCXNpemUgPSBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzLCBwdHIsIGRldnByaXYtPmRtYV9tYXhzaXplKTsKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCXJ0X3ByaW50aygiZHQyODJ4OiBBTyB1bmRlcnJ1blxuIik7CisJCWR0MjgyeF9hb19jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJCXJldHVybjsKKwl9CisJcHJlcF9hb19kbWEoZGV2LCBpLCBzaXplKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR0MjgyeF9haV9kbWFfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXZvaWQgKnB0cjsKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzOworCisJdXBkYXRlX3N1cGNzcihEVDI4MjFfQ0xSRE1BRE5FKTsKKworCWlmICghcy0+YXN5bmMtPnByZWFsbG9jX2J1ZikgeworCQlwcmludGsoImFzeW5jLT5kYXRhIGRpc2FwcGVhcmVkLiAgZGFuZyFcbiIpOworCQlyZXR1cm47CisJfQorCisJaSA9IGRldnByaXYtPmN1cnJlbnRfZG1hX2luZGV4OworCXB0ciA9IGRldnByaXYtPmRtYVtpXS5idWY7CisJc2l6ZSA9IGRldnByaXYtPmRtYVtpXS5zaXplOworCisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hW2ldLmNoYW4pOworCisJZGV2cHJpdi0+Y3VycmVudF9kbWFfaW5kZXggPSAxIC0gaTsKKworCWR0MjgyeF9tdW5nZShkZXYsIHB0ciwgc2l6ZSk7CisJcmV0ID0gY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBwdHIsIHNpemUpOworCWlmIChyZXQgIT0gc2l6ZSkgeworCQlkdDI4MnhfYWlfY2FuY2VsKGRldiwgcyk7CisJCXJldHVybjsKKwl9CisJZGV2cHJpdi0+bnJlYWQgLT0gc2l6ZSAvIDI7CisKKwlpZiAoZGV2cHJpdi0+bnJlYWQgPCAwKSB7CisJCXByaW50aygiZHQyODJ4OiBvZmYgYnkgb25lXG4iKTsKKwkJZGV2cHJpdi0+bnJlYWQgPSAwOworCX0KKwlpZiAoIWRldnByaXYtPm5yZWFkKSB7CisJCWR0MjgyeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQlyZXR1cm47CisJfQorI2lmIDAKKwkvKiBjbGVhciB0aGUgZHVhbCBkbWEgZmxhZywgbWFraW5nIHRoaXMgdGhlIGxhc3QgZG1hIHNlZ21lbnQgKi8KKwkvKiBYWFggcHJvYmFibHkgd3JvbmcgKi8KKwlpZiAoIWRldnByaXYtPm50cmlnKSB7CisJCWRldnByaXYtPnN1cGNzciAmPSB+KERUMjgyMV9ERE1BKTsKKwkJdXBkYXRlX3N1cGNzcigwKTsKKwl9CisjZW5kaWYKKwkvKiByZXN0YXJ0IHRoZSBjaGFubmVsICovCisJcHJlcF9haV9kbWEoZGV2LCBpLCAwKTsKK30KKworc3RhdGljIGludCBwcmVwX2FpX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGRtYV9pbmRleCwgaW50IG4pCit7CisJaW50IGRtYV9jaGFuOworCXVuc2lnbmVkIGxvbmcgZG1hX3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFkZXZwcml2LT5udHJpZykKKwkJcmV0dXJuIDA7CisKKwlpZiAobiA9PSAwKQorCQluID0gZGV2cHJpdi0+ZG1hX21heHNpemU7CisJaWYgKG4gPiBkZXZwcml2LT5udHJpZyAqIDIpCisJCW4gPSBkZXZwcml2LT5udHJpZyAqIDI7CisJZGV2cHJpdi0+bnRyaWcgLT0gbiAvIDI7CisKKwlkZXZwcml2LT5kbWFbZG1hX2luZGV4XS5zaXplID0gbjsKKwlkbWFfY2hhbiA9IGRldnByaXYtPmRtYVtkbWFfaW5kZXhdLmNoYW47CisJZG1hX3B0ciA9IHZpcnRfdG9fYnVzKGRldnByaXYtPmRtYVtkbWFfaW5kZXhdLmJ1Zik7CisKKwlzZXRfZG1hX21vZGUoZG1hX2NoYW4sIERNQV9NT0RFX1JFQUQpOworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwljbGVhcl9kbWFfZmYoZG1hX2NoYW4pOworCXNldF9kbWFfYWRkcihkbWFfY2hhbiwgZG1hX3B0cik7CisJc2V0X2RtYV9jb3VudChkbWFfY2hhbiwgbik7CisJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisKKwllbmFibGVfZG1hKGRtYV9jaGFuKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHByZXBfYW9fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZG1hX2luZGV4LCBpbnQgbikKK3sKKwlpbnQgZG1hX2NoYW47CisJdW5zaWduZWQgbG9uZyBkbWFfcHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZwcml2LT5kbWFbZG1hX2luZGV4XS5zaXplID0gbjsKKwlkbWFfY2hhbiA9IGRldnByaXYtPmRtYVtkbWFfaW5kZXhdLmNoYW47CisJZG1hX3B0ciA9IHZpcnRfdG9fYnVzKGRldnByaXYtPmRtYVtkbWFfaW5kZXhdLmJ1Zik7CisKKwlzZXRfZG1hX21vZGUoZG1hX2NoYW4sIERNQV9NT0RFX1dSSVRFKTsKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJY2xlYXJfZG1hX2ZmKGRtYV9jaGFuKTsKKwlzZXRfZG1hX2FkZHIoZG1hX2NoYW4sIGRtYV9wdHIpOworCXNldF9kbWFfY291bnQoZG1hX2NoYW4sIG4pOworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJZW5hYmxlX2RtYShkbWFfY2hhbik7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGlycXJldHVybl90IGR0MjgyeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc19hbzsKKwl1bnNpZ25lZCBpbnQgc3VwY3NyLCBhZGNzciwgZGFjc3I7CisJaW50IGhhbmRsZWQgPSAwOworCisJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXNfYW8gPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWFkY3NyID0gaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0FEQ1NSKTsKKwlkYWNzciA9IGludyhkZXYtPmlvYmFzZSArIERUMjgyMV9EQUNTUik7CisJc3VwY3NyID0gaW53KGRldi0+aW9iYXNlICsgRFQyODIxX1NVUENTUik7CisJaWYgKHN1cGNzciAmIERUMjgyMV9ETUFEKSB7CisJCWlmIChkZXZwcml2LT5kbWFfZGlyID09IERNQV9NT0RFX1JFQUQpCisJCQlkdDI4MnhfYWlfZG1hX2ludGVycnVwdChkZXYpOworCQllbHNlCisJCQlkdDI4MnhfYW9fZG1hX2ludGVycnVwdChkZXYpOworCQloYW5kbGVkID0gMTsKKwl9CisJaWYgKGFkY3NyICYgRFQyODIxX0FERVJSKSB7CisJCWlmIChkZXZwcml2LT5ucmVhZCAhPSAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIGVycm9yIik7CisJCQlkdDI4MnhfYWlfY2FuY2VsKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJfQorCQloYW5kbGVkID0gMTsKKwl9CisJaWYgKGRhY3NyICYgRFQyODIxX0RBRVJSKSB7CisjaWYgMAorCQlzdGF0aWMgaW50IHdhcm4gPSA1OworCQlpZiAoLS13YXJuIDw9IDApIHsKKwkJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJCXByaW50aygiZGlzYWJsaW5nIGlycVxuIik7CisJCX0KKyNlbmRpZgorCQljb21lZGlfZXJyb3IoZGV2LCAiRC9BIGVycm9yIik7CisJCWR0MjgyeF9hb19jYW5jZWwoZGV2LCBzX2FvKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7CisJCWhhbmRsZWQgPSAxOworCX0KKyNpZiAwCisJaWYgKGFkY3NyICYgRFQyODIxX0FERE9ORSkgeworCQlpbnQgcmV0OworCQlzaG9ydCBkYXRhOworCisJCWRhdGEgPSAoc2hvcnQpIGludyhkZXYtPmlvYmFzZSArIERUMjgyMV9BRERBVCk7CisJCWRhdGEgJj0gKDEgPDwgYm9hcmR0eXBlLmFkYml0cykgLSAxOworCQlpZiAoZGV2cHJpdi0+YWRfMnNjb21wKSB7CisJCQlkYXRhIF49IDEgPDwgKGJvYXJkdHlwZS5hZGJpdHMgLSAxKTsKKwkJfQorCQlyZXQgPSBjb21lZGlfYnVmX3B1dChzLT5hc3luYywgZGF0YSk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJCX0KKworCQlkZXZwcml2LT5ucmVhZC0tOworCQlpZiAoIWRldnByaXYtPm5yZWFkKSB7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCX0gZWxzZSB7CisJCQlpZiAoc3VwY3NyICYgRFQyODIxX1NDRE4pCisJCQkJdXBkYXRlX3N1cGNzcihEVDI4MjFfU1RSSUcpOworCQl9CisJCWhhbmRsZWQgPSAxOworCX0KKyNlbmRpZgorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCS8qIHByaW50aygiYWRjc3I9MHglMDJ4IGRhY3NyLTB4JTAyeCBzdXBjc3I9MHglMDJ4XG4iLCBhZGNzciwgZGFjc3IsIHN1cGNzcik7ICovCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGR0MjgyeF9sb2FkX2NoYW5nYWluKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbiwKKwl1bnNpZ25lZCBpbnQgKmNoYW5saXN0KQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBjaGFuLCByYW5nZTsKKworCW91dHcoRFQyODIxX0xMRSB8IChuIC0gMSksIGRldi0+aW9iYXNlICsgRFQyODIxX0NIQU5DU1IpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJY2hhbiA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGNoYW5saXN0W2ldKTsKKwkJdXBkYXRlX2FkY3NyKChyYW5nZSA8PCA0KSB8IChjaGFuKSk7CisJfQorCW91dHcobiAtIDEsIGRldi0+aW9iYXNlICsgRFQyODIxX0NIQU5DU1IpOworfQorCisvKgorICogICAgUGVyZm9ybXMgYSBzaW5nbGUgQS9EIGNvbnZlcnNpb24uCisgKiAgICAgIC0gUHV0IGNoYW5uZWwvZ2FpbiBpbnRvIGNoYW5uZWwtZ2FpbiBsaXN0CisgKiAgICAgIC0gcHJlbG9hZCBtdWx0aXBsZXhlcgorICogICAgICAtIHRyaWdnZXIgY29udmVyc2lvbiBhbmQgd2FpdCBmb3IgaXQgdG8gZmluaXNoCisgKi8KK3N0YXRpYyBpbnQgZHQyODJ4X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisKKwkvKiBYWFggc2hvdWxkIHdlIHJlYWxseSBiZSBlbmFibGluZyB0aGUgYWQgY2xvY2sgaGVyZT8gKi8KKwlkZXZwcml2LT5hZGNzciA9IERUMjgyMV9BRENMSzsKKwl1cGRhdGVfYWRjc3IoMCk7CisKKwlkdDI4MnhfbG9hZF9jaGFuZ2FpbihkZXYsIDEsICZpbnNuLT5jaGFuc3BlYyk7CisKKwl1cGRhdGVfc3VwY3NyKERUMjgyMV9QUkxEKTsKKwl3YWl0X2ZvcighbXV4X2J1c3koKSwgY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXRcbiIpOworCQlyZXR1cm4gLUVUSU1FOworCQkpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQl1cGRhdGVfc3VwY3NyKERUMjgyMV9TVFJJRyk7CisJCXdhaXRfZm9yKGFkX2RvbmUoKSwgY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJCSk7CisKKwkJZGF0YVtpXSA9CisJCQlpbncoZGV2LT5pb2Jhc2UgKworCQkJRFQyODIxX0FEREFUKSAmICgoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDEpOworCQlpZiAoZGV2cHJpdi0+YWRfMnNjb21wKQorCQkJZGF0YVtpXSBePSAoMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MnhfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IDQwMDApIHsKKwkJLyogWFhYIGJvYXJkIGRlcGVuZGVudCAqLworCQljbWQtPmNvbnZlcnRfYXJnID0gNDAwMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBTTE9XRVNUX1RJTUVSCSgyNTAqKDE8PDE1KSoyNTUpCisJaWYgKGNtZC0+Y29udmVydF9hcmcgPiBTTE9XRVNUX1RJTUVSKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSBTTE9XRVNUX1RJTUVSOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9zcGVlZCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfc3BlZWQ7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJLyogYW55IGNvdW50IGlzIGFsbG93ZWQgKi8KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwlkdDI4MnhfbnNfdG9fdGltZXIoJmNtZC0+Y29udmVydF9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IHRpbWVyOworCisJaWYgKGRldnByaXYtPnVzZWRtYSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiZHJpdmVyIHJlcXVpcmVzIDIgZG1hIGNoYW5uZWxzIHRvIGV4ZWN1dGUgY29tbWFuZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkdDI4MnhfZGlzYWJsZV9kbWEoZGV2KTsKKworCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfc3BlZWQpCisJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9zcGVlZDsKKwl0aW1lciA9IGR0MjgyeF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywgVFJJR19ST1VORF9ORUFSRVNUKTsKKwlvdXR3KHRpbWVyLCBkZXYtPmlvYmFzZSArIERUMjgyMV9UTVJDVFIpOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJLyogaW50ZXJuYWwgdHJpZ2dlciAqLworCQlkZXZwcml2LT5zdXBjc3IgPSBEVDI4MjFfRVJSSU5URU4gfCBEVDI4MjFfRFMwOworCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJZGV2cHJpdi0+c3VwY3NyID0gRFQyODIxX0VSUklOVEVOIHwgRFQyODIxX0RTMCB8IERUMjgyMV9EUzE7CisJfQorCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0NMUkRNQURORSB8IERUMjgyMV9CVUZGQiB8IERUMjgyMV9BRENJTklUKTsKKworCWRldnByaXYtPm50cmlnID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCWRldnByaXYtPm5yZWFkID0gZGV2cHJpdi0+bnRyaWc7CisKKwlkZXZwcml2LT5kbWFfZGlyID0gRE1BX01PREVfUkVBRDsKKwlkZXZwcml2LT5jdXJyZW50X2RtYV9pbmRleCA9IDA7CisJcHJlcF9haV9kbWEoZGV2LCAwLCAwKTsKKwlpZiAoZGV2cHJpdi0+bnRyaWcpIHsKKwkJcHJlcF9haV9kbWEoZGV2LCAxLCAwKTsKKwkJZGV2cHJpdi0+c3VwY3NyIHw9IERUMjgyMV9ERE1BOworCQl1cGRhdGVfc3VwY3NyKDApOworCX0KKworCWRldnByaXYtPmFkY3NyID0gMDsKKworCWR0MjgyeF9sb2FkX2NoYW5nYWluKGRldiwgY21kLT5jaGFubGlzdF9sZW4sIGNtZC0+Y2hhbmxpc3QpOworCisJZGV2cHJpdi0+YWRjc3IgPSBEVDI4MjFfQURDTEsgfCBEVDI4MjFfSUFERE9ORTsKKwl1cGRhdGVfYWRjc3IoMCk7CisKKwl1cGRhdGVfc3VwY3NyKERUMjgyMV9QUkxEKTsKKwl3YWl0X2ZvcighbXV4X2J1c3koKSwgY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXRcbiIpOworCQlyZXR1cm4gLUVUSU1FOworCQkpOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJdXBkYXRlX3N1cGNzcihEVDI4MjFfU1RSSUcpOworCX0gZWxzZSB7CisJCWRldnByaXYtPnN1cGNzciB8PSBEVDI4MjFfWFRSSUc7CisJCXVwZGF0ZV9zdXBjc3IoMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR0MjgyeF9kaXNhYmxlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2cHJpdi0+dXNlZG1hKSB7CisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYVswXS5jaGFuKTsKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hWzFdLmNoYW4pOworCX0KK30KKworc3RhdGljIGludCBkdDI4MnhfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJZHQyODJ4X2Rpc2FibGVfZG1hKGRldik7CisKKwlkZXZwcml2LT5hZGNzciA9IDA7CisJdXBkYXRlX2FkY3NyKDApOworCisJZGV2cHJpdi0+c3VwY3NyID0gMDsKKwl1cGRhdGVfc3VwY3NyKERUMjgyMV9BRENJTklUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKQoreworCWludCBwcmVzY2FsZSwgYmFzZSwgZGl2aWRlcjsKKworCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDE2OyBwcmVzY2FsZSsrKSB7CisJCWlmIChwcmVzY2FsZSA9PSAxKQorCQkJY29udGludWU7CisJCWJhc2UgPSAyNTAgKiAoMSA8PCBwcmVzY2FsZSk7CisJCXN3aXRjaCAocm91bmRfbW9kZSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJZGVmYXVsdDoKKwkJCWRpdmlkZXIgPSAoKm5hbm9zZWMgKyBiYXNlIC8gMikgLyBiYXNlOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJZGl2aWRlciA9ICgqbmFub3NlYykgLyBiYXNlOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCWRpdmlkZXIgPSAoKm5hbm9zZWMgKyBiYXNlIC0gMSkgLyBiYXNlOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGRpdmlkZXIgPCAyNTYpIHsKKwkJCSpuYW5vc2VjID0gZGl2aWRlciAqIGJhc2U7CisJCQlyZXR1cm4gKHByZXNjYWxlIDw8IDgpIHwgKDI1NSAtIGRpdmlkZXIpOworCQl9CisJfQorCWJhc2UgPSAyNTAgKiAoMSA8PCAxNSk7CisJZGl2aWRlciA9IDI1NTsKKwkqbmFub3NlYyA9IGRpdmlkZXIgKiBiYXNlOworCXJldHVybiAoMTUgPDwgOCkgfCAoMjU1IC0gZGl2aWRlcik7Cit9CisKKy8qCisgKiAgICBBbmFsb2cgb3V0cHV0IHJvdXRpbmUuICBTZWxlY3RzIHNpbmdsZSBjaGFubmVsIGNvbnZlcnNpb24sCisgKiAgICAgIHNlbGVjdHMgY29ycmVjdCBjaGFubmVsLCBjb252ZXJ0cyBmcm9tIDIncyBjb21wbGltZW50IHRvCisgKiAgICAgIG9mZnNldCBiaW5hcnkgaWYgbmVjZXNzYXJ5LCBsb2FkcyB0aGUgZGF0YSBpbnRvIHRoZSBEQUMKKyAqICAgICAgZGF0YSByZWdpc3RlciwgYW5kIHBlcmZvcm1zIHRoZSBjb252ZXJzaW9uLgorICovCitzdGF0aWMgaW50IGR0MjgyeF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5hb1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkdDI4MnhfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc2hvcnQgZDsKKwl1bnNpZ25lZCBpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlkID0gZGF0YVswXTsKKwlkICY9ICgxIDw8IGJvYXJkdHlwZS5kYWJpdHMpIC0gMTsKKwlkZXZwcml2LT5hb1tjaGFuXSA9IGQ7CisKKwlkZXZwcml2LT5kYWNzciB8PSBEVDI4MjFfU1NFTDsKKworCWlmIChjaGFuKSB7CisJCS8qIHNlbGVjdCBjaGFubmVsICovCisJCWRldnByaXYtPmRhY3NyIHw9IERUMjgyMV9ZU0VMOworCQlpZiAoZGV2cHJpdi0+ZGEwXzJzY29tcCkKKwkJCWQgXj0gKDEgPDwgKGJvYXJkdHlwZS5kYWJpdHMgLSAxKSk7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+ZGFjc3IgJj0gfkRUMjgyMV9ZU0VMOworCQlpZiAoZGV2cHJpdi0+ZGExXzJzY29tcCkKKwkJCWQgXj0gKDEgPDwgKGJvYXJkdHlwZS5kYWJpdHMgLSAxKSk7CisJfQorCisJdXBkYXRlX2RhY3NyKDApOworCisJb3V0dyhkLCBkZXYtPmlvYmFzZSArIERUMjgyMV9EQURBVCk7CisKKwl1cGRhdGVfc3VwY3NyKERUMjgyMV9EQUNPTik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkdDI4MnhfYW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IDUwMDAgLyogWFhYIHVua25vd24gKi8gKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSA1MDAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyA+IDIpIHsKKwkJLyogWFhYIGNoYW5saXN0IHN0dWZmPyAqLworCQljbWQtPnNjYW5fZW5kX2FyZyA9IDI7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCS8qIGFueSBjb3VudCBpcyBhbGxvd2VkICovCisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJZHQyODJ4X25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGR0MjgyeF9hb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHgpCit7CisJaW50IHNpemU7CisKKwlpZiAoeCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgPSBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzLCBkZXZwcml2LT5kbWFbMF0uYnVmLAorCQlkZXZwcml2LT5kbWFfbWF4c2l6ZSk7CisJaWYgKHNpemUgPT0gMCkgeworCQlydF9wcmludGsoImR0MjgyeDogQU8gdW5kZXJydW5cbiIpOworCQlyZXR1cm4gLUVQSVBFOworCX0KKwlwcmVwX2FvX2RtYShkZXYsIDAsIHNpemUpOworCisJc2l6ZSA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsIGRldnByaXYtPmRtYVsxXS5idWYsCisJCWRldnByaXYtPmRtYV9tYXhzaXplKTsKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCXJ0X3ByaW50aygiZHQyODJ4OiBBTyB1bmRlcnJ1blxuIik7CisJCXJldHVybiAtRVBJUEU7CisJfQorCXByZXBfYW9fZG1hKGRldiwgMSwgc2l6ZSk7CisKKwl1cGRhdGVfc3VwY3NyKERUMjgyMV9TVFJJRyk7CisJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2FvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCB0aW1lcjsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlpZiAoZGV2cHJpdi0+dXNlZG1hID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJkcml2ZXIgcmVxdWlyZXMgMiBkbWEgY2hhbm5lbHMgdG8gZXhlY3V0ZSBjb21tYW5kIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWR0MjgyeF9kaXNhYmxlX2RtYShkZXYpOworCisJZGV2cHJpdi0+c3VwY3NyID0gRFQyODIxX0VSUklOVEVOIHwgRFQyODIxX0RTMSB8IERUMjgyMV9ERE1BOworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0NMUkRNQURORSB8IERUMjgyMV9CVUZGQiB8IERUMjgyMV9EQUNJTklUKTsKKworCWRldnByaXYtPm50cmlnID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCWRldnByaXYtPm5yZWFkID0gZGV2cHJpdi0+bnRyaWc7CisKKwlkZXZwcml2LT5kbWFfZGlyID0gRE1BX01PREVfV1JJVEU7CisJZGV2cHJpdi0+Y3VycmVudF9kbWFfaW5kZXggPSAwOworCisJdGltZXIgPSBkdDI4MnhfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIFRSSUdfUk9VTkRfTkVBUkVTVCk7CisJb3V0dyh0aW1lciwgZGV2LT5pb2Jhc2UgKyBEVDI4MjFfVE1SQ1RSKTsKKworCWRldnByaXYtPmRhY3NyID0gRFQyODIxX1NTRUwgfCBEVDI4MjFfREFDTEsgfCBEVDI4MjFfSURBUkRZOworCXVwZGF0ZV9kYWNzcigwKTsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gZHQyODJ4X2FvX2ludHRyaWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDI4MnhfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJZHQyODJ4X2Rpc2FibGVfZG1hKGRldik7CisKKwlkZXZwcml2LT5kYWNzciA9IDA7CisJdXBkYXRlX2RhY3NyKDApOworCisJZGV2cHJpdi0+c3VwY3NyID0gMDsKKwl1cGRhdGVfc3VwY3NyKERUMjgyMV9EQUNJTklUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKworCQlvdXR3KHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIERUMjgyMV9ESU9EQVQpOworCX0KKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0RJT0RBVCk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkdDI4MnhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbWFzazsKKworCW1hc2sgPSAoQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgPCA4KSA/IDB4MDBmZiA6IDB4ZmYwMDsKKwlpZiAoZGF0YVswXSkKKwkJcy0+aW9fYml0cyB8PSBtYXNrOworCWVsc2UKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKworCWlmIChzLT5pb19iaXRzICYgMHgwMGZmKQorCQlkZXZwcml2LT5kYWNzciB8PSBEVDI4MjFfTEJPRTsKKwllbHNlCisJCWRldnByaXYtPmRhY3NyICY9IH5EVDI4MjFfTEJPRTsKKwlpZiAocy0+aW9fYml0cyAmIDB4ZmYwMCkKKwkJZGV2cHJpdi0+ZGFjc3IgfD0gRFQyODIxX0hCT0U7CisJZWxzZQorCQlkZXZwcml2LT5kYWNzciAmPSB+RFQyODIxX0hCT0U7CisKKwlvdXR3KGRldnByaXYtPmRhY3NyLCBkZXYtPmlvYmFzZSArIERUMjgyMV9EQUNTUik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCBhaV9yYW5nZV90YWJsZVtdID0geworCSZyYW5nZV9kdDI4MnhfYWlfbG9fYmlwb2xhciwKKwkmcmFuZ2VfZHQyODJ4X2FpX2xvX3VuaXBvbGFyLAorCSZyYW5nZV9kdDI4MnhfYWlfNV9iaXBvbGFyLAorCSZyYW5nZV9kdDI4MnhfYWlfNV91bmlwb2xhcgorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgYWlfcmFuZ2VfcGdsX3RhYmxlW10gPSB7CisJJnJhbmdlX2R0MjgyeF9haV9oaV9iaXBvbGFyLAorCSZyYW5nZV9kdDI4MnhfYWlfaGlfdW5pcG9sYXIKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKm9wdF9haV9yYW5nZV9sa3VwKGludCBpc3BnbCwgaW50IHgpCit7CisJaWYgKGlzcGdsKSB7CisJCWlmICh4IDwgMCB8fCB4ID49IDIpCisJCQl4ID0gMDsKKwkJcmV0dXJuIGFpX3JhbmdlX3BnbF90YWJsZVt4XTsKKwl9IGVsc2UgeworCQlpZiAoeCA8IDAgfHwgeCA+PSA0KQorCQkJeCA9IDA7CisJCXJldHVybiBhaV9yYW5nZV90YWJsZVt4XTsKKwl9Cit9CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IGFvX3JhbmdlX3RhYmxlW10gPSB7CisJJnJhbmdlX2JpcG9sYXIxMCwKKwkmcmFuZ2VfdW5pcG9sYXIxMCwKKwkmcmFuZ2VfYmlwb2xhcjUsCisJJnJhbmdlX3VuaXBvbGFyNSwKKwkmcmFuZ2VfYmlwb2xhcjJfNQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqb3B0X2FvX3JhbmdlX2xrdXAoaW50IHgpCit7CisJaWYgKHggPCAwIHx8IHggPj0gNSkKKwkJeCA9IDA7CisJcmV0dXJuIGFvX3JhbmdlX3RhYmxlW3hdOworfQorCitlbnVtIHsgb3B0X2lvYmFzZSA9IDAsIG9wdF9pcnEsIG9wdF9kbWExLCBvcHRfZG1hMiwJLyogaS9vIGJhc2UsIGlycSwgZG1hIGNoYW5uZWxzICovCisJb3B0X2RpZmYsCQkvKiBkaWZmZXJlbnRpYWwgKi8KKwlvcHRfYWlfdHdvcywgb3B0X2FvMF90d29zLCBvcHRfYW8xX3R3b3MsCS8qIHR3b3MgY29tcCAqLworCW9wdF9haV9yYW5nZSwgb3B0X2FvMF9yYW5nZSwgb3B0X2FvMV9yYW5nZSwJLyogcmFuZ2UgKi8KK307CisKKy8qCisgICBvcHRpb25zOgorICAgMAlpL28gYmFzZQorICAgMQlpcnEKKyAgIDIJZG1hMQorICAgMwlkbWEyCisgICA0CTA9c2luZ2xlIGVuZGVkLCAxPWRpZmZlcmVudGlhbAorICAgNQlhaSAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcAorICAgNglhbzAgMD1zdHJhaWdodCBiaW5hcnksIDE9MidzIGNvbXAKKyAgIDcJYW8xIDA9c3RyYWlnaHQgYmluYXJ5LCAxPTIncyBjb21wCisgICA4CWFpIDA9wrExMCBWLCAxPTAtMTAgViwgMj3CsTUgViwgMz0wLTUgVgorICAgOQlhbzAgMD3CsTEwIFYsIDE9MC0xMCBWLCAyPcKxNSBWLCAzPTAtNSBWLCA0PcKxMi41IFYKKyAgIDEwCWFvMSAwPcKxMTAgViwgMT0wLTEwIFYsIDI9wrE1IFYsIDM9MC01IFYsIDQ9wrEyLjUgVgorICovCitzdGF0aWMgaW50IGR0MjgyeF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IGksIGlycTsKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zW29wdF9pb2Jhc2VdOworCWlmICghaW9iYXNlKQorCQlpb2Jhc2UgPSAweDI0MDsKKworCXByaW50aygiY29tZWRpJWQ6IGR0MjgyeDogMHglMDRseCIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERUMjgyMV9TSVpFLCAiZHQyODJ4IikpIHsKKwkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCW91dHcoRFQyODIxX0JESU5JVCwgZGV2LT5pb2Jhc2UgKyBEVDI4MjFfU1VQQ1NSKTsKKwlpID0gaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0FEQ1NSKTsKKyNpZmRlZiBERUJVRworCXByaW50aygiIGZpbmdlcnByaW50PSV4LCV4LCV4LCV4LCV4IiwKKwkJaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0FEQ1NSKSwKKwkJaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0NIQU5DU1IpLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfREFDU1IpLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfU1VQQ1NSKSwKKwkJaW53KGRldi0+aW9iYXNlICsgRFQyODIxX1RNUkNUUikpOworI2VuZGlmCisKKwlpZiAoKChpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQURDU1IpICYgRFQyODIxX0FEQ1NSX01BU0spCisJCQkhPSBEVDI4MjFfQURDU1JfVkFMKSB8fAorCQkoKGludyhkZXYtPmlvYmFzZSArIERUMjgyMV9DSEFOQ1NSKSAmIERUMjgyMV9DSEFOQ1NSX01BU0spCisJCQkhPSBEVDI4MjFfQ0hBTkNTUl9WQUwpIHx8CisJCSgoaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0RBQ1NSKSAmIERUMjgyMV9EQUNTUl9NQVNLKQorCQkJIT0gRFQyODIxX0RBQ1NSX1ZBTCkgfHwKKwkJKChpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfU1VQQ1NSKSAmIERUMjgyMV9TVVBDU1JfTUFTSykKKwkJCSE9IERUMjgyMV9TVVBDU1JfVkFMKSB8fAorCQkoKGludyhkZXYtPmlvYmFzZSArIERUMjgyMV9UTVJDVFIpICYgRFQyODIxX1RNUkNUUl9NQVNLKQorCQkJIT0gRFQyODIxX1RNUkNUUl9WQUwpKSB7CisJCXByaW50aygiIGJvYXJkIG5vdCBmb3VuZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyogc2hvdWxkIGRvIGJvYXJkIHRlc3QgKi8KKworCWlycSA9IGl0LT5vcHRpb25zW29wdF9pcnFdOworI2lmIDAKKwlpZiAoaXJxIDwgMCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlpbnQgaXJxczsKKworCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJc3RpKCk7CisJCWlycXMgPSBwcm9iZV9pcnFfb24oKTsKKworCQkvKiB0cmlnZ2VyIGludGVycnVwdCAqLworCisJCWNvbWVkaV91ZGVsYXkoMTAwKTsKKworCQlpcnEgPSBwcm9iZV9pcnFfb2ZmKGlycXMpOworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJaWYgKDAgLyogZXJyb3IgKi8gKSB7CisJCQlwcmludGsoIiBlcnJvciBwcm9iaW5nIGlycSAoYmFkKSIpOworCQl9CisJfQorI2VuZGlmCisJaWYgKGlycSA+IDApIHsKKwkJcHJpbnRrKCIgKCBpcnEgPSAlZCApIiwgaXJxKTsKKwkJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgZHQyODJ4X2ludGVycnVwdCwgMCwgImR0MjgyeCIsCisJCQlkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKCIgZmFpbGVkIHRvIGdldCBpcnFcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJZGV2LT5pcnEgPSBpcnE7CisJfSBlbHNlIGlmIChpcnEgPT0gMCkgeworCQlwcmludGsoIiAobm8gaXJxKSIpOworCX0gZWxzZSB7CisjaWYgMAorCQlwcmludGsoIiAocHJvYmUgcmV0dXJuZWQgbXVsdGlwbGUgaXJxcy0tYmFkKSIpOworI2Vsc2UKKwkJcHJpbnRrKCIgKGlycSBwcm9iZSBub3QgaW1wbGVtZW50ZWQpIik7CisjZW5kaWYKKwl9CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGR0MjgyeF9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGR0MjgyeF9ncmFiX2RtYShkZXYsIGl0LT5vcHRpb25zW29wdF9kbWExXSwKKwkJaXQtPm9wdGlvbnNbb3B0X2RtYTJdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCS8qIGFpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQgfAorCQkoKGl0LT5vcHRpb25zW29wdF9kaWZmXSkgPyBTREZfRElGRiA6IFNERl9DT01NT04pOworCXMtPm5fY2hhbiA9CisJCShpdC0+b3B0aW9uc1tvcHRfZGlmZl0pID8gYm9hcmR0eXBlLmFkY2hhbl9kaSA6IGJvYXJkdHlwZS4KKwkJYWRjaGFuX3NlOworCXMtPmluc25fcmVhZCA9IGR0MjgyeF9haV9pbnNuX3JlYWQ7CisJcy0+ZG9fY21kdGVzdCA9IGR0MjgyeF9haV9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IGR0MjgyeF9haV9jbWQ7CisJcy0+Y2FuY2VsID0gZHQyODJ4X2FpX2NhbmNlbDsKKwlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmFkYml0cykgLSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDE2OworCXMtPnJhbmdlX3RhYmxlID0KKwkJb3B0X2FpX3JhbmdlX2xrdXAoYm9hcmR0eXBlLmlzcGdsLCBpdC0+b3B0aW9uc1tvcHRfYWlfcmFuZ2VdKTsKKwlkZXZwcml2LT5hZF8yc2NvbXAgPSBpdC0+b3B0aW9uc1tvcHRfYWlfdHdvc107CisKKwlzKys7CisJaWYgKChzLT5uX2NoYW4gPSBib2FyZHR5cGUuZGFjaGFuKSkgeworCQkvKiBhbyBzdWJzeXN0ZW0gKi8KKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9DTURfV1JJVEU7CisJCXMtPmluc25fcmVhZCA9IGR0MjgyeF9hb19pbnNuX3JlYWQ7CisJCXMtPmluc25fd3JpdGUgPSBkdDI4MnhfYW9faW5zbl93cml0ZTsKKwkJcy0+ZG9fY21kdGVzdCA9IGR0MjgyeF9hb19jbWR0ZXN0OworCQlzLT5kb19jbWQgPSBkdDI4MnhfYW9fY21kOworCQlzLT5jYW5jZWwgPSBkdDI4MnhfYW9fY2FuY2VsOworCQlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmRhYml0cykgLSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSAyOworCQlzLT5yYW5nZV90YWJsZV9saXN0ID0gZGV2cHJpdi0+ZGFyYW5nZWxpc3Q7CisJCWRldnByaXYtPmRhcmFuZ2VsaXN0WzBdID0KKwkJCW9wdF9hb19yYW5nZV9sa3VwKGl0LT5vcHRpb25zW29wdF9hbzBfcmFuZ2VdKTsKKwkJZGV2cHJpdi0+ZGFyYW5nZWxpc3RbMV0gPQorCQkJb3B0X2FvX3JhbmdlX2xrdXAoaXQtPm9wdGlvbnNbb3B0X2FvMV9yYW5nZV0pOworCQlkZXZwcml2LT5kYTBfMnNjb21wID0gaXQtPm9wdGlvbnNbb3B0X2FvMF90d29zXTsKKwkJZGV2cHJpdi0+ZGExXzJzY29tcCA9IGl0LT5vcHRpb25zW29wdF9hbzFfdHdvc107CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzKys7CisJLyogZGlvIHN1YnN5c3RlbSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IGR0MjgyeF9kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gZHQyODJ4X2Rpb19pbnNuX2NvbmZpZzsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERUMjgyMV9TSVpFKTsKKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCWlmIChkZXZwcml2LT5kbWFbMF0uY2hhbikKKwkJCWZyZWVfZG1hKGRldnByaXYtPmRtYVswXS5jaGFuKTsKKwkJaWYgKGRldnByaXYtPmRtYVsxXS5jaGFuKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hWzFdLmNoYW4pOworCQlpZiAoZGV2cHJpdi0+ZG1hWzBdLmJ1ZikKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkZXZwcml2LT5kbWFbMF0uYnVmKTsKKwkJaWYgKGRldnByaXYtPmRtYVsxXS5idWYpCisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGV2cHJpdi0+ZG1hWzFdLmJ1Zik7CisJfQorfQorCitzdGF0aWMgaW50IGR0MjgyeF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZHQyODJ4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJZnJlZV9yZXNvdXJjZXMoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9ncmFiX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGRtYTEsIGludCBkbWEyKQoreworCWludCByZXQ7CisKKwlkZXZwcml2LT51c2VkbWEgPSAwOworCisJaWYgKCFkbWExICYmICFkbWEyKSB7CisJCXByaW50aygiIChubyBkbWEpIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChkbWExID09IGRtYTIgfHwgZG1hMSA8IDUgfHwgZG1hMiA8IDUgfHwgZG1hMSA+IDcgfHwgZG1hMiA+IDcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRtYTIgPCBkbWExKSB7CisJCWludCBpOworCQlpID0gZG1hMTsKKwkJZG1hMSA9IGRtYTI7CisJCWRtYTIgPSBpOworCX0KKworCXJldCA9IHJlcXVlc3RfZG1hKGRtYTEsICJkdDI4MnggQSIpOworCWlmIChyZXQpCisJCXJldHVybiAtRUJVU1k7CisJZGV2cHJpdi0+ZG1hWzBdLmNoYW4gPSBkbWExOworCisJcmV0ID0gcmVxdWVzdF9kbWEoZG1hMiwgImR0MjgyeCBCIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlkZXZwcml2LT5kbWFbMV0uY2hhbiA9IGRtYTI7CisKKwlkZXZwcml2LT5kbWFfbWF4c2l6ZSA9IFBBR0VfU0laRTsKKwlkZXZwcml2LT5kbWFbMF0uYnVmID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWRldnByaXYtPmRtYVsxXS5idWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaWYgKCFkZXZwcml2LT5kbWFbMF0uYnVmIHx8ICFkZXZwcml2LT5kbWFbMV0uYnVmKSB7CisJCXByaW50aygiIGNhbid0IGdldCBETUEgbWVtb3J5Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByaW50aygiIChkbWE9JWQsJWQpIiwgZG1hMSwgZG1hMik7CisKKwlkZXZwcml2LT51c2VkbWEgPSAxOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQzMDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQzMDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0Njc5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYwpAQCAtMCwwICsxLDk4MyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kdDMwMDAuYworICAgIERhdGEgVHJhbnNsYXRpb24gRFQzMDAwIHNlcmllcyBkcml2ZXIKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGR0MzAwMAorRGVzY3JpcHRpb246IERhdGEgVHJhbnNsYXRpb24gRFQzMDAwIHNlcmllcworQXV0aG9yOiBkcworRGV2aWNlczogW0RhdGEgVHJhbnNsYXRpb25dIERUMzAwMSAoZHQzMDAwKSwgRFQzMDAxLVBHTCwgRFQzMDAyLCBEVDMwMDMsCisgIERUMzAwMy1QR0wsIERUMzAwNCwgRFQzMDA1LCBEVDMwMDQtMjAwCitVcGRhdGVkOiBNb24sIDE0IEFwciAyMDA4IDE1OjQxOjI0ICswMTAwCitTdGF0dXM6IHdvcmtzCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorCitUaGVyZSBpcyBjb2RlIHRvIHN1cHBvcnQgQUkgY29tbWFuZHMsIGJ1dCBpdCBtYXkgbm90IHdvcmsuCisKK0FPIGNvbW1hbmRzIGFyZSBub3Qgc3VwcG9ydGVkLgorKi8KKworLyoKKyAgIFRoZSBEVDMwMDAgc2VyaWVzIGlzIERhdGEgVHJhbnNsYXRpb24ncyBhdHRlbXB0IHRvIG1ha2UgYSBQQ0kKKyAgIGRhdGEgYWNxdWlzaXRpb24gYm9hcmQuICBUaGUgZGVzaWduIG9mIHRoaXMgc2VyaWVzIGlzIHZlcnkgbmljZSwKKyAgIHNpbmNlIGVhY2ggYm9hcmQgaGFzIGFuIG9uLWJvYXJkIERTUCAoVGV4YXMgSW5zdHJ1bWVudHMgVE1TMzIwQzUyKS4KKyAgIEhvd2V2ZXIsIGEgZmV3IGRldGFpbHMgYXJlIGEgbGl0dGxlIGFubm95aW5nLiAgVGhlIGJvYXJkcyBsYWNrCisgICBidXMtbWFzdGVyaW5nIERNQSwgd2hpY2ggZWxpbWluYXRlcyB0aGVtIGZyb20gc2VyaW91cyB3b3JrLgorICAgVGhleSBhbHNvIGFyZSBub3QgY2FwYWJsZSBvZiBhdXRvY2FsaWJyYXRpb24sIHdoaWNoIGlzIGEgY29tbW9uCisgICBmZWF0dXJlIGluIG1vZGVybiBoYXJkd2FyZS4gIFRoZSBkZWZhdWx0IGZpcm13YXJlIGlzIHByZXR0eSBiYWQsCisgICBtYWtpbmcgaXQgbmVhcmx5IGltcG9zc2libGUgdG8gd3JpdGUgYW4gUlQgY29tcGF0aWJsZSBkcml2ZXIuCisgICBJdCB3b3VsZCBtYWtlIGFuIGludGVyZXN0aW5nIHByb2plY3QgdG8gd3JpdGUgYSBkZWNlbnQgZmlybXdhcmUKKyAgIGZvciB0aGVzZSBib2FyZHMuCisKKyAgIERhdGEgVHJhbnNsYXRpb24gb3JpZ2luYWxseSB3YW50ZWQgYW4gTkRBIGZvciB0aGUgZG9jdW1lbnRhdGlvbgorICAgZm9yIHRoZSAzayBzZXJpZXMuICBIb3dldmVyLCBpZiB5b3UgYXNrIG5pY2VseSwgdGhleSBtaWdodCBzZW5kCisgICB5b3UgdGhlIGRvY3Mgd2l0aG91dCBvbmUsIGFsc28uCisqLworCisjZGVmaW5lIERFQlVHIDEKKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9EVAkweDExMTYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MzAwMF9haSA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDMwMDBfYWlfcGdsID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgtMC4wMiwgMC4wMikKKwl9Cit9OworCitzdHJ1Y3QgZHQza19ib2FyZHR5cGUgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgZGV2aWNlX2lkOworCWludCBhZGNoYW47CisJaW50IGFkYml0czsKKwlpbnQgYWlfc3BlZWQ7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFkcmFuZ2U7CisJaW50IGRhY2hhbjsKKwlpbnQgZGFiaXRzOworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGR0M2tfYm9hcmR0eXBlIGR0M2tfYm9hcmR0eXBlc1tdID0geworICAgICAge25hbWU6ImR0MzAwMSIsCisJICAgICAgZGV2aWNlX2lkOjB4MjIsCisJICAgICAgYWRjaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2U6CSZyYW5nZV9kdDMwMDBfYWksCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDMwMDEtcGdsIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgyNywKKwkgICAgICBhZGNoYW46CTE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRyYW5nZToJJnJhbmdlX2R0MzAwMF9haV9wZ2wsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDMwMDIiLAorCSAgICAgIGRldmljZV9pZDoweDIzLAorCSAgICAgIGFkY2hhbjoJMzIsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdlOgkmcmFuZ2VfZHQzMDAwX2FpLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgZGFjaGFuOgkwLAorCSAgICAgIGRhYml0czoJMCwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDMwMDMiLAorCSAgICAgIGRldmljZV9pZDoweDI0LAorCSAgICAgIGFkY2hhbjoJNjQsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdlOgkmcmFuZ2VfZHQzMDAwX2FpLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgZGFjaGFuOgkyLAorCSAgICAgIGRhYml0czoJMTIsCisJCX0sCisgICAgICB7bmFtZToiZHQzMDAzLXBnbCIsCisJICAgICAgZGV2aWNlX2lkOjB4MjgsCisJICAgICAgYWRjaGFuOgk2NCwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2U6CSZyYW5nZV9kdDMwMDBfYWlfcGdsLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgZGFjaGFuOgkyLAorCSAgICAgIGRhYml0czoJMTIsCisJCX0sCisgICAgICB7bmFtZToiZHQzMDA0IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgyNSwKKwkgICAgICBhZGNoYW46CTE2LAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWRyYW5nZToJJnJhbmdlX2R0MzAwMF9haSwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDMwMDUiLAkJLyogYS5rLmEuIDMwMDQtMjAwICovCisJICAgICAgZGV2aWNlX2lkOjB4MjYsCisJICAgICAgYWRjaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFkcmFuZ2U6CSZyYW5nZV9kdDMwMDBfYWksCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKK307CisKKyNkZWZpbmUgbl9kdDNrX2JvYXJkcyBzaXplb2YoZHQza19ib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IGR0M2tfYm9hcmR0eXBlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IGR0M2tfYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkdDNrX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfRFQsIDB4MDAyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfRFQsIDB4MDAyNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfRFQsIDB4MDAyMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfRFQsIDB4MDAyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfRFQsIDB4MDAyOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfRFQsIDB4MDAyNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfRFQsIDB4MDAyNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZHQza19wY2lfdGFibGUpOworCisjZGVmaW5lIERUMzAwMF9TSVpFCQkoNCoweDEwMDApCisKKy8qIGR1YWwtcG9ydGVkIFJBTSBsb2NhdGlvbiBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIERQUl9EQUNfYnVmZmVyCQkoNCoweDAwMCkKKyNkZWZpbmUgRFBSX0FEQ19idWZmZXIJCSg0KjB4ODAwKQorI2RlZmluZSBEUFJfQ29tbWFuZAkJKDQqMHhmZDMpCisjZGVmaW5lIERQUl9TdWJTeXMJCSg0KjB4ZmQzKQorI2RlZmluZSBEUFJfRW5jb2RlCQkoNCoweGZkNCkKKyNkZWZpbmUgRFBSX1BhcmFtcyhhKQkJKDQqKDB4ZmQ1KyhhKSkpCisjZGVmaW5lIERQUl9UaWNrX1JlZ19MbwkJKDQqMHhmZjUpCisjZGVmaW5lIERQUl9UaWNrX1JlZ19IaQkJKDQqMHhmZjYpCisjZGVmaW5lIERQUl9EQV9CdWZfRnJvbnQJKDQqMHhmZjcpCisjZGVmaW5lIERQUl9EQV9CdWZfUmVhcgkJKDQqMHhmZjgpCisjZGVmaW5lIERQUl9BRF9CdWZfRnJvbnQJKDQqMHhmZjkpCisjZGVmaW5lIERQUl9BRF9CdWZfUmVhcgkJKDQqMHhmZmEpCisjZGVmaW5lIERQUl9JbnRfTWFzawkJKDQqMHhmZmIpCisjZGVmaW5lIERQUl9JbnRyX0ZsYWcJCSg0KjB4ZmZjKQorI2RlZmluZSBEUFJfUmVzcG9uc2VfTWJ4CSg0KjB4ZmZlKQorI2RlZmluZSBEUFJfQ29tbWFuZF9NYngJCSg0KjB4ZmZmKQorCisjZGVmaW5lIEFJX0ZJRk9fREVQVEgJMjAwMworI2RlZmluZSBBT19GSUZPX0RFUFRICTIwNDgKKworLyogY29tbWFuZCBsaXN0ICovCisKKyNkZWZpbmUgQ01EX0dFVEJSRElORk8JCTAKKyNkZWZpbmUgQ01EX0NPTkZJRwkJMQorI2RlZmluZSBDTURfR0VUQ09ORklHCQkyCisjZGVmaW5lIENNRF9TVEFSVAkJMworI2RlZmluZSBDTURfU1RPUAkJNAorI2RlZmluZSBDTURfUkVBRFNJTkdMRQkJNQorI2RlZmluZSBDTURfV1JJVEVTSU5HTEUJCTYKKyNkZWZpbmUgQ01EX0NBTENDTE9DSwkJNworI2RlZmluZSBDTURfUkVBREVWRU5UUwkJOAorI2RlZmluZSBDTURfV1JJVEVDVENUUkwJCTE2CisjZGVmaW5lIENNRF9SRUFEQ1RDVFJMCQkxNworI2RlZmluZSBDTURfV1JJVEVDVAkJMTgKKyNkZWZpbmUgQ01EX1JFQURDVAkJMTkKKyNkZWZpbmUgQ01EX1dSSVRFREFUQQkJMzIKKyNkZWZpbmUgQ01EX1JFQUREQVRBCQkzMworI2RlZmluZSBDTURfV1JJVEVJTwkJMzQKKyNkZWZpbmUgQ01EX1JFQURJTwkJMzUKKyNkZWZpbmUgQ01EX1dSSVRFQ09ERQkJMzYKKyNkZWZpbmUgQ01EX1JFQURDT0RFCQkzNworI2RlZmluZSBDTURfRVhFQ1VURQkJMzgKKyNkZWZpbmUgQ01EX0hBTFQJCTQ4CisKKyNkZWZpbmUgU1VCU19BSQkJMAorI2RlZmluZSBTVUJTX0FPCQkxCisjZGVmaW5lIFNVQlNfRElOCTIKKyNkZWZpbmUgU1VCU19ET1VUCTMKKyNkZWZpbmUgU1VCU19NRU0JNAorI2RlZmluZSBTVUJTX0NUCQk1CisKKy8qIGludGVycnVwdCBmbGFncyAqLworI2RlZmluZSBEVDMwMDBfQ01ET05FCQkweDgwCisjZGVmaW5lIERUMzAwMF9DVERPTkUJCTB4NDAKKyNkZWZpbmUgRFQzMDAwX0RBSFdFUlIJCTB4MjAKKyNkZWZpbmUgRFQzMDAwX0RBU1dFUlIJCTB4MTAKKyNkZWZpbmUgRFQzMDAwX0RBRU1QVFkJCTB4MDgKKyNkZWZpbmUgRFQzMDAwX0FESFdFUlIJCTB4MDQKKyNkZWZpbmUgRFQzMDAwX0FEU1dFUlIJCTB4MDIKKyNkZWZpbmUgRFQzMDAwX0FERlVMTAkJMHgwMQorCisjZGVmaW5lIERUMzAwMF9DT01QTEVUSU9OX01BU0sJMHhmZjAwCisjZGVmaW5lIERUMzAwMF9DT01NQU5EX01BU0sJMHgwMGZmCisjZGVmaW5lIERUMzAwMF9OT1RQUk9DRVNTRUQJMHgwMDAwCisjZGVmaW5lIERUMzAwMF9OT0VSUk9SCQkweDU1MDAKKyNkZWZpbmUgRFQzMDAwX0VSUk9SCQkweGFhMDAKKyNkZWZpbmUgRFQzMDAwX05PVFNVUFBPUlRFRAkweGZmMDAKKworI2RlZmluZSBEVDMwMDBfRVhURVJOQUxfQ0xPQ0sJMQorI2RlZmluZSBEVDMwMDBfUklTSU5HX0VER0UJMgorCisjZGVmaW5lIFRNT0RFX01BU0sJCTB4MWMKKworI2RlZmluZSBEVDMwMDBfQURfVFJJR19JTlRFUk5BTAkJKDA8PDIpCisjZGVmaW5lIERUMzAwMF9BRF9UUklHX0VYVEVSTkFMCQkoMTw8MikKKyNkZWZpbmUgRFQzMDAwX0FEX1JFVFJJR19JTlRFUk5BTAkoMjw8MikKKyNkZWZpbmUgRFQzMDAwX0FEX1JFVFJJR19FWFRFUk5BTAkoMzw8MikKKyNkZWZpbmUgRFQzMDAwX0FEX0VYVFJFVFJJRwkJKDQ8PDIpCisKKyNkZWZpbmUgRFQzMDAwX0NIQU5ORUxfTU9ERV9TRQkJMAorI2RlZmluZSBEVDMwMDBfQ0hBTk5FTF9NT0RFX0RJCQkxCisKK3N0cnVjdCBkdDNrX3ByaXZhdGUgeworCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjsKKwl2b2lkICppb19hZGRyOworCXVuc2lnbmVkIGludCBsb2NrOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKwl1bnNpZ25lZCBpbnQgYWlfZnJvbnQ7CisJdW5zaWduZWQgaW50IGFpX3JlYXI7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZHQza19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGR0MzAwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkdDMwMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZHQzMDAwID0geworICAgICAgZHJpdmVyX25hbWU6ImR0MzAwMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZHQzMDAwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpkdDMwMDBfZGV0YWNoLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfZHQzMDAwLCBkdDNrX3BjaV90YWJsZSk7CisKK3N0YXRpYyB2b2lkIGR0M2tfYWlfZW1wdHlfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZHQza19uc190b190aW1lcih1bnNpZ25lZCBpbnQgdGltZXJfYmFzZSwgdW5zaWduZWQgaW50ICphcmcsCisJdW5zaWduZWQgaW50IHJvdW5kX21vZGUpOworc3RhdGljIGludCBkdDNrX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgZGVidWdfaW50cl9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpOworI2VuZGlmCisKKyNkZWZpbmUgVElNRU9VVCAxMDAKKworc3RhdGljIGludCBkdDNrX3NlbmRfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY21kKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBzdGF0dXMgPSAwOworCisJd3JpdGV3KGNtZCwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9Db21tYW5kX01ieCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVDsgaSsrKSB7CisJCXN0YXR1cyA9IHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBEUFJfQ29tbWFuZF9NYngpOworCQlpZiAoKHN0YXR1cyAmIERUMzAwMF9DT01QTEVUSU9OX01BU0spICE9IERUMzAwMF9OT1RQUk9DRVNTRUQpCisJCQlicmVhazsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwl9CisJaWYgKChzdGF0dXMgJiBEVDMwMDBfQ09NUExFVElPTl9NQVNLKSA9PSBEVDMwMDBfTk9FUlJPUikgeworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGsoImR0M2tfc2VuZF9jbWQoKSB0aW1lb3V0L2Vycm9yIHN0YXR1cz0weCUwNHhcbiIsIHN0YXR1cyk7CisKKwlyZXR1cm4gLUVUSU1FOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGR0M2tfcmVhZHNpbmdsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN1YnN5cywKKwl1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IGdhaW4pCit7CisJd3JpdGV3KHN1YnN5cywgZGV2cHJpdi0+aW9fYWRkciArIERQUl9TdWJTeXMpOworCisJd3JpdGV3KGNoYW4sIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDApKTsKKwl3cml0ZXcoZ2FpbiwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMSkpOworCisJZHQza19zZW5kX2NtZChkZXYsIENNRF9SRUFEU0lOR0xFKTsKKworCXJldHVybiByZWFkdyhkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygyKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR0M2tfd3JpdGVzaW5nbGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBzdWJzeXMsCisJdW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGludCBkYXRhKQoreworCXdyaXRldyhzdWJzeXMsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfU3ViU3lzKTsKKworCXdyaXRldyhjaGFuLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygwKSk7CisJd3JpdGV3KDAsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDEpKTsKKwl3cml0ZXcoZGF0YSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMikpOworCisJZHQza19zZW5kX2NtZChkZXYsIENNRF9XUklURVNJTkdMRSk7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfbl9pbnRzID0gMDsKKworLy8gRklYTUUhIEFzc3VtZXMgc2hhcmVkIGludGVycnVwdCBpcyBmb3IgdGhpcyBjYXJkLgorLy8gV2hhdCdzIHRoaXMgZGVidWdfbl9pbnRzIHN0dWZmPyBPYnZpb3VzbHkgbmVlZHMgc29tZSB3b3JrLi4uCitzdGF0aWMgaXJxcmV0dXJuX3QgZHQza19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzdGF0dXMgPSByZWFkdyhkZXZwcml2LT5pb19hZGRyICsgRFBSX0ludHJfRmxhZyk7CisjaWZkZWYgREVCVUcKKwlkZWJ1Z19pbnRyX2ZsYWdzKHN0YXR1cyk7CisjZW5kaWYKKworCWlmIChzdGF0dXMgJiBEVDMwMDBfQURGVUxMKSB7CisJCWR0M2tfYWlfZW1wdHlfZmlmbyhkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKwl9CisKKwlpZiAoc3RhdHVzICYgKERUMzAwMF9BRFNXRVJSIHwgRFQzMDAwX0FESFdFUlIpKSB7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwl9CisKKwlkZWJ1Z19uX2ludHMrKzsKKwlpZiAoZGVidWdfbl9pbnRzID49IDEwKSB7CisJCWR0M2tfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIGNoYXIgKmludHJfZmxhZ3NbXSA9IHsKKwkiQWRGdWxsIiwgIkFkU3dFcnJvciIsICJBZEh3RXJyb3IiLCAiRGFFbXB0eSIsCisJIkRhU3dFcnJvciIsICJEYUh3RXJyb3IiLCAiQ3REb25lIiwgIkNtRG9uZSIsCit9Oworc3RhdGljIHZvaWQgZGVidWdfaW50cl9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisJcHJpbnRrKCJkdDNrOiBpbnRyX2ZsYWdzOiIpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKGZsYWdzICYgKDEgPDwgaSkpIHsKKwkJCXByaW50aygiICVzIiwgaW50cl9mbGFnc1tpXSk7CisJCX0KKwl9CisJcHJpbnRrKCJcbiIpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGR0M2tfYWlfZW1wdHlfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBmcm9udDsKKwlpbnQgcmVhcjsKKwlpbnQgY291bnQ7CisJaW50IGk7CisJc2hvcnQgZGF0YTsKKworCWZyb250ID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIERQUl9BRF9CdWZfRnJvbnQpOworCWNvdW50ID0gZnJvbnQgLSBkZXZwcml2LT5haV9mcm9udDsKKwlpZiAoY291bnQgPCAwKQorCQljb3VudCArPSBBSV9GSUZPX0RFUFRIOworCisJcHJpbnRrKCJyZWFkaW5nICVkIHNhbXBsZXNcbiIsIGNvdW50KTsKKworCXJlYXIgPSBkZXZwcml2LT5haV9yZWFyOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZGF0YSA9IHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBEUFJfQURDX2J1ZmZlciArIHJlYXIpOworCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZGF0YSk7CisJCXJlYXIrKzsKKwkJaWYgKHJlYXIgPj0gQUlfRklGT19ERVBUSCkKKwkJCXJlYXIgPSAwOworCX0KKworCWRldnByaXYtPmFpX3JlYXIgPSByZWFyOworCXdyaXRldyhyZWFyLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX0FEX0J1Zl9SZWFyKTsKK30KKworc3RhdGljIGludCBkdDNrX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCB0aGlzX2JvYXJkLT5haV9zcGVlZCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHRoaXNfYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiAxMDAgKiAxNiAqIDY1NTM1KSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMTAwICogMTYgKiA2NTUzNTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogbm90IHN1cHBvcnRlZCAqLworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9zcGVlZDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gNTAgKiAxNiAqIDY1NTM1KSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gNTAgKiAxNiAqIDY1NTM1OworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBub3Qgc3VwcG9ydGVkICovCisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWR0M2tfbnNfdG9fdGltZXIoMTAwLCAmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9IGVsc2UgeworCQkvKiBub3Qgc3VwcG9ydGVkICovCisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJZHQza19uc190b190aW1lcig1MCwgJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0M2tfbnNfdG9fdGltZXIodW5zaWduZWQgaW50IHRpbWVyX2Jhc2UsIHVuc2lnbmVkIGludCAqbmFub3NlYywKKwl1bnNpZ25lZCBpbnQgcm91bmRfbW9kZSkKK3sKKwlpbnQgZGl2aWRlciwgYmFzZSwgcHJlc2NhbGU7CisKKwkvKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIGltcHJvdm1lbnQgKi8KKwkvKiBEb24ndCBrbm93IGlmIGRpdmlkZXI9PTAgd29ya3MuICovCisKKwlmb3IgKHByZXNjYWxlID0gMDsgcHJlc2NhbGUgPCAxNjsgcHJlc2NhbGUrKykgeworCQliYXNlID0gdGltZXJfYmFzZSAqIChwcmVzY2FsZSArIDEpOworCQlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCWRlZmF1bHQ6CisJCQlkaXZpZGVyID0gKCpuYW5vc2VjICsgYmFzZSAvIDIpIC8gYmFzZTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJCWRpdmlkZXIgPSAoKm5hbm9zZWMpIC8gYmFzZTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQlkaXZpZGVyID0gKCpuYW5vc2VjKSAvIGJhc2U7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGl2aWRlciA8IDY1NTM2KSB7CisJCQkqbmFub3NlYyA9IGRpdmlkZXIgKiBiYXNlOworCQkJcmV0dXJuIChwcmVzY2FsZSA8PCAxNikgfCAoZGl2aWRlcik7CisJCX0KKwl9CisKKwlwcmVzY2FsZSA9IDE1OworCWJhc2UgPSB0aW1lcl9iYXNlICogKDEgPDwgcHJlc2NhbGUpOworCWRpdmlkZXIgPSA2NTUzNTsKKwkqbmFub3NlYyA9IGRpdmlkZXIgKiBiYXNlOworCXJldHVybiAocHJlc2NhbGUgPDwgMTYpIHwgKGRpdmlkZXIpOworfQorCitzdGF0aWMgaW50IGR0M2tfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBpOworCXVuc2lnbmVkIGludCBjaGFuLCByYW5nZSwgYXJlZjsKKwl1bnNpZ25lZCBpbnQgZGl2aWRlcjsKKwl1bnNpZ25lZCBpbnQgdHNjYW5kaXY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKworCXByaW50aygiZHQza19haV9jbWQ6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQljaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKTsKKworCQl3cml0ZXcoKHJhbmdlIDw8IDYpIHwgY2hhbiwKKwkJCWRldnByaXYtPmlvX2FkZHIgKyBEUFJfQURDX2J1ZmZlciArIGkpOworCX0KKwlhcmVmID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKTsKKworCXdyaXRldyhjbWQtPnNjYW5fZW5kX2FyZywgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMCkpOworCXByaW50aygicGFyYW1bMF09MHglMDR4XG4iLCBjbWQtPnNjYW5fZW5kX2FyZyk7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWRpdmlkZXIgPSBkdDNrX25zX3RvX3RpbWVyKDUwLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQl3cml0ZXcoKGRpdmlkZXIgPj4gMTYpLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygxKSk7CisJCXByaW50aygicGFyYW1bMV09MHglMDR4XG4iLCBkaXZpZGVyID4+IDE2KTsKKwkJd3JpdGV3KChkaXZpZGVyICYgMHhmZmZmKSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMikpOworCQlwcmludGsoInBhcmFtWzJdPTB4JTA0eFxuIiwgZGl2aWRlciAmIDB4ZmZmZik7CisJfSBlbHNlIHsKKwkJLyogbm90IHN1cHBvcnRlZCAqLworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdHNjYW5kaXYgPSBkdDNrX25zX3RvX3RpbWVyKDEwMCwgJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJd3JpdGV3KCh0c2NhbmRpdiA+PiAxNiksIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDMpKTsKKwkJcHJpbnRrKCJwYXJhbVszXT0weCUwNHhcbiIsIHRzY2FuZGl2ID4+IDE2KTsKKwkJd3JpdGV3KCh0c2NhbmRpdiAmIDB4ZmZmZiksIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDQpKTsKKwkJcHJpbnRrKCJwYXJhbVs0XT0weCUwNHhcbiIsIHRzY2FuZGl2ICYgMHhmZmZmKTsKKwl9IGVsc2UgeworCQkvKiBub3Qgc3VwcG9ydGVkICovCisJfQorCisJbW9kZSA9IERUMzAwMF9BRF9SRVRSSUdfSU5URVJOQUwgfCAwIHwgMDsKKwl3cml0ZXcobW9kZSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoNSkpOworCXByaW50aygicGFyYW1bNV09MHglMDR4XG4iLCBtb2RlKTsKKwl3cml0ZXcoYXJlZiA9PSBBUkVGX0RJRkYsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDYpKTsKKwlwcmludGsoInBhcmFtWzZdPTB4JTA0eFxuIiwgYXJlZiA9PSBBUkVGX0RJRkYpOworCisJd3JpdGV3KEFJX0ZJRk9fREVQVEggLyAyLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcyg3KSk7CisJcHJpbnRrKCJwYXJhbVs3XT0weCUwNHhcbiIsIEFJX0ZJRk9fREVQVEggLyAyKTsKKworCXdyaXRldyhTVUJTX0FJLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1N1YlN5cyk7CisJcmV0ID0gZHQza19zZW5kX2NtZChkZXYsIENNRF9DT05GSUcpOworCisJd3JpdGV3KERUMzAwMF9BREZVTEwgfCBEVDMwMDBfQURTV0VSUiB8IERUMzAwMF9BREhXRVJSLAorCQlkZXZwcml2LT5pb19hZGRyICsgRFBSX0ludF9NYXNrKTsKKworCWRlYnVnX25faW50cyA9IDA7CisKKwl3cml0ZXcoU1VCU19BSSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9TdWJTeXMpOworCXJldCA9IGR0M2tfc2VuZF9jbWQoZGV2LCBDTURfU1RBUlQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQza19haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgcmV0OworCisJd3JpdGV3KFNVQlNfQUksIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfU3ViU3lzKTsKKwlyZXQgPSBkdDNrX3NlbmRfY21kKGRldiwgQ01EX1NUT1ApOworCisJd3JpdGV3KDAsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfSW50X01hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQza19haV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgY2hhbiwgZ2FpbiwgYXJlZjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlnYWluID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCS8qIFhYWCBkb2NzIGRvbid0IGV4cGxhaW4gaG93IHRvIHNlbGVjdCBhcmVmICovCisJYXJlZiA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZHQza19yZWFkc2luZ2xlKGRldiwgU1VCU19BSSwgY2hhbiwgZ2Fpbik7CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZHQza19hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWR0M2tfd3JpdGVzaW5nbGUoZGV2LCBTVUJTX0FPLCBjaGFuLCBkYXRhW2ldKTsKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0M2tfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgZHQza19kaW9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYml0cykKK3sKKwkvKiBYWFggKi8KKwl3cml0ZXcoU1VCU19ET1VULCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1N1YlN5cyk7CisKKwl3cml0ZXcoYml0cywgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMCkpOworI2lmIDAKKwkvKiBkb24ndCBrbm93ICovCisJd3JpdGV3KDAsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDEpKTsKKwl3cml0ZXcoMCwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMikpOworI2VuZGlmCisKKwlkdDNrX3NlbmRfY21kKGRldiwgQ01EX0NPTkZJRyk7Cit9CisKK3N0YXRpYyBpbnQgZHQza19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBtYXNrOworCisJbWFzayA9IChDUl9DSEFOKGluc24tPmNoYW5zcGVjKSA8IDQpID8gMHgwZiA6IDB4ZjA7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPmlvX2JpdHMgJj0gfm1hc2s7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT5pb19iaXRzICYgKDEgPDwgQ1JfQ0hBTihpbnNuLT4KKwkJCQkJY2hhbnNwZWMpKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJbWFzayA9IChzLT5pb19iaXRzICYgMHgwMSkgfCAoKHMtPmlvX2JpdHMgJiAweDEwKSA+PiAzKTsKKwlkdDNrX2Rpb19jb25maWcoZGV2LCBtYXNrKTsKKworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IGR0M2tfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVsxXSAmIGRhdGFbMF07CisJCWR0M2tfd3JpdGVzaW5nbGUoZGV2LCBTVUJTX0RPVVQsIDAsIHMtPnN0YXRlKTsKKwl9CisJZGF0YVsxXSA9IGR0M2tfcmVhZHNpbmdsZShkZXYsIFNVQlNfRElOLCAwLCAwKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGR0M2tfbWVtX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGFkZHIgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJd3JpdGV3KFNVQlNfTUVNLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1N1YlN5cyk7CisJCXdyaXRldyhhZGRyLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygwKSk7CisJCXdyaXRldygxLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygxKSk7CisKKwkJZHQza19zZW5kX2NtZChkZXYsIENNRF9SRUFEQ09ERSk7CisKKwkJZGF0YVtpXSA9IHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDIpKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdF9wY2lfcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KTsKKworc3RhdGljIGludCBkdDMwMDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBidXMsIHNsb3Q7CisJaW50IHJldCA9IDA7CisKKwlwcmludGsoImR0MzAwMDoiKTsKKwlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwlzbG90ID0gaXQtPm9wdGlvbnNbMV07CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGR0M2tfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBkdF9wY2lfcHJvYmUoZGV2LCBidXMsIHNsb3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChyZXQgPT0gMCkgeworCQlwcmludGsoIiBubyBEVCBib2FyZCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKwlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGRldnByaXYtPnBjaV9kZXYtPmlycSwgZHQza19pbnRlcnJ1cHQsCisJCQlJUlFGX1NIQVJFRCwgImR0MzAwMCIsIGRldikpIHsKKwkJcHJpbnRrKCIgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAldVxuIiwgZGV2cHJpdi0+cGNpX2Rldi0+aXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldi0+aXJxID0gZGV2cHJpdi0+cGNpX2Rldi0+aXJxOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXM7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPmFkY2hhbjsKKwlzLT5pbnNuX3JlYWQgPSBkdDNrX2FpX2luc247CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNfYm9hcmQtPmFkYml0cykgLSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDUxMjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kdDMwMDBfYWk7CS8qIFhYWCAqLworCXMtPmRvX2NtZCA9IGR0M2tfYWlfY21kOworCXMtPmRvX2NtZHRlc3QgPSBkdDNrX2FpX2NtZHRlc3Q7CisJcy0+Y2FuY2VsID0gZHQza19haV9jYW5jZWw7CisKKwlzKys7CisJLyogYW8gc3Vic3lzdGVtICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyOworCXMtPmluc25fcmVhZCA9IGR0M2tfYW9faW5zbl9yZWFkOworCXMtPmluc25fd3JpdGUgPSBkdDNrX2FvX2luc247CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNfYm9hcmQtPmRhYml0cykgLSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCisJcysrOworCS8qIGRpbyBzdWJzeXN0ZW0gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fY29uZmlnID0gZHQza19kaW9faW5zbl9jb25maWc7CisJcy0+aW5zbl9iaXRzID0gZHQza19kaW9faW5zbl9iaXRzOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXMrKzsKKwkvKiBtZW0gc3Vic3lzdGVtICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX01FTU9SWTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMHgxMDAwOworCXMtPmluc25fcmVhZCA9IGR0M2tfbWVtX2luc25fcmVhZDsKKwlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisKKyNpZiAwCisJcysrOworCS8qIHByb2Mgc3Vic3lzdGVtICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BST0M7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MzAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldnByaXYtPnBoeXNfYWRkcikgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJCWlmIChkZXZwcml2LT5pb19hZGRyKQorCQkJaW91bm1hcChkZXZwcml2LT5pb19hZGRyKTsKKwl9CisJLyogWFhYICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkdF9wY2lfZmluZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmZyb20sIGludCAqYm9hcmQpOworc3RhdGljIGludCBzZXR1cF9wY2koc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgaW50IGR0X3BjaV9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpCit7CisJaW50IGJvYXJkOworCWludCByZXQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKworCXBjaWRldiA9IE5VTEw7CisJd2hpbGUgKChwY2lkZXYgPSBkdF9wY2lfZmluZF9kZXZpY2UocGNpZGV2LCAmYm9hcmQpKSAhPSBOVUxMKSB7CisJCWlmICgoYnVzID09IDAgJiYgc2xvdCA9PSAwKSB8fAorCQkJKHBjaWRldi0+YnVzLT5udW1iZXIgPT0gYnVzICYmCisJCQkgUENJX1NMT1QocGNpZGV2LT5kZXZmbikgPT0gc2xvdCkpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CisKKwlpZiAoYm9hcmQgPj0gMCkKKwkJZGV2LT5ib2FyZF9wdHIgPSBkdDNrX2JvYXJkdHlwZXMgKyBib2FyZDsKKworCWlmICghZGV2cHJpdi0+cGNpX2RldikKKwkJcmV0dXJuIDA7CisKKwlpZiAoKHJldCA9IHNldHVwX3BjaShkZXYpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzZXR1cF9wY2koc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmVzb3VyY2Vfc2l6ZV90IGFkZHI7CisJaW50IHJldDsKKworCXJldCA9IGNvbWVkaV9wY2lfZW5hYmxlKGRldnByaXYtPnBjaV9kZXYsICJkdDMwMDAiKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgMCk7CisJZGV2cHJpdi0+cGh5c19hZGRyID0gYWRkcjsKKwlkZXZwcml2LT5pb19hZGRyID0gaW9yZW1hcChkZXZwcml2LT5waHlzX2FkZHIsIERUMzAwMF9TSVpFKTsKKwlpZiAoIWRldnByaXYtPmlvX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworI2lmIERFQlVHCisJcHJpbnRrKCIweCUwOGxseCBtYXBwZWQgdG8gJXAsICIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGV2cHJpdi0+cGh5c19hZGRyLCBkZXZwcml2LT5pb19hZGRyKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZHRfcGNpX2ZpbmRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpmcm9tLCBpbnQgKmJvYXJkKQoreworCWludCBpOworCisJZm9yIChmcm9tID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9EVCwgUENJX0FOWV9JRCwgZnJvbSk7CisJCWZyb20gIT0gTlVMTDsKKwkJZnJvbSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfRFQsIFBDSV9BTllfSUQsIGZyb20pKSB7CisJCWZvciAoaSA9IDA7IGkgPCBuX2R0M2tfYm9hcmRzOyBpKyspIHsKKwkJCWlmIChmcm9tLT5kZXZpY2UgPT0gZHQza19ib2FyZHR5cGVzW2ldLmRldmljZV9pZCkgeworCQkJCSpib2FyZCA9IGk7CisJCQkJcmV0dXJuIGZyb207CisJCQl9CisJCX0KKwkJcHJpbnRrKCJ1bmtub3duIERhdGEgVHJhbnNsYXRpb24gUENJIGRldmljZSBmb3VuZCB3aXRoIGRldmljZV9pZD0weCUwNHhcbiIsIGZyb20tPmRldmljZSk7CisJfQorCSpib2FyZCA9IC0xOworCXJldHVybiBmcm9tOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCmluZGV4IGYyZDIxNzMuLmNjNGMwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKQEAgLTMwMCwyMiArMzAwLDIyIEBACiAJc3RydWN0IGNvbWVkaV9kdDk4MTIgKmNvbWVkaTsKIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8xMF9haW5fcmFuZ2UgPSB7IDEsIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBkdDk4MTJfMTBfYWluX3JhbmdlID0geyAxLCB7CiAJCQlCSVBfUkFOR0UoMTApLAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8ycHQ1X2Fpbl9yYW5nZSA9IHsgMSwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8ycHQ1X2Fpbl9yYW5nZSA9IHsgMSwgewogCQkJVU5JX1JBTkdFKDIuNSksCiAJfQogfTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgZHQ5ODEyXzEwX2FvdXRfcmFuZ2UgPSB7IDEsIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBkdDk4MTJfMTBfYW91dF9yYW5nZSA9IHsgMSwgewogCQkJQklQX1JBTkdFKDEwKSwKIAl9CiB9OwogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBkdDk4MTJfMnB0NV9hb3V0X3JhbmdlID0geyAxLCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgZHQ5ODEyXzJwdDVfYW91dF9yYW5nZSA9IHsgMSwgewogCQkJVU5JX1JBTkdFKDIuNSksCiAJfQogfTsKQEAgLTg5MiwxMiArODkyLDEyIEBACiAgKiBDb21lZGkgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgZHQ5ODEyX2NvbWVkaV9vcGVuKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGR0OTgxMl9jb21lZGlfb3BlbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWRvd24oJmRldnByaXYtPnNsb3QtPm11dGV4KTsKIAlpZiAoZGV2cHJpdi0+c2xvdC0+dXNiKSB7CiAJCS8qIFdlIGhhdmUgYW4gYXR0YWNoZWQgZGV2aWNlLCBmaWxsIGluIGN1cnJlbnQgcmFuZ2UgaW5mbyAqLwotCQljb21lZGlfc3ViZGV2aWNlICpzOworCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCQlzID0gJmRldi0+c3ViZGV2aWNlc1swXTsKIAkJcy0+bl9jaGFuID0gODsKQEAgLTk0MCw4ICs5NDAsOCBAQAogCXVwKCZkZXZwcml2LT5zbG90LT5tdXRleCk7CiB9CiAKLXN0YXRpYyBpbnQgZHQ5ODEyX2RpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgZHQ5ODEyX2RpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IG47CiAJdTggYml0cyA9IDA7CkBAIC05NTIsOCArOTUyLDggQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBkdDk4MTJfZG9fd2luc24oY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBkdDk4MTJfZG9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgbjsKIAl1OCBiaXRzID0gMDsKQEAgLTk3MCw4ICs5NzAsOCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGR0OTgxMl9haV9yaW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGR0OTgxMl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuOwogCkBAIC05ODUsOCArOTg1LDggQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBkdDk4MTJfYW9fcmluc24oY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBkdDk4MTJfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgbjsKIAl1MTYgdmFsdWU7CkBAIC05OTksOCArOTk5LDggQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBkdDk4MTJfYW9fd2luc24oY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBkdDk4MTJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgbjsKIApAQCAtMTAwOSwxMCArMTAwOSwxMCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGR0OTgxMl9hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCkKK3N0YXRpYyBpbnQgZHQ5ODEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJaW50IGk7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCWRldi0+Ym9hcmRfbmFtZSA9ICJkdDk4MTIiOwogCkBAIC0xMTAzLDEyICsxMTAzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHQ5ODEyX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR0OTgxMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHQ5ODEyX2NvbWVkaV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHQ5ODEyX2NvbWVkaV9kcml2ZXIgPSB7CiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogCS5kcml2ZXJfbmFtZSA9ICJkdDk4MTIiLAogCS5hdHRhY2ggPSBkdDk4MTJfYXR0YWNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDdiYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZmw1MTIuYworICAgIEFuZGVycyBHbmlzdHJ1cCA8ZXgxOEBrYWxtYW4uaWF1LmR0dS5kaz4KKyovCisKKy8qCitEcml2ZXI6IGZsNTEyCitEZXNjcmlwdGlvbjogdW5rbm93bgorQXV0aG9yOiBBbmRlcnMgR25pc3RydXAgPGV4MThAa2FsbWFuLmlhdS5kdHUuZGs+CitEZXZpY2VzOiBbdW5rbm93bl0gRkw1MTIgKGZsNTEyKQorU3RhdHVzOiB1bmtub3duCisKK0RpZ2l0YWwgSS9PIGlzIG5vdCBzdXBwb3J0ZWQuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisqLworCisjZGVmaW5lIERFQlVHIDAKKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBGTDUxMl9TSVpFIDE2CQkvKiB0aGUgc2l6ZSBvZiB0aGUgdXNlZCBtZW1vcnkgKi8KK3N0cnVjdCBmbDUxMl9wcml2YXRlIHsKKworCXNob3J0IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGZsNTEyX3ByaXZhdGUgKikgZGV2LT5wcml2YXRlKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZmw1MTIgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJfQorfTsKKworc3RhdGljIGludCBmbDUxMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBmbDUxMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2ZsNTEyID0geworICAgICAgZHJpdmVyX25hbWU6ImZsNTEyIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpmbDUxMl9hdHRhY2gsCisgICAgICBkZXRhY2g6Zmw1MTJfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9mbDUxMik7CisKK3N0YXRpYyBpbnQgZmw1MTJfYWlfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBmbDUxMl9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGZsNTEyX2FvX2luc25fcmVhZGJhY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworLyoKKyAqIGZsNTEyX2FpX2luc24gOiB0aGlzIGlzIHRoZSBhbmFsb2cgaW5wdXQgZnVuY3Rpb24KKyAqLworc3RhdGljIGludCBmbDUxMl9haV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwl1bnNpZ25lZCBpbnQgbG9fYnl0ZSwgaGlfYnl0ZTsKKwljaGFyIGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGRldi0+aW9iYXNlOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgewkvKiBzYW1wbGUgbiB0aW1lcyBvbiBzZWxlY3RlZCBjaGFubmVsICovCisJCS8qIFhYWCBwcm9iYWJseSBjYW4gbW92ZSBuZXh0IHN0ZXAgb3V0IG9mIGZvcigpIGxvb3AgLS0gd2lsbCBtYWtlCisJCSAqIEFJIGEgbGl0dGxlIGJpdCBmYXN0ZXIuICovCisJCW91dGIoY2hhbiwgaW9iYXNlICsgMik7CS8qIHNlbGVjdCBjaGFuICovCisJCW91dGIoMCwgaW9iYXNlICsgMyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJLyogWFhYIHNob3VsZCB0ZXN0ICJkb25lIiBmbGFnIGluc3RlYWQgb2YgZGVsYXkgKi8KKwkJY29tZWRpX3VkZWxheSgzMCk7CS8qIHNsZWVwIDMwIHVzZWMgKi8KKwkJbG9fYnl0ZSA9IGluYihpb2Jhc2UgKyAyKTsJLyogbG93IDggYnl0ZSAqLworCQloaV9ieXRlID0gaW5iKGlvYmFzZSArIDMpICYgMHhmOwkvKiBoaWdoIDQgYml0IGFuZCBtYXNrICovCisJCWRhdGFbbl0gPSBsb19ieXRlICsgKGhpX2J5dGUgPDwgOCk7CisJfQorCXJldHVybiBuOworfQorCisvKgorICogZmw1MTJfYW9faW5zbiA6IHVzZWQgdG8gd3JpdGUgdG8gYSBEQSBwb3J0IG4gdGltZXMKKyAqLworc3RhdGljIGludCBmbDUxMl9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvKiBnZXQgY2hhbiB0byB3cml0ZSAqLworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2LT5pb2Jhc2U7CS8qIGdldCBiYXNlIGFkZHJlc3MgICovCisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CS8qIHdyaXRlIG4gZGF0YSBzZXQgKi8KKwkJb3V0YihkYXRhW25dICYgMHgwZmYsIGlvYmFzZSArIDQgKyAyICogY2hhbik7CS8qIHdyaXRlIGxvdyBieXRlICAgKi8KKwkJb3V0YigoZGF0YVtuXSAmIDB4ZjAwKSA+PiA4LCBpb2Jhc2UgKyA0ICsgMiAqIGNoYW4pOwkvKiB3cml0ZSBoaWdoIGJ5dGUgICovCisJCWluYihpb2Jhc2UgKyA0ICsgMiAqIGNoYW4pOwkvKiB0cmlnICovCisKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW25dOworCX0KKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIGZsNTEyX2FvX2luc25fcmVhZGJhY2sgOiB1c2VkIHRvIHJlYWQgcHJldmlvdXMgdmFsdWVzIHdyaXR0ZW4gdG8KKyAqIERBIHBvcnQKKyAqLworc3RhdGljIGludCBmbDUxMl9hb19pbnNuX3JlYWRiYWNrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBzdGFydCBhdHRhY2gKKyAqLworc3RhdGljIGludCBmbDUxMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CS8qIHBvaW50ZXIgdG8gdGhlIHN1YmRldmljZToKKwkJCQkgICBBbmFsb2cgaW4sIEFuYWxvZyBvdXQsICggbm90IG1hZGUgLT5hbmQgRGlnaXRhbCBJTykgKi8KKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpOiVkIGZsNTEyOiAweCUwNGx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRkw1MTJfU0laRSwgImZsNTEyIikpIHsKKwkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gImZsNTEyIjsKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZmw1MTJfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKyNpZiBERUJVRworCXByaW50aygibWFsbG9jIG9rXG4iKTsKKyNlbmRpZgorCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiB0aGlzIGlmIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgc3VwZGV2aWNlcywgMiBoYXZlIGJlZW4gZGVmaW5lZAorCSAqLworCS8qIEFuYWxvZyBpbmRwdXQgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CS8qIGRlZmluZSBzdWJkZXZpY2UgYXMgQW5hbG9nIEluICAgKi8KKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOwkvKiB5b3UgY2FuIHJlYWQgaXQgZnJvbSB1c2Vyc3BhY2UgICovCisJcy0+bl9jaGFuID0gMTY7CQkvKiBOdW1iZXIgb2YgQW5hbG9nIGlucHV0IGNoYW5uZWxzICovCisJcy0+bWF4ZGF0YSA9IDB4MGZmZjsJLyogYWNjZXB0IG9ubHkgMTIgYml0cyBvZiBkYXRhICAgICAqLworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2ZsNTEyOwkvKiBkZXZpY2UgdXNlIG9uZSBvZiB0aGUgcmFuZ2VzICAgICovCisJcy0+aW5zbl9yZWFkID0gZmw1MTJfYWlfaW5zbjsJLyogZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHJlYWQgQUQgICAqLworCXByaW50aygiY29tZWRpOiBmbDUxMjogc3ViZGV2aWNlIDAgaW5pdGlhbGl6ZWRcbiIpOworCisJLyogQW5hbG9nIG91dHB1dCAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsJLyogZGVmaW5lIHN1YmRldmljZSBhcyBBbmFsb2cgT1VUICAgKi8KKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CS8qIHlvdSBjYW4gd3JpdGUgaXQgZnJvbSB1c2Vyc3BhY2UgICovCisJcy0+bl9jaGFuID0gMjsJCS8qIE51bWJlciBvZiBBbmFsb2cgb3V0cHV0IGNoYW5uZWxzICovCisJcy0+bWF4ZGF0YSA9IDB4MGZmZjsJLyogYWNjZXB0IG9ubHkgMTIgYml0cyBvZiBkYXRhICAgICAgKi8KKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9mbDUxMjsJLyogZGV2aWNlIHVzZSBvbmUgb2YgdGhlIHJhbmdlcyAgICAgKi8KKwlzLT5pbnNuX3dyaXRlID0gZmw1MTJfYW9faW5zbjsJLyogZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdyaXRlIERBICAgKi8KKwlzLT5pbnNuX3JlYWQgPSBmbDUxMl9hb19pbnNuX3JlYWRiYWNrOwkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gcmVhZGluZyBEQSAgICovCisJcHJpbnRrKCJjb21lZGk6IGZsNTEyOiBzdWJkZXZpY2UgMSBpbml0aWFsaXplZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmbDUxMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRkw1MTJfU0laRSk7CisJcHJpbnRrKCJjb21lZGklZDogZmw1MTI6IGR1bW15IGkgZGV0YWNoXG4iLCBkZXYtPm1pbm9yKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9nc2NfaHBkaS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllNWM4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9nc2NfaHBkaS5jCkBAIC0wLDAgKzEsMTA2MCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9nc2NfaHBkaS5jCisgICAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIEdlbmVyYWwgU3RhbmRhcmRzIENvcnBvcmF0aW9uIEhpZ2gKKyAgICBTcGVlZCBQYXJhbGxlbCBEaWdpdGFsIEludGVyZmFjZSByczQ4NSBib2FyZHMuCisKKyAgICBBdXRob3I6ICBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgICAgQ29weXJpZ2h0IChDKSAyMDAzIENvaGVyZW50IEltYWdpbmcgU3lzdGVtcworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5Ny04IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKworRHJpdmVyOiBnc2NfaHBkaQorRGVzY3JpcHRpb246IEdlbmVyYWwgU3RhbmRhcmRzIENvcnBvcmF0aW9uIEhpZ2gKKyAgICBTcGVlZCBQYXJhbGxlbCBEaWdpdGFsIEludGVyZmFjZSByczQ4NSBib2FyZHMKK0F1dGhvcjogRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorU3RhdHVzOiBvbmx5IHJlY2VpdmUgbW9kZSB3b3JrcywgdHJhbnNtaXQgbm90IHN1cHBvcnRlZAorVXBkYXRlZDogMjAwMy0wMi0yMAorRGV2aWNlczogW0dlbmVyYWwgU3RhbmRhcmRzIENvcnBvcmF0aW9uXSBQQ0ktSFBESTMyIChnc2NfaHBkaSksCisgIFBNQy1IUERJMzIKKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKworVGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBocGRpIG1vZGVscyBhdmFpbGFibGUgZnJvbSBHU0MgZm9yIHdoaWNoCitzdXBwb3J0IGNvdWxkIGJlIGFkZGVkIHRvIHRoaXMgZHJpdmVyLgorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICJwbHg5MDgwLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKK3N0YXRpYyBpbnQgaHBkaV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBocGRpX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7Cit2b2lkIGFib3J0X2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpOworc3RhdGljIGludCBocGRpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgaHBkaV9jbWRfdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgaHBkaV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgaGFuZGxlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgZGlvX2NvbmZpZ19ibG9ja19zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworI3VuZGVmIEhQRElfREVCVUcJCS8vIGRpc2FibGUgZGVidWdnaW5nIG1lc3NhZ2VzCisvLyNkZWZpbmUgSFBESV9ERUJVRyAgICAvLyBlbmFibGUgZGVidWdnaW5nIGNvZGUKKworI2lmZGVmIEhQRElfREVCVUcKKyNkZWZpbmUgREVCVUdfUFJJTlQoZm9ybWF0LCBhcmdzLi4uKSAgcnRfcHJpbnRrKGZvcm1hdCAsICMjIGFyZ3MgKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfUFJJTlQoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgVElNRVJfQkFTRSA1MAkJLy8gMjBNSHogbWFzdGVyIGNsb2NrCisjZGVmaW5lIERNQV9CVUZGRVJfU0laRSAweDEwMDAwCisjZGVmaW5lIE5VTV9ETUFfQlVGRkVSUyA0CisjZGVmaW5lIE5VTV9ETUFfREVTQ1JJUFRPUlMgMjU2CisKKy8vIGluZGljZXMgb2YgYmFzZSBhZGRyZXNzIHJlZ2lvbnMKK2VudW0gYmFzZV9hZGRyZXNzX3JlZ2lvbnMgeworCVBMWDkwODBfQkFERFJJTkRFWCA9IDAsCisJSFBESV9CQUREUklOREVYID0gMiwKK307CisKK2VudW0gaHBkaV9yZWdpc3RlcnMgeworCUZJUk1XQVJFX1JFVl9SRUcgPSAweDAsCisJQk9BUkRfQ09OVFJPTF9SRUcgPSAweDQsCisJQk9BUkRfU1RBVFVTX1JFRyA9IDB4OCwKKwlUWF9QUk9HX0FMTU9TVF9SRUcgPSAweGMsCisJUlhfUFJPR19BTE1PU1RfUkVHID0gMHgxMCwKKwlGRUFUVVJFU19SRUcgPSAweDE0LAorCUZJRk9fUkVHID0gMHgxOCwKKwlUWF9TVEFUVVNfQ09VTlRfUkVHID0gMHgxYywKKwlUWF9MSU5FX1ZBTElEX0NPVU5UX1JFRyA9IDB4MjAsCisJVFhfTElORV9JTlZBTElEX0NPVU5UX1JFRyA9IDB4MjQsCisJUlhfU1RBVFVTX0NPVU5UX1JFRyA9IDB4MjgsCisJUlhfTElORV9DT1VOVF9SRUcgPSAweDJjLAorCUlOVEVSUlVQVF9DT05UUk9MX1JFRyA9IDB4MzAsCisJSU5URVJSVVBUX1NUQVRVU19SRUcgPSAweDM0LAorCVRYX0NMT0NLX0RJVklERVJfUkVHID0gMHgzOCwKKwlUWF9GSUZPX1NJWkVfUkVHID0gMHg0MCwKKwlSWF9GSUZPX1NJWkVfUkVHID0gMHg0NCwKKwlUWF9GSUZPX1dPUkRTX1JFRyA9IDB4NDgsCisJUlhfRklGT19XT1JEU19SRUcgPSAweDRjLAorCUlOVEVSUlVQVF9FREdFX0xFVkVMX1JFRyA9IDB4NTAsCisJSU5URVJSVVBUX1BPTEFSSVRZX1JFRyA9IDB4NTQsCit9OworCitpbnQgY29tbWFuZF9jaGFubmVsX3ZhbGlkKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCWlmIChjaGFubmVsID09IDAgfHwgY2hhbm5lbCA+IDYpIHsKKwkJcnRfcHJpbnRrKCJnc2NfaHBkaTogYnVnISBpbnZhbGlkIGNhYmxlIGNvbW1hbmQgY2hhbm5lbFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLy8gYml0IGRlZmluaXRpb25zCisKK2VudW0gZmlybXdhcmVfcmV2aXNpb25fYml0cyB7CisJRkVBVFVSRVNfUkVHX1BSRVNFTlRfQklUID0gMHg4MDAwLAorfTsKK2ludCBmaXJtd2FyZV9yZXZpc2lvbih1aW50MzJfdCBmd3JfYml0cykKK3sKKwlyZXR1cm4gZndyX2JpdHMgJiAweGZmOworfQorCitpbnQgcGNiX3JldmlzaW9uKHVpbnQzMl90IGZ3cl9iaXRzKQoreworCXJldHVybiAoZndyX2JpdHMgPj4gOCkgJiAweGZmOworfQorCitpbnQgaHBkaV9zdWJpZCh1aW50MzJfdCBmd3JfYml0cykKK3sKKwlyZXR1cm4gKGZ3cl9iaXRzID4+IDE2KSAmIDB4ZmY7Cit9CisKK2VudW0gYm9hcmRfY29udHJvbF9iaXRzIHsKKwlCT0FSRF9SRVNFVF9CSVQgPSAweDEsCS8qIHdhaXQgMTB1c2VjIGJlZm9yZSBhY2Nlc3NpbmcgZmlmb3MgKi8KKwlUWF9GSUZPX1JFU0VUX0JJVCA9IDB4MiwKKwlSWF9GSUZPX1JFU0VUX0JJVCA9IDB4NCwKKwlUWF9FTkFCTEVfQklUID0gMHgxMCwKKwlSWF9FTkFCTEVfQklUID0gMHgyMCwKKwlERU1BTkRfRE1BX0RJUkVDVElPTl9UWF9CSVQgPSAweDQwLAkvKiBmb3IgY2hhbm5lbCAwLCBjaGFubmVsIDEgY2FuIG9ubHkgdHJhbnNtaXQgKHdoZW4gcHJlc2VudCkgKi8KKwlMSU5FX1ZBTElEX09OX1NUQVRVU19WQUxJRF9CSVQgPSAweDgwLAorCVNUQVJUX1RYX0JJVCA9IDB4MTAsCisJQ0FCTEVfVEhST1RUTEVfRU5BQkxFX0JJVCA9IDB4MjAsCisJVEVTVF9NT0RFX0VOQUJMRV9CSVQgPSAweDgwMDAwMDAwLAorfTsKK3VpbnQzMl90IGNvbW1hbmRfZGlzY3JldGVfb3V0cHV0X2JpdHModW5zaWduZWQgaW50IGNoYW5uZWwsIGludCBvdXRwdXQsCisJaW50IG91dHB1dF92YWx1ZSkKK3sKKwl1aW50MzJfdCBiaXRzID0gMDsKKworCWlmIChjb21tYW5kX2NoYW5uZWxfdmFsaWQoY2hhbm5lbCkgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKG91dHB1dCkgeworCQliaXRzIHw9IDB4MSA8PCAoMTYgKyBjaGFubmVsKTsKKwkJaWYgKG91dHB1dF92YWx1ZSkKKwkJCWJpdHMgfD0gMHgxIDw8ICgyNCArIGNoYW5uZWwpOworCX0gZWxzZQorCQliaXRzIHw9IDB4MSA8PCAoMjQgKyBjaGFubmVsKTsKKworCXJldHVybiBiaXRzOworfQorCitlbnVtIGJvYXJkX3N0YXR1c19iaXRzIHsKKwlDT01NQU5EX0xJTkVfU1RBVFVTX01BU0sgPSAweDdmLAorCVRYX0lOX1BST0dSRVNTX0JJVCA9IDB4ODAsCisJVFhfTk9UX0VNUFRZX0JJVCA9IDB4MTAwLAorCVRYX05PVF9BTE1PU1RfRU1QVFlfQklUID0gMHgyMDAsCisJVFhfTk9UX0FMTU9TVF9GVUxMX0JJVCA9IDB4NDAwLAorCVRYX05PVF9GVUxMX0JJVCA9IDB4ODAwLAorCVJYX05PVF9FTVBUWV9CSVQgPSAweDEwMDAsCisJUlhfTk9UX0FMTU9TVF9FTVBUWV9CSVQgPSAweDIwMDAsCisJUlhfTk9UX0FMTU9TVF9GVUxMX0JJVCA9IDB4NDAwMCwKKwlSWF9OT1RfRlVMTF9CSVQgPSAweDgwMDAsCisJQk9BUkRfSlVNUEVSMF9JTlNUQUxMRURfQklUID0gMHgxMDAwMCwKKwlCT0FSRF9KVU1QRVIxX0lOU1RBTExFRF9CSVQgPSAweDIwMDAwLAorCVRYX09WRVJSVU5fQklUID0gMHgyMDAwMDAsCisJUlhfVU5ERVJSVU5fQklUID0gMHg0MDAwMDAsCisJUlhfT1ZFUlJVTl9CSVQgPSAweDgwMDAwMCwKK307CisKK3VpbnQzMl90IGFsbW9zdF9mdWxsX2JpdHModW5zaWduZWQgaW50IG51bV93b3JkcykKK3sKKy8vIFhYWCBuZWVkIHRvIGFkZCBvciBzdWJ0cmFjdCBvbmU/CisJcmV0dXJuIChudW1fd29yZHMgPDwgMTYpICYgMHhmZjAwMDA7Cit9CisKK3VpbnQzMl90IGFsbW9zdF9lbXB0eV9iaXRzKHVuc2lnbmVkIGludCBudW1fd29yZHMpCit7CisJcmV0dXJuIG51bV93b3JkcyAmIDB4ZmZmZjsKK30KK3Vuc2lnbmVkIGludCBhbG1vc3RfZnVsbF9udW1fd29yZHModWludDMyX3QgYml0cykKK3sKKy8vIFhYWCBuZWVkIHRvIGFkZCBvciBzdWJ0cmFjdCBvbmU/CisJcmV0dXJuIChiaXRzID4+IDE2KSAmIDB4ZmZmZjsKK30KK3Vuc2lnbmVkIGludCBhbG1vc3RfZW1wdHlfbnVtX3dvcmRzKHVpbnQzMl90IGJpdHMpCit7CisJcmV0dXJuIGJpdHMgJiAweGZmZmY7Cit9CisKK2VudW0gZmVhdHVyZXNfYml0cyB7CisJRklGT19TSVpFX1BSRVNFTlRfQklUID0gMHgxLAorCUZJRk9fV09SRFNfUFJFU0VOVF9CSVQgPSAweDIsCisJTEVWRUxfRURHRV9JTlRFUlJVUFRTX1BSRVNFTlRfQklUID0gMHg0LAorCUdQSU9fU1VQUE9SVEVEX0JJVCA9IDB4OCwKKwlQTFhfRE1BX0NIMV9TVVBQT1JURURfQklUID0gMHgxMCwKKwlPVkVSUlVOX1VOREVSUlVOX1NVUFBPUlRFRF9CSVQgPSAweDIwLAorfTsKKworZW51bSBpbnRlcnJ1cHRfc291cmNlcyB7CisJRlJBTUVfVkFMSURfU1RBUlRfSU5UUiA9IDAsCisJRlJBTUVfVkFMSURfRU5EX0lOVFIgPSAxLAorCVRYX0ZJRk9fRU1QVFlfSU5UUiA9IDgsCisJVFhfRklGT19BTE1PU1RfRU1QVFlfSU5UUiA9IDksCisJVFhfRklGT19BTE1PU1RfRlVMTF9JTlRSID0gMTAsCisJVFhfRklGT19GVUxMX0lOVFIgPSAxMSwKKwlSWF9FTVBUWV9JTlRSID0gMTIsCisJUlhfQUxNT1NUX0VNUFRZX0lOVFIgPSAxMywKKwlSWF9BTE1PU1RfRlVMTF9JTlRSID0gMTQsCisJUlhfRlVMTF9JTlRSID0gMTUsCit9OworaW50IGNvbW1hbmRfaW50cl9zb3VyY2UodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJaWYgKGNvbW1hbmRfY2hhbm5lbF92YWxpZChjaGFubmVsKSA9PSAwKQorCQljaGFubmVsID0gMTsKKwlyZXR1cm4gY2hhbm5lbCArIDE7Cit9CisKK3VpbnQzMl90IGludHJfYml0KGludCBpbnRlcnJ1cHRfc291cmNlKQoreworCXJldHVybiAweDEgPDwgaW50ZXJydXB0X3NvdXJjZTsKK30KKwordWludDMyX3QgdHhfY2xvY2tfZGl2aXNvcl9iaXRzKHVuc2lnbmVkIGludCBkaXZpc29yKQoreworCXJldHVybiBkaXZpc29yICYgMHhmZjsKK30KKwordW5zaWduZWQgaW50IGZpZm9fc2l6ZSh1aW50MzJfdCBmaWZvX3NpemVfYml0cykKK3sKKwlyZXR1cm4gZmlmb19zaXplX2JpdHMgJiAweGZmZmZmOworfQorCit1bnNpZ25lZCBpbnQgZmlmb193b3Jkcyh1aW50MzJfdCBmaWZvX3dvcmRzX2JpdHMpCit7CisJcmV0dXJuIGZpZm9fd29yZHNfYml0cyAmIDB4ZmZmZmY7Cit9CisKK3VpbnQzMl90IGludHJfZWRnZV9iaXQoaW50IGludGVycnVwdF9zb3VyY2UpCit7CisJcmV0dXJuIDB4MSA8PCBpbnRlcnJ1cHRfc291cmNlOworfQorCit1aW50MzJfdCBpbnRyX2FjdGl2ZV9oaWdoX2JpdChpbnQgaW50ZXJydXB0X3NvdXJjZSkKK3sKKwlyZXR1cm4gMHgxIDw8IGludGVycnVwdF9zb3VyY2U7Cit9CisKK3N0cnVjdCBocGRpX2JvYXJkIHsKKworCWNoYXIgKm5hbWU7CisJaW50IGRldmljZV9pZDsJCS8vIHBjaSBkZXZpY2UgaWQKKwlpbnQgc3ViZGV2aWNlX2lkOwkvLyBwY2kgc3ViZGV2aWNlIGlkCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBkaV9ib2FyZCBocGRpX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNpLWhwZGkzMiIsCisJICAgICAgZGV2aWNlX2lkOlBDSV9ERVZJQ0VfSURfUExYXzkwODAsCisJICAgICAgc3ViZGV2aWNlX2lkOjB4MjQwMCwKKwkJfSwKKyNpZiAwCisJeworCSAgICAgIG5hbWU6CSJweGktaHBkaTMyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg5NjU2LAorCSAgICAgIHN1YmRldmljZV9pZDoweDI3MDUsCisJCX0sCisjZW5kaWYKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG51bV9ib2FyZHModm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKGhwZGlfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgaHBkaV9ib2FyZCk7Cit9CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShocGRpX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDgwLCBQQ0lfVkVORE9SX0lEX1BMWCwgMHgyNDAwLAorCQkwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBocGRpX3BjaV90YWJsZSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhwZGlfYm9hcmQgKmJvYXJkKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiAoc3RydWN0IGhwZGlfYm9hcmQgKikgZGV2LT5ib2FyZF9wdHI7Cit9CisKK3N0cnVjdCBocGRpX3ByaXZhdGUgeworCisJc3RydWN0IHBjaV9kZXYgKmh3X2RldjsJLy8gcG9pbnRlciB0byBib2FyZCdzIHBjaV9kZXYgc3RydWN0CisJLy8gYmFzZSBhZGRyZXNzZXMgKHBoeXNpY2FsKQorCXJlc291cmNlX3NpemVfdCBwbHg5MDgwX3BoeXNfaW9iYXNlOworCXJlc291cmNlX3NpemVfdCBocGRpX3BoeXNfaW9iYXNlOworCS8vIGJhc2UgYWRkcmVzc2VzIChpb3JlbWFwcGVkKQorCXZvaWQgKnBseDkwODBfaW9iYXNlOworCXZvaWQgKmhwZGlfaW9iYXNlOworCXVpbnQzMl90ICpkaW9fYnVmZmVyW05VTV9ETUFfQlVGRkVSU107CS8vIGRtYSBidWZmZXJzCisJZG1hX2FkZHJfdCBkaW9fYnVmZmVyX3BoeXNfYWRkcltOVU1fRE1BX0JVRkZFUlNdOwkvLyBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgZG1hIGJ1ZmZlcnMKKwlzdHJ1Y3QgcGx4X2RtYV9kZXNjICpkbWFfZGVzYzsJLy8gYXJyYXkgb2YgZG1hIGRlc2NyaXB0b3JzIHJlYWQgYnkgcGx4OTA4MCwgYWxsb2NhdGVkIHRvIGdldCBwcm9wZXIgYWxpZ25tZW50CisJZG1hX2FkZHJfdCBkbWFfZGVzY19waHlzX2FkZHI7CS8vIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZG1hIGRlc2NyaXB0b3IgYXJyYXkKKwl1bnNpZ25lZCBpbnQgbnVtX2RtYV9kZXNjcmlwdG9yczsKKwl1aW50MzJfdCAqZGVzY19kaW9fYnVmZmVyW05VTV9ETUFfREVTQ1JJUFRPUlNdOwkvLyBwb2ludGVyIHRvIHN0YXJ0IG9mIGJ1ZmZlcnMgaW5kZXhlZCBieSBkZXNjcmlwdG9yCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGRtYV9kZXNjX2luZGV4OwkvLyBpbmRleCBvZiB0aGUgZG1hIGRlc2NyaXB0b3IgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZAorCXVuc2lnbmVkIGludCB0eF9maWZvX3NpemU7CisJdW5zaWduZWQgaW50IHJ4X2ZpZm9fc2l6ZTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGRpb19jb3VudDsKKwl2b2xhdGlsZSB1aW50MzJfdCBiaXRzWzI0XTsJLy8gc29mdHdhcmUgY29waWVzIG9mIHZhbHVlcyB3cml0dGVuIHRvIGhwZGkgcmVnaXN0ZXJzCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGJsb2NrX3NpemU7CS8vIG51bWJlciBvZiBieXRlcyBhdCB3aGljaCB0byBnZW5lcmF0ZSBDT01FRElfQ0JfQkxPQ0sgZXZlbnRzCisJdW5zaWduZWQgZGlvX2NvbmZpZ19vdXRwdXQ6MTsKK307CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaHBkaV9wcml2YXRlICpwcml2KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBkZXYtPnByaXZhdGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfaHBkaSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJnc2NfaHBkaSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6aHBkaV9hdHRhY2gsCisgICAgICBkZXRhY2g6aHBkaV9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9ocGRpLCBocGRpX3BjaV90YWJsZSk7CisKK3N0YXRpYyBpbnQgZGlvX2NvbmZpZ19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXByaXYoZGV2KS0+ZGlvX2NvbmZpZ19vdXRwdXQgPSAxOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXByaXYoZGV2KS0+ZGlvX2NvbmZpZ19vdXRwdXQgPSAwOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJcHJpdihkZXYpLT4KKwkJCWRpb19jb25maWdfb3V0cHV0ID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfQkxPQ0tfU0laRToKKwkJcmV0dXJuIGRpb19jb25maWdfYmxvY2tfc2l6ZShkZXYsIGRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9wbHhfaW50ZXJydXB0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl3cml0ZWwoMCwgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKTsKK30KKworLy8gaW5pdGlhbGl6ZSBwbHg5MDgwIGNoaXAKK3N0YXRpYyB2b2lkIGluaXRfcGx4OTA4MChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1aW50MzJfdCBiaXRzOworCXZvaWQgKnBseF9pb2Jhc2UgPSBwcml2KGRldiktPnBseDkwODBfaW9iYXNlOworCisJLy8gcGx4OTA4MCBkdW1wCisJREVCVUdfUFJJTlQoIiBwbHggaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0lOVFJDU19SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBpZCBiaXRzIDB4JXhcbiIsIHJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfSURfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggY29udHJvbCByZWcgMHgleFxuIiwKKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9DT05UUk9MX1JFRykpOworCisJREVCVUdfUFJJTlQoIiBwbHggcmV2aXNpb24gMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9SRVZJU0lPTl9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAwIG1vZGUgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX01PREVfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMSBtb2RlIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMV9NT0RFX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgcGNpIGFkZHJlc3MgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgbG9jYWwgYWRkcmVzcyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfTE9DQUxfQUREUkVTU19SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAwIHRyYW5zZmVyIHNpemUgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX1RSQU5TRkVSX1NJWkVfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBkZXNjcmlwdG9yIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgY29tbWFuZCBzdGF0dXMgMHgleFxuIiwKKwkJcmVhZGIocGx4X2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgdGhyZXNob2xkIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9USFJFU0hPTERfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggYmlnZW5kIDB4JXhcbiIsIHJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfQklHRU5EX1JFRykpOworI2lmZGVmIF9fQklHX0VORElBTgorCWJpdHMgPSBCSUdFTkRfRE1BMCB8IEJJR0VORF9ETUExOworI2Vsc2UKKwliaXRzID0gMDsKKyNlbmRpZgorCXdyaXRlbChiaXRzLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0JJR0VORF9SRUcpOworCisJZGlzYWJsZV9wbHhfaW50ZXJydXB0cyhkZXYpOworCisJYWJvcnRfZG1hKGRldiwgMCk7CisJYWJvcnRfZG1hKGRldiwgMSk7CisKKwkvLyBjb25maWd1cmUgZG1hMCBtb2RlCisJYml0cyA9IDA7CisJLy8gZW5hYmxlIHJlYWR5IGlucHV0CisJYml0cyB8PSBQTFhfRE1BX0VOX1JFQURZSU5fQklUOworCS8vIGVuYWJsZSBkbWEgY2hhaW5pbmcKKwliaXRzIHw9IFBMWF9FTl9DSEFJTl9CSVQ7CisJLy8gZW5hYmxlIGludGVycnVwdCBvbiBkbWEgZG9uZSAocHJvYmFibHkgZG9uJ3QgbmVlZCB0aGlzLCBzaW5jZSBjaGFpbiBuZXZlciBmaW5pc2hlcykKKwliaXRzIHw9IFBMWF9FTl9ETUFfRE9ORV9JTlRSX0JJVDsKKwkvLyBkb24ndCBpbmNyZW1lbnQgbG9jYWwgYWRkcmVzcyBkdXJpbmcgdHJhbnNmZXJzICh3ZSBhcmUgdHJhbnNmZXJyaW5nIGZyb20gYSBmaXhlZCBmaWZvIHJlZ2lzdGVyKQorCWJpdHMgfD0gUExYX0xPQ0FMX0FERFJfQ09OU1RfQklUOworCS8vIHJvdXRlIGRtYSBpbnRlcnJ1cHQgdG8gcGNpIGJ1cworCWJpdHMgfD0gUExYX0RNQV9JTlRSX1BDSV9CSVQ7CisJLy8gZW5hYmxlIGRlbWFuZCBtb2RlCisJYml0cyB8PSBQTFhfREVNQU5EX01PREVfQklUOworCS8vIGVuYWJsZSBsb2NhbCBidXJzdCBtb2RlCisJYml0cyB8PSBQTFhfRE1BX0xPQ0FMX0JVUlNUX0VOX0JJVDsKKwliaXRzIHw9IFBMWF9MT0NBTF9CVVNfMzJfV0lERV9CSVRTOworCXdyaXRlbChiaXRzLCBwbHhfaW9iYXNlICsgUExYX0RNQTBfTU9ERV9SRUcpOworfQorCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfc3ViZGV2aWNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKy8qCWRldi0+d3JpdGVfc3ViZGV2ID0gczsgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9CisJCVNERl9SRUFEQUJMRSB8IFNERl9XUklURUFCTEUgfCBTREZfTFNBTVBMIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDMyOworCXMtPmxlbl9jaGFubGlzdCA9IDMyOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9jb25maWcgPSBkaW9fY29uZmlnX2luc247CisJcy0+ZG9fY21kID0gaHBkaV9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGhwZGlfY21kX3Rlc3Q7CisJcy0+Y2FuY2VsID0gaHBkaV9jYW5jZWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X2hwZGkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdWludDMyX3QgcGx4X2ludGNzcl9iaXRzOworCisJd3JpdGVsKEJPQVJEX1JFU0VUX0JJVCwgcHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIEJPQVJEX0NPTlRST0xfUkVHKTsKKwljb21lZGlfdWRlbGF5KDEwKTsKKworCXdyaXRlbChhbG1vc3RfZW1wdHlfYml0cygzMikgfCBhbG1vc3RfZnVsbF9iaXRzKDMyKSwKKwkJcHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIFJYX1BST0dfQUxNT1NUX1JFRyk7CisJd3JpdGVsKGFsbW9zdF9lbXB0eV9iaXRzKDMyKSB8IGFsbW9zdF9mdWxsX2JpdHMoMzIpLAorCQlwcml2KGRldiktPmhwZGlfaW9iYXNlICsgVFhfUFJPR19BTE1PU1RfUkVHKTsKKworCXByaXYoZGV2KS0+dHhfZmlmb19zaXplID0gZmlmb19zaXplKHJlYWRsKHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKworCQkJVFhfRklGT19TSVpFX1JFRykpOworCXByaXYoZGV2KS0+cnhfZmlmb19zaXplID0gZmlmb19zaXplKHJlYWRsKHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKworCQkJUlhfRklGT19TSVpFX1JFRykpOworCisJd3JpdGVsKDAsIHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBJTlRFUlJVUFRfQ09OVFJPTF9SRUcpOworCisJLy8gZW5hYmxlIGludGVycnVwdHMKKwlwbHhfaW50Y3NyX2JpdHMgPQorCQlJQ1NfQUVSUiB8IElDU19QRVJSIHwgSUNTX1BJRSB8IElDU19QTElFIHwgSUNTX1BBSUUgfCBJQ1NfTElFIHwKKwkJSUNTX0RNQTBfRTsKKwl3cml0ZWwocGx4X2ludGNzcl9iaXRzLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0lOVFJDU19SRUcpOworCisJcmV0dXJuIDA7Cit9CisKKy8vIHNldHVwIGRtYSBkZXNjcmlwdG9ycyBzbyBhIGxpbmsgY29tcGxldGVzIGV2ZXJ5ICd0cmFuc2Zlcl9zaXplJyBieXRlcworc3RhdGljIGludCBzZXR1cF9kbWFfZGVzY3JpcHRvcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IHRyYW5zZmVyX3NpemUpCit7CisJdW5zaWduZWQgaW50IGJ1ZmZlcl9pbmRleCwgYnVmZmVyX29mZnNldDsKKwl1aW50MzJfdCBuZXh0X2JpdHMgPSBQTFhfREVTQ19JTl9QQ0lfQklUIHwgUExYX0lOVFJfVEVSTV9DT1VOVCB8CisJCVBMWF9YRkVSX0xPQ0FMX1RPX1BDSTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICh0cmFuc2Zlcl9zaXplID4gRE1BX0JVRkZFUl9TSVpFKQorCQl0cmFuc2Zlcl9zaXplID0gRE1BX0JVRkZFUl9TSVpFOworCXRyYW5zZmVyX3NpemUgLT0gdHJhbnNmZXJfc2l6ZSAlIHNpemVvZih1aW50MzJfdCk7CisJaWYgKHRyYW5zZmVyX3NpemUgPT0gMCkKKwkJcmV0dXJuIC0xOworCisJREVCVUdfUFJJTlQoIiB0cmFuc2Zlcl9zaXplICVpXG4iLCB0cmFuc2Zlcl9zaXplKTsKKwlERUJVR19QUklOVCgiIGRlc2NyaXB0b3JzIGF0IDB4JWx4XG4iLAorCQkodW5zaWduZWQgbG9uZylwcml2KGRldiktPmRtYV9kZXNjX3BoeXNfYWRkcik7CisKKwlidWZmZXJfb2Zmc2V0ID0gMDsKKwlidWZmZXJfaW5kZXggPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1fRE1BX0RFU0NSSVBUT1JTICYmCisJCWJ1ZmZlcl9pbmRleCA8IE5VTV9ETUFfQlVGRkVSUzsgaSsrKSB7CisJCXByaXYoZGV2KS0+ZG1hX2Rlc2NbaV0ucGNpX3N0YXJ0X2FkZHIgPQorCQkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT4KKwkJCWRpb19idWZmZXJfcGh5c19hZGRyW2J1ZmZlcl9pbmRleF0gKyBidWZmZXJfb2Zmc2V0KTsKKwkJcHJpdihkZXYpLT5kbWFfZGVzY1tpXS5sb2NhbF9zdGFydF9hZGRyID0gY3B1X3RvX2xlMzIoRklGT19SRUcpOworCQlwcml2KGRldiktPmRtYV9kZXNjW2ldLnRyYW5zZmVyX3NpemUgPQorCQkJY3B1X3RvX2xlMzIodHJhbnNmZXJfc2l6ZSk7CisJCXByaXYoZGV2KS0+ZG1hX2Rlc2NbaV0ubmV4dCA9CisJCQljcHVfdG9fbGUzMigocHJpdihkZXYpLT5kbWFfZGVzY19waHlzX2FkZHIgKyAoaSArCisJCQkJCTEpICoKKwkJCQlzaXplb2YocHJpdihkZXYpLT5kbWFfZGVzY1swXSkpIHwgbmV4dF9iaXRzKTsKKworCQlwcml2KGRldiktPmRlc2NfZGlvX2J1ZmZlcltpXSA9CisJCQlwcml2KGRldiktPmRpb19idWZmZXJbYnVmZmVyX2luZGV4XSArCisJCQkoYnVmZmVyX29mZnNldCAvIHNpemVvZih1aW50MzJfdCkpOworCisJCWJ1ZmZlcl9vZmZzZXQgKz0gdHJhbnNmZXJfc2l6ZTsKKwkJaWYgKHRyYW5zZmVyX3NpemUgKyBidWZmZXJfb2Zmc2V0ID4gRE1BX0JVRkZFUl9TSVpFKSB7CisJCQlidWZmZXJfb2Zmc2V0ID0gMDsKKwkJCWJ1ZmZlcl9pbmRleCsrOworCQl9CisKKwkJREVCVUdfUFJJTlQoIiBkZXNjICVpXG4iLCBpKTsKKwkJREVCVUdfUFJJTlQoIiBzdGFydCBhZGRyIHZpcnQgMHglcCwgcGh5cyAweCVseFxuIiwKKwkJCXByaXYoZGV2KS0+ZGVzY19kaW9fYnVmZmVyW2ldLAorCQkJKHVuc2lnbmVkIGxvbmcpcHJpdihkZXYpLT5kbWFfZGVzY1tpXS5wY2lfc3RhcnRfYWRkcik7CisJCURFQlVHX1BSSU5UKCIgbmV4dCAweCVseFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKXByaXYoZGV2KS0+ZG1hX2Rlc2NbaV0ubmV4dCk7CisJfQorCXByaXYoZGV2KS0+bnVtX2RtYV9kZXNjcmlwdG9ycyA9IGk7CisJLy8gZml4IGxhc3QgZGVzY3JpcHRvciB0byBwb2ludCBiYWNrIHRvIGZpcnN0CisJcHJpdihkZXYpLT5kbWFfZGVzY1tpIC0gMV0ubmV4dCA9CisJCWNwdV90b19sZTMyKHByaXYoZGV2KS0+ZG1hX2Rlc2NfcGh5c19hZGRyIHwgbmV4dF9iaXRzKTsKKwlERUJVR19QUklOVCgiIGRlc2MgJWkgbmV4dCBmaXh1cCAweCVseFxuIiwgaSAtIDEsCisJCSh1bnNpZ25lZCBsb25nKXByaXYoZGV2KS0+ZG1hX2Rlc2NbaSAtIDFdLm5leHQpOworCisJcHJpdihkZXYpLT5ibG9ja19zaXplID0gdHJhbnNmZXJfc2l6ZTsKKworCXJldHVybiB0cmFuc2Zlcl9zaXplOworfQorCitzdGF0aWMgaW50IGhwZGlfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IGk7CisJaW50IHJldHZhbDsKKworCXByaW50aygiY29tZWRpJWQ6IGdzY19ocGRpXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBocGRpX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcGNpZGV2ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2JvYXJkcygpICYmIGRldi0+Ym9hcmRfcHRyID09IE5VTEw7IGkrKykgeworCQlkbyB7CisJCQlwY2lkZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX1BMWCwKKwkJCQlocGRpX2JvYXJkc1tpXS5kZXZpY2VfaWQsIFBDSV9WRU5ET1JfSURfUExYLAorCQkJCWhwZGlfYm9hcmRzW2ldLnN1YmRldmljZV9pZCwgcGNpZGV2KTsKKwkJCS8vIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJLy8gYXJlIHdlIG9uIHRoZSB3cm9uZyBidXMvc2xvdD8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBpdC0+b3B0aW9uc1swXSB8fAorCQkJCQlQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSAhPQorCQkJCQlpdC0+b3B0aW9uc1sxXSkKKwkJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAocGNpZGV2KSB7CisJCQkJcHJpdihkZXYpLT5od19kZXYgPSBwY2lkZXY7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBocGRpX2JvYXJkcyArIGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gd2hpbGUgKHBjaWRldiAhPSBOVUxMKTsKKwl9CisJaWYgKGRldi0+Ym9hcmRfcHRyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJnc2NfaHBkaTogbm8gaHBkaSBjYXJkIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcHJpbnRrKCJnc2NfaHBkaTogZm91bmQgJXMgb24gYnVzICVpLCBzbG90ICVpXG4iLCBib2FyZChkZXYpLT5uYW1lLAorCQlwY2lkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSk7CisKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCBkcml2ZXJfaHBkaS5kcml2ZXJfbmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIiBmYWlsZWQgZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCisJLy9Jbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZQorCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkKGRldiktPm5hbWU7CisKKwlwcml2KGRldiktPnBseDkwODBfcGh5c19pb2Jhc2UgPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCBQTFg5MDgwX0JBRERSSU5ERVgpOworCXByaXYoZGV2KS0+aHBkaV9waHlzX2lvYmFzZSA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIEhQRElfQkFERFJJTkRFWCk7CisKKwkvLyByZW1hcCwgd29uJ3Qgd29yayB3aXRoIDIuMCBrZXJuZWxzIGJ1dCB3aG8gY2FyZXMKKwlwcml2KGRldiktPnBseDkwODBfaW9iYXNlID0gaW9yZW1hcChwcml2KGRldiktPnBseDkwODBfcGh5c19pb2Jhc2UsCisJCXBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBQTFg5MDgwX0JBRERSSU5ERVgpKTsKKwlwcml2KGRldiktPmhwZGlfaW9iYXNlID0gaW9yZW1hcChwcml2KGRldiktPmhwZGlfcGh5c19pb2Jhc2UsCisJCXBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBIUERJX0JBRERSSU5ERVgpKTsKKwlpZiAoIXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgfHwgIXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UpIHsKKwkJcHJpbnRrKCIgZmFpbGVkIHRvIHJlbWFwIGlvIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCURFQlVHX1BSSU5UKCIgcGx4OTA4MCByZW1hcHBlZCB0byAweCVwXG4iLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlKTsKKwlERUJVR19QUklOVCgiIGhwZGkgcmVtYXBwZWQgdG8gMHglcFxuIiwgcHJpdihkZXYpLT5ocGRpX2lvYmFzZSk7CisKKwlpbml0X3BseDkwODAoZGV2KTsKKworCS8vIGdldCBpcnEKKwlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCBoYW5kbGVfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCWRyaXZlcl9ocGRpLmRyaXZlcl9uYW1lLCBkZXYpKSB7CisJCXByaW50aygiIHVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIHBjaWRldi0+aXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldi0+aXJxID0gcGNpZGV2LT5pcnE7CisKKwlwcmludGsoIiBpcnEgJXVcbiIsIGRldi0+aXJxKTsKKworCS8vIGFsb2NhdGUgcGNpIGRtYSBidWZmZXJzCisJZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfQlVGRkVSUzsgaSsrKSB7CisJCXByaXYoZGV2KS0+ZGlvX2J1ZmZlcltpXSA9CisJCQlwY2lfYWxsb2NfY29uc2lzdGVudChwcml2KGRldiktPmh3X2RldiwgRE1BX0JVRkZFUl9TSVpFLAorCQkJJnByaXYoZGV2KS0+ZGlvX2J1ZmZlcl9waHlzX2FkZHJbaV0pOworCQlERUJVR19QUklOVCgiZGlvX2J1ZmZlciBhdCB2aXJ0IDB4JXAsIHBoeXMgMHglbHhcbiIsCisJCQlwcml2KGRldiktPmRpb19idWZmZXJbaV0sCisJCQkodW5zaWduZWQgbG9uZylwcml2KGRldiktPmRpb19idWZmZXJfcGh5c19hZGRyW2ldKTsKKwl9CisJLy8gYWxsb2NhdGUgZG1hIGRlc2NyaXB0b3JzCisJcHJpdihkZXYpLT5kbWFfZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQlzaXplb2Yoc3RydWN0IHBseF9kbWFfZGVzYykgKiBOVU1fRE1BX0RFU0NSSVBUT1JTLAorCQkmcHJpdihkZXYpLT5kbWFfZGVzY19waHlzX2FkZHIpOworCWlmIChwcml2KGRldiktPmRtYV9kZXNjX3BoeXNfYWRkciAmIDB4ZikgeworCQlwcmludGsoIiBkbWEgZGVzY3JpcHRvcnMgbm90IHF1YWQtd29yZCBhbGlnbmVkIChidWcpXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dmFsID0gc2V0dXBfZG1hX2Rlc2NyaXB0b3JzKGRldiwgMHgxMDAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IHNldHVwX3N1YmRldmljZXMoZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiBpbml0X2hwZGkoZGV2KTsKK30KKworc3RhdGljIGludCBocGRpX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6IGdzY19ocGRpOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKHByaXYoZGV2KSkgeworCQlpZiAocHJpdihkZXYpLT5od19kZXYpIHsKKwkJCWlmIChwcml2KGRldiktPnBseDkwODBfaW9iYXNlKSB7CisJCQkJZGlzYWJsZV9wbHhfaW50ZXJydXB0cyhkZXYpOworCQkJCWlvdW5tYXAoKHZvaWQgKilwcml2KGRldiktPnBseDkwODBfaW9iYXNlKTsKKwkJCX0KKwkJCWlmIChwcml2KGRldiktPmhwZGlfaW9iYXNlKQorCQkJCWlvdW5tYXAoKHZvaWQgKilwcml2KGRldiktPmhwZGlfaW9iYXNlKTsKKwkJCS8vIGZyZWUgcGNpIGRtYSBidWZmZXJzCisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9CVUZGRVJTOyBpKyspIHsKKwkJCQlpZiAocHJpdihkZXYpLT5kaW9fYnVmZmVyW2ldKQorCQkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJCQkJRE1BX0JVRkZFUl9TSVpFLAorCQkJCQkJcHJpdihkZXYpLT5kaW9fYnVmZmVyW2ldLAorCQkJCQkJcHJpdihkZXYpLT4KKwkJCQkJCWRpb19idWZmZXJfcGh5c19hZGRyW2ldKTsKKwkJCX0KKwkJCS8vIGZyZWUgZG1hIGRlc2NyaXB0b3JzCisJCQlpZiAocHJpdihkZXYpLT5kbWFfZGVzYykKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IHBseF9kbWFfZGVzYykgKgorCQkJCQlOVU1fRE1BX0RFU0NSSVBUT1JTLAorCQkJCQlwcml2KGRldiktPmRtYV9kZXNjLAorCQkJCQlwcml2KGRldiktPmRtYV9kZXNjX3BoeXNfYWRkcik7CisJCQlpZiAocHJpdihkZXYpLT5ocGRpX3BoeXNfaW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKHByaXYoZGV2KS0+aHdfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KHByaXYoZGV2KS0+aHdfZGV2KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaW9fY29uZmlnX2Jsb2NrX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IHJlcXVlc3RlZF9ibG9ja19zaXplOworCWludCByZXR2YWw7CisKKwlyZXF1ZXN0ZWRfYmxvY2tfc2l6ZSA9IGRhdGFbMV07CisKKwlyZXR2YWwgPSBzZXR1cF9kbWFfZGVzY3JpcHRvcnMoZGV2LCByZXF1ZXN0ZWRfYmxvY2tfc2l6ZSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkYXRhWzFdID0gcmV0dmFsOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGlfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCWludCBpOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvLyB1bmlxdWVuZXNzIGNoZWNrCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAzMjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGkpIHsKKwkJCQkvLyBYWFggY291bGQgc3VwcG9ydCA4IGNoYW5uZWxzIG9yIDE2IGNoYW5uZWxzCisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImNoYW5saXN0IG11c3QgYmUgY2hhbm5lbHMgMCB0byAzMSBpbiBvcmRlciIpOworCQkJCWVycisrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGRpX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaWYgKHByaXYoZGV2KS0+ZGlvX2NvbmZpZ19vdXRwdXQpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCXJldHVybiBkaV9jbWRfdGVzdChkZXYsIHMsIGNtZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBocGRpX3dyaXRlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDMyX3QgYml0cywKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXdyaXRlbChiaXRzIHwgcHJpdihkZXYpLT5iaXRzW29mZnNldCAvIHNpemVvZih1aW50MzJfdCldLAorCQlwcml2KGRldiktPmhwZGlfaW9iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBkaV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1aW50MzJfdCBiaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisKKwlocGRpX3dyaXRlbChkZXYsIFJYX0ZJRk9fUkVTRVRfQklULCBCT0FSRF9DT05UUk9MX1JFRyk7CisKKwlERUJVR19QUklOVCgiaHBkaTogaW4gZGlfY21kXG4iKTsKKworCWFib3J0X2RtYShkZXYsIDApOworCisJcHJpdihkZXYpLT5kbWFfZGVzY19pbmRleCA9IDA7CisKKwkvKiBUaGVzZSByZWdpc3RlciBhcmUgc3VwcG9zZWRseSB1bnVzZWQgZHVyaW5nIGNoYWluZWQgZG1hLAorCSAqIGJ1dCBJIGhhdmUgZm91bmQgdGhhdCBsZWZ0IG92ZXIgdmFsdWVzIGZyb20gbGFzdCBvcGVyYXRpb24KKwkgKiBvY2Nhc2lvbmFsbHkgY2F1c2UgcHJvYmxlbXMgd2l0aCB0cmFuc2ZlciBvZiBmaXJzdCBkbWEKKwkgKiBibG9jay4gIEluaXRpYWxpemluZyB0aGVtIHRvIHplcm8gc2VlbXMgdG8gZml4IHRoZSBwcm9ibGVtLiAqLworCXdyaXRlbCgwLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfVFJBTlNGRVJfU0laRV9SRUcpOworCXdyaXRlbCgwLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHKTsKKwl3cml0ZWwoMCwgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0xPQ0FMX0FERFJFU1NfUkVHKTsKKwkvLyBnaXZlIGxvY2F0aW9uIG9mIGZpcnN0IGRtYSBkZXNjcmlwdG9yCisJYml0cyA9IHByaXYoZGV2KS0+CisJCWRtYV9kZXNjX3BoeXNfYWRkciB8IFBMWF9ERVNDX0lOX1BDSV9CSVQgfCBQTFhfSU5UUl9URVJNX0NPVU5UIHwKKwkJUExYX1hGRVJfTE9DQUxfVE9fUENJOworCXdyaXRlbChiaXRzLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfREVTQ1JJUFRPUl9SRUcpOworCisJLy8gc3BpbmxvY2sgZm9yIHBseCBkbWEgY29udHJvbC9zdGF0dXMgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJLy8gZW5hYmxlIGRtYSB0cmFuc2ZlcgorCXdyaXRlYihQTFhfRE1BX0VOX0JJVCB8IFBMWF9ETUFfU1RBUlRfQklUIHwgUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJCXByaXYoZGV2KS0+ZGlvX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKKwllbHNlCisJCXByaXYoZGV2KS0+ZGlvX2NvdW50ID0gMTsKKworCS8vIGNsZWFyIG92ZXIvdW5kZXIgcnVuIHN0YXR1cyBmbGFncworCXdyaXRlbChSWF9VTkRFUlJVTl9CSVQgfCBSWF9PVkVSUlVOX0JJVCwKKwkJcHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIEJPQVJEX1NUQVRVU19SRUcpOworCS8vIGVuYWJsZSBpbnRlcnJ1cHRzCisJd3JpdGVsKGludHJfYml0KFJYX0ZVTExfSU5UUiksCisJCXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBJTlRFUlJVUFRfQ09OVFJPTF9SRUcpOworCisJREVCVUdfUFJJTlQoImhwZGk6IHN0YXJ0aW5nIHJ4XG4iKTsKKwlocGRpX3dyaXRlbChkZXYsIFJYX0VOQUJMRV9CSVQsIEJPQVJEX0NPTlRST0xfUkVHKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwZGlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKHByaXYoZGV2KS0+ZGlvX2NvbmZpZ19vdXRwdXQpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCXJldHVybiBkaV9jbWQoZGV2LCBzKTsKK30KKworc3RhdGljIHZvaWQgZHJhaW5fZG1hX2J1ZmZlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gZGV2LT5yZWFkX3N1YmRldi0+YXN5bmM7CisJdWludDMyX3QgbmV4dF90cmFuc2Zlcl9hZGRyOworCWludCBqOworCWludCBudW1fc2FtcGxlcyA9IDA7CisJdm9pZCAqcGNpX2FkZHJfcmVnOworCisJaWYgKGNoYW5uZWwpCisJCXBjaV9hZGRyX3JlZyA9CisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfUENJX0FERFJFU1NfUkVHOworCWVsc2UKKwkJcGNpX2FkZHJfcmVnID0KKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUc7CisKKwkvLyBsb29wIHVudGlsIHdlIGhhdmUgcmVhZCBhbGwgdGhlIGZ1bGwgYnVmZmVycworCWogPSAwOworCWZvciAobmV4dF90cmFuc2Zlcl9hZGRyID0gcmVhZGwocGNpX2FkZHJfcmVnKTsKKwkJKG5leHRfdHJhbnNmZXJfYWRkciA8CisJCQlsZTMyX3RvX2NwdShwcml2KGRldiktPmRtYV9kZXNjW3ByaXYoZGV2KS0+CisJCQkJCWRtYV9kZXNjX2luZGV4XS5wY2lfc3RhcnRfYWRkcikKKwkJCXx8IG5leHRfdHJhbnNmZXJfYWRkciA+PQorCQkJbGUzMl90b19jcHUocHJpdihkZXYpLT5kbWFfZGVzY1twcml2KGRldiktPgorCQkJCQlkbWFfZGVzY19pbmRleF0ucGNpX3N0YXJ0X2FkZHIpICsKKwkJCXByaXYoZGV2KS0+YmxvY2tfc2l6ZSkKKwkJJiYgaiA8IHByaXYoZGV2KS0+bnVtX2RtYV9kZXNjcmlwdG9yczsgaisrKSB7CisJCS8vIHRyYW5zZmVyIGRhdGEgZnJvbSBkbWEgYnVmZmVyIHRvIGNvbWVkaSBidWZmZXIKKwkJbnVtX3NhbXBsZXMgPSBwcml2KGRldiktPmJsb2NrX3NpemUgLyBzaXplb2YodWludDMyX3QpOworCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCQlpZiAobnVtX3NhbXBsZXMgPiBwcml2KGRldiktPmRpb19jb3VudCkKKwkJCQludW1fc2FtcGxlcyA9IHByaXYoZGV2KS0+ZGlvX2NvdW50OworCQkJcHJpdihkZXYpLT5kaW9fY291bnQgLT0gbnVtX3NhbXBsZXM7CisJCX0KKwkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihkZXYtPnJlYWRfc3ViZGV2LAorCQkJcHJpdihkZXYpLT5kZXNjX2Rpb19idWZmZXJbcHJpdihkZXYpLT5kbWFfZGVzY19pbmRleF0sCisJCQludW1fc2FtcGxlcyAqIHNpemVvZih1aW50MzJfdCkpOworCQlwcml2KGRldiktPmRtYV9kZXNjX2luZGV4Kys7CisJCXByaXYoZGV2KS0+ZG1hX2Rlc2NfaW5kZXggJT0gcHJpdihkZXYpLT5udW1fZG1hX2Rlc2NyaXB0b3JzOworCisJCURFQlVHX1BSSU5UKCJuZXh0IGRlc2MgYWRkciAweCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpCisJCQlwcml2KGRldiktPmRtYV9kZXNjW3ByaXYoZGV2KS0+ZG1hX2Rlc2NfaW5kZXhdLm5leHQpOworCQlERUJVR19QUklOVCgicGNpIGFkZHIgcmVnIDB4JXhcbiIsIG5leHRfdHJhbnNmZXJfYWRkcik7CisJfQorCS8vIFhYWCBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW4gc29tZWhvdworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaGFuZGxlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXVpbnQzMl90IGhwZGlfaW50cl9zdGF0dXMsIGhwZGlfYm9hcmRfc3RhdHVzOworCXVpbnQzMl90IHBseF9zdGF0dXM7CisJdWludDMyX3QgcGx4X2JpdHM7CisJdWludDhfdCBkbWEwX3N0YXR1cywgZG1hMV9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcGx4X3N0YXR1cyA9IHJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfSU5UUkNTX1JFRyk7CisJaWYgKChwbHhfc3RhdHVzICYgKElDU19ETUEwX0EgfCBJQ1NfRE1BMV9BIHwgSUNTX0xJQSkpID09IDApIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWhwZGlfaW50cl9zdGF0dXMgPSByZWFkbChwcml2KGRldiktPmhwZGlfaW9iYXNlICsgSU5URVJSVVBUX1NUQVRVU19SRUcpOworCWhwZGlfYm9hcmRfc3RhdHVzID0gcmVhZGwocHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIEJPQVJEX1NUQVRVU19SRUcpOworCisJYXN5bmMtPmV2ZW50cyA9IDA7CisKKwlpZiAoaHBkaV9pbnRyX3N0YXR1cykgeworCQlERUJVR19QUklOVCgiaHBkaTogaW50ciBzdGF0dXMgMHgleCwgIiwgaHBkaV9pbnRyX3N0YXR1cyk7CisJCXdyaXRlbChocGRpX2ludHJfc3RhdHVzLAorCQkJcHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIElOVEVSUlVQVF9TVEFUVVNfUkVHKTsKKwl9CisJLy8gc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm9vbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkbWEwX3N0YXR1cyA9IHJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOworCWlmIChwbHhfc3RhdHVzICYgSUNTX0RNQTBfQSkgewkvLyBkbWEgY2hhbiAwIGludGVycnVwdAorCQl3cml0ZWIoKGRtYTBfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHwgUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOworCisJCURFQlVHX1BSSU5UKCJkbWEwIHN0YXR1cyAweCV4XG4iLCBkbWEwX3N0YXR1cyk7CisJCWlmIChkbWEwX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSB7CisJCQlkcmFpbl9kbWFfYnVmZmVycyhkZXYsIDApOworCQl9CisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBkbWEgY2gwIGludGVycnVwdFxuIik7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBzcGluIGxvY2sgbWFrZXMgc3VyZSBub29uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRtYTFfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX0NTX1JFRyk7CisJaWYgKHBseF9zdGF0dXMgJiBJQ1NfRE1BMV9BKQkvLyBYWFgKKwl7CQkJLy8gZG1hIGNoYW4gMSBpbnRlcnJ1cHQKKwkJd3JpdGViKChkbWExX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSB8IFBMWF9DTEVBUl9ETUFfSU5UUl9CSVQsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfQ1NfUkVHKTsKKwkJREVCVUdfUFJJTlQoImRtYTEgc3RhdHVzIDB4JXhcbiIsIGRtYTFfc3RhdHVzKTsKKworCQlERUJVR19QUklOVCgiIGNsZWFyZWQgZG1hIGNoMSBpbnRlcnJ1cHRcbiIpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gY2xlYXIgcG9zc2libGUgcGx4OTA4MCBpbnRlcnJ1cHQgc291cmNlcworCWlmIChwbHhfc3RhdHVzICYgSUNTX0xESUEpIHsJLy8gY2xlYXIgbG9jYWwgZG9vcmJlbGwgaW50ZXJydXB0CisJCXBseF9iaXRzID0gcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9EQlJfT1VUX1JFRyk7CisJCXdyaXRlbChwbHhfYml0cywgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9EQlJfT1VUX1JFRyk7CisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBsb2NhbCBkb29yYmVsbCBiaXRzIDB4JXhcbiIsIHBseF9iaXRzKTsKKwl9CisKKwlpZiAoaHBkaV9ib2FyZF9zdGF0dXMgJiBSWF9PVkVSUlVOX0JJVCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicnggZmlmbyBvdmVycnVuIik7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJREVCVUdfUFJJTlQoImRtYTBfc3RhdHVzIDB4JXhcbiIsCisJCQkoaW50KXJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKworCQkJCVBMWF9ETUEwX0NTX1JFRykpOworCX0KKworCWlmIChocGRpX2JvYXJkX3N0YXR1cyAmIFJYX1VOREVSUlVOX0JJVCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicnggZmlmbyB1bmRlcnJ1biIpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJfQorCisJaWYgKHByaXYoZGV2KS0+ZGlvX2NvdW50ID09IDApCisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKworCURFQlVHX1BSSU5UKCJib2FyZCBzdGF0dXMgMHgleCwgIiwgaHBkaV9ib2FyZF9zdGF0dXMpOworCURFQlVHX1BSSU5UKCJwbHggc3RhdHVzIDB4JXhcbiIsIHBseF9zdGF0dXMpOworCWlmIChhc3luYy0+ZXZlbnRzKQorCQlERUJVR19QUklOVCgiIGV2ZW50cyAweCV4XG4iLCBhc3luYy0+ZXZlbnRzKTsKKworCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgYWJvcnRfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLy8gc3BpbmxvY2sgZm9yIHBseCBkbWEgY29udHJvbC9zdGF0dXMgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlwbHg5MDgwX2Fib3J0X2RtYShwcml2KGRldiktPnBseDkwODBfaW9iYXNlLCBjaGFubmVsKTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaHBkaV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlocGRpX3dyaXRlbChkZXYsIDAsIEJPQVJEX0NPTlRST0xfUkVHKTsKKworCXdyaXRlbCgwLCBwcml2KGRldiktPmhwZGlfaW9iYXNlICsgSU5URVJSVVBUX0NPTlRST0xfUkVHKTsKKworCWFib3J0X2RtYShkZXYsIDApOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMKaW5kZXggNTkxNDRkNy4uMTVmY2UwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYwpAQCAtNjEsNyArNjEsNyBAQAogCiAjZGVmaW5lIElDUF9NVUxUSV9FWFRERUJVRwogCi0vLyBIYXJkd2FyZSB0eXBlcyBvZiB0aGUgY2FyZHMKKy8qICBIYXJkd2FyZSB0eXBlcyBvZiB0aGUgY2FyZHMgKi8KICNkZWZpbmUgVFlQRV9JQ1BfTVVMVEkJMAogCiAjZGVmaW5lIElPUkFOR0VfSUNQX01VTFRJIAkzMgpAQCAtODEsMjAgKzgxLDIwIEBACiAKICNkZWZpbmUgSUNQX01VTFRJX1NJWkUJCTB4MjAJLyogMzIgYnl0ZXMgKi8KIAotLy8gRGVmaW5lIGJpdHMgZnJvbSBBREMgY29tbWFuZC9zdGF0dXMgcmVnaXN0ZXIKKy8qICBEZWZpbmUgYml0cyBmcm9tIEFEQyBjb21tYW5kL3N0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZQlBRENfU1QJCTB4MDAwMQkvKiBTdGFydCBBREMgKi8KICNkZWZpbmUJQURDX0JTWQkJMHgwMDAxCS8qIEFEQyBidXN5ICovCiAjZGVmaW5lIEFEQ19CSQkJMHgwMDEwCS8qIEJpcG9sYXIgaW5wdXQgcmFuZ2UgMSA9IGJpcG9sYXIgKi8KICNkZWZpbmUgQURDX1JBCQkweDAwMjAJLyogSW5wdXQgcmFuZ2UgMCA9IDVWLCAxID0gMTBWICovCiAjZGVmaW5lCUFEQ19ESQkJMHgwMDQwCS8qIERpZmZlcmVudGlhbCBpbnB1dCBtb2RlIDEgPSBkaWZmZXJlbnRpYWwgKi8KIAotLy8gRGVmaW5lIGJpdHMgZnJvbSBEQUMgY29tbWFuZC9zdGF0dXMgcmVnaXN0ZXIKKy8qICBEZWZpbmUgYml0cyBmcm9tIERBQyBjb21tYW5kL3N0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZQlEQUNfU1QJCTB4MDAwMQkvKiBTdGFydCBEQUMgKi8KICNkZWZpbmUgREFDX0JTWQkJMHgwMDAxCS8qIERBQyBidXN5ICovCiAjZGVmaW5lCURBQ19CSQkJMHgwMDEwCS8qIEJpcG9sYXIgaW5wdXQgcmFuZ2UgMSA9IGJpcG9sYXIgKi8KICNkZWZpbmUJREFDX1JBCQkweDAwMjAJLyogSW5wdXQgcmFuZ2UgMCA9IDVWLCAxID0gMTBWICovCiAKLS8vIERlZmluZSBiaXRzIGZyb20gaW50ZXJydXB0IGVuYWJsZS9zdGF0dXMgcmVnaXN0ZXJzCisvKiAgRGVmaW5lIGJpdHMgZnJvbSBpbnRlcnJ1cHQgZW5hYmxlL3N0YXR1cyByZWdpc3RlcnMgKi8KICNkZWZpbmUJQURDX1JFQURZCTB4MDAwMQkvKiBBL2QgY29udmVyc2lvbiByZWFkeSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUJREFDX1JFQURZCTB4MDAwMgkvKiBEL2EgY29udmVyc2lvbiByZWFkeSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUJRE9VVF9FUlJPUgkweDAwMDQJLyogRGlnaXRhbCBvdXRwdXQgZXJyb3IgaW50ZXJydXB0ICovCkBAIC0xMDQsMTEgKzEwNCwxMSBAQAogI2RlZmluZQlDSUUyCQkweDAwNDAJLyogQ291bnRlciAyIG92ZXJydW4gaW50ZXJydXB0ICovCiAjZGVmaW5lCUNJRTMJCTB4MDA4MAkvKiBDb3VudGVyIDMgb3ZlcnJ1biBpbnRlcnJ1cHQgKi8KIAotLy8gVXNlZnVsIGRlZmluaXRpb25zCi0jZGVmaW5lCVN0YXR1c19JUlEJMHgwMGZmCS8vIEFsbCBpbnRlcnJ1cHRzCisvKiAgVXNlZnVsIGRlZmluaXRpb25zICovCisjZGVmaW5lCVN0YXR1c19JUlEJMHgwMGZmCS8qICBBbGwgaW50ZXJydXB0cyAqLwogCi0vLyBEZWZpbmUgYW5hbG9ndWUgcmFuZ2UKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FuYWxvZyA9IHsgNCwgeworLyogIERlZmluZSBhbmFsb2d1ZSByYW5nZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FuYWxvZyA9IHsgNCwgewogCQkJVU5JX1JBTkdFKDUpLAogCQkJVU5JX1JBTkdFKDEwKSwKIAkJCUJJUF9SQU5HRSg1KSwKQEAgLTEyMyw4ICsxMjMsOCBAQAogCUZvcndhcmQgZGVjbGFyYXRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKLXN0YXRpYyBpbnQgaWNwX211bHRpX2RldGFjaChjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgaWNwX211bHRpX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBpY3BfbXVsdGlfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCiAvKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMzMsNzkgKzEzMyw3OSBAQAogKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwY2lfbGlzdF9idWlsZGVkID0gMDsJLyo+MCBsaXN0IG9mIGNhcmQgaXMga25vd24gKi8KIAotdHlwZWRlZiBzdHJ1Y3QgewotCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGRyaXZlciBuYW1lCitzdHJ1Y3QgYm9hcmR0eXBlIHsKKwljb25zdCBjaGFyICpuYW1lOwkvKiAgZHJpdmVyIG5hbWUgKi8KIAlpbnQgZGV2aWNlX2lkOwotCWludCBpb3JhbmdlOwkJLy8gSS9PIHJhbmdlIGxlbgotCWNoYXIgaGF2ZV9pcnE7CQkvLyAxPWNhcmQgc3VwcG9ydCBJUlEKLQljaGFyIGNhcmR0eXBlOwkJLy8gMD1JQ1AgTXVsdGkKLQlpbnQgbl9haWNoYW47CQkvLyBudW0gb2YgQS9EIGNoYW5zCi0JaW50IG5fYWljaGFuZDsJCS8vIG51bSBvZiBBL0QgY2hhbnMgaW4gZGlmZiBtb2RlCi0JaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIEQvQSBjaGFucwotCWludCBuX2RpY2hhbjsJCS8vIG51bSBvZiBESSBjaGFucwotCWludCBuX2RvY2hhbjsJCS8vIG51bSBvZiBETyBjaGFucwotCWludCBuX2N0cnM7CQkvLyBudW0gb2YgY291bnRlcnMKLQlpbnQgYWlfbWF4ZGF0YTsJCS8vIHJlc29sdXRpb24gb2YgQS9ECi0JaW50IGFvX21heGRhdGE7CQkvLyByZXNvbHV0aW9uIG9mIEQvQQotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9haTsJLy8gcmFuZ2VsaXN0IGZvciBBL0QKLQljb25zdCBjaGFyICpyYW5nZWNvZGU7CS8vIHJhbmdlIGNvZGVzIGZvciBwcm9ncmFtbWluZwotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9hbzsJLy8gcmFuZ2VsaXN0IGZvciBEL0EKLX0gYm9hcmR0eXBlOwotCi1zdGF0aWMgY29uc3QgYm9hcmR0eXBlIGJvYXJkdHlwZXNbXSA9IHsKLQl7ImljcF9tdWx0aSIsCQkvLyBEcml2ZXIgbmFtZQotCQkJREVWSUNFX0lELAkvLyBQQ0kgZGV2aWNlIElECi0JCQlJT1JBTkdFX0lDUF9NVUxUSSwJLy8gSS9PIHJhbmdlIGxlbmd0aAotCQkJMSwJLy8gMT1DYXJkIHN1cHBvcnRzIGludGVycnVwdHMKLQkJCVRZUEVfSUNQX01VTFRJLAkvLyBDYXJkIHR5cGUgPSBJQ1AgTVVMVEkKLQkJCTE2LAkvLyBOdW0gb2YgQS9EIGNoYW5uZWxzCi0JCQk4LAkvLyBOdW0gb2YgQS9EIGNoYW5uZWxzIGluIGRpZmYgbW9kZQotCQkJNCwJLy8gTnVtIG9mIEQvQSBjaGFubmVscwotCQkJMTYsCS8vIE51bSBvZiBkaWdpdGFsIGlucHV0cwotCQkJOCwJLy8gTnVtIG9mIGRpZ2l0YWwgb3V0cHV0cwotCQkJNCwJLy8gTnVtIG9mIGNvdW50ZXJzCi0JCQkweDBmZmYsCS8vIFJlc29sdXRpb24gb2YgQS9ECi0JCQkweDBmZmYsCS8vIFJlc29sdXRpb24gb2YgRC9BCi0JCQkmcmFuZ2VfYW5hbG9nLAkvLyBSYW5nZWxpc3QgZm9yIEEvRAotCQkJcmFuZ2VfY29kZXNfYW5hbG9nLAkvLyBSYW5nZSBjb2RlcyBmb3IgcHJvZ3JhbW1pbmcKLQkJJnJhbmdlX2FuYWxvZ30sCS8vIFJhbmdlbGlzdCBmb3IgRC9BCisJaW50IGlvcmFuZ2U7CQkvKiAgSS9PIHJhbmdlIGxlbiAqLworCWNoYXIgaGF2ZV9pcnE7CQkvKiAgMT1jYXJkIHN1cHBvcnQgSVJRICovCisJY2hhciBjYXJkdHlwZTsJCS8qICAwPUlDUCBNdWx0aSAqLworCWludCBuX2FpY2hhbjsJCS8qICBudW0gb2YgQS9EIGNoYW5zICovCisJaW50IG5fYWljaGFuZDsJCS8qICBudW0gb2YgQS9EIGNoYW5zIGluIGRpZmYgbW9kZSAqLworCWludCBuX2FvY2hhbjsJCS8qICBudW0gb2YgRC9BIGNoYW5zICovCisJaW50IG5fZGljaGFuOwkJLyogIG51bSBvZiBESSBjaGFucyAqLworCWludCBuX2RvY2hhbjsJCS8qICBudW0gb2YgRE8gY2hhbnMgKi8KKwlpbnQgbl9jdHJzOwkJLyogIG51bSBvZiBjb3VudGVycyAqLworCWludCBhaV9tYXhkYXRhOwkJLyogIHJlc29sdXRpb24gb2YgQS9EICovCisJaW50IGFvX21heGRhdGE7CQkvKiAgcmVzb2x1dGlvbiBvZiBEL0EgKi8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FpOwkvKiAgcmFuZ2VsaXN0IGZvciBBL0QgKi8KKwljb25zdCBjaGFyICpyYW5nZWNvZGU7CS8qICByYW5nZSBjb2RlcyBmb3IgcHJvZ3JhbW1pbmcgKi8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvKiAgcmFuZ2VsaXN0IGZvciBEL0EgKi8KIH07CiAKLSNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKGJvYXJkdHlwZSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IGJvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CisJeyJpY3BfbXVsdGkiLAkJLyogIERyaXZlciBuYW1lICovCisJCQlERVZJQ0VfSUQsCS8qICBQQ0kgZGV2aWNlIElEICovCisJCQlJT1JBTkdFX0lDUF9NVUxUSSwJLyogIEkvTyByYW5nZSBsZW5ndGggKi8KKwkJCTEsCS8qICAxPUNhcmQgc3VwcG9ydHMgaW50ZXJydXB0cyAqLworCQkJVFlQRV9JQ1BfTVVMVEksCS8qICBDYXJkIHR5cGUgPSBJQ1AgTVVMVEkgKi8KKwkJCTE2LAkvKiAgTnVtIG9mIEEvRCBjaGFubmVscyAqLworCQkJOCwJLyogIE51bSBvZiBBL0QgY2hhbm5lbHMgaW4gZGlmZiBtb2RlICovCisJCQk0LAkvKiAgTnVtIG9mIEQvQSBjaGFubmVscyAqLworCQkJMTYsCS8qICBOdW0gb2YgZGlnaXRhbCBpbnB1dHMgKi8KKwkJCTgsCS8qICBOdW0gb2YgZGlnaXRhbCBvdXRwdXRzICovCisJCQk0LAkvKiAgTnVtIG9mIGNvdW50ZXJzICovCisJCQkweDBmZmYsCS8qICBSZXNvbHV0aW9uIG9mIEEvRCAqLworCQkJMHgwZmZmLAkvKiAgUmVzb2x1dGlvbiBvZiBEL0EgKi8KKwkJCSZyYW5nZV9hbmFsb2csCS8qICBSYW5nZWxpc3QgZm9yIEEvRCAqLworCQkJcmFuZ2VfY29kZXNfYW5hbG9nLAkvKiAgUmFuZ2UgY29kZXMgZm9yIHByb2dyYW1taW5nICovCisJCSZyYW5nZV9hbmFsb2d9LAkvKiAgUmFuZ2VsaXN0IGZvciBEL0EgKi8KK307CiAKLXN0YXRpYyBjb21lZGlfZHJpdmVyIGRyaXZlcl9pY3BfbXVsdGkgPSB7CisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9pY3BfbXVsdGkgPSB7CiAgICAgICBkcml2ZXJfbmFtZToiaWNwX211bHRpIiwKLSAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKLSAgICAgIGF0dGFjaDppY3BfbXVsdGlfYXR0YWNoLAotICAgICAgZGV0YWNoOmljcF9tdWx0aV9kZXRhY2gsCi0gICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAotICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAotICAgICAgb2Zmc2V0OnNpemVvZihib2FyZHR5cGUpLAorICAgICAgbW9kdWxlIDogVEhJU19NT0RVTEUsCisgICAgICBhdHRhY2ggOiBpY3BfbXVsdGlfYXR0YWNoLAorICAgICAgZGV0YWNoIDogaWNwX211bHRpX2RldGFjaCwKKyAgICAgIG51bV9uYW1lcyA6IG5fYm9hcmR0eXBlcywKKyAgICAgIGJvYXJkX25hbWUgOiAmYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgb2Zmc2V0IDogc2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpLAogfTsKIAogQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9pY3BfbXVsdGkpOwogCi10eXBlZGVmIHN0cnVjdCB7Ci0Jc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmNhcmQ7CS8vIHBvaW50ZXIgdG8gY2FyZAotCWNoYXIgdmFsaWQ7CQkvLyBjYXJkIGlzIHVzYWJsZQotCXZvaWQgKmlvX2FkZHI7CQkvLyBQb2ludGVyIHRvIG1hcHBlZCBpbyBhZGRyZXNzCi0JcmVzb3VyY2Vfc2l6ZV90IHBoeXNfaW9iYXNlOwkvLyBQaHlzaWNhbCBpbyBhZGRyZXNzCi0JdW5zaWduZWQgaW50IEFkY0NtZFN0YXR1czsJLy8gQURDIENvbW1hbmQvU3RhdHVzIHJlZ2lzdGVyCi0JdW5zaWduZWQgaW50IERhY0NtZFN0YXR1czsJLy8gREFDIENvbW1hbmQvU3RhdHVzIHJlZ2lzdGVyCi0JdW5zaWduZWQgaW50IEludEVuYWJsZTsJLy8gSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlcgotCXVuc2lnbmVkIGludCBJbnRTdGF0dXM7CS8vIEludGVycnVwdCBTdGF0dXMgcmVnaXN0ZXIKLQl1bnNpZ25lZCBpbnQgYWN0X2NoYW5saXN0WzMyXTsJLy8gbGlzdCBvZiBzY2FuZWQgY2hhbm5lbAotCXVuc2lnbmVkIGNoYXIgYWN0X2NoYW5saXN0X2xlbjsJLy8gbGVuIG9mIHNjYW5saXN0Ci0JdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfcG9zOwkvLyBhY3R1YWwgcG9zaXRpb24gaW4gTVVYIGxpc3QKLQl1bnNpZ25lZCBpbnQgKmFpX2NoYW5saXN0OwkvLyBhY3RhdWwgY2hhbmxpc3QKLQlzYW1wbF90ICphaV9kYXRhOwkvLyBkYXRhIGJ1ZmZlcgotCXNhbXBsX3QgYW9fZGF0YVs0XTsJLy8gZGF0YSBvdXRwdXQgYnVmZmVyCi0Jc2FtcGxfdCBkaV9kYXRhOwkvLyBEaWdpdGFsIGlucHV0IGRhdGEKLQl1bnNpZ25lZCBpbnQgZG9fZGF0YTsJLy8gUmVtZW1iZXIgZGlnaXRhbCBvdXRwdXQgZGF0YQotfSBpY3BfbXVsdGlfcHJpdmF0ZTsKK3N0cnVjdCBpY3BfbXVsdGlfcHJpdmF0ZSB7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmNhcmQ7CS8qICBwb2ludGVyIHRvIGNhcmQgKi8KKwljaGFyIHZhbGlkOwkJLyogIGNhcmQgaXMgdXNhYmxlICovCisJdm9pZCAqaW9fYWRkcjsJCS8qICBQb2ludGVyIHRvIG1hcHBlZCBpbyBhZGRyZXNzICovCisJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfaW9iYXNlOwkvKiAgUGh5c2ljYWwgaW8gYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBBZGNDbWRTdGF0dXM7CS8qICBBREMgQ29tbWFuZC9TdGF0dXMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgRGFjQ21kU3RhdHVzOwkvKiAgREFDIENvbW1hbmQvU3RhdHVzIHJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IEludEVuYWJsZTsJLyogIEludGVycnVwdCBFbmFibGUgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgSW50U3RhdHVzOwkvKiAgSW50ZXJydXB0IFN0YXR1cyByZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RbMzJdOwkvKiAgbGlzdCBvZiBzY2FuZWQgY2hhbm5lbCAqLworCXVuc2lnbmVkIGNoYXIgYWN0X2NoYW5saXN0X2xlbjsJLyogIGxlbiBvZiBzY2FubGlzdCAqLworCXVuc2lnbmVkIGNoYXIgYWN0X2NoYW5saXN0X3BvczsJLyogIGFjdHVhbCBwb3NpdGlvbiBpbiBNVVggbGlzdCAqLworCXVuc2lnbmVkIGludCAqYWlfY2hhbmxpc3Q7CS8qICBhY3RhdWwgY2hhbmxpc3QgKi8KKwlzaG9ydCAqYWlfZGF0YTsJLyogIGRhdGEgYnVmZmVyICovCisJc2hvcnQgYW9fZGF0YVs0XTsJLyogIGRhdGEgb3V0cHV0IGJ1ZmZlciAqLworCXNob3J0IGRpX2RhdGE7CS8qICBEaWdpdGFsIGlucHV0IGRhdGEgKi8KKwl1bnNpZ25lZCBpbnQgZG9fZGF0YTsJLyogIFJlbWVtYmVyIGRpZ2l0YWwgb3V0cHV0IGRhdGEgKi8KK307CiAKLSNkZWZpbmUgZGV2cHJpdiAoKGljcF9tdWx0aV9wcml2YXRlICopZGV2LT5wcml2YXRlKQotI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3QgYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgaWNwX211bHRpX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCiAKIC8qCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIxNCwxMiArMjE0LDEyIEBACiAqLwogCiAjaWYgMAotc3RhdGljIGludCBjaGVja19jaGFubmVsX2xpc3QoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuKTsKICNlbmRpZgotc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pOwotc3RhdGljIGludCBpY3BfbXVsdGlfcmVzZXQoY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGljcF9tdWx0aV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjM2LDMyICsyMzYsMzIgQEAKIAkJVGhpcyBmdW5jdGlvbiByZWFkcyBhIHNpbmdsZSBhbmFsb2d1ZSBpbnB1dC4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KLQkJbHNhbXBsX3QgKmRhdGEJCVBvaW50ZXIgdG8gYW5hbG9ndWUgaW5wdXQgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBpbnB1dCBkYXRhCiAKIAlSZXR1cm5zOmludAkJCU5tdWJlciBvZiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl9yZWFkX2FpKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl9yZWFkX2FpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuLCB0aW1lb3V0OwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCiAJcHJpbnRrKCJpY3AgbXVsdGkgRURCRzogQkdOOiBpY3BfbXVsdGlfaW5zbl9yZWFkX2FpKC4uLilcbiIpOwogI2VuZGlmCi0JLy8gRGlzYWJsZSBBL0QgY29udmVyc2lvbiByZWFkeSBpbnRlcnJ1cHQKKwkvKiAgRGlzYWJsZSBBL0QgY29udmVyc2lvbiByZWFkeSBpbnRlcnJ1cHQgKi8KIAlkZXZwcml2LT5JbnRFbmFibGUgJj0gfkFEQ19SRUFEWTsKIAl3cml0ZXcoZGV2cHJpdi0+SW50RW5hYmxlLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9FTik7CiAKLQkvLyBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzCisJLyogIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KIAlkZXZwcml2LT5JbnRTdGF0dXMgfD0gQURDX1JFQURZOwogCXdyaXRldyhkZXZwcml2LT5JbnRTdGF0dXMsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX1NUQVQpOwogCi0JLy8gU2V0IHVwIGFwcHJvcHJpYXRlIGNoYW5uZWwsIG1vZGUgYW5kIHJhbmdlIGRhdGEsIGZvciBzcGVjaWZpZWQgY2hhbm5lbAorCS8qICBTZXQgdXAgYXBwcm9wcmlhdGUgY2hhbm5lbCwgbW9kZSBhbmQgcmFuZ2UgZGF0YSwgZm9yIHNwZWNpZmllZCBjaGFubmVsICovCiAJc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgJmluc24tPmNoYW5zcGVjLCAxKTsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtMjcxLDcgKzI3MSw3IEBACiAjZW5kaWYKIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKLQkJLy8gU2V0IHN0YXJ0IEFEQyBiaXQKKwkJLyogIFNldCBzdGFydCBBREMgYml0ICovCiAJCWRldnByaXYtPkFkY0NtZFN0YXR1cyB8PSBBRENfU1Q7CiAJCXdyaXRldyhkZXZwcml2LT5BZGNDbWRTdGF0dXMsCiAJCQlkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0FEQ19DU1IpOwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJCQlyZWFkdyhkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0FEQ19DU1IpKTsKICNlbmRpZgogCi0JCS8vIFdhaXQgZm9yIGNvbnZlcnNpb24gdG8gY29tcGxldGUsIG9yIGdldCBmZWQgdXAgd2FpdGluZworCQkvKiAgV2FpdCBmb3IgY29udmVyc2lvbiB0byBjb21wbGV0ZSwgb3IgZ2V0IGZlZCB1cCB3YWl0aW5nICovCiAJCXRpbWVvdXQgPSAxMDA7CiAJCXdoaWxlICh0aW1lb3V0LS0pIHsKIAkJCWlmICghKHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKwpAQCAtMzA3LDE5ICszMDcsMTkgQEAKIAkJCWNvbWVkaV91ZGVsYXkoMSk7CiAJCX0KIAotCQkvLyBJZiB3ZSByZWFjaCBoZXJlLCBhIHRpbWVvdXQgaGFzIG9jY3VycmVkCisJCS8qICBJZiB3ZSByZWFjaCBoZXJlLCBhIHRpbWVvdXQgaGFzIG9jY3VycmVkICovCiAJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiB0aW1lb3V0Iik7CiAKLQkJLy8gRGlzYWJsZSBpbnRlcnJ1cHQKKwkJLyogIERpc2FibGUgaW50ZXJydXB0ICovCiAJCWRldnByaXYtPkludEVuYWJsZSAmPSB+QURDX1JFQURZOwogCQl3cml0ZXcoZGV2cHJpdi0+SW50RW5hYmxlLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9FTik7CiAKLQkJLy8gQ2xlYXIgaW50ZXJydXB0IHN0YXR1cworCQkvKiAgQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCQlkZXZwcml2LT5JbnRTdGF0dXMgfD0gQURDX1JFQURZOwogCQl3cml0ZXcoZGV2cHJpdi0+SW50U3RhdHVzLAogCQkJZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKLQkJLy8gQ2xlYXIgZGF0YSByZWNlaXZlZAorCQkvKiAgQ2xlYXIgZGF0YSByZWNlaXZlZCAqLwogCQlkYXRhW25dID0gMDsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtMzMyLDExICszMzIsMTEgQEAKIAkJCShyZWFkdyhkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0FJKSA+PiA0KSAmIDB4MGZmZjsKIAl9CiAKLQkvLyBEaXNhYmxlIGludGVycnVwdAorCS8qICBEaXNhYmxlIGludGVycnVwdCAqLwogCWRldnByaXYtPkludEVuYWJsZSAmPSB+QURDX1JFQURZOwogCXdyaXRldyhkZXZwcml2LT5JbnRFbmFibGUsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAotCS8vIENsZWFyIGludGVycnVwdCBzdGF0dXMKKwkvKiAgQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCWRldnByaXYtPkludFN0YXR1cyB8PSBBRENfUkVBRFk7CiAJd3JpdGV3KGRldnByaXYtPkludFN0YXR1cywgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKQEAgLTM1NSw0MCArMzU1LDQwIEBACiAJCVRoaXMgZnVuY3Rpb24gd3JpdGVzIGEgc2luZ2xlIGFuYWxvZ3VlIG91dHB1dC4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KLQkJbHNhbXBsX3QgKmRhdGEJCVBvaW50ZXIgdG8gYW5hbG9ndWUgb3V0cHV0IGRhdGEKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgorCQl1bnNpZ25lZCBpbnQgKmRhdGEJCVBvaW50ZXIgdG8gYW5hbG9ndWUgb3V0cHV0IGRhdGEKIAogCVJldHVybnM6aW50CQkJTm11YmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3dyaXRlX2FvKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl93cml0ZV9hbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgbiwgY2hhbiwgcmFuZ2UsIHRpbWVvdXQ7CiAKICNpZmRlZiBJQ1BfTVVMVElfRVhUREVCVUcKIAlwcmludGsoImljcCBtdWx0aSBFREJHOiBCR046IGljcF9tdWx0aV9pbnNuX3dyaXRlX2FvKC4uLilcbiIpOwogI2VuZGlmCi0JLy8gRGlzYWJsZSBEL0EgY29udmVyc2lvbiByZWFkeSBpbnRlcnJ1cHQKKwkvKiAgRGlzYWJsZSBEL0EgY29udmVyc2lvbiByZWFkeSBpbnRlcnJ1cHQgKi8KIAlkZXZwcml2LT5JbnRFbmFibGUgJj0gfkRBQ19SRUFEWTsKIAl3cml0ZXcoZGV2cHJpdi0+SW50RW5hYmxlLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9FTik7CiAKLQkvLyBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzCisJLyogIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KIAlkZXZwcml2LT5JbnRTdGF0dXMgfD0gREFDX1JFQURZOwogCXdyaXRldyhkZXZwcml2LT5JbnRTdGF0dXMsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX1NUQVQpOwogCi0JLy8gR2V0IGNoYW5uZWwgbnVtYmVyIGFuZCByYW5nZQorCS8qICBHZXQgY2hhbm5lbCBudW1iZXIgYW5kIHJhbmdlICovCiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOwogCi0JLy8gU2V0IHVwIHJhbmdlIGFuZCBjaGFubmVsIGRhdGEKLQkvLyBCaXQgNCA9IDEgOiBCaXBvbGFyCi0JLy8gQml0IDUgPSAwIDogNVYKLQkvLyBCaXQgNSA9IDEgOiAxMFYKLQkvLyBCaXRzIDgtOSA6IENoYW5uZWwgbnVtYmVyCisJLyogIFNldCB1cCByYW5nZSBhbmQgY2hhbm5lbCBkYXRhICovCisJLyogIEJpdCA0ID0gMSA6IEJpcG9sYXIgKi8KKwkvKiAgQml0IDUgPSAwIDogNVYgKi8KKwkvKiAgQml0IDUgPSAxIDogMTBWICovCisJLyogIEJpdHMgOC05IDogQ2hhbm5lbCBudW1iZXIgKi8KIAlkZXZwcml2LT5EYWNDbWRTdGF0dXMgJj0gMHhmY2NmOwogCWRldnByaXYtPkRhY0NtZFN0YXR1cyB8PSB0aGlzX2JvYXJkLT5yYW5nZWNvZGVbcmFuZ2VdOwogCWRldnByaXYtPkRhY0NtZFN0YXR1cyB8PSAoY2hhbiA8PCA4KTsKQEAgLTM5Niw3ICszOTYsNyBAQAogCXdyaXRldyhkZXZwcml2LT5EYWNDbWRTdGF0dXMsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfREFDX0NTUik7CiAKIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7Ci0JCS8vIFdhaXQgZm9yIGFuYWxvZ3VlIG91dHB1dCBkYXRhIHJlZ2lzdGVyIHRvIGJlIHJlYWR5IGZvciBuZXcgZGF0YSwgb3IgZ2V0IGZlZCB1cCB3YWl0aW5nCisJCS8qICBXYWl0IGZvciBhbmFsb2d1ZSBvdXRwdXQgZGF0YSByZWdpc3RlciB0byBiZSByZWFkeSBmb3IgbmV3IGRhdGEsIG9yIGdldCBmZWQgdXAgd2FpdGluZyAqLwogCQl0aW1lb3V0ID0gMTAwOwogCQl3aGlsZSAodGltZW91dC0tKSB7CiAJCQlpZiAoIShyZWFkdyhkZXZwcml2LT5pb19hZGRyICsKQEAgLTQxNCwxOSArNDE0LDE5IEBACiAJCQljb21lZGlfdWRlbGF5KDEpOwogCQl9CiAKLQkJLy8gSWYgd2UgcmVhY2ggaGVyZSwgYSB0aW1lb3V0IGhhcyBvY2N1cnJlZAorCQkvKiAgSWYgd2UgcmVhY2ggaGVyZSwgYSB0aW1lb3V0IGhhcyBvY2N1cnJlZCAqLwogCQljb21lZGlfZXJyb3IoZGV2LCAiRC9BIGluc24gdGltZW91dCIpOwogCi0JCS8vIERpc2FibGUgaW50ZXJydXB0CisJCS8qICBEaXNhYmxlIGludGVycnVwdCAqLwogCQlkZXZwcml2LT5JbnRFbmFibGUgJj0gfkRBQ19SRUFEWTsKIAkJd3JpdGV3KGRldnByaXYtPkludEVuYWJsZSwgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfRU4pOwogCi0JCS8vIENsZWFyIGludGVycnVwdCBzdGF0dXMKKwkJLyogIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KIAkJZGV2cHJpdi0+SW50U3RhdHVzIHw9IERBQ19SRUFEWTsKIAkJd3JpdGV3KGRldnByaXYtPkludFN0YXR1cywKIAkJCWRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX1NUQVQpOwogCi0JCS8vIENsZWFyIGRhdGEgcmVjZWl2ZWQKKwkJLyogIENsZWFyIGRhdGEgcmVjZWl2ZWQgKi8KIAkJZGV2cHJpdi0+YW9fZGF0YVtjaGFuXSA9IDA7CiAKICNpZmRlZiBJQ1BfTVVMVElfRVhUREVCVUcKQEAgLTQzNSwxNiArNDM1LDE2IEBACiAJCXJldHVybiAtRVRJTUU7CiAKIAkgICAgICBkYWNfcmVhZHk6Ci0JCS8vIFdyaXRlIGRhdGEgdG8gYW5hbG9ndWUgb3V0cHV0IGRhdGEgcmVnaXN0ZXIKKwkJLyogIFdyaXRlIGRhdGEgdG8gYW5hbG9ndWUgb3V0cHV0IGRhdGEgcmVnaXN0ZXIgKi8KIAkJd3JpdGV3KGRhdGFbbl0sIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQU8pOwogCi0JCS8vIFNldCBEQUNfU1QgYml0IHRvIHdyaXRlIHRoZSBkYXRhIHRvIHNlbGVjdGVkIGNoYW5uZWwKKwkJLyogIFNldCBEQUNfU1QgYml0IHRvIHdyaXRlIHRoZSBkYXRhIHRvIHNlbGVjdGVkIGNoYW5uZWwgKi8KIAkJZGV2cHJpdi0+RGFjQ21kU3RhdHVzIHw9IERBQ19TVDsKIAkJd3JpdGV3KGRldnByaXYtPkRhY0NtZFN0YXR1cywKIAkJCWRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfREFDX0NTUik7CiAJCWRldnByaXYtPkRhY0NtZFN0YXR1cyAmPSB+REFDX1NUOwogCi0JCS8vIFNhdmUgYW5hbG9ndWUgb3V0cHV0IGRhdGEKKwkJLyogIFNhdmUgYW5hbG9ndWUgb3V0cHV0IGRhdGEgKi8KIAkJZGV2cHJpdi0+YW9fZGF0YVtjaGFuXSA9IGRhdGFbbl07CiAJfQogCkBAIC00NjMsMjQgKzQ2MywyNCBAQAogCQlUaGlzIGZ1bmN0aW9uIHJlYWRzIGEgc2luZ2xlIGFuYWxvZ3VlIG91dHB1dC4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KLQkJbHNhbXBsX3QgKmRhdGEJCVBvaW50ZXIgdG8gYW5hbG9ndWUgb3V0cHV0IGRhdGEKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgorCQl1bnNpZ25lZCBpbnQgKmRhdGEJCVBvaW50ZXIgdG8gYW5hbG9ndWUgb3V0cHV0IGRhdGEKIAogCVJldHVybnM6aW50CQkJTm11YmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3JlYWRfYW8oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3JlYWRfYW8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IG4sIGNoYW47CiAKLQkvLyBHZXQgY2hhbm5lbCBudW1iZXIKKwkvKiAgR2V0IGNoYW5uZWwgbnVtYmVyICovCiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCi0JLy8gUmVhZCBhbmFsb2d1ZSBvdXRwdXRzCisJLyogIFJlYWQgYW5hbG9ndWUgb3V0cHV0cyAqLwogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspCiAJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19kYXRhW2NoYW5dOwogCkBAIC00OTYsMTcgKzQ5NiwxNyBAQAogCQlUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBkaWdpdGFsIGlucHV0cy4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KLQkJbHNhbXBsX3QgKmRhdGEJCVBvaW50ZXIgdG8gYW5hbG9ndWUgb3V0cHV0IGRhdGEKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgorCQl1bnNpZ25lZCBpbnQgKmRhdGEJCVBvaW50ZXIgdG8gYW5hbG9ndWUgb3V0cHV0IGRhdGEKIAogCVJldHVybnM6aW50CQkJTm11YmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX2JpdHNfZGkoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX2JpdHNfZGkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJZGF0YVsxXSA9IHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfREkpOwogCkBAIC01MjIsMTcgKzUyMiwxNyBAQAogCQlUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgYXBwcm9wcmlhdGUgZGlnaXRhbCBvdXRwdXRzLgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fYml0c19kbyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaWNwX211bHRpX2luc25fYml0c19kbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKICNpZmRlZiBJQ1BfTVVMVElfRVhUREVCVUcKIAlwcmludGsoImljcCBtdWx0aSBFREJHOiBCR046IGljcF9tdWx0aV9pbnNuX2JpdHNfZG8oLi4uKVxuIik7CkBAIC01NjQsMTcgKzU2NCwxNyBAQAogCQlUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgY291bnRlci4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KLQkJbHNhbXBsX3QgKmRhdGEJCVBvaW50ZXIgdG8gY291bnRlciBkYXRhCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KKwkJdW5zaWduZWQgaW50ICpkYXRhCQlQb2ludGVyIHRvIGNvdW50ZXIgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fcmVhZF9jdHIoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3JlYWRfY3RyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXJldHVybiAwOwogfQpAQCAtNTg4LDE3ICs1ODgsMTcgQEAKIAkJVGhpcyBmdW5jdGlvbiB3cml0ZSB0byB0aGUgc3BlY2lmaWVkIGNvdW50ZXIuCiAKIAlQYXJhbWV0ZXJzOgotCQljb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCi0JCWxzYW1wbF90ICpkYXRhCQlQb2ludGVyIHRvIGNvdW50ZXIgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBjb3VudGVyIGRhdGEKIAogCVJldHVybnM6aW50CQkJTm11YmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3dyaXRlX2N0cihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaWNwX211bHRpX2luc25fd3JpdGVfY3RyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXJldHVybiAwOwogfQpAQCAtNjIwLDcgKzYyMCw3IEBACiAqLwogc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9zZXJ2aWNlX2ljcF9tdWx0aShpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CiAJaW50IGludF9ubzsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtNjI4LDEwICs2MjgsMTAgQEAKIAkJaXJxKTsKICNlbmRpZgogCi0JLy8gSXMgdGhpcyBpbnRlcnJ1cHQgZnJvbSBvdXIgYm9hcmQ/CisJLyogIElzIHRoaXMgaW50ZXJydXB0IGZyb20gb3VyIGJvYXJkPyAqLwogCWludF9ubyA9IHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX1NUQVQpICYgU3RhdHVzX0lSUTsKIAlpZiAoIWludF9ubykKLQkJLy8gTm8sIGV4aXQKKwkJLyogIE5vLCBleGl0ICovCiAJCXJldHVybiBJUlFfTk9ORTsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtNjM5LDcgKzYzOSw3IEBACiAJCXJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX1NUQVQpKTsKICNlbmRpZgogCi0JLy8gRGV0ZXJtaW5lIHdoaWNoIGludGVycnVwdCBpcyBhY3RpdmUgJiBoYW5kbGUgaXQKKwkvKiAgRGV0ZXJtaW5lIHdoaWNoIGludGVycnVwdCBpcyBhY3RpdmUgJiBoYW5kbGUgaXQgKi8KIAlzd2l0Y2ggKGludF9ubykgewogCWNhc2UgQURDX1JFQURZOgogCQlicmVhazsKQEAgLTY3OSw4ICs2NzksOCBAQAogCQlpcyBidWlsdCBjb3JyZWN0bHkKIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgc2V2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKIAkJdW5zaWduZWQgaW50ICpjaGFubGlzdAlQb2ludGVyIHRvIHBhY2tlZCBjaGFubmVsIGxpc3QKIAkJdW5zaWduZWQgaW50IG5fY2hhbglOdW1iZXIgb2YgY2hhbm5lbHMgdG8gc2NhbgogCkBAIC02ODksNyArNjg5LDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotc3RhdGljIGludCBjaGVja19jaGFubmVsX2xpc3QoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtNjk3LDE0ICs2OTcsMTQgQEAKICNpZmRlZiBJQ1BfTVVMVElfRVhUREVCVUcKIAlwcmludGsoImljcCBtdWx0aSBFREJHOiAgY2hlY2tfY2hhbm5lbF9saXN0KC4uLiwlZClcbiIsIG5fY2hhbik7CiAjZW5kaWYKLQkvLyBDaGVjayB0aGF0IHdlIGF0IGxlYXN0IGhhdmUgb25lIGNoYW5uZWwgdG8gY2hlY2sKKwkvKiAgQ2hlY2sgdGhhdCB3ZSBhdCBsZWFzdCBoYXZlIG9uZSBjaGFubmVsIHRvIGNoZWNrICovCiAJaWYgKG5fY2hhbiA8IDEpIHsKIAkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKIAkJcmV0dXJuIDA7CiAJfQotCS8vIENoZWNrIGFsbCBjaGFubmVscworCS8qICBDaGVjayBhbGwgY2hhbm5lbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsKLQkJLy8gQ2hlY2sgdGhhdCBjaGFubmVsIG51bWJlciBpcyA8IG1heGltdW0KKwkJLyogIENoZWNrIHRoYXQgY2hhbm5lbCBudW1iZXIgaXMgPCBtYXhpbXVtICovCiAJCWlmIChDUl9BUkVGKGNoYW5saXN0W2ldKSA9PSBBUkVGX0RJRkYpIHsKIAkJCWlmIChDUl9DSEFOKGNoYW5saXN0W2ldKSA+IHRoaXNfYm9hcmQtPm5fYWljaGFuZCkgewogCQkJCWNvbWVkaV9lcnJvcihkZXYsCkBAIC03MzQsOCArNzM0LDggQEAKIAkJU3RhdHVzIHJlZ2lzdGVyLgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgc2V2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQogCQl1bnNpZ25lZCBpbnQgKmNoYW5saXN0CVBvaW50ZXIgdG8gcGFja2VkIGNoYW5uZWwgbGlzdAogCQl1bnNpZ25lZCBpbnQgbl9jaGFuCU51bWJlciBvZiBjaGFubmVscyB0byBzY2FuCiAKQEAgLTc0Myw3ICs3NDMsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3QoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitzdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbikKIHsKIAl1bnNpZ25lZCBpbnQgaSwgcmFuZ2UsIGNoYW5wcm9nOwpAQCAtNzU2LDEwICs3NTYsMTAgQEAKIAlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBuX2NoYW47IGkrKykgewotCQkvLyBHZXQgY2hhbm5lbAorCQkvKiAgR2V0IGNoYW5uZWwgKi8KIAkJY2hhbnByb2cgPSBDUl9DSEFOKGNoYW5saXN0W2ldKTsKIAotCQkvLyBEZXRlcm1pbmUgaWYgaXQgaXMgYSBkaWZmZXJlbnRpYWwgY2hhbm5lbCAoQml0IDE1ICA9IDEpCisJCS8qICBEZXRlcm1pbmUgaWYgaXQgaXMgYSBkaWZmZXJlbnRpYWwgY2hhbm5lbCAoQml0IDE1ICA9IDEpICovCiAJCWlmIChDUl9BUkVGKGNoYW5saXN0W2ldKSA9PSBBUkVGX0RJRkYpIHsKIAkJCWRpZmYgPSAxOwogCQkJY2hhbnByb2cgJj0gMHgwMDA3OwpAQCAtNzY4LDIxICs3NjgsMjEgQEAKIAkJCWNoYW5wcm9nICY9IDB4MDAwZjsKIAkJfQogCi0JCS8vIENsZWFyIGNoYW5uZWwsIHJhbmdlIGFuZCBpbnB1dCBtb2RlIGJpdHMgaW4gQS9EIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyCisJCS8qICBDbGVhciBjaGFubmVsLCByYW5nZSBhbmQgaW5wdXQgbW9kZSBiaXRzIGluIEEvRCBjb21tYW5kL3N0YXR1cyByZWdpc3RlciAqLwogCQlkZXZwcml2LT5BZGNDbWRTdGF0dXMgJj0gMHhmMDBmOwogCi0JCS8vIFNldCBjaGFubmVsIG51bWJlciBhbmQgZGlmZmVyZW50aWFsIG1vZGUgc3RhdHVzIGJpdAorCQkvKiAgU2V0IGNoYW5uZWwgbnVtYmVyIGFuZCBkaWZmZXJlbnRpYWwgbW9kZSBzdGF0dXMgYml0ICovCiAJCWlmIChkaWZmKSB7Ci0JCQkvLyBTZXQgY2hhbm5lbCBudW1iZXIsIGJpdHMgOS0xMSAmIG1vZGUsIGJpdCA2CisJCQkvKiAgU2V0IGNoYW5uZWwgbnVtYmVyLCBiaXRzIDktMTEgJiBtb2RlLCBiaXQgNiAqLwogCQkJZGV2cHJpdi0+QWRjQ21kU3RhdHVzIHw9IChjaGFucHJvZyA8PCA5KTsKIAkJCWRldnByaXYtPkFkY0NtZFN0YXR1cyB8PSBBRENfREk7CiAJCX0gZWxzZQotCQkJLy8gU2V0IGNoYW5uZWwgbnVtYmVyLCBiaXRzIDgtMTEKKwkJCS8qICBTZXQgY2hhbm5lbCBudW1iZXIsIGJpdHMgOC0xMSAqLwogCQkJZGV2cHJpdi0+QWRjQ21kU3RhdHVzIHw9IChjaGFucHJvZyA8PCA4KTsKIAotCQkvLyBHZXQgcmFuZ2UgZm9yIGN1cnJlbnQgY2hhbm5lbAorCQkvKiAgR2V0IHJhbmdlIGZvciBjdXJyZW50IGNoYW5uZWwgKi8KIAkJcmFuZ2UgPSB0aGlzX2JvYXJkLT5yYW5nZWNvZGVbQ1JfUkFOR0UoY2hhbmxpc3RbaV0pXTsKLQkJLy8gU2V0IHJhbmdlLiBiaXRzIDQtNQorCQkvKiAgU2V0IHJhbmdlLiBiaXRzIDQtNSAqLwogCQlkZXZwcml2LT5BZGNDbWRTdGF0dXMgfD0gcmFuZ2U7CiAKIAkJLyogT3V0cHV0IGNoYW5uZWwsIHJhbmdlLCBtb2RlIHRvIElDUCBNdWx0aSAqLwpAQCAtODA2LDQ1ICs4MDYsNDUgQEAKIAkJVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIGljcCBtdWx0aSBkZXZpY2UgdG8gYSAnc2FmZScgc3RhdGUKIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgc2V2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCiAKIAlSZXR1cm5zOmludAkwID0gc3VjY2VzcwogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9yZXNldChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpY3BfbXVsdGlfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwogCXByaW50aygiaWNwX211bHRpIEVEQkc6IEJHTjogaWNwX211bHRpX3Jlc2V0KC4uLilcbiIpOwogI2VuZGlmCi0JLy8gQ2xlYXIgSU5UIGVuYWJsZXMgYW5kIHJlcXVlc3RzCisJLyogIENsZWFyIElOVCBlbmFibGVzIGFuZCByZXF1ZXN0cyAqLwogCXdyaXRldygwLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9FTik7CiAJd3JpdGV3KDB4MDBmZiwgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKIAlpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4pCi0JCS8vIFNldCBEQUNzIHRvIDAuLjVWIHJhbmdlIGFuZCAwViBvdXRwdXQKKwkJLyogIFNldCBEQUNzIHRvIDAuLjVWIHJhbmdlIGFuZCAwViBvdXRwdXQgKi8KIAkJZm9yIChpID0gMDsgaSA8IHRoaXNfYm9hcmQtPm5fYW9jaGFuOyBpKyspIHsKIAkJCWRldnByaXYtPkRhY0NtZFN0YXR1cyAmPSAweGZjY2U7CiAKLQkJCS8vIFNldCBjaGFubmVsIG51bWJlcgorCQkJLyogIFNldCBjaGFubmVsIG51bWJlciAqLwogCQkJZGV2cHJpdi0+RGFjQ21kU3RhdHVzIHw9IChpIDw8IDgpOwogCi0JCQkvLyBPdXRwdXQgMFYKKwkJCS8qICBPdXRwdXQgMFYgKi8KIAkJCXdyaXRldygwLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0FPKTsKIAotCQkJLy8gU2V0IHN0YXJ0IGNvbnZlcnNpb24gYml0CisJCQkvKiAgU2V0IHN0YXJ0IGNvbnZlcnNpb24gYml0ICovCiAJCQlkZXZwcml2LT5EYWNDbWRTdGF0dXMgfD0gREFDX1NUOwogCi0JCQkvLyBPdXRwdXQgdG8gY29tbWFuZCAvIHN0YXR1cyByZWdpc3RlcgorCQkJLyogIE91dHB1dCB0byBjb21tYW5kIC8gc3RhdHVzIHJlZ2lzdGVyICovCiAJCQl3cml0ZXcoZGV2cHJpdi0+RGFjQ21kU3RhdHVzLAogCQkJCWRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfREFDX0NTUik7CiAKLQkJCS8vIERlbGF5IHRvIGFsbG93IERBQyB0aW1lIHRvIHJlY292ZXIKKwkJCS8qICBEZWxheSB0byBhbGxvdyBEQUMgdGltZSB0byByZWNvdmVyICovCiAJCQljb21lZGlfdWRlbGF5KDEpOwogCQl9Ci0JLy8gRGlnaXRhbCBvdXRwdXRzIHRvIDAKKwkvKiAgRGlnaXRhbCBvdXRwdXRzIHRvIDAgKi8KIAl3cml0ZXcoMCwgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9ETyk7CiAKICNpZmRlZiBJQ1BfTVVMVElfRVhUREVCVUcKQEAgLTg2MywxNiArODYzLDE2IEBACiAJCWRldmljZS4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfZGV2Y29uZmlnICppdAlQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBjb25maWd1cmF0aW9uCiAKIAlSZXR1cm5zOmludAkwID0gc3VjY2VzcwogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KQorc3RhdGljIGludCBpY3BfbXVsdGlfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXQsIHN1YmRldiwgbl9zdWJkZXZpY2VzOwogCXVuc2lnbmVkIGludCBpcnE7CiAJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmNhcmQgPSBOVUxMOwpAQCAtODgxLDExICs4ODEsMTIgQEAKIAogCXByaW50aygiaWNwX211bHRpIEVEQkc6IEJHTjogaWNwX211bHRpX2F0dGFjaCguLi4pXG4iKTsKIAotCS8vIEFsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0b3JhZ2Ugc3BhY2UKLQlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YoaWNwX211bHRpX3ByaXZhdGUpKSkgPCAwKQorCS8qICBBbG9jYXRlIHByaXZhdGUgZGF0YSBzdG9yYWdlIHNwYWNlICovCisJcmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgaWNwX211bHRpX3ByaXZhdGUpKTsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8vIEluaXRpYWxpc2UgbGlzdCBvZiBQQ0kgY2FyZHMgaW4gc3lzdGVtLCBpZiBub3QgYWxyZWFkeSBkb25lIHNvCisJLyogIEluaXRpYWxpc2UgbGlzdCBvZiBQQ0kgY2FyZHMgaW4gc3lzdGVtLCBpZiBub3QgYWxyZWFkeSBkb25lIHNvICovCiAJaWYgKHBjaV9saXN0X2J1aWxkZWQrKyA9PSAwKSB7CiAJCXBjaV9jYXJkX2xpc3RfaW5pdChQQ0lfVkVORE9SX0lEX0lDUCwKICNpZmRlZiBJQ1BfTVVMVElfRVhUREVCVUcKQEAgLTg5OSw5ICs5MDAsMTEgQEAKIAlwcmludGsoIkFubmUncyBjb21lZGklZDogaWNwX211bHRpOiBib2FyZD0lcyIsIGRldi0+bWlub3IsCiAJCXRoaXNfYm9hcmQtPm5hbWUpOwogCi0JaWYgKChjYXJkID0gc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZChQQ0lfVkVORE9SX0lEX0lDUCwKLQkJCQl0aGlzX2JvYXJkLT5kZXZpY2VfaWQsIGl0LT5vcHRpb25zWzBdLAotCQkJCWl0LT5vcHRpb25zWzFdKSkgPT0gTlVMTCkKKwljYXJkID0gc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZChQQ0lfVkVORE9SX0lEX0lDUCwKKwkJCQkJIHRoaXNfYm9hcmQtPmRldmljZV9pZCwgaXQtPm9wdGlvbnNbMF0sCisJCQkJCSBpdC0+b3B0aW9uc1sxXSk7CisKKwlpZiAoY2FyZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTzsKIAogCWRldnByaXYtPmNhcmQgPSBjYXJkOwpAQCAtOTQzLDkgKzk0Niw5IEBACiAJaWYgKHRoaXNfYm9hcmQtPm5fY3RycykKIAkJbl9zdWJkZXZpY2VzKys7CiAKLQlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApIHsKKwlyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKTsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQl9CiAKIAlpY3BfbXVsdGlfcmVzZXQoZGV2KTsKIApAQCAtMTA1NSwxMyArMTA1OCwxMyBAQAogCQlkZXZpY2UuCiAKIAlQYXJhbWV0ZXJzOgotCQljb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQogCiAJUmV0dXJuczppbnQJMCA9IHN1Y2Nlc3MKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotc3RhdGljIGludCBpY3BfbXVsdGlfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGljcF9tdWx0aV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAogCWlmIChkZXYtPnByaXZhdGUpCkBAIC0xMDc3LDkgKzEwODAsOCBAQAogCWlmIChkZXYtPnByaXZhdGUgJiYgZGV2cHJpdi0+Y2FyZCkKIAkJcGNpX2NhcmRfZnJlZShkZXZwcml2LT5jYXJkKTsKIAotCWlmICgtLXBjaV9saXN0X2J1aWxkZWQgPT0gMCkgeworCWlmICgtLXBjaV9saXN0X2J1aWxkZWQgPT0gMCkKIAkJcGNpX2NhcmRfbGlzdF9jbGVhbnVwKFBDSV9WRU5ET1JfSURfSUNQKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuaAppbmRleCA2ZGY0YThkLi4yMWQ4NDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5oCkBAIC0yOCw3ICsyOCw4IEBACiAJdW5zaWduZWQgaW50IGlycTsKIH07CiAKLXN0cnVjdCBwY2lsc3Rfc3RydWN0ICppbm92YV9kZXZpY2VzOwkvLyBwdHIgdG8gcm9vdCBsaXN0IG9mIGFsbCBJbm92YSBkZXZpY2VzCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqaW5vdmFfZGV2aWNlczsKKy8qIHB0ciB0byByb290IGxpc3Qgb2YgYWxsIElub3ZhIGRldmljZXMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTE1MCwxNCArMTUxLDE0IEBACiAJCQkmJiAoaW5vdmEtPnBjaV9zbG90ID09IHBjaV9zbG90KSkgewogCQkJaWYgKCEoaW5vdmEtPnVzZWQpKSB7CiAJCQkJKmNhcmQgPSBpbm92YTsKLQkJCQlyZXR1cm4gMDsJLy8gb2ssIGNhcmQgaXMgZm91bmQKKwkJCQlyZXR1cm4gMDsJLyogb2ssIGNhcmQgaXMgZm91bmQgKi8KIAkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIDI7CS8vIGNhcmQgZXhpc3QgYnV0IGlzIHVzZWQKKwkJCQlyZXR1cm4gMjsJLyogY2FyZCBleGlzdCBidXQgaXMgdXNlZCAqLwogCQkJfQogCQl9CiAJfQogCi0JcmV0dXJuIDE7CQkvLyBubyBjYXJkIGZvdW5kCisJcmV0dXJuIDE7CQkvKiBubyBjYXJkIGZvdW5kICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjQzLDkgKzI0NCwxMCBAQAogCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICpjYXJkOwogCWludCBlcnI7CiAKLQlpZiAoKHBjaV9idXMgPCAxKSAmIChwY2lfc2xvdCA8IDEpKSB7CS8vIHVzZSBhdXRvZGV0ZWN0aW9uCi0JCWlmICgoY2FyZCA9IGZpbmRfZnJlZV9wY2lfY2FyZF9ieV9kZXZpY2UodmVuZG9yX2lkLAotCQkJCQlkZXZpY2VfaWQpKSA9PSBOVUxMKSB7CisJaWYgKChwY2lfYnVzIDwgMSkgJiAocGNpX3Nsb3QgPCAxKSkgewkvKiB1c2UgYXV0b2RldGVjdGlvbiAqLworCisJCWNhcmQgPSBmaW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHZlbmRvcl9pZCwgZGV2aWNlX2lkKTsKKwkJaWYgKGNhcmQgPT0gTlVMTCkgewogCQkJcnRfcHJpbnRrKCIgLSBVbnVzZWQgY2FyZCBub3QgZm91bmQgaW4gc3lzdGVtIVxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtMjY1LDcgKzI2Nyw4IEBACiAJCX0KIAl9CiAKLQlpZiAoKGVyciA9IHBjaV9jYXJkX2FsbG9jKGNhcmQpKSAhPSAwKSB7CisJZXJyID0gcGNpX2NhcmRfYWxsb2MoY2FyZCk7CisJaWYgKGVyciAhPSAwKSB7CiAJCWlmIChlcnIgPiAwKQogCQkJcnRfcHJpbnRrKCIgLSBDYW4ndCBhbGxvY2F0ZSBjYXJkIVxuIik7CiAJCS8qIGVsc2U6IGVycm9yIGFscmVhZHkgcHJpbnRlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWlfcGNpMjBrYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODI1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWlfcGNpMjBrYy5jCkBAIC0wLDAgKzEsNjEyIEBACisvKgorICoJY29tZWRpL2RyaXZlcnMvaWlfcGNpMjBrYy5jCisgKglEcml2ZXIgZm9yIEludGVsbGlnZW50IEluc3RydW1lbnRzIFBDSS0yMDAwMUMgY2FycmllciBib2FyZAorICoJYW5kIG1vZHVsZXMuCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBLZW1wZiA8a2VtcGZAbWF0c2NpLnVuaS1zYi5kZT4KKyAqCXdpdGggc3VnZ2VzdGlvbnMgZnJvbSBEYXZpZCBTY2hsZWVmCisgKgkJCTE2LjA2LjIwMDAKKyAqCisgKglMaW51eCBkZXZpY2UgZHJpdmVyIGZvciBDT01FREkKKyAqCUludGVsbGlnZW50IEluc3RydW1lbnRhdGlvbgorICoJUENJLTIwMDAxIEMtMkEgQ2FycmllciBCb2FyZAorICoJUENJLTIwMzQxIE0tMUEgMTYtQml0IGFuYWxvZyBpbnB1dCBtb2R1bGUKKyAqCQkJCS0gZGlmZmVyZW50aWFsCisgKgkJCQktIHJhbmdlICgtNVYgLSArNVYpCisgKgkJCQktIDE2IGJpdAorICoJUENJLTIwMDA2IE0tMiAxNi1CaXQgYW5hbG9nIG91dHB1dCBtb2R1bGUKKyAqCQkJCS0gcmFuZ2VzICgtMTBWIC0gKzEwVikgKDBWIC0gKzEwVikgKC01ViAtICs1VikKKyAqCQkJCS0gMTYgYml0CisgKgorICoJb25seSBPTkUgUENJLTIwMzQxIG1vZHVsZSBwb3NzaWJsZQorICogCW9ubHkgT05FIFBDSS0yMDAwNiBtb2R1bGUgcG9zc2libGUKKyAqCW5vIGV4dGVybiB0cmlnZ2VyIGltcGxlbWVudGVkCisgKgorICoJTk9UIFdPUktJTkcgKGJ1dCBzb29uKSBvbmx5IDQgb24tYm9hcmQgZGlmZmVyZW50aWFsIGNoYW5uZWxzIHN1cHBvcnRlZAorICoJTk9UIFdPUktJTkcgKGJ1dCBzb29uKSBvbmx5IE9ORSBkaS1wb3J0IGFuZCBPTkUgZG8tcG9ydCBzdXBwb3J0ZWQgaW5zdGVhZCBvZiA0IGRpZ2l0YWwgcG9ydHMKKyAqCWRpLXBvcnQgPT0gUG9ydCAwCisgKglkby1wb3J0ID09IFBvcnQgMQorICoKKyAqCVRoZSBzdGF0ZSBvZiB0aGlzIGRyaXZlciBpcyBvbmx5IGEgc3RhcnRpbmcgcG9pbnQgZm9yIGEgY29tcGxldGUKKyAqCUNPTUVESS1kcml2ZXIuIFRoZSBmaW5hbCBkcml2ZXIgc2hvdWxkIHN1cHBvcnQgYWxsIGZlYXR1cmVzIG9mIHRoZQorICoJY2FycmllciBib2FyZCBhbmQgbW9kdWxlcy4KKyAqCisgKglUaGUgdGVzdCBjb25maWd1cmF0aW9uOgorICoKKyAqCWtlcm5lbCAyLjIuMTQgd2l0aCBSVEFJIHYxLjIgIGFuZCBwYXRjaC0yLjIuMTRydGhhbDIKKyAqCUNPTUVESSAwLjcuNDUKKyAqCUNPTUVESUxJQiAwLjcuOQorICoKKyAqLworLyoKK0RyaXZlcjogaWlfcGNpMjBrYworRGVzY3JpcHRpb246IEludGVsbGlnZW50IEluc3RydW1lbnRzIFBDSS0yMDAwMUMgY2FycmllciBib2FyZAorQXV0aG9yOiBNYXJrdXMgS2VtcGYgPGtlbXBmQG1hdHNjaS51bmktc2IuZGU+CitEZXZpY2VzOiBbSW50ZWxsaWdlbnQgSW5zdHJ1bWVudGF0aW9uXSBQQ0ktMjAwMDFDIChpaV9wY2kyMGtjKQorU3RhdHVzOiB3b3JrcworCitTdXBwb3J0cyB0aGUgUENJLTIwMDAxIEMtMmEgQ2FycmllciBib2FyZCwgYW5kIGNvdWxkIHByb2JhYmx5IHN1cHBvcnQKK3RoZSBvdGhlciBjYXJyaWVyIGJvYXJkcyB3aXRoIHNtYWxsIG1vZGlmaWNhdGlvbnMuICBNb2R1bGVzIHN1cHBvcnRlZAorYXJlOgorCVBDSS0yMDAwNiBNLTIgMTYtYml0IGFuYWxvZyBvdXRwdXQgbW9kdWxlCisJUENJLTIwMzQxIE0tMUEgMTYtYml0IGFuYWxvZyBpbnB1dCBtb2R1bGUKKworT3B0aW9uczoKKyAgMCAgIEJvYXJkIGJhc2UgYWRkcmVzcworICAxICAgSVJRCisgIDIgICBmaXJzdCBvcHRpb24gZm9yIG1vZHVsZSAxCisgIDMgICBzZWNvbmQgb3B0aW9uIGZvciBtb2R1bGUgMQorICA0ICAgZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMgorICA1ICAgc2Vjb25kIG9wdGlvbiBmb3IgbW9kdWxlIDIKKyAgNiAgIGZpcnN0IG9wdGlvbiBmb3IgbW9kdWxlIDMKKyAgNyAgIHNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAzCisKK29wdGlvbnMgZm9yIFBDSS0yMDAwNk06CisgIGZpcnN0OiAgIEFuYWxvZyBvdXRwdXQgY2hhbm5lbCAwIHJhbmdlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAwICBiaXBvbGFyIDEwICAoLTEwViAtLSArMTBWKQorICAgICAgICAgICAgIDEgIHVuaXBvbGFyIDEwICAoMFYgLS0gKzEwVikKKyAgICAgICAgICAgICAyICBiaXBvbGFyIDUgICgtNVYgLS0gNVYpCisgIHNlY29uZDogIEFuYWxvZyBvdXRwdXQgY2hhbm5lbCAxIHJhbmdlIGNvbmZpZ3VyYXRpb24KKworb3B0aW9ucyBmb3IgUENJLTIwMzQxTToKKyAgZmlyc3Q6ICAgQW5hbG9nIGlucHV0IGdhaW4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgIDAgIDEKKyAgICAgICAgICAgICAxICAxMAorICAgICAgICAgICAgIDIgIDEwMAorICAgICAgICAgICAgIDMgIDIwMAorKi8KKworLyogWFhYIG5lZWRzIHRvIHVzZSBpb3JlbWFwKCkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCAyLjQga2VybmVscy4gIFNob3VsZCBhbHNvCisgKiBjaGVja19tZW1fcmVnaW9uKCkgZXRjLiAtIGZtaGVzcyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNkZWZpbmUgUENJMjAwMDBfSUQJCQkweDFkCisjZGVmaW5lIFBDSTIwMzQxX0lEICAgIAkJCTB4NzcKKyNkZWZpbmUgUENJMjAwMDZfSUQgICAgICAJCTB4ZTMKKyNkZWZpbmUgUENJMjB4eHhfRU1QVFlfSUQJCTB4ZmYKKworI2RlZmluZSBQQ0kyMDAwMF9PRkZTRVQgCQkweDEwMAorI2RlZmluZSBQQ0kyMDAwMF9NT0RVTEVTCQkzCisKKyNkZWZpbmUgUENJMjAwMDBfRElPXzAJCQkweDgwCisjZGVmaW5lIFBDSTIwMDAwX0RJT18xCQkJMHg4MQorI2RlZmluZSBQQ0kyMDAwMF9ESU9fMgkJCTB4YzAKKyNkZWZpbmUgUENJMjAwMDBfRElPXzMJCQkweGMxCisjZGVmaW5lIFBDSTIwMDAwX0RJT19DT05UUk9MXzAxCQkweDgzCS8qIHBvcnQgMCwgMSBjb250cm9sICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19DT05UUk9MXzIzCQkweGMzCS8qIHBvcnQgMiwgMyBjb250cm9sICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19CVUZGRVIJCTB4ODIJLyogYnVmZmVyIGRpcmVjdGlvbiBhbmQgZW5hYmxlICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19FT0MJCTB4ZWYJLyogZXZlbiBwb3J0LCBjb250cm9sIG91dHB1dCAqLworI2RlZmluZSBQQ0kyMDAwMF9ESU9fT09DCQkweGZkCS8qIG9kZCBwb3J0LCBjb250cm9sIG91dHB1dCAqLworI2RlZmluZSBQQ0kyMDAwMF9ESU9fRUlDCQkweDkwCS8qIGV2ZW4gcG9ydCwgY29udHJvbCBpbnB1dCAqLworI2RlZmluZSBQQ0kyMDAwMF9ESU9fT0lDCQkweDgyCS8qIG9kZCBwb3J0LCBjb250cm9sIGlucHV0ICovCisjZGVmaW5lIERJT19DQU5ECQkJMHgxMgkvKiBhbmQgYml0IDEsIGJpdCA0IG9mIGNvbnRyb2wgKi8KKyNkZWZpbmUgRElPX0JFCQkJCTB4MDEJLyogYnVmZmVyOiBwb3J0IGVuYWJsZSAqLworI2RlZmluZSBESU9fQk8JCQkJMHgwNAkvKiBidWZmZXI6IG91dHB1dCAqLworI2RlZmluZSBESU9fQkkJCQkJMHgwNQkvKiBidWZmZXI6IGlucHV0ICovCisjZGVmaW5lIERJT19QU18wCQkJMHgwMAkvKiBidWZmZXI6IHBvcnQgc2hpZnQgMCAqLworI2RlZmluZSBESU9fUFNfMQkJCTB4MDEJLyogYnVmZmVyOiBwb3J0IHNoaWZ0IDEgKi8KKyNkZWZpbmUgRElPX1BTXzIJCQkweDA0CS8qIGJ1ZmZlcjogcG9ydCBzaGlmdCAyICovCisjZGVmaW5lIERJT19QU18zCQkJMHgwNQkvKiBidWZmZXI6IHBvcnQgc2hpZnQgMyAqLworCisjZGVmaW5lIFBDSTIwMDA2X0xDSEFOMAkJCTB4MGQKKyNkZWZpbmUgUENJMjAwMDZfU1RST0JFMAkJMHgwYgorI2RlZmluZSBQQ0kyMDAwNl9MQ0hBTjEJCQkweDE1CisjZGVmaW5lIFBDSTIwMDA2X1NUUk9CRTEJCTB4MTMKKworI2RlZmluZSBQQ0kyMDM0MV9JTklUCQkJMHgwNAorI2RlZmluZSBQQ0kyMDM0MV9SRVBNT0RFCQkweDAwCS8qIHNpbmdsZSBzaG90IG1vZGUgKi8KKyNkZWZpbmUgUENJMjAzNDFfUEFDRVIJCQkweDAwCS8qIEhhcmR3YXJlIFBhY2VyIGRpc2FibGVkICovCisjZGVmaW5lIFBDSTIwMzQxX0NIQU5fTlIJCTB4MDQJLyogbnVtYmVyIG9mIGlucHV0IGNoYW5uZWxzICovCisjZGVmaW5lIFBDSTIwMzQxX0NPTkZJR19SRUcJCTB4MTAKKyNkZWZpbmUgUENJMjAzNDFfTU9EX1NUQVRVUwkJMHgwMQorI2RlZmluZSBQQ0kyMDM0MV9PUFRfUkVHCQkweDExCisjZGVmaW5lIFBDSTIwMzQxX1NFVF9USU1FX1JFRwkJMHgxNQorI2RlZmluZSBQQ0kyMDM0MV9MQ0hBTl9BRERSX1JFRwkJMHgxMworI2RlZmluZSBQQ0kyMDM0MV9DSEFOX0xJU1QJCTB4ODAKKyNkZWZpbmUgUENJMjAzNDFfQ0NfUkVTRVQJCTB4MWIKKyNkZWZpbmUgUENJMjAzNDFfQ0hBTl9SRVNFVAkJMHgxOQorI2RlZmluZSBQQ0kyMDM0MV9TT0ZUX1BBQ0VSCQkweDA0CisjZGVmaW5lIFBDSTIwMzQxX1NUQVRVU19SRUcJCTB4MTIKKyNkZWZpbmUgUENJMjAzNDFfTERBVEEJCQkweDAyCisjZGVmaW5lIFBDSTIwMzQxX0RBSVNZX0NIQUlOCQkweDIwCS8qIE9uLWJvYXJkIGlucHV0cyBvbmx5ICovCisjZGVmaW5lIFBDSTIwMzQxX01VWAkJCTB4MDQJLyogRW5hYmxlIG9uLWJvYXJkIE1VWCAqLworI2RlZmluZSBQQ0kyMDM0MV9TQ0FOTElTVAkJMHg4MAkvKiBDaGFubmVsL0dhaW4gU2NhbiBMaXN0ICovCisKK3VuaW9uIHBjaTIweHh4X3N1YmRldl9wcml2YXRlIHsKKwl2b2lkICppb2Jhc2U7CisJc3RydWN0IHsKKwkJdm9pZCAqaW9iYXNlOworCQljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfbGlzdFsyXTsJLyogcmFuZ2Ugb2YgY2hhbm5lbHMgb2YgYW8gbW9kdWxlICovCisJCXVuc2lnbmVkIGludCBsYXN0X2RhdGFbMl07CisJfSBwY2kyMDAwNjsKKwlzdHJ1Y3QgeworCQl2b2lkICppb2Jhc2U7CisJCWludCB0aW1lYmFzZTsKKwkJaW50IHNldHRsaW5nX3RpbWU7CisJCWludCBhaV9nYWluOworCX0gcGNpMjAzNDE7Cit9OworCitzdHJ1Y3QgcGNpMjB4eHhfcHJpdmF0ZSB7CisKKwl2b2lkICppb2FkZHI7CisJdW5pb24gcGNpMjB4eHhfc3ViZGV2X3ByaXZhdGUgc3ViZGV2X3ByaXZhdGVbUENJMjAwMDBfTU9EVUxFU107Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2kyMHh4eF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBDSEFOIChDUl9DSEFOKGl0LT5jaGFubGlzdFswXSkpCisKK3N0YXRpYyBpbnQgcGNpMjB4eHhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2kyMHh4eCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJpaV9wY2kyMGtjIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2kyMHh4eF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNpMjB4eHhfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBwY2kyMDAwNl9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG9wdDAsIGludCBvcHQxKTsKK3N0YXRpYyBpbnQgcGNpMjAzNDFfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBvcHQwLCBpbnQgb3B0MSk7CitzdGF0aWMgaW50IHBjaTIweHh4X2Rpb19pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCisvKgorICBvcHRpb25zWzBdCUJvYXJkIGJhc2UgYWRkcmVzcworICBvcHRpb25zWzFdCUlSUQorICBvcHRpb25zWzJdCWZpcnN0IG9wdGlvbiBmb3IgbW9kdWxlIDEKKyAgb3B0aW9uc1szXQlzZWNvbmQgb3B0aW9uIGZvciBtb2R1bGUgMQorICBvcHRpb25zWzRdCWZpcnN0IG9wdGlvbiBmb3IgbW9kdWxlIDIKKyAgb3B0aW9uc1s1XQlzZWNvbmQgb3B0aW9uIGZvciBtb2R1bGUgMgorICBvcHRpb25zWzZdCWZpcnN0IG9wdGlvbiBmb3IgbW9kdWxlIDMKKyAgb3B0aW9uc1s3XQlzZWNvbmQgb3B0aW9uIGZvciBtb2R1bGUgMworCisgIG9wdGlvbnMgZm9yIFBDSS0yMDM0MU06CisgIGZpcnN0CQlBbmFsb2cgaW5wdXQgZ2FpbiBjb25maWd1cmF0aW9uCisJCTAgPT0gMQorCQkxID09IDEwCisJCTIgPT0gMTAwCisJCTMgPT0gMjAwCisKKyAgb3B0aW9ucyBmb3IgUENJLTIwMDA2TToKKyAgZmlyc3QJCUFuYWxvZyBvdXRwdXQgY2hhbm5lbCAwIHJhbmdlIGNvbmZpZ3VyYXRpb24KKwkJMCA9PSBiaXBvbGFyIDEwICAoLTEwViAtLSArMTBWKQorCQkxID09IHVuaXBvbGFyIDEwViAgKDBWIC0tICsxMFYpCisJCTIgPT0gYmlwb2xhciA1ViAgKC01ViAtLSArNVYpCisgIHNlY29uZAlBbmFsb2cgb3V0cHV0IGNoYW5uZWwgMSByYW5nZSBjb25maWd1cmF0aW9uCisJCTAgPT0gYmlwb2xhciAxMCAgKC0xMFYgLS0gKzEwVikKKwkJMSA9PSB1bmlwb2xhciAxMFYgICgwViAtLSArMTBWKQorCQkyID09IGJpcG9sYXIgNVYgICgtNVYgLS0gKzVWKQorKi8KK3N0YXRpYyBpbnQgcGNpMjB4eHhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGNoYXIgaTsKKwlpbnQgcmV0OworCWludCBpZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSAqc2RwOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMSArIFBDSTIwMDAwX01PRFVMRVMpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2kyMHh4eF9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldnByaXYtPmlvYWRkciA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpaXQtPm9wdGlvbnNbMF07CisJZGV2LT5ib2FyZF9uYW1lID0gInBjaTIwa2MiOworCisJLyogQ2hlY2sgUENJLTIwMDAxIEMtMkEgQ2FycmllciBCb2FyZCBJRCAqLworCWlmICgocmVhZGIoZGV2cHJpdi0+aW9hZGRyKSAmIFBDSTIwMDAwX0lEKSAhPSBQQ0kyMDAwMF9JRCkgeworCQlwcmludGsoImNvbWVkaSVkOiBpaV9wY2kyMGtjIiwgZGV2LT5taW5vcik7CisJCXByaW50aygiIFBDSS0yMDAwMSBDLTJBIENhcnJpZXIgQm9hcmQgYXQgYmFzZT0weCVwIG5vdCBmb3VuZCAhXG4iLCBkZXZwcml2LT5pb2FkZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcHJpbnRrKCJjb21lZGklZDpcbiIsIGRldi0+bWlub3IpOworCXByaW50aygiaWlfcGNpMjBrYzogUENJLTIwMDAxIEMtMkEgYXQgYmFzZT0weCVwXG4iLCBkZXZwcml2LT5pb2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IFBDSTIwMDAwX01PRFVMRVM7IGkrKykgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgaTsKKwkJaWQgPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyAoaSArIDEpICogUENJMjAwMDBfT0ZGU0VUKTsKKwkJcy0+cHJpdmF0ZSA9IGRldnByaXYtPnN1YmRldl9wcml2YXRlICsgaTsKKwkJc2RwID0gcy0+cHJpdmF0ZTsKKwkJc3dpdGNoIChpZCkgeworCQljYXNlIFBDSTIwMDA2X0lEOgorCQkJc2RwLT5wY2kyMDAwNi5pb2Jhc2UgPQorCQkJCWRldnByaXYtPmlvYWRkciArIChpICsgMSkgKiBQQ0kyMDAwMF9PRkZTRVQ7CisJCQlwY2kyMDAwNl9pbml0KGRldiwgcywgaXQtPm9wdGlvbnNbMiAqIGkgKyAyXSwKKwkJCQlpdC0+b3B0aW9uc1syICogaSArIDNdKTsKKwkJCXByaW50aygiY29tZWRpJWQ6IGlpX3BjaTIwa2MiLCBkZXYtPm1pbm9yKTsKKwkJCXByaW50aygiIFBDSS0yMDAwNiBtb2R1bGUgaW4gc2xvdCAlZCBcbiIsIGkgKyAxKTsKKwkJCWJyZWFrOworCQljYXNlIFBDSTIwMzQxX0lEOgorCQkJc2RwLT5wY2kyMDM0MS5pb2Jhc2UgPQorCQkJCWRldnByaXYtPmlvYWRkciArIChpICsgMSkgKiBQQ0kyMDAwMF9PRkZTRVQ7CisJCQlwY2kyMDM0MV9pbml0KGRldiwgcywgaXQtPm9wdGlvbnNbMiAqIGkgKyAyXSwKKwkJCQlpdC0+b3B0aW9uc1syICogaSArIDNdKTsKKwkJCXByaW50aygiY29tZWRpJWQ6IGlpX3BjaTIwa2MiLCBkZXYtPm1pbm9yKTsKKwkJCXByaW50aygiIFBDSS0yMDM0MSBtb2R1bGUgaW4gc2xvdCAlZCBcbiIsIGkgKyAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJpaV9wY2kyMGtjOiB1bmtub3duIG1vZHVsZSBjb2RlIDB4JTAyeCBpbiBzbG90ICVkOiBtb2R1bGUgZGlzYWJsZWRcbiIsIGlkLCBpKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFBDSTIweHh4X0VNUFRZX0lEOgorCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogaW5pdGlhbGl6ZSBzdHJ1Y3QgcGNpMjB4eHhfcHJpdmF0ZSAqLworCXBjaTIweHh4X2Rpb19pbml0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgUENJMjAwMDBfTU9EVUxFUyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMHh4eF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNpMjB4eHg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworLyogcGNpMjAwMDZtICovCisKK3N0YXRpYyBpbnQgcGNpMjAwMDZfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHBjaTIwMDA2X2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpwY2kyMDAwNl9yYW5nZV9saXN0W10gPSB7CisJJnJhbmdlX2JpcG9sYXIxMCwKKwkmcmFuZ2VfdW5pcG9sYXIxMCwKKwkmcmFuZ2VfYmlwb2xhcjUsCit9OworCitzdGF0aWMgaW50IHBjaTIwMDA2X2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgb3B0MCwgaW50IG9wdDEpCit7CisJdW5pb24gcGNpMjB4eHhfc3ViZGV2X3ByaXZhdGUgKnNkcCA9IHMtPnByaXZhdGU7CisKKwlpZiAob3B0MCA8IDAgfHwgb3B0MCA+IDIpCisJCW9wdDAgPSAwOworCWlmIChvcHQxIDwgMCB8fCBvcHQxID4gMikKKwkJb3B0MSA9IDA7CisKKwlzZHAtPnBjaTIwMDA2LmFvX3JhbmdlX2xpc3RbMF0gPSBwY2kyMDAwNl9yYW5nZV9saXN0W29wdDBdOworCXNkcC0+cGNpMjAwMDYuYW9fcmFuZ2VfbGlzdFsxXSA9IHBjaTIwMDA2X3JhbmdlX2xpc3Rbb3B0MV07CisKKwkvKiBhbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDI7CisJcy0+bGVuX2NoYW5saXN0ID0gMjsKKwlzLT5pbnNuX3JlYWQgPSBwY2kyMDAwNl9pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IHBjaTIwMDA2X2luc25fd3JpdGU7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZV9saXN0ID0gc2RwLT5wY2kyMDAwNi5hb19yYW5nZV9saXN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTIwMDA2X2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5pb24gcGNpMjB4eHhfc3ViZGV2X3ByaXZhdGUgKnNkcCA9IHMtPnByaXZhdGU7CisKKwlkYXRhWzBdID0gc2RwLT5wY2kyMDAwNi5sYXN0X2RhdGFbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjAwMDZfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5pb24gcGNpMjB4eHhfc3ViZGV2X3ByaXZhdGUgKnNkcCA9IHMtPnByaXZhdGU7CisJaW50IGhpLCBsbzsKKwl1bnNpZ25lZCBpbnQgYm9hcmRkYXRhOworCisJc2RwLT5wY2kyMDAwNi5sYXN0X2RhdGFbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldID0gZGF0YVswXTsKKwlib2FyZGRhdGEgPSAoKCh1bnNpZ25lZCBpbnQpZGF0YVswXSArIDB4ODAwMCkgJiAweGZmZmYpOwkvKiBjb21lZGktZGF0YSAtPiBib2FyZC1kYXRhICovCisJbG8gPSAoYm9hcmRkYXRhICYgMHhmZik7CisJaGkgPSAoKGJvYXJkZGF0YSA+PiA4KSAmIDB4ZmYpOworCisJc3dpdGNoIChDUl9DSEFOKGluc24tPmNoYW5zcGVjKSkgeworCWNhc2UgMDoKKwkJd3JpdGViKGxvLCBzZHAtPmlvYmFzZSArIFBDSTIwMDA2X0xDSEFOMCk7CisJCXdyaXRlYihoaSwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDAwNl9MQ0hBTjAgKyAxKTsKKwkJd3JpdGViKDB4MDAsIHNkcC0+aW9iYXNlICsgUENJMjAwMDZfU1RST0JFMCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJd3JpdGViKGxvLCBzZHAtPmlvYmFzZSArIFBDSTIwMDA2X0xDSEFOMSk7CisJCXdyaXRlYihoaSwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDAwNl9MQ0hBTjEgKyAxKTsKKwkJd3JpdGViKDB4MDAsIHNkcC0+aW9iYXNlICsgUENJMjAwMDZfU1RST0JFMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiIGNvbWVkaSVkOiBwY2kyMHh4eDogYW8gY2hhbm5lbCBFcnJvciFcbiIsIGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyogUENJMjAzNDFNICovCisKK3N0YXRpYyBpbnQgcGNpMjAzNDFfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBjb25zdCBpbnQgcGNpMjAzNDFfdGltZWJhc2VbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCB9Oworc3RhdGljIGNvbnN0IGludCBwY2kyMDM0MV9zZXR0bGluZ190aW1lW10gPSB7IDB4NTgsIDB4NTgsIDB4OTMsIDB4OTkgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIwXzUgPSB7IDEsIHtCSVBfUkFOR0UoMC41KX0gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMF8wNSA9IHsgMSwge0JJUF9SQU5HRSgwLjA1KX0gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMF8wMjUgPSB7IDEsIHtCSVBfUkFOR0UoMC4wMjUpfSB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IHBjaTIwMzQxX3Jhbmdlc1tdID0geworCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfYmlwb2xhcjBfNSwKKwkmcmFuZ2VfYmlwb2xhcjBfMDUsCisJJnJhbmdlX2JpcG9sYXIwXzAyNSwKK307CisKK3N0YXRpYyBpbnQgcGNpMjAzNDFfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBvcHQwLCBpbnQgb3B0MSkKK3sKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSAqc2RwID0gcy0+cHJpdmF0ZTsKKwlpbnQgb3B0aW9uOworCisJLyogb3B0aW9ucyBoYW5kbGluZyAqLworCWlmIChvcHQwIDwgMCB8fCBvcHQwID4gMykKKwkJb3B0MCA9IDA7CisJc2RwLT5wY2kyMDM0MS50aW1lYmFzZSA9IHBjaTIwMzQxX3RpbWViYXNlW29wdDBdOworCXNkcC0+cGNpMjAzNDEuc2V0dGxpbmdfdGltZSA9IHBjaTIwMzQxX3NldHRsaW5nX3RpbWVbb3B0MF07CisKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IFBDSTIwMzQxX0NIQU5fTlI7CisJcy0+bGVuX2NoYW5saXN0ID0gUENJMjAzNDFfU0NBTkxJU1Q7CisJcy0+aW5zbl9yZWFkID0gcGNpMjAzNDFfaW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSBwY2kyMDM0MV9yYW5nZXNbb3B0MF07CisKKwlvcHRpb24gPSBzZHAtPnBjaTIwMzQxLnRpbWViYXNlIHwgUENJMjAzNDFfUkVQTU9ERTsJLyogZGVwZW5kcyBvbiBnYWluLCB0cmlnZ2VyLCByZXBldGl0aW9uIG1vZGUgKi8KKworCXdyaXRlYihQQ0kyMDM0MV9JTklULCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0NPTkZJR19SRUcpOwkvKiBpbml0aWFsaXplIE1vZHVsZSAqLworCXdyaXRlYihQQ0kyMDM0MV9QQUNFUiwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9NT0RfU1RBVFVTKTsJLyogc2V0IFBhY2VyICovCisJd3JpdGViKG9wdGlvbiwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9PUFRfUkVHKTsJLyogb3B0aW9uIHJlZ2lzdGVyICovCisJd3JpdGViKHNkcC0+cGNpMjAzNDEuc2V0dGxpbmdfdGltZSwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9TRVRfVElNRV9SRUcpOwkvKiBzZXR0bGluZyB0aW1lIGNvdW50ZXIgKi8KKwkvKiB0cmlnZ2VyIG5vdCBpbXBsZW1lbnRlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTIwMzQxX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisgICAgICAgIHVuaW9uIHBjaTIweHh4X3N1YmRldl9wcml2YXRlICpzZHAgPSBzLT5wcml2YXRlOworCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CisJaW50IGxvLCBoaTsKKwl1bnNpZ25lZCBjaGFyIGVvYzsJLyogZW5kIG9mIGNvbnZlcnNpb24gKi8KKwl1bnNpZ25lZCBpbnQgY2xiOwkvKiBjaGFubmVsIGxpc3QgYnl0ZSAqLworCXVuc2lnbmVkIGludCBib2FyZGRhdGE7CisKKwl3cml0ZWIoMSwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9MQ0hBTl9BRERSX1JFRyk7CS8qIHdyaXRlIG51bWJlciBvZiBpbnB1dCBjaGFubmVscyAqLworCWNsYiA9IFBDSTIwMzQxX0RBSVNZX0NIQUlOIHwgUENJMjAzNDFfTVVYIHwgKHNkcC0+cGNpMjAzNDEuYWlfZ2FpbiA8PCAzKQorCQl8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXdyaXRlYihjbGIsIHNkcC0+aW9iYXNlICsgUENJMjAzNDFfQ0hBTl9MSVNUKTsKKwl3cml0ZWIoMHgwMCwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9DQ19SRVNFVCk7CS8qIHJlc2V0IHNldHRsaW5nIHRpbWUgY291bnRlciBhbmQgdHJpZ2dlciBkZWxheSBjb3VudGVyICovCisJd3JpdGViKDB4MDAsIHNkcC0+aW9iYXNlICsgUENJMjAzNDFfQ0hBTl9SRVNFVCk7CisKKwkvKiBnZW5lcmF0ZSBQYWNlciAqLworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiBkYXRhIHBvbGxpbmcgaXNuJ3QgdGhlIG5pY2llc3Qgd2F5IHRvIGdldCB0aGUgZGF0YSwgSSBrbm93LAorCQkgKiBidXQgdGhlcmUgYXJlIG9ubHkgNiBjeWNsZXMgKG1lYW4pIGFuZCBpdCBpcyBlYXNpZXIgdGhhbgorCQkgKiB0aGUgd2hvbGUgaW50ZXJydXB0IHN0dWZmCisJCSAqLworCQlqID0gMDsKKwkJcmVhZGIoc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9TT0ZUX1BBQ0VSKTsJLyogZ2VuZXJhdGUgUGFjZXIgKi8KKwkJZW9jID0gcmVhZGIoc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9TVEFUVVNfUkVHKTsKKwkJd2hpbGUgKChlb2MgPCAweDgwKSAmJiBqIDwgMTAwKSB7CS8qIHBvbGwgSW50ZXJydXB0IEZsYWcgKi8KKwkJCWorKzsKKwkJCWVvYyA9IHJlYWRiKHNkcC0+aW9iYXNlICsgUENJMjAzNDFfU1RBVFVTX1JFRyk7CisJCX0KKwkJaWYgKGogPj0gMTAwKSB7CisJCQlwcmludGsoImNvbWVkaSVkOiAgcGNpMjB4eHg6IEFJIGludGVycnVwdCBjaGFubmVsICVpIHBvbGxpbmcgZXhpdCAhXG4iLCBkZXYtPm1pbm9yLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWxvID0gcmVhZGIoc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9MREFUQSk7CisJCWhpID0gcmVhZGIoc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9MREFUQSArIDEpOworCQlib2FyZGRhdGEgPSBsbyArIDB4MTAwICogaGk7CisJCWRhdGFbaV0gPSAoc2hvcnQpICgoYm9hcmRkYXRhICsgMHg4MDAwKSAmIDB4ZmZmZik7CS8qIGJvYXJkLWRhdGEgLT4gY29tZWRpLWRhdGEgKi8KKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyogbmF0aXZlIERJTyAqLworCitzdGF0aWMgdm9pZCBwY2kyMHh4eF9kaW9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwY2kyMHh4eF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHBjaTIweHh4X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKiBpbml0aWFsaXplIHN0cnVjdCBwY2kyMHh4eF9wcml2YXRlICovCitzdGF0aWMgaW50IHBjaTIweHh4X2Rpb19pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAzMjsKKwlzLT5pbnNuX2JpdHMgPSBwY2kyMHh4eF9kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gcGNpMjB4eHhfZGlvX2luc25fY29uZmlnOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDMyOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW9fYml0cyA9IDA7CisKKwkvKiBkaWdpdGFsIEkvTyBsaW5lcyBkZWZhdWx0IHRvIGlucHV0IG9uIGJvYXJkIHJlc2V0LiAqLworCXBjaTIweHh4X2Rpb19jb25maWcoZGV2LCBzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTIweHh4X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG1hc2ssIGJpdHM7CisKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAobWFzayAmIDB4MDAwMDAwZmYpIHsKKwkJYml0cyA9IDB4MDAwMDAwZmY7CisJfSBlbHNlIGlmIChtYXNrICYgMHgwMDAwZmYwMCkgeworCQliaXRzID0gMHgwMDAwZmYwMDsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDAwZmYwMDAwKSB7CisJCWJpdHMgPSAweDAwZmYwMDAwOworCX0gZWxzZSB7CisJCWJpdHMgPSAweGZmMDAwMDAwOworCX0KKwlpZiAoZGF0YVswXSkgeworCQlzLT5pb19iaXRzIHw9IGJpdHM7CisJfSBlbHNlIHsKKwkJcy0+aW9fYml0cyAmPSB+Yml0czsKKwl9CisJcGNpMjB4eHhfZGlvX2NvbmZpZyhkZXYsIHMpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSBkYXRhWzBdOworCisJcy0+c3RhdGUgJj0gfm1hc2s7CisJcy0+c3RhdGUgfD0gKG1hc2sgJiBkYXRhWzFdKTsKKworCW1hc2sgJj0gcy0+aW9fYml0czsKKwlpZiAobWFzayAmIDB4MDAwMDAwZmYpCisJCXdyaXRlYigocy0+c3RhdGUgPj4gMCkgJiAweGZmLAorCQkJZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPXzApOworCWlmIChtYXNrICYgMHgwMDAwZmYwMCkKKwkJd3JpdGViKChzLT5zdGF0ZSA+PiA4KSAmIDB4ZmYsCisJCQlkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMSk7CisJaWYgKG1hc2sgJiAweDAwZmYwMDAwKQorCQl3cml0ZWIoKHMtPnN0YXRlID4+IDE2KSAmIDB4ZmYsCisJCQlkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMik7CisJaWYgKG1hc2sgJiAweGZmMDAwMDAwKQorCQl3cml0ZWIoKHMtPnN0YXRlID4+IDI0KSAmIDB4ZmYsCisJCQlkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMyk7CisKKwlkYXRhWzFdID0gcmVhZGIoZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPXzApOworCWRhdGFbMV0gfD0gcmVhZGIoZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPXzEpIDw8IDg7CisJZGF0YVsxXSB8PSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMikgPDwgMTY7CisJZGF0YVsxXSB8PSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMykgPDwgMjQ7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIHZvaWQgcGNpMjB4eHhfZGlvX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGNoYXIgY29udHJvbF8wMTsKKwl1bnNpZ25lZCBjaGFyIGNvbnRyb2xfMjM7CisJdW5zaWduZWQgY2hhciBidWZmZXI7CisKKwljb250cm9sXzAxID0gcmVhZGIoZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPX0NPTlRST0xfMDEpOworCWNvbnRyb2xfMjMgPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fQ09OVFJPTF8yMyk7CisJYnVmZmVyID0gcmVhZGIoZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPX0JVRkZFUik7CisKKwlpZiAocy0+aW9fYml0cyAmIDB4MDAwMDAwZmYpIHsKKwkJLyogb3V0cHV0IHBvcnQgMCAqLworCQljb250cm9sXzAxICY9IFBDSTIwMDAwX0RJT19FT0M7CisJCWJ1ZmZlciA9IChidWZmZXIgJiAofihESU9fQkUgPDwgRElPX1BTXzApKSkgfCAoRElPX0JPIDw8CisJCQlESU9fUFNfMCk7CisJfSBlbHNlIHsKKwkJLyogaW5wdXQgcG9ydCAwICovCisJCWNvbnRyb2xfMDEgPSAoY29udHJvbF8wMSAmIERJT19DQU5EKSB8IFBDSTIwMDAwX0RJT19FSUM7CisJCWJ1ZmZlciA9IChidWZmZXIgJiAofihESU9fQkkgPDwgRElPX1BTXzApKSk7CisJfQorCWlmIChzLT5pb19iaXRzICYgMHgwMDAwZmYwMCkgeworCQkvKiBvdXRwdXQgcG9ydCAxICovCisJCWNvbnRyb2xfMDEgJj0gUENJMjAwMDBfRElPX09PQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CRSA8PCBESU9fUFNfMSkpKSB8IChESU9fQk8gPDwKKwkJCURJT19QU18xKTsKKwl9IGVsc2UgeworCQkvKiBpbnB1dCBwb3J0IDEgKi8KKwkJY29udHJvbF8wMSA9IChjb250cm9sXzAxICYgRElPX0NBTkQpIHwgUENJMjAwMDBfRElPX09JQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CSSA8PCBESU9fUFNfMSkpKTsKKwl9CisJaWYgKHMtPmlvX2JpdHMgJiAweDAwZmYwMDAwKSB7CisJCS8qIG91dHB1dCBwb3J0IDIgKi8KKwkJY29udHJvbF8yMyAmPSBQQ0kyMDAwMF9ESU9fRU9DOworCQlidWZmZXIgPSAoYnVmZmVyICYgKH4oRElPX0JFIDw8IERJT19QU18yKSkpIHwgKERJT19CTyA8PAorCQkJRElPX1BTXzIpOworCX0gZWxzZSB7CisJCS8qIGlucHV0IHBvcnQgMiAqLworCQljb250cm9sXzIzID0gKGNvbnRyb2xfMjMgJiBESU9fQ0FORCkgfCBQQ0kyMDAwMF9ESU9fRUlDOworCQlidWZmZXIgPSAoYnVmZmVyICYgKH4oRElPX0JJIDw8IERJT19QU18yKSkpOworCX0KKwlpZiAocy0+aW9fYml0cyAmIDB4ZmYwMDAwMDApIHsKKwkJLyogb3V0cHV0IHBvcnQgMyAqLworCQljb250cm9sXzIzICY9IFBDSTIwMDAwX0RJT19PT0M7CisJCWJ1ZmZlciA9IChidWZmZXIgJiAofihESU9fQkUgPDwgRElPX1BTXzMpKSkgfCAoRElPX0JPIDw8CisJCQlESU9fUFNfMyk7CisJfSBlbHNlIHsKKwkJLyogaW5wdXQgcG9ydCAzICovCisJCWNvbnRyb2xfMjMgPSAoY29udHJvbF8yMyAmIERJT19DQU5EKSB8IFBDSTIwMDAwX0RJT19PSUM7CisJCWJ1ZmZlciA9IChidWZmZXIgJiAofihESU9fQkkgPDwgRElPX1BTXzMpKSk7CisJfQorCXdyaXRlYihjb250cm9sXzAxLCBkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fQ09OVFJPTF8wMSk7CisJd3JpdGViKGNvbnRyb2xfMjMsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT19DT05UUk9MXzIzKTsKKwl3cml0ZWIoYnVmZmVyLCBkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fQlVGRkVSKTsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIHBjaTIweHh4X2RvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogWFhYIGlmIHRoZSBjaGFubmVsIGlzIGNvbmZpZ3VyZWQgZm9yIGlucHV0LCBkb2VzIHRoaXMKKwkgICBkbyBiYWQgdGhpbmdzPyAqLworCS8qIFhYWCBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBvbmx5IHVwZGF0ZSB0aGUgcmVnaXN0ZXJzCisJICAgdGhhdCBfbmVlZF8gdG8gYmUgdXBkYXRlZC4gIFRoaXMgcmVxdWlyZXMgY2hhbmdlcyB0bworCSAgIGNvbWVkaSwgaG93ZXZlci4gKi8KKwl3cml0ZWIoKHMtPnN0YXRlID4+IDApICYgMHhmZiwgZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPXzApOworCXdyaXRlYigocy0+c3RhdGUgPj4gOCkgJiAweGZmLCBkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMSk7CisJd3JpdGViKChzLT5zdGF0ZSA+PiAxNikgJiAweGZmLCBkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMik7CisJd3JpdGViKChzLT5zdGF0ZSA+PiAyNCkgJiAweGZmLCBkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNpMjB4eHhfZGkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvKiBYWFggc2FtZSBub3RlIGFzIGFib3ZlICovCisJdW5zaWduZWQgaW50IGJpdHM7CisKKwliaXRzID0gcmVhZGIoZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPXzApOworCWJpdHMgfD0gcmVhZGIoZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPXzEpIDw8IDg7CisJYml0cyB8PSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMikgPDwgMTY7CisJYml0cyB8PSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMykgPDwgMjQ7CisKKwlyZXR1cm4gYml0czsKK30KKyNlbmRpZgorCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTIweHh4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzg4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCkBAIC0wLDAgKzEsOTc2IEBACisvKgorICBjb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKKyAgaGFyZHdhcmUgZHJpdmVyIGZvciBKUjMvUENJIGZvcmNlIHNlbnNvciBib2FyZAorCisgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgQ29weXJpZ2h0IChDKSAyMDA3IEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGpyM19wY2kKK0Rlc2NyaXB0aW9uOiBKUjMvUENJIGZvcmNlIHNlbnNvciBib2FyZAorQXV0aG9yOiBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtKUjNdIFBDSSBmb3JjZSBzZW5zb3IgYm9hcmQgKGpyM19wY2kpCisKKyAgVGhlIERTUCBvbiB0aGUgYm9hcmQgcmVxdWlyZXMgaW5pdGlhbGl6YXRpb24gY29kZSwgd2hpY2ggY2FuCisgIGJlIGxvYWRlZCBieSBwbGFjaW5nIGl0IGluIC9saWIvZmlybXdhcmUvY29tZWRpLgorICBUaGUgaW5pdGlhbGl6YXRpb24gY29kZSBzaG91bGQgYmUgc29tZXdoZXJlIG9uIHRoZSBtZWRpYSB5b3UgZ290CisgIHdpdGggeW91ciBjYXJkLiBPbmUgdmVyc2lvbiBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmNvbWVkaS5vcmcKKyAgaW4gdGhlIGNvbWVkaV9ub25mcmVlX2Zpcm13YXJlIHRhcmJhbGwuCisKKyAgQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG51bWJlciAtIGlmIGJ1cyBudW1iZXIgYW5kIHNsb3QgbnVtYmVyIGFyZSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZHJpdmVyIHNlYXJjaCBmb3IgZmlyc3QgdW51c2VkIGNhcmQKKyAgWzFdIC0gUENJIHNsb3QgbnVtYmVyCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICJqcjNfcGNpLmgiCisKKy8qIEhvdHBsdWcgZmlybXdhcmUgbG9hZGluZyBzdHVmZiAqLworCitzdGF0aWMgdm9pZCBjb21lZGlfZndfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGdob3N0X3JlbGVhc2VcbiIpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZSBjb21lZGlfZndfZGV2aWNlID0geworCS5pbml0X25hbWUgPSAiY29tZWRpIiwKKwkucmVsZWFzZSA9IGNvbWVkaV9md19yZWxlYXNlCit9OworCit0eXBlZGVmIGludCBjb21lZGlfZmlybXdhcmVfY2FsbGJhY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJY29uc3QgdTggKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisKK3N0YXRpYyBpbnQgY29tZWRpX2xvYWRfZmlybXdhcmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJY2hhciAqbmFtZSwgY29tZWRpX2Zpcm13YXJlX2NhbGxiYWNrIGNiKQoreworCWludCByZXN1bHQgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY2hhciAqZmlybXdhcmVfcGF0aDsKKwlzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4ID0gImNvbWVkaS8iOworCisJZmlybXdhcmVfcGF0aCA9IGttYWxsb2Moc3RybGVuKHByZWZpeCkgKyBzdHJsZW4obmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZpcm13YXJlX3BhdGgpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwl9IGVsc2UgeworCQlmaXJtd2FyZV9wYXRoWzBdID0gJ1wwJzsKKwkJc3RyY2F0KGZpcm13YXJlX3BhdGgsIHByZWZpeCk7CisJCXN0cmNhdChmaXJtd2FyZV9wYXRoLCBuYW1lKTsKKwkJcmVzdWx0ID0gZGV2aWNlX3JlZ2lzdGVyKCZjb21lZGlfZndfZGV2aWNlKTsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQlyZXN1bHQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlybXdhcmVfcGF0aCwKKwkJCQkmY29tZWRpX2Z3X2RldmljZSk7CisJCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCQlpZiAoIWNiKSB7CisJCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQkJfSBlbHNlIHsKKwkJCQkJcmVzdWx0ID0gY2IoZGV2LCBmdy0+ZGF0YSwgZnctPnNpemUpOworCQkJCX0KKwkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwkJCX0KKwkJCWRldmljZV91bnJlZ2lzdGVyKCZjb21lZGlfZndfZGV2aWNlKTsKKwkJfQorCQlrZnJlZShmaXJtd2FyZV9wYXRoKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0pSMyAweDE3NjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9KUjNfMV9DSEFOTkVMIDB4MzExMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pSM18yX0NIQU5ORUwgMHgzMTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSlIzXzNfQ0hBTk5FTCAweDMxMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9KUjNfNF9DSEFOTkVMIDB4MzExNAorCitzdGF0aWMgaW50IGpyM19wY2lfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQganIzX3BjaV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2pyM19wY2kgPSB7CisgICAgICBkcml2ZXJfbmFtZToianIzX3BjaSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6anIzX3BjaV9hdHRhY2gsCisgICAgICBkZXRhY2g6anIzX3BjaV9kZXRhY2gsCit9OworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoanIzX3BjaV9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0pSMywgUENJX0RFVklDRV9JRF9KUjNfMV9DSEFOTkVMLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9KUjMsIFBDSV9ERVZJQ0VfSURfSlIzXzJfQ0hBTk5FTCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfSlIzLCBQQ0lfREVWSUNFX0lEX0pSM18zX0NIQU5ORUwsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0pSMywgUENJX0RFVklDRV9JRF9KUjNfNF9DSEFOTkVMLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBqcjNfcGNpX3BjaV90YWJsZSk7CisKK3N0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlIHsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCWludCBwY2lfZW5hYmxlZDsKKwl2b2xhdGlsZSBzdHJ1Y3QganIzX3QgKmlvYmFzZTsKKwlpbnQgbl9jaGFubmVsczsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKKworc3RydWN0IHBvbGxfZGVsYXlfdCB7CisKKwlpbnQgbWluOworCWludCBtYXg7Cit9OworCisKK3N0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlIHsKKwl2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWw7CisJdW5zaWduZWQgbG9uZyBuZXh0X3RpbWVfbWluOworCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lX21heDsKKwllbnVtIHsgc3RhdGVfanIzX3BvbGwsCisJCXN0YXRlX2pyM19pbml0X3dhaXRfZm9yX29mZnNldCwKKwkJc3RhdGVfanIzX2luaXRfdHJhbnNmb3JtX2NvbXBsZXRlLAorCQlzdGF0ZV9qcjNfaW5pdF9zZXRfZnVsbF9zY2FsZV9jb21wbGV0ZSwKKwkJc3RhdGVfanIzX2luaXRfdXNlX29mZnNldF9jb21wbGV0ZSwKKwkJc3RhdGVfanIzX2RvbmUKKwl9IHN0YXRlOworCWludCBjaGFubmVsX25vOworCWludCBzZXJpYWxfbm87CisJaW50IG1vZGVsX25vOworCXN0cnVjdCB7CisJCWludCBsZW5ndGg7CisJCXN0cnVjdCBjb21lZGlfa3JhbmdlIHJhbmdlOworCX0gcmFuZ2VbOV07CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlX3RhYmxlX2xpc3RbOCAqIDcgKyAyXTsKKwl1bnNpZ25lZCBpbnQgbWF4ZGF0YV9saXN0WzggKiA3ICsgMl07CisJdTE2IGVycm9yczsKKwlpbnQgcmV0cmllczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG9sbF9kZWxheV90IHBvbGxfZGVsYXlfbWluX21heChpbnQgbWluLCBpbnQgbWF4KQoreworCXN0cnVjdCBwb2xsX2RlbGF5X3QgcmVzdWx0OworCisJcmVzdWx0Lm1pbiA9IG1pbjsKKwlyZXN1bHQubWF4ID0gbWF4OworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfY29tcGxldGUodm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsKQoreworCXJldHVybiBnZXRfczE2KCZjaGFubmVsLT5jb21tYW5kX3dvcmQwKSA9PSAwOworfQorCitzdHJ1Y3QgdHJhbnNmb3JtX3QgeworCXN0cnVjdCB7CisJCXUxNiBsaW5rX3R5cGU7CisJCXMxNiBsaW5rX2Ftb3VudDsKKwl9IGxpbmtbOF07Cit9OworCitzdGF0aWMgdm9pZCBzZXRfdHJhbnNmb3Jtcyh2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwsCisJc3RydWN0IHRyYW5zZm9ybV90IHRyYW5zZiwgc2hvcnQgbnVtKQoreworCWludCBpOworCisJbnVtICY9IDB4MDAwZjsJCS8vIE1ha2Ugc3VyZSB0aGF0IDAgPD0gbnVtIDw9IDE1CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCisJCXNldF91MTYoJmNoYW5uZWwtPnRyYW5zZm9ybXNbbnVtXS5saW5rW2ldLmxpbmtfdHlwZSwKKwkJCXRyYW5zZi5saW5rW2ldLmxpbmtfdHlwZSk7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCXNldF9zMTYoJmNoYW5uZWwtPnRyYW5zZm9ybXNbbnVtXS5saW5rW2ldLmxpbmtfYW1vdW50LAorCQkJdHJhbnNmLmxpbmtbaV0ubGlua19hbW91bnQpOworCQljb21lZGlfdWRlbGF5KDEpOworCQlpZiAodHJhbnNmLmxpbmtbaV0ubGlua190eXBlID09IGVuZF94X2Zvcm0pIHsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2VfdHJhbnNmb3JtKHZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCwgc2hvcnQgdHJhbnNmX251bSkKK3sKKwlzZXRfczE2KCZjaGFubmVsLT5jb21tYW5kX3dvcmQwLCAweDA1MDAgKyAodHJhbnNmX251bSAmIDB4MDAwZikpOworfQorCitzdGF0aWMgdm9pZCB1c2Vfb2Zmc2V0KHZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCwgc2hvcnQgb2Zmc2V0X251bSkKK3sKKwlzZXRfczE2KCZjaGFubmVsLT5jb21tYW5kX3dvcmQwLCAweDA2MDAgKyAob2Zmc2V0X251bSAmIDB4MDAwZikpOworfQorCitzdGF0aWMgdm9pZCBzZXRfb2Zmc2V0KHZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzZXRfczE2KCZjaGFubmVsLT5jb21tYW5kX3dvcmQwLCAweDA3MDApOworfQorCitzdHJ1Y3Qgc2l4X2F4aXNfdCB7CisJczE2IGZ4OworCXMxNiBmeTsKKwlzMTYgZno7CisJczE2IG14OworCXMxNiBteTsKKwlzMTYgbXo7Cit9OworCitzdGF0aWMgdm9pZCBzZXRfZnVsbF9zY2FsZXModm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsLAorCXN0cnVjdCBzaXhfYXhpc190IGZ1bGxfc2NhbGUpCit7CisJcHJpbnRrKCIlZCAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJZnVsbF9zY2FsZS5meCwKKwkJZnVsbF9zY2FsZS5meSwKKwkJZnVsbF9zY2FsZS5meiwgZnVsbF9zY2FsZS5teCwgZnVsbF9zY2FsZS5teSwgZnVsbF9zY2FsZS5teik7CisJc2V0X3MxNigmY2hhbm5lbC0+ZnVsbF9zY2FsZS5meCwgZnVsbF9zY2FsZS5meCk7CisJc2V0X3MxNigmY2hhbm5lbC0+ZnVsbF9zY2FsZS5meSwgZnVsbF9zY2FsZS5meSk7CisJc2V0X3MxNigmY2hhbm5lbC0+ZnVsbF9zY2FsZS5meiwgZnVsbF9zY2FsZS5meik7CisJc2V0X3MxNigmY2hhbm5lbC0+ZnVsbF9zY2FsZS5teCwgZnVsbF9zY2FsZS5teCk7CisJc2V0X3MxNigmY2hhbm5lbC0+ZnVsbF9zY2FsZS5teSwgZnVsbF9zY2FsZS5teSk7CisJc2V0X3MxNigmY2hhbm5lbC0+ZnVsbF9zY2FsZS5teiwgZnVsbF9zY2FsZS5teik7CisJc2V0X3MxNigmY2hhbm5lbC0+Y29tbWFuZF93b3JkMCwgMHgwYTAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzaXhfYXhpc190IGdldF9taW5fZnVsbF9zY2FsZXModm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsKQoreworCXN0cnVjdCBzaXhfYXhpc190IHJlc3VsdDsKKwlyZXN1bHQuZnggPSBnZXRfczE2KCZjaGFubmVsLT5taW5fZnVsbF9zY2FsZS5meCk7CisJcmVzdWx0LmZ5ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWluX2Z1bGxfc2NhbGUuZnkpOworCXJlc3VsdC5meiA9IGdldF9zMTYoJmNoYW5uZWwtPm1pbl9mdWxsX3NjYWxlLmZ6KTsKKwlyZXN1bHQubXggPSBnZXRfczE2KCZjaGFubmVsLT5taW5fZnVsbF9zY2FsZS5teCk7CisJcmVzdWx0Lm15ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWluX2Z1bGxfc2NhbGUubXkpOworCXJlc3VsdC5teiA9IGdldF9zMTYoJmNoYW5uZWwtPm1pbl9mdWxsX3NjYWxlLm16KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHNpeF9heGlzX3QgZ2V0X21heF9mdWxsX3NjYWxlcyh2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IHNpeF9heGlzX3QgcmVzdWx0OworCXJlc3VsdC5meCA9IGdldF9zMTYoJmNoYW5uZWwtPm1heF9mdWxsX3NjYWxlLmZ4KTsKKwlyZXN1bHQuZnkgPSBnZXRfczE2KCZjaGFubmVsLT5tYXhfZnVsbF9zY2FsZS5meSk7CisJcmVzdWx0LmZ6ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWF4X2Z1bGxfc2NhbGUuZnopOworCXJlc3VsdC5teCA9IGdldF9zMTYoJmNoYW5uZWwtPm1heF9mdWxsX3NjYWxlLm14KTsKKwlyZXN1bHQubXkgPSBnZXRfczE2KCZjaGFubmVsLT5tYXhfZnVsbF9zY2FsZS5teSk7CisJcmVzdWx0Lm16ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWF4X2Z1bGxfc2NhbGUubXopOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQganIzX3BjaV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgKnA7CisJaW50IGNoYW5uZWw7CisKKwlwID0gcy0+cHJpdmF0ZTsKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKHAgPT0gTlVMTCB8fCBjaGFubmVsID4gNTcpIHsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpbnQgaTsKKworCQlyZXN1bHQgPSBpbnNuLT5uOworCQlpZiAocC0+c3RhdGUgIT0gc3RhdGVfanIzX2RvbmUgfHwKKwkJCShnZXRfdTE2KCZwLT5jaGFubmVsLT4KKwkJCQkJZXJyb3JzKSAmICh3YXRjaF9kb2cgfCB3YXRjaF9kb2cyIHwKKwkJCQkJc2Vuc29yX2NoYW5nZSkpKSB7CisJCQkvKiBObyBzZW5zb3Igb3Igc2Vuc29yIGNoYW5nZWQgKi8KKwkJCWlmIChwLT5zdGF0ZSA9PSBzdGF0ZV9qcjNfZG9uZSkgeworCQkJCS8qIFJlc3RhcnQgcG9sbGluZyAqLworCQkJCXAtPnN0YXRlID0gc3RhdGVfanIzX3BvbGw7CisJCQl9CisJCQlyZXN1bHQgPSAtRUFHQUlOOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJCWlmIChjaGFubmVsIDwgNTYpIHsKKwkJCQlpbnQgYXhpcywgZmlsdGVyOworCisJCQkJYXhpcyA9IGNoYW5uZWwgJSA4OworCQkJCWZpbHRlciA9IGNoYW5uZWwgLyA4OworCQkJCWlmIChwLT5zdGF0ZSAhPSBzdGF0ZV9qcjNfZG9uZSkgeworCQkJCQlkYXRhW2ldID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpbnQgRiA9IDA7CisJCQkJCXN3aXRjaCAoYXhpcykgeworCQkJCQljYXNlIDA6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQlmeCk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAxOnsKKwkJCQkJCQlGID0gZ2V0X3MxNigmcC0+CisJCQkJCQkJCWNoYW5uZWwtPgorCQkJCQkJCQlmaWx0ZXJbZmlsdGVyXS4KKwkJCQkJCQkJZnkpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjp7CisJCQkJCQkJRiA9IGdldF9zMTYoJnAtPgorCQkJCQkJCQljaGFubmVsLT4KKwkJCQkJCQkJZmlsdGVyW2ZpbHRlcl0uCisJCQkJCQkJCWZ6KTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDM6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQlteCk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA0OnsKKwkJCQkJCQlGID0gZ2V0X3MxNigmcC0+CisJCQkJCQkJCWNoYW5uZWwtPgorCQkJCQkJCQlmaWx0ZXJbZmlsdGVyXS4KKwkJCQkJCQkJbXkpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNTp7CisJCQkJCQkJRiA9IGdldF9zMTYoJnAtPgorCQkJCQkJCQljaGFubmVsLT4KKwkJCQkJCQkJZmlsdGVyW2ZpbHRlcl0uCisJCQkJCQkJCW16KTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDY6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQl2MSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA3OnsKKwkJCQkJCQlGID0gZ2V0X3MxNigmcC0+CisJCQkJCQkJCWNoYW5uZWwtPgorCQkJCQkJCQlmaWx0ZXJbZmlsdGVyXS4KKwkJCQkJCQkJdjIpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGF0YVtpXSA9IEYgKyAweDQwMDA7CisJCQkJfQorCQkJfSBlbHNlIGlmIChjaGFubmVsID09IDU2KSB7CisJCQkJaWYgKHAtPnN0YXRlICE9IHN0YXRlX2pyM19kb25lKSB7CisJCQkJCWRhdGFbaV0gPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWRhdGFbaV0gPQorCQkJCQkJZ2V0X3UxNigmcC0+Y2hhbm5lbC0+bW9kZWxfbm8pOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoY2hhbm5lbCA9PSA1NykgeworCQkJCWlmIChwLT5zdGF0ZSAhPSBzdGF0ZV9qcjNfZG9uZSkgeworCQkJCQlkYXRhW2ldID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlkYXRhW2ldID0KKwkJCQkJCWdldF91MTYoJnAtPmNoYW5uZWwtPnNlcmlhbF9ubyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGpyM19wY2lfb3BlbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QganIzX3BjaV9kZXZfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKworCXByaW50aygianIzX3BjaV9vcGVuXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2cHJpdi0+bl9jaGFubmVsczsgaSsrKSB7CisJCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpwOworCisJCXAgPSBkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZTsKKwkJaWYgKHApIHsKKwkJCXByaW50aygic2VyaWFsOiAlcCAlZCAoJWQpXG4iLCBwLCBwLT5zZXJpYWxfbm8sCisJCQkJcC0+Y2hhbm5lbF9ubyk7CisJCX0KKwl9Cit9CisKK2ludCByZWFkX2lkbV93b3JkKGNvbnN0IHU4ICogZGF0YSwgc2l6ZV90IHNpemUsIGludCAqcG9zLCB1bnNpZ25lZCBpbnQgKnZhbCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpZiAocG9zICE9IDAgJiYgdmFsICE9IDApIHsKKwkJLy8gU2tpcCBvdmVyIG5vbiBoZXgKKwkJZm9yICg7ICpwb3MgPCBzaXplICYmICFpc3hkaWdpdChkYXRhWypwb3NdKTsgKCpwb3MpKyspIHsKKwkJfQorCQkvLyBDb2xsZWN0IHZhbHVlCisJCSp2YWwgPSAwOworCQlmb3IgKDsgKnBvcyA8IHNpemUgJiYgaXN4ZGlnaXQoZGF0YVsqcG9zXSk7ICgqcG9zKSsrKSB7CisJCQljaGFyIGNoID0gdG9sb3dlcihkYXRhWypwb3NdKTsKKwkJCXJlc3VsdCA9IDE7CisJCQlpZiAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JykgeworCQkJCSp2YWwgPSAoKnZhbCA8PCA0KSArIChjaCAtICcwJyk7CisJCQl9IGVsc2UgaWYgKCdhJyA8PSBjaCAmJiBjaCA8PSAnZicpIHsKKwkJCQkqdmFsID0gKCp2YWwgPDwgNCkgKyAoY2ggLSAnYScgKyAxMCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBqcjNfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHU4ICogZGF0YSwKKwlzaXplX3Qgc2l6ZSkKK3sKKwkvKgorCSAqIElETSBmaWxlIGZvcm1hdCBpczoKKwkgKiAgIHsgY291bnQsIGFkZHJlc3MsIGRhdGEgPGNvdW50PiB9ICoKKwkgKiAgIGZmZmYKKwkgKi8KKwlpbnQgcmVzdWx0LCBtb3JlLCBwb3MsIE9LOworCisJcmVzdWx0ID0gMDsKKwltb3JlID0gMTsKKwlwb3MgPSAwOworCU9LID0gMDsKKwl3aGlsZSAobW9yZSkgeworCQl1bnNpZ25lZCBpbnQgY291bnQsIGFkZHI7CisKKwkJbW9yZSA9IG1vcmUgJiYgcmVhZF9pZG1fd29yZChkYXRhLCBzaXplLCAmcG9zLCAmY291bnQpOworCQlpZiAobW9yZSAmJiBjb3VudCA9PSAweGZmZmYpIHsKKwkJCU9LID0gMTsKKwkJCWJyZWFrOworCQl9CisJCW1vcmUgPSBtb3JlICYmIHJlYWRfaWRtX3dvcmQoZGF0YSwgc2l6ZSwgJnBvcywgJmFkZHIpOworCQl3aGlsZSAobW9yZSAmJiBjb3VudCA+IDApIHsKKwkJCXVuc2lnbmVkIGludCBkdW1teTsKKwkJCW1vcmUgPSBtb3JlICYmIHJlYWRfaWRtX3dvcmQoZGF0YSwgc2l6ZSwgJnBvcywgJmR1bW15KTsKKwkJCWNvdW50LS07CisJCX0KKwl9CisKKwlpZiAoIU9LKSB7CisJCXJlc3VsdCA9IC1FTk9EQVRBOworCX0gZWxzZSB7CisJCWludCBpOworCQlzdHJ1Y3QganIzX3BjaV9kZXZfcHJpdmF0ZSAqcCA9IGRldi0+cHJpdmF0ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcC0+bl9jaGFubmVsczsgaSsrKSB7CisJCQlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqc3A7CisKKwkJCXNwID0gZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGU7CisJCQltb3JlID0gMTsKKwkJCXBvcyA9IDA7CisJCQl3aGlsZSAobW9yZSkgeworCQkJCXVuc2lnbmVkIGludCBjb3VudCwgYWRkcjsKKwkJCQltb3JlID0gbW9yZQorCQkJCQkmJiByZWFkX2lkbV93b3JkKGRhdGEsIHNpemUsICZwb3MsCisJCQkJCSZjb3VudCk7CisJCQkJaWYgKG1vcmUgJiYgY291bnQgPT0gMHhmZmZmKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQltb3JlID0gbW9yZQorCQkJCQkmJiByZWFkX2lkbV93b3JkKGRhdGEsIHNpemUsICZwb3MsCisJCQkJCSZhZGRyKTsKKwkJCQlwcmludGsoIkxvYWRpbmcjJWQgJTQuNHggYnl0ZXMgYXQgJTQuNHhcbiIsIGksCisJCQkJCWNvdW50LCBhZGRyKTsKKwkJCQl3aGlsZSAobW9yZSAmJiBjb3VudCA+IDApIHsKKwkJCQkJaWYgKGFkZHIgJiAweDQwMDApIHsKKwkJCQkJCS8vIDE2IGJpdCBkYXRhLCBuZXZlciBzZWVuIGluIHJlYWwgbGlmZSEhCisJCQkJCQl1bnNpZ25lZCBpbnQgZGF0YTE7CisKKwkJCQkJCW1vcmUgPSBtb3JlCisJCQkJCQkJJiYgcmVhZF9pZG1fd29yZChkYXRhLAorCQkJCQkJCXNpemUsICZwb3MsICZkYXRhMSk7CisJCQkJCQljb3VudC0tOworCQkJCQkJLy8gcHJpbnRrKCJqcjNfZGF0YSwgbm90IHRlc3RlZFxuIik7CisJCQkJCQkvLyAgICAgICAganIzW2FkZHIgKyAweDIwMDAwICogcG51bV0gPSBkYXRhMTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vICBEb3dubG9hZCAyNCBiaXQgcHJvZ3JhbQorCQkJCQkJdW5zaWduZWQgaW50IGRhdGExLCBkYXRhMjsKKworCQkJCQkJbW9yZSA9IG1vcmUKKwkJCQkJCQkmJiByZWFkX2lkbV93b3JkKGRhdGEsCisJCQkJCQkJc2l6ZSwgJnBvcywgJmRhdGExKTsKKwkJCQkJCW1vcmUgPSBtb3JlCisJCQkJCQkJJiYgcmVhZF9pZG1fd29yZChkYXRhLAorCQkJCQkJCXNpemUsICZwb3MsICZkYXRhMik7CisJCQkJCQljb3VudCAtPSAyOworCQkJCQkJaWYgKG1vcmUpIHsKKwkJCQkJCQlzZXRfdTE2KCZwLT5pb2Jhc2UtPgorCQkJCQkJCQljaGFubmVsW2ldLgorCQkJCQkJCQlwcm9ncmFtX2xvdworCQkJCQkJCQlbYWRkcl0sIGRhdGExKTsKKwkJCQkJCQljb21lZGlfdWRlbGF5KDEpOworCQkJCQkJCXNldF91MTYoJnAtPmlvYmFzZS0+CisJCQkJCQkJCWNoYW5uZWxbaV0uCisJCQkJCQkJCXByb2dyYW1faGlnaAorCQkJCQkJCQlbYWRkcl0sIGRhdGEyKTsKKwkJCQkJCQljb21lZGlfdWRlbGF5KDEpOworCisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYWRkcisrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHBvbGxfZGVsYXlfdCBqcjNfcGNpX3BvbGxfc3ViZGV2aWNlKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgcG9sbF9kZWxheV90IHJlc3VsdCA9IHBvbGxfZGVsYXlfbWluX21heCgxMDAwLCAyMDAwKTsKKwlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqcCA9IHMtPnByaXZhdGU7CisKKwlpZiAocCkgeworCQl2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwgPSBwLT5jaGFubmVsOworCQlpbnQgZXJyb3JzID0gZ2V0X3UxNigmY2hhbm5lbC0+ZXJyb3JzKTsKKworCQlpZiAoZXJyb3JzICE9IHAtPmVycm9ycykgeworCQkJcHJpbnRrKCJFcnJvcnM6ICV4IC0+ICV4XG4iLCBwLT5lcnJvcnMsIGVycm9ycyk7CisJCQlwLT5lcnJvcnMgPSBlcnJvcnM7CisJCX0KKwkJaWYgKGVycm9ycyAmICh3YXRjaF9kb2cgfCB3YXRjaF9kb2cyIHwgc2Vuc29yX2NoYW5nZSkpIHsKKwkJCS8vIFNlbnNvciBjb21tdW5pY2F0aW9uIGxvc3QsIGZvcmNlIHBvbGwgbW9kZQorCQkJcC0+c3RhdGUgPSBzdGF0ZV9qcjNfcG9sbDsKKworCQl9CisJCXN3aXRjaCAocC0+c3RhdGUpIHsKKwkJY2FzZSBzdGF0ZV9qcjNfcG9sbDp7CisJCQkJdTE2IG1vZGVsX25vID0gZ2V0X3UxNigmY2hhbm5lbC0+bW9kZWxfbm8pOworCQkJCXUxNiBzZXJpYWxfbm8gPSBnZXRfdTE2KCZjaGFubmVsLT5zZXJpYWxfbm8pOworCQkJCWlmICgoZXJyb3JzICYgKHdhdGNoX2RvZyB8IHdhdGNoX2RvZzIpKSB8fAorCQkJCQltb2RlbF9ubyA9PSAwIHx8IHNlcmlhbF9ubyA9PSAwKSB7CisJCQkJCS8vIFN0aWxsIG5vIHNlbnNvciwga2VlcCBvbiBwb2xsaW5nLiBTaW5jZSBpdCB0YWtlcyB1cCB0bworCQkJCQkvLyAxMCBzZWNvbmRzIGZvciBvZmZzZXRzIHRvIHN0YWJpbGl6ZSwgcG9sbGluZyBlYWNoCisJCQkJCS8vIHNlY29uZCBzaG91bGQgc3VmZmljZS4KKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDEwMDAsIDIwMDApOworCQkJCX0gZWxzZSB7CisJCQkJCXAtPnJldHJpZXMgPSAwOworCQkJCQlwLT5zdGF0ZSA9CisJCQkJCQlzdGF0ZV9qcjNfaW5pdF93YWl0X2Zvcl9vZmZzZXQ7CisJCQkJCXJlc3VsdCA9IHBvbGxfZGVsYXlfbWluX21heCgxMDAwLCAyMDAwKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBzdGF0ZV9qcjNfaW5pdF93YWl0X2Zvcl9vZmZzZXQ6eworCQkJCXAtPnJldHJpZXMrKzsKKwkJCQlpZiAocC0+cmV0cmllcyA8IDEwKSB7CisJCQkJCS8vIFdhaXQgZm9yIG9mZmVzZXQgdG8gc3RhYmlsaXplICg8IDEwIHMgYWNjb3JkaW5nIHRvIG1hbnVhbCkKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDEwMDAsIDIwMDApOworCQkJCX0gZWxzZSB7CisJCQkJCXN0cnVjdCB0cmFuc2Zvcm1fdCB0cmFuc2Y7CisKKwkJCQkJcC0+bW9kZWxfbm8gPQorCQkJCQkJZ2V0X3UxNigmY2hhbm5lbC0+bW9kZWxfbm8pOworCQkJCQlwLT5zZXJpYWxfbm8gPQorCQkJCQkJZ2V0X3UxNigmY2hhbm5lbC0+c2VyaWFsX25vKTsKKworCQkJCQlwcmludGsoIlNldHRpbmcgdHJhbnNmb3JtIGZvciBjaGFubmVsICVkXG4iLCBwLT5jaGFubmVsX25vKTsKKwkJCQkJcHJpbnRrKCJTZW5zb3IgTW9kZWwgICAgID0gJWlcbiIsCisJCQkJCQlwLT5tb2RlbF9ubyk7CisJCQkJCXByaW50aygiU2Vuc29yIFNlcmlhbCAgICA9ICVpXG4iLAorCQkJCQkJcC0+c2VyaWFsX25vKTsKKworCQkJCQkvLyBUcmFuc2Zvcm1hdGlvbiBhbGwgemVyb3MKKwkJCQkJdHJhbnNmLmxpbmtbMF0ubGlua190eXBlID0KKwkJCQkJCShlbnVtIGxpbmtfdHlwZXMpMDsKKwkJCQkJdHJhbnNmLmxpbmtbMF0ubGlua19hbW91bnQgPSAwOworCQkJCQl0cmFuc2YubGlua1sxXS5saW5rX3R5cGUgPQorCQkJCQkJKGVudW0gbGlua190eXBlcykwOworCQkJCQl0cmFuc2YubGlua1sxXS5saW5rX2Ftb3VudCA9IDA7CisJCQkJCXRyYW5zZi5saW5rWzJdLmxpbmtfdHlwZSA9CisJCQkJCQkoZW51bSBsaW5rX3R5cGVzKTA7CisJCQkJCXRyYW5zZi5saW5rWzJdLmxpbmtfYW1vdW50ID0gMDsKKwkJCQkJdHJhbnNmLmxpbmtbM10ubGlua190eXBlID0KKwkJCQkJCShlbnVtIGxpbmtfdHlwZXMpMDsKKwkJCQkJdHJhbnNmLmxpbmtbM10ubGlua19hbW91bnQgPSAwOworCisJCQkJCXNldF90cmFuc2Zvcm1zKGNoYW5uZWwsIHRyYW5zZiwgMCk7CisJCQkJCXVzZV90cmFuc2Zvcm0oY2hhbm5lbCwgMCk7CisJCQkJCXAtPnN0YXRlID0KKwkJCQkJCXN0YXRlX2pyM19pbml0X3RyYW5zZm9ybV9jb21wbGV0ZTsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDIwLCAxMDApOwkvLyBBbGxvdyAyMCBtcyBmb3IgY29tcGxldGlvbgorCQkJCX0KKwkJCX0gYnJlYWs7CisJCWNhc2Ugc3RhdGVfanIzX2luaXRfdHJhbnNmb3JtX2NvbXBsZXRlOnsKKwkJCQlpZiAoIWlzX2NvbXBsZXRlKGNoYW5uZWwpKSB7CisJCQkJCXByaW50aygic3RhdGVfanIzX2luaXRfdHJhbnNmb3JtX2NvbXBsZXRlIGNvbXBsZXRlID0gJWRcbiIsIGlzX2NvbXBsZXRlKGNoYW5uZWwpKTsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDIwLCAxMDApOworCQkJCX0gZWxzZSB7CisJCQkJCS8vIFNldCBmdWxsIHNjYWxlCisJCQkJCXN0cnVjdCBzaXhfYXhpc190IG1pbl9mdWxsX3NjYWxlOworCQkJCQlzdHJ1Y3Qgc2l4X2F4aXNfdCBtYXhfZnVsbF9zY2FsZTsKKworCQkJCQltaW5fZnVsbF9zY2FsZSA9CisJCQkJCQlnZXRfbWluX2Z1bGxfc2NhbGVzKGNoYW5uZWwpOworCQkJCQlwcmludGsoIk9idGFpbmVkIE1pbi4gRnVsbCBTY2FsZXM6XG4iKTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtaW5fZnVsbF9zY2FsZSkuZngpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1pbl9mdWxsX3NjYWxlKS5meSk7CisJCQkJCXByaW50aygiJWkgICAiLCAobWluX2Z1bGxfc2NhbGUpLmZ6KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtaW5fZnVsbF9zY2FsZSkubXgpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1pbl9mdWxsX3NjYWxlKS5teSk7CisJCQkJCXByaW50aygiJWkgICAiLCAobWluX2Z1bGxfc2NhbGUpLm16KTsKKwkJCQkJcHJpbnRrKCJcbiIpOworCisJCQkJCW1heF9mdWxsX3NjYWxlID0KKwkJCQkJCWdldF9tYXhfZnVsbF9zY2FsZXMoY2hhbm5lbCk7CisJCQkJCXByaW50aygiT2J0YWluZWQgTWF4LiBGdWxsIFNjYWxlczpcbiIpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1heF9mdWxsX3NjYWxlKS5meCk7CisJCQkJCXByaW50aygiJWkgICAiLCAobWF4X2Z1bGxfc2NhbGUpLmZ5KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtYXhfZnVsbF9zY2FsZSkuZnopOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1heF9mdWxsX3NjYWxlKS5teCk7CisJCQkJCXByaW50aygiJWkgICAiLCAobWF4X2Z1bGxfc2NhbGUpLm15KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtYXhfZnVsbF9zY2FsZSkubXopOworCQkJCQlwcmludGsoIlxuIik7CisKKwkJCQkJc2V0X2Z1bGxfc2NhbGVzKGNoYW5uZWwsCisJCQkJCQltYXhfZnVsbF9zY2FsZSk7CisKKwkJCQkJcC0+c3RhdGUgPQorCQkJCQkJc3RhdGVfanIzX2luaXRfc2V0X2Z1bGxfc2NhbGVfY29tcGxldGU7CisJCQkJCXJlc3VsdCA9IHBvbGxfZGVsYXlfbWluX21heCgyMCwgMTAwKTsJLy8gQWxsb3cgMjAgbXMgZm9yIGNvbXBsZXRpb24KKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBzdGF0ZV9qcjNfaW5pdF9zZXRfZnVsbF9zY2FsZV9jb21wbGV0ZTp7CisJCQkJaWYgKCFpc19jb21wbGV0ZShjaGFubmVsKSkgeworCQkJCQlwcmludGsoInN0YXRlX2pyM19pbml0X3NldF9mdWxsX3NjYWxlX2NvbXBsZXRlIGNvbXBsZXRlID0gJWRcbiIsIGlzX2NvbXBsZXRlKGNoYW5uZWwpKTsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDIwLCAxMDApOworCQkJCX0gZWxzZSB7CisJCQkJCXZvbGF0aWxlIHN0cnVjdCBmb3JjZV9hcnJheSAqZnVsbF9zY2FsZTsKKworCQkJCQkvLyBVc2UgcmFuZ2VzIGluIGtOIG9yIHdlIHdpbGwgb3ZlcmZsb3cgYXJvdW50IDIwMDBOIQorCQkJCQlmdWxsX3NjYWxlID0gJmNoYW5uZWwtPmZ1bGxfc2NhbGU7CisJCQkJCXAtPnJhbmdlWzBdLnJhbmdlLm1pbiA9CisJCQkJCQktZ2V0X3MxNigmZnVsbF9zY2FsZS0+ZngpICoKKwkJCQkJCTEwMDA7CisJCQkJCXAtPnJhbmdlWzBdLnJhbmdlLm1heCA9CisJCQkJCQlnZXRfczE2KCZmdWxsX3NjYWxlLT5meCkgKiAxMDAwOworCQkJCQlwLT5yYW5nZVsxXS5yYW5nZS5taW4gPQorCQkJCQkJLWdldF9zMTYoJmZ1bGxfc2NhbGUtPmZ5KSAqCisJCQkJCQkxMDAwOworCQkJCQlwLT5yYW5nZVsxXS5yYW5nZS5tYXggPQorCQkJCQkJZ2V0X3MxNigmZnVsbF9zY2FsZS0+ZnkpICogMTAwMDsKKwkJCQkJcC0+cmFuZ2VbMl0ucmFuZ2UubWluID0KKwkJCQkJCS1nZXRfczE2KCZmdWxsX3NjYWxlLT5meikgKgorCQkJCQkJMTAwMDsKKwkJCQkJcC0+cmFuZ2VbMl0ucmFuZ2UubWF4ID0KKwkJCQkJCWdldF9zMTYoJmZ1bGxfc2NhbGUtPmZ6KSAqIDEwMDA7CisJCQkJCXAtPnJhbmdlWzNdLnJhbmdlLm1pbiA9CisJCQkJCQktZ2V0X3MxNigmZnVsbF9zY2FsZS0+bXgpICogMTAwOworCQkJCQlwLT5yYW5nZVszXS5yYW5nZS5tYXggPQorCQkJCQkJZ2V0X3MxNigmZnVsbF9zY2FsZS0+bXgpICogMTAwOworCQkJCQlwLT5yYW5nZVs0XS5yYW5nZS5taW4gPQorCQkJCQkJLWdldF9zMTYoJmZ1bGxfc2NhbGUtPm15KSAqIDEwMDsKKwkJCQkJcC0+cmFuZ2VbNF0ucmFuZ2UubWF4ID0KKwkJCQkJCWdldF9zMTYoJmZ1bGxfc2NhbGUtPm15KSAqIDEwMDsKKwkJCQkJcC0+cmFuZ2VbNV0ucmFuZ2UubWluID0KKwkJCQkJCS1nZXRfczE2KCZmdWxsX3NjYWxlLT5teikgKiAxMDA7CisJCQkJCXAtPnJhbmdlWzVdLnJhbmdlLm1heCA9CisJCQkJCQlnZXRfczE2KCZmdWxsX3NjYWxlLT5teikgKiAxMDA7CisJCQkJCXAtPnJhbmdlWzZdLnJhbmdlLm1pbiA9IC1nZXRfczE2KCZmdWxsX3NjYWxlLT52MSkgKiAxMDA7CS8vID8/CisJCQkJCXAtPnJhbmdlWzZdLnJhbmdlLm1heCA9IGdldF9zMTYoJmZ1bGxfc2NhbGUtPnYxKSAqIDEwMDsJLy8gPz8KKwkJCQkJcC0+cmFuZ2VbN10ucmFuZ2UubWluID0gLWdldF9zMTYoJmZ1bGxfc2NhbGUtPnYyKSAqIDEwMDsJLy8gPz8KKwkJCQkJcC0+cmFuZ2VbN10ucmFuZ2UubWF4ID0gZ2V0X3MxNigmZnVsbF9zY2FsZS0+djIpICogMTAwOwkvLyA/PworCQkJCQlwLT5yYW5nZVs4XS5yYW5nZS5taW4gPSAwOworCQkJCQlwLT5yYW5nZVs4XS5yYW5nZS5tYXggPSA2NTUzNTsKKworCQkJCQl7CisJCQkJCQlpbnQgaTsKKwkJCQkJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJCQkJCQlwcmludGsoIiVkICVkIC0gJWRcbiIsCisJCQkJCQkJCWksCisJCQkJCQkJCXAtPnJhbmdlW2ldLgorCQkJCQkJCQlyYW5nZS5taW4sCisJCQkJCQkJCXAtPnJhbmdlW2ldLgorCQkJCQkJCQlyYW5nZS5tYXgpOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJdXNlX29mZnNldChjaGFubmVsLCAwKTsKKwkJCQkJcC0+c3RhdGUgPQorCQkJCQkJc3RhdGVfanIzX2luaXRfdXNlX29mZnNldF9jb21wbGV0ZTsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDQwLCAxMDApOwkvLyBBbGxvdyA0MCBtcyBmb3IgY29tcGxldGlvbgorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2pyM19pbml0X3VzZV9vZmZzZXRfY29tcGxldGU6eworCQkJCWlmICghaXNfY29tcGxldGUoY2hhbm5lbCkpIHsKKwkJCQkJcHJpbnRrKCJzdGF0ZV9qcjNfaW5pdF91c2Vfb2Zmc2V0X2NvbXBsZXRlIGNvbXBsZXRlID0gJWRcbiIsIGlzX2NvbXBsZXRlKGNoYW5uZWwpKTsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDIwLCAxMDApOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50aygiRGVmYXVsdCBvZmZzZXRzICVkICVkICVkICVkICVkICVkXG4iLCBnZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLmZ4KSwgZ2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5meSksIGdldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMuZnopLCBnZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLm14KSwgZ2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5teSksIGdldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMubXopKTsKKworCQkJCQlzZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLmZ4LCAwKTsKKwkJCQkJc2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5meSwgMCk7CisJCQkJCXNldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMuZnosIDApOworCQkJCQlzZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLm14LCAwKTsKKwkJCQkJc2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5teSwgMCk7CisJCQkJCXNldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMubXosIDApOworCisJCQkJCXNldF9vZmZzZXQoY2hhbm5lbCk7CisKKwkJCQkJcC0+c3RhdGUgPSBzdGF0ZV9qcjNfZG9uZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBzdGF0ZV9qcjNfZG9uZTp7CisJCQkJcG9sbF9kZWxheV9taW5fbWF4KDEwMDAwLCAyMDAwMCk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDp7CisJCQkJcG9sbF9kZWxheV9taW5fbWF4KDEwMDAsIDIwMDApOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQganIzX3BjaV9wb2xsX2Rldih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGRhdGE7CisJc3RydWN0IGpyM19wY2lfZGV2X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBub3c7CisJaW50IGRlbGF5OworCWludCBpOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGVsYXkgPSAxMDAwOworCW5vdyA9IGppZmZpZXM7CisJLy8gUG9sbCBhbGwgY2hhbm5lbHMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgcG9sbGVkCisJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPm5fY2hhbm5lbHM7IGkrKykgeworCQlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqc3ViZGV2cHJpdiA9IGRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlOworCQlpZiAobm93ID4gc3ViZGV2cHJpdi0+bmV4dF90aW1lX21pbikgeworCQkJc3RydWN0IHBvbGxfZGVsYXlfdCBzdWJfZGVsYXk7CisKKwkJCXN1Yl9kZWxheSA9IGpyM19wY2lfcG9sbF9zdWJkZXZpY2UoJmRldi0+c3ViZGV2aWNlc1tpXSk7CisJCQlzdWJkZXZwcml2LT5uZXh0X3RpbWVfbWluID0KKwkJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhzdWJfZGVsYXkubWluKTsKKwkJCXN1YmRldnByaXYtPm5leHRfdGltZV9tYXggPQorCQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHN1Yl9kZWxheS5tYXgpOworCQkJaWYgKHN1Yl9kZWxheS5tYXggJiYgc3ViX2RlbGF5Lm1heCA8IGRlbGF5KSB7CisJCQkJLy8gV2FrZSB1cCBhcyBsYXRlIGFzIHBvc3NpYmxlIC0+IHBvbGwgYXMgbWFueSBjaGFubmVscyBhcworCQkJCS8vIHBvc3NpYmxlIGF0IG9uY2UKKwkJCQlkZWxheSA9IHN1Yl9kZWxheS5tYXg7CisJCQl9CisJCX0KKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWRldnByaXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhkZWxheSk7CisJYWRkX3RpbWVyKCZkZXZwcml2LT50aW1lcik7Cit9CisKK3N0YXRpYyBpbnQganIzX3BjaV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHBjaV9kZXYgKmNhcmQgPSBOVUxMOworCWludCBvcHRfYnVzLCBvcHRfc2xvdCwgaTsKKwlzdHJ1Y3QganIzX3BjaV9kZXZfcHJpdmF0ZSAqZGV2cHJpdjsKKworCXByaW50aygiY29tZWRpJWQ6IGpyM19wY2lcbiIsIGRldi0+bWlub3IpOworCisJb3B0X2J1cyA9IGl0LT5vcHRpb25zWzBdOworCW9wdF9zbG90ID0gaXQtPm9wdGlvbnNbMV07CisKKwlpZiAoc2l6ZW9mKHN0cnVjdCBqcjNfY2hhbm5lbCkgIT0gMHhjMDApIHsKKwkJcHJpbnRrKCJzaXplb2Yoc3RydWN0IGpyM19jaGFubmVsKSA9ICV4IFtleHBlY3RlZCAleF1cbiIsCisJCQkodW5zaWduZWQpc2l6ZW9mKHN0cnVjdCBqcjNfY2hhbm5lbCksIDB4YzAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzdWx0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QganIzX3BjaV9kZXZfcHJpdmF0ZSkpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljYXJkID0gTlVMTDsKKwlkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCWluaXRfdGltZXIoJmRldnByaXYtPnRpbWVyKTsKKwl3aGlsZSAoMSkgeworCQljYXJkID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9KUjMsIFBDSV9BTllfSUQsIGNhcmQpOworCQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJCQkvKiBObyBjYXJkIGZvdW5kICovCisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoY2FyZC0+ZGV2aWNlKSB7CisJCQljYXNlIFBDSV9ERVZJQ0VfSURfSlIzXzFfQ0hBTk5FTDp7CisJCQkJCWRldnByaXYtPm5fY2hhbm5lbHMgPSAxOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgUENJX0RFVklDRV9JRF9KUjNfMl9DSEFOTkVMOnsKKwkJCQkJZGV2cHJpdi0+bl9jaGFubmVscyA9IDI7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0pSM18zX0NIQU5ORUw6eworCQkJCQlkZXZwcml2LT5uX2NoYW5uZWxzID0gMzsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFBDSV9ERVZJQ0VfSURfSlIzXzRfQ0hBTk5FTDp7CisJCQkJCWRldnByaXYtPm5fY2hhbm5lbHMgPSA0OworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6eworCQkJCQlkZXZwcml2LT5uX2NoYW5uZWxzID0gMDsKKwkJCQl9CisJCQl9CisJCQlpZiAoZGV2cHJpdi0+bl9jaGFubmVscyA+PSAxKSB7CisJCQkJaWYgKG9wdF9idXMgPT0gMCAmJiBvcHRfc2xvdCA9PSAwKSB7CisJCQkJCS8qIFRha2UgZmlyc3QgYXZhaWxhYmxlIGNhcmQgKi8KKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIGlmIChvcHRfYnVzID09IGNhcmQtPmJ1cy0+bnVtYmVyICYmCisJCQkJCW9wdF9zbG90ID09IFBDSV9TTE9UKGNhcmQtPmRldmZuKSkgeworCQkJCQkvKiBUYWtlIHJlcXVlc3RlZCBjYXJkICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoIWNhcmQpIHsKKwkJcHJpbnRrKCIgbm8ganIzX3BjaSBmb3VuZFxuIik7CisJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCWRldnByaXYtPnBjaV9kZXYgPSBjYXJkOworCQlkZXYtPmJvYXJkX25hbWUgPSAianIzX3BjaSI7CisJfQorCWlmICgocmVzdWx0ID0gY29tZWRpX3BjaV9lbmFibGUoY2FyZCwgImpyM19wY2kiKSkgPCAwKSB7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXZwcml2LT5wY2lfZW5hYmxlZCA9IDE7CisJZGV2cHJpdi0+aW9iYXNlID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoY2FyZCwgMCksIHNpemVvZihzdHJ1Y3QganIzX3QpKTsKKwlyZXN1bHQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgZGV2cHJpdi0+bl9jaGFubmVscyk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0OworCisJZGV2LT5vcGVuID0ganIzX3BjaV9vcGVuOworCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJZGV2LT5zdWJkZXZpY2VzW2ldLnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJZGV2LT5zdWJkZXZpY2VzW2ldLnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJCWRldi0+c3ViZGV2aWNlc1tpXS5uX2NoYW4gPSA4ICogNyArIDI7CisJCWRldi0+c3ViZGV2aWNlc1tpXS5pbnNuX3JlYWQgPSBqcjNfcGNpX2FpX2luc25fcmVhZDsKKwkJZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUgPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlKSB7CisJCQlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqcDsKKwkJCWludCBqOworCisJCQlwID0gZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGU7CisJCQlwLT5jaGFubmVsID0gJmRldnByaXYtPmlvYmFzZS0+Y2hhbm5lbFtpXS5kYXRhOworCQkJcHJpbnRrKCJwLT5jaGFubmVsICVwICVwICgldHgpXG4iLAorCQkJCXAtPmNoYW5uZWwsIGRldnByaXYtPmlvYmFzZSwKKwkJCQkoKGNoYXIgKikocC0+Y2hhbm5lbCkgLQorCQkJCQkoY2hhciAqKShkZXZwcml2LT5pb2Jhc2UpKSk7CisJCQlwLT5jaGFubmVsX25vID0gaTsKKwkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCQlpbnQgazsKKworCQkJCXAtPnJhbmdlW2pdLmxlbmd0aCA9IDE7CisJCQkJcC0+cmFuZ2Vbal0ucmFuZ2UubWluID0gLTEwMDAwMDA7CisJCQkJcC0+cmFuZ2Vbal0ucmFuZ2UubWF4ID0gMTAwMDAwMDsKKwkJCQlmb3IgKGsgPSAwOyBrIDwgNzsgaysrKSB7CisJCQkJCXAtPnJhbmdlX3RhYmxlX2xpc3RbaiArIGsgKiA4XSA9CisJCQkJCQkoc3RydWN0IGNvbWVkaV9scmFuZ2UgKikgJiBwLT5yYW5nZVtqXTsKKwkJCQkJcC0+bWF4ZGF0YV9saXN0W2ogKyBrICogOF0gPSAweDdmZmY7CisJCQkJfQorCQkJfQorCQkJcC0+cmFuZ2VbOF0ubGVuZ3RoID0gMTsKKwkJCXAtPnJhbmdlWzhdLnJhbmdlLm1pbiA9IDA7CisJCQlwLT5yYW5nZVs4XS5yYW5nZS5tYXggPSA2NTUzNjsKKworCQkJcC0+cmFuZ2VfdGFibGVfbGlzdFs1Nl0gPQorCQkJCShzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKSAmIHAtPnJhbmdlWzhdOworCQkJcC0+cmFuZ2VfdGFibGVfbGlzdFs1N10gPQorCQkJCShzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKSAmIHAtPnJhbmdlWzhdOworCQkJcC0+bWF4ZGF0YV9saXN0WzU2XSA9IDB4ZmZmZjsKKwkJCXAtPm1heGRhdGFfbGlzdFs1N10gPSAweGZmZmY7CisJCQkvLyBDaGFubmVsIHNwZWNpZmljIHJhbmdlIGFuZCBtYXhkYXRhCisJCQlkZXYtPnN1YmRldmljZXNbaV0ucmFuZ2VfdGFibGUgPSAwOworCQkJZGV2LT5zdWJkZXZpY2VzW2ldLnJhbmdlX3RhYmxlX2xpc3QgPQorCQkJCXAtPnJhbmdlX3RhYmxlX2xpc3Q7CisJCQlkZXYtPnN1YmRldmljZXNbaV0ubWF4ZGF0YSA9IDA7CisJCQlkZXYtPnN1YmRldmljZXNbaV0ubWF4ZGF0YV9saXN0ID0gcC0+bWF4ZGF0YV9saXN0OworCQl9CisJfQorCisJLy8gUmVzZXQgRFNQIGNhcmQKKwlkZXZwcml2LT5pb2Jhc2UtPmNoYW5uZWxbMF0ucmVzZXQgPSAwOworCisJcmVzdWx0ID0gY29tZWRpX2xvYWRfZmlybXdhcmUoZGV2LCAianIzcGNpLmlkbSIsIGpyM19kb3dubG9hZF9maXJtd2FyZSk7CisJcHJpbnRrKCJGaXJtYXJlIGxvYWQgJWRcbiIsIHJlc3VsdCk7CisKKwlpZiAocmVzdWx0IDwgMCkgeworCQlnb3RvIG91dDsKKwl9CisJLy8gVE9ETzogdXNlIGZpcm13YXJlIHRvIGxvYWQgcHJlZmVycmVkIG9mZnNldCB0YWJsZXMuIFN1Z2dlc3RlZCBmb3JtYXQ6CisJLy8gbW9kZWwgc2VyaWFsIEZ4IEZ5IEZ6IE14IE15IE16XG4KKwkvLworCS8vIGNvbWVkaV9sb2FkX2Zpcm13YXJlKGRldiwgImpyM19vZmZzZXRzX3RhYmxlIiwganIzX2Rvd25sb2FkX2Zpcm13YXJlKTsKKworCS8vIEl0IHRha2VzIGEgZmV3IG1pbGxpc2Vjb25kcyBmb3Igc29mdHdhcmUgdG8gc2V0dGxlCisJLy8gYXMgbXVjaCBhcyB3ZSBjYW4gcmVhZCBmaXJtd2FyZSB2ZXJzaW9uCisJbXNsZWVwX2ludGVycnVwdGlibGUoMjUpOworCWZvciAoaSA9IDA7IGkgPCAweDE4OyBpKyspIHsKKwkJcHJpbnRrKCIlYyIsCisJCQlnZXRfdTE2KCZkZXZwcml2LT5pb2Jhc2UtPmNoYW5uZWxbMF0uZGF0YS4KKwkJCQljb3B5cmlnaHRbaV0pID4+IDgpOworCX0KKworCS8vIFN0YXJ0IGNhcmQgdGltZXIKKwlmb3IgKGkgPSAwOyBpIDwgZGV2cHJpdi0+bl9jaGFubmVsczsgaSsrKSB7CisJCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpwID0gZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGU7CisKKwkJcC0+bmV4dF90aW1lX21pbiA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCk7CisJCXAtPm5leHRfdGltZV9tYXggPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDAwKTsKKwl9CisKKwlkZXZwcml2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCWRldnByaXYtPnRpbWVyLmZ1bmN0aW9uID0ganIzX3BjaV9wb2xsX2RldjsKKwlkZXZwcml2LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJYWRkX3RpbWVyKCZkZXZwcml2LT50aW1lcik7CisKKyAgICAgIG91dDoKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGpyM19wY2lfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCXN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCisJcHJpbnRrKCJjb21lZGklZDoganIzX3BjaTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlpZiAoZGV2cHJpdikgeworCQlkZWxfdGltZXJfc3luYygmZGV2cHJpdi0+dGltZXIpOworCisJCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJCQlrZnJlZShkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSk7CisJCQl9CisJCX0KKworCQlpZiAoZGV2cHJpdi0+aW9iYXNlKSB7CisJCQlpb3VubWFwKCh2b2lkICopZGV2cHJpdi0+aW9iYXNlKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+cGNpX2VuYWJsZWQpIHsKKwkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfanIzX3BjaSwganIzX3BjaV9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4NWYyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmgKQEAgLTAsMCArMSw2ODEgQEAKKy8qIEhlbHBlciB0eXBlcyB0byB0YWtlIGNhcmUgb2YgdGhlIGZhY3QgdGhhdCB0aGUgRFNQIGNhcmQgbWVtb3J5CisgKiBpcyAxNiBiaXRzLCBidXQgYWxpZ25lZCBvbiBhIDMyIGJpdCBQQ0kgYm91bmRhcnkKKyAqLworCitzdGF0aWMgaW5saW5lIHUxNiBnZXRfdTE2KHZvbGF0aWxlIGNvbnN0IHUzMiAqIHApCit7CisJcmV0dXJuICh1MTYpIHJlYWRsKHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3UxNih2b2xhdGlsZSB1MzIgKiBwLCB1MTYgdmFsKQoreworCXdyaXRlbCh2YWwsIHApOworfQorCitzdGF0aWMgaW5saW5lIHMxNiBnZXRfczE2KHZvbGF0aWxlIGNvbnN0IHMzMiAqIHApCit7CisJcmV0dXJuIChzMTYpIHJlYWRsKHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3MxNih2b2xhdGlsZSBzMzIgKiBwLCBzMTYgdmFsKQoreworCXdyaXRlbCh2YWwsIHApOworfQorCisvKiBUaGUgcmF3IGRhdGEgaXMgc3RvcmVkIGluIGEgZm9ybWF0IHdoaWNoIGZhY2lsaXRhdGVzIHJhcGlkCisgKiBwcm9jZXNzaW5nIGJ5IHRoZSBKUjMgRFNQIGNoaXAuIFRoZSByYXdfY2hhbm5lbCBzdHJ1Y3R1cmUgc2hvd3MgdGhlCisgKiBmb3JtYXQgZm9yIGEgc2luZ2xlIGNoYW5uZWwgb2YgZGF0YS4gRWFjaCBjaGFubmVsIHRha2VzIGZvdXIsCisgKiB0d28tYnl0ZSB3b3Jkcy4KKyAqCisgKiBSYXdfdGltZSBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHdoaWNoIHNob3dzIHRoZSB2YWx1ZSBvZiB0aGUgSlIzCisgKiBEU1AncyBpbnRlcm5hbCBjbG9jayBhdCB0aGUgdGltZSB0aGUgc2FtcGxlIHdhcyByZWNlaXZlZC4gVGhlIGNsb2NrCisgKiBydW5zIGF0IDEvMTAgdGhlIEpSMyBEU1AgY3ljbGUgdGltZS4gSlIzJ3Mgc2xvd2VzdCBEU1AgcnVucyBhdCAxMAorICogTWh6LiBBdCAxMCBNaHogcmF3X3RpbWUgd291bGQgdGhlcmVmb3JlIGNsb2NrIGF0IDEgTWh6LgorICoKKyAqIFJhd19kYXRhIGlzIHRoZSByYXcgZGF0YSByZWNlaXZlZCBkaXJlY3RseSBmcm9tIHRoZSBzZW5zb3IuIFRoZQorICogc2Vuc29yIGRhdGEgc3RyZWFtIGlzIGNhcGFibGUgb2YgcmVwcmVzZW50aW5nIDE2IGRpZmZlcmVudAorICogY2hhbm5lbHMuIENoYW5uZWwgMCBzaG93cyB0aGUgZXhjaXRhdGlvbiB2b2x0YWdlIGF0IHRoZSBzZW5zb3IuIEl0CisgKiBpcyB1c2VkIHRvIHJlZ3VsYXRlIHRoZSB2b2x0YWdlIG92ZXIgdmFyaW91cyBjYWJsZSBsZW5ndGhzLgorICogQ2hhbm5lbHMgMS02IGNvbnRhaW4gdGhlIGNvdXBsZWQgZm9yY2UgZGF0YSBGeCB0aHJvdWdoIE16LiBDaGFubmVsCisgKiA3IGNvbnRhaW5zIHRoZSBzZW5zb3IncyBjYWxpYnJhdGlvbiBkYXRhLiBUaGUgdXNlIG9mIGNoYW5uZWxzIDgtMTUKKyAqIHZhcmllcyB3aXRoIGRpZmZlcmVudCBzZW5zb3JzLgorICovCisKK3N0cnVjdCByYXdfY2hhbm5lbCB7CisJdTMyIHJhd190aW1lOworCXMzMiByYXdfZGF0YTsKKwlzMzIgcmVzZXJ2ZWRbMl07Cit9OworCisvKiBUaGUgZm9yY2VfYXJyYXkgc3RydWN0dXJlIHNob3dzIHRoZSBsYXlvdXQgZm9yIHRoZSBkZWNvdXBsZWQgYW5kCisgKiBmaWx0ZXJlZCBmb3JjZSBkYXRhLgorICovCitzdHJ1Y3QgZm9yY2VfYXJyYXkgeworCXMzMiBmeDsKKwlzMzIgZnk7CisJczMyIGZ6OworCXMzMiBteDsKKwlzMzIgbXk7CisJczMyIG16OworCXMzMiB2MTsKKwlzMzIgdjI7Cit9OworCisvKiBUaGUgc2l4X2F4aXNfYXJyYXkgc3RydWN0dXJlIHNob3dzIHRoZSBsYXlvdXQgZm9yIHRoZSBvZmZzZXRzIGFuZAorICogdGhlIGZ1bGwgc2NhbGVzLgorICovCitzdHJ1Y3Qgc2l4X2F4aXNfYXJyYXkgeworCXMzMiBmeDsKKwlzMzIgZnk7CisJczMyIGZ6OworCXMzMiBteDsKKwlzMzIgbXk7CisJczMyIG16OworfTsKKworLyogVkVDVF9CSVRTICovCisvKiBUaGUgdmVjdF9iaXRzIHN0cnVjdHVyZSBzaG93cyB0aGUgbGF5b3V0IGZvciBpbmRpY2F0aW5nCisgKiB3aGljaCBheGVzIHRvIHVzZSBpbiBjb21wdXRpbmcgdGhlIHZlY3RvcnMuIEVhY2ggYml0IHNpZ25pZmllcworICogc2VsZWN0aW9uIG9mIGEgc2luZ2xlIGF4aXMuIFRoZSBWMXggYXhpcyBiaXQgY29ycmVzcG9uZHMgdG8gYSBoZXgKKyAqIHZhbHVlIG9mIDB4MDAwMSBhbmQgdGhlIFYyeiBiaXQgY29ycmVzcG9uZHMgdG8gYSBoZXggdmFsdWUgb2YKKyAqIDB4MDAyMC4gRXhhbXBsZTogdG8gc3BlY2lmeSB0aGUgYXhlcyBWMXgsIFYxeSwgVjJ4LCBhbmQgVjJ6IHRoZQorICogcGF0dGVybiB3b3VsZCBiZSAweDAwMmIuIFZlY3RvciAxIGRlZmF1bHRzIHRvIGEgZm9yY2UgdmVjdG9yIGFuZAorICogdmVjdG9yIDIgZGVmYXVsdHMgdG8gYSBtb21lbnQgdmVjdG9yLiBJdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2Ugb25lCisgKiBvciB0aGUgb3RoZXIgc28gdGhhdCB0d28gZm9yY2UgdmVjdG9ycyBvciB0d28gbW9tZW50IHZlY3RvcnMgYXJlCisgKiBjYWxjdWxhdGVkLiBTZXR0aW5nIHRoZSBjaGFuZ2VWMSBiaXQgb3IgdGhlIGNoYW5nZVYyIGJpdCB3aWxsCisgKiBjaGFuZ2UgdGhhdCB2ZWN0b3IgdG8gYmUgdGhlIG9wcG9zaXRlIG9mIGl0cyBkZWZhdWx0LiBUaGVyZWZvcmUgdG8KKyAqIGhhdmUgdHdvIGZvcmNlIHZlY3RvcnMsIHNldCBjaGFuZ2VWMSB0byAxLgorICovCisKKy8qIHZlY3RfYml0cyBhcHBlYXJzIHRvIGJlIHVudXNlZCBhdCB0aGlzIHRpbWUgKi8KK2VudW0geworCWZ4ID0gMHgwMDAxLAorCWZ5ID0gMHgwMDAyLAorCWZ6ID0gMHgwMDA0LAorCW14ID0gMHgwMDA4LAorCW15ID0gMHgwMDEwLAorCW16ID0gMHgwMDIwLAorCWNoYW5nZVYyID0gMHgwMDQwLAorCWNoYW5nZVYxID0gMHgwMDgwCit9IHZlY3RfYml0c190OworCisvKiBXQVJOSU5HX0JJVFMgKi8KKy8qIFRoZSB3YXJuaW5nX2JpdHMgc3RydWN0dXJlIHNob3dzIHRoZSBiaXQgcGF0dGVybiBmb3IgdGhlIHdhcm5pbmcKKyAqIHdvcmQuIFRoZSBiaXQgZmllbGRzIGFyZSBzaG93biBmcm9tIGJpdCAwIChsc2IpIHRvIGJpdCAxNSAobXNiKS4KKyAqLworCisvKiAgWFhfTkVBUl9TRVQgKi8KKy8qIFRoZSB4eF9uZWFyX3NhdCBiaXRzIHNpZ25pZnkgdGhhdCB0aGUgaW5kaWNhdGVkIGF4aXMgaGFzIHJlYWNoZWQgb3IKKyAqIGV4Y2VlZGVkIHRoZSBuZWFyIHNhdHVyYXRpb24gdmFsdWUuCisgKi8KKworZW51bSB7CisJZnhfbmVhcl9zYXQgPSAweDAwMDEsCisJZnlfbmVhcl9zYXQgPSAweDAwMDIsCisJZnpfbmVhcl9zYXQgPSAweDAwMDQsCisJbXhfbmVhcl9zYXQgPSAweDAwMDgsCisJbXlfbmVhcl9zYXQgPSAweDAwMTAsCisJbXpfbmVhcl9zYXQgPSAweDAwMjAKK30gd2FybmluZ19iaXRzX3Q7CisKKy8qICBFUlJPUl9CSVRTICovCisvKiAgWFhfU0FUICovCisvKiAgTUVNT1JZX0VSUk9SICovCisvKiAgU0VOU09SX0NIQU5HRSAqLworCisvKiBUaGUgZXJyb3JfYml0cyBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGJpdCBwYXR0ZXJuIGZvciB0aGUgZXJyb3Igd29yZC4KKyAqIFRoZSBiaXQgZmllbGRzIGFyZSBzaG93biBmcm9tIGJpdCAwIChsc2IpIHRvIGJpdCAxNSAobXNiKS4gVGhlCisgKiB4eF9zYXQgYml0cyBzaWduaWZ5IHRoYXQgdGhlIGluZGljYXRlZCBheGlzIGhhcyByZWFjaGVkIG9yIGV4Y2VlZGVkCisgKiB0aGUgc2F0dXJhdGlvbiB2YWx1ZS4gVGhlIG1lbW9yeV9lcnJvciBiaXQgaW5kaWNhdGVzIHRoYXQgYSBwcm9ibGVtCisgKiB3YXMgZGV0ZWN0ZWQgaW4gdGhlIG9uLWJvYXJkIFJBTSBkdXJpbmcgdGhlIHBvd2VyLXVwCisgKiBpbml0aWFsaXphdGlvbi4gVGhlIHNlbnNvcl9jaGFuZ2UgYml0IGluZGljYXRlcyB0aGF0IGEgc2Vuc29yIG90aGVyCisgKiB0aGFuIHRoZSBvbmUgb3JpZ2luYWxseSBwbHVnZ2VkIGluIGhhcyBwYXNzZWQgaXRzIENSQyBjaGVjay4gVGhpcworICogYml0IGxhdGNoZXMsIGFuZCBtdXN0IGJlIHJlc2V0IGJ5IHRoZSB1c2VyLgorICoKKyAqLworCisvKiAgU1lTVEVNX0JVU1kgKi8KKworLyogVGhlIHN5c3RlbV9idXN5IGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgSlIzIERTUCBpcyBjdXJyZW50bHkgYnVzeQorICogYW5kIGlzIG5vdCBjYWxjdWxhdGluZyBmb3JjZSBkYXRhLiBUaGlzIG9jY3VycyB3aGVuIGEgbmV3CisgKiBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uLCBvciBuZXcgc2Vuc29yIGZ1bGwgc2NhbGUgaXMgc2V0IGJ5IHRoZQorICogdXNlci4gQSB2ZXJ5IGZhc3Qgc3lzdGVtIHVzaW5nIHRoZSBmb3JjZSBkYXRhIGZvciBmZWVkYmFjayBtaWdodAorICogYmVjb21lIHVuc3RhYmxlIGR1cmluZyB0aGUgYXBwcm94aW1hdGVseSA0IG1zIG5lZWRlZCB0byBhY2NvbXBsaXNoCisgKiB0aGVzZSBjYWxjdWxhdGlvbnMuIFRoaXMgYml0IHdpbGwgYWxzbyBiZWNvbWUgYWN0aXZlIHdoZW4gYSBuZXcKKyAqIHNlbnNvciBpcyBwbHVnZ2VkIGluIGFuZCB0aGUgc3lzdGVtIG5lZWRzIHRvIHJlY2FsY3VsYXRlIHRoZQorICogY2FsaWJyYXRpb24gQ1JDLgorICovCisKKy8qICBDQUxfQ1JDX0JBRCAqLworCisvKiBUaGUgY2FsX2NyY19iYWQgYml0IGluZGljYXRlcyB0aGF0IHRoZSBjYWxpYnJhdGlvbiBDUkMgaGFzIG5vdAorICogY2FsY3VsYXRlZCB0byB6ZXJvLiBDUkMgaXMgc2hvcnQgZm9yIGN5Y2xpYyByZWR1bmRhbmN5IGNvZGUuIEl0IGlzCisgKiBhIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGludGVncml0eSBvZiBtZXNzYWdlcyBpbiBkYXRhCisgKiBjb21tdW5pY2F0aW9uLiBUaGUgY2FsaWJyYXRpb24gZGF0YSBzdG9yZWQgaW5zaWRlIHRoZSBzZW5zb3IgaXMKKyAqIHRyYW5zbWl0dGVkIHRvIHRoZSBKUjMgRFNQIGFsb25nIHdpdGggdGhlIHNlbnNvciBkYXRhLiBUaGUKKyAqIGNhbGlicmF0aW9uIGRhdGEgaGFzIGEgQ1JDIGF0dGFjaGVkIHRvIHRoZSBlbmQgb2YgaXQsIHRvIGFzc2lzdCBpbgorICogZGV0ZXJtaW5pbmcgdGhlIGNvbXBsZXRlbmVzcyBhbmQgaW50ZWdyaXR5IG9mIHRoZSBjYWxpYnJhdGlvbiBkYXRhCisgKiByZWNlaXZlZCBmcm9tIHRoZSBzZW5zb3IuIFRoZXJlIGFyZSB0d28gcmVhc29ucyB0aGUgQ1JDIG1heSBub3QKKyAqIGhhdmUgY2FsY3VsYXRlZCB0byB6ZXJvLiBUaGUgZmlyc3QgaXMgdGhhdCBhbGwgdGhlIGNhbGlicmF0aW9uIGRhdGEKKyAqIGhhcyBub3QgeWV0IGJlZW4gcmVjZWl2ZWQsIHRoZSBzZWNvbmQgaXMgdGhhdCB0aGUgY2FsaWJyYXRpb24gZGF0YQorICogaGFzIGJlZW4gY29ycnVwdGVkLiBBIHR5cGljYWwgc2Vuc29yIHRyYW5zbWl0cyB0aGUgZW50aXJlIGNvbnRlbnRzCisgKiBvZiBpdHMgY2FsaWJyYXRpb24gbWF0cml4IG92ZXIgMzAgdGltZXMgYSBzZWNvbmQuIFRoZXJlZm9yZSwgaWYKKyAqIHRoaXMgYml0IGlzIG5vdCB6ZXJvIHdpdGhpbiBhIGNvdXBsZSBvZiBzZWNvbmRzIGFmdGVyIHRoZSBzZW5zb3IKKyAqIGhhcyBiZWVuIHBsdWdnZWQgaW4sIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBzZW5zb3IncworICogY2FsaWJyYXRpb24gZGF0YS4KKyAqLworCisvKiBXQVRDSF9ET0cgKi8KKy8qIFdBVENIX0RPRzIgKi8KKworLyogVGhlIHdhdGNoX2RvZyBhbmQgd2F0Y2hfZG9nMiBiaXRzIGFyZSBzZW5zb3IsIG5vdCBwcm9jZXNzb3IsIHdhdGNoCisgKiBkb2cgYml0cy4gV2F0Y2hfZG9nIGluZGljYXRlcyB0aGF0IHRoZSBzZW5zb3IgZGF0YSBsaW5lIHNlZW1zIHRvIGJlCisgKiBhY3RpbmcgY29ycmVjdGx5LCB3aGlsZSB3YXRjaF9kb2cyIGluZGljYXRlcyB0aGF0IHNlbnNvciBkYXRhIGFuZAorICogY2xvY2sgYXJlIGJlaW5nIHJlY2VpdmVkLiBJdCBpcyBwb3NzaWJsZSBmb3Igd2F0Y2hfZG9nMiB0byBnbyBvZmYKKyAqIHdoaWxlIHdhdGNoX2RvZyBkb2VzIG5vdC4gVGhpcyB3b3VsZCBpbmRpY2F0ZSBhbiBpbXByb3BlciBjbG9jaworICogc2lnbmFsLCB3aGlsZSBkYXRhIGlzIGFjdGluZyBjb3JyZWN0bHkuIElmIGVpdGhlciB3YXRjaCBkb2cgYmFya3MsCisgKiB0aGUgc2Vuc29yIGRhdGEgaXMgbm90IGJlaW5nIHJlY2VpdmVkIGNvcnJlY3RseS4KKyAqLworCitlbnVtIGVycm9yX2JpdHNfdCB7CisJZnhfc2F0ID0gMHgwMDAxLAorCWZ5X3NhdCA9IDB4MDAwMiwKKwlmel9zYXQgPSAweDAwMDQsCisJbXhfc2F0ID0gMHgwMDA4LAorCW15X3NhdCA9IDB4MDAxMCwKKwltel9zYXQgPSAweDAwMjAsCisJbWVtb3J5X2Vycm9yID0gMHgwNDAwLAorCXNlbnNvcl9jaGFuZ2UgPSAweDA4MDAsCisJc3lzdGVtX2J1c3kgPSAweDEwMDAsCisJY2FsX2NyY19iYWQgPSAweDIwMDAsCisJd2F0Y2hfZG9nMiA9IDB4NDAwMCwKKwl3YXRjaF9kb2cgPSAweDgwMDAKK307CisKKy8qICBUSFJFU0hfU1RSVUNUICovCisKKy8qIFRoaXMgc3RydWN0dXJlIHNob3dzIHRoZSBsYXlvdXQgZm9yIGEgc2luZ2xlIHRocmVzaG9sZCBwYWNrZXQgaW5zaWRlIG9mIGEKKyAqIGxvYWQgZW52ZWxvcGUuIEVhY2ggbG9hZCBlbnZlbG9wZSBjYW4gY29udGFpbiBzZXZlcmFsIHRocmVzaG9sZCBzdHJ1Y3R1cmVzLgorICogMS4gZGF0YV9hZGRyZXNzIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBkYXRhIGZvciB0aGF0IHRocmVzaG9sZC4gVGhpcworICogICAgaW5jbHVkZXMgZmlsdGVyZWQsIHVuZmlsdGVyZWQsIHJhdywgcmF0ZSwgY291bnRlcnMsIGVycm9yIGFuZCB3YXJuaW5nIGRhdGEKKyAqIDIuIHRocmVzaG9sZCBpcyB0aGUgaXMgdGhlIHZhbHVlIGF0IHdoaWNoLCBpZiBkYXRhIGlzIGFib3ZlIG9yIGJlbG93LCB0aGUKKyAqICAgIGJpdHMgd2lsbCBiZSBzZXQgLi4uIChwYWcuMjQpLgorICogMy4gYml0X3BhdHRlcm4gY29udGFpbnMgdGhlIGJpdHMgdGhhdCB3aWxsIGJlIHNldCBpZiB0aGUgdGhyZXNob2xkIHZhbHVlIGlzCisgKiAgICBtZXQgb3IgZXhjZWVkZWQuCisgKi8KKworc3RydWN0IHRocmVzaF9zdHJ1Y3QgeworCXMzMiBkYXRhX2FkZHJlc3M7CisJczMyIHRocmVzaG9sZDsKKwlzMzIgYml0X3BhdHRlcm47Cit9OworCisvKiAgTEVfU1RSVUNUICovCisKKy8qIExheW91dCBvZiBhIGxvYWQgZW52ZWxvcGVkIHBhY2tldC4gRm91ciB0aHJlc2hvbGRzIGFyZSBzaG93ZWQgLi4uIGZvciBtb3JlCisgKiBzZWUgbWFudWFsIChwYWcuMjUpCisgKiAxLiBsYXRjaF9iaXRzIGlzIGEgYml0IHBhdHRlcm4gdGhhdCBzaG93IHdoaWNoIGJpdHMgdGhlIHVzZXIgd2FudHMgdG8gbGF0Y2guCisgKiAgICBUaGUgbGF0Y2hlZCBiaXRzIHdpbGwgbm90IGJlIHJlc2V0IG9uY2UgdGhlIHRocmVzaG9sZCB3aGljaCBzZXQgdGhlbSBpcworICogICAgbm8gbG9uZ2VyIHRydWUuIEluIHRoYXQgY2FzZSB0aGUgdXNlciBtdXN0IHJlc2V0IHRoZW0gdXNpbmcgdGhlIHJlc2V0X2JpdAorICogICAgY29tbWFuZC4KKyAqIDIuIG51bWJlcl9vZl94eF90aHJlc2hvbGRzIHNwZWNpZnkgaG93IG1hbnkgR0UvTEUgdGhyZXNob2xkIHRoZXJlIGFyZS4KKyAqLworc3RydWN0IGxlX3N0cnVjdCB7CisJczMyIGxhdGNoX2JpdHM7CisJczMyIG51bWJlcl9vZl9nZV90aHJlc2hvbGRzOworCXMzMiBudW1iZXJfb2ZfbGVfdGhyZXNob2xkczsKKwlzdHJ1Y3QgdGhyZXNoX3N0cnVjdCB0aHJlc2hvbGRzWzRdOworCXMzMiByZXNlcnZlZDsKK307CisKKy8qICBMSU5LX1RZUEVTICovCisvKiBMaW5rIHR5cGVzIGlzIGFuIGVudW1lcmF0ZWQgdmFsdWUgc2hvd2luZyB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIHRyYW5zZm9ybQorICogbGluayB0eXBlcy4KKyAqIDAgLSBlbmQgdHJhbnNmb3JtIHBhY2tldAorICogMSAtIHRyYW5zbGF0ZSBhbG9uZyBYIGF4aXMgKFRYKQorICogMiAtIHRyYW5zbGF0ZSBhbG9uZyBZIGF4aXMgKFRZKQorICogMyAtIHRyYW5zbGF0ZSBhbG9uZyBaIGF4aXMgKFRaKQorICogNCAtIHJvdGF0ZSBhYm91dCBYIGF4aXMgKFJYKQorICogNSAtIHJvdGF0ZSBhYm91dCBZIGF4aXMgKFJZKQorICogNiAtIHJvdGF0ZSBhYm91dCBaIGF4aXMgKFJaKQorICogNyAtIG5lZ2F0ZSBhbGwgYXhlcyAoTkVHKQorICovCisKK2VudW0gbGlua190eXBlcyB7CisJZW5kX3hfZm9ybSwKKwl0eCwKKwl0eSwKKwl0eiwKKwlyeCwKKwlyeSwKKwlyeiwKKwluZWcKK307CisKKy8qICBUUkFOU0ZPUk0gKi8KKy8qICBTdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSBhIHRyYW5zZm9ybS4gKi8KK3N0cnVjdCBpbnRlcm5fdHJhbnNmb3JtIHsKKwlzdHJ1Y3QgeworCQl1MzIgbGlua190eXBlOworCQlzMzIgbGlua19hbW91bnQ7CisJfSBsaW5rWzhdOworfTsKKworLyogIEpSMyBmb3JjZS90b3JxdWUgc2Vuc29yIGRhdGEgZGVmaW5pdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHNlbnNvciBhbmQgKi8KKy8qICBoYXJkd2FyZSBtYW51YWxzLiAqLworCitzdHJ1Y3QganIzX2NoYW5uZWwgeworCS8qICBSYXdfY2hhbm5lbHMgaXMgdGhlIGFyZWEgdXNlZCB0byBzdG9yZSB0aGUgcmF3IGRhdGEgY29taW5nIGZyb20gKi8KKwkvKiAgdGhlIHNlbnNvci4gKi8KKworCXN0cnVjdCByYXdfY2hhbm5lbCByYXdfY2hhbm5lbHNbMTZdOwkvKiBvZmZzZXQgMHgwMDAwICovCisKKwkvKiAgQ29weXJpZ2h0IGlzIGEgbnVsbCB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyBjb250YWluaW5nIHRoZSBKUjMgKi8KKwkvKiAgY29weXJpZ2h0IG5vdGljZS4gKi8KKworCXUzMiBjb3B5cmlnaHRbMHgwMDE4XTsJLyogb2Zmc2V0IDB4MDA0MCAqLworCXMzMiByZXNlcnZlZDFbMHgwMDA4XTsJLyogb2Zmc2V0IDB4MDA1OCAqLworCisJLyogU2h1bnRzIGNvbnRhaW5zIHRoZSBzZW5zb3Igc2h1bnQgcmVhZGluZ3MuIFNvbWUgSlIzIHNlbnNvcnMgaGF2ZQorCSAqIHRoZSBhYmlsaXR5IHRvIGhhdmUgdGhlaXIgZ2FpbnMgYWRqdXN0ZWQuIFRoaXMgYWxsb3dzIHRoZQorCSAqIGhhcmR3YXJlIGZ1bGwgc2NhbGVzIHRvIGJlIGFkanVzdGVkIHRvIHBvdGVudGlhbGx5IGFsbG93CisJICogYmV0dGVyIHJlc29sdXRpb24gb3IgZHluYW1pYyByYW5nZS4gRm9yIHNlbnNvcnMgdGhhdCBoYXZlCisJICogdGhpcyBhYmlsaXR5LCB0aGUgZ2FpbiBvZiBlYWNoIHNlbnNvciBjaGFubmVsIGlzIG1lYXN1cmVkIGF0CisJICogdGhlIHRpbWUgb2YgY2FsaWJyYXRpb24gdXNpbmcgYSBzaHVudCByZXNpc3Rvci4gVGhlIHNodW50CisJICogcmVzaXN0b3IgaXMgcGxhY2VkIGFjcm9zcyBvbmUgYXJtIG9mIHRoZSByZXNpc3RvciBicmlkZ2UsIGFuZAorCSAqIHRoZSByZXN1bHRpbmcgY2hhbmdlIGluIHRoZSBvdXRwdXQgb2YgdGhhdCBjaGFubmVsIGlzCisJICogbWVhc3VyZWQuIFRoaXMgbWVhc3VyZW1lbnQgaXMgY2FsbGVkIHRoZSBzaHVudCByZWFkaW5nLCBhbmQKKwkgKiBpcyByZWNvcmRlZCBoZXJlLiBJZiB0aGUgdXNlciBoYXMgY2hhbmdlZCB0aGUgZ2FpbiBvZiB0aGUgLy8KKwkgKiBzZW5zb3IsIGFuZCBtYWRlIG5ldyBzaHVudCBtZWFzdXJlbWVudHMsIHRob3NlIHNodW50CisJICogbWVhc3VyZW1lbnRzIGNhbiBiZSBwbGFjZWQgaGVyZS4gVGhlIEpSMyBEU1Agd2lsbCB0aGVuIHNjYWxlCisJICogdGhlIGNhbGlicmF0aW9uIG1hdHJpeCBzdWNoIHNvIHRoYXQgdGhlIGdhaW5zIGFyZSBhZ2FpbgorCSAqIHByb3BlciBmb3IgdGhlIGluZGljYXRlZCBzaHVudCByZWFkaW5ncy4gSWYgc2h1bnRzIGlzIDAsIHRoZW4KKwkgKiB0aGUgc2Vuc29yIGNhbm5vdCBoYXZlIGl0cyBnYWluIGNoYW5nZWQuIEZvciBkZXRhaWxzIG9uCisJICogY2hhbmdpbmcgdGhlIHNlbnNvciBnYWluLCBhbmQgbWFraW5nIHNodW50cyByZWFkaW5ncywgcGxlYXNlCisJICogc2VlIHRoZSBzZW5zb3IgbWFudWFsLiBUbyBtYWtlIHRoZXNlIHZhbHVlcyB0YWtlIGVmZmVjdCB0aGUKKwkgKiB1c2VyIG11c3QgY2FsbCBlaXRoZXIgY29tbWFuZCAoNSkgdXNlIHRyYW5zZm9ybSAjIChwZy4gMzMpIG9yCisJICogY29tbWFuZCAoMTApIHNldCBuZXcgZnVsbCBzY2FsZXMgKHBnLiAzOCkuCisJICovCisKKwlzdHJ1Y3Qgc2l4X2F4aXNfYXJyYXkgc2h1bnRzOwkvKiBvZmZzZXQgMHgwMDYwICovCisJczMyIHJlc2VydmVkMlsyXTsJLyogb2Zmc2V0IDB4MDA2NiAqLworCisJLyogRGVmYXVsdF9GUyBjb250YWlucyB0aGUgZnVsbCBzY2FsZSB0aGF0IGlzIHVzZWQgaWYgdGhlIHVzZXIgZG9lcyAqLworCS8qIG5vdCBzZXQgYSBmdWxsIHNjYWxlLiAqLworCisJc3RydWN0IHNpeF9heGlzX2FycmF5IGRlZmF1bHRfRlM7CS8qIG9mZnNldCAweDAwNjggKi8KKwlzMzIgcmVzZXJ2ZWQzOwkvKiBvZmZzZXQgMHgwMDZlICovCisKKwkvKiBMb2FkX2VudmVsb3BlX251bSBpcyB0aGUgbG9hZCBlbnZlbG9wZSBudW1iZXIgdGhhdCBpcyBjdXJyZW50bHkKKwkgKiBpbiB1c2UuIFRoaXMgdmFsdWUgaXMgc2V0IGJ5IHRoZSB1c2VyIGFmdGVyIG9uZSBvZiB0aGUgbG9hZAorCSAqIGVudmVsb3BlcyBoYXMgYmVlbiBpbml0aWFsaXplZC4KKwkgKi8KKworCXMzMiBsb2FkX2VudmVsb3BlX251bTsJLyogb2Zmc2V0IDB4MDA2ZiAqLworCisJLyogTWluX2Z1bGxfc2NhbGUgaXMgdGhlIHJlY29tbWVuZCBtaW5pbXVtIGZ1bGwgc2NhbGUuICovCisKKwkvKiBUaGVzZSB2YWx1ZXMgaW4gY29uanVuY3Rpb24gd2l0aCBtYXhfZnVsbF9zY2FsZSAocGcuIDkpIGhlbHBzCisJICogZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSBmb3Igc2V0dGluZyB0aGUgZnVsbCBzY2FsZXMuIFRoZQorCSAqIHNvZnR3YXJlIGFsbG93cyB0aGUgdXNlciB0byBzZXQgdGhlIHNlbnNvciBmdWxsIHNjYWxlIHRvIGFuCisJICogYXJiaXRyYXJ5IHZhbHVlLiBCdXQgc2V0dGluZyB0aGUgZnVsbCBzY2FsZXMgaGFzIHNvbWUgaGF6YXJkcy4gSWYKKwkgKiB0aGUgZnVsbCBzY2FsZSBpcyBzZXQgdG9vIGxvdywgdGhlIGRhdGEgd2lsbCBzYXR1cmF0ZQorCSAqIHByZW1hdHVyZWx5LCBhbmQgZHluYW1pYyByYW5nZSB3aWxsIGJlIGxvc3QuIElmIHRoZSBmdWxsIHNjYWxlIGlzCisJICogc2V0IHRvbyBoaWdoLCB0aGVuIHJlc29sdXRpb24gaXMgbG9zdCBhcyB0aGUgZGF0YSBpcyBzaGlmdGVkIHRvCisJICogdGhlIHJpZ2h0IGFuZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUgbG9zdC4gVGhlcmVmb3JlIHRoZQorCSAqIG1heGltdW0gZnVsbCBzY2FsZSBpcyB0aGUgbWF4aW11bSB2YWx1ZSBhdCB3aGljaCBubyByZXNvbHV0aW9uIGlzCisJICogbG9zdCwgYW5kIHRoZSBtaW5pbXVtIGZ1bGwgc2NhbGUgaXMgdGhlIHZhbHVlIGF0IHdoaWNoIHRoZSBkYXRhCisJICogd2lsbCBub3Qgc2F0dXJhdGUgcHJlbWF0dXJlbHkuIFRoZXNlIHZhbHVlcyBhcmUgY2FsY3VsYXRlZAorCSAqIHdoZW5ldmVyIGEgbmV3IGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gaXMgY2FsY3VsYXRlZC4gSXQgaXMKKwkgKiBwb3NzaWJsZSBmb3IgdGhlIHJlY29tbWVuZGVkIG1heGltdW0gdG8gYmUgbGVzcyB0aGFuIHRoZQorCSAqIHJlY29tbWVuZGVkIG1pbmltdW0uIFRoaXMgY29tZXMgYWJvdXQgcHJpbWFyaWx5IHdoZW4gdXNpbmcKKwkgKiBjb29yZGluYXRlIHRyYW5zbGF0aW9ucy4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgaXQgbWVhbnMgdGhhdCBhbnkKKwkgKiBmdWxsIHNjYWxlIHNlbGVjdGlvbiB3aWxsIGJlIGEgY29tcHJvbWlzZSBiZXR3ZWVuIGR5bmFtaWMgcmFuZ2UKKwkgKiBhbmQgcmVzb2x1dGlvbi4gSXQgaXMgdXN1YWxseSByZWNvbW1lbmRlZCB0byBjb21wcm9taXNlIGluIGZhdm9yCisJICogb2YgcmVzb2x1dGlvbiB3aGljaCBtZWFucyB0aGF0IHRoZSByZWNvbW1lbmQgbWF4aW11bSBmdWxsIHNjYWxlCisJICogc2hvdWxkIGJlIGNob3Nlbi4KKwkgKgorCSAqIFdBUk5JTkc6IEJlIHN1cmUgdGhhdCB0aGUgZnVsbCBzY2FsZSBpcyBubyBsZXNzIHRoYW4gMC40JSBvZiB0aGUKKwkgKiByZWNvbW1lbmRlZCBtaW5pbXVtIGZ1bGwgc2NhbGUuIEZ1bGwgc2NhbGVzIGJlbG93IHRoaXMgdmFsdWUgd2lsbAorCSAqIGNhdXNlIGVycm9uZW91cyByZXN1bHRzLgorCSAqLworCisJc3RydWN0IHNpeF9heGlzX2FycmF5IG1pbl9mdWxsX3NjYWxlOwkvKiBvZmZzZXQgMHgwMDcwICovCisJczMyIHJlc2VydmVkNDsJLyogb2Zmc2V0IDB4MDA3NiAqLworCisJLyogVHJhbnNmb3JtX251bSBpcyB0aGUgdHJhbnNmb3JtIG51bWJlciB0aGF0IGlzIGN1cnJlbnRseSBpbiB1c2UuCisJICogVGhpcyB2YWx1ZSBpcyBzZXQgYnkgdGhlIEpSMyBEU1AgYWZ0ZXIgdGhlIHVzZXIgaGFzIHVzZWQgY29tbWFuZAorCSAqICg1KSB1c2UgdHJhbnNmb3JtICMgKHBnLiAzMykuCisJICovCisKKwlzMzIgdHJhbnNmb3JtX251bTsJLyogb2Zmc2V0IDB4MDA3NyAqLworCisJLyogIE1heF9mdWxsX3NjYWxlIGlzIHRoZSByZWNvbW1lbmRlZCBtYXhpbXVtIGZ1bGwgc2NhbGUuIFNlZSAqLworCS8qICBtaW5fZnVsbF9zY2FsZSAocGcuIDkpIGZvciBtb3JlIGRldGFpbHMuICovCisKKwlzdHJ1Y3Qgc2l4X2F4aXNfYXJyYXkgbWF4X2Z1bGxfc2NhbGU7CS8qIG9mZnNldCAweDAwNzggKi8KKwlzMzIgcmVzZXJ2ZWQ1OwkvKiBvZmZzZXQgMHgwMDdlICovCisKKwkvKiBQZWFrX2FkZHJlc3MgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgd2hpY2ggd2lsbCBiZSBtb25pdG9yZWQKKwkgKiBieSB0aGUgcGVhayByb3V0aW5lLiBUaGlzIHZhbHVlIGlzIHNldCBieSB0aGUgdXNlci4gVGhlIHBlYWsKKwkgKiByb3V0aW5lIHdpbGwgbW9uaXRvciBhbnkgOCBjb250aWd1b3VzIGFkZHJlc3NlcyBmb3IgcGVhayB2YWx1ZXMuCisJICogKGV4LiB0byB3YXRjaCBmaWx0ZXIzIGRhdGEgZm9yIHBlYWtzLCBzZXQgdGhpcyB2YWx1ZSB0byAweDAwYTgpLgorCSAqLworCisJczMyIHBlYWtfYWRkcmVzczsJLyogb2Zmc2V0IDB4MDA3ZiAqLworCisJLyogRnVsbF9zY2FsZSBpcyB0aGUgc2Vuc29yIGZ1bGwgc2NhbGVzIHdoaWNoIGFyZSBjdXJyZW50bHkgaW4gdXNlLgorCSAqIERlY291cGxlZCBhbmQgZmlsdGVyZWQgZGF0YSBpcyBzY2FsZWQgc28gdGhhdCArLy0gMTYzODQgaXMgZXF1YWwKKwkgKiB0byB0aGUgZnVsbCBzY2FsZXMuIFRoZSBlbmdpbmVlcmluZyB1bml0cyB1c2VkIGFyZSBpbmRpY2F0ZWQgYnkKKwkgKiB0aGUgdW5pdHMgdmFsdWUgZGlzY3Vzc2VkIG9uIHBhZ2UgMTYuIFRoZSBmdWxsIHNjYWxlcyBmb3IgRngsIEZ5LAorCSAqIEZ6LCBNeCwgTXkgYW5kIE16IGNhbiBiZSB3cml0dGVuIGJ5IHRoZSB1c2VyIHByaW9yIHRvIGNhbGxpbmcKKwkgKiBjb21tYW5kICgxMCkgc2V0IG5ldyBmdWxsIHNjYWxlcyAocGcuIDM4KS4gVGhlIGZ1bGwgc2NhbGVzIGZvciBWMQorCSAqIGFuZCBWMiBhcmUgc2V0IHdoZW5ldmVyIHRoZSBmdWxsIHNjYWxlcyBhcmUgY2hhbmdlZCBvciB3aGVuIHRoZQorCSAqIGF4ZXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHZlY3RvcnMgYXJlIGNoYW5nZWQuIFRoZSBmdWxsIHNjYWxlIG9mCisJICogVjEgYW5kIFYyIHdpbGwgYWx3YXlzIGJlIGVxdWFsIHRvIHRoZSBsYXJnZXN0IGZ1bGwgc2NhbGUgb2YgdGhlCisJICogYXhlcyB1c2VkIGZvciBlYWNoIHZlY3RvciByZXNwZWN0aXZlbHkuCisJICovCisKKwlzdHJ1Y3QgZm9yY2VfYXJyYXkgZnVsbF9zY2FsZTsJLyogb2Zmc2V0IDB4MDA4MCAqLworCisJLyogT2Zmc2V0cyBjb250YWlucyB0aGUgc2Vuc29yIG9mZnNldHMuIFRoZXNlIHZhbHVlcyBhcmUgc3VidHJhY3RlZCBmcm9tCisJICogdGhlIHNlbnNvciBkYXRhIHRvIG9idGFpbiB0aGUgZGVjb3VwbGVkIGRhdGEuIFRoZSBvZmZzZXRzIGFyZSBzZXQgYQorCSAqIGZldyBzZWNvbmRzICg8IDEwKSBhZnRlciB0aGUgY2FsaWJyYXRpb24gZGF0YSBoYXMgYmVlbiByZWNlaXZlZC4KKwkgKiBUaGV5IGFyZSBzZXQgc28gdGhhdCB0aGUgb3V0cHV0IGRhdGEgd2lsbCBiZSB6ZXJvLiBUaGVzZSB2YWx1ZXMKKwkgKiBjYW4gYmUgd3JpdHRlbiBhcyB3ZWxsIGFzIHJlYWQuIFRoZSBKUjMgRFNQIHdpbGwgdXNlIHRoZSB2YWx1ZXMKKwkgKiB3cml0dGVuIGhlcmUgd2l0aGluIDIgbXMgb2YgYmVpbmcgd3JpdHRlbi4gVG8gc2V0IGZ1dHVyZQorCSAqIGRlY291cGxlZCBkYXRhIHRvIHplcm8sIGFkZCB0aGVzZSB2YWx1ZXMgdG8gdGhlIGN1cnJlbnQgZGVjb3VwbGVkCisJICogZGF0YSB2YWx1ZXMgYW5kIHBsYWNlIHRoZSBzdW0gaGVyZS4gVGhlIEpSMyBEU1Agd2lsbCBjaGFuZ2UgdGhlc2UKKwkgKiB2YWx1ZXMgd2hlbiBhIG5ldyB0cmFuc2Zvcm0gaXMgYXBwbGllZC4gU28gaWYgdGhlIG9mZnNldHMgYXJlCisJICogc3VjaCB0aGF0IEZYIGlzIDUgYW5kIGFsbCBvdGhlciB2YWx1ZXMgYXJlIHplcm8sIGFmdGVyIHJvdGF0aW5nCisJICogYWJvdXQgWiBieSA5MCBkZWdyZWVzLCBGWSB3b3VsZCBiZSA1IGFuZCBhbGwgb3RoZXJzIHdvdWxkIGJlIHplcm8uCisJICovCisKKwlzdHJ1Y3Qgc2l4X2F4aXNfYXJyYXkgb2Zmc2V0czsJLyogb2Zmc2V0IDB4MDA4OCAqLworCisJLyogT2Zmc2V0X251bSBpcyB0aGUgbnVtYmVyIG9mIHRoZSBvZmZzZXQgY3VycmVudGx5IGluIHVzZS4gVGhpcworCSAqIHZhbHVlIGlzIHNldCBieSB0aGUgSlIzIERTUCBhZnRlciB0aGUgdXNlciBoYXMgZXhlY3V0ZWQgdGhlIHVzZQorCSAqIG9mZnNldCAjIGNvbW1hbmQgKHBnLiAzNCkuIEl0IGNhbiB2YXJ5IGJldHdlZW4gMCBhbmQgMTUuCisJICovCisKKwlzMzIgb2Zmc2V0X251bTsJLyogb2Zmc2V0IDB4MDA4ZSAqLworCisJLyogVmVjdF9heGVzIGlzIGEgYml0IG1hcCBzaG93aW5nIHdoaWNoIG9mIHRoZSBheGVzIGFyZSBiZWluZyB1c2VkCisJICogaW4gdGhlIHZlY3RvciBjYWxjdWxhdGlvbnMuIFRoaXMgdmFsdWUgaXMgc2V0IGJ5IHRoZSBKUjMgRFNQCisJICogYWZ0ZXIgdGhlIHVzZXIgaGFzIGV4ZWN1dGVkIHRoZSBzZXQgdmVjdG9yIGF4ZXMgY29tbWFuZCAocGcuIDM3KS4KKwkgKi8KKworCXUzMiB2ZWN0X2F4ZXM7CS8qIG9mZnNldCAweDAwOGYgKi8KKworCS8qIEZpbHRlcjAgaXMgdGhlIGRlY291cGxlZCwgdW5maWx0ZXJlZCBkYXRhIGZyb20gdGhlIEpSMyBzZW5zb3IuCisJICogVGhpcyBkYXRhIGhhcyBoYWQgdGhlIG9mZnNldHMgcmVtb3ZlZC4KKwkgKgorCSAqIFRoZXNlIGZvcmNlX2FycmF5cyBob2xkIHRoZSBmaWx0ZXJlZCBkYXRhLiBUaGUgZGVjb3VwbGVkIGRhdGEgaXMKKwkgKiBwYXNzZWQgdGhyb3VnaCBjYXNjYWRlZCBsb3cgcGFzcyBmaWx0ZXJzLiBFYWNoIHN1Y2NlZWRpbmcgZmlsdGVyCisJICogaGFzIGEgY3V0b2ZmIGZyZXF1ZW5jeSBvZiAxLzQgb2YgdGhlIHByZWNlZGluZyBmaWx0ZXIuIFRoZSBjdXRvZmYKKwkgKiBmcmVxdWVuY3kgb2YgZmlsdGVyMSBpcyAxLzE2IG9mIHRoZSBzYW1wbGUgcmF0ZSBmcm9tIHRoZSBzZW5zb3IuCisJICogRm9yIGEgdHlwaWNhbCBzZW5zb3Igd2l0aCBhIHNhbXBsZSByYXRlIG9mIDgga0h6LCB0aGUgY3V0b2ZmCisJICogZnJlcXVlbmN5IG9mIGZpbHRlcjEgd291bGQgYmUgNTAwIEh6LiBUaGUgZm9sbG93aW5nIGZpbHRlcnMgd291bGQKKwkgKiBjdXRvZmYgYXQgMTI1IEh6LCAzMS4yNSBIeiwgNy44MTMgSHosIDEuOTUzIEh6IGFuZCAwLjQ4ODMgSHouCisJICovCisKKwlzdHJ1Y3QgZm9yY2VfYXJyYXkgZmlsdGVyWzddOwkvKiBvZmZzZXQgMHgwMDkwLAorCQkJCQkgICBvZmZzZXQgMHgwMDk4LAorCQkJCQkgICBvZmZzZXQgMHgwMGEwLAorCQkJCQkgICBvZmZzZXQgMHgwMGE4LAorCQkJCQkgICBvZmZzZXQgMHgwMGIwLAorCQkJCQkgICBvZmZzZXQgMHgwMGI4ICwKKwkJCQkJICAgb2Zmc2V0IDB4MDBjMCAqLworCisJLyogUmF0ZV9kYXRhIGlzIHRoZSBjYWxjdWxhdGVkIHJhdGUgZGF0YS4gSXQgaXMgYSBmaXJzdCBkZXJpdmF0aXZlCisJICogY2FsY3VsYXRpb24uIEl0IGlzIGNhbGN1bGF0ZWQgYXQgYSBmcmVxdWVuY3kgc3BlY2lmaWVkIGJ5IHRoZQorCSAqIHZhcmlhYmxlIHJhdGVfZGl2aXNvciAocGcuIDEyKS4gVGhlIGRhdGEgb24gd2hpY2ggdGhlIHJhdGUgaXMKKwkgKiBjYWxjdWxhdGVkIGlzIHNwZWNpZmllZCBieSB0aGUgdmFyaWFibGUgcmF0ZV9hZGRyZXNzIChwZy4gMTIpLgorCSAqLworCisJc3RydWN0IGZvcmNlX2FycmF5IHJhdGVfZGF0YTsJLyogb2Zmc2V0IDB4MDBjOCAqLworCisJLyogTWluaW11bV9kYXRhICYgbWF4aW11bV9kYXRhIGFyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSAocGVhaykKKwkgKiBkYXRhIHZhbHVlcy4gVGhlIEpSMyBEU1AgY2FuIG1vbml0b3IgYW55IDggY29udGlndW91cyBkYXRhIGl0ZW1zCisJICogZm9yIG1pbmltdW1zIGFuZCBtYXhpbXVtcyBhdCBmdWxsIHNlbnNvciBiYW5kd2lkdGguIFRoaXMgYXJlYSBpcworCSAqIG9ubHkgdXBkYXRlZCBhdCB1c2VyIHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBzbyB0aGF0IHRoZSB1c2VyIGRvZXMKKwkgKiBub3QgbWlzcyBhbnkgcGVha3MuIFRvIHJlYWQgdGhlIGRhdGEsIHVzZSBlaXRoZXIgdGhlIHJlYWQgcGVha3MKKwkgKiBjb21tYW5kIChwZy4gNDApLCBvciB0aGUgcmVhZCBhbmQgcmVzZXQgcGVha3MgY29tbWFuZCAocGcuIDM5KS4KKwkgKiBUaGUgYWRkcmVzcyBvZiB0aGUgZGF0YSB0byB3YXRjaCBmb3IgcGVha3MgaXMgc3RvcmVkIGluIHRoZQorCSAqIHZhcmlhYmxlIHBlYWtfYWRkcmVzcyAocGcuIDEwKS4gUGVhayBkYXRhIGlzIGxvc3Qgd2hlbiBleGVjdXRpbmcKKwkgKiBhIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gb3IgYSBmdWxsIHNjYWxlIGNoYW5nZS4gUGVhayBkYXRhIGlzCisJICogYWxzbyBsb3N0IHdoZW4gcGx1Z2dpbmcgaW4gYSBuZXcgc2Vuc29yLgorCSAqLworCisJc3RydWN0IGZvcmNlX2FycmF5IG1pbmltdW1fZGF0YTsJLyogb2Zmc2V0IDB4MDBkMCAqLworCXN0cnVjdCBmb3JjZV9hcnJheSBtYXhpbXVtX2RhdGE7CS8qIG9mZnNldCAweDAwZDggKi8KKworCS8qIE5lYXJfc2F0X3ZhbHVlICYgc2F0X3ZhbHVlIGNvbnRhaW4gdGhlIHZhbHVlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmCisJICogdGhlIHJhdyBzZW5zb3IgaXMgc2F0dXJhdGVkLiBCZWNhdXNlIG9mIGRlY291cGxpbmcgYW5kIG9mZnNldAorCSAqIHJlbW92YWwsIGl0IGlzIGRpZmZpY3VsdCB0byB0ZWxsIGZyb20gdGhlIHByb2Nlc3NlZCBkYXRhIGlmIHRoZQorCSAqIHNlbnNvciBpcyBzYXR1cmF0ZWQuIFRoZXNlIHZhbHVlcywgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZXJyb3IKKwkgKiBhbmQgd2FybmluZyB3b3JkcyAocGcuIDE0KSwgcHJvdmlkZSB0aGlzIGNyaXRpY2FsIGluZm9ybWF0aW9uLgorCSAqIFRoZXNlIHR3byB2YWx1ZXMgbWF5IGJlIHNldCBieSB0aGUgaG9zdCBwcm9jZXNzb3IuIFRoZXNlIHZhbHVlcworCSAqIGFyZSBwb3NpdGl2ZSBzaWduZWQgdmFsdWVzLCBzaW5jZSB0aGUgc2F0dXJhdGlvbiBsb2dpYyB1c2VzIHRoZQorCSAqIGFic29sdXRlIHZhbHVlcyBvZiB0aGUgcmF3IGRhdGEuIFRoZSBuZWFyX3NhdF92YWx1ZSBkZWZhdWx0cyB0bworCSAqIGFwcHJveGltYXRlbHkgODAlIG9mIHRoZSBBREMncyBmdWxsIHNjYWxlLCB3aGljaCBpcyAyNjIxNCwgd2hpbGUKKwkgKiBzYXRfdmFsdWUgZGVmYXVsdHMgdG8gdGhlIEFEQydzIGZ1bGwgc2NhbGU6CisJICoKKwkgKiAgIHNhdF92YWx1ZSA9IDMyNzY4IC0gMl4oMTYgLSBBREMgYml0cykKKwkgKi8KKworCXMzMiBuZWFyX3NhdF92YWx1ZTsJLyogb2Zmc2V0IDB4MDBlMCAqLworCXMzMiBzYXRfdmFsdWU7CS8qIG9mZnNldCAweDAwZTEgKi8KKworCS8qIFJhdGVfYWRkcmVzcywgcmF0ZV9kaXZpc29yICYgcmF0ZV9jb3VudCBjb250YWluIHRoZSBkYXRhIHVzZWQgdG8KKwkgKiBjb250cm9sIHRoZSBjYWxjdWxhdGlvbnMgb2YgdGhlIHJhdGVzLiBSYXRlX2FkZHJlc3MgaXMgdGhlCisJICogYWRkcmVzcyBvZiB0aGUgZGF0YSB1c2VkIGZvciB0aGUgcmF0ZSBjYWxjdWxhdGlvbi4gVGhlIEpSMyBEU1AKKwkgKiB3aWxsIGNhbGN1bGF0ZSByYXRlcyBmb3IgYW55IDggY29udGlndW91cyB2YWx1ZXMgKGV4LiB0bworCSAqIGNhbGN1bGF0ZSByYXRlcyBmb3IgZmlsdGVyMyBkYXRhIHNldCByYXRlX2FkZHJlc3MgdG8gMHgwMGE4KS4KKwkgKiBSYXRlX2Rpdmlzb3IgaXMgaG93IG9mdGVuIHRoZSByYXRlIGlzIGNhbGN1bGF0ZWQuIElmIHJhdGVfZGl2aXNvcgorCSAqIGlzIDEsIHRoZSByYXRlcyBhcmUgY2FsY3VsYXRlZCBhdCBmdWxsIHNlbnNvciBiYW5kd2lkdGguIElmCisJICogcmF0ZV9kaXZpc29yIGlzIDIwMCwgcmF0ZXMgYXJlIGNhbGN1bGF0ZWQgZXZlcnkgMjAwIHNhbXBsZXMuCisJICogUmF0ZV9kaXZpc29yIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiAxIGFuZCA2NTUzNi4gU2V0CisJICogcmF0ZV9kaXZpc29yIHRvIDAgdG8gY2FsY3VsYXRlIHJhdGVzIGV2ZXJ5IDY1NTM2IHNhbXBsZXMuCisJICogUmF0ZV9jb3VudCBzdGFydHMgYXQgemVybyBhbmQgY291bnRzIHVudGlsIGl0IGVxdWFscworCSAqIHJhdGVfZGl2aXNvciwgYXQgd2hpY2ggcG9pbnQgdGhlIHJhdGVzIGFyZSBjYWxjdWxhdGVkLCBhbmQKKwkgKiByYXRlX2NvdW50IGlzIHJlc2V0IHRvIDAuIFdoZW4gc2V0dGluZyBhIG5ldyByYXRlIGRpdmlzb3IsIGl0IGlzCisJICogYSBnb29kIGlkZWEgdG8gc2V0IHJhdGVfY291bnQgdG8gb25lIGxlc3MgdGhhbiByYXRlIGRpdmlzb3IuIFRoaXMKKwkgKiB3aWxsIG1pbmltaXplIHRoZSB0aW1lIG5lY2Vzc2FyeSB0byBzdGFydCB0aGUgcmF0ZSBjYWxjdWxhdGlvbnMuCisJICovCisKKwlzMzIgcmF0ZV9hZGRyZXNzOwkvKiBvZmZzZXQgMHgwMGUyICovCisJdTMyIHJhdGVfZGl2aXNvcjsJLyogb2Zmc2V0IDB4MDBlMyAqLworCXUzMiByYXRlX2NvdW50OwkvKiBvZmZzZXQgMHgwMGU0ICovCisKKwkvKiBDb21tYW5kX3dvcmQyIHRocm91Z2ggY29tbWFuZF93b3JkMCBhcmUgdGhlIGxvY2F0aW9ucyB1c2VkIHRvCisJICogc2VuZCBjb21tYW5kcyB0byB0aGUgSlIzIERTUC4gVGhlaXIgdXNhZ2UgdmFyaWVzIHdpdGggdGhlIGNvbW1hbmQKKwkgKiBhbmQgaXMgZGV0YWlsZWQgbGF0ZXIgaW4gdGhlIENvbW1hbmQgRGVmaW5pdGlvbnMgc2VjdGlvbiAocGcuCisJICogMjkpLiBJbiBnZW5lcmFsIHRoZSB1c2VyIHBsYWNlcyB2YWx1ZXMgaW50byB2YXJpb3VzIG1lbW9yeQorCSAqIGxvY2F0aW9ucywgYW5kIHRoZW4gcGxhY2VzIHRoZSBjb21tYW5kIHdvcmQgaW50byBjb21tYW5kX3dvcmQwLgorCSAqIFRoZSBKUjMgRFNQIHdpbGwgcHJvY2VzcyB0aGUgY29tbWFuZCBhbmQgcGxhY2UgYSAwIGludG8KKwkgKiBjb21tYW5kX3dvcmQwIHRvIGluZGljYXRlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4gQWx0ZXJuYXRpdmVseQorCSAqIHRoZSBKUjMgRFNQIHdpbGwgcGxhY2UgYSBuZWdhdGl2ZSBudW1iZXIgaW50byBjb21tYW5kX3dvcmQwIHRvCisJICogaW5kaWNhdGUgYW4gZXJyb3IgY29uZGl0aW9uLiBQbGVhc2Ugbm90ZSB0aGUgY29tbWFuZCBsb2NhdGlvbnMKKwkgKiBhcmUgbnVtYmVyZWQgYmFja3dhcmRzLiAoSS5FLiBjb21tYW5kX3dvcmQyIGNvbWVzIGJlZm9yZQorCSAqIGNvbW1hbmRfd29yZDEpLgorCSAqLworCisJczMyIGNvbW1hbmRfd29yZDI7CS8qIG9mZnNldCAweDAwZTUgKi8KKwlzMzIgY29tbWFuZF93b3JkMTsJLyogb2Zmc2V0IDB4MDBlNiAqLworCXMzMiBjb21tYW5kX3dvcmQwOwkvKiBvZmZzZXQgMHgwMGU3ICovCisKKwkvKiBDb3VudDEgdGhyb3VnaCBjb3VudDYgYXJlIHVuc2lnbmVkIGNvdW50ZXJzIHdoaWNoIGFyZSBpbmNyZW1lbnRlZAorCSAqIGV2ZXJ5IHRpbWUgdGhlIG1hdGNoaW5nIGZpbHRlcnMgYXJlIGNhbGN1bGF0ZWQuIEZpbHRlcjEgaXMKKwkgKiBjYWxjdWxhdGVkIGF0IHRoZSBzZW5zb3IgZGF0YSBiYW5kd2lkdGguIFNvIHRoaXMgY291bnRlciB3b3VsZAorCSAqIGluY3JlbWVudCBhdCA4IGtIeiBmb3IgYSB0eXBpY2FsIHNlbnNvci4gVGhlIHJlc3Qgb2YgdGhlIGNvdW50ZXJzCisJICogYXJlIGluY3JlbWVudGVkIGF0IDEvNCB0aGUgaW50ZXJ2YWwgb2YgdGhlIGNvdW50ZXIgaW1tZWRpYXRlbHkKKwkgKiBwcmVjZWRpbmcgaXQsIHNvIHRoZXkgd291bGQgY291bnQgYXQgMiBrSHosIDUwMCBIeiwgMTI1IEh6IGV0Yy4KKwkgKiBUaGVzZSBjb3VudGVycyBjYW4gYmUgdXNlZCB0byB3YWl0IGZvciBkYXRhLiBFYWNoIHRpbWUgdGhlCisJICogY291bnRlciBjaGFuZ2VzLCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHNldCBjYW4gYmUgc2FtcGxlZCwgYW5kCisJICogdGhpcyB3aWxsIGluc3VyZSB0aGF0IHRoZSB1c2VyIGdldHMgZWFjaCBzYW1wbGUsIG9uY2UsIGFuZCBvbmx5CisJICogb25jZS4KKwkgKi8KKworCXUzMiBjb3VudDE7CQkvKiBvZmZzZXQgMHgwMGU4ICovCisJdTMyIGNvdW50MjsJCS8qIG9mZnNldCAweDAwZTkgKi8KKwl1MzIgY291bnQzOwkJLyogb2Zmc2V0IDB4MDBlYSAqLworCXUzMiBjb3VudDQ7CQkvKiBvZmZzZXQgMHgwMGViICovCisJdTMyIGNvdW50NTsJCS8qIG9mZnNldCAweDAwZWMgKi8KKwl1MzIgY291bnQ2OwkJLyogb2Zmc2V0IDB4MDBlZCAqLworCisJLyogRXJyb3JfY291bnQgaXMgYSBydW5uaW5nIGNvdW50IG9mIGRhdGEgcmVjZXB0aW9uIGVycm9ycy4gSWYgdGhpcworCSAqIGNvdW50ZXIgaXMgY2hhbmdpbmcgcmFwaWRseSwgaXQgcHJvYmFibHkgaW5kaWNhdGVzIGEgYmFkIHNlbnNvcgorCSAqIGNhYmxlIGNvbm5lY3Rpb24gb3Igb3RoZXIgaGFyZHdhcmUgcHJvYmxlbS4gSW4gbW9zdCBpbnN0YWxsYXRpb25zCisJICogZXJyb3JfY291bnQgc2hvdWxkIG5vdCBjaGFuZ2UgYXQgYWxsLiBCdXQgaXQgaXMgcG9zc2libGUgaW4gYW4KKwkgKiBleHRyZW1lbHkgbm9pc3kgZW52aXJvbm1lbnQgdG8gZXhwZXJpZW5jZSBvY2Nhc2lvbmFsIGVycm9ycyBldmVuCisJICogd2l0aG91dCBhIGhhcmR3YXJlIHByb2JsZW0uIElmIHRoZSBzZW5zb3IgaXMgd2VsbCBncm91bmRlZCwgdGhpcworCSAqIGlzIHByb2JhYmx5IHVuYXZvaWRhYmxlIGluIHRoZXNlIGVudmlyb25tZW50cy4gT24gdGhlIG9jY2FzaW9ucworCSAqIHdoZXJlIHRoaXMgY291bnRlciBjb3VudHMgYSBiYWQgc2FtcGxlLCB0aGF0IHNhbXBsZSBpcyBpZ25vcmVkLgorCSAqLworCisJdTMyIGVycm9yX2NvdW50OwkvKiBvZmZzZXQgMHgwMGVlICovCisKKwkvKiBDb3VudF94IGlzIGEgY291bnRlciB3aGljaCBpcyBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIHRoZSBKUjMgRFNQCisJICogc2VhcmNoZXMgaXRzIGpvYiBxdWV1ZXMgYW5kIGZpbmRzIG5vdGhpbmcgdG8gZG8uIEl0IGluZGljYXRlcyB0aGUKKwkgKiBhbW91bnQgb2YgaWRsZSB0aW1lIHRoZSBKUjMgRFNQIGhhcyBhdmFpbGFibGUuIEl0IGNhbiBhbHNvIGJlCisJICogdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIEpSMyBEU1AgaXMgYWxpdmUuIFNlZSB0aGUgUGVyZm9ybWFuY2UKKwkgKiBJc3N1ZXMgc2VjdGlvbiBvbiBwZy4gNDkgZm9yIG1vcmUgZGV0YWlscy4KKwkgKi8KKworCXUzMiBjb3VudF94OwkvKiBvZmZzZXQgMHgwMGVmICovCisKKwkvKiBXYXJuaW5ncyAmIGVycm9ycyBjb250YWluIHRoZSB3YXJuaW5nIGFuZCBlcnJvciBiaXRzCisJICogcmVzcGVjdGl2ZWx5LiBUaGUgZm9ybWF0IG9mIHRoZXNlIHR3byB3b3JkcyBpcyBkaXNjdXNzZWQgb24gcGFnZQorCSAqIDIxIHVuZGVyIHRoZSBoZWFkaW5ncyB3YXJuaW5nc19iaXRzIGFuZCBlcnJvcl9iaXRzLgorCSAqLworCisJdTMyIHdhcm5pbmdzOwkvKiBvZmZzZXQgMHgwMGYwICovCisJdTMyIGVycm9yczsJCS8qIG9mZnNldCAweDAwZjEgKi8KKworCS8qIFRocmVzaG9sZF9iaXRzIGlzIGEgd29yZCBjb250YWluaW5nIHRoZSBiaXRzIHRoYXQgYXJlIHNldCBieSB0aGUKKwkgKiBsb2FkIGVudmVsb3Blcy4gU2VlIGxvYWRfZW52ZWxvcGVzIChwZy4gMTcpIGFuZCB0aHJlc2hfc3RydWN0CisJICogKHBnLiAyMykgZm9yIG1vcmUgZGV0YWlscy4KKwkgKi8KKworCXMzMiB0aHJlc2hvbGRfYml0czsJLyogb2Zmc2V0IDB4MDBmMiAqLworCisJLyogTGFzdF9jcmMgaXMgdGhlIHZhbHVlIHRoYXQgc2hvd3MgdGhlIGFjdHVhbCBjYWxjdWxhdGVkIENSQy4gQ1JDCisJICogaXMgc2hvcnQgZm9yIGN5Y2xpYyByZWR1bmRhbmN5IGNvZGUuIEl0IHNob3VsZCBiZSB6ZXJvLiBTZWUgdGhlCisJICogZGVzY3JpcHRpb24gZm9yIGNhbF9jcmNfYmFkIChwZy4gMjEpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCSAqLworCisJczMyIGxhc3RfQ1JDOwkvKiBvZmZzZXQgMHgwMGYzICovCisKKwkvKiBFRVByb21fdmVyX25vIGNvbnRhaW5zIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgc2Vuc29yIEVFUHJvbS4KKwkgKiBFRVByb20gdmVyc2lvbiBudW1iZXJzIGNhbiB2YXJ5IGJldHdlZW4gMCBhbmQgMjU1LgorCSAqIFNvZnR3YXJlX3Zlcl9ubyBjb250YWlucyB0aGUgc29mdHdhcmUgdmVyc2lvbiBudW1iZXIuIFZlcnNpb24KKwkgKiAzLjAyIHdvdWxkIGJlIHN0b3JlZCBhcyAzMDIuCisJICovCisKKwlzMzIgZWVwcm9tX3Zlcl9ubzsJLyogb2Zmc2V0IDB4MDBmNCAqLworCXMzMiBzb2Z0d2FyZV92ZXJfbm87CS8qIG9mZnNldCAweDAwZjUgKi8KKworCS8qIFNvZnR3YXJlX2RheSAmIHNvZnR3YXJlX3llYXIgYXJlIHRoZSByZWxlYXNlIGRhdGUgb2YgdGhlIHNvZnR3YXJlCisJICogdGhlIEpSMyBEU1AgaXMgY3VycmVudGx5IHJ1bm5pbmcuIERheSBpcyB0aGUgZGF5IG9mIHRoZSB5ZWFyLAorCSAqIHdpdGggSmFudWFyeSAxIGJlaW5nIDEsIGFuZCBEZWNlbWJlciAzMSwgYmVpbmcgMzY1IGZvciBub24gbGVhcAorCSAqIHllYXJzLgorCSAqLworCisJczMyIHNvZnR3YXJlX2RheTsJLyogb2Zmc2V0IDB4MDBmNiAqLworCXMzMiBzb2Z0d2FyZV95ZWFyOwkvKiBvZmZzZXQgMHgwMGY3ICovCisKKwkvKiBTZXJpYWxfbm8gJiBtb2RlbF9ubyBhcmUgdGhlIHR3byB2YWx1ZXMgd2hpY2ggdW5pcXVlbHkgaWRlbnRpZnkgYQorCSAqIHNlbnNvci4gVGhpcyBtb2RlbCBudW1iZXIgZG9lcyBub3QgZGlyZWN0bHkgY29ycmVzcG9uZCB0byB0aGUgSlIzCisJICogbW9kZWwgbnVtYmVyLCBidXQgaXQgd2lsbCBwcm92aWRlIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yCisJICogZGlmZmVyZW50IHNlbnNvciBjb25maWd1cmF0aW9ucy4KKwkgKi8KKworCXUzMiBzZXJpYWxfbm87CS8qIG9mZnNldCAweDAwZjggKi8KKwl1MzIgbW9kZWxfbm87CS8qIG9mZnNldCAweDAwZjkgKi8KKworCS8qIENhbF9kYXkgJiBjYWxfeWVhciBhcmUgdGhlIHNlbnNvciBjYWxpYnJhdGlvbiBkYXRlLiBEYXkgaXMgdGhlCisJICogZGF5IG9mIHRoZSB5ZWFyLCB3aXRoIEphbnVhcnkgMSBiZWluZyAxLCBhbmQgRGVjZW1iZXIgMzEsIGJlaW5nCisJICogMzY2IGZvciBsZWFwIHllYXJzLgorCSAqLworCisJczMyIGNhbF9kYXk7CS8qIG9mZnNldCAweDAwZmEgKi8KKwlzMzIgY2FsX3llYXI7CS8qIG9mZnNldCAweDAwZmIgKi8KKworCS8qIFVuaXRzIGlzIGFuIGVudW1lcmF0ZWQgcmVhZCBvbmx5IHZhbHVlIGRlZmluaW5nIHRoZSBlbmdpbmVlcmluZworCSAqIHVuaXRzIHVzZWQgaW4gdGhlIHNlbnNvciBmdWxsIHNjYWxlLiBUaGUgbWVhbmluZ3Mgb2YgcGFydGljdWxhcgorCSAqIHZhbHVlcyBhcmUgZGlzY3Vzc2VkIGluIHRoZSBzZWN0aW9uIGRldGFpbGluZyB0aGUgZm9yY2VfdW5pdHMKKwkgKiBzdHJ1Y3R1cmUgb24gcGFnZSAyMi4gVGhlIGVuZ2luZWVyaW5nIHVuaXRzIGFyZSBzZXR0byBjdXN0b21lcgorCSAqIHNwZWNpZmljYXRpb25zIGR1cmluZyBzZW5zb3IgbWFudWZhY3R1cmUgYW5kIGNhbm5vdCBiZSBjaGFuZ2VkIGJ5CisJICogd3JpdGluZyB0byBVbml0cy4KKwkgKgorCSAqIEJpdHMgY29udGFpbnMgdGhlIG51bWJlciBvZiBiaXRzIG9mIHJlc29sdXRpb24gb2YgdGhlIEFEQworCSAqIGN1cnJlbnRseSBpbiB1c2UuCisJICoKKwkgKiBDaGFubmVscyBpcyBhIGJpdCBmaWVsZCBzaG93aW5nIHdoaWNoIGNoYW5uZWxzIHRoZSBjdXJyZW50IHNlbnNvcgorCSAqIGlzIGNhcGFibGUgb2Ygc2VuZGluZy4gSWYgYml0IDAgaXMgYWN0aXZlLCB0aGlzIHNlbnNvciBjYW4gc2VuZAorCSAqIGNoYW5uZWwgMCwgaWYgYml0IDEzIGlzIGFjdGl2ZSwgdGhpcyBzZW5zb3IgY2FuIHNlbmQgY2hhbm5lbCAxMywKKwkgKiBldGMuIFRoaXMgYml0IGNhbiBiZSBhY3RpdmUsIGV2ZW4gaWYgdGhlIHNlbnNvciBpcyBub3QgY3VycmVudGx5CisJICogc2VuZGluZyB0aGlzIGNoYW5uZWwuIFNvbWUgc2Vuc29ycyBhcmUgY29uZmlndXJhYmxlIGFzIHRvIHdoaWNoCisJICogY2hhbm5lbHMgdG8gc2VuZCwgYW5kIHRoaXMgZmllbGQgb25seSBjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUKKwkgKiBjaGFubmVscyBhdmFpbGFibGUgdG8gc2VuZCwgbm90IG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFRvCisJICogZmluZCB3aGljaCBjaGFubmVscyBhcmUgY3VycmVudGx5IGJlaW5nIHNlbnQsIG1vbml0b3IgdGhlCisJICogUmF3X3RpbWUgZmllbGRzIChwZy4gMTkpIGluIHRoZSByYXdfY2hhbm5lbHMgYXJyYXkgKHBnLiA3KS4gSWYKKwkgKiB0aGUgdGltZSBpcyBjaGFuZ2luZyBwZXJpb2RpY2FsbHksIHRoZW4gdGhhdCBjaGFubmVsIGlzIGJlaW5nCisJICogcmVjZWl2ZWQuCisJICovCisKKwl1MzIgdW5pdHM7CQkvKiBvZmZzZXQgMHgwMGZjICovCisJczMyIGJpdHM7CQkvKiBvZmZzZXQgMHgwMGZkICovCisJczMyIGNoYW5uZWxzOwkvKiBvZmZzZXQgMHgwMGZlICovCisKKwkvKiBUaGlja25lc3Mgc3BlY2lmaWVzIHRoZSBvdmVyYWxsIHRoaWNrbmVzcyBvZiB0aGUgc2Vuc29yIGZyb20KKwkgKiBmbGFuZ2UgdG8gZmxhbmdlLiBUaGUgZW5naW5lZXJpbmcgdW5pdHMgZm9yIHRoaXMgdmFsdWUgYXJlCisJICogY29udGFpbmVkIGluIHVuaXRzIChwZy4gMTYpLiBUaGUgc2Vuc29yIGNhbGlicmF0aW9uIGlzIHJlbGF0aXZlCisJICogdG8gdGhlIGNlbnRlciBvZiB0aGUgc2Vuc29yLiBUaGlzIHZhbHVlIGFsbG93cyBlYXN5IGNvb3JkaW5hdGUKKwkgKiB0cmFuc2Zvcm1hdGlvbiBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIHNlbnNvciB0byBlaXRoZXIgZmxhbmdlLgorCSAqLworCisJczMyIHRoaWNrbmVzczsJLyogb2Zmc2V0IDB4MDBmZiAqLworCisJLyogTG9hZF9lbnZlbG9wZXMgaXMgYSB0YWJsZSBjb250YWluaW5nIHRoZSBsb2FkIGVudmVsb3BlCisJICogZGVzY3JpcHRpb25zLiBUaGVyZSBhcmUgMTYgcG9zc2libGUgbG9hZCBlbnZlbG9wZSBzbG90cyBpbiB0aGUKKwkgKiB0YWJsZS4gVGhlIHNsb3RzIGFyZSBvbiAxNiB3b3JkIGJvdW5kYXJpZXMgYW5kIGFyZSBudW1iZXJlZCAwLTE1LgorCSAqIEVhY2ggbG9hZCBlbnZlbG9wZSBuZWVkcyB0byBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc2xvdCBidXQKKwkgKiBuZWVkIG5vdCBiZSBmdWxseSBjb250YWluZWQgaW4gdGhhdCBzbG90LiBUaGF0IGlzIHRvIHNheSB0aGF0IGEKKwkgKiBzaW5nbGUgbG9hZCBlbnZlbG9wZSBjYW4gYmUgbGFyZ2VyIHRoYW4gYSBzaW5nbGUgc2xvdC4gVGhlCisJICogc29mdHdhcmUgaGFzIGJlZW4gdGVzdGVkIGFuZCByYW4gc2F0aXNmYWN0b3JpbHkgd2l0aCA1MAorCSAqIHRocmVzaG9sZHMgYWN0aXZlLiBBIHNpbmdsZSBsb2FkIGVudmVsb3BlIHRoaXMgbGFyZ2Ugd291bGQgdGFrZQorCSAqIHVwIDUgb2YgdGhlIDE2IHNsb3RzLiBUaGUgbG9hZCBlbnZlbG9wZSBkYXRhIGlzIGxhaWQgb3V0IGluIGFuCisJICogb3JkZXIgdGhhdCBpcyBtb3N0IGVmZmljaWVudCBmb3IgdGhlIEpSMyBEU1AuIFRoZSBzdHJ1Y3R1cmUgaXMKKwkgKiBkZXRhaWxlZCBsYXRlciBpbiB0aGUgc2VjdGlvbiBzaG93aW5nIHRoZSBkZWZpbml0aW9uIG9mIHRoZQorCSAqIGxlX3N0cnVjdCBzdHJ1Y3R1cmUgKHBnLiAyMykuCisJICovCisKKwlzdHJ1Y3QgbGVfc3RydWN0IGxvYWRfZW52ZWxvcGVzWzB4MTBdOwkvKiBvZmZzZXQgMHgwMTAwICovCisKKwkvKiBUcmFuc2Zvcm1zIGlzIGEgdGFibGUgY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGRlc2NyaXB0aW9ucy4KKwkgKiBUaGVyZSBhcmUgMTYgcG9zc2libGUgdHJhbnNmb3JtIHNsb3RzIGluIHRoZSB0YWJsZS4gVGhlIHNsb3RzIGFyZQorCSAqIG9uIDE2IHdvcmQgYm91bmRhcmllcyBhbmQgYXJlIG51bWJlcmVkIDAtMTUuIEVhY2ggdHJhbnNmb3JtIG5lZWRzCisJICogdG8gc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHNsb3QgYnV0IG5lZWQgbm90IGJlIGZ1bGx5CisJICogY29udGFpbmVkIGluIHRoYXQgc2xvdC4gVGhhdCBpcyB0byBzYXkgdGhhdCBhIHNpbmdsZSB0cmFuc2Zvcm0KKwkgKiBjYW4gYmUgbGFyZ2VyIHRoYW4gYSBzaW5nbGUgc2xvdC4gQSB0cmFuc2Zvcm0gaXMgMiAqIG5vIG9mIGxpbmtzCisJICogKyAxIHdvcmRzIGluIGxlbmd0aC4gU28gYSBzaW5nbGUgc2xvdCBjYW4gY29udGFpbiBhIHRyYW5zZm9ybQorCSAqIHdpdGggNyBsaW5rcy4gVHdvIHNsb3RzIGNhbiBjb250YWluIGEgdHJhbnNmb3JtIHRoYXQgaXMgMTUgbGlua3MuCisJICogVGhlIGxheW91dCBpcyBkZXRhaWxlZCBsYXRlciBpbiB0aGUgc2VjdGlvbiBzaG93aW5nIHRoZQorCSAqIGRlZmluaXRpb24gb2YgdGhlIHRyYW5zZm9ybSBzdHJ1Y3R1cmUgKHBnLiAyNikuCisJICovCisKKwlzdHJ1Y3QgaW50ZXJuX3RyYW5zZm9ybSB0cmFuc2Zvcm1zWzB4MTBdOwkvKiBvZmZzZXQgMHgwMjAwICovCit9OworCitzdHJ1Y3QganIzX3QgeworCXN0cnVjdCB7CisJCXUzMiBwcm9ncmFtX2xvd1sweDQwMDBdOwkvKiAgMHgwMDAwMCAtIDB4MTAwMDAgKi8KKwkJc3RydWN0IGpyM19jaGFubmVsIGRhdGE7CS8qICAweDEwMDAwIC0gMHgxMGMwMCAqLworCQljaGFyIHBhZDJbMHgzMDAwMCAtIDB4MDBjMDBdOwkvKiAgMHgxMGMwMCAtIDB4NDAwMDAgKi8KKwkJdTMyIHByb2dyYW1faGlnaFsweDgwMDBdOwkvKiAgMHg0MDAwMCAtIDB4NjAwMDAgKi8KKwkJdTMyIHJlc2V0OwkvKiAgMHg2MDAwMCAtIDB4NjAwMDQgKi8KKwkJY2hhciBwYWQzWzB4MjAwMDAgLSAweDAwMDA0XTsJLyogIDB4NjAwMDQgLSAweDgwMDAwICovCisJfSBjaGFubmVsWzRdOworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9rZV9jb3VudGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMva2VfY291bnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjZmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMva2VfY291bnRlci5jCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2tlX2NvdW50ZXIuYworICAgIENvbWVkaSBkcml2ZXIgZm9yIEtvbHRlci1FbGVjdHJvbmljIFBDSSBDb3VudGVyIDEgQ2FyZAorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjoga2VfY291bnRlcgorRGVzY3JpcHRpb246IERyaXZlciBmb3IgS29sdGVyIEVsZWN0cm9uaWMgQ291bnRlciBDYXJkCitEZXZpY2VzOiBbS29sdGVyIEVsZWN0cm9uaWNdIFBDSSBDb3VudGVyIENhcmQgKGtlX2NvdW50ZXIpCitBdXRob3I6IE1pY2hhZWwgSGlsbG1hbm4KK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6NDI6NDIgKzAxMDAKK1N0YXR1czogdGVzdGVkCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorCitUaGlzIGRyaXZlciBpcyBhIHNpbXBsZSBkcml2ZXIgdG8gcmVhZCB0aGUgY291bnRlciB2YWx1ZXMgZnJvbQorS29sdGVyIEVsZWN0cm9uaWMgUENJIENvdW50ZXIgQ2FyZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2RlZmluZSBDTlRfRFJJVkVSX05BTUUgICAgICAgICAia2VfY291bnRlciIKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9LT0xURVIgICAgMHgxMDAxCisjZGVmaW5lIENOVF9DQVJEX0RFVklDRV9JRCAgICAgIDB4MDAxNAorCisvKi0tIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgY250X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGNudF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY250X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfS09MVEVSLCBDTlRfQ0FSRF9ERVZJQ0VfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCTB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNudF9wY2lfdGFibGUpOworCisvKi0tIGJvYXJkIHNwZWNpZmljYXRpb24gc3RydWN0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCBjbnRfYm9hcmRfc3RydWN0IHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGRldmljZV9pZDsKKwlpbnQgY250X2NoYW5uZWxfbmJyOworCWludCBjbnRfYml0czsKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbnRfYm9hcmRfc3RydWN0IGNudF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJQ05UX0RSSVZFUl9OQU1FLAorCSAgICAgIGRldmljZV9pZDpDTlRfQ0FSRF9ERVZJQ0VfSUQsCisJICAgICAgY250X2NoYW5uZWxfbmJyOjMsCisgICAgICBjbnRfYml0czoyNH0KK307CisKKyNkZWZpbmUgY250X2JvYXJkX25iciAoc2l6ZW9mKGNudF9ib2FyZHMpL3NpemVvZihzdHJ1Y3QgY250X2JvYXJkX3N0cnVjdCkpCisKKy8qLS0gZGV2aWNlIHByaXZhdGUgc3RydWN0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGNudF9kZXZpY2VfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworfTsKKworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgY250X2RldmljZV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgY250X2RyaXZlciA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOkNOVF9EUklWRVJfTkFNRSwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpjbnRfYXR0YWNoLAorICAgICAgZGV0YWNoOmNudF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGNudF9kcml2ZXIsIGNudF9wY2lfdGFibGUpOworCisvKi0tIGNvdW50ZXIgd3JpdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgcmVzZXR0aW5nIHRoZSBjb3VudGVyczsgbWF5YmUgaXQgaXMgYmV0dGVyCisgICB0byBtYWtlIGEgc3BlY2lhbCBjb21tYW5kICdyZXNldCcuICovCitzdGF0aWMgaW50IGNudF93aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCW91dGIoKHVuc2lnbmVkIGNoYXIpKChkYXRhWzBdID4+IDI0KSAmIDB4ZmYpLAorCQlkZXYtPmlvYmFzZSArIGNoYW4gKiAweDIwICsgMHgxMCk7CisJb3V0YigodW5zaWduZWQgY2hhcikoKGRhdGFbMF0gPj4gMTYpICYgMHhmZiksCisJCWRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDBjKTsKKwlvdXRiKCh1bnNpZ25lZCBjaGFyKSgoZGF0YVswXSA+PiA4KSAmIDB4ZmYpLAorCQlkZXYtPmlvYmFzZSArIGNoYW4gKiAweDIwICsgMHgwOCk7CisJb3V0YigodW5zaWduZWQgY2hhcikoKGRhdGFbMF0gPj4gMCkgJiAweGZmKSwKKwkJZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCArIDB4MDQpOworCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB3cml0dGVuICovCisJcmV0dXJuIDE7Cit9CisKKy8qLS0gY291bnRlciByZWFkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBjbnRfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgYTAsIGExLCBhMiwgYTMsIGE0OworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IHJlc3VsdDsKKworCWEwID0gaW5iKGRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjApOworCWExID0gaW5iKGRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDA0KTsKKwlhMiA9IGluYihkZXYtPmlvYmFzZSArIGNoYW4gKiAweDIwICsgMHgwOCk7CisJYTMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCArIDB4MGMpOworCWE0ID0gaW5iKGRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDEwKTsKKworCXJlc3VsdCA9IChhMSArIChhMiAqIDI1NikgKyAoYTMgKiA2NTUzNikpOworCWlmIChhNCA+IDApCisJCXJlc3VsdCA9IHJlc3VsdCAtIHMtPm1heGRhdGE7CisKKwkqZGF0YSA9ICh1bnNpZ25lZCBpbnQpIHJlc3VsdDsKKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZCAqLworCXJldHVybiAxOworfQorCisvKi0tIGF0dGFjaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgY250X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlOworCXN0cnVjdCBjbnRfYm9hcmRfc3RydWN0ICpib2FyZDsKKwl1bnNpZ25lZCBsb25nIGlvX2Jhc2U7CisJaW50IGVycm9yLCBpOworCisJLyogYWxsb2NhdGUgZGV2aWNlIHByaXZhdGUgc3RydWN0dXJlICovCisJaWYgKChlcnJvciA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGNudF9kZXZpY2VfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCS8qIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuICovCisJZm9yIChwY2lfZGV2aWNlID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXZpY2UgIT0gTlVMTDsKKwkJcGNpX2RldmljZSA9CisJCXBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXZpY2UpKSB7CisJCWlmIChwY2lfZGV2aWNlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9LT0xURVIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBjbnRfYm9hcmRfbmJyOyBpKyspIHsKKwkJCQlpZiAoY250X2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0KKwkJCQkJcGNpX2RldmljZS0+ZGV2aWNlKSB7CisJCQkJCS8qIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPyAqLworCQkJCQlpZiAoKGl0LT5vcHRpb25zWzBdICE9IDApCisJCQkJCQl8fCAoaXQtPm9wdGlvbnNbMV0gIT0gMCkpIHsKKwkJCQkJCS8qIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/ICovCisJCQkJCQlpZiAocGNpX2RldmljZS0+YnVzLT5udW1iZXIgIT0KKwkJCQkJCQlpdC0+b3B0aW9uc1swXQorCQkJCQkJCXx8IFBDSV9TTE9UKHBjaV9kZXZpY2UtPgorCQkJCQkJCQlkZXZmbikgIT0KKwkJCQkJCQlpdC0+b3B0aW9uc1sxXSkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZGV2LT5ib2FyZF9wdHIgPSBjbnRfYm9hcmRzICsgaTsKKwkJCQkJYm9hcmQgPSAoc3RydWN0IGNudF9ib2FyZF9zdHJ1Y3QgKikgZGV2LT4KKwkJCQkJCWJvYXJkX3B0cjsKKwkJCQkJZ290byBmb3VuZDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcHJpbnRrKCJjb21lZGklZDogbm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kISAocmVxLiBidXMvc2xvdDogJWQvJWQpXG4iLAorCQlkZXYtPm1pbm9yLCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCXJldHVybiAtRUlPOworCisgICAgICBmb3VuZDoKKwlwcmludGsoImNvbWVkaSVkOiBmb3VuZCAlcyBhdCBQQ0kgYnVzICVkLCBzbG90ICVkXG4iLCBkZXYtPm1pbm9yLAorCQlib2FyZC0+bmFtZSwgcGNpX2RldmljZS0+YnVzLT5udW1iZXIsCisJCVBDSV9TTE9UKHBjaV9kZXZpY2UtPmRldmZuKSk7CisJZGV2cHJpdi0+cGNpZGV2ID0gcGNpX2RldmljZTsKKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZC0+bmFtZTsKKworCS8qIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMgKi8KKwlpZiAoKGVycm9yID0gY29tZWRpX3BjaV9lbmFibGUocGNpX2RldmljZSwgQ05UX0RSSVZFUl9OQU1FKSkgPCAwKSB7CisJCXByaW50aygiY29tZWRpJWQ6IGZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zIVxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiByZWFkIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyBbUENJX0JBU0VfQUREUkVTUyAjMF0gKi8KKwlpb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXZpY2UsIDApOworCWRldi0+aW9iYXNlID0gaW9fYmFzZTsKKworCS8qIGFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcyAqLworCWlmICgoZXJyb3IgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkpIDwgMCkgeworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJc3ViZGV2aWNlID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gc3ViZGV2aWNlOworCisJc3ViZGV2aWNlLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzdWJkZXZpY2UtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSAvKiB8IFNERl9DT01NT04gKi8gOworCXN1YmRldmljZS0+bl9jaGFuID0gYm9hcmQtPmNudF9jaGFubmVsX25icjsKKwlzdWJkZXZpY2UtPm1heGRhdGEgPSAoMSA8PCBib2FyZC0+Y250X2JpdHMpIC0gMTsKKwlzdWJkZXZpY2UtPmluc25fcmVhZCA9IGNudF9yaW5zbjsKKwlzdWJkZXZpY2UtPmluc25fd3JpdGUgPSBjbnRfd2luc247CisKKwkvLyBzZWxlY3QgMjBNSHogY2xvY2sKKwlvdXRiKDMsIGRldi0+aW9iYXNlICsgMjQ4KTsKKworCS8vIHJlc2V0IGFsbCBjb3VudGVycworCW91dGIoMCwgZGV2LT5pb2Jhc2UpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyAweDIwKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgMHg0MCk7CisKKwlwcmludGsoImNvbWVkaSVkOiAiIENOVF9EUklWRVJfTkFNRSAiIGF0dGFjaGVkLlxuIiwgZGV2LT5taW5vcik7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0gZGV0YWNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBjbnRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaWRldikgeworCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lkZXYpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaWRldik7CisJfQorCXByaW50aygiY29tZWRpJWQ6ICIgQ05UX0RSSVZFUl9OQU1FICIgcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYwppbmRleCBiNDMyYWE3Li4xMjQ4MWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jCkBAIC05Miw3ICs5Miw3IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtZTQwMDBfcGNpX3RhYmxlKTsKIAotc3RhdGljIGNvbnN0IG1lNDAwMF9ib2FyZF90IG1lNDAwMF9ib2FyZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWU0MDAwX2JvYXJkIG1lNDAwMF9ib2FyZHNbXSA9IHsKIAl7Ik1FLTQ2NTAiLCAweDQ2NTAsIHswLCAwfSwgezE2LCAwLCAwLCAwfSwgezR9LCB7MH19LAogCiAJeyJNRS00NjYwIiwgMHg0NjYwLCB7MCwgMH0sIHszMiwgMCwgMTYsIDB9LCB7NH0sIHszfX0sCkBAIC0xMTMsMTA4ICsxMTMsMTA4IEBACiAJezB9LAogfTsKIAotI2RlZmluZSBNRTQwMDBfQk9BUkRfVkVSU0lPTlMgKHNpemVvZihtZTQwMDBfYm9hcmRzKSAvIHNpemVvZihtZTQwMDBfYm9hcmRfdCkgLSAxKQorI2RlZmluZSBNRTQwMDBfQk9BUkRfVkVSU0lPTlMgKHNpemVvZihtZTQwMDBfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgbWU0MDAwX2JvYXJkKSAtIDEpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgQ29tZWRpIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgbWU0MDAwX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpOwotc3RhdGljIGludCBtZTQwMDBfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX21lNDAwMCA9IHsKK3N0YXRpYyBpbnQgbWU0MDAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBtZTQwMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9tZTQwMDAgPSB7CiAgICAgICBkcml2ZXJfbmFtZToibWU0MDAwIiwKLSAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKLSAgICAgIGF0dGFjaDptZTQwMDBfYXR0YWNoLAotICAgICAgZGV0YWNoOm1lNDAwMF9kZXRhY2gsCisgICAgICBtb2R1bGUgOiBUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaCA6IG1lNDAwMF9hdHRhY2gsCisgICAgICBkZXRhY2ggOiBtZTQwMDBfZGV0YWNoLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNZWlsaGF1cyBmdW5jdGlvbiBwcm90b3R5cGVzCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IG1lNDAwMF9wcm9iZShjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpOwotc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApOwotc3RhdGljIGludCBpbml0X2JvYXJkX2luZm8oY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCk7Ci1zdGF0aWMgaW50IGluaXRfYW9fY29udGV4dChjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyBpbnQgaW5pdF9haV9jb250ZXh0KGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCBpbml0X2Rpb19jb250ZXh0KGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCBpbml0X2NudF9jb250ZXh0KGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCB4aWxpbnhfZG93bmxvYWQoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IHJlc2V0X2JvYXJkKGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBtZTQwMDBfcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wKTsKK3N0YXRpYyBpbnQgaW5pdF9ib2FyZF9pbmZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApOworc3RhdGljIGludCBpbml0X2FvX2NvbnRleHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGluaXRfYWlfY29udGV4dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaW5pdF9kaW9fY29udGV4dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaW5pdF9jbnRfY29udGV4dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgeGlsaW54X2Rvd25sb2FkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCByZXNldF9ib2FyZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAotc3RhdGljIGludCBtZTQwMDBfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAotc3RhdGljIGludCBtZTQwMDBfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgY250X3Jlc2V0KGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKTsKK3N0YXRpYyBpbnQgY250X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKTsKIAotc3RhdGljIGludCBjbnRfY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsCitzdGF0aWMgaW50IGNudF9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOworc3RhdGljIGludCBtZTQwMDBfY250X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAotc3RhdGljIGludCBtZTQwMDBfY250X2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOworc3RhdGljIGludCBtZTQwMDBfY250X2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9haV9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogc3ViZGV2aWNlLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwogCi1zdGF0aWMgaW50IGFpX2NoZWNrX2NoYW5saXN0KGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBhaV9jaGVja19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKIAotc3RhdGljIGludCBhaV9yb3VuZF9jbWRfYXJncyhjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9jbWQgKiBjbWQsCitzdGF0aWMgaW50IGFpX3JvdW5kX2NtZF9hcmdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCwKIAl1bnNpZ25lZCBpbnQgKmluaXRfdGlja3MsCiAJdW5zaWduZWQgaW50ICpzY2FuX3RpY2tzLCB1bnNpZ25lZCBpbnQgKmNoYW5fdGlja3MpOwogCi1zdGF0aWMgaW50IGFpX3ByZXBhcmUoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kLAorc3RhdGljIGludCBhaV9wcmVwYXJlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCwKIAl1bnNpZ25lZCBpbnQgaW5pdF90aWNrcywKIAl1bnNpZ25lZCBpbnQgc2Nhbl90aWNrcywgdW5zaWduZWQgaW50IGNoYW5fdGlja3MpOwogCi1zdGF0aWMgaW50IGFpX3dyaXRlX2NoYW5saXN0KGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBhaV93cml0ZV9jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKIAogc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9haV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkIFBUX1JFR1NfQVJHKTsKIAotc3RhdGljIGludCBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWRfdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKIAotc3RhdGljIGludCBtZTQwMDBfYWlfZG9fY21kKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2FvX2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOworc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2FvX2luc25fcmVhZChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1laWxoYXVzIGlubGluZSBmdW5jdGlvbnMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGlubGluZSB2b2lkIG1lNDAwMF9vdXRiKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYXIgdmFsdWUsCitzdGF0aWMgaW5saW5lIHZvaWQgbWU0MDAwX291dGIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciB2YWx1ZSwKIAl1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJUE9SVF9QREVCVUcoIi0tPiAweCUwMlggcG9ydCAweCUwNGxYXG4iLCB2YWx1ZSwgcG9ydCk7CiAJb3V0Yih2YWx1ZSwgcG9ydCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtZTQwMDBfb3V0bChjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlLAorc3RhdGljIGlubGluZSB2b2lkIG1lNDAwMF9vdXRsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCiAJdW5zaWduZWQgbG9uZyBwb3J0KQogewogCVBPUlRfUERFQlVHKCItLT4gMHglMDhsWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKIAlvdXRsKHZhbHVlLCBwb3J0KTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lNDAwMF9pbmwoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgbG9uZyBwb3J0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lNDAwMF9pbmwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJdmFsdWUgPSBpbmwocG9ydCk7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBtZTQwMDBfaW5iKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBtZTQwMDBfaW5iKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAl1bnNpZ25lZCBjaGFyIHZhbHVlOwogCXZhbHVlID0gaW5iKHBvcnQpOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJcmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBtZTQwMDBfYWlfcmFuZ2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgbWU0MDAwX2FpX3JhbmdlID0gewogCTQsCiAJewogCQkJVU5JX1JBTkdFKDIuNSksCkBAIC0yNDAsMTYgKzI0MCwxNiBAQAogCQl9CiB9OwogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBtZTQwMDBfYW9fcmFuZ2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgbWU0MDAwX2FvX3JhbmdlID0gewogCTEsCiAJewogCQkJQklQX1JBTkdFKDEwKSwKIAkJfQogfTsKIAotc3RhdGljIGludCBtZTQwMDBfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3N0YXRpYyBpbnQgbWU0MDAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgcmVzdWx0OwogCiAJQ0FMTF9QREVCVUcoIkluIG1lNDAwMF9hdHRhY2goKVxuIik7CkBAIC0yNzcsNyArMjc3LDcgQEAKIAkJcy0+c3ViZGV2X2ZsYWdzID0KIAkJCVNERl9SRUFEQUJMRSB8IFNERl9DT01NT04gfCBTREZfR1JPVU5EIHwgU0RGX0RJRkY7CiAJCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YWkuY291bnQ7Ci0JCXMtPm1heGRhdGEgPSAweEZGRkY7CS8vIDE2IGJpdCBBREMKKwkJcy0+bWF4ZGF0YSA9IDB4RkZGRjsJLyogIDE2IGJpdCBBREMgKi8KIAkJcy0+bGVuX2NoYW5saXN0ID0gTUU0MDAwX0FJX0NIQU5ORUxfTElTVF9DT1VOVDsKIAkJcy0+cmFuZ2VfdGFibGUgPSAmbWU0MDAwX2FpX3JhbmdlOwogCQlzLT5pbnNuX3JlYWQgPSBtZTQwMDBfYWlfaW5zbl9yZWFkOwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKIAkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRSB8IFNERl9DT01NT04gfCBTREZfR1JPVU5EOwogCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvLmNvdW50OwotCQlzLT5tYXhkYXRhID0gMHhGRkZGOwkvLyAxNiBiaXQgREFDCisJCXMtPm1heGRhdGEgPSAweEZGRkY7CS8qICAxNiBiaXQgREFDICovCiAJCXMtPnJhbmdlX3RhYmxlID0gJm1lNDAwMF9hb19yYW5nZTsKIAkJcy0+aW5zbl93cml0ZSA9IG1lNDAwMF9hb19pbnNuX3dyaXRlOwogCQlzLT5pbnNuX3JlYWQgPSBtZTQwMDBfYW9faW5zbl9yZWFkOwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOwogCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CiAJCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+Y250LmNvdW50OwotCQlzLT5tYXhkYXRhID0gMHhGRkZGOwkvLyAxNiBiaXQgY291bnRlcnMKKwkJcy0+bWF4ZGF0YSA9IDB4RkZGRjsJLyogIDE2IGJpdCBjb3VudGVycyAqLwogCQlzLT5pbnNuX3JlYWQgPSBtZTQwMDBfY250X2luc25fcmVhZDsKIAkJcy0+aW5zbl93cml0ZSA9IG1lNDAwMF9jbnRfaW5zbl93cml0ZTsKIAkJcy0+aW5zbl9jb25maWcgPSBtZTQwMDBfY250X2luc25fY29uZmlnOwpAQCAtMzY5LDE4ICszNjksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfcHJvYmUoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KQorc3RhdGljIGludCBtZTQwMDBfcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlOwogCWludCByZXN1bHQsIGk7Ci0JbWU0MDAwX2JvYXJkX3QgKmJvYXJkOworCXN0cnVjdCBtZTQwMDBfYm9hcmQgKmJvYXJkOwogCiAJQ0FMTF9QREVCVUcoIkluIG1lNDAwMF9wcm9iZSgpXG4iKTsKIAogCS8qIEFsbG9jYXRlIHByaXZhdGUgbWVtb3J5ICovCi0JaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YobWU0MDAwX2luZm9fdCkpIDwgMCkgeworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBtZTQwMDBfaW5mbykpIDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCiAJLyoKIAkgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgogCSAqLwpAQCAtNDA1LDcgKzQwNSw3IEBACiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJZGV2LT5ib2FyZF9wdHIgPSBtZTQwMDBfYm9hcmRzICsgaTsKLQkJCQkJYm9hcmQgPSAobWU0MDAwX2JvYXJkX3QgKikgZGV2LT4KKwkJCQkJYm9hcmQgPSAoc3RydWN0IG1lNDAwMF9ib2FyZCAqKSBkZXYtPgogCQkJCQkJYm9hcmRfcHRyOwogCQkJCQlpbmZvLT5wY2lfZGV2X3AgPSBwY2lfZGV2aWNlOwogCQkJCQlnb3RvIGZvdW5kOwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3JlZ2lzdGVycyhjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wKQorc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApCiB7CiAKIAlDQUxMX1BERUJVRygiSW4gZ2V0X3JlZ2lzdGVycygpXG4iKTsKQEAgLTU2NCwyNyArNTY0LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9ib2FyZF9pbmZvKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApCitzdGF0aWMgaW50IGluaXRfYm9hcmRfaW5mbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wKQogewogCWludCByZXN1bHQ7CiAKIAlDQUxMX1BERUJVRygiSW4gaW5pdF9ib2FyZF9pbmZvKClcbiIpOwogCiAJLyogSW5pdCBzcGluIGxvY2tzICovCi0JLy9zcGluX2xvY2tfaW5pdCgmaW5mby0+cHJlbG9hZF9sb2NrKTsKLQkvL3NwaW5fbG9ja19pbml0KCZpbmZvLT5haV9jdHJsX2xvY2spOworCS8qIHNwaW5fbG9ja19pbml0KCZpbmZvLT5wcmVsb2FkX2xvY2spOyAqLworCS8qIHNwaW5fbG9ja19pbml0KCZpbmZvLT5haV9jdHJsX2xvY2spOyAqLwogCiAJLyogR2V0IHRoZSBzZXJpYWwgbnVtYmVyICovCiAJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXZfcCwgMHgyQywgJmluZm8tPnNlcmlhbF9ubyk7Ci0JaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKIAkJcmV0dXJuIHJlc3VsdDsKLQl9CiAKIAkvKiBHZXQgdGhlIGhhcmR3YXJlIHJldmlzaW9uICovCiAJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2Rldl9wLCAweDA4LCAmaW5mby0+aHdfcmV2aXNpb24pOwotCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCiAJCXJldHVybiByZXN1bHQ7Ci0JfQogCiAJLyogR2V0IHRoZSB2ZW5kb3IgaWQgKi8KIAlpbmZvLT52ZW5kb3JfaWQgPSBwY2lfZGV2X3AtPnZlbmRvcjsKQEAgLTU5OCwxNCArNTk2LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9hb19jb250ZXh0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGluaXRfYW9fY29udGV4dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWludCBpOwogCiAJQ0FMTF9QREVCVUcoIkluIGluaXRfYW9fY29udGV4dCgpXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCB0aGlzYm9hcmQtPmFvLmNvdW50OyBpKyspIHsKLQkJLy9zcGluX2xvY2tfaW5pdCgmaW5mby0+YW9fY29udGV4dFtpXS51c2VfbG9jayk7CisJCS8qIHNwaW5fbG9ja19pbml0KCZpbmZvLT5hb19jb250ZXh0W2ldLnVzZV9sb2NrKTsgKi8KIAkJaW5mby0+YW9fY29udGV4dFtpXS5pcnEgPSBpbmZvLT5pcnE7CiAKIAkJc3dpdGNoIChpKSB7CkBAIC02ODEsNyArNjc5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbml0X2FpX2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaW5pdF9haV9jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAKIAlDQUxMX1BERUJVRygiSW4gaW5pdF9haV9jb250ZXh0KClcbiIpOwpAQCAtNzE1LDcgKzcxMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9kaW9fY29udGV4dChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpbml0X2Rpb19jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAKIAlDQUxMX1BERUJVRygiSW4gaW5pdF9kaW9fY29udGV4dCgpXG4iKTsKQEAgLTczNCw3ICs3MzIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGluaXRfY250X2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaW5pdF9jbnRfY29udGV4dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCiAJQ0FMTF9QREVCVUcoIkluIGluaXRfY250X2NvbnRleHQoKVxuIik7CkBAIC03NTUsNyArNzUzLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBjaGFyICp4aWxpbnhfZmlybTsKICNlbmRpZgogCi1zdGF0aWMgaW50IHhpbGlueF9kb3dubG9hZChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCB4aWxpbnhfZG93bmxvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAl1MzIgdmFsdWUgPSAwOwogCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOwpAQCAtNzgyLDcgKzc4MCw3IEBACiAKIAkvKiBXYWl0IHVudGlsIC9JTklUIHBpbiBpcyBzZXQgKi8KIAl1ZGVsYXkoMjApOwotCWlmICghaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lOVENTUikgJiAweDIwKSB7CisJaWYgKCEoaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lOVENTUikgJiAweDIwKSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJjb21lZGklZDogbWU0MDAwOiB4aWxpbnhfZG93bmxvYWQoKTogQ2FuJ3QgaW5pdCBYaWxpbnhcbiIsCiAJCQlkZXYtPm1pbm9yKTsKQEAgLTgzNyw3ICs4MzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlc2V0X2JvYXJkKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHJlc2V0X2JvYXJkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBpY3I7CiAKQEAgLTg5NSwxNiArODkzLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2RldGFjaChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBtZTQwMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJQ0FMTF9QREVCVUcoIkluIG1lNDAwMF9kZXRhY2goKVxuIik7CiAKIAlpZiAoaW5mbykgewogCQlpZiAoaW5mby0+cGNpX2Rldl9wKSB7CiAJCQlyZXNldF9ib2FyZChkZXYpOwotCQkJaWYgKGluZm8tPnBseF9yZWdiYXNlKSB7CisJCQlpZiAoaW5mby0+cGx4X3JlZ2Jhc2UpCiAJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGluZm8tPnBjaV9kZXZfcCk7Ci0JCQl9CiAJCQlwY2lfZGV2X3B1dChpbmZvLT5wY2lfZGV2X3ApOwogCQl9CiAJfQpAQCAtOTE2LDggKzkxMyw4IEBACiAgIEFuYWxvZyBpbnB1dCBzZWN0aW9uCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgbWU0MDAwX2FpX2luc25fcmVhZChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXZpY2UsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBtZTQwMDBfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZSwgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMTA0MCw3ICsxMDM3LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKQorc3RhdGljIGludCBtZTQwMDBfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xMDU3LDggKzEwNTQsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpX2NoZWNrX2NoYW5saXN0KGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9jbWQgKiBjbWQpCitzdGF0aWMgaW50IGFpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGFyZWY7CiAJaW50IGk7CkBAIC0xMTM4LDkgKzExMzUsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpX3JvdW5kX2NtZF9hcmdzKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2NtZCAqIGNtZCwKK3N0YXRpYyBpbnQgYWlfcm91bmRfY21kX2FyZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kLAogCXVuc2lnbmVkIGludCAqaW5pdF90aWNrcywKIAl1bnNpZ25lZCBpbnQgKnNjYW5fdGlja3MsIHVuc2lnbmVkIGludCAqY2hhbl90aWNrcykKIHsKQEAgLTExNjMsOSArMTE2MCw4IEBACiAJCXJlc3QgPSAoY21kLT5zdGFydF9hcmcgKiAzMykgJSAxMDAwOwogCiAJCWlmIChjbWQtPmZsYWdzICYgVFJJR19ST1VORF9ORUFSRVNUKSB7Ci0JCQlpZiAocmVzdCA+IDMzKSB7CisJCQlpZiAocmVzdCA+IDMzKQogCQkJCSgqaW5pdF90aWNrcykrKzsKLQkJCX0KIAkJfSBlbHNlIGlmIChjbWQtPmZsYWdzICYgVFJJR19ST1VORF9VUCkgewogCQkJaWYgKHJlc3QpCiAJCQkJKCppbml0X3RpY2tzKSsrOwpAQCAtMTE3Nyw5ICsxMTczLDggQEAKIAkJcmVzdCA9IChjbWQtPnNjYW5fYmVnaW5fYXJnICogMzMpICUgMTAwMDsKIAogCQlpZiAoY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTkVBUkVTVCkgewotCQkJaWYgKHJlc3QgPiAzMykgeworCQkJaWYgKHJlc3QgPiAzMykKIAkJCQkoKnNjYW5fdGlja3MpKys7Ci0JCQl9CiAJCX0gZWxzZSBpZiAoY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfVVApIHsKIAkJCWlmIChyZXN0KQogCQkJCSgqc2Nhbl90aWNrcykrKzsKQEAgLTExOTEsOSArMTE4Niw4IEBACiAJCXJlc3QgPSAoY21kLT5jb252ZXJ0X2FyZyAqIDMzKSAlIDEwMDA7CiAKIAkJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX05FQVJFU1QpIHsKLQkJCWlmIChyZXN0ID4gMzMpIHsKKwkJCWlmIChyZXN0ID4gMzMpCiAJCQkJKCpjaGFuX3RpY2tzKSsrOwotCQkJfQogCQl9IGVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX1VQKSB7CiAJCQlpZiAocmVzdCkKIAkJCQkoKmNoYW5fdGlja3MpKys7CkBAIC0xMjA3LDcgKzEyMDEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhaV93cml0ZV90aW1lcihjb21lZGlfZGV2aWNlICogZGV2LAorc3RhdGljIHZvaWQgYWlfd3JpdGVfdGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAl1bnNpZ25lZCBpbnQgaW5pdF90aWNrcywKIAl1bnNpZ25lZCBpbnQgc2Nhbl90aWNrcywgdW5zaWduZWQgaW50IGNoYW5fdGlja3MpCiB7CkBAIC0xMjI4LDkgKzEyMjIsOSBAQAogCW1lNDAwMF9vdXRsKGRldiwgY2hhbl90aWNrcyAtIDEsIGluZm8tPmFpX2NvbnRleHQuY2hhbl90aW1lcl9yZWcpOwogfQogCi1zdGF0aWMgaW50IGFpX3ByZXBhcmUoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kLAorc3RhdGljIGludCBhaV9wcmVwYXJlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCwKIAl1bnNpZ25lZCBpbnQgaW5pdF90aWNrcywKIAl1bnNpZ25lZCBpbnQgc2Nhbl90aWNrcywgdW5zaWduZWQgaW50IGNoYW5fdGlja3MpCiB7CkBAIC0xMjk3LDggKzEyOTEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpX3dyaXRlX2NoYW5saXN0KGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9jbWQgKiBjbWQpCitzdGF0aWMgaW50IGFpX3dyaXRlX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJdW5zaWduZWQgaW50IGVudHJ5OwogCXVuc2lnbmVkIGludCBjaGFuOwpAQCAtMTMzNywxMyArMTMzMSwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgaW5pdF90aWNrcyA9IDA7CiAJdW5zaWduZWQgaW50IHNjYW5fdGlja3MgPSAwOwogCXVuc2lnbmVkIGludCBjaGFuX3RpY2tzID0gMDsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX2FpX2RvX2NtZCgpXG4iKTsKIApAQCAtMTM4MSw4ICsxMzc1LDggQEAKICAqIC0gaW52YWxpZCBjaGFubGlzdAogICogU28gSSB0cmllZCB0byBhZG9wdCB0aGlzIHNjaGVtZS4KICAqLwotc3RhdGljIGludCBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2RvX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAKIAl1bnNpZ25lZCBpbnQgaW5pdF90aWNrczsKQEAgLTE1MDMsOSArMTQ5Nyw4IEBACiAJCWNtZC0+c3RvcF9zcmMgPSBUUklHX05PTkU7CiAJCWVycisrOwogCX0KLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIDE7Ci0JfQogCiAJLyoKIAkgKiBTdGFnZSAyLiBDaGVjayBmb3IgdHJpZ2dlciBzb3VyY2UgY29uZmxpY3RzLgpAQCAtMTU1Myw5ICsxNTQ2LDggQEAKIAkJY21kLT5zY2FuX2VuZF9zcmMgPSBUUklHX05PTkU7CiAJCWVycisrOwogCX0KLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIDI7Ci0JfQogCiAJLyoKIAkgKiBTdGFnZSAzLiBDaGVjayBpZiBhcmd1bWVudHMgYXJlIGdlbmVyYWxseSB2YWxpZC4KQEAgLTE1ODgsOSArMTU4MCw5IEBACiAJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwogCQllcnIrKzsKIAl9Ci0JaWYgKGVycikgeworCisJaWYgKGVycikKIAkJcmV0dXJuIDM7Ci0JfQogCiAJLyoKIAkgKiBTdGFnZSA0LiBDaGVjayBmb3IgYXJndW1lbnQgY29uZmxpY3RzLgpAQCAtMTYwNCwyMSArMTU5NiwyMSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoY2hhbl90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAkJaWYgKHNjYW5fdGlja3MgPD0gY21kLT5jaGFubGlzdF9sZW4gKiBjaGFuX3RpY2tzKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc2NhbiBlbmQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5zY2FuX2VuZF9hcmcgPSAyMDAwICogY21kLT5jaGFubGlzdF9sZW4gKyAzMTsJLy8gQXQgbGVhc3Qgb25lIHRpY2sgbW9yZQorCQkJY21kLT5zY2FuX2VuZF9hcmcgPSAyMDAwICogY21kLT5jaGFubGlzdF9sZW4gKyAzMTsJLyogIEF0IGxlYXN0IG9uZSB0aWNrIG1vcmUgKi8KIAkJCWVycisrOwogCQl9CiAJfSBlbHNlIGlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVyAmJgpAQCAtMTYzMCwxNCArMTYyMiwxNCBAQAogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoY2hhbl90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmCkBAIC0xNjQ5LDIxICsxNjQxLDIxIEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoc2Nhbl90aWNrcyA8PSBjbWQtPmNoYW5saXN0X2xlbiAqIGNoYW5fdGlja3MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzY2FuIGVuZCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwkvLyBBdCBsZWFzdCBvbmUgdGljayBtb3JlCisJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwkvKiAgQXQgbGVhc3Qgb25lIHRpY2sgbW9yZSAqLwogCQkJZXJyKys7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmCkBAIC0xNjc1LDE0ICsxNjY3LDE0IEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYKQEAgLTE2OTQsMTQgKzE2ODYsMTQgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAkJaWYgKGNoYW5fdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgY29udmVydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJfSBlbHNlIGlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJgpAQCAtMTcxMyw3ICsxNzA1LDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAl9CkBAIC0xNzM1LDkgKzE3MjcsOSBAQAogCQkJZXJyKys7CiAJCX0KIAl9Ci0JaWYgKGVycikgeworCisJaWYgKGVycikKIAkJcmV0dXJuIDQ7Ci0JfQogCiAJLyoKIAkgKiBTdGFnZSA1LiBDaGVjayB0aGUgY2hhbm5lbCBsaXN0LgpAQCAtMTc1MSw5ICsxNzQzLDkgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfYWlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCBQVF9SRUdTX0FSRykKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzOwotCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQgPSAmaW5mby0+YWlfY29udGV4dDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzOworCXN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dCA9ICZpbmZvLT5haV9jb250ZXh0OwogCWludCBpOwogCWludCBjID0gMDsKIAlsb25nIGx2YWw7CkBAIC0xOTExLDggKzE5MDMsOCBAQAogICBBbmFsb2cgb3V0cHV0IHNlY3Rpb24KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMTk2OSw4ICsxOTYxLDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKQEAgLTE5OTAsMTYgKzE5ODIsMTYgQEAKICAgRGlnaXRhbCBJL08gc2VjdGlvbgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBtZTQwMDBfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCUNBTExfUERFQlVHKCJJbiBtZTQwMDBfZGlvX2luc25fYml0cygpXG4iKTsKIAogCS8qIExlbmd0aCBvZiBkYXRhIG11c3QgYmUgMiAobWFzayBhbmQgbmV3IGRhdGEsIHNlZSBiZWxvdykgKi8KLQlpZiAoaW5zbi0+biA9PSAwKSB7CisJaWYgKGluc24tPm4gPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJaWYgKGluc24tPm4gIT0gMikgewogCQlwcmludGsoImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9kaW9faW5zbl9iaXRzKCk6IEludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMDQxLDggKzIwMzMsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKQEAgLTIxMzUsNyArMjEyNyw3IEBACiAgIENvdW50ZXIgc2VjdGlvbgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGNudF9yZXNldChjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3N0YXRpYyBpbnQgY250X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQogewogCiAJQ0FMTF9QREVCVUcoIkluIGNudF9yZXNldCgpXG4iKTsKQEAgLTIxNjYsNyArMjE1OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY250X2NvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKK3N0YXRpYyBpbnQgY250X2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKIAl1bnNpZ25lZCBpbnQgbW9kZSkKIHsKIAlpbnQgdG1wID0gMDsKQEAgLTIyMjMsOCArMjIxNSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCWludCBlcnI7CkBAIC0yMjY2LDE3ICsyMjU4LDE3IEBACiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJdW5zaWduZWQgc2hvcnQgdG1wOwogCiAJQ0FMTF9QREVCVUcoIkluIG1lNDAwMF9jbnRfaW5zbl9yZWFkKClcbiIpOwogCi0JaWYgKGluc24tPm4gPT0gMCkgeworCWlmIChpbnNuLT5uID09IDApCiAJCXJldHVybiAwOwotCX0KKwogCWlmIChpbnNuLT5uID4gMSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfY250X2luc25fcmVhZCgpOiBJbnZhbGlkIGluc3RydWN0aW9uIGxlbmd0aCAlZFxuIiwKQEAgLTIzMTMsOCArMjMwNSw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX3dyaXRlKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBtZTQwMDBfY250X2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAl1bnNpZ25lZCBzaG9ydCB0bXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmgKaW5kZXggZjEyYjg4Ny4uNzMzYjE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuaApAQCAtMjgsMzcgKzI4LDM3IEBACiAgIERlYnVnIHNlY3Rpb24KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI3VuZGVmIE1FNDAwMF9DQUxMX0RFQlVHCS8vIERlYnVnIGZ1bmN0aW9uIGVudHJ5IGFuZCBleGl0Ci0jdW5kZWYgTUU0MDAwX1BPUlRfREVCVUcJLy8gRGVidWcgcG9ydCBhY2Nlc3MKLSN1bmRlZiBNRTQwMDBfSVNSX0RFQlVHCQkvLyBEZWJ1ZyB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQotI3VuZGVmIE1FNDAwMF9ERUJVRwkJLy8gR2VuZXJhbCBwdXJwb3NlIGRlYnVnIG1hc3NlZ2VzCisjdW5kZWYgTUU0MDAwX0NBTExfREVCVUcJLyogIERlYnVnIGZ1bmN0aW9uIGVudHJ5IGFuZCBleGl0ICovCisjdW5kZWYgTUU0MDAwX1BPUlRfREVCVUcJLyogIERlYnVnIHBvcnQgYWNjZXNzICovCisjdW5kZWYgTUU0MDAwX0lTUl9ERUJVRwkJLyogIERlYnVnIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCisjdW5kZWYgTUU0MDAwX0RFQlVHCQkvKiAgR2VuZXJhbCBwdXJwb3NlIGRlYnVnIG1hc3NlZ2VzICovCiAKICNpZmRlZiBNRTQwMDBfQ0FMTF9ERUJVRwogI3VuZGVmIENBTExfUERFQlVHCiAjZGVmaW5lIENBTExfUERFQlVHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUciY29tZWRpJWQ6IG1lNDAwMDogIiBmbXQsIGRldi0+bWlub3IsICMjYXJncykKICNlbHNlCi0jIGRlZmluZSBDQUxMX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8vIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZworIyBkZWZpbmUgQ0FMTF9QREVCVUcoZm10LCBhcmdzLi4uKQkvKiAgbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nICovCiAjZW5kaWYKIAogI2lmZGVmIE1FNDAwMF9QT1JUX0RFQlVHCiAjdW5kZWYgUE9SVF9QREVCVUcKICNkZWZpbmUgUE9SVF9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJjb21lZGklZDogbWU0MDAwOiAiIGZtdCwgZGV2LT5taW5vciwgICMjYXJncykKICNlbHNlCi0jZGVmaW5lIFBPUlRfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZGVmaW5lIFBPUlRfUERFQlVHKGZtdCwgYXJncy4uLikJLyogIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZyAqLwogI2VuZGlmCiAKICNpZmRlZiBNRTQwMDBfSVNSX0RFQlVHCiAjdW5kZWYgSVNSX1BERUJVRwogI2RlZmluZSBJU1JfUERFQlVHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUciY29tZWRpJWQ6IG1lNDAwMDogIiBmbXQsIGRldi0+bWlub3IsICAjI2FyZ3MpCiAjZWxzZQotI2RlZmluZSBJU1JfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZGVmaW5lIElTUl9QREVCVUcoZm10LCBhcmdzLi4uKQkvKiAgbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nICovCiAjZW5kaWYKIAogI2lmZGVmIE1FNDAwMF9ERUJVRwogI3VuZGVmIFBERUJVRwogI2RlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJjb21lZGklZDogbWU0MDAwOiAiIGZtdCwgZGV2LT5taW5vciwgICMjYXJncykKICNlbHNlCi0jZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pCS8vIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZworI2RlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKQkvKiAgbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nICovCiAjZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNjcsNzggKzY3LDc4IEBACiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NRUlMSEFVUyAweDE0MDIKIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY1MAkweDQ2NTAJLy8gTG93IENvc3QgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY1MAkweDQ2NTAJLyogIExvdyBDb3N0IHZlcnNpb24gKi8KIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MAkweDQ2NjAJLy8gU3RhbmRhcmQgdmVyc2lvbgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MEkJMHg0NjYxCS8vIElzb2xhdGVkIHZlcnNpb24KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBTCTB4NDY2MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSVMJMHg0NjYzCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjAJMHg0NjYwCS8qICBTdGFuZGFyZCB2ZXJzaW9uICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSQkweDQ2NjEJLyogIElzb2xhdGVkIHZlcnNpb24gKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBTCTB4NDY2MgkvKiAgU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MElTCTB4NDY2MwkvKiAgSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZCAqLwogCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwCTB4NDY3MAkvLyBTdGFuZGFyZCB2ZXJzaW9uCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwSQkweDQ2NzEJLy8gSXNvbGF0ZWQgdmVyc2lvbgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MFMJMHg0NjcyCS8vIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBJUwkweDQ2NzMJLy8gSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MAkweDQ2NzAJLyogIFN0YW5kYXJkIHZlcnNpb24gKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBJCTB4NDY3MQkvKiAgSXNvbGF0ZWQgdmVyc2lvbiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MFMJMHg0NjcyCS8qICBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwSVMJMHg0NjczCS8qICBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkICovCiAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODAJMHg0NjgwCS8vIFN0YW5kYXJkIHZlcnNpb24KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBJCTB4NDY4MQkvLyBJc29sYXRlZCB2ZXJzaW9uCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwUwkweDQ2ODIJLy8gU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MElTCTB4NDY4MwkvLyBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwCTB4NDY4MAkvKiAgU3RhbmRhcmQgdmVyc2lvbiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MEkJMHg0NjgxCS8qICBJc29sYXRlZCB2ZXJzaW9uICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwUwkweDQ2ODIJLyogIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBJUwkweDQ2ODMJLyogIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBNRS00MDAwIGJhc2UgcmVnaXN0ZXIgb2Zmc2V0cwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIE1FNDAwMF9BT18wMF9DVFJMX1JFRwkJCTB4MDAJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMF9TVEFUVVNfUkVHCQkJMHgwNAkvLyBSL18KLSNkZWZpbmUgTUU0MDAwX0FPXzAwX0ZJRk9fUkVHCQkJMHgwOAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAwX1NJTkdMRV9SRUcJCQkweDBDCS8vIFIvVwotI2RlZmluZSBNRTQwMDBfQU9fMDBfVElNRVJfUkVHCQkJMHgxMAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAwX0NUUkxfUkVHCQkJMHgwMAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMF9TVEFUVVNfUkVHCQkJMHgwNAkvKiAgUi9fICovCisjZGVmaW5lIE1FNDAwMF9BT18wMF9GSUZPX1JFRwkJCTB4MDgJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDBfU0lOR0xFX1JFRwkJCTB4MEMJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDBfVElNRVJfUkVHCQkJMHgxMAkvKiAgXy9XICovCiAKLSNkZWZpbmUgTUU0MDAwX0FPXzAxX0NUUkxfUkVHCQkJMHgxOAkvLyBSL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAxX1NUQVRVU19SRUcJCQkweDFDCS8vIFIvXwotI2RlZmluZSBNRTQwMDBfQU9fMDFfRklGT19SRUcJCQkweDIwCS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQU9fMDFfU0lOR0xFX1JFRwkJCTB4MjQJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMV9USU1FUl9SRUcJCQkweDI4CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDFfQ1RSTF9SRUcJCQkweDE4CS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1NUQVRVU19SRUcJCQkweDFDCS8qICBSL18gKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAxX0ZJRk9fUkVHCQkJMHgyMAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMV9TSU5HTEVfUkVHCQkJMHgyNAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMV9USU1FUl9SRUcJCQkweDI4CS8qICBfL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQU9fMDJfQ1RSTF9SRUcJCQkweDMwCS8vIFIvVwotI2RlZmluZSBNRTQwMDBfQU9fMDJfU1RBVFVTX1JFRwkJCTB4MzQJLy8gUi9fCi0jZGVmaW5lIE1FNDAwMF9BT18wMl9GSUZPX1JFRwkJCTB4MzgJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMl9TSU5HTEVfUkVHCQkJMHgzQwkvLyBSL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAyX1RJTUVSX1JFRwkJCTB4NDAJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wMl9DVFJMX1JFRwkJCTB4MzAJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDJfU1RBVFVTX1JFRwkJCTB4MzQJLyogIFIvXyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDJfRklGT19SRUcJCQkweDM4CS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAyX1NJTkdMRV9SRUcJCQkweDNDCS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAyX1RJTUVSX1JFRwkJCTB4NDAJLyogIF8vVyAqLwogCi0jZGVmaW5lIE1FNDAwMF9BT18wM19DVFJMX1JFRwkJCTB4NDgJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wM19TVEFUVVNfUkVHCQkJMHg0QwkvLyBSL18KLSNkZWZpbmUgTUU0MDAwX0FPXzAzX0ZJRk9fUkVHCQkJMHg1MAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAzX1NJTkdMRV9SRUcJCQkweDU0CS8vIFIvVwotI2RlZmluZSBNRTQwMDBfQU9fMDNfVElNRVJfUkVHCQkJMHg1OAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAzX0NUUkxfUkVHCQkJMHg0OAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wM19TVEFUVVNfUkVHCQkJMHg0QwkvKiAgUi9fICovCisjZGVmaW5lIE1FNDAwMF9BT18wM19GSUZPX1JFRwkJCTB4NTAJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDNfU0lOR0xFX1JFRwkJCTB4NTQJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDNfVElNRVJfUkVHCQkJMHg1OAkvKiAgXy9XICovCiAKLSNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfUkVHCQkJMHg3NAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19SRUcJCQkweDc0CS8vIFIvXwotI2RlZmluZSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX1JFRwkJMHg3OAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FJX0RBVEFfUkVHCQkJMHg3QwkvLyBSL18KLSNkZWZpbmUgTUU0MDAwX0FJX0NIQU5fVElNRVJfUkVHCQkweDgwCS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9QUkVfVElNRVJfUkVHCQkweDg0CS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9USU1FUl9MT1dfUkVHCQkweDg4CS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9USU1FUl9ISUdIX1JFRwkJMHg4QwkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0xPV19SRUcJMHg5MAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0hJR0hfUkVHCTB4OTQJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BSV9TVEFSVF9SRUcJCQkweDk4CS8vIFIvXworI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9SRUcJCQkweDc0CS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19SRUcJCQkweDc0CS8qICBSL18gKi8KKyNkZWZpbmUgTUU0MDAwX0FJX0NIQU5ORUxfTElTVF9SRUcJCTB4NzgJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQUlfREFUQV9SRUcJCQkweDdDCS8qICBSL18gKi8KKyNkZWZpbmUgTUU0MDAwX0FJX0NIQU5fVElNRVJfUkVHCQkweDgwCS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX0NIQU5fUFJFX1RJTUVSX1JFRwkJMHg4NAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0xPV19SRUcJCTB4ODgJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9USU1FUl9ISUdIX1JFRwkJMHg4QwkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1BSRV9USU1FUl9MT1dfUkVHCTB4OTAJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfSElHSF9SRUcJMHg5NAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFSVF9SRUcJCQkweDk4CS8qICBSL18gKi8KIAotI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19SRUcJCQkweDlDCS8vIFIvXworI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19SRUcJCQkweDlDCS8qICBSL18gKi8KIAotI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMF9SRUcJCQkweEEwCS8vIFIvVwotI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMV9SRUcJCQkweEE0CS8vIFIvVwotI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMl9SRUcJCQkweEE4CS8vIFIvVwotI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfM19SRUcJCQkweEFDCS8vIFIvVwotI2RlZmluZSBNRTQwMDBfRElPX0RJUl9SRUcJCQkweEIwCS8vIFIvVworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMF9SRUcJCQkweEEwCS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzFfUkVHCQkJMHhBNAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8yX1JFRwkJCTB4QTgJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfM19SRUcJCQkweEFDCS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0RJT19ESVJfUkVHCQkJMHhCMAkvKiAgUi9XICovCiAKLSNkZWZpbmUgTUU0MDAwX0FPX0xPQURTRVRSRUdfWFgJCQkweEI0CS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWAkJCTB4QjQJLyogIFIvVyAqLwogCi0jZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9SRUcJCQkweEI4CS8vIFIvVworI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfUkVHCQkJMHhCOAkvKiAgUi9XICovCiAKLSNkZWZpbmUgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcJCTB4QkMJLy8gLS9XCisjZGVmaW5lIE1FNDAwMF9BT19ERU1VWF9BREpVU1RfUkVHCQkweEJDCS8qICAtL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQUlfU0FNUExFX0NPVU5URVJfUkVHCQkweEMwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU0FNUExFX0NPVU5URVJfUkVHCQkweEMwCS8qICBfL1cgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBWYWx1ZSB0byBhZGp1c3QgRGVtdXgKQEAgLTE1OSwyMSArMTU5LDIxIEBACiAgIFBMWCBiYXNlIHJlZ2lzdGVyIG9mZnNldHMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2RlZmluZSBQTFhfSU5UQ1NSCTB4NEMJLy8gSW50ZXJydXB0IGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgotI2RlZmluZSBQTFhfSUNSCQkweDUwCS8vIEluaXRpYWxpemF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIKKyNkZWZpbmUgUExYX0lOVENTUgkweDRDCS8qICBJbnRlcnJ1cHQgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFBMWF9JQ1IJCTB4NTAJLyogIEluaXRpYWxpemF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBCaXRzIGZvciB0aGUgUExYX0lDU1IgcmVnaXN0ZXIKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfRU4gICAgICAgICAgICAgMHgwMQkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIGlzIGVuYWJsZWQgKHIvdykKLSNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQxX1BPTCAgICAgICAgICAgIDB4MDIJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBwb2xhcml0eSBpcyBhY3RpdmUgaGlnaCAoci93KQotI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfU1RBVEUgICAgICAgICAgMHgwNAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIGlzIGFjdGl2ZSAoci9fKQotI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfRU4gICAgICAgICAgICAgMHgwOAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIGlzIGVuYWJsZWQgKHIvdykKLSNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQyX1BPTCAgICAgICAgICAgIDB4MTAJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBwb2xhcml0eSBpcyBhY3RpdmUgaGlnaCAoci93KQotI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfU1RBVEUgICAgICAgICAgMHgyMAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIGlzIGFjdGl2ZSAgKHIvXykKLSNkZWZpbmUgUExYX0lOVENTUl9QQ0lfSU5UX0VOICAgICAgICAgICAgICAgIDB4NDAJLy8gSWYgc2V0LCBQQ0kgaW50ZXJydXB0IGlzIGVuYWJsZWQgKHIvdykKLSNkZWZpbmUgUExYX0lOVENTUl9TT0ZUX0lOVCAgICAgICAgICAgICAgICAgIDB4ODAJLy8gSWYgc2V0LCBhIHNvZnR3YXJlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgKHIvdykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQxX0VOICAgICAgICAgICAgIDB4MDEJLyogIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgaXMgZW5hYmxlZCAoci93KSAqLworI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfUE9MICAgICAgICAgICAgMHgwMgkvKiAgSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBwb2xhcml0eSBpcyBhY3RpdmUgaGlnaCAoci93KSAqLworI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfU1RBVEUgICAgICAgICAgMHgwNAkvKiAgSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBpcyBhY3RpdmUgKHIvXykgKi8KKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQyX0VOICAgICAgICAgICAgIDB4MDgJLyogIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgaXMgZW5hYmxlZCAoci93KSAqLworI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfUE9MICAgICAgICAgICAgMHgxMAkvKiAgSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBwb2xhcml0eSBpcyBhY3RpdmUgaGlnaCAoci93KSAqLworI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfU1RBVEUgICAgICAgICAgMHgyMAkvKiAgSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBpcyBhY3RpdmUgIChyL18pICovCisjZGVmaW5lIFBMWF9JTlRDU1JfUENJX0lOVF9FTiAgICAgICAgICAgICAgICAweDQwCS8qICBJZiBzZXQsIFBDSSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCAoci93KSAqLworI2RlZmluZSBQTFhfSU5UQ1NSX1NPRlRfSU5UICAgICAgICAgICAgICAgICAgMHg4MAkvKiAgSWYgc2V0LCBhIHNvZnR3YXJlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgKHIvdykgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBCaXRzIGZvciB0aGUgUExYX0lDUiByZWdpc3RlcgpAQCAtMjkzLDQ1ICsyOTMsNDUgQEAKICAgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfYW9faW5mbyB7CitzdHJ1Y3QgbWU0MDAwX2FvX2luZm8gewogCWludCBjb3VudDsKIAlpbnQgZmlmb19jb3VudDsKLX0gbWU0MDAwX2FvX2luZm9fdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9pbmZvIHsKK3N0cnVjdCBtZTQwMDBfYWlfaW5mbyB7CiAJaW50IGNvdW50OwogCWludCBzaF9jb3VudDsKIAlpbnQgZGlmZl9jb3VudDsKIAlpbnQgZXhfdHJpZ19hbmFsb2c7Ci19IG1lNDAwMF9haV9pbmZvX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfZGlvX2luZm8geworc3RydWN0IG1lNDAwMF9kaW9faW5mbyB7CiAJaW50IGNvdW50OwotfSBtZTQwMDBfZGlvX2luZm9fdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9jbnRfaW5mbyB7CitzdHJ1Y3QgbWU0MDAwX2NudF9pbmZvIHsKIAlpbnQgY291bnQ7Ci19IG1lNDAwMF9jbnRfaW5mb190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2JvYXJkIHsKK3N0cnVjdCBtZTQwMDBfYm9hcmQgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOwotCW1lNDAwMF9hb19pbmZvX3QgYW87Ci0JbWU0MDAwX2FpX2luZm9fdCBhaTsKLQltZTQwMDBfZGlvX2luZm9fdCBkaW87Ci0JbWU0MDAwX2NudF9pbmZvX3QgY250OwotfSBtZTQwMDBfYm9hcmRfdDsKKwlzdHJ1Y3QgbWU0MDAwX2FvX2luZm8gYW87CisJc3RydWN0IG1lNDAwMF9haV9pbmZvIGFpOworCXN0cnVjdCBtZTQwMDBfZGlvX2luZm8gZGlvOworCXN0cnVjdCBtZTQwMDBfY250X2luZm8gY250OworfTsKIAotI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBtZTQwMDBfYm9hcmRfdCAqKWRldi0+Ym9hcmRfcHRyKQorI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgbWU0MDAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgR2xvYmFsIGJvYXJkIGFuZCBzdWJkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0dXJlcwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCB7CitzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgewogCWludCBpcnE7CiAKLQl1bnNpZ25lZCBsb25nIG1pcnJvcjsJLy8gU3RvcmUgdGhlIGxhc3Qgd3JpdHRlbiB2YWx1ZQorCXVuc2lnbmVkIGxvbmcgbWlycm9yOwkvKiAgU3RvcmUgdGhlIGxhc3Qgd3JpdHRlbiB2YWx1ZSAqLwogCiAJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKIAl1bnNpZ25lZCBsb25nIHN0YXR1c19yZWc7CkBAIC0zNDAsOSArMzQwLDkgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZzsKIAl1bnNpZ25lZCBsb25nIGlycV9zdGF0dXNfcmVnOwogCXVuc2lnbmVkIGxvbmcgcHJlbG9hZF9yZWc7Ci19IG1lNDAwMF9hb19jb250ZXh0X3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCB7CitzdHJ1Y3QgbWU0MDAwX2FpX2NvbnRleHQgewogCWludCBpcnE7CiAKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOwpAQCAtMzU4LDUxICszNTgsNTEgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3JlZzsKIAl1bnNpZ25lZCBsb25nIGlycV9zdGF0dXNfcmVnOwogCXVuc2lnbmVkIGxvbmcgc2FtcGxlX2NvdW50ZXJfcmVnOwotfSBtZTQwMDBfYWlfY29udGV4dF90OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0IHsKK3N0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgewogCXVuc2lnbmVkIGxvbmcgZGlyX3JlZzsKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOwogCXVuc2lnbmVkIGxvbmcgcG9ydF8wX3JlZzsKIAl1bnNpZ25lZCBsb25nIHBvcnRfMV9yZWc7CiAJdW5zaWduZWQgbG9uZyBwb3J0XzJfcmVnOwogCXVuc2lnbmVkIGxvbmcgcG9ydF8zX3JlZzsKLX0gbWU0MDAwX2Rpb19jb250ZXh0X3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgeworc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCB7CiAJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKIAl1bnNpZ25lZCBsb25nIGNvdW50ZXJfMF9yZWc7CiAJdW5zaWduZWQgbG9uZyBjb3VudGVyXzFfcmVnOwogCXVuc2lnbmVkIGxvbmcgY291bnRlcl8yX3JlZzsKLX0gbWU0MDAwX2NudF9jb250ZXh0X3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBwbHhfcmVnYmFzZTsJLy8gUExYIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmFzZSBhZGRyZXNzCi0JdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZTsJLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAKLQl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgY2lyY3VpdAotCXVuc2lnbmVkIGxvbmcgcHJvZ3JhbV9yZWdiYXNlOwkvLyBCYXNlIGFkZHJlc3MgdG8gc2V0IHRoZSBwcm9ncmFtIHBpbiBmb3IgdGhlIHhpbGlueAorc3RydWN0IG1lNDAwMF9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlOwkvKiAgUExYIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmFzZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZTsJLyogIEJhc2UgYWRkcmVzcyBvZiB0aGUgTUU0MDAwICovCisJdW5zaWduZWQgbG9uZyB0aW1lcl9yZWdiYXNlOwkvKiAgQmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBjaXJjdWl0ICovCisJdW5zaWduZWQgbG9uZyBwcm9ncmFtX3JlZ2Jhc2U7CS8qICBCYXNlIGFkZHJlc3MgdG8gc2V0IHRoZSBwcm9ncmFtIHBpbiBmb3IgdGhlIHhpbGlueCAqLwogCi0JdW5zaWduZWQgbG9uZyBwbHhfcmVnYmFzZV9zaXplOwkvLyBQTFggcmVnaXN0ZXIgc2V0IHNwYWNlCi0JdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZV9zaXplOwkvLyBNRTQwMDAgcmVnaXN0ZXIgc2V0IHNwYWNlCi0JdW5zaWduZWQgbG9uZyB0aW1lcl9yZWdiYXNlX3NpemU7CS8vIFRpbWVyIGNpcmN1aXQgcmVnaXN0ZXIgc2V0IHNwYWNlCi0JdW5zaWduZWQgbG9uZyBwcm9ncmFtX3JlZ2Jhc2Vfc2l6ZTsJLy8gU2l6ZSBvZiBwcm9ncmFtIGJhc2UgYWRkcmVzcyBvZiB0aGUgTUU0MDAwCisJdW5zaWduZWQgbG9uZyBwbHhfcmVnYmFzZV9zaXplOwkvKiAgUExYIHJlZ2lzdGVyIHNldCBzcGFjZSAqLworCXVuc2lnbmVkIGxvbmcgbWU0MDAwX3JlZ2Jhc2Vfc2l6ZTsJLyogIE1FNDAwMCByZWdpc3RlciBzZXQgc3BhY2UgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZ2Jhc2Vfc2l6ZTsJLyogIFRpbWVyIGNpcmN1aXQgcmVnaXN0ZXIgc2V0IHNwYWNlICovCisJdW5zaWduZWQgbG9uZyBwcm9ncmFtX3JlZ2Jhc2Vfc2l6ZTsJLyogIFNpemUgb2YgcHJvZ3JhbSBiYXNlIGFkZHJlc3Mgb2YgdGhlIE1FNDAwMCAqLwogCi0JdW5zaWduZWQgaW50IHNlcmlhbF9ubzsJLy8gU2VyaWFsIG51bWJlciBvZiB0aGUgYm9hcmQKLQl1bnNpZ25lZCBjaGFyIGh3X3JldmlzaW9uOwkvLyBIYXJkd2FyZSByZXZpc2lvbiBvZiB0aGUgYm9hcmQKLQl1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQ7CS8vIE1laWxoYXVzIHZlbmRvciBpZAotCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZDsJLy8gRGV2aWNlIGlkCisJdW5zaWduZWQgaW50IHNlcmlhbF9ubzsJLyogIFNlcmlhbCBudW1iZXIgb2YgdGhlIGJvYXJkICovCisJdW5zaWduZWQgY2hhciBod19yZXZpc2lvbjsJLyogIEhhcmR3YXJlIHJldmlzaW9uIG9mIHRoZSBib2FyZCAqLworCXVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZDsJLyogIE1laWxoYXVzIHZlbmRvciBpZCAqLworCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZDsJLyogIERldmljZSBpZCAqLwogCi0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcDsJLy8gR2VuZXJhbCBQQ0kgaW5mb3JtYXRpb24KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wOwkvKiAgR2VuZXJhbCBQQ0kgaW5mb3JtYXRpb24gKi8KIAotCXVuc2lnbmVkIGludCBpcnE7CS8vIElSUSBhc3NpZ25lZCBmcm9tIHRoZSBQQ0kgQklPUworCXVuc2lnbmVkIGludCBpcnE7CS8qICBJUlEgYXNzaWduZWQgZnJvbSB0aGUgUENJIEJJT1MgKi8KIAotCXN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCBhaV9jb250ZXh0OwkvLyBBbmFsb2cgaW5wdXQgIHNwZWNpZmljIGNvbnRleHQKLQlzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgYW9fY29udGV4dFs0XTsJLy8gVmVjdG9yIHdpdGggYW5hbG9nIG91dHB1dCBzcGVjaWZpYyBjb250ZXh0Ci0Jc3RydWN0IG1lNDAwMF9kaW9fY29udGV4dCBkaW9fY29udGV4dDsJLy8gRGlnaXRhbCBJL08gc3BlY2lmaWMgY29udGV4dAotCXN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgY250X2NvbnRleHQ7CS8vIENvdW50ZXIgc3BlY2lmaWMgY29udGV4dAotfSBtZTQwMDBfaW5mb190OworCXN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCBhaV9jb250ZXh0OwkvKiAgQW5hbG9nIGlucHV0ICBzcGVjaWZpYyBjb250ZXh0ICovCisJc3RydWN0IG1lNDAwMF9hb19jb250ZXh0IGFvX2NvbnRleHRbNF07CS8qICBWZWN0b3Igd2l0aCBhbmFsb2cgb3V0cHV0IHNwZWNpZmljIGNvbnRleHQgKi8KKwlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0IGRpb19jb250ZXh0OwkvKiAgRGlnaXRhbCBJL08gc3BlY2lmaWMgY29udGV4dCAqLworCXN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgY250X2NvbnRleHQ7CS8qICBDb3VudGVyIHNwZWNpZmljIGNvbnRleHQgKi8KK307CiAKLSNkZWZpbmUgaW5mbwkoKG1lNDAwMF9pbmZvX3QgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIGluZm8JKChzdHJ1Y3QgbWU0MDAwX2luZm8gKilkZXYtPnByaXZhdGUpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRGVmaW5lcyBmb3IgYW5hbG9nIGlucHV0CkBAIC00MTIsNyArNDEyLDcgQEAKICNkZWZpbmUgTUU0MDAwX0FJX0ZJRk9fQ09VTlQJCQkyMDQ4CiAKICNkZWZpbmUgTUU0MDAwX0FJX01JTl9USUNLUwkJCTY2Ci0jZGVmaW5lIE1FNDAwMF9BSV9NSU5fU0FNUExFX1RJTUUJCTIwMDAJLy8gTWluaW11bSBzYW1wbGUgdGltZSBbbnNdCisjZGVmaW5lIE1FNDAwMF9BSV9NSU5fU0FNUExFX1RJTUUJCTIwMDAJLyogIE1pbmltdW0gc2FtcGxlIHRpbWUgW25zXSAqLwogI2RlZmluZSBNRTQwMDBfQUlfQkFTRV9GUkVRVUVOQ1kJCSh1bnNpZ25lZCBpbnQpIDMzRTYKIAogLyogQ2hhbm5lbCBsaXN0IGRlZmluZXMgYW5kIG1hc2tzICovCkBAIC00MzYsMTEgKzQzNiwxMSBAQAogI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMSAgMHg0MAogI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMiAgMHg4MAogCi0jZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8wICAgICAweDAwCS8vIENoYW5nZSBzdGF0ZSBpZiB6ZXJvIGNyb3NzaW5nCi0jZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8xICAgICAweDAyCS8vIFJldHJpZ2dlcmFibGUgT25lLVNob3QKLSNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzIgICAgIDB4MDQJLy8gQXN5bW1ldHJpY2FsIGRpdmlkZXIKLSNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzMgICAgIDB4MDYJLy8gU3ltbWV0cmljYWwgZGl2aWRlcgotI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNCAgICAgMHgwOAkvLyBDb3VudGVyIHN0YXJ0IGJ5IHNvZnR3YXJlIHRyaWdnZXIKLSNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzUgICAgIDB4MEEJLy8gQ291bnRlciBzdGFydCBieSBoYXJkd2FyZSB0cmlnZ2VyCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8wICAgICAweDAwCS8qICBDaGFuZ2Ugc3RhdGUgaWYgemVybyBjcm9zc2luZyAqLworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMSAgICAgMHgwMgkvKiAgUmV0cmlnZ2VyYWJsZSBPbmUtU2hvdCAqLworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMiAgICAgMHgwNAkvKiAgQXN5bW1ldHJpY2FsIGRpdmlkZXIgKi8KKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzMgICAgIDB4MDYJLyogIFN5bW1ldHJpY2FsIGRpdmlkZXIgKi8KKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzQgICAgIDB4MDgJLyogIENvdW50ZXIgc3RhcnQgYnkgc29mdHdhcmUgdHJpZ2dlciAqLworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNSAgICAgMHgwQQkvKiAgQ291bnRlciBzdGFydCBieSBoYXJkd2FyZSB0cmlnZ2VyICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCmluZGV4IDZhY2NlYzIuLjBmMDIzZDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCkBAIC0xNDQsMTAgKzE0NCwxMCBAQAogI2RlZmluZSBNRV9DT1VOVEVSX1ZBTFVFX0IJCTB4MDAyMgkvKiBSIHwgLSAqLwogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IG1lX2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KTsKLXN0YXRpYyBpbnQgbWVfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG1lX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBtZV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lMjAwMF9haV9yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTIwMDBfYWlfcmFuZ2UgPSB7CiAJOCwKIAl7CiAJCUJJUF9SQU5HRSgxMCksCkBAIC0xNjEsNyArMTYxLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBtZTI2MDBfYWlfcmFuZ2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgbWUyNjAwX2FpX3JhbmdlID0gewogCTgsCiAJewogCQkJQklQX1JBTkdFKDEwKSwKQEAgLTE3NSw3ICsxNzUsNyBAQAogCQl9CiB9OwogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBtZTI2MDBfYW9fcmFuZ2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgbWUyNjAwX2FvX3JhbmdlID0gewogCTMsCiAJewogCQkJQklQX1JBTkdFKDEwKSwKQEAgLTIwMSwxMSArMjAxLDExIEBACiAJaW50IGFvX2NoYW5uZWxfbmJyOwkvKiBEQSBjb25maWcgKi8KIAlpbnQgYW9fcmVzb2x1dGlvbjsKIAlpbnQgYW9fcmVzb2x1dGlvbl9tYXNrOwotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX2xpc3Q7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX2xpc3Q7CiAJaW50IGFpX2NoYW5uZWxfbmJyOwkvKiBBRCBjb25maWcgKi8KIAlpbnQgYWlfcmVzb2x1dGlvbjsKIAlpbnQgYWlfcmVzb2x1dGlvbl9tYXNrOwotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlX2xpc3Q7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlX2xpc3Q7CiAJaW50IGRpb19jaGFubmVsX25icjsJLyogRElPIGNvbmZpZyAqLwogfTsKIApAQCAtMjQ2LDcgKzI0Niw4IEBACiAKICNkZWZpbmUgbWVfYm9hcmRfbmJyIChzaXplb2YobWVfYm9hcmRzKS9zaXplb2Yoc3RydWN0IG1lX2JvYXJkKSkKIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgbWVfZHJpdmVyID0geworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgbWVfZHJpdmVyID0gewogICAgICAgLmRyaXZlcl9uYW1lID0JTUVfRFJJVkVSX05BTUUsCiAgICAgICAubW9kdWxlID0JCVRISVNfTU9EVUxFLAogICAgICAgLmF0dGFjaCA9CQltZV9hdHRhY2gsCkBAIC0yOTAsOCArMjkxLDggQEAKICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotc3RhdGljIGludCBtZV9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBtZV9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgYml0czsKIAlpbnQgbWFzayA9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0zMjYsOCArMzI3LDggQEAKIH0KIAogLyogRGlnaXRhbCBpbnN0YW50IGlucHV0L291dHB1dHMgKi8KLXN0YXRpYyBpbnQgbWVfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBtZV9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXVuc2lnbmVkIGludCBtYXNrID0gZGF0YVswXTsKIAlzLT5zdGF0ZSAmPSB+bWFzazsKQEAgLTM2Miw4ICszNjMsOCBAQAogICovCiAKIC8qIEFuYWxvZyBpbnN0YW50IGlucHV0ICovCi1zdGF0aWMgaW50IG1lX2FpX2luc25fcmVhZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZSwKLQkJCSAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgbWVfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2UsCisJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKIAlpbnQgY2hhbiA9IENSX0NIQU4oKCZpbnNuLT5jaGFuc3BlYylbMF0pOwpAQCAtNDM2LDcgKzQzNyw3IEBACiAgKi8KIAogLyogQ2FuY2VsIGFuYWxvZyBpbnB1dCBhdXRvc2NhbiAqLwotc3RhdGljIGludCBtZV9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCBtZV9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAKQEAgLTQ0OCwxNCArNDQ5LDE0IEBACiB9CiAKIC8qIFRlc3QgYW5hbG9nIGlucHV0IGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgbWVfYWlfZG9fY21kX3Rlc3QoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICBjb21lZGlfY21kICpjbWQpCitzdGF0aWMgaW50IG1lX2FpX2RvX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCXJldHVybiAwOwogfQogCiAvKiBBbmFsb2cgaW5wdXQgY29tbWFuZCAqLwotc3RhdGljIGludCBtZV9haV9kb19jbWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2UpCitzdGF0aWMgaW50IG1lX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlKQogewogCXJldHVybiAwOwogfQpAQCAtNDY5LDggKzQ3MCw4IEBACiAgKi8KIAogLyogQW5hbG9nIGluc3RhbnQgb3V0cHV0ICovCi1zdGF0aWMgaW50IG1lX2FvX2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgbWVfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgY2hhbjsKIAlpbnQgcmFuZzsKQEAgLTUxOSw4ICs1MjAsOCBAQAogfQogCiAvKiBBbmFsb2cgb3V0cHV0IHJlYWRiYWNrICovCi1zdGF0aWMgaW50IG1lX2FvX2luc25fcmVhZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IG1lX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBpOwogCkBAIC01NDEsNyArNTQyLDcgQEAKICAqLwogCiAvKiBYaWxpbnggZmlybXdhcmUgZG93bmxvYWQgZm9yIGNhcmQ6IE1FLTI2MDBpICovCi1zdGF0aWMgaW50IG1lMjYwMF94aWxpbnhfZG93bmxvYWQoY29tZWRpX2RldmljZSAqZGV2LAorc3RhdGljIGludCBtZTI2MDBfeGlsaW54X2Rvd25sb2FkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkJICB1bnNpZ25lZCBjaGFyICptZTI2MDBfZmlybXdhcmUsCiAJCQkJICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewpAQCAtNjA5LDcgKzYxMCw3IEBACiB9CiAKIC8qIFJlc2V0IGRldmljZSAqLwotc3RhdGljIGludCBtZV9yZXNldChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1lX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJLyogUmVzZXQgYm9hcmQgKi8KIAl3cml0ZXcoMHgwMCwgZGV2X3ByaXZhdGUtPm1lX3JlZ2Jhc2UgKyBNRV9DT05UUk9MXzEpOwpAQCAtNjMxLDEwICs2MzIsMTAgQEAKICAqIC0gUmVnaXN0ZXIgUENJIGRldmljZQogICogLSBEZWNsYXJlIGRldmljZSBkcml2ZXIgY2FwYWJpbGl0eQogICovCi1zdGF0aWMgaW50IG1lX2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCBtZV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOwogCXN0cnVjdCBtZV9ib2FyZCAqYm9hcmQ7CiAJcmVzb3VyY2Vfc2l6ZV90IHBseF9yZWdiYXNlX3RtcDsKIAl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlX3NpemVfdG1wOwpAQCAtODI1LDcgKzgyNiw3IEBACiB9CiAKIC8qIERldGFjaCAqLwotc3RhdGljIGludCBtZV9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIGludCBtZV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpZiAoZGV2X3ByaXZhdGUpIHsKIAkJaWYgKGRldl9wcml2YXRlLT5tZV9yZWdiYXNlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYwppbmRleCA5Y2M1Mjc0Li5hZTkwMTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogKi8KIAotLy8jZGVmaW5lIFVTRV9LTUFMTE9DCisvKiAjZGVmaW5lIFVTRV9LTUFMTE9DICovCiAKICNpbmNsdWRlICJtaXRlLmgiCiAKQEAgLTYzLDcgKzYzLDcgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGVfZGV2aWNlcyA9IE5VTEw7CitzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGVfZGV2aWNlczsKIAogI2RlZmluZSBUT1BfT0ZfUEFHRSh4KSAoKHgpfCh+KFBBR0VfTUFTSykpKQogCkBAIC0xMDMsNyArMTAzLDcgQEAKIAlwcmludGsoIm1pdGU6IG51bSBjaGFubmVscyA9ICVpLCB3cml0ZSBwb3N0IGZpZm8gZGVwdGggPSAlaSwgd2lucyA9ICVpLCBpb3dpbnMgPSAlaVxuIiwgbWl0ZV9jc2lncl9kbWFjKGNzaWdyX2JpdHMpLCBtaXRlX2NzaWdyX3dwZGVwKGNzaWdyX2JpdHMpLCBtaXRlX2NzaWdyX3dpbnMoY3NpZ3JfYml0cyksIG1pdGVfY3NpZ3JfaW93aW5zKGNzaWdyX2JpdHMpKTsKIH0KIAotdW5zaWduZWQgbWl0ZV9maWZvX3NpemUoc3RydWN0IG1pdGVfc3RydWN0ICogbWl0ZSwgdW5zaWduZWQgY2hhbm5lbCkKK3Vuc2lnbmVkIG1pdGVfZmlmb19zaXplKHN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSwgdW5zaWduZWQgY2hhbm5lbCkKIHsKIAl1bnNpZ25lZCBmY3JfYml0cyA9IHJlYWRsKG1pdGUtPm1pdGVfaW9fYWRkciArCiAJCU1JVEVfRkNSKGNoYW5uZWwpKTsKQEAgLTEzOSw3ICsxMzksNyBAQAogCWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQobWl0ZS0+cGNpZGV2LCAxKTsKIAltaXRlLT5kYXFfcGh5c19hZGRyID0gYWRkcjsKIAlsZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKG1pdGUtPnBjaWRldiwgMSk7Ci0JLy8gSW4gY2FzZSBvZiBhIDY2MHggYm9hcmQsIERBUSBzaXplIGlzIDhrIGluc3RlYWQgb2YgNGsgKHNlZSBhcyBzaG93biBieSBsc3BjaSBvdXRwdXQpCisJLyogIEluIGNhc2Ugb2YgYSA2NjB4IGJvYXJkLCBEQVEgc2l6ZSBpcyA4ayBpbnN0ZWFkIG9mIDRrIChzZWUgYXMgc2hvd24gYnkgbHNwY2kgb3V0cHV0KSAqLwogCW1pdGUtPmRhcV9pb19hZGRyID0gaW9yZW1hcChtaXRlLT5kYXFfcGh5c19hZGRyLCBsZW5ndGgpOwogCWlmICghbWl0ZS0+ZGFxX2lvX2FkZHIpIHsKIAkJcHJpbnRrKCJmYWlsZWQgdG8gcmVtYXAgZGFxIGlvIG1lbW9yeSBhZGRyZXNzXG4iKTsKQEAgLTIxMiw3ICsyMTIsNyBAQAogCiB2b2lkIG1pdGVfdW5zZXR1cChzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUpCiB7Ci0JLy91bnNpZ25lZCBsb25nIG9mZnNldCwgc3RhcnQsIGxlbmd0aDsKKwkvKiB1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RhcnQsIGxlbmd0aDsgKi8KIAogCWlmICghbWl0ZSkKIAkJcmV0dXJuOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWl0ZV9jaGFubmVsICpjaGFubmVsID0gTlVMTDsKIAotCS8vIHNwaW4gbG9jayBzbyBtaXRlX3JlbGVhc2VfY2hhbm5lbCBjYW4gYmUgY2FsbGVkIHNhZmVseSBmcm9tIGludGVycnVwdHMKKwkvKiAgc3BpbiBsb2NrIHNvIG1pdGVfcmVsZWFzZV9jaGFubmVsIGNhbiBiZSBjYWxsZWQgc2FmZWx5IGZyb20gaW50ZXJydXB0cyAqLwogCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmbWl0ZS0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IG1pbl9jaGFubmVsOyBpIDw9IG1heF9jaGFubmVsOyArK2kpIHsKIAkJaWYgKG1pdGUtPmNoYW5uZWxfYWxsb2NhdGVkW2ldID09IDApIHsKQEAgLTI3Niw3ICsyNzYsNyBAQAogCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSA9IG1pdGVfY2hhbi0+bWl0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLy8gc3BpbiBsb2NrIHRvIHByZXZlbnQgcmFjZXMgd2l0aCBtaXRlX3JlcXVlc3RfY2hhbm5lbAorCS8qICBzcGluIGxvY2sgdG8gcHJldmVudCByYWNlcyB3aXRoIG1pdGVfcmVxdWVzdF9jaGFubmVsICovCiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZtaXRlLT5sb2NrLCBmbGFncyk7CiAJaWYgKG1pdGUtPmNoYW5uZWxfYWxsb2NhdGVkW21pdGVfY2hhbi0+Y2hhbm5lbF0pIHsKIAkJbWl0ZV9kbWFfZGlzYXJtKG1pdGVfY2hhbik7CkBAIC0zMTIsMTIgKzMxMiwxMiBAQAogCXdyaXRlbChjaG9yLCBtaXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0NIT1IobWl0ZV9jaGFuLT5jaGFubmVsKSk7CiAJbW1pb3diKCk7CiAJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1pdGUtPmxvY2ssIGZsYWdzKTsKLS8vICAgICAgbWl0ZV9kbWFfdGNyKG1pdGUsIGNoYW5uZWwpOworLyogICAgICAgbWl0ZV9kbWFfdGNyKG1pdGUsIGNoYW5uZWwpOyAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWludCBtaXRlX2J1Zl9jaGFuZ2Uoc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqcmluZywgY29tZWRpX2FzeW5jICogYXN5bmMpCitpbnQgbWl0ZV9idWZfY2hhbmdlKHN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKnJpbmcsIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYykKIHsKIAl1bnNpZ25lZCBpbnQgbl9saW5rczsKIAlpbnQgaTsKQEAgLTMzMSw5ICszMzEsOSBAQAogCXJpbmctPmRlc2NyaXB0b3JzX2RtYV9hZGRyID0gMDsKIAlyaW5nLT5uX2xpbmtzID0gMDsKIAotCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmc3ogPT0gMCkgeworCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmc3ogPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJbl9saW5rcyA9IGFzeW5jLT5wcmVhbGxvY19idWZzeiA+PiBQQUdFX1NISUZUOwogCiAJTURQUklOVEsoInJpbmctPmh3X2Rldj0lcCwgbl9saW5rcz0weCUwNHhcbiIsIHJpbmctPmh3X2Rldiwgbl9saW5rcyk7CkBAIC0zOTUsOSArMzk1LDkgQEAKIAkJICAgb24gZS1zZXJpZXMgYm9hcmRzLiAgKi8KIAkJY2hjciB8PSBDSENSX0JZVEVfU1dBUF9ERVZJQ0UgfCBDSENSX0JZVEVfU1dBUF9NRU1PUlk7CiAJfQotCWlmIChtaXRlX2NoYW4tPmRpciA9PSBDT01FRElfSU5QVVQpIHsKKwlpZiAobWl0ZV9jaGFuLT5kaXIgPT0gQ09NRURJX0lOUFVUKQogCQljaGNyIHw9IENIQ1JfREVWX1RPX01FTTsKLQl9CisKIAl3cml0ZWwoY2hjciwgbWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9DSENSKG1pdGVfY2hhbi0+Y2hhbm5lbCkpOwogCiAJLyogdG8vZnJvbSBtZW1vcnkgKi8KQEAgLTQ1OSwxNSArNDU5LDE1IEBACiAJcmV0dXJuIHJlYWRsKG1pdGUtPm1pdGVfaW9fYWRkciArIE1JVEVfREFSKG1pdGVfY2hhbi0+Y2hhbm5lbCkpOwogfQogCi11MzIgbWl0ZV9ieXRlc19pbl90cmFuc2l0KHN0cnVjdCBtaXRlX2NoYW5uZWwgKiBtaXRlX2NoYW4pCit1MzIgbWl0ZV9ieXRlc19pbl90cmFuc2l0KHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbikKIHsKIAlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUgPSBtaXRlX2NoYW4tPm1pdGU7CiAJcmV0dXJuIHJlYWRsKG1pdGUtPm1pdGVfaW9fYWRkciArCiAJCU1JVEVfRkNSKG1pdGVfY2hhbi0+Y2hhbm5lbCkpICYgMHgwMDAwMDBGRjsKIH0KIAotLy8gcmV0dXJucyBsb3dlciBib3VuZCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGZyb20gZGV2aWNlIHRvIG1lbW9yeQotdTMyIG1pdGVfYnl0ZXNfd3JpdHRlbl90b19tZW1vcnlfbGIoc3RydWN0IG1pdGVfY2hhbm5lbCAqIG1pdGVfY2hhbikKKy8qICByZXR1cm5zIGxvd2VyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgZnJvbSBkZXZpY2UgdG8gbWVtb3J5ICovCit1MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pCiB7CiAJdTMyIGRldmljZV9ieXRlX2NvdW50OwogCkBAIC00NzUsOCArNDc1LDggQEAKIAlyZXR1cm4gZGV2aWNlX2J5dGVfY291bnQgLSBtaXRlX2J5dGVzX2luX3RyYW5zaXQobWl0ZV9jaGFuKTsKIH0KIAotLy8gcmV0dXJucyB1cHBlciBib3VuZCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGZyb20gZGV2aWNlIHRvIG1lbW9yeQotdTMyIG1pdGVfYnl0ZXNfd3JpdHRlbl90b19tZW1vcnlfdWIoc3RydWN0IG1pdGVfY2hhbm5lbCAqIG1pdGVfY2hhbikKKy8qICByZXR1cm5zIHVwcGVyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgZnJvbSBkZXZpY2UgdG8gbWVtb3J5ICovCit1MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV91YihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pCiB7CiAJdTMyIGluX3RyYW5zaXRfY291bnQ7CiAKQEAgLTQ4NCw4ICs0ODQsOCBAQAogCXJldHVybiBtaXRlX2RldmljZV9ieXRlc190cmFuc2ZlcnJlZChtaXRlX2NoYW4pIC0gaW5fdHJhbnNpdF9jb3VudDsKIH0KIAotLy8gcmV0dXJucyBsb3dlciBib3VuZCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBtZW1vcnkgZm9yIHRyYW5zZmVyIHRvIGRldmljZQotdTMyIG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICogbWl0ZV9jaGFuKQorLyogIHJldHVybnMgbG93ZXIgYm91bmQgZm9yIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gbWVtb3J5IGZvciB0cmFuc2ZlciB0byBkZXZpY2UgKi8KK3UzMiBtaXRlX2J5dGVzX3JlYWRfZnJvbV9tZW1vcnlfbGIoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKQogewogCXUzMiBkZXZpY2VfYnl0ZV9jb3VudDsKIApAQCAtNDkzLDggKzQ5Myw4IEBACiAJcmV0dXJuIGRldmljZV9ieXRlX2NvdW50ICsgbWl0ZV9ieXRlc19pbl90cmFuc2l0KG1pdGVfY2hhbik7CiB9CiAKLS8vIHJldHVybnMgdXBwZXIgYm91bmQgZm9yIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gbWVtb3J5IGZvciB0cmFuc2ZlciB0byBkZXZpY2UKLXUzMiBtaXRlX2J5dGVzX3JlYWRfZnJvbV9tZW1vcnlfdWIoc3RydWN0IG1pdGVfY2hhbm5lbCAqIG1pdGVfY2hhbikKKy8qICByZXR1cm5zIHVwcGVyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIG1lbW9yeSBmb3IgdHJhbnNmZXIgdG8gZGV2aWNlICovCit1MzIgbWl0ZV9ieXRlc19yZWFkX2Zyb21fbWVtb3J5X3ViKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbikKIHsKIAl1MzIgaW5fdHJhbnNpdF9jb3VudDsKIApAQCAtNTI2LDE0ICs1MjYsMTQgQEAKIAl3cml0ZWwoY2hvciwgbWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9DSE9SKG1pdGVfY2hhbi0+Y2hhbm5lbCkpOwogfQogCi1pbnQgbWl0ZV9zeW5jX2lucHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIGNvbWVkaV9hc3luYyAqIGFzeW5jKQoraW50IG1pdGVfc3luY19pbnB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLCBzdHJ1Y3QgY29tZWRpX2FzeW5jICogYXN5bmMpCiB7CiAJaW50IGNvdW50OwogCXVuc2lnbmVkIGludCBuYnl0ZXMsIG9sZF9hbGxvY19jb3VudDsKIAljb25zdCB1bnNpZ25lZCBieXRlc19wZXJfc2NhbiA9IGNmY19ieXRlc19wZXJfc2Nhbihhc3luYy0+c3ViZGV2aWNlKTsKIAogCW9sZF9hbGxvY19jb3VudCA9IGFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQ7Ci0JLy8gd3JpdGUgYWxsb2MgYXMgbXVjaCBhcyB3ZSBjYW4KKwkvKiAgd3JpdGUgYWxsb2MgYXMgbXVjaCBhcyB3ZSBjYW4gKi8KIAljb21lZGlfYnVmX3dyaXRlX2FsbG9jKGFzeW5jLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOwogCiAJbmJ5dGVzID0gbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV9sYihtaXRlX2NoYW4pOwpAQCAtNTQ3LDkgKzU0Nyw5IEBACiAJY291bnQgPSBuYnl0ZXMgLSBhc3luYy0+YnVmX3dyaXRlX2NvdW50OwogCS8qIGl0J3MgcG9zc2libGUgY291bnQgd2lsbCBiZSBuZWdhdGl2ZSBkdWUgdG8KIAkgKiBjb25zZXJ2YXRpdmUgdmFsdWUgcmV0dXJuZWQgYnkgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV9sYiAqLwotCWlmIChjb3VudCA8PSAwKSB7CisJaWYgKGNvdW50IDw9IDApCiAJCXJldHVybiAwOwotCX0KKwogCWNvbWVkaV9idWZfd3JpdGVfZnJlZShhc3luYywgY291bnQpOwogCiAJYXN5bmMtPnNjYW5fcHJvZ3Jlc3MgKz0gY291bnQ7CkBAIC01NjEsNyArNTYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1pdGVfc3luY19vdXRwdXRfZG1hKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiwgY29tZWRpX2FzeW5jICogYXN5bmMpCitpbnQgbWl0ZV9zeW5jX291dHB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLCBzdHJ1Y3QgY29tZWRpX2FzeW5jICogYXN5bmMpCiB7CiAJaW50IGNvdW50OwogCXUzMiBuYnl0ZXNfdWIsIG5ieXRlc19sYjsKQEAgLTU3MCw3ICs1NzAsNyBAQAogCQlhc3luYy0+Y21kLnN0b3BfYXJnICogY2ZjX2J5dGVzX3Blcl9zY2FuKGFzeW5jLT5zdWJkZXZpY2UpOwogCiAJb2xkX2FsbG9jX2NvdW50ID0gYXN5bmMtPmJ1Zl9yZWFkX2FsbG9jX2NvdW50OwotCS8vIHJlYWQgYWxsb2MgYXMgbXVjaCBhcyB3ZSBjYW4KKwkvKiAgcmVhZCBhbGxvYyBhcyBtdWNoIGFzIHdlIGNhbiAqLwogCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhhc3luYywgYXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKIAluYnl0ZXNfbGIgPSBtaXRlX2J5dGVzX3JlYWRfZnJvbV9tZW1vcnlfbGIobWl0ZV9jaGFuKTsKIAlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCkBAIC01ODYsOSArNTg2LDkgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAljb3VudCA9IG5ieXRlc19sYiAtIGFzeW5jLT5idWZfcmVhZF9jb3VudDsKLQlpZiAoY291bnQgPD0gMCkgeworCWlmIChjb3VudCA8PSAwKQogCQlyZXR1cm4gMDsKLQl9CisKIAlpZiAoY291bnQpIHsKIAkJY29tZWRpX2J1Zl9yZWFkX2ZyZWUoYXN5bmMsIGNvdW50KTsKIAkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CkBAIC03NTMsOSArNzUzLDggQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDMxOyBpID49IDA7IGktLSkgewotCQlpZiAoYml0cyAmICgxIDw8IGkpKSB7CisJCWlmIChiaXRzICYgKDEgPDwgaSkpCiAJCQlwcmludGsoIiAlcyIsIGJpdF9zdHJbaV0pOwotCQl9CiAJfQogCXByaW50aygiXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5oCmluZGV4IGI4NGVhZmEuLmNkYWY4YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuaApAQCAtMjksMTMgKzI5LDEzIEBACiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OQVRJTlNUCQkweDEwOTMKIAotLy8gI2RlZmluZSBERUJVR19NSVRFCisvKiAgI2RlZmluZSBERUJVR19NSVRFICovCiAjZGVmaW5lIFBDSU1JT19DT01QQVQKIAogI2lmZGVmIERFQlVHX01JVEUKLSNkZWZpbmUgTURQUklOVEsoZm9ybWF0LGFyZ3MuLi4pCXByaW50ayhmb3JtYXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgTURQUklOVEsoZm9ybWF0LCBhcmdzLi4uKQlwcmludGsoZm9ybWF0ICwgIyMgYXJncykKICNlbHNlCi0jZGVmaW5lIE1EUFJJTlRLKGZvcm1hdCxhcmdzLi4uKQorI2RlZmluZSBNRFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2RlZmluZSBNQVhfTUlURV9ETUFfQ0hBTk5FTFMgOApAQCAtMTQyLDggKzE0Miw4IEBACiB1bnNpZ25lZCBtaXRlX2RtYV90Y3Ioc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKIHZvaWQgbWl0ZV9kbWFfYXJtKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbik7CiB2b2lkIG1pdGVfZG1hX2Rpc2FybShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwotaW50IG1pdGVfc3luY19pbnB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLCBjb21lZGlfYXN5bmMgKiBhc3luYyk7Ci1pbnQgbWl0ZV9zeW5jX291dHB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLCBjb21lZGlfYXN5bmMgKiBhc3luYyk7CitpbnQgbWl0ZV9zeW5jX2lucHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYyk7CitpbnQgbWl0ZV9zeW5jX291dHB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLCBzdHJ1Y3QgY29tZWRpX2FzeW5jICogYXN5bmMpOwogdTMyIG1pdGVfYnl0ZXNfd3JpdHRlbl90b19tZW1vcnlfbGIoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKIHUzMiBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X3ViKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbik7CiB1MzIgbWl0ZV9ieXRlc19yZWFkX2Zyb21fbWVtb3J5X2xiKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbik7CkBAIC0xNTMsNyArMTUzLDcgQEAKIGludCBtaXRlX2RvbmUoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKIAogI2lmIDAKLXVuc2lnbmVkIGxvbmcgbWl0ZV9sbF9mcm9tX2t2bWVtKHN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSwgY29tZWRpX2FzeW5jICogYXN5bmMsCit1bnNpZ25lZCBsb25nIG1pdGVfbGxfZnJvbV9rdm1lbShzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUsIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYywKIAlpbnQgbGVuKTsKIHZvaWQgbWl0ZV9zZXRyZWdzKHN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSwgdW5zaWduZWQgbG9uZyBsbF9zdGFydCwgaW50IGNoYW4sCiAJaW50IGRpcik7CkBAIC0xNjIsNyArMTYyLDcgQEAKIHZvaWQgbWl0ZV9wcmVwX2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sCiAJdW5zaWduZWQgaW50IG51bV9kZXZpY2VfYml0cywgdW5zaWduZWQgaW50IG51bV9tZW1vcnlfYml0cyk7CiBpbnQgbWl0ZV9idWZfY2hhbmdlKHN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKnJpbmcsCi0JY29tZWRpX2FzeW5jICogYXN5bmMpOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKTsKIAogI2lmZGVmIERFQlVHX01JVEUKIHZvaWQgbWl0ZV9wcmludF9jaHNyKHVuc2lnbmVkIGludCBjaHNyKTsKQEAgLTE3OSw4MyArMTc5LDgzIEBACiAJICAgd3JpdHRlbiBhbmQgcmVhZCBiYWNrLiAgVGhlIGJpdHMgMHgxZiBhbHdheXMgcmVhZCBhcyAxLgogCSAgIFRoZSByZXN0IGFsd2F5cyByZWFkIGFzIHplcm8uICovCiAJTUlURV9VTktOT1dOX0RNQV9CVVJTVF9SRUcgPSAweDI4LAotCU1JVEVfSU9EV0JTUiA9IDB4YzAsCS8vSU8gRGV2aWNlIFdpbmRvdyBCYXNlIFNpemUgUmVnaXN0ZXIKLQlNSVRFX0lPRFdCU1JfMSA9IDB4YzQsCS8vIElPIERldmljZSBXaW5kb3cgQmFzZSBTaXplIFJlZ2lzdGVyIDEKKwlNSVRFX0lPRFdCU1IgPSAweGMwLAkvKiBJTyBEZXZpY2UgV2luZG93IEJhc2UgU2l6ZSBSZWdpc3RlciAqLworCU1JVEVfSU9EV0JTUl8xID0gMHhjNCwJLyogIElPIERldmljZSBXaW5kb3cgQmFzZSBTaXplIFJlZ2lzdGVyIDEgKi8KIAlNSVRFX0lPRFdDUl8xID0gMHhmNCwKIAlNSVRFX1BDSV9DT05GSUdfT0ZGU0VUID0gMHgzMDAsCi0JTUlURV9DU0lHUiA9IDB4NDYwCS8vY2hpcCBzaWduYXR1cmUKKwlNSVRFX0NTSUdSID0gMHg0NjAJLyogY2hpcCBzaWduYXR1cmUgKi8KIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0NIT1IoaW50IGNoYW5uZWwpCS8vIGNoYW5uZWwgb3BlcmF0aW9uCitzdGF0aWMgaW5saW5lIGludCBNSVRFX0NIT1IoaW50IGNoYW5uZWwpCS8qICBjaGFubmVsIG9wZXJhdGlvbiAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MDsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0NIQ1IoaW50IGNoYW5uZWwpCS8vIGNoYW5uZWwgY29udHJvbAorc3RhdGljIGlubGluZSBpbnQgTUlURV9DSENSKGludCBjaGFubmVsKQkvKiAgY2hhbm5lbCBjb250cm9sICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHg0OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfVENSKGludCBjaGFubmVsKQkvLyB0cmFuc2ZlciBjb3VudAorc3RhdGljIGlubGluZSBpbnQgTUlURV9UQ1IoaW50IGNoYW5uZWwpCS8qICB0cmFuc2ZlciBjb3VudCAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4ODsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX01DUihpbnQgY2hhbm5lbCkJLy8gbWVtb3J5IGNvbmZpZ3VyYXRpb24KK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfTUNSKGludCBjaGFubmVsKQkvKiAgbWVtb3J5IGNvbmZpZ3VyYXRpb24gKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweGM7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9NQVIoaW50IGNoYW5uZWwpCS8vIG1lbW9yeSBhZGRyZXNzCitzdGF0aWMgaW5saW5lIGludCBNSVRFX01BUihpbnQgY2hhbm5lbCkJLyogIG1lbW9yeSBhZGRyZXNzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgxMDsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0RDUihpbnQgY2hhbm5lbCkJLy8gZGV2aWNlIGNvbmZpZ3VyYXRpb24KK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfRENSKGludCBjaGFubmVsKQkvKiAgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDE0OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfREFSKGludCBjaGFubmVsKQkvLyBkZXZpY2UgYWRkcmVzcworc3RhdGljIGlubGluZSBpbnQgTUlURV9EQVIoaW50IGNoYW5uZWwpCS8qICBkZXZpY2UgYWRkcmVzcyAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MTg7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9MS0NSKGludCBjaGFubmVsKQkvLyBsaW5rIGNvbmZpZ3VyYXRpb24KK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfTEtDUihpbnQgY2hhbm5lbCkJLyogIGxpbmsgY29uZmlndXJhdGlvbiAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MWM7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9MS0FSKGludCBjaGFubmVsKQkvLyBsaW5rIGFkZHJlc3MKK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfTEtBUihpbnQgY2hhbm5lbCkJLyogIGxpbmsgYWRkcmVzcyAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MjA7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9MTEtBUihpbnQgY2hhbm5lbCkJLy8gc2VlIG1pdGUgc2VjdGlvbiBvZiB0bnQ1MDAyIG1hbnVhbAorc3RhdGljIGlubGluZSBpbnQgTUlURV9MTEtBUihpbnQgY2hhbm5lbCkJLyogIHNlZSBtaXRlIHNlY3Rpb24gb2YgdG50NTAwMiBtYW51YWwgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDI0OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfQkFSKGludCBjaGFubmVsKQkvLyBiYXNlIGFkZHJlc3MKK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfQkFSKGludCBjaGFubmVsKQkvKiAgYmFzZSBhZGRyZXNzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgyODsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0JDUihpbnQgY2hhbm5lbCkJLy8gYmFzZSBjb3VudAorc3RhdGljIGlubGluZSBpbnQgTUlURV9CQ1IoaW50IGNoYW5uZWwpCS8qICBiYXNlIGNvdW50ICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgyYzsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX1NBUihpbnQgY2hhbm5lbCkJLy8gPyBhZGRyZXNzCitzdGF0aWMgaW5saW5lIGludCBNSVRFX1NBUihpbnQgY2hhbm5lbCkJLyogID8gYWRkcmVzcyAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MzA7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9XU0NSKGludCBjaGFubmVsKQkvLyA/CitzdGF0aWMgaW5saW5lIGludCBNSVRFX1dTQ1IoaW50IGNoYW5uZWwpCS8qICA/ICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgzNDsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX1dTRVIoaW50IGNoYW5uZWwpCS8vID8KK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfV1NFUihpbnQgY2hhbm5lbCkJLyogID8gKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDM4OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfQ0hTUihpbnQgY2hhbm5lbCkJLy8gY2hhbm5lbCBzdGF0dXMKK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfQ0hTUihpbnQgY2hhbm5lbCkJLyogIGNoYW5uZWwgc3RhdHVzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgzYzsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0ZDUihpbnQgY2hhbm5lbCkJLy8gZmlmbyBjb3VudAorc3RhdGljIGlubGluZSBpbnQgTUlURV9GQ1IoaW50IGNoYW5uZWwpCS8qICBmaWZvIGNvdW50ICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHg0MDsKIH07CiAKIGVudW0gTUlURV9JT0RXQlNSX2JpdHMgewotCVdFTkFCID0gMHg4MCwJCS8vIHdpbmRvdyBlbmFibGUKKwlXRU5BQiA9IDB4ODAsCQkvKiAgd2luZG93IGVuYWJsZSAqLwogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBNSVRFX0lPRFdCU1JfMV9XU0laRV9iaXRzKHVuc2lnbmVkIHNpemUpCkBAIC0yNzYsMjMgKzI3NiwyMyBAQAogCXJldHVybiBjc2lncl9iaXRzICYgMHhmOwogfTsKIHN0YXRpYyBpbmxpbmUgaW50IG1pdGVfY3NpZ3JfdHlwZSh1MzIgY3NpZ3JfYml0cykKLXsJCQkJLy8gb3JpZ2luYWwgbWl0ZSA9IDAsIG1pbmltaXRlID0gMQorewkJCQkvKiAgb3JpZ2luYWwgbWl0ZSA9IDAsIG1pbmltaXRlID0gMSAqLwogCXJldHVybiAoY3NpZ3JfYml0cyA+PiA0KSAmIDB4ZjsKIH07CiBzdGF0aWMgaW5saW5lIGludCBtaXRlX2NzaWdyX21tb2RlKHUzMiBjc2lncl9iaXRzKQotewkJCQkvLyBtaXRlIG1vZGUsIG1pbmltaXRlID0gMQorewkJCQkvKiAgbWl0ZSBtb2RlLCBtaW5pbWl0ZSA9IDEgKi8KIAlyZXR1cm4gKGNzaWdyX2JpdHMgPj4gOCkgJiAweDM7CiB9Owogc3RhdGljIGlubGluZSBpbnQgbWl0ZV9jc2lncl9pbW9kZSh1MzIgY3NpZ3JfYml0cykKLXsJCQkJLy8gY3B1IHBvcnQgaW50ZXJmYWNlIG1vZGUsIHBjaSA9IDB4MworewkJCQkvKiAgY3B1IHBvcnQgaW50ZXJmYWNlIG1vZGUsIHBjaSA9IDB4MyAqLwogCXJldHVybiAoY3NpZ3JfYml0cyA+PiAxMikgJiAweDM7CiB9Owogc3RhdGljIGlubGluZSBpbnQgbWl0ZV9jc2lncl9kbWFjKHUzMiBjc2lncl9iaXRzKQotewkJCQkvLyBudW1iZXIgb2YgZG1hIGNoYW5uZWxzCit7CQkJCS8qICBudW1iZXIgb2YgZG1hIGNoYW5uZWxzICovCiAJcmV0dXJuIChjc2lncl9iaXRzID4+IDE2KSAmIDB4ZjsKIH07CiBzdGF0aWMgaW5saW5lIGludCBtaXRlX2NzaWdyX3dwZGVwKHUzMiBjc2lncl9iaXRzKQotewkJCQkvLyB3cml0ZSBwb3N0IGZpZm8gZGVwdGgKK3sJCQkJLyogIHdyaXRlIHBvc3QgZmlmbyBkZXB0aCAqLwogCXVuc2lnbmVkIGludCB3cGRlcF9iaXRzID0gKGNzaWdyX2JpdHMgPj4gMjApICYgMHg3OwogCWlmICh3cGRlcF9iaXRzID09IDApCiAJCXJldHVybiAwOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJcmV0dXJuIChjc2lncl9iaXRzID4+IDI0KSAmIDB4MWY7CiB9Owogc3RhdGljIGlubGluZSBpbnQgbWl0ZV9jc2lncl9pb3dpbnModTMyIGNzaWdyX2JpdHMpCi17CQkJCS8vIG51bWJlciBvZiBpbyB3aW5kb3dzCit7CQkJCS8qICBudW1iZXIgb2YgaW8gd2luZG93cyAqLwogCXJldHVybiAoY3NpZ3JfYml0cyA+PiAyOSkgJiAweDc7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjNjI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjNjI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1MTYwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYwpAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9tcGM2MjQuYworICAgIEhhcmR3YXJlIGRyaXZlciBmb3IgYSBNaWNyby9zeXMgaW5jLiBNUEMtNjI0IFBDLzEwNCBib2FyZAorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogbXBjNjI0CitEZXNjcmlwdGlvbjogTWljcm8vc3lzIE1QQy02MjQgUEMvMTA0IGJvYXJkCitEZXZpY2VzOiBbTWljcm8vc3lzXSBNUEMtNjI0IChtcGM2MjQpCitBdXRob3I6IFN0YW5pc2xhdyBSYWN6eW5za2kgPHNyYWN6eW5za2lAb3AucGw+CitVcGRhdGVkOiBUaHUsIDE1IFNlcCAyMDA1IDEyOjAxOjE4ICswMjAwCitTdGF0dXM6IHdvcmtpbmcKKworICAgIFRoZSBNaWNyby9zeXMgTVBDLTYyNCBib2FyZCBpcyBiYXNlZCBvbiB0aGUgTFRDMjQ0MCAyNC1iaXQgc2lnbWEtZGVsdGEKKyAgICBBREMgY2hpcC4KKworICAgIFN1YmRldmljZXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXI6CisgICAgLSBBbmFsb2cgSW46ICAgc3VwcG9ydGVkCisgICAgLSBEaWdpdGFsIEkvTzogbm90IHN1cHBvcnRlZAorICAgIC0gTEVEczogICAgICAgIG5vdCBzdXBwb3J0ZWQKKyAgICAtIEVFUFJPTTogICAgICBub3Qgc3VwcG9ydGVkCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSS9PIGJhc2UgYWRkcmVzcworICBbMV0gLSBjb252ZXJ0aW9uIHJhdGUKKyAgICAgICAgICAgIENvbnZlcnRpb24gcmF0ZSAgUk1TIG5vaXNlICBFZmZlY3RpdmUgTnVtYmVyIE9mIEJpdHMKKyAgICAgICAgIDAgICAgICAzLjUya0h6ICAgICAgICAyM3VWICAgICAgICAgICAgICAgIDE3CisgICAgICAgICAxICAgICAgMS43NmtIeiAgICAgICAzLjV1ViAgICAgICAgICAgICAgICAyMAorICAgICAgICAgMiAgICAgICA4ODBIeiAgICAgICAgIDJ1ViAgICAgICAgICAgICAgICAyMS4zCisgICAgICAgICAzICAgICAgIDQ0MEh6ICAgICAgICAxLjR1ViAgICAgICAgICAgICAgIDIxLjgKKyAgICAgICAgIDQgICAgICAgMjIwSHogICAgICAgICAxdVYgICAgICAgICAgICAgICAgMjIuNAorICAgICAgICAgNSAgICAgICAxMTBIeiAgICAgICAgNzUwdVYgICAgICAgICAgICAgICAyMi45CisgICAgICAgICA2ICAgICAgIDU1SHogICAgICAgICA1MTBuViAgICAgICAgICAgICAgIDIzLjQKKyAgICAgICAgIDcgICAgICAyNy41SHogICAgICAgIDM3NW5WICAgICAgICAgICAgICAgIDI0CisgICAgICAgICA4ICAgICAgMTMuNzVIeiAgICAgICAyNTBuViAgICAgICAgICAgICAgIDI0LjQKKyAgICAgICAgIDkgICAgICA2Ljg3NUh6ICAgICAgIDIwMG5WICAgICAgICAgICAgICAgMjQuNgorICAgWzJdIC0gdm9sdGFnZSByYW5nZQorICAgICAgICAgMCAgICAgIC0xLjAxViAuLiArMS4wMVYKKyAgICAgICAgIDEgICAgICAtMTAuMVYgLi4gKzEwLjFWCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisvLyBDb25zZWN1dGl2ZSBJL08gcG9ydCBhZGRyZXNzZXMKKyNkZWZpbmUgTVBDNjI0X1NJWkUgICAgICAgICAgICAgMTYKKworLy8gT2Zmc2V0cyBvZiBkaWZmZXJlbnQgcG9ydHMKKyNkZWZpbmUgTVBDNjI0X01BU1RFUl9DT05UUk9MCTAJLy8gbm90IHVzZWQKKyNkZWZpbmUgTVBDNjI0X0dOTVVYQ0ggICAgICAgICAgMQkvLyBHYWluLCBNdXgsIENoYW5uZWwgb2YgQURDCisjZGVmaW5lIE1QQzYyNF9BREMgICAgICAgICAgICAgIDIJLy8gcmVhZC93cml0ZSB0by9mcm9tIEFEQworI2RlZmluZSBNUEM2MjRfRUUgICAgICAgICAgICAgICAzCS8vIHJlYWQvd3JpdGUgdG8vZnJvbSBzZXJpYWwgRUVQUk9NIHZpYSBJMkMKKyNkZWZpbmUgTVBDNjI0X0xFRFMgICAgICAgICAgICAgNAkvLyB3cml0ZSB0byBMRURzCisjZGVmaW5lIE1QQzYyNF9ESU8gICAgICAgICAgICAgIDUJLy8gcmVhZC93cml0ZSB0by9mcm9tIGRpZ2l0YWwgSS9PIHBvcnRzCisjZGVmaW5lIE1QQzYyNF9JUlFfTUFTSyAgICAgICAgIDYJLy8gSVJRIG1hc2tpbmcgZW5hYmxlL2Rpc2FibGUKKworLy8gUmVnaXN0ZXIgYml0cycgbmFtZXMKKyNkZWZpbmUgTVBDNjI0X0FEQlVTWSAgICAgICAgICAgKDE8PDUpCisjZGVmaW5lIE1QQzYyNF9BRFNETyAgICAgICAgICAgICgxPDw0KQorI2RlZmluZSBNUEM2MjRfQURGTyAgICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgTVBDNjI0X0FEQ1MgICAgICAgICAgICAgKDE8PDIpCisjZGVmaW5lIE1QQzYyNF9BRFNDSyAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBNUEM2MjRfQURTREkgICAgICAgICAgICAoMTw8MCkKKworLy8gU0RJIFNwZWVkL1Jlc29sdXRpb24gUHJvZ3JhbW1pbmcgYml0cworI2RlZmluZSBNUEM2MjRfT1NSNCAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIE1QQzYyNF9PU1IzICAgICAgICAgICAgICgxPDwzMCkKKyNkZWZpbmUgTVBDNjI0X09TUjIgICAgICAgICAgICAgKDE8PDI5KQorI2RlZmluZSBNUEM2MjRfT1NSMSAgICAgICAgICAgICAoMTw8MjgpCisjZGVmaW5lIE1QQzYyNF9PU1IwICAgICAgICAgICAgICgxPDwyNykKKworLy8gMzItYml0IG91dHB1dCB2YWx1ZSBiaXRzJyBuYW1lcworI2RlZmluZSBNUEM2MjRfRU9DX0JJVCAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIE1QQzYyNF9ETVlfQklUICAgICAgICAgICgxPDwzMCkKKyNkZWZpbmUgTVBDNjI0X1NHTl9CSVQgICAgICAgICAgKDE8PDI5KQorCisvLyBDb252ZXJ0aW9uIHNwZWVkcworLyogT1NSNCBPU1IzIE9TUjIgT1NSMSBPU1IwICBDb252ZXJ0aW9uIHJhdGUgIFJNUyBub2lzZSAgRU5PQl4KKyAqICBYICAgIDAgICAgMCAgICAwICAgIDEgICAgICAgIDMuNTJrSHogICAgICAgIDIzdVYgICAgICAxNworICogIFggICAgMCAgICAwICAgIDEgICAgMCAgICAgICAgMS43NmtIeiAgICAgICAzLjV1ViAgICAgIDIwCisgKiAgWCAgICAwICAgIDAgICAgMSAgICAxICAgICAgICAgODgwSHogICAgICAgICAydVYgICAgICAyMS4zCisgKiAgWCAgICAwICAgIDEgICAgMCAgICAwICAgICAgICAgNDQwSHogICAgICAgIDEuNHVWICAgICAyMS44CisgKiAgWCAgICAwICAgIDEgICAgMCAgICAxICAgICAgICAgMjIwSHogICAgICAgICAxdVYgICAgICAyMi40CisgKiAgWCAgICAwICAgIDEgICAgMSAgICAwICAgICAgICAgMTEwSHogICAgICAgIDc1MHVWICAgICAyMi45CisgKiAgWCAgICAwICAgIDEgICAgMSAgICAxICAgICAgICAgIDU1SHogICAgICAgIDUxMG5WICAgICAyMy40CisgKiAgWCAgICAxICAgIDAgICAgMCAgICAwICAgICAgICAgMjcuNUh6ICAgICAgIDM3NW5WICAgICAgMjQKKyAqICBYICAgIDEgICAgMCAgICAwICAgIDEgICAgICAgIDEzLjc1SHogICAgICAgMjUwblYgICAgIDI0LjQKKyAqICBYICAgIDEgICAgMSAgICAxICAgIDEgICAgICAgIDYuODc1SHogICAgICAgMjAwblYgICAgIDI0LjYKKyAqCisgKiBeIC0gRWZmZWN0aXZlIE51bWJlciBPZiBCaXRzCisgKi8KKworI2RlZmluZSBNUEM2MjRfU1BFRURfM181Ml9rSHogICAoTVBDNjI0X09TUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNUEM2MjRfT1NSMCkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzFfNzZfa0h6ICAgKE1QQzYyNF9PU1I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IxICAgICAgICAgICAgICApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF84ODBfSHogICAgIChNUEM2MjRfT1NSNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNUEM2MjRfT1NSMSB8IE1QQzYyNF9PU1IwKQorI2RlZmluZSBNUEM2MjRfU1BFRURfNDQwX0h6ICAgICAoTVBDNjI0X09TUjQgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IyICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzIyMF9IeiAgICAgKE1QQzYyNF9PU1I0ICAgICAgICAgICAgICAgfCBNUEM2MjRfT1NSMiAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF8xMTBfSHogICAgIChNUEM2MjRfT1NSNCAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjIgfCBNUEM2MjRfT1NSMSAgICAgICAgICAgICAgKQorI2RlZmluZSBNUEM2MjRfU1BFRURfNTVfSHogICAgICAoTVBDNjI0X09TUjQgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IyIHwgTVBDNjI0X09TUjEgfCBNUEM2MjRfT1NSMCkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzI3XzVfSHogICAgKE1QQzYyNF9PU1I0IHwgTVBDNjI0X09TUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF8xM183NV9IeiAgIChNUEM2MjRfT1NSNCB8IE1QQzYyNF9PU1IzICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IwKQorI2RlZmluZSBNUEM2MjRfU1BFRURfNl84NzVfSHogICAoTVBDNjI0X09TUjQgfCBNUEM2MjRfT1NSMyB8IE1QQzYyNF9PU1IyIHwgTVBDNjI0X09TUjEgfCBNUEM2MjRfT1NSMCkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RydWN0IHNrZWxfcHJpdmF0ZSB7CisKKwl1bnNpZ25lZCBsb25nIGludCB1bENvbnZlcnRpb25SYXRlOwkvLyBzZXQgYnkgbXBjNjI0X2F0dGFjaCgpIGZyb20gZHJpdmVyJ3MgcGFyYW1ldGVycworfTsKKworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgc2tlbF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbXBjNjI0X2JpcG9sYXIxID0geworCTEsCisJeworLy8gICAgQklQX1JBTkdFKDEuMDEpIC8vIHRoaXMgaXMgY29ycmVjdCwKKwkJCS8vIGJ1dCBteSBNUEMtNjI0IGFjdHVhbGx5IHNlZW1zIHRvIGhhdmUgYSByYW5nZSBvZiAyLjAyCisJCQlCSVBfUkFOR0UoMi4wMikKKwkJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9tcGM2MjRfYmlwb2xhcjEwID0geworCTEsCisJeworLy8gICAgQklQX1JBTkdFKDEwLjEpIC8vIHRoaXMgaXMgY29ycmVjdCwKKwkJCS8vIGJ1dCBteSBNUEMtNjI0IGFjdHVhbGx5IHNlZW1zIHRvIGhhdmUgYSByYW5nZSBvZiAyMC4yCisJCQlCSVBfUkFOR0UoMjAuMikKKwkJfQorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaW50IG1wYzYyNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBtcGM2MjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9tcGM2MjQgPSB7CisgICAgICBkcml2ZXJfbmFtZToibXBjNjI0IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDptcGM2MjRfYXR0YWNoLAorICAgICAgZGV0YWNoOm1wYzYyNF9kZXRhY2gKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGludCBtcGM2MjRfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGludCBtcGM2MjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcnRfcHJpbnRrKCJjb21lZGklZDogbXBjNjI0IFsweCUwNGx4LCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmIChyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIE1QQzYyNF9TSVpFLCAibXBjNjI0IikgPT0gTlVMTCkgeworCQlydF9wcmludGsoIkkvTyBwb3J0KHMpIGluIHVzZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCWRldi0+Ym9hcmRfbmFtZSA9ICJtcGM2MjQiOworCisJLy8gUHJpdmF0ZSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3Qgc2tlbF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN3aXRjaCAoaXQtPm9wdGlvbnNbMV0pIHsKKwljYXNlIDA6CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfM181Ml9rSHo7CisJCXJ0X3ByaW50aygiMy41MiBrSHosICIpOworCQlicmVhazsKKwljYXNlIDE6CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfMV83Nl9rSHo7CisJCXJ0X3ByaW50aygiMS43NiBrSHosICIpOworCQlicmVhazsKKwljYXNlIDI6CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfODgwX0h6OworCQlydF9wcmludGsoIjg4MCBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF80NDBfSHo7CisJCXJ0X3ByaW50aygiNDQwIEh6LCAiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzIyMF9IejsKKwkJcnRfcHJpbnRrKCIyMjAgSHosICIpOworCQlicmVhazsKKwljYXNlIDU6CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfMTEwX0h6OworCQlydF9wcmludGsoIjExMCBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF81NV9IejsKKwkJcnRfcHJpbnRrKCI1NSBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8yN181X0h6OworCQlydF9wcmludGsoIjI3LjUgSHosICIpOworCQlicmVhazsKKwljYXNlIDg6CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfMTNfNzVfSHo7CisJCXJ0X3ByaW50aygiMTMuNzUgSHosICIpOworCQlicmVhazsKKwljYXNlIDk6CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfNl84NzVfSHo7CisJCXJ0X3ByaW50aygiNi44NzUgSHosICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsKKwkJCSgiaWxsZWdhbCBjb252ZXJ0aW9uIHJhdGUgc2V0dGluZyEgVmFsaWQgbnVtYmVycyBhcmUgMC4uOS4gVXNpbmcgOSA9PiA2Ljg3NSBIeiwgIik7CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfM181Ml9rSHo7CisJfQorCisJLy8gU3ViZGV2aWNlcyBzdHJ1Y3R1cmVzCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9ESUZGOworCXMtPm5fY2hhbiA9IDg7CisJc3dpdGNoIChpdC0+b3B0aW9uc1sxXSkgeworCWRlZmF1bHQ6CisJCXMtPm1heGRhdGEgPSAweDNGRkZGRkZGOworCQlydF9wcmludGsoIjMwIGJpdCwgIik7CisJfQorCisJc3dpdGNoIChpdC0+b3B0aW9uc1sxXSkgeworCWNhc2UgMDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfbXBjNjI0X2JpcG9sYXIxOworCQlydF9wcmludGsoIjEuMDFWXTogIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX21wYzYyNF9iaXBvbGFyMTA7CisJCXJ0X3ByaW50aygiMTAuMVZdOiAiKTsKKwl9CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5pbnNuX3JlYWQgPSBtcGM2MjRfYWlfcmluc247CisKKwlydF9wcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1wYzYyNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcnRfcHJpbnRrKCJjb21lZGklZDogbXBjNjI0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgTVBDNjI0X1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKKy8vIFRpbWVvdXQgMjAwbXMKKyNkZWZpbmUgVElNRU9VVCAyMDAKKworc3RhdGljIGludCBtcGM2MjRfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBpOworCXVuc2lnbmVkIGxvbmcgaW50IGRhdGFfaW4sIGRhdGFfb3V0OworCXVuc2lnbmVkIGNoYXIgdWNQb3J0OworCisJLy8gV0FSTklORzogV2UgYWx3YXlzIHdyaXRlIDAgdG8gR05TV0EgYml0LCBzbyB0aGUgY2hhbm5lbCByYW5nZSBpcyArLS8xMC4xVmRjCisJb3V0YihpbnNuLT5jaGFuc3BlYywgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfR05NVVhDSCk7CisvLyAgICBydF9wcmludGsoIkNoYW5uZWwgJWQ6IFxuIiwgaW5zbi0+Y2hhbnNwZWMpOworCWlmICghaW5zbi0+bikgeworCQlydF9wcmludGsoIk1QQzYyNDogV2FybmluZywgbm8gZGF0YSB0byBhcXVpcmVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8vIFRyaWdnZXIgdGhlIGNvbnZlcnRpb24KKwkJb3V0YihNUEM2MjRfQURTQ0ssIGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCW91dGIoTVBDNjI0X0FEQ1MgfCBNUEM2MjRfQURTQ0ssIGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKworCQkvLyBXYWl0IGZvciB0aGUgY29udmVydGlvbiB0byBlbmQKKwkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgeworCQkJdWNQb3J0ID0gaW5iKGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CisJCQlpZiAodWNQb3J0ICYgTVBDNjI0X0FEQlVTWSkKKwkJCQljb21lZGlfdWRlbGF5KDEwMDApOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IFRJTUVPVVQpIHsKKwkJCXJ0X3ByaW50aygiTVBDNjI0OiB0aW1lb3V0ICglZG1zKVxuIiwgVElNRU9VVCk7CisJCQlkYXRhW25dID0gMDsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCS8vIFN0YXJ0IHJlYWRpbmcgZGF0YQorCQlkYXRhX2luID0gMDsKKwkJZGF0YV9vdXQgPSBkZXZwcml2LT51bENvbnZlcnRpb25SYXRlOworCQljb21lZGlfdWRlbGF5KDEpOworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJLy8gU2V0IHRoZSBjbG9jayBsb3cKKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisKKwkJCWlmIChkYXRhX291dCAmICgxIDw8IDMxKSkJLy8gdGhlIG5leHQgYml0IGlzIGEgMQorCQkJeworCQkJCS8vIFNldCB0aGUgQURTREkgbGluZSAoc2VuZCB0byBNUEM2MjQpCisJCQkJb3V0YihNUEM2MjRfQURTREksIGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CisJCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJCQkvLyBTZXQgdGhlIGNsb2NrIGhpZ2gKKwkJCQlvdXRiKE1QQzYyNF9BRFNDSyB8IE1QQzYyNF9BRFNESSwKKwkJCQkJZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCX0gZWxzZQkvLyB0aGUgbmV4dCBiaXQgaXMgYSAwCisJCQl7CisJCQkJLy8gU2V0IHRoZSBBRFNESSBsaW5lIChzZW5kIHRvIE1QQzYyNCkKKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CisJCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJCQkvLyBTZXQgdGhlIGNsb2NrIGhpZ2gKKwkJCQlvdXRiKE1QQzYyNF9BRFNDSywgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCX0KKwkJCS8vIFJlYWQgQURTRE8gb24gaGlnaCBjbG9jayAocmVjZWl2ZSBmcm9tIE1QQzYyNCkKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCQlkYXRhX2luIDw8PSAxOworCQkJZGF0YV9pbiB8PQorCQkJCShpbmIoZGV2LT5pb2Jhc2UgKworCQkJCQlNUEM2MjRfQURDKSAmIE1QQzYyNF9BRFNETykgPj4gNDsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisKKwkJCWRhdGFfb3V0IDw8PSAxOworCQl9CisKKwkJLy8gUmVjZWl2ZWQgMzItYml0IGxvbmcgdmFsdWUgY29uc2lzdCBvZjoKKwkJLy8gICAzMTogRU9DIChFbmQgT2YgVHJhbnNtaXNzaW9uKSBiaXQgLSBzaG91bGQgYmUgMAorCQkvLyAgIDMwOiBETVkgKER1bW15KSBiaXQgICAgICAgICAgICAgICAtIHNob3VsZCBiZSAwCisJCS8vICAgMjk6IFNJRyAoU2lnbikgYml0ICAgICAgICAgICAgICAgIC0gMSBpZiB0aGUgdm9sdGFnZSBpcyBwb3NpdGl2ZSwgMCBpZiBuZWdhdGl2ZQorCQkvLyAgIDI4OiBNU0IgKE1vc3QgU2lnbmlmaWNhbnQgQml0KSAgICAtIHRoZSBmaXJzdCBiaXQgb2YgY29udmVydGlvbiByZXN1bHQKKwkJLy8gICAuLi4uCisJCS8vICAgMDU6IExTQiAoTGVhc3QgU2lnbmlmaWNhbnQgQml0KSAgIC0gdGhlIGxhc3QgYml0IG9mIGNvbnZlcnRpb24gcmVzdWx0CisJCS8vICAgMDQ6IHN1Yi1MU0IgICAgICAgICAgICAgICAgICAgICAgIC0gc3ViLUxTQnMgYXJlIGJhc2ljYWxseSBub2lzZSwgYnV0IHdoZW4KKwkJLy8gICAwMzogc3ViLUxTQiAgICAgICAgICAgICAgICAgICAgICAgICBhdmVyYWdlZCBwcm9wZXJseSwgdGhleSBjYW4gaW5jcmVhc2UgY29udmVydGlvbgorCQkvLyAgIDAyOiBzdWItTFNCICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiB1cCB0byAyOSBiaXRzOyB0aGV5IGNhbiBiZSBkaXNjYXJkZWQKKwkJLy8gICAwMTogc3ViLUxTQiAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGxvc3Mgb2YgcmVzb2x1dGlvbi4KKwkJLy8gICAwMDogc3ViLUxTQgorCisJCWlmIChkYXRhX2luICYgTVBDNjI0X0VPQ19CSVQpCisJCQlydF9wcmludGsoIk1QQzYyNDogRU9DIGJpdCBpcyBzZXQgKGRhdGFfaW49JWx1KSEiLAorCQkJCWRhdGFfaW4pOworCQlpZiAoZGF0YV9pbiAmIE1QQzYyNF9ETVlfQklUKQorCQkJcnRfcHJpbnRrKCJNUEM2MjQ6IERNWSBiaXQgaXMgc2V0IChkYXRhX2luPSVsdSkhIiwKKwkJCQlkYXRhX2luKTsKKwkJaWYgKGRhdGFfaW4gJiBNUEM2MjRfU0dOX0JJVCkJLy8gY2hlY2sgdGhlIHNpZ24gYml0CisJCXsJCS8vIFRoZSB2b2x0YWdlIGlzIHBvc2l0aXZlCisJCQlkYXRhX2luICY9IDB4M0ZGRkZGRkY7CS8vIEVPQyBhbmQgRE1ZIHNob3VsZCBiZSAwLCBidXQgd2Ugd2lsbCBtYXNrIHRoZW0gb3V0IGp1c3QgdG8gYmUgc3VyZQorCQkJZGF0YVtuXSA9IGRhdGFfaW47CS8vIGNvbWVkaSBvcGVyYXRlcyBvbiB1bnNpZ25lZCBudW1iZXJzLCBzbyB3ZSBkb24ndCBjbGVhciB0aGUgU0dOIGJpdAorCQkJLy8gU0dOIGJpdCBpcyBzdGlsbCBzZXQhIEl0J3MgY29ycmVjdCwgc2luY2Ugd2UncmUgY29udmVydGluZyB0byB1bnNpZ25lZC4KKwkJfSBlbHNlIHsJLy8gVGhlIHZvbHRhZ2UgaXMgbmVnYXRpdmUKKwkJCS8vIGRhdGFfaW4gY29udGFpbnMgYSBudW1iZXIgaW4gMzAtYml0IHR3bydzIGNvbXBsZW1lbnQgY29kZSBhbmQgd2UgbXVzdCBkZWFsIHdpdGggaXQKKwkJCWRhdGFfaW4gfD0gTVBDNjI0X1NHTl9CSVQ7CisJCQlkYXRhX2luID0gfmRhdGFfaW47CisJCQlkYXRhX2luICs9IDE7CisJCQlkYXRhX2luICY9IH4oTVBDNjI0X0VPQ19CSVQgfCBNUEM2MjRfRE1ZX0JJVCk7CisJCQkvLyBjbGVhciBFT0MgYW5kIERNWSBiaXRzCisJCQlkYXRhX2luID0gMHgyMDAwMDAwMCAtIGRhdGFfaW47CisJCQlkYXRhW25dID0gZGF0YV9pbjsKKwkJfQorCX0KKworCS8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuCisJcmV0dXJuIG47Cit9CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfbXBjNjI0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM4MjYwY3BtLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjODI2MGNwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYzBhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjODI2MGNwbS5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL21wYzgyNjAuYworICAgIGRyaXZlciBmb3IgZGlnaXRhbCBJL08gcGlucyBvbiB0aGUgTVBDIDgyNjAgQ1BNIG1vZHVsZQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCwyMDAxIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBtcGM4MjYwY3BtCitEZXNjcmlwdGlvbjogTVBDODI2MCBDUE0gbW9kdWxlIGdlbmVyaWMgZGlnaXRhbCBJL08gbGluZXMKK0RldmljZXM6IFtNb3Rvcm9sYV0gTVBDODI2MCBDUE0gKG1wYzgyNjBjcG0pCitBdXRob3I6IGRzCitTdGF0dXM6IGV4cGVyaW1lbnRhbAorVXBkYXRlZDogU2F0LCAxNiBNYXIgMjAwMiAxNzozNDo0OCAtMDgwMAorCitUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byB0aGUgTW90b3JvbGEgTVBDODI2MCBwcm9jZXNzb3IsIGFsbG93aW5nCit5b3UgdG8gYWNjZXNzIHRoZSBwcm9jZXNzb3IncyBnZW5lcmljIGRpZ2l0YWwgSS9PIGxpbmVzLgorCitJdCBpcyBhcHBhcmVudGx5IG1pc3Npbmcgc29tZSBjb2RlLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBtcGM4MjYwX2Rpb19yZXNlcnZlZFs0XTsKKworc3RydWN0IG1wYzgyNjBjcG1fcHJpdmF0ZSB7CisKKwlpbnQgZGF0YTsKKworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IG1wYzgyNjBjcG1fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBtcGM4MjYwY3BtX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG1wYzgyNjBjcG1fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbXBjODI2MGNwbSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJtcGM4MjYwY3BtIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDptcGM4MjYwY3BtX2F0dGFjaCwKKyAgICAgIGRldGFjaDptcGM4MjYwY3BtX2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfbXBjODI2MGNwbSk7CisKK3N0YXRpYyBpbnQgbXBjODI2MGNwbV9kaW9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG1wYzgyNjBjcG1fZGlvX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBtcGM4MjYwY3BtX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6IG1wYzgyNjBjcG06ICIsIGRldi0+bWlub3IpOworCisJZGV2LT5ib2FyZF9wdHIgPSBtcGM4MjYwY3BtX2JvYXJkcyArIGRldi0+Ym9hcmQ7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgbXBjODI2MGNwbV9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIGk7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMzI7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2NvbmZpZyA9IG1wYzgyNjBjcG1fZGlvX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gbXBjODI2MGNwbV9kaW9fYml0czsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtcGM4MjYwY3BtX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBtcGM4MjYwY3BtOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpjcG1fcGRhdChpbnQgcG9ydCkKK3sKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCXJldHVybiAmaW8tPmlvcF9wZGF0YTsKKwljYXNlIDE6CisJCXJldHVybiAmaW8tPmlvcF9wZGF0YjsKKwljYXNlIDI6CisJCXJldHVybiAmaW8tPmlvcF9wZGF0YzsKKwljYXNlIDM6CisJCXJldHVybiAmaW8tPmlvcF9wZGF0ZDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXBjODI2MGNwbV9kaW9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwl1bnNpZ25lZCBpbnQgZDsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgcG9ydDsKKworCXBvcnQgPSAoaW50KXMtPnByaXZhdGU7CisJbWFzayA9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKG1hc2sgJiBjcG1fcmVzZXJ2ZWRfYml0c1twb3J0XSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPmlvX2JpdHMgJj0gfm1hc2s7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0gKHMtPmlvX2JpdHMgJiBtYXNrKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCXJldHVybiAmaW8tPmlvcF9wZGlyYTsKKwljYXNlIDE6CisJCXJldHVybiAmaW8tPmlvcF9wZGlyYjsKKwljYXNlIDI6CisJCXJldHVybiAmaW8tPmlvcF9wZGlyYzsKKwljYXNlIDM6CisJCXJldHVybiAmaW8tPmlvcF9wZGlyZDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtcGM4MjYwY3BtX2Rpb19iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgcG9ydDsKKwl1bnNpZ25lZCBsb25nICpwOworCisJcCA9IGNwbV9wZGF0KChpbnQpcy0+cHJpdmF0ZSk7CisKKwlyZXR1cm4gMjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tdWx0aXEzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXVsdGlxMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDc1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXVsdGlxMy5jCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvbXVsdGlxMy5jCisgICBIYXJkd2FyZSBkcml2ZXIgZm9yIFF1YW5zZXIgQ29uc3VsdGluZyBNdWx0aVEtMyBib2FyZAorCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogbXVsdGlxMworRGVzY3JpcHRpb246IFF1YW5zZXIgQ29uc3VsdGluZyBNdWx0aVEtMworQXV0aG9yOiBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtRdWFuc2VyIENvbnN1bHRpbmddIE11bHRpUS0zIChtdWx0aXEzKQorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBNVUxUSVEzX1NJWkUgMTYKKworLyoKKyAqIE1VTFRJUS0zIHBvcnQgb2Zmc2V0cworICovCisjZGVmaW5lIE1VTFRJUTNfRElHSU5fUE9SVCAwCisjZGVmaW5lIE1VTFRJUTNfRElHT1VUX1BPUlQgMAorI2RlZmluZSBNVUxUSVEzX0RBQ19EQVRBIDIKKyNkZWZpbmUgTVVMVElRM19BRF9EQVRBIDQKKyNkZWZpbmUgTVVMVElRM19BRF9DUyA0CisjZGVmaW5lIE1VTFRJUTNfU1RBVFVTIDYKKyNkZWZpbmUgTVVMVElRM19DT05UUk9MIDYKKyNkZWZpbmUgTVVMVElRM19DTEtfREFUQSA4CisjZGVmaW5lIE1VTFRJUTNfRU5DX0RBVEEgMTIKKyNkZWZpbmUgTVVMVElRM19FTkNfQ09OVFJPTCAxNAorCisvKgorICogZmxhZ3MgZm9yIENPTlRST0wgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBNVUxUSVEzX0FEX01VWF9FTiAgICAgIDB4MDA0MAorI2RlZmluZSBNVUxUSVEzX0FEX0FVVE9aICAgICAgIDB4MDA4MAorI2RlZmluZSBNVUxUSVEzX0FEX0FVVE9DQUwgICAgIDB4MDEwMAorI2RlZmluZSBNVUxUSVEzX0FEX1NIICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBNVUxUSVEzX0FEX0NMT0NLXzRNICAgIDB4MDQwMAorI2RlZmluZSBNVUxUSVEzX0RBX0xPQUQgICAgICAgICAgICAgICAgMHgxODAwCisKKyNkZWZpbmUgTVVMVElRM19DT05UUk9MX01VU1QgICAgMHgwNjAwCisKKy8qCisgKiBmbGFncyBmb3IgU1RBVFVTIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTVVMVElRM19TVEFUVVNfRU9DICAgICAgMHgwMDgKKyNkZWZpbmUgTVVMVElRM19TVEFUVVNfRU9DX0kgICAgMHgwMTAKKworLyoKKyAqIGZsYWdzIGZvciBlbmNvZGVyIGNvbnRyb2wKKyAqLworI2RlZmluZSBNVUxUSVEzX0NMT0NLX0RBVEEgICAgICAweDAwCisjZGVmaW5lIE1VTFRJUTNfQ0xPQ0tfU0VUVVAgICAgIDB4MTgKKyNkZWZpbmUgTVVMVElRM19JTlBVVF9TRVRVUCAgICAgMHg0MQorI2RlZmluZSBNVUxUSVEzX1FVQURfWDQgICAgICAgICAweDM4CisjZGVmaW5lIE1VTFRJUTNfQlBfUkVTRVQgICAgICAgIDB4MDEKKyNkZWZpbmUgTVVMVElRM19DTlRSX1JFU0VUICAgICAgMHgwMgorI2RlZmluZSBNVUxUSVEzX1RSU0ZSUFJfQ1RSICAgICAweDA4CisjZGVmaW5lIE1VTFRJUTNfVFJTRlJDTlRSX09MICAgIDB4MTAKKyNkZWZpbmUgTVVMVElRM19FRkxBR19SRVNFVCAgICAgMHgwNgorCisjZGVmaW5lIE1VTFRJUTNfVElNRU9VVCAzMAorCitzdGF0aWMgaW50IG11bHRpcTNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbXVsdGlxM19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9tdWx0aXEzID0geworICAgICAgZHJpdmVyX25hbWU6Im11bHRpcTMiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm11bHRpcTNfYXR0YWNoLAorICAgICAgZGV0YWNoOm11bHRpcTNfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tdWx0aXEzKTsKKworc3RydWN0IG11bHRpcTNfcHJpdmF0ZSB7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBtdWx0aXEzX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgbXVsdGlxM19haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpLCBuOworCWludCBjaGFuOworCXVuc2lnbmVkIGludCBoaSwgbG87CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJb3V0dyhNVUxUSVEzX0NPTlRST0xfTVVTVCB8IE1VTFRJUTNfQURfTVVYX0VOIHwgKGNoYW4gPDwgMyksCisJCWRldi0+aW9iYXNlICsgTVVMVElRM19DT05UUk9MKTsKKworCWZvciAoaSA9IDA7IGkgPCBNVUxUSVEzX1RJTUVPVVQ7IGkrKykgeworCQlpZiAoaW53KGRldi0+aW9iYXNlICsgTVVMVElRM19TVEFUVVMpICYgTVVMVElRM19TVEFUVVNfRU9DKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IE1VTFRJUTNfVElNRU9VVCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0FEX0NTKTsKKwkJZm9yIChpID0gMDsgaSA8IE1VTFRJUTNfVElNRU9VVDsgaSsrKSB7CisJCQlpZiAoaW53KGRldi0+aW9iYXNlICsKKwkJCQkJTVVMVElRM19TVEFUVVMpICYgTVVMVElRM19TVEFUVVNfRU9DX0kpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gTVVMVElRM19USU1FT1VUKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0FEX0NTKTsKKwkJbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0FEX0NTKTsKKwkJZGF0YVtuXSA9ICgoKGhpIDw8IDgpIHwgbG8pICsgMHgxMDAwKSAmIDB4MWZmZjsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBtdWx0aXEzX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IG11bHRpcTNfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0dyhNVUxUSVEzX0NPTlRST0xfTVVTVCB8IE1VTFRJUTNfREFfTE9BRCB8IGNoYW4sCisJCQlkZXYtPmlvYmFzZSArIE1VTFRJUTNfQ09OVFJPTCk7CisJCW91dHcoZGF0YVtpXSwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0RBQ19EQVRBKTsKKwkJb3V0dyhNVUxUSVEzX0NPTlRST0xfTVVTVCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0NPTlRST0wpOworCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBtdWx0aXEzX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgTVVMVElRM19ESUdJTl9QT1JUKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG11bHRpcTNfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0RJR09VVF9QT1JUKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG11bHRpcTNfZW5jb2Rlcl9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IGNvbnRyb2wgPSBNVUxUSVEzX0NPTlRST0xfTVVTVCB8IE1VTFRJUTNfQURfTVVYX0VOIHwgKGNoYW4gPDwgMyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWludCB2YWx1ZTsKKwkJb3V0dyhjb250cm9sLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfQ09OVFJPTCk7CisJCW91dGIoTVVMVElRM19CUF9SRVNFVCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwkJb3V0YihNVUxUSVEzX1RSU0ZSQ05UUl9PTCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwkJdmFsdWUgPSBpbmIoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19EQVRBKTsKKwkJdmFsdWUgfD0gKGluYihkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0RBVEEpIDw8IDgpOworCQl2YWx1ZSB8PSAoaW5iKGRldi0+aW9iYXNlICsgTVVMVElRM19FTkNfREFUQSkgPDwgMTYpOworCQlkYXRhW25dID0gKHZhbHVlICsgMHg4MDAwMDApICYgMHhmZmZmZmY7CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZXJfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGNoYW47CisJZm9yIChjaGFuID0gMDsgY2hhbiA8IGRldi0+c3ViZGV2aWNlc1s0XS5uX2NoYW47IGNoYW4rKykgeworCQlpbnQgY29udHJvbCA9CisJCQlNVUxUSVEzX0NPTlRST0xfTVVTVCB8IE1VTFRJUTNfQURfTVVYX0VOIHwgKGNoYW4gPDwgMyk7CisJCW91dHcoY29udHJvbCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfRUZMQUdfUkVTRVQsIGRldi0+aW9iYXNlICsgTVVMVElRM19FTkNfQ09OVFJPTCk7CisJCW91dGIoTVVMVElRM19CUF9SRVNFVCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwkJb3V0YihNVUxUSVEzX0NMT0NLX0RBVEEsIGRldi0+aW9iYXNlICsgTVVMVElRM19FTkNfREFUQSk7CisJCW91dGIoTVVMVElRM19DTE9DS19TRVRVUCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwkJb3V0YihNVUxUSVEzX0lOUFVUX1NFVFVQLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfUVVBRF9YNCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwkJb3V0YihNVUxUSVEzX0NOVFJfUkVTRVQsIGRldi0+aW9iYXNlICsgTVVMVElRM19FTkNfQ09OVFJPTCk7CisJfQorfQorCisvKgorICAgb3B0aW9uc1swXSAtIEkvTyBwb3J0CisgICBvcHRpb25zWzFdIC0gaXJxCisgICBvcHRpb25zWzJdIC0gbnVtYmVyIG9mIGVuY29kZXIgY2hpcHMgaW5zdGFsbGVkCisgKi8KKworc3RhdGljIGludCBtdWx0aXEzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogbXVsdGlxMzogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBNVUxUSVEzX1NJWkUsICJtdWx0aXEzIikpIHsKKwkJcHJpbnRrKCJjb21lZGklZDogSS9PIHBvcnQgY29uZmxpY3RcbiIsIGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCWlmIChpcnEpIHsKKwkJcHJpbnRrKCJjb21lZGklZDogaXJxID0gJXUgaWdub3JlZFxuIiwgZGV2LT5taW5vciwgaXJxKTsKKwl9IGVsc2UgeworCQlwcmludGsoImNvbWVkaSVkOiBubyBpcnFcbiIsIGRldi0+bWlub3IpOworCX0KKwlkZXYtPmJvYXJkX25hbWUgPSAibXVsdGlxMyI7CisJcmVzdWx0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDUpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgbXVsdGlxM19wcml2YXRlKSk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fcmVhZCA9IG11bHRpcTNfYWlfaW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweDFmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9yZWFkID0gbXVsdGlxM19hb19pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IG11bHRpcTNfYW9faW5zbl93cml0ZTsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IG11bHRpcTNfZGlfaW5zbl9iaXRzOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiBkbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IG11bHRpcTNfZG9faW5zbl9iaXRzOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+c3RhdGUgPSAwOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJLyogZW5jb2RlciAoY291bnRlcikgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0xTQU1QTDsKKwlzLT5uX2NoYW4gPSBpdC0+b3B0aW9uc1syXSAqIDI7CisJcy0+aW5zbl9yZWFkID0gbXVsdGlxM19lbmNvZGVyX2luc25fcmVhZDsKKwlzLT5tYXhkYXRhID0gMHhmZmZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKworCWVuY29kZXJfcmVzZXQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG11bHRpcTNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IG11bHRpcTM6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIE1VTFRJUTNfU0laRSk7CisJfQorCWlmIChkZXYtPmlycSkgeworCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMWVjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pXzY1MjcuYworICAgIGRyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLTY1MjcKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMiwyMDAzIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBuaV82NTI3CitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgNjUyNworQXV0aG9yOiBkcworU3RhdHVzOiB3b3JrcworRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktNjUyNyAobmk2NTI3KSwgUFhJLTY1MjcKK1VwZGF0ZWQ6IFNhdCwgMjUgSmFuIDIwMDMgMTM6MjQ6NDAgLTA4MDAKKworCisqLworCisvKgorICAgTWFudWFscyAoYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLm5hdGluc3QuY29tL3N1cHBvcnQvbWFudWFscykKKworCTM3MDEwNmIucGRmCTY1MjcgUmVnaXN0ZXIgTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwKKworICovCisKKyNkZWZpbmUgREVCVUcgMQorI2RlZmluZSBERUJVR19GTEFHUworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJtaXRlLmgiCisKKyNkZWZpbmUgTkk2NTI3X0RJT19TSVpFIDQwOTYKKyNkZWZpbmUgTkk2NTI3X01JVEVfU0laRSA0MDk2CisKKyNkZWZpbmUgUG9ydF9SZWdpc3Rlcih4KQkJCSgweDAwKyh4KSkKKyNkZWZpbmUgSURfUmVnaXN0ZXIJCQkJMHgwNgorCisjZGVmaW5lIENsZWFyX1JlZ2lzdGVyCQkJCTB4MDcKKyNkZWZpbmUgQ2xyRWRnZQkJCQkweDA4CisjZGVmaW5lIENsck92ZXJmbG93CQkJMHgwNAorI2RlZmluZSBDbHJGaWx0ZXIJCQkweDAyCisjZGVmaW5lIENsckludGVydmFsCQkJMHgwMQorCisjZGVmaW5lIEZpbHRlcl9JbnRlcnZhbCh4KQkJCSgweDA4Kyh4KSkKKyNkZWZpbmUgRmlsdGVyX0VuYWJsZSh4KQkJCSgweDBjKyh4KSkKKworI2RlZmluZSBDaGFuZ2VfU3RhdHVzCQkJCTB4MTQKKyNkZWZpbmUgTWFzdGVySW50ZXJydXB0U3RhdHVzCQkweDA0CisjZGVmaW5lIE92ZXJmbG93CQkJMHgwMgorI2RlZmluZSBFZGdlU3RhdHVzCQkJMHgwMQorCisjZGVmaW5lIE1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbAkJMHgxNQorI2RlZmluZSBGYWxsaW5nRWRnZUludEVuYWJsZQkJMHgxMAorI2RlZmluZSBSaXNpbmdFZGdlSW50RW5hYmxlCQkweDA4CisjZGVmaW5lIE1hc3RlckludGVycnVwdEVuYWJsZQkJMHgwNAorI2RlZmluZSBPdmVyZmxvd0ludEVuYWJsZQkJMHgwMgorI2RlZmluZSBFZGdlSW50RW5hYmxlCQkJMHgwMQorCisjZGVmaW5lIFJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoeCkJCSgweDAxOCsoeCkpCisjZGVmaW5lIEZhbGxpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKHgpCSgweDAyMCsoeCkpCisKK3N0YXRpYyBpbnQgbmk2NTI3X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG5pNjUyN19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9uaTY1MjcgPSB7CisgICAgICBkcml2ZXJfbmFtZToibmk2NTI3IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpuaTY1MjdfYXR0YWNoLAorICAgICAgZGV0YWNoOm5pNjUyN19kZXRhY2gsCit9OworCitzdHJ1Y3Qgbmk2NTI3X2JvYXJkIHsKKworCWludCBkZXZfaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgbmk2NTI3X2JvYXJkIG5pNjUyN19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgZGV2X2lkOgkweDJiMjAsCisJICAgICAgbmFtZToJInBjaS02NTI3IiwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDJiMTAsCisJICAgICAgbmFtZToJInB4aS02NTI3IiwKKwkJfSwKK307CisKKyNkZWZpbmUgbl9uaTY1MjdfYm9hcmRzIChzaXplb2Yobmk2NTI3X2JvYXJkcykvc2l6ZW9mKG5pNjUyN19ib2FyZHNbMF0pKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IG5pNjUyN19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmk2NTI3X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYjEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJiMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5pNjUyN19wY2lfdGFibGUpOworCitzdHJ1Y3Qgbmk2NTI3X3ByaXZhdGUgeworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwl1bnNpZ25lZCBpbnQgZmlsdGVyX2ludGVydmFsOworCXVuc2lnbmVkIGludCBmaWx0ZXJfZW5hYmxlOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IG5pNjUyN19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IG5pNjUyN19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworCitzdGF0aWMgaW50IG5pNjUyN19kaV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdICE9IElOU05fQ09ORklHX0ZJTFRFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVsxXSkgeworCQlpbnRlcnZhbCA9IChkYXRhWzFdICsgMTAwKSAvIDIwMDsKKwkJZGF0YVsxXSA9IGludGVydmFsICogMjAwOworCisJCWlmIChpbnRlcnZhbCAhPSBkZXZwcml2LT5maWx0ZXJfaW50ZXJ2YWwpIHsKKwkJCXdyaXRlYihpbnRlcnZhbCAmIDB4ZmYsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUZpbHRlcl9JbnRlcnZhbCgwKSk7CisJCQl3cml0ZWIoKGludGVydmFsID4+IDgpICYgMHhmZiwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJRmlsdGVyX0ludGVydmFsKDEpKTsKKwkJCXdyaXRlYigoaW50ZXJ2YWwgPj4gMTYpICYgMHgwZiwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJRmlsdGVyX0ludGVydmFsKDIpKTsKKworCQkJd3JpdGViKENsckludGVydmFsLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xlYXJfUmVnaXN0ZXIpOworCisJCQlkZXZwcml2LT5maWx0ZXJfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKwkJfQorCisJCWRldnByaXYtPmZpbHRlcl9lbmFibGUgfD0gMSA8PCBjaGFuOworCX0gZWxzZSB7CisJCWRldnByaXYtPmZpbHRlcl9lbmFibGUgJj0gfigxIDw8IGNoYW4pOworCX0KKworCXdyaXRlYihkZXZwcml2LT5maWx0ZXJfZW5hYmxlLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoMCkpOworCXdyaXRlYihkZXZwcml2LT5maWx0ZXJfZW5hYmxlID4+IDgsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlsdGVyX0VuYWJsZSgxKSk7CisJd3JpdGViKGRldnByaXYtPmZpbHRlcl9lbmFibGUgPj4gMTYsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlsdGVyX0VuYWJsZSgyKSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaTY1MjdfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoMCkpOworCWRhdGFbMV0gfD0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X1JlZ2lzdGVyKDEpKSA8PCA4OworCWRhdGFbMV0gfD0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X1JlZ2lzdGVyKDIpKSA8PCAxNjsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pNjUyN19kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCisJCS8qIFRoZSBvcGVuIHJlbGF5IHN0YXRlIG9uIHRoZSBib2FyZCBjb29yZXNwb25kcyB0byAxLAorCQkgKiBidXQgaW4gQ29tZWRpLCBpdCBpcyByZXByZXNlbnRlZCBieSAwLiAqLworCQlpZiAoZGF0YVswXSAmIDB4MDAwMGZmKSB7CisJCQl3cml0ZWIoKHMtPnN0YXRlIF4gMHhmZiksCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X1JlZ2lzdGVyKDMpKTsKKwkJfQorCQlpZiAoZGF0YVswXSAmIDB4MDBmZjAwKSB7CisJCQl3cml0ZWIoKHMtPnN0YXRlID4+IDgpIF4gMHhmZiwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoNCkpOworCQl9CisJCWlmIChkYXRhWzBdICYgMHhmZjAwMDApIHsKKwkJCXdyaXRlYigocy0+c3RhdGUgPj4gMTYpIF4gMHhmZiwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoNSkpOworCQl9CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgbmk2NTI3X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDaGFuZ2VfU3RhdHVzKTsKKwlpZiAoKHN0YXR1cyAmIE1hc3RlckludGVycnVwdFN0YXR1cykgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCWlmICgoc3RhdHVzICYgRWRnZVN0YXR1cykgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJd3JpdGViKENsckVkZ2UgfCBDbHJPdmVyZmxvdywKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CisKKwljb21lZGlfYnVmX3B1dChzLT5hc3luYywgMCk7CisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBuaTY1MjdfaW50cl9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19PVEhFUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gMSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCWNtZC0+c3RvcF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmk2NTI3X2ludHJfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLy9zdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwl3cml0ZWIoQ2xyRWRnZSB8IENsck92ZXJmbG93LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKwl3cml0ZWIoRmFsbGluZ0VkZ2VJbnRFbmFibGUgfCBSaXNpbmdFZGdlSW50RW5hYmxlIHwKKwkJTWFzdGVySW50ZXJydXB0RW5hYmxlIHwgRWRnZUludEVuYWJsZSwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmk2NTI3X2ludHJfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgTWFzdGVyX0ludGVycnVwdF9Db250cm9sKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pNjUyN19pbnRyX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSAwOworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pNjUyN19pbnRyX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdICE9IElOU05fQ09ORklHX0NIQU5HRV9OT1RJRlkpCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGViKGRhdGFbMV0sCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUmlzaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgwKSk7CisJd3JpdGViKGRhdGFbMV0gPj4gOCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSaXNpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDEpKTsKKwl3cml0ZWIoZGF0YVsxXSA+PiAxNiwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSaXNpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDIpKTsKKworCXdyaXRlYihkYXRhWzJdLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZhbGxpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDApKTsKKwl3cml0ZWIoZGF0YVsyXSA+PiA4LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZhbGxpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDEpKTsKKwl3cml0ZWIoZGF0YVsyXSA+PiAxNiwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgyKSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaTY1MjdfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBuaTY1Mjc6IiwgZGV2LT5taW5vcik7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pNjUyN19wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG5pNjUyN19maW5kX2RldmljZShkZXYsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtaXRlX3NldHVwKGRldnByaXYtPm1pdGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCXByaW50aygiICVzIiwgZGV2LT5ib2FyZF9uYW1lKTsKKworCXByaW50aygiIElEPTB4JTAyeCIsIHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgSURfUmVnaXN0ZXIpKTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDI0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+aW5zbl9jb25maWcgPSBuaTY1MjdfZGlfaW5zbl9jb25maWc7CisJcy0+aW5zbl9iaXRzID0gbmk2NTI3X2RpX2luc25fYml0czsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMjQ7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsJLyogRklYTUU6IGFjdHVhbGx5IGNvbmR1Y3RhbmNlICovCisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+aW5zbl9iaXRzID0gbmk2NTI3X2RvX2luc25fYml0czsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCXMtPm1heGRhdGEgPSAxOworCXMtPmRvX2NtZHRlc3QgPSBuaTY1MjdfaW50cl9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IG5pNjUyN19pbnRyX2NtZDsKKwlzLT5jYW5jZWwgPSBuaTY1MjdfaW50cl9jYW5jZWw7CisJcy0+aW5zbl9iaXRzID0gbmk2NTI3X2ludHJfaW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gbmk2NTI3X2ludHJfaW5zbl9jb25maWc7CisKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKDApKTsKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKDEpKTsKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKDIpKTsKKworCXdyaXRlYihDbHJFZGdlIHwgQ2xyT3ZlcmZsb3cgfCBDbHJGaWx0ZXIgfCBDbHJJbnRlcnZhbCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CisJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgTWFzdGVyX0ludGVycnVwdF9Db250cm9sKTsKKworCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShtaXRlX2lycShkZXZwcml2LT5taXRlKSwgbmk2NTI3X2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJuaTY1MjciLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiIGlycSBub3QgYXZhaWxhYmxlIik7CisJfSBlbHNlCisJCWRldi0+aXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaTY1MjdfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPm1pdGUgJiYgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIpIHsKKwkJd3JpdGViKDB4MDAsCisJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbCk7CisJfQorCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisKKwlpZiAoZGV2cHJpdiAmJiBkZXZwcml2LT5taXRlKSB7CisJCW1pdGVfdW5zZXR1cChkZXZwcml2LT5taXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaTY1MjdfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKworCWZvciAobWl0ZSA9IG1pdGVfZGV2aWNlczsgbWl0ZTsgbWl0ZSA9IG1pdGUtPm5leHQpIHsKKwkJaWYgKG1pdGUtPnVzZWQpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQlzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBuX25pNjUyN19ib2FyZHM7IGkrKykgeworCQkJaWYgKG1pdGVfZGV2aWNlX2lkKG1pdGUpID09IG5pNjUyN19ib2FyZHNbaV0uZGV2X2lkKSB7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBuaTY1MjdfYm9hcmRzICsgaTsKKwkJCQlkZXZwcml2LT5taXRlID0gbWl0ZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJbWl0ZV9saXN0X2RldmljZXMoKTsKKwlyZXR1cm4gLUVJTzsKK30KKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfbmk2NTI3LCBuaTY1MjdfcGNpX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODVkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCkBAIC0wLDAgKzEsODA5IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pXzY1MTQuYworICAgIGRyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLTY1MTQKKworICAgIENvcHlyaWdodCAoQykgMjAwNiBKb24gR3JpZXJzb24gPGpkQHJlbmtvLmNvLnVrPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDIsMjAwMyBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogbmlfNjV4eAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIDY1eHggc3RhdGljIGRpbyBib2FyZHMKK0F1dGhvcjogSm9uIEdyaWVyc29uIDxqZEByZW5rby5jby51az4sIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK1N0YXR1czogdGVzdGluZworRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktNjUwOSAobmlfNjV4eCksIFBYSS02NTA5LCBQQ0ktNjUxMCwgUENJLTY1MTEsCisgIFBYSS02NTExLCBQQ0ktNjUxMiwgUFhJLTY1MTIsIFBDSS02NTEzLCBQWEktNjUxMywgUENJLTY1MTQsIFBYSS02NTE0LCBQQ0ktNjUxNSwKKyAgUFhJLTY1MTUsIFBDSS02NTE2LCBQQ0ktNjUxNywgUENJLTY1MTgsIFBDSS02NTE5LCBQQ0ktNjUyMCwgUENJLTY1MjEsIFBYSS02NTIxLAorICBQQ0ktNjUyOCwgUFhJLTY1MjgKK1VwZGF0ZWQ6IFdlZCBPY3QgMTggMDg6NTk6MTEgRURUIDIwMDYKKworQmFzZWQgb24gdGhlIFBDSS02NTI3IGRyaXZlciBieSBkcy4KK1RoZSBpbnRlcnJ1cHQgc3ViZGV2aWNlIChzdWJkZXZpY2UgMykgaXMgcHJvYmFibHkgYnJva2VuIGZvciBhbGwgYm9hcmRzCitleGNlcHQgbWF5YmUgdGhlIDY1MTQuCisKKyovCisKKy8qCisgICBNYW51YWxzIChhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAubmF0aW5zdC5jb20vc3VwcG9ydC9tYW51YWxzKQorCisJMzcwMTA2Yi5wZGYJNjUxNCBSZWdpc3RlciBMZXZlbCBQcm9ncmFtbWVyIE1hbnVhbAorCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRQorI2RlZmluZSBERUJVRyAxCisjZGVmaW5lIERFQlVHX0ZMQUdTCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJtaXRlLmgiCisKKyNkZWZpbmUgTkk2NTE0X0RJT19TSVpFIDQwOTYKKyNkZWZpbmUgTkk2NTE0X01JVEVfU0laRSA0MDk2CisKKyNkZWZpbmUgTklfNjVYWF9NQVhfTlVNX1BPUlRTIDEyCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydCA9IDg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfNjV4eF9wb3J0X29mZnNldCA9IDB4MTA7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUG9ydF9EYXRhKHVuc2lnbmVkIHBvcnQpCit7CisJcmV0dXJuIDB4NDAgKyBwb3J0ICogbmlfNjV4eF9wb3J0X29mZnNldDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUG9ydF9TZWxlY3QodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gMHg0MSArIHBvcnQgKiBuaV82NXh4X3BvcnRfb2Zmc2V0OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBSaXNpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKHVuc2lnbmVkIHBvcnQpCit7CisJcmV0dXJuIDB4NDIgKyBwb3J0ICogbmlfNjV4eF9wb3J0X29mZnNldDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gMHg0MyArIHBvcnQgKiBuaV82NXh4X3BvcnRfb2Zmc2V0OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBGaWx0ZXJfRW5hYmxlKHVuc2lnbmVkIHBvcnQpCit7CisJcmV0dXJuIDB4NDQgKyBwb3J0ICogbmlfNjV4eF9wb3J0X29mZnNldDsKK30KKworI2RlZmluZSBJRF9SZWdpc3RlcgkJCQkweDAwCisKKyNkZWZpbmUgQ2xlYXJfUmVnaXN0ZXIJCQkJMHgwMQorI2RlZmluZSBDbHJFZGdlCQkJCTB4MDgKKyNkZWZpbmUgQ2xyT3ZlcmZsb3cJCQkweDA0CisKKyNkZWZpbmUgRmlsdGVyX0ludGVydmFsCQkJMHgwOAorCisjZGVmaW5lIENoYW5nZV9TdGF0dXMJCQkJMHgwMgorI2RlZmluZSBNYXN0ZXJJbnRlcnJ1cHRTdGF0dXMJCTB4MDQKKyNkZWZpbmUgT3ZlcmZsb3cJCQkweDAyCisjZGVmaW5lIEVkZ2VTdGF0dXMJCQkweDAxCisKKyNkZWZpbmUgTWFzdGVyX0ludGVycnVwdF9Db250cm9sCQkweDAzCisjZGVmaW5lIEZhbGxpbmdFZGdlSW50RW5hYmxlCQkweDEwCisjZGVmaW5lIFJpc2luZ0VkZ2VJbnRFbmFibGUJCTB4MDgKKyNkZWZpbmUgTWFzdGVySW50ZXJydXB0RW5hYmxlCQkweDA0CisjZGVmaW5lIE92ZXJmbG93SW50RW5hYmxlCQkweDAyCisjZGVmaW5lIEVkZ2VJbnRFbmFibGUJCQkweDAxCisKK3N0YXRpYyBpbnQgbmlfNjV4eF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBuaV82NXh4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX25pXzY1eHggPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfNjV4eCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bmlfNjV4eF9hdHRhY2gsCisgICAgICBkZXRhY2g6bmlfNjV4eF9kZXRhY2gsCit9OworCitzdHJ1Y3QgbmlfNjV4eF9ib2FyZCB7CisKKwlpbnQgZGV2X2lkOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbnVtX2Rpb19wb3J0czsKKwl1bnNpZ25lZCBudW1fZGlfcG9ydHM7CisJdW5zaWduZWQgbnVtX2RvX3BvcnRzOworCXVuc2lnbmVkIGludmVydF9vdXRwdXRzOjE7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5pXzY1eHhfYm9hcmQgbmlfNjV4eF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgZGV2X2lkOgkweDcwODUsCisJICAgICAgbmFtZToJInBjaS02NTA5IiwKKwkgICAgICBudW1fZGlvX3BvcnRzOjEyLAorICAgICAgaW52ZXJ0X291dHB1dHM6MH0sCisJeworCSAgICAgIGRldl9pZDoJMHgxNzEwLAorCSAgICAgIG5hbWU6CSJweGktNjUwOSIsCisJICAgICAgbnVtX2Rpb19wb3J0czoxMiwKKyAgICAgIGludmVydF9vdXRwdXRzOjB9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzEyNCwKKwkgICAgICBuYW1lOgkicGNpLTY1MTAiLAorICAgICAgbnVtX2RpX3BvcnRzOjR9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzBjMywKKwkgICAgICBuYW1lOgkicGNpLTY1MTEiLAorICAgICAgbnVtX2RpX3BvcnRzOjh9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzBkMywKKwkgICAgICBuYW1lOgkicHhpLTY1MTEiLAorICAgICAgbnVtX2RpX3BvcnRzOjh9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzBjYywKKwkgICAgICBuYW1lOgkicGNpLTY1MTIiLAorICAgICAgbnVtX2RvX3BvcnRzOjh9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzBkMiwKKwkgICAgICBuYW1lOgkicHhpLTY1MTIiLAorICAgICAgbnVtX2RvX3BvcnRzOjh9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzBjOCwKKwkgICAgICBuYW1lOgkicGNpLTY1MTMiLAorCSAgICAgIG51bV9kb19wb3J0czo4LAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGQxLAorCSAgICAgIG5hbWU6CSJweGktNjUxMyIsCisJICAgICAgbnVtX2RvX3BvcnRzOjgsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwODgsCisJICAgICAgbmFtZToJInBjaS02NTE0IiwKKwkgICAgICBudW1fZGlfcG9ydHM6NCwKKwkgICAgICBudW1fZG9fcG9ydHM6NCwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzBDRCwKKwkgICAgICBuYW1lOgkicHhpLTY1MTQiLAorCSAgICAgIG51bV9kaV9wb3J0czo0LAorCSAgICAgIG51bV9kb19wb3J0czo0LAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MDg3LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxNSIsCisJICAgICAgbnVtX2RpX3BvcnRzOjQsCisJICAgICAgbnVtX2RvX3BvcnRzOjQsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwYzksCisJICAgICAgbmFtZToJInB4aS02NTE1IiwKKwkgICAgICBudW1fZGlfcG9ydHM6NCwKKwkgICAgICBudW1fZG9fcG9ydHM6NCwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzEyNSwKKwkgICAgICBuYW1lOgkicGNpLTY1MTYiLAorCSAgICAgIG51bV9kb19wb3J0czo0LAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MTI2LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxNyIsCisJICAgICAgbnVtX2RvX3BvcnRzOjQsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxMjcsCisJICAgICAgbmFtZToJInBjaS02NTE4IiwKKwkgICAgICBudW1fZGlfcG9ydHM6MiwKKwkgICAgICBudW1fZG9fcG9ydHM6MiwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzEyOCwKKwkgICAgICBuYW1lOgkicGNpLTY1MTkiLAorCSAgICAgIG51bV9kaV9wb3J0czoyLAorCSAgICAgIG51bV9kb19wb3J0czoyLAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MWM1LAorCSAgICAgIG5hbWU6CSJwY2ktNjUyMCIsCisJICAgICAgbnVtX2RpX3BvcnRzOjEsCisJICAgICAgbnVtX2RvX3BvcnRzOjEsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MThiLAorCSAgICAgIG5hbWU6CSJwY2ktNjUyMSIsCisJICAgICAgbnVtX2RpX3BvcnRzOjEsCisJICAgICAgbnVtX2RvX3BvcnRzOjEsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MThjLAorCSAgICAgIG5hbWU6CSJweGktNjUyMSIsCisJICAgICAgbnVtX2RpX3BvcnRzOjEsCisJICAgICAgbnVtX2RvX3BvcnRzOjEsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGE5LAorCSAgICAgIG5hbWU6CSJwY2ktNjUyOCIsCisJICAgICAgbnVtX2RpX3BvcnRzOjMsCisJICAgICAgbnVtX2RvX3BvcnRzOjMsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MDg2LAorCSAgICAgIG5hbWU6CSJweGktNjUyOCIsCisJICAgICAgbnVtX2RpX3BvcnRzOjMsCisJICAgICAgbnVtX2RvX3BvcnRzOjMsCisJCX0sCit9OworCisjZGVmaW5lIG5fbmlfNjV4eF9ib2FyZHMgKHNpemVvZihuaV82NXh4X2JvYXJkcykvc2l6ZW9mKG5pXzY1eHhfYm9hcmRzWzBdKSkKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG5pXzY1eHhfYm9hcmQgKmJvYXJkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBkZXYtPmJvYXJkX3B0cjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlfNjV4eF9wb3J0X2J5X2NoYW5uZWwodW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAvIG5pXzY1eHhfY2hhbm5lbHNfcGVyX3BvcnQ7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5pXzY1eHhfdG90YWxfbnVtX3BvcnRzKGNvbnN0IHN0cnVjdCBuaV82NXh4X2JvYXJkICogYm9hcmQpCit7CisJcmV0dXJuIGJvYXJkLT5udW1fZGlvX3BvcnRzICsgYm9hcmQtPm51bV9kaV9wb3J0cyArIGJvYXJkLT5udW1fZG9fcG9ydHM7Cit9CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuaV82NXh4X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxNzEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwODUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzA4NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MDg3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwODgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBhOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGMzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBjOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGNjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwQ0QsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBkMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwZDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTI1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxMjYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEyNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxOGIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE4YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MWM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuaV82NXh4X3BjaV90YWJsZSk7CisKK3N0cnVjdCBuaV82NXh4X3ByaXZhdGUgeworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwl1bnNpZ25lZCBpbnQgZmlsdGVyX2ludGVydmFsOworCXVuc2lnbmVkIHNob3J0IGZpbHRlcl9lbmFibGVbTklfNjVYWF9NQVhfTlVNX1BPUlRTXTsKKwl1bnNpZ25lZCBzaG9ydCBvdXRwdXRfYml0c1tOSV82NVhYX01BWF9OVU1fUE9SVFNdOworCXVuc2lnbmVkIHNob3J0IGRpb19kaXJlY3Rpb25bTklfNjVYWF9NQVhfTlVNX1BPUlRTXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5pXzY1eHhfcHJpdmF0ZSAqcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlyZXR1cm4gZGV2LT5wcml2YXRlOworfQorCitzdHJ1Y3QgbmlfNjV4eF9zdWJkZXZpY2VfcHJpdmF0ZSB7CisJdW5zaWduZWQgYmFzZV9wb3J0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlfNjV4eF9zdWJkZXZpY2VfcHJpdmF0ZSAqc3ByaXZhdGUoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYpCit7CisJcmV0dXJuIHN1YmRldi0+cHJpdmF0ZTsKK30KK3N0YXRpYyBzdHJ1Y3QgbmlfNjV4eF9zdWJkZXZpY2VfcHJpdmF0ZSAqbmlfNjV4eF9hbGxvY19zdWJkZXZpY2VfcHJpdmF0ZSh2b2lkKQoreworCXN0cnVjdCBuaV82NXh4X3N1YmRldmljZV9wcml2YXRlICpzdWJkZXZfcHJpdmF0ZSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuaV82NXh4X3N1YmRldmljZV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN1YmRldl9wcml2YXRlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJldHVybiBzdWJkZXZfcHJpdmF0ZTsKK30KKworc3RhdGljIGludCBuaV82NXh4X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9jb25maWdfZmlsdGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJY29uc3QgdW5zaWduZWQgcG9ydCA9CisJCXNwcml2YXRlKHMpLT5iYXNlX3BvcnQgKyBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbChjaGFuKTsKKworCWlmIChkYXRhWzBdICE9IElOU05fQ09ORklHX0ZJTFRFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMV0pIHsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpbHRlcl9yZXNvbHV0aW9uX25zID0gMjAwOworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X2ZpbHRlcl9pbnRlcnZhbCA9IDB4ZmZmZmY7CisJCXVuc2lnbmVkIGludGVydmFsID0KKwkJCShkYXRhWzFdICsKKwkJCShmaWx0ZXJfcmVzb2x1dGlvbl9ucyAvIDIpKSAvIGZpbHRlcl9yZXNvbHV0aW9uX25zOworCQlpZiAoaW50ZXJ2YWwgPiBtYXhfZmlsdGVyX2ludGVydmFsKQorCQkJaW50ZXJ2YWwgPSBtYXhfZmlsdGVyX2ludGVydmFsOworCQlkYXRhWzFdID0gaW50ZXJ2YWwgKiBmaWx0ZXJfcmVzb2x1dGlvbl9uczsKKworCQlpZiAoaW50ZXJ2YWwgIT0gcHJpdmF0ZShkZXYpLT5maWx0ZXJfaW50ZXJ2YWwpIHsKKwkJCXdyaXRlYihpbnRlcnZhbCwKKwkJCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlGaWx0ZXJfSW50ZXJ2YWwpOworCQkJcHJpdmF0ZShkZXYpLT5maWx0ZXJfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKwkJfQorCisJCXByaXZhdGUoZGV2KS0+ZmlsdGVyX2VuYWJsZVtwb3J0XSB8PQorCQkJMSA8PCAoY2hhbiAlIG5pXzY1eHhfY2hhbm5lbHNfcGVyX3BvcnQpOworCX0gZWxzZSB7CisJCXByaXZhdGUoZGV2KS0+ZmlsdGVyX2VuYWJsZVtwb3J0XSAmPQorCQkJfigxIDw8IChjaGFuICUgbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydCkpOworCX0KKworCXdyaXRlYihwcml2YXRlKGRldiktPmZpbHRlcl9lbmFibGVbcG9ydF0sCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKHBvcnQpKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBwb3J0OworCisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwb3J0ID0gc3ByaXZhdGUocyktPmJhc2VfcG9ydCArCisJCW5pXzY1eHhfcG9ydF9ieV9jaGFubmVsKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0ZJTFRFUjoKKwkJcmV0dXJuIG5pXzY1eHhfY29uZmlnX2ZpbHRlcihkZXYsIHMsIGluc24sIGRhdGEpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCWlmIChzLT50eXBlICE9IENPTUVESV9TVUJEX0RJTykKKwkJCXJldHVybiAtRUlOVkFMOworCQlwcml2YXRlKGRldiktPmRpb19kaXJlY3Rpb25bcG9ydF0gPSBDT01FRElfT1VUUFVUOworCQl3cml0ZWIoMCwgcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfU2VsZWN0KHBvcnQpKTsKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlpZiAocy0+dHlwZSAhPSBDT01FRElfU1VCRF9ESU8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcHJpdmF0ZShkZXYpLT5kaW9fZGlyZWN0aW9uW3BvcnRdID0gQ09NRURJX0lOUFVUOworCQl3cml0ZWIoMSwgcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfU2VsZWN0KHBvcnQpKTsKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlpZiAocy0+dHlwZSAhPSBDT01FRElfU1VCRF9ESU8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGF0YVsxXSA9IHByaXZhdGUoZGV2KS0+ZGlvX2RpcmVjdGlvbltwb3J0XTsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBuaV82NXh4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGJhc2VfYml0ZmllbGRfY2hhbm5lbDsKKwljb25zdCB1bnNpZ25lZCBtYXhfcG9ydHNfcGVyX2JpdGZpZWxkID0gNTsKKwl1bnNpZ25lZCByZWFkX2JpdHMgPSAwOworCXVuc2lnbmVkIGo7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJYmFzZV9iaXRmaWVsZF9jaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJZm9yIChqID0gMDsgaiA8IG1heF9wb3J0c19wZXJfYml0ZmllbGQ7ICsraikgeworCQljb25zdCB1bnNpZ25lZCBwb3J0ID0KKwkJCXNwcml2YXRlKHMpLT5iYXNlX3BvcnQgKworCQkJbmlfNjV4eF9wb3J0X2J5X2NoYW5uZWwoYmFzZV9iaXRmaWVsZF9jaGFubmVsKSArIGo7CisJCXVuc2lnbmVkIGJhc2VfcG9ydF9jaGFubmVsOworCQl1bnNpZ25lZCBwb3J0X21hc2ssIHBvcnRfZGF0YSwgcG9ydF9yZWFkX2JpdHM7CisJCWludCBiaXRzaGlmdDsKKwkJaWYgKHBvcnQgPj0gbmlfNjV4eF90b3RhbF9udW1fcG9ydHMoYm9hcmQoZGV2KSkpCisJCQlicmVhazsKKwkJYmFzZV9wb3J0X2NoYW5uZWwgPSBwb3J0ICogbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydDsKKwkJcG9ydF9tYXNrID0gZGF0YVswXTsKKwkJcG9ydF9kYXRhID0gZGF0YVsxXTsKKwkJYml0c2hpZnQgPSBiYXNlX3BvcnRfY2hhbm5lbCAtIGJhc2VfYml0ZmllbGRfY2hhbm5lbDsKKwkJaWYgKGJpdHNoaWZ0ID49IDMyIHx8IGJpdHNoaWZ0IDw9IC0zMikKKwkJCWJyZWFrOworCQlpZiAoYml0c2hpZnQgPiAwKSB7CisJCQlwb3J0X21hc2sgPj49IGJpdHNoaWZ0OworCQkJcG9ydF9kYXRhID4+PSBiaXRzaGlmdDsKKwkJfSBlbHNlIHsKKwkJCXBvcnRfbWFzayA8PD0gLWJpdHNoaWZ0OworCQkJcG9ydF9kYXRhIDw8PSAtYml0c2hpZnQ7CisJCX0KKwkJcG9ydF9tYXNrICY9IDB4ZmY7CisJCXBvcnRfZGF0YSAmPSAweGZmOworCQlpZiAocG9ydF9tYXNrKSB7CisJCQl1bnNpZ25lZCBiaXRzOworCQkJcHJpdmF0ZShkZXYpLT5vdXRwdXRfYml0c1twb3J0XSAmPSB+cG9ydF9tYXNrOworCQkJcHJpdmF0ZShkZXYpLT5vdXRwdXRfYml0c1twb3J0XSB8PQorCQkJCXBvcnRfZGF0YSAmIHBvcnRfbWFzazsKKwkJCWJpdHMgPSBwcml2YXRlKGRldiktPm91dHB1dF9iaXRzW3BvcnRdOworCQkJaWYgKGJvYXJkKGRldiktPmludmVydF9vdXRwdXRzKQorCQkJCWJpdHMgPSB+Yml0czsKKwkJCXdyaXRlYihiaXRzLAorCQkJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCVBvcnRfRGF0YShwb3J0KSk7CisvLyAgICAgICAgICAgICAgICAgICAgICBydF9wcmludGsoIndyb3RlIDB4JXggdG8gcG9ydCAlaVxuIiwgYml0cywgcG9ydCk7CisJCX0KKwkJcG9ydF9yZWFkX2JpdHMgPQorCQkJcmVhZGIocHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCQlQb3J0X0RhdGEocG9ydCkpOworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygicmVhZCAweCV4IGZyb20gcG9ydCAlaVxuIiwgcG9ydF9yZWFkX2JpdHMsIHBvcnQpOworCQlpZiAoYml0c2hpZnQgPiAwKSB7CisJCQlwb3J0X3JlYWRfYml0cyA8PD0gYml0c2hpZnQ7CisJCX0gZWxzZSB7CisJCQlwb3J0X3JlYWRfYml0cyA+Pj0gLWJpdHNoaWZ0OworCQl9CisJCXJlYWRfYml0cyB8PSBwb3J0X3JlYWRfYml0czsKKwl9CisJZGF0YVsxXSA9IHJlYWRfYml0czsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGlycXJldHVybl90IG5pXzY1eHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkYihwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgQ2hhbmdlX1N0YXR1cyk7CisJaWYgKChzdGF0dXMgJiBNYXN0ZXJJbnRlcnJ1cHRTdGF0dXMpID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKwlpZiAoKHN0YXR1cyAmIEVkZ2VTdGF0dXMpID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCXdyaXRlYihDbHJFZGdlIHwgQ2xyT3ZlcmZsb3csCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CisKKwljb21lZGlfYnVmX3B1dChzLT5hc3luYywgMCk7CisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBuaV82NXh4X2ludHJfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfT1RIRVI7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IDEpIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfaW50cl9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvL3N0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCXdyaXRlYihDbHJFZGdlIHwgQ2xyT3ZlcmZsb3csCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CisJd3JpdGViKEZhbGxpbmdFZGdlSW50RW5hYmxlIHwgUmlzaW5nRWRnZUludEVuYWJsZSB8CisJCU1hc3RlckludGVycnVwdEVuYWJsZSB8IEVkZ2VJbnRFbmFibGUsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9pbnRyX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXdyaXRlYigweDAwLAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgTWFzdGVyX0ludGVycnVwdF9Db250cm9sKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfaW50cl9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gMDsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaV82NXh4X2ludHJfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0gIT0gSU5TTl9DT05GSUdfQ0hBTkdFX05PVElGWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZWIoZGF0YVsxXSwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCVJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMCkpOworCXdyaXRlYihkYXRhWzFdID4+IDgsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlSaXNpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDB4MTApKTsKKwl3cml0ZWIoZGF0YVsxXSA+PiAxNiwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCVJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMHgyMCkpOworCXdyaXRlYihkYXRhWzFdID4+IDI0LAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJUmlzaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDMwKSk7CisKKwl3cml0ZWIoZGF0YVsyXSwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCUZhbGxpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDApKTsKKwl3cml0ZWIoZGF0YVsyXSA+PiA4LAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMHgxMCkpOworCXdyaXRlYihkYXRhWzJdID4+IDE2LAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMHgyMCkpOworCXdyaXRlYihkYXRhWzJdID4+IDI0LAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMHgzMCkpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgaTsKKwlpbnQgcmV0OworCisJcHJpbnRrKCJjb21lZGklZDogbmlfNjV4eDoiLCBkZXYtPm1pbm9yKTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgbmlfNjV4eF9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG5pXzY1eHhfZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWl0ZV9zZXR1cChwcml2YXRlKGRldiktPm1pdGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZChkZXYpLT5uYW1lOworCWRldi0+aXJxID0gbWl0ZV9pcnEocHJpdmF0ZShkZXYpLT5taXRlKTsKKwlwcmludGsoIiAlcyIsIGRldi0+Ym9hcmRfbmFtZSk7CisKKwlwcmludGsoIiBJRD0weCUwMngiLAorCQlyZWFkYihwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgSURfUmVnaXN0ZXIpKTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpZiAoYm9hcmQoZGV2KS0+bnVtX2RpX3BvcnRzKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPQorCQkJYm9hcmQoZGV2KS0+bnVtX2RpX3BvcnRzICogbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydDsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmluc25fY29uZmlnID0gbmlfNjV4eF9kaW9faW5zbl9jb25maWc7CisJCXMtPmluc25fYml0cyA9IG5pXzY1eHhfZGlvX2luc25fYml0czsKKwkJcy0+cHJpdmF0ZSA9IG5pXzY1eHhfYWxsb2Nfc3ViZGV2aWNlX3ByaXZhdGUoKTsKKwkJaWYgKHMtPnByaXZhdGUgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzcHJpdmF0ZShzKS0+YmFzZV9wb3J0ID0gMDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWlmIChib2FyZChkZXYpLT5udW1fZG9fcG9ydHMpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9CisJCQlib2FyZChkZXYpLT5udW1fZG9fcG9ydHMgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+aW5zbl9iaXRzID0gbmlfNjV4eF9kaW9faW5zbl9iaXRzOworCQlzLT5wcml2YXRlID0gbmlfNjV4eF9hbGxvY19zdWJkZXZpY2VfcHJpdmF0ZSgpOworCQlpZiAocy0+cHJpdmF0ZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNwcml2YXRlKHMpLT5iYXNlX3BvcnQgPSBib2FyZChkZXYpLT5udW1fZGlfcG9ydHM7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlpZiAoYm9hcmQoZGV2KS0+bnVtX2Rpb19wb3J0cykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9CisJCQlib2FyZChkZXYpLT5udW1fZGlvX3BvcnRzICogbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydDsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmluc25fY29uZmlnID0gbmlfNjV4eF9kaW9faW5zbl9jb25maWc7CisJCXMtPmluc25fYml0cyA9IG5pXzY1eHhfZGlvX2luc25fYml0czsKKwkJcy0+cHJpdmF0ZSA9IG5pXzY1eHhfYWxsb2Nfc3ViZGV2aWNlX3ByaXZhdGUoKTsKKwkJaWYgKHMtPnByaXZhdGUgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzcHJpdmF0ZShzKS0+YmFzZV9wb3J0ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGJvYXJkKGRldiktPm51bV9kaW9fcG9ydHM7ICsraSkgeworCQkJLy8gY29uZmlndXJlIGFsbCBwb3J0cyBmb3IgaW5wdXQKKwkJCXdyaXRlYigweDEsCisJCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJUG9ydF9TZWxlY3QoaSkpOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5kb19jbWR0ZXN0ID0gbmlfNjV4eF9pbnRyX2NtZHRlc3Q7CisJcy0+ZG9fY21kID0gbmlfNjV4eF9pbnRyX2NtZDsKKwlzLT5jYW5jZWwgPSBuaV82NXh4X2ludHJfY2FuY2VsOworCXMtPmluc25fYml0cyA9IG5pXzY1eHhfaW50cl9pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBuaV82NXh4X2ludHJfaW5zbl9jb25maWc7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmlfNjV4eF90b3RhbF9udW1fcG9ydHMoYm9hcmQoZGV2KSk7ICsraSkgeworCQl3cml0ZWIoMHgwMCwKKwkJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKGkpKTsKKwkJaWYgKGJvYXJkKGRldiktPmludmVydF9vdXRwdXRzKQorCQkJd3JpdGViKDB4MDEsCisJCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfRGF0YShpKSk7CisJCWVsc2UKKwkJCXdyaXRlYigweDAwLAorCQkJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X0RhdGEoaSkpOworCX0KKwl3cml0ZWIoQ2xyRWRnZSB8IENsck92ZXJmbG93LAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xlYXJfUmVnaXN0ZXIpOworCXdyaXRlYigweDAwLAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgTWFzdGVyX0ludGVycnVwdF9Db250cm9sKTsKKworCS8qIFNldCBmaWx0ZXIgaW50ZXJ2YWwgdG8gMCAgKDMyYml0IHJlZykgKi8KKwl3cml0ZWIoMHgwMDAwMDAwMCwgcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9JbnRlcnZhbCk7CisKKwlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG5pXzY1eHhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJIm5pXzY1eHgiLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldi0+aXJxID0gMDsKKwkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGUiKTsKKwl9CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NXh4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAocHJpdmF0ZShkZXYpICYmIHByaXZhdGUoZGV2KS0+bWl0ZQorCQkmJiBwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyKSB7CisJCXdyaXRlYigweDAwLAorCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCQlNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCX0KKworCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCisJaWYgKHByaXZhdGUoZGV2KSkgeworCQl1bnNpZ25lZCBpOworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7ICsraSkgeworCQkJaWYgKGRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlKSB7CisJCQkJa2ZyZWUoZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUpOworCQkJCWRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlID0gTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAocHJpdmF0ZShkZXYpLT5taXRlKSB7CisJCQltaXRlX3Vuc2V0dXAocHJpdmF0ZShkZXYpLT5taXRlKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NXh4X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGU7CisJaW50IGk7CisKKwlmb3IgKG1pdGUgPSBtaXRlX2RldmljZXM7IG1pdGU7IG1pdGUgPSBtaXRlLT5uZXh0KSB7CisJCWlmIChtaXRlLT51c2VkKQorCQkJY29udGludWU7CisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBtaXRlLT5wY2lkZXYtPmJ1cy0+bnVtYmVyIHx8CisJCQkJc2xvdCAhPSBQQ0lfU0xPVChtaXRlLT5wY2lkZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbl9uaV82NXh4X2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmlfNjV4eF9ib2FyZHNbaV0uZGV2X2lkKSB7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBuaV82NXh4X2JvYXJkcyArIGk7CisJCQkJcHJpdmF0ZShkZXYpLT5taXRlID0gbWl0ZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJbWl0ZV9saXN0X2RldmljZXMoKTsKKwlyZXR1cm4gLUVJTzsKK30KKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfbmlfNjV4eCwgbmlfNjV4eF9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlMzViYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKQEAgLTAsMCArMSwxMzI0IEBACisvKgorICBjb21lZGkvZHJpdmVycy9uaV82NjB4LmMKKyAgSGFyZHdhcmUgZHJpdmVyIGZvciBOSSA2NjB4IGRldmljZXMKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisvKgorRHJpdmVyOiBuaV82NjB4CitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgNjYweCBjb3VudGVyL3RpbWVyIGJvYXJkcworRGV2aWNlczoKK1tOYXRpb25hbCBJbnN0cnVtZW50c10gUENJLTY2MDEgKG5pXzY2MHgpLCBQQ0ktNjYwMiwgUFhJLTY2MDIsCisJUFhJLTY2MDgKK0F1dGhvcjogSi5QLiBNZWxsb3IgPGpwbWVsbG9yQHJvc2UtaHVsbWFuLmVkdT4sCisJSGVybWFuLkJydXluaW5ja3hAbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlXaW0uTWVldXNzZW5AbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlLbGFhcy5HYWRleW5lQG1lY2gua3VsZXV2ZW4uYWMuYmUsCisJRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorVXBkYXRlZDogVGh1IE9jdCAxOCAxMjo1NjowNiBFRFQgMjAwNworU3RhdHVzOiBleHBlcmltZW50YWwKKworRW5jb2RlcnMgd29yay4gIFB1bHNlR2VuZXJhdGlvbiAoYm90aCBzaW5nbGUgcHVsc2UgYW5kIHB1bHNlIHRyYWluKQord29ya3MuIEJ1ZmZlcmVkIGNvbW1hbmRzIHdvcmsgZm9yIGlucHV0IGJ1dCBub3Qgb3V0cHV0LgorCitSZWZlcmVuY2VzOgorREFRIDY2MHggUmVnaXN0ZXItTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgIChOSSAzNzA1MDVBLTAxKQorREFRIDY2MDEvNjYwMiBVc2VyIE1hbnVhbCAoTkkgMzIyMTM3Qi0wMSkKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgIm1pdGUuaCIKKyNpbmNsdWRlICJuaV90aW8uaCIKKworZW51bSBuaV82NjB4X2NvbnN0YW50cyB7CisJbWluX2NvdW50ZXJfcGZpX2NoYW4gPSA4LAorCW1heF9kaW9fcGZpX2NoYW4gPSAzMSwKKwljb3VudGVyc19wZXJfY2hpcCA9IDQKK307CisKKyNkZWZpbmUgTlVNX1BGSV9DSEFOTkVMUyA0MAorLy8gcmVhbGx5IHRoZXJlIGFyZSBvbmx5IHVwIHRvIDMgZG1hIGNoYW5uZWxzLCBidXQgdGhlIHJlZ2lzdGVyIGxheW91dCBhbGxvd3MgZm9yIDQKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMIDQKKworLyogU2VlIFJlZ2lzdGVyLUxldmVsIFByb2dyYW1tZXIgTWFudWFsIHBhZ2UgMy4xICovCitlbnVtIE5JXzY2MHhfUmVnaXN0ZXIgeworCUcwSW50ZXJydXB0QWNrbm93bGVkZ2UsCisJRzBTdGF0dXNSZWdpc3RlciwKKwlHMUludGVycnVwdEFja25vd2xlZGdlLAorCUcxU3RhdHVzUmVnaXN0ZXIsCisJRzAxU3RhdHVzUmVnaXN0ZXIsCisJRzBDb21tYW5kUmVnaXN0ZXIsCisJU1RDRElPUGFyYWxsZWxJbnB1dCwKKwlHMUNvbW1hbmRSZWdpc3RlciwKKwlHMEhXU2F2ZVJlZ2lzdGVyLAorCUcxSFdTYXZlUmVnaXN0ZXIsCisJU1RDRElPT3V0cHV0LAorCVNUQ0RJT0NvbnRyb2wsCisJRzBTV1NhdmVSZWdpc3RlciwKKwlHMVNXU2F2ZVJlZ2lzdGVyLAorCUcwTW9kZVJlZ2lzdGVyLAorCUcwMUpvaW50U3RhdHVzMVJlZ2lzdGVyLAorCUcxTW9kZVJlZ2lzdGVyLAorCVNUQ0RJT1NlcmlhbElucHV0LAorCUcwTG9hZEFSZWdpc3RlciwKKwlHMDFKb2ludFN0YXR1czJSZWdpc3RlciwKKwlHMExvYWRCUmVnaXN0ZXIsCisJRzFMb2FkQVJlZ2lzdGVyLAorCUcxTG9hZEJSZWdpc3RlciwKKwlHMElucHV0U2VsZWN0UmVnaXN0ZXIsCisJRzFJbnB1dFNlbGVjdFJlZ2lzdGVyLAorCUcwQXV0b2luY3JlbWVudFJlZ2lzdGVyLAorCUcxQXV0b2luY3JlbWVudFJlZ2lzdGVyLAorCUcwMUpvaW50UmVzZXRSZWdpc3RlciwKKwlHMEludGVycnVwdEVuYWJsZSwKKwlHMUludGVycnVwdEVuYWJsZSwKKwlHMENvdW50aW5nTW9kZVJlZ2lzdGVyLAorCUcxQ291bnRpbmdNb2RlUmVnaXN0ZXIsCisJRzBTZWNvbmRHYXRlUmVnaXN0ZXIsCisJRzFTZWNvbmRHYXRlUmVnaXN0ZXIsCisJRzBETUFDb25maWdSZWdpc3RlciwKKwlHMERNQVN0YXR1c1JlZ2lzdGVyLAorCUcxRE1BQ29uZmlnUmVnaXN0ZXIsCisJRzFETUFTdGF0dXNSZWdpc3RlciwKKwlHMkludGVycnVwdEFja25vd2xlZGdlLAorCUcyU3RhdHVzUmVnaXN0ZXIsCisJRzNJbnRlcnJ1cHRBY2tub3dsZWRnZSwKKwlHM1N0YXR1c1JlZ2lzdGVyLAorCUcyM1N0YXR1c1JlZ2lzdGVyLAorCUcyQ29tbWFuZFJlZ2lzdGVyLAorCUczQ29tbWFuZFJlZ2lzdGVyLAorCUcySFdTYXZlUmVnaXN0ZXIsCisJRzNIV1NhdmVSZWdpc3RlciwKKwlHMlNXU2F2ZVJlZ2lzdGVyLAorCUczU1dTYXZlUmVnaXN0ZXIsCisJRzJNb2RlUmVnaXN0ZXIsCisJRzIzSm9pbnRTdGF0dXMxUmVnaXN0ZXIsCisJRzNNb2RlUmVnaXN0ZXIsCisJRzJMb2FkQVJlZ2lzdGVyLAorCUcyM0pvaW50U3RhdHVzMlJlZ2lzdGVyLAorCUcyTG9hZEJSZWdpc3RlciwKKwlHM0xvYWRBUmVnaXN0ZXIsCisJRzNMb2FkQlJlZ2lzdGVyLAorCUcySW5wdXRTZWxlY3RSZWdpc3RlciwKKwlHM0lucHV0U2VsZWN0UmVnaXN0ZXIsCisJRzJBdXRvaW5jcmVtZW50UmVnaXN0ZXIsCisJRzNBdXRvaW5jcmVtZW50UmVnaXN0ZXIsCisJRzIzSm9pbnRSZXNldFJlZ2lzdGVyLAorCUcySW50ZXJydXB0RW5hYmxlLAorCUczSW50ZXJydXB0RW5hYmxlLAorCUcyQ291bnRpbmdNb2RlUmVnaXN0ZXIsCisJRzNDb3VudGluZ01vZGVSZWdpc3RlciwKKwlHM1NlY29uZEdhdGVSZWdpc3RlciwKKwlHMlNlY29uZEdhdGVSZWdpc3RlciwKKwlHMkRNQUNvbmZpZ1JlZ2lzdGVyLAorCUcyRE1BU3RhdHVzUmVnaXN0ZXIsCisJRzNETUFDb25maWdSZWdpc3RlciwKKwlHM0RNQVN0YXR1c1JlZ2lzdGVyLAorCURJTzMySW5wdXQsCisJRElPMzJPdXRwdXQsCisJQ2xvY2tDb25maWdSZWdpc3RlciwKKwlHbG9iYWxJbnRlcnJ1cHRTdGF0dXNSZWdpc3RlciwKKwlETUFDb25maWdSZWdpc3RlciwKKwlHbG9iYWxJbnRlcnJ1cHRDb25maWdSZWdpc3RlciwKKwlJT0NvbmZpZ1JlZzBfMSwKKwlJT0NvbmZpZ1JlZzJfMywKKwlJT0NvbmZpZ1JlZzRfNSwKKwlJT0NvbmZpZ1JlZzZfNywKKwlJT0NvbmZpZ1JlZzhfOSwKKwlJT0NvbmZpZ1JlZzEwXzExLAorCUlPQ29uZmlnUmVnMTJfMTMsCisJSU9Db25maWdSZWcxNF8xNSwKKwlJT0NvbmZpZ1JlZzE2XzE3LAorCUlPQ29uZmlnUmVnMThfMTksCisJSU9Db25maWdSZWcyMF8yMSwKKwlJT0NvbmZpZ1JlZzIyXzIzLAorCUlPQ29uZmlnUmVnMjRfMjUsCisJSU9Db25maWdSZWcyNl8yNywKKwlJT0NvbmZpZ1JlZzI4XzI5LAorCUlPQ29uZmlnUmVnMzBfMzEsCisJSU9Db25maWdSZWczMl8zMywKKwlJT0NvbmZpZ1JlZzM0XzM1LAorCUlPQ29uZmlnUmVnMzZfMzcsCisJSU9Db25maWdSZWczOF8zOSwKKwlOdW1SZWdpc3RlcnMsCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIElPQ29uZmlnUmVnKHVuc2lnbmVkIHBmaV9jaGFubmVsKQoreworCXVuc2lnbmVkIHJlZyA9IElPQ29uZmlnUmVnMF8xICsgcGZpX2NoYW5uZWwgLyAyOworCUJVR19PTihyZWcgPiBJT0NvbmZpZ1JlZzM4XzM5KTsKKwlyZXR1cm4gcmVnOworfQorCitlbnVtIG5pXzY2MHhfcmVnaXN0ZXJfd2lkdGggeworCURBVEFfMUIsCisJREFUQV8yQiwKKwlEQVRBXzRCCit9OworCitlbnVtIG5pXzY2MHhfcmVnaXN0ZXJfZGlyZWN0aW9uIHsKKwlOSV82NjB4X1JFQUQsCisJTklfNjYweF9XUklURSwKKwlOSV82NjB4X1JFQURfV1JJVEUKK307CisKK2VudW0gbmlfNjYweF9wZmlfb3V0cHV0X3NlbGVjdCB7CisJcGZpX291dHB1dF9zZWxlY3RfaGlnaF9aID0gMCwKKwlwZmlfb3V0cHV0X3NlbGVjdF9jb3VudGVyID0gMSwKKwlwZmlfb3V0cHV0X3NlbGVjdF9kbyA9IDIsCisJbnVtX3BmaV9vdXRwdXRfc2VsZWN0cworfTsKKworZW51bSBuaV82NjB4X3N1YmRldmljZXMgeworCU5JXzY2MFhfRElPX1NVQkRFViA9IDEsCisJTklfNjYwWF9HUENUX1NVQkRFVl8wID0gMgorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfNjYwWF9HUENUX1NVQkRFVih1bnNpZ25lZCBpbmRleCkKK3sKKwlyZXR1cm4gTklfNjYwWF9HUENUX1NVQkRFVl8wICsgaW5kZXg7Cit9CisKK3N0cnVjdCBOSV82NjB4UmVnaXN0ZXJEYXRhIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIFJlZ2lzdGVyIE5hbWUKKwlpbnQgb2Zmc2V0OwkJLy8gT2Zmc2V0IGZyb20gYmFzZSBhZGRyZXNzIGZyb20gR1BDVCBjaGlwCisJZW51bSBuaV82NjB4X3JlZ2lzdGVyX2RpcmVjdGlvbiBkaXJlY3Rpb247CisJZW51bSBuaV82NjB4X3JlZ2lzdGVyX3dpZHRoIHNpemU7CS8vIDEgYnl0ZSwgMiBieXRlcywgb3IgNCBieXRlcworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IE5JXzY2MHhSZWdpc3RlckRhdGEgcmVnaXN0ZXJEYXRhW051bVJlZ2lzdGVyc10gPSB7CisJeyJHMCBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UiLCAweDAwNCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBTdGF0dXMgUmVnaXN0ZXIiLCAweDAwNCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcxIEludGVycnVwdCBBY2tub3dsZWRnZSIsIDB4MDA2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcxIFN0YXR1cyBSZWdpc3RlciIsIDB4MDA2LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzAxIFN0YXR1cyBSZWdpc3RlciAiLCAweDAwOCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcwIENvbW1hbmQgUmVnaXN0ZXIiLCAweDAwQywgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJTVEMgRElPIFBhcmFsbGVsIElucHV0IiwgMHgwMEUsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMSBDb21tYW5kIFJlZ2lzdGVyIiwgMHgwMEUsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzAgSFcgU2F2ZSBSZWdpc3RlciIsIDB4MDEwLCBOSV82NjB4X1JFQUQsIERBVEFfNEJ9LAorCXsiRzEgSFcgU2F2ZSBSZWdpc3RlciIsIDB4MDE0LCBOSV82NjB4X1JFQUQsIERBVEFfNEJ9LAorCXsiU1RDIERJTyBPdXRwdXQiLCAweDAxNCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJTVEMgRElPIENvbnRyb2wiLCAweDAxNiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBTVyBTYXZlIFJlZ2lzdGVyIiwgMHgwMTgsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMSBTVyBTYXZlIFJlZ2lzdGVyIiwgMHgwMUMsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMCBNb2RlIFJlZ2lzdGVyIiwgMHgwMzQsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzAxIEpvaW50IFN0YXR1cyAxIFJlZ2lzdGVyIiwgMHgwMzYsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMSBNb2RlIFJlZ2lzdGVyIiwgMHgwMzYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiU1RDIERJTyBTZXJpYWwgSW5wdXQiLCAweDAzOCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcwIExvYWQgQSBSZWdpc3RlciIsIDB4MDM4LCBOSV82NjB4X1dSSVRFLCBEQVRBXzRCfSwKKwl7IkcwMSBKb2ludCBTdGF0dXMgMiBSZWdpc3RlciIsIDB4MDNBLCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzAgTG9hZCBCIFJlZ2lzdGVyIiwgMHgwM0MsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzEgTG9hZCBBIFJlZ2lzdGVyIiwgMHgwNDAsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzEgTG9hZCBCIFJlZ2lzdGVyIiwgMHgwNDQsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzAgSW5wdXQgU2VsZWN0IFJlZ2lzdGVyIiwgMHgwNDgsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzEgSW5wdXQgU2VsZWN0IFJlZ2lzdGVyIiwgMHgwNEEsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzAgQXV0b2luY3JlbWVudCBSZWdpc3RlciIsIDB4MDg4LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcxIEF1dG9pbmNyZW1lbnQgUmVnaXN0ZXIiLCAweDA4QSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMDEgSm9pbnQgUmVzZXQgUmVnaXN0ZXIiLCAweDA5MCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBJbnRlcnJ1cHQgRW5hYmxlIiwgMHgwOTIsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzEgSW50ZXJydXB0IEVuYWJsZSIsIDB4MDk2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIENvdW50aW5nIE1vZGUgUmVnaXN0ZXIiLCAweDBCMCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMSBDb3VudGluZyBNb2RlIFJlZ2lzdGVyIiwgMHgwQjIsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzAgU2Vjb25kIEdhdGUgUmVnaXN0ZXIiLCAweDBCNCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMSBTZWNvbmQgR2F0ZSBSZWdpc3RlciIsIDB4MEI2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIERNQSBDb25maWcgUmVnaXN0ZXIiLCAweDBCOCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBETUEgU3RhdHVzIFJlZ2lzdGVyIiwgMHgwQjgsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMSBETUEgQ29uZmlnIFJlZ2lzdGVyIiwgMHgwQkEsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzEgRE1BIFN0YXR1cyBSZWdpc3RlciIsIDB4MEJBLCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzIgSW50ZXJydXB0IEFja25vd2xlZGdlIiwgMHgxMDQsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgU3RhdHVzIFJlZ2lzdGVyIiwgMHgxMDQsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMyBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UiLCAweDEwNiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBTdGF0dXMgUmVnaXN0ZXIiLCAweDEwNiwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcyMyBTdGF0dXMgUmVnaXN0ZXIiLCAweDEwOCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcyIENvbW1hbmQgUmVnaXN0ZXIiLCAweDEwQywgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBDb21tYW5kIFJlZ2lzdGVyIiwgMHgxMEUsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgSFcgU2F2ZSBSZWdpc3RlciIsIDB4MTEwLCBOSV82NjB4X1JFQUQsIERBVEFfNEJ9LAorCXsiRzMgSFcgU2F2ZSBSZWdpc3RlciIsIDB4MTE0LCBOSV82NjB4X1JFQUQsIERBVEFfNEJ9LAorCXsiRzIgU1cgU2F2ZSBSZWdpc3RlciIsIDB4MTE4LCBOSV82NjB4X1JFQUQsIERBVEFfNEJ9LAorCXsiRzMgU1cgU2F2ZSBSZWdpc3RlciIsIDB4MTFDLCBOSV82NjB4X1JFQUQsIERBVEFfNEJ9LAorCXsiRzIgTW9kZSBSZWdpc3RlciIsIDB4MTM0LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyMyBKb2ludCBTdGF0dXMgMSBSZWdpc3RlciIsIDB4MTM2LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzMgTW9kZSBSZWdpc3RlciIsIDB4MTM2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIExvYWQgQSBSZWdpc3RlciIsIDB4MTM4LCBOSV82NjB4X1dSSVRFLCBEQVRBXzRCfSwKKwl7IkcyMyBKb2ludCBTdGF0dXMgMiBSZWdpc3RlciIsIDB4MTNBLCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzIgTG9hZCBCIFJlZ2lzdGVyIiwgMHgxM0MsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzMgTG9hZCBBIFJlZ2lzdGVyIiwgMHgxNDAsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzMgTG9hZCBCIFJlZ2lzdGVyIiwgMHgxNDQsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzIgSW5wdXQgU2VsZWN0IFJlZ2lzdGVyIiwgMHgxNDgsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzMgSW5wdXQgU2VsZWN0IFJlZ2lzdGVyIiwgMHgxNEEsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgQXV0b2luY3JlbWVudCBSZWdpc3RlciIsIDB4MTg4LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkczIEF1dG9pbmNyZW1lbnQgUmVnaXN0ZXIiLCAweDE4QSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMjMgSm9pbnQgUmVzZXQgUmVnaXN0ZXIiLCAweDE5MCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBJbnRlcnJ1cHQgRW5hYmxlIiwgMHgxOTIsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzMgSW50ZXJydXB0IEVuYWJsZSIsIDB4MTk2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIENvdW50aW5nIE1vZGUgUmVnaXN0ZXIiLCAweDFCMCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBDb3VudGluZyBNb2RlIFJlZ2lzdGVyIiwgMHgxQjIsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzMgU2Vjb25kIEdhdGUgUmVnaXN0ZXIiLCAweDFCNiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBTZWNvbmQgR2F0ZSBSZWdpc3RlciIsIDB4MUI0LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIERNQSBDb25maWcgUmVnaXN0ZXIiLCAweDFCOCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBETUEgU3RhdHVzIFJlZ2lzdGVyIiwgMHgxQjgsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMyBETUEgQ29uZmlnIFJlZ2lzdGVyIiwgMHgxQkEsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzMgRE1BIFN0YXR1cyBSZWdpc3RlciIsIDB4MUJBLCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiMzIgYml0IERpZ2l0YWwgSW5wdXQiLCAweDQxNCwgTklfNjYweF9SRUFELCBEQVRBXzRCfSwKKwl7IjMyIGJpdCBEaWdpdGFsIE91dHB1dCIsIDB4NTEwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzRCfSwKKwl7IkNsb2NrIENvbmZpZyBSZWdpc3RlciIsIDB4NzNDLCBOSV82NjB4X1dSSVRFLCBEQVRBXzRCfSwKKwl7Ikdsb2JhbCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIiwgMHg3NTQsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJETUEgQ29uZmlndXJhdGlvbiBSZWdpc3RlciIsIDB4NzZDLCBOSV82NjB4X1dSSVRFLCBEQVRBXzRCfSwKKwl7Ikdsb2JhbCBJbnRlcnJ1cHQgQ29uZmlnIFJlZ2lzdGVyIiwgMHg3NzAsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDAtMSIsIDB4NzdDLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDItMyIsIDB4NzdFLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDQtNSIsIDB4NzgwLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDYtNyIsIDB4NzgyLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDgtOSIsIDB4Nzg0LCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDEwLTExIiwgMHg3ODYsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMTItMTMiLCAweDc4OCwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAxNC0xNSIsIDB4NzhBLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDE2LTE3IiwgMHg3OEMsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMTgtMTkiLCAweDc4RSwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAyMC0yMSIsIDB4NzkwLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDIyLTIzIiwgMHg3OTIsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMjQtMjUiLCAweDc5NCwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAyNi0yNyIsIDB4Nzk2LCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDI4LTI5IiwgMHg3OTgsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMzAtMzEiLCAweDc5QSwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAzMi0zMyIsIDB4NzlDLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDM0LTM1IiwgMHg3OUUsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMzYtMzciLCAweDdBMCwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAzOC0zOSIsIDB4N0EyLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9Cit9OworCisvLyBraW5kIG9mIEVOQUJMRSBmb3IgdGhlIHNlY29uZCBjb3VudGVyCitlbnVtIGNsb2NrX2NvbmZpZ19yZWdpc3Rlcl9iaXRzIHsKKwlDb3VudGVyU3dhcCA9IDB4MSA8PCAyMQorfTsKKworLy8gaW9jb25maWdyZWcKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW9jb25maWdfYml0c2hpZnQodW5zaWduZWQgcGZpX2NoYW5uZWwpCit7CisJaWYgKHBmaV9jaGFubmVsICUgMikKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gODsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcGZpX291dHB1dF9zZWxlY3RfbWFzayh1bnNpZ25lZCBwZmlfY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHgzIDw8IGlvY29uZmlnX2JpdHNoaWZ0KHBmaV9jaGFubmVsKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcGZpX291dHB1dF9zZWxlY3RfYml0cyh1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwl1bnNpZ25lZCBvdXRwdXRfc2VsZWN0KQoreworCXJldHVybiAob3V0cHV0X3NlbGVjdCAmIDB4MykgPDwgaW9jb25maWdfYml0c2hpZnQocGZpX2NoYW5uZWwpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwZmlfaW5wdXRfc2VsZWN0X21hc2sodW5zaWduZWQgcGZpX2NoYW5uZWwpCit7CisJcmV0dXJuIDB4NyA8PCAoNCArIGlvY29uZmlnX2JpdHNoaWZ0KHBmaV9jaGFubmVsKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBmaV9pbnB1dF9zZWxlY3RfYml0cyh1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnB1dF9zZWxlY3QpCit7CisJcmV0dXJuIChpbnB1dF9zZWxlY3QgJiAweDcpIDw8ICg0ICsgaW9jb25maWdfYml0c2hpZnQocGZpX2NoYW5uZWwpKTsKK30KKworLy8gZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYml0cworc3RhdGljIGlubGluZSB1bnNpZ25lZCBkbWFfc2VsZWN0X21hc2sodW5zaWduZWQgZG1hX2NoYW5uZWwpCit7CisJQlVHX09OKGRtYV9jaGFubmVsID49IE1BWF9ETUFfQ0hBTk5FTCk7CisJcmV0dXJuIDB4MWYgPDwgKDggKiBkbWFfY2hhbm5lbCk7Cit9CitlbnVtIGRtYV9zZWxlY3Rpb24geworCWRtYV9zZWxlY3Rpb25fbm9uZSA9IDB4MWYsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBkbWFfc2VsZWN0aW9uX2NvdW50ZXIodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlCVUdfT04oY291bnRlcl9pbmRleCA+PSBjb3VudGVyc19wZXJfY2hpcCk7CisJcmV0dXJuIGNvdW50ZXJfaW5kZXg7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRtYV9zZWxlY3RfYml0cyh1bnNpZ25lZCBkbWFfY2hhbm5lbCwgdW5zaWduZWQgc2VsZWN0aW9uKQoreworCUJVR19PTihkbWFfY2hhbm5lbCA+PSBNQVhfRE1BX0NIQU5ORUwpOworCXJldHVybiAoc2VsZWN0aW9uIDw8ICg4ICogZG1hX2NoYW5uZWwpKSAmIGRtYV9zZWxlY3RfbWFzayhkbWFfY2hhbm5lbCk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRtYV9yZXNldF9iaXQodW5zaWduZWQgZG1hX2NoYW5uZWwpCit7CisJQlVHX09OKGRtYV9jaGFubmVsID49IE1BWF9ETUFfQ0hBTk5FTCk7CisJcmV0dXJuIDB4ODAgPDwgKDggKiBkbWFfY2hhbm5lbCk7Cit9CisKK2VudW0gZ2xvYmFsX2ludGVycnVwdF9zdGF0dXNfcmVnaXN0ZXJfYml0cyB7CisJQ291bnRlcl8wX0ludF9CaXQgPSAweDEwMCwKKwlDb3VudGVyXzFfSW50X0JpdCA9IDB4MjAwLAorCUNvdW50ZXJfMl9JbnRfQml0ID0gMHg0MDAsCisJQ291bnRlcl8zX0ludF9CaXQgPSAweDgwMCwKKwlDYXNjYWRlX0ludF9CaXQgPSAweDIwMDAwMDAwLAorCUdsb2JhbF9JbnRfQml0ID0gMHg4MDAwMDAwMAorfTsKKworZW51bSBnbG9iYWxfaW50ZXJydXB0X2NvbmZpZ19yZWdpc3Rlcl9iaXRzIHsKKwlDYXNjYWRlX0ludF9FbmFibGVfQml0ID0gMHgyMDAwMDAwMCwKKwlHbG9iYWxfSW50X1BvbGFyaXR5X0JpdCA9IDB4NDAwMDAwMDAsCisJR2xvYmFsX0ludF9FbmFibGVfQml0ID0gMHg4MDAwMDAwMAorfTsKKworLy8gT2Zmc2V0IG9mIHRoZSBHUENUIGNoaXBzIGZyb20gdGhlIGJhc2UtYWRyZXNzIG9mIHRoZSBjYXJkCitzdGF0aWMgY29uc3QgdW5zaWduZWQgR1BDVF9PRkZTRVRbMl0gPSB7IDB4MCwgMHg4MDAgfTsJLyogRmlyc3QgY2hpcCBpcyBhdCBiYXNlLWFkZHJlc3MgKworCQkJCQkJCSAgIDB4MDAsIGV0Yy4gKi8KKworLyogQm9hcmQgZGVzY3JpcHRpb24qLworc3RydWN0IG5pXzY2MHhfYm9hcmQgeworCXVuc2lnbmVkIHNob3J0IGRldl9pZDsJLyogYGxzcGNpYCB3aWxsIHNob3cgeW91IHRoaXMgKi8KKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIG5fY2hpcHM7CS8qIHRvdGFsIG51bWJlciBvZiBUSU8gY2hpcHMgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmlfNjYweF9ib2FyZCBuaV82NjB4X2JvYXJkc1tdID0geworCXsKKwkgICAgICBkZXZfaWQ6CTB4MmM2MCwKKwkgICAgICBuYW1lOgkiUENJLTY2MDEiLAorCSAgICAgIG5fY2hpcHM6CTEsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgxMzEwLAorCSAgICAgIG5hbWU6CSJQQ0ktNjYwMiIsCisJICAgICAgbl9jaGlwczoJMiwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEzNjAsCisJICAgICAgbmFtZToJIlBYSS02NjAyIiwKKwkgICAgICBuX2NoaXBzOgkyLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MmNjMCwKKwkgICAgICBuYW1lOgkiUFhJLTY2MDgiLAorCSAgICAgIG5fY2hpcHM6CTIsCisJCX0sCit9OworCisjZGVmaW5lIE5JXzY2MFhfTUFYX05VTV9DSElQUyAyCisjZGVmaW5lIE5JXzY2MFhfTUFYX05VTV9DT1VOVEVSUyAoTklfNjYwWF9NQVhfTlVNX0NISVBTICogY291bnRlcnNfcGVyX2NoaXApCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuaV82NjB4X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYzYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEzMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTM2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyY2MwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuaV82NjB4X3BjaV90YWJsZSk7CisKK3N0cnVjdCBuaV82NjB4X3ByaXZhdGUgeworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2OworCXVpbnQ2NF90IHBmaV9kaXJlY3Rpb25fYml0czsKKwlzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nCisJKm1pdGVfcmluZ3NbTklfNjYwWF9NQVhfTlVNX0NISVBTXVtjb3VudGVyc19wZXJfY2hpcF07CisJc3BpbmxvY2tfdCBtaXRlX2NoYW5uZWxfbG9jazsKKwl1bnNpZ25lZCBkbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tOSV82NjBYX01BWF9OVU1fQ0hJUFNdOworCXNwaW5sb2NrX3Qgc29mdF9yZWdfY29weV9sb2NrOworCXVuc2lnbmVkIHNob3J0IHBmaV9vdXRwdXRfc2VsZWN0c1tOVU1fUEZJX0NIQU5ORUxTXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5pXzY2MHhfcHJpdmF0ZSAqcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlyZXR1cm4gZGV2LT5wcml2YXRlOworfQorCisvKiBpbml0aWFsaXplZCBpbiBuaV82NjB4X2ZpbmRfZGV2aWNlKCkgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG5pXzY2MHhfYm9hcmQgKmJvYXJkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBkZXYtPmJvYXJkX3B0cjsKK30KKworI2RlZmluZSBuX25pXzY2MHhfYm9hcmRzIChzaXplb2YobmlfNjYweF9ib2FyZHMpL3NpemVvZihuaV82NjB4X2JvYXJkc1swXSkpCisKK3N0YXRpYyBpbnQgbmlfNjYweF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBuaV82NjB4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBpbml0X3Rpb19jaGlwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hpcHNldCk7CitzdGF0aWMgdm9pZCBuaV82NjB4X3NlbGVjdF9wZmlfb3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwl1bnNpZ25lZCBvdXRwdXRfc2VsZWN0KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9uaV82NjB4ID0geworICAgICAgZHJpdmVyX25hbWU6Im5pXzY2MHgiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm5pXzY2MHhfYXR0YWNoLAorICAgICAgZGV0YWNoOm5pXzY2MHhfZGV0YWNoLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfbmlfNjYweCwgbmlfNjYweF9wY2lfdGFibGUpOworCitzdGF0aWMgaW50IG5pXzY2MHhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KTsKK3N0YXRpYyBpbnQgbmlfNjYweF9zZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4sCisJdW5zaWduZWQgc291cmNlKTsKKworLyogUG9zc2libGUgaW5zdHJ1Y3Rpb25zIGZvciBhIEdQQ1QgKi8KK3N0YXRpYyBpbnQgbmlfNjYweF9HUENUX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pXzY2MHhfR1BDVF9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV82NjB4X0dQQ1Rfd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworLyogUG9zc2libGUgaW5zdHJ1Y3Rpb25zIGZvciBEaWdpdGFsIElPICovCitzdGF0aWMgaW50IG5pXzY2MHhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pXzY2MHhfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5pXzY2MHhfbnVtX2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBib2FyZChkZXYpLT5uX2NoaXBzICogY291bnRlcnNfcGVyX2NoaXA7Cit9CisKK3N0YXRpYyBlbnVtIE5JXzY2MHhfUmVnaXN0ZXIgbmlfZ3BjdF90b182NjB4X3JlZ2lzdGVyKGVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpCit7CisJZW51bSBOSV82NjB4X1JlZ2lzdGVyIG5pXzY2MHhfcmVnaXN0ZXI7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIE5JVElPX0cwX0F1dG9pbmNyZW1lbnRfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBBdXRvaW5jcmVtZW50UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfQXV0b2luY3JlbWVudF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMUF1dG9pbmNyZW1lbnRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9BdXRvaW5jcmVtZW50X1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyQXV0b2luY3JlbWVudFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0F1dG9pbmNyZW1lbnRfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNBdXRvaW5jcmVtZW50UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfQ29tbWFuZF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMENvbW1hbmRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9Db21tYW5kX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxQ29tbWFuZFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0NvbW1hbmRfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJDb21tYW5kUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfQ29tbWFuZF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0NvbW1hbmRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9IV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwSFdTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfSFdfU2F2ZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMUhXU2F2ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0hXX1NhdmVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJIV1NhdmVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19IV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczSFdTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfU1dfU2F2ZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMFNXU2F2ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX1NXX1NhdmVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFTV1NhdmVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9TV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyU1dTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfU1dfU2F2ZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM1NXU2F2ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX01vZGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMU1vZGVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9Nb2RlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyTW9kZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX01vZGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfTG9hZEFfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBMb2FkQVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0xvYWRBX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxTG9hZEFSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9Mb2FkQV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkxvYWRBUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfTG9hZEFfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNMb2FkQVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0xvYWRCX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwTG9hZEJSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9Mb2FkQl9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMUxvYWRCUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfTG9hZEJfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJMb2FkQlJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0xvYWRCX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczTG9hZEJSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9JbnB1dF9TZWxlY3RfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBJbnB1dFNlbGVjdFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0lucHV0X1NlbGVjdF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMUlucHV0U2VsZWN0UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfSW5wdXRfU2VsZWN0X1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcySW5wdXRTZWxlY3RSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19JbnB1dF9TZWxlY3RfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNJbnB1dFNlbGVjdFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwMV9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzAxU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzIzX1N0YXR1c19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMjNTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfUmVzZXRfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzAxSm9pbnRSZXNldFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyM19Kb2ludF9SZXNldF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMjNKb2ludFJlc2V0UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzAxX0pvaW50X1N0YXR1czFfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzAxSm9pbnRTdGF0dXMxUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzIzX0pvaW50X1N0YXR1czFfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzIzSm9pbnRTdGF0dXMxUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzAxX0pvaW50X1N0YXR1czJfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzAxSm9pbnRTdGF0dXMyUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzIzX0pvaW50X1N0YXR1czJfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzIzSm9pbnRTdGF0dXMyUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfQ291bnRpbmdfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMENvdW50aW5nTW9kZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0NvdW50aW5nX01vZGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFDb3VudGluZ01vZGVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9Db3VudGluZ19Nb2RlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyQ291bnRpbmdNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfQ291bnRpbmdfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0NvdW50aW5nTW9kZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX1NlY29uZF9HYXRlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwU2Vjb25kR2F0ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX1NlY29uZF9HYXRlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxU2Vjb25kR2F0ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX1NlY29uZF9HYXRlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyU2Vjb25kR2F0ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX1NlY29uZF9HYXRlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczU2Vjb25kR2F0ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0RNQV9Db25maWdfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBETUFDb25maWdSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9ETUFfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwRE1BU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfRE1BX0NvbmZpZ19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMURNQUNvbmZpZ1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0RNQV9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFETUFTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9ETUFfQ29uZmlnX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyRE1BQ29uZmlnUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfRE1BX1N0YXR1c19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkRNQVN0YXR1c1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0RNQV9Db25maWdfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNETUFDb25maWdSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19ETUFfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczRE1BU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwSW50ZXJydXB0QWNrbm93bGVkZ2U7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxSW50ZXJydXB0QWNrbm93bGVkZ2U7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcySW50ZXJydXB0QWNrbm93bGVkZ2U7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczSW50ZXJydXB0QWNrbm93bGVkZ2U7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfSW50ZXJydXB0X0VuYWJsZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMEludGVycnVwdEVuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxSW50ZXJydXB0RW5hYmxlOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0ludGVycnVwdF9FbmFibGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJJbnRlcnJ1cHRFbmFibGU7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfSW50ZXJydXB0X0VuYWJsZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0ludGVycnVwdEVuYWJsZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCIlczogdW5oYW5kbGVkIHJlZ2lzdGVyIDB4JXggaW4gc3dpdGNoLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVnKTsKKwkJQlVHKCk7CisJCXJldHVybiAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIG5pXzY2MHhfcmVnaXN0ZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV82NjB4X3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGNoaXBfaW5kZXgsIHVuc2lnbmVkIGJpdHMsIGVudW0gTklfNjYweF9SZWdpc3RlciByZWcpCit7CisJdm9pZCAqY29uc3Qgd3JpdGVfYWRkcmVzcyA9CisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHUENUX09GRlNFVFtjaGlwX2luZGV4XSArCisJCXJlZ2lzdGVyRGF0YVtyZWddLm9mZnNldDsKKworCXN3aXRjaCAocmVnaXN0ZXJEYXRhW3JlZ10uc2l6ZSkgeworCWNhc2UgREFUQV8yQjoKKwkJd3JpdGV3KGJpdHMsIHdyaXRlX2FkZHJlc3MpOworCQlicmVhazsKKwljYXNlIERBVEFfNEI6CisJCXdyaXRlbChiaXRzLCB3cml0ZV9hZGRyZXNzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCIlczogJXM6IGJ1ZyEgdW5oYW5kbGVkIGNhc2UgKHJlZz0weCV4KSBpbiBzd2l0Y2guXG4iLAorCQkJX19GSUxFX18sIF9fRlVOQ1RJT05fXywgcmVnKTsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBuaV82NjB4X3JlYWRfcmVnaXN0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgY2hpcF9pbmRleCwgZW51bSBOSV82NjB4X1JlZ2lzdGVyIHJlZykKK3sKKwl2b2lkICpjb25zdCByZWFkX2FkZHJlc3MgPQorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgR1BDVF9PRkZTRVRbY2hpcF9pbmRleF0gKworCQlyZWdpc3RlckRhdGFbcmVnXS5vZmZzZXQ7CisKKwlzd2l0Y2ggKHJlZ2lzdGVyRGF0YVtyZWddLnNpemUpIHsKKwljYXNlIERBVEFfMkI6CisJCXJldHVybiByZWFkdyhyZWFkX2FkZHJlc3MpOworCQlicmVhazsKKwljYXNlIERBVEFfNEI6CisJCXJldHVybiByZWFkbChyZWFkX2FkZHJlc3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIiVzOiAlczogYnVnISB1bmhhbmRsZWQgY2FzZSAocmVnPTB4JXgpIGluIHN3aXRjaC5cbiIsCisJCQlfX0ZJTEVfXywgX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV9ncGN0X3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBiaXRzLAorCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2LT5kZXY7CisJZW51bSBOSV82NjB4X1JlZ2lzdGVyIG5pXzY2MHhfcmVnaXN0ZXIgPSBuaV9ncGN0X3RvXzY2MHhfcmVnaXN0ZXIocmVnKTsKKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgY291bnRlci0+Y2hpcF9pbmRleCwgYml0cywKKwkJbmlfNjYweF9yZWdpc3Rlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9ncGN0X3JlYWRfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXYtPmRldjsKKwllbnVtIE5JXzY2MHhfUmVnaXN0ZXIgbmlfNjYweF9yZWdpc3RlciA9IG5pX2dwY3RfdG9fNjYweF9yZWdpc3RlcihyZWcpOworCXJldHVybiBuaV82NjB4X3JlYWRfcmVnaXN0ZXIoZGV2LCBjb3VudGVyLT5jaGlwX2luZGV4LAorCQluaV82NjB4X3JlZ2lzdGVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICptaXRlX3Jpbmcoc3RydWN0IG5pXzY2MHhfcHJpdmF0ZSAqIHByaXYsCisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJcmV0dXJuIHByaXYtPm1pdGVfcmluZ3NbY291bnRlci0+Y2hpcF9pbmRleF1bY291bnRlci0+Y291bnRlcl9pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV82NjB4X3NldF9kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBtaXRlX2NoYW5uZWwsIHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZwcml2YXRlKGRldiktPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworCXByaXZhdGUoZGV2KS0+ZG1hX2NvbmZpZ3VyYXRpb25fc29mdF9jb3BpZXNbY291bnRlci0+Y2hpcF9pbmRleF0gJj0KKwkJfmRtYV9zZWxlY3RfbWFzayhtaXRlX2NoYW5uZWwpOworCXByaXZhdGUoZGV2KS0+ZG1hX2NvbmZpZ3VyYXRpb25fc29mdF9jb3BpZXNbY291bnRlci0+Y2hpcF9pbmRleF0gfD0KKwkJZG1hX3NlbGVjdF9iaXRzKG1pdGVfY2hhbm5lbCwKKwkJZG1hX3NlbGVjdGlvbl9jb3VudGVyKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgY291bnRlci0+Y2hpcF9pbmRleCwKKwkJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjb3VudGVyLT4KKwkJCWNoaXBfaW5kZXhdIHwgZG1hX3Jlc2V0X2JpdChtaXRlX2NoYW5uZWwpLAorCQlETUFDb25maWdSZWdpc3Rlcik7CisJbW1pb3diKCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXZhdGUoZGV2KS0+c29mdF9yZWdfY29weV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV82NjB4X3Vuc2V0X2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIG1pdGVfY2hhbm5lbCwgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnByaXZhdGUoZGV2KS0+c29mdF9yZWdfY29weV9sb2NrLCBmbGFncyk7CisJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjb3VudGVyLT5jaGlwX2luZGV4XSAmPQorCQl+ZG1hX3NlbGVjdF9tYXNrKG1pdGVfY2hhbm5lbCk7CisJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjb3VudGVyLT5jaGlwX2luZGV4XSB8PQorCQlkbWFfc2VsZWN0X2JpdHMobWl0ZV9jaGFubmVsLCBkbWFfc2VsZWN0aW9uX25vbmUpOworCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjb3VudGVyLT5jaGlwX2luZGV4LAorCQlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NvdW50ZXItPgorCQkJY2hpcF9pbmRleF0sIERNQUNvbmZpZ1JlZ2lzdGVyKTsKKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdmF0ZShkZXYpLT5zb2Z0X3JlZ19jb3B5X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X3JlcXVlc3RfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBlbnVtIGNvbWVkaV9pb19kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZwcml2YXRlKGRldiktPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKGNvdW50ZXItPm1pdGVfY2hhbik7CisJbWl0ZV9jaGFuID0KKwkJbWl0ZV9yZXF1ZXN0X2NoYW5uZWwocHJpdmF0ZShkZXYpLT5taXRlLCBtaXRlX3JpbmcocHJpdmF0ZShkZXYpLAorCQkJY291bnRlcikpOworCWlmIChtaXRlX2NoYW4gPT0gTlVMTCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdmF0ZShkZXYpLT5taXRlX2NoYW5uZWxfbG9jaywKKwkJCWZsYWdzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJmYWlsZWQgdG8gcmVzZXJ2ZSBtaXRlIGRtYSBjaGFubmVsIGZvciBjb3VudGVyLiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwltaXRlX2NoYW4tPmRpciA9IGRpcmVjdGlvbjsKKwluaV90aW9fc2V0X21pdGVfY2hhbm5lbChjb3VudGVyLCBtaXRlX2NoYW4pOworCW5pXzY2MHhfc2V0X2RtYV9jaGFubmVsKGRldiwgbWl0ZV9jaGFuLT5jaGFubmVsLCBjb3VudGVyKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdmF0ZShkZXYpLT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCit2b2lkIG5pXzY2MHhfcmVsZWFzZV9taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnByaXZhdGUoZGV2KS0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoY291bnRlci0+bWl0ZV9jaGFuKSB7CisJCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiA9IGNvdW50ZXItPm1pdGVfY2hhbjsKKworCQluaV82NjB4X3Vuc2V0X2RtYV9jaGFubmVsKGRldiwgbWl0ZV9jaGFuLT5jaGFubmVsLCBjb3VudGVyKTsKKwkJbmlfdGlvX3NldF9taXRlX2NoYW5uZWwoY291bnRlciwgTlVMTCk7CisJCW1pdGVfcmVsZWFzZV9jaGFubmVsKG1pdGVfY2hhbik7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2YXRlKGRldiktPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgcmV0dmFsOworCisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIgPSBzdWJkZXZfdG9fY291bnRlcihzKTsKKy8vICAgICAgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJcmV0dmFsID0gbmlfNjYweF9yZXF1ZXN0X21pdGVfY2hhbm5lbChkZXYsIGNvdW50ZXIsIENPTUVESV9JTlBVVCk7CisJaWYgKHJldHZhbCkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIm5vIGRtYSBjaGFubmVsIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IGNvdW50ZXIiKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJbmlfdGlvX2Fja25vd2xlZGdlX2FuZF9jb25maXJtKGNvdW50ZXIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCXJldHZhbCA9IG5pX3Rpb19jbWQoY291bnRlciwgcy0+YXN5bmMpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBuaV82NjB4X2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHN1YmRldl90b19jb3VudGVyKHMpOworCisJcmV0dXJuIG5pX3Rpb19jbWR0ZXN0KGNvdW50ZXIsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHN1YmRldl90b19jb3VudGVyKHMpOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBuaV90aW9fY2FuY2VsKGNvdW50ZXIpOworCW5pXzY2MHhfcmVsZWFzZV9taXRlX2NoYW5uZWwoZGV2LCBjb3VudGVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBzZXRfdGlvX2NvdW50ZXJzd2FwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hpcHNldCkKK3sKKwkvKiBTZWUgUC4gMy41IG9mIHRoZSBSZWdpc3Rlci1MZXZlbCBQcm9ncmFtbWluZyBtYW51YWwuICBUaGUKKwkgICBDb3VudGVyU3dhcCBiaXQgaGFzIHRvIGJlIHNldCBvbiB0aGUgc2Vjb25kIGNoaXAsIG90aGVyd2lzZQorCSAgIGl0IHdpbGwgdHJ5IHRvIHVzZSB0aGUgc2FtZSBwaW5zIGFzIHRoZSBmaXJzdCBjaGlwLgorCSAqLworCWlmIChjaGlwc2V0KQorCQluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgY2hpcHNldCwgQ291bnRlclN3YXAsCisJCQlDbG9ja0NvbmZpZ1JlZ2lzdGVyKTsKKwllbHNlCisJCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjaGlwc2V0LCAwLCBDbG9ja0NvbmZpZ1JlZ2lzdGVyKTsKK30KKworc3RhdGljIHZvaWQgbmlfNjYweF9oYW5kbGVfZ3BjdF9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCW5pX3Rpb19oYW5kbGVfaW50ZXJydXB0KHN1YmRldl90b19jb3VudGVyKHMpLCBzKTsKKwlpZiAocy0+YXN5bmMtPmV2ZW50cykgeworCQlpZiAocy0+YXN5bmMtPgorCQkJZXZlbnRzICYgKENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1IgfAorCQkJCUNPTUVESV9DQl9PVkVSRkxPVykpIHsKKwkJCW5pXzY2MHhfY2FuY2VsKGRldiwgcyk7CisJCX0KKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmlfNjYweF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBpOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCXNtcF9tYigpOworCWZvciAoaSA9IDA7IGkgPCBuaV82NjB4X251bV9jb3VudGVycyhkZXYpOyArK2kpIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JXzY2MFhfR1BDVF9TVUJERVYoaSk7CisJCW5pXzY2MHhfaGFuZGxlX2dwY3RfaW50ZXJydXB0KGRldiwgcyk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBuaV82NjB4X2J1Zl9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UobWl0ZV9yaW5nKHByaXZhdGUoZGV2KSwgc3ViZGV2X3RvX2NvdW50ZXIocykpLAorCQlzLT5hc3luYyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NjB4X2FsbG9jYXRlX3ByaXZhdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBpOworCisJaWYgKChyZXR2YWwgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBuaV82NjB4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCXNwaW5fbG9ja19pbml0KCZwcml2YXRlKGRldiktPm1pdGVfY2hhbm5lbF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdmF0ZShkZXYpLT5zb2Z0X3JlZ19jb3B5X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBOVU1fUEZJX0NIQU5ORUxTOyArK2kpIHsKKwkJcHJpdmF0ZShkZXYpLT5wZmlfb3V0cHV0X3NlbGVjdHNbaV0gPSBwZmlfb3V0cHV0X3NlbGVjdF9jb3VudGVyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NjB4X2FsbG9jX21pdGVfcmluZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaTsKKwl1bnNpZ25lZCBqOworCisJZm9yIChpID0gMDsgaSA8IGJvYXJkKGRldiktPm5fY2hpcHM7ICsraSkgeworCQlmb3IgKGogPSAwOyBqIDwgY291bnRlcnNfcGVyX2NoaXA7ICsraikgeworCQkJcHJpdmF0ZShkZXYpLT5taXRlX3JpbmdzW2ldW2pdID0KKwkJCQltaXRlX2FsbG9jX3JpbmcocHJpdmF0ZShkZXYpLT5taXRlKTsKKwkJCWlmIChwcml2YXRlKGRldiktPm1pdGVfcmluZ3NbaV1bal0gPT0gTlVMTCkgeworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV82NjB4X2ZyZWVfbWl0ZV9yaW5ncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpOworCXVuc2lnbmVkIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKSB7CisJCWZvciAoaiA9IDA7IGogPCBjb3VudGVyc19wZXJfY2hpcDsgKytqKSB7CisJCQltaXRlX2ZyZWVfcmluZyhwcml2YXRlKGRldiktPm1pdGVfcmluZ3NbaV1bal0pOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG5pXzY2MHhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQ7CisJdW5zaWduZWQgaTsKKwl1bnNpZ25lZCBnbG9iYWxfaW50ZXJydXB0X2NvbmZpZ19iaXRzOworCisJcHJpbnRrKCJjb21lZGklZDogbmlfNjYweDogIiwgZGV2LT5taW5vcik7CisKKwlyZXQgPSBuaV82NjB4X2FsbG9jYXRlX3ByaXZhdGUoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBuaV82NjB4X2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkKGRldiktPm5hbWU7CisKKwlyZXQgPSBtaXRlX3NldHVwMihwcml2YXRlKGRldiktPm1pdGUsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY29tZWRpX3NldF9od19kZXYoZGV2LCAmcHJpdmF0ZShkZXYpLT5taXRlLT5wY2lkZXYtPmRldik7CisJcmV0ID0gbmlfNjYweF9hbGxvY19taXRlX3JpbmdzKGRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoIiAlcyAiLCBkZXYtPmJvYXJkX25hbWUpOworCisJZGV2LT5uX3N1YmRldmljZXMgPSAyICsgTklfNjYwWF9NQVhfTlVNX0NPVU5URVJTOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCBkZXYtPm5fc3ViZGV2aWNlcykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIE9sZCBHRU5FUkFMLVBVUlBPU0UgQ09VTlRFUi9USU1FIChHUENUKSBzdWJkZXZpY2UsIG5vIGxvbmdlciB1c2VkICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV82NjBYX0RJT19TVUJERVY7CisJLyogRElHSVRBTCBJL08gU1VCREVWSUNFICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gTlVNX1BGSV9DSEFOTkVMUzsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IG5pXzY2MHhfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pXzY2MHhfZGlvX2luc25fY29uZmlnOworCXMtPmlvX2JpdHMgPSAwOwkJLyogYWxsIGJpdHMgZGVmYXVsdCB0byBpbnB1dCAqLworCS8vIHdlIHVzZSB0aGUgaW9jb25maWcgcmVnaXN0ZXJzIHRvIGNvbnRyb2wgZGlvIGRpcmVjdGlvbiwgc28gemVybyBvdXRwdXQgZW5hYmxlcyBpbiBzdGMgZGlvIGNvbnRyb2wgcmVnCisJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIDAsIDAsIFNUQ0RJT0NvbnRyb2wpOworCisJcHJpdmF0ZShkZXYpLT5jb3VudGVyX2RldiA9IG5pX2dwY3RfZGV2aWNlX2NvbnN0cnVjdChkZXYsCisJCSZuaV9ncGN0X3dyaXRlX3JlZ2lzdGVyLCAmbmlfZ3BjdF9yZWFkX3JlZ2lzdGVyLAorCQluaV9ncGN0X3ZhcmlhbnRfNjYweCwgbmlfNjYweF9udW1fY291bnRlcnMoZGV2KSk7CisJaWYgKHByaXZhdGUoZGV2KS0+Y291bnRlcl9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IE5JXzY2MFhfTUFYX05VTV9DT1VOVEVSUzsgKytpKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV82NjBYX0dQQ1RfU1VCREVWKGkpOworCQlpZiAoaSA8IG5pXzY2MHhfbnVtX2NvdW50ZXJzKGRldikpIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfTFNBTVBMIHwKKwkJCQlTREZfQ01EX1JFQUQgLyogfCBTREZfQ01EX1dSSVRFICovIDsKKwkJCXMtPm5fY2hhbiA9IDM7CisJCQlzLT5tYXhkYXRhID0gMHhmZmZmZmZmZjsKKwkJCXMtPmluc25fcmVhZCA9IG5pXzY2MHhfR1BDVF9yaW5zbjsKKwkJCXMtPmluc25fd3JpdGUgPSBuaV82NjB4X0dQQ1Rfd2luc247CisJCQlzLT5pbnNuX2NvbmZpZyA9IG5pXzY2MHhfR1BDVF9pbnNuX2NvbmZpZzsKKwkJCXMtPmRvX2NtZCA9ICZuaV82NjB4X2NtZDsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJCQlzLT5kb19jbWR0ZXN0ID0gJm5pXzY2MHhfY21kdGVzdDsKKwkJCXMtPmNhbmNlbCA9ICZuaV82NjB4X2NhbmNlbDsKKwkJCXMtPmFzeW5jX2RtYV9kaXIgPSBETUFfQklESVJFQ1RJT05BTDsKKwkJCXMtPmJ1Zl9jaGFuZ2UgPSAmbmlfNjYweF9idWZfY2hhbmdlOworCQkJcy0+cHJpdmF0ZSA9ICZwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tpXTsKKworCQkJcHJpdmF0ZShkZXYpLT5jb3VudGVyX2Rldi0+Y291bnRlcnNbaV0uY2hpcF9pbmRleCA9CisJCQkJaSAvIGNvdW50ZXJzX3Blcl9jaGlwOworCQkJcHJpdmF0ZShkZXYpLT5jb3VudGVyX2Rldi0+Y291bnRlcnNbaV0uY291bnRlcl9pbmRleCA9CisJCQkJaSAlIGNvdW50ZXJzX3Blcl9jaGlwOworCQl9IGVsc2UgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKSB7CisJCWluaXRfdGlvX2NoaXAoZGV2LCBpKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG5pXzY2MHhfbnVtX2NvdW50ZXJzKGRldik7ICsraSkgeworCQluaV90aW9faW5pdF9jb3VudGVyKCZwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tpXSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBOVU1fUEZJX0NIQU5ORUxTOyArK2kpIHsKKwkJaWYgKGkgPCBtaW5fY291bnRlcl9wZmlfY2hhbikKKwkJCW5pXzY2MHhfc2V0X3BmaV9yb3V0aW5nKGRldiwgaSwgcGZpX291dHB1dF9zZWxlY3RfZG8pOworCQllbHNlCisJCQluaV82NjB4X3NldF9wZmlfcm91dGluZyhkZXYsIGksCisJCQkJcGZpX291dHB1dF9zZWxlY3RfY291bnRlcik7CisJCW5pXzY2MHhfc2VsZWN0X3BmaV9vdXRwdXQoZGV2LCBpLCBwZmlfb3V0cHV0X3NlbGVjdF9oaWdoX1opOworCX0KKwkvKiB0byBiZSBzYWZlLCBzZXQgY291bnRlcnN3YXAgYml0cyBvbiB0aW8gY2hpcHMgYWZ0ZXIgYWxsIHRoZSBjb3VudGVyCisJICAgb3V0cHV0cyBoYXZlIGJlZW4gc2V0IHRvIGhpZ2ggaW1wZWRhbmNlIG1vZGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKSB7CisJCXNldF90aW9fY291bnRlcnN3YXAoZGV2LCBpKTsKKwl9CisJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEobWl0ZV9pcnEocHJpdmF0ZShkZXYpLT5taXRlKSwKKwkJCQkmbmlfNjYweF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAibmlfNjYweCIsCisJCQkJZGV2KSkgPCAwKSB7CisJCXByaW50aygiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2LT5pcnEgPSBtaXRlX2lycShwcml2YXRlKGRldiktPm1pdGUpOworCWdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHMgPSBHbG9iYWxfSW50X0VuYWJsZV9CaXQ7CisJaWYgKGJvYXJkKGRldiktPm5fY2hpcHMgPiAxKQorCQlnbG9iYWxfaW50ZXJydXB0X2NvbmZpZ19iaXRzIHw9IENhc2NhZGVfSW50X0VuYWJsZV9CaXQ7CisJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIDAsIGdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHMsCisJCUdsb2JhbEludGVycnVwdENvbmZpZ1JlZ2lzdGVyKTsKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NjB4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBuaV82NjB4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJLyogRnJlZSBpcnEgKi8KKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJaWYgKHByaXZhdGUoZGV2KS0+Y291bnRlcl9kZXYpCisJCQluaV9ncGN0X2RldmljZV9kZXN0cm95KHByaXZhdGUoZGV2KS0+Y291bnRlcl9kZXYpOworCQlpZiAocHJpdmF0ZShkZXYpLT5taXRlKSB7CisJCQluaV82NjB4X2ZyZWVfbWl0ZV9yaW5ncyhkZXYpOworCQkJbWl0ZV91bnNldHVwKHByaXZhdGUoZGV2KS0+bWl0ZSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25pXzY2MHhfR1BDVF9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcmV0dXJuIG5pX3Rpb19yaW5zbihzdWJkZXZfdG9fY291bnRlcihzKSwgaW5zbiwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdGlvX2NoaXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGlwc2V0KQoreworCXVuc2lnbmVkIGk7CisKKwkvLyBpbml0IGRtYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCisJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjaGlwc2V0XSA9IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTk5FTDsgKytpKSB7CisJCXByaXZhdGUoZGV2KS0+ZG1hX2NvbmZpZ3VyYXRpb25fc29mdF9jb3BpZXNbY2hpcHNldF0gfD0KKwkJCWRtYV9zZWxlY3RfYml0cyhpLAorCQkJZG1hX3NlbGVjdGlvbl9ub25lKSAmIGRtYV9zZWxlY3RfbWFzayhpKTsKKwl9CisJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGNoaXBzZXQsCisJCXByaXZhdGUoZGV2KS0+ZG1hX2NvbmZpZ3VyYXRpb25fc29mdF9jb3BpZXNbY2hpcHNldF0sCisJCURNQUNvbmZpZ1JlZ2lzdGVyKTsKKwlmb3IoaSA9IDA7IGkgPCBOVU1fUEZJX0NIQU5ORUxTOyArK2kpCisJeworCQluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgY2hpcHNldCwgMCwgSU9Db25maWdSZWcoaSkpOworCX0KK30KKworc3RhdGljIGludAorbmlfNjYweF9HUENUX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlyZXR1cm4gbmlfdGlvX2luc25fY29uZmlnKHN1YmRldl90b19jb3VudGVyKHMpLCBpbnNuLCBkYXRhKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X0dQQ1Rfd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXJldHVybiBuaV90aW9fd2luc24oc3ViZGV2X3RvX2NvdW50ZXIocyksIGluc24sIGRhdGEpOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKworCWZvciAobWl0ZSA9IG1pdGVfZGV2aWNlczsgbWl0ZTsgbWl0ZSA9IG1pdGUtPm5leHQpIHsKKwkJaWYgKG1pdGUtPnVzZWQpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQlzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IG5fbmlfNjYweF9ib2FyZHM7IGkrKykgeworCQkJaWYgKG1pdGVfZGV2aWNlX2lkKG1pdGUpID09IG5pXzY2MHhfYm9hcmRzW2ldLmRldl9pZCkgeworCQkJCWRldi0+Ym9hcmRfcHRyID0gbmlfNjYweF9ib2FyZHMgKyBpOworCQkJCXByaXZhdGUoZGV2KS0+bWl0ZSA9IG1pdGU7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisJcHJpbnRrKCJubyBkZXZpY2UgZm91bmRcbiIpOworCW1pdGVfbGlzdF9kZXZpY2VzKCk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBiYXNlX2JpdGZpZWxkX2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8vIENoZWNrIGlmIHdlIGhhdmUgdG8gd3JpdGUgc29tZSBiaXRzCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfihkYXRhWzBdIDw8IGJhc2VfYml0ZmllbGRfY2hhbm5lbCk7CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSkgPDwgYmFzZV9iaXRmaWVsZF9jaGFubmVsOworCQkvKiBXcml0ZSBvdXQgdGhlIG5ldyBkaWdpdGFsIG91dHB1dCBsaW5lcyAqLworCQluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgMCwgcy0+c3RhdGUsIERJTzMyT3V0cHV0KTsKKwl9CisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbAorCSAqIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuICovCisJZGF0YVsxXSA9CisJCShuaV82NjB4X3JlYWRfcmVnaXN0ZXIoZGV2LCAwLAorCQkJRElPMzJJbnB1dCkgPj4gYmFzZV9iaXRmaWVsZF9jaGFubmVsKTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIHZvaWQgbmlfNjYweF9zZWxlY3RfcGZpX291dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgcGZpX2NoYW5uZWwsCisJdW5zaWduZWQgb3V0cHV0X3NlbGVjdCkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY291bnRlcl80XzdfZmlyc3RfcGZpID0gODsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY291bnRlcl80XzdfbGFzdF9wZmkgPSAyMzsKKwl1bnNpZ25lZCBhY3RpdmVfY2hpcHNldCA9IDA7CisJdW5zaWduZWQgaWRsZV9jaGlwc2V0ID0gMDsKKwl1bnNpZ25lZCBhY3RpdmVfYml0czsKKwl1bnNpZ25lZCBpZGxlX2JpdHM7CisKKwlpZihib2FyZChkZXYpLT5uX2NoaXBzID4gMSkgeworCQlpZihvdXRwdXRfc2VsZWN0ID09IHBmaV9vdXRwdXRfc2VsZWN0X2NvdW50ZXIgJiYKKwkJCXBmaV9jaGFubmVsID49IGNvdW50ZXJfNF83X2ZpcnN0X3BmaSAmJgorCQkJcGZpX2NoYW5uZWwgPD0gY291bnRlcl80XzdfbGFzdF9wZmkpIHsKKwkJCWFjdGl2ZV9jaGlwc2V0ID0gMTsKKwkJCWlkbGVfY2hpcHNldCA9IDA7CisJCX1lbHNlIHsKKwkJCWFjdGl2ZV9jaGlwc2V0ID0gMDsKKwkJCWlkbGVfY2hpcHNldCA9IDE7CisJCX0KKwl9CisKKwlpZihpZGxlX2NoaXBzZXQgIT0gYWN0aXZlX2NoaXBzZXQpIHsKKwkJaWRsZV9iaXRzID0gbmlfNjYweF9yZWFkX3JlZ2lzdGVyKGRldiwgaWRsZV9jaGlwc2V0LCBJT0NvbmZpZ1JlZyhwZmlfY2hhbm5lbCkpOworCQlpZGxlX2JpdHMgJj0gfnBmaV9vdXRwdXRfc2VsZWN0X21hc2socGZpX2NoYW5uZWwpOworCQlpZGxlX2JpdHMgfD0gcGZpX291dHB1dF9zZWxlY3RfYml0cyhwZmlfY2hhbm5lbCwgcGZpX291dHB1dF9zZWxlY3RfaGlnaF9aKTsKKwkJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGlkbGVfY2hpcHNldCwgaWRsZV9iaXRzLCBJT0NvbmZpZ1JlZyhwZmlfY2hhbm5lbCkpOworCX0KKworCWFjdGl2ZV9iaXRzID0gbmlfNjYweF9yZWFkX3JlZ2lzdGVyKGRldiwgYWN0aXZlX2NoaXBzZXQsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7CisJYWN0aXZlX2JpdHMgJj0gfnBmaV9vdXRwdXRfc2VsZWN0X21hc2socGZpX2NoYW5uZWwpOworCWFjdGl2ZV9iaXRzIHw9IHBmaV9vdXRwdXRfc2VsZWN0X2JpdHMocGZpX2NoYW5uZWwsIG91dHB1dF9zZWxlY3QpOworCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBhY3RpdmVfY2hpcHNldCwgYWN0aXZlX2JpdHMsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9zZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4sCisJdW5zaWduZWQgc291cmNlKQoreworCWlmIChzb3VyY2UgPiBudW1fcGZpX291dHB1dF9zZWxlY3RzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc291cmNlID09IHBmaV9vdXRwdXRfc2VsZWN0X2hpZ2hfWikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoYW4gPCBtaW5fY291bnRlcl9wZmlfY2hhbikgeworCQlpZiAoc291cmNlID09IHBmaV9vdXRwdXRfc2VsZWN0X2NvdW50ZXIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGNoYW4gPiBtYXhfZGlvX3BmaV9jaGFuKSB7CisJCWlmIChzb3VyY2UgPT0gcGZpX291dHB1dF9zZWxlY3RfZG8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJQlVHX09OKGNoYW4gPj0gTlVNX1BGSV9DSEFOTkVMUyk7CisKKwlwcml2YXRlKGRldiktPnBmaV9vdXRwdXRfc2VsZWN0c1tjaGFuXSA9IHNvdXJjZTsKKwlpZiAocHJpdmF0ZShkZXYpLT5wZmlfZGlyZWN0aW9uX2JpdHMgJiAoKCh1aW50NjRfdCkgMSkgPDwgY2hhbikpCisJCW5pXzY2MHhfc2VsZWN0X3BmaV9vdXRwdXQoZGV2LCBjaGFuLAorCQkJcHJpdmF0ZShkZXYpLT5wZmlfb3V0cHV0X3NlbGVjdHNbY2hhbl0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfNjYweF9nZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4pCit7CisJQlVHX09OKGNoYW4gPj0gTlVNX1BGSV9DSEFOTkVMUyk7CisJcmV0dXJuIHByaXZhdGUoZGV2KS0+cGZpX291dHB1dF9zZWxlY3RzW2NoYW5dOworfQorCitzdGF0aWMgdm9pZCBuaTY2MHhfY29uZmlnX2ZpbHRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgcGZpX2NoYW5uZWwsCisJZW51bSBuaV9ncGN0X2ZpbHRlcl9zZWxlY3QgZmlsdGVyKQoreworCXVuc2lnbmVkIGJpdHMgPSBuaV82NjB4X3JlYWRfcmVnaXN0ZXIoZGV2LCAwLCBJT0NvbmZpZ1JlZyhwZmlfY2hhbm5lbCkpOworCWJpdHMgJj0gfnBmaV9pbnB1dF9zZWxlY3RfbWFzayhwZmlfY2hhbm5lbCk7CisJYml0cyB8PSBwZmlfaW5wdXRfc2VsZWN0X2JpdHMocGZpX2NoYW5uZWwsIGZpbHRlcik7CisJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIDAsIGJpdHMsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBUaGUgaW5wdXQgb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBkaWdpdGFsIGxpbmUgaXMKKwkgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCisJICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisJICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXByaXZhdGUoZGV2KS0+cGZpX2RpcmVjdGlvbl9iaXRzIHw9ICgodWludDY0X3QpIDEpIDw8IGNoYW47CisJCW5pXzY2MHhfc2VsZWN0X3BmaV9vdXRwdXQoZGV2LCBjaGFuLAorCQkJcHJpdmF0ZShkZXYpLT5wZmlfb3V0cHV0X3NlbGVjdHNbY2hhbl0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcHJpdmF0ZShkZXYpLT5wZmlfZGlyZWN0aW9uX2JpdHMgJj0gfigoKHVpbnQ2NF90KSAxKSA8PCBjaGFuKTsKKwkJbmlfNjYweF9zZWxlY3RfcGZpX291dHB1dChkZXYsIGNoYW4sIHBmaV9vdXRwdXRfc2VsZWN0X2hpZ2hfWik7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShwcml2YXRlKGRldiktPgorCQkJcGZpX2RpcmVjdGlvbl9iaXRzICYgKCgodWludDY0X3QpIDEpIDw8IGNoYW4pKSA/CisJCQlDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gMDsKKwljYXNlIElOU05fQ09ORklHX1NFVF9ST1VUSU5HOgorCQlyZXR1cm4gbmlfNjYweF9zZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfUk9VVElORzoKKwkJZGF0YVsxXSA9IG5pXzY2MHhfZ2V0X3BmaV9yb3V0aW5nKGRldiwgY2hhbik7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRklMVEVSOgorCQluaTY2MHhfY29uZmlnX2ZpbHRlcihkZXYsIGNoYW4sIGRhdGFbMV0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzEyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCkBAIC0wLDAgKzEsMzM3IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pXzY3MHguYworICAgIEhhcmR3YXJlIGRyaXZlciBmb3IgTkkgNjcweCBkZXZpY2VzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG5pXzY3MHgKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyA2NzB4CitBdXRob3I6IEJhcnQgSm9yaXMgPGJqb3Jpc0BhZHZhbHZhcy5iZT4KK1VwZGF0ZWQ6IFdlZCwgMTEgRGVjIDIwMDIgMTg6MjU6MzUgLTA4MDAKK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gUENJLTY3MDMgKG5pXzY3MHgpLCBQQ0ktNjcwNAorU3RhdHVzOiB1bmtub3duCisKK0NvbW1hbmRzIGFyZSBub3Qgc3VwcG9ydGVkLgorKi8KKworLyoKKwlCYXJ0IEpvcmlzIDxiam9yaXNAYWR2YWx2YXMuYmU+IExhc3QgdXBkYXRlZCBvbiAyMC8wOC8yMDAxCisKKwlNYW51YWxzOgorCisJMzIyMTEwYS5wZGYJUENJL1BYSS02NzA0IFVzZXIgTWFudWFsCisJMzIyMTEwYi5wZGYJUENJL1BYSS02NzAzLzY3MDQgVXNlciBNYW51YWwKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAibWl0ZS5oIgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkFUSU5TVAkweDEwOTMKKworI2RlZmluZSBBT19WQUxVRV9PRkZTRVQJCQkweDAwCisjZGVmaW5lCUFPX0NIQU5fT0ZGU0VUCQkJMHgwYworI2RlZmluZQlBT19TVEFUVVNfT0ZGU0VUCQkweDEwCisjZGVmaW5lIEFPX0NPTlRST0xfT0ZGU0VUCQkweDEwCisjZGVmaW5lCURJT19QT1JUMF9ESVJfT0ZGU0VUCTB4MjAKKyNkZWZpbmUJRElPX1BPUlQwX0RBVEFfT0ZGU0VUCTB4MjQKKyNkZWZpbmUJRElPX1BPUlQxX0RJUl9PRkZTRVQJMHgyOAorI2RlZmluZQlESU9fUE9SVDFfREFUQV9PRkZTRVQJMHgyYworI2RlZmluZQlNSVNDX1NUQVRVU19PRkZTRVQJCTB4MTQKKyNkZWZpbmUJTUlTQ19DT05UUk9MX09GRlNFVAkJMHgxNAorCisvKiBCb2FyZCBkZXNjcmlwdGlvbiovCisKK3N0cnVjdCBuaV82NzB4X2JvYXJkIHsKKwl1bnNpZ25lZCBzaG9ydCBkZXZfaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBhb19jaGFuczsKKwl1bnNpZ25lZCBzaG9ydCBhb19iaXRzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuaV82NzB4X2JvYXJkIG5pXzY3MHhfYm9hcmRzW10gPSB7CisJeworCSAgICAgIGRldl9pZDoJMHgyYzkwLAorCSAgICAgIG5hbWU6CSJQQ0ktNjcwMyIsCisJICAgICAgYW9fY2hhbnM6MTYsCisJICAgICAgYW9fYml0czoJMTYsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgxOTIwLAorCSAgICAgIG5hbWU6CSJQWEktNjcwNCIsCisJICAgICAgYW9fY2hhbnM6MzIsCisJICAgICAgYW9fYml0czoJMTYsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgxMjkwLAorCSAgICAgIG5hbWU6CSJQQ0ktNjcwNCIsCisJICAgICAgYW9fY2hhbnM6MzIsCisJICAgICAgYW9fYml0czoJMTYsCisJCX0sCit9OworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmlfNjcweF9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmM5MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxOTIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwkvL3sgUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDAwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuaV82NzB4X3BjaV90YWJsZSk7CisKKyNkZWZpbmUgdGhpc2JvYXJkICgoc3RydWN0IG5pXzY3MHhfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IG5pXzY3MHhfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGU7CisJaW50IGJvYXJkdHlwZTsKKwlpbnQgZGlvOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1szMl07Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBuaV82NzB4X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIG5fbmlfNjcweF9ib2FyZHMgKHNpemVvZihuaV82NzB4X2JvYXJkcykvc2l6ZW9mKG5pXzY3MHhfYm9hcmRzWzBdKSkKKworc3RhdGljIGludCBuaV82NzB4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG5pXzY3MHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9uaV82NzB4ID0geworICAgICAgZHJpdmVyX25hbWU6Im5pXzY3MHgiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm5pXzY3MHhfYXR0YWNoLAorICAgICAgZGV0YWNoOm5pXzY3MHhfZGV0YWNoLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfbmlfNjcweCwgbmlfNjcweF9wY2lfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfMF8yMG1BID0geyAxLCB7UkFOR0VfbUEoMCwgMjApfSB9OworCitzdGF0aWMgaW50IG5pXzY3MHhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KTsKKworc3RhdGljIGludCBuaV82NzB4X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pXzY3MHhfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjcweF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pXzY3MHhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgbmlfNjcweF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6IG5pXzY3MHg6ICIsIGRldi0+bWlub3IpOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBuaV82NzB4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbmlfNjcweF9maW5kX2RldmljZShkZXYsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtaXRlX3NldHVwKGRldnByaXYtPm1pdGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCWRldi0+aXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CisJcHJpbnRrKCIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW9fY2hhbnM7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlpZiAocy0+bl9jaGFuID09IDMyKSB7CisJCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICoqcmFuZ2VfdGFibGVfbGlzdDsKKworCQlyYW5nZV90YWJsZV9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9scmFuZ2UgKikgKiAzMiwKKwkJCUdGUF9LRVJORUwpOworCQlpZiAoIXJhbmdlX3RhYmxlX2xpc3QpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IHJhbmdlX3RhYmxlX2xpc3Q7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQlyYW5nZV90YWJsZV9saXN0W2ldID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJCXJhbmdlX3RhYmxlX2xpc3RbMTYgKyBpXSA9ICZyYW5nZV8wXzIwbUE7CisJCX0KKwl9IGVsc2UgeworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJfQorCXMtPmluc25fd3JpdGUgPSAmbmlfNjcweF9hb193aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSAmbmlfNjcweF9hb19yaW5zbjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBuaV82NzB4X2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBuaV82NzB4X2Rpb19pbnNuX2NvbmZpZzsKKworCXdyaXRlbCgweDEwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE1JU0NfQ09OVFJPTF9PRkZTRVQpOwkvKiBDb25maWcgb2YgbWlzYyByZWdpc3RlcnMgKi8KKwl3cml0ZWwoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19DT05UUk9MX09GRlNFVCk7CS8qIENvbmZpZyBvZiBhbyByZWdpc3RlcnMgKi8KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjcweF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogbmlfNjcweDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXNbMF0ucmFuZ2VfdGFibGVfbGlzdCkgeworCQlrZnJlZShkZXYtPnN1YmRldmljZXNbMF0ucmFuZ2VfdGFibGVfbGlzdCk7CisJfQorCWlmIChkZXYtPnByaXZhdGUgJiYgZGV2cHJpdi0+bWl0ZSkKKwkJbWl0ZV91bnNldHVwKGRldnByaXYtPm1pdGUpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NzB4X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyogQ2hhbm5lbCBudW1iZXIgbWFwcGluZyA6CisKKwkgICBOSSA2NzAzLyBOSSA2NzA0ICAgICB8IE5JIDY3MDQgT25seQorCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICB2Y2goMCkgICAgICAgOiAgICAgICAwICAgICAgIHwgaWNoKDE2KSAgICAgICA6ICAgICAgIDEKKwkgICB2Y2goMSkgICAgICAgOiAgICAgICAyICAgICAgIHwgaWNoKDE3KSAgICAgICA6ICAgICAgIDMKKwkgICAuICAgIDogICAgICAgLiAgICAgICB8ICAgLiAgICAgICAgICAgICAgICAgICAuCisJICAgLiAgICA6ICAgICAgIC4gICAgICAgfCAgIC4gICAgICAgICAgICAgICAgICAgLgorCSAgIC4gICAgOiAgICAgICAuICAgICAgIHwgICAuICAgICAgICAgICAgICAgICAgIC4KKwkgICB2Y2goMTUpICAgICAgOiAgICAgICAzMCAgICAgIHwgaWNoKDMxKSAgICAgICA6ICAgICAgIDMxICAgICAgKi8KKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJd3JpdGVsKCgoY2hhbiAmIDE1KSA8PCAxKSB8ICgoY2hhbiAmIDE2KSA+PiA0KSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19DSEFOX09GRlNFVCk7CS8qIEZpcnN0IHdyaXRlIGluIGNoYW5uZWwgcmVnaXN0ZXIgd2hpY2ggY2hhbm5lbCB0byB1c2UgKi8KKwkJd3JpdGVsKGRhdGFbaV0sIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQU9fVkFMVUVfT0ZGU0VUKTsJLyogd3JpdGUgY2hhbm5lbCB2YWx1ZSAqLworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjcweF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IG5pXzY3MHhfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEKKwkgKiBpbiBkYXRhWzFdLCBlYWNoIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gKi8KKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCXdyaXRlbChzLT5zdGF0ZSwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRElPX1BPUlQwX0RBVEFfT0ZGU0VUKTsKKwl9CisKKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgbGluZXMuICovCisJZGF0YVsxXSA9IHJlYWRsKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRElPX1BPUlQwX0RBVEFfT0ZGU0VUKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pXzY3MHhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IDEgPDwgY2hhbjsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPmlvX2JpdHMgJj0gfigxIDw8IGNoYW4pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkocy0+CisJCQlpb19iaXRzICYgKDEgPDwgY2hhbikpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJd3JpdGVsKHMtPmlvX2JpdHMsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRElPX1BPUlQwX0RJUl9PRkZTRVQpOworCisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgbmlfNjcweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpCit7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBpOworCisJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgeworCQlpZiAobWl0ZS0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gbWl0ZS0+cGNpZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IHNsb3QgIT0gUENJX1NMT1QobWl0ZS0+cGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbl9uaV82NzB4X2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmlfNjcweF9ib2FyZHNbaV0uZGV2X2lkKSB7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBuaV82NzB4X2JvYXJkcyArIGk7CisJCQkJZGV2cHJpdi0+bWl0ZSA9IG1pdGU7CisKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJbWl0ZV9saXN0X2RldmljZXMoKTsKKwlyZXR1cm4gLUVJTzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0NWJmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jCkBAIC0wLDAgKzEsOTA5IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKKyAgICBEcml2ZXIgZm9yIE5hdGlvbmFsIEluc3RydW1lbnRzIEFULUEyMTUwIGJvYXJkcworICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IG5pX2F0X2EyMTUwCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtQTIxNTAKK0F1dGhvcjogRnJhbmsgTW9yaSBIZXNzCitTdGF0dXM6IHdvcmtzCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIEFULUEyMTUwQyAoYXRfYTIxNTBjKSwgQVQtMjE1MFMgKGF0X2EyMTUwcykKKworSWYgeW91IHdhbnQgdG8gYWMgY291cGxlIHRoZSBib2FyZCdzIGlucHV0cywgdXNlIEFSRUZfT1RIRVIuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSAob3B0aW9uYWwsIHJlcXVpcmVkIGZvciB0aW1lZCBjb252ZXJzaW9ucykKKyAgWzJdIC0gRE1BIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIGNvbnZlcnNpb25zKQorCisqLworLyoKK1lldCBhbm90aGVyIGRyaXZlciBmb3Igb2Jzb2xldGUgaGFyZHdhcmUgYnJvdWdodCB0byB5b3UgYnkgRnJhbmsgSGVzcy4KK1Rlc3RpbmcgYW5kIGRlYnVnZ2luZyBoZWxwIHByb3ZpZGVkIGJ5IERhdmUgQW5kcnVjenlrLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgYm9hcmRzOgorCitBVC1BMjE1MEMKK0FULUEyMTUwUworCitUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZWlyIG1hc3RlciBjbG9jayBmcmVxdWVuY2llcy4KKworT3B0aW9uczoKKwlbMF0gLSBiYXNlIGlvIGFkZHJlc3MKKwlbMV0gLSBpcnEKKwlbMl0gLSBkbWEgY2hhbm5lbAorCitSZWZlcmVuY2VzIChmcm9tIGZ0cDovL2Z0cC5uYXRpbnN0LmNvbS9zdXBwb3J0L21hbnVhbHMpOgorCisJICAgMzIwMzYwLnBkZiAgQVQtQTIxNTAgVXNlciBNYW51YWwKKworVE9ETzoKKworYW5hbG9nIGxldmVsIHRyaWdnZXJpbmcKK1RSSUdfV0FLRV9FT1MKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisjZGVmaW5lIEEyMTUwX1NJWkUgICAgICAgICAgIDI4CisjZGVmaW5lIEEyMTUwX0RNQV9CVUZGRVJfU0laRQkweGZmMDAJLy8gc2l6ZSBpbiBieXRlcyBvZiBkbWEgYnVmZmVyCisKKy8vI2RlZmluZSBBMjE1MF9ERUJVRyAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgY29kZQorI3VuZGVmIEEyMTUwX0RFQlVHCQkvLyBkaXNhYmxlIGRlYnVnZ2luZyBjb2RlCisKKy8qIFJlZ2lzdGVycyBhbmQgYml0cyAqLworI2RlZmluZSBDT05GSUdfUkVHCQkweDAKKyNkZWZpbmUgICBDSEFOTkVMX0JJVFMoeCkJCSgoeCkgJiAweDcpCisjZGVmaW5lICAgQ0hBTk5FTF9NQVNLCQkweDcKKyNkZWZpbmUgICBDTE9DS19TRUxFQ1RfQklUUyh4KQkJKCgoeCkgJiAweDMpIDw8IDMpCisjZGVmaW5lICAgQ0xPQ0tfRElWSVNPUl9CSVRTKHgpCQkoKCh4KSAmIDB4MykgPDwgNSkKKyNkZWZpbmUgICBDTE9DS19NQVNLCQkoMHhmIDw8IDMpCisjZGVmaW5lICAgRU5BQkxFMF9CSVQJCTB4ODAJLy8gZW5hYmxlIChkb24ndCBpbnRlcm5hbGx5IGdyb3VuZCkgY2hhbm5lbHMgMCBhbmQgMQorI2RlZmluZSAgIEVOQUJMRTFfQklUCQkweDEwMAkvLyBlbmFibGUgKGRvbid0IGludGVybmFsbHkgZ3JvdW5kKSBjaGFubmVscyAyIGFuZCAzCisjZGVmaW5lICAgQUMwX0JJVAkJMHgyMDAJLy8gYWMgY291cGxlIGNoYW5uZWxzIDAsMQorI2RlZmluZSAgIEFDMV9CSVQJCTB4NDAwCS8vIGFjIGNvdXBsZSBjaGFubmVscyAyLDMKKyNkZWZpbmUgICBBUERfQklUCQkweDgwMAkvLyBhbmFsb2cgcG93ZXIgZG93bgorI2RlZmluZSAgIERQRF9CSVQJCTB4MTAwMAkvLyBkaWdpdGFsIHBvd2VyIGRvd24KKyNkZWZpbmUgVFJJR0dFUl9SRUcJCTB4MgkvLyB0cmlnZ2VyIGNvbmZpZyByZWdpc3RlcgorI2RlZmluZSAgIFBPU1RfVFJJR0dFUl9CSVRTCQkweDIKKyNkZWZpbmUgICBERUxBWV9UUklHR0VSX0JJVFMJCTB4MworI2RlZmluZSAgIEhXX1RSSUdfRU4JCTB4MTAJLy8gZW5hYmxlIGhhcmR3YXJlIHRyaWdnZXIKKyNkZWZpbmUgRklGT19TVEFSVF9SRUcJCTB4NgkvLyBzb2Z0d2FyZSBzdGFydCBhcXVpc3Rpb24gdHJpZ2dlcgorI2RlZmluZSBGSUZPX1JFU0VUX1JFRwkJMHg4CS8vIGNsZWFycyBmaWZvICsgZmlmbyBmbGFncworI2RlZmluZSBGSUZPX0RBVEFfUkVHCQkweGEJLy8gcmVhZCBkYXRhCisjZGVmaW5lIERNQV9UQ19DTEVBUl9SRUcJCTB4ZQkvLyBjbGVhciBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0CisjZGVmaW5lIFNUQVRVU19SRUcJCTB4MTIJLy8gcmVhZCBvbmx5CisjZGVmaW5lICAgRk5FX0JJVAkJMHgxCS8vIGZpZm8gbm90IGVtcHR5CisjZGVmaW5lICAgT1ZGTF9CSVQJCTB4OAkvLyBmaWZvIG92ZXJmbG93CisjZGVmaW5lICAgRURBUV9CSVQJCTB4MTAJLy8gZW5kIG9mIGFxdWlzaXRpb24gaW50ZXJydXB0CisjZGVmaW5lICAgRENBTF9CSVQJCTB4MjAJLy8gb2Zmc2V0IGNhbGlicmF0aW9uIGluIHByb2dyZXNzCisjZGVmaW5lICAgSU5UUl9CSVQJCTB4NDAJLy8gaW50ZXJydXB0IGhhcyBvY2N1cmVkCisjZGVmaW5lICAgRE1BX1RDX0JJVAkJMHg4MAkvLyBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0IGhhcyBvY2N1cmVkCisjZGVmaW5lICAgSURfQklUUyh4KQkoKCh4KSA+PiA4KSAmIDB4MykKKyNkZWZpbmUgSVJRX0RNQV9DTlRSTF9SRUcJCTB4MTIJLy8gd3JpdGUgb25seQorI2RlZmluZSAgIERNQV9DSEFOX0JJVFMoeCkJCSgoeCkgJiAweDcpCS8vIHNldHMgZG1hIGNoYW5uZWwKKyNkZWZpbmUgICBETUFfRU5fQklUCQkweDgJLy8gZW5hYmxlcyBkbWEKKyNkZWZpbmUgICBJUlFfTFZMX0JJVFMoeCkJCSgoKHgpICYgMHhmKSA8PCA0KQkvLyBzZXRzIGlycSBsZXZlbAorI2RlZmluZSAgIEZJRk9fSU5UUl9FTl9CSVQJCTB4MTAwCS8vIGVuYWJsZSBmaWZvIGludGVycnVwdHMKKyNkZWZpbmUgICBGSUZPX0lOVFJfRkhGX0JJVAkJMHgyMDAJLy8gaW50ZXJydXB0IGZpZm8gaGFsZiBmdWxsCisjZGVmaW5lICAgRE1BX0lOVFJfRU5fQklUIAkJMHg4MDAJLy8gZW5hYmxlIGludGVycnVwdCBvbiBkbWEgdGVybWluYWwgY291bnQKKyNkZWZpbmUgICBETUFfREVNX0VOX0JJVAkweDEwMDAJLy8gZW5hYmxlcyBkZW1hbmQgbW9kZSBkbWEKKyNkZWZpbmUgSTgyNTNfQkFTRV9SRUcJCTB4MTQKKyNkZWZpbmUgSTgyNTNfTU9ERV9SRUcJCTB4MTcKKyNkZWZpbmUgICBIV19DT1VOVF9ESVNBQkxFCQkweDMwCS8vIGRpc2FibGUgaGFyZHdhcmUgY291bnRpbmcgb2YgY29udmVyc2lvbnMKKworc3RydWN0IGEyMTUwX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBjbG9ja1s0XTsJCS8vIG1hc3RlciBjbG9jayBwZXJpb2RzLCBpbiBuYW5vc2Vjb25kcworCWludCBudW1fY2xvY2tzOwkJLy8gbnVtYmVyIG9mIGF2YWlsYWJsZSBtYXN0ZXIgY2xvY2sgc3BlZWRzCisJaW50IGFpX3NwZWVkOwkJLy8gbWF4aW11bSBjb252ZXJzaW9uIHJhdGUgaW4gbmFub3NlY29uZHMKK307CisKKy8vYW5hbG9nIGlucHV0IHJhbmdlCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYTIxNTAgPSB7CisJMSwKKwl7CisJCQlSQU5HRSgtMi44MjgsIDIuODI4KSwKKwkJfQorfTsKKworLy8gZW51bSBtdXN0IG1hdGNoIGJvYXJkIGluZGljZXMKK2VudW0geyBhMjE1MF9jLCBhMjE1MF9zIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IGEyMTUwX2JvYXJkIGEyMTUwX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiYXQtYTIxNTBjIiwKKwkgICAgICBjbG9jazoJezMxMjUwLCAyMjY3NiwgMjA4MzMsIDE5NTMxfSwKKwkgICAgICBudW1fY2xvY2tzOjQsCisJICAgICAgYWlfc3BlZWQ6MTk1MzEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJhdC1hMjE1MHMiLAorCSAgICAgIGNsb2NrOgl7NjI1MDAsIDUwMDAwLCA0MTY2NywgMH0sCisJICAgICAgbnVtX2Nsb2NrczozLAorCSAgICAgIGFpX3NwZWVkOjQxNjY3LAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgYTIxNTBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGEyMTUwX3ByaXZhdGUgeworCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvdW50OwkvKiBudW1iZXIgb2YgZGF0YSBwb2ludHMgbGVmdCB0byBiZSB0YWtlbiAqLworCXVuc2lnbmVkIGludCBkbWE7CS8vIGRtYSBjaGFubmVsCisJczE2ICpkbWFfYnVmZmVyOwkvLyBkbWEgYnVmZmVyCisJdW5zaWduZWQgaW50IGRtYV90cmFuc2Zlcl9zaXplOwkvLyBzaXplIGluIGJ5dGVzIG9mIGRtYSB0cmFuc2ZlcnMKKwlpbnQgaXJxX2RtYV9iaXRzOwkvLyBpcnEvZG1hIHJlZ2lzdGVyIGJpdHMKKwlpbnQgY29uZmlnX2JpdHM7CS8vIGNvbmZpZyByZWdpc3RlciBiaXRzCit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBhMjE1MF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGEyMTUwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGEyMTUwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGEyMTUwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hMjE1MCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaV9hdF9hMjE1MCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YTIxNTBfYXR0YWNoLAorICAgICAgZGV0YWNoOmEyMTUwX2RldGFjaCwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhMjE1MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgaW50IGEyMTUwX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGEyMTUwX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgYTIxNTBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYTIxNTBfZ2V0X3RpbWluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpwZXJpb2QsCisJaW50IGZsYWdzKTsKK3N0YXRpYyBpbnQgYTIxNTBfcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBhMjE1MF9zZXRfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBzdGFydF9jaGFubmVsLAorCXVuc2lnbmVkIGludCBudW1fY2hhbm5lbHMpOworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hMjE1MCk7CisKKyNpZmRlZiBBMjE1MF9ERUJVRworCitzdGF0aWMgdm9pZCBuaV9kdW1wX3JlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcnRfcHJpbnRrKCJjb25maWcgYml0cyAweCV4XG4iLCBkZXZwcml2LT5jb25maWdfYml0cyk7CisJcnRfcHJpbnRrKCJpcnEgZG1hIGJpdHMgMHgleFxuIiwgZGV2cHJpdi0+aXJxX2RtYV9iaXRzKTsKKwlydF9wcmludGsoInN0YXR1cyBiaXRzIDB4JXhcbiIsIGludyhkZXYtPmlvYmFzZSArIFNUQVRVU19SRUcpKTsKK30KKworI2VuZGlmCisKKy8qIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBhMjE1MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgaTsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJdW5zaWduZWQgaW50IG1heF9wb2ludHMsIG51bV9wb2ludHMsIHJlc2lkdWUsIGxlZnRvdmVyOworCXNob3J0IGRwbnQ7CisJc3RhdGljIGNvbnN0IGludCBzYW1wbGVfc2l6ZSA9IHNpemVvZihkZXZwcml2LT5kbWFfYnVmZmVyWzBdKTsKKworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInByZW1hdHVyZSBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwkvLyBpbml0aWFsaXplIGFzeW5jIGhlcmUgdG8gbWFrZSBzdXJlIHMgaXMgbm90IE5VTEwKKwlhc3luYyA9IHMtPmFzeW5jOworCWFzeW5jLT5ldmVudHMgPSAwOworCWNtZCA9ICZhc3luYy0+Y21kOworCisJc3RhdHVzID0gaW53KGRldi0+aW9iYXNlICsgU1RBVFVTX1JFRyk7CisKKwlpZiAoKHN0YXR1cyAmIElOVFJfQklUKSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChzdGF0dXMgJiBPVkZMX0JJVCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZmlmbyBvdmVyZmxvdyIpOworCQlhMjE1MF9jYW5jZWwoZGV2LCBzKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCX0KKworCWlmICgoc3RhdHVzICYgRE1BX1RDX0JJVCkgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiY2F1Z2h0IG5vbi1kbWEgaW50ZXJydXB0PyAgQWJvcnRpbmcuIik7CisJCWEyMTUwX2NhbmNlbChkZXYsIHMpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzIGZvcgorCSAqIGNvdW50IGFuZCBhZGRyZXNzIGdldCBzZXQgY29ycmVjdGx5ICovCisJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYSk7CisKKwkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB0byByZWFkCisJbWF4X3BvaW50cyA9IGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplIC8gc2FtcGxlX3NpemU7CisJLyogcmVzaWR1ZSBpcyB0aGUgbnVtYmVyIG9mIHBvaW50cyBsZWZ0IHRvIGJlIGRvbmUgb24gdGhlIGRtYQorCSAqIHRyYW5zZmVyLiAgSXQgc2hvdWxkIGFsd2F5cyBiZSB6ZXJvIGF0IHRoaXMgcG9pbnQgdW5sZXNzCisJICogdGhlIHN0b3Bfc3JjIGlzIHNldCB0byBleHRlcm5hbCB0cmlnZ2VyaW5nLgorCSAqLworCXJlc2lkdWUgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+ZG1hKSAvIHNhbXBsZV9zaXplOworCW51bV9wb2ludHMgPSBtYXhfcG9pbnRzIC0gcmVzaWR1ZTsKKwlpZiAoZGV2cHJpdi0+Y291bnQgPCBudW1fcG9pbnRzICYmIGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJbnVtX3BvaW50cyA9IGRldnByaXYtPmNvdW50OworCisJLy8gZmlndXJlIG91dCBob3cgbWFueSBwb2ludHMgd2lsbCBiZSBzdG9yZWQgbmV4dCB0aW1lCisJbGVmdG92ZXIgPSAwOworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQlsZWZ0b3ZlciA9IGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplIC8gc2FtcGxlX3NpemU7CisJfSBlbHNlIGlmIChkZXZwcml2LT5jb3VudCA+IG1heF9wb2ludHMpIHsKKwkJbGVmdG92ZXIgPSBkZXZwcml2LT5jb3VudCAtIG1heF9wb2ludHM7CisJCWlmIChsZWZ0b3ZlciA+IG1heF9wb2ludHMpCisJCQlsZWZ0b3ZlciA9IG1heF9wb2ludHM7CisJfQorCS8qIHRoZXJlIHNob3VsZCBvbmx5IGJlIGEgcmVzaWR1ZSBpZiBjb2xsZWN0aW9uIHdhcyBzdG9wcGVkIGJ5IGhhdmluZworCSAqIHRoZSBzdG9wX3NyYyBzZXQgdG8gYW4gZXh0ZXJuYWwgdHJpZ2dlciwgaW4gd2hpY2ggY2FzZSB0aGVyZQorCSAqIHdpbGwgYmUgbm8gbW9yZSBkYXRhCisJICovCisJaWYgKHJlc2lkdWUpCisJCWxlZnRvdmVyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcG9pbnRzOyBpKyspIHsKKwkJLyogd3JpdGUgZGF0YSBwb2ludCB0byBjb21lZGkgYnVmZmVyICovCisJCWRwbnQgPSBkZXZwcml2LT5kbWFfYnVmZmVyW2ldOworCQkvLyBjb252ZXJ0IGZyb20gMidzIGNvbXBsZW1lbnQgdG8gdW5zaWduZWQgY29kaW5nCisJCWRwbnQgXj0gMHg4MDAwOworCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRwbnQpOworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCQlpZiAoLS1kZXZwcml2LT5jb3VudCA9PSAwKSB7CS8qIGVuZCBvZiBhY3F1aXNpdGlvbiAqLworCQkJCWEyMTUwX2NhbmNlbChkZXYsIHMpOworCQkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwkvLyByZS1lbmFibGUgIGRtYQorCWlmIChsZWZ0b3ZlcikgeworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCB2aXJ0X3RvX2J1cyhkZXZwcml2LT5kbWFfYnVmZmVyKSk7CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBsZWZ0b3ZlciAqIHNhbXBsZV9zaXplKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworCX0KKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKworCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwlvdXR3KDB4MDAsIGRldi0+aW9iYXNlICsgRE1BX1RDX0NMRUFSX1JFRyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8vIHByb2JlcyBib2FyZCB0eXBlLCByZXR1cm5zIG9mZnNldAorc3RhdGljIGludCBhMjE1MF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgc3RhdHVzID0gaW53KGRldi0+aW9iYXNlICsgU1RBVFVTX1JFRyk7CisJcmV0dXJuIElEX0JJVFMoc3RhdHVzKTsKK30KKworc3RhdGljIGludCBhMjE1MF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gaXQtPm9wdGlvbnNbMV07CisJdW5zaWduZWQgaW50IGRtYSA9IGl0LT5vcHRpb25zWzJdOworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDIwMDA7CisJaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiAlczogaW8gMHglbHgiLCBkZXYtPm1pbm9yLCBkcml2ZXJfYTIxNTAuZHJpdmVyX25hbWUsCisJCWlvYmFzZSk7CisJaWYgKGlycSkgeworCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiwgbm8gaXJxIik7CisJfQorCWlmIChkbWEpIHsKKwkJcHJpbnRrKCIsIGRtYSAldSIsIGRtYSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIsIG5vIGRtYSIpOworCX0KKwlwcmludGsoIlxuIik7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkZXYtPnByaXZhdGUgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYTIxNTBfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoaW9iYXNlID09IDApIHsKKwkJcHJpbnRrKCIgaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgaWYgaW8gYWRkcmVzc2VzIGFyZSBhdmFpbGFibGUgKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgQTIxNTBfU0laRSwgZHJpdmVyX2EyMTUwLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCS8qIGdyYWIgb3VyIElSUSAqLworCWlmIChpcnEpIHsKKwkJLy8gY2hlY2sgdGhhdCBpcnEgaXMgc3VwcG9ydGVkCisJCWlmIChpcnEgPCAzIHx8IGlycSA9PSA4IHx8IGlycSA9PSAxMyB8fCBpcnEgPiAxNSkgeworCQkJcHJpbnRrKCIgaW52YWxpZCBpcnEgbGluZSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBhMjE1MF9pbnRlcnJ1cHQsIDAsCisJCQkJZHJpdmVyX2EyMTUwLmRyaXZlcl9uYW1lLCBkZXYpKSB7CisJCQlwcmludGsoInVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIGlycSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gSVJRX0xWTF9CSVRTKGlycSk7CisJCWRldi0+aXJxID0gaXJxOworCX0KKwkvLyBpbml0aWFsaXplIGRtYQorCWlmIChkbWEpIHsKKwkJaWYgKGRtYSA9PSA0IHx8IGRtYSA+IDcpIHsKKwkJCXByaW50aygiIGludmFsaWQgZG1hIGNoYW5uZWwgJXVcbiIsIGRtYSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocmVxdWVzdF9kbWEoZG1hLCBkcml2ZXJfYTIxNTAuZHJpdmVyX25hbWUpKSB7CisJCQlwcmludGsoIiBmYWlsZWQgdG8gYWxsb2NhdGUgZG1hIGNoYW5uZWwgJXVcbiIsIGRtYSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZwcml2LT5kbWEgPSBkbWE7CisJCWRldnByaXYtPmRtYV9idWZmZXIgPQorCQkJa21hbGxvYyhBMjE1MF9ETUFfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJaWYgKGRldnByaXYtPmRtYV9idWZmZXIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWRpc2FibGVfZG1hKGRtYSk7CisJCXNldF9kbWFfbW9kZShkbWEsIERNQV9NT0RFX1JFQUQpOworCisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSBETUFfQ0hBTl9CSVRTKGRtYSk7CisJfQorCisJZGV2LT5ib2FyZF9wdHIgPSBhMjE1MF9ib2FyZHMgKyBhMjE1MF9wcm9iZShkZXYpOworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9PVEhFUiB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSA0OworCXMtPmxlbl9jaGFubGlzdCA9IDQ7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hMjE1MDsKKwlzLT5kb19jbWQgPSBhMjE1MF9haV9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGEyMTUwX2FpX2NtZHRlc3Q7CisJcy0+aW5zbl9yZWFkID0gYTIxNTBfYWlfcmluc247CisJcy0+Y2FuY2VsID0gYTIxNTBfY2FuY2VsOworCisJLyogbmVlZCB0byBkbyB0aGlzIGZvciBzb2Z0d2FyZSBjb3VudGluZyBvZiBjb21wbGV0ZWQgY29udmVyc2lvbnMsIHRvCisJICogcHJldmVudCBoYXJkd2FyZSBjb3VudCBmcm9tIHN0b3BwaW5nIGFxdWlzaXRpb24gKi8KKwlvdXR3KEhXX0NPVU5UX0RJU0FCTEUsIGRldi0+aW9iYXNlICsgSTgyNTNfTU9ERV9SRUcpOworCisJLy8gc2V0IGNhcmQncyBpcnEgYW5kIGRtYSBsZXZlbHMKKwlvdXR3KGRldnByaXYtPmlycV9kbWFfYml0cywgZGV2LT5pb2Jhc2UgKyBJUlFfRE1BX0NOVFJMX1JFRyk7CisKKwkvLyByZXNldCBhbmQgc3luYyBhZGMgY2xvY2sgY2lyY3VpdHJ5CisJb3V0d19wKERQRF9CSVQgfCBBUERfQklULCBkZXYtPmlvYmFzZSArIENPTkZJR19SRUcpOworCW91dHdfcChEUERfQklULCBkZXYtPmlvYmFzZSArIENPTkZJR19SRUcpOworCS8vIGluaXRpYWxpemUgY29uZmlndXJhdGlvbiByZWdpc3RlcgorCWRldnByaXYtPmNvbmZpZ19iaXRzID0gMDsKKwlvdXR3KGRldnByaXYtPmNvbmZpZ19iaXRzLCBkZXYtPmlvYmFzZSArIENPTkZJR19SRUcpOworCS8vIHdhaXQgdW50aWwgb2Zmc2V0IGNhbGlicmF0aW9uIGlzIGRvbmUsIHRoZW4gZW5hYmxlIGFuYWxvZyBpbnB1dHMKKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCWlmICgoRENBTF9CSVQgJiBpbncoZGV2LT5pb2Jhc2UgKyBTVEFUVVNfUkVHKSkgPT0gMCkKKwkJCWJyZWFrOworCQljb21lZGlfdWRlbGF5KDEwMDApOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCXByaW50aygiIHRpbWVkIG91dCB3YWl0aW5nIGZvciBvZmZzZXQgY2FsaWJyYXRpb24gdG8gY29tcGxldGVcbiIpOworCQlyZXR1cm4gLUVUSU1FOworCX0KKwlkZXZwcml2LT5jb25maWdfYml0cyB8PSBFTkFCTEUwX0JJVCB8IEVOQUJMRTFfQklUOworCW91dHcoZGV2cHJpdi0+Y29uZmlnX2JpdHMsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgYTIxNTBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlcl9hMjE1MC5kcml2ZXJfbmFtZSk7CisKKwkvKiBvbmx5IGZyZWUgc3R1ZmYgaWYgaXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IF9hdHRhY2ggKi8KKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJLy8gcHV0IGJvYXJkIGluIHBvd2VyLWRvd24gbW9kZQorCQlvdXR3KEFQRF9CSVQgfCBEUERfQklULCBkZXYtPmlvYmFzZSArIENPTkZJR19SRUcpOworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgQTIxNTBfU0laRSk7CisJfQorCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPmRtYSkKKwkJCWZyZWVfZG1hKGRldnByaXYtPmRtYSk7CisJCWlmIChkZXZwcml2LT5kbWFfYnVmZmVyKQorCQkJa2ZyZWUoZGV2cHJpdi0+ZG1hX2J1ZmZlcik7CisJfQorCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IGEyMTUwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8vIGRpc2FibGUgZG1hIG9uIGNhcmQKKwlkZXZwcml2LT5pcnFfZG1hX2JpdHMgJj0gfkRNQV9JTlRSX0VOX0JJVCAmIH5ETUFfRU5fQklUOworCW91dHcoZGV2cHJpdi0+aXJxX2RtYV9iaXRzLCBkZXYtPmlvYmFzZSArIElSUV9ETUFfQ05UUkxfUkVHKTsKKworCS8vIGRpc2FibGUgY29tcHV0ZXIncyBkbWEKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOworCisJLy8gY2xlYXIgZmlmbyBhbmQgcmVzZXQgdHJpZ2dlcmluZyBjaXJjdWl0cnkKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19SRVNFVF9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTIxNTBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IHN0YXJ0Q2hhbjsKKwlpbnQgaTsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzYm9hcmQtPmFpX3NwZWVkKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc2JvYXJkLT5haV9zcGVlZDsKKwkJCWVycisrOworCQl9CisJfQorCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlhMjE1MF9nZXRfdGltaW5nKGRldiwgJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MpOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIGNoZWNrIGNoYW5uZWwvZ2FpbiBsaXN0IGFnYWluc3QgY2FyZCdzIGxpbWl0YXRpb25zCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJc3RhcnRDaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9IChzdGFydENoYW4gKyBpKSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUgY2hhbm5lbHMsIGNvdW50aW5nIHVwd2FyZHNcbiIpOworCQkJCWVycisrOworCQkJfQorCQl9CisJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAyICYmIENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgPT0gMSkgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkibGVuZ3RoIDIgY2hhbmxpc3QgbXVzdCBiZSBjaGFubmVscyAwLDEgb3IgY2hhbm5lbHMgMiwzIik7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMykgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiY2hhbmxpc3QgbXVzdCBoYXZlIDEsMiBvciA0IGNoYW5uZWxzIik7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSAhPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMV0pIHx8CisJCQlDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMl0pICE9IENSX0FSRUYoY21kLT5jaGFubGlzdFszXSkpCisJCXsKKwkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJImNoYW5uZWxzIDAvMSBhbmQgMi8zIG11c3QgaGF2ZSB0aGUgc2FtZSBhbmFsb2cgcmVmZXJlbmNlIik7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTIxNTBfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCXVuc2lnbmVkIGludCBvbGRfY29uZmlnX2JpdHMgPSBkZXZwcml2LT5jb25maWdfYml0czsKKwl1bnNpZ25lZCBpbnQgdHJpZ2dlcl9iaXRzOworCisJaWYgKCFkZXYtPmlycSB8fCAhZGV2cHJpdi0+ZG1hKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiIGlycSBhbmQgZG1hIHJlcXVpcmVkLCBjYW5ub3QgZG8gaGFyZHdhcmUgY29udmVyc2lvbnMiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY21kLT5mbGFncyAmIFRSSUdfUlQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSIgZG1hIGluY29tcGF0aWJsZSB3aXRoIGhhcmQgcmVhbC10aW1lIGludGVycnVwdCAoVFJJR19SVCksIGFib3J0aW5nIik7CisJCXJldHVybiAtMTsKKwl9CisJLy8gY2xlYXIgZmlmbyBhbmQgcmVzZXQgdHJpZ2dlcmluZyBjaXJjdWl0cnkKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19SRVNFVF9SRUcpOworCisJLyogc2V0dXAgY2hhbmxpc3QgKi8KKwlpZiAoYTIxNTBfc2V0X2NoYW5saXN0KGRldiwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSwKKwkJCWNtZC0+Y2hhbmxpc3RfbGVuKSA8IDApCisJCXJldHVybiAtMTsKKworCS8vIHNldHVwIGFjL2RjIGNvdXBsaW5nCisJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFswXSkgPT0gQVJFRl9PVEhFUikKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0gQUMwX0JJVDsKKwllbHNlCisJCWRldnByaXYtPmNvbmZpZ19iaXRzICY9IH5BQzBfQklUOworCWlmIChDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMl0pID09IEFSRUZfT1RIRVIpCisJCWRldnByaXYtPmNvbmZpZ19iaXRzIHw9IEFDMV9CSVQ7CisJZWxzZQorCQlkZXZwcml2LT5jb25maWdfYml0cyAmPSB+QUMxX0JJVDsKKworCS8vIHNldHVwIHRpbWluZworCWEyMTUwX2dldF90aW1pbmcoZGV2LCAmY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyk7CisKKwkvLyBzZW5kIHRpbWluZywgY2hhbm5lbCwgY29uZmlnIGJpdHMKKwlvdXR3KGRldnByaXYtPmNvbmZpZ19iaXRzLCBkZXYtPmlvYmFzZSArIENPTkZJR19SRUcpOworCisJLy8gaW5pdGlhbGl6ZSBudW1iZXIgb2Ygc2FtcGxlcyByZW1haW5pbmcKKwlkZXZwcml2LT5jb3VudCA9IGNtZC0+c3RvcF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbjsKKworCS8vIGVuYWJsZSBjb21wdXRlcidzIGRtYQorCWxvY2tfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzIGZvcgorCSAqIGNvdW50IGFuZCBhZGRyZXNzIGdldCBzZXQgY29ycmVjdGx5ICovCisJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYSk7CisJc2V0X2RtYV9hZGRyKGRldnByaXYtPmRtYSwgdmlydF90b19idXMoZGV2cHJpdi0+ZG1hX2J1ZmZlcikpOworCS8vIHNldCBzaXplIG9mIHRyYW5zZmVyIHRvIGZpbGwgaW4gMS8zIHNlY29uZAorI2RlZmluZSBPTkVfVEhJUkRfU0VDT05EIDMzMzMzMzMzMworCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID0KKwkJc2l6ZW9mKGRldnByaXYtPmRtYV9idWZmZXJbMF0pICogY21kLT5jaGFubGlzdF9sZW4gKgorCQlPTkVfVEhJUkRfU0VDT05EIC8gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwlpZiAoZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPiBBMjE1MF9ETUFfQlVGRkVSX1NJWkUpCisJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID0gQTIxNTBfRE1BX0JVRkZFUl9TSVpFOworCWlmIChkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA8IHNpemVvZihkZXZwcml2LT5kbWFfYnVmZmVyWzBdKSkKKwkJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPSBzaXplb2YoZGV2cHJpdi0+ZG1hX2J1ZmZlclswXSk7CisJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLT0KKwkJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgJSBzaXplb2YoZGV2cHJpdi0+ZG1hX2J1ZmZlclswXSk7CisJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisJcmVsZWFzZV9kbWFfbG9jayhsb2NrX2ZsYWdzKTsKKworCS8qIGNsZWFyIGRtYSBpbnRlcnJ1cHQgYmVmb3JlIGVuYWJsaW5nIGl0LCB0byB0cnkgYW5kIGdldCByaWQgb2YgdGhhdAorCSAqIG9uZSBzcHVyaW91cyBpbnRlcnJ1cHQgdGhhdCBoYXMgYmVlbiBoYXBwZW5pbmcgKi8KKwlvdXR3KDB4MDAsIGRldi0+aW9iYXNlICsgRE1BX1RDX0NMRUFSX1JFRyk7CisKKwkvLyBlbmFibGUgZG1hIG9uIGNhcmQKKwlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gRE1BX0lOVFJfRU5fQklUIHwgRE1BX0VOX0JJVDsKKwlvdXR3KGRldnByaXYtPmlycV9kbWFfYml0cywgZGV2LT5pb2Jhc2UgKyBJUlFfRE1BX0NOVFJMX1JFRyk7CisKKwkvLyBtYXkgbmVlZCB0byB3YWl0IDcyIHNhbXBsaW5nIHBlcmlvZHMgaWYgdGltaW5nIHdhcyBjaGFuZ2VkCisJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIEk4MjUzX0JBU0VfUkVHLCAwLCAyLCA3MiwgMCk7CisKKwkvLyBzZXR1cCBzdGFydCB0cmlnZ2VyaW5nCisJdHJpZ2dlcl9iaXRzID0gMDsKKwkvLyBkZWNpZGUgaWYgd2UgbmVlZCB0byB3YWl0IDcyIHBlcmlvZHMgZm9yIHZhbGlkIGRhdGEKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cgJiYKKwkJKG9sZF9jb25maWdfYml0cyAmIENMT0NLX01BU0spICE9CisJCShkZXZwcml2LT5jb25maWdfYml0cyAmIENMT0NLX01BU0spKSB7CisJCS8vIHNldCB0cmlnZ2VyIHNvdXJjZSB0byBkZWxheSB0cmlnZ2VyCisJCXRyaWdnZXJfYml0cyB8PSBERUxBWV9UUklHR0VSX0JJVFM7CisJfSBlbHNlIHsKKwkJLy8gb3RoZXJ3aXNlIG5vIGRlbGF5CisJCXRyaWdnZXJfYml0cyB8PSBQT1NUX1RSSUdHRVJfQklUUzsKKwl9CisJLy8gZW5hYmxlIGV4dGVybmFsIGhhcmR3YXJlIHRyaWdnZXIKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJdHJpZ2dlcl9iaXRzIHw9IEhXX1RSSUdfRU47CisJfSBlbHNlIGlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX09USEVSKSB7CisJCS8vIFhYWCBhZGQgc3VwcG9ydCBmb3IgbGV2ZWwvc2xvcGUgc3RhcnQgdHJpZ2dlciB1c2luZyBUUklHX09USEVSCisJCWNvbWVkaV9lcnJvcihkZXYsICJ5b3Ugc2hvdWxkbid0IHNlZSB0aGlzPyIpOworCX0KKwkvLyBzZW5kIHRyaWdnZXIgY29uZmlnIGJpdHMKKwlvdXR3KHRyaWdnZXJfYml0cywgZGV2LT5pb2Jhc2UgKyBUUklHR0VSX1JFRyk7CisKKwkvLyBzdGFydCBhcXVpc2l0aW9uIGZvciBzb2Z0IHRyaWdnZXIKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIEZJRk9fU1RBUlRfUkVHKTsKKwl9CisjaWZkZWYgQTIxNTBfREVCVUcKKwluaV9kdW1wX3JlZ3MoZGV2KTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTIxNTBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBpLCBuOworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDAwMDsKKwlzdGF0aWMgY29uc3QgaW50IGZpbHRlcl9kZWxheSA9IDM2OworCisJLy8gY2xlYXIgZmlmbyBhbmQgcmVzZXQgdHJpZ2dlcmluZyBjaXJjdWl0cnkKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19SRVNFVF9SRUcpOworCisJLyogc2V0dXAgY2hhbmxpc3QgKi8KKwlpZiAoYTIxNTBfc2V0X2NoYW5saXN0KGRldiwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIDEpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLy8gc2V0IGRjIGNvdXBsaW5nCisJZGV2cHJpdi0+Y29uZmlnX2JpdHMgJj0gfkFDMF9CSVQ7CisJZGV2cHJpdi0+Y29uZmlnX2JpdHMgJj0gfkFDMV9CSVQ7CisKKwkvLyBzZW5kIHRpbWluZywgY2hhbm5lbCwgY29uZmlnIGJpdHMKKwlvdXR3KGRldnByaXYtPmNvbmZpZ19iaXRzLCBkZXYtPmlvYmFzZSArIENPTkZJR19SRUcpOworCisJLy8gZGlzYWJsZSBkbWEgb24gY2FyZAorCWRldnByaXYtPmlycV9kbWFfYml0cyAmPSB+RE1BX0lOVFJfRU5fQklUICYgfkRNQV9FTl9CSVQ7CisJb3V0dyhkZXZwcml2LT5pcnFfZG1hX2JpdHMsIGRldi0+aW9iYXNlICsgSVJRX0RNQV9DTlRSTF9SRUcpOworCisJLy8gc2V0dXAgc3RhcnQgdHJpZ2dlcmluZworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBUUklHR0VSX1JFRyk7CisKKwkvLyBzdGFydCBhcXVpc2l0aW9uIGZvciBzb2Z0IHRyaWdnZXIKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19TVEFSVF9SRUcpOworCisJLyogdGhlcmUgaXMgYSAzNS42IHNhbXBsZSBkZWxheSBmb3IgZGF0YSB0byBnZXQgdGhyb3VnaCB0aGUgYW50aWFsaWFzIGZpbHRlciAqLworCWZvciAobiA9IDA7IG4gPCBmaWx0ZXJfZGVsYXk7IG4rKykgeworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQlpZiAoaW53KGRldi0+aW9iYXNlICsgU1RBVFVTX1JFRykgJiBGTkVfQklUKQorCQkJCWJyZWFrOworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCQlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAidGltZW91dCIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQlpbncoZGV2LT5pb2Jhc2UgKyBGSUZPX0RBVEFfUkVHKTsKKwl9CisKKwkvLyByZWFkIGRhdGEKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChpbncoZGV2LT5pb2Jhc2UgKyBTVEFUVVNfUkVHKSAmIEZORV9CSVQpCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCWlmIChpID09IHRpbWVvdXQpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisjaWZkZWYgQTIxNTBfREVCVUcKKwkJbmlfZHVtcF9yZWdzKGRldik7CisjZW5kaWYKKwkJZGF0YVtuXSA9IGludyhkZXYtPmlvYmFzZSArIEZJRk9fREFUQV9SRUcpOworI2lmZGVmIEEyMTUwX0RFQlVHCisJCXJ0X3ByaW50aygiIGRhdGEgaXMgJWlcbiIsIGRhdGFbbl0pOworI2VuZGlmCisJCWRhdGFbbl0gXj0gMHg4MDAwOworCX0KKworCS8vIGNsZWFyIGZpZm8gYW5kIHJlc2V0IHRyaWdnZXJpbmcgY2lyY3VpdHJ5CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIEZJRk9fUkVTRVRfUkVHKTsKKworCXJldHVybiBuOworfQorCisvKiBzZXRzIGJpdHMgaW4gZGV2cHJpdi0+Y2xvY2tfYml0cyB0byBuZWFyZXN0IGFwcHJveGltYXRpb24gb2YgcmVxdWVzdGVkIHBlcmlvZCwKKyAqIGFkanVzdHMgcmVxdWVzdGVkIHBlcmlvZCB0byBhY3R1YWwgdGltaW5nLiAqLworc3RhdGljIGludCBhMjE1MF9nZXRfdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnBlcmlvZCwKKwlpbnQgZmxhZ3MpCit7CisJaW50IGx1YiwgZ2xiLCB0ZW1wOworCWludCBsdWJfZGl2aXNvcl9zaGlmdCwgbHViX2luZGV4LCBnbGJfZGl2aXNvcl9zaGlmdCwgZ2xiX2luZGV4OworCWludCBpLCBqOworCisJLy8gaW5pdGlhbGl6ZSBncmVhdGVzdCBsb3dlciBhbmQgbGVhc3QgdXBwZXIgYm91bmRzCisJbHViX2Rpdmlzb3Jfc2hpZnQgPSAzOworCWx1Yl9pbmRleCA9IDA7CisJbHViID0gdGhpc2JvYXJkLT5jbG9ja1tsdWJfaW5kZXhdICogKDEgPDwgbHViX2Rpdmlzb3Jfc2hpZnQpOworCWdsYl9kaXZpc29yX3NoaWZ0ID0gMDsKKwlnbGJfaW5kZXggPSB0aGlzYm9hcmQtPm51bV9jbG9ja3MgLSAxOworCWdsYiA9IHRoaXNib2FyZC0+Y2xvY2tbZ2xiX2luZGV4XSAqICgxIDw8IGdsYl9kaXZpc29yX3NoaWZ0KTsKKworCS8vIG1ha2Ugc3VyZSBwZXJpb2QgaXMgaW4gYXZhaWxhYmxlIHJhbmdlCisJaWYgKCpwZXJpb2QgPCBnbGIpCisJCSpwZXJpb2QgPSBnbGI7CisJaWYgKCpwZXJpb2QgPiBsdWIpCisJCSpwZXJpb2QgPSBsdWI7CisKKwkvLyB3ZSBjYW4gbXVsdGlwbHkgcGVyaW9kIGJ5IDEsIDIsIDQsIG9yIDgsIHVzaW5nICgxIDw8IGkpCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkvLyB0aGVyZSBhcmUgYSBtYXhpbXVtIG9mIDQgbWFzdGVyIGNsb2NrcworCQlmb3IgKGogPSAwOyBqIDwgdGhpc2JvYXJkLT5udW1fY2xvY2tzOyBqKyspIHsKKwkJCS8vIHRlbXAgaXMgdGhlIHBlcmlvZCBpbiBuYW5vc2VjIHdlIGFyZSBldmFsdWF0aW5nCisJCQl0ZW1wID0gdGhpc2JvYXJkLT5jbG9ja1tqXSAqICgxIDw8IGkpOworCQkJLy8gaWYgaXQgaXMgdGhlIGJlc3QgbWF0Y2ggeWV0CisJCQlpZiAodGVtcCA8IGx1YiAmJiB0ZW1wID49ICpwZXJpb2QpIHsKKwkJCQlsdWJfZGl2aXNvcl9zaGlmdCA9IGk7CisJCQkJbHViX2luZGV4ID0gajsKKwkJCQlsdWIgPSB0ZW1wOworCQkJfQorCQkJaWYgKHRlbXAgPiBnbGIgJiYgdGVtcCA8PSAqcGVyaW9kKSB7CisJCQkJZ2xiX2Rpdmlzb3Jfc2hpZnQgPSBpOworCQkJCWdsYl9pbmRleCA9IGo7CisJCQkJZ2xiID0gdGVtcDsKKwkJCX0KKwkJfQorCX0KKwlmbGFncyAmPSBUUklHX1JPVU5EX01BU0s7CisJc3dpdGNoIChmbGFncykgeworCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCWRlZmF1bHQ6CisJCS8vIGlmIGxlYXN0IHVwcGVyIGJvdW5kIGlzIGJldHRlciBhcHByb3hpbWF0aW9uCisJCWlmIChsdWIgLSAqcGVyaW9kIDwgKnBlcmlvZCAtIGdsYikgeworCQkJKnBlcmlvZCA9IGx1YjsKKwkJfSBlbHNlIHsKKwkJCSpwZXJpb2QgPSBnbGI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQkqcGVyaW9kID0gbHViOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJKnBlcmlvZCA9IGdsYjsKKwkJYnJlYWs7CisJfQorCisJLy8gc2V0IGNsb2NrIGJpdHMgZm9yIGNvbmZpZyByZWdpc3RlciBhcHByb3ByaWF0ZWx5CisJZGV2cHJpdi0+Y29uZmlnX2JpdHMgJj0gfkNMT0NLX01BU0s7CisJaWYgKCpwZXJpb2QgPT0gbHViKSB7CisJCWRldnByaXYtPmNvbmZpZ19iaXRzIHw9CisJCQlDTE9DS19TRUxFQ1RfQklUUyhsdWJfaW5kZXgpIHwKKwkJCUNMT0NLX0RJVklTT1JfQklUUyhsdWJfZGl2aXNvcl9zaGlmdCk7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0KKwkJCUNMT0NLX1NFTEVDVF9CSVRTKGdsYl9pbmRleCkgfAorCQkJQ0xPQ0tfRElWSVNPUl9CSVRTKGdsYl9kaXZpc29yX3NoaWZ0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhMjE1MF9zZXRfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBzdGFydF9jaGFubmVsLAorCXVuc2lnbmVkIGludCBudW1fY2hhbm5lbHMpCit7CisJaWYgKHN0YXJ0X2NoYW5uZWwgKyBudW1fY2hhbm5lbHMgPiA0KQorCQlyZXR1cm4gLTE7CisKKwlkZXZwcml2LT5jb25maWdfYml0cyAmPSB+Q0hBTk5FTF9NQVNLOworCisJc3dpdGNoIChudW1fY2hhbm5lbHMpIHsKKwljYXNlIDE6CisJCWRldnByaXYtPmNvbmZpZ19iaXRzIHw9IENIQU5ORUxfQklUUygweDQgfCBzdGFydF9jaGFubmVsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoc3RhcnRfY2hhbm5lbCA9PSAwKSB7CisJCQlkZXZwcml2LT5jb25maWdfYml0cyB8PSBDSEFOTkVMX0JJVFMoMHgyKTsKKwkJfSBlbHNlIGlmIChzdGFydF9jaGFubmVsID09IDIpIHsKKwkJCWRldnByaXYtPmNvbmZpZ19iaXRzIHw9IENIQU5ORUxfQklUUygweDMpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIC0xOworCQl9CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0gQ0hBTk5FTF9CSVRTKDB4MSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYzQ2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYwpAQCAtMCwwICsxLDQ1NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9uaV9hdF9hby5jCisgICAgRHJpdmVyIGZvciBOSSBBVC1BTy02LzEwIGJvYXJkcworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCwyMDAyIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBuaV9hdF9hbworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIEFULUFPLTYvMTAKK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gQVQtQU8tNiAoYXQtYW8tNiksIEFULUFPLTEwIChhdC1hby0xMCkKK1N0YXR1czogc2hvdWxkIHdvcmsKK0F1dGhvcjogZHMKK1VwZGF0ZWQ6IFN1biBEZWMgMjYgMTI6MjY6MjggRVNUIDIwMDQKKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRICh1bnVzZWQpCisgIFsyXSAtIERNQSAodW51c2VkKQorICBbM10gLSBhbmFsb2cgb3V0cHV0IHJhbmdlLCBzZXQgYnkganVtcGVycyBvbiBoYXJkd2FyZSAoMCBmb3IgLTEwIHRvIDEwViBiaXBvbGFyLCAxIGZvciAwViB0byAxMFYgdW5pcG9sYXIpCisKKyovCisvKgorICogUmVnaXN0ZXItbGV2ZWwgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIE5JCisgKiBkb2N1bWVudCAzMjAzNzkucGRmLgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisvKiBib2FyZCBlZ2lzdGVycyAqLworLyogcmVnaXN0ZXJzIHdpdGggXzJfIGFyZSBhY2Nlc3NlZCB3aGVuIEdSUDJXUiBpcyBzZXQgaW4gQ0ZHMSAqLworCisjZGVmaW5lIEFUQU9fU0laRSAweDIwCisKKyNkZWZpbmUgQVRBT18yX0RNQVRDQ0xSCQkweDAwCS8qIFcgMTYgKi8KKyNkZWZpbmUgQVRBT19ESU4JCTB4MDAJLyogUiAxNiAqLworI2RlZmluZSBBVEFPX0RPVVQJCTB4MDAJLyogVyAxNiAqLworCisjZGVmaW5lIEFUQU9fQ0ZHMgkJMHgwMgkvKiBXIDE2ICovCisjZGVmaW5lIENBTExEMQkweDgwMDAKKyNkZWZpbmUgQ0FMTEQwCTB4NDAwMAorI2RlZmluZSBGRlJURU4JMHgyMDAwCisjZGVmaW5lIERBQzJTOAkweDEwMDAKKyNkZWZpbmUgREFDMlM2CTB4MDgwMAorI2RlZmluZSBEQUMyUzQJMHgwNDAwCisjZGVmaW5lIERBQzJTMgkweDAyMDAKKyNkZWZpbmUgREFDMlMwCTB4MDEwMAorI2RlZmluZSBMREFDOAkJMHgwMDgwCisjZGVmaW5lIExEQUM2CQkweDAwNDAKKyNkZWZpbmUgTERBQzQJCTB4MDAyMAorI2RlZmluZSBMREFDMgkJMHgwMDEwCisjZGVmaW5lIExEQUMwCQkweDAwMDgKKyNkZWZpbmUgUFJPTUVOCTB4MDAwNAorI2RlZmluZSBTQ0xLCQkweDAwMDIKKyNkZWZpbmUgU0RBVEEJCTB4MDAwMQorCisjZGVmaW5lIEFUQU9fMl9JTlQxQ0xSCQkweDAyCS8qIFcgMTYgKi8KKworI2RlZmluZSBBVEFPX0NGRzMJCTB4MDQJLyogVyAxNiAqLworI2RlZmluZSBETUFNT0RFCTB4MDA0MAorI2RlZmluZSBDTEtPVVQJMHgwMDIwCisjZGVmaW5lIFJDTEtFTgkweDAwMTAKKyNkZWZpbmUgRE9VVEVOMgkweDAwMDgKKyNkZWZpbmUgRE9VVEVOMQkweDAwMDQKKyNkZWZpbmUgRU4yXzVWCTB4MDAwMgorI2RlZmluZSBTQ0FORU4JMHgwMDAxCisKKyNkZWZpbmUgQVRBT18yX0lOVDJDTFIJCTB4MDQJLyogVyAxNiAqLworCisjZGVmaW5lIEFUQU9fODJDNTNfQkFTRQkJMHgwNgkvKiBSVyA4ICovCisKKyNkZWZpbmUgQVRBT184MkM1M19DTlRSMQkweDA2CS8qIFJXIDggKi8KKyNkZWZpbmUgQVRBT184MkM1M19DTlRSMgkweDA3CS8qIFJXIDggKi8KKyNkZWZpbmUgQVRBT184MkM1M19DTlRSMwkweDA4CS8qIFJXIDggKi8KKyNkZWZpbmUgQVRBT184MkM1M19DTlRSQ01ECTB4MDkJLyogVyA4ICovCisjZGVmaW5lIENOVFJTRUwxCTB4ODAKKyNkZWZpbmUgQ05UUlNFTDAJMHg0MAorI2RlZmluZSBSV1NFTDEJMHgyMAorI2RlZmluZSBSV1NFTDAJMHgxMAorI2RlZmluZSBNT0RFU0VMMgkweDA4CisjZGVmaW5lIE1PREVTRUwxCTB4MDQKKyNkZWZpbmUgTU9ERVNFTDAJMHgwMgorI2RlZmluZSBCQ0RTRUwJMHgwMQorICAvKiByZWFkLWJhY2sgY29tbWFuZCAqLworI2RlZmluZSBDT1VOVAkJMHgyMAorI2RlZmluZSBTVEFUVVMJMHgxMAorI2RlZmluZSBDTlRSMwkJMHgwOAorI2RlZmluZSBDTlRSMgkJMHgwNAorI2RlZmluZSBDTlRSMQkJMHgwMgorICAvKiBzdGF0dXMgKi8KKyNkZWZpbmUgT1VUCQkweDgwCisjZGVmaW5lIF9OVUxMCQkweDQwCisjZGVmaW5lIFJXMQkJMHgyMAorI2RlZmluZSBSVzAJCTB4MTAKKyNkZWZpbmUgTU9ERTIJCTB4MDgKKyNkZWZpbmUgTU9ERTEJCTB4MDQKKyNkZWZpbmUgTU9ERTAJCTB4MDIKKyNkZWZpbmUgQkNECQkweDAxCisKKyNkZWZpbmUgQVRBT18yX1JUU0lTSEZUCQkweDA2CS8qIFcgOCAqLworI2RlZmluZSBSU0kJCTB4MDEKKworI2RlZmluZSBBVEFPXzJfUlRTSVNUUkIJCTB4MDcJLyogVyA4ICovCisKKyNkZWZpbmUgQVRBT19DRkcxCQkweDBhCS8qIFcgMTYgKi8KKyNkZWZpbmUgRVhUSU5UMkVOCTB4ODAwMAorI2RlZmluZSBFWFRJTlQxRU4JMHg0MDAwCisjZGVmaW5lIENOVElOVDJFTgkweDIwMDAKKyNkZWZpbmUgQ05USU5UMUVOCTB4MTAwMAorI2RlZmluZSBUQ0lOVEVOCTB4MDgwMAorI2RlZmluZSBDTlQxU1JDCTB4MDQwMAorI2RlZmluZSBDTlQyU1JDCTB4MDIwMAorI2RlZmluZSBGSUZPRU4JMHgwMTAwCisjZGVmaW5lIEdSUDJXUgkweDAwODAKKyNkZWZpbmUgRVhUVVBERU4JMHgwMDQwCisjZGVmaW5lIERNQVJRCQkweDAwMjAKKyNkZWZpbmUgRE1BRU4JCTB4MDAxMAorI2RlZmluZSBDSF9tYXNrCTB4MDAwZgorI2RlZmluZSBBVEFPX1NUQVRVUwkJMHgwYQkvKiBSIDE2ICovCisjZGVmaW5lIEZICQkweDAwNDAKKyNkZWZpbmUgRkUJCTB4MDAyMAorI2RlZmluZSBGRgkJMHgwMDEwCisjZGVmaW5lIElOVDIJCTB4MDAwOAorI2RlZmluZSBJTlQxCQkweDAwMDQKKyNkZWZpbmUgVENJTlQJCTB4MDAwMgorI2RlZmluZSBQUk9NT1VUCTB4MDAwMQorCisjZGVmaW5lIEFUQU9fRklGT19XUklURQkJMHgwYwkvKiBXIDE2ICovCisjZGVmaW5lIEFUQU9fRklGT19DTEVBUgkJMHgwYwkvKiBSIDE2ICovCisjZGVmaW5lIEFUQU9fREFDbih4KQkJKDB4MGMgKyAyKih4KSkJLyogVyAqLworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IGF0YW9fYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG5fYW9fY2hhbnM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YW9fYm9hcmQgYXRhb19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImFpLWFvLTYiLAorCSAgICAgIG5fYW9fY2hhbnM6NiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImFpLWFvLTEwIiwKKwkgICAgICBuX2FvX2NoYW5zOjEwLAorCQl9LAorfTsKKworI2RlZmluZSB0aGlzYm9hcmQgKChzdHJ1Y3QgYXRhb19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgYXRhb19wcml2YXRlIHsKKworCXVuc2lnbmVkIHNob3J0IGNmZzE7CisJdW5zaWduZWQgc2hvcnQgY2ZnMjsKKwl1bnNpZ25lZCBzaG9ydCBjZmczOworCisJLyogVXNlZCBmb3IgQU8gcmVhZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMTBdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGF0YW9fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBhdGFvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGF0YW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYXRhbyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaV9hdF9hbyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YXRhb19hdHRhY2gsCisgICAgICBkZXRhY2g6YXRhb19kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZhdGFvX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgYXRhb19ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGF0YW9fYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgYXRhb19ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2F0YW8pOworCitzdGF0aWMgdm9pZCBhdGFvX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIGludCBhdGFvX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGF0YW9fYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGF0YW9fZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGF0YW9fY2FsaWJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGF0YW9fY2FsaWJfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGF0YW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCWludCBhb191bmlwb2xhcjsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlmIChpb2Jhc2UgPT0gMCkKKwkJaW9iYXNlID0gMHgxYzA7CisJYW9fdW5pcG9sYXIgPSBpdC0+b3B0aW9uc1szXTsKKworCXByaW50aygiY29tZWRpJWQ6IG5pX2F0X2FvOiAweCUwNGx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBBVEFPX1NJWkUsICJuaV9hdF9hbyIpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJLy9kZXYtPmJvYXJkX3B0ciA9IGF0YW9fcHJvYmUoZGV2KTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhdGFvX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+bl9hb19jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsKKwlpZiAoYW9fdW5pcG9sYXIpCisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJZWxzZQorCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJcy0+aW5zbl93cml0ZSA9ICZhdGFvX2FvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZhdGFvX2FvX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGF0YW9fZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IGF0YW9fZGlvX2luc25fY29uZmlnOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogY2FsZGFjIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DQUxJQjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bl9jaGFuID0gMjE7CisJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJcy0+aW5zbl9yZWFkID0gYXRhb19jYWxpYl9pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IGF0YW9fY2FsaWJfaW5zbl93cml0ZTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGVlcHJvbSBzdWJkZXZpY2UgKi8KKwkvL3MtPnR5cGU9Q09NRURJX1NVQkRfRUVQUk9NOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwlhdGFvX3Jlc2V0KGRldik7CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGFvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBhdGFvOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgQVRBT19TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGFvX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qIFRoaXMgaXMgdGhlIHJlc2V0IHNlcXVlbmNlIGRlc2NyaWJlZCBpbiB0aGUgbWFudWFsICovCisKKwlkZXZwcml2LT5jZmcxID0gMDsKKwlvdXR3KGRldnByaXYtPmNmZzEsIGRldi0+aW9iYXNlICsgQVRBT19DRkcxKTsKKworCW91dGIoUldTRUwwIHwgTU9ERVNFTDIsIGRldi0+aW9iYXNlICsgQVRBT184MkM1M19DTlRSQ01EKTsKKwlvdXRiKDB4MDMsIGRldi0+aW9iYXNlICsgQVRBT184MkM1M19DTlRSMSk7CisJb3V0YihDTlRSU0VMMCB8IFJXU0VMMCB8IE1PREVTRUwyLCBkZXYtPmlvYmFzZSArIEFUQU9fODJDNTNfQ05UUkNNRCk7CisKKwlkZXZwcml2LT5jZmcyID0gMDsKKwlvdXR3KGRldnByaXYtPmNmZzIsIGRldi0+aW9iYXNlICsgQVRBT19DRkcyKTsKKworCWRldnByaXYtPmNmZzMgPSAwOworCW91dHcoZGV2cHJpdi0+Y2ZnMywgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzMpOworCisJaW53KGRldi0+aW9iYXNlICsgQVRBT19GSUZPX0NMRUFSKTsKKworCWRldnByaXYtPmNmZzEgfD0gR1JQMldSOworCW91dHcoZGV2cHJpdi0+Y2ZnMSwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzEpOworCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIEFUQU9fMl9JTlQxQ0xSKTsKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgQVRBT18yX0lOVDJDTFIpOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBVEFPXzJfRE1BVENDTFIpOworCisJZGV2cHJpdi0+Y2ZnMSAmPSB+R1JQMldSOworCW91dHcoZGV2cHJpdi0+Y2ZnMSwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzEpOworfQorCitzdGF0aWMgaW50IGF0YW9fYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJc2hvcnQgYml0czsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJYml0cyA9IGRhdGFbaV0gLSAweDgwMDsKKwkJaWYgKGNoYW4gPT0gMCkgeworCQkJZGV2cHJpdi0+Y2ZnMSB8PSBHUlAyV1I7CisJCQlvdXR3KGRldnByaXYtPmNmZzEsIGRldi0+aW9iYXNlICsgQVRBT19DRkcxKTsKKwkJfQorCQlvdXR3KGJpdHMsIGRldi0+aW9iYXNlICsgQVRBT19EQUNuKGNoYW4pKTsKKwkJaWYgKGNoYW4gPT0gMCkgeworCQkJZGV2cHJpdi0+Y2ZnMSAmPSB+R1JQMldSOworCQkJb3V0dyhkZXZwcml2LT5jZmcxLCBkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMSk7CisJCX0KKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGF0YW9fYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBhdGFvX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQlvdXR3KHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIEFUQU9fRE9VVCk7CisJfQorCisJZGF0YVsxXSA9IGludyhkZXYtPmlvYmFzZSArIEFUQU9fRElOKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGF0YW9fZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGludCBtYXNrLCBiaXQ7CisKKwkvKiBUaGUgaW5wdXQgb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBkaWdpdGFsIGxpbmUgaXMKKwkgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCisJICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisJICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCisKKwltYXNrID0gKGNoYW4gPCA0KSA/IDB4MGYgOiAweGYwOworCWJpdCA9IChjaGFuIDwgNCkgPyBET1VURU4xIDogRE9VVEVOMjsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSBtYXNrOworCQlkZXZwcml2LT5jZmczIHw9IGJpdDsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPmlvX2JpdHMgJj0gfm1hc2s7CisJCWRldnByaXYtPmNmZzMgJj0gfmJpdDsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPgorCQkJaW9fYml0cyAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJb3V0dyhkZXZwcml2LT5jZmczLCBkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMyk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEZpZ3VyZSAyLTEgaW4gdGhlIG1hbnVhbCBzaG93cyAzIGNoaXBzIGxhYmVsZWQgREFDODgwMCwgd2hpY2gKKyAqIGFyZSA4LWNoYW5uZWwgOC1iaXQgREFDcy4gIFRoZXNlIGFyZSBtb3N0IGxpa2VseSB0aGUgY2FsaWJyYXRpb24KKyAqIERBQ3MuICBJdCBpcyBub3QgZXhwbGljaXRseSBzdGF0ZWQgaW4gdGhlIG1hbnVhbCBob3cgdG8gYWNjZXNzCisgKiB0aGUgY2FsZGFjcywgYnV0IHdlIGNhbiBndWVzcy4KKyAqLworc3RhdGljIGludCBhdGFvX2NhbGliX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gMDsJLyogWFhYICovCisJfQorCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IGF0YW9fY2FsaWJfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdHN0cmluZywgYml0OworCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwliaXRzdHJpbmcgPSAoKGNoYW4gJiAweDcpIDw8IDgpIHwgKGRhdGFbaW5zbi0+biAtIDFdICYgMHhmZik7CisKKwlmb3IgKGJpdCA9IDEgPDwgKDExIC0gMSk7IGJpdDsgYml0ID4+PSAxKSB7CisJCW91dHcoZGV2cHJpdi0+Y2ZnMiB8ICgoYml0ICYgYml0c3RyaW5nKSA/IFNEQVRBIDogMCksCisJCQlkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMik7CisJCW91dHcoZGV2cHJpdi0+Y2ZnMiB8IFNDTEsgfCAoKGJpdCAmIGJpdHN0cmluZykgPyBTREFUQSA6IDApLAorCQkJZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzIpOworCX0KKwkvKiBzdHJvYmUgdGhlIGFwcHJvcHJpYXRlIGNhbGRhYyAqLworCW91dHcoZGV2cHJpdi0+Y2ZnMiB8ICgoKGNoYW4gPj4gMykgKyAxKSA8PCAxNCksCisJCWRldi0+aW9iYXNlICsgQVRBT19DRkcyKTsKKwlvdXR3KGRldnByaXYtPmNmZzIsIGRldi0+aW9iYXNlICsgQVRBT19DRkcyKTsKKworCXJldHVybiBpbnNuLT5uOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2MzODUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMKQEAgLTAsMCArMSw1MTMgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYworICAgIEhhcmR3YXJlIGRyaXZlciBmb3IgTkkgQVQtTUlPIEUgc2VyaWVzIGNhcmRzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBuaV9hdG1pbworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIEFULU1JTy1FIHNlcmllcworQXV0aG9yOiBkcworRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBBVC1NSU8tMTZFLTEgKG5pX2F0bWlvKSwKKyAgQVQtTUlPLTE2RS0yLCBBVC1NSU8tMTZFLTEwLCBBVC1NSU8tMTZERS0xMCwgQVQtTUlPLTY0RS0zLAorICBBVC1NSU8tMTZYRS01MCwgQVQtTUlPLTE2WEUtMTAsIEFULUFJLTE2WEUtMTAKK1N0YXR1czogd29ya3MKK1VwZGF0ZWQ6IFRodSBNYXkgIDEgMjA6MDM6MDIgQ0RUIDIwMDMKKworVGhlIGRyaXZlciBoYXMgMi42IGtlcm5lbCBpc2FwbnAgc3VwcG9ydCwgYW5kCit3aWxsIGF1dG9tYXRpY2FsbHkgcHJvYmUgZm9yIGEgc3VwcG9ydGVkIGJvYXJkIGlmIHRoZQorSS9PIGJhc2UgaXMgbGVmdCB1bnNwZWNpZmllZCB3aXRoIGNvbWVkaV9jb25maWcuCitIb3dldmVyLCBtYW55IG9mCit0aGUgaXNhcG5wIGlkIG51bWJlcnMgYXJlIHVua25vd24uICBJZiB5b3VyIGJvYXJkIGlzIG5vdAorcmVjb2duaXplZCwgcGxlYXNlIHNlbmQgdGhlIG91dHB1dCBvZiAnY2F0IC9wcm9jL2lzYXBucCcKKyh5b3UgbWF5IG5lZWQgdG8gbW9kcHJvYmUgdGhlIGlzYS1wbnAgbW9kdWxlIGZvcgorL3Byb2MvaXNhcG5wIHRvIGV4aXN0KSBzbyB0aGUKK2lkIG51bWJlcnMgZm9yIHlvdXIgYm9hcmQgY2FuIGJlIGFkZGVkIHRvIHRoZSBkcml2ZXIuCisKK090aGVyd2lzZSwgeW91IGNhbiB1c2UgdGhlIGlzYXBucHRvb2xzIHBhY2thZ2UgdG8gY29uZmlndXJlCit5b3VyIGJvYXJkLiAgVXNlIGlzYXBucCB0bworY29uZmlndXJlIHRoZSBJL08gYmFzZSBhbmQgSVJRIGZvciB0aGUgYm9hcmQsIGFuZCB0aGVuIHBhc3MKK3RoZSBzYW1lIHZhbHVlcyBhcworcGFyYW1ldGVycyBpbiBjb21lZGlfY29uZmlnLiAgQSBzYW1wbGUgaXNhcG5wLmNvbmYgZmlsZSBpcyBpbmNsdWRlZAoraW4gdGhlIGV0Yy8gZGlyZWN0b3J5IG9mIENvbWVkaWxpYi4KKworQ29tZWRpbGliIGluY2x1ZGVzIGEgdXRpbGl0eSB0byBhdXRvY2FsaWJyYXRlIHRoZXNlIGJvYXJkcy4gIFRoZQorYm9hcmRzIHNlZW0gdG8gYm9vdCBpbnRvIGEgc3RhdGUgd2hlcmUgdGhlIGFsbCBjYWxpYnJhdGlvbiBEQUNzCithcmUgYXQgb25lIGV4dHJlbWUgb2YgdGhlaXIgcmFuZ2UsIHRodXMgdGhlIGRlZmF1bHQgY2FsaWJyYXRpb24KK2lzIHRlcnJpYmxlLiAgQ2FsaWJyYXRpb24gYXQgYm9vdCBpcyBzdHJvbmdseSBlbmNvdXJhZ2VkLgorCitUbyB1c2UgdGhlIGV4dGVuZGVkIGRpZ2l0YWwgSS9PIG9uIHNvbWUgb2YgdGhlIGJvYXJkcywgZW5hYmxlIHRoZQorODI1NSBkcml2ZXIgd2hlbiBjb25maWd1cmluZyB0aGUgQ29tZWRpIHNvdXJjZSB0cmVlLgorCitFeHRlcm5hbCB0cmlnZ2VyaW5nIGlzIHN1cHBvcnRlZCBmb3Igc29tZSBldmVudHMuICBUaGUgY2hhbm5lbCBpbmRleAorKHNjYW5fYmVnaW5fYXJnLCBldGMuKSBtYXBzIHRvIFBGSTAgLSBQRkk5LgorCitTb21lIG9mIHRoZSBtb3JlIGVzb3RlcmljIHRyaWdnZXJpbmcgcG9zc2liaWxpdGllcyBvZiB0aGVzZSBib2FyZHMKK2FyZSBub3Qgc3VwcG9ydGVkLgorKi8KKy8qCisJVGhlIHJlYWwgZ3V0cyBvZiB0aGUgZHJpdmVyIGlzIGluIG5pX21pb19jb21tb24uYywgd2hpY2ggaXMgaW5jbHVkZWQKKwlib3RoIGhlcmUgYW5kIGluIG5pX3BjaW1pby5jCisKKwlJbnRlcnJ1cHQgc3VwcG9ydCBhZGRlZCBieSBUcnV4dG9uIEZ1bHRvbiA8dHJ1eEB0cnV4dG9uLmNvbT4KKworCVJlZmVyZW5jZXMgZm9yIHNwZWNpZmljYXRpb25zOgorCisJICAgMzQwNzQ3Yi5wZGYgIFJlZ2lzdGVyIExldmVsIFByb2dyYW1tZXIgTWFudWFsIChvYnNvbGV0ZSkKKwkgICAzNDA3NDdjLnBkZiAgUmVnaXN0ZXIgTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgKG5ldykKKwkgICBEQVEtU1RDIHJlZmVyZW5jZSBtYW51YWwKKworCU90aGVyIHBvc3NpYmx5IHJlbGV2YW50IGluZm86CisKKwkgICAzMjA1MTdjLnBkZiAgVXNlciBtYW51YWwgKG9ic29sZXRlKQorCSAgIDMyMDUxN2YucGRmICBVc2VyIG1hbnVhbCAobmV3KQorCSAgIDMyMDg4OWEucGRmICBkZWxldGUKKwkgICAzMjA5MDZjLnBkZiAgbWF4aW11bSBzaWduYWwgcmF0aW5ncworCSAgIDMyMTA2NmEucGRmICBhYm91dCAxNngKKwkgICAzMjE3OTFhLnBkZiAgZGlzY29udGludWF0aW9uIG9mIGF0LW1pby0xNmUtMTAgcmV2LiBjCisJICAgMzIxODA4YS5wZGYgIGFib3V0IGF0LW1pby0xNmUtMTAgcmV2IFAKKwkgICAzMjE4MzdhLnBkZiAgZGlzY29udGludWF0aW9uIG9mIGF0LW1pby0xNmRlLTEwIHJldiBkCisJICAgMzIxODM4YS5wZGYgIGFib3V0IGF0LW1pby0xNmRlLTEwIHJldiBOCisKKwlJU1NVRVM6CisKKwluZWVkIHRvIGRlYWwgd2l0aCBleHRlcm5hbCByZWZlcmVuY2UgZm9yIERBQywgYW5kIG90aGVyIERBQworCXByb3BlcnRpZXMgaW4gYm9hcmQgcHJvcGVydGllcworCisJZGVhbCB3aXRoIGF0LW1pby0xNmRlLTEwIHJldmlzaW9uIEQgdG8gTiBjaGFuZ2VzLCBldGMuCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CisKKyNpbmNsdWRlICJuaV9zdGMuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKyN1bmRlZiBERUJVRworCisjZGVmaW5lIEFUTUlPIDEKKyN1bmRlZiBQQ0lNSU8KKworLyoKKyAqICBBVCBzcGVjaWZpYyBzZXR1cAorICovCisKKyNkZWZpbmUgTklfU0laRSAweDIwCisKKyNkZWZpbmUgTUFYX05fQ0FMREFDUyAzMgorCitzdGF0aWMgY29uc3QgbmlfYm9hcmQgbmlfYm9hcmRzW10gPSB7CisgICAgICB7ZGV2aWNlX2lkOjQ0LAorCSAgICAgIGlzYXBucF9pZDoweDAwMDAsLyogWFhYIHVua25vd24gKi8KKwkgICAgICBuYW1lOgkiYXQtbWlvLTE2ZS0xIiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6ODE5MiwKKwkgICAgICBhbHdheXNkaXRoZXI6MCwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzE2LAorCSAgICAgIGFpX3NwZWVkOjgwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDoyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCSAgICAgIGFvX3VuaXBvbGFyOjEsCisJICAgICAgYW9fc3BlZWQ6MTAwMCwKKwkgICAgICBoYXNfODI1NTowLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCSAgICAgIGNhbGRhYzoJe21iODgzNDF9LAorCQl9LAorICAgICAge2RldmljZV9pZDoyNSwKKwkgICAgICBpc2FwbnBfaWQ6MHgxOTAwLAorCSAgICAgIG5hbWU6CSJhdC1taW8tMTZlLTIiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDoyMDQ4LAorCSAgICAgIGFsd2F5c2RpdGhlcjowLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTYsCisJICAgICAgYWlfc3BlZWQ6MjAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDoyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCSAgICAgIGFvX3VuaXBvbGFyOjEsCisJICAgICAgYW9fc3BlZWQ6MTAwMCwKKwkgICAgICBoYXNfODI1NTowLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCSAgICAgIGNhbGRhYzoJe21iODgzNDF9LAorCQl9LAorICAgICAge2RldmljZV9pZDozNiwKKwkgICAgICBpc2FwbnBfaWQ6MHgyNDAwLAorCSAgICAgIG5hbWU6CSJhdC1taW8tMTZlLTEwIiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6NTEyLAorCSAgICAgIGFsd2F5c2RpdGhlcjowLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgbl9hb2NoYW46MiwKKwkgICAgICBhb2JpdHM6CTEyLAorCSAgICAgIGFvX2ZpZm9fZGVwdGg6MCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9FX2FvX2V4dCwKKwkgICAgICBhb191bmlwb2xhcjoxLAorCSAgICAgIGFvX3NwZWVkOjEwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCSAgICAgIGNhbGRhYzoJe2FkODgwNF9kZWJ1Z30sCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6MzcsCisJICAgICAgaXNhcG5wX2lkOjB4MjUwMCwKKwkgICAgICBuYW1lOgkiYXQtbWlvLTE2ZGUtMTAiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDo1MTIsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCSAgICAgIGFvX3VuaXBvbGFyOjEsCisJICAgICAgYW9fc3BlZWQ6MTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7YWQ4ODA0X2RlYnVnfSwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorICAgICAge2RldmljZV9pZDozOCwKKwkgICAgICBpc2FwbnBfaWQ6MHgyNjAwLAorCSAgICAgIG5hbWU6CSJhdC1taW8tNjRlLTMiLAorCSAgICAgIG5fYWRjaGFuOjY0LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDoyMDQ4LAorCSAgICAgIGFsd2F5c2RpdGhlcjowLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTYsCisJICAgICAgYWlfc3BlZWQ6MjAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDoyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCSAgICAgIGFvX3VuaXBvbGFyOjEsCisJICAgICAgYW9fc3BlZWQ6MTAwMCwKKwkgICAgICBoYXNfODI1NTowLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCSAgICAgIGNhbGRhYzoJe2FkODgwNF9kZWJ1Z30sCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjM5LAorCSAgICAgIGlzYXBucF9pZDoweDI3MDAsCisJICAgICAgbmFtZToJImF0LW1pby0xNnhlLTUwIiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6NTEyLAorCSAgICAgIGFsd2F5c2RpdGhlcjoxLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fOCwKKwkgICAgICBhaV9zcGVlZDo1MDAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkgICAgICBhb191bmlwb2xhcjowLAorCSAgICAgIGFvX3NwZWVkOjUwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCSAgICAgIGNhbGRhYzoJe2RhYzg4MDAsIGRhYzgwNDN9LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjUwLAorCSAgICAgIGlzYXBucF9pZDoweDAwMDAsLyogWFhYIHVua25vd24gKi8KKwkgICAgICBuYW1lOgkiYXQtbWlvLTE2eGUtMTAiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWlfZmlmb19kZXB0aDo1MTIsCisJICAgICAgYWx3YXlzZGl0aGVyOjEsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTYsCisJICAgICAgYW9fZmlmb19kZXB0aDoyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCSAgICAgIGFvX3VuaXBvbGFyOjEsCisJICAgICAgYW9fc3BlZWQ6MTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkgICAgICBjYWxkYWM6CXtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjUxLAorCSAgICAgIGlzYXBucF9pZDoweDAwMDAsLyogWFhYIHVua25vd24gKi8KKwkgICAgICBuYW1lOgkiYXQtYWktMTZ4ZS0xMCIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjUxMiwKKwkgICAgICBhbHdheXNkaXRoZXI6MSwJLyogdW5rbm93biAqLworCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTQsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgbl9hb2NoYW46MCwKKwkgICAgICBhb2JpdHM6CTAsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCSAgICAgIGFvX3VuaXBvbGFyOjAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7ZGFjODgwMCwgZGFjODA0MywgYWQ4NTIyfSwKKwkgICAgICBoYXNfODI1NTowLAorCQl9Cit9OworCitzdGF0aWMgY29uc3QgaW50IG5pX2lycXBpbltdID0KKwl7IC0xLCAtMSwgLTEsIDAsIDEsIDIsIC0xLCAzLCAtMSwgLTEsIDQsIDUsIDYsIC0xLCAtMSwgNyB9OworCisjZGVmaW5lIGludGVycnVwdF9waW4oYSkJKG5pX2lycXBpblsoYSldKQorCisjZGVmaW5lIElSUV9QT0xBUklUWSAwCisKKyNkZWZpbmUgTklfRV9JUlFfRkxBR1MJCTAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCBwbnBfZGV2ICppc2FwbnBfZGV2OworIE5JX1BSSVZBVEVfQ09NTU9OfSBuaV9wcml2YXRlOworI2RlZmluZSBkZXZwcml2ICgobmlfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyogSG93IHdlIGFjY2VzcyByZWdpc3RlcnMgKi8KKworI2RlZmluZSBuaV93cml0ZWwoYSxiKQkJKG91dGwoKGEpLChiKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3JlYWRsKGEpCQkoaW5sKChhKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3dyaXRldyhhLGIpCQkob3V0dygoYSksKGIpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfcmVhZHcoYSkJCShpbncoKGEpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfd3JpdGViKGEsYikJCShvdXRiKChhKSwoYikrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV9yZWFkYihhKQkJKGluYigoYSkrZGV2LT5pb2Jhc2UpKQorCisvKiBIb3cgd2UgYWNjZXNzIHdpbmRvd2VkIHJlZ2lzdGVycyAqLworCisvKiBXZSBhdXRvbWF0aWNhbGx5IHRha2UgYWR2YW50YWdlIG9mIFNUQyByZWdpc3RlcnMgdGhhdCBjYW4gYmUKKyAqIHJlYWQvd3JpdHRlbiBkaXJlY3RseSBpbiB0aGUgSS9PIHNwYWNlIG9mIHRoZSBib2FyZC4gIFRoZQorICogQVQtTUlPIGRldmljZXMgbWFwIHRoZSBsb3cgOCBTVEMgcmVnaXN0ZXJzIHRvIGlvYmFzZSthZGRyKjIuICovCisKK3N0YXRpYyB2b2lkIG5pX2F0bWlvX3dpbl9vdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGRhdGEsIGludCBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisJaWYgKChhZGRyKSA8IDgpIHsKKwkJbmlfd3JpdGV3KGRhdGEsIGFkZHIgKiAyKTsKKwl9IGVsc2UgeworCQluaV93cml0ZXcoYWRkciwgV2luZG93X0FkZHJlc3MpOworCQluaV93cml0ZXcoZGF0YSwgV2luZG93X0RhdGEpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVpbnQxNl90IG5pX2F0bWlvX3dpbl9pbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1aW50MTZfdCByZXQ7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisJaWYgKGFkZHIgPCA4KSB7CisJCXJldCA9IG5pX3JlYWR3KGFkZHIgKiAyKTsKKwl9IGVsc2UgeworCQluaV93cml0ZXcoYWRkciwgV2luZG93X0FkZHJlc3MpOworCQlyZXQgPSBuaV9yZWFkdyhXaW5kb3dfRGF0YSk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIGRldmljZV9pZHNbXSA9IHsKKwl7LmlkID0gIk5JQzE5MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAorCXsuaWQgPSAiTklDMjQwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNTAwIiwuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIk5JQzI2MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAorCXsuaWQgPSAiTklDMjcwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICIifQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIGRldmljZV9pZHMpOworCitzdGF0aWMgaW50IG5pX2F0bWlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG5pX2F0bWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2F0bWlvID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX2F0bWlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpuaV9hdG1pb19hdHRhY2gsCisgICAgICBkZXRhY2g6bmlfYXRtaW9fZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hdG1pbyk7CisKKyNpbmNsdWRlICJuaV9taW9fY29tbW9uLmMiCisKK3N0YXRpYyBpbnQgbmlfZ2V0Ym9hcmR0eXBlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworLyogY2xlYW4gdXAgYWxsb2NhdGVkIHJlc291cmNlcyAqLworc3RhdGljIGludCBuaV9hdG1pb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJbWlvX2NvbW1vbl9kZXRhY2goZGV2KTsKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIE5JX1NJWkUpOworCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCWlmIChkZXZwcml2LT5pc2FwbnBfZGV2KQorCQlwbnBfZGV2aWNlX2RldGFjaChkZXZwcml2LT5pc2FwbnBfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2lzYXBucF9maW5kX2JvYXJkKHN0cnVjdCBwbnBfZGV2ICoqZGV2KQoreworCXN0cnVjdCBwbnBfZGV2ICppc2FwbnBfZGV2ID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuX25pX2JvYXJkczsgaSsrKSB7CisJCWlzYXBucF9kZXYgPSBwbnBfZmluZF9kZXYoTlVMTCwKKwkJCUlTQVBOUF9WRU5ET1IoJ04nLCAnSScsICdDJyksCisJCQlJU0FQTlBfRlVOQ1RJT04obmlfYm9hcmRzW2ldLmlzYXBucF9pZCksIE5VTEwpOworCisJCWlmIChpc2FwbnBfZGV2ID09IE5VTEwgfHwgaXNhcG5wX2Rldi0+Y2FyZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKHBucF9kZXZpY2VfYXR0YWNoKGlzYXBucF9kZXYpIDwgMCkgeworCQkJcHJpbnRrKCJuaV9hdG1pbzogJXMgZm91bmQgYnV0IGFscmVhZHkgYWN0aXZlLCBza2lwcGluZy5cbiIsIG5pX2JvYXJkc1tpXS5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwbnBfYWN0aXZhdGVfZGV2KGlzYXBucF9kZXYpIDwgMCkgeworCQkJcG5wX2RldmljZV9kZXRhY2goaXNhcG5wX2Rldik7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlpZiAoIXBucF9wb3J0X3ZhbGlkKGlzYXBucF9kZXYsIDApCisJCQl8fCAhcG5wX2lycV92YWxpZChpc2FwbnBfZGV2LCAwKSkgeworCQkJcG5wX2RldmljZV9kZXRhY2goaXNhcG5wX2Rldik7CisJCQlwcmludGsoIm5pX2F0bWlvOiBwbnAgaW52YWxpZCBwb3J0IG9yIGlycSwgYWJvcnRpbmdcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJYnJlYWs7CisJfQorCWlmIChpID09IG5fbmlfYm9hcmRzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwkqZGV2ID0gaXNhcG5wX2RldjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9hdG1pb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBucF9kZXYgKmlzYXBucF9kZXY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlpbnQgYm9hcmQ7CisJdW5zaWduZWQgaW50IGlycTsKKworCS8qIGFsbG9jYXRlIHByaXZhdGUgYXJlYSAqLworCWlmICgocmV0ID0gbmlfYWxsb2NfcHJpdmF0ZShkZXYpKSA8IDApCisJCXJldHVybiByZXQ7CisJZGV2cHJpdi0+c3RjX3dyaXRldyA9ICZuaV9hdG1pb193aW5fb3V0OworCWRldnByaXYtPnN0Y19yZWFkdyA9ICZuaV9hdG1pb193aW5faW47CisJZGV2cHJpdi0+c3RjX3dyaXRlbCA9ICZ3aW5fb3V0MjsKKwlkZXZwcml2LT5zdGNfcmVhZGwgPSAmd2luX2luMjsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCWlzYXBucF9kZXYgPSBOVUxMOworCWlmIChpb2Jhc2UgPT0gMCkgeworCQlyZXQgPSBuaV9pc2FwbnBfZmluZF9ib2FyZCgmaXNhcG5wX2Rldik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpb2Jhc2UgPSBwbnBfcG9ydF9zdGFydChpc2FwbnBfZGV2LCAwKTsKKwkJaXJxID0gcG5wX2lycShpc2FwbnBfZGV2LCAwKTsKKwkJZGV2cHJpdi0+aXNhcG5wX2RldiA9IGlzYXBucF9kZXY7CisJfQorCisJLyogcmVzZXJ2ZSBvdXIgSS9PIHJlZ2lvbiAqLworCisJcHJpbnRrKCJjb21lZGklZDogbmlfYXRtaW86IDB4JTA0bHgiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBOSV9TSVpFLCAibmlfYXRtaW8iKSkgeworCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisjaWZkZWYgREVCVUcKKwkvKiBib2FyZCBleGlzdGVuY2Ugc2FuaXR5IGNoZWNrICovCisJeworCQlpbnQgaTsKKworCQlwcmludGsoIiBib2FyZCBmaW5nZXJwcmludDoiKTsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDIpIHsKKwkJCXByaW50aygiICUwNHggJTAyeCIsIGludyhkZXYtPmlvYmFzZSArIGkpLAorCQkJCWluYihkZXYtPmlvYmFzZSArIGkgKyAxKSk7CisJCX0KKwl9CisjZW5kaWYKKworCS8qIGdldCBib2FyZCB0eXBlICovCisKKwlib2FyZCA9IG5pX2dldGJvYXJkdHlwZShkZXYpOworCWlmIChib2FyZCA8IDApCisJCXJldHVybiAtRUlPOworCisJZGV2LT5ib2FyZF9wdHIgPSBuaV9ib2FyZHMgKyBib2FyZDsKKworCXByaW50aygiICVzIiwgYm9hcmR0eXBlLm5hbWUpOworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkdHlwZS5uYW1lOworCisJLyogaXJxIHN0dWZmICovCisKKwlpZiAoaXJxICE9IDApIHsKKwkJaWYgKGlycSA+IDE1IHx8IG5pX2lycXBpbltpcnFdID09IC0xKSB7CisJCQlwcmludGsoIiBpbnZhbGlkIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXByaW50aygiICggaXJxID0gJXUgKSIsIGlycSk7CisJCWlmICgocmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgbmlfRV9pbnRlcnJ1cHQsCisJCQkJCU5JX0VfSVJRX0ZMQUdTLCAibmlfYXRtaW8iLCBkZXYpKSA8IDApIHsKKwkJCXByaW50aygiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldi0+aXJxID0gaXJxOworCX0KKworCS8qIGdlbmVyaWMgRSBzZXJpZXMgc3R1ZmYgaW4gbmlfbWlvX2NvbW1vbi5jICovCisKKwlpZiAoKHJldCA9IG5pX0VfaW5pdChkZXYsIGl0KSkgPCAwKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfZ2V0Ym9hcmR0eXBlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBkZXZpY2VfaWQgPSBuaV9yZWFkX2VlcHJvbShkZXYsIDUxMSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9uaV9ib2FyZHM7IGkrKykgeworCQlpZiAobmlfYm9hcmRzW2ldLmRldmljZV9pZCA9PSBkZXZpY2VfaWQpIHsKKwkJCXJldHVybiBpOworCQl9CisJfQorCWlmIChkZXZpY2VfaWQgPT0gMjU1KSB7CisJCXByaW50aygiIGNhbid0IGZpbmQgYm9hcmRcbiIpOworCX0gZWxzZSBpZiAoZGV2aWNlX2lkID09IDApIHsKKwkJcHJpbnRrKCIgRUVQUk9NIHJlYWQgZXJyb3IgKD8pIG9yIGRldmljZSBub3QgZm91bmRcbiIpOworCX0gZWxzZSB7CisJCXByaW50aygiIHVua25vd24gZGV2aWNlIElEICVkIC0tIGNvbnRhY3QgYXV0aG9yXG4iLCBkZXZpY2VfaWQpOworCX0KKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8xNmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pbzE2ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZmNkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8xNmQuYwpAQCAtMCwwICsxLDg2MCBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtTUlPMTZEIGJvYXJkCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgQ2hyaXMgUi4gQmF1Z2hlciA8YmF1Z2hlckBlbnRlcmFjdC5jb20+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogbmlfYXRtaW8xNmQKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBBVC1NSU8tMTZECitBdXRob3I6IENocmlzIFIuIEJhdWdoZXIgPGJhdWdoZXJAZW50ZXJhY3QuY29tPgorU3RhdHVzOiB1bmtub3duCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIEFULU1JTy0xNiAoYXRtaW8xNiksIEFULU1JTy0xNkQgKGF0bWlvMTZkKQorKi8KKy8qCisgKiBJIG11c3QgZ2l2ZSBjcmVkaXQgaGVyZSB0byBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4gd2hvCisgKiB3cm90ZSB0aGUgZHJpdmVyIGZvciBBZHZhbnRlYydzIHBjbDgxMiBib2FyZHMuIEkgdXNlZCB0aGUgaW50ZXJydXB0CisgKiBoYW5kbGluZyBjb2RlIGZyb20gaGlzIGRyaXZlciBhcyBhbiBleGFtcGxlIGZvciB0aGlzIG9uZS4KKyAqCisgKiBDaHJpcyBCYXVnaGVyCisgKiA1LzEvMjAwMAorICoKKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgIjgyNTUuaCIKKworLyogQ29uZmlndXJhdGlvbiBhbmQgU3RhdHVzIFJlZ2lzdGVycyAqLworI2RlZmluZSBDT01fUkVHXzEJMHgwMAkvKiB3byAxNiAqLworI2RlZmluZSBTVEFUX1JFRwkweDAwCS8qIHJvIDE2ICovCisjZGVmaW5lIENPTV9SRUdfMgkweDAyCS8qIHdvIDE2ICovCisvKiBFdmVudCBTdHJvYmUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNUQVJUX0NPTlZFUlRfUkVHCTB4MDgJLyogd28gMTYgKi8KKyNkZWZpbmUgU1RBUlRfREFRX1JFRwkJMHgwQQkvKiB3byAxNiAqLworI2RlZmluZSBBRF9DTEVBUl9SRUcJCTB4MEMJLyogd28gMTYgKi8KKyNkZWZpbmUgRVhUX1NUUk9CRV9SRUcJCTB4MEUJLyogd28gMTYgKi8KKy8qIEFuYWxvZyBPdXRwdXQgUmVnaXN0ZXJzICovCisjZGVmaW5lIERBQzBfUkVHCQkweDEwCS8qIHdvIDE2ICovCisjZGVmaW5lIERBQzFfUkVHCQkweDEyCS8qIHdvIDE2ICovCisjZGVmaW5lIElOVDJDTFJfUkVHCQkweDE0CS8qIHdvIDE2ICovCisvKiBBbmFsb2cgSW5wdXQgUmVnaXN0ZXJzICovCisjZGVmaW5lIE1VWF9DTlRSX1JFRwkJMHgwNAkvKiB3byAxNiAqLworI2RlZmluZSBNVVhfR0FJTl9SRUcJCTB4MDYJLyogd28gMTYgKi8KKyNkZWZpbmUgQURfRklGT19SRUcJCTB4MTYJLyogcm8gMTYgKi8KKyNkZWZpbmUgRE1BX1RDX0lOVF9DTFJfUkVHCTB4MTYJLyogd28gMTYgKi8KKy8qIEFNOTUxM0EgQ291bnRlci9UaW1lciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQU05NTEzQV9EQVRBX1JFRwkweDE4CS8qIHJ3IDE2ICovCisjZGVmaW5lIEFNOTUxM0FfQ09NX1JFRwkJMHgxQQkvKiB3byAxNiAqLworI2RlZmluZSBBTTk1MTNBX1NUQVRfUkVHCTB4MUEJLyogcm8gMTYgKi8KKy8qIE1JTy0xNiBEaWdpdGFsIEkvTyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTUlPXzE2X0RJR19JTl9SRUcJMHgxQwkvKiBybyAxNiAqLworI2RlZmluZSBNSU9fMTZfRElHX09VVF9SRUcJMHgxQwkvKiB3byAxNiAqLworLyogUlRTSSBTd2l0Y2ggUmVnaXN0ZXJzICovCisjZGVmaW5lIFJUU0lfU1dfU0hJRlRfUkVHCTB4MUUJLyogd28gOCAqLworI2RlZmluZSBSVFNJX1NXX1NUUk9CRV9SRUcJMHgxRgkvKiB3byA4ICovCisvKiBESU8tMjQgUmVnaXN0ZXJzICovCisjZGVmaW5lIERJT18yNF9QT1JUQV9SRUcJMHgwMAkvKiBydyA4ICovCisjZGVmaW5lIERJT18yNF9QT1JUQl9SRUcJMHgwMQkvKiBydyA4ICovCisjZGVmaW5lIERJT18yNF9QT1JUQ19SRUcJMHgwMgkvKiBydyA4ICovCisjZGVmaW5lIERJT18yNF9DTkZHX1JFRwkJMHgwMwkvKiB3byA4ICovCisKKy8qIENvbW1hbmQgUmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBDT01SRUcxXzJTQ0FEQwkJMHgwMDAxCisjZGVmaW5lIENPTVJFRzFfMTYzMkNOVAkJMHgwMDAyCisjZGVmaW5lIENPTVJFRzFfU0NBTkVOCQkweDAwMDgKKyNkZWZpbmUgQ09NUkVHMV9EQVFFTgkJMHgwMDEwCisjZGVmaW5lIENPTVJFRzFfRE1BRU4JCTB4MDAyMAorI2RlZmluZSBDT01SRUcxX0NPTlZJTlRFTgkweDAwODAKKyNkZWZpbmUgQ09NUkVHMl9TQ04yCQkweDAwMTAKKyNkZWZpbmUgQ09NUkVHMl9JTlRFTgkJMHgwMDgwCisjZGVmaW5lIENPTVJFRzJfRE9VVEVOMAkJMHgwMTAwCisjZGVmaW5lIENPTVJFRzJfRE9VVEVOMQkJMHgwMjAwCisvKiBTdGF0dXMgUmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBTVEFUX0FEX09WRVJSVU4JCTB4MDEwMAorI2RlZmluZSBTVEFUX0FEX09WRVJGTE9XCTB4MDIwMAorI2RlZmluZSBTVEFUX0FEX0RBUVBST0cJCTB4MDgwMAorI2RlZmluZSBTVEFUX0FEX0NPTlZBVkFJTAkweDIwMDAKKyNkZWZpbmUgU1RBVF9BRF9EQVFTVE9QSU5UCTB4NDAwMAorLyogQU05NTEzQSBDb3VudGVyL1RpbWVyIGRlZmluZXMgKi8KKyNkZWZpbmUgQ0xPQ0tfMV9NSFoJCTB4OEIyNQorI2RlZmluZSBDTE9DS18xMDBfS0haCTB4OEMyNQorI2RlZmluZSBDTE9DS18xMF9LSFoJMHg4RDI1CisjZGVmaW5lIENMT0NLXzFfS0haCQkweDhFMjUKKyNkZWZpbmUgQ0xPQ0tfMTAwX0haCTB4OEYyNQorLyogT3RoZXIgbWlzY2VsbGFuZW91cyBkZWZpbmVzICovCisjZGVmaW5lIEFUTUlPMTZEX1NJWkUJMzIJLyogYnVzIGFkZHJlc3MgcmFuZ2UgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBhdG1pbzE2ZF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBBVE1JTzE2RF9USU1FT1VUIDEwCisKK3N0cnVjdCBhdG1pbzE2X2JvYXJkX3QgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaGFzXzgyNTU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0bWlvMTZfYm9hcmRfdCBhdG1pbzE2X2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiYXRtaW8xNiIsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImF0bWlvMTZkIiwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorfTsKKworI2RlZmluZSBuX2F0bWlvMTZfYm9hcmRzIHNpemVvZihhdG1pbzE2X2JvYXJkcykvc2l6ZW9mKGF0bWlvMTZfYm9hcmRzWzBdKQorCisjZGVmaW5lIGJvYXJkdHlwZSAoKGNvbnN0IHN0cnVjdCBhdG1pbzE2X2JvYXJkX3QgKilkZXYtPmJvYXJkX3B0cikKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGljIGludCBhdG1pbzE2ZF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBhdG1pbzE2ZF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGlycXJldHVybl90IGF0bWlvMTZkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgYXRtaW8xNmRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgYXRtaW8xNmRfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBhdG1pbzE2ZF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCByZXNldF9jb3VudGVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCByZXNldF9hdG1pbzE2ZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKy8qIG1haW4gZHJpdmVyIHN0cnVjdCAqLworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hdG1pbzE2ZCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhdG1pbzE2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphdG1pbzE2ZF9hdHRhY2gsCisgICAgICBkZXRhY2g6YXRtaW8xNmRfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYXRtaW8xNl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2F0bWlvMTZfYm9hcmRzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgYXRtaW8xNl9ib2FyZF90KSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYXRtaW8xNmQpOworCisvKiByYW5nZSBzdHJ1Y3RzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXRtaW8xNmRfYWlfMTBfYmlwb2xhciA9IHsgNCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDIpCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2F0bWlvMTZkX2FpXzVfYmlwb2xhciA9IHsgNCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMSkKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXRtaW8xNmRfYWlfdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAyKQorCX0KK307CisKKy8qIHByaXZhdGUgZGF0YSBzdHJ1Y3QgKi8KK3N0cnVjdCBhdG1pbzE2ZF9wcml2YXRlIHsKKwllbnVtIHsgYWRjX2RpZmYsIGFkY19zaW5nbGVlbmRlZCB9IGFkY19tdXg7CisJZW51bSB7IGFkY19iaXBvbGFyMTAsIGFkY19iaXBvbGFyNSwgYWRjX3VuaXBvbGFyMTAgfSBhZGNfcmFuZ2U7CisJZW51bSB7IGFkY18yY29tcCwgYWRjX3N0cmFpZ2h0IH0gYWRjX2NvZGluZzsKKwllbnVtIHsgZGFjX2JpcG9sYXIsIGRhY191bmlwb2xhciB9IGRhYzBfcmFuZ2UsIGRhYzFfcmFuZ2U7CisJZW51bSB7IGRhY19pbnRlcm5hbCwgZGFjX2V4dGVybmFsIH0gZGFjMF9yZWZlcmVuY2UsIGRhYzFfcmVmZXJlbmNlOworCWVudW0geyBkYWNfMmNvbXAsIGRhY19zdHJhaWdodCB9IGRhYzBfY29kaW5nLCBkYWMxX2NvZGluZzsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdHlwZV9saXN0WzJdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKwl1bnNpZ25lZCBpbnQgY29tX3JlZ18xX3N0YXRlOwkvKiBjdXJyZW50IHN0YXRlIG9mIGNvbW1hbmQgcmVnaXN0ZXIgMSAqLworCXVuc2lnbmVkIGludCBjb21fcmVnXzJfc3RhdGU7CS8qIGN1cnJlbnQgc3RhdGUgb2YgY29tbWFuZCByZWdpc3RlciAyICovCit9OworCitzdGF0aWMgdm9pZCByZXNldF9jb3VudGVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvKiBDb3VudGVyIDIgKi8KKwlvdXR3KDB4RkZDMiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjAyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGMEEsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4MywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkY0MiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjQyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJLyogQ291bnRlciAzICovCisJb3V0dygweEZGQzQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkYwMywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHg0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjBCLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDMsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGNDQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkY0NCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCS8qIENvdW50ZXIgNCAqLworCW91dHcoMHhGRkM4LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGMDQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4NCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkYwQywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHgzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjQ4LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGNDgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkvKiBDb3VudGVyIDUgKi8KKwlvdXR3KDB4RkZEMCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjA1LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGMEQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4MywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkY1MCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjUwLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgQURfQ0xFQVJfUkVHKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfYXRtaW8xNmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisKKwkvKiBub3cgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoZSBib2FyZCAqLworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzEpOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzIpOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBNVVhfR0FJTl9SRUcpOworCS8qIGluaXQgQU05NTEzQSB0aW1lciAqLworCW91dHcoMHhGRkZGLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGRUYsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkYxNywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGMDAwLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCWZvciAoaSA9IDE7IGkgPD0gNTsgKytpKSB7CisJCW91dHcoMHhGRjAwICsgaSwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDB4MDAwNCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJb3V0dygweEZGMDggKyBpLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMHgzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCX0KKwlvdXR3KDB4RkY1RiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCS8qIHRpbWVyIGluaXQgZG9uZSAqLworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBRF9DTEVBUl9SRUcpOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBJTlQyQ0xSX1JFRyk7CisJLyogc2VsZWN0IHN0cmFpZ2h0IGJpbmFyeSBtb2RlIGZvciBBbmFsb2cgSW5wdXQgKi8KKwlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gMTsKKwlvdXR3KGRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzEpOworCWRldnByaXYtPmFkY19jb2RpbmcgPSBhZGNfc3RyYWlnaHQ7CisJLyogemVybyB0aGUgYW5hbG9nIG91dHB1dHMgKi8KKwlvdXR3KDIwNDgsIGRldi0+aW9iYXNlICsgREFDMF9SRUcpOworCW91dHcoMjA0OCwgZGV2LT5pb2Jhc2UgKyBEQUMxX1JFRyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhdG1pbzE2ZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKy8vICAgICAgcHJpbnRrKCJhdG1pbzE2ZF9pbnRlcnJ1cHQhXG4iKTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBpbncoZGV2LT5pb2Jhc2UgKyBBRF9GSUZPX1JFRykpOworCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMCwgdG1wOworI2lmZGVmIERFQlVHMQorCXByaW50aygiYXRtaW8xNmRfYWlfY21kdGVzdFxuIik7CisjZW5kaWYKKwkvKiBtYWtlIHN1cmUgdHJpZ2dlcnMgYXJlIHZhbGlkICovCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XIHwgVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJLyogaW50ZXJuYWwgdHJpZ2dlciAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKyNpZiAwCisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IDEwMDAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAxMDAwMDsKKwkJZXJyKys7CisJfQorI2lmIDAKKwlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IFNMT1dFU1RfVElNRVIpIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IFNMT1dFU1RfVElNRVI7CisJCWVycisrOworCX0KKyNlbmRpZgorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkvKiBhbnkgY291bnQgaXMgYWxsb3dlZCAqLworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1pbzE2ZF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IHRpbWVyLCBiYXNlX2Nsb2NrOworCXVuc2lnbmVkIGludCBzYW1wbGVfY291bnQsIHRtcCwgY2hhbiwgZ2FpbjsKKwlpbnQgaTsKKyNpZmRlZiBERUJVRzEKKwlwcmludGsoImF0bWlvMTZkX2FpX2NtZFxuIik7CisjZW5kaWYKKwkvKiBUaGlzIGlzIHNsb3dseSBiZWNvbWluZyBhIHdvcmtpbmcgY29tbWFuZCBpbnRlcmZhY2UuICoKKwkgKiBJdCBpcyBzdGlsbCB1YmVyLWV4cGVyaW1lbnRhbCAqLworCisJcmVzZXRfY291bnRlcnMoZGV2KTsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOworCisJLyogY2hlY2sgaWYgc2Nhbm5pbmcgbXVsdGlwbGUgY2hhbm5lbHMgKi8KKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPCAyKSB7CisJCWRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSAmPSB+Q09NUkVHMV9TQ0FORU47CisJCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlIHw9IENPTVJFRzFfU0NBTkVOOworCQlkZXZwcml2LT5jb21fcmVnXzJfc3RhdGUgfD0gQ09NUkVHMl9TQ04yOworCQlvdXR3KGRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzEpOworCQlvdXR3KGRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzIpOworCX0KKworCS8qIFNldHVwIHRoZSBNdXgtR2FpbiBDb3VudGVyICovCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyArK2kpIHsKKwkJY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CisJCWdhaW4gPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKTsKKwkJb3V0dyhpLCBkZXYtPmlvYmFzZSArIE1VWF9DTlRSX1JFRyk7CisJCXRtcCA9IGNoYW4gfCAoZ2FpbiA8PCA2KTsKKwkJaWYgKGkgPT0gY21kLT5zY2FuX2VuZF9hcmcgLSAxKQorCQkJdG1wIHw9IDB4MDAxMDsJLyogc2V0IExBU1RPTkUgYml0ICovCisJCW91dHcodG1wLCBkZXYtPmlvYmFzZSArIE1VWF9HQUlOX1JFRyk7CisJfQorCisJLyogTm93IHByb2dyYW0gdGhlIHNhbXBsZSBpbnRlcnZhbCB0aW1lciAqLworCS8qIEZpZ3VyZSBvdXQgd2hpY2ggY2xvY2sgdG8gdXNlIHRoZW4gZ2V0IGFuCisJICogYXBwcm9wcmlhdGUgdGltZXIgdmFsdWUgKi8KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IDY1NTM2MDAwKSB7CisJCWJhc2VfY2xvY2sgPSBDTE9DS18xX01IWjsKKwkJdGltZXIgPSBjbWQtPmNvbnZlcnRfYXJnIC8gMTAwMDsKKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9hcmcgPCA2NTUzNjAwMDApIHsKKwkJYmFzZV9jbG9jayA9IENMT0NLXzEwMF9LSFo7CisJCXRpbWVyID0gY21kLT5jb252ZXJ0X2FyZyAvIDEwMDAwOworCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA8PSAweGZmZmZmZmZmIC8qIDY1NTM2MDAwMDAgKi8gKSB7CisJCWJhc2VfY2xvY2sgPSBDTE9DS18xMF9LSFo7CisJCXRpbWVyID0gY21kLT5jb252ZXJ0X2FyZyAvIDEwMDAwMDsKKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9hcmcgPD0gMHhmZmZmZmZmZiAvKiA2NTUzNjAwMDAwMCAqLyApIHsKKwkJYmFzZV9jbG9jayA9IENMT0NLXzFfS0haOworCQl0aW1lciA9IGNtZC0+Y29udmVydF9hcmcgLyAxMDAwMDAwOworCX0KKwlvdXR3KDB4RkYwMywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoYmFzZV9jbG9jaywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkYwQiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHgyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjQ0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGRjMsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KHRpbWVyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjI0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisKKwkvKiBOb3cgZmlndXJlIG91dCBob3cgbWFueSBzYW1wbGVzIHRvIGdldCAqLworCS8qIGFuZCBwcm9ncmFtIHRoZSBzYW1wbGUgY291bnRlciAqLworCXNhbXBsZV9jb3VudCA9IGNtZC0+c3RvcF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwlvdXR3KDB4RkYwNCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHgxMDI1LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjBDLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJaWYgKHNhbXBsZV9jb3VudCA8IDY1NTM2KSB7CisJCS8qIHVzZSBvbmx5IENvdW50ZXIgNCAqLworCQlvdXR3KHNhbXBsZV9jb3VudCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJb3V0dygweEZGNDgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweEZGRjQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweEZGMjgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlICY9IH5DT01SRUcxXzE2MzJDTlQ7CisJCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJfSBlbHNlIHsKKwkJLyogQ291bnRlciA0IGFuZCA1IGFyZSBuZWVkZWQgKi8KKwkJaWYgKCh0bXAgPSBzYW1wbGVfY291bnQgJiAweEZGRkYpKSB7CisJCQlvdXR3KHRtcCAtIDEsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJCX0gZWxzZSB7CisJCQlvdXR3KDB4RkZGRiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJfQorCQlvdXR3KDB4RkY0OCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJCW91dHcoMHhGRjI4LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMHhGRjA1LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMHgyNSwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJb3V0dygweEZGMEQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJdG1wID0gc2FtcGxlX2NvdW50ICYgMHhGRkZGOworCQlpZiAoKHRtcCA9PSAwKSB8fCAodG1wID09IDEpKSB7CisJCQlvdXR3KChzYW1wbGVfY291bnQgPj4gMTYpICYgMHhGRkZGLAorCQkJCWRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJCX0gZWxzZSB7CisJCQlvdXR3KCgoc2FtcGxlX2NvdW50ID4+IDE2KSAmIDB4RkZGRikgKyAxLAorCQkJCWRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJCX0KKwkJb3V0dygweEZGNzAsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlIHw9IENPTVJFRzFfMTYzMkNOVDsKKwkJb3V0dyhkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18xKTsKKwl9CisKKwkvKiBQcm9ncmFtIHRoZSBzY2FuIGludGVydmFsIHRpbWVyIE9OTFkgSUYgU0NBTk5JTkcgSVMgRU5BQkxFRCAqLworCS8qIEZpZ3VyZSBvdXQgd2hpY2ggY2xvY2sgdG8gdXNlIHRoZW4gZ2V0IGFuCisJICogYXBwcm9wcmlhdGUgdGltZXIgdmFsdWUgKi8KKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiAxKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgNjU1MzYwMDApIHsKKwkJCWJhc2VfY2xvY2sgPSBDTE9DS18xX01IWjsKKwkJCXRpbWVyID0gY21kLT5zY2FuX2JlZ2luX2FyZyAvIDEwMDA7CisJCX0gZWxzZSBpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IDY1NTM2MDAwMCkgeworCQkJYmFzZV9jbG9jayA9IENMT0NLXzEwMF9LSFo7CisJCQl0aW1lciA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgLyAxMDAwMDsKKwkJfSBlbHNlIGlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgMHhmZmZmZmZmZiAvKiA2NTUzNjAwMDAwICovICkgeworCQkJYmFzZV9jbG9jayA9IENMT0NLXzEwX0tIWjsKKwkJCXRpbWVyID0gY21kLT5zY2FuX2JlZ2luX2FyZyAvIDEwMDAwMDsKKwkJfSBlbHNlIGlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgMHhmZmZmZmZmZiAvKiA2NTUzNjAwMDAwMCAqLyApIHsKKwkJCWJhc2VfY2xvY2sgPSBDTE9DS18xX0tIWjsKKwkJCXRpbWVyID0gY21kLT5zY2FuX2JlZ2luX2FyZyAvIDEwMDAwMDA7CisJCX0KKwkJb3V0dygweEZGMDIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dyhiYXNlX2Nsb2NrLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkYwQSwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDB4MiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJb3V0dygweEZGNDIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweEZGRjIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dyh0aW1lciwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJb3V0dygweEZGMjIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwl9CisKKwkvKiBDbGVhciB0aGUgQS9EIEZJRk8gYW5kIHJlc2V0IHRoZSBNVVggY291bnRlciAqLworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBRF9DTEVBUl9SRUcpOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBNVVhfQ05UUl9SRUcpOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBJTlQyQ0xSX1JFRyk7CisJLyogZW5hYmxlIHRoaXMgYWNxdWlzaXRpb24gb3BlcmF0aW9uICovCisJZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlIHw9IENPTVJFRzFfREFRRU47CisJb3V0dyhkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18xKTsKKwkvKiBlbmFibGUgaW50ZXJydXB0cyBmb3IgY29udmVyc2lvbiBjb21wbGV0aW9uICovCisJZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlIHw9IENPTVJFRzFfQ09OVklOVEVOOworCWRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSB8PSBDT01SRUcyX0lOVEVOOworCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJb3V0dyhkZXZwcml2LT5jb21fcmVnXzJfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18yKTsKKwkvKiBhcHBseSBhIHRyaWdnZXIuIHRoaXMgc3RhcnRzIHRoZSBjb3VudGVycyEgKi8KKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgU1RBUlRfREFRX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyB3aWxsIGNhbmNlbCBhIHJ1bm5pbmcgYWNxdWlzaXRpb24gb3BlcmF0aW9uICovCitzdGF0aWMgaW50IGF0bWlvMTZkX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXJlc2V0X2F0bWlvMTZkKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyogTW9kZSAwIGlzIHVzZWQgdG8gZ2V0IGEgc2luZ2xlIGNvbnZlcnNpb24gb24gZGVtYW5kICovCitzdGF0aWMgaW50IGF0bWlvMTZkX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIHQ7CisJaW50IGNoYW47CisJaW50IGdhaW47CisJaW50IHN0YXR1czsKKworI2lmZGVmIERFQlVHMQorCXByaW50aygiYXRtaW8xNmRfYWlfaW5zbl9yZWFkXG4iKTsKKyNlbmRpZgorCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlnYWluID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLyogcmVzZXQgdGhlIEFuYWxvZyBpbnB1dCBjaXJjdWl0cnkgKi8KKwkvL291dHcoIDAsIGRldi0+aW9iYXNlK0FEX0NMRUFSX1JFRyApOworCS8qIHJlc2V0IHRoZSBBbmFsb2cgSW5wdXQgTVVYIENvdW50ZXIgdG8gMCAqLworCS8vb3V0dyggMCwgZGV2LT5pb2Jhc2UrTVVYX0NOVFJfUkVHICk7CisKKwkvKiBzZXQgdGhlIElucHV0IE1VWCBnYWluICovCisJb3V0dyhjaGFuIHwgKGdhaW4gPDwgNiksIGRldi0+aW9iYXNlICsgTVVYX0dBSU5fUkVHKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJLyogc3RhcnQgdGhlIGNvbnZlcnNpb24gKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFNUQVJUX0NPTlZFUlRfUkVHKTsKKwkJLyogd2FpdCBmb3IgaXQgdG8gZmluaXNoICovCisJCWZvciAodCA9IDA7IHQgPCBBVE1JTzE2RF9USU1FT1VUOyB0KyspIHsKKwkJCS8qIGNoZWNrIGNvbnZlcnNpb24gc3RhdHVzICovCisJCQlzdGF0dXMgPSBpbncoZGV2LT5pb2Jhc2UgKyBTVEFUX1JFRyk7CisjaWZkZWYgREVCVUcxCisJCQlwcmludGsoInN0YXR1cz0leFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQkJaWYgKHN0YXR1cyAmIFNUQVRfQURfQ09OVkFWQUlMKSB7CisJCQkJLyogcmVhZCB0aGUgZGF0YSBub3cgKi8KKwkJCQlkYXRhW2ldID0gaW53KGRldi0+aW9iYXNlICsgQURfRklGT19SRUcpOworCQkJCS8qIGNoYW5nZSB0byB0d28ncyBjb21wbGVtZW50IGlmIG5lZWQgYmUgKi8KKwkJCQlpZiAoZGV2cHJpdi0+YWRjX2NvZGluZyA9PSBhZGNfMmNvbXApIHsKKwkJCQkJZGF0YVtpXSBePSAweDgwMDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc3RhdHVzICYgU1RBVF9BRF9PVkVSRkxPVykgeworCQkJCXByaW50aygiYXRtaW8xNmQ6IGEvZCBGSUZPIG92ZXJmbG93XG4iKTsKKwkJCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgQURfQ0xFQVJfUkVHKTsKKworCQkJCXJldHVybiAtRVRJTUU7CisJCQl9CisJCX0KKwkJLyogZW5kIHdhaXRpbmcsIG5vdyBjaGVjayBpZiBpdCB0aW1lZCBvdXQgKi8KKwkJaWYgKHQgPT0gQVRNSU8xNkRfVElNRU9VVCkgeworCQkJcnRfcHJpbnRrKCJhdG1pbzE2ZDogdGltZW91dFxuIik7CisKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBhdG1pbzE2ZF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworI2lmZGVmIERFQlVHMQorCXByaW50aygiYXRtaW8xNmRfYW9faW5zbl9yZWFkXG4iKTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuOworCWludCBkOworI2lmZGVmIERFQlVHMQorCXByaW50aygiYXRtaW8xNmRfYW9faW5zbl93cml0ZVxuIik7CisjZW5kaWYKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZCA9IGRhdGFbaV07CisJCXN3aXRjaCAoY2hhbikgeworCQljYXNlIDA6CisJCQlpZiAoZGV2cHJpdi0+ZGFjMF9jb2RpbmcgPT0gZGFjXzJjb21wKSB7CisJCQkJZCBePSAweDgwMDsKKwkJCX0KKwkJCW91dHcoZCwgZGV2LT5pb2Jhc2UgKyBEQUMwX1JFRyk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKGRldnByaXYtPmRhYzFfY29kaW5nID09IGRhY18yY29tcCkgeworCQkJCWQgXj0gMHg4MDA7CisJCQl9CisJCQlvdXR3KGQsIGRldi0+aW9iYXNlICsgREFDMV9SRUcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdIHwgZGF0YVsxXSk7CisJCW91dHcocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgTUlPXzE2X0RJR19PVVRfUkVHKTsKKwl9CisJZGF0YVsxXSA9IGludyhkZXYtPmlvYmFzZSArIE1JT18xNl9ESUdfSU5fUkVHKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IG1hc2s7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCW1hc2sgPSAoQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgPCA0KSA/IDB4MGYgOiAweGYwOworCQlzLT5pb19iaXRzICY9IH5tYXNrOworCQlpZiAoZGF0YVtpXSkKKwkJCXMtPmlvX2JpdHMgfD0gbWFzazsKKwl9CisJZGV2cHJpdi0+Y29tX3JlZ18yX3N0YXRlICY9IH4oQ09NUkVHMl9ET1VURU4wIHwgQ09NUkVHMl9ET1VURU4xKTsKKwlpZiAocy0+aW9fYml0cyAmIDB4MGYpCisJCWRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSB8PSBDT01SRUcyX0RPVVRFTjA7CisJaWYgKHMtPmlvX2JpdHMgJiAweGYwKQorCQlkZXZwcml2LT5jb21fcmVnXzJfc3RhdGUgfD0gQ09NUkVHMl9ET1VURU4xOworCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18yX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMik7CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAgIG9wdGlvbnNbMF0gLSBJL08gcG9ydAorICAgb3B0aW9uc1sxXSAtIE1JTyBpcnEKKyAgICAgICAgICAgICAgICAwID09IG5vIGlycQorICAgICAgICAgICAgICAgIE4gPT0gaXJxIE4gezMsNCw1LDYsNyw5LDEwLDExLDEyLDE0LDE1fQorICAgb3B0aW9uc1syXSAtIERJTyBpcnEKKyAgICAgICAgICAgICAgICAwID09IG5vIGlycQorICAgICAgICAgICAgICAgIE4gPT0gaXJxIE4gezMsNCw1LDYsNyw5fQorICAgb3B0aW9uc1szXSAtIERNQTEgY2hhbm5lbAorICAgICAgICAgICAgICAgIDAgPT0gbm8gRE1BCisgICAgICAgICAgICAgICAgTiA9PSBETUEgTiB7NSw2LDd9CisgICBvcHRpb25zWzRdIC0gRE1BMiBjaGFubmVsCisgICAgICAgICAgICAgICAgMCA9PSBubyBETUEKKyAgICAgICAgICAgICAgICBOID09IERNQSBOIHs1LDYsN30KKworICAgb3B0aW9uc1s1XSAtIGEvZCBtdXgKKyAgIAkwPWRpZmZlcmVudGlhbCwgMT1zaW5nbGUKKyAgIG9wdGlvbnNbNl0gLSBhL2QgcmFuZ2UKKyAgIAkwPWJpcG9sYXIxMCwgMT1iaXBvbGFyNSwgMj11bmlwb2xhcjEwCisKKyAgIG9wdGlvbnNbN10gLSBkYWMwIHJhbmdlCisgICAJMD1iaXBvbGFyLCAxPXVuaXBvbGFyCisgICBvcHRpb25zWzhdIC0gZGFjMCByZWZlcmVuY2UKKyAgICAwPWludGVybmFsLCAxPWV4dGVybmFsCisgICBvcHRpb25zWzldIC0gZGFjMCBjb2RpbmcKKyAgIAkwPTIncyBjb21wLCAxPXN0cmFpZ2h0IGJpbmFyeQorCisgICBvcHRpb25zWzEwXSAtIGRhYzEgcmFuZ2UKKyAgIG9wdGlvbnNbMTFdIC0gZGFjMSByZWZlcmVuY2UKKyAgIG9wdGlvbnNbMTJdIC0gZGFjMSBjb2RpbmcKKyAqLworCitzdGF0aWMgaW50IGF0bWlvMTZkX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCWludCByZXQ7CisKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCS8qIG1ha2Ugc3VyZSB0aGUgYWRkcmVzcyByYW5nZSBpcyBmcmVlIGFuZCBhbGxvY2F0ZSBpdCAqLworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IGF0bWlvMTZkOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIEFUTUlPMTZEX1NJWkUsICJuaV9hdG1pbzE2ZCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvKiBib2FyZCBuYW1lICovCisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmR0eXBlLT5uYW1lOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGF0bWlvMTZkX3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogcmVzZXQgdGhlIGF0bWlvMTZkIGhhcmR3YXJlICovCisJcmVzZXRfYXRtaW8xNmQoZGV2KTsKKworCS8qIGNoZWNrIGlmIG91ciBpbnRlcnJ1cHQgaXMgYXZhaWxhYmxlIGFuZCBnZXQgaXQgKi8KKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXJxKSB7CisJCWlmICgocmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgYXRtaW8xNmRfaW50ZXJydXB0LAorCQkJCQkwLCAiYXRtaW8xNmQiLCBkZXYpKSA8IDApIHsKKwkJCXByaW50aygiZmFpbGVkIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2LT5pcnEgPSBpcnE7CisJCXByaW50aygiKCBpcnEgPSAldSApXG4iLCBpcnEpOworCX0gZWxzZSB7CisJCXByaW50aygiKCBubyBpcnEgKSIpOworCX0KKworCS8qIHNldCBkZXZpY2Ugb3B0aW9ucyAqLworCWRldnByaXYtPmFkY19tdXggPSBpdC0+b3B0aW9uc1s1XTsKKwlkZXZwcml2LT5hZGNfcmFuZ2UgPSBpdC0+b3B0aW9uc1s2XTsKKworCWRldnByaXYtPmRhYzBfcmFuZ2UgPSBpdC0+b3B0aW9uc1s3XTsKKwlkZXZwcml2LT5kYWMwX3JlZmVyZW5jZSA9IGl0LT5vcHRpb25zWzhdOworCWRldnByaXYtPmRhYzBfY29kaW5nID0gaXQtPm9wdGlvbnNbOV07CisJZGV2cHJpdi0+ZGFjMV9yYW5nZSA9IGl0LT5vcHRpb25zWzEwXTsKKwlkZXZwcml2LT5kYWMxX3JlZmVyZW5jZSA9IGl0LT5vcHRpb25zWzExXTsKKwlkZXZwcml2LT5kYWMxX2NvZGluZyA9IGl0LT5vcHRpb25zWzEyXTsKKworCS8qIHNldHVwIHN1Yi1kZXZpY2VzICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJLyogYWkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gKGRldnByaXYtPmFkY19tdXggPyAxNiA6IDgpOworCXMtPmxlbl9jaGFubGlzdCA9IDE2OworCXMtPmluc25fcmVhZCA9IGF0bWlvMTZkX2FpX2luc25fcmVhZDsKKwlzLT5kb19jbWR0ZXN0ID0gYXRtaW8xNmRfYWlfY21kdGVzdDsKKwlzLT5kb19jbWQgPSBhdG1pbzE2ZF9haV9jbWQ7CisJcy0+Y2FuY2VsID0gYXRtaW8xNmRfYWlfY2FuY2VsOworCXMtPm1heGRhdGEgPSAweGZmZjsJLyogNDA5NSBkZWNpbWFsICovCisJc3dpdGNoIChkZXZwcml2LT5hZGNfcmFuZ2UpIHsKKwljYXNlIGFkY19iaXBvbGFyMTA6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2F0bWlvMTZkX2FpXzEwX2JpcG9sYXI7CisJCWJyZWFrOworCWNhc2UgYWRjX2JpcG9sYXI1OgorCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hdG1pbzE2ZF9haV81X2JpcG9sYXI7CisJCWJyZWFrOworCWNhc2UgYWRjX3VuaXBvbGFyMTA6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2F0bWlvMTZkX2FpX3VuaXBvbGFyOworCQlicmVhazsKKwl9CisKKwkvKiBhbyBzdWJkZXZpY2UgKi8KKwlzKys7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyOworCXMtPmluc25fcmVhZCA9IGF0bWlvMTZkX2FvX2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gYXRtaW8xNmRfYW9faW5zbl93cml0ZTsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CS8qIDQwOTUgZGVjaW1hbCAqLworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3Q7CisJc3dpdGNoIChkZXZwcml2LT5kYWMwX3JhbmdlKSB7CisJY2FzZSBkYWNfYmlwb2xhcjoKKwkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzBdID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJYnJlYWs7CisJY2FzZSBkYWNfdW5pcG9sYXI6CisJCWRldnByaXYtPmFvX3JhbmdlX3R5cGVfbGlzdFswXSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQlicmVhazsKKwl9CisJc3dpdGNoIChkZXZwcml2LT5kYWMxX3JhbmdlKSB7CisJY2FzZSBkYWNfYmlwb2xhcjoKKwkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzFdID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJYnJlYWs7CisJY2FzZSBkYWNfdW5pcG9sYXI6CisJCWRldnByaXYtPmFvX3JhbmdlX3R5cGVfbGlzdFsxXSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQlicmVhazsKKwl9CisKKwkvKiBEaWdpdGFsIEkvTyAqLworCXMrKzsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IGF0bWlvMTZkX2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBhdG1pbzE2ZF9kaW9faW5zbl9jb25maWc7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCS8qIDgyNTUgc3ViZGV2aWNlICovCisJcysrOworCWlmIChib2FyZHR5cGUtPmhhc184MjU1KSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXYtPmlvYmFzZSk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKy8qIGRvbid0IHlldCBrbm93IGhvdyB0byBkZWFsIHdpdGggY291bnRlci90aW1lcnMgKi8KKyNpZiAwCisJcysrOworCS8qIGRvICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworCXMtPm5fY2hhbiA9IDA7CisJcy0+bWF4ZGF0YSA9IDAKKyNlbmRpZgorCQlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1pbzE2ZF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogYXRtaW8xNmQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5zdWJkZXZpY2VzICYmIGJvYXJkdHlwZS0+aGFzXzgyNTUpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAzKTsKKworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJcmVzZXRfYXRtaW8xNmQoZGV2KTsKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIEFUTUlPMTZEX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWEzMWFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwpAQCAtMCwwICsxLDg0MSBAQAorLyoKKyAqICAgICBjb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKKyAqICAgICBEcml2ZXIgZm9yIERBUUNhcmQtNzAwIERJTyBvbmx5CisgKiAgICAgY29waWVkIGZyb20gODI1NQorICoKKyAqICAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKy8qCitEcml2ZXI6IG5pX2RhcV83MDAKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ01DSUEgREFRQ2FyZC03MDAgRElPIG9ubHkKK0F1dGhvcjogRnJlZCBCcm9va3MgPG5zYXNwb29rQG5zYXNwb29rLmNvbT4sCisgIGJhc2VkIG9uIG5pX2RhcV9kaW8yNCBieSBEYW5pZWwgVmVjaW5vIENhc3RlbCA8ZHZlY2lub0BhYmxlLmVzPgorRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ01DSUEgREFRLUNhcmQtNzAwIChuaV9kYXFfNzAwKQorU3RhdHVzOiB3b3JrcworVXBkYXRlZDogVGh1LCAyMSBGZWIgMjAwOCAxMjowNzoyMCArMDAwMAorCitUaGUgZGFxY2FyZC03MDAgYXBwZWFycyBpbiBDb21lZGkgYXMgYSBzaW5nbGUgZGlnaXRhbCBJL08gc3ViZGV2aWNlIHdpdGgKKzE2IGNoYW5uZWxzLiAgVGhlIGNoYW5uZWwgMCBjb3JyZXNwb25kcyB0byB0aGUgZGFxY2FyZC03MDAncyBvdXRwdXQKK3BvcnQsIGJpdCAwOyBjaGFubmVsIDggY29ycmVzcG9uZHMgdG8gdGhlIGlucHV0IHBvcnQsIGJpdCAwLgorCitEaXJlY3Rpb24gY29uZmlndXJhdGlvbjogY2hhbm5lbHMgMC03IG91dHB1dCwgOC0xNSBpbnB1dCAoODIyNSBkZXZpY2UKK2VtdSBhcyBwb3J0IEEgb3V0cHV0LCBwb3J0IEIgaW5wdXQsIHBvcnQgQyBOL0EpLgorCitJUlEgaXMgYXNzaWduZWQgYnV0IG5vdCB1c2VkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9jdXJfZGV2ID0gTlVMTDsKKworI2RlZmluZSBESU83MDBfU0laRSA4CQkvLyBzaXplIG9mIGlvIHJlZ2lvbiB1c2VkIGJ5IGJvYXJkCisKK3N0YXRpYyBpbnQgZGlvNzAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRpbzcwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitlbnVtIGRpbzcwMF9idXN0eXBlIHsgcGNtY2lhX2J1c3R5cGUgfTsKKworc3RydWN0IGRpbzcwMF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOwkJLy8gZGV2aWNlIGlkIGZvciBwY21jaWEgYm9hcmQKKwllbnVtIGRpbzcwMF9idXN0eXBlIGJ1c3R5cGU7CS8vIFBDTUNJQQorCWludCBoYXZlX2RpbzsJCS8vIGhhdmUgZGFxY2FyZC03MDAgZGlvCisJLy8gZnVuY3Rpb24gcG9pbnRlcnMgc28gd2UgY2FuIHVzZSBpbmIvb3V0YiBvciByZWFkYi93cml0ZWIKKwkvLyBhcyBhcHByb3ByaWF0ZQorCXVuc2lnbmVkIGludCAoKnJlYWRfYnl0ZSkgKHVuc2lnbmVkIGludCBhZGRyZXNzKTsKKwl2b2lkICgqd3JpdGVfYnl0ZSkgKHVuc2lnbmVkIGludCBieXRlLCB1bnNpZ25lZCBpbnQgYWRkcmVzcyk7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpbzcwMF9ib2FyZCBkaW83MDBfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkYXFjYXJkLTcwMCIsCisJICAgICAgZGV2aWNlX2lkOjB4NDc0MywvLyAweDEwYiBpcyBtYW51ZmFjdHVyZXIgaWQsIDB4NDc0MyBpcyBkZXZpY2UgaWQKKwkgICAgICBidXN0eXBlOglwY21jaWFfYnVzdHlwZSwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkibmlfZGFxXzcwMCIsCisJICAgICAgZGV2aWNlX2lkOjB4NDc0MywvLyAweDEwYiBpcyBtYW51ZmFjdHVyZXIgaWQsIDB4NDc0MyBpcyBkZXZpY2UgaWQKKwkgICAgICBidXN0eXBlOglwY21jaWFfYnVzdHlwZSwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGlvNzAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBkaW83MDBfcHJpdmF0ZSB7CisKKwlpbnQgZGF0YTsJCS8qIG51bWJlciBvZiBkYXRhIHBvaW50cyBsZWZ0IHRvIGJlIHRha2VuICovCit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkaW83MDBfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kaW83MDAgPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfZGFxXzcwMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGlvNzAwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpkaW83MDBfZGV0YWNoLAorICAgICAgbnVtX25hbWVzOnNpemVvZihkaW83MDBfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgZGlvNzAwX2JvYXJkKSwKKyAgICAgIGJvYXJkX25hbWU6JmRpbzcwMF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGRpbzcwMF9ib2FyZCksCit9OworCisvKgl0aGUgcmVhbCBkcml2ZXIgcm91dGluZXMJKi8KKworI2RlZmluZSBfNzAwX1NJWkUgOAorCisjZGVmaW5lIF83MDBfREFUQSAwCisKKyNkZWZpbmUgRElPX1cJCTB4MDQKKyNkZWZpbmUgRElPX1IJCTB4MDUKKworc3RydWN0IHN1YmRldl83MDBfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGNiX2FyZzsKKwlpbnQgKCpjYl9mdW5jKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CisJaW50IGhhdmVfaXJxOworfTsKKworI2RlZmluZSBDQUxMQkFDS19BUkcJKCgoc3RydWN0IHN1YmRldl83MDBfc3RydWN0ICopcy0+cHJpdmF0ZSktPmNiX2FyZykKKyNkZWZpbmUgQ0FMTEJBQ0tfRlVOQwkoKChzdHJ1Y3Qgc3ViZGV2XzcwMF9zdHJ1Y3QgKilzLT5wcml2YXRlKS0+Y2JfZnVuYykKKyNkZWZpbmUgc3ViZGV2cHJpdgkoKHN0cnVjdCBzdWJkZXZfNzAwX3N0cnVjdCAqKXMtPnByaXZhdGUpCisKK3N0YXRpYyB2b2lkIGRvX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKwordm9pZCBzdWJkZXZfNzAwX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXNob3J0IGQ7CisKKwlkID0gQ0FMTEJBQ0tfRlVOQygwLCBfNzAwX0RBVEEsIDAsIENBTExCQUNLX0FSRyk7CisKKwljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZCk7CisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzcwMF9jYihpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCS8qIHBvcnQgaXMgYWx3YXlzIEEgZm9yIG91dHB1dCBhbmQgQiBmb3IgaW5wdXQgKDgyNTUgZW11KSAqLworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gYXJnOworCisJaWYgKGRpcikgeworCQlvdXRiKGRhdGEsIGlvYmFzZSArIERJT19XKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGluYihpb2Jhc2UgKyBESU9fUik7CisJfQorfQorCitzdGF0aWMgaW50IHN1YmRldl83MDBfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisKKwkJaWYgKGRhdGFbMF0gJiAweGZmKQorCQkJQ0FMTEJBQ0tfRlVOQygxLCBfNzAwX0RBVEEsIHMtPnN0YXRlICYgMHhmZiwKKwkJCQlDQUxMQkFDS19BUkcpOworCX0KKworCWRhdGFbMV0gPSBzLT5zdGF0ZSAmIDB4ZmY7CisJZGF0YVsxXSB8PSBDQUxMQkFDS19GVU5DKDAsIF83MDBfREFUQSwgMCwgQ0FMTEJBQ0tfQVJHKSA8PCA4OworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzcwMF9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkocy0+aW9fYml0cyAmICgxIDw8IENSX0NIQU4oaW5zbi0+CisJCQkJCWNoYW5zcGVjKSkpID8gQ09NRURJX09VVFBVVCA6CisJCQlDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZG9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CQkJCS8qIHVzZSBwb3dlcnVwIGRlZmF1bHRzICovCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHN1YmRldl83MDBfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBzdGVwIDEgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMyAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gMSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCWNtZC0+c3RvcF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNCAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfNzAwX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8qIEZJWE1FICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfNzAwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8qIEZJWE1FICovCisKKwlyZXR1cm4gMDsKK30KKworaW50IHN1YmRldl83MDBfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgKCpjYikgKGludCwKKwkJaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPm1heGRhdGEgPSAxOworCisJcy0+cHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdWJkZXZfNzAwX3N0cnVjdCksIEdGUF9LRVJORUwpOworCWlmICghcy0+cHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlDQUxMQkFDS19BUkcgPSBhcmc7CisJaWYgKGNiID09IE5VTEwpIHsKKwkJQ0FMTEJBQ0tfRlVOQyA9IHN1YmRldl83MDBfY2I7CisJfSBlbHNlIHsKKwkJQ0FMTEJBQ0tfRlVOQyA9IGNiOworCX0KKwlzLT5pbnNuX2JpdHMgPSBzdWJkZXZfNzAwX2luc247CisJcy0+aW5zbl9jb25maWcgPSBzdWJkZXZfNzAwX2luc25fY29uZmlnOworCisJcy0+c3RhdGUgPSAwOworCXMtPmlvX2JpdHMgPSAweDAwZmY7CisJZG9fY29uZmlnKGRldiwgcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHN1YmRldl83MDBfaW5pdF9pcnEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgKCpjYikgKGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc3ViZGV2XzcwMF9pbml0KGRldiwgcywgY2IsIGFyZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzLT5kb19jbWR0ZXN0ID0gc3ViZGV2XzcwMF9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IHN1YmRldl83MDBfY21kOworCXMtPmNhbmNlbCA9IHN1YmRldl83MDBfY2FuY2VsOworCisJc3ViZGV2cHJpdi0+aGF2ZV9pcnEgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3ViZGV2XzcwMF9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKHMtPnByaXZhdGUpIHsKKwkJaWYgKHN1YmRldnByaXYtPmhhdmVfaXJxKSB7CisJCX0KKworCQlrZnJlZShzLT5wcml2YXRlKTsKKwl9Cit9CisKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzcwMF9pbml0KTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzcwMF9pbml0X2lycSk7CitFWFBPUlRfU1lNQk9MKHN1YmRldl83MDBfY2xlYW51cCk7CitFWFBPUlRfU1lNQk9MKHN1YmRldl83MDBfaW50ZXJydXB0KTsKKworc3RhdGljIGludCBkaW83MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gMDsKKyNpZmRlZiBpbmNvbXBsZXRlCisJdW5zaWduZWQgaW50IGlycSA9IDA7CisjZW5kaWYKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRldi0+cHJpdmF0ZSAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkaW83MDBfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvLyBnZXQgYmFzZSBhZGRyZXNzLCBpcnEgZXRjLiBiYXNlZCBvbiBidXN0eXBlCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIHBjbWNpYV9idXN0eXBlOgorCQlsaW5rID0gcGNtY2lhX2N1cl9kZXY7CS8qIFhYWCBoYWNrICovCisJCWlmICghbGluaykKKwkJCXJldHVybiAtRUlPOworCQlpb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisjaWZkZWYgaW5jb21wbGV0ZQorCQlpcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJidWchIGNvdWxkbid0IGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlwcmludGsoImNvbWVkaSVkOiBuaV9kYXFfNzAwOiAlcywgaW8gMHglbHgiLCBkZXYtPm1pbm9yLAorCQl0aGlzYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisjaWZkZWYgaW5jb21wbGV0ZQorCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIsIGlycSAldSIsIGlycSk7CisJfQorI2VuZGlmCisKKwlwcmludGsoIlxuIik7CisKKwlpZiAoaW9iYXNlID09IDApIHsKKwkJcHJpbnRrKCJpbyBiYXNlIGFkZHJlc3MgaXMgemVybyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworI2lmZGVmIGluY29tcGxldGUKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlkZXYtPmlycSA9IGlycTsKKyNlbmRpZgorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogREFRQ2FyZC03MDAgZGlvICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJc3ViZGV2XzcwMF9pbml0KGRldiwgcywgTlVMTCwgZGV2LT5pb2Jhc2UpOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IGRpbzcwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogbmlfZGFxXzcwMDogY3MtcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl83MDBfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDApOworCisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSAhPSBwY21jaWFfYnVzdHlwZSAmJiBkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERJTzcwMF9TSVpFKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCXJldHVybiAwOworfTsKKworLy8gUENNQ0lBIGNyYXAKKworLyoKKyAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCisgICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQorICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCisgICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKKyAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KKyovCisjaWZkZWYgUENNQ0lBX0RFQlVHCitzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOworbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQorc3RhdGljIGNoYXIgKnZlcnNpb24gPSAibmlfZGFxXzcwMC5jLCBiYXNlZCBvbiBkdW1teV9jcy5jIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzcwMF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgZGlvNzAwX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIGludCBkaW83MDBfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBkaW83MDBfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CisKKy8qCisgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKKyAgICJpbnN0YW5jZXMiIG9mIHRoZSBkcml2ZXIsIHdoZXJlIGVhY2ggaW5zdGFuY2UgcmVwcmVzZW50cyBldmVyeXRoaW5nCisgICBuZWVkZWQgdG8gbWFuYWdlIG9uZSBhY3R1YWwgUENNQ0lBIGNhcmQuCisqLworCitzdGF0aWMgaW50IGRpbzcwMF9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCBkaW83MDBfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX2RhcV83MDAiOworCitzdHJ1Y3QgbG9jYWxfaW5mb190IHsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlkZXZfbm9kZV90IG5vZGU7CisJaW50IHN0b3A7CisJc3RydWN0IGJ1c19vcGVyYXRpb25zICpidXM7Cit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGRpbzcwMF9jc19hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZworICAgIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KKworICAgIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorICAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCisgICAgY2FyZCBpbnNlcnRpb24gZXZlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRpbzcwMF9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWw7CisKKwlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfNzAwOiAgY3MtYXR0YWNoXG4iKTsKKworCURFQlVHKDAsICJkaW83MDBfY3NfYXR0YWNoKClcbiIpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsKQorCQlyZXR1cm4gLUVOT01FTTsKKwlsb2NhbC0+bGluayA9IGxpbms7CisJbGluay0+cHJpdiA9IGxvY2FsOworCisJLyogSW50ZXJydXB0IHNldHVwICovCisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKKworCS8qCisJICAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKKwkgICBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IgYWxtb3N0CisJICAgZXZlcnl0aGluZy4gIEluIG1vc3QgY2xpZW50cywgbWFueSBkZXRhaWxzIChpLmUuLCBudW1iZXIsIHNpemVzLAorCSAgIGFuZCBhdHRyaWJ1dGVzIG9mIElPIHdpbmRvd3MpIGFyZSBmaXhlZCBieSB0aGUgbmF0dXJlIG9mIHRoZQorCSAgIGRldmljZSwgYW5kIGNhbiBiZSBoYXJkLXdpcmVkIGhlcmUuCisJICovCisJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKKwlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKworCXBjbWNpYV9jdXJfZGV2ID0gbGluazsKKworCWRpbzcwMF9jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGlvNzAwX2NzX2F0dGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoaXMgZGVsZXRlcyBhIGRyaXZlciAiaW5zdGFuY2UiLiAgVGhlIGRldmljZSBpcyBkZS1yZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCisgICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKKyAgICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBkaW83MDBfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCisJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxXzcwMDogY3MtZGV0YWNoIVxuIik7CisKKwlERUJVRygwLCAiZGlvNzAwX2NzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisKKwlpZiAobGluay0+ZGV2X25vZGUpIHsKKwkJKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIGxpbmstPnByaXYpLT5zdG9wID0gMTsKKwkJZGlvNzAwX3JlbGVhc2UobGluayk7CisJfQorCisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgbG9jYWxfaW5mb190IHN0cnVjdCAqLworCWlmIChsaW5rLT5wcml2KQorCQlrZnJlZShsaW5rLT5wcml2KTsKKworfQkJCQkvKiBkaW83MDBfY3NfZGV0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGlvNzAwX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAorICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQorICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzcwMF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJaW50IGxhc3RfcmV0OworCXVfY2hhciBidWZbNjRdOworCXdpbl9yZXFfdCByZXE7CisJbWVtcmVxX3QgbWFwOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCisJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxXzcwMDogIGNzLWNvbmZpZ1xuIik7CisKKwlERUJVRygwLCAiZGlvNzAwX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisKKwkvKgorCSAgIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgorCSAgIHJlZ2lzdGVycy4KKwkgKi8KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOworCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOworCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKKwl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKKwlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CisKKwkvKgorCSAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCisJICAgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZworCSAgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KKworCSAgIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UgdXNlCisJICAganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbCB3b3JsZCwKKwkgICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKKwkgICBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkgImtub3dzIiBtb3N0IG9mCisJICAgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLCBhbmQgbW9zdCBjbGllbnQgZHJpdmVycworCSAgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KKwkgKi8KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKwkJCWRmbHQgPSAqY2ZnOworCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKworCQkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CisJCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCQl9CisKKwkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKKwkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisKKwkJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7CisJCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7CisJCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87CisJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJaWYgKGlvLT5ud2luID4gMSkgeworCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7CisJCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisKKwkJaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQubWVtLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX21lbV90ICptZW0gPQorCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0Lm1lbTsKKwkJCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTYgfCBXSU5fTUVNT1JZX1RZUEVfQ007CisJCQlyZXEuQXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCQkJcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7CisJCQlyZXEuU2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKKwkJCWlmIChyZXEuU2l6ZSA8IDB4MTAwMCkKKwkJCQlyZXEuU2l6ZSA9IDB4MTAwMDsKKwkJCXJlcS5BY2Nlc3NTcGVlZCA9IDA7CisJCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCQltYXAuUGFnZSA9IDA7CisJCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKKwkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KKwkJYnJlYWs7CisKKwkgICAgICBuZXh0X2VudHJ5OgorCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJCWNzX2Vycm9yKGxpbmssIEdldE5leHRUdXBsZSwgbGFzdF9yZXQpOworCQkJZ290byBjc19mYWlsZWQ7CisJCX0KKwl9CisKKwkvKgorCSAgIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEKKwkgICBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUKKwkgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgorCSAqLworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpICE9IDApIHsKKwkJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisKKwkvKgorCSAgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQorCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCisJICovCisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKworCS8qCisJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKKwkgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICovCisJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJuaV9kYXFfNzAwIik7CisJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CisKKwkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeCIsCisJCWRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKKwkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQlsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMyKQorCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCisJCQlsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKKwlpZiAobGluay0+d2luKQorCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS5CYXNlLAorCQkJcmVxLkJhc2UgKyByZXEuU2l6ZSAtIDEpOworCXByaW50aygiXG4iKTsKKworCXJldHVybjsKKworICAgICAgY3NfZmFpbGVkOgorCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV83MDAgY3MgZmFpbGVkIik7CisJZGlvNzAwX3JlbGVhc2UobGluayk7CisKK30JCQkJLyogZGlvNzAwX2NvbmZpZyAqLworCitzdGF0aWMgdm9pZCBkaW83MDBfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAiZGlvNzAwX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworfQkJCQkvKiBkaW83MDBfcmVsZWFzZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoZSBjYXJkIHN0YXR1cyBldmVudCBoYW5kbGVyLiAgTW9zdGx5LCB0aGlzIHNjaGVkdWxlcyBvdGhlcgorICAgIHN0dWZmIHRvIHJ1biBhZnRlciBhbiBldmVudCBpcyByZWNlaXZlZC4KKworICAgIFdoZW4gYSBDQVJEX1JFTU9WQUwgZXZlbnQgaXMgcmVjZWl2ZWQsIHdlIGltbWVkaWF0ZWx5IHNldCBhCisgICAgcHJpdmF0ZSBmbGFnIHRvIGJsb2NrIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGlzIGRldmljZS4gIEFsbCB0aGUKKyAgICBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBhY2Nlc3MgdGhlIGRldmljZSBzaG91bGQgY2hlY2sgdGhpcyBmbGFnCisgICAgdG8gbWFrZSBzdXJlIHRoZSBjYXJkIGlzIHN0aWxsIHByZXNlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRpbzcwMF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLworCWxvY2FsLT5zdG9wID0gMTsKKwlyZXR1cm4gMDsKK30JCQkJLyogZGlvNzAwX2NzX3N1c3BlbmQgKi8KKworc3RhdGljIGludCBkaW83MDBfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCWxvY2FsLT5zdG9wID0gMDsKKwlyZXR1cm4gMDsKK30JCQkJLyogZGlvNzAwX2NzX3Jlc3VtZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIGRpbzcwMF9jc19pZHNbXSA9IHsKKwkvKiBOLkIuIFRoZXNlIElEcyBzaG91bGQgbWF0Y2ggdGhvc2UgaW4gZGlvNzAwX2JvYXJkcyAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHg0NzQzKSwJLyogZGFxY2FyZC03MDAgKi8KKwlQQ01DSUFfREVWSUNFX05VTEwKK307CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBkaW83MDBfY3NfaWRzKTsKKworc3RydWN0IHBjbWNpYV9kcml2ZXIgZGlvNzAwX2NzX2RyaXZlciA9IHsKKwkucHJvYmUgPSBkaW83MDBfY3NfYXR0YWNoLAorCS5yZW1vdmUgPSBkaW83MDBfY3NfZGV0YWNoLAorCS5zdXNwZW5kID0gZGlvNzAwX2NzX3N1c3BlbmQsCisJLnJlc3VtZSA9IGRpbzcwMF9jc19yZXN1bWUsCisJLmlkX3RhYmxlID0gZGlvNzAwX2NzX2lkcywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZGlvNzAwX2NzKHZvaWQpCit7CisJcHJpbnRrKCJuaV9kYXFfNzAwOiAgY3MtaW5pdCBcbiIpOworCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CisJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGlvNzAwX2NzX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2RpbzcwMF9jcyh2b2lkKQoreworCURFQlVHKDAsICJuaV9kYXFfNzAwOiB1bmxvYWRpbmdcbiIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmZGlvNzAwX2NzX2RyaXZlcik7Cit9CitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZGlvNzAwX2NzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RpbzcwMCk7Cit9CisKK3ZvaWQgX19leGl0IGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJZXhpdF9kaW83MDBfY3MoKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kaW83MDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZWM1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKQEAgLTAsMCArMSw1OTggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKKyAgICBEcml2ZXIgZm9yIE5hdGlvbmFsIEluc3RydW1lbnRzIFBDTUNJQSBEQVEtQ2FyZCBESU8tMjQKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgRGFuaWVsIFZlY2lubyBDYXN0ZWwgPGR2ZWNpbm9AYWJsZS5lcz4KKworICAgIFBDTUNJQSBjcmFwIGF0IGVuZCBvZiBmaWxlIGlzIGFkYXB0ZWQgZnJvbSBkdW1teV9jcy5jIDEuMzEgMjAwMS8wOC8yNCAxMjoxMzoxMworICAgIGZyb20gdGhlIHBjbWNpYSBwYWNrYWdlLgorICAgIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgcGNtY2lhIGR1bW15X2NzLmMgY29kZSBpcyBEYXZpZCBBLiBIaW5kcworICAgIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCisgICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogbmlfZGFxX2RpbzI0CitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENNQ0lBIERBUS1DYXJkIERJTy0yNAorQXV0aG9yOiBEYW5pZWwgVmVjaW5vIENhc3RlbCA8ZHZlY2lub0BhYmxlLmVzPgorRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ01DSUEgREFRLUNhcmQgRElPLTI0IChuaV9kYXFfZGlvMjQpCitTdGF0dXM6ID8KK1VwZGF0ZWQ6IFRodSwgMDcgTm92IDIwMDIgMjE6NTM6MDYgLTA4MDAKKworVGhpcyBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgdGhlIDgyNTUubyBkcml2ZXIgdG8gcHJvcGVybHkgaGFuZGxlCit0aGUgUENNQ0lBIGludGVyZmFjZS4KKyovCisKKy8vI2RlZmluZSBMQUJQQ19ERUJVRyAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMKKyN1bmRlZiBMQUJQQ19ERUJVRworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgIjgyNTUuaCIKKworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2N1cl9kZXYgPSBOVUxMOworCisjZGVmaW5lIERJTzI0X1NJWkUgNAkJLy8gc2l6ZSBvZiBpbyByZWdpb24gdXNlZCBieSBib2FyZAorCitzdGF0aWMgaW50IGRpbzI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRpbzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK2VudW0gZGlvMjRfYnVzdHlwZSB7IHBjbWNpYV9idXN0eXBlIH07CisKK3R5cGVkZWYgc3RydWN0IGRpbzI0X2JvYXJkX3N0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOwkJLy8gZGV2aWNlIGlkIGZvciBwY21jaWEgYm9hcmQKKwllbnVtIGRpbzI0X2J1c3R5cGUgYnVzdHlwZTsJLy8gUENNQ0lBCisJaW50IGhhdmVfZGlvOwkJLy8gaGF2ZSA4MjU1IGNoaXAKKwkvLyBmdW5jdGlvbiBwb2ludGVycyBzbyB3ZSBjYW4gdXNlIGluYi9vdXRiIG9yIHJlYWRiL3dyaXRlYiBhcyBhcHByb3ByaWF0ZQorCXVuc2lnbmVkIGludCAoKnJlYWRfYnl0ZSkgKHVuc2lnbmVkIGludCBhZGRyZXNzKTsKKwl2b2lkICgqd3JpdGVfYnl0ZSkgKHVuc2lnbmVkIGludCBieXRlLCB1bnNpZ25lZCBpbnQgYWRkcmVzcyk7Cit9IGRpbzI0X2JvYXJkOworCitzdGF0aWMgY29uc3QgZGlvMjRfYm9hcmQgZGlvMjRfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkYXFjYXJkLWRpbzI0IiwKKwkgICAgICBkZXZpY2VfaWQ6MHg0NzVjLC8vIDB4MTBiIGlzIG1hbnVmYWN0dXJlciBpZCwgMHg0NzVjIGlzIGRldmljZSBpZAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJuaV9kYXFfZGlvMjQiLAorCSAgICAgIGRldmljZV9pZDoweDQ3NWMsLy8gMHgxMGIgaXMgbWFudWZhY3R1cmVyIGlkLCAweDQ3NWMgaXMgZGV2aWNlIGlkCisJICAgICAgYnVzdHlwZToJcGNtY2lhX2J1c3R5cGUsCisJICAgICAgaGF2ZV9kaW86MSwKKwkJfSwKK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3QgZGlvMjRfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGRpbzI0X3ByaXZhdGUgeworCisJaW50IGRhdGE7CQkvKiBudW1iZXIgb2YgZGF0YSBwb2ludHMgbGVmdCB0byBiZSB0YWtlbiAqLworfTsKKworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZGlvMjRfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kaW8yNCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaV9kYXFfZGlvMjQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRpbzI0X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkaW8yNF9kZXRhY2gsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRpbzI0X2JvYXJkcykgLyBzaXplb2YoZGlvMjRfYm9hcmQpLAorICAgICAgYm9hcmRfbmFtZTomZGlvMjRfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKGRpbzI0X2JvYXJkKSwKK307CisKK3N0YXRpYyBpbnQgZGlvMjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gMDsKKyNpZmRlZiBpbmNvbXBsZXRlCisJdW5zaWduZWQgaW50IGlycSA9IDA7CisjZW5kaWYKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRldi0+cHJpdmF0ZSAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkaW8yNF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8vIGdldCBiYXNlIGFkZHJlc3MsIGlycSBldGMuIGJhc2VkIG9uIGJ1c3R5cGUKKwlzd2l0Y2ggKHRoaXNib2FyZC0+YnVzdHlwZSkgeworCWNhc2UgcGNtY2lhX2J1c3R5cGU6CisJCWxpbmsgPSBwY21jaWFfY3VyX2RldjsJLyogWFhYIGhhY2sgKi8KKwkJaWYgKCFsaW5rKQorCQkJcmV0dXJuIC1FSU87CisJCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyNpZmRlZiBpbmNvbXBsZXRlCisJCWlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoImJ1ZyEgY291bGRuJ3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXByaW50aygiY29tZWRpJWQ6IG5pX2RhcV9kaW8yNDogJXMsIGlvIDB4JWx4IiwgZGV2LT5taW5vciwKKwkJdGhpc2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworI2lmZGVmIGluY29tcGxldGUKKwlpZiAoaXJxKSB7CisJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOworCX0KKyNlbmRpZgorCisJcHJpbnRrKCJcbiIpOworCisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXByaW50aygiaW8gYmFzZSBhZGRyZXNzIGlzIHplcm8hXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKyNpZmRlZiBpbmNvbXBsZXRlCisJLyogZ3JhYiBvdXIgSVJRICovCisJZGV2LT5pcnEgPSBpcnE7CisjZW5kaWYKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIDgyNTUgZGlvICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldi0+aW9iYXNlKTsKKworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBkaW8yNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogbmlfZGFxX2RpbzI0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDApOworCisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSAhPSBwY21jaWFfYnVzdHlwZSAmJiBkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERJTzI0X1NJWkUpOworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJcmV0dXJuIDA7Cit9OworCisvLyBQQ01DSUEgY3JhcAorCisvKgorICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKKyAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCisgICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKKyAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYworICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgorKi8KKyNpZmRlZiBQQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Cittb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCitzdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJuaV9kYXFfZGlvMjQuYywgYmFzZWQgb24gZHVtbXlfY3MuYyI7CisjZWxzZQorI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBkaW8yNF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgZGlvMjRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgaW50IGRpbzI0X2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK3N0YXRpYyBpbnQgZGlvMjRfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CisKKy8qCisgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKKyAgICJpbnN0YW5jZXMiIG9mIHRoZSBkcml2ZXIsIHdoZXJlIGVhY2ggaW5zdGFuY2UgcmVwcmVzZW50cyBldmVyeXRoaW5nCisgICBuZWVkZWQgdG8gbWFuYWdlIG9uZSBhY3R1YWwgUENNQ0lBIGNhcmQuCisqLworCitzdGF0aWMgaW50IGRpbzI0X2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIGRpbzI0X2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKKworLyoKKyAgIFlvdSdsbCBhbHNvIG5lZWQgdG8gcHJvdG90eXBlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBhY3R1YWxseQorICAgYmUgdXNlZCB0byB0YWxrIHRvIHlvdXIgZGV2aWNlLiAgU2VlICdtZW1vcnlfY3MnIGZvciBhIGdvb2QgZXhhbXBsZQorICAgb2YgYSBmdWxseSBzZWxmLXN1ZmZpY2llbnQgZHJpdmVyOyB0aGUgb3RoZXIgZHJpdmVycyByZWx5IG1vcmUgb3IKKyAgIGxlc3Mgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KKyovCisKKy8qCisgICBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCisgICBkZXZpY2UgZHJpdmVyIHdpdGggYXBwcm9wcmlhdGUgY2FyZHMsIHRocm91Z2ggdGhlIGNhcmQgY29uZmlndXJhdGlvbgorICAgZGF0YWJhc2UuCisqLworCitzdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJuaV9kYXFfZGlvMjQiOworCit0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgeworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWRldl9ub2RlX3Qgbm9kZTsKKwlpbnQgc3RvcDsKKwlzdHJ1Y3QgYnVzX29wZXJhdGlvbnMgKmJ1czsKK30gbG9jYWxfaW5mb190OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGRpbzI0X2NzX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCisgICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLgorCisgICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CisgICAgY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEKKyAgICBjYXJkIGluc2VydGlvbiBldmVudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGlvMjRfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqbG9jYWw7CisKKwlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfZGlvMjQ6IEhPTEEgU09ZIFlPIC0gQ1MtYXR0YWNoIVxuIik7CisKKwlERUJVRygwLCAiZGlvMjRfY3NfYXR0YWNoKClcbiIpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworCWlmICghbG9jYWwpCisJCXJldHVybiAtRU5PTUVNOworCWxvY2FsLT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gbG9jYWw7CisKKwkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOworCisJLyoKKwkgICBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcworCSAgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKKwkgICBldmVyeXRoaW5nLiAgSW4gbW9zdCBjbGllbnRzLCBtYW55IGRldGFpbHMgKGkuZS4sIG51bWJlciwgc2l6ZXMsCisJICAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCisJICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KKwkgKi8KKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJcGNtY2lhX2N1cl9kZXYgPSBsaW5rOworCisJZGlvMjRfY29uZmlnKGxpbmspOworCisJcmV0dXJuIDA7Cit9CQkJCS8qIGRpbzI0X2NzX2F0dGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoaXMgZGVsZXRlcyBhIGRyaXZlciAiaW5zdGFuY2UiLiAgVGhlIGRldmljZSBpcyBkZS1yZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCisgICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKKyAgICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBkaW8yNF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisKKwlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfZGlvMjQ6IEhPTEEgU09ZIFlPIC0gY3MtZGV0YWNoIVxuIik7CisKKwlERUJVRygwLCAiZGlvMjRfY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKworCWlmIChsaW5rLT5kZXZfbm9kZSkgeworCQkoKGxvY2FsX2luZm9fdCAqKSBsaW5rLT5wcml2KS0+c3RvcCA9IDE7CisJCWRpbzI0X3JlbGVhc2UobGluayk7CisJfQorCisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCisJaWYgKGxpbmstPnByaXYpCisJCWtmcmVlKGxpbmstPnByaXYpOworCit9CQkJCS8qIGRpbzI0X2NzX2RldGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGRpbzI0X2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAorICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQorICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzI0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBsYXN0X3JldDsKKwl1X2NoYXIgYnVmWzY0XTsKKwl3aW5fcmVxX3QgcmVxOworCW1lbXJlcV90IG1hcDsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKworCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV9kaW8yNDogSE9MQSBTT1kgWU8hIC0gY29uZmlnXG4iKTsKKworCURFQlVHKDAsICJkaW8yNF9jb25maWcoMHglcClcbiIsIGxpbmspOworCisJLyoKKwkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KKwkgICByZWdpc3RlcnMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCisJLyoKKwkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAorCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKwkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCisKKwkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQorCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisJICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCisJICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgorCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKwkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwl3aGlsZSAoMSkgeworCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOworCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkgIT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisKKwkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKKwkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwkJfQorCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJfQorCisJCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0Lm1lbS5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9tZW1fdCAqbWVtID0KKwkJCQkoY2ZnLT5tZW0ubndpbikgPyAmY2ZnLT5tZW0gOiAmZGZsdC5tZW07CisJCQlyZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNOworCQkJcmVxLkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKKwkJCXJlcS5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOworCQkJcmVxLlNpemUgPSBtZW0tPndpblswXS5sZW47CisJCQlpZiAocmVxLlNpemUgPCAweDEwMDApCisJCQkJcmVxLlNpemUgPSAweDEwMDA7CisJCQlyZXEuQWNjZXNzU3BlZWQgPSAwOworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQkJbWFwLlBhZ2UgPSAwOworCQkJbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7CisJCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtYXApKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJfQorCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJICAgICAgbmV4dF9lbnRyeToKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKSB7CisJCQljc19lcnJvcihsaW5rLCBHZXROZXh0VHVwbGUsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisJfQorCisJLyoKKwkgICBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhCisJICAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCisJICAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KKwkgKi8KKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKSAhPSAwKSB7CisJCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBsYXN0X3JldCk7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkJfQorCisJLyoKKwkgICBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAorCSAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKKwkgICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgorCSAqLworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisKKwkvKgorCSAgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCisJICAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2LgorCSAqLworCXNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCAibmlfZGFxX2RpbzI0Iik7CisJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CisKKwkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeCIsCisJCWRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKKwkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQlsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMyKQorCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCisJCQlsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKKwlpZiAobGluay0+d2luKQorCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS5CYXNlLAorCQkJcmVxLkJhc2UgKyByZXEuU2l6ZSAtIDEpOworCXByaW50aygiXG4iKTsKKworCXJldHVybjsKKworICAgICAgY3NfZmFpbGVkOgorCXByaW50ayhLRVJOX0lORk8gIkZhbGxvIik7CisJZGlvMjRfcmVsZWFzZShsaW5rKTsKKworfQkJCQkvKiBkaW8yNF9jb25maWcgKi8KKworc3RhdGljIHZvaWQgZGlvMjRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAiZGlvMjRfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CQkJCS8qIGRpbzI0X3JlbGVhc2UgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGUgY2FyZCBzdGF0dXMgZXZlbnQgaGFuZGxlci4gIE1vc3RseSwgdGhpcyBzY2hlZHVsZXMgb3RoZXIKKyAgICBzdHVmZiB0byBydW4gYWZ0ZXIgYW4gZXZlbnQgaXMgcmVjZWl2ZWQuCisKKyAgICBXaGVuIGEgQ0FSRF9SRU1PVkFMIGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBpbW1lZGlhdGVseSBzZXQgYQorICAgIHByaXZhdGUgZmxhZyB0byBibG9jayBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBkZXZpY2UuICBBbGwgdGhlCisgICAgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgYWNjZXNzIHRoZSBkZXZpY2Ugc2hvdWxkIGNoZWNrIHRoaXMgZmxhZworICAgIHRvIG1ha2Ugc3VyZSB0aGUgY2FyZCBpcyBzdGlsbCBwcmVzZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkaW8yNF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCXJldHVybiAwOworfQkJCQkvKiBkaW8yNF9jc19zdXNwZW5kICovCisKK3N0YXRpYyBpbnQgZGlvMjRfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJbG9jYWwtPnN0b3AgPSAwOworCXJldHVybiAwOworfQkJCQkvKiBkaW8yNF9jc19yZXN1bWUgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBkaW8yNF9jc19pZHNbXSA9IHsKKwkvKiBOLkIuIFRoZXNlIElEcyBzaG91bGQgbWF0Y2ggdGhvc2UgaW4gZGlvMjRfYm9hcmRzICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDQ3NWMpLAkvKiBkYXFjYXJkLWRpbzI0ICovCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgZGlvMjRfY3NfaWRzKTsKKworc3RydWN0IHBjbWNpYV9kcml2ZXIgZGlvMjRfY3NfZHJpdmVyID0geworCS5wcm9iZSA9IGRpbzI0X2NzX2F0dGFjaCwKKwkucmVtb3ZlID0gZGlvMjRfY3NfZGV0YWNoLAorCS5zdXNwZW5kID0gZGlvMjRfY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gZGlvMjRfY3NfcmVzdW1lLAorCS5pZF90YWJsZSA9IGRpbzI0X2NzX2lkcywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZGlvMjRfY3Modm9pZCkKK3sKKwlwcmludGsoIm5pX2RhcV9kaW8yNDogSE9MQSBTT1kgWU8hXG4iKTsKKwlERUJVRygwLCAiJXNcbiIsIHZlcnNpb24pOworCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmRpbzI0X2NzX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2RpbzI0X2NzKHZvaWQpCit7CisJREVCVUcoMCwgIm5pX2RpbzI0OiB1bmxvYWRpbmdcbiIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmZGlvMjRfY3NfZHJpdmVyKTsKK30KKworaW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2RpbzI0X2NzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RpbzI0KTsKK30KKwordm9pZCBfX2V4aXQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlleGl0X2RpbzI0X2NzKCk7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGlvMjQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg5OGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMKQEAgLTAsMCArMSwyMDA1IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMKKyAgICBEcml2ZXIgZm9yIE5hdGlvbmFsIEluc3RydW1lbnRzIExhYi1QQyBzZXJpZXMgYm9hcmRzIGFuZCBjb21wYXRpYmxlcworICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogbmlfbGFicGMKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBMYWItUEMgKCYgY29tcGF0aWJsZXMpCitBdXRob3I6IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gTGFiLVBDLTEyMDAgKGxhYnBjLTEyMDApLAorICBMYWItUEMtMTIwMEFJIChsYWJwYy0xMjAwYWkpLCBMYWItUEMrIChsYWItcGMrKSwgUENJLTEyMDAgKG5pX2xhYnBjKQorU3RhdHVzOiB3b3JrcworCitUZXN0ZWQgd2l0aCBsYWItcGMtMTIwMC4gIEZvciB0aGUgb2xkZXIgTGFiLVBDKywgbm90IGFsbCBpbnB1dCByYW5nZXMKK2FuZCBhbmFsb2cgcmVmZXJlbmNlcyB3aWxsIHdvcmssIHRoZSBhdmFpbGFibGUgcmFuZ2VzL2FyZWZzIHdpbGwKK2RlcGVuZCBvbiBob3cgeW91IGhhdmUgY29uZmlndXJlZCB0aGUganVtcGVycyBvbiB5b3VyIGJvYXJkCisoc2VlIHlvdXIgb3duZXIncyBtYW51YWwpLgorCitLZXJuZWwtbGV2ZWwgSVNBIHBsdWctYW5kLXBsYXkgc3VwcG9ydCBmb3IgdGhlIGxhYi1wYy0xMjAwCitib2FyZHMgaGFzIG5vdAoreWV0IGJlZW4gYWRkZWQgdG8gdGhlIGRyaXZlciwgbWFpbmx5IGR1ZSB0byB0aGUgZmFjdCB0aGF0CitJIGRvbid0IGtub3cgdGhlIGRldmljZSBpZCBudW1iZXJzLiAgSWYgeW91IGhhdmUgb25lCitvZiB0aGVzZSBib2FyZHMsCitwbGVhc2UgZmlsZSBhIGJ1ZyByZXBvcnQgYXQgaHR0cHM6Ly9idWdzLmNvbWVkaS5vcmcvCitzbyBJIGNhbiBnZXQgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIHlvdS4KKworVGhlIDEyMDAgc2VyaWVzIGJvYXJkcyBoYXZlIG9uYm9hcmQgY2FsaWJyYXRpb24gZGFjcyBmb3IgY29ycmVjdGluZworYW5hbG9nIGlucHV0L291dHB1dCBvZmZzZXRzIGFuZCBnYWlucy4gIFRoZSBwcm9wZXIgc2V0dGluZ3MgZm9yIHRoZXNlCitjYWxkYWNzIGFyZSBzdG9yZWQgb24gdGhlIGJvYXJkJ3MgZWVwcm9tLiAgVG8gcmVhZCB0aGUgY2FsZGFjIHZhbHVlcworZnJvbSB0aGUgZWVwcm9tIGFuZCBzdG9yZSB0aGVtIGludG8gYSBmaWxlIHRoYXQgY2FuIGJlIHRoZW4gYmUgdXNlZCBieQorY29tZWRpbGliLCB1c2UgdGhlIGNvbWVkaV9jYWxpYnJhdGUgcHJvZ3JhbS4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gSVNBIGJvYXJkczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSAob3B0aW9uYWwsIHJlcXVpcmVkIGZvciB0aW1lZCBvciBleHRlcm5hbGx5IHRyaWdnZXJlZCBjb252ZXJzaW9ucykKKyAgWzJdIC0gRE1BIGNoYW5uZWwgKG9wdGlvbmFsKQorCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBQQ0kgYm9hcmRzOgorICBbMF0gLSBidXMgKG9wdGlvbmFsKQorICBbMV0gLSBzbG90IChvcHRpb25hbCkKKworVGhlIExhYi1wYysgaGFzIHF1aXJreSBjaGFubGlzdCByZXF1aXJlbWVudHMKK3doZW4gc2Nhbm5pbmcgbXVsdGlwbGUgY2hhbm5lbHMuICBNdWx0aXBsZSBjaGFubmVsIHNjYW4KK3NlcXVlbmNlIG11c3Qgc3RhcnQgYXQgaGlnaGVzdCBjaGFubmVsLCB0aGVuIGRlY3JlbWVudCBkb3duIHRvCitjaGFubmVsIDAuICBUaGUgcmVzdCBvZiB0aGUgY2FyZHMgY2FuIHNjYW4gZG93biBsaWtlIGxhYi1wYysgb3Igc2NhbgordXAgZnJvbSBjaGFubmVsIHplcm8uICBDaGFubGlzdHMgY29uc2lzdGluZyBvZiBhbGwgb25lIGNoYW5uZWwKK2FyZSBhbHNvIGxlZ2FsLCBhbmQgYWxsb3cgeW91IHRvIHBhY2UgY29udmVyc2lvbnMgaW4gYnVyc3RzLgorCisqLworCisvKgorCitOSSBtYW51YWxzOgorMzQxMzA5YSAobGFicGMtMTIwMCByZWdpc3RlciBtYW51YWwpCiszNDA5MTRhIChwY2ktMTIwMCkKKzMyMDUwMmIgKGxhYi1wYyspCisKKyovCisKKyN1bmRlZiBMQUJQQ19ERUJVRworLy8jZGVmaW5lIExBQlBDX0RFQlVHICAgLy8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAibWl0ZS5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorI2luY2x1ZGUgIm5pX2xhYnBjLmgiCisKKyNkZWZpbmUgRFJWX05BTUUgIm5pX2xhYnBjIgorCisjZGVmaW5lIExBQlBDX1NJWkUgICAgICAgICAgIDMyCS8vIHNpemUgb2YgaW8gcmVnaW9uIHVzZWQgYnkgYm9hcmQKKyNkZWZpbmUgTEFCUENfVElNRVJfQkFTRSAgICAgICAgICAgIDUwMAkvLyAyIE1IeiBtYXN0ZXIgY2xvY2sKKworLyogUmVnaXN0ZXJzIGZvciB0aGUgbGFiLXBjKyAqLworCisvL3dyaXRlLW9ubHkgcmVnaXN0ZXJzCisjZGVmaW5lIENPTU1BTkQxX1JFRwkweDAKKyNkZWZpbmUgICBBRENfR0FJTl9NQVNLCSgweDcgPDwgNCkKKyNkZWZpbmUgICBBRENfQ0hBTl9CSVRTKHgpCSgoeCkgJiAweDcpCisjZGVmaW5lICAgQURDX1NDQU5fRU5fQklUCTB4ODAJLy8gZW5hYmxlcyBtdWx0aSBjaGFubmVsIHNjYW5zCisjZGVmaW5lIENPTU1BTkQyX1JFRwkweDEKKyNkZWZpbmUgICBQUkVUUklHX0JJVAkweDEJLy8gZW5hYmxlIHByZXRyaWdnZXJpbmcgKHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBTV1RSSUcpCisjZGVmaW5lICAgSFdUUklHX0JJVAkweDIJLy8gZW5hYmxlIHBhY2VkIGNvbnZlcnNpb25zIG9uIGV4dGVybmFsIHRyaWdnZXIKKyNkZWZpbmUgICBTV1RSSUdfQklUCTB4NAkvLyBlbmFibGUgcGFjZWQgY29udmVyc2lvbnMKKyNkZWZpbmUgICBDQVNDQURFX0JJVAkweDgJLy8gdXNlIHR3byBjYXNjYWRlZCBjb3VudGVycyBmb3IgcGFjaW5nCisjZGVmaW5lICAgREFDX1BBQ0VEX0JJVChjaGFubmVsKQkoMHg0MCA8PCAoKGNoYW5uZWwpICYgMHgxKSkKKyNkZWZpbmUgQ09NTUFORDNfUkVHCTB4MgorI2RlZmluZSAgIERNQV9FTl9CSVQJMHgxCS8vIGVuYWJsZSBkbWEgdHJhbnNmZXJzCisjZGVmaW5lICAgRElPX0lOVFJfRU5fQklUCTB4MgkvLyBlbmFibGUgaW50ZXJydXB0cyBmb3IgODI1NQorI2RlZmluZSAgIERNQVRDX0lOVFJfRU5fQklUCTB4NAkvLyBlbmFibGUgZG1hIHRlcm1pbmFsIGNvdW50IGludGVycnVwdAorI2RlZmluZSAgIFRJTUVSX0lOVFJfRU5fQklUCTB4OAkvLyBlbmFibGUgdGltZXIgaW50ZXJydXB0CisjZGVmaW5lICAgRVJSX0lOVFJfRU5fQklUCTB4MTAJLy8gZW5hYmxlIGVycm9yIGludGVycnVwdAorI2RlZmluZSAgIEFEQ19GTkVfSU5UUl9FTl9CSVQJMHgyMAkvLyBlbmFibGUgZmlmbyBub3QgZW1wdHkgaW50ZXJydXB0CisjZGVmaW5lIEFEQ19DT05WRVJUX1JFRwkweDMKKyNkZWZpbmUgREFDX0xTQl9SRUcoY2hhbm5lbCkJKDB4NCArIDIgKiAoKGNoYW5uZWwpICYgMHgxKSkKKyNkZWZpbmUgREFDX01TQl9SRUcoY2hhbm5lbCkJKDB4NSArIDIgKiAoKGNoYW5uZWwpICYgMHgxKSkKKyNkZWZpbmUgQURDX0NMRUFSX1JFRwkweDgKKyNkZWZpbmUgRE1BVENfQ0xFQVJfUkVHCTB4YQorI2RlZmluZSBUSU1FUl9DTEVBUl9SRUcJMHhjCisjZGVmaW5lIENPTU1BTkQ2X1JFRwkweGUJLy8gMTIwMCBib2FyZHMgb25seQorI2RlZmluZSAgIEFEQ19DT01NT05fQklUCTB4MQkvLyBzZWxlY3QgZ3JvdW5kIG9yIGNvbW1vbi1tb2RlIHJlZmVyZW5jZQorI2RlZmluZSAgIEFEQ19VTklQX0JJVAkweDIJLy8gYWRjIHVuaXBvbGFyCisjZGVmaW5lICAgREFDX1VOSVBfQklUKGNoYW5uZWwpCSgweDQgPDwgKChjaGFubmVsKSAmIDB4MSkpCS8vIGRhYyB1bmlwb2xhcgorI2RlZmluZSAgIEFEQ19GSEZfSU5UUl9FTl9CSVQJMHgyMAkvLyBlbmFibGUgZmlmbyBoYWxmIGZ1bGwgaW50ZXJydXB0CisjZGVmaW5lICAgQTFfSU5UUl9FTl9CSVQJMHg0MAkvLyBlbmFibGUgaW50ZXJydXB0IG9uIGVuZCBvZiBoYXJkd2FyZSBjb3VudAorI2RlZmluZSAgIEFEQ19TQ0FOX1VQX0JJVCAweDgwCS8vIHNjYW4gdXAgZnJvbSBjaGFubmVsIHplcm8gaW5zdGVhZCBvZiBkb3duIHRvIHplcm8KKyNkZWZpbmUgQ09NTUFORDRfUkVHCTB4ZgorI2RlZmluZSAgIElOVEVSVkFMX1NDQU5fRU5fQklUCTB4MQkvLyBlbmFibGVzICdpbnRlcnZhbCcgc2Nhbm5pbmcKKyNkZWZpbmUgICBFWFRfU0NBTl9FTl9CSVQJMHgyCS8vIGVuYWJsZXMgZXh0ZXJuYWwgc2lnbmFsIG9uIGNvdW50ZXIgYjEgb3V0cHV0IHRvIHRyaWdnZXIgc2NhbgorI2RlZmluZSAgIEVYVF9DT05WRVJUX09VVF9CSVQJMHg0CS8vIGNob29zZXMgZGlyZWN0aW9uIChvdXRwdXQgb3IgaW5wdXQpIGZvciBFWFRDT05WKiBsaW5lCisjZGVmaW5lICAgQURDX0RJRkZfQklUCTB4OAkvLyBjaG9vc2VzIGRpZmZlcmVudGlhbCBpbnB1dHMgZm9yIGFkYyAoaW4gY29uanVuY3Rpb24gd2l0aCBib2FyZCBqdW1wZXIpCisjZGVmaW5lICAgRVhUX0NPTlZFUlRfRElTQUJMRV9CSVQJMHgxMAorI2RlZmluZSBDT01NQU5ENV9SRUcJMHgxYwkvLyAxMjAwIGJvYXJkcyBvbmx5LCBjYWxpYnJhdGlvbiBzdHVmZgorI2RlZmluZSAgIEVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUCTB4NAkvLyBlbmFibGUgZWVwcm9tIGZvciB3cml0ZQorI2RlZmluZSAgIERJVEhFUl9FTl9CSVQJMHg4CS8vIGVuYWJsZSBkaXRoZXJpbmcKKyNkZWZpbmUgICBDQUxEQUNfTE9BRF9CSVQJMHgxMAkvLyBsb2FkIGNhbGlicmF0aW9uIGRhYworI2RlZmluZSAgIFNDTE9DS19CSVQJMHgyMAkvLyBzZXJpYWwgY2xvY2sgLSByaXNpbmcgZWRnZSB3cml0ZXMsIGZhbGxpbmcgZWRnZSByZWFkcworI2RlZmluZSAgIFNEQVRBX0JJVAkweDQwCS8vIHNlcmlhbCBkYXRhIGJpdCBmb3Igd3JpdGluZyB0byBlZXByb20gb3IgY2FsaWJyYXRpb24gZGFjcworI2RlZmluZSAgIEVFUFJPTV9FTl9CSVQJMHg4MAkvLyBlbmFibGUgZWVwcm9tIGZvciByZWFkL3dyaXRlCisjZGVmaW5lIElOVEVSVkFMX0NPVU5UX1JFRwkweDFlCisjZGVmaW5lIElOVEVSVkFMX0xPQURfUkVHCTB4MWYKKyNkZWZpbmUgICBJTlRFUlZBTF9MT0FEX0JJVFMJMHgxCisKKy8vIHJlYWQtb25seSByZWdpc3RlcnMKKyNkZWZpbmUgU1RBVFVTMV9SRUcJMHgwCisjZGVmaW5lICAgREFUQV9BVkFJTF9CSVQJMHgxCS8vIGRhdGEgaXMgYXZhaWxhYmxlIGluIGZpZm8KKyNkZWZpbmUgICBPVkVSUlVOX0JJVAkweDIJLy8gb3ZlcnJ1biBoYXMgb2NjdXJyZWQKKyNkZWZpbmUgICBPVkVSRkxPV19CSVQJMHg0CS8vIGZpZm8gb3ZlcmZsb3cKKyNkZWZpbmUgICBUSU1FUl9CSVQJMHg4CS8vIHRpbWVyIGludGVycnVwdCBoYXMgb2NjdXJlZAorI2RlZmluZSAgIERNQVRDX0JJVAkweDEwCS8vIGRtYSB0ZXJtaW5hbCBjb3VudCBoYXMgb2NjdXJlZAorI2RlZmluZSAgIEVYVF9UUklHX0JJVAkweDQwCS8vIGV4dGVybmFsIHRyaWdnZXIgaGFzIG9jY3VyZWQKKyNkZWZpbmUgU1RBVFVTMl9SRUcJMHgxZAkvLyAxMjAwIGJvYXJkcyBvbmx5CisjZGVmaW5lICAgRUVQUk9NX09VVF9CSVQJMHgxCS8vIHByb2dyYW1tYWJsZSBlZXByb20gc2VyaWFsIG91dHB1dAorI2RlZmluZSAgIEExX1RDX0JJVAkweDIJLy8gY291bnRlciBBMSB0ZXJtaW5hbCBjb3VudAorI2RlZmluZSAgIEZOSEZfQklUCTB4NAkvLyBmaWZvIG5vdCBoYWxmIGZ1bGwKKyNkZWZpbmUgQURDX0ZJRk9fUkVHCTB4YQorCisjZGVmaW5lIERJT19CQVNFX1JFRwkweDEwCisjZGVmaW5lIENPVU5URVJfQV9CQVNFX1JFRwkweDE0CisjZGVmaW5lIENPVU5URVJfQV9DT05UUk9MX1JFRwkoQ09VTlRFUl9BX0JBU0VfUkVHICsgMHgzKQorI2RlZmluZSAgIElOSVRfQTBfQklUUwkweDE0CS8vIGNoZWNrIG1vZGVzIHB1dCBjb252ZXJzaW9uIHBhY2VyIG91dHB1dCBpbiBoYXJtbGVzcyBzdGF0ZSAoYTAgbW9kZSAyKQorI2RlZmluZSAgIElOSVRfQTFfQklUUwkweDcwCS8vIHB1dCBoYXJkd2FyZSBjb252ZXJzaW9uIGNvdW50ZXIgb3V0cHV0IGluIGhhcm1sZXNzIHN0YXRlIChhMSBtb2RlIDApCisjZGVmaW5lIENPVU5URVJfQl9CQVNFX1JFRwkweDE4CisKK3N0YXRpYyBpbnQgbGFicGNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbGFicGNfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGlycXJldHVybl90IGxhYnBjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgbGFicGNfZHJhaW5fZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBsYWJwY19kcmFpbl9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgaGFuZGxlX2lzYV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgbGFicGNfZHJhaW5fZHJlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBsYWJwY19haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBsYWJwY19haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGxhYnBjX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGxhYnBjX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGxhYnBjX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGxhYnBjX2NhbGliX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBsYWJwY19jYWxpYl93cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGxhYnBjX2VlcHJvbV9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfZWVwcm9tX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfc3VnZ2VzdF90cmFuc2Zlcl9zaXplKHN0cnVjdCBjb21lZGlfY21kIGNtZCk7CitzdGF0aWMgdm9pZCBsYWJwY19hZGNfdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBpbnQgbGFicGNfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgaW50IGJ1cywgaW50IHNsb3QpOworI2VuZGlmCitzdGF0aWMgaW50IGxhYnBjX2Rpb19tZW1fY2FsbGJhY2soaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLAorCXVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGxhYnBjX3NlcmlhbF9vdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCB2YWx1ZSwKKwl1bnNpZ25lZCBpbnQgbnVtX2JpdHMpOworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19zZXJpYWxfaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19lZXByb21fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgYWRkcmVzcyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX2VlcHJvbV9yZWFkX3N0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX2VlcHJvbV93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgYWRkcmVzcywgdW5zaWduZWQgaW50IHZhbHVlKTsKK3N0YXRpYyB2b2lkIHdyaXRlX2NhbGRhYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKTsKKworZW51bSBzY2FuX21vZGUgeworCU1PREVfU0lOR0xFX0NIQU4sCisJTU9ERV9TSU5HTEVfQ0hBTl9JTlRFUlZBTCwKKwlNT0RFX01VTFRfQ0hBTl9VUCwKKwlNT0RFX01VTFRfQ0hBTl9ET1dOLAorfTsKKworLy9hbmFsb2cgaW5wdXQgcmFuZ2VzCisjZGVmaW5lIE5VTV9MQUJQQ19QTFVTX0FJX1JBTkdFUyAxNgorLy8gaW5kaWNhdGVzIHVuaXBvbGFyIHJhbmdlcworc3RhdGljIGNvbnN0IGludCBsYWJwY19wbHVzX2lzX3VuaXBvbGFyW05VTV9MQUJQQ19QTFVTX0FJX1JBTkdFU10gPSB7CisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTEsCisJMSwKKwkxLAorCTEsCisJMSwKKwkxLAorCTEsCisJMSwKK307CisKKy8vIG1hcCByYW5nZSBpbmRleCB0byBnYWluIGJpdHMKK3N0YXRpYyBjb25zdCBpbnQgbGFicGNfcGx1c19haV9nYWluX2JpdHNbTlVNX0xBQlBDX1BMVVNfQUlfUkFOR0VTXSA9IHsKKwkweDAwLAorCTB4MTAsCisJMHgyMCwKKwkweDMwLAorCTB4NDAsCisJMHg1MCwKKwkweDYwLAorCTB4NzAsCisJMHgwMCwKKwkweDEwLAorCTB4MjAsCisJMHgzMCwKKwkweDQwLAorCTB4NTAsCisJMHg2MCwKKwkweDcwLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9sYWJwY19wbHVzX2FpID0geworCU5VTV9MQUJQQ19QTFVTX0FJX1JBTkdFUywKKwl7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoNCksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMjUpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDgpLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIpLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuNSksCisJCQlVTklfUkFOR0UoMC4yKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQl9Cit9OworCisjZGVmaW5lIE5VTV9MQUJQQ18xMjAwX0FJX1JBTkdFUyAxNAorLy8gaW5kaWNhdGVzIHVuaXBvbGFyIHJhbmdlcworY29uc3QgaW50IGxhYnBjXzEyMDBfaXNfdW5pcG9sYXJbTlVNX0xBQlBDXzEyMDBfQUlfUkFOR0VTXSA9IHsKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTEsCisJMSwKKwkxLAorCTEsCisJMSwKKwkxLAorCTEsCit9OworCisvLyBtYXAgcmFuZ2UgaW5kZXggdG8gZ2FpbiBiaXRzCitjb25zdCBpbnQgbGFicGNfMTIwMF9haV9nYWluX2JpdHNbTlVNX0xBQlBDXzEyMDBfQUlfUkFOR0VTXSA9IHsKKwkweDAwLAorCTB4MjAsCisJMHgzMCwKKwkweDQwLAorCTB4NTAsCisJMHg2MCwKKwkweDcwLAorCTB4MDAsCisJMHgyMCwKKwkweDMwLAorCTB4NDAsCisJMHg1MCwKKwkweDYwLAorCTB4NzAsCit9OworY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbGFicGNfMTIwMF9haSA9IHsKKwlOVU1fTEFCUENfMTIwMF9BSV9SQU5HRVMsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjUpLAorCQkJVU5JX1JBTkdFKDAuMiksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJfQorfTsKKworLy9hbmFsb2cgb3V0cHV0IHJhbmdlcworI2RlZmluZSBBT19SQU5HRV9JU19VTklQT0xBUiAweDEKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9sYWJwY19hbyA9IHsKKwkyLAorCXsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCX0KK307CisKKy8qIGZ1bmN0aW9ucyB0aGF0IGRvIGluYi9vdXRiIGFuZCByZWFkYi93cml0ZWIgc28gd2UgY2FuIHVzZQorICogZnVuY3Rpb24gcG9pbnRlcnMgdG8gZGVjaWRlIHdoaWNoIHRvIHVzZSAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbGFicGNfaW5iKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlyZXR1cm4gaW5iKGFkZHJlc3MpOworfQorc3RhdGljIGlubGluZSB2b2lkIGxhYnBjX291dGIodW5zaWduZWQgaW50IGJ5dGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlvdXRiKGJ5dGUsIGFkZHJlc3MpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbGFicGNfcmVhZGIodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiByZWFkYigodm9pZCAqKWFkZHJlc3MpOworfQorc3RhdGljIGlubGluZSB2b2lkIGxhYnBjX3dyaXRlYih1bnNpZ25lZCBpbnQgYnl0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXdyaXRlYihieXRlLCAodm9pZCAqKWFkZHJlc3MpOworfQorCitzdGF0aWMgY29uc3QgbGFicGNfYm9hcmQgbGFicGNfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJsYWItcGMtMTIwMCIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYnVzdHlwZToJaXNhX2J1c3R5cGUsCisJICAgICAgcmVnaXN0ZXJfbGF5b3V0OmxhYnBjXzEyMDBfbGF5b3V0LAorCSAgICAgIGhhc19hbzoJMSwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomcmFuZ2VfbGFicGNfMTIwMF9haSwKKwkgICAgICBhaV9yYW5nZV9jb2RlOmxhYnBjXzEyMDBfYWlfZ2Fpbl9iaXRzLAorCSAgICAgIGFpX3JhbmdlX2lzX3VuaXBvbGFyOmxhYnBjXzEyMDBfaXNfdW5pcG9sYXIsCisJICAgICAgYWlfc2Nhbl91cDoxLAorCSAgICAgIG1lbW9yeV9tYXBwZWRfaW86MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImxhYi1wYy0xMjAwYWkiLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGJ1c3R5cGU6CWlzYV9idXN0eXBlLAorCSAgICAgIHJlZ2lzdGVyX2xheW91dDpsYWJwY18xMjAwX2xheW91dCwKKwkgICAgICBoYXNfYW86CTAsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjXzEyMDBfYWksCisJICAgICAgYWlfcmFuZ2VfY29kZTpsYWJwY18xMjAwX2FpX2dhaW5fYml0cywKKwkgICAgICBhaV9yYW5nZV9pc191bmlwb2xhcjpsYWJwY18xMjAwX2lzX3VuaXBvbGFyLAorCSAgICAgIGFpX3NjYW5fdXA6MSwKKwkgICAgICBtZW1vcnlfbWFwcGVkX2lvOjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJsYWItcGMrIiwKKwkgICAgICBhaV9zcGVlZDoxMjAwMCwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICByZWdpc3Rlcl9sYXlvdXQ6bGFicGNfcGx1c19sYXlvdXQsCisJICAgICAgaGFzX2FvOgkxLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZyYW5nZV9sYWJwY19wbHVzX2FpLAorCSAgICAgIGFpX3JhbmdlX2NvZGU6bGFicGNfcGx1c19haV9nYWluX2JpdHMsCisJICAgICAgYWlfcmFuZ2VfaXNfdW5pcG9sYXI6bGFicGNfcGx1c19pc191bmlwb2xhciwKKwkgICAgICBhaV9zY2FuX3VwOjAsCisJICAgICAgbWVtb3J5X21hcHBlZF9pbzowLAorCQl9LAorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCQluYW1lOgkicGNpLTEyMDAiLAorCQlkZXZpY2VfaWQ6MHgxNjEsCisJCWFpX3NwZWVkOjEwMDAwLAorCQlidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkJcmVnaXN0ZXJfbGF5b3V0OmxhYnBjXzEyMDBfbGF5b3V0LAorCQloYXNfYW86CTEsCisJCWFpX3JhbmdlX3RhYmxlOiZyYW5nZV9sYWJwY18xMjAwX2FpLAorCQlhaV9yYW5nZV9jb2RlOmxhYnBjXzEyMDBfYWlfZ2Fpbl9iaXRzLAorCQlhaV9yYW5nZV9pc191bmlwb2xhcjpsYWJwY18xMjAwX2lzX3VuaXBvbGFyLAorCQlhaV9zY2FuX3VwOjEsCisJCW1lbW9yeV9tYXBwZWRfaW86MSwKKwkJfSwKKwkvLyBkdW1teSBlbnRyeSBzbyBwY2kgYm9hcmQgd29ya3Mgd2hlbiBjb21lZGlfY29uZmlnIGlzIHBhc3NlZCBkcml2ZXIgbmFtZQorCXsKKwkJLm5hbWUgPSBEUlZfTkFNRSwKKwkJLmJ1c3R5cGUgPSBwY2lfYnVzdHlwZSwKKwkJfSwKKyNlbmRpZgorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChsYWJwY19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgY29uc3QgaW50IGRtYV9idWZmZXJfc2l6ZSA9IDB4ZmYwMDsJLy8gc2l6ZSBpbiBieXRlcyBvZiBkbWEgYnVmZmVyCitzdGF0aWMgY29uc3QgaW50IHNhbXBsZV9zaXplID0gMjsJLy8gMiBieXRlcyBwZXIgc2FtcGxlCisKKyNkZWZpbmUgZGV2cHJpdiAoKGxhYnBjX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbGFicGMgPSB7CisJLmRyaXZlcl9uYW1lID0gRFJWX05BTUUsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5hdHRhY2ggPSBsYWJwY19hdHRhY2gsCisJLmRldGFjaCA9IGxhYnBjX2NvbW1vbl9kZXRhY2gsCisJLm51bV9uYW1lcyA9IHNpemVvZihsYWJwY19ib2FyZHMpIC8gc2l6ZW9mKGxhYnBjX2JvYXJkKSwKKwkuYm9hcmRfbmFtZSA9ICZsYWJwY19ib2FyZHNbMF0ubmFtZSwKKwkub2Zmc2V0ID0gc2l6ZW9mKGxhYnBjX2JvYXJkKSwKK307CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGxhYnBjX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxNjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGxhYnBjX3BjaV90YWJsZSk7CisjZW5kaWYgLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKworc3RhdGljIGlubGluZSBpbnQgbGFicGNfY291bnRlcl9sb2FkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsCisJdW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlpZiAodGhpc2JvYXJkLT5tZW1vcnlfbWFwcGVkX2lvKQorCQlyZXR1cm4gaTgyNTRfbW1fbG9hZCgodm9pZCAqKWJhc2VfYWRkcmVzcywgMCwgY291bnRlcl9udW1iZXIsCisJCQljb3VudCwgbW9kZSk7CisJZWxzZQorCQlyZXR1cm4gaTgyNTRfbG9hZChiYXNlX2FkZHJlc3MsIDAsIGNvdW50ZXJfbnVtYmVyLCBjb3VudCwgbW9kZSk7Cit9CisKK2ludCBsYWJwY19jb21tb25fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIGlvYmFzZSwKKwl1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZG1hX2NoYW4pCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3MsIGlzcl9mbGFnczsKKwlzaG9ydCBsc2IsIG1zYjsKKworCXByaW50aygiY29tZWRpJWQ6IG5pX2xhYnBjOiAlcywgaW8gMHglbHgiLCBkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsCisJCWlvYmFzZSk7CisJaWYgKGlycSkgeworCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKKwl9CisJaWYgKGRtYV9jaGFuKSB7CisJCXByaW50aygiLCBkbWEgJXUiLCBkbWFfY2hhbik7CisJfQorCXByaW50aygiXG4iKTsKKworCWlmIChpb2Jhc2UgPT0gMCkgeworCQlwcmludGsoImlvIGJhc2UgYWRkcmVzcyBpcyB6ZXJvIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvLyByZXF1ZXN0IGlvIHJlZ2lvbnMgZm9yIGlzYSBib2FyZHMKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IGlzYV9idXN0eXBlKSB7CisJCS8qIGNoZWNrIGlmIGlvIGFkZHJlc3NlcyBhcmUgYXZhaWxhYmxlICovCisJCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBMQUJQQ19TSVpFLAorCQkJCWRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSkpIHsKKwkJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlpZiAodGhpc2JvYXJkLT5tZW1vcnlfbWFwcGVkX2lvKSB7CisJCWRldnByaXYtPnJlYWRfYnl0ZSA9IGxhYnBjX3JlYWRiOworCQlkZXZwcml2LT53cml0ZV9ieXRlID0gbGFicGNfd3JpdGViOworCX0gZWxzZSB7CisJCWRldnByaXYtPnJlYWRfYnl0ZSA9IGxhYnBjX2luYjsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZSA9IGxhYnBjX291dGI7CisJfQorCS8vIGluaXRpYWxpemUgYm9hcmQncyBjb21tYW5kIHJlZ2lzdGVycworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMV9SRUcpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDRfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENF9SRUcpOworCWlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCkgeworCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsCisJCQlkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDZfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDZfUkVHKTsKKwl9CisKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlpZiAoaXJxKSB7CisJCWlzcl9mbGFncyA9IDA7CisJCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNpX2J1c3R5cGUpCisJCQlpc3JfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBsYWJwY19pbnRlcnJ1cHQsIGlzcl9mbGFncywKKwkJCQlkcml2ZXJfbGFicGMuZHJpdmVyX25hbWUsIGRldikpIHsKKwkJCXByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWRldi0+aXJxID0gaXJxOworCisJLy8gZ3JhYiBkbWEgY2hhbm5lbAorCWlmIChkbWFfY2hhbiA+IDMpIHsKKwkJcHJpbnRrKCIgaW52YWxpZCBkbWEgY2hhbm5lbCAldVxuIiwgZG1hX2NoYW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGRtYV9jaGFuKSB7CisJCS8vIGFsbG9jYXRlIGRtYSBidWZmZXIKKwkJZGV2cHJpdi0+ZG1hX2J1ZmZlciA9CisJCQlrbWFsbG9jKGRtYV9idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCQlpZiAoZGV2cHJpdi0+ZG1hX2J1ZmZlciA9PSBOVUxMKSB7CisJCQlwcmludGsoIiBmYWlsZWQgdG8gYWxsb2NhdGUgZG1hIGJ1ZmZlclxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlpZiAocmVxdWVzdF9kbWEoZG1hX2NoYW4sIGRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSkpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAldVxuIiwKKwkJCQlkbWFfY2hhbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZwcml2LT5kbWFfY2hhbiA9IGRtYV9jaGFuOworCQlkbWFfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWFfY2hhbiwgRE1BX01PREVfUkVBRCk7CisJCXJlbGVhc2VfZG1hX2xvY2soZG1hX2ZsYWdzKTsKKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDUpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9CisJCVNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OIHwgU0RGX0RJRkYgfAorCQlTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gODsKKwlzLT5sZW5fY2hhbmxpc3QgPSA4OworCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOwkvLyAxMiBiaXQgcmVzb2x1dGlvbgorCXMtPnJhbmdlX3RhYmxlID0gdGhpc2JvYXJkLT5haV9yYW5nZV90YWJsZTsKKwlzLT5kb19jbWQgPSBsYWJwY19haV9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGxhYnBjX2FpX2NtZHRlc3Q7CisJcy0+aW5zbl9yZWFkID0gbGFicGNfYWlfcmluc247CisJcy0+Y2FuY2VsID0gbGFicGNfY2FuY2VsOworCisJLyogYW5hbG9nIG91dHB1dCAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWlmICh0aGlzYm9hcmQtPmhhc19hbykgeworLyogQ291bGQgcHJvdmlkZSBjb21tYW5kIHN1cHBvcnQsIGV4Y2VwdCBpdCBvbmx5IGhhcyBhIG9uZSBzYW1wbGUKKyAqIGhhcmR3YXJlIGJ1ZmZlciBmb3IgYW5hbG9nIG91dHB1dCBhbmQgbm8gdW5kZXJydW4gZmxhZy4gKi8KKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EOworCQlzLT5uX2NoYW4gPSBOVU1fQU9fQ0hBTjsKKwkJcy0+bWF4ZGF0YSA9ICgxIDw8IDEyKSAtIDE7CS8vIDEyIGJpdCByZXNvbHV0aW9uCisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2xhYnBjX2FvOworCQlzLT5pbnNuX3JlYWQgPSBsYWJwY19hb19yaW5zbjsKKwkJcy0+aW5zbl93cml0ZSA9IGxhYnBjX2FvX3dpbnNuOworCQkvKiBpbml0aWFsaXplIGFuYWxvZyBvdXRwdXRzIHRvIGEga25vd24gdmFsdWUgKi8KKwkJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKSB7CisJCQlkZXZwcml2LT5hb192YWx1ZVtpXSA9IHMtPm1heGRhdGEgLyAyOworCQkJbHNiID0gZGV2cHJpdi0+YW9fdmFsdWVbaV0gJiAweGZmOworCQkJbXNiID0gKGRldnByaXYtPmFvX3ZhbHVlW2ldID4+IDgpICYgMHhmZjsKKwkJCWRldnByaXYtPndyaXRlX2J5dGUobHNiLCBkZXYtPmlvYmFzZSArIERBQ19MU0JfUkVHKGkpKTsKKwkJCWRldnByaXYtPndyaXRlX2J5dGUobXNiLCBkZXYtPmlvYmFzZSArIERBQ19NU0JfUkVHKGkpKTsKKwkJfQorCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJLyogODI1NSBkaW8gKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvLyBpZiBib2FyZCB1c2VzIGlvIG1lbW9yeSB3ZSBoYXZlIHRvIGdpdmUgYSBjdXN0b20gY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIDgyNTUgZHJpdmVyCisJaWYgKHRoaXNib2FyZC0+bWVtb3J5X21hcHBlZF9pbykKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIGxhYnBjX2Rpb19tZW1fY2FsbGJhY2ssCisJCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKyBESU9fQkFTRV9SRUcpKTsKKwllbHNlCisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXYtPmlvYmFzZSArIERJT19CQVNFX1JFRyk7CisKKwkvLyBjYWxpYnJhdGlvbiBzdWJkZXZpY2VzIGZvciBib2FyZHMgdGhhdCBoYXZlIG9uZQorCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCWlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJcy0+bl9jaGFuID0gMTY7CisJCXMtPm1heGRhdGEgPSAweGZmOworCQlzLT5pbnNuX3JlYWQgPSBsYWJwY19jYWxpYl9yZWFkX2luc247CisJCXMtPmluc25fd3JpdGUgPSBsYWJwY19jYWxpYl93cml0ZV9pbnNuOworCisJCWZvciAoaSA9IDA7IGkgPCBzLT5uX2NoYW47IGkrKykKKwkJCXdyaXRlX2NhbGRhYyhkZXYsIGksIHMtPm1heGRhdGEgLyAyKTsKKwl9IGVsc2UKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCS8qIEVFUFJPTSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA0OworCWlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfTUVNT1JZOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJCXMtPm5fY2hhbiA9IEVFUFJPTV9TSVpFOworCQlzLT5tYXhkYXRhID0gMHhmZjsKKwkJcy0+aW5zbl9yZWFkID0gbGFicGNfZWVwcm9tX3JlYWRfaW5zbjsKKwkJcy0+aW5zbl93cml0ZSA9IGxhYnBjX2VlcHJvbV93cml0ZV9pbnNuOworCisJCWZvciAoaSA9IDA7IGkgPCBFRVBST01fU0laRTsgaSsrKSB7CisJCQlkZXZwcml2LT5lZXByb21fZGF0YVtpXSA9IGxhYnBjX2VlcHJvbV9yZWFkKGRldiwgaSk7CisJCX0KKyNpZmRlZiBMQUJQQ19ERUJVRworCQlwcmludGsoIiBlZXByb206Iik7CisJCWZvciAoaSA9IDA7IGkgPCBFRVBST01fU0laRTsgaSsrKSB7CisJCQlwcmludGsoIiAlaToweCV4ICIsIGksIGRldnByaXYtPmVlcHJvbV9kYXRhW2ldKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisjZW5kaWYKKwl9IGVsc2UKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhYnBjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisJdW5zaWduZWQgaW50IGlycSA9IDA7CisJdW5zaWduZWQgaW50IGRtYV9jaGFuID0gMDsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWludCByZXR2YWw7CisjZW5kaWYKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRldi0+cHJpdmF0ZSAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKGxhYnBjX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLy8gZ2V0IGJhc2UgYWRkcmVzcywgaXJxIGV0Yy4gYmFzZWQgb24gYnVzdHlwZQorCXN3aXRjaCAodGhpc2JvYXJkLT5idXN0eXBlKSB7CisJY2FzZSBpc2FfYnVzdHlwZToKKwkJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlkbWFfY2hhbiA9IGl0LT5vcHRpb25zWzJdOworCQlicmVhazsKKwljYXNlIHBjaV9idXN0eXBlOgorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJCXJldHZhbCA9IGxhYnBjX2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJcmV0dmFsID0gbWl0ZV9zZXR1cChkZXZwcml2LT5taXRlKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcmV0dmFsOworCQlpb2Jhc2UgPSAodW5zaWduZWQgbG9uZylkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcjsKKwkJaXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CisjZWxzZQorCQlwcmludGsoIiB0aGlzIGRyaXZlciBoYXMgbm90IGJlZW4gYnVpbHQgd2l0aCBQQ0kgc3VwcG9ydC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIHBjbWNpYV9idXN0eXBlOgorCQlwcmludGsoIiB0aGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHBjbWNpYSBjYXJkcywgdXNlIG5pX2xhYnBjX2NzLm9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJidWchIGNvdWxkbid0IGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiBsYWJwY19jb21tb25fYXR0YWNoKGRldiwgaW9iYXNlLCBpcnEsIGRtYV9jaGFuKTsKK30KKworLy8gYWRhcHRlZCBmcm9tIG5pX3BjaW1pbyBmb3IgZmluZGluZyBtaXRlIGJhc2VkIGJvYXJkcyAocGMtMTIwMCkKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIGludCBsYWJwY19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGU7CisJaW50IGk7CisJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgeworCQlpZiAobWl0ZS0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQkvLyBpZiBidXMvc2xvdCBhcmUgc3BlY2lmaWVkIHRoZW4gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGJ1cy9zbG90CisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBtaXRlLT5wY2lkZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgc2xvdCAhPSBQQ0lfU0xPVChtaXRlLT5wY2lkZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgZHJpdmVyX2xhYnBjLm51bV9uYW1lczsgaSsrKSB7CisJCQlpZiAobGFicGNfYm9hcmRzW2ldLmJ1c3R5cGUgIT0gcGNpX2J1c3R5cGUpCisJCQkJY29udGludWU7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbGFicGNfYm9hcmRzW2ldLmRldmljZV9pZCkgeworCQkJCWRldnByaXYtPm1pdGUgPSBtaXRlOworCQkJCS8vIGZpeHVwIGJvYXJkIHBvaW50ZXIsIGluIGNhc2Ugd2Ugd2VyZSB1c2luZyB0aGUgZHVtbXkgIm5pX2xhYnBjIiBlbnRyeQorCQkJCWRldi0+Ym9hcmRfcHRyID0gJmxhYnBjX2JvYXJkc1tpXTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJbWl0ZV9saXN0X2RldmljZXMoKTsKKwlyZXR1cm4gLUVJTzsKK30KKyNlbmRpZgorCitpbnQgbGFicGNfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBuaV9sYWJwYzogZGV0YWNoXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAyKTsKKworCS8qIG9ubHkgZnJlZSBzdHVmZiBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCAqLworCWlmIChkZXZwcml2LT5kbWFfYnVmZmVyKQorCQlrZnJlZShkZXZwcml2LT5kbWFfYnVmZmVyKTsKKwlpZiAoZGV2cHJpdi0+ZG1hX2NoYW4pCisJCWZyZWVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IGlzYV9idXN0eXBlICYmIGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgTEFCUENfU0laRSk7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlpZiAoZGV2cHJpdi0+bWl0ZSkKKwkJbWl0ZV91bnNldHVwKGRldnByaXYtPm1pdGUpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyB2b2lkIGxhYnBjX2NsZWFyX2FkY19maWZvKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWRldnByaXYtPndyaXRlX2J5dGUoMHgxLCBkZXYtPmlvYmFzZSArIEFEQ19DTEVBUl9SRUcpOworCWRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgQURDX0ZJRk9fUkVHKTsKK30KKworc3RhdGljIGludCBsYWJwY19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyAmPSB+U1dUUklHX0JJVCAmIH5IV1RSSUdfQklUICYgflBSRVRSSUdfQklUOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlkZXZwcml2LT5jb21tYW5kM19iaXRzID0gMDsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQzX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDNfUkVHKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBzY2FuX21vZGUgbGFicGNfYWlfc2Nhbl9tb2RlKGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAxKQorCQlyZXR1cm4gTU9ERV9TSU5HTEVfQ0hBTjsKKworCS8qIGNoYW5saXN0IG1heSBiZSBOVUxMIGR1cmluZyBjbWR0ZXN0LiAqLworCWlmIChjbWQtPmNoYW5saXN0ID09IE5VTEwpCisJCXJldHVybiBNT0RFX01VTFRfQ0hBTl9VUDsKKworCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pID09IENSX0NIQU4oY21kLT5jaGFubGlzdFsxXSkpCisJCXJldHVybiBNT0RFX1NJTkdMRV9DSEFOX0lOVEVSVkFMOworCisJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgPCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMV0pKQorCQlyZXR1cm4gTU9ERV9NVUxUX0NIQU5fVVA7CisKKwlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSA+IENSX0NIQU4oY21kLT5jaGFubGlzdFsxXSkpCisJCXJldHVybiBNT0RFX01VTFRfQ0hBTl9ET1dOOworCisJcnRfcHJpbnRrKCJuaV9sYWJwYzogYnVnISB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfYWlfY2hhbmxpc3RfaW52YWxpZChjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgbW9kZSwgY2hhbm5lbCwgcmFuZ2UsIGFyZWYsIGk7CisKKwlpZiAoY21kLT5jaGFubGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCW1vZGUgPSBsYWJwY19haV9zY2FuX21vZGUoY21kKTsKKworCWlmIChtb2RlID09IE1PREVfU0lOR0xFX0NIQU4pCisJCXJldHVybiAwOworCisJaWYgKG1vZGUgPT0gTU9ERV9TSU5HTEVfQ0hBTl9JTlRFUlZBTCkgeworCQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiAweGZmKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJuaV9sYWJwYzogY2hhbmxpc3QgdG9vIGxvbmcgZm9yIHNpbmdsZSBjaGFubmVsIGludGVydmFsIG1vZGVcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwljaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCWFyZWYgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pOworCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBNT0RFX1NJTkdMRV9DSEFOX0lOVEVSVkFMOgorCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gY2hhbm5lbCkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJjaGFubmVsIHNjYW5uaW5nIG9yZGVyIHNwZWNpZmllZCBpbiBjaGFubGlzdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLlxuIik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBNT0RFX01VTFRfQ0hBTl9VUDoKKwkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGkpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiY2hhbm5lbCBzY2FubmluZyBvcmRlciBzcGVjaWZpZWQgaW4gY2hhbmxpc3QgaXMgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS5cbiIpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTU9ERV9NVUxUX0NIQU5fRE9XTjoKKwkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9CisJCQkJY21kLT5jaGFubGlzdF9sZW4gLSBpIC0gMSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJjaGFubmVsIHNjYW5uaW5nIG9yZGVyIHNwZWNpZmllZCBpbiBjaGFubGlzdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLlxuIik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJ0X3ByaW50aygibmlfbGFicGM6IGJ1ZyEgaW4gY2hhbmxpc3QgY2hlY2tcbiIpOworCQkJcmV0dXJuIDE7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSByYW5nZSkgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIHJhbmdlXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkgIT0gYXJlZikgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIHJlZmVyZW5jZVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhYnBjX3VzZV9jb250aW51b3VzX21vZGUoY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfU0lOR0xFX0NIQU4pCisJCXJldHVybiAxOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfYWlfY29udmVydF9wZXJpb2QoY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJcmV0dXJuIDA7CisKKwlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9TSU5HTEVfQ0hBTiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCisJCXJldHVybiBjbWQtPnNjYW5fYmVnaW5fYXJnOworCisJcmV0dXJuIGNtZC0+Y29udmVydF9hcmc7Cit9CisKK3N0YXRpYyB2b2lkIGxhYnBjX3NldF9haV9jb252ZXJ0X3BlcmlvZChzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwgdW5zaWduZWQgaW50IG5zKQoreworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpCisJCXJldHVybjsKKworCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX1NJTkdMRV9DSEFOICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gbnM7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCX0gZWxzZQorCQljbWQtPmNvbnZlcnRfYXJnID0gbnM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfYWlfc2Nhbl9wZXJpb2QoY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUikKKwkJcmV0dXJuIDA7CisKKwlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9TSU5HTEVfQ0hBTiAmJgorCQljbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNtZC0+c2Nhbl9iZWdpbl9hcmc7Cit9CisKK3N0YXRpYyB2b2lkIGxhYnBjX3NldF9haV9zY2FuX3BlcmlvZChzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwgdW5zaWduZWQgaW50IG5zKQoreworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIpCisJCXJldHVybjsKKworCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX1NJTkdMRV9DSEFOICYmCisJCWNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikKKwkJcmV0dXJuOworCisJY21kLT5zY2FuX2JlZ2luX2FyZyA9IG5zOworfQorCitzdGF0aWMgaW50IGxhYnBjX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wLCB0bXAyOworCWludCBzdG9wX21hc2s7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRk9MTE9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwlzdG9wX21hc2sgPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCkKKwkJc3RvcF9tYXNrIHw9IFRSSUdfRVhUOworCWNtZC0+c3RvcF9zcmMgJj0gc3RvcF9tYXNrOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYKKwkJY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwkvLyBjYW4ndCBoYXZlIGV4dGVybmFsIHN0b3AgYW5kIHN0YXJ0IHRyaWdnZXJzIGF0IG9uY2UKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyA9PSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzYm9hcmQtPmFpX3NwZWVkKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc2JvYXJkLT5haV9zcGVlZDsKKwkJCWVycisrOworCQl9CisJfQorCS8vIG1ha2Ugc3VyZSBzY2FuIHRpbWluZyBpcyBub3QgdG9vIGZhc3QKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIgJiYKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQl0aGlzYm9hcmQtPmFpX3NwZWVkICogY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbjsKKwkJCWVycisrOworCQl9CisJfQorCS8vIHN0b3Agc291cmNlCisJc3dpdGNoIChjbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0NPVU5UOgorCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJCS8vIFRSSUdfRVhUIGRvZXNuJ3QgY2FyZSBzaW5jZSBpdCBkb2Vzbid0IHRyaWdnZXIgb2ZmIGEgbnVtYmVyZWQgY2hhbm5lbAorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwl0bXAyID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwlsYWJwY19hZGNfdGltaW5nKGRldiwgY21kKTsKKwlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcgfHwgdG1wMiAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJaWYgKGxhYnBjX2FpX2NoYW5saXN0X2ludmFsaWQoZGV2LCBjbWQpKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhYnBjX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBjaGFubmVsLCByYW5nZSwgYXJlZjsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCWVudW0gdHJhbnNmZXJfdHlwZSB4ZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWRldi0+aXJxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJubyBpcnEgYXNzaWduZWQsIGNhbm5vdCBwZXJmb3JtIGNvbW1hbmQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisKKwkvLyBtYWtlIHN1cmUgYm9hcmQgaXMgZGlzYWJsZWQgYmVmb3JlIHNldHRpbmcgdXAgYXF1aXNpdGlvbgorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRldnByaXYtPmNvbW1hbmQyX2JpdHMgJj0gflNXVFJJR19CSVQgJiB+SFdUUklHX0JJVCAmIH5QUkVUUklHX0JJVDsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQyX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDJfUkVHKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJZGV2cHJpdi0+Y29tbWFuZDNfYml0cyA9IDA7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kM19iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQzX1JFRyk7CisKKwkvLyBpbml0aWFsaXplIHNvZnR3YXJlIGNvbnZlcnNpb24gY291bnQKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmNvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCX0KKwkvLyBzZXR1cCBoYXJkd2FyZSBjb252ZXJzaW9uIGNvdW50ZXIKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQkvLyBsb2FkIGNvdW50ZXIgYTEgd2l0aCBjb3VudCBvZiAzIChwYysgbWFudWFsIHNheXMgdGhpcyBpcyBtaW5pbXVtIGFsbG93ZWQpIHVzaW5nIG1vZGUgMAorCQlyZXQgPSBsYWJwY19jb3VudGVyX2xvYWQoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQV9CQVNFX1JFRywKKwkJCTEsIDMsIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgImVycm9yIGxvYWRpbmcgY291bnRlciBhMSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlCQkJLy8gb3RoZXJ3aXNlLCBqdXN0IHB1dCBhMSBpbiBtb2RlIDAgd2l0aCBubyBjb3VudCB0byBzZXQgaXRzIG91dHB1dCBsb3cKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShJTklUX0ExX0JJVFMsCisJCQlkZXYtPmlvYmFzZSArIENPVU5URVJfQV9DT05UUk9MX1JFRyk7CisKKwkvLyBmaWd1cmUgb3V0IHdoYXQgbWV0aG9kIHdlIHdpbGwgdXNlIHRvIHRyYW5zZmVyIGRhdGEKKwlpZiAoZGV2cHJpdi0+ZG1hX2NoYW4gJiYJLy8gbmVlZCBhIGRtYSBjaGFubmVsIGFsbG9jYXRlZAorCQkvLyBkbWEgdW5zYWZlIGF0IFJUIHByaW9yaXR5LCBhbmQgdG9vIG11Y2ggc2V0dXAgdGltZSBmb3IgVFJJR19XQUtFX0VPUyBmb3IKKwkJKGNtZC0+ZmxhZ3MgJiAoVFJJR19XQUtFX0VPUyB8IFRSSUdfUlQpKSA9PSAwICYmCisJCS8vIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBpc2EgYm9hcmRzCisJCXRoaXNib2FyZC0+YnVzdHlwZSA9PSBpc2FfYnVzdHlwZSkgeworCQl4ZmVyID0gaXNhX2RtYV90cmFuc2ZlcjsKKwl9IGVsc2UgaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0ICYmCS8vIHBjLXBsdXMgaGFzIG5vIGZpZm8taGFsZiBmdWxsIGludGVycnVwdAorCQkvLyB3YWtlLWVuZC1vZi1zY2FuIHNob3VsZCBpbnRlcnJ1cHQgb24gZmlmbyBub3QgZW1wdHkKKwkJKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSA9PSAwICYmCisJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgdGFraW5nIG1vcmUgdGhhbiBqdXN0IGEgZmV3IHBvaW50cworCQkoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UIHx8IGRldnByaXYtPmNvdW50ID4gMjU2KSkgeworCQl4ZmVyID0gZmlmb19oYWxmX2Z1bGxfdHJhbnNmZXI7CisJfSBlbHNlCisJCXhmZXIgPSBmaWZvX25vdF9lbXB0eV90cmFuc2ZlcjsKKwlkZXZwcml2LT5jdXJyZW50X3RyYW5zZmVyID0geGZlcjsKKworCS8vIHNldHVwIGNvbW1hbmQ2IHJlZ2lzdGVyIGZvciAxMjAwIGJvYXJkcworCWlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCkgeworCQkvLyByZWZlcmVuY2UgaW5wdXRzIHRvIGdyb3VuZCBvciBjb21tb24/CisJCWlmIChhcmVmICE9IEFSRUZfR1JPVU5EKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBBRENfQ09NTU9OX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QURDX0NPTU1PTl9CSVQ7CisJCS8vIGJpcG9sYXIgb3IgdW5pcG9sYXIgcmFuZ2U/CisJCWlmICh0aGlzYm9hcmQtPmFpX3JhbmdlX2lzX3VuaXBvbGFyW3JhbmdlXSkKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgfD0gQURDX1VOSVBfQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfVU5JUF9CSVQ7CisJCS8vIGludGVycnVwdCBvbiBmaWZvIGhhbGYgZnVsbD8KKwkJaWYgKHhmZXIgPT0gZmlmb19oYWxmX2Z1bGxfdHJhbnNmZXIpCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19GSEZfSU5UUl9FTl9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19GSEZfSU5UUl9FTl9CSVQ7CisJCS8vIGVuYWJsZSBpbnRlcnJ1cHQgb24gY291bnRlciBhMSB0ZXJtaW5hbCBjb3VudD8KKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19FWFQpCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEExX0lOVFJfRU5fQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BMV9JTlRSX0VOX0JJVDsKKwkJLy8gYXJlIHdlIHNjYW5uaW5nIHVwIG9yIGRvd24gdGhyb3VnaCBjaGFubmVscz8KKwkJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfTVVMVF9DSEFOX1VQKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBBRENfU0NBTl9VUF9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19TQ0FOX1VQX0JJVDsKKwkJLy8gd3JpdGUgdG8gcmVnaXN0ZXIKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNl9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENl9SRUcpOworCX0KKworCS8qIHNldHVwIGNoYW5uZWwgbGlzdCwgZXRjIChjb21tYW5kMSByZWdpc3RlcikgKi8KKwlkZXZwcml2LT5jb21tYW5kMV9iaXRzID0gMDsKKwlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9NVUxUX0NIQU5fVVApCisJCWNoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbY21kLT5jaGFubGlzdF9sZW4gLSAxXSk7CisJZWxzZQorCQljaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwkvLyBtdW5nZSBjaGFubmVsIGJpdHMgZm9yIGRpZmZlcmVudGlhbCAvIHNjYW4gZGlzYWJsZWQgbW9kZQorCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSAhPSBNT0RFX1NJTkdMRV9DSEFOICYmIGFyZWYgPT0gQVJFRl9ESUZGKQorCQljaGFubmVsICo9IDI7CisJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSBBRENfQ0hBTl9CSVRTKGNoYW5uZWwpOworCWRldnByaXYtPmNvbW1hbmQxX2JpdHMgfD0gdGhpc2JvYXJkLT5haV9yYW5nZV9jb2RlW3JhbmdlXTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQxX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDFfUkVHKTsKKwkvLyBtYW51YWwgc2F5cyB0byBzZXQgc2NhbiBlbmFibGUgYml0IG9uIHNlY29uZCBwYXNzCisJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfTVVMVF9DSEFOX1VQIHx8CisJCWxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfTVVMVF9DSEFOX0RPV04pIHsKKwkJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSBBRENfU0NBTl9FTl9CSVQ7CisJCS8qIG5lZWQgYSBicmllZiBkZWxheSBiZWZvcmUgZW5hYmxpbmcgc2Nhbiwgb3Igc2NhbiBsaXN0IHdpbGwgZ2V0IHNjcmV3ZWQgd2hlbiB5b3Ugc3dpdGNoCisJCSAqIGJldHdlZW4gc2NhbiB1cCB0byBzY2FuIGRvd24gbW9kZSAtIGR1bm5vIHdoeSAqLworCQljb21lZGlfdWRlbGF5KDEpOworCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQxX2JpdHMsCisJCQlkZXYtPmlvYmFzZSArIENPTU1BTkQxX1JFRyk7CisJfQorCS8vIHNldHVwIGFueSBleHRlcm5hbCB0cmlnZ2VyaW5nL3BhY2luZyAoY29tbWFuZDQgcmVnaXN0ZXIpCisJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyA9IDA7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWRldnByaXYtPmNvbW1hbmQ0X2JpdHMgfD0gRVhUX0NPTlZFUlRfRElTQUJMRV9CSVQ7CisJLyogWFhYIHNob3VsZCBkaXNjYXJkIGZpcnN0IHNjYW4gd2hlbiB1c2luZyBpbnRlcnZhbCBzY2FubmluZworCSAqIHNpbmNlIG1hbnVhbCBzYXlzIGl0IGlzIG5vdCBzeW5jZWQgd2l0aCBzY2FuIGNsb2NrICovCisJaWYgKGxhYnBjX3VzZV9jb250aW51b3VzX21vZGUoY21kKSA9PSAwKSB7CisJCWRldnByaXYtPmNvbW1hbmQ0X2JpdHMgfD0gSU5URVJWQUxfU0NBTl9FTl9CSVQ7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKQorCQkJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBFWFRfU0NBTl9FTl9CSVQ7CisJfQorCS8vIHNpbmdsZS1lbmRlZC9kaWZmZXJlbnRpYWwKKwlpZiAoYXJlZiA9PSBBUkVGX0RJRkYpCisJCWRldnByaXYtPmNvbW1hbmQ0X2JpdHMgfD0gQURDX0RJRkZfQklUOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDRfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENF9SRUcpOworCisJZGV2cHJpdi0+d3JpdGVfYnl0ZShjbWQtPmNoYW5saXN0X2xlbiwKKwkJZGV2LT5pb2Jhc2UgKyBJTlRFUlZBTF9DT1VOVF9SRUcpOworCS8vIGxvYWQgY291bnQKKwlkZXZwcml2LT53cml0ZV9ieXRlKElOVEVSVkFMX0xPQURfQklUUywKKwkJZGV2LT5pb2Jhc2UgKyBJTlRFUlZBTF9MT0FEX1JFRyk7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSIHx8IGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvLyBzZXQgdXAgcGFjaW5nCisJCWxhYnBjX2FkY190aW1pbmcoZGV2LCBjbWQpOworCQkvLyBsb2FkIGNvdW50ZXIgYjAgaW4gbW9kZSAzCisJCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9CX0JBU0VfUkVHLAorCQkJMCwgZGV2cHJpdi0+ZGl2aXNvcl9iMCwgMyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGIwIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJLy8gc2V0IHVwIGNvbnZlcnNpb24gcGFjaW5nCisJaWYgKGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCkpIHsKKwkJLy8gbG9hZCBjb3VudGVyIGEwIGluIG1vZGUgMgorCQlyZXQgPSBsYWJwY19jb3VudGVyX2xvYWQoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQV9CQVNFX1JFRywKKwkJCTAsIGRldnByaXYtPmRpdmlzb3JfYTAsIDIpOworCQlpZiAocmV0IDwgMCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgImVycm9yIGxvYWRpbmcgY291bnRlciBhMCIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlCisJCWRldnByaXYtPndyaXRlX2J5dGUoSU5JVF9BMF9CSVRTLAorCQkJZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQ09OVFJPTF9SRUcpOworCisJLy8gc2V0IHVwIHNjYW4gcGFjaW5nCisJaWYgKGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCkpIHsKKwkJLy8gbG9hZCBjb3VudGVyIGIxIGluIG1vZGUgMgorCQlyZXQgPSBsYWJwY19jb3VudGVyX2xvYWQoZGV2LCBkZXYtPmlvYmFzZSArIENPVU5URVJfQl9CQVNFX1JFRywKKwkJCTEsIGRldnByaXYtPmRpdmlzb3JfYjEsIDIpOworCQlpZiAocmV0IDwgMCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgImVycm9yIGxvYWRpbmcgY291bnRlciBiMSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJbGFicGNfY2xlYXJfYWRjX2ZpZm8oZGV2KTsKKworCS8vIHNldCB1cCBkbWEgdHJhbnNmZXIKKwlpZiAoeGZlciA9PSBpc2FfZG1hX3RyYW5zZmVyKSB7CisJCWlycV9mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzIGZvcgorCQkgKiBjb3VudCBhbmQgYWRkcmVzcyBnZXQgc2V0IGNvcnJlY3RseSAqLworCQljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hX2NoYW4pOworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hX2NoYW4sCisJCQl2aXJ0X3RvX2J1cyhkZXZwcml2LT5kbWFfYnVmZmVyKSk7CisJCS8vIHNldCBhcHByb3ByaWF0ZSBzaXplIG9mIHRyYW5zZmVyCisJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID0gbGFicGNfc3VnZ2VzdF90cmFuc2Zlcl9zaXplKCpjbWQpOworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJCQlkZXZwcml2LT5jb3VudCAqIHNhbXBsZV9zaXplIDwKKwkJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKSB7CisJCQlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA9CisJCQkJZGV2cHJpdi0+Y291bnQgKiBzYW1wbGVfc2l6ZTsKKwkJfQorCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYV9jaGFuLCBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSk7CisJCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCQlyZWxlYXNlX2RtYV9sb2NrKGlycV9mbGFncyk7CisJCS8vIGVuYWJsZSBib2FyZCdzIGRtYQorCQlkZXZwcml2LT5jb21tYW5kM19iaXRzIHw9IERNQV9FTl9CSVQgfCBETUFUQ19JTlRSX0VOX0JJVDsKKwl9IGVsc2UKKwkJZGV2cHJpdi0+Y29tbWFuZDNfYml0cyAmPSB+RE1BX0VOX0JJVCAmIH5ETUFUQ19JTlRSX0VOX0JJVDsKKworCS8vIGVuYWJsZSBlcnJvciBpbnRlcnJ1cHRzCisJZGV2cHJpdi0+Y29tbWFuZDNfYml0cyB8PSBFUlJfSU5UUl9FTl9CSVQ7CisJLy8gZW5hYmxlIGZpZm8gbm90IGVtcHR5IGludGVycnVwdD8KKwlpZiAoeGZlciA9PSBmaWZvX25vdF9lbXB0eV90cmFuc2ZlcikKKwkJZGV2cHJpdi0+Y29tbWFuZDNfYml0cyB8PSBBRENfRk5FX0lOVFJfRU5fQklUOworCWVsc2UKKwkJZGV2cHJpdi0+Y29tbWFuZDNfYml0cyAmPSB+QURDX0ZORV9JTlRSX0VOX0JJVDsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQzX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDNfUkVHKTsKKworCS8vIHN0YXJ0dXAgYXF1aXNpdGlvbgorCisJLy8gY29tbWFuZDIgcmVnCisJLy8gdXNlIDIgY2FzY2FkZWQgY291bnRlcnMgZm9yIHBhY2luZworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRldnByaXYtPmNvbW1hbmQyX2JpdHMgfD0gQ0FTQ0FERV9CSVQ7CisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19FWFQ6CisJCWRldnByaXYtPmNvbW1hbmQyX2JpdHMgfD0gSFdUUklHX0JJVDsKKwkJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyAmPSB+UFJFVFJJR19CSVQgJiB+U1dUUklHX0JJVDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX05PVzoKKwkJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyB8PSBTV1RSSUdfQklUOworCQlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5QUkVUUklHX0JJVCAmIH5IV1RSSUdfQklUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnIHdpdGggc3RhcnRfc3JjIik7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19FWFQ6CisJCWRldnByaXYtPmNvbW1hbmQyX2JpdHMgfD0gSFdUUklHX0JJVCB8IFBSRVRSSUdfQklUOworCQlicmVhazsKKwljYXNlIFRSSUdfQ09VTlQ6CisJY2FzZSBUUklHX05PTkU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJidWcgd2l0aCBzdG9wX3NyYyIpOworCQlyZXR1cm4gLTE7CisJfQorCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLworc3RhdGljIGlycXJldHVybl90IGxhYnBjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJYXN5bmMgPSBzLT5hc3luYzsKKwljbWQgPSAmYXN5bmMtPmNtZDsKKwlhc3luYy0+ZXZlbnRzID0gMDsKKworCS8vIHJlYWQgYm9hcmQgc3RhdHVzCisJZGV2cHJpdi0+c3RhdHVzMV9iaXRzID0gZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgU1RBVFVTMV9SRUcpOworCWlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCkKKwkJZGV2cHJpdi0+c3RhdHVzMl9iaXRzID0KKwkJCWRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIFNUQVRVUzJfUkVHKTsKKworCWlmICgoZGV2cHJpdi0+c3RhdHVzMV9iaXRzICYgKERNQVRDX0JJVCB8IFRJTUVSX0JJVCB8IE9WRVJGTE9XX0JJVCB8CisJCQkJT1ZFUlJVTl9CSVQgfCBEQVRBX0FWQUlMX0JJVCkpID09IDAKKwkJJiYgKGRldnByaXYtPnN0YXR1czJfYml0cyAmIEExX1RDX0JJVCkgPT0gMAorCQkmJiAoZGV2cHJpdi0+c3RhdHVzMl9iaXRzICYgRk5IRl9CSVQpKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAoZGV2cHJpdi0+c3RhdHVzMV9iaXRzICYgT1ZFUlJVTl9CSVQpIHsKKwkJLy8gY2xlYXIgZXJyb3IgaW50ZXJydXB0CisJCWRldnByaXYtPndyaXRlX2J5dGUoMHgxLCBkZXYtPmlvYmFzZSArIEFEQ19DTEVBUl9SRUcpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQljb21lZGlfZXJyb3IoZGV2LCAib3ZlcnJ1biIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGRldnByaXYtPmN1cnJlbnRfdHJhbnNmZXIgPT0gaXNhX2RtYV90cmFuc2ZlcikgeworCQkvLyBpZiBhIGRtYSB0ZXJtaW5hbCBjb3VudCBvZiBleHRlcm5hbCBzdG9wIHRyaWdnZXIgaGFzIG9jY3VycmVkCisJCWlmIChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiBETUFUQ19CSVQgfHwKKwkJCSh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dAorCQkJCSYmIGRldnByaXYtPnN0YXR1czJfYml0cyAmIEExX1RDX0JJVCkpIHsKKwkJCWhhbmRsZV9pc2FfZG1hKGRldik7CisJCX0KKwl9IGVsc2UKKwkJbGFicGNfZHJhaW5fZmlmbyhkZXYpOworCisJaWYgKGRldnByaXYtPnN0YXR1czFfYml0cyAmIFRJTUVSX0JJVCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiaGFuZGxlZCB0aW1lciBpbnRlcnJ1cHQ/Iik7CisJCS8vIGNsZWFyIGl0CisJCWRldnByaXYtPndyaXRlX2J5dGUoMHgxLCBkZXYtPmlvYmFzZSArIFRJTUVSX0NMRUFSX1JFRyk7CisJfQorCisJaWYgKGRldnByaXYtPnN0YXR1czFfYml0cyAmIE9WRVJGTE9XX0JJVCkgeworCQkvLyBjbGVhciBlcnJvciBpbnRlcnJ1cHQKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgQURDX0NMRUFSX1JFRyk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCWNvbWVkaV9lcnJvcihkZXYsICJvdmVyZmxvdyIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCS8vIGhhbmRsZSBleHRlcm5hbCBzdG9wIHRyaWdnZXIKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQlpZiAoZGV2cHJpdi0+c3RhdHVzMl9iaXRzICYgQTFfVENfQklUKSB7CisJCQlsYWJwY19kcmFpbl9kcmVncyhkZXYpOworCQkJbGFicGNfY2FuY2VsKGRldiwgcyk7CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCX0KKwl9CisKKwkvKiBUUklHX0NPVU5UIGVuZCBvZiBhY3F1aXNpdGlvbiAqLworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGRldnByaXYtPmNvdW50ID09IDApIHsKKwkJCWxhYnBjX2NhbmNlbChkZXYsIHMpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvLyByZWFkIGFsbCBhdmFpbGFibGUgc2FtcGxlcyBmcm9tIGFpIGZpZm8KK3N0YXRpYyBpbnQgbGFicGNfZHJhaW5fZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgbHNiLCBtc2I7CisJc2hvcnQgZGF0YTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IGRldi0+cmVhZF9zdWJkZXYtPmFzeW5jOworCWNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CisJdW5zaWduZWQgaW50IGk7CisKKwlkZXZwcml2LT5zdGF0dXMxX2JpdHMgPSBkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBTVEFUVVMxX1JFRyk7CisKKwlmb3IgKGkgPSAwOyAoZGV2cHJpdi0+c3RhdHVzMV9iaXRzICYgREFUQV9BVkFJTF9CSVQpICYmIGkgPCB0aW1lb3V0OworCQlpKyspIHsKKwkJLy8gcXVpdCBpZiB3ZSBoYXZlIGFsbCB0aGUgZGF0YSB3ZSB3YW50CisJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJCWlmIChkZXZwcml2LT5jb3VudCA9PSAwKQorCQkJCWJyZWFrOworCQkJZGV2cHJpdi0+Y291bnQtLTsKKwkJfQorCQlsc2IgPSBkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBBRENfRklGT19SRUcpOworCQltc2IgPSBkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBBRENfRklGT19SRUcpOworCQlkYXRhID0gKG1zYiA8PCA4KSB8IGxzYjsKKwkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihkZXYtPnJlYWRfc3ViZGV2LCBkYXRhKTsKKwkJZGV2cHJpdi0+c3RhdHVzMV9iaXRzID0KKwkJCWRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIFNUQVRVUzFfUkVHKTsKKwl9CisJaWYgKGkgPT0gdGltZW91dCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiYWkgdGltZW91dCwgZmlmbyBuZXZlciBlbXB0aWVzIik7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsYWJwY19kcmFpbl9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXhfcG9pbnRzLCBudW1fcG9pbnRzLCByZXNpZHVlLCBsZWZ0b3ZlcjsKKwlpbnQgaTsKKworCXN0YXR1cyA9IGRldnByaXYtPnN0YXR1czFfYml0czsKKworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzIGZvcgorCSAqIGNvdW50IGFuZCBhZGRyZXNzIGdldCBzZXQgY29ycmVjdGx5ICovCisJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYV9jaGFuKTsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgcG9pbnRzIHRvIHJlYWQKKwltYXhfcG9pbnRzID0gZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLyBzYW1wbGVfc2l6ZTsKKwkvKiByZXNpZHVlIGlzIHRoZSBudW1iZXIgb2YgcG9pbnRzIGxlZnQgdG8gYmUgZG9uZSBvbiB0aGUgZG1hCisJICogdHJhbnNmZXIuICBJdCBzaG91bGQgYWx3YXlzIGJlIHplcm8gYXQgdGhpcyBwb2ludCB1bmxlc3MKKwkgKiB0aGUgc3RvcF9zcmMgaXMgc2V0IHRvIGV4dGVybmFsIHRyaWdnZXJpbmcuCisJICovCisJcmVzaWR1ZSA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWFfY2hhbikgLyBzYW1wbGVfc2l6ZTsKKwludW1fcG9pbnRzID0gbWF4X3BvaW50cyAtIHJlc2lkdWU7CisJaWYgKGRldnByaXYtPmNvdW50IDwgbnVtX3BvaW50cyAmJiBhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJCW51bV9wb2ludHMgPSBkZXZwcml2LT5jb3VudDsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgcG9pbnRzIHdpbGwgYmUgc3RvcmVkIG5leHQgdGltZQorCWxlZnRvdmVyID0gMDsKKwlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWxlZnRvdmVyID0gZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLyBzYW1wbGVfc2l6ZTsKKwl9IGVsc2UgaWYgKGRldnByaXYtPmNvdW50ID4gbnVtX3BvaW50cykgeworCQlsZWZ0b3ZlciA9IGRldnByaXYtPmNvdW50IC0gbnVtX3BvaW50czsKKwkJaWYgKGxlZnRvdmVyID4gbWF4X3BvaW50cykKKwkJCWxlZnRvdmVyID0gbWF4X3BvaW50czsKKwl9CisKKwkvKiB3cml0ZSBkYXRhIHRvIGNvbWVkaSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BvaW50czsgaSsrKSB7CisJCWNmY193cml0ZV90b19idWZmZXIocywgZGV2cHJpdi0+ZG1hX2J1ZmZlcltpXSk7CisJfQorCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJCWRldnByaXYtPmNvdW50IC09IG51bV9wb2ludHM7CisKKwkvLyBzZXQgYWRkcmVzcyBhbmQgY291bnQgZm9yIG5leHQgdHJhbnNmZXIKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hX2NoYW4sIHZpcnRfdG9fYnVzKGRldnByaXYtPmRtYV9idWZmZXIpKTsKKwlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYV9jaGFuLCBsZWZ0b3ZlciAqIHNhbXBsZV9zaXplKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKworCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfaXNhX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlsYWJwY19kcmFpbl9kbWEoZGV2KTsKKworCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCisJLy8gY2xlYXIgZG1hIHRjIGludGVycnVwdAorCWRldnByaXYtPndyaXRlX2J5dGUoMHgxLCBkZXYtPmlvYmFzZSArIERNQVRDX0NMRUFSX1JFRyk7Cit9CisKKy8qIG1ha2VzIHN1cmUgYWxsIGRhdGEgYXF1aXJlZCBieSBib2FyZCBpcyB0cmFuc2ZlcmVkIHRvIGNvbWVkaSAodXNlZAorICogd2hlbiBhcXVpc2l0aW9uIGlzIHRlcm1pbmF0ZWQgYnkgc3RvcF9zcmMgPT0gVFJJR19FWFQpLiAqLworc3RhdGljIHZvaWQgbGFicGNfZHJhaW5fZHJlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYtPmN1cnJlbnRfdHJhbnNmZXIgPT0gaXNhX2RtYV90cmFuc2ZlcikKKwkJbGFicGNfZHJhaW5fZG1hKGRldik7CisKKwlsYWJwY19kcmFpbl9maWZvKGRldik7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpLCBuOworCWludCBjaGFuLCByYW5nZTsKKwlpbnQgbHNiLCBtc2I7CisJaW50IHRpbWVvdXQgPSAxMDAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBkaXNhYmxlIHRpbWVkIGNvbnZlcnNpb25zCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyAmPSB+U1dUUklHX0JJVCAmIH5IV1RSSUdfQklUICYgflBSRVRSSUdfQklUOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBkaXNhYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGFuZCBkbWEKKwlkZXZwcml2LT5jb21tYW5kM19iaXRzID0gMDsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQzX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDNfUkVHKTsKKworCS8qIHNldCBnYWluIGFuZCBjaGFubmVsICovCisJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyA9IDA7CisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWRldnByaXYtPmNvbW1hbmQxX2JpdHMgfD0gdGhpc2JvYXJkLT5haV9yYW5nZV9jb2RlW3JhbmdlXTsKKwkvLyBtdW5nZSBjaGFubmVsIGJpdHMgZm9yIGRpZmZlcmVudGlhbC9zY2FuIGRpc2FibGVkIG1vZGUKKwlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgPT0gQVJFRl9ESUZGKQorCQljaGFuICo9IDI7CisJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSBBRENfQ0hBTl9CSVRTKGNoYW4pOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMV9SRUcpOworCisJLy8gc2V0dXAgY29tbWFuZDYgcmVnaXN0ZXIgZm9yIDEyMDAgYm9hcmRzCisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCS8vIHJlZmVyZW5jZSBpbnB1dHMgdG8gZ3JvdW5kIG9yIGNvbW1vbj8KKwkJaWYgKENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpICE9IEFSRUZfR1JPVU5EKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBBRENfQ09NTU9OX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QURDX0NPTU1PTl9CSVQ7CisJCS8vIGJpcG9sYXIgb3IgdW5pcG9sYXIgcmFuZ2U/CisJCWlmICh0aGlzYm9hcmQtPmFpX3JhbmdlX2lzX3VuaXBvbGFyW3JhbmdlXSkKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgfD0gQURDX1VOSVBfQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfVU5JUF9CSVQ7CisJCS8vIGRvbid0IGludGVycnVwdCBvbiBmaWZvIGhhbGYgZnVsbAorCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfRkhGX0lOVFJfRU5fQklUOworCQkvLyBkb24ndCBlbmFibGUgaW50ZXJydXB0IG9uIGNvdW50ZXIgYTEgdGVybWluYWwgY291bnQ/CisJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkExX0lOVFJfRU5fQklUOworCQkvLyB3cml0ZSB0byByZWdpc3RlcgorCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ2X2JpdHMsCisJCQlkZXYtPmlvYmFzZSArIENPTU1BTkQ2X1JFRyk7CisJfQorCS8vIHNldHVwIGNvbW1hbmQ0IHJlZ2lzdGVyCisJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyA9IDA7CisJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBFWFRfQ09OVkVSVF9ESVNBQkxFX0JJVDsKKwkvLyBzaW5nbGUtZW5kZWQvZGlmZmVyZW50aWFsCisJaWYgKENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpID09IEFSRUZfRElGRikKKwkJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBBRENfRElGRl9CSVQ7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNF9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ0X1JFRyk7CisKKwkvLyBpbml0aWFsaXplIHBhY2VyIGNvdW50ZXIgb3V0cHV0IHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGNhdXNlIGFueSBwcm9ibGVtcworCWRldnByaXYtPndyaXRlX2J5dGUoSU5JVF9BMF9CSVRTLCBkZXYtPmlvYmFzZSArIENPVU5URVJfQV9DT05UUk9MX1JFRyk7CisKKwlsYWJwY19jbGVhcl9hZGNfZmlmbyhkZXYpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgQURDX0NPTlZFUlRfUkVHKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQlpZiAoZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsKKwkJCQkJU1RBVFVTMV9SRUcpICYgREFUQV9BVkFJTF9CSVQpCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCWlmIChpID09IHRpbWVvdXQpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCWxzYiA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJCW1zYiA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJCWRhdGFbbl0gPSAobXNiIDw8IDgpIHwgbHNiOworCX0KKworCXJldHVybiBuOworfQorCisvLyBhbmFsb2cgb3V0cHV0IGluc24KK3N0YXRpYyBpbnQgbGFicGNfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsLCByYW5nZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBsc2IsIG1zYjsKKworCWNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8vIHR1cm4gb2ZmIHBhY2luZyBvZiBhbmFsb2cgb3V0cHV0IGNoYW5uZWwKKwkvKiBub3RlOiBoYXJkd2FyZSBidWcgaW4gZGFxY2FyZC0xMjAwIG1lYW5zIHBhY2luZyBjYW5ub3QKKwkgKiBiZSBpbmRlcGVuZGVudGx5IGVuYWJsZWQvZGlzYWJsZWQgZm9yIGl0cyB0aGUgdHdvIGNoYW5uZWxzICovCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyAmPSB+REFDX1BBQ0VEX0JJVChjaGFubmVsKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQyX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDJfUkVHKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gc2V0IHJhbmdlCisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCQlpZiAocmFuZ2UgJiBBT19SQU5HRV9JU19VTklQT0xBUikKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgfD0gREFDX1VOSVBfQklUKGNoYW5uZWwpOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5EQUNfVU5JUF9CSVQoY2hhbm5lbCk7CisJCS8vIHdyaXRlIHRvIHJlZ2lzdGVyCisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDZfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDZfUkVHKTsKKwl9CisJLy8gc2VuZCBkYXRhCisJbHNiID0gZGF0YVswXSAmIDB4ZmY7CisJbXNiID0gKGRhdGFbMF0gPj4gOCkgJiAweGZmOworCWRldnByaXYtPndyaXRlX2J5dGUobHNiLCBkZXYtPmlvYmFzZSArIERBQ19MU0JfUkVHKGNoYW5uZWwpKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKG1zYiwgZGV2LT5pb2Jhc2UgKyBEQUNfTVNCX1JFRyhjaGFubmVsKSk7CisKKwkvLyByZW1lbWJlciB2YWx1ZSBmb3IgcmVhZGJhY2sKKwlkZXZwcml2LT5hb192YWx1ZVtjaGFubmVsXSA9IGRhdGFbMF07CisKKwlyZXR1cm4gMTsKK30KKworLy8gYW5hbG9nIG91dHB1dCByZWFkYmFjayBpbnNuCitzdGF0aWMgaW50IGxhYnBjX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+YW9fdmFsdWVbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfY2FsaWJfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+Y2FsZGFjW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxhYnBjX2NhbGliX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwl3cml0ZV9jYWxkYWMoZGV2LCBjaGFubmVsLCBkYXRhWzBdKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsYWJwY19lZXByb21fcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+ZWVwcm9tX2RhdGFbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfZWVwcm9tX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IHJldDsKKworCS8vIG9ubHkgYWxsb3cgd3JpdGVzIHRvIHVzZXIgYXJlYSBvZiBlZXByb20KKwlpZiAoY2hhbm5lbCA8IDE2IHx8IGNoYW5uZWwgPiAxMjcpIHsKKwkJcHJpbnRrKCJlZXByb20gd3JpdGVzIGFyZSBvbmx5IGFsbG93ZWQgdG8gY2hhbm5lbHMgMTYgdGhyb3VnaCAxMjcgKHRoZSBwb2ludGVyIGFuZCB1c2VyIGFyZWFzKSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBsYWJwY19lZXByb21fd3JpdGUoZGV2LCBjaGFubmVsLCBkYXRhWzBdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAxOworfQorCisvLyB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgc3VnZ2VzdHMgYSBkbWEgdHJhbnNmZXIgc2l6ZSBpbiBieXRlcworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19zdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9jbWQgY21kKQoreworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGludCBmcmVxOworCisJaWYgKGNtZC5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQorCQlmcmVxID0gMTAwMDAwMDAwMCAvIGNtZC5jb252ZXJ0X2FyZzsKKwkvLyByZXR1cm4gc29tZSBkZWZhdWx0IHZhbHVlCisJZWxzZQorCQlmcmVxID0gMHhmZmZmZmZmZjsKKworCS8vIG1ha2UgYnVmZmVyIGZpbGwgaW4gbm8gbW9yZSB0aGFuIDEvMyBzZWNvbmQKKwlzaXplID0gKGZyZXEgLyAzKSAqIHNhbXBsZV9zaXplOworCisJLy8gc2V0IGEgbWluaW11bSBhbmQgbWF4aW11bSBzaXplIGFsbG93ZWQKKwlpZiAoc2l6ZSA+IGRtYV9idWZmZXJfc2l6ZSkKKwkJc2l6ZSA9IGRtYV9idWZmZXJfc2l6ZSAtIGRtYV9idWZmZXJfc2l6ZSAlIHNhbXBsZV9zaXplOworCWVsc2UgaWYgKHNpemUgPCBzYW1wbGVfc2l6ZSkKKwkJc2l6ZSA9IHNhbXBsZV9zaXplOworCisJcmV0dXJuIHNpemU7Cit9CisKKy8vIGZpZ3VyZXMgb3V0IHdoYXQgY291bnRlciB2YWx1ZXMgdG8gdXNlIGJhc2VkIG9uIGNvbW1hbmQKK3N0YXRpYyB2b2lkIGxhYnBjX2FkY190aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWNvbnN0IGludCBtYXhfY291bnRlcl92YWx1ZSA9IDB4MTAwMDA7CS8vIG1heCB2YWx1ZSBmb3IgMTYgYml0IGNvdW50ZXIgaW4gbW9kZSAyCisJY29uc3QgaW50IG1pbl9jb3VudGVyX3ZhbHVlID0gMjsJLy8gbWluIHZhbHVlIGZvciAxNiBiaXQgY291bnRlciBpbiBtb2RlIDIKKwl1bnNpZ25lZCBpbnQgYmFzZV9wZXJpb2Q7CisKKwkvLyBpZiBib3RoIGNvbnZlcnQgYW5kIHNjYW4gdHJpZ2dlcnMgYXJlIFRSSUdfVElNRVIsIHRoZW4gdGhleSBib3RoIHJlbHkgb24gY291bnRlciBiMAorCWlmIChsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjbWQpICYmIGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCkpIHsKKwkJLy8gcGljayB0aGUgbG93ZXN0IGIwIGRpdmlzb3IgdmFsdWUgd2UgY2FuIChmb3IgbWF4aW11bSBpbnB1dCBjbG9jayBzcGVlZCBvbiBjb252ZXJ0IGFuZCBzY2FuIGNvdW50ZXJzKQorCQlkZXZwcml2LT5kaXZpc29yX2IwID0gKGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCkgLSAxKSAvCisJCQkoTEFCUENfVElNRVJfQkFTRSAqIG1heF9jb3VudGVyX3ZhbHVlKSArIDE7CisJCWlmIChkZXZwcml2LT5kaXZpc29yX2IwIDwgbWluX2NvdW50ZXJfdmFsdWUpCisJCQlkZXZwcml2LT5kaXZpc29yX2IwID0gbWluX2NvdW50ZXJfdmFsdWU7CisJCWlmIChkZXZwcml2LT5kaXZpc29yX2IwID4gbWF4X2NvdW50ZXJfdmFsdWUpCisJCQlkZXZwcml2LT5kaXZpc29yX2IwID0gbWF4X2NvdW50ZXJfdmFsdWU7CisKKwkJYmFzZV9wZXJpb2QgPSBMQUJQQ19USU1FUl9CQVNFICogZGV2cHJpdi0+ZGl2aXNvcl9iMDsKKworCQkvLyBzZXQgYTAgZm9yIGNvbnZlcnNpb24gZnJlcXVlbmN5IGFuZCBiMSBmb3Igc2NhbiBmcmVxdWVuY3kKKwkJc3dpdGNoIChjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKSB7CisJCWRlZmF1bHQ6CisJCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQkJZGV2cHJpdi0+ZGl2aXNvcl9hMCA9CisJCQkJKGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCkgKworCQkJCShiYXNlX3BlcmlvZCAvIDIpKSAvIGJhc2VfcGVyaW9kOworCQkJZGV2cHJpdi0+ZGl2aXNvcl9iMSA9CisJCQkJKGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCkgKworCQkJCShiYXNlX3BlcmlvZCAvIDIpKSAvIGJhc2VfcGVyaW9kOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCWRldnByaXYtPmRpdmlzb3JfYTAgPQorCQkJCShsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjbWQpICsgKGJhc2VfcGVyaW9kIC0KKwkJCQkJMSkpIC8gYmFzZV9wZXJpb2Q7CisJCQlkZXZwcml2LT5kaXZpc29yX2IxID0KKwkJCQkobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSArIChiYXNlX3BlcmlvZCAtCisJCQkJCTEpKSAvIGJhc2VfcGVyaW9kOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJZGV2cHJpdi0+ZGl2aXNvcl9hMCA9CisJCQkJbGFicGNfYWlfY29udmVydF9wZXJpb2QoY21kKSAvIGJhc2VfcGVyaW9kOworCQkJZGV2cHJpdi0+ZGl2aXNvcl9iMSA9CisJCQkJbGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSAvIGJhc2VfcGVyaW9kOworCQkJYnJlYWs7CisJCX0KKwkJLy8gbWFrZSBzdXJlIGEwIGFuZCBiMSB2YWx1ZXMgYXJlIGFjY2VwdGFibGUKKwkJaWYgKGRldnByaXYtPmRpdmlzb3JfYTAgPCBtaW5fY291bnRlcl92YWx1ZSkKKwkJCWRldnByaXYtPmRpdmlzb3JfYTAgPSBtaW5fY291bnRlcl92YWx1ZTsKKwkJaWYgKGRldnByaXYtPmRpdmlzb3JfYTAgPiBtYXhfY291bnRlcl92YWx1ZSkKKwkJCWRldnByaXYtPmRpdmlzb3JfYTAgPSBtYXhfY291bnRlcl92YWx1ZTsKKwkJaWYgKGRldnByaXYtPmRpdmlzb3JfYjEgPCBtaW5fY291bnRlcl92YWx1ZSkKKwkJCWRldnByaXYtPmRpdmlzb3JfYjEgPSBtaW5fY291bnRlcl92YWx1ZTsKKwkJaWYgKGRldnByaXYtPmRpdmlzb3JfYjEgPiBtYXhfY291bnRlcl92YWx1ZSkKKwkJCWRldnByaXYtPmRpdmlzb3JfYjEgPSBtYXhfY291bnRlcl92YWx1ZTsKKwkJLy8gd3JpdGUgY29ycmVjdGVkIHRpbWluZ3MgdG8gY29tbWFuZAorCQlsYWJwY19zZXRfYWlfY29udmVydF9wZXJpb2QoY21kLAorCQkJYmFzZV9wZXJpb2QgKiBkZXZwcml2LT5kaXZpc29yX2EwKTsKKwkJbGFicGNfc2V0X2FpX3NjYW5fcGVyaW9kKGNtZCwKKwkJCWJhc2VfcGVyaW9kICogZGV2cHJpdi0+ZGl2aXNvcl9iMSk7CisJCS8vIGlmIG9ubHkgb25lIFRSSUdfVElNRVIgaXMgdXNlZCwgd2UgY2FuIGVtcGxveSB0aGUgZ2VuZXJpYyBjYXNjYWRlZCB0aW1pbmcgZnVuY3Rpb25zCisJfSBlbHNlIGlmIChsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpKSB7CisJCXVuc2lnbmVkIGludCBzY2FuX3BlcmlvZDsKKworCQlzY2FuX3BlcmlvZCA9IGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCk7CisJCS8qIGNhbGN1bGF0ZSBjYXNjYWRlZCBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCBzY2FuIHRpbWluZyAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoTEFCUENfVElNRVJfQkFTRSwKKwkJCSYoZGV2cHJpdi0+ZGl2aXNvcl9iMSksICYoZGV2cHJpdi0+ZGl2aXNvcl9iMCksCisJCQkmc2Nhbl9wZXJpb2QsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlsYWJwY19zZXRfYWlfc2Nhbl9wZXJpb2QoY21kLCBzY2FuX3BlcmlvZCk7CisJfSBlbHNlIGlmIChsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjbWQpKSB7CisJCXVuc2lnbmVkIGludCBjb252ZXJ0X3BlcmlvZDsKKworCQljb252ZXJ0X3BlcmlvZCA9IGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCk7CisJCS8qIGNhbGN1bGF0ZSBjYXNjYWRlZCBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCBjb252ZXJzaW9uIHRpbWluZyAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoTEFCUENfVElNRVJfQkFTRSwKKwkJCSYoZGV2cHJpdi0+ZGl2aXNvcl9hMCksICYoZGV2cHJpdi0+ZGl2aXNvcl9iMCksCisJCQkmY29udmVydF9wZXJpb2QsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlsYWJwY19zZXRfYWlfY29udmVydF9wZXJpb2QoY21kLCBjb252ZXJ0X3BlcmlvZCk7CisJfQorfQorCitzdGF0aWMgaW50IGxhYnBjX2Rpb19tZW1fY2FsbGJhY2soaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLAorCXVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCWlmIChkaXIpIHsKKwkJd3JpdGViKGRhdGEsICh2b2lkICopKGlvYmFzZSArIHBvcnQpKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHJlYWRiKCh2b2lkICopKGlvYmFzZSArIHBvcnQpKTsKKwl9Cit9CisKKy8vIGxvd2xldmVsIHdyaXRlIHRvIGVlcHJvbS9kYWMKK3N0YXRpYyB2b2lkIGxhYnBjX3NlcmlhbF9vdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCB2YWx1ZSwKKwl1bnNpZ25lZCBpbnQgdmFsdWVfd2lkdGgpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IHZhbHVlX3dpZHRoOyBpKyspIHsKKwkJLy8gY2xlYXIgc2VyaWFsIGNsb2NrCisJCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gflNDTE9DS19CSVQ7CisJCS8vIHNlbmQgYml0cyBtb3N0IHNpZ25pZmljYW50IGJpdCBmaXJzdAorCQlpZiAodmFsdWUgJiAoMSA8PCAodmFsdWVfd2lkdGggLSBpKSkpCisJCQlkZXZwcml2LT5jb21tYW5kNV9iaXRzIHw9IFNEQVRBX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+U0RBVEFfQklUOworCQljb21lZGlfdWRlbGF5KDEpOworCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsCisJCQlkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJCS8vIHNldCBjbG9jayB0byBsb2FkIGJpdAorCQlkZXZwcml2LT5jb21tYW5kNV9iaXRzIHw9IFNDTE9DS19CSVQ7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwl9Cit9CisKKy8vIGxvd2xldmVsIHJlYWQgZnJvbSBlZXByb20KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfc2VyaWFsX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisJaW50IGk7CisJY29uc3QgaW50IHZhbHVlX3dpZHRoID0gODsJLy8gbnVtYmVyIG9mIGJpdHMgd2lkZSB2YWx1ZXMgYXJlCisKKwlmb3IgKGkgPSAxOyBpIDw9IHZhbHVlX3dpZHRoOyBpKyspIHsKKwkJLy8gc2V0IHNlcmlhbCBjbG9jaworCQlkZXZwcml2LT5jb21tYW5kNV9iaXRzIHw9IFNDTE9DS19CSVQ7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwkJLy8gY2xlYXIgY2xvY2sgYml0CisJCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gflNDTE9DS19CSVQ7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwkJLy8gcmVhZCBiaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWRldnByaXYtPnN0YXR1czJfYml0cyA9CisJCQlkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBTVEFUVVMyX1JFRyk7CisJCWlmIChkZXZwcml2LT5zdGF0dXMyX2JpdHMgJiBFRVBST01fT1VUX0JJVCkgeworCQkJdmFsdWUgfD0gMSA8PCAodmFsdWVfd2lkdGggLSBpKTsKKwkJfQorCX0KKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19lZXByb21fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWNvbnN0IGludCByZWFkX2luc3RydWN0aW9uID0gMHgzOwkvLyBiaXRzIHRvIHRlbGwgZWVwcm9tIHRvIGV4cGVjdCBhIHJlYWQKKwljb25zdCBpbnQgd3JpdGVfbGVuZ3RoID0gODsJLy8gOCBiaXQgd3JpdGUgbGVuZ3RocyB0byBlZXByb20KKworCS8vIGVuYWJsZSByZWFkL3dyaXRlIHRvIGVlcHJvbQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzIHw9IEVFUFJPTV9FTl9CSVQgfCBFRVBST01fV1JJVEVfVU5QUk9URUNUX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCisJLy8gc2VuZCByZWFkIGluc3RydWN0aW9uCisJbGFicGNfc2VyaWFsX291dChkZXYsIHJlYWRfaW5zdHJ1Y3Rpb24sIHdyaXRlX2xlbmd0aCk7CisJLy8gc2VuZCA4IGJpdCBhZGRyZXNzIHRvIHJlYWQgZnJvbQorCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCBhZGRyZXNzLCB3cml0ZV9sZW5ndGgpOworCS8vIHJlYWQgcmVzdWx0CisJdmFsdWUgPSBsYWJwY19zZXJpYWxfaW4oZGV2KTsKKworCS8vIGRpc2FibGUgcmVhZC93cml0ZSB0byBlZXByb20KKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUICYgfkVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfZWVwcm9tX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJY29uc3QgaW50IHdyaXRlX2VuYWJsZV9pbnN0cnVjdGlvbiA9IDB4NjsKKwljb25zdCBpbnQgd3JpdGVfaW5zdHJ1Y3Rpb24gPSAweDI7CisJY29uc3QgaW50IHdyaXRlX2xlbmd0aCA9IDg7CS8vIDggYml0IHdyaXRlIGxlbmd0aHMgdG8gZWVwcm9tCisJY29uc3QgaW50IHdyaXRlX2luX3Byb2dyZXNzX2JpdCA9IDB4MTsKKwljb25zdCBpbnQgdGltZW91dCA9IDEwMDAwOworCWludCBpOworCisJLy8gbWFrZSBzdXJlIHRoZXJlIGlzbid0IGFscmVhZHkgYSB3cml0ZSBpbiBwcm9ncmVzcworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaWYgKChsYWJwY19lZXByb21fcmVhZF9zdGF0dXMoZGV2KSAmIHdyaXRlX2luX3Byb2dyZXNzX2JpdCkgPT0KKwkJCTApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gdGltZW91dCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZWVwcm9tIHdyaXRlIHRpbWVkIG91dCIpOworCQlyZXR1cm4gLUVUSU1FOworCX0KKwkvLyB1cGRhdGUgc29mdHdhcmUgY29weSBvZiBlZXByb20KKwlkZXZwcml2LT5lZXByb21fZGF0YVthZGRyZXNzXSA9IHZhbHVlOworCisJLy8gZW5hYmxlIHJlYWQvd3JpdGUgdG8gZWVwcm9tCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+RUVQUk9NX0VOX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gRUVQUk9NX0VOX0JJVCB8IEVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwkvLyBzZW5kIHdyaXRlX2VuYWJsZSBpbnN0cnVjdGlvbgorCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCB3cml0ZV9lbmFibGVfaW5zdHJ1Y3Rpb24sIHdyaXRlX2xlbmd0aCk7CisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+RUVQUk9NX0VOX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCisJLy8gc2VuZCB3cml0ZSBpbnN0cnVjdGlvbgorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gRUVQUk9NX0VOX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCB3cml0ZV9pbnN0cnVjdGlvbiwgd3JpdGVfbGVuZ3RoKTsKKwkvLyBzZW5kIDggYml0IGFkZHJlc3MgdG8gd3JpdGUgdG8KKwlsYWJwY19zZXJpYWxfb3V0KGRldiwgYWRkcmVzcywgd3JpdGVfbGVuZ3RoKTsKKwkvLyB3cml0ZSB2YWx1ZQorCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCB2YWx1ZSwgd3JpdGVfbGVuZ3RoKTsKKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwkvLyBkaXNhYmxlIHJlYWQvd3JpdGUgdG8gZWVwcm9tCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+RUVQUk9NX0VOX0JJVCAmIH5FRVBST01fV1JJVEVfVU5QUk9URUNUX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfZWVwcm9tX3JlYWRfc3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwljb25zdCBpbnQgcmVhZF9zdGF0dXNfaW5zdHJ1Y3Rpb24gPSAweDU7CisJY29uc3QgaW50IHdyaXRlX2xlbmd0aCA9IDg7CS8vIDggYml0IHdyaXRlIGxlbmd0aHMgdG8gZWVwcm9tCisKKwkvLyBlbmFibGUgcmVhZC93cml0ZSB0byBlZXByb20KKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyB8PSBFRVBST01fRU5fQklUIHwgRUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCS8vIHNlbmQgcmVhZCBzdGF0dXMgaW5zdHJ1Y3Rpb24KKwlsYWJwY19zZXJpYWxfb3V0KGRldiwgcmVhZF9zdGF0dXNfaW5zdHJ1Y3Rpb24sIHdyaXRlX2xlbmd0aCk7CisJLy8gcmVhZCByZXN1bHQKKwl2YWx1ZSA9IGxhYnBjX3NlcmlhbF9pbihkZXYpOworCisJLy8gZGlzYWJsZSByZWFkL3dyaXRlIHRvIGVlcHJvbQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQgJiB+RUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworLy8gd3JpdGVzIHRvIDggYml0IGNhbGlicmF0aW9uIGRhY3MKK3N0YXRpYyB2b2lkIHdyaXRlX2NhbGRhYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCWlmICh2YWx1ZSA9PSBkZXZwcml2LT5jYWxkYWNbY2hhbm5lbF0pCisJCXJldHVybjsKKwlkZXZwcml2LT5jYWxkYWNbY2hhbm5lbF0gPSB2YWx1ZTsKKworCS8vIGNsZWFyIGNhbGRhYyBsb2FkIGJpdCBhbmQgbWFrZSBzdXJlIHdlIGRvbid0IHdyaXRlIHRvIGVlcHJvbQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0KKwkJfkNBTERBQ19MT0FEX0JJVCAmIH5FRVBST01fRU5fQklUICYgfkVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwkvLyB3cml0ZSA0IGJpdCBjaGFubmVsCisJbGFicGNfc2VyaWFsX291dChkZXYsIGNoYW5uZWwsIDQpOworCS8vIHdyaXRlIDggYml0IGNhbGRhYyB2YWx1ZQorCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCB2YWx1ZSwgOCk7CisKKwkvLyBzZXQgYW5kIGNsZWFyIGNhbGRhYyBiaXQgdG8gbG9hZCBjYWxkYWMgdmFsdWUKKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzIHw9IENBTERBQ19MT0FEX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkNBTERBQ19MT0FEX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworfQorCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2xhYnBjLCBsYWJwY19wY2lfdGFibGUpOworI2Vsc2UKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfbGFicGMpOworI2VuZGlmCisKK0VYUE9SVF9TWU1CT0xfR1BMKGxhYnBjX2NvbW1vbl9hdHRhY2gpOworRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfY29tbW9uX2RldGFjaCk7CitFWFBPUlRfU1lNQk9MX0dQTChyYW5nZV9sYWJwY18xMjAwX2FpKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxhYnBjXzEyMDBfYWlfZ2Fpbl9iaXRzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxhYnBjXzEyMDBfaXNfdW5pcG9sYXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDRiMGQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAgICBuaV9sYWJwYy5oCisKKyAgICBIZWFkZXIgZm9yIG5pX2xhYnBjLmMgYW5kIG5pX2xhYnBjX2NzLmMKKworICAgIENvcHlyaWdodCAoQykgMjAwMyBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2lmbmRlZiBfTklfTEFCUENfSAorI2RlZmluZSBfTklfTEFCUENfSAorCisjZGVmaW5lIEVFUFJPTV9TSVpFCTI1NgkvLyAyNTYgYnl0ZSBlZXByb20KKyNkZWZpbmUgTlVNX0FPX0NIQU4JMgkvLyBib2FyZHMgaGF2ZSB0d28gYW5hbG9nIG91dHB1dCBjaGFubmVscworCitlbnVtIGxhYnBjX2J1c3R5cGUgeyBpc2FfYnVzdHlwZSwgcGNpX2J1c3R5cGUsIHBjbWNpYV9idXN0eXBlIH07CitlbnVtIGxhYnBjX3JlZ2lzdGVyX2xheW91dCB7IGxhYnBjX3BsdXNfbGF5b3V0LCBsYWJwY18xMjAwX2xheW91dCB9OworZW51bSB0cmFuc2Zlcl90eXBlIHsgZmlmb19ub3RfZW1wdHlfdHJhbnNmZXIsIGZpZm9faGFsZl9mdWxsX3RyYW5zZmVyLAorCQlpc2FfZG1hX3RyYW5zZmVyIH07CisKK3R5cGVkZWYgc3RydWN0IGxhYnBjX2JvYXJkX3N0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOwkJLy8gZGV2aWNlIGlkIGZvciBwY2kgYW5kIHBjbWNpYSBib2FyZHMKKwlpbnQgYWlfc3BlZWQ7CQkvLyBtYXhpbXVtIGlucHV0IHNwZWVkIGluIG5hbm9zZWNvbmRzCisJZW51bSBsYWJwY19idXN0eXBlIGJ1c3R5cGU7CS8vIElTQS9QQ0kvZXRjLgorCWVudW0gbGFicGNfcmVnaXN0ZXJfbGF5b3V0IHJlZ2lzdGVyX2xheW91dDsJLy8gMTIwMCBoYXMgZXh0cmEgcmVnaXN0ZXJzIGNvbXBhcmVkIHRvIHBjKworCWludCBoYXNfYW87CQkvLyBoYXMgYW5hbG9nIG91dHB1dCB0cnVlL2ZhbHNlCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlX3RhYmxlOworCWNvbnN0IGludCAqYWlfcmFuZ2VfY29kZTsKKwljb25zdCBpbnQgKmFpX3JhbmdlX2lzX3VuaXBvbGFyOworCXVuc2lnbmVkIGFpX3NjYW5fdXA6MTsJLy8gYm9hcmQgY2FuIGF1dG8gc2NhbiB1cCBpbiBhaSBjaGFubmVscywgbm90IGp1c3QgZG93bgorCXVuc2lnbmVkIG1lbW9yeV9tYXBwZWRfaW86MTsJLyogdXNlcyBtZW1vcnkgbWFwcGVkIGlvIGluc3RlYWQgb2YgaW9wb3J0cyAqLworfSBsYWJwY19ib2FyZDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsJLy8gZm9yIG1pdGUgY2hpcCBvbiBwY2ktMTIwMAorCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBjb3VudDsJLyogbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGxlZnQgdG8gYmUgdGFrZW4gKi8KKwl1bnNpZ25lZCBpbnQgYW9fdmFsdWVbTlVNX0FPX0NIQU5dOwkvLyBzb2Z0d2FyZSBjb3B5IG9mIGFuYWxvZyBvdXRwdXQgdmFsdWVzCisJLy8gc29mdHdhcmUgY29weXMgb2YgYml0cyB3cml0dGVuIHRvIGNvbW1hbmQgcmVnaXN0ZXJzCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbW1hbmQxX2JpdHM7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbW1hbmQyX2JpdHM7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbW1hbmQzX2JpdHM7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbW1hbmQ0X2JpdHM7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbW1hbmQ1X2JpdHM7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbW1hbmQ2X2JpdHM7CisJLy8gc3RvcmUgbGFzdCByZWFkIG9mIGJvYXJkIHN0YXR1cyByZWdpc3RlcnMKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3RhdHVzMV9iaXRzOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzdGF0dXMyX2JpdHM7CisJdW5zaWduZWQgaW50IGRpdmlzb3JfYTA7CS8qIHZhbHVlIHRvIGxvYWQgaW50byBib2FyZCdzIGNvdW50ZXIgYTAgKGNvbnZlcnNpb24gcGFjaW5nKSBmb3IgdGltZWQgY29udmVyc2lvbnMgKi8KKwl1bnNpZ25lZCBpbnQgZGl2aXNvcl9iMDsJLyogdmFsdWUgdG8gbG9hZCBpbnRvIGJvYXJkJ3MgY291bnRlciBiMCAobWFzdGVyKSBmb3IgdGltZWQgY29udmVyc2lvbnMgKi8KKwl1bnNpZ25lZCBpbnQgZGl2aXNvcl9iMTsJLyogdmFsdWUgdG8gbG9hZCBpbnRvIGJvYXJkJ3MgY291bnRlciBiMSAoc2NhbiBwYWNpbmcpIGZvciB0aW1lZCBjb252ZXJzaW9ucyAqLworCXVuc2lnbmVkIGludCBkbWFfY2hhbjsJLy8gZG1hIGNoYW5uZWwgdG8gdXNlCisJdTE2ICpkbWFfYnVmZmVyOwkvLyBidWZmZXIgYWkgd2lsbCBkbWEgaW50bworCXVuc2lnbmVkIGludCBkbWFfdHJhbnNmZXJfc2l6ZTsJLy8gdHJhbnNmZXIgc2l6ZSBpbiBieXRlcyBmb3IgY3VycmVudCB0cmFuc2ZlcgorCWVudW0gdHJhbnNmZXJfdHlwZSBjdXJyZW50X3RyYW5zZmVyOwkvLyB3ZSBhcmUgdXNpbmcgZG1hL2ZpZm8taGFsZi1mdWxsL2V0Yy4KKwl1bnNpZ25lZCBpbnQgZWVwcm9tX2RhdGFbRUVQUk9NX1NJWkVdOwkvLyBzdG9yZXMgY29udGVudHMgb2YgYm9hcmQncyBlZXByb20KKwl1bnNpZ25lZCBpbnQgY2FsZGFjWzE2XTsJLy8gc3RvcmVzIHNldHRpbmdzIG9mIGNhbGlicmF0aW9uIGRhY3MKKwkvLyBmdW5jdGlvbiBwb2ludGVycyBzbyB3ZSBjYW4gdXNlIGluYi9vdXRiIG9yIHJlYWRiL3dyaXRlYiBhcyBhcHByb3ByaWF0ZQorCXVuc2lnbmVkIGludCAoKnJlYWRfYnl0ZSkgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisJdm9pZCAoKndyaXRlX2J5dGUpICh1bnNpZ25lZCBpbnQgYnl0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK30gbGFicGNfcHJpdmF0ZTsKKworaW50IGxhYnBjX2NvbW1vbl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgaW9iYXNlLAorCXVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkbWEpOworaW50IGxhYnBjX2NvbW1vbl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitleHRlcm4gY29uc3QgaW50IGxhYnBjXzEyMDBfaXNfdW5pcG9sYXJbXTsKK2V4dGVybiBjb25zdCBpbnQgbGFicGNfMTIwMF9haV9nYWluX2JpdHNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9sYWJwY18xMjAwX2FpOworCisjZW5kaWYgLyogX05JX0xBQlBDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwY2UyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCkBAIC0wLDAgKzEsNTczIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMKKyAgICBEcml2ZXIgZm9yIE5hdGlvbmFsIEluc3RydW1lbnRzIGRhcWNhcmQtMTIwMCBib2FyZHMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAgUENNQ0lBIGNyYXAgaXMgYWRhcHRlZCBmcm9tIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzCisgICAgZnJvbSB0aGUgcGNtY2lhIHBhY2thZ2UuCisgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBwY21jaWEgZHVtbXlfY3MuYyBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IG5pX2xhYnBjX2NzCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgTGFiLVBDICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIERBUUNhcmQtMTIwMCAoZGFxY2FyZC0xMjAwKQorU3RhdHVzOiB3b3JrcworCitUaGFua3MgZ28gdG8gRnJlZHJpayBMaW5ndmFsbCBmb3IgbXVjaCB0ZXN0aW5nIGFuZCBwZXJzZXZlcmFuY2UgaW4KK2hlbHBpbmcgdG8gZGVidWcgZGFxY2FyZC0xMjAwIHN1cHBvcnQuCisKK1RoZSAxMjAwIHNlcmllcyBib2FyZHMgaGF2ZSBvbmJvYXJkIGNhbGlicmF0aW9uIGRhY3MgZm9yIGNvcnJlY3RpbmcKK2FuYWxvZyBpbnB1dC9vdXRwdXQgb2Zmc2V0cyBhbmQgZ2FpbnMuICBUaGUgcHJvcGVyIHNldHRpbmdzIGZvciB0aGVzZQorY2FsZGFjcyBhcmUgc3RvcmVkIG9uIHRoZSBib2FyZCdzIGVlcHJvbS4gIFRvIHJlYWQgdGhlIGNhbGRhYyB2YWx1ZXMKK2Zyb20gdGhlIGVlcHJvbSBhbmQgc3RvcmUgdGhlbSBpbnRvIGEgZmlsZSB0aGF0IGNhbiBiZSB0aGVuIGJlIHVzZWQgYnkKK2NvbWVkaWxpYiwgdXNlIHRoZSBjb21lZGlfY2FsaWJyYXRlIHByb2dyYW0uCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgbm9uZQorCitUaGUgZGFxY2FyZC0xMjAwIGhhcyBxdWlya3kgY2hhbmxpc3QgcmVxdWlyZW1lbnRzCit3aGVuIHNjYW5uaW5nIG11bHRpcGxlIGNoYW5uZWxzLiAgTXVsdGlwbGUgY2hhbm5lbCBzY2FuCitzZXF1ZW5jZSBtdXN0IHN0YXJ0IGF0IGhpZ2hlc3QgY2hhbm5lbCwgdGhlbiBkZWNyZW1lbnQgZG93biB0bworY2hhbm5lbCAwLiAgQ2hhbmxpc3RzIGNvbnNpc3Rpbmcgb2YgYWxsIG9uZSBjaGFubmVsCithcmUgYWxzbyBsZWdhbCwgYW5kIGFsbG93IHlvdSB0byBwYWNlIGNvbnZlcnNpb25zIGluIGJ1cnN0cy4KKworKi8KKworLyoKKworTkkgbWFudWFsczoKKzM0MDk4OGEgKGRhcWNhcmQtMTIwMCkKKworKi8KKworI3VuZGVmIExBQlBDX0RFQlVHCisvLyNkZWZpbmUgTEFCUENfREVCVUcgICAvLyBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiODI1NS5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorI2luY2x1ZGUgIm5pX2xhYnBjLmgiCisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9jdXJfZGV2ID0gTlVMTDsKKworc3RhdGljIGludCBsYWJwY19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworCitzdGF0aWMgY29uc3QgbGFicGNfYm9hcmQgbGFicGNfY3NfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkYXFjYXJkLTEyMDAiLAorCSAgICAgIGRldmljZV9pZDoweDEwMywJLy8gMHgxMGIgaXMgbWFudWZhY3R1cmVyIGlkLCAweDEwMyBpcyBkZXZpY2UgaWQKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBidXN0eXBlOglwY21jaWFfYnVzdHlwZSwKKwkgICAgICByZWdpc3Rlcl9sYXlvdXQ6bGFicGNfMTIwMF9sYXlvdXQsCisJICAgICAgaGFzX2FvOgkxLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZyYW5nZV9sYWJwY18xMjAwX2FpLAorCSAgICAgIGFpX3JhbmdlX2NvZGU6bGFicGNfMTIwMF9haV9nYWluX2JpdHMsCisJICAgICAgYWlfcmFuZ2VfaXNfdW5pcG9sYXI6bGFicGNfMTIwMF9pc191bmlwb2xhciwKKwkgICAgICBhaV9zY2FuX3VwOjAsCisJICAgICAgbWVtb3J5X21hcHBlZF9pbzowLAorCQl9LAorCS8qIGR1cGxpY2F0ZSBlbnRyeSwgdG8gc3VwcG9ydCB1c2luZyBhbHRlcm5hdGUgbmFtZSAqLworCXsKKwkgICAgICBuYW1lOgkibmlfbGFicGNfY3MiLAorCSAgICAgIGRldmljZV9pZDoweDEwMywKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBidXN0eXBlOglwY21jaWFfYnVzdHlwZSwKKwkgICAgICByZWdpc3Rlcl9sYXlvdXQ6bGFicGNfMTIwMF9sYXlvdXQsCisJICAgICAgaGFzX2FvOgkxLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZyYW5nZV9sYWJwY18xMjAwX2FpLAorCSAgICAgIGFpX3JhbmdlX2NvZGU6bGFicGNfMTIwMF9haV9nYWluX2JpdHMsCisJICAgICAgYWlfcmFuZ2VfaXNfdW5pcG9sYXI6bGFicGNfMTIwMF9pc191bmlwb2xhciwKKwkgICAgICBhaV9zY2FuX3VwOjAsCisJICAgICAgbWVtb3J5X21hcHBlZF9pbzowLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBsYWJwY19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2xhYnBjX2NzID0geworCS5kcml2ZXJfbmFtZSA9ICJuaV9sYWJwY19jcyIsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5hdHRhY2ggPSAmbGFicGNfYXR0YWNoLAorCS5kZXRhY2ggPSAmbGFicGNfY29tbW9uX2RldGFjaCwKKwkubnVtX25hbWVzID0gc2l6ZW9mKGxhYnBjX2NzX2JvYXJkcykgLyBzaXplb2YobGFicGNfYm9hcmQpLAorCS5ib2FyZF9uYW1lID0gJmxhYnBjX2NzX2JvYXJkc1swXS5uYW1lLAorCS5vZmZzZXQgPSBzaXplb2YobGFicGNfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBsYWJwY19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSAwOworCXVuc2lnbmVkIGludCBpcnEgPSAwOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YobGFicGNfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvLyBnZXQgYmFzZSBhZGRyZXNzLCBpcnEgZXRjLiBiYXNlZCBvbiBidXN0eXBlCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIHBjbWNpYV9idXN0eXBlOgorCQlsaW5rID0gcGNtY2lhX2N1cl9kZXY7CS8qIFhYWCBoYWNrICovCisJCWlmICghbGluaykKKwkJCXJldHVybiAtRUlPOworCQlpb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJCWlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJidWchIGNvdWxkbid0IGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbGFicGNfY29tbW9uX2F0dGFjaChkZXYsIGlvYmFzZSwgaXJxLCAwKTsKK30KKworLyoKKyAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCisgICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQorICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCisgICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKKyAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KKyovCisjaWZkZWYgUENNQ0lBX0RFQlVHCitzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOworbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQorc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPQorCSJuaV9sYWJwYy5jLCBiYXNlZCBvbiBkdW1teV9jcy5jIDEuMzEgMjAwMS8wOC8yNCAxMjoxMzoxMyI7CisjZWxzZQorI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorICAgVGhlIGV2ZW50KCkgZnVuY3Rpb24gaXMgdGhpcyBkcml2ZXIncyBDYXJkIFNlcnZpY2VzIGV2ZW50IGhhbmRsZXIuCisgICBJdCB3aWxsIGJlIGNhbGxlZCBieSBDYXJkIFNlcnZpY2VzIHdoZW4gYW4gYXBwcm9wcmlhdGUgY2FyZCBzdGF0dXMKKyAgIGV2ZW50IGlzIHJlY2VpdmVkLiAgVGhlIGNvbmZpZygpIGFuZCByZWxlYXNlKCkgZW50cnkgcG9pbnRzIGFyZQorICAgdXNlZCB0byBjb25maWd1cmUgb3IgcmVsZWFzZSBhIHNvY2tldCwgaW4gcmVzcG9uc2UgdG8gY2FyZAorICAgaW5zZXJ0aW9uIGFuZCBlamVjdGlvbiBldmVudHMuICBUaGV5IGFyZSBpbnZva2VkIGZyb20gdGhlIGR1bW15CisgICBldmVudCBoYW5kbGVyLgorCisgICBLZXJuZWwgdmVyc2lvbiAyLjYuMTYgdXB3YXJkcyB1c2VzIHN1c3BlbmQoKSBhbmQgcmVzdW1lKCkgZnVuY3Rpb25zCisgICBpbnN0ZWFkIG9mIGFuIGV2ZW50KCkgZnVuY3Rpb24uCisqLworCitzdGF0aWMgdm9pZCBsYWJwY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgbGFicGNfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgaW50IGxhYnBjX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK3N0YXRpYyBpbnQgbGFicGNfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CisKKy8qCisgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKKyAgICJpbnN0YW5jZXMiIG9mIHRoZSBkcml2ZXIsIHdoZXJlIGVhY2ggaW5zdGFuY2UgcmVwcmVzZW50cyBldmVyeXRoaW5nCisgICBuZWVkZWQgdG8gbWFuYWdlIG9uZSBhY3R1YWwgUENNQ0lBIGNhcmQuCisqLworCitzdGF0aWMgaW50IGxhYnBjX2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIGxhYnBjX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKKworLyoKKyAgIFlvdSdsbCBhbHNvIG5lZWQgdG8gcHJvdG90eXBlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBhY3R1YWxseQorICAgYmUgdXNlZCB0byB0YWxrIHRvIHlvdXIgZGV2aWNlLiAgU2VlICdtZW1vcnlfY3MnIGZvciBhIGdvb2QgZXhhbXBsZQorICAgb2YgYSBmdWxseSBzZWxmLXN1ZmZpY2llbnQgZHJpdmVyOyB0aGUgb3RoZXIgZHJpdmVycyByZWx5IG1vcmUgb3IKKyAgIGxlc3Mgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KKyovCisKKy8qCisgICBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCisgICBkZXZpY2UgZHJpdmVyIHdpdGggYXBwcm9wcmlhdGUgY2FyZHMsIHRocm91Z2ggdGhlIGNhcmQgY29uZmlndXJhdGlvbgorICAgZGF0YWJhc2UuCisqLworCitzdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJkYXFjYXJkLTEyMDAiOworCit0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgeworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWRldl9ub2RlX3Qgbm9kZTsKKwlpbnQgc3RvcDsKKwlzdHJ1Y3QgYnVzX29wZXJhdGlvbnMgKmJ1czsKK30gbG9jYWxfaW5mb190OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGxhYnBjX2NzX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCisgICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLgorCisgICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CisgICAgY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEKKyAgICBjYXJkIGluc2VydGlvbiBldmVudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgbGFicGNfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqbG9jYWw7CisKKwlERUJVRygwLCAibGFicGNfY3NfYXR0YWNoKClcbiIpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworCWlmICghbG9jYWwpCisJCXJldHVybiAtRU5PTUVNOworCWxvY2FsLT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gbG9jYWw7CisKKwkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9GT1JDRURfUFVMU0U7CisJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0lORk8yX1ZBTElEIHwgSVJRX1BVTFNFX0lEOworCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKKworCS8qCisJICAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKKwkgICBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IgYWxtb3N0CisJICAgZXZlcnl0aGluZy4gIEluIG1vc3QgY2xpZW50cywgbWFueSBkZXRhaWxzIChpLmUuLCBudW1iZXIsIHNpemVzLAorCSAgIGFuZCBhdHRyaWJ1dGVzIG9mIElPIHdpbmRvd3MpIGFyZSBmaXhlZCBieSB0aGUgbmF0dXJlIG9mIHRoZQorCSAgIGRldmljZSwgYW5kIGNhbiBiZSBoYXJkLXdpcmVkIGhlcmUuCisJICovCisJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKKwlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKworCXBjbWNpYV9jdXJfZGV2ID0gbGluazsKKworCWxhYnBjX2NvbmZpZyhsaW5rKTsKKworCXJldHVybiAwOworfQkJCQkvKiBsYWJwY19jc19hdHRhY2ggKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4gIElmIGl0IGhhcyBiZWVuIHJlbGVhc2VkLCBhbGwgbG9jYWwgZGF0YQorICAgIHN0cnVjdHVyZXMgYXJlIGZyZWVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RydWN0dXJlcyB3aWxsIGJlIGZyZWVkCisgICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgbGFicGNfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJsYWJwY19jc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCisJLyoKKwkgICBJZiB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseSBjb25maWd1cmVkIGFuZCBhY3RpdmUsIHdlIHdvbid0CisJICAgYWN0dWFsbHkgZGVsZXRlIGl0IHlldC4gIEluc3RlYWQsIGl0IGlzIG1hcmtlZCBzbyB0aGF0IHdoZW4KKwkgICB0aGUgcmVsZWFzZSgpIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhhdCB3aWxsIHRyaWdnZXIgYSBwcm9wZXIKKwkgICBkZXRhY2goKS4KKwkgKi8KKwlpZiAobGluay0+ZGV2X25vZGUpIHsKKwkJKChsb2NhbF9pbmZvX3QgKikgbGluay0+cHJpdiktPnN0b3AgPSAxOworCQlsYWJwY19yZWxlYXNlKGxpbmspOworCX0KKworCS8qIFRoaXMgcG9pbnRzIHRvIHRoZSBwYXJlbnQgbG9jYWxfaW5mb190IHN0cnVjdCAqLworCWlmIChsaW5rLT5wcml2KQorCQlrZnJlZShsaW5rLT5wcml2KTsKKworfQkJCQkvKiBsYWJwY19jc19kZXRhY2ggKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBsYWJwY19jb25maWcoKSBpcyBzY2hlZHVsZWQgdG8gcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQKKyAgICBpcyByZWNlaXZlZCwgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0LCBhbmQgdG8gbWFrZSB0aGUKKyAgICBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBsYWJwY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OworCXR1cGxlX3QgdHVwbGU7CisJY2lzcGFyc2VfdCBwYXJzZTsKKwlpbnQgbGFzdF9yZXQ7CisJdV9jaGFyIGJ1Zls2NF07CisJd2luX3JlcV90IHJlcTsKKwltZW1yZXFfdCBtYXA7CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CisKKwlERUJVRygwLCAibGFicGNfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKworCS8qCisJICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCisJICAgcmVnaXN0ZXJzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSkgeworCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworCS8qCisJICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKwkgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCisJICAgdm9sdGFnZSwgSU8gd2luZG93LCBtZW1vcnkgd2luZG93LCBhbmQgaW50ZXJydXB0IHNldHRpbmdzLgorCisJICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKwkgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAorCSAgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQorCSAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKwkgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCisJICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpCisJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJZGZsdCA9ICpjZmc7CisJCWlmIChjZmctPmluZGV4ID09IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworCisJCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisJCX0KKworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQorCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisKKwkJaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQubWVtLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX21lbV90ICptZW0gPQorCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0Lm1lbTsKKwkJCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTYgfCBXSU5fTUVNT1JZX1RZUEVfQ007CisJCQlyZXEuQXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCQkJcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7CisJCQlyZXEuU2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKKwkJCWlmIChyZXEuU2l6ZSA8IDB4MTAwMCkKKwkJCQlyZXEuU2l6ZSA9IDB4MTAwMDsKKwkJCXJlcS5BY2Nlc3NTcGVlZCA9IDA7CisJCQlsaW5rLT53aW4gPSAod2luZG93X2hhbmRsZV90KSBsaW5rOworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQkJbWFwLlBhZ2UgPSAwOworCQkJbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7CisJCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtYXApKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJfQorCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJICAgICAgbmV4dF9lbnRyeToKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSkgeworCQkJY3NfZXJyb3IobGluaywgR2V0TmV4dFR1cGxlLCBsYXN0X3JldCk7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkJfQorCX0KKworCS8qCisJICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQorCSAgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQorCSAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkpIHsKKwkJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisKKwkvKgorCSAgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQorCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCisJICovCisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSkgeworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisKKwkvKgorCSAgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCisJICAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2LgorCSAqLworCXNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCAiZGFxY2FyZC0xMjAwIik7CisJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CisKKwkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeCIsCisJCWRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKKwkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQlsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMyKQorCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCisJCQlsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKKwlpZiAobGluay0+d2luKQorCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS5CYXNlLAorCQkJcmVxLkJhc2UgKyByZXEuU2l6ZSAtIDEpOworCXByaW50aygiXG4iKTsKKworCXJldHVybjsKKworICAgICAgY3NfZmFpbGVkOgorCWxhYnBjX3JlbGVhc2UobGluayk7CisKK30JCQkJLyogbGFicGNfY29uZmlnICovCisKK3N0YXRpYyB2b2lkIGxhYnBjX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJREVCVUcoMCwgImxhYnBjX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworfQkJCQkvKiBsYWJwY19yZWxlYXNlICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGNhcmQgc3RhdHVzIGV2ZW50IGhhbmRsZXIuICBNb3N0bHksIHRoaXMgc2NoZWR1bGVzIG90aGVyCisgICAgc3R1ZmYgdG8gcnVuIGFmdGVyIGFuIGV2ZW50IGlzIHJlY2VpdmVkLgorCisgICAgV2hlbiBhIENBUkRfUkVNT1ZBTCBldmVudCBpcyByZWNlaXZlZCwgd2UgaW1tZWRpYXRlbHkgc2V0IGEKKyAgICBwcml2YXRlIGZsYWcgdG8gYmxvY2sgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZGV2aWNlLiAgQWxsIHRoZQorICAgIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGFjY2VzcyB0aGUgZGV2aWNlIHNob3VsZCBjaGVjayB0aGlzIGZsYWcKKyAgICB0byBtYWtlIHN1cmUgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgbGFicGNfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLworCWxvY2FsLT5zdG9wID0gMTsKKwlyZXR1cm4gMDsKK30JCQkJLyogbGFicGNfY3Nfc3VzcGVuZCAqLworCitzdGF0aWMgaW50IGxhYnBjX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCWxvY2FsLT5zdG9wID0gMDsKKwlyZXR1cm4gMDsKK30JCQkJLyogbGFicGNfY3NfcmVzdW1lICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgbGFicGNfY3NfaWRzW10gPSB7CisJLyogTi5CLiBUaGVzZSBJRHMgc2hvdWxkIG1hdGNoIHRob3NlIGluIGxhYnBjX2NzX2JvYXJkcyAobmlfbGFicGMuYykgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMGIsIDB4MDEwMyksCS8qIGRhcWNhcmQtMTIwMCAqLworCVBDTUNJQV9ERVZJQ0VfTlVMTAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIGxhYnBjX2NzX2lkcyk7CisKK3N0cnVjdCBwY21jaWFfZHJpdmVyIGxhYnBjX2NzX2RyaXZlciA9IHsKKwkucHJvYmUgPSBsYWJwY19jc19hdHRhY2gsCisJLnJlbW92ZSA9IGxhYnBjX2NzX2RldGFjaCwKKwkuc3VzcGVuZCA9IGxhYnBjX2NzX3N1c3BlbmQsCisJLnJlc3VtZSA9IGxhYnBjX2NzX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSBsYWJwY19jc19pZHMsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRydiA9IHsKKwkJCS5uYW1lID0gZGV2X2luZm8sCisJCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2xhYnBjX2NzKHZvaWQpCit7CisJREVCVUcoMCwgIiVzXG4iLCB2ZXJzaW9uKTsKKwlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZsYWJwY19jc19kcml2ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9sYWJwY19jcyh2b2lkKQoreworCURFQlVHKDAsICJuaV9sYWJwYzogdW5sb2FkaW5nXG4iKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmxhYnBjX2NzX2RyaXZlcik7Cit9CisKK2ludCBfX2luaXQgbGFicGNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW5pdF9sYWJwY19jcygpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9sYWJwY19jcyk7Cit9CisKK3ZvaWQgX19leGl0IGxhYnBjX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJZXhpdF9sYWJwY19jcygpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2xhYnBjX2NzKTsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX2luaXQobGFicGNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQobGFicGNfZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyYmQwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKQEAgLTAsMCArMSw1ODYyIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYworICAgIEhhcmR3YXJlIGRyaXZlciBmb3IgREFRLVNUQyBiYXNlZCBib2FyZHMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworLyoKKwlUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgaW5jbHVkZWQgYnkgYW5vdGhlciBmaWxlLCBlLmcuLAorCW5pX2F0bWlvLmMgb3IgbmlfcGNpbWlvLmMuCisKKwlJbnRlcnJ1cHQgc3VwcG9ydCBvcmlnaW5hbGx5IGFkZGVkIGJ5IFRydXh0b24gRnVsdG9uCisJPHRydXhAdHJ1eHRvbi5jb20+CisKKwlSZWZlcmVuY2VzIChmcm9tIGZ0cDovL2Z0cC5uYXRpbnN0LmNvbS9zdXBwb3J0L21hbnVhbHMpOgorCisJICAgMzQwNzQ3Yi5wZGYgIEFULU1JTyBFIHNlcmllcyBSZWdpc3RlciBMZXZlbCBQcm9ncmFtbWVyIE1hbnVhbAorCSAgIDM0MTA3OWIucGRmICBQQ0kgRSBTZXJpZXMgUkxQTQorCSAgIDM0MDkzNGIucGRmICBEQVEtU1RDIHJlZmVyZW5jZSBtYW51YWwKKwk2N3h4IGFuZCA2MTF4IHJlZ2lzdGVycyAoZnJvbSBodHRwOi8vd3d3Lm5pLmNvbS9wZGYvZGFxL3VzKQorCXJlbGVhc2Vfbmk2MTF4LnBkZgorCXJlbGVhc2Vfbmk2N3h4LnBkZgorCU90aGVyIHBvc3NpYmx5IHJlbGV2YW50IGluZm86CisKKwkgICAzMjA1MTdjLnBkZiAgVXNlciBtYW51YWwgKG9ic29sZXRlKQorCSAgIDMyMDUxN2YucGRmICBVc2VyIG1hbnVhbCAobmV3KQorCSAgIDMyMDg4OWEucGRmICBkZWxldGUKKwkgICAzMjA5MDZjLnBkZiAgbWF4aW11bSBzaWduYWwgcmF0aW5ncworCSAgIDMyMTA2NmEucGRmICBhYm91dCAxNngKKwkgICAzMjE3OTFhLnBkZiAgZGlzY29udGludWF0aW9uIG9mIGF0LW1pby0xNmUtMTAgcmV2LiBjCisJICAgMzIxODA4YS5wZGYgIGFib3V0IGF0LW1pby0xNmUtMTAgcmV2IFAKKwkgICAzMjE4MzdhLnBkZiAgZGlzY29udGludWF0aW9uIG9mIGF0LW1pby0xNmRlLTEwIHJldiBkCisJICAgMzIxODM4YS5wZGYgIGFib3V0IGF0LW1pby0xNmRlLTEwIHJldiBOCisKKwlJU1NVRVM6CisKKwkgLSB0aGUgaW50ZXJydXB0IHJvdXRpbmUgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cAorCisJMjAwNi0wMi0wNzogUy1TZXJpZXMgUENJLTYxNDM6IFN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgYnV0IGlzIG5vdAorCQlmdWxseSB0ZXN0ZWQgYXMgeWV0LiBUZXJyeSBCYXJuYWJ5LCBCRUFNIEx0ZC4KKyovCisKKy8vI2RlZmluZSBERUJVR19JTlRFUlJVUFQKKy8vI2RlZmluZSBERUJVR19TVEFUVVNfQQorLy8jZGVmaW5lIERFQlVHX1NUQVRVU19CCisKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAibWl0ZS5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisjaWZuZGVmIE1EUFJJTlRLCisjZGVmaW5lIE1EUFJJTlRLKGZvcm1hdCxhcmdzLi4uKQorI2VuZGlmCisKKy8qIEEgdGltZW91dCBjb3VudCAqLworI2RlZmluZSBOSV9USU1FT1VUIDEwMDAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBvbGRfUlRTSV9jbG9ja19jaGFubmVsID0gNzsKKworLyogTm90ZTogdGhpcyB0YWJsZSBtdXN0IG1hdGNoIHRoZSBhaV9nYWluXyogZGVmaW5pdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzaG9ydCBuaV9nYWlubGt1cFtdWzE2XSA9IHsKKwlbYWlfZ2Fpbl8xNl0gPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywKKwkJMHgxMDAsIDB4MTAxLCAweDEwMiwgMHgxMDMsIDB4MTA0LCAweDEwNSwgMHgxMDYsIDB4MTA3fSwKKwlbYWlfZ2Fpbl84XSA9IHsxLCAyLCA0LCA3LCAweDEwMSwgMHgxMDIsIDB4MTA0LCAweDEwN30sCisJW2FpX2dhaW5fMTRdID0gezEsIDIsIDMsIDQsIDUsIDYsIDcsCisJCTB4MTAxLCAweDEwMiwgMHgxMDMsIDB4MTA0LCAweDEwNSwgMHgxMDYsIDB4MTA3fSwKKwlbYWlfZ2Fpbl80XSA9IHswLCAxLCA0LCA3fSwKKwlbYWlfZ2Fpbl82MTF4XSA9IHsweDAwYSwgMHgwMGIsIDB4MDAxLCAweDAwMiwKKwkJMHgwMDMsIDB4MDA0LCAweDAwNSwgMHgwMDZ9LAorCVthaV9nYWluXzYyMnhdID0gezAsIDEsIDQsIDV9LAorCVthaV9nYWluXzYyOHhdID0gezEsIDIsIDMsIDQsIDUsIDYsIDd9LAorCVthaV9nYWluXzYxNDNdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX0VfYWkgPSB7IDE2LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoLTAuMjUsIDAuMjUpLAorCQkJUkFOR0UoLTAuMSwgMC4xKSwKKwkJCVJBTkdFKC0wLjA1LCAwLjA1KSwKKwkJCVJBTkdFKDAsIDIwKSwKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMiksCisJCQlSQU5HRSgwLCAxKSwKKwkJCVJBTkdFKDAsIDAuNSksCisJCQlSQU5HRSgwLCAwLjIpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX0VfYWlfbGltaXRlZCA9IHsgOCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAxKSwKKwkJCVJBTkdFKDAsIDAuMSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9FX2FpX2xpbWl0ZWQxNCA9IHsgMTQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIsIDIpLAorCQkJUkFOR0UoLTEsIDEpLAorCQkJUkFOR0UoLTAuNSwgMC41KSwKKwkJCVJBTkdFKC0wLjIsIDAuMiksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyKSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC41KSwKKwkJCVJBTkdFKDAsIDAuMiksCisJCQlSQU5HRSgwLCAwLjEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9haV9iaXBvbGFyNCA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoLTAuMDUsIDAuMDUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9haV82MTF4ID0geyA4LCB7CisJCQlSQU5HRSgtNTAsIDUwKSwKKwkJCVJBTkdFKC0yMCwgMjApLAorCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMiwgMiksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoLTAuMiwgMC4yKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX01fYWlfNjIyeCA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC4yLCAwLjIpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfTV9haV82Mjh4ID0geyA3LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLCAyKSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjUsIDAuNSksCisJCQlSQU5HRSgtMC4yLCAwLjIpLAorCQkJUkFOR0UoLTAuMSwgMC4xKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX1NfYWlfNjE0MyA9IHsgMSwgeworCQkJUkFOR0UoLTUsICs1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX0VfYW9fZXh0ID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFX2V4dCgtMSwgMSksCisJCQlSQU5HRV9leHQoMCwgMSksCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCBuaV9yYW5nZV9sa3VwW10gPSB7CisJW2FpX2dhaW5fMTZdID0gJnJhbmdlX25pX0VfYWksCisJW2FpX2dhaW5fOF0gPSAmcmFuZ2VfbmlfRV9haV9saW1pdGVkLAorCVthaV9nYWluXzE0XSA9ICZyYW5nZV9uaV9FX2FpX2xpbWl0ZWQxNCwKKwlbYWlfZ2Fpbl80XSA9ICZyYW5nZV9uaV9FX2FpX2JpcG9sYXI0LAorCVthaV9nYWluXzYxMXhdID0gJnJhbmdlX25pX0VfYWlfNjExeCwKKwlbYWlfZ2Fpbl82MjJ4XSA9ICZyYW5nZV9uaV9NX2FpXzYyMngsCisJW2FpX2dhaW5fNjI4eF0gPSAmcmFuZ2VfbmlfTV9haV82Mjh4LAorCVthaV9nYWluXzYxNDNdID0gJnJhbmdlX25pX1NfYWlfNjE0MworfTsKKworc3RhdGljIGludCBuaV9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9jZGlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IG5pX2NkaW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBuaV9jZGlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9jZGlvX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IG5pX2Nkb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pOworCitzdGF0aWMgaW50IG5pX3NlcmlhbF9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9zZXJpYWxfaHdfcmVhZHdyaXRlOChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGNoYXIgZGF0YV9vdXQsIHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4pOworc3RhdGljIGludCBuaV9zZXJpYWxfc3dfcmVhZHdyaXRlOChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGNoYXIgZGF0YV9vdXQsIHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4pOworCitzdGF0aWMgaW50IG5pX2NhbGliX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9jYWxpYl9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgbmlfZWVwcm9tX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9tX3Nlcmllc19lZXByb21faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgbmlfcGZpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9wZmlfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyB1bnNpZ25lZCBuaV9vbGRfZ2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuKTsKKworc3RhdGljIHZvaWQgbmlfcnRzaV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgbmlfcnRzaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfcnRzaV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgdm9pZCBjYWxkYWNfc2V0dXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IG5pX3JlYWRfZWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYWRkcik7CisKKyNpZmRlZiBERUJVR19TVEFUVVNfQQorc3RhdGljIHZvaWQgbmlfbWlvX3ByaW50X3N0YXR1c19hKGludCBzdGF0dXMpOworI2Vsc2UKKyNkZWZpbmUgbmlfbWlvX3ByaW50X3N0YXR1c19hKGEpCisjZW5kaWYKKyNpZmRlZiBERUJVR19TVEFUVVNfQgorc3RhdGljIHZvaWQgbmlfbWlvX3ByaW50X3N0YXR1c19iKGludCBzdGF0dXMpOworI2Vsc2UKKyNkZWZpbmUgbmlfbWlvX3ByaW50X3N0YXR1c19iKGEpCisjZW5kaWYKKworc3RhdGljIGludCBuaV9haV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKyNpZm5kZWYgUENJRE1BCitzdGF0aWMgdm9pZCBuaV9oYW5kbGVfZmlmb19oYWxmX2Z1bGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBuaV9hb19maWZvX2hhbGZfZW1wdHkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIG5pX2hhbmRsZV9maWZvX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgbmlfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKTsKK3N0YXRpYyB2b2lkIG5pX2xvYWRfY2hhbm5lbGdhaW5fbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG5fY2hhbiwKKwl1bnNpZ25lZCBpbnQgKmxpc3QpOworc3RhdGljIHZvaWQgc2h1dGRvd25fYWlfY29tbWFuZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBpbnQgbmlfYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKTsKKworc3RhdGljIGludCBuaV9hb19yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIGludCBuaV84MjU1X2NhbGxiYWNrKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBhcmcpOworCitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9ncGN0X2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9ncGN0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2dwY3RfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBuaV9ncGN0X2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IG5pX2dwY3RfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgaGFuZGxlX2dwY3RfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIHNob3J0IGNvdW50ZXJfaW5kZXgpOworCitzdGF0aWMgaW50IGluaXRfY3M1NTI5KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgY3M1NTI5X2RvX2NvbnZlcnNpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0ICpkYXRhKTsKK3N0YXRpYyBpbnQgY3M1NTI5X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworI2lmZGVmIE5JX0NTNTUyOV9ERUJVRworc3RhdGljIHVuc2lnbmVkIGludCBjczU1MjlfY29uZmlnX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IHJlZ19zZWxlY3RfYml0cyk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIGNzNTUyOV9jb25maWdfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCB2YWx1ZSwKKwl1bnNpZ25lZCBpbnQgcmVnX3NlbGVjdF9iaXRzKTsKKworc3RhdGljIGludCBuaV9tX3Nlcmllc19wd21fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pXzYxNDNfcHdtX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IG5pX3NldF9tYXN0ZXJfY2xvY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNvdXJjZSwKKwl1bnNpZ25lZCBwZXJpb2RfbnMpOworc3RhdGljIHZvaWQgYWNrX2FfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBzaG9ydCBhX3N0YXR1cyk7CitzdGF0aWMgdm9pZCBhY2tfYl9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IGJfc3RhdHVzKTsKKworZW51bSBhaW1vZGVzIHsKKwlBSU1PREVfTk9ORSA9IDAsCisJQUlNT0RFX0hBTEZfRlVMTCA9IDEsCisJQUlNT0RFX1NDQU4gPSAyLAorCUFJTU9ERV9TQU1QTEUgPSAzLAorfTsKKworZW51bSBuaV9jb21tb25fc3ViZGV2aWNlcyB7CisJTklfQUlfU1VCREVWLAorCU5JX0FPX1NVQkRFViwKKwlOSV9ESU9fU1VCREVWLAorCU5JXzgyNTVfRElPX1NVQkRFViwKKwlOSV9VTlVTRURfU1VCREVWLAorCU5JX0NBTElCUkFUSU9OX1NVQkRFViwKKwlOSV9FRVBST01fU1VCREVWLAorCU5JX1BGSV9ESU9fU1VCREVWLAorCU5JX0NTNTUyOV9DQUxJQlJBVElPTl9TVUJERVYsCisJTklfU0VSSUFMX1NVQkRFViwKKwlOSV9SVFNJX1NVQkRFViwKKwlOSV9HUENUMF9TVUJERVYsCisJTklfR1BDVDFfU1VCREVWLAorCU5JX0ZSRVFfT1VUX1NVQkRFViwKKwlOSV9OVU1fU1VCREVWSUNFUworfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfR1BDVF9TVUJERVYodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSV9HUENUMF9TVUJERVY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JX0dQQ1QxX1NVQkRFVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCUJVRygpOworCXJldHVybiBOSV9HUENUMF9TVUJERVY7Cit9CisKK2VudW0gdGltZWJhc2VfbmFub3NlY29uZHMgeworCVRJTUVCQVNFXzFfTlMgPSA1MCwKKwlUSU1FQkFTRV8yX05TID0gMTAwMDAKK307CisKKyNkZWZpbmUgU0VSSUFMX0RJU0FCTEVECQkwCisjZGVmaW5lIFNFUklBTF82MDBOUwkJNjAwCisjZGVmaW5lIFNFUklBTF8xXzJVUwkJMTIwMAorI2RlZmluZSBTRVJJQUxfMTBVUwkJCTEwMDAwCisKK3N0YXRpYyBjb25zdCBpbnQgbnVtX2FkY19zdGFnZXNfNjExeCA9IDM7CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCXVuc2lnbmVkIGFpX21pdGVfc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9iX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCXVuc2lnbmVkIGFvX21pdGVfc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGdldF9sYXN0X3NhbXBsZV82MTF4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIGdldF9sYXN0X3NhbXBsZV82MTQzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIGlubGluZSB2b2lkIG5pX3NldF9iaXRmaWVsZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IHJlZywKKwl1bnNpZ25lZCBiaXRfbWFzaywgdW5zaWduZWQgYml0X3ZhbHVlcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5zb2Z0X3JlZ19jb3B5X2xvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyOgorCQlkZXZwcml2LT5pbnRfYV9lbmFibGVfcmVnICY9IH5iaXRfbWFzazsKKwkJZGV2cHJpdi0+aW50X2FfZW5hYmxlX3JlZyB8PSBiaXRfdmFsdWVzICYgYml0X21hc2s7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5pbnRfYV9lbmFibGVfcmVnLAorCQkJSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXI6CisJCWRldnByaXYtPmludF9iX2VuYWJsZV9yZWcgJj0gfmJpdF9tYXNrOworCQlkZXZwcml2LT5pbnRfYl9lbmFibGVfcmVnIHw9IGJpdF92YWx1ZXMgJiBiaXRfbWFzazsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmludF9iX2VuYWJsZV9yZWcsCisJCQlJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIElPX0JpZGlyZWN0aW9uX1Bpbl9SZWdpc3RlcjoKKwkJZGV2cHJpdi0+aW9fYmlkaXJlY3Rpb25fcGluX3JlZyAmPSB+Yml0X21hc2s7CisJCWRldnByaXYtPmlvX2JpZGlyZWN0aW9uX3Bpbl9yZWcgfD0gYml0X3ZhbHVlcyAmIGJpdF9tYXNrOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+aW9fYmlkaXJlY3Rpb25fcGluX3JlZywKKwkJCUlPX0JpZGlyZWN0aW9uX1Bpbl9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgQUlfQU9fU2VsZWN0OgorCQlkZXZwcml2LT5haV9hb19zZWxlY3RfcmVnICY9IH5iaXRfbWFzazsKKwkJZGV2cHJpdi0+YWlfYW9fc2VsZWN0X3JlZyB8PSBiaXRfdmFsdWVzICYgYml0X21hc2s7CisJCW5pX3dyaXRlYihkZXZwcml2LT5haV9hb19zZWxlY3RfcmVnLCBBSV9BT19TZWxlY3QpOworCQlicmVhazsKKwljYXNlIEcwX0cxX1NlbGVjdDoKKwkJZGV2cHJpdi0+ZzBfZzFfc2VsZWN0X3JlZyAmPSB+Yml0X21hc2s7CisJCWRldnByaXYtPmcwX2cxX3NlbGVjdF9yZWcgfD0gYml0X3ZhbHVlcyAmIGJpdF9tYXNrOworCQluaV93cml0ZWIoZGV2cHJpdi0+ZzBfZzFfc2VsZWN0X3JlZywgRzBfRzFfU2VsZWN0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCJXYXJuaW5nICVzKCkgY2FsbGVkIHdpdGggaW52YWxpZCByZWdpc3RlclxuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCXJ0X3ByaW50aygicmVnIGlzICVkXG4iLCByZWcpOworCQlicmVhazsKKwl9CisJbW1pb3diKCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYgUENJRE1BCitzdGF0aWMgaW50IG5pX2FpX2RyYWluX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKy8qIERNQSBjaGFubmVsIHNldHVwICovCisKKy8vIG5lZ2F0aXZlIGNoYW5uZWwgbWVhbnMgbm8gY2hhbm5lbAorc3RhdGljIGlubGluZSB2b2lkIG5pX3NldF9haV9kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGNoYW5uZWwpCit7CisJdW5zaWduZWQgYml0ZmllbGQ7CisKKwlpZiAoY2hhbm5lbCA+PSAwKSB7CisJCWJpdGZpZWxkID0KKwkJCShuaV9zdGNfZG1hX2NoYW5uZWxfc2VsZWN0X2JpdGZpZWxkKGNoYW5uZWwpIDw8CisJCQlBSV9ETUFfU2VsZWN0X1NoaWZ0KSAmIEFJX0RNQV9TZWxlY3RfTWFzazsKKwl9IGVsc2UgeworCQliaXRmaWVsZCA9IDA7CisJfQorCW5pX3NldF9iaXRmaWVsZChkZXYsIEFJX0FPX1NlbGVjdCwgQUlfRE1BX1NlbGVjdF9NYXNrLCBiaXRmaWVsZCk7Cit9CisKKy8vIG5lZ2F0aXZlIGNoYW5uZWwgbWVhbnMgbm8gY2hhbm5lbAorc3RhdGljIGlubGluZSB2b2lkIG5pX3NldF9hb19kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGNoYW5uZWwpCit7CisJdW5zaWduZWQgYml0ZmllbGQ7CisKKwlpZiAoY2hhbm5lbCA+PSAwKSB7CisJCWJpdGZpZWxkID0KKwkJCShuaV9zdGNfZG1hX2NoYW5uZWxfc2VsZWN0X2JpdGZpZWxkKGNoYW5uZWwpIDw8CisJCQlBT19ETUFfU2VsZWN0X1NoaWZ0KSAmIEFPX0RNQV9TZWxlY3RfTWFzazsKKwl9IGVsc2UgeworCQliaXRmaWVsZCA9IDA7CisJfQorCW5pX3NldF9iaXRmaWVsZChkZXYsIEFJX0FPX1NlbGVjdCwgQU9fRE1BX1NlbGVjdF9NYXNrLCBiaXRmaWVsZCk7Cit9CisKKy8vIG5lZ2F0aXZlIG1pdGVfY2hhbm5lbCBtZWFucyBubyBjaGFubmVsCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2dwY3RfZG1hX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgZ3BjdF9pbmRleCwgaW50IG1pdGVfY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBiaXRmaWVsZDsKKworCWlmIChtaXRlX2NoYW5uZWwgPj0gMCkgeworCQliaXRmaWVsZCA9IEdQQ1RfRE1BX1NlbGVjdF9CaXRzKGdwY3RfaW5kZXgsIG1pdGVfY2hhbm5lbCk7CisJfSBlbHNlIHsKKwkJYml0ZmllbGQgPSAwOworCX0KKwluaV9zZXRfYml0ZmllbGQoZGV2LCBHMF9HMV9TZWxlY3QsIEdQQ1RfRE1BX1NlbGVjdF9NYXNrKGdwY3RfaW5kZXgpLAorCQliaXRmaWVsZCk7Cit9CisKKy8vIG5lZ2F0aXZlIG1pdGVfY2hhbm5lbCBtZWFucyBubyBjaGFubmVsCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2Nkb19kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1pdGVfY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5zb2Z0X3JlZ19jb3B5X2xvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5jZGlvX2RtYV9zZWxlY3RfcmVnICY9IH5DRE9fRE1BX1NlbGVjdF9NYXNrOworCWlmIChtaXRlX2NoYW5uZWwgPj0gMCkgeworCQkvKlhYWCBqdXN0IGd1ZXNzaW5nIG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQoKSByZXR1cm5zIHRoZSByaWdodCBiaXRzLAorCQkgICB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGUgY2RpbyBkbWEgc2VsZWN0aW9uIHdvcmtzIGp1c3QgbGlrZSBhaS9hby9ncGN0LgorCQkgICBEZWZpbml0ZWx5IHdvcmtzIGZvciBkbWEgY2hhbm5lbHMgMCBhbmQgMS4gKi8KKwkJZGV2cHJpdi0+Y2Rpb19kbWFfc2VsZWN0X3JlZyB8PQorCQkJKG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQobWl0ZV9jaGFubmVsKSA8PAorCQkJQ0RPX0RNQV9TZWxlY3RfU2hpZnQpICYgQ0RPX0RNQV9TZWxlY3RfTWFzazsKKwl9CisJbmlfd3JpdGViKGRldnByaXYtPmNkaW9fZG1hX3NlbGVjdF9yZWcsIE1fT2Zmc2V0X0NESU9fRE1BX1NlbGVjdCk7CisJbW1pb3diKCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG5pX3JlcXVlc3RfYWlfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKGRldnByaXYtPmFpX21pdGVfY2hhbik7CisJZGV2cHJpdi0+YWlfbWl0ZV9jaGFuID0KKwkJbWl0ZV9yZXF1ZXN0X2NoYW5uZWwoZGV2cHJpdi0+bWl0ZSwgZGV2cHJpdi0+YWlfbWl0ZV9yaW5nKTsKKwlpZiAoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwgZm9yIGFuYWxvZyBpbnB1dC4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfSU5QVVQ7CisJbmlfc2V0X2FpX2RtYV9jaGFubmVsKGRldiwgZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLT5jaGFubmVsKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9yZXF1ZXN0X2FvX21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCUJVR19PTihkZXZwcml2LT5hb19taXRlX2NoYW4pOworCWRldnByaXYtPmFvX21pdGVfY2hhbiA9CisJCW1pdGVfcmVxdWVzdF9jaGFubmVsKGRldnByaXYtPm1pdGUsIGRldnByaXYtPmFvX21pdGVfcmluZyk7CisJaWYgKGRldnByaXYtPmFvX21pdGVfY2hhbiA9PSBOVUxMKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywKKwkJCWZsYWdzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJmYWlsZWQgdG8gcmVzZXJ2ZSBtaXRlIGRtYSBjaGFubmVsIGZvciBhbmFsb2cgb3V0dXQuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWRldnByaXYtPmFvX21pdGVfY2hhbi0+ZGlyID0gQ09NRURJX09VVFBVVDsKKwluaV9zZXRfYW9fZG1hX2NoYW5uZWwoZGV2LCBkZXZwcml2LT5hb19taXRlX2NoYW4tPmNoYW5uZWwpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3JlcXVlc3RfZ3BjdF9taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgZ3BjdF9pbmRleCwgZW51bSBjb21lZGlfaW9fZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbjsKKworCUJVR19PTihncGN0X2luZGV4ID49IE5VTV9HUENUKTsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKGRldnByaXYtPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tncGN0X2luZGV4XS5taXRlX2NoYW4pOworCW1pdGVfY2hhbiA9CisJCW1pdGVfcmVxdWVzdF9jaGFubmVsKGRldnByaXYtPm1pdGUsCisJCWRldnByaXYtPmdwY3RfbWl0ZV9yaW5nW2dwY3RfaW5kZXhdKTsKKwlpZiAobWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwgZm9yIGNvdW50ZXIuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW1pdGVfY2hhbi0+ZGlyID0gZGlyZWN0aW9uOworCW5pX3Rpb19zZXRfbWl0ZV9jaGFubmVsKCZkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbZ3BjdF9pbmRleF0sCisJCW1pdGVfY2hhbik7CisJbmlfc2V0X2dwY3RfZG1hX2NoYW5uZWwoZGV2LCBncGN0X2luZGV4LCBtaXRlX2NoYW4tPmNoYW5uZWwpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisjZW5kaWYgLy8gUENJRE1BCisKK3N0YXRpYyBpbnQgbmlfcmVxdWVzdF9jZG9fbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKGRldnByaXYtPmNkb19taXRlX2NoYW4pOworCWRldnByaXYtPmNkb19taXRlX2NoYW4gPQorCQltaXRlX3JlcXVlc3RfY2hhbm5lbChkZXZwcml2LT5taXRlLCBkZXZwcml2LT5jZG9fbWl0ZV9yaW5nKTsKKwlpZiAoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbiA9PSBOVUxMKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywKKwkJCWZsYWdzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJmYWlsZWQgdG8gcmVzZXJ2ZSBtaXRlIGRtYSBjaGFubmVsIGZvciBjb3JyZWxhdGVkIGRpZ2l0YWwgb3V0dXQuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWRldnByaXYtPmNkb19taXRlX2NoYW4tPmRpciA9IENPTUVESV9PVVRQVVQ7CisJbmlfc2V0X2Nkb19kbWFfY2hhbm5lbChkZXYsIGRldnByaXYtPmNkb19taXRlX2NoYW4tPmNoYW5uZWwpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworI2VuZGlmIC8vIFBDSURNQQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV9yZWxlYXNlX2FpX21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKyNpZmRlZiBQQ0lETUEKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5haV9taXRlX2NoYW4pIHsKKwkJbmlfc2V0X2FpX2RtYV9jaGFubmVsKGRldiwgLTEpOworCQltaXRlX3JlbGVhc2VfY2hhbm5lbChkZXZwcml2LT5haV9taXRlX2NoYW4pOworCQlkZXZwcml2LT5haV9taXRlX2NoYW4gPSBOVUxMOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZiAvLyBQQ0lETUEKK30KKworc3RhdGljIHZvaWQgbmlfcmVsZWFzZV9hb19taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisjaWZkZWYgUENJRE1BCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuKSB7CisJCW5pX3NldF9hb19kbWFfY2hhbm5lbChkZXYsIC0xKTsKKwkJbWl0ZV9yZWxlYXNlX2NoYW5uZWwoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuKTsKKwkJZGV2cHJpdi0+YW9fbWl0ZV9jaGFuID0gTlVMTDsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisjZW5kaWYgLy8gUENJRE1BCit9CisKK3ZvaWQgbmlfcmVsZWFzZV9ncGN0X21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgZ3BjdF9pbmRleCkKK3sKKyNpZmRlZiBQQ0lETUEKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQlVHX09OKGdwY3RfaW5kZXggPj0gTlVNX0dQQ1QpOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2dwY3RfaW5kZXhdLm1pdGVfY2hhbikgeworCQlzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4gPQorCQkJZGV2cHJpdi0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2dwY3RfaW5kZXhdLm1pdGVfY2hhbjsKKworCQluaV9zZXRfZ3BjdF9kbWFfY2hhbm5lbChkZXYsIGdwY3RfaW5kZXgsIC0xKTsKKwkJbmlfdGlvX3NldF9taXRlX2NoYW5uZWwoJmRldnByaXYtPmNvdW50ZXJfZGV2LT4KKwkJCWNvdW50ZXJzW2dwY3RfaW5kZXhdLCBOVUxMKTsKKwkJbWl0ZV9yZWxlYXNlX2NoYW5uZWwobWl0ZV9jaGFuKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisjZW5kaWYgLy8gUENJRE1BCit9CisKK3N0YXRpYyB2b2lkIG5pX3JlbGVhc2VfY2RvX21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKyNpZmRlZiBQQ0lETUEKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5jZG9fbWl0ZV9jaGFuKSB7CisJCW5pX3NldF9jZG9fZG1hX2NoYW5uZWwoZGV2LCAtMSk7CisJCW1pdGVfcmVsZWFzZV9jaGFubmVsKGRldnByaXYtPmNkb19taXRlX2NoYW4pOworCQlkZXZwcml2LT5jZG9fbWl0ZV9jaGFuID0gTlVMTDsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisjZW5kaWYgLy8gUENJRE1BCit9CisKKy8vIGUtc2VyaWVzIGJvYXJkcyB1c2UgdGhlIHNlY29uZCBpcnEgc2lnbmFscyB0byBnZW5lcmF0ZSBkbWEgcmVxdWVzdHMgZm9yIHRoZWlyIGNvdW50ZXJzCisjaWZkZWYgUENJRE1BCitzdGF0aWMgdm9pZCBuaV9lX3Nlcmllc19lbmFibGVfc2Vjb25kX2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBncGN0X2luZGV4LCBzaG9ydCBlbmFibGUpCit7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQlyZXR1cm47CisJc3dpdGNoIChncGN0X2luZGV4KSB7CisJY2FzZSAwOgorCQlpZiAoZW5hYmxlKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgRzBfR2F0ZV9TZWNvbmRfSXJxX0VuYWJsZSwKKwkJCQlTZWNvbmRfSVJRX0FfRW5hYmxlX1JlZ2lzdGVyKTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLAorCQkJCVNlY29uZF9JUlFfQV9FbmFibGVfUmVnaXN0ZXIpOworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKGVuYWJsZSkgeworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEcxX0dhdGVfU2Vjb25kX0lycV9FbmFibGUsCisJCQkJU2Vjb25kX0lSUV9CX0VuYWJsZV9SZWdpc3Rlcik7CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMCwKKwkJCQlTZWNvbmRfSVJRX0JfRW5hYmxlX1JlZ2lzdGVyKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorfQorI2VuZGlmIC8vIFBDSURNQQorCitzdGF0aWMgdm9pZCBuaV9jbGVhcl9haV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpIHsKKwkJLy8gRmx1c2ggdGhlIDYxNDMgZGF0YSBGSUZPCisJCW5pX3dyaXRlbCgweDEwLCBBSUZJRk9fQ29udHJvbF82MTQzKTsJLy8gRmx1c2ggZmlmbworCQluaV93cml0ZWwoMHgwMCwgQUlGSUZPX0NvbnRyb2xfNjE0Myk7CS8vIEZsdXNoIGZpZm8KKwkJd2hpbGUgKG5pX3JlYWRsKEFJRklGT19TdGF0dXNfNjE0MykgJiAweDEwKSA7CS8vIFdhaXQgZm9yIGNvbXBsZXRlCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDEsIEFEQ19GSUZPX0NsZWFyKTsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjI1eCkgeworCQkJbmlfd3JpdGViKDAsIE1fT2Zmc2V0X1N0YXRpY19BSV9Db250cm9sKDApKTsKKwkJCW5pX3dyaXRlYigxLCBNX09mZnNldF9TdGF0aWNfQUlfQ29udHJvbCgwKSk7CisjaWYgMAorCQkJLyogdGhlIE5JIGV4YW1wbGUgY29kZSBkb2VzIDMgY29udmVydCBwdWxzZXMgZm9yIDYyNXggYm9hcmRzLAorCQkJICAgYnV0IHRoYXQgYXBwZWFycyB0byBiZSB3cm9uZyBpbiBwcmFjdGljZS4gKi8KKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9DT05WRVJUX1B1bHNlLAorCQkJCUFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NPTlZFUlRfUHVsc2UsCisJCQkJQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKyNlbmRpZgorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB3aW5fb3V0MihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDMyX3QgZGF0YSwgaW50IHJlZykKK3sKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGF0YSA+PiAxNiwgcmVnKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGF0YSAmIDB4ZmZmZiwgcmVnICsgMSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCB3aW5faW4yKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgcmVnKQoreworCXVpbnQzMl90IGJpdHM7CisJYml0cyA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIHJlZykgPDwgMTY7CisJYml0cyB8PSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCByZWcgKyAxKTsKKwlyZXR1cm4gYml0czsKK30KKworI2RlZmluZSBhb193aW5fb3V0KGRhdGEsYWRkcikgbmlfYW9fd2luX291dHcoZGV2LGRhdGEsYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV9hb193aW5fb3V0dyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgZGF0YSwgaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwluaV93cml0ZXcoYWRkciwgQU9fV2luZG93X0FkZHJlc3NfNjExeCk7CisJbmlfd3JpdGV3KGRhdGEsIEFPX1dpbmRvd19EYXRhXzYxMXgpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfYW9fd2luX291dGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IGRhdGEsIGludCBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisJbmlfd3JpdGV3KGFkZHIsIEFPX1dpbmRvd19BZGRyZXNzXzYxMXgpOworCW5pX3dyaXRlbChkYXRhLCBBT19XaW5kb3dfRGF0YV82MTF4KTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBuaV9hb193aW5faW53KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIHNob3J0IGRhdGE7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisJbmlfd3JpdGV3KGFkZHIsIEFPX1dpbmRvd19BZGRyZXNzXzYxMXgpOworCWRhdGEgPSBuaV9yZWFkdyhBT19XaW5kb3dfRGF0YV82MTF4KTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZGF0YTsKK30KKworLyogbmlfc2V0X2JpdHMoICkgYWxsb3dzIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbmlfbWlvX2NvbW1vbiBkcml2ZXIgdG8KKyogc2hhcmUgcmVnaXN0ZXJzIChzdWNoIGFzIEludGVycnVwdF9BX1JlZ2lzdGVyKSB3aXRob3V0IGludGVyZmVyaW5nIHdpdGgKKyogZWFjaCBvdGhlci4KKyoKKyogTk9URTogdGhlIHN3aXRjaC9jYXNlIHN0YXRlbWVudHMgYXJlIG9wdGltaXplZCBvdXQgZm9yIGEgY29uc3RhbnQgYXJndW1lbnQKKyogc28gdGhpcyBpcyBhY3R1YWxseSBxdWl0ZSBmYXN0LS0tICBJZiB5b3UgbXVzdCB3cmFwIGFub3RoZXIgZnVuY3Rpb24gYXJvdW5kIHRoaXMKKyogbWFrZSBpdCBpbmxpbmUgdG8gYXZvaWQgYSBsYXJnZSBzcGVlZCBwZW5hbHR5LgorKgorKiB2YWx1ZSBzaG91bGQgb25seSBiZSAxIG9yIDAuCisqLworc3RhdGljIGlubGluZSB2b2lkIG5pX3NldF9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgcmVnLCB1bnNpZ25lZCBiaXRzLAorCXVuc2lnbmVkIHZhbHVlKQoreworCXVuc2lnbmVkIGJpdF92YWx1ZXM7CisKKwlpZiAodmFsdWUpCisJCWJpdF92YWx1ZXMgPSBiaXRzOworCWVsc2UKKwkJYml0X3ZhbHVlcyA9IDA7CisJbmlfc2V0X2JpdGZpZWxkKGRldiwgcmVnLCBiaXRzLCBiaXRfdmFsdWVzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG5pX0VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJdW5zaWduZWQgc2hvcnQgYV9zdGF0dXM7CisJdW5zaWduZWQgc2hvcnQgYl9zdGF0dXM7CisJdW5zaWduZWQgaW50IGFpX21pdGVfc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgYW9fbWl0ZV9zdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjaWZkZWYgUENJRE1BCisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlID0gZGV2cHJpdi0+bWl0ZTsKKyNlbmRpZgorCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCXNtcF9tYigpOwkJLy8gbWFrZSBzdXJlIGRldi0+YXR0YWNoZWQgaXMgY2hlY2tlZCBiZWZvcmUgaGFuZGxlciBkb2VzIGFueXRoaW5nIGVsc2UuCisKKwkvLyBsb2NrIHRvIGF2b2lkIHJhY2Ugd2l0aCBjb21lZGlfcG9sbAorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWFfc3RhdHVzID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgQUlfU3RhdHVzXzFfUmVnaXN0ZXIpOworCWJfc3RhdHVzID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgQU9fU3RhdHVzXzFfUmVnaXN0ZXIpOworI2lmZGVmIFBDSURNQQorCWlmIChtaXRlKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3NfdG9vOworCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssCisJCQlmbGFnc190b28pOworCQlpZiAoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKSB7CisJCQlhaV9taXRlX3N0YXR1cyA9IG1pdGVfZ2V0X3N0YXR1cyhkZXZwcml2LT5haV9taXRlX2NoYW4pOworCQkJaWYgKGFpX21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykKKwkJCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCQkJZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsKKwkJCQkJTUlURV9DSE9SKGRldnByaXYtPmFpX21pdGVfY2hhbi0+CisJCQkJCQljaGFubmVsKSk7CisJCX0KKwkJaWYgKGRldnByaXYtPmFvX21pdGVfY2hhbikgeworCQkJYW9fbWl0ZV9zdGF0dXMgPSBtaXRlX2dldF9zdGF0dXMoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuKTsKKwkJCWlmIChhb19taXRlX3N0YXR1cyAmIENIU1JfTElOS0MpCisJCQkJd3JpdGVsKENIT1JfQ0xSTEMsCisJCQkJCW1pdGUtPm1pdGVfaW9fYWRkciArCisJCQkJCU1JVEVfQ0hPUihkZXZwcml2LT5hb19taXRlX2NoYW4tPgorCQkJCQkJY2hhbm5lbCkpOworCQl9CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywKKwkJCWZsYWdzX3Rvbyk7CisJfQorI2VuZGlmCisJYWNrX2FfaW50ZXJydXB0KGRldiwgYV9zdGF0dXMpOworCWFja19iX2ludGVycnVwdChkZXYsIGJfc3RhdHVzKTsKKwlpZiAoKGFfc3RhdHVzICYgSW50ZXJydXB0X0FfU3QpIHx8IChhaV9taXRlX3N0YXR1cyAmIENIU1JfSU5UKSkKKwkJaGFuZGxlX2FfaW50ZXJydXB0KGRldiwgYV9zdGF0dXMsIGFpX21pdGVfc3RhdHVzKTsKKwlpZiAoKGJfc3RhdHVzICYgSW50ZXJydXB0X0JfU3QpIHx8IChhb19taXRlX3N0YXR1cyAmIENIU1JfSU5UKSkKKwkJaGFuZGxlX2JfaW50ZXJydXB0KGRldiwgYl9zdGF0dXMsIGFvX21pdGVfc3RhdHVzKTsKKwloYW5kbGVfZ3BjdF9pbnRlcnJ1cHQoZGV2LCAwKTsKKwloYW5kbGVfZ3BjdF9pbnRlcnJ1cHQoZGV2LCAxKTsKKwloYW5kbGVfY2Rpb19pbnRlcnJ1cHQoZGV2KTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgUENJRE1BCitzdGF0aWMgdm9pZCBuaV9zeW5jX2FpX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5haV9taXRlX2NoYW4pCisJCW1pdGVfc3luY19pbnB1dF9kbWEoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1pdGVfaGFuZGxlX2JfbGlua2Moc3RydWN0IG1pdGVfc3RydWN0ICptaXRlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FPX1NVQkRFVjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5hb19taXRlX2NoYW4pIHsKKwkJbWl0ZV9zeW5jX291dHB1dF9kbWEoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG5pX2FvX3dhaXRfZm9yX2RtYV9sb2FkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDAwOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJdW5zaWduZWQgc2hvcnQgYl9zdGF0dXM7CisKKwkJYl9zdGF0dXMgPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBBT19TdGF0dXNfMV9SZWdpc3Rlcik7CisJCWlmIChiX3N0YXR1cyAmIEFPX0ZJRk9fSGFsZl9GdWxsX1N0KQorCQkJYnJlYWs7CisJCS8qIGlmIHdlIHBvbGwgdG9vIG9mdGVuLCB0aGUgcGNpIGJ1cyBhY3Rpdml0eSBzZWVtcworCQkgICB0byBzbG93IHRoZSBkbWEgdHJhbnNmZXIgZG93biAqLworCQljb21lZGlfdWRlbGF5KDEwKTsKKwl9CisJaWYgKGkgPT0gdGltZW91dCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAidGltZWQgb3V0IHdhaXRpbmcgZm9yIGRtYSBsb2FkIik7CisJCXJldHVybiAtRVBJUEU7CisJfQorCXJldHVybiAwOworfQorCisjZW5kaWYgLy9QQ0lETUEKK3N0YXRpYyB2b2lkIG5pX2hhbmRsZV9lb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAoZGV2cHJpdi0+YWltb2RlID09IEFJTU9ERV9TQ0FOKSB7CisjaWZkZWYgUENJRE1BCisJCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQluaV9zeW5jX2FpX2RtYShkZXYpOworCQkJaWYgKChzLT5hc3luYy0+ZXZlbnRzICYgQ09NRURJX0NCX0VPUykpCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisjZWxzZQorCQluaV9oYW5kbGVfZmlmb19kcmVncyhkZXYpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisjZW5kaWYKKwl9CisJLyogaGFuZGxlIHNwZWNpYWwgY2FzZSBvZiBzaW5nbGUgc2NhbiB1c2luZyBBSV9FbmRfT25fRW5kX09mX1NjYW4gKi8KKwlpZiAoKGRldnByaXYtPmFpX2NtZDIgJiBBSV9FbmRfT25fRW5kX09mX1NjYW4pKSB7CisJCXNodXRkb3duX2FpX2NvbW1hbmQoZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNodXRkb3duX2FpX2NvbW1hbmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9BSV9TVUJERVY7CisKKyNpZmRlZiBQQ0lETUEKKwluaV9haV9kcmFpbl9kbWEoZGV2KTsKKyNlbmRpZgorCW5pX2hhbmRsZV9maWZvX2RyZWdzKGRldik7CisJZ2V0X2xhc3Rfc2FtcGxlXzYxMXgoZGV2KTsKKwlnZXRfbGFzdF9zYW1wbGVfNjE0MyhkZXYpOworCisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworfQorCitzdGF0aWMgdm9pZCBuaV9ldmVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWlmIChzLT5hc3luYy0+CisJCWV2ZW50cyAmIChDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfT1ZFUkZMT1cgfCBDT01FRElfQ0JfRU9BKSkKKwl7CisJCXN3aXRjaCAocyAtIGRldi0+c3ViZGV2aWNlcykgeworCQljYXNlIE5JX0FJX1NVQkRFVjoKKwkJCW5pX2FpX3Jlc2V0KGRldiwgcyk7CisJCQlicmVhazsKKwkJY2FzZSBOSV9BT19TVUJERVY6CisJCQluaV9hb19yZXNldChkZXYsIHMpOworCQkJYnJlYWs7CisJCWNhc2UgTklfR1BDVDBfU1VCREVWOgorCQljYXNlIE5JX0dQQ1QxX1NVQkRFVjoKKwkJCW5pX2dwY3RfY2FuY2VsKGRldiwgcyk7CisJCQlicmVhazsKKwkJY2FzZSBOSV9ESU9fU1VCREVWOgorCQkJbmlfY2Rpb19jYW5jZWwoZGV2LCBzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9ncGN0X2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBzaG9ydCBjb3VudGVyX2luZGV4KQoreworI2lmZGVmIFBDSURNQQorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfR1BDVF9TVUJERVYoY291bnRlcl9pbmRleCk7CisKKwluaV90aW9faGFuZGxlX2ludGVycnVwdCgmZGV2cHJpdi0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2NvdW50ZXJfaW5kZXhdLAorCQlzKTsKKwlpZiAocy0+YXN5bmMtPmV2ZW50cykKKwkJbmlfZXZlbnQoZGV2LCBzKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBhY2tfYV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IGFfc3RhdHVzKQoreworCXVuc2lnbmVkIHNob3J0IGFjayA9IDA7CisKKwlpZiAoYV9zdGF0dXMgJiBBSV9TQ19UQ19TdCkgeworCQlhY2sgfD0gQUlfU0NfVENfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGFfc3RhdHVzICYgQUlfU1RBUlQxX1N0KSB7CisJCWFjayB8PSBBSV9TVEFSVDFfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGFfc3RhdHVzICYgQUlfU1RBUlRfU3QpIHsKKwkJYWNrIHw9IEFJX1NUQVJUX0ludGVycnVwdF9BY2s7CisJfQorCWlmIChhX3N0YXR1cyAmIEFJX1NUT1BfU3QpIHsKKwkJLyogbm90IHN1cmUgd2h5IHdlIHVzZWQgdG8gYWNrIHRoZSBTVEFSVCBoZXJlIGFsc28sIGluc3RlYWQgb2YgZG9pbmcgaXQgaW5kZXBlbmRlbnRseS4gRnJhbmsgSGVzcyAyMDA3LTA3LTA2ICovCisJCWFjayB8PSBBSV9TVE9QX0ludGVycnVwdF9BY2sgLyp8IEFJX1NUQVJUX0ludGVycnVwdF9BY2sgKi8gOworCX0KKwlpZiAoYWNrKQorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYWNrLCBJbnRlcnJ1cHRfQV9BY2tfUmVnaXN0ZXIpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IHN0YXR1cywKKwl1bnNpZ25lZCBhaV9taXRlX3N0YXR1cykKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKworCS8vNjd4eCBib2FyZHMgZG9uJ3QgaGF2ZSBhaSBzdWJkZXZpY2UsIGJ1dCB0aGVpciBncGN0MCBtaWdodCBnZW5lcmF0ZSBhbiBhIGludGVycnVwdAorCWlmIChzLT50eXBlID09IENPTUVESV9TVUJEX1VOVVNFRCkKKwkJcmV0dXJuOworCisjaWZkZWYgREVCVUdfSU5URVJSVVBUCisJcnRfcHJpbnRrCisJCSgibmlfbWlvX2NvbW1vbjogaW50ZXJydXB0OiBhX3N0YXR1cz0lMDR4IGFpX21pdGVfc3RhdHVzPSUwOHhcbiIsCisJCXN0YXR1cywgYWlfbWl0ZV9zdGF0dXMpOworCW5pX21pb19wcmludF9zdGF0dXNfYShzdGF0dXMpOworI2VuZGlmCisjaWZkZWYgUENJRE1BCisJaWYgKGFpX21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykgeworCQluaV9zeW5jX2FpX2RtYShkZXYpOworCX0KKworCWlmIChhaV9taXRlX3N0YXR1cyAmIH4oQ0hTUl9JTlQgfCBDSFNSX0xJTktDIHwgQ0hTUl9ET05FIHwgQ0hTUl9NUkRZIHwKKwkJCUNIU1JfRFJEWSB8IENIU1JfRFJRMSB8IENIU1JfRFJRMCB8IENIU1JfRVJST1IgfAorCQkJQ0hTUl9TQUJPUlQgfCBDSFNSX1hGRVJSIHwgQ0hTUl9MeEVSUl9tYXNrKSkgeworCQlydF9wcmludGsKKwkJCSgidW5rbm93biBtaXRlIGludGVycnVwdCwgYWNrISAoYWlfbWl0ZV9zdGF0dXM9JTA4eClcbiIsCisJCQlhaV9taXRlX3N0YXR1cyk7CisJCS8vbWl0ZV9wcmludF9jaHNyKGFpX21pdGVfc3RhdHVzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQkvL2Rpc2FibGVfaXJxKGRldi0+aXJxKTsKKwl9CisjZW5kaWYKKworCS8qIHRlc3QgZm9yIGFsbCB1bmNvbW1vbiBpbnRlcnJ1cHQgZXZlbnRzIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwlpZiAoc3RhdHVzICYgKEFJX092ZXJydW5fU3QgfCBBSV9PdmVyZmxvd19TdCB8IEFJX1NDX1RDX0Vycm9yX1N0IHwKKwkJCUFJX1NDX1RDX1N0IHwgQUlfU1RBUlQxX1N0KSkgeworCQlpZiAoc3RhdHVzID09IDB4ZmZmZikgeworCQkJcnRfcHJpbnRrCisJCQkJKCJuaV9taW9fY29tbW9uOiBhX3N0YXR1cz0weGZmZmYuICBDYXJkIHJlbW92ZWQ/XG4iKTsKKwkJCS8qIHdlIHByb2JhYmx5IGFyZW4ndCBldmVuIHJ1bm5pbmcgYSBjb21tYW5kIG5vdywKKwkJCSAqIHNvIGl0J3MgYSBnb29kIGlkZWEgdG8gYmUgY2FyZWZ1bC4gKi8KKwkJCWlmIChjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyhzKSAmIFNSRl9SVU5OSU5HKSB7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQorCQkJCQlDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQkJCW5pX2V2ZW50KGRldiwgcyk7CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0YXR1cyAmIChBSV9PdmVycnVuX1N0IHwgQUlfT3ZlcmZsb3dfU3QgfAorCQkJCUFJX1NDX1RDX0Vycm9yX1N0KSkgeworCQkJcnRfcHJpbnRrKCJuaV9taW9fY29tbW9uOiBhaSBlcnJvciBhX3N0YXR1cz0lMDR4XG4iLAorCQkJCXN0YXR1cyk7CisJCQluaV9taW9fcHJpbnRfc3RhdHVzX2Eoc3RhdHVzKTsKKworCQkJc2h1dGRvd25fYWlfY29tbWFuZChkZXYpOworCisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJCWlmIChzdGF0dXMgJiAoQUlfT3ZlcnJ1bl9TdCB8IEFJX092ZXJmbG93X1N0KSkKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKworCQkJbmlfZXZlbnQoZGV2LCBzKTsKKworCQkJcmV0dXJuOworCQl9CisJCWlmIChzdGF0dXMgJiBBSV9TQ19UQ19TdCkgeworI2lmZGVmIERFQlVHX0lOVEVSUlVQVAorCQkJcnRfcHJpbnRrKCJuaV9taW9fY29tbW9uOiBTQ19UQyBpbnRlcnJ1cHRcbiIpOworI2VuZGlmCisJCQlpZiAoIWRldnByaXYtPmFpX2NvbnRpbnVvdXMpIHsKKwkJCQlzaHV0ZG93bl9haV9jb21tYW5kKGRldik7CisJCQl9CisJCX0KKwl9CisjaWZuZGVmIFBDSURNQQorCWlmIChzdGF0dXMgJiBBSV9GSUZPX0hhbGZfRnVsbF9TdCkgeworCQlpbnQgaTsKKwkJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTA7CisJCS8qIHBjbWNpYSBjYXJkcyAoYXQgbGVhc3QgNjAzNikgc2VlbSB0byBzdG9wIHByb2R1Y2luZyBpbnRlcnJ1cHRzIGlmIHdlCisJCSAqZmFpbCB0byBnZXQgdGhlIGZpZm8gbGVzcyB0aGFuIGhhbGYgZnVsbCwgc28gbG9vcCB0byBiZSBzdXJlLiovCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyArK2kpIHsKKwkJCW5pX2hhbmRsZV9maWZvX2hhbGZfZnVsbChkZXYpOworCQkJaWYgKChkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYKKwkJCQkJQUlfRklGT19IYWxmX0Z1bGxfU3QpID09IDApCisJCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYgLy8gIVBDSURNQQorCisJaWYgKChzdGF0dXMgJiBBSV9TVE9QX1N0KSkgeworCQluaV9oYW5kbGVfZW9zKGRldiwgcyk7CisJfQorCisJbmlfZXZlbnQoZGV2LCBzKTsKKworI2lmZGVmIERFQlVHX0lOVEVSUlVQVAorCXN0YXR1cyA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEFJX1N0YXR1c18xX1JlZ2lzdGVyKTsKKwlpZiAoc3RhdHVzICYgSW50ZXJydXB0X0FfU3QpIHsKKwkJcnRfcHJpbnRrCisJCQkoImhhbmRsZV9hX2ludGVycnVwdDogZGlkbid0IGNsZWFyIGludGVycnVwdD8gc3RhdHVzPTB4JXhcbiIsCisJCQlzdGF0dXMpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBhY2tfYl9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IGJfc3RhdHVzKQoreworCXVuc2lnbmVkIHNob3J0IGFjayA9IDA7CisJaWYgKGJfc3RhdHVzICYgQU9fQkNfVENfU3QpIHsKKwkJYWNrIHw9IEFPX0JDX1RDX0ludGVycnVwdF9BY2s7CisJfQorCWlmIChiX3N0YXR1cyAmIEFPX092ZXJydW5fU3QpIHsKKwkJYWNrIHw9IEFPX0Vycm9yX0ludGVycnVwdF9BY2s7CisJfQorCWlmIChiX3N0YXR1cyAmIEFPX1NUQVJUX1N0KSB7CisJCWFjayB8PSBBT19TVEFSVF9JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYl9zdGF0dXMgJiBBT19TVEFSVDFfU3QpIHsKKwkJYWNrIHw9IEFPX1NUQVJUMV9JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYl9zdGF0dXMgJiBBT19VQ19UQ19TdCkgeworCQlhY2sgfD0gQU9fVUNfVENfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGJfc3RhdHVzICYgQU9fVUkyX1RDX1N0KSB7CisJCWFjayB8PSBBT19VSTJfVENfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGJfc3RhdHVzICYgQU9fVVBEQVRFX1N0KSB7CisJCWFjayB8PSBBT19VUERBVEVfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGFjaykKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGFjaywgSW50ZXJydXB0X0JfQWNrX1JlZ2lzdGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBzaG9ydCBiX3N0YXR1cywKKwl1bnNpZ25lZCBhb19taXRlX3N0YXR1cykKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FPX1NVQkRFVjsKKwkvL3Vuc2lnbmVkIHNob3J0IGFjaz0wOworI2lmZGVmIERFQlVHX0lOVEVSUlVQVAorCXJ0X3ByaW50aygibmlfbWlvX2NvbW1vbjogaW50ZXJydXB0OiBiX3N0YXR1cz0lMDR4IG0xX3N0YXR1cz0lMDh4XG4iLAorCQliX3N0YXR1cywgYW9fbWl0ZV9zdGF0dXMpOworCW5pX21pb19wcmludF9zdGF0dXNfYihiX3N0YXR1cyk7CisjZW5kaWYKKworI2lmZGVmIFBDSURNQQorCS8qIEN1cnJlbnRseSwgbWl0ZS5jIHJlcXVpcmVzIHVzIHRvIGhhbmRsZSBMSU5LQyAqLworCWlmIChhb19taXRlX3N0YXR1cyAmIENIU1JfTElOS0MpIHsKKwkJbWl0ZV9oYW5kbGVfYl9saW5rYyhkZXZwcml2LT5taXRlLCBkZXYpOworCX0KKworCWlmIChhb19taXRlX3N0YXR1cyAmIH4oQ0hTUl9JTlQgfCBDSFNSX0xJTktDIHwgQ0hTUl9ET05FIHwgQ0hTUl9NUkRZIHwKKwkJCUNIU1JfRFJEWSB8IENIU1JfRFJRMSB8IENIU1JfRFJRMCB8IENIU1JfRVJST1IgfAorCQkJQ0hTUl9TQUJPUlQgfCBDSFNSX1hGRVJSIHwgQ0hTUl9MeEVSUl9tYXNrKSkgeworCQlydF9wcmludGsKKwkJCSgidW5rbm93biBtaXRlIGludGVycnVwdCwgYWNrISAoYW9fbWl0ZV9zdGF0dXM9JTA4eClcbiIsCisJCQlhb19taXRlX3N0YXR1cyk7CisJCS8vbWl0ZV9wcmludF9jaHNyKGFvX21pdGVfc3RhdHVzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCX0KKyNlbmRpZgorCisJaWYgKGJfc3RhdHVzID09IDB4ZmZmZikKKwkJcmV0dXJuOworCWlmIChiX3N0YXR1cyAmIEFPX092ZXJydW5fU3QpIHsKKwkJcnRfcHJpbnRrCisJCQkoIm5pX21pb19jb21tb246IEFPIEZJRk8gdW5kZXJydW4gc3RhdHVzPTB4JTA0eCBzdGF0dXMyPTB4JTA0eFxuIiwKKwkJCWJfc3RhdHVzLCBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJCUFPX1N0YXR1c18yX1JlZ2lzdGVyKSk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCX0KKworCWlmIChiX3N0YXR1cyAmIEFPX0JDX1RDX1N0KSB7CisJCU1EUFJJTlRLKCJuaV9taW9fY29tbW9uOiBBTyBCQ19UQyBzdGF0dXM9MHglMDR4IHN0YXR1czI9MHglMDR4XG4iLCBiX3N0YXR1cywgZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgQU9fU3RhdHVzXzJfUmVnaXN0ZXIpKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKyNpZm5kZWYgUENJRE1BCisJaWYgKGJfc3RhdHVzICYgQU9fRklGT19SZXF1ZXN0X1N0KSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gbmlfYW9fZmlmb19oYWxmX2VtcHR5KGRldiwgcyk7CisJCWlmICghcmV0KSB7CisJCQlydF9wcmludGsoIm5pX21pb19jb21tb246IEFPIGJ1ZmZlciB1bmRlcnJ1blxuIik7CisJCQluaV9zZXRfYml0cyhkZXYsIEludGVycnVwdF9CX0VuYWJsZV9SZWdpc3RlciwKKwkJCQlBT19GSUZPX0ludGVycnVwdF9FbmFibGUgfAorCQkJCUFPX0Vycm9yX0ludGVycnVwdF9FbmFibGUsIDApOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJCX0KKwl9CisjZW5kaWYKKworCW5pX2V2ZW50KGRldiwgcyk7Cit9CisKKyNpZmRlZiBERUJVR19TVEFUVVNfQQorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YXR1c19hX3N0cmluZ3NbXSA9IHsKKwkicGFzc3RocnUwIiwgImZpZm8iLCAiRzBfZ2F0ZSIsICJHMF9UQyIsCisJInN0b3AiLCAic3RhcnQiLCAic2NfdGMiLCAic3RhcnQxIiwKKwkic3RhcnQyIiwgInNjX3RjX2Vycm9yIiwgIm92ZXJmbG93IiwgIm92ZXJydW4iLAorCSJmaWZvX2VtcHR5IiwgImZpZm9faGFsZl9mdWxsIiwgImZpZm9fZnVsbCIsICJpbnRlcnJ1cHRfYSIKK307CisKK3N0YXRpYyB2b2lkIG5pX21pb19wcmludF9zdGF0dXNfYShpbnQgc3RhdHVzKQoreworCWludCBpOworCisJcnRfcHJpbnRrKCJBIHN0YXR1czoiKTsKKwlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7CisJCQlydF9wcmludGsoIiAlcyIsIHN0YXR1c19hX3N0cmluZ3NbaV0pOworCQl9CisJfQorCXJ0X3ByaW50aygiXG4iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgREVCVUdfU1RBVFVTX0IKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGF0dXNfYl9zdHJpbmdzW10gPSB7CisJInBhc3N0aHJ1MSIsICJmaWZvIiwgIkcxX2dhdGUiLCAiRzFfVEMiLAorCSJVSTJfVEMiLCAiVVBEQVRFIiwgIlVDX1RDIiwgIkJDX1RDIiwKKwkic3RhcnQxIiwgIm92ZXJydW4iLCAic3RhcnQiLCAiYmNfdGNfZXJyb3IiLAorCSJmaWZvX2VtcHR5IiwgImZpZm9faGFsZl9mdWxsIiwgImZpZm9fZnVsbCIsICJpbnRlcnJ1cHRfYiIKK307CisKK3N0YXRpYyB2b2lkIG5pX21pb19wcmludF9zdGF0dXNfYihpbnQgc3RhdHVzKQoreworCWludCBpOworCisJcnRfcHJpbnRrKCJCIHN0YXR1czoiKTsKKwlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7CisJCQlydF9wcmludGsoIiAlcyIsIHN0YXR1c19iX3N0cmluZ3NbaV0pOworCQl9CisJfQorCXJ0X3ByaW50aygiXG4iKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIFBDSURNQQorCitzdGF0aWMgdm9pZCBuaV9hb19maWZvX2xvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgaW50IG4pCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJaW50IGNoYW47CisJaW50IGk7CisJc2hvcnQgZDsKKwl1MzIgcGFja2VkX2RhdGE7CisJaW50IHJhbmdlOworCWludCBlcnIgPSAxOworCisJY2hhbiA9IGFzeW5jLT5jdXJfY2hhbjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWVyciAmPSBjb21lZGlfYnVmX2dldChhc3luYywgJmQpOworCQlpZiAoZXJyID09IDApCisJCQlicmVhazsKKworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbY2hhbl0pOworCisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKSB7CisJCQlwYWNrZWRfZGF0YSA9IGQgJiAweGZmZmY7CisJCQkvKiA2NzExIG9ubHkgaGFzIDE2IGJpdCB3aWRlIGFvIGZpZm8gKi8KKwkJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzY3MTEpIHsKKwkJCQllcnIgJj0gY29tZWRpX2J1Zl9nZXQoYXN5bmMsICZkKTsKKwkJCQlpZiAoZXJyID09IDApCisJCQkJCWJyZWFrOworCQkJCWNoYW4rKzsKKwkJCQlpKys7CisJCQkJcGFja2VkX2RhdGEgfD0gKGQgPDwgMTYpICYgMHhmZmZmMDAwMDsKKwkJCX0KKwkJCW5pX3dyaXRlbChwYWNrZWRfZGF0YSwgREFDX0ZJRk9fRGF0YV82MTF4KTsKKwkJfSBlbHNlIHsKKwkJCW5pX3dyaXRldyhkLCBEQUNfRklGT19EYXRhKTsKKwkJfQorCQljaGFuKys7CisJCWNoYW4gJT0gY21kLT5jaGFubGlzdF9sZW47CisJfQorCWFzeW5jLT5jdXJfY2hhbiA9IGNoYW47CisJaWYgKGVyciA9PSAwKSB7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCX0KK30KKworLyoKKyAqICBUaGVyZSdzIGEgc21hbGwgcHJvYmxlbSBpZiB0aGUgRklGTyBnZXRzIHJlYWxseSBsb3cgYW5kIHdlCisgKiAgZG9uJ3QgaGF2ZSB0aGUgZGF0YSB0byBmaWxsIGl0LiAgQmFzaWNhbGx5LCBpZiBhZnRlciB3ZSBmaWxsCisgKiAgdGhlIEZJRk8gd2l0aCBhbGwgdGhlIGRhdGEgYXZhaWxhYmxlLCB0aGUgRklGTyBpcyBfc3RpbGxfCisgKiAgbGVzcyB0aGFuIGhhbGYgZnVsbCwgd2UgbmV2ZXIgY2xlYXIgdGhlIGludGVycnVwdC4gIElmIHRoZQorICogIElSUSBpcyBpbiBlZGdlIG1vZGUsIHdlIG5ldmVyIGdldCBhbm90aGVyIGludGVycnVwdCwgYmVjYXVzZQorICogIHRoaXMgb25lIHdhc24ndCBjbGVhcmVkLiAgSWYgaW4gbGV2ZWwgbW9kZSwgd2UgZ2V0IGZsb29kZWQKKyAqICB3aXRoIGludGVycnVwdHMgdGhhdCB3ZSBjYW4ndCBmdWxmaWxsLCBiZWNhdXNlIG5vdGhpbmcgZXZlcgorICogIGdldHMgcHV0IGludG8gdGhlIGJ1ZmZlci4KKyAqCisgKiAgVGhpcyBraW5kIG9mIHNpdHVhdGlvbiBpcyByZWNvdmVyYWJsZSwgYnV0IGl0IGlzIGVhc2llciB0bworICogIGp1c3QgcHJldGVuZCB3ZSBoYWQgYSBGSUZPIHVuZGVycnVuLCBzaW5jZSB0aGVyZSBpcyBhIGdvb2QKKyAqICBjaGFuY2UgaXQgd2lsbCBoYXBwZW4gYW55d2F5LiAgVGhpcyBpcyBfbm90XyB0aGUgY2FzZSBmb3IKKyAqICBSVCBjb2RlLCBhcyBSVCBjb2RlIG1pZ2h0IHB1cnBvc2VseSBiZSBydW5uaW5nIGNsb3NlIHRvIHRoZQorICogIG1ldGFsLiAgTmVlZHMgdG8gYmUgZml4ZWQgZXZlbnR1YWxseS4KKyAqLworc3RhdGljIGludCBuaV9hb19maWZvX2hhbGZfZW1wdHkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgbjsKKworCW4gPSBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUocy0+YXN5bmMpOworCWlmIChuID09IDApIHsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJCXJldHVybiAwOworCX0KKworCW4gLz0gc2l6ZW9mKHNob3J0KTsKKwlpZiAobiA+IGJvYXJkdHlwZS5hb19maWZvX2RlcHRoIC8gMikKKwkJbiA9IGJvYXJkdHlwZS5hb19maWZvX2RlcHRoIC8gMjsKKworCW5pX2FvX2ZpZm9fbG9hZChkZXYsIHMsIG4pOworCisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9hb19wcmVwX2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgbjsKKworCS8qIHJlc2V0IGZpZm8gKi8KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgREFDX0ZJRk9fQ2xlYXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKQorCQluaV9hb193aW5fb3V0bChkZXYsIDB4NiwgQU9fRklGT19PZmZzZXRfTG9hZF82MTF4KTsKKworCS8qIGxvYWQgc29tZSBkYXRhICovCisJbiA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzLT5hc3luYyk7CisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwluIC89IHNpemVvZihzaG9ydCk7CisJaWYgKG4gPiBib2FyZHR5cGUuYW9fZmlmb19kZXB0aCkKKwkJbiA9IGJvYXJkdHlwZS5hb19maWZvX2RlcHRoOworCisJbmlfYW9fZmlmb19sb2FkKGRldiwgcywgbik7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgbmlfYWlfZmlmb19yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIGludCBuKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJaW50IGk7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KSB7CisJCXNob3J0IGRhdGFbMl07CisJCXUzMiBkbDsKKworCQlmb3IgKGkgPSAwOyBpIDwgbiAvIDI7IGkrKykgeworCQkJZGwgPSBuaV9yZWFkbChBRENfRklGT19EYXRhXzYxMXgpOworCQkJLyogVGhpcyBtYXkgZ2V0IHRoZSBoaS9sbyBkYXRhIGluIHRoZSB3cm9uZyBvcmRlciAqLworCQkJZGF0YVswXSA9IChkbCA+PiAxNikgJiAweGZmZmY7CisJCQlkYXRhWzFdID0gZGwgJiAweGZmZmY7CisJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRhdGEsIHNpemVvZihkYXRhKSk7CisJCX0KKwkJLyogQ2hlY2sgaWYgdGhlcmUncyBhIHNpbmdsZSBzYW1wbGUgc3R1Y2sgaW4gdGhlIEZJRk8gKi8KKwkJaWYgKG4gJSAyKSB7CisJCQlkbCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCk7CisJCQlkYXRhWzBdID0gZGwgJiAweGZmZmY7CisJCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRhdGFbMF0pOworCQl9CisJfSBlbHNlIGlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpIHsKKwkJc2hvcnQgZGF0YVsyXTsKKwkJdTMyIGRsOworCisJCS8vIFRoaXMganVzdCByZWFkcyB0aGUgRklGTyBhc3N1bWluZyB0aGUgZGF0YSBpcyBwcmVzZW50LCBubyBjaGVja3Mgb24gdGhlIEZJRk8gc3RhdHVzIGFyZSBwZXJmb3JtZWQKKwkJZm9yIChpID0gMDsgaSA8IG4gLyAyOyBpKyspIHsKKwkJCWRsID0gbmlfcmVhZGwoQUlGSUZPX0RhdGFfNjE0Myk7CisKKwkJCWRhdGFbMF0gPSAoZGwgPj4gMTYpICYgMHhmZmZmOworCQkJZGF0YVsxXSA9IGRsICYgMHhmZmZmOworCQkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCQl9CisJCWlmIChuICUgMikgeworCQkJLyogQXNzdW1lIHRoZXJlIGlzIGEgc2luZ2xlIHNhbXBsZSBzdHVjayBpbiB0aGUgRklGTyAqLworCQkJbmlfd3JpdGVsKDB4MDEsIEFJRklGT19Db250cm9sXzYxNDMpOwkvLyBHZXQgc3RyYW5kZWQgc2FtcGxlIGludG8gRklGTworCQkJZGwgPSBuaV9yZWFkbChBSUZJRk9fRGF0YV82MTQzKTsKKwkJCWRhdGFbMF0gPSAoZGwgPj4gMTYpICYgMHhmZmZmOworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkYXRhWzBdKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChuID4gc2l6ZW9mKGRldnByaXYtPmFpX2ZpZm9fYnVmZmVyKSAvCisJCQlzaXplb2YoZGV2cHJpdi0+YWlfZmlmb19idWZmZXJbMF0pKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISBhaV9maWZvX2J1ZmZlciB0b28gc21hbGwiKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQkJcmV0dXJuOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWRldnByaXYtPmFpX2ZpZm9fYnVmZmVyW2ldID0KKwkJCQluaV9yZWFkdyhBRENfRklGT19EYXRhX1JlZ2lzdGVyKTsKKwkJfQorCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRldnByaXYtPmFpX2ZpZm9fYnVmZmVyLAorCQkJbiAqIHNpemVvZihkZXZwcml2LT5haV9maWZvX2J1ZmZlclswXSkpOworCX0KK30KKworc3RhdGljIHZvaWQgbmlfaGFuZGxlX2ZpZm9faGFsZl9mdWxsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBuOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCisJbiA9IGJvYXJkdHlwZS5haV9maWZvX2RlcHRoIC8gMjsKKworCW5pX2FpX2ZpZm9fcmVhZChkZXYsIHMsIG4pOworfQorI2VuZGlmCisKKyNpZmRlZiBQQ0lETUEKK3N0YXRpYyBpbnQgbmlfYWlfZHJhaW5fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFpX21pdGVfY2hhbikgeworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQlpZiAoKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCQlBSV9GSUZPX0VtcHR5X1N0KQorCQkJCSYmIG1pdGVfYnl0ZXNfaW5fdHJhbnNpdChkZXZwcml2LT4KKwkJCQkJYWlfbWl0ZV9jaGFuKSA9PSAwKQorCQkJCWJyZWFrOworCQkJY29tZWRpX3VkZWxheSg1KTsKKwkJfQorCQlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCQlydF9wcmludGsKKwkJCQkoIm5pX21pb19jb21tb246IHdhaXQgZm9yIGRtYSBkcmFpbiB0aW1lZCBvdXRcbiIpOworCQkJcnRfcHJpbnRrCisJCQkJKCJtaXRlX2J5dGVzX2luX3RyYW5zaXQ9JWksIEFJX1N0YXR1czFfUmVnaXN0ZXI9MHgleFxuIiwKKwkJCQltaXRlX2J5dGVzX2luX3RyYW5zaXQoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKSwKKwkJCQlkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBBSV9TdGF0dXNfMV9SZWdpc3RlcikpOworCQkJcmV0dmFsID0gLTE7CisJCX0KKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisKKwluaV9zeW5jX2FpX2RtYShkZXYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgorLyoKKyAgIEVtcHRpZXMgdGhlIEFJIGZpZm8KKyovCitzdGF0aWMgdm9pZCBuaV9oYW5kbGVfZmlmb19kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKwlzaG9ydCBkYXRhWzJdOworCXUzMiBkbDsKKwlzaG9ydCBmaWZvX2VtcHR5OworCWludCBpOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkgeworCQl3aGlsZSAoKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCUFJX1N0YXR1c18xX1JlZ2lzdGVyKSAmCisJCQkJQUlfRklGT19FbXB0eV9TdCkgPT0gMCkgeworCQkJZGwgPSBuaV9yZWFkbChBRENfRklGT19EYXRhXzYxMXgpOworCisJCQkvKiBUaGlzIG1heSBnZXQgdGhlIGhpL2xvIGRhdGEgaW4gdGhlIHdyb25nIG9yZGVyICovCisJCQlkYXRhWzBdID0gKGRsID4+IDE2KTsKKwkJCWRhdGFbMV0gPSAoZGwgJiAweGZmZmYpOworCQkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCQl9CisJfSBlbHNlIGlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpIHsKKwkJaSA9IDA7CisJCXdoaWxlIChuaV9yZWFkbChBSUZJRk9fU3RhdHVzXzYxNDMpICYgMHgwNCkgeworCQkJZGwgPSBuaV9yZWFkbChBSUZJRk9fRGF0YV82MTQzKTsKKworCQkJLyogVGhpcyBtYXkgZ2V0IHRoZSBoaS9sbyBkYXRhIGluIHRoZSB3cm9uZyBvcmRlciAqLworCQkJZGF0YVswXSA9IChkbCA+PiAxNik7CisJCQlkYXRhWzFdID0gKGRsICYgMHhmZmZmKTsKKwkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwkJCWkgKz0gMjsKKwkJfQorCQkvLyBDaGVjayBpZiBzdHJhbmRlZCBzYW1wbGUgaXMgcHJlc2VudAorCQlpZiAobmlfcmVhZGwoQUlGSUZPX1N0YXR1c182MTQzKSAmIDB4MDEpIHsKKwkJCW5pX3dyaXRlbCgweDAxLCBBSUZJRk9fQ29udHJvbF82MTQzKTsJLy8gR2V0IHN0cmFuZGVkIHNhbXBsZSBpbnRvIEZJRk8KKwkJCWRsID0gbmlfcmVhZGwoQUlGSUZPX0RhdGFfNjE0Myk7CisJCQlkYXRhWzBdID0gKGRsID4+IDE2KSAmIDB4ZmZmZjsKKwkJCWNmY193cml0ZV90b19idWZmZXIocywgZGF0YVswXSk7CisJCX0KKworCX0gZWxzZSB7CisJCWZpZm9fZW1wdHkgPQorCQkJZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCUFJX1N0YXR1c18xX1JlZ2lzdGVyKSAmIEFJX0ZJRk9fRW1wdHlfU3Q7CisJCXdoaWxlIChmaWZvX2VtcHR5ID09IDApIHsKKwkJCWZvciAoaSA9IDA7CisJCQkJaSA8CisJCQkJc2l6ZW9mKGRldnByaXYtPmFpX2ZpZm9fYnVmZmVyKSAvCisJCQkJc2l6ZW9mKGRldnByaXYtPmFpX2ZpZm9fYnVmZmVyWzBdKTsgaSsrKSB7CisJCQkJZmlmb19lbXB0eSA9CisJCQkJCWRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCUFJX1N0YXR1c18xX1JlZ2lzdGVyKSAmCisJCQkJCUFJX0ZJRk9fRW1wdHlfU3Q7CisJCQkJaWYgKGZpZm9fZW1wdHkpCisJCQkJCWJyZWFrOworCQkJCWRldnByaXYtPmFpX2ZpZm9fYnVmZmVyW2ldID0KKwkJCQkJbmlfcmVhZHcoQURDX0ZJRk9fRGF0YV9SZWdpc3Rlcik7CisJCQl9CisJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRldnByaXYtPmFpX2ZpZm9fYnVmZmVyLAorCQkJCWkgKiBzaXplb2YoZGV2cHJpdi0+YWlfZmlmb19idWZmZXJbMF0pKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X2xhc3Rfc2FtcGxlXzYxMXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9BSV9TVUJERVY7CisJc2hvcnQgZGF0YTsKKwl1MzIgZGw7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTF4KQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiB0aGVyZSdzIGEgc2luZ2xlIHNhbXBsZSBzdHVjayBpbiB0aGUgRklGTyAqLworCWlmIChuaV9yZWFkYihYWFhfU3RhdHVzKSAmIDB4ODApIHsKKwkJZGwgPSBuaV9yZWFkbChBRENfRklGT19EYXRhXzYxMXgpOworCQlkYXRhID0gKGRsICYgMHhmZmZmKTsKKwkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldF9sYXN0X3NhbXBsZV82MTQzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCXNob3J0IGRhdGE7CisJdTMyIGRsOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjE0MykKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgaWYgdGhlcmUncyBhIHNpbmdsZSBzYW1wbGUgc3R1Y2sgaW4gdGhlIEZJRk8gKi8KKwlpZiAobmlfcmVhZGwoQUlGSUZPX1N0YXR1c182MTQzKSAmIDB4MDEpIHsKKwkJbmlfd3JpdGVsKDB4MDEsIEFJRklGT19Db250cm9sXzYxNDMpOwkvLyBHZXQgc3RyYW5kZWQgc2FtcGxlIGludG8gRklGTworCQlkbCA9IG5pX3JlYWRsKEFJRklGT19EYXRhXzYxNDMpOworCisJCS8qIFRoaXMgbWF5IGdldCB0aGUgaGkvbG8gZGF0YSBpbiB0aGUgd3Jvbmcgb3JkZXIgKi8KKwkJZGF0YSA9IChkbCA+PiAxNikgJiAweGZmZmY7CisJCWNmY193cml0ZV90b19idWZmZXIocywgZGF0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBuaV9haV9tdW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMsIHVuc2lnbmVkIGludCBjaGFuX2luZGV4KQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGxlbmd0aCA9IG51bV9ieXRlcyAvIGJ5dGVzX3Blcl9zYW1wbGUocyk7CisJc2hvcnQgKmFycmF5ID0gZGF0YTsKKwl1bnNpZ25lZCBpbnQgKmxhcnJheSA9IGRhdGE7CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisjaWZkZWYgUENJRE1BCisJCWlmIChzLT5zdWJkZXZfZmxhZ3MgJiBTREZfTFNBTVBMKQorCQkJbGFycmF5W2ldID0gbGUzMl90b19jcHUobGFycmF5W2ldKTsKKwkJZWxzZQorCQkJYXJyYXlbaV0gPSBsZTE2X3RvX2NwdShhcnJheVtpXSk7CisjZW5kaWYKKwkJaWYgKHMtPnN1YmRldl9mbGFncyAmIFNERl9MU0FNUEwpCisJCQlsYXJyYXlbaV0gKz0gZGV2cHJpdi0+YWlfb2Zmc2V0W2NoYW5faW5kZXhdOworCQllbHNlCisJCQlhcnJheVtpXSArPSBkZXZwcml2LT5haV9vZmZzZXRbY2hhbl9pbmRleF07CisJCWNoYW5faW5kZXgrKzsKKwkJY2hhbl9pbmRleCAlPSBhc3luYy0+Y21kLmNoYW5saXN0X2xlbjsKKwl9Cit9CisKKyNpZmRlZiBQQ0lETUEKKworc3RhdGljIGludCBuaV9haV9zZXR1cF9NSVRFX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZXR2YWwgPSBuaV9yZXF1ZXN0X2FpX21pdGVfY2hhbm5lbChkZXYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisvLyAgICAgIHJ0X3ByaW50aygiY29tZWRpX2RlYnVnOiB1c2luZyBtaXRlIGNoYW5uZWwgJWkgZm9yIGFpLlxuIiwgZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLT5jaGFubmVsKTsKKworCS8qIHdyaXRlIGFsbG9jIHRoZSBlbnRpcmUgYnVmZmVyICovCisJY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLT5hc3luYywgcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZihkZXZwcml2LT5haV9taXRlX2NoYW4gPT0gTlVMTCkKKwl7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzd2l0Y2ggKGJvYXJkdHlwZS5yZWdfdHlwZSkgeworCWNhc2UgbmlfcmVnXzYxMXg6CisJY2FzZSBuaV9yZWdfNjE0MzoKKwkJbWl0ZV9wcmVwX2RtYShkZXZwcml2LT5haV9taXRlX2NoYW4sIDMyLCAxNik7CisJCWJyZWFrOworCWNhc2UgbmlfcmVnXzYyOHg6CisJCW1pdGVfcHJlcF9kbWEoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLCAzMiwgMzIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltaXRlX3ByZXBfZG1hKGRldnByaXYtPmFpX21pdGVfY2hhbiwgMTYsIDE2KTsKKwkJYnJlYWs7CisJfTsKKwkvKnN0YXJ0IHRoZSBNSVRFICovCisJbWl0ZV9kbWFfYXJtKGRldnByaXYtPmFpX21pdGVfY2hhbik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9hb19zZXR1cF9NSVRFX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FPX1NVQkRFVjsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZXR2YWwgPSBuaV9yZXF1ZXN0X2FvX21pdGVfY2hhbm5lbChkZXYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwkvKiByZWFkIGFsbG9jIHRoZSBlbnRpcmUgYnVmZmVyICovCisJY29tZWRpX2J1Zl9yZWFkX2FsbG9jKHMtPmFzeW5jLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5hb19taXRlX2NoYW4pIHsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIChuaV9yZWdfNjExeCB8IG5pX3JlZ182NzEzKSkgeworCQkJbWl0ZV9wcmVwX2RtYShkZXZwcml2LT5hb19taXRlX2NoYW4sIDMyLCAzMik7CisJCX0gZWxzZSB7CisJCQkvKiBkb2luZyAzMiBpbnN0ZWFkIG9mIDE2IGJpdCB3aWRlIHRyYW5zZmVycyBmcm9tIG1lbW9yeQorCQkJICAgbWFrZXMgdGhlIG1pdGUgZG8gMzIgYml0IHBjaSB0cmFuc2ZlcnMsIGRvdWJsaW5nIHBjaSBiYW5kd2lkdGguICovCisJCQltaXRlX3ByZXBfZG1hKGRldnByaXYtPmFvX21pdGVfY2hhbiwgMTYsIDMyKTsKKwkJfQorCQltaXRlX2RtYV9hcm0oZGV2cHJpdi0+YW9fbWl0ZV9jaGFuKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0gLUVJTzsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKyNlbmRpZiAvLyBQQ0lETUEKKworLyoKKyAgIHVzZWQgZm9yIGJvdGggY2FuY2VsIGlvY3RsIGFuZCBib2FyZCBpbml0aWFsaXphdGlvbgorCisgICB0aGlzIGlzIHByZXR0eSBoYXJzaCBmb3IgYSBjYW5jZWwsIGJ1dCBpdCB3b3Jrcy4uLgorICovCisKK3N0YXRpYyBpbnQgbmlfYWlfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwluaV9yZWxlYXNlX2FpX21pdGVfY2hhbm5lbChkZXYpOworCS8qIGFpIGNvbmZpZ3VyYXRpb24gKi8KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ29uZmlndXJhdGlvbl9TdGFydCB8IEFJX1Jlc2V0LAorCQlKb2ludF9SZXNldF9SZWdpc3Rlcik7CisKKwluaV9zZXRfYml0cyhkZXYsIEludGVycnVwdF9BX0VuYWJsZV9SZWdpc3RlciwKKwkJQUlfU0NfVENfSW50ZXJydXB0X0VuYWJsZSB8IEFJX1NUQVJUMV9JbnRlcnJ1cHRfRW5hYmxlIHwKKwkJQUlfU1RBUlQyX0ludGVycnVwdF9FbmFibGUgfCBBSV9TVEFSVF9JbnRlcnJ1cHRfRW5hYmxlIHwKKwkJQUlfU1RPUF9JbnRlcnJ1cHRfRW5hYmxlIHwgQUlfRXJyb3JfSW50ZXJydXB0X0VuYWJsZSB8CisJCUFJX0ZJRk9fSW50ZXJydXB0X0VuYWJsZSwgMCk7CisKKwluaV9jbGVhcl9haV9maWZvKGRldik7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTQzKQorCQluaV93cml0ZWIoMCwgTWlzY19Db21tYW5kKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9EaXNhcm0sIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CS8qIHJlc2V0IHB1bHNlcyAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQlBSV9TdGFydF9TdG9wIHwgQUlfTW9kZV8xX1Jlc2VydmVkIC8qfCBBSV9UcmlnZ2VyX09uY2UgKi8gLAorCQlBSV9Nb2RlXzFfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAweDAwMDAsIEFJX01vZGVfMl9SZWdpc3Rlcik7CisJLyogZ2VuZXJhdGUgRklGTyBpbnRlcnJ1cHRzIG9uIG5vbi1lbXB0eSAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAoMCA8PCA2KSB8IDB4MDAwMCwgQUlfTW9kZV8zX1JlZ2lzdGVyKTsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KSB7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TSElGVElOX1B1bHNlX1dpZHRoIHwKKwkJCUFJX1NPQ19Qb2xhcml0eSB8CisJCQlBSV9MT0NBTE1VWF9DTEtfUHVsc2VfV2lkdGgsIEFJX1BlcnNvbmFsX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NDQU5fSU5fUFJPR19PdXRwdXRfU2VsZWN0KDMpIHwKKwkJCUFJX0VYVE1VWF9DTEtfT3V0cHV0X1NlbGVjdCgwKSB8CisJCQlBSV9MT0NBTE1VWF9DTEtfT3V0cHV0X1NlbGVjdCgyKSB8CisJCQlBSV9TQ19UQ19PdXRwdXRfU2VsZWN0KDMpIHwKKwkJCUFJX0NPTlZFUlRfT3V0cHV0X1NlbGVjdChBSV9DT05WRVJUX091dHB1dF9FbmFibGVfSGlnaCksCisJCQlBSV9PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJfSBlbHNlIGlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpIHsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NISUZUSU5fUHVsc2VfV2lkdGggfAorCQkJQUlfU09DX1BvbGFyaXR5IHwKKwkJCUFJX0xPQ0FMTVVYX0NMS19QdWxzZV9XaWR0aCwgQUlfUGVyc29uYWxfUmVnaXN0ZXIpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0NBTl9JTl9QUk9HX091dHB1dF9TZWxlY3QoMykgfAorCQkJQUlfRVhUTVVYX0NMS19PdXRwdXRfU2VsZWN0KDApIHwKKwkJCUFJX0xPQ0FMTVVYX0NMS19PdXRwdXRfU2VsZWN0KDIpIHwKKwkJCUFJX1NDX1RDX091dHB1dF9TZWxlY3QoMykgfAorCQkJQUlfQ09OVkVSVF9PdXRwdXRfU2VsZWN0KEFJX0NPTlZFUlRfT3V0cHV0X0VuYWJsZV9Mb3cpLAorCQkJQUlfT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXIpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGFpX291dHB1dF9jb250cm9sX2JpdHM7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TSElGVElOX1B1bHNlX1dpZHRoIHwKKwkJCUFJX1NPQ19Qb2xhcml0eSB8CisJCQlBSV9DT05WRVJUX1B1bHNlX1dpZHRoIHwKKwkJCUFJX0xPQ0FMTVVYX0NMS19QdWxzZV9XaWR0aCwgQUlfUGVyc29uYWxfUmVnaXN0ZXIpOworCQlhaV9vdXRwdXRfY29udHJvbF9iaXRzID0gQUlfU0NBTl9JTl9QUk9HX091dHB1dF9TZWxlY3QoMykgfAorCQkJQUlfRVhUTVVYX0NMS19PdXRwdXRfU2VsZWN0KDApIHwKKwkJCUFJX0xPQ0FMTVVYX0NMS19PdXRwdXRfU2VsZWN0KDIpIHwKKwkJCUFJX1NDX1RDX091dHB1dF9TZWxlY3QoMyk7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYyMngpCisJCQlhaV9vdXRwdXRfY29udHJvbF9iaXRzIHw9CisJCQkJQUlfQ09OVkVSVF9PdXRwdXRfU2VsZWN0CisJCQkJKEFJX0NPTlZFUlRfT3V0cHV0X0VuYWJsZV9IaWdoKTsKKwkJZWxzZQorCQkJYWlfb3V0cHV0X2NvbnRyb2xfYml0cyB8PQorCQkJCUFJX0NPTlZFUlRfT3V0cHV0X1NlbGVjdAorCQkJCShBSV9DT05WRVJUX091dHB1dF9FbmFibGVfTG93KTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGFpX291dHB1dF9jb250cm9sX2JpdHMsCisJCQlBSV9PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJfQorCS8qIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIHNob3VsZCBub3QgYmUgY2hhbmdlZCwgYmVjYXVzZSB0aGVyZQorCSAqIGFyZSBubyBiYWNrdXAgcmVnaXN0ZXJzIGluIGRldnByaXYuICBJZiB5b3Ugd2FudCB0byBjaGFuZ2UKKwkgKiBhbnkgb2YgdGhlc2UsIGFkZCBhIGJhY2t1cCByZWdpc3RlciBhbmQgb3RoZXIgYXBwcm9wcmlhdGUgY29kZToKKwkgKiAgICAgIEFJX01vZGVfMV9SZWdpc3RlcgorCSAqICAgICAgQUlfTW9kZV8zX1JlZ2lzdGVyCisJICogICAgICBBSV9QZXJzb25hbF9SZWdpc3RlcgorCSAqICAgICAgQUlfT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXIKKwkgKi8KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0NfVENfRXJyb3JfQ29uZmlybSB8IEFJX1NUQVJUX0ludGVycnVwdF9BY2sgfCBBSV9TVEFSVDJfSW50ZXJydXB0X0FjayB8IEFJX1NUQVJUMV9JbnRlcnJ1cHRfQWNrIHwgQUlfU0NfVENfSW50ZXJydXB0X0FjayB8IEFJX0Vycm9yX0ludGVycnVwdF9BY2sgfCBBSV9TVE9QX0ludGVycnVwdF9BY2ssIEludGVycnVwdF9BX0Fja19SZWdpc3Rlcik7CS8qIGNsZWFyIGludGVycnVwdHMgKi8KKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9Db25maWd1cmF0aW9uX0VuZCwgSm9pbnRfUmVzZXRfUmVnaXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWlfcG9sbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWludCBjb3VudDsKKworCS8vIGxvY2sgdG8gYXZvaWQgcmFjZSB3aXRoIGludGVycnVwdCBoYW5kbGVyCisJaWYgKGluX2ludGVycnVwdCgpID09IDApCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworI2lmbmRlZiBQQ0lETUEKKwluaV9oYW5kbGVfZmlmb19kcmVncyhkZXYpOworI2Vsc2UKKwluaV9zeW5jX2FpX2RtYShkZXYpOworI2VuZGlmCisJY291bnQgPSBzLT5hc3luYy0+YnVmX3dyaXRlX2NvdW50IC0gcy0+YXN5bmMtPmJ1Zl9yZWFkX2NvdW50OworCWlmIChpbl9pbnRlcnJ1cHQoKSA9PSAwKQorCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IG5pX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJY29uc3QgdW5zaWduZWQgaW50IG1hc2sgPSAoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDE7CisJdW5zaWduZWQgc2lnbmJpdHM7CisJdW5zaWduZWQgc2hvcnQgZDsKKwl1bnNpZ25lZCBsb25nIGRsOworCisJbmlfbG9hZF9jaGFubmVsZ2Fpbl9saXN0KGRldiwgMSwgJmluc24tPmNoYW5zcGVjKTsKKworCW5pX2NsZWFyX2FpX2ZpZm8oZGV2KTsKKworCXNpZ25iaXRzID0gZGV2cHJpdi0+YWlfb2Zmc2V0WzBdOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpIHsKKwkJZm9yIChuID0gMDsgbiA8IG51bV9hZGNfc3RhZ2VzXzYxMXg7IG4rKykgeworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NPTlZFUlRfUHVsc2UsCisJCQkJQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NPTlZFUlRfUHVsc2UsCisJCQkJQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJCS8qIFRoZSA2MTF4IGhhcyBzY3Jld3kgMzItYml0IEZJRk9zLiAqLworCQkJZCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgTklfVElNRU9VVDsgaSsrKSB7CisJCQkJaWYgKG5pX3JlYWRiKFhYWF9TdGF0dXMpICYgMHg4MCkgeworCQkJCQlkID0gKG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCkgPj4gMTYpCisJCQkJCQkmIDB4ZmZmZjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICghKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYKKwkJCQkJCUFJX0ZJRk9fRW1wdHlfU3QpKSB7CisJCQkJCWQgPSBuaV9yZWFkbChBRENfRklGT19EYXRhXzYxMXgpICYKKwkJCQkJCTB4ZmZmZjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gTklfVElNRU9VVCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIm5pX21pb19jb21tb246IHRpbWVvdXQgaW4gNjExeCBuaV9haV9pbnNuX3JlYWRcbiIpOworCQkJCXJldHVybiAtRVRJTUU7CisJCQl9CisJCQlkICs9IHNpZ25iaXRzOworCQkJZGF0YVtuXSA9IGQ7CisJCX0KKwl9IGVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCisJCQkvKiBUaGUgNjE0MyBoYXMgMzItYml0IEZJRk9zLiBZb3UgbmVlZCB0byBzdHJvYmUgYSBiaXQgdG8gbW92ZSBhIHNpbmdsZSAxNmJpdCBzdHJhbmRlZCBzYW1wbGUgaW50byB0aGUgRklGTyAqLworCQkJZGwgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IE5JX1RJTUVPVVQ7IGkrKykgeworCQkJCWlmIChuaV9yZWFkbChBSUZJRk9fU3RhdHVzXzYxNDMpICYgMHgwMSkgeworCQkJCQluaV93cml0ZWwoMHgwMSwgQUlGSUZPX0NvbnRyb2xfNjE0Myk7CS8vIEdldCBzdHJhbmRlZCBzYW1wbGUgaW50byBGSUZPCisJCQkJCWRsID0gbmlfcmVhZGwoQUlGSUZPX0RhdGFfNjE0Myk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChpID09IE5JX1RJTUVPVVQpIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCJuaV9taW9fY29tbW9uOiB0aW1lb3V0IGluIDYxNDMgbmlfYWlfaW5zbl9yZWFkXG4iKTsKKwkJCQlyZXR1cm4gLUVUSU1FOworCQkJfQorCQkJZGF0YVtuXSA9ICgoKGRsID4+IDE2KSAmIDB4RkZGRikgKyBzaWduYml0cykgJiAweEZGRkY7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQkJZm9yIChpID0gMDsgaSA8IE5JX1RJTUVPVVQ7IGkrKykgeworCQkJCWlmICghKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYKKwkJCQkJCUFJX0ZJRk9fRW1wdHlfU3QpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpID09IE5JX1RJTUVPVVQpIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCJuaV9taW9fY29tbW9uOiB0aW1lb3V0IGluIG5pX2FpX2luc25fcmVhZFxuIik7CisJCQkJcmV0dXJuIC1FVElNRTsKKwkJCX0KKwkJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQkJCWRhdGFbbl0gPQorCQkJCQluaV9yZWFkbChNX09mZnNldF9BSV9GSUZPX0RhdGEpICYgbWFzazsKKwkJCX0gZWxzZSB7CisJCQkJZCA9IG5pX3JlYWR3KEFEQ19GSUZPX0RhdGFfUmVnaXN0ZXIpOworCQkJCWQgKz0gc2lnbmJpdHM7CS8qIHN1YnRsZTogbmVlZHMgdG8gYmUgc2hvcnQgYWRkaXRpb24gKi8KKwkJCQlkYXRhW25dID0gZDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKwordm9pZCBuaV9wcmltZV9jaGFubmVsZ2Fpbl9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9DT05WRVJUX1B1bHNlLCBBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCWZvciAoaSA9IDA7IGkgPCBOSV9USU1FT1VUOyArK2kpIHsKKwkJaWYgKCEoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYKKwkJCQlBSV9GSUZPX0VtcHR5X1N0KSkgeworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDEsIEFEQ19GSUZPX0NsZWFyKTsKKwkJCXJldHVybjsKKwkJfQorCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwlydF9wcmludGsoIm5pX21pb19jb21tb246IHRpbWVvdXQgbG9hZGluZyBjaGFubmVsL2dhaW4gbGlzdFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIG5pX21fc2VyaWVzX2xvYWRfY2hhbm5lbGdhaW5fbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmxpc3QpCit7CisJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlLCBhcmVmOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGl0aGVyOworCXVuc2lnbmVkIHJhbmdlX2NvZGU7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQ29uZmlndXJhdGlvbl9NZW1vcnlfQ2xlYXIpOworCisvLyAgICAgIG9mZnNldCA9IDEgPDwgKGJvYXJkdHlwZS5hZGJpdHMgLSAxKTsKKwlpZiAoKGxpc3RbMF0gJiBDUl9BTFRfU09VUkNFKSkgeworCQl1bnNpZ25lZCBieXBhc3NfYml0czsKKwkJY2hhbiA9IENSX0NIQU4obGlzdFswXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UobGlzdFswXSk7CisJCXJhbmdlX2NvZGUgPSBuaV9nYWlubGt1cFtib2FyZHR5cGUuZ2FpbmxrdXBdW3JhbmdlXTsKKwkJZGl0aGVyID0gKChsaXN0WzBdICYgQ1JfQUxUX0ZJTFRFUikgIT0gMCk7CisJCWJ5cGFzc19iaXRzID0gTVNlcmllc19BSV9CeXBhc3NfQ29uZmlnX0ZJRk9fQml0OworCQlieXBhc3NfYml0cyB8PSBjaGFuOworCQlieXBhc3NfYml0cyB8PQorCQkJKGRldnByaXYtPgorCQkJYWlfY2FsaWJfc291cmNlKSAmIChNU2VyaWVzX0FJX0J5cGFzc19DYWxfU2VsX1Bvc19NYXNrIHwKKwkJCU1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfTmVnX01hc2sgfAorCQkJTVNlcmllc19BSV9CeXBhc3NfTW9kZV9NdXhfTWFzayB8CisJCQlNU2VyaWVzX0FPX0J5cGFzc19BT19DYWxfU2VsX01hc2spOworCQlieXBhc3NfYml0cyB8PSBNU2VyaWVzX0FJX0J5cGFzc19HYWluX0JpdHMocmFuZ2VfY29kZSk7CisJCWlmIChkaXRoZXIpCisJCQlieXBhc3NfYml0cyB8PSBNU2VyaWVzX0FJX0J5cGFzc19EaXRoZXJfQml0OworCQkvLyBkb24ndCB1c2UgMidzIGNvbXBsZW1lbnQgZW5jb2RpbmcKKwkJYnlwYXNzX2JpdHMgfD0gTVNlcmllc19BSV9CeXBhc3NfUG9sYXJpdHlfQml0OworCQluaV93cml0ZWwoYnlwYXNzX2JpdHMsIE1fT2Zmc2V0X0FJX0NvbmZpZ19GSUZPX0J5cGFzcyk7CisJfSBlbHNlIHsKKwkJbmlfd3JpdGVsKDAsIE1fT2Zmc2V0X0FJX0NvbmZpZ19GSUZPX0J5cGFzcyk7CisJfQorCW9mZnNldCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7CisJCXVuc2lnbmVkIGNvbmZpZ19iaXRzID0gMDsKKwkJY2hhbiA9IENSX0NIQU4obGlzdFtpXSk7CisJCWFyZWYgPSBDUl9BUkVGKGxpc3RbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGxpc3RbaV0pOworCQlkaXRoZXIgPSAoKGxpc3RbaV0gJiBDUl9BTFRfRklMVEVSKSAhPSAwKTsKKworCQlyYW5nZV9jb2RlID0gbmlfZ2FpbmxrdXBbYm9hcmR0eXBlLmdhaW5sa3VwXVtyYW5nZV07CisJCWRldnByaXYtPmFpX29mZnNldFtpXSA9IG9mZnNldDsKKwkJc3dpdGNoIChhcmVmKSB7CisJCWNhc2UgQVJFRl9ESUZGOgorCQkJY29uZmlnX2JpdHMgfD0KKwkJCQlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfRGlmZmVyZW50aWFsX0JpdHM7CisJCQlicmVhazsKKwkJY2FzZSBBUkVGX0NPTU1PTjoKKwkJCWNvbmZpZ19iaXRzIHw9CisJCQkJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0NvbW1vbl9SZWZfQml0czsKKwkJCWJyZWFrOworCQljYXNlIEFSRUZfR1JPVU5EOgorCQkJY29uZmlnX2JpdHMgfD0KKwkJCQlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfR3JvdW5kX1JlZl9CaXRzOworCQkJYnJlYWs7CisJCWNhc2UgQVJFRl9PVEhFUjoKKwkJCWJyZWFrOworCQl9CisJCWNvbmZpZ19iaXRzIHw9IE1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfQml0cyhjaGFuKTsKKwkJY29uZmlnX2JpdHMgfD0KKwkJCU1TZXJpZXNfQUlfQ29uZmlnX0JhbmtfQml0cyhib2FyZHR5cGUucmVnX3R5cGUsIGNoYW4pOworCQljb25maWdfYml0cyB8PSBNU2VyaWVzX0FJX0NvbmZpZ19HYWluX0JpdHMocmFuZ2VfY29kZSk7CisJCWlmIChpID09IG5fY2hhbiAtIDEpCisJCQljb25maWdfYml0cyB8PSBNU2VyaWVzX0FJX0NvbmZpZ19MYXN0X0NoYW5uZWxfQml0OworCQlpZiAoZGl0aGVyKQorCQkJY29uZmlnX2JpdHMgfD0gTVNlcmllc19BSV9Db25maWdfRGl0aGVyX0JpdDsKKwkJLy8gZG9uJ3QgdXNlIDIncyBjb21wbGVtZW50IGVuY29kaW5nCisJCWNvbmZpZ19iaXRzIHw9IE1TZXJpZXNfQUlfQ29uZmlnX1BvbGFyaXR5X0JpdDsKKwkJbmlfd3JpdGV3KGNvbmZpZ19iaXRzLCBNX09mZnNldF9BSV9Db25maWdfRklGT19EYXRhKTsKKwl9CisJbmlfcHJpbWVfY2hhbm5lbGdhaW5fbGlzdChkZXYpOworfQorCisvKgorICogTm90ZXMgb24gdGhlIDYxMTAgYW5kIDYxMTE6CisgKiBUaGVzZSBib2FyZHMgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiB0aGUgcmVzdCBvZiB0aGUgc2VyaWVzLCBzaW5jZQorICogdGhleSBoYXZlIG11bHRpcGxlIEEvRCBjb252ZXJ0ZXJzLgorICogRnJvbSB0aGUgZHJpdmVyIHNpZGUsIHRoZSBjb25maWd1cmF0aW9uIG1lbW9yeSBpcyBhCisgKiBsaXR0bGUgZGlmZmVyZW50LgorICogQ29uZmlndXJhdGlvbiBNZW1vcnkgTG93OgorICogICBiaXRzIDE1LTk6IHNhbWUKKyAqICAgYml0IDg6IHVuaXBvbGFyL2JpcG9sYXIgKHNob3VsZCBiZSAwIGZvciBiaXBvbGFyKQorICogICBiaXRzIDAtMzogZ2Fpbi4gIFRoaXMgaXMgNCBiaXRzIGluc3RlYWQgb2YgMyBmb3IgdGhlIG90aGVyIGJvYXJkcworICogICAgICAgMTAwMSBnYWluPTAuMSAoKy8tIDUwKQorICogICAgICAgMTAxMCAwLjIKKyAqICAgICAgIDEwMTEgMC4xCisgKiAgICAgICAwMDAxIDEKKyAqICAgICAgIDAwMTAgMgorICogICAgICAgMDAxMSA1CisgKiAgICAgICAwMTAwIDEwCisgKiAgICAgICAwMTAxIDIwCisgKiAgICAgICAwMTEwIDUwCisgKiBDb25maWd1cmF0aW9uIE1lbW9yeSBIaWdoOgorICogICBiaXRzIDEyLTE0OiBDaGFubmVsIFR5cGUKKyAqICAgICAgIDAwMSBmb3IgZGlmZmVyZW50aWFsCisgKiAgICAgICAwMDAgZm9yIGNhbGlicmF0aW9uCisgKiAgIGJpdCAxMTogY291cGxpbmcgICh0aGlzIGlzIG5vdCBjdXJyZW50bHkgaGFuZGxlZCkKKyAqICAgICAgIDEgQUMgY291cGxpbmcKKyAqICAgICAgIDAgREMgY291cGxpbmcKKyAqICAgYml0cyAwLTI6IGNoYW5uZWwKKyAqICAgICAgIHZhbGlkIGNoYW5uZWxzIGFyZSAwLTMKKyAqLworc3RhdGljIHZvaWQgbmlfbG9hZF9jaGFubmVsZ2Fpbl9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbl9jaGFuLAorCXVuc2lnbmVkIGludCAqbGlzdCkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbiwgcmFuZ2UsIGFyZWY7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGhpLCBsbzsKKwl1bnNpZ25lZCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGRpdGhlcjsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQluaV9tX3Nlcmllc19sb2FkX2NoYW5uZWxnYWluX2xpc3QoZGV2LCBuX2NoYW4sIGxpc3QpOworCQlyZXR1cm47CisJfQorCWlmIChuX2NoYW4gPT0gMSAmJiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTF4KQorCQkmJiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTQzKSkgeworCQlpZiAoZGV2cHJpdi0+Y2hhbmdhaW5fc3RhdGUKKwkJCSYmIGRldnByaXYtPmNoYW5nYWluX3NwZWMgPT0gbGlzdFswXSkgeworCQkJLy8gcmVhZHkgdG8gZ28uCisJCQlyZXR1cm47CisJCX0KKwkJZGV2cHJpdi0+Y2hhbmdhaW5fc3RhdGUgPSAxOworCQlkZXZwcml2LT5jaGFuZ2Fpbl9zcGVjID0gbGlzdFswXTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5jaGFuZ2Fpbl9zdGF0ZSA9IDA7CisJfQorCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDEsIENvbmZpZ3VyYXRpb25fTWVtb3J5X0NsZWFyKTsKKworCS8vIFNldCB1cCBDYWxpYnJhdGlvbiBtb2RlIGlmIHJlcXVpcmVkCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQlpZiAoKGxpc3RbMF0gJiBDUl9BTFRfU09VUkNFKQorCQkJJiYgIWRldnByaXYtPmFpX2NhbGliX3NvdXJjZV9lbmFibGVkKSB7CisJCQkvLyBTdHJvYmUgUmVsYXkgZW5hYmxlIGJpdAorCQkJbmlfd3JpdGV3KGRldnByaXYtPgorCQkJCWFpX2NhbGliX3NvdXJjZSB8CisJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzX1JlbGF5T24sCisJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzKTsKKwkJCW5pX3dyaXRldyhkZXZwcml2LT5haV9jYWxpYl9zb3VyY2UsCisJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzKTsKKwkJCWRldnByaXYtPmFpX2NhbGliX3NvdXJjZV9lbmFibGVkID0gMTsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CS8vIEFsbG93IHJlbGF5cyB0byBjaGFuZ2UKKwkJfSBlbHNlIGlmICghKGxpc3RbMF0gJiBDUl9BTFRfU09VUkNFKQorCQkJJiYgZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlX2VuYWJsZWQpIHsKKwkJCS8vIFN0cm9iZSBSZWxheSBkaXNhYmxlIGJpdAorCQkJbmlfd3JpdGV3KGRldnByaXYtPgorCQkJCWFpX2NhbGliX3NvdXJjZSB8CisJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzX1JlbGF5T2ZmLAorCQkJCUNhbGlicmF0aW9uX0NoYW5uZWxfNjE0Myk7CisJCQluaV93cml0ZXcoZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlLAorCQkJCUNhbGlicmF0aW9uX0NoYW5uZWxfNjE0Myk7CisJCQlkZXZwcml2LT5haV9jYWxpYl9zb3VyY2VfZW5hYmxlZCA9IDA7CisJCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApOwkvLyBBbGxvdyByZWxheXMgdG8gY2hhbmdlCisJCX0KKwl9CisKKwlvZmZzZXQgPSAxIDw8IChib2FyZHR5cGUuYWRiaXRzIC0gMSk7CisJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7CisJCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTQzKQorCQkJJiYgKGxpc3RbaV0gJiBDUl9BTFRfU09VUkNFKSkgeworCQkJY2hhbiA9IGRldnByaXYtPmFpX2NhbGliX3NvdXJjZTsKKwkJfSBlbHNlIHsKKwkJCWNoYW4gPSBDUl9DSEFOKGxpc3RbaV0pOworCQl9CisJCWFyZWYgPSBDUl9BUkVGKGxpc3RbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGxpc3RbaV0pOworCQlkaXRoZXIgPSAoKGxpc3RbaV0gJiBDUl9BTFRfRklMVEVSKSAhPSAwKTsKKworCQkvKiBmaXggdGhlIGV4dGVybmFsL2ludGVybmFsIHJhbmdlIGRpZmZlcmVuY2VzICovCisJCXJhbmdlID0gbmlfZ2FpbmxrdXBbYm9hcmR0eXBlLmdhaW5sa3VwXVtyYW5nZV07CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpCisJCQlkZXZwcml2LT5haV9vZmZzZXRbaV0gPSBvZmZzZXQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmFpX29mZnNldFtpXSA9IChyYW5nZSAmIDB4MTAwKSA/IDAgOiBvZmZzZXQ7CisKKwkJaGkgPSAwOworCQlpZiAoKGxpc3RbaV0gJiBDUl9BTFRfU09VUkNFKSkgeworCQkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkKKwkJCQluaV93cml0ZXcoQ1JfQ0hBTihsaXN0W2ldKSAmIDB4MDAwMywKKwkJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF9TZWxlY3RfNjExeCk7CisJCX0gZWxzZSB7CisJCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQkJCWFyZWYgPSBBUkVGX0RJRkY7CisJCQllbHNlIGlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpCisJCQkJYXJlZiA9IEFSRUZfT1RIRVI7CisJCQlzd2l0Y2ggKGFyZWYpIHsKKwkJCWNhc2UgQVJFRl9ESUZGOgorCQkJCWhpIHw9IEFJX0RJRkZFUkVOVElBTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVJFRl9DT01NT046CisJCQkJaGkgfD0gQUlfQ09NTU9OOworCQkJCWJyZWFrOworCQkJY2FzZSBBUkVGX0dST1VORDoKKwkJCQloaSB8PSBBSV9HUk9VTkQ7CisJCQkJYnJlYWs7CisJCQljYXNlIEFSRUZfT1RIRVI6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaGkgfD0gQUlfQ09ORklHX0NIQU5ORUwoY2hhbik7CisKKwkJbmlfd3JpdGV3KGhpLCBDb25maWd1cmF0aW9uX01lbW9yeV9IaWdoKTsKKworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTQzKSB7CisJCQlsbyA9IHJhbmdlOworCQkJaWYgKGkgPT0gbl9jaGFuIC0gMSkKKwkJCQlsbyB8PSBBSV9MQVNUX0NIQU5ORUw7CisJCQlpZiAoZGl0aGVyKQorCQkJCWxvIHw9IEFJX0RJVEhFUjsKKworCQkJbmlfd3JpdGV3KGxvLCBDb25maWd1cmF0aW9uX01lbW9yeV9Mb3cpOworCQl9CisJfQorCisJLyogcHJpbWUgdGhlIGNoYW5uZWwvZ2FpbiBsaXN0ICovCisJaWYgKChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxMXgpCisJCSYmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpKSB7CisJCW5pX3ByaW1lX2NoYW5uZWxnYWluX2xpc3QoZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfbnNfdG9fdGltZXIoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIG5hbm9zZWMsCisJaW50IHJvdW5kX21vZGUpCit7CisJaW50IGRpdmlkZXI7CisJc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJZGVmYXVsdDoKKwkJZGl2aWRlciA9IChuYW5vc2VjICsgZGV2cHJpdi0+Y2xvY2tfbnMgLyAyKSAvIGRldnByaXYtPmNsb2NrX25zOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJZGl2aWRlciA9IChuYW5vc2VjKSAvIGRldnByaXYtPmNsb2NrX25zOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfVVA6CisJCWRpdmlkZXIgPSAobmFub3NlYyArIGRldnByaXYtPmNsb2NrX25zIC0gMSkgLyBkZXZwcml2LT5jbG9ja19uczsKKwkJYnJlYWs7CisJfQorCXJldHVybiBkaXZpZGVyIC0gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX3RpbWVyX3RvX25zKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgdGltZXIpCit7CisJcmV0dXJuIGRldnByaXYtPmNsb2NrX25zICogKHRpbWVyICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9taW5fYWlfc2Nhbl9wZXJpb2RfbnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgbnVtX2NoYW5uZWxzKQoreworCXN3aXRjaCAoYm9hcmR0eXBlLnJlZ190eXBlKSB7CisJY2FzZSBuaV9yZWdfNjExeDoKKwljYXNlIG5pX3JlZ182MTQzOgorCQkvLyBzaW11bHRhbmVvdXNseS1zYW1wbGVkIGlucHV0cworCQlyZXR1cm4gYm9hcmR0eXBlLmFpX3NwZWVkOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvLyBtdWx0aXBsZXhlZCBpbnB1dHMKKwkJYnJlYWs7CisJfTsKKwlyZXR1cm4gYm9hcmR0eXBlLmFpX3NwZWVkICogbnVtX2NoYW5uZWxzOworfQorCitzdGF0aWMgaW50IG5pX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCWludCBzb3VyY2VzOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCWlmICgoY21kLT5mbGFncyAmIENNREZfV1JJVEUpKSB7CisJCWNtZC0+ZmxhZ3MgJj0gfkNNREZfV1JJVEU7CisJfQorCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1cgfCBUUklHX0lOVCB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJc291cmNlcyA9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkKKwkJfHwgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykpCisJCXNvdXJjZXMgfD0gVFJJR19OT1c7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBzb3VyY2VzOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJgorCQljbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19PVEhFUikKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQl1bnNpZ25lZCBpbnQgdG1wID0gQ1JfQ0hBTihjbWQtPnN0YXJ0X2FyZyk7CisKKwkJaWYgKHRtcCA+IDE2KQorCQkJdG1wID0gMTY7CisJCXRtcCB8PSAoY21kLT5zdGFydF9hcmcgJiAoQ1JfSU5WRVJUIHwgQ1JfRURHRSkpOworCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gdG1wKSB7CisJCQljbWQtPnN0YXJ0X2FyZyA9IHRtcDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJCS8qIHRydWUgZm9yIGJvdGggVFJJR19OT1cgYW5kIFRSSUdfSU5UICovCisJCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgbmlfbWluX2FpX3NjYW5fcGVyaW9kX25zKGRldiwKKwkJCQljbWQtPmNoYW5saXN0X2xlbikpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCW5pX21pbl9haV9zY2FuX3BlcmlvZF9ucyhkZXYsCisJCQkJY21kLT5jaGFubGlzdF9sZW4pOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiBkZXZwcml2LT5jbG9ja19ucyAqIDB4ZmZmZmZmKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gZGV2cHJpdi0+Y2xvY2tfbnMgKiAweGZmZmZmZjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIGlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJdW5zaWduZWQgaW50IHRtcCA9IENSX0NIQU4oY21kLT5zY2FuX2JlZ2luX2FyZyk7CisKKwkJaWYgKHRtcCA+IDE2KQorCQkJdG1wID0gMTY7CisJCXRtcCB8PSAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIChDUl9JTlZFUlQgfCBDUl9FREdFKSk7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IHRtcCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHRtcDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfT1RIRVIgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkKKwkJCXx8IChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpKSB7CisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCQkJZXJyKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IGJvYXJkdHlwZS5haV9zcGVlZCkgeworCQkJCWNtZC0+Y29udmVydF9hcmcgPSBib2FyZHR5cGUuYWlfc3BlZWQ7CisJCQkJZXJyKys7CisJCQl9CisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IGRldnByaXYtPmNsb2NrX25zICogMHhmZmZmKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IGRldnByaXYtPmNsb2NrX25zICogMHhmZmZmOworCQkJCWVycisrOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJdW5zaWduZWQgaW50IHRtcCA9IENSX0NIQU4oY21kLT5jb252ZXJ0X2FyZyk7CisKKwkJaWYgKHRtcCA+IDE2KQorCQkJdG1wID0gMTY7CisJCXRtcCB8PSAoY21kLT5jb252ZXJ0X2FyZyAmIChDUl9BTFRfRklMVEVSIHwgQ1JfSU5WRVJUKSk7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IHRtcCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRtcDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIGlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJdW5zaWduZWQgaW50IG1heF9jb3VudCA9IDB4MDEwMDAwMDA7CisKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkKKwkJCW1heF9jb3VudCAtPSBudW1fYWRjX3N0YWdlc182MTF4OworCQlpZiAoY21kLT5zdG9wX2FyZyA+IG1heF9jb3VudCkgeworCQkJY21kLT5zdG9wX2FyZyA9IG1heF9jb3VudDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnN0b3BfYXJnIDwgMSkgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJbmlfdGltZXJfdG9fbnMoZGV2LCBuaV9uc190b190aW1lcihkZXYsCisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKSk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTF4KQorCQkJJiYgKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjE0MykpIHsKKwkJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCQljbWQtPmNvbnZlcnRfYXJnID0KKwkJCQluaV90aW1lcl90b19ucyhkZXYsIG5pX25zX3RvX3RpbWVyKGRldiwKKwkJCQkJY21kLT5jb252ZXJ0X2FyZywKKwkJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSykpOworCQkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJCWVycisrOworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgeworCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgdGltZXI7CisJaW50IG1vZGUxID0gMDsJCS8qIG1vZGUxIGlzIG5lZWRlZCBmb3IgYm90aCBzdG9wIGFuZCBjb252ZXJ0ICovCisJaW50IG1vZGUyID0gMDsKKwlpbnQgc3RhcnRfc3RvcF9zZWxlY3QgPSAwOworCXVuc2lnbmVkIGludCBzdG9wX2NvdW50OworCWludCBpbnRlcnJ1cHRfYV9lbmFibGUgPSAwOworCisJTURQUklOVEsoIm5pX2FpX2NtZFxuIik7CisJaWYgKGRldi0+aXJxID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImNhbm5vdCBydW4gY29tbWFuZCB3aXRob3V0IGFuIGlycSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbmlfY2xlYXJfYWlfZmlmbyhkZXYpOworCisJbmlfbG9hZF9jaGFubmVsZ2Fpbl9saXN0KGRldiwgY21kLT5jaGFubGlzdF9sZW4sIGNtZC0+Y2hhbmxpc3QpOworCisJLyogc3RhcnQgY29uZmlndXJhdGlvbiAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9Db25maWd1cmF0aW9uX1N0YXJ0LCBKb2ludF9SZXNldF9SZWdpc3Rlcik7CisKKwkvKiBkaXNhYmxlIGFuYWxvZyB0cmlnZ2VyaW5nIGZvciBub3csIHNpbmNlIGl0CisJICogaW50ZXJmZXJlcyB3aXRoIHRoZSB1c2Ugb2YgcGZpMCAqLworCWRldnByaXYtPmFuX3RyaWdfZXRjX3JlZyAmPSB+QW5hbG9nX1RyaWdnZXJfRW5hYmxlOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hbl90cmlnX2V0Y19yZWcsCisJCUFuYWxvZ19UcmlnZ2VyX0V0Y19SZWdpc3Rlcik7CisKKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0lOVDoKKwljYXNlIFRSSUdfTk9XOgorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU1RBUlQyX1NlbGVjdCgwKSB8CisJCQlBSV9TVEFSVDFfU3luYyB8IEFJX1NUQVJUMV9FZGdlIHwgQUlfU1RBUlQxX1NlbGVjdCgwKSwKKwkJCUFJX1RyaWdnZXJfU2VsZWN0X1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJeworCQkJaW50IGNoYW4gPSBDUl9DSEFOKGNtZC0+c3RhcnRfYXJnKTsKKwkJCXVuc2lnbmVkIGludCBiaXRzID0gQUlfU1RBUlQyX1NlbGVjdCgwKSB8CisJCQkJQUlfU1RBUlQxX1N5bmMgfCBBSV9TVEFSVDFfU2VsZWN0KGNoYW4gKyAxKTsKKworCQkJaWYgKGNtZC0+c3RhcnRfYXJnICYgQ1JfSU5WRVJUKQorCQkJCWJpdHMgfD0gQUlfU1RBUlQxX1BvbGFyaXR5OworCQkJaWYgKGNtZC0+c3RhcnRfYXJnICYgQ1JfRURHRSkKKwkJCQliaXRzIHw9IEFJX1NUQVJUMV9FZGdlOworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGJpdHMsCisJCQkJQUlfVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltb2RlMiAmPSB+QUlfUHJlX1RyaWdnZXI7CisJbW9kZTIgJj0gfkFJX1NDX0luaXRpYWxfTG9hZF9Tb3VyY2U7CisJbW9kZTIgJj0gfkFJX1NDX1JlbG9hZF9Nb2RlOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBtb2RlMiwgQUlfTW9kZV8yX1JlZ2lzdGVyKTsKKworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAxIHx8IChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpCisJCXx8IChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpKSB7CisJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUT1BfUG9sYXJpdHk7CisJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUT1BfU2VsZWN0KDMxKTsJLy8gbG9naWMgbG93CisJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUT1BfU3luYzsKKwl9IGVsc2UgeworCQlzdGFydF9zdG9wX3NlbGVjdCB8PSBBSV9TVE9QX1NlbGVjdCgxOSk7CS8vIGFpIGNvbmZpZ3VyYXRpb24gbWVtb3J5CisJfQorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBzdGFydF9zdG9wX3NlbGVjdCwKKwkJQUlfU1RBUlRfU1RPUF9TZWxlY3RfUmVnaXN0ZXIpOworCisJZGV2cHJpdi0+YWlfY21kMiA9IDA7CisJc3dpdGNoIChjbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0NPVU5UOgorCQlzdG9wX2NvdW50ID0gY21kLT5zdG9wX2FyZyAtIDE7CisKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkgeworCQkJLy8gaGF2ZSB0byB0YWtlIDMgc3RhZ2UgYWRjIHBpcGVsaW5lIGludG8gYWNjb3VudAorCQkJc3RvcF9jb3VudCArPSBudW1fYWRjX3N0YWdlc182MTF4OworCQl9CisJCS8qIHN0YWdlIG51bWJlciBvZiBzY2FucyAqLworCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgc3RvcF9jb3VudCwgQUlfU0NfTG9hZF9BX1JlZ2lzdGVycyk7CisKKwkJbW9kZTEgfD0gQUlfU3RhcnRfU3RvcCB8IEFJX01vZGVfMV9SZXNlcnZlZCB8IEFJX1RyaWdnZXJfT25jZTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIG1vZGUxLCBBSV9Nb2RlXzFfUmVnaXN0ZXIpOworCQkvKiBsb2FkIFNDIChTY2FuIENvdW50KSAqLworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0NfTG9hZCwgQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKworCQlkZXZwcml2LT5haV9jb250aW51b3VzID0gMDsKKwkJaWYgKHN0b3BfY291bnQgPT0gMCkgeworCQkJZGV2cHJpdi0+YWlfY21kMiB8PSBBSV9FbmRfT25fRW5kX09mX1NjYW47CisJCQlpbnRlcnJ1cHRfYV9lbmFibGUgfD0gQUlfU1RPUF9JbnRlcnJ1cHRfRW5hYmxlOworCQkJLy8gdGhpcyBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGxhc3Qgc2FtcGxlIGZvciBjaGFubGlzdF9sZW4gPiAxLCBub3Qgc3VyZSB3aHkKKwkJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDEpCisJCQkJc3RhcnRfc3RvcF9zZWxlY3QgfD0KKwkJCQkJQUlfU1RPUF9Qb2xhcml0eSB8IEFJX1NUT1BfRWRnZTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJLyogc3RhZ2UgbnVtYmVyIG9mIHNjYW5zICovCisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCAwLCBBSV9TQ19Mb2FkX0FfUmVnaXN0ZXJzKTsKKworCQltb2RlMSB8PSBBSV9TdGFydF9TdG9wIHwgQUlfTW9kZV8xX1Jlc2VydmVkIHwgQUlfQ29udGludW91czsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIG1vZGUxLCBBSV9Nb2RlXzFfUmVnaXN0ZXIpOworCisJCS8qIGxvYWQgU0MgKFNjYW4gQ291bnQpICovCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TQ19Mb2FkLCBBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCisJCWRldnByaXYtPmFpX2NvbnRpbnVvdXMgPSAxOworCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJLyoKKwkJICAgc3RvcCBiaXRzIGZvciBub24gNjExeCBib2FyZHMKKwkJICAgQUlfU0lfU3BlY2lhbF9UcmlnZ2VyX0RlbGF5PTAKKwkJICAgQUlfUHJlX1RyaWdnZXI9MAorCQkgICBBSV9TVEFSVF9TVE9QX1NlbGVjdF9SZWdpc3RlcjoKKwkJICAgQUlfU1RBUlRfUG9sYXJpdHk9MCAoPykgICAgICByaXNpbmcgZWRnZQorCQkgICBBSV9TVEFSVF9FZGdlPTEgICAgICAgICAgICAgIGVkZ2UgdHJpZ2dlcmVkCisJCSAgIEFJX1NUQVJUX1N5bmM9MSAoPykKKwkJICAgQUlfU1RBUlRfU2VsZWN0PTAgICAgICAgICAgICBTSV9UQworCQkgICBBSV9TVE9QX1BvbGFyaXR5PTAgICAgICAgICAgIHJpc2luZyBlZGdlCisJCSAgIEFJX1NUT1BfRWRnZT0wICAgICAgICAgICAgICAgbGV2ZWwKKwkJICAgQUlfU1RPUF9TeW5jPTEKKwkJICAgQUlfU1RPUF9TZWxlY3Q9MTkgICAgICAgICAgICBleHRlcm5hbCBwaW4gKGNvbmZpZ3VyYXRpb24gbWVtKQorCQkgKi8KKwkJc3RhcnRfc3RvcF9zZWxlY3QgfD0gQUlfU1RBUlRfRWRnZSB8IEFJX1NUQVJUX1N5bmM7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBzdGFydF9zdG9wX3NlbGVjdCwKKwkJCUFJX1NUQVJUX1NUT1BfU2VsZWN0X1JlZ2lzdGVyKTsKKworCQltb2RlMiB8PSBBSV9TSV9SZWxvYWRfTW9kZSgwKTsKKwkJLyogQUlfU0lfSW5pdGlhbF9Mb2FkX1NvdXJjZT1BICovCisJCW1vZGUyICY9IH5BSV9TSV9Jbml0aWFsX0xvYWRfU291cmNlOworCQkvL21vZGUyIHw9IEFJX1NDX1JlbG9hZF9Nb2RlOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTIsIEFJX01vZGVfMl9SZWdpc3Rlcik7CisKKwkJLyogbG9hZCBTSSAqLworCQl0aW1lciA9IG5pX25zX3RvX3RpbWVyKGRldiwgY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCVRSSUdfUk9VTkRfTkVBUkVTVCk7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCB0aW1lciwgQUlfU0lfTG9hZF9BX1JlZ2lzdGVycyk7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TSV9Mb2FkLCBBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0VER0UpCisJCQlzdGFydF9zdG9wX3NlbGVjdCB8PSBBSV9TVEFSVF9FZGdlOworCQkvKiBBSV9TVEFSVF9Qb2xhcml0eT09MSBpcyBmYWxsaW5nIGVkZ2UgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiBDUl9JTlZFUlQpCisJCQlzdGFydF9zdG9wX3NlbGVjdCB8PSBBSV9TVEFSVF9Qb2xhcml0eTsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gY21kLT5jb252ZXJ0X3NyYyB8fAorCQkJKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiB+Q1JfRURHRSkgIT0KKwkJCShjbWQtPmNvbnZlcnRfYXJnICYgfkNSX0VER0UpKQorCQkJc3RhcnRfc3RvcF9zZWxlY3QgfD0gQUlfU1RBUlRfU3luYzsKKwkJc3RhcnRfc3RvcF9zZWxlY3QgfD0KKwkJCUFJX1NUQVJUX1NlbGVjdCgxICsgQ1JfQ0hBTihjbWQtPnNjYW5fYmVnaW5fYXJnKSk7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBzdGFydF9zdG9wX3NlbGVjdCwKKwkJCUFJX1NUQVJUX1NUT1BfU2VsZWN0X1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChjbWQtPmNvbnZlcnRfc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCWNhc2UgVFJJR19OT1c6CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID09IDAgfHwgY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVykKKwkJCXRpbWVyID0gMTsKKwkJZWxzZQorCQkJdGltZXIgPSBuaV9uc190b190aW1lcihkZXYsIGNtZC0+Y29udmVydF9hcmcsCisJCQkJVFJJR19ST1VORF9ORUFSRVNUKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDEsIEFJX1NJMl9Mb2FkX0FfUmVnaXN0ZXIpOwkvKiAwLDAgZG9lcyBub3Qgd29yay4gKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIHRpbWVyLCBBSV9TSTJfTG9hZF9CX1JlZ2lzdGVyKTsKKworCQkvKiBBSV9TSTJfUmVsb2FkX01vZGUgPSBhbHRlcm5hdGUgKi8KKwkJLyogQUlfU0kyX0luaXRpYWxfTG9hZF9Tb3VyY2UgPSBBICovCisJCW1vZGUyICY9IH5BSV9TSTJfSW5pdGlhbF9Mb2FkX1NvdXJjZTsKKwkJbW9kZTIgfD0gQUlfU0kyX1JlbG9hZF9Nb2RlOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTIsIEFJX01vZGVfMl9SZWdpc3Rlcik7CisKKwkJLyogQUlfU0kyX0xvYWQgKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NJMl9Mb2FkLCBBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCisJCW1vZGUyIHw9IEFJX1NJMl9SZWxvYWRfTW9kZTsJLy8gYWx0ZXJuYXRlCisJCW1vZGUyIHw9IEFJX1NJMl9Jbml0aWFsX0xvYWRfU291cmNlOwkvLyBCCisKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIG1vZGUyLCBBSV9Nb2RlXzJfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQltb2RlMSB8PSBBSV9DT05WRVJUX1NvdXJjZV9TZWxlY3QoMSArIGNtZC0+Y29udmVydF9hcmcpOworCQlpZiAoKGNtZC0+Y29udmVydF9hcmcgJiBDUl9JTlZFUlQpID09IDApCisJCQltb2RlMSB8PSBBSV9DT05WRVJUX1NvdXJjZV9Qb2xhcml0eTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIG1vZGUxLCBBSV9Nb2RlXzFfUmVnaXN0ZXIpOworCisJCW1vZGUyIHw9IEFJX1N0YXJ0X1N0b3BfR2F0ZV9FbmFibGUgfCBBSV9TQ19HYXRlX0VuYWJsZTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIG1vZGUyLCBBSV9Nb2RlXzJfUmVnaXN0ZXIpOworCisJCWJyZWFrOworCX0KKworCWlmIChkZXYtPmlycSkgeworCisJCS8qIGludGVycnVwdCBvbiBGSUZPLCBlcnJvcnMsIFNDX1RDICovCisJCWludGVycnVwdF9hX2VuYWJsZSB8PSBBSV9FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlIHwKKwkJCUFJX1NDX1RDX0ludGVycnVwdF9FbmFibGU7CisKKyNpZm5kZWYgUENJRE1BCisJCWludGVycnVwdF9hX2VuYWJsZSB8PSBBSV9GSUZPX0ludGVycnVwdF9FbmFibGU7CisjZW5kaWYKKworCQlpZiAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MKKwkJCXx8IChkZXZwcml2LT5haV9jbWQyICYgQUlfRW5kX09uX0VuZF9PZl9TY2FuKSkgeworCQkJLyogd2FrZSBvbiBlbmQtb2Ytc2NhbiAqLworCQkJZGV2cHJpdi0+YWltb2RlID0gQUlNT0RFX1NDQU47CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5haW1vZGUgPSBBSU1PREVfSEFMRl9GVUxMOworCQl9CisKKwkJc3dpdGNoIChkZXZwcml2LT5haW1vZGUpIHsKKwkJY2FzZSBBSU1PREVfSEFMRl9GVUxMOgorCQkJLypnZW5lcmF0ZSBGSUZPIGludGVycnVwdHMgYW5kIERNQSByZXF1ZXN0cyBvbiBoYWxmLWZ1bGwgKi8KKyNpZmRlZiBQQ0lETUEKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9GSUZPX01vZGVfSEZfdG9fRSwKKwkJCQlBSV9Nb2RlXzNfUmVnaXN0ZXIpOworI2Vsc2UKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9GSUZPX01vZGVfSEYsCisJCQkJQUlfTW9kZV8zX1JlZ2lzdGVyKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgQUlNT0RFX1NBTVBMRToKKwkJCS8qZ2VuZXJhdGUgRklGTyBpbnRlcnJ1cHRzIG9uIG5vbi1lbXB0eSAqLworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0ZJRk9fTW9kZV9ORSwKKwkJCQlBSV9Nb2RlXzNfUmVnaXN0ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgQUlNT0RFX1NDQU46CisjaWZkZWYgUENJRE1BCisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfRklGT19Nb2RlX05FLAorCQkJCUFJX01vZGVfM19SZWdpc3Rlcik7CisjZWxzZQorCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0ZJRk9fTW9kZV9IRiwKKwkJCQlBSV9Nb2RlXzNfUmVnaXN0ZXIpOworI2VuZGlmCisJCQlpbnRlcnJ1cHRfYV9lbmFibGUgfD0gQUlfU1RPUF9JbnRlcnJ1cHRfRW5hYmxlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9FcnJvcl9JbnRlcnJ1cHRfQWNrIHwgQUlfU1RPUF9JbnRlcnJ1cHRfQWNrIHwgQUlfU1RBUlRfSW50ZXJydXB0X0FjayB8IEFJX1NUQVJUMl9JbnRlcnJ1cHRfQWNrIHwgQUlfU1RBUlQxX0ludGVycnVwdF9BY2sgfCBBSV9TQ19UQ19JbnRlcnJ1cHRfQWNrIHwgQUlfU0NfVENfRXJyb3JfQ29uZmlybSwgSW50ZXJydXB0X0FfQWNrX1JlZ2lzdGVyKTsJLyogY2xlYXIgaW50ZXJydXB0cyAqLworCisJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyLAorCQkJaW50ZXJydXB0X2FfZW5hYmxlLCAxKTsKKworCQlNRFBSSU5USygiSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyID0gMHglMDR4XG4iLAorCQkJZGV2cHJpdi0+aW50X2FfZW5hYmxlX3JlZyk7CisJfSBlbHNlIHsKKwkJLyogaW50ZXJydXB0IG9uIG5vdGhpbmcgKi8KKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIsIH4wLCAwKTsKKworCQkvKiBYWFggc3RhcnQgcG9sbGluZyBpZiBuZWNlc3NhcnkgKi8KKwkJTURQUklOVEsoImludGVycnVwdGluZyBvbiBub3RoaW5nXG4iKTsKKwl9CisKKwkvKiBlbmQgY29uZmlndXJhdGlvbiAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9Db25maWd1cmF0aW9uX0VuZCwgSm9pbnRfUmVzZXRfUmVnaXN0ZXIpOworCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwKKwkJCUFJX1NJMl9Bcm0gfCBBSV9TSV9Bcm0gfCBBSV9ESVZfQXJtIHwgQUlfU0NfQXJtLAorCQkJQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogWFhYIEFJX1NJX0FybT8gKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsCisJCQlBSV9TSTJfQXJtIHwgQUlfU0lfQXJtIHwgQUlfRElWX0FybSB8IEFJX1NDX0FybSwKKwkJCUFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCWJyZWFrOworCX0KKworI2lmZGVmIFBDSURNQQorCXsKKwkJaW50IHJldHZhbCA9IG5pX2FpX3NldHVwX01JVEVfZG1hKGRldik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwkvL21pdGVfZHVtcF9yZWdzKGRldnByaXYtPm1pdGUpOworI2VuZGlmCisKKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX05PVzoKKwkJLyogQUlfU1RBUlQxX1B1bHNlICovCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TVEFSVDFfUHVsc2UgfCBkZXZwcml2LT5haV9jbWQyLAorCQkJQUlfQ29tbWFuZF8yX1JlZ2lzdGVyKTsKKwkJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgVFJJR19JTlQ6CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gJm5pX2FpX2ludHRyaWc7CisJCWJyZWFrOworCX0KKworCU1EUFJJTlRLKCJleGl0IG5pX2FpX2NtZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU1RBUlQxX1B1bHNlIHwgZGV2cHJpdi0+YWlfY21kMiwKKwkJQUlfQ29tbWFuZF8yX1JlZ2lzdGVyKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9haV9jb25maWdfYW5hbG9nX3RyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBuaV9haV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfQU5BTE9HX1RSSUc6CisJCXJldHVybiBuaV9haV9jb25maWdfYW5hbG9nX3RyaWcoZGV2LCBzLCBpbnNuLCBkYXRhKTsKKwljYXNlIElOU05fQ09ORklHX0FMVF9TT1VSQ0U6CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQkJaWYgKGRhdGFbMV0gJiB+KE1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfUG9zX01hc2sgfAorCQkJCQlNU2VyaWVzX0FJX0J5cGFzc19DYWxfU2VsX05lZ19NYXNrIHwKKwkJCQkJTVNlcmllc19BSV9CeXBhc3NfTW9kZV9NdXhfTWFzayB8CisJCQkJCU1TZXJpZXNfQU9fQnlwYXNzX0FPX0NhbF9TZWxfTWFzaykpIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWRldnByaXYtPmFpX2NhbGliX3NvdXJjZSA9IGRhdGFbMV07CisJCX0gZWxzZSBpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKSB7CisJCQl1bnNpZ25lZCBpbnQgY2FsaWJfc291cmNlOworCisJCQljYWxpYl9zb3VyY2UgPSBkYXRhWzFdICYgMHhmOworCisJCQlpZiAoY2FsaWJfc291cmNlID4gMHhGKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlkZXZwcml2LT5haV9jYWxpYl9zb3VyY2UgPSBjYWxpYl9zb3VyY2U7CisJCQluaV93cml0ZXcoY2FsaWJfc291cmNlLCBDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMpOworCQl9IGVsc2UgeworCQkJdW5zaWduZWQgaW50IGNhbGliX3NvdXJjZTsKKwkJCXVuc2lnbmVkIGludCBjYWxpYl9zb3VyY2VfYWRqdXN0OworCisJCQljYWxpYl9zb3VyY2UgPSBkYXRhWzFdICYgMHhmOworCQkJY2FsaWJfc291cmNlX2FkanVzdCA9IChkYXRhWzFdID4+IDQpICYgMHhmZjsKKworCQkJaWYgKGNhbGliX3NvdXJjZSA+PSA4KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlID0gY2FsaWJfc291cmNlOworCQkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkgeworCQkJCW5pX3dyaXRlYihjYWxpYl9zb3VyY2VfYWRqdXN0LAorCQkJCQlDYWxfR2Fpbl9TZWxlY3RfNjExeCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIDI7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWlfY29uZmlnX2FuYWxvZ190cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYSwgYiwgbW9kZWJpdHM7CisJaW50IGVyciA9IDA7CisKKwkvKiBkYXRhWzFdIGlzIGZsYWdzCisJICogZGF0YVsyXSBpcyBhbmFsb2cgbGluZQorCSAqIGRhdGFbM10gaXMgc2V0IGxldmVsCisJICogZGF0YVs0XSBpcyByZXNldCBsZXZlbCAqLworCWlmICghYm9hcmR0eXBlLmhhc19hbmFsb2dfdHJpZykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChkYXRhWzFdICYgMHhmZmZmMDAwMCkgIT0gQ09NRURJX0VWX1NDQU5fQkVHSU4pIHsKKwkJZGF0YVsxXSAmPSAoQ09NRURJX0VWX1NDQU5fQkVHSU4gfCAweGZmZmYpOworCQllcnIrKzsKKwl9CisJaWYgKGRhdGFbMl0gPj0gYm9hcmR0eXBlLm5fYWRjaGFuKSB7CisJCWRhdGFbMl0gPSBib2FyZHR5cGUubl9hZGNoYW4gLSAxOworCQllcnIrKzsKKwl9CisJaWYgKGRhdGFbM10gPiAyNTUpIHsJLyogYSAqLworCQlkYXRhWzNdID0gMjU1OworCQllcnIrKzsKKwl9CisJaWYgKGRhdGFbNF0gPiAyNTUpIHsJLyogYiAqLworCQlkYXRhWzRdID0gMjU1OworCQllcnIrKzsKKwl9CisJLyoKKwkgKiAwMCBpZ25vcmUKKwkgKiAwMSBzZXQKKwkgKiAxMCByZXNldAorCSAqCisJICogbW9kZXM6CisJICogICAxIGxldmVsOiAgICAgICAgICAgICAgICAgICAgK2ItICAgK2EtCisJICogICAgIGhpZ2ggbW9kZSAgICAgICAgICAgICAgICAwMCAwMCAwMSAxMAorCSAqICAgICBsb3cgbW9kZSAgICAgICAgICAgICAgICAgMDAgMDAgMTAgMDEKKwkgKiAgIDIgbGV2ZWw6IChhPGIpCisJICogICAgIGh5c3RlcmVzaXMgbG93IG1vZGUgICAgICAxMCAwMCAwMCAwMQorCSAqICAgICBoeXN0ZXJlc2lzIGhpZ2ggbW9kZSAgICAgMDEgMDAgMDAgMTAKKwkgKiAgICAgbWlkZGxlIG1vZGUgICAgICAgICAgICAgIDEwIDAxIDAxIDEwCisJICovCisKKwlhID0gZGF0YVszXTsKKwliID0gZGF0YVs0XTsKKwltb2RlYml0cyA9IGRhdGFbMV0gJiAweGZmOworCWlmIChtb2RlYml0cyAmIDB4ZjApIHsKKwkJLyogdHdvIGxldmVsIG1vZGUgKi8KKwkJaWYgKGIgPCBhKSB7CisJCQkvKiBzd2FwIG9yZGVyICovCisJCQlhID0gZGF0YVs0XTsKKwkJCWIgPSBkYXRhWzNdOworCQkJbW9kZWJpdHMgPQorCQkJCSgoZGF0YVsxXSAmIDB4ZikgPDwgNCkgfCAoKGRhdGFbMV0gJiAweGYwKSA+PgorCQkJCTQpOworCQl9CisJCWRldnByaXYtPmF0cmlnX2xvdyA9IGE7CisJCWRldnByaXYtPmF0cmlnX2hpZ2ggPSBiOworCQlzd2l0Y2ggKG1vZGViaXRzKSB7CisJCWNhc2UgMHg4MToJLyogbG93IGh5c3RlcmVzaXMgbW9kZSAqLworCQkJZGV2cHJpdi0+YXRyaWdfbW9kZSA9IDY7CisJCQlicmVhazsKKwkJY2FzZSAweDQyOgkvKiBoaWdoIGh5c3RlcmVzaXMgbW9kZSAqLworCQkJZGV2cHJpdi0+YXRyaWdfbW9kZSA9IDM7CisJCQlicmVhazsKKwkJY2FzZSAweDk2OgkvKiBtaWRkbGUgd2luZG93IG1vZGUgKi8KKwkJCWRldnByaXYtPmF0cmlnX21vZGUgPSAyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYXRhWzFdICY9IH4weGZmOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBvbmUgbGV2ZWwgbW9kZSAqLworCQlpZiAoYiAhPSAwKSB7CisJCQlkYXRhWzRdID0gMDsKKwkJCWVycisrOworCQl9CisJCXN3aXRjaCAobW9kZWJpdHMpIHsKKwkJY2FzZSAweDA2OgkvKiBoaWdoIHdpbmRvdyBtb2RlICovCisJCQlkZXZwcml2LT5hdHJpZ19oaWdoID0gYTsKKwkJCWRldnByaXYtPmF0cmlnX21vZGUgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwOToJLyogbG93IHdpbmRvdyBtb2RlICovCisJCQlkZXZwcml2LT5hdHJpZ19sb3cgPSBhOworCQkJZGV2cHJpdi0+YXRyaWdfbW9kZSA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRhdGFbMV0gJj0gfjB4ZmY7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gNTsKK30KKworLyogbXVuZ2UgZGF0YSBmcm9tIHVuc2lnbmVkIHRvIDIncyBjb21wbGVtZW50IGZvciBhbmFsb2cgb3V0cHV0IGJpcG9sYXIgbW9kZXMgKi8KK3N0YXRpYyB2b2lkIG5pX2FvX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IGNoYW5faW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwl1bnNpZ25lZCBpbnQgcmFuZ2U7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gbnVtX2J5dGVzIC8gc2l6ZW9mKHNob3J0KTsKKwlzaG9ydCAqYXJyYXkgPSBkYXRhOworCisJb2Zmc2V0ID0gMSA8PCAoYm9hcmR0eXBlLmFvYml0cyAtIDEpOworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlyYW5nZSA9IENSX1JBTkdFKGFzeW5jLT5jbWQuY2hhbmxpc3RbY2hhbl9pbmRleF0pOworCQlpZiAoYm9hcmR0eXBlLmFvX3VuaXBvbGFyID09IDAgfHwgKHJhbmdlICYgMSkgPT0gMCkKKwkJCWFycmF5W2ldIC09IG9mZnNldDsKKyNpZmRlZiBQQ0lETUEKKwkJYXJyYXlbaV0gPSBjcHVfdG9fbGUxNihhcnJheVtpXSk7CisjZW5kaWYKKwkJY2hhbl9pbmRleCsrOworCQljaGFuX2luZGV4ICU9IGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOworCX0KK30KKworc3RhdGljIGludCBuaV9tX3Nlcmllc19hb19jb25maWdfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBpbnQgY2hhbnNwZWNbXSwgdW5zaWduZWQgaW50IG5fY2hhbnMsCisJaW50IHRpbWVkKQoreworCXVuc2lnbmVkIGludCByYW5nZTsKKwl1bnNpZ25lZCBpbnQgY2hhbjsKKwl1bnNpZ25lZCBpbnQgY29uZjsKKwlpbnQgaTsKKwlpbnQgaW52ZXJ0ID0gMDsKKworCWlmKHRpbWVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBib2FyZHR5cGUubl9hb2NoYW47ICsraSkgeworCQkJZGV2cHJpdi0+YW9fY29uZltpXSAmPSB+TVNlcmllc19BT19VcGRhdGVfVGltZWRfQml0OworCQkJbmlfd3JpdGViKGRldnByaXYtPmFvX2NvbmZbaV0sIE1fT2Zmc2V0X0FPX0NvbmZpZ19CYW5rKGkpKTsKKwkJCW5pX3dyaXRlYigweGYsIE1fT2Zmc2V0X0FPX1dhdmVmb3JtX09yZGVyKGkpKTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjb21lZGlfa3JhbmdlICprcmFuZ2U7CisJCWNoYW4gPSBDUl9DSEFOKGNoYW5zcGVjW2ldKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjaGFuc3BlY1tpXSk7CisJCWtyYW5nZSA9IHMtPnJhbmdlX3RhYmxlLT5yYW5nZSArIHJhbmdlOworCQlpbnZlcnQgPSAwOworCQljb25mID0gMDsKKwkJc3dpdGNoIChrcmFuZ2UtPm1heCAtIGtyYW5nZS0+bWluKSB7CisJCWNhc2UgMjAwMDAwMDA6CisJCQljb25mIHw9IE1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV8xMFZfSW50ZXJuYWxfQml0czsKKwkJCW5pX3dyaXRlYigwLCBNX09mZnNldF9BT19SZWZlcmVuY2VfQXR0ZW51YXRpb24oY2hhbikpOworCQkJYnJlYWs7CisJCWNhc2UgMTAwMDAwMDA6CisJCQljb25mIHw9IE1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV81Vl9JbnRlcm5hbF9CaXRzOworCQkJbmlfd3JpdGViKDAsIE1fT2Zmc2V0X0FPX1JlZmVyZW5jZV9BdHRlbnVhdGlvbihjaGFuKSk7CisJCQlicmVhazsKKwkJY2FzZSA0MDAwMDAwOgorCQkJY29uZiB8PSBNU2VyaWVzX0FPX0RBQ19SZWZlcmVuY2VfMTBWX0ludGVybmFsX0JpdHM7CisJCQluaV93cml0ZWIoTVNlcmllc19BdHRlbnVhdGVfeDVfQml0LAorCQkJCU1fT2Zmc2V0X0FPX1JlZmVyZW5jZV9BdHRlbnVhdGlvbihjaGFuKSk7CisJCQlicmVhazsKKwkJY2FzZSAyMDAwMDAwOgorCQkJY29uZiB8PSBNU2VyaWVzX0FPX0RBQ19SZWZlcmVuY2VfNVZfSW50ZXJuYWxfQml0czsKKwkJCW5pX3dyaXRlYihNU2VyaWVzX0F0dGVudWF0ZV94NV9CaXQsCisJCQkJTV9PZmZzZXRfQU9fUmVmZXJlbmNlX0F0dGVudWF0aW9uKGNoYW4pKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcnRfcHJpbnRrKCIlczogYnVnISB1bmhhbmRsZWQgYW8gcmVmZXJlbmNlIHZvbHRhZ2VcbiIsCisJCQkJX19GVU5DVElPTl9fKTsKKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoa3JhbmdlLT5tYXggKyBrcmFuZ2UtPm1pbikgeworCQljYXNlIDA6CisJCQljb25mIHw9IE1TZXJpZXNfQU9fREFDX09mZnNldF8wVl9CaXRzOworCQkJYnJlYWs7CisJCWNhc2UgMTAwMDAwMDA6CisJCQljb25mIHw9IE1TZXJpZXNfQU9fREFDX09mZnNldF81Vl9CaXRzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlydF9wcmludGsoIiVzOiBidWchIHVuaGFuZGxlZCBhbyBvZmZzZXQgdm9sdGFnZVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHRpbWVkKQorCQkJY29uZiB8PSBNU2VyaWVzX0FPX1VwZGF0ZV9UaW1lZF9CaXQ7CisJCW5pX3dyaXRlYihjb25mLCBNX09mZnNldF9BT19Db25maWdfQmFuayhjaGFuKSk7CisJCWRldnByaXYtPmFvX2NvbmZbY2hhbl0gPSBjb25mOworCQluaV93cml0ZWIoaSwgTV9PZmZzZXRfQU9fV2F2ZWZvcm1fT3JkZXIoY2hhbikpOworCX0KKwlyZXR1cm4gaW52ZXJ0OworfQorCitzdGF0aWMgaW50IG5pX29sZF9hb19jb25maWdfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgY2hhbnNwZWNbXSwgdW5zaWduZWQgaW50IG5fY2hhbnMpCit7CisJdW5zaWduZWQgaW50IHJhbmdlOworCXVuc2lnbmVkIGludCBjaGFuOworCXVuc2lnbmVkIGludCBjb25mOworCWludCBpOworCWludCBpbnZlcnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5fY2hhbnM7IGkrKykgeworCQljaGFuID0gQ1JfQ0hBTihjaGFuc3BlY1tpXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UoY2hhbnNwZWNbaV0pOworCQljb25mID0gQU9fQ2hhbm5lbChjaGFuKTsKKworCQlpZiAoYm9hcmR0eXBlLmFvX3VuaXBvbGFyKSB7CisJCQlpZiAoKHJhbmdlICYgMSkgPT0gMCkgeworCQkJCWNvbmYgfD0gQU9fQmlwb2xhcjsKKwkJCQlpbnZlcnQgPSAoMSA8PCAoYm9hcmR0eXBlLmFvYml0cyAtIDEpKTsKKwkJCX0gZWxzZSB7CisJCQkJaW52ZXJ0ID0gMDsKKwkJCX0KKwkJCWlmIChyYW5nZSAmIDIpCisJCQkJY29uZiB8PSBBT19FeHRfUmVmOworCQl9IGVsc2UgeworCQkJY29uZiB8PSBBT19CaXBvbGFyOworCQkJaW52ZXJ0ID0gKDEgPDwgKGJvYXJkdHlwZS5hb2JpdHMgLSAxKSk7CisJCX0KKworCQkvKiBub3QgYWxsIGJvYXJkcyBjYW4gZGVnbGl0Y2gsIGJ1dCB0aGlzIHNob3VsZG4ndCBodXJ0ICovCisJCWlmIChjaGFuc3BlY1tpXSAmIENSX0RFR0xJVENIKQorCQkJY29uZiB8PSBBT19EZWdsaXRjaDsKKworCQkvKiBhbmFsb2cgcmVmZXJlbmNlICovCisJCS8qIEFSRUZfT1RIRVIgY29ubmVjdHMgQU8gZ3JvdW5kIHRvIEFJIGdyb3VuZCwgaSB0aGluayAqLworCQljb25mIHw9IChDUl9BUkVGKGNoYW5zcGVjW2ldKSA9PQorCQkJQVJFRl9PVEhFUikgPyBBT19Hcm91bmRfUmVmIDogMDsKKworCQluaV93cml0ZXcoY29uZiwgQU9fQ29uZmlndXJhdGlvbik7CisJCWRldnByaXYtPmFvX2NvbmZbY2hhbl0gPSBjb25mOworCX0KKwlyZXR1cm4gaW52ZXJ0OworfQorCitzdGF0aWMgaW50IG5pX2FvX2NvbmZpZ19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCBjaGFuc3BlY1tdLCB1bnNpZ25lZCBpbnQgbl9jaGFucywgaW50IHRpbWVkKQoreworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJcmV0dXJuIG5pX21fc2VyaWVzX2FvX2NvbmZpZ19jaGFubGlzdChkZXYsIHMsIGNoYW5zcGVjLCBuX2NoYW5zLAorCQkJdGltZWQpOworCWVsc2UKKwkJcmV0dXJuIG5pX29sZF9hb19jb25maWdfY2hhbmxpc3QoZGV2LCBzLCBjaGFuc3BlYywgbl9jaGFucyk7Cit9CitzdGF0aWMgaW50IG5pX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmFvW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgaW50IGludmVydDsKKworCWludmVydCA9IG5pX2FvX2NvbmZpZ19jaGFubGlzdChkZXYsIHMsICZpbnNuLT5jaGFuc3BlYywgMSwgMCk7CisKKwlkZXZwcml2LT5hb1tjaGFuXSA9IGRhdGFbMF07CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJbmlfd3JpdGV3KGRhdGFbMF0sIE1fT2Zmc2V0X0RBQ19EaXJlY3RfRGF0YShjaGFuKSk7CisJfSBlbHNlCisJCW5pX3dyaXRldyhkYXRhWzBdIF4gaW52ZXJ0LAorCQkJKGNoYW4pID8gREFDMV9EaXJlY3RfRGF0YSA6IERBQzBfRGlyZWN0X0RhdGEpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9faW5zbl93cml0ZV82NzF4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGludCBpbnZlcnQ7CisKKwlhb193aW5fb3V0KDEgPDwgY2hhbiwgQU9fSW1tZWRpYXRlXzY3MXgpOworCWludmVydCA9IDEgPDwgKGJvYXJkdHlwZS5hb2JpdHMgLSAxKTsKKworCW5pX2FvX2NvbmZpZ19jaGFubGlzdChkZXYsIHMsICZpbnNuLT5jaGFuc3BlYywgMSwgMCk7CisKKwlkZXZwcml2LT5hb1tjaGFuXSA9IGRhdGFbMF07CisJYW9fd2luX291dChkYXRhWzBdIF4gaW52ZXJ0LCBEQUN4X0RpcmVjdF9EYXRhXzY3MXgoY2hhbikpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0hBUkRXQVJFX0JVRkZFUl9TSVpFOgorCQlzd2l0Y2goZGF0YVsxXSkKKwkJeworCQljYXNlIENPTUVESV9PVVRQVVQ6CisJCQlkYXRhWzJdID0gMSArIGJvYXJkdHlwZS5hb19maWZvX2RlcHRoICogc2l6ZW9mKHNob3J0KTsKKwkJCWlmKGRldnByaXYtPm1pdGUpIGRhdGFbMl0gKz0gZGV2cHJpdi0+bWl0ZS0+Zmlmb19zaXplOworCQkJYnJlYWs7CisJCWNhc2UgQ09NRURJX0lOUFVUOgorCQkJZGF0YVsyXSA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCWludCByZXQ7CisJaW50IGludGVycnVwdF9iX2JpdHM7CisJaW50IGk7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDsKKworCWlmICh0cmlnbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTnVsbCB0cmlnIGF0IGJlZ2lubmluZyBwcmV2ZW50IGFvIHN0YXJ0IHRyaWdnZXIgZnJvbSBleGVjdXRpbmcgbW9yZSB0aGFuCisJICAgb25jZSBwZXIgY29tbWFuZCAoYW5kIGRvaW5nIHRoaW5ncyBsaWtlIHRyeWluZyB0byBhbGxvY2F0ZSB0aGUgYW8gZG1hIGNoYW5uZWwKKwkgICBtdWx0aXBsZSB0aW1lcykgKi8KKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwluaV9zZXRfYml0cyhkZXYsIEludGVycnVwdF9CX0VuYWJsZV9SZWdpc3RlciwKKwkJQU9fRklGT19JbnRlcnJ1cHRfRW5hYmxlIHwgQU9fRXJyb3JfSW50ZXJydXB0X0VuYWJsZSwgMCk7CisJaW50ZXJydXB0X2JfYml0cyA9IEFPX0Vycm9yX0ludGVycnVwdF9FbmFibGU7CisjaWZkZWYgUENJRE1BCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDEsIERBQ19GSUZPX0NsZWFyKTsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnXzZ4eHhfbWFzaykKKwkJbmlfYW9fd2luX291dGwoZGV2LCAweDYsIEFPX0ZJRk9fT2Zmc2V0X0xvYWRfNjExeCk7CisJcmV0ID0gbmlfYW9fc2V0dXBfTUlURV9kbWEoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IG5pX2FvX3dhaXRfZm9yX2RtYV9sb2FkKGRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisjZWxzZQorCXJldCA9IG5pX2FvX3ByZXBfZmlmbyhkZXYsIHMpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIC1FUElQRTsKKworCWludGVycnVwdF9iX2JpdHMgfD0gQU9fRklGT19JbnRlcnJ1cHRfRW5hYmxlOworI2VuZGlmCisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTMgfCBBT19Ob3RfQW5fVVBEQVRFLAorCQlBT19Nb2RlXzNfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMywgQU9fTW9kZV8zX1JlZ2lzdGVyKTsKKwkvKiB3YWl0IGZvciBEQUNzIHRvIGJlIGxvYWRlZCAqLworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJaWYgKChkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJCQlKb2ludF9TdGF0dXNfMl9SZWdpc3RlcikgJgorCQkJCUFPX1RNUkRBQ1dSc19Jbl9Qcm9ncmVzc19TdCkgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkidGltZWQgb3V0IHdhaXRpbmcgZm9yIEFPX1RNUkRBQ1dSc19Jbl9Qcm9ncmVzc19TdCB0byBjbGVhciIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLy8gc3RjIG1hbnVhbCBzYXlzIHdlIGFyZSBuZWVkIHRvIGNsZWFyIGVycm9yIGludGVycnVwdCBhZnRlciBBT19UTVJEQUNXUnNfSW5fUHJvZ3Jlc3NfU3QgY2xlYXJzCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0Vycm9yX0ludGVycnVwdF9BY2ssCisJCUludGVycnVwdF9CX0Fja19SZWdpc3Rlcik7CisKKwluaV9zZXRfYml0cyhkZXYsIEludGVycnVwdF9CX0VuYWJsZV9SZWdpc3RlciwgaW50ZXJydXB0X2JfYml0cywgMSk7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwKKwkJZGV2cHJpdi0+CisJCWFvX2NtZDEgfCBBT19VSV9Bcm0gfCBBT19VQ19Bcm0gfCBBT19CQ19Bcm0gfAorCQlBT19EQUMxX1VwZGF0ZV9Nb2RlIHwgQU9fREFDMF9VcGRhdGVfTW9kZSwKKwkJQU9fQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19jbWQyIHwgQU9fU1RBUlQxX1B1bHNlLAorCQlBT19Db21tYW5kXzJfUmVnaXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBiaXRzOworCWludCBpOworCXVuc2lnbmVkIHRyaWd2YXI7CisKKwlpZiAoZGV2LT5pcnEgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiY2Fubm90IHJ1biBjb21tYW5kIHdpdGhvdXQgYW4gaXJxIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19Db25maWd1cmF0aW9uX1N0YXJ0LCBKb2ludF9SZXNldF9SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fRGlzYXJtLCBBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spIHsKKwkJYW9fd2luX291dChDTEVBUl9XRywgQU9fTWlzY182MTF4KTsKKworCQliaXRzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWludCBjaGFuOworCisJCQljaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJCWJpdHMgfD0gMSA8PCBjaGFuOworCQkJYW9fd2luX291dChjaGFuLCBBT19XYXZlZm9ybV9HZW5lcmF0aW9uXzYxMXgpOworCQl9CisJCWFvX3dpbl9vdXQoYml0cywgQU9fVGltZWRfNjExeCk7CisJfQorCisJbmlfYW9fY29uZmlnX2NoYW5saXN0KGRldiwgcywgY21kLT5jaGFubGlzdCwgY21kLT5jaGFubGlzdF9sZW4sIDEpOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWRldnByaXYtPmFvX21vZGUxIHw9IEFPX0NvbnRpbnVvdXM7CisJCWRldnByaXYtPmFvX21vZGUxICY9IH5BT19UcmlnZ2VyX09uY2U7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgJj0gfkFPX0NvbnRpbnVvdXM7CisJCWRldnByaXYtPmFvX21vZGUxIHw9IEFPX1RyaWdnZXJfT25jZTsKKwl9CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUxLCBBT19Nb2RlXzFfUmVnaXN0ZXIpOworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfSU5UOgorCWNhc2UgVFJJR19OT1c6CisJCWRldnByaXYtPmFvX3RyaWdnZXJfc2VsZWN0ICY9CisJCQl+KEFPX1NUQVJUMV9Qb2xhcml0eSB8IEFPX1NUQVJUMV9TZWxlY3QoLTEpKTsKKwkJZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgfD0gQU9fU1RBUlQxX0VkZ2UgfCBBT19TVEFSVDFfU3luYzsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX3RyaWdnZXJfc2VsZWN0LAorCQkJQU9fVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorICAgICAgICAgICAgICAgIGRldnByaXYtPmFvX3RyaWdnZXJfc2VsZWN0ID0gQU9fU1RBUlQxX1NlbGVjdChDUl9DSEFOKGNtZC0+c3RhcnRfYXJnKSsxKTsKKwkJaWYgKGNtZC0+c3RhcnRfYXJnICYgQ1JfSU5WRVJUKQorCQkJZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgfD0gQU9fU1RBUlQxX1BvbGFyaXR5OyAgLy8gMD1hY3RpdmUgaGlnaCwgMT1hY3RpdmUgbG93LiBzZWUgZGFxLXN0YyAzLTI0IChwMTg2KQorCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9FREdFKQorCQkJZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgfD0gQU9fU1RBUlQxX0VkZ2U7ICAgICAgLy8gMD1lZGdlIGRldGVjdGlvbiBkaXNhYmxlZCwgMT1lbmFibGVkCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCwgQU9fVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCWRldnByaXYtPmFvX21vZGUzICY9IH5BT19UcmlnZ2VyX0xlbmd0aDsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTMsIEFPX01vZGVfM19SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTEsIEFPX01vZGVfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fbW9kZTIgJj0gfkFPX0JDX0luaXRpYWxfTG9hZF9Tb3VyY2U7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUyLCBBT19Nb2RlXzJfUmVnaXN0ZXIpOworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgMHhmZmZmZmYsIEFPX0JDX0xvYWRfQV9SZWdpc3Rlcik7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDAsIEFPX0JDX0xvYWRfQV9SZWdpc3Rlcik7CisJfQorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19CQ19Mb2FkLCBBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCWRldnByaXYtPmFvX21vZGUyICY9IH5BT19VQ19Jbml0aWFsX0xvYWRfU291cmNlOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMiwgQU9fTW9kZV8yX1JlZ2lzdGVyKTsKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWlmKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQl7CisJCQkvLyB0aGlzIGlzIGhvdyB0aGUgTkkgZXhhbXBsZSBjb2RlIGRvZXMgaXQgZm9yIG0tc2VyaWVzIGJvYXJkcywgdmVyaWZpZWQgY29ycmVjdCB3aXRoIDYyNTkKKwkJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCBjbWQtPnN0b3BfYXJnIC0gMSwgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19VQ19Mb2FkLCBBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCQl9ZWxzZQorCQl7CisJCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgY21kLT5zdG9wX2FyZywgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19VQ19Mb2FkLCBBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCQkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIGNtZC0+c3RvcF9hcmcgLSAxLAorCQkJCUFPX1VDX0xvYWRfQV9SZWdpc3Rlcik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCAweGZmZmZmZiwgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCAweGZmZmZmZiwgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDAsIEFPX1VDX0xvYWRfQV9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19VQ19Mb2FkLCBBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgY21kLT5zdG9wX2FyZywgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwl9CisKKwlkZXZwcml2LT5hb19tb2RlMSAmPQorCQl+KEFPX1VJX1NvdXJjZV9TZWxlY3QoMHgxZikgfCBBT19VSV9Tb3VyY2VfUG9sYXJpdHkgfAorCQlBT19VUERBVEVfU291cmNlX1NlbGVjdCgweDFmKSB8IEFPX1VQREFURV9Tb3VyY2VfUG9sYXJpdHkpOworCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJZGV2cHJpdi0+YW9fY21kMiAmPSB+QU9fQkNfR2F0ZV9FbmFibGU7CisJCXRyaWd2YXIgPQorCQkJbmlfbnNfdG9fdGltZXIoZGV2LCBjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJVFJJR19ST1VORF9ORUFSRVNUKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDEsIEFPX1VJX0xvYWRfQV9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19VSV9Mb2FkLCBBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgdHJpZ3ZhciwgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJZGV2cHJpdi0+YW9fbW9kZTEgfD0KKwkJCUFPX1VQREFURV9Tb3VyY2VfU2VsZWN0KGNtZC0+c2Nhbl9iZWdpbl9hcmcpOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkKKwkJCWRldnByaXYtPmFvX21vZGUxIHw9IEFPX1VQREFURV9Tb3VyY2VfUG9sYXJpdHk7CisJCWRldnByaXYtPmFvX2NtZDIgfD0gQU9fQkNfR2F0ZV9FbmFibGU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX2NtZDIsIEFPX0NvbW1hbmRfMl9SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUxLCBBT19Nb2RlXzFfUmVnaXN0ZXIpOworCWRldnByaXYtPmFvX21vZGUyICY9CisJCX4oQU9fVUlfUmVsb2FkX01vZGUoMykgfCBBT19VSV9Jbml0aWFsX0xvYWRfU291cmNlKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTIsIEFPX01vZGVfMl9SZWdpc3Rlcik7CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgPiAxKSB7CisJCWRldnByaXYtPmFvX21vZGUxIHw9IEFPX011bHRpcGxlX0NoYW5uZWxzOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwKKwkJCUFPX051bWJlcl9PZl9DaGFubmVscyhjbWQtPnNjYW5fZW5kX2FyZyAtCisJCQkJMSkgfAorCQkJQU9fVVBEQVRFX091dHB1dF9TZWxlY3QKKwkJCShBT19VcGRhdGVfT3V0cHV0X0hpZ2hfWiksCisJCQlBT19PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgYml0czsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgJj0gfkFPX011bHRpcGxlX0NoYW5uZWxzOworCQliaXRzID0gQU9fVVBEQVRFX091dHB1dF9TZWxlY3QoQU9fVXBkYXRlX091dHB1dF9IaWdoX1opOworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgKG5pX3JlZ19tX3Nlcmllc19tYXNrIHwgbmlfcmVnXzZ4eHhfbWFzaykpIHsKKwkJCWJpdHMgfD0gQU9fTnVtYmVyX09mX0NoYW5uZWxzKDApOworCQl9IGVsc2UgeworCQkJYml0cyB8PSBBT19OdW1iZXJfT2ZfQ2hhbm5lbHMoQ1JfQ0hBTihjbWQtPgorCQkJCQljaGFubGlzdFswXSkpOworCQl9CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBiaXRzLAorCQkJQU9fT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXIpOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTEsIEFPX01vZGVfMV9SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fREFDMF9VcGRhdGVfTW9kZSB8IEFPX0RBQzFfVXBkYXRlX01vZGUsCisJCUFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5hb19tb2RlMyB8PSBBT19TdG9wX09uX092ZXJydW5fRXJyb3I7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUzLCBBT19Nb2RlXzNfUmVnaXN0ZXIpOworCisJZGV2cHJpdi0+YW9fbW9kZTIgJj0gfkFPX0ZJRk9fTW9kZV9NYXNrOworI2lmZGVmIFBDSURNQQorCWRldnByaXYtPmFvX21vZGUyIHw9IEFPX0ZJRk9fTW9kZV9IRl90b19GOworI2Vsc2UKKwlkZXZwcml2LT5hb19tb2RlMiB8PSBBT19GSUZPX01vZGVfSEY7CisjZW5kaWYKKwlkZXZwcml2LT5hb19tb2RlMiAmPSB+QU9fRklGT19SZXRyYW5zbWl0X0VuYWJsZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTIsIEFPX01vZGVfMl9SZWdpc3Rlcik7CisKKwliaXRzID0gQU9fQkNfU291cmNlX1NlbGVjdCB8IEFPX1VQREFURV9QdWxzZV9XaWR0aCB8CisJCUFPX1RNUkRBQ1dSX1B1bHNlX1dpZHRoOworCWlmIChib2FyZHR5cGUuYW9fZmlmb19kZXB0aCkKKwkJYml0cyB8PSBBT19GSUZPX0VuYWJsZTsKKwllbHNlCisJCWJpdHMgfD0gQU9fRE1BX1BJT19Db250cm9sOworI2lmIDAKKwkvKiBGIEhlc3M6IHdpbmRvd3MgZHJpdmVyIGRvZXMgbm90IHNldCBBT19OdW1iZXJfT2ZfREFDX1BhY2thZ2VzIGJpdCBmb3IgNjI4MSwKKwkgICB2ZXJpZmllZCB3aXRoIGJ1cyBhbmFseXplci4gKi8KKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCWJpdHMgfD0gQU9fTnVtYmVyX09mX0RBQ19QYWNrYWdlczsKKyNlbmRpZgorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBiaXRzLCBBT19QZXJzb25hbF9SZWdpc3Rlcik7CisJLy8gZW5hYmxlIHNlbmRpbmcgb2YgYW8gZG1hIHJlcXVlc3RzCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0FPRlJFUV9FbmFibGUsIEFPX1N0YXJ0X1NlbGVjdF9SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQ29uZmlndXJhdGlvbl9FbmQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0JDX1RDX0ludGVycnVwdF9BY2ssCisJCQlJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXIpOworCQluaV9zZXRfYml0cyhkZXYsIEludGVycnVwdF9CX0VuYWJsZV9SZWdpc3RlciwKKwkJCUFPX0JDX1RDX0ludGVycnVwdF9FbmFibGUsIDEpOworCX0KKworCXMtPmFzeW5jLT5pbnR0cmlnID0gJm5pX2FvX2ludHRyaWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9hb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwlpZiAoKGNtZC0+ZmxhZ3MgJiBDTURGX1dSSVRFKSA9PSAwKSB7CisJCWNtZC0+ZmxhZ3MgfD0gQ01ERl9XUklURTsKKwl9CisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX0lOVCB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCXVuc2lnbmVkIGludCB0bXAgPSBDUl9DSEFOKGNtZC0+c3RhcnRfYXJnKTsKKworCQlpZiAodG1wID4gMTgpCisJCQl0bXAgPSAxODsKKwkJdG1wIHw9IChjbWQtPnN0YXJ0X2FyZyAmIChDUl9JTlZFUlQgfCBDUl9FREdFKSk7CisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSB0bXApIHsKKwkJCWNtZC0+c3RhcnRfYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJLyogdHJ1ZSBmb3IgYm90aCBUUklHX05PVyBhbmQgVFJJR19JTlQgKi8KKwkJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBib2FyZHR5cGUuYW9fc3BlZWQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBib2FyZHR5cGUuYW9fc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IGRldnByaXYtPmNsb2NrX25zICogMHhmZmZmZmYpIHsJLyogWFhYIGNoZWNrICovCisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gZGV2cHJpdi0+Y2xvY2tfbnMgKiAweGZmZmZmZjsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsJLyogWFhYIGNoZWNrICovCisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCW5pX3RpbWVyX3RvX25zKGRldiwgbmlfbnNfdG9fdGltZXIoZGV2LAorCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSykpOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvKiBzdGVwIDU6IGZpeCB1cCBjaGFubGlzdCAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9hb19yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8vZGV2cHJpdi0+YW8wcD0weDAwMDA7CisJLy9uaV93cml0ZXcoZGV2cHJpdi0+YW8wcCxBT19Db25maWd1cmF0aW9uKTsKKworCS8vZGV2cHJpdi0+YW8xcD1BT19DaGFubmVsKDEpOworCS8vbmlfd3JpdGV3KGRldnByaXYtPmFvMXAsQU9fQ29uZmlndXJhdGlvbik7CisKKwluaV9yZWxlYXNlX2FvX21pdGVfY2hhbm5lbChkZXYpOworCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0NvbmZpZ3VyYXRpb25fU3RhcnQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fRGlzYXJtLCBBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLCB+MCwgMCk7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0JDX1NvdXJjZV9TZWxlY3QsIEFPX1BlcnNvbmFsX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMHgzZjk4LCBJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19CQ19Tb3VyY2VfU2VsZWN0IHwgQU9fVVBEQVRFX1B1bHNlX1dpZHRoIHwKKwkJQU9fVE1SREFDV1JfUHVsc2VfV2lkdGgsIEFPX1BlcnNvbmFsX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMCwgQU9fT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLCBBT19TdGFydF9TZWxlY3RfUmVnaXN0ZXIpOworCWRldnByaXYtPmFvX2NtZDEgPSAwOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19jbWQxLCBBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCWRldnByaXYtPmFvX2NtZDIgPSAwOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19jbWQyLCBBT19Db21tYW5kXzJfUmVnaXN0ZXIpOworCWRldnByaXYtPmFvX21vZGUxID0gMDsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTEsIEFPX01vZGVfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fbW9kZTIgPSAwOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMiwgQU9fTW9kZV8yX1JlZ2lzdGVyKTsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCWRldnByaXYtPmFvX21vZGUzID0gQU9fTGFzdF9HYXRlX0Rpc2FibGU7CisJZWxzZQorCQlkZXZwcml2LT5hb19tb2RlMyA9IDA7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUzLCBBT19Nb2RlXzNfUmVnaXN0ZXIpOworCWRldnByaXYtPmFvX3RyaWdnZXJfc2VsZWN0ID0gMDsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QsCisJCUFPX1RyaWdnZXJfU2VsZWN0X1JlZ2lzdGVyKTsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnXzZ4eHhfbWFzaykgeworCQl1bnNpZ25lZCBpbW1lZGlhdGVfYml0cyA9IDA7CisJCXVuc2lnbmVkIGk7CisJCWZvcihpID0gMDsgaSA8IHMtPm5fY2hhbjsgKytpKQorCQl7CisJCQlpbW1lZGlhdGVfYml0cyB8PSAxIDw8IGk7CisJCX0KKwkJYW9fd2luX291dChpbW1lZGlhdGVfYml0cywgQU9fSW1tZWRpYXRlXzY3MXgpOworCQlhb193aW5fb3V0KENMRUFSX1dHLCBBT19NaXNjXzYxMXgpOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQ29uZmlndXJhdGlvbl9FbmQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKworCXJldHVybiAwOworfQorCisvLyBkaWdpdGFsIGlvCisKK3N0YXRpYyBpbnQgbmlfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKyNpZmRlZiBERUJVR19ESU8KKwlydF9wcmludGsoIm5pX2Rpb19pbnNuX2NvbmZpZygpIGNoYW49JWQgaW89JWRcbiIsCisJCUNSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCBkYXRhWzBdKTsKKyNlbmRpZgorCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+KDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkocy0+aW9fYml0cyAmICgxIDw8IENSX0NIQU4oaW5zbi0+CisJCQkJCWNoYW5zcGVjKSkpID8gQ09NRURJX09VVFBVVCA6CisJCQlDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZwcml2LT5kaW9fY29udHJvbCAmPSB+RElPX1BpbnNfRGlyX01hc2s7CisJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgfD0gRElPX1BpbnNfRGlyKHMtPmlvX2JpdHMpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fY29udHJvbCwgRElPX0NvbnRyb2xfUmVnaXN0ZXIpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9kaW9faW5zbl9iaXRzKCkgbWFzaz0weCV4IGJpdHM9MHgleFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisjZW5kaWYKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSkgeworCQkvKiBQZXJmb3JtIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgdXNpbmcgdGhlCisJCSAgIHNlcmlhbCBwYXJ0IG9mIHRoZSBkaW8gKi8KKwkJaWYgKChkYXRhWzBdICYgKERJT19TRElOIHwgRElPX1NET1VUKSkKKwkJCSYmIGRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucykKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCWRldnByaXYtPmRpb19vdXRwdXQgJj0gfkRJT19QYXJhbGxlbF9EYXRhX01hc2s7CisJCWRldnByaXYtPmRpb19vdXRwdXQgfD0gRElPX1BhcmFsbGVsX0RhdGFfT3V0KHMtPnN0YXRlKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19vdXRwdXQsCisJCQlESU9fT3V0cHV0X1JlZ2lzdGVyKTsKKwl9CisJZGF0YVsxXSA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIERJT19QYXJhbGxlbF9JbnB1dF9SZWdpc3Rlcik7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaV9tX3Nlcmllc19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworI2lmZGVmIERFQlVHX0RJTworCXJ0X3ByaW50aygibmlfbV9zZXJpZXNfZGlvX2luc25fY29uZmlnKCkgY2hhbj0lZCBpbz0lZFxuIiwKKwkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIGRhdGFbMF0pOworI2VuZGlmCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH4oMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT5pb19iaXRzICYgKDEgPDwgQ1JfQ0hBTihpbnNuLT4KKwkJCQkJY2hhbnNwZWMpKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5pX3dyaXRlbChzLT5pb19iaXRzLCBNX09mZnNldF9ESU9fRGlyZWN0aW9uKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworI2lmZGVmIERFQlVHX0RJTworCXJ0X3ByaW50aygibmlfbV9zZXJpZXNfZGlvX2luc25fYml0cygpIG1hc2s9MHgleCBiaXRzPTB4JXhcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0pOworI2VuZGlmCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCW5pX3dyaXRlbChzLT5zdGF0ZSwgTV9PZmZzZXRfU3RhdGljX0RpZ2l0YWxfT3V0cHV0KTsKKwl9CisJZGF0YVsxXSA9IG5pX3JlYWRsKE1fT2Zmc2V0X1N0YXRpY19EaWdpdGFsX0lucHV0KTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pX2NkaW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IHNvdXJjZXM7CisJdW5zaWduZWQgaTsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwlzb3VyY2VzID0gVFJJR19JTlQ7CisJY21kLT5zdGFydF9zcmMgJj0gc291cmNlczsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlLi4uICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19JTlQpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKwkvKiAuLi4gYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCkgeworCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJY21kLT5zdGFydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJdG1wICY9IENSX1BBQ0tfRkxBR1MoQ0RPX1NhbXBsZV9Tb3VyY2VfU2VsZWN0X01hc2ssIDAsIDAsCisJCQlDUl9JTlZFUlQpOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpIHsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8qIHN0ZXAgNTogY2hlY2sgY2hhbmxpc3QgKi8KKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgKytpKSB7CisJCWlmIChjbWQtPmNoYW5saXN0W2ldICE9IGkpCisJCQllcnIgPSAxOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfY2Rpb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgY2RvX21vZGVfYml0cyA9IENET19GSUZPX01vZGVfQml0IHwgQ0RPX0hhbHRfT25fRXJyb3JfQml0OworCWludCByZXR2YWw7CisKKwluaV93cml0ZWwoQ0RPX1Jlc2V0X0JpdCwgTV9PZmZzZXRfQ0RJT19Db21tYW5kKTsKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfRVhUOgorCQljZG9fbW9kZV9iaXRzIHw9CisJCQlDUl9DSEFOKGNtZC0+CisJCQlzY2FuX2JlZ2luX2FyZykgJiBDRE9fU2FtcGxlX1NvdXJjZV9TZWxlY3RfTWFzazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkKKwkJY2RvX21vZGVfYml0cyB8PSBDRE9fUG9sYXJpdHlfQml0OworCW5pX3dyaXRlbChjZG9fbW9kZV9iaXRzLCBNX09mZnNldF9DRE9fTW9kZSk7CisJaWYgKHMtPmlvX2JpdHMpIHsKKwkJbmlfd3JpdGVsKHMtPnN0YXRlLCBNX09mZnNldF9DRE9fRklGT19EYXRhKTsKKwkJbmlfd3JpdGVsKENET19TV19VcGRhdGVfQml0LCBNX09mZnNldF9DRElPX0NvbW1hbmQpOworCQluaV93cml0ZWwocy0+aW9fYml0cywgTV9PZmZzZXRfQ0RPX01hc2tfRW5hYmxlKTsKKwl9IGVsc2UgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImF0dGVtcHRlZCB0byBydW4gZGlnaXRhbCBvdXRwdXQgY29tbWFuZCB3aXRoIG5vIGxpbmVzIGNvbmZpZ3VyZWQgYXMgb3V0cHV0cyIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dmFsID0gbmlfcmVxdWVzdF9jZG9fbWl0ZV9jaGFubmVsKGRldik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJcy0+YXN5bmMtPmludHRyaWcgPSAmbmlfY2RvX2ludHRyaWc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfY2RvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3sKKyNpZmRlZiBQQ0lETUEKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2VuZGlmCisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgaTsKKwljb25zdCB1bnNpZ25lZCB0aW1lb3V0ID0gMTAwOworCisJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOworCisJLyogcmVhZCBhbGxvYyB0aGUgZW50aXJlIGJ1ZmZlciAqLworCWNvbWVkaV9idWZfcmVhZF9hbGxvYyhzLT5hc3luYywgcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKKworI2lmZGVmIFBDSURNQQorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbikgeworCQltaXRlX3ByZXBfZG1hKGRldnByaXYtPmNkb19taXRlX2NoYW4sIDMyLCAzMik7CisJCW1pdGVfZG1hX2FybShkZXZwcml2LT5jZG9fbWl0ZV9jaGFuKTsKKwl9IGVsc2UgeworCQljb21lZGlfZXJyb3IoZGV2LCAiQlVHOiBubyBjZG8gbWl0ZSBjaGFubmVsPyIpOworCQlyZXR2YWwgPSAtRUlPOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKyNlbmRpZgorLy8gWFhYIG5vdCBzdXJlIHdoYXQgaW50ZXJydXB0IEMgZ3JvdXAgZG9lcworLy8gICAgICBuaV93cml0ZWIoSW50ZXJydXB0X0dyb3VwX0NfRW5hYmxlX0JpdCwgTV9PZmZzZXRfSW50ZXJydXB0X0NfRW5hYmxlKTsKKwkvL3dhaXQgZm9yIGRtYSB0byBmaWxsIG91dHB1dCBmaWZvCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7ICsraSkgeworCQlpZiAobmlfcmVhZGwoTV9PZmZzZXRfQ0RJT19TdGF0dXMpICYgQ0RPX0ZJRk9fRnVsbF9CaXQpCisJCQlicmVhazsKKwkJY29tZWRpX3VkZWxheSgxMCk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImRtYSBmYWlsZWQgdG8gZmlsbCBjZG8gZmlmbyEiKTsKKwkJbmlfY2Rpb19jYW5jZWwoZGV2LCBzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCW5pX3dyaXRlbChDRE9fQXJtX0JpdCB8IENET19FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlX1NldF9CaXQgfAorCQlDRE9fRW1wdHlfRklGT19JbnRlcnJ1cHRfRW5hYmxlX1NldF9CaXQsIE1fT2Zmc2V0X0NESU9fQ29tbWFuZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBuaV9jZGlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCW5pX3dyaXRlbChDRE9fRGlzYXJtX0JpdCB8IENET19FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCB8CisJCUNET19FbXB0eV9GSUZPX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0IHwKKwkJQ0RPX0ZJRk9fUmVxdWVzdF9JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCwKKwkJTV9PZmZzZXRfQ0RJT19Db21tYW5kKTsKKy8vIFhYWCBub3Qgc3VyZSB3aGF0IGludGVycnVwdCBDIGdyb3VwIGRvZXMKKy8vICAgICAgbmlfd3JpdGViKDAsIE1fT2Zmc2V0X0ludGVycnVwdF9DX0VuYWJsZSk7CisJbmlfd3JpdGVsKDAsIE1fT2Zmc2V0X0NET19NYXNrX0VuYWJsZSk7CisJbmlfcmVsZWFzZV9jZG9fbWl0ZV9jaGFubmVsKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jZGlvX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBjZGlvX3N0YXR1czsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0RJT19TVUJERVY7CisjaWZkZWYgUENJRE1BCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNlbmRpZgorCisJaWYgKChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgPT0gMCkgeworCQlyZXR1cm47CisJfQorI2lmZGVmIFBDSURNQQorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbikgeworCQl1bnNpZ25lZCBjZG9fbWl0ZV9zdGF0dXMgPQorCQkJbWl0ZV9nZXRfc3RhdHVzKGRldnByaXYtPmNkb19taXRlX2NoYW4pOworCQlpZiAoY2RvX21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykgeworCQkJd3JpdGVsKENIT1JfQ0xSTEMsCisJCQkJZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsKKwkJCQlNSVRFX0NIT1IoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbi0+Y2hhbm5lbCkpOworCQl9CisJCW1pdGVfc3luY19vdXRwdXRfZG1hKGRldnByaXYtPmNkb19taXRlX2NoYW4sIHMtPmFzeW5jKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisjZW5kaWYKKworCWNkaW9fc3RhdHVzID0gbmlfcmVhZGwoTV9PZmZzZXRfQ0RJT19TdGF0dXMpOworCWlmIChjZGlvX3N0YXR1cyAmIChDRE9fT3ZlcnJ1bl9CaXQgfCBDRE9fVW5kZXJmbG93X0JpdCkpIHsKKy8vICAgICAgICAgICAgICBydF9wcmludGsoImNkaW8gZXJyb3I6IHN0YXR1eD0weCV4XG4iLCBjZGlvX3N0YXR1cyk7CisJCW5pX3dyaXRlbChDRE9fRXJyb3JfSW50ZXJydXB0X0NvbmZpcm1fQml0LCBNX09mZnNldF9DRElPX0NvbW1hbmQpOwkvLyBYWFgganVzdCBndWVzc2luZyB0aGlzIGlzIG5lZWRlZCBhbmQgZG9lcyBzb21ldGhpbmcgdXNlZnVsCisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCX0KKwlpZiAoY2Rpb19zdGF0dXMgJiBDRE9fRklGT19FbXB0eV9CaXQpIHsKKy8vICAgICAgICAgICAgICBydF9wcmludGsoImNkaW8gZmlmbyBlbXB0eVxuIik7CisJCW5pX3dyaXRlbChDRE9fRW1wdHlfRklGT19JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCwKKwkJCU1fT2Zmc2V0X0NESU9fQ29tbWFuZCk7CisvLyAgICAgICAgICAgICAgcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKwluaV9ldmVudChkZXYsIHMpOworfQorCitzdGF0aWMgaW50IG5pX3NlcmlhbF9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGVyciA9IGluc24tPm47CisJdW5zaWduZWQgY2hhciBieXRlX291dCwgYnl0ZV9pbiA9IDA7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfU0VSSUFMX0NMT0NLOgorCisjaWZkZWYgREVCVUdfRElPCisJCXJ0X3ByaW50aygiU1BJIHNlcmlhbCBjbG9jayBDb25maWcgY2RcbiIsIGRhdGFbMV0pOworI2VuZGlmCisJCWRldnByaXYtPnNlcmlhbF9od19tb2RlID0gMTsKKwkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgfD0gRElPX0hXX1NlcmlhbF9FbmFibGU7CisKKwkJaWYgKGRhdGFbMV0gPT0gU0VSSUFMX0RJU0FCTEVEKSB7CisJCQlkZXZwcml2LT5zZXJpYWxfaHdfbW9kZSA9IDA7CisJCQlkZXZwcml2LT5kaW9fY29udHJvbCAmPSB+KERJT19IV19TZXJpYWxfRW5hYmxlIHwKKwkJCQlESU9fU29mdHdhcmVfU2VyaWFsX0NvbnRyb2wpOworCQkJZGF0YVsxXSA9IFNFUklBTF9ESVNBQkxFRDsKKwkJCWRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyA9IGRhdGFbMV07CisJCX0gZWxzZSBpZiAoZGF0YVsxXSA8PSBTRVJJQUxfNjAwTlMpIHsKKwkJCS8qIFdhcm5pbmc6IHRoaXMgY2xvY2sgc3BlZWQgaXMgdG9vIGZhc3QgdG8gcmVsaWFibHkKKwkJCSAgIGNvbnRyb2wgU0NYSS4gKi8KKwkJCWRldnByaXYtPmRpb19jb250cm9sICY9IH5ESU9fSFdfU2VyaWFsX1RpbWViYXNlOworCQkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gU2xvd19JbnRlcm5hbF9UaW1lYmFzZTsKKwkJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0ICY9IH5ESU9fU2VyaWFsX091dF9EaXZpZGVfQnlfMjsKKwkJCWRhdGFbMV0gPSBTRVJJQUxfNjAwTlM7CisJCQlkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgPSBkYXRhWzFdOworCQl9IGVsc2UgaWYgKGRhdGFbMV0gPD0gU0VSSUFMXzFfMlVTKSB7CisJCQlkZXZwcml2LT5kaW9fY29udHJvbCAmPSB+RElPX0hXX1NlcmlhbF9UaW1lYmFzZTsKKwkJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0IHw9IFNsb3dfSW50ZXJuYWxfVGltZWJhc2UgfAorCQkJCURJT19TZXJpYWxfT3V0X0RpdmlkZV9CeV8yOworCQkJZGF0YVsxXSA9IFNFUklBTF8xXzJVUzsKKwkJCWRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyA9IGRhdGFbMV07CisJCX0gZWxzZSBpZiAoZGF0YVsxXSA8PSBTRVJJQUxfMTBVUykgeworCQkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgfD0gRElPX0hXX1NlcmlhbF9UaW1lYmFzZTsKKwkJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0IHw9IFNsb3dfSW50ZXJuYWxfVGltZWJhc2UgfAorCQkJCURJT19TZXJpYWxfT3V0X0RpdmlkZV9CeV8yOworCQkJLyogTm90ZTogRElPX1NlcmlhbF9PdXRfRGl2aWRlX0J5XzIgb25seSBhZmZlY3RzCisJCQkgICA2MDBucy8xLjJ1cy4gSWYgeW91IHR1cm4gZGl2aWRlX2J5XzIgb2ZmIHdpdGggdGhlCisJCQkgICBzbG93IGNsb2NrLCB5b3Ugd2lsbCBzdGlsbCBnZXQgMTB1cywgZXhjZXB0IHRoZW4KKwkJCSAgIGFsbCB5b3VyIGRlbGF5cyBhcmUgd3JvbmcuICovCisJCQlkYXRhWzFdID0gU0VSSUFMXzEwVVM7CisJCQlkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgPSBkYXRhWzFdOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgJj0gfihESU9fSFdfU2VyaWFsX0VuYWJsZSB8CisJCQkJRElPX1NvZnR3YXJlX1NlcmlhbF9Db250cm9sKTsKKwkJCWRldnByaXYtPnNlcmlhbF9od19tb2RlID0gMDsKKwkJCWRhdGFbMV0gPSAoZGF0YVsxXSAvIDEwMDApICogMTAwMDsKKwkJCWRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyA9IGRhdGFbMV07CisJCX0KKworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX2NvbnRyb2wsCisJCQlESU9fQ29udHJvbF9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5jbG9ja19hbmRfZm91dCwKKwkJCUNsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyKTsKKwkJcmV0dXJuIDE7CisKKwkJYnJlYWs7CisKKwljYXNlIElOU05fQ09ORklHX0JJRElSRUNUSU9OQUxfREFUQToKKworCQlpZiAoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID09IDApIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJYnl0ZV9vdXQgPSBkYXRhWzFdICYgMHhGRjsKKworCQlpZiAoZGV2cHJpdi0+c2VyaWFsX2h3X21vZGUpIHsKKwkJCWVyciA9IG5pX3NlcmlhbF9od19yZWFkd3JpdGU4KGRldiwgcywgYnl0ZV9vdXQsCisJCQkJJmJ5dGVfaW4pOworCQl9IGVsc2UgaWYgKGRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyA+IDApIHsKKwkJCWVyciA9IG5pX3NlcmlhbF9zd19yZWFkd3JpdGU4KGRldiwgcywgYnl0ZV9vdXQsCisJCQkJJmJ5dGVfaW4pOworCQl9IGVsc2UgeworCQkJcnRfcHJpbnRrKCJuaV9zZXJpYWxfaW5zbl9jb25maWc6IHNlcmlhbCBkaXNhYmxlZCFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlkYXRhWzFdID0gYnl0ZV9pbiAmIDB4RkY7CisJCXJldHVybiBpbnNuLT5uOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworfQorCitzdGF0aWMgaW50IG5pX3NlcmlhbF9od19yZWFkd3JpdGU4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgY2hhciBkYXRhX291dCwgdW5zaWduZWQgY2hhciAqZGF0YV9pbikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzMTsKKwlpbnQgZXJyID0gMCwgY291bnQgPSAyMDsKKworI2lmZGVmIERFQlVHX0RJTworCXJ0X3ByaW50aygibmlfc2VyaWFsX2h3X3JlYWR3cml0ZTg6IG91dHB1dHRpbmcgMHgleFxuIiwgZGF0YV9vdXQpOworI2VuZGlmCisKKwlkZXZwcml2LT5kaW9fb3V0cHV0ICY9IH5ESU9fU2VyaWFsX0RhdGFfTWFzazsKKwlkZXZwcml2LT5kaW9fb3V0cHV0IHw9IERJT19TZXJpYWxfRGF0YV9PdXQoZGF0YV9vdXQpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fb3V0cHV0LCBESU9fT3V0cHV0X1JlZ2lzdGVyKTsKKworCXN0YXR1czEgPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBKb2ludF9TdGF0dXNfMV9SZWdpc3Rlcik7CisJaWYgKHN0YXR1czEgJiBESU9fU2VyaWFsX0lPX0luX1Byb2dyZXNzX1N0KSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBFcnJvcjsKKwl9CisKKwlkZXZwcml2LT5kaW9fY29udHJvbCB8PSBESU9fSFdfU2VyaWFsX1N0YXJ0OworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fY29udHJvbCwgRElPX0NvbnRyb2xfUmVnaXN0ZXIpOworCWRldnByaXYtPmRpb19jb250cm9sICY9IH5ESU9fSFdfU2VyaWFsX1N0YXJ0OworCisJLyogV2FpdCB1bnRpbCBTVEMgc2F5cyB3ZSdyZSBkb25lLCBidXQgZG9uJ3QgbG9vcCBpbmZpbml0ZWx5LiAqLworCXdoaWxlICgoc3RhdHVzMSA9CisJCQlkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJCUpvaW50X1N0YXR1c18xX1JlZ2lzdGVyKSkgJgorCQlESU9fU2VyaWFsX0lPX0luX1Byb2dyZXNzX1N0KSB7CisJCS8qIERlbGF5IG9uZSBiaXQgcGVyIGxvb3AgKi8KKwkJY29tZWRpX3VkZWxheSgoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zICsgOTk5KSAvIDEwMDApOworCQlpZiAoLS1jb3VudCA8IDApIHsKKwkJCXJ0X3ByaW50aworCQkJCSgibmlfc2VyaWFsX2h3X3JlYWR3cml0ZTg6IFNQSSBzZXJpYWwgSS9PIGRpZG4ndCBmaW5pc2ggaW4gdGltZSFcbiIpOworCQkJZXJyID0gLUVUSU1FOworCQkJZ290byBFcnJvcjsKKwkJfQorCX0KKworCS8qIERlbGF5IGZvciBsYXN0IGJpdC4gVGhpcyBkZWxheSBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYmVjYXVzZQorCSAgIERJT19TZXJpYWxfSU9fSW5fUHJvZ3Jlc3NfU3QgZ29lcyBoaWdoIG9uZSBiaXQgdG9vIGVhcmx5LiAqLworCWNvbWVkaV91ZGVsYXkoKGRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyArIDk5OSkgLyAxMDAwKTsKKworCWlmIChkYXRhX2luICE9IE5VTEwpIHsKKwkJKmRhdGFfaW4gPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBESU9fU2VyaWFsX0lucHV0X1JlZ2lzdGVyKTsKKyNpZmRlZiBERUJVR19ESU8KKwkJcnRfcHJpbnRrKCJuaV9zZXJpYWxfaHdfcmVhZHdyaXRlODogaW5wdXR0ZWQgMHgleFxuIiwgKmRhdGFfaW4pOworI2VuZGlmCisJfQorCisgICAgICBFcnJvcjoKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX2NvbnRyb2wsIERJT19Db250cm9sX1JlZ2lzdGVyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmlfc2VyaWFsX3N3X3JlYWR3cml0ZTgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBjaGFyIGRhdGFfb3V0LCB1bnNpZ25lZCBjaGFyICpkYXRhX2luKQoreworCXVuc2lnbmVkIGNoYXIgbWFzaywgaW5wdXQgPSAwOworCisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9zZXJpYWxfc3dfcmVhZHdyaXRlODogb3V0cHV0dGluZyAweCV4XG4iLCBkYXRhX291dCk7CisjZW5kaWYKKworCS8qIFdhaXQgZm9yIG9uZSBiaXQgYmVmb3JlIHRyYW5zZmVyICovCisJY29tZWRpX3VkZWxheSgoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zICsgOTk5KSAvIDEwMDApOworCisJZm9yIChtYXNrID0gMHg4MDsgbWFzazsgbWFzayA+Pj0gMSkgeworCQkvKiBPdXRwdXQgY3VycmVudCBiaXQ7IG5vdGUgdGhhdCB3ZSBjYW5ub3QgdG91Y2ggcy0+c3RhdGUKKwkJICAgYmVjYXVzZSBpdCBpcyBhIHBlci1zdWJkZXZpY2UgZmllbGQsIGFuZCBzZXJpYWwgaXMKKwkJICAgYSBzZXBhcmF0ZSBzdWJkZXZpY2UgZnJvbSBESU8uICovCisJCWRldnByaXYtPmRpb19vdXRwdXQgJj0gfkRJT19TRE9VVDsKKwkJaWYgKGRhdGFfb3V0ICYgbWFzaykgeworCQkJZGV2cHJpdi0+ZGlvX291dHB1dCB8PSBESU9fU0RPVVQ7CisJCX0KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19vdXRwdXQsCisJCQlESU9fT3V0cHV0X1JlZ2lzdGVyKTsKKworCQkvKiBBc3NlcnQgU0RDTEsgKGFjdGl2ZSBsb3csIGludmVydGVkKSwgd2FpdCBmb3IgaGFsZiBvZgorCQkgICB0aGUgZGVsYXksIGRlYXNzZXJ0IFNEQ0xLLCBhbmQgd2FpdCBmb3IgdGhlIG90aGVyIGhhbGYuICovCisJCWRldnByaXYtPmRpb19jb250cm9sIHw9IERJT19Tb2Z0d2FyZV9TZXJpYWxfQ29udHJvbDsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19jb250cm9sLAorCQkJRElPX0NvbnRyb2xfUmVnaXN0ZXIpOworCisJCWNvbWVkaV91ZGVsYXkoKGRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyArIDk5OSkgLyAyMDAwKTsKKworCQlkZXZwcml2LT5kaW9fY29udHJvbCAmPSB+RElPX1NvZnR3YXJlX1NlcmlhbF9Db250cm9sOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX2NvbnRyb2wsCisJCQlESU9fQ29udHJvbF9SZWdpc3Rlcik7CisKKwkJY29tZWRpX3VkZWxheSgoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zICsgOTk5KSAvIDIwMDApOworCisJCS8qIElucHV0IGN1cnJlbnQgYml0ICovCisJCWlmIChkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJCURJT19QYXJhbGxlbF9JbnB1dF9SZWdpc3RlcikgJiBESU9fU0RJTikgeworLyoJCQlydF9wcmludGsoIkRJT19QX0lfUjogMHgleFxuIiwgZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgRElPX1BhcmFsbGVsX0lucHV0X1JlZ2lzdGVyKSk7ICovCisJCQlpbnB1dCB8PSBtYXNrOworCQl9CisJfQorI2lmZGVmIERFQlVHX0RJTworCXJ0X3ByaW50aygibmlfc2VyaWFsX3N3X3JlYWR3cml0ZTg6IGlucHV0dGVkIDB4JXhcbiIsIGlucHV0KTsKKyNlbmRpZgorCWlmIChkYXRhX2luKQorCQkqZGF0YV9pbiA9IGlucHV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pb19jb21tb25fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJaWYgKGRldnByaXYtPmNvdW50ZXJfZGV2KSB7CisJCQluaV9ncGN0X2RldmljZV9kZXN0cm95KGRldnByaXYtPmNvdW50ZXJfZGV2KTsKKwkJfQorCX0KKwlpZiAoZGV2LT5zdWJkZXZpY2VzICYmIGJvYXJkdHlwZS5oYXNfODI1NSkKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIE5JXzgyNTVfRElPX1NVQkRFVik7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfYW9fNjd4eChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCXsKKwkJbmlfYW9fd2luX291dHcoZGV2LCBBT19DaGFubmVsKGkpIHwgMHgwLAorCQkJQU9fQ29uZmlndXJhdGlvbl8yXzY3eHgpOworCX0KKwlhb193aW5fb3V0KDB4MCwgQU9fTGF0ZXJfU2luZ2xlX1BvaW50X1VwZGF0ZXMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfZ3BjdF90b19zdGNfcmVnaXN0ZXIoZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwl1bnNpZ25lZCBzdGNfcmVnaXN0ZXI7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIE5JVElPX0cwX0F1dG9pbmNyZW1lbnRfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0F1dG9pbmNyZW1lbnRfUmVnaXN0ZXIoMCk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfQXV0b2luY3JlbWVudF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfQXV0b2luY3JlbWVudF9SZWdpc3RlcigxKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Db21tYW5kX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19Db21tYW5kX1JlZ2lzdGVyKDApOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0NvbW1hbmRfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0NvbW1hbmRfUmVnaXN0ZXIoMSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfSFdfU2F2ZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfSFdfU2F2ZV9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9IV19TYXZlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19IV19TYXZlX1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX1NXX1NhdmVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX1NhdmVfUmVnaXN0ZXIoMCk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU1dfU2F2ZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfU2F2ZV9SZWdpc3RlcigxKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Nb2RlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19Nb2RlX1JlZ2lzdGVyKDApOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX01vZGVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX01vZGVfUmVnaXN0ZXIoMSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfTG9hZEFfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0xvYWRfQV9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9Mb2FkQV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfTG9hZF9BX1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0xvYWRCX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19Mb2FkX0JfUmVnaXN0ZXIoMCk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfTG9hZEJfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0xvYWRfQl9SZWdpc3RlcigxKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9JbnB1dF9TZWxlY3RfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0lucHV0X1NlbGVjdF9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9JbnB1dF9TZWxlY3RfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0lucHV0X1NlbGVjdF9SZWdpc3RlcigxKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfU3RhdHVzX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19TdGF0dXNfUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzAxX0pvaW50X1Jlc2V0X1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gSm9pbnRfUmVzZXRfUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzAxX0pvaW50X1N0YXR1czFfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBKb2ludF9TdGF0dXNfMV9SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMl9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEpvaW50X1N0YXR1c18yX1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEludGVycnVwdF9BX0Fja19SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfU3RhdHVzX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gQUlfU3RhdHVzXzFfUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU3RhdHVzX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gQU9fU3RhdHVzXzFfUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfSW50ZXJydXB0X0VuYWJsZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEludGVycnVwdF9BX0VuYWJsZV9SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIiVzOiB1bmhhbmRsZWQgcmVnaXN0ZXIgMHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RjX3JlZ2lzdGVyOworfQorCitzdGF0aWMgdm9pZCBuaV9ncGN0X3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBiaXRzLAorCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2LT5kZXY7CisJdW5zaWduZWQgc3RjX3JlZ2lzdGVyOworCS8qIGJpdHMgaW4gdGhlIGpvaW4gcmVzZXQgcmVnaXN0ZXIgd2hpY2ggYXJlIHJlbGV2YW50IHRvIGNvdW50ZXJzICovCisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdwY3Rfam9pbnRfcmVzZXRfbWFzayA9IEcwX1Jlc2V0IHwgRzFfUmVzZXQ7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdwY3RfaW50ZXJydXB0X2FfZW5hYmxlX21hc2sgPQorCQlHMF9HYXRlX0ludGVycnVwdF9FbmFibGUgfCBHMF9UQ19JbnRlcnJ1cHRfRW5hYmxlOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBncGN0X2ludGVycnVwdF9iX2VuYWJsZV9tYXNrID0KKwkJRzFfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlIHwgRzFfVENfSW50ZXJydXB0X0VuYWJsZTsKKworCXN3aXRjaCAocmVnKSB7CisJCS8qIG0tc2VyaWVzLW9ubHkgcmVnaXN0ZXJzICovCisJY2FzZSBOSVRJT19HMF9Db3VudGluZ19Nb2RlX1JlZzoKKwkJbmlfd3JpdGV3KGJpdHMsIE1fT2Zmc2V0X0cwX0NvdW50aW5nX01vZGUpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0NvdW50aW5nX01vZGVfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzFfQ291bnRpbmdfTW9kZSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfU2Vjb25kX0dhdGVfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzBfU2Vjb25kX0dhdGUpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX1NlY29uZF9HYXRlX1JlZzoKKwkJbmlfd3JpdGV3KGJpdHMsIE1fT2Zmc2V0X0cxX1NlY29uZF9HYXRlKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9ETUFfQ29uZmlnX1JlZzoKKwkJbmlfd3JpdGV3KGJpdHMsIE1fT2Zmc2V0X0cwX0RNQV9Db25maWcpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0RNQV9Db25maWdfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzFfRE1BX0NvbmZpZyk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfQUJaX1JlZzoKKwkJbmlfd3JpdGV3KGJpdHMsIE1fT2Zmc2V0X0cwX01TZXJpZXNfQUJaKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9BQlpfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzFfTVNlcmllc19BQlopOworCQlicmVhazsKKworCQkvKiAzMiBiaXQgcmVnaXN0ZXJzICovCisJY2FzZSBOSVRJT19HMF9Mb2FkQV9SZWc6CisJY2FzZSBOSVRJT19HMV9Mb2FkQV9SZWc6CisJY2FzZSBOSVRJT19HMF9Mb2FkQl9SZWc6CisJY2FzZSBOSVRJT19HMV9Mb2FkQl9SZWc6CisJCXN0Y19yZWdpc3RlciA9IG5pX2dwY3RfdG9fc3RjX3JlZ2lzdGVyKHJlZyk7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCBiaXRzLCBzdGNfcmVnaXN0ZXIpOworCQlicmVhazsKKworCQkvKiAxNiBiaXQgcmVnaXN0ZXJzICovCisJY2FzZSBOSVRJT19HMF9JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJQlVHX09OKGJpdHMgJiB+Z3BjdF9pbnRlcnJ1cHRfYV9lbmFibGVfbWFzayk7CisJCW5pX3NldF9iaXRmaWVsZChkZXYsIEludGVycnVwdF9BX0VuYWJsZV9SZWdpc3RlciwKKwkJCWdwY3RfaW50ZXJydXB0X2FfZW5hYmxlX21hc2ssIGJpdHMpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0ludGVycnVwdF9FbmFibGVfUmVnOgorCQlCVUdfT04oYml0cyAmIH5ncGN0X2ludGVycnVwdF9iX2VuYWJsZV9tYXNrKTsKKwkJbmlfc2V0X2JpdGZpZWxkKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQkJZ3BjdF9pbnRlcnJ1cHRfYl9lbmFibGVfbWFzaywgYml0cyk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzAxX0pvaW50X1Jlc2V0X1JlZzoKKwkJQlVHX09OKGJpdHMgJiB+Z3BjdF9qb2ludF9yZXNldF9tYXNrKTsKKwkJLyogZmFsbC10aHJvdWdoICovCisJZGVmYXVsdDoKKwkJc3RjX3JlZ2lzdGVyID0gbmlfZ3BjdF90b19zdGNfcmVnaXN0ZXIocmVnKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGJpdHMsIHN0Y19yZWdpc3Rlcik7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbmlfZ3BjdF9yZWFkX3JlZ2lzdGVyKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2LT5kZXY7CisJdW5zaWduZWQgc3RjX3JlZ2lzdGVyOworCXN3aXRjaCAocmVnKSB7CisJCS8qIG0tc2VyaWVzIG9ubHkgcmVnaXN0ZXJzICovCisJY2FzZSBOSVRJT19HMF9ETUFfU3RhdHVzX1JlZzoKKwkJcmV0dXJuIG5pX3JlYWR3KE1fT2Zmc2V0X0cwX0RNQV9TdGF0dXMpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0RNQV9TdGF0dXNfUmVnOgorCQlyZXR1cm4gbmlfcmVhZHcoTV9PZmZzZXRfRzFfRE1BX1N0YXR1cyk7CisJCWJyZWFrOworCisJCS8qIDMyIGJpdCByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0hXX1NhdmVfUmVnOgorCWNhc2UgTklUSU9fRzFfSFdfU2F2ZV9SZWc6CisJY2FzZSBOSVRJT19HMF9TV19TYXZlX1JlZzoKKwljYXNlIE5JVElPX0cxX1NXX1NhdmVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBuaV9ncGN0X3RvX3N0Y19yZWdpc3RlcihyZWcpOworCQlyZXR1cm4gZGV2cHJpdi0+c3RjX3JlYWRsKGRldiwgc3RjX3JlZ2lzdGVyKTsKKwkJYnJlYWs7CisKKwkJLyogMTYgYml0IHJlZ2lzdGVycyAqLworCWRlZmF1bHQ6CisJCXN0Y19yZWdpc3RlciA9IG5pX2dwY3RfdG9fc3RjX3JlZ2lzdGVyKHJlZyk7CisJCXJldHVybiBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBzdGNfcmVnaXN0ZXIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfZnJlcV9vdXRfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgJiBGT1VUX0RpdmlkZXJfbWFzazsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9mcmVxX291dF9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkZXZwcml2LT5jbG9ja19hbmRfZm91dCAmPSB+Rk9VVF9FbmFibGU7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmNsb2NrX2FuZF9mb3V0LAorCQlDbG9ja19hbmRfRk9VVF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgJj0gfkZPVVRfRGl2aWRlcl9tYXNrOworCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0IHw9IEZPVVRfRGl2aWRlcihkYXRhWzBdKTsKKwlkZXZwcml2LT5jbG9ja19hbmRfZm91dCB8PSBGT1VUX0VuYWJsZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQsCisJCUNsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyKTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGludCBuaV9zZXRfZnJlcV9vdXRfY2xvY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjbG9ja19zb3VyY2UpCit7CisJc3dpdGNoIChjbG9ja19zb3VyY2UpIHsKKwljYXNlIE5JX0ZSRVFfT1VUX1RJTUVCQVNFXzFfRElWXzJfQ0xPQ0tfU1JDOgorCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dCAmPSB+Rk9VVF9UaW1lYmFzZV9TZWxlY3Q7CisJCWJyZWFrOworCWNhc2UgTklfRlJFUV9PVVRfVElNRUJBU0VfMl9DTE9DS19TUkM6CisJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0IHw9IEZPVVRfVGltZWJhc2VfU2VsZWN0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmNsb2NrX2FuZF9mb3V0LAorCQlDbG9ja19hbmRfRk9VVF9SZWdpc3Rlcik7CisJcmV0dXJuIDM7Cit9CisKK3N0YXRpYyB2b2lkIG5pX2dldF9mcmVxX291dF9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogY2xvY2tfc291cmNlLAorCXVuc2lnbmVkIGludCAqIGNsb2NrX3BlcmlvZF9ucykKK3sKKwlpZiAoZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgJiBGT1VUX1RpbWViYXNlX1NlbGVjdCkgeworCQkqY2xvY2tfc291cmNlID0gTklfRlJFUV9PVVRfVElNRUJBU0VfMl9DTE9DS19TUkM7CisJCSpjbG9ja19wZXJpb2RfbnMgPSBUSU1FQkFTRV8yX05TOworCX0gZWxzZSB7CisJCSpjbG9ja19zb3VyY2UgPSBOSV9GUkVRX09VVF9USU1FQkFTRV8xX0RJVl8yX0NMT0NLX1NSQzsKKwkJKmNsb2NrX3BlcmlvZF9ucyA9IFRJTUVCQVNFXzFfTlMgKiAyOworCX0KK30KKworc3RhdGljIGludCBuaV9mcmVxX291dF9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfQ0xPQ0tfU1JDOgorCQlyZXR1cm4gbmlfc2V0X2ZyZXFfb3V0X2Nsb2NrKGRldiwgZGF0YVsxXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0NMT0NLX1NSQzoKKwkJbmlfZ2V0X2ZyZXFfb3V0X2Nsb2NrKGRldiwgJmRhdGFbMV0sICZkYXRhWzJdKTsKKwkJcmV0dXJuIDM7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG5pX2FsbG9jX3ByaXZhdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YobmlfcHJpdmF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPndpbmRvd19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+c29mdF9yZWdfY29weV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2spOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IG5pX0VfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBqOworCWVudW0gbmlfZ3BjdF92YXJpYW50IGNvdW50ZXJfdmFyaWFudDsKKworCWlmIChib2FyZHR5cGUubl9hb2NoYW4gPiBNQVhfTl9BT19DSEFOKSB7CisJCXByaW50aygiYnVnISBib2FyZHR5cGUubl9hb2NoYW4gPiBNQVhfTl9BT19DSEFOXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCBOSV9OVU1fU1VCREVWSUNFUykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9BSV9TVUJERVY7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJaWYgKGJvYXJkdHlwZS5uX2FkY2hhbikgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCXMtPnN1YmRldl9mbGFncyA9CisJCQlTREZfUkVBREFCTEUgfCBTREZfRElGRiB8IFNERl9ESVRIRVIgfCBTREZfQ01EX1JFQUQ7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxMXgpCisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0dST1VORCB8IFNERl9DT01NT04gfCBTREZfT1RIRVI7CisJCWlmIChib2FyZHR5cGUuYWRiaXRzID4gMTYpCisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0xTQU1QTDsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9TT0ZUX0NBTElCUkFURUQ7CisJCXMtPm5fY2hhbiA9IGJvYXJkdHlwZS5uX2FkY2hhbjsKKwkJcy0+bGVuX2NoYW5saXN0ID0gNTEyOworCQlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmFkYml0cykgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9IG5pX3JhbmdlX2xrdXBbYm9hcmR0eXBlLmdhaW5sa3VwXTsKKwkJcy0+aW5zbl9yZWFkID0gJm5pX2FpX2luc25fcmVhZDsKKwkJcy0+aW5zbl9jb25maWcgPSAmbmlfYWlfaW5zbl9jb25maWc7CisJCXMtPmRvX2NtZHRlc3QgPSAmbmlfYWlfY21kdGVzdDsKKwkJcy0+ZG9fY21kID0gJm5pX2FpX2NtZDsKKwkJcy0+Y2FuY2VsID0gJm5pX2FpX3Jlc2V0OworCQlzLT5wb2xsID0gJm5pX2FpX3BvbGw7CisJCXMtPm11bmdlID0gJm5pX2FpX211bmdlOworI2lmZGVmIFBDSURNQQorCQlzLT5hc3luY19kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFOworI2VuZGlmCisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FPX1NVQkRFVjsKKwlpZiAoYm9hcmR0eXBlLm5fYW9jaGFuKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0RFR0xJVENIIHwgU0RGX0dST1VORDsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9TT0ZUX0NBTElCUkFURUQ7CisJCXMtPm5fY2hhbiA9IGJvYXJkdHlwZS5uX2FvY2hhbjsKKwkJcy0+bWF4ZGF0YSA9ICgxIDw8IGJvYXJkdHlwZS5hb2JpdHMpIC0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSBib2FyZHR5cGUuYW9fcmFuZ2VfdGFibGU7CisJCXMtPmluc25fcmVhZCA9ICZuaV9hb19pbnNuX3JlYWQ7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKSB7CisJCQlzLT5pbnNuX3dyaXRlID0gJm5pX2FvX2luc25fd3JpdGVfNjcxeDsKKwkJfSBlbHNlIHsKKwkJCXMtPmluc25fd3JpdGUgPSAmbmlfYW9faW5zbl93cml0ZTsKKwkJfQorCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9hb19pbnNuX2NvbmZpZzsKKyNpZmRlZiBQQ0lETUEKKwkJaWYgKGJvYXJkdHlwZS5uX2FvY2hhbikgeworCQkJcy0+YXN5bmNfZG1hX2RpciA9IERNQV9UT19ERVZJQ0U7CisjZWxzZQorCQlpZiAoYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGgpIHsKKyNlbmRpZgorCQkJZGV2LT53cml0ZV9zdWJkZXYgPSBzOworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfV1JJVEU7CisJCQlzLT5kb19jbWQgPSAmbmlfYW9fY21kOworCQkJcy0+ZG9fY21kdGVzdCA9ICZuaV9hb19jbWR0ZXN0OworCQkJcy0+bGVuX2NoYW5saXN0ID0gYm9hcmR0eXBlLm5fYW9jaGFuOworCQkJaWYgKChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgPT0gMCkKKwkJCQlzLT5tdW5nZSA9IG5pX2FvX211bmdlOworCQl9CisJCXMtPmNhbmNlbCA9ICZuaV9hb19yZXNldDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182N3h4X21hc2spKQorCQlpbml0X2FvXzY3eHgoZGV2LCBzKTsKKworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0RJT19TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+aW9fYml0cyA9IDA7CQkvKiBhbGwgYml0cyBpbnB1dCAqLworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+bl9jaGFuID0gYm9hcmR0eXBlLm51bV9wMF9kaW9fY2hhbm5lbHM7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCXMtPnN1YmRldl9mbGFncyB8PQorCQkJU0RGX0xTQU1QTCB8IFNERl9DTURfV1JJVEUgLyogfCBTREZfQ01EX1JFQUQgKi8gOworCQlzLT5pbnNuX2JpdHMgPSAmbmlfbV9zZXJpZXNfZGlvX2luc25fYml0czsKKwkJcy0+aW5zbl9jb25maWcgPSAmbmlfbV9zZXJpZXNfZGlvX2luc25fY29uZmlnOworCQlzLT5kb19jbWQgPSAmbmlfY2Rpb19jbWQ7CisJCXMtPmRvX2NtZHRlc3QgPSAmbmlfY2Rpb19jbWR0ZXN0OworCQlzLT5jYW5jZWwgPSAmbmlfY2Rpb19jYW5jZWw7CisJCXMtPmFzeW5jX2RtYV9kaXIgPSBETUFfQklESVJFQ1RJT05BTDsKKwkJcy0+bGVuX2NoYW5saXN0ID0gcy0+bl9jaGFuOworCisJCW5pX3dyaXRlbChDRE9fUmVzZXRfQml0IHwgQ0RJX1Jlc2V0X0JpdCwgTV9PZmZzZXRfQ0RJT19Db21tYW5kKTsKKwkJbmlfd3JpdGVsKHMtPmlvX2JpdHMsIE1fT2Zmc2V0X0RJT19EaXJlY3Rpb24pOworCX0gZWxzZSB7CisJCXMtPmluc25fYml0cyA9ICZuaV9kaW9faW5zbl9iaXRzOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9kaW9faW5zbl9jb25maWc7CisJCWRldnByaXYtPmRpb19jb250cm9sID0gRElPX1BpbnNfRGlyKHMtPmlvX2JpdHMpOworCQluaV93cml0ZXcoZGV2cHJpdi0+ZGlvX2NvbnRyb2wsIERJT19Db250cm9sX1JlZ2lzdGVyKTsKKwl9CisKKwkvKiA4MjU1IGRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV84MjU1X0RJT19TVUJERVY7CisJaWYgKGJvYXJkdHlwZS5oYXNfODI1NSkgeworCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgbmlfODI1NV9jYWxsYmFjaywgKHVuc2lnbmVkIGxvbmcpZGV2KTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIGZvcm1lcmx5IGdlbmVyYWwgcHVycG9zZSBjb3VudGVyL3RpbWVyIGRldmljZSwgYnV0IG5vIGxvbmdlciB1c2VkICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX1VOVVNFRF9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCS8qIGNhbGlicmF0aW9uIHN1YmRldmljZSAtLSBhaSBhbmQgYW8gKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQ0FMSUJSQVRJT05fU1VCREVWOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DQUxJQjsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJLy8gaW50ZXJuYWwgUFdNIGFuYWxvZyBvdXRwdXQgdXNlZCBmb3IgQUkgbm9ubGluZWFyaXR5IGNhbGlicmF0aW9uCisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9JTlRFUk5BTDsKKwkJcy0+aW5zbl9jb25maWcgPSAmbmlfbV9zZXJpZXNfcHdtX2NvbmZpZzsKKwkJcy0+bl9jaGFuID0gMTsKKwkJcy0+bWF4ZGF0YSA9IDA7CisJCW5pX3dyaXRlbCgweDAsIE1fT2Zmc2V0X0NhbF9QV00pOworCX0gZWxzZSBpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKSB7CisJCS8vIGludGVybmFsIFBXTSBhbmFsb2cgb3V0cHV0IHVzZWQgZm9yIEFJIG5vbmxpbmVhcml0eSBjYWxpYnJhdGlvbgorCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfSU5URVJOQUw7CisJCXMtPmluc25fY29uZmlnID0gJm5pXzYxNDNfcHdtX2NvbmZpZzsKKwkJcy0+bl9jaGFuID0gMTsKKwkJcy0+bWF4ZGF0YSA9IDA7CisJfSBlbHNlIHsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCQlzLT5pbnNuX3JlYWQgPSAmbmlfY2FsaWJfaW5zbl9yZWFkOworCQlzLT5pbnNuX3dyaXRlID0gJm5pX2NhbGliX2luc25fd3JpdGU7CisJCWNhbGRhY19zZXR1cChkZXYsIHMpOworCX0KKworCS8qIEVFUFJPTSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9FRVBST01fU1VCREVWOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9NRU1PUlk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0lOVEVSTkFMOworCXMtPm1heGRhdGEgPSAweGZmOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQlzLT5uX2NoYW4gPSBNX1NFUklFU19FRVBST01fU0laRTsKKwkJcy0+aW5zbl9yZWFkID0gJm5pX21fc2VyaWVzX2VlcHJvbV9pbnNuX3JlYWQ7CisJfSBlbHNlIHsKKwkJcy0+bl9jaGFuID0gNTEyOworCQlzLT5pbnNuX3JlYWQgPSAmbmlfZWVwcm9tX2luc25fcmVhZDsKKwl9CisKKwkvKiBQRkkgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfUEZJX0RJT19TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCXVuc2lnbmVkIGk7CisJCXMtPm5fY2hhbiA9IDE2OworCQluaV93cml0ZXcocy0+c3RhdGUsIE1fT2Zmc2V0X1BGSV9ETyk7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUEZJX09VVFBVVF9TRUxFQ1RfUkVHUzsgKytpKSB7CisJCQluaV93cml0ZXcoZGV2cHJpdi0+cGZpX291dHB1dF9zZWxlY3RfcmVnW2ldLAorCQkJCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0KGkgKyAxKSk7CisJCX0KKwl9IGVsc2UgeworCQlzLT5uX2NoYW4gPSAxMDsKKwl9CisJcy0+bWF4ZGF0YSA9IDE7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCXMtPmluc25fYml0cyA9ICZuaV9wZmlfaW5zbl9iaXRzOworCX0KKwlzLT5pbnNuX2NvbmZpZyA9ICZuaV9wZmlfaW5zbl9jb25maWc7CisJbmlfc2V0X2JpdHMoZGV2LCBJT19CaWRpcmVjdGlvbl9QaW5fUmVnaXN0ZXIsIH4wLCAwKTsKKworCS8qIGNzNTUyOSBjYWxpYnJhdGlvbiBhZGMgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQ1M1NTI5X0NBTElCUkFUSU9OX1NVQkRFVjsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnXzY3eHhfbWFzaykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9ESUZGIHwgU0RGX0lOVEVSTkFMOworCQkvLyBvbmUgY2hhbm5lbCBmb3IgZWFjaCBhbmFsb2cgb3V0cHV0IGNoYW5uZWwKKwkJcy0+bl9jaGFuID0gYm9hcmR0eXBlLm5fYW9jaGFuOworCQlzLT5tYXhkYXRhID0gKDEgPDwgMTYpIC0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsJLyogWFhYICovCisJCXMtPmluc25fcmVhZCA9IGNzNTUyOV9haV9pbnNuX3JlYWQ7CisJCXMtPmluc25fY29uZmlnID0gTlVMTDsKKwkJaW5pdF9jczU1MjkoZGV2KTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIFNlcmlhbCAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9TRVJJQUxfU1VCREVWOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9TRVJJQUw7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCXMtPm5fY2hhbiA9IDE7CisJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJcy0+aW5zbl9jb25maWcgPSBuaV9zZXJpYWxfaW5zbl9jb25maWc7CisJZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID0gMDsKKwlkZXZwcml2LT5zZXJpYWxfaHdfbW9kZSA9IDA7CisKKwkvKiBSVFNJICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX1JUU0lfU1VCREVWOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+aW5zbl9iaXRzID0gbmlfcnRzaV9pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBuaV9ydHNpX2luc25fY29uZmlnOworCW5pX3J0c2lfaW5pdChkZXYpOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCWNvdW50ZXJfdmFyaWFudCA9IG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczsKKwl9IGVsc2UgeworCQljb3VudGVyX3ZhcmlhbnQgPSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM7CisJfQorCWRldnByaXYtPmNvdW50ZXJfZGV2ID0gbmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KGRldiwKKwkJJm5pX2dwY3Rfd3JpdGVfcmVnaXN0ZXIsICZuaV9ncGN0X3JlYWRfcmVnaXN0ZXIsCisJCWNvdW50ZXJfdmFyaWFudCwgTlVNX0dQQ1QpOworCS8qIEdlbmVyYWwgcHVycG9zZSBjb3VudGVycyAqLworCWZvciAoaiA9IDA7IGogPCBOVU1fR1BDVDsgKytqKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9HUENUX1NVQkRFVihqKTsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJCXMtPnN1YmRldl9mbGFncyA9CisJCQlTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfTFNBTVBMIHwgU0RGX0NNRF9SRUFECisJCQkvKiB8IFNERl9DTURfV1JJVEUgKi8gOworCQlzLT5uX2NoYW4gPSAzOworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCQlzLT5tYXhkYXRhID0gMHhmZmZmZmZmZjsKKwkJZWxzZQorCQkJcy0+bWF4ZGF0YSA9IDB4ZmZmZmZmOworCQlzLT5pbnNuX3JlYWQgPSAmbmlfZ3BjdF9pbnNuX3JlYWQ7CisJCXMtPmluc25fd3JpdGUgPSAmbmlfZ3BjdF9pbnNuX3dyaXRlOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9ncGN0X2luc25fY29uZmlnOworCQlzLT5kb19jbWQgPSAmbmlfZ3BjdF9jbWQ7CisJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJCXMtPmRvX2NtZHRlc3QgPSAmbmlfZ3BjdF9jbWR0ZXN0OworCQlzLT5jYW5jZWwgPSAmbmlfZ3BjdF9jYW5jZWw7CisJCXMtPmFzeW5jX2RtYV9kaXIgPSBETUFfQklESVJFQ1RJT05BTDsKKwkJcy0+cHJpdmF0ZSA9ICZkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbal07CisKKwkJZGV2cHJpdi0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2pdLmNoaXBfaW5kZXggPSAwOworCQlkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbal0uY291bnRlcl9pbmRleCA9IGo7CisJCW5pX3Rpb19pbml0X2NvdW50ZXIoJmRldnByaXYtPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tqXSk7CisJfQorCisJLyogRnJlcXVlbmN5IG91dHB1dCAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9GUkVRX09VVF9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDE7CisJcy0+bWF4ZGF0YSA9IDB4ZjsKKwlzLT5pbnNuX3JlYWQgPSAmbmlfZnJlcV9vdXRfaW5zbl9yZWFkOworCXMtPmluc25fd3JpdGUgPSAmbmlfZnJlcV9vdXRfaW5zbl93cml0ZTsKKwlzLT5pbnNuX2NvbmZpZyA9ICZuaV9mcmVxX291dF9pbnNuX2NvbmZpZzsKKworCS8qIGFpIGNvbmZpZ3VyYXRpb24gKi8KKwluaV9haV9yZXNldChkZXYsIGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVik7CisJaWYgKChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKSA9PSAwKSB7CisJCS8vIEJFQU0gaXMgdGhpcyBuZWVkZWQgZm9yIFBDSS02MTQzID8/CisJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0ID0KKwkJCVNsb3dfSW50ZXJuYWxfVGltZV9EaXZpZGVfQnlfMiB8CisJCQlTbG93X0ludGVybmFsX1RpbWViYXNlIHwKKwkJCUNsb2NrX1RvX0JvYXJkX0RpdmlkZV9CeV8yIHwKKwkJCUNsb2NrX1RvX0JvYXJkIHwKKwkJCUFJX091dHB1dF9EaXZpZGVfQnlfMiB8IEFPX091dHB1dF9EaXZpZGVfQnlfMjsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dCA9CisJCQlTbG93X0ludGVybmFsX1RpbWVfRGl2aWRlX0J5XzIgfAorCQkJU2xvd19JbnRlcm5hbF9UaW1lYmFzZSB8CisJCQlDbG9ja19Ub19Cb2FyZF9EaXZpZGVfQnlfMiB8IENsb2NrX1RvX0JvYXJkOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQsCisJCUNsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyKTsKKworCS8qIGFuYWxvZyBvdXRwdXQgY29uZmlndXJhdGlvbiAqLworCW5pX2FvX3Jlc2V0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWKTsKKworCWlmIChkZXYtPmlycSkgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwKKwkJCShJUlFfUE9MQVJJVFkgPyBJbnRlcnJ1cHRfT3V0cHV0X1BvbGFyaXR5IDogMCkgfAorCQkJKEludGVycnVwdF9PdXRwdXRfT25fM19QaW5zICYgMCkgfCBJbnRlcnJ1cHRfQV9FbmFibGUgfAorCQkJSW50ZXJydXB0X0JfRW5hYmxlIHwKKwkJCUludGVycnVwdF9BX091dHB1dF9TZWxlY3QoaW50ZXJydXB0X3BpbihkZXYtPgorCQkJCQlpcnEpKSB8CisJCQlJbnRlcnJ1cHRfQl9PdXRwdXRfU2VsZWN0KGludGVycnVwdF9waW4oZGV2LT5pcnEpKSwKKwkJCUludGVycnVwdF9Db250cm9sX1JlZ2lzdGVyKTsKKwl9CisKKwkvKiBETUEgc2V0dXAgKi8KKwluaV93cml0ZWIoZGV2cHJpdi0+YWlfYW9fc2VsZWN0X3JlZywgQUlfQU9fU2VsZWN0KTsKKwluaV93cml0ZWIoZGV2cHJpdi0+ZzBfZzFfc2VsZWN0X3JlZywgRzBfRzFfU2VsZWN0KTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKSB7CisJCW5pX3dyaXRlYigwLCBNYWdpY182MTF4KTsKKwl9IGVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCWludCBjaGFubmVsOworCQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgYm9hcmR0eXBlLm5fYW9jaGFuOyArK2NoYW5uZWwpIHsKKwkJCW5pX3dyaXRlYigweGYsIE1fT2Zmc2V0X0FPX1dhdmVmb3JtX09yZGVyKGNoYW5uZWwpKTsKKwkJCW5pX3dyaXRlYigweDAsCisJCQkJTV9PZmZzZXRfQU9fUmVmZXJlbmNlX0F0dGVudWF0aW9uKGNoYW5uZWwpKTsKKwkJfQorCQluaV93cml0ZWIoMHgwLCBNX09mZnNldF9BT19DYWxpYnJhdGlvbik7CisJfQorCisJcHJpbnRrKCJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzgyNTVfY2FsbGJhY2soaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGFyZzsKKworCWlmIChkaXIpIHsKKwkJbmlfd3JpdGViKGRhdGEsIFBvcnRfQSArIDIgKiBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIG5pX3JlYWRiKFBvcnRfQSArIDIgKiBwb3J0KTsKKwl9Cit9CisKKy8qCisJcHJlc2VudHMgdGhlIEVFUFJPTSBhcyBhIHN1YmRldmljZQorKi8KKworc3RhdGljIGludCBuaV9lZXByb21faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gbmlfcmVhZF9lZXByb20oZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKwlyZWFkcyBieXRlcyBvdXQgb2YgZWVwcm9tCisqLworCitzdGF0aWMgaW50IG5pX3JlYWRfZWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYWRkcikKK3sKKwlpbnQgYml0OworCWludCBiaXRzdHJpbmc7CisKKwliaXRzdHJpbmcgPSAweDAzMDAgfCAoKGFkZHIgJiAweDEwMCkgPDwgMykgfCAoYWRkciAmIDB4ZmYpOworCW5pX3dyaXRlYigweDA0LCBTZXJpYWxfQ29tbWFuZCk7CisJZm9yIChiaXQgPSAweDgwMDA7IGJpdDsgYml0ID4+PSAxKSB7CisJCW5pX3dyaXRlYigweDA0IHwgKChiaXQgJiBiaXRzdHJpbmcpID8gMHgwMiA6IDApLAorCQkJU2VyaWFsX0NvbW1hbmQpOworCQluaV93cml0ZWIoMHgwNSB8ICgoYml0ICYgYml0c3RyaW5nKSA/IDB4MDIgOiAwKSwKKwkJCVNlcmlhbF9Db21tYW5kKTsKKwl9CisJYml0c3RyaW5nID0gMDsKKwlmb3IgKGJpdCA9IDB4ODA7IGJpdDsgYml0ID4+PSAxKSB7CisJCW5pX3dyaXRlYigweDA0LCBTZXJpYWxfQ29tbWFuZCk7CisJCW5pX3dyaXRlYigweDA1LCBTZXJpYWxfQ29tbWFuZCk7CisJCWJpdHN0cmluZyB8PSAoKG5pX3JlYWRiKFhYWF9TdGF0dXMpICYgUFJPTU9VVCkgPyBiaXQgOiAwKTsKKwl9CisJbmlfd3JpdGViKDB4MDAsIFNlcmlhbF9Db21tYW5kKTsKKworCXJldHVybiBiaXRzdHJpbmc7Cit9CisKK3N0YXRpYyBpbnQgbmlfbV9zZXJpZXNfZWVwcm9tX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmVlcHJvbV9idWZmZXJbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfZ2V0X3B3bV9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVsxXSA9IGRldnByaXYtPnB3bV91cF9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zOworCWRhdGFbMl0gPSBkZXZwcml2LT5wd21fZG93bl9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zOworCXJldHVybiAzOworfQorCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX3B3bV9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIHVwX2NvdW50LCBkb3duX2NvdW50OworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfUFdNX09VVFBVVDoKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQkJdXBfY291bnQgPQorCQkJCShkYXRhWzJdICsKKwkJCQlkZXZwcml2LT5jbG9ja19ucyAvIDIpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQl1cF9jb3VudCA9IGRhdGFbMl0gLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQl1cF9jb3VudCA9CisJCQkJKGRhdGFbMl0gKyBkZXZwcml2LT5jbG9ja19ucyAtCisJCQkJMSkgLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzd2l0Y2ggKGRhdGFbM10pIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCQlkb3duX2NvdW50ID0KKwkJCQkoZGF0YVs0XSArCisJCQkJZGV2cHJpdi0+Y2xvY2tfbnMgLyAyKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJZG93bl9jb3VudCA9IGRhdGFbNF0gLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQlkb3duX2NvdW50ID0KKwkJCQkoZGF0YVs0XSArIGRldnByaXYtPmNsb2NrX25zIC0KKwkJCQkxKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmICh1cF9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zICE9IGRhdGFbMl0gfHwKKwkJCWRvd25fY291bnQgKiBkZXZwcml2LT5jbG9ja19ucyAhPSBkYXRhWzRdKSB7CisJCQlkYXRhWzJdID0gdXBfY291bnQgKiBkZXZwcml2LT5jbG9ja19uczsKKwkJCWRhdGFbNF0gPSBkb3duX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQluaV93cml0ZWwoTVNlcmllc19DYWxfUFdNX0hpZ2hfVGltZV9CaXRzKHVwX2NvdW50KSB8CisJCQlNU2VyaWVzX0NhbF9QV01fTG93X1RpbWVfQml0cyhkb3duX2NvdW50KSwKKwkJCU1fT2Zmc2V0X0NhbF9QV00pOworCQlkZXZwcml2LT5wd21fdXBfY291bnQgPSB1cF9jb3VudDsKKwkJZGV2cHJpdi0+cHdtX2Rvd25fY291bnQgPSBkb3duX2NvdW50OworCQlyZXR1cm4gNTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfUFdNX09VVFBVVDoKKwkJcmV0dXJuIG5pX2dldF9wd21fY29uZmlnKGRldiwgZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjE0M19wd21fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCB1cF9jb3VudCwgZG93bl9jb3VudDsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX1BXTV9PVVRQVVQ6CisJCXN3aXRjaCAoZGF0YVsxXSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJCXVwX2NvdW50ID0KKwkJCQkoZGF0YVsyXSArCisJCQkJZGV2cHJpdi0+Y2xvY2tfbnMgLyAyKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJdXBfY291bnQgPSBkYXRhWzJdIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX1VQOgorCQkJdXBfY291bnQgPQorCQkJCShkYXRhWzJdICsgZGV2cHJpdi0+Y2xvY2tfbnMgLQorCQkJCTEpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChkYXRhWzNdKSB7CisJCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQkJZG93bl9jb3VudCA9CisJCQkJKGRhdGFbNF0gKworCQkJCWRldnByaXYtPmNsb2NrX25zIC8gMikgLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJCWRvd25fY291bnQgPSBkYXRhWzRdIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX1VQOgorCQkJZG93bl9jb3VudCA9CisJCQkJKGRhdGFbNF0gKyBkZXZwcml2LT5jbG9ja19ucyAtCisJCQkJMSkgLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAodXBfY291bnQgKiBkZXZwcml2LT5jbG9ja19ucyAhPSBkYXRhWzJdIHx8CisJCQlkb3duX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnMgIT0gZGF0YVs0XSkgeworCQkJZGF0YVsyXSA9IHVwX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlkYXRhWzRdID0gZG93bl9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJbmlfd3JpdGVsKHVwX2NvdW50LCBDYWxpYnJhdGlvbl9IaWdoVGltZV82MTQzKTsKKwkJZGV2cHJpdi0+cHdtX3VwX2NvdW50ID0gdXBfY291bnQ7CisJCW5pX3dyaXRlbChkb3duX2NvdW50LCBDYWxpYnJhdGlvbl9Mb3dUaW1lXzYxNDMpOworCQlkZXZwcml2LT5wd21fZG93bl9jb3VudCA9IGRvd25fY291bnQ7CisJCXJldHVybiA1OworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9QV01fT1VUUFVUOgorCQlyZXR1cm4gbmlfZ2V0X3B3bV9jb25maWcoZGV2LCBkYXRhKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV93cml0ZV9jYWxkYWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyLCBpbnQgdmFsKTsKKy8qCisJY2FsaWJyYXRpb24gc3ViZGV2aWNlCisqLworc3RhdGljIGludCBuaV9jYWxpYl9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwluaV93cml0ZV9jYWxkYWMoZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgZGF0YVswXSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9jYWxpYl9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5jYWxkYWNzW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBhY2tfbWI4ODM0MShpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpOworc3RhdGljIGludCBwYWNrX2RhYzg4MDAoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKK3N0YXRpYyBpbnQgcGFja19kYWM4MDQzKGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZyk7CitzdGF0aWMgaW50IHBhY2tfYWQ4NTIyKGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZyk7CitzdGF0aWMgaW50IHBhY2tfYWQ4ODA0KGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZyk7CitzdGF0aWMgaW50IHBhY2tfYWQ4ODQyKGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZyk7CisKK3N0cnVjdCBjYWxkYWNfc3RydWN0IHsKKwlpbnQgbl9jaGFuczsKKwlpbnQgbl9iaXRzOworCWludCAoKnBhY2tiaXRzKSAoaW50LCBpbnQsIGludCAqKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2FsZGFjX3N0cnVjdCBjYWxkYWNzW10gPSB7CisJW21iODgzNDFdID0gezEyLCA4LCBwYWNrX21iODgzNDF9LAorCVtkYWM4ODAwXSA9IHs4LCA4LCBwYWNrX2RhYzg4MDB9LAorCVtkYWM4MDQzXSA9IHsxLCAxMiwgcGFja19kYWM4MDQzfSwKKwlbYWQ4NTIyXSA9IHsyLCAxMiwgcGFja19hZDg1MjJ9LAorCVthZDg4MDRdID0gezEyLCA4LCBwYWNrX2FkODgwNH0sCisJW2FkODg0Ml0gPSB7OCwgOCwgcGFja19hZDg4NDJ9LAorCVthZDg4MDRfZGVidWddID0gezE2LCA4LCBwYWNrX2FkODgwNH0sCit9OworCitzdGF0aWMgdm9pZCBjYWxkYWNfc2V0dXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgaSwgajsKKwlpbnQgbl9kYWNzOworCWludCBuX2NoYW5zID0gMDsKKwlpbnQgbl9iaXRzOworCWludCBkaWZmYml0cyA9IDA7CisJaW50IHR5cGU7CisJaW50IGNoYW47CisKKwl0eXBlID0gYm9hcmR0eXBlLmNhbGRhY1swXTsKKwlpZiAodHlwZSA9PSBjYWxkYWNfbm9uZSkKKwkJcmV0dXJuOworCW5fYml0cyA9IGNhbGRhY3NbdHlwZV0ubl9iaXRzOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJdHlwZSA9IGJvYXJkdHlwZS5jYWxkYWNbaV07CisJCWlmICh0eXBlID09IGNhbGRhY19ub25lKQorCQkJYnJlYWs7CisJCWlmIChjYWxkYWNzW3R5cGVdLm5fYml0cyAhPSBuX2JpdHMpCisJCQlkaWZmYml0cyA9IDE7CisJCW5fY2hhbnMgKz0gY2FsZGFjc1t0eXBlXS5uX2NoYW5zOworCX0KKwluX2RhY3MgPSBpOworCXMtPm5fY2hhbiA9IG5fY2hhbnM7CisKKwlpZiAoZGlmZmJpdHMpIHsKKwkJdW5zaWduZWQgaW50ICptYXhkYXRhX2xpc3Q7CisKKwkJaWYgKG5fY2hhbnMgPiBNQVhfTl9DQUxEQUNTKSB7CisJCQlwcmludGsoIkJVRyEgTUFYX05fQ0FMREFDUyB0b28gc21hbGxcbiIpOworCQl9CisJCXMtPm1heGRhdGFfbGlzdCA9IG1heGRhdGFfbGlzdCA9IGRldnByaXYtPmNhbGRhY19tYXhkYXRhX2xpc3Q7CisJCWNoYW4gPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbl9kYWNzOyBpKyspIHsKKwkJCXR5cGUgPSBib2FyZHR5cGUuY2FsZGFjW2ldOworCQkJZm9yIChqID0gMDsgaiA8IGNhbGRhY3NbdHlwZV0ubl9jaGFuczsgaisrKSB7CisJCQkJbWF4ZGF0YV9saXN0W2NoYW5dID0KKwkJCQkJKDEgPDwgY2FsZGFjc1t0eXBlXS5uX2JpdHMpIC0gMTsKKwkJCQljaGFuKys7CisJCQl9CisJCX0KKworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgcy0+bl9jaGFuOyBjaGFuKyspCisJCQluaV93cml0ZV9jYWxkYWMoZGV2LCBpLCBzLT5tYXhkYXRhX2xpc3RbaV0gLyAyKTsKKwl9IGVsc2UgeworCQl0eXBlID0gYm9hcmR0eXBlLmNhbGRhY1swXTsKKwkJcy0+bWF4ZGF0YSA9ICgxIDw8IGNhbGRhY3NbdHlwZV0ubl9iaXRzKSAtIDE7CisKKwkJZm9yIChjaGFuID0gMDsgY2hhbiA8IHMtPm5fY2hhbjsgY2hhbisrKQorCQkJbmlfd3JpdGVfY2FsZGFjKGRldiwgaSwgcy0+bWF4ZGF0YSAvIDIpOworCX0KK30KKworc3RhdGljIHZvaWQgbmlfd3JpdGVfY2FsZGFjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYWRkciwgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgbG9hZGJpdCA9IDAsIGJpdHMgPSAwLCBiaXQsIGJpdHN0cmluZyA9IDA7CisJaW50IGk7CisJaW50IHR5cGU7CisKKwkvL3ByaW50aygibmlfd3JpdGVfY2FsZGFjOiBjaGFuPSVkIHZhbD0lZFxuIixhZGRyLHZhbCk7CisJaWYgKGRldnByaXYtPmNhbGRhY3NbYWRkcl0gPT0gdmFsKQorCQlyZXR1cm47CisJZGV2cHJpdi0+Y2FsZGFjc1thZGRyXSA9IHZhbDsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJdHlwZSA9IGJvYXJkdHlwZS5jYWxkYWNbaV07CisJCWlmICh0eXBlID09IGNhbGRhY19ub25lKQorCQkJYnJlYWs7CisJCWlmIChhZGRyIDwgY2FsZGFjc1t0eXBlXS5uX2NoYW5zKSB7CisJCQliaXRzID0gY2FsZGFjc1t0eXBlXS5wYWNrYml0cyhhZGRyLCB2YWwsICZiaXRzdHJpbmcpOworCQkJbG9hZGJpdCA9IFNlckRhY0xkKGkpOworCQkJLy9wcmludGsoImNhbGRhYzogdXNpbmcgaT0lZCBhZGRyPSVkICV4XG4iLGksYWRkcixiaXRzdHJpbmcpOworCQkJYnJlYWs7CisJCX0KKwkJYWRkciAtPSBjYWxkYWNzW3R5cGVdLm5fY2hhbnM7CisJfQorCisJZm9yIChiaXQgPSAxIDw8IChiaXRzIC0gMSk7IGJpdDsgYml0ID4+PSAxKSB7CisJCW5pX3dyaXRlYigoKGJpdCAmIGJpdHN0cmluZykgPyAweDAyIDogMCksIFNlcmlhbF9Db21tYW5kKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJbmlfd3JpdGViKDEgfCAoKGJpdCAmIGJpdHN0cmluZykgPyAweDAyIDogMCksIFNlcmlhbF9Db21tYW5kKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwl9CisJbmlfd3JpdGViKGxvYWRiaXQsIFNlcmlhbF9Db21tYW5kKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW5pX3dyaXRlYigwLCBTZXJpYWxfQ29tbWFuZCk7Cit9CisKK3N0YXRpYyBpbnQgcGFja19tYjg4MzQxKGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZykKK3sKKwkvKgorCSAgIEZ1aml0c3UgTUIgODgzNDEKKwkgICBOb3RlIHRoYXQgYWRkcmVzcyBiaXRzIGFyZSByZXZlcnNlZC4gIFRoYW5rcyB0bworCSAgIEluZ28gS2VlbiBmb3Igbm90aWNpbmcgdGhpcy4KKworCSAgIE5vdGUgYWxzbyB0aGF0IHRoZSA4ODM0MSBleHBlY3RzIGFkZHJlc3MgdmFsdWVzIGZyb20KKwkgICAxLTEyLCB3aGVyZWFzIHdlIHVzZSBjaGFubmVsIG51bWJlcnMgMC0xMS4gIFRoZSBOSQorCSAgIGRvY3MgdXNlIDEtMTIsIGFsc28sIHNvIGJlIGNhcmVmdWwgaGVyZS4KKwkgKi8KKwlhZGRyKys7CisJKmJpdHN0cmluZyA9ICgoYWRkciAmIDB4MSkgPDwgMTEpIHwKKwkJKChhZGRyICYgMHgyKSA8PCA5KSB8CisJCSgoYWRkciAmIDB4NCkgPDwgNykgfCAoKGFkZHIgJiAweDgpIDw8IDUpIHwgKHZhbCAmIDB4ZmYpOworCXJldHVybiAxMjsKK30KKworc3RhdGljIGludCBwYWNrX2RhYzg4MDAoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKQoreworCSpiaXRzdHJpbmcgPSAoKGFkZHIgJiAweDcpIDw8IDgpIHwgKHZhbCAmIDB4ZmYpOworCXJldHVybiAxMTsKK30KKworc3RhdGljIGludCBwYWNrX2RhYzgwNDMoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKQoreworCSpiaXRzdHJpbmcgPSB2YWwgJiAweGZmZjsKKwlyZXR1cm4gMTI7Cit9CisKK3N0YXRpYyBpbnQgcGFja19hZDg1MjIoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKQoreworCSpiaXRzdHJpbmcgPSAodmFsICYgMHhmZmYpIHwgKGFkZHIgPyAweGMwMDAgOiAweGEwMDApOworCXJldHVybiAxNjsKK30KKworc3RhdGljIGludCBwYWNrX2FkODgwNChpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpCit7CisJKmJpdHN0cmluZyA9ICgoYWRkciAmIDB4ZikgPDwgOCkgfCAodmFsICYgMHhmZik7CisJcmV0dXJuIDEyOworfQorCitzdGF0aWMgaW50IHBhY2tfYWQ4ODQyKGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZykKK3sKKwkqYml0c3RyaW5nID0gKChhZGRyICsgMSkgPDwgOCkgfCAodmFsICYgMHhmZik7CisJcmV0dXJuIDEyOworfQorCisjaWYgMAorLyoKKyAqCVJlYWQgdGhlIEdQQ1RzIGN1cnJlbnQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgR1BDVF9HX1dhdGNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbikKK3sKKwl1bnNpZ25lZCBpbnQgaGkxLCBoaTIsIGxvOworCisJZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dICY9IH5HX1NhdmVfVHJhY2U7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmdwY3RfY29tbWFuZFtjaGFuXSwKKwkJR19Db21tYW5kX1JlZ2lzdGVyKGNoYW4pKTsKKworCWRldnByaXYtPmdwY3RfY29tbWFuZFtjaGFuXSB8PSBHX1NhdmVfVHJhY2U7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmdwY3RfY29tbWFuZFtjaGFuXSwKKwkJR19Db21tYW5kX1JlZ2lzdGVyKGNoYW4pKTsKKworCS8qIFRoaXMgcHJvY2VkdXJlIGlzIHVzZWQgYmVjYXVzZSB0aGUgdHdvIHJlZ2lzdGVycyBjYW5ub3QKKwkgKiBiZSByZWFkIGF0b21pY2FsbHkuICovCisJZG8geworCQloaTEgPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBHX1NhdmVfUmVnaXN0ZXJfSGlnaChjaGFuKSk7CisJCWxvID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgR19TYXZlX1JlZ2lzdGVyX0xvdyhjaGFuKSk7CisJCWhpMiA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEdfU2F2ZV9SZWdpc3Rlcl9IaWdoKGNoYW4pKTsKKwl9IHdoaWxlIChoaTEgIT0gaGkyKTsKKworCXJldHVybiAoaGkxIDw8IDE2KSB8IGxvOworfQorCitzdGF0aWMgdm9pZCBHUENUX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbikKK3sKKwlpbnQgdGVtcF9hY2tfcmVnID0gMDsKKworCS8vcHJpbnRrKCJHUENUX1Jlc2V0Li4uIik7CisJZGV2cHJpdi0+Z3BjdF9jdXJfb3BlcmF0aW9uW2NoYW5dID0gR1BDVF9SRVNFVDsKKworCXN3aXRjaCAoY2hhbikgeworCWNhc2UgMDoKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEcwX1Jlc2V0LCBKb2ludF9SZXNldF9SZWdpc3Rlcik7CisJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyLAorCQkJRzBfVENfSW50ZXJydXB0X0VuYWJsZSwgMCk7CisJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyLAorCQkJRzBfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKwkJdGVtcF9hY2tfcmVnIHw9IEcwX0dhdGVfRXJyb3JfQ29uZmlybTsKKwkJdGVtcF9hY2tfcmVnIHw9IEcwX1RDX0Vycm9yX0NvbmZpcm07CisJCXRlbXBfYWNrX3JlZyB8PSBHMF9UQ19JbnRlcnJ1cHRfQWNrOworCQl0ZW1wX2Fja19yZWcgfD0gRzBfR2F0ZV9JbnRlcnJ1cHRfQWNrOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgdGVtcF9hY2tfcmVnLAorCQkJSW50ZXJydXB0X0FfQWNrX1JlZ2lzdGVyKTsKKworCQkvL3Byb2JsZW0uLi50aGlzIGludGVyZmVyZXMgd2l0aCB0aGUgb3RoZXIgY3RyLi4uCisJCWRldnByaXYtPmFuX3RyaWdfZXRjX3JlZyB8PSBHUEZPXzBfT3V0cHV0X0VuYWJsZTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFuX3RyaWdfZXRjX3JlZywKKwkJCUFuYWxvZ19UcmlnZ2VyX0V0Y19SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEcxX1Jlc2V0LCBKb2ludF9SZXNldF9SZWdpc3Rlcik7CisJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQkJRzFfVENfSW50ZXJydXB0X0VuYWJsZSwgMCk7CisJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQkJRzBfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKwkJdGVtcF9hY2tfcmVnIHw9IEcxX0dhdGVfRXJyb3JfQ29uZmlybTsKKwkJdGVtcF9hY2tfcmVnIHw9IEcxX1RDX0Vycm9yX0NvbmZpcm07CisJCXRlbXBfYWNrX3JlZyB8PSBHMV9UQ19JbnRlcnJ1cHRfQWNrOworCQl0ZW1wX2Fja19yZWcgfD0gRzFfR2F0ZV9JbnRlcnJ1cHRfQWNrOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgdGVtcF9hY2tfcmVnLAorCQkJSW50ZXJydXB0X0JfQWNrX1JlZ2lzdGVyKTsKKworCQlkZXZwcml2LT5hbl90cmlnX2V0Y19yZWcgfD0gR1BGT18xX091dHB1dF9FbmFibGU7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hbl90cmlnX2V0Y19yZWcsCisJCQlBbmFsb2dfVHJpZ2dlcl9FdGNfUmVnaXN0ZXIpOworCQlicmVhazsKKwl9OworCisJZGV2cHJpdi0+Z3BjdF9tb2RlW2NoYW5dID0gMDsKKwlkZXZwcml2LT5ncGN0X2lucHV0X3NlbGVjdFtjaGFuXSA9IDA7CisJZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dID0gMDsKKworCWRldnByaXYtPmdwY3RfY29tbWFuZFtjaGFuXSB8PSBHX1N5bmNocm9uaXplZF9HYXRlOworCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmdwY3RfbW9kZVtjaGFuXSwKKwkJR19Nb2RlX1JlZ2lzdGVyKGNoYW4pKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Z3BjdF9pbnB1dF9zZWxlY3RbY2hhbl0sCisJCUdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKGNoYW4pKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMCwgR19BdXRvaW5jcmVtZW50X1JlZ2lzdGVyKGNoYW4pKTsKKworCS8vcHJpbnRrKCJleGl0IEdQQ1RfUmVzZXRcbiIpOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBuaV9ncGN0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisJcmV0dXJuIG5pX3Rpb19pbnNuX2NvbmZpZyhjb3VudGVyLCBpbnNuLCBkYXRhKTsKK30KKworc3RhdGljIGludCBuaV9ncGN0X2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIgPSBzLT5wcml2YXRlOworCXJldHVybiBuaV90aW9fcmluc24oY291bnRlciwgaW5zbiwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbmlfZ3BjdF9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisJcmV0dXJuIG5pX3Rpb193aW5zbihjb3VudGVyLCBpbnNuLCBkYXRhKTsKK30KKworc3RhdGljIGludCBuaV9ncGN0X2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXR2YWw7CisjaWZkZWYgUENJRE1BCisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIgPSBzLT5wcml2YXRlOworLy8gICAgICBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlyZXR2YWwgPSBuaV9yZXF1ZXN0X2dwY3RfbWl0ZV9jaGFubmVsKGRldiwgY291bnRlci0+Y291bnRlcl9pbmRleCwKKwkJQ09NRURJX0lOUFVUKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkibm8gZG1hIGNoYW5uZWwgYXZhaWxhYmxlIGZvciB1c2UgYnkgY291bnRlciIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwluaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0oY291bnRlciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJbmlfZV9zZXJpZXNfZW5hYmxlX3NlY29uZF9pcnEoZGV2LCBjb3VudGVyLT5jb3VudGVyX2luZGV4LCAxKTsKKwlyZXR2YWwgPSBuaV90aW9fY21kKGNvdW50ZXIsIHMtPmFzeW5jKTsKKyNlbHNlCisJcmV0dmFsID0gLUVOT1RTVVBQOworI2VuZGlmCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBuaV9ncGN0X2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKyNpZmRlZiBQQ0lETUEKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisKKwlyZXR1cm4gbmlfdGlvX2NtZHRlc3QoY291bnRlciwgY21kKTsKKyNlbHNlCisJcmV0dXJuIC1FTk9UU1VQUDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IG5pX2dwY3RfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisjaWZkZWYgUENJRE1BCisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIgPSBzLT5wcml2YXRlOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBuaV90aW9fY2FuY2VsKGNvdW50ZXIpOworCW5pX2Vfc2VyaWVzX2VuYWJsZV9zZWNvbmRfaXJxKGRldiwgY291bnRlci0+Y291bnRlcl9pbmRleCwgMCk7CisJbmlfcmVsZWFzZV9ncGN0X21pdGVfY2hhbm5lbChkZXYsIGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCXJldHVybiByZXR2YWw7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qCisgKgorICogIFByb2dyYW1tYWJsZSBGdW5jdGlvbiBJbnB1dHMKKyAqCisgKi8KKworc3RhdGljIGludCBuaV9tX3Nlcmllc19zZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4sCisJdW5zaWduZWQgc291cmNlKQoreworCXVuc2lnbmVkIHBmaV9yZWdfaW5kZXg7CisJdW5zaWduZWQgYXJyYXlfb2Zmc2V0OworCWlmICgoc291cmNlICYgMHgxZikgIT0gc291cmNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwZmlfcmVnX2luZGV4ID0gMSArIGNoYW4gLyAzOworCWFycmF5X29mZnNldCA9IHBmaV9yZWdfaW5kZXggLSAxOworCWRldnByaXYtPnBmaV9vdXRwdXRfc2VsZWN0X3JlZ1thcnJheV9vZmZzZXRdICY9CisJCX5NU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X01hc2soY2hhbik7CisJZGV2cHJpdi0+cGZpX291dHB1dF9zZWxlY3RfcmVnW2FycmF5X29mZnNldF0gfD0KKwkJTVNlcmllc19QRklfT3V0cHV0X1NlbGVjdF9CaXRzKGNoYW4sIHNvdXJjZSk7CisJbmlfd3JpdGV3KGRldnByaXYtPnBmaV9vdXRwdXRfc2VsZWN0X3JlZ1thcnJheV9vZmZzZXRdLAorCQlNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdChwZmlfcmVnX2luZGV4KSk7CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfb2xkX3NldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpCit7CisJLy8gcHJlLW0tc2VyaWVzIGJvYXJkcyBoYXZlIGZpeGVkIHNpZ25hbHMgb24gcGZpIHBpbnMKKwlpZiAoc291cmNlICE9IG5pX29sZF9nZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfc2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuLAorCXVuc2lnbmVkIHNvdXJjZSkKK3sKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCXJldHVybiBuaV9tX3Nlcmllc19zZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuLCBzb3VyY2UpOworCWVsc2UKKwkJcmV0dXJuIG5pX29sZF9zZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuLCBzb3VyY2UpOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfbV9zZXJpZXNfZ2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuKQoreworCWNvbnN0IHVuc2lnbmVkIGFycmF5X29mZnNldCA9IGNoYW4gLyAzOworCXJldHVybiBNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X1NvdXJjZShjaGFuLAorCQlkZXZwcml2LT5wZmlfb3V0cHV0X3NlbGVjdF9yZWdbYXJyYXlfb2Zmc2V0XSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9vbGRfZ2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuKQoreworCS8vIHByZS1tLXNlcmllcyBib2FyZHMgaGF2ZSBmaXhlZCBzaWduYWxzIG9uIHBmaSBwaW5zCisJc3dpdGNoIChjaGFuKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9BSV9TVEFSVDE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfQUlfU1RBUlQyOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSV9QRklfT1VUUFVUX0FJX0NPTlZFUlQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfR19TUkMxOworCQlicmVhazsKKwljYXNlIDQ6CisJCXJldHVybiBOSV9QRklfT1VUUFVUX0dfR0FURTE7CisJCWJyZWFrOworCWNhc2UgNToKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfQU9fVVBEQVRFX047CisJCWJyZWFrOworCWNhc2UgNjoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfQU9fU1RBUlQxOworCQlicmVhazsKKwljYXNlIDc6CisJCXJldHVybiBOSV9QRklfT1VUUFVUX0FJX1NUQVJUX1BVTFNFOworCQlicmVhazsKKwljYXNlIDg6CisJCXJldHVybiBOSV9QRklfT1VUUFVUX0dfU1JDMDsKKwkJYnJlYWs7CisJY2FzZSA5OgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9HX0dBVEUwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIiVzOiBidWcsIHVuaGFuZGxlZCBjYXNlIGluIHN3aXRjaC5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX2dldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbikKK3sKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCXJldHVybiBuaV9tX3Nlcmllc19nZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuKTsKKwllbHNlCisJCXJldHVybiBuaV9vbGRfZ2V0X3BmaV9yb3V0aW5nKGRldiwgY2hhbik7Cit9CisKK3N0YXRpYyBpbnQgbmlfY29uZmlnX2ZpbHRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgcGZpX2NoYW5uZWwsCisJZW51bSBuaV9wZmlfZmlsdGVyX3NlbGVjdCBmaWx0ZXIpCit7CisJdW5zaWduZWQgYml0czsKKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSA9PSAwKSB7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCWJpdHMgPSBuaV9yZWFkbChNX09mZnNldF9QRklfRmlsdGVyKTsKKwliaXRzICY9IH5NU2VyaWVzX1BGSV9GaWx0ZXJfU2VsZWN0X01hc2socGZpX2NoYW5uZWwpOworCWJpdHMgfD0gTVNlcmllc19QRklfRmlsdGVyX1NlbGVjdF9CaXRzKHBmaV9jaGFubmVsLCBmaWx0ZXIpOworCW5pX3dyaXRlbChiaXRzLCBNX09mZnNldF9QRklfRmlsdGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9wZmlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSA9PSAwKSB7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQluaV93cml0ZXcocy0+c3RhdGUsIE1fT2Zmc2V0X1BGSV9ETyk7CisJfQorCWRhdGFbMV0gPSBuaV9yZWFkdyhNX09mZnNldF9QRklfREkpOworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pX3BmaV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW47CisKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBDT01FRElfT1VUUFVUOgorCQluaV9zZXRfYml0cyhkZXYsIElPX0JpZGlyZWN0aW9uX1Bpbl9SZWdpc3RlciwgMSA8PCBjaGFuLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDT01FRElfSU5QVVQ6CisJCW5pX3NldF9iaXRzKGRldiwgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyLCAxIDw8IGNoYW4sIDApOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkoZGV2cHJpdi0+CisJCQlpb19iaWRpcmVjdGlvbl9waW5fcmVnICYgKDEgPDwgY2hhbikpID8gQ09NRURJX09VVFBVVCA6CisJCQlDT01FRElfSU5QVVQ7CisJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1NFVF9ST1VUSU5HOgorCQlyZXR1cm4gbmlfc2V0X3BmaV9yb3V0aW5nKGRldiwgY2hhbiwgZGF0YVsxXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX1JPVVRJTkc6CisJCWRhdGFbMV0gPSBuaV9nZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19GSUxURVI6CisJCXJldHVybiBuaV9jb25maWdfZmlsdGVyKGRldiwgY2hhbiwgZGF0YVsxXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCisgKiAgTkkgUlRTSSBCdXMgRnVuY3Rpb25zCisgKgorICovCitzdGF0aWMgdm9pZCBuaV9ydHNpX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLy8gSW5pdGlhbGlzZXMgdGhlIFJUU0kgYnVzIHNpZ25hbCBzd2l0Y2ggdG8gYSBkZWZhdWx0IHN0YXRlCisKKwkvLyBTZXQgY2xvY2sgbW9kZSB0byBpbnRlcm5hbAorCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiA9IE1TZXJpZXNfUlRTSV8xME1Iel9CaXQ7CisJaWYgKG5pX3NldF9tYXN0ZXJfY2xvY2soZGV2LCBOSV9NSU9fSU5URVJOQUxfQ0xPQ0ssIDApIDwgMCkgeworCQlydF9wcmludGsoIm5pX3NldF9tYXN0ZXJfY2xvY2sgZmFpbGVkLCBidWc/Iik7CisJfQorCS8vIGRlZmF1bHQgaW50ZXJuYWwgbGluZXMgcm91dGluZyB0byBSVFNJIGJ1cyBsaW5lcworCWRldnByaXYtPnJ0c2lfdHJpZ19hX291dHB1dF9yZWcgPQorCQlSVFNJX1RyaWdfT3V0cHV0X0JpdHMoMCwKKwkJTklfUlRTSV9PVVRQVVRfQURSX1NUQVJUMSkgfCBSVFNJX1RyaWdfT3V0cHV0X0JpdHMoMSwKKwkJTklfUlRTSV9PVVRQVVRfQURSX1NUQVJUMikgfCBSVFNJX1RyaWdfT3V0cHV0X0JpdHMoMiwKKwkJTklfUlRTSV9PVVRQVVRfU0NMS0cpIHwgUlRTSV9UcmlnX091dHB1dF9CaXRzKDMsCisJCU5JX1JUU0lfT1VUUFVUX0RBQ1VQRE4pOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfYV9vdXRwdXRfcmVnLAorCQlSVFNJX1RyaWdfQV9PdXRwdXRfUmVnaXN0ZXIpOworCWRldnByaXYtPnJ0c2lfdHJpZ19iX291dHB1dF9yZWcgPQorCQlSVFNJX1RyaWdfT3V0cHV0X0JpdHMoNCwKKwkJTklfUlRTSV9PVVRQVVRfREFfU1RBUlQxKSB8IFJUU0lfVHJpZ19PdXRwdXRfQml0cyg1LAorCQlOSV9SVFNJX09VVFBVVF9HX1NSQzApIHwgUlRTSV9UcmlnX091dHB1dF9CaXRzKDYsCisJCU5JX1JUU0lfT1VUUFVUX0dfR0FURTApOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZyB8PQorCQkJUlRTSV9UcmlnX091dHB1dF9CaXRzKDcsIE5JX1JUU0lfT1VUUFVUX1JUU0lfT1NDKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZywKKwkJUlRTSV9UcmlnX0JfT3V0cHV0X1JlZ2lzdGVyKTsKKworCS8vIFNldHMgdGhlIHNvdXJjZSBhbmQgZGlyZWN0aW9uIG9mIHRoZSA0IG9uIGJvYXJkIGxpbmVzCisvLyAgICAgIGRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAweDAwMDAsIFJUU0lfQm9hcmRfUmVnaXN0ZXIpOworfQorCitzdGF0aWMgaW50IG5pX3J0c2lfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSAwOworCisJcmV0dXJuIDI7Cit9CisKKy8qIEZpbmQgYmVzdCBtdWx0aXBsaWVyL2RpdmlkZXIgdG8gdHJ5IGFuZCBnZXQgdGhlIFBMTCBydW5uaW5nIGF0IDgwIE1IegorICogZ2l2ZW4gYW4gYXJiaXRyYXJ5IGZyZXF1ZW5jeSBpbnB1dCBjbG9jayAqLworc3RhdGljIGludCBuaV9tc2VyaWVzX2dldF9wbGxfcGFyYW1ldGVycyh1bnNpZ25lZCByZWZlcmVuY2VfcGVyaW9kX25zLAorCXVuc2lnbmVkICpmcmVxX2RpdmlkZXIsIHVuc2lnbmVkICpmcmVxX211bHRpcGxpZXIsCisJdW5zaWduZWQgKmFjdHVhbF9wZXJpb2RfbnMpCit7CisJdW5zaWduZWQgZGl2OworCXVuc2lnbmVkIGJlc3RfZGl2ID0gMTsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X2RpdiA9IDB4MTA7CisJdW5zaWduZWQgbXVsdDsKKwl1bnNpZ25lZCBiZXN0X211bHQgPSAxOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfbXVsdCA9IDB4MTAwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBwaWNvX3Blcl9uYW5vID0gMTAwMDsKKworCWNvbnN0IHVuc2lnbmVkIHJlZmVyZW5jZV9waWNvc2VjID0gcmVmZXJlbmNlX3BlcmlvZF9ucyAqIHBpY29fcGVyX25hbm87CisJLyogbS1zZXJpZXMgd2FudHMgdGhlIHBoYXNlZC1sb2NrZWQgbG9vcCB0byBvdXRwdXQgODBNSHosIHdoaWNoIGlzIGRpdmlkZWQgYnkgNCB0bworCSAqIDIwIE1IeiBmb3IgbW9zdCB0aW1pbmcgY2xvY2tzICovCisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRhcmdldF9waWNvc2VjID0gMTI1MDA7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZ1ZGdlX2ZhY3Rvcl84MF90b18yME1oeiA9IDQ7CisJaW50IGJlc3RfcGVyaW9kX3BpY29zZWMgPSAwOworCWZvciAoZGl2ID0gMTsgZGl2IDw9IG1heF9kaXY7ICsrZGl2KSB7CisJCWZvciAobXVsdCA9IDE7IG11bHQgPD0gbWF4X211bHQ7ICsrbXVsdCkgeworCQkJdW5zaWduZWQgbmV3X3BlcmlvZF9wcyA9CisJCQkJKHJlZmVyZW5jZV9waWNvc2VjICogZGl2KSAvIG11bHQ7CisJCQlpZiAoYWJzKG5ld19wZXJpb2RfcHMgLSB0YXJnZXRfcGljb3NlYykgPAorCQkJCWFicyhiZXN0X3BlcmlvZF9waWNvc2VjIC0gdGFyZ2V0X3BpY29zZWMpKSB7CisJCQkJYmVzdF9wZXJpb2RfcGljb3NlYyA9IG5ld19wZXJpb2RfcHM7CisJCQkJYmVzdF9kaXYgPSBkaXY7CisJCQkJYmVzdF9tdWx0ID0gbXVsdDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYmVzdF9wZXJpb2RfcGljb3NlYyA9PSAwKSB7CisJCXJ0X3ByaW50aygiJXM6IGJ1ZywgZmFpbGVkIHRvIGZpbmQgcGxsIHBhcmFtZXRlcnNcbiIsCisJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJKmZyZXFfZGl2aWRlciA9IGJlc3RfZGl2OworCSpmcmVxX211bHRpcGxpZXIgPSBiZXN0X211bHQ7CisJKmFjdHVhbF9wZXJpb2RfbnMgPQorCQkoYmVzdF9wZXJpb2RfcGljb3NlYyAqIGZ1ZGdlX2ZhY3Rvcl84MF90b18yME1oeiArCisJCShwaWNvX3Blcl9uYW5vIC8gMikpIC8gcGljb19wZXJfbmFubzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBudW1fY29uZmlndXJhYmxlX3J0c2lfY2hhbm5lbHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQlyZXR1cm4gODsKKwllbHNlCisJCXJldHVybiA3OworfQorCitzdGF0aWMgaW50IG5pX21zZXJpZXNfc2V0X3BsbF9tYXN0ZXJfY2xvY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNvdXJjZSwKKwl1bnNpZ25lZCBwZXJpb2RfbnMpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbl9wZXJpb2RfbnMgPSA1MDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X3BlcmlvZF9ucyA9IDEwMDA7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRpbWVvdXQgPSAxMDAwOworCXVuc2lnbmVkIHBsbF9jb250cm9sX2JpdHM7CisJdW5zaWduZWQgZnJlcV9kaXZpZGVyOworCXVuc2lnbmVkIGZyZXFfbXVsdGlwbGllcjsKKwl1bnNpZ25lZCBpOworCWludCByZXR2YWw7CisJaWYgKHNvdXJjZSA9PSBOSV9NSU9fUExMX1BYSTEwX0NMT0NLKQorCQlwZXJpb2RfbnMgPSAxMDA7CisJLy8gdGhlc2UgbGltaXRzIGFyZSBzb21ld2hhdCBhcmJpdHJhcnksIGJ1dCBOSSBhZHZlcnRpc2VzIDEgdG8gMjBNSHogcmFuZ2Ugc28gd2UnbGwgdXNlIHRoYXQKKwlpZiAocGVyaW9kX25zIDwgbWluX3BlcmlvZF9ucyB8fCBwZXJpb2RfbnMgPiBtYXhfcGVyaW9kX25zKSB7CisJCXJ0X3ByaW50aworCQkJKCIlczogeW91IG11c3Qgc3BlY2lmeSBhbiBpbnB1dCBjbG9jayBmcmVxdWVuY3kgYmV0d2VlbiAlaSBhbmQgJWkgbmFub3NlYyAiCisJCQkiZm9yIHRoZSBwaGFzZWQtbG9jayBsb29wLlxuIiwgX19GVU5DVElPTl9fLAorCQkJbWluX3BlcmlvZF9ucywgbWF4X3BlcmlvZF9ucyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZyAmPSB+VXNlX1JUU0lfQ2xvY2tfQml0OworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZywKKwkJUlRTSV9UcmlnX0RpcmVjdGlvbl9SZWdpc3Rlcik7CisJcGxsX2NvbnRyb2xfYml0cyA9CisJCU1TZXJpZXNfUExMX0VuYWJsZV9CaXQgfCBNU2VyaWVzX1BMTF9WQ09fTW9kZV83NV8xNTBNSHpfQml0czsKKwlkZXZwcml2LT5jbG9ja19hbmRfZm91dDIgfD0KKwkJTVNlcmllc19UaW1lYmFzZTFfU2VsZWN0X0JpdCB8IE1TZXJpZXNfVGltZWJhc2UzX1NlbGVjdF9CaXQ7CisJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyICY9IH5NU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X01hc2s7CisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIE5JX01JT19QTExfUFhJX1NUQVJfVFJJR0dFUl9DTE9DSzoKKwkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyIHw9CisJCQlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1N0YXJfVHJpZ2dlcl9CaXRzOworCQlyZXR2YWwgPSBuaV9tc2VyaWVzX2dldF9wbGxfcGFyYW1ldGVycyhwZXJpb2RfbnMsICZmcmVxX2RpdmlkZXIsCisJCQkmZnJlcV9tdWx0aXBsaWVyLCAmZGV2cHJpdi0+Y2xvY2tfbnMpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWJyZWFrOworCWNhc2UgTklfTUlPX1BMTF9QWEkxMF9DTE9DSzoKKwkJLyogcHhpIGNsb2NrIGlzIDEwTUh6ICovCisJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiB8PQorCQkJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9QWElfQ2xvY2sxMDsKKwkJcmV0dmFsID0gbmlfbXNlcmllc19nZXRfcGxsX3BhcmFtZXRlcnMocGVyaW9kX25zLCAmZnJlcV9kaXZpZGVyLAorCQkJJmZyZXFfbXVsdGlwbGllciwgJmRldnByaXYtPmNsb2NrX25zKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcmV0dmFsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl7CisJCQl1bnNpZ25lZCBydHNpX2NoYW5uZWw7CisJCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X3J0c2lfY2hhbm5lbCA9IDc7CisJCQlmb3IgKHJ0c2lfY2hhbm5lbCA9IDA7IHJ0c2lfY2hhbm5lbCA8PSBtYXhfcnRzaV9jaGFubmVsOworCQkJCSsrcnRzaV9jaGFubmVsKSB7CisJCQkJaWYgKHNvdXJjZSA9PQorCQkJCQlOSV9NSU9fUExMX1JUU0lfQ0xPQ0socnRzaV9jaGFubmVsKSkgeworCQkJCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dDIgfD0KKwkJCQkJCU1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfUlRTSV9CaXRzCisJCQkJCQkocnRzaV9jaGFubmVsKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHJ0c2lfY2hhbm5lbCA+IG1heF9ydHNpX2NoYW5uZWwpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR2YWwgPSBuaV9tc2VyaWVzX2dldF9wbGxfcGFyYW1ldGVycyhwZXJpb2RfbnMsCisJCQkJJmZyZXFfZGl2aWRlciwgJmZyZXFfbXVsdGlwbGllciwKKwkJCQkmZGV2cHJpdi0+Y2xvY2tfbnMpOworCQkJaWYgKHJldHZhbCA8IDApCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlicmVhazsKKwl9CisJbmlfd3JpdGV3KGRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiwgTV9PZmZzZXRfQ2xvY2tfYW5kX0ZvdXQyKTsKKwlwbGxfY29udHJvbF9iaXRzIHw9CisJCU1TZXJpZXNfUExMX0Rpdmlzb3JfQml0cyhmcmVxX2RpdmlkZXIpIHwKKwkJTVNlcmllc19QTExfTXVsdGlwbGllcl9CaXRzKGZyZXFfbXVsdGlwbGllcik7CisvLyAgICAgIHJ0X3ByaW50aygidXNpbmcgZGl2aWRlcj0laSwgbXVsdGlwbGllcj0laSBmb3IgUExMLiAgcGxsX2NvbnRyb2xfYml0cyA9IDB4JXhcbiIsIGZyZXFfZGl2aWRlciwgZnJlcV9tdWx0aXBsaWVyLCBwbGxfY29udHJvbF9iaXRzKTsKKy8vICAgICAgcnRfcHJpbnRrKCJjbG9ja19ucz0lZFxuIiwgZGV2cHJpdi0+Y2xvY2tfbnMpOworCW5pX3dyaXRldyhwbGxfY29udHJvbF9iaXRzLCBNX09mZnNldF9QTExfQ29udHJvbCk7CisJZGV2cHJpdi0+Y2xvY2tfc291cmNlID0gc291cmNlOworCS8qIGl0IHNlZW1zIHRvIHR5cGljYWxseSB0YWtlIGEgZmV3IGh1bmRyZWQgbWljcm9zZWNvbmRzIGZvciBQTEwgdG8gbG9jayAqLworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyArK2kpIHsKKwkJaWYgKG5pX3JlYWR3KE1fT2Zmc2V0X1BMTF9TdGF0dXMpICYgTVNlcmllc19QTExfTG9ja2VkX0JpdCkgeworCQkJYnJlYWs7CisJCX0KKwkJdWRlbGF5KDEpOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCXJ0X3ByaW50aworCQkJKCIlczogdGltZWQgb3V0IHdhaXRpbmcgZm9yIFBMTCB0byBsb2NrIHRvIHJlZmVyZW5jZSBjbG9jayBzb3VyY2UgJWkgd2l0aCBwZXJpb2QgJWkgbnMuXG4iLAorCQkJX19GVU5DVElPTl9fLCBzb3VyY2UsIHBlcmlvZF9ucyk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKwlyZXR1cm4gMzsKK30KKworc3RhdGljIGludCBuaV9zZXRfbWFzdGVyX2Nsb2NrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBzb3VyY2UsCisJdW5zaWduZWQgcGVyaW9kX25zKQoreworCWlmIChzb3VyY2UgPT0gTklfTUlPX0lOVEVSTkFMX0NMT0NLKSB7CisJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICY9IH5Vc2VfUlRTSV9DbG9ja19CaXQ7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZywKKwkJCVJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXIpOworCQlkZXZwcml2LT5jbG9ja19ucyA9IFRJTUVCQVNFXzFfTlM7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyICY9CisJCQkJfihNU2VyaWVzX1RpbWViYXNlMV9TZWxlY3RfQml0IHwKKwkJCQlNU2VyaWVzX1RpbWViYXNlM19TZWxlY3RfQml0KTsKKwkJCW5pX3dyaXRldyhkZXZwcml2LT5jbG9ja19hbmRfZm91dDIsCisJCQkJTV9PZmZzZXRfQ2xvY2tfYW5kX0ZvdXQyKTsKKwkJCW5pX3dyaXRldygwLCBNX09mZnNldF9QTExfQ29udHJvbCk7CisJCX0KKwkJZGV2cHJpdi0+Y2xvY2tfc291cmNlID0gc291cmNlOworCX0gZWxzZSB7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQkJcmV0dXJuIG5pX21zZXJpZXNfc2V0X3BsbF9tYXN0ZXJfY2xvY2soZGV2LCBzb3VyY2UsCisJCQkJcGVyaW9kX25zKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzb3VyY2UgPT0gTklfTUlPX1JUU0lfQ0xPQ0spIHsKKwkJCQlkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZyB8PQorCQkJCQlVc2VfUlRTSV9DbG9ja19CaXQ7CisJCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsCisJCQkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnLAorCQkJCQlSVFNJX1RyaWdfRGlyZWN0aW9uX1JlZ2lzdGVyKTsKKwkJCQlpZiAocGVyaW9kX25zID09IDApIHsKKwkJCQkJcnRfcHJpbnRrCisJCQkJCQkoIiVzOiB3ZSBkb24ndCBoYW5kbGUgYW4gdW5zcGVjaWZpZWQgY2xvY2sgcGVyaW9kIGNvcnJlY3RseSB5ZXQsIHJldHVybmluZyBlcnJvci5cbiIsCisJCQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9IGVsc2UgeworCQkJCQlkZXZwcml2LT5jbG9ja19ucyA9IHBlcmlvZF9uczsKKwkJCQl9CisJCQkJZGV2cHJpdi0+Y2xvY2tfc291cmNlID0gc291cmNlOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIDM7Cit9CisKK3N0YXRpYyBpbnQgbmlfdmFsaWRfcnRzaV9vdXRwdXRfc291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuLAorCXVuc2lnbmVkIHNvdXJjZSkKK3sKKwlpZiAoY2hhbiA+PSBudW1fY29uZmlndXJhYmxlX3J0c2lfY2hhbm5lbHMoZGV2KSkgeworCQlpZiAoY2hhbiA9PSBvbGRfUlRTSV9jbG9ja19jaGFubmVsKSB7CisJCQlpZiAoc291cmNlID09IE5JX1JUU0lfT1VUUFVUX1JUU0lfT1NDKQorCQkJCXJldHVybiAxOworCQkJZWxzZSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiJXM6IGludmFsaWQgc291cmNlIGZvciBjaGFubmVsPSVpLCBjaGFubmVsICVpIGlzIGFsd2F5cyB0aGUgUlRTSSBjbG9jayBmb3IgcHJlLW0tc2VyaWVzIGJvYXJkcy5cbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgY2hhbiwKKwkJCQkJb2xkX1JUU0lfY2xvY2tfY2hhbm5lbCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXN3aXRjaCAoc291cmNlKSB7CisJY2FzZSBOSV9SVFNJX09VVFBVVF9BRFJfU1RBUlQxOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfQURSX1NUQVJUMjoKKwljYXNlIE5JX1JUU0lfT1VUUFVUX1NDTEtHOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfREFDVVBETjoKKwljYXNlIE5JX1JUU0lfT1VUUFVUX0RBX1NUQVJUMToKKwljYXNlIE5JX1JUU0lfT1VUUFVUX0dfU1JDMDoKKwljYXNlIE5JX1JUU0lfT1VUUFVUX0dfR0FURTA6CisJY2FzZSBOSV9SVFNJX09VVFBVVF9SR09VVDA6CisJY2FzZSBOSV9SVFNJX09VVFBVVF9SVFNJX0JSRF8wOgorCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBOSV9SVFNJX09VVFBVVF9SVFNJX09TQzoKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXJldHVybiAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pX3NldF9ydHNpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4sCisJdW5zaWduZWQgc291cmNlKQoreworCWlmIChuaV92YWxpZF9ydHNpX291dHB1dF9zb3VyY2UoZGV2LCBjaGFuLCBzb3VyY2UpID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjaGFuIDwgNCkgeworCQlkZXZwcml2LT5ydHNpX3RyaWdfYV9vdXRwdXRfcmVnICY9IH5SVFNJX1RyaWdfT3V0cHV0X01hc2soY2hhbik7CisJCWRldnByaXYtPnJ0c2lfdHJpZ19hX291dHB1dF9yZWcgfD0KKwkJCVJUU0lfVHJpZ19PdXRwdXRfQml0cyhjaGFuLCBzb3VyY2UpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+cnRzaV90cmlnX2Ffb3V0cHV0X3JlZywKKwkJCVJUU0lfVHJpZ19BX091dHB1dF9SZWdpc3Rlcik7CisJfSBlbHNlIGlmIChjaGFuIDwgOCkgeworCQlkZXZwcml2LT5ydHNpX3RyaWdfYl9vdXRwdXRfcmVnICY9IH5SVFNJX1RyaWdfT3V0cHV0X01hc2soY2hhbik7CisJCWRldnByaXYtPnJ0c2lfdHJpZ19iX291dHB1dF9yZWcgfD0KKwkJCVJUU0lfVHJpZ19PdXRwdXRfQml0cyhjaGFuLCBzb3VyY2UpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZywKKwkJCVJUU0lfVHJpZ19CX091dHB1dF9SZWdpc3Rlcik7CisJfQorCXJldHVybiAyOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfZ2V0X3J0c2lfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbikKK3sKKwlpZiAoY2hhbiA8IDQpIHsKKwkJcmV0dXJuIFJUU0lfVHJpZ19PdXRwdXRfU291cmNlKGNoYW4sCisJCQlkZXZwcml2LT5ydHNpX3RyaWdfYV9vdXRwdXRfcmVnKTsKKwl9IGVsc2UgaWYgKGNoYW4gPCBudW1fY29uZmlndXJhYmxlX3J0c2lfY2hhbm5lbHMoZGV2KSkgeworCQlyZXR1cm4gUlRTSV9UcmlnX091dHB1dF9Tb3VyY2UoY2hhbiwKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19iX291dHB1dF9yZWcpOworCX0gZWxzZSB7CisJCWlmIChjaGFuID09IG9sZF9SVFNJX2Nsb2NrX2NoYW5uZWwpCisJCQlyZXR1cm4gTklfUlRTSV9PVVRQVVRfUlRTSV9PU0M7CisJCXJ0X3ByaW50aygiJXM6IGJ1ZyEgc2hvdWxkIG5ldmVyIGdldCBoZXJlP1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IG5pX3J0c2lfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlpZiAoY2hhbiA8IG51bV9jb25maWd1cmFibGVfcnRzaV9jaGFubmVscyhkZXYpKSB7CisJCQlkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZyB8PQorCQkJCVJUU0lfT3V0cHV0X0JpdChjaGFuLAorCQkJCShib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgIT0KKwkJCQkwKTsKKwkJfSBlbHNlIGlmIChjaGFuID09IG9sZF9SVFNJX2Nsb2NrX2NoYW5uZWwpIHsKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnIHw9CisJCQkJRHJpdmVfUlRTSV9DbG9ja19CaXQ7CisJCX0KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnLAorCQkJUlRTSV9UcmlnX0RpcmVjdGlvbl9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlpZiAoY2hhbiA8IG51bV9jb25maWd1cmFibGVfcnRzaV9jaGFubmVscyhkZXYpKSB7CisJCQlkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZyAmPQorCQkJCX5SVFNJX091dHB1dF9CaXQoY2hhbiwKKwkJCQkoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spICE9CisJCQkJMCk7CisJCX0gZWxzZSBpZiAoY2hhbiA9PSBvbGRfUlRTSV9jbG9ja19jaGFubmVsKSB7CisJCQlkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZyAmPQorCQkJCX5Ecml2ZV9SVFNJX0Nsb2NrX0JpdDsKKwkJfQorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcsCisJCQlSVFNJX1RyaWdfRGlyZWN0aW9uX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWlmIChjaGFuIDwgbnVtX2NvbmZpZ3VyYWJsZV9ydHNpX2NoYW5uZWxzKGRldikpIHsKKwkJCWRhdGFbMV0gPQorCQkJCShkZXZwcml2LT4KKwkJCQlydHNpX3RyaWdfZGlyZWN0aW9uX3JlZyAmIFJUU0lfT3V0cHV0X0JpdChjaGFuLAorCQkJCQkoYm9hcmR0eXBlLgorCQkJCQkJcmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJCQkJIT0KKwkJCQkJMCkpID8gSU5TTl9DT05GSUdfRElPX09VVFBVVCA6CisJCQkJSU5TTl9DT05GSUdfRElPX0lOUFVUOworCQl9IGVsc2UgaWYgKGNoYW4gPT0gb2xkX1JUU0lfY2xvY2tfY2hhbm5lbCkgeworCQkJZGF0YVsxXSA9CisJCQkJKGRldnByaXYtPgorCQkJCXJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICYgRHJpdmVfUlRTSV9DbG9ja19CaXQpCisJCQkJPyBJTlNOX0NPTkZJR19ESU9fT1VUUFVUIDoKKwkJCQlJTlNOX0NPTkZJR19ESU9fSU5QVVQ7CisJCX0KKwkJcmV0dXJuIDI7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0NMT0NLX1NSQzoKKwkJcmV0dXJuIG5pX3NldF9tYXN0ZXJfY2xvY2soZGV2LCBkYXRhWzFdLCBkYXRhWzJdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfQ0xPQ0tfU1JDOgorCQlkYXRhWzFdID0gZGV2cHJpdi0+Y2xvY2tfc291cmNlOworCQlkYXRhWzJdID0gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCXJldHVybiAzOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1NFVF9ST1VUSU5HOgorCQlyZXR1cm4gbmlfc2V0X3J0c2lfcm91dGluZyhkZXYsIGNoYW4sIGRhdGFbMV0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9ST1VUSU5HOgorCQlkYXRhWzFdID0gbmlfZ2V0X3J0c2lfcm91dGluZyhkZXYsIGNoYW4pOworCQlyZXR1cm4gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjczU1Mjlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisJY29uc3QgaW50IHRpbWVvdXQgPSBIWjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJc3RhdHVzID0gbmlfYW9fd2luX2ludyhkZXYsIENBTF9BRENfU3RhdHVzXzY3eHgpOworCQlpZiAoKHN0YXR1cyAmIENTU19BRENfQlVTWSkgPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKHNjaGVkdWxlX3RpbWVvdXQoMSkpIHsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorLy9wcmludGsoImxvb3BlZCAlaSB0aW1lcyB3YWl0aW5nIGZvciBpZGxlXG4iLCBpKTsKKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCXJ0X3ByaW50aygiJXM6ICVzOiB0aW1lb3V0XG4iLCBfX0ZJTEVfXywgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FVElNRTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNzNTUyOV9jb21tYW5kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDA7CisJaW50IGk7CisKKwluaV9hb193aW5fb3V0dyhkZXYsIHZhbHVlLCBDQUxfQURDX0NvbW1hbmRfNjd4eCk7CisJLyogZ2l2ZSB0aW1lIGZvciBjb21tYW5kIHRvIHN0YXJ0IGJlaW5nIHNlcmlhbGx5IGNsb2NrZWQgaW50byBjczU1MjkuCisJICogdGhpcyBpbnN1cmVzIHRoYXQgdGhlIENTU19BRENfQlVTWSBiaXQgd2lsbCBnZXQgcHJvcGVybHkKKwkgKiBzZXQgYmVmb3JlIHdlIGV4aXQgdGhpcyBmdW5jdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCWlmICgobmlfYW9fd2luX2ludyhkZXYsIENBTF9BRENfU3RhdHVzXzY3eHgpICYgQ1NTX0FEQ19CVVNZKSkKKwkJCWJyZWFrOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKy8vcHJpbnRrKCJsb29wZWQgJWkgdGltZXMgd3JpdGluZyBjb21tYW5kIHRvIGNzNTUyOVxuIiwgaSk7CisJaWYgKGkgPT0gdGltZW91dCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicG9zc2libGUgcHJvYmxlbSAtIG5ldmVyIHNhdyBhZGMgZ28gYnVzeT8iKTsKKwl9Cit9CisKKy8qIHdyaXRlIHRvIGNzNTUyOSByZWdpc3RlciAqLworc3RhdGljIHZvaWQgY3M1NTI5X2NvbmZpZ193cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlLAorCXVuc2lnbmVkIGludCByZWdfc2VsZWN0X2JpdHMpCit7CisJbmlfYW9fd2luX291dHcoZGV2LCAoKHZhbHVlID4+IDE2KSAmIDB4ZmYpLAorCQlDQUxfQURDX0NvbmZpZ19EYXRhX0hpZ2hfV29yZF82N3h4KTsKKwluaV9hb193aW5fb3V0dyhkZXYsICh2YWx1ZSAmIDB4ZmZmZiksCisJCUNBTF9BRENfQ29uZmlnX0RhdGFfTG93X1dvcmRfNjd4eCk7CisJcmVnX3NlbGVjdF9iaXRzICY9IENTQ01EX1JFR0lTVEVSX1NFTEVDVF9NQVNLOworCWNzNTUyOV9jb21tYW5kKGRldiwgQ1NDTURfQ09NTUFORCB8IHJlZ19zZWxlY3RfYml0cyk7CisJaWYgKGNzNTUyOV93YWl0X2Zvcl9pZGxlKGRldikpCisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lIG9yIHNpZ25hbCBpbiBjczU1MjlfY29uZmlnX3dyaXRlKCkiKTsKK30KKworI2lmZGVmIE5JX0NTNTUyOV9ERUJVRworLyogcmVhZCBmcm9tIGNzNTUyOSByZWdpc3RlciAqLworc3RhdGljIHVuc2lnbmVkIGludCBjczU1MjlfY29uZmlnX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IHJlZ19zZWxlY3RfYml0cykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlyZWdfc2VsZWN0X2JpdHMgJj0gQ1NDTURfUkVHSVNURVJfU0VMRUNUX01BU0s7CisJY3M1NTI5X2NvbW1hbmQoZGV2LCBDU0NNRF9DT01NQU5EIHwgQ1NDTURfUkVBRCB8IHJlZ19zZWxlY3RfYml0cyk7CisJaWYgKGNzNTUyOV93YWl0X2Zvcl9pZGxlKGRldikpCisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0IG9yIHNpZ25hbCBpbiBjczU1MjlfY29uZmlnX3JlYWQoKSIpOworCXZhbHVlID0gKG5pX2FvX3dpbl9pbncoZGV2LAorCQkJQ0FMX0FEQ19Db25maWdfRGF0YV9IaWdoX1dvcmRfNjd4eCkgPDwgMTYpICYgMHhmZjAwMDA7CisJdmFsdWUgfD0gbmlfYW9fd2luX2ludyhkZXYsIENBTF9BRENfQ29uZmlnX0RhdGFfTG93X1dvcmRfNjd4eCkgJiAweGZmZmY7CisJcmV0dXJuIHZhbHVlOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgY3M1NTI5X2RvX2NvbnZlcnNpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0ICpkYXRhKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzOworCisJY3M1NTI5X2NvbW1hbmQoZGV2LCBDU0NNRF9DT01NQU5EIHwgQ1NDTURfU0lOR0xFX0NPTlZFUlNJT04pOworCXJldHZhbCA9IGNzNTUyOV93YWl0X2Zvcl9pZGxlKGRldik7CisJaWYgKHJldHZhbCkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJInRpbWVvdXQgb3Igc2lnbmFsIGluIGNzNTUyOV9kb19jb252ZXJzaW9uKCkiKTsKKwkJcmV0dXJuIC1FVElNRTsKKwl9CisJc3RhdHVzID0gbmlfYW9fd2luX2ludyhkZXYsIENBTF9BRENfU3RhdHVzXzY3eHgpOworCWlmIChzdGF0dXMgJiBDU1NfT1NDX0RFVEVDVCkgeworCQlydF9wcmludGsKKwkJCSgibmlfbWlvX2NvbW1vbjogY3M1NTI5IGNvbnZlcnNpb24gZXJyb3IsIHN0YXR1cyBDU1NfT1NDX0RFVEVDVFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoc3RhdHVzICYgQ1NTX09WRVJSQU5HRSkgeworCQlydF9wcmludGsKKwkJCSgibmlfbWlvX2NvbW1vbjogY3M1NTI5IGNvbnZlcnNpb24gZXJyb3IsIG92ZXJyYW5nZSAoaWdub3JpbmcpXG4iKTsKKwl9CisJaWYgKGRhdGEpIHsKKwkJKmRhdGEgPSBuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19EYXRhXzY3eHgpOworCQkvKiBjczU1MjkgcmV0dXJucyAxNiBiaXQgc2lnbmVkIGRhdGEgaW4gYmlwb2xhciBtb2RlICovCisJCSpkYXRhIF49ICgxIDw8IDE1KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3M1NTI5X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIHJldHZhbDsKKwl1bnNpZ25lZCBzaG9ydCBzYW1wbGU7CisJdW5zaWduZWQgaW50IGNoYW5uZWxfc2VsZWN0OworCWNvbnN0IHVuc2lnbmVkIGludCBJTlRFUk5BTF9SRUYgPSAweDEwMDA7CisKKwkvKiBTZXQgY2FsaWJyYXRpb24gYWRjIHNvdXJjZS4gIERvY3MgbGllLCByZWZlcmVuY2Ugc2VsZWN0IGJpdHMgOCB0byAxMQorCSAqIGRvIG5vdGhpbmcuIGJpdCAxMiBzZWVtcyB0byBjaG9vc2VzIGludGVybmFsIHJlZmVyZW5jZSB2b2x0YWdlLCBiaXQKKwkgKiAxMyBjYXVzZXMgdGhlIGFkYyBpbnB1dCB0byBnbyBvdmVycmFuZ2UgKG1heWJlIHJlYWRzIGV4dGVybmFsIHJlZmVyZW5jZT8pICovCisJaWYgKGluc24tPmNoYW5zcGVjICYgQ1JfQUxUX1NPVVJDRSkKKwkJY2hhbm5lbF9zZWxlY3QgPSBJTlRFUk5BTF9SRUY7CisJZWxzZQorCQljaGFubmVsX3NlbGVjdCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCW5pX2FvX3dpbl9vdXR3KGRldiwgY2hhbm5lbF9zZWxlY3QsIEFPX0NhbGlicmF0aW9uX0NoYW5uZWxfU2VsZWN0XzY3eHgpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlyZXR2YWwgPSBjczU1MjlfZG9fY29udmVyc2lvbihkZXYsICZzYW1wbGUpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWRhdGFbbl0gPSBzYW1wbGU7CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IGluaXRfY3M1NTI5KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBjb25maWdfYml0cyA9CisJCUNTQ0ZHX1BPUlRfTU9ERSB8IENTQ0ZHX1dPUkRfUkFURV8yMTgwX0NZQ0xFUzsKKworI2lmIDEKKwkvKiBkbyBzZWxmLWNhbGlicmF0aW9uICovCisJY3M1NTI5X2NvbmZpZ193cml0ZShkZXYsIGNvbmZpZ19iaXRzIHwgQ1NDRkdfU0VMRl9DQUxfT0ZGU0VUX0dBSU4sCisJCUNTQ01EX0NPTkZJR19SRUdJU1RFUik7CisJLyogbmVlZCB0byBmb3JjZSBhIGNvbnZlcnNpb24gZm9yIGNhbGlicmF0aW9uIHRvIHJ1biAqLworCWNzNTUyOV9kb19jb252ZXJzaW9uKGRldiwgTlVMTCk7CisjZWxzZQorCS8qIGZvcmNlIGdhaW4gY2FsaWJyYXRpb24gdG8gMSAqLworCWNzNTUyOV9jb25maWdfd3JpdGUoZGV2LCAweDQwMDAwMCwgQ1NDTURfR0FJTl9SRUdJU1RFUik7CisJY3M1NTI5X2NvbmZpZ193cml0ZShkZXYsIGNvbmZpZ19iaXRzIHwgQ1NDRkdfU0VMRl9DQUxfT0ZGU0VULAorCQlDU0NNRF9DT05GSUdfUkVHSVNURVIpOworCWlmIChjczU1Mjlfd2FpdF9mb3JfaWRsZShkZXYpKQorCQljb21lZGlfZXJyb3IoZGV2LCAidGltZW91dCBvciBzaWduYWwgaW4gaW5pdF9jczU1MjkoKVxuIik7CisjZW5kaWYKKyNpZmRlZiBOSV9DUzU1MjlfREVCVUcKKwlydF9wcmludGsoImNvbmZpZzogMHgleFxuIiwgY3M1NTI5X2NvbmZpZ19yZWFkKGRldiwKKwkJQ1NDTURfQ09ORklHX1JFR0lTVEVSKSk7CisJcnRfcHJpbnRrKCJnYWluOiAweCV4XG4iLCBjczU1MjlfY29uZmlnX3JlYWQoZGV2LAorCQlDU0NNRF9HQUlOX1JFR0lTVEVSKSk7CisJcnRfcHJpbnRrKCJvZmZzZXQ6IDB4JXhcbiIsIGNzNTUyOV9jb25maWdfcmVhZChkZXYsCisJCUNTQ01EX09GRlNFVF9SRUdJU1RFUikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzNTdjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYwpAQCAtMCwwICsxLDU1MSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYworICAgIEhhcmR3YXJlIGRyaXZlciBmb3IgTkkgUENNQ0lBIE1JTyBFIHNlcmllcyBjYXJkcworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBuaV9taW9fY3MKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBEQVFDYXJkIEUgc2VyaWVzCitBdXRob3I6IGRzCitTdGF0dXM6IHdvcmtzCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIERBUUNhcmQtQUktMTZYRS01MCAobmlfbWlvX2NzKSwKKyAgREFRQ2FyZC1BSS0xNkUtNCwgREFRQ2FyZC02MDYyRSwgREFRQ2FyZC02MDI0RSwgREFRQ2FyZC02MDM2RQorVXBkYXRlZDogVGh1IE9jdCAyMyAxOTo0MzoxNyBDRFQgMjAwMworCitTZWUgdGhlIG5vdGVzIGluIHRoZSBuaV9hdG1pby5vIGRyaXZlci4KKyovCisvKgorCVRoZSByZWFsIGd1dHMgb2YgdGhlIGRyaXZlciBpcyBpbiBuaV9taW9fY29tbW9uLmMsIHdoaWNoIGlzCisJaW5jbHVkZWQgYnkgYWxsIHRoZSBFIHNlcmllcyBkcml2ZXJzLgorCisJUmVmZXJlbmNlcyBmb3Igc3BlY2lmaWNhdGlvbnM6CisKKwkgICAzNDEwODBhLnBkZiAgREFRQ2FyZCBFIFNlcmllcyBSZWdpc3RlciBMZXZlbCBQcm9ncmFtbWVyIE1hbnVhbAorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAibmlfc3RjLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorCisjdW5kZWYgREVCVUcKKworI2RlZmluZSBBVE1JTyAxCisjdW5kZWYgUENJTUlPCisKKy8qCisgKiAgQVQgc3BlY2lmaWMgc2V0dXAKKyAqLworCisjZGVmaW5lIE5JX1NJWkUgMHgyMAorCisjZGVmaW5lIE1BWF9OX0NBTERBQ1MgMzIKKworc3RhdGljIGNvbnN0IG5pX2JvYXJkIG5pX2JvYXJkc1tdID0geworICAgICAge2RldmljZV9pZDoweDAxMGQsCisJICAgICAgbmFtZToJIkRBUUNhcmQtYWktMTZ4ZS01MCIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjEwMjQsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl84LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgbl9hb2NoYW46MCwKKwkgICAgICBhb2JpdHM6CTAsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCSAgICAgIGFvX3VuaXBvbGFyOjAsCisJICAgICAgbnVtX3AwX2Rpb19jaGFubmVsczo4LAorCSAgICAgIGhhc184MjU1OjAsCisJICAgICAgY2FsZGFjOgl7ZGFjODgwMCwgZGFjODA0M30sCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjB4MDEwYywKKwkgICAgICBuYW1lOgkiREFRQ2FyZC1haS0xNmUtNCIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjEwMjQsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDo0MDAwLAorCSAgICAgIG5fYW9jaGFuOjAsCisJICAgICAgYW9iaXRzOgkwLAorCSAgICAgIGFvX2ZpZm9fZGVwdGg6MCwKKwkgICAgICBhb191bmlwb2xhcjowLAorCSAgICAgIG51bV9wMF9kaW9fY2hhbm5lbHM6OCwKKwkgICAgICBoYXNfODI1NTowLAorCSAgICAgIGNhbGRhYzoJe21iODgzNDF9LAkvKiB2ZXJpZmllZCAqLworCQl9LAorICAgICAge2RldmljZV9pZDoweDAyYzQsCisJICAgICAgbmFtZToJIkRBUUNhcmQtNjA2MkUiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDo4MTkyLAorCSAgICAgIGFsd2F5c2RpdGhlcjowLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTYsCisJICAgICAgYWlfc3BlZWQ6MjAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDoyMDQ4LAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZyYW5nZV9iaXBvbGFyMTAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkgICAgICBhb19zcGVlZDoxMTc2LAorCSAgICAgIG51bV9wMF9kaW9fY2hhbm5lbHM6OCwKKwkgICAgICBoYXNfODI1NTowLAorCSAgICAgIGNhbGRhYzoJe2FkODgwNF9kZWJ1Z30sCS8qIHZlcmlmaWVkICovCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjB4MDc1ZSwKKwkgICAgICBuYW1lOgkiREFRQ2FyZC02MDI0RSIsCS8qIHNwZWNzIGluY29ycmVjdCEgKi8KKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6MTAyNCwKKwkgICAgICBhbHdheXNkaXRoZXI6MCwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgbl9hb2NoYW46MiwKKwkgICAgICBhb2JpdHM6CTEyLAorCSAgICAgIGFvX2ZpZm9fZGVwdGg6MCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomcmFuZ2VfYmlwb2xhcjEwLAorCSAgICAgIGFvX3VuaXBvbGFyOjAsCisJICAgICAgYW9fc3BlZWQ6MTAwMDAwMCwKKwkgICAgICBudW1fcDBfZGlvX2NoYW5uZWxzOjgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkgICAgICBjYWxkYWM6CXthZDg4MDRfZGVidWd9LAorCQl9LAorICAgICAge2RldmljZV9pZDoweDAyNDUsCisJICAgICAgbmFtZToJIkRBUUNhcmQtNjAzNkUiLAkvKiBzcGVjcyBpbmNvcnJlY3QhICovCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjEwMjQsCisJICAgICAgYWx3YXlzZGl0aGVyOjEsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl80LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgbl9hb2NoYW46MiwKKwkgICAgICBhb2JpdHM6CTE2LAorCSAgICAgIGFvX2ZpZm9fZGVwdGg6MCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomcmFuZ2VfYmlwb2xhcjEwLAorCSAgICAgIGFvX3VuaXBvbGFyOjAsCisJICAgICAgYW9fc3BlZWQ6MTAwMDAwMCwKKwkgICAgICBudW1fcDBfZGlvX2NoYW5uZWxzOjgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkgICAgICBjYWxkYWM6CXthZDg4MDRfZGVidWd9LAorCQl9LAorI2lmIDAKKyAgICAgIHtkZXZpY2VfaWQ6MHgwMDAwLAkvKiB1bmtub3duICovCisJICAgICAgbmFtZToJIkRBUUNhcmQtNjcxNSIsCisJICAgICAgbl9hZGNoYW46MCwKKwkgICAgICBuX2FvY2hhbjo4LAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fNjcxeDoJODE5MiwKKwkgICAgICBudW1fcDBfZGlvX2NoYW5uZWxzOjgsCisJICAgICAgY2FsZGFjOgl7bWI4ODM0MSwgbWI4ODM0MX0sCisJCX0sCisjZW5kaWYKKwkvKiBOLkIuIFVwZGF0ZSBuaV9taW9fY3NfaWRzW10gd2hlbiBlbnRyaWVzIGFkZGVkIGFib3ZlLiAqLworfTsKKworI2RlZmluZSBpbnRlcnJ1cHRfcGluKGEpCTAKKworI2RlZmluZSBJUlFfUE9MQVJJVFkgMQorCisjZGVmaW5lIE5JX0VfSVJRX0ZMQUdTCQlJUlFGX1NIQVJFRAorCitzdHJ1Y3QgbmlfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKworIE5JX1BSSVZBVEVfQ09NTU9OfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IG5pX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qIEhvdyB3ZSBhY2Nlc3MgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgbmlfd3JpdGVsKGEsYikJCShvdXRsKChhKSwoYikrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV9yZWFkbChhKQkJKGlubCgoYSkrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV93cml0ZXcoYSxiKQkJKG91dHcoKGEpLChiKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3JlYWR3KGEpCQkoaW53KChhKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3dyaXRlYihhLGIpCQkob3V0YigoYSksKGIpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfcmVhZGIoYSkJCShpbmIoKGEpK2Rldi0+aW9iYXNlKSkKKworLyogSG93IHdlIGFjY2VzcyB3aW5kb3dlZCByZWdpc3RlcnMgKi8KKworLyogV2UgYXV0b21hdGljYWxseSB0YWtlIGFkdmFudGFnZSBvZiBTVEMgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlCisgKiByZWFkL3dyaXR0ZW4gZGlyZWN0bHkgaW4gdGhlIEkvTyBzcGFjZSBvZiB0aGUgYm9hcmQuICBUaGUKKyAqIERBUUNhcmQgZGV2aWNlcyBtYXAgdGhlIGxvdyA4IFNUQyByZWdpc3RlcnMgdG8gaW9iYXNlK2FkZHIqMi4gKi8KKworc3RhdGljIHZvaWQgbWlvX2NzX3dpbl9vdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGRhdGEsIGludCBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisJaWYgKGFkZHIgPCA4KSB7CisJCW5pX3dyaXRldyhkYXRhLCBhZGRyICogMik7CisJfSBlbHNlIHsKKwkJbmlfd3JpdGV3KGFkZHIsIFdpbmRvd19BZGRyZXNzKTsKKwkJbmlfd3JpdGV3KGRhdGEsIFdpbmRvd19EYXRhKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBtaW9fY3Nfd2luX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQxNl90IHJldDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlpZiAoYWRkciA8IDgpIHsKKwkJcmV0ID0gbmlfcmVhZHcoYWRkciAqIDIpOworCX0gZWxzZSB7CisJCW5pX3dyaXRldyhhZGRyLCBXaW5kb3dfQWRkcmVzcyk7CisJCXJldCA9IG5pX3JlYWR3KFdpbmRvd19EYXRhKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1pb19jc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBtaW9fY3NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbmlfbWlvX2NzID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX21pb19jcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bWlvX2NzX2F0dGFjaCwKKyAgICAgIGRldGFjaDptaW9fY3NfZGV0YWNoLAorfTsKKworI2luY2x1ZGUgIm5pX21pb19jb21tb24uYyIKKworc3RhdGljIGludCBuaV9nZXRib2FyZHR5cGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKKworLyogY2xlYW4gdXAgYWxsb2NhdGVkIHJlc291cmNlcyAqLworLyogY2FsbGVkIHdoZW4gZHJpdmVyIGlzIHJlbW92ZWQgKi8KK3N0YXRpYyBpbnQgbWlvX2NzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwltaW9fY29tbW9uX2RldGFjaChkZXYpOworCisJLyogUENNQ0lBIGxheWVyIGZyZWVzIHRoZSBJTyByZWdpb24gKi8KKworCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pb19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBjc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqY3VyX2RldiA9IE5VTEw7CitzdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJuaV9taW9fY3MiOworc3RhdGljIGRldl9ub2RlX3QgZGV2X25vZGUgPSB7CisJIm5pX21pb19jcyIsCisJQ09NRURJX01BSk9SLCAwLAorCU5VTEwKK307CitzdGF0aWMgaW50IGNzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJY3VyX2RldiA9IGxpbms7CisKKwltaW9fY3NfY29uZmlnKGxpbmspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworfQorCitzdGF0aWMgdm9pZCBjc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJRFBSSU5USygiY3NfZGV0YWNoKGxpbms9JXApXG4iLCBsaW5rKTsKKworCWlmIChsaW5rLT5kZXZfbm9kZSkgeworCQljc19yZWxlYXNlKGxpbmspOworCX0KK30KKworc3RhdGljIGludCBtaW9fY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlEUFJJTlRLKCJwbSBzdXNwZW5kXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pb19jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJRFBSSU5USygicG0gcmVzdW1lXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWlvX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwl0dXBsZV90IHR1cGxlOworCXVfc2hvcnQgYnVmWzEyOF07CisJY2lzcGFyc2VfdCBwYXJzZTsKKwlpbnQgbWFuZmlkID0gMCwgcHJvZGlkID0gMDsKKwlpbnQgcmV0OworCisJRFBSSU5USygibWlvX2NzX2NvbmZpZyhsaW5rPSVwKVxuIiwgbGluayk7CisKKwl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOworCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CisJcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CisJcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKKwlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKKwlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CisKKyNpZiAwCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xPTkdMSU5LX01GQzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTiB8IFRVUExFX1JFVFVSTl9MSU5LOworCWluZm8tPm11bHRpKGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSA9PSAwKTsKKyNlbmRpZgorCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKKwlpZiAoKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSAwKSAmJgorCQkocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgPT0gMCkpIHsKKwkJbWFuZmlkID0gbGUxNl90b19jcHUoYnVmWzBdKTsKKwkJcHJvZGlkID0gbGUxNl90b19jcHUoYnVmWzFdKTsKKwl9CisJLy9wcmludGsoIm1hbmZpZCA9IDB4JTA0eCwgMHglMDR4XG4iLG1hbmZpZCxwcm9kaWQpOworCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOworCXJldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOworCXJldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSk7CisKKyNpZiAwCisJcHJpbnRrKCIgaW5kZXg6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXgpOworCXByaW50aygiIGZsYWdzOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmZsYWdzKTsKKwlwcmludGsoIiBpbyBmbGFnczogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5mbGFncyk7CisJcHJpbnRrKCIgaW8gbndpbjogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5ud2luKTsKKwlwcmludGsoIiBpbyBiYXNlOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5iYXNlKTsKKwlwcmludGsoIiBpbyBsZW46IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmxlbik7CisJcHJpbnRrKCIgaXJxMTogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pcnEuSVJRSW5mbzEpOworCXByaW50aygiIGlycTI6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuaXJxLklSUUluZm8yKTsKKwlwcmludGsoIiBtZW0gZmxhZ3M6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkubWVtLmZsYWdzKTsKKwlwcmludGsoIiBtZW0gbndpbjogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5tZW0ubndpbik7CisJcHJpbnRrKCIgc3VidHVwbGVzOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LnN1YnR1cGxlcyk7CisjZW5kaWYKKworI2lmIDAKKwlsaW5rLT5pby5OdW1Qb3J0czEgPSAweDIwOworCWxpbmstPmlvLklPQWRkckxpbmVzID0gNTsKKwlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworI2VuZGlmCisJbGluay0+aW8uTnVtUG9ydHMxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuOworCWxpbmstPmlvLklPQWRkckxpbmVzID0KKwkJcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7CisKKwl7CisJCWludCBiYXNlOworCQlmb3IgKGJhc2UgPSAweDAwMDsgYmFzZSA8IDB4NDAwOyBiYXNlICs9IDB4MjApIHsKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGJhc2U7CisJCQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCQkJLy9wcmludGsoIlJlcXVlc3RJTyAweCUwMnhcbiIscmV0KTsKKwkJCWlmICghcmV0KQorCQkJCWJyZWFrOworCQl9CisJfQorCisJbGluay0+aXJxLklSUUluZm8xID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pcnEuSVJRSW5mbzE7CisJbGluay0+aXJxLklSUUluZm8yID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pcnEuSVJRSW5mbzI7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCJwY21jaWFfcmVxdWVzdF9pcnEoKSByZXR1cm5lZCBlcnJvcjogJWlcbiIsIHJldCk7CisJfQorCS8vcHJpbnRrKCJSZXF1ZXN0SVJRIDB4JTAyeFxuIixyZXQpOworCisJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwkvL3ByaW50aygiUmVxdWVzdENvbmZpZ3VyYXRpb24gJWRcbiIscmV0KTsKKworCWxpbmstPmRldl9ub2RlID0gJmRldl9ub2RlOworfQorCitzdGF0aWMgaW50IG1pb19jc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmV0OworCisJRFBSSU5USygibWlvX2NzX2F0dGFjaChkZXY9JXAsaXQ9JXApXG4iLCBkZXYsIGl0KTsKKworCWxpbmsgPSBjdXJfZGV2OwkJLyogWFhYIGhhY2sgKi8KKwlpZiAoIWxpbmspCisJCXJldHVybiAtRUlPOworCisJZGV2LT5kcml2ZXIgPSAmZHJpdmVyX25pX21pb19jczsKKwlkZXYtPmlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKworCWlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBEQVFDYXJkOiBpbyAweCUwNGx4LCBpcnEgJXUsICIsCisJCWRldi0+bWlub3IsIGRldi0+ZHJpdmVyLT5kcml2ZXJfbmFtZSwgZGV2LT5pb2Jhc2UsIGlycSk7CisKKyNpZiAwCisJeworCQlpbnQgaTsKKworCQlwcmludGsoIiBib2FyZCBmaW5nZXJwcmludDoiKTsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDIpIHsKKwkJCXByaW50aygiICUwNHggJTAyeCIsIGludyhkZXYtPmlvYmFzZSArIGkpLAorCQkJCWluYihkZXYtPmlvYmFzZSArIGkgKyAxKSk7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCQlwcmludGsoIiBib2FyZCBmaW5nZXJwcmludCAod2luZG93ZWQpOiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJcHJpbnRrKCIgMHglMDR4Iiwgd2luX2luKGkpKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorI2VuZGlmCisKKwlkZXYtPmJvYXJkX3B0ciA9IG5pX2JvYXJkcyArIG5pX2dldGJvYXJkdHlwZShkZXYsIGxpbmspOworCisJcHJpbnRrKCIgJXMiLCBib2FyZHR5cGUubmFtZSk7CisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmR0eXBlLm5hbWU7CisKKwlpZiAoKHJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIG5pX0VfaW50ZXJydXB0LCBOSV9FX0lSUV9GTEFHUywKKwkJCQkibmlfbWlvX2NzIiwgZGV2KSkgPCAwKSB7CisJCXByaW50aygiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldi0+aXJxID0gaXJxOworCisJLyogYWxsb2NhdGUgcHJpdmF0ZSBhcmVhICovCisJaWYgKChyZXQgPSBuaV9hbGxvY19wcml2YXRlKGRldikpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXZwcml2LT5zdGNfd3JpdGV3ID0gJm1pb19jc193aW5fb3V0OworCWRldnByaXYtPnN0Y19yZWFkdyA9ICZtaW9fY3Nfd2luX2luOworCWRldnByaXYtPnN0Y193cml0ZWwgPSAmd2luX291dDI7CisJZGV2cHJpdi0+c3RjX3JlYWRsID0gJndpbl9pbjI7CisKKwlpZiAoKHJldCA9IG5pX0VfaW5pdChkZXYsIGl0KSkgPCAwKSB7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3Byb2RpZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJdHVwbGVfdCB0dXBsZTsKKwl1X3Nob3J0IGJ1ZlsxMjhdOworCWludCBwcm9kaWQgPSAwOworCisJdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOworCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOworCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IDApICYmCisJCShwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSA9PSAwKSkgeworCQlwcm9kaWQgPSBsZTE2X3RvX2NwdShidWZbMV0pOworCX0KKworCXJldHVybiBwcm9kaWQ7Cit9CisKK3N0YXRpYyBpbnQgbmlfZ2V0Ym9hcmR0eXBlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlpbnQgaWQ7CisJaW50IGk7CisKKwlpZCA9IGdldF9wcm9kaWQoZGV2LCBsaW5rKTsKKworCWZvciAoaSA9IDA7IGkgPCBuX25pX2JvYXJkczsgaSsrKSB7CisJCWlmIChuaV9ib2FyZHNbaV0uZGV2aWNlX2lkID09IGlkKSB7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKworCXByaW50aygidW5rbm93biBib2FyZCAweCUwNHggLS0gcHJldGVuZCBpdCBpcyBhICIsIGlkKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgTU9EVUxFCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIG5pX21pb19jc19pZHNbXSA9IHsKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMGIsIDB4MDEwZCksCS8qIERBUUNhcmQtYWktMTZ4ZS01MCAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHgwMTBjKSwJLyogREFRQ2FyZC1haS0xNmUtNCAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHgwMmM0KSwJLyogREFRQ2FyZC02MDYyRSAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHgwNzVlKSwJLyogREFRQ2FyZC02MDI0RSAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHgwMjQ1KSwJLyogREFRQ2FyZC02MDM2RSAqLworCVBDTUNJQV9ERVZJQ0VfTlVMTAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIG5pX21pb19jc19pZHMpOworCitzdHJ1Y3QgcGNtY2lhX2RyaXZlciBuaV9taW9fY3NfZHJpdmVyID0geworCS5wcm9iZSA9ICZjc19hdHRhY2gsCisJLnJlbW92ZSA9ICZjc19kZXRhY2gsCisJLnN1c3BlbmQgPSAmbWlvX2NzX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZtaW9fY3NfcmVzdW1lLAorCS5pZF90YWJsZSA9IG5pX21pb19jc19pZHMsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRydiA9IHsKKwkJCS5uYW1lID0gZGV2X2luZm8sCisJCX0sCit9OworCitpbnQgaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZuaV9taW9fY3NfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbmlfbWlvX2NzKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmbmlfbWlvX2NzX2RyaXZlcik7CisjaWYgMAorCXdoaWxlIChjdXJfZGV2ICE9IE5VTEwpCisJCWNzX2RldGFjaChjdXJfZGV2LT5oYW5kbGUpOworI2VuZGlmCisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfbmlfbWlvX2NzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGVmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKQEAgLTAsMCArMSwxMzAyIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisgICAgZHJpdmVyIGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktRElPLTk2L1BDSS02NTA4CisgICAgICAgICAgICAgICBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktRElPLTMySFMKKyAgICAgICAgICAgICAgIE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS02NTAzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDIgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG5pX3BjaWRpbworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1ESU8zMkhTLCBQQ0ktRElPOTYsIFBDSS02NTMzLCBQQ0ktNjUwMworQXV0aG9yOiBkcworU3RhdHVzOiB3b3JrcworRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktRElPLTMySFMgKG5pX3BjaWRpbyksIFBYSS02NTMzLAorICBQQ0ktRElPLTk2LCBQQ0ktRElPLTk2QiwgUFhJLTY1MDgsIFBDSS02NTAzLCBQQ0ktNjUwM0IsIFBDSS02NTAzWCwKKyAgUFhJLTY1MDMsIFBDSS02NTMzLCBQQ0ktNjUzNAorVXBkYXRlZDogU3VuLCAyMSBBcHIgMjAwMiAyMTowMzozOCAtMDcwMAorCitUaGUgRElPLTk2IGFwcGVhcnMgYXMgZm91ciA4MjU1IHN1YmRldmljZXMuICBTZWUgdGhlIDgyNTUKK2RyaXZlciBub3RlcyBmb3IgZGV0YWlscy4KKworVGhlIERJTzMySFMgYm9hcmQgYXBwZWFycyBhcyBvbmUgc3ViZGV2aWNlLCB3aXRoIDMyIGNoYW5uZWxzLgorRWFjaCBjaGFubmVsIGlzIGluZGl2aWR1YWxseSBJL08gY29uZmlndXJhYmxlLiAgVGhlIGNoYW5uZWwgb3JkZXIKK2lzIDA9QTAsIDE9QTEsIDI9QTIsIC4uLiA4PUIwLCAxNj1DMCwgMjQ9RDAuICBUaGUgZHJpdmVyIG9ubHkKK3N1cHBvcnRzIHNpbXBsZSBkaWdpdGFsIEkvTzsgbm8gaGFuZHNoYWtpbmcgaXMgc3VwcG9ydGVkLgorCitETUEgbW9zdGx5IHdvcmtzIGZvciB0aGUgUENJLURJTzMySFMsIGJ1dCBvbmx5IGluIHRpbWVkIGlucHV0IG1vZGUuCisKK1RoaXMgZHJpdmVyIGNvdWxkIGJlIGVhc2lseSBtb2RpZmllZCB0byBzdXBwb3J0IEFULU1JTzMySFMgYW5kCitBVC1NSU85Ni4KKworVGhlIFBDSS02NTM0IHJlcXVpcmVzIGEgZmlybXdhcmUgdXBsb2FkIGFmdGVyIHBvd2VyLXVwIHRvIHdvcmssIHRoZQorZmlybXdhcmUgZGF0YSBhbmQgaW5zdHJ1Y3Rpb25zIGZvciBsb2FkaW5nIGl0IHdpdGggY29tZWRpX2NvbmZpZworaXQgYXJlIGNvbnRhaW5lZCBpbiB0aGUKK2NvbWVkaV9ub25mcmVlX2Zpcm13YXJlIHRhcmJhbGwgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5jb21lZGkub3JnCisqLworCisvKgorICAgVGhpcyBkcml2ZXIgaXMgZm9yIGJvdGggdGhlIE5JIFBDSS1ESU8tMzJIUyBhbmQgdGhlIFBDSS1ESU8tOTYsCisgICB3aGljaCBoYXZlIHZlcnkgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuICBCdXQsIHNpbmNlIHRoZSAnOTYgaXMKKyAgIHNvIHNpbXBsZSwgaXQgaXMgaW5jbHVkZWQgaGVyZS4KKworICAgTWFudWFscyAoYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLm5hdGluc3QuY29tL3N1cHBvcnQvbWFudWFscykKKworCTMyMDkzOGMucGRmCVBDSS1ESU8tOTYvUFhJLTY1MDgvUENJLTY1MDMgVXNlciBNYW51YWwKKwkzMjE0NjRiLnBkZglBVC9QQ0ktRElPLTMySFMgVXNlciBNYW51YWwKKwkzNDEzMjlBLnBkZglQQ0ktNjUzMyBSZWdpc3Rlci1MZXZlbCBQcm9ncmFtbWVyIE1hbnVhbAorCTM0MTMzMEEucGRmCURBUS1ESU8gVGVjaG5pY2FsIFJlZmVyZW5jZSBNYW51YWwKKworICovCisKKyNkZWZpbmUgVVNFX0RNQQorLy8jZGVmaW5lIERFQlVHIDEKKy8vI2RlZmluZSBERUJVR19GTEFHUworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJtaXRlLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisjdW5kZWYgRFBSSU5USworI2lmZGVmIERFQlVHCisjZGVmaW5lIERQUklOVEsoZm9ybWF0LCBhcmdzLi4uKQlwcmludGsoZm9ybWF0LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05BVElOU1QJMHgxMDkzCisKKyNkZWZpbmUgUENJX0RJT19TSVpFIDQwOTYKKyNkZWZpbmUgUENJX01JVEVfU0laRSA0MDk2CisKKy8qIGRlZmluZXMgZm9yIHRoZSBQQ0ktRElPLTk2ICovCisKKyNkZWZpbmUgTklESU9fODI1NV9CQVNFKHgpCSgoeCkqNCkKKyNkZWZpbmUgTklESU9fQSAwCisjZGVmaW5lIE5JRElPX0IgNAorI2RlZmluZSBOSURJT19DIDgKKyNkZWZpbmUgTklESU9fRCAxMgorCisvKiBkZWZpbmVzIGZvciB0aGUgUENJLURJTy0zMkhTICovCisKKyNkZWZpbmUgV2luZG93X0FkZHJlc3MJCQk0CS8qIFcgKi8KKyNkZWZpbmUgSW50ZXJydXB0X0FuZF9XaW5kb3dfU3RhdHVzCTQJLyogUiAqLworI2RlZmluZSBJbnRTdGF0dXMxCQkJCSgxPDwwKQorI2RlZmluZSBJbnRTdGF0dXMyCQkJCSgxPDwxKQorI2RlZmluZSBXaW5kb3dBZGRyZXNzU3RhdHVzX21hc2sJCTB4N2MKKworI2RlZmluZSBNYXN0ZXJfRE1BX0FuZF9JbnRlcnJ1cHRfQ29udHJvbCA1CS8qIFcgKi8KKyNkZWZpbmUgSW50ZXJydXB0TGluZSh4KQkJCSgoeCkmMykKKyNkZWZpbmUgT3BlbkludAkJCQkoMTw8MikKKyNkZWZpbmUgR3JvdXBfU3RhdHVzCQkJNQkvKiBSICovCisjZGVmaW5lIERhdGFMZWZ0CQkJCSgxPDwwKQorI2RlZmluZSBSZXEJCQkJCSgxPDwyKQorI2RlZmluZSBTdG9wVHJpZwkJCQkoMTw8MykKKworI2RlZmluZSBHcm91cF8xX0ZsYWdzCQkJNgkvKiBSICovCisjZGVmaW5lIEdyb3VwXzJfRmxhZ3MJCQk3CS8qIFIgKi8KKyNkZWZpbmUgVHJhbnNmZXJSZWFkeQkJCQkoMTw8MCkKKyNkZWZpbmUgQ291bnRFeHBpcmVkCQkJCSgxPDwxKQorI2RlZmluZSBXYWl0ZWQJCQkJKDE8PDUpCisjZGVmaW5lIFByaW1hcnlUQwkJCQkoMTw8NikKKyNkZWZpbmUgU2Vjb25kYXJ5VEMJCQkJKDE8PDcpCisgIC8vI2RlZmluZSBTZXJpYWxSb3NlCisgIC8vI2RlZmluZSBSZXFSb3NlCisgIC8vI2RlZmluZSBQYXVzZWQKKworI2RlZmluZSBHcm91cF8xX0ZpcnN0X0NsZWFyCQk2CS8qIFcgKi8KKyNkZWZpbmUgR3JvdXBfMl9GaXJzdF9DbGVhcgkJNwkvKiBXICovCisjZGVmaW5lIENsZWFyV2FpdGVkCQkJCSgxPDwzKQorI2RlZmluZSBDbGVhclByaW1hcnlUQwkJCSgxPDw0KQorI2RlZmluZSBDbGVhclNlY29uZGFyeVRDCQkJKDE8PDUpCisjZGVmaW5lIERNQVJlc2V0CQkJCSgxPDw2KQorI2RlZmluZSBGSUZPUmVzZXQJCQkJKDE8PDcpCisjZGVmaW5lIENsZWFyQWxsCQkJCTB4ZjgKKworI2RlZmluZSBHcm91cF8xX0ZJRk8JCQk4CS8qIFcgKi8KKyNkZWZpbmUgR3JvdXBfMl9GSUZPCQkJMTIJLyogVyAqLworCisjZGVmaW5lIFRyYW5zZmVyX0NvdW50CQkJMjAKKyNkZWZpbmUgQ2hpcF9JRF9ECQkJMjQKKyNkZWZpbmUgQ2hpcF9JRF9JCQkJMjUKKyNkZWZpbmUgQ2hpcF9JRF9PCQkJMjYKKyNkZWZpbmUgQ2hpcF9WZXJzaW9uCQkJMjcKKyNkZWZpbmUgUG9ydF9JTyh4KQkJCSgyOCsoeCkpCisjZGVmaW5lIFBvcnRfUGluX0RpcmVjdGlvbnMoeCkJCSgzMisoeCkpCisjZGVmaW5lIFBvcnRfUGluX01hc2soeCkJCSgzNisoeCkpCisjZGVmaW5lIFBvcnRfUGluX1BvbGFyaXRpZXMoeCkJCSg0MCsoeCkpCisKKyNkZWZpbmUgTWFzdGVyX0Nsb2NrX1JvdXRpbmcJCTQ1CisjZGVmaW5lIFJUU0lDbG9ja2luZyh4KQkJCSgoKHgpJjMpPDw0KQorCisjZGVmaW5lIEdyb3VwXzFfU2Vjb25kX0NsZWFyCQk0NgkvKiBXICovCisjZGVmaW5lIEdyb3VwXzJfU2Vjb25kX0NsZWFyCQk0NwkvKiBXICovCisjZGVmaW5lIENsZWFyRXhwaXJlZAkJCQkoMTw8MCkKKworI2RlZmluZSBQb3J0X1BhdHRlcm4oeCkJCQkoNDgrKHgpKQorCisjZGVmaW5lIERhdGFfUGF0aAkJCTY0CisjZGVmaW5lIEZJRk9FbmFibGVBCQkoMTw8MCkKKyNkZWZpbmUgRklGT0VuYWJsZUIJCSgxPDwxKQorI2RlZmluZSBGSUZPRW5hYmxlQwkJKDE8PDIpCisjZGVmaW5lIEZJRk9FbmFibGVECQkoMTw8MykKKyNkZWZpbmUgRnVubmVsaW5nKHgpCQkoKCh4KSYzKTw8NCkKKyNkZWZpbmUgR3JvdXBEaXJlY3Rpb24JKDE8PDcpCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMQkJNjUKKyNkZWZpbmUgT3BNb2RlCQkJCVByb3RvY29sX1JlZ2lzdGVyXzEKKyNkZWZpbmUgUnVuTW9kZSh4KQkJKCh4KSY3KQorI2RlZmluZSBOdW1iZXJlZAkJKDE8PDMpCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMgkJNjYKKyNkZWZpbmUgQ2xvY2tSZWcJCQlQcm90b2NvbF9SZWdpc3Rlcl8yCisjZGVmaW5lIENsb2NrTGluZSh4KQkJKCgoeCkmMyk8PDUpCisjZGVmaW5lIEludmVydFN0b3BUcmlnCSgxPDw3KQorI2RlZmluZSBEYXRhTGF0Y2hpbmcoeCkgICAgICAgKCgoeCkmMyk8PDUpCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMwkJNjcKKyNkZWZpbmUgU2VxdWVuY2UJCQlQcm90b2NvbF9SZWdpc3Rlcl8zCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMTQJCTY4CS8qIDE2IGJpdCAqLworI2RlZmluZSBDbG9ja1NwZWVkCQkJUHJvdG9jb2xfUmVnaXN0ZXJfMTQKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl80CQk3MAorI2RlZmluZSBSZXFSZWcJCQkJUHJvdG9jb2xfUmVnaXN0ZXJfNAorI2RlZmluZSBSZXFDb25kaXRpb25pbmcoeCkJKCgoeCkmNyk8PDMpCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfNQkJNzEKKyNkZWZpbmUgQmxvY2tNb2RlCQkJUHJvdG9jb2xfUmVnaXN0ZXJfNQorCisjZGVmaW5lIEZJRk9fQ29udHJvbAkJCTcyCisjZGVmaW5lIFJlYWR5TGV2ZWwoeCkJCSgoeCkmNykKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl82CQk3MworI2RlZmluZSBMaW5lUG9sYXJpdGllcwkJCVByb3RvY29sX1JlZ2lzdGVyXzYKKyNkZWZpbmUgSW52ZXJ0QWNrCQkoMTw8MCkKKyNkZWZpbmUgSW52ZXJ0UmVxCQkoMTw8MSkKKyNkZWZpbmUgSW52ZXJ0Q2xvY2sJCSgxPDwyKQorI2RlZmluZSBJbnZlcnRTZXJpYWwJCSgxPDwzKQorI2RlZmluZSBPcGVuQWNrCQkoMTw8NCkKKyNkZWZpbmUgT3BlbkNsb2NrCQkoMTw8NSkKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl83CQk3NAorI2RlZmluZSBBY2tTZXIJCQkJUHJvdG9jb2xfUmVnaXN0ZXJfNworI2RlZmluZSBBY2tMaW5lKHgpCQkoKCh4KSYzKTw8MikKKyNkZWZpbmUgRXhjaGFuZ2VQaW5zCQkoMTw8NykKKworI2RlZmluZSBJbnRlcnJ1cHRfQ29udHJvbAkJNzUKKyAgLyogYml0cyBzYW1lIGFzIGZsYWdzICovCisKKyNkZWZpbmUgRE1BX0xpbmVfQ29udHJvbF9Hcm91cDEJCTc2CisjZGVmaW5lIERNQV9MaW5lX0NvbnRyb2xfR3JvdXAyCQkxMDgKKy8vIGNoYW5uZWwgemVybyBpcyBub25lCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByaW1hcnlfRE1BQ2hhbm5lbF9iaXRzKHVuc2lnbmVkIGNoYW5uZWwpCit7CisJcmV0dXJuIGNoYW5uZWwgJiAweDM7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNlY29uZGFyeV9ETUFDaGFubmVsX2JpdHModW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gKGNoYW5uZWwgPDwgMikgJiAweGM7Cit9CisKKyNkZWZpbmUgVHJhbnNmZXJfU2l6ZV9Db250cm9sCQk3NworI2RlZmluZSBUcmFuc2ZlcldpZHRoKHgpCSgoeCkmMykKKyNkZWZpbmUgVHJhbnNmZXJMZW5ndGgoeCkJKCgoeCkmMyk8PDMpCisjZGVmaW5lIFJlcXVpcmVSTGV2ZWwJCSgxPDw1KQorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzE1CQk3OQorI2RlZmluZSBEQVFPcHRpb25zCQkJUHJvdG9jb2xfUmVnaXN0ZXJfMTUKKyNkZWZpbmUgU3RhcnRTb3VyY2UoeCkJCQkoKHgpJjB4MykKKyNkZWZpbmUgSW52ZXJ0U3RhcnQJCQkJKDE8PDIpCisjZGVmaW5lIFN0b3BTb3VyY2UoeCkJCQkJKCgoeCkmMHgzKTw8MykKKyNkZWZpbmUgUmVxU3RhcnQJCQkJKDE8PDYpCisjZGVmaW5lIFByZVN0YXJ0CQkJCSgxPDw3KQorCisjZGVmaW5lIFBhdHRlcm5fRGV0ZWN0aW9uCQk4MQorI2RlZmluZSBEZXRlY3Rpb25NZXRob2QJCQkoMTw8MCkKKyNkZWZpbmUgSW52ZXJ0TWF0Y2gJCQkJKDE8PDEpCisjZGVmaW5lIElFX1BhdHRlcm5fRGV0ZWN0aW9uCQkJKDE8PDIpCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfOQkJODIKKyNkZWZpbmUgUmVxRGVsYXkJCQlQcm90b2NvbF9SZWdpc3Rlcl85CisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMTAJCTgzCisjZGVmaW5lIFJlcU5vdERlbGF5CQkJUHJvdG9jb2xfUmVnaXN0ZXJfMTAKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xMQkJODQKKyNkZWZpbmUgQWNrRGVsYXkJCQlQcm90b2NvbF9SZWdpc3Rlcl8xMQorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzEyCQk4NQorI2RlZmluZSBBY2tOb3REZWxheQkJCVByb3RvY29sX1JlZ2lzdGVyXzEyCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMTMJCTg2CisjZGVmaW5lIERhdGExRGVsYXkJCQlQcm90b2NvbF9SZWdpc3Rlcl8xMworCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzgJCTg4CS8qIDMyIGJpdCAqLworI2RlZmluZSBTdGFydERlbGF5CQkJUHJvdG9jb2xfUmVnaXN0ZXJfOAorCitlbnVtIHBjaV82NTM0X2Zpcm13YXJlX3JlZ2lzdGVycyB7CS8qIDE2IGJpdCAqLworCUZpcm13YXJlX0NvbnRyb2xfUmVnaXN0ZXIgPSAweDEwMCwKKwlGaXJtd2FyZV9TdGF0dXNfUmVnaXN0ZXIgPSAweDEwNCwKKwlGaXJtd2FyZV9EYXRhX1JlZ2lzdGVyID0gMHgxMDgsCisJRmlybXdhcmVfTWFza19SZWdpc3RlciA9IDB4MTBjLAorCUZpcm13YXJlX0RlYnVnX1JlZ2lzdGVyID0gMHgxMTAsCit9OworLyogbWFpbiBmcGdhIHJlZ2lzdGVycyAoMzIgYml0KSovCitlbnVtIHBjaV82NTM0X2ZwZ2FfcmVnaXN0ZXJzIHsKKwlGUEdBX0NvbnRyb2wxX1JlZ2lzdGVyID0gMHgyMDAsCisJRlBHQV9Db250cm9sMl9SZWdpc3RlciA9IDB4MjA0LAorCUZQR0FfSXJxX01hc2tfUmVnaXN0ZXIgPSAweDIwOCwKKwlGUEdBX1N0YXR1c19SZWdpc3RlciA9IDB4MjBjLAorCUZQR0FfU2lnbmF0dXJlX1JlZ2lzdGVyID0gMHgyMTAsCisJRlBHQV9TQ0FMU19Db3VudGVyX1JlZ2lzdGVyID0gMHgyODAsCS8qd3JpdGUtY2xlYXIgKi8KKwlGUEdBX1NDQU1TX0NvdW50ZXJfUmVnaXN0ZXIgPSAweDI4NCwJLyp3cml0ZS1jbGVhciAqLworCUZQR0FfU0NCTFNfQ291bnRlcl9SZWdpc3RlciA9IDB4Mjg4LAkvKndyaXRlLWNsZWFyICovCisJRlBHQV9TQ0JNU19Db3VudGVyX1JlZ2lzdGVyID0gMHgyOGMsCS8qd3JpdGUtY2xlYXIgKi8KKwlGUEdBX1RlbXBfQ29udHJvbF9SZWdpc3RlciA9IDB4MmEwLAorCUZQR0FfREFSX1JlZ2lzdGVyID0gMHgyYTgsCisJRlBHQV9FTENfUmVhZF9SZWdpc3RlciA9IDB4MmI4LAorCUZQR0FfRUxDX1dyaXRlX1JlZ2lzdGVyID0gMHgyYmMsCit9OworZW51bSBGUEdBX0NvbnRyb2xfQml0cyB7CisJRlBHQV9FbmFibGVfQml0ID0gMHg4MDAwLAorfTsKKworI2RlZmluZSBUSU1FUl9CQVNFIDUwCQkvKiBuYW5vc2Vjb25kcyAqLworCisjaWZkZWYgVVNFX0RNQQorI2RlZmluZSBJbnRFbiAoQ291bnRFeHBpcmVkfFdhaXRlZHxQcmltYXJ5VEN8U2Vjb25kYXJ5VEMpCisjZWxzZQorI2RlZmluZSBJbnRFbiAoVHJhbnNmZXJSZWFkeXxDb3VudEV4cGlyZWR8V2FpdGVkfFByaW1hcnlUQ3xTZWNvbmRhcnlUQykKKyNlbmRpZgorCitzdGF0aWMgaW50IG5pZGlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG5pZGlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IG5pX3BjaWRpb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNpZGlvID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX3BjaWRpbyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bmlkaW9fYXR0YWNoLAorICAgICAgZGV0YWNoOm5pZGlvX2RldGFjaCwKK307CisKK3N0cnVjdCBuaWRpb19ib2FyZCB7CisKKwlpbnQgZGV2X2lkOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG5fODI1NTsKKwl1bnNpZ25lZCBpbnQgaXNfZGlvZGFxOjE7CisJdW5zaWduZWQgaW50IHVzZXNfZmlybXdhcmU6MTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmlkaW9fYm9hcmQgbmlkaW9fYm9hcmRzW10gPSB7CisJeworCSAgICAgIGRldl9pZDoJMHgxMTUwLAorCSAgICAgIG5hbWU6CSJwY2ktZGlvLTMyaHMiLAorCSAgICAgIG5fODI1NToJMCwKKwkgICAgICBpc19kaW9kYXE6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEzMjAsCisJICAgICAgbmFtZToJInB4aS02NTMzIiwKKwkgICAgICBuXzgyNTU6CTAsCisJICAgICAgaXNfZGlvZGFxOjEsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgxMmIwLAorCSAgICAgIG5hbWU6CSJwY2ktNjUzNCIsCisJICAgICAgbl84MjU1OgkwLAorCSAgICAgIGlzX2Rpb2RhcToxLAorCSAgICAgIHVzZXNfZmlybXdhcmU6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDAxNjAsCisJICAgICAgbmFtZToJInBjaS1kaW8tOTYiLAorCSAgICAgIG5fODI1NToJNCwKKwkgICAgICBpc19kaW9kYXE6MCwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDE2MzAsCisJICAgICAgbmFtZToJInBjaS1kaW8tOTZiIiwKKwkgICAgICBuXzgyNTU6CTQsCisJICAgICAgaXNfZGlvZGFxOjAsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgxM2MwLAorCSAgICAgIG5hbWU6CSJweGktNjUwOCIsCisJICAgICAgbl84MjU1Ogk0LAorCSAgICAgIGlzX2Rpb2RhcTowLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MDQwMCwKKwkgICAgICBuYW1lOgkicGNpLTY1MDMiLAorCSAgICAgIG5fODI1NToJMSwKKwkgICAgICBpc19kaW9kYXE6MCwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEyNTAsCisJICAgICAgbmFtZToJInBjaS02NTAzYiIsCisJICAgICAgbl84MjU1OgkxLAorCSAgICAgIGlzX2Rpb2RhcTowLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTdkMCwKKwkgICAgICBuYW1lOgkicGNpLTY1MDN4IiwKKwkgICAgICBuXzgyNTU6CTEsCisJICAgICAgaXNfZGlvZGFxOjAsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgxODAwLAorCSAgICAgIG5hbWU6CSJweGktNjUwMyIsCisJICAgICAgbl84MjU1OgkxLAorCSAgICAgIGlzX2Rpb2RhcTowLAorCQl9LAorfTsKKworI2RlZmluZSBuX25pZGlvX2JvYXJkcyAoc2l6ZW9mKG5pZGlvX2JvYXJkcykvc2l6ZW9mKG5pZGlvX2JvYXJkc1swXSkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgbmlkaW9fYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5pX3BjaWRpb19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTE1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEyYjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MDE2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxNjMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEzYzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MDQwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMjUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE3ZDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTgwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmlfcGNpZGlvX3BjaV90YWJsZSk7CisKK3N0cnVjdCBuaWRpbzk2X3ByaXZhdGUgeworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgYm9hcmR0eXBlOworCWludCBkaW87CisJdW5zaWduZWQgc2hvcnQgT3BNb2RlQml0czsKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICpkaV9taXRlX2NoYW47CisJc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqZGlfbWl0ZV9yaW5nOworCXNwaW5sb2NrX3QgbWl0ZV9jaGFubmVsX2xvY2s7Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IG5pZGlvOTZfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBuaV9wY2lkaW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSk7CitzdGF0aWMgaW50IG5pZGlvX2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CitzdGF0aWMgaW50IG5pX3BjaWRpb19uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKTsKK3N0YXRpYyBpbnQgc2V0dXBfbWl0ZV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKKyNpZmRlZiBERUJVR19GTEFHUworc3RhdGljIHZvaWQgbmlfcGNpZGlvX3ByaW50X2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncyk7CitzdGF0aWMgdm9pZCBuaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHVuc2lnbmVkIGludCBzdGF0dXMpOworI2Vsc2UKKyNkZWZpbmUgbmlfcGNpZGlvX3ByaW50X2ZsYWdzKHgpCisjZGVmaW5lIG5pX3BjaWRpb19wcmludF9zdGF0dXMoeCkKKyNlbmRpZgorCitzdGF0aWMgaW50IG5pX3BjaWRpb19yZXF1ZXN0X2RpX21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCUJVR19PTihkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCWRldnByaXYtPmRpX21pdGVfY2hhbiA9CisJCW1pdGVfcmVxdWVzdF9jaGFubmVsX2luX3JhbmdlKGRldnByaXYtPm1pdGUsCisJCWRldnByaXYtPmRpX21pdGVfcmluZywgMSwgMik7CisJaWYgKGRldnByaXYtPmRpX21pdGVfY2hhbiA9PSBOVUxMKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywKKwkJCWZsYWdzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwgImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXdyaXRlYihwcmltYXJ5X0RNQUNoYW5uZWxfYml0cyhkZXZwcml2LT5kaV9taXRlX2NoYW4tPmNoYW5uZWwpIHwKKwkJc2Vjb25kYXJ5X0RNQUNoYW5uZWxfYml0cyhkZXZwcml2LT5kaV9taXRlX2NoYW4tPmNoYW5uZWwpLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERNQV9MaW5lX0NvbnRyb2xfR3JvdXAxKTsKKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmlfcGNpZGlvX3JlbGVhc2VfZGlfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmRpX21pdGVfY2hhbikgeworCQltaXRlX2RtYV9kaXNhcm0oZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuKTsKKwkJbWl0ZV9kbWFfcmVzZXQoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuKTsKKwkJbWl0ZV9yZWxlYXNlX2NoYW5uZWwoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuKTsKKwkJZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuID0gTlVMTDsKKwkJd3JpdGViKHByaW1hcnlfRE1BQ2hhbm5lbF9iaXRzKDApIHwKKwkJCXNlY29uZGFyeV9ETUFDaGFubmVsX2JpdHMoMCksCisJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERNQV9MaW5lX0NvbnRyb2xfR3JvdXAxKTsKKwkJbW1pb3diKCk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG5pZGlvOTZfODI1NV9jYihpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCWlmIChkaXIpIHsKKwkJd3JpdGViKGRhdGEsICh2b2lkICopKGlvYmFzZSArIHBvcnQpKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHJlYWRiKCh2b2lkICopKGlvYmFzZSArIHBvcnQpKTsKKwl9Cit9CisKK3ZvaWQgbmlfcGNpZGlvX2V2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKHMtPmFzeW5jLT4KKwkJZXZlbnRzICYgKENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfT1ZFUkZMT1cpKQorCXsKKwkJbmlfcGNpZGlvX2NhbmNlbChkZXYsIHMpOworCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG5pZGlvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlID0gZGV2cHJpdi0+bWl0ZTsKKworCS8vaW50IGksIGo7CisJbG9uZyBpbnQgQXV4RGF0YSA9IDA7CisJc2hvcnQgZGF0YTEgPSAwOworCXNob3J0IGRhdGEyID0gMDsKKwlpbnQgZmxhZ3M7CisJaW50IHN0YXR1czsKKwlpbnQgd29yayA9IDA7CisJdW5zaWduZWQgaW50IG1fc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCS8vaW50ZXJydXBjaW9ucyBwYXJhc2l0ZXMKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKSB7CisJCS8vIGFzc3VtZSBpdCdzIGZyb20gYW5vdGhlciBjYXJkCisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlzdGF0dXMgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCUludGVycnVwdF9BbmRfV2luZG93X1N0YXR1cyk7CisJZmxhZ3MgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRmxhZ3MpOworCisJRFBSSU5USygibmlfcGNpZGlvX2ludGVycnVwdDogc3RhdHVzPTB4JTAyeCxmbGFncz0weCUwMnhcbiIsCisJCXN0YXR1cywgZmxhZ3MpOworCW5pX3BjaWRpb19wcmludF9mbGFncyhmbGFncyk7CisJbmlfcGNpZGlvX3ByaW50X3N0YXR1cyhzdGF0dXMpOworCisJLy9wcmludGsoImJ1ZlswXT0lMDh4XG4iLCoodW5zaWduZWQgaW50ICopYXN5bmMtPnByZWFsbG9jX2J1Zik7CisJLy9wcmludGsoImJ1Zls0MDk2XT0lMDh4XG4iLCoodW5zaWduZWQgaW50ICopKGFzeW5jLT5wcmVhbGxvY19idWYrNDA5NikpOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgaXJxX2ZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuKQorCQltX3N0YXR1cyA9IG1pdGVfZ2V0X3N0YXR1cyhkZXZwcml2LT5kaV9taXRlX2NoYW4pOworI2lmZGVmIE1JVEVfREVCVUcKKwltaXRlX3ByaW50X2Noc3IobV9zdGF0dXMpOworI2VuZGlmCisJLy9wcmludGsoIm1pdGVfYnl0ZXNfdHJhbnNmZXJyZWQ6ICVkXG4iLG1pdGVfYnl0ZXNfdHJhbnNmZXJyZWQobWl0ZSxESV9ETUFfQ0hBTikpOworCS8vbWl0ZV9kdW1wX3JlZ3MobWl0ZSk7CisJaWYgKG1fc3RhdHVzICYgQ0hTUl9JTlQpIHsKKwkJaWYgKG1fc3RhdHVzICYgQ0hTUl9MSU5LQykgeworCQkJd3JpdGVsKENIT1JfQ0xSTEMsCisJCQkJbWl0ZS0+bWl0ZV9pb19hZGRyICsKKwkJCQlNSVRFX0NIT1IoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuLT5jaGFubmVsKSk7CisJCQltaXRlX3N5bmNfaW5wdXRfZG1hKGRldnByaXYtPmRpX21pdGVfY2hhbiwgcy0+YXN5bmMpOworCQkJLyogWFhYIG5lZWQgdG8gYnl0ZXN3YXAgKi8KKwkJfQorCQlpZiAobV9zdGF0dXMgJiB+KENIU1JfSU5UIHwgQ0hTUl9MSU5LQyB8IENIU1JfRE9ORSB8IENIU1JfRFJEWSB8CisJCQkJQ0hTUl9EUlExIHwgQ0hTUl9NUkRZKSkgeworCQkJRFBSSU5USygidW5rbm93biBtaXRlIGludGVycnVwdCwgZGlzYWJsaW5nIElSUVxuIik7CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJCX0KKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBpcnFfZmxhZ3MpOworCisJd2hpbGUgKHN0YXR1cyAmIERhdGFMZWZ0KSB7CisJCXdvcmsrKzsKKwkJaWYgKHdvcmsgPiAyMCkgeworCQkJRFBSSU5USygidG9vIG11Y2ggd29yayBpbiBpbnRlcnJ1cHRcbiIpOworCQkJd3JpdGViKDB4MDAsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCU1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZmxhZ3MgJj0gSW50RW47CisKKwkJaWYgKGZsYWdzICYgVHJhbnNmZXJSZWFkeSkgeworCQkJLy9EUFJJTlRLKCJUcmFuc2ZlclJlYWR5XG4iKTsKKwkJCXdoaWxlIChmbGFncyAmIFRyYW5zZmVyUmVhZHkpIHsKKwkJCQl3b3JrKys7CisJCQkJaWYgKHdvcmsgPiAxMDApIHsKKwkJCQkJRFBSSU5USygidG9vIG11Y2ggd29yayBpbiBpbnRlcnJ1cHRcbiIpOworCQkJCQl3cml0ZWIoMHgwMCwKKwkJCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQkJCU1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCUF1eERhdGEgPQorCQkJCQlyZWFkbChkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJCUdyb3VwXzFfRklGTyk7CisJCQkJZGF0YTEgPSBBdXhEYXRhICYgMHhmZmZmOworCQkJCWRhdGEyID0gKEF1eERhdGEgJiAweGZmZmYwMDAwKSA+PiAxNjsKKwkJCQljb21lZGlfYnVmX3B1dChhc3luYywgZGF0YTEpOworCQkJCWNvbWVkaV9idWZfcHV0KGFzeW5jLCBkYXRhMik7CisJCQkJLy9EUFJJTlRLKCJyZWFkOiVkLCAlZFxuIixkYXRhMSxkYXRhMik7CisJCQkJZmxhZ3MgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJCUdyb3VwXzFfRmxhZ3MpOworCQkJfQorCQkJLy9EUFJJTlRLKCJidWZfaW50X2NvdW50OiAlZFxuIixhc3luYy0+YnVmX2ludF9jb3VudCk7CisJCQkvL0RQUklOVEsoIjEpIEludEVuPSVkLGZsYWdzPSVkLHN0YXR1cz0lZFxuIixJbnRFbixmbGFncyxzdGF0dXMpOworCQkJLy9uaV9wY2lkaW9fcHJpbnRfZmxhZ3MoZmxhZ3MpOworCQkJLy9uaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHN0YXR1cyk7CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKwkJfQorCisJCWlmIChmbGFncyAmIENvdW50RXhwaXJlZCkgeworCQkJRFBSSU5USygiQ291bnRFeHBpcmVkXG4iKTsKKwkJCXdyaXRlYihDbGVhckV4cGlyZWQsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUdyb3VwXzFfU2Vjb25kX0NsZWFyKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKworCQkJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgT3BNb2RlKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGZsYWdzICYgV2FpdGVkKSB7CisJCQlEUFJJTlRLKCJXYWl0ZWRcbiIpOworCQkJd3JpdGViKENsZWFyV2FpdGVkLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlHcm91cF8xX0ZpcnN0X0NsZWFyKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGZsYWdzICYgUHJpbWFyeVRDKSB7CisJCQlEUFJJTlRLKCJQcmltYXJ5VENcbiIpOworCQkJd3JpdGViKENsZWFyUHJpbWFyeVRDLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlHcm91cF8xX0ZpcnN0X0NsZWFyKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfSBlbHNlIGlmIChmbGFncyAmIFNlY29uZGFyeVRDKSB7CisJCQlEUFJJTlRLKCJTZWNvbmRhcnlUQ1xuIik7CisJCQl3cml0ZWIoQ2xlYXJTZWNvbmRhcnlUQywKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJR3JvdXBfMV9GaXJzdF9DbGVhcik7CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCX0KKyNpZiAwCisJCWVsc2UgeworCQkJcHJpbnRrKCJuaV9wY2lkaW86IHVua25vd24gaW50ZXJydXB0XG4iKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJCXdyaXRlYigweDAwLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlNYXN0ZXJfRE1BX0FuZF9JbnRlcnJ1cHRfQ29udHJvbCk7CisJCX0KKyNlbmRpZgorCQlmbGFncyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfMV9GbGFncyk7CisJCXN0YXR1cyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCUludGVycnVwdF9BbmRfV2luZG93X1N0YXR1cyk7CisJCS8vRFBSSU5USygibG9vcCBlbmQ6IEludEVuPTB4JTAyeCxmbGFncz0weCUwMngsc3RhdHVzPTB4JTAyeFxuIiwKKwkJLy8gICAgICBJbnRFbixmbGFncyxzdGF0dXMpOworCQkvL25pX3BjaWRpb19wcmludF9mbGFncyhmbGFncyk7CisJCS8vbmlfcGNpZGlvX3ByaW50X3N0YXR1cyhzdGF0dXMpOworCX0KKworICAgICAgb3V0OgorCW5pX3BjaWRpb19ldmVudChkZXYsIHMpOworI2lmIDAKKwlpZiAoIXRhZykgeworCQl3cml0ZWIoMHgwMywKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCU1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBERUJVR19GTEFHUworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZsYWdzX3N0cmluZ3NbXSA9IHsKKwkiVHJhbnNmZXJSZWFkeSIsICJDb3VudEV4cGlyZWQiLCAiMiIsICIzIiwKKwkiNCIsICJXYWl0ZWQiLCAiUHJpbWFyeVRDIiwgIlNlY29uZGFyeVRDIiwKK307CitzdGF0aWMgdm9pZCBuaV9wY2lkaW9fcHJpbnRfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCBpOworCisJcHJpbnRrKCJncm91cF8xX2ZsYWdzOiIpOworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChmbGFncyAmICgxIDw8IGkpKSB7CisJCQlwcmludGsoIiAlcyIsIGZsYWdzX3N0cmluZ3NbaV0pOworCQl9CisJfQorCXByaW50aygiXG4iKTsKK30KK3N0YXRpYyBjaGFyICpzdGF0dXNfc3RyaW5nc1tdID0geworCSJEYXRhTGVmdDEiLCAiUmVzZXJ2ZWQxIiwgIlJlcTEiLCAiU3RvcFRyaWcxIiwKKwkiRGF0YUxlZnQyIiwgIlJlc2VydmVkMiIsICJSZXEyIiwgIlN0b3BUcmlnMiIsCit9Oworc3RhdGljIHZvaWQgbmlfcGNpZGlvX3ByaW50X3N0YXR1cyh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisKKwlwcmludGsoImdyb3VwX3N0YXR1czoiKTsKKwlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQlpZiAoZmxhZ3MgJiAoMSA8PCBpKSkgeworCQkJcHJpbnRrKCIgJXMiLCBzdGF0dXNfc3RyaW5nc1tpXSk7CisJCX0KKwl9CisJcHJpbnRrKCJcbiIpOworfQorI2VuZGlmCisKKyNpZmRlZiB1bnVzZWQKK3N0YXRpYyB2b2lkIGRlYnVnX2ludChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgYSwgYjsKKwlzdGF0aWMgaW50IG5faW50ID0gMDsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCWEgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwX1N0YXR1cyk7CisJYiA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfMV9GbGFncyk7CisKKwlpZiAobl9pbnQgPCAxMCkgeworCQlEUFJJTlRLKCJzdGF0dXMgMHglMDJ4IGZsYWdzIDB4JTAyeCB0aW1lICUwNmRcbiIsIGEsIGIsCisJCQkoaW50KXR2LnR2X3VzZWMpOworCX0KKworCXdoaWxlIChiICYgMSkgeworCQl3cml0ZXcoMHhmZiwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZJRk8pOworCQliID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZsYWdzKTsKKwl9CisKKwliID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZsYWdzKTsKKworCWlmIChuX2ludCA8IDEwKSB7CisJCURQUklOVEsoIm5ldyBzdGF0dXMgMHglMDJ4XG4iLCBiKTsKKwkJbl9pbnQrKzsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIGludCBuaV9wY2lkaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+KDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkocy0+aW9fYml0cyAmICgxIDw8IENSX0NIQU4oaW5zbi0+CisJCQkJCWNoYW5zcGVjKSkpID8gQ09NRURJX09VVFBVVCA6CisJCQlDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJd3JpdGVsKHMtPmlvX2JpdHMsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9QaW5fRGlyZWN0aW9ucygwKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9wY2lkaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJd3JpdGVsKHMtPnN0YXRlLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfSU8oMCkpOworCX0KKwlkYXRhWzFdID0gcmVhZGwoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X0lPKDApKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfSU5UOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19JTlQpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCS8qIHNhbWUgZm9yIGJvdGggVFJJR19JTlQgYW5kIFRSSUdfTk9XICovCisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRUQJKFRJTUVSX0JBU0UpCS8qIGluIG5hbm9zZWNvbmRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgTUFYX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwkJLyogbm8gbWludW11bSBzcGVlZCAqLworCX0gZWxzZSB7CisJCS8qIFRSSUdfRVhUICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJLyogbm8gbGltaXQgKi8KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQluaV9wY2lkaW9fbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9wY2lkaW9fbnNfdG9fdGltZXIoaW50ICpuYW5vc2VjLCBpbnQgcm91bmRfbW9kZSkKK3sKKwlpbnQgZGl2aWRlciwgYmFzZTsKKworCWJhc2UgPSBUSU1FUl9CQVNFOworCisJc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJZGVmYXVsdDoKKwkJZGl2aWRlciA9ICgqbmFub3NlYyArIGJhc2UgLyAyKSAvIGJhc2U7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQlkaXZpZGVyID0gKCpuYW5vc2VjKSAvIGJhc2U7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJZGl2aWRlciA9ICgqbmFub3NlYyArIGJhc2UgLSAxKSAvIGJhc2U7CisJCWJyZWFrOworCX0KKworCSpuYW5vc2VjID0gYmFzZSAqIGRpdmlkZXI7CisJcmV0dXJuIGRpdmlkZXI7Cit9CisKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCS8qIFhYWCBjb25maWd1cmUgcG9ydHMgZm9yIGlucHV0ICovCisJd3JpdGVsKDB4MDAwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X1Bpbl9EaXJlY3Rpb25zKDApKTsKKworCWlmICgxKSB7CisJCS8qIGVuYWJsZSBmaWZvcyBBIEIgQyBEICovCisJCXdyaXRlYigweDBmLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERhdGFfUGF0aCk7CisKKwkJLyogc2V0IHRyYW5zZmVyIHdpZHRoIGEgMzIgYml0cyAqLworCQl3cml0ZWIoVHJhbnNmZXJXaWR0aCgwKSB8IFRyYW5zZmVyTGVuZ3RoKDApLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBUcmFuc2Zlcl9TaXplX0NvbnRyb2wpOworCX0gZWxzZSB7CisJCXdyaXRlYigweDAzLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERhdGFfUGF0aCk7CisJCXdyaXRlYihUcmFuc2ZlcldpZHRoKDMpIHwgVHJhbnNmZXJMZW5ndGgoMCksCisJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFRyYW5zZmVyX1NpemVfQ29udHJvbCk7CisJfQorCisJLyogcHJvdG9jb2wgY29uZmlndXJhdGlvbiAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyogcGFnZSA0LTUsICJpbnB1dCB3aXRoIGludGVybmFsIFJFUXMiICovCisJCXdyaXRlYigwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE9wTW9kZSk7CisJCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsb2NrUmVnKTsKKwkJd3JpdGViKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgU2VxdWVuY2UpOworCQl3cml0ZWIoMHgwNCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSZXFSZWcpOworCQl3cml0ZWIoNCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBCbG9ja01vZGUpOworCQl3cml0ZWIoMywgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBMaW5lUG9sYXJpdGllcyk7CisJCXdyaXRlYigweGMwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFja1Nlcik7CisJCXdyaXRlbChuaV9wY2lkaW9fbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQkJVFJJR19ST1VORF9ORUFSRVNUKSwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgU3RhcnREZWxheSk7CisJCXdyaXRlYigxLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJlcURlbGF5KTsKKwkJd3JpdGViKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUmVxTm90RGVsYXkpOworCQl3cml0ZWIoMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBY2tEZWxheSk7CisJCXdyaXRlYigweDBiLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFja05vdERlbGF5KTsKKwkJd3JpdGViKDB4MDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRGF0YTFEZWxheSk7CisJCS8qIG1hbnVhbCwgcGFnZSA0LTU6IENsb2NrU3BlZWQgY29tbWVudCBpcyBpbmNvcnJlY3RseSBsaXN0ZWQKKwkJICogb24gREFRT3B0aW9ucyAqLworCQl3cml0ZXcoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbG9ja1NwZWVkKTsKKwkJd3JpdGViKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgREFRT3B0aW9ucyk7CisJfSBlbHNlIHsKKwkJLyogVFJJR19FWFQgKi8KKwkJLyogcGFnZSA0LTUsICJpbnB1dCB3aXRoIGV4dGVybmFsIFJFUXMiICovCisJCXdyaXRlYigwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE9wTW9kZSk7CisJCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsb2NrUmVnKTsKKwkJd3JpdGViKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgU2VxdWVuY2UpOworCQl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSZXFSZWcpOworCQl3cml0ZWIoNCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBCbG9ja01vZGUpOworCQl3cml0ZWIoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBMaW5lUG9sYXJpdGllcyk7CisJCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFja1Nlcik7CisJCXdyaXRlbCgxLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFN0YXJ0RGVsYXkpOworCQl3cml0ZWIoMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSZXFEZWxheSk7CisJCXdyaXRlYigxLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJlcU5vdERlbGF5KTsKKwkJd3JpdGViKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQWNrRGVsYXkpOworCQl3cml0ZWIoMHgwQywgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBY2tOb3REZWxheSk7CisJCXdyaXRlYigweDEwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERhdGExRGVsYXkpOworCQl3cml0ZXcoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbG9ja1NwZWVkKTsKKwkJd3JpdGViKDB4NjAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgREFRT3B0aW9ucyk7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQl3cml0ZWwoY21kLT5zdG9wX2FyZywKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgVHJhbnNmZXJfQ291bnQpOworCX0gZWxzZSB7CisJCS8qIFhYWCAqLworCX0KKworI2lmZGVmIFVTRV9ETUEKKwl3cml0ZWIoQ2xlYXJQcmltYXJ5VEMgfCBDbGVhclNlY29uZGFyeVRDLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRmlyc3RfQ2xlYXIpOworCisJeworCQlpbnQgcmV0dmFsID0gc2V0dXBfbWl0ZV9kbWEoZGV2LCBzKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorI2Vsc2UKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBETUFfTGluZV9Db250cm9sX0dyb3VwMSk7CisjZW5kaWYKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBETUFfTGluZV9Db250cm9sX0dyb3VwMik7CisKKwkvKiBjbGVhciBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KKwl3cml0ZWIoMHhmZiwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZpcnN0X0NsZWFyKTsKKwkvL3dyaXRlYihDbGVhckV4cGlyZWQsZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIrR3JvdXBfMV9TZWNvbmRfQ2xlYXIpOworCisJd3JpdGViKEludEVuLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEludGVycnVwdF9Db250cm9sKTsKKwl3cml0ZWIoMHgwMywKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfRE1BX0FuZF9JbnRlcnJ1cHRfQ29udHJvbCk7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpIHsKKwkJZGV2cHJpdi0+T3BNb2RlQml0cyA9IERhdGFMYXRjaGluZygwKSB8IFJ1bk1vZGUoNyk7CisJfSBlbHNlIHsJCS8vIFRSSUdfVElNRVIKKwkJZGV2cHJpdi0+T3BNb2RlQml0cyA9IE51bWJlcmVkIHwgUnVuTW9kZSg3KTsKKwl9CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCS8qIHN0YXJ0ICovCisJCXdyaXRlYihkZXZwcml2LT5PcE1vZGVCaXRzLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBPcE1vZGUpOworCQlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogVFJJR19JTlQgKi8KKwkJcy0+YXN5bmMtPmludHRyaWcgPSBuaV9wY2lkaW9faW50dHJpZzsKKwl9CisKKwlEUFJJTlRLKCJuaV9wY2lkaW86IGNvbW1hbmQgc3RhcnRlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfbWl0ZV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gbmlfcGNpZGlvX3JlcXVlc3RfZGlfbWl0ZV9jaGFubmVsKGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRldnByaXYtPmRpX21pdGVfY2hhbi0+ZGlyID0gQ09NRURJX0lOUFVUOworCisJbWl0ZV9wcmVwX2RtYShkZXZwcml2LT5kaV9taXRlX2NoYW4sIDMyLCAzMik7CisKKwltaXRlX2RtYV9hcm0oZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9wY2lkaW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCWlmICh0cmlnbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGViKGRldnByaXYtPk9wTW9kZUJpdHMsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgT3BNb2RlKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9wY2lkaW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJd3JpdGViKDB4MDAsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgTWFzdGVyX0RNQV9BbmRfSW50ZXJydXB0X0NvbnRyb2wpOworCW5pX3BjaWRpb19yZWxlYXNlX2RpX21pdGVfY2hhbm5lbChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5kaV9taXRlX3JpbmcsIHMtPmFzeW5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW1lbXNldChzLT5hc3luYy0+cHJlYWxsb2NfYnVmLCAweGFhLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpXzY1MzRfbG9hZF9mcGdhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZnBnYV9pbmRleCwgdTggKiBkYXRhLAorCWludCBkYXRhX2xlbikKK3sKKwlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwOworCWludCBpLCBqOworCXdyaXRldygweDgwIHwgZnBnYV9pbmRleCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaXJtd2FyZV9Db250cm9sX1JlZ2lzdGVyKTsKKwl3cml0ZXcoMHhjMCB8IGZwZ2FfaW5kZXgsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlybXdhcmVfQ29udHJvbF9SZWdpc3Rlcik7CisJZm9yIChpID0gMDsKKwkJKHJlYWR3KGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlGaXJtd2FyZV9TdGF0dXNfUmVnaXN0ZXIpICYgMHgyKSA9PSAwCisJCSYmIGkgPCB0aW1lb3V0OyArK2kpIHsKKwkJdWRlbGF5KDEpOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCXByaW50aygibmlfcGNpZGlvOiBmYWlsZWQgdG8gbG9hZCBmcGdhICVpLCB3YWl0aW5nIGZvciBzdGF0dXMgMHgyXG4iLCBmcGdhX2luZGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXdyaXRldygweDgwIHwgZnBnYV9pbmRleCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaXJtd2FyZV9Db250cm9sX1JlZ2lzdGVyKTsKKwlmb3IgKGkgPSAwOworCQlyZWFkdyhkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX1N0YXR1c19SZWdpc3RlcikgIT0KKwkJMHgzICYmIGkgPCB0aW1lb3V0OyArK2kpIHsKKwkJdWRlbGF5KDEpOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCXByaW50aygibmlfcGNpZGlvOiBmYWlsZWQgdG8gbG9hZCBmcGdhICVpLCB3YWl0aW5nIGZvciBzdGF0dXMgMHgzXG4iLCBmcGdhX2luZGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWZvciAoaiA9IDA7IGogKyAxIDwgZGF0YV9sZW47KSB7CisJCXVuc2lnbmVkIGludCB2YWx1ZSA9IGRhdGFbaisrXTsKKwkJdmFsdWUgfD0gZGF0YVtqKytdIDw8IDg7CisJCXdyaXRldyh2YWx1ZSwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlybXdhcmVfRGF0YV9SZWdpc3Rlcik7CisJCWZvciAoaSA9IDA7CisJCQkocmVhZHcoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCQlGaXJtd2FyZV9TdGF0dXNfUmVnaXN0ZXIpICYgMHgyKSA9PSAwCisJCQkmJiBpIDwgdGltZW91dDsgKytpKSB7CisJCQl1ZGVsYXkoMSk7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJcHJpbnRrKCJuaV9wY2lkaW86IGZhaWxlZCB0byBsb2FkIHdvcmQgaW50byBmcGdhICVpXG4iLAorCQkJCWZwZ2FfaW5kZXgpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQorCQkJc2NoZWR1bGUoKTsKKwl9CisJd3JpdGV3KDB4MCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaXJtd2FyZV9Db250cm9sX1JlZ2lzdGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2lfNjUzNF9yZXNldF9mcGdhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZnBnYV9pbmRleCkKK3sKKwlyZXR1cm4gcGNpXzY1MzRfbG9hZF9mcGdhKGRldiwgZnBnYV9pbmRleCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcGNpXzY1MzRfcmVzZXRfZnBnYXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKwl3cml0ZXcoMHgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX0NvbnRyb2xfUmVnaXN0ZXIpOworCWZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKKwkJcmV0ID0gcGNpXzY1MzRfcmVzZXRfZnBnYShkZXYsIGkpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCX0KKwl3cml0ZXcoMHgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX01hc2tfUmVnaXN0ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV82NTM0X2luaXRfbWFpbl9mcGdhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZQR0FfQ29udHJvbDFfUmVnaXN0ZXIpOworCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZQR0FfQ29udHJvbDJfUmVnaXN0ZXIpOworCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZQR0FfU0NBTFNfQ291bnRlcl9SZWdpc3Rlcik7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9TQ0FNU19Db3VudGVyX1JlZ2lzdGVyKTsKKwl3cml0ZWwoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGUEdBX1NDQkxTX0NvdW50ZXJfUmVnaXN0ZXIpOworCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZQR0FfU0NCTVNfQ291bnRlcl9SZWdpc3Rlcik7Cit9CisKK3N0YXRpYyBpbnQgcGNpXzY1MzRfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgb3B0aW9uc1tdKQoreworCWludCByZXQ7CisJdm9pZCAqbWFpbl9mcGdhX2RhdGEsICpzY2FyYWJfYV9kYXRhLCAqc2NhcmFiX2JfZGF0YTsKKwlpbnQgbWFpbl9mcGdhX2RhdGFfbGVuLCBzY2FyYWJfYV9kYXRhX2xlbiwgc2NhcmFiX2JfZGF0YV9sZW47CisKKwlpZiAob3B0aW9uc1tDT01FRElfREVWQ09ORl9BVVhfREFUQV9MRU5HVEhdID09IDApCisJCXJldHVybiAwOworCXJldCA9IHBjaV82NTM0X3Jlc2V0X2ZwZ2FzKGRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJbWFpbl9mcGdhX2RhdGEgPSBjb21lZGlfYXV4X2RhdGEob3B0aW9ucywgMCk7CisJbWFpbl9mcGdhX2RhdGFfbGVuID0gb3B0aW9uc1tDT01FRElfREVWQ09ORl9BVVhfREFUQTBfTEVOR1RIXTsKKwlyZXQgPSBwY2lfNjUzNF9sb2FkX2ZwZ2EoZGV2LCAyLCBtYWluX2ZwZ2FfZGF0YSwgbWFpbl9mcGdhX2RhdGFfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlwY2lfNjUzNF9pbml0X21haW5fZnBnYShkZXYpOworCXNjYXJhYl9hX2RhdGEgPSBjb21lZGlfYXV4X2RhdGEob3B0aW9ucywgMSk7CisJc2NhcmFiX2FfZGF0YV9sZW4gPSBvcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBMV9MRU5HVEhdOworCXJldCA9IHBjaV82NTM0X2xvYWRfZnBnYShkZXYsIDAsIHNjYXJhYl9hX2RhdGEsIHNjYXJhYl9hX2RhdGFfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlzY2FyYWJfYl9kYXRhID0gY29tZWRpX2F1eF9kYXRhKG9wdGlvbnMsIDIpOworCXNjYXJhYl9iX2RhdGFfbGVuID0gb3B0aW9uc1tDT01FRElfREVWQ09ORl9BVVhfREFUQTJfTEVOR1RIXTsKKwlyZXQgPSBwY2lfNjUzNF9sb2FkX2ZwZ2EoZGV2LCAxLCBzY2FyYWJfYl9kYXRhLCBzY2FyYWJfYl9kYXRhX2xlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlkaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBpOworCWludCByZXQ7CisJaW50IG5fc3ViZGV2aWNlczsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJcHJpbnRrKCJjb21lZGklZDogbmlkaW86IiwgZGV2LT5taW5vcik7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pZGlvOTZfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrKTsKKworCXJldCA9IG5pZGlvX2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1pdGVfc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwljb21lZGlfc2V0X2h3X2RldihkZXYsICZkZXZwcml2LT5taXRlLT5wY2lkZXYtPmRldik7CisJZGV2cHJpdi0+ZGlfbWl0ZV9yaW5nID0gbWl0ZV9hbGxvY19yaW5nKGRldnByaXYtPm1pdGUpOworCWlmIChkZXZwcml2LT5kaV9taXRlX3JpbmcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCWlycSA9IG1pdGVfaXJxKGRldnByaXYtPm1pdGUpOworCXByaW50aygiICVzIiwgZGV2LT5ib2FyZF9uYW1lKTsKKwlpZiAodGhpc19ib2FyZC0+dXNlc19maXJtd2FyZSkgeworCQlyZXQgPSBwY2lfNjUzNF91cGxvYWRfZmlybXdhcmUoZGV2LCBpdC0+b3B0aW9ucyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCF0aGlzX2JvYXJkLT5pc19kaW9kYXEpIHsKKwkJbl9zdWJkZXZpY2VzID0gdGhpc19ib2FyZC0+bl84MjU1OworCX0gZWxzZSB7CisJCW5fc3ViZGV2aWNlcyA9IDE7CisJfQorCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghdGhpc19ib2FyZC0+aXNfZGlvZGFxKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aGlzX2JvYXJkLT5uXzgyNTU7IGkrKykgeworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGksCisJCQkJbmlkaW85Nl84MjU1X2NiLAorCQkJCSh1bnNpZ25lZCBsb25nKShkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJCU5JRElPXzgyNTVfQkFTRShpKSkpOworCQl9CisJfSBlbHNlIHsKKworCQlwcmludGsoIiByZXY9JWQiLAorCQkJcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDaGlwX1ZlcnNpb24pKTsKKworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCVNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9MU0FNUEwgfCBTREZfUEFDS0VEIHwKKwkJCVNERl9DTURfUkVBRDsKKwkJcy0+bl9jaGFuID0gMzI7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9wY2lkaW9faW5zbl9jb25maWc7CisJCXMtPmluc25fYml0cyA9ICZuaV9wY2lkaW9faW5zbl9iaXRzOworCQlzLT5kb19jbWQgPSAmbmlfcGNpZGlvX2NtZDsKKwkJcy0+ZG9fY21kdGVzdCA9ICZuaV9wY2lkaW9fY21kdGVzdDsKKwkJcy0+Y2FuY2VsID0gJm5pX3BjaWRpb19jYW5jZWw7CisJCXMtPmxlbl9jaGFubGlzdCA9IDMyOwkvKiBYWFggKi8KKwkJcy0+YnVmX2NoYW5nZSA9ICZuaV9wY2lkaW9fY2hhbmdlOworCQlzLT5hc3luY19kbWFfZGlyID0gRE1BX0JJRElSRUNUSU9OQUw7CisKKwkJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9JTygwKSk7CisJCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUGluX0RpcmVjdGlvbnMoMCkpOworCQl3cml0ZWwoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X1Bpbl9NYXNrKDApKTsKKworCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gYm9hcmQgKi8KKwkJd3JpdGViKDB4MDAsCisJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQlNYXN0ZXJfRE1BX0FuZF9JbnRlcnJ1cHRfQ29udHJvbCk7CisKKwkJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgbmlkaW9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCSJuaV9wY2lkaW8iLCBkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGUiKTsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwl9CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaWRpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisKKwlpZiAodGhpc19ib2FyZCAmJiAhdGhpc19ib2FyZC0+aXNfZGlvZGFxKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aGlzX2JvYXJkLT5uXzgyNTU7IGkrKykgeworCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGkpOworCQl9CisJfQorCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+ZGlfbWl0ZV9yaW5nKSB7CisJCQltaXRlX2ZyZWVfcmluZyhkZXZwcml2LT5kaV9taXRlX3JpbmcpOworCQkJZGV2cHJpdi0+ZGlfbWl0ZV9yaW5nID0gTlVMTDsKKwkJfQorCQlpZiAoZGV2cHJpdi0+bWl0ZSkKKwkJCW1pdGVfdW5zZXR1cChkZXZwcml2LT5taXRlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlkaW9fZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKworCWZvciAobWl0ZSA9IG1pdGVfZGV2aWNlczsgbWl0ZTsgbWl0ZSA9IG1pdGUtPm5leHQpIHsKKwkJaWYgKG1pdGUtPnVzZWQpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQlzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBuX25pZGlvX2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmlkaW9fYm9hcmRzW2ldLmRldl9pZCkgeworCQkJCWRldi0+Ym9hcmRfcHRyID0gbmlkaW9fYm9hcmRzICsgaTsKKwkJCQlkZXZwcml2LT5taXRlID0gbWl0ZTsKKworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2lkaW8sIG5pX3BjaWRpb19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMmFiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKQEAgLTAsMCArMSwxNzg4IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOSSBQQ0ktTUlPIEUgc2VyaWVzIGNhcmRzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBuaV9wY2ltaW8KK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktTUlPLUUgc2VyaWVzIGFuZCBNIHNlcmllcyAoYWxsIGJvYXJkcykKK0F1dGhvcjogZHMsIEpvaG4gSGFsbGVuLCBGcmFuayBNb3JpIEhlc3MsIFJvbGYgTXVlbGxlciwgSGVyYmVydCBQZXJlbWFucywKKyAgSGVybWFuIEJydXluaW5ja3gsIFRlcnJ5IEJhcm5hYnkKK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gUENJLU1JTy0xNlhFLTUwIChuaV9wY2ltaW8pLAorICBQQ0ktTUlPLTE2WEUtMTAsIFBYSS02MDMwRSwgUENJLU1JTy0xNkUtMSwgUENJLU1JTy0xNkUtNCwgUENJLTYwMTQsIFBDSS02MDQwRSwKKyAgUFhJLTYwNDBFLCBQQ0ktNjAzMEUsIFBDSS02MDMxRSwgUENJLTYwMzJFLCBQQ0ktNjAzM0UsIFBDSS02MDcxRSwgUENJLTYwMjNFLAorICBQQ0ktNjAyNEUsIFBDSS02MDI1RSwgUFhJLTYwMjVFLCBQQ0ktNjAzNEUsIFBDSS02MDM1RSwgUENJLTYwNTJFLAorICBQQ0ktNjExMCwgUENJLTYxMTEsIFBDSS02MjIwLCBQQ0ktNjIyMSwgUENJLTYyMjQsIFBYSS02MjI0LCBQQ0ktNjIyNSwKKyAgUENJLTYyMjksIFBDSS02MjUwLCBQQ0ktNjI1MSwgUENJZS02MjUxLCBQQ0ktNjI1NCwgUENJLTYyNTksIFBDSWUtNjI1OSwKKyAgUENJLTYyODAsIFBDSS02MjgxLCBQWEktNjI4MSwgUENJLTYyODQsIFBDSS02Mjg5LAorICBQQ0ktNjcxMSwgUFhJLTY3MTEsIFBDSS02NzEzLCBQWEktNjcxMywKKyAgUFhJLTYwNzFFLCBQQ0ktNjA3MEUsIFBYSS02MDcwRSwKKyAgUFhJLTYwNTJFLCBQQ0ktNjAzNkUsIFBDSS02NzMxLCBQQ0ktNjczMywgUFhJLTY3MzMsCisgIFBDSS02MTQzLCBQWEktNjE0MworVXBkYXRlZDogV2VkLCAwMyBEZWMgMjAwOCAxMDo1MTo0NyArMDAwMAorCitUaGVzZSBib2FyZHMgYXJlIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIEFULU1JTyBFIHNlcmllcywgZXhjZXB0IHRoYXQKK3RoZXkgdXNlIHRoZSBQQ0kgYnVzIGluc3RlYWQgb2YgSVNBIChpLmUuLCBBVCkuICBTZWUgdGhlIG5vdGVzIGZvcgordGhlIG5pX2F0bWlvLm8gZHJpdmVyIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIGJvYXJkcy4KKworQXV0b2NhbGlicmF0aW9uIGlzIHN1cHBvcnRlZCBvbiBtYW55IG9mIHRoZSBkZXZpY2VzLCB1c2luZyB0aGUKK2NvbWVkaV9jYWxpYnJhdGUgKG9yIGNvbWVkaV9zb2Z0X2NhbGlicmF0ZSBmb3IgbS1zZXJpZXMpIHV0aWxpdHkuCitNLVNlcmllcyBib2FyZHMgZG8gYW5hbG9nIGlucHV0IGFuZCBhbmFsb2cgb3V0cHV0IGNhbGlicmF0aW9uIGVudGlyZWx5CitpbiBzb2Z0d2FyZS4gVGhlIHNvZnR3YXJlIGNhbGlicmF0aW9uIGNvcnJlY3RzCit0aGUgYW5hbG9nIGlucHV0IGZvciBvZmZzZXQsIGdhaW4gYW5kCitub25saW5lYXJpdHkuICBUaGUgYW5hbG9nIG91dHB1dHMgYXJlIGNvcnJlY3RlZCBmb3Igb2Zmc2V0IGFuZCBnYWluLgorU2VlIHRoZSBjb21lZGlsaWIgZG9jdW1lbnRhdGlvbiBvbiBjb21lZGlfZ2V0X3NvZnRjYWxfY29udmVydGVyKCkgZm9yCittb3JlIGluZm9ybWF0aW9uLgorCitCeSBkZWZhdWx0LCB0aGUgZHJpdmVyIHVzZXMgRE1BIHRvIHRyYW5zZmVyIGFuYWxvZyBpbnB1dCBkYXRhIHRvCittZW1vcnkuICBXaGVuIERNQSBpcyBlbmFibGVkLCBub3QgYWxsIHRyaWdnZXJpbmcgZmVhdHVyZXMgYXJlCitzdXBwb3J0ZWQuCisKK0RpZ2l0YWwgSS9PIG1heSBub3Qgd29yayBvbiA2NzN4LgorCitOb3RlIHRoYXQgdGhlIFBDSS02MTQzIGlzIGEgc2ltdWx0YWluZW91cyBzYW1wbGluZyBkZXZpY2Ugd2l0aCA4IGNvbnZlcnRvcnMuCitXaXRoIHRoaXMgYm9hcmQgYWxsIG9mIHRoZSBjb252ZXJ0b3JzIHBlcmZvcm0gb25lIHNpbXVsdGFpbmVvdXMgc2FtcGxlIGR1cmluZworYSBzY2FuIGludGVydmFsLiBUaGUgcGVyaW9kIGZvciBhIHNjYW4gaXMgdXNlZCBmb3IgdGhlIGNvbnZlcnQgdGltZSBpbiBhCitDb21lZGkgY21kLiBUaGUgY29udmVydCB0cmlnZ2VyIHNvdXJjZSBpcyBub3JtYWxseSBzZXQgdG8gVFJJR19OT1cgYnkgZGVmYXVsdC4KKworVGhlIFJUU0kgdHJpZ2dlciBidXMgaXMgc3VwcG9ydGVkIG9uIHRoZXNlIGNhcmRzIG9uCitzdWJkZXZpY2UgMTAuIFNlZSB0aGUgY29tZWRpbGliIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKK0luZm9ybWF0aW9uIChudW1iZXIgb2YgY2hhbm5lbHMsIGJpdHMsIGV0Yy4pIGZvciBzb21lIGRldmljZXMgbWF5IGJlCitpbmNvcnJlY3QuICBQbGVhc2UgY2hlY2sgdGhpcyBhbmQgc3VibWl0IGEgYnVnIGlmIHRoZXJlIGFyZSBwcm9ibGVtcworZm9yIHlvdXIgZGV2aWNlLgorCitTQ1hJIGlzIHByb2JhYmx5IGJyb2tlbiBmb3IgbS1zZXJpZXMgYm9hcmRzLgorCitCdWdzOgorIC0gV2hlbiBETUEgaXMgZW5hYmxlZCwgQ09NRURJX0VWX0NPTlZFUlQgZG9lcworICAgbm90IHdvcmsgY29ycmVjdGx5LgorCisqLworLyoKKwlUaGUgUENJLU1JTyBFIHNlcmllcyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieQorCVRvbWFzeiBNb3R5bGV3c2tpIDwuLi4+LCBhbmQgcG9ydGVkIHRvIGNvbWVkaSBieSBkcy4KKworCVJlZmVyZW5jZXM6CisKKwkgICAzNDEwNzliLnBkZiAgUENJIEUgU2VyaWVzIFJlZ2lzdGVyLUxldmVsIFByb2dyYW1tZXIgTWFudWFsCisJICAgMzQwOTM0Yi5wZGYgIERBUS1TVEMgcmVmZXJlbmNlIG1hbnVhbAorCisJICAgMzIyMDgwYi5wZGYgIDY3MTEvNjcxMy82NzE1IFVzZXIgTWFudWFsCisKKwkgICAzMjA5NDVjLnBkZiAgUENJIEUgU2VyaWVzIFVzZXIgTWFudWFsCisJICAgMzIyMTM4YS5wZGYgIFBDSS02MDUyRSBhbmQgREFRUGFkLTYwNTJFIFVzZXIgTWFudWFsCisKKwlJU1NVRVM6CisKKwluZWVkIHRvIGRlYWwgd2l0aCBleHRlcm5hbCByZWZlcmVuY2UgZm9yIERBQywgYW5kIG90aGVyIERBQworCXByb3BlcnRpZXMgaW4gYm9hcmQgcHJvcGVydGllcworCisJZGVhbCB3aXRoIGF0LW1pby0xNmRlLTEwIHJldmlzaW9uIEQgdG8gTiBjaGFuZ2VzLCBldGMuCisKKwluZWVkIHRvIGFkZCBvdGhlciBDQUxEQUMgdHlwZQorCisJbmVlZCB0byBzbG93IGRvd24gREFDIGxvYWRpbmcuICBJIGRvbid0IHRydXN0IE5JJ3MgY2xhaW0gdGhhdAorCXR3byB3cml0ZXMgdG8gdGhlIFBDSSBidXMgc2xvd3MgSU8gZW5vdWdoLiAgSSB3b3VsZCBwcmVmZXIgdG8KKwl1c2UgY29tZWRpX3VkZWxheSgpLiAgVGltaW5nIHNwZWNzOiAoY2xvY2spCisJCUFEODUyMgkJMzBucworCQlEQUM4MDQzCQkxMjBucworCQlEQUM4ODAwCQk2MG5zCisJCU1CODgzNDEJCT8KKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJuaV9zdGMuaCIKKyNpbmNsdWRlICJtaXRlLmgiCisKKy8vI2RlZmluZSBQQ0lfREVCVUcKKworI2RlZmluZSBQQ0lETUEKKworI2RlZmluZSBQQ0lNSU8gMQorI3VuZGVmIEFUTUlPCisKKyNkZWZpbmUgTUFYX05fQ0FMREFDUyAoMTYrMTYrMikKKworI2RlZmluZSBEUlZfTkFNRSAibmlfcGNpbWlvIgorCisvKiBUaGUgZm9sbG93aW5nIHR3byB0YWJsZXMgbXVzdCBiZSBpbiB0aGUgc2FtZSBvcmRlciAqLworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5pX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgwMTYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDExNzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTE4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMTkwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDExYjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTFjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMWQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEyNzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTMzMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMzQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEzNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTRlMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxNGYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE1ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTViMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxODgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE4NzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MThiMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxOGMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDI0MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MjQyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyNDMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDI4OTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MjhjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYTYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJhNzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmE4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYWIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJiODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmI5MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYzgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJjYTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBhYSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGFiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYWMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBhZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBiNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGI3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBiYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGJkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYmYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxMGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE2YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTdmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxYmMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE3ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmlfcGNpX3RhYmxlKTsKKworLyogVGhlc2UgYXJlIG5vdCBhbGwgdGhlIHBvc3NpYmxlIGFvIHJhbmdlcyBmb3IgNjI4eCBib2FyZHMuCisgVGhleSBjYW4gZG8gT0ZGU0VUICstIFJFRkVSRU5DRSB3aGVyZSBPRkZTRVQgY2FuIGJlCisgMFYsIDVWLCBBUEZJPDAsMT4sIG9yIEFPPDAuLi4zPiBhbmQgUkFOR0UgY2FuCisgYmUgMTBWLCA1ViwgMlYsIDFWLCBBUEZJPDAsMT4sIEFPPDAuLi4zPi4gIFRoYXQncworIDYzIGRpZmZlcmVudCBwb3NzaWJpbGl0aWVzLiAgQW4gQU8gY2hhbm5lbAorIGNhbiBub3QgYWN0IGFzIGl0J3Mgb3duIE9GRlNFVCBvciBSRUZFUkVOQ0UuCisqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX01fNjI4eF9hbyA9IHsgOCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMiwgMiksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtNSwgMTUpLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMywgNyksCisJCQlSQU5HRSg0LCA2KSwKKwkJCVJBTkdFX2V4dCgtMSwgMSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX01fNjI1eF9hbyA9IHsgMywgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRV9leHQoLTEsIDEpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9NXzYyMnhfYW8gPSB7IDEsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBuaV9ib2FyZCBuaV9ib2FyZHNbXSA9IHsKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgwMTYyLAkvLyBOSSBhbHNvIHNheXMgMHgxNjIwLiAgdHlwbz8KKwkJCS5uYW1lID0gInBjaS1taW8tMTZ4ZS01MCIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl84LAorCQkJLmFpX3NwZWVkID0gNTAwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSA1MDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7ZGFjODgwMCwgZGFjODA0M30sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDExNzAsCisJCQkubmFtZSA9ICJwY2ktbWlvLTE2eGUtMTAiLAkvLyBha2EgcGNpLTYwMzBFCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE0LAorCQkJLmFpX3NwZWVkID0gMTAwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyOGMwLAorCQkJLm5hbWUgPSAicGNpLTYwMTQiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTFkMCwKKwkJCS5uYW1lID0gInB4aS02MDMwZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE0LAorCQkJLmFpX3NwZWVkID0gMTAwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMTgwLAorCQkJLm5hbWUgPSAicGNpLW1pby0xNmUtMSIsCS8qIGFrYSBwY2ktNjA3MGUgKi8KKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge21iODgzNDF9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMTkwLAorCQkJLm5hbWUgPSAicGNpLW1pby0xNmUtNCIsCS8qIGFrYSBwY2ktNjA0MGUgKi8KKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkvKiBOb3RlOiB0aGVyZSBoYXZlIGJlZW4gcmVwb3J0ZWQgcHJvYmxlbXMgd2l0aCBmdWxsIHNwZWVkCisJCQkgKiBvbiB0aGlzIGJvYXJkICovCisJCQkuYWlfc3BlZWQgPSAyMDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb19maWZvX2RlcHRoID0gNTEyLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCS8vIGRvYyBzYXlzIG1iODgzNDEKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTFjMCwKKwkJCS5uYW1lID0gInB4aS02MDQwZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxMiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE2LAorCQkJLmFpX3NwZWVkID0gMjAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9FX2FvX2V4dCwKKwkJCS5hb191bmlwb2xhciA9IDEsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHttYjg4MzQxfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMzMwLAorCQkJLm5hbWUgPSAicGNpLTYwMzFlIiwKKwkJCS5uX2FkY2hhbiA9IDY0LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDEyNzAsCisJCQkubmFtZSA9ICJwY2ktNjAzMmUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNCwKKwkJCS5haV9zcGVlZCA9IDEwMDAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7ZGFjODgwMCwgZGFjODA0MywgYWQ4NTIyfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTM0MCwKKwkJCS5uYW1lID0gInBjaS02MDMzZSIsCisJCQkubl9hZGNoYW4gPSA2NCwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE0LAorCQkJLmFpX3NwZWVkID0gMTAwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMzUwLAorCQkJLm5hbWUgPSAicGNpLTYwNzFlIiwKKwkJCS5uX2FkY2hhbiA9IDY0LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJhNjAsCisJCQkubmFtZSA9ICJwY2ktNjAyM2UiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCS8qIG1hbnVhbCBpcyB3cm9uZyAqLworCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyYTcwLAorCQkJLm5hbWUgPSAicGNpLTYwMjRlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNCwKKwkJCS5haV9zcGVlZCA9IDUwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAxMDAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCS8qIG1hbnVhbCBpcyB3cm9uZyAqLworCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyYTgwLAorCQkJLm5hbWUgPSAicGNpLTYwMjVlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNCwKKwkJCS5haV9zcGVlZCA9IDUwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAxMDAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCS8qIG1hbnVhbCBpcyB3cm9uZyAqLworCQkJLmhhc184MjU1ID0gMSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyYWIwLAorCQkJLm5hbWUgPSAicHhpLTYwMjVlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNCwKKwkJCS5haV9zcGVlZCA9IDUwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLyogbWFudWFsIGlzIHdyb25nICovCisJCQkuaGFzXzgyNTUgPSAxLAorCQl9LAorCisJeworCQkJLmRldmljZV9pZCA9IDB4MmNhMCwKKwkJCS5uYW1lID0gInBjaS02MDM0ZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzQsCisJCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MmM4MCwKKwkJCS5uYW1lID0gInBjaS02MDM1ZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzQsCisJCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTAwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxOGIwLAorCQkJLm5hbWUgPSAicGNpLTYwNTJlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkuYWlfc3BlZWQgPSAzMDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb191bmlwb2xhciA9IDEsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fc3BlZWQgPSAzMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1ZywgYWQ4NTIyfSwJLyogbWFudWFsIGlzIHdyb25nICovCisJCX0sCisJey5kZXZpY2VfaWQgPSAweDE0ZTAsCisJCQkubmFtZSA9ICJwY2ktNjExMCIsCisJCQkubl9hZGNoYW4gPSA0LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA4MTkyLAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYxMXgsCisJCQkuYWlfc3BlZWQgPSAyMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYxMXgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19zcGVlZCA9IDI1MCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0LCBhZDg4MDR9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDE0ZjAsCisJCQkubmFtZSA9ICJwY2ktNjExMSIsCisJCQkubl9hZGNoYW4gPSAyLAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA4MTkyLAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYxMXgsCisJCQkuYWlfc3BlZWQgPSAyMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYxMXgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19zcGVlZCA9IDI1MCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0LCBhZDg4MDR9LAorCQl9LAorI2lmIDAKKwkvKiBUaGUgNjExNSBib2FyZHMgcHJvYmFibHkgbmVlZCB0aGVpciBvd24gZHJpdmVyICovCisJeworCQkJLmRldmljZV9pZCA9IDB4MmVkMCwKKwkJCS5uYW1lID0gInBjaS02MTE1IiwKKwkJCS5uX2FkY2hhbiA9IDQsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDgxOTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjExeCwKKwkJCS5haV9zcGVlZCA9IDEwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fNjcxeCA9IDEsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3NwZWVkID0gMjUwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ182MTF4ID0gMSwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnLCBhZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1Z30sCS8qIFhYWCAqLworCQl9LAorI2VuZGlmCisjaWYgMAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDAwMDAsCisJCQkubmFtZSA9ICJweGktNjExNSIsCisJCQkubl9hZGNoYW4gPSA0LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA4MTkyLAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYxMXgsCisJCQkuYWlfc3BlZWQgPSAxMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvXzY3MXggPSAxLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19zcGVlZCA9IDI1MCwKKwkJCS5yZWdfNjExeCA9IDEsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQljYWxkYWMgPSB7YWQ4ODA0X2RlYnVnLCBhZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1Z30sCS8qIFhYWCAqLworCQl9LAorI2VuZGlmCisJeworCQkJLmRldmljZV9pZCA9IDB4MTg4MCwKKwkJCS5uYW1lID0gInBjaS02NzExIiwKKwkJCS5uX2FkY2hhbiA9IDAsCS8qIG5vIGFuYWxvZyBpbnB1dCAqLworCQkJLm5fYW9jaGFuID0gNCwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDE2Mzg0LAorCQkJLyogZGF0YSBzaGVldCBzYXlzIDgxOTIsIGJ1dCBmaWZvIHJlYWxseSBob2xkcyAxNjM4NCBzYW1wbGVzICovCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182NzExLAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJiOTAsCisJCQkubmFtZSA9ICJweGktNjcxMSIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAxNjM4NCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzY3MTEsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTg3MCwKKwkJCS5uYW1lID0gInBjaS02NzEzIiwKKwkJCS5uX2FkY2hhbiA9IDAsCS8qIG5vIGFuYWxvZyBpbnB1dCAqLworCQkJLm5fYW9jaGFuID0gOCwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDE2Mzg0LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMywKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnLCBhZDg4MDRfZGVidWd9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJiODAsCisJCQkubmFtZSA9ICJweGktNjcxMyIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDgsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAxNjM4NCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzY3MTMsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyNDMwLAorCQkJLm5hbWUgPSAicGNpLTY3MzEiLAorCQkJLm5fYWRjaGFuID0gMCwJLyogbm8gYW5hbG9nIGlucHV0ICovCisJCQkubl9hb2NoYW4gPSA0LAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MiwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzY3MTEsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCX0sCisjaWYgMAkJCQkvKiBuZWVkIGRldmljZSBpZHMgKi8KKwl7CisJCQkuZGV2aWNlX2lkID0gMHgwLAorCQkJLm5hbWUgPSAicHhpLTY3MzEiLAorCQkJLm5fYWRjaGFuID0gMCwJLyogbm8gYW5hbG9nIGlucHV0ICovCisJCQkubl9hb2NoYW4gPSA0LAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MiwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMSwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJfSwKKyNlbmRpZgorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDI0MTAsCisJCQkubmFtZSA9ICJwY2ktNjczMyIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDgsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAxNjM4NCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzY3MTMsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyNDIwLAorCQkJLm5hbWUgPSAicHhpLTY3MzMiLAorCQkJLm5fYWRjaGFuID0gMCwJLyogbm8gYW5hbG9nIGlucHV0ICovCisJCQkubl9hb2NoYW4gPSA4LAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMTYzODQsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182NzEzLAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1Z30sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTViMCwKKwkJCS5uYW1lID0gInB4aS02MDcxZSIsCisJCQkubl9hZGNoYW4gPSA2NCwKKwkJCS5hZGJpdHMgPSAxMiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE2LAorCQkJLmFpX3NwZWVkID0gODAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9FX2FvX2V4dCwKKwkJCS5hb191bmlwb2xhciA9IDEsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMWIwLAorCQkJLm5hbWUgPSAicHhpLTYwNzBlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDE4YzAsCisJCQkubmFtZSA9ICJweGktNjA1MmUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDMwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9FX2FvX2V4dCwKKwkJCS5hb19zcGVlZCA9IDMwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge21iODgzNDEsIG1iODgzNDEsIGFkODUyMn0sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTU4MCwKKwkJCS5uYW1lID0gInB4aS02MDMxZSIsCisJCQkubl9hZGNoYW4gPSA2NCwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE0LAorCQkJLmFpX3NwZWVkID0gMTAwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDI4OTAsCisJCQkubmFtZSA9ICJwY2ktNjAzNmUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBiMCwKKwkJCS5uYW1lID0gInBjaS02MjIwIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkvL0ZJWE1FOiAgZ3Vlc3MKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjIyeCwKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBhZiwKKwkJCS5uYW1lID0gInBjaS02MjIxIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjJ4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyMngsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTIwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MWJjLAorCQkJLm5hbWUgPSAicGNpLTYyMjFfMzdwaW4iLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyMngsCisJCQkuYWlfc3BlZWQgPSA0MDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyMnhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAxMjAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwZjIsCisJCQkubmFtZSA9ICJwY2ktNjIyNCIsCisJCQkubl9hZGNoYW4gPSAzMiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjIyeCwKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwZjMsCisJCQkubmFtZSA9ICJweGktNjIyNCIsCisJCQkubl9hZGNoYW4gPSAzMiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjIyeCwKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcxNmMsCisJCQkubmFtZSA9ICJwY2ktNjIyNSIsCisJCQkubl9hZGNoYW4gPSA4MCwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjIyeCwKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjIyeF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEyMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYWEsCisJCQkubmFtZSA9ICJwY2ktNjIyOSIsCisJCQkubl9hZGNoYW4gPSAzMiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjIyeCwKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSA0LAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjIyeF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEyMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYjQsCisJCQkubmFtZSA9ICJwY2ktNjI1MCIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjV4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGI4LAorCQkJLm5hbWUgPSAicGNpLTYyNTEiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjI1eF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjV4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDM1NywKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MTdkLAorCQkJLm5hbWUgPSAicGNpZS02MjUxIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gODAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyNXhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI1eCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAzNTcsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBiNywKKwkJCS5uYW1lID0gInBjaS02MjU0IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gODAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyNXgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGFiLAorCQkJLm5hbWUgPSAicGNpLTYyNTkiLAorCQkJLm5fYWRjaGFuID0gMzIsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSA0LAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjI1eF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjV4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDM1NywKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzE3ZiwKKwkJCS5uYW1lID0gInBjaWUtNjI1OSIsCisJCQkubl9hZGNoYW4gPSAzMiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjV4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyNXgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMzU3LAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGI2LAorCQkJLm5hbWUgPSAicGNpLTYyODAiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTgsCisJCQkuYWlfZmlmb19kZXB0aCA9IDIwNDcsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSAxNjAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyOHgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYmQsCisJCQkubmFtZSA9ICJwY2ktNjI4MSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxOCwKKwkJCS5haV9maWZvX2RlcHRoID0gMjA0NywKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDE2MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjI4eF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182Mjh4LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDM1NywKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGJmLAorCQkJLm5hbWUgPSAicHhpLTYyODEiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTgsCisJCQkuYWlfZmlmb19kZXB0aCA9IDIwNDcsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSAxNjAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyOHhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI4eCwKKwkJCS5hb191bmlwb2xhciA9IDEsCisJCQkuYW9fc3BlZWQgPSAzNTcsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBiYywKKwkJCS5uYW1lID0gInBjaS02Mjg0IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE4LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAyMDQ3LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gMTYwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182Mjh4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBhYywKKwkJCS5uYW1lID0gInBjaS02Mjg5IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE4LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAyMDQ3LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gMTYwMCwKKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82Mjh4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyOHgsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMzU3LAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MEMwLAorCQkJLm5hbWUgPSAicGNpLTYxNDMiLAorCQkJLm5fYWRjaGFuID0gOCwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gMTAyNCwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MTQzLAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MTQzLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnLCBhZDg4MDRfZGVidWd9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcxMEQsCisJCQkubmFtZSA9ICJweGktNjE0MyIsCisJCQkubl9hZGNoYW4gPSA4LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAxMDI0LAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYxNDMsCisJCQkuYWlfc3BlZWQgPSA0MDAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYxNDMsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1Z30sCisJCX0sCit9OworCisjZGVmaW5lIG5fcGNpbWlvX2JvYXJkcyAoKHNpemVvZihuaV9ib2FyZHMpL3NpemVvZihuaV9ib2FyZHNbMF0pKSkKKworc3RhdGljIGludCBwY2ltaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpbWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjaW1pbyA9IHsKKwlkcml2ZXJfbmFtZTogRFJWX05BTUUsCisJbW9kdWxlOlRISVNfTU9EVUxFLAorCWF0dGFjaDpwY2ltaW9fYXR0YWNoLAorCWRldGFjaDpwY2ltaW9fZGV0YWNoLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpbWlvLCBuaV9wY2lfdGFibGUpCisKK3R5cGVkZWYgc3RydWN0IHsKK05JX1BSSVZBVEVfQ09NTU9OfSBuaV9wcml2YXRlOworI2RlZmluZSBkZXZwcml2ICgobmlfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyogSG93IHdlIGFjY2VzcyByZWdpc3RlcnMgKi8KKworI2RlZmluZSBuaV93cml0ZWwoYSxiKQkod3JpdGVsKChhKSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyAoYikpKQorI2RlZmluZSBuaV9yZWFkbChhKQkocmVhZGwoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyAoYSkpKQorI2RlZmluZSBuaV93cml0ZXcoYSxiKQkod3JpdGV3KChhKSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyAoYikpKQorI2RlZmluZSBuaV9yZWFkdyhhKQkocmVhZHcoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyAoYSkpKQorI2RlZmluZSBuaV93cml0ZWIoYSxiKQkod3JpdGViKChhKSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyAoYikpKQorI2RlZmluZSBuaV9yZWFkYihhKQkocmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyAoYSkpKQorCisvKiBIb3cgd2UgYWNjZXNzIFNUQyByZWdpc3RlcnMgKi8KKworLyogV2UgYXV0b21hdGljYWxseSB0YWtlIGFkdmFudGFnZSBvZiBTVEMgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlCisgKiByZWFkL3dyaXR0ZW4gZGlyZWN0bHkgaW4gdGhlIEkvTyBzcGFjZSBvZiB0aGUgYm9hcmQuICBNb3N0CisgKiBQQ0lNSU8gZGV2aWNlcyBtYXAgdGhlIGxvdyA4IFNUQyByZWdpc3RlcnMgdG8gaW9iYXNlK2FkZHIqMi4KKyAqIFRoZSA2MTF4IGRldmljZXMgbWFwIHRoZSB3cml0ZSByZWdpc3RlcnMgdG8gaW9iYXNlK2FkZHIqMiwgYW5kCisgKiB0aGUgcmVhZCByZWdpc3RlcnMgdG8gaW9iYXNlKyhhZGRyLTEpKjIuICovCisvKiBIb3dldmVyLCB0aGUgNjExeCBib2FyZHMgc3RpbGwgYXJlbid0IHdvcmtpbmcsIHNvIEknbSBkaXNhYmxpbmcKKyAqIG5vbi13aW5kb3dlZCBTVEMgYWNjZXNzIHRlbXBvcmFyaWx5ICovCisKK3N0YXRpYyB2b2lkIGVfc2VyaWVzX3dpbl9vdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGRhdGEsIGludCByZWcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwluaV93cml0ZXcocmVnLCBXaW5kb3dfQWRkcmVzcyk7CisJbmlfd3JpdGV3KGRhdGEsIFdpbmRvd19EYXRhKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVpbnQxNl90IGVfc2VyaWVzX3dpbl9pbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQxNl90IHJldDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwluaV93cml0ZXcocmVnLCBXaW5kb3dfQWRkcmVzcyk7CisJcmV0ID0gbmlfcmVhZHcoV2luZG93X0RhdGEpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbV9zZXJpZXNfc3RjX3dyaXRldyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgZGF0YSwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBvZmZzZXQ7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFEQ19GSUZPX0NsZWFyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9GSUZPX0NsZWFyOworCQlicmVhazsKKwljYXNlIEFJX0NvbW1hbmRfMV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfQ29tbWFuZF8xOworCQlicmVhazsKKwljYXNlIEFJX0NvbW1hbmRfMl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfQ29tbWFuZF8yOworCQlicmVhazsKKwljYXNlIEFJX01vZGVfMV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfTW9kZV8xOworCQlicmVhazsKKwljYXNlIEFJX01vZGVfMl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfTW9kZV8yOworCQlicmVhazsKKwljYXNlIEFJX01vZGVfM19SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfTW9kZV8zOworCQlicmVhazsKKwljYXNlIEFJX091dHB1dF9Db250cm9sX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9PdXRwdXRfQ29udHJvbDsKKwkJYnJlYWs7CisJY2FzZSBBSV9QZXJzb25hbF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfUGVyc29uYWw7CisJCWJyZWFrOworCWNhc2UgQUlfU0kyX0xvYWRfQV9SZWdpc3RlcjoKKwkJLy8gdGhpcyBpcyBhY3R1YWxseSBhIDMyIGJpdCByZWdpc3RlciBvbiBtIHNlcmllcyBib2FyZHMKKwkJbmlfd3JpdGVsKGRhdGEsIE1fT2Zmc2V0X0FJX1NJMl9Mb2FkX0EpOworCQlyZXR1cm47CisJCWJyZWFrOworCWNhc2UgQUlfU0kyX0xvYWRfQl9SZWdpc3RlcjoKKwkJLy8gdGhpcyBpcyBhY3R1YWxseSBhIDMyIGJpdCByZWdpc3RlciBvbiBtIHNlcmllcyBib2FyZHMKKwkJbmlfd3JpdGVsKGRhdGEsIE1fT2Zmc2V0X0FJX1NJMl9Mb2FkX0IpOworCQlyZXR1cm47CisJCWJyZWFrOworCWNhc2UgQUlfU1RBUlRfU1RPUF9TZWxlY3RfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX1NUQVJUX1NUT1BfU2VsZWN0OworCQlicmVhazsKKwljYXNlIEFJX1RyaWdnZXJfU2VsZWN0X1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9UcmlnZ2VyX1NlbGVjdDsKKwkJYnJlYWs7CisJY2FzZSBBbmFsb2dfVHJpZ2dlcl9FdGNfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FuYWxvZ19UcmlnZ2VyX0V0YzsKKwkJYnJlYWs7CisJY2FzZSBBT19Db21tYW5kXzFfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX0NvbW1hbmRfMTsKKwkJYnJlYWs7CisJY2FzZSBBT19Db21tYW5kXzJfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX0NvbW1hbmRfMjsKKwkJYnJlYWs7CisJY2FzZSBBT19Nb2RlXzFfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX01vZGVfMTsKKwkJYnJlYWs7CisJY2FzZSBBT19Nb2RlXzJfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX01vZGVfMjsKKwkJYnJlYWs7CisJY2FzZSBBT19Nb2RlXzNfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX01vZGVfMzsKKwkJYnJlYWs7CisJY2FzZSBBT19PdXRwdXRfQ29udHJvbF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fT3V0cHV0X0NvbnRyb2w7CisJCWJyZWFrOworCWNhc2UgQU9fUGVyc29uYWxfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX1BlcnNvbmFsOworCQlicmVhazsKKwljYXNlIEFPX1N0YXJ0X1NlbGVjdF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fU3RhcnRfU2VsZWN0OworCQlicmVhazsKKwljYXNlIEFPX1RyaWdnZXJfU2VsZWN0X1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19UcmlnZ2VyX1NlbGVjdDsKKwkJYnJlYWs7CisJY2FzZSBDbG9ja19hbmRfRk9VVF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQ2xvY2tfYW5kX0ZPVVQ7CisJCWJyZWFrOworCWNhc2UgQ29uZmlndXJhdGlvbl9NZW1vcnlfQ2xlYXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0NvbmZpZ3VyYXRpb25fTWVtb3J5X0NsZWFyOworCQlicmVhazsKKwljYXNlIERBQ19GSUZPX0NsZWFyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19GSUZPX0NsZWFyOworCQlicmVhazsKKwljYXNlIERJT19Db250cm9sX1JlZ2lzdGVyOgorCQlydF9wcmludGsKKwkJCSgiJXM6IEZJWE1FOiByZWdpc3RlciAweCV4IGRvZXMgbm90IG1hcCBjbGVhbmx5IG9uIHRvIG0tc2VyaWVzIGJvYXJkcy5cbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlZyk7CisJCXJldHVybjsKKwkJYnJlYWs7CisJY2FzZSBHX0F1dG9pbmNyZW1lbnRfUmVnaXN0ZXIoMCk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cwX0F1dG9pbmNyZW1lbnQ7CisJCWJyZWFrOworCWNhc2UgR19BdXRvaW5jcmVtZW50X1JlZ2lzdGVyKDEpOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMV9BdXRvaW5jcmVtZW50OworCQlicmVhazsKKwljYXNlIEdfQ29tbWFuZF9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfQ29tbWFuZDsKKwkJYnJlYWs7CisJY2FzZSBHX0NvbW1hbmRfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX0NvbW1hbmQ7CisJCWJyZWFrOworCWNhc2UgR19JbnB1dF9TZWxlY3RfUmVnaXN0ZXIoMCk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cwX0lucHV0X1NlbGVjdDsKKwkJYnJlYWs7CisJY2FzZSBHX0lucHV0X1NlbGVjdF9SZWdpc3RlcigxKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzFfSW5wdXRfU2VsZWN0OworCQlicmVhazsKKwljYXNlIEdfTW9kZV9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfTW9kZTsKKwkJYnJlYWs7CisJY2FzZSBHX01vZGVfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX01vZGU7CisJCWJyZWFrOworCWNhc2UgSW50ZXJydXB0X0FfQWNrX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9JbnRlcnJ1cHRfQV9BY2s7CisJCWJyZWFrOworCWNhc2UgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9JbnRlcnJ1cHRfQV9FbmFibGU7CisJCWJyZWFrOworCWNhc2UgSW50ZXJydXB0X0JfQWNrX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9JbnRlcnJ1cHRfQl9BY2s7CisJCWJyZWFrOworCWNhc2UgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9JbnRlcnJ1cHRfQl9FbmFibGU7CisJCWJyZWFrOworCWNhc2UgSW50ZXJydXB0X0NvbnRyb2xfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9Db250cm9sOworCQlicmVhazsKKwljYXNlIElPX0JpZGlyZWN0aW9uX1Bpbl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfSU9fQmlkaXJlY3Rpb25fUGluOworCQlicmVhazsKKwljYXNlIEpvaW50X1Jlc2V0X1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9Kb2ludF9SZXNldDsKKwkJYnJlYWs7CisJY2FzZSBSVFNJX1RyaWdfQV9PdXRwdXRfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X1JUU0lfVHJpZ19BX091dHB1dDsKKwkJYnJlYWs7CisJY2FzZSBSVFNJX1RyaWdfQl9PdXRwdXRfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X1JUU0lfVHJpZ19CX091dHB1dDsKKwkJYnJlYWs7CisJY2FzZSBSVFNJX1RyaWdfRGlyZWN0aW9uX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9SVFNJX1RyaWdfRGlyZWN0aW9uOworCQlicmVhazsKKwkJLyogRklYTUU6IERJT19PdXRwdXRfUmVnaXN0ZXIgKDE2IGJpdCByZWcpIGlzIHJlcGxhY2VkIGJ5IE1fT2Zmc2V0X1N0YXRpY19EaWdpdGFsX091dHB1dCAoMzIgYml0KQorCQkgICBhbmQgTV9PZmZzZXRfU0NYSV9TZXJpYWxfRGF0YV9PdXQgKDggYml0KSAqLworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IGJ1ZyEgdW5oYW5kbGVkIHJlZ2lzdGVyPTB4JXggaW4gc3dpdGNoLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVnKTsKKwkJQlVHKCk7CisJCXJldHVybjsKKwkJYnJlYWs7CisJfQorCW5pX3dyaXRldyhkYXRhLCBvZmZzZXQpOworfQorCitzdGF0aWMgdWludDE2X3QgbV9zZXJpZXNfc3RjX3JlYWR3KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgcmVnKQoreworCXVuc2lnbmVkIG9mZnNldDsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgQUlfU3RhdHVzXzFfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX1N0YXR1c18xOworCQlicmVhazsKKwljYXNlIEFPX1N0YXR1c18xX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19TdGF0dXNfMTsKKwkJYnJlYWs7CisJY2FzZSBBT19TdGF0dXNfMl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fU3RhdHVzXzI7CisJCWJyZWFrOworCWNhc2UgRElPX1NlcmlhbF9JbnB1dF9SZWdpc3RlcjoKKwkJcmV0dXJuIG5pX3JlYWRiKE1fT2Zmc2V0X1NDWElfU2VyaWFsX0RhdGFfSW4pOworCQlicmVhazsKKwljYXNlIEpvaW50X1N0YXR1c18xX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9Kb2ludF9TdGF0dXNfMTsKKwkJYnJlYWs7CisJY2FzZSBKb2ludF9TdGF0dXNfMl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfSm9pbnRfU3RhdHVzXzI7CisJCWJyZWFrOworCWNhc2UgR19TdGF0dXNfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cwMV9TdGF0dXM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IGJ1ZyEgdW5oYW5kbGVkIHJlZ2lzdGVyPTB4JXggaW4gc3dpdGNoLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVnKTsKKwkJQlVHKCk7CisJCXJldHVybiAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIG5pX3JlYWR3KG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG1fc2VyaWVzX3N0Y193cml0ZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IGRhdGEsIGludCByZWcpCit7CisJdW5zaWduZWQgb2Zmc2V0OworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBBSV9TQ19Mb2FkX0FfUmVnaXN0ZXJzOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9TQ19Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgQUlfU0lfTG9hZF9BX1JlZ2lzdGVyczoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfU0lfTG9hZF9BOworCQlicmVhazsKKwljYXNlIEFPX0JDX0xvYWRfQV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fQkNfTG9hZF9BOworCQlicmVhazsKKwljYXNlIEFPX1VDX0xvYWRfQV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fVUNfTG9hZF9BOworCQlicmVhazsKKwljYXNlIEFPX1VJX0xvYWRfQV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fVUlfTG9hZF9BOworCQlicmVhazsKKwljYXNlIEdfTG9hZF9BX1JlZ2lzdGVyKDApOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMF9Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgR19Mb2FkX0FfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX0xvYWRfQTsKKwkJYnJlYWs7CisJY2FzZSBHX0xvYWRfQl9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfTG9hZF9COworCQlicmVhazsKKwljYXNlIEdfTG9hZF9CX1JlZ2lzdGVyKDEpOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMV9Mb2FkX0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IGJ1ZyEgdW5oYW5kbGVkIHJlZ2lzdGVyPTB4JXggaW4gc3dpdGNoLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVnKTsKKwkJQlVHKCk7CisJCXJldHVybjsKKwkJYnJlYWs7CisJfQorCW5pX3dyaXRlbChkYXRhLCBvZmZzZXQpOworfQorCitzdGF0aWMgdWludDMyX3QgbV9zZXJpZXNfc3RjX3JlYWRsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgcmVnKQoreworCXVuc2lnbmVkIG9mZnNldDsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgR19IV19TYXZlX1JlZ2lzdGVyKDApOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMF9IV19TYXZlOworCQlicmVhazsKKwljYXNlIEdfSFdfU2F2ZV9SZWdpc3RlcigxKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzFfSFdfU2F2ZTsKKwkJYnJlYWs7CisJY2FzZSBHX1NhdmVfUmVnaXN0ZXIoMCk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cwX1NhdmU7CisJCWJyZWFrOworCWNhc2UgR19TYXZlX1JlZ2lzdGVyKDEpOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMV9TYXZlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIiVzOiBidWchIHVuaGFuZGxlZCByZWdpc3Rlcj0weCV4IGluIHN3aXRjaC5cbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlZyk7CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBuaV9yZWFkbChvZmZzZXQpOworfQorCisjZGVmaW5lIGludGVycnVwdF9waW4oYSkJMAorI2RlZmluZSBJUlFfUE9MQVJJVFkgMQorCisjZGVmaW5lIE5JX0VfSVJRX0ZMQUdTCQlJUlFGX1NIQVJFRAorCisjaW5jbHVkZSAibmlfbWlvX2NvbW1vbi5jIgorCitzdGF0aWMgaW50IHBjaW1pb19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworc3RhdGljIGludCBwY2ltaW9fYWlfY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSk7CitzdGF0aWMgaW50IHBjaW1pb19hb19jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKK3N0YXRpYyBpbnQgcGNpbWlvX2dwY3QwX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpOworc3RhdGljIGludCBwY2ltaW9fZ3BjdDFfY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSk7CitzdGF0aWMgaW50IHBjaW1pb19kaW9fY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSk7CisKK3N0YXRpYyB2b2lkIG1fc2VyaWVzX2luaXRfZWVwcm9tX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdGF0aWMgY29uc3QgaW50IFN0YXJ0X0NhbF9FRVBST00gPSAweDQwMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgd2luZG93X3NpemUgPSAxMDsKKwlzdGF0aWMgY29uc3QgaW50IHNlcmlhbF9udW1iZXJfZWVwcm9tX29mZnNldCA9IDB4NDsKKwlzdGF0aWMgY29uc3QgaW50IHNlcmlhbF9udW1iZXJfZWVwcm9tX2xlbmd0aCA9IDB4NDsKKwl1bnNpZ25lZCBvbGRfaW9kd2Jzcl9iaXRzOworCXVuc2lnbmVkIG9sZF9pb2R3YnNyMV9iaXRzOworCXVuc2lnbmVkIG9sZF9pb2R3Y3IxX2JpdHM7CisJaW50IGk7CisKKwlvbGRfaW9kd2Jzcl9iaXRzID0gcmVhZGwoZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSKTsKKwlvbGRfaW9kd2JzcjFfYml0cyA9IHJlYWRsKGRldnByaXYtPm1pdGUtPm1pdGVfaW9fYWRkciArIE1JVEVfSU9EV0JTUl8xKTsKKwlvbGRfaW9kd2NyMV9iaXRzID0gcmVhZGwoZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQ1JfMSk7CisJd3JpdGVsKDB4MCwgZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSKTsKKwl3cml0ZWwoKCgweDgwIHwgd2luZG93X3NpemUpIHwgZGV2cHJpdi0+bWl0ZS0+ZGFxX3BoeXNfYWRkciksCisJCWRldnByaXYtPm1pdGUtPm1pdGVfaW9fYWRkciArIE1JVEVfSU9EV0JTUl8xKTsKKwl3cml0ZWwoMHgxIHwgb2xkX2lvZHdjcjFfYml0cywgZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQ1JfMSk7CisJd3JpdGVsKDB4ZiwgZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgMHgzMCk7CisKKwlCVUdfT04oc2VyaWFsX251bWJlcl9lZXByb21fbGVuZ3RoID4gc2l6ZW9mKGRldnByaXYtPnNlcmlhbF9udW1iZXIpKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsX251bWJlcl9lZXByb21fbGVuZ3RoOyArK2kpIHsKKwkJY2hhciAqYnl0ZV9wdHIgPSAoY2hhciopJmRldnByaXYtPnNlcmlhbF9udW1iZXIgKyBpOworCQkqYnl0ZV9wdHIgPSBuaV9yZWFkYihzZXJpYWxfbnVtYmVyX2VlcHJvbV9vZmZzZXQgKyBpKTsKKwl9CisJZGV2cHJpdi0+c2VyaWFsX251bWJlciA9IGJlMzJfdG9fY3B1KGRldnByaXYtPnNlcmlhbF9udW1iZXIpOworCisJZm9yIChpID0gMDsgaSA8IE1fU0VSSUVTX0VFUFJPTV9TSVpFOyArK2kpIHsKKwkJZGV2cHJpdi0+ZWVwcm9tX2J1ZmZlcltpXSA9IG5pX3JlYWRiKFN0YXJ0X0NhbF9FRVBST00gKyBpKTsKKwl9CisKKwl3cml0ZWwob2xkX2lvZHdic3IxX2JpdHMsIGRldnByaXYtPm1pdGUtPm1pdGVfaW9fYWRkciArIE1JVEVfSU9EV0JTUl8xKTsKKwl3cml0ZWwob2xkX2lvZHdic3JfYml0cywgZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSKTsKKwl3cml0ZWwob2xkX2lvZHdjcjFfYml0cywgZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQ1JfMSk7CisJd3JpdGVsKDB4MCwgZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgMHgzMCk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfNjE0MyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvLyBEaXNhYmxlIGludGVycnVwdHMKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMCwgSW50ZXJydXB0X0NvbnRyb2xfUmVnaXN0ZXIpOworCisJLy8gSW5pdGlhbGlzZSA2MTQzIEFJIHNwZWNpZmljIGJpdHMKKwluaV93cml0ZWIoMHgwMCwgTWFnaWNfNjE0Myk7CS8vIFNldCBHMCxHMSBETUEgbW9kZSB0byBFIHNlcmllcyB2ZXJzaW9uCisJbmlfd3JpdGViKDB4ODAsIFBpcGVsaW5lRGVsYXlfNjE0Myk7CS8vIFNldCBFT0NNb2RlLCBBRENNb2RlIGFuZCBwaXBlbGluZWRlbGF5CisJbmlfd3JpdGViKDB4MDAsIEVPQ19TZXRfNjE0Myk7CS8vIFNldCBFT0MgRGVsYXkKKworCW5pX3dyaXRlbChib2FyZHR5cGUuYWlfZmlmb19kZXB0aCAvIDIsIEFJRklGT19GbGFnXzYxNDMpOwkvLyBTZXQgdGhlIEZJRk8gaGFsZiBmdWxsIGxldmVsCisKKwkvLyBTdHJvYmUgUmVsYXkgZGlzYWJsZSBiaXQKKwlkZXZwcml2LT5haV9jYWxpYl9zb3VyY2VfZW5hYmxlZCA9IDA7CisJbmlfd3JpdGV3KGRldnByaXYtPmFpX2NhbGliX3NvdXJjZSB8IENhbGlicmF0aW9uX0NoYW5uZWxfNjE0M19SZWxheU9mZiwKKwkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzKTsKKwluaV93cml0ZXcoZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlLCBDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMpOworfQorCisvKiBjbGVhbnMgdXAgYWxsb2NhdGVkIHJlc291cmNlcyAqLworc3RhdGljIGludCBwY2ltaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCW1pb19jb21tb25fZGV0YWNoKGRldik7CisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQltaXRlX2ZyZWVfcmluZyhkZXZwcml2LT5haV9taXRlX3JpbmcpOworCQltaXRlX2ZyZWVfcmluZyhkZXZwcml2LT5hb19taXRlX3JpbmcpOworCQltaXRlX2ZyZWVfcmluZyhkZXZwcml2LT5jZG9fbWl0ZV9yaW5nKTsKKwkJbWl0ZV9mcmVlX3JpbmcoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMF0pOworCQltaXRlX2ZyZWVfcmluZyhkZXZwcml2LT5ncGN0X21pdGVfcmluZ1sxXSk7CisJCWlmIChkZXZwcml2LT5taXRlKQorCQkJbWl0ZV91bnNldHVwKGRldnByaXYtPm1pdGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaW1pb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKworCXByaW50aygiY29tZWRpJWQ6IG5pX3BjaW1pbzoiLCBkZXYtPm1pbm9yKTsKKworCXJldCA9IG5pX2FsbG9jX3ByaXZhdGUoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHBjaW1pb19maW5kX2RldmljZShkZXYsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoIiAlcyIsIGJvYXJkdHlwZS5uYW1lKTsKKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZHR5cGUubmFtZTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3ID0gJm1fc2VyaWVzX3N0Y193cml0ZXc7CisJCWRldnByaXYtPnN0Y19yZWFkdyA9ICZtX3Nlcmllc19zdGNfcmVhZHc7CisJCWRldnByaXYtPnN0Y193cml0ZWwgPSAmbV9zZXJpZXNfc3RjX3dyaXRlbDsKKwkJZGV2cHJpdi0+c3RjX3JlYWRsID0gJm1fc2VyaWVzX3N0Y19yZWFkbDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3ID0gJmVfc2VyaWVzX3dpbl9vdXQ7CisJCWRldnByaXYtPnN0Y19yZWFkdyA9ICZlX3Nlcmllc193aW5faW47CisJCWRldnByaXYtPnN0Y193cml0ZWwgPSAmd2luX291dDI7CisJCWRldnByaXYtPnN0Y19yZWFkbCA9ICZ3aW5faW4yOworCX0KKworCXJldCA9IG1pdGVfc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCIgZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY29tZWRpX3NldF9od19kZXYoZGV2LCAmZGV2cHJpdi0+bWl0ZS0+cGNpZGV2LT5kZXYpOworCWRldnByaXYtPmFpX21pdGVfcmluZyA9IG1pdGVfYWxsb2NfcmluZyhkZXZwcml2LT5taXRlKTsKKwlpZiAoZGV2cHJpdi0+YWlfbWl0ZV9yaW5nID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWRldnByaXYtPmFvX21pdGVfcmluZyA9IG1pdGVfYWxsb2NfcmluZyhkZXZwcml2LT5taXRlKTsKKwlpZiAoZGV2cHJpdi0+YW9fbWl0ZV9yaW5nID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWRldnByaXYtPmNkb19taXRlX3JpbmcgPSBtaXRlX2FsbG9jX3JpbmcoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKGRldnByaXYtPmNkb19taXRlX3JpbmcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMF0gPSBtaXRlX2FsbG9jX3JpbmcoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKGRldnByaXYtPmdwY3RfbWl0ZV9yaW5nWzBdID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWRldnByaXYtPmdwY3RfbWl0ZV9yaW5nWzFdID0gbWl0ZV9hbGxvY19yaW5nKGRldnByaXYtPm1pdGUpOworCWlmIChkZXZwcml2LT5ncGN0X21pdGVfcmluZ1sxXSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJbV9zZXJpZXNfaW5pdF9lZXByb21fYnVmZmVyKGRldik7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykKKwkJaW5pdF82MTQzKGRldik7CisKKwlkZXYtPmlycSA9IG1pdGVfaXJxKGRldnByaXYtPm1pdGUpOworCisJaWYgKGRldi0+aXJxID09IDApIHsKKwkJcHJpbnRrKCIgdW5rbm93biBpcnEgKGJhZClcbiIpOworCX0gZWxzZSB7CisJCXByaW50aygiICggaXJxID0gJXUgKSIsIGRldi0+aXJxKTsKKwkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG5pX0VfaW50ZXJydXB0LAorCQkJCQlOSV9FX0lSUV9GTEFHUywgRFJWX05BTUUsCisJCQkJCWRldikpIDwgMCkgeworCQkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOworCQkJZGV2LT5pcnEgPSAwOworCQl9CisJfQorCisJcmV0ID0gbmlfRV9pbml0KGRldiwgaXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2LT5zdWJkZXZpY2VzW05JX0FJX1NVQkRFVl0uYnVmX2NoYW5nZSA9ICZwY2ltaW9fYWlfY2hhbmdlOworCWRldi0+c3ViZGV2aWNlc1tOSV9BT19TVUJERVZdLmJ1Zl9jaGFuZ2UgPSAmcGNpbWlvX2FvX2NoYW5nZTsKKwlkZXYtPnN1YmRldmljZXNbTklfR1BDVF9TVUJERVYoMCldLmJ1Zl9jaGFuZ2UgPSAmcGNpbWlvX2dwY3QwX2NoYW5nZTsKKwlkZXYtPnN1YmRldmljZXNbTklfR1BDVF9TVUJERVYoMSldLmJ1Zl9jaGFuZ2UgPSAmcGNpbWlvX2dwY3QxX2NoYW5nZTsKKwlkZXYtPnN1YmRldmljZXNbTklfRElPX1NVQkRFVl0uYnVmX2NoYW5nZSA9ICZwY2ltaW9fZGlvX2NoYW5nZTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGU7CisJaW50IGk7CisKKwlmb3IgKG1pdGUgPSBtaXRlX2RldmljZXM7IG1pdGU7IG1pdGUgPSBtaXRlLT5uZXh0KSB7CisJCWlmIChtaXRlLT51c2VkKQorCQkJY29udGludWU7CisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBtaXRlLT5wY2lkZXYtPmJ1cy0+bnVtYmVyIHx8CisJCQkJc2xvdCAhPSBQQ0lfU0xPVChtaXRlLT5wY2lkZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBuX3BjaW1pb19ib2FyZHM7IGkrKykgeworCQkJaWYgKG1pdGVfZGV2aWNlX2lkKG1pdGUpID09IG5pX2JvYXJkc1tpXS5kZXZpY2VfaWQpIHsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IG5pX2JvYXJkcyArIGk7CisJCQkJZGV2cHJpdi0+bWl0ZSA9IG1pdGU7CisKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJbWl0ZV9saXN0X2RldmljZXMoKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBwY2ltaW9fYWlfY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWl0ZV9idWZfY2hhbmdlKGRldnByaXYtPmFpX21pdGVfcmluZywgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2FvX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5hb19taXRlX3JpbmcsIHMtPmFzeW5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaW1pb19ncGN0MF9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMF0sIHMtPmFzeW5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaW1pb19ncGN0MV9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMV0sIHMtPmFzeW5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaW1pb19kaW9fY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWl0ZV9idWZfY2hhbmdlKGRldnByaXYtPmNkb19taXRlX3JpbmcsIHMtPmFzeW5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3N0Yy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3N0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYmY1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfc3RjLmgKQEAgLTAsMCArMSwxNDk4IEBACisvKgorICAgIG1vZHVsZS9uaV9zdGMuaAorICAgIFJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBmb3IgTkkgREFRLVNUQyBjaGlwCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LTkgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworLyoKKwlSZWZlcmVuY2VzOgorCSAgICBEQVEtU1RDIFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsCisqLworCisjaWZuZGVmIF9DT01FRElfTklfU1RDX0gKKyNkZWZpbmUgX0NPTUVESV9OSV9TVENfSAorCisjaW5jbHVkZSAibmlfdGlvLmgiCisKKyNkZWZpbmUgX2JpdDE1CQkweDgwMDAKKyNkZWZpbmUgX2JpdDE0CQkweDQwMDAKKyNkZWZpbmUgX2JpdDEzCQkweDIwMDAKKyNkZWZpbmUgX2JpdDEyCQkweDEwMDAKKyNkZWZpbmUgX2JpdDExCQkweDA4MDAKKyNkZWZpbmUgX2JpdDEwCQkweDA0MDAKKyNkZWZpbmUgX2JpdDkJCTB4MDIwMAorI2RlZmluZSBfYml0OAkJMHgwMTAwCisjZGVmaW5lIF9iaXQ3CQkweDAwODAKKyNkZWZpbmUgX2JpdDYJCTB4MDA0MAorI2RlZmluZSBfYml0NQkJMHgwMDIwCisjZGVmaW5lIF9iaXQ0CQkweDAwMTAKKyNkZWZpbmUgX2JpdDMJCTB4MDAwOAorI2RlZmluZSBfYml0MgkJMHgwMDA0CisjZGVmaW5lIF9iaXQxCQkweDAwMDIKKyNkZWZpbmUgX2JpdDAJCTB4MDAwMQorCisjZGVmaW5lIE5VTV9QRklfT1VUUFVUX1NFTEVDVF9SRUdTIDYKKworLyogUmVnaXN0ZXJzIGluIHRoZSBOYXRpb25hbCBJbnN0cnVtZW50cyBEQVEtU1RDIGNoaXAgKi8KKworI2RlZmluZSBJbnRlcnJ1cHRfQV9BY2tfUmVnaXN0ZXIJMgorI2RlZmluZSBHMF9HYXRlX0ludGVycnVwdF9BY2sJCQlfYml0MTUKKyNkZWZpbmUgRzBfVENfSW50ZXJydXB0X0FjawkJCV9iaXQxNAorI2RlZmluZSBBSV9FcnJvcl9JbnRlcnJ1cHRfQWNrCQkJX2JpdDEzCisjZGVmaW5lIEFJX1NUT1BfSW50ZXJydXB0X0FjawkJCV9iaXQxMgorI2RlZmluZSBBSV9TVEFSVF9JbnRlcnJ1cHRfQWNrCQkJX2JpdDExCisjZGVmaW5lIEFJX1NUQVJUMl9JbnRlcnJ1cHRfQWNrCQkJX2JpdDEwCisjZGVmaW5lIEFJX1NUQVJUMV9JbnRlcnJ1cHRfQWNrCQkJX2JpdDkKKyNkZWZpbmUgQUlfU0NfVENfSW50ZXJydXB0X0FjawkJCV9iaXQ4CisjZGVmaW5lIEFJX1NDX1RDX0Vycm9yX0NvbmZpcm0JCQlfYml0NworI2RlZmluZSBHMF9UQ19FcnJvcl9Db25maXJtCQkJX2JpdDYKKyNkZWZpbmUgRzBfR2F0ZV9FcnJvcl9Db25maXJtCQkJX2JpdDUKKworI2RlZmluZSBBSV9TdGF0dXNfMV9SZWdpc3RlcgkJMgorI2RlZmluZSBJbnRlcnJ1cHRfQV9TdAkJCQkweDgwMDAKKyNkZWZpbmUgQUlfRklGT19GdWxsX1N0CQkJCTB4NDAwMAorI2RlZmluZSBBSV9GSUZPX0hhbGZfRnVsbF9TdAkJCTB4MjAwMAorI2RlZmluZSBBSV9GSUZPX0VtcHR5X1N0CQkJMHgxMDAwCisjZGVmaW5lIEFJX092ZXJydW5fU3QJCQkJMHgwODAwCisjZGVmaW5lIEFJX092ZXJmbG93X1N0CQkJCTB4MDQwMAorI2RlZmluZSBBSV9TQ19UQ19FcnJvcl9TdAkJCTB4MDIwMAorI2RlZmluZSBBSV9TVEFSVDJfU3QJCQkJMHgwMTAwCisjZGVmaW5lIEFJX1NUQVJUMV9TdAkJCQkweDAwODAKKyNkZWZpbmUgQUlfU0NfVENfU3QJCQkJMHgwMDQwCisjZGVmaW5lIEFJX1NUQVJUX1N0CQkJCTB4MDAyMAorI2RlZmluZSBBSV9TVE9QX1N0CQkJCTB4MDAxMAorI2RlZmluZSBHMF9UQ19TdAkJCQkweDAwMDgKKyNkZWZpbmUgRzBfR2F0ZV9JbnRlcnJ1cHRfU3QJCQkweDAwMDQKKyNkZWZpbmUgQUlfRklGT19SZXF1ZXN0X1N0CQkJMHgwMDAyCisjZGVmaW5lIFBhc3NfVGhydV8wX0ludGVycnVwdF9TdAkJMHgwMDAxCisKKyNkZWZpbmUgQUlfU3RhdHVzXzJfUmVnaXN0ZXIJCTUKKworI2RlZmluZSBJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXIJMworZW51bSBJbnRlcnJ1cHRfQl9BY2tfQml0cyB7CisJRzFfR2F0ZV9FcnJvcl9Db25maXJtID0gX2JpdDEsCisJRzFfVENfRXJyb3JfQ29uZmlybSA9IF9iaXQyLAorCUFPX0JDX1RDX1RyaWdnZXJfRXJyb3JfQ29uZmlybSA9IF9iaXQzLAorCUFPX0JDX1RDX0Vycm9yX0NvbmZpcm0gPSBfYml0NCwKKwlBT19VSTJfVENfRXJyb3JfQ29uZnJpbSA9IF9iaXQ1LAorCUFPX1VJMl9UQ19JbnRlcnJ1cHRfQWNrID0gX2JpdDYsCisJQU9fVUNfVENfSW50ZXJydXB0X0FjayA9IF9iaXQ3LAorCUFPX0JDX1RDX0ludGVycnVwdF9BY2sgPSBfYml0OCwKKwlBT19TVEFSVDFfSW50ZXJydXB0X0FjayA9IF9iaXQ5LAorCUFPX1VQREFURV9JbnRlcnJ1cHRfQWNrID0gX2JpdDEwLAorCUFPX1NUQVJUX0ludGVycnVwdF9BY2sgPSBfYml0MTEsCisJQU9fU1RPUF9JbnRlcnJ1cHRfQWNrID0gX2JpdDEyLAorCUFPX0Vycm9yX0ludGVycnVwdF9BY2sgPSBfYml0MTMsCisJRzFfVENfSW50ZXJydXB0X0FjayA9IF9iaXQxNCwKKwlHMV9HYXRlX0ludGVycnVwdF9BY2sgPSBfYml0MTUKK307CisKKyNkZWZpbmUgQU9fU3RhdHVzXzFfUmVnaXN0ZXIJCTMKKyNkZWZpbmUgSW50ZXJydXB0X0JfU3QJCQkJX2JpdDE1CisjZGVmaW5lIEFPX0ZJRk9fRnVsbF9TdAkJCQlfYml0MTQKKyNkZWZpbmUgQU9fRklGT19IYWxmX0Z1bGxfU3QJCQlfYml0MTMKKyNkZWZpbmUgQU9fRklGT19FbXB0eV9TdAkJCV9iaXQxMgorI2RlZmluZSBBT19CQ19UQ19FcnJvcl9TdAkJCV9iaXQxMQorI2RlZmluZSBBT19TVEFSVF9TdAkJCQlfYml0MTAKKyNkZWZpbmUgQU9fT3ZlcnJ1bl9TdAkJCQlfYml0OQorI2RlZmluZSBBT19TVEFSVDFfU3QJCQkJX2JpdDgKKyNkZWZpbmUgQU9fQkNfVENfU3QJCQkJX2JpdDcKKyNkZWZpbmUgQU9fVUNfVENfU3QJCQkJX2JpdDYKKyNkZWZpbmUgQU9fVVBEQVRFX1N0CQkJCV9iaXQ1CisjZGVmaW5lIEFPX1VJMl9UQ19TdAkJCQlfYml0NAorI2RlZmluZSBHMV9UQ19TdAkJCQlfYml0MworI2RlZmluZSBHMV9HYXRlX0ludGVycnVwdF9TdAkJCV9iaXQyCisjZGVmaW5lIEFPX0ZJRk9fUmVxdWVzdF9TdAkJCV9iaXQxCisjZGVmaW5lIFBhc3NfVGhydV8xX0ludGVycnVwdF9TdAkJX2JpdDAKKworI2RlZmluZSBBSV9Db21tYW5kXzJfUmVnaXN0ZXIJCTQKKyNkZWZpbmUgQUlfRW5kX09uX1NDX1RDCQkJCV9iaXQxNQorI2RlZmluZSBBSV9FbmRfT25fRW5kX09mX1NjYW4JCQlfYml0MTQKKyNkZWZpbmUgQUlfU1RBUlQxX0Rpc2FibGUJCQlfYml0MTEKKyNkZWZpbmUgQUlfU0NfU2F2ZV9UcmFjZQkJCV9iaXQxMAorI2RlZmluZSBBSV9TSV9Td2l0Y2hfTG9hZF9Pbl9TQ19UQwkJX2JpdDkKKyNkZWZpbmUgQUlfU0lfU3dpdGNoX0xvYWRfT25fU1RPUAkJX2JpdDgKKyNkZWZpbmUgQUlfU0lfU3dpdGNoX0xvYWRfT25fVEMJCQlfYml0NworI2RlZmluZSBBSV9TQ19Td2l0Y2hfTG9hZF9Pbl9UQwkJCV9iaXQ0CisjZGVmaW5lIEFJX1NUT1BfUHVsc2UJCQkJX2JpdDMKKyNkZWZpbmUgQUlfU1RBUlRfUHVsc2UJCQkJX2JpdDIKKyNkZWZpbmUgQUlfU1RBUlQyX1B1bHNlCQkJCV9iaXQxCisjZGVmaW5lIEFJX1NUQVJUMV9QdWxzZQkJCQlfYml0MAorCisjZGVmaW5lIEFPX0NvbW1hbmRfMl9SZWdpc3RlcgkJNQorI2RlZmluZSBBT19FbmRfT25fQkNfVEMoeCkJCQkoKCh4KSAmIDB4MykgPDwgMTQpCisjZGVmaW5lIEFPX1N0YXJ0X1N0b3BfR2F0ZV9FbmFibGUJCV9iaXQxMworI2RlZmluZSBBT19VQ19TYXZlX1RyYWNlCQkJX2JpdDEyCisjZGVmaW5lIEFPX0JDX0dhdGVfRW5hYmxlCQkJX2JpdDExCisjZGVmaW5lIEFPX0JDX1NhdmVfVHJhY2UJCQlfYml0MTAKKyNkZWZpbmUgQU9fVUlfU3dpdGNoX0xvYWRfT25fQkNfVEMJCV9iaXQ5CisjZGVmaW5lIEFPX1VJX1N3aXRjaF9Mb2FkX09uX1N0b3AJCV9iaXQ4CisjZGVmaW5lIEFPX1VJX1N3aXRjaF9Mb2FkX09uX1RDCQkJX2JpdDcKKyNkZWZpbmUgQU9fVUNfU3dpdGNoX0xvYWRfT25fQkNfVEMJCV9iaXQ2CisjZGVmaW5lIEFPX1VDX1N3aXRjaF9Mb2FkX09uX1RDCQkJX2JpdDUKKyNkZWZpbmUgQU9fQkNfU3dpdGNoX0xvYWRfT25fVEMJCQlfYml0NAorI2RlZmluZSBBT19NdXRlX0IJCQkJX2JpdDMKKyNkZWZpbmUgQU9fTXV0ZV9BCQkJCV9iaXQyCisjZGVmaW5lIEFPX1VQREFURTJfUHVsc2UJCQlfYml0MQorI2RlZmluZSBBT19TVEFSVDFfUHVsc2UJCQkJX2JpdDAKKworI2RlZmluZSBBT19TdGF0dXNfMl9SZWdpc3RlcgkJNgorCisjZGVmaW5lIERJT19QYXJhbGxlbF9JbnB1dF9SZWdpc3Rlcgk3CisKKyNkZWZpbmUgQUlfQ29tbWFuZF8xX1JlZ2lzdGVyCQk4CisjZGVmaW5lIEFJX0FuYWxvZ19UcmlnZ2VyX1Jlc2V0CQkJX2JpdDE0CisjZGVmaW5lIEFJX0Rpc2FybQkJCQlfYml0MTMKKyNkZWZpbmUgQUlfU0kyX0FybQkJCQlfYml0MTIKKyNkZWZpbmUgQUlfU0kyX0xvYWQJCQkJX2JpdDExCisjZGVmaW5lIEFJX1NJX0FybQkJCQlfYml0MTAKKyNkZWZpbmUgQUlfU0lfTG9hZAkJCQlfYml0OQorI2RlZmluZSBBSV9ESVZfQXJtCQkJCV9iaXQ4CisjZGVmaW5lIEFJX0RJVl9Mb2FkCQkJCV9iaXQ3CisjZGVmaW5lIEFJX1NDX0FybQkJCQlfYml0NgorI2RlZmluZSBBSV9TQ19Mb2FkCQkJCV9iaXQ1CisjZGVmaW5lIEFJX1NDQU5fSU5fUFJPR19QdWxzZQkJCV9iaXQ0CisjZGVmaW5lIEFJX0VYVE1VWF9DTEtfUHVsc2UJCQlfYml0MworI2RlZmluZSBBSV9MT0NBTE1VWF9DTEtfUHVsc2UJCQlfYml0MgorI2RlZmluZSBBSV9TQ19UQ19QdWxzZQkJCSAJX2JpdDEKKyNkZWZpbmUgQUlfQ09OVkVSVF9QdWxzZQkJCV9iaXQwCisKKyNkZWZpbmUgQU9fQ29tbWFuZF8xX1JlZ2lzdGVyCQk5CisjZGVmaW5lIEFPX0FuYWxvZ19UcmlnZ2VyX1Jlc2V0CQkJX2JpdDE1CisjZGVmaW5lIEFPX1NUQVJUX1B1bHNlCQkJCV9iaXQxNAorI2RlZmluZSBBT19EaXNhcm0JCQkJX2JpdDEzCisjZGVmaW5lIEFPX1VJMl9Bcm1fRGlzYXJtCQkJX2JpdDEyCisjZGVmaW5lIEFPX1VJMl9Mb2FkCQkJCV9iaXQxMQorI2RlZmluZSBBT19VSV9Bcm0JCQkJX2JpdDEwCisjZGVmaW5lIEFPX1VJX0xvYWQJCQkJX2JpdDkKKyNkZWZpbmUgQU9fVUNfQXJtCQkJCV9iaXQ4CisjZGVmaW5lIEFPX1VDX0xvYWQJCQkJX2JpdDcKKyNkZWZpbmUgQU9fQkNfQXJtCQkJCV9iaXQ2CisjZGVmaW5lIEFPX0JDX0xvYWQJCQkJX2JpdDUKKyNkZWZpbmUgQU9fREFDMV9VcGRhdGVfTW9kZQkJCV9iaXQ0CisjZGVmaW5lIEFPX0xEQUMxX1NvdXJjZV9TZWxlY3QJCQlfYml0MworI2RlZmluZSBBT19EQUMwX1VwZGF0ZV9Nb2RlCQkJX2JpdDIKKyNkZWZpbmUgQU9fTERBQzBfU291cmNlX1NlbGVjdAkJCV9iaXQxCisjZGVmaW5lIEFPX1VQREFURV9QdWxzZQkJCQlfYml0MAorCisjZGVmaW5lIERJT19PdXRwdXRfUmVnaXN0ZXIJCTEwCisjZGVmaW5lIERJT19QYXJhbGxlbF9EYXRhX091dChhKSAgICAgICAgICAgICAgICAoKGEpJjB4ZmYpCisjZGVmaW5lIERJT19QYXJhbGxlbF9EYXRhX01hc2sgICAgICAgICAgICAgICAgICAweGZmCisjZGVmaW5lIERJT19TRE9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYml0MAorI2RlZmluZSBESU9fU0RJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2JpdDQKKyNkZWZpbmUgRElPX1NlcmlhbF9EYXRhX091dChhKSAgICAgICAgICAgICAgICAgICgoKGEpJjB4ZmYpPDw4KQorI2RlZmluZSBESU9fU2VyaWFsX0RhdGFfTWFzayAgICAgICAgICAgICAgICAgICAgMHhmZjAwCisKKyNkZWZpbmUgRElPX0NvbnRyb2xfUmVnaXN0ZXIJCTExCisjZGVmaW5lIERJT19Tb2Z0d2FyZV9TZXJpYWxfQ29udHJvbCAgICAgICAgICAgICBfYml0MTEKKyNkZWZpbmUgRElPX0hXX1NlcmlhbF9UaW1lYmFzZSAgICAgICAgICAgICAgICAgIF9iaXQxMAorI2RlZmluZSBESU9fSFdfU2VyaWFsX0VuYWJsZSAgICAgICAgICAgICAgICAgICAgX2JpdDkKKyNkZWZpbmUgRElPX0hXX1NlcmlhbF9TdGFydCAgICAgICAgICAgICAgICAgICAgIF9iaXQ4CisjZGVmaW5lIERJT19QaW5zX0RpcihhKSAgICAgICAgICAgICAgICAgICAgICAgICAoKGEpJjB4ZmYpCisjZGVmaW5lIERJT19QaW5zX0Rpcl9NYXNrICAgICAgICAgICAgICAgICAgICAgICAweGZmCisKKyNkZWZpbmUgQUlfTW9kZV8xX1JlZ2lzdGVyCQkxMgorI2RlZmluZSBBSV9DT05WRVJUX1NvdXJjZV9TZWxlY3QoYSkJCSgoKGEpICYgMHgxZikgPDwgMTEpCisjZGVmaW5lIEFJX1NJX1NvdXJjZV9zZWxlY3QoYSkJCQkoKChhKSAmIDB4MWYpIDw8IDYpCisjZGVmaW5lIEFJX0NPTlZFUlRfU291cmNlX1BvbGFyaXR5CQlfYml0NQorI2RlZmluZSBBSV9TSV9Tb3VyY2VfUG9sYXJpdHkJCV9iaXQ0CisjZGVmaW5lIEFJX1N0YXJ0X1N0b3AJCQkJX2JpdDMKKyNkZWZpbmUgQUlfTW9kZV8xX1Jlc2VydmVkCQkJX2JpdDIKKyNkZWZpbmUgQUlfQ29udGludW91cwkJCQlfYml0MQorI2RlZmluZSBBSV9UcmlnZ2VyX09uY2UJCQkJX2JpdDAKKworI2RlZmluZSBBSV9Nb2RlXzJfUmVnaXN0ZXIJCTEzCisjZGVmaW5lIEFJX1NDX0dhdGVfRW5hYmxlCQkJX2JpdDE1CisjZGVmaW5lIEFJX1N0YXJ0X1N0b3BfR2F0ZV9FbmFibGUJCV9iaXQxNAorI2RlZmluZSBBSV9QcmVfVHJpZ2dlcgkJCQlfYml0MTMKKyNkZWZpbmUgQUlfRXh0ZXJuYWxfTVVYX1ByZXNlbnQJCQlfYml0MTIKKyNkZWZpbmUgQUlfU0kyX0luaXRpYWxfTG9hZF9Tb3VyY2UJCV9iaXQ5CisjZGVmaW5lIEFJX1NJMl9SZWxvYWRfTW9kZQkJCV9iaXQ4CisjZGVmaW5lIEFJX1NJX0luaXRpYWxfTG9hZF9Tb3VyY2UJCV9iaXQ3CisjZGVmaW5lIEFJX1NJX1JlbG9hZF9Nb2RlKGEpCQkJKCgoYSkgJiAweDcpPDw0KQorI2RlZmluZSBBSV9TSV9Xcml0ZV9Td2l0Y2gJCQlfYml0MworI2RlZmluZSBBSV9TQ19Jbml0aWFsX0xvYWRfU291cmNlCQlfYml0MgorI2RlZmluZSBBSV9TQ19SZWxvYWRfTW9kZQkJCV9iaXQxCisjZGVmaW5lIEFJX1NDX1dyaXRlX1N3aXRjaAkJCV9iaXQwCisKKyNkZWZpbmUgQUlfU0lfTG9hZF9BX1JlZ2lzdGVycwkJMTQKKyNkZWZpbmUgQUlfU0lfTG9hZF9CX1JlZ2lzdGVycwkJMTYKKyNkZWZpbmUgQUlfU0NfTG9hZF9BX1JlZ2lzdGVycwkJMTgKKyNkZWZpbmUgQUlfU0NfTG9hZF9CX1JlZ2lzdGVycwkJMjAKKyNkZWZpbmUgQUlfU0lfU2F2ZV9SZWdpc3RlcnMJCTY0CisjZGVmaW5lIEFJX1NDX1NhdmVfUmVnaXN0ZXJzCQk2NgorCisjZGVmaW5lIEFJX1NJMl9Mb2FkX0FfUmVnaXN0ZXIJCTIzCisjZGVmaW5lIEFJX1NJMl9Mb2FkX0JfUmVnaXN0ZXIJCTI1CisKKyNkZWZpbmUgSm9pbnRfU3RhdHVzXzFfUmVnaXN0ZXIgICAgICAgICAyNworI2RlZmluZSBESU9fU2VyaWFsX0lPX0luX1Byb2dyZXNzX1N0ICAgICAgICAgICAgX2JpdDEyCisKKyNkZWZpbmUgRElPX1NlcmlhbF9JbnB1dF9SZWdpc3RlciAgICAgICAyOAorI2RlZmluZSBKb2ludF9TdGF0dXNfMl9SZWdpc3RlciAgICAgICAgIDI5CitlbnVtIEpvaW50X1N0YXR1c18yX0JpdHMgeworCUFPX1RNUkRBQ1dSc19Jbl9Qcm9ncmVzc19TdCA9IDB4MjAsCit9OworCisjZGVmaW5lIEFPX01vZGVfMV9SZWdpc3RlcgkJMzgKKyNkZWZpbmUgQU9fVVBEQVRFX1NvdXJjZV9TZWxlY3QoeCkJCSgoKHgpJjB4MWYpPDwxMSkKKyNkZWZpbmUgQU9fVUlfU291cmNlX1NlbGVjdCh4KQkJCSgoKHgpJjB4MWYpPDw2KQorI2RlZmluZSBBT19NdWx0aXBsZV9DaGFubmVscwkJCV9iaXQ1CisjZGVmaW5lIEFPX1VQREFURV9Tb3VyY2VfUG9sYXJpdHkJCV9iaXQ0CisjZGVmaW5lIEFPX1VJX1NvdXJjZV9Qb2xhcml0eQkJCV9iaXQzCisjZGVmaW5lIEFPX1VDX1N3aXRjaF9Mb2FkX0V2ZXJ5X1RDCQlfYml0MgorI2RlZmluZSBBT19Db250aW51b3VzCQkJCV9iaXQxCisjZGVmaW5lIEFPX1RyaWdnZXJfT25jZQkJCQlfYml0MAorCisjZGVmaW5lIEFPX01vZGVfMl9SZWdpc3RlcgkJMzkKKyNkZWZpbmUgQU9fRklGT19Nb2RlX01hc2sgKCAweDMgPDwgMTQgKQorZW51bSBBT19GSUZPX01vZGVfQml0cyB7CisJQU9fRklGT19Nb2RlX0hGX3RvX0YgPSAoMyA8PCAxNCksCisJQU9fRklGT19Nb2RlX0YgPSAoMiA8PCAxNCksCisJQU9fRklGT19Nb2RlX0hGID0gKDEgPDwgMTQpLAorCUFPX0ZJRk9fTW9kZV9FID0gKDAgPDwgMTQpLAorfTsKKyNkZWZpbmUgQU9fRklGT19SZXRyYW5zbWl0X0VuYWJsZQkJX2JpdDEzCisjZGVmaW5lIEFPX1NUQVJUMV9EaXNhYmxlCQkJX2JpdDEyCisjZGVmaW5lIEFPX1VDX0luaXRpYWxfTG9hZF9Tb3VyY2UJCV9iaXQxMQorI2RlZmluZSBBT19VQ19Xcml0ZV9Td2l0Y2gJCQlfYml0MTAKKyNkZWZpbmUgQU9fVUkyX0luaXRpYWxfTG9hZF9Tb3VyY2UJCV9iaXQ5CisjZGVmaW5lIEFPX1VJMl9SZWxvYWRfTW9kZQkJCV9iaXQ4CisjZGVmaW5lIEFPX1VJX0luaXRpYWxfTG9hZF9Tb3VyY2UJCV9iaXQ3CisjZGVmaW5lIEFPX1VJX1JlbG9hZF9Nb2RlKHgpCQkJKCgoeCkgJiAweDcpIDw8IDQpCisjZGVmaW5lIEFPX1VJX1dyaXRlX1N3aXRjaAkJCV9iaXQzCisjZGVmaW5lIEFPX0JDX0luaXRpYWxfTG9hZF9Tb3VyY2UJCV9iaXQyCisjZGVmaW5lIEFPX0JDX1JlbG9hZF9Nb2RlCQkJX2JpdDEKKyNkZWZpbmUgQU9fQkNfV3JpdGVfU3dpdGNoCQkJX2JpdDAKKworI2RlZmluZSBBT19VSV9Mb2FkX0FfUmVnaXN0ZXIJCTQwCisjZGVmaW5lIEFPX1VJX0xvYWRfQV9SZWdpc3Rlcl9IaWdoCTQwCisjZGVmaW5lIEFPX1VJX0xvYWRfQV9SZWdpc3Rlcl9Mb3cJNDEKKyNkZWZpbmUgQU9fVUlfTG9hZF9CX1JlZ2lzdGVyCQk0MgorI2RlZmluZSBBT19VSV9TYXZlX1JlZ2lzdGVycwkJMTYKKyNkZWZpbmUgQU9fQkNfTG9hZF9BX1JlZ2lzdGVyCQk0NAorI2RlZmluZSBBT19CQ19Mb2FkX0FfUmVnaXN0ZXJfSGlnaAk0NAorI2RlZmluZSBBT19CQ19Mb2FkX0FfUmVnaXN0ZXJfTG93CTQ1CisjZGVmaW5lIEFPX0JDX0xvYWRfQl9SZWdpc3RlcgkJNDYKKyNkZWZpbmUgQU9fQkNfTG9hZF9CX1JlZ2lzdGVyX0hpZ2gJNDYKKyNkZWZpbmUgQU9fQkNfTG9hZF9CX1JlZ2lzdGVyX0xvdwk0NworI2RlZmluZSBBT19CQ19TYXZlX1JlZ2lzdGVycwkJMTgKKyNkZWZpbmUgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyCQk0OAorI2RlZmluZSBBT19VQ19Mb2FkX0FfUmVnaXN0ZXJfSGlnaAk0OAorI2RlZmluZSBBT19VQ19Mb2FkX0FfUmVnaXN0ZXJfTG93CTQ5CisjZGVmaW5lIEFPX1VDX0xvYWRfQl9SZWdpc3RlcgkJNTAKKyNkZWZpbmUgQU9fVUNfU2F2ZV9SZWdpc3RlcnMJCTIwCisKKyNkZWZpbmUgQ2xvY2tfYW5kX0ZPVVRfUmVnaXN0ZXIJCTU2CitlbnVtIENsb2NrX2FuZF9GT1VUX2JpdHMgeworCUZPVVRfRW5hYmxlID0gX2JpdDE1LAorCUZPVVRfVGltZWJhc2VfU2VsZWN0ID0gX2JpdDE0LAorCURJT19TZXJpYWxfT3V0X0RpdmlkZV9CeV8yID0gX2JpdDEzLAorCVNsb3dfSW50ZXJuYWxfVGltZV9EaXZpZGVfQnlfMiA9IF9iaXQxMiwKKwlTbG93X0ludGVybmFsX1RpbWViYXNlID0gX2JpdDExLAorCUdfU291cmNlX0RpdmlkZV9CeV8yID0gX2JpdDEwLAorCUNsb2NrX1RvX0JvYXJkX0RpdmlkZV9CeV8yID0gX2JpdDksCisJQ2xvY2tfVG9fQm9hcmQgPSBfYml0OCwKKwlBSV9PdXRwdXRfRGl2aWRlX0J5XzIgPSBfYml0NywKKwlBSV9Tb3VyY2VfRGl2aWRlX0J5XzIgPSBfYml0NiwKKwlBT19PdXRwdXRfRGl2aWRlX0J5XzIgPSBfYml0NSwKKwlBT19Tb3VyY2VfRGl2aWRlX0J5XzIgPSBfYml0NCwKKwlGT1VUX0RpdmlkZXJfbWFzayA9IDB4ZgorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgRk9VVF9EaXZpZGVyKHVuc2lnbmVkIGRpdmlkZXIpCit7CisJcmV0dXJuIChkaXZpZGVyICYgRk9VVF9EaXZpZGVyX21hc2spOworfQorCisjZGVmaW5lIElPX0JpZGlyZWN0aW9uX1Bpbl9SZWdpc3Rlcgk1NworI2RlZmluZQlSVFNJX1RyaWdfRGlyZWN0aW9uX1JlZ2lzdGVyCTU4CitlbnVtIFJUU0lfVHJpZ19EaXJlY3Rpb25fQml0cyB7CisJRHJpdmVfUlRTSV9DbG9ja19CaXQgPSAweDEsCisJVXNlX1JUU0lfQ2xvY2tfQml0ID0gMHgyLAorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUlRTSV9PdXRwdXRfQml0KHVuc2lnbmVkIGNoYW5uZWwsIGludCBpc19tc2VyaWVzKQoreworCXVuc2lnbmVkIG1heF9jaGFubmVsOworCXVuc2lnbmVkIGJhc2VfYml0X3NoaWZ0OworCWlmIChpc19tc2VyaWVzKSB7CisJCWJhc2VfYml0X3NoaWZ0ID0gODsKKwkJbWF4X2NoYW5uZWwgPSA3OworCX0gZWxzZSB7CisJCWJhc2VfYml0X3NoaWZ0ID0gOTsKKwkJbWF4X2NoYW5uZWwgPSA2OworCX0KKwlpZiAoY2hhbm5lbCA+IG1heF9jaGFubmVsKSB7CisJCXJ0X3ByaW50aygiJXM6IGJ1ZywgaW52YWxpZCBSVFNJX2NoYW5uZWw9JWlcbiIsIF9fRlVOQ1RJT05fXywKKwkJCWNoYW5uZWwpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDEgPDwgKGJhc2VfYml0X3NoaWZ0ICsgY2hhbm5lbCk7Cit9CisKKyNkZWZpbmUgSW50ZXJydXB0X0NvbnRyb2xfUmVnaXN0ZXIJNTkKKyNkZWZpbmUgSW50ZXJydXB0X0JfRW5hYmxlCQkJX2JpdDE1CisjZGVmaW5lIEludGVycnVwdF9CX091dHB1dF9TZWxlY3QoeCkJCSgoeCk8PDEyKQorI2RlZmluZSBJbnRlcnJ1cHRfQV9FbmFibGUJCQlfYml0MTEKKyNkZWZpbmUgSW50ZXJydXB0X0FfT3V0cHV0X1NlbGVjdCh4KQkJKCh4KTw8OCkKKyNkZWZpbmUgUGFzc19UaHJ1XzBfSW50ZXJydXB0X1BvbGFyaXR5CQlfYml0MworI2RlZmluZSBQYXNzX1RocnVfMV9JbnRlcnJ1cHRfUG9sYXJpdHkJCV9iaXQyCisjZGVmaW5lIEludGVycnVwdF9PdXRwdXRfT25fM19QaW5zCQlfYml0MQorI2RlZmluZSBJbnRlcnJ1cHRfT3V0cHV0X1BvbGFyaXR5CQlfYml0MAorCisjZGVmaW5lIEFJX091dHB1dF9Db250cm9sX1JlZ2lzdGVyCTYwCisjZGVmaW5lIEFJX1NUQVJUX091dHB1dF9TZWxlY3QJCQlfYml0MTAKKyNkZWZpbmUgQUlfU0NBTl9JTl9QUk9HX091dHB1dF9TZWxlY3QoeCkJKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lIEFJX0VYVE1VWF9DTEtfT3V0cHV0X1NlbGVjdCh4KQkJKCgoeCkgJiAweDMpIDw8IDYpCisjZGVmaW5lIEFJX0xPQ0FMTVVYX0NMS19PdXRwdXRfU2VsZWN0KHgpCSgoeCk8PDQpCisjZGVmaW5lIEFJX1NDX1RDX091dHB1dF9TZWxlY3QoeCkJCSgoeCk8PDIpCitlbnVtIGFpX2NvbnZlcnRfb3V0cHV0X3NlbGVjdGlvbiB7CisJQUlfQ09OVkVSVF9PdXRwdXRfSGlnaF9aID0gMCwKKwlBSV9DT05WRVJUX091dHB1dF9Hcm91bmQgPSAxLAorCUFJX0NPTlZFUlRfT3V0cHV0X0VuYWJsZV9Mb3cgPSAyLAorCUFJX0NPTlZFUlRfT3V0cHV0X0VuYWJsZV9IaWdoID0gMworfTsKK3N0YXRpYyB1bnNpZ25lZCBBSV9DT05WRVJUX091dHB1dF9TZWxlY3QoZW51bSBhaV9jb252ZXJ0X291dHB1dF9zZWxlY3Rpb24KKwlzZWxlY3Rpb24pCit7CisJcmV0dXJuIHNlbGVjdGlvbiAmIDB4MzsKK30KKworI2RlZmluZSBBSV9TVEFSVF9TVE9QX1NlbGVjdF9SZWdpc3Rlcgk2MgorI2RlZmluZSBBSV9TVEFSVF9Qb2xhcml0eQkJCV9iaXQxNQorI2RlZmluZSBBSV9TVE9QX1BvbGFyaXR5CQkJX2JpdDE0CisjZGVmaW5lIEFJX1NUT1BfU3luYwkJCQlfYml0MTMKKyNkZWZpbmUgQUlfU1RPUF9FZGdlCQkJCV9iaXQxMgorI2RlZmluZSBBSV9TVE9QX1NlbGVjdChhKQkJCSgoKGEpICYgMHgxZik8PDcpCisjZGVmaW5lIEFJX1NUQVJUX1N5bmMJCQkJX2JpdDYKKyNkZWZpbmUgQUlfU1RBUlRfRWRnZQkJCQlfYml0NQorI2RlZmluZSBBSV9TVEFSVF9TZWxlY3QoYSkJCQkoKGEpICYgMHgxZikKKworI2RlZmluZSBBSV9UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcgk2MworI2RlZmluZSBBSV9TVEFSVDFfUG9sYXJpdHkJCQlfYml0MTUKKyNkZWZpbmUgQUlfU1RBUlQyX1BvbGFyaXR5CQkJX2JpdDE0CisjZGVmaW5lIEFJX1NUQVJUMl9TeW5jCQkJCV9iaXQxMworI2RlZmluZSBBSV9TVEFSVDJfRWRnZQkJCQlfYml0MTIKKyNkZWZpbmUgQUlfU1RBUlQyX1NlbGVjdChhKQkJCSgoKGEpICYgMHgxZikgPDwgNykKKyNkZWZpbmUgQUlfU1RBUlQxX1N5bmMJCQkJX2JpdDYKKyNkZWZpbmUgQUlfU1RBUlQxX0VkZ2UJCQkJX2JpdDUKKyNkZWZpbmUgQUlfU1RBUlQxX1NlbGVjdChhKQkJCSgoYSkgJiAweDFmKQorCisjZGVmaW5lIEFJX0RJVl9Mb2FkX0FfUmVnaXN0ZXIJNjQKKworI2RlZmluZSBBT19TdGFydF9TZWxlY3RfUmVnaXN0ZXIJNjYKKyNkZWZpbmUgQU9fVUkyX1NvZnR3YXJlX0dhdGUJCQlfYml0MTUKKyNkZWZpbmUgQU9fVUkyX0V4dGVybmFsX0dhdGVfUG9sYXJpdHkJCV9iaXQxNAorI2RlZmluZSBBT19TVEFSVF9Qb2xhcml0eQkJCV9iaXQxMworI2RlZmluZSBBT19BT0ZSRVFfRW5hYmxlCQkJX2JpdDEyCisjZGVmaW5lIEFPX1VJMl9FeHRlcm5hbF9HYXRlX1NlbGVjdChhKQkJKCgoYSkgJiAweDFmKSA8PCA3KQorI2RlZmluZSBBT19TVEFSVF9TeW5jCQkJCV9iaXQ2CisjZGVmaW5lIEFPX1NUQVJUX0VkZ2UJCQkJX2JpdDUKKyNkZWZpbmUgQU9fU1RBUlRfU2VsZWN0KGEpCQkJKChhKSAmIDB4MWYpCisKKyNkZWZpbmUgQU9fVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXIJNjcKKyNkZWZpbmUgQU9fVUkyX0V4dGVybmFsX0dhdGVfRW5hYmxlCQlfYml0MTUKKyNkZWZpbmUgQU9fRGVsYXllZF9TVEFSVDEJCQlfYml0MTQKKyNkZWZpbmUgQU9fU1RBUlQxX1BvbGFyaXR5CQkJX2JpdDEzCisjZGVmaW5lIEFPX1VJMl9Tb3VyY2VfUG9sYXJpdHkJCQlfYml0MTIKKyNkZWZpbmUgQU9fVUkyX1NvdXJjZV9TZWxlY3QoeCkJCQkoKCh4KSYweDFmKTw8NykKKyNkZWZpbmUgQU9fU1RBUlQxX1N5bmMJCQkJX2JpdDYKKyNkZWZpbmUgQU9fU1RBUlQxX0VkZ2UJCQkJX2JpdDUKKyNkZWZpbmUgQU9fU1RBUlQxX1NlbGVjdCh4KQkJCSgoKHgpJjB4MWYpPDwwKQorCisjZGVmaW5lIEFPX01vZGVfM19SZWdpc3RlcgkJNzAKKyNkZWZpbmUgQU9fVUkyX1N3aXRjaF9Mb2FkX05leHRfVEMJCV9iaXQxMworI2RlZmluZSBBT19VQ19Td2l0Y2hfTG9hZF9FdmVyeV9CQ19UQwkJX2JpdDEyCisjZGVmaW5lIEFPX1RyaWdnZXJfTGVuZ3RoCQkJX2JpdDExCisjZGVmaW5lIEFPX1N0b3BfT25fT3ZlcnJ1bl9FcnJvcgkJX2JpdDUKKyNkZWZpbmUgQU9fU3RvcF9Pbl9CQ19UQ19UcmlnZ2VyX0Vycm9yCQlfYml0NAorI2RlZmluZSBBT19TdG9wX09uX0JDX1RDX0Vycm9yCQkJX2JpdDMKKyNkZWZpbmUgQU9fTm90X0FuX1VQREFURQkJCV9iaXQyCisjZGVmaW5lIEFPX1NvZnR3YXJlX0dhdGUJCQlfYml0MQorI2RlZmluZSBBT19MYXN0X0dhdGVfRGlzYWJsZQkJX2JpdDAJLyogTSBTZXJpZXMgb25seSAqLworCisjZGVmaW5lIEpvaW50X1Jlc2V0X1JlZ2lzdGVyCQk3MgorI2RlZmluZSBTb2Z0d2FyZV9SZXNldAkJCV9iaXQxMQorI2RlZmluZSBBT19Db25maWd1cmF0aW9uX0VuZAkJCV9iaXQ5CisjZGVmaW5lIEFJX0NvbmZpZ3VyYXRpb25fRW5kCQkJX2JpdDgKKyNkZWZpbmUgQU9fQ29uZmlndXJhdGlvbl9TdGFydAkJCV9iaXQ1CisjZGVmaW5lIEFJX0NvbmZpZ3VyYXRpb25fU3RhcnQJCQlfYml0NAorI2RlZmluZSBHMV9SZXNldAkJCQlfYml0MworI2RlZmluZSBHMF9SZXNldAkJCQlfYml0MgorI2RlZmluZSBBT19SZXNldAkJCQlfYml0MQorI2RlZmluZSBBSV9SZXNldAkJCQlfYml0MAorCisjZGVmaW5lIEludGVycnVwdF9BX0VuYWJsZV9SZWdpc3Rlcgk3MworI2RlZmluZSBQYXNzX1RocnVfMF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0OQorI2RlZmluZSBHMF9HYXRlX0ludGVycnVwdF9FbmFibGUJCV9iaXQ4CisjZGVmaW5lIEFJX0ZJRk9fSW50ZXJydXB0X0VuYWJsZQkJX2JpdDcKKyNkZWZpbmUgRzBfVENfSW50ZXJydXB0X0VuYWJsZQkJCV9iaXQ2CisjZGVmaW5lIEFJX0Vycm9yX0ludGVycnVwdF9FbmFibGUJCV9iaXQ1CisjZGVmaW5lIEFJX1NUT1BfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDQKKyNkZWZpbmUgQUlfU1RBUlRfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDMKKyNkZWZpbmUgQUlfU1RBUlQyX0ludGVycnVwdF9FbmFibGUJCV9iaXQyCisjZGVmaW5lIEFJX1NUQVJUMV9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MQorI2RlZmluZSBBSV9TQ19UQ19JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MAorCisjZGVmaW5lIEludGVycnVwdF9CX0VuYWJsZV9SZWdpc3Rlcgk3NQorI2RlZmluZSBQYXNzX1RocnVfMV9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MTEKKyNkZWZpbmUgRzFfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MTAKKyNkZWZpbmUgRzFfVENfSW50ZXJydXB0X0VuYWJsZQkJCV9iaXQ5CisjZGVmaW5lIEFPX0ZJRk9fSW50ZXJydXB0X0VuYWJsZQkJX2JpdDgKKyNkZWZpbmUgQU9fVUkyX1RDX0ludGVycnVwdF9FbmFibGUJCV9iaXQ3CisjZGVmaW5lIEFPX1VDX1RDX0ludGVycnVwdF9FbmFibGUJCV9iaXQ2CisjZGVmaW5lIEFPX0Vycm9yX0ludGVycnVwdF9FbmFibGUJCV9iaXQ1CisjZGVmaW5lIEFPX1NUT1BfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDQKKyNkZWZpbmUgQU9fU1RBUlRfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDMKKyNkZWZpbmUgQU9fVVBEQVRFX0ludGVycnVwdF9FbmFibGUJCV9iaXQyCisjZGVmaW5lIEFPX1NUQVJUMV9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MQorI2RlZmluZSBBT19CQ19UQ19JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MAorCisjZGVmaW5lIFNlY29uZF9JUlFfQV9FbmFibGVfUmVnaXN0ZXIJNzQKK2VudW0gU2Vjb25kX0lSUV9BX0VuYWJsZV9CaXRzIHsKKwlBSV9TQ19UQ19TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQwLAorCUFJX1NUQVJUMV9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQxLAorCUFJX1NUQVJUMl9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQyLAorCUFJX1NUQVJUX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDMsCisJQUlfU1RPUF9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ0LAorCUFJX0Vycm9yX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDUsCisJRzBfVENfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0NiwKKwlBSV9GSUZPX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDcsCisJRzBfR2F0ZV9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ4LAorCVBhc3NfVGhydV8wX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDkKK307CisKKyNkZWZpbmUgU2Vjb25kX0lSUV9CX0VuYWJsZV9SZWdpc3Rlcgk3NgorZW51bSBTZWNvbmRfSVJRX0JfRW5hYmxlX0JpdHMgeworCUFPX0JDX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDAsCisJQU9fU1RBUlQxX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDEsCisJQU9fVVBEQVRFX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDIsCisJQU9fU1RBUlRfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MywKKwlBT19TVE9QX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDQsCisJQU9fRXJyb3JfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0NSwKKwlBT19VQ19UQ19TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ2LAorCUFPX1VJMl9UQ19TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ3LAorCUFPX0ZJRk9fU2Vjb25kX0lycV9FbmFibGUgPSBfYml0OCwKKwlHMV9UQ19TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ5LAorCUcxX0dhdGVfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MTAsCisJUGFzc19UaHJ1XzFfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MTEKK307CisKKyNkZWZpbmUgQUlfUGVyc29uYWxfUmVnaXN0ZXIJCTc3CisjZGVmaW5lIEFJX1NISUZUSU5fUHVsc2VfV2lkdGgJCQlfYml0MTUKKyNkZWZpbmUgQUlfRU9DX1BvbGFyaXR5CQkJCV9iaXQxNAorI2RlZmluZSBBSV9TT0NfUG9sYXJpdHkJCQkJX2JpdDEzCisjZGVmaW5lIEFJX1NISUZUSU5fUG9sYXJpdHkJCQlfYml0MTIKKyNkZWZpbmUgQUlfQ09OVkVSVF9QdWxzZV9UaW1lYmFzZQkJX2JpdDExCisjZGVmaW5lIEFJX0NPTlZFUlRfUHVsc2VfV2lkdGgJCQlfYml0MTAKKyNkZWZpbmUgQUlfQ09OVkVSVF9PcmlnaW5hbF9QdWxzZQkJX2JpdDkKKyNkZWZpbmUgQUlfRklGT19GbGFnc19Qb2xhcml0eQkJCV9iaXQ4CisjZGVmaW5lIEFJX092ZXJydW5fTW9kZQkJCQlfYml0NworI2RlZmluZSBBSV9FWFRNVVhfQ0xLX1B1bHNlX1dpZHRoCQlfYml0NgorI2RlZmluZSBBSV9MT0NBTE1VWF9DTEtfUHVsc2VfV2lkdGgJCV9iaXQ1CisjZGVmaW5lIEFJX0FJRlJFUV9Qb2xhcml0eQkJCV9iaXQ0CisKKyNkZWZpbmUgQU9fUGVyc29uYWxfUmVnaXN0ZXIJCTc4CitlbnVtIEFPX1BlcnNvbmFsX0JpdHMgeworCUFPX0ludGVydmFsX0J1ZmZlcl9Nb2RlID0gMSA8PCAzLAorCUFPX0JDX1NvdXJjZV9TZWxlY3QgPSAxIDw8IDQsCisJQU9fVVBEQVRFX1B1bHNlX1dpZHRoID0gMSA8PCA1LAorCUFPX1VQREFURV9QdWxzZV9UaW1lYmFzZSA9IDEgPDwgNiwKKwlBT19VUERBVEVfT3JpZ2luYWxfUHVsc2UgPSAxIDw8IDcsCisJQU9fRE1BX1BJT19Db250cm9sID0gMSA8PCA4LAkvKiBNIFNlcmllczogcmVzZXJ2ZWQgKi8KKwlBT19BT0ZSRVFfUG9sYXJpdHkgPSAxIDw8IDksCS8qIE0gU2VyaWVzOiByZXNlcnZlZCAqLworCUFPX0ZJRk9fRW5hYmxlID0gMSA8PCAxMCwKKwlBT19GSUZPX0ZsYWdzX1BvbGFyaXR5ID0gMSA8PCAxMSwJLyogTSBTZXJpZXM6IHJlc2VydmVkICovCisJQU9fVE1SREFDV1JfUHVsc2VfV2lkdGggPSAxIDw8IDEyLAorCUFPX0Zhc3RfQ1BVID0gMSA8PCAxMywJLyogTSBTZXJpZXM6IHJlc2VydmVkICovCisJQU9fTnVtYmVyX09mX0RBQ19QYWNrYWdlcyA9IDEgPDwgMTQsCS8vIDEgZm9yICJzaW5nbGUiIG1vZGUsIDAgZm9yICJkdWFsIgorCUFPX011bHRpcGxlX0RBQ1NfUGVyX1BhY2thZ2UgPSAxIDw8IDE1CS8vIG0tc2VyaWVzIG9ubHkKK307CisjZGVmaW5lCVJUU0lfVHJpZ19BX091dHB1dF9SZWdpc3Rlcgk3OQorI2RlZmluZQlSVFNJX1RyaWdfQl9PdXRwdXRfUmVnaXN0ZXIJODAKK2VudW0gUlRTSV9UcmlnX0JfT3V0cHV0X0JpdHMgeworCVJUU0lfU3ViX1NlbGVjdGlvbl8xX0JpdCA9IDB4ODAwMAkvLyBub3QgZm9yIG0tc2VyaWVzCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBSVFNJX1RyaWdfT3V0cHV0X0JpdHModW5zaWduZWQgcnRzaV9jaGFubmVsLAorCXVuc2lnbmVkIHNvdXJjZSkKK3sKKwlyZXR1cm4gKHNvdXJjZSAmIDB4ZikgPDwgKChydHNpX2NoYW5uZWwgJSA0KSAqIDQpOworfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUlRTSV9UcmlnX091dHB1dF9NYXNrKHVuc2lnbmVkIHJ0c2lfY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHhmIDw8ICgocnRzaV9jaGFubmVsICUgNCkgKiA0KTsKK307CisKKy8vIGludmVyc2UgdG8gUlRTSV9UcmlnX091dHB1dF9CaXRzKCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUlRTSV9UcmlnX091dHB1dF9Tb3VyY2UodW5zaWduZWQgcnRzaV9jaGFubmVsLAorCXVuc2lnbmVkIGJpdHMpCit7CisJcmV0dXJuIChiaXRzID4+ICgocnRzaV9jaGFubmVsICUgNCkgKiA0KSkgJiAweGY7Cit9OworCisjZGVmaW5lCVJUU0lfQm9hcmRfUmVnaXN0ZXIJCTgxCisjZGVmaW5lIFdyaXRlX1N0cm9iZV8wX1JlZ2lzdGVyCQk4MgorI2RlZmluZSBXcml0ZV9TdHJvYmVfMV9SZWdpc3RlcgkJODMKKyNkZWZpbmUgV3JpdGVfU3Ryb2JlXzJfUmVnaXN0ZXIJCTg0CisjZGVmaW5lIFdyaXRlX1N0cm9iZV8zX1JlZ2lzdGVyCQk4NQorCisjZGVmaW5lIEFPX091dHB1dF9Db250cm9sX1JlZ2lzdGVyCTg2CisjZGVmaW5lIEFPX0V4dGVybmFsX0dhdGVfRW5hYmxlCQkJX2JpdDE1CisjZGVmaW5lIEFPX0V4dGVybmFsX0dhdGVfU2VsZWN0KHgpCQkoKCh4KSYweDFmKTw8MTApCisjZGVmaW5lIEFPX051bWJlcl9PZl9DaGFubmVscyh4KQkJKCgoeCkmMHhmKTw8NikKKyNkZWZpbmUgQU9fVVBEQVRFMl9PdXRwdXRfU2VsZWN0KHgpCQkoKCh4KSYweDMpPDw0KQorI2RlZmluZSBBT19FeHRlcm5hbF9HYXRlX1BvbGFyaXR5CQlfYml0MworI2RlZmluZSBBT19VUERBVEUyX091dHB1dF9Ub2dnbGUJCV9iaXQyCitlbnVtIGFvX3VwZGF0ZV9vdXRwdXRfc2VsZWN0aW9uIHsKKwlBT19VcGRhdGVfT3V0cHV0X0hpZ2hfWiA9IDAsCisJQU9fVXBkYXRlX091dHB1dF9Hcm91bmQgPSAxLAorCUFPX1VwZGF0ZV9PdXRwdXRfRW5hYmxlX0xvdyA9IDIsCisJQU9fVXBkYXRlX091dHB1dF9FbmFibGVfSGlnaCA9IDMKK307CitzdGF0aWMgdW5zaWduZWQgQU9fVVBEQVRFX091dHB1dF9TZWxlY3QoZW51bSBhb191cGRhdGVfb3V0cHV0X3NlbGVjdGlvbgorCXNlbGVjdGlvbikKK3sKKwlyZXR1cm4gc2VsZWN0aW9uICYgMHgzOworfQorCisjZGVmaW5lIEFJX01vZGVfM19SZWdpc3RlcgkJODcKKyNkZWZpbmUgQUlfVHJpZ2dlcl9MZW5ndGgJCQlfYml0MTUKKyNkZWZpbmUgQUlfRGVsYXlfU1RBUlQJCQkJX2JpdDE0CisjZGVmaW5lIEFJX1NvZnR3YXJlX0dhdGUJCQlfYml0MTMKKyNkZWZpbmUgQUlfU0lfU3BlY2lhbF9UcmlnZ2VyX0RlbGF5CQlfYml0MTIKKyNkZWZpbmUgQUlfU0kyX1NvdXJjZV9TZWxlY3QJCQlfYml0MTEKKyNkZWZpbmUgQUlfRGVsYXllZF9TVEFSVDIJCQlfYml0MTAKKyNkZWZpbmUgQUlfRGVsYXllZF9TVEFSVDEJCQlfYml0OQorI2RlZmluZSBBSV9FeHRlcm5hbF9HYXRlX01vZGUJCQlfYml0OAorI2RlZmluZSBBSV9GSUZPX01vZGVfSEZfdG9fRQkJCSgzPDw2KQorI2RlZmluZSBBSV9GSUZPX01vZGVfRgkJCQkoMjw8NikKKyNkZWZpbmUgQUlfRklGT19Nb2RlX0hGCQkJCSgxPDw2KQorI2RlZmluZSBBSV9GSUZPX01vZGVfTkUJCQkJKDA8PDYpCisjZGVmaW5lIEFJX0V4dGVybmFsX0dhdGVfUG9sYXJpdHkJCV9iaXQ1CisjZGVmaW5lIEFJX0V4dGVybmFsX0dhdGVfU2VsZWN0KGEpCQkoKGEpICYgMHgxZikKKworI2RlZmluZSBHX0F1dG9pbmNyZW1lbnRfUmVnaXN0ZXIoYSkJKDY4KyhhKSkKKyNkZWZpbmUgR19Db21tYW5kX1JlZ2lzdGVyKGEpCQkoNisoYSkpCisjZGVmaW5lIEdfSFdfU2F2ZV9SZWdpc3RlcihhKQkJKDgrKGEpKjIpCisjZGVmaW5lIEdfSFdfU2F2ZV9SZWdpc3Rlcl9IaWdoKGEpCSg4KyhhKSoyKQorI2RlZmluZSBHX0hXX1NhdmVfUmVnaXN0ZXJfTG93KGEpCSg5KyhhKSoyKQorI2RlZmluZSBHX0lucHV0X1NlbGVjdF9SZWdpc3RlcihhKQkoMzYrKGEpKQorI2RlZmluZSBHX0xvYWRfQV9SZWdpc3RlcihhKQkJKDI4KyhhKSo0KQorI2RlZmluZSBHX0xvYWRfQV9SZWdpc3Rlcl9IaWdoKGEpCSgyOCsoYSkqNCkKKyNkZWZpbmUgR19Mb2FkX0FfUmVnaXN0ZXJfTG93KGEpCSgyOSsoYSkqNCkKKyNkZWZpbmUgR19Mb2FkX0JfUmVnaXN0ZXIoYSkJCSgzMCsoYSkqNCkKKyNkZWZpbmUgR19Mb2FkX0JfUmVnaXN0ZXJfSGlnaChhKQkoMzArKGEpKjQpCisjZGVmaW5lIEdfTG9hZF9CX1JlZ2lzdGVyX0xvdyhhKQkoMzErKGEpKjQpCisjZGVmaW5lIEdfTW9kZV9SZWdpc3RlcihhKQkJKDI2KyhhKSkKKyNkZWZpbmUgR19TYXZlX1JlZ2lzdGVyKGEpCQkoMTIrKGEpKjIpCisjZGVmaW5lIEdfU2F2ZV9SZWdpc3Rlcl9IaWdoKGEpCQkoMTIrKGEpKjIpCisjZGVmaW5lIEdfU2F2ZV9SZWdpc3Rlcl9Mb3coYSkJCSgxMysoYSkqMikKKyNkZWZpbmUgR19TdGF0dXNfUmVnaXN0ZXIJCTQKKyNkZWZpbmUgQW5hbG9nX1RyaWdnZXJfRXRjX1JlZ2lzdGVyCTYxCisKKy8qIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR19EaXNhcm1fQ29weQkJCV9iaXQxNQkvKiBzdHJvYmUgKi8KKyNkZWZpbmUgR19TYXZlX1RyYWNlX0NvcHkJCV9iaXQxNAorI2RlZmluZSBHX0FybV9Db3B5CQkJX2JpdDEzCS8qIHN0cm9iZSAqLworI2RlZmluZSBHX0JhbmtfU3dpdGNoX1N0YXJ0CQlfYml0MTAJLyogc3Ryb2JlICovCisjZGVmaW5lIEdfTGl0dGxlX0JpZ19FbmRpYW4JCV9iaXQ5CisjZGVmaW5lIEdfU3luY2hyb25pemVkX0dhdGUJCV9iaXQ4CisjZGVmaW5lIEdfV3JpdGVfU3dpdGNoCQkJX2JpdDcKKyNkZWZpbmUgR19VcF9Eb3duKGEpCQkJKCgoYSkmMHgwMyk8PDUpCisjZGVmaW5lIEdfRGlzYXJtCQkJX2JpdDQJLyogc3Ryb2JlICovCisjZGVmaW5lIEdfQW5hbG9nX1RyaWdnZXJfUmVzZXQJCV9iaXQzCS8qIHN0cm9iZSAqLworI2RlZmluZSBHX1NhdmVfVHJhY2UJCQlfYml0MQorI2RlZmluZSBHX0FybQkJCQlfYml0MAkvKiBzdHJvYmUgKi8KKworLypjaGFubmVsIGFnbm9zdGljIG5hbWVzIGZvciB0aGUgY29tbWFuZCByZWdpc3RlciAjZGVmaW5lcyAqLworI2RlZmluZSBHX0JhbmtfU3dpdGNoX0VuYWJsZQkJX2JpdDEyCisjZGVmaW5lIEdfQmFua19Td2l0Y2hfTW9kZQkJX2JpdDExCisjZGVmaW5lIEdfTG9hZAkJCQlfYml0MgkvKiBzdHJvYmUgKi8KKworLyogaW5wdXQgc2VsZWN0IHJlZ2lzdGVyICovCisjZGVmaW5lIEdfR2F0ZV9TZWxlY3QoYSkJCSgoKGEpJjB4MWYpPDw3KQorI2RlZmluZSBHX1NvdXJjZV9TZWxlY3QoYSkJCSgoKGEpJjB4MWYpPDwyKQorI2RlZmluZSBHX1dyaXRlX0Fja25vd2xlZGdlc19JcnEJX2JpdDEKKyNkZWZpbmUgR19SZWFkX0Fja25vd2xlZGdlc19JcnEJCV9iaXQwCisKKy8qIHNhbWUgaW5wdXQgc2VsZWN0IHJlZ2lzdGVyLCBidXQgd2l0aCBjaGFubmVsIGFnbm9zdGljIG5hbWVzICovCisjZGVmaW5lIEdfU291cmNlX1BvbGFyaXR5CQlfYml0MTUKKyNkZWZpbmUgR19PdXRwdXRfUG9sYXJpdHkJCV9iaXQxNAorI2RlZmluZSBHX09SX0dhdGUJCQlfYml0MTMKKyNkZWZpbmUgR19HYXRlX1NlbGVjdF9Mb2FkX1NvdXJjZQlfYml0MTIKKworLyogbW9kZSByZWdpc3RlciAqLworI2RlZmluZSBHX0xvYWRpbmdfT25fVEMJCQlfYml0MTIKKyNkZWZpbmUgR19PdXRwdXRfTW9kZShhKQkJKCgoYSkmMHgwMyk8PDgpCisjZGVmaW5lIEdfVHJpZ2dlcl9Nb2RlX0Zvcl9FZGdlX0dhdGUoYSkJKCgoYSkmMHgwMyk8PDMpCisjZGVmaW5lIEdfR2F0aW5nX01vZGUoYSkJCSgoKGEpJjB4MDMpPDwwKQorCisvKiBzYW1lIGlucHV0IG1vZGUgcmVnaXN0ZXIsIGJ1dCB3aXRoIGNoYW5uZWwgYWdub3N0aWMgbmFtZXMgKi8KKyNkZWZpbmUgR19Mb2FkX1NvdXJjZV9TZWxlY3QJCV9iaXQ3CisjZGVmaW5lIEdfUmVsb2FkX1NvdXJjZV9Td2l0Y2hpbmcJX2JpdDE1CisjZGVmaW5lIEdfTG9hZGluZ19Pbl9HYXRlCQlfYml0MTQKKyNkZWZpbmUgR19HYXRlX1BvbGFyaXR5IAkJX2JpdDEzCisKKyNkZWZpbmUgR19Db3VudGluZ19PbmNlKGEpCQkoKChhKSYweDAzKTw8MTApCisjZGVmaW5lIEdfU3RvcF9Nb2RlKGEpCQkJKCgoYSkmMHgwMyk8PDUpCisjZGVmaW5lIEdfR2F0ZV9Pbl9Cb3RoX0VkZ2VzCQlfYml0MgorCisvKiBHX1N0YXR1c19SZWdpc3RlciAqLworI2RlZmluZSBHMV9HYXRlX0Vycm9yX1N0CQlfYml0MTUKKyNkZWZpbmUgRzBfR2F0ZV9FcnJvcl9TdAkJX2JpdDE0CisjZGVmaW5lIEcxX1RDX0Vycm9yX1N0CQkJX2JpdDEzCisjZGVmaW5lIEcwX1RDX0Vycm9yX1N0CQkJX2JpdDEyCisjZGVmaW5lIEcxX05vX0xvYWRfQmV0d2Vlbl9HYXRlc19TdAlfYml0MTEKKyNkZWZpbmUgRzBfTm9fTG9hZF9CZXR3ZWVuX0dhdGVzX1N0CV9iaXQxMAorI2RlZmluZSBHMV9Bcm1lZF9TdAkJCV9iaXQ5CisjZGVmaW5lIEcwX0FybWVkX1N0CQkJX2JpdDgKKyNkZWZpbmUgRzFfU3RhbGVfRGF0YV9TdAkJX2JpdDcKKyNkZWZpbmUgRzBfU3RhbGVfRGF0YV9TdAkJX2JpdDYKKyNkZWZpbmUgRzFfTmV4dF9Mb2FkX1NvdXJjZV9TdAkJX2JpdDUKKyNkZWZpbmUgRzBfTmV4dF9Mb2FkX1NvdXJjZV9TdAkJX2JpdDQKKyNkZWZpbmUgRzFfQ291bnRpbmdfU3QJCQlfYml0MworI2RlZmluZSBHMF9Db3VudGluZ19TdAkJCV9iaXQyCisjZGVmaW5lIEcxX1NhdmVfU3QJCQlfYml0MQorI2RlZmluZSBHMF9TYXZlX1N0CQkJX2JpdDAKKworLyogZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgdGltZXIgKi8KKyNkZWZpbmUgR19BdXRvaW5jcmVtZW50KGEpICAgICAgICAgICAgICAoKGEpPDwwKQorCisvKkFuYWxvZ19UcmlnZ2VyX0V0Y19SZWdpc3RlciovCisjZGVmaW5lIEFuYWxvZ19UcmlnZ2VyX01vZGUoeCkgKCh4KSAmIDB4NykKKyNkZWZpbmUgQW5hbG9nX1RyaWdnZXJfRW5hYmxlIF9iaXQzCisjZGVmaW5lIEFuYWxvZ19UcmlnZ2VyX0RyaXZlIF9iaXQ0CisjZGVmaW5lIEdQRk9fMV9PdXRwdXRfU2VsZWN0CQlfYml0NworI2RlZmluZSBHUEZPXzBfT3V0cHV0X1NlbGVjdChhKQkJKChhKTw8MTEpCisjZGVmaW5lIEdQRk9fMF9PdXRwdXRfRW5hYmxlCQlfYml0MTQKKyNkZWZpbmUgR1BGT18xX091dHB1dF9FbmFibGUJCV9iaXQxNQorCisvKiBBZGRpdGlvbmFsIHdpbmRvd2VkIHJlZ2lzdGVycyB1bmlxdWUgdG8gRSBzZXJpZXMgKi8KKworLyogMTYgYml0IHJlZ2lzdGVycyBzaGFkb3dlZCBmcm9tIERBUS1TVEMgKi8KKyNkZWZpbmUgV2luZG93X0FkZHJlc3MJCQkweDAwCisjZGVmaW5lIFdpbmRvd19EYXRhCQkJMHgwMgorCisjZGVmaW5lIENvbmZpZ3VyYXRpb25fTWVtb3J5X0NsZWFyCTgyCisjZGVmaW5lIEFEQ19GSUZPX0NsZWFyCQkJODMKKyNkZWZpbmUgREFDX0ZJRk9fQ2xlYXIJCQk4NAorCisvKiBpL28gcG9ydCBvZmZzZXRzICovCisKKy8qIDggYml0IHJlZ2lzdGVycyAqLworI2RlZmluZSBYWFhfU3RhdHVzCQkJMHgwMQorZW51bSBYWFhfU3RhdHVzX0JpdHMgeworCVBST01PVVQgPSAweDEsCisJQUlfRklGT19MT1dFUl9OT1RfRU1QVFkgPSAweDgsCit9OworI2RlZmluZSBTZXJpYWxfQ29tbWFuZAkJCTB4MGQKKyNkZWZpbmUgTWlzY19Db21tYW5kCQkJMHgwZgorI2RlZmluZSBQb3J0X0EJCQkJMHgxOQorI2RlZmluZSBQb3J0X0IJCQkJMHgxYgorI2RlZmluZSBQb3J0X0MJCQkJMHgxZAorI2RlZmluZSBDb25maWd1cmF0aW9uCQkJMHgxZgorI2RlZmluZSBTdHJvYmVzCQkJCTB4MDEKKyNkZWZpbmUgQ2hhbm5lbF9BX01vZGUJCQkweDAzCisjZGVmaW5lIENoYW5uZWxfQl9Nb2RlCQkJMHgwNQorI2RlZmluZSBDaGFubmVsX0NfTW9kZQkJCTB4MDcKKyNkZWZpbmUgQUlfQU9fU2VsZWN0CQkJMHgwOQorZW51bSBBSV9BT19TZWxlY3RfQml0cyB7CisJQUlfRE1BX1NlbGVjdF9TaGlmdCA9IDAsCisJQUlfRE1BX1NlbGVjdF9NYXNrID0gMHhmLAorCUFPX0RNQV9TZWxlY3RfU2hpZnQgPSA0LAorCUFPX0RNQV9TZWxlY3RfTWFzayA9IDB4ZiA8PCBBT19ETUFfU2VsZWN0X1NoaWZ0Cit9OworI2RlZmluZSBHMF9HMV9TZWxlY3QJCQkweDBiCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQodW5zaWduZWQgY2hhbm5lbCkKK3sKKwlpZiAoY2hhbm5lbCA8IDQpCisJCXJldHVybiAxIDw8IGNoYW5uZWw7CisJaWYgKGNoYW5uZWwgPT0gNCkKKwkJcmV0dXJuIDB4MzsKKwlpZiAoY2hhbm5lbCA9PSA1KQorCQlyZXR1cm4gMHg1OworCUJVRygpOworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBHUENUX0RNQV9TZWxlY3RfQml0cyh1bnNpZ25lZCBncGN0X2luZGV4LAorCXVuc2lnbmVkIG1pdGVfY2hhbm5lbCkKK3sKKwlCVUdfT04oZ3BjdF9pbmRleCA+IDEpOworCXJldHVybiBuaV9zdGNfZG1hX2NoYW5uZWxfc2VsZWN0X2JpdGZpZWxkKG1pdGVfY2hhbm5lbCkgPDwgKDQgKgorCQlncGN0X2luZGV4KTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR1BDVF9ETUFfU2VsZWN0X01hc2sodW5zaWduZWQgZ3BjdF9pbmRleCkKK3sKKwlCVUdfT04oZ3BjdF9pbmRleCA+IDEpOworCXJldHVybiAweGYgPDwgKDQgKiBncGN0X2luZGV4KTsKK30KKworLyogMTYgYml0IHJlZ2lzdGVycyAqLworCisjZGVmaW5lIENvbmZpZ3VyYXRpb25fTWVtb3J5X0xvdwkweDEwCitlbnVtIENvbmZpZ3VyYXRpb25fTWVtb3J5X0xvd19CaXRzIHsKKwlBSV9ESVRIRVIgPSAweDIwMCwKKwlBSV9MQVNUX0NIQU5ORUwgPSAweDgwMDAsCit9OworI2RlZmluZSBDb25maWd1cmF0aW9uX01lbW9yeV9IaWdoCTB4MTIKK2VudW0gQ29uZmlndXJhdGlvbl9NZW1vcnlfSGlnaF9CaXRzIHsKKwlBSV9BQ19DT1VQTEUgPSAweDgwMCwKKwlBSV9ESUZGRVJFTlRJQUwgPSAweDEwMDAsCisJQUlfQ09NTU9OID0gMHgyMDAwLAorCUFJX0dST1VORCA9IDB4MzAwMCwKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBBSV9DT05GSUdfQ0hBTk5FTCh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gKGNoYW5uZWwgJiAweDNmKTsKK30KKworI2RlZmluZSBBRENfRklGT19EYXRhX1JlZ2lzdGVyCQkweDFjCisKKyNkZWZpbmUgQU9fQ29uZmlndXJhdGlvbgkJMHgxNgorI2RlZmluZSBBT19CaXBvbGFyCQlfYml0MAorI2RlZmluZSBBT19EZWdsaXRjaAkJX2JpdDEKKyNkZWZpbmUgQU9fRXh0X1JlZgkJX2JpdDIKKyNkZWZpbmUgQU9fR3JvdW5kX1JlZgkJX2JpdDMKKyNkZWZpbmUgQU9fQ2hhbm5lbCh4KQkJKCh4KSA8PCA4KQorCisjZGVmaW5lIERBQ19GSUZPX0RhdGEJCQkweDFlCisjZGVmaW5lIERBQzBfRGlyZWN0X0RhdGEJCTB4MTgKKyNkZWZpbmUgREFDMV9EaXJlY3RfRGF0YQkJMHgxYQorCisvKiA2MTF4IHJlZ2lzdGVycyAodGhlc2UgYm9hcmRzIGRpZmZlciBmcm9tIHRoZSBlLXNlcmllcykgKi8KKworI2RlZmluZSBNYWdpY182MTF4CQkJMHgxOQkvKiB3OCAobmV3KSAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsX1NlbGVjdF82MTF4CTB4MWEJLyogdzE2IChuZXcpICovCisjZGVmaW5lIEFEQ19GSUZPX0RhdGFfNjExeAkJMHgxYwkvKiByMzIgKGluY29tcGF0aWJsZSkgKi8KKyNkZWZpbmUgQUlfRklGT19PZmZzZXRfTG9hZF82MTF4CTB4MDUJLyogcjggKG5ldykgKi8KKyNkZWZpbmUgREFDX0ZJRk9fRGF0YV82MTF4CQkweDE0CS8qIHczMiAoaW5jb21wYXRpYmxlKSAqLworI2RlZmluZSBDYWxfR2Fpbl9TZWxlY3RfNjExeAkJMHgwNQkvKiB3OCAobmV3KSAqLworCisjZGVmaW5lIEFPX1dpbmRvd19BZGRyZXNzXzYxMXgJCTB4MTgKKyNkZWZpbmUgQU9fV2luZG93X0RhdGFfNjExeAkJMHgxZQorCisvKiA2MTQzIHJlZ2lzdGVycyAqLworI2RlZmluZSBNYWdpY182MTQzCQkJMHgxOQkvKiB3OCAqLworI2RlZmluZSBHMEcxX0RNQV9TZWxlY3RfNjE0MwkJMHgwQgkvKiB3OCAqLworI2RlZmluZSBQaXBlbGluZURlbGF5XzYxNDMJCTB4MWYJLyogdzggKi8KKyNkZWZpbmUgRU9DX1NldF82MTQzCQkJMHgxRAkvKiB3OCAqLworI2RlZmluZSBBSURNQV9TZWxlY3RfNjE0MwkJMHgwOQkvKiB3OCAqLworI2RlZmluZSBBSUZJRk9fRGF0YV82MTQzCQkweDhDCS8qIHczMiAqLworI2RlZmluZSBBSUZJRk9fRmxhZ182MTQzCQkweDg0CS8qIHczMiAqLworI2RlZmluZSBBSUZJRk9fQ29udHJvbF82MTQzCQkweDg4CS8qIHczMiAqLworI2RlZmluZSBBSUZJRk9fU3RhdHVzXzYxNDMJCTB4ODgJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19ETUFUaHJlc2hvbGRfNjE0MwkweDkwCS8qIHczMiAqLworI2RlZmluZSBBSUZJRk9fV29yZHNfQXZhaWxhYmxlXzYxNDMJMHg5NAkvKiB3MzIgKi8KKworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMJMHg0MgkvKiB3MTYgKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fTG93VGltZV82MTQzCTB4MjAJLyogdzE2ICovCisjZGVmaW5lIENhbGlicmF0aW9uX0hpZ2hUaW1lXzYxNDMJMHgyMgkvKiB3MTYgKi8KKyNkZWZpbmUgUmVsYXlfQ291bnRlcl9Mb2FkX1ZhbF9fNjE0MwkweDRDCS8qIHczMiAqLworI2RlZmluZSBTaWduYXR1cmVfNjE0MwkJCTB4NTAJLyogdzMyICovCisjZGVmaW5lIFJlbGVhc2VfRGF0ZV82MTQzCQkweDU0CS8qIHczMiAqLworI2RlZmluZSBSZWxlYXNlX09sZGVzdF9EYXRlXzYxNDMJMHg1OAkvKiB3MzIgKi8KKworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDNfUmVsYXlPbgkweDgwMDAJLyogQ2FsaWJyYXRpb24gcmVsYXkgc3dpdGNoIE9uICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0M19SZWxheU9mZgkweDQwMDAJLyogQ2FsaWJyYXRpb24gcmVsYXkgc3dpdGNoIE9mZiAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsX0duZF9HbmQJMHgwMAkvKiBPZmZzZXQgQ2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fQ2hhbm5lbF8ydjVfR25kCTB4MDIJLyogMi41ViBSZWZlcmVuY2UgKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fQ2hhbm5lbF9Qd21fR25kCTB4MDUJLyogKy8tIDVWIFNlbGYgQ2FsICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfMnY1X1B3bQkweDBhCS8qIFBXTSBDYWxpYnJhdGlvbiAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsX1B3bV9Qd20JMHgwZAkvKiBDTVJSICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfR25kX1B3bQkweDBlCS8qIFBXTSBDYWxpYnJhdGlvbiAqLworCisvKiA2NzF4LCA2MTF4IHJlZ2lzdGVycyAqLworCisvKiA2NzF4aSwgNjExeCB3aW5kb3dlZCBhbyByZWdpc3RlcnMgKi8KK2VudW0gd2luZG93ZWRfcmVnc182N3h4XzYxeHggeworCUFPX0ltbWVkaWF0ZV82NzF4ID0gMHgxMSwJLyogVyAxNiAqLworCUFPX1RpbWVkXzYxMXggPSAweDEwLAkvKiBXIDE2ICovCisJQU9fRklGT19PZmZzZXRfTG9hZF82MTF4ID0gMHgxMywJLyogVzMyICovCisJQU9fTGF0ZXJfU2luZ2xlX1BvaW50X1VwZGF0ZXMgPSAweDE0LAkvKiBXIDE2ICovCisJQU9fV2F2ZWZvcm1fR2VuZXJhdGlvbl82MTF4ID0gMHgxNSwJLyogVyAxNiAqLworCUFPX01pc2NfNjExeCA9IDB4MTYsCS8qIFcgMTYgKi8KKwlBT19DYWxpYnJhdGlvbl9DaGFubmVsX1NlbGVjdF82N3h4ID0gMHgxNywJLyogVyAxNiAqLworCUFPX0NvbmZpZ3VyYXRpb25fMl82N3h4ID0gMHgxOCwJLyogVyAxNiAqLworCUNBTF9BRENfQ29tbWFuZF82N3h4ID0gMHgxOSwJLyogVyA4ICovCisJQ0FMX0FEQ19TdGF0dXNfNjd4eCA9IDB4MWEsCS8qIFIgOCAqLworCUNBTF9BRENfRGF0YV82N3h4ID0gMHgxYiwJLyogUiAxNiAqLworCUNBTF9BRENfQ29uZmlnX0RhdGFfSGlnaF9Xb3JkXzY3eHggPSAweDFjLAkvKiBSVyAxNiAqLworCUNBTF9BRENfQ29uZmlnX0RhdGFfTG93X1dvcmRfNjd4eCA9IDB4MWQsCS8qIFJXIDE2ICovCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgREFDeF9EaXJlY3RfRGF0YV82NzF4KGludCBjaGFubmVsKQoreworCXJldHVybiBjaGFubmVsOworfQorZW51bSBBT19NaXNjXzYxMXhfQml0cyB7CisJQ0xFQVJfV0cgPSAxLAorfTsKK2VudW0gY3M1NTI5X2NvbmZpZ3VyYXRpb25fYml0cyB7CisJQ1NDRkdfQ0FMX0NPTlRST0xfTUFTSyA9IDB4NywKKwlDU0NGR19TRUxGX0NBTF9PRkZTRVQgPSAweDEsCisJQ1NDRkdfU0VMRl9DQUxfR0FJTiA9IDB4MiwKKwlDU0NGR19TRUxGX0NBTF9PRkZTRVRfR0FJTiA9IDB4MywKKwlDU0NGR19TWVNURU1fQ0FMX09GRlNFVCA9IDB4NSwKKwlDU0NGR19TWVNURU1fQ0FMX0dBSU4gPSAweDYsCisJQ1NDRkdfRE9ORSA9IDEgPDwgMywKKwlDU0NGR19QT1dFUl9TQVZFX1NFTEVDVCA9IDEgPDwgNCwKKwlDU0NGR19QT1JUX01PREUgPSAxIDw8IDUsCisJQ1NDRkdfUkVTRVRfVkFMSUQgPSAxIDw8IDYsCisJQ1NDRkdfUkVTRVQgPSAxIDw8IDcsCisJQ1NDRkdfVU5JUE9MQVIgPSAxIDw8IDEyLAorCUNTQ0ZHX1dPUkRfUkFURV8yMTgwX0NZQ0xFUyA9IDB4MCA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfMTA5Ml9DWUNMRVMgPSAweDEgPDwgMTMsCisJQ1NDRkdfV09SRF9SQVRFXzUzMl9DWUNMRVMgPSAweDIgPDwgMTMsCisJQ1NDRkdfV09SRF9SQVRFXzM4OF9DWUNMRVMgPSAweDMgPDwgMTMsCisJQ1NDRkdfV09SRF9SQVRFXzMyNF9DWUNMRVMgPSAweDQgPDwgMTMsCisJQ1NDRkdfV09SRF9SQVRFXzE3NDQ0X0NZQ0xFUyA9IDB4NSA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfODcyNF9DWUNMRVMgPSAweDYgPDwgMTMsCisJQ1NDRkdfV09SRF9SQVRFXzQzNjRfQ1lDTEVTID0gMHg3IDw8IDEzLAorCUNTQ0ZHX1dPUkRfUkFURV9NQVNLID0gMHg3IDw8IDEzLAorCUNTQ0ZHX0xPV19QT1dFUiA9IDEgPDwgMTYsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgQ1M1NTI5X0NPTkZJR19ET1VUKGludCBvdXRwdXQpCit7CisJcmV0dXJuIDEgPDwgKDE4ICsgb3V0cHV0KTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IENTNTUyOV9DT05GSUdfQU9VVChpbnQgb3V0cHV0KQoreworCXJldHVybiAxIDw8ICgyMiArIG91dHB1dCk7Cit9CitlbnVtIGNzNTUyOV9jb21tYW5kX2JpdHMgeworCUNTQ01EX1BPV0VSX1NBVkUgPSAweDEsCisJQ1NDTURfUkVHSVNURVJfU0VMRUNUX01BU0sgPSAweGUsCisJQ1NDTURfT0ZGU0VUX1JFR0lTVEVSID0gMHgwLAorCUNTQ01EX0dBSU5fUkVHSVNURVIgPSAweDIsCisJQ1NDTURfQ09ORklHX1JFR0lTVEVSID0gMHg0LAorCUNTQ01EX1JFQUQgPSAweDEwLAorCUNTQ01EX0NPTlRJTlVPVVNfQ09OVkVSU0lPTlMgPSAweDIwLAorCUNTQ01EX1NJTkdMRV9DT05WRVJTSU9OID0gMHg0MCwKKwlDU0NNRF9DT01NQU5EID0gMHg4MCwKK307CitlbnVtIGNzNTUyOV9zdGF0dXNfYml0cyB7CisJQ1NTX0FEQ19CVVNZID0gMHgxLAorCUNTU19PU0NfREVURUNUID0gMHgyLAkvKiBpbmRpY2F0ZXMgYWRjIGVycm9yICovCisJQ1NTX09WRVJSQU5HRSA9IDB4NCwKK307CisjZGVmaW5lIFNlckRhY0xkKHgpCQkJKDB4MDg8PCh4KSkKKworLyoKKwlUaGlzIGlzIHN0dWZmIHVuaXF1ZSB0byB0aGUgTkkgRSBzZXJpZXMgZHJpdmVycywKKwlidXQgSSB0aG91Z2h0IEknZCBwdXQgaXQgaGVyZSBhbnl3YXkuCisqLworCitlbnVtIHsgYWlfZ2Fpbl8xNiA9CisJCTAsIGFpX2dhaW5fOCwgYWlfZ2Fpbl8xNCwgYWlfZ2Fpbl80LCBhaV9nYWluXzYxMXgsIGFpX2dhaW5fNjIyeCwKKwkJYWlfZ2Fpbl82Mjh4LCBhaV9nYWluXzYxNDMgfTsKK2VudW0gY2FsZGFjX2VudW0geyBjYWxkYWNfbm9uZSA9IDAsIG1iODgzNDEsIGRhYzg4MDAsIGRhYzgwNDMsIGFkODUyMiwKKwlhZDg4MDQsIGFkODg0MiwgYWQ4ODA0X2RlYnVnCit9OworZW51bSBuaV9yZWdfdHlwZSB7CisJbmlfcmVnX25vcm1hbCA9IDB4MCwKKwluaV9yZWdfNjExeCA9IDB4MSwKKwluaV9yZWdfNjcxMSA9IDB4MiwKKwluaV9yZWdfNjcxMyA9IDB4NCwKKwluaV9yZWdfNjd4eF9tYXNrID0gMHg2LAorCW5pX3JlZ182eHh4X21hc2sgPSAweDcsCisJbmlfcmVnXzYyMnggPSAweDgsCisJbmlfcmVnXzYyNXggPSAweDEwLAorCW5pX3JlZ182Mjh4ID0gMHgxOCwKKwluaV9yZWdfbV9zZXJpZXNfbWFzayA9IDB4MTgsCisJbmlfcmVnXzYxNDMgPSAweDIwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9hb19leHQ7CisKK2VudW0gbV9zZXJpZXNfcmVnaXN0ZXJfb2Zmc2V0cyB7CisJTV9PZmZzZXRfQ0RJT19ETUFfU2VsZWN0ID0gMHg3LAkvLyB3cml0ZQorCU1fT2Zmc2V0X1NDWElfU3RhdHVzID0gMHg3LAkvLyByZWFkCisJTV9PZmZzZXRfQUlfQU9fU2VsZWN0ID0gMHg5LAkvLyB3cml0ZSwgc2FtZSBvZmZzZXQgYXMgZS1zZXJpZXMKKwlNX09mZnNldF9TQ1hJX1NlcmlhbF9EYXRhX0luID0gMHg5LAkvLyByZWFkCisJTV9PZmZzZXRfRzBfRzFfU2VsZWN0ID0gMHhiLAkvLyB3cml0ZSwgc2FtZSBvZmZzZXQgYXMgZS1zZXJpZXMKKwlNX09mZnNldF9NaXNjX0NvbW1hbmQgPSAweGYsCisJTV9PZmZzZXRfU0NYSV9TZXJpYWxfRGF0YV9PdXQgPSAweDExLAorCU1fT2Zmc2V0X1NDWElfQ29udHJvbCA9IDB4MTMsCisJTV9PZmZzZXRfU0NYSV9PdXRwdXRfRW5hYmxlID0gMHgxNSwKKwlNX09mZnNldF9BSV9GSUZPX0RhdGEgPSAweDFjLAorCU1fT2Zmc2V0X1N0YXRpY19EaWdpdGFsX091dHB1dCA9IDB4MjQsCS8vIHdyaXRlCisJTV9PZmZzZXRfU3RhdGljX0RpZ2l0YWxfSW5wdXQgPSAweDI0LAkvLyByZWFkCisJTV9PZmZzZXRfRElPX0RpcmVjdGlvbiA9IDB4MjgsCisJTV9PZmZzZXRfQ2FsX1BXTSA9IDB4NDAsCisJTV9PZmZzZXRfQUlfQ29uZmlnX0ZJRk9fRGF0YSA9IDB4NWUsCisJTV9PZmZzZXRfSW50ZXJydXB0X0NfRW5hYmxlID0gMHg4OCwJLy8gd3JpdGUKKwlNX09mZnNldF9JbnRlcnJ1cHRfQ19TdGF0dXMgPSAweDg4LAkvLyByZWFkCisJTV9PZmZzZXRfQW5hbG9nX1RyaWdnZXJfQ29udHJvbCA9IDB4OGMsCisJTV9PZmZzZXRfQU9fU2VyaWFsX0ludGVycnVwdF9FbmFibGUgPSAweGEwLAorCU1fT2Zmc2V0X0FPX1NlcmlhbF9JbnRlcnJ1cHRfQWNrID0gMHhhMSwJLy8gd3JpdGUKKwlNX09mZnNldF9BT19TZXJpYWxfSW50ZXJydXB0X1N0YXR1cyA9IDB4YTEsCS8vIHJlYWQKKwlNX09mZnNldF9BT19DYWxpYnJhdGlvbiA9IDB4YTMsCisJTV9PZmZzZXRfQU9fRklGT19EYXRhID0gMHhhNCwKKwlNX09mZnNldF9QRklfRmlsdGVyID0gMHhiMCwKKwlNX09mZnNldF9SVFNJX0ZpbHRlciA9IDB4YjQsCisJTV9PZmZzZXRfU0NYSV9MZWdhY3lfQ29tcGF0aWJpbGl0eSA9IDB4YmMsCisJTV9PZmZzZXRfSW50ZXJydXB0X0FfQWNrID0gMHgxMDQsCS8vIHdyaXRlCisJTV9PZmZzZXRfQUlfU3RhdHVzXzEgPSAweDEwNCwJLy8gcmVhZAorCU1fT2Zmc2V0X0ludGVycnVwdF9CX0FjayA9IDB4MTA2LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1N0YXR1c18xID0gMHgxMDYsCS8vIHJlYWQKKwlNX09mZnNldF9BSV9Db21tYW5kXzIgPSAweDEwOCwJLy8gd3JpdGUKKwlNX09mZnNldF9HMDFfU3RhdHVzID0gMHgxMDgsCS8vIHJlYWQKKwlNX09mZnNldF9BT19Db21tYW5kXzIgPSAweDEwYSwKKwlNX09mZnNldF9BT19TdGF0dXNfMiA9IDB4MTBjLAkvLyByZWFkCisJTV9PZmZzZXRfRzBfQ29tbWFuZCA9IDB4MTBjLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0cxX0NvbW1hbmQgPSAweDEwZSwJLy8gd3JpdGUKKwlNX09mZnNldF9HMF9IV19TYXZlID0gMHgxMTAsCisJTV9PZmZzZXRfRzBfSFdfU2F2ZV9IaWdoID0gMHgxMTAsCisJTV9PZmZzZXRfQUlfQ29tbWFuZF8xID0gMHgxMTAsCisJTV9PZmZzZXRfRzBfSFdfU2F2ZV9Mb3cgPSAweDExMiwKKwlNX09mZnNldF9BT19Db21tYW5kXzEgPSAweDExMiwKKwlNX09mZnNldF9HMV9IV19TYXZlID0gMHgxMTQsCisJTV9PZmZzZXRfRzFfSFdfU2F2ZV9IaWdoID0gMHgxMTQsCisJTV9PZmZzZXRfRzFfSFdfU2F2ZV9Mb3cgPSAweDExNiwKKwlNX09mZnNldF9BSV9Nb2RlXzEgPSAweDExOCwKKwlNX09mZnNldF9HMF9TYXZlID0gMHgxMTgsCisJTV9PZmZzZXRfRzBfU2F2ZV9IaWdoID0gMHgxMTgsCisJTV9PZmZzZXRfQUlfTW9kZV8yID0gMHgxMWEsCisJTV9PZmZzZXRfRzBfU2F2ZV9Mb3cgPSAweDExYSwKKwlNX09mZnNldF9BSV9TSV9Mb2FkX0EgPSAweDExYywKKwlNX09mZnNldF9HMV9TYXZlID0gMHgxMWMsCisJTV9PZmZzZXRfRzFfU2F2ZV9IaWdoID0gMHgxMWMsCisJTV9PZmZzZXRfRzFfU2F2ZV9Mb3cgPSAweDExZSwKKwlNX09mZnNldF9BSV9TSV9Mb2FkX0IgPSAweDEyMCwJLy8gd3JpdGUKKwlNX09mZnNldF9BT19VSV9TYXZlID0gMHgxMjAsCS8vIHJlYWQKKwlNX09mZnNldF9BSV9TQ19Mb2FkX0EgPSAweDEyNCwJLy8gd3JpdGUKKwlNX09mZnNldF9BT19CQ19TYXZlID0gMHgxMjQsCS8vIHJlYWQKKwlNX09mZnNldF9BSV9TQ19Mb2FkX0IgPSAweDEyOCwJLy8gd3JpdGUKKwlNX09mZnNldF9BT19VQ19TYXZlID0gMHgxMjgsCS8vcmVhZAorCU1fT2Zmc2V0X0FJX1NJMl9Mb2FkX0EgPSAweDEyYywKKwlNX09mZnNldF9BSV9TSTJfTG9hZF9CID0gMHgxMzAsCisJTV9PZmZzZXRfRzBfTW9kZSA9IDB4MTM0LAorCU1fT2Zmc2V0X0cxX01vZGUgPSAweDEzNiwJLy8gd3JpdGUKKwlNX09mZnNldF9Kb2ludF9TdGF0dXNfMSA9IDB4MTM2LAkvLyByZWFkCisJTV9PZmZzZXRfRzBfTG9hZF9BID0gMHgxMzgsCisJTV9PZmZzZXRfSm9pbnRfU3RhdHVzXzIgPSAweDEzYSwKKwlNX09mZnNldF9HMF9Mb2FkX0IgPSAweDEzYywKKwlNX09mZnNldF9HMV9Mb2FkX0EgPSAweDE0MCwKKwlNX09mZnNldF9HMV9Mb2FkX0IgPSAweDE0NCwKKwlNX09mZnNldF9HMF9JbnB1dF9TZWxlY3QgPSAweDE0OCwKKwlNX09mZnNldF9HMV9JbnB1dF9TZWxlY3QgPSAweDE0YSwKKwlNX09mZnNldF9BT19Nb2RlXzEgPSAweDE0YywKKwlNX09mZnNldF9BT19Nb2RlXzIgPSAweDE0ZSwKKwlNX09mZnNldF9BT19VSV9Mb2FkX0EgPSAweDE1MCwKKwlNX09mZnNldF9BT19VSV9Mb2FkX0IgPSAweDE1NCwKKwlNX09mZnNldF9BT19CQ19Mb2FkX0EgPSAweDE1OCwKKwlNX09mZnNldF9BT19CQ19Mb2FkX0IgPSAweDE1YywKKwlNX09mZnNldF9BT19VQ19Mb2FkX0EgPSAweDE2MCwKKwlNX09mZnNldF9BT19VQ19Mb2FkX0IgPSAweDE2NCwKKwlNX09mZnNldF9DbG9ja19hbmRfRk9VVCA9IDB4MTcwLAorCU1fT2Zmc2V0X0lPX0JpZGlyZWN0aW9uX1BpbiA9IDB4MTcyLAorCU1fT2Zmc2V0X1JUU0lfVHJpZ19EaXJlY3Rpb24gPSAweDE3NCwKKwlNX09mZnNldF9JbnRlcnJ1cHRfQ29udHJvbCA9IDB4MTc2LAorCU1fT2Zmc2V0X0FJX091dHB1dF9Db250cm9sID0gMHgxNzgsCisJTV9PZmZzZXRfQW5hbG9nX1RyaWdnZXJfRXRjID0gMHgxN2EsCisJTV9PZmZzZXRfQUlfU1RBUlRfU1RPUF9TZWxlY3QgPSAweDE3YywKKwlNX09mZnNldF9BSV9UcmlnZ2VyX1NlbGVjdCA9IDB4MTdlLAorCU1fT2Zmc2V0X0FJX1NJX1NhdmUgPSAweDE4MCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FJX0RJVl9Mb2FkX0EgPSAweDE4MCwJLy8gd3JpdGUKKwlNX09mZnNldF9BSV9TQ19TYXZlID0gMHgxODQsCS8vIHJlYWQKKwlNX09mZnNldF9BT19TdGFydF9TZWxlY3QgPSAweDE4NCwJLy8gd3JpdGUKKwlNX09mZnNldF9BT19UcmlnZ2VyX1NlbGVjdCA9IDB4MTg2LAorCU1fT2Zmc2V0X0FPX01vZGVfMyA9IDB4MThjLAorCU1fT2Zmc2V0X0cwX0F1dG9pbmNyZW1lbnQgPSAweDE4OCwKKwlNX09mZnNldF9HMV9BdXRvaW5jcmVtZW50ID0gMHgxOGEsCisJTV9PZmZzZXRfSm9pbnRfUmVzZXQgPSAweDE5MCwKKwlNX09mZnNldF9JbnRlcnJ1cHRfQV9FbmFibGUgPSAweDE5MiwKKwlNX09mZnNldF9JbnRlcnJ1cHRfQl9FbmFibGUgPSAweDE5NiwKKwlNX09mZnNldF9BSV9QZXJzb25hbCA9IDB4MTlhLAorCU1fT2Zmc2V0X0FPX1BlcnNvbmFsID0gMHgxOWMsCisJTV9PZmZzZXRfUlRTSV9UcmlnX0FfT3V0cHV0ID0gMHgxOWUsCisJTV9PZmZzZXRfUlRTSV9UcmlnX0JfT3V0cHV0ID0gMHgxYTAsCisJTV9PZmZzZXRfUlRTSV9TaGFyZWRfTVVYID0gMHgxYTIsCisJTV9PZmZzZXRfQU9fT3V0cHV0X0NvbnRyb2wgPSAweDFhYywKKwlNX09mZnNldF9BSV9Nb2RlXzMgPSAweDFhZSwKKwlNX09mZnNldF9Db25maWd1cmF0aW9uX01lbW9yeV9DbGVhciA9IDB4MWE0LAorCU1fT2Zmc2V0X0FJX0ZJRk9fQ2xlYXIgPSAweDFhNiwKKwlNX09mZnNldF9BT19GSUZPX0NsZWFyID0gMHgxYTgsCisJTV9PZmZzZXRfRzBfQ291bnRpbmdfTW9kZSA9IDB4MWIwLAorCU1fT2Zmc2V0X0cxX0NvdW50aW5nX01vZGUgPSAweDFiMiwKKwlNX09mZnNldF9HMF9TZWNvbmRfR2F0ZSA9IDB4MWI0LAorCU1fT2Zmc2V0X0cxX1NlY29uZF9HYXRlID0gMHgxYjYsCisJTV9PZmZzZXRfRzBfRE1BX0NvbmZpZyA9IDB4MWI4LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0cwX0RNQV9TdGF0dXMgPSAweDFiOCwJLy8gcmVhZAorCU1fT2Zmc2V0X0cxX0RNQV9Db25maWcgPSAweDFiYSwJLy8gd3JpdGUKKwlNX09mZnNldF9HMV9ETUFfU3RhdHVzID0gMHgxYmEsCS8vIHJlYWQKKwlNX09mZnNldF9HMF9NU2VyaWVzX0FCWiA9IDB4MWMwLAorCU1fT2Zmc2V0X0cxX01TZXJpZXNfQUJaID0gMHgxYzIsCisJTV9PZmZzZXRfQ2xvY2tfYW5kX0ZvdXQyID0gMHgxYzQsCisJTV9PZmZzZXRfUExMX0NvbnRyb2wgPSAweDFjNiwKKwlNX09mZnNldF9QTExfU3RhdHVzID0gMHgxYzgsCisJTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3RfMSA9IDB4MWQwLAorCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0XzIgPSAweDFkMiwKKwlNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF8zID0gMHgxZDQsCisJTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3RfNCA9IDB4MWQ2LAorCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0XzUgPSAweDFkOCwKKwlNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF82ID0gMHgxZGEsCisJTV9PZmZzZXRfUEZJX0RJID0gMHgxZGMsCisJTV9PZmZzZXRfUEZJX0RPID0gMHgxZGUsCisJTV9PZmZzZXRfQUlfQ29uZmlnX0ZJRk9fQnlwYXNzID0gMHgyMTgsCisJTV9PZmZzZXRfU0NYSV9ESU9fRW5hYmxlID0gMHgyMWMsCisJTV9PZmZzZXRfQ0RJX0ZJRk9fRGF0YSA9IDB4MjIwLAkvLyByZWFkCisJTV9PZmZzZXRfQ0RPX0ZJRk9fRGF0YSA9IDB4MjIwLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0NESU9fU3RhdHVzID0gMHgyMjQsCS8vIHJlYWQKKwlNX09mZnNldF9DRElPX0NvbW1hbmQgPSAweDIyNCwJLy8gd3JpdGUKKwlNX09mZnNldF9DRElfTW9kZSA9IDB4MjI4LAorCU1fT2Zmc2V0X0NET19Nb2RlID0gMHgyMmMsCisJTV9PZmZzZXRfQ0RJX01hc2tfRW5hYmxlID0gMHgyMzAsCisJTV9PZmZzZXRfQ0RPX01hc2tfRW5hYmxlID0gMHgyMzQsCit9Oworc3RhdGljIGlubGluZSBpbnQgTV9PZmZzZXRfQU9fV2F2ZWZvcm1fT3JkZXIoaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDB4YzIgKyAweDQgKiBjaGFubmVsOworfTsKK3N0YXRpYyBpbmxpbmUgaW50IE1fT2Zmc2V0X0FPX0NvbmZpZ19CYW5rKGludCBjaGFubmVsKQoreworCXJldHVybiAweGMzICsgMHg0ICogY2hhbm5lbDsKK307CitzdGF0aWMgaW5saW5lIGludCBNX09mZnNldF9EQUNfRGlyZWN0X0RhdGEoaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDB4YzAgKyAweDQgKiBjaGFubmVsOworfQorc3RhdGljIGlubGluZSBpbnQgTV9PZmZzZXRfR2VuX1BXTShpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHg0NCArIDB4MiAqIGNoYW5uZWw7Cit9CitzdGF0aWMgaW5saW5lIGludCBNX09mZnNldF9TdGF0aWNfQUlfQ29udHJvbChpbnQgaSkKK3sKKwlpbnQgb2Zmc2V0W10gPSB7CisJCTB4NjQsCisJCTB4MjYxLAorCQkweDI2MiwKKwkJMHgyNjMsCisJfTsKKwlpZiAoKCh1bnNpZ25lZClpKSA+PSBzaXplb2Yob2Zmc2V0KSAvIHNpemVvZihvZmZzZXRbMF0pKSB7CisJCXJ0X3ByaW50aygiJXM6IGludmFsaWQgY2hhbm5lbD0laVxuIiwgX19GVU5DVElPTl9fLCBpKTsKKwkJcmV0dXJuIG9mZnNldFswXTsKKwl9CisJcmV0dXJuIG9mZnNldFtpXTsKK307CitzdGF0aWMgaW5saW5lIGludCBNX09mZnNldF9BT19SZWZlcmVuY2VfQXR0ZW51YXRpb24oaW50IGNoYW5uZWwpCit7CisJaW50IG9mZnNldFtdID0geworCQkweDI2NCwKKwkJMHgyNjUsCisJCTB4MjY2LAorCQkweDI2NworCX07CisJaWYgKCgodW5zaWduZWQpY2hhbm5lbCkgPj0gc2l6ZW9mKG9mZnNldCkgLyBzaXplb2Yob2Zmc2V0WzBdKSkgeworCQlydF9wcmludGsoIiVzOiBpbnZhbGlkIGNoYW5uZWw9JWlcbiIsIF9fRlVOQ1RJT05fXywgY2hhbm5lbCk7CisJCXJldHVybiBvZmZzZXRbMF07CisJfQorCXJldHVybiBvZmZzZXRbY2hhbm5lbF07Cit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdCh1bnNpZ25lZCBuKQoreworCWlmIChuIDwgMSB8fCBuID4gTlVNX1BGSV9PVVRQVVRfU0VMRUNUX1JFR1MpIHsKKwkJcnRfcHJpbnRrKCIlczogaW52YWxpZCBwZmkgb3V0cHV0IHNlbGVjdCByZWdpc3Rlcj0laVxuIiwKKwkJCV9fRlVOQ1RJT05fXywgbik7CisJCXJldHVybiBNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF8xOworCX0KKwlyZXR1cm4gTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3RfMSArIChuIC0gMSkgKiAyOworfQorCitlbnVtIE1TZXJpZXNfQUlfQ29uZmlnX0ZJRk9fRGF0YV9CaXRzIHsKKwlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfTWFzayA9IDB4NyA8PCA2LAorCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9DYWxpYnJhdGlvbl9CaXRzID0gMHgwLAorCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9EaWZmZXJlbnRpYWxfQml0cyA9IDB4MSA8PCA2LAorCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9Db21tb25fUmVmX0JpdHMgPSAweDIgPDwgNiwKKwlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfR3JvdW5kX1JlZl9CaXRzID0gMHgzIDw8IDYsCisJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0F1eF9CaXRzID0gMHg1IDw8IDYsCisJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0dob3N0X0JpdHMgPSAweDcgPDwgNiwKKwlNU2VyaWVzX0FJX0NvbmZpZ19Qb2xhcml0eV9CaXQgPSAweDEwMDAsCS8vIDAgZm9yIDIncyBjb21wbGVtZW50IGVuY29kaW5nCisJTVNlcmllc19BSV9Db25maWdfRGl0aGVyX0JpdCA9IDB4MjAwMCwKKwlNU2VyaWVzX0FJX0NvbmZpZ19MYXN0X0NoYW5uZWxfQml0ID0gMHg0MDAwLAorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9CaXRzKHVuc2lnbmVkIGNoYW5uZWwpCit7CisJcmV0dXJuIGNoYW5uZWwgJiAweGY7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfQUlfQ29uZmlnX0JhbmtfQml0cyhlbnVtIG5pX3JlZ190eXBlIHJlZ190eXBlLAorCXVuc2lnbmVkIGNoYW5uZWwpCit7CisJdW5zaWduZWQgYml0cyA9IGNoYW5uZWwgJiAweDMwOworCWlmIChyZWdfdHlwZSA9PSBuaV9yZWdfNjIyeCkgeworCQlpZiAoY2hhbm5lbCAmIDB4NDApCisJCQliaXRzIHw9IDB4NDAwOworCX0KKwlyZXR1cm4gYml0czsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19BSV9Db25maWdfR2Fpbl9CaXRzKHVuc2lnbmVkIHJhbmdlKQoreworCXJldHVybiAocmFuZ2UgJiAweDcpIDw8IDk7Cit9CisKK2VudW0gTVNlcmllc19DbG9ja19hbmRfRm91dDJfQml0cyB7CisJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9SVFNJMF9CaXRzID0gMHhiLAorCU1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfU3Rhcl9UcmlnZ2VyX0JpdHMgPSAweDE0LAorCU1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfUlRTSTdfQml0cyA9IDB4MWIsCisJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9QWElfQ2xvY2sxMCA9IDB4MWQsCisJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9NYXNrID0gMHgxZiwKKwlNU2VyaWVzX1RpbWViYXNlMV9TZWxlY3RfQml0ID0gMHgyMCwJLy8gdXNlIFBMTCBmb3IgdGltZWJhc2UgMQorCU1TZXJpZXNfVGltZWJhc2UzX1NlbGVjdF9CaXQgPSAweDQwLAkvLyB1c2UgUExMIGZvciB0aW1lYmFzZSAzCisJLyogdXNlIDEwTUh6IGluc3RlYWQgb2YgMjBNSHogZm9yIFJUU0kgY2xvY2sgZnJlcXVlbmN5LiAgQXBwZWFycworCSAgIHRvIGhhdmUgbm8gZWZmZWN0LCBhdCBsZWFzdCBvbiBweGktNjI4MSwgd2hpY2ggYWx3YXlzIHVzZXMKKwkgICAyME1IeiBydHNpIGNsb2NrIGZyZXF1ZW5jeSAqLworCU1TZXJpZXNfUlRTSV8xME1Iel9CaXQgPSAweDgwCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1JUU0lfQml0cyh1bnNpZ25lZAorCVJUU0lfY2hhbm5lbCkKK3sKKwlpZiAoUlRTSV9jaGFubmVsID4gNykgeworCQlydF9wcmludGsoIiVzOiBidWcsIGludmFsaWQgUlRTSV9jaGFubmVsPSVpXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlSVFNJX2NoYW5uZWwpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKFJUU0lfY2hhbm5lbCA9PSA3KQorCQlyZXR1cm4gTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9SVFNJN19CaXRzOworCWVsc2UKKwkJcmV0dXJuIE1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfUlRTSTBfQml0cyArIFJUU0lfY2hhbm5lbDsKK30KKworZW51bSBNU2VyaWVzX1BMTF9Db250cm9sX0JpdHMgeworCU1TZXJpZXNfUExMX0VuYWJsZV9CaXQgPSAweDEwMDAsCisJTVNlcmllc19QTExfVkNPX01vZGVfMjAwXzMyNU1Iel9CaXRzID0gMHgwLAorCU1TZXJpZXNfUExMX1ZDT19Nb2RlXzE3NV8yMjVNSHpfQml0cyA9IDB4MjAwMCwKKwlNU2VyaWVzX1BMTF9WQ09fTW9kZV8xMDBfMjI1TUh6X0JpdHMgPSAweDQwMDAsCisJTVNlcmllc19QTExfVkNPX01vZGVfNzVfMTUwTUh6X0JpdHMgPSAweDYwMDAsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BMTF9EaXZpc29yX0JpdHModW5zaWduZWQgZGl2aXNvcikKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X2Rpdmlzb3IgPSAweDEwOworCWlmIChkaXZpc29yIDwgMSB8fCBkaXZpc29yID4gbWF4X2Rpdmlzb3IpIHsKKwkJcnRfcHJpbnRrKCIlczogYnVnLCBpbnZhbGlkIGRpdmlzb3I9JWlcbiIsIF9fRlVOQ1RJT05fXywKKwkJCWRpdmlzb3IpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIChkaXZpc29yICYgMHhmKSA8PCA4OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BMTF9NdWx0aXBsaWVyX0JpdHModW5zaWduZWQgbXVsdGlwbGllcikKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X211bHRpcGxpZXIgPSAweDEwMDsKKwlpZiAobXVsdGlwbGllciA8IDEgfHwgbXVsdGlwbGllciA+IG1heF9tdWx0aXBsaWVyKSB7CisJCXJ0X3ByaW50aygiJXM6IGJ1ZywgaW52YWxpZCBtdWx0aXBsaWVyPSVpXG4iLCBfX0ZVTkNUSU9OX18sCisJCQltdWx0aXBsaWVyKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBtdWx0aXBsaWVyICYgMHhmZjsKK30KKworZW51bSBNU2VyaWVzX1BMTF9TdGF0dXMgeworCU1TZXJpZXNfUExMX0xvY2tlZF9CaXQgPSAweDEKK307CisKK2VudW0gTVNlcmllc19BSV9Db25maWdfRklGT19CeXBhc3NfQml0cyB7CisJTVNlcmllc19BSV9CeXBhc3NfQ2hhbm5lbF9NYXNrID0gMHg3LAorCU1TZXJpZXNfQUlfQnlwYXNzX0JhbmtfTWFzayA9IDB4NzgsCisJTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9Qb3NfTWFzayA9IDB4MzgwLAorCU1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfTmVnX01hc2sgPSAweDFjMDAsCisJTVNlcmllc19BSV9CeXBhc3NfTW9kZV9NdXhfTWFzayA9IDB4NjAwMCwKKwlNU2VyaWVzX0FPX0J5cGFzc19BT19DYWxfU2VsX01hc2sgPSAweDM4MDAwLAorCU1TZXJpZXNfQUlfQnlwYXNzX0dhaW5fTWFzayA9IDB4MWMwMDAwLAorCU1TZXJpZXNfQUlfQnlwYXNzX0RpdGhlcl9CaXQgPSAweDIwMDAwMCwKKwlNU2VyaWVzX0FJX0J5cGFzc19Qb2xhcml0eV9CaXQgPSAweDQwMDAwMCwJLy8gMCBmb3IgMidzIGNvbXBsZW1lbnQgZW5jb2RpbmcKKwlNU2VyaWVzX0FJX0J5cGFzc19Db25maWdfRklGT19CaXQgPSAweDgwMDAwMDAwCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX0FJX0J5cGFzc19DYWxfU2VsX1Bvc19CaXRzKGludAorCWNhbGlicmF0aW9uX3NvdXJjZSkKK3sKKwlyZXR1cm4gKGNhbGlicmF0aW9uX3NvdXJjZSA8PCA3KSAmIE1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfUG9zX01hc2s7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfTmVnX0JpdHMoaW50CisJY2FsaWJyYXRpb25fc291cmNlKQoreworCXJldHVybiAoY2FsaWJyYXRpb25fc291cmNlIDw8IDEwKSAmIE1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfUG9zX01hc2s7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfQUlfQnlwYXNzX0dhaW5fQml0cyhpbnQgZ2FpbikKK3sKKwlyZXR1cm4gKGdhaW4gPDwgMTgpICYgTVNlcmllc19BSV9CeXBhc3NfR2Fpbl9NYXNrOworfQorCitlbnVtIE1TZXJpZXNfQU9fQ29uZmlnX0JhbmtfQml0cyB7CisJTVNlcmllc19BT19EQUNfT2Zmc2V0X1NlbGVjdF9NYXNrID0gMHg3LAorCU1TZXJpZXNfQU9fREFDX09mZnNldF8wVl9CaXRzID0gMHgwLAorCU1TZXJpZXNfQU9fREFDX09mZnNldF81Vl9CaXRzID0gMHgxLAorCU1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV9NYXNrID0gMHgzOCwKKwlNU2VyaWVzX0FPX0RBQ19SZWZlcmVuY2VfMTBWX0ludGVybmFsX0JpdHMgPSAweDAsCisJTVNlcmllc19BT19EQUNfUmVmZXJlbmNlXzVWX0ludGVybmFsX0JpdHMgPSAweDgsCisJTVNlcmllc19BT19VcGRhdGVfVGltZWRfQml0ID0gMHg0MCwKKwlNU2VyaWVzX0FPX0JpcG9sYXJfQml0ID0gMHg4MAkvLyB0dXJucyBvbiAyJ3MgY29tcGxlbWVudCBlbmNvZGluZworfTsKKworZW51bSBNU2VyaWVzX0FPX1JlZmVyZW5jZV9BdHRlbnVhdGlvbl9CaXRzIHsKKwlNU2VyaWVzX0F0dGVudWF0ZV94NV9CaXQgPSAweDEKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19DYWxfUFdNX0hpZ2hfVGltZV9CaXRzKHVuc2lnbmVkIGNvdW50KQoreworCXJldHVybiAoY291bnQgPDwgMTYpICYgMHhmZmZmMDAwMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX0NhbF9QV01fTG93X1RpbWVfQml0cyh1bnNpZ25lZCBjb3VudCkKK3sKKwlyZXR1cm4gY291bnQgJiAweGZmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19QRklfT3V0cHV0X1NlbGVjdF9NYXNrKHVuc2lnbmVkIGNoYW5uZWwpCit7CisJcmV0dXJuIDB4MWYgPDwgKGNoYW5uZWwgJSAzKSAqIDU7Cit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X0JpdHModW5zaWduZWQgY2hhbm5lbCwKKwl1bnNpZ25lZCBzb3VyY2UpCit7CisJcmV0dXJuIChzb3VyY2UgJiAweDFmKSA8PCAoKGNoYW5uZWwgJSAzKSAqIDUpOworfTsKKworLy8gaW52ZXJzZSB0byBNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X0JpdHMKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19QRklfT3V0cHV0X1NlbGVjdF9Tb3VyY2UodW5zaWduZWQgY2hhbm5lbCwKKwl1bnNpZ25lZCBiaXRzKQoreworCXJldHVybiAoYml0cyA+PiAoKGNoYW5uZWwgJSAzKSAqIDUpKSAmIDB4MWY7Cit9OworCitlbnVtIE1TZXJpZXNfR2lfRE1BX0NvbmZpZ19CaXRzIHsKKwlHaV9ETUFfQmFua1NXX0Vycm9yX0JpdCA9IDB4MTAsCisJR2lfRE1BX1Jlc2V0X0JpdCA9IDB4OCwKKwlHaV9ETUFfSW50X0VuYWJsZV9CaXQgPSAweDQsCisJR2lfRE1BX1dyaXRlX0JpdCA9IDB4MiwKKwlHaV9ETUFfRW5hYmxlX0JpdCA9IDB4MSwKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19QRklfRmlsdGVyX1NlbGVjdF9NYXNrKHVuc2lnbmVkIGNoYW5uZWwpCit7CisJcmV0dXJuIDB4MyA8PCAoY2hhbm5lbCAqIDIpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BGSV9GaWx0ZXJfU2VsZWN0X0JpdHModW5zaWduZWQgY2hhbm5lbCwKKwl1bnNpZ25lZCBmaWx0ZXIpCit7CisJcmV0dXJuIChmaWx0ZXIgPDwgKGNoYW5uZWwgKgorCQkJMikpICYgTVNlcmllc19QRklfRmlsdGVyX1NlbGVjdF9NYXNrKGNoYW5uZWwpOworfQorCitlbnVtIENESU9fRE1BX1NlbGVjdF9CaXRzIHsKKwlDRElfRE1BX1NlbGVjdF9TaGlmdCA9IDAsCisJQ0RJX0RNQV9TZWxlY3RfTWFzayA9IDB4ZiwKKwlDRE9fRE1BX1NlbGVjdF9TaGlmdCA9IDQsCisJQ0RPX0RNQV9TZWxlY3RfTWFzayA9IDB4ZiA8PCBDRE9fRE1BX1NlbGVjdF9TaGlmdAorfTsKKworZW51bSBDRElPX1N0YXR1c19CaXRzIHsKKwlDRE9fRklGT19FbXB0eV9CaXQgPSAweDEsCisJQ0RPX0ZJRk9fRnVsbF9CaXQgPSAweDIsCisJQ0RPX0ZJRk9fUmVxdWVzdF9CaXQgPSAweDQsCisJQ0RPX092ZXJydW5fQml0ID0gMHg4LAorCUNET19VbmRlcmZsb3dfQml0ID0gMHgxMCwKKwlDRElfRklGT19FbXB0eV9CaXQgPSAweDEwMDAwLAorCUNESV9GSUZPX0Z1bGxfQml0ID0gMHgyMDAwMCwKKwlDRElfRklGT19SZXF1ZXN0X0JpdCA9IDB4NDAwMDAsCisJQ0RJX092ZXJydW5fQml0ID0gMHg4MDAwMCwKKwlDRElfT3ZlcmZsb3dfQml0ID0gMHgxMDAwMDAKK307CisKK2VudW0gQ0RJT19Db21tYW5kX0JpdHMgeworCUNET19EaXNhcm1fQml0ID0gMHgxLAorCUNET19Bcm1fQml0ID0gMHgyLAorCUNESV9EaXNhcm1fQml0ID0gMHg0LAorCUNESV9Bcm1fQml0ID0gMHg4LAorCUNET19SZXNldF9CaXQgPSAweDEwLAorCUNESV9SZXNldF9CaXQgPSAweDIwLAorCUNET19FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlX1NldF9CaXQgPSAweDQwLAorCUNET19FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCA9IDB4ODAsCisJQ0RJX0Vycm9yX0ludGVycnVwdF9FbmFibGVfU2V0X0JpdCA9IDB4MTAwLAorCUNESV9FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCA9IDB4MjAwLAorCUNET19GSUZPX1JlcXVlc3RfSW50ZXJydXB0X0VuYWJsZV9TZXRfQml0ID0gMHg0MDAsCisJQ0RPX0ZJRk9fUmVxdWVzdF9JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCA9IDB4ODAwLAorCUNESV9GSUZPX1JlcXVlc3RfSW50ZXJydXB0X0VuYWJsZV9TZXRfQml0ID0gMHgxMDAwLAorCUNESV9GSUZPX1JlcXVlc3RfSW50ZXJydXB0X0VuYWJsZV9DbGVhcl9CaXQgPSAweDIwMDAsCisJQ0RPX0Vycm9yX0ludGVycnVwdF9Db25maXJtX0JpdCA9IDB4NDAwMCwKKwlDRElfRXJyb3JfSW50ZXJydXB0X0NvbmZpcm1fQml0ID0gMHg4MDAwLAorCUNET19FbXB0eV9GSUZPX0ludGVycnVwdF9FbmFibGVfU2V0X0JpdCA9IDB4MTAwMDAsCisJQ0RPX0VtcHR5X0ZJRk9fSW50ZXJydXB0X0VuYWJsZV9DbGVhcl9CaXQgPSAweDIwMDAwLAorCUNET19TV19VcGRhdGVfQml0ID0gMHg4MDAwMCwKKwlDRElfU1dfVXBkYXRlX0JpdCA9IDB4MTAwMDAwCit9OworCitlbnVtIENESV9Nb2RlX0JpdHMgeworCUNESV9TYW1wbGVfU291cmNlX1NlbGVjdF9NYXNrID0gMHgzZiwKKwlDRElfSGFsdF9Pbl9FcnJvcl9CaXQgPSAweDIwMCwKKwlDRElfUG9sYXJpdHlfQml0ID0gMHg0MDAsCS8vIHNhbXBsZSBjbG9jayBvbiBmYWxsaW5nIGVkZ2UKKwlDRElfRklGT19Nb2RlX0JpdCA9IDB4ODAwLAkvLyBzZXQgZm9yIGhhbGYgZnVsbCBtb2RlLCBjbGVhciBmb3Igbm90IGVtcHR5IG1vZGUKKwlDRElfRGF0YV9MYW5lX01hc2sgPSAweDMwMDAsCS8vIGRhdGEgbGFuZXMgc3BlY2lmeSB3aGljaCBkaW8gY2hhbm5lbHMgbWFwIHRvIGJ5dGUgb3Igd29yZCBhY2Nlc3NlcyB0byB0aGUgZGlvIGZpZm9zCisJQ0RJX0RhdGFfTGFuZV8wXzE1X0JpdHMgPSAweDAsCisJQ0RJX0RhdGFfTGFuZV8xNl8zMV9CaXRzID0gMHgxMDAwLAorCUNESV9EYXRhX0xhbmVfMF83X0JpdHMgPSAweDAsCisJQ0RJX0RhdGFfTGFuZV84XzE1X0JpdHMgPSAweDEwMDAsCisJQ0RJX0RhdGFfTGFuZV8xNl8yM19CaXRzID0gMHgyMDAwLAorCUNESV9EYXRhX0xhbmVfMjRfMzFfQml0cyA9IDB4MzAwMAorfTsKKworZW51bSBDRE9fTW9kZV9CaXRzIHsKKwlDRE9fU2FtcGxlX1NvdXJjZV9TZWxlY3RfTWFzayA9IDB4M2YsCisJQ0RPX1JldHJhbnNtaXRfQml0ID0gMHgxMDAsCisJQ0RPX0hhbHRfT25fRXJyb3JfQml0ID0gMHgyMDAsCisJQ0RPX1BvbGFyaXR5X0JpdCA9IDB4NDAwLAkvLyBzYW1wbGUgY2xvY2sgb24gZmFsbGluZyBlZGdlCisJQ0RPX0ZJRk9fTW9kZV9CaXQgPSAweDgwMCwJLy8gc2V0IGZvciBoYWxmIGZ1bGwgbW9kZSwgY2xlYXIgZm9yIG5vdCBmdWxsIG1vZGUKKwlDRE9fRGF0YV9MYW5lX01hc2sgPSAweDMwMDAsCS8vIGRhdGEgbGFuZXMgc3BlY2lmeSB3aGljaCBkaW8gY2hhbm5lbHMgbWFwIHRvIGJ5dGUgb3Igd29yZCBhY2Nlc3NlcyB0byB0aGUgZGlvIGZpZm9zCisJQ0RPX0RhdGFfTGFuZV8wXzE1X0JpdHMgPSAweDAsCisJQ0RPX0RhdGFfTGFuZV8xNl8zMV9CaXRzID0gMHgxMDAwLAorCUNET19EYXRhX0xhbmVfMF83X0JpdHMgPSAweDAsCisJQ0RPX0RhdGFfTGFuZV84XzE1X0JpdHMgPSAweDEwMDAsCisJQ0RPX0RhdGFfTGFuZV8xNl8yM19CaXRzID0gMHgyMDAwLAorCUNET19EYXRhX0xhbmVfMjRfMzFfQml0cyA9IDB4MzAwMAorfTsKKworZW51bSBJbnRlcnJ1cHRfQ19FbmFibGVfQml0cyB7CisJSW50ZXJydXB0X0dyb3VwX0NfRW5hYmxlX0JpdCA9IDB4MQorfTsKKworZW51bSBJbnRlcnJ1cHRfQ19TdGF0dXNfQml0cyB7CisJSW50ZXJydXB0X0dyb3VwX0NfU3RhdHVzX0JpdCA9IDB4MQorfTsKKworI2RlZmluZSBNX1NFUklFU19FRVBST01fU0laRSAxMDI0CisKK3R5cGVkZWYgc3RydWN0IG5pX2JvYXJkX3N0cnVjdCB7CisJaW50IGRldmljZV9pZDsKKwlpbnQgaXNhcG5wX2lkOworCWNoYXIgKm5hbWU7CisKKwlpbnQgbl9hZGNoYW47CisJaW50IGFkYml0czsKKworCWludCBhaV9maWZvX2RlcHRoOworCXVuc2lnbmVkIGludCBhbHdheXNkaXRoZXI6MTsKKwlpbnQgZ2FpbmxrdXA7CisJaW50IGFpX3NwZWVkOworCisJaW50IG5fYW9jaGFuOworCWludCBhb2JpdHM7CisJaW50IGFvX2ZpZm9fZGVwdGg7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX3RhYmxlOworCXVuc2lnbmVkIGFvX3NwZWVkOworCisJdW5zaWduZWQgbnVtX3AwX2Rpb19jaGFubmVsczsKKworCWludCByZWdfdHlwZTsKKwl1bnNpZ25lZCBpbnQgYW9fdW5pcG9sYXI6MTsKKwl1bnNpZ25lZCBpbnQgaGFzXzgyNTU6MTsKKwl1bnNpZ25lZCBpbnQgaGFzX2FuYWxvZ190cmlnOjE7CisKKwllbnVtIGNhbGRhY19lbnVtIGNhbGRhY1szXTsKK30gbmlfYm9hcmQ7CisKKyNkZWZpbmUgbl9uaV9ib2FyZHMgIChzaXplb2YobmlfYm9hcmRzKS9zaXplb2YobmlfYm9hcmQpKQorCisjZGVmaW5lIGJvYXJkdHlwZSAoKihuaV9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisjZGVmaW5lIE1BWF9OX0FPX0NIQU4gOAorI2RlZmluZSBOVU1fR1BDVCAyCisKKyNkZWZpbmUgTklfUFJJVkFURV9DT01NT04JCQkJCVwKKwl1aW50MTZfdCAoKnN0Y19yZWFkdykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgaW50IHJlZ2lzdGVyKTsJXAorCXVpbnQzMl90ICgqc3RjX3JlYWRsKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgcmVnaXN0ZXIpOwlcCisJdm9pZCAoKnN0Y193cml0ZXcpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IHZhbHVlLCBpbnQgcmVnaXN0ZXIpOwlcCisJdm9pZCAoKnN0Y193cml0ZWwpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQzMl90IHZhbHVlLCBpbnQgcmVnaXN0ZXIpOwlcCisJXAorCXVuc2lnbmVkIHNob3J0IGRpb19vdXRwdXQ7CQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBkaW9fY29udHJvbDsJCQkJXAorCWludCBhbzBwLGFvMXA7CQkJCQkJXAorCWludCBsYXN0Y2hhbjsJCQkJCQlcCisJaW50IGxhc3RfZG87CQkJCQkJXAorCWludCBydF9pcnE7CQkJCQkJXAorCWludCBpcnFtYXNrOwkJCQkJCVwKKwlpbnQgYWltb2RlOwkJCQkJCVwKKwlpbnQgYWlfY29udGludW91czsJCQkJCVwKKwlpbnQgYmxvY2tzaXplOwkJCQkJCVwKKwlpbnQgbl9sZWZ0OwkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgYWlfY2FsaWJfc291cmNlOwkJCQlcCisJdW5zaWduZWQgaW50IGFpX2NhbGliX3NvdXJjZV9lbmFibGVkOwkJCVwKKwlzcGlubG9ja190IHdpbmRvd19sb2NrOyBcCisJc3BpbmxvY2tfdCBzb2Z0X3JlZ19jb3B5X2xvY2s7IFwKKwlzcGlubG9ja190IG1pdGVfY2hhbm5lbF9sb2NrOyBcCisJCQkJCQkJCVwKKwlpbnQgY2hhbmdhaW5fc3RhdGU7CQkJCQlcCisJdW5zaWduZWQgaW50IGNoYW5nYWluX3NwZWM7CQkJCVwKKwkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBjYWxkYWNfbWF4ZGF0YV9saXN0W01BWF9OX0NBTERBQ1NdOwlcCisJdW5zaWduZWQgc2hvcnQgYW9bTUFYX05fQU9fQ0hBTl07CQkJCQlcCisJdW5zaWduZWQgc2hvcnQgY2FsZGFjc1tNQVhfTl9DQUxEQUNTXTsJCQkJXAorCQkJCQkJCQlcCisJdW5zaWduZWQgc2hvcnQgYWlfY21kMjsJXAorCQkJCQkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fY29uZltNQVhfTl9BT19DSEFOXTsJCQkJXAorCXVuc2lnbmVkIHNob3J0IGFvX21vZGUxOwkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fbW9kZTI7CQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhb19tb2RlMzsJCQkJXAorCXVuc2lnbmVkIHNob3J0IGFvX2NtZDE7CQkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fY21kMjsJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhb19jbWQzOwkJCQkJXAorCXVuc2lnbmVkIHNob3J0IGFvX3RyaWdnZXJfc2VsZWN0OwkJCVwKKwkJCQkJCQkJXAorCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXY7CVwKKwl1bnNpZ25lZCBzaG9ydCBhbl90cmlnX2V0Y19yZWc7CQkJCVwKKwkJCQkJCQkJXAorCXVuc2lnbmVkIGFpX29mZnNldFs1MTJdOwkJCQlcCisJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIHNlcmlhbF9pbnRlcnZhbF9uczsgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBjaGFyIHNlcmlhbF9od19tb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1bnNpZ25lZCBzaG9ydCBjbG9ja19hbmRfZm91dDsJCQkJXAorCXVuc2lnbmVkIHNob3J0IGNsb2NrX2FuZF9mb3V0MjsJCQkJXAorCQkJCQkJCQlcCisJdW5zaWduZWQgc2hvcnQgaW50X2FfZW5hYmxlX3JlZzsJCQlcCisJdW5zaWduZWQgc2hvcnQgaW50X2JfZW5hYmxlX3JlZzsJCQlcCisJdW5zaWduZWQgc2hvcnQgaW9fYmlkaXJlY3Rpb25fcGluX3JlZzsJCQlcCisJdW5zaWduZWQgc2hvcnQgcnRzaV90cmlnX2RpcmVjdGlvbl9yZWc7CQkJXAorCXVuc2lnbmVkIHNob3J0IHJ0c2lfdHJpZ19hX291dHB1dF9yZWc7IFwKKwl1bnNpZ25lZCBzaG9ydCBydHNpX3RyaWdfYl9vdXRwdXRfcmVnOyBcCisJdW5zaWduZWQgc2hvcnQgcGZpX291dHB1dF9zZWxlY3RfcmVnW05VTV9QRklfT1VUUFVUX1NFTEVDVF9SRUdTXTsgXAorCXVuc2lnbmVkIHNob3J0IGFpX2FvX3NlbGVjdF9yZWc7IFwKKwl1bnNpZ25lZCBzaG9ydCBnMF9nMV9zZWxlY3RfcmVnOyBcCisJdW5zaWduZWQgc2hvcnQgY2Rpb19kbWFfc2VsZWN0X3JlZzsgXAorCVwKKwl1bnNpZ25lZCBjbG9ja19uczsgXAorCXVuc2lnbmVkIGNsb2NrX3NvdXJjZTsgXAorCVwKKwl1bnNpZ25lZCBzaG9ydCBhdHJpZ19tb2RlOwkJCQlcCisJdW5zaWduZWQgc2hvcnQgYXRyaWdfaGlnaDsJCQkJXAorCXVuc2lnbmVkIHNob3J0IGF0cmlnX2xvdzsJCQkJXAorCVwKKwl1bnNpZ25lZCBzaG9ydCBwd21fdXBfY291bnQ7CVwKKwl1bnNpZ25lZCBzaG9ydCBwd21fZG93bl9jb3VudDsJXAorCVwKKwlzaG9ydCBhaV9maWZvX2J1ZmZlclsweDIwMDBdOwkJCQlcCisJdWludDhfdCBlZXByb21fYnVmZmVyW01fU0VSSUVTX0VFUFJPTV9TSVpFXTsgXAorCXVpbnQzMl90IHNlcmlhbF9udW1iZXI7IFwKKwlcCisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOyBcCisJc3RydWN0IG1pdGVfY2hhbm5lbCAqYWlfbWl0ZV9jaGFuOyBcCisJc3RydWN0IG1pdGVfY2hhbm5lbCAqYW9fbWl0ZV9jaGFuO1wKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICpjZG9fbWl0ZV9jaGFuO1wKKwlzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICphaV9taXRlX3Jpbmc7IFwKKwlzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICphb19taXRlX3Jpbmc7IFwKKwlzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICpjZG9fbWl0ZV9yaW5nOyBcCisJc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqZ3BjdF9taXRlX3JpbmdbTlVNX0dQQ1RdOworCisjZW5kaWYgLyogX0NPTUVESV9OSV9TVENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTk1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMKQEAgLTAsMCArMSwxNjkxIEBACisvKgorICBjb21lZGkvZHJpdmVycy9uaV90aW8uYworICBTdXBwb3J0IGZvciBOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMKKworICBDb3B5cmlnaHQgKEMpIDIwMDYgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCitEcml2ZXI6IG5pX3RpbworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycworRGV2aWNlczoKK0F1dGhvcjogSi5QLiBNZWxsb3IgPGpwbWVsbG9yQHJvc2UtaHVsbWFuLmVkdT4sCisJSGVybWFuLkJydXluaW5ja3hAbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlXaW0uTWVldXNzZW5AbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlLbGFhcy5HYWRleW5lQG1lY2gua3VsZXV2ZW4uYWMuYmUsCisJRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorVXBkYXRlZDogVGh1IE5vdiAxNiAwOTo1MDozMiBFU1QgMjAwNgorU3RhdHVzOiB3b3JrcworCitUaGlzIG1vZHVsZSBpcyBub3QgdXNlZCBkaXJlY3RseSBieSBlbmQtdXNlcnMuICBSYXRoZXIsIGl0CitpcyB1c2VkIGJ5IG90aGVyIGRyaXZlcnMgKGZvciBleGFtcGxlIG5pXzY2MHggYW5kIG5pX3BjaW1pbykKK3RvIHByb3ZpZGUgc3VwcG9ydCBmb3IgTkkncyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMuICBJdCB3YXMKK29yaWdpbmFsbHkgYmFzZWQgb24gdGhlIGNvdW50ZXIgY29kZSBmcm9tIG5pXzY2MHguYyBhbmQKK25pX21pb19jb21tb24uYy4KKworUmVmZXJlbmNlczoKK0RBUSA2NjB4IFJlZ2lzdGVyLUxldmVsIFByb2dyYW1tZXIgTWFudWFsICAoTkkgMzcwNTA1QS0wMSkKK0RBUSA2NjAxLzY2MDIgVXNlciBNYW51YWwgKE5JIDMyMjEzN0ItMDEpCiszNDA5MzRiLnBkZiAgREFRLVNUQyByZWZlcmVuY2UgbWFudWFsCisKKyovCisvKgorVE9ETzoKKwlTdXBwb3J0IHVzZSBvZiBib3RoIGJhbmtzIFggYW5kIFkKKyovCisKKyNpbmNsdWRlICJuaV90aW9faW50ZXJuYWwuaCIKKworc3RhdGljIHVpbnQ2NF90IG5pX3Rpb19jbG9ja19wZXJpb2RfcHMoY29uc3Qgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJdW5zaWduZWQgZ2VuZXJpY19jbG9ja19zb3VyY2UpOworc3RhdGljIHVuc2lnbmVkIG5pX3Rpb19nZW5lcmljX2Nsb2NrX3NyY19zZWxlY3QoY29uc3Qgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgPGNvbWVkaUBjb21lZGkub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgc3VwcG9ydCBmb3IgTkkgZ2VuZXJhbC1wdXJwb3NlIGNvdW50ZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbmxpbmUgZW51bSBHaV9Db3VudGluZ19Nb2RlX1JlZ19CaXRzIEdpX0FsdGVybmF0ZV9TeW5jX0JpdChlbnVtCisJbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQpCit7CisJc3dpdGNoICh2YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJcmV0dXJuIEdpX01fU2VyaWVzX0FsdGVybmF0ZV9TeW5jX0JpdDsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJcmV0dXJuIEdpXzY2MHhfQWx0ZXJuYXRlX1N5bmNfQml0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBlbnVtIEdpX0NvdW50aW5nX01vZGVfUmVnX0JpdHMgR2lfUHJlc2NhbGVfWDJfQml0KGVudW0KKwluaV9ncGN0X3ZhcmlhbnQgdmFyaWFudCkKK3sKKwlzd2l0Y2ggKHZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQlyZXR1cm4gR2lfTV9TZXJpZXNfUHJlc2NhbGVfWDJfQml0OworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQlyZXR1cm4gR2lfNjYweF9QcmVzY2FsZV9YMl9CaXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR2lfQ291bnRpbmdfTW9kZV9SZWdfQml0cyBHaV9QcmVzY2FsZV9YOF9CaXQoZW51bQorCW5pX2dwY3RfdmFyaWFudCB2YXJpYW50KQoreworCXN3aXRjaCAodmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJCXJldHVybiBHaV9NX1Nlcmllc19QcmVzY2FsZV9YOF9CaXQ7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXJldHVybiBHaV82NjB4X1ByZXNjYWxlX1g4X0JpdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBHaV9Db3VudGluZ19Nb2RlX1JlZ19CaXRzIEdpX0hXX0FybV9TZWxlY3RfTWFzayhlbnVtCisJbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQpCit7CisJc3dpdGNoICh2YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJcmV0dXJuIEdpX01fU2VyaWVzX0hXX0FybV9TZWxlY3RfTWFzazsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJcmV0dXJuIEdpXzY2MHhfSFdfQXJtX1NlbGVjdF9NYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKiBjbG9jayBzb3VyY2VzIGZvciBuaV82NjB4IGJvYXJkcywgZ2V0IGJpdHMgd2l0aCBHaV9Tb3VyY2VfU2VsZWN0X0JpdHMoKSAqLworZW51bSBuaV82NjB4X2Nsb2NrX3NvdXJjZSB7CisJTklfNjYweF9UaW1lYmFzZV8xX0Nsb2NrID0gMHgwLAkvKiAyME1IeiAqLworCU5JXzY2MHhfU291cmNlX1Bpbl9pX0Nsb2NrID0gMHgxLAorCU5JXzY2MHhfTmV4dF9HYXRlX0Nsb2NrID0gMHhhLAorCU5JXzY2MHhfVGltZWJhc2VfMl9DbG9jayA9IDB4MTIsCS8qIDEwMEtIeiAqLworCU5JXzY2MHhfTmV4dF9UQ19DbG9jayA9IDB4MTMsCisJTklfNjYweF9UaW1lYmFzZV8zX0Nsb2NrID0gMHgxZSwJLyogODBNSHogKi8KKwlOSV82NjB4X0xvZ2ljX0xvd19DbG9jayA9IDB4MWYsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCA9IDY7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JXzY2MHhfUlRTSV9DbG9jayh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKTsKKwlyZXR1cm4gKDB4YiArIG4pOworfQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5pXzY2MHhfbWF4X3NvdXJjZV9waW4gPSA3Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV82NjB4X1NvdXJjZV9QaW5fQ2xvY2sodW5zaWduZWQgbikKK3sKKwlCVUdfT04obiA+IG5pXzY2MHhfbWF4X3NvdXJjZV9waW4pOworCXJldHVybiAoMHgyICsgbik7Cit9CisKKy8qIGNsb2NrIHNvdXJjZXMgZm9yIG5pIGUgYW5kIG0gc2VyaWVzIGJvYXJkcywgZ2V0IGJpdHMgd2l0aCBHaV9Tb3VyY2VfU2VsZWN0X0JpdHMoKSAqLworZW51bSBuaV9tX3Nlcmllc19jbG9ja19zb3VyY2UgeworCU5JX01fU2VyaWVzX1RpbWViYXNlXzFfQ2xvY2sgPSAweDAsCS8qIDIwTUh6ICovCisJTklfTV9TZXJpZXNfVGltZWJhc2VfMl9DbG9jayA9IDB4MTIsCS8qIDEwMEtIeiAqLworCU5JX01fU2VyaWVzX05leHRfVENfQ2xvY2sgPSAweDEzLAorCU5JX01fU2VyaWVzX05leHRfR2F0ZV9DbG9jayA9IDB4MTQsCS8qIHdoZW4gR2lfU3JjX1N1YlNlbGVjdCA9IDAgKi8KKwlOSV9NX1Nlcmllc19QWElfU3Rhcl9UcmlnZ2VyX0Nsb2NrID0gMHgxNCwJLyogd2hlbiBHaV9TcmNfU3ViU2VsZWN0ID0gMSAqLworCU5JX01fU2VyaWVzX1BYSTEwX0Nsb2NrID0gMHgxZCwKKwlOSV9NX1Nlcmllc19UaW1lYmFzZV8zX0Nsb2NrID0gMHgxZSwJLyogODBNSHosIHdoZW4gR2lfU3JjX1N1YlNlbGVjdCA9IDAgKi8KKwlOSV9NX1Nlcmllc19BbmFsb2dfVHJpZ2dlcl9PdXRfQ2xvY2sgPSAweDFlLAkvKiB3aGVuIEdpX1NyY19TdWJTZWxlY3QgPSAxICovCisJTklfTV9TZXJpZXNfTG9naWNfTG93X0Nsb2NrID0gMHgxZiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsID0gMTU7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JX01fU2VyaWVzX1BGSV9DbG9jayh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsKTsKKwlpZiAobiA8IDEwKQorCQlyZXR1cm4gMSArIG47CisJZWxzZQorCQlyZXR1cm4gMHhiICsgbjsKK30KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsID0gNzsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfTV9TZXJpZXNfUlRTSV9DbG9jayh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbCk7CisJaWYgKG4gPT0gNykKKwkJcmV0dXJuIDB4MWI7CisJZWxzZQorCQlyZXR1cm4gMHhiICsgbjsKK30KKworZW51bSBuaV82NjB4X2dhdGVfc2VsZWN0IHsKKwlOSV82NjB4X1NvdXJjZV9QaW5faV9HYXRlX1NlbGVjdCA9IDB4MCwKKwlOSV82NjB4X0dhdGVfUGluX2lfR2F0ZV9TZWxlY3QgPSAweDEsCisJTklfNjYweF9OZXh0X1NSQ19HYXRlX1NlbGVjdCA9IDB4YSwKKwlOSV82NjB4X05leHRfT3V0X0dhdGVfU2VsZWN0ID0gMHgxNCwKKwlOSV82NjB4X0xvZ2ljX0xvd19HYXRlX1NlbGVjdCA9IDB4MWYsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5pXzY2MHhfbWF4X2dhdGVfcGluID0gNzsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfNjYweF9HYXRlX1Bpbl9HYXRlX1NlbGVjdCh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfNjYweF9tYXhfZ2F0ZV9waW4pOworCXJldHVybiAweDIgKyBuOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV82NjB4X1JUU0lfR2F0ZV9TZWxlY3QodW5zaWduZWQgbikKK3sKKwlCVUdfT04obiA+IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCk7CisJcmV0dXJuIDB4YiArIG47Cit9CisKK2VudW0gbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QgeworCU5JX01fU2VyaWVzX1RpbWVzdGFtcF9NdXhfR2F0ZV9TZWxlY3QgPSAweDAsCisJTklfTV9TZXJpZXNfQUlfU1RBUlQyX0dhdGVfU2VsZWN0ID0gMHgxMiwKKwlOSV9NX1Nlcmllc19QWElfU3Rhcl9UcmlnZ2VyX0dhdGVfU2VsZWN0ID0gMHgxMywKKwlOSV9NX1Nlcmllc19OZXh0X091dF9HYXRlX1NlbGVjdCA9IDB4MTQsCisJTklfTV9TZXJpZXNfQUlfU1RBUlQxX0dhdGVfU2VsZWN0ID0gMHgxYywKKwlOSV9NX1Nlcmllc19OZXh0X1NSQ19HYXRlX1NlbGVjdCA9IDB4MWQsCisJTklfTV9TZXJpZXNfQW5hbG9nX1RyaWdnZXJfT3V0X0dhdGVfU2VsZWN0ID0gMHgxZSwKKwlOSV9NX1Nlcmllc19Mb2dpY19Mb3dfR2F0ZV9TZWxlY3QgPSAweDFmLAorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfTV9TZXJpZXNfUlRTSV9HYXRlX1NlbGVjdCh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbCk7CisJaWYgKG4gPT0gNykKKwkJcmV0dXJuIDB4MWI7CisJcmV0dXJuIDB4YiArIG47Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JX01fU2VyaWVzX1BGSV9HYXRlX1NlbGVjdCh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsKTsKKwlpZiAobiA8IDEwKQorCQlyZXR1cm4gMSArIG47CisJcmV0dXJuIDB4YiArIG47Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR2lfU291cmNlX1NlbGVjdF9CaXRzKHVuc2lnbmVkIHNvdXJjZSkKK3sKKwlyZXR1cm4gKHNvdXJjZSA8PCBHaV9Tb3VyY2VfU2VsZWN0X1NoaWZ0KSAmIEdpX1NvdXJjZV9TZWxlY3RfTWFzazsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR2lfR2F0ZV9TZWxlY3RfQml0cyh1bnNpZ25lZCBnYXRlX3NlbGVjdCkKK3sKKwlyZXR1cm4gKGdhdGVfc2VsZWN0IDw8IEdpX0dhdGVfU2VsZWN0X1NoaWZ0KSAmIEdpX0dhdGVfU2VsZWN0X01hc2s7Cit9CisKK2VudW0gbmlfNjYweF9zZWNvbmRfZ2F0ZV9zZWxlY3QgeworCU5JXzY2MHhfU291cmNlX1Bpbl9pX1NlY29uZF9HYXRlX1NlbGVjdCA9IDB4MCwKKwlOSV82NjB4X1VwX0Rvd25fUGluX2lfU2Vjb25kX0dhdGVfU2VsZWN0ID0gMHgxLAorCU5JXzY2MHhfTmV4dF9TUkNfU2Vjb25kX0dhdGVfU2VsZWN0ID0gMHhhLAorCU5JXzY2MHhfTmV4dF9PdXRfU2Vjb25kX0dhdGVfU2VsZWN0ID0gMHgxNCwKKwlOSV82NjB4X1NlbGVjdGVkX0dhdGVfU2Vjb25kX0dhdGVfU2VsZWN0ID0gMHgxZSwKKwlOSV82NjB4X0xvZ2ljX0xvd19TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweDFmLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBuaV82NjB4X21heF91cF9kb3duX3BpbiA9IDc7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JXzY2MHhfVXBfRG93bl9QaW5fU2Vjb25kX0dhdGVfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV82NjB4X21heF91cF9kb3duX3Bpbik7CisJcmV0dXJuIDB4MiArIG47Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JXzY2MHhfUlRTSV9TZWNvbmRfR2F0ZV9TZWxlY3QodW5zaWduZWQgbikKK3sKKwlCVUdfT04obiA+IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCk7CisJcmV0dXJuIDB4YiArIG47Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY291bnRlcl9zdGF0dXNfbWFzayA9CisJQ09NRURJX0NPVU5URVJfQVJNRUQgfCBDT01FRElfQ09VTlRFUl9DT1VOVElORzsKKworc3RhdGljIGludCBfX2luaXQgbmlfdGlvX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KG5pX3Rpb19pbml0X21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuaV90aW9fY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKK30KKworbW9kdWxlX2V4aXQobmlfdGlvX2NsZWFudXBfbW9kdWxlKTsKKworc3RydWN0IG5pX2dwY3RfZGV2aWNlICpuaV9ncGN0X2RldmljZV9jb25zdHJ1Y3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdm9pZCAoKndyaXRlX3JlZ2lzdGVyKSAoc3RydWN0IG5pX2dwY3QgKiBjb3VudGVyLCB1bnNpZ25lZCBiaXRzLAorCQllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKSwKKwl1bnNpZ25lZCAoKnJlYWRfcmVnaXN0ZXIpIChzdHJ1Y3QgbmlfZ3BjdCAqIGNvdW50ZXIsCisJCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpLCBlbnVtIG5pX2dwY3RfdmFyaWFudCB2YXJpYW50LAorCXVuc2lnbmVkIG51bV9jb3VudGVycykKK3sKKwl1bnNpZ25lZCBpOworCisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuaV9ncGN0X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmIChjb3VudGVyX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwljb3VudGVyX2Rldi0+ZGV2ID0gZGV2OworCWNvdW50ZXJfZGV2LT53cml0ZV9yZWdpc3RlciA9IHdyaXRlX3JlZ2lzdGVyOworCWNvdW50ZXJfZGV2LT5yZWFkX3JlZ2lzdGVyID0gcmVhZF9yZWdpc3RlcjsKKwljb3VudGVyX2Rldi0+dmFyaWFudCA9IHZhcmlhbnQ7CisJc3Bpbl9sb2NrX2luaXQoJmNvdW50ZXJfZGV2LT5yZWdzX2xvY2spOworCUJVR19PTihudW1fY291bnRlcnMgPT0gMCk7CisJY291bnRlcl9kZXYtPmNvdW50ZXJzID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IG5pX2dwY3QpICogbnVtX2NvdW50ZXJzLCBHRlBfS0VSTkVMKTsKKwlpZiAoY291bnRlcl9kZXYtPmNvdW50ZXJzID09IE5VTEwpIHsKKwkJa2ZyZWUoY291bnRlcl9kZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CisJCWNvdW50ZXJfZGV2LT5jb3VudGVyc1tpXS5jb3VudGVyX2RldiA9IGNvdW50ZXJfZGV2OworCQlzcGluX2xvY2tfaW5pdCgmY291bnRlcl9kZXYtPmNvdW50ZXJzW2ldLmxvY2spOworCX0KKwljb3VudGVyX2Rldi0+bnVtX2NvdW50ZXJzID0gbnVtX2NvdW50ZXJzOworCXJldHVybiBjb3VudGVyX2RldjsKK30KKwordm9pZCBuaV9ncGN0X2RldmljZV9kZXN0cm95KHN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYpCit7CisJaWYgKGNvdW50ZXJfZGV2LT5jb3VudGVycyA9PSBOVUxMKQorCQlyZXR1cm47CisJa2ZyZWUoY291bnRlcl9kZXYtPmNvdW50ZXJzKTsKKwlrZnJlZShjb3VudGVyX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgbmlfdGlvX3NlY29uZF9nYXRlX3JlZ2lzdGVyc19wcmVzZW50KGNvbnN0IHN0cnVjdCBuaV9ncGN0X2RldmljZQorCSpjb3VudGVyX2RldikKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmlfdGlvX3Jlc2V0X2NvdW50X2FuZF9kaXNhcm0oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgR2lfUmVzZXRfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlOSVRJT19HeHhfSm9pbnRfUmVzZXRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKK30KKwordm9pZCBuaV90aW9faW5pdF9jb3VudGVyKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKworCW5pX3Rpb19yZXNldF9jb3VudF9hbmRfZGlzYXJtKGNvdW50ZXIpOworCS8qIGluaXRpYWxpemUgY291bnRlciByZWdpc3RlcnMgKi8KKwljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9BdXRvaW5jcmVtZW50X1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV0gPQorCQkweDA7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfQXV0b2luY3JlbWVudF9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCldLAorCQlOSVRJT19HaV9BdXRvaW5jcmVtZW50X1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIE5JVElPX0dpX0NvbW1hbmRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQl+MCwgR2lfU3luY2hyb25pemVfR2F0ZV9CaXQpOworCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLCBOSVRJT19HaV9Nb2RlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwgfjAsCisJCTApOworCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV0gPSAweDA7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfTG9hZEFfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSwKKwkJTklUSU9fR2lfTG9hZEFfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9Mb2FkQl9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCldID0gMHgwOworCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsCisJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV0sCisJCU5JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksIH4wLCAwKTsKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpKSB7CisJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJTklUSU9fR2lfQ291bnRpbmdfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksIH4wLAorCQkJMCk7CisJfQorCWlmIChuaV90aW9fc2Vjb25kX2dhdGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpKSB7CisJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KV0gPSAweDA7CisJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsCisJCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+CisJCQkJCWNvdW50ZXJfaW5kZXgpXSwKKwkJCU5JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJfQorCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQlOSVRJT19HaV9ETUFfQ29uZmlnX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwgfjAsIDB4MCk7CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0ludGVycnVwdF9FbmFibGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLCB+MCwgMHgwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBuaV90aW9fY291bnRlcl9zdGF0dXMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisJY29uc3QgdW5zaWduZWQgYml0cyA9IHJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJTklUSU9fR3h4X1N0YXR1c19SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCWlmIChiaXRzICYgR2lfQXJtZWRfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCXN0YXR1cyB8PSBDT01FRElfQ09VTlRFUl9BUk1FRDsKKwkJaWYgKGJpdHMgJiBHaV9Db3VudGluZ19CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpCisJCQlzdGF0dXMgfD0gQ09NRURJX0NPVU5URVJfQ09VTlRJTkc7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIG5pX3Rpb19zZXRfc3luY19tb2RlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBpbnQgZm9yY2VfYWx0X3N5bmMpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCWNvbnN0IHVuc2lnbmVkIGNvdW50aW5nX21vZGVfcmVnID0KKwkJTklUSU9fR2lfQ291bnRpbmdfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJc3RhdGljIGNvbnN0IHVpbnQ2NF90IG1pbl9ub3JtYWxfc3luY19wZXJpb2RfcHMgPSAyNTAwMDsKKwljb25zdCB1aW50NjRfdCBjbG9ja19wZXJpb2RfcHMgPSBuaV90aW9fY2xvY2tfcGVyaW9kX3BzKGNvdW50ZXIsCisJCW5pX3Rpb19nZW5lcmljX2Nsb2NrX3NyY19zZWxlY3QoY291bnRlcikpOworCisJaWYgKG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXJfZGV2KSA9PSAwKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCQljb3VudGluZ19tb2RlX3JlZykgJiBHaV9Db3VudGluZ19Nb2RlX01hc2spIHsKKwljYXNlIEdpX0NvdW50aW5nX01vZGVfUXVhZHJhdHVyZVgxX0JpdHM6CisJY2FzZSBHaV9Db3VudGluZ19Nb2RlX1F1YWRyYXR1cmVYMl9CaXRzOgorCWNhc2UgR2lfQ291bnRpbmdfTW9kZV9RdWFkcmF0dXJlWDRfQml0czoKKwljYXNlIEdpX0NvdW50aW5nX01vZGVfU3luY19Tb3VyY2VfQml0czoKKwkJZm9yY2VfYWx0X3N5bmMgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJLyogSXQncyBub3QgY2xlYXIgd2hhdCB3ZSBzaG91bGQgZG8gaWYgY2xvY2tfcGVyaW9kIGlzIHVua25vd24sIHNvIHdlIGFyZSBub3QKKwkgICB1c2luZyB0aGUgYWx0IHN5bmMgYml0IGluIHRoYXQgY2FzZSwgYnV0IGFsbG93IHRoZSBjYWxsZXIgdG8gZGVjaWRlIGJ5IHVzaW5nIHRoZQorCSAgIGZvcmNlX2FsdF9zeW5jIHBhcmFtZXRlci4gKi8KKwlpZiAoZm9yY2VfYWx0X3N5bmMgfHwKKwkJKGNsb2NrX3BlcmlvZF9wcworCQkJJiYgY2xvY2tfcGVyaW9kX3BzIDwgbWluX25vcm1hbF9zeW5jX3BlcmlvZF9wcykpIHsKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIGNvdW50aW5nX21vZGVfcmVnLAorCQkJR2lfQWx0ZXJuYXRlX1N5bmNfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KSwKKwkJCUdpX0FsdGVybmF0ZV9TeW5jX0JpdChjb3VudGVyX2Rldi0+dmFyaWFudCkpOworCX0gZWxzZSB7CisJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLCBjb3VudGluZ19tb2RlX3JlZywKKwkJCUdpX0FsdGVybmF0ZV9TeW5jX0JpdChjb3VudGVyX2Rldi0+dmFyaWFudCksIDB4MCk7CisJfQorfQorCitzdGF0aWMgaW50IG5pX3Rpb19zZXRfY291bnRlcl9tb2RlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBtb2RlKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwl1bnNpZ25lZCBtb2RlX3JlZ19tYXNrOworCXVuc2lnbmVkIG1vZGVfcmVnX3ZhbHVlczsKKwl1bnNpZ25lZCBpbnB1dF9zZWxlY3RfYml0cyA9IDA7CisJLyogdGhlc2UgYml0cyBtYXAgZGlyZWN0bHkgb24gdG8gdGhlIG1vZGUgcmVnaXN0ZXIgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgbW9kZV9yZWdfZGlyZWN0X21hc2sgPQorCQlOSV9HUENUX0dBVEVfT05fQk9USF9FREdFU19CSVQgfCBOSV9HUENUX0VER0VfR0FURV9NT0RFX01BU0sgfAorCQlOSV9HUENUX1NUT1BfTU9ERV9NQVNLIHwgTklfR1BDVF9PVVRQVVRfTU9ERV9NQVNLIHwKKwkJTklfR1BDVF9IQVJEV0FSRV9ESVNBUk1fTUFTSyB8IE5JX0dQQ1RfTE9BRElOR19PTl9UQ19CSVQgfAorCQlOSV9HUENUX0xPQURJTkdfT05fR0FURV9CSVQgfCBOSV9HUENUX0xPQURfQl9TRUxFQ1RfQklUOworCisJbW9kZV9yZWdfbWFzayA9IG1vZGVfcmVnX2RpcmVjdF9tYXNrIHwgR2lfUmVsb2FkX1NvdXJjZV9Td2l0Y2hpbmdfQml0OworCW1vZGVfcmVnX3ZhbHVlcyA9IG1vZGUgJiBtb2RlX3JlZ19kaXJlY3RfbWFzazsKKwlzd2l0Y2ggKG1vZGUgJiBOSV9HUENUX1JFTE9BRF9TT1VSQ0VfTUFTSykgeworCWNhc2UgTklfR1BDVF9SRUxPQURfU09VUkNFX0ZJWEVEX0JJVFM6CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9SRUxPQURfU09VUkNFX1NXSVRDSElOR19CSVRTOgorCQltb2RlX3JlZ192YWx1ZXMgfD0gR2lfUmVsb2FkX1NvdXJjZV9Td2l0Y2hpbmdfQml0OworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUkVMT0FEX1NPVVJDRV9HQVRFX1NFTEVDVF9CSVRTOgorCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9HYXRlX1NlbGVjdF9Mb2FkX1NvdXJjZV9CaXQ7CisJCW1vZGVfcmVnX21hc2sgfD0gR2lfR2F0aW5nX01vZGVfTWFzazsKKwkJbW9kZV9yZWdfdmFsdWVzIHw9IEdpX0xldmVsX0dhdGluZ19CaXRzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIE5JVElPX0dpX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQltb2RlX3JlZ19tYXNrLCBtb2RlX3JlZ192YWx1ZXMpOworCisJaWYgKG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXJfZGV2KSkgeworCQl1bnNpZ25lZCBjb3VudGluZ19tb2RlX2JpdHMgPSAwOworCQljb3VudGluZ19tb2RlX2JpdHMgfD0KKwkJCShtb2RlID4+IE5JX0dQQ1RfQ09VTlRJTkdfTU9ERV9TSElGVCkgJgorCQkJR2lfQ291bnRpbmdfTW9kZV9NYXNrOworCQljb3VudGluZ19tb2RlX2JpdHMgfD0KKwkJCSgobW9kZSA+PiBOSV9HUENUX0lOREVYX1BIQVNFX0JJVFNISUZUKSA8PAorCQkJR2lfSW5kZXhfUGhhc2VfQml0c2hpZnQpICYgR2lfSW5kZXhfUGhhc2VfTWFzazsKKwkJaWYgKG1vZGUgJiBOSV9HUENUX0lOREVYX0VOQUJMRV9CSVQpIHsKKwkJCWNvdW50aW5nX21vZGVfYml0cyB8PSBHaV9JbmRleF9Nb2RlX0JpdDsKKwkJfQorCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCU5JVElPX0dpX0NvdW50aW5nX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQkJR2lfQ291bnRpbmdfTW9kZV9NYXNrIHwgR2lfSW5kZXhfUGhhc2VfTWFzayB8CisJCQlHaV9JbmRleF9Nb2RlX0JpdCwgY291bnRpbmdfbW9kZV9iaXRzKTsKKwkJbmlfdGlvX3NldF9zeW5jX21vZGUoY291bnRlciwgMCk7CisJfQorCisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIE5JVElPX0dpX0NvbW1hbmRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlHaV9VcF9Eb3duX01hc2ssCisJCShtb2RlID4+IE5JX0dQQ1RfQ09VTlRJTkdfRElSRUNUSU9OX1NISUZUKSA8PCBHaV9VcF9Eb3duX1NoaWZ0KTsKKworCWlmIChtb2RlICYgTklfR1BDVF9PUl9HQVRFX0JJVCkgeworCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9Pcl9HYXRlX0JpdDsKKwl9CisJaWYgKG1vZGUgJiBOSV9HUENUX0lOVkVSVF9PVVRQVVRfQklUKSB7CisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX091dHB1dF9Qb2xhcml0eV9CaXQ7CisJfQorCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlHaV9HYXRlX1NlbGVjdF9Mb2FkX1NvdXJjZV9CaXQgfCBHaV9Pcl9HYXRlX0JpdCB8CisJCUdpX091dHB1dF9Qb2xhcml0eV9CaXQsIGlucHV0X3NlbGVjdF9iaXRzKTsKKworCXJldHVybiAwOworfQorCitpbnQgbmlfdGlvX2FybShzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgaW50IGFybSwgdW5zaWduZWQgc3RhcnRfdHJpZ2dlcikKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisKKwl1bnNpZ25lZCBjb21tYW5kX3RyYW5zaWVudF9iaXRzID0gMDsKKworCWlmIChhcm0pIHsKKwkJc3dpdGNoIChzdGFydF90cmlnZ2VyKSB7CisJCWNhc2UgTklfR1BDVF9BUk1fSU1NRURJQVRFOgorCQkJY29tbWFuZF90cmFuc2llbnRfYml0cyB8PSBHaV9Bcm1fQml0OworCQkJYnJlYWs7CisJCWNhc2UgTklfR1BDVF9BUk1fUEFJUkVEX0lNTUVESUFURToKKwkJCWNvbW1hbmRfdHJhbnNpZW50X2JpdHMgfD0gR2lfQXJtX0JpdCB8IEdpX0FybV9Db3B5X0JpdDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJaWYgKG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXJfZGV2KSkgeworCQkJdW5zaWduZWQgY291bnRpbmdfbW9kZV9iaXRzID0gMDsKKworCQkJc3dpdGNoIChzdGFydF90cmlnZ2VyKSB7CisJCQljYXNlIE5JX0dQQ1RfQVJNX0lNTUVESUFURToKKwkJCWNhc2UgTklfR1BDVF9BUk1fUEFJUkVEX0lNTUVESUFURToKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHN0YXJ0X3RyaWdnZXIgJiBOSV9HUENUX0FSTV9VTktOT1dOKSB7CisJCQkJCS8qIHBhc3MtdGhyb3VnaCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBzbyB3ZSBjYW4gZmlndXJlIG91dCB3aGF0IHNlbGVjdCBsYXRlciAqLworCQkJCQl1bnNpZ25lZCBod19hcm1fc2VsZWN0X2JpdHMgPQorCQkJCQkJKHN0YXJ0X3RyaWdnZXIgPDwKKwkJCQkJCUdpX0hXX0FybV9TZWxlY3RfU2hpZnQpICYKKwkJCQkJCUdpX0hXX0FybV9TZWxlY3RfTWFzaworCQkJCQkJKGNvdW50ZXJfZGV2LT52YXJpYW50KTsKKworCQkJCQljb3VudGluZ19tb2RlX2JpdHMgfD0KKwkJCQkJCUdpX0hXX0FybV9FbmFibGVfQml0IHwKKwkJCQkJCWh3X2FybV9zZWxlY3RfYml0czsKKwkJCQl9IGVsc2UgeworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCQlOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyhjb3VudGVyLT4KKwkJCQkJY291bnRlcl9pbmRleCksCisJCQkJR2lfSFdfQXJtX1NlbGVjdF9NYXNrKGNvdW50ZXJfZGV2LT4KKwkJCQkJdmFyaWFudCkgfCBHaV9IV19Bcm1fRW5hYmxlX0JpdCwKKwkJCQljb3VudGluZ19tb2RlX2JpdHMpOworCQl9CisJfSBlbHNlIHsKKwkJY29tbWFuZF90cmFuc2llbnRfYml0cyB8PSBHaV9EaXNhcm1fQml0OworCX0KKwluaV90aW9fc2V0X2JpdHNfdHJhbnNpZW50KGNvdW50ZXIsCisJCU5JVElPX0dpX0NvbW1hbmRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLCAwLCAwLAorCQljb21tYW5kX3RyYW5zaWVudF9iaXRzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pXzY2MHhfc291cmNlX3NlbGVjdF9iaXRzKHVuc2lnbmVkIGludCBjbG9ja19zb3VyY2UpCit7CisJdW5zaWduZWQgbmlfNjYweF9jbG9jazsKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIGNsb2NrX3NlbGVjdF9iaXRzID0KKwkJY2xvY2tfc291cmNlICYgTklfR1BDVF9DTE9DS19TUkNfU0VMRUNUX01BU0s7CisKKwlzd2l0Y2ggKGNsb2NrX3NlbGVjdF9iaXRzKSB7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzFfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X1RpbWViYXNlXzFfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8yX0NMT0NLX1NSQ19CSVRTOgorCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9UaW1lYmFzZV8yX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfVElNRUJBU0VfM19DTE9DS19TUkNfQklUUzoKKwkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfVGltZWJhc2VfM19DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX0xPR0lDX0xPV19DTE9DS19TUkNfQklUUzoKKwkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfTG9naWNfTG93X0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfU09VUkNFX1BJTl9pX0NMT0NLX1NSQ19CSVRTOgorCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9Tb3VyY2VfUGluX2lfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9ORVhUX0dBVEVfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X05leHRfR2F0ZV9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX05FWFRfVENfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X05leHRfVENfQ2xvY2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChjbG9ja19zZWxlY3RfYml0cyA9PSBOSV9HUENUX1JUU0lfQ0xPQ0tfU1JDX0JJVFMoaSkpIHsKKwkJCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9SVFNJX0Nsb2NrKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X3NvdXJjZV9waW47ICsraSkgeworCQkJaWYgKGNsb2NrX3NlbGVjdF9iaXRzID09CisJCQkJTklfR1BDVF9TT1VSQ0VfUElOX0NMT0NLX1NSQ19CSVRTKGkpKSB7CisJCQkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfU291cmNlX1Bpbl9DbG9jayhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF9zb3VyY2VfcGluKQorCQkJYnJlYWs7CisJCW5pXzY2MHhfY2xvY2sgPSAwOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBHaV9Tb3VyY2VfU2VsZWN0X0JpdHMobmlfNjYweF9jbG9jayk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9tX3Nlcmllc19zb3VyY2Vfc2VsZWN0X2JpdHModW5zaWduZWQgaW50IGNsb2NrX3NvdXJjZSkKK3sKKwl1bnNpZ25lZCBuaV9tX3Nlcmllc19jbG9jazsKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIGNsb2NrX3NlbGVjdF9iaXRzID0KKwkJY2xvY2tfc291cmNlICYgTklfR1BDVF9DTE9DS19TUkNfU0VMRUNUX01BU0s7CisJc3dpdGNoIChjbG9ja19zZWxlY3RfYml0cykgeworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8xX0NMT0NLX1NSQ19CSVRTOgorCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX1RpbWViYXNlXzFfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8yX0NMT0NLX1NSQ19CSVRTOgorCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX1RpbWViYXNlXzJfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8zX0NMT0NLX1NSQ19CSVRTOgorCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX1RpbWViYXNlXzNfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9MT0dJQ19MT1dfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfTG9naWNfTG93X0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9HQVRFX0NMT0NLX1NSQ19CSVRTOgorCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX05leHRfR2F0ZV9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX05FWFRfVENfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfTmV4dF9UQ19DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1BYSTEwX0NMT0NLX1NSQ19CSVRTOgorCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX1BYSTEwX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUFhJX1NUQVJfVFJJR0dFUl9DTE9DS19TUkNfQklUUzoKKwkJbmlfbV9zZXJpZXNfY2xvY2sgPSBOSV9NX1Nlcmllc19QWElfU3Rhcl9UcmlnZ2VyX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfQU5BTE9HX1RSSUdHRVJfT1VUX0NMT0NLX1NSQ19CSVRTOgorCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX0FuYWxvZ19UcmlnZ2VyX091dF9DbG9jazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChjbG9ja19zZWxlY3RfYml0cyA9PSBOSV9HUENUX1JUU0lfQ0xPQ0tfU1JDX0JJVFMoaSkpIHsKKwkJCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX1JUU0lfQ2xvY2soaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9wZmlfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAoY2xvY2tfc2VsZWN0X2JpdHMgPT0gTklfR1BDVF9QRklfQ0xPQ0tfU1JDX0JJVFMoaSkpIHsKKwkJCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX1BGSV9DbG9jayhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJcnRfcHJpbnRrKCJpbnZhbGlkIGNsb2NrIHNvdXJjZSAweCVseFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKWNsb2NrX3NvdXJjZSk7CisJCUJVRygpOworCQluaV9tX3Nlcmllc19jbG9jayA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gR2lfU291cmNlX1NlbGVjdF9CaXRzKG5pX21fc2VyaWVzX2Nsb2NrKTsKK307CisKK3N0YXRpYyB2b2lkIG5pX3Rpb19zZXRfc291cmNlX3N1YnNlbGVjdChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwl1bnNpZ25lZCBpbnQgY2xvY2tfc291cmNlKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9yZWcgPQorCQlOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisKKwlpZiAoY291bnRlcl9kZXYtPnZhcmlhbnQgIT0gbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzKQorCQlyZXR1cm47CisJc3dpdGNoIChjbG9ja19zb3VyY2UgJiBOSV9HUENUX0NMT0NLX1NSQ19TRUxFQ1RfTUFTSykgeworCQkvKiBHaV9Tb3VyY2VfU3Vic2VsZWN0IGlzIHplcm8gKi8KKwljYXNlIE5JX0dQQ1RfTkVYVF9HQVRFX0NMT0NLX1NSQ19CSVRTOgorCWNhc2UgTklfR1BDVF9USU1FQkFTRV8zX0NMT0NLX1NSQ19CSVRTOgorCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddICY9IH5HaV9Tb3VyY2VfU3Vic2VsZWN0X0JpdDsKKwkJYnJlYWs7CisJCS8qIEdpX1NvdXJjZV9TdWJzZWxlY3QgaXMgb25lICovCisJY2FzZSBOSV9HUENUX0FOQUxPR19UUklHR0VSX09VVF9DTE9DS19TUkNfQklUUzoKKwljYXNlIE5JX0dQQ1RfUFhJX1NUQVJfVFJJR0dFUl9DTE9DS19TUkNfQklUUzoKKwkJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSB8PSBHaV9Tb3VyY2VfU3Vic2VsZWN0X0JpdDsKKwkJYnJlYWs7CisJCS8qIEdpX1NvdXJjZV9TdWJzZWxlY3QgZG9lc24ndCBtYXR0ZXIgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm47CisJCWJyZWFrOworCX0KKwl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBjb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddLAorCQlzZWNvbmRfZ2F0ZV9yZWcpOworfQorCitzdGF0aWMgaW50IG5pX3Rpb19zZXRfY2xvY2tfc3JjKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBjbG9ja19zb3VyY2UsIHVuc2lnbmVkIGludCBwZXJpb2RfbnMpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIGlucHV0X3NlbGVjdF9iaXRzID0gMDsKKwlzdGF0aWMgY29uc3QgdWludDY0X3QgcGljb19wZXJfbmFubyA9IDEwMDA7CisKKy8qRklYTUU6IHZhbGlkYXRlIGNsb2NrIHNvdXJjZSAqLworCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBuaV82NjB4X3NvdXJjZV9zZWxlY3RfYml0cyhjbG9ja19zb3VyY2UpOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJaW5wdXRfc2VsZWN0X2JpdHMgfD0KKwkJCW5pX21fc2VyaWVzX3NvdXJjZV9zZWxlY3RfYml0cyhjbG9ja19zb3VyY2UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCWlmIChjbG9ja19zb3VyY2UgJiBOSV9HUENUX0lOVkVSVF9DTE9DS19TUkNfQklUKQorCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9Tb3VyY2VfUG9sYXJpdHlfQml0OworCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlHaV9Tb3VyY2VfU2VsZWN0X01hc2sgfCBHaV9Tb3VyY2VfUG9sYXJpdHlfQml0LAorCQlpbnB1dF9zZWxlY3RfYml0cyk7CisJbmlfdGlvX3NldF9zb3VyY2Vfc3Vic2VsZWN0KGNvdW50ZXIsIGNsb2NrX3NvdXJjZSk7CisJaWYgKG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXJfZGV2KSkgeworCQljb25zdCB1bnNpZ25lZCBwcmVzY2FsaW5nX21vZGUgPQorCQkJY2xvY2tfc291cmNlICYgTklfR1BDVF9QUkVTQ0FMRV9NT0RFX0NMT0NLX1NSQ19NQVNLOworCQl1bnNpZ25lZCBjb3VudGluZ19tb2RlX2JpdHMgPSAwOworCisJCXN3aXRjaCAocHJlc2NhbGluZ19tb2RlKSB7CisJCWNhc2UgTklfR1BDVF9OT19QUkVTQ0FMRV9DTE9DS19TUkNfQklUUzoKKwkJCWJyZWFrOworCQljYXNlIE5JX0dQQ1RfUFJFU0NBTEVfWDJfQ0xPQ0tfU1JDX0JJVFM6CisJCQljb3VudGluZ19tb2RlX2JpdHMgfD0KKwkJCQlHaV9QcmVzY2FsZV9YMl9CaXQoY291bnRlcl9kZXYtPnZhcmlhbnQpOworCQkJYnJlYWs7CisJCWNhc2UgTklfR1BDVF9QUkVTQ0FMRV9YOF9DTE9DS19TUkNfQklUUzoKKwkJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJCUdpX1ByZXNjYWxlX1g4X0JpdChjb3VudGVyX2Rldi0+dmFyaWFudCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQlOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCUdpX1ByZXNjYWxlX1gyX0JpdChjb3VudGVyX2Rldi0+CisJCQkJdmFyaWFudCkgfCBHaV9QcmVzY2FsZV9YOF9CaXQoY291bnRlcl9kZXYtPgorCQkJCXZhcmlhbnQpLCBjb3VudGluZ19tb2RlX2JpdHMpOworCX0KKwljb3VudGVyLT5jbG9ja19wZXJpb2RfcHMgPSBwaWNvX3Blcl9uYW5vICogcGVyaW9kX25zOworCW5pX3Rpb19zZXRfc3luY19tb2RlKGNvdW50ZXIsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfdGlvX2Nsb2NrX3NyY19tb2RpZmllcnMoY29uc3Qgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCWNvbnN0IHVuc2lnbmVkIGNvdW50aW5nX21vZGVfYml0cyA9IG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCU5JVElPX0dpX0NvdW50aW5nX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwl1bnNpZ25lZCBiaXRzID0gMDsKKworCWlmIChuaV90aW9fZ2V0X3NvZnRfY29weShjb3VudGVyLAorCQkJTklUSU9fR2lfSW5wdXRfU2VsZWN0X1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KSkgJiBHaV9Tb3VyY2VfUG9sYXJpdHlfQml0KQorCQliaXRzIHw9IE5JX0dQQ1RfSU5WRVJUX0NMT0NLX1NSQ19CSVQ7CisJaWYgKGNvdW50aW5nX21vZGVfYml0cyAmIEdpX1ByZXNjYWxlX1gyX0JpdChjb3VudGVyX2Rldi0+dmFyaWFudCkpCisJCWJpdHMgfD0gTklfR1BDVF9QUkVTQ0FMRV9YMl9DTE9DS19TUkNfQklUUzsKKwlpZiAoY291bnRpbmdfbW9kZV9iaXRzICYgR2lfUHJlc2NhbGVfWDhfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KSkKKwkJYml0cyB8PSBOSV9HUENUX1BSRVNDQUxFX1g4X0NMT0NLX1NSQ19CSVRTOworCXJldHVybiBiaXRzOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfbV9zZXJpZXNfY2xvY2tfc3JjX3NlbGVjdChjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgc2Vjb25kX2dhdGVfcmVnID0KKwkJTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCXVuc2lnbmVkIGNsb2NrX3NvdXJjZSA9IDA7CisJdW5zaWduZWQgaTsKKwljb25zdCB1bnNpZ25lZCBpbnB1dF9zZWxlY3QgPSAobmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwKKwkJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCkpICYgR2lfU291cmNlX1NlbGVjdF9NYXNrKSA+PgorCQlHaV9Tb3VyY2VfU2VsZWN0X1NoaWZ0OworCisJc3dpdGNoIChpbnB1dF9zZWxlY3QpIHsKKwljYXNlIE5JX01fU2VyaWVzX1RpbWViYXNlXzFfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfMV9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19UaW1lYmFzZV8yX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1RJTUVCQVNFXzJfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfVGltZWJhc2VfM19DbG9jazoKKwkJaWYgKGNvdW50ZXJfZGV2LT4KKwkJCXJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSAmIEdpX1NvdXJjZV9TdWJzZWxlY3RfQml0KQorCQkJY2xvY2tfc291cmNlID0KKwkJCQlOSV9HUENUX0FOQUxPR19UUklHR0VSX09VVF9DTE9DS19TUkNfQklUUzsKKwkJZWxzZQorCQkJY2xvY2tfc291cmNlID0gTklfR1BDVF9USU1FQkFTRV8zX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX0xvZ2ljX0xvd19DbG9jazoKKwkJY2xvY2tfc291cmNlID0gTklfR1BDVF9MT0dJQ19MT1dfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfTmV4dF9HYXRlX0Nsb2NrOgorCQlpZiAoY291bnRlcl9kZXYtPgorCQkJcmVnc1tzZWNvbmRfZ2F0ZV9yZWddICYgR2lfU291cmNlX1N1YnNlbGVjdF9CaXQpCisJCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1BYSV9TVEFSX1RSSUdHRVJfQ0xPQ0tfU1JDX0JJVFM7CisJCWVsc2UKKwkJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfTkVYVF9HQVRFX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX1BYSTEwX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1BYSTEwX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX05leHRfVENfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfTkVYVF9UQ19DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChpbnB1dF9zZWxlY3QgPT0gTklfTV9TZXJpZXNfUlRTSV9DbG9jayhpKSkgeworCQkJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfUlRTSV9DTE9DS19TUkNfQklUUyhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChpbnB1dF9zZWxlY3QgPT0gTklfTV9TZXJpZXNfUEZJX0Nsb2NrKGkpKSB7CisJCQkJY2xvY2tfc291cmNlID0gTklfR1BDVF9QRklfQ0xPQ0tfU1JDX0JJVFMoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJY2xvY2tfc291cmNlIHw9IG5pX3Rpb19jbG9ja19zcmNfbW9kaWZpZXJzKGNvdW50ZXIpOworCXJldHVybiBjbG9ja19zb3VyY2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV82NjB4X2Nsb2NrX3NyY19zZWxlY3QoY29uc3Qgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgY2xvY2tfc291cmNlID0gMDsKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIGlucHV0X3NlbGVjdCA9IChuaV90aW9fZ2V0X3NvZnRfY29weShjb3VudGVyLAorCQkJTklUSU9fR2lfSW5wdXRfU2VsZWN0X1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KSkgJiBHaV9Tb3VyY2VfU2VsZWN0X01hc2spID4+CisJCUdpX1NvdXJjZV9TZWxlY3RfU2hpZnQ7CisKKwlzd2l0Y2ggKGlucHV0X3NlbGVjdCkgeworCWNhc2UgTklfNjYweF9UaW1lYmFzZV8xX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1RJTUVCQVNFXzFfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9UaW1lYmFzZV8yX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1RJTUVCQVNFXzJfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9UaW1lYmFzZV8zX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1RJTUVCQVNFXzNfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9Mb2dpY19Mb3dfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfTE9HSUNfTE9XX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwljYXNlIE5JXzY2MHhfU291cmNlX1Bpbl9pX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1NPVVJDRV9QSU5faV9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfR2F0ZV9DbG9jazoKKwkJY2xvY2tfc291cmNlID0gTklfR1BDVF9ORVhUX0dBVEVfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9OZXh0X1RDX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX05FWFRfVENfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChpbnB1dF9zZWxlY3QgPT0gTklfNjYweF9SVFNJX0Nsb2NrKGkpKSB7CisJCQkJY2xvY2tfc291cmNlID0gTklfR1BDVF9SVFNJX0NMT0NLX1NSQ19CSVRTKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X3NvdXJjZV9waW47ICsraSkgeworCQkJaWYgKGlucHV0X3NlbGVjdCA9PSBOSV82NjB4X1NvdXJjZV9QaW5fQ2xvY2soaSkpIHsKKwkJCQljbG9ja19zb3VyY2UgPQorCQkJCQlOSV9HUENUX1NPVVJDRV9QSU5fQ0xPQ0tfU1JDX0JJVFMoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfc291cmNlX3BpbikKKwkJCWJyZWFrOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCWNsb2NrX3NvdXJjZSB8PSBuaV90aW9fY2xvY2tfc3JjX21vZGlmaWVycyhjb3VudGVyKTsKKwlyZXR1cm4gY2xvY2tfc291cmNlOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfdGlvX2dlbmVyaWNfY2xvY2tfc3JjX3NlbGVjdChjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwlzd2l0Y2ggKGNvdW50ZXItPmNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJCXJldHVybiBuaV9tX3Nlcmllc19jbG9ja19zcmNfc2VsZWN0KGNvdW50ZXIpOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQlyZXR1cm4gbmlfNjYweF9jbG9ja19zcmNfc2VsZWN0KGNvdW50ZXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDY0X3QgbmlfdGlvX2Nsb2NrX3BlcmlvZF9wcyhjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwl1bnNpZ25lZCBnZW5lcmljX2Nsb2NrX3NvdXJjZSkKK3sKKwl1aW50NjRfdCBjbG9ja19wZXJpb2RfcHM7CisKKwlzd2l0Y2ggKGdlbmVyaWNfY2xvY2tfc291cmNlICYgTklfR1BDVF9DTE9DS19TUkNfU0VMRUNUX01BU0spIHsKKwljYXNlIE5JX0dQQ1RfVElNRUJBU0VfMV9DTE9DS19TUkNfQklUUzoKKwkJY2xvY2tfcGVyaW9kX3BzID0gNTAwMDA7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8yX0NMT0NLX1NSQ19CSVRTOgorCQljbG9ja19wZXJpb2RfcHMgPSAxMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzNfQ0xPQ0tfU1JDX0JJVFM6CisJCWNsb2NrX3BlcmlvZF9wcyA9IDEyNTAwOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUFhJMTBfQ0xPQ0tfU1JDX0JJVFM6CisJCWNsb2NrX3BlcmlvZF9wcyA9IDEwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogY2xvY2sgcGVyaW9kIGlzIHNwZWNpZmllZCBieSB1c2VyIHdpdGggcHJlc2NhbGluZyBhbHJlYWR5IHRha2VuIGludG8gYWNjb3VudC4gKi8KKwkJcmV0dXJuIGNvdW50ZXItPmNsb2NrX3BlcmlvZF9wczsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChnZW5lcmljX2Nsb2NrX3NvdXJjZSAmIE5JX0dQQ1RfUFJFU0NBTEVfTU9ERV9DTE9DS19TUkNfTUFTSykgeworCWNhc2UgTklfR1BDVF9OT19QUkVTQ0FMRV9DTE9DS19TUkNfQklUUzoKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1BSRVNDQUxFX1gyX0NMT0NLX1NSQ19CSVRTOgorCQljbG9ja19wZXJpb2RfcHMgKj0gMjsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1BSRVNDQUxFX1g4X0NMT0NLX1NSQ19CSVRTOgorCQljbG9ja19wZXJpb2RfcHMgKj0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gY2xvY2tfcGVyaW9kX3BzOworfQorCitzdGF0aWMgdm9pZCBuaV90aW9fZ2V0X2Nsb2NrX3NyYyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwl1bnNpZ25lZCBpbnQgKiBjbG9ja19zb3VyY2UsIHVuc2lnbmVkIGludCAqIHBlcmlvZF9ucykKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgcGljb19wZXJfbmFubyA9IDEwMDA7CisJdWludDY0X3QgdGVtcDY0OworCSpjbG9ja19zb3VyY2UgPSBuaV90aW9fZ2VuZXJpY19jbG9ja19zcmNfc2VsZWN0KGNvdW50ZXIpOworCXRlbXA2NCA9IG5pX3Rpb19jbG9ja19wZXJpb2RfcHMoY291bnRlciwgKmNsb2NrX3NvdXJjZSk7CisJZG9fZGl2KHRlbXA2NCwgcGljb19wZXJfbmFubyk7CisJKnBlcmlvZF9ucyA9IHRlbXA2NDsKK30KKworc3RhdGljIHZvaWQgbmlfdGlvX3NldF9maXJzdF9nYXRlX21vZGlmaWVycyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwl1bnNpZ25lZCBpbnQgZ2F0ZV9zb3VyY2UpCit7CisJY29uc3QgdW5zaWduZWQgbW9kZV9tYXNrID0gR2lfR2F0ZV9Qb2xhcml0eV9CaXQgfCBHaV9HYXRpbmdfTW9kZV9NYXNrOworCXVuc2lnbmVkIG1vZGVfdmFsdWVzID0gMDsKKworCWlmIChnYXRlX3NvdXJjZSAmIENSX0lOVkVSVCkgeworCQltb2RlX3ZhbHVlcyB8PSBHaV9HYXRlX1BvbGFyaXR5X0JpdDsKKwl9CisJaWYgKGdhdGVfc291cmNlICYgQ1JfRURHRSkgeworCQltb2RlX3ZhbHVlcyB8PSBHaV9SaXNpbmdfRWRnZV9HYXRpbmdfQml0czsKKwl9IGVsc2UgeworCQltb2RlX3ZhbHVlcyB8PSBHaV9MZXZlbF9HYXRpbmdfQml0czsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIE5JVElPX0dpX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQltb2RlX21hc2ssIG1vZGVfdmFsdWVzKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X3NldF9maXJzdF9nYXRlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBpbnQgZ2F0ZV9zb3VyY2UpCit7CisJY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfZ2F0ZSA9IENSX0NIQU4oZ2F0ZV9zb3VyY2UpOworCS8qIGJpdHMgb2Ygc2VsZWN0ZWRfZ2F0ZSB0aGF0IG1heSBiZSBtZWFuaW5nZnVsIHRvIGlucHV0IHNlbGVjdCByZWdpc3RlciAqLworCWNvbnN0IHVuc2lnbmVkIHNlbGVjdGVkX2dhdGVfbWFzayA9IDB4MWY7CisJdW5zaWduZWQgbmlfNjYweF9nYXRlX3NlbGVjdDsKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChzZWxlY3RlZF9nYXRlKSB7CisJY2FzZSBOSV9HUENUX05FWFRfU09VUkNFX0dBVEVfU0VMRUNUOgorCQluaV82NjB4X2dhdGVfc2VsZWN0ID0gTklfNjYweF9OZXh0X1NSQ19HYXRlX1NlbGVjdDsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX05FWFRfT1VUX0dBVEVfU0VMRUNUOgorCWNhc2UgTklfR1BDVF9MT0dJQ19MT1dfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX1NPVVJDRV9QSU5faV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfR0FURV9QSU5faV9HQVRFX1NFTEVDVDoKKwkJbmlfNjYweF9nYXRlX3NlbGVjdCA9IHNlbGVjdGVkX2dhdGUgJiBzZWxlY3RlZF9nYXRlX21hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChzZWxlY3RlZF9nYXRlID09IE5JX0dQQ1RfUlRTSV9HQVRFX1NFTEVDVChpKSkgeworCQkJCW5pXzY2MHhfZ2F0ZV9zZWxlY3QgPQorCQkJCQlzZWxlY3RlZF9nYXRlICYgc2VsZWN0ZWRfZ2F0ZV9tYXNrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X2dhdGVfcGluOyArK2kpIHsKKwkJCWlmIChzZWxlY3RlZF9nYXRlID09IE5JX0dQQ1RfR0FURV9QSU5fR0FURV9TRUxFQ1QoaSkpIHsKKwkJCQluaV82NjB4X2dhdGVfc2VsZWN0ID0KKwkJCQkJc2VsZWN0ZWRfZ2F0ZSAmIHNlbGVjdGVkX2dhdGVfbWFzazsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF9nYXRlX3BpbikKKwkJCWJyZWFrOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlHaV9HYXRlX1NlbGVjdF9NYXNrLCBHaV9HYXRlX1NlbGVjdF9CaXRzKG5pXzY2MHhfZ2F0ZV9zZWxlY3QpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9tX3Nlcmllc19zZXRfZmlyc3RfZ2F0ZShzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwl1bnNpZ25lZCBpbnQgZ2F0ZV9zb3VyY2UpCit7CisJY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfZ2F0ZSA9IENSX0NIQU4oZ2F0ZV9zb3VyY2UpOworCS8qIGJpdHMgb2Ygc2VsZWN0ZWRfZ2F0ZSB0aGF0IG1heSBiZSBtZWFuaW5nZnVsIHRvIGlucHV0IHNlbGVjdCByZWdpc3RlciAqLworCWNvbnN0IHVuc2lnbmVkIHNlbGVjdGVkX2dhdGVfbWFzayA9IDB4MWY7CisJdW5zaWduZWQgbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3Q7CisJdW5zaWduZWQgaTsKKworCXN3aXRjaCAoc2VsZWN0ZWRfZ2F0ZSkgeworCWNhc2UgTklfR1BDVF9USU1FU1RBTVBfTVVYX0dBVEVfU0VMRUNUOgorCWNhc2UgTklfR1BDVF9BSV9TVEFSVDJfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX1BYSV9TVEFSX1RSSUdHRVJfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX05FWFRfT1VUX0dBVEVfU0VMRUNUOgorCWNhc2UgTklfR1BDVF9BSV9TVEFSVDFfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX05FWFRfU09VUkNFX0dBVEVfU0VMRUNUOgorCWNhc2UgTklfR1BDVF9BTkFMT0dfVFJJR0dFUl9PVVRfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDoKKwkJbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QgPSBzZWxlY3RlZF9nYXRlICYgc2VsZWN0ZWRfZ2F0ZV9tYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX2dhdGUgPT0gTklfR1BDVF9SVFNJX0dBVEVfU0VMRUNUKGkpKSB7CisJCQkJbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QgPQorCQkJCQlzZWxlY3RlZF9nYXRlICYgc2VsZWN0ZWRfZ2F0ZV9tYXNrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX2dhdGUgPT0gTklfR1BDVF9QRklfR0FURV9TRUxFQ1QoaSkpIHsKKwkJCQluaV9tX3Nlcmllc19nYXRlX3NlbGVjdCA9CisJCQkJCXNlbGVjdGVkX2dhdGUgJiBzZWxlY3RlZF9nYXRlX21hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX0dhdGVfU2VsZWN0X01hc2ssCisJCUdpX0dhdGVfU2VsZWN0X0JpdHMobmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NjB4X3NldF9zZWNvbmRfZ2F0ZShzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwl1bnNpZ25lZCBpbnQgZ2F0ZV9zb3VyY2UpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCWNvbnN0IHVuc2lnbmVkIHNlY29uZF9nYXRlX3JlZyA9CisJCU5JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwljb25zdCB1bnNpZ25lZCBzZWxlY3RlZF9zZWNvbmRfZ2F0ZSA9IENSX0NIQU4oZ2F0ZV9zb3VyY2UpOworCS8qIGJpdHMgb2Ygc2Vjb25kX2dhdGUgdGhhdCBtYXkgYmUgbWVhbmluZ2Z1bCB0byBzZWNvbmQgZ2F0ZSByZWdpc3RlciAqLworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzZWxlY3RlZF9zZWNvbmRfZ2F0ZV9tYXNrID0gMHgxZjsKKwl1bnNpZ25lZCBuaV82NjB4X3NlY29uZF9nYXRlX3NlbGVjdDsKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChzZWxlY3RlZF9zZWNvbmRfZ2F0ZSkgeworCWNhc2UgTklfR1BDVF9TT1VSQ0VfUElOX2lfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX1VQX0RPV05fUElOX2lfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX1NFTEVDVEVEX0dBVEVfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX05FWFRfT1VUX0dBVEVfU0VMRUNUOgorCWNhc2UgTklfR1BDVF9MT0dJQ19MT1dfR0FURV9TRUxFQ1Q6CisJCW5pXzY2MHhfc2Vjb25kX2dhdGVfc2VsZWN0ID0KKwkJCXNlbGVjdGVkX3NlY29uZF9nYXRlICYgc2VsZWN0ZWRfc2Vjb25kX2dhdGVfbWFzazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX05FWFRfU09VUkNFX0dBVEVfU0VMRUNUOgorCQluaV82NjB4X3NlY29uZF9nYXRlX3NlbGVjdCA9CisJCQlOSV82NjB4X05leHRfU1JDX1NlY29uZF9HYXRlX1NlbGVjdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX3NlY29uZF9nYXRlID09IE5JX0dQQ1RfUlRTSV9HQVRFX1NFTEVDVChpKSkgeworCQkJCW5pXzY2MHhfc2Vjb25kX2dhdGVfc2VsZWN0ID0KKwkJCQkJc2VsZWN0ZWRfc2Vjb25kX2dhdGUgJgorCQkJCQlzZWxlY3RlZF9zZWNvbmRfZ2F0ZV9tYXNrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X3VwX2Rvd25fcGluOyArK2kpIHsKKwkJCWlmIChzZWxlY3RlZF9zZWNvbmRfZ2F0ZSA9PQorCQkJCU5JX0dQQ1RfVVBfRE9XTl9QSU5fR0FURV9TRUxFQ1QoaSkpIHsKKwkJCQluaV82NjB4X3NlY29uZF9nYXRlX3NlbGVjdCA9CisJCQkJCXNlbGVjdGVkX3NlY29uZF9nYXRlICYKKwkJCQkJc2VsZWN0ZWRfc2Vjb25kX2dhdGVfbWFzazsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF91cF9kb3duX3BpbikKKwkJCWJyZWFrOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfTsKKwljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddIHw9IEdpX1NlY29uZF9HYXRlX01vZGVfQml0OworCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gJj0gfkdpX1NlY29uZF9HYXRlX1NlbGVjdF9NYXNrOworCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gfD0KKwkJR2lfU2Vjb25kX0dhdGVfU2VsZWN0X0JpdHMobmlfNjYweF9zZWNvbmRfZ2F0ZV9zZWxlY3QpOworCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10sCisJCXNlY29uZF9nYXRlX3JlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfbV9zZXJpZXNfc2V0X3NlY29uZF9nYXRlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgc2Vjb25kX2dhdGVfcmVnID0KKwkJTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCWNvbnN0IHVuc2lnbmVkIHNlbGVjdGVkX3NlY29uZF9nYXRlID0gQ1JfQ0hBTihnYXRlX3NvdXJjZSk7CisJLyogYml0cyBvZiBzZWNvbmRfZ2F0ZSB0aGF0IG1heSBiZSBtZWFuaW5nZnVsIHRvIHNlY29uZCBnYXRlIHJlZ2lzdGVyICovCisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNlbGVjdGVkX3NlY29uZF9nYXRlX21hc2sgPSAweDFmOworCXVuc2lnbmVkIG5pX21fc2VyaWVzX3NlY29uZF9nYXRlX3NlbGVjdDsKKworCS8qIEZJWE1FOiBXZSBkb24ndCBrbm93IHdoYXQgdGhlIG0tc2VyaWVzIHNlY29uZCBnYXRlIGNvZGVzIGFyZSwgc28gd2UnbGwganVzdCBwYXNzCisJICAgdGhlIGJpdHMgdGhyb3VnaCBmb3Igbm93LiAqLworCXN3aXRjaCAoc2VsZWN0ZWRfc2Vjb25kX2dhdGUpIHsKKwlkZWZhdWx0OgorCQluaV9tX3Nlcmllc19zZWNvbmRfZ2F0ZV9zZWxlY3QgPQorCQkJc2VsZWN0ZWRfc2Vjb25kX2dhdGUgJiBzZWxlY3RlZF9zZWNvbmRfZ2F0ZV9tYXNrOworCQlicmVhazsKKwl9OworCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gfD0gR2lfU2Vjb25kX0dhdGVfTW9kZV9CaXQ7CisJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSAmPSB+R2lfU2Vjb25kX0dhdGVfU2VsZWN0X01hc2s7CisJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSB8PQorCQlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfQml0cyhuaV9tX3Nlcmllc19zZWNvbmRfZ2F0ZV9zZWxlY3QpOworCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10sCisJCXNlY29uZF9nYXRlX3JlZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBuaV90aW9fc2V0X2dhdGVfc3JjKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBnYXRlX2luZGV4LAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgc2Vjb25kX2dhdGVfcmVnID0KKwkJTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCisJc3dpdGNoIChnYXRlX2luZGV4KSB7CisJY2FzZSAwOgorCQlpZiAoQ1JfQ0hBTihnYXRlX3NvdXJjZSkgPT0gTklfR1BDVF9ESVNBQkxFRF9HQVRFX1NFTEVDVCkgeworCQkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQkJTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCQkJR2lfR2F0aW5nX01vZGVfTWFzaywgR2lfR2F0aW5nX0Rpc2FibGVkX0JpdHMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbmlfdGlvX3NldF9maXJzdF9nYXRlX21vZGlmaWVycyhjb3VudGVyLCBnYXRlX3NvdXJjZSk7CisJCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQkJcmV0dXJuIG5pX21fc2VyaWVzX3NldF9maXJzdF9nYXRlKGNvdW50ZXIsIGdhdGVfc291cmNlKTsKKwkJCWJyZWFrOworCQljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQkJcmV0dXJuIG5pXzY2MHhfc2V0X2ZpcnN0X2dhdGUoY291bnRlciwgZ2F0ZV9zb3VyY2UpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKG5pX3Rpb19zZWNvbmRfZ2F0ZV9yZWdpc3RlcnNfcHJlc2VudChjb3VudGVyX2RldikgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoQ1JfQ0hBTihnYXRlX3NvdXJjZSkgPT0gTklfR1BDVF9ESVNBQkxFRF9HQVRFX1NFTEVDVCkgeworCQkJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSAmPQorCQkJCX5HaV9TZWNvbmRfR2F0ZV9Nb2RlX0JpdDsKKwkJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsCisJCQkJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSwKKwkJCQlzZWNvbmRfZ2F0ZV9yZWcpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGdhdGVfc291cmNlICYgQ1JfSU5WRVJUKSB7CisJCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddIHw9CisJCQkJR2lfU2Vjb25kX0dhdGVfUG9sYXJpdHlfQml0OworCQl9IGVsc2UgeworCQkJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSAmPQorCQkJCX5HaV9TZWNvbmRfR2F0ZV9Qb2xhcml0eV9CaXQ7CisJCX0KKwkJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCQljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJCXJldHVybiBuaV9tX3Nlcmllc19zZXRfc2Vjb25kX2dhdGUoY291bnRlciwKKwkJCQlnYXRlX3NvdXJjZSk7CisJCQlicmVhazsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJCXJldHVybiBuaV82NjB4X3NldF9zZWNvbmRfZ2F0ZShjb3VudGVyLCBnYXRlX3NvdXJjZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV90aW9fc2V0X290aGVyX3NyYyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgdW5zaWduZWQgaW5kZXgsCisJdW5zaWduZWQgaW50IHNvdXJjZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisKKwlpZiAoY291bnRlcl9kZXYtPnZhcmlhbnQgPT0gbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzKSB7CisJCXVuc2lnbmVkIGludCBhYnpfcmVnLCBzaGlmdCwgbWFzazsKKworCQlhYnpfcmVnID0gTklUSU9fR2lfQUJaX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwkJc3dpdGNoIChpbmRleCkgeworCQljYXNlIE5JX0dQQ1RfU09VUkNFX0VOQ09ERVJfQToKKwkJCXNoaWZ0ID0gMTA7CisJCQlicmVhazsKKwkJY2FzZSBOSV9HUENUX1NPVVJDRV9FTkNPREVSX0I6CisJCQlzaGlmdCA9IDU7CisJCQlicmVhazsKKwkJY2FzZSBOSV9HUENUX1NPVVJDRV9FTkNPREVSX1o6CisJCQlzaGlmdCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJbWFzayA9IDB4MWYgPDwgc2hpZnQ7CisJCWlmIChzb3VyY2UgPiAweDFmKSB7CisJCQkvKiBEaXNhYmxlIGdhdGUgKi8KKwkJCXNvdXJjZSA9IDB4MWY7CisJCX0KKwkJY291bnRlcl9kZXYtPnJlZ3NbYWJ6X3JlZ10gJj0gfm1hc2s7CisJCWNvdW50ZXJfZGV2LT5yZWdzW2Fiel9yZWddIHw9IChzb3VyY2UgPDwgc2hpZnQpICYgbWFzazsKKwkJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgY291bnRlcl9kZXYtPnJlZ3NbYWJ6X3JlZ10sIGFiel9yZWcpOworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiJXMgJXggJWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgY291bnRlcl9kZXYtPnJlZ3NbYWJ6X3JlZ10sIGluZGV4LCBzb3VyY2UpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV82NjB4X2ZpcnN0X2dhdGVfdG9fZ2VuZXJpY19nYXRlX3NvdXJjZSh1bnNpZ25lZAorCW5pXzY2MHhfZ2F0ZV9zZWxlY3QpCit7CisJdW5zaWduZWQgaTsKKworCXN3aXRjaCAobmlfNjYweF9nYXRlX3NlbGVjdCkgeworCWNhc2UgTklfNjYweF9Tb3VyY2VfUGluX2lfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX1NPVVJDRV9QSU5faV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X0dhdGVfUGluX2lfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX0dBVEVfUElOX2lfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9OZXh0X1NSQ19HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTkVYVF9TT1VSQ0VfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9OZXh0X091dF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9Mb2dpY19Mb3dfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKG5pXzY2MHhfZ2F0ZV9zZWxlY3QgPT0gTklfNjYweF9SVFNJX0dhdGVfU2VsZWN0KGkpKSB7CisJCQkJcmV0dXJuIE5JX0dQQ1RfUlRTSV9HQVRFX1NFTEVDVChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9nYXRlX3BpbjsgKytpKSB7CisJCQlpZiAobmlfNjYweF9nYXRlX3NlbGVjdCA9PQorCQkJCU5JXzY2MHhfR2F0ZV9QaW5fR2F0ZV9TZWxlY3QoaSkpIHsKKwkJCQlyZXR1cm4gTklfR1BDVF9HQVRFX1BJTl9HQVRFX1NFTEVDVChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF9nYXRlX3BpbikKKwkJCWJyZWFrOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfTsKKworc3RhdGljIHVuc2lnbmVkIG5pX21fc2VyaWVzX2ZpcnN0X2dhdGVfdG9fZ2VuZXJpY19nYXRlX3NvdXJjZSh1bnNpZ25lZAorCW5pX21fc2VyaWVzX2dhdGVfc2VsZWN0KQoreworCXVuc2lnbmVkIGk7CisKKwlzd2l0Y2ggKG5pX21fc2VyaWVzX2dhdGVfc2VsZWN0KSB7CisJY2FzZSBOSV9NX1Nlcmllc19UaW1lc3RhbXBfTXV4X0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9USU1FU1RBTVBfTVVYX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX0FJX1NUQVJUMl9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfQUlfU1RBUlQyX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX1BYSV9TdGFyX1RyaWdnZXJfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX1BYSV9TVEFSX1RSSUdHRVJfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfTmV4dF9PdXRfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX05FWFRfT1VUX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX0FJX1NUQVJUMV9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfQUlfU1RBUlQxX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX05leHRfU1JDX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9ORVhUX1NPVVJDRV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19BbmFsb2dfVHJpZ2dlcl9PdXRfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX0FOQUxPR19UUklHR0VSX09VVF9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19Mb2dpY19Mb3dfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChuaV9tX3Nlcmllc19nYXRlX3NlbGVjdCA9PQorCQkJCU5JX01fU2VyaWVzX1JUU0lfR2F0ZV9TZWxlY3QoaSkpIHsKKwkJCQlyZXR1cm4gTklfR1BDVF9SVFNJX0dBVEVfU0VMRUNUKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKG5pX21fc2VyaWVzX2dhdGVfc2VsZWN0ID09CisJCQkJTklfTV9TZXJpZXNfUEZJX0dhdGVfU2VsZWN0KGkpKSB7CisJCQkJcmV0dXJuIE5JX0dQQ1RfUEZJX0dBVEVfU0VMRUNUKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pX21fc2VyaWVzX21heF9wZmlfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfTsKKworc3RhdGljIHVuc2lnbmVkIG5pXzY2MHhfc2Vjb25kX2dhdGVfdG9fZ2VuZXJpY19nYXRlX3NvdXJjZSh1bnNpZ25lZAorCW5pXzY2MHhfZ2F0ZV9zZWxlY3QpCit7CisJdW5zaWduZWQgaTsKKworCXN3aXRjaCAobmlfNjYweF9nYXRlX3NlbGVjdCkgeworCWNhc2UgTklfNjYweF9Tb3VyY2VfUGluX2lfU2Vjb25kX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9TT1VSQ0VfUElOX2lfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9VcF9Eb3duX1Bpbl9pX1NlY29uZF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfVVBfRE9XTl9QSU5faV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfU1JDX1NlY29uZF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTkVYVF9TT1VSQ0VfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9OZXh0X091dF9TZWNvbmRfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX05FWFRfT1VUX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JXzY2MHhfU2VsZWN0ZWRfR2F0ZV9TZWNvbmRfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX1NFTEVDVEVEX0dBVEVfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9Mb2dpY19Mb3dfU2Vjb25kX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9MT0dJQ19MT1dfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChuaV82NjB4X2dhdGVfc2VsZWN0ID09CisJCQkJTklfNjYweF9SVFNJX1NlY29uZF9HYXRlX1NlbGVjdChpKSkgeworCQkJCXJldHVybiBOSV9HUENUX1JUU0lfR0FURV9TRUxFQ1QoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfdXBfZG93bl9waW47ICsraSkgeworCQkJaWYgKG5pXzY2MHhfZ2F0ZV9zZWxlY3QgPT0KKwkJCQlOSV82NjB4X1VwX0Rvd25fUGluX1NlY29uZF9HYXRlX1NlbGVjdChpKSkgeworCQkJCXJldHVybiBOSV9HUENUX1VQX0RPV05fUElOX0dBVEVfU0VMRUNUKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3VwX2Rvd25fcGluKQorCQkJYnJlYWs7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgdW5zaWduZWQgbmlfbV9zZXJpZXNfc2Vjb25kX2dhdGVfdG9fZ2VuZXJpY19nYXRlX3NvdXJjZSh1bnNpZ25lZAorCW5pX21fc2VyaWVzX2dhdGVfc2VsZWN0KQoreworCS8qRklYTUU6IHRoZSBzZWNvbmQgZ2F0ZSBzb3VyY2VzIGZvciB0aGUgbSBzZXJpZXMgYXJlIHVuZG9jdW1lbnRlZCwgc28gd2UganVzdCByZXR1cm4KKwkgKiB0aGUgcmF3IGJpdHMgZm9yIG5vdy4gKi8KKwlzd2l0Y2ggKG5pX21fc2VyaWVzX2dhdGVfc2VsZWN0KSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIG5pX21fc2VyaWVzX2dhdGVfc2VsZWN0OworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IG5pX3Rpb19nZXRfZ2F0ZV9zcmMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGdhdGVfaW5kZXgsCisJdW5zaWduZWQgaW50ICogZ2F0ZV9zb3VyY2UpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCWNvbnN0IHVuc2lnbmVkIG1vZGVfYml0cyA9IG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCU5JVElPX0dpX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwljb25zdCB1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9yZWcgPQorCQlOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJdW5zaWduZWQgZ2F0ZV9zZWxlY3RfYml0czsKKworCXN3aXRjaCAoZ2F0ZV9pbmRleCkgeworCWNhc2UgMDoKKwkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSA9PQorCQkJR2lfR2F0aW5nX0Rpc2FibGVkX0JpdHMpIHsKKwkJCSpnYXRlX3NvdXJjZSA9IE5JX0dQQ1RfRElTQUJMRURfR0FURV9TRUxFQ1Q7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWdhdGVfc2VsZWN0X2JpdHMgPQorCQkJCShuaV90aW9fZ2V0X3NvZnRfY29weShjb3VudGVyLAorCQkJCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPgorCQkJCQkJY291bnRlcl9pbmRleCkpICYKKwkJCQlHaV9HYXRlX1NlbGVjdF9NYXNrKSA+PiBHaV9HYXRlX1NlbGVjdF9TaGlmdDsKKwkJfQorCQlzd2l0Y2ggKGNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJCSpnYXRlX3NvdXJjZSA9CisJCQkJbmlfbV9zZXJpZXNfZmlyc3RfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlCisJCQkJKGdhdGVfc2VsZWN0X2JpdHMpOworCQkJYnJlYWs7CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCQkqZ2F0ZV9zb3VyY2UgPQorCQkJCW5pXzY2MHhfZmlyc3RfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlCisJCQkJKGdhdGVfc2VsZWN0X2JpdHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChtb2RlX2JpdHMgJiBHaV9HYXRlX1BvbGFyaXR5X0JpdCkgeworCQkJKmdhdGVfc291cmNlIHw9IENSX0lOVkVSVDsKKwkJfQorCQlpZiAoKG1vZGVfYml0cyAmIEdpX0dhdGluZ19Nb2RlX01hc2spICE9IEdpX0xldmVsX0dhdGluZ19CaXRzKSB7CisJCQkqZ2F0ZV9zb3VyY2UgfD0gQ1JfRURHRTsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CisJCWlmICgobW9kZV9iaXRzICYgR2lfR2F0aW5nX01vZGVfTWFzaykgPT0gR2lfR2F0aW5nX0Rpc2FibGVkX0JpdHMKKwkJCXx8IChjb3VudGVyX2Rldi0+CisJCQkJcmVnc1tzZWNvbmRfZ2F0ZV9yZWddICYgR2lfU2Vjb25kX0dhdGVfTW9kZV9CaXQpCisJCQk9PSAwKSB7CisJCQkqZ2F0ZV9zb3VyY2UgPSBOSV9HUENUX0RJU0FCTEVEX0dBVEVfU0VMRUNUOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlnYXRlX3NlbGVjdF9iaXRzID0KKwkJCQkoY291bnRlcl9kZXYtPgorCQkJCXJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSAmCisJCQkJR2lfU2Vjb25kX0dhdGVfU2VsZWN0X01hc2spID4+CisJCQkJR2lfU2Vjb25kX0dhdGVfU2VsZWN0X1NoaWZ0OworCQl9CisJCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQkJKmdhdGVfc291cmNlID0KKwkJCQluaV9tX3Nlcmllc19zZWNvbmRfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlCisJCQkJKGdhdGVfc2VsZWN0X2JpdHMpOworCQkJYnJlYWs7CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCQkqZ2F0ZV9zb3VyY2UgPQorCQkJCW5pXzY2MHhfc2Vjb25kX2dhdGVfdG9fZ2VuZXJpY19nYXRlX3NvdXJjZQorCQkJCShnYXRlX3NlbGVjdF9iaXRzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY291bnRlcl9kZXYtPgorCQkJcmVnc1tzZWNvbmRfZ2F0ZV9yZWddICYgR2lfU2Vjb25kX0dhdGVfUG9sYXJpdHlfQml0KSB7CisJCQkqZ2F0ZV9zb3VyY2UgfD0gQ1JfSU5WRVJUOworCQl9CisJCS8qIHNlY29uZCBnYXRlIGNhbid0IGhhdmUgZWRnZS9sZXZlbCBtb2RlIHNldCBpbmRlcGVuZGVudGx5ICovCisJCWlmICgobW9kZV9iaXRzICYgR2lfR2F0aW5nX01vZGVfTWFzaykgIT0gR2lfTGV2ZWxfR2F0aW5nX0JpdHMpIHsKKwkJCSpnYXRlX3NvdXJjZSB8PSBDUl9FREdFOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBuaV90aW9faW5zbl9jb25maWcoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX1NFVF9DT1VOVEVSX01PREU6CisJCXJldHVybiBuaV90aW9fc2V0X2NvdW50ZXJfbW9kZShjb3VudGVyLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19BUk06CisJCXJldHVybiBuaV90aW9fYXJtKGNvdW50ZXIsIDEsIGRhdGFbMV0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJU0FSTToKKwkJbmlfdGlvX2FybShjb3VudGVyLCAwLCAwKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0NPVU5URVJfU1RBVFVTOgorCQlkYXRhWzFdID0gbmlfdGlvX2NvdW50ZXJfc3RhdHVzKGNvdW50ZXIpOworCQlkYXRhWzJdID0gY291bnRlcl9zdGF0dXNfbWFzazsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0NMT0NLX1NSQzoKKwkJcmV0dXJuIG5pX3Rpb19zZXRfY2xvY2tfc3JjKGNvdW50ZXIsIGRhdGFbMV0sIGRhdGFbMl0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9DTE9DS19TUkM6CisJCW5pX3Rpb19nZXRfY2xvY2tfc3JjKGNvdW50ZXIsICZkYXRhWzFdLCAmZGF0YVsyXSk7CisJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1NFVF9HQVRFX1NSQzoKKwkJcmV0dXJuIG5pX3Rpb19zZXRfZ2F0ZV9zcmMoY291bnRlciwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0dBVEVfU1JDOgorCQlyZXR1cm4gbmlfdGlvX2dldF9nYXRlX3NyYyhjb3VudGVyLCBkYXRhWzFdLCAmZGF0YVsyXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX09USEVSX1NSQzoKKwkJcmV0dXJuIG5pX3Rpb19zZXRfb3RoZXJfc3JjKGNvdW50ZXIsIGRhdGFbMV0sIGRhdGFbMl0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1JFU0VUOgorCQluaV90aW9fcmVzZXRfY291bnRfYW5kX2Rpc2FybShjb3VudGVyKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IG5pX3Rpb19yaW5zbihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGZpcnN0X3JlYWQ7CisJdW5zaWduZWQgc2Vjb25kX3JlYWQ7CisJdW5zaWduZWQgY29ycmVjdF9yZWFkOworCisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGNoYW5uZWwpIHsKKwljYXNlIDA6CisJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCQlHaV9TYXZlX1RyYWNlX0JpdCwgMCk7CisJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCQlHaV9TYXZlX1RyYWNlX0JpdCwgR2lfU2F2ZV9UcmFjZV9CaXQpOworCQkvKiBUaGUgY291bnQgZG9lc24ndCBnZXQgbGF0Y2hlZCB1bnRpbCB0aGUgbmV4dCBjbG9jayBlZGdlLCBzbyBpdCBpcyBwb3NzaWJsZSB0aGUgY291bnQKKwkJICAgbWF5IGNoYW5nZSAob25jZSkgd2hpbGUgd2UgYXJlIHJlYWRpbmcuICBTaW5jZSB0aGUgcmVhZCBvZiB0aGUgU1dfU2F2ZV9SZWcgaXNuJ3QKKwkJICAgYXRvbWljIChhcHBhcmVudGx5IGV2ZW4gd2hlbiBpdCdzIGEgMzIgYml0IHJlZ2lzdGVyIGFjY29yZGluZyB0byA2NjB4IGRvY3MpLAorCQkgICB3ZSBuZWVkIHRvIHJlYWQgdHdpY2UgYW5kIG1ha2Ugc3VyZSB0aGUgcmVhZGluZyBoYXNuJ3QgY2hhbmdlZC4gIElmIGl0IGhhcywKKwkJICAgYSB0aGlyZCByZWFkIHdpbGwgYmUgY29ycmVjdCBzaW5jZSB0aGUgY291bnQgdmFsdWUgd2lsbCBkZWZpbml0ZWx5IGhhdmUgbGF0Y2hlZCBieSB0aGVuLiAqLworCQlmaXJzdF9yZWFkID0KKwkJCXJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJCU5JVElPX0dpX1NXX1NhdmVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwkJc2Vjb25kX3JlYWQgPQorCQkJcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQkJTklUSU9fR2lfU1dfU2F2ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCQlpZiAoZmlyc3RfcmVhZCAhPSBzZWNvbmRfcmVhZCkKKwkJCWNvcnJlY3RfcmVhZCA9CisJCQkJcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQkJCU5JVElPX0dpX1NXX1NhdmVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwkJZWxzZQorCQkJY29ycmVjdF9yZWFkID0gZmlyc3RfcmVhZDsKKwkJZGF0YVswXSA9IGNvcnJlY3RfcmVhZDsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGF0YVswXSA9CisJCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9Mb2FkQV9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCldOworCQlicmVhazsKKwljYXNlIDI6CisJCWRhdGFbMF0gPQorCQkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpXTsKKwkJYnJlYWs7CisJfTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX3Rpb19uZXh0X2xvYWRfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJY29uc3QgdW5zaWduZWQgYml0cyA9IHJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJTklUSU9fR3h4X1N0YXR1c19SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCisJaWYgKGJpdHMgJiBHaV9OZXh0X0xvYWRfU291cmNlX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSkgeworCQlyZXR1cm4gTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCX0gZWxzZSB7CisJCXJldHVybiBOSVRJT19HaV9Mb2FkQV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJfQorfQorCitpbnQgbmlfdGlvX3dpbnNuKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgbG9hZF9yZWc7CisKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAwOworCXN3aXRjaCAoY2hhbm5lbCkgeworCWNhc2UgMDoKKwkJLyogVW5zYWZlIGlmIGNvdW50ZXIgaXMgYXJtZWQuICBTaG91bGQgcHJvYmFibHkgY2hlY2sgc3RhdHVzIGFuZCByZXR1cm4gLUVCVVNZIGlmIGFybWVkLiAqLworCQkvKiBEb24ndCBkaXN0dXJiIGxvYWQgc291cmNlIHNlbGVjdCwganVzdCB1c2Ugd2hpY2hldmVyIGxvYWQgcmVnaXN0ZXIgaXMgYWxyZWFkeSBzZWxlY3RlZC4gKi8KKwkJbG9hZF9yZWcgPSBuaV90aW9fbmV4dF9sb2FkX3JlZ2lzdGVyKGNvdW50ZXIpOworCQl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBkYXRhWzBdLCBsb2FkX3JlZyk7CisJCW5pX3Rpb19zZXRfYml0c190cmFuc2llbnQoY291bnRlciwKKwkJCU5JVElPX0dpX0NvbW1hbmRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLCAwLCAwLAorCQkJR2lfTG9hZF9CaXQpOworCQkvKiByZXN0b3JlIHN0YXRlIG9mIGxvYWQgcmVnIHRvIHdoYXRldmVyIHRoZSB1c2VyIHNldCBsYXN0IHNldCBpdCB0byAqLworCQl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBjb3VudGVyX2Rldi0+cmVnc1tsb2FkX3JlZ10sIGxvYWRfcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9Mb2FkQV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCldID0KKwkJCWRhdGFbMF07CisJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGRhdGFbMF0sCisJCQlOSVRJT19HaV9Mb2FkQV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCQlicmVhazsKKwljYXNlIDI6CisJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV0gPQorCQkJZGF0YVswXTsKKwkJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgZGF0YVswXSwKKwkJCU5JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19yaW5zbik7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fd2luc24pOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2luc25fY29uZmlnKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19pbml0X2NvdW50ZXIpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2FybSk7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fc2V0X2dhdGVfc3JjKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX2dwY3RfZGV2aWNlX2NvbnN0cnVjdCk7CitFWFBPUlRfU1lNQk9MX0dQTChuaV9ncGN0X2RldmljZV9kZXN0cm95KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzI5ZDYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICAgIGRyaXZlcnMvbmlfdGlvLmgKKyAgICBIZWFkZXIgZmlsZSBmb3IgTkkgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgc3VwcG9ydCBjb2RlIChuaV90aW8uYykKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9DT01FRElfTklfVElPX0gKKyNkZWZpbmUgX0NPTUVESV9OSV9USU9fSAorCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKy8vIGZvcndhcmQgZGVjbGFyYXRpb25zCitzdHJ1Y3QgbWl0ZV9zdHJ1Y3Q7CitzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2U7CisKK2VudW0gbmlfZ3BjdF9yZWdpc3RlciB7CisJTklUSU9fRzBfQXV0b2luY3JlbWVudF9SZWcsCisJTklUSU9fRzFfQXV0b2luY3JlbWVudF9SZWcsCisJTklUSU9fRzJfQXV0b2luY3JlbWVudF9SZWcsCisJTklUSU9fRzNfQXV0b2luY3JlbWVudF9SZWcsCisJTklUSU9fRzBfQ29tbWFuZF9SZWcsCisJTklUSU9fRzFfQ29tbWFuZF9SZWcsCisJTklUSU9fRzJfQ29tbWFuZF9SZWcsCisJTklUSU9fRzNfQ29tbWFuZF9SZWcsCisJTklUSU9fRzBfSFdfU2F2ZV9SZWcsCisJTklUSU9fRzFfSFdfU2F2ZV9SZWcsCisJTklUSU9fRzJfSFdfU2F2ZV9SZWcsCisJTklUSU9fRzNfSFdfU2F2ZV9SZWcsCisJTklUSU9fRzBfU1dfU2F2ZV9SZWcsCisJTklUSU9fRzFfU1dfU2F2ZV9SZWcsCisJTklUSU9fRzJfU1dfU2F2ZV9SZWcsCisJTklUSU9fRzNfU1dfU2F2ZV9SZWcsCisJTklUSU9fRzBfTW9kZV9SZWcsCisJTklUSU9fRzFfTW9kZV9SZWcsCisJTklUSU9fRzJfTW9kZV9SZWcsCisJTklUSU9fRzNfTW9kZV9SZWcsCisJTklUSU9fRzBfTG9hZEFfUmVnLAorCU5JVElPX0cxX0xvYWRBX1JlZywKKwlOSVRJT19HMl9Mb2FkQV9SZWcsCisJTklUSU9fRzNfTG9hZEFfUmVnLAorCU5JVElPX0cwX0xvYWRCX1JlZywKKwlOSVRJT19HMV9Mb2FkQl9SZWcsCisJTklUSU9fRzJfTG9hZEJfUmVnLAorCU5JVElPX0czX0xvYWRCX1JlZywKKwlOSVRJT19HMF9JbnB1dF9TZWxlY3RfUmVnLAorCU5JVElPX0cxX0lucHV0X1NlbGVjdF9SZWcsCisJTklUSU9fRzJfSW5wdXRfU2VsZWN0X1JlZywKKwlOSVRJT19HM19JbnB1dF9TZWxlY3RfUmVnLAorCU5JVElPX0cwX0NvdW50aW5nX01vZGVfUmVnLAorCU5JVElPX0cxX0NvdW50aW5nX01vZGVfUmVnLAorCU5JVElPX0cyX0NvdW50aW5nX01vZGVfUmVnLAorCU5JVElPX0czX0NvdW50aW5nX01vZGVfUmVnLAorCU5JVElPX0cwX1NlY29uZF9HYXRlX1JlZywKKwlOSVRJT19HMV9TZWNvbmRfR2F0ZV9SZWcsCisJTklUSU9fRzJfU2Vjb25kX0dhdGVfUmVnLAorCU5JVElPX0czX1NlY29uZF9HYXRlX1JlZywKKwlOSVRJT19HMDFfU3RhdHVzX1JlZywKKwlOSVRJT19HMjNfU3RhdHVzX1JlZywKKwlOSVRJT19HMDFfSm9pbnRfUmVzZXRfUmVnLAorCU5JVElPX0cyM19Kb2ludF9SZXNldF9SZWcsCisJTklUSU9fRzAxX0pvaW50X1N0YXR1czFfUmVnLAorCU5JVElPX0cyM19Kb2ludF9TdGF0dXMxX1JlZywKKwlOSVRJT19HMDFfSm9pbnRfU3RhdHVzMl9SZWcsCisJTklUSU9fRzIzX0pvaW50X1N0YXR1czJfUmVnLAorCU5JVElPX0cwX0RNQV9Db25maWdfUmVnLAorCU5JVElPX0cxX0RNQV9Db25maWdfUmVnLAorCU5JVElPX0cyX0RNQV9Db25maWdfUmVnLAorCU5JVElPX0czX0RNQV9Db25maWdfUmVnLAorCU5JVElPX0cwX0RNQV9TdGF0dXNfUmVnLAorCU5JVElPX0cxX0RNQV9TdGF0dXNfUmVnLAorCU5JVElPX0cyX0RNQV9TdGF0dXNfUmVnLAorCU5JVElPX0czX0RNQV9TdGF0dXNfUmVnLAorCU5JVElPX0cwX0FCWl9SZWcsCisJTklUSU9fRzFfQUJaX1JlZywKKwlOSVRJT19HMF9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnLAorCU5JVElPX0cxX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcsCisJTklUSU9fRzJfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZywKKwlOSVRJT19HM19JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnLAorCU5JVElPX0cwX1N0YXR1c19SZWcsCisJTklUSU9fRzFfU3RhdHVzX1JlZywKKwlOSVRJT19HMl9TdGF0dXNfUmVnLAorCU5JVElPX0czX1N0YXR1c19SZWcsCisJTklUSU9fRzBfSW50ZXJydXB0X0VuYWJsZV9SZWcsCisJTklUSU9fRzFfSW50ZXJydXB0X0VuYWJsZV9SZWcsCisJTklUSU9fRzJfSW50ZXJydXB0X0VuYWJsZV9SZWcsCisJTklUSU9fRzNfSW50ZXJydXB0X0VuYWJsZV9SZWcsCisJTklUSU9fTnVtX1JlZ2lzdGVycywKK307CisKK2VudW0gbmlfZ3BjdF92YXJpYW50IHsKKwluaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXMsCisJbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzLAorCW5pX2dwY3RfdmFyaWFudF82NjB4Cit9OworCitzdHJ1Y3QgbmlfZ3BjdCB7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldjsKKwl1bnNpZ25lZCBjb3VudGVyX2luZGV4OworCXVuc2lnbmVkIGNoaXBfaW5kZXg7CisJdWludDY0X3QgY2xvY2tfcGVyaW9kX3BzOwkvKiBjbG9jayBwZXJpb2QgaW4gcGljb3NlY29uZHMgKi8KKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW47CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RydWN0IG5pX2dwY3RfZGV2aWNlIHsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OworCXZvaWQgKCp3cml0ZV9yZWdpc3RlcikgKHN0cnVjdCBuaV9ncGN0ICogY291bnRlciwgdW5zaWduZWQgYml0cywKKwkJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZyk7CisJdW5zaWduZWQgKCpyZWFkX3JlZ2lzdGVyKSAoc3RydWN0IG5pX2dwY3QgKiBjb3VudGVyLAorCQllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKTsKKwllbnVtIG5pX2dwY3RfdmFyaWFudCB2YXJpYW50OworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyczsKKwl1bnNpZ25lZCBudW1fY291bnRlcnM7CisJdW5zaWduZWQgcmVnc1tOSVRJT19OdW1fUmVnaXN0ZXJzXTsKKwlzcGlubG9ja190IHJlZ3NfbG9jazsKK307CisKK2V4dGVybiBzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKm5pX2dwY3RfZGV2aWNlX2NvbnN0cnVjdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl2b2lkICgqd3JpdGVfcmVnaXN0ZXIpIChzdHJ1Y3QgbmlfZ3BjdCAqIGNvdW50ZXIsIHVuc2lnbmVkIGJpdHMsCisJCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpLAorCXVuc2lnbmVkICgqcmVhZF9yZWdpc3RlcikgKHN0cnVjdCBuaV9ncGN0ICogY291bnRlciwKKwkJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZyksIGVudW0gbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQsCisJdW5zaWduZWQgbnVtX2NvdW50ZXJzKTsKK2V4dGVybiB2b2lkIG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3koc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2Rldik7CitleHRlcm4gdm9pZCBuaV90aW9faW5pdF9jb3VudGVyKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKTsKK2V4dGVybiBpbnQgbmlfdGlvX3JpbnNuKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworZXh0ZXJuIGludCBuaV90aW9faW5zbl9jb25maWcoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitleHRlcm4gaW50IG5pX3Rpb193aW5zbihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK2V4dGVybiBpbnQgbmlfdGlvX2NtZChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOworZXh0ZXJuIGludCBuaV90aW9fY21kdGVzdChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworZXh0ZXJuIGludCBuaV90aW9fY2FuY2VsKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKTsKK2V4dGVybiB2b2lkIG5pX3Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitleHRlcm4gdm9pZCBuaV90aW9fc2V0X21pdGVfY2hhbm5lbChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOworZXh0ZXJuIHZvaWQgbmlfdGlvX2Fja25vd2xlZGdlX2FuZF9jb25maXJtKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCWludCAqZ2F0ZV9lcnJvciwgaW50ICp0Y19lcnJvciwgaW50ICpwZXJtX3N0YWxlX2RhdGEsIGludCAqc3RhbGVfZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5pX2dwY3QgKnN1YmRldl90b19jb3VudGVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlyZXR1cm4gcy0+cHJpdmF0ZTsKK30KKworI2VuZGlmIC8qIF9DT01FRElfTklfVElPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW9faW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW9faW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzViMTcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb19pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNzc0IEBACisvKgorICAgIGRyaXZlcnMvbmlfdGlvX2ludGVybmFsLmgKKyAgICBIZWFkZXIgZmlsZSBmb3IgTkkgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgc3VwcG9ydCBjb2RlIChuaV90aW8uYyBhbmQKKyAgICBuaV90aW9jbWQuYykKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9DT01FRElfTklfVElPX0lOVEVSTkFMX0gKKyNkZWZpbmUgX0NPTUVESV9OSV9USU9fSU5URVJOQUxfSAorCisjaW5jbHVkZSAibmlfdGlvLmgiCisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0F1dG9pbmNyZW1lbnRfUmVnKHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9BdXRvaW5jcmVtZW50X1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfQXV0b2luY3JlbWVudF9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX0F1dG9pbmNyZW1lbnRfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19BdXRvaW5jcmVtZW50X1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfQ29tbWFuZF9SZWcodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9Db21tYW5kX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfQ29tbWFuZF9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX0NvbW1hbmRfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19Db21tYW5kX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfQ291bnRpbmdfTW9kZV9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0NvdW50aW5nX01vZGVfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9Db3VudGluZ19Nb2RlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfQ291bnRpbmdfTW9kZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0NvdW50aW5nX01vZGVfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9JbnB1dF9TZWxlY3RfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9JbnB1dF9TZWxlY3RfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9JbnB1dF9TZWxlY3RfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19JbnB1dF9TZWxlY3RfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HeHhfSm9pbnRfUmVzZXRfUmVnKHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzAxX0pvaW50X1Jlc2V0X1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0cyM19Kb2ludF9SZXNldF9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0d4eF9Kb2ludF9TdGF0dXMxX1JlZyh1bnNpZ25lZAorCWNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cwMV9Kb2ludF9TdGF0dXMxX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0cyM19Kb2ludF9TdGF0dXMxX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR3h4X0pvaW50X1N0YXR1czJfUmVnKHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzAxX0pvaW50X1N0YXR1czJfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzIzX0pvaW50X1N0YXR1czJfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HeHhfU3RhdHVzX1JlZyh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMDFfU3RhdHVzX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0cyM19TdGF0dXNfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9Mb2FkQV9SZWcodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9Mb2FkQV9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0xvYWRBX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfTG9hZEFfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19Mb2FkQV9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0xvYWRCX1JlZyh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0xvYWRCX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfTG9hZEJfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9Mb2FkQl9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0xvYWRCX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfTW9kZV9SZWcodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9Nb2RlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfTW9kZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX01vZGVfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19Nb2RlX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfU1dfU2F2ZV9SZWcoaW50IGNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfU1dfU2F2ZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX1NXX1NhdmVfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9TV19TYXZlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfU1dfU2F2ZV9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhpbnQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9TZWNvbmRfR2F0ZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX1NlY29uZF9HYXRlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfU2Vjb25kX0dhdGVfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19TZWNvbmRfR2F0ZV9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0RNQV9Db25maWdfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0RNQV9Db25maWdfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9ETUFfQ29uZmlnX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfRE1BX0NvbmZpZ19SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0RNQV9Db25maWdfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9ETUFfU3RhdHVzX1JlZyhpbnQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9ETUFfU3RhdHVzX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfRE1BX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX0RNQV9TdGF0dXNfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19ETUFfU3RhdHVzX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfQUJaX1JlZyhpbnQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9BQlpfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9BQlpfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnKGludAorCWNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfU3RhdHVzX1JlZyhpbnQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9TdGF0dXNfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9TdGF0dXNfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9TdGF0dXNfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19TdGF0dXNfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9JbnRlcnJ1cHRfRW5hYmxlX1JlZyhpbnQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0ludGVycnVwdF9FbmFibGVfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9JbnRlcnJ1cHRfRW5hYmxlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfSW50ZXJydXB0X0VuYWJsZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0ludGVycnVwdF9FbmFibGVfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitlbnVtIEdpX0F1dG9fSW5jcmVtZW50X1JlZ19CaXRzIHsKKwlHaV9BdXRvX0luY3JlbWVudF9NYXNrID0gMHhmZgorfTsKKworI2RlZmluZSBHaV9VcF9Eb3duX1NoaWZ0IDUKK2VudW0gR2lfQ29tbWFuZF9SZWdfQml0cyB7CisJR2lfQXJtX0JpdCA9IDB4MSwKKwlHaV9TYXZlX1RyYWNlX0JpdCA9IDB4MiwKKwlHaV9Mb2FkX0JpdCA9IDB4NCwKKwlHaV9EaXNhcm1fQml0ID0gMHgxMCwKKwlHaV9VcF9Eb3duX01hc2sgPSAweDMgPDwgR2lfVXBfRG93bl9TaGlmdCwKKwlHaV9BbHdheXNfRG93bl9CaXRzID0gMHgwIDw8IEdpX1VwX0Rvd25fU2hpZnQsCisJR2lfQWx3YXlzX1VwX0JpdHMgPSAweDEgPDwgR2lfVXBfRG93bl9TaGlmdCwKKwlHaV9VcF9Eb3duX0hhcmR3YXJlX0lPX0JpdHMgPSAweDIgPDwgR2lfVXBfRG93bl9TaGlmdCwKKwlHaV9VcF9Eb3duX0hhcmR3YXJlX0dhdGVfQml0cyA9IDB4MyA8PCBHaV9VcF9Eb3duX1NoaWZ0LAorCUdpX1dyaXRlX1N3aXRjaF9CaXQgPSAweDgwLAorCUdpX1N5bmNocm9uaXplX0dhdGVfQml0ID0gMHgxMDAsCisJR2lfTGl0dGxlX0JpZ19FbmRpYW5fQml0ID0gMHgyMDAsCisJR2lfQmFua19Td2l0Y2hfU3RhcnRfQml0ID0gMHg0MDAsCisJR2lfQmFua19Td2l0Y2hfTW9kZV9CaXQgPSAweDgwMCwKKwlHaV9CYW5rX1N3aXRjaF9FbmFibGVfQml0ID0gMHgxMDAwLAorCUdpX0FybV9Db3B5X0JpdCA9IDB4MjAwMCwKKwlHaV9TYXZlX1RyYWNlX0NvcHlfQml0ID0gMHg0MDAwLAorCUdpX0Rpc2FybV9Db3B5X0JpdCA9IDB4ODAwMAorfTsKKworI2RlZmluZSBHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCA1CisjZGVmaW5lIEdpX0hXX0FybV9TZWxlY3RfU2hpZnQgOAorZW51bSBHaV9Db3VudGluZ19Nb2RlX1JlZ19CaXRzIHsKKwlHaV9Db3VudGluZ19Nb2RlX01hc2sgPSAweDcsCisJR2lfQ291bnRpbmdfTW9kZV9Ob3JtYWxfQml0cyA9IDB4MCwKKwlHaV9Db3VudGluZ19Nb2RlX1F1YWRyYXR1cmVYMV9CaXRzID0gMHgxLAorCUdpX0NvdW50aW5nX01vZGVfUXVhZHJhdHVyZVgyX0JpdHMgPSAweDIsCisJR2lfQ291bnRpbmdfTW9kZV9RdWFkcmF0dXJlWDRfQml0cyA9IDB4MywKKwlHaV9Db3VudGluZ19Nb2RlX1R3b19QdWxzZV9CaXRzID0gMHg0LAorCUdpX0NvdW50aW5nX01vZGVfU3luY19Tb3VyY2VfQml0cyA9IDB4NiwKKwlHaV9JbmRleF9Nb2RlX0JpdCA9IDB4MTAsCisJR2lfSW5kZXhfUGhhc2VfTWFzayA9IDB4MyA8PCBHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCwKKwlHaV9JbmRleF9QaGFzZV9Mb3dBX0xvd0IgPSAweDAgPDwgR2lfSW5kZXhfUGhhc2VfQml0c2hpZnQsCisJR2lfSW5kZXhfUGhhc2VfTG93QV9IaWdoQiA9IDB4MSA8PCBHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCwKKwlHaV9JbmRleF9QaGFzZV9IaWdoQV9Mb3dCID0gMHgyIDw8IEdpX0luZGV4X1BoYXNlX0JpdHNoaWZ0LAorCUdpX0luZGV4X1BoYXNlX0hpZ2hBX0hpZ2hCID0gMHgzIDw8IEdpX0luZGV4X1BoYXNlX0JpdHNoaWZ0LAorCUdpX0hXX0FybV9FbmFibGVfQml0ID0gMHg4MCwJLyogZnJvbSBtLXNlcmllcyBleGFtcGxlIGNvZGUsIG5vdCBkb2N1bWVudGVkIGluIDY2MHggcmVnaXN0ZXIgbGV2ZWwgbWFudWFsICovCisJR2lfNjYweF9IV19Bcm1fU2VsZWN0X01hc2sgPSAweDcgPDwgR2lfSFdfQXJtX1NlbGVjdF9TaGlmdCwJLyogZnJvbSBtLXNlcmllcyBleGFtcGxlIGNvZGUsIG5vdCBkb2N1bWVudGVkIGluIDY2MHggcmVnaXN0ZXIgbGV2ZWwgbWFudWFsICovCisJR2lfNjYweF9QcmVzY2FsZV9YOF9CaXQgPSAweDEwMDAsCisJR2lfTV9TZXJpZXNfUHJlc2NhbGVfWDhfQml0ID0gMHgyMDAwLAorCUdpX01fU2VyaWVzX0hXX0FybV9TZWxlY3RfTWFzayA9IDB4MWYgPDwgR2lfSFdfQXJtX1NlbGVjdF9TaGlmdCwKKwkvKiBtdXN0IGJlIHNldCBmb3IgY2xvY2tzIG92ZXIgNDBNSHosIHdoaWNoIGluY2x1ZGVzIHN5bmNocm9ub3VzIGNvdW50aW5nIGFuZCBxdWFkcmF0dXJlIG1vZGVzICovCisJR2lfNjYweF9BbHRlcm5hdGVfU3luY19CaXQgPSAweDIwMDAsCisJR2lfTV9TZXJpZXNfQWx0ZXJuYXRlX1N5bmNfQml0ID0gMHg0MDAwLAorCUdpXzY2MHhfUHJlc2NhbGVfWDJfQml0ID0gMHg0MDAwLAkvKiBmcm9tIG0tc2VyaWVzIGV4YW1wbGUgY29kZSwgbm90IGRvY3VtZW50ZWQgaW4gNjYweCByZWdpc3RlciBsZXZlbCBtYW51YWwgKi8KKwlHaV9NX1Nlcmllc19QcmVzY2FsZV9YMl9CaXQgPSAweDgwMDAsCit9OworCisjZGVmaW5lIEdpX1NvdXJjZV9TZWxlY3RfU2hpZnQgMgorI2RlZmluZSBHaV9HYXRlX1NlbGVjdF9TaGlmdCA3CitlbnVtIEdpX0lucHV0X1NlbGVjdF9CaXRzIHsKKwlHaV9SZWFkX0Fja25vd2xlZGdlc19JcnEgPSAweDEsCS8vIG5vdCBwcmVzZW50IG9uIDY2MHgKKwlHaV9Xcml0ZV9BY2tub3dsZWRnZXNfSXJxID0gMHgyLAkvLyBub3QgcHJlc2VudCBvbiA2NjB4CisJR2lfU291cmNlX1NlbGVjdF9NYXNrID0gMHg3YywKKwlHaV9HYXRlX1NlbGVjdF9NYXNrID0gMHgxZiA8PCBHaV9HYXRlX1NlbGVjdF9TaGlmdCwKKwlHaV9HYXRlX1NlbGVjdF9Mb2FkX1NvdXJjZV9CaXQgPSAweDEwMDAsCisJR2lfT3JfR2F0ZV9CaXQgPSAweDIwMDAsCisJR2lfT3V0cHV0X1BvbGFyaXR5X0JpdCA9IDB4NDAwMCwJLyogc2V0IHRvIGludmVydCAqLworCUdpX1NvdXJjZV9Qb2xhcml0eV9CaXQgPSAweDgwMDAJLyogc2V0IHRvIGludmVydCAqLworfTsKKworZW51bSBHaV9Nb2RlX0JpdHMgeworCUdpX0dhdGluZ19Nb2RlX01hc2sgPSAweDMsCisJR2lfR2F0aW5nX0Rpc2FibGVkX0JpdHMgPSAweDAsCisJR2lfTGV2ZWxfR2F0aW5nX0JpdHMgPSAweDEsCisJR2lfUmlzaW5nX0VkZ2VfR2F0aW5nX0JpdHMgPSAweDIsCisJR2lfRmFsbGluZ19FZGdlX0dhdGluZ19CaXRzID0gMHgzLAorCUdpX0dhdGVfT25fQm90aF9FZGdlc19CaXQgPSAweDQsCS8qIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCByaXNpbmcgZWRnZSBnYXRpbmcgbW9kZSAqLworCUdpX1RyaWdnZXJfTW9kZV9mb3JfRWRnZV9HYXRlX01hc2sgPSAweDE4LAorCUdpX0VkZ2VfR2F0ZV9TdGFydHNfU3RvcHNfQml0cyA9IDB4MCwKKwlHaV9FZGdlX0dhdGVfU3RvcHNfU3RhcnRzX0JpdHMgPSAweDgsCisJR2lfRWRnZV9HYXRlX1N0YXJ0c19CaXRzID0gMHgxMCwKKwlHaV9FZGdlX0dhdGVfTm9fU3RhcnRzX29yX1N0b3BzX0JpdHMgPSAweDE4LAorCUdpX1N0b3BfTW9kZV9NYXNrID0gMHg2MCwKKwlHaV9TdG9wX29uX0dhdGVfQml0cyA9IDB4MDAsCisJR2lfU3RvcF9vbl9HYXRlX29yX1RDX0JpdHMgPSAweDIwLAorCUdpX1N0b3Bfb25fR2F0ZV9vcl9TZWNvbmRfVENfQml0cyA9IDB4NDAsCisJR2lfTG9hZF9Tb3VyY2VfU2VsZWN0X0JpdCA9IDB4ODAsCisJR2lfT3V0cHV0X01vZGVfTWFzayA9IDB4MzAwLAorCUdpX091dHB1dF9UQ19QdWxzZV9CaXRzID0gMHgxMDAsCisJR2lfT3V0cHV0X1RDX1RvZ2dsZV9CaXRzID0gMHgyMDAsCisJR2lfT3V0cHV0X1RDX29yX0dhdGVfVG9nZ2xlX0JpdHMgPSAweDMwMCwKKwlHaV9Db3VudGluZ19PbmNlX01hc2sgPSAweGMwMCwKKwlHaV9Ob19IYXJkd2FyZV9EaXNhcm1fQml0cyA9IDB4MDAwLAorCUdpX0Rpc2FybV9hdF9UQ19CaXRzID0gMHg0MDAsCisJR2lfRGlzYXJtX2F0X0dhdGVfQml0cyA9IDB4ODAwLAorCUdpX0Rpc2FybV9hdF9UQ19vcl9HYXRlX0JpdHMgPSAweGMwMCwKKwlHaV9Mb2FkaW5nX09uX1RDX0JpdCA9IDB4MTAwMCwKKwlHaV9HYXRlX1BvbGFyaXR5X0JpdCA9IDB4MjAwMCwKKwlHaV9Mb2FkaW5nX09uX0dhdGVfQml0ID0gMHg0MDAwLAorCUdpX1JlbG9hZF9Tb3VyY2VfU3dpdGNoaW5nX0JpdCA9IDB4ODAwMAorfTsKKworI2RlZmluZSBHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfU2hpZnQgNworLypGSVhNRTogbS1zZXJpZXMgaGFzIGEgc2Vjb25kIGdhdGUgc3Vic2VsZWN0IGJpdCAqLworLypGSVhNRTogbS1zZXJpZXMgc2Vjb25kIGdhdGUgc291cmNlcyBhcmUgdW5kb2N1bWVudGVkIChieSBOSSkqLworZW51bSBHaV9TZWNvbmRfR2F0ZV9CaXRzIHsKKwlHaV9TZWNvbmRfR2F0ZV9Nb2RlX0JpdCA9IDB4MSwKKwlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfTWFzayA9IDB4MWYgPDwgR2lfU2Vjb25kX0dhdGVfU2VsZWN0X1NoaWZ0LAorCUdpX1NlY29uZF9HYXRlX1BvbGFyaXR5X0JpdCA9IDB4MjAwMCwKKwlHaV9TZWNvbmRfR2F0ZV9TdWJzZWxlY3RfQml0ID0gMHg0MDAwLAkvKiBtLXNlcmllcyBvbmx5ICovCisJR2lfU291cmNlX1N1YnNlbGVjdF9CaXQgPSAweDgwMDAJLyogbS1zZXJpZXMgb25seSAqLworfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR2lfU2Vjb25kX0dhdGVfU2VsZWN0X0JpdHModW5zaWduZWQgc2Vjb25kX2dhdGVfc2VsZWN0KQoreworCXJldHVybiAoc2Vjb25kX2dhdGVfc2VsZWN0IDw8IEdpX1NlY29uZF9HYXRlX1NlbGVjdF9TaGlmdCkgJgorCQlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfTWFzazsKK30KKworZW51bSBHeHhfU3RhdHVzX0JpdHMgeworCUcwX1NhdmVfQml0ID0gMHgxLAorCUcxX1NhdmVfQml0ID0gMHgyLAorCUcwX0NvdW50aW5nX0JpdCA9IDB4NCwKKwlHMV9Db3VudGluZ19CaXQgPSAweDgsCisJRzBfTmV4dF9Mb2FkX1NvdXJjZV9CaXQgPSAweDEwLAorCUcxX05leHRfTG9hZF9Tb3VyY2VfQml0ID0gMHgyMCwKKwlHMF9TdGFsZV9EYXRhX0JpdCA9IDB4NDAsCisJRzFfU3RhbGVfRGF0YV9CaXQgPSAweDgwLAorCUcwX0FybWVkX0JpdCA9IDB4MTAwLAorCUcxX0FybWVkX0JpdCA9IDB4MjAwLAorCUcwX05vX0xvYWRfQmV0d2Vlbl9HYXRlc19CaXQgPSAweDQwMCwKKwlHMV9Ob19Mb2FkX0JldHdlZW5fR2F0ZXNfQml0ID0gMHg4MDAsCisJRzBfVENfRXJyb3JfQml0ID0gMHgxMDAwLAorCUcxX1RDX0Vycm9yX0JpdCA9IDB4MjAwMCwKKwlHMF9HYXRlX0Vycm9yX0JpdCA9IDB4NDAwMCwKKwlHMV9HYXRlX0Vycm9yX0JpdCA9IDB4ODAwMAorfTsKK3N0YXRpYyBpbmxpbmUgZW51bSBHeHhfU3RhdHVzX0JpdHMgR2lfQ291bnRpbmdfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfQ291bnRpbmdfQml0OworCXJldHVybiBHMF9Db3VudGluZ19CaXQ7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR3h4X1N0YXR1c19CaXRzIEdpX0FybWVkX0JpdCh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCWlmIChjb3VudGVyX2luZGV4ICUgMikKKwkJcmV0dXJuIEcxX0FybWVkX0JpdDsKKwlyZXR1cm4gRzBfQXJtZWRfQml0OworfQorc3RhdGljIGlubGluZSBlbnVtIEd4eF9TdGF0dXNfQml0cyBHaV9OZXh0X0xvYWRfU291cmNlX0JpdCh1bnNpZ25lZAorCWNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfTmV4dF9Mb2FkX1NvdXJjZV9CaXQ7CisJcmV0dXJuIEcwX05leHRfTG9hZF9Tb3VyY2VfQml0OworfQorc3RhdGljIGlubGluZSBlbnVtIEd4eF9TdGF0dXNfQml0cyBHaV9TdGFsZV9EYXRhX0JpdCh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCWlmIChjb3VudGVyX2luZGV4ICUgMikKKwkJcmV0dXJuIEcxX1N0YWxlX0RhdGFfQml0OworCXJldHVybiBHMF9TdGFsZV9EYXRhX0JpdDsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBHeHhfU3RhdHVzX0JpdHMgR2lfVENfRXJyb3JfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfVENfRXJyb3JfQml0OworCXJldHVybiBHMF9UQ19FcnJvcl9CaXQ7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR3h4X1N0YXR1c19CaXRzIEdpX0dhdGVfRXJyb3JfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfR2F0ZV9FcnJvcl9CaXQ7CisJcmV0dXJuIEcwX0dhdGVfRXJyb3JfQml0OworfQorCisvKiBqb2ludCByZXNldCByZWdpc3RlciBiaXRzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEdpX1Jlc2V0X0JpdCh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXJldHVybiAweDEgPDwgKDIgKyAoY291bnRlcl9pbmRleCAlIDIpKTsKK30KKworZW51bSBHeHhfSm9pbnRfU3RhdHVzMl9CaXRzIHsKKwlHMF9PdXRwdXRfQml0ID0gMHgxLAorCUcxX091dHB1dF9CaXQgPSAweDIsCisJRzBfSFdfU2F2ZV9CaXQgPSAweDEwMDAsCisJRzFfSFdfU2F2ZV9CaXQgPSAweDIwMDAsCisJRzBfUGVybWFuZW50X1N0YWxlX0JpdCA9IDB4NDAwMCwKKwlHMV9QZXJtYW5lbnRfU3RhbGVfQml0ID0gMHg4MDAwCit9Oworc3RhdGljIGlubGluZSBlbnVtIEd4eF9Kb2ludF9TdGF0dXMyX0JpdHMgR2lfUGVybWFuZW50X1N0YWxlX0JpdCh1bnNpZ25lZAorCWNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfUGVybWFuZW50X1N0YWxlX0JpdDsKKwlyZXR1cm4gRzBfUGVybWFuZW50X1N0YWxlX0JpdDsKK30KKworZW51bSBHaV9ETUFfQ29uZmlnX1JlZ19CaXRzIHsKKwlHaV9ETUFfRW5hYmxlX0JpdCA9IDB4MSwKKwlHaV9ETUFfV3JpdGVfQml0ID0gMHgyLAorCUdpX0RNQV9JbnRfQml0ID0gMHg0Cit9OworCitlbnVtIEdpX0RNQV9TdGF0dXNfUmVnX0JpdHMgeworCUdpX0RNQV9SZWFkYmFua19CaXQgPSAweDIwMDAsCisJR2lfRFJRX0Vycm9yX0JpdCA9IDB4NDAwMCwKKwlHaV9EUlFfU3RhdHVzX0JpdCA9IDB4ODAwMAorfTsKKworZW51bSBHMDJfSW50ZXJydXB0X0Fja25vd2xlZGdlX0JpdHMgeworCUcwX0dhdGVfRXJyb3JfQ29uZmlybV9CaXQgPSAweDIwLAorCUcwX1RDX0Vycm9yX0NvbmZpcm1fQml0ID0gMHg0MAorfTsKK2VudW0gRzEzX0ludGVycnVwdF9BY2tub3dsZWRnZV9CaXRzIHsKKwlHMV9HYXRlX0Vycm9yX0NvbmZpcm1fQml0ID0gMHgyLAorCUcxX1RDX0Vycm9yX0NvbmZpcm1fQml0ID0gMHg0Cit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9HYXRlX0Vycm9yX0NvbmZpcm1fQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfR2F0ZV9FcnJvcl9Db25maXJtX0JpdDsKKwlyZXR1cm4gRzBfR2F0ZV9FcnJvcl9Db25maXJtX0JpdDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR2lfVENfRXJyb3JfQ29uZmlybV9CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9UQ19FcnJvcl9Db25maXJtX0JpdDsKKwlyZXR1cm4gRzBfVENfRXJyb3JfQ29uZmlybV9CaXQ7Cit9CisKKy8vIGJpdHMgdGhhdCBhcmUgdGhlIHNhbWUgaW4gRzAvRzIgYW5kIEcxL0czIGludGVycnVwdCBhY2tub3dsZWRnZSByZWdpc3RlcnMKK2VudW0gR3h4X0ludGVycnVwdF9BY2tub3dsZWRnZV9CaXRzIHsKKwlHaV9UQ19JbnRlcnJ1cHRfQWNrX0JpdCA9IDB4NDAwMCwKKwlHaV9HYXRlX0ludGVycnVwdF9BY2tfQml0ID0gMHg4MDAwCit9OworCitlbnVtIEdpX1N0YXR1c19CaXRzIHsKKwlHaV9HYXRlX0ludGVycnVwdF9CaXQgPSAweDQsCisJR2lfVENfQml0ID0gMHg4LAorCUdpX0ludGVycnVwdF9CaXQgPSAweDgwMDAKK307CisKK2VudW0gRzAyX0ludGVycnVwdF9FbmFibGVfQml0cyB7CisJRzBfVENfSW50ZXJydXB0X0VuYWJsZV9CaXQgPSAweDQwLAorCUcwX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQgPSAweDEwMAorfTsKK2VudW0gRzEzX0ludGVycnVwdF9FbmFibGVfQml0cyB7CisJRzFfVENfSW50ZXJydXB0X0VuYWJsZV9CaXQgPSAweDIwMCwKKwlHMV9HYXRlX0ludGVycnVwdF9FbmFibGVfQml0ID0gMHg0MDAKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEdpX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwl1bnNpZ25lZCBiaXQ7CisKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpIHsKKwkJYml0ID0gRzFfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlX0JpdDsKKwl9IGVsc2UgeworCQliaXQgPSBHMF9HYXRlX0ludGVycnVwdF9FbmFibGVfQml0OworCX0KKwlyZXR1cm4gYml0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGJpdHMsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlCVUdfT04ocmVnID49IE5JVElPX051bV9SZWdpc3RlcnMpOworCWNvdW50ZXItPmNvdW50ZXJfZGV2LT53cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBiaXRzLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJlYWRfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlCVUdfT04ocmVnID49IE5JVElPX051bV9SZWdpc3RlcnMpOworCXJldHVybiBjb3VudGVyLT5jb3VudGVyX2Rldi0+cmVhZF9yZWdpc3Rlcihjb3VudGVyLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBuaV90aW9fY291bnRpbmdfbW9kZV9yZWdpc3RlcnNfcHJlc2VudCgKKwljb25zdCBzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2KQoreworCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXJldHVybiAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfdGlvX3NldF9iaXRzX3RyYW5zaWVudChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnaXN0ZXJfaW5kZXgsIHVuc2lnbmVkIGJpdF9tYXNrLAorCXVuc2lnbmVkIGJpdF92YWx1ZXMsIHVuc2lnbmVkIHRyYW5zaWVudF9iaXRfdmFsdWVzKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQlVHX09OKHJlZ2lzdGVyX2luZGV4ID49IE5JVElPX051bV9SZWdpc3RlcnMpOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY291bnRlcl9kZXYtPnJlZ3NfbG9jaywgZmxhZ3MpOworCWNvdW50ZXJfZGV2LT5yZWdzW3JlZ2lzdGVyX2luZGV4XSAmPSB+Yml0X21hc2s7CisJY291bnRlcl9kZXYtPnJlZ3NbcmVnaXN0ZXJfaW5kZXhdIHw9IChiaXRfdmFsdWVzICYgYml0X21hc2spOworCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsCisJCWNvdW50ZXJfZGV2LT5yZWdzW3JlZ2lzdGVyX2luZGV4XSB8IHRyYW5zaWVudF9iaXRfdmFsdWVzLAorCQlyZWdpc3Rlcl9pbmRleCk7CisJbW1pb3diKCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXJfZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKK30KKworLyogbmlfdGlvX3NldF9iaXRzKCApIGlzIGZvciBzYWZlbHkgd3JpdGluZyB0byByZWdpc3RlcnMgd2hvc2UgYml0cyBtYXkgYmUKK3R3aWRkbGVkIGluIGludGVycnVwdCBjb250ZXh0LCBvciB3aG9zZSBzb2Z0d2FyZSBjb3B5IG1heSBiZSByZWFkIGluIGludGVycnVwdCBjb250ZXh0LgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV90aW9fc2V0X2JpdHMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZ2lzdGVyX2luZGV4LCB1bnNpZ25lZCBiaXRfbWFzaywKKwl1bnNpZ25lZCBiaXRfdmFsdWVzKQoreworCW5pX3Rpb19zZXRfYml0c190cmFuc2llbnQoY291bnRlciwgcmVnaXN0ZXJfaW5kZXgsIGJpdF9tYXNrLCBiaXRfdmFsdWVzLAorCQkweDApOworfQorCisvKiBuaV90aW9fZ2V0X3NvZnRfY29weSggKSBpcyBmb3Igc2FmZWx5IHJlYWRpbmcgdGhlIHNvZnR3YXJlIGNvcHkgb2YgYSByZWdpc3Rlcgord2hvc2UgYml0cyBtaWdodCBiZSBtb2RpZmllZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgb3Igd2hvc2Ugc29mdHdhcmUgY29weQorbWlnaHQgbmVlZCB0byBiZSByZWFkIGluIGludGVycnVwdCBjb250ZXh0LgorKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlfdGlvX2dldF9zb2Z0X2NvcHkoY29uc3Qgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZ2lzdGVyX2luZGV4KQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIHZhbHVlOworCisJQlVHX09OKHJlZ2lzdGVyX2luZGV4ID49IE5JVElPX051bV9SZWdpc3RlcnMpOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY291bnRlcl9kZXYtPnJlZ3NfbG9jaywgZmxhZ3MpOworCXZhbHVlID0gY291bnRlcl9kZXYtPnJlZ3NbcmVnaXN0ZXJfaW5kZXhdOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyX2Rldi0+cmVnc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHZhbHVlOworfQorCitpbnQgbmlfdGlvX2FybShzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgaW50IGFybSwgdW5zaWduZWQgc3RhcnRfdHJpZ2dlcik7CitpbnQgbmlfdGlvX3NldF9nYXRlX3NyYyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgdW5zaWduZWQgZ2F0ZV9pbmRleCwKKwl1bnNpZ25lZCBpbnQgZ2F0ZV9zb3VyY2UpOworCisjZW5kaWYgLyogX0NPTUVESV9OSV9USU9fSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTI2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvY21kLmMKQEAgLTAsMCArMSw1MjMgQEAKKy8qCisgIGNvbWVkaS9kcml2ZXJzL25pX3Rpb2NtZC5jCisgIENvbW1hbmQgc3VwcG9ydCBmb3IgTkkgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzCisKKyAgQ29weXJpZ2h0IChDKSAyMDA2IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisvKgorRHJpdmVyOiBuaV90aW9jbWQKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMgY29tbWFuZCBzdXBwb3J0CitEZXZpY2VzOgorQXV0aG9yOiBKLlAuIE1lbGxvciA8anBtZWxsb3JAcm9zZS1odWxtYW4uZWR1PiwKKwlIZXJtYW4uQnJ1eW5pbmNreEBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCVdpbS5NZWV1c3NlbkBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCUtsYWFzLkdhZGV5bmVAbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitVcGRhdGVkOiBGcmksIDExIEFwciAyMDA4IDEyOjMyOjM1ICswMTAwCitTdGF0dXM6IHdvcmtzCisKK1RoaXMgbW9kdWxlIGlzIG5vdCB1c2VkIGRpcmVjdGx5IGJ5IGVuZC11c2Vycy4gIFJhdGhlciwgaXQKK2lzIHVzZWQgYnkgb3RoZXIgZHJpdmVycyAoZm9yIGV4YW1wbGUgbmlfNjYweCBhbmQgbmlfcGNpbWlvKQordG8gcHJvdmlkZSBjb21tYW5kIHN1cHBvcnQgZm9yIE5JJ3MgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzLgorSXQgd2FzIG9yaWdpbmFsbHkgc3BsaXQgb3V0IG9mIG5pX3Rpby5jIHRvIHN0b3AgdGhlICduaV90aW8nCittb2R1bGUgZGVwZW5kaW5nIG9uIHRoZSAnbWl0ZScgbW9kdWxlLgorCitSZWZlcmVuY2VzOgorREFRIDY2MHggUmVnaXN0ZXItTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgIChOSSAzNzA1MDVBLTAxKQorREFRIDY2MDEvNjYwMiBVc2VyIE1hbnVhbCAoTkkgMzIyMTM3Qi0wMSkKKzM0MDkzNGIucGRmICBEQVEtU1RDIHJlZmVyZW5jZSBtYW51YWwKKworKi8KKy8qCitUT0RPOgorCVN1cHBvcnQgdXNlIG9mIGJvdGggYmFua3MgWCBhbmQgWQorKi8KKworI2luY2x1ZGUgIm5pX3Rpb19pbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1pdGUuaCIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIDxjb21lZGlAY29tZWRpLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGNvbW1hbmQgc3VwcG9ydCBmb3IgTkkgZ2VuZXJhbC1wdXJwb3NlIGNvdW50ZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB2b2lkIG5pX3Rpb19jb25maWd1cmVfZG1hKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzaG9ydCBlbmFibGUsCisJc2hvcnQgcmVhZF9ub3Rfd3JpdGUpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIGlucHV0X3NlbGVjdF9iaXRzID0gMDsKKworCWlmIChlbmFibGUpIHsKKwkJaWYgKHJlYWRfbm90X3dyaXRlKSB7CisJCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9SZWFkX0Fja25vd2xlZGdlc19JcnE7CisJCX0gZWxzZSB7CisJCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9Xcml0ZV9BY2tub3dsZWRnZXNfSXJxOworCQl9CisJfQorCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlHaV9SZWFkX0Fja25vd2xlZGdlc19JcnEgfCBHaV9Xcml0ZV9BY2tub3dsZWRnZXNfSXJxLAorCQlpbnB1dF9zZWxlY3RfYml0cyk7CisJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQl7CisJCQl1bnNpZ25lZCBnaV9kbWFfY29uZmlnX2JpdHMgPSAwOworCisJCQlpZiAoZW5hYmxlKSB7CisJCQkJZ2lfZG1hX2NvbmZpZ19iaXRzIHw9IEdpX0RNQV9FbmFibGVfQml0OworCQkJCWdpX2RtYV9jb25maWdfYml0cyB8PSBHaV9ETUFfSW50X0JpdDsKKwkJCX0KKwkJCWlmIChyZWFkX25vdF93cml0ZSA9PSAwKSB7CisJCQkJZ2lfZG1hX2NvbmZpZ19iaXRzIHw9IEdpX0RNQV9Xcml0ZV9CaXQ7CisJCQl9CisJCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCQlOSVRJT19HaV9ETUFfQ29uZmlnX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCQlHaV9ETUFfRW5hYmxlX0JpdCB8IEdpX0RNQV9JbnRfQml0IHwKKwkJCQlHaV9ETUFfV3JpdGVfQml0LCBnaV9kbWFfY29uZmlnX2JpdHMpOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBuaV90aW9faW5wdXRfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIgPSBzLT5wcml2YXRlOworCisJQlVHX09OKGNvdW50ZXIgPT0gTlVMTCk7CisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwlpZiAoY291bnRlci0+bWl0ZV9jaGFuKQorCQltaXRlX2RtYV9hcm0oY291bnRlci0+bWl0ZV9jaGFuKTsKKwllbHNlCisJCXJldHZhbCA9IC1FSU87CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBuaV90aW9fYXJtKGNvdW50ZXIsIDEsIE5JX0dQQ1RfQVJNX0lNTUVESUFURSk7CisJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBuaV90aW9faW5wdXRfY21kKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCWludCByZXR2YWwgPSAwOworCisJLyogd3JpdGUgYWxsb2MgdGhlIGVudGlyZSBidWZmZXIgKi8KKwljb21lZGlfYnVmX3dyaXRlX2FsbG9jKGFzeW5jLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOworCWNvdW50ZXItPm1pdGVfY2hhbi0+ZGlyID0gQ09NRURJX0lOUFVUOworCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQltaXRlX3ByZXBfZG1hKGNvdW50ZXItPm1pdGVfY2hhbiwgMzIsIDMyKTsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCW1pdGVfcHJlcF9kbWEoY291bnRlci0+bWl0ZV9jaGFuLCAxNiwgMzIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLCBOSVRJT19HaV9Db21tYW5kX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJR2lfU2F2ZV9UcmFjZV9CaXQsIDApOworCW5pX3Rpb19jb25maWd1cmVfZG1hKGNvdW50ZXIsIDEsIDEpOworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgorCQlhc3luYy0+aW50dHJpZyA9IE5VTEw7CisJCW1pdGVfZG1hX2FybShjb3VudGVyLT5taXRlX2NoYW4pOworCQlyZXR2YWwgPSBuaV90aW9fYXJtKGNvdW50ZXIsIDEsIE5JX0dQQ1RfQVJNX0lNTUVESUFURSk7CisJCWJyZWFrOworCWNhc2UgVFJJR19JTlQ6CisJCWFzeW5jLT5pbnR0cmlnID0gJm5pX3Rpb19pbnB1dF9pbnR0cmlnOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQlhc3luYy0+aW50dHJpZyA9IE5VTEw7CisJCW1pdGVfZG1hX2FybShjb3VudGVyLT5taXRlX2NoYW4pOworCQlyZXR2YWwgPSBuaV90aW9fYXJtKGNvdW50ZXIsIDEsIGNtZC0+c3RhcnRfYXJnKTsKKwljYXNlIFRSSUdfT1RIRVI6CisJCWFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwkJbWl0ZV9kbWFfYXJtKGNvdW50ZXItPm1pdGVfY2hhbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBuaV90aW9fb3V0cHV0X2NtZChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCit7CisJcnRfcHJpbnRrKCJuaV90aW86IG91dHB1dCBjb21tYW5kcyBub3QgeWV0IGltcGxlbWVudGVkLlxuIik7CisJcmV0dXJuIC1FTk9UU1VQUDsKKworCWNvdW50ZXItPm1pdGVfY2hhbi0+ZGlyID0gQ09NRURJX09VVFBVVDsKKwltaXRlX3ByZXBfZG1hKGNvdW50ZXItPm1pdGVfY2hhbiwgMzIsIDMyKTsKKwluaV90aW9fY29uZmlndXJlX2RtYShjb3VudGVyLCAxLCAwKTsKKwltaXRlX2RtYV9hcm0oY291bnRlci0+bWl0ZV9jaGFuKTsKKwlyZXR1cm4gbmlfdGlvX2FybShjb3VudGVyLCAxLCBOSV9HUENUX0FSTV9JTU1FRElBVEUpOworfQorCitzdGF0aWMgaW50IG5pX3Rpb19jbWRfc2V0dXAoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwlpbnQgc2V0X2dhdGVfc291cmNlID0gMDsKKwl1bnNpZ25lZCBnYXRlX3NvdXJjZTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSB7CisJCXNldF9nYXRlX3NvdXJjZSA9IDE7CisJCWdhdGVfc291cmNlID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJc2V0X2dhdGVfc291cmNlID0gMTsKKwkJZ2F0ZV9zb3VyY2UgPSBjbWQtPmNvbnZlcnRfYXJnOworCX0KKwlpZiAoc2V0X2dhdGVfc291cmNlKSB7CisJCXJldHZhbCA9IG5pX3Rpb19zZXRfZ2F0ZV9zcmMoY291bnRlciwgMCwgZ2F0ZV9zb3VyY2UpOworCX0KKwlpZiAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpIHsKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQlOSVRJT19HaV9JbnRlcnJ1cHRfRW5hYmxlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCUdpX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCQlHaV9HYXRlX0ludGVycnVwdF9FbmFibGVfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IG5pX3Rpb19jbWQoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJaWYgKGNvdW50ZXItPm1pdGVfY2hhbiA9PSBOVUxMKSB7CisJCXJ0X3ByaW50aworCQkJKCJuaV90aW86IGNvbW1hbmRzIG9ubHkgc3VwcG9ydGVkIHdpdGggRE1BLiAgSW50ZXJydXB0LWRyaXZlbiBjb21tYW5kcyBub3QgeWV0IGltcGxlbWVudGVkLlxuIik7CisJCXJldHZhbCA9IC1FSU87CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gbmlfdGlvX2NtZF9zZXR1cChjb3VudGVyLCBhc3luYyk7CisJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJaWYgKGNtZC0+ZmxhZ3MgJiBDTURGX1dSSVRFKSB7CisJCQkJcmV0dmFsID0gbmlfdGlvX291dHB1dF9jbWQoY291bnRlciwgYXN5bmMpOworCQkJfSBlbHNlIHsKKwkJCQlyZXR2YWwgPSBuaV90aW9faW5wdXRfY21kKGNvdW50ZXIsIGFzeW5jKTsKKwkJCX0KKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBuaV90aW9fY21kdGVzdChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKwlpbnQgc291cmNlczsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwlzb3VyY2VzID0gVFJJR19OT1cgfCBUUklHX0lOVCB8IFRSSUdfT1RIRVI7CisJaWYgKG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXItPmNvdW50ZXJfZGV2KSkKKwkJc291cmNlcyB8PSBUUklHX0VYVDsKKwljbWQtPnN0YXJ0X3NyYyAmPSBzb3VyY2VzOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVyB8IFRSSUdfRVhUIHwgVFJJR19PVEhFUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwlzb3VyY2VzID0gVFJJR19OT1cgfCBUUklHX0VYVCB8IFRSSUdfT1RIRVI7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBzb3VyY2VzOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUuLi4gKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJgorCQljbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCAmJgorCQljbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX09USEVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19PVEhFUikKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19PVEhFUiAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisJLyogLi4uIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitpbnQgbmlfdGlvX2NhbmNlbChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbmlfdGlvX2FybShjb3VudGVyLCAwLCAwKTsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwlpZiAoY291bnRlci0+bWl0ZV9jaGFuKSB7CisJCW1pdGVfZG1hX2Rpc2FybShjb3VudGVyLT5taXRlX2NoYW4pOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCW5pX3Rpb19jb25maWd1cmVfZG1hKGNvdW50ZXIsIDAsIDApOworCisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0ludGVycnVwdF9FbmFibGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlHaV9HYXRlX0ludGVycnVwdF9FbmFibGVfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLCAweDApOworCXJldHVybiAwOworfQorCisJLyogRHVyaW5nIGJ1ZmZlcmVkIGlucHV0IGNvdW50ZXIgb3BlcmF0aW9uIGZvciBlLXNlcmllcywgdGhlIGdhdGUgaW50ZXJydXB0IGlzIGFja2VkCisJICAgYXV0b21hdGljYWxseSBieSB0aGUgZG1hIGNvbnRyb2xsZXIsIGR1ZSB0byB0aGUgR2lfUmVhZC9Xcml0ZV9BY2tub3dsZWRnZXNfSVJRIGJpdHMKKwkgICBpbiB0aGUgaW5wdXQgc2VsZWN0IHJlZ2lzdGVyLiAgKi8KK3N0YXRpYyBpbnQgc2hvdWxkX2Fja19nYXRlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisKKwlzd2l0Y2ggKGNvdW50ZXItPmNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoJLy8gbm90IHN1cmUgaWYgNjYweCByZWFsbHkgc3VwcG9ydHMgZ2F0ZSBpbnRlcnJ1cHRzICh0aGUgYml0cyBhcmUgbm90IGxpc3RlZCBpbiByZWdpc3Rlci1sZXZlbCBtYW51YWwpCisJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJCXsKKwkJCWlmIChjb3VudGVyLT5taXRlX2NoYW4gPT0gTlVMTCB8fAorCQkJCWNvdW50ZXItPm1pdGVfY2hhbi0+ZGlyICE9IENPTUVESV9JTlBVVCB8fAorCQkJCShtaXRlX2RvbmUoY291bnRlci0+bWl0ZV9jaGFuKSkpIHsKKwkJCQlyZXR2YWwgPSAxOworCQkJfQorCQl9CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIG5pX3Rpb19hY2tub3dsZWRnZV9hbmRfY29uZmlybShzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgaW50ICpnYXRlX2Vycm9yLAorCWludCAqdGNfZXJyb3IsIGludCAqcGVybV9zdGFsZV9kYXRhLCBpbnQgKnN0YWxlX2RhdGEpCit7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgZ3h4X3N0YXR1cyA9IHJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJTklUSU9fR3h4X1N0YXR1c19SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCWNvbnN0IHVuc2lnbmVkIHNob3J0IGdpX3N0YXR1cyA9IHJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJTklUSU9fR2lfU3RhdHVzX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJdW5zaWduZWQgYWNrID0gMDsKKworCWlmIChnYXRlX2Vycm9yKQorCQkqZ2F0ZV9lcnJvciA9IDA7CisJaWYgKHRjX2Vycm9yKQorCQkqdGNfZXJyb3IgPSAwOworCWlmIChwZXJtX3N0YWxlX2RhdGEpCisJCSpwZXJtX3N0YWxlX2RhdGEgPSAwOworCWlmIChzdGFsZV9kYXRhKQorCQkqc3RhbGVfZGF0YSA9IDA7CisKKwlpZiAoZ3h4X3N0YXR1cyAmIEdpX0dhdGVfRXJyb3JfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCWFjayB8PSBHaV9HYXRlX0Vycm9yX0NvbmZpcm1fQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCQlpZiAoZ2F0ZV9lcnJvcikgeworCQkJLyo2NjB4IGRvbid0IHN1cHBvcnQgYXV0b21hdGljIGFja25vd2xlZGdlbWVudCBvZiBnYXRlIGludGVycnVwdCB2aWEgZG1hIHJlYWQvd3JpdGUKKwkJCSAgIGFuZCByZXBvcnQgYm9ndXMgZ2F0ZSBlcnJvcnMgKi8KKwkJCWlmIChjb3VudGVyLT5jb3VudGVyX2Rldi0+dmFyaWFudCAhPQorCQkJCW5pX2dwY3RfdmFyaWFudF82NjB4KSB7CisJCQkJKmdhdGVfZXJyb3IgPSAxOworCQkJfQorCQl9CisJfQorCWlmIChneHhfc3RhdHVzICYgR2lfVENfRXJyb3JfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCWFjayB8PSBHaV9UQ19FcnJvcl9Db25maXJtX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwkJaWYgKHRjX2Vycm9yKQorCQkJKnRjX2Vycm9yID0gMTsKKwl9CisJaWYgKGdpX3N0YXR1cyAmIEdpX1RDX0JpdCkgeworCQlhY2sgfD0gR2lfVENfSW50ZXJydXB0X0Fja19CaXQ7CisJfQorCWlmIChnaV9zdGF0dXMgJiBHaV9HYXRlX0ludGVycnVwdF9CaXQpIHsKKwkJaWYgKHNob3VsZF9hY2tfZ2F0ZShjb3VudGVyKSkKKwkJCWFjayB8PSBHaV9HYXRlX0ludGVycnVwdF9BY2tfQml0OworCX0KKwlpZiAoYWNrKQorCQl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBhY2ssCisJCQlOSVRJT19HaV9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpKTsKKwlpZiAobmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwKKwkJCU5JVElPX0dpX01vZGVfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpKSAmIEdpX0xvYWRpbmdfT25fR2F0ZV9CaXQpIHsKKwkJaWYgKGd4eF9zdGF0dXMgJiBHaV9TdGFsZV9EYXRhX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSkgeworCQkJaWYgKHN0YWxlX2RhdGEpCisJCQkJKnN0YWxlX2RhdGEgPSAxOworCQl9CisJCWlmIChyZWFkX3JlZ2lzdGVyKGNvdW50ZXIsCisJCQkJTklUSU9fR3h4X0pvaW50X1N0YXR1czJfUmVnKGNvdW50ZXItPgorCQkJCQljb3VudGVyX2luZGV4KSkgJgorCQkJR2lfUGVybWFuZW50X1N0YWxlX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSkgeworCQkJcnRfcHJpbnRrKCIlczogR2lfUGVybWFuZW50X1N0YWxlX0RhdGEgZGV0ZWN0ZWQuXG4iLAorCQkJCV9fRlVOQ1RJT05fXyk7CisJCQlpZiAocGVybV9zdGFsZV9kYXRhKQorCQkJCSpwZXJtX3N0YWxlX2RhdGEgPSAxOworCQl9CisJfQorfQorCit2b2lkIG5pX3Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgZ3BjdF9taXRlX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBnYXRlX2Vycm9yOworCWludCB0Y19lcnJvcjsKKwlpbnQgcGVybV9zdGFsZV9kYXRhOworCisJbmlfdGlvX2Fja25vd2xlZGdlX2FuZF9jb25maXJtKGNvdW50ZXIsICZnYXRlX2Vycm9yLCAmdGNfZXJyb3IsCisJCSZwZXJtX3N0YWxlX2RhdGEsIE5VTEwpOworCWlmIChnYXRlX2Vycm9yKSB7CisJCXJ0X3ByaW50aygiJXM6IEdpX0dhdGVfRXJyb3IgZGV0ZWN0ZWQuXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwl9CisJaWYgKHBlcm1fc3RhbGVfZGF0YSkgeworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwl9CisJc3dpdGNoIChjb3VudGVyLT5jb3VudGVyX2Rldi0+dmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCWlmIChyZWFkX3JlZ2lzdGVyKGNvdW50ZXIsCisJCQkJTklUSU9fR2lfRE1BX1N0YXR1c19SZWcoY291bnRlci0+CisJCQkJCWNvdW50ZXJfaW5kZXgpKSAmIEdpX0RSUV9FcnJvcl9CaXQpIHsKKwkJCXJ0X3ByaW50aygiJXM6IEdpX0RSUV9FcnJvciBkZXRlY3RlZC5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJfQorCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJYnJlYWs7CisJfQorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCWlmIChjb3VudGVyLT5taXRlX2NoYW4gPT0gTlVMTCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWdwY3RfbWl0ZV9zdGF0dXMgPSBtaXRlX2dldF9zdGF0dXMoY291bnRlci0+bWl0ZV9jaGFuKTsKKwlpZiAoZ3BjdF9taXRlX3N0YXR1cyAmIENIU1JfTElOS0MpIHsKKwkJd3JpdGVsKENIT1JfQ0xSTEMsCisJCQljb3VudGVyLT5taXRlX2NoYW4tPm1pdGUtPm1pdGVfaW9fYWRkciArCisJCQlNSVRFX0NIT1IoY291bnRlci0+bWl0ZV9jaGFuLT5jaGFubmVsKSk7CisJfQorCW1pdGVfc3luY19pbnB1dF9kbWEoY291bnRlci0+bWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKK30KKwordm9pZCBuaV90aW9fc2V0X21pdGVfY2hhbm5lbChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCWNvdW50ZXItPm1pdGVfY2hhbiA9IG1pdGVfY2hhbjsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuaV90aW9jbWRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobmlfdGlvY21kX2luaXRfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgX19leGl0IG5pX3Rpb2NtZF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworfQorCittb2R1bGVfZXhpdChuaV90aW9jbWRfY2xlYW51cF9tb2R1bGUpOworCitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fY21kKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19jbWR0ZXN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19jYW5jZWwpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2hhbmRsZV9pbnRlcnJ1cHQpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX3NldF9taXRlX2NoYW5uZWwpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2Fja25vd2xlZGdlX2FuZF9jb25maXJtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQyNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvcGNsNzExLmMKKyAgIGhhcmR3YXJlIGRyaXZlciBmb3IgUEMtTGFiQ2FyZCBQQ0wtNzExIGFuZCBBZFN5cyBBQ0wtODExMgorICAgYW5kIGNvbXBhdGlibGVzCisKKyAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAgIEphbm5lIEphbGthbmVuIDxqYWxrYW5lbkBjcy5odXQuZmk+CisgICBFcmljIEJ1bm4gPGVidUBjcy5odXQuZmk+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogcGNsNzExCitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTC03MTEgYW5kIDcxMWIsIEFETGluayBBQ0wtODExMgorQXV0aG9yOiBkcywgSmFubmUgSmFsa2FuZW4gPGphbGthbmVuQGNzLmh1dC5maT4sIEVyaWMgQnVubiA8ZWJ1QGNzLmh1dC5maT4KK1N0YXR1czogbW9zdGx5IGNvbXBsZXRlCitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtNzExIChwY2w3MTEpLCBQQ0wtNzExQiAocGNsNzExYiksCisgIFtBZExpbmtdIEFDTC04MTEySEcgKGFjbDgxMTJoZyksIEFDTC04MTEyREcgKGFjbDgxMTJkZykKKworU2luY2UgdGhlc2UgYm9hcmRzIGRvIG5vdCBoYXZlIERNQSBvciBGSUZPcywgb25seSBpbW1lZGlhdGUgbW9kZSBpcworc3VwcG9ydGVkLgorCisqLworCisvKgorICAgRGF2ZSBBbmRydWN6eWsgPGRhdmVAdGVjaC5idWZmYWxvc3RhdGUuZWR1PiBhbHNvIHdyb3RlIGEKKyAgIGRyaXZlciBmb3IgdGhlIFBDTC03MTEuICBJIHVzZWQgYSBmZXcgaWRlYXMgZnJvbSBoaXMgZHJpdmVyCisgICBoZXJlLiAgSGlzIGRyaXZlciBhbHNvIGhhcyBtb3JlIGNvbW1lbnRzLCBpZiB5b3UgYXJlCisgICBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIHdvcmtzLgorICAgaHR0cDovL3RlY2guYnVmZmFsb3N0YXRlLmVkdS9+ZGF2ZS9kcml2ZXIvCisKKyAgIFRoZSBBQ0wtODExMiBkcml2ZXIgd2FzIGhhY2tlZCBmcm9tIHRoZSBzb3VyY2VzIG9mIHRoZSBQQ0wtNzExCisgICBkcml2ZXIgKHRoZSA3NDQgY2hpcCB1c2VkIG9uIHRoZSA4MTEyIGlzIGFsbW9zdCB0aGUgc2FtZSBhcworICAgdGhlIDcxMWIgY2hpcCwgYnV0IGl0IGhhcyBtb3JlIEkvTyBjaGFubmVscykgYnkKKyAgIEphbm5lIEphbGthbmVuIChqYWxrYW5lbkBjcy5odXQuZmkpIGFuZAorICAgRXJpayBCdW5uIChlYnVAY3MuaHV0LmZpKS4gIFJlbWVyZ2VkIHdpdGggdGhlIFBDTC03MTEgZHJpdmVyCisgICBieSBkcy4KKworICAgW2FjbC04MTEyXQorICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYm90aCBUUklHTk9XIGFuZCBUUklHQ0xLLAorICAgYnV0IGRvZXMgbm90IHlldCBzdXBwb3J0IERNQSB0cmFuc2ZlcnMuICBJdCBhbHNvIHN1cHBvcnRzCisgICBib3RoIGhpZ2ggKEhHKSBhbmQgbG93IChERykgdmVyc2lvbnMgb2YgdGhlIGNhcmQsIHRob3VnaAorICAgdGhlIEhHIHZlcnNpb24gaGFzIGJlZW4gdW50ZXN0ZWQuCisKKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorCisjZGVmaW5lIFBDTDcxMV9TSVpFIDE2CisKKyNkZWZpbmUgUENMNzExX0NUUjAgMAorI2RlZmluZSBQQ0w3MTFfQ1RSMSAxCisjZGVmaW5lIFBDTDcxMV9DVFIyIDIKKyNkZWZpbmUgUENMNzExX0NUUkNUTCAzCisjZGVmaW5lIFBDTDcxMV9BRF9MTyA0CisjZGVmaW5lIFBDTDcxMV9EQTBfTE8gNAorI2RlZmluZSBQQ0w3MTFfQURfSEkgNQorI2RlZmluZSBQQ0w3MTFfREEwX0hJIDUKKyNkZWZpbmUgUENMNzExX0RJX0xPIDYKKyNkZWZpbmUgUENMNzExX0RBMV9MTyA2CisjZGVmaW5lIFBDTDcxMV9ESV9ISSA3CisjZGVmaW5lIFBDTDcxMV9EQTFfSEkgNworI2RlZmluZSBQQ0w3MTFfQ0xSSU5UUiA4CisjZGVmaW5lIFBDTDcxMV9HQUlOIDkKKyNkZWZpbmUgUENMNzExX01VWCAxMAorI2RlZmluZSBQQ0w3MTFfTU9ERSAxMQorI2RlZmluZSBQQ0w3MTFfU09GVFRSSUcgMTIKKyNkZWZpbmUgUENMNzExX0RPX0xPIDEzCisjZGVmaW5lIFBDTDcxMV9ET19ISSAxNAorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNsNzExYl9haSA9IHsgNSwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJQklQX1JBTkdFKDAuMzEyNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FjbDgxMTJoZ19haSA9IHsgMTIsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDA1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAxKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExMmRnX2FpID0geyA5LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMTApCisJfQorfTsKKworLyoKKyAqIGZsYWdzCisgKi8KKworI2RlZmluZSBQQ0w3MTFfVElNRU9VVCAxMDAKKyNkZWZpbmUgUENMNzExX0RSRFkgMHgxMAorCitzdGF0aWMgY29uc3QgaW50IGk4MjUzX29zY19iYXNlID0gNTAwOwkvKiAyIE1oeiAqLworCitzdHJ1Y3QgcGNsNzExX2JvYXJkIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGlzX3BjbDcxMWI7CisJaW50IGlzXzgxMTI7CisJaW50IGlzX2RnOworCWludCBuX3JhbmdlczsKKwlpbnQgbl9haWNoYW47CisJaW50IG5fYW9jaGFuOworCWludCBtYXhpcnE7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlX3R5cGU7Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsNzExX2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDcxMSIsIDAsIDAsIDAsIDUsIDgsIDEsIDAsICZyYW5nZV9iaXBvbGFyNX0sCisJeyJwY2w3MTFiIiwgMSwgMCwgMCwgNSwgOCwgMSwgNywgJnJhbmdlX3BjbDcxMWJfYWl9LAorCXsiYWNsODExMmhnIiwgMCwgMSwgMCwgMTIsIDE2LCAyLCAxNSwgJnJhbmdlX2FjbDgxMTJoZ19haX0sCisJeyJhY2w4MTEyZGciLCAwLCAxLCAxLCA5LCAxNiwgMiwgMTUsICZyYW5nZV9hY2w4MTEyZGdfYWl9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjbDcxMV9ib2FyZCkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNsNzExX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBpbnQgcGNsNzExX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbDcxMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2w3MTEgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNsNzExIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2w3MTFfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbDcxMV9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNsNzExX2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsNzExKTsKKworc3RydWN0IHBjbDcxMV9wcml2YXRlIHsKKworCWludCBib2FyZDsKKwlpbnQgYWRjaGFuOworCWludCBudHJpZzsKKwlpbnQgYWlwWzhdOworCWludCBtb2RlOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjE7CisJdW5zaWduZWQgaW50IGRpdmlzb3IyOworfTsKKworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNsNzExX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwY2w3MTFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJaW50IGxvLCBoaTsKKwlpbnQgZGF0YTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQURfSEkpOworCWxvID0gaW5iKGRldi0+aW9iYXNlICsgUENMNzExX0FEX0xPKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX0NMUklOVFIpOworCisJZGF0YSA9IChoaSA8PCA4KSB8IGxvOworCisJLyogRklYTUUhIE5vdGhpbmcgZWxzZSBzZXRzIG50cmlnISAqLworCWlmICghKC0tZGV2cHJpdi0+bnRyaWcpKSB7CisJCWlmICh0aGlzX2JvYXJkLT5pc184MTEyKSB7CisJCQlvdXRiKDEsIGRldi0+aW9iYXNlICsgUENMNzExX01PREUpOworCQl9IGVsc2UgeworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NT0RFKTsKKwkJfQorCisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwl9CisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBwY2w3MTFfc2V0X2NoYW5nYWluKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbikKK3sKKwlpbnQgY2hhbl9yZWdpc3RlcjsKKworCW91dGIoQ1JfUkFOR0UoY2hhbiksIGRldi0+aW9iYXNlICsgUENMNzExX0dBSU4pOworCisJY2hhbl9yZWdpc3RlciA9IENSX0NIQU4oY2hhbik7CisKKwlpZiAodGhpc19ib2FyZC0+aXNfODExMikgeworCisJCS8qCisJCSAqICBTZXQgdGhlIGNvcnJlY3QgY2hhbm5lbC4gIFRoZSB0d28gY2hhbm5lbCBiYW5rcyBhcmUgc3dpdGNoZWQKKwkJICogIHVzaW5nIHRoZSBtYXNrIHZhbHVlLgorCQkgKiAgTkI6IFRvIHVzZSBkaWZmZXJlbnRpYWwgY2hhbm5lbHMsIHlvdSBzaG91bGQgdXNlIG1hc2sgPSAweDMwLAorCQkgKiAgYnV0IEkgaGF2ZW4ndCB3cml0dGVuIHRoZSBzdXBwb3J0IGZvciB0aGlzIHlldC4gL0pKCisJCSAqLworCisJCWlmIChjaGFuX3JlZ2lzdGVyID49IDgpIHsKKwkJCWNoYW5fcmVnaXN0ZXIgPSAweDIwIHwgKGNoYW5fcmVnaXN0ZXIgJiAweDcpOworCQl9IGVsc2UgeworCQkJY2hhbl9yZWdpc3RlciB8PSAweDEwOworCQl9CisJfSBlbHNlIHsKKwkJb3V0YihjaGFuX3JlZ2lzdGVyLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NVVgpOworCX0KK30KKworc3RhdGljIGludCBwY2w3MTFfYWlfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IGhpLCBsbzsKKworCXBjbDcxMV9zZXRfY2hhbmdhaW4oZGV2LCBpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qCisJCSAqICBXcml0ZSB0aGUgY29ycmVjdCBtb2RlIChzb2Z0d2FyZSBwb2xsaW5nKSBhbmQgc3RhcnQgcG9sbGluZyBieSB3cml0aW5nCisJCSAqICB0byB0aGUgdHJpZ2dlciByZWdpc3RlcgorCQkgKi8KKwkJb3V0YigxLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NT0RFKTsKKworCQlpZiAodGhpc19ib2FyZC0+aXNfODExMikgeworCQl9IGVsc2UgeworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9TT0ZUVFJJRyk7CisJCX0KKworCQlpID0gUENMNzExX1RJTUVPVVQ7CisJCXdoaWxlICgtLWkpIHsKKwkJCWhpID0gaW5iKGRldi0+aW9iYXNlICsgUENMNzExX0FEX0hJKTsKKwkJCWlmICghKGhpICYgUENMNzExX0RSRFkpKQorCQkJCWdvdG8gb2s7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCXJ0X3ByaW50aygiY29tZWRpJWQ6IHBjbDcxMTogQS9EIHRpbWVvdXRcbiIsIGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgb2s6CisJCWxvID0gaW5iKGRldi0+aW9iYXNlICsgUENMNzExX0FEX0xPKTsKKworCQlkYXRhW25dID0gKChoaSAmIDB4ZikgPDwgOCkgfCBsbzsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBwY2w3MTFfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCB0bXA7CisJaW50IGVyciA9IDA7CisKKwkvKiBzdGVwIDEgKi8KKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDMgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworI2RlZmluZSBNQVhfU1BFRUQgMTAwMAorI2RlZmluZSBUSU1FUl9CQVNFIDEwMAorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogaWdub3JlICovCisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkmZGV2cHJpdi0+ZGl2aXNvcjEsICZkZXZwcml2LT5kaXZpc29yMiwKKwkJCSZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2w3MTFfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IHRpbWVyMSwgdGltZXIyOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCXBjbDcxMV9zZXRfY2hhbmdhaW4oZGV2LCBjbWQtPmNoYW5saXN0WzBdKTsKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyoKKwkJICogIFNldCB0aW1lcnMKKwkJICogICAgICB0aW1lciBjaGlwIGlzIGFuIDgyNTMsIHdpdGggdGltZXJzIDEgYW5kIDIKKwkJICogICAgICBjYXNjYWRlZAorCQkgKiAgMHg3NCA9IFNlbGVjdCBDb3VudGVyIDEgfCBMU0IvTVNCIHwgTW9kZT0yIHwgQmluYXJ5CisJCSAqICAgICAgICBNb2RlIDIgPSBSYXRlIGdlbmVyYXRvcgorCQkgKgorCQkgKiAgMHhiNCA9IFNlbGVjdCBDb3VudGVyIDIgfCBMU0IvTVNCIHwgTW9kZT0yIHwgQmluYXJ5CisJCSAqLworCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoaTgyNTNfb3NjX2Jhc2UsICZ0aW1lcjEsICZ0aW1lcjIsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgVFJJR19ST1VORF9ORUFSRVNUKTsKKworCQlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMNzExX0NUUkNUTCk7CisJCW91dGIodGltZXIxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSMSk7CisJCW91dGIoKHRpbWVyMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMNzExX0NUUjEpOworCQlvdXRiKDB4YjQsIGRldi0+aW9iYXNlICsgUENMNzExX0NUUkNUTCk7CisJCW91dGIodGltZXIyICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSMik7CisJCW91dGIoKHRpbWVyMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMNzExX0NUUjIpOworCisJCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAoanVzdCBpbiBjYXNlKSAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX0NMUklOVFIpOworCisJCS8qCisJCSAqICBTZXQgbW9kZSB0byBJUlEgdHJhbnNmZXIKKwkJICovCisJCW91dGIoZGV2cHJpdi0+bW9kZSB8IDYsIGRldi0+aW9iYXNlICsgUENMNzExX01PREUpOworCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJb3V0YihkZXZwcml2LT5tb2RlIHwgMywgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfTU9ERSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICBhbmFsb2cgb3V0cHV0CisqLworc3RhdGljIGludCBwY2w3MTFfYW9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0YigoZGF0YVtuXSAmIDB4ZmYpLAorCQkJZGV2LT5pb2Jhc2UgKyAoY2hhbiA/IFBDTDcxMV9EQTFfTE8gOiBQQ0w3MTFfREEwX0xPKSk7CisJCW91dGIoKGRhdGFbbl0gPj4gOCksCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUENMNzExX0RBMV9ISSA6IFBDTDcxMV9EQTBfSEkpKTsKKworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbbl07CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgcGNsNzExX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJZGF0YVtuXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBuOworCit9CisKKy8qIERpZ2l0YWwgcG9ydCByZWFkIC0gVW50ZXN0ZWQgb24gODExMiAqLworc3RhdGljIGludCBwY2w3MTFfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfRElfTE8pIHwKKwkJKGluYihkZXYtPmlvYmFzZSArIFBDTDcxMV9ESV9ISSkgPDwgOCk7CisKKwlyZXR1cm4gMjsKK30KKworLyogRGlnaXRhbCBwb3J0IHdyaXRlIC0gVW50ZXN0ZWQgb24gODExMiAqLworc3RhdGljIGludCBwY2w3MTFfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwl9CisJaWYgKGRhdGFbMF0gJiAweDAwZmYpCisJCW91dGIocy0+c3RhdGUgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9ET19MTyk7CisJaWYgKGRhdGFbMF0gJiAweGZmMDApCisJCW91dGIoKHMtPnN0YXRlID4+IDgpLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9ET19ISSk7CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyogIEZyZWUgYW55IHJlc291cmNlcyB0aGF0IHdlIGhhdmUgY2xhaW1lZCAgKi8KK3N0YXRpYyBpbnQgcGNsNzExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2w3MTE6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDTDcxMV9TSVpFKTsKKworCXJldHVybiAwOworfQorCisvKiAgSW5pdGlhbGl6YXRpb24gKi8KK3N0YXRpYyBpbnQgcGNsNzExX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwkvKiBjbGFpbSBvdXIgSS9PIHNwYWNlICovCisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w3MTE6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUENMNzExX1NJWkUsICJwY2w3MTEiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJLyogdGhlcmUgc2hvdWxkIGJlIGEgc2FuaXR5IGNoZWNrIGhlcmUgKi8KKworCS8qIHNldCB1cCBzb21lIG5hbWUgc3R1ZmYgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJLyogZ3JhYiBvdXIgSVJRICovCisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJaWYgKGlycSA+IHRoaXNfYm9hcmQtPm1heGlycSkgeworCQlwcmludGsoImlycSBvdXQgb2YgcmFuZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGlycSkgeworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgcGNsNzExX2ludGVycnVwdCwgMCwgInBjbDcxMSIsIGRldikpIHsKKwkJCXByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCIoIGlycSA9ICV1IClcbiIsIGlycSk7CisJCX0KKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNsNzExX3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogQUkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJcy0+bWF4ZGF0YSA9IDB4ZmZmOworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5haV9yYW5nZV90eXBlOworCXMtPmluc25fcmVhZCA9IHBjbDcxMV9haV9pbnNuOworCWlmIChpcnEpIHsKKwkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCXMtPmRvX2NtZHRlc3QgPSBwY2w3MTFfYWlfY21kdGVzdDsKKwkJcy0+ZG9fY21kID0gcGNsNzExX2FpX2NtZDsKKwl9CisKKwlzKys7CisJLyogQU8gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyNTsKKwlzLT5pbnNuX3dyaXRlID0gcGNsNzExX2FvX2luc247CisJcy0+aW5zbl9yZWFkID0gcGNsNzExX2FvX2luc25fcmVhZDsKKworCXMrKzsKKwkvKiAxNi1iaXQgZGlnaXRhbCBpbnB1dCAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MTFfZGlfaW5zbl9iaXRzOworCisJcysrOworCS8qIDE2LWJpdCBkaWdpdGFsIG91dCAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5zdGF0ZSA9IDA7CisJcy0+aW5zbl9iaXRzID0gcGNsNzExX2RvX2luc25fYml0czsKKworCS8qCisJICAgdGhpcyBpcyB0aGUgImJhc2UgdmFsdWUiIGZvciB0aGUgbW9kZSByZWdpc3Rlciwgd2hpY2ggaXMKKwkgICB1c2VkIGZvciB0aGUgaXJxIG9uIHRoZSBQQ0w3MTEKKwkgKi8KKwlpZiAodGhpc19ib2FyZC0+aXNfcGNsNzExYikgeworCQlkZXZwcml2LT5tb2RlID0gKGRldi0+aXJxIDw8IDQpOworCX0KKworCS8qIGNsZWFyIERBQyAqLworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfREEwX0xPKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX0RBMF9ISSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9EQTFfTE8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfREExX0hJKTsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMWU3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKKworICAgIE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorCisgICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHM6CisgICAgIGNhcmQ6ICAgUENMLTcyNCwgUENMLTcyMiwgUENMLTczMQorICAgICBkcml2ZXI6IHBjbDcyNCwgIHBjbDcyMiwgIHBjbDczMQorICAgIGFuZCBBRExpbmsgY2FyZHM6CisgICAgIGNhcmQ6ICAgQUNMLTcxMjIsIEFDTC03MTI0LCBQRVQtNDhESU8KKyAgICAgZHJpdmVyOiBhY2w3MTIyLCAgYWNsNzEyNCwgIHBldDQ4ZGlvCisKKyAgICBPcHRpb25zIGZvciBQQ0wtNzI0LCBQQ0wtNzMxLCBBQ0wtNzEyNCBhbmQgUEVULTQ4RElPOgorICAgICBbMF0gLSBJTyBCYXNlCisKKyAgICBPcHRpb25zIGZvciBQQ0wtNzIyIGFuZCBBQ0wtNzEyMjoKKyAgICAgWzBdIC0gSU8gQmFzZQorICAgICBbMV0gLSBJUlEgKDA9ZGlzYWJsZSBJUlEpIElSUSBpc24ndCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lIQorICAgICBbMl0gLW51bWJlciBvZiBESU86CisgICAgICAgICAgICAgIDAsIDE0NDogMTQ0IERJTyBjb25maWd1cmF0aW9uCisJICAgICAgMSwgIDk2OiAgOTYgRElPIGNvbmZpZ3VyYXRpb24KKyovCisvKgorRHJpdmVyOiBwY2w3MjQKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTcyNCwgUENMLTcyMiwgUENMLTczMSBBRExpbmsgQUNMLTcxMjIsIEFDTC03MTI0LAorICBQRVQtNDhESU8KK0F1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtNzI0IChwY2w3MjQpLCBQQ0wtNzIyIChwY2w3MjIpLCBQQ0wtNzMxIChwY2w3MzEpLAorICBbQURMaW5rXSBBQ0wtNzEyMiAoYWNsNzEyMiksIEFDTC03MTI0IChhY2w3MTI0KSwgUEVULTQ4RElPIChwZXQ0OGRpbykKK1N0YXR1czogdW50ZXN0ZWQKKworVGhpcyBpcyBkcml2ZXIgZm9yIGRpZ2l0YWwgSS9PIGJvYXJkcyBQQ0wtNzIyLzcyNC83MzEgd2l0aCAxNDQvMjQvNDggRElPCithbmQgZm9yIGRpZ2l0YWwgSS9PIGJvYXJkcyBBQ0wtNzEyMi83MTI0L1BFVC00OERJTyB3aXRoIDE0NC8yNC80OCBESU8uCitJdCBuZWVkIDgyNTUubyBmb3Igb3BlcmF0aW9ucyBhbmQgb25seSBpbW1lZGlhdGUgbW9kZSBpcyBzdXBwb3J0ZWQuCitTZWUgdGhlIHNvdXJjZSBmb3IgY29uZmlndXJhdGlvbiBkZXRhaWxzLgorKi8KKy8qCisgKiBjaGVja19kcml2ZXIgb3ZlcnJpZGVzOgorICogICBzdHJ1Y3QgY29tZWRpX2luc24KKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiODI1NS5oIgorCisjZGVmaW5lIFBDTDcyMl9TSVpFICAgIDMyCisjZGVmaW5lIFBDTDcyMl85Nl9TSVpFIDE2CisjZGVmaW5lIFBDTDcyNF9TSVpFICAgICA0CisjZGVmaW5lIFBDTDczMV9TSVpFICAgICA4CisjZGVmaW5lIFBFVDQ4X1NJWkUgICAgICAyCisKKyNkZWZpbmUgU0laRV84MjU1CTQKKworLy8gI2RlZmluZSBQQ0w3MjRfSVJRICAgMSAgLyogbm8gSVJRIHN1cHBvcnQgbm93ICovCisKK3N0YXRpYyBpbnQgcGNsNzI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbDcyNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgcGNsNzI0X2JvYXJkIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGJvYXJkIG5hbWUKKwlpbnQgZGlvOwkJLy8gbnVtIG9mIERJTworCWludCBudW1vZnBvcnRzOwkJLy8gbnVtIG9mIDgyNTUgc3ViZGV2aWNlcworCXVuc2lnbmVkIGludCBJUlFiaXRzOwkvLyBhbGxvd2VkIGludGVycnVwdHMKKwl1bnNpZ25lZCBpbnQgaW9fcmFuZ2U7CS8vIGxlbiBvZiBJTyBzcGFjZQorCWNoYXIgY2FuX2hhdmU5NjsKKwljaGFyIGlzX3BldDQ4OworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbDcyNF9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJwY2w3MjQiLCAyNCwgMSwgMHgwMGZjLCBQQ0w3MjRfU0laRSwgMCwgMCx9LAorCXsicGNsNzIyIiwgMTQ0LCA2LCAweDAwZmMsIFBDTDcyMl9TSVpFLCAxLCAwLH0sCisJeyJwY2w3MzEiLCA0OCwgMiwgMHg5Y2ZjLCBQQ0w3MzFfU0laRSwgMCwgMCx9LAorCXsiYWNsNzEyMiIsIDE0NCwgNiwgMHg5ZWU4LCBQQ0w3MjJfU0laRSwgMSwgMCx9LAorCXsiYWNsNzEyNCIsIDI0LCAxLCAweDAwZmMsIFBDTDcyNF9TSVpFLCAwLCAwLH0sCisJeyJwZXQ0OGRpbyIsIDQ4LCAyLCAweDllYjgsIFBFVDQ4X1NJWkUsIDAsIDEsfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2w3MjRfYm9hcmQpKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbDcyNF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDcyNCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w3MjQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDcyNF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsNzI0X2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY2w3MjRfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MjQpOworCitzdGF0aWMgaW50IHN1YmRldl84MjU1X2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBhcmc7CisKKwlpZiAoZGlyKSB7CisJCW91dGIoZGF0YSwgaW9iYXNlICsgcG9ydCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiBpbmIoaW9iYXNlICsgcG9ydCk7CisJfQorfQorCitzdGF0aWMgaW50IHN1YmRldl84MjU1bWFwcGVkX2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSkKK3sKKwlpbnQgbW92cG9ydCA9IFNJWkVfODI1NSAqIChpb2Jhc2UgPj4gMTIpOworCisJaW9iYXNlICY9IDB4MGZmZjsKKworCWlmIChkaXIpIHsKKwkJb3V0Yihwb3J0ICsgbW92cG9ydCwgaW9iYXNlKTsKKwkJb3V0YihkYXRhLCBpb2Jhc2UgKyAxKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJb3V0Yihwb3J0ICsgbW92cG9ydCwgaW9iYXNlKTsKKwkJcmV0dXJuIGluYihpb2Jhc2UgKyAxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaW9yYW5nZTsKKwlpbnQgcmV0LCBpLCBuX3N1YmRldmljZXM7CisjaWZkZWYgUENMNzI0X0lSUQorCXVuc2lnbmVkIGludCBpcnE7CisjZW5kaWYKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlpZiAoKHRoaXNfYm9hcmQtPmNhbl9oYXZlOTYpICYmICgoaXQtPm9wdGlvbnNbMV0gPT0gMSkKKwkJCXx8IChpdC0+b3B0aW9uc1sxXSA9PSA5NikpKQorCQlpb3JhbmdlID0gUENMNzIyXzk2X1NJWkU7CS8vIFBDTC03MjQgaW4gOTYgRElPIGNvbmZpZ3VyYXRpb24KKwlwcmludGsoImNvbWVkaSVkOiBwY2w3MjQ6IGJvYXJkPSVzLCAweCUwM2x4ICIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvcmFuZ2UsICJwY2w3MjQiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisjaWZkZWYgUENMNzI0X0lSUQorCWlycSA9IDA7CisJaWYgKHRoaXNfYm9hcmQtPklSUWJpdHMgIT0gMCkgewkvKiBib2FyZCBzdXBwb3J0IElSUSAqLworCQlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KKwkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIElSUSAldSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKKwkJCQkJaXJxKTsKKwkJCQlpcnEgPSAwOwkvKiBCYWQgSVJRICovCisJCQl9IGVsc2UgeworCQkJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfcGNsNzI0LCAwLAorCQkJCQkJInBjbDcyNCIsIGRldikpIHsKKwkJCQkJcnRfcHJpbnRrCisJCQkJCQkoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAldSwgRElTQUJMSU5HIElUIiwKKwkJCQkJCWlycSk7CisJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KKwkJCQl9IGVsc2UgeworCQkJCQlydF9wcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlkZXYtPmlycSA9IGlycTsKKyNlbmRpZgorCisJcHJpbnRrKCJcbiIpOworCisJbl9zdWJkZXZpY2VzID0gdGhpc19ib2FyZC0+bnVtb2Zwb3J0czsKKwlpZiAoKHRoaXNfYm9hcmQtPmNhbl9oYXZlOTYpICYmICgoaXQtPm9wdGlvbnNbMV0gPT0gMSkKKwkJCXx8IChpdC0+b3B0aW9uc1sxXSA9PSA5NikpKQorCQluX3N1YmRldmljZXMgPSA0OwkvLyBQQ0wtNzI0IGluIDk2IERJTyBjb25maWd1cmF0aW9uCisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQlpZiAodGhpc19ib2FyZC0+aXNfcGV0NDgpIHsKKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpLAorCQkJCXN1YmRldl84MjU1bWFwcGVkX2NiLAorCQkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIGkgKiAweDEwMDApKTsKKwkJfSBlbHNlCisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSwKKwkJCQlzdWJkZXZfODI1NV9jYiwKKwkJCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKyBTSVpFXzgyNTUgKiBpKSk7CisJfTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDcyNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisKKy8vICAgICAgcHJpbnRrKCJjb21lZGklZDogcGNsNzI0OiByZW1vdmVcbiIsZGV2LT5taW5vcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSk7CisJfQorCisjaWZkZWYgUENMNzI0X0lSUQorCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorI2VuZGlmCisKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2NmJhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIGNvbWVkaS9kcml2ZXJzL3BjbDcyNS5jCisgKiBEcml2ZXIgZm9yIFBDTDcyNSBhbmQgY2xvbmVzCisgKiBEYXZpZCBBLiBTY2hsZWVmCisgKi8KKy8qCitEcml2ZXI6IHBjbDcyNQorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0wtNzI1ICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBkcworU3RhdHVzOiB1bmtub3duCitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtNzI1IChwY2w3MjUpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBQQ0w3MjVfU0laRSAyCisKKyNkZWZpbmUgUENMNzI1X0RPIDAKKyNkZWZpbmUgUENMNzI1X0RJIDEKKworc3RhdGljIGludCBwY2w3MjVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsNzI1X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDcyNSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w3MjUiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDcyNV9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsNzI1X2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsNzI1KTsKKworc3RhdGljIGludCBwY2w3MjVfZG9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJb3V0YihzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBQQ0w3MjVfRE8pOworCX0KKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbDcyNV9kaV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MjVfREkpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbDcyNTogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBQQ0w3MjVfU0laRSwgInBjbDcyNSIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5ib2FyZF9uYW1lID0gInBjbDcyNSI7CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5pcnEgPSAwOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogZG8gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNsNzI1X2RvX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGRpICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHBjbDcyNV9kaV9pbnNuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2w3MjVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHBjbDcyNTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDTDcyNV9TSVpFKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYmQzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMKKworICAgIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmRzOgorICAgICBjYXJkOiAgIFBDTC03MjYsIFBDTC03MjcsIFBDTC03MjgKKyAgICAgZHJpdmVyOiBwY2w3MjYsICBwY2w3MjcsICBwY2w3MjgKKyAgICBhbmQgZm9yIEFETGluayBjYXJkczoKKyAgICAgY2FyZDogICBBQ0wtNjEyNiwgQUNMLTYxMjgKKyAgICAgZHJpdmVyOiBhY2w2MTI2LCAgYWNsNjEyOAorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogcGNsNzI2CitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTC03MjYgJiBjb21wYXRpYmxlcworQXV0aG9yOiBkcworU3RhdHVzOiB1bnRlc3RlZAorRGV2aWNlczogW0FkdmFudGVjaF0gUENMLTcyNiAocGNsNzI2KSwgUENMLTcyNyAocGNsNzI3KSwgUENMLTcyOCAocGNsNzI4KSwKKyAgW0FETGlua10gQUNMLTYxMjYgKGFjbDYxMjYpLCBBQ0wtNjEyOCAoYWNsNjEyOCkKKworSW50ZXJydXB0cyBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgIE9wdGlvbnMgZm9yIFBDTC03MjY6CisgICAgIFswXSAtIElPIEJhc2UKKyAgICAgWzJdLi4uWzddIC0gRC9BIG91dHB1dCByYW5nZSBmb3IgY2hhbm5lbCAxLTY6CisgICAgICAgICAgICAgICAwOiAwLTVWLCAxOiAwLTEwViwgMjogKy8tNVYsIDM6ICsvLTEwViwKKwkgICAgICAgNDogNC0yMG1BLCA1OiB1bmtub3duIChleHRlcm5hbCByZWZlcmVuY2UpCisKKyAgICBPcHRpb25zIGZvciBQQ0wtNzI3OgorICAgICBbMF0gLSBJTyBCYXNlCisgICAgIFsyXS4uLlsxM10gLSBEL0Egb3V0cHV0IHJhbmdlIGZvciBjaGFubmVsIDEtMTI6CisgICAgICAgICAgICAgICAwOiAwLTVWLCAxOiAwLTEwViwgMjogKy8tNVYsCisJICAgICAgIDM6IDQtMjBtQQorCisgICAgT3B0aW9ucyBmb3IgUENMLTcyOCBhbmQgQUNMLTYxMjg6CisgICAgIFswXSAtIElPIEJhc2UKKyAgICAgWzJdLCBbM10gLSBEL0Egb3V0cHV0IHJhbmdlIGZvciBjaGFubmVsIDEgYW5kIDI6CisgICAgICAgICAgICAgICAwOiAwLTVWLCAxOiAwLTEwViwgMjogKy8tNVYsIDM6ICsvLTEwViwKKwkgICAgICAgNDogNC0yMG1BLCA1OiAwLTIwbUEKKworICAgIE9wdGlvbnMgZm9yIEFDTC02MTI2OgorICAgICBbMF0gLSBJTyBCYXNlCisgICAgIFsxXSAtIElSUSAoMD1kaXNhYmxlLCAzLCA1LCA2LCA3LCA5LCAxMCwgMTEsIDEyLCAxNSkgKGN1cnJlbnRseSBpZ25vcmVkKQorICAgICBbMl0uLi5bN10gLSBEL0Egb3V0cHV0IHJhbmdlIGZvciBjaGFubmVsIDEtNjoKKyAgICAgICAgICAgICAgIDA6IDAtNVYsIDE6IDAtMTBWLCAyOiArLy01ViwgMzogKy8tMTBWLAorCSAgICAgICA0OiA0LTIwbUEKKyovCisKKy8qCisgICAgVGhhbmtzIHRvIENpcmN1aXQgU3BlY2lhbGlzdHMgZm9yIGhhdmluZyBwcm9ncmFtbWluZyBpbmZvICghKSBvbgorICAgIHRoZWlyIHdlYiBwYWdlLiAgKGh0dHA6Ly93d3cuY2lyLmNvbS8pCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI3VuZGVmIEFDTDYxMjZfSVJRCQkvKiBubyBpbnRlcnJ1cHQgc3VwcG9ydCAoeWV0KSAqLworCisjZGVmaW5lIFBDTDcyNl9TSVpFIDE2CisjZGVmaW5lIFBDTDcyN19TSVpFIDMyCisjZGVmaW5lIFBDTDcyOF9TSVpFIDgKKworI2RlZmluZSBQQ0w3MjZfREFDMF9ISSAwCisjZGVmaW5lIFBDTDcyNl9EQUMwX0xPIDEKKworI2RlZmluZSBQQ0w3MjZfRE9fSEkgMTIKKyNkZWZpbmUgUENMNzI2X0RPX0xPIDEzCisjZGVmaW5lIFBDTDcyNl9ESV9ISSAxNAorI2RlZmluZSBQQ0w3MjZfRElfTE8gMTUKKworI2RlZmluZSBQQ0w3MjdfRE9fSEkgMjQKKyNkZWZpbmUgUENMNzI3X0RPX0xPIDI1CisjZGVmaW5lIFBDTDcyN19ESV9ISSAgMAorI2RlZmluZSBQQ0w3MjdfRElfTE8gIDEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlXzRfMjBtQSA9IHsgMSwge1JBTkdFX21BKDQsIDIwKX0gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV8wXzIwbUEgPSB7IDEsIHtSQU5HRV9tQSgwLCAyMCl9IH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgcmFuZ2VsaXN0XzcyNltdID0geworCSZyYW5nZV91bmlwb2xhcjUsICZyYW5nZV91bmlwb2xhcjEwLAorCSZyYW5nZV9iaXBvbGFyNSwgJnJhbmdlX2JpcG9sYXIxMCwKKwkmcmFuZ2VfNF8yMG1BLCAmcmFuZ2VfdW5rbm93bgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCByYW5nZWxpc3RfNzI3W10gPSB7CisJJnJhbmdlX3VuaXBvbGFyNSwgJnJhbmdlX3VuaXBvbGFyMTAsCisJJnJhbmdlX2JpcG9sYXI1LAorCSZyYW5nZV80XzIwbUEKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgcmFuZ2VsaXN0XzcyOFtdID0geworCSZyYW5nZV91bmlwb2xhcjUsICZyYW5nZV91bmlwb2xhcjEwLAorCSZyYW5nZV9iaXBvbGFyNSwgJnJhbmdlX2JpcG9sYXIxMCwKKwkmcmFuZ2VfNF8yMG1BLCAmcmFuZ2VfMF8yMG1BCit9OworCitzdGF0aWMgaW50IHBjbDcyNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2w3MjZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RydWN0IHBjbDcyNl9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOwkvLyBkcml2ZXIgbmFtZQorCWludCBuX2FvY2hhbjsJCS8vIG51bSBvZiBEL0EgY2hhbnMKKwlpbnQgbnVtX29mX3JhbmdlczsJLy8gbnVtIG9mIHJhbmdlcworCXVuc2lnbmVkIGludCBJUlFiaXRzOwkvLyBhbGxvd2VkIGludGVycnVwdHMKKwl1bnNpZ25lZCBpbnQgaW9fcmFuZ2U7CS8vIGxlbiBvZiBJTyBzcGFjZQorCWNoYXIgaGF2ZV9kaW87CQkvLyAxPWNhcmQgaGF2ZSBESS9ETyBwb3J0cworCWludCBkaV9oaTsJCS8vIHBvcnRzIGZvciBESS9ETyBvcGVyYXRpb25zCisJaW50IGRpX2xvOworCWludCBkb19oaTsKKwlpbnQgZG9fbG87CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0ICpyYW5nZV90eXBlX2xpc3Q7CS8vIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhbmdlcworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbDcyNl9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJwY2w3MjYiLCA2LCA2LCAweDAwMDAsIFBDTDcyNl9TSVpFLCAxLAorCQkJUENMNzI2X0RJX0hJLCBQQ0w3MjZfRElfTE8sIFBDTDcyNl9ET19ISSwgUENMNzI2X0RPX0xPLAorCQkmcmFuZ2VsaXN0XzcyNlswXSx9LAorCXsicGNsNzI3IiwgMTIsIDQsIDB4MDAwMCwgUENMNzI3X1NJWkUsIDEsCisJCQlQQ0w3MjdfRElfSEksIFBDTDcyN19ESV9MTywgUENMNzI3X0RPX0hJLCBQQ0w3MjdfRE9fTE8sCisJCSZyYW5nZWxpc3RfNzI3WzBdLH0sCisJeyJwY2w3MjgiLCAyLCA2LCAweDAwMDAsIFBDTDcyOF9TSVpFLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJJnJhbmdlbGlzdF83MjhbMF0sfSwKKwl7ImFjbDYxMjYiLCA2LCA1LCAweDk2ZTgsIFBDTDcyNl9TSVpFLCAxLAorCQkJUENMNzI2X0RJX0hJLCBQQ0w3MjZfRElfTE8sIFBDTDcyNl9ET19ISSwgUENMNzI2X0RPX0xPLAorCQkmcmFuZ2VsaXN0XzcyNlswXSx9LAorCXsiYWNsNjEyOCIsIDIsIDYsIDB4MDAwMCwgUENMNzI4X1NJWkUsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkmcmFuZ2VsaXN0XzcyOFswXSx9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjbDcyNl9ib2FyZCkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNsNzI2X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNsNzI2ID0geworICAgICAgZHJpdmVyX25hbWU6InBjbDcyNiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNsNzI2X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2w3MjZfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbDcyNl9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDcyNik7CisKK3N0cnVjdCBwY2w3MjZfcHJpdmF0ZSB7CisKKwlpbnQgYmlwb2xhclsxMl07CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdFsxMl07CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzEyXTsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2w3MjZfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBwY2w3MjZfYW9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGhpLCBsbzsKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlsbyA9IGRhdGFbbl0gJiAweGZmOworCQloaSA9IChkYXRhW25dID4+IDgpICYgMHhmOworCQlpZiAoZGV2cHJpdi0+Ymlwb2xhcltjaGFuXSkKKwkJCWhpIF49IDB4ODsKKwkJLyoKKwkJICogdGhlIHByb2dyYW1taW5nIGluZm8gZGlkIG5vdCBzYXkgd2hpY2ggb3JkZXIKKwkJICogdG8gd3JpdGUgYnl0ZXMuICBzd2l0Y2ggdGhlIG9yZGVyIG9mIHRoZSBuZXh0CisJCSAqIHR3byBsaW5lcyBpZiB5b3UgZ2V0IGdsaXRjaGVzLgorCQkgKi8KKwkJb3V0YihoaSwgZGV2LT5pb2Jhc2UgKyBQQ0w3MjZfREFDMF9ISSArIDIgKiBjaGFuKTsKKwkJb3V0YihsbywgZGV2LT5pb2Jhc2UgKyBQQ0w3MjZfREFDMF9MTyArIDIgKiBjaGFuKTsKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW25dOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHBjbDcyNl9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI2X2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgdGhpc19ib2FyZC0+ZGlfbG8pIHwKKwkJKGluYihkZXYtPmlvYmFzZSArIHRoaXNfYm9hcmQtPmRpX2hpKSA8PCA4KTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbDcyNl9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCX0KKwlpZiAoZGF0YVsxXSAmIDB4MDBmZikKKwkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgdGhpc19ib2FyZC0+ZG9fbG8pOworCWlmIChkYXRhWzFdICYgMHhmZjAwKQorCQlvdXRiKChzLT5zdGF0ZSA+PiA4KSwgZGV2LT5pb2Jhc2UgKyB0aGlzX2JvYXJkLT5kb19oaSk7CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY2w3MjZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpb3JhbmdlOworCWludCByZXQsIGk7CisjaWZkZWYgQUNMNjEyNl9JUlEKKwl1bnNpZ25lZCBpbnQgaXJxOworI2VuZGlmCisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpb3JhbmdlID0gdGhpc19ib2FyZC0+aW9fcmFuZ2U7CisJcHJpbnRrKCJjb21lZGklZDogcGNsNzI2OiBib2FyZD0lcywgMHglMDNseCAiLCBkZXYtPm1pbm9yLAorCQl0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBpb3JhbmdlLCAicGNsNzI2IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNsNzI2X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCWRldnByaXYtPmJpcG9sYXJbaV0gPSAwOworCQlkZXZwcml2LT5yYW5nZWxpc3RbaV0gPSAmcmFuZ2VfdW5rbm93bjsKKwl9CisKKyNpZmRlZiBBQ0w2MTI2X0lSUQorCWlycSA9IDA7CisJaWYgKGJvYXJkdHlwZXNbYm9hcmRdLklSUWJpdHMgIT0gMCkgewkvKiBib2FyZCBzdXBwb3J0IElSUSAqLworCQlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwkJZGV2cHJpdi0+Zmlyc3RfY2hhbiA9IDI7CisJCWlmIChpcnEpIHsJLyogd2Ugd2FudCB0byB1c2UgSVJRICovCisJCQlpZiAoKCgxIDw8IGlycSkgJiBib2FyZHR5cGVzW2JvYXJkXS5JUlFiaXRzKSA9PSAwKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiLCBJUlEgJWQgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsIERJU0FCTElORyBJVCIsCisJCQkJCWlycSk7CisJCQkJaXJxID0gMDsJLyogQmFkIElSUSAqLworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgaW50ZXJydXB0X3BjbDgxOCwgMCwKKwkJCQkJCSJwY2w3MjYiLCBkZXYpKSB7CisJCQkJCXJ0X3ByaW50aworCQkJCQkJKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJWQsIERJU0FCTElORyBJVCIsCisJCQkJCQlpcnEpOworCQkJCQlpcnEgPSAwOwkvKiBDYW4ndCB1c2UgSVJRICovCisJCQkJfSBlbHNlIHsKKwkJCQkJcnRfcHJpbnRrKCIsIGlycT0lZCIsIGlycSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJZGV2LT5pcnEgPSBpcnE7CisjZW5kaWYKKworCXByaW50aygiXG4iKTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPmluc25fd3JpdGUgPSBwY2w3MjZfYW9faW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBwY2w3MjZfYW9faW5zbl9yZWFkOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5yYW5nZWxpc3Q7CisJZm9yIChpID0gMDsgaSA8IHRoaXNfYm9hcmQtPm5fYW9jaGFuOyBpKyspIHsKKwkJaW50IGo7CisKKwkJaiA9IGl0LT5vcHRpb25zWzIgKyAxXTsKKwkJaWYgKChqIDwgMCkgfHwgKGogPj0gdGhpc19ib2FyZC0+bnVtX29mX3JhbmdlcykpIHsKKwkJCXByaW50aygiSW52YWxpZCByYW5nZSBmb3IgY2hhbm5lbCAlZCEgTXVzdCBiZSAwPD0lZDwlZFxuIiwgaSwgaiwgdGhpc19ib2FyZC0+bnVtX29mX3JhbmdlcyAtIDEpOworCQkJaiA9IDA7CisJCX0KKwkJZGV2cHJpdi0+cmFuZ2VsaXN0W2ldID0gdGhpc19ib2FyZC0+cmFuZ2VfdHlwZV9saXN0W2pdOworCQlpZiAoZGV2cHJpdi0+cmFuZ2VsaXN0W2ldLT5yYW5nZVswXS5taW4gPT0KKwkJCS1kZXZwcml2LT5yYW5nZWxpc3RbaV0tPnJhbmdlWzBdLm1heCkKKwkJCWRldnByaXYtPmJpcG9sYXJbaV0gPSAxOwkvKiBiaXBvbGFyIHJhbmdlICovCisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGkgKi8KKwlpZiAoIXRoaXNfYm9hcmQtPmhhdmVfZGlvKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworCQlzLT5uX2NoYW4gPSAxNjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJCXMtPmluc25fYml0cyA9IHBjbDcyNl9kaV9pbnNuX2JpdHM7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZG8gKi8KKwlpZiAoIXRoaXNfYm9hcmQtPmhhdmVfZGlvKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EOworCQlzLT5uX2NoYW4gPSAxNjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJCXMtPmluc25fYml0cyA9IHBjbDcyNl9kb19pbnNuX2JpdHM7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8vICAgICAgcHJpbnRrKCJjb21lZGklZDogcGNsNzI2OiByZW1vdmVcbiIsZGV2LT5taW5vcik7CisKKyNpZmRlZiBBQ0w2MTI2X0lSUQorCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorI2VuZGlmCisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmM2ZDdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMKKyAqIERyaXZlciBmb3IgQWR2YW50ZWNoIFBDTC03MzAgYW5kIGNsb25lcworICogSm9zw6kgTHVpcyBTw6FuY2hlegorICovCisvKgorRHJpdmVyOiBwY2w3MzAKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTczMCAoJiBjb21wYXRpYmxlcykKK0F1dGhvcjogSm9zw6kgTHVpcyBTw6FuY2hleiAoanNhbmNoZXp2QHRlbGVsaW5lLmVzKQorU3RhdHVzOiB1bnRlc3RlZAorRGV2aWNlczogW0FkdmFudGVjaF0gUENMLTczMCAocGNsNzMwKSwgW0lDUF0gSVNPLTczMCAoaXNvNzMwKSwKKwkJIFtBZGxpbmtdIEFDTC03MTMwIChhY2w3MTMwKQorCitJbnRlcnJ1cHRzIGFyZSBub3Qgc3VwcG9ydGVkLgorVGhlIEFDTC03MTMwIGNhcmQgaGF2ZSBhbiA4MjU0IHRpbWVyL2NvdW50ZXIgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFBDTDczMF9TSVpFCQk0CisjZGVmaW5lIEFDTDcxMzBfU0laRQk4CisjZGVmaW5lIFBDTDczMF9JRElPX0xPCTAJLyogSXNvbGF0ZWQgRGlnaXRhbCBJL08gbG93IGJ5dGUgKElEMC1JRDcpICovCisjZGVmaW5lIFBDTDczMF9JRElPX0hJCTEJLyogSXNvbGF0ZWQgRGlnaXRhbCBJL08gaGlnaCBieXRlIChJRDgtSUQxNSkgKi8KKyNkZWZpbmUgUENMNzMwX0RJT19MTwkyCS8qIFRUTCBEaWdpdGFsIEkvTyBsb3cgYnl0ZSAoRDAtRDcpICovCisjZGVmaW5lIFBDTDczMF9ESU9fSEkJMwkvKiBUVEwgRGlnaXRhbCBJL08gaGlnaCBieXRlIChEOC1EMTUpICovCisKK3N0YXRpYyBpbnQgcGNsNzMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbDczMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgcGNsNzMwX2JvYXJkIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGJvYXJkIG5hbWUKKwl1bnNpZ25lZCBpbnQgaW9fcmFuZ2U7CS8vIGxlbiBvZiBJL08gc3BhY2UKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2w3MzBfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsicGNsNzMwIiwgUENMNzMwX1NJWkUsfSwKKwl7ImlzbzczMCIsIFBDTDczMF9TSVpFLH0sCisJeyJhY2w3MTMwIiwgQUNMNzEzMF9TSVpFLH0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgcGNsNzMwX2JvYXJkKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBwY2w3MzBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2w3MzAgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNsNzMwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2w3MzBfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbDczMF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNsNzMwX2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsNzMwKTsKKworc3RhdGljIGludCBwY2w3MzBfZG9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwl9CisJaWYgKGRhdGFbMF0gJiAweDAwZmYpCisJCW91dGIocy0+c3RhdGUgJiAweGZmLAorCQkJZGV2LT5pb2Jhc2UgKyAoKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSkpOworCWlmIChkYXRhWzBdICYgMHhmZjAwKQorCQlvdXRiKChzLT5zdGF0ZSA+PiA4KSwKKwkJCWRldi0+aW9iYXNlICsgKCh1bnNpZ25lZCBsb25nKXMtPnByaXZhdGUpICsgMSk7CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY2w3MzBfZGlfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgKCh1bnNpZ25lZCBsb25nKXMtPnByaXZhdGUpKSB8CisJCShpbmIoZGV2LT5pb2Jhc2UgKyAoKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSkgKyAxKSA8PCA4KTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbDczMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlvcmFuZ2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpb3JhbmdlID0gdGhpc19ib2FyZC0+aW9fcmFuZ2U7CisJcHJpbnRrKCJjb21lZGklZDogcGNsNzMwOiBib2FyZD0lcyAweCUwNGx4ICIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvcmFuZ2UsICJwY2w3MzAiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5pcnEgPSAwOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogSXNvbGF0ZWQgZG8gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IHBjbDczMF9kb19pbnNuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENMNzMwX0lESU9fTE87CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBJc29sYXRlZCBkaSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gcGNsNzMwX2RpX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ0w3MzBfSURJT19MTzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIFRUTCBkbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gcGNsNzMwX2RvX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ0w3MzBfRElPX0xPOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJLyogVFRMIGRpICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MzBfZGlfaW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTDczMF9ESU9fTE87CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2w3MzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHBjbDczMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGZkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKQEAgLTAsMCArMSwxNjA1IEBACisvKgorICogY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKKyAqCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICoKKyAqIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmRzCisgKiAgY2FyZDogICBQQ0wtODEyLCBQQ0wtODEyUEcsIFBDTC04MTMsIFBDTC04MTNCCisgKiAgZHJpdmVyOiBwY2w4MTIsICBwY2w4MTJwZywgIHBjbDgxMywgIHBjbDgxM2IKKyAqIGFuZCBmb3IgQURsaW5rIGNhcmRzCisgKiAgY2FyZDogICBBQ0wtODExMkRHLCBBQ0wtODExMkhHLCBBQ0wtODExMlBHLCBBQ0wtODExMywgQUNMLTgyMTYKKyAqICBkcml2ZXI6IGFjbDgxMTJkZywgIGFjbDgxMTJoZywgIGFjbDgxMTJwZywgIGFjbDgxMTMsICBhY2w4MjE2CisgKiBhbmQgZm9yIElDUCBEQVMgY2FyZHMKKyAqICBjYXJkOiAgIElTTy04MTMsIEEtODIxUEdILCBBLTgyMVBHTCwgQS04MjFQR0wtTkRBLCBBLTgyMlBHSCwgQS04MjJQR0wsCisgKiAgZHJpdmVyOiBpc284MTMsICBhODIxcGdoLCAgYS04MjFwZ2wsIGEtODIxcGdsbmRhLCAgYTgyMnBnaCwgIGE4MjJwZ2wsCisgKiAgY2FyZDogICBBLTgyM1BHSCwgQS04MjNQR0wsIEEtODI2UEcKKyAqIGRyaXZlcjogIGE4MjNwZ2gsICBhODIzcGdsLCAgYTgyNnBnCisgKi8KKy8qCitEcml2ZXI6IHBjbDgxMgorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0wtODEyL1BHLCBQQ0wtODEzL0IsCisgICAgICAgICAgICAgQURMaW5rIEFDTC04MTEyREcvSEcvUEcsIEFDTC04MTEzLCBBQ0wtODIxNiwKKyAgICAgICAgICAgICBJQ1AgREFTIEEtODIxUEdIL1BHTC9QR0wtTkRBLCBBLTgyMlBHSC9QR0wsIEEtODIzUEdIL1BHTCwgQS04MjZQRywKKyAgICAgICAgICAgICBJQ1AgREFTIElTTy04MTMKK0F1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtODEyIChwY2w4MTIpLCBQQ0wtODEyUEcgKHBjbDgxMnBnKSwKKyAgUENMLTgxMyAocGNsODEzKSwgUENMLTgxM0IgKHBjbDgxM2IpLCBbQURMaW5rXSBBQ0wtODExMkRHIChhY2w4MTEyZGcpLAorICBBQ0wtODExMkhHIChhY2w4MTEyaGcpLCBBQ0wtODExMyAoYWNsLTgxMTMpLCBBQ0wtODIxNiAoYWNsODIxNiksCisgIFtJQ1BdIElTTy04MTMgKGlzbzgxMyksIEEtODIxUEdIIChhODIxcGdoKSwgQS04MjFQR0wgKGE4MjFwZ2wpLAorICBBLTgyMVBHTC1OREEgKGE4MjFwY2xuZGEpLCBBLTgyMlBHSCAoYTgyMnBnaCksIEEtODIyUEdMIChhODIycGdsKSwKKyAgQS04MjNQR0ggKGE4MjNwZ2gpLCBBLTgyM1BHTCAoYTgyM3BnbCksIEEtODI2UEcgKGE4MjZwZykKK1VwZGF0ZWQ6IE1vbiwgMDYgQXVnIDIwMDcgMTI6MDM6MTUgKzAxMDAKK1N0YXR1czogd29ya3MgKEkgaG9wZS4gTXkgYm9hcmQgZmlyZSB1cCB1bmRlciBteSBoYW5kcworICAgICAgICAgICAgICAgYW5kIEkgY2Fubid0IHRlc3QgYWxsIGZlYXR1cmVzLikKKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgaW5zbiBhbmQgY21kIGludGVyZmFjZXMuIFNvbWUgYm9hcmRzIHN1cHBvcnQgb25seSBpbnNuCitiZWNvdXNlIHRoZWlyIGhhcmR3YXJlIGRvbid0IGFsbG93IG1vcmUgKFBDTC04MTMvQiwgQUNMLTgxMTMsIElTTy04MTMpLgorRGF0YSB0cmFuc2ZlciBvdmVyIERNQSBpcyBzdXBwb3J0ZWQgb25seSB3aGVuIHlvdSBtZWFzdXJlIG9ubHkgb25lCitjaGFubmVsLCB0aGlzIGlzIHRvbyBoYXJkd2FyZSBsaW1pdGF0aW9uIG9mIHRoZXNlIGJvYXJkcy4KKworT3B0aW9ucyBmb3IgUENMLTgxMjoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKKyAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQorICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCisgICAgICAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKKyAgWzRdIC0gMD1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMTBWCisgICAgICAgIDE9QS9EIGlucHV0IHJhbmdlIGlzICsvLTVWCisgICAgICAgIDI9QS9EIGlucHV0IHJhbmdlIGlzICsvLTIuNVYKKyAgICAgICAgMz1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMS4yNVYKKyAgICAgICAgND1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMC42MjVWCisgICAgICAgIDU9QS9EIGlucHV0IHJhbmdlIGlzICsvLTAuMzEyNVYKKyAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCisgICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKK09wdGlvbnMgZm9yIFBDTC04MTJQRywgQUNMLTgxMTJQRzoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKKyAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQorICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCisgICAgICAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKKyAgWzRdIC0gMD1BL0QgaGF2ZSBtYXggKy8tNVYgaW5wdXQKKyAgICAgICAgMT1BL0QgaGF2ZSBtYXggKy8tMTBWIGlucHV0CisgIFs1XSAtIDA9RC9BIG91dHB1dHMgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgICAgICAgIDE9RC9BIG91dHB1dHMgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorICAgICAgICAyPUQvQSBvdXRwdXRzIHVua25vdyAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorCitPcHRpb25zIGZvciBBQ0wtODExMkRHL0hHLCBBLTgyMlBHTC9QR0gsIEEtODIzUEdML1BHSCwgQUNMLTgyMTYsIEEtODI2UEc6CisgIFswXSAtIElPIEJhc2UKKyAgWzFdIC0gSVJRICAoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3OyAxMCwgMTEsIDEyLCAxNCwgMTUpCisgIFsyXSAtIERNQSAgKDA9ZGlzYWJsZSwgMSwgMykKKyAgWzNdIC0gMD10cmlnZ2VyIHNvdXJjZSBpcyBpbnRlcm5hbCA4MjUzIHdpdGggMk1IeiBjbG9jaworICAgICAgICAxPXRyaWdnZXIgc291cmNlIGlzIGV4dGVybmFsCisgIFs0XSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCisgICAgICAgIDE9QS9EIGNoYW5uZWxzIGFyZSBESUZGCisgIFs1XSAtIDA9RC9BIG91dHB1dHMgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgICAgICAgIDE9RC9BIG91dHB1dHMgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorICAgICAgICAyPUQvQSBvdXRwdXRzIHVua25vdyAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorCitPcHRpb25zIGZvciBBLTgyMVBHTC9QR0g6CisgIFswXSAtIElPIEJhc2UKKyAgWzFdIC0gSVJRICAoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3KQorICBbMl0gLSAwPUEvRCBjaGFubmVscyBhcmUgUy5FLgorICAgICAgICAxPUEvRCBjaGFubmVscyBhcmUgRElGRgorICBbM10gLSAwPUQvQSBvdXRwdXQgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgICAgICAgIDE9RC9BIG91dHB1dCAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCisKK09wdGlvbnMgZm9yIEEtODIxUEdMLU5EQToKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCisgICAgICAgIDE9QS9EIGNoYW5uZWxzIGFyZSBESUZGCisKK09wdGlvbnMgZm9yIFBDTC04MTM6CisgIFswXSAtIElPIEJhc2UKKworT3B0aW9ucyBmb3IgUENMLTgxM0I6CisgIFswXSAtIElPIEJhc2UKKyAgWzFdIC0gMD0gYmlwb2xhciBpbnB1dHMKKyAgICAgICAgMT0gdW5pcG9sYXIgaW5wdXRzCisKK09wdGlvbnMgZm9yIEFDTC04MTEzLCBJU08tODEzOgorICBbMF0gLSBJTyBCYXNlCisgIFsxXSAtIDA9IDEwViBiaXBvbGFyIGlucHV0cworICAgICAgICAxPSAxMFYgdW5pcG9sYXIgaW5wdXRzCisgICAgICAgIDI9IDIwViBiaXBvbGFyIGlucHV0cworICAgICAgICAzPSAyMFYgdW5pcG9sYXIgaW5wdXRzCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKworI3VuZGVmIFBDTDgxMl9FWFRERUJVRwkJLyogaWYgdGhpcyBpcyBkZWZpbmVkIHRoZW4gYSBsb3Qgb2YgbWVzc2FnZXMgaXMgcHJpbnRlZCAqLworCisvLyBoYXJkd2FyZSB0eXBlcyBvZiB0aGUgY2FyZHMKKyNkZWZpbmUgYm9hcmRQQ0w4MTJQRyAJCSAwCS8qIGFuZCBBQ0wtODExMlBHICovCisjZGVmaW5lIGJvYXJkUENMODEzQiAJCSAxCisjZGVmaW5lIGJvYXJkUENMODEyCQkgMgorI2RlZmluZSBib2FyZFBDTDgxMyAJCSAzCisjZGVmaW5lIGJvYXJkSVNPODEzIAkJIDUKKyNkZWZpbmUgYm9hcmRBQ0w4MTEzIAkJIDYKKyNkZWZpbmUgYm9hcmRBQ0w4MTEyIAkJIDcJLyogQUNMLTgxMTJERy9IRywgQS04MjJQR0wvUEdILCBBLTgyM1BHTC9QR0ggKi8KKyNkZWZpbmUgYm9hcmRBQ0w4MjE2CQkgOAkvKiBhbmQgSUNQIERBUyBBLTgyNlBHICovCisjZGVmaW5lIGJvYXJkQTgyMQkJIDkJLyogUEdILCBQR0wsIFBHTC9OREEgdmVyc2lvbnMgKi8KKworI2RlZmluZSBQQ0x4MXhfSU9SQU5HRSAJCTE2CisKKyNkZWZpbmUgUENMODEyX0NUUjAJCSAwCisjZGVmaW5lIFBDTDgxMl9DVFIxCQkgMQorI2RlZmluZSBQQ0w4MTJfQ1RSMgkJIDIKKyNkZWZpbmUgUENMODEyX0NUUkNUTAkJIDMKKyNkZWZpbmUgUENMODEyX0FEX0xPCQkgNAorI2RlZmluZSBQQ0w4MTJfREExX0xPCQkgNAorI2RlZmluZSBQQ0w4MTJfQURfSEkJCSA1CisjZGVmaW5lIFBDTDgxMl9EQTFfSEkJCSA1CisjZGVmaW5lIFBDTDgxMl9EQTJfTE8JCSA2CisjZGVmaW5lIFBDTDgxMl9ESV9MTwkJIDYKKyNkZWZpbmUgUENMODEyX0RBMl9ISQkJIDcKKyNkZWZpbmUgUENMODEyX0RJX0hJCQkgNworI2RlZmluZSBQQ0w4MTJfQ0xSSU5UCQkgOAorI2RlZmluZSBQQ0w4MTJfR0FJTgkJIDkKKyNkZWZpbmUgUENMODEyX01VWAkJMTAKKyNkZWZpbmUgUENMODEyX01PREUJCTExCisjZGVmaW5lIFBDTDgxMl9DTlRFTkFCTEUgCTEwCisjZGVmaW5lIFBDTDgxMl9TT0ZUVFJJRyAJMTIKKyNkZWZpbmUgUENMODEyX0RPX0xPCQkxMworI2RlZmluZSBQQ0w4MTJfRE9fSEkgCQkxNAorCisjZGVmaW5lIFBDTDgxMl9EUkRZIAkJMHgxMAkvKiA9MCBkYXRhIHJlYWR5ICovCisKKyNkZWZpbmUgQUNMODIxNl9TVEFUVVMgCQkgOAkvKiA1LiBiaXQgc2lnbmFsaXplIGRhdGEgcmVhZHkgKi8KKworI2RlZmluZSBBQ0w4MjE2X0RSRFkgCQkweDIwCS8qID0wIGRhdGEgcmVhZHkgKi8KKworI2RlZmluZSBNQVhfQ0hBTkxJU1RfTEVOCTI1NgkvKiBsZW5ndGggb2Ygc2NhbiBsaXN0ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MTJwZ19haSA9IHsgNSwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJQklQX1JBTkdFKDAuMzEyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MTJwZzJfYWkgPSB7IDUsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTgxMl9iaXBvbGFyMV8yNSA9IHsgMSwgeworCQkJQklQX1JBTkdFKDEuMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2U4MTJfYmlwb2xhcjBfNjI1ID0geyAxLCB7CisJCQlCSVBfUkFOR0UoMC42MjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2U4MTJfYmlwb2xhcjBfMzEyNSA9IHsgMSwgeworCQkJQklQX1JBTkdFKDAuMzEyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MTNiX2FpID0geyA0LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MTNiMl9haSA9IHsgNCwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfaXNvODEzXzFfYWkgPSB7IDUsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCUJJUF9SQU5HRSgwLjMxMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfaXNvODEzXzFfMl9haSA9IHsgNSwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCQkJVU5JX1JBTkdFKDAuNjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2lzbzgxM18yX2FpID0geyA0LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9pc284MTNfMl8yX2FpID0geyA0LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hY2w4MTEzXzFfYWkgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FjbDgxMTNfMV8yX2FpID0geyA0LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hY2w4MTEzXzJfYWkgPSB7IDMsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExM18yXzJfYWkgPSB7IDMsIHsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FjbDgxMTJkZ19haSA9IHsgOSwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FjbDgxMTJoZ19haSA9IHsgMTIsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDA1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAxKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2E4MjFwZ2hfYWkgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDA1KSwKKwl9Cit9OworCitzdGF0aWMgaW50IHBjbDgxMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2w4MTJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RydWN0IHBjbDgxMl9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOwkvLyBib2FyZCBuYW1lCisJaW50IGJvYXJkX3R5cGU7CQkvLyB0eXBlIG9mIHRoaXMgYm9hcmQKKwlpbnQgbl9haWNoYW47CQkvLyBudW0gb2YgQUkgY2hhbnMgaW4gUy5FLgorCWludCBuX2FpY2hhbl9kaWZmOwkvLyBESUZGIG51bSBvZiBjaGFucworCWludCBuX2FvY2hhbjsJCS8vIG51bSBvZiBEQSBjaGFucworCWludCBuX2RpY2hhbjsJCS8vIERJIGFuZCBETyBjaGFucworCWludCBuX2RvY2hhbjsKKwlpbnQgYWlfbWF4ZGF0YTsJCS8vIEFJIHJlc29sdXRpb24KKwl1bnNpZ25lZCBpbnQgYWlfbnNfbWluOwkvLyBtYXggc2FtcGxlIHNwZWVkIG9mIGNhcmQgdiBucworCXVuc2lnbmVkIGludCBpODI1NF9vc2NfYmFzZTsJLy8gY2xvY2sgYmFzZQorCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYWk7CS8vIHJhbmdlbGlzdCBmb3IgQS9ECisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9hbzsJLy8gcmFuZ2VsaXN0IGZvciBEL0EKKwl1bnNpZ25lZCBpbnQgSVJRYml0czsJLy8gYWxsb3dlZCBJUlEKKwl1bnNpZ25lZCBjaGFyIERNQWJpdHM7CS8vIGFsbG93ZWQgRE1BIGNoYW5zCisJdW5zaWduZWQgY2hhciBpb19yYW5nZTsJLy8gaW9yYW5nZSBmb3IgdGhpcyBib2FyZAorCXVuc2lnbmVkIGNoYXIgaGF2ZU1QQzUwODsJLy8gMT1ib2FyZCB1c2UgTVBDNTA4QSBtdWx0aXBsZXhvcgorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbDgxMl9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJwY2w4MTIiLCBib2FyZFBDTDgxMiwgMTYsIDAsIDIsIDE2LCAxNiwgMHgwZmZmLAorCQkJMzMwMDAsIDUwMCwgJnJhbmdlX2JpcG9sYXIxMCwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJwY2w4MTJwZyIsIGJvYXJkUENMODEyUEcsIDE2LCAwLCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTMzMDAwLCA1MDAsICZyYW5nZV9wY2w4MTJwZ19haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhY2w4MTEycGciLCBib2FyZFBDTDgxMlBHLCAxNiwgMCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfcGNsODEycGdfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsiYWNsODExMmRnIiwgYm9hcmRBQ0w4MTEyLCAxNiwgOCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfYWNsODExMmRnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAxfSwKKwl7ImFjbDgxMTJoZyIsIGJvYXJkQUNMODExMiwgMTYsIDgsIDIsIDE2LCAxNiwgMHgwZmZmLAorCQkJMTAwMDAsIDUwMCwgJnJhbmdlX2FjbDgxMTJoZ19haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMX0sCisJeyJhODIxcGdsIiwgYm9hcmRBODIxLCAxNiwgOCwgMSwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfcGNsODEzYl9haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHgwMDBjLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhODIxcGdsbmRhIiwgYm9hcmRBODIxLCAxNiwgOCwgMCwgMCwgMCwgMHgwZmZmLAorCQkJMTAwMDAsIDUwMCwgJnJhbmdlX3BjbDgxM2JfYWksIE5VTEwsCisJCTB4MDAwYywgMHgwMCwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsiYTgyMXBnaCIsIGJvYXJkQTgyMSwgMTYsIDgsIDEsIDE2LCAxNiwgMHgwZmZmLAorCQkJMTAwMDAsIDUwMCwgJnJhbmdlX2E4MjFwZ2hfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4MDAwYywgMHgwMCwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsiYTgyMnBnbCIsIGJvYXJkQUNMODExMiwgMTYsIDgsIDIsIDE2LCAxNiwgMHgwZmZmLAorCQkJMTAwMDAsIDUwMCwgJnJhbmdlX2FjbDgxMTJkZ19haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhODIycGdoIiwgYm9hcmRBQ0w4MTEyLCAxNiwgOCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfYWNsODExMmhnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImE4MjNwZ2wiLCBib2FyZEFDTDgxMTIsIDE2LCA4LCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTgwMDAsIDUwMCwgJnJhbmdlX2FjbDgxMTJkZ19haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhODIzcGdoIiwgYm9hcmRBQ0w4MTEyLCAxNiwgOCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQk4MDAwLCA1MDAsICZyYW5nZV9hY2w4MTEyaGdfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsicGNsODEzIiwgYm9hcmRQQ0w4MTMsIDMyLCAwLCAwLCAwLCAwLCAweDBmZmYsCisJCQkwLCAwLCAmcmFuZ2VfcGNsODEzYl9haSwgTlVMTCwKKwkJMHgwMDAwLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJwY2w4MTNiIiwgYm9hcmRQQ0w4MTNCLCAzMiwgMCwgMCwgMCwgMCwgMHgwZmZmLAorCQkJMCwgMCwgJnJhbmdlX3BjbDgxM2JfYWksIE5VTEwsCisJCTB4MDAwMCwgMHgwMCwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsiYWNsODExMyIsIGJvYXJkQUNMODExMywgMzIsIDAsIDAsIDAsIDAsIDB4MGZmZiwKKwkJCTAsIDAsICZyYW5nZV9hY2w4MTEzXzFfYWksIE5VTEwsCisJCTB4MDAwMCwgMHgwMCwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsiaXNvODEzIiwgYm9hcmRJU084MTMsIDMyLCAwLCAwLCAwLCAwLCAweDBmZmYsCisJCQkwLCAwLCAmcmFuZ2VfaXNvODEzXzFfYWksIE5VTEwsCisJCTB4MDAwMCwgMHgwMCwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsiYWNsODIxNiIsIGJvYXJkQUNMODIxNiwgMTYsIDgsIDIsIDE2LCAxNiwgMHhmZmZmLAorCQkJMTAwMDAsIDUwMCwgJnJhbmdlX3BjbDgxM2IyX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAxfSwKKwl7ImE4MjZwZyIsIGJvYXJkQUNMODIxNiwgMTYsIDgsIDIsIDE2LCAxNiwgMHhmZmZmLAorCQkJMTAwMDAsIDUwMCwgJnJhbmdlX3BjbDgxM2IyX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2w4MTJfYm9hcmQpKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbDgxMl9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDgxMiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w4MTIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDgxMl9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsODEyX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY2w4MTJfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w4MTIpOworCitzdHJ1Y3QgcGNsODEyX3ByaXZhdGUgeworCisJdW5zaWduZWQgY2hhciB2YWxpZDsJLy8gPTEgZGV2aWNlIGlzIE9LCisJdW5zaWduZWQgY2hhciBkbWE7CS8vID4wIHVzZSBkbWEgKCB1c2VkRE1BIGNoYW5uZWwpCisJdW5zaWduZWQgY2hhciB1c2VfZGlmZjsJLy8gPTEgZGlmZiBpbnB1dHMKKwl1bnNpZ25lZCBjaGFyIHVzZV9NUEM7CS8vIDE9Ym9hcmQgdXNlcyBNUEM1MDhBIG11bHRpcGxleG9yCisJdW5zaWduZWQgY2hhciB1c2VfZXh0X3RyZzsJLy8gMT1ib2FyZCB1c2VzIGV4dGVybmFsIHRyaWdnZXIKKwl1bnNpZ25lZCBjaGFyIHJhbmdlX2NvcnJlY3Rpb247CS8vID0xIHdlIG11c3QgYWRkIDEgdG8gcmFuZ2UgbnVtYmVyCisJdW5zaWduZWQgY2hhciBvbGRfY2hhbl9yZWc7CS8vIGxhc3RseSB1c2VkIGNoYW4vZ2FpbiBwYWlyCisJdW5zaWduZWQgY2hhciBvbGRfZ2Fpbl9yZWc7CisJdW5zaWduZWQgY2hhciBtb2RlX3JlZ19pbnQ7CS8vIHRoZXJlIGlzIHN0b3JlZCBJTlQgbnVtYmVyIGZvciBzb21lIGNhcmQKKwl1bnNpZ25lZCBjaGFyIGFpX25ldmVyZW5kaW5nOwkvLyA9MSB3ZSBkbyB1bmxpbWl0ZWQgQUkKKwl1bnNpZ25lZCBjaGFyIGFpX2VvczsJLy8gMT1FT1Mgd2FrZSB1cAorCXVuc2lnbmVkIGNoYXIgYWlfZG1hOwkvLyA9MSB3ZSB1c2UgRE1BCisJdW5zaWduZWQgaW50IGFpX3BvbGxfcHRyOwkvLyBob3cgbWFueSBzYW1wZXMgdHJhbnNmZXIgcG9sbAorCXVuc2lnbmVkIGludCBhaV9zY2FuczsJLy8gbGVuIG9mIHNjYW5saXN0CisJdW5zaWduZWQgaW50IGFpX2FjdF9zY2FuOwkvLyBob3cgbWFueSBzY2FucyB3ZSBmaW5pc2hlZAorCXVuc2lnbmVkIGludCBhaV9jaGFubGlzdFtNQVhfQ0hBTkxJU1RfTEVOXTsJLy8gb3VyIGNvcHkgb2YgY2hhbm5lbC9yYW5nZSBsaXN0CisJdW5zaWduZWQgaW50IGFpX25fY2hhbjsJLy8gaG93IG1hbnkgY2hhbm5lbHMgaXMgbWVhc3VyZWQKKwl1bnNpZ25lZCBpbnQgYWlfZmxhZ3M7CS8vIGZsYWdsaXN0CisJdW5zaWduZWQgaW50IGFpX2RhdGFfbGVuOwkvLyBsZW4gb2YgZGF0YSBidWZmZXIKKwlzaG9ydCAqYWlfZGF0YTsJLy8gZGF0YSBidWZmZXIKKwl1bnNpZ25lZCBpbnQgYWlfaXMxNmI7CS8vID0xIHdlIGhhdmUgMTYgYml0IGNhcmQKKwl1bnNpZ25lZCBsb25nIGRtYWJ1ZlsyXTsJLy8gUFRSIHRvIERNQSBidWYKKwl1bnNpZ25lZCBpbnQgZG1hcGFnZXNbMl07CS8vIGhvdyBtYW55IHBhZ2VzIHdlIGhhdmUgYWxsb2NhdGVkCisJdW5zaWduZWQgaW50IGh3ZG1hcHRyWzJdOwkvLyBIVyBQVFIgdG8gRE1BIGJ1ZgorCXVuc2lnbmVkIGludCBod2RtYXNpemVbMl07CS8vIERNQSBidWYgc2l6ZSBpbiBieXRlcworCXVuc2lnbmVkIGludCBkbWFieXRlc3RvbW92ZVsyXTsJLy8gaG93IG1hbnkgYnl0ZXMgRE1BIHRyYW5zZmVyCisJaW50IG5leHRfZG1hX2J1ZjsJLy8gd2hpY2ggYnVmZmVyIGlzIG5leHQgdG8gdXNlCisJdW5zaWduZWQgaW50IGRtYV9ydW5zX3RvX2VuZDsJLy8gaG93IG1hbnkgdGltZXMgd2UgbXVzdCBzd2l0Y2ggRE1BIGJ1ZmZlcnMKKwl1bnNpZ25lZCBpbnQgbGFzdF9kbWFfcnVuOwkvLyBob3cgbWFueSBieXRlcyB0byB0cmFuc2ZlciBvbiBsYXN0IERNQSBidWZmZXIKKwl1bnNpZ25lZCBpbnQgbWF4XzgxMl9haV9tb2RlMF9yYW5nZXdhaXQ7CS8vIHNldGxpbmcgdGltZSBmb3IgZ2FpbgorCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsJLy8gZGF0YSBmb3IgQU8gcmVhZGJhY2sKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbDgxMl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKTsKK3N0YXRpYyB2b2lkIHNldHVwX3JhbmdlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgcmFuZ2VjaGFuLCBjaGFyIHdhaXQpOworc3RhdGljIGludCBwY2w4MTJfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IHRpbWVvdXQsIGhpOworCisJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAxLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLyogc2VsZWN0IHNvZnR3YXJlIHRyaWdnZXIgKi8KKwlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMsIDEpOwkvLyBzZWxlY3QgY2hhbm5lbCBhbmQgcmVuZ2UKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dGIoMjU1LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9TT0ZUVFJJRyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJY29tZWRpX3VkZWxheSg1KTsKKwkJdGltZW91dCA9IDUwOwkvKiB3YWl0IG1heCA1MHVzLCBpdCBtdXN0IGZpbmlzaCB1bmRlciAzM3VzICovCisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWhpID0gaW5iKGRldi0+aW9iYXNlICsgUENMODEyX0FEX0hJKTsKKwkJCWlmICghKGhpICYgUENMODEyX0RSRFkpKQorCQkJCWdvdG8gY29udl9maW5pc2g7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCXJ0X3ByaW50aworCQkJKCJjb21lZGklZDogcGNsODEyOiAoJXMgYXQgMHglbHgpIEEvRCBpbnNuIHJlYWQgdGltZW91dFxuIiwKKwkJCWRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSwgZGV2LT5pb2Jhc2UpOworCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDAsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgY29udl9maW5pc2g6CisJCWRhdGFbbl0gPSAoKGhpICYgMHhmKSA8PCA4KSB8IGluYihkZXYtPmlvYmFzZSArIFBDTDgxMl9BRF9MTyk7CisJfQorCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IGFjbDgyMTZfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgdGltZW91dDsKKworCW91dGIoMSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CS8qIHNlbGVjdCBzb2Z0d2FyZSB0cmlnZ2VyICovCisJc2V0dXBfcmFuZ2VfY2hhbm5lbChkZXYsIHMsIGluc24tPmNoYW5zcGVjLCAxKTsJLy8gc2VsZWN0IGNoYW5uZWwgYW5kIHJlbmdlCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlvdXRiKDI1NSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfU09GVFRSSUcpOwkvKiBzdGFydCBjb252ZXJzaW9uICovCisJCWNvbWVkaV91ZGVsYXkoNSk7CisJCXRpbWVvdXQgPSA1MDsJLyogd2FpdCBtYXggNTB1cywgaXQgbXVzdCBmaW5pc2ggdW5kZXIgMzN1cyAqLworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBBQ0w4MjE2X1NUQVRVUykgJiBBQ0w4MjE2X0RSRFkpKQorCQkJCWdvdG8gY29udl9maW5pc2g7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCXJ0X3ByaW50aworCQkJKCJjb21lZGklZDogcGNsODEyOiAoJXMgYXQgMHglbHgpIEEvRCBpbnNuIHJlYWQgdGltZW91dFxuIiwKKwkJCWRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSwgZGV2LT5pb2Jhc2UpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgY29udl9maW5pc2g6CisJCWRhdGFbbl0gPQorCQkJKGluYihkZXYtPmlvYmFzZSArCisJCQkJUENMODEyX0FEX0hJKSA8PCA4KSB8IGluYihkZXYtPmlvYmFzZSArCisJCQlQQ0w4MTJfQURfTE8pOworCX0KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0YigoZGF0YVtpXSAmIDB4ZmYpLAorCQkJZGV2LT5pb2Jhc2UgKyAoY2hhbiA/IFBDTDgxMl9EQTJfTE8gOiBQQ0w4MTJfREExX0xPKSk7CisJCW91dGIoKGRhdGFbaV0gPj4gOCkgJiAweDBmLAorCQkJZGV2LT5pb2Jhc2UgKyAoY2hhbiA/IFBDTDgxMl9EQTJfSEkgOiBQQ0w4MTJfREExX0hJKSk7CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfRElfTE8pOworCWRhdGFbMV0gfD0gaW5iKGRldi0+aW9iYXNlICsgUENMODEyX0RJX0hJKSA8PCA4OworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfRE9fTE8pOworCQlvdXRiKChzLT5zdGF0ZSA+PiA4KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfRE9fSEkpOworCX0KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIHBjbDgxMl9jbWR0ZXN0X291dChpbnQgZSwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJcnRfcHJpbnRrKCJwY2w4MTIgZT0lZCBzdGFydHNyYz0leCBzY2Fuc3JjPSV4IGNvbnZzcmM9JXhcbiIsIGUsCisJCWNtZC0+c3RhcnRfc3JjLCBjbWQtPnNjYW5fYmVnaW5fc3JjLCBjbWQtPmNvbnZlcnRfc3JjKTsKKwlydF9wcmludGsoInBjbDgxMiBlPSVkIHN0YXJ0YXJnPSVkIHNjYW5hcmc9JWQgY29udmFyZz0lZFxuIiwgZSwKKwkJY21kLT5zdGFydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+Y29udmVydF9hcmcpOworCXJ0X3ByaW50aygicGNsODEyIGU9JWQgc3RvcHNyYz0leCBzY2FuZW5kPSV4XG4iLCBlLCBjbWQtPnN0b3Bfc3JjLAorCQljbWQtPnNjYW5fZW5kX3NyYyk7CisJcnRfcHJpbnRrKCJwY2w4MTIgZT0lZCBzdG9wYXJnPSVkIHNjYW5lbmRhcmc9JWQgY2hhbmxpc3RsZW49JWRcbiIsIGUsCisJCWNtZC0+c3RvcF9hcmcsIGNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7Cit9CisjZW5kaWYKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wLCBkaXZpc29yMSwgZGl2aXNvcjI7CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jbWR0ZXN0KC4uLilcbiIpOworCXBjbDgxMl9jbWR0ZXN0X291dCgtMSwgY21kKTsKKyNlbmRpZgorCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJaWYgKGRldnByaXYtPnVzZV9leHRfdHJnKSB7CisJCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19FWFQ7CisJfSBlbHNlIHsKKwkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSOworCX0KKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikgeworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCQlwY2w4MTJfY21kdGVzdF9vdXQoMSwgY21kKTsKKwkJcnRfcHJpbnRrCisJCQkoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jbWR0ZXN0KC4uLikgZXJyPSVkIHJldD0xXG4iLAorCQkJZXJyKTsKKyNlbmRpZgorCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XKSB7CisJCWNtZC0+c3RhcnRfc3JjID0gVFJJR19OT1c7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPSBUUklHX0ZPTExPVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGRldnByaXYtPnVzZV9leHRfdHJnKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKSB7CisJCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19FWFQ7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpIHsKKwkJCWNtZC0+Y29udmVydF9zcmMgPSBUUklHX1RJTUVSOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkgeworCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpCisJCWVycisrOworCisJaWYgKGVycikgeworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCQlwY2w4MTJfY21kdGVzdF9vdXQoMiwgY21kKTsKKwkJcnRfcHJpbnRrCisJCQkoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jbWR0ZXN0KC4uLikgZXJyPSVkIHJldD0yXG4iLAorCQkJZXJyKTsKKyNlbmRpZgorCQlyZXR1cm4gMjsKKwl9CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvKiBUUklHX0VYVCAqLworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiBNQVhfQ0hBTkxJU1RfTEVOKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikgeworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCQlwY2w4MTJfY21kdGVzdF9vdXQoMywgY21kKTsKKwkJcnRfcHJpbnRrCisJCQkoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jbWR0ZXN0KC4uLikgZXJyPSVkIHJldD0zXG4iLAorCQkJZXJyKTsKKyNlbmRpZgorCQlyZXR1cm4gMzsKKwl9CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIodGhpc19ib2FyZC0+aTgyNTRfb3NjX2Jhc2UsICZkaXZpc29yMSwKKwkJCSZkaXZpc29yMiwgJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXJ0X3ByaW50aworCQkJKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY21kdGVzdCguLi4pIGVycj0lZCByZXQ9NFxuIiwKKwkJCWVycik7CisjZW5kaWYKKwkJcmV0dXJuIDQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjEgPSAwLCBkaXZpc29yMiA9IDAsIGksIGRtYV9mbGFncywgYnl0ZXM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY21kKC4uLilcbiIpOworI2VuZGlmCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGV2cHJpdi0+dXNlX2V4dF90cmcpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IE1BWF9DSEFOTElTVF9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIodGhpc19ib2FyZC0+aTgyNTRfb3NjX2Jhc2UsCisJCQkmZGl2aXNvcjEsICZkaXZpc29yMiwgJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwl9CisKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCBwYWNlcgorCisJZGV2cHJpdi0+YWlfbl9jaGFuID0gY21kLT5jaGFubGlzdF9sZW47CisJbWVtY3B5KGRldnByaXYtPmFpX2NoYW5saXN0LCBjbWQtPmNoYW5saXN0LAorCQlzaXplb2YodW5zaWduZWQgaW50KSAqIGNtZC0+c2Nhbl9lbmRfYXJnKTsKKwlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3RbMF0sIDEpOwkvLyBzZWxlY3QgZmlyc3QgY2hhbm5lbCBhbmQgcmFuZ2UKKworCWlmIChkZXZwcml2LT5kbWEpIHsJLy8gY2hlY2sgaWYgd2UgY2FuIHVzZSBETUEgdHJhbnNmZXIKKwkJZGV2cHJpdi0+YWlfZG1hID0gMTsKKwkJZm9yIChpID0gMTsgaSA8IGRldnByaXYtPmFpX25fY2hhbjsgaSsrKQorCQkJaWYgKGRldnByaXYtPmFpX2NoYW5saXN0WzBdICE9IGRldnByaXYtPmFpX2NoYW5saXN0W2ldKSB7CisJCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsJLy8gd2UgY2Fubid0IHVzZSBETUEgOi0oCisJCQkJYnJlYWs7CisJCQl9CisJfSBlbHNlCisJCWRldnByaXYtPmFpX2RtYSA9IDA7CisKKwlkZXZwcml2LT5haV9mbGFncyA9IGNtZC0+ZmxhZ3M7CisJZGV2cHJpdi0+YWlfZGF0YV9sZW4gPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3o7CisJZGV2cHJpdi0+YWlfZGF0YSA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWY7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5haV9zY2FucyA9IDA7CisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMTsKKwl9CisKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CisJZGV2cHJpdi0+YWlfcG9sbF9wdHIgPSAwOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisKKwlpZiAoKGRldnByaXYtPmFpX2ZsYWdzICYgVFJJR19XQUtFX0VPUykpIHsJLy8gZG9uJ3Qgd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/CisJCWRldnByaXYtPmFpX2VvcyA9IDE7CisJCWlmIChkZXZwcml2LT5haV9uX2NoYW4gPT0gMSkKKwkJCWRldnByaXYtPmFpX2RtYSA9IDA7CS8vIERNQSBpcyB1c2VsZXNzIGZvciB0aGlzIHNpdHVhdGlvbgorCX0KKworCWlmIChkZXZwcml2LT5haV9kbWEpIHsKKwkJaWYgKGRldnByaXYtPmFpX2VvcykgewkvLyB3ZSB1c2UgRU9TLCBzbyBhZGFwdCBETUEgYnVmZmVyIHRvIG9uZSBzY2FuCisJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSA9CisJCQkJZGV2cHJpdi0+YWlfbl9jaGFuICogc2l6ZW9mKHNob3J0KTsKKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzFdID0KKwkJCQlkZXZwcml2LT5haV9uX2NoYW4gKiBzaXplb2Yoc2hvcnQpOworCQkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdOworCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0gPSBkZXZwcml2LT5od2RtYXNpemVbMV07CisJCQlpZiAoZGV2cHJpdi0+YWlfZGF0YV9sZW4gPCBkZXZwcml2LT5od2RtYXNpemVbMF0pCisJCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF0gPQorCQkJCQlkZXZwcml2LT5haV9kYXRhX2xlbjsKKwkJCWlmIChkZXZwcml2LT5haV9kYXRhX2xlbiA8IGRldnByaXYtPmh3ZG1hc2l6ZVsxXSkKKwkJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxXSA9CisJCQkJCWRldnByaXYtPmFpX2RhdGFfbGVuOworCQkJaWYgKGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSB7CisJCQkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJYnl0ZXMgPSBkZXZwcml2LT5haV9uX2NoYW4gKiBkZXZwcml2LT5haV9zY2FucyAqIHNpemVvZihzaG9ydCk7CS8vIGhvdyBtYW55IHNhbXBsZXMgd2UgbXVzdCB0cmFuc2Zlcj8KKwkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdOwkvLyBob3cgbWFueSBETUEgcGFnZXMgd2UgbXVzdCBmaWxsCisJCQkJZGV2cHJpdi0+bGFzdF9kbWFfcnVuID0gYnl0ZXMgJSBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXTsJLy9vbiBsYXN0IGRtYSB0cmFuc2ZlciBtdXN0IGJlIG1vdmVkCisJCQkJaWYgKGRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9PSAwKQorCQkJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSA9CisJCQkJCQlkZXZwcml2LT5sYXN0X2RtYV9ydW47CisJCQkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kLS07CisJCQl9CisJCX0KKwkJaWYgKGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID4gZGV2cHJpdi0+aHdkbWFzaXplWzBdKSB7CisJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKKwkJCWRldnByaXYtPmFpX2VvcyA9IDA7CisJCX0KKwkJaWYgKGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzFdID4gZGV2cHJpdi0+aHdkbWFzaXplWzFdKSB7CisJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxXSA9IGRldnByaXYtPmh3ZG1hc2l6ZVsxXTsKKwkJCWRldnByaXYtPmFpX2VvcyA9IDA7CisJCX0KKwkJZGV2cHJpdi0+bmV4dF9kbWFfYnVmID0gMDsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYSwgRE1BX01PREVfUkVBRCk7CisJCWRtYV9mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWEpOworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXB0clswXSk7CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSk7CisJCXJlbGVhc2VfZG1hX2xvY2soZG1hX2ZsYWdzKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCQlydF9wcmludGsKKwkJCSgicGNsODEyIEVEQkc6ICAgRE1BICVkIFBUUiAweCUweC8weCUweCBMRU4gJXUvJXUgRU9TICVkXG4iLAorCQkJZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXB0clswXSwKKwkJCWRldnByaXYtPmh3ZG1hcHRyWzFdLCBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSwKKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzFdLCBkZXZwcml2LT5haV9lb3MpOworI2VuZGlmCisJfQorCisJc3dpdGNoIChjbWQtPmNvbnZlcnRfc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlzdGFydF9wYWNlcihkZXYsIDEsIGRpdmlzb3IxLCBkaXZpc29yMik7CisJCWJyZWFrOworCX0KKworCWlmIChkZXZwcml2LT5haV9kbWEpIHsKKwkJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAyLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLy8gbGV0J3MgZ28hCisJfSBlbHNlIHsKKwkJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCA2LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLy8gbGV0J3MgZ28hCisJfQorCisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfYWlfY21kKC4uLilcbiIpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODEyX2FpX2ludChpbnQgaXJxLCB2b2lkICpkKQoreworCWNoYXIgZXJyID0gMTsKKwl1bnNpZ25lZCBpbnQgbWFzaywgdGltZW91dDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKwlzLT5hc3luYy0+ZXZlbnRzID0gMDsKKworCXRpbWVvdXQgPSA1MDsJCS8qIHdhaXQgbWF4IDUwdXMsIGl0IG11c3QgZmluaXNoIHVuZGVyIDMzdXMgKi8KKwlpZiAoZGV2cHJpdi0+YWlfaXMxNmIpIHsKKwkJbWFzayA9IDB4ZmZmZjsKKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgQUNMODIxNl9TVEFUVVMpICYgQUNMODIxNl9EUkRZKSkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJfSBlbHNlIHsKKwkJbWFzayA9IDB4MGZmZjsKKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgUENMODEyX0FEX0hJKSAmIFBDTDgxMl9EUkRZKSkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJfQorCisJaWYgKGVycikgeworCQlydF9wcmludGsKKwkJCSgiY29tZWRpJWQ6IHBjbDgxMjogKCVzIGF0IDB4JWx4KSBBL0QgY21kIElSUSB3aXRob3V0IERSRFkhXG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lLCBkZXYtPmlvYmFzZSk7CisJCXBjbDgxMl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLAorCQkoKGluYihkZXYtPmlvYmFzZSArIFBDTDgxMl9BRF9ISSkgPDwgOCkgfCBpbmIoZGV2LT5pb2Jhc2UgKworCQkJCVBDTDgxMl9BRF9MTykpICYgbWFzayk7CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisKKwlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID09IDApIHsJLyogb25lIHNjYW4gZG9uZSAqLworCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOworCQlpZiAoIShkZXZwcml2LT5haV9uZXZlcmVuZGluZykpCisJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCXBjbDgxMl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQl9CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgdHJhbnNmZXJfZnJvbV9kbWFfYnVmKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc2hvcnQgKiBwdHIsIHVuc2lnbmVkIGludCBidWZwdHIsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlzLT5hc3luYy0+ZXZlbnRzID0gMDsKKwlmb3IgKGkgPSBsZW47IGk7IGktLSkgeworCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgcHRyW2J1ZnB0cisrXSk7CS8vIGdldCBvbmUgc2FtcGxlCisKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOworCQkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKKwkJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCQlwY2w4MTJfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQl9CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3M7CisJaW50IGxlbiwgYnVmcHRyOworCXNob3J0ICpwdHI7CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBCR046IGludGVycnVwdF9wY2w4MTJfYWlfZG1hKC4uLilcbiIpOworI2VuZGlmCisJcHRyID0gKHNob3J0ICopIGRldnByaXYtPmRtYWJ1ZltkZXZwcml2LT5uZXh0X2RtYV9idWZdOworCWxlbiA9IChkZXZwcml2LT5kbWFieXRlc3RvbW92ZVtkZXZwcml2LT5uZXh0X2RtYV9idWZdID4+IDEpIC0KKwkJZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisKKwlkZXZwcml2LT5uZXh0X2RtYV9idWYgPSAxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYSwgRE1BX01PREVfUkVBRCk7CisJZG1hX2ZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXB0cltkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwlpZiAoZGV2cHJpdi0+YWlfZW9zKSB7CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLAorCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSk7CisJfSBlbHNlIHsKKwkJaWYgKGRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCkgeworCQkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsCisJCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSk7CisJCX0gZWxzZSB7CisJCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwgZGV2cHJpdi0+bGFzdF9kbWFfcnVuKTsKKwkJfQorCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQtLTsKKwl9CisJcmVsZWFzZV9kbWFfbG9jayhkbWFfZmxhZ3MpOworCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKworCWJ1ZnB0ciA9IGRldnByaXYtPmFpX3BvbGxfcHRyOworCWRldnByaXYtPmFpX3BvbGxfcHRyID0gMDsKKworCXRyYW5zZmVyX2Zyb21fZG1hX2J1ZihkZXYsIHMsIHB0ciwgYnVmcHRyLCBsZW4pOworCisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBpbnRlcnJ1cHRfcGNsODEyX2FpX2RtYSguLi4pXG4iKTsKKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODEyKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCWlmIChkZXZwcml2LT5haV9kbWEpIHsKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MTJfYWlfZG1hKGlycSwgZCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MTJfYWlfaW50KGlycSwgZCk7CisJfTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2FpX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0b3AxLCB0b3AyLCBpOworCisJaWYgKCFkZXZwcml2LT5haV9kbWEpCisJCXJldHVybiAwOwkvLyBwb2xsIGlzIHZhbGlkIG9ubHkgZm9yIERNQSB0cmFuc2ZlcgorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQl0b3AxID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmFpX2RtYSk7CS8vIHdoZXJlIGlzIG5vdyBETUEKKwkJdG9wMiA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5haV9kbWEpOworCQlpZiAodG9wMSA9PSB0b3AyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHRvcDEgIT0gdG9wMikgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0b3AxID0gZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMSAtIGRldnByaXYtPm5leHRfZG1hX2J1Zl0gLSB0b3AxOwkvLyB3aGVyZSBpcyBub3cgRE1BIGluIGJ1ZmZlcgorCXRvcDEgPj49IDE7CQkvLyBzYW1wbGUgcG9zaXRpb24KKwl0b3AyID0gdG9wMSAtIGRldnByaXYtPmFpX3BvbGxfcHRyOworCWlmICh0b3AyIDwgMSkgewkJLy8gbm8gbmV3IHNhbXBsZXMKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdHJhbnNmZXJfZnJvbV9kbWFfYnVmKGRldiwgcywKKwkJKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMSAtIGRldnByaXYtPm5leHRfZG1hX2J1Zl0sCisJCWRldnByaXYtPmFpX3BvbGxfcHRyLCB0b3AyKTsKKworCWRldnByaXYtPmFpX3BvbGxfcHRyID0gdG9wMTsJLy8gbmV3IGJ1ZmZlciBwb3NpdGlvbgorCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzLT5hc3luYy0+YnVmX3dyaXRlX2NvdW50IC0gcy0+YXN5bmMtPmJ1Zl9yZWFkX2NvdW50OworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgc2V0dXBfcmFuZ2VfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCByYW5nZWNoYW4sIGNoYXIgd2FpdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGNoYW5fcmVnID0gQ1JfQ0hBTihyYW5nZWNoYW4pOwkvLyBub3JtYWwgYm9hcmQKKwl1bnNpZ25lZCBjaGFyIGdhaW5fcmVnID0gQ1JfUkFOR0UocmFuZ2VjaGFuKSArIGRldnByaXYtPnJhbmdlX2NvcnJlY3Rpb247CS8vIGdhaW4gaW5kZXgKKworCWlmICgoY2hhbl9yZWcgPT0gZGV2cHJpdi0+b2xkX2NoYW5fcmVnKQorCQkmJiAoZ2Fpbl9yZWcgPT0gZGV2cHJpdi0+b2xkX2dhaW5fcmVnKSkKKwkJcmV0dXJuOwkJLy8gd2UgY2FuIHJldHVybiwgbm8gY2hhbmdlCisKKwlkZXZwcml2LT5vbGRfY2hhbl9yZWcgPSBjaGFuX3JlZzsKKwlkZXZwcml2LT5vbGRfZ2Fpbl9yZWcgPSBnYWluX3JlZzsKKworCWlmIChkZXZwcml2LT51c2VfTVBDKSB7CisJCWlmIChkZXZwcml2LT51c2VfZGlmZikgeworCQkJY2hhbl9yZWcgPSBjaGFuX3JlZyB8IDB4MzA7CS8vIERJRkYgaW5wdXRzCisJCX0gZWxzZSB7CisJCQlpZiAoY2hhbl9yZWcgJiAweDgwKSB7CisJCQkJY2hhbl9yZWcgPSBjaGFuX3JlZyB8IDB4MjA7CS8vIFNFIGlucHV0cyA4LTE1CisJCQl9IGVsc2UgeworCQkJCWNoYW5fcmVnID0gY2hhbl9yZWcgfCAweDEwOwkvLyBTRSBpbnB1dHMgMC03CisJCQl9CisJCX0KKwl9CisKKwlvdXRiKGNoYW5fcmVnLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NVVgpOwkvKiBzZWxlY3QgY2hhbm5lbCAqLworCW91dGIoZ2Fpbl9yZWcsIGRldi0+aW9iYXNlICsgUENMODEyX0dBSU4pOwkvKiBzZWxlY3QgZ2FpbiAqLworCisJaWYgKHdhaXQpIHsKKwkJY29tZWRpX3VkZWxheShkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCk7CS8vIFhYWCB0aGlzIGRlcGVuZHMgb24gc2VsZWN0ZWQgcmFuZ2UgYW5kIGNhbiBiZSB2ZXJ5IGxvbmcgZm9yIHNvbWUgaGlnaCBnYWluIHJhbmdlcyEKKwl9Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpCit7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBzdGFydF9wYWNlciglZCwldSwldSlcbiIsIG1vZGUsIGRpdmlzb3IxLAorCQlkaXZpc29yMik7CisjZW5kaWYKKwlvdXRiKDB4YjQsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUkNUTCk7CisJb3V0YigweDc0LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9DVFJDVEwpOworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwlpZiAobW9kZSA9PSAxKSB7CisJCW91dGIoZGl2aXNvcjIgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9DVFIyKTsKKwkJb3V0YigoZGl2aXNvcjIgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9DVFIyKTsKKwkJb3V0YihkaXZpc29yMSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUjEpOworCQlvdXRiKChkaXZpc29yMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUjEpOworCX0KKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHN0YXJ0X3BhY2VyKC4uLilcbiIpOworI2VuZGlmCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBmcmVlX3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJaWYgKGRldnByaXYtPmRtYWJ1ZlswXSkKKwkJCWZyZWVfcGFnZXMoZGV2cHJpdi0+ZG1hYnVmWzBdLCBkZXZwcml2LT5kbWFwYWdlc1swXSk7CisJCWlmIChkZXZwcml2LT5kbWFidWZbMV0pCisJCQlmcmVlX3BhZ2VzKGRldnByaXYtPmRtYWJ1ZlsxXSwgZGV2cHJpdi0+ZG1hcGFnZXNbMV0pOworCQlpZiAoZGV2cHJpdi0+ZG1hKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwl9CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOworI2VuZGlmCisJaWYgKGRldnByaXYtPmFpX2RtYSkKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLyogU3RvcCBBL0QgKi8KKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCA4MjU0CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEVORDogcGNsODEyX2FpX2NhbmNlbCguLi4pXG4iKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgcGNsODEyX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX3Jlc2V0KC4uLilcbiIpOworI2VuZGlmCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NVVgpOworCW91dGIoMCArIGRldnByaXYtPnJhbmdlX2NvcnJlY3Rpb24sIGRldi0+aW9iYXNlICsgUENMODEyX0dBSU4pOworCWRldnByaXYtPm9sZF9jaGFuX3JlZyA9IC0xOwkvLyBpbnZhbGlkYXRlIGNoYWluL2dhaW4gbWVtb3J5CisJZGV2cHJpdi0+b2xkX2dhaW5fcmVnID0gLTE7CisKKwlzd2l0Y2ggKHRoaXNfYm9hcmQtPmJvYXJkX3R5cGUpIHsKKwljYXNlIGJvYXJkUENMODEyUEc6CisJY2FzZSBib2FyZFBDTDgxMjoKKwljYXNlIGJvYXJkQUNMODExMjoKKwljYXNlIGJvYXJkQUNMODIxNjoKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9EQTJfTE8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0RBMl9ISSk7CisJY2FzZSBib2FyZEE4MjE6CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfREExX0xPKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9EQTFfSEkpOworCQlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCA4MjU0CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfRE9fSEkpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0RPX0xPKTsKKwkJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9DTFJJTlQpOworCQlicmVhazsKKwljYXNlIGJvYXJkUENMODEzQjoKKwljYXNlIGJvYXJkUENMODEzOgorCWNhc2UgYm9hcmRJU084MTM6CisJY2FzZSBib2FyZEFDTDgxMTM6CisJCWNvbWVkaV91ZGVsYXkoNSk7CisJCWJyZWFrOworCX0KKwljb21lZGlfdWRlbGF5KDUpOworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEVORDogcGNsODEyX3Jlc2V0KC4uLilcbiIpOworI2VuZGlmCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldCwgc3ViZGV2OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IGRtYTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBuX3N1YmRldmljZXM7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w4MTI6ICBib2FyZD0lcywgaW9wb3J0PTB4JTAzbHgiLCBkZXYtPm1pbm9yLAorCQl0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlLCAicGNsODEyIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNsODEyX3ByaXZhdGUpKSkgPCAwKSB7CisJCWZyZWVfcmVzb3VyY2VzKGRldik7CisJCXJldHVybiByZXQ7CS8qIENhbid0IGFsbG9jIG1lbSAqLworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKwlpcnEgPSAwOworCWlmICh0aGlzX2JvYXJkLT5JUlFiaXRzICE9IDApIHsJLyogYm9hcmQgc3VwcG9ydCBJUlEgKi8KKwkJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJCWlmIChpcnEpIHsJLyogd2Ugd2FudCB0byB1c2UgSVJRICovCisJCQlpZiAoKCgxIDw8IGlycSkgJiB0aGlzX2JvYXJkLT5JUlFiaXRzKSA9PSAwKSB7CisJCQkJcHJpbnRrKCIsIElSUSAldSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwgaXJxKTsKKwkJCQlpcnEgPSAwOwkvKiBCYWQgSVJRICovCisJCQl9IGVsc2UgeworCQkJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfcGNsODEyLCAwLAorCQkJCQkJInBjbDgxMiIsIGRldikpIHsKKwkJCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsIGlycSk7CisJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlkZXYtPmlycSA9IGlycTsKKworCWRtYSA9IDA7CisJZGV2cHJpdi0+ZG1hID0gZG1hOworCWlmICghZGV2LT5pcnEpCisJCWdvdG8gbm9fZG1hOwkvKiBpZiB3ZSBoYXZlbid0IElSUSwgd2UgY2FuJ3QgdXNlIERNQSAqLworCWlmICh0aGlzX2JvYXJkLT5ETUFiaXRzICE9IDApIHsJLyogYm9hcmQgc3VwcG9ydCBETUEgKi8KKwkJZG1hID0gaXQtPm9wdGlvbnNbMl07CisJCWlmICgoKDEgPDwgZG1hKSAmIHRoaXNfYm9hcmQtPkRNQWJpdHMpID09IDApIHsKKwkJCXByaW50aygiLCBETUEgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsIEZBSUwhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwkvKiBCYWQgRE1BICovCisJCX0KKwkJcmV0ID0gcmVxdWVzdF9kbWEoZG1hLCAicGNsODEyIik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BICV1LCBGQUlMIVxuIiwgZG1hKTsKKwkJCXJldHVybiAtRUJVU1k7CS8qIERNQSBpc24ndCBmcmVlICovCisJCX0KKwkJZGV2cHJpdi0+ZG1hID0gZG1hOworCQlwcmludGsoIiwgZG1hPSV1IiwgZG1hKTsKKwkJcGFnZXMgPSAxOwkvKiB3ZSB3YW50IDhLQiAqLworCQlkZXZwcml2LT5kbWFidWZbMF0gPSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZXMpOworCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlswXSkgeworCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7CisJCQkvKiBtYXliZSBleHBlcmltZW50IHdpdGggdHJ5X3RvX2ZyZWVfcGFnZXMoKSB3aWxsIGhlbHAgLi4uLiAqLworCQkJZnJlZV9yZXNvdXJjZXMoZGV2KTsKKwkJCXJldHVybiAtRUJVU1k7CS8qIG5vIGJ1ZmZlciA6LSggKi8KKwkJfQorCQlkZXZwcml2LT5kbWFwYWdlc1swXSA9IHBhZ2VzOworCQlkZXZwcml2LT5od2RtYXB0clswXSA9IHZpcnRfdG9fYnVzKCh2b2lkICopZGV2cHJpdi0+ZG1hYnVmWzBdKTsKKwkJZGV2cHJpdi0+aHdkbWFzaXplWzBdID0gUEFHRV9TSVpFICogKDEgPDwgcGFnZXMpOworCQlkZXZwcml2LT5kbWFidWZbMV0gPSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZXMpOworCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlsxXSkgeworCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7CisJCQlmcmVlX3Jlc291cmNlcyhkZXYpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlkZXZwcml2LT5kbWFwYWdlc1sxXSA9IHBhZ2VzOworCQlkZXZwcml2LT5od2RtYXB0clsxXSA9IHZpcnRfdG9fYnVzKCh2b2lkICopZGV2cHJpdi0+ZG1hYnVmWzFdKTsKKwkJZGV2cHJpdi0+aHdkbWFzaXplWzFdID0gUEFHRV9TSVpFICogKDEgPDwgcGFnZXMpOworCX0KKyAgICAgIG5vX2RtYToKKworCW5fc3ViZGV2aWNlcyA9IDA7CisJaWYgKHRoaXNfYm9hcmQtPm5fYWljaGFuID4gMCkKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuID4gMCkKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fZGljaGFuID4gMCkKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fZG9jaGFuID4gMCkKKwkJbl9zdWJkZXZpY2VzKys7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApIHsKKwkJZnJlZV9yZXNvdXJjZXMoZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzdWJkZXYgPSAwOworCisJLyogYW5hbG9nIGlucHV0ICovCisJaWYgKHRoaXNfYm9hcmQtPm5fYWljaGFuID4gMCkgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJc3dpdGNoICh0aGlzX2JvYXJkLT5ib2FyZF90eXBlKSB7CisJCWNhc2UgYm9hcmRBODIxOgorCQkJaWYgKGl0LT5vcHRpb25zWzJdID09IDEpIHsKKwkJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbl9kaWZmOworCQkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJCQlkZXZwcml2LT51c2VfZGlmZiA9IDE7CisJCQl9IGVsc2UgeworCQkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCQkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfR1JPVU5EOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgYm9hcmRBQ0w4MTEyOgorCQljYXNlIGJvYXJkQUNMODIxNjoKKwkJCWlmIChpdC0+b3B0aW9uc1s0XSA9PSAxKSB7CisJCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW5fZGlmZjsKKwkJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0RJRkY7CisJCQkJZGV2cHJpdi0+dXNlX2RpZmYgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0dST1VORDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0dST1VORDsKKwkJCWJyZWFrOworCQl9CisJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5haV9tYXhkYXRhOworCQlzLT5sZW5fY2hhbmxpc3QgPSBNQVhfQ0hBTkxJU1RfTEVOOworCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnJhbmdlbGlzdF9haTsKKwkJaWYgKHRoaXNfYm9hcmQtPmJvYXJkX3R5cGUgPT0gYm9hcmRBQ0w4MjE2KSB7CisJCQlzLT5pbnNuX3JlYWQgPSBhY2w4MjE2X2FpX2luc25fcmVhZDsKKwkJfSBlbHNlIHsKKwkJCXMtPmluc25fcmVhZCA9IHBjbDgxMl9haV9pbnNuX3JlYWQ7CisJCX0KKwkJZGV2cHJpdi0+dXNlX01QQyA9IHRoaXNfYm9hcmQtPmhhdmVNUEM1MDg7CisJCXMtPmNhbmNlbCA9IHBjbDgxMl9haV9jYW5jZWw7CisJCWlmIChkZXYtPmlycSkgeworCQkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOworCQkJcy0+ZG9fY21kdGVzdCA9IHBjbDgxMl9haV9jbWR0ZXN0OworCQkJcy0+ZG9fY21kID0gcGNsODEyX2FpX2NtZDsKKwkJCXMtPnBvbGwgPSBwY2w4MTJfYWlfcG9sbDsKKwkJfQorCQlzd2l0Y2ggKHRoaXNfYm9hcmQtPmJvYXJkX3R5cGUpIHsKKwkJY2FzZSBib2FyZFBDTDgxMlBHOgorCQkJaWYgKGl0LT5vcHRpb25zWzRdID09IDEpCisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcGNsODEycGcyX2FpOworCQkJYnJlYWs7CisJCWNhc2UgYm9hcmRQQ0w4MTI6CisJCQlzd2l0Y2ggKGl0LT5vcHRpb25zWzRdKSB7CisJCQljYXNlIDA6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIyXzU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U4MTJfYmlwb2xhcjFfMjU7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U4MTJfYmlwb2xhcjBfNjI1OworCQkJCWJyZWFrOworCQkJY2FzZSA1OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlODEyX2JpcG9sYXIwXzMxMjU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJCQlicmVhazsKKwkJCQlwcmludGsoIiwgaW5jb3JyZWN0IHJhbmdlIG51bWJlciAlZCwgY2hhbmdpbmcgdG8gMCAoKy8tMTBWKSIsIGl0LT5vcHRpb25zWzRdKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQkJYnJlYWs7CisJCWNhc2UgYm9hcmRQQ0w4MTNCOgorCQkJaWYgKGl0LT5vcHRpb25zWzFdID09IDEpCisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcGNsODEzYjJfYWk7CisJCQlicmVhazsKKwkJY2FzZSBib2FyZElTTzgxMzoKKwkJCXN3aXRjaCAoaXQtPm9wdGlvbnNbMV0pIHsKKwkJCWNhc2UgMDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9pc284MTNfMV9haTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9pc284MTNfMV8yX2FpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2lzbzgxM18yX2FpOworCQkJCWRldnByaXYtPnJhbmdlX2NvcnJlY3Rpb24gPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2lzbzgxM18yXzJfYWk7CisJCQkJZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2lzbzgxM18xX2FpOworCQkJCWJyZWFrOworCQkJCXByaW50aygiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCBjaGFuZ2luZyB0byAwICIsIGl0LT5vcHRpb25zWzFdKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIGJvYXJkQUNMODExMzoKKwkJCXN3aXRjaCAoaXQtPm9wdGlvbnNbMV0pIHsKKwkJCWNhc2UgMDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hY2w4MTEzXzFfYWk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYWNsODExM18xXzJfYWk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYWNsODExM18yX2FpOworCQkJCWRldnByaXYtPnJhbmdlX2NvcnJlY3Rpb24gPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FjbDgxMTNfMl8yX2FpOworCQkJCWRldnByaXYtPnJhbmdlX2NvcnJlY3Rpb24gPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hY2w4MTEzXzFfYWk7CisJCQkJYnJlYWs7CisJCQkJcHJpbnRrKCIsIGluY29ycmVjdCByYW5nZSBudW1iZXIgJWQsIGNoYW5naW5nIHRvIDAgIiwgaXQtPm9wdGlvbnNbMV0pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJc3ViZGV2Kys7CisJfQorCisJLyogYW5hbG9nIG91dHB1dCAqLworCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbiA+IDApIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmZmOworCQlzLT5sZW5fY2hhbmxpc3QgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnJhbmdlbGlzdF9hbzsKKwkJcy0+aW5zbl9yZWFkID0gcGNsODEyX2FvX2luc25fcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9IHBjbDgxMl9hb19pbnNuX3dyaXRlOworCQlzd2l0Y2ggKHRoaXNfYm9hcmQtPmJvYXJkX3R5cGUpIHsKKwkJY2FzZSBib2FyZEE4MjE6CisJCQlpZiAoaXQtPm9wdGlvbnNbM10gPT0gMSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQkJYnJlYWs7CisJCWNhc2UgYm9hcmRQQ0w4MTI6CisJCWNhc2UgYm9hcmRBQ0w4MTEyOgorCQljYXNlIGJvYXJkUENMODEyUEc6CisJCWNhc2UgYm9hcmRBQ0w4MjE2OgorCQkJaWYgKGl0LT5vcHRpb25zWzVdID09IDEpCisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5pcG9sYXIxMDsKKwkJCWlmIChpdC0+b3B0aW9uc1s1XSA9PSAyKQorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisJCQlicmVhazsKKwkJfQorCQlzdWJkZXYrKzsKKwl9CisKKwkvKiBkaWdpdGFsIGlucHV0ICovCisJaWYgKHRoaXNfYm9hcmQtPm5fZGljaGFuID4gMCkgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9kaWNoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gcGNsODEyX2RpX2luc25fYml0czsKKwkJc3ViZGV2Kys7CisJfQorCisJLyogZGlnaXRhbCBvdXRwdXQgKi8KKwlpZiAodGhpc19ib2FyZC0+bl9kb2NoYW4gPiAwKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2RvY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBwY2w4MTJfZG9faW5zbl9iaXRzOworCQlzdWJkZXYrKzsKKwl9CisKKwlzd2l0Y2ggKHRoaXNfYm9hcmQtPmJvYXJkX3R5cGUpIHsKKwljYXNlIGJvYXJkQUNMODIxNjoKKwkJZGV2cHJpdi0+YWlfaXMxNmIgPSAxOworCWNhc2UgYm9hcmRQQ0w4MTJQRzoKKwljYXNlIGJvYXJkUENMODEyOgorCWNhc2UgYm9hcmRBQ0w4MTEyOgorCQlkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCA9IDE7CisJCWlmIChpdC0+b3B0aW9uc1szXSA+IDApCisJCQlkZXZwcml2LT51c2VfZXh0X3RyZyA9IDE7CS8vIHdlIHVzZSBleHRlcm5hbCB0cmlnZ2VyCisJY2FzZSBib2FyZEE4MjE6CisJCWRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0ID0gMTsKKwkJZGV2cHJpdi0+bW9kZV9yZWdfaW50ID0gKGlycSA8PCA0KSAmIDB4ZjA7CisJCWJyZWFrOworCWNhc2UgYm9hcmRQQ0w4MTNCOgorCWNhc2UgYm9hcmRQQ0w4MTM6CisJY2FzZSBib2FyZElTTzgxMzoKKwljYXNlIGJvYXJkQUNMODExMzoKKwkJZGV2cHJpdi0+bWF4XzgxMl9haV9tb2RlMF9yYW5nZXdhaXQgPSA1OwkvKiBtYXliZSB0aGVyZSBtdXN0IGJ5IGdyZWF0ZXN0IHRpbWVvdXQgKi8KKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKCJcbiIpOworCWRldnByaXYtPnZhbGlkID0gMTsKKworCXBjbDgxMl9yZXNldChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIGludCBwY2w4MTJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJjb21lZGklZDogcGNsODEyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworI2VuZGlmCisJZnJlZV9yZXNvdXJjZXMoZGV2KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTViYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCkBAIC0wLDAgKzEsMTI1MSBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCisKKyAgIEF1dGhvcjogIEp1YW4gR3JpZ2VyYSA8anVhbkBncmlnZXJhLmNvbS5hcj4KKyAgICAgICAgICAgIGJhc2VkIG9uIHBjbDgxOCBieSBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4gYW5kIGJpdHMgb2YgcGNsODEyCisKKyAgIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmRzOgorICAgIGNhcmQ6ICAgUENMLTgxNiwgUENMODE0QgorICAgIGRyaXZlcjogcGNsODE2CisqLworLyoKK0RyaXZlcjogcGNsODE2CitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTC04MTYgY2FyZHMsIFBDTC04MTQKK0F1dGhvcjogSnVhbiBHcmlnZXJhIDxqdWFuQGdyaWdlcmEuY29tLmFyPgorRGV2aWNlczogW0FkdmFudGVjaF0gUENMLTgxNiAocGNsODE2KSwgUENMLTgxNEIgKHBjbDgxNGIpCitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiBUdWUsICAyIEFwciAyMDAyIDIzOjE1OjIxIC0wODAwCisKK1BDTCA4MTYgYW5kIDgxNEIgaGF2ZSAxNiBTRS9ESUZGIEFEQ3MsIDE2IERBQ3MsIDE2IERJIGFuZCAxNiBETy4KK0RpZmZlcmVuY2VzIGFyZSBhdCByZXNvbHV0aW9uICgxNiB2cyAxMiBiaXRzKS4KKworVGhlIGRyaXZlciBzdXBwb3J0IEFJIGNvbW1hbmQgbW9kZSwgb3RoZXIgc3ViZGV2aWNlcyBub3Qgd3JpdHRlbi4KKworQW5hbG9nIG91dHB1dCBhbmQgZGlnaXRhbCBpbnB1dCBhbmQgb3V0cHV0IGFyZSBub3Qgc3VwcG9ydGVkLgorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIElPIEJhc2UKKyAgWzFdIC0gSVJRCSgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgIFsyXSAtIERNQQkoMD1kaXNhYmxlLCAxLCAzKQorICBbM10gLSAwLCAxMD0xME1IeiBjbG9jayBmb3IgODI1NAorICAgICAgICAgICAgMT0gMU1IeiBjbG9jayBmb3IgODI1NAorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorCisjZGVmaW5lIERFQlVHKHgpIHgKKworLy8gYm9hcmRzIGNvbnN0YW50cworLy8gSU8gc3BhY2UgbGVuCisjZGVmaW5lIFBDTHgxeF9SQU5HRSAxNgorCisvLyNkZWZpbmUgb3V0Yih4LHkpICBwcmludGsoIk9VVEIoJXgsIDIwMCslZClcbiIsIHgseS0weDIwMCk7IG91dGIoeCx5KQorCisvLyBJTlRFTCA4MjU0IGNvdW50ZXJzCisjZGVmaW5lIFBDTDgxNl9DVFIwIDQKKyNkZWZpbmUgUENMODE2X0NUUjEgNQorI2RlZmluZSBQQ0w4MTZfQ1RSMiA2CisvLyBSOiBjb3VudGVyIHJlYWQtYmFjayByZWdpc3RlciBXOiBjb3VudGVyIGNvbnRyb2wKKyNkZWZpbmUgUENMODE2X0NUUkNUTCA3CisKKy8vIFI6IEEvRCBoaWdoIGJ5dGUgVzogQS9EIHJhbmdlIGNvbnRyb2wKKyNkZWZpbmUgUENMODE2X1JBTkdFIDkKKy8vIFc6IGNsZWFyIElOVCByZXF1ZXN0CisjZGVmaW5lIFBDTDgxNl9DTFJJTlQgMTAKKy8vIFI6IG5leHQgbXV4IHNjYW4gY2hhbm5lbCBXOiBtdXggc2NhbiBjaGFubmVsICYgcmFuZ2UgY29udHJvbCBwb2ludGVyCisjZGVmaW5lIFBDTDgxNl9NVVggMTEKKy8vIFIvVzogb3BlcmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIKKyNkZWZpbmUgUENMODE2X0NPTlRST0wgMTIKKworLy8gUjogcmV0dXJuIHN0YXR1cyBieXRlICBXOiBzZXQgRE1BL0lSUQorI2RlZmluZSBQQ0w4MTZfU1RBVFVTIDEzCisjZGVmaW5lIFBDTDgxNl9TVEFUVVNfRFJEWV9NQVNLIDB4ODAKKworLy8gUjogbG93IGJ5dGUgb2YgQS9EIFc6IHNvZnQgQS9EIHRyaWdnZXIKKyNkZWZpbmUgUENMODE2X0FEX0xPIDgKKy8vIFI6IGhpZ2ggYnl0ZSBvZiBBL0QgVzogQS9EIHJhbmdlIGNvbnRyb2wKKyNkZWZpbmUgUENMODE2X0FEX0hJIDkKKworLy8gdHlwZSBvZiBpbnRlcnJ1cHQgaGFuZGxlcgorI2RlZmluZSBJTlRfVFlQRV9BSTFfSU5UIDEKKyNkZWZpbmUgSU5UX1RZUEVfQUkxX0RNQSAyCisjZGVmaW5lIElOVF9UWVBFX0FJM19JTlQgNAorI2RlZmluZSBJTlRfVFlQRV9BSTNfRE1BIDUKKyNpZmRlZiB1bnVzZWQKKyNkZWZpbmUgSU5UX1RZUEVfQUkxX0RNQV9SVEMgOQorI2RlZmluZSBJTlRfVFlQRV9BSTNfRE1BX1JUQyAxMAorCisvLyBSVEMgc3R1ZmYuLi4KKyNkZWZpbmUgUlRDX0lSUSAJOAorI2RlZmluZSBSVENfSU9fRVhURU5UCTB4MTAKKyNlbmRpZgorCisjZGVmaW5lIE1BR0lDX0RNQV9XT1JEIDB4NWE1YQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNsODE2ID0geyA4LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0cnVjdCBwY2w4MTZfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gYm9hcmQgbmFtZQorCWludCBuX3JhbmdlczsJCS8vIGxlbiBvZiByYW5nZSBsaXN0CisJaW50IG5fYWljaGFuOwkJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZlcmVuY2lhbCBtb2RlCisJdW5zaWduZWQgaW50IGFpX25zX21pbjsJLy8gbWluaW1hbCBhbGxsb3dlZCBkZWxheSBiZXR3ZWVuIHNhbXBsZXMgKGluIG5zKQorCWludCBuX2FvY2hhbjsJCS8vIG51bSBvZiBEL0EgY2hhbnMKKwlpbnQgbl9kaWNoYW47CQkvLyBudW0gb2YgREkgY2hhbnMKKwlpbnQgbl9kb2NoYW47CQkvLyBudW0gb2YgRE8gY2hhbnMKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdHlwZTsJLy8gZGVmYXVsdCBBL0QgcmFuZ2VsaXN0CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX3R5cGU7CS8vIGRhZmF1bHQgRC9BIHJhbmdlbGlzdAorCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIElPIHNwYWNlCisJdW5zaWduZWQgaW50IElSUWJpdHM7CS8vIGFsbG93ZWQgaW50ZXJydXB0cworCXVuc2lnbmVkIGludCBETUFiaXRzOwkvLyBhbGxvd2VkIERNQSBjaGFucworCWludCBhaV9tYXhkYXRhOwkJLy8gbWF4ZGF0YSBmb3IgQS9ECisJaW50IGFvX21heGRhdGE7CQkvLyBtYXhkYXRhIGZvciBEL0EKKwlpbnQgYWlfY2hhbmxpc3Q7CS8vIGFsbG93ZWQgbGVuIG9mIGNoYW5uZWwgbGlzdCBBL0QKKwlpbnQgYW9fY2hhbmxpc3Q7CS8vIGFsbG93ZWQgbGVuIG9mIGNoYW5uZWwgbGlzdCBEL0EKKwlpbnQgaTgyNTRfb3NjX2Jhc2U7CS8vIDEvZnJlcXVlbmN5IG9mIG9uIGJvYXJkIG9zY2lsYXRvciBpbiBucworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbDgxNl9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJwY2w4MTYiLCA4LCAxNiwgMTAwMDAsIDEsIDE2LCAxNiwgJnJhbmdlX3BjbDgxNiwKKwkJCSZyYW5nZV9wY2w4MTYsIFBDTHgxeF9SQU5HRSwKKwkJCTB4MDBmYywJLy8gSVJRIG1hc2sKKwkJCTB4MGEsCS8vIERNQSBtYXNrCisJCQkweGZmZmYsCS8vIDE2LWJpdCBjYXJkCisJCQkweGZmZmYsCS8vIEQvQSBtYXhkYXRhCisJCQkxMDI0LAorCQkJMSwJLy8gYW8gY2hhbiBsaXN0CisJCTEwMH0sCisJeyJwY2w4MTRiIiwgOCwgMTYsIDEwMDAwLCAxLCAxNiwgMTYsICZyYW5nZV9wY2w4MTYsCisJCQkmcmFuZ2VfcGNsODE2LCBQQ0x4MXhfUkFOR0UsCisJCQkweDAwZmMsCisJCQkweDBhLAorCQkJMHgzZmZmLAkvKiAxNCBiaXQgY2FyZCAqLworCQkJMHgzZmZmLAorCQkJMTAyNCwKKwkJCTEsCisJCTEwMH0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgcGNsODE2X2JvYXJkKSkKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2w4MTZfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBwY2w4MTZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIGludCBwY2w4MTZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsODE2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKyNpZmRlZiB1bnVzZWQKK3N0YXRpYyBpbnQgUlRDX2xvY2sgPSAwOwkvKiBSVEMgbG9jayAqLworc3RhdGljIGludCBSVENfdGltZXJfbG9jayA9IDA7CS8qIFJUQyBpbnQgbG9jayAqLworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNsODE2ID0geworICAgICAgZHJpdmVyX25hbWU6InBjbDgxNiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNsODE2X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2w4MTZfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbDgxNl9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDgxNik7CisKK3N0cnVjdCBwY2w4MTZfcHJpdmF0ZSB7CisKKwl1bnNpZ25lZCBpbnQgZG1hOwkvLyB1c2VkIERNQSwgMD1kb24ndCB1c2UgRE1BCisJaW50IGRtYV9ydGM7CQkvLyAxPVJUQyB1c2VkIHdpdGggRE1BLCAwPW5vIFJUQyBhbGxvYworI2lmZGVmIHVudXNlZAorCXVuc2lnbmVkIGxvbmcgcnRjX2lvYmFzZTsJLy8gUlRDIHBvcnQgcmVnaW9uCisJdW5zaWduZWQgaW50IHJ0Y19pb3NpemU7CisJdW5zaWduZWQgaW50IHJ0Y19pcnE7CisjZW5kaWYKKwl1bnNpZ25lZCBsb25nIGRtYWJ1ZlsyXTsJLy8gcG9pbnRlcnMgdG8gYmVnaW4gb2YgRE1BIGJ1ZmZlcnMKKwl1bnNpZ25lZCBpbnQgZG1hcGFnZXNbMl07CS8vIGxlbiBvZiBETUEgYnVmZmVycyBpbiBQQUdFX1NJWkVzCisJdW5zaWduZWQgaW50IGh3ZG1hcHRyWzJdOwkvLyBoYXJkd2FyZSBhZGRyZXNzIG9mIERNQSBidWZmZXJzCisJdW5zaWduZWQgaW50IGh3ZG1hc2l6ZVsyXTsJLy8gbGVuIG9mIERNQSBidWZmZXJzIGluIEJ5dGVzCisJdW5zaWduZWQgaW50IGRtYXNhbXBsc2l6ZTsJLy8gc2l6ZSBpbiBzYW1wbGVzIGh3ZG1hc2l6ZVswXS8yCisJdW5zaWduZWQgaW50IGxhc3RfdG9wX2RtYTsJLy8gRE1BIHBvaW50ZXIgaW4gbGFzdCBSVEMgaW50CisJaW50IG5leHRfZG1hX2J1ZjsJLy8gd2hpY2ggRE1BIGJ1ZmZlciB3aWxsIGJlIHVzZWQgbmV4dCByb3VuZAorCWxvbmcgZG1hX3J1bnNfdG9fZW5kOwkvLyBob3cgbWFueSB3ZSBtdXN0IHBlcm1vcm0gRE1BIHRyYW5zZmVyIHRvIGVuZCBvZiByZWNvcmQKKwl1bnNpZ25lZCBsb25nIGxhc3RfZG1hX3J1bjsJLy8gaG93IG1hbnkgYnl0ZXMgd2UgbXVzdCB0cmFuc2ZlciBvbiBsYXN0IERNQSBwYWdlCisKKwl1bnNpZ25lZCBpbnQgYWlfc2NhbnM7CS8vIGxlbiBvZiBzY2FubGlzdAorCXVuc2lnbmVkIGNoYXIgYWlfbmV2ZXJlbmRpbmc7CS8vIGlmPTEsIHRoZW4gd2UgZG8gbmV2ZXJlbmRpbmcgcmVjb3JkICh5b3UgbXVzdCB1c2UgY2FuY2VsKCkpCisJaW50IGlycV9mcmVlOwkJLy8gMT1oYXZlIGFsbG9jYXRlZCBJUlEKKwlpbnQgaXJxX2Jsb2NrZWQ7CS8vIDE9SVJRIG5vdyB1c2VzIGFueSBzdWJkZXYKKyNpZmRlZiB1bnVzZWQKKwlpbnQgcnRjX2lycV9ibG9ja2VkOwkvLyAxPXdlIG5vdyBkbyBBSSB3aXRoIERNQSZSVEMKKyNlbmRpZgorCWludCBpcnFfd2FzX25vd19jbG9zZWQ7CS8vIHdoZW4gSVJRIGZpbmlzaCwgdGhlcmUncyBzdG9yZWQgaW50ODE2X21vZGUgZm9yIGxhc3QgaW50ZXJydXB0CisJaW50IGludDgxNl9tb2RlOwkvLyB3aG8gbm93IHVzZXMgSVJRIC0gMT1BSTEgaW50LCAyPUFJMSBkbWEsIDM9QUkzIGludCwgNEFJMyBkbWEKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqbGFzdF9pbnRfc3ViOwkvLyBwdHIgdG8gc3ViZGV2aWNlIHdoaWNoIG5vdyBmaW5pc2gKKwlpbnQgYWlfYWN0X3NjYW47CS8vIGhvdyBtYW55IHNjYW5zIHdlIGZpbmlzaGVkCisJdW5zaWduZWQgaW50IGFpX2FjdF9jaGFubGlzdFsxNl07CS8vIE1VWCBzZXR0aW5nIGZvciBhY3R1YWwgQUkgb3BlcmF0aW9ucworCXVuc2lnbmVkIGludCBhaV9hY3RfY2hhbmxpc3RfbGVuOwkvLyBob3cgbG9uZyBpcyBhY3R1YWwgTVVYIGxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfYWN0X2NoYW5saXN0X3BvczsJLy8gYWN0dWFsIHBvc2l0aW9uIGluIE1VWCBsaXN0CisJdW5zaWduZWQgaW50IGFpX3BvbGxfcHRyOwkvLyBob3cgbWFueSBzYW1wZXMgdHJhbnNmZXIgcG9sbAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJfYWk7CS8vIHB0ciB0byBBSSBzdWJkZXZpY2UKKyNpZmRlZiB1bnVzZWQKKwlzdHJ1Y3QgdGltZXJfbGlzdCBydGNfaXJxX3RpbWVyOwkvLyB0aW1lciBmb3IgUlRDIHNhbml0eSBjaGVjaworCXVuc2lnbmVkIGxvbmcgcnRjX2ZyZXE7CS8vIFJUQyBpbnQgZnJlcQorI2VuZGlmCit9OworCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IGNoZWNrX2FuZF9zZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBpbnQgY2hhbmxlbik7CitzdGF0aWMgaW50IHBjbDgxNl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpOworI2lmZGVmIHVudXNlZAorc3RhdGljIGludCBzZXRfcnRjX2lycV9iaXQodW5zaWduZWQgY2hhciBiaXQpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IHBjbDgxNl9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBJTlBVVCBNT0RFMCwgODE2IGNhcmRzLCBzbG93IHZlcnNpb24KKyovCitzdGF0aWMgaW50IHBjbDgxNl9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCB0aW1lb3V0OworCisJRFBSSU5USygibW9kZSAwIGFuYWxvZyBpbnB1dFxuIik7CisJLy8gc29mdHdhcmUgdHJpZ2dlciwgRE1BIGFuZCBJTlQgb2ZmCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsKKwkvLyBjbGVhciBJTlQgKGNvbnZlcnNpb24gZW5kKSBmbGFnCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOworCisJLy8gU2V0IHRoZSBpbnB1dCBjaGFubmVsCisJb3V0YihDUl9DSEFOKGluc24tPmNoYW5zcGVjKSAmIDB4ZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKKwlvdXRiKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwkvKiBzZWxlY3QgZ2FpbiAqLworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfTE8pOwkvKiBzdGFydCBjb252ZXJzaW9uICovCisKKwkJdGltZW91dCA9IDEwMDsKKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUykgJgorCQkJCQlQQ0w4MTZfU1RBVFVTX0RSRFlfTUFTSykpIHsKKwkJCQkvLyByZXR1cm4gcmVhZCB2YWx1ZQorCQkJCWRhdGFbbl0gPQorCQkJCQkoKGluYihkZXYtPmlvYmFzZSArCisJCQkJCQkJUENMODE2X0FEX0hJKSA8PCA4KSB8CisJCQkJCShpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfTE8pKSk7CisKKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CS8qIGNsZWFyIElOVCAoY29udmVyc2lvbiBlbmQpIGZsYWcgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJLy8gUmV0dXJuIHRpbWVvdXQgZXJyb3IKKwkJaWYgKCF0aW1lb3V0KSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIGluc24gdGltZW91dFxuIik7CisJCQlkYXRhWzBdID0gMDsKKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCX0KKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGludGVycnVwdCBtb2RlIDEgJiAzLCA4MTggY2FyZHMKKyAgIG9uZSBzYW1wbGUgcGVyIGludGVycnVwdCB2ZXJzaW9uCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MTZfYWlfbW9kZTEzX2ludChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpbnQgbG93LCBoaTsKKwlpbnQgdGltZW91dCA9IDUwOwkvKiB3YWl0IG1heCA1MHVzICovCisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCWlmICghKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9TVEFUVVMpICYKKwkJCQlQQ0w4MTZfU1RBVFVTX0RSRFlfTUFTSykpCisJCQlicmVhazsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwl9CisJaWYgKCF0aW1lb3V0KSB7CQkvLyB0aW1lb3V0LCBiYWlsIGVycm9yCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBtb2RlMS8zIElSUSB3aXRob3V0IERSRFkhIik7CisJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJfQorCisJLy8gZ2V0IHRoZSBzYW1wbGUKKwlsb3cgPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfTE8pOworCWhpID0gaW5iKGRldi0+aW9iYXNlICsgUENMODE2X0FEX0hJKTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAoaGkgPDwgOCkgfCBsb3cpOworCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCisJaWYgKCsrZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X3BvcyA+PSBkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfbGVuKQorCQlkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfcG9zID0gMDsKKworCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOworCX0KKworCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpCisJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQlwY2w4MTZfYWlfY2FuY2VsKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIGFuYWxvZyBpbnB1dCBkbWEgbW9kZSAxICYgMywgODE2IGNhcmRzCisqLworc3RhdGljIHZvaWQgdHJhbnNmZXJfZnJvbV9kbWFfYnVmKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc2hvcnQgKiBwdHIsIHVuc2lnbmVkIGludCBidWZwdHIsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGk7CisKKwlzLT5hc3luYy0+ZXZlbnRzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsKKworCQlpZiAoKytkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfcG9zID49CisJCQlkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfbGVuKSB7CisJCQlkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfcG9zID0gMDsKKwkJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCX0KKworCQlpZiAoIWRldnByaXYtPmFpX25ldmVyZW5kaW5nKQorCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7CS8vIGFsbCBkYXRhIHNhbXBsZWQKKwkJCQlwY2w4MTZfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCQkJCWJyZWFrOworCQkJfQorCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxNl9haV9tb2RlMTNfZG1hKGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBsZW4sIGJ1ZnB0ciwgdGhpc19kbWFfYnVmOworCXVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzOworCXNob3J0ICpwdHI7CisKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOworCXRoaXNfZG1hX2J1ZiA9IGRldnByaXYtPm5leHRfZG1hX2J1ZjsKKworCWlmICgoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID4gLTEpIHx8IGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSB7CS8vIHN3aXRjaCBkbWEgYnVmcworCisJCWRldnByaXYtPm5leHRfZG1hX2J1ZiA9IDEgLSBkZXZwcml2LT5uZXh0X2RtYV9idWY7CisJCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWEsIERNQV9NT0RFX1JFQUQpOworCQlkbWFfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworLy8gIGNsZWFyX2RtYV9mZiAoZGV2cHJpdi0+ZG1hKTsKKwkJc2V0X2RtYV9hZGRyKGRldnByaXYtPmRtYSwKKwkJCWRldnByaXYtPmh3ZG1hcHRyW2RldnByaXYtPm5leHRfZG1hX2J1Zl0pOworCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kKSB7CisJCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwKKwkJCQlkZXZwcml2LT5od2RtYXNpemVbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSk7CisJCX0gZWxzZSB7CisJCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwgZGV2cHJpdi0+bGFzdF9kbWFfcnVuKTsKKwkJfQorCQlyZWxlYXNlX2RtYV9sb2NrKGRtYV9mbGFncyk7CisJCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwl9CisKKwlkZXZwcml2LT5kbWFfcnVuc190b19lbmQtLTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisKKwlwdHIgPSAoc2hvcnQgKikgZGV2cHJpdi0+ZG1hYnVmW3RoaXNfZG1hX2J1Zl07CisKKwlsZW4gPSAoZGV2cHJpdi0+aHdkbWFzaXplWzBdID4+IDEpIC0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisJYnVmcHRyID0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisJZGV2cHJpdi0+YWlfcG9sbF9wdHIgPSAwOworCisJdHJhbnNmZXJfZnJvbV9kbWFfYnVmKGRldiwgcywgcHRyLCBidWZwdHIsIGxlbik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgSU5UIHByb2NlZHVyZQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODE2KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJRFBSSU5USygiPEk+Iik7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInByZW1hdHVyZSBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXN3aXRjaCAoZGV2cHJpdi0+aW50ODE2X21vZGUpIHsKKwljYXNlIElOVF9UWVBFX0FJMV9ETUE6CisJY2FzZSBJTlRfVFlQRV9BSTNfRE1BOgorCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxNl9haV9tb2RlMTNfZG1hKGlycSwgZCk7CisJY2FzZSBJTlRfVFlQRV9BSTFfSU5UOgorCWNhc2UgSU5UX1RZUEVfQUkzX0lOVDoKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MTZfYWlfbW9kZTEzX2ludChpcnEsIGQpOworCX0KKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwlpZiAoKCFkZXYtPmlycSkgfCAoIWRldnByaXYtPmlycV9mcmVlKSB8ICghZGV2cHJpdi0+aXJxX2Jsb2NrZWQpIHwKKwkJKCFkZXZwcml2LT5pbnQ4MTZfbW9kZSkpIHsKKwkJaWYgKGRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCkgeworCQkJZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkID0gMDsKKwkJCS8vIGNvbWVkaV9lcnJvcihkZXYsImxhc3QgSVJRLi4iKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCQljb21lZGlfZXJyb3IoZGV2LCAiYmFkIElSUSEiKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwljb21lZGlfZXJyb3IoZGV2LCAiSVJRIGZyb20gdW5rbm93IHNvdXJjZSEiKTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIENPTU1BTkQgTU9ERQorKi8KK3N0YXRpYyB2b2lkIHBjbDgxNl9jbWR0ZXN0X291dChpbnQgZSwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJcnRfcHJpbnRrKCJwY2w4MTYgZT0lZCBzdGFydHNyYz0leCBzY2Fuc3JjPSV4IGNvbnZzcmM9JXhcbiIsIGUsCisJCWNtZC0+c3RhcnRfc3JjLCBjbWQtPnNjYW5fYmVnaW5fc3JjLCBjbWQtPmNvbnZlcnRfc3JjKTsKKwlydF9wcmludGsoInBjbDgxNiBlPSVkIHN0YXJ0YXJnPSVkIHNjYW5hcmc9JWQgY29udmFyZz0lZFxuIiwgZSwKKwkJY21kLT5zdGFydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+Y29udmVydF9hcmcpOworCXJ0X3ByaW50aygicGNsODE2IGU9JWQgc3RvcHNyYz0leCBzY2FuZW5kPSV4XG4iLCBlLCBjbWQtPnN0b3Bfc3JjLAorCQljbWQtPnNjYW5fZW5kX3NyYyk7CisJcnRfcHJpbnRrKCJwY2w4MTYgZT0lZCBzdG9wYXJnPSVkIHNjYW5lbmRhcmc9JWQgY2hhbmxpc3RsZW49JWRcbiIsIGUsCisJCWNtZC0+c3RvcF9hcmcsIGNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxNl9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcCwgZGl2aXNvcjEsIGRpdmlzb3IyOworCisJREVCVUcocnRfcHJpbnRrKCJwY2w4MTYgcGNsODEyX2FpX2NtZHRlc3RcbiIpOworCQlwY2w4MTZfY21kdGVzdF9vdXQoLTEsIGNtZCk7KTsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgJiAoVFJJR19FWFQgfCBUUklHX1RJTUVSKSkKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiAxOworCX0KKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpIHsKKwkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpIHsKKwkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiAyOworCX0KKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19FWFQgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gdGhpc19ib2FyZC0+bl9haWNoYW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiAzOworCX0KKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIodGhpc19ib2FyZC0+aTgyNTRfb3NjX2Jhc2UsCisJCQkmZGl2aXNvcjEsICZkaXZpc29yMiwgJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiA0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDgxNl9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjEgPSAwLCBkaXZpc29yMiA9IDAsIGRtYV9mbGFncywgYnl0ZXMsIGRtYWlycTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKy8vICAgICAgaWYoY21kLT5jaGFubGlzdF9sZW4+TUFYX0NIQU5MSVNUX0xFTikgcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRldnByaXYtPmlycV9ibG9ja2VkKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcih0aGlzX2JvYXJkLT5pODI1NF9vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoZGl2aXNvcjEgPT0gMSkgewkvLyBQQ0w4MTYgY3Jhc2ggaWYgYW55IGRpdmlzb3IgaXMgc2V0IHRvIDEKKwkJCWRpdmlzb3IxID0gMjsKKwkJCWRpdmlzb3IyIC89IDI7CisJCX0KKwkJaWYgKGRpdmlzb3IyID09IDEpIHsKKwkJCWRpdmlzb3IyID0gMjsKKwkJCWRpdmlzb3IxIC89IDI7CisJCX0KKwl9CisKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCBwYWNlcgorCisJaWYgKCFjaGVja19hbmRfc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgY21kLT5jaGFubGlzdCwKKwkJCWNtZC0+Y2hhbmxpc3RfbGVuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY29tZWRpX3VkZWxheSgxKTsKKworCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOworCWRldnByaXYtPmlycV9ibG9ja2VkID0gMTsKKwlkZXZwcml2LT5haV9wb2xsX3B0ciA9IDA7CisJZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkID0gMDsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+YWlfc2NhbnMgPSBjbWQtPnN0b3BfYXJnOworCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZyA9IDA7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+YWlfc2NhbnMgPSAwOworCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZyA9IDE7CisJfQorCisJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykpIHsJLy8gZG9uJ3Qgd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/CisJCXByaW50aygicGw4MTY6IFlvdSB3YW5rdCBXQUtFX0VPUyBidXQgSSBkb250IHdhbnQgaGFuZGxlIGl0Iik7CisJCS8vICAgICAgICAgICAgICBkZXZwcml2LT5haV9lb3M9MTsKKwkJLy9pZiAoZGV2cHJpdi0+YWlfbl9jaGFuPT0xKQorCQkvLyAgICAgIGRldnByaXYtPmRtYT0wOyAvLyBETUEgaXMgdXNlbGVzcyBmb3IgdGhpcyBzaXR1YXRpb24KKwl9CisKKwlpZiAoZGV2cHJpdi0+ZG1hKSB7CisJCWJ5dGVzID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdOworCQlpZiAoIWRldnByaXYtPmFpX25ldmVyZW5kaW5nKSB7CisJCQlieXRlcyA9IHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuICogcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gKiBzaXplb2Yoc2hvcnQpOwkvLyBob3cgbWFueQorCQkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gYnl0ZXMgLyBkZXZwcml2LT5od2RtYXNpemVbMF07CS8vIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwKKwkJCWRldnByaXYtPmxhc3RfZG1hX3J1biA9IGJ5dGVzICUgZGV2cHJpdi0+aHdkbWFzaXplWzBdOwkvL29uIGxhc3QgZG1hIHRyYW5zZmVyIG11c3QgYmUgbW92ZWQKKwkJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZC0tOworCQkJaWYgKGRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA+PSAwKQorCQkJCWJ5dGVzID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdOworCQl9IGVsc2UKKwkJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9IC0xOworCisJCWRldnByaXYtPm5leHRfZG1hX2J1ZiA9IDA7CisJCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWEsIERNQV9NT0RFX1JFQUQpOworCQlkbWFfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCQljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hKTsKKwkJc2V0X2RtYV9hZGRyKGRldnByaXYtPmRtYSwgZGV2cHJpdi0+aHdkbWFwdHJbMF0pOworCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwgYnl0ZXMpOworCQlyZWxlYXNlX2RtYV9sb2NrKGRtYV9mbGFncyk7CisJCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwl9CisKKwlzdGFydF9wYWNlcihkZXYsIDEsIGRpdmlzb3IxLCBkaXZpc29yMik7CisJZG1haXJxID0gKChkZXZwcml2LT5kbWEgJiAweDMpIDw8IDQpIHwgKGRldi0+aXJxICYgMHg3KTsKKworCXN3aXRjaCAoY21kLT5jb252ZXJ0X3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJZGV2cHJpdi0+aW50ODE2X21vZGUgPSBJTlRfVFlQRV9BSTFfRE1BOworCQlvdXRiKDB4MzIsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvLyBQYWNlcitJUlErRE1BCisJCW91dGIoZG1haXJxLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9TVEFUVVMpOwkvLyB3cml0ZSBpcnEgYW5kIERNQSB0byBjYXJkCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2cHJpdi0+aW50ODE2X21vZGUgPSBJTlRfVFlQRV9BSTNfRE1BOworCQlvdXRiKDB4MzQsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvLyBFeHQgdHJpZytJUlErRE1BCisJCW91dGIoZG1haXJxLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9TVEFUVVMpOwkvLyB3cml0ZSBpcnEgdG8gY2FyZAorCQlicmVhazsKKwl9CisKKwlEUFJJTlRLKCJwY2w4MTYgRU5EOiBwY2w4MTJfYWlfY21kKClcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDgxNl9haV9wb2xsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdG9wMSwgdG9wMiwgaTsKKworCWlmICghZGV2cHJpdi0+ZG1hKQorCQlyZXR1cm4gMDsJLy8gcG9sbCBpcyB2YWxpZCBvbmx5IGZvciBETUEgdHJhbnNmZXIKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJdG9wMSA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWEpOwkvLyB3aGVyZSBpcyBub3cgRE1BCisJCXRvcDIgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+ZG1hKTsKKwkJaWYgKHRvcDEgPT0gdG9wMikKKwkJCWJyZWFrOworCX0KKwlpZiAodG9wMSAhPSB0b3AyKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXRvcDEgPSBkZXZwcml2LT5od2RtYXNpemVbMF0gLSB0b3AxOwkvLyB3aGVyZSBpcyBub3cgRE1BIGluIGJ1ZmZlcgorCXRvcDEgPj49IDE7CQkvLyBzYW1wbGUgcG9zaXRpb24KKwl0b3AyID0gdG9wMSAtIGRldnByaXYtPmFpX3BvbGxfcHRyOworCWlmICh0b3AyIDwgMSkgewkJLy8gbm8gbmV3IHNhbXBsZXMKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdHJhbnNmZXJfZnJvbV9kbWFfYnVmKGRldiwgcywKKwkJKHNob3J0ICopIGRldnByaXYtPmRtYWJ1ZltkZXZwcml2LT5uZXh0X2RtYV9idWZdLAorCQlkZXZwcml2LT5haV9wb2xsX3B0ciwgdG9wMik7CisKKwlkZXZwcml2LT5haV9wb2xsX3B0ciA9IHRvcDE7CS8vIG5ldyBidWZmZXIgcG9zaXRpb24KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHMtPmFzeW5jLT5idWZfd3JpdGVfY291bnQgLSBzLT5hc3luYy0+YnVmX3JlYWRfY291bnQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBjYW5jZWwgYW55IG1vZGUgMS00IEFJCisqLworc3RhdGljIGludCBwY2w4MTZfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisvLyAgREVCVUcocnRfcHJpbnRrKCJwY2w4MTZfYWlfY2FuY2VsKClcbiIpOykKKworCWlmIChkZXZwcml2LT5pcnFfYmxvY2tlZCA+IDApIHsKKwkJc3dpdGNoIChkZXZwcml2LT5pbnQ4MTZfbW9kZSkgeworI2lmZGVmIHVudXNlZAorCQljYXNlIElOVF9UWVBFX0FJMV9ETUFfUlRDOgorCQljYXNlIElOVF9UWVBFX0FJM19ETUFfUlRDOgorCQkJc2V0X3J0Y19pcnFfYml0KDApOwkvLyBzdG9wIFJUQworCQkJZGVsX3RpbWVyKCZkZXZwcml2LT5ydGNfaXJxX3RpbWVyKTsKKyNlbmRpZgorCQljYXNlIElOVF9UWVBFX0FJMV9ETUE6CisJCWNhc2UgSU5UX1RZUEVfQUkzX0RNQToKKwkJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisJCWNhc2UgSU5UX1RZUEVfQUkxX0lOVDoKKwkJY2FzZSBJTlRfVFlQRV9BSTNfSU5UOgorCQkJb3V0YihpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCkgJiAweDczLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLworCQkJb3V0YigweGIwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOwkvKiBTdG9wIHBhY2VyICovCisJCQlvdXRiKDB4NzAsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0FEX0xPKTsKKwkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTyk7CisJCQlpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfSEkpOworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KKwkJCWRldnByaXYtPmlycV9ibG9ja2VkID0gMDsKKwkJCWRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCA9IGRldnByaXYtPmludDgxNl9tb2RlOworCQkJZGV2cHJpdi0+aW50ODE2X21vZGUgPSAwOworCQkJZGV2cHJpdi0+bGFzdF9pbnRfc3ViID0gczsKKy8vICAgICAgICBzLT5idXN5ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJREVCVUcocnRfcHJpbnRrKCJjb21lZGk6IHBjbDgxNl9haV9jYW5jZWwoKSBzdWNjZXNzZnVsXG4iKTsKKwkJKQorCQlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIGNoZWNoIGZvciBQQ0w4MTYKKyovCitzdGF0aWMgaW50IHBjbDgxNl9jaGVjayh1bnNpZ25lZCBsb25nIGlvYmFzZSkKK3sKKwlvdXRiKDB4MDAsIGlvYmFzZSArIFBDTDgxNl9NVVgpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MTZfTVVYKSAhPSAweDAwKQorCQlyZXR1cm4gMTsJLy90aGVyZSBpc24ndCBjYXJkCisJb3V0YigweDU1LCBpb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKKwljb21lZGlfdWRlbGF5KDEpOworCWlmIChpbmIoaW9iYXNlICsgUENMODE2X01VWCkgIT0gMHg1NSkKKwkJcmV0dXJuIDE7CS8vdGhlcmUgaXNuJ3QgY2FyZAorCW91dGIoMHgwMCwgaW9iYXNlICsgUENMODE2X01VWCk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlvdXRiKDB4MTgsIGlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsKKwljb21lZGlfdWRlbGF5KDEpOworCWlmIChpbmIoaW9iYXNlICsgUENMODE2X0NPTlRST0wpICE9IDB4MTgpCisJCXJldHVybiAxOwkvL3RoZXJlIGlzbid0IGNhcmQKKwlyZXR1cm4gMDsJCS8vIG9rLCBjYXJkIGV4aXN0Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyByZXNldCB3aG9sZSBQQ0wtODE2IGNhcmRzCisqLworc3RhdGljIHZvaWQgcGNsODE2X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworLy8gIG91dGIgKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RBX0xPKTsgICAgICAgLy8gREFDPTBWCisvLyAgb3V0YiAoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfREFfSEkpOworLy8gIGNvbWVkaV91ZGVsYXkgKDEpOworLy8gIG91dGIgKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RPX0hJKTsgICAgICAgLy8gRE89JDAwMDAKKy8vICBvdXRiICgwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9ET19MTyk7CisvLyAgY29tZWRpX3VkZWxheSAoMSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X01VWCk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOworCW91dGIoMHhiMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsJLyogU3RvcCBwYWNlciAqLworCW91dGIoMHg3MCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsKKwlvdXRiKDB4MzAsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9SQU5HRSk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBTdGFydC9zdG9wIHBhY2VyIG9uYm9hcmQgcGFjZXIKKyovCitzdGF0aWMgdm9pZAorc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKQoreworCW91dGIoMHgzMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsKKwlvdXRiKDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjApOworCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMCk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlvdXRiKDB4YjQsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CS8vIHNldCBjb3VudGVyIDIgYXMgbW9kZSAzCisJb3V0YigweDc0LCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOwkvLyBzZXQgY291bnRlciAxIGFzIG1vZGUgMworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwlpZiAobW9kZSA9PSAxKSB7CisJCURQUklOVEsoIm1vZGUgJWQsIGRpdmlzb3IxICVkLCBkaXZpc29yMiAlZFxuIiwgbW9kZSwgZGl2aXNvcjEsCisJCQlkaXZpc29yMik7CisJCW91dGIoZGl2aXNvcjIgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFIyKTsKKwkJb3V0YigoZGl2aXNvcjIgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFIyKTsKKwkJb3V0YihkaXZpc29yMSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjEpOworCQlvdXRiKChkaXZpc29yMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjEpOworCX0KKworCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAoanVzdCBpbiBjYXNlKSAqLworLy8gICAgICBvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBDaGVjayBpZiBjaGFubmVsIGxpc3QgZnJvbSB1c2VyIGlzIGJ1aWxkZWQgY29ycmVjdGx5CisgSWYgaXQncyBvaywgdGhlbiBwcm9ncmFtIHNjYW4vZ2FpbiBsb2dpYworKi8KK3N0YXRpYyBpbnQKK2NoZWNrX2FuZF9zZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBpbnQgY2hhbmxlbikKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbnNlZ21lbnRbMTZdOworCXVuc2lnbmVkIGludCBpLCBub3dtdXN0YmVjaGFuLCBzZWdsZW4sIHNlZ3BvczsKKworCS8vIGNvcnJlY3QgY2hhbm5lbCBhbmQgcmFuZ2UgbnVtYmVyIGNoZWNrIGl0c2VsZiBjb21lZGkvcmFuZ2UuYworCWlmIChjaGFubGVuIDwgMSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicmFuZ2UvY2hhbm5lbCBsaXN0IGlzIGVtcHR5ISIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY2hhbmxlbiA+IDEpIHsKKwkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsJLy8gZmlyc3QgY2hhbm5lbCBpcyBldmVyeXRpbWUgb2sKKwkJZm9yIChpID0gMSwgc2VnbGVuID0gMTsgaSA8IGNoYW5sZW47IGkrKywgc2VnbGVuKyspIHsKKwkJCS8vIGJ1aWxkIHBhcnQgb2YgY2hhbmxpc3QKKwkJCURFQlVHKHJ0X3ByaW50aygiJWQuICVkICVkXG4iLCBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwKKwkJCQkJQ1JfUkFOR0UoY2hhbmxpc3RbaV0pKTsKKwkJCQkpCisJCQkJaWYgKGNoYW5saXN0WzBdID09IGNoYW5saXN0W2ldKQorCQkJCWJyZWFrOwkvLyB3ZSBkZXRlY3QgbG9vcCwgdGhpcyBtdXN0IGJ5IGZpbmlzaAorCQkJbm93bXVzdGJlY2hhbiA9CisJCQkJKENSX0NIQU4oY2hhbnNlZ21lbnRbaSAtIDFdKSArIDEpICUgY2hhbmxlbjsKKwkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CisJCQkJLy8gY2hhbm5lbCBsaXN0IGlzbid0IGNvbnRpbm91cyA6LSgKKwkJCQlydF9wcmludGsKKwkJCQkJKCJjb21lZGklZDogcGNsODE2OiBjaGFubmVsIGxpc3QgbXVzdCBiZSBjb250aW5vdXMhIGNoYW5saXN0WyVpXT0lZCBidXQgbXVzdCBiZSAlZCBvciAlZCFcbiIsCisJCQkJCWRldi0+bWlub3IsIGksIENSX0NIQU4oY2hhbmxpc3RbaV0pLAorCQkJCQlub3dtdXN0YmVjaGFuLCBDUl9DSEFOKGNoYW5saXN0WzBdKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQljaGFuc2VnbWVudFtpXSA9IGNoYW5saXN0W2ldOwkvLyB3ZWxsLCB0aGlzIGlzIG5leHQgY29ycmVjdCBjaGFubmVsIGluIGxpc3QKKwkJfQorCisJCWZvciAoaSA9IDAsIHNlZ3BvcyA9IDA7IGkgPCBjaGFubGVuOyBpKyspIHsJLy8gY2hlY2sgd2hvbGUgY2hhbmxpc3QKKwkJCURFQlVHKHJ0X3ByaW50aygiJWQgJWQ9JWQgJWRcbiIsCisJCQkJCUNSX0NIQU4oY2hhbnNlZ21lbnRbaSAlIHNlZ2xlbl0pLAorCQkJCQlDUl9SQU5HRShjaGFuc2VnbWVudFtpICUgc2VnbGVuXSksCisJCQkJCUNSX0NIQU4oY2hhbmxpc3RbaV0pLAorCQkJCQlDUl9SQU5HRShjaGFubGlzdFtpXSkpOworCQkJCSkKKwkJCQlpZiAoY2hhbmxpc3RbaV0gIT0gY2hhbnNlZ21lbnRbaSAlIHNlZ2xlbl0pIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCJjb21lZGklZDogcGNsODE2OiBiYWQgY2hhbm5lbCBvciByYW5nZSBudW1iZXIhIGNoYW5saXN0WyVpXT0lZCwlZCwlZCBhbmQgbm90ICVkLCVkLCVkIVxuIiwKKwkJCQkJZGV2LT5taW5vciwgaSwgQ1JfQ0hBTihjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX1JBTkdFKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfQVJFRihjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX0NIQU4oY2hhbmxpc3RbaSAlIHNlZ2xlbl0pLAorCQkJCQlDUl9SQU5HRShjaGFubGlzdFtpICUgc2VnbGVuXSksCisJCQkJCUNSX0FSRUYoY2hhbnNlZ21lbnRbaSAlIHNlZ2xlbl0pKTsKKwkJCQlyZXR1cm4gMDsJLy8gY2hhbi9nYWluIGxpc3QgaXMgc3RyYW5nZQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc2VnbGVuID0gMTsKKwl9CisKKwlkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfbGVuID0gc2VnbGVuOworCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNlZ2xlbjsgaSsrKSB7CS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQlkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RbaV0gPSBDUl9DSEFOKGNoYW5saXN0W2ldKTsKKwkJb3V0YihDUl9DSEFOKGNoYW5saXN0WzBdKSAmIDB4ZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKKwkJb3V0YihDUl9SQU5HRShjaGFubGlzdFswXSksIGRldi0+aW9iYXNlICsgUENMODE2X1JBTkdFKTsJLyogc2VsZWN0IGdhaW4gKi8KKwl9CisKKwljb21lZGlfdWRlbGF5KDEpOworCisJb3V0YihkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RbMF0gfCAoZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0W3NlZ2xlbiAtIDFdIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOwkvKiBzZWxlY3QgY2hhbm5lbCBpbnRlcnZhbCB0byBzY2FuICovCisKKwlyZXR1cm4gMTsJCS8vIHdlIGNhbiBzZXJ2ZSB0aGlzIHdpdGggTVVYIGxvZ2ljCit9CisKKyNpZmRlZiB1bnVzZWQKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRW5hYmxlKDEpL2Rpc2FibGUoMCkgcGVyaW9kaWMgaW50ZXJydXB0cyBmcm9tIFJUQworKi8KK3N0YXRpYyBpbnQgc2V0X3J0Y19pcnFfYml0KHVuc2lnbmVkIGNoYXIgYml0KQoreworCXVuc2lnbmVkIGNoYXIgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoYml0ID09IDEpIHsKKwkJUlRDX3RpbWVyX2xvY2srKzsKKwkJaWYgKFJUQ190aW1lcl9sb2NrID4gMSkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCVJUQ190aW1lcl9sb2NrLS07CisJCWlmIChSVENfdGltZXJfbG9jayA8IDApCisJCQlSVENfdGltZXJfbG9jayA9IDA7CisJCWlmIChSVENfdGltZXJfbG9jayA+IDApCisJCQlyZXR1cm4gMDsKKwl9CisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKwl2YWwgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOworCWlmIChiaXQpIHsKKwkJdmFsIHw9IFJUQ19QSUU7CisJfSBlbHNlIHsKKwkJdmFsICY9IH5SVENfUElFOworCX0KKwlDTU9TX1dSSVRFKHZhbCwgUlRDX0NPTlRST0wpOworCUNNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7CisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBGcmVlIGFueSByZXNvdXJjZXMgdGhhdCB3ZSBoYXZlIGNsYWltZWQKKyovCitzdGF0aWMgdm9pZCBmcmVlX3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvL3J0X3ByaW50aygiZnJlZV9yZXNvdXJjZSgpXG4iKTsKKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBkZXZwcml2LT5zdWJfYWkpOworCQlwY2w4MTZfcmVzZXQoZGV2KTsKKwkJaWYgKGRldnByaXYtPmRtYSkKKwkJCWZyZWVfZG1hKGRldnByaXYtPmRtYSk7CisJCWlmIChkZXZwcml2LT5kbWFidWZbMF0pCisJCQlmcmVlX3BhZ2VzKGRldnByaXYtPmRtYWJ1ZlswXSwgZGV2cHJpdi0+ZG1hcGFnZXNbMF0pOworCQlpZiAoZGV2cHJpdi0+ZG1hYnVmWzFdKQorCQkJZnJlZV9wYWdlcyhkZXZwcml2LT5kbWFidWZbMV0sIGRldnByaXYtPmRtYXBhZ2VzWzFdKTsKKyNpZmRlZiB1bnVzZWQKKwkJaWYgKGRldnByaXYtPnJ0Y19pcnEpCisJCQljb21lZGlfZnJlZV9pcnEoZGV2cHJpdi0+cnRjX2lycSwgZGV2KTsKKwkJaWYgKChkZXZwcml2LT5kbWFfcnRjKSAmJiAoUlRDX2xvY2sgPT0gMSkpIHsKKwkJCWlmIChkZXZwcml2LT5ydGNfaW9iYXNlKQorCQkJCXJlbGVhc2VfcmVnaW9uKGRldnByaXYtPnJ0Y19pb2Jhc2UsCisJCQkJCWRldnByaXYtPnJ0Y19pb3NpemUpOworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlKTsKKwkvL3J0X3ByaW50aygiZnJlZV9yZXNvdXJjZSgpIGVuZFxuIik7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgSW5pdGlhbGl6YXRpb24KKworKi8KK3N0YXRpYyBpbnQgcGNsODE2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpcnEsIGRtYTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCS8vaW50IGk7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwkvKiBjbGFpbSBvdXIgSS9PIHNwYWNlICovCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcGNsODE2OiAgYm9hcmQ9JXMsIGlvcG9ydD0weCUwM2x4IiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSwgaW9iYXNlKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSwgInBjbDgxNiIpKSB7CisJCXJ0X3ByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmIChwY2w4MTZfY2hlY2soaW9iYXNlKSkgeworCQlydF9wcmludGsoIiwgSSBjYW5uJ3QgZGV0ZWN0IGJvYXJkLiBGQUlMIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNsODE2X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OwkvKiBDYW4ndCBhbGxvYyBtZW0gKi8KKworCS8qIHNldCB1cCBzb21lIG5hbWUgc3R1ZmYgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJLyogZ3JhYiBvdXIgSVJRICovCisJaXJxID0gMDsKKwlpZiAodGhpc19ib2FyZC0+SVJRYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgSVJRICovCisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlpZiAoaXJxKSB7CS8qIHdlIHdhbnQgdG8gdXNlIElSUSAqLworCQkJaWYgKCgoMSA8PCBpcnEpICYgdGhpc19ib2FyZC0+SVJRYml0cykgPT0gMCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIiwgSVJRICV1IGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCBESVNBQkxJTkcgSVQiLAorCQkJCQlpcnEpOworCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludGVycnVwdF9wY2w4MTYsIDAsCisJCQkJCQkicGNsODE2IiwgZGV2KSkgeworCQkJCQlydF9wcmludGsKKwkJCQkJCSgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCBESVNBQkxJTkcgSVQiLAorCQkJCQkJaXJxKTsKKwkJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJCX0gZWxzZSB7CisJCQkJCXJ0X3ByaW50aygiLCBpcnE9JXUiLCBpcnEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWRldi0+aXJxID0gaXJxOworCWlmIChpcnEpIHsKKwkJZGV2cHJpdi0+aXJxX2ZyZWUgPSAxOworCX0gLyogMT13ZSBoYXZlIGFsbG9jYXRlZCBpcnEgKi8KKwllbHNlIHsKKwkJZGV2cHJpdi0+aXJxX2ZyZWUgPSAwOworCX0KKwlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDA7CS8qIG51bWJlciBvZiBzdWJkZXZpY2Ugd2hpY2ggdXNlIElSUSAqLworCWRldnByaXYtPmludDgxNl9tb2RlID0gMDsJLyogbW9kZSBvZiBpcnEgKi8KKworI2lmZGVmIHVudXNlZAorCS8qIGdyYWIgUlRDIGZvciBETUEgb3BlcmF0aW9ucyAqLworCWRldnByaXYtPmRtYV9ydGMgPSAwOworCWlmIChpdC0+b3B0aW9uc1syXSA+IDApIHsJLy8gd2Ugd2FudCB0byB1c2UgRE1BCisJCWlmIChSVENfbG9jayA9PSAwKSB7CisJCQlpZiAoIXJlcXVlc3RfcmVnaW9uKFJUQ19QT1JUKDApLCBSVENfSU9fRVhURU5ULAorCQkJCQkicGNsODE2IChSVEMpIikpCisJCQkJZ290byBub19ydGM7CisJCX0KKwkJZGV2cHJpdi0+cnRjX2lvYmFzZSA9IFJUQ19QT1JUKDApOworCQlkZXZwcml2LT5ydGNfaW9zaXplID0gUlRDX0lPX0VYVEVOVDsKKwkJUlRDX2xvY2srKzsKKyNpZmRlZiBVTlRFU1RFRF9DT0RFCisJCWlmICghY29tZWRpX3JlcXVlc3RfaXJxKFJUQ19JUlEsCisJCQkJaW50ZXJydXB0X3BjbDgxNl9haV9tb2RlMTNfZG1hX3J0YywgMCwKKwkJCQkicGNsODE2IERNQSAoUlRDKSIsIGRldikpIHsKKwkJCWRldnByaXYtPmRtYV9ydGMgPSAxOworCQkJZGV2cHJpdi0+cnRjX2lycSA9IFJUQ19JUlE7CisJCQlydF9wcmludGsoIiwgZG1hX2lycT0ldSIsIGRldnByaXYtPnJ0Y19pcnEpOworCQl9IGVsc2UgeworCQkJUlRDX2xvY2stLTsKKwkJCWlmIChSVENfbG9jayA9PSAwKSB7CisJCQkJaWYgKGRldnByaXYtPnJ0Y19pb2Jhc2UpCisJCQkJCXJlbGVhc2VfcmVnaW9uKGRldnByaXYtPnJ0Y19pb2Jhc2UsCisJCQkJCQlkZXZwcml2LT5ydGNfaW9zaXplKTsKKwkJCX0KKwkJCWRldnByaXYtPnJ0Y19pb2Jhc2UgPSAwOworCQkJZGV2cHJpdi0+cnRjX2lvc2l6ZSA9IDA7CisJCX0KKyNlbHNlCisJCXByaW50aygicGNsODE2OiBSVEMgY29kZSBtaXNzaW5nIik7CisjZW5kaWYKKworCX0KKworICAgICAgbm9fcnRjOgorI2VuZGlmCisJLyogZ3JhYiBvdXIgRE1BICovCisJZG1hID0gMDsKKwlkZXZwcml2LT5kbWEgPSBkbWE7CisJaWYgKChkZXZwcml2LT5pcnFfZnJlZSA9PSAwKSAmJiAoZGV2cHJpdi0+ZG1hX3J0YyA9PSAwKSkKKwkJZ290byBub19kbWE7CS8qIGlmIHdlIGhhdmVuJ3QgSVJRLCB3ZSBjYW4ndCB1c2UgRE1BICovCisKKwlpZiAodGhpc19ib2FyZC0+RE1BYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgRE1BICovCisJCWRtYSA9IGl0LT5vcHRpb25zWzJdOworCQlpZiAoZG1hIDwgMSkKKwkJCWdvdG8gbm9fZG1hOwkvKiBETUEgZGlzYWJsZWQgKi8KKworCQlpZiAoKCgxIDw8IGRtYSkgJiB0aGlzX2JvYXJkLT5ETUFiaXRzKSA9PSAwKSB7CisJCQlydF9wcmludGsoIiwgRE1BIGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCBGQUlMIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsJLyogQmFkIERNQSAqLworCQl9CisJCXJldCA9IHJlcXVlc3RfZG1hKGRtYSwgInBjbDgxNiIpOworCQlpZiAocmV0KSB7CisJCQlydF9wcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSAldSwgRkFJTCFcbiIsIGRtYSk7CisJCQlyZXR1cm4gLUVCVVNZOwkvKiBETUEgaXNuJ3QgZnJlZSAqLworCQl9CisKKwkJZGV2cHJpdi0+ZG1hID0gZG1hOworCQlydF9wcmludGsoIiwgZG1hPSV1IiwgZG1hKTsKKwkJcGFnZXMgPSAyOwkvKiB3ZSBuZWVkIDE2S0IgKi8KKwkJZGV2cHJpdi0+ZG1hYnVmWzBdID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VzKTsKKworCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlswXSkgeworCQkJcnRfcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7CisJCQkvKiBtYXliZSBleHBlcmltZW50IHdpdGggdHJ5X3RvX2ZyZWVfcGFnZXMoKSB3aWxsIGhlbHAgLi4uLiAqLworCQkJcmV0dXJuIC1FQlVTWTsJLyogbm8gYnVmZmVyIDotKCAqLworCQl9CisJCWRldnByaXYtPmRtYXBhZ2VzWzBdID0gcGFnZXM7CisJCWRldnByaXYtPmh3ZG1hcHRyWzBdID0gdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMF0pOworCQlkZXZwcml2LT5od2RtYXNpemVbMF0gPSAoMSA8PCBwYWdlcykgKiBQQUdFX1NJWkU7CisJCS8vcnRfcHJpbnRrKCIlZCAlZCAlbGQsICIsZGV2cHJpdi0+ZG1hcGFnZXNbMF0sZGV2cHJpdi0+aHdkbWFzaXplWzBdLFBBR0VfU0laRSk7CisKKwkJaWYgKGRldnByaXYtPmRtYV9ydGMgPT0gMCkgewkvLyB3ZSBtdXN0IGRvIGR1YmxlIGJ1ZmYgOi0oCisJCQlkZXZwcml2LT5kbWFidWZbMV0gPSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZXMpOworCQkJaWYgKCFkZXZwcml2LT5kbWFidWZbMV0pIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJCWRldnByaXYtPmRtYXBhZ2VzWzFdID0gcGFnZXM7CisJCQlkZXZwcml2LT5od2RtYXB0clsxXSA9CisJCQkJdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMV0pOworCQkJZGV2cHJpdi0+aHdkbWFzaXplWzFdID0gKDEgPDwgcGFnZXMpICogUEFHRV9TSVpFOworCQl9CisJfQorCisgICAgICBub19kbWE6CisKKy8qICBpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4gPiAwKQorICAgIHN1YmRldnNbMV0gPSBDT01FRElfU1VCRF9BTzsKKyAgaWYgKHRoaXNfYm9hcmQtPm5fZGljaGFuID4gMCkKKyAgICBzdWJkZXZzWzJdID0gQ09NRURJX1NVQkRfREk7CisgIGlmICh0aGlzX2JvYXJkLT5uX2RvY2hhbiA+IDApCisgICAgc3ViZGV2c1szXSA9IENPTUVESV9TVUJEX0RPOworKi8KKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaWYgKHRoaXNfYm9hcmQtPm5fYWljaGFuID4gMCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCWRldnByaXYtPnN1Yl9haSA9IHM7CisJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQ7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0RJRkY7CisJCS8vcHJpbnRrICgiLCAlZGNoYW5zIERJRkYgREFDIC0gJWQiLCBzLT5uX2NoYW4sIGkpOworCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YWlfbWF4ZGF0YTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+YWlfY2hhbmxpc3Q7CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+YWlfcmFuZ2VfdHlwZTsKKwkJcy0+Y2FuY2VsID0gcGNsODE2X2FpX2NhbmNlbDsKKwkJcy0+ZG9fY21kdGVzdCA9IHBjbDgxNl9haV9jbWR0ZXN0OworCQlzLT5kb19jbWQgPSBwY2w4MTZfYWlfY21kOworCQlzLT5wb2xsID0gcGNsODE2X2FpX3BvbGw7CisJCXMtPmluc25fcmVhZCA9IHBjbDgxNl9haV9pbnNuX3JlYWQ7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKyNpZiAwCitjYXNlIENPTUVESV9TVUJEX0FPOgorCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmFvX21heGRhdGE7CisJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+YW9fY2hhbmxpc3Q7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5hb19yYW5nZV90eXBlOworCWJyZWFrOworCitjYXNlIENPTUVESV9TVUJEX0RJOgorCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCWJyZWFrOworCitjYXNlIENPTUVESV9TVUJEX0RPOgorCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2RvY2hhbjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RvY2hhbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCWJyZWFrOworI2VuZGlmCisKKwlwY2w4MTZfcmVzZXQoZGV2KTsKKworCXJ0X3ByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFJlbW92ZXMgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgcGNsODE2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlERUJVRyhydF9wcmludGsoImNvbWVkaSVkOiBwY2w4MTY6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJCSkKKwkJZnJlZV9yZXNvdXJjZXMoZGV2KTsKKyNpZmRlZiB1bnVzZWQKKwlpZiAoZGV2cHJpdi0+ZG1hX3J0YykKKwkJUlRDX2xvY2stLTsKKyNlbmRpZgorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTlkNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKQEAgLTAsMCArMSwxOTg4IEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKKworICAgQXV0aG9yOiAgTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CisKKyAgIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmRzOgorICAgIGNhcmQ6ICAgUENMLTgxOEwsIFBDTC04MThILCBQQ0wtODE4SEQsIFBDTC04MThIRywgUENMLTgxOCwgUENMLTcxOAorICAgIGRyaXZlcjogcGNsODE4bCwgIHBjbDgxOGgsICBwY2w4MThoZCwgIHBjbDgxOGhnLCAgcGNsODE4LCAgcGNsNzE4CisqLworLyoKK0RyaXZlcjogcGNsODE4CitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTC04MTggY2FyZHMsIFBDTC03MTgKK0F1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtODE4TCAocGNsODE4bCksIFBDTC04MThIIChwY2w4MThoKSwKKyAgUENMLTgxOEhEIChwY2w4MThoZCksIFBDTC04MThIRyAocGNsODE4aGcpLCBQQ0wtODE4IChwY2w4MTgpLAorICBQQ0wtNzE4IChwY2w3MTgpCitTdGF0dXM6IHdvcmtzCisKK0FsbCBjYXJkcyBoYXZlIDE2IFNFLzggRElGRiBBRENzLCBvbmUgb3IgdHdvIERBQ3MsIDE2IERJIGFuZCAxNiBETy4KK0RpZmZlcmVuY2VzIGFyZSBvbmx5IGF0IG1heGltYWwgc2FtcGxlIHNwZWVkLCByYW5nZSBsaXN0IGFuZCBGSUZPCitzdXBwb3J0LgorVGhlIGRyaXZlciBzdXBwb3J0IEFJIG1vZGUgMCwgMSwgMyBvdGhlciBzdWJkZXZpY2VzIChBTywgREksIERPKSBzdXBwb3J0Citvbmx5IG1vZGUgMC4gSWYgRE1BL0ZJRk8vSU5UIGFyZSBkaXNhYmxlZCB0aGVuIEFJIHN1cHBvcnQgb25seSBtb2RlIDAuCitQQ0wtODE4SEQgYW5kIFBDTC04MThIRyBzdXBwb3J0IDFrd29yZCBGSUZPLiBEcml2ZXIgc3VwcG9ydCB0aGlzIEZJRk8KK2J1dCB0aGlzIGNvZGUgaXMgdW50ZXN0ZWQuCitBIHdvcmQgb3IgdHdvIGFib3V0IERNQS4gRHJpdmVyIHN1cHBvcnQgRE1BIG9wZXJhdGlvbnMgYXQgdHdvIHdheXM6CisxKSBETUEgdXNlcyB0d28gYnVmZmVycyBhbmQgYWZ0ZXIgb25lIGlzIGZpbGxlZCB0aGVuIGlzIGdlbmVyYXRlZAorICAgSU5UIGFuZCBETUEgcmVzdGFydCB3aXRoIHNlY29uZCBidWZmZXIuIFdpdGggdGhpcyBtb2RlIEknbSB1bmFibGUgcnVuCisgICBtb3JlIHRoYXQgODBLc2FtcGxlcy9zZWNzIHdpdGhvdXQgZGF0YSBkcm9wb3V0cyBvbiBLNi8yMzMuCisyKSBETUEgdXNlcyBvbmUgYnVmZmVyIGFuZCBydW4gaW4gYXV0b2luaXQgbW9kZSBhbmQgdGhlIGRhdGEgYXJlCisgICBmcm9tIERNQSBidWZmZXIgbW92ZWQgb24gdGhlIGZseSB3aXRoIDJrSHogaW50ZXJydXB0cyBmcm9tIFJUQy4KKyAgIFRoaXMgbW9kZSBpcyB1c2VkIGlmIHRoZSBpbnRlcnJ1cHQgOCBpcyBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCisgICBJZiBub3QsIHRoZW4gZmlyc3QgRE1BIG1vZGUgaXMgdXNlZC4gV2l0aCB0aGlzIEkgY2FuIHJ1biBhdAorICAgZnVsbCBzcGVlZCBvbmUgY2FyZCAoMTAwa3NhbXBsZXMvc2Vjcykgb3IgdHdvIGNhcmRzIHdpdGgKKyAgIDYwa3NhbXBsZXMvc2VjcyBlYWNoIChtb3JlIGlzIHByb2JsZW0gb24gYWNjb3VudCBvZiBJU0EgbGltaXRhdGlvbnMpLgorICAgVG8gdXNlIHRoaXMgbW9kZSB5b3UgbXVzdCBoYXZlIGNvbXBpbGVkICBrZXJuZWwgd2l0aCBkaXNhYmxlZAorICAgIkVuaGFuY2VkIFJlYWwgVGltZSBDbG9jayBTdXBwb3J0Ii4KKyAgIE1heWJlIHlvdSBjYW4gaGF2ZSBwcm9ibGVtcyBpZiB5b3UgdXNlIHhudHBkIG9yIHNpbWlsYXIuCisgICBJZiB5b3UndmUgZGF0YSBkcm9wb3V0cyB3aXRoIERNQSBtb2RlIDIgdGhlbjoKKyAgICBhKSBkaXNhYmxlIElERSBETUEKKyAgICBiKSBzd2l0Y2ggdGV4dCBtb2RlIGNvbnNvbGUgdG8gZmIuCisKKyAgIE9wdGlvbnMgZm9yIFBDTC04MThMOgorICAgIFswXSAtIElPIEJhc2UKKyAgICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgICBbMl0gLSBETUEJKDA9ZGlzYWJsZSwgMSwgMykKKyAgICBbM10gLSAwLCAxMD0xME1IeiBjbG9jayBmb3IgODI1NAorICAgICAgICAgICAgICAxPSAxTUh6IGNsb2NrIGZvciA4MjU0CisgICAgWzRdIC0gMCwgIDU9QS9EIGlucHV0ICAtNVYuLiArNVYKKyAgICAgICAgICAxLCAxMD1BL0QgaW5wdXQgLTEwVi4uKzEwVgorICAgIFs1XSAtIDAsICA1PUQvQSBvdXRwdXQgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgICAgICAgICAgMSwgMTA9RC9BIG91dHB1dCAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCisJICAyICAgID1EL0Egb3V0cHV0IHVua25vdyAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorCisgICBPcHRpb25zIGZvciBQQ0wtODE4LCBQQ0wtODE4SDoKKyAgICBbMF0gLSBJTyBCYXNlCisgICAgWzFdIC0gSVJRCSgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgICAgWzJdIC0gRE1BCSgwPWRpc2FibGUsIDEsIDMpCisgICAgWzNdIC0gMCwgMTA9MTBNSHogY2xvY2sgZm9yIDgyNTQKKyAgICAgICAgICAgICAgMT0gMU1IeiBjbG9jayBmb3IgODI1NAorICAgIFs0XSAtIDAsICA1PUQvQSBvdXRwdXQgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgICAgICAgICAgMSwgMTA9RC9BIG91dHB1dCAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCisJICAyICAgID1EL0Egb3V0cHV0IHVua25vdyAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorCisgICBPcHRpb25zIGZvciBQQ0wtODE4SEQsIFBDTC04MThIRzoKKyAgICBbMF0gLSBJTyBCYXNlCisgICAgWzFdIC0gSVJRCSgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgICAgWzJdIC0gRE1BL0ZJRk8gICgtMT11c2UgRklGTywgMD1kaXNhYmxlIGJvdGggRklGTyBhbmQgRE1BLAorICAgICAgICAgICAgICAgICAgICAgIDE9dXNlIERNQSBjaCAxLCAzPXVzZSBETUEgY2ggMykKKyAgICBbM10gLSAwLCAxMD0xME1IeiBjbG9jayBmb3IgODI1NAorICAgICAgICAgICAgICAxPSAxTUh6IGNsb2NrIGZvciA4MjU0CisgICAgWzRdIC0gMCwgIDU9RC9BIG91dHB1dCAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgICAxLCAxMD1EL0Egb3V0cHV0IDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKyAgIAkgIDIgICAgPUQvQSBvdXRwdXQgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKKyAgIE9wdGlvbnMgZm9yIFBDTC03MTg6CisgICAgWzBdIC0gSU8gQmFzZQorICAgIFsxXSAtIElSUQkoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3KQorICAgIFsyXSAtIERNQQkoMD1kaXNhYmxlLCAxLCAzKQorICAgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0CisgICAgICAgICAgICAgIDE9IDFNSHogY2xvY2sgZm9yIDgyNTQKKyAgICBbNF0gLSAgICAgMD1BL0QgUmFuZ2UgaXMgKy8tMTBWCisJICAgICAgMT0gICAgICAgICAgICAgKy8tNVYKKwkgICAgICAyPSAgICAgICAgICAgICArLy0yLjVWCisJICAgICAgMz0gICAgICAgICAgICAgKy8tMVYKKwkgICAgICA0PSAgICAgICAgICAgICArLy0wLjVWCisJICAgICAgNT0gIAkgICAgIHVzZXIgZGVmaW5lZCBiaXBvbGFyCisJICAgICAgNj0JICAgICAwLTEwVgorCSAgICAgIDc9CSAgICAgMC01VgorIAkgICAgICA4PQkgICAgIDAtMlYKKwkgICAgICA5PQkgICAgIDAtMVYKKwkgICAgIDEwPQkgICAgIHVzZXIgZGVmaW5lZCB1bmlwb2xhcgorICAgIFs1XSAtIDAsICA1PUQvQSBvdXRwdXRzIDAtNVYgIChpbnRlcm5hbCByZWZlcmVuY2UgLTVWKQorICAgICAgICAgIDEsIDEwPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKwkgICAgICAyPUQvQSBvdXRwdXRzIHVua25vdyAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorICAgIFs2XSAtIDAsIDYwPW1heCAgNjBrSHogQS9EIHNhbXBsaW5nCisgICAgICAgICAgMSwxMDA9bWF4IDEwMGtIeiBBL0Qgc2FtcGxpbmcgKFBDTC03MTggd2l0aCBPcHRpb24gMDAxIGluc3RhbGxlZCkKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKworLy8gI2RlZmluZSBQQ0w4MThfTU9ERTEzX0FPIDEKKworLy8gYm9hcmRzIGNvbnN0YW50cworCisjZGVmaW5lIGJvYXJkUENMODE4TCAwCisjZGVmaW5lIGJvYXJkUENMODE4SCAxCisjZGVmaW5lIGJvYXJkUENMODE4SEQgMgorI2RlZmluZSBib2FyZFBDTDgxOEhHIDMKKyNkZWZpbmUgYm9hcmRQQ0w4MTggNAorI2RlZmluZSBib2FyZFBDTDcxOCA1CisKKy8vIElPIHNwYWNlIGxlbgorI2RlZmluZSBQQ0x4MXhfUkFOR0UgMTYKKy8vIElPIHNwYWNlIGxlbiBpZiB3ZSB1c2UgRklGTworI2RlZmluZSBQQ0x4MXhGSUZPX1JBTkdFIDMyCisKKy8vIFc6IGNsZWFyIElOVCByZXF1ZXN0CisjZGVmaW5lIFBDTDgxOF9DTFJJTlQgOAorLy8gUjogcmV0dXJuIHN0YXR1cyBieXRlCisjZGVmaW5lIFBDTDgxOF9TVEFUVVMgOAorLy8gUjogQS9EIGhpZ2ggYnl0ZSBXOiBBL0QgcmFuZ2UgY29udHJvbAorI2RlZmluZSBQQ0w4MThfUkFOR0UgMQorLy8gUjogbmV4dCBtdXggc2NhbiBjaGFubmVsIFc6IG11eCBzY2FuIGNoYW5uZWwgJiByYW5nZSBjb250cm9sIHBvaW50ZXIKKyNkZWZpbmUgUENMODE4X01VWCAyCisvLyBSL1c6IG9wZXJhdGlvbiBjb250cm9sIHJlZ2lzdGVyCisjZGVmaW5lIFBDTDgxOF9DT05UUk9MIDkKKy8vIFc6IGNvdW50ZXIgZW5hYmxlCisjZGVmaW5lIFBDTDgxOF9DTlRFTkFCTEUgMTAKKworLy8gUjogbG93IGJ5dGUgb2YgQS9EIFc6IHNvZnQgQS9EIHRyaWdnZXIKKyNkZWZpbmUgUENMODE4X0FEX0xPIDAKKy8vIFI6IGhpZ2ggYnl0ZSBvZiBBL0QgVzogQS9EIHJhbmdlIGNvbnRyb2wKKyNkZWZpbmUgUENMODE4X0FEX0hJIDEKKy8vIFc6IEQvQSBsb3cmaGlnaCBieXRlCisjZGVmaW5lIFBDTDgxOF9EQV9MTyA0CisjZGVmaW5lIFBDTDgxOF9EQV9ISSA1CisvLyBSOiBsb3cmaGlnaCBieXRlIG9mIERJCisjZGVmaW5lIFBDTDgxOF9ESV9MTyAzCisjZGVmaW5lIFBDTDgxOF9ESV9ISSAxMQorLy8gVzogbG93JmhpZ2ggYnl0ZSBvZiBETworI2RlZmluZSBQQ0w4MThfRE9fTE8gMworI2RlZmluZSBQQ0w4MThfRE9fSEkgMTEKKy8vIFc6IFBDTDcxOCBzZWNvbmQgRC9BCisjZGVmaW5lIFBDTDcxOF9EQTJfTE8gNgorI2RlZmluZSBQQ0w3MThfREEyX0hJIDcKKy8vIGNvdW50ZXJzCisjZGVmaW5lIFBDTDgxOF9DVFIwIDEyCisjZGVmaW5lIFBDTDgxOF9DVFIxIDEzCisjZGVmaW5lIFBDTDgxOF9DVFIyIDE0CisvLyBXOiBjb3VudGVyIGNvbnRyb2wKKyNkZWZpbmUgUENMODE4X0NUUkNUTCAxNQorCisvLyBXOiBmaWZvIGVuYWJsZS9kaXNhYmxlCisjZGVmaW5lIFBDTDgxOF9GSV9FTkFCTEUgNgorLy8gVzogZmlmbyBpbnRlcnJ1cHQgY2xlYXIKKyNkZWZpbmUgUENMODE4X0ZJX0lOVENMUiAyMAorLy8gVzogZmlmbyBpbnRlcnJ1cHQgY2xlYXIKKyNkZWZpbmUgUENMODE4X0ZJX0ZMVVNIIDI1CisvLyBSOiBmaWZvIHN0YXR1cworI2RlZmluZSBQQ0w4MThfRklfU1RBVFVTIDI1CisvLyBSOiBvbmUgcmVjb3JkIGZyb20gRklGTworI2RlZmluZSBQQ0w4MThfRklfREFUQUxPIDIzCisjZGVmaW5lIFBDTDgxOF9GSV9EQVRBSEkgMjMKKworLy8gdHlwZSBvZiBpbnRlcnJ1cHQgaGFuZGxlcgorI2RlZmluZSBJTlRfVFlQRV9BSTFfSU5UIDEKKyNkZWZpbmUgSU5UX1RZUEVfQUkxX0RNQSAyCisjZGVmaW5lIElOVF9UWVBFX0FJMV9GSUZPIDMKKyNkZWZpbmUgSU5UX1RZUEVfQUkzX0lOVCA0CisjZGVmaW5lIElOVF9UWVBFX0FJM19ETUEgNQorI2RlZmluZSBJTlRfVFlQRV9BSTNfRklGTyA2CisjaWZkZWYgUENMODE4X01PREUxM19BTworI2RlZmluZSBJTlRfVFlQRV9BTzFfSU5UIDcKKyNkZWZpbmUgSU5UX1RZUEVfQU8zX0lOVCA4CisjZW5kaWYKKworI2lmZGVmIHVudXNlZAorLy8gUlRDIHN0dWZmLi4uCisjZGVmaW5lIElOVF9UWVBFX0FJMV9ETUFfUlRDIDkKKyNkZWZpbmUgSU5UX1RZUEVfQUkzX0RNQV9SVEMgMTAKKworI2RlZmluZSBSVENfSVJRIAk4CisjZGVmaW5lIFJUQ19JT19FWFRFTlQJMHgxMAorI2VuZGlmCisKKyNkZWZpbmUgTUFHSUNfRE1BX1dPUkQgMHg1YTVhCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MThoX2FpID0geyA5LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMTApLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MThoZ19haSA9IHsgMTAsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDA1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAxKSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNsODE4bF9sX2FpID0geyA0LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxOGxfaF9haSA9IHsgNCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTcxOF9iaXBvbGFyMSA9IHsgMSwge0JJUF9SQU5HRSgxKSx9IH07CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2U3MThfYmlwb2xhcjBfNSA9IHsgMSwge0JJUF9SQU5HRSgwLjUpLH0gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTcxOF91bmlwb2xhcjIgPSB7IDEsIHtVTklfUkFOR0UoMiksfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlNzE4X3VuaXBvbGFyMSA9IHsgMSwge0JJUF9SQU5HRSgxKSx9IH07CisKK3N0YXRpYyBpbnQgcGNsODE4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbDgxOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCisjaWZkZWYgdW51c2VkCitzdGF0aWMgaW50IFJUQ19sb2NrID0gMDsJLyogUlRDIGxvY2sgKi8KK3N0YXRpYyBpbnQgUlRDX3RpbWVyX2xvY2sgPSAwOwkvKiBSVEMgaW50IGxvY2sgKi8KKyNlbmRpZgorCitzdHJ1Y3QgcGNsODE4X2JvYXJkIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGRyaXZlciBuYW1lCisJaW50IG5fcmFuZ2VzOwkJLy8gbGVuIG9mIHJhbmdlIGxpc3QKKwlpbnQgbl9haWNoYW5fc2U7CS8vIG51bSBvZiBBL0QgY2hhbnMgaW4gc2luZ2xlIGVuZGVkICBtb2RlCisJaW50IG5fYWljaGFuX2RpZmY7CS8vIG51bSBvZiBBL0QgY2hhbnMgaW4gZGlmZXJlbmNpYWwgbW9kZQorCXVuc2lnbmVkIGludCBuc19taW47CS8vIG1pbmltYWwgYWxsbG93ZWQgZGVsYXkgYmV0d2VlbiBzYW1wbGVzIChpbiBucykKKwlpbnQgbl9hb2NoYW47CQkvLyBudW0gb2YgRC9BIGNoYW5zCisJaW50IG5fZGljaGFuOwkJLy8gbnVtIG9mIERJIGNoYW5zCisJaW50IG5fZG9jaGFuOwkJLy8gbnVtIG9mIERPIGNoYW5zCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlX3R5cGU7CS8vIGRlZmF1bHQgQS9EIHJhbmdlbGlzdAorCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphb19yYW5nZV90eXBlOwkvLyBkZWZhdWx0IEQvQSByYW5nZWxpc3QKKwl1bnNpZ25lZCBpbnQgaW9fcmFuZ2U7CS8vIGxlbiBvZiBJTyBzcGFjZQorCXVuc2lnbmVkIGludCBJUlFiaXRzOwkvLyBhbGxvd2VkIGludGVycnVwdHMKKwl1bnNpZ25lZCBpbnQgRE1BYml0czsJLy8gYWxsb3dlZCBETUEgY2hhbnMKKwlpbnQgYWlfbWF4ZGF0YTsJCS8vIG1heGRhdGEgZm9yIEEvRAorCWludCBhb19tYXhkYXRhOwkJLy8gbWF4ZGF0YSBmb3IgRC9BCisJdW5zaWduZWQgY2hhciBmaWZvOwkvLyAxPWJvYXJkIGhhcyBGSUZPCisJaW50IGlzXzgxODsKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2w4MThfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsicGNsODE4bCIsIDQsIDE2LCA4LCAyNTAwMCwgMSwgMTYsIDE2LCAmcmFuZ2VfcGNsODE4bF9sX2FpLAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMCwgMX0sCisJeyJwY2w4MThoIiwgOSwgMTYsIDgsIDEwMDAwLCAxLCAxNiwgMTYsICZyYW5nZV9wY2w4MThoX2FpLAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMCwgMX0sCisJeyJwY2w4MThoZCIsIDksIDE2LCA4LCAxMDAwMCwgMSwgMTYsIDE2LCAmcmFuZ2VfcGNsODE4aF9haSwKKwkJCSZyYW5nZV91bmlwb2xhcjUsIFBDTHgxeF9SQU5HRSwgMHgwMGZjLAorCQkweDBhLCAweGZmZiwgMHhmZmYsIDEsIDF9LAorCXsicGNsODE4aGciLCAxMiwgMTYsIDgsIDEwMDAwLCAxLCAxNiwgMTYsICZyYW5nZV9wY2w4MThoZ19haSwKKwkJCSZyYW5nZV91bmlwb2xhcjUsIFBDTHgxeF9SQU5HRSwgMHgwMGZjLAorCQkweDBhLCAweGZmZiwgMHhmZmYsIDEsIDF9LAorCXsicGNsODE4IiwgOSwgMTYsIDgsIDEwMDAwLCAyLCAxNiwgMTYsICZyYW5nZV9wY2w4MThoX2FpLAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMCwgMX0sCisJeyJwY2w3MTgiLCAxLCAxNiwgOCwgMTYwMDAsIDIsIDE2LCAxNiwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJCSZyYW5nZV91bmlwb2xhcjUsIFBDTHgxeF9SQU5HRSwgMHgwMGZjLAorCQkweDBhLCAweGZmZiwgMHhmZmYsIDAsIDB9LAorCS8qIHBjbTM3MTggKi8KKwl7InBjbTM3MTgiLCA5LCAxNiwgOCwgMTAwMDAsIDAsIDE2LCAxNiwgJnJhbmdlX3BjbDgxOGhfYWksCisJCQkmcmFuZ2VfdW5pcG9sYXI1LCBQQ0x4MXhfUkFOR0UsIDB4MDBmYywKKwkJMHgwYSwgMHhmZmYsIDB4ZmZmLCAwLCAxIC8qIFhYWCA/ICovIH0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgcGNsODE4X2JvYXJkKSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2w4MTggPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNsODE4IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2w4MThfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbDgxOF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNsODE4X2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsODE4KTsKKworc3RydWN0IHBjbDgxOF9wcml2YXRlIHsKKworCXVuc2lnbmVkIGludCBkbWE7CS8vIHVzZWQgRE1BLCAwPWRvbid0IHVzZSBETUEKKwlpbnQgZG1hX3J0YzsJCS8vIDE9UlRDIHVzZWQgd2l0aCBETUEsIDA9bm8gUlRDIGFsbG9jCisJdW5zaWduZWQgaW50IGlvX3JhbmdlOworI2lmZGVmIHVudXNlZAorCXVuc2lnbmVkIGxvbmcgcnRjX2lvYmFzZTsJLy8gUlRDIHBvcnQgcmVnaW9uCisJdW5zaWduZWQgaW50IHJ0Y19pb3NpemU7CisJdW5zaWduZWQgaW50IHJ0Y19pcnE7CisJc3RydWN0IHRpbWVyX2xpc3QgcnRjX2lycV90aW1lcjsJLy8gdGltZXIgZm9yIFJUQyBzYW5pdHkgY2hlY2sKKwl1bnNpZ25lZCBsb25nIHJ0Y19mcmVxOwkvLyBSVEMgaW50IGZyZXEKKwlpbnQgcnRjX2lycV9ibG9ja2VkOwkvLyAxPXdlIG5vdyBkbyBBSSB3aXRoIERNQSZSVEMKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgZG1hYnVmWzJdOwkvLyBwb2ludGVycyB0byBiZWdpbiBvZiBETUEgYnVmZmVycworCXVuc2lnbmVkIGludCBkbWFwYWdlc1syXTsJLy8gbGVuIG9mIERNQSBidWZmZXJzIGluIFBBR0VfU0laRXMKKwl1bnNpZ25lZCBpbnQgaHdkbWFwdHJbMl07CS8vIGhhcmR3YXJlIGFkZHJlc3Mgb2YgRE1BIGJ1ZmZlcnMKKwl1bnNpZ25lZCBpbnQgaHdkbWFzaXplWzJdOwkvLyBsZW4gb2YgRE1BIGJ1ZmZlcnMgaW4gQnl0ZXMKKwl1bnNpZ25lZCBpbnQgZG1hc2FtcGxzaXplOwkvLyBzaXplIGluIHNhbXBsZXMgaHdkbWFzaXplWzBdLzIKKwl1bnNpZ25lZCBpbnQgbGFzdF90b3BfZG1hOwkvLyBETUEgcG9pbnRlciBpbiBsYXN0IFJUQyBpbnQKKwlpbnQgbmV4dF9kbWFfYnVmOwkvLyB3aGljaCBETUEgYnVmZmVyIHdpbGwgYmUgdXNlZCBuZXh0IHJvdW5kCisJbG9uZyBkbWFfcnVuc190b19lbmQ7CS8vIGhvdyBtYW55IHdlIG11c3QgcGVybW9ybSBETUEgdHJhbnNmZXIgdG8gZW5kIG9mIHJlY29yZAorCXVuc2lnbmVkIGxvbmcgbGFzdF9kbWFfcnVuOwkvLyBob3cgbWFueSBieXRlcyB3ZSBtdXN0IHRyYW5zZmVyIG9uIGxhc3QgRE1BIHBhZ2UKKwl1bnNpZ25lZCBjaGFyIG5ldmVyZW5kaW5nX2FpOwkvLyBpZj0xLCB0aGVuIHdlIGRvIG5ldmVyZW5kaW5nIHJlY29yZCAoeW91IG11c3QgdXNlIGNhbmNlbCgpKQorCXVuc2lnbmVkIGludCBuc19taW47CS8vIG1hbmltYWwgYWxsbG93ZWQgZGVsYXkgYmV0d2VlbiBzYW1wbGVzIChpbiB1cykgZm9yIGFjdHVhbCBjYXJkCisJaW50IGk4MjUzX29zY19iYXNlOwkvLyAxL2ZyZXF1ZW5jeSBvZiBvbiBib2FyZCBvc2NpbGF0b3IgaW4gbnMKKwlpbnQgaXJxX2ZyZWU7CQkvLyAxPWhhdmUgYWxsb2NhdGVkIElSUQorCWludCBpcnFfYmxvY2tlZDsJLy8gMT1JUlEgbm93IHVzZXMgYW55IHN1YmRldgorCWludCBpcnFfd2FzX25vd19jbG9zZWQ7CS8vIHdoZW4gSVJRIGZpbmlzaCwgdGhlcmUncyBzdG9yZWQgaW50ODE4X21vZGUgZm9yIGxhc3QgaW50ZXJydXB0CisJaW50IGFpX21vZGU7CQkvLyB3aG8gbm93IHVzZXMgSVJRIC0gMT1BSTEgaW50LCAyPUFJMSBkbWEsIDM9QUkzIGludCwgNEFJMyBkbWEKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqbGFzdF9pbnRfc3ViOwkvLyBwdHIgdG8gc3ViZGV2aWNlIHdoaWNoIG5vdyBmaW5pc2gKKwlpbnQgYWlfYWN0X3NjYW47CS8vIGhvdyBtYW55IHNjYW5zIHdlIGZpbmlzaGVkCisJaW50IGFpX2FjdF9jaGFuOwkvLyBhY3R1YWwgcG9zaXRpb24gaW4gYWN0dWFsIHNjYW4KKwl1bnNpZ25lZCBpbnQgYWN0X2NoYW5saXN0WzE2XTsJLy8gTVVYIHNldHRpbmcgZm9yIGFjdHVhbCBBSSBvcGVyYXRpb25zCisJdW5zaWduZWQgaW50IGFjdF9jaGFubGlzdF9sZW47CS8vIGhvdyBsb25nIGlzIGFjdHVhbCBNVVggbGlzdAorCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RfcG9zOwkvLyBhY3R1YWwgcG9zaXRpb24gaW4gTVVYIGxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfc2NhbnM7CS8vIGxlbiBvZiBzY2FubGlzdAorCXVuc2lnbmVkIGludCBhaV9uX2NoYW47CS8vIGhvdyBtYW55IGNoYW5uZWxzIGlzIG1lYXN1cmVkCisJdW5zaWduZWQgaW50ICphaV9jaGFubGlzdDsJLy8gYWN0YXVsIGNoYW5saXN0CisJdW5zaWduZWQgaW50IGFpX2ZsYWdzOwkvLyBmbGFnbGlzdAorCXVuc2lnbmVkIGludCBhaV9kYXRhX2xlbjsJLy8gbGVuIG9mIGRhdGEgYnVmZmVyCisJc2hvcnQgKmFpX2RhdGE7CS8vIGRhdGEgYnVmZmVyCisJdW5zaWduZWQgaW50IGFpX3RpbWVyMTsJLy8gdGltZXJzCisJdW5zaWduZWQgaW50IGFpX3RpbWVyMjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViX2FpOwkvLyBwdHIgdG8gQUkgc3ViZGV2aWNlCisJdW5zaWduZWQgY2hhciB1c2VmaWZvOwkvLyAxPXVzZSBmaWZvCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG11eG9uZWNoYW5bXSA9IHsgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywJLy8gdXNlZCBmb3IgZ2FpbiBsaXN0IHByb2dyYW1taW5nCisJMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZgorfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbDgxOF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbDgxOF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbiwgdW5zaWduZWQgaW50IHNlZ2xlbik7CitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pOworCitzdGF0aWMgaW50IHBjbDgxOF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpOworCisjaWZkZWYgdW51c2VkCitzdGF0aWMgaW50IHNldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCk7CitzdGF0aWMgdm9pZCBydGNfZHJvcHBlZF9pcnEodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyBpbnQgcnRjX3NldGZyZXFfaXJxKGludCBmcmVxKTsKKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgSU5QVVQgTU9ERTAsIDgxOCBjYXJkcywgc2xvdyB2ZXJzaW9uCisqLworc3RhdGljIGludCBwY2w4MThfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgdGltZW91dDsKKworCS8qIHNvZnR3YXJlIHRyaWdnZXIsIERNQSBhbmQgSU5UIG9mZiAqLworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CisKKwkvKiBzZWxlY3QgY2hhbm5lbCAqLworCW91dGIobXV4b25lY2hhbltDUl9DSEFOKGluc24tPmNoYW5zcGVjKV0sIGRldi0+aW9iYXNlICsgUENMODE4X01VWCk7CisKKwkvKiBzZWxlY3QgZ2FpbiAqLworCW91dGIoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9SQU5HRSk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisKKwkJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NMUklOVCk7CisKKwkJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0FEX0xPKTsKKworCQl0aW1lb3V0ID0gMTAwOworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoaW5iKGRldi0+aW9iYXNlICsgUENMODE4X1NUQVRVUykgJiAweDEwKQorCQkJCWdvdG8gY29udl9maW5pc2g7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiB0aW1lb3V0Iik7CisJCS8qIGNsZWFyIElOVCAoY29udmVyc2lvbiBlbmQpIGZsYWcgKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTFJJTlQpOworCQlyZXR1cm4gLUVJTzsKKworCSAgICAgIGNvbnZfZmluaXNoOgorCQlkYXRhW25dID0gKChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfSEkpIDw8IDQpIHwKKwkJCShpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfTE8pID4+IDQpKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQU5BTE9HIE9VVFBVVCBNT0RFMCwgODE4IGNhcmRzCisgICBvbmx5IG9uZSBzYW1wbGUgcGVyIGNhbGwgaXMgc3VwcG9ydGVkCisqLworc3RhdGljIGludCBwY2w4MThfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgcGNsODE4X2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtuXTsKKwkJb3V0YigoZGF0YVtuXSAmIDB4MDAwZikgPDwgNCwgZGV2LT5pb2Jhc2UgKworCQkJKGNoYW4pID8gUENMNzE4X0RBMl9MTyA6IFBDTDgxOF9EQV9MTyk7CisJCW91dGIoKGRhdGFbbl0gJiAweDBmZjApID4+IDQsIGRldi0+aW9iYXNlICsKKwkJCShjaGFuKSA/IFBDTDcxOF9EQTJfSEkgOiBQQ0w4MThfREFfSEkpOworCX0KKworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBESUdJVEFMIElOUFVUIE1PREUwLCA4MTggY2FyZHMKKworICAgb25seSBvbmUgc2FtcGxlIHBlciBjYWxsIGlzIHN1cHBvcnRlZAorKi8KK3N0YXRpYyBpbnQgcGNsODE4X2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0RJX0xPKSB8CisJCShpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRElfSEkpIDw8IDgpOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIERJR0lUQUwgT1VUUFVUIE1PREUwLCA4MTggY2FyZHMKKworICAgb25seSBvbmUgc2FtcGxlIHBlciBjYWxsIGlzIHN1cHBvcnRlZAorKi8KK3N0YXRpYyBpbnQgcGNsODE4X2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCisJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE4X0RPX0xPKTsKKwlvdXRiKChzLT5zdGF0ZSA+PiA4KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fSEkpOworCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIGFuYWxvZyBpbnB1dCBpbnRlcnJ1cHQgbW9kZSAxICYgMywgODE4IGNhcmRzCisgICBvbmUgc2FtcGxlIHBlciBpbnRlcnJ1cHQgdmVyc2lvbgorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODE4X2FpX21vZGUxM19pbnQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaW50IGxvdzsKKwlpbnQgdGltZW91dCA9IDUwOwkvKiB3YWl0IG1heCA1MHVzICovCisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfU1RBVFVTKSAmIDB4MTApCisJCQlnb3RvIGNvbnZfZmluaXNoOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X1NUQVRVUyk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBtb2RlMS8zIElSUSB3aXRob3V0IERSRFkhIik7CisJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKyAgICAgIGNvbnZfZmluaXNoOgorCWxvdyA9IGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9BRF9MTyk7CisJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsICgoaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0FEX0hJKSA8PCA0KSB8IChsb3cgPj4gNCkpKTsJLy8gZ2V0IG9uZSBzYW1wbGUKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisKKwlpZiAoKGxvdyAmIDB4ZikgIT0gZGV2cHJpdi0+YWN0X2NoYW5saXN0W2RldnByaXYtPmFjdF9jaGFubGlzdF9wb3NdKSB7CS8vIGRyb3BvdXQhCisJCXJ0X3ByaW50aworCQkJKCJjb21lZGk6IEEvRCBtb2RlMS8zIElSUSAtIGNoYW5uZWwgZHJvcG91dCAleCE9JXggIVxuIiwKKwkJCShsb3cgJiAweGYpLAorCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2RldnByaXYtPmFjdF9jaGFubGlzdF9wb3NdKTsKKwkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCQkvLyBydF9wcmludGsoIkUiKTsKKwkJZGV2cHJpdi0+YWlfYWN0X3NjYW4tLTsKKwl9CisKKwlpZiAoIWRldnByaXYtPm5ldmVyZW5kaW5nX2FpKSB7CisJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA9PSAwKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIGFuYWxvZyBpbnB1dCBkbWEgbW9kZSAxICYgMywgODE4IGNhcmRzCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2RtYShpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpbnQgaSwgbGVuLCBidWZwdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzaG9ydCAqcHRyOworCisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwlkZXZwcml2LT5uZXh0X2RtYV9idWYgPSAxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmOworCWlmICgoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kKSA+IC0xIHx8IGRldnByaXYtPm5ldmVyZW5kaW5nX2FpKSB7CS8vIHN3aXRjaCBkbWEgYnVmcworCQlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEKTsKKwkJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLAorCQkJZGV2cHJpdi0+aHdkbWFwdHJbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSk7CisJCWlmIChkZXZwcml2LT5kbWFfcnVuc190b19lbmQgfHwgZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpIHsKKwkJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLAorCQkJCWRldnByaXYtPmh3ZG1hc2l6ZVtkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5sYXN0X2RtYV9ydW4pOworCQl9CisJCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCQllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisJfQorCXJ0X3ByaW50aygiY29tZWRpOiBBL0QgbW9kZTEvMyBJUlEgXG4iKTsKKworCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZC0tOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwlwdHIgPSAoc2hvcnQgKikgZGV2cHJpdi0+ZG1hYnVmWzEgLSBkZXZwcml2LT5uZXh0X2RtYV9idWZdOworCisJbGVuID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdID4+IDE7CisJYnVmcHRyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoKHB0cltidWZwdHJdICYgMHhmKSAhPSBkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+YWN0X2NoYW5saXN0X3Bvc10pIHsJLy8gZHJvcG91dCEKKwkJCXJ0X3ByaW50aworCQkJCSgiY29tZWRpOiBBL0QgbW9kZTEvMyBETUEgLSBjaGFubmVsIGRyb3BvdXQgJWQoY2FyZCkhPSVkKGNoYW5saXN0KSBhdCAlZCAhXG4iLAorCQkJCShwdHJbYnVmcHRyXSAmIDB4ZiksCisJCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2RldnByaXYtPgorCQkJCQlhY3RfY2hhbmxpc3RfcG9zXSwKKwkJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zKTsKKwkJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHB0cltidWZwdHIrK10gPj4gNCk7CS8vIGdldCBvbmUgc2FtcGxlCisKKwkJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcysrOworCQlpZiAoZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA+PSBkZXZwcml2LT5hY3RfY2hhbmxpc3RfbGVuKSB7CisJCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOworCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA9IDA7CisJCX0KKworCQlpZiAoIWRldnByaXYtPm5ldmVyZW5kaW5nX2FpKQorCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID09IDApIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkJLy8gcHJpbnRrKCJkb25lIGludCBhaTEzIGRtYVxuIik7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCX0KKworCWlmIChsZW4gPiAwKQorCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiB1bnVzZWQKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIGFuYWxvZyBpbnB1dCBkbWEgbW9kZSAxICYgMyBvdmVyIFJUQywgODE4IGNhcmRzCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2RtYV9ydGMoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJdW5zaWduZWQgaW50IHRvcDEsIHRvcDIsIGksIGJ1ZnB0cjsKKwlsb25nIG9mc19kYXRzOworCXNob3J0ICpkbWFidWYgPSAoc2hvcnQgKikgZGV2cHJpdi0+ZG1hYnVmWzBdOworCisJLy9vdXRiKDIsMHgzNzgpOworCXN3aXRjaCAoZGV2cHJpdi0+YWlfbW9kZSkgeworCWNhc2UgSU5UX1RZUEVfQUkxX0RNQV9SVEM6CisJY2FzZSBJTlRfVFlQRV9BSTNfRE1BX1JUQzoKKwkJdG1wID0gKENNT1NfUkVBRChSVENfSU5UUl9GTEFHUykgJiAweEYwKTsKKwkJbW9kX3RpbWVyKCZkZXZwcml2LT5ydGNfaXJxX3RpbWVyLAorCQkJamlmZmllcyArIEhaIC8gZGV2cHJpdi0+cnRjX2ZyZXEgKyAyICogSFogLyAxMDApOworCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQl0b3AxID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYSk7CisJCQl0b3AyID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYSk7CisJCQlpZiAodG9wMSA9PSB0b3AyKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRvcDEgIT0gdG9wMikKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJdG9wMSA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXSAtIHRvcDE7CS8vIHdoZXJlIGlzIG5vdyBETUEgaW4gYnVmZmVyCisJCXRvcDEgPj49IDE7CisJCW9mc19kYXRzID0gdG9wMSAtIGRldnByaXYtPmxhc3RfdG9wX2RtYTsJLy8gbmV3IHNhbXBsZXMgZnJvbSBsYXN0IGNhbGwKKwkJaWYgKG9mc19kYXRzIDwgMCkKKwkJCW9mc19kYXRzID0gKGRldnByaXYtPmRtYXNhbXBsc2l6ZSkgKyBvZnNfZGF0czsKKwkJaWYgKCFvZnNfZGF0cykKKwkJCXJldHVybiBJUlFfSEFORExFRDsJLy8gZXhpdD1ubyBuZXcgc2FtcGxlcyBmcm9tIGxhc3QgY2FsbAorCQkvLyBvYnNsdXogZGF0YQorCQlpID0gZGV2cHJpdi0+bGFzdF90b3BfZG1hIC0gMTsKKwkJaSAmPSAoZGV2cHJpdi0+ZG1hc2FtcGxzaXplIC0gMSk7CisKKwkJaWYgKGRtYWJ1ZltpXSAhPSBNQUdJQ19ETUFfV09SRCkgewkvLyBETUEgb3ZlcmZsb3chCisJCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIG1vZGUxLzMgRE1BIGJ1ZmZlciBvdmVyZmxvdyEiKTsKKwkJCS8vcnRfcHJpbnRrKCJJICVkIGRtYWJ1ZltpXSAlZCAlZFxuIixpLGRtYWJ1ZltpXSxkZXZwcml2LT5kbWFzYW1wbHNpemUpOworCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKwkJLy9ydF9wcmludGsoInIgJWxkICIsb2ZzX2RhdHMpOworCisJCWJ1ZnB0ciA9IGRldnByaXYtPmxhc3RfdG9wX2RtYTsKKworCQlmb3IgKGkgPSAwOyBpIDwgb2ZzX2RhdHM7IGkrKykgeworCQkJaWYgKChkbWFidWZbYnVmcHRyXSAmIDB4ZikgIT0gZGV2cHJpdi0+YWN0X2NoYW5saXN0W2RldnByaXYtPmFjdF9jaGFubGlzdF9wb3NdKSB7CS8vIGRyb3BvdXQhCisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY29tZWRpOiBBL0QgbW9kZTEvMyBETUEgLSBjaGFubmVsIGRyb3BvdXQgJWQhPSVkICFcbiIsCisJCQkJCShkbWFidWZbYnVmcHRyXSAmIDB4ZiksCisJCQkJCWRldnByaXYtPmFjdF9jaGFubGlzdFtkZXZwcml2LT4KKwkJCQkJCWFjdF9jaGFubGlzdF9wb3NdKTsKKwkJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQorCQkJCQlDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KKworCQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGRtYWJ1ZltidWZwdHIrK10gPj4gNCk7CS8vIGdldCBvbmUgc2FtcGxlCisJCQlidWZwdHIgJj0gKGRldnByaXYtPmRtYXNhbXBsc2l6ZSAtIDEpOworCisJCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID09IDApIHsKKwkJCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOworCQkJfQorCisJCQlpZiAoIWRldnByaXYtPm5ldmVyZW5kaW5nX2FpKQorCQkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA9PSAwKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCQkvL3ByaW50aygiZG9uZSBpbnQgYWkxMyBkbWFcbiIpOworCQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQkJfQorCQl9CisKKwkJZGV2cHJpdi0+bGFzdF90b3BfZG1hID0gYnVmcHRyOworCQlidWZwdHItLTsKKwkJYnVmcHRyICY9IChkZXZwcml2LT5kbWFzYW1wbHNpemUgLSAxKTsKKwkJZG1hYnVmW2J1ZnB0cl0gPSBNQUdJQ19ETUFfV09SRDsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCS8vb3V0YigwLDB4Mzc4KTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCS8vb3V0YigwLDB4Mzc4KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisjZW5kaWYKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGludGVycnVwdCBtb2RlIDEgJiAzLCA4MThIRC9IRyBjYXJkcworKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODE4X2FpX21vZGUxM19maWZvKGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBpLCBsZW4sIGxvOworCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9GSV9JTlRDTFIpOwkvLyBjbGVhciBmaWZvIGludCByZXF1ZXN0CisKKwlsbyA9IGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9GSV9TVEFUVVMpOworCisJaWYgKGxvICYgNCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIG1vZGUxLzMgRklGTyBvdmVyZmxvdyEiKTsKKwkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGxvICYgMSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIG1vZGUxLzMgRklGTyBpbnRlcnJ1cHQgd2l0aG91dCBkYXRhISIpOworCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAobG8gJiAyKSB7CisJCWxlbiA9IDUxMjsKKwl9IGVsc2UgeworCQlsZW4gPSAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlsbyA9IGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9GSV9EQVRBTE8pOworCQlpZiAoKGxvICYgMHhmKSAhPSBkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+YWN0X2NoYW5saXN0X3Bvc10pIHsJLy8gZHJvcG91dCEKKwkJCXJ0X3ByaW50aworCQkJCSgiY29tZWRpOiBBL0QgbW9kZTEvMyBGSUZPIC0gY2hhbm5lbCBkcm9wb3V0ICVkIT0lZCAhXG4iLAorCQkJCShsbyAmIDB4ZiksCisJCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2RldnByaXYtPgorCQkJCQlhY3RfY2hhbmxpc3RfcG9zXSk7CisJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAobG8gPj4gNCkgfCAoaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0RBVEFISSkgPDwgNCkpOwkvLyBnZXQgb25lIHNhbXBsZQorCisJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCQkJZGV2cHJpdi0+YWlfYWN0X3NjYW4tLTsKKwkJfQorCisJCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpCisJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPT0gMCkgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisJfQorCisJaWYgKGxlbiA+IDApCisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIElOVCBwcm9jZWR1cmUKKyovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxOChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCisJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJwcmVtYXR1cmUgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJLy9ydF9wcmludGsoIklcbiIpOworCisJc3dpdGNoIChkZXZwcml2LT5haV9tb2RlKSB7CisJY2FzZSBJTlRfVFlQRV9BSTFfRE1BOgorCWNhc2UgSU5UX1RZUEVfQUkzX0RNQToKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2RtYShpcnEsIGQpOworCWNhc2UgSU5UX1RZUEVfQUkxX0lOVDoKKwljYXNlIElOVF9UWVBFX0FJM19JTlQ6CisJCXJldHVybiBpbnRlcnJ1cHRfcGNsODE4X2FpX21vZGUxM19pbnQoaXJxLCBkKTsKKwljYXNlIElOVF9UWVBFX0FJMV9GSUZPOgorCWNhc2UgSU5UX1RZUEVfQUkzX0ZJRk86CisJCXJldHVybiBpbnRlcnJ1cHRfcGNsODE4X2FpX21vZGUxM19maWZvKGlycSwgZCk7CisjaWZkZWYgUENMODE4X01PREUxM19BTworCWNhc2UgSU5UX1RZUEVfQU8xX0lOVDoKKwljYXNlIElOVF9UWVBFX0FPM19JTlQ6CisJCXJldHVybiBpbnRlcnJ1cHRfcGNsODE4X2FvX21vZGUxM19pbnQoaXJxLCBkKTsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKworCWlmICgoIWRldi0+aXJxKSB8fCAoIWRldnByaXYtPmlycV9mcmVlKSB8fCAoIWRldnByaXYtPmlycV9ibG9ja2VkKQorCQl8fCAoIWRldnByaXYtPmFpX21vZGUpKSB7CisJCWlmIChkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQpIHsKKwkJCWlmIChkZXZwcml2LT5uZXZlcmVuZGluZ19haSAmJgorCQkJCShkZXZwcml2LT5haV9tb2RlID09IElOVF9UWVBFX0FJMV9ETUEKKwkJCQkJfHwgZGV2cHJpdi0+YWlfbW9kZSA9PQorCQkJCQlJTlRfVFlQRV9BSTNfRE1BKSkgeworCQkJCS8qIHdlIGhhZCBuZXZlcmVuZGluZyBhaSBidXQgYWlfY2FuY2VsKCkgaGFzIGJlZW4gY2FsbGVkCisJCQkJICAgdGhlIGNsZWFudXAgZnJvbSBhaV9jYW5jZWwoKSBoYXMgYmVlbiBkZWxheWVkIHVudGlsIGtub3cKKwkJCQkgICBiZWNhdXNlIHRoZSBjYXJkIGRvZXNuJ3Qgc2VlbSB0byBsaWtlIGJlaW5nIHJlcHJvZ3JhbW1lZAorCQkJCSAgIHdoaWxlIGEgRE1BIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzCisJCQkJICovCisJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCQkJCWRldnByaXYtPmFpX21vZGUgPSBkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQ7CisJCQkJZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkID0gMDsKKwkJCQlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDA7CisJCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJfQorCQkJZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkID0gMDsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCQljb21lZGlfZXJyb3IoZGV2LCAiYmFkIElSUSEiKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWNvbWVkaV9lcnJvcihkZXYsICJJUlEgZnJvbSB1bmtub3cgc291cmNlISIpOworCXJldHVybiBJUlFfTk9ORTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQU5BTE9HIElOUFVUIE1PREUgMSBvciAzIERNQSAsIDgxOCBjYXJkcworKi8KK3N0YXRpYyB2b2lkIHBjbDgxOF9haV9tb2RlMTNkbWFfaW50KGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGludCBieXRlczsKKworCXJ0X3ByaW50aygibW9kZTEzZG1hX2ludCwgbW9kZTogJWRcbiIsIG1vZGUpOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CS8vIGRpc2FibGUgZG1hCisJYnl0ZXMgPSBkZXZwcml2LT5od2RtYXNpemVbMF07CisJaWYgKCFkZXZwcml2LT5uZXZlcmVuZGluZ19haSkgeworCQlieXRlcyA9IGRldnByaXYtPmFpX25fY2hhbiAqIGRldnByaXYtPmFpX3NjYW5zICogc2l6ZW9mKHNob3J0KTsJLy8gaG93IG1hbnkKKwkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gYnl0ZXMgLyBkZXZwcml2LT5od2RtYXNpemVbMF07CS8vIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpaWwKKwkJZGV2cHJpdi0+bGFzdF9kbWFfcnVuID0gYnl0ZXMgJSBkZXZwcml2LT5od2RtYXNpemVbMF07CS8vb24gbGFzdCBkbWEgdHJhbnNmZXIgbXVzdCBiZSBtb3ZlZAorCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQtLTsKKwkJaWYgKGRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA+PSAwKQorCQkJYnl0ZXMgPSBkZXZwcml2LT5od2RtYXNpemVbMF07CisJfQorCisJZGV2cHJpdi0+bmV4dF9kbWFfYnVmID0gMDsKKwlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEKTsKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYSk7CisJc2V0X2RtYV9hZGRyKGRldnByaXYtPmRtYSwgZGV2cHJpdi0+aHdkbWFwdHJbMF0pOworCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBieXRlcyk7CisJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworCisJaWYgKG1vZGUgPT0gMSkgeworCQlkZXZwcml2LT5haV9tb2RlID0gSU5UX1RZUEVfQUkxX0RNQTsKKwkJb3V0YigweDg3IHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogUGFjZXIrSVJRK0RNQSAqLworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX21vZGUgPSBJTlRfVFlQRV9BSTNfRE1BOworCQlvdXRiKDB4ODYgfCAoZGV2LT5pcnEgPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBFeHQgdHJpZytJUlErRE1BICovCisJfTsKK30KKworI2lmZGVmIHVudXNlZAorLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQU5BTE9HIElOUFVUIE1PREUgMSBvciAzIERNQSBydGMsIDgxOCBjYXJkcworKi8KK3N0YXRpYyB2b2lkIHBjbDgxOF9haV9tb2RlMTNkbWFfcnRjKGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXNob3J0ICpwb2xlOworCisJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYSwgRE1BX01PREVfUkVBRCB8IERNQV9BVVRPSU5JVCk7CisJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWEpOworCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsIGRldnByaXYtPmh3ZG1hcHRyWzBdKTsKKwlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwgZGV2cHJpdi0+aHdkbWFzaXplWzBdKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisJZGV2cHJpdi0+bGFzdF90b3BfZG1hID0gMDsJLy9kZXZwcml2LT5od2RtYXNpemVbMF07CisJcG9sZSA9IChzaG9ydCAqKSBkZXZwcml2LT5kbWFidWZbMF07CisJZGV2cHJpdi0+ZG1hc2FtcGxzaXplID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdIC8gMjsKKwlwb2xlW2RldnByaXYtPmRtYXNhbXBsc2l6ZSAtIDFdID0gTUFHSUNfRE1BX1dPUkQ7CisjaWZkZWYgdW51c2VkCisJZGV2cHJpdi0+cnRjX2ZyZXEgPSBydGNfc2V0ZnJlcV9pcnEoMjA0OCk7CisJZGV2cHJpdi0+cnRjX2lycV90aW1lci5leHBpcmVzID0KKwkJamlmZmllcyArIEhaIC8gZGV2cHJpdi0+cnRjX2ZyZXEgKyAyICogSFogLyAxMDA7CisJZGV2cHJpdi0+cnRjX2lycV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCWRldnByaXYtPnJ0Y19pcnFfdGltZXIuZnVuY3Rpb24gPSBydGNfZHJvcHBlZF9pcnE7CisKKwlhZGRfdGltZXIoJmRldnByaXYtPnJ0Y19pcnFfdGltZXIpOworI2VuZGlmCisKKwlpZiAobW9kZSA9PSAxKSB7CisJCWRldnByaXYtPmludDgxOF9tb2RlID0gSU5UX1RZUEVfQUkxX0RNQV9SVEM7CisJCW91dGIoMHgwNyB8IChkZXYtPmlycSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIFBhY2VyK0RNQSAqLworCX0gZWxzZSB7CisJCWRldnByaXYtPmludDgxOF9tb2RlID0gSU5UX1RZUEVfQUkzX0RNQV9SVEM7CisJCW91dGIoMHgwNiB8IChkZXYtPmlycSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIEV4dCB0cmlnK0RNQSAqLworCX07Cit9CisjZW5kaWYKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQU5BTE9HIElOUFVUIE1PREUgMSBvciAzLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaW50IHBjbDgxOF9haV9jbWRfbW9kZShpbnQgbW9kZSwgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgZGl2aXNvcjEsIGRpdmlzb3IyOworCXVuc2lnbmVkIGludCBzZWdsZW47CisKKwlydF9wcmludGsoInBjbDgxOF9haV9jbWRfbW9kZSgpXG4iKTsKKwlpZiAoKCFkZXYtPmlycSkgJiYgKCFkZXZwcml2LT5kbWFfcnRjKSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiSVJRIG5vdCBkZWZpbmVkISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGV2cHJpdi0+aXJxX2Jsb2NrZWQpCisJCXJldHVybiAtRUJVU1k7CisKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCBwYWNlcgorCisJc2VnbGVuID0gY2hlY2tfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3QsCisJCWRldnByaXYtPmFpX25fY2hhbik7CisJaWYgKHNlZ2xlbiA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCXNldHVwX2NoYW5uZWxfbGlzdChkZXYsIHMsIGRldnByaXYtPmFpX2NoYW5saXN0LAorCQlkZXZwcml2LT5haV9uX2NoYW4sIHNlZ2xlbik7CisKKwljb21lZGlfdWRlbGF5KDEpOworCisJZGV2cHJpdi0+YWlfYWN0X3NjYW4gPSBkZXZwcml2LT5haV9zY2FuczsKKwlkZXZwcml2LT5haV9hY3RfY2hhbiA9IDA7CisJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAxOworCWRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCA9IDA7CisJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOworCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9IDA7CisKKwlpZiAoKGRldnByaXYtPmFpX3NjYW5zID09IDApIHx8IChkZXZwcml2LT5haV9zY2FucyA9PSAtMSkpCisJCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMTsJLy93ZWxsLCB1c2VyIHdhbnQgbmV2ZXJlbmRpbmcKKworCWlmIChtb2RlID09IDEpIHsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1M19vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywgVFJJR19ST1VORF9ORUFSRVNUKTsKKwkJaWYgKGRpdmlzb3IxID09IDEpIHsJLyogUENMNzE4LzgxOCBjcmFzaCBpZiBhbnkgZGl2aXNvciBpcyBzZXQgdG8gMSAqLworCQkJZGl2aXNvcjEgPSAyOworCQkJZGl2aXNvcjIgLz0gMjsKKwkJfQorCQlpZiAoZGl2aXNvcjIgPT0gMSkgeworCQkJZGl2aXNvcjIgPSAyOworCQkJZGl2aXNvcjEgLz0gMjsKKwkJfQorCX0KKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ05URU5BQkxFKTsJLyogZW5hYmxlIHBhY2VyICovCisKKwlzd2l0Y2ggKGRldnByaXYtPmRtYSkgeworCWNhc2UgMToJCS8vIERNQQorCWNhc2UgMzoKKwkJaWYgKGRldnByaXYtPmRtYV9ydGMgPT0gMCkgeworCQkJcGNsODE4X2FpX21vZGUxM2RtYV9pbnQobW9kZSwgZGV2LCBzKTsKKwkJfQorI2lmZGVmIHVudXNlZAorCQllbHNlIHsKKwkJCXBjbDgxOF9haV9tb2RlMTNkbWFfcnRjKG1vZGUsIGRldiwgcyk7CisJCX0KKyNlbHNlCisJCWVsc2UgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIDA6CQkvLyBJUlEKKwkJLy8gcnRfcHJpbnRrKCJJUlFcbiIpOworCQlpZiAobW9kZSA9PSAxKSB7CisJCQlkZXZwcml2LT5haV9tb2RlID0gSU5UX1RZUEVfQUkxX0lOVDsKKwkJCW91dGIoMHg4MyB8IChkZXYtPmlycSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIFBhY2VyK0lSUSAqLworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+YWlfbW9kZSA9IElOVF9UWVBFX0FJM19JTlQ7CisJCQlvdXRiKDB4ODIgfCAoZGV2LT5pcnEgPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBFeHQgdHJpZytJUlEgKi8KKwkJfTsKKwkJYnJlYWs7CisJY2FzZSAtMToJCS8vIEZJRk8KKwkJb3V0YigxLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9GSV9FTkFCTEUpOwkvLyBlbmFibGUgRklGTworCQlpZiAobW9kZSA9PSAxKSB7CisJCQlkZXZwcml2LT5haV9tb2RlID0gSU5UX1RZUEVfQUkxX0ZJRk87CisJCQlvdXRiKDB4MDMsIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBQYWNlciAqLworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+YWlfbW9kZSA9IElOVF9UWVBFX0FJM19GSUZPOworCQkJb3V0YigweDAyLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsKKwkJfTsJCS8qIEV4dCB0cmlnICovCisJCWJyZWFrOworCX0KKworCXN0YXJ0X3BhY2VyKGRldiwgbW9kZSwgZGl2aXNvcjEsIGRpdmlzb3IyKTsKKworI2lmZGVmIHVudXNlZAorCXN3aXRjaCAoZGV2cHJpdi0+YWlfbW9kZSkgeworCWNhc2UgSU5UX1RZUEVfQUkxX0RNQV9SVEM6CisJY2FzZSBJTlRfVFlQRV9BSTNfRE1BX1JUQzoKKwkJc2V0X3J0Y19pcnFfYml0KDEpOwkvKiBzdGFydCBSVEMgKi8KKwkJYnJlYWs7CisJfQorI2VuZGlmCisJcnRfcHJpbnRrKCJwY2w4MThfYWlfY21kX21vZGUoKSBlbmRcbiIpOworCXJldHVybiAwOworfQorCisjaWZkZWYgdW51c2VkCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgT1VUUFVUIE1PREUgMSBvciAzLCA4MTggY2FyZHMKKyovCisjaWZkZWYgUENMODE4X01PREUxM19BTworc3RhdGljIGludCBwY2w4MThfYW9fbW9kZTEzKGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbWVkaV90cmlnICogaXQpCit7CisJaW50IGRpdmlzb3IxLCBkaXZpc29yMjsKKworCWlmICghZGV2LT5pcnEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIklSUSBub3QgZGVmaW5lZCEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGRldnByaXYtPmlycV9ibG9ja2VkKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3RhcnRfcGFjZXIoZGV2LCAtMSwgMCwgMCk7CS8vIHN0b3AgcGFjZXIKKworCWRldnByaXYtPmludDEzX2FjdF9zY2FuID0gaXQtPm47CisJZGV2cHJpdi0+aW50MTNfYWN0X2NoYW4gPSAwOworCWRldnByaXYtPmlycV9ibG9ja2VkID0gMTsKKwlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMDsKKwlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKKworCWlmIChtb2RlID09IDEpIHsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1M19vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmaXQtPnRyaWd2YXIsIFRSSUdfUk9VTkRfTkVBUkVTVCk7CisJCWlmIChkaXZpc29yMSA9PSAxKSB7CS8qIFBDTDgxOCBjcmFzaCBpZiBhbnkgZGl2aXNvciBpcyBzZXQgdG8gMSAqLworCQkJZGl2aXNvcjEgPSAyOworCQkJZGl2aXNvcjIgLz0gMjsKKwkJfQorCQlpZiAoZGl2aXNvcjIgPT0gMSkgeworCQkJZGl2aXNvcjIgPSAyOworCQkJZGl2aXNvcjEgLz0gMjsKKwkJfQorCX0KKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ05URU5BQkxFKTsJLyogZW5hYmxlIHBhY2VyICovCisJaWYgKG1vZGUgPT0gMSkgeworCQlkZXZwcml2LT5pbnQ4MThfbW9kZSA9IElOVF9UWVBFX0FPMV9JTlQ7CisJCW91dGIoMHg4MyB8IChkZXYtPmlycSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIFBhY2VyK0lSUSAqLworCX0gZWxzZSB7CisJCWRldnByaXYtPmludDgxOF9tb2RlID0gSU5UX1RZUEVfQU8zX0lOVDsKKwkJb3V0YigweDgyIHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogRXh0IHRyaWcrSVJRICovCisJfTsKKworCXN0YXJ0X3BhY2VyKGRldiwgbW9kZSwgZGl2aXNvcjEsIGRpdmlzb3IyKTsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgT1VUUFVUIE1PREUgMSwgODE4IGNhcmRzCisqLworc3RhdGljIGludCBwY2w4MThfYW9fbW9kZTEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwljb21lZGlfdHJpZyAqIGl0KQoreworCXJldHVybiBwY2w4MThfYW9fbW9kZTEzKDEsIGRldiwgcywgaXQpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgT1VUUFVUIE1PREUgMywgODE4IGNhcmRzCisqLworc3RhdGljIGludCBwY2w4MThfYW9fbW9kZTMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwljb21lZGlfdHJpZyAqIGl0KQoreworCXJldHVybiBwY2w4MThfYW9fbW9kZTEzKDMsIGRldiwgcywgaXQpOworfQorI2VuZGlmCisjZW5kaWYKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIFN0YXJ0L3N0b3AgcGFjZXIgb25ib2FyZCBwYWNlcgorKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMikKK3sKKwlvdXRiKDB4YjQsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUkNUTCk7CisJb3V0YigweDc0LCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DVFJDVEwpOworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwlpZiAobW9kZSA9PSAxKSB7CisJCW91dGIoZGl2aXNvcjIgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DVFIyKTsKKwkJb3V0YigoZGl2aXNvcjIgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DVFIyKTsKKwkJb3V0YihkaXZpc29yMSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUjEpOworCQlvdXRiKChkaXZpc29yMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUjEpOworCX0KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIENoZWNrIGlmIGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgaXMgYnVpbGRlZCBjb3JyZWN0bHkKKyBJZiBpdCdzIG9rLCB0aGVuIHByb2dyYW0gc2Nhbi9nYWluIGxvZ2ljCisqLworc3RhdGljIGludCBjaGVja19jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuKQoreworCXVuc2lnbmVkIGludCBjaGFuc2VnbWVudFsxNl07CisJdW5zaWduZWQgaW50IGksIG5vd211c3RiZWNoYW4sIHNlZ2xlbiwgc2VncG9zOworCisJLyogY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jICovCisJaWYgKG5fY2hhbiA8IDEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5fY2hhbiA+IDEpIHsKKwkJLy8gZmlyc3QgY2hhbm5lbCBpcyBldmVyeXRpbWUgb2sKKwkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsKKwkJLy8gYnVpbGQgcGFydCBvZiBjaGFubGlzdAorCQlmb3IgKGkgPSAxLCBzZWdsZW4gPSAxOyBpIDwgbl9jaGFuOyBpKyssIHNlZ2xlbisrKSB7CisJCQkvLyBydF9wcmludGsoIiVkLiAlZCAlZFxuIixpLENSX0NIQU4oaXQtPmNoYW5saXN0W2ldKSxDUl9SQU5HRShpdC0+Y2hhbmxpc3RbaV0pKTsKKwkJCS8vIHdlIGRldGVjdCBsb29wLCB0aGlzIG11c3QgYnkgZmluaXNoCisJCQlpZiAoY2hhbmxpc3RbMF0gPT0gY2hhbmxpc3RbaV0pCisJCQkJYnJlYWs7CisJCQlub3dtdXN0YmVjaGFuID0KKwkJCQkoQ1JfQ0hBTihjaGFuc2VnbWVudFtpIC0gMV0pICsgMSkgJSBzLT5uX2NoYW47CisJCQlpZiAobm93bXVzdGJlY2hhbiAhPSBDUl9DSEFOKGNoYW5saXN0W2ldKSkgewkvLyBjaGFubmVsIGxpc3QgaXNuJ3QgY29udGlub3VzIDotKAorCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBwY2w4MTg6IGNoYW5uZWwgbGlzdCBtdXN0IGJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKKwkJCQkJZGV2LT5taW5vciwgaSwgQ1JfQ0hBTihjaGFubGlzdFtpXSksCisJCQkJCW5vd211c3RiZWNoYW4sIENSX0NIQU4oY2hhbmxpc3RbMF0pKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCS8vIHdlbGwsIHRoaXMgaXMgbmV4dCBjb3JyZWN0IGNoYW5uZWwgaW4gbGlzdAorCQkJY2hhbnNlZ21lbnRbaV0gPSBjaGFubGlzdFtpXTsKKwkJfQorCisJCS8vIGNoZWNrIHdob2xlIGNoYW5saXN0CisJCWZvciAoaSA9IDAsIHNlZ3BvcyA9IDA7IGkgPCBuX2NoYW47IGkrKykgeworCQkJLy9ydF9wcmludGsoIiVkICVkPSVkICVkXG4iLENSX0NIQU4oY2hhbnNlZ21lbnRbaSVzZWdsZW5dKSxDUl9SQU5HRShjaGFuc2VnbWVudFtpJXNlZ2xlbl0pLENSX0NIQU4oaXQtPmNoYW5saXN0W2ldKSxDUl9SQU5HRShpdC0+Y2hhbmxpc3RbaV0pKTsKKwkJCWlmIChjaGFubGlzdFtpXSAhPSBjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBwY2w4MTg6IGJhZCBjaGFubmVsIG9yIHJhbmdlIG51bWJlciEgY2hhbmxpc3RbJWldPSVkLCVkLCVkIGFuZCBub3QgJWQsJWQsJWQhXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfUkFOR0UoY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9BUkVGKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfQ0hBTihjaGFubGlzdFtpICUgc2VnbGVuXSksCisJCQkJCUNSX1JBTkdFKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKKwkJCQkJQ1JfQVJFRihjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkpOworCQkJCXJldHVybiAwOwkvLyBjaGFuL2dhaW4gbGlzdCBpcyBzdHJhbmdlCisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzZWdsZW4gPSAxOworCX0KKwlydF9wcmludGsoImNoZWNrX2NoYW5uZWxfbGlzdDogc2VnbGVuICVkXG4iLCBzZWdsZW4pOworCXJldHVybiBzZWdsZW47Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4sIHVuc2lnbmVkIGludCBzZWdsZW4pCit7CisJaW50IGk7CisKKwlkZXZwcml2LT5hY3RfY2hhbmxpc3RfbGVuID0gc2VnbGVuOworCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNlZ2xlbjsgaSsrKSB7CS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbaV0gPSBDUl9DSEFOKGNoYW5saXN0W2ldKTsKKwkJb3V0YihtdXhvbmVjaGFuW0NSX0NIQU4oY2hhbmxpc3RbaV0pXSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfTVVYKTsJLyogc2VsZWN0IGNoYW5uZWwgKi8KKwkJb3V0YihDUl9SQU5HRShjaGFubGlzdFtpXSksIGRldi0+aW9iYXNlICsgUENMODE4X1JBTkdFKTsJLyogc2VsZWN0IGdhaW4gKi8KKwl9CisKKwljb21lZGlfdWRlbGF5KDEpOworCisJLyogc2VsZWN0IGNoYW5uZWwgaW50ZXJ2YWwgdG8gc2NhbiAqLworCW91dGIoZGV2cHJpdi0+YWN0X2NoYW5saXN0WzBdIHwgKGRldnByaXYtPmFjdF9jaGFubGlzdFtzZWdsZW4gLQorCQkJCTFdIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9NVVgpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgQ2hlY2sgaWYgYm9hcmQgaXMgc3dpdGNoZWQgdG8gU0UgKDEpIG9yIERJRkYoMCkgbW9kZQorKi8KK3N0YXRpYyBpbnQgY2hlY2tfc2luZ2xlX2VuZGVkKHVuc2lnbmVkIGludCBwb3J0KQoreworCWlmIChpbmIocG9ydCArIFBDTDgxOF9TVEFUVVMpICYgMHgyMCkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IGFpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wLCBkaXZpc29yMSwgZGl2aXNvcjI7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiAxOworCX0KKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpIHsKKwkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPSBUUklHX0ZPTExPVzsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkgeworCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpCisJCWVycisrOworCisJaWYgKGVycikgeworCQlyZXR1cm4gMjsKKwl9CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5uc19taW4pIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5uc19taW47CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvKiBUUklHX0VYVCAqLworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiBzLT5uX2NoYW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSBzLT5uX2NoYW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikgeworCQlyZXR1cm4gMzsKKwl9CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoZGV2cHJpdi0+aTgyNTNfb3NjX2Jhc2UsICZkaXZpc29yMSwKKwkJCSZkaXZpc29yMiwgJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5uc19taW4pCisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+bnNfbWluOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiA0OworCX0KKworCS8qIHN0ZXAgNTogY29tcGxhaW4gYWJvdXQgc3BlY2lhbCBjaGFubGlzdCBjb25zaWRlcmF0aW9ucyAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJaWYgKCFjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LAorCQkJCWNtZC0+Y2hhbmxpc3RfbGVuKSkKKwkJCXJldHVybiA1OwkvLyBpbmNvcnJlY3QgY2hhbm5lbHMgbGlzdAorCX0KKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBhaV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IHJldHZhbDsKKworCXJ0X3ByaW50aygicGNsODE4X2FpX2NtZCgpXG4iKTsKKwlkZXZwcml2LT5haV9uX2NoYW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKKwlkZXZwcml2LT5haV9jaGFubGlzdCA9IGNtZC0+Y2hhbmxpc3Q7CisJZGV2cHJpdi0+YWlfZmxhZ3MgPSBjbWQtPmZsYWdzOworCWRldnByaXYtPmFpX2RhdGFfbGVuID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6OworCWRldnByaXYtPmFpX2RhdGEgPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmOworCWRldnByaXYtPmFpX3RpbWVyMSA9IDA7CisJZGV2cHJpdi0+YWlfdGltZXIyID0gMDsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+YWlfc2NhbnMgPSBjbWQtPnN0b3BfYXJnOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gMDsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgewkvLyBtb2RlIDEsIDMKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewkvLyBtb2RlIDEKKwkJCWRldnByaXYtPmFpX3RpbWVyMSA9IGNtZC0+Y29udmVydF9hcmc7CisJCQlyZXR2YWwgPSBwY2w4MThfYWlfY21kX21vZGUoMSwgZGV2LCBzKTsKKwkJCXJ0X3ByaW50aygicGNsODE4X2FpX2NtZCgpIGVuZFxuIik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSB7CS8vIG1vZGUgMworCQkJcmV0dXJuIHBjbDgxOF9haV9jbWRfbW9kZSgzLCBkZXYsIHMpOworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgY2FuY2VsIGFueSBtb2RlIDEtNCBBSQorKi8KK3N0YXRpYyBpbnQgcGNsODE4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWlmIChkZXZwcml2LT5pcnFfYmxvY2tlZCA+IDApIHsKKwkJcnRfcHJpbnRrKCJwY2w4MThfYWlfY2FuY2VsKClcbiIpOworCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSBkZXZwcml2LT5haV9tb2RlOworCQlkZXZwcml2LT5haV9tb2RlID0gMDsKKworCQlzd2l0Y2ggKGRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCkgeworI2lmZGVmIHVudXNlZAorCQljYXNlIElOVF9UWVBFX0FJMV9ETUFfUlRDOgorCQljYXNlIElOVF9UWVBFX0FJM19ETUFfUlRDOgorCQkJc2V0X3J0Y19pcnFfYml0KDApOwkvLyBzdG9wIFJUQworCQkJZGVsX3RpbWVyKCZkZXZwcml2LT5ydGNfaXJxX3RpbWVyKTsKKyNlbmRpZgorCQljYXNlIElOVF9UWVBFX0FJMV9ETUE6CisJCWNhc2UgSU5UX1RZUEVfQUkzX0RNQToKKwkJCWlmIChkZXZwcml2LT5uZXZlcmVuZGluZ19haSkgeworCQkJCS8qIHdhaXQgZm9yIHJ1bm5pbmcgZG1hIHRyYW5zZmVyIHRvIGVuZCwgZG8gY2xlYW51cCBpbiBpbnRlcnJ1cHQgKi8KKwkJCQlnb3RvIGVuZDsKKwkJCX0KKwkJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisJCWNhc2UgSU5UX1RZUEVfQUkxX0lOVDoKKwkJY2FzZSBJTlRfVFlQRV9BSTNfSU5UOgorCQljYXNlIElOVF9UWVBFX0FJMV9GSUZPOgorCQljYXNlIElOVF9UWVBFX0FJM19GSUZPOgorI2lmZGVmIFBDTDgxOF9NT0RFMTNfQU8KKwkJY2FzZSBJTlRfVFlQRV9BTzFfSU5UOgorCQljYXNlIElOVF9UWVBFX0FPM19JTlQ6CisjZW5kaWYKKwkJCW91dGIoaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpICYgMHg3MywgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIFN0b3AgQS9EICovCisJCQljb21lZGlfdWRlbGF5KDEpOworCQkJc3RhcnRfcGFjZXIoZGV2LCAtMSwgMCwgMCk7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0FEX0xPKTsKKwkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9BRF9MTyk7CisJCQlpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfSEkpOworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KKwkJCWlmIChkZXZwcml2LT51c2VmaWZvKSB7CS8vIEZJRk8gc2h1dGRvd24KKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0lOVENMUik7CisJCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9GSV9GTFVTSCk7CisJCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9GSV9FTkFCTEUpOworCQkJfQorCQkJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAwOworCQkJZGV2cHJpdi0+bGFzdF9pbnRfc3ViID0gczsKKwkJCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisgICAgICBlbmQ6CisJcnRfcHJpbnRrKCJwY2w4MThfYWlfY2FuY2VsKCkgZW5kXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIGNoZWNoIGZvciBQQ0w4MTgKKyovCitzdGF0aWMgaW50IHBjbDgxOF9jaGVjayh1bnNpZ25lZCBsb25nIGlvYmFzZSkKK3sKKwlvdXRiKDB4MDAsIGlvYmFzZSArIFBDTDgxOF9NVVgpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MThfTVVYKSAhPSAweDAwKQorCQlyZXR1cm4gMTsJLy90aGVyZSBpc24ndCBjYXJkCisJb3V0YigweDU1LCBpb2Jhc2UgKyBQQ0w4MThfTVVYKTsKKwljb21lZGlfdWRlbGF5KDEpOworCWlmIChpbmIoaW9iYXNlICsgUENMODE4X01VWCkgIT0gMHg1NSkKKwkJcmV0dXJuIDE7CS8vdGhlcmUgaXNuJ3QgY2FyZAorCW91dGIoMHgwMCwgaW9iYXNlICsgUENMODE4X01VWCk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlvdXRiKDB4MTgsIGlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsKKwljb21lZGlfdWRlbGF5KDEpOworCWlmIChpbmIoaW9iYXNlICsgUENMODE4X0NPTlRST0wpICE9IDB4MTgpCisJCXJldHVybiAxOwkvL3RoZXJlIGlzbid0IGNhcmQKKwlyZXR1cm4gMDsJCS8vIG9rLCBjYXJkIGV4aXN0Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyByZXNldCB3aG9sZSBQQ0wtODE4IGNhcmRzCisqLworc3RhdGljIHZvaWQgcGNsODE4X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXZwcml2LT51c2VmaWZvKSB7CS8vIEZJRk8gc2h1dGRvd24KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9GSV9JTlRDTFIpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0ZMVVNIKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9GSV9FTkFCTEUpOworCX0KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RBX0xPKTsJLy8gREFDPTBWCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9EQV9ISSk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RPX0hJKTsJLy8gRE89JDAwMDAKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RPX0xPKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTlRFTkFCTEUpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfTVVYKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NMUklOVCk7CisJb3V0YigweGIwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DVFJDVEwpOwkvKiBTdG9wIHBhY2VyICovCisJb3V0YigweDcwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DVFJDVEwpOworCW91dGIoMHgzMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ1RSQ1RMKTsKKwlpZiAodGhpc19ib2FyZC0+aXNfODE4KSB7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfUkFOR0UpOworCX0gZWxzZSB7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MThfREEyX0xPKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxOF9EQTJfSEkpOworCX0KK30KKworI2lmZGVmIHVudXNlZAorLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBFbmFibGUoMSkvZGlzYWJsZSgwKSBwZXJpb2RpYyBpbnRlcnJ1cHRzIGZyb20gUlRDCisqLworc3RhdGljIGludCBzZXRfcnRjX2lycV9iaXQodW5zaWduZWQgY2hhciBiaXQpCit7CisJdW5zaWduZWQgY2hhciB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChiaXQgPT0gMSkgeworCQlSVENfdGltZXJfbG9jaysrOworCQlpZiAoUlRDX3RpbWVyX2xvY2sgPiAxKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJUlRDX3RpbWVyX2xvY2stLTsKKwkJaWYgKFJUQ190aW1lcl9sb2NrIDwgMCkKKwkJCVJUQ190aW1lcl9sb2NrID0gMDsKKwkJaWYgKFJUQ190aW1lcl9sb2NrID4gMCkKKwkJCXJldHVybiAwOworCX0KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCXZhbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJaWYgKGJpdCkgeworCQl2YWwgfD0gUlRDX1BJRTsKKwl9IGVsc2UgeworCQl2YWwgJj0gflJUQ19QSUU7CisJfQorCUNNT1NfV1JJVEUodmFsLCBSVENfQ09OVFJPTCk7CisJQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKTsKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBSZXN0YXJ0IFJUQyBpZiBzb21ldGhpbmcgc3RvcCBpdCAoeG50cGQgZXZlcnkgMTEgbWlucyBvciBsYXJnZSBJREUgdHJhbnNmZXJzKQorKi8KK3N0YXRpYyB2b2lkIHJ0Y19kcm9wcGVkX2lycSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9ICh2b2lkICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB0bXA7CisKKwlzd2l0Y2ggKGRldnByaXYtPmludDgxOF9tb2RlKSB7CisJY2FzZSBJTlRfVFlQRV9BSTFfRE1BX1JUQzoKKwljYXNlIElOVF9UWVBFX0FJM19ETUFfUlRDOgorCQltb2RfdGltZXIoJmRldnByaXYtPnJ0Y19pcnFfdGltZXIsCisJCQlqaWZmaWVzICsgSFogLyBkZXZwcml2LT5ydGNfZnJlcSArIDIgKiBIWiAvIDEwMCk7CisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQljbGkoKTsKKwkJdG1wID0gKENNT1NfUkVBRChSVENfSU5UUl9GTEFHUykgJiAweEYwKTsJLyogcmVzdGFydCAqLworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJYnJlYWs7CisJfTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBTZXQgZnJlcXVlbmN5IG9mIGludGVycnVwdHMgZnJvbSBSVEMKKyovCitzdGF0aWMgaW50IHJ0Y19zZXRmcmVxX2lycShpbnQgZnJlcSkKK3sKKwlpbnQgdG1wID0gMDsKKwlpbnQgcnRjX2ZyZXE7CisJdW5zaWduZWQgY2hhciB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChmcmVxIDwgMikKKwkJZnJlcSA9IDI7CisJaWYgKGZyZXEgPiA4MTkyKQorCQlmcmVxID0gODE5MjsKKworCXdoaWxlIChmcmVxID4gKDEgPDwgdG1wKSkKKwkJdG1wKys7CisKKwlydGNfZnJlcSA9IDEgPDwgdG1wOworCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisJdmFsID0gQ01PU19SRUFEKFJUQ19GUkVRX1NFTEVDVCkgJiAweGYwOworCXZhbCB8PSAoMTYgLSB0bXApOworCUNNT1NfV1JJVEUodmFsLCBSVENfRlJFUV9TRUxFQ1QpOworCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCXJldHVybiBydGNfZnJlcTsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEZyZWUgYW55IHJlc291cmNlcyB0aGF0IHdlIGhhdmUgY2xhaW1lZAorKi8KK3N0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8vcnRfcHJpbnRrKCJmcmVlX3Jlc291cmNlKClcbiIpOworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJcGNsODE4X2FpX2NhbmNlbChkZXYsIGRldnByaXYtPnN1Yl9haSk7CisJCXBjbDgxOF9yZXNldChkZXYpOworCQlpZiAoZGV2cHJpdi0+ZG1hKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1ZlswXSkKKwkJCWZyZWVfcGFnZXMoZGV2cHJpdi0+ZG1hYnVmWzBdLCBkZXZwcml2LT5kbWFwYWdlc1swXSk7CisJCWlmIChkZXZwcml2LT5kbWFidWZbMV0pCisJCQlmcmVlX3BhZ2VzKGRldnByaXYtPmRtYWJ1ZlsxXSwgZGV2cHJpdi0+ZG1hcGFnZXNbMV0pOworI2lmZGVmIHVudXNlZAorCQlpZiAoZGV2cHJpdi0+cnRjX2lycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXZwcml2LT5ydGNfaXJxLCBkZXYpOworCQlpZiAoKGRldnByaXYtPmRtYV9ydGMpICYmIChSVENfbG9jayA9PSAxKSkgeworCQkJaWYgKGRldnByaXYtPnJ0Y19pb2Jhc2UpCisJCQkJcmVsZWFzZV9yZWdpb24oZGV2cHJpdi0+cnRjX2lvYmFzZSwKKwkJCQkJZGV2cHJpdi0+cnRjX2lvc2l6ZSk7CisJCX0KKwkJaWYgKGRldnByaXYtPmRtYV9ydGMpCisJCQlSVENfbG9jay0tOworI2VuZGlmCisJfQorCisJaWYgKGRldi0+aXJxKQorCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBkZXZwcml2LT5pb19yYW5nZSk7CisJLy9ydF9wcmludGsoImZyZWVfcmVzb3VyY2UoKSBlbmRcbiIpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIEluaXRpYWxpemF0aW9uCisKKyovCitzdGF0aWMgaW50IHBjbDgxOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxLCBkbWE7CisJdW5zaWduZWQgbG9uZyBwYWdlczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNsODE4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OwkvKiBDYW4ndCBhbGxvYyBtZW0gKi8KKworCS8qIGNsYWltIG91ciBJL08gc3BhY2UgKi8KKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w4MTg6ICBib2FyZD0lcywgaW9wb3J0PTB4JTAzbHgiLAorCQlkZXYtPm1pbm9yLCB0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworCWRldnByaXYtPmlvX3JhbmdlID0gdGhpc19ib2FyZC0+aW9fcmFuZ2U7CisJaWYgKCh0aGlzX2JvYXJkLT5maWZvKSAmJiAoaXQtPm9wdGlvbnNbMl0gPT0gLTEpKSB7CS8vIHdlJ3ZlIGJvYXJkIHdpdGggRklGTyBhbmQgd2Ugd2FudCB0byB1c2UgRklGTworCQlkZXZwcml2LT5pb19yYW5nZSA9IFBDTHgxeEZJRk9fUkFOR0U7CisJCWRldnByaXYtPnVzZWZpZm8gPSAxOworCX0KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgZGV2cHJpdi0+aW9fcmFuZ2UsICJwY2w4MTgiKSkgeworCQlydF9wcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlpZiAocGNsODE4X2NoZWNrKGlvYmFzZSkpIHsKKwkJcnRfcHJpbnRrKCIsIEkgY2FuJ3QgZGV0ZWN0IGJvYXJkLiBGQUlMIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIHNldCB1cCBzb21lIG5hbWUgc3R1ZmYgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCS8qIGdyYWIgb3VyIElSUSAqLworCWlycSA9IDA7CisJaWYgKHRoaXNfYm9hcmQtPklSUWJpdHMgIT0gMCkgewkvKiBib2FyZCBzdXBwb3J0IElSUSAqLworCQlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KKwkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIElSUSAldSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKKwkJCQkJaXJxKTsKKwkJCQlpcnEgPSAwOwkvKiBCYWQgSVJRICovCisJCQl9IGVsc2UgeworCQkJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfcGNsODE4LCAwLAorCQkJCQkJInBjbDgxOCIsIGRldikpIHsKKwkJCQkJcnRfcHJpbnRrCisJCQkJCQkoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAldSwgRElTQUJMSU5HIElUIiwKKwkJCQkJCWlycSk7CisJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KKwkJCQl9IGVsc2UgeworCQkJCQlydF9wcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlkZXYtPmlycSA9IGlycTsKKwlpZiAoaXJxKSB7CisJCWRldnByaXYtPmlycV9mcmVlID0gMTsKKwl9IC8qIDE9d2UgaGF2ZSBhbGxvY2F0ZWQgaXJxICovCisJZWxzZSB7CisJCWRldnByaXYtPmlycV9mcmVlID0gMDsKKwl9CisJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAwOwkvKiBudW1iZXIgb2Ygc3ViZGV2aWNlIHdoaWNoIHVzZSBJUlEgKi8KKwlkZXZwcml2LT5haV9tb2RlID0gMDsJLyogbW9kZSBvZiBpcnEgKi8KKworI2lmZGVmIHVudXNlZAorCS8qIGdyYWIgUlRDIGZvciBETUEgb3BlcmF0aW9ucyAqLworCWRldnByaXYtPmRtYV9ydGMgPSAwOworCWlmIChpdC0+b3B0aW9uc1syXSA+IDApIHsJLy8gd2Ugd2FudCB0byB1c2UgRE1BCisJCWlmIChSVENfbG9jayA9PSAwKSB7CisJCQlpZiAoIXJlcXVlc3RfcmVnaW9uKFJUQ19QT1JUKDApLCBSVENfSU9fRVhURU5ULAorCQkJCQkicGNsODE4IChSVEMpIikpCisJCQkJZ290byBub19ydGM7CisJCX0KKwkJZGV2cHJpdi0+cnRjX2lvYmFzZSA9IFJUQ19QT1JUKDApOworCQlkZXZwcml2LT5ydGNfaW9zaXplID0gUlRDX0lPX0VYVEVOVDsKKwkJUlRDX2xvY2srKzsKKwkJaWYgKCFjb21lZGlfcmVxdWVzdF9pcnEoUlRDX0lSUSwKKwkJCQlpbnRlcnJ1cHRfcGNsODE4X2FpX21vZGUxM19kbWFfcnRjLCAwLAorCQkJCSJwY2w4MTggRE1BIChSVEMpIiwgZGV2KSkgeworCQkJZGV2cHJpdi0+ZG1hX3J0YyA9IDE7CisJCQlkZXZwcml2LT5ydGNfaXJxID0gUlRDX0lSUTsKKwkJCXJ0X3ByaW50aygiLCBkbWFfaXJxPSV1IiwgZGV2cHJpdi0+cnRjX2lycSk7CisJCX0gZWxzZSB7CisJCQlSVENfbG9jay0tOworCQkJaWYgKFJUQ19sb2NrID09IDApIHsKKwkJCQlpZiAoZGV2cHJpdi0+cnRjX2lvYmFzZSkKKwkJCQkJcmVsZWFzZV9yZWdpb24oZGV2cHJpdi0+cnRjX2lvYmFzZSwKKwkJCQkJCWRldnByaXYtPnJ0Y19pb3NpemUpOworCQkJfQorCQkJZGV2cHJpdi0+cnRjX2lvYmFzZSA9IDA7CisJCQlkZXZwcml2LT5ydGNfaW9zaXplID0gMDsKKwkJfQorCX0KKworICAgICAgbm9fcnRjOgorI2VuZGlmCisJLyogZ3JhYiBvdXIgRE1BICovCisJZG1hID0gMDsKKwlkZXZwcml2LT5kbWEgPSBkbWE7CisJaWYgKChkZXZwcml2LT5pcnFfZnJlZSA9PSAwKSAmJiAoZGV2cHJpdi0+ZG1hX3J0YyA9PSAwKSkKKwkJZ290byBub19kbWE7CS8qIGlmIHdlIGhhdmVuJ3QgSVJRLCB3ZSBjYW4ndCB1c2UgRE1BICovCisJaWYgKHRoaXNfYm9hcmQtPkRNQWJpdHMgIT0gMCkgewkvKiBib2FyZCBzdXBwb3J0IERNQSAqLworCQlkbWEgPSBpdC0+b3B0aW9uc1syXTsKKwkJaWYgKGRtYSA8IDEpCisJCQlnb3RvIG5vX2RtYTsJLyogRE1BIGRpc2FibGVkICovCisJCWlmICgoKDEgPDwgZG1hKSAmIHRoaXNfYm9hcmQtPkRNQWJpdHMpID09IDApIHsKKwkJCXJ0X3ByaW50aygiLCBETUEgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsIEZBSUwhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwkvKiBCYWQgRE1BICovCisJCX0KKwkJcmV0ID0gcmVxdWVzdF9kbWEoZG1hLCAicGNsODE4Iik7CisJCWlmIChyZXQpIHsKKwkJCXJ0X3ByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BICV1LCBGQUlMIVxuIiwgZG1hKTsKKwkJCXJldHVybiAtRUJVU1k7CS8qIERNQSBpc24ndCBmcmVlICovCisJCX0KKwkJZGV2cHJpdi0+ZG1hID0gZG1hOworCQlydF9wcmludGsoIiwgZG1hPSV1IiwgZG1hKTsKKwkJcGFnZXMgPSAyOwkvKiB3ZSBuZWVkIDE2S0IgKi8KKwkJZGV2cHJpdi0+ZG1hYnVmWzBdID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VzKTsKKwkJaWYgKCFkZXZwcml2LT5kbWFidWZbMF0pIHsKKwkJCXJ0X3ByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlciwgRkFJTCFcbiIpOworCQkJLyogbWF5YmUgZXhwZXJpbWVudCB3aXRoIHRyeV90b19mcmVlX3BhZ2VzKCkgd2lsbCBoZWxwIC4uLi4gKi8KKwkJCXJldHVybiAtRUJVU1k7CS8qIG5vIGJ1ZmZlciA6LSggKi8KKwkJfQorCQlkZXZwcml2LT5kbWFwYWdlc1swXSA9IHBhZ2VzOworCQlkZXZwcml2LT5od2RtYXB0clswXSA9IHZpcnRfdG9fYnVzKCh2b2lkICopZGV2cHJpdi0+ZG1hYnVmWzBdKTsKKwkJZGV2cHJpdi0+aHdkbWFzaXplWzBdID0gKDEgPDwgcGFnZXMpICogUEFHRV9TSVpFOworCQkvL3J0X3ByaW50aygiJWQgJWQgJWxkLCAiLGRldnByaXYtPmRtYXBhZ2VzWzBdLGRldnByaXYtPmh3ZG1hc2l6ZVswXSxQQUdFX1NJWkUpOworCQlpZiAoZGV2cHJpdi0+ZG1hX3J0YyA9PSAwKSB7CS8vIHdlIG11c3QgZG8gZHVibGUgYnVmZiA6LSgKKwkJCWRldnByaXYtPmRtYWJ1ZlsxXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CisJCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlsxXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQkJZGV2cHJpdi0+ZG1hcGFnZXNbMV0gPSBwYWdlczsKKwkJCWRldnByaXYtPmh3ZG1hcHRyWzFdID0KKwkJCQl2aXJ0X3RvX2J1cygodm9pZCAqKWRldnByaXYtPmRtYWJ1ZlsxXSk7CisJCQlkZXZwcml2LT5od2RtYXNpemVbMV0gPSAoMSA8PCBwYWdlcykgKiBQQUdFX1NJWkU7CisJCX0KKwl9CisKKyAgICAgIG5vX2RtYToKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpZiAoIXRoaXNfYm9hcmQtPm5fYWljaGFuX3NlKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCQlkZXZwcml2LT5zdWJfYWkgPSBzOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJCWlmIChjaGVja19zaW5nbGVfZW5kZWQoZGV2LT5pb2Jhc2UpKSB7CisJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbl9zZTsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ09NTU9OIHwgU0RGX0dST1VORDsKKwkJCXByaW50aygiLCAlZGNoYW5zIFMuRS4gREFDIiwgcy0+bl9jaGFuKTsKKwkJfSBlbHNlIHsKKwkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuX2RpZmY7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0RJRkY7CisJCQlwcmludGsoIiwgJWRjaGFucyBESUZGIERBQyIsIHMtPm5fY2hhbik7CisJCX0KKwkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmFpX21heGRhdGE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHMtPm5fY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5haV9yYW5nZV90eXBlOworCQlzLT5jYW5jZWwgPSBwY2w4MThfYWlfY2FuY2VsOworCQlzLT5pbnNuX3JlYWQgPSBwY2w4MThfYWlfaW5zbl9yZWFkOworCQlpZiAoKGlycSkgfHwgKGRldnByaXYtPmRtYV9ydGMpKSB7CisJCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCQlzLT5kb19jbWR0ZXN0ID0gYWlfY21kdGVzdDsKKwkJCXMtPmRvX2NtZCA9IGFpX2NtZDsKKwkJfQorCQlpZiAodGhpc19ib2FyZC0+aXNfODE4KSB7CisJCQlpZiAoKGl0LT5vcHRpb25zWzRdID09IDEpIHx8IChpdC0+b3B0aW9uc1s0XSA9PSAxMCkpCisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcGNsODE4bF9oX2FpOwkvLyBzZWNvbmRhcnkgcmFuZ2UgbGlzdCBqdW1wZXIgc2VsZWN0YWJsZQorCQl9IGVsc2UgeworCQkJc3dpdGNoIChpdC0+b3B0aW9uc1s0XSkgeworCQkJY2FzZSAwOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMl81OworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlNzE4X2JpcG9sYXIxOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlNzE4X2JpcG9sYXIwXzU7CisJCQkJYnJlYWs7CisJCQljYXNlIDY6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5pcG9sYXIxMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgNzoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmlwb2xhcjU7CisJCQkJYnJlYWs7CisJCQljYXNlIDg6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U3MThfdW5pcG9sYXIyOworCQkJCWJyZWFrOworCQkJY2FzZSA5OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlNzE4X3VuaXBvbGFyMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWlmICghdGhpc19ib2FyZC0+bl9hb2NoYW4pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YW9fbWF4ZGF0YTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+YW9fcmFuZ2VfdHlwZTsKKwkJcy0+aW5zbl9yZWFkID0gcGNsODE4X2FvX2luc25fcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9IHBjbDgxOF9hb19pbnNuX3dyaXRlOworI2lmZGVmIHVudXNlZAorI2lmZGVmIFBDTDgxOF9NT0RFMTNfQU8KKwkJaWYgKGlycSkgeworCQkJcy0+dHJpZ1sxXSA9IHBjbDgxOF9hb19tb2RlMTsKKwkJCXMtPnRyaWdbM10gPSBwY2w4MThfYW9fbW9kZTM7CisJCX0KKyNlbmRpZgorI2VuZGlmCisJCWlmICh0aGlzX2JvYXJkLT5pc184MTgpIHsKKwkJCWlmICgoaXQtPm9wdGlvbnNbNF0gPT0gMSkgfHwgKGl0LT5vcHRpb25zWzRdID09IDEwKSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQkJaWYgKGl0LT5vcHRpb25zWzRdID09IDIpCisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaXQtPm9wdGlvbnNbNV0gPT0gMSkgfHwgKGl0LT5vcHRpb25zWzVdID09IDEwKSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQkJaWYgKGl0LT5vcHRpb25zWzVdID09IDIpCisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJfQorCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCWlmICghdGhpc19ib2FyZC0+bl9kaWNoYW4pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9kaWNoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gcGNsODE4X2RpX2luc25fYml0czsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwlpZiAoIXRoaXNfYm9hcmQtPm5fZG9jaGFuKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHBjbDgxOF9kb19pbnNuX2JpdHM7CisJfQorCisJLyogc2VsZWN0IDEvMTBNSHogb3NjaWxhdG9yICovCisJaWYgKChpdC0+b3B0aW9uc1szXSA9PSAwKSB8fCAoaXQtPm9wdGlvbnNbM10gPT0gMTApKSB7CisJCWRldnByaXYtPmk4MjUzX29zY19iYXNlID0gMTAwOworCX0gZWxzZSB7CisJCWRldnByaXYtPmk4MjUzX29zY19iYXNlID0gMTAwMDsKKwl9CisKKwkvKiBtYXggc2FtcGxpbmcgc3BlZWQgKi8KKwlkZXZwcml2LT5uc19taW4gPSB0aGlzX2JvYXJkLT5uc19taW47CisKKwlpZiAoIXRoaXNfYm9hcmQtPmlzXzgxOCkgeworCQlpZiAoKGl0LT5vcHRpb25zWzZdID09IDEpIHx8IChpdC0+b3B0aW9uc1s2XSA9PSAxMDApKQorCQkJZGV2cHJpdi0+bnNfbWluID0gMTAwMDA7CS8qIGV4dGVuZGVkIFBDTDcxOCB0byAxMDBrSHogREFDICovCisJfQorCisJcGNsODE4X3Jlc2V0KGRldik7CisKKwlydF9wcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBSZW1vdmVzIGRldmljZQorICovCitzdGF0aWMgaW50IHBjbDgxOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLy8gIHJ0X3ByaW50aygiY29tZWRpJWQ6IHBjbDgxODogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlmcmVlX3Jlc291cmNlcyhkZXYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlZDNhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzI0LmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcGNtNzI0LmMKKworICAgIERyZXcgQ3NpbGxhZyA8ZHJld19jc2lsbGFnQHlhaG9vLmNvbT4KKworICAgIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmQ6CisgICAgIGNhcmQ6ICAgUENNLTM3MjQKKyAgICAgZHJpdmVyOiBwY20zNzI0CisKKyAgICBPcHRpb25zIGZvciBQQ00tMzcyNAorICAgICBbMF0gLSBJTyBCYXNlCisqLworLyoKK0RyaXZlcjogcGNtMzcyNAorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ00tMzcyNAorQXV0aG9yOiBEcmV3IENzaWxsYWcgPGRyZXdfY3NpbGxhZ0B5YWhvby5jb20+CitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ00tMzcyNCAocGNtNzI0KQorU3RhdHVzOiB0ZXN0ZWQKKworVGhpcyBpcyBkcml2ZXIgZm9yIGRpZ2l0YWwgSS9PIGJvYXJkcyBQQ00tMzcyNCB3aXRoIDQ4IERJTy4KK0l0IG5lZWRzIDgyNTUubyBmb3Igb3BlcmF0aW9ucyBhbmQgb25seSBpbW1lZGlhdGUgbW9kZSBpcyBzdXBwb3J0ZWQuCitTZWUgdGhlIHNvdXJjZSBmb3IgY29uZmlndXJhdGlvbiBkZXRhaWxzLgorCitDb3B5L3Bhc3RlZC9oYWNrZWQgZnJvbSBwY203MjQuYworKi8KKy8qCisgKiBjaGVja19kcml2ZXIgb3ZlcnJpZGVzOgorICogICBzdHJ1Y3QgY29tZWRpX2luc24KKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiODI1NS5oIgorCisjZGVmaW5lIFBDTTM3MjRfU0laRSAgIDE2CisjZGVmaW5lIFNJWkVfODI1NQk0CisKKyNkZWZpbmUgQlVGX0MwIDB4MQorI2RlZmluZSBCVUZfQjAgMHgyCisjZGVmaW5lIEJVRl9BMCAweDQKKyNkZWZpbmUgQlVGX0MxIDB4OAorI2RlZmluZSBCVUZfQjEgMHgxMAorI2RlZmluZSBCVUZfQTEgMHgyMAorCisjZGVmaW5lIEdBVEVfQTAgMHg0CisjZGVmaW5lIEdBVEVfQjAJMHgyCisjZGVmaW5lIEdBVEVfQzAJMHgxCisjZGVmaW5lIEdBVEVfQTEJMHgyMAorI2RlZmluZSBHQVRFX0IxCTB4MTAKKyNkZWZpbmUgR0FURV9DMSAweDgKKworLyogZnJvbSA4MjU1LmMgKi8KKyNkZWZpbmUgQ1JfQ1cJCTB4ODAKKyNkZWZpbmUgXzgyNTVfQ1IgMworI2RlZmluZSBDUl9CX0lPCQkweDAyCisjZGVmaW5lIENSX0JfTU9ERQkweDA0CisjZGVmaW5lIENSX0NfSU8JICAgICAgICAweDA5CisjZGVmaW5lIENSX0FfSU8JCTB4MTAKKyNkZWZpbmUgQ1JfQV9NT0RFKGEpCSgoYSk8PDUpCisjZGVmaW5lIENSX0NXCQkweDgwCisKK3N0YXRpYyBpbnQgcGNtMzcyNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY20zNzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBwY20zNzI0X2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOwkvLyBkcml2ZXIgbmFtZQorCWludCBkaW87CQkvLyBudW0gb2YgRElPCisJaW50IG51bW9mcG9ydHM7CQkvLyBudW0gb2YgODI1NSBzdWJkZXZpY2VzCisJdW5zaWduZWQgaW50IElSUWJpdHM7CS8vIGFsbG93ZWQgaW50ZXJydXB0cworCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIElPIHNwYWNlCit9OworCisvL3VzZWQgdG8gdHJhY2sgY29uZmlndXJlZCBkaW9zCitzdHJ1Y3QgcHJpdl9wY20zNzI0IHsKKwlpbnQgZGlvXzE7CisJaW50IGRpb18yOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY20zNzI0X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbTM3MjQiLCA0OCwgMiwgMHgwMGZjLCBQQ00zNzI0X1NJWkUsfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY20zNzI0X2JvYXJkKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBwY20zNzI0X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNtMzcyNCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY20zNzI0IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY20zNzI0X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY20zNzI0X2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY20zNzI0X2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNtMzcyNCk7CisKKy8vICAgICAgICAgIChzZXRxIGMtYmFzaWMtb2Zmc2V0IDgpCisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVfY2IoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGFyZzsKKwl1bnNpZ25lZCBjaGFyIGluYnJlczsKKwkvL3ByaW50aygiODI1NWNiICVkICVkICVkICVseFxuIiwgZGlyLHBvcnQsZGF0YSxhcmcpOworCWlmIChkaXIpIHsKKwkJLy9wcmludGsoIjgyNTUgY2IgICBvdXRiKCV4LCAlbHgpXG4iLCBkYXRhLCBpb2Jhc2UrcG9ydCk7CisJCW91dGIoZGF0YSwgaW9iYXNlICsgcG9ydCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWluYnJlcyA9IGluYihpb2Jhc2UgKyBwb3J0KTsKKwkJLy9wcmludGsoIjgyNTUgY2IgICBpbmIoJWx4KSA9ICV4XG4iLCBpb2Jhc2UrcG9ydCwgaW5icmVzKTsKKwkJcmV0dXJuIGluYnJlczsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29tcHV0ZV9idWZmZXIoaW50IGNvbmZpZywgaW50IGRldm5vLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogMSBpbiBpb19iaXRzIGluZGljYXRlcyBvdXRwdXQgKi8KKwlpZiAocy0+aW9fYml0cyAmIDB4MDAwMGZmKSB7CisJCWlmIChkZXZubyA9PSAwKSB7CisJCQljb25maWcgfD0gQlVGX0EwOworCQl9IGVsc2UgeworCQkJY29uZmlnIHw9IEJVRl9BMTsKKwkJfQorCX0KKwlpZiAocy0+aW9fYml0cyAmIDB4MDBmZjAwKSB7CisJCWlmIChkZXZubyA9PSAwKSB7CisJCQljb25maWcgfD0gQlVGX0IwOworCQl9IGVsc2UgeworCQkJY29uZmlnIHw9IEJVRl9CMTsKKwkJfQorCX0KKwlpZiAocy0+aW9fYml0cyAmIDB4ZmYwMDAwKSB7CisJCWlmIChkZXZubyA9PSAwKSB7CisJCQljb25maWcgfD0gQlVGX0MwOworCQl9IGVsc2UgeworCQkJY29uZmlnIHw9IEJVRl9DMTsKKwkJfQorCX0KKwlyZXR1cm4gY29uZmlnOworfQorCitzdGF0aWMgdm9pZCBkb18zNzI0X2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBjaGFuc3BlYykKK3sKKwlpbnQgY29uZmlnOworCWludCBidWZmZXJfY29uZmlnOworCXVuc2lnbmVkIGxvbmcgcG9ydF84MjU1X2NmZzsKKworCWNvbmZpZyA9IENSX0NXOworCWJ1ZmZlcl9jb25maWcgPSAwOworCisJLyogMSBpbiBpb19iaXRzIGluZGljYXRlcyBvdXRwdXQsIDEgaW4gY29uZmlnIGluZGljYXRlcyBpbnB1dCAqLworCWlmICghKHMtPmlvX2JpdHMgJiAweDAwMDBmZikpIHsKKwkJY29uZmlnIHw9IENSX0FfSU87CisJfQorCWlmICghKHMtPmlvX2JpdHMgJiAweDAwZmYwMCkpIHsKKwkJY29uZmlnIHw9IENSX0JfSU87CisJfQorCWlmICghKHMtPmlvX2JpdHMgJiAweGZmMDAwMCkpIHsKKwkJY29uZmlnIHw9IENSX0NfSU87CisJfQorCisJYnVmZmVyX2NvbmZpZyA9IGNvbXB1dGVfYnVmZmVyKDAsIDAsIGRldi0+c3ViZGV2aWNlcyk7CisJYnVmZmVyX2NvbmZpZyA9IGNvbXB1dGVfYnVmZmVyKGJ1ZmZlcl9jb25maWcsIDEsIChkZXYtPnN1YmRldmljZXMpICsgMSk7CisKKwlpZiAocyA9PSBkZXYtPnN1YmRldmljZXMpIHsKKwkJcG9ydF84MjU1X2NmZyA9IGRldi0+aW9iYXNlICsgXzgyNTVfQ1I7CisJfSBlbHNlIHsKKwkJcG9ydF84MjU1X2NmZyA9IGRldi0+aW9iYXNlICsgU0laRV84MjU1ICsgXzgyNTVfQ1I7CisJfQorCW91dGIoYnVmZmVyX2NvbmZpZywgZGV2LT5pb2Jhc2UgKyA4KTsJLyogdXBkYXRlIGJ1ZmZlciByZWdpc3RlciAqLworCS8vcHJpbnRrKCJwY20zNzI0IGJ1ZmZlcl9jb25maWcgKCVseCkgJWQsICV4XG4iLCBkZXYtPmlvYmFzZSArIF84MjU1X0NSLCBjaGFuc3BlYywgYnVmZmVyX2NvbmZpZyk7CisJb3V0Yihjb25maWcsIHBvcnRfODI1NV9jZmcpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfY2hhbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgY2hhbnNwZWMpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaW50IGdhdGVjZmc7CisJc3RydWN0IHByaXZfcGNtMzcyNCAqcHJpdjsKKworCWdhdGVjZmcgPSAwOworCXByaXYgPSAoc3RydWN0IHByaXZfcGNtMzcyNCAqKSAoZGV2LT5wcml2YXRlKTsKKworCW1hc2sgPSAxIDw8IENSX0NIQU4oY2hhbnNwZWMpOworCWlmIChzID09IGRldi0+c3ViZGV2aWNlcykgewkvLyBzdWJkZXYgMAorCQlwcml2LT5kaW9fMSB8PSBtYXNrOworCX0gZWxzZSB7CQkvL3N1YmRldiAxCisJCXByaXYtPmRpb18yIHw9IG1hc2s7CisJfQorCWlmIChwcml2LT5kaW9fMSAmIDB4ZmYwMDAwKSB7CisJCWdhdGVjZmcgfD0gR0FURV9DMDsKKwl9CisJaWYgKHByaXYtPmRpb18xICYgMHhmZjAwKSB7CisJCWdhdGVjZmcgfD0gR0FURV9CMDsKKwl9CisJaWYgKHByaXYtPmRpb18xICYgMHhmZikgeworCQlnYXRlY2ZnIHw9IEdBVEVfQTA7CisJfQorCWlmIChwcml2LT5kaW9fMiAmIDB4ZmYwMDAwKSB7CisJCWdhdGVjZmcgfD0gR0FURV9DMTsKKwl9CisJaWYgKHByaXYtPmRpb18yICYgMHhmZjAwKSB7CisJCWdhdGVjZmcgfD0gR0FURV9CMTsKKwl9CisJaWYgKHByaXYtPmRpb18yICYgMHhmZikgeworCQlnYXRlY2ZnIHw9IEdBVEVfQTE7CisJfQorCS8vICAgICAgcHJpbnRrKCJnYXRlIGNvbnRyb2wgJXhcbiIsIGdhdGVjZmcpOworCW91dGIoZ2F0ZWNmZywgZGV2LT5pb2Jhc2UgKyA5KTsKK30KKworLyogb3ZlcnJpZGluZyB0aGUgODI1NSBpbnNuIGNvbmZpZyAqLworc3RhdGljIGludCBzdWJkZXZfMzcyNF9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAobWFzayAmIDB4MDAwMGZmKSB7CisJCWJpdHMgPSAweDAwMDBmZjsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDAwZmYwMCkgeworCQliaXRzID0gMHgwMGZmMDA7CisJfSBlbHNlIGlmIChtYXNrICYgMHgwZjAwMDApIHsKKwkJYml0cyA9IDB4MGYwMDAwOworCX0gZWxzZSB7CisJCWJpdHMgPSAweGYwMDAwMDsKKwl9CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+Yml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IGJpdHM7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0gKHMtPmlvX2JpdHMgJiBiaXRzKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkb18zNzI0X2NvbmZpZyhkZXYsIHMsIGluc24tPmNoYW5zcGVjKTsKKwllbmFibGVfY2hhbihkZXYsIHMsIGluc24tPmNoYW5zcGVjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY20zNzI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaW9yYW5nZTsKKwlpbnQgcmV0LCBpLCBuX3N1YmRldmljZXM7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpb3JhbmdlID0gdGhpc19ib2FyZC0+aW9fcmFuZ2U7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwcml2X3BjbTM3MjQpKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSgoc3RydWN0IHByaXZfcGNtMzcyNCAqKSAoZGV2LT5wcml2YXRlKSktPmRpb18xID0gMDsKKwkoKHN0cnVjdCBwcml2X3BjbTM3MjQgKikgKGRldi0+cHJpdmF0ZSkpLT5kaW9fMiA9IDA7CisKKwlwcmludGsoImNvbWVkaSVkOiBwY20zNzI0OiBib2FyZD0lcywgMHglMDNseCAiLCBkZXYtPm1pbm9yLAorCQl0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworCWlmICghaW9iYXNlIHx8ICFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvcmFuZ2UsICJwY20zNzI0IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJcHJpbnRrKCJcbiIpOworCisJbl9zdWJkZXZpY2VzID0gdGhpc19ib2FyZC0+bnVtb2Zwb3J0czsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpLCBzdWJkZXZfODI1NV9jYiwKKwkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIFNJWkVfODI1NSAqIGkpKTsKKwkJKChkZXYtPnN1YmRldmljZXMpICsgaSktPmluc25fY29uZmlnID0gc3ViZGV2XzM3MjRfaW5zbl9jb25maWc7CisJfTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY20zNzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyBpKyspIHsKKwkJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpKTsKKwkJfQorCX0KKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTU1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jCisgKiBEcml2ZXIgZm9yIFBDTTM3MzAgYW5kIGNsb25lcworICogQmxhaW5lIExlZQorICogZnJvbSBwY2w3MjUgYnkgRGF2aWQgUy4KKyAqLworLyoKK0RyaXZlcjogcGNtMzczMAorRGVzY3JpcHRpb246IFBDTTM3MzAKK0F1dGhvcjogQmxhaW5lIExlZQorRGV2aWNlczogW0FkdmFudGVjaF0gUENNLTM3MzAgKHBjbTM3MzApCitTdGF0dXM6IHVua25vd24KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBQQ00zNzMwX1NJWkUgNAkJLy8gY29uc2VjdXRpdmUgaW8gcG9ydCBhZGRyZXNzZXMKKworI2RlZmluZSBQQ00zNzMwX0RPQSAwCQkvLyBvZmZzZXRzIGZvciBlYWNoIHBvcnQKKyNkZWZpbmUgUENNMzczMF9ET0IgMgorI2RlZmluZSBQQ00zNzMwX0RPQyAzCisjZGVmaW5lIFBDTTM3MzBfRElBIDAKKyNkZWZpbmUgUENNMzczMF9ESUIgMgorI2RlZmluZSBQQ00zNzMwX0RJQyAzCisKK3N0YXRpYyBpbnQgcGNtMzczMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY20zNzMwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbTM3MzAgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtMzczMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNtMzczMF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNtMzczMF9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbTM3MzApOworCitzdGF0aWMgaW50IHBjbTM3MzBfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJb3V0YihzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyAodW5zaWduZWQgbG9uZykocy0+cHJpdmF0ZSkpOworCX0KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY20zNzMwX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArICh1bnNpZ25lZCBsb25nKShzLT5wcml2YXRlKSk7CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNtMzczMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBwY20zNzMwOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFBDTTM3MzBfU0laRSwgInBjbTM3MzAiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCWRldi0+Ym9hcmRfbmFtZSA9ICJwY20zNzMwIjsKKwlkZXYtPmlvYmFzZSA9IGRldi0+aW9iYXNlOworCWRldi0+aXJxID0gMDsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBwY20zNzMwX2RvX2luc25fYml0czsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTTM3MzBfRE9BOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHBjbTM3MzBfZG9faW5zbl9iaXRzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENNMzczMF9ET0I7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNtMzczMF9kb19pbnNuX2JpdHM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ00zNzMwX0RPQzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBwY20zNzMwX2RpX2luc25fYml0czsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTTM3MzBfRElBOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHBjbTM3MzBfZGlfaW5zbl9iaXRzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENNMzczMF9ESUI7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNtMzczMF9kaV9pbnNuX2JpdHM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ00zNzMwX0RJQzsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbTM3MzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHBjbTM3MzA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBQQ00zNzMwX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtYWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmE3M2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtYWQuYwpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY21hZC5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBXaW5zeXN0ZW1zIFBDTS1BL0QxMiBhbmQgUENNLUEvRDE2CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IHBjbWFkCitEZXNjcmlwdGlvbjogV2luc3lzdGVtcyBQQ00tQS9EMTIsIFBDTS1BL0QxNgorQXV0aG9yOiBkcworRGV2aWNlczogW1dpbnN5c3RlbXNdIFBDTS1BL0QxMiAocGNtYWQxMiksIFBDTS1BL0QxNiAocGNtYWQxNikKK1N0YXR1czogdW50ZXN0ZWQKKworVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gb24gYSBiZXQgdGhhdCBJIGNvdWxkbid0IHdyaXRlIGEgZHJpdmVyCitpbiBsZXNzIHRoYW4gMiBob3Vycy4gIEkgd29uIHRoZSBiZXQsIGJ1dCBuZXZlciBnb3QgcGFpZC4gID0oCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZQorICBbMV0gLSB1bnVzZWQKKyAgWzJdIC0gQW5hbG9nIGlucHV0IHJlZmVyZW5jZQorICAgICAgICAgIDAgPSBzaW5nbGUgZW5kZWQKKyAgICAgICAgICAxID0gZGlmZmVyZW50aWFsCisgIFszXSAtIEFuYWxvZyBpbnB1dCBlbmNvZGluZyAobXVzdCBtYXRjaCBqdW1wZXJzKQorICAgICAgICAgIDAgPSBzdHJhaWdodCBiaW5hcnkKKyAgICAgICAgICAxID0gdHdvJ3MgY29tcGxlbWVudAorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgUENNQURfU0laRQkJNAorCisjZGVmaW5lIFBDTUFEX1NUQVRVUwkJMAorI2RlZmluZSBQQ01BRF9MU0IJCTEKKyNkZWZpbmUgUENNQURfTVNCCQkyCisjZGVmaW5lIFBDTUFEX0NPTlZFUlQJCTEKKworc3RydWN0IHBjbWFkX2JvYXJkX3N0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbl9haV9iaXRzOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNtYWRfYm9hcmRfc3RydWN0IHBjbWFkX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNtYWQxMiIsCisJICAgICAgbl9haV9iaXRzOjEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNtYWQxNiIsCisJICAgICAgbl9haV9iaXRzOjE2LAorCQl9LAorfTsKKworI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbWFkX2JvYXJkX3N0cnVjdCAqKShkZXYtPmJvYXJkX3B0cikpCisjZGVmaW5lIG5fcGNtYWRfYm9hcmRzIChzaXplb2YocGNtYWRfYm9hcmRzKS9zaXplb2YocGNtYWRfYm9hcmRzWzBdKSkKKworc3RydWN0IHBjbWFkX3ByaXZfc3RydWN0IHsKKwlpbnQgZGlmZmVyZW50aWFsOworCWludCB0d29zX2NvbXA7Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbWFkX3ByaXZfc3RydWN0ICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IHBjbWFkX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbWFkX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbWFkID0geworICAgICAgZHJpdmVyX25hbWU6InBjbWFkIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY21hZF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNtYWRfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomcGNtYWRfYm9hcmRzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9wY21hZF9ib2FyZHMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHBjbWFkX2JvYXJkc1swXSksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbWFkKTsKKworI2RlZmluZSBUSU1FT1VUCTEwMAorCitzdGF0aWMgaW50IHBjbWFkX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW47CisJaW50IG47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dGIoY2hhbiwgZGV2LT5pb2Jhc2UgKyBQQ01BRF9DT05WRVJUKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVDsgaSsrKSB7CisJCQlpZiAoKGluYihkZXYtPmlvYmFzZSArIFBDTUFEX1NUQVRVUykgJiAweDMpID09IDB4MykKKwkJCQlicmVhazsKKwkJfQorCQlkYXRhW25dID0gaW5iKGRldi0+aW9iYXNlICsgUENNQURfTFNCKTsKKwkJZGF0YVtuXSB8PSAoaW5iKGRldi0+aW9iYXNlICsgUENNQURfTVNCKSA8PCA4KTsKKworCQlpZiAoZGV2cHJpdi0+dHdvc19jb21wKSB7CisJCQlkYXRhW25dIF49ICgxIDw8ICh0aGlzX2JvYXJkLT5uX2FpX2JpdHMgLSAxKSk7CisJCX0KKwl9CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIG9wdGlvbnM6CisgKiAwCWkvbyBiYXNlCisgKiAxCXVudXNlZAorICogMgkwPXNpbmdsZSBlbmRlZCAxPWRpZmZlcmVudGlhbAorICogMwkwPXN0cmFpZ2h0IGJpbmFyeSAxPXR3bydzIGNvbXAKKyAqLworc3RhdGljIGludCBwY21hZF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbWFkOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFBDTUFEX1NJWkUsICJwY21hZCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNtYWRfcHJpdl9zdHJ1Y3QpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBBUkVGX0dST1VORDsKKwlzLT5uX2NoYW4gPSAxNjsJCS8qIFhYWCAqLworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+aW5zbl9yZWFkID0gcGNtYWRfYWlfaW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzX2JvYXJkLT5uX2FpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtYWRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHBjbWFkOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aXJxKSB7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBQQ01BRF9TSVpFKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21kYTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExZmY0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21kYTEyLmMKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcGNtZGExMi5jCisgICAgRHJpdmVyIGZvciBXaW5zeXN0ZW1zIFBDLTEwNCBiYXNlZCBQQ00tRC9BLTEyIDgtY2hhbm5lbCBBTyBib2FyZC4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgQ2FsaW4gQS4gQ3VsaWFudSA8Y2FsaW5AYWp2YXIub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworLyoKK0RyaXZlcjogcGNtZGExMgorRGVzY3JpcHRpb246IEEgZHJpdmVyIGZvciB0aGUgV2luc3lzdGVtcyBQQ00tRC9BLTEyCitEZXZpY2VzOiBbV2luc3lzdGVtc10gUENNLUQvQS0xMiAocGNtZGExMikKK0F1dGhvcjogQ2FsaW4gQ3VsaWFudSA8Y2FsaW5AYWp2YXIub3JnPgorVXBkYXRlZDogRnJpLCAxMyBKYW4gMjAwNiAxMjowMTowMSAtMDUwMAorU3RhdHVzOiB3b3JrcworCitBIGRyaXZlciBmb3IgdGhlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLXRvLXByb2dyYW0gUENNLUQvQS0xMi4KK1RoaXMgYm9hcmQgZG9lc24ndCBzdXBwb3J0IGNvbW1hbmRzLCBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCBpdHMKK2FuYWxvZyBvdXRwdXQgcmFuZ2UgaXMgdG8ganVtcGVyIHRoZSBib2FyZC4gIEFzIHN1Y2gsCitjb21lZGlfZGF0YV93cml0ZSgpIGlnbm9yZXMgdGhlIHJhbmdlIHZhbHVlIHNwZWNpZmllZC4KKworVGhlIGJvYXJkIHVzZXMgMTYgY29uc2VjdXRpdmUgSS9PIGFkZHJlc3NlcyBzdGFydGluZyBhdCB0aGUgSS9PIHBvcnQKK2Jhc2UgYWRkcmVzcy4gIEVhY2ggYWRkcmVzcyBjb3JyZXNwb25kcyB0byB0aGUgTFNCIHRoZW4gTVNCIG9mIGEKK3BhcnRpY3VsYXIgY2hhbm5lbCBmcm9tIDAtNy4KKworTm90ZSB0aGF0IHRoZSBib2FyZCBpcyBub3QgSVNBLVBOUCBjYXBhYmxlIGFuZCB0aHVzCituZWVkcyB0aGUgSS9PIHBvcnQgY29tZWRpX2NvbmZpZyBwYXJhbWV0ZXIuCisKK05vdGUgdGhhdCBwYXNzaW5nIGEgbm9uemVybyB2YWx1ZSBhcyB0aGUgc2Vjb25kIGNvbmZpZyBvcHRpb24gd2lsbAorZW5hYmxlICJzaW11bHRhbmVvdXMgeGZlciIgbW9kZSBmb3IgdGhpcyBib2FyZCwgaW4gd2hpY2ggQU8gd3JpdGVzCit3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCBhIHN1YnNlcXVlbnQgcmVhZCBvZiBhbnkgQU8gY2hhbm5lbC4gIFRoaXMKK2lzIHNvIHRoYXQgb25lIGNhbiBzcGVlZCB1cCBwcm9ncmFtbWluZyBieSBwcmVsb2FkaW5nIGFsbCBBTyByZWdpc3RlcnMKK3dpdGggdmFsdWVzIGJlZm9yZSBzaW11bHRhbmVvdXNseSBzZXR0aW5nIHRoZW0gdG8gdGFrZSBlZmZlY3Qgd2l0aCBvbmUKK3JlYWQgY29tbWFuZC4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gRG8gU2ltdWx0YW5lb3VzIFhmZXIgKHNlZSBkZXNjcmlwdGlvbikKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgkJLyogZm9yIFBDSSBkZXZpY2VzICovCisKKyNkZWZpbmUgTUlOKGEsYikgKCAoKGEpIDwgKGIpKSA/IChhKSA6IChiKSApCisjZGVmaW5lIFNERVZfTk8gKChpbnQpKHMgLSBkZXYtPnN1YmRldmljZXMpKQorI2RlZmluZSBDSEFOUyA4CisjZGVmaW5lIElPU0laRSAxNgorI2RlZmluZSBMU0IoeCkgKCh1bnNpZ25lZCBjaGFyKSgoeCkgJiAweGZmKSkKKyNkZWZpbmUgTVNCKHgpICgodW5zaWduZWQgY2hhcikoKCgodW5zaWduZWQgc2hvcnQpKHgpKT4+OCkgJiAweGZmKSkKKyNkZWZpbmUgTFNCX1BPUlQoY2hhbikgKGRldi0+aW9iYXNlICsgKGNoYW4pKjIpCisjZGVmaW5lIE1TQl9QT1JUKGNoYW4pIChMU0JfUE9SVChjaGFuKSsxKQorI2RlZmluZSBCSVRTIDEyCisKKy8qCisgKiBCb3JkcworICovCitzdHJ1Y3QgcGNtZGExMl9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKKy8qIG5vdGUgdGhlc2UgaGF2ZSBubyBlZmZlY3QgYW5kIGFyZSBtZXJlbHkgaGVyZSBmb3IgcmVmZXJlbmNlLi4KKyAgIHRoZXNlIGFyZSBjb25maWd1cmVkIGJ5IGp1bXBlcmluZyB0aGUgYm9hcmQhICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcGNtZGExMl9yYW5nZXMgPSB7CisJMywKKwl7CisJCQlVTklfUkFOR0UoNSksIFVOSV9SQU5HRSgxMCksIEJJUF9SQU5HRSg1KQorCQl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbWRhMTJfYm9hcmQgcGNtZGExMl9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjbWRhMTIiLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNtZGExMl9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgcGNtZGExMl9wcml2YXRlIHsKKworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1tDSEFOU107CisJaW50IHNpbXVsdGFuZW91c194ZmVyX21vZGU7Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY21kYTEyX3ByaXZhdGUgKikoZGV2LT5wcml2YXRlKSkKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGNtZGExMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY21kYTEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyB2b2lkIHplcm9fY2hhbnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgZHJpdmVyX25hbWU6InBjbWRhMTIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbWRhMTJfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbWRhMTJfZGV0YWNoLAorLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGlmIHlvdSBhcmUKKyAqIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgSVNBIFBuUCBvciBQQ0kgY2FyZCAqLworCS8qIE1vc3QgZHJpdmVycyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgdHlwZXMgb2YgYm9hcmRzIGJ5CisJICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKwkgKiBpbiBwY21kYTEyX2JvYXJkc1tdIGFib3ZlLiAgTm90ZSB0aGF0IHRoZSBlbGVtZW50ICduYW1lJworCSAqIHdhcyBmaXJzdCBpbiB0aGUgc3RydWN0dXJlIC0tIENvbWVkaSB1c2VzIHRoaXMgZmFjdCB0bworCSAqIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlIGJvYXJkIHdpdGhvdXQga25vd2luZyBhbnkgZGV0YWlscworCSAqIGFib3V0IHRoZSBzdHJ1Y3R1cmUgZXhjZXB0IGZvciBpdHMgbGVuZ3RoLgorCSAqIFdoZW4gYSBkZXZpY2UgaXMgYXR0YWNoZWQgKGJ5IGNvbWVkaV9jb25maWcpLCB0aGUgbmFtZQorCSAqIG9mIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdG8gQ29tZWRpLCBhbmQgQ29tZWRpIHRyaWVzIHRvCisJICogbWF0Y2ggaXQgYnkgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBib2FyZCBuYW1lcy4gIElmCisJICogdGhlcmUgaXMgYSBtYXRjaCwgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgaXMgcHV0CisJICogaW50byBkZXYtPmJvYXJkX3B0ciBhbmQgZHJpdmVyLT5hdHRhY2goKSBpcyBjYWxsZWQuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlc2UgYXJlIG5vdCBuZWNlc3NhcnkgaWYgeW91IGNhbiBkZXRlcm1pbmUKKwkgKiB0aGUgdHlwZSBvZiBib2FyZCBpbiBzb2Z0d2FyZS4gIElTQSBQblAsIFBDSSwgYW5kIFBDTUNJQQorCSAqIGRldmljZXMgYXJlIHN1Y2ggYm9hcmRzLgorCSAqLworICAgICAgYm9hcmRfbmFtZTomcGNtZGExMl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbWRhMTJfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihwY21kYTEyX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjbWRhMTJfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBhb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcGNtZGExMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiAlczogaW86ICVseCAlcyAiLCBkZXYtPm1pbm9yLCBkcml2ZXIuZHJpdmVyX25hbWUsCisJCWlvYmFzZSwgaXQtPm9wdGlvbnNbMV0gPyAic2ltdWx0YW5lb3VzIHhmZXIgbW9kZSBlbmFibGVkIiA6ICIiKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBJT1NJWkUsIGRyaXZlci5kcml2ZXJfbmFtZSkpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworLyoKKyAqIEluaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lLiAgTm90ZSB0aGF0IHdlIGNhbiB1c2UgdGhlICJ0aGlzYm9hcmQiCisgKiBtYWNybyBub3csIHNpbmNlIHdlIGp1c3QgaW5pdGlhbGl6ZWQgaXQgaW4gdGhlIGxhc3QgbGluZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY21kYTEyX3ByaXZhdGUpKSA8IDApIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldnByaXYtPnNpbXVsdGFuZW91c194ZmVyX21vZGUgPSBpdC0+b3B0aW9uc1sxXTsKKworCS8qCisJICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorCSAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKwkgKgorCSAqIEFsbG9jYXRlIDIgc3ViZGV2cyAoMzIgKyAxNiBESU8gbGluZXMpIG9yIDMgMzIgRElPIHN1YmRldnMgZm9yIHRoZQorCSAqIDk2LWNoYW5uZWwgdmVyc2lvbiBvZiB0aGUgYm9hcmQuCisJICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgc3ViZGV2aWNlIGRhdGEgc3RydWN0dXJlc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXM7CisJcy0+cHJpdmF0ZSA9IE5VTEw7CisJcy0+bWF4ZGF0YSA9ICgweDEgPDwgQklUUykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnBjbWRhMTJfcmFuZ2VzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gQ0hBTlM7CisJcy0+aW5zbl93cml0ZSA9ICZhb193aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSAmYW9fcmluc247CisKKwl6ZXJvX2NoYW5zKGRldik7CS8qIGNsZWFyIG91dCBhbGwgdGhlIHJlZ2lzdGVycywgYmFzaWNhbGx5ICovCisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IHBjbWRhMTJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSk7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgSU9TSVpFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgemVyb19jaGFucyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sJCQkJLyogc2V0cyB1cCBhbgorCQkJCSAgIEFTSUMgY2hpcCB0byBkZWZhdWx0cyAqLworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBDSEFOUzsgKytpKSB7CisvKiAgICAgIC9cKiBkbyB0aGlzIGFzIG9uZSBpbnN0cnVjdGlvbj8/ICpcLyAqLworLyogICAgICBvdXR3KDAsIExTQl9QT1JUKGNoYW4pKTsgKi8KKwkJb3V0YigwLCBMU0JfUE9SVChpKSk7CisJCW91dGIoMCwgTVNCX1BPUlQoaSkpOworCX0KKwlpbmIoTFNCX1BPUlQoMCkpOwkvKiB1cGRhdGUgY2hhbnMuICovCit9CisKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBXcml0aW5nIGEgbGlzdCBvZiB2YWx1ZXMgdG8gYW4gQU8gY2hhbm5lbCBpcyBwcm9iYWJseSBub3QKKwkgKiB2ZXJ5IHVzZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyArK2kpIHsKKworLyogICAgICAvXCogZG8gdGhpcyBhcyBvbmUgaW5zdHJ1Y3Rpb24/PyAqXC8gKi8KKy8qICAgICAgb3V0dyhkYXRhW2ldLCBMU0JfUE9SVChjaGFuKSk7ICovCisKKwkJLyogTmVlZCB0byBkbyB0aGlzIGFzIHR3byBpbnN0cnVjdGlvbnMgZHVlIHRvIDgtYml0IGJ1cz8/ICovCisJCS8qICBmaXJzdCwgbG9hZCB0aGUgbG93IGJ5dGUgKi8KKwkJb3V0YihMU0IoZGF0YVtpXSksIExTQl9QT1JUKGNoYW4pKTsKKwkJLyogIG5leHQsIHdyaXRlIHRoZSBoaWdoIGJ5dGUgKi8KKwkJb3V0YihNU0IoZGF0YVtpXSksIE1TQl9QT1JUKGNoYW4pKTsKKworCQkvKiBzYXZlIHNoYWRvdyByZWdpc3RlciAqLworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisKKwkJaWYgKCFkZXZwcml2LT5zaW11bHRhbmVvdXNfeGZlcl9tb2RlKQorCQkJaW5iKExTQl9QT1JUKGNoYW4pKTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHdyaXR0ZW4gKi8KKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKworICAgVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi0+YW9fcmVhZGJhY2suCisgICBIb3dldmVyLCBzaW5jZSB0aGlzIGRyaXZlciBzdXBwb3J0cyBzaW11bHRhbmVvdXMgeGZlciB0aGVuIHNvbWV0aW1lcworICAgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBhY2NvbXBsaXNoZXMgd29yay4KKworICAgU2ltdWx0YW5lYW91cyB4ZmVyIG1vZGUgaXMgYWNjb21wbGlzaGVkIGJ5IGxvYWRpbmcgQUxMIHRoZSB2YWx1ZXMKKyAgIHlvdSB3YW50IGZvciBBTyBpbiBhbGwgdGhlIGNoYW5uZWxzLCB0aGVuIFJFQURpbmcgb2ZmIG9uZSBvZiB0aGUgQU8KKyAgIHJlZ2lzdGVycyB0byBpbml0aWF0ZSB0aGUgaW5zdGFudGFuZW91cyBzaW11bHRhbmVvdXMgdXBkYXRlIG9mIGFsbAorICAgREFDIG91dHB1dHMsIHdoaWNoIG1ha2VzIGFsbCBBTyBjaGFubmVscyB1cGRhdGUgc2ltdWx0YW5lb3VzbHkuCisgICBUaGlzIGlzIHVzZWZ1bCBmb3Igc29tZSBjb250cm9sIGFwcGxpY2F0aW9ucywgSSB3b3VsZCBpbWFnaW5lLgorKi8KK3N0YXRpYyBpbnQgYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWlmIChkZXZwcml2LT5zaW11bHRhbmVvdXNfeGZlcl9tb2RlKQorCQkJaW5iKExTQl9QT1JUKGNoYW4pKTsKKwkJLyogcmVhZCBiYWNrIHNoYWRvdyByZWdpc3RlciAqLworCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIGk7Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZTQwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKQEAgLTAsMCArMSwxMzMzIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3BjbW1pby5jCisgICAgRHJpdmVyIGZvciBXaW5zeXN0ZW1zIFBDLTEwNCBiYXNlZCBtdWx0aWZ1bmN0aW9uIElPIGJvYXJkLgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwNyBDYWxpbiBBLiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBwY21taW8KK0Rlc2NyaXB0aW9uOiBBIGRyaXZlciBmb3IgdGhlIFBDTS1NSU8gbXVsdGlmdW5jdGlvbiBib2FyZAorRGV2aWNlczogW1dpbnN5c3RlbXNdIFBDTS1NSU8gKHBjbW1pbykKK0F1dGhvcjogQ2FsaW4gQ3VsaWFudSA8Y2FsaW5AYWp2YXIub3JnPgorVXBkYXRlZDogV2VkLCBNYXkgMTYgMjAwNyAxNjoyMToxMCAtMDUwMAorU3RhdHVzOiB3b3JrcworCitBIGRyaXZlciBmb3IgdGhlIHJlbGF0aXZlbHkgbmV3IFBDTS1NSU8gbXVsdGlmdW5jdGlvbiBib2FyZCBmcm9tCitXaW5zeXN0ZW1zLiAgVGhpcyBib2FyZCBpcyBhIFBDLTEwNCBiYXNlZCBJL08gYm9hcmQuICBJdCBjb250YWlucworZm91ciBzdWJkZXZpY2VzOgorICBzdWJkZXZpY2UgMCAtIDE2IGNoYW5uZWxzIG9mIDE2LWJpdCBBSQorICBzdWJkZXZpY2UgMSAtIDggY2hhbm5lbHMgb2YgMTYtYml0IEFPCisgIHN1YmRldmljZSAyIC0gZmlyc3QgMjQgY2hhbm5lbHMgb2YgdGhlIDQ4IGNoYW5uZWwgb2YgRElPICh3aXRoIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBzdXBwb3J0KQorICBzdWJkZXZpY2UgMyAtIGxhc3QgMjQgY2hhbm5lbHMgb2YgdGhlIDQ4IGNoYW5uZWwgRElPIChubyBpbnRlcnJ1cHQgc3VwcG9ydCBmb3IgdGhpcyBiYW5rIG9mIGNoYW5uZWxzKQorCisgIFNvbWUgbm90ZXM6CisKKyAgU3luY2hyb25vdXMgcmVhZHMgYW5kIHdyaXRlcyBhcmUgdGhlIG9ubHkgdGhpbmdzIGltcGxlbWVudGVkIGZvciBBSSBhbmQgQU8sCisgIGV2ZW4gdGhvdWdoIHRoZSBoYXJkd2FyZSBpdHNlbGYgY2FuIGRvIHN0cmVhbWluZyBhY3F1aXNpdGlvbiwgZXRjLiAgQW55b25lCisgIHdhbnQgdG8gYWRkIGFzeW5jaHJvbm91cyBJL08gZm9yIEFJL0FPIGFzIGEgZmVhdHVyZT8gIEJlIG15IGd1ZXN0Li4uCisKKyAgQXN5bmNocm9ub3VzIEkvTyBmb3IgdGhlIERJTyBzdWJkZXZpY2VzICppcyogaW1wbGVtZW50ZWQsIGhvd2V2ZXIhICBUaGV5IGFyZQorICBiYXNpY2FsbHkgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGZpcnN0CisgIDI0IERJTy1saW5lcy4KKworICBBbHNvIG5vdGUgdGhhdCB0aGlzIGludGVycnVwdCBzdXBwb3J0IGlzIHVudGVzdGVkLgorCisgIEEgZmV3IHdvcmRzIGFib3V0IGVkZ2UtZGV0ZWN0aW9uIElSUSBzdXBwb3J0IChjb21tYW5kcyBvbiBESU8pOgorCisgICogVG8gdXNlIGVkZ2UtZGV0ZWN0aW9uIElSUSBzdXBwb3J0IGZvciB0aGUgRElPIHN1YmRldmljZSwgcGFzcyB0aGUgSVJRCisgICAgb2YgdGhlIGJvYXJkIHRvIHRoZSBjb21lZGlfY29uZmlnIGNvbW1hbmQuICBUaGUgYm9hcmQgSVJRIGlzIG5vdCBqdW1wZXJlZAorICAgIGJ1dCByYXRoZXIgY29uZmlndXJlZCB0aHJvdWdoIHNvZnR3YXJlLCBzbyBhbnkgSVJRIGZyb20gMS0xNSBpcyBPSy4KKworICAqIER1ZSB0byB0aGUgZ2VuZXJpY2l0eSBvZiB0aGUgY29tZWRpIEFQSSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgc3BlY2lhbAorICAgIGNvbWVkaV9jb21tYW5kIGluIG9yZGVyIHRvIHVzZSBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGZvciBESU8uCisKKyAgKiBVc2UgY29tZWRpX2NvbW1hbmRzIHdpdGggVFJJR19OT1cuICBZb3VyIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGVhY2gKKyAgICB0aW1lIGFuIGVkZ2UgaXMgZGV0ZWN0ZWQgb24gdGhlIHNwZWNpZmllZCBESU8gbGluZShzKSwgYW5kIHRoZSBkYXRhCisgICAgdmFsdWVzIHdpbGwgYmUgdHdvIHNhbXBsZV90J3MsIHdoaWNoIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gZm9ybQorICAgIG9uZSAzMi1iaXQgdW5zaWduZWQgaW50LiAgVGhpcyB2YWx1ZSBpcyB0aGUgbWFzayBvZiBjaGFubmVscyB0aGF0IGhhZAorICAgIGVkZ2VzIGRldGVjdGVkIGZyb20geW91ciBjaGFubmVsIGxpc3QuICBOb3RlIHRoYXQgdGhlIGJpdHMgcG9zaXRpb25zCisgICAgaW4gdGhlIG1hc2sgY29ycmVzcG9uZCB0byBwb3NpdGlvbnMgaW4geW91ciBjaGFubGlzdCB3aGVuIHlvdQorICAgIHNwZWNpZmllZCB0aGUgY29tbWFuZCBhbmQgKm5vdCogY2hhbm5lbCBpZCdzIQorCisgKiAgVG8gc2V0IHRoZSBwb2xhcml0eSBvZiB0aGUgZWRnZS1kZXRlY3Rpb24gaW50ZXJydXB0cyBwYXNzIGEgbm9uemVybyB2YWx1ZQorICAgIGZvciBlaXRoZXIgQ1JfUkFOR0Ugb3IgQ1JfQVJFRiBmb3IgZWRnZS11cCBwb2xhcml0eSwgb3IgYSB6ZXJvCisgICAgdmFsdWUgZm9yIGJvdGggQ1JfUkFOR0UgYW5kIENSX0FSRUYgaWYgeW91IHdhbnQgZWRnZS1kb3duIHBvbGFyaXR5LgorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKG9wdGlvbmFsIC0tIGZvciBlZGdlLWRldGVjdCBpbnRlcnJ1cHQgc3VwcG9ydCBvbmx5LCBsZWF2ZSBvdXQgaWYgeW91IGRvbid0IG5lZWQgdGhpcyBmZWF0dXJlKQorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgkJLyogZm9yIFBDSSBkZXZpY2VzICovCisKKyNkZWZpbmUgTUlOKGEsYikgKCAoKGEpIDwgKGIpKSA/IChhKSA6IChiKSApCisKKy8qIFRoaXMgc3R1ZmYgaXMgYWxsIGZyb20gcGNtdWlvLmMgLS0gaXQgcmVmZXJzIHRvIHRoZSBESU8gc3ViZGV2aWNlcyBvbmx5ICovCisjZGVmaW5lIENIQU5TX1BFUl9QT1JUICAgOAorI2RlZmluZSBQT1JUU19QRVJfQVNJQyAgIDYKKyNkZWZpbmUgSU5UUl9QT1JUU19QRVJfQVNJQyAgIDMKKyNkZWZpbmUgTUFYX0NIQU5TX1BFUl9TVUJERVYgMjQJLyogbnVtYmVyIG9mIGNoYW5uZWxzIHBlciBjb21lZGkgc3ViZGV2aWNlICovCisjZGVmaW5lIFBPUlRTX1BFUl9TVUJERVYgKE1BWF9DSEFOU19QRVJfU1VCREVWL0NIQU5TX1BFUl9QT1JUKQorI2RlZmluZSBDSEFOU19QRVJfQVNJQyAoQ0hBTlNfUEVSX1BPUlQqUE9SVFNfUEVSX0FTSUMpCisjZGVmaW5lIElOVFJfQ0hBTlNfUEVSX0FTSUMgMjQKKyNkZWZpbmUgSU5UUl9QT1JUU19QRVJfU1VCREVWIChJTlRSX0NIQU5TX1BFUl9BU0lDL0NIQU5TX1BFUl9QT1JUKQorI2RlZmluZSBNQVhfRElPX0NIQU5TICAgKFBPUlRTX1BFUl9BU0lDKjEqQ0hBTlNfUEVSX1BPUlQpCisjZGVmaW5lIE1BWF9BU0lDUyAgICAgICAoTUFYX0RJT19DSEFOUy9DSEFOU19QRVJfQVNJQykKKyNkZWZpbmUgU0RFVl9OTyAoKGludCkocyAtIGRldi0+c3ViZGV2aWNlcykpCisjZGVmaW5lIENBTENfTl9ESU9fU1VCREVWUyhuY2hhbnMpICgobmNoYW5zKS9NQVhfQ0hBTlNfUEVSX1NVQkRFViArICghISgobmNoYW5zKSVNQVhfQ0hBTlNfUEVSX1NVQkRFVikpIC8qKyAobmNoYW5zID4gSU5UUl9DSEFOU19QRVJfQVNJQyA/IDIgOiAxKSovKQorLyogSU8gTWVtb3J5IHNpemVzICovCisjZGVmaW5lIEFTSUNfSU9TSVpFICgweDBCKQorI2RlZmluZSBQQ01NSU80OF9JT1NJWkUgQVNJQ19JT1NJWkUKKworLyogU29tZSBvZmZzZXRzIC0gdGhlc2UgYXJlIGFsbCBpbiB0aGUgMTZieXRlIElPIG1lbW9yeSBvZmZzZXQgZnJvbQorICAgdGhlIGJhc2UgYWRkcmVzcy4gIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHBhZ2luZyBzY2hlbWUgdG8gc3dhcCBvdXQKKyAgIG9mZnNldHMgMHg4LTB4QSB1c2luZyB0aGUgUEFHRUxPQ0sgcmVnaXN0ZXIuICBTZWUgdGhlIHRhYmxlIGJlbG93LgorCisgIFJlZ2lzdGVyKHMpICAgICAgIFBhZ2VzICAgICAgICBSL1c/ICAgICAgICBEZXNjcmlwdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSRUdfUE9SVHggICAgICAgICBBbGwgICAgICAgICAgUi9XICAgICAgICAgUmVhZC9Xcml0ZS9Db25maWd1cmUgSU8KKyAgUkVHX0lOVF9QRU5ESU5HICAgQWxsICAgICAgICAgIFJlYWRPbmx5ICAgIFF1aWNrbHkgc2VlIHdoaWNoIElOVF9JRHggaGFzIGludC4KKyAgUkVHX1BBR0VMT0NLICAgICAgQWxsICAgICAgICAgIFdyaXRlT25seSAgIFNlbGVjdCBhIHBhZ2UKKyAgUkVHX1BPTHggICAgICAgICAgUGcuIDEgb25seSAgIFdyaXRlT25seSAgIFNlbGVjdCBlZGdlLWRldGVjdGlvbiBwb2xhcml0eQorICBSRUdfRU5BQnggICAgICAgICBQZy4gMiBvbmx5ICAgV3JpdGVPbmx5ICAgRW5hYmxlL0Rpc2FibGUgZWRnZS1kZXRlY3QuIGludC4KKyAgUkVHX0lOVF9JRHggICAgICAgUGcuIDMgb25seSAgIFIvVyAgICAgICAgIFNlZSB3aGljaCBwb3J0cy9iaXRzIGhhdmUgaW50cy4KKyAqLworI2RlZmluZSBSRUdfUE9SVDAgMHgwCisjZGVmaW5lIFJFR19QT1JUMSAweDEKKyNkZWZpbmUgUkVHX1BPUlQyIDB4MgorI2RlZmluZSBSRUdfUE9SVDMgMHgzCisjZGVmaW5lIFJFR19QT1JUNCAweDQKKyNkZWZpbmUgUkVHX1BPUlQ1IDB4NQorI2RlZmluZSBSRUdfSU5UX1BFTkRJTkcgMHg2CisjZGVmaW5lIFJFR19QQUdFTE9DSyAweDcJLyogcGFnZSBzZWxlY3RvciByZWdpc3RlciwgdXBwZXIgMiBiaXRzIHNlbGVjdCBhIHBhZ2UKKwkJCQkgICBhbmQgYml0cyAwLTUgYXJlIHVzZWQgdG8gJ2xvY2sgZG93bicgYSBwYXJ0aWN1bGFyCisJCQkJICAgcG9ydCBhYm92ZSB0byBtYWtlIGl0IHJlYWRvbmx5LiAgKi8KKyNkZWZpbmUgUkVHX1BPTDAgMHg4CisjZGVmaW5lIFJFR19QT0wxIDB4OQorI2RlZmluZSBSRUdfUE9MMiAweEEKKyNkZWZpbmUgUkVHX0VOQUIwIDB4OAorI2RlZmluZSBSRUdfRU5BQjEgMHg5CisjZGVmaW5lIFJFR19FTkFCMiAweEEKKyNkZWZpbmUgUkVHX0lOVF9JRDAgMHg4CisjZGVmaW5lIFJFR19JTlRfSUQxIDB4OQorI2RlZmluZSBSRUdfSU5UX0lEMiAweEEKKworI2RlZmluZSBOVU1fUEFHRURfUkVHUyAzCisjZGVmaW5lIE5VTV9QQUdFUyA0CisjZGVmaW5lIEZJUlNUX1BBR0VEX1JFRyAweDgKKyNkZWZpbmUgUkVHX1BBR0VfQklUT0ZGU0VUIDYKKyNkZWZpbmUgUkVHX0xPQ0tfQklUT0ZGU0VUIDAKKyNkZWZpbmUgUkVHX1BBR0VfTUFTSyAofigoMHgxPDxSRUdfUEFHRV9CSVRPRkZTRVQpLTEpKQorI2RlZmluZSBSRUdfTE9DS19NQVNLIH4oUkVHX1BBR0VfTUFTSykKKyNkZWZpbmUgUEFHRV9QT0wgMQorI2RlZmluZSBQQUdFX0VOQUIgMgorI2RlZmluZSBQQUdFX0lOVF9JRCAzCisKK3R5cGVkZWYgaW50ICgqY29tZWRpX2luc25fZm5fdCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosCisJc3RydWN0IGNvbWVkaV9pbnNuICosIHVuc2lnbmVkIGludCAqKTsKKworc3RhdGljIGludCBhaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwl1bnNpZ25lZCBpbnQgKik7CitzdGF0aWMgaW50IGFvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCXVuc2lnbmVkIGludCAqKTsKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9pbnNuICosCisJdW5zaWduZWQgaW50ICopOworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IHBjbW1pb19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBpbnQgZGlvX251bV9hc2ljczsKKwljb25zdCBpbnQgZGlvX251bV9wb3J0czsKKwljb25zdCBpbnQgdG90YWxfaW9zaXplOworCWNvbnN0IGludCBhaV9iaXRzOworCWNvbnN0IGludCBhb19iaXRzOworCWNvbnN0IGludCBuX2FpX2NoYW5zOworCWNvbnN0IGludCBuX2FvX2NoYW5zOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZV90YWJsZSwgKmFvX3JhbmdlX3RhYmxlOworCWNvbWVkaV9pbnNuX2ZuX3QgYWlfcmluc24sIGFvX3JpbnNuLCBhb193aW5zbjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZXNfYWkgPQorCXsgNCwge1JBTkdFKC01LiwgNS4pLCBSQU5HRSgtMTAuLCAxMC4pLCBSQU5HRSgwLiwgNS4pLCBSQU5HRSgwLiwKKwkJMTAuKX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZXNfYW8gPQorCXsgNiwge1JBTkdFKDAuLCA1LiksIFJBTkdFKDAuLCAxMC4pLCBSQU5HRSgtNS4sIDUuKSwgUkFOR0UoLTEwLiwgMTAuKSwKKwlSQU5HRSgtMi41LCAyLjUpLCBSQU5HRSgtMi41LCA3LjUpfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY21taW9fYm9hcmQgcGNtbWlvX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNtbWlvIiwKKwkgICAgICBkaW9fbnVtX2FzaWNzOjEsCisJICAgICAgZGlvX251bV9wb3J0czo2LAorCSAgICAgIHRvdGFsX2lvc2l6ZTozMiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkgICAgICBuX2FpX2NoYW5zOjE2LAorCSAgICAgIG5fYW9fY2hhbnM6OCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomcmFuZ2VzX2FpLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZyYW5nZXNfYW8sCisJICAgICAgYWlfcmluc246YWlfcmluc24sCisJICAgICAgYW9fcmluc246YW9fcmluc24sCisgICAgICBhb193aW5zbjphb193aW5zbn0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBwY21taW9fYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgc3ViZGV2aWNlLiAgKi8KK3N0cnVjdCBwY21taW9fc3ViZGV2X3ByaXZhdGUgeworCisJdW5pb24geworCQkvKiBmb3IgRElPOiBtYXBwaW5nIG9mIGhhbGZ3b3JkcyAoYnl0ZXMpIGluIHBvcnQvY2hhbmFycmF5IHRvIGlvYmFzZSAqLworCQl1bnNpZ25lZCBsb25nIGlvYmFzZXNbUE9SVFNfUEVSX1NVQkRFVl07CisKKwkJLyogZm9yIEFJL0FPICovCisJCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCX07CisJdW5pb24geworCQlzdHJ1Y3QgeworCisJCQkvKiBUaGUgYmVsb3cgaXMgb25seSB1c2VkIGZvciBpbnRyIHN1YmRldmljZXMgKi8KKwkJCXN0cnVjdCB7CisJCQkJaW50IGFzaWM7CS8qIGlmIG5vbi1uZWdhdGl2ZSwgdGhpcyBzdWJkZXYgaGFzIGFuIGludGVycnVwdCBhc2ljICovCisJCQkJaW50IGZpcnN0X2NoYW47CS8qIGlmIG5vbm5lZ2F0aXZlLCB0aGUgZmlyc3QgY2hhbm5lbCBpZCBmb3IKKwkJCQkJCSAgIGludGVycnVwdHMuICovCisJCQkJaW50IG51bV9hc2ljX2NoYW5zOwkvKiB0aGUgbnVtYmVyIG9mIGFzaWMgY2hhbm5lbHMgaW4gdGhpcyBzdWJkZXYKKwkJCQkJCQkgICB0aGF0IGhhdmUgaW50ZXJydXRwcyAqLworCQkJCWludCBhc2ljX2NoYW47CS8qIGlmIG5vbm5lZ2F0aXZlLCB0aGUgZmlyc3QgY2hhbm5lbCBpZCB3aXRoCisJCQkJCQkgICByZXNwZWN0IHRvIHRoZSBhc2ljIHRoYXQgaGFzIGludGVycnVwdHMgKi8KKwkJCQlpbnQgZW5hYmxlZF9tYXNrOwkvKiBzdWJkZXYtcmVsYXRpdmUgY2hhbm5lbCBtYXNrIGZvciBjaGFubmVscworCQkJCQkJCSAgIHdlIGFyZSBpbnRlcmVzdGVkIGluICovCisJCQkJaW50IGFjdGl2ZTsKKwkJCQlpbnQgc3RvcF9jb3VudDsKKwkJCQlpbnQgY29udGludW91czsKKwkJCQlzcGlubG9ja190IHNwaW5sb2NrOworCQkJfSBpbnRyOworCQl9IGRpbzsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBzaGFkb3dfc2FtcGxlc1s4XTsJLyogdGhlIGxhc3QgdW5zaWduZWQgaW50IGRhdGEgd3JpdHRlbiAqLworCQl9IGFvOworCX07Cit9OworCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgcGNtbWlvX3ByaXZhdGUgeworCS8qIHN0dWZmIGZvciBESU8gKi8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIHBhZ2Vsb2NrOwkvKiBjdXJyZW50IHBhZ2UgYW5kIGxvY2sgKi8KKwkJdW5zaWduZWQgY2hhciBwb2xbTlVNX1BBR0VEX1JFR1NdOwkvKiBzaGFkb3cgb2YgUE9MeCByZWdpc3RlcnMgKi8KKwkJdW5zaWduZWQgY2hhciBlbmFiW05VTV9QQUdFRF9SRUdTXTsJLyogc2hhZG93IG9mIEVOQUJ4IHJlZ2lzdGVycyAqLworCQlpbnQgbnVtOworCQl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwkJdW5zaWduZWQgaW50IGlycTsKKwkJc3BpbmxvY2tfdCBzcGlubG9jazsKKwl9IGFzaWNzW01BWF9BU0lDU107CisJc3RydWN0IHBjbW1pb19zdWJkZXZfcHJpdmF0ZSAqc3ByaXZzOworfTsKKworLyoKKyAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY21taW9fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgc3VicHJpdiAoKHN0cnVjdCBwY21taW9fc3ViZGV2X3ByaXZhdGUgKilzLT5wcml2YXRlKQorLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGNtbWlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbW1pb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgZHJpdmVyX25hbWU6InBjbW1pbyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNtbWlvX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY21taW9fZGV0YWNoLAorLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGlmIHlvdSBhcmUKKyAqIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgSVNBIFBuUCBvciBQQ0kgY2FyZCAqLworCS8qIE1vc3QgZHJpdmVycyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgdHlwZXMgb2YgYm9hcmRzIGJ5CisJICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKwkgKiBpbiBwY21taW9fYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisJICogd2FzIGZpcnN0IGluIHRoZSBzdHJ1Y3R1cmUgLS0gQ29tZWRpIHVzZXMgdGhpcyBmYWN0IHRvCisJICogZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUgYm9hcmQgd2l0aG91dCBrbm93aW5nIGFueSBkZXRhaWxzCisJICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisJICogV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZCAoYnkgY29tZWRpX2NvbmZpZyksIHRoZSBuYW1lCisJICogb2YgdGhlIGRldmljZSBpcyBnaXZlbiB0byBDb21lZGksIGFuZCBDb21lZGkgdHJpZXMgdG8KKwkgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKwkgKiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciBpcyBwdXQKKwkgKiBpbnRvIGRldi0+Ym9hcmRfcHRyIGFuZCBkcml2ZXItPmF0dGFjaCgpIGlzIGNhbGxlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgY2FuIGRldGVybWluZQorCSAqIHRoZSB0eXBlIG9mIGJvYXJkIGluIHNvZnR3YXJlLiAgSVNBIFBuUCwgUENJLCBhbmQgUENNQ0lBCisJICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisJICovCisgICAgICBib2FyZF9uYW1lOiZwY21taW9fYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY21taW9fYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihwY21taW9fYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGNtbWlvX2JvYXJkKSwKK307CisKK3N0YXRpYyBpbnQgcGNtbWlvX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNtbWlvX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbW1pbyhpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIHBjbW1pb19zdG9wX2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKik7CitzdGF0aWMgaW50IHBjbW1pb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjbW1pb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjbW1pb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworCisvKiBzb21lIGhlbHBlciBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIHNwZWNpZmljcyBvZiB0aGlzIGRldmljZSdzIHJlZ2lzdGVycyAqLworc3RhdGljIHZvaWQgaW5pdF9hc2ljcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CS8qIHNldHMgdXAvY2xlYXJzIEFTSUMgY2hpcHMgdG8gZGVmYXVsdHMgKi8KK3N0YXRpYyB2b2lkIHN3aXRjaF9wYWdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBhZ2UpOworI2lmZGVmIG5vdHVzZWQKK3N0YXRpYyB2b2lkIGxvY2tfcG9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwb3J0KTsKK3N0YXRpYyB2b2lkIHVubG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpOworI2VuZGlmCisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBwY21taW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBzZGV2X25vLCBjaGFuc19sZWZ0LCBuX2Rpb19zdWJkZXZzLCBuX3N1YmRldnMsIHBvcnQsIGFzaWMsCisJCXRoaXNhc2ljX2NoYW5jdCA9IDA7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycVtNQVhfQVNJQ1NdOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaXJxWzBdID0gaXQtPm9wdGlvbnNbMV07CisKKwlwcmludGsoImNvbWVkaSVkOiAlczogaW86ICVseCAiLCBkZXYtPm1pbm9yLCBkcml2ZXIuZHJpdmVyX25hbWUsCisJCWlvYmFzZSk7CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmICghaW9iYXNlIHx8ICFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsCisJCQl0aGlzYm9hcmQtPnRvdGFsX2lvc2l6ZSwgZHJpdmVyLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuICBhbGxvY19wcml2YXRlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjbW1pb19wcml2YXRlKSkgPCAwKSB7CisJCXByaW50aygiY2Fubm90IGFsbG9jYXRlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGFzaWMgPSAwOyBhc2ljIDwgTUFYX0FTSUNTOyArK2FzaWMpIHsKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10ubnVtID0gYXNpYzsKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlID0KKwkJCWRldi0+aW9iYXNlICsgMTYgKyBhc2ljICogQVNJQ19JT1NJWkU7CisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlycSA9IDA7CS8qIHRoaXMgZ2V0cyBhY3R1YWxseSBzZXQgYXQgdGhlIGVuZCBvZgorCQkJCQkJICAgdGhpcyBmdW5jdGlvbiB3aGVuIHdlCisJCQkJCQkgICBjb21lZGlfcmVxdWVzdF9pcnFzICovCisJCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5hc2ljc1thc2ljXS5zcGlubG9jayk7CisJfQorCisJY2hhbnNfbGVmdCA9IENIQU5TX1BFUl9BU0lDICogdGhpc2JvYXJkLT5kaW9fbnVtX2FzaWNzOworCW5fZGlvX3N1YmRldnMgPSBDQUxDX05fRElPX1NVQkRFVlMoY2hhbnNfbGVmdCk7CisJbl9zdWJkZXZzID0gbl9kaW9fc3ViZGV2cyArIDI7CisJZGV2cHJpdi0+c3ByaXZzID0KKwkJa2NhbGxvYyhuX3N1YmRldnMsIHNpemVvZihzdHJ1Y3QgcGNtbWlvX3N1YmRldl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZwcml2LT5zcHJpdnMpIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgc3ViZGV2aWNlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qCisJICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorCSAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKwkgKgorCSAqIEFsbG9jYXRlIDEgQUkgKyAxIEFPICsgMiBESU8gc3ViZGV2cyAoMjQgbGluZXMgcGVyIERJTykKKwkgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2cykgPCAwKSB7CisJCXByaW50aygiY2Fubm90IGFsbG9jYXRlIHN1YmRldmljZSBkYXRhIHN0cnVjdHVyZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBGaXJzdCwgQUkgKi8KKwlzZGV2X25vID0gMDsKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc2Rldl9ubzsKKwlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ByaXZzICsgc2Rldl9ubzsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFpX3JhbmdlX3RhYmxlOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5uX2FpX2NoYW5zOworCXMtPmxlbl9jaGFubGlzdCA9IHMtPm5fY2hhbjsKKwlzLT5pbnNuX3JlYWQgPSB0aGlzYm9hcmQtPmFpX3JpbnNuOworCXN1YnByaXYtPmlvYmFzZSA9IGRldi0+aW9iYXNlICsgMDsKKwkvKiBpbml0aWFsaXplIHRoZSByZXNvdXJjZSBlbmFibGUgcmVnaXN0ZXIgYnkgY2xlYXJpbmcgaXQgKi8KKwlvdXRiKDAsIHN1YnByaXYtPmlvYmFzZSArIDMpOworCW91dGIoMCwgc3VicHJpdi0+aW9iYXNlICsgNCArIDMpOworCisJLyogTmV4dCwgQU8gKi8KKwkrK3NkZXZfbm87CisJcyA9IGRldi0+c3ViZGV2aWNlcyArIHNkZXZfbm87CisJcy0+cHJpdmF0ZSA9IGRldnByaXYtPnNwcml2cyArIHNkZXZfbm87CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YW9fYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gdGhpc2JvYXJkLT5hb19yYW5nZV90YWJsZTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+bl9hb19jaGFuczsKKwlzLT5sZW5fY2hhbmxpc3QgPSBzLT5uX2NoYW47CisJcy0+aW5zbl9yZWFkID0gdGhpc2JvYXJkLT5hb19yaW5zbjsKKwlzLT5pbnNuX3dyaXRlID0gdGhpc2JvYXJkLT5hb193aW5zbjsKKwlzdWJwcml2LT5pb2Jhc2UgPSBkZXYtPmlvYmFzZSArIDg7CisJLyogaW5pdGlhbGl6ZSB0aGUgcmVzb3VyY2UgZW5hYmxlIHJlZ2lzdGVyIGJ5IGNsZWFyaW5nIGl0ICovCisJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UgKyAzKTsKKwlvdXRiKDAsIHN1YnByaXYtPmlvYmFzZSArIDQgKyAzKTsKKworCSsrc2Rldl9ubzsKKwlwb3J0ID0gMDsKKwlhc2ljID0gMDsKKwlmb3IgKDsgc2Rldl9ubyA8IChpbnQpZGV2LT5uX3N1YmRldmljZXM7ICsrc2Rldl9ubykgeworCQlpbnQgYnl0ZV9ubzsKKworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc2Rldl9ubzsKKwkJcy0+cHJpdmF0ZSA9IGRldnByaXYtPnNwcml2cyArIHNkZXZfbm87CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPmluc25fYml0cyA9IHBjbW1pb19kaW9faW5zbl9iaXRzOworCQlzLT5pbnNuX2NvbmZpZyA9IHBjbW1pb19kaW9faW5zbl9jb25maWc7CisJCXMtPm5fY2hhbiA9IE1JTihjaGFuc19sZWZ0LCBNQVhfQ0hBTlNfUEVSX1NVQkRFVik7CisJCXN1YnByaXYtPmRpby5pbnRyLmFzaWMgPSAtMTsKKwkJc3VicHJpdi0+ZGlvLmludHIuZmlyc3RfY2hhbiA9IC0xOworCQlzdWJwcml2LT5kaW8uaW50ci5hc2ljX2NoYW4gPSAtMTsKKwkJc3VicHJpdi0+ZGlvLmludHIubnVtX2FzaWNfY2hhbnMgPSAtMTsKKwkJc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlID0gMDsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKworCQkvKiBzYXZlIHRoZSBpb3BvcnQgYWRkcmVzcyBmb3IgZWFjaCAncG9ydCcgb2YgOCBjaGFubmVscyBpbiB0aGUKKwkJICAgc3ViZGV2aWNlICovCisJCWZvciAoYnl0ZV9ubyA9IDA7IGJ5dGVfbm8gPCBQT1JUU19QRVJfU1VCREVWOyArK2J5dGVfbm8sICsrcG9ydCkgeworCQkJaWYgKHBvcnQgPj0gUE9SVFNfUEVSX0FTSUMpIHsKKwkJCQlwb3J0ID0gMDsKKwkJCQkrK2FzaWM7CisJCQkJdGhpc2FzaWNfY2hhbmN0ID0gMDsKKwkJCX0KKwkJCXN1YnByaXYtPmlvYmFzZXNbYnl0ZV9ub10gPQorCQkJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIHBvcnQ7CisKKwkJCWlmICh0aGlzYXNpY19jaGFuY3QgPAorCQkJCUNIQU5TX1BFUl9QT1JUICogSU5UUl9QT1JUU19QRVJfQVNJQworCQkJCSYmIHN1YnByaXYtPmRpby5pbnRyLmFzaWMgPCAwKSB7CisJCQkJLyogdGhpcyBpcyBhbiBpbnRlcnJ1cHQgc3ViZGV2aWNlLCBzbyBzZXR1cCB0aGUgc3RydWN0ICovCisJCQkJc3VicHJpdi0+ZGlvLmludHIuYXNpYyA9IGFzaWM7CisJCQkJc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlID0gMDsKKwkJCQlzdWJwcml2LT5kaW8uaW50ci5zdG9wX2NvdW50ID0gMDsKKwkJCQlzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuID0gYnl0ZV9ubyAqIDg7CisJCQkJc3VicHJpdi0+ZGlvLmludHIuYXNpY19jaGFuID0gdGhpc2FzaWNfY2hhbmN0OworCQkJCXN1YnByaXYtPmRpby5pbnRyLm51bV9hc2ljX2NoYW5zID0KKwkJCQkJcy0+bl9jaGFuIC0KKwkJCQkJc3VicHJpdi0+ZGlvLmludHIuZmlyc3RfY2hhbjsKKwkJCQlzLT5jYW5jZWwgPSBwY21taW9fY2FuY2VsOworCQkJCXMtPmRvX2NtZCA9IHBjbW1pb19jbWQ7CisJCQkJcy0+ZG9fY21kdGVzdCA9IHBjbW1pb19jbWR0ZXN0OworCQkJCXMtPmxlbl9jaGFubGlzdCA9CisJCQkJCXN1YnByaXYtPmRpby5pbnRyLm51bV9hc2ljX2NoYW5zOworCQkJfQorCQkJdGhpc2FzaWNfY2hhbmN0ICs9IENIQU5TX1BFUl9QT1JUOworCQl9CisJCXNwaW5fbG9ja19pbml0KCZzdWJwcml2LT5kaW8uaW50ci5zcGlubG9jayk7CisKKwkJY2hhbnNfbGVmdCAtPSBzLT5uX2NoYW47CisKKwkJaWYgKCFjaGFuc19sZWZ0KSB7CisJCQlhc2ljID0gMDsJLyogcmVzZXQgdGhlIGFzaWMgdG8gb3VyIGZpcnN0IGFzaWMsIHRvIGRvIGludHIgc3ViZGV2cyAqLworCQkJcG9ydCA9IDA7CisJCX0KKworCX0KKworCWluaXRfYXNpY3MoZGV2KTsJLyogY2xlYXIgb3V0IGFsbCB0aGUgcmVnaXN0ZXJzLCBiYXNpY2FsbHkgKi8KKworCWZvciAoYXNpYyA9IDA7IGlycVswXSAmJiBhc2ljIDwgTUFYX0FTSUNTOyArK2FzaWMpIHsKKwkJaWYgKGlycVthc2ljXQorCQkJJiYgY29tZWRpX3JlcXVlc3RfaXJxKGlycVthc2ljXSwgaW50ZXJydXB0X3BjbW1pbywKKwkJCQlJUlFGX1NIQVJFRCwgdGhpc2JvYXJkLT5uYW1lLCBkZXYpKSB7CisJCQlpbnQgaTsKKwkJCS8qIHVucm9sbCB0aGUgYWxsb2NhdGVkIGlycXMuLiAqLworCQkJZm9yIChpID0gYXNpYyAtIDE7IGkgPj0gMDsgLS1pKSB7CisJCQkJY29tZWRpX2ZyZWVfaXJxKGlycVtpXSwgZGV2KTsKKwkJCQlkZXZwcml2LT5hc2ljc1tpXS5pcnEgPSBpcnFbaV0gPSAwOworCQkJfQorCQkJaXJxW2FzaWNdID0gMDsKKwkJfQorCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pcnEgPSBpcnFbYXNpY107CisJfQorCisJZGV2LT5pcnEgPSBpcnFbMF07CS8qIGdyci4uIHdpc2ggY29tZWRpIGRldiBzdHJ1Y3Qgc3VwcG9ydGVkIG11bHRpcGxlCisJCQkJICAgaXJxcy4uICovCisKKwlpZiAoaXJxWzBdKSB7CisJCXByaW50aygiaXJxOiAldSAiLCBpcnFbMF0pOworCQlpZiAoaXJxWzFdICYmIHRoaXNib2FyZC0+ZGlvX251bV9hc2ljcyA9PSAyKQorCQkJcHJpbnRrKCJzZWNvbmQgQVNJQyBpcnE6ICV1ICIsIGlycVsxXSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIoSVJRIG1vZGUgZGlzYWJsZWQpICIpOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNtbWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSk7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc2JvYXJkLT50b3RhbF9pb3NpemUpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9BU0lDUzsgKytpKSB7CisJCWlmIChkZXZwcml2ICYmIGRldnByaXYtPmFzaWNzW2ldLmlycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXZwcml2LT5hc2ljc1tpXS5pcnEsIGRldik7CisJfQorCisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+c3ByaXZzKQorCQlrZnJlZShkZXZwcml2LT5zcHJpdnMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBwY21taW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGJ5dGVfbm87CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBOT1RFOgorCSAgIHJlYWRpbmcgYSAwIG1lYW5zIHRoaXMgY2hhbm5lbCB3YXMgaGlnaAorCSAgIHdyaXRpbmUgYSAwIHNldHMgdGhlIGNoYW5uZWwgaGlnaAorCSAgIHJlYWRpbmcgYSAxIG1lYW5zIHRoaXMgY2hhbm5lbCB3YXMgbG93CisJICAgd3JpdGluZyBhIDEgbWVhbnMgc2V0IHRoaXMgY2hhbm5lbCBsb3cKKworCSAgIFRoZXJlZm9yZSBldmVyeXRoaW5nIGlzIGFsd2F5cyBpbnZlcnRlZC4gKi8KKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworCisjaWZkZWYgREFNTUlUX0lUU19CUk9LRU4KKwkvKiBERUJVRyAqLworCXByaW50aygid3JpdGUgbWFzazogJTA4eCAgZGF0YTogJTA4eFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisjZW5kaWYKKworCXMtPnN0YXRlID0gMDsKKworCWZvciAoYnl0ZV9ubyA9IDA7IGJ5dGVfbm8gPCBzLT5uX2NoYW4gLyBDSEFOU19QRVJfUE9SVDsgKytieXRlX25vKSB7CisJCS8qIGFkZHJlc3Mgb2YgOC1iaXQgcG9ydCAqLworCQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IHN1YnByaXYtPmlvYmFzZXNbYnl0ZV9ub10sCisJCQkvKiBiaXQgb2Zmc2V0IG9mIHBvcnQgaW4gMzItYml0IGRvdWJsZXdvcmQgKi8KKwkJCW9mZnNldCA9IGJ5dGVfbm8gKiA4OworCQkvKiB0aGlzIDgtYml0IHBvcnQncyBkYXRhICovCisJCXVuc2lnbmVkIGNoYXIgYnl0ZSA9IDAsCisJCQkvKiBUaGUgd3JpdGUgbWFzayBmb3IgdGhpcyBwb3J0IChpZiBhbnkpICovCisJCQl3cml0ZV9tYXNrX2J5dGUgPSAoZGF0YVswXSA+PiBvZmZzZXQpICYgMHhmZiwKKwkJCS8qIFRoZSBkYXRhIGJ5dGUgZm9yIHRoaXMgcG9ydCAqLworCQkJZGF0YV9ieXRlID0gKGRhdGFbMV0gPj4gb2Zmc2V0KSAmIDB4ZmY7CisKKwkJYnl0ZSA9IGluYihpb2FkZHIpOwkvKiByZWFkIGFsbCA4LWJpdHMgZm9yIHRoaXMgcG9ydCAqLworCisjaWZkZWYgREFNTUlUX0lUU19CUk9LRU4KKwkJLyogREVCVUcgKi8KKwkJcHJpbnRrKCJieXRlICVkIHdtYiAlMDJ4IGRiICUwMnggb2Zmc2V0ICUwMmQgaW8gJTA0eCwgZGF0YV9pbiAlMDJ4ICIsIGJ5dGVfbm8sICh1bnNpZ25lZCl3cml0ZV9tYXNrX2J5dGUsICh1bnNpZ25lZClkYXRhX2J5dGUsIG9mZnNldCwgaW9hZGRyLCAodW5zaWduZWQpYnl0ZSk7CisjZW5kaWYKKworCQlpZiAod3JpdGVfbWFza19ieXRlKSB7CisJCQkvKiB0aGlzIGJ5dGUgaGFzIHNvbWUgd3JpdGVfYml0cyAtLSBzbyBzZXQgdGhlIG91dHB1dCBsaW5lcyAqLworCQkJYnl0ZSAmPSB+d3JpdGVfbWFza19ieXRlOwkvKiBjbGVhciBiaXRzIGZvciB3cml0ZSBtYXNrICovCisJCQlieXRlIHw9IH5kYXRhX2J5dGUgJiB3cml0ZV9tYXNrX2J5dGU7CS8qIHNldCB0byBpbnZlcnRlZCBkYXRhX2J5dGUgKi8KKwkJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IHN0YXRlICovCisJCQlvdXRiKGJ5dGUsIGlvYWRkcik7CisJCX0KKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCQkvKiBERUJVRyAqLworCQlwcmludGsoImRhdGFfb3V0X2J5dGUgJTAyeFxuIiwgKHVuc2lnbmVkKWJ5dGUpOworI2VuZGlmCisJCS8qIHNhdmUgdGhlIGRpZ2l0YWwgaW5wdXQgbGluZXMgZm9yIHRoaXMgYnl0ZS4uICovCisJCXMtPnN0YXRlIHw9ICgodW5zaWduZWQgaW50KWJ5dGUpIDw8IG9mZnNldDsKKwl9CisKKwkvKiBub3cgcmV0dXJuIHRoZSBESU8gbGluZXMgdG8gZGF0YVsxXSAtIG5vdGUgdGhleSBjYW1lIGludmVydGVkISAqLworCWRhdGFbMV0gPSB+cy0+c3RhdGU7CisKKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCS8qIERFQlVHICovCisJcHJpbnRrKCJzLT5zdGF0ZSAlMDh4IGRhdGFfb3V0ICUwOHhcbiIsIHMtPnN0YXRlLCBkYXRhWzFdKTsKKyNlbmRpZgorCisJcmV0dXJuIDI7Cit9CisKKy8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworICogY29uZmlndXJlZCBieSBhIHNwZWNpYWwgaW5zbl9jb25maWcgaW5zdHJ1Y3Rpb24uICBjaGFuc3BlYworICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KK3N0YXRpYyBpbnQgcGNtbWlvX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgYnl0ZV9ubyA9IGNoYW4gLyA4LCBiaXRfbm8gPQorCQljaGFuICUgODsKKwl1bnNpZ25lZCBsb25nIGlvYWRkcjsKKwl1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKwkvKiBDb21wdXRlIGlvYWRkciBmb3IgdGhpcyBjaGFubmVsICovCisJaW9hZGRyID0gc3VicHJpdi0+aW9iYXNlc1tieXRlX25vXTsKKworCS8qIE5PVEU6CisJICAgd3JpdGluZyBhIDAgYW4gSU8gY2hhbm5lbCdzIGJpdCBzZXRzIHRoZSBjaGFubmVsIHRvIElOUFVUCisJICAgYW5kIHB1bGxzIHRoZSBsaW5lIGhpZ2ggYXMgd2VsbAorCisJICAgd3JpdGluZyBhIDEgdG8gYW4gSU8gY2hhbm5lbCdzICBiaXQgcHVsbHMgdGhlIGxpbmUgbG93CisKKwkgICBBbGwgY2hhbm5lbHMgYXJlIGltcGxpY2l0bHkgYWx3YXlzIGluIE9VVFBVVCBtb2RlIC0tIGJ1dCB3aGVuCisJICAgdGhleSBhcmUgaGlnaCB0aGV5IGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIGluIElOUFVUIG1vZGUuLgorCisJICAgVGh1cywgd2Ugb25seSBmb3JjZSBjaGFubmVscyBsb3cgaWYgdGhlIGNvbmZpZyByZXF1ZXN0IHdhcyBJTlBVVCwKKwkgICBvdGhlcndpc2Ugd2UgZG8gbm90aGluZyB0byB0aGUgaGFyZHdhcmUuICAgICovCisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCS8qIHNhdmUgdG8gaW9fYml0cyAtLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBzaW5jZQorCQkgICBhbGwgaW5wdXQgY2hhbm5lbHMgYXJlIGFsc28gb3V0cHV0IGNoYW5uZWxzLi4uICovCisJCXMtPmlvX2JpdHMgfD0gMSA8PCBjaGFuOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJLyogd3JpdGUgYSAwIHRvIHRoZSBhY3R1YWwgcmVnaXN0ZXIgcmVwcmVzZW50aW5nIHRoZSBjaGFubmVsCisJCSAgIHRvIHNldCBpdCB0byAnaW5wdXQnLiAgMCBtZWFucyAiZmxvYXQgaGlnaCIuICovCisJCWJ5dGUgPSBpbmIoaW9hZGRyKTsKKwkJYnl0ZSAmPSB+KDEgPDwgYml0X25vKTsKKwkJCQkvKio8IHNldCBpbnB1dCBjaGFubmVsIHRvICcwJyAqLworCisJCS8qIHdyaXRlIG91dCBieXRlIC0tIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBhY3R1YWxseSBhZmZlY3QgdGhlCisJCSAgIGhhcmR3YXJlIGFzIGFsbCBjaGFubmVscyBhcmUgaW1wbGljaXRseSBvdXRwdXQgLS0gYnV0IGlucHV0CisJCSAgIGNoYW5uZWxzIGFyZSBzZXQgdG8gZmxvYXQtaGlnaCAqLworCQlvdXRiKGJ5dGUsIGlvYWRkcik7CisKKwkJLyogc2F2ZSB0byBpb19iaXRzICovCisJCXMtPmlvX2JpdHMgJj0gfigxIDw8IGNoYW4pOworCQlicmVhazsKKworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQkvKiByZXRyZWl2ZSBmcm9tIHNoYWRvdyByZWdpc3RlciAqLworCQlkYXRhWzFdID0KKwkJCShzLT4KKwkJCWlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfYXNpY3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CQkJCS8qIHNldHMgdXAgYW4KKwkJCQkgICBBU0lDIGNoaXAgdG8gZGVmYXVsdHMgKi8KKwlpbnQgYXNpYzsKKworCWZvciAoYXNpYyA9IDA7IGFzaWMgPCB0aGlzYm9hcmQtPmRpb19udW1fYXNpY3M7ICsrYXNpYykgeworCQlpbnQgcG9ydCwgcGFnZTsKKwkJdW5zaWduZWQgbG9uZyBiYXNlYWRkciA9IGRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZTsKKworCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIDApOwkvKiBzd2l0Y2ggYmFjayB0byBwYWdlIDAgKi8KKworCQkvKiBmaXJzdCwgY2xlYXIgYWxsIHRoZSBESU8gcG9ydCBiaXRzICovCisJCWZvciAocG9ydCA9IDA7IHBvcnQgPCBQT1JUU19QRVJfQVNJQzsgKytwb3J0KQorCQkJb3V0YigwLCBiYXNlYWRkciArIFJFR19QT1JUMCArIHBvcnQpOworCisJCS8qIE5leHQsIGNsZWFyIGFsbCB0aGUgcGFnZWQgcmVnaXN0ZXJzIGZvciBlYWNoIHBhZ2UgKi8KKwkJZm9yIChwYWdlID0gMTsgcGFnZSA8IE5VTV9QQUdFUzsgKytwYWdlKSB7CisJCQlpbnQgcmVnOworCQkJLyogbm93IGNsZWFyIGFsbCB0aGUgcGFnZWQgcmVnaXN0ZXJzICovCisJCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIHBhZ2UpOworCQkJZm9yIChyZWcgPSBGSVJTVF9QQUdFRF9SRUc7CisJCQkJcmVnIDwgRklSU1RfUEFHRURfUkVHICsgTlVNX1BBR0VEX1JFR1M7ICsrcmVnKQorCQkJCW91dGIoMCwgYmFzZWFkZHIgKyByZWcpOworCQl9CisKKwkJLyogREVCVUcgIHNldCByaXNpbmcgZWRnZSBpbnRlcnJ1cHRzIG9uIHBvcnQwIG9mIGJvdGggYXNpY3MgKi8KKwkJLypzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfUE9MKTsKKwkJICAgb3V0YigweGZmLCBiYXNlYWRkciArIFJFR19QT0wwKTsKKwkJICAgc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX0VOQUIpOworCQkgICBvdXRiKDB4ZmYsIGJhc2VhZGRyICsgUkVHX0VOQUIwKTsgKi8KKwkJLyogRU5EIERFQlVHICovCisKKwkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCAwKTsJLyogc3dpdGNoIGJhY2sgdG8gZGVmYXVsdCBwYWdlIDAgKi8KKworCX0KK30KKworc3RhdGljIHZvaWQgc3dpdGNoX3BhZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcGFnZSkKK3sKKwlpZiAoYXNpYyA8IDAgfHwgYXNpYyA+PSB0aGlzYm9hcmQtPmRpb19udW1fYXNpY3MpCisJCXJldHVybjsJCS8qIHBhcmFub2lhICovCisJaWYgKHBhZ2UgPCAwIHx8IHBhZ2UgPj0gTlVNX1BBR0VTKQorCQlyZXR1cm47CQkvKiBtb3JlIHBhcmFub2lhICovCisKKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayAmPSB+UkVHX1BBR0VfTUFTSzsKKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayB8PSBwYWdlIDw8IFJFR19QQUdFX0JJVE9GRlNFVDsKKworCS8qIG5vdyB3cml0ZSBvdXQgdGhlIHNoYWRvdyByZWdpc3RlciAqLworCW91dGIoZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2ssCisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19QQUdFTE9DSyk7Cit9CisKKyNpZmRlZiBub3R1c2VkCitzdGF0aWMgdm9pZCBsb2NrX3BvcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcG9ydCkKK3sKKwlpZiAoYXNpYyA8IDAgfHwgYXNpYyA+PSB0aGlzYm9hcmQtPmRpb19udW1fYXNpY3MpCisJCXJldHVybjsJCS8qIHBhcmFub2lhICovCisJaWYgKHBvcnQgPCAwIHx8IHBvcnQgPj0gUE9SVFNfUEVSX0FTSUMpCisJCXJldHVybjsJCS8qIG1vcmUgcGFyYW5vaWEgKi8KKworCWRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrIHw9IDB4MSA8PCBwb3J0OworCS8qIG5vdyB3cml0ZSBvdXQgdGhlIHNoYWRvdyByZWdpc3RlciAqLworCW91dGIoZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2ssCisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19QQUdFTE9DSyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCB1bmxvY2tfcG9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwb3J0KQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+ZGlvX251bV9hc2ljcykKKwkJcmV0dXJuOwkJLyogcGFyYW5vaWEgKi8KKwlpZiAocG9ydCA8IDAgfHwgcG9ydCA+PSBQT1JUU19QRVJfQVNJQykKKwkJcmV0dXJuOwkJLyogbW9yZSBwYXJhbm9pYSAqLworCWRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrICY9IH4oMHgxIDw8IHBvcnQpIHwgUkVHX0xPQ0tfTUFTSzsKKwkvKiBub3cgd3JpdGUgb3V0IHRoZSBzaGFkb3cgcmVnaXN0ZXIgKi8KKwlvdXRiKGRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrLAorCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgKyBSRUdfUEFHRUxPQ0spOworfQorI2VuZGlmIC8qIG5vdHVzZWQgKi8KKworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY21taW8oaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgYXNpYywgZ290MSA9IDA7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCisJZm9yIChhc2ljID0gMDsgYXNpYyA8IE1BWF9BU0lDUzsgKythc2ljKSB7CisJCWlmIChpcnEgPT0gZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJdW5zaWduZWQgdHJpZ2dlcmVkID0gMDsKKwkJCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlOworCQkJLyogaXQgaXMgYW4gaW50ZXJydXB0IGZvciBBU0lDICNhc2ljICovCisJCQl1bnNpZ25lZCBjaGFyIGludF9wZW5kOworCisJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFzaWNzW2FzaWNdLnNwaW5sb2NrLAorCQkJCWZsYWdzKTsKKworCQkJaW50X3BlbmQgPSBpbmIoaW9iYXNlICsgUkVHX0lOVF9QRU5ESU5HKSAmIDB4MDc7CisKKwkJCWlmIChpbnRfcGVuZCkgeworCQkJCWludCBwb3J0OworCQkJCWZvciAocG9ydCA9IDA7IHBvcnQgPCBJTlRSX1BPUlRTX1BFUl9BU0lDOworCQkJCQkrK3BvcnQpIHsKKwkJCQkJaWYgKGludF9wZW5kICYgKDB4MSA8PCBwb3J0KSkgeworCQkJCQkJdW5zaWduZWQgY2hhcgorCQkJCQkJCWlvX2xpbmVzX3dpdGhfZWRnZXMgPSAwOworCQkJCQkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLAorCQkJCQkJCVBBR0VfSU5UX0lEKTsKKwkJCQkJCWlvX2xpbmVzX3dpdGhfZWRnZXMgPQorCQkJCQkJCWluYihpb2Jhc2UgKworCQkJCQkJCVJFR19JTlRfSUQwICsgcG9ydCk7CisKKwkJCQkJCWlmIChpb19saW5lc193aXRoX2VkZ2VzKQorCQkJCQkJCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0ICovCisJCQkJCQkJb3V0YigwLCBpb2Jhc2UgKworCQkJCQkJCQlSRUdfSU5UX0lEMCArCisJCQkJCQkJCXBvcnQpOworCisJCQkJCQl0cmlnZ2VyZWQgfD0KKwkJCQkJCQlpb19saW5lc193aXRoX2VkZ2VzIDw8CisJCQkJCQkJcG9ydCAqIDg7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkrK2dvdDE7CisJCQl9CisKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hc2ljc1thc2ljXS4KKwkJCQlzcGlubG9jaywgZmxhZ3MpOworCisJCQlpZiAodHJpZ2dlcmVkKSB7CisJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJCQkJLyogVE9ETyBoZXJlOiBkaXNwYXRjaCBpbyBsaW5lcyB0byBzdWJkZXZzIHdpdGggY29tbWFuZHMuLiAqLworCQkJCXByaW50aygiUENNTUlPIERFQlVHOiBnb3QgZWRnZSBkZXRlY3QgaW50ZXJydXB0ICVkIGFzaWMgJWQgd2hpY2hfY2hhbnM6ICUwNnhcbiIsIGlycSwgYXNpYywgdHJpZ2dlcmVkKTsKKwkJCQlmb3IgKHMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCQkJCQlzIDwgZGV2LT5zdWJkZXZpY2VzICsgZGV2LT5uX3N1YmRldmljZXM7CisJCQkJCSsrcykgeworCQkJCQlpZiAoc3VicHJpdi0+ZGlvLmludHIuYXNpYyA9PSBhc2ljKSB7CS8qIHRoaXMgaXMgYW4gaW50ZXJydXB0IHN1YmRldiwgYW5kIGl0IG1hdGNoZXMgdGhpcyBhc2ljISAqLworCQkJCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJCQkJCXVuc2lnbmVkIG9sZGV2ZW50czsKKworCQkJCQkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlCisJCQkJCQkJKCZzdWJwcml2LT5kaW8uaW50ci4KKwkJCQkJCQlzcGlubG9jaywgZmxhZ3MpOworCisJCQkJCQlvbGRldmVudHMgPSBzLT5hc3luYy0+ZXZlbnRzOworCisJCQkJCQlpZiAoc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlKSB7CisJCQkJCQkJdW5zaWduZWQgbXl0cmlnID0KKwkJCQkJCQkJKCh0cmlnZ2VyZWQgPj4KKwkJCQkJCQkJCXN1YnByaXYtPgorCQkJCQkJCQkJZGlvLgorCQkJCQkJCQkJaW50ci4KKwkJCQkJCQkJCWFzaWNfY2hhbikKKwkJCQkJCQkJJiAoKDB4MSA8PCBzdWJwcml2LT5kaW8uaW50ci5udW1fYXNpY19jaGFucykgLSAxKSkgPDwgc3VicHJpdi0+ZGlvLmludHIuZmlyc3RfY2hhbjsKKwkJCQkJCQlpZiAobXl0cmlnICYgc3VicHJpdi0+CisJCQkJCQkJCWRpby5pbnRyLgorCQkJCQkJCQllbmFibGVkX21hc2spIHsKKwkJCQkJCQkJdW5zaWduZWQgaW50IHZhbCA9CisJCQkJCQkJCQkwOworCQkJCQkJCQl1bnNpZ25lZCBpbnQgbiwKKwkJCQkJCQkJCWNoLCBsZW47CisKKwkJCQkJCQkJbGVuID0gcy0+YXN5bmMtPgorCQkJCQkJCQkJY21kLgorCQkJCQkJCQkJY2hhbmxpc3RfbGVuOworCQkJCQkJCQlmb3IgKG4gPSAwOworCQkJCQkJCQkJbiA8IGxlbjsKKwkJCQkJCQkJCW4rKykgeworCQkJCQkJCQkJY2ggPSBDUl9DSEFOKHMtPmFzeW5jLT5jbWQuY2hhbmxpc3Rbbl0pOworCQkJCQkJCQkJaWYgKG15dHJpZyAmICgxVSA8PCBjaCkpIHsKKwkJCQkJCQkJCQl2YWwgfD0gKDFVIDw8IG4pOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJCS8qIFdyaXRlIHRoZSBzY2FuIHRvIHRoZSBidWZmZXIuICovCisJCQkJCQkJCWlmIChjb21lZGlfYnVmX3B1dChzLT5hc3luYywgKChzaG9ydCAqKSAmIHZhbClbMF0pCisJCQkJCQkJCQkmJgorCQkJCQkJCQkJY29tZWRpX2J1Zl9wdXQKKwkJCQkJCQkJCShzLT5hc3luYywgKChzaG9ydCAqKSAmIHZhbClbMV0pKSB7CisJCQkJCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IChDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TKTsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCS8qIE92ZXJmbG93ISBTdG9wIGFjcXVpc2l0aW9uISEgKi8KKwkJCQkJCQkJCS8qIFRPRE86IFNUT1BfQUNRVUlTSVRJT05fQ0FMTF9IRVJFISEgKi8KKwkJCQkJCQkJCXBjbW1pb19zdG9wX2ludHIKKwkJCQkJCQkJCQkoZGV2LAorCQkJCQkJCQkJCXMpOworCQkJCQkJCQl9CisKKwkJCQkJCQkJLyogQ2hlY2sgZm9yIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwkJCQkJCQkJaWYgKCFzdWJwcml2LT4KKwkJCQkJCQkJCWRpby4KKwkJCQkJCQkJCWludHIuCisJCQkJCQkJCQljb250aW51b3VzKQorCQkJCQkJCQl7CisJCQkJCQkJCQkvKiBzdG9wX3NyYyA9PSBUUklHX0NPVU5UICovCisJCQkJCQkJCQlpZiAoc3VicHJpdi0+ZGlvLmludHIuc3RvcF9jb3VudCA+IDApIHsKKwkJCQkJCQkJCQlzdWJwcml2LT4KKwkJCQkJCQkJCQkJZGlvLgorCQkJCQkJCQkJCQlpbnRyLgorCQkJCQkJCQkJCQlzdG9wX2NvdW50LS07CisJCQkJCQkJCQkJaWYgKHN1YnByaXYtPmRpby5pbnRyLnN0b3BfY291bnQgPT0gMCkgeworCQkJCQkJCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJCQkJCQkJCS8qIFRPRE86IFNUT1BfQUNRVUlTSVRJT05fQ0FMTF9IRVJFISEgKi8KKwkJCQkJCQkJCQkJcGNtbWlvX3N0b3BfaW50cgorCQkJCQkJCQkJCQkJKGRldiwKKwkJCQkJCQkJCQkJCXMpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUKKwkJCQkJCQkoJnN1YnByaXYtPmRpby5pbnRyLgorCQkJCQkJCXNwaW5sb2NrLCBmbGFncyk7CisKKwkJCQkJCWlmIChvbGRldmVudHMgIT0KKwkJCQkJCQlzLT5hc3luYy0+ZXZlbnRzKSB7CisJCQkJCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkJCQl9CisKKwkJCQkJfQorCisJCQkJfQorCQkJfQorCisJCX0KKwl9CisJaWYgKCFnb3QxKQorCQlyZXR1cm4gSVJRX05PTkU7CS8qIGludGVycnVwdCBmcm9tIG90aGVyIHNvdXJjZSAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcGNtbWlvX3N0b3BfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBucG9ydHMsIGZpcnN0cG9ydCwgYXNpYywgcG9ydDsKKworCWlmICgoYXNpYyA9IHN1YnByaXYtPmRpby5pbnRyLmFzaWMpIDwgMCkKKwkJcmV0dXJuOwkJLyogbm90IGFuIGludGVycnVwdCBzdWJkZXYgKi8KKworCXN1YnByaXYtPmRpby5pbnRyLmVuYWJsZWRfbWFzayA9IDA7CisJc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlID0gMDsKKwlzLT5hc3luYy0+aW50dHJpZyA9IDA7CisJbnBvcnRzID0gc3VicHJpdi0+ZGlvLmludHIubnVtX2FzaWNfY2hhbnMgLyBDSEFOU19QRVJfUE9SVDsKKwlmaXJzdHBvcnQgPSBzdWJwcml2LT5kaW8uaW50ci5hc2ljX2NoYW4gLyBDSEFOU19QRVJfUE9SVDsKKwlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfRU5BQik7CisJZm9yIChwb3J0ID0gZmlyc3Rwb3J0OyBwb3J0IDwgZmlyc3Rwb3J0ICsgbnBvcnRzOyArK3BvcnQpIHsKKwkJLyogZGlzYWJsZSBhbGwgaW50cnMgZm9yIHRoaXMgc3ViZGV2Li4gKi8KKwkJb3V0YigwLCBkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgKyBSRUdfRU5BQjAgKyBwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGNtbWlvX3N0YXJ0X2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAoIXN1YnByaXYtPmRpby5pbnRyLmNvbnRpbnVvdXMgJiYgc3VicHJpdi0+ZGlvLmludHIuc3RvcF9jb3VudCA9PSAwKSB7CisJCS8qIEFuIGVtcHR5IGFjcXVpc2l0aW9uISAqLworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXN1YnByaXYtPmRpby5pbnRyLmFjdGl2ZSA9IDA7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGJpdHMgPSAwLCBwb2xfYml0cyA9IDAsIG47CisJCWludCBucG9ydHMsIGZpcnN0cG9ydCwgYXNpYywgcG9ydDsKKwkJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJCWlmICgoYXNpYyA9IHN1YnByaXYtPmRpby5pbnRyLmFzaWMpIDwgMCkKKwkJCXJldHVybiAxOwkvKiBub3QgYW4gaW50ZXJydXB0CisJCQkJCSAgIHN1YmRldiAqLworCQlzdWJwcml2LT5kaW8uaW50ci5lbmFibGVkX21hc2sgPSAwOworCQlzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUgPSAxOworCQlucG9ydHMgPSBzdWJwcml2LT5kaW8uaW50ci5udW1fYXNpY19jaGFucyAvIENIQU5TX1BFUl9QT1JUOworCQlmaXJzdHBvcnQgPSBzdWJwcml2LT5kaW8uaW50ci5hc2ljX2NoYW4gLyBDSEFOU19QRVJfUE9SVDsKKwkJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJCWZvciAobiA9IDA7IG4gPCBjbWQtPmNoYW5saXN0X2xlbjsgbisrKSB7CisJCQkJYml0cyB8PSAoMVUgPDwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W25dKSk7CisJCQkJcG9sX2JpdHMgfD0gKENSX0FSRUYoY21kLT5jaGFubGlzdFtuXSkKKwkJCQkJfHwgQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtuXSkgPyAxVSA6IDBVKQorCQkJCQk8PCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJfQorCQl9CisJCWJpdHMgJj0gKCgweDEgPDwgc3VicHJpdi0+ZGlvLmludHIubnVtX2FzaWNfY2hhbnMpIC0KKwkJCTEpIDw8IHN1YnByaXYtPmRpby5pbnRyLmZpcnN0X2NoYW47CisJCXN1YnByaXYtPmRpby5pbnRyLmVuYWJsZWRfbWFzayA9IGJpdHM7CisKKwkJewkJLyogdGhlIGJlbG93IGNvZGUgY29uZmlndXJlcyB0aGUgYm9hcmQgdG8gdXNlIGEgc3BlY2lmaWMgSVJRIGZyb20gMC0xNS4gKi8KKwkJCXVuc2lnbmVkIGNoYXIgYjsKKwkJCS8qIHNldCByZXNvdXJjZSBlbmFibGUgcmVnaXN0ZXIgdG8gZW5hYmxlIElSUSBvcGVyYXRpb24gKi8KKwkJCW91dGIoMSA8PCA0LCBkZXYtPmlvYmFzZSArIDMpOworCQkJLyogc2V0IGJpdHMgMC0zIG9mIGIgdG8gdGhlIGlycSBudW1iZXIgZnJvbSAwLTE1ICovCisJCQliID0gZGV2LT5pcnEgJiAoKDEgPDwgNCkgLSAxKTsKKwkJCW91dGIoYiwgZGV2LT5pb2Jhc2UgKyAyKTsKKwkJCS8qIGRvbmUsIHdlIHRvbGQgdGhlIGJvYXJkIHdoYXQgaXJxIHRvIHVzZSAqLworCQl9CisKKwkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX0VOQUIpOworCQlmb3IgKHBvcnQgPSBmaXJzdHBvcnQ7IHBvcnQgPCBmaXJzdHBvcnQgKyBucG9ydHM7ICsrcG9ydCkgeworCQkJdW5zaWduZWQgZW5hYiA9CisJCQkJYml0cyA+PiAoc3VicHJpdi0+ZGlvLmludHIuZmlyc3RfY2hhbiArIChwb3J0IC0KKwkJCQkJZmlyc3Rwb3J0KSAqIDgpICYgMHhmZiwgcG9sID0KKwkJCQlwb2xfYml0cyA+PiAoc3VicHJpdi0+ZGlvLmludHIuZmlyc3RfY2hhbiArCisJCQkJKHBvcnQgLSBmaXJzdHBvcnQpICogOCkgJiAweGZmOworCQkJLyogc2V0IGVuYWIgaW50cnMgZm9yIHRoaXMgc3ViZGV2Li4gKi8KKwkJCW91dGIoZW5hYiwKKwkJCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgKyBSRUdfRU5BQjAgKyBwb3J0KTsKKwkJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9QT0wpOworCQkJb3V0Yihwb2wsCisJCQkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX0VOQUIwICsgcG9ydCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtbWlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKHN1YnByaXYtPmRpby5pbnRyLmFjdGl2ZSkKKwkJcGNtbWlvX3N0b3BfaW50cihkZXYsIHMpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5kaW8uaW50ci5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB0cmlnZ2VyIGZ1bmN0aW9uIHRvIHN0YXJ0IGFjcXVpc2l0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK3BjbW1pb19pbnR0cmlnX3N0YXJ0X2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBldmVudCA9IDA7CisKKwlpZiAodHJpZ251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+ZGlvLmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IDA7CisJaWYgKHN1YnByaXYtPmRpby5pbnRyLmFjdGl2ZSkgeworCQlldmVudCA9IHBjbW1pb19zdGFydF9pbnRyKGRldiwgcyk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5kaW8uaW50ci5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGV2ZW50KSB7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogJ2RvX2NtZCcgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBwY21taW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGV2ZW50ID0gMDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+ZGlvLmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKwlzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUgPSAxOworCisJLyogU2V0IHVwIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCXN1YnByaXYtPmRpby5pbnRyLmNvbnRpbnVvdXMgPSAwOworCQlzdWJwcml2LT5kaW8uaW50ci5zdG9wX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVFJJR19OT05FICovCisJCXN1YnByaXYtPmRpby5pbnRyLmNvbnRpbnVvdXMgPSAxOworCQlzdWJwcml2LT5kaW8uaW50ci5zdG9wX2NvdW50ID0gMDsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHVwIHN0YXJ0IG9mIGFjcXVpc2l0aW9uLiAqLworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfSU5UOgorCQlzLT5hc3luYy0+aW50dHJpZyA9IHBjbW1pb19pbnR0cmlnX3N0YXJ0X2ludHI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRSSUdfTk9XICovCisJCWV2ZW50ID0gcGNtbWlvX3N0YXJ0X2ludHIoZGV2LCBzKTsKKwkJYnJlYWs7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5kaW8uaW50ci5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGV2ZW50KSB7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogJ2RvX2NtZHRlc3QnIGZ1bmN0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK3BjbW1pb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gKFRSSUdfTk9XIHwgVFJJR19JTlQpOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSAoVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCisJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoY21kLT5zY2FuX2JlZ2luX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgJiAoY21kLT5jb252ZXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjICYgKGNtZC0+c2Nhbl9lbmRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zdG9wX3NyYyAmIChjbWQtPnN0b3Bfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwkvKiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVyB8fCBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgKi8KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX0NPVU5UICovCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogYW55IGNvdW50IGFsbG93ZWQgKi8KKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwkvKiBpZiAoZXJyKSByZXR1cm4gNDsgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkY193YWl0X3JlYWR5KHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCXVuc2lnbmVkIGxvbmcgcmV0cnkgPSAxMDAwMDA7CisJd2hpbGUgKHJldHJ5LS0pCisJCWlmIChpbmIoaW9iYXNlICsgMykgJiAweDgwKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qIEFsbCB0aGlzIGlzIGZvciBBSSBhbmQgQU8gKi8KK3N0YXRpYyBpbnQgYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gc3VicHJpdi0+aW9iYXNlOworCisJLyoKKwkgICAxLiB3cml0ZSB0aGUgQ01EIGJ5dGUgKHRvIEJBU0UrMikKKwkgICAyLiByZWFkIGp1bmsgbG8gYnl0ZSAoQkFTRSswKQorCSAgIDMuIHJlYWQganVuayBoaSBieXRlIChCQVNFKzEpCisJICAgNC4gKG11eCBzZXR0bGVkIHNvKSB3cml0ZSBDTUQgYnl0ZSBhZ2FpbiAoQkFTRSsyKQorCSAgIDUuIHJlYWQgdmFsaWQgbG8gYnl0ZShCQVNFKzApCisJICAgNi4gcmVhZCB2YWxpZCBoaSBieXRlKEJBU0UrMSkKKworCSAgIEFkZGl0aW9uYWxseSBub3RlIHRoYXQgdGhlIEJBU0UgKz0gNCBpZiB0aGUgY2hhbm5lbCA+PSA4CisJICovCisKKwkvKiBjb252ZXJ0IG4gc2FtcGxlcyAqLworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJdW5zaWduZWQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCByYW5nZSA9CisJCQlDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIGFyZWYgPQorCQkJQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJCXVuc2lnbmVkIGNoYXIgY29tbWFuZF9ieXRlID0gMDsKKwkJdW5zaWduZWQgaW9vZmZzZXQgPSAwOworCQlzaG9ydCBzYW1wbGUsIGFkY19hZGp1c3QgPSAwOworCisJCWlmIChjaGFuID4gNykKKwkJCWNoYW4gLT0gOCwgaW9vZmZzZXQgPSA0OwkvKiB1c2UgdGhlIHNlY29uZCBkd29yZCBmb3IgY2hhbm5lbHMgPiA3ICovCisKKwkJaWYgKGFyZWYgIT0gQVJFRl9ESUZGKSB7CisJCQlhcmVmID0gQVJFRl9HUk9VTkQ7CisJCQljb21tYW5kX2J5dGUgfD0gMSA8PCA3OwkvKiBzZXQgYml0IDcgdG8gaW5kaWNhdGUgc2luZ2xlLWVuZGVkICovCisJCX0KKwkJaWYgKHJhbmdlIDwgMikKKwkJCWFkY19hZGp1c3QgPSAweDgwMDA7CS8qIGJpcG9sYXIgcmFuZ2VzICgtNSw1IC4uIC0xMCwxMCBuZWVkIHRvIGJlIGFkanVzdGVkIC0tIHRoYXQgaXMuLiB0aGV5IG5lZWQgdG8gd3JhcCBhcm91bmQgYnkgYWRkaW5nIDB4ODAwMCAqLworCisJCWlmIChjaGFuICUgMikgeworCQkJY29tbWFuZF9ieXRlIHw9IDEgPDwgNjsJLyogb2RkLW51bWJlcmVkIGNoYW5uZWxzIGhhdmUgYml0IDYgc2V0ICovCisJCX0KKworCQkvKiBzZWxlY3QgdGhlIGNoYW5uZWwsIGJpdHMgNC01ID09IGNoYW4vMiAqLworCQljb21tYW5kX2J5dGUgfD0gKChjaGFuIC8gMikgJiAweDMpIDw8IDQ7CisKKwkJLyogc2V0IHRoZSByYW5nZSwgYml0cyAyLTMgKi8KKwkJY29tbWFuZF9ieXRlIHw9IChyYW5nZSAmIDB4MykgPDwgMjsKKworCQkvKiBuZWVkIHRvIGRvIHRoaXMgdHdpY2UgdG8gbWFrZSBzdXJlIG11eCBzZXR0bGVkICovCisJCW91dGIoY29tbWFuZF9ieXRlLCBpb2Jhc2UgKyBpb29mZnNldCArIDIpOwkvKiBjaGFuL3JhbmdlL2FyZWYgc2VsZWN0ICovCisKKwkJYWRjX3dhaXRfcmVhZHkoaW9iYXNlICsgaW9vZmZzZXQpOwkvKiB3YWl0IGZvciB0aGUgYWRjIHRvIHNheSBpdCBmaW5pc2VkIHRoZSBjb252ZXJzaW9uICovCisKKwkJb3V0Yihjb21tYW5kX2J5dGUsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMik7CS8qIHNlbGVjdCB0aGUgY2hhbi9yYW5nZS9hcmVmIEFHQUlOICovCisKKwkJYWRjX3dhaXRfcmVhZHkoaW9iYXNlICsgaW9vZmZzZXQpOworCisJCXNhbXBsZSA9IGluYihpb2Jhc2UgKyBpb29mZnNldCArIDApOwkvKiByZWFkIGRhdGEgbG8gYnl0ZSAqLworCQlzYW1wbGUgfD0gaW5iKGlvYmFzZSArIGlvb2Zmc2V0ICsgMSkgPDwgODsJLyogcmVhZCBkYXRhIGhpIGJ5dGUgKi8KKwkJc2FtcGxlICs9IGFkY19hZGp1c3Q7CS8qIGFkanVzdG1lbnQgLi4gbXVuZ2UgZGF0YSAqLworCQlkYXRhW25dID0gc2FtcGxlOworCX0KKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGFvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCXVuc2lnbmVkIGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwkJaWYgKGNoYW4gPCBzLT5uX2NoYW4pCisJCQlkYXRhW25dID0gc3VicHJpdi0+YW8uc2hhZG93X3NhbXBsZXNbY2hhbl07CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHdhaXRfZGFjX3JlYWR5KHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCXVuc2lnbmVkIGxvbmcgcmV0cnkgPSAxMDAwMDBMOworCisJLyogVGhpcyBtYXkgc2VlbSBsaWtlIGFuIGFic3VyZCB3YXkgdG8gaGFuZGxlIHdhaXRpbmcgYW5kIHZpb2xhdGVzIHRoZQorCSAgICJubyBidXN5IHdhaXRpbmciIHBvbGljeS4gVGhlIGZhY3QgaXMgdGhhdCB0aGUgaGFyZHdhcmUgaXMKKwkgICBub3JtYWxseSBzbyBmYXN0IHRoYXQgd2UgdXN1YWxseSBvbmx5IG5lZWQgb25lIHRpbWUgdGhyb3VnaCB0aGUgbG9vcAorCSAgIGFueXdheS4gVGhlIGxvbmdlciB0aW1lb3V0IGlzIGZvciByYXJlIG9jY2FzaW9ucyBhbmQgZm9yIGRldGVjdGluZworCSAgIG5vbi1leGlzdGFudCBoYXJkd2FyZS4gICovCisKKwl3aGlsZSAocmV0cnktLSkgeworCQlpZiAoaW5iKGlvYmFzZSArIDMpICYgMHg4MCkKKwkJCXJldHVybiAwOworCisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwl1bnNpZ25lZCBpb2Jhc2UgPSBzdWJwcml2LT5pb2Jhc2UsIGlvb2Zmc2V0ID0gMDsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJdW5zaWduZWQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCByYW5nZSA9CisJCQlDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJCWlmIChjaGFuIDwgcy0+bl9jaGFuKSB7CisJCQl1bnNpZ25lZCBjaGFyIGNvbW1hbmRfYnl0ZSA9IDAsIHJhbmdlX2J5dGUgPQorCQkJCXJhbmdlICYgKCgxIDw8IDQpIC0gMSk7CisJCQlpZiAoY2hhbiA+PSA0KQorCQkJCWNoYW4gLT0gNCwgaW9vZmZzZXQgKz0gNDsKKwkJCS8qIHNldCB0aGUgcmFuZ2UuLiAqLworCQkJb3V0YihyYW5nZV9ieXRlLCBpb2Jhc2UgKyBpb29mZnNldCArIDApOworCQkJb3V0YigwLCBpb2Jhc2UgKyBpb29mZnNldCArIDEpOworCisJCQkvKiB0ZWxsIGl0IHRvIGJlZ2luICovCisJCQljb21tYW5kX2J5dGUgPSAoY2hhbiA8PCAxKSB8IDB4NjA7CisJCQlvdXRiKGNvbW1hbmRfYnl0ZSwgaW9iYXNlICsgaW9vZmZzZXQgKyAyKTsKKworCQkJd2FpdF9kYWNfcmVhZHkoaW9iYXNlICsgaW9vZmZzZXQpOworCisJCQlvdXRiKGRhdGFbbl0gJiAweGZmLCBpb2Jhc2UgKyBpb29mZnNldCArIDApOwkvKiBsb3cgb3JkZXIgYnl0ZSAqLworCQkJb3V0YigoZGF0YVtuXSA+PiA4KSAmIDB4ZmYsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMSk7CS8qIGhpZ2ggb3JkZXIgYnl0ZSAqLworCQkJY29tbWFuZF9ieXRlID0gMHg3MCB8IChjaGFuIDw8IDEpOwkvKiBzZXQgYml0IDQgb2YgY29tbWFuZCBieXRlIHRvIGluZGljYXRlIGRhdGEgaXMgbG9hZGVkIGFuZCB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJCS8qIHRyaWdnZXIgY29udmVyaW9uICovCisJCQlvdXRiKGNvbW1hbmRfYnl0ZSwgaW9iYXNlICsgaW9vZmZzZXQgKyAyKTsKKworCQkJd2FpdF9kYWNfcmVhZHkoaW9iYXNlICsgaW9vZmZzZXQpOworCisJCQlzdWJwcml2LT5hby5zaGFkb3dfc2FtcGxlc1tjaGFuXSA9IGRhdGFbbl07CS8qIHNhdmUgdG8gc2hhZG93IHJlZ2lzdGVyIGZvciBhb19yaW5zbiAqLworCQl9CisJfQorCXJldHVybiBuOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY211aW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY211aW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTdkOGI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jCkBAIC0wLDAgKzEsMTEwMSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY211aW8uYworICAgIERyaXZlciBmb3IgV2luc3lzdGVtcyBQQy0xMDQgYmFzZWQgNDgtY2hhbm5lbCBhbmQgOTYtY2hhbm5lbCBESU8gYm9hcmRzLgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwNiBDYWxpbiBBLiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBwY211aW8KK0Rlc2NyaXB0aW9uOiBBIGRyaXZlciBmb3IgdGhlIFBDTS1VSU80OEEgYW5kIFBDTS1VSU85NkEgYm9hcmRzIGZyb20gV2luc3lzdGVtcy4KK0RldmljZXM6IFtXaW5zeXN0ZW1zXSBQQ00tVUlPNDhBIChwY211aW80OCksIFBDTS1VSU85NkEgKHBjbXVpbzk2KQorQXV0aG9yOiBDYWxpbiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CitVcGRhdGVkOiBGcmksIDEzIEphbiAyMDA2IDEyOjAxOjAxIC0wNTAwCitTdGF0dXM6IHdvcmtzCisKK0EgZHJpdmVyIGZvciB0aGUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQtdG8tcHJvZ3JhbSBQQ00tVUlPNDhBIGFuZAorUENNLVVJTzk2QSBib2FyZHMgZnJvbSBXaW5zeXN0ZW1zLiAgVGhlc2UgYm9hcmRzIHVzZSBlaXRoZXIgb25lIG9yIHR3bworKGluIHRoZSA5Ni1ESU8gdmVyc2lvbikgV1MxNkM0OCBBU0lDIEhpZ2hEZW5zaXR5IEkvTyBDaGlwcyAoSERJTykuCitUaGlzIGNoaXAgaXMgaW50ZXJlc3RpbmcgaW4gdGhhdCBlYWNoIEkvTyBsaW5lIGlzIGluZGl2aWR1YWxseQorcHJvZ3JhbW1hYmxlIGZvciBJTlBVVCBvciBPVVRQVVQgKHRodXMgY29tZWRpX2Rpb19jb25maWcgY2FuIGJlIGRvbmUKK29uIGEgcGVyLWNoYW5uZWwgYmFzaXMpLiAgQWxzbywgZWFjaCBjaGlwIHN1cHBvcnRzIGVkZ2UtdHJpZ2dlcmVkCitpbnRlcnJ1cHRzIGZvciB0aGUgZmlyc3QgMjQgSS9PIGxpbmVzLiAgT2YgY291cnNlLCBzaW5jZSB0aGUKKzk2LWNoYW5uZWwgdmVyc2lvbiBvZiB0aGUgYm9hcmQgaGFzIHR3byBBU0lDcywgaXQgY2FuIGRldGVjdCBwb2xhcml0eQorY2hhbmdlcyBvbiB1cCB0byA0OCBJL08gbGluZXMuICBTaW5jZSB0aGlzIGlzIGVzc2VudGlhbGx5IGFuIChub24tUG5QKQorSVNBIGJvYXJkLCBJL08gQWRkcmVzcyBhbmQgSVJRIHNlbGVjdGlvbiBhcmUgZG9uZSB0aHJvdWdoIGp1bXBlcnMgb24KK3RoZSBib2FyZC4gIFlvdSBuZWVkIHRvIHBhc3MgdGhhdCBpbmZvcm1hdGlvbiB0byB0aGlzIGRyaXZlciBhcyB0aGUKK2ZpcnN0IGFuZCBzZWNvbmQgY29tZWRpX2NvbmZpZyBvcHRpb24sIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhhdCB0aGUKKzQ4LWNoYW5uZWwgdmVyc2lvbiB1c2VzIDE2IGJ5dGVzIG9mIElPIG1lbW9yeSBhbmQgdGhlIDk2LWNoYW5uZWwKK3ZlcnNpb24gdXNlcyAzMi1ieXRlcyAoaW4gY2FzZSB5b3UgYXJlIHdvcnJpZWQgYWJvdXQgY29uZmxpY3RzKS4gIFRoZQorNDgtY2hhbm5lbCBib2FyZCBpcyBzcGxpdCBpbnRvIHR3byAyNC1jaGFubmVsIGNvbWVkaSBzdWJkZXZpY2VzLgorVGhlIDk2LWNoYW5uZWwgYm9hcmQgaXMgc3BsaXQgaW50byA0IDI0LWNoYW5uZWwgRElPIHN1YmRldmljZXMuCisKK05vdGUgdGhhdCBJUlEgc3VwcG9ydCBoYXMgYmVlbiBhZGRlZCwgYnV0IGl0IGlzIHVudGVzdGVkLgorCitUbyB1c2UgZWRnZS1kZXRlY3Rpb24gSVJRIHN1cHBvcnQsIHBhc3MgdGhlIElSUXMgb2YgYm90aCBBU0lDUworKGZvciB0aGUgOTYgY2hhbm5lbCB2ZXJzaW9uKSBvciBqdXN0IDEgQVNJQyAoZm9yIDQ4LWNoYW5uZWwgdmVyc2lvbikuCitUaGVuLCB1c2UgdXNlIGNvbWVkaV9jb21tYW5kcyB3aXRoIFRSSUdfTk9XLgorWW91ciBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgYW4gZWRnZSBpcyB0cmlnZ2VyZWQsIGFuZCB0aGUgZGF0YQordmFsdWVzIHdpbGwgYmUgdHdvIHNhbXBsZV90J3MsIHdoaWNoIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgdG8gZm9ybSBvbmUKKzMyLWJpdCB1bnNpZ25lZCBpbnQuICBUaGlzIHZhbHVlIGlzIHRoZSBtYXNrIG9mIGNoYW5uZWxzIHRoYXQgaGFkCitlZGdlcyBkZXRlY3RlZCBmcm9tIHlvdXIgY2hhbm5lbCBsaXN0LiAgTm90ZSB0aGF0IHRoZSBiaXRzIHBvc2l0aW9ucworaW4gdGhlIG1hc2sgY29ycmVzcG9uZCB0byBwb3NpdGlvbnMgaW4geW91ciBjaGFubGlzdCB3aGVuIHlvdSBzcGVjaWZpZWQKK3RoZSBjb21tYW5kIGFuZCAqbm90KiBjaGFubmVsIGlkJ3MhCisKK1RvIHNldCB0aGUgcG9sYXJpdHkgb2YgdGhlIGVkZ2UtZGV0ZWN0aW9uIGludGVycnVwdHMgcGFzcyBhIG5vbnplcm8gdmFsdWUgZm9yCitlaXRoZXIgQ1JfUkFOR0Ugb3IgQ1JfQVJFRiBmb3IgZWRnZS11cCBwb2xhcml0eSwgb3IgYSB6ZXJvIHZhbHVlIGZvciBib3RoCitDUl9SQU5HRSBhbmQgQ1JfQVJFRiBpZiB5b3Ugd2FudCBlZGdlLWRvd24gcG9sYXJpdHkuCisKK0luIHRoZSA0OC1jaGFubmVsIHZlcnNpb246CisKK09uIHN1YmRldiAwLCB0aGUgZmlyc3QgMjQgY2hhbm5lbHMgY2hhbm5lbHMgYXJlIGVkZ2UtZGV0ZWN0IGNoYW5uZWxzLgorCitJbiB0aGUgOTYtY2hhbm5lbCBib2FyZCB5b3UgaGF2ZSB0aGUgY29sbG93aW5nIGNoYW5uZWxzIHRoYXQgY2FuIGRvIGVkZ2UgZGV0ZWN0aW9uOgorCitzdWJkZXYgMCwgY2hhbm5lbHMgMC0yNCAgKGZpcnN0IDI0IGNoYW5uZWxzIG9mIDFzdCBBU0lDKQorc3ViZGV2IDIsIGNoYW5uZWxzIDAtMjQgIChmaXJzdCAyNCBjaGFubmVscyBvZiAybmQgQVNJQykKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChmb3IgZmlyc3QgQVNJQywgb3IgZmlyc3QgMjQgY2hhbm5lbHMpCisgIFsyXSAtIElSUSBmb3Igc2Vjb25kIEFTSUMgKHBjbXVpbzk2IG9ubHkgLSBJUlEgZm9yIGNoYW5zIDQ4LTcyIC4uIGNhbiBiZSB0aGUgc2FtZSBhcyBmaXJzdCBpcnEhKQorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBmb3IgUENJIGRldmljZXMgKi8KKworI2RlZmluZSBNSU4oYSxiKSAoICgoYSkgPCAoYikpID8gKGEpIDogKGIpICkKKyNkZWZpbmUgQ0hBTlNfUEVSX1BPUlQgICA4CisjZGVmaW5lIFBPUlRTX1BFUl9BU0lDICAgNgorI2RlZmluZSBJTlRSX1BPUlRTX1BFUl9BU0lDICAgMworI2RlZmluZSBNQVhfQ0hBTlNfUEVSX1NVQkRFViAyNAkvKiBudW1iZXIgb2YgY2hhbm5lbHMgcGVyIGNvbWVkaSBzdWJkZXZpY2UgKi8KKyNkZWZpbmUgUE9SVFNfUEVSX1NVQkRFViAoTUFYX0NIQU5TX1BFUl9TVUJERVYvQ0hBTlNfUEVSX1BPUlQpCisjZGVmaW5lIENIQU5TX1BFUl9BU0lDIChDSEFOU19QRVJfUE9SVCpQT1JUU19QRVJfQVNJQykKKyNkZWZpbmUgSU5UUl9DSEFOU19QRVJfQVNJQyAyNAorI2RlZmluZSBJTlRSX1BPUlRTX1BFUl9TVUJERVYgKElOVFJfQ0hBTlNfUEVSX0FTSUMvQ0hBTlNfUEVSX1BPUlQpCisjZGVmaW5lIE1BWF9ESU9fQ0hBTlMgICAoUE9SVFNfUEVSX0FTSUMqMipDSEFOU19QRVJfUE9SVCkKKyNkZWZpbmUgTUFYX0FTSUNTICAgICAgIChNQVhfRElPX0NIQU5TL0NIQU5TX1BFUl9BU0lDKQorI2RlZmluZSBTREVWX05PICgoaW50KShzIC0gZGV2LT5zdWJkZXZpY2VzKSkKKyNkZWZpbmUgQ0FMQ19OX1NVQkRFVlMobmNoYW5zKSAoKG5jaGFucykvTUFYX0NIQU5TX1BFUl9TVUJERVYgKyAoISEoKG5jaGFucyklTUFYX0NIQU5TX1BFUl9TVUJERVYpKSAvKisgKG5jaGFucyA+IElOVFJfQ0hBTlNfUEVSX0FTSUMgPyAyIDogMSkqLykKKy8qIElPIE1lbW9yeSBzaXplcyAqLworI2RlZmluZSBBU0lDX0lPU0laRSAoMHgxMCkKKyNkZWZpbmUgUENNVUlPNDhfSU9TSVpFIEFTSUNfSU9TSVpFCisjZGVmaW5lIFBDTVVJTzk2X0lPU0laRSAoQVNJQ19JT1NJWkUqMikKKworLyogU29tZSBvZmZzZXRzIC0gdGhlc2UgYXJlIGFsbCBpbiB0aGUgMTZieXRlIElPIG1lbW9yeSBvZmZzZXQgZnJvbQorICAgdGhlIGJhc2UgYWRkcmVzcy4gIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHBhZ2luZyBzY2hlbWUgdG8gc3dhcCBvdXQKKyAgIG9mZnNldHMgMHg4LTB4QSB1c2luZyB0aGUgUEFHRUxPQ0sgcmVnaXN0ZXIuICBTZWUgdGhlIHRhYmxlIGJlbG93LgorCisgIFJlZ2lzdGVyKHMpICAgICAgIFBhZ2VzICAgICAgICBSL1c/ICAgICAgICBEZXNjcmlwdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSRUdfUE9SVHggICAgICAgICBBbGwgICAgICAgICAgUi9XICAgICAgICAgUmVhZC9Xcml0ZS9Db25maWd1cmUgSU8KKyAgUkVHX0lOVF9QRU5ESU5HICAgQWxsICAgICAgICAgIFJlYWRPbmx5ICAgIFF1aWNrbHkgc2VlIHdoaWNoIElOVF9JRHggaGFzIGludC4KKyAgUkVHX1BBR0VMT0NLICAgICAgQWxsICAgICAgICAgIFdyaXRlT25seSAgIFNlbGVjdCBhIHBhZ2UKKyAgUkVHX1BPTHggICAgICAgICAgUGcuIDEgb25seSAgIFdyaXRlT25seSAgIFNlbGVjdCBlZGdlLWRldGVjdGlvbiBwb2xhcml0eQorICBSRUdfRU5BQnggICAgICAgICBQZy4gMiBvbmx5ICAgV3JpdGVPbmx5ICAgRW5hYmxlL0Rpc2FibGUgZWRnZS1kZXRlY3QuIGludC4KKyAgUkVHX0lOVF9JRHggICAgICAgUGcuIDMgb25seSAgIFIvVyAgICAgICAgIFNlZSB3aGljaCBwb3J0cy9iaXRzIGhhdmUgaW50cy4KKyAqLworI2RlZmluZSBSRUdfUE9SVDAgMHgwCisjZGVmaW5lIFJFR19QT1JUMSAweDEKKyNkZWZpbmUgUkVHX1BPUlQyIDB4MgorI2RlZmluZSBSRUdfUE9SVDMgMHgzCisjZGVmaW5lIFJFR19QT1JUNCAweDQKKyNkZWZpbmUgUkVHX1BPUlQ1IDB4NQorI2RlZmluZSBSRUdfSU5UX1BFTkRJTkcgMHg2CisjZGVmaW5lIFJFR19QQUdFTE9DSyAweDcJLyogcGFnZSBzZWxlY3RvciByZWdpc3RlciwgdXBwZXIgMiBiaXRzIHNlbGVjdCBhIHBhZ2UKKwkJCQkgICBhbmQgYml0cyAwLTUgYXJlIHVzZWQgdG8gJ2xvY2sgZG93bicgYSBwYXJ0aWN1bGFyCisJCQkJICAgcG9ydCBhYm92ZSB0byBtYWtlIGl0IHJlYWRvbmx5LiAgKi8KKyNkZWZpbmUgUkVHX1BPTDAgMHg4CisjZGVmaW5lIFJFR19QT0wxIDB4OQorI2RlZmluZSBSRUdfUE9MMiAweEEKKyNkZWZpbmUgUkVHX0VOQUIwIDB4OAorI2RlZmluZSBSRUdfRU5BQjEgMHg5CisjZGVmaW5lIFJFR19FTkFCMiAweEEKKyNkZWZpbmUgUkVHX0lOVF9JRDAgMHg4CisjZGVmaW5lIFJFR19JTlRfSUQxIDB4OQorI2RlZmluZSBSRUdfSU5UX0lEMiAweEEKKworI2RlZmluZSBOVU1fUEFHRURfUkVHUyAzCisjZGVmaW5lIE5VTV9QQUdFUyA0CisjZGVmaW5lIEZJUlNUX1BBR0VEX1JFRyAweDgKKyNkZWZpbmUgUkVHX1BBR0VfQklUT0ZGU0VUIDYKKyNkZWZpbmUgUkVHX0xPQ0tfQklUT0ZGU0VUIDAKKyNkZWZpbmUgUkVHX1BBR0VfTUFTSyAofigoMHgxPDxSRUdfUEFHRV9CSVRPRkZTRVQpLTEpKQorI2RlZmluZSBSRUdfTE9DS19NQVNLIH4oUkVHX1BBR0VfTUFTSykKKyNkZWZpbmUgUEFHRV9QT0wgMQorI2RlZmluZSBQQUdFX0VOQUIgMgorI2RlZmluZSBQQUdFX0lOVF9JRCAzCisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgcGNtdWlvX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGludCBudW1fYXNpY3M7CisJY29uc3QgaW50IG51bV9jaGFubmVsc19wZXJfcG9ydDsKKwljb25zdCBpbnQgbnVtX3BvcnRzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY211aW9fYm9hcmQgcGNtdWlvX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNtdWlvNDgiLAorCSAgICAgIG51bV9hc2ljczoxLAorCSAgICAgIG51bV9wb3J0czo2LAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNtdWlvOTYiLAorCSAgICAgIG51bV9hc2ljczoyLAorCSAgICAgIG51bV9wb3J0czoxMiwKKwkJfSwKK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbXVpb19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBzdWJkZXZpY2UuICAqLworc3RydWN0IHBjbXVpb19zdWJkZXZfcHJpdmF0ZSB7CisJLyogbWFwcGluZyBvZiBoYWxmd29yZHMgKGJ5dGVzKSBpbiBwb3J0L2NoYW5hcnJheSB0byBpb2Jhc2UgKi8KKwl1bnNpZ25lZCBsb25nIGlvYmFzZXNbUE9SVFNfUEVSX1NVQkRFVl07CisKKwkvKiBUaGUgYmVsb3cgaXMgb25seSB1c2VkIGZvciBpbnRyIHN1YmRldmljZXMgKi8KKwlzdHJ1Y3QgeworCQlpbnQgYXNpYzsJLyogaWYgbm9uLW5lZ2F0aXZlLCB0aGlzIHN1YmRldiBoYXMgYW4gaW50ZXJydXB0IGFzaWMgKi8KKwkJaW50IGZpcnN0X2NoYW47CS8qIGlmIG5vbm5lZ2F0aXZlLCB0aGUgZmlyc3QgY2hhbm5lbCBpZCBmb3IKKwkJCQkgICBpbnRlcnJ1cHRzLiAqLworCQlpbnQgbnVtX2FzaWNfY2hhbnM7CS8qIHRoZSBudW1iZXIgb2YgYXNpYyBjaGFubmVscyBpbiB0aGlzIHN1YmRldgorCQkJCQkgICB0aGF0IGhhdmUgaW50ZXJydXRwcyAqLworCQlpbnQgYXNpY19jaGFuOwkvKiBpZiBub25uZWdhdGl2ZSwgdGhlIGZpcnN0IGNoYW5uZWwgaWQgd2l0aAorCQkJCSAgIHJlc3BlY3QgdG8gdGhlIGFzaWMgdGhhdCBoYXMgaW50ZXJydXB0cyAqLworCQlpbnQgZW5hYmxlZF9tYXNrOwkvKiBzdWJkZXYtcmVsYXRpdmUgY2hhbm5lbCBtYXNrIGZvciBjaGFubmVscworCQkJCQkgICB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAqLworCQlpbnQgYWN0aXZlOworCQlpbnQgc3RvcF9jb3VudDsKKwkJaW50IGNvbnRpbnVvdXM7CisJCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CisJfSBpbnRyOworfTsKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHBjbXVpb19wcml2YXRlIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIHBhZ2Vsb2NrOwkvKiBjdXJyZW50IHBhZ2UgYW5kIGxvY2sgKi8KKwkJdW5zaWduZWQgY2hhciBwb2xbTlVNX1BBR0VEX1JFR1NdOwkvKiBzaGFkb3cgb2YgUE9MeCByZWdpc3RlcnMgKi8KKwkJdW5zaWduZWQgY2hhciBlbmFiW05VTV9QQUdFRF9SRUdTXTsJLyogc2hhZG93IG9mIEVOQUJ4IHJlZ2lzdGVycyAqLworCQlpbnQgbnVtOworCQl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwkJdW5zaWduZWQgaW50IGlycTsKKwkJc3BpbmxvY2tfdCBzcGlubG9jazsKKwl9IGFzaWNzW01BWF9BU0lDU107CisJc3RydWN0IHBjbXVpb19zdWJkZXZfcHJpdmF0ZSAqc3ByaXZzOworfTsKKworLyoKKyAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY211aW9fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgc3VicHJpdiAoKHN0cnVjdCBwY211aW9fc3ViZGV2X3ByaXZhdGUgKilzLT5wcml2YXRlKQorLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGNtdWlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbXVpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgZHJpdmVyX25hbWU6InBjbXVpbyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNtdWlvX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY211aW9fZGV0YWNoLAorLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGlmIHlvdSBhcmUKKyAqIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgSVNBIFBuUCBvciBQQ0kgY2FyZCAqLworCS8qIE1vc3QgZHJpdmVycyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgdHlwZXMgb2YgYm9hcmRzIGJ5CisJICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKwkgKiBpbiBwY211aW9fYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisJICogd2FzIGZpcnN0IGluIHRoZSBzdHJ1Y3R1cmUgLS0gQ29tZWRpIHVzZXMgdGhpcyBmYWN0IHRvCisJICogZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUgYm9hcmQgd2l0aG91dCBrbm93aW5nIGFueSBkZXRhaWxzCisJICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisJICogV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZCAoYnkgY29tZWRpX2NvbmZpZyksIHRoZSBuYW1lCisJICogb2YgdGhlIGRldmljZSBpcyBnaXZlbiB0byBDb21lZGksIGFuZCBDb21lZGkgdHJpZXMgdG8KKwkgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKwkgKiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciBpcyBwdXQKKwkgKiBpbnRvIGRldi0+Ym9hcmRfcHRyIGFuZCBkcml2ZXItPmF0dGFjaCgpIGlzIGNhbGxlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgY2FuIGRldGVybWluZQorCSAqIHRoZSB0eXBlIG9mIGJvYXJkIGluIHNvZnR3YXJlLiAgSVNBIFBuUCwgUENJLCBhbmQgUENNQ0lBCisJICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisJICovCisgICAgICBib2FyZF9uYW1lOiZwY211aW9fYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY211aW9fYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihwY211aW9fYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGNtdWlvX2JvYXJkKSwKK307CisKK3N0YXRpYyBpbnQgcGNtdWlvX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNtdWlvX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbXVpbyhpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIHBjbXVpb19zdG9wX2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKik7CitzdGF0aWMgaW50IHBjbXVpb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjbXVpb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjbXVpb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworCisvKiBzb21lIGhlbHBlciBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIHNwZWNpZmljcyBvZiB0aGlzIGRldmljZSdzIHJlZ2lzdGVycyAqLworc3RhdGljIHZvaWQgaW5pdF9hc2ljcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CS8qIHNldHMgdXAvY2xlYXJzIEFTSUMgY2hpcHMgdG8gZGVmYXVsdHMgKi8KK3N0YXRpYyB2b2lkIHN3aXRjaF9wYWdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBhZ2UpOworI2lmZGVmIG5vdHVzZWQKK3N0YXRpYyB2b2lkIGxvY2tfcG9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwb3J0KTsKK3N0YXRpYyB2b2lkIHVubG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpOworI2VuZGlmCisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBwY211aW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBzZGV2X25vLCBjaGFuc19sZWZ0LCBuX3N1YmRldnMsIHBvcnQsIGFzaWMsIHRoaXNhc2ljX2NoYW5jdCA9IDA7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycVtNQVhfQVNJQ1NdOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaXJxWzBdID0gaXQtPm9wdGlvbnNbMV07CisJaXJxWzFdID0gaXQtPm9wdGlvbnNbMl07CisKKwlwcmludGsoImNvbWVkaSVkOiAlczogaW86ICVseCAiLCBkZXYtPm1pbm9yLCBkcml2ZXIuZHJpdmVyX25hbWUsCisJCWlvYmFzZSk7CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmICghaW9iYXNlIHx8ICFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsCisJCQl0aGlzYm9hcmQtPm51bV9hc2ljcyAqIEFTSUNfSU9TSVpFLAorCQkJZHJpdmVyLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuICBhbGxvY19wcml2YXRlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjbXVpb19wcml2YXRlKSkgPCAwKSB7CisJCXByaW50aygiY2Fubm90IGFsbG9jYXRlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGFzaWMgPSAwOyBhc2ljIDwgTUFYX0FTSUNTOyArK2FzaWMpIHsKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10ubnVtID0gYXNpYzsKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlID0gZGV2LT5pb2Jhc2UgKyBhc2ljICogQVNJQ19JT1NJWkU7CisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlycSA9IDA7CS8qIHRoaXMgZ2V0cyBhY3R1YWxseSBzZXQgYXQgdGhlIGVuZCBvZgorCQkJCQkJICAgdGhpcyBmdW5jdGlvbiB3aGVuIHdlCisJCQkJCQkgICBjb21lZGlfcmVxdWVzdF9pcnFzICovCisJCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5hc2ljc1thc2ljXS5zcGlubG9jayk7CisJfQorCisJY2hhbnNfbGVmdCA9IENIQU5TX1BFUl9BU0lDICogdGhpc2JvYXJkLT5udW1fYXNpY3M7CisJbl9zdWJkZXZzID0gQ0FMQ19OX1NVQkRFVlMoY2hhbnNfbGVmdCk7CisJZGV2cHJpdi0+c3ByaXZzID0KKwkJa2NhbGxvYyhuX3N1YmRldnMsIHNpemVvZihzdHJ1Y3QgcGNtdWlvX3N1YmRldl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZwcml2LT5zcHJpdnMpIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgc3ViZGV2aWNlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qCisJICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorCSAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKwkgKgorCSAqIEFsbG9jYXRlIDIgc3ViZGV2cyAoMzIgKyAxNiBESU8gbGluZXMpIG9yIDMgMzIgRElPIHN1YmRldnMgZm9yIHRoZQorCSAqIDk2LWNoYW5uZWwgdmVyc2lvbiBvZiB0aGUgYm9hcmQuCisJICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldnMpIDwgMCkgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBzdWJkZXZpY2UgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG9ydCA9IDA7CisJYXNpYyA9IDA7CisJZm9yIChzZGV2X25vID0gMDsgc2Rldl9ubyA8IChpbnQpZGV2LT5uX3N1YmRldmljZXM7ICsrc2Rldl9ubykgeworCQlpbnQgYnl0ZV9ubzsKKworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc2Rldl9ubzsKKwkJcy0+cHJpdmF0ZSA9IGRldnByaXYtPnNwcml2cyArIHNkZXZfbm87CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPmluc25fYml0cyA9IHBjbXVpb19kaW9faW5zbl9iaXRzOworCQlzLT5pbnNuX2NvbmZpZyA9IHBjbXVpb19kaW9faW5zbl9jb25maWc7CisJCXMtPm5fY2hhbiA9IE1JTihjaGFuc19sZWZ0LCBNQVhfQ0hBTlNfUEVSX1NVQkRFVik7CisJCXN1YnByaXYtPmludHIuYXNpYyA9IC0xOworCQlzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW4gPSAtMTsKKwkJc3VicHJpdi0+aW50ci5hc2ljX2NoYW4gPSAtMTsKKwkJc3VicHJpdi0+aW50ci5udW1fYXNpY19jaGFucyA9IC0xOworCQlzdWJwcml2LT5pbnRyLmFjdGl2ZSA9IDA7CisJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisKKwkJLyogc2F2ZSB0aGUgaW9wb3J0IGFkZHJlc3MgZm9yIGVhY2ggJ3BvcnQnIG9mIDggY2hhbm5lbHMgaW4gdGhlCisJCSAgIHN1YmRldmljZSAqLworCQlmb3IgKGJ5dGVfbm8gPSAwOyBieXRlX25vIDwgUE9SVFNfUEVSX1NVQkRFVjsgKytieXRlX25vLCArK3BvcnQpIHsKKwkJCWlmIChwb3J0ID49IFBPUlRTX1BFUl9BU0lDKSB7CisJCQkJcG9ydCA9IDA7CisJCQkJKythc2ljOworCQkJCXRoaXNhc2ljX2NoYW5jdCA9IDA7CisJCQl9CisJCQlzdWJwcml2LT5pb2Jhc2VzW2J5dGVfbm9dID0KKwkJCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgKyBwb3J0OworCisJCQlpZiAodGhpc2FzaWNfY2hhbmN0IDwKKwkJCQlDSEFOU19QRVJfUE9SVCAqIElOVFJfUE9SVFNfUEVSX0FTSUMKKwkJCQkmJiBzdWJwcml2LT5pbnRyLmFzaWMgPCAwKSB7CisJCQkJLyogdGhpcyBpcyBhbiBpbnRlcnJ1cHQgc3ViZGV2aWNlLCBzbyBzZXR1cCB0aGUgc3RydWN0ICovCisJCQkJc3VicHJpdi0+aW50ci5hc2ljID0gYXNpYzsKKwkJCQlzdWJwcml2LT5pbnRyLmFjdGl2ZSA9IDA7CisJCQkJc3VicHJpdi0+aW50ci5zdG9wX2NvdW50ID0gMDsKKwkJCQlzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW4gPSBieXRlX25vICogODsKKwkJCQlzdWJwcml2LT5pbnRyLmFzaWNfY2hhbiA9IHRoaXNhc2ljX2NoYW5jdDsKKwkJCQlzdWJwcml2LT5pbnRyLm51bV9hc2ljX2NoYW5zID0KKwkJCQkJcy0+bl9jaGFuIC0gc3VicHJpdi0+aW50ci5maXJzdF9jaGFuOworCQkJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCQkJcy0+Y2FuY2VsID0gcGNtdWlvX2NhbmNlbDsKKwkJCQlzLT5kb19jbWQgPSBwY211aW9fY21kOworCQkJCXMtPmRvX2NtZHRlc3QgPSBwY211aW9fY21kdGVzdDsKKwkJCQlzLT5sZW5fY2hhbmxpc3QgPSBzdWJwcml2LT5pbnRyLm51bV9hc2ljX2NoYW5zOworCQkJfQorCQkJdGhpc2FzaWNfY2hhbmN0ICs9IENIQU5TX1BFUl9QT1JUOworCQl9CisJCXNwaW5fbG9ja19pbml0KCZzdWJwcml2LT5pbnRyLnNwaW5sb2NrKTsKKworCQljaGFuc19sZWZ0IC09IHMtPm5fY2hhbjsKKworCQlpZiAoIWNoYW5zX2xlZnQpIHsKKwkJCWFzaWMgPSAwOwkvKiByZXNldCB0aGUgYXNpYyB0byBvdXIgZmlyc3QgYXNpYywgdG8gZG8gaW50ciBzdWJkZXZzICovCisJCQlwb3J0ID0gMDsKKwkJfQorCisJfQorCisJaW5pdF9hc2ljcyhkZXYpOwkvKiBjbGVhciBvdXQgYWxsIHRoZSByZWdpc3RlcnMsIGJhc2ljYWxseSAqLworCisJZm9yIChhc2ljID0gMDsgaXJxWzBdICYmIGFzaWMgPCBNQVhfQVNJQ1M7ICsrYXNpYykgeworCQlpZiAoaXJxW2FzaWNdCisJCQkmJiBjb21lZGlfcmVxdWVzdF9pcnEoaXJxW2FzaWNdLCBpbnRlcnJ1cHRfcGNtdWlvLAorCQkJCUlSUUZfU0hBUkVELCB0aGlzYm9hcmQtPm5hbWUsIGRldikpIHsKKwkJCWludCBpOworCQkJLyogdW5yb2xsIHRoZSBhbGxvY2F0ZWQgaXJxcy4uICovCisJCQlmb3IgKGkgPSBhc2ljIC0gMTsgaSA+PSAwOyAtLWkpIHsKKwkJCQljb21lZGlfZnJlZV9pcnEoaXJxW2ldLCBkZXYpOworCQkJCWRldnByaXYtPmFzaWNzW2ldLmlycSA9IGlycVtpXSA9IDA7CisJCQl9CisJCQlpcnFbYXNpY10gPSAwOworCQl9CisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlycSA9IGlycVthc2ljXTsKKwl9CisKKwlkZXYtPmlycSA9IGlycVswXTsJLyogZ3JyLi4gd2lzaCBjb21lZGkgZGV2IHN0cnVjdCBzdXBwb3J0ZWQgbXVsdGlwbGUKKwkJCQkgICBpcnFzLi4gKi8KKworCWlmIChpcnFbMF0pIHsKKwkJcHJpbnRrKCJpcnE6ICV1ICIsIGlycVswXSk7CisJCWlmIChpcnFbMV0gJiYgdGhpc2JvYXJkLT5udW1fYXNpY3MgPT0gMikKKwkJCXByaW50aygic2Vjb25kIEFTSUMgaXJxOiAldSAiLCBpcnFbMV0pOworCX0gZWxzZSB7CisJCXByaW50aygiKElSUSBtb2RlIGRpc2FibGVkKSAiKTsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IHBjbXVpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiAlczogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yLCBkcml2ZXIuZHJpdmVyX25hbWUpOworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIEFTSUNfSU9TSVpFICogdGhpc2JvYXJkLT5udW1fYXNpY3MpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9BU0lDUzsgKytpKSB7CisJCWlmIChkZXZwcml2LT5hc2ljc1tpXS5pcnEpCisJCQljb21lZGlfZnJlZV9pcnEoZGV2cHJpdi0+YXNpY3NbaV0uaXJxLCBkZXYpOworCX0KKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnNwcml2cykKKwkJa2ZyZWUoZGV2cHJpdi0+c3ByaXZzKTsKKworCXJldHVybiAwOworfQorCisvKiBESU8gZGV2aWNlcyBhcmUgc2xpZ2h0bHkgc3BlY2lhbC4gIEFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBpbXBsZW1lbnQgdGhlIGluc25fcmVhZC9pbnNuX3dyaXRlIGludGVyZmFjZSwgaXQgaXMgbXVjaCBtb3JlCisgKiB1c2VmdWwgdG8gYXBwbGljYXRpb25zIGlmIHlvdSBpbXBsZW1lbnQgdGhlIGluc25fYml0cyBpbnRlcmZhY2UuCisgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUKKyAqIGNvbWVkaSBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KK3N0YXRpYyBpbnQgcGNtdWlvX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBieXRlX25vOworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTk9URToKKwkgICByZWFkaW5nIGEgMCBtZWFucyB0aGlzIGNoYW5uZWwgd2FzIGhpZ2gKKwkgICB3cml0aW5lIGEgMCBzZXRzIHRoZSBjaGFubmVsIGhpZ2gKKwkgICByZWFkaW5nIGEgMSBtZWFucyB0aGlzIGNoYW5uZWwgd2FzIGxvdworCSAgIHdyaXRpbmcgYSAxIG1lYW5zIHNldCB0aGlzIGNoYW5uZWwgbG93CisKKwkgICBUaGVyZWZvcmUgZXZlcnl0aGluZyBpcyBhbHdheXMgaW52ZXJ0ZWQuICovCisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEKKwkgKiBpbiBkYXRhWzFdLCBlYWNoIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gKi8KKworI2lmZGVmIERBTU1JVF9JVFNfQlJPS0VOCisJLyogREVCVUcgKi8KKwlwcmludGsoIndyaXRlIG1hc2s6ICUwOHggIGRhdGE6ICUwOHhcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworI2VuZGlmCisKKwlzLT5zdGF0ZSA9IDA7CisKKwlmb3IgKGJ5dGVfbm8gPSAwOyBieXRlX25vIDwgcy0+bl9jaGFuIC8gQ0hBTlNfUEVSX1BPUlQ7ICsrYnl0ZV9ubykgeworCQkvKiBhZGRyZXNzIG9mIDgtYml0IHBvcnQgKi8KKwkJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBzdWJwcml2LT5pb2Jhc2VzW2J5dGVfbm9dLAorCQkJLyogYml0IG9mZnNldCBvZiBwb3J0IGluIDMyLWJpdCBkb3VibGV3b3JkICovCisJCQlvZmZzZXQgPSBieXRlX25vICogODsKKwkJLyogdGhpcyA4LWJpdCBwb3J0J3MgZGF0YSAqLworCQl1bnNpZ25lZCBjaGFyIGJ5dGUgPSAwLAorCQkJLyogVGhlIHdyaXRlIG1hc2sgZm9yIHRoaXMgcG9ydCAoaWYgYW55KSAqLworCQkJd3JpdGVfbWFza19ieXRlID0gKGRhdGFbMF0gPj4gb2Zmc2V0KSAmIDB4ZmYsCisJCQkvKiBUaGUgZGF0YSBieXRlIGZvciB0aGlzIHBvcnQgKi8KKwkJCWRhdGFfYnl0ZSA9IChkYXRhWzFdID4+IG9mZnNldCkgJiAweGZmOworCisJCWJ5dGUgPSBpbmIoaW9hZGRyKTsJLyogcmVhZCBhbGwgOC1iaXRzIGZvciB0aGlzIHBvcnQgKi8KKworI2lmZGVmIERBTU1JVF9JVFNfQlJPS0VOCisJCS8qIERFQlVHICovCisJCXByaW50aygiYnl0ZSAlZCB3bWIgJTAyeCBkYiAlMDJ4IG9mZnNldCAlMDJkIGlvICUwNHgsIGRhdGFfaW4gJTAyeCAiLCBieXRlX25vLCAodW5zaWduZWQpd3JpdGVfbWFza19ieXRlLCAodW5zaWduZWQpZGF0YV9ieXRlLCBvZmZzZXQsIGlvYWRkciwgKHVuc2lnbmVkKWJ5dGUpOworI2VuZGlmCisKKwkJaWYgKHdyaXRlX21hc2tfYnl0ZSkgeworCQkJLyogdGhpcyBieXRlIGhhcyBzb21lIHdyaXRlX2JpdHMgLS0gc28gc2V0IHRoZSBvdXRwdXQgbGluZXMgKi8KKwkJCWJ5dGUgJj0gfndyaXRlX21hc2tfYnl0ZTsJLyogY2xlYXIgYml0cyBmb3Igd3JpdGUgbWFzayAqLworCQkJYnl0ZSB8PSB+ZGF0YV9ieXRlICYgd3JpdGVfbWFza19ieXRlOwkvKiBzZXQgdG8gaW52ZXJ0ZWQgZGF0YV9ieXRlICovCisJCQkvKiBXcml0ZSBvdXQgdGhlIG5ldyBkaWdpdGFsIG91dHB1dCBzdGF0ZSAqLworCQkJb3V0YihieXRlLCBpb2FkZHIpOworCQl9CisjaWZkZWYgREFNTUlUX0lUU19CUk9LRU4KKwkJLyogREVCVUcgKi8KKwkJcHJpbnRrKCJkYXRhX291dF9ieXRlICUwMnhcbiIsICh1bnNpZ25lZClieXRlKTsKKyNlbmRpZgorCQkvKiBzYXZlIHRoZSBkaWdpdGFsIGlucHV0IGxpbmVzIGZvciB0aGlzIGJ5dGUuLiAqLworCQlzLT5zdGF0ZSB8PSAoKHVuc2lnbmVkIGludClieXRlKSA8PCBvZmZzZXQ7CisJfQorCisJLyogbm93IHJldHVybiB0aGUgRElPIGxpbmVzIHRvIGRhdGFbMV0gLSBub3RlIHRoZXkgY2FtZSBpbnZlcnRlZCEgKi8KKwlkYXRhWzFdID0gfnMtPnN0YXRlOworCisjaWZkZWYgREFNTUlUX0lUU19CUk9LRU4KKwkvKiBERUJVRyAqLworCXByaW50aygicy0+c3RhdGUgJTA4eCBkYXRhX291dCAlMDh4XG4iLCBzLT5zdGF0ZSwgZGF0YVsxXSk7CisjZW5kaWYKKworCXJldHVybiAyOworfQorCisvKiBUaGUgaW5wdXQgb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBkaWdpdGFsIGxpbmUgaXMKKyAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKyAqIGNvbnRhaW5zIHRoZSBjaGFubmVsIHRvIGJlIGNoYW5nZWQsIGFuZCBkYXRhWzBdIGNvbnRhaW5zIHRoZQorICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCitzdGF0aWMgaW50IHBjbXVpb19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIGJ5dGVfbm8gPSBjaGFuIC8gOCwgYml0X25vID0KKwkJY2hhbiAlIDg7CisJdW5zaWduZWQgbG9uZyBpb2FkZHI7CisJdW5zaWduZWQgY2hhciBieXRlOworCisJLyogQ29tcHV0ZSBpb2FkZHIgZm9yIHRoaXMgY2hhbm5lbCAqLworCWlvYWRkciA9IHN1YnByaXYtPmlvYmFzZXNbYnl0ZV9ub107CisKKwkvKiBOT1RFOgorCSAgIHdyaXRpbmcgYSAwIGFuIElPIGNoYW5uZWwncyBiaXQgc2V0cyB0aGUgY2hhbm5lbCB0byBJTlBVVAorCSAgIGFuZCBwdWxscyB0aGUgbGluZSBoaWdoIGFzIHdlbGwKKworCSAgIHdyaXRpbmcgYSAxIHRvIGFuIElPIGNoYW5uZWwncyAgYml0IHB1bGxzIHRoZSBsaW5lIGxvdworCisJICAgQWxsIGNoYW5uZWxzIGFyZSBpbXBsaWNpdGx5IGFsd2F5cyBpbiBPVVRQVVQgbW9kZSAtLSBidXQgd2hlbgorCSAgIHRoZXkgYXJlIGhpZ2ggdGhleSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSBpbiBJTlBVVCBtb2RlLi4KKworCSAgIFRodXMsIHdlIG9ubHkgZm9yY2UgY2hhbm5lbHMgbG93IGlmIHRoZSBjb25maWcgcmVxdWVzdCB3YXMgSU5QVVQsCisJICAgb3RoZXJ3aXNlIHdlIGRvIG5vdGhpbmcgdG8gdGhlIGhhcmR3YXJlLiAgICAqLworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQkvKiBzYXZlIHRvIGlvX2JpdHMgLS0gZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgc2luY2UKKwkJICAgYWxsIGlucHV0IGNoYW5uZWxzIGFyZSBhbHNvIG91dHB1dCBjaGFubmVscy4uLiAqLworCQlzLT5pb19iaXRzIHw9IDEgPDwgY2hhbjsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCS8qIHdyaXRlIGEgMCB0byB0aGUgYWN0dWFsIHJlZ2lzdGVyIHJlcHJlc2VudGluZyB0aGUgY2hhbm5lbAorCQkgICB0byBzZXQgaXQgdG8gJ2lucHV0Jy4gIDAgbWVhbnMgImZsb2F0IGhpZ2giLiAqLworCQlieXRlID0gaW5iKGlvYWRkcik7CisJCWJ5dGUgJj0gfigxIDw8IGJpdF9ubyk7CisJCQkJLyoqPCBzZXQgaW5wdXQgY2hhbm5lbCB0byAnMCcgKi8KKworCQkvKiB3cml0ZSBvdXQgYnl0ZSAtLSB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgYWN0dWFsbHkgYWZmZWN0IHRoZQorCQkgICBoYXJkd2FyZSBhcyBhbGwgY2hhbm5lbHMgYXJlIGltcGxpY2l0bHkgb3V0cHV0IC0tIGJ1dCBpbnB1dAorCQkgICBjaGFubmVscyBhcmUgc2V0IHRvIGZsb2F0LWhpZ2ggKi8KKwkJb3V0YihieXRlLCBpb2FkZHIpOworCisJCS8qIHNhdmUgdG8gaW9fYml0cyAqLworCQlzLT5pb19iaXRzICY9IH4oMSA8PCBjaGFuKTsKKwkJYnJlYWs7CisKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJLyogcmV0cmVpdmUgZnJvbSBzaGFkb3cgcmVnaXN0ZXIgKi8KKwkJZGF0YVsxXSA9CisJCQkocy0+CisJCQlpb19iaXRzICYgKDEgPDwgY2hhbikpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgdm9pZCBpbml0X2FzaWNzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQorewkJCQkvKiBzZXRzIHVwIGFuCisJCQkJICAgQVNJQyBjaGlwIHRvIGRlZmF1bHRzICovCisJaW50IGFzaWM7CisKKwlmb3IgKGFzaWMgPSAwOyBhc2ljIDwgdGhpc2JvYXJkLT5udW1fYXNpY3M7ICsrYXNpYykgeworCQlpbnQgcG9ydCwgcGFnZTsKKwkJdW5zaWduZWQgbG9uZyBiYXNlYWRkciA9IGRldi0+aW9iYXNlICsgYXNpYyAqIEFTSUNfSU9TSVpFOworCisJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgMCk7CS8qIHN3aXRjaCBiYWNrIHRvIHBhZ2UgMCAqLworCisJCS8qIGZpcnN0LCBjbGVhciBhbGwgdGhlIERJTyBwb3J0IGJpdHMgKi8KKwkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFBPUlRTX1BFUl9BU0lDOyArK3BvcnQpCisJCQlvdXRiKDAsIGJhc2VhZGRyICsgUkVHX1BPUlQwICsgcG9ydCk7CisKKwkJLyogTmV4dCwgY2xlYXIgYWxsIHRoZSBwYWdlZCByZWdpc3RlcnMgZm9yIGVhY2ggcGFnZSAqLworCQlmb3IgKHBhZ2UgPSAxOyBwYWdlIDwgTlVNX1BBR0VTOyArK3BhZ2UpIHsKKwkJCWludCByZWc7CisJCQkvKiBub3cgY2xlYXIgYWxsIHRoZSBwYWdlZCByZWdpc3RlcnMgKi8KKwkJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgcGFnZSk7CisJCQlmb3IgKHJlZyA9IEZJUlNUX1BBR0VEX1JFRzsKKwkJCQlyZWcgPCBGSVJTVF9QQUdFRF9SRUcgKyBOVU1fUEFHRURfUkVHUzsgKytyZWcpCisJCQkJb3V0YigwLCBiYXNlYWRkciArIHJlZyk7CisJCX0KKworCQkvKiBERUJVRyAgc2V0IHJpc2luZyBlZGdlIGludGVycnVwdHMgb24gcG9ydDAgb2YgYm90aCBhc2ljcyAqLworCQkvKnN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9QT0wpOworCQkgICBvdXRiKDB4ZmYsIGJhc2VhZGRyICsgUkVHX1BPTDApOworCQkgICBzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfRU5BQik7CisJCSAgIG91dGIoMHhmZiwgYmFzZWFkZHIgKyBSRUdfRU5BQjApOyAqLworCQkvKiBFTkQgREVCVUcgKi8KKworCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIDApOwkvKiBzd2l0Y2ggYmFjayB0byBkZWZhdWx0IHBhZ2UgMCAqLworCisJfQorfQorCitzdGF0aWMgdm9pZCBzd2l0Y2hfcGFnZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwYWdlKQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+bnVtX2FzaWNzKQorCQlyZXR1cm47CQkvKiBwYXJhbm9pYSAqLworCWlmIChwYWdlIDwgMCB8fCBwYWdlID49IE5VTV9QQUdFUykKKwkJcmV0dXJuOwkJLyogbW9yZSBwYXJhbm9pYSAqLworCisJZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2sgJj0gflJFR19QQUdFX01BU0s7CisJZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2sgfD0gcGFnZSA8PCBSRUdfUEFHRV9CSVRPRkZTRVQ7CisKKwkvKiBub3cgd3JpdGUgb3V0IHRoZSBzaGFkb3cgcmVnaXN0ZXIgKi8KKwlvdXRiKGRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrLAorCQlkZXYtPmlvYmFzZSArIEFTSUNfSU9TSVpFICogYXNpYyArIFJFR19QQUdFTE9DSyk7Cit9CisKKyNpZmRlZiBub3R1c2VkCitzdGF0aWMgdm9pZCBsb2NrX3BvcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcG9ydCkKK3sKKwlpZiAoYXNpYyA8IDAgfHwgYXNpYyA+PSB0aGlzYm9hcmQtPm51bV9hc2ljcykKKwkJcmV0dXJuOwkJLyogcGFyYW5vaWEgKi8KKwlpZiAocG9ydCA8IDAgfHwgcG9ydCA+PSBQT1JUU19QRVJfQVNJQykKKwkJcmV0dXJuOwkJLyogbW9yZSBwYXJhbm9pYSAqLworCisJZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2sgfD0gMHgxIDw8IHBvcnQ7CisJLyogbm93IHdyaXRlIG91dCB0aGUgc2hhZG93IHJlZ2lzdGVyICovCisJb3V0YihkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jaywKKwkJZGV2LT5pb2Jhc2UgKyBBU0lDX0lPU0laRSAqIGFzaWMgKyBSRUdfUEFHRUxPQ0spOworfQorCitzdGF0aWMgdm9pZCB1bmxvY2tfcG9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwb3J0KQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+bnVtX2FzaWNzKQorCQlyZXR1cm47CQkvKiBwYXJhbm9pYSAqLworCWlmIChwb3J0IDwgMCB8fCBwb3J0ID49IFBPUlRTX1BFUl9BU0lDKQorCQlyZXR1cm47CQkvKiBtb3JlIHBhcmFub2lhICovCisJZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2sgJj0gfigweDEgPDwgcG9ydCkgfCBSRUdfTE9DS19NQVNLOworCS8qIG5vdyB3cml0ZSBvdXQgdGhlIHNoYWRvdyByZWdpc3RlciAqLworCW91dGIoZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2ssCisJCWRldi0+aW9iYXNlICsgQVNJQ19JT1NJWkUgKiBhc2ljICsgUkVHX1BBR0VMT0NLKTsKK30KKyNlbmRpZiAvKiBub3R1c2VkICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNtdWlvKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJaW50IGFzaWMsIGdvdDEgPSAwOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKworCWZvciAoYXNpYyA9IDA7IGFzaWMgPCBNQVhfQVNJQ1M7ICsrYXNpYykgeworCQlpZiAoaXJxID09IGRldnByaXYtPmFzaWNzW2FzaWNdLmlycSkgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJCXVuc2lnbmVkIHRyaWdnZXJlZCA9IDA7CisJCQl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZTsKKwkJCS8qIGl0IGlzIGFuIGludGVycnVwdCBmb3IgQVNJQyAjYXNpYyAqLworCQkJdW5zaWduZWQgY2hhciBpbnRfcGVuZDsKKworCQkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hc2ljc1thc2ljXS5zcGlubG9jaywKKwkJCQlmbGFncyk7CisKKwkJCWludF9wZW5kID0gaW5iKGlvYmFzZSArIFJFR19JTlRfUEVORElORykgJiAweDA3OworCisJCQlpZiAoaW50X3BlbmQpIHsKKwkJCQlpbnQgcG9ydDsKKwkJCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgSU5UUl9QT1JUU19QRVJfQVNJQzsKKwkJCQkJKytwb3J0KSB7CisJCQkJCWlmIChpbnRfcGVuZCAmICgweDEgPDwgcG9ydCkpIHsKKwkJCQkJCXVuc2lnbmVkIGNoYXIKKwkJCQkJCQlpb19saW5lc193aXRoX2VkZ2VzID0gMDsKKwkJCQkJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywKKwkJCQkJCQlQQUdFX0lOVF9JRCk7CisJCQkJCQlpb19saW5lc193aXRoX2VkZ2VzID0KKwkJCQkJCQlpbmIoaW9iYXNlICsKKwkJCQkJCQlSRUdfSU5UX0lEMCArIHBvcnQpOworCisJCQkJCQlpZiAoaW9fbGluZXNfd2l0aF9lZGdlcykKKwkJCQkJCQkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdCAqLworCQkJCQkJCW91dGIoMCwgaW9iYXNlICsKKwkJCQkJCQkJUkVHX0lOVF9JRDAgKworCQkJCQkJCQlwb3J0KTsKKworCQkJCQkJdHJpZ2dlcmVkIHw9CisJCQkJCQkJaW9fbGluZXNfd2l0aF9lZGdlcyA8PAorCQkJCQkJCXBvcnQgKiA4OworCQkJCQl9CisJCQkJfQorCisJCQkJKytnb3QxOworCQkJfQorCisJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YXNpY3NbYXNpY10uCisJCQkJc3BpbmxvY2ssIGZsYWdzKTsKKworCQkJaWYgKHRyaWdnZXJlZCkgeworCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCQkJCS8qIFRPRE8gaGVyZTogZGlzcGF0Y2ggaW8gbGluZXMgdG8gc3ViZGV2cyB3aXRoIGNvbW1hbmRzLi4gKi8KKwkJCQlwcmludGsoIlBDTVVJTyBERUJVRzogZ290IGVkZ2UgZGV0ZWN0IGludGVycnVwdCAlZCBhc2ljICVkIHdoaWNoX2NoYW5zOiAlMDZ4XG4iLCBpcnEsIGFzaWMsIHRyaWdnZXJlZCk7CisJCQkJZm9yIChzID0gZGV2LT5zdWJkZXZpY2VzOworCQkJCQlzIDwgZGV2LT5zdWJkZXZpY2VzICsgZGV2LT5uX3N1YmRldmljZXM7CisJCQkJCSsrcykgeworCQkJCQlpZiAoc3VicHJpdi0+aW50ci5hc2ljID09IGFzaWMpIHsJLyogdGhpcyBpcyBhbiBpbnRlcnJ1cHQgc3ViZGV2LCBhbmQgaXQgbWF0Y2hlcyB0aGlzIGFzaWMhICovCisJCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJCQkJdW5zaWduZWQgb2xkZXZlbnRzOworCisJCQkJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUKKwkJCQkJCQkoJnN1YnByaXYtPmludHIuCisJCQkJCQkJc3BpbmxvY2ssIGZsYWdzKTsKKworCQkJCQkJb2xkZXZlbnRzID0gcy0+YXN5bmMtPmV2ZW50czsKKworCQkJCQkJaWYgKHN1YnByaXYtPmludHIuYWN0aXZlKSB7CisJCQkJCQkJdW5zaWduZWQgbXl0cmlnID0KKwkJCQkJCQkJKCh0cmlnZ2VyZWQgPj4KKwkJCQkJCQkJCXN1YnByaXYtPgorCQkJCQkJCQkJaW50ci4KKwkJCQkJCQkJCWFzaWNfY2hhbikKKwkJCQkJCQkJJiAoKDB4MSA8PCBzdWJwcml2LT5pbnRyLm51bV9hc2ljX2NoYW5zKSAtIDEpKSA8PCBzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW47CisJCQkJCQkJaWYgKG15dHJpZyAmIHN1YnByaXYtPgorCQkJCQkJCQlpbnRyLgorCQkJCQkJCQllbmFibGVkX21hc2spIHsKKwkJCQkJCQkJdW5zaWduZWQgaW50IHZhbCA9CisJCQkJCQkJCQkwOworCQkJCQkJCQl1bnNpZ25lZCBpbnQgbiwKKwkJCQkJCQkJCWNoLCBsZW47CisKKwkJCQkJCQkJbGVuID0gcy0+YXN5bmMtPgorCQkJCQkJCQkJY21kLgorCQkJCQkJCQkJY2hhbmxpc3RfbGVuOworCQkJCQkJCQlmb3IgKG4gPSAwOworCQkJCQkJCQkJbiA8IGxlbjsKKwkJCQkJCQkJCW4rKykgeworCQkJCQkJCQkJY2ggPSBDUl9DSEFOKHMtPmFzeW5jLT5jbWQuY2hhbmxpc3Rbbl0pOworCQkJCQkJCQkJaWYgKG15dHJpZyAmICgxVSA8PCBjaCkpIHsKKwkJCQkJCQkJCQl2YWwgfD0gKDFVIDw8IG4pOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJCS8qIFdyaXRlIHRoZSBzY2FuIHRvIHRoZSBidWZmZXIuICovCisJCQkJCQkJCWlmIChjb21lZGlfYnVmX3B1dChzLT5hc3luYywgKChzaG9ydCAqKSAmIHZhbClbMF0pCisJCQkJCQkJCQkmJgorCQkJCQkJCQkJY29tZWRpX2J1Zl9wdXQKKwkJCQkJCQkJCShzLT5hc3luYywgKChzaG9ydCAqKSAmIHZhbClbMV0pKSB7CisJCQkJCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IChDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TKTsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCS8qIE92ZXJmbG93ISBTdG9wIGFjcXVpc2l0aW9uISEgKi8KKwkJCQkJCQkJCS8qIFRPRE86IFNUT1BfQUNRVUlTSVRJT05fQ0FMTF9IRVJFISEgKi8KKwkJCQkJCQkJCXBjbXVpb19zdG9wX2ludHIKKwkJCQkJCQkJCQkoZGV2LAorCQkJCQkJCQkJCXMpOworCQkJCQkJCQl9CisKKwkJCQkJCQkJLyogQ2hlY2sgZm9yIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwkJCQkJCQkJaWYgKCFzdWJwcml2LT4KKwkJCQkJCQkJCWludHIuCisJCQkJCQkJCQljb250aW51b3VzKQorCQkJCQkJCQl7CisJCQkJCQkJCQkvKiBzdG9wX3NyYyA9PSBUUklHX0NPVU5UICovCisJCQkJCQkJCQlpZiAoc3VicHJpdi0+aW50ci5zdG9wX2NvdW50ID4gMCkgeworCQkJCQkJCQkJCXN1YnByaXYtPgorCQkJCQkJCQkJCQlpbnRyLgorCQkJCQkJCQkJCQlzdG9wX2NvdW50LS07CisJCQkJCQkJCQkJaWYgKHN1YnByaXYtPmludHIuc3RvcF9jb3VudCA9PSAwKSB7CisJCQkJCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQkJCQkJCQkJLyogVE9ETzogU1RPUF9BQ1FVSVNJVElPTl9DQUxMX0hFUkUhISAqLworCQkJCQkJCQkJCQlwY211aW9fc3RvcF9pbnRyCisJCQkJCQkJCQkJCQkoZGV2LAorCQkJCQkJCQkJCQkJcyk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZQorCQkJCQkJCSgmc3VicHJpdi0+aW50ci4KKwkJCQkJCQlzcGlubG9jaywgZmxhZ3MpOworCisJCQkJCQlpZiAob2xkZXZlbnRzICE9CisJCQkJCQkJcy0+YXN5bmMtPmV2ZW50cykgeworCQkJCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCQkJfQorCisJCQkJCX0KKworCQkJCX0KKwkJCX0KKworCQl9CisJfQorCWlmICghZ290MSkKKwkJcmV0dXJuIElSUV9OT05FOwkvKiBpbnRlcnJ1cHQgZnJvbSBvdGhlciBzb3VyY2UgKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjbXVpb19zdG9wX2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgbnBvcnRzLCBmaXJzdHBvcnQsIGFzaWMsIHBvcnQ7CisKKwlpZiAoKGFzaWMgPSBzdWJwcml2LT5pbnRyLmFzaWMpIDwgMCkKKwkJcmV0dXJuOwkJLyogbm90IGFuIGludGVycnVwdCBzdWJkZXYgKi8KKworCXN1YnByaXYtPmludHIuZW5hYmxlZF9tYXNrID0gMDsKKwlzdWJwcml2LT5pbnRyLmFjdGl2ZSA9IDA7CisJcy0+YXN5bmMtPmludHRyaWcgPSAwOworCW5wb3J0cyA9IHN1YnByaXYtPmludHIubnVtX2FzaWNfY2hhbnMgLyBDSEFOU19QRVJfUE9SVDsKKwlmaXJzdHBvcnQgPSBzdWJwcml2LT5pbnRyLmFzaWNfY2hhbiAvIENIQU5TX1BFUl9QT1JUOworCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9FTkFCKTsKKwlmb3IgKHBvcnQgPSBmaXJzdHBvcnQ7IHBvcnQgPCBmaXJzdHBvcnQgKyBucG9ydHM7ICsrcG9ydCkgeworCQkvKiBkaXNhYmxlIGFsbCBpbnRycyBmb3IgdGhpcyBzdWJkZXYuLiAqLworCQlvdXRiKDAsIGRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19FTkFCMCArIHBvcnQpOworCX0KK30KKworc3RhdGljIGludCBwY211aW9fc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWlmICghc3VicHJpdi0+aW50ci5jb250aW51b3VzICYmIHN1YnByaXYtPmludHIuc3RvcF9jb3VudCA9PSAwKSB7CisJCS8qIEFuIGVtcHR5IGFjcXVpc2l0aW9uISAqLworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXN1YnByaXYtPmludHIuYWN0aXZlID0gMDsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgYml0cyA9IDAsIHBvbF9iaXRzID0gMCwgbjsKKwkJaW50IG5wb3J0cywgZmlyc3Rwb3J0LCBhc2ljLCBwb3J0OworCQlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwkJaWYgKChhc2ljID0gc3VicHJpdi0+aW50ci5hc2ljKSA8IDApCisJCQlyZXR1cm4gMTsJLyogbm90IGFuIGludGVycnVwdAorCQkJCQkgICBzdWJkZXYgKi8KKwkJc3VicHJpdi0+aW50ci5lbmFibGVkX21hc2sgPSAwOworCQlzdWJwcml2LT5pbnRyLmFjdGl2ZSA9IDE7CisJCW5wb3J0cyA9IHN1YnByaXYtPmludHIubnVtX2FzaWNfY2hhbnMgLyBDSEFOU19QRVJfUE9SVDsKKwkJZmlyc3Rwb3J0ID0gc3VicHJpdi0+aW50ci5hc2ljX2NoYW4gLyBDSEFOU19QRVJfUE9SVDsKKwkJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJCWZvciAobiA9IDA7IG4gPCBjbWQtPmNoYW5saXN0X2xlbjsgbisrKSB7CisJCQkJYml0cyB8PSAoMVUgPDwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W25dKSk7CisJCQkJcG9sX2JpdHMgfD0gKENSX0FSRUYoY21kLT5jaGFubGlzdFtuXSkKKwkJCQkJfHwgQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtuXSkgPyAxVSA6IDBVKQorCQkJCQk8PCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJfQorCQl9CisJCWJpdHMgJj0gKCgweDEgPDwgc3VicHJpdi0+aW50ci5udW1fYXNpY19jaGFucykgLQorCQkJMSkgPDwgc3VicHJpdi0+aW50ci5maXJzdF9jaGFuOworCQlzdWJwcml2LT5pbnRyLmVuYWJsZWRfbWFzayA9IGJpdHM7CisKKwkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX0VOQUIpOworCQlmb3IgKHBvcnQgPSBmaXJzdHBvcnQ7IHBvcnQgPCBmaXJzdHBvcnQgKyBucG9ydHM7ICsrcG9ydCkgeworCQkJdW5zaWduZWQgZW5hYiA9CisJCQkJYml0cyA+PiAoc3VicHJpdi0+aW50ci5maXJzdF9jaGFuICsgKHBvcnQgLQorCQkJCQlmaXJzdHBvcnQpICogOCkgJiAweGZmLCBwb2wgPQorCQkJCXBvbF9iaXRzID4+IChzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW4gKyAocG9ydCAtCisJCQkJCWZpcnN0cG9ydCkgKiA4KSAmIDB4ZmY7CisJCQkvKiBzZXQgZW5hYiBpbnRycyBmb3IgdGhpcyBzdWJkZXYuLiAqLworCQkJb3V0YihlbmFiLAorCQkJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19FTkFCMCArIHBvcnQpOworCQkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX1BPTCk7CisJCQlvdXRiKHBvbCwKKwkJCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgKyBSRUdfRU5BQjAgKyBwb3J0KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY211aW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+aW50ci5zcGlubG9jaywgZmxhZ3MpOworCWlmIChzdWJwcml2LT5pbnRyLmFjdGl2ZSkKKwkJcGNtdWlvX3N0b3BfaW50cihkZXYsIHMpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVybmFsIHRyaWdnZXIgZnVuY3Rpb24gdG8gc3RhcnQgYWNxdWlzaXRpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNtdWlvX2ludHRyaWdfc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGV2ZW50ID0gMDsKKworCWlmICh0cmlnbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisJcy0+YXN5bmMtPmludHRyaWcgPSAwOworCWlmIChzdWJwcml2LT5pbnRyLmFjdGl2ZSkgeworCQlldmVudCA9IHBjbXVpb19zdGFydF9pbnRyKGRldiwgcyk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXZlbnQpIHsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiAnZG9fY21kJyBmdW5jdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50IHBjbXVpb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXZlbnQgPSAwOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisJc3VicHJpdi0+aW50ci5hY3RpdmUgPSAxOworCisJLyogU2V0IHVwIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCXN1YnByaXYtPmludHIuY29udGludW91cyA9IDA7CisJCXN1YnByaXYtPmludHIuc3RvcF9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRSSUdfTk9ORSAqLworCQlzdWJwcml2LT5pbnRyLmNvbnRpbnVvdXMgPSAxOworCQlzdWJwcml2LT5pbnRyLnN0b3BfY291bnQgPSAwOworCQlicmVhazsKKwl9CisKKwkvKiBTZXQgdXAgc3RhcnQgb2YgYWNxdWlzaXRpb24uICovCisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19JTlQ6CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gcGNtdWlvX2ludHRyaWdfc3RhcnRfaW50cjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVFJJR19OT1cgKi8KKwkJZXZlbnQgPSBwY211aW9fc3RhcnRfaW50cihkZXYsIHMpOworCQlicmVhazsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChldmVudCkgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICdkb19jbWR0ZXN0JyBmdW5jdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitwY211aW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IChUUklHX05PVyB8IFRSSUdfSU5UKTsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gKFRSSUdfQ09VTlQgfCBUUklHX05PTkUpOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiB0aGVzZSB0ZXN0cyBhcmUgdHJ1ZSBpZiBtb3JlIHRoYW4gb25lIF9zcmMgYml0IGlzIHNldCAqLworCWlmICgoY21kLT5zdGFydF9zcmMgJiAoY21kLT5zdGFydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjICYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPmNvbnZlcnRfc3JjICYgKGNtZC0+Y29udmVydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fZW5kX3NyYyAmIChjbWQtPnNjYW5fZW5kX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c3RvcF9zcmMgJiAoY21kLT5zdG9wX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cgfHwgY21kLT5zdGFydF9zcmMgPT0gVFJJR19JTlQgKi8KKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XICovCisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5zY2FuX2VuZF9zcmMgPT0gVFJJR19DT1VOVCAqLworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCS8qIGFueSBjb3VudCBhbGxvd2VkICovCisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJLyogaWYgKGVycikgcmV0dXJuIDQ7ICovCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA1Mi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BseDkwNTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODk0NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BseDkwNTIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3BseDkwNTIuaAorICAgIERlZmluaXRpb25zIGZvciB0aGUgUExYLTkwNTIgUENJIGludGVyZmFjZSBjaGlwCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgTUVWIEx0ZC4gPGh0dHA6Ly93d3cubWV2LmNvLnVrLz4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2lmbmRlZiBfUExYOTA1Ml9IXworI2RlZmluZSBfUExYOTA1Ml9IXworCisvKgorICogUExYIFBDSTkwNTIgSU5UQ1NSIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSCTB4NEMJLyogT2Zmc2V0IGluIExvY2FsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisvKiBMb2NhbCBJbnRlcnJ1cHQgMSBFbmFibGUgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxRU5BQl9NQVNLCQkweDAwMDEKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxRU5BQl9ESVNBQkxFRAkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMUVOQUJfRU5BQkxFRAkJMHgwMDAxCisvKiBMb2NhbCBJbnRlcnJ1cHQgMSBQb2xhcml0eSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFQT0xfTUFTSwkJMHgwMDAyCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9MT1cJCTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFQT0xfSElHSAkJMHgwMDAyCisvKiBMb2NhbCBJbnRlcnJ1cHQgMSBTdGF0dXMgKHJlYWQtb25seSkgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxU1RBVF9NQVNLCQkweDAwMDQKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxU1RBVF9JTkFDVElWRQkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVNUQVRfQUNUSVZFCQkweDAwMDQKKy8qIExvY2FsIEludGVycnVwdCAyIEVuYWJsZSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJFTkFCX01BU0sJCTB4MDAwOAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJFTkFCX0RJU0FCTEVECQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyRU5BQl9FTkFCTEVECQkweDAwMDgKKy8qIExvY2FsIEludGVycnVwdCAyIFBvbGFyaXR5ICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMlBPTF9NQVNLCQkweDAwMTAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyUE9MX0xPVwkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMlBPTF9ISUdICQkweDAwMTAKKy8qIExvY2FsIEludGVycnVwdCAyIFN0YXR1cyAocmVhZC1vbmx5KSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJTVEFUX01BU0sJCTB4MDAyMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJTVEFUX0lOQUNUSVZFCQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyU1RBVF9BQ1RJVkUJCTB4MDAyMAorLyogUENJIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9NQVNLCQkweDAwNDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9ESVNBQkxFRAkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX1BDSUVOQUJfRU5BQkxFRAkJMHgwMDQwCisvKiBTb2Z0d2FyZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfU09GVElOVF9NQVNLCQkweDAwODAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfU09GVElOVF9VTkFTU0VSVEVECTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9TT0ZUSU5UX0FTU0VSVEVECQkweDAwODAKKy8qIExvY2FsIEludGVycnVwdCAxIFNlbGVjdCBFbmFibGUgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxU0VMX01BU0sJCTB4MDEwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFTRUxfTEVWRUwJCTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFTRUxfRURHRQkJMHgwMTAwCisvKiBMb2NhbCBJbnRlcnJ1cHQgMiBTZWxlY3QgRW5hYmxlICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMlNFTF9NQVNLCQkweDAyMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyU0VMX0xFVkVMCQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyU0VMX0VER0UJCTB4MDIwMAorLyogTG9jYWwgRWRnZSBUcmlnZ2VyYWJsZSBJbnRlcnJ1cHQgMSBDbGVhciBCaXQgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxQ0xSSU5UX01BU0sJCTB4MDQwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfVU5BU1NFUlRFRAkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxQ0xSSU5UX0FTU0VSVEVECTB4MDQwMAorLyogTG9jYWwgRWRnZSBUcmlnZ2VyYWJsZSBJbnRlcnJ1cHQgMiBDbGVhciBCaXQgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyQ0xSSU5UX01BU0sJCTB4MDgwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJDTFJJTlRfVU5BU1NFUlRFRAkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyQ0xSSU5UX0FTU0VSVEVECTB4MDgwMAorLyogSVNBIEludGVyZmFjZSBNb2RlIEVuYWJsZSAocmVhZC1vbmx5IG92ZXIgUENJIGJ1cykgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfSVNBTU9ERV9NQVNLCQkweDEwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfSVNBTU9ERV9ESVNBQkxFRAkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0lTQU1PREVfRU5BQkxFRAkJMHgxMDAwCisKKyNlbmRpZiAvKiBfUExYOTA1Ml9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BseDkwODAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wbHg5MDgwLmgKaW5kZXggYTVhMWE2OC4uOTIzMWJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BseDkwODAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA4MC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIF9fQ09NRURJX1BMWDkwODBfSAogI2RlZmluZSBfX0NPTUVESV9QTFg5MDgwX0gKIAotLy8gZGVzY3JpcHRvciBibG9jayB1c2VkIGZvciBjaGFpbmVkIGRtYSB0cmFuc2ZlcnMKKy8qICBkZXNjcmlwdG9yIGJsb2NrIHVzZWQgZm9yIGNoYWluZWQgZG1hIHRyYW5zZmVycyAqLwogc3RydWN0IHBseF9kbWFfZGVzYyB7CiAJdm9sYXRpbGUgdWludDMyX3QgcGNpX3N0YXJ0X2FkZHI7CiAJdm9sYXRpbGUgdWludDMyX3QgbG9jYWxfc3RhcnRfYWRkcjsKQEAgLTUyLDE0ICs1MiwxNCBAQAogI2RlZmluZSAgTFJOR19BTlkzMiAgICAgICAgMHgwMDAwMDAwMAkvKiBMb2NhdGUgYW55d2hlcmUgaW4gMzIgYml0ICovCiAjZGVmaW5lICBMUk5HX0xUMU1CICAgICAgICAweDAwMDAwMDAyCS8qIExvY2F0ZSBpbiAxc3QgbWVnICovCiAjZGVmaW5lICBMUk5HX0FOWTY0ICAgICAgICAweDAwMDAwMDA0CS8qIExvY2F0ZSBhbnl3aGVyZSBpbiA2NCBiaXQgKi8KLSNkZWZpbmUgIExSTkdfTUVNX01BU0sgICAgIDB4ZmZmZmZmZjAJLy8gYml0cyB0aGF0IHNwZWNpZnkgcmFuZ2UgZm9yIG1lbW9yeSBpbwotI2RlZmluZSAgTFJOR19JT19NQVNLICAgICAweGZmZmZmZmZhCS8vIGJpdHMgdGhhdCBzcGVjaWZ5IHJhbmdlIGZvciBub3JtYWwgaW8KKyNkZWZpbmUgIExSTkdfTUVNX01BU0sgICAgIDB4ZmZmZmZmZjAJLyogIGJpdHMgdGhhdCBzcGVjaWZ5IHJhbmdlIGZvciBtZW1vcnkgaW8gKi8KKyNkZWZpbmUgIExSTkdfSU9fTUFTSyAgICAgMHhmZmZmZmZmYQkvKiAgYml0cyB0aGF0IHNwZWNpZnkgcmFuZ2UgZm9yIG5vcm1hbCBpbyAqLwogCiAjZGVmaW5lIFBMWF9MQVMwTUFQX1JFRyAgICAgICAgIDB4MDAwNAkvKiBMLCBMb2NhbCBBZGRyIFNwYWNlIDAgUmVtYXAgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUExYX0xBUzFNQVBfUkVHICAgICAgICAgMHgwMGY0CS8qIEwsIExvY2FsIEFkZHIgU3BhY2UgMSBSZW1hcCBSZWdpc3RlciAqLwogI2RlZmluZSAgTE1BUF9FTiAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBFbmFibGUgc2xhdmUgZGVjb2RlICovCi0jZGVmaW5lICBMTUFQX01FTV9NQVNLICAgICAweGZmZmZmZmYwCS8vIGJpdHMgdGhhdCBzcGVjaWZ5IGRlY29kZSBmb3IgbWVtb3J5IGlvCi0jZGVmaW5lICBMTUFQX0lPX01BU0sgICAgIDB4ZmZmZmZmZmEJLy8gYml0cyB0aGF0IHNwZWNpZnkgZGVjb2RlIGJpdHMgZm9yIG5vcm1hbCBpbworI2RlZmluZSAgTE1BUF9NRU1fTUFTSyAgICAgMHhmZmZmZmZmMAkvKiAgYml0cyB0aGF0IHNwZWNpZnkgZGVjb2RlIGZvciBtZW1vcnkgaW8gKi8KKyNkZWZpbmUgIExNQVBfSU9fTUFTSyAgICAgMHhmZmZmZmZmYQkvKiAgYml0cyB0aGF0IHNwZWNpZnkgZGVjb2RlIGJpdHMgZm9yIG5vcm1hbCBpbyAqLwogCiAvKiBNb2RlL0FyYml0cmF0aW9uIFJlZ2lzdGVyLgogKi8KQEAgLTE2OSw3ICsxNjksNyBAQAogI2RlZmluZSAgSUNTX0FFUlIgICAgICAgICAgMHgwMDAwMDAwMQkvKiBBc3NlcnQgTFNFUlIgb24gQUJPUlQgKi8KICNkZWZpbmUgIElDU19QRVJSICAgICAgICAgIDB4MDAwMDAwMDIJLyogQXNzZXJ0IExTRVJSIG9uIFBhcml0eSBFcnJvciAqLwogI2RlZmluZSAgSUNTX1NFUlIgICAgICAgICAgMHgwMDAwMDAwNAkvKiBHZW5lcmF0ZSBQQ0kgU0VSUiMgKi8KLSNkZWZpbmUgIElDU19NQklFICAgICAgICAgIDB4MDAwMDAwMDgJLy8gbWFpbGJveCBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lICBJQ1NfTUJJRSAgICAgICAgICAweDAwMDAwMDA4CS8qICBtYWlsYm94IGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgIElDU19QSUUgICAgICAgICAgIDB4MDAwMDAxMDAJLyogUENJIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgIElDU19QRElFICAgICAgICAgIDB4MDAwMDAyMDAJLyogUENJIERvb3JiZWxsIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgIElDU19QQUlFICAgICAgICAgIDB4MDAwMDA0MDAJLyogUENJIEFib3J0IEludGVycnVwdCBFbmFibGUgKi8KQEAgLTE5MCw3ICsxOTAsNyBAQAogI2RlZmluZSAgSUNTX1RBX0RNQTAgICAgICAgMHgwMjAwMDAwMAkvKiBUYXJnZXQgQWJvcnQgLSBETUEgIzAgKi8KICNkZWZpbmUgIElDU19UQV9ETUExICAgICAgIDB4MDQwMDAwMDAJLyogVGFyZ2V0IEFib3J0IC0gRE1BICMxICovCiAjZGVmaW5lICBJQ1NfVEFfUkEgICAgICAgICAweDA4MDAwMDAwCS8qIFRhcmdldCBBYm9ydCAtIFJldHJ5IFRpbWVvdXQgKi8KLSNkZWZpbmUgIElDU19NQklBKHgpICAgICAgICgweDEwMDAwMDAwIDw8ICgoeCkgJiAweDMpKQkvLyBtYWlsYm94IHggaXMgYWN0aXZlCisjZGVmaW5lICBJQ1NfTUJJQSh4KSAgICAgICAoMHgxMDAwMDAwMCA8PCAoKHgpICYgMHgzKSkJLyogIG1haWxib3ggeCBpcyBhY3RpdmUgKi8KIAogI2RlZmluZSBQTFhfQ09OVFJPTF9SRUcgICAgICAgIDB4MDA2QwkvKiBMLCBFRVBST00gQ250bCAmIFBDSSBDbWQgQ29kZXMgKi8KICNkZWZpbmUgIENUTF9SRE1BICAgICAgICAgIDB4MDAwMDAwMEUJLyogRE1BIFJlYWQgQ29tbWFuZCAqLwpAQCAtMjA4LDUxICsyMDgsNTEgQEAKICNkZWZpbmUgIENUTF9SRVNFVCAgICAgICAgIDB4NDAwMDAwMDAJLyogISEgQWRhcHRlciBSZXNldCAhISAqLwogI2RlZmluZSAgQ1RMX1JFQURZICAgICAgICAgMHg4MDAwMDAwMAkvKiBMb2NhbCBJbml0IERvbmUgKi8KIAotI2RlZmluZSBQTFhfSURfUkVHCTB4NzAJLy8gaGFyZC1jb2RlZCBwbHggdmVuZG9yIGFuZCBkZXZpY2UgaWRzCisjZGVmaW5lIFBMWF9JRF9SRUcJMHg3MAkvKiAgaGFyZC1jb2RlZCBwbHggdmVuZG9yIGFuZCBkZXZpY2UgaWRzICovCiAKLSNkZWZpbmUgUExYX1JFVklTSU9OX1JFRwkweDc0CS8vIHNpbGljb24gcmV2aXNpb24KKyNkZWZpbmUgUExYX1JFVklTSU9OX1JFRwkweDc0CS8qICBzaWxpY29uIHJldmlzaW9uICovCiAKLSNkZWZpbmUgUExYX0RNQTBfTU9ERV9SRUcJMHg4MAkvLyBkbWEgY2hhbm5lbCAwIG1vZGUgcmVnaXN0ZXIKLSNkZWZpbmUgUExYX0RNQTFfTU9ERV9SRUcJMHg5NAkvLyBkbWEgY2hhbm5lbCAwIG1vZGUgcmVnaXN0ZXIKKyNkZWZpbmUgUExYX0RNQTBfTU9ERV9SRUcJMHg4MAkvKiAgZG1hIGNoYW5uZWwgMCBtb2RlIHJlZ2lzdGVyICovCisjZGVmaW5lIFBMWF9ETUExX01PREVfUkVHCTB4OTQJLyogIGRtYSBjaGFubmVsIDAgbW9kZSByZWdpc3RlciAqLwogI2RlZmluZSAgUExYX0xPQ0FMX0JVU18xNl9XSURFX0JJVFMJMHgxCiAjZGVmaW5lICBQTFhfTE9DQUxfQlVTXzMyX1dJREVfQklUUwkweDMKICNkZWZpbmUgIFBMWF9MT0NBTF9CVVNfV0lEVEhfTUFTSwkweDMKLSNkZWZpbmUgIFBMWF9ETUFfRU5fUkVBRFlJTl9CSVQJMHg0MAkvLyBlbmFibGUgcmVhZHkgaW4gaW5wdXQKLSNkZWZpbmUgIFBMWF9FTl9CVEVSTV9CSVQJMHg4MAkvLyBlbmFibGUgQlRFUk0jIGlucHV0Ci0jZGVmaW5lICBQTFhfRE1BX0xPQ0FMX0JVUlNUX0VOX0JJVAkweDEwMAkvLyBlbmFibGUgbG9jYWwgYnVyc3QgbW9kZQotI2RlZmluZSAgUExYX0VOX0NIQUlOX0JJVAkweDIwMAkvLyBlbmFibGVzIGNoYWluaW5nCi0jZGVmaW5lICBQTFhfRU5fRE1BX0RPTkVfSU5UUl9CSVQJMHg0MDAJLy8gZW5hYmxlcyBpbnRlcnJ1cHQgb24gZG1hIGRvbmUKLSNkZWZpbmUgIFBMWF9MT0NBTF9BRERSX0NPTlNUX0JJVAkweDgwMAkvLyBob2xkIGxvY2FsIGFkZHJlc3MgY29uc3RhbnQgKGRvbid0IGluY3JlbWVudCkKLSNkZWZpbmUgIFBMWF9ERU1BTkRfTU9ERV9CSVQJMHgxMDAwCS8vIGVuYWJsZXMgZGVtYW5kLW1vZGUgZm9yIGRtYSB0cmFuc2ZlcgorI2RlZmluZSAgUExYX0RNQV9FTl9SRUFEWUlOX0JJVAkweDQwCS8qICBlbmFibGUgcmVhZHkgaW4gaW5wdXQgKi8KKyNkZWZpbmUgIFBMWF9FTl9CVEVSTV9CSVQJMHg4MAkvKiAgZW5hYmxlIEJURVJNIyBpbnB1dCAqLworI2RlZmluZSAgUExYX0RNQV9MT0NBTF9CVVJTVF9FTl9CSVQJMHgxMDAJLyogIGVuYWJsZSBsb2NhbCBidXJzdCBtb2RlICovCisjZGVmaW5lICBQTFhfRU5fQ0hBSU5fQklUCTB4MjAwCS8qICBlbmFibGVzIGNoYWluaW5nICovCisjZGVmaW5lICBQTFhfRU5fRE1BX0RPTkVfSU5UUl9CSVQJMHg0MDAJLyogIGVuYWJsZXMgaW50ZXJydXB0IG9uIGRtYSBkb25lICovCisjZGVmaW5lICBQTFhfTE9DQUxfQUREUl9DT05TVF9CSVQJMHg4MDAJLyogIGhvbGQgbG9jYWwgYWRkcmVzcyBjb25zdGFudCAoZG9uJ3QgaW5jcmVtZW50KSAqLworI2RlZmluZSAgUExYX0RFTUFORF9NT0RFX0JJVAkweDEwMDAJLyogIGVuYWJsZXMgZGVtYW5kLW1vZGUgZm9yIGRtYSB0cmFuc2ZlciAqLwogI2RlZmluZSAgUExYX0VPVF9FTkFCTEVfQklUCTB4NDAwMAogI2RlZmluZSAgUExYX1NUT1BfTU9ERV9CSVQgMHg4MDAwCi0jZGVmaW5lICBQTFhfRE1BX0lOVFJfUENJX0JJVAkweDIwMDAwCS8vIHJvdXRlcyBkbWEgaW50ZXJydXB0IHRvIHBjaSBidXMgKGluc3RlYWQgb2YgbG9jYWwgYnVzKQorI2RlZmluZSAgUExYX0RNQV9JTlRSX1BDSV9CSVQJMHgyMDAwMAkvKiAgcm91dGVzIGRtYSBpbnRlcnJ1cHQgdG8gcGNpIGJ1cyAoaW5zdGVhZCBvZiBsb2NhbCBidXMpICovCiAKLSNkZWZpbmUgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHCTB4ODQJLy8gcGNpIGFkZHJlc3MgdGhhdCBkbWEgdHJhbnNmZXJzIHN0YXJ0IGF0CisjZGVmaW5lIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRwkweDg0CS8qICBwY2kgYWRkcmVzcyB0aGF0IGRtYSB0cmFuc2ZlcnMgc3RhcnQgYXQgKi8KICNkZWZpbmUgUExYX0RNQTFfUENJX0FERFJFU1NfUkVHCTB4OTgKIAotI2RlZmluZSBQTFhfRE1BMF9MT0NBTF9BRERSRVNTX1JFRwkweDg4CS8vIGxvY2FsIGFkZHJlc3MgdGhhdCBkbWEgdHJhbnNmZXJzIHN0YXJ0IGF0CisjZGVmaW5lIFBMWF9ETUEwX0xPQ0FMX0FERFJFU1NfUkVHCTB4ODgJLyogIGxvY2FsIGFkZHJlc3MgdGhhdCBkbWEgdHJhbnNmZXJzIHN0YXJ0IGF0ICovCiAjZGVmaW5lIFBMWF9ETUExX0xPQ0FMX0FERFJFU1NfUkVHCTB4OWMKIAotI2RlZmluZSBQTFhfRE1BMF9UUkFOU0ZFUl9TSVpFX1JFRwkweDhjCS8vIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAoZmlyc3QgMjMgYml0cykKKyNkZWZpbmUgUExYX0RNQTBfVFJBTlNGRVJfU0laRV9SRUcJMHg4YwkvKiAgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIChmaXJzdCAyMyBiaXRzKSAqLwogI2RlZmluZSBQTFhfRE1BMV9UUkFOU0ZFUl9TSVpFX1JFRwkweGEwCiAKLSNkZWZpbmUgUExYX0RNQTBfREVTQ1JJUFRPUl9SRUcJMHg5MAkvLyBkZXNjcmlwdG9yIHBvaW50ZXIgcmVnaXN0ZXIKKyNkZWZpbmUgUExYX0RNQTBfREVTQ1JJUFRPUl9SRUcJMHg5MAkvKiAgZGVzY3JpcHRvciBwb2ludGVyIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBMWF9ETUExX0RFU0NSSVBUT1JfUkVHCTB4YTQKLSNkZWZpbmUgIFBMWF9ERVNDX0lOX1BDSV9CSVQJMHgxCS8vIGRlc2NyaXB0b3IgaXMgbG9jYXRlZCBpbiBwY2kgc3BhY2UgKG5vdCBsb2NhbCBzcGFjZSkKLSNkZWZpbmUgIFBMWF9FTkRfT0ZfQ0hBSU5fQklUCTB4MgkvLyBlbmQgb2YgY2hhaW4gYml0Ci0jZGVmaW5lICBQTFhfSU5UUl9URVJNX0NPVU5UCTB4NAkvLyBpbnRlcnJ1cHQgd2hlbiB0aGlzIGRlc2NyaXB0b3IncyB0cmFuc2ZlciBpcyBmaW5pc2hlZAotI2RlZmluZSAgUExYX1hGRVJfTE9DQUxfVE9fUENJIDB4OAkvLyB0cmFuc2ZlciBmcm9tIGxvY2FsIHRvIHBjaSBidXMgKG5vdCBwY2kgdG8gbG9jYWwpCisjZGVmaW5lICBQTFhfREVTQ19JTl9QQ0lfQklUCTB4MQkvKiAgZGVzY3JpcHRvciBpcyBsb2NhdGVkIGluIHBjaSBzcGFjZSAobm90IGxvY2FsIHNwYWNlKSAqLworI2RlZmluZSAgUExYX0VORF9PRl9DSEFJTl9CSVQJMHgyCS8qICBlbmQgb2YgY2hhaW4gYml0ICovCisjZGVmaW5lICBQTFhfSU5UUl9URVJNX0NPVU5UCTB4NAkvKiAgaW50ZXJydXB0IHdoZW4gdGhpcyBkZXNjcmlwdG9yJ3MgdHJhbnNmZXIgaXMgZmluaXNoZWQgKi8KKyNkZWZpbmUgIFBMWF9YRkVSX0xPQ0FMX1RPX1BDSSAweDgJLyogIHRyYW5zZmVyIGZyb20gbG9jYWwgdG8gcGNpIGJ1cyAobm90IHBjaSB0byBsb2NhbCkgKi8KIAotI2RlZmluZSBQTFhfRE1BMF9DU19SRUcJMHhhOAkvLyBjb21tYW5kIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBQTFhfRE1BMF9DU19SRUcJMHhhOAkvKiAgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgUExYX0RNQTFfQ1NfUkVHCTB4YTkKLSNkZWZpbmUgIFBMWF9ETUFfRU5fQklUCTB4MQkvLyBlbmFibGUgZG1hIGNoYW5uZWwKLSNkZWZpbmUgIFBMWF9ETUFfU1RBUlRfQklUCTB4MgkvLyBzdGFydCBkbWEgdHJhbnNmZXIKLSNkZWZpbmUgIFBMWF9ETUFfQUJPUlRfQklUCTB4NAkvLyBhYm9ydCBkbWEgdHJhbnNmZXIKLSNkZWZpbmUgIFBMWF9DTEVBUl9ETUFfSU5UUl9CSVQJMHg4CS8vIGNsZWFyIGRtYSBpbnRlcnJ1cHQKLSNkZWZpbmUgIFBMWF9ETUFfRE9ORV9CSVQJMHgxMAkvLyB0cmFuc2ZlciBkb25lIHN0YXR1cyBiaXQKKyNkZWZpbmUgIFBMWF9ETUFfRU5fQklUCTB4MQkvKiAgZW5hYmxlIGRtYSBjaGFubmVsICovCisjZGVmaW5lICBQTFhfRE1BX1NUQVJUX0JJVAkweDIJLyogIHN0YXJ0IGRtYSB0cmFuc2ZlciAqLworI2RlZmluZSAgUExYX0RNQV9BQk9SVF9CSVQJMHg0CS8qICBhYm9ydCBkbWEgdHJhbnNmZXIgKi8KKyNkZWZpbmUgIFBMWF9DTEVBUl9ETUFfSU5UUl9CSVQJMHg4CS8qICBjbGVhciBkbWEgaW50ZXJydXB0ICovCisjZGVmaW5lICBQTFhfRE1BX0RPTkVfQklUCTB4MTAJLyogIHRyYW5zZmVyIGRvbmUgc3RhdHVzIGJpdCAqLwogCi0jZGVmaW5lIFBMWF9ETUEwX1RIUkVTSE9MRF9SRUcJMHhiMAkvLyBjb21tYW5kIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBQTFhfRE1BMF9USFJFU0hPTERfUkVHCTB4YjAJLyogIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyICovCiAKIC8qCiAgKiBBY2Nlc3NlcyBuZWFyIHRoZSBlbmQgb2YgbWVtb3J5IGNhbiBjYXVzZSB0aGUgUExYIGNoaXAKQEAgLTM5MiwxMiArMzkyLDEyIEBACiAJZWxzZQogCQlkbWFfY3NfYWRkciA9IGlvYmFzZSArIFBMWF9ETUEwX0NTX1JFRzsKIAotCS8vIGFib3J0IGRtYSB0cmFuc2ZlciBpZiBuZWNlc3NhcnkKKwkvKiAgYWJvcnQgZG1hIHRyYW5zZmVyIGlmIG5lY2Vzc2FyeSAqLwogCWRtYV9zdGF0dXMgPSByZWFkYihkbWFfY3NfYWRkcik7Ci0JaWYgKChkbWFfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpID09IDApIHsKKwlpZiAoKGRtYV9zdGF0dXMgJiBQTFhfRE1BX0VOX0JJVCkgPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQotCS8vIHdhaXQgdG8gbWFrZSBzdXJlIGRvbmUgYml0IGlzIHplcm8KKworCS8qICB3YWl0IHRvIG1ha2Ugc3VyZSBkb25lIGJpdCBpcyB6ZXJvICovCiAJZm9yIChpID0gMDsgKGRtYV9zdGF0dXMgJiBQTFhfRE1BX0RPTkVfQklUKSAmJiBpIDwgdGltZW91dDsgaSsrKSB7CiAJCWNvbWVkaV91ZGVsYXkoMSk7CiAJCWRtYV9zdGF0dXMgPSByZWFkYihkbWFfY3NfYWRkcik7CkBAIC00MDgsOSArNDA4LDkgQEAKIAkJCWNoYW5uZWwpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9Ci0JLy8gZGlzYWJsZSBhbmQgYWJvcnQgY2hhbm5lbAorCS8qICBkaXNhYmxlIGFuZCBhYm9ydCBjaGFubmVsICovCiAJd3JpdGViKFBMWF9ETUFfQUJPUlRfQklULCBkbWFfY3NfYWRkcik7Ci0JLy8gd2FpdCBmb3IgZG1hIGRvbmUgYml0CisJLyogIHdhaXQgZm9yIGRtYSBkb25lIGJpdCAqLwogCWRtYV9zdGF0dXMgPSByZWFkYihkbWFfY3NfYWRkcik7CiAJZm9yIChpID0gMDsgKGRtYV9zdGF0dXMgJiBQTFhfRE1BX0RPTkVfQklUKSA9PSAwICYmIGkgPCB0aW1lb3V0OyBpKyspIHsKIAkJY29tZWRpX3VkZWxheSgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTBiZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3BvYy5jCisgICAgTWluaS1kcml2ZXJzIGZvciBQT0MgKFBpZWNlIG9mIENyYXApIGJvYXJkcworICAgIENvcHlyaWdodCAoQykgMjAwMCBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworLyoKK0RyaXZlcjogcG9jCitEZXNjcmlwdGlvbjogR2VuZXJpYyBkcml2ZXIgZm9yIHZlcnkgc2ltcGxlIGRldmljZXMKK0F1dGhvcjogZHMKK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBQy0wMiAoZGFjMDIpLCBbQWR2YW50ZWNoXSBQQ0wtNzMzIChwY2w3MzMpLAorICBQQ0wtNzM0IChwY2w3MzQpCitVcGRhdGVkOiBTYXQsIDE2IE1hciAyMDAyIDE3OjM0OjQ4IC0wODAwCitTdGF0dXM6IHVua25vd24KKworVGhpcyBkcml2ZXIgaXMgaW5kZW5kZWQgdG8gc3VwcG9ydCB2ZXJ5IHNpbXBsZSBJU0EtYmFzZWQgZGV2aWNlcywKK2luY2x1ZGluZzoKKyAgZGFjMDIgLSBLZWl0aGxleSBEQUMtMDIgYW5hbG9nIG91dHB1dCBib2FyZAorICBwY2w3MzMgLSBBZHZhbnRlY2ggUENMLTczMworICBwY2w3MzQgLSBBZHZhbnRlY2ggUENMLTczNAorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCitzdGF0aWMgaW50IHBvY19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwb2NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgcmVhZGJhY2tfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRhYzAyX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHBjbDczM19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNsNzM0X2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdHJ1Y3QgYm9hcmRkZWZfc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBpb3NpemU7CisJaW50ICgqc2V0dXApIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKTsKKwlpbnQgdHlwZTsKKwlpbnQgbl9jaGFuOworCWludCBuX2JpdHM7CisJaW50ICgqd2luc24pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwkJdW5zaWduZWQgaW50ICopOworCWludCAoKnJpbnNuKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9pbnNuICosCisJCXVuc2lnbmVkIGludCAqKTsKKwlpbnQgKCppbnNuYml0cykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYm9hcmRkZWZfc3RydWN0IGJvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiZGFjMDIiLAorCSAgICAgIGlvc2l6ZToJOCwKKwkJCS8vc2V0dXA6ICAgICAgICAgICAgICAgIGRhYzAyX3NldHVwLAorCSAgICAgIHR5cGU6CUNPTUVESV9TVUJEX0FPLAorCSAgICAgIG5fY2hhbjoJMiwKKwkgICAgICBuX2JpdHM6CTEyLAorCSAgICAgIHdpbnNuOglkYWMwMl9hb193aW5zbiwKKwkgICAgICByaW5zbjoJcmVhZGJhY2tfaW5zbiwKKwkgICAgICByYW5nZToJJnJhbmdlX3Vua25vd24sCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2w3MzMiLAorCSAgICAgIGlvc2l6ZToJNCwKKwkgICAgICB0eXBlOglDT01FRElfU1VCRF9ESSwKKwkgICAgICBuX2NoYW46CTMyLAorCSAgICAgIG5fYml0czoJMSwKKwkgICAgICBpbnNuYml0czpwY2w3MzNfaW5zbl9iaXRzLAorCSAgICAgIHJhbmdlOgkmcmFuZ2VfZGlnaXRhbCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjbDczNCIsCisJICAgICAgaW9zaXplOgk0LAorCSAgICAgIHR5cGU6CUNPTUVESV9TVUJEX0RPLAorCSAgICAgIG5fY2hhbjoJMzIsCisJICAgICAgbl9iaXRzOgkxLAorCSAgICAgIGluc25iaXRzOnBjbDczNF9pbnNuX2JpdHMsCisJICAgICAgcmFuZ2U6CSZyYW5nZV9kaWdpdGFsLAorCQl9LAorfTsKKworI2RlZmluZSBuX2JvYXJkcyAoc2l6ZW9mKGJvYXJkcykvc2l6ZW9mKGJvYXJkc1swXSkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgYm9hcmRkZWZfc3RydWN0ICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcG9jID0geworICAgICAgZHJpdmVyX25hbWU6InBvYyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cG9jX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwb2NfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmRzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKGJvYXJkc1swXSksCit9OworCitzdGF0aWMgaW50IHBvY19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlvc2l6ZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBvYzogdXNpbmcgJXMgaW9iYXNlIDB4JWx4XG4iLCBkZXYtPm1pbm9yLAorCQl0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlmIChpb2Jhc2UgPT0gMCkgeworCQlwcmludGsoImlvIGJhc2UgYWRkcmVzcyByZXF1aXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlvc2l6ZSA9IHRoaXNfYm9hcmQtPmlvc2l6ZTsKKwkvKiBjaGVjayBpZiBpbyBhZGRyZXNzZXMgYXJlIGF2YWlsYWJsZSAqLworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBpb3NpemUsICJkYWMwMiIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3Q6IGZhaWxlZCB0byBhbGxvY2F0ZSBwb3J0cyAweCVseCB0byAweCVseFxuIiwgaW9iYXNlLCBpb2Jhc2UgKyBpb3NpemUgLSAxKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiB0aGlzX2JvYXJkLT5uX2NoYW4pIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSB0aGlzX2JvYXJkLT50eXBlOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fY2hhbjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc19ib2FyZC0+bl9iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5yYW5nZTsKKwlzLT5pbnNuX3dyaXRlID0gdGhpc19ib2FyZC0+d2luc247CisJcy0+aW5zbl9yZWFkID0gdGhpc19ib2FyZC0+cmluc247CisJcy0+aW5zbl9iaXRzID0gdGhpc19ib2FyZC0+aW5zbmJpdHM7CisJaWYgKHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfQU8gfHwgcy0+dHlwZSA9PSBDT01FRElfU1VCRF9ETykgeworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9jX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvKiBvbmx5IGZyZWUgc3R1ZmYgaWYgaXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IF9hdHRhY2ggKi8KKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb3NpemUpOworCisJcHJpbnRrKCJjb21lZGklZDogZGFjMDI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkYmFja19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlkYXRhWzBdID0gKCh1bnNpZ25lZCBpbnQgKikgZGV2LT5wcml2YXRlKVtjaGFuXTsKKworCXJldHVybiAxOworfQorCisvKiBEQUMtMDIgcmVnaXN0ZXJzICovCisjZGVmaW5lIERBQzAyX0xTQihhKQkoMiAqIGEpCisjZGVmaW5lIERBQzAyX01TQihhKQkoMiAqIGEgKyAxKQorCitzdGF0aWMgaW50IGRhYzAyX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgdGVtcDsKKwlpbnQgY2hhbjsKKwlpbnQgb3V0cHV0OworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCSgodW5zaWduZWQgaW50ICopIGRldi0+cHJpdmF0ZSlbY2hhbl0gPSBkYXRhWzBdOworCW91dHB1dCA9IGRhdGFbMF07CisjaWZkZWYgd3JvbmcKKwkvLyBjb252ZXJ0IHRvIGNvbXBsZW1lbnRhcnkgYmluYXJ5IGlmIHJhbmdlIGlzIGJpcG9sYXIKKwlpZiAoKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSAmIDB4MikgPT0gMCkKKwkJb3V0cHV0ID0gfm91dHB1dDsKKyNlbmRpZgorCXRlbXAgPSAob3V0cHV0IDw8IDQpICYgMHhmMDsKKwlvdXRiKHRlbXAsIGRldi0+aW9iYXNlICsgREFDMDJfTFNCKGNoYW4pKTsKKwl0ZW1wID0gKG91dHB1dCA+PiA0KSAmIDB4ZmY7CisJb3V0Yih0ZW1wLCBkZXYtPmlvYmFzZSArIERBQzAyX01TQihjaGFuKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2w3MzNfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyAwKTsKKwlkYXRhWzFdIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyAxKSA8PCA4KTsKKwlkYXRhWzFdIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyAyKSA8PCAxNik7CisJZGF0YVsxXSB8PSAoaW5iKGRldi0+aW9iYXNlICsgMykgPDwgMjQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzM0X2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCWlmICgoZGF0YVswXSA+PiAwKSAmIDB4ZmYpCisJCQlvdXRiKChzLT5zdGF0ZSA+PiAwKSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgMCk7CisJCWlmICgoZGF0YVswXSA+PiA4KSAmIDB4ZmYpCisJCQlvdXRiKChzLT5zdGF0ZSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgMSk7CisJCWlmICgoZGF0YVswXSA+PiAxNikgJiAweGZmKQorCQkJb3V0Yigocy0+c3RhdGUgPj4gMTYpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyAyKTsKKwkJaWYgKChkYXRhWzBdID4+IDI0KSAmIDB4ZmYpCisJCQlvdXRiKChzLT5zdGF0ZSA+PiAyNCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIDMpOworCX0KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wb2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NWM0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKQEAgLTAsMCArMSwxMzYzIEBACisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGNvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCisKKyAgICBRdWF0ZWNoIERBUVAgUENNQ0lBIGRhdGEgY2FwdHVyZSBjYXJkcyBDT01FREkgY2xpZW50IGRyaXZlcgorICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMyBCcmVudCBCYWNjYWxhIDxiYWNjYWxhQGZyZWVzb2Z0Lm9yZz4KKyAgICBUaGUgREFRUCBpbnRlcmZhY2UgY29kZSBpbiB0aGlzIGZpbGUgaXMgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgICAgaHR0cDovL3d3dy5jb21lZGkub3JnLworCisgICAgcXVhdGVjaF9kYXFwX2NzLmMgMS4xMAorCisgICAgRG9jdW1lbnRhdGlvbiBmb3IgdGhlIERBUVAgUENNQ0lBIGNhcmRzIGNhbiBiZSBmb3VuZCBvbiBRdWF0ZWNoJ3Mgc2l0ZToKKworICAgICAgICAgICAgICAgIGZ0cDovL2Z0cC5xdWF0ZWNoLmNvbS9NYW51YWxzL2RhcXAtMjA4LnBkZgorCisgICAgVGhpcyBtYW51YWwgaXMgZm9yIGJvdGggdGhlIERBUVAtMjA4IGFuZCB0aGUgREFRUC0zMDguCisKKyAgICBXaGF0IHdvcmtzOgorCisJLSBBL0QgY29udmVyc2lvbgorCSAgICAtIDggY2hhbm5lbHMKKwkgICAgLSA0IGdhaW4gcmFuZ2VzCisJICAgIC0gZ3JvdW5kIHJlZiBvciBkaWZmZXJlbnRpYWwKKwkgICAgLSBzaW5nbGUtc2hvdCBhbmQgdGltZWQgYm90aCBzdXBwb3J0ZWQKKwktIEQvQSBjb252ZXJzaW9uLCBzaW5nbGUtc2hvdAorCS0gZGlnaXRhbCBJL08KKworICAgIFdoYXQgZG9lc24ndDoKKworCS0gYW55IGtpbmQgb2YgdHJpZ2dlcmluZyAtIGV4dGVybmFsIG9yIEQvQSBjaGFubmVsIDEKKwktIHRoZSBjYXJkJ3Mgb3B0aW9uYWwgZXhwYW5zaW9uIGJvYXJkCisJLSB0aGUgY2FyZCdzIHRpbWVyIChmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBBL0QgY29udmVyc2lvbikKKwktIEQvQSB1cGRhdGUgbW9kZXMgb3RoZXIgdGhhbiBpbW1lZGlhdGUgKGkuZSwgdGltZWQpCisJLSBmYW5jaWVyIHRpbWluZyBtb2RlcworCS0gc2V0dGluZyBjYXJkJ3MgRklGTyBidWZmZXIgdGhyZXNob2xkcyB0byBhbnl0aGluZyBidXQgZGVmYXVsdAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKK0RyaXZlcjogcXVhdGVjaF9kYXFwX2NzCitEZXNjcmlwdGlvbjogUXVhdGVjaCBEQVFQIFBDTUNJQSBkYXRhIGNhcHR1cmUgY2FyZHMKK0F1dGhvcjogQnJlbnQgQmFjY2FsYSA8YmFjY2FsYUBmcmVlc29mdC5vcmc+CitTdGF0dXM6IHdvcmtzCitEZXZpY2VzOiBbUXVhdGVjaF0gREFRUC0yMDggKGRhcXApLCBEQVFQLTMwOAorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKworLyoKKyAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCisgICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQorICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCisgICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKKyAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KKyovCisKKyNpZmRlZiBQQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Cittb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCitzdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJxdWF0ZWNoX2RhcXBfY3MuYyAxLjEwIDIwMDMvMDQvMjEgKEJyZW50IEJhY2NhbGEpIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyogTWF4aW11bSBudW1iZXIgb2Ygc2VwYXJhdGUgREFRUCBkZXZpY2VzIHdlJ2xsIGFsbG93ICovCisjZGVmaW5lIE1BWF9ERVYgICAgICAgICA0CisKK3N0cnVjdCBsb2NhbF9pbmZvX3QgeworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWRldl9ub2RlX3Qgbm9kZTsKKwlpbnQgc3RvcDsKKwlpbnQgdGFibGVfaW5kZXg7CisJY2hhciBib2FyZF9uYW1lWzMyXTsKKworCWVudW0geyBzZW1hcGhvcmUsIGJ1ZmZlciB9IGludGVycnVwdF9tb2RlOworCisJc3RydWN0IHNlbWFwaG9yZSBlb3M7CisKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBjb3VudDsKK307CisKKy8qIEEgbGlzdCBvZiAiaW5zdGFuY2VzIiBvZiB0aGUgZGV2aWNlLiAqLworCitzdGF0aWMgc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2X3RhYmxlW01BWF9ERVZdID0geyBOVUxMLCAvKiAuLi4gKi8gIH07CisKKy8qIFRoZSBEQVFQIGNvbW11bmljYXRlcyB3aXRoIHRoZSBzeXN0ZW0gdGhyb3VnaCBhIDE2IGJ5dGUgSS9PIHdpbmRvdy4gKi8KKworI2RlZmluZSBEQVFQX0ZJRk9fU0laRQkJNDA5NgorCisjZGVmaW5lIERBUVBfRklGTwkJMAorI2RlZmluZSBEQVFQX1NDQU5MSVNUCQkxCisjZGVmaW5lIERBUVBfQ09OVFJPTAkJMgorI2RlZmluZSBEQVFQX1NUQVRVUwkJMgorI2RlZmluZSBEQVFQX0RJR0lUQUxfSU8JCTMKKyNkZWZpbmUgREFRUF9QQUNFUl9MT1cJCTQKKyNkZWZpbmUgREFRUF9QQUNFUl9NSUQJCTUKKyNkZWZpbmUgREFRUF9QQUNFUl9ISUdICQk2CisjZGVmaW5lIERBUVBfQ09NTUFORAkJNworI2RlZmluZSBEQVFQX0RBCQkJOAorI2RlZmluZSBEQVFQX1RJTUVSCQkxMAorI2RlZmluZSBEQVFQX0FVWAkJMTUKKworI2RlZmluZSBEQVFQX1NDQU5MSVNUX0RJRkZFUkVOVElBTAkweDQwMDAKKyNkZWZpbmUgREFRUF9TQ0FOTElTVF9HQUlOKHgpCQkoKHgpPDwxMikKKyNkZWZpbmUgREFRUF9TQ0FOTElTVF9DSEFOTkVMKHgpCSgoeCk8PDgpCisjZGVmaW5lIERBUVBfU0NBTkxJU1RfU1RBUlQJCTB4MDA4MAorI2RlZmluZSBEQVFQX1NDQU5MSVNUX0VYVF9HQUlOKHgpCSgoeCk8PDQpCisjZGVmaW5lIERBUVBfU0NBTkxJU1RfRVhUX0NIQU5ORUwoeCkJKHgpCisKKyNkZWZpbmUgREFRUF9DT05UUk9MX1BBQ0VSXzEwMGtIegkweGMwCisjZGVmaW5lIERBUVBfQ09OVFJPTF9QQUNFUl8xTUh6CQkweDgwCisjZGVmaW5lIERBUVBfQ09OVFJPTF9QQUNFUl81TUh6CQkweDQwCisjZGVmaW5lIERBUVBfQ09OVFJPTF9QQUNFUl9FWFRFUk5BTAkweDAwCisjZGVmaW5lIERBUVBfQ09OVE9STF9FWFBBTlNJT04JCTB4MjAKKyNkZWZpbmUgREFRUF9DT05UUk9MX0VPU19JTlRfRU5BQkxFCTB4MTAKKyNkZWZpbmUgREFRUF9DT05UUk9MX0ZJRk9fSU5UX0VOQUJMRQkweDA4CisjZGVmaW5lIERBUVBfQ09OVFJPTF9UUklHR0VSX09ORVNIT1QJMHgwMAorI2RlZmluZSBEQVFQX0NPTlRST0xfVFJJR0dFUl9DT05USU5VT1VTCTB4MDQKKyNkZWZpbmUgREFRUF9DT05UUk9MX1RSSUdHRVJfSU5URVJOQUwJMHgwMAorI2RlZmluZSBEQVFQX0NPTlRST0xfVFJJR0dFUl9FWFRFUk5BTAkweDAyCisjZGVmaW5lIERBUVBfQ09OVFJPTF9UUklHR0VSX1JJU0lORwkweDAwCisjZGVmaW5lIERBUVBfQ09OVFJPTF9UUklHR0VSX0ZBTExJTkcJMHgwMQorCisjZGVmaW5lIERBUVBfU1RBVFVTX0lETEUJCTB4ODAKKyNkZWZpbmUgREFRUF9TVEFUVVNfUlVOTklORwkJMHg0MAorI2RlZmluZSBEQVFQX1NUQVRVU19FVkVOVFMJCTB4MzgKKyNkZWZpbmUgREFRUF9TVEFUVVNfREFUQV9MT1NUCQkweDIwCisjZGVmaW5lIERBUVBfU1RBVFVTX0VORF9PRl9TQ0FOCQkweDEwCisjZGVmaW5lIERBUVBfU1RBVFVTX0ZJRk9fVEhSRVNIT0xECTB4MDgKKyNkZWZpbmUgREFRUF9TVEFUVVNfRklGT19GVUxMCQkweDA0CisjZGVmaW5lIERBUVBfU1RBVFVTX0ZJRk9fTkVBUkZVTEwJMHgwMgorI2RlZmluZSBEQVFQX1NUQVRVU19GSUZPX0VNUFRZCQkweDAxCisKKyNkZWZpbmUgREFRUF9DT01NQU5EX0FSTQkJMHg4MAorI2RlZmluZSBEQVFQX0NPTU1BTkRfUlNURgkJMHg0MAorI2RlZmluZSBEQVFQX0NPTU1BTkRfUlNUUQkJMHgyMAorI2RlZmluZSBEQVFQX0NPTU1BTkRfU1RPUAkJMHgxMAorI2RlZmluZSBEQVFQX0NPTU1BTkRfTEFUQ0gJCTB4MDgKKyNkZWZpbmUgREFRUF9DT01NQU5EXzEwMGtIegkJMHgwMAorI2RlZmluZSBEQVFQX0NPTU1BTkRfNTBrSHoJCTB4MDIKKyNkZWZpbmUgREFRUF9DT01NQU5EXzI1a0h6CQkweDA0CisjZGVmaW5lIERBUVBfQ09NTUFORF9GSUZPX0RBVEEJCTB4MDEKKyNkZWZpbmUgREFRUF9DT01NQU5EX0ZJRk9fUFJPR1JBTQkweDAwCisKKyNkZWZpbmUgREFRUF9BVVhfVFJJR0dFUl9UVEwJCTB4MDAKKyNkZWZpbmUgREFRUF9BVVhfVFJJR0dFUl9BTkFMT0cJCTB4ODAKKyNkZWZpbmUgREFRUF9BVVhfVFJJR0dFUl9QUkVUUklHR0VSCTB4NDAKKyNkZWZpbmUgREFRUF9BVVhfVElNRVJfSU5UX0VOQUJMRQkweDIwCisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX1JFTE9BRAkJMHgwMAorI2RlZmluZSBEQVFQX0FVWF9USU1FUl9QQVVTRQkJMHgwOAorI2RlZmluZSBEQVFQX0FVWF9USU1FUl9HTwkJMHgxMAorI2RlZmluZSBEQVFQX0FVWF9USU1FUl9HT19FWFRFUk5BTAkweDE4CisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX0VYVEVSTkFMX1NSQwkweDA0CisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX0lOVEVSTkFMX1NSQwkweDAwCisjZGVmaW5lIERBUVBfQVVYX0RBX0RJUkVDVAkJMHgwMAorI2RlZmluZSBEQVFQX0FVWF9EQV9PVkVSRkxPVwkJMHgwMQorI2RlZmluZSBEQVFQX0FVWF9EQV9FWFRFUk5BTAkJMHgwMgorI2RlZmluZSBEQVFQX0FVWF9EQV9QQUNFUgkJMHgwMworCisjZGVmaW5lIERBUVBfQVVYX1JVTk5JTkcJCTB4ODAKKyNkZWZpbmUgREFRUF9BVVhfVFJJR0dFUkVECQkweDQwCisjZGVmaW5lIERBUVBfQVVYX0RBX0JVRkZFUgkJMHgyMAorI2RlZmluZSBEQVFQX0FVWF9USU1FUl9PVkVSRkxPVwkJMHgxMAorI2RlZmluZSBEQVFQX0FVWF9DT05WRVJTSU9OCQkweDA4CisjZGVmaW5lIERBUVBfQVVYX0RBVEFfTE9TVAkJMHgwNAorI2RlZmluZSBEQVFQX0FVWF9GSUZPX05FQVJGVUxMCQkweDAyCisjZGVmaW5lIERBUVBfQVVYX0ZJRk9fRU1QVFkJCTB4MDEKKworLyogVGhlc2UgcmFuZ2Ugc3RydWN0dXJlcyB0ZWxsIENPTUVESSBob3cgdGhlIHNhbXBsZSB2YWx1ZXMgbWFwIHRvCisgKiB2b2x0YWdlcy4gIFRoZSBBL0QgY29udmVydGVyIGhhcyBmb3VyIHJhbmdlczogKy8tIDEwViB0aHJvdWdoCisgKiArLy0gMS4yNVYsIGFuZCB0aGUgRC9BIGNvbnZlcnRlciBoYXMgb25seSBvbmU6ICsvLSA1Vi4KKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFxcF9haSA9IHsgNCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhcXBfYW8gPSB7IDEsIHtCSVBfUkFOR0UoNSl9IH07CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKiBjb21lZGkgaW50ZXJmYWNlIGNvZGUgKi8KKworc3RhdGljIGludCBkYXFwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRhcXBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFxcCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJxdWF0ZWNoX2RhcXBfY3MiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhcXBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhcXBfZGV0YWNoLAorfTsKKworI2lmZGVmIERBUVBfREVCVUcKKworc3RhdGljIHZvaWQgZGFxcF9kdW1wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiREFRUDogc3RhdHVzICUwMng7IGF1eCBzdGF0dXMgJTAyeFxuIiwKKwkJaW5iKGRldi0+aW9iYXNlICsgREFRUF9TVEFUVVMpLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX0FVWCkpOworfQorCitzdGF0aWMgdm9pZCBoZXhfZHVtcChjaGFyICpzdHIsIHZvaWQgKnB0ciwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpjcHRyID0gcHRyOworCWludCBpOworCisJcHJpbnRrKHN0cik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGkgJSAxNiA9PSAwKSB7CisJCQlwcmludGsoIlxuMHglMDh4OiIsICh1bnNpZ25lZCBpbnQpY3B0cik7CisJCX0KKwkJcHJpbnRrKCIgJTAyeCIsICooY3B0cisrKSk7CisJfQorCXByaW50aygiXG4iKTsKK30KKworI2VuZGlmCisKKy8qIENhbmNlbCBhIHJ1bm5pbmcgYWNxdWlzaXRpb24gKi8KKworc3RhdGljIGludCBkYXFwX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgcy0+cHJpdmF0ZTsKKworCWlmIChsb2NhbC0+c3RvcCkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlvdXRiKERBUVBfQ09NTUFORF9TVE9QLCBkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwkvKiBmbHVzaCBhbnkgbGluZ3VyaW5nIGRhdGEgaW4gRklGTyAtIHN1cGVyZmx1b3VzIGhlcmUgKi8KKwkvKiBvdXRiKERBUVBfQ09NTUFORF9SU1RGLCBkZXYtPmlvYmFzZStEQVFQX0NPTU1BTkQpOyAqLworCisJbG9jYWwtPmludGVycnVwdF9tb2RlID0gc2VtYXBob3JlOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEludGVycnVwdCBoYW5kbGVyCisgKgorICogT3BlcmF0ZXMgaW4gb25lIG9mIHR3byBtb2Rlcy4gIElmIGxvY2FsLT5pbnRlcnJ1cHRfbW9kZSBpcworICogJ3NlbWFwaG9yZScsIGp1c3Qgc2lnbmFsIHRoZSBsb2NhbC0+ZW9zIHNlbWFwaG9yZSBhbmQgcmV0dXJuCisgKiAob25lLXNob3QgbW9kZSkuICBPdGhlcndpc2UgKGNvbnRpbnVvdXMgbW9kZSksIHJlYWQgZGF0YSBpbiBmcm9tCisgKiB0aGUgY2FyZCwgdHJhbnNmZXIgaXQgdG8gdGhlIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgaGlnaGVyLWxldmVsCisgKiBjb21lZGkga2VybmVsIG1vZHVsZSwgYW5kIHNpZ25hbCB2YXJpb3VzIGNvbWVkaSBjYWxsYmFjayByb3V0aW5lcywKKyAqIHdoaWNoIHJ1biBwcmV0dHkgcXVpY2suCisgKi8KKworc3RhdGljIHZvaWQgZGFxcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgZGV2X2lkOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGxvb3BfbGltaXQgPSAxMDAwMDsKKwlpbnQgc3RhdHVzOworCisJaWYgKGxvY2FsID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImRhcXBfaW50ZXJydXB0KCk6IGlycSAlZCBmb3IgdW5rbm93biBkZXZpY2UuXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJZGV2ID0gbG9jYWwtPmRldjsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGFxcF9pbnRlcnJ1cHQoKTogTlVMTCBjb21lZGlfZGV2aWNlLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImRhcXBfaW50ZXJydXB0KCk6IHN0cnVjdCBjb21lZGlfZGV2aWNlIG5vdCB5ZXQgYXR0YWNoZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXMgPSBsb2NhbC0+czsKKwlpZiAocyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJkYXFwX2ludGVycnVwdCgpOiBOVUxMIGNvbWVkaV9zdWJkZXZpY2UuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBzLT5wcml2YXRlICE9IGxvY2FsKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJkYXFwX2ludGVycnVwdCgpOiBpbnZhbGlkIGNvbWVkaV9zdWJkZXZpY2UuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAobG9jYWwtPmludGVycnVwdF9tb2RlKSB7CisKKwljYXNlIHNlbWFwaG9yZToKKworCQl1cCgmbG9jYWwtPmVvcyk7CisJCWJyZWFrOworCisJY2FzZSBidWZmZXI6CisKKwkJd2hpbGUgKCEoKHN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUVBfU1RBVFVTKSkKKwkJCQkmIERBUVBfU1RBVFVTX0ZJRk9fRU1QVFkpKSB7CisKKwkJCXNob3J0IGRhdGE7CisKKwkJCWlmIChzdGF0dXMgJiBEQVFQX1NUQVRVU19EQVRBX0xPU1QpIHsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9CisJCQkJCUNPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfT1ZFUkZMT1c7CisJCQkJcHJpbnRrKCJkYXFwOiBkYXRhIGxvc3RcbiIpOworCQkJCWRhcXBfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWRhdGEgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX0ZJRk8pOworCQkJZGF0YSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX0ZJRk8pIDw8IDg7CisJCQlkYXRhIF49IDB4ODAwMDsKKworCQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGRhdGEpOworCisJCQkvKiBJZiB0aGVyZSdzIGEgbGltaXQsIGRlY3JlbWVudCBpdAorCQkJICogYW5kIHN0b3AgY29udmVyc2lvbiBpZiB6ZXJvCisJCQkgKi8KKworCQkJaWYgKGxvY2FsLT5jb3VudCA+IDApIHsKKwkJCQlsb2NhbC0+Y291bnQtLTsKKwkJCQlpZiAobG9jYWwtPmNvdW50ID09IDApIHsKKwkJCQkJZGFxcF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmICgobG9vcF9saW1pdC0tKSA8PSAwKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxvb3BfbGltaXQgPD0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJsb29wX2xpbWl0IHJlYWNoZWQgaW4gZGFxcF9pbnRlcnJ1cHQoKVxuIik7CisJCQlkYXFwX2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQl9CisKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorfQorCisvKiBPbmUtc2hvdCBhbmFsb2cgZGF0YSBhY3F1aXNpdGlvbiByb3V0aW5lICovCisKK3N0YXRpYyBpbnQgZGFxcF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKwlpbnQgdjsKKwlpbnQgY291bnRlciA9IDEwMDAwOworCisJaWYgKGxvY2FsLT5zdG9wKSB7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFN0b3AgYW55IHJ1bm5pbmcgY29udmVyc2lvbiAqLworCWRhcXBfYWlfY2FuY2VsKGRldiwgcyk7CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFRUF9BVVgpOworCisJLyogUmVzZXQgc2NhbiBsaXN0IHF1ZXVlICovCisJb3V0YihEQVFQX0NPTU1BTkRfUlNUUSwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTU1BTkQpOworCisJLyogUHJvZ3JhbSBvbmUgc2NhbiBsaXN0IGVudHJ5ICovCisKKwl2ID0gREFRUF9TQ0FOTElTVF9DSEFOTkVMKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKQorCQl8IERBUVBfU0NBTkxJU1RfR0FJTihDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykpOworCisJaWYgKENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpID09IEFSRUZfRElGRikgeworCQl2IHw9IERBUVBfU0NBTkxJU1RfRElGRkVSRU5USUFMOworCX0KKworCXYgfD0gREFRUF9TQ0FOTElTVF9TVEFSVDsKKworCW91dGIodiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgREFRUF9TQ0FOTElTVCk7CisJb3V0Yih2ID4+IDgsIGRldi0+aW9iYXNlICsgREFRUF9TQ0FOTElTVCk7CisKKwkvKiBSZXNldCBkYXRhIEZJRk8gKHNlZSBwYWdlIDI4IG9mIERBUVAgVXNlcidzIE1hbnVhbCkgKi8KKworCW91dGIoREFRUF9DT01NQU5EX1JTVEYsIGRldi0+aW9iYXNlICsgREFRUF9DT01NQU5EKTsKKworCS8qIFNldCB0cmlnZ2VyICovCisKKwl2ID0gREFRUF9DT05UUk9MX1RSSUdHRVJfT05FU0hPVCB8IERBUVBfQ09OVFJPTF9UUklHR0VSX0lOVEVSTkFMCisJCXwgREFRUF9DT05UUk9MX1BBQ0VSXzEwMGtIeiB8IERBUVBfQ09OVFJPTF9FT1NfSU5UX0VOQUJMRTsKKworCW91dGIodiwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTlRST0wpOworCisJLyogUmVzZXQgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAobXkgY2FyZCBoYXMgYSB0ZW5kYW5jeSB0byByZXF1aXJlCisJICogcmVxdWlyZSBtdWx0aXBsZSByZWFkcyBvbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvIGFjaGlldmUgdGhpcykKKwkgKi8KKworCXdoaWxlICgtLWNvdW50ZXIKKwkJJiYgKGluYihkZXYtPmlvYmFzZSArIERBUVBfU1RBVFVTKSAmIERBUVBfU1RBVFVTX0VWRU5UUykpIDsKKwlpZiAoIWNvdW50ZXIpIHsKKwkJcHJpbnRrKCJkYXFwOiBjb3VsZG4ndCBjbGVhciBpbnRlcnJ1cHRzIGluIHN0YXR1cyByZWdpc3RlclxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgc2VtYXBob3JlIGlzIGJsb2NrZWQgKi8KKwlzZW1hX2luaXQoJmxvY2FsLT5lb3MsIDApOworCWxvY2FsLT5pbnRlcnJ1cHRfbW9kZSA9IHNlbWFwaG9yZTsKKwlsb2NhbC0+ZGV2ID0gZGV2OworCWxvY2FsLT5zID0gczsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKworCQkvKiBTdGFydCBjb252ZXJzaW9uICovCisJCW91dGIoREFRUF9DT01NQU5EX0FSTSB8IERBUVBfQ09NTUFORF9GSUZPX0RBVEEsCisJCQlkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwkJLyogV2FpdCBmb3IgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byB1bmJsb2NrIHNlbWFwaG9yZSAqLworCQkvKiBNYXliZSBjb3VsZCB1c2UgYSB0aW1lb3V0IGhlcmUsIGJ1dCBpdCdzIGludGVycnVwdGlibGUgKi8KKwkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmbG9jYWwtPmVvcykpCisJCQlyZXR1cm4gLUVJTlRSOworCisJCWRhdGFbaV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX0ZJRk8pOworCQlkYXRhW2ldIHw9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRklGTykgPDwgODsKKwkJZGF0YVtpXSBePSAweDgwMDA7CisJfQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY29udmVydHMgbnMgbmFub3NlY29uZHMgdG8gYSBjb3VudGVyIHZhbHVlIHN1aXRhYmxlCisgKiBmb3IgcHJvZ3JhbW1pbmcgdGhlIGRldmljZS4gIFdlIGFsd2F5cyB1c2UgdGhlIERBUVAncyA1IE1IeiBjbG9jaywKKyAqIHdoaWNoIHdpdGggaXRzIDI0LWJpdCBjb3VudGVyLCBhbGxvd3MgdmFsdWVzIHVwIHRvIDg0IHNlY29uZHMuCisgKiBBbHNvLCB0aGUgZnVuY3Rpb24gYWRqdXN0cyBucyBzbyB0aGF0IGl0IGNvb3Jlc3BvbmRzIHRvIHRoZSBhY3R1YWwKKyAqIHRpbWUgdGhhdCB0aGUgZGV2aWNlIHdpbGwgdXNlLgorICovCisKK3N0YXRpYyBpbnQgZGFxcF9uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCBpbnQgcm91bmQpCit7CisJaW50IHRpbWVyOworCisJdGltZXIgPSAqbnMgLyAyMDA7CisJKm5zID0gdGltZXIgKiAyMDA7CisKKwlyZXR1cm4gdGltZXI7Cit9CisKKy8qIGNtZHRlc3QgdGVzdHMgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLgorICogVXNpbmcgdGhlIGNtZHRlc3QgaW9jdGwsIGEgdXNlciBjYW4gY3JlYXRlIGEgdmFsaWQgY21kCisgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVkIGJ5IHRoZSBjbWQgaW9jdGwuCisgKgorICogY21kdGVzdCByZXR1cm5zIDEsMiwzLDQgb3IgMCwgZGVwZW5kaW5nIG9uIHdoaWNoIHRlc3RzCisgKiB0aGUgY29tbWFuZCBwYXNzZXMuCisgKi8KKworc3RhdGljIGludCBkYXFwX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XICYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKyNkZWZpbmUgTUFYX1NQRUVECTEwMDAwCS8qIDEwMCBrSHogLSBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUgorCQkmJiBjbWQtPnNjYW5fYmVnaW5fYXJnIDwgTUFYX1NQRUVEKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBNQVhfU1BFRUQ7CisJCWVycisrOworCX0KKworCS8qIElmIGJvdGggc2Nhbl9iZWdpbiBhbmQgY29udmVydCBhcmUgYm90aCB0aW1lciB2YWx1ZXMsIHRoZSBvbmx5CisJICogd2F5IHRoYXQgY2FuIG1ha2Ugc2Vuc2UgaXMgaWYgdGhlIHNjYW4gdGltZSBpcyB0aGUgbnVtYmVyIG9mCisJICogY29udmVyc2lvbnMgdGltZXMgdGhlIGNvbnZlcnQgdGltZQorCSAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIKKwkJJiYgY21kLT5zY2FuX2JlZ2luX2FyZyAhPQorCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfYXJnIDwgTUFYX1NQRUVEKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSBNQVhfU1BFRUQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoY21kLT5zdG9wX2FyZyA+IDB4MDBmZmZmZmYpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAweDAwZmZmZmZmOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlkYXFwX25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJZGFxcF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhcXBfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBzLT5wcml2YXRlOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgY291bnRlciA9IDEwMDsKKwlpbnQgc2Nhbmxpc3Rfc3RhcnRfb25fZXZlcnlfZW50cnk7CisJaW50IHRocmVzaG9sZDsKKworCWludCBpOworCWludCB2OworCisJaWYgKGxvY2FsLT5zdG9wKSB7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFN0b3AgYW55IHJ1bm5pbmcgY29udmVyc2lvbiAqLworCWRhcXBfYWlfY2FuY2VsKGRldiwgcyk7CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFRUF9BVVgpOworCisJLyogUmVzZXQgc2NhbiBsaXN0IHF1ZXVlICovCisJb3V0YihEQVFQX0NPTU1BTkRfUlNUUSwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTU1BTkQpOworCisJLyogUHJvZ3JhbSBwYWNlciBjbG9jaworCSAqCisJICogVGhlcmUncyB0d28gbW9kZXMgd2UgY2FuIG9wZXJhdGUgaW4uICBJZiBjb252ZXJ0X3NyYyBpcworCSAqIFRSSUdfVElNRVIsIHRoZW4gY29udmVydF9hcmcgc3BlY2lmaWVzIHRoZSB0aW1lIGJldHdlZW4KKwkgKiBlYWNoIGNvbnZlcnNpb24sIHNvIHdlIHByb2dyYW0gdGhlIHBhY2VyIGNsb2NrIHRvIHRoYXQKKwkgKiBmcmVxdWVuY3kgYW5kIHNldCB0aGUgU0NBTkxJU1RfU1RBUlQgYml0IG9uIGV2ZXJ5IHNjYW5saXN0CisJICogZW50cnkuICBPdGhlcndpc2UsIGNvbnZlcnRfc3JjIGlzIFRSSUdfTk9XLCB3aGljaCBtZWFucworCSAqIHdlIHdhbnQgdGhlIGZhc3Rlc3QgcG9zc2libGUgY29udmVyc2lvbnMsIHNjYW5fYmVnaW5fc3JjCisJICogaXMgVFJJR19USU1FUiwgYW5kIHNjYW5fYmVnaW5fYXJnIHNwZWNpZmllcyB0aGUgdGltZSBiZXR3ZWVuCisJICogZWFjaCBzY2FuLCBzbyB3ZSBwcm9ncmFtIHRoZSBwYWNlciBjbG9jayB0byB0aGlzIGZyZXF1ZW5jeQorCSAqIGFuZCBvbmx5IHNldCB0aGUgU0NBTkxJU1RfU1RBUlQgYml0IG9uIHRoZSBmaXJzdCBlbnRyeS4KKwkgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaW50IGNvdW50ZXIgPSBkYXFwX25zX3RvX3RpbWVyKCZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCW91dGIoY291bnRlciAmIDB4ZmYsIGRldi0+aW9iYXNlICsgREFRUF9QQUNFUl9MT1cpOworCQlvdXRiKChjb3VudGVyID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1BBQ0VSX01JRCk7CisJCW91dGIoKGNvdW50ZXIgPj4gMTYpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1BBQ0VSX0hJR0gpOworCQlzY2FubGlzdF9zdGFydF9vbl9ldmVyeV9lbnRyeSA9IDE7CisJfSBlbHNlIHsKKwkJaW50IGNvdW50ZXIgPSBkYXFwX25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCW91dGIoY291bnRlciAmIDB4ZmYsIGRldi0+aW9iYXNlICsgREFRUF9QQUNFUl9MT1cpOworCQlvdXRiKChjb3VudGVyID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1BBQ0VSX01JRCk7CisJCW91dGIoKGNvdW50ZXIgPj4gMTYpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1BBQ0VSX0hJR0gpOworCQlzY2FubGlzdF9zdGFydF9vbl9ldmVyeV9lbnRyeSA9IDA7CisJfQorCisJLyogUHJvZ3JhbSBzY2FuIGxpc3QgKi8KKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisKKwkJaW50IGNoYW5zcGVjID0gY21kLT5jaGFubGlzdFtpXTsKKworCQkvKiBQcm9ncmFtIG9uZSBzY2FuIGxpc3QgZW50cnkgKi8KKworCQl2ID0gREFRUF9TQ0FOTElTVF9DSEFOTkVMKENSX0NIQU4oY2hhbnNwZWMpKQorCQkJfCBEQVFQX1NDQU5MSVNUX0dBSU4oQ1JfUkFOR0UoY2hhbnNwZWMpKTsKKworCQlpZiAoQ1JfQVJFRihjaGFuc3BlYykgPT0gQVJFRl9ESUZGKSB7CisJCQl2IHw9IERBUVBfU0NBTkxJU1RfRElGRkVSRU5USUFMOworCQl9CisKKwkJaWYgKGkgPT0gMCB8fCBzY2FubGlzdF9zdGFydF9vbl9ldmVyeV9lbnRyeSkgeworCQkJdiB8PSBEQVFQX1NDQU5MSVNUX1NUQVJUOworCQl9CisKKwkJb3V0Yih2ICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1NDQU5MSVNUKTsKKwkJb3V0Yih2ID4+IDgsIGRldi0+aW9iYXNlICsgREFRUF9TQ0FOTElTVCk7CisJfQorCisJLyogTm93IGl0J3MgdGltZSB0byBwcm9ncmFtIHRoZSBGSUZPIHRocmVzaG9sZCwgYmFzaWNhbGx5IHRoZQorCSAqIG51bWJlciBvZiBzYW1wbGVzIHRoZSBjYXJkIHdpbGwgYnVmZmVyIGJlZm9yZSBpdCBpbnRlcnJ1cHRzCisJICogdGhlIENQVS4KKwkgKgorCSAqIElmIHdlIGRvbid0IGhhdmUgYSBzdG9wIGNvdW50LCB0aGVuIHVzZSBoYWxmIHRoZSBzaXplIG9mCisJICogdGhlIEZJRk8gKHRoZSBtYW51ZmFjdHVyZXIncyByZWNvbW1lbmRhdGlvbikuICBDb25zaWRlcgorCSAqIHRoYXQgdGhlIEZJRk8gY2FuIGhvbGQgMksgc2FtcGxlcyAoNEsgYnl0ZXMpLiAgV2l0aCB0aGUKKwkgKiB0aHJlc2hvbGQgc2V0IGF0IGhhbGYgdGhlIEZJRk8gc2l6ZSwgd2UgaGF2ZSBhIG1hcmdpbiBvZgorCSAqIGVycm9yIG9mIDEwMjQgc2FtcGxlcy4gIEF0IHRoZSBjaGlwJ3MgbWF4aW11bSBzYW1wbGUgcmF0ZQorCSAqIG9mIDEwMCwwMDAgSHosIHRoZSBDUFUgd291bGQgaGF2ZSB0byBkZWxheSBpbnRlcnJ1cHQKKwkgKiBzZXJ2aWNlIGZvciBhIGZ1bGwgMTAgbWlsbGlzZWNvbmRzIGluIG9yZGVyIHRvIGxvc2UgZGF0YQorCSAqIGhlcmUgKGFzIG9wcG9zZWQgdG8gaGlnaGVyIHVwIGluIHRoZSBrZXJuZWwpLiAgSSd2ZSBuZXZlcgorCSAqIHNlZW4gaXQgaGFwcGVuLiAgSG93ZXZlciwgZm9yIHNsb3cgc2FtcGxlIHJhdGVzIGl0IG1heQorCSAqIGJ1ZmZlciB0b28gbXVjaCBkYXRhIGFuZCBpbnRyb2R1Y2UgdG9vIG11Y2ggZGVsYXkgZm9yIHRoZQorCSAqIHVzZXIgYXBwbGljYXRpb24uCisJICoKKwkgKiBJZiB3ZSBoYXZlIGEgc3RvcCBjb3VudCwgdGhlbiB0aGluZ3MgZ2V0IG1vcmUgaW50ZXJlc3RpbmcuCisJICogSWYgdGhlIHN0b3AgY291bnQgaXMgbGVzcyB0aGFuIHRoZSBGSUZPIHNpemUgKGFjdHVhbGx5CisJICogdGhyZWUtcXVhcnRlcnMgb2YgdGhlIEZJRk8gc2l6ZSAtIHNlZSBiZWxvdyksIHdlIGp1c3QgdXNlCisJICogdGhlIHN0b3AgY291bnQgaXRzZWxmIGFzIHRoZSB0aHJlc2hvbGQsIHRoZSBjYXJkIGludGVycnVwdHMKKwkgKiB1cyB3aGVuIHRoYXQgbWFueSBzYW1wbGVzIGhhdmUgYmVlbiB0YWtlbiwgYW5kIHdlIGtpbGwgdGhlCisJICogYWNxdWlzaXRpb24gYXQgdGhhdCBwb2ludCBhbmQgYXJlIGRvbmUuICBJZiB0aGUgc3RvcCBjb3VudAorCSAqIGlzIGxhcmdlciB0aGFuIHRoYXQsIHRoZW4gd2UgZGl2aWRlIGl0IGJ5IDIgdW50aWwgaXQncyBsZXNzCisJICogdGhhbiB0aHJlZSBxdWFydGVycyBvZiB0aGUgRklGTyBzaXplICh3ZSBhbHdheXMgbGVhdmUgdGhlCisJICogdG9wIHF1YXJ0ZXIgb2YgdGhlIEZJRk8gYXMgcHJvdGVjdGlvbiBhZ2FpbnN0IHNsdWdnaXNoIENQVQorCSAqIGludGVycnVwdCByZXNwb25zZSkgYW5kIHVzZSB0aGF0IGFzIHRoZSB0aHJlc2hvbGQuICBTbywgaWYKKwkgKiB0aGUgc3RvcCBjb3VudCBpcyA0MDAwIHNhbXBsZXMsIHdlIGRpdmlkZSBieSB0d28gdHdpY2UgdG8KKwkgKiBnZXQgMTAwMCBzYW1wbGVzLCB1c2UgdGhhdCBhcyB0aGUgdGhyZXNob2xkLCB0YWtlIGZvdXIKKwkgKiBpbnRlcnJ1cHRzIHRvIGdldCBvdXIgNDAwMCBzYW1wbGVzIGFuZCBhcmUgZG9uZS4KKwkgKgorCSAqIFRoZSBhbGdvcml0aG0gY291bGQgYmUgbW9yZSBjbGV2ZXIuICBGb3IgZXhhbXBsZSwgaWYgODEwMDAKKwkgKiBzYW1wbGVzIGFyZSByZXF1ZXN0ZWQsIHdlIGNvdWxkIHNldCB0aGUgdGhyZXNob2xkIHRvIDE1MDAKKwkgKiBzYW1wbGVzIGFuZCB0YWtlIDU0IGludGVycnVwdHMgdG8gZ2V0IDgxMDAwLiAgQnV0IDU0IGlzbid0CisJICogYSBwb3dlciBvZiB0d28sIHNvIHRoaXMgYWxnb3JpdGhtIHdvbid0IGZpbmQgdGhhdCBvcHRpb24uCisJICogSW5zdGVhZCwgaXQnbGwgc2V0IHRoZSB0aHJlc2hvbGQgYXQgMTI2NiBhbmQgdGFrZSA2NAorCSAqIGludGVycnVwdHMgdG8gZ2V0IDgxMDI0IHNhbXBsZXMsIG9mIHdoaWNoIHRoZSBsYXN0IDI0IHdpbGwKKwkgKiBiZSBkaXNjYXJkZWQuLi4gYnV0IHdlIHdvbid0IGdldCB0aGUgbGFzdCBpbnRlcnJ1cHQgdW50aWwKKwkgKiB0aGV5J3ZlIGJlZW4gY29sbGVjdGVkLiAgVG8gZmluZCB0aGUgZmlyc3Qgb3B0aW9uLCB0aGUKKwkgKiBjb21wdXRlciBjb3VsZCBsb29rIGF0IHRoZSBwcmltZSBkZWNvbXBvc2l0aW9uIG9mIHRoZQorCSAqIHNhbXBsZSBjb3VudCAoODEwMDAgPSAzXjQgKiA1XjMgKiAyXjMpIGFuZCBmYWN0b3IgaXQgaW50byBhCisJICogdGhyZXNob2xkICgxNTAwID0gMyAqIDVeMyAqIDJeMikgYW5kIGFuIGludGVycnVwdCBjb3VudCAoNTQKKwkgKiA9IDNeMyAqIDIpLiAgSG1tbS4uLiBhIG9uZS1saW5lIHdoaWxlIGxvb3Agb3IgcHJpbWUKKwkgKiBkZWNvbXBvc2l0aW9uIG9mIGludGVnZXJzLi4uIEknbGwgbGVhdmUgaXQgdGhlIHdheSBpdCBpcy4KKwkgKgorCSAqIEknbGwgYWxzbyBub3RlIGEgbWluaS1yYWNlIGNvbmRpdGlvbiBiZWZvcmUgaWdub3JpbmcgaXQgaW4KKwkgKiB0aGUgY29kZS4gIExldCdzIHNheSB3ZSdyZSB0YWtpbmcgNDAwMCBzYW1wbGVzLCBhcyBiZWZvcmUuCisJICogQWZ0ZXIgMTAwMCBzYW1wbGVzLCB3ZSBnZXQgYW4gaW50ZXJydXB0LiAgQnV0IGJlZm9yZSB0aGF0CisJICogaW50ZXJydXB0IGlzIGNvbXBsZXRlbHkgc2VydmljZWQsIGFub3RoZXIgc2FtcGxlIGlzIHRha2VuCisJICogYW5kIGxvYWRlZCBpbnRvIHRoZSBGSUZPLiAgU2luY2UgdGhlIGludGVycnVwdCBoYW5kbGVyCisJICogZW1wdGllcyB0aGUgRklGTyBiZWZvcmUgcmV0dXJuaW5nLCBpdCB3aWxsIHJlYWQgMTAwMSBzYW1wbGVzLgorCSAqIElmIHRoYXQgaGFwcGVucyBmb3VyIHRpbWVzLCB3ZSdsbCBlbmQgdXAgdGFraW5nIDQwMDQgc2FtcGxlcywKKwkgKiBub3QgNDAwMC4gIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGRpc2NhcmQgdGhlIGV4dHJhIGZvdXIKKwkgKiBzYW1wbGVzIChieSBoYWx0aW5nIHRoZSBhY3F1aXNpdGlvbiB3aXRoIGZvdXIgc2FtcGxlcyBzdGlsbAorCSAqIGluIHRoZSBGSUZPKSwgYnV0IHdlIHdpbGwgaGF2ZSB0byB3YWl0IGZvciB0aGVtLgorCSAqCisJICogSW4gc2hvcnQsIHRoaXMgY29kZSB3b3JrcyBwcmV0dHkgd2VsbCwgYnV0IGZvciBlaXRoZXIgb2YKKwkgKiB0aGUgdHdvIHJlYXNvbnMgbm90ZWQsIG1pZ2h0IGVuZCB1cCB3YWl0aW5nIGZvciBhIGZldyBtb3JlCisJICogc2FtcGxlcyB0aGFuIGFjdHVhbGx5IHJlcXVlc3RlZC4gIFNob3VsZG4ndCBtYWtlIHRvbyBtdWNoCisJICogb2YgYSBkaWZmZXJlbmNlLgorCSAqLworCisJLyogU2F2ZSBhd2F5IHRoZSBudW1iZXIgb2YgY29udmVyc2lvbnMgd2Ugc2hvdWxkIHBlcmZvcm0sIGFuZAorCSAqIGNvbXB1dGUgdGhlIEZJRk8gdGhyZXNob2xkIChpbiBieXRlcywgbm90IHNhbXBsZXMgLSB0aGF0J3MKKwkgKiB3aHkgd2UgbXVsdGlwbGUgbG9jYWwtPmNvdW50IGJ5IDIgPSBzaXplb2Yoc2FtcGxlKSkKKwkgKi8KKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJbG9jYWwtPmNvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQl0aHJlc2hvbGQgPSAyICogbG9jYWwtPmNvdW50OworCQl3aGlsZSAodGhyZXNob2xkID4gREFRUF9GSUZPX1NJWkUgKiAzIC8gNCkKKwkJCXRocmVzaG9sZCAvPSAyOworCX0gZWxzZSB7CisJCWxvY2FsLT5jb3VudCA9IC0xOworCQl0aHJlc2hvbGQgPSBEQVFQX0ZJRk9fU0laRSAvIDI7CisJfQorCisJLyogUmVzZXQgZGF0YSBGSUZPIChzZWUgcGFnZSAyOCBvZiBEQVFQIFVzZXIncyBNYW51YWwpICovCisKKwlvdXRiKERBUVBfQ09NTUFORF9SU1RGLCBkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwkvKiBTZXQgRklGTyB0aHJlc2hvbGQuICBGaXJzdCB0d28gYnl0ZXMgYXJlIG5lYXItZW1wdHkKKwkgKiB0aHJlc2hvbGQsIHdoaWNoIGlzIHVudXNlZDsgbmV4dCB0d28gYnl0ZXMgYXJlIG5lYXItZnVsbAorCSAqIHRocmVzaG9sZC4gIFdlIGNvbXB1dGVkIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2Ugd2FudCBpbiB0aGUKKwkgKiBGSUZPIHdoZW4gdGhlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQsIHdoYXQgdGhlIGNhcmQgd2FudHMKKwkgKiBpcyBhY3R1YWxseSB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBieXRlcyBsZWZ0IGluIHRoZSBGSUZPCisJICogd2hlbiB0aGUgaW50ZXJydXB0IGlzIHRvIGhhcHBlbi4KKwkgKi8KKworCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0ZJRk8pOworCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0ZJRk8pOworCisJb3V0YigoREFRUF9GSUZPX1NJWkUgLSB0aHJlc2hvbGQpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX0ZJRk8pOworCW91dGIoKERBUVBfRklGT19TSVpFIC0gdGhyZXNob2xkKSA+PiA4LCBkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisKKwkvKiBTZXQgdHJpZ2dlciAqLworCisJdiA9IERBUVBfQ09OVFJPTF9UUklHR0VSX0NPTlRJTlVPVVMgfCBEQVFQX0NPTlRST0xfVFJJR0dFUl9JTlRFUk5BTAorCQl8IERBUVBfQ09OVFJPTF9QQUNFUl81TUh6IHwgREFRUF9DT05UUk9MX0ZJRk9fSU5UX0VOQUJMRTsKKworCW91dGIodiwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTlRST0wpOworCisJLyogUmVzZXQgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAobXkgY2FyZCBoYXMgYSB0ZW5kYW5jeSB0byByZXF1aXJlCisJICogcmVxdWlyZSBtdWx0aXBsZSByZWFkcyBvbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvIGFjaGlldmUgdGhpcykKKwkgKi8KKworCXdoaWxlICgtLWNvdW50ZXIKKwkJJiYgKGluYihkZXYtPmlvYmFzZSArIERBUVBfU1RBVFVTKSAmIERBUVBfU1RBVFVTX0VWRU5UUykpIDsKKwlpZiAoIWNvdW50ZXIpIHsKKwkJcHJpbnRrKCJkYXFwOiBjb3VsZG4ndCBjbGVhciBpbnRlcnJ1cHRzIGluIHN0YXR1cyByZWdpc3RlclxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlsb2NhbC0+aW50ZXJydXB0X21vZGUgPSBidWZmZXI7CisJbG9jYWwtPmRldiA9IGRldjsKKwlsb2NhbC0+cyA9IHM7CisKKwkvKiBTdGFydCBjb252ZXJzaW9uICovCisJb3V0YihEQVFQX0NPTU1BTkRfQVJNIHwgREFRUF9DT01NQU5EX0ZJRk9fREFUQSwKKwkJZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTU1BTkQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNpbmdsZS1zaG90IGFuYWxvZyBvdXRwdXQgcm91dGluZSAqLworCitzdGF0aWMgaW50IGRhcXBfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBzLT5wcml2YXRlOworCWludCBkOworCXVuc2lnbmVkIGludCBjaGFuOworCisJaWYgKGxvY2FsLT5zdG9wKSB7CisJCXJldHVybiAtRUlPOworCX0KKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlkID0gZGF0YVswXTsKKwlkICY9IDB4MGZmZjsKKwlkIF49IDB4MDgwMDsJCS8qIEZsaXAgdGhlIHNpZ24gKi8KKwlkIHw9IGNoYW4gPDwgMTI7CisKKwkvKiBNYWtlIHN1cmUgRC9BIHVwZGF0ZSBtb2RlIGlzIGRpcmVjdCB1cGRhdGUgKi8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFRUF9BVVgpOworCisJb3V0dyhkLCBkZXYtPmlvYmFzZSArIERBUVBfREEpOworCisJcmV0dXJuIDE7Cit9CisKKy8qIERpZ2l0YWwgaW5wdXQgcm91dGluZSAqLworCitzdGF0aWMgaW50IGRhcXBfZGlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGU7CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGF0YVswXSA9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRElHSVRBTF9JTyk7CisKKwlyZXR1cm4gMTsKK30KKworLyogRGlnaXRhbCBvdXRwdXQgcm91dGluZSAqLworCitzdGF0aWMgaW50IGRhcXBfZG9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBzLT5wcml2YXRlOworCisJaWYgKGxvY2FsLT5zdG9wKSB7CisJCXJldHVybiAtRUlPOworCX0KKworCW91dHcoZGF0YVswXSAmIDB4ZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX0RJR0lUQUxfSU8pOworCisJcmV0dXJuIDE7Cit9CisKKy8qIGRhcXBfYXR0YWNoIGlzIGNhbGxlZCB2aWEgY29tZWRpX2NvbmZpZyB0byBhdHRhY2ggYSBjb21lZGkgZGV2aWNlCisgKiB0byBhIC9kZXYvY29tZWRpKi4gIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIGRhcXBfY3NfYXR0YWNoKCkKKyAqIHdoaWNoIGlzIGNhbGxlZCBieSB0aGUgcGNtY2lhIHN1YnN5c3RlbSB0byBhdHRhY2ggdGhlIFBDTUNJQSBjYXJkCisgKiB3aGVuIGl0IGlzIGluc2VydGVkLgorICovCisKK3N0YXRpYyBpbnQgZGFxcF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IGRldl90YWJsZVtpdC0+b3B0aW9uc1swXV07CisJdHVwbGVfdCB0dXBsZTsKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWlmIChpdC0+b3B0aW9uc1swXSA8IDAgfHwgaXQtPm9wdGlvbnNbMF0gPj0gTUFYX0RFViB8fCAhbG9jYWwpIHsKKwkJcHJpbnRrKCJjb21lZGklZDogTm8gc3VjaCBkYXFwIGRldmljZSAlZFxuIiwKKwkJCWRldi0+bWlub3IsIGl0LT5vcHRpb25zWzBdKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogVHlwaWNhbGx5IGJyaXR0bGUgY29kZSB0aGF0IEkgZG9uJ3QgY29tcGxldGVseSB1bmRlcnN0YW5kLAorCSAqIGJ1dCAiaXQgd29ya3Mgb24gbXkgY2FyZCIuICBUaGUgaW50ZW50IGlzIHRvIHB1bGwgdGhlIG1vZGVsCisJICogbnVtYmVyIG9mIHRoZSBjYXJkIG91dCB0aGUgUENNQ0lBIENJUyBhbmQgc3Rhc2ggaXQgYXdheSBhcworCSAqIHRoZSBDT01FREkgYm9hcmRfbmFtZS4gIExvb2tzIGxpa2UgdGhlIHRoaXJkIGZpZWxkIGluCisJICogQ0lTVFBMX1ZFUlNfMSAob2Zmc2V0IDIpIGhvbGRzIHdoYXQgd2UncmUgbG9va2luZyBmb3IuICBJZgorCSAqIGl0IGRvZXNuJ3Qgd29yaywgd2hvIGNhcmVzLCBqdXN0IGxlYXZlIGl0IGFzICJEQVFQIi4KKwkgKi8KKworCXN0cmNweShsb2NhbC0+Ym9hcmRfbmFtZSwgIkRBUVAiKTsKKwlkZXYtPmJvYXJkX25hbWUgPSBsb2NhbC0+Ym9hcmRfbmFtZTsKKworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7CisJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobG9jYWwtPmxpbmssICZ0dXBsZSkgPT0gMCkgeworCQl1X2NoYXIgYnVmWzEyOF07CisKKwkJYnVmWzBdID0gYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOworCQl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCQl0dXBsZS5UdXBsZU9mZnNldCA9IDI7CisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobG9jYWwtPmxpbmssICZ0dXBsZSkgPT0gMCkgeworCisJCQlmb3IgKGkgPSAwOyBpIDwgdHVwbGUuVHVwbGVEYXRhTGVuIC0gNDsgaSsrKQorCQkJCWlmIChidWZbaV0gPT0gMCkKKwkJCQkJYnJlYWs7CisJCQlmb3IgKGkrKzsgaSA8IHR1cGxlLlR1cGxlRGF0YUxlbiAtIDQ7IGkrKykKKwkJCQlpZiAoYnVmW2ldID09IDApCisJCQkJCWJyZWFrOworCQkJaSsrOworCQkJaWYgKChpIDwgdHVwbGUuVHVwbGVEYXRhTGVuIC0gNCkKKwkJCQkmJiAoc3RybmNtcChidWYgKyBpLCAiREFRUCIsIDQpID09IDApKSB7CisJCQkJc3RybmNweShsb2NhbC0+Ym9hcmRfbmFtZSwgYnVmICsgaSwKKwkJCQkJc2l6ZW9mKGxvY2FsLT5ib2FyZF9uYW1lKSk7CisJCQl9CisJCX0KKwl9CisKKwlkZXYtPmlvYmFzZSA9IGxvY2FsLT5saW5rLT5pby5CYXNlUG9ydDE7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcHJpbnRrKCJjb21lZGklZDogYXR0YWNoaW5nIGRhcXAlZCAoaW8gMHglMDRseClcbiIsCisJCWRldi0+bWlub3IsIGl0LT5vcHRpb25zWzBdLCBkZXYtPmlvYmFzZSk7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT5wcml2YXRlID0gbG9jYWw7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRiB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmxlbl9jaGFubGlzdCA9IDIwNDg7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kYXFwX2FpOworCXMtPmluc25fcmVhZCA9IGRhcXBfYWlfaW5zbl9yZWFkOworCXMtPmRvX2NtZHRlc3QgPSBkYXFwX2FpX2NtZHRlc3Q7CisJcy0+ZG9fY21kID0gZGFxcF9haV9jbWQ7CisJcy0+Y2FuY2VsID0gZGFxcF9haV9jYW5jZWw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJcy0+cHJpdmF0ZSA9IGxvY2FsOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFOworCXMtPm5fY2hhbiA9IDI7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5tYXhkYXRhID0gMHgwZmZmOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RhcXBfYW87CisJcy0+aW5zbl93cml0ZSA9IGRhcXBfYW9faW5zbl93cml0ZTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXMtPnByaXZhdGUgPSBsb2NhbDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5pbnNuX3JlYWQgPSBkYXFwX2RpX2luc25fcmVhZDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXMtPnByaXZhdGUgPSBsb2NhbDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRTsKKwlzLT5uX2NoYW4gPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+aW5zbl93cml0ZSA9IGRhcXBfZG9faW5zbl93cml0ZTsKKworCXJldHVybiAxOworfQorCisvKiBkYXFwX2RldGFjaCAoY2FsbGVkIGZyb20gY29tZWRpX2NvbWRpZykgZG9lcyBub3RoaW5nLiBJZiB0aGUgUENNQ0lBCisgKiBjYXJkIGlzIHJlbW92ZWQsIGRhcXBfY3NfZGV0YWNoKCkgaXMgY2FsbGVkIGJ5IHRoZSBwY21jaWEgc3Vic3lzdGVtLgorICovCisKK3N0YXRpYyBpbnQgZGFxcF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZGV0YWNoaW5nIGRhcXBcbiIsIGRldi0+bWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFBDTUNJQSBpbnRlcmZhY2UgY29kZQorCisgICAgVGhlIHJlc3Qgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGlzIGJhc2VkIG9uIGR1bW15X2NzLmMgdjEuMjQKKyAgICBmcm9tIHRoZSBMaW51eCBwY21jaWFfY3MgZGlzdHJpYnV0aW9uIHYzLjEuOCBhbmQgaXMgc3ViamVjdAorICAgIHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnQuCisKKyAgICBUaGUgcmVtYWluaW5nIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyAgICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorICAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworCisgICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisgICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworICAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyAgICBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAgICA8ZGhpbmRzQHBjbWNpYS5zb3VyY2Vmb3JnZS5vcmc+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyAgICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyAgICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyAgICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisgICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisgICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAgICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyAgICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworICAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgICBUaGUgZXZlbnQoKSBmdW5jdGlvbiBpcyB0aGlzIGRyaXZlcidzIENhcmQgU2VydmljZXMgZXZlbnQgaGFuZGxlci4KKyAgIEl0IHdpbGwgYmUgY2FsbGVkIGJ5IENhcmQgU2VydmljZXMgd2hlbiBhbiBhcHByb3ByaWF0ZSBjYXJkIHN0YXR1cworICAgZXZlbnQgaXMgcmVjZWl2ZWQuICBUaGUgY29uZmlnKCkgYW5kIHJlbGVhc2UoKSBlbnRyeSBwb2ludHMgYXJlCisgICB1c2VkIHRvIGNvbmZpZ3VyZSBvciByZWxlYXNlIGEgc29ja2V0LCBpbiByZXNwb25zZSB0byBjYXJkCisgICBpbnNlcnRpb24gYW5kIGVqZWN0aW9uIGV2ZW50cy4KKworICAgS2VybmVsIHZlcnNpb24gMi42LjE2IHVwd2FyZHMgdXNlcyBzdXNwZW5kKCkgYW5kIHJlc3VtZSgpIGZ1bmN0aW9ucworICAgaW5zdGVhZCBvZiBhbiBldmVudCgpIGZ1bmN0aW9uLgorKi8KKworc3RhdGljIHZvaWQgZGFxcF9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgZGFxcF9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgZGFxcF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CitzdGF0aWMgaW50IGRhcXBfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CisKKy8qCisgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKKyAgICJpbnN0YW5jZXMiIG9mIHRoZSBkcml2ZXIsIHdoZXJlIGVhY2ggaW5zdGFuY2UgcmVwcmVzZW50cyBldmVyeXRoaW5nCisgICBuZWVkZWQgdG8gbWFuYWdlIG9uZSBhY3R1YWwgUENNQ0lBIGNhcmQuCisqLworCitzdGF0aWMgaW50IGRhcXBfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIHZvaWQgZGFxcF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CisKKy8qCisgICBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCisgICBkZXZpY2UgZHJpdmVyIHdpdGggYXBwcm9wcmlhdGUgY2FyZHMsIHRocm91Z2ggdGhlIGNhcmQgY29uZmlndXJhdGlvbgorICAgZGF0YWJhc2UuCisqLworCitzdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJxdWF0ZWNoX2RhcXBfY3MiOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGRhcXBfY3NfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKKyAgICBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuCisKKyAgICBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKyAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQorICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkYXFwX2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbDsKKwlpbnQgaTsKKworCURFQlVHKDAsICJkYXFwX2NzX2F0dGFjaCgpXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfREVWOyBpKyspCisJCWlmIChkZXZfdGFibGVbaV0gPT0gTlVMTCkKKwkJCWJyZWFrOworCWlmIChpID09IE1BWF9ERVYpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJkYXFwX2NzOiBubyBkZXZpY2VzIGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCisJbG9jYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsb2NhbC0+dGFibGVfaW5kZXggPSBpOworCWRldl90YWJsZVtpXSA9IGxvY2FsOworCWxvY2FsLT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gbG9jYWw7CisKKwkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+aXJxLkhhbmRsZXIgPSBkYXFwX2ludGVycnVwdDsKKwlsaW5rLT5pcnEuSW5zdGFuY2UgPSBsb2NhbDsKKworCS8qCisJICAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKKwkgICBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IgYWxtb3N0CisJICAgZXZlcnl0aGluZy4gIEluIG1vc3QgY2xpZW50cywgbWFueSBkZXRhaWxzIChpLmUuLCBudW1iZXIsIHNpemVzLAorCSAgIGFuZCBhdHRyaWJ1dGVzIG9mIElPIHdpbmRvd3MpIGFyZSBmaXhlZCBieSB0aGUgbmF0dXJlIG9mIHRoZQorCSAgIGRldmljZSwgYW5kIGNhbiBiZSBoYXJkLXdpcmVkIGhlcmUuCisJICovCisJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKKwlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKworCWRhcXBfY3NfY29uZmlnKGxpbmspOworCisJcmV0dXJuIDA7Cit9CQkJCS8qIGRhcXBfY3NfYXR0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKKyAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAorICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRhcXBfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CisKKwlERUJVRygwLCAiZGFxcF9jc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCisJaWYgKGxpbmstPmRldl9ub2RlKSB7CisJCWRldi0+c3RvcCA9IDE7CisJCWRhcXBfY3NfcmVsZWFzZShsaW5rKTsKKwl9CisKKwkvKiBVbmxpbmsgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIGZyZWUgaXQgKi8KKwlkZXZfdGFibGVbZGV2LT50YWJsZV9pbmRleF0gPSBOVUxMOworCWlmIChkZXYpCisJCWtmcmVlKGRldik7CisKK30JCQkJLyogZGFxcF9jc19kZXRhY2ggKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBkYXFwX2NzX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAorICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQorICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRhcXBfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBsYXN0X3JldDsKKwl1X2NoYXIgYnVmWzY0XTsKKworCURFQlVHKDAsICJkYXFwX2NzX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisKKwkvKgorCSAgIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgorCSAgIHJlZ2lzdGVycy4KKwkgKi8KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOworCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOworCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKKwl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkpIHsKKwkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSkgeworCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpKSkgeworCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKKwlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CisKKwkvKgorCSAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCisJICAgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZworCSAgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KKworCSAgIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UgdXNlCisJICAganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbCB3b3JsZCwKKwkgICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKKwkgICBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkgImtub3dzIiBtb3N0IG9mCisJICAgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLCBhbmQgbW9zdCBjbGllbnQgZHJpdmVycworCSAgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KKwkgKi8KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSkgeworCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwl3aGlsZSAoMSkgeworCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisKKwkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKKwkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisKKwkJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7CisJCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7CisJCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87CisJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJaWYgKGlvLT5ud2luID4gMSkgeworCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7CisJCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQl9CisKKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpCisJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLworCQlicmVhazsKKworCSAgICAgIG5leHRfZW50cnk6CisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSkpIHsKKwkJCWNzX2Vycm9yKGxpbmssIEdldE5leHRUdXBsZSwgbGFzdF9yZXQpOworCQkJZ290byBjc19mYWlsZWQ7CisJCX0KKwl9CisKKwkvKgorCSAgIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEKKwkgICBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUKKwkgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgorCSAqLworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpKSB7CisJCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBsYXN0X3JldCk7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkJfQorCisJLyoKKwkgICBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAorCSAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKKwkgICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgorCSAqLworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSkpIHsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCisJLyoKKwkgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQorCSAgIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldi4KKwkgKi8KKwkvKiBDb21lZGkncyBQQ01DSUEgc2NyaXB0IHVzZXMgdGhpcyBkZXZpY2UgbmFtZSAoZXh0cmFjdGVkCisJICogZnJvbSAvdmFyL2xpYi9wY21jaWEvc3RhYikgdG8gcGFzcyB0byBjb21lZGlfY29uZmlnCisJICovCisJLyogc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJkYXFwJWQiLCBkZXYtPnRhYmxlX2luZGV4KTsgKi8KKwlzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgInF1YXRlY2hfZGFxcF9jcyIpOworCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CisJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCisJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLworCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMngiLAorCQlkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCXByaW50aygiLCBpcnEgJXUiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCisJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAorCQkJbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMikKKwkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAorCQkJbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJZGFxcF9jc19yZWxlYXNlKGxpbmspOworCit9CQkJCS8qIGRhcXBfY3NfY29uZmlnICovCisKK3N0YXRpYyB2b2lkIGRhcXBfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAiZGFxcF9jc19yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKK30JCQkJLyogZGFxcF9jc19yZWxlYXNlICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGNhcmQgc3RhdHVzIGV2ZW50IGhhbmRsZXIuICBNb3N0bHksIHRoaXMgc2NoZWR1bGVzIG90aGVyCisgICAgc3R1ZmYgdG8gcnVuIGFmdGVyIGFuIGV2ZW50IGlzIHJlY2VpdmVkLgorCisgICAgV2hlbiBhIENBUkRfUkVNT1ZBTCBldmVudCBpcyByZWNlaXZlZCwgd2UgaW1tZWRpYXRlbHkgc2V0IGEKKyAgICBwcml2YXRlIGZsYWcgdG8gYmxvY2sgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZGV2aWNlLiAgQWxsIHRoZQorICAgIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGFjY2VzcyB0aGUgZGV2aWNlIHNob3VsZCBjaGVjayB0aGlzIGZsYWcKKyAgICB0byBtYWtlIHN1cmUgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGFxcF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLworCWxvY2FsLT5zdG9wID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXFwX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwlsb2NhbC0+c3RvcCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpZmRlZiBNT0RVTEUKKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIGRhcXBfY3NfaWRfdGFibGVbXSA9IHsKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMzcsIDB4MDAyNyksCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgZGFxcF9jc19pZF90YWJsZSk7CisKK3N0cnVjdCBwY21jaWFfZHJpdmVyIGRhcXBfY3NfZHJpdmVyID0geworCS5wcm9iZSA9IGRhcXBfY3NfYXR0YWNoLAorCS5yZW1vdmUgPSBkYXFwX2NzX2RldGFjaCwKKwkuc3VzcGVuZCA9IGRhcXBfY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gZGFxcF9jc19yZXN1bWUsCisJLmlkX3RhYmxlID0gZGFxcF9jc19pZF90YWJsZSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJfSwKK307CisKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlERUJVRygwLCAiJXNcbiIsIHZlcnNpb24pOworCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmRhcXBfY3NfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFxcCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19leGl0IGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJREVCVUcoMCwgImRhcXBfY3M6IHVubG9hZGluZ1xuIik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGFxcCk7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZkYXFwX2NzX2RyaXZlcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jCmluZGV4IDY1ZDUyNDIuLmNhMzQ3ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogLyoKICAgVGhlIGJvYXJkIGhhcyAzIGlucHV0IG1vZGVzIGFuZCB0aGUgZ2FpbnMgb2YgMSwyLDQsLi4uMzIgKCwgNjQsIDEyOCkKICovCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBydGRfYWlfNzUyMF9yYW5nZSA9IHsgMTgsIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBydGRfYWlfNzUyMF9yYW5nZSA9IHsgMTgsIHsKIAkJCS8qICstNVYgaW5wdXQgcmFuZ2UgZ2FpbiBzdGVwcyAqLwogCQkJQklQX1JBTkdFKDUuMCksCiAJCQlCSVBfUkFOR0UoNS4wIC8gMiksCkBAIC0yMjMsNyArMjIzLDcgQEAKIH07CiAKIC8qIFBDSTQ1MjAgaGFzIHR3byBtb3JlIGdhaW5zICg2IG1vcmUgZW50cmllcykgKi8KLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIHJ0ZF9haV80NTIwX3JhbmdlID0geyAyNCwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJ0ZF9haV80NTIwX3JhbmdlID0geyAyNCwgewogCQkJLyogKy01ViBpbnB1dCByYW5nZSBnYWluIHN0ZXBzICovCiAJCQlCSVBfUkFOR0UoNS4wKSwKIAkJCUJJUF9SQU5HRSg1LjAgLyAyKSwKQEAgLTI1NSw3ICsyNTUsNyBAQAogfTsKIAogLyogVGFibGUgb3JkZXIgbWF0Y2hlcyByYW5nZSB2YWx1ZXMgKi8KLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIHJ0ZF9hb19yYW5nZSA9IHsgNCwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJ0ZF9hb19yYW5nZSA9IHsgNCwgewogCQkJUkFOR0UoMCwgNSksCiAJCQlSQU5HRSgwLCAxMCksCiAJCQlSQU5HRSgtNSwgNSksCkBAIC0yNjYsNyArMjY2LDcgQEAKIC8qCiAgIEJvYXJkIGRlc2NyaXB0aW9ucwogICovCi10eXBlZGVmIHN0cnVjdCBydGRCb2FyZF9zdHJ1Y3Qgeworc3RydWN0IHJ0ZEJvYXJkIHsKIAljb25zdCBjaGFyICpuYW1lOwkvKiBtdXN0IGJlIGZpcnN0ICovCiAJaW50IGRldmljZV9pZDsKIAlpbnQgYWlDaGFuczsKQEAgLTI3NCwxMiArMjc0LDEyIEBACiAJaW50IGFpTWF4R2FpbjsKIAlpbnQgcmFuZ2UxMFN0YXJ0OwkvKiBzdGFydCBvZiArLTEwViByYW5nZSAqLwogCWludCByYW5nZVVuaVN0YXJ0OwkvKiBzdGFydCBvZiArMTBWIHJhbmdlICovCi19IHJ0ZEJvYXJkOworfTsKIAotc3RhdGljIGNvbnN0IHJ0ZEJvYXJkIHJ0ZDUyMEJvYXJkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBydGRCb2FyZCBydGQ1MjBCb2FyZHNbXSA9IHsKIAl7CiAJICAgICAgbmFtZToJIkRNNzUyMCIsCi0JICAgICAgZGV2aWNlX2lkOjB4NzUyMCwKKwkgICAgICBkZXZpY2VfaWQgOiAweDc1MjAsCiAJICAgICAgYWlDaGFuczoJMTYsCiAJICAgICAgYWlCaXRzOgkxMiwKIAkgICAgICBhaU1heEdhaW46MzIsCkBAIC0yODgsNyArMjg4LDcgQEAKIAkJfSwKIAl7CiAJICAgICAgbmFtZToJIlBDSTQ1MjAiLAotCSAgICAgIGRldmljZV9pZDoweDQ1MjAsCisJICAgICAgZGV2aWNlX2lkIDogMHg0NTIwLAogCSAgICAgIGFpQ2hhbnM6CTE2LAogCSAgICAgIGFpQml0czoJMTIsCiAJICAgICAgYWlNYXhHYWluOjEyOCwKQEAgLTMwOCwxMyArMzA4LDEzIEBACiAvKgogICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQogICovCi0jZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHJ0ZEJvYXJkICopZGV2LT5ib2FyZF9wdHIpCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBydGRCb2FyZCAqKWRldi0+Ym9hcmRfcHRyKQogCiAvKgogICAgVGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLgogICAgVGhpcyBpcyBhbHNvIHVuaXF1ZSBmb3IgZWFjaCBib2FyZCBpbiB0aGUgc3lzdGVtLgogKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBydGRQcml2YXRlIHsKIAkvKiBtZW1vcnkgbWFwcGVkIGJvYXJkIHN0cnVjdHVyZXMgKi8KIAl2b2lkICpsYXMwOwogCXZvaWQgKmxhczE7CkBAIC0zMzQsNyArMzM0LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGNoYW5CaXBvbGFyW1JURF9NQVhfQ0hBTkxJU1QgLyA4XTsJLyogYml0IGFycmF5ICovCiAKIAkvKiByZWFkIGJhY2sgZGF0YSAqLwotCWxzYW1wbF90IGFvVmFsdWVbMl07CS8qIFVzZWQgZm9yIEFPIHJlYWQgYmFjayAqLworCXVuc2lnbmVkIGludCBhb1ZhbHVlWzJdOwkvKiBVc2VkIGZvciBBTyByZWFkIGJhY2sgKi8KIAogCS8qIHRpbWVyIGdhdGUgKHdoZW4gZW5hYmxlZCkgKi8KIAl1OCB1dGNHYXRlWzRdOwkJLyogMSBleHRyYSBhbGxvd3Mgc2ltcGxlIHJhbmdlIGNoZWNrICovCkBAIC0zNTgsNyArMzU4LDcgQEAKIAl1OCBkbWExQ29udHJvbDsKICNlbmRpZgkJCQkvKiBVU0VfRE1BICovCiAJdW5zaWduZWQgZmlmb0xlbjsKLX0gcnRkUHJpdmF0ZTsKK307CiAKIC8qIGJpdCBkZWZpbmVzIGZvciAiZmxhZ3MiICovCiAjZGVmaW5lIFNFTkRfRU9TCTB4MDEJLyogc2VuZCBFbmQgT2YgU2NhbiBldmVudHMgKi8KQEAgLTM2NiwxOCArMzY2LDE4IEBACiAjZGVmaW5lIERNQTFfQUNUSVZFCTB4MDQJLyogRE1BMSBpcyBhY3RpdmUgKi8KIAogLyogTWFjcm9zIGZvciBhY2Nlc3NpbmcgY2hhbm5lbCBsaXN0IGJpdCBhcnJheSAqLwotI2RlZmluZSBDSEFOX0FSUkFZX1RFU1QoYXJyYXksaW5kZXgpIFwKKyNkZWZpbmUgQ0hBTl9BUlJBWV9URVNUKGFycmF5LCBpbmRleCkgXAogCSgoKGFycmF5KVsoaW5kZXgpLzhdID4+ICgoaW5kZXgpICYgMHg3KSkgJiAweDEpCi0jZGVmaW5lIENIQU5fQVJSQVlfU0VUKGFycmF5LGluZGV4KSBcCisjZGVmaW5lIENIQU5fQVJSQVlfU0VUKGFycmF5LCBpbmRleCkgXAogCSgoKGFycmF5KVsoaW5kZXgpLzhdIHw9IDEgPDwgKChpbmRleCkgJiAweDcpKSkKLSNkZWZpbmUgQ0hBTl9BUlJBWV9DTEVBUihhcnJheSxpbmRleCkgXAorI2RlZmluZSBDSEFOX0FSUkFZX0NMRUFSKGFycmF5LCBpbmRleCkgXAogCSgoKGFycmF5KVsoaW5kZXgpLzhdICY9IH4oMSA8PCAoKGluZGV4KSAmIDB4NykpKSkKIAogLyoKICAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KICAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCiAgKi8KLSNkZWZpbmUgZGV2cHJpdiAoKHJ0ZFByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcnRkUHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKIAogLyogTWFjcm9zIHRvIGFjY2VzcyByZWdpc3RlcnMgKi8KIApAQCAtMzk0LDE1ICszOTQsMTUgQEAKICAgICB3cml0ZWwgKDAsIGRldnByaXYtPmxhczArTEFTMF9DR1RfQ0xFQVIpCiAKIC8qIFJlc2V0IGNoYW5uZWwgZ2FpbiB0YWJsZSByZWFkIGFuZCB3cml0ZSBwb2ludGVycyAqLwotI2RlZmluZSBSdGRFbmFibGVDR1QoZGV2LHYpIFwKKyNkZWZpbmUgUnRkRW5hYmxlQ0dUKGRldiwgdikgXAogICAgIHdyaXRlbCAoKHYgPiAwKSA/IDEgOiAwLCBkZXZwcml2LT5sYXMwK0xBUzBfQ0dUX0VOQUJMRSkKIAogLyogV3JpdGUgY2hhbm5lbCBnYWluIHRhYmxlIGVudHJ5ICovCi0jZGVmaW5lIFJ0ZFdyaXRlQ0dUYWJsZShkZXYsdikgXAorI2RlZmluZSBSdGRXcml0ZUNHVGFibGUoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfQ0dUX1dSSVRFKQogCiAvKiBXcml0ZSBDaGFubmVsIEdhaW4gTGF0Y2ggKi8KLSNkZWZpbmUgUnRkV3JpdGVDR0xhdGNoKGRldix2KSBcCisjZGVmaW5lIFJ0ZFdyaXRlQ0dMYXRjaChkZXYsIHYpIFwKICAgICB3cml0ZWwgKHYsIGRldnByaXYtPmxhczArTEFTMF9DR0xfV1JJVEUpCiAKIC8qIFJlc2V0IEFEQyBGSUZPICovCkBAIC00MTAsMzkgKzQxMCwzOSBAQAogICAgIHdyaXRlbCAoMCwgZGV2cHJpdi0+bGFzMCtMQVMwX0FEQ19GSUZPX0NMRUFSKQogCiAvKiBTZXQgQURDIHN0YXJ0IGNvbnZlcnNpb24gc291cmNlIHNlbGVjdCAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgUnRkQWRjQ29udmVyc2lvblNvdXJjZShkZXYsdikgXAorI2RlZmluZSBSdGRBZGNDb252ZXJzaW9uU291cmNlKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGFzMCtMQVMwX0FEQ19DT05WRVJTSU9OKQogCiAvKiBTZXQgYnVyc3Qgc3RhcnQgc291cmNlIHNlbGVjdCAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgUnRkQnVyc3RTdGFydFNvdXJjZShkZXYsdikgXAorI2RlZmluZSBSdGRCdXJzdFN0YXJ0U291cmNlKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGFzMCtMQVMwX0JVUlNUX1NUQVJUKQogCiAvKiBTZXQgUGFjZXIgc3RhcnQgc291cmNlIHNlbGVjdCAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgUnRkUGFjZXJTdGFydFNvdXJjZShkZXYsdikgXAorI2RlZmluZSBSdGRQYWNlclN0YXJ0U291cmNlKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGFzMCtMQVMwX1BBQ0VSX1NUQVJUKQogCiAvKiBTZXQgUGFjZXIgc3RvcCBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRQYWNlclN0b3BTb3VyY2UoZGV2LHYpIFwKKyNkZWZpbmUgUnRkUGFjZXJTdG9wU291cmNlKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGFzMCtMQVMwX1BBQ0VSX1NUT1ApCiAKIC8qIFNldCBQYWNlciBjbG9jayBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAwPWV4dGVybmFsIDE9aW50ZXJuYWwgKi8KLSNkZWZpbmUgUnRkUGFjZXJDbG9ja1NvdXJjZShkZXYsdikgXAorI2RlZmluZSBSdGRQYWNlckNsb2NrU291cmNlKGRldiwgdikgXAogICAgIHdyaXRlbCAoKHYgPiAwKSA/IDEgOiAwLCBkZXZwcml2LT5sYXMwK0xBUzBfUEFDRVJfU0VMRUNUKQogCiAvKiBTZXQgc2FtcGxlIGNvdW50ZXIgc291cmNlIHNlbGVjdCAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgUnRkQWRjU2FtcGxlQ291bnRlclNvdXJjZShkZXYsdikgXAorI2RlZmluZSBSdGRBZGNTYW1wbGVDb3VudGVyU291cmNlKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGFzMCtMQVMwX0FEQ19TQ05UX1NSQykKIAogLyogU2V0IFBhY2VyIHRyaWdnZXIgbW9kZSBzZWxlY3QgKHdyaXRlIG9ubHkpIDA9c2luZ2xlIGN5Y2xlLCAxPXJlcGVhdCAqLwotI2RlZmluZSBSdGRQYWNlclRyaWdnZXJNb2RlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFBhY2VyVHJpZ2dlck1vZGUoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9QQUNFUl9SRVBFQVQpCiAKIC8qIFNldCBBYm91dCBjb3VudGVyIHN0b3AgZW5hYmxlICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRBYm91dFN0b3BFbmFibGUoZGV2LHYpIFwKKyNkZWZpbmUgUnRkQWJvdXRTdG9wRW5hYmxlKGRldiwgdikgXAogICAgIHdyaXRlbCAoKHYgPiAwKSA/IDEgOiAwLCBkZXZwcml2LT5sYXMwK0xBUzBfQUNOVF9TVE9QX0VOQUJMRSkKIAogLyogU2V0IGV4dGVybmFsIHRyaWdnZXIgcG9sYXJpdHkgKHdyaXRlIG9ubHkpIDA9cG9zaXRpdmUgZWRnZSwgMT1uZWdhdGl2ZSAqLwotI2RlZmluZSBSdGRUcmlnZ2VyUG9sYXJpdHkoZGV2LHYpIFwKKyNkZWZpbmUgUnRkVHJpZ2dlclBvbGFyaXR5KGRldiwgdikgXAogICAgIHdyaXRlbCAoKHYgPiAwKSA/IDEgOiAwLCBkZXZwcml2LT5sYXMwK0xBUzBfRVRSR19QT0xBUklUWSkKIAogLyogU3RhcnQgc2luZ2xlIEFEQyBjb252ZXJzaW9uICovCkBAIC00NzMsMTUgKzQ3MywxNSBAQAogICAgIHJlYWR3IChkZXZwcml2LT5sYXMwK0xBUzBfSVQpCiAKIC8qIEludGVycnVwdCBtYXNrICovCi0jZGVmaW5lIFJ0ZEludGVycnVwdE1hc2soZGV2LHYpIFwKLSAgICB3cml0ZXcgKChkZXZwcml2LT5pbnRNYXNrID0gKHYpKSxkZXZwcml2LT5sYXMwK0xBUzBfSVQpCisjZGVmaW5lIFJ0ZEludGVycnVwdE1hc2soZGV2LCB2KSBcCisgICAgd3JpdGV3ICgoZGV2cHJpdi0+aW50TWFzayA9ICh2KSksIGRldnByaXYtPmxhczArTEFTMF9JVCkKIAogLyogSW50ZXJydXB0IHN0YXR1cyBjbGVhciAob25seSBiaXRzIHNldCBpbiBtYXNrKSAqLwogI2RlZmluZSBSdGRJbnRlcnJ1cHRDbGVhcihkZXYpIFwKICAgICByZWFkdyAoZGV2cHJpdi0+bGFzMCtMQVMwX0NMRUFSKQogCiAvKiBJbnRlcnJ1cHQgY2xlYXIgbWFzayAqLwotI2RlZmluZSBSdGRJbnRlcnJ1cHRDbGVhck1hc2soZGV2LHYpIFwKKyNkZWZpbmUgUnRkSW50ZXJydXB0Q2xlYXJNYXNrKGRldiwgdikgXAogICAgIHdyaXRldyAoKGRldnByaXYtPmludENsZWFyTWFzayA9ICh2KSksIGRldnByaXYtPmxhczArTEFTMF9DTEVBUikKIAogLyogSW50ZXJydXB0IG92ZXJydW4gc3RhdHVzICovCkBAIC00OTUsOTIgKzQ5NSw5MiBAQAogLyogUGFjZXIgY291bnRlciwgMjRiaXQgKi8KICNkZWZpbmUgUnRkUGFjZXJDb3VudChkZXYpIFwKICAgICByZWFkbCAoZGV2cHJpdi0+bGFzMCtMQVMwX1BDTEspCi0jZGVmaW5lIFJ0ZFBhY2VyQ291bnRlcihkZXYsdikgXAotICAgIHdyaXRlbCAoKHYpICYgMHhmZmZmZmYsZGV2cHJpdi0+bGFzMCtMQVMwX1BDTEspCisjZGVmaW5lIFJ0ZFBhY2VyQ291bnRlcihkZXYsIHYpIFwKKyAgICB3cml0ZWwgKCh2KSAmIDB4ZmZmZmZmLCBkZXZwcml2LT5sYXMwK0xBUzBfUENMSykKIAogLyogQnVyc3QgY291bnRlciwgMTBiaXQgKi8KICNkZWZpbmUgUnRkQnVyc3RDb3VudChkZXYpIFwKICAgICByZWFkbCAoZGV2cHJpdi0+bGFzMCtMQVMwX0JDTEspCi0jZGVmaW5lIFJ0ZEJ1cnN0Q291bnRlcihkZXYsdikgXAotICAgIHdyaXRlbCAoKHYpICYgMHgzZmYsZGV2cHJpdi0+bGFzMCtMQVMwX0JDTEspCisjZGVmaW5lIFJ0ZEJ1cnN0Q291bnRlcihkZXYsIHYpIFwKKyAgICB3cml0ZWwgKCh2KSAmIDB4M2ZmLCBkZXZwcml2LT5sYXMwK0xBUzBfQkNMSykKIAogLyogRGVsYXkgY291bnRlciwgMTZiaXQgKi8KICNkZWZpbmUgUnRkRGVsYXlDb3VudChkZXYpIFwKICAgICByZWFkbCAoZGV2cHJpdi0+bGFzMCtMQVMwX0RDTEspCi0jZGVmaW5lIFJ0ZERlbGF5Q291bnRlcihkZXYsdikgXAorI2RlZmluZSBSdGREZWxheUNvdW50ZXIoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodikgJiAweGZmZmYsIGRldnByaXYtPmxhczArTEFTMF9EQ0xLKQogCiAvKiBBYm91dCBjb3VudGVyLCAxNmJpdCAqLwogI2RlZmluZSBSdGRBYm91dENvdW50KGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sYXMwK0xBUzBfQUNOVCkKLSNkZWZpbmUgUnRkQWJvdXRDb3VudGVyKGRldix2KSBcCisjZGVmaW5lIFJ0ZEFib3V0Q291bnRlcihkZXYsIHYpIFwKICAgICB3cml0ZWwgKCh2KSAmIDB4ZmZmZiwgZGV2cHJpdi0+bGFzMCtMQVMwX0FDTlQpCiAKIC8qIEFEQyBzYW1wbGUgY291bnRlciwgMTBiaXQgKi8KICNkZWZpbmUgUnRkQWRjU2FtcGxlQ291bnQoZGV2KSBcCiAgICAgcmVhZGwgKGRldnByaXYtPmxhczArTEFTMF9BRENfU0NOVCkKLSNkZWZpbmUgUnRkQWRjU2FtcGxlQ291bnRlcihkZXYsdikgXAorI2RlZmluZSBSdGRBZGNTYW1wbGVDb3VudGVyKGRldiwgdikgXAogICAgIHdyaXRlbCAoKHYpICYgMHgzZmYsIGRldnByaXYtPmxhczArTEFTMF9BRENfU0NOVCkKIAogLyogVXNlciBUaW1lci9Db3VudGVyICg4MjU0KSAqLwotI2RlZmluZSBSdGRVdGNDb3VudGVyR2V0KGRldixuKSBcCisjZGVmaW5lIFJ0ZFV0Y0NvdW50ZXJHZXQoZGV2LCBuKSBcCiAgICAgcmVhZGIgKGRldnByaXYtPmxhczAgXAogICAgICAgICArICgobiA8PSAwKSA/IExBUzBfVVRDMCA6ICgoMSA9PSBuKSA/IExBUzBfVVRDMSA6IExBUzBfVVRDMikpKQogCi0jZGVmaW5lIFJ0ZFV0Y0NvdW50ZXJQdXQoZGV2LG4sdikgXAorI2RlZmluZSBSdGRVdGNDb3VudGVyUHV0KGRldiwgbiwgdikgXAogICAgIHdyaXRlYiAoKHYpICYgMHhmZiwgZGV2cHJpdi0+bGFzMCBcCiAgICAgICAgICsgKChuIDw9IDApID8gTEFTMF9VVEMwIDogKCgxID09IG4pID8gTEFTMF9VVEMxIDogTEFTMF9VVEMyKSkpCiAKIC8qIFNldCBVVEMgKDgyNTQpIGNvbnRyb2wgYnl0ZSAgKi8KLSNkZWZpbmUgUnRkVXRjQ3RybFB1dChkZXYsbix2KSBcCisjZGVmaW5lIFJ0ZFV0Y0N0cmxQdXQoZGV2LCBuLCB2KSBcCiAgICAgd3JpdGViIChkZXZwcml2LT51dGNDdHJsWyhuKSAmIDNdID0gKCgobikgJiAzKSA8PCA2KSB8ICgodikgJiAweDNmKSwgXAogICAgICAgZGV2cHJpdi0+bGFzMCArIExBUzBfVVRDX0NUUkwpCiAKIC8qIFNldCBVVENuIGNsb2NrIHNvdXJjZSAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgUnRkVXRjQ2xvY2tTb3VyY2UoZGV2LG4sdikgXAorI2RlZmluZSBSdGRVdGNDbG9ja1NvdXJjZShkZXYsIG4sIHYpIFwKICAgICB3cml0ZXcgKHYsIGRldnByaXYtPmxhczAgXAogICAgICAgICArICgobiA8PSAwKSA/IExBUzBfVVRDMF9DTE9DSyA6IFwKICAgICAgICAgICAgKCgxID09IG4pID8gTEFTMF9VVEMxX0NMT0NLIDogTEFTMF9VVEMyX0NMT0NLKSkpCiAKIC8qIFNldCBVVENuIGdhdGUgc291cmNlICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRVdGNHYXRlU291cmNlKGRldixuLHYpIFwKKyNkZWZpbmUgUnRkVXRjR2F0ZVNvdXJjZShkZXYsIG4sIHYpIFwKICAgICB3cml0ZXcgKHYsIGRldnByaXYtPmxhczAgXAogICAgICAgICArICgobiA8PSAwKSA/IExBUzBfVVRDMF9HQVRFIDogXAogICAgICAgICAgICAoKDEgPT0gbikgPyBMQVMwX1VUQzFfR0FURSA6IExBUzBfVVRDMl9HQVRFKSkpCiAKIC8qIFVzZXIgb3V0cHV0IE4gc291cmNlIHNlbGVjdCAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgUnRkVXNyT3V0U291cmNlKGRldixuLHYpIFwKLSAgICB3cml0ZWwgKHYsZGV2cHJpdi0+bGFzMCsoKG4gPD0gMCkgPyBMQVMwX1VPVVQwX1NFTEVDVCA6IExBUzBfVU9VVDFfU0VMRUNUKSkKKyNkZWZpbmUgUnRkVXNyT3V0U291cmNlKGRldiwgbiwgdikgXAorICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGFzMCsoKG4gPD0gMCkgPyBMQVMwX1VPVVQwX1NFTEVDVCA6IExBUzBfVU9VVDFfU0VMRUNUKSkKIAogLyogRGlnaXRhbCBJTyAqLwogI2RlZmluZSBSdGREaW8wUmVhZChkZXYpIFwKICAgICAocmVhZHcgKGRldnByaXYtPmxhczArTEFTMF9ESU8wKSAmIDB4ZmYpCi0jZGVmaW5lIFJ0ZERpbzBXcml0ZShkZXYsdikgXAorI2RlZmluZSBSdGREaW8wV3JpdGUoZGV2LCB2KSBcCiAgICAgd3JpdGV3ICgodikgJiAweGZmLCBkZXZwcml2LT5sYXMwK0xBUzBfRElPMCkKIAogI2RlZmluZSBSdGREaW8xUmVhZChkZXYpIFwKICAgICAocmVhZHcgKGRldnByaXYtPmxhczArTEFTMF9ESU8xKSAmIDB4ZmYpCi0jZGVmaW5lIFJ0ZERpbzFXcml0ZShkZXYsdikgXAorI2RlZmluZSBSdGREaW8xV3JpdGUoZGV2LCB2KSBcCiAgICAgd3JpdGV3ICgodikgJiAweGZmLCBkZXZwcml2LT5sYXMwK0xBUzBfRElPMSkKIAogI2RlZmluZSBSdGREaW9TdGF0dXNSZWFkKGRldikgXAogICAgIChyZWFkdyAoZGV2cHJpdi0+bGFzMCtMQVMwX0RJT19TVEFUVVMpICYgMHhmZikKLSNkZWZpbmUgUnRkRGlvU3RhdHVzV3JpdGUoZGV2LHYpIFwKKyNkZWZpbmUgUnRkRGlvU3RhdHVzV3JpdGUoZGV2LCB2KSBcCiAgICAgd3JpdGV3ICgoZGV2cHJpdi0+ZGlvU3RhdHVzID0gKHYpKSwgZGV2cHJpdi0+bGFzMCtMQVMwX0RJT19TVEFUVVMpCiAKICNkZWZpbmUgUnRkRGlvMEN0cmxSZWFkKGRldikgXAogICAgIChyZWFkdyAoZGV2cHJpdi0+bGFzMCtMQVMwX0RJTzBfQ1RSTCkgJiAweGZmKQotI2RlZmluZSBSdGREaW8wQ3RybFdyaXRlKGRldix2KSBcCisjZGVmaW5lIFJ0ZERpbzBDdHJsV3JpdGUoZGV2LCB2KSBcCiAgICAgd3JpdGV3ICgodikgJiAweGZmLCBkZXZwcml2LT5sYXMwK0xBUzBfRElPMF9DVFJMKQogCiAvKiBEaWdpdGFsIHRvIEFuYWxvZyBjb252ZXJ0ZXIgKi8KIC8qIFdyaXRlIG9uZSBkYXRhIHZhbHVlIChzaWduICsgMTJiaXQgKyBtYXJrZXIgYml0cykgKi8KIC8qIE5vdGU6IG1hdGNoZXMgd2hhdCBETUEgd291bGQgcHV0LiAgQWN0dWFsIHZhbHVlIDw8IDMgKi8KLSNkZWZpbmUgUnRkRGFjRmlmb1B1dChkZXYsbix2KSBcCisjZGVmaW5lIFJ0ZERhY0ZpZm9QdXQoZGV2LCBuLCB2KSBcCiAgICAgd3JpdGV3ICgodiksIGRldnByaXYtPmxhczEgKygoKG4pID09IDApID8gTEFTMV9EQUMxX0ZJRk8gOiBMQVMxX0RBQzJfRklGTykpCiAKIC8qIFN0YXJ0IHNpbmdsZSBEQUMgY29udmVyc2lvbiAqLwotI2RlZmluZSBSdGREYWNVcGRhdGUoZGV2LG4pIFwKKyNkZWZpbmUgUnRkRGFjVXBkYXRlKGRldiwgbikgXAogICAgIHdyaXRldyAoMCwgZGV2cHJpdi0+bGFzMCArKCgobikgPT0gMCkgPyBMQVMwX0RBQzEgOiBMQVMwX0RBQzIpKQogCiAvKiBTdGFydCBzaW5nbGUgREFDIGNvbnZlcnNpb24gb24gYm90aCBEQUNzICovCkBAIC01ODgsMjAgKzU4OCwyMCBAQAogICAgIHdyaXRldyAoMCwgZGV2cHJpdi0+bGFzMCtMQVMwX0RBQykKIAogLyogU2V0IERBQyBvdXRwdXQgdHlwZSBhbmQgcmFuZ2UgKi8KLSNkZWZpbmUgUnRkRGFjUmFuZ2UoZGV2LG4sdikgXAorI2RlZmluZSBSdGREYWNSYW5nZShkZXYsIG4sIHYpIFwKICAgICB3cml0ZXcgKCh2KSAmIDcsIGRldnByaXYtPmxhczAgXAogCSsoKChuKSA9PSAwKSA/IExBUzBfREFDMV9DVFJMIDogTEFTMF9EQUMyX0NUUkwpKQogCiAvKiBSZXNldCBEQUMgRklGTyAqLwotI2RlZmluZSBSdGREYWNDbGVhckZpZm8oZGV2LG4pIFwKKyNkZWZpbmUgUnRkRGFjQ2xlYXJGaWZvKGRldiwgbikgXAogICAgIHdyaXRlbCAoMCwgZGV2cHJpdi0+bGFzMCsoKChuKSA9PSAwKSA/IExBUzBfREFDMV9SRVNFVCA6IExBUzBfREFDMl9SRVNFVCkpCiAKIC8qIFNldCBzb3VyY2UgZm9yIERNQSAwICh3cml0ZSBvbmx5LCBzaGFkb3c/KSAqLwotI2RlZmluZSBSdGREbWEwU291cmNlKGRldixuKSBcCisjZGVmaW5lIFJ0ZERtYTBTb3VyY2UoZGV2LCBuKSBcCiAgICAgd3JpdGVsICgobikgJiAweGYsIGRldnByaXYtPmxhczArTEFTMF9ETUEwX1NSQykKIAogLyogU2V0IHNvdXJjZSBmb3IgRE1BIDEgKHdyaXRlIG9ubHksIHNoYWRvdz8pICovCi0jZGVmaW5lIFJ0ZERtYTFTb3VyY2UoZGV2LG4pIFwKKyNkZWZpbmUgUnRkRG1hMVNvdXJjZShkZXYsIG4pIFwKICAgICB3cml0ZWwgKChuKSAmIDB4ZiwgZGV2cHJpdi0+bGFzMCtMQVMwX0RNQTFfU1JDKQogCiAvKiBSZXNldCBib2FyZCBzdGF0ZSBmb3IgRE1BIDAgKi8KQEAgLTYxNSw1MSArNjE1LDUxIEBACiAvKiBQTFg5MDgwIGludGVycnVwdCBtYXNrIGFuZCBzdGF0dXMgKi8KICNkZWZpbmUgUnRkUGx4SW50ZXJydXB0UmVhZChkZXYpIFwKICAgICByZWFkbCAoZGV2cHJpdi0+bGNmZytMQ0ZHX0lUQ1NSKQotI2RlZmluZSBSdGRQbHhJbnRlcnJ1cHRXcml0ZShkZXYsdikgXAorI2RlZmluZSBSdGRQbHhJbnRlcnJ1cHRXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZWwgKHYsIGRldnByaXYtPmxjZmcrTENGR19JVENTUikKIAogLyogU2V0ICBtb2RlIGZvciBETUEgMCAqLwotI2RlZmluZSBSdGREbWEwTW9kZShkZXYsbSkgXAorI2RlZmluZSBSdGREbWEwTW9kZShkZXYsIG0pIFwKICAgICB3cml0ZWwgKChtKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQU1PREUwKQogCiAvKiBTZXQgUENJIGFkZHJlc3MgZm9yIERNQSAwICovCi0jZGVmaW5lIFJ0ZERtYTBQY2lBZGRyKGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTBQY2lBZGRyKGRldiwgYSkgXAogICAgIHdyaXRlbCAoKGEpLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BUEFEUjApCiAKIC8qIFNldCBsb2NhbCBhZGRyZXNzIGZvciBETUEgMCAqLwotI2RlZmluZSBSdGREbWEwTG9jYWxBZGRyKGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTBMb2NhbEFkZHIoZGV2LCBhKSBcCiAgICAgd3JpdGVsICgoYSksIGRldnByaXYtPmxjZmcrTENGR19ETUFMQURSMCkKIAogLyogU2V0IGJ5dGUgY291bnQgZm9yIERNQSAwICovCi0jZGVmaW5lIFJ0ZERtYTBDb3VudChkZXYsYykgXAorI2RlZmluZSBSdGREbWEwQ291bnQoZGV2LCBjKSBcCiAgICAgd3JpdGVsICgoYyksIGRldnByaXYtPmxjZmcrTENGR19ETUFTSVowKQogCiAvKiBTZXQgbmV4dCBkZXNjcmlwdG9yIGZvciBETUEgMCAqLwotI2RlZmluZSBSdGREbWEwTmV4dChkZXYsYSkgXAorI2RlZmluZSBSdGREbWEwTmV4dChkZXYsIGEpIFwKICAgICB3cml0ZWwgKChhKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQURQUjApCiAKIC8qIFNldCAgbW9kZSBmb3IgRE1BIDEgKi8KLSNkZWZpbmUgUnRkRG1hMU1vZGUoZGV2LG0pIFwKKyNkZWZpbmUgUnRkRG1hMU1vZGUoZGV2LCBtKSBcCiAgICAgd3JpdGVsICgobSksIGRldnByaXYtPmxjZmcrTENGR19ETUFNT0RFMSkKIAogLyogU2V0IFBDSSBhZGRyZXNzIGZvciBETUEgMSAqLwotI2RlZmluZSBSdGREbWExUGNpQWRkcihkZXYsYSkgXAorI2RlZmluZSBSdGREbWExUGNpQWRkcihkZXYsIGEpIFwKICAgICB3cml0ZWwgKChhKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQUFEUjEpCiAKIC8qIFNldCBsb2NhbCBhZGRyZXNzIGZvciBETUEgMSAqLwotI2RlZmluZSBSdGREbWExTG9jYWxBZGRyKGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTFMb2NhbEFkZHIoZGV2LCBhKSBcCiAgICAgd3JpdGVsICgoYSksIGRldnByaXYtPmxjZmcrTENGR19ETUFMQURSMSkKIAogLyogU2V0IGJ5dGUgY291bnQgZm9yIERNQSAxICovCi0jZGVmaW5lIFJ0ZERtYTFDb3VudChkZXYsYykgXAorI2RlZmluZSBSdGREbWExQ291bnQoZGV2LCBjKSBcCiAgICAgd3JpdGVsICgoYyksIGRldnByaXYtPmxjZmcrTENGR19ETUFTSVoxKQogCiAvKiBTZXQgbmV4dCBkZXNjcmlwdG9yIGZvciBETUEgMSAqLwotI2RlZmluZSBSdGREbWExTmV4dChkZXYsYSkgXAorI2RlZmluZSBSdGREbWExTmV4dChkZXYsIGEpIFwKICAgICB3cml0ZWwgKChhKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQURQUjEpCiAKIC8qIFNldCBjb250cm9sIGZvciBETUEgMCAod3JpdGUgb25seSwgc2hhZG93PykgKi8KLSNkZWZpbmUgUnRkRG1hMENvbnRyb2woZGV2LG4pIFwKKyNkZWZpbmUgUnRkRG1hMENvbnRyb2woZGV2LCBuKSBcCiAgICAgd3JpdGViIChkZXZwcml2LT5kbWEwQ29udHJvbCA9IChuKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQUNTUjApCiAKIC8qIEdldCBzdGF0dXMgZm9yIERNQSAwICovCkBAIC02NjcsNyArNjY3LDcgQEAKICAgICByZWFkYiAoZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQUNTUjApCiAKIC8qIFNldCBjb250cm9sIGZvciBETUEgMSAod3JpdGUgb25seSwgc2hhZG93PykgKi8KLSNkZWZpbmUgUnRkRG1hMUNvbnRyb2woZGV2LG4pIFwKKyNkZWZpbmUgUnRkRG1hMUNvbnRyb2woZGV2LCBuKSBcCiAgICAgd3JpdGViIChkZXZwcml2LT5kbWExQ29udHJvbCA9IChuKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQUNTUjEpCiAKIC8qIEdldCBzdGF0dXMgZm9yIERNQSAxICovCkBAIC02NzUsMzkgKzY3NSwzOSBAQAogICAgIHJlYWRiIChkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQ1NSMSkKIAogLyoKLSAqIFRoZSBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKICAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWMvZGV0YWNoKQogICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCiAgKiB0aGUgZGV2aWNlIGNvZGUuCiAgKi8KLXN0YXRpYyBpbnQgcnRkX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpOwotc3RhdGljIGludCBydGRfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBydGRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IHJ0ZF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBjb21lZGlfZHJpdmVyIHJ0ZDUyMERyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBydGQ1MjBEcml2ZXIgPSB7CiAgICAgICBkcml2ZXJfbmFtZTogRFJWX05BTUUsCi0gICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCi0gICAgICBhdHRhY2g6cnRkX2F0dGFjaCwKLSAgICAgIGRldGFjaDpydGRfZGV0YWNoLAorICAgICAgbW9kdWxlIDogVEhJU19NT0RVTEUsCisgICAgICBhdHRhY2ggOiBydGRfYXR0YWNoLAorICAgICAgZGV0YWNoIDogcnRkX2RldGFjaCwKIH07CiAKLXN0YXRpYyBpbnQgcnRkX2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgcnRkX2FvX3dpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgcnRkX2FvX3JpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgcnRkX2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgcnRkX2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2NtZCAqIGNtZCk7Ci1zdGF0aWMgaW50IHJ0ZF9haV9jbWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOwotc3RhdGljIGludCBydGRfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKLS8vc3RhdGljIGludCBydGRfYWlfcG9sbCAoY29tZWRpX2RldmljZSAqZGV2LGNvbWVkaV9zdWJkZXZpY2UgKnMpOworc3RhdGljIGludCBydGRfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBydGRfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBydGRfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBydGRfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBydGRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKK3N0YXRpYyBpbnQgcnRkX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworLyogc3RhdGljIGludCBydGRfYWlfcG9sbCAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7ICovCiBzdGF0aWMgaW50IHJ0ZF9uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCBpbnQgcm91bmRNb2RlKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBydGRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOwotc3RhdGljIGludCBydGQ1MjBfcHJvYmVfZmlmb19kZXB0aChjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBydGQ1MjBfcHJvYmVfZmlmb19kZXB0aChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAogLyoKICAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCkBAIC03MTUsOSArNzE1LDkgQEAKICAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CiAgKiBhZGRyZXNzLgogICovCi1zdGF0aWMgaW50IHJ0ZF9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KQorc3RhdGljIGludCBydGRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsJCQkJLyogYm9hcmQgbmFtZSBhbmQgb3B0aW9ucyBmbGFncyAqLwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKIAlpbnQgcmV0OwogCXJlc291cmNlX3NpemVfdCBwaHlzTGFzMDsJLyogY29uZmlndWF0aW9uICovCkBAIC03MzksNyArNzM5LDcgQEAKIAkgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCiAJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgogCSAqLwotCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHJ0ZFByaXZhdGUpKSA8IDApCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHJ0ZFByaXZhdGUpKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyoKQEAgLTc3OSw3ICs3NzksOCBAQAogCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CiAJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOwogCi0JaWYgKChyZXQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsIERSVl9OQU1FKSkgPCAwKSB7CisJcmV0ID0gY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCBEUlZfTkFNRSk7CisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucy5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTg2Niw3ICs4NjcsNyBAQAogCXMtPmRvX2NtZCA9IHJ0ZF9haV9jbWQ7CiAJcy0+ZG9fY21kdGVzdCA9IHJ0ZF9haV9jbWR0ZXN0OwogCXMtPmNhbmNlbCA9IHJ0ZF9haV9jYW5jZWw7Ci0JLypzLT5wb2xsID0gcnRkX2FpX3BvbGw7ICovLyogbm90IHJlYWR5IHlldCAqLworCS8qIHMtPnBvbGwgPSBydGRfYWlfcG9sbDsgKi8gLyogbm90IHJlYWR5IHlldCAqLwogCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CiAJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KQEAgLTkxOCw4ICs5MTksMTAgQEAKIAkvKiBUT0RPOiBzZXQgdXNlciBvdXQgc291cmNlID8/PyAqLwogCiAJLyogY2hlY2sgaWYgb3VyIGludGVycnVwdCBpcyBhdmFpbGFibGUgYW5kIGdldCBpdCAqLwotCWlmICgocmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGRldnByaXYtPnBjaV9kZXYtPmlycSwgcnRkX2ludGVycnVwdCwKLQkJCQlJUlFGX1NIQVJFRCwgRFJWX05BTUUsIGRldikpIDwgMCkgeworCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShkZXZwcml2LT5wY2lfZGV2LT5pcnEsIHJ0ZF9pbnRlcnJ1cHQsCisJCQkJIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgZGV2KTsKKworCWlmIChyZXQgPCAwKSB7CiAJCXByaW50aygiQ291bGQgbm90IGdldCBpbnRlcnJ1cHQhICgldSlcbiIsCiAJCQlkZXZwcml2LT5wY2lfZGV2LT5pcnEpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTAwNSw3ICsxMDA4LDcgQEAKIAogI2lmIDAKIAkvKiBoaXQgYW4gZXJyb3IsIGNsZWFuIHVwIG1lbW9yeSBhbmQgcmV0dXJuIHJldCAqLwotLy9ydGRfYXR0YWNoX2RpZV9lcnJvcjoKKy8qIHJ0ZF9hdHRhY2hfZGllX2Vycm9yOiAqLwogI2lmZGVmIFVTRV9ETUEKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBETUFfQ0hBSU5fQ09VTlQ7IGluZGV4KyspIHsKIAkJaWYgKE5VTEwgIT0gZGV2cHJpdi0+ZG1hMEJ1ZmZbaW5kZXhdKSB7CS8qIGZyZWUgYnVmZmVyIG1lbW9yeSAqLwpAQCAtMTA1Nyw3ICsxMDYwLDcgQEAKICAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKICAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCiAgKi8KLXN0YXRpYyBpbnQgcnRkX2RldGFjaChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBydGRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgVVNFX0RNQQogCWludCBpbmRleDsKQEAgLTExMzcsNyArMTE0MCw3IEBACiAvKgogICBDb252ZXJ0IGEgc2luZ2xlIGNvbWVkaSBjaGFubmVsLWdhaW4gZW50cnkgdG8gYSBSVEQ1MjAgdGFibGUgZW50cnkKICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgcnRkQ29udmVydENoYW5HYWluKGNvbWVkaV9kZXZpY2UgKiBkZXYsCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgcnRkQ29udmVydENoYW5HYWluKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJdW5zaWduZWQgaW50IGNvbWVkaUNoYW4sIGludCBjaGFuSW5kZXgpCiB7CQkJCS8qIGluZGV4IGluIGNoYW5uZWwgbGlzdCAqLwogCXVuc2lnbmVkIGludCBjaGFuLCByYW5nZSwgYXJlZjsKQEAgLTExODcsNyArMTE5MCw3IEBACiAvKgogICBTZXR1cCB0aGUgY2hhbm5lbC1nYWluIHRhYmxlIGZyb20gYSBjb21lZGkgbGlzdAogKi8KLXN0YXRpYyB2b2lkIHJ0ZF9sb2FkX2NoYW5uZWxnYWluX2xpc3QoY29tZWRpX2RldmljZSAqIGRldiwKK3N0YXRpYyB2b2lkIHJ0ZF9sb2FkX2NoYW5uZWxnYWluX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAl1bnNpZ25lZCBpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmxpc3QpCiB7CiAJaWYgKG5fY2hhbiA+IDEpIHsJLyogc2V0dXAgY2hhbm5lbCBnYWluIHRhYmxlICovCkBAIC0xMjA2LDkgKzEyMDksOSBAQAogCiAvKiBkZXRlcm1pbmUgZmlmbyBzaXplIGJ5IGRvaW5nIGFkYyBjb252ZXJzaW9ucyB1bnRpbCB0aGUgZmlmbyBoYWxmCiBlbXB0eSBzdGF0dXMgZmxhZyBjbGVhcnMgKi8KLXN0YXRpYyBpbnQgcnRkNTIwX3Byb2JlX2ZpZm9fZGVwdGgoY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIGludCBydGQ1MjBfcHJvYmVfZmlmb19kZXB0aChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCWxzYW1wbF90IGNoYW5zcGVjID0gQ1JfUEFDSygwLCAwLCBBUkVGX0dST1VORCk7CisJdW5zaWduZWQgaW50IGNoYW5zcGVjID0gQ1JfUEFDSygwLCAwLCBBUkVGX0dST1VORCk7CiAJdW5zaWduZWQgaTsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgbGltaXQgPSAweDIwMDA7CiAJdW5zaWduZWQgZmlmb19zaXplID0gMDsKQEAgLTEyMzQsNyArMTIzNyw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAlSdGRBZGNDbGVhckZpZm8oZGV2KTsKLQlpZihmaWZvX3NpemUgIT0gMHg0MDAgfHwgZmlmb19zaXplICE9IDB4MjAwMCkKKwlpZihmaWZvX3NpemUgIT0gMHg0MDAgJiYgZmlmb19zaXplICE9IDB4MjAwMCkKIAl7CiAJCXJ0X3ByaW50aygiXG5jb21lZGk6ICVzOiB1bmV4cGVjdGVkIGZpZm8gc2l6ZSBvZiAlaSwgZXhwZWN0ZWQgMTAyNCBvciA4MTkyLlxuIiwKIAkJCURSVl9OQU1FLCBmaWZvX3NpemUpOwpAQCAtMTI1MSw4ICsxMjU0LDggQEAKICAgTm90ZSwgd2UgZG9uJ3QgZG8gYW55IHNldHRsaW5nIGRlbGF5cy4gIFVzZSBhIGluc3RydWN0aW9uIGxpc3QgdG8KICAgc2VsZWN0LCBkZWxheSwgdGhlbiByZWFkLgogICovCi1zdGF0aWMgaW50IHJ0ZF9haV9yaW5zbihjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgcnRkX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuLCBpaTsKIAlpbnQgc3RhdDsKQEAgLTEzMDQsMTIgKzEzMDcsMTIgQEAKIAogICBUaGUgbWFudWFsIGNsYWltcyB0aGF0IHdlIGNhbiBkbyBhIGx3b3JkIHJlYWQsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgaGVyZS4KICovCi1zdGF0aWMgaW50IGFpX3JlYWRfbihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywgaW50IGNvdW50KQorc3RhdGljIGludCBhaV9yZWFkX24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBjb3VudCkKIHsKIAlpbnQgaWk7CiAKIAlmb3IgKGlpID0gMDsgaWkgPCBjb3VudDsgaWkrKykgewotCQlzYW1wbF90IHNhbXBsZTsKKwkJc2hvcnQgc2FtcGxlOwogCQlzMTYgZDsKIAogCQlpZiAoMCA9PSBkZXZwcml2LT5haUNvdW50KSB7CS8qIGRvbmUgKi8KQEAgLTEzNDMsMTAgKzEzNDYsMTAgQEAKIC8qCiAgIHVua25vd24gYW1vdXQgb2YgZGF0YSBpcyB3YWl0aW5nIGluIGZpZm8uCiAqLwotc3RhdGljIGludCBhaV9yZWFkX2RyZWdzKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKQorc3RhdGljIGludCBhaV9yZWFkX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXdoaWxlIChSdGRGaWZvU3RhdHVzKGRldikgJiBGU19BRENfTk9UX0VNUFRZKSB7CS8qIDEgLT4gbm90IGVtcHR5ICovCi0JCXNhbXBsX3Qgc2FtcGxlOworCQlzaG9ydCBzYW1wbGU7CiAJCXMxNiBkID0gUnRkQWRjRmlmb0dldChkZXYpOwkvKiBnZXQgMnMgY29tcCB2YWx1ZSAqLwogCiAJCWlmICgwID09IGRldnByaXYtPmFpQ291bnQpIHsJLyogZG9uZSAqLwpAQCAtMTM3MiwyMCArMTM3NSwyMCBAQAogLyoKICAgVGVybWluYXRlIGEgRE1BIHRyYW5zZmVyIGFuZCB3YWl0IGZvciBldmVyeXRoaW5nIHRvIHF1aWV0IGRvd24KICovCi12b2lkIGFib3J0X2RtYShjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3ZvaWQgYWJvcnRfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQogewkJCQkvKiBETUEgY2hhbm5lbCAwLCAxICovCiAJdW5zaWduZWQgbG9uZyBkbWFfY3NfYWRkcjsJLyogdGhlIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICovCiAJdWludDhfdCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGlpOwotCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKiB1bnNpZ25lZCBsb25nIGZsYWdzOyAqLwogCiAJZG1hX2NzX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXZwcml2LT5sY2ZnCiAJCSsgKChjaGFubmVsID09IDApID8gTENGR19ETUFDU1IwIDogTENGR19ETUFDU1IxKTsKIAotCS8vIHNwaW5sb2NrIGZvciBwbHggZG1hIGNvbnRyb2wvc3RhdHVzIHJlZwotCS8vY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCAmZGV2LT5zcGlubG9jaywgZmxhZ3MgKTsKKwkvKiAgc3BpbmxvY2sgZm9yIHBseCBkbWEgY29udHJvbC9zdGF0dXMgcmVnICovCisJLyogY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCAmZGV2LT5zcGlubG9jaywgZmxhZ3MgKTsgKi8KIAotCS8vIGFib3J0IGRtYSB0cmFuc2ZlciBpZiBuZWNlc3NhcnkKKwkvKiAgYWJvcnQgZG1hIHRyYW5zZmVyIGlmIG5lY2Vzc2FyeSAqLwogCXN0YXR1cyA9IHJlYWRiKGRtYV9jc19hZGRyKTsKIAlpZiAoKHN0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSA9PSAwKSB7CS8qIG5vdCBlbmFibGVkIChFcnJvcj8pICovCiAJCURQUklOVEsoInJ0ZDUyMDogQWJvcnREbWEgb24gbm9uLWFjdGl2ZSBjaGFubmVsICVkICgweCV4KVxuIiwKQEAgLTE0MTAsNyArMTQxMyw3IEBACiAJLyogc2V0IGFib3J0IGJpdCBmb3IgY2hhbm5lbCAqLwogCXdyaXRlYihQTFhfRE1BX0FCT1JUX0JJVCwgZG1hX2NzX2FkZHIpOwogCi0JLy8gd2FpdCBmb3IgZG1hIGRvbmUgYml0IHRvIGJlIHNldAorCS8qICB3YWl0IGZvciBkbWEgZG9uZSBiaXQgdG8gYmUgc2V0ICovCiAJc3RhdHVzID0gcmVhZGIoZG1hX2NzX2FkZHIpOwogCWZvciAoaWkgPSAwOwogCQkoc3RhdHVzICYgUExYX0RNQV9ET05FX0JJVCkgPT0gMCAmJiBpaSA8IFJURF9ETUFfVElNRU9VVDsKQEAgLTE0MjQsMTQgKzE0MjcsMTQgQEAKIAl9CiAKICAgICAgIGFib3J0RG1hRXhpdDoKLQkvL2NvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZGV2LT5zcGlubG9jaywgZmxhZ3MgKTsKKwkvKiBjb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmRldi0+c3BpbmxvY2ssIGZsYWdzICk7ICovCiB9CiAKIC8qCiAgIFByb2Nlc3Mgd2hhdCBpcyBpbiB0aGUgRE1BIHRyYW5zZmVyIGJ1ZmZlciBhbmQgcGFzcyB0byBjb21lZGkKICAgTm90ZTogdGhpcyBpcyBub3QgcmUtZW50cmFudAogKi8KLXN0YXRpYyBpbnQgYWlfcHJvY2Vzc19kbWEoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IGFpX3Byb2Nlc3NfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCWludCBpaSwgbjsKIAlzMTYgKmRwOwpAQCAtMTQ0MSw3ICsxNDQ0LDcgQEAKIAogCWRwID0gZGV2cHJpdi0+ZG1hMEJ1ZmZbZGV2cHJpdi0+ZG1hME9mZnNldF07CiAJZm9yIChpaSA9IDA7IGlpIDwgZGV2cHJpdi0+Zmlmb0xlbiAvIDI7KSB7CS8qIGNvbnZlcnQgc2FtcGxlcyAqLwotCQlzYW1wbF90IHNhbXBsZTsKKwkJc2hvcnQgc2FtcGxlOwogCiAJCWlmIChDSEFOX0FSUkFZX1RFU1QoZGV2cHJpdi0+Y2hhbkJpcG9sYXIsIHMtPmFzeW5jLT5jdXJfY2hhbikpIHsKIAkJCXNhbXBsZSA9ICgqZHAgPj4gMykgKyAyMDQ4OwkvKiBjb252ZXJ0IHRvIGNvbWVkaSB1bnNpZ25lZCBkYXRhICovCkBAIC0xNDk0LDEwICsxNDk3LDEwIEBACiAJdm9pZCAqZAkJCS8qIG91ciBkYXRhICovCiAJUFRfUkVHU19BUkcpCiB7CQkJCS8qIGNwdSBjb250ZXh0IChpZ25vcmVkKSAqLwotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CS8qIG11c3QgYmUgY2FsbGVkICJkZXYiIGZvciBkZXZwcml2ICovCisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CS8qIG11c3QgYmUgY2FsbGVkICJkZXYiIGZvciBkZXZwcml2ICovCiAJdTE2IHN0YXR1czsKIAl1MTYgZmlmb1N0YXR1czsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsJLyogYW5hbG9nIGluIHN1YmRldmljZSAqLworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsJLyogYW5hbG9nIGluIHN1YmRldmljZSAqLwogCiAJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTE2NDUsNyArMTY0OCw3IEBACiAvKgogICByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIGF2YWlsYWJsZQogKi8KLXN0YXRpYyBpbnQgcnRkX2FpX3BvbGwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IHJ0ZF9haV9wb2xsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCS8qIFRPRE86IFRoaXMgbmVlZHMgdG8gbWFzayBpbnRlcnJ1cHRzLCByZWFkX2RyZWdzLCBhbmQgdGhlbiByZS1lbmFibGUgKi8KIAkvKiBOb3Qgc3VyZSB3aGF0IHRvIGRvIGlmIERNQSBpcyBhY3RpdmUgKi8KQEAgLTE2NjIsOCArMTY2NSw4IEBACiAgIHRoZSBjb21tYW5kIHBhc3Nlcy4KICovCiAKLXN0YXRpYyBpbnQgcnRkX2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgcnRkX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMDsKIAlpbnQgdG1wOwpAQCAtMTg2Nyw5ICsxODcwLDkgQEAKICAgVGhpcyBpcyB1c3VhbGx5IGRvbmUgYnkgYW4gaW50ZXJydXB0IGhhbmRsZXIuCiAgIFVzZXJsYW5kIGdldHMgdG8gdGhlIGRhdGEgdXNpbmcgcmVhZCBjYWxscy4KICovCi1zdGF0aWMgaW50IHJ0ZF9haV9jbWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IHJ0ZF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCWludCB0aW1lcjsKIAogCS8qIHN0b3AgYW55dGhpbmcgY3VycmVudGx5IHJ1bm5pbmcgKi8KQEAgLTIwNjQsNyArMjA2Nyw3IEBACiAvKgogICBTdG9wIGEgcnVubmluZyBkYXRhIGFxdWlzaXRpb24uCiAqLwotc3RhdGljIGludCBydGRfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKQorc3RhdGljIGludCBydGRfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXUxNiBzdGF0dXM7CiAKQEAgLTIxMzIsOCArMjEzNSw4IEBACiAvKgogICBPdXRwdXQgb25lIChvciBtb3JlKSBhbmFsb2cgdmFsdWVzIHRvIGEgc2luZ2xlIHBvcnQgYXMgZmFzdCBhcyBwb3NzaWJsZS4KICovCi1zdGF0aWMgaW50IHJ0ZF9hb193aW5zbihjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgcnRkX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBpOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0yMTUyLDcgKzIxNTUsNyBAQAogCQkvKiBWRVJJRlk6IGNvbWVkaSByYW5nZSBhbmQgb2Zmc2V0IGNvbnZlcnNpb25zICovCiAKIAkJaWYgKChyYW5nZSA+IDEpCS8qIGJpcG9sYXIgKi8KLQkJCSYmKGRhdGFbaV0gPCAyMDQ4KSkgeworCQkJJiYgKGRhdGFbaV0gPCAyMDQ4KSkgewogCQkJLyogb2Zmc2V0IGFuZCBzaWduIGV4dGVuZCAqLwogCQkJdmFsID0gKCgoaW50KWRhdGFbaV0pIC0gMjA0OCkgPDwgMzsKIAkJfSBlbHNlIHsJLyogdW5pcG9sb3IgKi8KQEAgLTIxODcsOCArMjE5MCw4IEBACiAKIC8qIEFPIHN1YmRldmljZXMgc2hvdWxkIGhhdmUgYSByZWFkIGluc24gYXMgd2VsbCBhcyBhIHdyaXRlIGluc24uCiAgKiBVc3VhbGx5IHRoaXMgbWVhbnMgY29weWluZyBhIHZhbHVlIHN0b3JlZCBpbiBkZXZwcml2LiAqLwotc3RhdGljIGludCBydGRfYW9fcmluc24oY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHJ0ZF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaTsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMjIxMCw4ICsyMjEzLDggQEAKICAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQogICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZQogICovCi1zdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBydGRfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpZiAoaW5zbi0+biAhPSAyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIyMzcsOCArMjI0MCw4IEBACiAvKgogICBDb25maWd1cmUgb25lIGJpdCBvbiBhIElPIHBvcnQgYXMgSW5wdXQgb3IgT3V0cHV0IChoZW5jZSB0aGUgbmFtZSA6LSkuCiAqLwotc3RhdGljIGludCBydGRfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBydGRfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuaAppbmRleCAwZWI1MGI4Li5hM2VjMjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5oCkBAIC0yOSwzNjYgKzI5LDM2NiBAQAogICBMQVMwIFJ1bnRpbWUgQXJlYQogICBMb2NhbCBBZGRyZXNzIFNwYWNlIDAgT2Zmc2V0CQlSZWFkIEZ1bmN0aW9uCVdyaXRlIEZ1bmN0aW9uCiAqLwotI2RlZmluZSBMQVMwX1NQQVJFXzAwICAgIDB4MDAwMAkvLyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLSNkZWZpbmUgTEFTMF9TUEFSRV8wNCAgICAweDAwMDQJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi0jZGVmaW5lIExBUzBfVVNFUl9JTyAgICAgMHgwMDA4CS8vIFJlYWQgVXNlciBJbnB1dHMgICAgICAgICAgICAgICAgV3JpdGUgVXNlciBPdXRwdXRzCi0jZGVmaW5lIExBUzBfU1BBUkVfMEMgICAgMHgwMDBDCS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotI2RlZmluZSBMQVMwX0FEQyAgICAgICAgIDB4MDAxMAkvLyBSZWFkIEZJRk8gU3RhdHVzICAgICAgICAgICAgICAgIFNvZnR3YXJlIEEvRCBTdGFydAotI2RlZmluZSBMQVMwX0RBQzEgICAgICAgIDB4MDAxNAkvLyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIEQvQTEgVXBkYXRlCi0jZGVmaW5lIExBUzBfREFDMiAgICAgICAgMHgwMDE4CS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgRC9BMiBVcGRhdGUKLSNkZWZpbmUgTEFTMF9TUEFSRV8xQyAgICAweDAwMUMJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi0jZGVmaW5lIExBUzBfU1BBUkVfMjAgICAgMHgwMDIwCS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotI2RlZmluZSBMQVMwX0RBQyAgICAgICAgIDB4MDAyNAkvLyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIFNpbXVsdGFuZW91cyBEL0ExIGFuZCBEL0EyIFVwZGF0ZQotI2RlZmluZSBMQVMwX1BBQ0VSICAgICAgIDB4MDAyOAkvLyBTb2Z0d2FyZSBQYWNlciBTdGFydCAgICAgICAgICAgIFNvZnR3YXJlIFBhY2VyIFN0b3AKLSNkZWZpbmUgTEFTMF9USU1FUiAgICAgICAweDAwMkMJLy8gUmVhZCBUaW1lciBDb3VudGVycyBTdGF0dXMgICAgICBIRElOIFNvZnR3YXJlIFRyaWdnZXIKLSNkZWZpbmUgTEFTMF9JVCAgICAgICAgICAweDAwMzAJLy8gUmVhZCBJbnRlcnJ1cHQgU3RhdHVzICAgICAgICAgICBXcml0ZSBJbnRlcnJ1cHQgRW5hYmxlIE1hc2sgUmVnaXN0ZXIKLSNkZWZpbmUgTEFTMF9DTEVBUiAgICAgICAweDAwMzQJLy8gQ2xlYXIgSVRzIHNldCBieSBDbGVhciBNYXNrICAgICBTZXQgSW50ZXJydXB0IENsZWFyIE1hc2sKLSNkZWZpbmUgTEFTMF9PVkVSUlVOICAgICAweDAwMzgJLy8gUmVhZCBwZW5kaW5nIGludGVycnVwdHMgICAgICAgICBDbGVhciBPdmVycnVuIFJlZ2lzdGVyCi0jZGVmaW5lIExBUzBfU1BBUkVfM0MgICAgMHgwMDNDCS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQorI2RlZmluZSBMQVMwX1NQQVJFXzAwICAgIDB4MDAwMAkvKiAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICovCisjZGVmaW5lIExBUzBfU1BBUkVfMDQgICAgMHgwMDA0CS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKi8KKyNkZWZpbmUgTEFTMF9VU0VSX0lPICAgICAweDAwMDgJLyogIFJlYWQgVXNlciBJbnB1dHMgICAgICAgICAgICAgICAgV3JpdGUgVXNlciBPdXRwdXRzICovCisjZGVmaW5lIExBUzBfU1BBUkVfMEMgICAgMHgwMDBDCS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKi8KKyNkZWZpbmUgTEFTMF9BREMgICAgICAgICAweDAwMTAJLyogIFJlYWQgRklGTyBTdGF0dXMgICAgICAgICAgICAgICAgU29mdHdhcmUgQS9EIFN0YXJ0ICovCisjZGVmaW5lIExBUzBfREFDMSAgICAgICAgMHgwMDE0CS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIEQvQTEgVXBkYXRlICovCisjZGVmaW5lIExBUzBfREFDMiAgICAgICAgMHgwMDE4CS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIEQvQTIgVXBkYXRlICovCisjZGVmaW5lIExBUzBfU1BBUkVfMUMgICAgMHgwMDFDCS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8yMCAgICAweDAwMjAJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLworI2RlZmluZSBMQVMwX0RBQyAgICAgICAgIDB4MDAyNAkvKiAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBTaW11bHRhbmVvdXMgRC9BMSBhbmQgRC9BMiBVcGRhdGUgKi8KKyNkZWZpbmUgTEFTMF9QQUNFUiAgICAgICAweDAwMjgJLyogIFNvZnR3YXJlIFBhY2VyIFN0YXJ0ICAgICAgICAgICAgU29mdHdhcmUgUGFjZXIgU3RvcCAqLworI2RlZmluZSBMQVMwX1RJTUVSICAgICAgIDB4MDAyQwkvKiAgUmVhZCBUaW1lciBDb3VudGVycyBTdGF0dXMgICAgICBIRElOIFNvZnR3YXJlIFRyaWdnZXIgKi8KKyNkZWZpbmUgTEFTMF9JVCAgICAgICAgICAweDAwMzAJLyogIFJlYWQgSW50ZXJydXB0IFN0YXR1cyAgICAgICAgICAgV3JpdGUgSW50ZXJydXB0IEVuYWJsZSBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIExBUzBfQ0xFQVIgICAgICAgMHgwMDM0CS8qICBDbGVhciBJVHMgc2V0IGJ5IENsZWFyIE1hc2sgICAgIFNldCBJbnRlcnJ1cHQgQ2xlYXIgTWFzayAqLworI2RlZmluZSBMQVMwX09WRVJSVU4gICAgIDB4MDAzOAkvKiAgUmVhZCBwZW5kaW5nIGludGVycnVwdHMgICAgICAgICBDbGVhciBPdmVycnVuIFJlZ2lzdGVyICovCisjZGVmaW5lIExBUzBfU1BBUkVfM0MgICAgMHgwMDNDCS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKi8KIAogLyoKICAgTEFTMCBSdW50aW1lIEFyZWEgVGltZXIvQ291bnRlcixEaWcuSU8KICAgTmFtZQkJCUxvY2FsIEFkZHJlc3MJCQlGdW5jdGlvbgogKi8KLSNkZWZpbmUgTEFTMF9QQ0xLICAgICAgICAweDAwNDAJLy8gUGFjZXIgQ2xvY2sgdmFsdWUgKDI0Yml0KSAgICAgICAgICAgICBQYWNlciBDbG9jayBsb2FkICgyNGJpdCkKLSNkZWZpbmUgTEFTMF9CQ0xLICAgICAgICAweDAwNDQJLy8gQnVyc3QgQ2xvY2sgdmFsdWUgKDEwYml0KSAgICAgICAgICAgICBCdXJzdCBDbG9jayBsb2FkICgxMGJpdCkKLSNkZWZpbmUgTEFTMF9BRENfU0NOVCAgICAweDAwNDgJLy8gQS9EIFNhbXBsZSBjb3VudGVyIHZhbHVlICgxMGJpdCkgICAgICBBL0QgU2FtcGxlIGNvdW50ZXIgbG9hZCAoMTBiaXQpCi0jZGVmaW5lIExBUzBfREFDMV9VQ05UICAgMHgwMDRDCS8vIEQvQTEgVXBkYXRlIGNvdW50ZXIgdmFsdWUgKDEwIGJpdCkgICAgRC9BMSBVcGRhdGUgY291bnRlciBsb2FkICgxMGJpdCkKLSNkZWZpbmUgTEFTMF9EQUMyX1VDTlQgICAweDAwNTAJLy8gRC9BMiBVcGRhdGUgY291bnRlciB2YWx1ZSAoMTAgYml0KSAgICBEL0EyIFVwZGF0ZSBjb3VudGVyIGxvYWQgKDEwYml0KQotI2RlZmluZSBMQVMwX0RDTlQgICAgICAgIDB4MDA1NAkvLyBEZWxheSBjb3VudGVyIHZhbHVlICgxNiBiaXQpICAgICAgICAgIERlbGF5IGNvdW50ZXIgbG9hZCAoMTZiaXQpCi0jZGVmaW5lIExBUzBfQUNOVCAgICAgICAgMHgwMDU4CS8vIEFib3V0IGNvdW50ZXIgdmFsdWUgKDE2IGJpdCkgICAgICAgICAgQWJvdXQgY291bnRlciBsb2FkICgxNmJpdCkKLSNkZWZpbmUgTEFTMF9EQUNfQ0xLICAgICAweDAwNUMJLy8gREFDIGNsb2NrIHZhbHVlICgxNmJpdCkgICAgICAgICAgICAgICBEQUMgY2xvY2sgbG9hZCAoMTZiaXQpCi0jZGVmaW5lIExBUzBfVVRDMCAgICAgICAgMHgwMDYwCS8vIDgyNTQgVEMgQ291bnRlciAwIFVzZXIgVEMgMCB2YWx1ZSAgICAgTG9hZCBjb3VudCBpbiBUQyBDb3VudGVyIDAKLSNkZWZpbmUgTEFTMF9VVEMxICAgICAgICAweDAwNjQJLy8gODI1NCBUQyBDb3VudGVyIDEgVXNlciBUQyAxIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMQotI2RlZmluZSBMQVMwX1VUQzIgICAgICAgIDB4MDA2OAkvLyA4MjU0IFRDIENvdW50ZXIgMiBVc2VyIFRDIDIgdmFsdWUgICAgIExvYWQgY291bnQgaW4gVEMgQ291bnRlciAyCi0jZGVmaW5lIExBUzBfVVRDX0NUUkwgICAgMHgwMDZDCS8vIDgyNTQgVEMgQ29udHJvbCBXb3JkICAgICAgICAgICAgICAgICAgUHJvZ3JhbSBjb3VudGVyIG1vZGUgZm9yIFRDCi0jZGVmaW5lIExBUzBfRElPMCAgICAgICAgMHgwMDcwCS8vIERpZ2l0YWwgSS9PIFBvcnQgMCBSZWFkIFBvcnQgICAgICAgICAgRGlnaXRhbCBJL08gUG9ydCAwIFdyaXRlIFBvcnQKLSNkZWZpbmUgTEFTMF9ESU8xICAgICAgICAweDAwNzQJLy8gRGlnaXRhbCBJL08gUG9ydCAxIFJlYWQgUG9ydCAgICAgICAgICBEaWdpdGFsIEkvTyBQb3J0IDEgV3JpdGUgUG9ydAotI2RlZmluZSBMQVMwX0RJTzBfQ1RSTCAgIDB4MDA3OAkvLyBDbGVhciBkaWdpdGFsIElSUSBzdGF0dXMgZmxhZy9yZWFkICAgIENsZWFyIGRpZ2l0YWwgY2hpcC9wcm9ncmFtIFBvcnQgMAotI2RlZmluZSBMQVMwX0RJT19TVEFUVVMgIDB4MDA3QwkvLyBSZWFkIERpZ2l0YWwgSS9PIFN0YXR1cyB3b3JkICAgICAgICAgIFByb2dyYW0gZGlnaXRhbCBjb250cm9sIHJlZ2lzdGVyICYKKyNkZWZpbmUgTEFTMF9QQ0xLICAgICAgICAweDAwNDAJLyogIFBhY2VyIENsb2NrIHZhbHVlICgyNGJpdCkgICAgICAgICAgICAgUGFjZXIgQ2xvY2sgbG9hZCAoMjRiaXQpICovCisjZGVmaW5lIExBUzBfQkNMSyAgICAgICAgMHgwMDQ0CS8qICBCdXJzdCBDbG9jayB2YWx1ZSAoMTBiaXQpICAgICAgICAgICAgIEJ1cnN0IENsb2NrIGxvYWQgKDEwYml0KSAqLworI2RlZmluZSBMQVMwX0FEQ19TQ05UICAgIDB4MDA0OAkvKiAgQS9EIFNhbXBsZSBjb3VudGVyIHZhbHVlICgxMGJpdCkgICAgICBBL0QgU2FtcGxlIGNvdW50ZXIgbG9hZCAoMTBiaXQpICovCisjZGVmaW5lIExBUzBfREFDMV9VQ05UICAgMHgwMDRDCS8qICBEL0ExIFVwZGF0ZSBjb3VudGVyIHZhbHVlICgxMCBiaXQpICAgIEQvQTEgVXBkYXRlIGNvdW50ZXIgbG9hZCAoMTBiaXQpICovCisjZGVmaW5lIExBUzBfREFDMl9VQ05UICAgMHgwMDUwCS8qICBEL0EyIFVwZGF0ZSBjb3VudGVyIHZhbHVlICgxMCBiaXQpICAgIEQvQTIgVXBkYXRlIGNvdW50ZXIgbG9hZCAoMTBiaXQpICovCisjZGVmaW5lIExBUzBfRENOVCAgICAgICAgMHgwMDU0CS8qICBEZWxheSBjb3VudGVyIHZhbHVlICgxNiBiaXQpICAgICAgICAgIERlbGF5IGNvdW50ZXIgbG9hZCAoMTZiaXQpICovCisjZGVmaW5lIExBUzBfQUNOVCAgICAgICAgMHgwMDU4CS8qICBBYm91dCBjb3VudGVyIHZhbHVlICgxNiBiaXQpICAgICAgICAgIEFib3V0IGNvdW50ZXIgbG9hZCAoMTZiaXQpICovCisjZGVmaW5lIExBUzBfREFDX0NMSyAgICAgMHgwMDVDCS8qICBEQUMgY2xvY2sgdmFsdWUgKDE2Yml0KSAgICAgICAgICAgICAgIERBQyBjbG9jayBsb2FkICgxNmJpdCkgKi8KKyNkZWZpbmUgTEFTMF9VVEMwICAgICAgICAweDAwNjAJLyogIDgyNTQgVEMgQ291bnRlciAwIFVzZXIgVEMgMCB2YWx1ZSAgICAgTG9hZCBjb3VudCBpbiBUQyBDb3VudGVyIDAgKi8KKyNkZWZpbmUgTEFTMF9VVEMxICAgICAgICAweDAwNjQJLyogIDgyNTQgVEMgQ291bnRlciAxIFVzZXIgVEMgMSB2YWx1ZSAgICAgTG9hZCBjb3VudCBpbiBUQyBDb3VudGVyIDEgKi8KKyNkZWZpbmUgTEFTMF9VVEMyICAgICAgICAweDAwNjgJLyogIDgyNTQgVEMgQ291bnRlciAyIFVzZXIgVEMgMiB2YWx1ZSAgICAgTG9hZCBjb3VudCBpbiBUQyBDb3VudGVyIDIgKi8KKyNkZWZpbmUgTEFTMF9VVENfQ1RSTCAgICAweDAwNkMJLyogIDgyNTQgVEMgQ29udHJvbCBXb3JkICAgICAgICAgICAgICAgICAgUHJvZ3JhbSBjb3VudGVyIG1vZGUgZm9yIFRDICovCisjZGVmaW5lIExBUzBfRElPMCAgICAgICAgMHgwMDcwCS8qICBEaWdpdGFsIEkvTyBQb3J0IDAgUmVhZCBQb3J0ICAgICAgICAgIERpZ2l0YWwgSS9PIFBvcnQgMCBXcml0ZSBQb3J0ICovCisjZGVmaW5lIExBUzBfRElPMSAgICAgICAgMHgwMDc0CS8qICBEaWdpdGFsIEkvTyBQb3J0IDEgUmVhZCBQb3J0ICAgICAgICAgIERpZ2l0YWwgSS9PIFBvcnQgMSBXcml0ZSBQb3J0ICovCisjZGVmaW5lIExBUzBfRElPMF9DVFJMICAgMHgwMDc4CS8qICBDbGVhciBkaWdpdGFsIElSUSBzdGF0dXMgZmxhZy9yZWFkICAgIENsZWFyIGRpZ2l0YWwgY2hpcC9wcm9ncmFtIFBvcnQgMCAqLworI2RlZmluZSBMQVMwX0RJT19TVEFUVVMgIDB4MDA3QwkvKiAgUmVhZCBEaWdpdGFsIEkvTyBTdGF0dXMgd29yZCAgICAgICAgICBQcm9ncmFtIGRpZ2l0YWwgY29udHJvbCByZWdpc3RlciAmICovCiAKIC8qCiAgIExBUzAgU2V0dXAgQXJlYQogICBOYW1lCQkJTG9jYWwgQWRkcmVzcwkJCUZ1bmN0aW9uCiAqLwotI2RlZmluZSBMQVMwX0JPQVJEX1JFU0VUICAgICAgICAweDAxMDAJLy8gQm9hcmQgcmVzZXQKLSNkZWZpbmUgTEFTMF9ETUEwX1NSQyAgICAgICAgICAgMHgwMTA0CS8vIERNQSAwIFNvdXJjZXMgc2VsZWN0Ci0jZGVmaW5lIExBUzBfRE1BMV9TUkMgICAgICAgICAgIDB4MDEwOAkvLyBETUEgMSBTb3VyY2VzIHNlbGVjdAotI2RlZmluZSBMQVMwX0FEQ19DT05WRVJTSU9OICAgICAweDAxMEMJLy8gQS9EIENvbnZlcnNpb24gU2lnbmFsIHNlbGVjdAotI2RlZmluZSBMQVMwX0JVUlNUX1NUQVJUICAgICAgICAweDAxMTAJLy8gQnVyc3QgQ2xvY2sgU3RhcnQgVHJpZ2dlciBzZWxlY3QKLSNkZWZpbmUgTEFTMF9QQUNFUl9TVEFSVCAgICAgICAgMHgwMTE0CS8vIFBhY2VyIENsb2NrIFN0YXJ0IFRyaWdnZXIgc2VsZWN0Ci0jZGVmaW5lIExBUzBfUEFDRVJfU1RPUCAgICAgICAgIDB4MDExOAkvLyBQYWNlciBDbG9jayBTdG9wIFRyaWdnZXIgc2VsZWN0Ci0jZGVmaW5lIExBUzBfQUNOVF9TVE9QX0VOQUJMRSAgIDB4MDExQwkvLyBBYm91dCBDb3VudGVyIFN0b3AgRW5hYmxlCi0jZGVmaW5lIExBUzBfUEFDRVJfUkVQRUFUICAgICAgIDB4MDEyMAkvLyBQYWNlciBTdGFydCBUcmlnZ2VyIE1vZGUgc2VsZWN0Ci0jZGVmaW5lIExBUzBfRElOX1NUQVJUICAgICAgICAgIDB4MDEyNAkvLyBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgU2FtcGxpbmcgU2lnbmFsIHNlbGVjdAotI2RlZmluZSBMQVMwX0RJTl9GSUZPX0NMRUFSICAgICAweDAxMjgJLy8gRGlnaXRhbCBJbnB1dCBGSUZPIENsZWFyCi0jZGVmaW5lIExBUzBfQURDX0ZJRk9fQ0xFQVIgICAgIDB4MDEyQwkvLyBBL0QgRklGTyBDbGVhcgotI2RlZmluZSBMQVMwX0NHVF9XUklURSAgICAgICAgICAweDAxMzAJLy8gQ2hhbm5lbCBHYWluIFRhYmxlIFdyaXRlCi0jZGVmaW5lIExBUzBfQ0dMX1dSSVRFICAgICAgICAgIDB4MDEzNAkvLyBDaGFubmVsIEdhaW4gTGF0Y2ggV3JpdGUKLSNkZWZpbmUgTEFTMF9DR19EQVRBICAgICAgICAgICAgMHgwMTM4CS8vIERpZ2l0YWwgVGFibGUgV3JpdGUKLSNkZWZpbmUgTEFTMF9DR1RfRU5BQkxFCQkweDAxM0MJLy8gQ2hhbm5lbCBHYWluIFRhYmxlIEVuYWJsZQotI2RlZmluZSBMQVMwX0NHX0VOQUJMRSAgICAgICAgICAweDAxNDAJLy8gRGlnaXRhbCBUYWJsZSBFbmFibGUKLSNkZWZpbmUgTEFTMF9DR1RfUEFVU0UgICAgICAgICAgMHgwMTQ0CS8vIFRhYmxlIFBhdXNlIEVuYWJsZQotI2RlZmluZSBMQVMwX0NHVF9SRVNFVCAgICAgICAgICAweDAxNDgJLy8gUmVzZXQgQ2hhbm5lbCBHYWluIFRhYmxlCi0jZGVmaW5lIExBUzBfQ0dUX0NMRUFSICAgICAgICAgIDB4MDE0QwkvLyBDbGVhciBDaGFubmVsIEdhaW4gVGFibGUKLSNkZWZpbmUgTEFTMF9EQUMxX0NUUkwgICAgICAgICAgMHgwMTUwCS8vIEQvQTEgb3V0cHV0IHR5cGUvcmFuZ2UKLSNkZWZpbmUgTEFTMF9EQUMxX1NSQyAgICAgICAgICAgMHgwMTU0CS8vIEQvQTEgdXBkYXRlIHNvdXJjZQotI2RlZmluZSBMQVMwX0RBQzFfQ1lDTEUgICAgICAgICAweDAxNTgJLy8gRC9BMSBjeWNsZSBtb2RlCi0jZGVmaW5lIExBUzBfREFDMV9SRVNFVCAgICAgICAgIDB4MDE1QwkvLyBEL0ExIEZJRk8gcmVzZXQKLSNkZWZpbmUgTEFTMF9EQUMxX0ZJRk9fQ0xFQVIgICAgMHgwMTYwCS8vIEQvQTEgRklGTyBjbGVhcgotI2RlZmluZSBMQVMwX0RBQzJfQ1RSTCAgICAgICAgICAweDAxNjQJLy8gRC9BMiBvdXRwdXQgdHlwZS9yYW5nZQotI2RlZmluZSBMQVMwX0RBQzJfU1JDICAgICAgICAgICAweDAxNjgJLy8gRC9BMiB1cGRhdGUgc291cmNlCi0jZGVmaW5lIExBUzBfREFDMl9DWUNMRSAgICAgICAgIDB4MDE2QwkvLyBEL0EyIGN5Y2xlIG1vZGUKLSNkZWZpbmUgTEFTMF9EQUMyX1JFU0VUICAgICAgICAgMHgwMTcwCS8vIEQvQTIgRklGTyByZXNldAotI2RlZmluZSBMQVMwX0RBQzJfRklGT19DTEVBUiAgICAweDAxNzQJLy8gRC9BMiBGSUZPIGNsZWFyCi0jZGVmaW5lIExBUzBfQURDX1NDTlRfU1JDICAgICAgIDB4MDE3OAkvLyBBL0QgU2FtcGxlIENvdW50ZXIgU291cmNlIHNlbGVjdAotI2RlZmluZSBMQVMwX1BBQ0VSX1NFTEVDVCAgICAgICAweDAxODAJLy8gUGFjZXIgQ2xvY2sgc2VsZWN0Ci0jZGVmaW5lIExBUzBfU0JVUzBfU1JDICAgICAgICAgIDB4MDE4NAkvLyBTeW5jQnVzIDAgU291cmNlIHNlbGVjdAotI2RlZmluZSBMQVMwX1NCVVMwX0VOQUJMRSAgICAgICAweDAxODgJLy8gU3luY0J1cyAwIGVuYWJsZQotI2RlZmluZSBMQVMwX1NCVVMxX1NSQyAgICAgICAgICAweDAxOEMJLy8gU3luY0J1cyAxIFNvdXJjZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9TQlVTMV9FTkFCTEUgICAgICAgMHgwMTkwCS8vIFN5bmNCdXMgMSBlbmFibGUKLSNkZWZpbmUgTEFTMF9TQlVTMl9TUkMgICAgICAgICAgMHgwMTk4CS8vIFN5bmNCdXMgMiBTb3VyY2Ugc2VsZWN0Ci0jZGVmaW5lIExBUzBfU0JVUzJfRU5BQkxFICAgICAgIDB4MDE5QwkvLyBTeW5jQnVzIDIgZW5hYmxlCi0jZGVmaW5lIExBUzBfRVRSR19QT0xBUklUWSAgICAgIDB4MDFBNAkvLyBFeHRlcm5hbCBUcmlnZ2VyIHBvbGFyaXR5IHNlbGVjdAotI2RlZmluZSBMQVMwX0VJTlRfUE9MQVJJVFkgICAgICAweDAxQTgJLy8gRXh0ZXJuYWwgSW50ZXJydXB0IHBvbGFyaXR5IHNlbGVjdAotI2RlZmluZSBMQVMwX1VUQzBfQ0xPQ0sgICAgICAgICAweDAxQUMJLy8gVVRDMCBDbG9jayBzZWxlY3QKLSNkZWZpbmUgTEFTMF9VVEMwX0dBVEUgICAgICAgICAgMHgwMUIwCS8vIFVUQzAgR2F0ZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9VVEMxX0NMT0NLICAgICAgICAgMHgwMUI0CS8vIFVUQzEgQ2xvY2sgc2VsZWN0Ci0jZGVmaW5lIExBUzBfVVRDMV9HQVRFICAgICAgICAgIDB4MDFCOAkvLyBVVEMxIEdhdGUgc2VsZWN0Ci0jZGVmaW5lIExBUzBfVVRDMl9DTE9DSyAgICAgICAgIDB4MDFCQwkvLyBVVEMyIENsb2NrIHNlbGVjdAotI2RlZmluZSBMQVMwX1VUQzJfR0FURSAgICAgICAgICAweDAxQzAJLy8gVVRDMiBHYXRlIHNlbGVjdAotI2RlZmluZSBMQVMwX1VPVVQwX1NFTEVDVCAgICAgICAweDAxQzQJLy8gVXNlciBPdXRwdXQgMCBzb3VyY2Ugc2VsZWN0Ci0jZGVmaW5lIExBUzBfVU9VVDFfU0VMRUNUICAgICAgIDB4MDFDOAkvLyBVc2VyIE91dHB1dCAxIHNvdXJjZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9ETUEwX1JFU0VUICAgICAgICAgMHgwMUNDCS8vIERNQTAgUmVxdWVzdCBzdGF0ZSBtYWNoaW5lIHJlc2V0Ci0jZGVmaW5lIExBUzBfRE1BMV9SRVNFVCAgICAgICAgIDB4MDFEMAkvLyBETUExIFJlcXVlc3Qgc3RhdGUgbWFjaGluZSByZXNldAorI2RlZmluZSBMQVMwX0JPQVJEX1JFU0VUICAgICAgICAweDAxMDAJLyogIEJvYXJkIHJlc2V0ICovCisjZGVmaW5lIExBUzBfRE1BMF9TUkMgICAgICAgICAgIDB4MDEwNAkvKiAgRE1BIDAgU291cmNlcyBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9ETUExX1NSQyAgICAgICAgICAgMHgwMTA4CS8qICBETUEgMSBTb3VyY2VzIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0FEQ19DT05WRVJTSU9OICAgICAweDAxMEMJLyogIEEvRCBDb252ZXJzaW9uIFNpZ25hbCBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9CVVJTVF9TVEFSVCAgICAgICAgMHgwMTEwCS8qICBCdXJzdCBDbG9jayBTdGFydCBUcmlnZ2VyIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1BBQ0VSX1NUQVJUICAgICAgICAweDAxMTQJLyogIFBhY2VyIENsb2NrIFN0YXJ0IFRyaWdnZXIgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfUEFDRVJfU1RPUCAgICAgICAgIDB4MDExOAkvKiAgUGFjZXIgQ2xvY2sgU3RvcCBUcmlnZ2VyIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0FDTlRfU1RPUF9FTkFCTEUgICAweDAxMUMJLyogIEFib3V0IENvdW50ZXIgU3RvcCBFbmFibGUgKi8KKyNkZWZpbmUgTEFTMF9QQUNFUl9SRVBFQVQgICAgICAgMHgwMTIwCS8qICBQYWNlciBTdGFydCBUcmlnZ2VyIE1vZGUgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfRElOX1NUQVJUICAgICAgICAgIDB4MDEyNAkvKiAgSGlnaCBTcGVlZCBEaWdpdGFsIElucHV0IFNhbXBsaW5nIFNpZ25hbCBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9ESU5fRklGT19DTEVBUiAgICAgMHgwMTI4CS8qICBEaWdpdGFsIElucHV0IEZJRk8gQ2xlYXIgKi8KKyNkZWZpbmUgTEFTMF9BRENfRklGT19DTEVBUiAgICAgMHgwMTJDCS8qICBBL0QgRklGTyBDbGVhciAqLworI2RlZmluZSBMQVMwX0NHVF9XUklURSAgICAgICAgICAweDAxMzAJLyogIENoYW5uZWwgR2FpbiBUYWJsZSBXcml0ZSAqLworI2RlZmluZSBMQVMwX0NHTF9XUklURSAgICAgICAgICAweDAxMzQJLyogIENoYW5uZWwgR2FpbiBMYXRjaCBXcml0ZSAqLworI2RlZmluZSBMQVMwX0NHX0RBVEEgICAgICAgICAgICAweDAxMzgJLyogIERpZ2l0YWwgVGFibGUgV3JpdGUgKi8KKyNkZWZpbmUgTEFTMF9DR1RfRU5BQkxFCQkweDAxM0MJLyogIENoYW5uZWwgR2FpbiBUYWJsZSBFbmFibGUgKi8KKyNkZWZpbmUgTEFTMF9DR19FTkFCTEUgICAgICAgICAgMHgwMTQwCS8qICBEaWdpdGFsIFRhYmxlIEVuYWJsZSAqLworI2RlZmluZSBMQVMwX0NHVF9QQVVTRSAgICAgICAgICAweDAxNDQJLyogIFRhYmxlIFBhdXNlIEVuYWJsZSAqLworI2RlZmluZSBMQVMwX0NHVF9SRVNFVCAgICAgICAgICAweDAxNDgJLyogIFJlc2V0IENoYW5uZWwgR2FpbiBUYWJsZSAqLworI2RlZmluZSBMQVMwX0NHVF9DTEVBUiAgICAgICAgICAweDAxNEMJLyogIENsZWFyIENoYW5uZWwgR2FpbiBUYWJsZSAqLworI2RlZmluZSBMQVMwX0RBQzFfQ1RSTCAgICAgICAgICAweDAxNTAJLyogIEQvQTEgb3V0cHV0IHR5cGUvcmFuZ2UgKi8KKyNkZWZpbmUgTEFTMF9EQUMxX1NSQyAgICAgICAgICAgMHgwMTU0CS8qICBEL0ExIHVwZGF0ZSBzb3VyY2UgKi8KKyNkZWZpbmUgTEFTMF9EQUMxX0NZQ0xFICAgICAgICAgMHgwMTU4CS8qICBEL0ExIGN5Y2xlIG1vZGUgKi8KKyNkZWZpbmUgTEFTMF9EQUMxX1JFU0VUICAgICAgICAgMHgwMTVDCS8qICBEL0ExIEZJRk8gcmVzZXQgKi8KKyNkZWZpbmUgTEFTMF9EQUMxX0ZJRk9fQ0xFQVIgICAgMHgwMTYwCS8qICBEL0ExIEZJRk8gY2xlYXIgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX0NUUkwgICAgICAgICAgMHgwMTY0CS8qICBEL0EyIG91dHB1dCB0eXBlL3JhbmdlICovCisjZGVmaW5lIExBUzBfREFDMl9TUkMgICAgICAgICAgIDB4MDE2OAkvKiAgRC9BMiB1cGRhdGUgc291cmNlICovCisjZGVmaW5lIExBUzBfREFDMl9DWUNMRSAgICAgICAgIDB4MDE2QwkvKiAgRC9BMiBjeWNsZSBtb2RlICovCisjZGVmaW5lIExBUzBfREFDMl9SRVNFVCAgICAgICAgIDB4MDE3MAkvKiAgRC9BMiBGSUZPIHJlc2V0ICovCisjZGVmaW5lIExBUzBfREFDMl9GSUZPX0NMRUFSICAgIDB4MDE3NAkvKiAgRC9BMiBGSUZPIGNsZWFyICovCisjZGVmaW5lIExBUzBfQURDX1NDTlRfU1JDICAgICAgIDB4MDE3OAkvKiAgQS9EIFNhbXBsZSBDb3VudGVyIFNvdXJjZSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9QQUNFUl9TRUxFQ1QgICAgICAgMHgwMTgwCS8qICBQYWNlciBDbG9jayBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9TQlVTMF9TUkMgICAgICAgICAgMHgwMTg0CS8qICBTeW5jQnVzIDAgU291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1NCVVMwX0VOQUJMRSAgICAgICAweDAxODgJLyogIFN5bmNCdXMgMCBlbmFibGUgKi8KKyNkZWZpbmUgTEFTMF9TQlVTMV9TUkMgICAgICAgICAgMHgwMThDCS8qICBTeW5jQnVzIDEgU291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1NCVVMxX0VOQUJMRSAgICAgICAweDAxOTAJLyogIFN5bmNCdXMgMSBlbmFibGUgKi8KKyNkZWZpbmUgTEFTMF9TQlVTMl9TUkMgICAgICAgICAgMHgwMTk4CS8qICBTeW5jQnVzIDIgU291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1NCVVMyX0VOQUJMRSAgICAgICAweDAxOUMJLyogIFN5bmNCdXMgMiBlbmFibGUgKi8KKyNkZWZpbmUgTEFTMF9FVFJHX1BPTEFSSVRZICAgICAgMHgwMUE0CS8qICBFeHRlcm5hbCBUcmlnZ2VyIHBvbGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0VJTlRfUE9MQVJJVFkgICAgICAweDAxQTgJLyogIEV4dGVybmFsIEludGVycnVwdCBwb2xhcml0eSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9VVEMwX0NMT0NLICAgICAgICAgMHgwMUFDCS8qICBVVEMwIENsb2NrIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzBfR0FURSAgICAgICAgICAweDAxQjAJLyogIFVUQzAgR2F0ZSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9VVEMxX0NMT0NLICAgICAgICAgMHgwMUI0CS8qICBVVEMxIENsb2NrIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzFfR0FURSAgICAgICAgICAweDAxQjgJLyogIFVUQzEgR2F0ZSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9VVEMyX0NMT0NLICAgICAgICAgMHgwMUJDCS8qICBVVEMyIENsb2NrIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzJfR0FURSAgICAgICAgICAweDAxQzAJLyogIFVUQzIgR2F0ZSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9VT1VUMF9TRUxFQ1QgICAgICAgMHgwMUM0CS8qICBVc2VyIE91dHB1dCAwIHNvdXJjZSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9VT1VUMV9TRUxFQ1QgICAgICAgMHgwMUM4CS8qICBVc2VyIE91dHB1dCAxIHNvdXJjZSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9ETUEwX1JFU0VUICAgICAgICAgMHgwMUNDCS8qICBETUEwIFJlcXVlc3Qgc3RhdGUgbWFjaGluZSByZXNldCAqLworI2RlZmluZSBMQVMwX0RNQTFfUkVTRVQgICAgICAgICAweDAxRDAJLyogIERNQTEgUmVxdWVzdCBzdGF0ZSBtYWNoaW5lIHJlc2V0ICovCiAKIC8qCiAgIExBUzEKICAgTmFtZQkJCUxvY2FsIEFkZHJlc3MJCQlGdW5jdGlvbgogKi8KLSNkZWZpbmUgTEFTMV9BRENfRklGTyAgICAgICAgICAgIDB4MDAwMAkvLyBSZWFkIEEvRCBGSUZPICgxNmJpdCkgLQotI2RlZmluZSBMQVMxX0hESU9fRklGTyAgICAgICAgICAgMHgwMDA0CS8vIFJlYWQgSGlnaCBTcGVlZCBEaWdpdGFsIElucHV0IEZJRk8gKDE2Yml0KSAtCi0jZGVmaW5lIExBUzFfREFDMV9GSUZPICAgICAgICAgICAweDAwMDgJLy8gLSBXcml0ZSBEL0ExIEZJRk8gKDE2Yml0KQotI2RlZmluZSBMQVMxX0RBQzJfRklGTyAgICAgICAgICAgMHgwMDBDCS8vIC0gV3JpdGUgRC9BMiBGSUZPICgxNmJpdCkKKyNkZWZpbmUgTEFTMV9BRENfRklGTyAgICAgICAgICAgIDB4MDAwMAkvKiAgUmVhZCBBL0QgRklGTyAoMTZiaXQpIC0gKi8KKyNkZWZpbmUgTEFTMV9IRElPX0ZJRk8gICAgICAgICAgIDB4MDAwNAkvKiAgUmVhZCBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgRklGTyAoMTZiaXQpIC0gKi8KKyNkZWZpbmUgTEFTMV9EQUMxX0ZJRk8gICAgICAgICAgIDB4MDAwOAkvKiAgLSBXcml0ZSBEL0ExIEZJRk8gKDE2Yml0KSAqLworI2RlZmluZSBMQVMxX0RBQzJfRklGTyAgICAgICAgICAgMHgwMDBDCS8qICAtIFdyaXRlIEQvQTIgRklGTyAoMTZiaXQpICovCiAKIC8qCiAgIExDRkc6IFBMWCA5MDgwIGxvY2FsIGNvbmZpZyAmIHJ1bnRpbWUgcmVnaXN0ZXJzCiAgIE5hbWUJCQlMb2NhbCBBZGRyZXNzCQkJRnVuY3Rpb24KICovCi0jZGVmaW5lIExDRkdfSVRDU1IgICAgICAgICAgICAgIDB4MDA2OAkvLyBJTlRDU1IsIEludGVycnVwdCBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQU1PREUwICAgICAgICAgICAweDAwODAJLy8gRE1BIENoYW5uZWwgMCBNb2RlIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BUEFEUjAgICAgICAgICAgIDB4MDA4NAkvLyBETUEgQ2hhbm5lbCAwIFBDSSBBZGRyZXNzIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BTEFEUjAgICAgICAgICAgIDB4MDA4OAkvLyBETUEgQ2hhbm5lbCAwIExvY2FsIEFkZHJlc3MgUmVnCi0jZGVmaW5lIExDRkdfRE1BU0laMCAgICAgICAgICAgIDB4MDA4QwkvLyBETUEgQ2hhbm5lbCAwIFRyYW5zZmVyIFNpemUgKEJ5dGVzKSBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQURQUjAgICAgICAgICAgICAweDAwOTAJLy8gRE1BIENoYW5uZWwgMCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFNT0RFMSAgICAgICAgICAgMHgwMDk0CS8vIERNQSBDaGFubmVsIDEgTW9kZSBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQVBBRFIxICAgICAgICAgICAweDAwOTgJLy8gRE1BIENoYW5uZWwgMSBQQ0kgQWRkcmVzcyBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQUxBRFIxICAgICAgICAgICAweDAwOUMJLy8gRE1BIENoYW5uZWwgMSBMb2NhbCBBZGRyZXNzIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BU0laMSAgICAgICAgICAgIDB4MDBBMAkvLyBETUEgQ2hhbm5lbCAxIFRyYW5zZmVyIFNpemUgKEJ5dGVzKSBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQURQUjEgICAgICAgICAgICAweDAwQTQJLy8gRE1BIENoYW5uZWwgMSBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFDU1IwICAgICAgICAgICAgMHgwMEE4CS8vIERNQSBDaGFubmVsIDAgQ29tbWFuZC9TdGF0dXMgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFDU1IxICAgICAgICAgICAgMHgwMEE5CS8vIERNQSBDaGFubmVsIDAgQ29tbWFuZC9TdGF0dXMgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFBUkIgICAgICAgICAgICAgMHgwMEFDCS8vIERNQSBBcmJpdHJhdGlvbiBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQVRIUiAgICAgICAgICAgICAweDAwQjAJLy8gRE1BIFRocmVzaG9sZCBSZWdpc3RlcgorI2RlZmluZSBMQ0ZHX0lUQ1NSICAgICAgICAgICAgICAweDAwNjgJLyogIElOVENTUiwgSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BTU9ERTAgICAgICAgICAgIDB4MDA4MAkvKiAgRE1BIENoYW5uZWwgMCBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BUEFEUjAgICAgICAgICAgIDB4MDA4NAkvKiAgRE1BIENoYW5uZWwgMCBQQ0kgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBMQ0ZHX0RNQUxBRFIwICAgICAgICAgICAweDAwODgJLyogIERNQSBDaGFubmVsIDAgTG9jYWwgQWRkcmVzcyBSZWcgKi8KKyNkZWZpbmUgTENGR19ETUFTSVowICAgICAgICAgICAgMHgwMDhDCS8qICBETUEgQ2hhbm5lbCAwIFRyYW5zZmVyIFNpemUgKEJ5dGVzKSBSZWdpc3RlciAqLworI2RlZmluZSBMQ0ZHX0RNQURQUjAgICAgICAgICAgICAweDAwOTAJLyogIERNQSBDaGFubmVsIDAgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BTU9ERTEgICAgICAgICAgIDB4MDA5NAkvKiAgRE1BIENoYW5uZWwgMSBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BUEFEUjEgICAgICAgICAgIDB4MDA5OAkvKiAgRE1BIENoYW5uZWwgMSBQQ0kgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBMQ0ZHX0RNQUxBRFIxICAgICAgICAgICAweDAwOUMJLyogIERNQSBDaGFubmVsIDEgTG9jYWwgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBMQ0ZHX0RNQVNJWjEgICAgICAgICAgICAweDAwQTAJLyogIERNQSBDaGFubmVsIDEgVHJhbnNmZXIgU2l6ZSAoQnl0ZXMpIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BRFBSMSAgICAgICAgICAgIDB4MDBBNAkvKiAgRE1BIENoYW5uZWwgMSBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFDU1IwICAgICAgICAgICAgMHgwMEE4CS8qICBETUEgQ2hhbm5lbCAwIENvbW1hbmQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BQ1NSMSAgICAgICAgICAgIDB4MDBBOQkvKiAgRE1BIENoYW5uZWwgMCBDb21tYW5kL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBMQ0ZHX0RNQUFSQiAgICAgICAgICAgICAweDAwQUMJLyogIERNQSBBcmJpdHJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBMQ0ZHX0RNQVRIUiAgICAgICAgICAgICAweDAwQjAJLyogIERNQSBUaHJlc2hvbGQgUmVnaXN0ZXIgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFJlc2lzdGVyIGJpdCBkZWZpbml0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLS8vIEZJRk8gU3RhdHVzIFdvcmQgQml0cyAoUnRkRmlmb1N0YXR1cykKLSNkZWZpbmUgRlNfREFDMV9OT1RfRU1QVFkgICAgMHgwMDAxCS8vIEQwICAtIERBQzEgRklGTyBub3QgZW1wdHkKLSNkZWZpbmUgRlNfREFDMV9IRU1QVFkgICAweDAwMDIJLy8gRDEgIC0gREFDMSBGSUZPIGhhbGYgZW1wdHkKLSNkZWZpbmUgRlNfREFDMV9OT1RfRlVMTCAgICAgMHgwMDA0CS8vIEQyICAtIERBQzEgRklGTyBub3QgZnVsbAotI2RlZmluZSBGU19EQUMyX05PVF9FTVBUWSAgICAweDAwMTAJLy8gRDQgIC0gREFDMiBGSUZPIG5vdCBlbXB0eQotI2RlZmluZSBGU19EQUMyX0hFTVBUWSAgIDB4MDAyMAkvLyBENSAgLSBEQUMyIEZJRk8gaGFsZiBlbXB0eQotI2RlZmluZSBGU19EQUMyX05PVF9GVUxMICAgICAweDAwNDAJLy8gRDYgIC0gREFDMiBGSUZPIG5vdCBmdWxsCi0jZGVmaW5lIEZTX0FEQ19OT1RfRU1QVFkgICAgIDB4MDEwMAkvLyBEOCAgLSBBREMgRklGTyBub3QgZW1wdHkKLSNkZWZpbmUgRlNfQURDX0hFTVBUWSAgICAweDAyMDAJLy8gRDkgIC0gQURDIEZJRk8gaGFsZiBlbXB0eQotI2RlZmluZSBGU19BRENfTk9UX0ZVTEwgICAgICAweDA0MDAJLy8gRDEwIC0gQURDIEZJRk8gbm90IGZ1bGwKLSNkZWZpbmUgRlNfRElOX05PVF9FTVBUWSAgICAgMHgxMDAwCS8vIEQxMiAtIERJTiBGSUZPIG5vdCBlbXB0eQotI2RlZmluZSBGU19ESU5fSEVNUFRZICAgIDB4MjAwMAkvLyBEMTMgLSBESU4gRklGTyBoYWxmIGVtcHR5Ci0jZGVmaW5lIEZTX0RJTl9OT1RfRlVMTCAgICAgIDB4NDAwMAkvLyBEMTQgLSBESU4gRklGTyBub3QgZnVsbAorLyogIEZJRk8gU3RhdHVzIFdvcmQgQml0cyAoUnRkRmlmb1N0YXR1cykgKi8KKyNkZWZpbmUgRlNfREFDMV9OT1RfRU1QVFkgICAgMHgwMDAxCS8qICBEMCAgLSBEQUMxIEZJRk8gbm90IGVtcHR5ICovCisjZGVmaW5lIEZTX0RBQzFfSEVNUFRZICAgMHgwMDAyCS8qICBEMSAgLSBEQUMxIEZJRk8gaGFsZiBlbXB0eSAqLworI2RlZmluZSBGU19EQUMxX05PVF9GVUxMICAgICAweDAwMDQJLyogIEQyICAtIERBQzEgRklGTyBub3QgZnVsbCAqLworI2RlZmluZSBGU19EQUMyX05PVF9FTVBUWSAgICAweDAwMTAJLyogIEQ0ICAtIERBQzIgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgRlNfREFDMl9IRU1QVFkgICAweDAwMjAJLyogIEQ1ICAtIERBQzIgRklGTyBoYWxmIGVtcHR5ICovCisjZGVmaW5lIEZTX0RBQzJfTk9UX0ZVTEwgICAgIDB4MDA0MAkvKiAgRDYgIC0gREFDMiBGSUZPIG5vdCBmdWxsICovCisjZGVmaW5lIEZTX0FEQ19OT1RfRU1QVFkgICAgIDB4MDEwMAkvKiAgRDggIC0gQURDIEZJRk8gbm90IGVtcHR5ICovCisjZGVmaW5lIEZTX0FEQ19IRU1QVFkgICAgMHgwMjAwCS8qICBEOSAgLSBBREMgRklGTyBoYWxmIGVtcHR5ICovCisjZGVmaW5lIEZTX0FEQ19OT1RfRlVMTCAgICAgIDB4MDQwMAkvKiAgRDEwIC0gQURDIEZJRk8gbm90IGZ1bGwgKi8KKyNkZWZpbmUgRlNfRElOX05PVF9FTVBUWSAgICAgMHgxMDAwCS8qICBEMTIgLSBESU4gRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgRlNfRElOX0hFTVBUWSAgICAweDIwMDAJLyogIEQxMyAtIERJTiBGSUZPIGhhbGYgZW1wdHkgKi8KKyNkZWZpbmUgRlNfRElOX05PVF9GVUxMICAgICAgMHg0MDAwCS8qICBEMTQgLSBESU4gRklGTyBub3QgZnVsbCAqLwogCi0vLyBUaW1lciBTdGF0dXMgV29yZCBCaXRzIChHZXRUaW1lclN0YXR1cykKKy8qICBUaW1lciBTdGF0dXMgV29yZCBCaXRzIChHZXRUaW1lclN0YXR1cykgKi8KICNkZWZpbmUgVFNfUENMS19HQVRFICAgMHgwMDAxCi0vLyBEMCAtIFBhY2VyIENsb2NrIEdhdGUgWzAgLSBnYXRlZCwgMSAtIGVuYWJsZWRdCisvKiAgRDAgLSBQYWNlciBDbG9jayBHYXRlIFswIC0gZ2F0ZWQsIDEgLSBlbmFibGVkXSAqLwogI2RlZmluZSBUU19CQ0xLX0dBVEUgICAweDAwMDIKLS8vIEQxIC0gQnVyc3QgQ2xvY2sgR2F0ZSBbMCAtIGRpc2FibGVkLCAxIC0gcnVubmluZ10KKy8qICBEMSAtIEJ1cnN0IENsb2NrIEdhdGUgWzAgLSBkaXNhYmxlZCwgMSAtIHJ1bm5pbmddICovCiAjZGVmaW5lIFRTX0RDTlRfR0FURSAgIDB4MDAwNAotLy8gRDIgLSBQYWNlciBDbG9jayBEZWxheWVkIFN0YXJ0IFRyaWdnZXIgWzAgLSBkZWxheSBvdmVyLCAxIC0gZGVsYXkgaW4KLS8vIHByb2dyZXNzXQorLyogIEQyIC0gUGFjZXIgQ2xvY2sgRGVsYXllZCBTdGFydCBUcmlnZ2VyIFswIC0gZGVsYXkgb3ZlciwgMSAtIGRlbGF5IGluICovCisvKiAgcHJvZ3Jlc3NdICovCiAjZGVmaW5lIFRTX0FDTlRfR0FURSAgIDB4MDAwOAotLy8gRDMgLSBQYWNlciBDbG9jayBBYm91dCBUcmlnZ2VyIFswIC0gY29tcGxldGVkLCAxIC0gaW4gcHJvZ3Jlc3NdCisvKiAgRDMgLSBQYWNlciBDbG9jayBBYm91dCBUcmlnZ2VyIFswIC0gY29tcGxldGVkLCAxIC0gaW4gcHJvZ3Jlc3NdICovCiAjZGVmaW5lIFRTX1BDTEtfUlVOICAgIDB4MDAxMAotLy8gRDQgLSBQYWNlciBDbG9jayBTaHV0ZG93biBGbGFnIFswIC0gUGFjZXIgQ2xvY2sgY2Fubm90IGJlIHN0YXJ0Ci0vLyB0cmlnZ2VyZWQgb25seSBieSBTb2Z0d2FyZSBQYWNlciBTdGFydCBDb21tYW5kLCAxIC0gUGFjZXIgQ2xvY2sgY2FuCi0vLyBiZSBzdGFydCB0cmlnZ2VyZWRdCisvKiAgRDQgLSBQYWNlciBDbG9jayBTaHV0ZG93biBGbGFnIFswIC0gUGFjZXIgQ2xvY2sgY2Fubm90IGJlIHN0YXJ0ICovCisvKiAgdHJpZ2dlcmVkIG9ubHkgYnkgU29mdHdhcmUgUGFjZXIgU3RhcnQgQ29tbWFuZCwgMSAtIFBhY2VyIENsb2NrIGNhbiAqLworLyogIGJlIHN0YXJ0IHRyaWdnZXJlZF0gKi8KIAotLy8gRXh0ZXJuYWwgVHJpZ2dlciBwb2xhcml0eSBzZWxlY3QKLS8vIEV4dGVybmFsIEludGVycnVwdCBwb2xhcml0eSBzZWxlY3QKLSNkZWZpbmUgUE9MX1BPU0lUSVZFICAgICAgICAgMHgwCS8vIHBvc2l0aXZlIGVkZ2UKLSNkZWZpbmUgUE9MX05FR0FUSVZFICAgICAgICAgMHgxCS8vIG5lZ2F0aXZlIGVkZ2UKKy8qICBFeHRlcm5hbCBUcmlnZ2VyIHBvbGFyaXR5IHNlbGVjdCAqLworLyogIEV4dGVybmFsIEludGVycnVwdCBwb2xhcml0eSBzZWxlY3QgKi8KKyNkZWZpbmUgUE9MX1BPU0lUSVZFICAgICAgICAgMHgwCS8qICBwb3NpdGl2ZSBlZGdlICovCisjZGVmaW5lIFBPTF9ORUdBVElWRSAgICAgICAgIDB4MQkvKiAgbmVnYXRpdmUgZWRnZSAqLwogCi0vLyBVc2VyIE91dHB1dCBTaWduYWwgc2VsZWN0IChTZXRVb3V0MFNvdXJjZSwgU2V0VW91dDFTb3VyY2UpCi0jZGVmaW5lIFVPVVRfQURDICAgICAgICAgICAgICAgIDB4MAkvLyBBL0QgQ29udmVyc2lvbiBTaWduYWwKLSNkZWZpbmUgVU9VVF9EQUMxICAgICAgICAgICAgICAgMHgxCS8vIEQvQTEgVXBkYXRlCi0jZGVmaW5lIFVPVVRfREFDMiAgICAgICAgICAgICAgIDB4MgkvLyBEL0EyIFVwZGF0ZQotI2RlZmluZSBVT1VUX1NPRlRXQVJFICAgICAgICAgICAweDMJLy8gU29mdHdhcmUgUHJvZ3JhbW1hYmxlCisvKiAgVXNlciBPdXRwdXQgU2lnbmFsIHNlbGVjdCAoU2V0VW91dDBTb3VyY2UsIFNldFVvdXQxU291cmNlKSAqLworI2RlZmluZSBVT1VUX0FEQyAgICAgICAgICAgICAgICAweDAJLyogIEEvRCBDb252ZXJzaW9uIFNpZ25hbCAqLworI2RlZmluZSBVT1VUX0RBQzEgICAgICAgICAgICAgICAweDEJLyogIEQvQTEgVXBkYXRlICovCisjZGVmaW5lIFVPVVRfREFDMiAgICAgICAgICAgICAgIDB4MgkvKiAgRC9BMiBVcGRhdGUgKi8KKyNkZWZpbmUgVU9VVF9TT0ZUV0FSRSAgICAgICAgICAgMHgzCS8qICBTb2Z0d2FyZSBQcm9ncmFtbWFibGUgKi8KIAotLy8gUGFjZXIgY2xvY2sgc2VsZWN0IChTZXRQYWNlclNvdXJjZSkKLSNkZWZpbmUgUENMS19JTlRFUk5BTCAgICAgICAgICAgMQkvLyBJbnRlcm5hbCBQYWNlciBDbG9jawotI2RlZmluZSBQQ0xLX0VYVEVSTkFMICAgICAgICAgICAwCS8vIEV4dGVybmFsIFBhY2VyIENsb2NrCisvKiAgUGFjZXIgY2xvY2sgc2VsZWN0IChTZXRQYWNlclNvdXJjZSkgKi8KKyNkZWZpbmUgUENMS19JTlRFUk5BTCAgICAgICAgICAgMQkvKiAgSW50ZXJuYWwgUGFjZXIgQ2xvY2sgKi8KKyNkZWZpbmUgUENMS19FWFRFUk5BTCAgICAgICAgICAgMAkvKiAgRXh0ZXJuYWwgUGFjZXIgQ2xvY2sgKi8KIAotLy8gQS9EIFNhbXBsZSBDb3VudGVyIFNvdXJjZXMgKFNldEFkY250U291cmNlLCBTZXR1cFNhbXBsZUNvdW50ZXIpCi0jZGVmaW5lIEFEQ19TQ05UX0NHVF9SRVNFVCAgICAgICAgIDB4MAkvLyBuZWVkcyByZXN0YXJ0IHdpdGggU3RhcnRQYWNlcgorLyogIEEvRCBTYW1wbGUgQ291bnRlciBTb3VyY2VzIChTZXRBZGNudFNvdXJjZSwgU2V0dXBTYW1wbGVDb3VudGVyKSAqLworI2RlZmluZSBBRENfU0NOVF9DR1RfUkVTRVQgICAgICAgICAweDAJLyogIG5lZWRzIHJlc3RhcnQgd2l0aCBTdGFydFBhY2VyICovCiAjZGVmaW5lIEFEQ19TQ05UX0ZJRk9fV1JJVEUgICAgICAgIDB4MQogCi0vLyBBL0QgQ29udmVyc2lvbiBTaWduYWwgU2VsZWN0IChmb3IgU2V0Q29udmVyc2lvblNlbGVjdCkKLSNkZWZpbmUgQURDX1NUQVJUX1NPRlRXQVJFICAgICAgICAgMHgwCS8vIFNvZnR3YXJlIEEvRCBTdGFydAotI2RlZmluZSBBRENfU1RBUlRfUENMSyAgICAgICAgICAgICAweDEJLy8gUGFjZXIgQ2xvY2sgKEV4dC4gSW50LiBzZWUgRnVuYy41MDkpCi0jZGVmaW5lIEFEQ19TVEFSVF9CQ0xLICAgICAgICAgICAgIDB4MgkvLyBCdXJzdCBDbG9jawotI2RlZmluZSBBRENfU1RBUlRfRElHSVRBTF9JVCAgICAgICAweDMJLy8gRGlnaXRhbCBJbnRlcnJ1cHQKLSNkZWZpbmUgQURDX1NUQVJUX0RBQzFfTUFSS0VSMSAgICAgMHg0CS8vIEQvQSAxIERhdGEgTWFya2VyIDEKLSNkZWZpbmUgQURDX1NUQVJUX0RBQzJfTUFSS0VSMSAgICAgMHg1CS8vIEQvQSAyIERhdGEgTWFya2VyIDEKLSNkZWZpbmUgQURDX1NUQVJUX1NCVVMwICAgICAgICAgICAgMHg2CS8vIFN5bmNCdXMgMAotI2RlZmluZSBBRENfU1RBUlRfU0JVUzEgICAgICAgICAgICAweDcJLy8gU3luY0J1cyAxCi0jZGVmaW5lIEFEQ19TVEFSVF9TQlVTMiAgICAgICAgICAgIDB4OAkvLyBTeW5jQnVzIDIKKy8qICBBL0QgQ29udmVyc2lvbiBTaWduYWwgU2VsZWN0IChmb3IgU2V0Q29udmVyc2lvblNlbGVjdCkgKi8KKyNkZWZpbmUgQURDX1NUQVJUX1NPRlRXQVJFICAgICAgICAgMHgwCS8qICBTb2Z0d2FyZSBBL0QgU3RhcnQgKi8KKyNkZWZpbmUgQURDX1NUQVJUX1BDTEsgICAgICAgICAgICAgMHgxCS8qICBQYWNlciBDbG9jayAoRXh0LiBJbnQuIHNlZSBGdW5jLjUwOSkgKi8KKyNkZWZpbmUgQURDX1NUQVJUX0JDTEsgICAgICAgICAgICAgMHgyCS8qICBCdXJzdCBDbG9jayAqLworI2RlZmluZSBBRENfU1RBUlRfRElHSVRBTF9JVCAgICAgICAweDMJLyogIERpZ2l0YWwgSW50ZXJydXB0ICovCisjZGVmaW5lIEFEQ19TVEFSVF9EQUMxX01BUktFUjEgICAgIDB4NAkvKiAgRC9BIDEgRGF0YSBNYXJrZXIgMSAqLworI2RlZmluZSBBRENfU1RBUlRfREFDMl9NQVJLRVIxICAgICAweDUJLyogIEQvQSAyIERhdGEgTWFya2VyIDEgKi8KKyNkZWZpbmUgQURDX1NUQVJUX1NCVVMwICAgICAgICAgICAgMHg2CS8qICBTeW5jQnVzIDAgKi8KKyNkZWZpbmUgQURDX1NUQVJUX1NCVVMxICAgICAgICAgICAgMHg3CS8qICBTeW5jQnVzIDEgKi8KKyNkZWZpbmUgQURDX1NUQVJUX1NCVVMyICAgICAgICAgICAgMHg4CS8qICBTeW5jQnVzIDIgKi8KIAotLy8gQnVyc3QgQ2xvY2sgc3RhcnQgdHJpZ2dlciBzZWxlY3QgKFNldEJ1cnN0U3RhcnQpCi0jZGVmaW5lIEJDTEtfU1RBUlRfU09GVFdBUkUgICAgICAgIDB4MAkvLyBTb2Z0d2FyZSBBL0QgU3RhcnQgKFN0YXJ0QnVyc3QpCi0jZGVmaW5lIEJDTEtfU1RBUlRfUENMSyAgICAgICAgICAgIDB4MQkvLyBQYWNlciBDbG9jawotI2RlZmluZSBCQ0xLX1NUQVJUX0VUUklHICAgICAgICAgICAweDIJLy8gRXh0ZXJuYWwgVHJpZ2dlcgotI2RlZmluZSBCQ0xLX1NUQVJUX0RJR0lUQUxfSVQgICAgICAweDMJLy8gRGlnaXRhbCBJbnRlcnJ1cHQKLSNkZWZpbmUgQkNMS19TVEFSVF9TQlVTMCAgICAgICAgICAgMHg0CS8vIFN5bmNCdXMgMAotI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMxICAgICAgICAgICAweDUJLy8gU3luY0J1cyAxCi0jZGVmaW5lIEJDTEtfU1RBUlRfU0JVUzIgICAgICAgICAgIDB4NgkvLyBTeW5jQnVzIDIKKy8qICBCdXJzdCBDbG9jayBzdGFydCB0cmlnZ2VyIHNlbGVjdCAoU2V0QnVyc3RTdGFydCkgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9TT0ZUV0FSRSAgICAgICAgMHgwCS8qICBTb2Z0d2FyZSBBL0QgU3RhcnQgKFN0YXJ0QnVyc3QpICovCisjZGVmaW5lIEJDTEtfU1RBUlRfUENMSyAgICAgICAgICAgIDB4MQkvKiAgUGFjZXIgQ2xvY2sgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9FVFJJRyAgICAgICAgICAgMHgyCS8qICBFeHRlcm5hbCBUcmlnZ2VyICovCisjZGVmaW5lIEJDTEtfU1RBUlRfRElHSVRBTF9JVCAgICAgIDB4MwkvKiAgRGlnaXRhbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9TQlVTMCAgICAgICAgICAgMHg0CS8qICBTeW5jQnVzIDAgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9TQlVTMSAgICAgICAgICAgMHg1CS8qICBTeW5jQnVzIDEgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9TQlVTMiAgICAgICAgICAgMHg2CS8qICBTeW5jQnVzIDIgKi8KIAotLy8gUGFjZXIgQ2xvY2sgc3RhcnQgdHJpZ2dlciBzZWxlY3QgKFNldFBhY2VyU3RhcnQpCi0jZGVmaW5lIFBDTEtfU1RBUlRfU09GVFdBUkUgICAgICAgIDB4MAkvLyBTb2Z0d2FyZSBQYWNlciBTdGFydCAoU3RhcnRQYWNlcikKLSNkZWZpbmUgUENMS19TVEFSVF9FVFJJRyAgICAgICAgICAgMHgxCS8vIEV4dGVybmFsIHRyaWdnZXIKLSNkZWZpbmUgUENMS19TVEFSVF9ESUdJVEFMX0lUICAgICAgMHgyCS8vIERpZ2l0YWwgaW50ZXJydXB0Ci0jZGVmaW5lIFBDTEtfU1RBUlRfVVRDMiAgICAgICAgICAgIDB4MwkvLyBVc2VyIFRDIDIgb3V0Ci0jZGVmaW5lIFBDTEtfU1RBUlRfU0JVUzAgICAgICAgICAgIDB4NAkvLyBTeW5jQnVzIDAKLSNkZWZpbmUgUENMS19TVEFSVF9TQlVTMSAgICAgICAgICAgMHg1CS8vIFN5bmNCdXMgMQotI2RlZmluZSBQQ0xLX1NUQVJUX1NCVVMyICAgICAgICAgICAweDYJLy8gU3luY0J1cyAyCi0jZGVmaW5lIFBDTEtfU1RBUlRfRF9TT0ZUV0FSRSAgICAgIDB4OAkvLyBEZWxheWVkIFNvZnR3YXJlIFBhY2VyIFN0YXJ0Ci0jZGVmaW5lIFBDTEtfU1RBUlRfRF9FVFJJRyAgICAgICAgIDB4OQkvLyBEZWxheWVkIGV4dGVybmFsIHRyaWdnZXIKLSNkZWZpbmUgUENMS19TVEFSVF9EX0RJR0lUQUxfSVQgICAgMHhBCS8vIERlbGF5ZWQgZGlnaXRhbCBpbnRlcnJ1cHQKLSNkZWZpbmUgUENMS19TVEFSVF9EX1VUQzIgICAgICAgICAgMHhCCS8vIERlbGF5ZWQgVXNlciBUQyAyIG91dAotI2RlZmluZSBQQ0xLX1NUQVJUX0RfU0JVUzAgICAgICAgICAweEMJLy8gRGVsYXllZCBTeW5jQnVzIDAKLSNkZWZpbmUgUENMS19TVEFSVF9EX1NCVVMxICAgICAgICAgMHhECS8vIERlbGF5ZWQgU3luY0J1cyAxCi0jZGVmaW5lIFBDTEtfU1RBUlRfRF9TQlVTMiAgICAgICAgIDB4RQkvLyBEZWxheWVkIFN5bmNCdXMgMgotI2RlZmluZSBQQ0xLX1NUQVJUX0VUUklHX0dBVEVEICAgICAweEYJLy8gRXh0ZXJuYWwgVHJpZ2dlciBHYXRlZCBjb250cm9sbGVkIG1vZGUKKy8qICBQYWNlciBDbG9jayBzdGFydCB0cmlnZ2VyIHNlbGVjdCAoU2V0UGFjZXJTdGFydCkgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9TT0ZUV0FSRSAgICAgICAgMHgwCS8qICBTb2Z0d2FyZSBQYWNlciBTdGFydCAoU3RhcnRQYWNlcikgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9FVFJJRyAgICAgICAgICAgMHgxCS8qICBFeHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRElHSVRBTF9JVCAgICAgIDB4MgkvKiAgRGlnaXRhbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9VVEMyICAgICAgICAgICAgMHgzCS8qICBVc2VyIFRDIDIgb3V0ICovCisjZGVmaW5lIFBDTEtfU1RBUlRfU0JVUzAgICAgICAgICAgIDB4NAkvKiAgU3luY0J1cyAwICovCisjZGVmaW5lIFBDTEtfU1RBUlRfU0JVUzEgICAgICAgICAgIDB4NQkvKiAgU3luY0J1cyAxICovCisjZGVmaW5lIFBDTEtfU1RBUlRfU0JVUzIgICAgICAgICAgIDB4NgkvKiAgU3luY0J1cyAyICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRF9TT0ZUV0FSRSAgICAgIDB4OAkvKiAgRGVsYXllZCBTb2Z0d2FyZSBQYWNlciBTdGFydCAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0RfRVRSSUcgICAgICAgICAweDkJLyogIERlbGF5ZWQgZXh0ZXJuYWwgdHJpZ2dlciAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0RfRElHSVRBTF9JVCAgICAweEEJLyogIERlbGF5ZWQgZGlnaXRhbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9EX1VUQzIgICAgICAgICAgMHhCCS8qICBEZWxheWVkIFVzZXIgVEMgMiBvdXQgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9EX1NCVVMwICAgICAgICAgMHhDCS8qICBEZWxheWVkIFN5bmNCdXMgMCAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0RfU0JVUzEgICAgICAgICAweEQJLyogIERlbGF5ZWQgU3luY0J1cyAxICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRF9TQlVTMiAgICAgICAgIDB4RQkvKiAgRGVsYXllZCBTeW5jQnVzIDIgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9FVFJJR19HQVRFRCAgICAgMHhGCS8qICBFeHRlcm5hbCBUcmlnZ2VyIEdhdGVkIGNvbnRyb2xsZWQgbW9kZSAqLwogCi0vLyBQYWNlciBDbG9jayBTdG9wIFRyaWdnZXIgc2VsZWN0IChTZXRQYWNlclN0b3ApCi0jZGVmaW5lIFBDTEtfU1RPUF9TT0ZUV0FSRSAgICAgICAgIDB4MAkvLyBTb2Z0d2FyZSBQYWNlciBTdG9wIChTdG9wUGFjZXIpCi0jZGVmaW5lIFBDTEtfU1RPUF9FVFJJRyAgICAgICAgICAgIDB4MQkvLyBFeHRlcm5hbCBUcmlnZ2VyCi0jZGVmaW5lIFBDTEtfU1RPUF9ESUdJVEFMX0lUICAgICAgIDB4MgkvLyBEaWdpdGFsIEludGVycnVwdAotI2RlZmluZSBQQ0xLX1NUT1BfQUNOVCAgICAgICAgICAgICAweDMJLy8gQWJvdXQgQ291bnRlcgotI2RlZmluZSBQQ0xLX1NUT1BfVVRDMiAgICAgICAgICAgICAweDQJLy8gVXNlciBUQzIgb3V0Ci0jZGVmaW5lIFBDTEtfU1RPUF9TQlVTMCAgICAgICAgICAgIDB4NQkvLyBTeW5jQnVzIDAKLSNkZWZpbmUgUENMS19TVE9QX1NCVVMxICAgICAgICAgICAgMHg2CS8vIFN5bmNCdXMgMQotI2RlZmluZSBQQ0xLX1NUT1BfU0JVUzIgICAgICAgICAgICAweDcJLy8gU3luY0J1cyAyCi0jZGVmaW5lIFBDTEtfU1RPUF9BX1NPRlRXQVJFICAgICAgIDB4OAkvLyBBYm91dCBTb2Z0d2FyZSBQYWNlciBTdG9wCi0jZGVmaW5lIFBDTEtfU1RPUF9BX0VUUklHICAgICAgICAgIDB4OQkvLyBBYm91dCBFeHRlcm5hbCBUcmlnZ2VyCi0jZGVmaW5lIFBDTEtfU1RPUF9BX0RJR0lUQUxfSVQgICAgIDB4QQkvLyBBYm91dCBEaWdpdGFsIEludGVycnVwdAotI2RlZmluZSBQQ0xLX1NUT1BfQV9VVEMyICAgICAgICAgICAweEMJLy8gQWJvdXQgVXNlciBUQzIgb3V0Ci0jZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMwICAgICAgICAgIDB4RAkvLyBBYm91dCBTeW5jQnVzIDAKLSNkZWZpbmUgUENMS19TVE9QX0FfU0JVUzEgICAgICAgICAgMHhFCS8vIEFib3V0IFN5bmNCdXMgMQotI2RlZmluZSBQQ0xLX1NUT1BfQV9TQlVTMiAgICAgICAgICAweEYJLy8gQWJvdXQgU3luY0J1cyAyCisvKiAgUGFjZXIgQ2xvY2sgU3RvcCBUcmlnZ2VyIHNlbGVjdCAoU2V0UGFjZXJTdG9wKSAqLworI2RlZmluZSBQQ0xLX1NUT1BfU09GVFdBUkUgICAgICAgICAweDAJLyogIFNvZnR3YXJlIFBhY2VyIFN0b3AgKFN0b3BQYWNlcikgKi8KKyNkZWZpbmUgUENMS19TVE9QX0VUUklHICAgICAgICAgICAgMHgxCS8qICBFeHRlcm5hbCBUcmlnZ2VyICovCisjZGVmaW5lIFBDTEtfU1RPUF9ESUdJVEFMX0lUICAgICAgIDB4MgkvKiAgRGlnaXRhbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUENMS19TVE9QX0FDTlQgICAgICAgICAgICAgMHgzCS8qICBBYm91dCBDb3VudGVyICovCisjZGVmaW5lIFBDTEtfU1RPUF9VVEMyICAgICAgICAgICAgIDB4NAkvKiAgVXNlciBUQzIgb3V0ICovCisjZGVmaW5lIFBDTEtfU1RPUF9TQlVTMCAgICAgICAgICAgIDB4NQkvKiAgU3luY0J1cyAwICovCisjZGVmaW5lIFBDTEtfU1RPUF9TQlVTMSAgICAgICAgICAgIDB4NgkvKiAgU3luY0J1cyAxICovCisjZGVmaW5lIFBDTEtfU1RPUF9TQlVTMiAgICAgICAgICAgIDB4NwkvKiAgU3luY0J1cyAyICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1NPRlRXQVJFICAgICAgIDB4OAkvKiAgQWJvdXQgU29mdHdhcmUgUGFjZXIgU3RvcCAqLworI2RlZmluZSBQQ0xLX1NUT1BfQV9FVFJJRyAgICAgICAgICAweDkJLyogIEFib3V0IEV4dGVybmFsIFRyaWdnZXIgKi8KKyNkZWZpbmUgUENMS19TVE9QX0FfRElHSVRBTF9JVCAgICAgMHhBCS8qICBBYm91dCBEaWdpdGFsIEludGVycnVwdCAqLworI2RlZmluZSBQQ0xLX1NUT1BfQV9VVEMyICAgICAgICAgICAweEMJLyogIEFib3V0IFVzZXIgVEMyIG91dCAqLworI2RlZmluZSBQQ0xLX1NUT1BfQV9TQlVTMCAgICAgICAgICAweEQJLyogIEFib3V0IFN5bmNCdXMgMCAqLworI2RlZmluZSBQQ0xLX1NUT1BfQV9TQlVTMSAgICAgICAgICAweEUJLyogIEFib3V0IFN5bmNCdXMgMSAqLworI2RlZmluZSBQQ0xLX1NUT1BfQV9TQlVTMiAgICAgICAgICAweEYJLyogIEFib3V0IFN5bmNCdXMgMiAqLwogCi0vLyBBYm91dCBDb3VudGVyIFN0b3AgRW5hYmxlCi0jZGVmaW5lIEFDTlRfU1RPUCAgICAgICAgICAgICAgICAgIDB4MAkvLyBzdG9wIGVuYWJsZQotI2RlZmluZSBBQ05UX05PX1NUT1AgICAgICAgICAgICAgICAweDEJLy8gc3RvcCBkaXNhYmxlZAorLyogIEFib3V0IENvdW50ZXIgU3RvcCBFbmFibGUgKi8KKyNkZWZpbmUgQUNOVF9TVE9QICAgICAgICAgICAgICAgICAgMHgwCS8qICBzdG9wIGVuYWJsZSAqLworI2RlZmluZSBBQ05UX05PX1NUT1AgICAgICAgICAgICAgICAweDEJLyogIHN0b3AgZGlzYWJsZWQgKi8KIAotLy8gREFDIHVwZGF0ZSBzb3VyY2UgKFNldERBQzFTdGFydCAmIFNldERBQzJTdGFydCkKLSNkZWZpbmUgREFDX1NUQVJUX1NPRlRXQVJFICAgICAgICAgMHgwCS8vIFNvZnR3YXJlIFVwZGF0ZQotI2RlZmluZSBEQUNfU1RBUlRfQ0dUICAgICAgICAgICAgICAweDEJLy8gQ0dUIGNvbnRyb2xsZWQgVXBkYXRlCi0jZGVmaW5lIERBQ19TVEFSVF9EQUNfQ0xLICAgICAgICAgIDB4MgkvLyBEL0EgQ2xvY2sKLSNkZWZpbmUgREFDX1NUQVJUX0VQQ0xLICAgICAgICAgICAgMHgzCS8vIEV4dGVybmFsIFBhY2VyIENsb2NrCi0jZGVmaW5lIERBQ19TVEFSVF9TQlVTMCAgICAgICAgICAgIDB4NAkvLyBTeW5jQnVzIDAKLSNkZWZpbmUgREFDX1NUQVJUX1NCVVMxICAgICAgICAgICAgMHg1CS8vIFN5bmNCdXMgMQotI2RlZmluZSBEQUNfU1RBUlRfU0JVUzIgICAgICAgICAgICAweDYJLy8gU3luY0J1cyAyCisvKiAgREFDIHVwZGF0ZSBzb3VyY2UgKFNldERBQzFTdGFydCAmIFNldERBQzJTdGFydCkgKi8KKyNkZWZpbmUgREFDX1NUQVJUX1NPRlRXQVJFICAgICAgICAgMHgwCS8qICBTb2Z0d2FyZSBVcGRhdGUgKi8KKyNkZWZpbmUgREFDX1NUQVJUX0NHVCAgICAgICAgICAgICAgMHgxCS8qICBDR1QgY29udHJvbGxlZCBVcGRhdGUgKi8KKyNkZWZpbmUgREFDX1NUQVJUX0RBQ19DTEsgICAgICAgICAgMHgyCS8qICBEL0EgQ2xvY2sgKi8KKyNkZWZpbmUgREFDX1NUQVJUX0VQQ0xLICAgICAgICAgICAgMHgzCS8qICBFeHRlcm5hbCBQYWNlciBDbG9jayAqLworI2RlZmluZSBEQUNfU1RBUlRfU0JVUzAgICAgICAgICAgICAweDQJLyogIFN5bmNCdXMgMCAqLworI2RlZmluZSBEQUNfU1RBUlRfU0JVUzEgICAgICAgICAgICAweDUJLyogIFN5bmNCdXMgMSAqLworI2RlZmluZSBEQUNfU1RBUlRfU0JVUzIgICAgICAgICAgICAweDYJLyogIFN5bmNCdXMgMiAqLwogCi0vLyBEQUMgQ3ljbGUgTW9kZSAoU2V0REFDMUN5Y2xlLCBTZXREQUMyQ3ljbGUsIFNldHVwREFDKQotI2RlZmluZSBEQUNfQ1lDTEVfU0lOR0xFICAgICAgICAgICAweDAJLy8gbm90IGN5Y2xlCi0jZGVmaW5lIERBQ19DWUNMRV9NVUxUSSAgICAgICAgICAgIDB4MQkvLyBjeWNsZQorLyogIERBQyBDeWNsZSBNb2RlIChTZXREQUMxQ3ljbGUsIFNldERBQzJDeWNsZSwgU2V0dXBEQUMpICovCisjZGVmaW5lIERBQ19DWUNMRV9TSU5HTEUgICAgICAgICAgIDB4MAkvKiAgbm90IGN5Y2xlICovCisjZGVmaW5lIERBQ19DWUNMRV9NVUxUSSAgICAgICAgICAgIDB4MQkvKiAgY3ljbGUgKi8KIAotLy8gODI1NCBPcGVyYXRpb24gTW9kZXMgKFNldDgyNTRNb2RlLCBTZXR1cFRpbWVyQ291bnRlcikKLSNkZWZpbmUgTTgyNTRfRVZFTlRfQ09VTlRFUiAgICAgICAgMAkvLyBFdmVudCBDb3VudGVyCi0jZGVmaW5lIE04MjU0X0hXX09ORV9TSE9UICAgICAgICAgIDEJLy8gSGFyZHdhcmUtUmV0cmlnZ2VyYWJsZSBPbmUtU2hvdAotI2RlZmluZSBNODI1NF9SQVRFX0dFTkVSQVRPUiAgICAgICAyCS8vIFJhdGUgR2VuZXJhdG9yCi0jZGVmaW5lIE04MjU0X1NRVUFSRV9XQVZFICAgICAgICAgIDMJLy8gU3F1YXJlIFdhdmUgTW9kZQotI2RlZmluZSBNODI1NF9TV19TVFJPQkUgICAgICAgICAgICA0CS8vIFNvZnR3YXJlIFRyaWdnZXJlZCBTdHJvYmUKLSNkZWZpbmUgTTgyNTRfSFdfU1RST0JFICAgICAgICAgICAgNQkvLyBIYXJkd2FyZSBUcmlnZ2VyZWQgU3Ryb2JlIChSZXRyaWdnZXJhYmxlKQorLyogIDgyNTQgT3BlcmF0aW9uIE1vZGVzIChTZXQ4MjU0TW9kZSwgU2V0dXBUaW1lckNvdW50ZXIpICovCisjZGVmaW5lIE04MjU0X0VWRU5UX0NPVU5URVIgICAgICAgIDAJLyogIEV2ZW50IENvdW50ZXIgKi8KKyNkZWZpbmUgTTgyNTRfSFdfT05FX1NIT1QgICAgICAgICAgMQkvKiAgSGFyZHdhcmUtUmV0cmlnZ2VyYWJsZSBPbmUtU2hvdCAqLworI2RlZmluZSBNODI1NF9SQVRFX0dFTkVSQVRPUiAgICAgICAyCS8qICBSYXRlIEdlbmVyYXRvciAqLworI2RlZmluZSBNODI1NF9TUVVBUkVfV0FWRSAgICAgICAgICAzCS8qICBTcXVhcmUgV2F2ZSBNb2RlICovCisjZGVmaW5lIE04MjU0X1NXX1NUUk9CRSAgICAgICAgICAgIDQJLyogIFNvZnR3YXJlIFRyaWdnZXJlZCBTdHJvYmUgKi8KKyNkZWZpbmUgTTgyNTRfSFdfU1RST0JFICAgICAgICAgICAgNQkvKiAgSGFyZHdhcmUgVHJpZ2dlcmVkIFN0cm9iZSAoUmV0cmlnZ2VyYWJsZSkgKi8KIAotLy8gVXNlciBUaW1lci9Db3VudGVyIDAgQ2xvY2sgU2VsZWN0IChTZXRVdGMwQ2xvY2spCi0jZGVmaW5lIENVVEMwXzhNSFogICAgICAgICAgICAgICAgIDB4MAkvLyA4TUh6Ci0jZGVmaW5lIENVVEMwX0VYVF9UQ19DTE9DSzEgICAgICAgIDB4MQkvLyBFeHQuIFRDIENsb2NrIDEKLSNkZWZpbmUgQ1VUQzBfRVhUX1RDX0NMT0NLMiAgICAgICAgMHgyCS8vIEV4dC4gVEMgQ2xvY2sgMgotI2RlZmluZSBDVVRDMF9FWFRfUENMSyAgICAgICAgICAgICAweDMJLy8gRXh0LiBQYWNlciBDbG9jaworLyogIFVzZXIgVGltZXIvQ291bnRlciAwIENsb2NrIFNlbGVjdCAoU2V0VXRjMENsb2NrKSAqLworI2RlZmluZSBDVVRDMF84TUhaICAgICAgICAgICAgICAgICAweDAJLyogIDhNSHogKi8KKyNkZWZpbmUgQ1VUQzBfRVhUX1RDX0NMT0NLMSAgICAgICAgMHgxCS8qICBFeHQuIFRDIENsb2NrIDEgKi8KKyNkZWZpbmUgQ1VUQzBfRVhUX1RDX0NMT0NLMiAgICAgICAgMHgyCS8qICBFeHQuIFRDIENsb2NrIDIgKi8KKyNkZWZpbmUgQ1VUQzBfRVhUX1BDTEsgICAgICAgICAgICAgMHgzCS8qICBFeHQuIFBhY2VyIENsb2NrICovCiAKLS8vIFVzZXIgVGltZXIvQ291bnRlciAxIENsb2NrIFNlbGVjdCAoU2V0VXRjMUNsb2NrKQotI2RlZmluZSBDVVRDMV84TUhaICAgICAgICAgICAgICAgICAweDAJLy8gOE1IegotI2RlZmluZSBDVVRDMV9FWFRfVENfQ0xPQ0sxICAgICAgICAweDEJLy8gRXh0LiBUQyBDbG9jayAxCi0jZGVmaW5lIENVVEMxX0VYVF9UQ19DTE9DSzIgICAgICAgIDB4MgkvLyBFeHQuIFRDIENsb2NrIDIKLSNkZWZpbmUgQ1VUQzFfRVhUX1BDTEsgICAgICAgICAgICAgMHgzCS8vIEV4dC4gUGFjZXIgQ2xvY2sKLSNkZWZpbmUgQ1VUQzFfVVRDMF9PVVQgICAgICAgICAgICAgMHg0CS8vIFVzZXIgVGltZXIvQ291bnRlciAwIG91dAotI2RlZmluZSBDVVRDMV9ESU5fU0lHTkFMICAgICAgICAgICAweDUJLy8gSGlnaC1TcGVlZCBEaWdpdGFsIElucHV0ICAgU2FtcGxpbmcgc2lnbmFsCisvKiAgVXNlciBUaW1lci9Db3VudGVyIDEgQ2xvY2sgU2VsZWN0IChTZXRVdGMxQ2xvY2spICovCisjZGVmaW5lIENVVEMxXzhNSFogICAgICAgICAgICAgICAgIDB4MAkvKiAgOE1IeiAqLworI2RlZmluZSBDVVRDMV9FWFRfVENfQ0xPQ0sxICAgICAgICAweDEJLyogIEV4dC4gVEMgQ2xvY2sgMSAqLworI2RlZmluZSBDVVRDMV9FWFRfVENfQ0xPQ0syICAgICAgICAweDIJLyogIEV4dC4gVEMgQ2xvY2sgMiAqLworI2RlZmluZSBDVVRDMV9FWFRfUENMSyAgICAgICAgICAgICAweDMJLyogIEV4dC4gUGFjZXIgQ2xvY2sgKi8KKyNkZWZpbmUgQ1VUQzFfVVRDMF9PVVQgICAgICAgICAgICAgMHg0CS8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMCBvdXQgKi8KKyNkZWZpbmUgQ1VUQzFfRElOX1NJR05BTCAgICAgICAgICAgMHg1CS8qICBIaWdoLVNwZWVkIERpZ2l0YWwgSW5wdXQgICBTYW1wbGluZyBzaWduYWwgKi8KIAotLy8gVXNlciBUaW1lci9Db3VudGVyIDIgQ2xvY2sgU2VsZWN0IChTZXRVdGMyQ2xvY2spCi0jZGVmaW5lIENVVEMyXzhNSFogICAgICAgICAgICAgICAgIDB4MAkvLyA4TUh6Ci0jZGVmaW5lIENVVEMyX0VYVF9UQ19DTE9DSzEgICAgICAgIDB4MQkvLyBFeHQuIFRDIENsb2NrIDEKLSNkZWZpbmUgQ1VUQzJfRVhUX1RDX0NMT0NLMiAgICAgICAgMHgyCS8vIEV4dC4gVEMgQ2xvY2sgMgotI2RlZmluZSBDVVRDMl9FWFRfUENMSyAgICAgICAgICAgICAweDMJLy8gRXh0LiBQYWNlciBDbG9jawotI2RlZmluZSBDVVRDMl9VVEMxX09VVCAgICAgICAgICAgICAweDQJLy8gVXNlciBUaW1lci9Db3VudGVyIDEgb3V0CisvKiAgVXNlciBUaW1lci9Db3VudGVyIDIgQ2xvY2sgU2VsZWN0IChTZXRVdGMyQ2xvY2spICovCisjZGVmaW5lIENVVEMyXzhNSFogICAgICAgICAgICAgICAgIDB4MAkvKiAgOE1IeiAqLworI2RlZmluZSBDVVRDMl9FWFRfVENfQ0xPQ0sxICAgICAgICAweDEJLyogIEV4dC4gVEMgQ2xvY2sgMSAqLworI2RlZmluZSBDVVRDMl9FWFRfVENfQ0xPQ0syICAgICAgICAweDIJLyogIEV4dC4gVEMgQ2xvY2sgMiAqLworI2RlZmluZSBDVVRDMl9FWFRfUENMSyAgICAgICAgICAgICAweDMJLyogIEV4dC4gUGFjZXIgQ2xvY2sgKi8KKyNkZWZpbmUgQ1VUQzJfVVRDMV9PVVQgICAgICAgICAgICAgMHg0CS8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMSBvdXQgKi8KIAotLy8gVXNlciBUaW1lci9Db3VudGVyIDAgR2F0ZSBTZWxlY3QgKFNldFV0YzBHYXRlKQotI2RlZmluZSBHVVRDMF9OT1RfR0FURUQgICAgICAgICAgICAweDAJLy8gTm90IGdhdGVkCi0jZGVmaW5lIEdVVEMwX0dBVEVEICAgICAgICAgICAgICAgIDB4MQkvLyBHYXRlZAotI2RlZmluZSBHVVRDMF9FWFRfVENfR0FURTEgICAgICAgICAweDIJLy8gRXh0LiBUQyBHYXRlIDEKLSNkZWZpbmUgR1VUQzBfRVhUX1RDX0dBVEUyICAgICAgICAgMHgzCS8vIEV4dC4gVEMgR2F0ZSAyCisvKiAgVXNlciBUaW1lci9Db3VudGVyIDAgR2F0ZSBTZWxlY3QgKFNldFV0YzBHYXRlKSAqLworI2RlZmluZSBHVVRDMF9OT1RfR0FURUQgICAgICAgICAgICAweDAJLyogIE5vdCBnYXRlZCAqLworI2RlZmluZSBHVVRDMF9HQVRFRCAgICAgICAgICAgICAgICAweDEJLyogIEdhdGVkICovCisjZGVmaW5lIEdVVEMwX0VYVF9UQ19HQVRFMSAgICAgICAgIDB4MgkvKiAgRXh0LiBUQyBHYXRlIDEgKi8KKyNkZWZpbmUgR1VUQzBfRVhUX1RDX0dBVEUyICAgICAgICAgMHgzCS8qICBFeHQuIFRDIEdhdGUgMiAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMSBHYXRlIFNlbGVjdCAoU2V0VXRjMUdhdGUpCi0jZGVmaW5lIEdVVEMxX05PVF9HQVRFRCAgICAgICAgICAgIDB4MAkvLyBOb3QgZ2F0ZWQKLSNkZWZpbmUgR1VUQzFfR0FURUQgICAgICAgICAgICAgICAgMHgxCS8vIEdhdGVkCi0jZGVmaW5lIEdVVEMxX0VYVF9UQ19HQVRFMSAgICAgICAgIDB4MgkvLyBFeHQuIFRDIEdhdGUgMQotI2RlZmluZSBHVVRDMV9FWFRfVENfR0FURTIgICAgICAgICAweDMJLy8gRXh0LiBUQyBHYXRlIDIKLSNkZWZpbmUgR1VUQzFfVVRDMF9PVVQgICAgICAgICAgICAgMHg0CS8vIFVzZXIgVGltZXIvQ291bnRlciAwIG91dAorLyogIFVzZXIgVGltZXIvQ291bnRlciAxIEdhdGUgU2VsZWN0IChTZXRVdGMxR2F0ZSkgKi8KKyNkZWZpbmUgR1VUQzFfTk9UX0dBVEVEICAgICAgICAgICAgMHgwCS8qICBOb3QgZ2F0ZWQgKi8KKyNkZWZpbmUgR1VUQzFfR0FURUQgICAgICAgICAgICAgICAgMHgxCS8qICBHYXRlZCAqLworI2RlZmluZSBHVVRDMV9FWFRfVENfR0FURTEgICAgICAgICAweDIJLyogIEV4dC4gVEMgR2F0ZSAxICovCisjZGVmaW5lIEdVVEMxX0VYVF9UQ19HQVRFMiAgICAgICAgIDB4MwkvKiAgRXh0LiBUQyBHYXRlIDIgKi8KKyNkZWZpbmUgR1VUQzFfVVRDMF9PVVQgICAgICAgICAgICAgMHg0CS8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMCBvdXQgKi8KIAotLy8gVXNlciBUaW1lci9Db3VudGVyIDIgR2F0ZSBTZWxlY3QgKFNldFV0YzJHYXRlKQotI2RlZmluZSBHVVRDMl9OT1RfR0FURUQgICAgICAgICAgICAweDAJLy8gTm90IGdhdGVkCi0jZGVmaW5lIEdVVEMyX0dBVEVEICAgICAgICAgICAgICAgIDB4MQkvLyBHYXRlZAotI2RlZmluZSBHVVRDMl9FWFRfVENfR0FURTEgICAgICAgICAweDIJLy8gRXh0LiBUQyBHYXRlIDEKLSNkZWZpbmUgR1VUQzJfRVhUX1RDX0dBVEUyICAgICAgICAgMHgzCS8vIEV4dC4gVEMgR2F0ZSAyCi0jZGVmaW5lIEdVVEMyX1VUQzFfT1VUICAgICAgICAgICAgIDB4NAkvLyBVc2VyIFRpbWVyL0NvdW50ZXIgMSBvdXQKKy8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMiBHYXRlIFNlbGVjdCAoU2V0VXRjMkdhdGUpICovCisjZGVmaW5lIEdVVEMyX05PVF9HQVRFRCAgICAgICAgICAgIDB4MAkvKiAgTm90IGdhdGVkICovCisjZGVmaW5lIEdVVEMyX0dBVEVEICAgICAgICAgICAgICAgIDB4MQkvKiAgR2F0ZWQgKi8KKyNkZWZpbmUgR1VUQzJfRVhUX1RDX0dBVEUxICAgICAgICAgMHgyCS8qICBFeHQuIFRDIEdhdGUgMSAqLworI2RlZmluZSBHVVRDMl9FWFRfVENfR0FURTIgICAgICAgICAweDMJLyogIEV4dC4gVEMgR2F0ZSAyICovCisjZGVmaW5lIEdVVEMyX1VUQzFfT1VUICAgICAgICAgICAgIDB4NAkvKiAgVXNlciBUaW1lci9Db3VudGVyIDEgb3V0ICovCiAKLS8vIEludGVycnVwdCBTb3VyY2UgTWFza3MgKFNldElUTWFzaywgQ2xlYXJJVE1hc2ssIEdldElUU3RhdHVzKQotI2RlZmluZSBJUlFNX0FEQ19GSUZPX1dSSVRFICAgICAgICAweDAwMDEJLy8gQURDIEZJRk8gV3JpdGUKLSNkZWZpbmUgSVJRTV9DR1RfUkVTRVQgICAgICAgICAgICAgMHgwMDAyCS8vIFJlc2V0IENHVAotI2RlZmluZSBJUlFNX0NHVF9QQVVTRSAgICAgICAgICAgICAweDAwMDgJLy8gUGF1c2UgQ0dUCi0jZGVmaW5lIElSUU1fQURDX0FCT1VUX0NOVCAgICAgICAgIDB4MDAxMAkvLyBBYm91dCBDb3VudGVyIG91dAotI2RlZmluZSBJUlFNX0FEQ19ERUxBWV9DTlQgICAgICAgICAweDAwMjAJLy8gRGVsYXkgQ291bnRlciBvdXQKLSNkZWZpbmUgSVJRTV9BRENfU0FNUExFX0NOVAkgICAweDAwNDAJLy8gQURDIFNhbXBsZSBDb3VudGVyCi0jZGVmaW5lIElSUU1fREFDMV9VQ05UICAgICAgICAgICAgIDB4MDA4MAkvLyBEQUMxIFVwZGF0ZSBDb3VudGVyCi0jZGVmaW5lIElSUU1fREFDMl9VQ05UICAgICAgICAgICAgIDB4MDEwMAkvLyBEQUMyIFVwZGF0ZSBDb3VudGVyCi0jZGVmaW5lIElSUU1fVVRDMSAgICAgICAgICAgICAgICAgIDB4MDIwMAkvLyBVc2VyIFRDMSBvdXQKLSNkZWZpbmUgSVJRTV9VVEMxX0lOViAgICAgICAgICAgICAgMHgwNDAwCS8vIFVzZXIgVEMxIG91dCwgaW52ZXJ0ZWQKLSNkZWZpbmUgSVJRTV9VVEMyICAgICAgICAgICAgICAgICAgMHgwODAwCS8vIFVzZXIgVEMyIG91dAotI2RlZmluZSBJUlFNX0RJR0lUQUxfSVQgICAgICAgICAgICAweDEwMDAJLy8gRGlnaXRhbCBJbnRlcnJ1cHQKLSNkZWZpbmUgSVJRTV9FWFRFUk5BTF9JVCAgICAgICAgICAgMHgyMDAwCS8vIEV4dGVybmFsIEludGVycnVwdAotI2RlZmluZSBJUlFNX0VUUklHX1JJU0lORyAgICAgICAgICAweDQwMDAJLy8gRXh0ZXJuYWwgVHJpZ2dlciByaXNpbmctZWRnZQotI2RlZmluZSBJUlFNX0VUUklHX0ZBTExJTkcgICAgICAgICAweDgwMDAJLy8gRXh0ZXJuYWwgVHJpZ2dlciBmYWxsaW5nLWVkZ2UKKy8qICBJbnRlcnJ1cHQgU291cmNlIE1hc2tzIChTZXRJVE1hc2ssIENsZWFySVRNYXNrLCBHZXRJVFN0YXR1cykgKi8KKyNkZWZpbmUgSVJRTV9BRENfRklGT19XUklURSAgICAgICAgMHgwMDAxCS8qICBBREMgRklGTyBXcml0ZSAqLworI2RlZmluZSBJUlFNX0NHVF9SRVNFVCAgICAgICAgICAgICAweDAwMDIJLyogIFJlc2V0IENHVCAqLworI2RlZmluZSBJUlFNX0NHVF9QQVVTRSAgICAgICAgICAgICAweDAwMDgJLyogIFBhdXNlIENHVCAqLworI2RlZmluZSBJUlFNX0FEQ19BQk9VVF9DTlQgICAgICAgICAweDAwMTAJLyogIEFib3V0IENvdW50ZXIgb3V0ICovCisjZGVmaW5lIElSUU1fQURDX0RFTEFZX0NOVCAgICAgICAgIDB4MDAyMAkvKiAgRGVsYXkgQ291bnRlciBvdXQgKi8KKyNkZWZpbmUgSVJRTV9BRENfU0FNUExFX0NOVAkgICAweDAwNDAJLyogIEFEQyBTYW1wbGUgQ291bnRlciAqLworI2RlZmluZSBJUlFNX0RBQzFfVUNOVCAgICAgICAgICAgICAweDAwODAJLyogIERBQzEgVXBkYXRlIENvdW50ZXIgKi8KKyNkZWZpbmUgSVJRTV9EQUMyX1VDTlQgICAgICAgICAgICAgMHgwMTAwCS8qICBEQUMyIFVwZGF0ZSBDb3VudGVyICovCisjZGVmaW5lIElSUU1fVVRDMSAgICAgICAgICAgICAgICAgIDB4MDIwMAkvKiAgVXNlciBUQzEgb3V0ICovCisjZGVmaW5lIElSUU1fVVRDMV9JTlYgICAgICAgICAgICAgIDB4MDQwMAkvKiAgVXNlciBUQzEgb3V0LCBpbnZlcnRlZCAqLworI2RlZmluZSBJUlFNX1VUQzIgICAgICAgICAgICAgICAgICAweDA4MDAJLyogIFVzZXIgVEMyIG91dCAqLworI2RlZmluZSBJUlFNX0RJR0lUQUxfSVQgICAgICAgICAgICAweDEwMDAJLyogIERpZ2l0YWwgSW50ZXJydXB0ICovCisjZGVmaW5lIElSUU1fRVhURVJOQUxfSVQgICAgICAgICAgIDB4MjAwMAkvKiAgRXh0ZXJuYWwgSW50ZXJydXB0ICovCisjZGVmaW5lIElSUU1fRVRSSUdfUklTSU5HICAgICAgICAgIDB4NDAwMAkvKiAgRXh0ZXJuYWwgVHJpZ2dlciByaXNpbmctZWRnZSAqLworI2RlZmluZSBJUlFNX0VUUklHX0ZBTExJTkcgICAgICAgICAweDgwMDAJLyogIEV4dGVybmFsIFRyaWdnZXIgZmFsbGluZy1lZGdlICovCiAKLS8vIERNQSBSZXF1ZXN0IFNvdXJjZXMgKExBUzApCi0jZGVmaW5lIERNQVNfRElTQUJMRUQgICAgICAgICAgICAgIDB4MAkvLyBETUEgRGlzYWJsZWQKLSNkZWZpbmUgRE1BU19BRENfU0NOVCAgICAgICAgICAgICAgMHgxCS8vIEFEQyBTYW1wbGUgQ291bnRlcgotI2RlZmluZSBETUFTX0RBQzFfVUNOVCAgICAgICAgICAgICAweDIJLy8gRC9BMSBVcGRhdGUgQ291bnRlcgotI2RlZmluZSBETUFTX0RBQzJfVUNOVCAgICAgICAgICAgICAweDMJLy8gRC9BMiBVcGRhdGUgQ291bnRlcgotI2RlZmluZSBETUFTX1VUQzEgICAgICAgICAgICAgICAgICAweDQJLy8gVXNlciBUQzEgb3V0Ci0jZGVmaW5lIERNQVNfQURGSUZPX0hBTEZfRlVMTCAgICAgIDB4OAkvLyBBL0QgRklGTyBoYWxmIGZ1bGwKLSNkZWZpbmUgRE1BU19EQUMxX0ZJRk9fSEFMRl9FTVBUWSAgMHg5CS8vIEQvQTEgRklGTyBoYWxmIGVtcHR5Ci0jZGVmaW5lIERNQVNfREFDMl9GSUZPX0hBTEZfRU1QVFkgIDB4QQkvLyBEL0EyIEZJRk8gaGFsZiBlbXB0eQorLyogIERNQSBSZXF1ZXN0IFNvdXJjZXMgKExBUzApICovCisjZGVmaW5lIERNQVNfRElTQUJMRUQgICAgICAgICAgICAgIDB4MAkvKiAgRE1BIERpc2FibGVkICovCisjZGVmaW5lIERNQVNfQURDX1NDTlQgICAgICAgICAgICAgIDB4MQkvKiAgQURDIFNhbXBsZSBDb3VudGVyICovCisjZGVmaW5lIERNQVNfREFDMV9VQ05UICAgICAgICAgICAgIDB4MgkvKiAgRC9BMSBVcGRhdGUgQ291bnRlciAqLworI2RlZmluZSBETUFTX0RBQzJfVUNOVCAgICAgICAgICAgICAweDMJLyogIEQvQTIgVXBkYXRlIENvdW50ZXIgKi8KKyNkZWZpbmUgRE1BU19VVEMxICAgICAgICAgICAgICAgICAgMHg0CS8qICBVc2VyIFRDMSBvdXQgKi8KKyNkZWZpbmUgRE1BU19BREZJRk9fSEFMRl9GVUxMICAgICAgMHg4CS8qICBBL0QgRklGTyBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgRE1BU19EQUMxX0ZJRk9fSEFMRl9FTVBUWSAgMHg5CS8qICBEL0ExIEZJRk8gaGFsZiBlbXB0eSAqLworI2RlZmluZSBETUFTX0RBQzJfRklGT19IQUxGX0VNUFRZICAweEEJLyogIEQvQTIgRklGTyBoYWxmIGVtcHR5ICovCiAKLS8vIERNQSBMb2NhbCBBZGRyZXNzZXMgICAoMHg0MDAwMDAwMCtMQVMxIG9mZnNldCkKLSNkZWZpbmUgRE1BTEFERFJfQURDICAgICAgIDB4NDAwMDAwMDAJLy8gQS9EIEZJRk8KLSNkZWZpbmUgRE1BTEFERFJfSERJTiAgICAgIDB4NDAwMDAwMDQJLy8gSGlnaCBTcGVlZCBEaWdpdGFsIElucHV0IEZJRk8KLSNkZWZpbmUgRE1BTEFERFJfREFDMSAgICAgIDB4NDAwMDAwMDgJLy8gRC9BMSBGSUZPCi0jZGVmaW5lIERNQUxBRERSX0RBQzIgICAgICAweDQwMDAwMDBDCS8vIEQvQTIgRklGTworLyogIERNQSBMb2NhbCBBZGRyZXNzZXMgICAoMHg0MDAwMDAwMCtMQVMxIG9mZnNldCkgKi8KKyNkZWZpbmUgRE1BTEFERFJfQURDICAgICAgIDB4NDAwMDAwMDAJLyogIEEvRCBGSUZPICovCisjZGVmaW5lIERNQUxBRERSX0hESU4gICAgICAweDQwMDAwMDA0CS8qICBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgRklGTyAqLworI2RlZmluZSBETUFMQUREUl9EQUMxICAgICAgMHg0MDAwMDAwOAkvKiAgRC9BMSBGSUZPICovCisjZGVmaW5lIERNQUxBRERSX0RBQzIgICAgICAweDQwMDAwMDBDCS8qICBEL0EyIEZJRk8gKi8KIAotLy8gUG9ydCAwIGNvbXBhcmUgbW9kZXMgKFNldERJTzBDb21wYXJlTW9kZSkKLSNkZWZpbmUgRElPX01PREVfRVZFTlQgICAgIDAJLy8gRXZlbnQgTW9kZQotI2RlZmluZSBESU9fTU9ERV9NQVRDSCAgICAgMQkvLyBNYXRjaCBNb2RlCisvKiAgUG9ydCAwIGNvbXBhcmUgbW9kZXMgKFNldERJTzBDb21wYXJlTW9kZSkgKi8KKyNkZWZpbmUgRElPX01PREVfRVZFTlQgICAgIDAJLyogIEV2ZW50IE1vZGUgKi8KKyNkZWZpbmUgRElPX01PREVfTUFUQ0ggICAgIDEJLyogIE1hdGNoIE1vZGUgKi8KIAotLy8gRGlnaXRhbCBUYWJsZSBFbmFibGUgKFBvcnQgMSBkaXNhYmxlKQotI2RlZmluZSBEVEJMX0RJU0FCTEUgICAgICAgMAkvLyBFbmFibGUgRGlnaXRhbCBUYWJsZQotI2RlZmluZSBEVEJMX0VOQUJMRSAgICAgICAgMQkvLyBEaXNhYmxlIERpZ2l0YWwgVGFibGUKKy8qICBEaWdpdGFsIFRhYmxlIEVuYWJsZSAoUG9ydCAxIGRpc2FibGUpICovCisjZGVmaW5lIERUQkxfRElTQUJMRSAgICAgICAwCS8qICBFbmFibGUgRGlnaXRhbCBUYWJsZSAqLworI2RlZmluZSBEVEJMX0VOQUJMRSAgICAgICAgMQkvKiAgRGlzYWJsZSBEaWdpdGFsIFRhYmxlICovCiAKLS8vIFNhbXBsaW5nIFNpZ25hbCBmb3IgSGlnaCBTcGVlZCBEaWdpdGFsIElucHV0IChTZXRIZGluU3RhcnQpCi0jZGVmaW5lIEhESU5fU09GVFdBUkUgICAgICAweDAJLy8gU29mdHdhcmUgVHJpZ2dlcgotI2RlZmluZSBIRElOX0FEQyAgICAgICAgICAgMHgxCS8vIEEvRCBDb252ZXJzaW9uIFNpZ25hbAotI2RlZmluZSBIRElOX1VUQzAgICAgICAgICAgMHgyCS8vIFVzZXIgVEMgb3V0IDAKLSNkZWZpbmUgSERJTl9VVEMxICAgICAgICAgIDB4MwkvLyBVc2VyIFRDIG91dCAxCi0jZGVmaW5lIEhESU5fVVRDMiAgICAgICAgICAweDQJLy8gVXNlciBUQyBvdXQgMgotI2RlZmluZSBIRElOX0VQQ0xLICAgICAgICAgMHg1CS8vIEV4dGVybmFsIFBhY2VyIENsb2NrCi0jZGVmaW5lIEhESU5fRVRSRyAgICAgICAgICAweDYJLy8gRXh0ZXJuYWwgVHJpZ2dlcgorLyogIFNhbXBsaW5nIFNpZ25hbCBmb3IgSGlnaCBTcGVlZCBEaWdpdGFsIElucHV0IChTZXRIZGluU3RhcnQpICovCisjZGVmaW5lIEhESU5fU09GVFdBUkUgICAgICAweDAJLyogIFNvZnR3YXJlIFRyaWdnZXIgKi8KKyNkZWZpbmUgSERJTl9BREMgICAgICAgICAgIDB4MQkvKiAgQS9EIENvbnZlcnNpb24gU2lnbmFsICovCisjZGVmaW5lIEhESU5fVVRDMCAgICAgICAgICAweDIJLyogIFVzZXIgVEMgb3V0IDAgKi8KKyNkZWZpbmUgSERJTl9VVEMxICAgICAgICAgIDB4MwkvKiAgVXNlciBUQyBvdXQgMSAqLworI2RlZmluZSBIRElOX1VUQzIgICAgICAgICAgMHg0CS8qICBVc2VyIFRDIG91dCAyICovCisjZGVmaW5lIEhESU5fRVBDTEsgICAgICAgICAweDUJLyogIEV4dGVybmFsIFBhY2VyIENsb2NrICovCisjZGVmaW5lIEhESU5fRVRSRyAgICAgICAgICAweDYJLyogIEV4dGVybmFsIFRyaWdnZXIgKi8KIAotLy8gQ2hhbm5lbCBHYWluIFRhYmxlIC8gQ2hhbm5lbCBHYWluIExhdGNoCi0jZGVmaW5lIENTQ19MQVRDSCAgICAgICAgICAwCS8vIENoYW5uZWwgR2FpbiBMYXRjaCBtb2RlCi0jZGVmaW5lIENTQ19DR1QgICAgICAgICAgICAxCS8vIENoYW5uZWwgR2FpbiBUYWJsZSBtb2RlCisvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIC8gQ2hhbm5lbCBHYWluIExhdGNoICovCisjZGVmaW5lIENTQ19MQVRDSCAgICAgICAgICAwCS8qICBDaGFubmVsIEdhaW4gTGF0Y2ggbW9kZSAqLworI2RlZmluZSBDU0NfQ0dUICAgICAgICAgICAgMQkvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIG1vZGUgKi8KIAotLy8gQ2hhbm5lbCBHYWluIFRhYmxlIFBhdXNlIEVuYWJsZQotI2RlZmluZSBDR1RfUEFVU0VfRElTQUJMRSAgMAkvLyBDaGFubmVsIEdhaW4gVGFibGUgUGF1c2UgRGlzYWJsZQotI2RlZmluZSBDR1RfUEFVU0VfRU5BQkxFICAgMQkvLyBDaGFubmVsIEdhaW4gVGFibGUgUGF1c2UgRW5hYmxlCisvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIFBhdXNlIEVuYWJsZSAqLworI2RlZmluZSBDR1RfUEFVU0VfRElTQUJMRSAgMAkvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIFBhdXNlIERpc2FibGUgKi8KKyNkZWZpbmUgQ0dUX1BBVVNFX0VOQUJMRSAgIDEJLyogIENoYW5uZWwgR2FpbiBUYWJsZSBQYXVzZSBFbmFibGUgKi8KIAotLy8gREFDIG91dHB1dCB0eXBlL3JhbmdlIChwNjMpCi0jZGVmaW5lIEFPVVRfVU5JUDUgICAgICAgICAwCS8vIDAuLis1IFZvbHQKLSNkZWZpbmUgQU9VVF9VTklQMTAgICAgICAgIDEJLy8gMC4uKzEwIFZvbHQKLSNkZWZpbmUgQU9VVF9CSVA1ICAgICAgICAgIDIJLy8gLTUuLis1IFZvbHQKLSNkZWZpbmUgQU9VVF9CSVAxMCAgICAgICAgIDMJLy8gLTEwLi4rMTAgVm9sdAorLyogIERBQyBvdXRwdXQgdHlwZS9yYW5nZSAocDYzKSAqLworI2RlZmluZSBBT1VUX1VOSVA1ICAgICAgICAgMAkvKiAgMC4uKzUgVm9sdCAqLworI2RlZmluZSBBT1VUX1VOSVAxMCAgICAgICAgMQkvKiAgMC4uKzEwIFZvbHQgKi8KKyNkZWZpbmUgQU9VVF9CSVA1ICAgICAgICAgIDIJLyogIC01Li4rNSBWb2x0ICovCisjZGVmaW5lIEFPVVRfQklQMTAgICAgICAgICAzCS8qICAtMTAuLisxMCBWb2x0ICovCiAKLS8vIEdoYW5uZWwgR2FpbiBUYWJsZSBmaWVsZCBkZWZpbml0aW9ucyAocDYxKQotLy8gR2FpbgorLyogIEdoYW5uZWwgR2FpbiBUYWJsZSBmaWVsZCBkZWZpbml0aW9ucyAocDYxKSAqLworLyogIEdhaW4gKi8KICNkZWZpbmUgR0FJTjEgICAgICAgICAgICAgIDAKICNkZWZpbmUgR0FJTjIgICAgICAgICAgICAgIDEKICNkZWZpbmUgR0FJTjQgICAgICAgICAgICAgIDIKQEAgLTM5OCwxNSArMzk4LDE1IEBACiAjZGVmaW5lIEdBSU42NCAgICAgICAgICAgICA2CiAjZGVmaW5lIEdBSU4xMjggICAgICAgICAgICA3CiAKLS8vIElucHV0IHJhbmdlL3BvbGFyaXR5Ci0jZGVmaW5lIEFJTl9CSVA1ICAgICAgICAgICAwCS8vIC01Li4rNSBWb2x0Ci0jZGVmaW5lIEFJTl9CSVAxMCAgICAgICAgICAxCS8vIC0xMC4uKzEwIFZvbHQKLSNkZWZpbmUgQUlOX1VOSVAxMCAgICAgICAgIDIJLy8gMC4uKzEwIFZvbHQKKy8qICBJbnB1dCByYW5nZS9wb2xhcml0eSAqLworI2RlZmluZSBBSU5fQklQNSAgICAgICAgICAgMAkvKiAgLTUuLis1IFZvbHQgKi8KKyNkZWZpbmUgQUlOX0JJUDEwICAgICAgICAgIDEJLyogIC0xMC4uKzEwIFZvbHQgKi8KKyNkZWZpbmUgQUlOX1VOSVAxMCAgICAgICAgIDIJLyogIDAuLisxMCBWb2x0ICovCiAKLS8vIG5vbiByZWZlcmVuY2VkIHNpbmdsZSBlbmRlZCBzZWxlY3QgYml0Ci0jZGVmaW5lIE5SU0VfQUdORCAgICAgICAgICAwCS8vIEFHTkQgcmVmZXJlbmNlZCBTRSBpbnB1dAotI2RlZmluZSBOUlNFX0FJTlMgICAgICAgICAgMQkvLyBBSU4gU0VOU0UgcmVmZXJlbmNlZCBTRSBpbnB1dAorLyogIG5vbiByZWZlcmVuY2VkIHNpbmdsZSBlbmRlZCBzZWxlY3QgYml0ICovCisjZGVmaW5lIE5SU0VfQUdORCAgICAgICAgICAwCS8qICBBR05EIHJlZmVyZW5jZWQgU0UgaW5wdXQgKi8KKyNkZWZpbmUgTlJTRV9BSU5TICAgICAgICAgIDEJLyogIEFJTiBTRU5TRSByZWZlcmVuY2VkIFNFIGlucHV0ICovCiAKLS8vIHNpbmdsZSBlbmRlZCB2cyBkaWZmZXJlbnRpYWwKLSNkZWZpbmUgR05EX1NFCQkwCS8vIFNpbmdsZS1FbmRlZAotI2RlZmluZSBHTkRfRElGRgkxCS8vIERpZmZlcmVudGlhbAorLyogIHNpbmdsZSBlbmRlZCB2cyBkaWZmZXJlbnRpYWwgKi8KKyNkZWZpbmUgR05EX1NFCQkwCS8qICBTaW5nbGUtRW5kZWQgKi8KKyNkZWZpbmUgR05EX0RJRkYJMQkvKiAgRGlmZmVyZW50aWFsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0YWM1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYwpAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL3J0aTgwMC5jCisgICBIYXJkd2FyZSBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIFJUSS04MDAvODE1IGJvYXJkCisKKyAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBydGk4MDAKK0Rlc2NyaXB0aW9uOiBBbmFsb2cgRGV2aWNlcyBSVEktODAwLzgxNQorQXV0aG9yOiBkcworU3RhdHVzOiB1bmtub3duCitVcGRhdGVkOiBGcmksIDA1IFNlcCAyMDA4IDE0OjUwOjQ0ICswMTAwCitEZXZpY2VzOiBbQW5hbG9nIERldmljZXNdIFJUSS04MDAgKHJ0aTgwMCksIFJUSS04MTUgKHJ0aTgxNSkKKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRCisgIFsyXSAtIEEvRCByZWZlcmVuY2UKKyAgICAgICAgICAwID0gZGlmZmVyZW50aWFsCisgICAgICAgICAgMSA9IHBzZXVkb2RpZmZlcmVudGlhbCAoY29tbW9uKQorICAgICAgICAgIDIgPSBzaW5nbGUtZW5kZWQKKyAgWzNdIC0gQS9EIHJhbmdlCisgICAgICAgICAgMCA9IFstMTAsMTBdCisgICAgICAgICAgMSA9IFstNSw1XQorICAgICAgICAgIDIgPSBbMCwxMF0KKyAgWzRdIC0gQS9EIGVuY29kaW5nCisgICAgICAgICAgMCA9IHR3bydzIGNvbXBsZW1lbnQKKyAgICAgICAgICAxID0gc3RyYWlnaHQgYmluYXJ5CisgIFs1XSAtIERBQyAwIHJhbmdlCisgICAgICAgICAgMCA9IFstMTAsMTBdCisgICAgICAgICAgMSA9IFswLDEwXQorICBbNl0gLSBEQUMgMCBlbmNvZGluZworICAgICAgICAgIDAgPSB0d28ncyBjb21wbGVtZW50CisgICAgICAgICAgMSA9IHN0cmFpZ2h0IGJpbmFyeQorICBbN10gLSBEQUMgMSByYW5nZSAoc2FtZSBhcyBEQUMgMCkKKyAgWzhdIC0gREFDIDEgZW5jb2RpbmcgKHNhbWUgYXMgREFDIDApCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBSVEk4MDBfU0laRSAxNgorCisjZGVmaW5lIFJUSTgwMF9DU1IgMAorI2RlZmluZSBSVEk4MDBfTVVYR0FJTiAxCisjZGVmaW5lIFJUSTgwMF9DT05WRVJUIDIKKyNkZWZpbmUgUlRJODAwX0FEQ0xPIDMKKyNkZWZpbmUgUlRJODAwX0FEQ0hJIDQKKyNkZWZpbmUgUlRJODAwX0RBQzBMTyA1CisjZGVmaW5lIFJUSTgwMF9EQUMwSEkgNgorI2RlZmluZSBSVEk4MDBfREFDMUxPIDcKKyNkZWZpbmUgUlRJODAwX0RBQzFISSA4CisjZGVmaW5lIFJUSTgwMF9DTFJGTEFHUyA5CisjZGVmaW5lIFJUSTgwMF9ESSAxMAorI2RlZmluZSBSVEk4MDBfRE8gMTEKKyNkZWZpbmUgUlRJODAwXzk1MTNBX0RBVEEgMTIKKyNkZWZpbmUgUlRJODAwXzk1MTNBX0NOVFJMIDEzCisjZGVmaW5lIFJUSTgwMF85NTEzQV9TVEFUVVMgMTMKKworLyoKKyAqIGZsYWdzIGZvciBDU1IgcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIFJUSTgwMF9CVVNZCQkweDgwCisjZGVmaW5lIFJUSTgwMF9ET05FCQkweDQwCisjZGVmaW5lIFJUSTgwMF9PVkVSUlVOCQkweDIwCisjZGVmaW5lIFJUSTgwMF9UQ1IJCTB4MTAKKyNkZWZpbmUgUlRJODAwX0RNQV9FTkFCCQkweDA4CisjZGVmaW5lIFJUSTgwMF9JTlRSX1RDCQkweDA0CisjZGVmaW5lIFJUSTgwMF9JTlRSX0VDCQkweDAyCisjZGVmaW5lIFJUSTgwMF9JTlRSX09WUk4JMHgwMQorCisjZGVmaW5lIEFtOTUxM184QklUQlVTCisKKyNkZWZpbmUgQW05NTEzX291dHB1dF9jb250cm9sKGEpCW91dGIoYSxkZXYtPmlvYmFzZStSVEk4MDBfOTUxM0FfQ05UUkwpCisjZGVmaW5lIEFtOTUxM19vdXRwdXRfZGF0YShhKQkJb3V0YihhLGRldi0+aW9iYXNlK1JUSTgwMF85NTEzQV9EQVRBKQorI2RlZmluZSBBbTk1MTNfaW5wdXRfZGF0YSgpCQlpbmIoZGV2LT5pb2Jhc2UrUlRJODAwXzk1MTNBX0RBVEEpCisjZGVmaW5lIEFtOTUxM19pbnB1dF9zdGF0dXMoKQkJaW5iKGRldi0+aW9iYXNlK1JUSTgwMF85NTEzQV9TVEFUVVMpCisKKyNpbmNsdWRlICJhbTk1MTMuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3J0aTgwMF9haV8xMF9iaXBvbGFyID0geyA0LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wMikKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3J0aTgwMF9haV81X2JpcG9sYXIgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDEpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9ydGk4MDBfYWlfdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAyKQorCX0KK307CisKK3N0cnVjdCBydGk4MDBfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaGFzX2FvOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGk4MDBfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsicnRpODAwIiwgMH0sCisJeyJydGk4MTUiLCAxfSwKK307CisKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBydGk4MDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIGludCBydGk4MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcnRpODAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3J0aTgwMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJydGk4MDAiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnJ0aTgwMF9hdHRhY2gsCisgICAgICBkZXRhY2g6cnRpODAwX2RldGFjaCwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoYm9hcmR0eXBlcykgLyBzaXplb2Yoc3RydWN0IHJ0aTgwMF9ib2FyZCksCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBydGk4MDBfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9ydGk4MDApOworCitzdGF0aWMgaXJxcmV0dXJuX3QgcnRpODAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYgUFRfUkVHU19BUkcpOworCitzdHJ1Y3QgcnRpODAwX3ByaXZhdGUgeworCWVudW0geworCQlhZGNfZGlmZiwgYWRjX3BzZXVkb2RpZmYsIGFkY19zaW5nbGVlbmRlZAorCX0gYWRjX211eDsKKwllbnVtIHsKKwkJYWRjX2JpcG9sYXIxMCwgYWRjX2JpcG9sYXI1LCBhZGNfdW5pcG9sYXIxMAorCX0gYWRjX3JhbmdlOworCWVudW0geworCQlhZGNfMmNvbXAsIGFkY19zdHJhaWdodAorCX0gYWRjX2NvZGluZzsKKwllbnVtIHsKKwkJZGFjX2JpcG9sYXIxMCwgZGFjX3VuaXBvbGFyMTAKKwl9IGRhYzBfcmFuZ2UsIGRhYzFfcmFuZ2U7CisJZW51bSB7CisJCWRhY18yY29tcCwgZGFjX3N0cmFpZ2h0CisJfSBkYWMwX2NvZGluZywgZGFjMV9jb2Rpbmc7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX3R5cGVfbGlzdFsyXTsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07CisJaW50IG11eGdhaW5fYml0czsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBydGk4MDBfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworI2RlZmluZSBSVEk4MDBfVElNRU9VVCAxMDAKKworc3RhdGljIGlycXJldHVybl90IHJ0aTgwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2IFBUX1JFR1NfQVJHKQoreworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLy8gc2V0dGxpbmcgZGVsYXkgdGltZXMgaW4gdXNlYyBmb3IgZGlmZmVyZW50IGdhaW5zCitzdGF0aWMgY29uc3QgaW50IGdhaW5kZWxheVtdID0geyAxMCwgMjAsIDQwLCA4MCB9OworCitzdGF0aWMgaW50IHJ0aTgwMF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpLCB0OworCWludCBzdGF0dXM7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBnYWluID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIG11eGdhaW5fYml0czsKKworCWluYihkZXYtPmlvYmFzZSArIFJUSTgwMF9BRENISSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFJUSTgwMF9DTFJGTEFHUyk7CisKKwltdXhnYWluX2JpdHMgPSBjaGFuIHwgKGdhaW4gPDwgNSk7CisJaWYgKG11eGdhaW5fYml0cyAhPSBkZXZwcml2LT5tdXhnYWluX2JpdHMpIHsKKwkJZGV2cHJpdi0+bXV4Z2Fpbl9iaXRzID0gbXV4Z2Fpbl9iaXRzOworCQlvdXRiKGRldnByaXYtPm11eGdhaW5fYml0cywgZGV2LT5pb2Jhc2UgKyBSVEk4MDBfTVVYR0FJTik7CisJCS8qIHdpdGhvdXQgYSBkZWxheSBoZXJlLCB0aGUgUlRJX09WRVJSVU4gYml0CisJCSAqIGdldHMgc2V0LCBhbmQgeW91IHdpbGwgaGF2ZSBhbiBlcnJvci4gKi8KKwkJaWYgKGluc24tPm4gPiAwKSB7CisJCQlCVUdfT04oZ2FpbiA+PQorCQkJCXNpemVvZihnYWluZGVsYXkpIC8gc2l6ZW9mKGdhaW5kZWxheVswXSkpOworCQkJY29tZWRpX3VkZWxheShnYWluZGVsYXlbZ2Fpbl0pOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NPTlZFUlQpOworCQlmb3IgKHQgPSBSVEk4MDBfVElNRU9VVDsgdDsgdC0tKSB7CisJCQlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBSVEk4MDBfQ1NSKTsKKwkJCWlmIChzdGF0dXMgJiBSVEk4MDBfT1ZFUlJVTikgeworCQkJCXJ0X3ByaW50aygicnRpODAwOiBhL2Qgb3ZlcnJ1blxuIik7CisJCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFJUSTgwMF9DTFJGTEFHUyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlpZiAoc3RhdHVzICYgUlRJODAwX0RPTkUpCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCWlmICh0ID09IDApIHsKKwkJCXJ0X3ByaW50aygicnRpODAwOiB0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJZGF0YVtpXSA9IGluYihkZXYtPmlvYmFzZSArIFJUSTgwMF9BRENMTyk7CisJCWRhdGFbaV0gfD0gKDB4ZiAmIGluYihkZXYtPmlvYmFzZSArIFJUSTgwMF9BRENISSkpIDw8IDg7CisKKwkJaWYgKGRldnByaXYtPmFkY19jb2RpbmcgPT0gYWRjXzJjb21wKSB7CisJCQlkYXRhW2ldIF49IDB4ODAwOworCQl9CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAwX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IHJ0aTgwMF9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCBkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGQgPSBkYXRhW2ldOworCQlpZiAoZGV2cHJpdi0+ZGFjMF9jb2RpbmcgPT0gZGFjXzJjb21wKSB7CisJCQlkIF49IDB4ODAwOworCQl9CisJCW91dGIoZCAmIDB4ZmYsCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUlRJODAwX0RBQzFMTyA6IFJUSTgwMF9EQUMwTE8pKTsKKwkJb3V0YihkID4+IDgsCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUlRJODAwX0RBQzFISSA6IFJUSTgwMF9EQUMwSEkpKTsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAwX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIFJUSTgwMF9ESSk7CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAwX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCS8qIE91dHB1dHMgYXJlIGludmVydGVkLi4uICovCisJCW91dGIocy0+c3RhdGUgXiAweGZmLCBkZXYtPmlvYmFzZSArIFJUSTgwMF9ETyk7CisJfQorCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKKy8qCisgICBvcHRpb25zWzBdIC0gSS9PIHBvcnQKKyAgIG9wdGlvbnNbMV0gLSBpcnEKKyAgIG9wdGlvbnNbMl0gLSBhL2QgbXV4CisgICAJMD1kaWZmZXJlbnRpYWwsIDE9cHNldWRvZGlmZiwgMj1zaW5nbGUKKyAgIG9wdGlvbnNbM10gLSBhL2QgcmFuZ2UKKyAgIAkwPWJpcG9sYXIxMCwgMT1iaXBvbGFyNSwgMj11bmlwb2xhcjEwCisgICBvcHRpb25zWzRdIC0gYS9kIGNvZGluZworICAgCTA9MidzIGNvbXAsIDE9c3RyYWlnaHQgYmluYXJ5CisgICBvcHRpb25zWzVdIC0gZGFjMCByYW5nZQorICAgCTA9Ymlwb2xhcjEwLCAxPXVuaXBvbGFyMTAKKyAgIG9wdGlvbnNbNl0gLSBkYWMwIGNvZGluZworICAgCTA9MidzIGNvbXAsIDE9c3RyYWlnaHQgYmluYXJ5CisgICBvcHRpb25zWzddIC0gZGFjMSByYW5nZQorICAgb3B0aW9uc1s4XSAtIGRhYzEgY29kaW5nCisgKi8KKworc3RhdGljIGludCBydGk4MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHJ0aTgwMDogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBSVEk4MDBfU0laRSwgInJ0aTgwMCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKyNpZmRlZiBERUJVRworCXByaW50aygiZmluZ2VycHJpbnQ9JXgsJXgsJXgsJXgsJXggIiwKKwkJaW5iKGRldi0+aW9iYXNlICsgMCksCisJCWluYihkZXYtPmlvYmFzZSArIDEpLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyAyKSwKKwkJaW5iKGRldi0+aW9iYXNlICsgMyksIGluYihkZXYtPmlvYmFzZSArIDQpKTsKKyNlbmRpZgorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFJUSTgwMF9DU1IpOworCWluYihkZXYtPmlvYmFzZSArIFJUSTgwMF9BRENISSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFJUSTgwMF9DTFJGTEFHUyk7CisKKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXJxKSB7CisJCXByaW50aygiKCBpcnEgPSAldSApIiwgaXJxKTsKKwkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBydGk4MDBfaW50ZXJydXB0LCAwLAorCQkJCQkicnRpODAwIiwgZGV2KSkgPCAwKSB7CisJCQlwcmludGsoIiBGYWlsZWQgdG8gYWxsb2NhdGUgSVJRXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2LT5pcnEgPSBpcnE7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIoIG5vIGlycSApIik7CisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBydGk4MDBfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZwcml2LT5hZGNfbXV4ID0gaXQtPm9wdGlvbnNbMl07CisJZGV2cHJpdi0+YWRjX3JhbmdlID0gaXQtPm9wdGlvbnNbM107CisJZGV2cHJpdi0+YWRjX2NvZGluZyA9IGl0LT5vcHRpb25zWzRdOworCWRldnByaXYtPmRhYzBfcmFuZ2UgPSBpdC0+b3B0aW9uc1s1XTsKKwlkZXZwcml2LT5kYWMwX2NvZGluZyA9IGl0LT5vcHRpb25zWzZdOworCWRldnByaXYtPmRhYzFfcmFuZ2UgPSBpdC0+b3B0aW9uc1s3XTsKKwlkZXZwcml2LT5kYWMxX2NvZGluZyA9IGl0LT5vcHRpb25zWzhdOworCWRldnByaXYtPm11eGdhaW5fYml0cyA9IC0xOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYWkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gKGRldnByaXYtPmFkY19tdXggPyAxNiA6IDgpOworCXMtPmluc25fcmVhZCA9IHJ0aTgwMF9haV9pbnNuX3JlYWQ7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmOworCXN3aXRjaCAoZGV2cHJpdi0+YWRjX3JhbmdlKSB7CisJY2FzZSBhZGNfYmlwb2xhcjEwOgorCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9ydGk4MDBfYWlfMTBfYmlwb2xhcjsKKwkJYnJlYWs7CisJY2FzZSBhZGNfYmlwb2xhcjU6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3J0aTgwMF9haV81X2JpcG9sYXI7CisJCWJyZWFrOworCWNhc2UgYWRjX3VuaXBvbGFyMTA6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3J0aTgwMF9haV91bmlwb2xhcjsKKwkJYnJlYWs7CisJfQorCisJcysrOworCWlmICh0aGlzX2JvYXJkLT5oYXNfYW8pIHsKKwkJLyogYW8gc3ViZGV2aWNlIChvbmx5IG9uIHJ0aTgxNSkgKi8KKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IDI7CisJCXMtPmluc25fcmVhZCA9IHJ0aTgwMF9hb19pbnNuX3JlYWQ7CisJCXMtPmluc25fd3JpdGUgPSBydGk4MDBfYW9faW5zbl93cml0ZTsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmZmOworCQlzLT5yYW5nZV90YWJsZV9saXN0ID0gZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0OworCQlzd2l0Y2ggKGRldnByaXYtPmRhYzBfcmFuZ2UpIHsKKwkJY2FzZSBkYWNfYmlwb2xhcjEwOgorCQkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzBdID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJCWJyZWFrOworCQljYXNlIGRhY191bmlwb2xhcjEwOgorCQkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzBdID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCQlicmVhazsKKwkJfQorCQlzd2l0Y2ggKGRldnByaXYtPmRhYzFfcmFuZ2UpIHsKKwkJY2FzZSBkYWNfYmlwb2xhcjEwOgorCQkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzFdID0gJnJhbmdlX2JpcG9sYXIxMDsKKwkJCWJyZWFrOworCQljYXNlIGRhY191bmlwb2xhcjEwOgorCQkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzFdID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcysrOworCS8qIGRpICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHJ0aTgwMF9kaV9pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXMrKzsKKwkvKiBkbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBydGk4MDBfZG9faW5zbl9iaXRzOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisKKy8qIGRvbid0IHlldCBrbm93IGhvdyB0byBkZWFsIHdpdGggY291bnRlci90aW1lcnMgKi8KKyNpZiAwCisJcysrOworCS8qIGRvICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworI2VuZGlmCisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGk4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHJ0aTgwMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFJUSTgwMF9TSVpFKTsKKworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyYzM4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL3J0aTgwMi5jCisgICBIYXJkd2FyZSBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIFJUSS04MDIgYm9hcmQKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk5IEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKy8qCitEcml2ZXI6IHJ0aTgwMgorRGVzY3JpcHRpb246IEFuYWxvZyBEZXZpY2VzIFJUSS04MDIKK0F1dGhvcjogQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CitEZXZpY2VzOiBbQW5hbG9nIERldmljZXNdIFJUSS04MDIgKHJ0aTgwMikKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICAgIFswXSAtIGkvbyBiYXNlCisgICAgWzFdIC0gdW51c2VkCisgICAgWzJdIC0gZGFjIzAgIDA9dHdvJ3MgY29tcCwgMT1zdHJhaWdodAorICAgIFszXSAtIGRhYyMwICAwPWJpcG9sYXIsIDE9dW5pcG9sYXIKKyAgICBbNF0gLSBkYWMjMSAuLi4KKyAgICAuLi4KKyAgICBbMTddIC0gZGFjIzcgLi4uCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBSVEk4MDJfU0laRSA0CisKKyNkZWZpbmUgUlRJODAyX1NFTEVDVCAwCisjZGVmaW5lIFJUSTgwMl9EQVRBTE9XIDEKKyNkZWZpbmUgUlRJODAyX0RBVEFISUdIIDIKKworc3RhdGljIGludCBydGk4MDJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcnRpODAyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3J0aTgwMiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJydGk4MDIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnJ0aTgwMl9hdHRhY2gsCisgICAgICBkZXRhY2g6cnRpODAyX2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcnRpODAyKTsKKworc3RydWN0IHJ0aTgwMl9wcml2YXRlIHsKKwllbnVtIHsKKwkJZGFjXzJjb21wLCBkYWNfc3RyYWlnaHQKKwl9IGRhY19jb2RpbmdbOF07CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlX3R5cGVfbGlzdFs4XTsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbOF07Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcnRpODAyX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgcnRpODAyX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAyX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpLCBkOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWQgPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJCWlmIChkZXZwcml2LT5kYWNfY29kaW5nW2NoYW5dID09IGRhY18yY29tcCkKKwkJCWQgXj0gMHg4MDA7CisJCW91dGIoY2hhbiwgZGV2LT5pb2Jhc2UgKyBSVEk4MDJfU0VMRUNUKTsKKwkJb3V0YihkICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBSVEk4MDJfREFUQUxPVyk7CisJCW91dGIoZCA+PiA4LCBkZXYtPmlvYmFzZSArIFJUSTgwMl9EQVRBSElHSCk7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IHJ0aTgwMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBydGk4MDI6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUlRJODAyX1NJWkUsICJydGk4MDIiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJZGV2LT5ib2FyZF9uYW1lID0gInJ0aTgwMiI7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMAorCQl8fCBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBydGk4MDJfcHJpdmF0ZSkpKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXM7CisJLyogYW8gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX3JlYWQgPSBydGk4MDJfYW9faW5zbl9yZWFkOworCXMtPmluc25fd3JpdGUgPSBydGk4MDJfYW9faW5zbl93cml0ZTsKKwlzLT5yYW5nZV90YWJsZV9saXN0ID0gZGV2cHJpdi0+cmFuZ2VfdHlwZV9saXN0OworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlkZXZwcml2LT5kYWNfY29kaW5nW2ldID0gKGl0LT5vcHRpb25zWzMgKyAyICogaV0pCisJCQk/IChkYWNfc3RyYWlnaHQpCisJCQk6IChkYWNfMmNvbXApOworCQlkZXZwcml2LT5yYW5nZV90eXBlX2xpc3RbaV0gPSAoaXQtPm9wdGlvbnNbMiArIDIgKiBpXSkKKwkJCT8gJnJhbmdlX3VuaXBvbGFyMTAgOiAmcmFuZ2VfYmlwb2xhcjEwOworCX0KKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0aTgwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcnRpODAyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUlRJODAyX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2I2ZjcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYwpAQCAtMCwwICsxLDk3NyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9zNTI2LmMKKyAgICBTZW5zb3JheSBzNTI2IENvbWVkaSBkcml2ZXIKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IHM1MjYKK0Rlc2NyaXB0aW9uOiBTZW5zb3JheSA1MjYgZHJpdmVyCitEZXZpY2VzOiBbU2Vuc29yYXldIDUyNiAoczUyNikKK0F1dGhvcjogUmljaGllCisJRXZlcmV0dCBXYW5nIDxldmVyZXR0LndhbmdAZXZlcnRlcS5jb20+CitVcGRhdGVkOiBUaHUsIDE0IFNlcC4gMjAwNgorU3RhdHVzOiBleHBlcmltZW50YWwKKworRW5jb2RlciB3b3JrcworQW5hbG9nIGlucHV0IHdvcmtzCitBbmFsb2cgb3V0cHV0IHdvcmtzCitQV00gb3V0cHV0IHdvcmtzCitDb21tYW5kcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKworY29tZWRpX2NvbmZpZyAvZGV2L2NvbWVkaTAgczUyNiAweDJDMCwweDMKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFM1MjZfU0laRSA2NAorCisjZGVmaW5lIFM1MjZfU1RBUlRfQUlfQ09OVgkwCisjZGVmaW5lIFM1MjZfQUlfUkVBRAkJMAorCisvKiBQb3J0cyAqLworI2RlZmluZSBTNTI2X0lPU0laRSAweDQwCisjZGVmaW5lIFM1MjZfTlVNX1BPUlRTIDI3CisKKy8qIHJlZ2lzdGVycyAqLworI2RlZmluZSBSRUdfVENSIDB4MDAKKyNkZWZpbmUgUkVHX1dEQyAweDAyCisjZGVmaW5lIFJFR19EQUMgMHgwNAorI2RlZmluZSBSRUdfQURDIDB4MDYKKyNkZWZpbmUgUkVHX0FERCAweDA4CisjZGVmaW5lIFJFR19ESU8gMHgwQQorI2RlZmluZSBSRUdfSUVSIDB4MEMKKyNkZWZpbmUgUkVHX0lTUiAweDBFCisjZGVmaW5lIFJFR19NU0MgMHgxMAorI2RlZmluZSBSRUdfQzBMIDB4MTIKKyNkZWZpbmUgUkVHX0MwSCAweDE0CisjZGVmaW5lIFJFR19DME0gMHgxNgorI2RlZmluZSBSRUdfQzBDIDB4MTgKKyNkZWZpbmUgUkVHX0MxTCAweDFBCisjZGVmaW5lIFJFR19DMUggMHgxQworI2RlZmluZSBSRUdfQzFNIDB4MUUKKyNkZWZpbmUgUkVHX0MxQyAweDIwCisjZGVmaW5lIFJFR19DMkwgMHgyMgorI2RlZmluZSBSRUdfQzJIIDB4MjQKKyNkZWZpbmUgUkVHX0MyTSAweDI2CisjZGVmaW5lIFJFR19DMkMgMHgyOAorI2RlZmluZSBSRUdfQzNMIDB4MkEKKyNkZWZpbmUgUkVHX0MzSCAweDJDCisjZGVmaW5lIFJFR19DM00gMHgyRQorI2RlZmluZSBSRUdfQzNDIDB4MzAKKyNkZWZpbmUgUkVHX0VFRCAweDMyCisjZGVmaW5lIFJFR19FRUMgMHgzNAorCitzdGF0aWMgY29uc3QgaW50IHM1MjZfcG9ydHNbXSA9IHsKKwlSRUdfVENSLAorCVJFR19XREMsCisJUkVHX0RBQywKKwlSRUdfQURDLAorCVJFR19BREQsCisJUkVHX0RJTywKKwlSRUdfSUVSLAorCVJFR19JU1IsCisJUkVHX01TQywKKwlSRUdfQzBMLAorCVJFR19DMEgsCisJUkVHX0MwTSwKKwlSRUdfQzBDLAorCVJFR19DMUwsCisJUkVHX0MxSCwKKwlSRUdfQzFNLAorCVJFR19DMUMsCisJUkVHX0MyTCwKKwlSRUdfQzJILAorCVJFR19DMk0sCisJUkVHX0MyQywKKwlSRUdfQzNMLAorCVJFR19DM0gsCisJUkVHX0MzTSwKKwlSRUdfQzNDLAorCVJFR19FRUQsCisJUkVHX0VFQworfTsKKworc3RydWN0IGNvdW50ZXJfbW9kZV9yZWdpc3Rlcl90IHsKKwl1bnNpZ25lZCBzaG9ydCBjb3V0U291cmNlOjE7CisJdW5zaWduZWQgc2hvcnQgY291dFBvbGFyaXR5OjE7CisJdW5zaWduZWQgc2hvcnQgYXV0b0xvYWRSZXNldFJjYXA6MzsKKwl1bnNpZ25lZCBzaG9ydCBod0N0RW5hYmxlU291cmNlOjI7CisJdW5zaWduZWQgc2hvcnQgY3RFbmFibGVDdHJsOjI7CisJdW5zaWduZWQgc2hvcnQgY2xvY2tTb3VyY2U6MjsKKwl1bnNpZ25lZCBzaG9ydCBjb3VudERpcjoxOworCXVuc2lnbmVkIHNob3J0IGNvdW50RGlyQ3RybDoxOworCXVuc2lnbmVkIHNob3J0IG91dHB1dFJlZ0xhdGNoQ3RybDoxOworCXVuc2lnbmVkIHNob3J0IHByZWxvYWRSZWdTZWw6MTsKKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDoxOworfTsKKwordW5pb24geworCXN0cnVjdCBjb3VudGVyX21vZGVfcmVnaXN0ZXJfdCByZWc7CisJdW5zaWduZWQgc2hvcnQgdmFsdWU7Cit9IGNtUmVnOworCisjZGVmaW5lIE1BWF9HUENUX0NPTkZJR19EQVRBIDYKKworLyogRGlmZmVyZW50IEFwcGxpY2F0aW9uIENsYXNzZXMgZm9yIEdQQ1QgU3ViZGV2aWNlcyAqLworLyogVGhlIGxpc3QgaXMgbm90IGV4aGF1c3RpdmUgYW5kIG5lZWRzIGRpc2N1c3Npb24hICovCitlbnVtIFM1MjZfR1BDVF9BUFBfQ0xBU1MgeworCUNvdW50aW5nQW5kVGltZU1lYXN1cmVtZW50LAorCVNpbmdsZVB1bHNlR2VuZXJhdGlvbiwKKwlQdWxzZVRyYWluR2VuZXJhdGlvbiwKKwlQb3NpdGlvbk1lYXN1cmVtZW50LAorCU1pc2NlbGxhbmVvdXMKK307CisKKy8qIENvbmZpZyBzdHJ1Y3QgZm9yIGRpZmZlcmVudCBHUENUIHN1YmRldmljZSBBcHBsaWNhdGlvbiBDbGFzc2VzIGFuZAorICAgdGhlaXIgb3B0aW9ucworKi8KK3N0cnVjdCBzNTI2R1BDVENvbmZpZyB7CisJZW51bSBTNTI2X0dQQ1RfQVBQX0NMQVNTIGFwcDsKKwlpbnQgZGF0YVtNQVhfR1BDVF9DT05GSUdfREFUQV07Cit9OworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IHM1MjZfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGdwY3RfY2hhbnM7CisJaW50IGdwY3RfYml0czsKKwlpbnQgYWRfY2hhbnM7CisJaW50IGFkX2JpdHM7CisJaW50IGRhX2NoYW5zOworCWludCBkYV9iaXRzOworCWludCBoYXZlX2RpbzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgczUyNl9ib2FyZCBzNTI2X2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiczUyNiIsCisJICAgICAgZ3BjdF9jaGFuczo0LAorCSAgICAgIGdwY3RfYml0czoyNCwKKwkgICAgICBhZF9jaGFuczo4LAorCSAgICAgIGFkX2JpdHM6CTE2LAorCSAgICAgIGRhX2NoYW5zOjQsCisJICAgICAgZGFfYml0czoJMTYsCisJICAgICAgaGF2ZV9kaW86MSwKKwkJfQorfTsKKworI2RlZmluZSBBRERSX1JFRyhyZWcpIChkZXYtPmlvYmFzZSArIChyZWcpKQorI2RlZmluZSBBRERSX0NIQU5fUkVHKHJlZywgY2hhbikgKGRldi0+aW9iYXNlICsgKHJlZykgKyAoY2hhbikgKiA4KQorCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBzNTI2X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBzNTI2X3ByaXZhdGUgeworCisJaW50IGRhdGE7CisKKwkvKiB3b3VsZCBiZSB1c2VmdWwgZm9yIGEgUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCisJLyogVXNlZCBmb3IgQU8gcmVhZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07CisKKwlzdHJ1Y3QgczUyNkdQQ1RDb25maWcgczUyNl9ncGN0X2NvbmZpZ1s0XTsKKwl1bnNpZ25lZCBzaG9ydCBzNTI2X2FpX2NvbmZpZzsKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgczUyNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBzNTI2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHM1MjZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfczUyNiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJzNTI2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpzNTI2X2F0dGFjaCwKKyAgICAgIGRldGFjaDpzNTI2X2RldGFjaCwKKy8qIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgbWVtYmVycyBpZiB5b3UgYXJlCisgKiB3cml0aW5nIGEgZHJpdmVyIGZvciBhIElTQSBQblAgb3IgUENJIGNhcmQgKi8KKwkvKiBNb3N0IGRyaXZlcnMgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHR5cGVzIG9mIGJvYXJkcyBieQorCSAqIGhhdmluZyBhbiBhcnJheSBvZiBib2FyZCBzdHJ1Y3R1cmVzLiAgVGhlc2Ugd2VyZSBkZWZpbmVkCisJICogaW4gczUyNl9ib2FyZHNbXSBhYm92ZS4gIE5vdGUgdGhhdCB0aGUgZWxlbWVudCAnbmFtZScKKwkgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKwkgKiBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZSBib2FyZCB3aXRob3V0IGtub3dpbmcgYW55IGRldGFpbHMKKwkgKiBhYm91dCB0aGUgc3RydWN0dXJlIGV4Y2VwdCBmb3IgaXRzIGxlbmd0aC4KKwkgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKwkgKiBvZiB0aGUgZGV2aWNlIGlzIGdpdmVuIHRvIENvbWVkaSwgYW5kIENvbWVkaSB0cmllcyB0bworCSAqIG1hdGNoIGl0IGJ5IGdvaW5nIHRocm91Z2ggdGhlIGxpc3Qgb2YgYm9hcmQgbmFtZXMuICBJZgorCSAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorCSAqIGludG8gZGV2LT5ib2FyZF9wdHIgYW5kIGRyaXZlci0+YXR0YWNoKCkgaXMgY2FsbGVkLgorCSAqCisJICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisJICogdGhlIHR5cGUgb2YgYm9hcmQgaW4gc29mdHdhcmUuICBJU0EgUG5QLCBQQ0ksIGFuZCBQQ01DSUEKKwkgKiBkZXZpY2VzIGFyZSBzdWNoIGJvYXJkcy4KKwkgKi8KKyAgICAgIGJvYXJkX25hbWU6JnM1MjZfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBzNTI2X2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoczUyNl9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBzNTI2X2JvYXJkKSwKK307CisKK3N0YXRpYyBpbnQgczUyNl9ncGN0X3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHM1MjZfZ3BjdF9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2dwY3Rfd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczUyNl9haV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHM1MjZfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczUyNl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczUyNl9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHM1MjZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBpb2Jhc2U7CisJaW50IGksIG47CisvLyAgICAgIHNob3J0IHZhbHVlOworLy8gICAgICBpbnQgc3ViZGV2X2NoYW5uZWwgPSAwOworCisJcHJpbnRrKCJjb21lZGklZDogczUyNjogIiwgZGV2LT5taW5vcik7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpZiAoIWlvYmFzZSB8fCAhcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBTNTI2X0lPU0laRSwgdGhpc2JvYXJkLT5uYW1lKSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiSS9PIHBvcnQgY29uZmxpY3QiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJcHJpbnRrKCJpb2Jhc2U9MHglbHhcbiIsIGRldi0+aW9iYXNlKTsKKworCS8qKiogbWFrZSBpdCBhIGxpdHRsZSBxdWlldGVyLCBleHcsIDgvMjkvMDYKKwlmb3IgKGkgPSAwOyBpIDwgUzUyNl9OVU1fUE9SVFM7IGkrKykgeworCQlwcmludGsoIjB4JTAyeDogMHglMDR4XG4iLCBBRERSX1JFRyhzNTI2X3BvcnRzW2ldKSwgaW53KEFERFJfUkVHKHM1MjZfcG9ydHNbaV0pKSk7CisJfQorCSoqKi8KKworLyoKKyAqIEluaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lLiAgTm90ZSB0aGF0IHdlIGNhbiB1c2UgdGhlICJ0aGlzYm9hcmQiCisgKiBtYWNybyBub3csIHNpbmNlIHdlIGp1c3QgaW5pdGlhbGl6ZWQgaXQgaW4gdGhlIGxhc3QgbGluZS4KKyAqLworCWRldi0+Ym9hcmRfcHRyID0gJnM1MjZfYm9hcmRzWzBdOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuICBhbGxvY19wcml2YXRlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHM1MjZfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlkZXYtPm5fc3ViZGV2aWNlcyA9IDQ7CisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCBkZXYtPm5fc3ViZGV2aWNlcykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIEdFTkVSQUwtUFVSUE9TRSBDT1VOVEVSL1RJTUUgKEdQQ1QpICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0xTQU1QTDsKKwkvKiBLRzogV2hhdCBkb2VzIFNERl9MU0FNUEwgKHNlZSBtdWx0aXEzLmMpIG1lYW4/ICovCisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5ncGN0X2NoYW5zOworCXMtPm1heGRhdGEgPSAweDAwZmZmZmZmOwkvKiAyNCBiaXQgY291bnRlciAqLworCXMtPmluc25fcmVhZCA9IHM1MjZfZ3BjdF9yaW5zbjsKKwlzLT5pbnNuX2NvbmZpZyA9IHM1MjZfZ3BjdF9pbnNuX2NvbmZpZzsKKwlzLT5pbnNuX3dyaXRlID0gczUyNl9ncGN0X3dpbnNuOworCisJLyogQ29tbWFuZCBhcmUgbm90IGltcGxlbWVudGVkIHlldCwgaG93ZXZlciB0aGV5IGFyZSBuZWNlc3NhcnkgdG8KKwkgICBhbGxvY2F0ZSB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBmb3IgdGhlIGNvbWVkaV9hc3luYyBzdHJ1Y3QgKHVzZWQKKwkgICB0byB0cmlnZ2VyIHRoZSBHUENUIGluIGNhc2Ugb2YgcHVsc2VnZW5lcmF0b3IgZnVuY3Rpb24gKi8KKwkvL3MtPmRvX2NtZCA9IHM1MjZfZ3BjdF9jbWQ7CisJLy9zLT5kb19jbWR0ZXN0ID0gczUyNl9ncGN0X2NtZHRlc3Q7CisJLy9zLT5jYW5jZWwgPSBzNTI2X2dwY3RfY2FuY2VsOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLy9kZXYtPnJlYWRfc3ViZGV2PXM7CisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkvKiB3ZSBzdXBwb3J0IGRpZmZlcmVudGlhbCAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9ESUZGOworCS8qIGNoYW5uZWxzIDAgdG8gNyBhcmUgdGhlIHJlZ3VsYXIgZGlmZmVyZW50aWFsIGlucHV0cyAqLworCS8qIGNoYW5uZWwgOCBpcyAicmVmZXJlbmNlIDAiICgrMTBWKSwgY2hhbm5lbCA5IGlzICJyZWZlcmVuY2UgMSIgKDBWKSAqLworCXMtPm5fY2hhbiA9IDEwOworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCXMtPmxlbl9jaGFubGlzdCA9IDE2OwkvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGNoYW5saXN0IGxlbmd0aCB0aGF0CisJCQkJICAgdGhlIGJvYXJkIGNhbiBoYW5kbGUgKi8KKwlzLT5pbnNuX3JlYWQgPSBzNTI2X2FpX3JpbnNuOworCXMtPmluc25fY29uZmlnID0gczUyNl9haV9pbnNuX2NvbmZpZzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA0OworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCXMtPmluc25fd3JpdGUgPSBzNTI2X2FvX3dpbnNuOworCXMtPmluc25fcmVhZCA9IHM1MjZfYW9fcmluc247CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwlpZiAodGhpc2JvYXJkLT5oYXZlX2RpbykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IDI7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBzNTI2X2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gczUyNl9kaW9faW5zbl9jb25maWc7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworCisjaWYgMAorCS8vIEV4YW1wbGUgb2YgQ291bnRlciBBcHBsaWNhdGlvbgorCS8vT25lLXNob3QgKHNvZnR3YXJlIHRyaWdnZXIpCisJY21SZWcucmVnLmNvdXRTb3VyY2UgPSAwOwkvLyBvdXQgUkNBUAorCWNtUmVnLnJlZy5jb3V0UG9sYXJpdHkgPSAxOwkvLyBQb2xhcml0eSBpbnZlcnRlZAorCWNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcCA9IDE7CS8vIEF1dG8gbG9hZCAwOmRpc2FibGVkLCAxOmVuYWJsZWQKKwljbVJlZy5yZWcuaHdDdEVuYWJsZVNvdXJjZSA9IDM7CS8vIE5PVCBSQ0FQCisJY21SZWcucmVnLmN0RW5hYmxlQ3RybCA9IDI7CS8vIEhhcmR3YXJlCisJY21SZWcucmVnLmNsb2NrU291cmNlID0gMjsJLy8gSW50ZXJuYWwKKwljbVJlZy5yZWcuY291bnREaXIgPSAxOwkvLyBEb3duCisJY21SZWcucmVnLmNvdW50RGlyQ3RybCA9IDE7CS8vIFNvZnR3YXJlCisJY21SZWcucmVnLm91dHB1dFJlZ0xhdGNoQ3RybCA9IDA7CS8vIGxhdGNoIG9uIHJlYWQKKwljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8vIFBSMAorCWNtUmVnLnJlZy5yZXNlcnZlZCA9IDA7CisKKwlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CisKKwlvdXR3KDB4MDAwMSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCW91dHcoMHgzQzY4LCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CisKKwlvdXR3KDB4ODAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBSZXNldCB0aGUgY291bnRlcgorCW91dHcoMHg0MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CS8vIExvYWQgdGhlIGNvdW50ZXIgZnJvbSBQUjAKKworCW91dHcoMHgwMDA4LCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CS8vIFJlc2V0IFJDQVAgKGZpcmVzIG9uZS1zaG90KQorCisjZWxzZQorCisJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorCWNtUmVnLnJlZy5jb3V0U291cmNlID0gMDsJLy8gb3V0IFJDQVAKKwljbVJlZy5yZWcuY291dFBvbGFyaXR5ID0gMDsJLy8gUG9sYXJpdHkgaW52ZXJ0ZWQKKwljbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPSAwOwkvLyBBdXRvIGxvYWQgZGlzYWJsZWQKKwljbVJlZy5yZWcuaHdDdEVuYWJsZVNvdXJjZSA9IDI7CS8vIE5PVCBSQ0FQCisJY21SZWcucmVnLmN0RW5hYmxlQ3RybCA9IDE7CS8vIDE6IFNvZnR3YXJlLCAgPjEgOiBIYXJkd2FyZQorCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDM7CS8vIHg0CisJY21SZWcucmVnLmNvdW50RGlyID0gMDsJLy8gdXAKKwljbVJlZy5yZWcuY291bnREaXJDdHJsID0gMDsJLy8gcXVhZHJhdHVyZQorCWNtUmVnLnJlZy5vdXRwdXRSZWdMYXRjaEN0cmwgPSAwOwkvLyBsYXRjaCBvbiByZWFkCisJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAwOwkvLyBQUjAKKwljbVJlZy5yZWcucmVzZXJ2ZWQgPSAwOworCisJbiA9IDA7CisJcHJpbnRrKCJNb2RlIHJlZz0weCUwNHgsIDB4JTA0bHhcbiIsIGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sCisJCQluKSk7CisJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBuKSk7CisJdWRlbGF5KDEwMDApOworCXByaW50aygiUmVhZCBiYWNrIG1vZGUgcmVnPTB4JTA0eFxuIiwgaW53KEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgbikpKTsKKworCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGhpZ2ggd29yZAorLy8gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoc2hvcnQpICgweDU1KTsKKy8vICAgICAgICAgICAgICAgICAgICAgIG91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgbikpOworCisJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgbG93IHdvcmQKKy8vICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKHNob3J0KSgweGFhNTUpOworLy8gICAgICAgICAgICAgICAgICAgICAgb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBuKSk7CisKKwkvLyBXcml0ZSB0aGUgQ291bnRlciBDb250cm9sIFJlZ2lzdGVyCisvLyAgICAgICAgICAgICAgICAgICAgICBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIDApKTsKKworCS8vIFJlc2V0IHRoZSBjb3VudGVyIGlmIGl0IGlzIHNvZnR3YXJlIHByZWxvYWQKKwlpZiAoY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID09IDApIHsKKwkJb3V0dygweDgwMDAsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgbikpOwkvLyBSZXNldCB0aGUgY291bnRlcgorCQlvdXR3KDB4NDAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBuKSk7CS8vIExvYWQgdGhlIGNvdW50ZXIgZnJvbSBQUjAKKwl9CisKKwlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIG4pKTsKKwl1ZGVsYXkoMTAwMCk7CisJcHJpbnRrKCJSZWFkIGJhY2sgbW9kZSByZWc9MHglMDR4XG4iLCBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBuKSkpOworCisjZW5kaWYKKwlwcmludGsoIkN1cnJlbnQgcmVnaXN0cmVzOlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgUzUyNl9OVU1fUE9SVFM7IGkrKykgeworCQlwcmludGsoIjB4JTAybHg6IDB4JTA0eFxuIiwgQUREUl9SRUcoczUyNl9wb3J0c1tpXSksCisJCQlpbncoQUREUl9SRUcoczUyNl9wb3J0c1tpXSkpKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgczUyNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogczUyNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlvYmFzZSA+IDApCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBTNTI2X0lPU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNTI2X2dwY3Rfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOwkJCS8vIGNvdW50cyB0aGUgRGF0YQorCWludCBjb3VudGVyX2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBzaG9ydCBkYXRhbG93OworCXVuc2lnbmVkIHNob3J0IGRhdGFoaWdoOworCisJLy8gQ2hlY2sgaWYgKG4gPiAwKQorCWlmIChpbnNuLT5uIDw9IDApIHsKKwkJcHJpbnRrKCJzNTI2OiBJTlNOX1JFQUQ6IG4gc2hvdWxkIGJlID4gMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvLyBSZWFkIHRoZSBsb3cgd29yZCBmaXJzdAorCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YWxvdyA9IGludyhBRERSX0NIQU5fUkVHKFJFR19DMEwsIGNvdW50ZXJfY2hhbm5lbCkpOworCQlkYXRhaGlnaCA9IGludyhBRERSX0NIQU5fUkVHKFJFR19DMEgsIGNvdW50ZXJfY2hhbm5lbCkpOworCQlkYXRhW2ldID0gKGludCkoZGF0YWhpZ2ggJiAweDAwRkYpOworCQlkYXRhW2ldID0gKGRhdGFbaV0gPDwgMTYpIHwgKGRhdGFsb3cgJiAweEZGRkYpOworLy8gICAgICAgICAgICAgIHByaW50aygiczUyNiBHUENUWyVkXTogJXgoMHglMDR4LCAweCUwNHgpXG4iLCBjb3VudGVyX2NoYW5uZWwsIGRhdGFbaV0sIGRhdGFoaWdoLCBkYXRhbG93KTsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgczUyNl9ncGN0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgc3ViZGV2X2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gVW5wYWNrIGNoYW5zcGVjCisJaW50IGk7CisJc2hvcnQgdmFsdWU7CisKKy8vICAgICAgICBwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9DT05GSUc6IENvbmZpZ3VyaW5nIENoYW5uZWwgJWRcbiIsIHN1YmRldl9jaGFubmVsKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfR1BDVF9DT05GSUdfREFUQTsgaSsrKSB7CisJCWRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdLmRhdGFbaV0gPQorCQkJaW5zbi0+ZGF0YVtpXTsKKy8vICAgICAgICAgICAgICBwcmludGsoImRhdGFbJWRdPSV4XG4iLCBpLCBpbnNuLT5kYXRhW2ldKTsKKwl9CisKKwkvLyBDaGVjayB3aGF0IHR5cGUgb2YgQ291bnRlciB0aGUgdXNlciByZXF1ZXN0ZWQsIGRhdGFbMF0gY29udGFpbnMKKwkvLyB0aGUgQXBwbGljYXRpb24gdHlwZQorCXN3aXRjaCAoaW5zbi0+ZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfR1BDVF9RVUFEUkFUVVJFX0VOQ09ERVI6CisJCS8qCisJCSAgIGRhdGFbMF06IEFwcGxpY2F0aW9uIFR5cGUKKwkJICAgZGF0YVsxXTogQ291bnRlciBNb2RlIFJlZ2lzdGVyIFZhbHVlCisJCSAgIGRhdGFbMl06IFByZS1sb2FkIFJlZ2lzdGVyIFZhbHVlCisJCSAgIGRhdGFbM106IENvbnRlciBDb250cm9sIFJlZ2lzdGVyCisJCSAqLworCQlwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9DT05GSUc6IENvbmZpZ3VyaW5nIEVuY29kZXJcbiIpOworCQlkZXZwcml2LT5zNTI2X2dwY3RfY29uZmlnW3N1YmRldl9jaGFubmVsXS5hcHAgPQorCQkJUG9zaXRpb25NZWFzdXJlbWVudDsKKworLyoKKwkJCS8vIEV4YW1wbGUgb2YgQ291bnRlciBBcHBsaWNhdGlvbgorCQkJLy9PbmUtc2hvdCAoc29mdHdhcmUgdHJpZ2dlcikKKwkJCWNtUmVnLnJlZy5jb3V0U291cmNlCQk9IDA7IC8vIG91dCBSQ0FQCisJCQljbVJlZy5yZWcuY291dFBvbGFyaXR5CQk9IDE7IC8vIFBvbGFyaXR5IGludmVydGVkCisJCQljbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAJPSAwOyAvLyBBdXRvIGxvYWQgZGlzYWJsZWQKKwkJCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlCT0gMzsgLy8gTk9UIFJDQVAKKwkJCWNtUmVnLnJlZy5jdEVuYWJsZUN0cmwJCT0gMjsgLy8gSGFyZHdhcmUKKwkJCWNtUmVnLnJlZy5jbG9ja1NvdXJjZQkJPSAyOyAvLyBJbnRlcm5hbAorCQkJY21SZWcucmVnLmNvdW50RGlyCQk9IDE7IC8vIERvd24KKwkJCWNtUmVnLnJlZy5jb3VudERpckN0cmwJCT0gMTsgLy8gU29mdHdhcmUKKwkJCWNtUmVnLnJlZy5vdXRwdXRSZWdMYXRjaEN0cmwJPSAwOyAvLyBsYXRjaCBvbiByZWFkCisJCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbAkJPSAwOyAvLyBQUjAKKwkJCWNtUmVnLnJlZy5yZXNlcnZlZAkJPSAwOworCisJCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CisKKwkJCW91dHcoMHgwMDAxLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CisJCQlvdXR3KDB4M0M2OCwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCQlvdXR3KDB4ODAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBSZXNldCB0aGUgY291bnRlcgorCQkJb3V0dygweDQwMDAsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsJLy8gTG9hZCB0aGUgY291bnRlciBmcm9tIFBSMAorCisJCQlvdXR3KDB4MDAwOCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOyAgLy8gUmVzZXQgUkNBUCAoZmlyZXMgb25lLXNob3QpCisKKyovCisKKyNpZiAxCisJCS8vIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIKKwkJY21SZWcucmVnLmNvdXRTb3VyY2UgPSAwOwkvLyBvdXQgUkNBUAorCQljbVJlZy5yZWcuY291dFBvbGFyaXR5ID0gMDsJLy8gUG9sYXJpdHkgaW52ZXJ0ZWQKKwkJY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID0gMDsJLy8gQXV0byBsb2FkIGRpc2FibGVkCisJCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlID0gMjsJLy8gTk9UIFJDQVAKKwkJY21SZWcucmVnLmN0RW5hYmxlQ3RybCA9IDE7CS8vIDE6IFNvZnR3YXJlLCAgPjEgOiBIYXJkd2FyZQorCQljbVJlZy5yZWcuY2xvY2tTb3VyY2UgPSAzOwkvLyB4NAorCQljbVJlZy5yZWcuY291bnREaXIgPSAwOwkvLyB1cAorCQljbVJlZy5yZWcuY291bnREaXJDdHJsID0gMDsJLy8gcXVhZHJhdHVyZQorCQljbVJlZy5yZWcub3V0cHV0UmVnTGF0Y2hDdHJsID0gMDsJLy8gbGF0Y2ggb24gcmVhZAorCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8vIFBSMAorCQljbVJlZy5yZWcucmVzZXJ2ZWQgPSAwOworCisJCS8vIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiczUyNjogQ291bnRlciBNb2RlIHJlZ2lzdGVyPSV4XG4iLCBjbVJlZy52YWx1ZSk7CisJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBSZXNldCB0aGUgY291bnRlciBpZiBpdCBpcyBzb2Z0d2FyZSBwcmVsb2FkCisJCWlmIChjbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPT0gMCkgeworCQkJb3V0dygweDgwMDAsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsJLy8gUmVzZXQgdGhlIGNvdW50ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0dygweDQwMDAsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsgICAvLyBMb2FkIHRoZSBjb3VudGVyIGZyb20gUFIwCisJCX0KKyNlbHNlCisJCWNtUmVnLnJlZy5jb3VudERpckN0cmwgPSAwOwkvLyAwIHF1YWRyYXR1cmUsIDEgc29mdHdhcmUgY29udHJvbAorCisJCS8vIGRhdGFbMV0gY29udGFpbnMgR1BDVF9YMSwgR1BDVF9YMiBvciBHUENUX1g0CisJCWlmIChpbnNuLT5kYXRhWzFdID09IEdQQ1RfWDIpIHsKKwkJCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDE7CisJCX0gZWxzZSBpZiAoaW5zbi0+ZGF0YVsxXSA9PSBHUENUX1g0KSB7CisJCQljbVJlZy5yZWcuY2xvY2tTb3VyY2UgPSAyOworCQl9IGVsc2UgeworCQkJY21SZWcucmVnLmNsb2NrU291cmNlID0gMDsKKwkJfQorCisJCS8vIFdoZW4gdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGluZGV4cHVsc2U6CisJCWlmIChpbnNuLT5kYXRhWzJdID09IEdQQ1RfSW5kZXhQaGFzZUxvd0xvdykgeworCQl9IGVsc2UgaWYgKGluc24tPmRhdGFbMl0gPT0gR1BDVF9JbmRleFBoYXNlTG93SGlnaCkgeworCQl9IGVsc2UgaWYgKGluc24tPmRhdGFbMl0gPT0gR1BDVF9JbmRleFBoYXNlSGlnaExvdykgeworCQl9IGVsc2UgaWYgKGluc24tPmRhdGFbMl0gPT0gR1BDVF9JbmRleFBoYXNlSGlnaEhpZ2gpIHsKKwkJfQorCQkvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgaW5kZXggcHVsc2U/CisJCWlmIChpbnNuLT5kYXRhWzNdID09IEdQQ1RfUkVTRVRfQ09VTlRFUl9PTl9JTkRFWCkKKwkJCWNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcCA9IDQ7CS8vIEF1dG8gbG9hZCB3aXRoIElOREVYXgorCisJCS8vIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIKKwkJY21SZWcudmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzFdICYgMHhGRkZGKTsKKwkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGhpZ2ggd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKChpbnNuLT5kYXRhWzJdID4+IDE2KSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbMl0gJiAweEZGRkYpOworCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gV3JpdGUgdGhlIENvdW50ZXIgQ29udHJvbCBSZWdpc3RlcgorCQlpZiAoaW5zbi0+ZGF0YVszXSAhPSAwKSB7CisJCQl2YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbM10gJiAweEZGRkYpOworCQkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOworCQl9CisJCS8vIFJlc2V0IHRoZSBjb3VudGVyIGlmIGl0IGlzIHNvZnR3YXJlIHByZWxvYWQKKwkJaWYgKGNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcCA9PSAwKSB7CisJCQlvdXR3KDB4ODAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBSZXNldCB0aGUgY291bnRlcgorCQkJb3V0dygweDQwMDAsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsJLy8gTG9hZCB0aGUgY291bnRlciBmcm9tIFBSMAorCQl9CisjZW5kaWYKKwkJYnJlYWs7CisKKwljYXNlIElOU05fQ09ORklHX0dQQ1RfU0lOR0xFX1BVTFNFX0dFTkVSQVRPUjoKKwkJLyoKKwkJICAgZGF0YVswXTogQXBwbGljYXRpb24gVHlwZQorCQkgICBkYXRhWzFdOiBDb3VudGVyIE1vZGUgUmVnaXN0ZXIgVmFsdWUKKwkJICAgZGF0YVsyXTogUHJlLWxvYWQgUmVnaXN0ZXIgMCBWYWx1ZQorCQkgICBkYXRhWzNdOiBQcmUtbG9hZCBSZWdpc3RlciAxIFZhbHVlCisJCSAgIGRhdGFbNF06IENvbnRlciBDb250cm9sIFJlZ2lzdGVyCisJCSAqLworCQlwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9DT05GSUc6IENvbmZpZ3VyaW5nIFNQR1xuIik7CisJCWRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdLmFwcCA9CisJCQlTaW5nbGVQdWxzZUdlbmVyYXRpb247CisKKwkJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorCQljbVJlZy52YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbMV0gJiAweEZGRkYpOworCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8vIFBSMAorCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMCBoaWdoIHdvcmQKKwkJdmFsdWUgPSAoc2hvcnQpICgoaW5zbi0+ZGF0YVsyXSA+PiAxNikgJiAweEZGRkYpOworCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMCBsb3cgd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbMl0gJiAweEZGRkYpOworCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorCQljbVJlZy52YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbMV0gJiAweEZGRkYpOworCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDE7CS8vIFBSMQorCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBoaWdoIHdvcmQKKwkJdmFsdWUgPSAoc2hvcnQpICgoaW5zbi0+ZGF0YVszXSA+PiAxNikgJiAweEZGRkYpOworCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBsb3cgd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbM10gJiAweEZGRkYpOworCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gV3JpdGUgdGhlIENvdW50ZXIgQ29udHJvbCBSZWdpc3RlcgorCQlpZiAoaW5zbi0+ZGF0YVszXSAhPSAwKSB7CisJCQl2YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbM10gJiAweEZGRkYpOworCQkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJTlNOX0NPTkZJR19HUENUX1BVTFNFX1RSQUlOX0dFTkVSQVRPUjoKKwkJLyoKKwkJICAgZGF0YVswXTogQXBwbGljYXRpb24gVHlwZQorCQkgICBkYXRhWzFdOiBDb3VudGVyIE1vZGUgUmVnaXN0ZXIgVmFsdWUKKwkJICAgZGF0YVsyXTogUHJlLWxvYWQgUmVnaXN0ZXIgMCBWYWx1ZQorCQkgICBkYXRhWzNdOiBQcmUtbG9hZCBSZWdpc3RlciAxIFZhbHVlCisJCSAgIGRhdGFbNF06IENvbnRlciBDb250cm9sIFJlZ2lzdGVyCisJCSAqLworCQlwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9DT05GSUc6IENvbmZpZ3VyaW5nIFBUR1xuIik7CisJCWRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdLmFwcCA9CisJCQlQdWxzZVRyYWluR2VuZXJhdGlvbjsKKworCQkvLyBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyCisJCWNtUmVnLnZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsxXSAmIDB4RkZGRik7CisJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLy8gUFIwCisJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGhpZ2ggd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKChpbnNuLT5kYXRhWzJdID4+IDE2KSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsyXSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyCisJCWNtUmVnLnZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsxXSAmIDB4RkZGRik7CisJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMTsJLy8gUFIxCisJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGxvdyB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBXcml0ZSB0aGUgQ291bnRlciBDb250cm9sIFJlZ2lzdGVyCisJCWlmIChpbnNuLT5kYXRhWzNdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoInM1MjY6IHVuc3VwcG9ydGVkIEdQQ1RfaW5zbl9jb25maWdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgczUyNl9ncGN0X3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgc3ViZGV2X2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gVW5wYWNrIGNoYW5zcGVjCisJc2hvcnQgdmFsdWU7CisKKwlwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9XUklURSBvbiBjaGFubmVsICVkXG4iLCBzdWJkZXZfY2hhbm5lbCk7CisJY21SZWcudmFsdWUgPSBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOworCXByaW50aygiczUyNjogQ291bnRlciBNb2RlIFJlZ2lzdGVyOiAleFxuIiwgY21SZWcudmFsdWUpOworCS8vIENoZWNrIHdoYXQgQXBwbGljYXRpb24gb2YgQ291bnRlciB0aGlzIGNoYW5uZWwgaXMgY29uZmlndXJlZCBmb3IKKwlzd2l0Y2ggKGRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdLmFwcCkgeworCWNhc2UgUG9zaXRpb25NZWFzdXJlbWVudDoKKwkJcHJpbnRrKCJTNTI2OiBJTlNOX1dSSVRFOiBQTVxuIik7CisJCW91dHcoMHhGRkZGICYgKCgqZGF0YSkgPj4gMTYpLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsCisJCQkJc3ViZGV2X2NoYW5uZWwpKTsKKwkJb3V0dygweEZGRkYgJiAoKmRhdGEpLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CisJCWJyZWFrOworCisJY2FzZSBTaW5nbGVQdWxzZUdlbmVyYXRpb246CisJCXByaW50aygiUzUyNjogSU5TTl9XUklURTogU1BHXG4iKTsKKwkJb3V0dygweEZGRkYgJiAoKCpkYXRhKSA+PiAxNiksIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwKKwkJCQlzdWJkZXZfY2hhbm5lbCkpOworCQlvdXR3KDB4RkZGRiAmICgqZGF0YSksIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKwkJYnJlYWs7CisKKwljYXNlIFB1bHNlVHJhaW5HZW5lcmF0aW9uOgorCQkvKiBkYXRhWzBdIGNvbnRhaW5zIHRoZSBQVUxTRV9XSURUSAorCQkgICBkYXRhWzFdIGNvbnRhaW5zIHRoZSBQVUxTRV9QRVJJT0QKKwkJICAgQHByZSBQVUxTRV9QRVJJT0QgPiBQVUxTRV9XSURUSCA+IDAKKwkJICAgVGhlIGFib3ZlIHBlcmlvZHMgbXVzdCBiZSBleHByZXNzZWQgYXMgYSBtdWx0aXBsZSBvZiB0aGUKKwkJICAgcHVsc2UgZnJlcXVlbmN5IG9uIHRoZSBzZWxlY3RlZCBzb3VyY2UKKwkJICovCisJCXByaW50aygiUzUyNjogSU5TTl9XUklURTogUFRHXG4iKTsKKwkJaWYgKChpbnNuLT5kYXRhWzFdID4gaW5zbi0+ZGF0YVswXSkgJiYgKGluc24tPmRhdGFbMF0gPiAwKSkgeworCQkJKGRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdKS5kYXRhWzBdID0KKwkJCQlpbnNuLT5kYXRhWzBdOworCQkJKGRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdKS5kYXRhWzFdID0KKwkJCQlpbnNuLT5kYXRhWzFdOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCIlZCBcdCAlZFxuIiwgaW5zbi0+ZGF0YVsxXSwgaW5zbi0+ZGF0YVsyXSk7CisJCQlwcmludGsoInM1MjY6IElOU05fV1JJVEU6IFBURzogUHJvYmxlbSB3aXRoIFB1bHNlIHBhcmFtc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXZhbHVlID0gKHNob3J0KSAoKCpkYXRhID4+IDE2KSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKwkJdmFsdWUgPSAoc2hvcnQpICgqZGF0YSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8vIEltcG9zc2libGUKKwkJcHJpbnRrKCJzNTI2OiBJTlNOX1dSSVRFOiBGdW5jdGlvbmFsaXR5ICVkIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsIGRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdLmFwcCk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB3cml0dGVuCisJcmV0dXJuIGluc24tPm47Cit9CisKKyNkZWZpbmUgSVNSX0FEQ19ET05FIDB4NAorc3RhdGljIGludCBzNTI2X2FpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgcmVzdWx0ID0gLUVJTlZBTDsKKworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdCA9IGluc24tPm47CisKKwkvKiBkYXRhWzBdIDogY2hhbm5lbHMgd2FzIHNldCBpbiByZWxldmFudCBiaXRzLgorCSAgIGRhdGFbMV0gOiBkZWxheQorCSAqLworCS8qIENPTU1FTlQ6IGFiYm90dGkgMjAwOC0wNy0yNDogSSBkb24ndCBrbm93IHdoeSB5b3UnZCB3YW50IHRvCisJICogZW5hYmxlIGNoYW5uZWxzIGhlcmUuICBUaGUgY2hhbm5lbCBzaG91bGQgYmUgZW5hYmxlZCBpbiB0aGUKKwkgKiBJTlNOX1JFQUQgaGFuZGxlci4gKi8KKworCS8vIEVuYWJsZSBBREMgaW50ZXJydXB0CisJb3V0dyhJU1JfQURDX0RPTkUsIEFERFJfUkVHKFJFR19JRVIpKTsKKy8vICAgICAgcHJpbnRrKCJzNTI2OiBBREMgY3VycmVudCB2YWx1ZTogMHglMDR4XG4iLCBpbncoQUREUl9SRUcoUkVHX0FEQykpKTsKKwlkZXZwcml2LT5zNTI2X2FpX2NvbmZpZyA9IChkYXRhWzBdICYgMHgzRkYpIDw8IDU7CisJaWYgKGRhdGFbMV0gPiAwKQorCQlkZXZwcml2LT5zNTI2X2FpX2NvbmZpZyB8PSAweDgwMDA7CS8vc2V0IHRoZSBkZWxheQorCisJZGV2cHJpdi0+czUyNl9haV9jb25maWcgfD0gMHgwMDAxOwkvLyBBREMgc3RhcnQgYml0LgorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqICJpbnN0cnVjdGlvbnMiIHJlYWQvd3JpdGUgZGF0YSBpbiAib25lLXNob3QiIG9yICJzb2Z0d2FyZS10cmlnZ2VyZWQiCisgKiBtb2RlLgorICovCitzdGF0aWMgaW50IHM1MjZfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgc2hvcnQgdmFsdWU7CisJdW5zaWduZWQgaW50IGQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCS8qIFNldCBjb25maWd1cmVkIGRlbGF5LCBlbmFibGUgY2hhbm5lbCBmb3IgdGhpcyBjaGFubmVsIG9ubHksCisJICogc2VsZWN0ICJBREMgcmVhZCIgY2hhbm5lbCwgc2V0ICJBREMgc3RhcnQiIGJpdC4gKi8KKwl2YWx1ZSA9IChkZXZwcml2LT5zNTI2X2FpX2NvbmZpZyAmIDB4ODAwMCkgfAorCQkoKDEgPDwgNSkgPDwgY2hhbikgfCAoY2hhbiA8PCAxKSB8IDB4MDAwMTsKKworCS8qIGNvbnZlcnQgbiBzYW1wbGVzICovCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJb3V0dyh2YWx1ZSwgQUREUl9SRUcoUkVHX0FEQykpOworLy8gICAgICAgICAgICAgIHByaW50aygiczUyNjogV3JvdGUgMHglMDR4IHRvIEFEQ1xuIiwgdmFsdWUpOworLy8gICAgICAgICAgICAgIHByaW50aygiczUyNjogQURDIHJlZz0weCUwNHhcbiIsIGludyhBRERSX1JFRyhSRUdfQURDKSkpOworCisjZGVmaW5lIFRJTUVPVVQgMTAwCisJCS8qIHdhaXQgZm9yIGNvbnZlcnNpb24gdG8gZW5kICovCisJCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJCXN0YXR1cyA9IGludyhBRERSX1JFRyhSRUdfSVNSKSk7CisJCQlpZiAoc3RhdHVzICYgSVNSX0FEQ19ET05FKSB7CisJCQkJb3V0dyhJU1JfQURDX0RPTkUsIEFERFJfUkVHKFJFR19JU1IpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBUSU1FT1VUKSB7CisJCQkvKiBydF9wcmludGsoKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHByaW50aygpCisJCQkgKiB3aGVuZXZlciB0aGUgY29kZSBjYW4gYmUgY2FsbGVkIGZyb20gcmVhbC10aW1lLiAqLworCQkJcnRfcHJpbnRrKCJzNTI2OiBBREMoMHglMDR4KSB0aW1lb3V0XG4iLAorCQkJCWludyhBRERSX1JFRyhSRUdfSVNSKSkpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQkvKiByZWFkIGRhdGEgKi8KKwkJZCA9IGludyhBRERSX1JFRyhSRUdfQUREKSk7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJBSVslZF09MHglMDR4XG4iLCBuLCAodW5zaWduZWQgc2hvcnQpKGQgJiAweEZGRkYpKTsKKworCQkvKiBtdW5nZSBkYXRhICovCisJCWRhdGFbbl0gPSBkIF4gMHg4MDAwOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgczUyNl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBzaG9ydCB2YWw7CisKKy8vICAgICAgcHJpbnRrKCJzNTI2X2FvX3dpbnNuXG4iKTsKKwl2YWwgPSBjaGFuIDw8IDE7CisvLyAgICAgIG91dHcodmFsLCBkZXYtPmlvYmFzZSArIFJFR19EQUMpOworCW91dHcodmFsLCBBRERSX1JFRyhSRUdfREFDKSk7CisKKwkvKiBXcml0aW5nIGEgbGlzdCBvZiB2YWx1ZXMgdG8gYW4gQU8gY2hhbm5lbCBpcyBwcm9iYWJseSBub3QKKwkgKiB2ZXJ5IHVzZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJLyogYSB0eXBpY2FsIHByb2dyYW1taW5nIHNlcXVlbmNlICovCisvLyAgICAgICAgICAgICAgb3V0dyhkYXRhW2ldLCBkZXYtPmlvYmFzZSArIFJFR19BREQpOyAgLy8gd3JpdGUgdGhlIGRhdGEgdG8gcHJlbG9hZCByZWdpc3RlcgorCQlvdXR3KGRhdGFbaV0sIEFERFJfUkVHKFJFR19BREQpKTsJLy8gd3JpdGUgdGhlIGRhdGEgdG8gcHJlbG9hZCByZWdpc3RlcgorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisvLyAgICAgICAgICAgICAgb3V0dyh2YWwgKyAxLCBkZXYtPmlvYmFzZSArIFJFR19EQUMpOyAvLyBzdGFydHMgdGhlIEQvQSBjb252ZXJzaW9uLgorCQlvdXR3KHZhbCArIDEsIEFERFJfUkVHKFJFR19EQUMpKTsJLy8gc3RhcnRzIHRoZSBEL0EgY29udmVyc2lvbi4KKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgczUyNl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCisvKiBESU8gZGV2aWNlcyBhcmUgc2xpZ2h0bHkgc3BlY2lhbC4gIEFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBpbXBsZW1lbnQgdGhlIGluc25fcmVhZC9pbnNuX3dyaXRlIGludGVyZmFjZSwgaXQgaXMgbXVjaCBtb3JlCisgKiB1c2VmdWwgdG8gYXBwbGljYXRpb25zIGlmIHlvdSBpbXBsZW1lbnQgdGhlIGluc25fYml0cyBpbnRlcmZhY2UuCisgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUKKyAqIGNvbWVkaSBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KK3N0YXRpYyBpbnQgczUyNl9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJLyogV3JpdGUgb3V0IHRoZSBuZXcgZGlnaXRhbCBvdXRwdXQgbGluZXMgKi8KKwkJb3V0dyhzLT5zdGF0ZSwgQUREUl9SRUcoUkVHX0RJTykpOworCX0KKworCS8qIG9uIHJldHVybiwgZGF0YVsxXSBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0YWwKKwkgKiBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiAqLworCWRhdGFbMV0gPSBpbncoQUREUl9SRUcoUkVHX0RJTykpICYgMHhGRjsJLy8gbG93IDggYml0cyBhcmUgdGhlIGRhdGEKKwkvKiBvciB3ZSBjb3VsZCBqdXN0IHJldHVybiB0aGUgc29mdHdhcmUgY29weSBvZiB0aGUgb3V0cHV0IHZhbHVlcyBpZgorCSAqIGl0IHdhcyBhIHB1cmVseSBkaWdpdGFsIG91dHB1dCBzdWJkZXZpY2UgKi8KKwkvL2RhdGFbMV09cy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBzNTI2X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlzaG9ydCB2YWx1ZTsKKworCXByaW50aygiUzUyNiBESU8gaW5zbl9jb25maWdcbiIpOworCisJaWYgKGluc24tPm4gIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWx1ZSA9IGludyhBRERSX1JFRyhSRUdfRElPKSk7CisKKwkvKiBUaGUgaW5wdXQgb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBkaWdpdGFsIGxpbmUgaXMKKwkgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCisJICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisJICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCisKKwlpZiAoZGF0YVswXSA9PSBDT01FRElfT1VUUFVUKSB7CisJCXZhbHVlIHw9IDEgPDwgKGNoYW4gKyAxMCk7CS8vIGJpdCAxMC8xMSBzZXQgdGhlIGdyb3VwIDEvMidzIG1vZGUKKwkJcy0+aW9fYml0cyB8PSAoMHhGIDw8IGNoYW4pOworCX0gZWxzZSB7CisJCXZhbHVlICY9IH4oMSA8PCAoY2hhbiArIDEwKSk7CS8vIDEgaXMgb3V0cHV0LCAwIGlzIGlucHV0LgorCQlzLT5pb19iaXRzICY9IH4oMHhGIDw8IGNoYW4pOworCX0KKwlvdXR3KHZhbHVlLCBBRERSX1JFRyhSRUdfRElPKSk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9zNTI2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCmluZGV4IDQ2OWVlOGMuLjMwZGVjOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYwpAQCAtODIsNyArODIsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTZW5zb3JheSA2MjYgQ29tZWRpIGRyaXZlciBtb2R1bGUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotdHlwZWRlZiBzdHJ1Y3QgczYyNl9ib2FyZF9zdHJ1Y3Qgeworc3RydWN0IHM2MjZfYm9hcmQgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGFpX2NoYW5zOwogCWludCBhaV9iaXRzOwpAQCAtOTEsMjIgKzkxLDIyIEBACiAJaW50IGRpb19jaGFuczsKIAlpbnQgZGlvX2JhbmtzOwogCWludCBlbmNfY2hhbnM7Ci19IHM2MjZfYm9hcmQ7Cit9OwogCi1zdGF0aWMgY29uc3QgczYyNl9ib2FyZCBzNjI2X2JvYXJkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzNjI2X2JvYXJkIHM2MjZfYm9hcmRzW10gPSB7CiAJewogCSAgICAgIG5hbWU6CSJzNjI2IiwKLQkgICAgICBhaV9jaGFuczpTNjI2X0FEQ19DSEFOTkVMUywKKwkgICAgICBhaV9jaGFucyA6IFM2MjZfQURDX0NIQU5ORUxTLAogCSAgICAgIGFpX2JpdHM6CTE0LAotCSAgICAgIGFvX2NoYW5zOlM2MjZfREFDX0NIQU5ORUxTLAorCSAgICAgIGFvX2NoYW5zIDogUzYyNl9EQUNfQ0hBTk5FTFMsCiAJICAgICAgYW9fYml0czoJMTMsCi0JICAgICAgZGlvX2NoYW5zOlM2MjZfRElPX0NIQU5ORUxTLAotCSAgICAgIGRpb19iYW5rczpTNjI2X0RJT19CQU5LUywKLQkgICAgICBlbmNfY2hhbnM6UzYyNl9FTkNPREVSX0NIQU5ORUxTLAorCSAgICAgIGRpb19jaGFucyA6IFM2MjZfRElPX0NIQU5ORUxTLAorCSAgICAgIGRpb19iYW5rcyA6IFM2MjZfRElPX0JBTktTLAorCSAgICAgIGVuY19jaGFucyA6IFM2MjZfRU5DT0RFUl9DSEFOTkVMUywKIAkJfQogfTsKIAotI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzNjI2X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBzNjI2X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUzYyNiAweDExMzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TNjI2IDB4NzE0NgogCkBAIC0xMTgsNTcgKzExOCw0OSBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgczYyNl9wY2lfdGFibGUpOwogCi1zdGF0aWMgaW50IHM2MjZfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9kZXZjb25maWcgKiBpdCk7Ci1zdGF0aWMgaW50IHM2MjZfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBzNjI2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBzNjI2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX3M2MjYgPSB7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3M2MjYgPSB7CiAgICAgICBkcml2ZXJfbmFtZToiczYyNiIsCi0gICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCi0gICAgICBhdHRhY2g6czYyNl9hdHRhY2gsCi0gICAgICBkZXRhY2g6czYyNl9kZXRhY2gsCisgICAgICBtb2R1bGUgOiBUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaCA6IHM2MjZfYXR0YWNoLAorICAgICAgZGV0YWNoIDogczYyNl9kZXRhY2gsCiB9OwogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgczYyNl9wcml2YXRlIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl2b2lkICpiYXNlX2FkZHI7CiAJaW50IGdvdF9yZWdpb25zOwogCXNob3J0IGFsbG9jYXRlZEJ1ZjsKLQl1aW50OF90IGFpX2NtZF9ydW5uaW5nOwkvLyBhaV9jbWQgaXMgcnVubmluZwotCXVpbnQ4X3QgYWlfY29udGlub3VzOwkvLyBjb250aW5vdXMgYXF1aXNpdGlvbgotCWludCBhaV9zYW1wbGVfY291bnQ7CS8vIG51bWJlciBvZiBzYW1wbGVzIHRvIGFxdWlyZQotCXVuc2lnbmVkIGludCBhaV9zYW1wbGVfdGltZXI7CS8vIHRpbWUgYmV0d2VlbiBzYW1wbGVzIGluCi0JLy8gdW5pdHMgb2YgdGhlIHRpbWVyCi0JaW50IGFpX2NvbnZlcnRfY291bnQ7CS8vIGNvbnZlcnNpb24gY291bnRlcgotCXVuc2lnbmVkIGludCBhaV9jb252ZXJ0X3RpbWVyOwkvLyB0aW1lIGJldHdlZW4gY29udmVyc2lvbiBpbgotCS8vIHVuaXRzIG9mIHRoZSB0aW1lcgotCXVpbnQxNl90IENvdW50ZXJJbnRFbmFiczsJLy9Db3VudGVyIGludGVycnVwdCBlbmFibGUKLQkvL21hc2sgZm9yIE1JU0MyIHJlZ2lzdGVyLgotCXVpbnQ4X3QgQWRjSXRlbXM7CS8vTnVtYmVyIG9mIGl0ZW1zIGluIEFEQyBwb2xsCi0JLy9saXN0LgotCURNQUJVRiBSUFNCdWY7CQkvL0RNQSBidWZmZXIgdXNlZCB0byBob2xkIEFEQwotCS8vKFJQUzEpIHByb2dyYW0uCi0JRE1BQlVGIEFOQUJ1ZjsJCS8vRE1BIGJ1ZmZlciB1c2VkIHRvIHJlY2VpdmUKLQkvL0FEQyBkYXRhIGFuZCBob2xkIERBQyBkYXRhLgotCXVpbnQzMl90ICpwRGFjV0J1ZjsJLy9Qb2ludGVyIHRvIGxvZ2ljYWwgYWRycyBvZgotCS8vRE1BIGJ1ZmZlciB1c2VkIHRvIGhvbGQgREFDCi0JLy9kYXRhLgotCXVpbnQxNl90IERhY3BvbDsJLy9JbWFnZSBvZiBEQUMgcG9sYXJpdHkKLQkvL3JlZ2lzdGVyLgotCXVpbnQ4X3QgVHJpbVNldHBvaW50WzEyXTsJLy9JbWFnZXMgb2YgVHJpbURBQyBzZXRwb2ludHMuCi0JLy9yZWdpc3RlcnMuCi0JdWludDE2X3QgQ2hhcmdlRW5hYmxlZDsJLy9JbWFnZSBvZiBNSVNDMiBCYXR0ZXJ5Ci0JLy9DaGFyZ2UgRW5hYmxlZCAoMCBvcgotCS8vV1JNSVNDMl9DSEFSR0VfRU5BQkxFKS4KLQl1aW50MTZfdCBXREludGVydmFsOwkvL0ltYWdlIG9mIE1JU0MyIHdhdGNoZG9nCi0JLy9pbnRlcnZhbCBjb250cm9sIGJpdHMuCi0JdWludDMyX3QgSTJDQWRyczsJLy9JMkMgZGV2aWNlIGFkZHJlc3MgZm9yCi0JLy9vbmJvYXJkIEVFUFJPTSAoYm9hcmQgcmV2Ci0JLy9kZXBlbmRlbnQpLgotCS8vICBzaG9ydCAgICAgICAgIEkyQ2FyZHM7Ci0JbHNhbXBsX3QgYW9fcmVhZGJhY2tbUzYyNl9EQUNfQ0hBTk5FTFNdOwotfSBzNjI2X3ByaXZhdGU7CisJdWludDhfdCBhaV9jbWRfcnVubmluZzsJLyogIGFpX2NtZCBpcyBydW5uaW5nICovCisJdWludDhfdCBhaV9jb250aW5vdXM7CS8qICBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCWludCBhaV9zYW1wbGVfY291bnQ7CS8qICBudW1iZXIgb2Ygc2FtcGxlcyB0byBhcXVpcmUgKi8KKwl1bnNpZ25lZCBpbnQgYWlfc2FtcGxlX3RpbWVyOworCS8qICB0aW1lIGJldHdlZW4gc2FtcGxlcyBpbiAgdW5pdHMgb2YgdGhlIHRpbWVyICovCisJaW50IGFpX2NvbnZlcnRfY291bnQ7CS8qICBjb252ZXJzaW9uIGNvdW50ZXIgKi8KKwl1bnNpZ25lZCBpbnQgYWlfY29udmVydF90aW1lcjsKKwkvKiAgdGltZSBiZXR3ZWVuIGNvbnZlcnNpb24gaW4gIHVuaXRzIG9mIHRoZSB0aW1lciAqLworCXVpbnQxNl90IENvdW50ZXJJbnRFbmFiczsKKwkvKiBDb3VudGVyIGludGVycnVwdCBlbmFibGUgIG1hc2sgZm9yIE1JU0MyIHJlZ2lzdGVyLiAqLworCXVpbnQ4X3QgQWRjSXRlbXM7CS8qIE51bWJlciBvZiBpdGVtcyBpbiBBREMgcG9sbCAgbGlzdC4gKi8KKwlzdHJ1Y3QgYnVmZmVyRE1BIFJQU0J1ZjsJCS8qIERNQSBidWZmZXIgdXNlZCB0byBob2xkIEFEQyAoUlBTMSkgcHJvZ3JhbS4gKi8KKwlzdHJ1Y3QgYnVmZmVyRE1BIEFOQUJ1ZjsKKwkvKiBETUEgYnVmZmVyIHVzZWQgdG8gcmVjZWl2ZSBBREMgZGF0YSBhbmQgaG9sZCBEQUMgZGF0YS4gKi8KKwl1aW50MzJfdCAqcERhY1dCdWY7CisJLyogUG9pbnRlciB0byBsb2dpY2FsIGFkcnMgb2YgRE1BIGJ1ZmZlciB1c2VkIHRvIGhvbGQgREFDICBkYXRhLiAqLworCXVpbnQxNl90IERhY3BvbDsJLyogSW1hZ2Ugb2YgREFDIHBvbGFyaXR5IHJlZ2lzdGVyLiAqLworCXVpbnQ4X3QgVHJpbVNldHBvaW50WzEyXTsJLyogSW1hZ2VzIG9mIFRyaW1EQUMgc2V0cG9pbnRzICovCisJdWludDE2X3QgQ2hhcmdlRW5hYmxlZDsJLyogSW1hZ2Ugb2YgTUlTQzIgQmF0dGVyeSAqLworCS8qIENoYXJnZSBFbmFibGVkICgwIG9yIFdSTUlTQzJfQ0hBUkdFX0VOQUJMRSkuICovCisJdWludDE2X3QgV0RJbnRlcnZhbDsJLyogSW1hZ2Ugb2YgTUlTQzIgd2F0Y2hkb2cgaW50ZXJ2YWwgY29udHJvbCBiaXRzLiAqLworCXVpbnQzMl90IEkyQ0FkcnM7CisJLyogSTJDIGRldmljZSBhZGRyZXNzIGZvciBvbmJvYXJkIEVFUFJPTSAoYm9hcmQgcmV2IGRlcGVuZGVudCkuICovCisJLyogICBzaG9ydCAgICAgICAgIEkyQ2FyZHM7ICovCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrW1M2MjZfREFDX0NIQU5ORUxTXTsKK307CiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBkaW9fcHJpdmF0ZSB7CiAJdWludDE2X3QgUkRESW47CiAJdWludDE2X3QgV1JET3V0OwogCXVpbnQxNl90IFJERWRnU2VsOwpAQCAtMTc4LDMyNCArMTcwLDMyMiBAQAogCXVpbnQxNl90IFJEQ2FwRmxnOwogCXVpbnQxNl90IFJESW50U2VsOwogCXVpbnQxNl90IFdSSW50U2VsOwotfSBkaW9fcHJpdmF0ZTsKK307CiAKLXN0YXRpYyBkaW9fcHJpdmF0ZSBkaW9fcHJpdmF0ZV9BID0geworc3RhdGljIHN0cnVjdCBkaW9fcHJpdmF0ZSBkaW9fcHJpdmF0ZV9BID0gewogICAgICAgUkRESW46TFBfUkRESU5BLAotICAgICAgV1JET3V0OkxQX1dSRE9VVEEsCi0gICAgICBSREVkZ1NlbDpMUF9SREVER1NFTEEsCi0gICAgICBXUkVkZ1NlbDpMUF9XUkVER1NFTEEsCi0gICAgICBSRENhcFNlbDpMUF9SRENBUFNFTEEsCi0gICAgICBXUkNhcFNlbDpMUF9XUkNBUFNFTEEsCi0gICAgICBSRENhcEZsZzpMUF9SRENBUEZMR0EsCi0gICAgICBSREludFNlbDpMUF9SRElOVFNFTEEsCi0gICAgICBXUkludFNlbDpMUF9XUklOVFNFTEEsCisgICAgICBXUkRPdXQgOiBMUF9XUkRPVVRBLAorICAgICAgUkRFZGdTZWwgOiBMUF9SREVER1NFTEEsCisgICAgICBXUkVkZ1NlbCA6IExQX1dSRURHU0VMQSwKKyAgICAgIFJEQ2FwU2VsIDogTFBfUkRDQVBTRUxBLAorICAgICAgV1JDYXBTZWwgOiBMUF9XUkNBUFNFTEEsCisgICAgICBSRENhcEZsZyA6IExQX1JEQ0FQRkxHQSwKKyAgICAgIFJESW50U2VsIDogTFBfUkRJTlRTRUxBLAorICAgICAgV1JJbnRTZWwgOiBMUF9XUklOVFNFTEEsCiB9OwogCi1zdGF0aWMgZGlvX3ByaXZhdGUgZGlvX3ByaXZhdGVfQiA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGlvX3ByaXZhdGUgZGlvX3ByaXZhdGVfQiA9IHsKICAgICAgIFJEREluOkxQX1JERElOQiwKLSAgICAgIFdSRE91dDpMUF9XUkRPVVRCLAotICAgICAgUkRFZGdTZWw6TFBfUkRFREdTRUxCLAotICAgICAgV1JFZGdTZWw6TFBfV1JFREdTRUxCLAotICAgICAgUkRDYXBTZWw6TFBfUkRDQVBTRUxCLAotICAgICAgV1JDYXBTZWw6TFBfV1JDQVBTRUxCLAotICAgICAgUkRDYXBGbGc6TFBfUkRDQVBGTEdCLAotICAgICAgUkRJbnRTZWw6TFBfUkRJTlRTRUxCLAotICAgICAgV1JJbnRTZWw6TFBfV1JJTlRTRUxCLAorICAgICAgV1JET3V0IDogTFBfV1JET1VUQiwKKyAgICAgIFJERWRnU2VsIDogTFBfUkRFREdTRUxCLAorICAgICAgV1JFZGdTZWwgOiBMUF9XUkVER1NFTEIsCisgICAgICBSRENhcFNlbCA6IExQX1JEQ0FQU0VMQiwKKyAgICAgIFdSQ2FwU2VsIDogTFBfV1JDQVBTRUxCLAorICAgICAgUkRDYXBGbGcgOiBMUF9SRENBUEZMR0IsCisgICAgICBSREludFNlbCA6IExQX1JESU5UU0VMQiwKKyAgICAgIFdSSW50U2VsIDogTFBfV1JJTlRTRUxCLAogfTsKIAotc3RhdGljIGRpb19wcml2YXRlIGRpb19wcml2YXRlX0MgPSB7CitzdGF0aWMgc3RydWN0IGRpb19wcml2YXRlIGRpb19wcml2YXRlX0MgPSB7CiAgICAgICBSRERJbjpMUF9SRERJTkMsCi0gICAgICBXUkRPdXQ6TFBfV1JET1VUQywKLSAgICAgIFJERWRnU2VsOkxQX1JERURHU0VMQywKLSAgICAgIFdSRWRnU2VsOkxQX1dSRURHU0VMQywKLSAgICAgIFJEQ2FwU2VsOkxQX1JEQ0FQU0VMQywKLSAgICAgIFdSQ2FwU2VsOkxQX1dSQ0FQU0VMQywKLSAgICAgIFJEQ2FwRmxnOkxQX1JEQ0FQRkxHQywKLSAgICAgIFJESW50U2VsOkxQX1JESU5UU0VMQywKLSAgICAgIFdSSW50U2VsOkxQX1dSSU5UU0VMQywKKyAgICAgIFdSRE91dCA6IExQX1dSRE9VVEMsCisgICAgICBSREVkZ1NlbCA6IExQX1JERURHU0VMQywKKyAgICAgIFdSRWRnU2VsIDogTFBfV1JFREdTRUxDLAorICAgICAgUkRDYXBTZWwgOiBMUF9SRENBUFNFTEMsCisgICAgICBXUkNhcFNlbCA6IExQX1dSQ0FQU0VMQywKKyAgICAgIFJEQ2FwRmxnIDogTFBfUkRDQVBGTEdDLAorICAgICAgUkRJbnRTZWwgOiBMUF9SRElOVFNFTEMsCisgICAgICBXUkludFNlbCA6IExQX1dSSU5UU0VMQywKIH07CiAKIC8qIHRvIGdyb3VwIGRpbyBkZXZpY2VzICg0OCBiaXRzIG1hc2sgYW5kIGRhdGEgYXJlIG5vdCBhbGxvd2VkID8/PykKLXN0YXRpYyBkaW9fcHJpdmF0ZSAqZGlvX3ByaXZhdGVfd29yZFtdPXsKK3N0YXRpYyBzdHJ1Y3QgZGlvX3ByaXZhdGUgKmRpb19wcml2YXRlX3dvcmRbXT17CiAgICZkaW9fcHJpdmF0ZV9BLAogICAmZGlvX3ByaXZhdGVfQiwKICAgJmRpb19wcml2YXRlX0MsCiB9OwogKi8KIAotI2RlZmluZSBkZXZwcml2ICgoczYyNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQotI2RlZmluZSBkaW9wcml2ICgoZGlvX3ByaXZhdGUgKilzLT5wcml2YXRlKQorI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHM2MjZfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgZGlvcHJpdiAoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKXMtPnByaXZhdGUpCiAKIENPTUVESV9QQ0lfSU5JVENMRUFOVVBfTk9NT0RVTEUoZHJpdmVyX3M2MjYsIHM2MjZfcGNpX3RhYmxlKTsKIAotLy9pb2N0bCByb3V0aW5lcwotc3RhdGljIGludCBzNjI2X2FpX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLS8qIHN0YXRpYyBpbnQgczYyNl9haV9yaW5zbihjb21lZGlfZGV2aWNlICpkZXYsY29tZWRpX3N1YmRldmljZSAqcyxjb21lZGlfaW5zbiAqaW5zbixsc2FtcGxfdCAqZGF0YSk7ICovCi1zdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgczYyNl9haV9jbWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOwotc3RhdGljIGludCBzNjI2X2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2NtZCAqIGNtZCk7Ci1zdGF0aWMgaW50IHM2MjZfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKLXN0YXRpYyBpbnQgczYyNl9hb193aW5zbihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgaW50IHM2MjZfYW9fcmluc24oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBzNjI2X2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBzNjI2X2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX3NldF9pcnEoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW4pOwotc3RhdGljIGludCBzNjI2X2Rpb19yZXNldF9pcnEoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGdydW9wLAorLyogaW9jdGwgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQgczYyNl9haV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisvKiBzdGF0aWMgaW50IHM2MjZfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsgKi8KK3N0YXRpYyBpbnQgczYyNl9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBzNjI2X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHM2MjZfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKK3N0YXRpYyBpbnQgczYyNl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworc3RhdGljIGludCBzNjI2X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgczYyNl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9fc2V0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbik7CitzdGF0aWMgaW50IHM2MjZfZGlvX3Jlc2V0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZ3J1b3AsCiAJdW5zaWduZWQgaW50IG1hc2spOwotc3RhdGljIGludCBzNjI2X2Rpb19jbGVhcl9pcnEoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IHM2MjZfZW5jX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgczYyNl9lbmNfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgczYyNl9lbmNfaW5zbl93cml0ZShjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfZGlvX2NsZWFyX2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgczYyNl9lbmNfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIHN0YXRpYyBpbnQgczYyNl9uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKTsKLXN0YXRpYyBpbnQgczYyNl9haV9sb2FkX3BvbGxsaXN0KHVpbnQ4X3QgKiBwcGwsIGNvbWVkaV9jbWQgKiBjbWQpOwotc3RhdGljIGludCBzNjI2X2FpX2ludHRyaWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitzdGF0aWMgaW50IHM2MjZfYWlfbG9hZF9wb2xsbGlzdCh1aW50OF90ICpwcGwsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworc3RhdGljIGludCBzNjI2X2FpX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJdW5zaWduZWQgaW50IHRyaWdudW0pOwogc3RhdGljIGlycXJldHVybl90IHM2MjZfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7Ci1zdGF0aWMgbHNhbXBsX3QgczYyNl9haV9yZWdfdG9fdWludChpbnQgZGF0YSk7Ci0vKiBzdGF0aWMgbHNhbXBsX3QgczYyNl91aW50X3RvX3JlZyhjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgZGF0YSk7ICovCitzdGF0aWMgdW5zaWduZWQgaW50IHM2MjZfYWlfcmVnX3RvX3VpbnQoaW50IGRhdGEpOworLyogc3RhdGljIHVuc2lnbmVkIGludCBzNjI2X3VpbnRfdG9fcmVnKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgZGF0YSk7ICovCiAKLS8vZW5kIGlvY3RsIHJvdXRpbmVzCisvKiBlbmQgaW9jdGwgcm91dGluZXMgKi8KIAotLy9pbnRlcm5hbCByb3V0aW5lcwotc3RhdGljIHZvaWQgczYyNl9kaW9faW5pdChjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyB2b2lkIFJlc2V0QURDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQ4X3QgKiBwcGwpOwotc3RhdGljIHZvaWQgTG9hZFRyaW1EQUNzKGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIHZvaWQgV3JpdGVUcmltREFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQ4X3QgTG9naWNhbENoYW4sCisvKiBpbnRlcm5hbCByb3V0aW5lcyAqLworc3RhdGljIHZvaWQgczYyNl9kaW9faW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIFJlc2V0QURDKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQ4X3QgKnBwbCk7CitzdGF0aWMgdm9pZCBMb2FkVHJpbURBQ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBXcml0ZVRyaW1EQUMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDhfdCBMb2dpY2FsQ2hhbiwKIAl1aW50OF90IERhY0RhdGEpOwotc3RhdGljIHVpbnQ4X3QgSTJDcmVhZChjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90IGFkZHIpOwotc3RhdGljIHVpbnQzMl90IEkyQ2hhbmRzaGFrZShjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MzJfdCB2YWwpOwotc3RhdGljIHZvaWQgU2V0REFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGNoYW4sIHNob3J0IGRhY2RhdGEpOwotc3RhdGljIHZvaWQgU2VuZERBQyhjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MzJfdCB2YWwpOwotc3RhdGljIHZvaWQgV3JpdGVNSVNDMihjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBOZXdJbWFnZSk7Ci1zdGF0aWMgdm9pZCBERUJJdHJhbnNmZXIoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgdWludDE2X3QgREVCSXJlYWQoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgYWRkcik7Ci1zdGF0aWMgdm9pZCBERUJJd3JpdGUoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3Qgd2RhdGEpOwotc3RhdGljIHZvaWQgREVCSXJlcGxhY2UoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3QgbWFzaywKK3N0YXRpYyB1aW50OF90IEkyQ3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDhfdCBhZGRyKTsKK3N0YXRpYyB1aW50MzJfdCBJMkNoYW5kc2hha2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsKTsKK3N0YXRpYyB2b2lkIFNldERBQyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MTZfdCBjaGFuLCBzaG9ydCBkYWNkYXRhKTsKK3N0YXRpYyB2b2lkIFNlbmREQUMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsKTsKK3N0YXRpYyB2b2lkIFdyaXRlTUlTQzIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgTmV3SW1hZ2UpOworc3RhdGljIHZvaWQgREVCSXRyYW5zZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHVpbnQxNl90IERFQklyZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGFkZHIpOworc3RhdGljIHZvaWQgREVCSXdyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGFkZHIsIHVpbnQxNl90IHdkYXRhKTsKK3N0YXRpYyB2b2lkIERFQklyZXBsYWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGFkZHIsIHVpbnQxNl90IG1hc2ssCiAJdWludDE2X3Qgd2RhdGEpOwotc3RhdGljIHZvaWQgQ2xvc2VETUFCKGNvbWVkaV9kZXZpY2UgKiBkZXYsIERNQUJVRiAqIHBkbWEsIHNpemVfdCBic2l6ZSk7CitzdGF0aWMgdm9pZCBDbG9zZURNQUIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGJ1ZmZlckRNQSAqcGRtYSwgc2l6ZV90IGJzaXplKTsKIAotLy8gQ09VTlRFUiBPQkpFQ1QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgewotCS8vIFBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB0aGF0IGRpZmZlciBmb3IgQSBhbmQgQiBjb3VudGVyczoKLQl1aW50MTZfdCgqR2V0RW5hYmxlKSAoY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlX3N0cnVjdCAqKTsJLy9SZXR1cm4gY2xvY2sgZW5hYmxlLgotCXVpbnQxNl90KCpHZXRJbnRTcmMpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICopOwkvL1JldHVybiBpbnRlcnJ1cHQgc291cmNlLgotCXVpbnQxNl90KCpHZXRMb2FkVHJpZykgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vUmV0dXJuIHByZWxvYWQgdHJpZ2dlciBzb3VyY2UuCi0JdWludDE2X3QoKkdldE1vZGUpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICopOwkvL1JldHVybiBzdGFuZGFyZGl6ZWQgb3BlcmF0aW5nIG1vZGUuCi0Jdm9pZCAoKlB1bHNlSW5kZXgpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICopOwkvL0dlbmVyYXRlIHNvZnQgaW5kZXggc3Ryb2JlLgotCXZvaWQgKCpTZXRFbmFibGUpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICosIHVpbnQxNl90IGVuYWIpOwkvL1Byb2dyYW0gY2xvY2sgZW5hYmxlLgotCXZvaWQgKCpTZXRJbnRTcmMpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICosIHVpbnQxNl90IEludFNvdXJjZSk7CS8vUHJvZ3JhbSBpbnRlcnJ1cHQgc291cmNlLgotCXZvaWQgKCpTZXRMb2FkVHJpZykgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKiwgdWludDE2X3QgVHJpZyk7CS8vUHJvZ3JhbSBwcmVsb2FkIHRyaWdnZXIgc291cmNlLgotCXZvaWQgKCpTZXRNb2RlKSAoY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlX3N0cnVjdCAqLCB1aW50MTZfdCBTZXR1cCwgdWludDE2X3QgRGlzYWJsZUludFNyYyk7CS8vUHJvZ3JhbSBzdGFuZGFyZGl6ZWQgb3BlcmF0aW5nIG1vZGUuCi0Jdm9pZCAoKlJlc2V0Q2FwRmxhZ3MpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICopOwkvL1Jlc2V0IGV2ZW50IGNhcHR1cmUgZmxhZ3MuCisvKiAgQ09VTlRFUiBPQkpFQ1QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdHJ1Y3QgZW5jX3ByaXZhdGUgeworCS8qICBQb2ludGVycyB0byBmdW5jdGlvbnMgdGhhdCBkaWZmZXIgZm9yIEEgYW5kIEIgY291bnRlcnM6ICovCisJdWludDE2X3QoKkdldEVuYWJsZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqKTsJLyogUmV0dXJuIGNsb2NrIGVuYWJsZS4gKi8KKwl1aW50MTZfdCgqR2V0SW50U3JjKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gaW50ZXJydXB0IHNvdXJjZS4gKi8KKwl1aW50MTZfdCgqR2V0TG9hZFRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBwcmVsb2FkIHRyaWdnZXIgc291cmNlLiAqLworCXVpbnQxNl90KCpHZXRNb2RlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gc3RhbmRhcmRpemVkIG9wZXJhdGluZyBtb2RlLiAqLworCXZvaWQgKCpQdWxzZUluZGV4KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBHZW5lcmF0ZSBzb2Z0IGluZGV4IHN0cm9iZS4gKi8KKwl2b2lkICgqU2V0RW5hYmxlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICosIHVpbnQxNl90IGVuYWIpOwkvKiBQcm9ncmFtIGNsb2NrIGVuYWJsZS4gKi8KKwl2b2lkICgqU2V0SW50U3JjKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICosIHVpbnQxNl90IEludFNvdXJjZSk7CS8qIFByb2dyYW0gaW50ZXJydXB0IHNvdXJjZS4gKi8KKwl2b2lkICgqU2V0TG9hZFRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgVHJpZyk7CS8qIFByb2dyYW0gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4gKi8KKwl2b2lkICgqU2V0TW9kZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqLCB1aW50MTZfdCBTZXR1cCwgdWludDE2X3QgRGlzYWJsZUludFNyYyk7CS8qIFByb2dyYW0gc3RhbmRhcmRpemVkIG9wZXJhdGluZyBtb2RlLiAqLworCXZvaWQgKCpSZXNldENhcEZsYWdzKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXNldCBldmVudCBjYXB0dXJlIGZsYWdzLiAqLwogCi0JdWludDE2X3QgTXlDUkE7CQkvLyAgIEFkZHJlc3Mgb2YgQ1JBIHJlZ2lzdGVyLgotCXVpbnQxNl90IE15Q1JCOwkJLy8gICBBZGRyZXNzIG9mIENSQiByZWdpc3Rlci4KLQl1aW50MTZfdCBNeUxhdGNoTHN3OwkvLyAgIEFkZHJlc3Mgb2YgTGF0Y2ggbGVhc3Qtc2lnbmlmaWNhbnQtd29yZAotCS8vICAgcmVnaXN0ZXIuCi0JdWludDE2X3QgTXlFdmVudEJpdHNbNF07CS8vICAgQml0IHRyYW5zbGF0aW9ucyBmb3IgSW50U3JjIC0tPlJETUlTQzIuCi19IGVuY19wcml2YXRlOwkJCS8vY291bnRlciBvYmplY3QKKwl1aW50MTZfdCBNeUNSQTsJCS8qICAgIEFkZHJlc3Mgb2YgQ1JBIHJlZ2lzdGVyLiAqLworCXVpbnQxNl90IE15Q1JCOwkJLyogICAgQWRkcmVzcyBvZiBDUkIgcmVnaXN0ZXIuICovCisJdWludDE2X3QgTXlMYXRjaExzdzsJLyogICAgQWRkcmVzcyBvZiBMYXRjaCBsZWFzdC1zaWduaWZpY2FudC13b3JkICovCisJLyogICAgcmVnaXN0ZXIuICovCisJdWludDE2X3QgTXlFdmVudEJpdHNbNF07CS8qICAgIEJpdCB0cmFuc2xhdGlvbnMgZm9yIEludFNyYyAtLT5SRE1JU0MyLiAqLworfTsKIAotI2RlZmluZSBlbmNwcml2ICgoZW5jX3ByaXZhdGUgKikoZGV2LT5zdWJkZXZpY2VzKzUpLT5wcml2YXRlKQorI2RlZmluZSBlbmNwcml2ICgoc3RydWN0IGVuY19wcml2YXRlICopKGRldi0+c3ViZGV2aWNlcys1KS0+cHJpdmF0ZSkKIAotLy9jb3VudGVycyByb3V0aW5lcwotc3RhdGljIHZvaWQgczYyNl90aW1lcl9sb2FkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgaW50IHRpY2spOwotc3RhdGljIHVpbnQzMl90IFJlYWRMYXRjaChjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHZvaWQgUmVzZXRDYXBGbGFnc19BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB2b2lkIFNldE1vZGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFNldHVwLAorLyogY291bnRlcnMgcm91dGluZXMgKi8KK3N0YXRpYyB2b2lkIHM2MjZfdGltZXJfbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIGludCB0aWNrKTsKK3N0YXRpYyB1aW50MzJfdCBSZWFkTGF0Y2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFJlc2V0Q2FwRmxhZ3NfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHZvaWQgUmVzZXRDYXBGbGFnc19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdWludDE2X3QgR2V0TW9kZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdWludDE2X3QgR2V0TW9kZV9CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdm9pZCBTZXRNb2RlX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBTZXR1cCwKIAl1aW50MTZfdCBEaXNhYmxlSW50U3JjKTsKLXN0YXRpYyB2b2lkIFNldE1vZGVfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFNldHVwLAorc3RhdGljIHZvaWQgU2V0TW9kZV9CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgU2V0dXAsCiAJdWludDE2X3QgRGlzYWJsZUludFNyYyk7Ci1zdGF0aWMgdm9pZCBTZXRFbmFibGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IGVuYWIpOwotc3RhdGljIHZvaWQgU2V0RW5hYmxlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MTZfdCBlbmFiKTsKLXN0YXRpYyB1aW50MTZfdCBHZXRFbmFibGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBTZXRMYXRjaFNvdXJjZShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssCitzdGF0aWMgdm9pZCBTZXRFbmFibGVfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IGVuYWIpOworc3RhdGljIHZvaWQgU2V0RW5hYmxlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBlbmFiKTsKK3N0YXRpYyB1aW50MTZfdCBHZXRFbmFibGVfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdm9pZCBTZXRMYXRjaFNvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssCiAJdWludDE2X3QgdmFsdWUpOwotLyogc3RhdGljIHVpbnQxNl90IEdldExhdGNoU291cmNlKGNvbWVkaV9kZXZpY2UgKmRldiwgZW5jX3ByaXZhdGUgKmsgKTsgKi8KLXN0YXRpYyB2b2lkIFNldExvYWRUcmlnX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MTZfdCBUcmlnKTsKLXN0YXRpYyB2b2lkIFNldExvYWRUcmlnX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MTZfdCBUcmlnKTsKLXN0YXRpYyB1aW50MTZfdCBHZXRMb2FkVHJpZ19BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHZvaWQgU2V0SW50U3JjX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLAorLyogc3RhdGljIHVpbnQxNl90IEdldExhdGNoU291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApOyAqLworc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IFRyaWcpOworc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IFRyaWcpOworc3RhdGljIHVpbnQxNl90IEdldExvYWRUcmlnX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB1aW50MTZfdCBHZXRMb2FkVHJpZ19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdm9pZCBTZXRJbnRTcmNfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssCiAJdWludDE2X3QgSW50U291cmNlKTsKLXN0YXRpYyB2b2lkIFNldEludFNyY19BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywKK3N0YXRpYyB2b2lkIFNldEludFNyY19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywKIAl1aW50MTZfdCBJbnRTb3VyY2UpOwotc3RhdGljIHVpbnQxNl90IEdldEludFNyY19BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLS8qIHN0YXRpYyB2b2lkIFNldENsa011bHQoY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSA7ICovCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrTXVsdChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgOyAqLwotLyogc3RhdGljIHZvaWQgU2V0SW5kZXhQb2woY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKTsgKi8KLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtQb2woY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqayApIDsgKi8KLS8qIHN0YXRpYyB2b2lkIFNldEluZGV4U3JjKCBjb21lZGlfZGV2aWNlICpkZXYsZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlICk7ICAqLwotLyogc3RhdGljIHVpbnQxNl90IEdldENsa1NyYyggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprICk7ICAqLwotLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoIGNvbWVkaV9kZXZpY2UgKmRldixlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKTsgICovCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0SW5kZXhTcmMoIGNvbWVkaV9kZXZpY2UgKmRldixlbmNfcHJpdmF0ZSAqayApOyAgKi8KLXN0YXRpYyB2b2lkIFB1bHNlSW5kZXhfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHZvaWQgUHVsc2VJbmRleF9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBQcmVsb2FkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDMyX3QgdmFsdWUpOwotc3RhdGljIHZvaWQgQ291bnRlcnNJbml0KGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotLy9lbmQgaW50ZXJuYWwgcm91dGluZXMKK3N0YXRpYyB1aW50MTZfdCBHZXRJbnRTcmNfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHVpbnQxNl90IEdldEludFNyY19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CisvKiBzdGF0aWMgdm9pZCBTZXRDbGtNdWx0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSA7ICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrTXVsdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgKSA7ICovCisvKiBzdGF0aWMgdm9pZCBTZXRJbmRleFBvbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlICk7ICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrUG9sKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApIDsgKi8KKy8qIHN0YXRpYyB2b2lkIFNldEluZGV4U3JjKCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKTsgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrU3JjKCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApOyAgKi8KKy8qIHN0YXRpYyB2b2lkIFNldEluZGV4U3JjKCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKTsgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0SW5kZXhTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprICk7ICAqLworc3RhdGljIHZvaWQgUHVsc2VJbmRleF9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdm9pZCBQdWxzZUluZGV4X0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFByZWxvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MzJfdCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBDb3VudGVyc0luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisvKiBlbmQgaW50ZXJuYWwgcm91dGluZXMgKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gQ291bnRlciBvYmplY3RzIGNvbnN0cnVjdG9yLgorLyogIENvdW50ZXIgb2JqZWN0cyBjb25zdHJ1Y3Rvci4gKi8KIAotLy8gQ291bnRlciBvdmVyZmxvdy9pbmRleCBldmVudCBmbGFnIG1hc2tzIGZvciBSRE1JU0MyLgotI2RlZmluZSBJTkRYTUFTSyhDKQkJKCAxIDw8ICggKCAoQykgPiAyICkgPyAoIChDKSAqIDIgLSAxICkgOiAoIChDKSAqIDIgKyAgNCApICkgKQotI2RlZmluZSBPVkVSTUFTSyhDKQkJKCAxIDw8ICggKCAoQykgPiAyICkgPyAoIChDKSAqIDIgKyA1ICkgOiAoIChDKSAqIDIgKyAxMCApICkgKQorLyogIENvdW50ZXIgb3ZlcmZsb3cvaW5kZXggZXZlbnQgZmxhZyBtYXNrcyBmb3IgUkRNSVNDMi4gKi8KKyNkZWZpbmUgSU5EWE1BU0soQykJCSgxIDw8ICgoKEMpID4gMikgPyAoKEMpICogMiAtIDEpIDogKChDKSAqIDIgKyAgNCkpKQorI2RlZmluZSBPVkVSTUFTSyhDKQkJKDEgPDwgKCgoQykgPiAyKSA/ICgoQykgKiAyICsgNSkgOiAoKEMpICogMiArIDEwKSkpCiAjZGVmaW5lIEVWQklUUyhDKQkJeyAwLCBPVkVSTUFTSyhDKSwgSU5EWE1BU0soQyksIE9WRVJNQVNLKEMpIHwgSU5EWE1BU0soQykgfQogCi0vLyBUcmFuc2xhdGlvbiB0YWJsZSB0byBtYXAgSW50U3JjIGludG8gZXF1aXZhbGVudCBSRE1JU0MyIGV2ZW50IGZsYWcKLS8vIGJpdHMuCi0vL3N0YXRpYyBjb25zdCB1aW50MTZfdCBFdmVudEJpdHNbXVs0XSA9IHsgRVZCSVRTKDApLCBFVkJJVFMoMSksIEVWQklUUygyKSwgRVZCSVRTKDMpLCBFVkJJVFMoNCksIEVWQklUUyg1KSB9OworLyogIFRyYW5zbGF0aW9uIHRhYmxlIHRvIG1hcCBJbnRTcmMgaW50byBlcXVpdmFsZW50IFJETUlTQzIgZXZlbnQgZmxhZyAgYml0cy4gKi8KKy8qIHN0YXRpYyBjb25zdCB1aW50MTZfdCBFdmVudEJpdHNbXVs0XSA9IHsgRVZCSVRTKDApLCBFVkJJVFMoMSksIEVWQklUUygyKSwgRVZCSVRTKDMpLCBFVkJJVFMoNCksIEVWQklUUyg1KSB9OyAqLwogCi0vKiBlbmNfcHJpdmF0ZTsgKi8KLXN0YXRpYyBlbmNfcHJpdmF0ZSBlbmNfcHJpdmF0ZV9kYXRhW10gPSB7CisvKiBzdHJ1Y3QgZW5jX3ByaXZhdGU7ICovCitzdGF0aWMgc3RydWN0IGVuY19wcml2YXRlIGVuY19wcml2YXRlX2RhdGFbXSA9IHsKIAl7CiAJICAgICAgR2V0RW5hYmxlOkdldEVuYWJsZV9BLAotCSAgICAgIEdldEludFNyYzpHZXRJbnRTcmNfQSwKLQkgICAgICBHZXRMb2FkVHJpZzpHZXRMb2FkVHJpZ19BLAotCSAgICAgIEdldE1vZGU6CUdldE1vZGVfQSwKLQkgICAgICBQdWxzZUluZGV4OlB1bHNlSW5kZXhfQSwKLQkgICAgICBTZXRFbmFibGU6U2V0RW5hYmxlX0EsCi0JICAgICAgU2V0SW50U3JjOlNldEludFNyY19BLAotCSAgICAgIFNldExvYWRUcmlnOlNldExvYWRUcmlnX0EsCi0JICAgICAgU2V0TW9kZToJU2V0TW9kZV9BLAotCSAgICAgIFJlc2V0Q2FwRmxhZ3M6UmVzZXRDYXBGbGFnc19BLAotCSAgICAgIE15Q1JBOglMUF9DUjBBLAotCSAgICAgIE15Q1JCOglMUF9DUjBCLAotCSAgICAgIE15TGF0Y2hMc3c6TFBfQ05UUjBBTFNXLAotCSAgICAgIE15RXZlbnRCaXRzOkVWQklUUygwKSwKKwkgICAgICBHZXRJbnRTcmMgOiBHZXRJbnRTcmNfQSwKKwkgICAgICBHZXRMb2FkVHJpZyA6IEdldExvYWRUcmlnX0EsCisJICAgICAgR2V0TW9kZSA6CUdldE1vZGVfQSwKKwkgICAgICBQdWxzZUluZGV4IDogUHVsc2VJbmRleF9BLAorCSAgICAgIFNldEVuYWJsZSA6IFNldEVuYWJsZV9BLAorCSAgICAgIFNldEludFNyYyA6IFNldEludFNyY19BLAorCSAgICAgIFNldExvYWRUcmlnIDogU2V0TG9hZFRyaWdfQSwKKwkgICAgICBTZXRNb2RlIDoJU2V0TW9kZV9BLAorCSAgICAgIFJlc2V0Q2FwRmxhZ3MgOiBSZXNldENhcEZsYWdzX0EsCisJICAgICAgTXlDUkEgOglMUF9DUjBBLAorCSAgICAgIE15Q1JCIDoJTFBfQ1IwQiwKKwkgICAgICBNeUxhdGNoTHN3IDogTFBfQ05UUjBBTFNXLAorCSAgICAgIE15RXZlbnRCaXRzIDogRVZCSVRTKDApLAogCQl9LAogCXsKIAkgICAgICBHZXRFbmFibGU6R2V0RW5hYmxlX0EsCi0JICAgICAgR2V0SW50U3JjOkdldEludFNyY19BLAotCSAgICAgIEdldExvYWRUcmlnOkdldExvYWRUcmlnX0EsCi0JICAgICAgR2V0TW9kZToJR2V0TW9kZV9BLAotCSAgICAgIFB1bHNlSW5kZXg6UHVsc2VJbmRleF9BLAotCSAgICAgIFNldEVuYWJsZTpTZXRFbmFibGVfQSwKLQkgICAgICBTZXRJbnRTcmM6U2V0SW50U3JjX0EsCi0JICAgICAgU2V0TG9hZFRyaWc6U2V0TG9hZFRyaWdfQSwKLQkgICAgICBTZXRNb2RlOglTZXRNb2RlX0EsCi0JICAgICAgUmVzZXRDYXBGbGFnczpSZXNldENhcEZsYWdzX0EsCi0JICAgICAgTXlDUkE6CUxQX0NSMUEsCi0JICAgICAgTXlDUkI6CUxQX0NSMUIsCi0JICAgICAgTXlMYXRjaExzdzpMUF9DTlRSMUFMU1csCi0JICAgICAgTXlFdmVudEJpdHM6RVZCSVRTKDEpLAorCSAgICAgIEdldEludFNyYyA6IEdldEludFNyY19BLAorCSAgICAgIEdldExvYWRUcmlnIDogR2V0TG9hZFRyaWdfQSwKKwkgICAgICBHZXRNb2RlIDoJR2V0TW9kZV9BLAorCSAgICAgIFB1bHNlSW5kZXggOiBQdWxzZUluZGV4X0EsCisJICAgICAgU2V0RW5hYmxlIDogU2V0RW5hYmxlX0EsCisJICAgICAgU2V0SW50U3JjIDogU2V0SW50U3JjX0EsCisJICAgICAgU2V0TG9hZFRyaWcgOiBTZXRMb2FkVHJpZ19BLAorCSAgICAgIFNldE1vZGUgOglTZXRNb2RlX0EsCisJICAgICAgUmVzZXRDYXBGbGFncyA6IFJlc2V0Q2FwRmxhZ3NfQSwKKwkgICAgICBNeUNSQSA6CUxQX0NSMUEsCisJICAgICAgTXlDUkIgOglMUF9DUjFCLAorCSAgICAgIE15TGF0Y2hMc3cgOiBMUF9DTlRSMUFMU1csCisJICAgICAgTXlFdmVudEJpdHMgOiBFVkJJVFMoMSksCiAJCX0sCiAJewogCSAgICAgIEdldEVuYWJsZTpHZXRFbmFibGVfQSwKLQkgICAgICBHZXRJbnRTcmM6R2V0SW50U3JjX0EsCi0JICAgICAgR2V0TG9hZFRyaWc6R2V0TG9hZFRyaWdfQSwKLQkgICAgICBHZXRNb2RlOglHZXRNb2RlX0EsCi0JICAgICAgUHVsc2VJbmRleDpQdWxzZUluZGV4X0EsCi0JICAgICAgU2V0RW5hYmxlOlNldEVuYWJsZV9BLAotCSAgICAgIFNldEludFNyYzpTZXRJbnRTcmNfQSwKLQkgICAgICBTZXRMb2FkVHJpZzpTZXRMb2FkVHJpZ19BLAotCSAgICAgIFNldE1vZGU6CVNldE1vZGVfQSwKLQkgICAgICBSZXNldENhcEZsYWdzOlJlc2V0Q2FwRmxhZ3NfQSwKLQkgICAgICBNeUNSQToJTFBfQ1IyQSwKLQkgICAgICBNeUNSQjoJTFBfQ1IyQiwKLQkgICAgICBNeUxhdGNoTHN3OkxQX0NOVFIyQUxTVywKLQkgICAgICBNeUV2ZW50Qml0czpFVkJJVFMoMiksCisJICAgICAgR2V0SW50U3JjIDogR2V0SW50U3JjX0EsCisJICAgICAgR2V0TG9hZFRyaWcgOiBHZXRMb2FkVHJpZ19BLAorCSAgICAgIEdldE1vZGUgOglHZXRNb2RlX0EsCisJICAgICAgUHVsc2VJbmRleCA6IFB1bHNlSW5kZXhfQSwKKwkgICAgICBTZXRFbmFibGUgOiBTZXRFbmFibGVfQSwKKwkgICAgICBTZXRJbnRTcmMgOiBTZXRJbnRTcmNfQSwKKwkgICAgICBTZXRMb2FkVHJpZyA6IFNldExvYWRUcmlnX0EsCisJICAgICAgU2V0TW9kZSA6CVNldE1vZGVfQSwKKwkgICAgICBSZXNldENhcEZsYWdzIDogUmVzZXRDYXBGbGFnc19BLAorCSAgICAgIE15Q1JBIDoJTFBfQ1IyQSwKKwkgICAgICBNeUNSQiA6CUxQX0NSMkIsCisJICAgICAgTXlMYXRjaExzdyA6IExQX0NOVFIyQUxTVywKKwkgICAgICBNeUV2ZW50Qml0cyA6IEVWQklUUygyKSwKIAkJfSwKIAl7CiAJICAgICAgR2V0RW5hYmxlOkdldEVuYWJsZV9CLAotCSAgICAgIEdldEludFNyYzpHZXRJbnRTcmNfQiwKLQkgICAgICBHZXRMb2FkVHJpZzpHZXRMb2FkVHJpZ19CLAotCSAgICAgIEdldE1vZGU6CUdldE1vZGVfQiwKLQkgICAgICBQdWxzZUluZGV4OlB1bHNlSW5kZXhfQiwKLQkgICAgICBTZXRFbmFibGU6U2V0RW5hYmxlX0IsCi0JICAgICAgU2V0SW50U3JjOlNldEludFNyY19CLAotCSAgICAgIFNldExvYWRUcmlnOlNldExvYWRUcmlnX0IsCi0JICAgICAgU2V0TW9kZToJU2V0TW9kZV9CLAotCSAgICAgIFJlc2V0Q2FwRmxhZ3M6UmVzZXRDYXBGbGFnc19CLAotCSAgICAgIE15Q1JBOglMUF9DUjBBLAotCSAgICAgIE15Q1JCOglMUF9DUjBCLAotCSAgICAgIE15TGF0Y2hMc3c6TFBfQ05UUjBCTFNXLAotCSAgICAgIE15RXZlbnRCaXRzOkVWQklUUygzKSwKKwkgICAgICBHZXRJbnRTcmMgOiBHZXRJbnRTcmNfQiwKKwkgICAgICBHZXRMb2FkVHJpZyA6IEdldExvYWRUcmlnX0IsCisJICAgICAgR2V0TW9kZSA6CUdldE1vZGVfQiwKKwkgICAgICBQdWxzZUluZGV4IDogUHVsc2VJbmRleF9CLAorCSAgICAgIFNldEVuYWJsZSA6IFNldEVuYWJsZV9CLAorCSAgICAgIFNldEludFNyYyA6IFNldEludFNyY19CLAorCSAgICAgIFNldExvYWRUcmlnIDogU2V0TG9hZFRyaWdfQiwKKwkgICAgICBTZXRNb2RlIDoJU2V0TW9kZV9CLAorCSAgICAgIFJlc2V0Q2FwRmxhZ3MgOiBSZXNldENhcEZsYWdzX0IsCisJICAgICAgTXlDUkEgOglMUF9DUjBBLAorCSAgICAgIE15Q1JCIDoJTFBfQ1IwQiwKKwkgICAgICBNeUxhdGNoTHN3IDogTFBfQ05UUjBCTFNXLAorCSAgICAgIE15RXZlbnRCaXRzIDogRVZCSVRTKDMpLAogCQl9LAogCXsKIAkgICAgICBHZXRFbmFibGU6R2V0RW5hYmxlX0IsCi0JICAgICAgR2V0SW50U3JjOkdldEludFNyY19CLAotCSAgICAgIEdldExvYWRUcmlnOkdldExvYWRUcmlnX0IsCi0JICAgICAgR2V0TW9kZToJR2V0TW9kZV9CLAotCSAgICAgIFB1bHNlSW5kZXg6UHVsc2VJbmRleF9CLAotCSAgICAgIFNldEVuYWJsZTpTZXRFbmFibGVfQiwKLQkgICAgICBTZXRJbnRTcmM6U2V0SW50U3JjX0IsCi0JICAgICAgU2V0TG9hZFRyaWc6U2V0TG9hZFRyaWdfQiwKLQkgICAgICBTZXRNb2RlOglTZXRNb2RlX0IsCi0JICAgICAgUmVzZXRDYXBGbGFnczpSZXNldENhcEZsYWdzX0IsCi0JICAgICAgTXlDUkE6CUxQX0NSMUEsCi0JICAgICAgTXlDUkI6CUxQX0NSMUIsCi0JICAgICAgTXlMYXRjaExzdzpMUF9DTlRSMUJMU1csCi0JICAgICAgTXlFdmVudEJpdHM6RVZCSVRTKDQpLAorCSAgICAgIEdldEludFNyYyA6IEdldEludFNyY19CLAorCSAgICAgIEdldExvYWRUcmlnIDogR2V0TG9hZFRyaWdfQiwKKwkgICAgICBHZXRNb2RlIDoJR2V0TW9kZV9CLAorCSAgICAgIFB1bHNlSW5kZXggOiBQdWxzZUluZGV4X0IsCisJICAgICAgU2V0RW5hYmxlIDogU2V0RW5hYmxlX0IsCisJICAgICAgU2V0SW50U3JjIDogU2V0SW50U3JjX0IsCisJICAgICAgU2V0TG9hZFRyaWcgOiBTZXRMb2FkVHJpZ19CLAorCSAgICAgIFNldE1vZGUgOglTZXRNb2RlX0IsCisJICAgICAgUmVzZXRDYXBGbGFncyA6IFJlc2V0Q2FwRmxhZ3NfQiwKKwkgICAgICBNeUNSQSA6CUxQX0NSMUEsCisJICAgICAgTXlDUkIgOglMUF9DUjFCLAorCSAgICAgIE15TGF0Y2hMc3cgOiBMUF9DTlRSMUJMU1csCisJICAgICAgTXlFdmVudEJpdHMgOiBFVkJJVFMoNCksCiAJCX0sCiAJewogCSAgICAgIEdldEVuYWJsZTpHZXRFbmFibGVfQiwKLQkgICAgICBHZXRJbnRTcmM6R2V0SW50U3JjX0IsCi0JICAgICAgR2V0TG9hZFRyaWc6R2V0TG9hZFRyaWdfQiwKLQkgICAgICBHZXRNb2RlOglHZXRNb2RlX0IsCi0JICAgICAgUHVsc2VJbmRleDpQdWxzZUluZGV4X0IsCi0JICAgICAgU2V0RW5hYmxlOlNldEVuYWJsZV9CLAotCSAgICAgIFNldEludFNyYzpTZXRJbnRTcmNfQiwKLQkgICAgICBTZXRMb2FkVHJpZzpTZXRMb2FkVHJpZ19CLAotCSAgICAgIFNldE1vZGU6CVNldE1vZGVfQiwKLQkgICAgICBSZXNldENhcEZsYWdzOlJlc2V0Q2FwRmxhZ3NfQiwKLQkgICAgICBNeUNSQToJTFBfQ1IyQSwKLQkgICAgICBNeUNSQjoJTFBfQ1IyQiwKLQkgICAgICBNeUxhdGNoTHN3OkxQX0NOVFIyQkxTVywKLQkgICAgICBNeUV2ZW50Qml0czpFVkJJVFMoNSksCisJICAgICAgR2V0SW50U3JjIDogR2V0SW50U3JjX0IsCisJICAgICAgR2V0TG9hZFRyaWcgOiBHZXRMb2FkVHJpZ19CLAorCSAgICAgIEdldE1vZGUgOglHZXRNb2RlX0IsCisJICAgICAgUHVsc2VJbmRleCA6IFB1bHNlSW5kZXhfQiwKKwkgICAgICBTZXRFbmFibGUgOiBTZXRFbmFibGVfQiwKKwkgICAgICBTZXRJbnRTcmMgOiBTZXRJbnRTcmNfQiwKKwkgICAgICBTZXRMb2FkVHJpZyA6IFNldExvYWRUcmlnX0IsCisJICAgICAgU2V0TW9kZSA6CVNldE1vZGVfQiwKKwkgICAgICBSZXNldENhcEZsYWdzIDogUmVzZXRDYXBGbGFnc19CLAorCSAgICAgIE15Q1JBIDoJTFBfQ1IyQSwKKwkgICAgICBNeUNSQiA6CUxQX0NSMkIsCisJICAgICAgTXlMYXRjaExzdyA6IExQX0NOVFIyQkxTVywKKwkgICAgICBNeUV2ZW50Qml0cyA6IEVWQklUUyg1KSwKIAkJfSwKIH07CiAKLS8vIGVuYWIvZGlzYWJsZSBhIGZ1bmN0aW9uIG9yIHRlc3Qgc3RhdHVzIGJpdChzKSB0aGF0IGFyZSBhY2Nlc3NlZAotLy8gdGhyb3VnaCBNYWluIENvbnRyb2wgUmVnaXN0ZXJzIDEgb3IgMi4KLSNkZWZpbmUgTUNfRU5BQkxFKCBSRUdBRFJTLCBDVFJMV09SRCApCXdyaXRlbCggICggKHVpbnQzMl90KSggQ1RSTFdPUkQgKSA8PCAxNiApIHwgKHVpbnQzMl90KSggQ1RSTFdPUkQgKSxkZXZwcml2LT5iYXNlX2FkZHIrKCBSRUdBRFJTICkgKQorLyogIGVuYWIvZGlzYWJsZSBhIGZ1bmN0aW9uIG9yIHRlc3Qgc3RhdHVzIGJpdChzKSB0aGF0IGFyZSBhY2Nlc3NlZCAqLworLyogIHRocm91Z2ggTWFpbiBDb250cm9sIFJlZ2lzdGVycyAxIG9yIDIuICovCisjZGVmaW5lIE1DX0VOQUJMRShSRUdBRFJTLCBDVFJMV09SRCkJd3JpdGVsKCgodWludDMyX3QpKENUUkxXT1JEKSA8PCAxNikgfCAodWludDMyX3QpKENUUkxXT1JEKSwgZGV2cHJpdi0+YmFzZV9hZGRyKyhSRUdBRFJTKSkKIAotI2RlZmluZSBNQ19ESVNBQkxFKCBSRUdBRFJTLCBDVFJMV09SRCApCXdyaXRlbCggICh1aW50MzJfdCkoIENUUkxXT1JEICkgPDwgMTYgLCBkZXZwcml2LT5iYXNlX2FkZHIrKCBSRUdBRFJTICkgKQorI2RlZmluZSBNQ19ESVNBQkxFKFJFR0FEUlMsIENUUkxXT1JEKQl3cml0ZWwoKHVpbnQzMl90KShDVFJMV09SRCkgPDwgMTYgLCBkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FEUlMpKQogCi0jZGVmaW5lIE1DX1RFU1QoIFJFR0FEUlMsIENUUkxXT1JEICkJKCAoIHJlYWRsKGRldnByaXYtPmJhc2VfYWRkcisoIFJFR0FEUlMgKSkgJiBDVFJMV09SRCApICE9IDAgKQorI2RlZmluZSBNQ19URVNUKFJFR0FEUlMsIENUUkxXT1JEKQkoKHJlYWRsKGRldnByaXYtPmJhc2VfYWRkcisoUkVHQURSUykpICYgQ1RSTFdPUkQpICE9IDApCiAKIC8qICNkZWZpbmUgV1I3MTQ2KFJFR0FSRFMsQ1RSTFdPUkQpCiAgICAgd3JpdGVsKENUUkxXT1JELCh1aW50MzJfdCkoZGV2cHJpdi0+YmFzZV9hZGRyKyhSRUdBUkRTKSkpICovCi0jZGVmaW5lIFdSNzE0NihSRUdBUkRTLENUUkxXT1JEKSB3cml0ZWwoQ1RSTFdPUkQsZGV2cHJpdi0+YmFzZV9hZGRyKyhSRUdBUkRTKSkKKyNkZWZpbmUgV1I3MTQ2KFJFR0FSRFMsIENUUkxXT1JEKSB3cml0ZWwoQ1RSTFdPUkQsIGRldnByaXYtPmJhc2VfYWRkcisoUkVHQVJEUykpCiAKIC8qICNkZWZpbmUgUlI3MTQ2KFJFR0FSRFMpCiAgICAgcmVhZGwoKHVpbnQzMl90KShkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FSRFMpKSkgKi8KICNkZWZpbmUgUlI3MTQ2KFJFR0FSRFMpCQlyZWFkbChkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FSRFMpKQogCi0jZGVmaW5lIEJVR0ZJWF9TVFJFRyhSRUdBRFJTKSAgICggUkVHQURSUyAtIDQgKQorI2RlZmluZSBCVUdGSVhfU1RSRUcoUkVHQURSUykgICAoUkVHQURSUyAtIDQpCiAKLS8vIFdyaXRlIGEgdGltZSBzbG90IGNvbnRyb2wgcmVjb3JkIHRvIFRTTDIuCi0jZGVmaW5lIFZFQ1RQT1JUKCBWRUNUTlVNICkJCShQX1RTTDIgKyAoIChWRUNUTlVNKSA8PCAyICkpCi0jZGVmaW5lIFNFVFZFQ1QoIFZFQ1ROVU0sIFZFQ1RWQUwgKQlXUjcxNDYoVkVDVFBPUlQoIFZFQ1ROVU0gKSwgKFZFQ1RWQUwpKQorLyogIFdyaXRlIGEgdGltZSBzbG90IGNvbnRyb2wgcmVjb3JkIHRvIFRTTDIuICovCisjZGVmaW5lIFZFQ1RQT1JUKFZFQ1ROVU0pCQkoUF9UU0wyICsgKChWRUNUTlVNKSA8PCAyKSkKKyNkZWZpbmUgU0VUVkVDVChWRUNUTlVNLCBWRUNUVkFMKQlXUjcxNDYoVkVDVFBPUlQoVkVDVE5VTSksIChWRUNUVkFMKSkKIAotLy8gQ29kZSBtYWNyb3MgdXNlZCBmb3IgY29uc3RydWN0aW5nIEkyQyBjb21tYW5kIGJ5dGVzLgotI2RlZmluZSBJMkNfQjIoQVRUUixWQUwpCSggKCAoQVRUUikgPDwgNiApIHwgKCAoVkFMKSA8PCAyNCApICkKLSNkZWZpbmUgSTJDX0IxKEFUVFIsVkFMKQkoICggKEFUVFIpIDw8IDQgKSB8ICggKFZBTCkgPDwgMTYgKSApCi0jZGVmaW5lIEkyQ19CMChBVFRSLFZBTCkJKCAoIChBVFRSKSA8PCAyICkgfCAoIChWQUwpIDw8ICA4ICkgKQorLyogIENvZGUgbWFjcm9zIHVzZWQgZm9yIGNvbnN0cnVjdGluZyBJMkMgY29tbWFuZCBieXRlcy4gKi8KKyNkZWZpbmUgSTJDX0IyKEFUVFIsIFZBTCkJKCgoQVRUUikgPDwgNikgfCAoKFZBTCkgPDwgMjQpKQorI2RlZmluZSBJMkNfQjEoQVRUUiwgVkFMKQkoKChBVFRSKSA8PCA0KSB8ICgoVkFMKSA8PCAxNikpCisjZGVmaW5lIEkyQ19CMChBVFRSLCBWQUwpCSgoKEFUVFIpIDw8IDIpIHwgKChWQUwpIDw8ICA4KSkKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgczYyNl9yYW5nZV90YWJsZSA9IHsgMiwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHM2MjZfcmFuZ2VfdGFibGUgPSB7IDIsIHsKIAkJCVJBTkdFKC01LCA1KSwKIAkJCVJBTkdFKC0xMCwgMTApLAogCX0KIH07CiAKLXN0YXRpYyBpbnQgczYyNl9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KQorc3RhdGljIGludCBzNjI2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAvKiAgIHVpbnQ4X3QJUG9sbExpc3Q7ICovCiAvKiAgIHVpbnQxNl90CUFkY0RhdGE7ICovCkBAIC01MDcsMTAgKzQ5NywxMCBAQAogCWludCByZXQ7CiAJcmVzb3VyY2Vfc2l6ZV90IHJlc291cmNlU3RhcnQ7CiAJZG1hX2FkZHJfdCBhcHBkbWE7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAotCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHM2MjZfcHJpdmF0ZSkpIDwgMCkKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgczYyNl9wcml2YXRlKSkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUzYyNiwgUENJX0RFVklDRV9JRF9TNjI2LApAQCAtNTM1LDcgKzUyNSw4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICgocmVzdWx0ID0gY29tZWRpX3BjaV9lbmFibGUocGRldiwgInM2MjYiKSkgPCAwKSB7CisJcmVzdWx0ID0gY29tZWRpX3BjaV9lbmFibGUocGRldiwgInM2MjYiKTsKKwlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoInM2MjZfYXR0YWNoOiBjb21lZGlfcGNpX2VuYWJsZSBmYWlsc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTU1MCwyMSArNTQxLDIyIEBACiAJfQogCiAJaWYgKGRldnByaXYtPmJhc2VfYWRkcikgewotCQkvL2Rpc2FibGUgbWFzdGVyIGludGVycnVwdAorCQkvKiBkaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQgKi8KIAkJd3JpdGVsKDAsIGRldnByaXYtPmJhc2VfYWRkciArIFBfSUVSKTsKIAotCQkvL3NvZnQgcmVzZXQKKwkJLyogc29mdCByZXNldCAqLwogCQl3cml0ZWwoTUMxX1NPRlRfUkVTRVQsIGRldnByaXYtPmJhc2VfYWRkciArIFBfTUMxKTsKIAotCQkvL0RNQSBGSVhNRSBETUEvLworCQkvKiBETUEgRklYTUUgRE1BLy8gKi8KIAkJREVCVUcoInM2MjZfYXR0YWNoOiBETUEgQUxMT0NBVElPTlxuIik7CiAKLQkJLy9hZGMgYnVmZmVyIGFsbG9jYXRpb24KKwkJLyogYWRjIGJ1ZmZlciBhbGxvY2F0aW9uICovCiAJCWRldnByaXYtPmFsbG9jYXRlZEJ1ZiA9IDA7CiAKLQkJaWYgKChkZXZwcml2LT5BTkFCdWYuTG9naWNhbEJhc2UgPQotCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGRldnByaXYtPnBkZXYsIERNQUJVRl9TSVpFLAotCQkJCQkmYXBwZG1hKSkgPT0gTlVMTCkgeworCQlkZXZwcml2LT5BTkFCdWYuTG9naWNhbEJhc2UgPQorCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2cHJpdi0+cGRldiwgRE1BQlVGX1NJWkUsICZhcHBkbWEpOworCisJCWlmIChkZXZwcml2LT5BTkFCdWYuTG9naWNhbEJhc2UgPT0gTlVMTCkgewogCQkJcHJpbnRrKCJzNjI2X2F0dGFjaDogRE1BIE1lbW9yeSBtYXBwaW5nIGVycm9yXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC01NzUsOSArNTY3LDEwIEBACiAKIAkJZGV2cHJpdi0+YWxsb2NhdGVkQnVmKys7CiAKLQkJaWYgKChkZXZwcml2LT5SUFNCdWYuTG9naWNhbEJhc2UgPQotCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGRldnByaXYtPnBkZXYsIERNQUJVRl9TSVpFLAotCQkJCQkmYXBwZG1hKSkgPT0gTlVMTCkgeworCQlkZXZwcml2LT5SUFNCdWYuTG9naWNhbEJhc2UgPQorCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2cHJpdi0+cGRldiwgRE1BQlVGX1NJWkUsICAmYXBwZG1hKTsKKworCQlpZiAoZGV2cHJpdi0+UlBTQnVmLkxvZ2ljYWxCYXNlID09IE5VTEwpIHsKIAkJCXByaW50aygiczYyNl9hdHRhY2g6IERNQSBNZW1vcnkgbWFwcGluZyBlcnJvclxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtNTk5LDEyICs1OTIsMTQgQEAKIAlkZXYtPmlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKWRldnByaXYtPmJhc2VfYWRkcjsKIAlkZXYtPmlycSA9IGRldnByaXYtPnBkZXYtPmlycTsKIAotCS8vc2V0IHVwIGludGVycnVwdCBoYW5kbGVyCisJLyogc2V0IHVwIGludGVycnVwdCBoYW5kbGVyICovCiAJaWYgKGRldi0+aXJxID09IDApIHsKIAkJcHJpbnRrKCIgdW5rbm93biBpcnEgKGJhZClcbiIpOwogCX0gZWxzZSB7Ci0JCWlmICgocmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGRldi0+aXJxLCBzNjI2X2lycV9oYW5kbGVyLAotCQkJCQlJUlFGX1NIQVJFRCwgInM2MjYiLCBkZXYpKSA8IDApIHsKKwkJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGRldi0+aXJxLCBzNjI2X2lycV9oYW5kbGVyLAorCQkJCQkgSVJRRl9TSEFSRUQsICJzNjI2IiwgZGV2KTsKKworCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOwogCQkJZGV2LT5pcnEgPSAwOwogCQl9CkBAIC02ODksMTE5ICs2ODQsMTIxIEBACiAJcy0+bWF4ZGF0YSA9IDB4ZmZmZmZmOwogCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CiAKLQkvL3N0b3AgYWlfY29tbWFuZAorCS8qIHN0b3AgYWlfY29tbWFuZCAqLwogCWRldnByaXYtPmFpX2NtZF9ydW5uaW5nID0gMDsKIAogCWlmIChkZXZwcml2LT5iYXNlX2FkZHIgJiYgKGRldnByaXYtPmFsbG9jYXRlZEJ1ZiA9PSAyKSkgewogCQlkbWFfYWRkcl90IHBQaHlzQnVmOwogCQl1aW50MTZfdCBjaGFuOwogCi0JCS8vIGVuYWIgREVCSSBhbmQgYXVkaW8gcGlucywgZW5hYmxlIEkyQyBpbnRlcmZhY2UuCisJCS8qICBlbmFiIERFQkkgYW5kIGF1ZGlvIHBpbnMsIGVuYWJsZSBJMkMgaW50ZXJmYWNlLiAqLwogCQlNQ19FTkFCTEUoUF9NQzEsIE1DMV9ERUJJIHwgTUMxX0FVRElPIHwgTUMxX0kyQyk7Ci0JCS8vIENvbmZpZ3VyZSBERUJJIG9wZXJhdGluZyBtb2RlLgotCQlXUjcxNDYoUF9ERUJJQ0ZHLCBERUJJX0NGR19TTEFWRTE2CS8vIExvY2FsIGJ1cyBpcyAxNgotCQkJLy8gYml0cyB3aWRlLgotCQkJfCAoREVCSV9UT1VUIDw8IERFQklfQ0ZHX1RPVVRfQklUKQkvLyBEZWNsYXJlIERFQkkKLQkJCS8vIHRyYW5zZmVyIHRpbWVvdXQKLQkJCS8vIGludGVydmFsLgotCQkJfCBERUJJX1NXQVAJLy8gU2V0IHVwIGJ5dGUgbGFuZQotCQkJLy8gc3RlZXJpbmcuCi0JCQl8IERFQklfQ0ZHX0lOVEVMKTsJLy8gSW50ZWwtY29tcGF0aWJsZQotCQkvLyBsb2NhbCBidXMgKERFQkkKLQkJLy8gbmV2ZXIgdGltZXMgb3V0KS4KKwkJLyogIENvbmZpZ3VyZSBERUJJIG9wZXJhdGluZyBtb2RlLiAqLworCQlXUjcxNDYoUF9ERUJJQ0ZHLCBERUJJX0NGR19TTEFWRTE2CS8qICBMb2NhbCBidXMgaXMgMTYgKi8KKwkJCS8qICBiaXRzIHdpZGUuICovCisJCQl8IChERUJJX1RPVVQgPDwgREVCSV9DRkdfVE9VVF9CSVQpCS8qICBEZWNsYXJlIERFQkkgKi8KKwkJCS8qICB0cmFuc2ZlciB0aW1lb3V0ICovCisJCQkvKiAgaW50ZXJ2YWwuICovCisJCQl8IERFQklfU1dBUAkvKiAgU2V0IHVwIGJ5dGUgbGFuZSAqLworCQkJLyogIHN0ZWVyaW5nLiAqLworCQkJfCBERUJJX0NGR19JTlRFTCk7CS8qICBJbnRlbC1jb21wYXRpYmxlICovCisJCS8qICBsb2NhbCBidXMgKERFQkkgKi8KKwkJLyogIG5ldmVyIHRpbWVzIG91dCkuICovCiAJCURFQlVHKCJzNjI2X2F0dGFjaDogJWQgZGViaSBpbml0IC0tICVkXG4iLAogCQkJREVCSV9DRkdfU0xBVkUxNiB8IChERUJJX1RPVVQgPDwgREVCSV9DRkdfVE9VVF9CSVQpIHwKIAkJCURFQklfU1dBUCB8IERFQklfQ0ZHX0lOVEVMLAogCQkJREVCSV9DRkdfSU5URUwgfCBERUJJX0NGR19UT1EgfCBERUJJX0NGR19JTkNRIHwKIAkJCURFQklfQ0ZHXzE2USk7CiAKLQkJLy9ERUJJIElOSVQgUzYyNiBXUjcxNDYoIFBfREVCSUNGRywgREVCSV9DRkdfSU5URUwgfCBERUJJX0NGR19UT1EKLQkJLy98IERFQklfQ0ZHX0lOQ1F8IERFQklfQ0ZHXzE2USk7IC8vZW5kCisJCS8qIERFQkkgSU5JVCBTNjI2IFdSNzE0NiggUF9ERUJJQ0ZHLCBERUJJX0NGR19JTlRFTCB8IERFQklfQ0ZHX1RPUSAqLworCQkvKiB8IERFQklfQ0ZHX0lOQ1F8IERFQklfQ0ZHXzE2USk7IC8vZW5kICovCiAKLQkJLy8gUGFnaW5nIGlzIGRpc2FibGVkLgotCQlXUjcxNDYoUF9ERUJJUEFHRSwgREVCSV9QQUdFX0RJU0FCTEUpOwkvLyBEaXNhYmxlIE1NVSBwYWdpbmcuCisJCS8qICBQYWdpbmcgaXMgZGlzYWJsZWQuICovCisJCVdSNzE0NihQX0RFQklQQUdFLCBERUJJX1BBR0VfRElTQUJMRSk7CS8qICBEaXNhYmxlIE1NVSBwYWdpbmcuICovCiAKLQkJLy8gSW5pdCBHUElPIHNvIHRoYXQgQURDIFN0YXJ0KiBpcyBuZWdhdGVkLgorCQkvKiAgSW5pdCBHUElPIHNvIHRoYXQgQURDIFN0YXJ0KiBpcyBuZWdhdGVkLiAqLwogCQlXUjcxNDYoUF9HUElPLCBHUElPX0JBU0UgfCBHUElPMV9ISSk7CiAKLQkJLy9Jc0JvYXJkUmV2QSBpcyBhIGJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYm9hcmQgaXMKLQkJLy9SZXZBLgorICAgIC8qIElzQm9hcmRSZXZBIGlzIGEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBib2FyZCBpcyBSZXZBLgorICAgICAqCisgICAgICogVkVSU0lPTiAyLjAxIENIQU5HRTogUkVWIEEgJiBCIEJPQVJEUyBOT1cgU1VQUE9SVEVEIEJZIERZTkFNSUMKKyAgICAgKiBFRVBST00gQUREUkVTUyBTRUxFQ1RJT04uICBJbml0aWFsaXplIHRoZSBJMkMgaW50ZXJmYWNlLCB3aGljaAorICAgICAqIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBvbmJvYXJkIHNlcmlhbCBFRVBST00uICBUaGUgRUVQUk9NJ3MgSTJDCisgICAgICogRGV2aWNlQWRkcmVzcyBpcyBoYXJkd2lyZWQgdG8gYSB2YWx1ZSB0aGF0IGlzIGRlcGVuZGVudCBvbiB0aGUKKyAgICAgKiA2MjYgYm9hcmQgcmV2aXNpb24uICBPbiBhbGwgYm9hcmQgcmV2aXNpb25zLCB0aGUgRUVQUk9NIHN0b3JlcworICAgICAqIFRyaW1EQUMgY2FsaWJyYXRpb24gY29uc3RhbnRzIGZvciBhbmFsb2cgSS9PLiAgT24gUmV2QiBhbmQKKyAgICAgKiBoaWdoZXIgYm9hcmRzLCB0aGUgRGV2aWNlQWRkcmVzcyBpcyBoYXJkd2lyZWQgdG8gMCB0byBlbmFibGUKKyAgICAgKiB0aGUgRUVQUk9NIHRvIGFsc28gc3RvcmUgdGhlIFBDSSBTdWJWZW5kb3JJRCBhbmQgU3ViRGV2aWNlSUQ7CisgICAgICogdGhpcyBpcyB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgU0FBNzE0NiBleHBlY3RzIGEKKyAgICAgKiBjb25maWd1cmF0aW9uIEVFUFJPTSB0byByZXNpZGUuICBPbiBSZXZBIGJvYXJkcywgdGhlIEVFUFJPTQorICAgICAqIGRldmljZSBhZGRyZXNzLCB3aGljaCBpcyBoYXJkd2lyZWQgdG8gNCwgcHJldmVudHMgdGhlIFNBQTcxNDYKKyAgICAgKiBmcm9tIHJldHJpZXZpbmcgUENJIHN1Yi1JRHMsIHNvIHRoZSBTQUE3MTQ2IHVzZXMgaXRzIGJ1aWx0LWluCisgICAgICogZGVmYXVsdCB2YWx1ZXMsIGluc3RlYWQuCisgICAgICovCiAKLQkJLy8gVkVSU0lPTiAyLjAxIENIQU5HRTogUkVWIEEgJiBCIEJPQVJEUyBOT1cgU1VQUE9SVEVEIEJZIERZTkFNSUMKLQkJLy8gRUVQUk9NIEFERFJFU1MgU0VMRUNUSU9OLiAgSW5pdGlhbGl6ZSB0aGUgSTJDIGludGVyZmFjZSwgd2hpY2gKLQkJLy8gaXMgdXNlZCB0byBhY2Nlc3MgdGhlIG9uYm9hcmQgc2VyaWFsIEVFUFJPTS4gIFRoZSBFRVBST00ncyBJMkMKLQkJLy8gRGV2aWNlQWRkcmVzcyBpcyBoYXJkd2lyZWQgdG8gYSB2YWx1ZSB0aGF0IGlzIGRlcGVuZGVudCBvbiB0aGUKLQkJLy8gNjI2IGJvYXJkIHJldmlzaW9uLiAgT24gYWxsIGJvYXJkIHJldmlzaW9ucywgdGhlIEVFUFJPTSBzdG9yZXMKLQkJLy8gVHJpbURBQyBjYWxpYnJhdGlvbiBjb25zdGFudHMgZm9yIGFuYWxvZyBJL08uICBPbiBSZXZCIGFuZAotCQkvLyBoaWdoZXIgYm9hcmRzLCB0aGUgRGV2aWNlQWRkcmVzcyBpcyBoYXJkd2lyZWQgdG8gMCB0byBlbmFibGUKLQkJLy8gdGhlIEVFUFJPTSB0byBhbHNvIHN0b3JlIHRoZSBQQ0kgU3ViVmVuZG9ySUQgYW5kIFN1YkRldmljZUlEOwotCQkvLyB0aGlzIGlzIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBTQUE3MTQ2IGV4cGVjdHMgYQotCQkvLyBjb25maWd1cmF0aW9uIEVFUFJPTSB0byByZXNpZGUuICBPbiBSZXZBIGJvYXJkcywgdGhlIEVFUFJPTQotCQkvLyBkZXZpY2UgYWRkcmVzcywgd2hpY2ggaXMgaGFyZHdpcmVkIHRvIDQsIHByZXZlbnRzIHRoZSBTQUE3MTQ2Ci0JCS8vIGZyb20gcmV0cmlldmluZyBQQ0kgc3ViLUlEcywgc28gdGhlIFNBQTcxNDYgdXNlcyBpdHMgYnVpbHQtaW4KLQkJLy8gZGVmYXVsdCB2YWx1ZXMsIGluc3RlYWQuCisJCS8qICAgICBkZXZwcml2LT5JMkNhcmRzPSBJc0JvYXJkUmV2QSA/IDB4QTggOiAweEEwOyAvLyBTZXQgSTJDIEVFUFJPTSAqLworCQkvKiAgRGV2aWNlVHlwZSAoMHhBMCkgKi8KKwkJLyogIGFuZCBEZXZpY2VBZGRyZXNzPDwxLiAqLwogCi0JCS8vICAgIGRldnByaXYtPkkyQ2FyZHM9IElzQm9hcmRSZXZBID8gMHhBOCA6IDB4QTA7IC8vIFNldCBJMkMgRUVQUk9NCi0JCS8vIERldmljZVR5cGUgKDB4QTApCi0JCS8vIGFuZCBEZXZpY2VBZGRyZXNzPDwxLgorCQlkZXZwcml2LT5JMkNBZHJzID0gMHhBMDsJLyogIEkyQyBkZXZpY2UgYWRkcmVzcyBmb3Igb25ib2FyZCAqLworCQkvKiAgZWVwcm9tKHJldmIpICovCiAKLQkJZGV2cHJpdi0+STJDQWRycyA9IDB4QTA7CS8vIEkyQyBkZXZpY2UgYWRkcmVzcyBmb3Igb25ib2FyZAotCQkvLyBlZXByb20ocmV2YikKKwkJLyogIElzc3VlIGFuIEkyQyBBQk9SVCBjb21tYW5kIHRvIGhhbHQgYW55IEkyQyBvcGVyYXRpb24gaW4gKi8KKwkJLyogcHJvZ3Jlc3MgYW5kIHJlc2V0IEJVU1kgZmxhZy4gKi8KKwkJV1I3MTQ2KFBfSTJDU1RBVCwgSTJDX0NMS1NFTCB8IEkyQ19BQk9SVCk7CisJCS8qICBXcml0ZSBJMkMgY29udHJvbDogYWJvcnQgYW55IEkyQyBhY3Rpdml0eS4gKi8KKwkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfVVBMRF9JSUMpOworCQkvKiAgSW52b2tlIGNvbW1hbmQgIHVwbG9hZCAqLworCQl3aGlsZSAoKFJSNzE0NihQX01DMikgJiBNQzJfVVBMRF9JSUMpID09IDApCisJCQk7CisJCS8qICBhbmQgd2FpdCBmb3IgdXBsb2FkIHRvIGNvbXBsZXRlLiAqLwogCi0JCS8vIElzc3VlIGFuIEkyQyBBQk9SVCBjb21tYW5kIHRvIGhhbHQgYW55IEkyQyBvcGVyYXRpb24gaW4KLQkJLy9wcm9ncmVzcyBhbmQgcmVzZXQgQlVTWSBmbGFnLgotCQlXUjcxNDYoUF9JMkNTVEFULCBJMkNfQ0xLU0VMIHwgSTJDX0FCT1JUKTsJLy8gV3JpdGUgSTJDIGNvbnRyb2w6Ci0JCS8vIGFib3J0IGFueSBJMkMKLQkJLy8gYWN0aXZpdHkuCi0JCU1DX0VOQUJMRShQX01DMiwgTUMyX1VQTERfSUlDKTsJLy8gSW52b2tlIGNvbW1hbmQKLQkJLy8gdXBsb2FkCi0JCXdoaWxlICgoUlI3MTQ2KFBfTUMyKSAmIE1DMl9VUExEX0lJQykgPT0gMCkgOwkvLyBhbmQgd2FpdCBmb3IKLQkJLy8gdXBsb2FkIHRvCi0JCS8vIGNvbXBsZXRlLgotCi0JCS8vIFBlciBTQUE3MTQ2IGRhdGEgc2hlZXQsIHdyaXRlIHRvIFNUQVRVUyByZWcgdHdpY2UgdG8gcmVzZXQgYWxsCi0JCS8vIEkyQyBlcnJvciBmbGFncy4KKwkJLyogUGVyIFNBQTcxNDYgZGF0YSBzaGVldCwgd3JpdGUgdG8gU1RBVFVTIHJlZyB0d2ljZSB0bworCQkgKiByZXNldCBhbGwgIEkyQyBlcnJvciBmbGFncy4gKi8KIAkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQkJV1I3MTQ2KFBfSTJDU1RBVCwgSTJDX0NMS1NFTCk7CS8vIFdyaXRlIEkyQyBjb250cm9sOiByZXNldAotCQkJLy8gZXJyb3IgZmxhZ3MuCi0JCQlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0lJQyk7CS8vIEludm9rZSBjb21tYW5kIHVwbG9hZAotCQkJd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9JSUMpKSA7CS8vICAgYW5kIHdhaXQgZm9yCi0JCQkvLyAgIHVwbG9hZCB0bwotCQkJLy8gICBjb21wbGV0ZS4KKwkJCVdSNzE0NihQX0kyQ1NUQVQsIEkyQ19DTEtTRUwpOworCQkJLyogIFdyaXRlIEkyQyBjb250cm9sOiByZXNldCAgZXJyb3IgZmxhZ3MuICovCisJCQlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0lJQyk7CS8qICBJbnZva2UgY29tbWFuZCB1cGxvYWQgKi8KKwkJCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfSUlDKSkKKwkJCQk7CisJCQkvKiBhbmQgd2FpdCBmb3IgdXBsb2FkIHRvIGNvbXBsZXRlLiAqLwogCQl9CiAKLQkJLy8gSW5pdCBhdWRpbyBpbnRlcmZhY2UgZnVuY3Rpb25hbCBhdHRyaWJ1dGVzOiBzZXQgREFDL0FEQyBzZXJpYWwKLQkJLy8gY2xvY2sgcmF0ZXMsIGludmVydCBEQUMgc2VyaWFsIGNsb2NrIHNvIHRoYXQgREFDIGRhdGEgc2V0dXAKLQkJLy8gdGltZXMgYXJlIHNhdGlzZmllZCwgZW5hYmxlIERBQyBzZXJpYWwgY2xvY2sgb3V0LgorCQkvKiBJbml0IGF1ZGlvIGludGVyZmFjZSBmdW5jdGlvbmFsIGF0dHJpYnV0ZXM6IHNldCBEQUMvQURDCisJCSAqIHNlcmlhbCBjbG9jayByYXRlcywgaW52ZXJ0IERBQyBzZXJpYWwgY2xvY2sgc28gdGhhdAorCQkgKiBEQUMgZGF0YSBzZXR1cCB0aW1lcyBhcmUgc2F0aXNmaWVkLCBlbmFibGUgREFDIHNlcmlhbAorCQkgKiBjbG9jayBvdXQuCisJCSAqLworCiAJCVdSNzE0NihQX0FDT04yLCBBQ09OMl9JTklUKTsKIAotCQkvLyBTZXQgdXAgVFNMMSBzbG90IGxpc3QsIHdoaWNoIGlzIHVzZWQgdG8gY29udHJvbCB0aGUKLQkJLy8gYWNjdW11bGF0aW9uIG9mIEFEQyBkYXRhOiBSU0QxID0gc2hpZnQgZGF0YSBpbiBvbiBTRDEuICBTSUJfQTEKLQkJLy8gPSBzdG9yZSBkYXRhIHVpbnQ4X3QgYXQgbmV4dCBhdmFpbGFibGUgbG9jYXRpb24gaW4gRkIgQlVGRkVSMQotCQkvLyByZWdpc3Rlci4KLQkJV1I3MTQ2KFBfVFNMMSwgUlNEMSB8IFNJQl9BMSk7CS8vIEZldGNoIEFEQyBoaWdoIGRhdGEKLQkJLy8gdWludDhfdC4KLQkJV1I3MTQ2KFBfVFNMMSArIDQsIFJTRDEgfCBTSUJfQTEgfCBFT1MpOwkvLyBGZXRjaCBBREMgbG93IGRhdGEKLQkJLy8gdWludDhfdDsgZW5kIG9mCi0JCS8vIFRTTDEuCisJCS8qIFNldCB1cCBUU0wxIHNsb3QgbGlzdCwgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sIHRoZQorCQkgKiBhY2N1bXVsYXRpb24gb2YgQURDIGRhdGE6IFJTRDEgPSBzaGlmdCBkYXRhIGluIG9uIFNEMS4KKwkJICogU0lCX0ExICA9IHN0b3JlIGRhdGEgdWludDhfdCBhdCBuZXh0IGF2YWlsYWJsZSBsb2NhdGlvbiBpbgorCQkgKiBGQiBCVUZGRVIxICByZWdpc3Rlci4gKi8KKwkJV1I3MTQ2KFBfVFNMMSwgUlNEMSB8IFNJQl9BMSk7CisJCS8qICBGZXRjaCBBREMgaGlnaCBkYXRhIHVpbnQ4X3QuICovCisJCVdSNzE0NihQX1RTTDEgKyA0LCBSU0QxIHwgU0lCX0ExIHwgRU9TKTsKKwkJLyogIEZldGNoIEFEQyBsb3cgZGF0YSB1aW50OF90OyBlbmQgb2YgVFNMMS4gKi8KIAotCQkvLyBlbmFiIFRTTDEgc2xvdCBsaXN0IHNvIHRoYXQgaXQgZXhlY3V0ZXMgYWxsIHRoZSB0aW1lLgorCQkvKiAgZW5hYiBUU0wxIHNsb3QgbGlzdCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGFsbCB0aGUgdGltZS4gKi8KIAkJV1I3MTQ2KFBfQUNPTjEsIEFDT04xX0FEQ1NUQVJUKTsKIAotCQkvLyBJbml0aWFsaXplIFJQUyByZWdpc3RlcnMgdXNlZCBmb3IgQURDLgorCQkvKiAgSW5pdGlhbGl6ZSBSUFMgcmVnaXN0ZXJzIHVzZWQgZm9yIEFEQy4gKi8KIAotCQkvL1BoeXNpY2FsIHN0YXJ0IG9mIFJQUyBwcm9ncmFtLgorCQkvKiBQaHlzaWNhbCBzdGFydCBvZiBSUFMgcHJvZ3JhbS4gKi8KIAkJV1I3MTQ2KFBfUlBTQUREUjEsICh1aW50MzJfdCkgZGV2cHJpdi0+UlBTQnVmLlBoeXNpY2FsQmFzZSk7CiAKLQkJV1I3MTQ2KFBfUlBTUEFHRTEsIDApOwkvLyBSUFMgcHJvZ3JhbSBwZXJmb3JtcyBubwotCQkvLyBleHBsaWNpdCBtZW0gd3JpdGVzLgotCQlXUjcxNDYoUF9SUFMxX1RPVVQsIDApOwkvLyBEaXNhYmxlIFJQUyB0aW1lb3V0cy4KKwkJV1I3MTQ2KFBfUlBTUEFHRTEsIDApOworCQkvKiAgUlBTIHByb2dyYW0gcGVyZm9ybXMgbm8gZXhwbGljaXQgbWVtIHdyaXRlcy4gKi8KKwkJV1I3MTQ2KFBfUlBTMV9UT1VULCAwKTsJLyogIERpc2FibGUgUlBTIHRpbWVvdXRzLiAqLwogCi0JCS8vIFNBQTcxNDYgQlVHIFdPUktBUk9VTkQuICBJbml0aWFsaXplIFNBQTcxNDYgQURDIGludGVyZmFjZSB0byBhCi0JCS8vIGtub3duIHN0YXRlIGJ5IGludm9raW5nIEFEQ3MgdW50aWwgRkIgQlVGRkVSIDEgcmVnaXN0ZXIgc2hvd3MKLQkJLy8gdGhhdCBpdCBpcyBjb3JyZWN0bHkgcmVjZWl2aW5nIEFEQyBkYXRhLiAgVGhpcyBpcyBuZWNlc3NhcnkKLQkJLy8gYmVjYXVzZSB0aGUgU0FBNzE0NiBBREMgaW50ZXJmYWNlIGRvZXMgbm90IHN0YXJ0IHVwIGluIGEKLQkJLy8gZGVmaW5lZCBzdGF0ZSBhZnRlciBhIFBDSSByZXNldC4KKwkJLyogU0FBNzE0NiBCVUcgV09SS0FST1VORC4gIEluaXRpYWxpemUgU0FBNzE0NiBBREMgaW50ZXJmYWNlCisJCSAqIHRvIGEga25vd24gc3RhdGUgYnkgaW52b2tpbmcgQURDcyB1bnRpbCBGQiBCVUZGRVIgMQorCQkgKiByZWdpc3RlciBzaG93cyB0aGF0IGl0IGlzIGNvcnJlY3RseSByZWNlaXZpbmcgQURDIGRhdGEuCisJCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIFNBQTcxNDYgQURDIGludGVyZmFjZSBkb2VzCisJCSAqIG5vdCBzdGFydCB1cCBpbiBhIGRlZmluZWQgc3RhdGUgYWZ0ZXIgYSBQQ0kgcmVzZXQuCisJCSAqLwogCiAvKiAgICAgUG9sbExpc3QgPSBFT1BMOwkJCS8vIENyZWF0ZSBhIHNpbXBsZSBwb2xsaW5nICovCiAvKiAJCQkJCS8vIGxpc3QgZm9yIGFuYWxvZyBpbnB1dCAqLwpAQCAtODI5LDExNSArODI2LDEyMyBAQAogLyogCSAgYnJlYWs7ICovCiAvKiAgICAgICB9ICovCiAKLQkJLy8gZW5kIGluaXRBREMKKwkJLyogIGVuZCBpbml0QURDICovCiAKLQkJLy8gaW5pdCB0aGUgREFDIGludGVyZmFjZQorCQkvKiAgaW5pdCB0aGUgREFDIGludGVyZmFjZSAqLwogCi0JCS8vIEluaXQgQXVkaW8yJ3Mgb3V0cHV0IERNQUMgYXR0cmlidXRlczogYnVyc3QgbGVuZ3RoID0gMSBEV09SRCwKLQkJLy8gdGhyZXNob2xkID0gMSBEV09SRC4KKwkJLyogSW5pdCBBdWRpbzIncyBvdXRwdXQgRE1BQyBhdHRyaWJ1dGVzOiBidXJzdCBsZW5ndGggPSAxCisJCSAqIERXT1JELCAgdGhyZXNob2xkID0gMSBEV09SRC4KKwkJICovCiAJCVdSNzE0NihQX1BDSV9CVF9BLCAwKTsKIAotCQkvLyBJbml0IEF1ZGlvMidzIG91dHB1dCBETUEgcGh5c2ljYWwgYWRkcmVzc2VzLiAgVGhlIHByb3RlY3Rpb24KLQkJLy8gYWRkcmVzcyBpcyBzZXQgdG8gMSBEV09SRCBwYXN0IHRoZSBiYXNlIGFkZHJlc3Mgc28gdGhhdCBhCi0JCS8vIHNpbmdsZSBEV09SRCB3aWxsIGJlIHRyYW5zZmVycmVkIGVhY2ggdGltZSBhIERNQSB0cmFuc2ZlciBpcwotCQkvLyBlbmFibGVkLgorCQkvKiBJbml0IEF1ZGlvMidzIG91dHB1dCBETUEgcGh5c2ljYWwgYWRkcmVzc2VzLiAgVGhlIHByb3RlY3Rpb24KKwkJICogYWRkcmVzcyBpcyBzZXQgdG8gMSBEV09SRCBwYXN0IHRoZSBiYXNlIGFkZHJlc3Mgc28gdGhhdCBhCisJCSAqIHNpbmdsZSBEV09SRCB3aWxsIGJlIHRyYW5zZmVycmVkIGVhY2ggdGltZSBhIERNQSB0cmFuc2ZlciBpcworCQkgKiBlbmFibGVkLiAqLwogCiAJCXBQaHlzQnVmID0KIAkJCWRldnByaXYtPkFOQUJ1Zi5QaHlzaWNhbEJhc2UgKwogCQkJKERBQ19XRE1BQlVGX09TICogc2l6ZW9mKHVpbnQzMl90KSk7CiAKLQkJV1I3MTQ2KFBfQkFTRUEyX09VVCwgKHVpbnQzMl90KSBwUGh5c0J1Zik7CS8vIEJ1ZmZlciBiYXNlIGFkcnMuCi0JCVdSNzE0NihQX1BST1RBMl9PVVQsICh1aW50MzJfdCkgKHBQaHlzQnVmICsgc2l6ZW9mKHVpbnQzMl90KSkpOwkvLyBQcm90ZWN0aW9uIGFkZHJlc3MuCisJCVdSNzE0NihQX0JBU0VBMl9PVVQsICh1aW50MzJfdCkgcFBoeXNCdWYpOwkvKiAgQnVmZmVyIGJhc2UgYWRycy4gKi8KKwkJV1I3MTQ2KFBfUFJPVEEyX09VVCwgKHVpbnQzMl90KSAocFBoeXNCdWYgKyBzaXplb2YodWludDMyX3QpKSk7CS8qICBQcm90ZWN0aW9uIGFkZHJlc3MuICovCiAKLQkJLy8gQ2FjaGUgQXVkaW8yJ3Mgb3V0cHV0IERNQSBidWZmZXIgbG9naWNhbCBhZGRyZXNzLiAgVGhpcyBpcwotCQkvLyB3aGVyZSBEQUMgZGF0YSBpcyBidWZmZXJlZCBmb3IgQTIgb3V0cHV0IERNQSB0cmFuc2ZlcnMuCisJCS8qIENhY2hlIEF1ZGlvMidzIG91dHB1dCBETUEgYnVmZmVyIGxvZ2ljYWwgYWRkcmVzcy4gIFRoaXMgaXMKKwkJICogd2hlcmUgREFDIGRhdGEgaXMgYnVmZmVyZWQgZm9yIEEyIG91dHB1dCBETUEgdHJhbnNmZXJzLiAqLwogCQlkZXZwcml2LT5wRGFjV0J1ZiA9CiAJCQkodWludDMyX3QgKikgZGV2cHJpdi0+QU5BQnVmLkxvZ2ljYWxCYXNlICsKIAkJCURBQ19XRE1BQlVGX09TOwogCi0JCS8vIEF1ZGlvMidzIG91dHB1dCBjaGFubmVscyBkb2VzIG5vdCB1c2UgcGFnaW5nLiAgVGhlIHByb3RlY3Rpb24KLQkJLy8gdmlvbGF0aW9uIGhhbmRsaW5nIGJpdCBpcyBzZXQgc28gdGhhdCB0aGUgRE1BQyB3aWxsCi0JCS8vIGF1dG9tYXRpY2FsbHkgaGFsdCBhbmQgaXRzIFBDSSBhZGRyZXNzIHBvaW50ZXIgd2lsbCBiZSByZXNldAotCQkvLyB3aGVuIHRoZSBwcm90ZWN0aW9uIGFkZHJlc3MgaXMgcmVhY2hlZC4KKwkJLyogQXVkaW8yJ3Mgb3V0cHV0IGNoYW5uZWxzIGRvZXMgbm90IHVzZSBwYWdpbmcuICBUaGUgcHJvdGVjdGlvbgorCQkgKiB2aW9sYXRpb24gaGFuZGxpbmcgYml0IGlzIHNldCBzbyB0aGF0IHRoZSBETUFDIHdpbGwKKwkJICogYXV0b21hdGljYWxseSBoYWx0IGFuZCBpdHMgUENJIGFkZHJlc3MgcG9pbnRlciB3aWxsIGJlIHJlc2V0CisJCSAqIHdoZW4gdGhlIHByb3RlY3Rpb24gYWRkcmVzcyBpcyByZWFjaGVkLiAqLworCiAJCVdSNzE0NihQX1BBR0VBMl9PVVQsIDgpOwogCi0JCS8vIEluaXRpYWxpemUgdGltZSBzbG90IGxpc3QgMiAoVFNMMiksIHdoaWNoIGlzIHVzZWQgdG8gY29udHJvbAotCQkvLyB0aGUgY2xvY2sgZ2VuZXJhdGlvbiBmb3IgYW5kIHNlcmlhbGl6YXRpb24gb2YgZGF0YSB0byBiZSBzZW50Ci0JCS8vIHRvIHRoZSBEQUMgZGV2aWNlcy4gIFNsb3QgMCBpcyBhIE5PUCB0aGF0IGlzIHVzZWQgdG8gdHJhcCBUU0wKLQkJLy8gZXhlY3V0aW9uOyB0aGlzIHBlcm1pdHMgb3RoZXIgc2xvdHMgdG8gYmUgc2FmZWx5IG1vZGlmaWVkCi0JCS8vIHdpdGhvdXQgZmlyc3QgdHVybmluZyBvZmYgdGhlIFRTTCBzZXF1ZW5jZXIgKHdoaWNoIGlzCi0JCS8vIGFwcGFyZW50bHkgaW1wb3NzaWJsZSB0byBkbykuICBBbHNvLCBTRDMgKHdoaWNoIGlzIGRyaXZlbiBieSBhCi0JCS8vIHB1bGwtdXAgcmVzaXN0b3IpIGlzIHNoaWZ0ZWQgaW4gYW5kIHN0b3JlZCB0byB0aGUgTVNCIG9mCi0JCS8vIEZCX0JVRkZFUjIgdG8gYmUgdXNlZCBhcyBldmlkZW5jZSB0aGF0IHRoZSBzbG90IHNlcXVlbmNlIGhhcwotCQkvLyBub3QgeWV0IGZpbmlzaGVkIGV4ZWN1dGluZy4KLQkJU0VUVkVDVCgwLCBYU0QyIHwgUlNEMyB8IFNJQl9BMiB8IEVPUyk7CS8vIFNsb3QgMDogVHJhcCBUU0wKLQkJLy8gZXhlY3V0aW9uLCBzaGlmdCAweEZGCi0JCS8vIGludG8gRkJfQlVGRkVSMi4KKwkJLyogSW5pdGlhbGl6ZSB0aW1lIHNsb3QgbGlzdCAyIChUU0wyKSwgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sCisJCSAqIHRoZSBjbG9jayBnZW5lcmF0aW9uIGZvciBhbmQgc2VyaWFsaXphdGlvbiBvZiBkYXRhIHRvIGJlIHNlbnQKKwkJICogdG8gdGhlIERBQyBkZXZpY2VzLiAgU2xvdCAwIGlzIGEgTk9QIHRoYXQgaXMgdXNlZCB0byB0cmFwIFRTTAorCQkgKiBleGVjdXRpb247IHRoaXMgcGVybWl0cyBvdGhlciBzbG90cyB0byBiZSBzYWZlbHkgbW9kaWZpZWQKKwkJICogd2l0aG91dCBmaXJzdCB0dXJuaW5nIG9mZiB0aGUgVFNMIHNlcXVlbmNlciAod2hpY2ggaXMKKwkJICogYXBwYXJlbnRseSBpbXBvc3NpYmxlIHRvIGRvKS4gIEFsc28sIFNEMyAod2hpY2ggaXMgZHJpdmVuIGJ5IGEKKwkJICogcHVsbC11cCByZXNpc3RvcikgaXMgc2hpZnRlZCBpbiBhbmQgc3RvcmVkIHRvIHRoZSBNU0Igb2YKKwkJICogRkJfQlVGRkVSMiB0byBiZSB1c2VkIGFzIGV2aWRlbmNlIHRoYXQgdGhlIHNsb3Qgc2VxdWVuY2UgaGFzCisJCSAqIG5vdCB5ZXQgZmluaXNoZWQgZXhlY3V0aW5nLgorCQkgKi8KIAotCQkvLyBJbml0aWFsaXplIHNsb3QgMSwgd2hpY2ggaXMgY29uc3RhbnQuICBTbG90IDEgY2F1c2VzIGEgRFdPUkQgdG8KLQkJLy8gYmUgdHJhbnNmZXJyZWQgZnJvbSBhdWRpbyBjaGFubmVsIDIncyBvdXRwdXQgRklGTyB0byB0aGUgRklGTydzCi0JCS8vIG91dHB1dCBidWZmZXIgc28gdGhhdCBpdCBjYW4gYmUgc2VyaWFsaXplZCBhbmQgc2VudCB0byB0aGUgREFDCi0JCS8vIGR1cmluZyBzdWJzZXF1ZW50IHNsb3RzLiAgQWxsIHJlbWFpbmluZyBzbG90cyBhcmUgZHluYW1pY2FsbHkKLQkJLy8gcG9wdWxhdGVkIGFzIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQgREFDIGRldmljZS4KLQkJU0VUVkVDVCgxLCBMRl9BMik7CS8vIFNsb3QgMTogRmV0Y2ggRFdPUkQgZnJvbSBBdWRpbzIncwotCQkvLyBvdXRwdXQgRklGTy4KKwkJU0VUVkVDVCgwLCBYU0QyIHwgUlNEMyB8IFNJQl9BMiB8IEVPUyk7CisJCS8qICBTbG90IDA6IFRyYXAgVFNMIGV4ZWN1dGlvbiwgc2hpZnQgMHhGRiBpbnRvIEZCX0JVRkZFUjIuICovCiAKLQkJLy8gU3RhcnQgREFDJ3MgYXVkaW8gaW50ZXJmYWNlIChUU0wyKSBydW5uaW5nLgorCQkvKiBJbml0aWFsaXplIHNsb3QgMSwgd2hpY2ggaXMgY29uc3RhbnQuICBTbG90IDEgY2F1c2VzIGEKKwkJICogRFdPUkQgdG8gYmUgdHJhbnNmZXJyZWQgZnJvbSBhdWRpbyBjaGFubmVsIDIncyBvdXRwdXQgRklGTworCQkgKiB0byB0aGUgRklGTydzIG91dHB1dCBidWZmZXIgc28gdGhhdCBpdCBjYW4gYmUgc2VyaWFsaXplZAorCQkgKiBhbmQgc2VudCB0byB0aGUgREFDIGR1cmluZyBzdWJzZXF1ZW50IHNsb3RzLiAgQWxsIHJlbWFpbmluZworCQkgKiBzbG90cyBhcmUgZHluYW1pY2FsbHkgcG9wdWxhdGVkIGFzIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQKKwkJICogREFDIGRldmljZS4KKwkJICovCisJCVNFVFZFQ1QoMSwgTEZfQTIpOworCQkvKiAgU2xvdCAxOiBGZXRjaCBEV09SRCBmcm9tIEF1ZGlvMidzIG91dHB1dCBGSUZPLiAqLworCisJCS8qICBTdGFydCBEQUMncyBhdWRpbyBpbnRlcmZhY2UgKFRTTDIpIHJ1bm5pbmcuICovCiAJCVdSNzE0NihQX0FDT04xLCBBQ09OMV9EQUNTVEFSVCk7CiAKLQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJLyogZW5kIGluaXQgREFDIGludGVyZmFjZSAqLwogCi0JCS8vIGVuZCBpbml0IERBQyBpbnRlcmZhY2UKLQotCQkvLyBJbml0IFRyaW0gREFDcyB0byBjYWxpYnJhdGVkIHZhbHVlcy4gIERvIGl0IHR3aWNlIGJlY2F1c2UgdGhlCi0JCS8vIFNBQTcxNDYgYXVkaW8gY2hhbm5lbCBkb2VzIG5vdCBhbHdheXMgcmVzZXQgcHJvcGVybHkgYW5kCi0JCS8vIHNvbWV0aW1lcyBjYXVzZXMgdGhlIGZpcnN0IGZldyBUcmltREFDIHdyaXRlcyB0byBtYWxmdW5jdGlvbi4KKwkJLyogSW5pdCBUcmltIERBQ3MgdG8gY2FsaWJyYXRlZCB2YWx1ZXMuICBEbyBpdCB0d2ljZSBiZWNhdXNlIHRoZQorCQkgKiBTQUE3MTQ2IGF1ZGlvIGNoYW5uZWwgZG9lcyBub3QgYWx3YXlzIHJlc2V0IHByb3Blcmx5IGFuZAorCQkgKiBzb21ldGltZXMgY2F1c2VzIHRoZSBmaXJzdCBmZXcgVHJpbURBQyB3cml0ZXMgdG8gbWFsZnVuY3Rpb24uCisJCSAqLwogCiAJCUxvYWRUcmltREFDcyhkZXYpOwotCQlMb2FkVHJpbURBQ3MoZGV2KTsJLy8gSW5zdXJhbmNlLgorCQlMb2FkVHJpbURBQ3MoZGV2KTsJLyogIEluc3VyYW5jZS4gKi8KIAotCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkJLy8gTWFudWFsbHkgaW5pdCBhbGwgZ2F0ZSBhcnJheSBoYXJkd2FyZSBpbiBjYXNlIHRoaXMgaXMgYSBzb2Z0Ci0JCS8vIHJlc2V0ICh3ZSBoYXZlIG5vIHdheSBvZiBkZXRlcm1pbmluZyB3aGV0aGVyIHRoaXMgaXMgYSB3YXJtIG9yCi0JCS8vIGNvbGQgc3RhcnQpLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZ2F0ZSBhcnJheSB3aWxsCi0JCS8vIHJlc2V0IG9ubHkgaW4gcmVzcG9uc2UgdG8gYSBQQ0kgaGFyZCByZXNldDsgdGhlcmUgaXMgbm8gc29mdAotCQkvLyByZXNldCBmdW5jdGlvbi4KKwkJLyogTWFudWFsbHkgaW5pdCBhbGwgZ2F0ZSBhcnJheSBoYXJkd2FyZSBpbiBjYXNlIHRoaXMgaXMgYSBzb2Z0CisJCSAqIHJlc2V0ICh3ZSBoYXZlIG5vIHdheSBvZiBkZXRlcm1pbmluZyB3aGV0aGVyIHRoaXMgaXMgYSB3YXJtCisJCSAqIG9yIGNvbGQgc3RhcnQpLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZ2F0ZSBhcnJheSB3aWxsCisJCSAqIHJlc2V0IG9ubHkgaW4gcmVzcG9uc2UgdG8gYSBQQ0kgaGFyZCByZXNldDsgdGhlcmUgaXMgbm8gc29mdAorCQkgKiByZXNldCBmdW5jdGlvbi4gKi8KIAotCQkvLyBJbml0IGFsbCBEQUMgb3V0cHV0cyB0byAwViBhbmQgaW5pdCBhbGwgREFDIHNldHBvaW50IGFuZAotCQkvLyBwb2xhcml0eSBpbWFnZXMuCisJCS8qIEluaXQgYWxsIERBQyBvdXRwdXRzIHRvIDBWIGFuZCBpbml0IGFsbCBEQUMgc2V0cG9pbnQgYW5kCisJCSAqIHBvbGFyaXR5IGltYWdlcy4KKwkJICovCiAJCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBTNjI2X0RBQ19DSEFOTkVMUzsgY2hhbisrKQogCQkJU2V0REFDKGRldiwgY2hhbiwgMCk7CiAKLQkJLy8gSW5pdCBpbWFnZSBvZiBXUk1JU0MyIEJhdHRlcnkgQ2hhcmdlciBFbmFibGVkIGNvbnRyb2wgYml0LgotCQkvLyBUaGlzIGltYWdlIGlzIHVzZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGNoYXJnZXIgY29udHJvbCBiaXQsCi0JCS8vIHdoaWNoIGhhcyBubyBkaXJlY3QgaGFyZHdhcmUgcmVhZGJhY2sgbWVjaGFuaXNtLCBpcyBxdWVyaWVkLgorCQkvKiBJbml0IGltYWdlIG9mIFdSTUlTQzIgQmF0dGVyeSBDaGFyZ2VyIEVuYWJsZWQgY29udHJvbCBiaXQuCisJCSAqIFRoaXMgaW1hZ2UgaXMgdXNlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgY2hhcmdlciBjb250cm9sIGJpdCwKKwkJICogd2hpY2ggaGFzIG5vIGRpcmVjdCBoYXJkd2FyZSByZWFkYmFjayBtZWNoYW5pc20sIGlzIHF1ZXJpZWQuCisJCSAqLwogCQlkZXZwcml2LT5DaGFyZ2VFbmFibGVkID0gMDsKIAotCQkvLyBJbml0IGltYWdlIG9mIHdhdGNoZG9nIHRpbWVyIGludGVydmFsIGluIFdSTUlTQzIuICBUaGlzIGltYWdlCi0JCS8vIG1haW50YWlucyB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgYml0cyBvZiBNSVNDMiBhcmUKLQkJLy8gY29udGludW91c2x5IHJlc2V0IHRvIHplcm8gYXMgbG9uZyBhcyB0aGUgV0QgdGltZXIgaXMgZGlzYWJsZWQuCisJCS8qIEluaXQgaW1hZ2Ugb2Ygd2F0Y2hkb2cgdGltZXIgaW50ZXJ2YWwgaW4gV1JNSVNDMi4gIFRoaXMgaW1hZ2UKKwkJICogbWFpbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBiaXRzIG9mIE1JU0MyIGFyZQorCQkgKiBjb250aW51b3VzbHkgcmVzZXQgdG8gemVybyBhcyBsb25nIGFzIHRoZSBXRCB0aW1lciBpcyBkaXNhYmxlZC4KKwkJICovCiAJCWRldnByaXYtPldESW50ZXJ2YWwgPSAwOwogCi0JCS8vIEluaXQgQ291bnRlciBJbnRlcnJ1cHQgZW5hYiBtYXNrIGZvciBSRE1JU0MyLiAgVGhpcyBtYXNrIGlzCi0JCS8vIGFwcGxpZWQgYWdhaW5zdCBNSVNDMiB3aGVuIHRlc3RpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIHRpbWVyCi0JCS8vIGV2ZW50cyBhcmUgcmVxdWVzdGluZyBpbnRlcnJ1cHQgc2VydmljZS4KKwkJLyogSW5pdCBDb3VudGVyIEludGVycnVwdCBlbmFiIG1hc2sgZm9yIFJETUlTQzIuICBUaGlzIG1hc2sgaXMKKwkJICogYXBwbGllZCBhZ2FpbnN0IE1JU0MyIHdoZW4gdGVzdGluZyB0byBkZXRlcm1pbmUgd2hpY2ggdGltZXIKKwkJICogZXZlbnRzIGFyZSByZXF1ZXN0aW5nIGludGVycnVwdCBzZXJ2aWNlLgorCQkgKi8KIAkJZGV2cHJpdi0+Q291bnRlckludEVuYWJzID0gMDsKIAotCQkvLyBJbml0IGNvdW50ZXJzLgorCQkvKiAgSW5pdCBjb3VudGVycy4gKi8KIAkJQ291bnRlcnNJbml0KGRldik7CiAKLQkJLy8gV2l0aG91dCBtb2RpZnlpbmcgdGhlIHN0YXRlIG9mIHRoZSBCYXR0ZXJ5IEJhY2t1cCBlbmFiLCBkaXNhYmxlCi0JCS8vIHRoZSB3YXRjaGRvZyB0aW1lciwgc2V0IERJTyBjaGFubmVscyAwLTUgdG8gb3BlcmF0ZSBpbiB0aGUKLQkJLy8gc3RhbmRhcmQgRElPICh2cy4gY291bnRlciBvdmVyZmxvdykgbW9kZSwgZGlzYWJsZSB0aGUgYmF0dGVyeQotCQkvLyBjaGFyZ2VyLCBhbmQgcmVzZXQgdGhlIHdhdGNoZG9nIGludGVydmFsIHNlbGVjdG9yIHRvIHplcm8uCisJCS8qIFdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBzdGF0ZSBvZiB0aGUgQmF0dGVyeSBCYWNrdXAgZW5hYiwgZGlzYWJsZQorCQkgKiB0aGUgd2F0Y2hkb2cgdGltZXIsIHNldCBESU8gY2hhbm5lbHMgMC01IHRvIG9wZXJhdGUgaW4gdGhlCisJCSAqIHN0YW5kYXJkIERJTyAodnMuIGNvdW50ZXIgb3ZlcmZsb3cpIG1vZGUsIGRpc2FibGUgdGhlIGJhdHRlcnkKKwkJICogY2hhcmdlciwgYW5kIHJlc2V0IHRoZSB3YXRjaGRvZyBpbnRlcnZhbCBzZWxlY3RvciB0byB6ZXJvLgorCQkgKi8KIAkJV3JpdGVNSVNDMihkZXYsICh1aW50MTZfdCkgKERFQklyZWFkKGRldiwKIAkJCQkJTFBfUkRNSVNDMikgJiBNSVNDMl9CQVRUX0VOQUJMRSkpOwogCi0JCS8vIEluaXRpYWxpemUgdGhlIGRpZ2l0YWwgSS9PIHN1YnN5c3RlbS4KKwkJLyogIEluaXRpYWxpemUgdGhlIGRpZ2l0YWwgSS9PIHN1YnN5c3RlbS4gKi8KIAkJczYyNl9kaW9faW5pdChkZXYpOwogCi0JCS8vZW5hYmxlIGludGVycnVwdCB0ZXN0Ci0JCS8vIHdyaXRlbChJUlFfR1BJTzMgfCBJUlFfUlBTMSxkZXZwcml2LT5iYXNlX2FkZHIrUF9JRVIpOworCQkvKiBlbmFibGUgaW50ZXJydXB0IHRlc3QgKi8KKwkJLyogIHdyaXRlbChJUlFfR1BJTzMgfCBJUlFfUlBTMSxkZXZwcml2LT5iYXNlX2FkZHIrUF9JRVIpOyAqLwogCX0KIAogCURFQlVHKCJzNjI2X2F0dGFjaDogY29tZWRpJWQgczYyNiBhdHRhY2hlZCAlMDR4XG4iLCBkZXYtPm1pbm9yLApAQCAtOTQ2LDkgKzk1MSw5IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBsc2FtcGxfdCBzNjI2X2FpX3JlZ190b191aW50KGludCBkYXRhKQorc3RhdGljIHVuc2lnbmVkIGludCBzNjI2X2FpX3JlZ190b191aW50KGludCBkYXRhKQogewotCWxzYW1wbF90IHRlbXBkYXRhOworCXVuc2lnbmVkIGludCB0ZW1wZGF0YTsKIAogCXRlbXBkYXRhID0gKGRhdGEgPj4gMTgpOwogCWlmICh0ZW1wZGF0YSAmIDB4MjAwMCkKQEAgLTk1OSwyMSArOTY0LDIxIEBACiAJcmV0dXJuIHRlbXBkYXRhOwogfQogCi0vKiBzdGF0aWMgbHNhbXBsX3QgczYyNl91aW50X3RvX3JlZyhjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgZGF0YSl7ICovCisvKiBzdGF0aWMgdW5zaWduZWQgaW50IHM2MjZfdWludF90b19yZWcoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBkYXRhKXsgKi8KIC8qICAgcmV0dXJuIDA7ICovCiAvKiB9ICovCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzNjI2X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9jbWQgKmNtZDsKLQllbmNfcHJpdmF0ZSAqazsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOworCXN0cnVjdCBlbmNfcHJpdmF0ZSAqazsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludDMyX3QgKnJlYWRhZGRyOwogCXVpbnQzMl90IGlycXR5cGUsIGlycXN0YXR1czsKIAlpbnQgaSA9IDA7Ci0Jc2FtcGxfdCB0ZW1wZGF0YTsKKwlzaG9ydCB0ZW1wZGF0YTsKIAl1aW50OF90IGdyb3VwOwogCXVpbnQxNl90IGlycWJpdDsKIApAQCAtOTgxLDQ3ICs5ODYsNDggQEAKIAogCWlmIChkZXYtPmF0dGFjaGVkID09IDApCiAJCXJldHVybiBJUlFfTk9ORTsKLQkvLyBsb2NrIHRvIGF2b2lkIHJhY2Ugd2l0aCBjb21lZGlfcG9sbAorCS8qICBsb2NrIHRvIGF2b2lkIHJhY2Ugd2l0aCBjb21lZGlfcG9sbCAqLwogCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCi0JLy9zYXZlIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgc3RhdGUKKwkvKiBzYXZlIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgc3RhdGUgKi8KIAlpcnFzdGF0dXMgPSByZWFkbChkZXZwcml2LT5iYXNlX2FkZHIgKyBQX0lFUik7CiAKLQkvL3JlYWQgaW50ZXJydXB0IHR5cGUKKwkvKiByZWFkIGludGVycnVwdCB0eXBlICovCiAJaXJxdHlwZSA9IHJlYWRsKGRldnByaXYtPmJhc2VfYWRkciArIFBfSVNSKTsKIAotCS8vZGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0CisJLyogZGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0ICovCiAJd3JpdGVsKDAsIGRldnByaXYtPmJhc2VfYWRkciArIFBfSUVSKTsKIAotCS8vY2xlYXIgaW50ZXJydXB0CisJLyogY2xlYXIgaW50ZXJydXB0ICovCiAJd3JpdGVsKGlycXR5cGUsIGRldnByaXYtPmJhc2VfYWRkciArIFBfSVNSKTsKIAotCS8vZG8gc29tZXRoaW5ncworCS8qIGRvIHNvbWV0aGluZ3MgKi8KIAlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IHR5cGUgJWRcbiIsIGlycXR5cGUpOwogCiAJc3dpdGNoIChpcnF0eXBlKSB7Ci0JY2FzZSBJUlFfUlBTMToJCS8vIGVuZF9vZl9zY2FuIG9jY3VycworCWNhc2UgSVJRX1JQUzE6CQkvKiAgZW5kX29mX3NjYW4gb2NjdXJzICovCiAKIAkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IFJQUzEgaXJxIGRldGVjdGVkXG4iKTsKIAotCQkvLyBtYW5hZ2UgYWkgc3ViZGV2aWNlCisJCS8qICBtYW5hZ2UgYWkgc3ViZGV2aWNlICovCiAJCXMgPSBkZXYtPnN1YmRldmljZXM7CiAJCWNtZCA9ICYocy0+YXN5bmMtPmNtZCk7CiAKLQkJLy8gSW5pdCBwdHIgdG8gRE1BIGJ1ZmZlciB0aGF0IGhvbGRzIG5ldyBBREMgZGF0YS4gIFdlIHNraXAgdGhlCi0JCS8vIGZpcnN0IHVpbnQxNl90IGluIHRoZSBidWZmZXIgYmVjYXVzZSBpdCBjb250YWlucyBqdW5rIGRhdGEgZnJvbQotCQkvLyB0aGUgZmluYWwgQURDIG9mIHRoZSBwcmV2aW91cyBwb2xsIGxpc3Qgc2Nhbi4KKwkJLyogSW5pdCBwdHIgdG8gRE1BIGJ1ZmZlciB0aGF0IGhvbGRzIG5ldyBBREMgZGF0YS4gIFdlIHNraXAgdGhlCisJCSAqIGZpcnN0IHVpbnQxNl90IGluIHRoZSBidWZmZXIgYmVjYXVzZSBpdCBjb250YWlucyBqdW5rIGRhdGEgZnJvbQorCQkgKiB0aGUgZmluYWwgQURDIG9mIHRoZSBwcmV2aW91cyBwb2xsIGxpc3Qgc2Nhbi4KKwkJICovCiAJCXJlYWRhZGRyID0gKGludDMyX3QgKikgZGV2cHJpdi0+QU5BQnVmLkxvZ2ljYWxCYXNlICsgMTsKIAotCQkvLyBnZXQgdGhlIGRhdGEgYW5kIGhhbmQgaXQgb3ZlciB0byBjb21lZGkKKwkJLyogIGdldCB0aGUgZGF0YSBhbmQgaGFuZCBpdCBvdmVyIHRvIGNvbWVkaSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgKHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuKTsgaSsrKSB7Ci0JCQkvLyBDb252ZXJ0IEFEQyBkYXRhIHRvIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcyBhbmQgY29weSB0byBhcHBsaWNhdGlvbgotCQkJLy8gYnVmZmVyLgorCQkJLyogIENvbnZlcnQgQURDIGRhdGEgdG8gMTYtYml0IGludGVnZXIgdmFsdWVzIGFuZCBjb3B5IHRvIGFwcGxpY2F0aW9uICovCisJCQkvKiAgYnVmZmVyLiAqLwogCQkJdGVtcGRhdGEgPSBzNjI2X2FpX3JlZ190b191aW50KChpbnQpKnJlYWRhZGRyKTsKIAkJCXJlYWRhZGRyKys7CiAKLQkJCS8vcHV0IGRhdGEgaW50byByZWFkIGJ1ZmZlcgotCQkJLy8gY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHRlbXBkYXRhKTsKKwkJCS8qIHB1dCBkYXRhIGludG8gcmVhZCBidWZmZXIgKi8KKwkJCS8qICBjb21lZGlfYnVmX3B1dChzLT5hc3luYywgdGVtcGRhdGEpOyAqLwogCQkJaWYgKGNmY193cml0ZV90b19idWZmZXIocywgdGVtcGRhdGEpID09IDApCiAJCQkJcHJpbnRrKCJzNjI2X2lycV9oYW5kbGVyOiBjZmNfd3JpdGVfdG9fYnVmZmVyIGVycm9yIVxuIik7CiAKQEAgLTEwMjksNyArMTAzNSw3IEBACiAJCQkJaSwgdGVtcGRhdGEpOwogCQl9CiAKLQkJLy9lbmQgb2Ygc2NhbiBvY2N1cnMKKwkJLyogZW5kIG9mIHNjYW4gb2NjdXJzICovCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKIAogCQlpZiAoIShkZXZwcml2LT5haV9jb250aW5vdXMpKQpAQCAtMTAzNywxMyArMTA0MywxMyBAQAogCQlpZiAoZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50IDw9IDApIHsKIAkJCWRldnByaXYtPmFpX2NtZF9ydW5uaW5nID0gMDsKIAotCQkJLy8gU3RvcCBSUFMgcHJvZ3JhbS4KKwkJCS8qICBTdG9wIFJQUyBwcm9ncmFtLiAqLwogCQkJTUNfRElTQUJMRShQX01DMSwgTUMxX0VSUFMxKTsKIAotCQkJLy9zZW5kIGVuZCBvZiBhY3F1aXNpdGlvbgorCQkJLyogc2VuZCBlbmQgb2YgYWNxdWlzaXRpb24gKi8KIAkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAotCQkJLy9kaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQKKwkJCS8qIGRpc2FibGUgbWFzdGVyIGludGVycnVwdCAqLwogCQkJaXJxc3RhdHVzID0gMDsKIAkJfQogCkBAIC0xMDU0LDQwICsxMDYwLDQwIEBACiAKIAkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBFeHRlcm5hbCB0cmlnZ2VyIGlzIHNldCEhIVxuIik7CiAJCX0KLQkJLy8gdGVsbCBjb21lZGkgdGhhdCBkYXRhIGlzIHRoZXJlCisJCS8qICB0ZWxsIGNvbWVkaSB0aGF0IGRhdGEgaXMgdGhlcmUgKi8KIAkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGV2ZW50cyAlZFxuIiwgcy0+YXN5bmMtPmV2ZW50cyk7CiAJCWNvbWVkaV9ldmVudChkZXYsIHMpOwogCQlicmVhazsKLQljYXNlIElSUV9HUElPMzoJLy9jaGVjayBkaW8gYW5kIGNvbnRlciBpbnRlcnJ1cHQKKwljYXNlIElSUV9HUElPMzoJLyogY2hlY2sgZGlvIGFuZCBjb250ZXIgaW50ZXJydXB0ICovCiAKIAkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IEdQSU8zIGlycSBkZXRlY3RlZFxuIik7CiAKLQkJLy8gbWFuYWdlIGFpIHN1YmRldmljZQorCQkvKiAgbWFuYWdlIGFpIHN1YmRldmljZSAqLwogCQlzID0gZGV2LT5zdWJkZXZpY2VzOwogCQljbWQgPSAmKHMtPmFzeW5jLT5jbWQpOwogCi0JCS8vczYyNl9kaW9fY2xlYXJfaXJxKGRldik7CisJCS8qIHM2MjZfZGlvX2NsZWFyX2lycShkZXYpOyAqLwogCiAJCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IFM2MjZfRElPX0JBTktTOyBncm91cCsrKSB7CiAJCQlpcnFiaXQgPSAwOwotCQkJLy9yZWFkIGludGVycnVwdCB0eXBlCisJCQkvKiByZWFkIGludGVycnVwdCB0eXBlICovCiAJCQlpcnFiaXQgPSBERUJJcmVhZChkZXYsCi0JCQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCQkJKChzdHJ1Y3QgZGlvX3ByaXZhdGUgKikgKGRldi0+c3ViZGV2aWNlcyArIDIgKwogCQkJCQkJZ3JvdXApLT5wcml2YXRlKS0+UkRDYXBGbGcpOwogCi0JCQkvL2NoZWNrIGlmIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgZnJvbSBkaW8gY2hhbm5lbHMKKwkJCS8qIGNoZWNrIGlmIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgZnJvbSBkaW8gY2hhbm5lbHMgKi8KIAkJCWlmIChpcnFiaXQpIHsKIAkJCQlzNjI2X2Rpb19yZXNldF9pcnEoZGV2LCBncm91cCwgaXJxYml0KTsKIAkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogY2hlY2sgaW50ZXJydXB0IG9uIGRpbyBncm91cCAlZCAlZFxuIiwgZ3JvdXAsIGkpOwogCQkJCWlmIChkZXZwcml2LT5haV9jbWRfcnVubmluZykgewotCQkJCQkvL2NoZWNrIGlmIGludGVycnVwdCBpcyBhbiBhaSBhY3F1aXNpdGlvbiBzdGFydCB0cmlnZ2VyCisJCQkJCS8qIGNoZWNrIGlmIGludGVycnVwdCBpcyBhbiBhaSBhY3F1aXNpdGlvbiBzdGFydCB0cmlnZ2VyICovCiAJCQkJCWlmICgoaXJxYml0ID4+IChjbWQtPnN0YXJ0X2FyZyAtCiAJCQkJCQkJCSgxNiAqIGdyb3VwKSkpCiAJCQkJCQk9PSAxCiAJCQkJCQkmJiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgewogCQkJCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IEVkZ2UgY2FwdHVyZSBpbnRlcnJ1cHQgcmVjaWV2ZWQgZnJvbSBjaGFubmVsICVkXG4iLCBjbWQtPnN0YXJ0X2FyZyk7CiAKLQkJCQkJCS8vIFN0YXJ0IGV4ZWN1dGluZyB0aGUgUlBTIHByb2dyYW0uCisJCQkJCQkvKiAgU3RhcnQgZXhlY3V0aW5nIHRoZSBSUFMgcHJvZ3JhbS4gKi8KIAkJCQkJCU1DX0VOQUJMRShQX01DMSwgTUMxX0VSUFMxKTsKIAogCQkJCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGFxdWlzaXRpb24gc3RhcnQgdHJpZ2dlcmVkISEhXG4iKTsKQEAgLTExMTAsNyArMTExNiw3IEBACiAJCQkJCQlUUklHX0VYVCkgewogCQkJCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IEVkZ2UgY2FwdHVyZSBpbnRlcnJ1cHQgcmVjaWV2ZWQgZnJvbSBjaGFubmVsICVkXG4iLCBjbWQtPnNjYW5fYmVnaW5fYXJnKTsKIAotCQkJCQkJLy8gVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLgorCQkJCQkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KIAkJCQkJCU1DX0VOQUJMRShQX01DMiwgTUMyX0FEQ19SUFMpOwogCiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogc2NhbiB0cmlnZ2VyZWQhISEgJWRcbiIsIGRldnByaXYtPmFpX3NhbXBsZV9jb3VudCk7CkBAIC0xMTUxLDcgKzExNTcsNyBAQAogCQkJCQkJVFJJR19FWFQpIHsKIAkJCQkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBFZGdlIGNhcHR1cmUgaW50ZXJydXB0IHJlY2lldmVkIGZyb20gY2hhbm5lbCAlZFxuIiwgY21kLT5jb252ZXJ0X2FyZyk7CiAKLQkJCQkJCS8vIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4KKwkJCQkJCS8qICBUcmlnZ2VyIEFEQyBzY2FuIGxvb3Agc3RhcnQgYnkgc2V0dGluZyBSUFMgU2lnbmFsIDAuICovCiAJCQkJCQlNQ19FTkFCTEUoUF9NQzIsIE1DMl9BRENfUlBTKTsKIAogCQkJCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGFkYyBjb252ZXJ0IHRyaWdnZXJlZCEhIVxuIik7CkBAIC0xMTc1LDEwICsxMTgxLDEwIEBACiAJCQl9CiAJCX0KIAotCQkvL3JlYWQgaW50ZXJydXB0IHR5cGUKKwkJLyogcmVhZCBpbnRlcnJ1cHQgdHlwZSAqLwogCQlpcnFiaXQgPSBERUJJcmVhZChkZXYsIExQX1JETUlTQzIpOwogCi0JCS8vY2hlY2sgaW50ZXJydXB0IG9uIGNvdW50ZXJzCisJCS8qIGNoZWNrIGludGVycnVwdCBvbiBjb3VudGVycyAqLwogCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogY2hlY2sgY291bnRlcnMgaW50ZXJydXB0ICVkXG4iLAogCQkJaXJxYml0KTsKIApAQCAtMTE4NiwzNSArMTE5MiwzNSBAQAogCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGludGVycnVwdCBvbiBjb3VudGVyIDFBIG92ZXJmbG93XG4iKTsKIAkJCWsgPSAmZW5jcHJpdlswXTsKIAotCQkJLy9jbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnCisJCQkvKiBjbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnICovCiAJCQlrLT5SZXNldENhcEZsYWdzKGRldiwgayk7CiAJCX0KIAkJaWYgKGlycWJpdCAmIElSUV9DT0lOVDJBKSB7CiAJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IG9uIGNvdW50ZXIgMkEgb3ZlcmZsb3dcbiIpOwogCQkJayA9ICZlbmNwcml2WzFdOwogCi0JCQkvL2NsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcKKwkJCS8qIGNsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcgKi8KIAkJCWstPlJlc2V0Q2FwRmxhZ3MoZGV2LCBrKTsKIAkJfQogCQlpZiAoaXJxYml0ICYgSVJRX0NPSU5UM0EpIHsKIAkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBpbnRlcnJ1cHQgb24gY291bnRlciAzQSBvdmVyZmxvd1xuIik7CiAJCQlrID0gJmVuY3ByaXZbMl07CiAKLQkJCS8vY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZworCQkJLyogY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZyAqLwogCQkJay0+UmVzZXRDYXBGbGFncyhkZXYsIGspOwogCQl9CiAJCWlmIChpcnFiaXQgJiBJUlFfQ09JTlQxQikgewogCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGludGVycnVwdCBvbiBjb3VudGVyIDFCIG92ZXJmbG93XG4iKTsKIAkJCWsgPSAmZW5jcHJpdlszXTsKIAotCQkJLy9jbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnCisJCQkvKiBjbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnICovCiAJCQlrLT5SZXNldENhcEZsYWdzKGRldiwgayk7CiAJCX0KIAkJaWYgKGlycWJpdCAmIElSUV9DT0lOVDJCKSB7CiAJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IG9uIGNvdW50ZXIgMkIgb3ZlcmZsb3dcbiIpOwogCQkJayA9ICZlbmNwcml2WzRdOwogCi0JCQkvL2NsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcKKwkJCS8qIGNsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcgKi8KIAkJCWstPlJlc2V0Q2FwRmxhZ3MoZGV2LCBrKTsKIAogCQkJaWYgKGRldnByaXYtPmFpX2NvbnZlcnRfY291bnQgPiAwKSB7CkBAIC0xMjI1LDcgKzEyMzEsNyBAQAogCQkJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKIAkJCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGNvbnZlciB0aW1lciB0cmlnZ2VyISEhICVkXG4iLCBkZXZwcml2LT5haV9jb252ZXJ0X2NvdW50KTsKIAotCQkJCQkvLyBUcmlnZ2VyIEFEQyBzY2FuIGxvb3Agc3RhcnQgYnkgc2V0dGluZyBSUFMgU2lnbmFsIDAuCisJCQkJCS8qICBUcmlnZ2VyIEFEQyBzY2FuIGxvb3Agc3RhcnQgYnkgc2V0dGluZyBSUFMgU2lnbmFsIDAuICovCiAJCQkJCU1DX0VOQUJMRShQX01DMiwgTUMyX0FEQ19SUFMpOwogCQkJCX0KIAkJCX0KQEAgLTEyMzQsMTMgKzEyNDAsMTMgQEAKIAkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBpbnRlcnJ1cHQgb24gY291bnRlciAzQiBvdmVyZmxvd1xuIik7CiAJCQlrID0gJmVuY3ByaXZbNV07CiAKLQkJCS8vY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZworCQkJLyogY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZyAqLwogCQkJay0+UmVzZXRDYXBGbGFncyhkZXYsIGspOwogCiAJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CiAJCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IHNjYW4gdGltZXIgdHJpZ2dlciEhIVxuIik7CiAKLQkJCQkvLyBUcmlnZ2VyIEFEQyBzY2FuIGxvb3Agc3RhcnQgYnkgc2V0dGluZyBSUFMgU2lnbmFsIDAuCisJCQkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KIAkJCQlNQ19FTkFCTEUoUF9NQzIsIE1DMl9BRENfUlBTKTsKIAkJCX0KIApAQCAtMTI1Myw3ICsxMjU5LDcgQEAKIAkJfQogCX0KIAotCS8vZW5hYmxlIGludGVycnVwdAorCS8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoaXJxc3RhdHVzLCBkZXZwcml2LT5iYXNlX2FkZHIgKyBQX0lFUik7CiAKIAlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogZXhpdCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLlxuIik7CkBAIC0xMjYyLDIxICsxMjY4LDIxIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHM2MjZfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHM2MjZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldnByaXYpIHsKLQkJLy9zdG9wIGFpX2NvbW1hbmQKKwkJLyogc3RvcCBhaV9jb21tYW5kICovCiAJCWRldnByaXYtPmFpX2NtZF9ydW5uaW5nID0gMDsKIAogCQlpZiAoZGV2cHJpdi0+YmFzZV9hZGRyKSB7Ci0JCQkvL2ludGVycnVwdCBtYXNrCi0JCQlXUjcxNDYoUF9JRVIsIDApOwkvLyBEaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQuCi0JCQlXUjcxNDYoUF9JU1IsIElSUV9HUElPMyB8IElSUV9SUFMxKTsJLy8gQ2xlYXIgYm9hcmQncyBJUlEgc3RhdHVzIGZsYWcuCisJCQkvKiBpbnRlcnJ1cHQgbWFzayAqLworCQkJV1I3MTQ2KFBfSUVSLCAwKTsJLyogIERpc2FibGUgbWFzdGVyIGludGVycnVwdC4gKi8KKwkJCVdSNzE0NihQX0lTUiwgSVJRX0dQSU8zIHwgSVJRX1JQUzEpOwkvKiAgQ2xlYXIgYm9hcmQncyBJUlEgc3RhdHVzIGZsYWcuICovCiAKLQkJCS8vIERpc2FibGUgdGhlIHdhdGNoZG9nIHRpbWVyIGFuZCBiYXR0ZXJ5IGNoYXJnZXIuCisJCQkvKiAgRGlzYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIgYW5kIGJhdHRlcnkgY2hhcmdlci4gKi8KIAkJCVdyaXRlTUlTQzIoZGV2LCAwKTsKIAotCQkJLy8gQ2xvc2UgYWxsIGludGVyZmFjZXMgb24gNzE0NiBkZXZpY2UuCisJCQkvKiAgQ2xvc2UgYWxsIGludGVyZmFjZXMgb24gNzE0NiBkZXZpY2UuICovCiAJCQlXUjcxNDYoUF9NQzEsIE1DMV9TSFVURE9XTik7CiAJCQlXUjcxNDYoUF9BQ09OMSwgQUNPTjFfQkFTRSk7CiAKQEAgLTEyODQsMTggKzEyOTAsMTUgQEAKIAkJCUNsb3NlRE1BQihkZXYsICZkZXZwcml2LT5BTkFCdWYsIERNQUJVRl9TSVpFKTsKIAkJfQogCi0JCWlmIChkZXYtPmlycSkgeworCQlpZiAoZGV2LT5pcnEpCiAJCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0JCX0KIAotCQlpZiAoZGV2cHJpdi0+YmFzZV9hZGRyKSB7CisJCWlmIChkZXZwcml2LT5iYXNlX2FkZHIpCiAJCQlpb3VubWFwKGRldnByaXYtPmJhc2VfYWRkcik7Ci0JCX0KIAogCQlpZiAoZGV2cHJpdi0+cGRldikgewotCQkJaWYgKGRldnByaXYtPmdvdF9yZWdpb25zKSB7CisJCQlpZiAoZGV2cHJpdi0+Z290X3JlZ2lvbnMpCiAJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBkZXYpOwotCQkJfQogCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGRldik7CiAJCX0KIAl9CkBAIC0xMzA4LDIxMyArMTMxMSwyMjUgQEAKIC8qCiAgKiB0aGlzIGZ1bmN0aW9ucyBidWlsZCB0aGUgUlBTIHByb2dyYW0gZm9yIGhhcmR3YXJlIGRyaXZlbiBhY3F1aXN0aW9uCiAgKi8KLXZvaWQgUmVzZXRBREMoY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCAqIHBwbCkKK3ZvaWQgUmVzZXRBREMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDhfdCAqcHBsKQogewogCXJlZ2lzdGVyIHVpbnQzMl90ICpwUlBTOwogCXVpbnQzMl90IEptcEFkcnM7CiAJdWludDE2X3QgaTsKIAl1aW50MTZfdCBuOwogCXVpbnQzMl90IExvY2FsUFBMOwotCWNvbWVkaV9jbWQgKmNtZCA9ICYoZGV2LT5zdWJkZXZpY2VzLT5hc3luYy0+Y21kKTsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJihkZXYtPnN1YmRldmljZXMtPmFzeW5jLT5jbWQpOwogCi0JLy8gU3RvcCBSUFMgcHJvZ3JhbSBpbiBjYXNlIGl0IGlzIGN1cnJlbnRseSBydW5uaW5nLgorCS8qICBTdG9wIFJQUyBwcm9ncmFtIGluIGNhc2UgaXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuICovCiAJTUNfRElTQUJMRShQX01DMSwgTUMxX0VSUFMxKTsKIAotCS8vIFNldCBzdGFydGluZyBsb2dpY2FsIGFkZHJlc3MgdG8gd3JpdGUgUlBTIGNvbW1hbmRzLgorCS8qICBTZXQgc3RhcnRpbmcgbG9naWNhbCBhZGRyZXNzIHRvIHdyaXRlIFJQUyBjb21tYW5kcy4gKi8KIAlwUlBTID0gKHVpbnQzMl90ICopIGRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZTsKIAotCS8vIEluaXRpYWxpemUgUlBTIGluc3RydWN0aW9uIHBvaW50ZXIuCisJLyogIEluaXRpYWxpemUgUlBTIGluc3RydWN0aW9uIHBvaW50ZXIuICovCiAJV1I3MTQ2KFBfUlBTQUREUjEsICh1aW50MzJfdCkgZGV2cHJpdi0+UlBTQnVmLlBoeXNpY2FsQmFzZSk7CiAKLQkvLyBDb25zdHJ1Y3QgUlBTIHByb2dyYW0gaW4gUlBTQnVmIERNQSBidWZmZXIKKwkvKiAgQ29uc3RydWN0IFJQUyBwcm9ncmFtIGluIFJQU0J1ZiBETUEgYnVmZmVyICovCiAKIAlpZiAoY21kICE9IE5VTEwgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgewogCQlERUJVRygiUmVzZXRBREM6IHNjYW5fYmVnaW4gcGF1c2UgaW5zZXJ0ZWRcbiIpOwotCQkvLyBXYWl0IGZvciBTdGFydCB0cmlnZ2VyLgorCQkvKiAgV2FpdCBmb3IgU3RhcnQgdHJpZ2dlci4gKi8KIAkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19TSUdBREM7CiAJCSpwUlBTKysgPSBSUFNfQ0xSU0lHTkFMIHwgUlBTX1NJR0FEQzsKIAl9Ci0JLy8gU0FBNzE0NiBCVUcgV09SS0FST1VORCBEbyBhIGR1bW15IERFQkkgV3JpdGUuICBUaGlzIGlzIG5lY2Vzc2FyeQotCS8vIGJlY2F1c2UgdGhlIGZpcnN0IFJQUyBERUJJIFdyaXRlIGZvbGxvd2luZyBhIG5vbi1SUFMgREVCSSB3cml0ZQotCS8vIHNlZW1zIHRvIGFsd2F5cyBmYWlsLiAgSWYgd2UgZG9uJ3QgZG8gdGhpcyBkdW1teSB3cml0ZSwgdGhlIEFEQwotCS8vIGdhaW4gbWlnaHQgbm90IGJlIHNldCB0byB0aGUgdmFsdWUgcmVxdWlyZWQgZm9yIHRoZSBmaXJzdCBzbG90IGluCi0JLy8gdGhlIHBvbGwgbGlzdDsgdGhlIEFEQyBnYWluIHdvdWxkIGluc3RlYWQgcmVtYWluIHVuY2hhbmdlZCBmcm9tCi0JLy8gdGhlIHByZXZpb3VzbHkgcHJvZ3JhbW1lZCB2YWx1ZS4KLQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUNNRCA+PiAyKTsJLy8gV3JpdGUgREVCSSBXcml0ZSBjb21tYW5kCi0JLy8gYW5kIGFkZHJlc3MgdG8gc2hhZG93IFJBTS4KLQkqcFJQUysrID0gREVCSV9DTURfV1JXT1JEIHwgTFBfR1NFTDsKLQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUFEID4+IDIpOwkvLyBXcml0ZSBERUJJIGltbWVkaWF0ZSBkYXRhCi0JLy8gdG8gc2hhZG93IFJBTToKLQkqcFJQUysrID0gR1NFTF9CSVBPTEFSNVY7CS8vIGFyYml0cmFyeSBpbW1lZGlhdGUgZGF0YQotCS8vIHZhbHVlLgotCSpwUlBTKysgPSBSUFNfQ0xSU0lHTkFMIHwgUlBTX0RFQkk7CS8vIFJlc2V0ICJzaGFkb3cgUkFNCi0JLy8gdXBsb2FkZWQiIGZsYWcuCi0JKnBSUFMrKyA9IFJQU19VUExPQUQgfCBSUFNfREVCSTsJLy8gSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLgotCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfREVCSTsJLy8gV2FpdCBmb3Igc2hhZG93IHVwbG9hZCB0byBmaW5pc2guCiAKLQkvLyBEaWdpdGl6ZSBhbGwgc2xvdHMgaW4gdGhlIHBvbGwgbGlzdC4gVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhCi0JLy8gZm9yIGxvb3AgdG8gbGltaXQgdGhlIHNsb3QgY291bnQgdG8gMTYgaW4gY2FzZSB0aGUgYXBwbGljYXRpb24KLQkvLyBmb3Jnb3QgdG8gc2V0IHRoZSBFT1BMIGZsYWcgaW4gdGhlIGZpbmFsIHNsb3QuCisJLyogU0FBNzE0NiBCVUcgV09SS0FST1VORCBEbyBhIGR1bW15IERFQkkgV3JpdGUuICBUaGlzIGlzIG5lY2Vzc2FyeQorCSAqIGJlY2F1c2UgdGhlIGZpcnN0IFJQUyBERUJJIFdyaXRlIGZvbGxvd2luZyBhIG5vbi1SUFMgREVCSSB3cml0ZQorCSAqIHNlZW1zIHRvIGFsd2F5cyBmYWlsLiAgSWYgd2UgZG9uJ3QgZG8gdGhpcyBkdW1teSB3cml0ZSwgdGhlIEFEQworCSAqIGdhaW4gbWlnaHQgbm90IGJlIHNldCB0byB0aGUgdmFsdWUgcmVxdWlyZWQgZm9yIHRoZSBmaXJzdCBzbG90IGluCisJICogdGhlIHBvbGwgbGlzdDsgdGhlIEFEQyBnYWluIHdvdWxkIGluc3RlYWQgcmVtYWluIHVuY2hhbmdlZCBmcm9tCisJICogdGhlIHByZXZpb3VzbHkgcHJvZ3JhbW1lZCB2YWx1ZS4KKwkgKi8KKwkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUNNRCA+PiAyKTsKKwkvKiBXcml0ZSBERUJJIFdyaXRlIGNvbW1hbmQgYW5kIGFkZHJlc3MgdG8gc2hhZG93IFJBTS4gKi8KKworCSpwUlBTKysgPSBERUJJX0NNRF9XUldPUkQgfCBMUF9HU0VMOworCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQUQgPj4gMik7CisJLyogIFdyaXRlIERFQkkgaW1tZWRpYXRlIGRhdGEgIHRvIHNoYWRvdyBSQU06ICovCisKKwkqcFJQUysrID0gR1NFTF9CSVBPTEFSNVY7CisJLyogIGFyYml0cmFyeSBpbW1lZGlhdGUgZGF0YSAgdmFsdWUuICovCisKKwkqcFJQUysrID0gUlBTX0NMUlNJR05BTCB8IFJQU19ERUJJOworCS8qICBSZXNldCAic2hhZG93IFJBTSAgdXBsb2FkZWQiIGZsYWcuICovCisJKnBSUFMrKyA9IFJQU19VUExPQUQgfCBSUFNfREVCSTsJLyogIEludm9rZSBzaGFkb3cgUkFNIHVwbG9hZC4gKi8KKwkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX0RFQkk7CS8qICBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvIGZpbmlzaC4gKi8KKworCS8qIERpZ2l0aXplIGFsbCBzbG90cyBpbiB0aGUgcG9sbCBsaXN0LiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEKKwkgKiBmb3IgbG9vcCB0byBsaW1pdCB0aGUgc2xvdCBjb3VudCB0byAxNiBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbgorCSAqIGZvcmdvdCB0byBzZXQgdGhlIEVPUEwgZmxhZyBpbiB0aGUgZmluYWwgc2xvdC4KKwkgKi8KIAlmb3IgKGRldnByaXYtPkFkY0l0ZW1zID0gMDsgZGV2cHJpdi0+QWRjSXRlbXMgPCAxNjsgZGV2cHJpdi0+QWRjSXRlbXMrKykgewotCQkvLyBDb252ZXJ0IGFwcGxpY2F0aW9uJ3MgcG9sbCBsaXN0IGl0ZW0gdG8gcHJpdmF0ZSBib2FyZCBjbGFzcwotCQkvLyBmb3JtYXQuICBFYWNoIGFwcCBwb2xsIGxpc3QgaXRlbSBpcyBhbiB1aW50OF90IHdpdGggZm9ybQotCQkvLyAoRU9QTCx4LHgsUkFOR0UsQ0hBTjwzOjA+KSwgd2hlcmUgUkFOR0UgY29kZSBpbmRpY2F0ZXMgMCA9Ci0JCS8vICstMTBWLCAxID0gKy01ViwgYW5kIEVPUEwgPSBFbmQgb2YgUG9sbCBMaXN0IG1hcmtlci4KKwkgLyogQ29udmVydCBhcHBsaWNhdGlvbidzIHBvbGwgbGlzdCBpdGVtIHRvIHByaXZhdGUgYm9hcmQgY2xhc3MKKwkgICogZm9ybWF0LiAgRWFjaCBhcHAgcG9sbCBsaXN0IGl0ZW0gaXMgYW4gdWludDhfdCB3aXRoIGZvcm0KKwkgICogKEVPUEwseCx4LFJBTkdFLENIQU48MzowPiksIHdoZXJlIFJBTkdFIGNvZGUgaW5kaWNhdGVzIDAgPQorCSAgKiArLTEwViwgMSA9ICstNVYsIGFuZCBFT1BMID0gRW5kIG9mIFBvbGwgTGlzdCBtYXJrZXIuCisJICAqLwogCQlMb2NhbFBQTCA9CiAJCQkoKnBwbCA8PCA4KSB8ICgqcHBsICYgMHgxMCA/IEdTRUxfQklQT0xBUjVWIDoKIAkJCUdTRUxfQklQT0xBUjEwVik7CiAKLQkJLy8gU3dpdGNoIEFEQyBhbmFsb2cgZ2Fpbi4KLQkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklDTUQgPj4gMik7CS8vIFdyaXRlIERFQkkgY29tbWFuZAotCQkvLyBhbmQgYWRkcmVzcyB0bwotCQkvLyBzaGFkb3cgUkFNLgorCQkvKiAgU3dpdGNoIEFEQyBhbmFsb2cgZ2Fpbi4gKi8KKwkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklDTUQgPj4gMik7CS8qICBXcml0ZSBERUJJIGNvbW1hbmQgKi8KKwkJLyogIGFuZCBhZGRyZXNzIHRvICovCisJCS8qICBzaGFkb3cgUkFNLiAqLwogCQkqcFJQUysrID0gREVCSV9DTURfV1JXT1JEIHwgTFBfR1NFTDsKLQkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklBRCA+PiAyKTsJLy8gV3JpdGUgREVCSQotCQkvLyBpbW1lZGlhdGUgZGF0YSB0bwotCQkvLyBzaGFkb3cgUkFNLgorCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUFEID4+IDIpOwkvKiAgV3JpdGUgREVCSSAqLworCQkvKiAgaW1tZWRpYXRlIGRhdGEgdG8gKi8KKwkJLyogIHNoYWRvdyBSQU0uICovCiAJCSpwUlBTKysgPSBMb2NhbFBQTDsKLQkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfREVCSTsJLy8gUmVzZXQgInNoYWRvdyBSQU0gdXBsb2FkZWQiCi0JCS8vIGZsYWcuCi0JCSpwUlBTKysgPSBSUFNfVVBMT0FEIHwgUlBTX0RFQkk7CS8vIEludm9rZSBzaGFkb3cgUkFNIHVwbG9hZC4KLQkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19ERUJJOwkvLyBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvCi0JCS8vIGZpbmlzaC4KKwkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfREVCSTsJLyogIFJlc2V0ICJzaGFkb3cgUkFNIHVwbG9hZGVkIiAqLworCQkvKiAgZmxhZy4gKi8KKwkJKnBSUFMrKyA9IFJQU19VUExPQUQgfCBSUFNfREVCSTsJLyogIEludm9rZSBzaGFkb3cgUkFNIHVwbG9hZC4gKi8KKwkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19ERUJJOwkvKiAgV2FpdCBmb3Igc2hhZG93IHVwbG9hZCB0byAqLworCQkvKiAgZmluaXNoLiAqLwogCi0JCS8vIFNlbGVjdCBBREMgYW5hbG9nIGlucHV0IGNoYW5uZWwuCi0JCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQ01EID4+IDIpOwkvLyBXcml0ZSBERUJJIGNvbW1hbmQKLQkJLy8gYW5kIGFkZHJlc3MgdG8KLQkJLy8gc2hhZG93IFJBTS4KKwkJLyogIFNlbGVjdCBBREMgYW5hbG9nIGlucHV0IGNoYW5uZWwuICovCisJCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQ01EID4+IDIpOworCQkvKiAgV3JpdGUgREVCSSBjb21tYW5kIGFuZCBhZGRyZXNzIHRvICBzaGFkb3cgUkFNLiAqLwogCQkqcFJQUysrID0gREVCSV9DTURfV1JXT1JEIHwgTFBfSVNFTDsKLQkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklBRCA+PiAyKTsJLy8gV3JpdGUgREVCSQotCQkvLyBpbW1lZGlhdGUgZGF0YSB0bwotCQkvLyBzaGFkb3cgUkFNLgorCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUFEID4+IDIpOworCQkvKiAgV3JpdGUgREVCSSBpbW1lZGlhdGUgZGF0YSB0byBzaGFkb3cgUkFNLiAqLwogCQkqcFJQUysrID0gTG9jYWxQUEw7Ci0JCSpwUlBTKysgPSBSUFNfQ0xSU0lHTkFMIHwgUlBTX0RFQkk7CS8vIFJlc2V0ICJzaGFkb3cgUkFNIHVwbG9hZGVkIgotCQkvLyBmbGFnLgotCQkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOwkvLyBJbnZva2Ugc2hhZG93IFJBTSB1cGxvYWQuCi0JCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfREVCSTsJLy8gV2FpdCBmb3Igc2hhZG93IHVwbG9hZCB0bwotCQkvLyBmaW5pc2guCisJCSpwUlBTKysgPSBSUFNfQ0xSU0lHTkFMIHwgUlBTX0RFQkk7CisJCS8qICBSZXNldCAic2hhZG93IFJBTSB1cGxvYWRlZCIgIGZsYWcuICovCiAKLQkJLy8gRGVsYXkgYXQgbGVhc3QgMTAgbWljcm9zZWNvbmRzIGZvciBhbmFsb2cgaW5wdXQgc2V0dGxpbmcuCi0JCS8vIEluc3RlYWQgb2YgcGFkZGluZyB3aXRoIE5PUHMsIHdlIHVzZSBSUFNfSlVNUCBpbnN0cnVjdGlvbnMKLQkJLy8gaGVyZTsgdGhpcyBhbGxvd3MgdXMgdG8gcHJvZHVjZSBhIGxvbmdlciBkZWxheSB0aGFuIGlzCi0JCS8vIHBvc3NpYmxlIHdpdGggTk9QcyBiZWNhdXNlIGVhY2ggUlBTX0pVTVAgZmx1c2hlcyB0aGUgUlBTJwotCQkvLyBpbnN0cnVjdGlvbiBwcmVmZXRjaCBwaXBlbGluZS4KKwkJKnBSUFMrKyA9IFJQU19VUExPQUQgfCBSUFNfREVCSTsKKwkJLyogIEludm9rZSBzaGFkb3cgUkFNIHVwbG9hZC4gKi8KKworCQkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX0RFQkk7CisJCS8qICBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvIGZpbmlzaC4gKi8KKworCQkvKiBEZWxheSBhdCBsZWFzdCAxMCBtaWNyb3NlY29uZHMgZm9yIGFuYWxvZyBpbnB1dCBzZXR0bGluZy4KKwkJICogSW5zdGVhZCBvZiBwYWRkaW5nIHdpdGggTk9Qcywgd2UgdXNlIFJQU19KVU1QIGluc3RydWN0aW9ucworCQkgKiBoZXJlOyB0aGlzIGFsbG93cyB1cyB0byBwcm9kdWNlIGEgbG9uZ2VyIGRlbGF5IHRoYW4gaXMKKwkJICogcG9zc2libGUgd2l0aCBOT1BzIGJlY2F1c2UgZWFjaCBSUFNfSlVNUCBmbHVzaGVzIHRoZSBSUFMnCisJCSAqIGluc3RydWN0aW9uIHByZWZldGNoIHBpcGVsaW5lLgorCQkgKi8KIAkJSm1wQWRycyA9CiAJCQkodWludDMyX3QpIGRldnByaXYtPlJQU0J1Zi5QaHlzaWNhbEJhc2UgKwogCQkJKHVpbnQzMl90KSAoKHVuc2lnbmVkIGxvbmcpcFJQUyAtCiAJCQkodW5zaWduZWQgbG9uZylkZXZwcml2LT5SUFNCdWYuTG9naWNhbEJhc2UpOwogCQlmb3IgKGkgPSAwOyBpIDwgKDEwICogUlBTQ0xLX1BFUl9VUyAvIDIpOyBpKyspIHsKLQkJCUptcEFkcnMgKz0gODsJLy8gUmVwZWF0IHRvIGltcGxlbWVudCB0aW1lIGRlbGF5OgotCQkJKnBSUFMrKyA9IFJQU19KVU1QOwkvLyBKdW1wIHRvIG5leHQgUlBTIGluc3RydWN0aW9uLgorCQkJSm1wQWRycyArPSA4OwkvKiAgUmVwZWF0IHRvIGltcGxlbWVudCB0aW1lIGRlbGF5OiAqLworCQkJKnBSUFMrKyA9IFJQU19KVU1QOwkvKiAgSnVtcCB0byBuZXh0IFJQUyBpbnN0cnVjdGlvbi4gKi8KIAkJCSpwUlBTKysgPSBKbXBBZHJzOwogCQl9CiAKIAkJaWYgKGNtZCAhPSBOVUxMICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpIHsKIAkJCURFQlVHKCJSZXNldEFEQzogY29udmVydCBwYXVzZSBpbnNlcnRlZFxuIik7Ci0JCQkvLyBXYWl0IGZvciBTdGFydCB0cmlnZ2VyLgorCQkJLyogIFdhaXQgZm9yIFN0YXJ0IHRyaWdnZXIuICovCiAJCQkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX1NJR0FEQzsKIAkJCSpwUlBTKysgPSBSUFNfQ0xSU0lHTkFMIHwgUlBTX1NJR0FEQzsKIAkJfQotCQkvLyBTdGFydCBBREMgYnkgcHVsc2luZyBHUElPMS4KLQkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0dQSU8gPj4gMik7CS8vIEJlZ2luIEFEQyBTdGFydCBwdWxzZS4KKwkJLyogIFN0YXJ0IEFEQyBieSBwdWxzaW5nIEdQSU8xLiAqLworCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLyogIEJlZ2luIEFEQyBTdGFydCBwdWxzZS4gKi8KIAkJKnBSUFMrKyA9IEdQSU9fQkFTRSB8IEdQSU8xX0xPOwogCQkqcFJQUysrID0gUlBTX05PUDsKLQkJLy8gVkVSU0lPTiAyLjAzIENIQU5HRTogU1RSRVRDSCBPVVQgQURDIFNUQVJUIFBVTFNFLgotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLy8gRW5kIEFEQyBTdGFydCBwdWxzZS4KKwkJLyogIFZFUlNJT04gMi4wMyBDSEFOR0U6IFNUUkVUQ0ggT1VUIEFEQyBTVEFSVCBQVUxTRS4gKi8KKwkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0dQSU8gPj4gMik7CS8qICBFbmQgQURDIFN0YXJ0IHB1bHNlLiAqLwogCQkqcFJQUysrID0gR1BJT19CQVNFIHwgR1BJTzFfSEk7CiAKLQkJLy8gV2FpdCBmb3IgQURDIHRvIGNvbXBsZXRlIChHUElPMiBpcyBhc3NlcnRlZCBoaWdoIHdoZW4gQURDIG5vdAotCQkvLyBidXN5KSBhbmQgZm9yIGRhdGEgZnJvbSBwcmV2aW91cyBjb252ZXJzaW9uIHRvIHNoaWZ0IGludG8gRkIKLQkJLy8gQlVGRkVSIDEgcmVnaXN0ZXIuCi0JCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfR1BJTzI7CS8vIFdhaXQgZm9yIEFEQyBkb25lLgorCQkvKiBXYWl0IGZvciBBREMgdG8gY29tcGxldGUgKEdQSU8yIGlzIGFzc2VydGVkIGhpZ2ggd2hlbiBBREMgbm90CisJCSAqIGJ1c3kpIGFuZCBmb3IgZGF0YSBmcm9tIHByZXZpb3VzIGNvbnZlcnNpb24gdG8gc2hpZnQgaW50byBGQgorCQkgKiBCVUZGRVIgMSByZWdpc3Rlci4KKwkJICovCisJCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfR1BJTzI7CS8qICBXYWl0IGZvciBBREMgZG9uZS4gKi8KIAotCQkvLyBUcmFuc2ZlciBBREMgZGF0YSBmcm9tIEZCIEJVRkZFUiAxIHJlZ2lzdGVyIHRvIERNQSBidWZmZXIuCisJCS8qICBUcmFuc2ZlciBBREMgZGF0YSBmcm9tIEZCIEJVRkZFUiAxIHJlZ2lzdGVyIHRvIERNQSBidWZmZXIuICovCiAJCSpwUlBTKysgPSBSUFNfU1RSRUcgfCAoQlVHRklYX1NUUkVHKFBfRkJfQlVGRkVSMSkgPj4gMik7CiAJCSpwUlBTKysgPQogCQkJKHVpbnQzMl90KSBkZXZwcml2LT5BTkFCdWYuUGh5c2ljYWxCYXNlICsKIAkJCShkZXZwcml2LT5BZGNJdGVtcyA8PCAyKTsKIAotCQkvLyBJZiB0aGlzIHNsb3QncyBFbmRPZlBvbGxMaXN0IGZsYWcgaXMgc2V0LCBhbGwgY2hhbm5lbHMgaGF2ZQotCQkvLyBub3cgYmVlbiBwcm9jZXNzZWQuCisJCS8qICBJZiB0aGlzIHNsb3QncyBFbmRPZlBvbGxMaXN0IGZsYWcgaXMgc2V0LCBhbGwgY2hhbm5lbHMgaGF2ZSAqLworCQkvKiAgbm93IGJlZW4gcHJvY2Vzc2VkLiAqLwogCQlpZiAoKnBwbCsrICYgRU9QTCkgewotCQkJZGV2cHJpdi0+QWRjSXRlbXMrKzsJLy8gQWRqdXN0IHBvbGwgbGlzdCBpdGVtIGNvdW50LgotCQkJYnJlYWs7CS8vIEV4aXQgcG9sbCBsaXN0IHByb2Nlc3NpbmcgbG9vcC4KKwkJCWRldnByaXYtPkFkY0l0ZW1zKys7CS8qICBBZGp1c3QgcG9sbCBsaXN0IGl0ZW0gY291bnQuICovCisJCQlicmVhazsJLyogIEV4aXQgcG9sbCBsaXN0IHByb2Nlc3NpbmcgbG9vcC4gKi8KIAkJfQogCX0KIAlERUJVRygiUmVzZXRBREM6IEFEQyBpdGVtcyAlZCBcbiIsIGRldnByaXYtPkFkY0l0ZW1zKTsKIAotCS8vIFZFUlNJT04gMi4wMSBDSEFOR0U6IERFTEFZIENIQU5HRUQgRlJPTSAyNTBOUyB0byAyVVMuICBBbGxvdyB0aGUKLQkvLyBBREMgdG8gc3RhYmlsaXplIGZvciAyIG1pY3Jvc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgdGhlIGZpbmFsCi0JLy8gKGR1bW15KSBjb252ZXJzaW9uLiAgVGhpcyBkZWxheSBpcyBuZWNlc3NhcnkgdG8gYWxsb3cgc3VmZmljaWVudAotCS8vIHRpbWUgYmV0d2VlbiBsYXN0IGNvbnZlcnNpb24gZmluaXNoZWQgYW5kIHRoZSBzdGFydCBvZiB0aGUgZHVtbXkKLQkvLyBjb252ZXJzaW9uLiAgV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgbGFzdCBjb252ZXJzaW9uJ3MgZGF0YSB2YWx1ZQotCS8vIGlzIHNvbWV0aW1lcyBzZXQgdG8gdGhlIHByZXZpb3VzIGNvbnZlcnNpb24ncyBkYXRhIHZhbHVlLgorCS8qIFZFUlNJT04gMi4wMSBDSEFOR0U6IERFTEFZIENIQU5HRUQgRlJPTSAyNTBOUyB0byAyVVMuICBBbGxvdyB0aGUKKwkgKiBBREMgdG8gc3RhYmlsaXplIGZvciAyIG1pY3Jvc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgdGhlIGZpbmFsCisJICogKGR1bW15KSBjb252ZXJzaW9uLiAgVGhpcyBkZWxheSBpcyBuZWNlc3NhcnkgdG8gYWxsb3cgc3VmZmljaWVudAorCSAqIHRpbWUgYmV0d2VlbiBsYXN0IGNvbnZlcnNpb24gZmluaXNoZWQgYW5kIHRoZSBzdGFydCBvZiB0aGUgZHVtbXkKKwkgKiBjb252ZXJzaW9uLiAgV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgbGFzdCBjb252ZXJzaW9uJ3MgZGF0YSB2YWx1ZQorCSAqIGlzIHNvbWV0aW1lcyBzZXQgdG8gdGhlIHByZXZpb3VzIGNvbnZlcnNpb24ncyBkYXRhIHZhbHVlLgorCSAqLwogCWZvciAobiA9IDA7IG4gPCAoMiAqIFJQU0NMS19QRVJfVVMpOyBuKyspCiAJCSpwUlBTKysgPSBSUFNfTk9QOwogCi0JLy8gU3RhcnQgYSBkdW1teSBjb252ZXJzaW9uIHRvIGNhdXNlIHRoZSBkYXRhIGZyb20gdGhlIGxhc3QKLQkvLyBjb252ZXJzaW9uIG9mIGludGVyZXN0IHRvIGJlIHNoaWZ0ZWQgaW4uCi0JKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0dQSU8gPj4gMik7CS8vIEJlZ2luIEFEQyBTdGFydCBwdWxzZS4KKwkvKiBTdGFydCBhIGR1bW15IGNvbnZlcnNpb24gdG8gY2F1c2UgdGhlIGRhdGEgZnJvbSB0aGUgbGFzdAorCSAqIGNvbnZlcnNpb24gb2YgaW50ZXJlc3QgdG8gYmUgc2hpZnRlZCBpbi4KKwkgKi8KKwkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLyogIEJlZ2luIEFEQyBTdGFydCBwdWxzZS4gKi8KIAkqcFJQUysrID0gR1BJT19CQVNFIHwgR1BJTzFfTE87CiAJKnBSUFMrKyA9IFJQU19OT1A7Ci0JLy8gVkVSU0lPTiAyLjAzIENIQU5HRTogU1RSRVRDSCBPVVQgQURDIFNUQVJUIFBVTFNFLgotCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvLyBFbmQgQURDIFN0YXJ0IHB1bHNlLgorCS8qIFZFUlNJT04gMi4wMyBDSEFOR0U6IFNUUkVUQ0ggT1VUIEFEQyBTVEFSVCBQVUxTRS4gKi8KKwkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLyogIEVuZCBBREMgU3RhcnQgcHVsc2UuICovCiAJKnBSUFMrKyA9IEdQSU9fQkFTRSB8IEdQSU8xX0hJOwogCi0JLy8gV2FpdCBmb3IgdGhlIGRhdGEgZnJvbSB0aGUgbGFzdCBjb252ZXJzaW9uIG9mIGludGVyZXN0IHRvIGFycml2ZQotCS8vIGluIEZCIEJVRkZFUiAxIHJlZ2lzdGVyLgotCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfR1BJTzI7CS8vIFdhaXQgZm9yIEFEQyBkb25lLgorCS8qIFdhaXQgZm9yIHRoZSBkYXRhIGZyb20gdGhlIGxhc3QgY29udmVyc2lvbiBvZiBpbnRlcmVzdCB0byBhcnJpdmUKKwkgKiBpbiBGQiBCVUZGRVIgMSByZWdpc3Rlci4KKwkgKi8KKwkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX0dQSU8yOwkvKiAgV2FpdCBmb3IgQURDIGRvbmUuICovCiAKLQkvLyBUcmFuc2ZlciBmaW5hbCBBREMgZGF0YSBmcm9tIEZCIEJVRkZFUiAxIHJlZ2lzdGVyIHRvIERNQSBidWZmZXIuCi0JKnBSUFMrKyA9IFJQU19TVFJFRyB8IChCVUdGSVhfU1RSRUcoUF9GQl9CVUZGRVIxKSA+PiAyKTsJLy8KKwkvKiAgVHJhbnNmZXIgZmluYWwgQURDIGRhdGEgZnJvbSBGQiBCVUZGRVIgMSByZWdpc3RlciB0byBETUEgYnVmZmVyLiAqLworCSpwUlBTKysgPSBSUFNfU1RSRUcgfCAoQlVHRklYX1NUUkVHKFBfRkJfQlVGRkVSMSkgPj4gMik7CS8qICAqLwogCSpwUlBTKysgPQogCQkodWludDMyX3QpIGRldnByaXYtPkFOQUJ1Zi5QaHlzaWNhbEJhc2UgKwogCQkoZGV2cHJpdi0+QWRjSXRlbXMgPDwgMik7CiAKLQkvLyBJbmRpY2F0ZSBBREMgc2NhbiBsb29wIGlzIGZpbmlzaGVkLgotCS8vICpwUlBTKys9IFJQU19DTFJTSUdOQUwgfCBSUFNfU0lHQURDIDsgIC8vIFNpZ25hbCBSZWFkQURDKCkgdGhhdCBzY2FuIGlzIGRvbmUuCisJLyogIEluZGljYXRlIEFEQyBzY2FuIGxvb3AgaXMgZmluaXNoZWQuICovCisJLyogICpwUlBTKys9IFJQU19DTFJTSUdOQUwgfCBSUFNfU0lHQURDIDsgIC8vIFNpZ25hbCBSZWFkQURDKCkgdGhhdCBzY2FuIGlzIGRvbmUuICovCiAKLQkvL2ludm9rZSBpbnRlcnJ1cHQKKwkvKiBpbnZva2UgaW50ZXJydXB0ICovCiAJaWYgKGRldnByaXYtPmFpX2NtZF9ydW5uaW5nID09IDEpIHsKIAkJREVCVUcoIlJlc2V0QURDOiBpbnNlcnQgaXJxIGluIEFEQyBSUFMgdGFza1xuIik7CiAJCSpwUlBTKysgPSBSUFNfSVJROwogCX0KLQkvLyBSZXN0YXJ0IFJQUyBwcm9ncmFtIGF0IGl0cyBiZWdpbm5pbmcuCi0JKnBSUFMrKyA9IFJQU19KVU1QOwkvLyBCcmFuY2ggdG8gc3RhcnQgb2YgUlBTIHByb2dyYW0uCisJLyogIFJlc3RhcnQgUlBTIHByb2dyYW0gYXQgaXRzIGJlZ2lubmluZy4gKi8KKwkqcFJQUysrID0gUlBTX0pVTVA7CS8qICBCcmFuY2ggdG8gc3RhcnQgb2YgUlBTIHByb2dyYW0uICovCiAJKnBSUFMrKyA9ICh1aW50MzJfdCkgZGV2cHJpdi0+UlBTQnVmLlBoeXNpY2FsQmFzZTsKIAotCS8vIEVuZCBvZiBSUFMgcHJvZ3JhbSBidWlsZAotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qICBFbmQgb2YgUlBTIHByb2dyYW0gYnVpbGQgKi8KIH0KIAogLyogVE8gQ09NUExFVEUsIElGIE5FQ0VTU0FSWSAqLwotc3RhdGljIGludCBzNjI2X2FpX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2FpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLS8qIHN0YXRpYyBpbnQgczYyNl9haV9yaW5zbihjb21lZGlfZGV2aWNlICpkZXYsY29tZWRpX3N1YmRldmljZSAqcyxjb21lZGlfaW5zbiAqaW5zbixsc2FtcGxfdCAqZGF0YSkgKi8KKy8qIHN0YXRpYyBpbnQgczYyNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICovCiAvKiB7ICovCiAvKiAgIHJlZ2lzdGVyIHVpbnQ4X3QJaTsgKi8KIC8qICAgcmVnaXN0ZXIgaW50MzJfdAkqcmVhZGFkZHI7ICovCiAKIC8qICAgREVCVUcoImFzNjI2X2FpX3JpbnNuOiBhaV9yaW5zbiBlbnRlciBcbiIpOyAgKi8KIAotLyogICAvLyBUcmlnZ2VyIEFEQyBzY2FuIGxvb3Agc3RhcnQgYnkgc2V0dGluZyBSUFMgU2lnbmFsIDAuICovCisvKiAgIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KIC8qICAgTUNfRU5BQkxFKCBQX01DMiwgTUMyX0FEQ19SUFMgKTsgKi8KIAotLyogICAvLyBXYWl0IHVudGlsIEFEQyBzY2FuIGxvb3AgaXMgZmluaXNoZWQgKFJQUyBTaWduYWwgMCByZXNldCkuICovCisvKiAgIFdhaXQgdW50aWwgQURDIHNjYW4gbG9vcCBpcyBmaW5pc2hlZCAoUlBTIFNpZ25hbCAwIHJlc2V0KS4gKi8KIC8qICAgd2hpbGUgKCBNQ19URVNUKCBQX01DMiwgTUMyX0FEQ19SUFMgKSApOyAqLwogCi0vKiAgIC8vIEluaXQgcHRyIHRvIERNQSBidWZmZXIgdGhhdCBob2xkcyBuZXcgQURDIGRhdGEuICBXZSBza2lwIHRoZSAqLwotLyogICAvLyBmaXJzdCB1aW50MTZfdCBpbiB0aGUgYnVmZmVyIGJlY2F1c2UgaXQgY29udGFpbnMganVuayBkYXRhIGZyb20gKi8KLS8qICAgLy8gdGhlIGZpbmFsIEFEQyBvZiB0aGUgcHJldmlvdXMgcG9sbCBsaXN0IHNjYW4uICovCisvKiBJbml0IHB0ciB0byBETUEgYnVmZmVyIHRoYXQgaG9sZHMgbmV3IEFEQyBkYXRhLiAgV2Ugc2tpcCB0aGUKKyAqIGZpcnN0IHVpbnQxNl90IGluIHRoZSBidWZmZXIgYmVjYXVzZSBpdCBjb250YWlucyBqdW5rIGRhdGEgZnJvbQorICogdGhlIGZpbmFsIEFEQyBvZiB0aGUgcHJldmlvdXMgcG9sbCBsaXN0IHNjYW4uCisgKi8KIC8qICAgcmVhZGFkZHIgPSAodWludDMyX3QgKilkZXZwcml2LT5BTkFCdWYuTG9naWNhbEJhc2UgKyAxOyAqLwogCi0vKiAgIC8vIENvbnZlcnQgQURDIGRhdGEgdG8gMTYtYml0IGludGVnZXIgdmFsdWVzIGFuZCBjb3B5IHRvIGFwcGxpY2F0aW9uICovCi0vKiAgIC8vIGJ1ZmZlci4JICovCisvKiAgQ29udmVydCBBREMgZGF0YSB0byAxNi1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIGNvcHkgdG8gYXBwbGljYXRpb24gYnVmZmVyLiAqLwogLyogICBmb3IgKCBpID0gMDsgaSA8IGRldnByaXYtPkFkY0l0ZW1zOyBpKysgKSB7ICovCiAvKiAgICAgKmRhdGEgPSBzNjI2X2FpX3JlZ190b191aW50KCAqcmVhZGFkZHIrKyApOyAqLwogLyogICAgIERFQlVHKCJzNjI2X2FpX3JpbnNuOiBkYXRhICVkIFxuIiwqZGF0YSk7ICovCkBAIC0xNTI1LDggKzE1NDAsOCBAQAogLyogICByZXR1cm4gaTsgKi8KIC8qIH0gKi8KIAotc3RhdGljIGludCBzNjI2X2FpX2luc25fcmVhZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczYyNl9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJdWludDE2X3QgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCXVpbnQxNl90IHJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMTUzNCw4NiArMTU0OSw4NyBAQAogCXVpbnQzMl90IEdwaW9JbWFnZTsKIAlpbnQgbjsKIAotLyogICAvL2ludGVycnVwdCBjYWxsIHRlc3QgICovCi0vKiAgIHdyaXRlbChJUlFfR1BJTzMsZGV2cHJpdi0+YmFzZV9hZGRyK1BfUFNSKTsgLy9Xcml0aW5nIGEgbG9naWNhbCAxICovCi0vKiAJCQkJCSAgICAgLy9pbnRvIGFueSBvZiB0aGUgUlBTX1BTUiAqLwotLyogCQkJCQkgICAgIC8vYml0cyBjYXVzZXMgdGhlICovCi0vKiAJCQkJCSAgICAgLy9jb3JyZXNwb25kaW5nIGludGVycnVwdCAqLwotLyogCQkJCQkgICAgIC8vdG8gYmUgZ2VuZXJhdGVkIGlmICovCi0vKiAJCQkJCSAgICAgLy9lbmFibGVkICovCisgLyogaW50ZXJydXB0IGNhbGwgdGVzdCAgKi8KKy8qICAgd3JpdGVsKElSUV9HUElPMyxkZXZwcml2LT5iYXNlX2FkZHIrUF9QU1IpOyAqLworCS8qIFdyaXRpbmcgYSBsb2dpY2FsIDEgaW50byBhbnkgb2YgdGhlIFJQU19QU1IgYml0cyBjYXVzZXMgdGhlCisJICogY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgdG8gYmUgZ2VuZXJhdGVkIGlmIGVuYWJsZWQKKwkgKi8KIAogCURFQlVHKCJzNjI2X2FpX2luc25fcmVhZDogZW50ZXJpbmdcbiIpOwogCi0JLy8gQ29udmVydCBhcHBsaWNhdGlvbidzIEFEQyBzcGVjaWZpY2F0aW9uIGludG8gZm9ybQotCS8vIGFwcHJvcHJpYXRlIGZvciByZWdpc3RlciBwcm9ncmFtbWluZy4KKwkvKiBDb252ZXJ0IGFwcGxpY2F0aW9uJ3MgQURDIHNwZWNpZmljYXRpb24gaW50byBmb3JtCisJICogIGFwcHJvcHJpYXRlIGZvciByZWdpc3RlciBwcm9ncmFtbWluZy4KKwkgKi8KIAlpZiAocmFuZ2UgPT0gMCkKIAkJQWRjU3BlYyA9IChjaGFuIDw8IDgpIHwgKEdTRUxfQklQT0xBUjVWKTsKIAllbHNlCiAJCUFkY1NwZWMgPSAoY2hhbiA8PCA4KSB8IChHU0VMX0JJUE9MQVIxMFYpOwogCi0JLy8gU3dpdGNoIEFEQyBhbmFsb2cgZ2Fpbi4KLQlERUJJd3JpdGUoZGV2LCBMUF9HU0VMLCBBZGNTcGVjKTsJLy8gU2V0IGdhaW4uCisJLyogIFN3aXRjaCBBREMgYW5hbG9nIGdhaW4uICovCisJREVCSXdyaXRlKGRldiwgTFBfR1NFTCwgQWRjU3BlYyk7CS8qICBTZXQgZ2Fpbi4gKi8KIAotCS8vIFNlbGVjdCBBREMgYW5hbG9nIGlucHV0IGNoYW5uZWwuCi0JREVCSXdyaXRlKGRldiwgTFBfSVNFTCwgQWRjU3BlYyk7CS8vIFNlbGVjdCBjaGFubmVsLgorCS8qICBTZWxlY3QgQURDIGFuYWxvZyBpbnB1dCBjaGFubmVsLiAqLworCURFQkl3cml0ZShkZXYsIExQX0lTRUwsIEFkY1NwZWMpOwkvKiAgU2VsZWN0IGNoYW5uZWwuICovCiAKIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CiAKLQkJLy8gRGVsYXkgMTAgbWljcm9zZWNvbmRzIGZvciBhbmFsb2cgaW5wdXQgc2V0dGxpbmcuCisJCS8qICBEZWxheSAxMCBtaWNyb3NlY29uZHMgZm9yIGFuYWxvZyBpbnB1dCBzZXR0bGluZy4gKi8KIAkJY29tZWRpX3VkZWxheSgxMCk7CiAKLQkJLy8gU3RhcnQgQURDIGJ5IHB1bHNpbmcgR1BJTzEgbG93LgorCQkvKiAgU3RhcnQgQURDIGJ5IHB1bHNpbmcgR1BJTzEgbG93LiAqLwogCQlHcGlvSW1hZ2UgPSBSUjcxNDYoUF9HUElPKTsKLQkJLy8gQXNzZXJ0IEFEQyBTdGFydCBjb21tYW5kCisJCS8qICBBc3NlcnQgQURDIFN0YXJ0IGNvbW1hbmQgKi8KIAkJV1I3MTQ2KFBfR1BJTywgR3Bpb0ltYWdlICYgfkdQSU8xX0hJKTsKLQkJLy8gICBhbmQgc3RyZXRjaCBpdCBvdXQuCisJCS8qICAgIGFuZCBzdHJldGNoIGl0IG91dC4gKi8KIAkJV1I3MTQ2KFBfR1BJTywgR3Bpb0ltYWdlICYgfkdQSU8xX0hJKTsKIAkJV1I3MTQ2KFBfR1BJTywgR3Bpb0ltYWdlICYgfkdQSU8xX0hJKTsKLQkJLy8gTmVnYXRlIEFEQyBTdGFydCBjb21tYW5kLgorCQkvKiAgTmVnYXRlIEFEQyBTdGFydCBjb21tYW5kLiAqLwogCQlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgfCBHUElPMV9ISSk7CiAKLQkJLy8gV2FpdCBmb3IgQURDIHRvIGNvbXBsZXRlIChHUElPMiBpcyBhc3NlcnRlZCBoaWdoIHdoZW4KLQkJLy8gQURDIG5vdCBidXN5KSBhbmQgZm9yIGRhdGEgZnJvbSBwcmV2aW91cyBjb252ZXJzaW9uIHRvCi0JCS8vIHNoaWZ0IGludG8gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuCisJCS8qICBXYWl0IGZvciBBREMgdG8gY29tcGxldGUgKEdQSU8yIGlzIGFzc2VydGVkIGhpZ2ggd2hlbiAqLworCQkvKiAgQURDIG5vdCBidXN5KSBhbmQgZm9yIGRhdGEgZnJvbSBwcmV2aW91cyBjb252ZXJzaW9uIHRvICovCisJCS8qICBzaGlmdCBpbnRvIEZCIEJVRkZFUiAxIHJlZ2lzdGVyLiAqLwogCi0JCS8vIFdhaXQgZm9yIEFEQyBkb25lLgotCQl3aGlsZSAoIShSUjcxNDYoUF9QU1IpICYgUFNSX0dQSU8yKSkgOworCQkvKiAgV2FpdCBmb3IgQURDIGRvbmUuICovCisJCXdoaWxlICghKFJSNzE0NihQX1BTUikgJiBQU1JfR1BJTzIpKQorCQkJOwogCi0JCS8vIEZldGNoIEFEQyBkYXRhLgorCQkvKiAgRmV0Y2ggQURDIGRhdGEuICovCiAJCWlmIChuICE9IDApCiAJCQlkYXRhW24gLSAxXSA9IHM2MjZfYWlfcmVnX3RvX3VpbnQoUlI3MTQ2KFBfRkJfQlVGRkVSMSkpOwogCi0JCS8vIEFsbG93IHRoZSBBREMgdG8gc3RhYmlsaXplIGZvciA0IG1pY3Jvc2Vjb25kcyBiZWZvcmUKLQkJLy8gc3RhcnRpbmcgdGhlIG5leHQgKGZpbmFsKSBjb252ZXJzaW9uLiAgVGhpcyBkZWxheSBpcwotCQkvLyBuZWNlc3NhcnkgdG8gYWxsb3cgc3VmZmljaWVudCB0aW1lIGJldHdlZW4gbGFzdAotCQkvLyBjb252ZXJzaW9uIGZpbmlzaGVkIGFuZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQKLQkJLy8gY29udmVyc2lvbi4gIFdpdGhvdXQgdGhpcyBkZWxheSwgdGhlIGxhc3QgY29udmVyc2lvbidzCi0JCS8vIGRhdGEgdmFsdWUgaXMgc29tZXRpbWVzIHNldCB0byB0aGUgcHJldmlvdXMKLQkJLy8gY29udmVyc2lvbidzIGRhdGEgdmFsdWUuCisJCS8qIEFsbG93IHRoZSBBREMgdG8gc3RhYmlsaXplIGZvciA0IG1pY3Jvc2Vjb25kcyBiZWZvcmUKKwkJICogc3RhcnRpbmcgdGhlIG5leHQgKGZpbmFsKSBjb252ZXJzaW9uLiAgVGhpcyBkZWxheSBpcworCQkgKiBuZWNlc3NhcnkgdG8gYWxsb3cgc3VmZmljaWVudCB0aW1lIGJldHdlZW4gbGFzdAorCQkgKiBjb252ZXJzaW9uIGZpbmlzaGVkIGFuZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQKKwkJICogY29udmVyc2lvbi4gIFdpdGhvdXQgdGhpcyBkZWxheSwgdGhlIGxhc3QgY29udmVyc2lvbidzCisJCSAqIGRhdGEgdmFsdWUgaXMgc29tZXRpbWVzIHNldCB0byB0aGUgcHJldmlvdXMKKwkJICogY29udmVyc2lvbidzIGRhdGEgdmFsdWUuCisJCSAqLwogCQljb21lZGlfdWRlbGF5KDQpOwogCX0KIAotCS8vIFN0YXJ0IGEgZHVtbXkgY29udmVyc2lvbiB0byBjYXVzZSB0aGUgZGF0YSBmcm9tIHRoZQotCS8vIHByZXZpb3VzIGNvbnZlcnNpb24gdG8gYmUgc2hpZnRlZCBpbi4KKwkvKiBTdGFydCBhIGR1bW15IGNvbnZlcnNpb24gdG8gY2F1c2UgdGhlIGRhdGEgZnJvbSB0aGUKKwkgKiBwcmV2aW91cyBjb252ZXJzaW9uIHRvIGJlIHNoaWZ0ZWQgaW4uICovCiAJR3Bpb0ltYWdlID0gUlI3MTQ2KFBfR1BJTyk7CiAKLQkvL0Fzc2VydCBBREMgU3RhcnQgY29tbWFuZAorCS8qIEFzc2VydCBBREMgU3RhcnQgY29tbWFuZCAqLwogCVdSNzE0NihQX0dQSU8sIEdwaW9JbWFnZSAmIH5HUElPMV9ISSk7Ci0JLy8gICBhbmQgc3RyZXRjaCBpdCBvdXQuCisJLyogICAgYW5kIHN0cmV0Y2ggaXQgb3V0LiAqLwogCVdSNzE0NihQX0dQSU8sIEdwaW9JbWFnZSAmIH5HUElPMV9ISSk7CiAJV1I3MTQ2KFBfR1BJTywgR3Bpb0ltYWdlICYgfkdQSU8xX0hJKTsKLQkvLyBOZWdhdGUgQURDIFN0YXJ0IGNvbW1hbmQuCisJLyogIE5lZ2F0ZSBBREMgU3RhcnQgY29tbWFuZC4gKi8KIAlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgfCBHUElPMV9ISSk7CiAKLQkvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBhcnJpdmUgaW4gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuCisJLyogIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGFycml2ZSBpbiBGQiBCVUZGRVIgMSByZWdpc3Rlci4gKi8KIAotCS8vIFdhaXQgZm9yIEFEQyBkb25lLgotCXdoaWxlICghKFJSNzE0NihQX1BTUikgJiBQU1JfR1BJTzIpKSA7CisJLyogIFdhaXQgZm9yIEFEQyBkb25lLiAqLworCXdoaWxlICghKFJSNzE0NihQX1BTUikgJiBQU1JfR1BJTzIpKQorCQk7CiAKLQkvLyBGZXRjaCBBREMgZGF0YSBmcm9tIGF1ZGlvIGludGVyZmFjZSdzIGlucHV0IHNoaWZ0Ci0JLy8gcmVnaXN0ZXIuCisJLyogIEZldGNoIEFEQyBkYXRhIGZyb20gYXVkaW8gaW50ZXJmYWNlJ3MgaW5wdXQgc2hpZnQgcmVnaXN0ZXIuICovCiAKLQkvLyBGZXRjaCBBREMgZGF0YS4KKwkvKiAgRmV0Y2ggQURDIGRhdGEuICovCiAJaWYgKG4gIT0gMCkKIAkJZGF0YVtuIC0gMV0gPSBzNjI2X2FpX3JlZ190b191aW50KFJSNzE0NihQX0ZCX0JVRkZFUjEpKTsKIApAQCAtMTYyMiw3ICsxNjM4LDcgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBzNjI2X2FpX2xvYWRfcG9sbGxpc3QodWludDhfdCAqIHBwbCwgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgczYyNl9haV9sb2FkX3BvbGxsaXN0KHVpbnQ4X3QgKnBwbCwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAogCWludCBuOwpAQCAtMTYzOCw3ICsxNjU0LDcgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBzNjI2X2FpX2ludHRyaWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitzdGF0aWMgaW50IHM2MjZfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBpbnQgdHJpZ251bSkKIHsKIAlpZiAodHJpZ251bSAhPSAwKQpAQCAtMTY0Niw3ICsxNjYyLDcgQEAKIAogCURFQlVHKCJzNjI2X2FpX2ludHRyaWc6IHRyaWdnZXIgYWRjIHN0YXJ0Li4uIik7CiAKLQkvLyBTdGFydCBleGVjdXRpbmcgdGhlIFJQUyBwcm9ncmFtLgorCS8qICBTdGFydCBleGVjdXRpbmcgdGhlIFJQUyBwcm9ncmFtLiAqLwogCU1DX0VOQUJMRShQX01DMSwgTUMxX0VSUFMxKTsKIAogCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKQEAgLTE2NTcsMTIgKzE2NzMsMTIgQEAKIH0KIAogLyogIFRPIENPTVBMRVRFICAqLwotc3RhdGljIGludCBzNjI2X2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgczYyNl9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAKIAl1aW50OF90IHBwbFsxNl07Ci0JY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7Ci0JZW5jX3ByaXZhdGUgKms7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXN0cnVjdCBlbmNfcHJpdmF0ZSAqazsKIAlpbnQgdGljazsKIAogCURFQlVHKCJzNjI2X2FpX2NtZDogZW50ZXJpbmcgY29tbWFuZCBmdW5jdGlvblxuIik7CkBAIC0xNjcyLDIwICsxNjg4LDIwIEBACiAJCQlkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLy9kaXNhYmxlIGludGVycnVwdAorCS8qIGRpc2FibGUgaW50ZXJydXB0ICovCiAJd3JpdGVsKDAsIGRldnByaXYtPmJhc2VfYWRkciArIFBfSUVSKTsKIAotCS8vY2xlYXIgaW50ZXJydXB0IHJlcXVlc3QKKwkvKiBjbGVhciBpbnRlcnJ1cHQgcmVxdWVzdCAqLwogCXdyaXRlbChJUlFfUlBTMSB8IElSUV9HUElPMywgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JU1IpOwogCi0JLy9jbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHQKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgKi8KIAlzNjI2X2Rpb19jbGVhcl9pcnEoZGV2KTsKLQkvLyAgczYyNl9lbmNfY2xlYXJfaXJxKGRldik7CisJLyogICBzNjI2X2VuY19jbGVhcl9pcnEoZGV2KTsgKi8KIAotCS8vcmVzZXQgYWlfY21kX3J1bm5pbmcgZmxhZworCS8qIHJlc2V0IGFpX2NtZF9ydW5uaW5nIGZsYWcgKi8KIAlkZXZwcml2LT5haV9jbWRfcnVubmluZyA9IDA7CiAKLQkvLyB0ZXN0IGlmIGNtZCBpcyB2YWxpZAorCS8qICB0ZXN0IGlmIGNtZCBpcyB2YWxpZCAqLwogCWlmIChjbWQgPT0gTlVMTCkgewogCQlERUJVRygiczYyNl9haV9jbWQ6IE5VTEwgY29tbWFuZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTcwNywxMiArMTcyMywxMiBAQAogCWNhc2UgVFJJR19GT0xMT1c6CiAJCWJyZWFrOwogCWNhc2UgVFJJR19USU1FUjoKLQkJLy8gc2V0IGEgY29udGVyIHRvIGdlbmVyYXRlIGFkYyB0cmlnZ2VyIGF0IHNjYW5fYmVnaW5fYXJnIGludGVydmFsCisJCS8qICBzZXQgYSBjb250ZXIgdG8gZ2VuZXJhdGUgYWRjIHRyaWdnZXIgYXQgc2Nhbl9iZWdpbl9hcmcgaW50ZXJ2YWwgKi8KIAkJayA9ICZlbmNwcml2WzVdOwogCQl0aWNrID0gczYyNl9uc190b190aW1lcigoaW50ICopJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCiAJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKIAotCQkvL2xvYWQgdGltZXIgdmFsdWUgYW5kIGVuYWJsZSBpbnRlcnJ1cHQKKwkJLyogbG9hZCB0aW1lciB2YWx1ZSBhbmQgZW5hYmxlIGludGVycnVwdCAqLwogCQlzNjI2X3RpbWVyX2xvYWQoZGV2LCBrLCB0aWNrKTsKIAkJay0+U2V0RW5hYmxlKGRldiwgaywgQ0xLRU5BQl9BTFdBWVMpOwogCkBAIC0xNzIxLDcgKzE3MzcsNyBAQAogCiAJCWJyZWFrOwogCWNhc2UgVFJJR19FWFQ6Ci0JCS8vIHNldCB0aGUgZGlnaXRhbCBsaW5lIGFuZCBpbnRlcnJ1cHQgZm9yIHNjYW4gdHJpZ2dlcgorCQkvKiAgc2V0IHRoZSBkaWdpdGFsIGxpbmUgYW5kIGludGVycnVwdCBmb3Igc2NhbiB0cmlnZ2VyICovCiAJCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKIAkJCXM2MjZfZGlvX3NldF9pcnEoZGV2LCBjbWQtPnNjYW5fYmVnaW5fYXJnKTsKIApAQCAtMTczNCwxOSArMTc1MCwxOSBAQAogCWNhc2UgVFJJR19OT1c6CiAJCWJyZWFrOwogCWNhc2UgVFJJR19USU1FUjoKLQkJLy8gc2V0IGEgY29udGVyIHRvIGdlbmVyYXRlIGFkYyB0cmlnZ2VyIGF0IGNvbnZlcnRfYXJnIGludGVydmFsCisJCS8qICBzZXQgYSBjb250ZXIgdG8gZ2VuZXJhdGUgYWRjIHRyaWdnZXIgYXQgY29udmVydF9hcmcgaW50ZXJ2YWwgKi8KIAkJayA9ICZlbmNwcml2WzRdOwogCQl0aWNrID0gczYyNl9uc190b190aW1lcigoaW50ICopJmNtZC0+Y29udmVydF9hcmcsCiAJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKIAotCQkvL2xvYWQgdGltZXIgdmFsdWUgYW5kIGVuYWJsZSBpbnRlcnJ1cHQKKwkJLyogbG9hZCB0aW1lciB2YWx1ZSBhbmQgZW5hYmxlIGludGVycnVwdCAqLwogCQlzNjI2X3RpbWVyX2xvYWQoZGV2LCBrLCB0aWNrKTsKIAkJay0+U2V0RW5hYmxlKGRldiwgaywgQ0xLRU5BQl9JTkRFWCk7CiAKIAkJREVCVUcoInM2MjZfYWlfY21kOiBjb252ZXJ0IHRyaWdnZXIgdGltZXIgaXMgc2V0IHdpdGggdmFsdWUgJWRcbiIsIHRpY2spOwogCQlicmVhazsKIAljYXNlIFRSSUdfRVhUOgotCQkvLyBzZXQgdGhlIGRpZ2l0YWwgbGluZSBhbmQgaW50ZXJydXB0IGZvciBjb252ZXJ0IHRyaWdnZXIKKwkJLyogIHNldCB0aGUgZGlnaXRhbCBsaW5lIGFuZCBpbnRlcnJ1cHQgZm9yIGNvbnZlcnQgdHJpZ2dlciAqLwogCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVAogCQkJJiYgY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpCiAJCQlzNjI2X2Rpb19zZXRfaXJxKGRldiwgY21kLT5jb252ZXJ0X2FyZyk7CkBAIC0xNzU4LDEyICsxNzc0LDEyIEBACiAKIAlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKIAljYXNlIFRSSUdfQ09VTlQ6Ci0JCS8vIGRhdGEgYXJyaXZlcyBhcyBvbmUgcGFja2V0CisJCS8qICBkYXRhIGFycml2ZXMgYXMgb25lIHBhY2tldCAqLwogCQlkZXZwcml2LT5haV9zYW1wbGVfY291bnQgPSBjbWQtPnN0b3BfYXJnOwogCQlkZXZwcml2LT5haV9jb250aW5vdXMgPSAwOwogCQlicmVhazsKIAljYXNlIFRSSUdfTk9ORToKLQkJLy8gY29udGlub3VzIGFxdWlzaXRpb24KKwkJLyogIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCiAJCWRldnByaXYtPmFpX2NvbnRpbm91cyA9IDE7CiAJCWRldnByaXYtPmFpX3NhbXBsZV9jb3VudCA9IDA7CiAJCWJyZWFrOwpAQCAtMTc3MywxNyArMTc4OSwxNyBAQAogCiAJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgewogCWNhc2UgVFJJR19OT1c6Ci0JCS8vIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4KLQkJLy8gTUNfRU5BQkxFKCBQX01DMiwgTUMyX0FEQ19SUFMgKTsKKwkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KKwkJLyogIE1DX0VOQUJMRSggUF9NQzIsIE1DMl9BRENfUlBTICk7ICovCiAKLQkJLy8gU3RhcnQgZXhlY3V0aW5nIHRoZSBSUFMgcHJvZ3JhbS4KKwkJLyogIFN0YXJ0IGV4ZWN1dGluZyB0aGUgUlBTIHByb2dyYW0uICovCiAJCU1DX0VOQUJMRShQX01DMSwgTUMxX0VSUFMxKTsKIAogCQlERUJVRygiczYyNl9haV9jbWQ6IEFEQyB0cmlnZ2VyZWRcbiIpOwogCQlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CiAJCWJyZWFrOwogCWNhc2UgVFJJR19FWFQ6Ci0JCS8vY29uZmlndXJlIERJTyBjaGFubmVsIGZvciBhY3F1aXNpdGlvbiB0cmlnZ2VyCisJCS8qIGNvbmZpZ3VyZSBESU8gY2hhbm5lbCBmb3IgYWNxdWlzaXRpb24gdHJpZ2dlciAqLwogCQlzNjI2X2Rpb19zZXRfaXJxKGRldiwgY21kLT5zdGFydF9hcmcpOwogCiAJCURFQlVHKCJzNjI2X2FpX2NtZDogRXh0ZXJuYWwgc3RhcnQgdHJpZ2dlciBpcyBzZXQhISFcbiIpOwpAQCAtMTc5NSw3ICsxODExLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JLy9lbmFibGUgaW50ZXJydXB0CisJLyogZW5hYmxlIGludGVycnVwdCAqLwogCXdyaXRlbChJUlFfR1BJTzMgfCBJUlFfUlBTMSwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCiAJREVCVUcoInM2MjZfYWlfY21kOiBjb21tYW5kIGZ1bmN0aW9uIHRlcm1pbmF0ZWRcbiIpOwpAQCAtMTgwMyw4ICsxODE5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNjI2X2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgczYyNl9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IHRtcDsKQEAgLTE5ODgsMTIgKzIwMDQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNjI2X2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgczYyNl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JLy8gU3RvcCBSUFMgcHJvZ3JhbSBpbiBjYXNlIGl0IGlzIGN1cnJlbnRseSBydW5uaW5nLgorCS8qICBTdG9wIFJQUyBwcm9ncmFtIGluIGNhc2UgaXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuICovCiAJTUNfRElTQUJMRShQX01DMSwgTUMxX0VSUFMxKTsKIAotCS8vZGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0CisJLyogZGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0ICovCiAJd3JpdGVsKDAsIGRldnByaXYtPmJhc2VfYWRkciArIFBfSUVSKTsKIAogCWRldnByaXYtPmFpX2NtZF9ydW5uaW5nID0gMDsKQEAgLTIwMTAsNyArMjAyNiw3IEBACiB7CiAJaW50IGRpdmlkZXIsIGJhc2U7CiAKLQliYXNlID0gNTAwOwkJLy8yTUh6IGludGVybmFsIGNsb2NrCisJYmFzZSA9IDUwMDsJCS8qIDJNSHogaW50ZXJuYWwgY2xvY2sgKi8KIAogCXN3aXRjaCAocm91bmRfbW9kZSkgewogCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgpAQCAtMjAyOSw4ICsyMDQ1LDggQEAKIAlyZXR1cm4gZGl2aWRlciAtIDE7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9hb193aW5zbihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczYyNl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCWludCBpOwpAQCAtMjA0OCw0NSArMjA2NCw0MiBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYW9fcmluc24oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKIAkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKLQl9CiAKIAlyZXR1cm4gaTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8gIERJR0lUQUwgSS9PIEZVTkNUSU9OUyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gQWxsIERJTyBmdW5jdGlvbnMgYWRkcmVzcyBhIGdyb3VwIG9mIERJTyBjaGFubmVscyBieSBtZWFucyBvZgotLy8gImdyb3VwIiBhcmd1bWVudC4gIGdyb3VwIG1heSBiZSAwLCAxIG9yIDIsIHdoaWNoIGNvcnJlc3BvbmQgdG8gRElPCi0vLyBwb3J0cyBBLCBCIGFuZCBDLCByZXNwZWN0aXZlbHkuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qICoqKioqKioqKioqKioqKiBESUdJVEFMIEkvTyBGVU5DVElPTlMgKioqKioqKioqKioqKioqCisgKiBBbGwgRElPIGZ1bmN0aW9ucyBhZGRyZXNzIGEgZ3JvdXAgb2YgRElPIGNoYW5uZWxzIGJ5IG1lYW5zIG9mCisgKiAiZ3JvdXAiIGFyZ3VtZW50LiAgZ3JvdXAgbWF5IGJlIDAsIDEgb3IgMiwgd2hpY2ggY29ycmVzcG9uZCB0byBESU8KKyAqIHBvcnRzIEEsIEIgYW5kIEMsIHJlc3BlY3RpdmVseS4KKyAqLwogCi1zdGF0aWMgdm9pZCBzNjI2X2Rpb19pbml0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBzNjI2X2Rpb19pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJdWludDE2X3QgZ3JvdXA7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAotCS8vIFByZXBhcmUgdG8gdHJlYXQgd3JpdGVzIHRvIFdSQ2FwU2VsIGFzIGNhcHR1cmUgZGlzYWJsZXMuCisJLyogIFByZXBhcmUgdG8gdHJlYXQgd3JpdGVzIHRvIFdSQ2FwU2VsIGFzIGNhcHR1cmUgZGlzYWJsZXMuICovCiAJREVCSXdyaXRlKGRldiwgTFBfTUlTQzEsIE1JU0MxX05PRURDQVApOwogCi0JLy8gRm9yIGVhY2ggZ3JvdXAgb2Ygc2l4dGVlbiBjaGFubmVscyAuLi4KKwkvKiAgRm9yIGVhY2ggZ3JvdXAgb2Ygc2l4dGVlbiBjaGFubmVscyAuLi4gKi8KIAlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBTNjI2X0RJT19CQU5LUzsgZ3JvdXArKykgewogCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMiArIGdyb3VwOwotCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkludFNlbCwgMCk7CS8vIERpc2FibGUgYWxsIGludGVycnVwdHMuCi0JCURFQkl3cml0ZShkZXYsIGRpb3ByaXYtPldSQ2FwU2VsLCAweEZGRkYpOwkvLyBEaXNhYmxlIGFsbCBldmVudAotCQkvLyBjYXB0dXJlcy4KLQkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JFZGdTZWwsIDApOwkvLyBJbml0IGFsbCBESU9zIHRvCi0JCS8vIGRlZmF1bHQgZWRnZQotCQkvLyBwb2xhcml0eS4KLQkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JET3V0LCAwKTsJLy8gUHJvZ3JhbSBhbGwgb3V0cHV0cwotCQkvLyB0byBpbmFjdGl2ZSBzdGF0ZS4KKwkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JJbnRTZWwsIDApOwkvKiAgRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi8KKwkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JDYXBTZWwsIDB4RkZGRik7CS8qICBEaXNhYmxlIGFsbCBldmVudCAqLworCQkvKiAgY2FwdHVyZXMuICovCisJCURFQkl3cml0ZShkZXYsIGRpb3ByaXYtPldSRWRnU2VsLCAwKTsJLyogIEluaXQgYWxsIERJT3MgdG8gKi8KKwkJLyogIGRlZmF1bHQgZWRnZSAqLworCQkvKiAgcG9sYXJpdHkuICovCisJCURFQkl3cml0ZShkZXYsIGRpb3ByaXYtPldSRE91dCwgMCk7CS8qICBQcm9ncmFtIGFsbCBvdXRwdXRzICovCisJCS8qICB0byBpbmFjdGl2ZSBzdGF0ZS4gKi8KIAl9CiAJREVCVUcoInM2MjZfZGlvX2luaXQ6IERJTyBpbml0aWFsaXplZCBcbiIpOwogfQpAQCAtMjA5NywxNCArMjExMCwxNCBAQAogICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlIGNvbWVkaQogICogY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCiAKLXN0YXRpYyBpbnQgczYyNl9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAkvKiBMZW5ndGggb2YgZGF0YSBtdXN0IGJlIDIgKG1hc2sgYW5kIG5ldyBkYXRhLCBzZWUgYmVsb3cpICovCi0JaWYgKGluc24tPm4gPT0gMCkgeworCWlmIChpbnNuLT5uID09IDApCiAJCXJldHVybiAwOwotCX0KKwogCWlmIChpbnNuLT5uICE9IDIpIHsKIAkJcHJpbnRrKCJjb21lZGklZDogczYyNjogczYyNl9kaW9faW5zbl9iaXRzKCk6IEludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMTMzLDggKzIxNDYsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IHM2MjZfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCXN3aXRjaCAoZGF0YVswXSkgewpAQCAtMjE2MCw3NSArMjE3Myw3NSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHM2MjZfZGlvX3NldF9pcnEoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW4pCitzdGF0aWMgaW50IHM2MjZfZGlvX3NldF9pcnEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW4pCiB7CiAJdW5zaWduZWQgaW50IGdyb3VwOwogCXVuc2lnbmVkIGludCBiaXRtYXNrOwogCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKLQkvL3NlbGVjdCBkaW8gYmFuaworCS8qIHNlbGVjdCBkaW8gYmFuayAqLwogCWdyb3VwID0gY2hhbiAvIDE2OwogCWJpdG1hc2sgPSAxIDw8IChjaGFuIC0gKDE2ICogZ3JvdXApKTsKIAlERUJVRygiczYyNl9kaW9fc2V0X2lycTogZW5hYmxlIGludGVycnVwdCBvbiBkaW8gY2hhbm5lbCAlZCBncm91cCAlZFxuIiwKIAkJY2hhbiAtICgxNiAqIGdyb3VwKSwgZ3JvdXApOwogCi0JLy9zZXQgY2hhbm5lbCB0byBjYXB0dXJlIHBvc2l0aXZlIGVkZ2UKKwkvKiBzZXQgY2hhbm5lbCB0byBjYXB0dXJlIHBvc2l0aXZlIGVkZ2UgKi8KIAlzdGF0dXMgPSBERUJJcmVhZChkZXYsCi0JCSgoZGlvX3ByaXZhdGUgKikgKGRldi0+c3ViZGV2aWNlcyArIDIgKworCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJZ3JvdXApLT5wcml2YXRlKS0+UkRFZGdTZWwpOwogCURFQkl3cml0ZShkZXYsCi0JCSgoZGlvX3ByaXZhdGUgKikgKGRldi0+c3ViZGV2aWNlcyArIDIgKworCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJZ3JvdXApLT5wcml2YXRlKS0+V1JFZGdTZWwsIGJpdG1hc2sgfCBzdGF0dXMpOwogCi0JLy9lbmFibGUgaW50ZXJydXB0IG9uIHNlbGVjdGVkIGNoYW5uZWwKKwkvKiBlbmFibGUgaW50ZXJydXB0IG9uIHNlbGVjdGVkIGNoYW5uZWwgKi8KIAlzdGF0dXMgPSBERUJJcmVhZChkZXYsCi0JCSgoZGlvX3ByaXZhdGUgKikgKGRldi0+c3ViZGV2aWNlcyArIDIgKworCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJZ3JvdXApLT5wcml2YXRlKS0+UkRJbnRTZWwpOwogCURFQkl3cml0ZShkZXYsCi0JCSgoZGlvX3ByaXZhdGUgKikgKGRldi0+c3ViZGV2aWNlcyArIDIgKworCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJZ3JvdXApLT5wcml2YXRlKS0+V1JJbnRTZWwsIGJpdG1hc2sgfCBzdGF0dXMpOwogCi0JLy9lbmFibGUgZWRnZSBjYXB0dXJlIHdyaXRlIGNvbW1hbmQKKwkvKiBlbmFibGUgZWRnZSBjYXB0dXJlIHdyaXRlIGNvbW1hbmQgKi8KIAlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfRURDQVApOwogCi0JLy9lbmFibGUgZWRnZSBjYXB0dXJlIG9uIHNlbGVjdGVkIGNoYW5uZWwKKwkvKiBlbmFibGUgZWRnZSBjYXB0dXJlIG9uIHNlbGVjdGVkIGNoYW5uZWwgKi8KIAlzdGF0dXMgPSBERUJJcmVhZChkZXYsCi0JCSgoZGlvX3ByaXZhdGUgKikgKGRldi0+c3ViZGV2aWNlcyArIDIgKworCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJZ3JvdXApLT5wcml2YXRlKS0+UkRDYXBTZWwpOwogCURFQkl3cml0ZShkZXYsCi0JCSgoZGlvX3ByaXZhdGUgKikgKGRldi0+c3ViZGV2aWNlcyArIDIgKworCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJZ3JvdXApLT5wcml2YXRlKS0+V1JDYXBTZWwsIGJpdG1hc2sgfCBzdGF0dXMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9kaW9fcmVzZXRfaXJxKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBncm91cCwKK3N0YXRpYyBpbnQgczYyNl9kaW9fcmVzZXRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBncm91cCwKIAl1bnNpZ25lZCBpbnQgbWFzaykKIHsKIAlERUJVRygiczYyNl9kaW9fcmVzZXRfaXJxOiBkaXNhYmxlICBpbnRlcnJ1cHQgb24gZGlvIGNoYW5uZWwgJWQgZ3JvdXAgJWRcbiIsIG1hc2ssIGdyb3VwKTsKIAotCS8vZGlzYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZAorCS8qIGRpc2FibGUgZWRnZSBjYXB0dXJlIHdyaXRlIGNvbW1hbmQgKi8KIAlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfTk9FRENBUCk7CiAKLQkvL2VuYWJsZSBlZGdlIGNhcHR1cmUgb24gc2VsZWN0ZWQgY2hhbm5lbAorCS8qIGVuYWJsZSBlZGdlIGNhcHR1cmUgb24gc2VsZWN0ZWQgY2hhbm5lbCAqLwogCURFQkl3cml0ZShkZXYsCi0JCSgoZGlvX3ByaXZhdGUgKikgKGRldi0+c3ViZGV2aWNlcyArIDIgKworCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJZ3JvdXApLT5wcml2YXRlKS0+V1JDYXBTZWwsIG1hc2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9kaW9fY2xlYXJfaXJxKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHM2MjZfZGlvX2NsZWFyX2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGludCBncm91cDsKIAotCS8vZGlzYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZAorCS8qIGRpc2FibGUgZWRnZSBjYXB0dXJlIHdyaXRlIGNvbW1hbmQgKi8KIAlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfTk9FRENBUCk7CiAKIAlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBTNjI2X0RJT19CQU5LUzsgZ3JvdXArKykgewotCQkvL2NsZWFyIHBlbmRpbmcgZXZlbnRzIGFuZCBpbnRlcnJ1cHQKKwkJLyogY2xlYXIgcGVuZGluZyBldmVudHMgYW5kIGludGVycnVwdCAqLwogCQlERUJJd3JpdGUoZGV2LAotCQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJCWdyb3VwKS0+cHJpdmF0ZSktPldSQ2FwU2VsLCAweGZmZmYpOwogCX0KIApAQCAtMjIzOCwyNiArMjI1MSwyNiBAQAogLyogTm93IHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHZhbHVlIG9mIHRoZSBjb3VudGVyIChkYXRhWzBdKQogICAgYW5kIHNldCB0aGUgc3ViZGV2aWNlLiBUbyBjb21wbGV0ZSB3aXRoIHRyaWdnZXIgYW5kIGludGVycnVwdAogICAgY29uZmlndXJhdGlvbiAqLwotc3RhdGljIGludCBzNjI2X2VuY19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczYyNl9lbmNfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7Ci0JdWludDE2X3QgU2V0dXAgPSAoTE9BRFNSQ19JTkRYIDw8IEJGX0xPQURTUkMpIHwJLy8gUHJlbG9hZCB1cG9uCi0JCS8vIGluZGV4LgotCQkoSU5EWFNSQ19TT0ZUIDw8IEJGX0lORFhTUkMpIHwJLy8gRGlzYWJsZSBoYXJkd2FyZSBpbmRleC4KLQkJKENMS1NSQ19DT1VOVEVSIDw8IEJGX0NMS1NSQykgfAkvLyBPcGVyYXRpbmcgbW9kZSBpcyBDb3VudGVyLgotCQkoQ0xLUE9MX1BPUyA8PCBCRl9DTEtQT0wpIHwJLy8gQWN0aXZlIGhpZ2ggY2xvY2suCi0JCS8vKCBDTlRESVJfVVAgPDwgQkZfQ0xLUE9MICkgfCAgICAgIC8vIENvdW50IGRpcmVjdGlvbiBpcyBEb3duLgotCQkoQ0xLTVVMVF8xWCA8PCBCRl9DTEtNVUxUKSB8CS8vIENsb2NrIG11bHRpcGxpZXIgaXMgMXguCisJdWludDE2X3QgU2V0dXAgPSAoTE9BRFNSQ19JTkRYIDw8IEJGX0xPQURTUkMpIHwJLyogIFByZWxvYWQgdXBvbiAqLworCQkvKiAgaW5kZXguICovCisJCShJTkRYU1JDX1NPRlQgPDwgQkZfSU5EWFNSQykgfAkvKiAgRGlzYWJsZSBoYXJkd2FyZSBpbmRleC4gKi8KKwkJKENMS1NSQ19DT1VOVEVSIDw8IEJGX0NMS1NSQykgfAkvKiAgT3BlcmF0aW5nIG1vZGUgaXMgQ291bnRlci4gKi8KKwkJKENMS1BPTF9QT1MgPDwgQkZfQ0xLUE9MKSB8CS8qICBBY3RpdmUgaGlnaCBjbG9jay4gKi8KKwkJLyogKCBDTlRESVJfVVAgPDwgQkZfQ0xLUE9MICkgfCAgICAgIC8vIENvdW50IGRpcmVjdGlvbiBpcyBEb3duLiAqLworCQkoQ0xLTVVMVF8xWCA8PCBCRl9DTEtNVUxUKSB8CS8qICBDbG9jayBtdWx0aXBsaWVyIGlzIDF4LiAqLwogCQkoQ0xLRU5BQl9JTkRFWCA8PCBCRl9DTEtFTkFCKTsKIAkvKiAgIHVpbnQxNl90IERpc2FibGVJbnRTcmM9VFJVRTsgKi8KLQkvLyB1aW50MzJfdCBQcmVsb2FkdmFsdWU7ICAgICAgICAgICAgICAvL0NvdW50ZXIgaW5pdGlhbCB2YWx1ZQorCS8qICB1aW50MzJfdCBQcmVsb2FkdmFsdWU7ICAgICAgICAgICAgICAvL0NvdW50ZXIgaW5pdGlhbCB2YWx1ZSAqLwogCXVpbnQxNl90IHZhbHVlU3JjbGF0Y2ggPSBMQVRDSFNSQ19BQl9SRUFEOwogCXVpbnQxNl90IGVuYWIgPSBDTEtFTkFCX0FMV0FZUzsKLQllbmNfcHJpdmF0ZSAqayA9ICZlbmNwcml2W0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgPSAmZW5jcHJpdltDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CiAKIAlERUJVRygiczYyNl9lbmNfaW5zbl9jb25maWc6IGVuY29kZXIgY29uZmlnXG4iKTsKIAotCS8vICAoZGF0YT09TlVMTCkgPyAoUHJlbG9hZHZhbHVlPTApIDogKFByZWxvYWR2YWx1ZT1kYXRhWzBdKTsKKwkvKiAgIChkYXRhPT1OVUxMKSA/IChQcmVsb2FkdmFsdWU9MCkgOiAoUHJlbG9hZHZhbHVlPWRhdGFbMF0pOyAqLwogCiAJay0+U2V0TW9kZShkZXYsIGssIFNldHVwLCBUUlVFKTsKIAlQcmVsb2FkKGRldiwgaywgKihpbnNuLT5kYXRhKSk7CkBAIC0yMjY4LDEyICsyMjgxLDEyIEBACiAJcmV0dXJuIGluc24tPm47CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9lbmNfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAlpbnQgbjsKLQllbmNfcHJpdmF0ZSAqayA9ICZlbmNwcml2W0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgPSAmZW5jcHJpdltDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CiAKIAlERUJVRygiczYyNl9lbmNfaW5zbl9yZWFkOiBlbmNvZGVyIHJlYWQgY2hhbm5lbCAlZCBcbiIsCiAJCUNSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKQEAgLTIyODYsMjAgKzIyOTksMjAgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3dyaXRlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCi0JZW5jX3ByaXZhdGUgKmsgPSAmZW5jcHJpdltDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisJc3RydWN0IGVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOwogCiAJREVCVUcoInM2MjZfZW5jX2luc25fd3JpdGU6IGVuY29kZXIgd3JpdGUgY2hhbm5lbCAlZCBcbiIsCiAJCUNSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKIAotCS8vIFNldCB0aGUgcHJlbG9hZCByZWdpc3RlcgorCS8qICBTZXQgdGhlIHByZWxvYWQgcmVnaXN0ZXIgKi8KIAlQcmVsb2FkKGRldiwgaywgZGF0YVswXSk7CiAKLQkvLyBTb2Z0d2FyZSBpbmRleCBwdWxzZSBmb3JjZXMgdGhlIHByZWxvYWQgcmVnaXN0ZXIgdG8gbG9hZAotCS8vIGludG8gdGhlIGNvdW50ZXIKKwkvKiAgU29mdHdhcmUgaW5kZXggcHVsc2UgZm9yY2VzIHRoZSBwcmVsb2FkIHJlZ2lzdGVyIHRvIGxvYWQgKi8KKwkvKiAgaW50byB0aGUgY291bnRlciAqLwogCWstPlNldExvYWRUcmlnKGRldiwgaywgMCk7CiAJay0+UHVsc2VJbmRleChkZXYsIGspOwogCWstPlNldExvYWRUcmlnKGRldiwgaywgMik7CkBAIC0yMzA5LDE3NSArMjMyMiwxNjUgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgczYyNl90aW1lcl9sb2FkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgaW50IHRpY2spCitzdGF0aWMgdm9pZCBzNjI2X3RpbWVyX2xvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCBpbnQgdGljaykKIHsKLQl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvLyBQcmVsb2FkIHVwb24KLQkJLy8gaW5kZXguCi0JCShJTkRYU1JDX1NPRlQgPDwgQkZfSU5EWFNSQykgfAkvLyBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LgotCQkoQ0xLU1JDX1RJTUVSIDw8IEJGX0NMS1NSQykgfAkvLyBPcGVyYXRpbmcgbW9kZSBpcyBUaW1lci4KLQkJKENMS1BPTF9QT1MgPDwgQkZfQ0xLUE9MKSB8CS8vIEFjdGl2ZSBoaWdoIGNsb2NrLgotCQkoQ05URElSX0RPV04gPDwgQkZfQ0xLUE9MKSB8CS8vIENvdW50IGRpcmVjdGlvbiBpcyBEb3duLgotCQkoQ0xLTVVMVF8xWCA8PCBCRl9DTEtNVUxUKSB8CS8vIENsb2NrIG11bHRpcGxpZXIgaXMgMXguCisJdWludDE2X3QgU2V0dXAgPSAoTE9BRFNSQ19JTkRYIDw8IEJGX0xPQURTUkMpIHwJLyogIFByZWxvYWQgdXBvbiAqLworCQkvKiAgaW5kZXguICovCisJCShJTkRYU1JDX1NPRlQgPDwgQkZfSU5EWFNSQykgfAkvKiAgRGlzYWJsZSBoYXJkd2FyZSBpbmRleC4gKi8KKwkJKENMS1NSQ19USU1FUiA8PCBCRl9DTEtTUkMpIHwJLyogIE9wZXJhdGluZyBtb2RlIGlzIFRpbWVyLiAqLworCQkoQ0xLUE9MX1BPUyA8PCBCRl9DTEtQT0wpIHwJLyogIEFjdGl2ZSBoaWdoIGNsb2NrLiAqLworCQkoQ05URElSX0RPV04gPDwgQkZfQ0xLUE9MKSB8CS8qICBDb3VudCBkaXJlY3Rpb24gaXMgRG93bi4gKi8KKwkJKENMS01VTFRfMVggPDwgQkZfQ0xLTVVMVCkgfAkvKiAgQ2xvY2sgbXVsdGlwbGllciBpcyAxeC4gKi8KIAkJKENMS0VOQUJfSU5ERVggPDwgQkZfQ0xLRU5BQik7CiAJdWludDE2X3QgdmFsdWVTcmNsYXRjaCA9IExBVENIU1JDX0FfSU5EWEE7Ci0JLy8gIHVpbnQxNl90IGVuYWI9Q0xLRU5BQl9BTFdBWVM7CisJLyogICB1aW50MTZfdCBlbmFiPUNMS0VOQUJfQUxXQVlTOyAqLwogCiAJay0+U2V0TW9kZShkZXYsIGssIFNldHVwLCBGQUxTRSk7CiAKLQkvLyBTZXQgdGhlIHByZWxvYWQgcmVnaXN0ZXIKKwkvKiAgU2V0IHRoZSBwcmVsb2FkIHJlZ2lzdGVyICovCiAJUHJlbG9hZChkZXYsIGssIHRpY2spOwogCi0JLy8gU29mdHdhcmUgaW5kZXggcHVsc2UgZm9yY2VzIHRoZSBwcmVsb2FkIHJlZ2lzdGVyIHRvIGxvYWQKLQkvLyBpbnRvIHRoZSBjb3VudGVyCisJLyogIFNvZnR3YXJlIGluZGV4IHB1bHNlIGZvcmNlcyB0aGUgcHJlbG9hZCByZWdpc3RlciB0byBsb2FkICovCisJLyogIGludG8gdGhlIGNvdW50ZXIgKi8KIAlrLT5TZXRMb2FkVHJpZyhkZXYsIGssIDApOwogCWstPlB1bHNlSW5kZXgoZGV2LCBrKTsKIAotCS8vc2V0IHJlbG9hZCBvbiBjb3VudGVyIG92ZXJmbG93CisJLyogc2V0IHJlbG9hZCBvbiBjb3VudGVyIG92ZXJmbG93ICovCiAJay0+U2V0TG9hZFRyaWcoZGV2LCBrLCAxKTsKIAotCS8vc2V0IGludGVycnVwdCBvbiBvdmVyZmxvdworCS8qIHNldCBpbnRlcnJ1cHQgb24gb3ZlcmZsb3cgKi8KIAlrLT5TZXRJbnRTcmMoZGV2LCBrLCBJTlRTUkNfT1ZFUik7CiAKIAlTZXRMYXRjaFNvdXJjZShkZXYsIGssIHZhbHVlU3JjbGF0Y2gpOwotCS8vICBrLT5TZXRFbmFibGUoZGV2LGssKHVpbnQxNl90KShlbmFiICE9IDApKTsKKwkvKiAgIGstPlNldEVuYWJsZShkZXYsaywodWludDE2X3QpKGVuYWIgIT0gMCkpOyAqLwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vICBEQUMgRlVOQ1RJT05TIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qICoqKioqKioqKioqICBEQUMgRlVOQ1RJT05TICoqKioqKioqKioqICovCiAKLS8vIFNsb3QgMCBiYXNlIHNldHRpbmdzLgotI2RlZmluZSBWRUNUMAkoIFhTRDIgfCBSU0QzIHwgU0lCX0EyICkJLy8gU2xvdCAwIGFsd2F5cyBzaGlmdHMgaW4KLQkJCQkJIC8vIDB4RkYgYW5kIHN0b3JlIGl0IHRvCi0JCQkJCSAvLyBGQl9CVUZGRVIyLgorLyogIFNsb3QgMCBiYXNlIHNldHRpbmdzLiAqLworI2RlZmluZSBWRUNUMAkoWFNEMiB8IFJTRDMgfCBTSUJfQTIpCisvKiAgU2xvdCAwIGFsd2F5cyBzaGlmdHMgaW4gIDB4RkYgYW5kIHN0b3JlIGl0IHRvICBGQl9CVUZGRVIyLiAqLwogCi0vLyBUcmltRGFjIExvZ2ljYWxDaGFuLXRvLVBoeXNpY2FsQ2hhbiBtYXBwaW5nIHRhYmxlLgorLyogIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tUGh5c2ljYWxDaGFuIG1hcHBpbmcgdGFibGUuICovCiBzdGF0aWMgdWludDhfdCB0cmltY2hhbltdID0geyAxMCwgOSwgOCwgMywgMiwgNywgNiwgMSwgMCwgNSwgNCB9OwogCi0vLyBUcmltRGFjIExvZ2ljYWxDaGFuLXRvLUVlcHJvbUFkcnMgbWFwcGluZyB0YWJsZS4KKy8qICBUcmltRGFjIExvZ2ljYWxDaGFuLXRvLUVlcHJvbUFkcnMgbWFwcGluZyB0YWJsZS4gKi8KIHN0YXRpYyB1aW50OF90IHRyaW1hZHJzW10gPQogCXsgMHg0MCwgMHg0MSwgMHg0MiwgMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MyB9OwogCi1zdGF0aWMgdm9pZCBMb2FkVHJpbURBQ3MoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIExvYWRUcmltREFDcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXJlZ2lzdGVyIHVpbnQ4X3QgaTsKIAotCS8vIENvcHkgVHJpbURhYyBzZXRwb2ludCB2YWx1ZXMgZnJvbSBFRVBST00gdG8gVHJpbURhY3MuCisJLyogIENvcHkgVHJpbURhYyBzZXRwb2ludCB2YWx1ZXMgZnJvbSBFRVBST00gdG8gVHJpbURhY3MuICovCiAJZm9yIChpID0gMDsgaSA8IChzaXplb2YodHJpbWNoYW4pIC8gc2l6ZW9mKHRyaW1jaGFuWzBdKSk7IGkrKykKIAkJV3JpdGVUcmltREFDKGRldiwgaSwgSTJDcmVhZChkZXYsIHRyaW1hZHJzW2ldKSk7CiB9CiAKLXN0YXRpYyB2b2lkIFdyaXRlVHJpbURBQyhjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90IExvZ2ljYWxDaGFuLAorc3RhdGljIHZvaWQgV3JpdGVUcmltREFDKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQ4X3QgTG9naWNhbENoYW4sCiAJdWludDhfdCBEYWNEYXRhKQogewogCXVpbnQzMl90IGNoYW47CiAKLQkvLyBTYXZlIHRoZSBuZXcgc2V0cG9pbnQgaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8gcmVhZCBpdCBiYWNrIGxhdGVyLgorCS8qICBTYXZlIHRoZSBuZXcgc2V0cG9pbnQgaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8gcmVhZCBpdCBiYWNrIGxhdGVyLiAqLwogCWRldnByaXYtPlRyaW1TZXRwb2ludFtMb2dpY2FsQ2hhbl0gPSAodWludDhfdCkgRGFjRGF0YTsKIAotCS8vIE1hcCBsb2dpY2FsIGNoYW5uZWwgbnVtYmVyIHRvIHBoeXNpY2FsIGNoYW5uZWwgbnVtYmVyLgorCS8qICBNYXAgbG9naWNhbCBjaGFubmVsIG51bWJlciB0byBwaHlzaWNhbCBjaGFubmVsIG51bWJlci4gKi8KIAljaGFuID0gKHVpbnQzMl90KSB0cmltY2hhbltMb2dpY2FsQ2hhbl07CiAKLQkvLyBTZXQgdXAgVFNMMiByZWNvcmRzIGZvciBUcmltRGFjIHdyaXRlIG9wZXJhdGlvbi4gIEFsbCBzbG90cyBzaGlmdAotCS8vIDB4RkYgaW4gZnJvbSBwdWxsZWQtdXAgU0QzIHNvIHRoYXQgdGhlIGVuZCBvZiB0aGUgc2xvdCBzZXF1ZW5jZQotCS8vIGNhbiBiZSBkZXRlY3RlZC4KLQlTRVRWRUNUKDIsIFhTRDIgfCBYRklGT18xIHwgV1MzKTsJLy8gU2xvdCAyOiBTZW5kIGhpZ2ggdWludDhfdAotCS8vIHRvIHRhcmdldCBUcmltRGFjLgotCVNFVFZFQ1QoMywgWFNEMiB8IFhGSUZPXzAgfCBXUzMpOwkvLyBTbG90IDM6IFNlbmQgbG93IHVpbnQ4X3QgdG8KLQkvLyB0YXJnZXQgVHJpbURhYy4KLQlTRVRWRUNUKDQsIFhTRDIgfCBYRklGT18zIHwgV1MxKTsJLy8gU2xvdCA0OiBTZW5kIE5PUCBoaWdoCi0JLy8gdWludDhfdCB0byBEQUMwIHRvIGtlZXAKLQkvLyBjbG9jayBydW5uaW5nLgotCVNFVFZFQ1QoNSwgWFNEMiB8IFhGSUZPXzIgfCBXUzEgfCBFT1MpOwkvLyBTbG90IDU6IFNlbmQgTk9QIGxvdwotCS8vIHVpbnQ4X3QgdG8gREFDMC4KKwkvKiBTZXQgdXAgVFNMMiByZWNvcmRzIGZvciBUcmltRGFjIHdyaXRlIG9wZXJhdGlvbi4gIEFsbCBzbG90cyBzaGlmdAorCSAqIDB4RkYgaW4gZnJvbSBwdWxsZWQtdXAgU0QzIHNvIHRoYXQgdGhlIGVuZCBvZiB0aGUgc2xvdCBzZXF1ZW5jZQorCSAqIGNhbiBiZSBkZXRlY3RlZC4KKwkgKi8KIAotCS8vIENvbnN0cnVjdCBhbmQgdHJhbnNtaXQgdGFyZ2V0IERBQydzIHNlcmlhbCBwYWNrZXQ6ICggMDAwMCBBQUFBCi0JLy8gKSwoIEREREQgRERERCApLCggMHgwMCApLCggMHgwMCApIHdoZXJlIEE8MzowPiBpcyB0aGUgREFDCi0JLy8gY2hhbm5lbCdzIGFkZHJlc3MsIGFuZCBEPDc6MD4gaXMgdGhlIERBQyBzZXRwb2ludC4gIEFwcGVuZCBhIFdPUkQKLQkvLyB2YWx1ZSAodGhhdCB3cml0ZXMgYSBjaGFubmVsIDAgTk9QIGNvbW1hbmQgdG8gYSBub24tZXhpc3RlbnQgbWFpbgotCS8vIERBQyBjaGFubmVsKSB0aGF0IHNlcnZlcyB0byBrZWVwIHRoZSBjbG9jayBydW5uaW5nIGFmdGVyIHRoZQotCS8vIHBhY2tldCBoYXMgYmVlbiBzZW50IHRvIHRoZSB0YXJnZXQgREFDLgorCVNFVFZFQ1QoMiwgWFNEMiB8IFhGSUZPXzEgfCBXUzMpOworCS8qIFNsb3QgMjogU2VuZCBoaWdoIHVpbnQ4X3QgdG8gdGFyZ2V0IFRyaW1EYWMuICovCisJU0VUVkVDVCgzLCBYU0QyIHwgWEZJRk9fMCB8IFdTMyk7CisJLyogU2xvdCAzOiBTZW5kIGxvdyB1aW50OF90IHRvIHRhcmdldCBUcmltRGFjLiAqLworCVNFVFZFQ1QoNCwgWFNEMiB8IFhGSUZPXzMgfCBXUzEpOworCS8qIFNsb3QgNDogU2VuZCBOT1AgaGlnaCB1aW50OF90IHRvIERBQzAgdG8ga2VlcCBjbG9jayBydW5uaW5nLiAqLworCVNFVFZFQ1QoNSwgWFNEMiB8IFhGSUZPXzIgfCBXUzEgfCBFT1MpOworCS8qIFNsb3QgNTogU2VuZCBOT1AgbG93ICB1aW50OF90IHRvIERBQzAuICovCiAKLQlTZW5kREFDKGRldiwgKCh1aW50MzJfdCkgY2hhbiA8PCA4KQkvLyBBZGRyZXNzIHRoZSBEQUMgY2hhbm5lbAotCQkvLyB3aXRoaW4gdGhlIHRyaW1kYWMgZGV2aWNlLgotCQl8ICh1aW50MzJfdCkgRGFjRGF0YSk7CS8vIEluY2x1ZGUgREFDIHNldHBvaW50IGRhdGEuCisJLyogQ29uc3RydWN0IGFuZCB0cmFuc21pdCB0YXJnZXQgREFDJ3Mgc2VyaWFsIHBhY2tldDoKKwkgKiAoIDAwMDAgQUFBQSApLCAoIEREREQgRERERCApLCggMHgwMCApLCggMHgwMCApIHdoZXJlIEE8MzowPiBpcyB0aGUKKwkgKiBEQUMgY2hhbm5lbCdzIGFkZHJlc3MsIGFuZCBEPDc6MD4gaXMgdGhlIERBQyBzZXRwb2ludC4gIEFwcGVuZCBhCisJICogV09SRCB2YWx1ZSAodGhhdCB3cml0ZXMgYSBjaGFubmVsIDAgTk9QIGNvbW1hbmQgdG8gYSBub24tZXhpc3RlbnQKKwkgKiBtYWluIERBQyBjaGFubmVsKSB0aGF0IHNlcnZlcyB0byBrZWVwIHRoZSBjbG9jayBydW5uaW5nIGFmdGVyIHRoZQorCSAqIHBhY2tldCBoYXMgYmVlbiBzZW50IHRvIHRoZSB0YXJnZXQgREFDLgorCSAqLworCisJLyogIEFkZHJlc3MgdGhlIERBQyBjaGFubmVsIHdpdGhpbiB0aGUgdHJpbWRhYyBkZXZpY2UuICovCisJU2VuZERBQyhkZXYsICgodWludDMyX3QpIGNoYW4gPDwgOCkKKwkJfCAodWludDMyX3QpIERhY0RhdGEpOwkvKiAgSW5jbHVkZSBEQUMgc2V0cG9pbnQgZGF0YS4gKi8KIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLyAgRUVQUk9NIEFDQ0VTUyBGVU5DVElPTlMgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyogKioqKioqKioqKioqKiogIEVFUFJPTSBBQ0NFU1MgRlVOQ1RJT05TICAqKioqKioqKioqKioqKiAqLworLyogIFJlYWQgdWludDhfdCBmcm9tIEVFUFJPTS4gKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmVhZCB1aW50OF90IGZyb20gRUVQUk9NLgotCi1zdGF0aWMgdWludDhfdCBJMkNyZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQ4X3QgYWRkcikKK3N0YXRpYyB1aW50OF90IEkyQ3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDhfdCBhZGRyKQogewogCXVpbnQ4X3QgcnRudmFsOwogCi0JLy8gU2VuZCBFRVBST00gdGFyZ2V0IGFkZHJlc3MuCi0JaWYgKEkyQ2hhbmRzaGFrZShkZXYsIEkyQ19CMihJMkNfQVRUUlNUQVJULCBJMkNXKQkvLyBCeXRlMiA9IEkyQwotCQkJLy8gY29tbWFuZDoKLQkJCS8vIHdyaXRlIHRvCi0JCQkvLyBJMkMgRUVQUk9NCi0JCQkvLyBkZXZpY2UuCi0JCQl8IEkyQ19CMShJMkNfQVRUUlNUT1AsIGFkZHIpCS8vIEJ5dGUxID0gRUVQUk9NCi0JCQkvLyBpbnRlcm5hbCB0YXJnZXQKLQkJCS8vIGFkZHJlc3MuCi0JCQl8IEkyQ19CMChJMkNfQVRUUk5PUCwgMCkpKQkvLyBCeXRlMCA9IE5vdAotCQkvLyBzZW50LgotCXsKLQkJLy8gQWJvcnQgZnVuY3Rpb24gYW5kIGRlY2xhcmUgZXJyb3IgaWYgaGFuZHNoYWtlIGZhaWxlZC4KKwkvKiAgU2VuZCBFRVBST00gdGFyZ2V0IGFkZHJlc3MuICovCisJaWYgKEkyQ2hhbmRzaGFrZShkZXYsIEkyQ19CMihJMkNfQVRUUlNUQVJULCBJMkNXKQorCQkJIC8qIEJ5dGUyID0gSTJDIGNvbW1hbmQ6IHdyaXRlIHRvIEkyQyBFRVBST00gIGRldmljZS4gKi8KKwkJCXwgSTJDX0IxKEkyQ19BVFRSU1RPUCwgYWRkcikKKwkJCSAvKiBCeXRlMSA9IEVFUFJPTSBpbnRlcm5hbCB0YXJnZXQgYWRkcmVzcy4gKi8KKwkJCXwgSTJDX0IwKEkyQ19BVFRSTk9QLCAwKSkpIHsJLyogIEJ5dGUwID0gTm90IHNlbnQuICovCisJCS8qICBBYm9ydCBmdW5jdGlvbiBhbmQgZGVjbGFyZSBlcnJvciBpZiBoYW5kc2hha2UgZmFpbGVkLiAqLwogCQlERUJVRygiSTJDcmVhZDogZXJyb3IgaGFuZHNoYWtlIEkyQ3JlYWQgIGFcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JLy8gRXhlY3V0ZSBFRVBST00gcmVhZC4KLQlpZiAoSTJDaGFuZHNoYWtlKGRldiwgSTJDX0IyKEkyQ19BVFRSU1RBUlQsIEkyQ1IpCS8vIEJ5dGUyID0gSTJDCi0JCQkvLyBjb21tYW5kOiByZWFkCi0JCQkvLyBmcm9tIEkyQyBFRVBST00KLQkJCS8vIGRldmljZS4KLQkJCXwgSTJDX0IxKEkyQ19BVFRSU1RPUCwgMCkJLy8gQnl0ZTEgcmVjZWl2ZXMKLQkJCS8vIHVpbnQ4X3QgZnJvbQotCQkJLy8gRUVQUk9NLgotCQkJfCBJMkNfQjAoSTJDX0FUVFJOT1AsIDApKSkJLy8gQnl0ZTAgPSBOb3QKLQkJLy8gc2VudC4KLQl7Ci0JCS8vIEFib3J0IGZ1bmN0aW9uIGFuZCBkZWNsYXJlIGVycm9yIGlmIGhhbmRzaGFrZSBmYWlsZWQuCisJLyogIEV4ZWN1dGUgRUVQUk9NIHJlYWQuICovCisJaWYgKEkyQ2hhbmRzaGFrZShkZXYsIEkyQ19CMihJMkNfQVRUUlNUQVJULCBJMkNSKQkvKiAgQnl0ZTIgPSBJMkMgKi8KKwkJCS8qICBjb21tYW5kOiByZWFkICovCisJCQkvKiAgZnJvbSBJMkMgRUVQUk9NICovCisJCQkvKiAgZGV2aWNlLiAqLworCQkJfCBJMkNfQjEoSTJDX0FUVFJTVE9QLCAwKQkvKiAgQnl0ZTEgcmVjZWl2ZXMgKi8KKwkJCS8qICB1aW50OF90IGZyb20gKi8KKwkJCS8qICBFRVBST00uICovCisJCQl8IEkyQ19CMChJMkNfQVRUUk5PUCwgMCkpKSB7CS8qICBCeXRlMCA9IE5vdCAgc2VudC4gKi8KKworCQkvKiAgQWJvcnQgZnVuY3Rpb24gYW5kIGRlY2xhcmUgZXJyb3IgaWYgaGFuZHNoYWtlIGZhaWxlZC4gKi8KIAkJREVCVUcoIkkyQ3JlYWQ6IGVycm9yIGhhbmRzaGFrZSBJMkNyZWFkIGJcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JLy8gUmV0dXJuIGNvcHkgb2YgRUVQUk9NIHZhbHVlLgorCS8qICBSZXR1cm4gY29weSBvZiBFRVBST00gdmFsdWUuICovCiAJcnRudmFsID0gKHVpbnQ4X3QpIChSUjcxNDYoUF9JMkNDVFJMKSA+PiAxNik7CiAJcmV0dXJuIHJ0bnZhbDsKIH0KIAotc3RhdGljIHVpbnQzMl90IEkyQ2hhbmRzaGFrZShjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MzJfdCB2YWwpCitzdGF0aWMgdWludDMyX3QgSTJDaGFuZHNoYWtlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQzMl90IHZhbCkKIHsKLQkvLyBXcml0ZSBJMkMgY29tbWFuZCB0byBJMkMgVHJhbnNmZXIgQ29udHJvbCBzaGFkb3cgcmVnaXN0ZXIuCisJLyogIFdyaXRlIEkyQyBjb21tYW5kIHRvIEkyQyBUcmFuc2ZlciBDb250cm9sIHNoYWRvdyByZWdpc3Rlci4gKi8KIAlXUjcxNDYoUF9JMkNDVFJMLCB2YWwpOwogCi0JLy8gVXBsb2FkIEkyQyBzaGFkb3cgcmVnaXN0ZXJzIGludG8gd29ya2luZyByZWdpc3RlcnMgYW5kIHdhaXQgZm9yCi0JLy8gdXBsb2FkIGNvbmZpcm1hdGlvbi4KKwkvKiAgVXBsb2FkIEkyQyBzaGFkb3cgcmVnaXN0ZXJzIGludG8gd29ya2luZyByZWdpc3RlcnMgYW5kIHdhaXQgZm9yICovCisJLyogIHVwbG9hZCBjb25maXJtYXRpb24uICovCiAKIAlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0lJQyk7Ci0Jd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9JSUMpKSA7CisJd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9JSUMpKQorCQk7CiAKLQkvLyBXYWl0IHVudGlsIEkyQyBidXMgdHJhbnNmZXIgaXMgZmluaXNoZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgotCXdoaWxlICgoUlI3MTQ2KFBfSTJDQ1RSTCkgJiAoSTJDX0JVU1kgfCBJMkNfRVJSKSkgPT0gSTJDX0JVU1kpIDsKKwkvKiAgV2FpdCB1bnRpbCBJMkMgYnVzIHRyYW5zZmVyIGlzIGZpbmlzaGVkIG9yIGFuIGVycm9yIG9jY3Vycy4gKi8KKwl3aGlsZSAoKFJSNzE0NihQX0kyQ0NUUkwpICYgKEkyQ19CVVNZIHwgSTJDX0VSUikpID09IEkyQ19CVVNZKQorCQk7CiAKLQkvLyBSZXR1cm4gbm9uLXplcm8gaWYgSTJDIGVycm9yIG9jY3VyZWQuCisJLyogIFJldHVybiBub24temVybyBpZiBJMkMgZXJyb3Igb2NjdXJlZC4gKi8KIAlyZXR1cm4gUlI3MTQ2KFBfSTJDQ1RSTCkgJiBJMkNfRVJSOwogCiB9CiAKLS8vIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9uOiBXcml0ZSBzZXRwb2ludCB0byBhbiBhcHBsaWNhdGlvbiBEQUMgY2hhbm5lbC4KKy8qICBQcml2YXRlIGhlbHBlciBmdW5jdGlvbjogV3JpdGUgc2V0cG9pbnQgdG8gYW4gYXBwbGljYXRpb24gREFDIGNoYW5uZWwuICovCiAKLXN0YXRpYyB2b2lkIFNldERBQyhjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBjaGFuLCBzaG9ydCBkYWNkYXRhKQorc3RhdGljIHZvaWQgU2V0REFDKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGNoYW4sIHNob3J0IGRhY2RhdGEpCiB7CiAJcmVnaXN0ZXIgdWludDE2X3Qgc2lnbm1hc2s7CiAJcmVnaXN0ZXIgdWludDMyX3QgV1NJbWFnZTsKIAotCS8vIEFkanVzdCBEQUMgZGF0YSBwb2xhcml0eSBhbmQgc2V0IHVwIFBvbGFyaXR5IENvbnRyb2wgUmVnaXN0ZXIKLQkvLyBpbWFnZS4KKwkvKiAgQWRqdXN0IERBQyBkYXRhIHBvbGFyaXR5IGFuZCBzZXQgdXAgUG9sYXJpdHkgQ29udHJvbCBSZWdpc3RlciAqLworCS8qICBpbWFnZS4gKi8KIAlzaWdubWFzayA9IDEgPDwgY2hhbjsKIAlpZiAoZGFjZGF0YSA8IDApIHsKIAkJZGFjZGF0YSA9IC1kYWNkYXRhOwpAQCAtMjQ4NSwyMzcgKzI0ODgsMjUyIEBACiAJfSBlbHNlCiAJCWRldnByaXYtPkRhY3BvbCAmPSB+c2lnbm1hc2s7CiAKLQkvLyBMaW1pdCBEQUMgc2V0cG9pbnQgdmFsdWUgdG8gdmFsaWQgcmFuZ2UuCisJLyogIExpbWl0IERBQyBzZXRwb2ludCB2YWx1ZSB0byB2YWxpZCByYW5nZS4gKi8KIAlpZiAoKHVpbnQxNl90KSBkYWNkYXRhID4gMHgxRkZGKQogCQlkYWNkYXRhID0gMHgxRkZGOwogCi0JLy8gU2V0IHVwIFRTTDIgcmVjb3JkcyAoYWthICJ2ZWN0b3JzIikgZm9yIERBQyB1cGRhdGUuICBWZWN0b3JzIFYyCi0JLy8gYW5kIFYzIHRyYW5zbWl0IHRoZSBzZXRwb2ludCB0byB0aGUgdGFyZ2V0IERBQy4gIFY0IGFuZCBWNSBzZW5kCi0JLy8gZGF0YSB0byBhIG5vbi1leGlzdGVudCBUcmltRGFjIGNoYW5uZWwganVzdCB0byBrZWVwIHRoZSBjbG9jawotCS8vIHJ1bm5pbmcgYWZ0ZXIgc2VuZGluZyBkYXRhIHRvIHRoZSB0YXJnZXQgREFDLiAgVGhpcyBpcyBuZWNlc3NhcnkKLQkvLyB0byBlbGltaW5hdGUgdGhlIGNsb2NrIGdsaXRjaCB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ciBhdCB0aGUKLQkvLyBlbmQgb2YgdGhlIHRhcmdldCBEQUMncyBzZXJpYWwgZGF0YSBzdHJlYW0uICBXaGVuIHRoZSBzZXF1ZW5jZQotCS8vIHJlc3RhcnRzIGF0IFYwIChhZnRlciBleGVjdXRpbmcgVjUpLCB0aGUgZ2F0ZSBhcnJheSBhdXRvbWF0aWNhbGx5Ci0JLy8gZGlzYWJsZXMgZ2F0aW5nIGZvciB0aGUgREFDIGNsb2NrIGFuZCBhbGwgREFDIGNoaXAgc2VsZWN0cy4KLQlXU0ltYWdlID0gKGNoYW4gJiAyKSA/IFdTMSA6IFdTMjsJLy8gQ2hvb3NlIERBQyBjaGlwIHNlbGVjdCB0bwotCS8vIGJlIGFzc2VydGVkLgotCVNFVFZFQ1QoMiwgWFNEMiB8IFhGSUZPXzEgfCBXU0ltYWdlKTsJLy8gU2xvdCAyOiBUcmFuc21pdCBoaWdoCi0JLy8gZGF0YSBieXRlIHRvIHRhcmdldCBEQUMuCi0JU0VUVkVDVCgzLCBYU0QyIHwgWEZJRk9fMCB8IFdTSW1hZ2UpOwkvLyBTbG90IDM6IFRyYW5zbWl0IGxvdyBkYXRhCi0JLy8gYnl0ZSB0byB0YXJnZXQgREFDLgotCVNFVFZFQ1QoNCwgWFNEMiB8IFhGSUZPXzMgfCBXUzMpOwkvLyBTbG90IDQ6IFRyYW5zbWl0IHRvCi0JLy8gbm9uLWV4aXN0ZW50IFRyaW1EYWMKLQkvLyBjaGFubmVsIHRvIGtlZXAgY2xvY2sKLQlTRVRWRUNUKDUsIFhTRDIgfCBYRklGT18yIHwgV1MzIHwgRU9TKTsJLy8gU2xvdCA1OiBydW5uaW5nIGFmdGVyCi0JLy8gd3JpdGluZyB0YXJnZXQgREFDJ3MKLQkvLyBsb3cgZGF0YSBieXRlLgorCS8qIFNldCB1cCBUU0wyIHJlY29yZHMgKGFrYSAidmVjdG9ycyIpIGZvciBEQUMgdXBkYXRlLiAgVmVjdG9ycyBWMgorCSAqIGFuZCBWMyB0cmFuc21pdCB0aGUgc2V0cG9pbnQgdG8gdGhlIHRhcmdldCBEQUMuICBWNCBhbmQgVjUgc2VuZAorCSAqIGRhdGEgdG8gYSBub24tZXhpc3RlbnQgVHJpbURhYyBjaGFubmVsIGp1c3QgdG8ga2VlcCB0aGUgY2xvY2sKKwkgKiBydW5uaW5nIGFmdGVyIHNlbmRpbmcgZGF0YSB0byB0aGUgdGFyZ2V0IERBQy4gIFRoaXMgaXMgbmVjZXNzYXJ5CisJICogdG8gZWxpbWluYXRlIHRoZSBjbG9jayBnbGl0Y2ggdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIgYXQgdGhlCisJICogZW5kIG9mIHRoZSB0YXJnZXQgREFDJ3Mgc2VyaWFsIGRhdGEgc3RyZWFtLiAgV2hlbiB0aGUgc2VxdWVuY2UKKwkgKiByZXN0YXJ0cyBhdCBWMCAoYWZ0ZXIgZXhlY3V0aW5nIFY1KSwgdGhlIGdhdGUgYXJyYXkgYXV0b21hdGljYWxseQorCSAqIGRpc2FibGVzIGdhdGluZyBmb3IgdGhlIERBQyBjbG9jayBhbmQgYWxsIERBQyBjaGlwIHNlbGVjdHMuCisJICovCiAKLQkvLyBDb25zdHJ1Y3QgYW5kIHRyYW5zbWl0IHRhcmdldCBEQUMncyBzZXJpYWwgcGFja2V0OiAoIEExMEQgRERERAotCS8vICksKCBEREREIEREREQgKSwoIDB4MEYgKSwoIDB4MDAgKSB3aGVyZSBBIGlzIGNoYW48MD4sIGFuZCBEPDEyOjA+Ci0JLy8gaXMgdGhlIERBQyBzZXRwb2ludC4gIEFwcGVuZCBhIFdPUkQgdmFsdWUgKHRoYXQgd3JpdGVzIHRvIGEKLQkvLyBub24tZXhpc3RlbnQgVHJpbURhYyBjaGFubmVsKSB0aGF0IHNlcnZlcyB0byBrZWVwIHRoZSBjbG9jawotCS8vIHJ1bm5pbmcgYWZ0ZXIgdGhlIHBhY2tldCBoYXMgYmVlbiBzZW50IHRvIHRoZSB0YXJnZXQgREFDLgotCVNlbmREQUMoZGV2LCAweDBGMDAwMDAwCS8vQ29udGludWUgY2xvY2sgYWZ0ZXIgdGFyZ2V0IERBQwotCQkvL2RhdGEgKHdyaXRlIHRvIG5vbi1leGlzdGVudAotCQkvL3RyaW1kYWMpLgotCQl8IDB4MDAwMDQwMDAJLy8gQWRkcmVzcyB0aGUgdHdvIG1haW4gZHVhbC1EQUMKLQkJLy8gZGV2aWNlcyAoVFNMJ3MgY2hpcCBzZWxlY3QgZW5hYmxlcwotCQkvLyB0YXJnZXQgZGV2aWNlKS4KLQkJfCAoKHVpbnQzMl90KSAoY2hhbiAmIDEpIDw8IDE1KQkvLyBBZGRyZXNzIHRoZSBEQUMKLQkJLy8gY2hhbm5lbCB3aXRoaW4gdGhlCi0JCS8vIGRldmljZS4KLQkJfCAodWludDMyX3QpIGRhY2RhdGEpOwkvLyBJbmNsdWRlIERBQyBzZXRwb2ludCBkYXRhLgorCVdTSW1hZ2UgPSAoY2hhbiAmIDIpID8gV1MxIDogV1MyOworCS8qIENob29zZSBEQUMgY2hpcCBzZWxlY3QgdG8gYmUgYXNzZXJ0ZWQuICovCisJU0VUVkVDVCgyLCBYU0QyIHwgWEZJRk9fMSB8IFdTSW1hZ2UpOworCS8qIFNsb3QgMjogVHJhbnNtaXQgaGlnaCBkYXRhIGJ5dGUgdG8gdGFyZ2V0IERBQy4gKi8KKwlTRVRWRUNUKDMsIFhTRDIgfCBYRklGT18wIHwgV1NJbWFnZSk7CisJLyogU2xvdCAzOiBUcmFuc21pdCBsb3cgZGF0YSBieXRlIHRvIHRhcmdldCBEQUMuICovCisJU0VUVkVDVCg0LCBYU0QyIHwgWEZJRk9fMyB8IFdTMyk7CisJLyogU2xvdCA0OiBUcmFuc21pdCB0byBub24tZXhpc3RlbnQgVHJpbURhYyBjaGFubmVsIHRvIGtlZXAgY2xvY2sgKi8KKwlTRVRWRUNUKDUsIFhTRDIgfCBYRklGT18yIHwgV1MzIHwgRU9TKTsKKwkvKiBTbG90IDU6IHJ1bm5pbmcgYWZ0ZXIgd3JpdGluZyB0YXJnZXQgREFDJ3MgbG93IGRhdGEgYnl0ZS4gKi8KKworCS8qICBDb25zdHJ1Y3QgYW5kIHRyYW5zbWl0IHRhcmdldCBEQUMncyBzZXJpYWwgcGFja2V0OgorCSAqICggQTEwRCBEREREICksKCBEREREIEREREQgKSwoIDB4MEYgKSwoIDB4MDAgKSB3aGVyZSBBIGlzIGNoYW48MD4sCisJICogYW5kIEQ8MTI6MD4gaXMgdGhlIERBQyBzZXRwb2ludC4gIEFwcGVuZCBhIFdPUkQgdmFsdWUgKHRoYXQgd3JpdGVzCisJICogdG8gYSAgbm9uLWV4aXN0ZW50IFRyaW1EYWMgY2hhbm5lbCkgdGhhdCBzZXJ2ZXMgdG8ga2VlcCB0aGUgY2xvY2sKKwkgKiBydW5uaW5nIGFmdGVyIHRoZSBwYWNrZXQgaGFzIGJlZW4gc2VudCB0byB0aGUgdGFyZ2V0IERBQy4KKwkgKi8KKwlTZW5kREFDKGRldiwgMHgwRjAwMDAwMAorCQkvKiBDb250aW51ZSBjbG9jayBhZnRlciB0YXJnZXQgREFDIGRhdGEgKHdyaXRlIHRvIG5vbi1leGlzdGVudCB0cmltZGFjKS4gKi8KKwkJfCAweDAwMDA0MDAwCisJCS8qIEFkZHJlc3MgdGhlIHR3byBtYWluIGR1YWwtREFDIGRldmljZXMgKFRTTCdzIGNoaXAgc2VsZWN0IGVuYWJsZXMKKwkJICogdGFyZ2V0IGRldmljZSkuICovCisJCXwgKCh1aW50MzJfdCkgKGNoYW4gJiAxKSA8PCAxNSkKKwkJLyogIEFkZHJlc3MgdGhlIERBQyBjaGFubmVsIHdpdGhpbiB0aGUgIGRldmljZS4gKi8KKwkJfCAodWludDMyX3QpIGRhY2RhdGEpOwkvKiAgSW5jbHVkZSBEQUMgc2V0cG9pbnQgZGF0YS4gKi8KIAogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb246IFRyYW5zbWl0IHNlcmlhbCBkYXRhIHRvIERBQyB2aWEgQXVkaW8KLS8vIGNoYW5uZWwgMi4gIEFzc3VtZXM6ICgxKSBUU0wyIHNsb3QgcmVjb3JkcyBpbml0aWFsaXplZCwgYW5kICgyKQotLy8gRGFjcG9sIGNvbnRhaW5zIHZhbGlkIHRhcmdldCBpbWFnZS4KKy8qIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9uOiBUcmFuc21pdCBzZXJpYWwgZGF0YSB0byBEQUMgdmlhIEF1ZGlvCisgKiBjaGFubmVsIDIuICBBc3N1bWVzOiAoMSkgVFNMMiBzbG90IHJlY29yZHMgaW5pdGlhbGl6ZWQsIGFuZCAoMikKKyAqIERhY3BvbCBjb250YWlucyB2YWxpZCB0YXJnZXQgaW1hZ2UuCisgKi8KIAotc3RhdGljIHZvaWQgU2VuZERBQyhjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MzJfdCB2YWwpCitzdGF0aWMgdm9pZCBTZW5kREFDKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQzMl90IHZhbCkKIHsKIAotCS8vIFNUQVJUIFRIRSBTRVJJQUwgQ0xPQ0sgUlVOTklORyAtLS0tLS0tLS0tLS0tCisJLyogU1RBUlQgVEhFIFNFUklBTCBDTE9DSyBSVU5OSU5HIC0tLS0tLS0tLS0tLS0gKi8KIAotCS8vIEFzc2VydCBEQUMgcG9sYXJpdHkgY29udHJvbCBhbmQgZW5hYmxlIGdhdGluZyBvZiBEQUMgc2VyaWFsIGNsb2NrCi0JLy8gYW5kIGF1ZGlvIGJpdCBzdHJlYW0gc2lnbmFscy4gIEF0IHRoaXMgcG9pbnQgaW4gdGltZSB3ZSBtdXN0IGJlCi0JLy8gYXNzdXJlZCBvZiBiZWluZyBpbiB0aW1lIHNsb3QgMC4gIElmIHdlIGFyZSBub3QgaW4gc2xvdCAwLCB0aGUKLQkvLyBzZXJpYWwgY2xvY2sgYW5kIGF1ZGlvIHN0cmVhbSBzaWduYWxzIHdpbGwgYmUgZGlzYWJsZWQ7IHRoaXMgaXMKLQkvLyBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgREVCSXdyaXRlIHN0YXRlbWVudCAod2hpY2ggZW5hYmxlcyBzaWduYWxzCi0JLy8gdG8gYmUgcGFzc2VkIHRocm91Z2ggdGhlIGdhdGUgYXJyYXkpIHdvdWxkIGV4ZWN1dGUgYmVmb3JlIHRoZQotCS8vIHRyYWlsaW5nIGVkZ2Ugb2YgV1MxL1dTMyAod2hpY2ggdHVybnMgb2ZmIHRoZSBzaWduYWxzKSwgdGh1cwotCS8vIGNhdXNpbmcgdGhlIHNpZ25hbHMgdG8gYmUgaW5hY3RpdmUgZHVyaW5nIHRoZSBEQUMgd3JpdGUuCisJLyogQXNzZXJ0IERBQyBwb2xhcml0eSBjb250cm9sIGFuZCBlbmFibGUgZ2F0aW5nIG9mIERBQyBzZXJpYWwgY2xvY2sKKwkgKiBhbmQgYXVkaW8gYml0IHN0cmVhbSBzaWduYWxzLiAgQXQgdGhpcyBwb2ludCBpbiB0aW1lIHdlIG11c3QgYmUKKwkgKiBhc3N1cmVkIG9mIGJlaW5nIGluIHRpbWUgc2xvdCAwLiAgSWYgd2UgYXJlIG5vdCBpbiBzbG90IDAsIHRoZQorCSAqIHNlcmlhbCBjbG9jayBhbmQgYXVkaW8gc3RyZWFtIHNpZ25hbHMgd2lsbCBiZSBkaXNhYmxlZDsgdGhpcyBpcworCSAqIGJlY2F1c2UgdGhlIGZvbGxvd2luZyBERUJJd3JpdGUgc3RhdGVtZW50ICh3aGljaCBlbmFibGVzIHNpZ25hbHMKKwkgKiB0byBiZSBwYXNzZWQgdGhyb3VnaCB0aGUgZ2F0ZSBhcnJheSkgd291bGQgZXhlY3V0ZSBiZWZvcmUgdGhlCisJICogdHJhaWxpbmcgZWRnZSBvZiBXUzEvV1MzICh3aGljaCB0dXJucyBvZmYgdGhlIHNpZ25hbHMpLCB0aHVzCisJICogY2F1c2luZyB0aGUgc2lnbmFscyB0byBiZSBpbmFjdGl2ZSBkdXJpbmcgdGhlIERBQyB3cml0ZS4KKwkgKi8KIAlERUJJd3JpdGUoZGV2LCBMUF9EQUNQT0wsIGRldnByaXYtPkRhY3BvbCk7CiAKLQkvLyBUUkFOU0ZFUiBPVVRQVVQgRFdPUkQgVkFMVUUgSU5UTyBBMidTIE9VVFBVVCBGSUZPIC0tLS0tLS0tLS0tLS0tLS0KKwkvKiBUUkFOU0ZFUiBPVVRQVVQgRFdPUkQgVkFMVUUgSU5UTyBBMidTIE9VVFBVVCBGSUZPIC0tLS0tLS0tLS0tLS0tLS0gKi8KIAotCS8vIENvcHkgREFDIHNldHBvaW50IHZhbHVlIHRvIERBQydzIG91dHB1dCBETUEgYnVmZmVyLgorCS8qIENvcHkgREFDIHNldHBvaW50IHZhbHVlIHRvIERBQydzIG91dHB1dCBETUEgYnVmZmVyLiAqLwogCi0JLy9XUjcxNDYoICh1aW50MzJfdClkZXZwcml2LT5wRGFjV0J1ZiwgdmFsICk7CisJLyogV1I3MTQ2KCAodWludDMyX3QpZGV2cHJpdi0+cERhY1dCdWYsIHZhbCApOyAqLwogCSpkZXZwcml2LT5wRGFjV0J1ZiA9IHZhbDsKIAotCS8vIGVuYWIgdGhlIG91dHB1dCBETUEgdHJhbnNmZXIuICBUaGlzIHdpbGwgY2F1c2UgdGhlIERNQUMgdG8gY29weQotCS8vIHRoZSBEQUMncyBkYXRhIHZhbHVlIHRvIEEyJ3Mgb3V0cHV0IEZJRk8uICBUaGUgRE1BIHRyYW5zZmVyIHdpbGwKLQkvLyB0aGVuIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBiZWNhdXNlIHRoZSBwcm90ZWN0aW9uIGFkZHJlc3MgaXMKLQkvLyByZWFjaGVkIHVwb24gdHJhbnNmZXIgb2YgdGhlIGZpcnN0IERXT1JEIHZhbHVlLgorCS8qIGVuYWIgdGhlIG91dHB1dCBETUEgdHJhbnNmZXIuICBUaGlzIHdpbGwgY2F1c2UgdGhlIERNQUMgdG8gY29weQorCSAqIHRoZSBEQUMncyBkYXRhIHZhbHVlIHRvIEEyJ3Mgb3V0cHV0IEZJRk8uICBUaGUgRE1BIHRyYW5zZmVyIHdpbGwKKwkgKiB0aGVuIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBiZWNhdXNlIHRoZSBwcm90ZWN0aW9uIGFkZHJlc3MgaXMKKwkgKiByZWFjaGVkIHVwb24gdHJhbnNmZXIgb2YgdGhlIGZpcnN0IERXT1JEIHZhbHVlLgorCSAqLwogCU1DX0VOQUJMRShQX01DMSwgTUMxX0EyT1VUKTsKIAotCS8vIFdoaWxlIHRoZSBETUEgdHJhbnNmZXIgaXMgZXhlY3V0aW5nIC4uLgorCS8qICBXaGlsZSB0aGUgRE1BIHRyYW5zZmVyIGlzIGV4ZWN1dGluZyAuLi4gKi8KIAotCS8vIFJlc2V0IEF1ZGlvMiBvdXRwdXQgRklGTydzIHVuZGVyZmxvdyBmbGFnIChhbG9uZyB3aXRoIGFueSBvdGhlcgotCS8vIEZJRk8gdW5kZXJmbG93L292ZXJmbG93IGZsYWdzKS4gIFdoZW4gc2V0LCB0aGlzIGZsYWcgd2lsbAotCS8vIGluZGljYXRlIHRoYXQgd2UgaGF2ZSBlbWVyZ2VkIGZyb20gc2xvdCAwLgorCS8qIFJlc2V0IEF1ZGlvMiBvdXRwdXQgRklGTydzIHVuZGVyZmxvdyBmbGFnIChhbG9uZyB3aXRoIGFueSBvdGhlcgorCSAqIEZJRk8gdW5kZXJmbG93L292ZXJmbG93IGZsYWdzKS4gIFdoZW4gc2V0LCB0aGlzIGZsYWcgd2lsbAorCSAqIGluZGljYXRlIHRoYXQgd2UgaGF2ZSBlbWVyZ2VkIGZyb20gc2xvdCAwLgorCSAqLwogCVdSNzE0NihQX0lTUiwgSVNSX0FGT1UpOwogCi0JLy8gV2FpdCBmb3IgdGhlIERNQSB0cmFuc2ZlciB0byBmaW5pc2ggc28gdGhhdCB0aGVyZSB3aWxsIGJlIGRhdGEKLQkvLyBhdmFpbGFibGUgaW4gdGhlIEZJRk8gd2hlbiB0aW1lIHNsb3QgMSB0cmllcyB0byB0cmFuc2ZlciBhIERXT1JECi0JLy8gZnJvbSB0aGUgRklGTyB0byB0aGUgb3V0cHV0IGJ1ZmZlciByZWdpc3Rlci4gIFdlIHRlc3QgZm9yIERNQQotCS8vIERvbmUgYnkgcG9sbGluZyB0aGUgRE1BQyBlbmFibGUgZmxhZzsgdGhpcyBmbGFnIGlzIGF1dG9tYXRpY2FsbHkKLQkvLyBjbGVhcmVkIHdoZW4gdGhlIHRyYW5zZmVyIGhhcyBmaW5pc2hlZC4KLQl3aGlsZSAoKFJSNzE0NihQX01DMSkgJiBNQzFfQTJPVVQpICE9IDApIDsKKwkvKiBXYWl0IGZvciB0aGUgRE1BIHRyYW5zZmVyIHRvIGZpbmlzaCBzbyB0aGF0IHRoZXJlIHdpbGwgYmUgZGF0YQorCSAqIGF2YWlsYWJsZSBpbiB0aGUgRklGTyB3aGVuIHRpbWUgc2xvdCAxIHRyaWVzIHRvIHRyYW5zZmVyIGEgRFdPUkQKKwkgKiBmcm9tIHRoZSBGSUZPIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHJlZ2lzdGVyLiAgV2UgdGVzdCBmb3IgRE1BCisJICogRG9uZSBieSBwb2xsaW5nIHRoZSBETUFDIGVuYWJsZSBmbGFnOyB0aGlzIGZsYWcgaXMgYXV0b21hdGljYWxseQorCSAqIGNsZWFyZWQgd2hlbiB0aGUgdHJhbnNmZXIgaGFzIGZpbmlzaGVkLgorCSAqLworCXdoaWxlICgoUlI3MTQ2KFBfTUMxKSAmIE1DMV9BMk9VVCkgIT0gMCkKKwkJOwogCi0JLy8gU1RBUlQgVEhFIE9VVFBVVCBTVFJFQU0gVE8gVEhFIFRBUkdFVCBEQUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvKiBTVEFSVCBUSEUgT1VUUFVUIFNUUkVBTSBUTyBUSEUgVEFSR0VUIERBQyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0JLy8gRklGTyBkYXRhIGlzIG5vdyBhdmFpbGFibGUsIHNvIHdlIGVuYWJsZSBleGVjdXRpb24gb2YgdGltZSBzbG90cwotCS8vIDEgYW5kIGhpZ2hlciBieSBjbGVhcmluZyB0aGUgRU9TIGZsYWcgaW4gc2xvdCAwLiAgTm90ZSB0aGF0IFNEMwotCS8vIHdpbGwgYmUgc2hpZnRlZCBpbiBhbmQgc3RvcmVkIGluIEZCX0JVRkZFUjIgZm9yIGVuZC1vZi1zbG90LWxpc3QKLQkvLyBkZXRlY3Rpb24uCisJLyogRklGTyBkYXRhIGlzIG5vdyBhdmFpbGFibGUsIHNvIHdlIGVuYWJsZSBleGVjdXRpb24gb2YgdGltZSBzbG90cworCSAqIDEgYW5kIGhpZ2hlciBieSBjbGVhcmluZyB0aGUgRU9TIGZsYWcgaW4gc2xvdCAwLiAgTm90ZSB0aGF0IFNEMworCSAqIHdpbGwgYmUgc2hpZnRlZCBpbiBhbmQgc3RvcmVkIGluIEZCX0JVRkZFUjIgZm9yIGVuZC1vZi1zbG90LWxpc3QKKwkgKiBkZXRlY3Rpb24uCisJICovCiAJU0VUVkVDVCgwLCBYU0QyIHwgUlNEMyB8IFNJQl9BMik7CiAKLQkvLyBXYWl0IGZvciBzbG90IDEgdG8gZXhlY3V0ZSB0byBlbnN1cmUgdGhhdCB0aGUgUGFja2V0IHdpbGwgYmUKLQkvLyB0cmFuc21pdHRlZC4gIFRoaXMgaXMgZGV0ZWN0ZWQgYnkgcG9sbGluZyB0aGUgQXVkaW8yIG91dHB1dCBGSUZPCi0JLy8gdW5kZXJmbG93IGZsYWcsIHdoaWNoIHdpbGwgYmUgc2V0IHdoZW4gc2xvdCAxIGV4ZWN1dGlvbiBoYXMKLQkvLyBmaW5pc2hlZCB0cmFuc2ZlcnJpbmcgdGhlIERBQydzIGRhdGEgRFdPUkQgZnJvbSB0aGUgb3V0cHV0IEZJRk8KLQkvLyB0byB0aGUgb3V0cHV0IGJ1ZmZlciByZWdpc3Rlci4KLQl3aGlsZSAoKFJSNzE0NihQX1NTUikgJiBTU1JfQUYyX09VVCkgPT0gMCkgOworCS8qIFdhaXQgZm9yIHNsb3QgMSB0byBleGVjdXRlIHRvIGVuc3VyZSB0aGF0IHRoZSBQYWNrZXQgd2lsbCBiZQorCSAqIHRyYW5zbWl0dGVkLiAgVGhpcyBpcyBkZXRlY3RlZCBieSBwb2xsaW5nIHRoZSBBdWRpbzIgb3V0cHV0IEZJRk8KKwkgKiB1bmRlcmZsb3cgZmxhZywgd2hpY2ggd2lsbCBiZSBzZXQgd2hlbiBzbG90IDEgZXhlY3V0aW9uIGhhcworCSAqIGZpbmlzaGVkIHRyYW5zZmVycmluZyB0aGUgREFDJ3MgZGF0YSBEV09SRCBmcm9tIHRoZSBvdXRwdXQgRklGTworCSAqIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHJlZ2lzdGVyLgorCSAqLworCXdoaWxlICgoUlI3MTQ2KFBfU1NSKSAmIFNTUl9BRjJfT1VUKSA9PSAwKQorCQk7CiAKLQkvLyBTZXQgdXAgdG8gdHJhcCBleGVjdXRpb24gYXQgc2xvdCAwIHdoZW4gdGhlIFRTTCBzZXF1ZW5jZXIgY3ljbGVzCi0JLy8gYmFjayB0byBzbG90IDAgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBFT1MgaW4gc2xvdCA1LiAgQWxzbywKLQkvLyBzaW11bHRhbmVvdXNseSBzaGlmdCBvdXQgYW5kIGluIHRoZSAweDAwIHRoYXQgaXMgQUxXQVlTIHRoZSB2YWx1ZQotCS8vIHN0b3JlZCBpbiB0aGUgbGFzdCBieXRlIHRvIGJlIHNoaWZ0ZWQgb3V0IG9mIHRoZSBGSUZPJ3MgRFdPUkQKLQkvLyBidWZmZXIgcmVnaXN0ZXIuCisJLyogU2V0IHVwIHRvIHRyYXAgZXhlY3V0aW9uIGF0IHNsb3QgMCB3aGVuIHRoZSBUU0wgc2VxdWVuY2VyIGN5Y2xlcworCSAqIGJhY2sgdG8gc2xvdCAwIGFmdGVyIGV4ZWN1dGluZyB0aGUgRU9TIGluIHNsb3QgNS4gIEFsc28sCisJICogc2ltdWx0YW5lb3VzbHkgc2hpZnQgb3V0IGFuZCBpbiB0aGUgMHgwMCB0aGF0IGlzIEFMV0FZUyB0aGUgdmFsdWUKKwkgKiBzdG9yZWQgaW4gdGhlIGxhc3QgYnl0ZSB0byBiZSBzaGlmdGVkIG91dCBvZiB0aGUgRklGTydzIERXT1JECisJICogYnVmZmVyIHJlZ2lzdGVyLgorCSAqLwogCVNFVFZFQ1QoMCwgWFNEMiB8IFhGSUZPXzIgfCBSU0QyIHwgU0lCX0EyIHwgRU9TKTsKIAotCS8vIFdBSVQgRk9SIFRIRSBUUkFOU0FDVElPTiBUTyBGSU5JU0ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvKiBXQUlUIEZPUiBUSEUgVFJBTlNBQ1RJT04gVE8gRklOSVNIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLQkvLyBXYWl0IGZvciB0aGUgVFNMIHRvIGZpbmlzaCBleGVjdXRpbmcgYWxsIHRpbWUgc2xvdHMgYmVmb3JlCi0JLy8gZXhpdGluZyB0aGlzIGZ1bmN0aW9uLiAgV2UgbXVzdCBkbyB0aGlzIHNvIHRoYXQgdGhlIG5leHQgREFDCi0JLy8gd3JpdGUgZG9lc24ndCBzdGFydCwgdGhlcmVieSBlbmFibGluZyBjbG9jay9jaGlwIHNlbGVjdCBzaWduYWxzOgotCS8vIDEuIEJlZm9yZSB0aGUgVFNMIHNlcXVlbmNlIGN5Y2xlcyBiYWNrIHRvIHNsb3QgMCwgd2hpY2ggZGlzYWJsZXMKLQkvLyB0aGUgY2xvY2svY3Mgc2lnbmFsIGdhdGluZyBhbmQgdHJhcHMgc2xvdCAvLyBsaXN0IGV4ZWN1dGlvbi4gIElmCi0JLy8gd2UgaGF2ZSBub3QgeWV0IGZpbmlzaGVkIHNsb3QgNSB0aGVuIHRoZSBjbG9jay9jcyBzaWduYWxzIGFyZQotCS8vIHN0aWxsIGdhdGVkIGFuZCB3ZSBoYXZlIC8vIG5vdCBmaW5pc2hlZCB0cmFuc21pdHRpbmcgdGhlIHN0cmVhbS4KLQkvLyAyLiBXaGlsZSBzbG90cyAyLTUgYXJlIGV4ZWN1dGluZyBkdWUgdG8gYSBsYXRlIHNsb3QgMCB0cmFwLiAgSW4KLQkvLyB0aGlzIGNhc2UsIHRoZSBzbG90IHNlcXVlbmNlIGlzIGN1cnJlbnRseSAvLyByZXBlYXRpbmcsIGJ1dCB3aXRoCi0JLy8gY2xvY2svY3Mgc2lnbmFscyBkaXNhYmxlZC4gIFdlIG11c3Qgd2FpdCBmb3Igc2xvdCAwIHRvIHRyYXAKLQkvLyBleGVjdXRpb24gYmVmb3JlIHNldHRpbmcgLy8gdXAgdGhlIG5leHQgREFDIHNldHBvaW50IERNQSB0cmFuc2ZlcgotCS8vIGFuZCBlbmFibGluZyB0aGUgY2xvY2svY3Mgc2lnbmFscy4gIFRvIGRldGVjdCB0aGUgZW5kIG9mIHNsb3QgNSwKLQkvLyB3ZSB0ZXN0IGZvciB0aGUgRkJfQlVGRkVSMiBNU0IgY29udGVudHMgdG8gYmUgZXF1YWwgdG8gMHhGRi4gIElmCi0JLy8gdGhlIFRTTCBoYXMgbm90IHlldCBmaW5pc2hlZCBleGVjdXRpbmcgc2xvdCA1IC4uLgorCS8qIFdhaXQgZm9yIHRoZSBUU0wgdG8gZmluaXNoIGV4ZWN1dGluZyBhbGwgdGltZSBzbG90cyBiZWZvcmUKKwkgKiBleGl0aW5nIHRoaXMgZnVuY3Rpb24uICBXZSBtdXN0IGRvIHRoaXMgc28gdGhhdCB0aGUgbmV4dCBEQUMKKwkgKiB3cml0ZSBkb2Vzbid0IHN0YXJ0LCB0aGVyZWJ5IGVuYWJsaW5nIGNsb2NrL2NoaXAgc2VsZWN0IHNpZ25hbHM6CisJICoKKwkgKiAxLiBCZWZvcmUgdGhlIFRTTCBzZXF1ZW5jZSBjeWNsZXMgYmFjayB0byBzbG90IDAsIHdoaWNoIGRpc2FibGVzCisJICogICAgdGhlIGNsb2NrL2NzIHNpZ25hbCBnYXRpbmcgYW5kIHRyYXBzIHNsb3QgLy8gbGlzdCBleGVjdXRpb24uCisJICogICAgd2UgaGF2ZSBub3QgeWV0IGZpbmlzaGVkIHNsb3QgNSB0aGVuIHRoZSBjbG9jay9jcyBzaWduYWxzIGFyZQorCSAqICAgIHN0aWxsIGdhdGVkIGFuZCB3ZSBoYXZlIG5vdCBmaW5pc2hlZCB0cmFuc21pdHRpbmcgdGhlIHN0cmVhbS4KKwkgKgorCSAqIDIuIFdoaWxlIHNsb3RzIDItNSBhcmUgZXhlY3V0aW5nIGR1ZSB0byBhIGxhdGUgc2xvdCAwIHRyYXAuICBJbgorCSAqICAgIHRoaXMgY2FzZSwgdGhlIHNsb3Qgc2VxdWVuY2UgaXMgY3VycmVudGx5IHJlcGVhdGluZywgYnV0IHdpdGgKKwkgKiAgICBjbG9jay9jcyBzaWduYWxzIGRpc2FibGVkLiAgV2UgbXVzdCB3YWl0IGZvciBzbG90IDAgdG8gdHJhcAorCSAqICAgIGV4ZWN1dGlvbiBiZWZvcmUgc2V0dGluZyB1cCB0aGUgbmV4dCBEQUMgc2V0cG9pbnQgRE1BIHRyYW5zZmVyCisJICogICAgYW5kIGVuYWJsaW5nIHRoZSBjbG9jay9jcyBzaWduYWxzLiAgVG8gZGV0ZWN0IHRoZSBlbmQgb2Ygc2xvdCA1LAorCSAqICAgIHdlIHRlc3QgZm9yIHRoZSBGQl9CVUZGRVIyIE1TQiBjb250ZW50cyB0byBiZSBlcXVhbCB0byAweEZGLiAgSWYKKwkgKiAgICB0aGUgVFNMIGhhcyBub3QgeWV0IGZpbmlzaGVkIGV4ZWN1dGluZyBzbG90IDUgLi4uCisJICovCiAJaWYgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApIHsKLQkJLy8gVGhlIHRyYXAgd2FzIHNldCBvbiB0aW1lIGFuZCB3ZSBhcmUgc3RpbGwgZXhlY3V0aW5nIHNvbWV3aGVyZQotCQkvLyBpbiBzbG90cyAyLTUsIHNvIHdlIG5vdyB3YWl0IGZvciBzbG90IDAgdG8gZXhlY3V0ZSBhbmQgdHJhcAotCQkvLyBUU0wgZXhlY3V0aW9uLiAgVGhpcyBpcyBkZXRlY3RlZCB3aGVuIEZCX0JVRkZFUjIgTVNCIGNoYW5nZXMKLQkJLy8gZnJvbSAweEZGIHRvIDB4MDAsIHdoaWNoIHNsb3QgMCBjYXVzZXMgdG8gaGFwcGVuIGJ5IHNoaWZ0aW5nCi0JCS8vIG91dC9pbiBvbiBTRDIgdGhlIDB4MDAgdGhhdCBpcyBhbHdheXMgcmVmZXJlbmNlZCBieSBzbG90IDUuCi0JCXdoaWxlICgoUlI3MTQ2KFBfRkJfQlVGRkVSMikgJiAweEZGMDAwMDAwKSAhPSAwKSA7CisJCS8qIFRoZSB0cmFwIHdhcyBzZXQgb24gdGltZSBhbmQgd2UgYXJlIHN0aWxsIGV4ZWN1dGluZyBzb21ld2hlcmUKKwkJICogaW4gc2xvdHMgMi01LCBzbyB3ZSBub3cgd2FpdCBmb3Igc2xvdCAwIHRvIGV4ZWN1dGUgYW5kIHRyYXAKKwkJICogVFNMIGV4ZWN1dGlvbi4gIFRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBGQl9CVUZGRVIyIE1TQiBjaGFuZ2VzCisJCSAqIGZyb20gMHhGRiB0byAweDAwLCB3aGljaCBzbG90IDAgY2F1c2VzIHRvIGhhcHBlbiBieSBzaGlmdGluZworCQkgKiBvdXQvaW4gb24gU0QyIHRoZSAweDAwIHRoYXQgaXMgYWx3YXlzIHJlZmVyZW5jZWQgYnkgc2xvdCA1LgorCQkgKi8KKwkJIHdoaWxlICgoUlI3MTQ2KFBfRkJfQlVGRkVSMikgJiAweEZGMDAwMDAwKSAhPSAwKQorCQkJOwogCX0KLQkvLyBFaXRoZXIgKDEpIHdlIHdlcmUgdG9vIGxhdGUgc2V0dGluZyB0aGUgc2xvdCAwIHRyYXA7IHRoZSBUU0wKLQkvLyBzZXF1ZW5jZXIgcmVzdGFydGVkIHNsb3QgMCBiZWZvcmUgd2UgY291bGQgc2V0IHRoZSBFT1MgdHJhcCBmbGFnLAotCS8vIG9yICgyKSB3ZSB3ZXJlIG5vdCBsYXRlIGFuZCBleGVjdXRpb24gaXMgbm93IHRyYXBwZWQgYXQgc2xvdCAwLgotCS8vIEluIGVpdGhlciBjYXNlLCB3ZSBtdXN0IG5vdyBjaGFuZ2Ugc2xvdCAwIHNvIHRoYXQgaXQgd2lsbCBzdG9yZQotCS8vIHZhbHVlIDB4RkYgKGluc3RlYWQgb2YgMHgwMCkgdG8gRkJfQlVGRkVSMiBuZXh0IHRpbWUgaXQgZXhlY3V0ZXMuCi0JLy8gSW4gb3JkZXIgdG8gZG8gdGhpcywgd2UgcmVwcm9ncmFtIHNsb3QgMCBzbyB0aGF0IGl0IHdpbGwgc2hpZnQgaW4KLQkvLyBTRDMsIHdoaWNoIGlzIGRyaXZlbiBvbmx5IGJ5IGEgcHVsbC11cCByZXNpc3Rvci4KKwkvKiBFaXRoZXIgKDEpIHdlIHdlcmUgdG9vIGxhdGUgc2V0dGluZyB0aGUgc2xvdCAwIHRyYXA7IHRoZSBUU0wKKwkgKiBzZXF1ZW5jZXIgcmVzdGFydGVkIHNsb3QgMCBiZWZvcmUgd2UgY291bGQgc2V0IHRoZSBFT1MgdHJhcCBmbGFnLAorCSAqIG9yICgyKSB3ZSB3ZXJlIG5vdCBsYXRlIGFuZCBleGVjdXRpb24gaXMgbm93IHRyYXBwZWQgYXQgc2xvdCAwLgorCSAqIEluIGVpdGhlciBjYXNlLCB3ZSBtdXN0IG5vdyBjaGFuZ2Ugc2xvdCAwIHNvIHRoYXQgaXQgd2lsbCBzdG9yZQorCSAqIHZhbHVlIDB4RkYgKGluc3RlYWQgb2YgMHgwMCkgdG8gRkJfQlVGRkVSMiBuZXh0IHRpbWUgaXQgZXhlY3V0ZXMuCisJICogSW4gb3JkZXIgdG8gZG8gdGhpcywgd2UgcmVwcm9ncmFtIHNsb3QgMCBzbyB0aGF0IGl0IHdpbGwgc2hpZnQgaW4KKwkgKiBTRDMsIHdoaWNoIGlzIGRyaXZlbiBvbmx5IGJ5IGEgcHVsbC11cCByZXNpc3Rvci4KKwkgKi8KIAlTRVRWRUNUKDAsIFJTRDMgfCBTSUJfQTIgfCBFT1MpOwogCi0JLy8gV2FpdCBmb3Igc2xvdCAwIHRvIGV4ZWN1dGUsIGF0IHdoaWNoIHRpbWUgdGhlIFRTTCBpcyBzZXR1cCBmb3IKLQkvLyB0aGUgbmV4dCBEQUMgd3JpdGUuICBUaGlzIGlzIGRldGVjdGVkIHdoZW4gRkJfQlVGRkVSMiBNU0IgY2hhbmdlcwotCS8vIGZyb20gMHgwMCB0byAweEZGLgotCXdoaWxlICgoUlI3MTQ2KFBfRkJfQlVGRkVSMikgJiAweEZGMDAwMDAwKSA9PSAwKSA7CisJLyogV2FpdCBmb3Igc2xvdCAwIHRvIGV4ZWN1dGUsIGF0IHdoaWNoIHRpbWUgdGhlIFRTTCBpcyBzZXR1cCBmb3IKKwkgKiB0aGUgbmV4dCBEQUMgd3JpdGUuICBUaGlzIGlzIGRldGVjdGVkIHdoZW4gRkJfQlVGRkVSMiBNU0IgY2hhbmdlcworCSAqIGZyb20gMHgwMCB0byAweEZGLgorCSAqLworCXdoaWxlICgoUlI3MTQ2KFBfRkJfQlVGRkVSMikgJiAweEZGMDAwMDAwKSA9PSAwKQorCQk7CiB9CiAKLXN0YXRpYyB2b2lkIFdyaXRlTUlTQzIoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgTmV3SW1hZ2UpCitzdGF0aWMgdm9pZCBXcml0ZU1JU0MyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IE5ld0ltYWdlKQogewotCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9XRU5BQkxFKTsJLy8gZW5hYiB3cml0ZXMgdG8KLQkvLyBNSVNDMiByZWdpc3Rlci4KLQlERUJJd3JpdGUoZGV2LCBMUF9XUk1JU0MyLCBOZXdJbWFnZSk7CS8vIFdyaXRlIG5ldyBpbWFnZSB0byBNSVNDMi4KLQlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfV0RJU0FCTEUpOwkvLyBEaXNhYmxlIHdyaXRlcyB0byBNSVNDMi4KKwlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfV0VOQUJMRSk7CS8qICBlbmFiIHdyaXRlcyB0byAqLworCS8qICBNSVNDMiByZWdpc3Rlci4gKi8KKwlERUJJd3JpdGUoZGV2LCBMUF9XUk1JU0MyLCBOZXdJbWFnZSk7CS8qICBXcml0ZSBuZXcgaW1hZ2UgdG8gTUlTQzIuICovCisJREVCSXdyaXRlKGRldiwgTFBfTUlTQzEsIE1JU0MxX1dESVNBQkxFKTsJLyogIERpc2FibGUgd3JpdGVzIHRvIE1JU0MyLiAqLwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEluaXRpYWxpemUgdGhlIERFQkkgaW50ZXJmYWNlIGZvciBhbGwgdHJhbnNmZXJzLgorLyogIEluaXRpYWxpemUgdGhlIERFQkkgaW50ZXJmYWNlIGZvciBhbGwgdHJhbnNmZXJzLiAqLwogCi1zdGF0aWMgdWludDE2X3QgREVCSXJlYWQoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgYWRkcikKK3N0YXRpYyB1aW50MTZfdCBERUJJcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MTZfdCBhZGRyKQogewogCXVpbnQxNl90IHJldHZhbDsKIAotCS8vIFNldCB1cCBERUJJIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUgaW4gc2hhZG93IFJBTS4KKwkvKiAgU2V0IHVwIERFQkkgY29udHJvbCByZWdpc3RlciB2YWx1ZSBpbiBzaGFkb3cgUkFNLiAqLwogCVdSNzE0NihQX0RFQklDTUQsIERFQklfQ01EX1JEV09SRCB8IGFkZHIpOwogCi0JLy8gRXhlY3V0ZSB0aGUgREVCSSB0cmFuc2Zlci4KKwkvKiAgRXhlY3V0ZSB0aGUgREVCSSB0cmFuc2Zlci4gKi8KIAlERUJJdHJhbnNmZXIoZGV2KTsKIAotCS8vIEZldGNoIHRhcmdldCByZWdpc3RlciB2YWx1ZS4KKwkvKiAgRmV0Y2ggdGFyZ2V0IHJlZ2lzdGVyIHZhbHVlLiAqLwogCXJldHZhbCA9ICh1aW50MTZfdCkgUlI3MTQ2KFBfREVCSUFEKTsKIAotCS8vIFJldHVybiByZWdpc3RlciB2YWx1ZS4KKwkvKiAgUmV0dXJuIHJlZ2lzdGVyIHZhbHVlLiAqLwogCXJldHVybiByZXR2YWw7CiB9CiAKLS8vIEV4ZWN1dGUgYSBERUJJIHRyYW5zZmVyLiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhCi0vLyBjcml0aWNhbCBzZWN0aW9uLgotc3RhdGljIHZvaWQgREVCSXRyYW5zZmVyKGNvbWVkaV9kZXZpY2UgKiBkZXYpCisvKiAgRXhlY3V0ZSBhIERFQkkgdHJhbnNmZXIuICBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgKi8KKy8qICBjcml0aWNhbCBzZWN0aW9uLiAqLworc3RhdGljIHZvaWQgREVCSXRyYW5zZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JLy8gSW5pdGlhdGUgdXBsb2FkIG9mIHNoYWRvdyBSQU0gdG8gREVCSSBjb250cm9sIHJlZ2lzdGVyLgorCS8qICBJbml0aWF0ZSB1cGxvYWQgb2Ygc2hhZG93IFJBTSB0byBERUJJIGNvbnRyb2wgcmVnaXN0ZXIuICovCiAJTUNfRU5BQkxFKFBfTUMyLCBNQzJfVVBMRF9ERUJJKTsKIAotCS8vIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgdXBsb2FkIGZyb20gc2hhZG93IFJBTSB0byBERUJJIGNvbnRyb2wKLQkvLyByZWdpc3Rlci4KLQl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0RFQkkpKSA7CisJLyogIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgdXBsb2FkIGZyb20gc2hhZG93IFJBTSB0byBERUJJIGNvbnRyb2wgKi8KKwkvKiAgcmVnaXN0ZXIuICovCisJd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9ERUJJKSkKKwkJOwogCi0JLy8gV2FpdCB1bnRpbCBERUJJIHRyYW5zZmVyIGlzIGRvbmUuCi0Jd2hpbGUgKFJSNzE0NihQX1BTUikgJiBQU1JfREVCSV9TKSA7CisJLyogIFdhaXQgdW50aWwgREVCSSB0cmFuc2ZlciBpcyBkb25lLiAqLworCXdoaWxlIChSUjcxNDYoUF9QU1IpICYgUFNSX0RFQklfUykKKwkJOwogfQogCi0vLyBXcml0ZSBhIHZhbHVlIHRvIGEgZ2F0ZSBhcnJheSByZWdpc3Rlci4KLXN0YXRpYyB2b2lkIERFQkl3cml0ZShjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyLCB1aW50MTZfdCB3ZGF0YSkKKy8qICBXcml0ZSBhIHZhbHVlIHRvIGEgZ2F0ZSBhcnJheSByZWdpc3Rlci4gKi8KK3N0YXRpYyB2b2lkIERFQkl3cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MTZfdCBhZGRyLCB1aW50MTZfdCB3ZGF0YSkKIHsKIAotCS8vIFNldCB1cCBERUJJIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUgaW4gc2hhZG93IFJBTS4KKwkvKiAgU2V0IHVwIERFQkkgY29udHJvbCByZWdpc3RlciB2YWx1ZSBpbiBzaGFkb3cgUkFNLiAqLwogCVdSNzE0NihQX0RFQklDTUQsIERFQklfQ01EX1dSV09SRCB8IGFkZHIpOwogCVdSNzE0NihQX0RFQklBRCwgd2RhdGEpOwogCi0JLy8gRXhlY3V0ZSB0aGUgREVCSSB0cmFuc2Zlci4KKwkvKiAgRXhlY3V0ZSB0aGUgREVCSSB0cmFuc2Zlci4gKi8KIAlERUJJdHJhbnNmZXIoZGV2KTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJlcGxhY2UgdGhlIHNwZWNpZmllZCBiaXRzIGluIGEgZ2F0ZSBhcnJheSByZWdpc3Rlci4gIEltcG9ydHM6IG1hc2sKLS8vIHNwZWNpZmllcyBiaXRzIHRoYXQgYXJlIHRvIGJlIHByZXNlcnZlZCwgd2RhdGEgaXMgbmV3IHZhbHVlIHRvIGJlCi0vLyBvcidkIHdpdGggdGhlIG1hc2tlZCBvcmlnaW5hbC4KLXN0YXRpYyB2b2lkIERFQklyZXBsYWNlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGFkZHIsIHVpbnQxNl90IG1hc2ssCisvKiBSZXBsYWNlIHRoZSBzcGVjaWZpZWQgYml0cyBpbiBhIGdhdGUgYXJyYXkgcmVnaXN0ZXIuICBJbXBvcnRzOiBtYXNrCisgKiBzcGVjaWZpZXMgYml0cyB0aGF0IGFyZSB0byBiZSBwcmVzZXJ2ZWQsIHdkYXRhIGlzIG5ldyB2YWx1ZSB0byBiZQorICogb3InZCB3aXRoIHRoZSBtYXNrZWQgb3JpZ2luYWwuCisgKi8KK3N0YXRpYyB2b2lkIERFQklyZXBsYWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGFkZHIsIHVpbnQxNl90IG1hc2ssCiAJdWludDE2X3Qgd2RhdGEpCiB7CiAKLQkvLyBDb3B5IHRhcmdldCBnYXRlIGFycmF5IHJlZ2lzdGVyIGludG8gUF9ERUJJQUQgcmVnaXN0ZXIuCi0JV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfUkRXT1JEIHwgYWRkcik7CS8vIFNldCB1cCBERUJJIGNvbnRyb2wKLQkvLyByZWcgdmFsdWUgaW4gc2hhZG93Ci0JLy8gUkFNLgotCURFQkl0cmFuc2ZlcihkZXYpOwkvLyBFeGVjdXRlIHRoZSBERUJJCi0JLy8gUmVhZCB0cmFuc2Zlci4KKwkvKiAgQ29weSB0YXJnZXQgZ2F0ZSBhcnJheSByZWdpc3RlciBpbnRvIFBfREVCSUFEIHJlZ2lzdGVyLiAqLworCVdSNzE0NihQX0RFQklDTUQsIERFQklfQ01EX1JEV09SRCB8IGFkZHIpOworCS8qIFNldCB1cCBERUJJIGNvbnRyb2wgcmVnIHZhbHVlIGluIHNoYWRvdyBSQU0uICovCisJREVCSXRyYW5zZmVyKGRldik7CS8qICBFeGVjdXRlIHRoZSBERUJJIFJlYWQgdHJhbnNmZXIuICovCiAKLQkvLyBXcml0ZSBiYWNrIHRoZSBtb2RpZmllZCBpbWFnZS4KLQlXUjcxNDYoUF9ERUJJQ01ELCBERUJJX0NNRF9XUldPUkQgfCBhZGRyKTsJLy8gU2V0IHVwIERFQkkgY29udHJvbAotCS8vIHJlZyB2YWx1ZSBpbiBzaGFkb3cKLQkvLyBSQU0uCisJLyogIFdyaXRlIGJhY2sgdGhlIG1vZGlmaWVkIGltYWdlLiAqLworCVdSNzE0NihQX0RFQklDTUQsIERFQklfQ01EX1dSV09SRCB8IGFkZHIpOworCS8qIFNldCB1cCBERUJJIGNvbnRyb2wgcmVnIHZhbHVlIGluIHNoYWRvdyAgUkFNLiAqLwogCi0JV1I3MTQ2KFBfREVCSUFELCB3ZGF0YSB8ICgodWludDE2X3QpIFJSNzE0NihQX0RFQklBRCkgJiBtYXNrKSk7CS8vIE1vZGlmeSB0aGUgcmVnaXN0ZXIgaW1hZ2UuCi0JREVCSXRyYW5zZmVyKGRldik7CS8vIEV4ZWN1dGUgdGhlIERFQkkgV3JpdGUgdHJhbnNmZXIuCisJV1I3MTQ2KFBfREVCSUFELCB3ZGF0YSB8ICgodWludDE2X3QpIFJSNzE0NihQX0RFQklBRCkgJiBtYXNrKSk7CisJLyogTW9kaWZ5IHRoZSByZWdpc3RlciBpbWFnZS4gKi8KKwlERUJJdHJhbnNmZXIoZGV2KTsJLyogIEV4ZWN1dGUgdGhlIERFQkkgV3JpdGUgdHJhbnNmZXIuICovCiB9CiAKLXN0YXRpYyB2b2lkIENsb3NlRE1BQihjb21lZGlfZGV2aWNlICogZGV2LCBETUFCVUYgKiBwZG1hLCBzaXplX3QgYnNpemUpCitzdGF0aWMgdm9pZCBDbG9zZURNQUIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGJ1ZmZlckRNQSAqcGRtYSwgc2l6ZV90IGJzaXplKQogewogCXZvaWQgKnZicHRyOwogCWRtYV9hZGRyX3QgdnBwdHI7CkBAIC0yNzIzLDcgKzI3NDEsNyBAQAogCURFQlVHKCJDbG9zZURNQUI6IEVudGVyaW5nIFM2MjZEUlZfQ2xvc2VETUFCKCk6XG4iKTsKIAlpZiAocGRtYSA9PSBOVUxMKQogCQlyZXR1cm47Ci0JLy9maW5kIHRoZSBtYXRjaGluZyBhbGxvY2F0aW9uIGZyb20gdGhlIGJvYXJkIHN0cnVjdAorCS8qIGZpbmQgdGhlIG1hdGNoaW5nIGFsbG9jYXRpb24gZnJvbSB0aGUgYm9hcmQgc3RydWN0ICovCiAKIAl2YnB0ciA9IHBkbWEtPkxvZ2ljYWxCYXNlOwogCXZwcHRyID0gcGRtYS0+UGh5c2ljYWxCYXNlOwpAQCAtMjczNywyNjggKzI3NTUsMjYwIEBACiAJfQogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vICBDT1VOVEVSIEZVTkNUSU9OUyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBBbGwgY291bnRlciBmdW5jdGlvbnMgYWRkcmVzcyBhIHNwZWNpZmljIGNvdW50ZXIgYnkgbWVhbnMgb2YgdGhlCi0vLyAiQ291bnRlciIgYXJndW1lbnQsIHdoaWNoIGlzIGEgbG9naWNhbCBjb3VudGVyIG51bWJlci4gIFRoZSBDb3VudGVyCi0vLyBhcmd1bWVudCBtYXkgaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBsZWdhbCB2YWx1ZXM6IDA9MEEsIDE9MUEsCi0vLyAyPTJBLCAzPTBCLCA0PTFCLCA1PTJCLgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKiAqKioqKiogIENPVU5URVIgRlVOQ1RJT05TICAqKioqKioqICovCisvKiBBbGwgY291bnRlciBmdW5jdGlvbnMgYWRkcmVzcyBhIHNwZWNpZmljIGNvdW50ZXIgYnkgbWVhbnMgb2YgdGhlCisgKiAiQ291bnRlciIgYXJndW1lbnQsIHdoaWNoIGlzIGEgbG9naWNhbCBjb3VudGVyIG51bWJlci4gIFRoZSBDb3VudGVyCisgKiBhcmd1bWVudCBtYXkgaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBsZWdhbCB2YWx1ZXM6IDA9MEEsIDE9MUEsCisgKiAyPTJBLCAzPTBCLCA0PTFCLCA1PTJCLgorICovCiAKLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIGJvdGggQSBhbmQgQgotLy8gY291bnRlcnM6CisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGNvbW1vbiB0byBib3RoIEEgYW5kIEIgY291bnRlcnM6ICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8gUFJJVkFURSBDT1VOVEVSIEZVTkNUSU9OUyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qICoqKioqKiAgUFJJVkFURSBDT1VOVEVSIEZVTkNUSU9OUyAqKioqKiogKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJlYWQgYSBjb3VudGVyJ3Mgb3V0cHV0IGxhdGNoLgorLyogIFJlYWQgYSBjb3VudGVyJ3Mgb3V0cHV0IGxhdGNoLiAqLwogCi1zdGF0aWMgdWludDMyX3QgUmVhZExhdGNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB1aW50MzJfdCBSZWFkTGF0Y2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJlZ2lzdGVyIHVpbnQzMl90IHZhbHVlOwotCS8vREVCVUcgRklYTUUgREVCVUcoIlJlYWRMYXRjaDogUmVhZCBMYXRjaCBlbnRlclxuIik7CisJLyogREVCVUcgRklYTUUgREVCVUcoIlJlYWRMYXRjaDogUmVhZCBMYXRjaCBlbnRlclxuIik7ICovCiAKLQkvLyBMYXRjaCBjb3VudHMgYW5kIGZldGNoIExTVyBvZiBsYXRjaGVkIGNvdW50cyB2YWx1ZS4KKwkvKiAgTGF0Y2ggY291bnRzIGFuZCBmZXRjaCBMU1cgb2YgbGF0Y2hlZCBjb3VudHMgdmFsdWUuICovCiAJdmFsdWUgPSAodWludDMyX3QpIERFQklyZWFkKGRldiwgay0+TXlMYXRjaExzdyk7CiAKLQkvLyBGZXRjaCBNU1cgb2YgbGF0Y2hlZCBjb3VudHMgYW5kIGNvbWJpbmUgd2l0aCBMU1cuCisJLyogIEZldGNoIE1TVyBvZiBsYXRjaGVkIGNvdW50cyBhbmQgY29tYmluZSB3aXRoIExTVy4gKi8KIAl2YWx1ZSB8PSAoKHVpbnQzMl90KSBERUJJcmVhZChkZXYsIGstPk15TGF0Y2hMc3cgKyAyKSA8PCAxNik7CiAKLQkvLyBERUJVRyBGSVhNRSBERUJVRygiUmVhZExhdGNoOiBSZWFkIExhdGNoIGV4aXRcbiIpOworCS8qICBERUJVRyBGSVhNRSBERUJVRygiUmVhZExhdGNoOiBSZWFkIExhdGNoIGV4aXRcbiIpOyAqLwogCi0JLy8gUmV0dXJuIGxhdGNoZWQgY291bnRzLgorCS8qICBSZXR1cm4gbGF0Y2hlZCBjb3VudHMuICovCiAJcmV0dXJuIHZhbHVlOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBSZXNldCBhIGNvdW50ZXIncyBpbmRleCBhbmQgb3ZlcmZsb3cgZXZlbnQgY2FwdHVyZSBmbGFncy4KKy8qICBSZXNldCBhIGNvdW50ZXIncyBpbmRleCBhbmQgb3ZlcmZsb3cgZXZlbnQgY2FwdHVyZSBmbGFncy4gKi8KIAotc3RhdGljIHZvaWQgUmVzZXRDYXBGbGFnc19BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB2b2lkIFJlc2V0Q2FwRmxhZ3NfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQiwgKHVpbnQxNl90KSAofkNSQk1TS19JTlRDVFJMKSwKIAkJQ1JCTVNLX0lOVFJFU0VUQ01EIHwgQ1JCTVNLX0lOVFJFU0VUX0EpOwogfQogCi1zdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHZvaWQgUmVzZXRDYXBGbGFnc19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLCAodWludDE2X3QpICh+Q1JCTVNLX0lOVENUUkwpLAogCQlDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQik7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJldHVybiBjb3VudGVyIHNldHVwIGluIGEgZm9ybWF0IChDT1VOVEVSX1NFVFVQKSB0aGF0IGlzIGNvbnNpc3RlbnQKLS8vIGZvciBib3RoIEEgYW5kIEIgY291bnRlcnMuCisvKiAgUmV0dXJuIGNvdW50ZXIgc2V0dXAgaW4gYSBmb3JtYXQgKENPVU5URVJfU0VUVVApIHRoYXQgaXMgY29uc2lzdGVudCAqLworLyogIGZvciBib3RoIEEgYW5kIEIgY291bnRlcnMuICovCiAKLXN0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JhOwogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYjsKIAlyZWdpc3RlciB1aW50MTZfdCBzZXR1cDsKIAotCS8vIEZldGNoIENSQSBhbmQgQ1JCIHJlZ2lzdGVyIGltYWdlcy4KKwkvKiAgRmV0Y2ggQ1JBIGFuZCBDUkIgcmVnaXN0ZXIgaW1hZ2VzLiAqLwogCWNyYSA9IERFQklyZWFkKGRldiwgay0+TXlDUkEpOwogCWNyYiA9IERFQklyZWFkKGRldiwgay0+TXlDUkIpOwogCi0JLy8gUG9wdWxhdGUgdGhlIHN0YW5kYXJkaXplZCBjb3VudGVyIHNldHVwIGJpdCBmaWVsZHMuICBOb3RlOgotCS8vIEluZGV4U3JjIGlzIHJlc3RyaWN0ZWQgdG8gRU5DX1ggb3IgSW5keFBvbC4KLQlzZXR1cCA9ICgoY3JhICYgU1RETVNLX0xPQURTUkMpCS8vIExvYWRTcmMgID0gTG9hZFNyY0EuCi0JCXwgKChjcmIgPDwgKFNUREJJVF9MQVRDSFNSQyAtIENSQkJJVF9MQVRDSFNSQykpICYgU1RETVNLX0xBVENIU1JDKQkvLyBMYXRjaFNyYyA9IExhdGNoU3JjQS4KLQkJfCAoKGNyYSA8PCAoU1REQklUX0lOVFNSQyAtIENSQUJJVF9JTlRTUkNfQSkpICYgU1RETVNLX0lOVFNSQykJLy8gSW50U3JjICAgPSBJbnRTcmNBLgotCQl8ICgoY3JhIDw8IChTVERCSVRfSU5EWFNSQyAtIChDUkFCSVRfSU5EWFNSQ19BICsgMSkpKSAmIFNURE1TS19JTkRYU1JDKQkvLyBJbmR4U3JjICA9IEluZHhTcmNBPDE+LgotCQl8ICgoY3JhID4+IChDUkFCSVRfSU5EWFBPTF9BIC0gU1REQklUX0lORFhQT0wpKSAmIFNURE1TS19JTkRYUE9MKQkvLyBJbmR4UG9sICA9IEluZHhQb2xBLgotCQl8ICgoY3JiID4+IChDUkJCSVRfQ0xLRU5BQl9BIC0gU1REQklUX0NMS0VOQUIpKSAmIFNURE1TS19DTEtFTkFCKSk7CS8vIENsa0VuYWIgID0gQ2xrRW5hYkEuCisJLyogIFBvcHVsYXRlIHRoZSBzdGFuZGFyZGl6ZWQgY291bnRlciBzZXR1cCBiaXQgZmllbGRzLiAgTm90ZTogKi8KKwkvKiAgSW5kZXhTcmMgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLiAqLworCXNldHVwID0gKChjcmEgJiBTVERNU0tfTE9BRFNSQykJLyogIExvYWRTcmMgID0gTG9hZFNyY0EuICovCisJCXwgKChjcmIgPDwgKFNUREJJVF9MQVRDSFNSQyAtIENSQkJJVF9MQVRDSFNSQykpICYgU1RETVNLX0xBVENIU1JDKQkvKiAgTGF0Y2hTcmMgPSBMYXRjaFNyY0EuICovCisJCXwgKChjcmEgPDwgKFNUREJJVF9JTlRTUkMgLSBDUkFCSVRfSU5UU1JDX0EpKSAmIFNURE1TS19JTlRTUkMpCS8qICBJbnRTcmMgICA9IEludFNyY0EuICovCisJCXwgKChjcmEgPDwgKFNUREJJVF9JTkRYU1JDIC0gKENSQUJJVF9JTkRYU1JDX0EgKyAxKSkpICYgU1RETVNLX0lORFhTUkMpCS8qICBJbmR4U3JjICA9IEluZHhTcmNBPDE+LiAqLworCQl8ICgoY3JhID4+IChDUkFCSVRfSU5EWFBPTF9BIC0gU1REQklUX0lORFhQT0wpKSAmIFNURE1TS19JTkRYUE9MKQkvKiAgSW5keFBvbCAgPSBJbmR4UG9sQS4gKi8KKwkJfCAoKGNyYiA+PiAoQ1JCQklUX0NMS0VOQUJfQSAtIFNUREJJVF9DTEtFTkFCKSkgJiBTVERNU0tfQ0xLRU5BQikpOwkvKiAgQ2xrRW5hYiAgPSBDbGtFbmFiQS4gKi8KIAotCS8vIEFkanVzdCBtb2RlLWRlcGVuZGVudCBwYXJhbWV0ZXJzLgotCWlmIChjcmEgJiAoMiA8PCBDUkFCSVRfQ0xLU1JDX0EpKQkvLyBJZiBUaW1lciBtb2RlIChDbGtTcmNBPDE+ID09IDEpOgotCQlzZXR1cCB8PSAoKENMS1NSQ19USU1FUiA8PCBTVERCSVRfQ0xLU1JDKQkvLyAgIEluZGljYXRlIFRpbWVyIG1vZGUuCi0JCQl8ICgoY3JhIDw8IChTVERCSVRfQ0xLUE9MIC0gQ1JBQklUX0NMS1NSQ19BKSkgJiBTVERNU0tfQ0xLUE9MKQkvLyAgIFNldCBDbGtQb2wgdG8gaW5kaWNhdGUgY291bnQgZGlyZWN0aW9uIChDbGtTcmNBPDA+KS4KLQkJCXwgKE1VTFRfWDEgPDwgU1REQklUX0NMS01VTFQpKTsJLy8gICBDbGtNdWx0IG11c3QgYmUgMXggaW4gVGltZXIgbW9kZS4KKwkvKiAgQWRqdXN0IG1vZGUtZGVwZW5kZW50IHBhcmFtZXRlcnMuICovCisJaWYgKGNyYSAmICgyIDw8IENSQUJJVF9DTEtTUkNfQSkpCS8qICBJZiBUaW1lciBtb2RlIChDbGtTcmNBPDE+ID09IDEpOiAqLworCQlzZXR1cCB8PSAoKENMS1NSQ19USU1FUiA8PCBTVERCSVRfQ0xLU1JDKQkvKiAgICBJbmRpY2F0ZSBUaW1lciBtb2RlLiAqLworCQkJfCAoKGNyYSA8PCAoU1REQklUX0NMS1BPTCAtIENSQUJJVF9DTEtTUkNfQSkpICYgU1RETVNLX0NMS1BPTCkJLyogICAgU2V0IENsa1BvbCB0byBpbmRpY2F0ZSBjb3VudCBkaXJlY3Rpb24gKENsa1NyY0E8MD4pLiAqLworCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkpOwkvKiAgICBDbGtNdWx0IG11c3QgYmUgMXggaW4gVGltZXIgbW9kZS4gKi8KIAotCWVsc2UJCQkvLyBJZiBDb3VudGVyIG1vZGUgKENsa1NyY0E8MT4gPT0gMCk6Ci0JCXNldHVwIHw9ICgoQ0xLU1JDX0NPVU5URVIgPDwgU1REQklUX0NMS1NSQykJLy8gICBJbmRpY2F0ZSBDb3VudGVyIG1vZGUuCi0JCQl8ICgoY3JhID4+IChDUkFCSVRfQ0xLUE9MX0EgLSBTVERCSVRfQ0xLUE9MKSkgJiBTVERNU0tfQ0xLUE9MKQkvLyAgIFBhc3MgdGhyb3VnaCBDbGtQb2wuCi0JCQl8ICgoKGNyYSAmIENSQU1TS19DTEtNVUxUX0EpID09IChNVUxUX1gwIDw8IENSQUJJVF9DTEtNVUxUX0EpKSA/CS8vICAgRm9yY2UgQ2xrTXVsdCB0byAxeCBpZiBub3QgbGVnYWwsIGVsc2UgcGFzcyB0aHJvdWdoLgorCWVsc2UJCQkvKiAgSWYgQ291bnRlciBtb2RlIChDbGtTcmNBPDE+ID09IDApOiAqLworCQlzZXR1cCB8PSAoKENMS1NSQ19DT1VOVEVSIDw8IFNUREJJVF9DTEtTUkMpCS8qICAgIEluZGljYXRlIENvdW50ZXIgbW9kZS4gKi8KKwkJCXwgKChjcmEgPj4gKENSQUJJVF9DTEtQT0xfQSAtIFNUREJJVF9DTEtQT0wpKSAmIFNURE1TS19DTEtQT0wpCS8qICAgIFBhc3MgdGhyb3VnaCBDbGtQb2wuICovCisJCQl8ICgoKGNyYSAmIENSQU1TS19DTEtNVUxUX0EpID09IChNVUxUX1gwIDw8IENSQUJJVF9DTEtNVUxUX0EpKSA/CS8qICAgIEZvcmNlIENsa011bHQgdG8gMXggaWYgbm90IGxlZ2FsLCBlbHNlIHBhc3MgdGhyb3VnaC4gKi8KIAkJCQkoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkgOgogCQkJCSgoY3JhID4+IChDUkFCSVRfQ0xLTVVMVF9BIC0KIAkJCQkJCQlTVERCSVRfQ0xLTVVMVCkpICYKIAkJCQkJU1RETVNLX0NMS01VTFQpKSk7CiAKLQkvLyBSZXR1cm4gYWRqdXN0ZWQgY291bnRlciBzZXR1cC4KKwkvKiAgUmV0dXJuIGFkanVzdGVkIGNvdW50ZXIgc2V0dXAuICovCiAJcmV0dXJuIHNldHVwOwogfQogCi1zdGF0aWMgdWludDE2X3QgR2V0TW9kZV9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYTsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmI7CiAJcmVnaXN0ZXIgdWludDE2X3Qgc2V0dXA7CiAKLQkvLyBGZXRjaCBDUkEgYW5kIENSQiByZWdpc3RlciBpbWFnZXMuCisJLyogIEZldGNoIENSQSBhbmQgQ1JCIHJlZ2lzdGVyIGltYWdlcy4gKi8KIAljcmEgPSBERUJJcmVhZChkZXYsIGstPk15Q1JBKTsKIAljcmIgPSBERUJJcmVhZChkZXYsIGstPk15Q1JCKTsKIAotCS8vIFBvcHVsYXRlIHRoZSBzdGFuZGFyZGl6ZWQgY291bnRlciBzZXR1cCBiaXQgZmllbGRzLiAgTm90ZToKLQkvLyBJbmRleFNyYyBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuCi0Jc2V0dXAgPSAoKChjcmIgPDwgKFNUREJJVF9JTlRTUkMgLSBDUkJCSVRfSU5UU1JDX0IpKSAmIFNURE1TS19JTlRTUkMpCS8vIEludFNyYyAgID0gSW50U3JjQi4KLQkJfCAoKGNyYiA8PCAoU1REQklUX0xBVENIU1JDIC0gQ1JCQklUX0xBVENIU1JDKSkgJiBTVERNU0tfTEFUQ0hTUkMpCS8vIExhdGNoU3JjID0gTGF0Y2hTcmNCLgotCQl8ICgoY3JiIDw8IChTVERCSVRfTE9BRFNSQyAtIENSQkJJVF9MT0FEU1JDX0IpKSAmIFNURE1TS19MT0FEU1JDKQkvLyBMb2FkU3JjICA9IExvYWRTcmNCLgotCQl8ICgoY3JiIDw8IChTVERCSVRfSU5EWFBPTCAtIENSQkJJVF9JTkRYUE9MX0IpKSAmIFNURE1TS19JTkRYUE9MKQkvLyBJbmR4UG9sICA9IEluZHhQb2xCLgotCQl8ICgoY3JiID4+IChDUkJCSVRfQ0xLRU5BQl9CIC0gU1REQklUX0NMS0VOQUIpKSAmIFNURE1TS19DTEtFTkFCKQkvLyBDbGtFbmFiICA9IENsa0VuYWJCLgotCQl8ICgoY3JhID4+ICgoQ1JBQklUX0lORFhTUkNfQiArIDEpIC0gU1REQklUX0lORFhTUkMpKSAmIFNURE1TS19JTkRYU1JDKSk7CS8vIEluZHhTcmMgID0gSW5keFNyY0I8MT4uCisJLyogIFBvcHVsYXRlIHRoZSBzdGFuZGFyZGl6ZWQgY291bnRlciBzZXR1cCBiaXQgZmllbGRzLiAgTm90ZTogKi8KKwkvKiAgSW5kZXhTcmMgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLiAqLworCXNldHVwID0gKCgoY3JiIDw8IChTVERCSVRfSU5UU1JDIC0gQ1JCQklUX0lOVFNSQ19CKSkgJiBTVERNU0tfSU5UU1JDKQkvKiAgSW50U3JjICAgPSBJbnRTcmNCLiAqLworCQl8ICgoY3JiIDw8IChTVERCSVRfTEFUQ0hTUkMgLSBDUkJCSVRfTEFUQ0hTUkMpKSAmIFNURE1TS19MQVRDSFNSQykJLyogIExhdGNoU3JjID0gTGF0Y2hTcmNCLiAqLworCQl8ICgoY3JiIDw8IChTVERCSVRfTE9BRFNSQyAtIENSQkJJVF9MT0FEU1JDX0IpKSAmIFNURE1TS19MT0FEU1JDKQkvKiAgTG9hZFNyYyAgPSBMb2FkU3JjQi4gKi8KKwkJfCAoKGNyYiA8PCAoU1REQklUX0lORFhQT0wgLSBDUkJCSVRfSU5EWFBPTF9CKSkgJiBTVERNU0tfSU5EWFBPTCkJLyogIEluZHhQb2wgID0gSW5keFBvbEIuICovCisJCXwgKChjcmIgPj4gKENSQkJJVF9DTEtFTkFCX0IgLSBTVERCSVRfQ0xLRU5BQikpICYgU1RETVNLX0NMS0VOQUIpCS8qICBDbGtFbmFiICA9IENsa0VuYWJCLiAqLworCQl8ICgoY3JhID4+ICgoQ1JBQklUX0lORFhTUkNfQiArIDEpIC0gU1REQklUX0lORFhTUkMpKSAmIFNURE1TS19JTkRYU1JDKSk7CS8qICBJbmR4U3JjICA9IEluZHhTcmNCPDE+LiAqLwogCi0JLy8gQWRqdXN0IG1vZGUtZGVwZW5kZW50IHBhcmFtZXRlcnMuCi0JaWYgKChjcmIgJiBDUkJNU0tfQ0xLTVVMVF9CKSA9PSAoTVVMVF9YMCA8PCBDUkJCSVRfQ0xLTVVMVF9CKSkJLy8gSWYgRXh0ZW5kZXIgbW9kZSAoQ2xrTXVsdEIgPT0gTVVMVF9YMCk6Ci0JCXNldHVwIHw9ICgoQ0xLU1JDX0VYVEVOREVSIDw8IFNUREJJVF9DTEtTUkMpCS8vICAgSW5kaWNhdGUgRXh0ZW5kZXIgbW9kZS4KLQkJCXwgKE1VTFRfWDEgPDwgU1REQklUX0NMS01VTFQpCS8vICAgSW5kaWNhdGUgbXVsdGlwbGllciBpcyAxeC4KLQkJCXwgKChjcmEgPj4gKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSAmIFNURE1TS19DTEtQT0wpKTsJLy8gICBTZXQgQ2xrUG9sIGVxdWFsIHRvIFRpbWVyIGNvdW50IGRpcmVjdGlvbiAoQ2xrU3JjQjwwPikuCisJLyogIEFkanVzdCBtb2RlLWRlcGVuZGVudCBwYXJhbWV0ZXJzLiAqLworCWlmICgoY3JiICYgQ1JCTVNLX0NMS01VTFRfQikgPT0gKE1VTFRfWDAgPDwgQ1JCQklUX0NMS01VTFRfQikpCS8qICBJZiBFeHRlbmRlciBtb2RlIChDbGtNdWx0QiA9PSBNVUxUX1gwKTogKi8KKwkJc2V0dXAgfD0gKChDTEtTUkNfRVhURU5ERVIgPDwgU1REQklUX0NMS1NSQykJLyogICAgSW5kaWNhdGUgRXh0ZW5kZXIgbW9kZS4gKi8KKwkJCXwgKE1VTFRfWDEgPDwgU1REQklUX0NMS01VTFQpCS8qICAgIEluZGljYXRlIG11bHRpcGxpZXIgaXMgMXguICovCisJCQl8ICgoY3JhID4+IChDUkFCSVRfQ0xLU1JDX0IgLSBTVERCSVRfQ0xLUE9MKSkgJiBTVERNU0tfQ0xLUE9MKSk7CS8qICAgIFNldCBDbGtQb2wgZXF1YWwgdG8gVGltZXIgY291bnQgZGlyZWN0aW9uIChDbGtTcmNCPDA+KS4gKi8KIAotCWVsc2UgaWYgKGNyYSAmICgyIDw8IENSQUJJVF9DTEtTUkNfQikpCS8vIElmIFRpbWVyIG1vZGUgKENsa1NyY0I8MT4gPT0gMSk6Ci0JCXNldHVwIHw9ICgoQ0xLU1JDX1RJTUVSIDw8IFNUREJJVF9DTEtTUkMpCS8vICAgSW5kaWNhdGUgVGltZXIgbW9kZS4KLQkJCXwgKE1VTFRfWDEgPDwgU1REQklUX0NMS01VTFQpCS8vICAgSW5kaWNhdGUgbXVsdGlwbGllciBpcyAxeC4KLQkJCXwgKChjcmEgPj4gKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSAmIFNURE1TS19DTEtQT0wpKTsJLy8gICBTZXQgQ2xrUG9sIGVxdWFsIHRvIFRpbWVyIGNvdW50IGRpcmVjdGlvbiAoQ2xrU3JjQjwwPikuCisJZWxzZSBpZiAoY3JhICYgKDIgPDwgQ1JBQklUX0NMS1NSQ19CKSkJLyogIElmIFRpbWVyIG1vZGUgKENsa1NyY0I8MT4gPT0gMSk6ICovCisJCXNldHVwIHw9ICgoQ0xLU1JDX1RJTUVSIDw8IFNUREJJVF9DTEtTUkMpCS8qICAgIEluZGljYXRlIFRpbWVyIG1vZGUuICovCisJCQl8IChNVUxUX1gxIDw8IFNUREJJVF9DTEtNVUxUKQkvKiAgICBJbmRpY2F0ZSBtdWx0aXBsaWVyIGlzIDF4LiAqLworCQkJfCAoKGNyYSA+PiAoQ1JBQklUX0NMS1NSQ19CIC0gU1REQklUX0NMS1BPTCkpICYgU1RETVNLX0NMS1BPTCkpOwkvKiAgICBTZXQgQ2xrUG9sIGVxdWFsIHRvIFRpbWVyIGNvdW50IGRpcmVjdGlvbiAoQ2xrU3JjQjwwPikuICovCiAKLQllbHNlCQkJLy8gSWYgQ291bnRlciBtb2RlIChDbGtTcmNCPDE+ID09IDApOgotCQlzZXR1cCB8PSAoKENMS1NSQ19DT1VOVEVSIDw8IFNUREJJVF9DTEtTUkMpCS8vICAgSW5kaWNhdGUgVGltZXIgbW9kZS4KLQkJCXwgKChjcmIgPj4gKENSQkJJVF9DTEtNVUxUX0IgLSBTVERCSVRfQ0xLTVVMVCkpICYgU1RETVNLX0NMS01VTFQpCS8vICAgQ2xvY2sgbXVsdGlwbGllciBpcyBwYXNzZWQgdGhyb3VnaC4KLQkJCXwgKChjcmIgPDwgKFNUREJJVF9DTEtQT0wgLSBDUkJCSVRfQ0xLUE9MX0IpKSAmIFNURE1TS19DTEtQT0wpKTsJLy8gICBDbG9jayBwb2xhcml0eSBpcyBwYXNzZWQgdGhyb3VnaC4KKwllbHNlCQkJLyogIElmIENvdW50ZXIgbW9kZSAoQ2xrU3JjQjwxPiA9PSAwKTogKi8KKwkJc2V0dXAgfD0gKChDTEtTUkNfQ09VTlRFUiA8PCBTVERCSVRfQ0xLU1JDKQkvKiAgICBJbmRpY2F0ZSBUaW1lciBtb2RlLiAqLworCQkJfCAoKGNyYiA+PiAoQ1JCQklUX0NMS01VTFRfQiAtIFNUREJJVF9DTEtNVUxUKSkgJiBTVERNU0tfQ0xLTVVMVCkJLyogICAgQ2xvY2sgbXVsdGlwbGllciBpcyBwYXNzZWQgdGhyb3VnaC4gKi8KKwkJCXwgKChjcmIgPDwgKFNUREJJVF9DTEtQT0wgLSBDUkJCSVRfQ0xLUE9MX0IpKSAmIFNURE1TS19DTEtQT0wpKTsJLyogICAgQ2xvY2sgcG9sYXJpdHkgaXMgcGFzc2VkIHRocm91Z2guICovCiAKLQkvLyBSZXR1cm4gYWRqdXN0ZWQgY291bnRlciBzZXR1cC4KKwkvKiAgUmV0dXJuIGFkanVzdGVkIGNvdW50ZXIgc2V0dXAuICovCiAJcmV0dXJuIHNldHVwOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFNldCB0aGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSBzcGVjaWZpZWQgY291bnRlci4gIFRoZSBzZXR1cAotLy8gcGFyYW1ldGVyIGlzIHRyZWF0ZWQgYXMgYSBDT1VOVEVSX1NFVFVQIGRhdGEgdHlwZS4gIFRoZSBmb2xsb3dpbmcKLS8vIHBhcmFtZXRlcnMgYXJlIHByb2dyYW1tYWJsZSAoYWxsIG90aGVyIHBhcm1zIGFyZSBpZ25vcmVkKTogQ2xrTXVsdCwKLS8vIENsa1BvbCwgQ2xrRW5hYiwgSW5kZXhTcmMsIEluZGV4UG9sLCBMb2FkU3JjLgorLyoKKyAqIFNldCB0aGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSBzcGVjaWZpZWQgY291bnRlci4gIFRoZSBzZXR1cAorICogcGFyYW1ldGVyIGlzIHRyZWF0ZWQgYXMgYSBDT1VOVEVSX1NFVFVQIGRhdGEgdHlwZS4gIFRoZSBmb2xsb3dpbmcKKyAqIHBhcmFtZXRlcnMgYXJlIHByb2dyYW1tYWJsZSAoYWxsIG90aGVyIHBhcm1zIGFyZSBpZ25vcmVkKTogQ2xrTXVsdCwKKyAqIENsa1BvbCwgQ2xrRW5hYiwgSW5kZXhTcmMsIEluZGV4UG9sLCBMb2FkU3JjLgorICovCiAKLXN0YXRpYyB2b2lkIFNldE1vZGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFNldHVwLAorc3RhdGljIHZvaWQgU2V0TW9kZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgU2V0dXAsCiAJdWludDE2X3QgRGlzYWJsZUludFNyYykKIHsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmE7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JiOwotCXJlZ2lzdGVyIHVpbnQxNl90IHNldHVwID0gU2V0dXA7CS8vIENhY2hlIHRoZSBTdGFuZGFyZCBTZXR1cC4KKwlyZWdpc3RlciB1aW50MTZfdCBzZXR1cCA9IFNldHVwOwkvKiAgQ2FjaGUgdGhlIFN0YW5kYXJkIFNldHVwLiAqLwogCi0JLy8gSW5pdGlhbGl6ZSBDUkEgYW5kIENSQiBpbWFnZXMuCi0JY3JhID0gKChzZXR1cCAmIENSQU1TS19MT0FEU1JDX0EpCS8vIFByZWxvYWQgdHJpZ2dlciBpcyBwYXNzZWQgdGhyb3VnaC4KLQkJfCAoKHNldHVwICYgU1RETVNLX0lORFhTUkMpID4+IChTVERCSVRfSU5EWFNSQyAtIChDUkFCSVRfSU5EWFNSQ19BICsgMSkpKSk7CS8vIEluZGV4U3JjIGlzIHJlc3RyaWN0ZWQgdG8gRU5DX1ggb3IgSW5keFBvbC4KKwkvKiAgSW5pdGlhbGl6ZSBDUkEgYW5kIENSQiBpbWFnZXMuICovCisJY3JhID0gKChzZXR1cCAmIENSQU1TS19MT0FEU1JDX0EpCS8qICBQcmVsb2FkIHRyaWdnZXIgaXMgcGFzc2VkIHRocm91Z2guICovCisJCXwgKChzZXR1cCAmIFNURE1TS19JTkRYU1JDKSA+PiAoU1REQklUX0lORFhTUkMgLSAoQ1JBQklUX0lORFhTUkNfQSArIDEpKSkpOwkvKiAgSW5kZXhTcmMgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLiAqLwogCi0JY3JiID0gKENSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9BCS8vIFJlc2V0IGFueSBwZW5kaW5nIENvdW50ZXJBIGV2ZW50IGNhcHR1cmVzLgotCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLRU5BQikgPDwgKENSQkJJVF9DTEtFTkFCX0EgLSBTVERCSVRfQ0xLRU5BQikpKTsJLy8gQ2xvY2sgZW5hYmxlIGlzIHBhc3NlZCB0aHJvdWdoLgorCWNyYiA9IChDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQQkvKiAgUmVzZXQgYW55IHBlbmRpbmcgQ291bnRlckEgZXZlbnQgY2FwdHVyZXMuICovCisJCXwgKChzZXR1cCAmIFNURE1TS19DTEtFTkFCKSA8PCAoQ1JCQklUX0NMS0VOQUJfQSAtIFNUREJJVF9DTEtFTkFCKSkpOwkvKiAgQ2xvY2sgZW5hYmxlIGlzIHBhc3NlZCB0aHJvdWdoLiAqLwogCi0JLy8gRm9yY2UgSW50U3JjIHRvIERpc2FibGVkIGlmIERpc2FibGVJbnRTcmMgaXMgYXNzZXJ0ZWQuCisJLyogIEZvcmNlIEludFNyYyB0byBEaXNhYmxlZCBpZiBEaXNhYmxlSW50U3JjIGlzIGFzc2VydGVkLiAqLwogCWlmICghRGlzYWJsZUludFNyYykKIAkJY3JhIHw9ICgoc2V0dXAgJiBTVERNU0tfSU5UU1JDKSA+PiAoU1REQklUX0lOVFNSQyAtCiAJCQkJQ1JBQklUX0lOVFNSQ19BKSk7CiAKLQkvLyBQb3B1bGF0ZSBhbGwgbW9kZS1kZXBlbmRlbnQgYXR0cmlidXRlcyBvZiBDUkEgJiBDUkIgaW1hZ2VzLgorCS8qICBQb3B1bGF0ZSBhbGwgbW9kZS1kZXBlbmRlbnQgYXR0cmlidXRlcyBvZiBDUkEgJiBDUkIgaW1hZ2VzLiAqLwogCXN3aXRjaCAoKHNldHVwICYgU1RETVNLX0NMS1NSQykgPj4gU1REQklUX0NMS1NSQykgewotCWNhc2UgQ0xLU1JDX0VYVEVOREVSOgkvLyBFeHRlbmRlciBNb2RlOiBGb3JjZSB0byBUaW1lciBtb2RlCi0JCS8vIChFeHRlbmRlciB2YWxpZCBvbmx5IGZvciBCIGNvdW50ZXJzKS4KKwljYXNlIENMS1NSQ19FWFRFTkRFUjoJLyogIEV4dGVuZGVyIE1vZGU6IEZvcmNlIHRvIFRpbWVyIG1vZGUgKi8KKwkJLyogIChFeHRlbmRlciB2YWxpZCBvbmx5IGZvciBCIGNvdW50ZXJzKS4gKi8KIAotCWNhc2UgQ0xLU1JDX1RJTUVSOgkvLyBUaW1lciBNb2RlOgotCQljcmEgfD0gKCgyIDw8IENSQUJJVF9DTEtTUkNfQSkJLy8gICBDbGtTcmNBPDE+IHNlbGVjdHMgc3lzdGVtIGNsb2NrCi0JCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA+PiAoU1REQklUX0NMS1BPTCAtIENSQUJJVF9DTEtTUkNfQSkpCS8vICAgICB3aXRoIGNvdW50IGRpcmVjdGlvbiAoQ2xrU3JjQTwwPikgb2J0YWluZWQgZnJvbSBDbGtQb2wuCi0JCQl8ICgxIDw8IENSQUJJVF9DTEtQT0xfQSkJLy8gICBDbGtQb2xBIGJlaGF2ZXMgYXMgYWx3YXlzLW9uIGNsb2NrIGVuYWJsZS4KLQkJCXwgKE1VTFRfWDEgPDwgQ1JBQklUX0NMS01VTFRfQSkpOwkvLyAgIENsa011bHQgbXVzdCBiZSAxeC4KKwljYXNlIENMS1NSQ19USU1FUjoJLyogIFRpbWVyIE1vZGU6ICovCisJCWNyYSB8PSAoKDIgPDwgQ1JBQklUX0NMS1NSQ19BKQkvKiAgICBDbGtTcmNBPDE+IHNlbGVjdHMgc3lzdGVtIGNsb2NrICovCisJCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA+PiAoU1REQklUX0NMS1BPTCAtIENSQUJJVF9DTEtTUkNfQSkpCS8qICAgICAgd2l0aCBjb3VudCBkaXJlY3Rpb24gKENsa1NyY0E8MD4pIG9idGFpbmVkIGZyb20gQ2xrUG9sLiAqLworCQkJfCAoMSA8PCBDUkFCSVRfQ0xLUE9MX0EpCS8qICAgIENsa1BvbEEgYmVoYXZlcyBhcyBhbHdheXMtb24gY2xvY2sgZW5hYmxlLiAqLworCQkJfCAoTVVMVF9YMSA8PCBDUkFCSVRfQ0xLTVVMVF9BKSk7CS8qICAgIENsa011bHQgbXVzdCBiZSAxeC4gKi8KIAkJYnJlYWs7CiAKLQlkZWZhdWx0OgkJLy8gQ291bnRlciBNb2RlOgotCQljcmEgfD0gKENMS1NSQ19DT1VOVEVSCS8vICAgU2VsZWN0IEVOQ19DIGFuZCBFTkNfRCBhcyBjbG9jay9kaXJlY3Rpb24gaW5wdXRzLgotCQkJfCAoKHNldHVwICYgU1RETVNLX0NMS1BPTCkgPDwgKENSQUJJVF9DTEtQT0xfQSAtIFNUREJJVF9DTEtQT0wpKQkvLyAgIENsb2NrIHBvbGFyaXR5IGlzIHBhc3NlZCB0aHJvdWdoLgotCQkJfCAoKChzZXR1cCAmIFNURE1TS19DTEtNVUxUKSA9PSAoTVVMVF9YMCA8PCBTVERCSVRfQ0xLTVVMVCkpID8JLy8gICBGb3JjZSBtdWx0aXBsaWVyIHRvIHgxIGlmIG5vdCBsZWdhbCwgb3RoZXJ3aXNlIHBhc3MgdGhyb3VnaC4KKwlkZWZhdWx0OgkJLyogIENvdW50ZXIgTW9kZTogKi8KKwkJY3JhIHw9IChDTEtTUkNfQ09VTlRFUgkvKiAgICBTZWxlY3QgRU5DX0MgYW5kIEVOQ19EIGFzIGNsb2NrL2RpcmVjdGlvbiBpbnB1dHMuICovCisJCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA8PCAoQ1JBQklUX0NMS1BPTF9BIC0gU1REQklUX0NMS1BPTCkpCS8qICAgIENsb2NrIHBvbGFyaXR5IGlzIHBhc3NlZCB0aHJvdWdoLiAqLworCQkJfCAoKChzZXR1cCAmIFNURE1TS19DTEtNVUxUKSA9PSAoTVVMVF9YMCA8PCBTVERCSVRfQ0xLTVVMVCkpID8JLyogICAgRm9yY2UgbXVsdGlwbGllciB0byB4MSBpZiBub3QgbGVnYWwsIG90aGVyd2lzZSBwYXNzIHRocm91Z2guICovCiAJCQkJKE1VTFRfWDEgPDwgQ1JBQklUX0NMS01VTFRfQSkgOgogCQkJCSgoc2V0dXAgJiBTVERNU0tfQ0xLTVVMVCkgPDwgKENSQUJJVF9DTEtNVUxUX0EgLQogCQkJCQkJU1REQklUX0NMS01VTFQpKSkpOwogCX0KIAotCS8vIEZvcmNlIHBvc2l0aXZlIGluZGV4IHBvbGFyaXR5IGlmIEluZHhTcmMgaXMgc29mdHdhcmUtZHJpdmVuIG9ubHksCi0JLy8gb3RoZXJ3aXNlIHBhc3MgaXQgdGhyb3VnaC4KKwkvKiAgRm9yY2UgcG9zaXRpdmUgaW5kZXggcG9sYXJpdHkgaWYgSW5keFNyYyBpcyBzb2Z0d2FyZS1kcml2ZW4gb25seSwgKi8KKwkvKiAgb3RoZXJ3aXNlIHBhc3MgaXQgdGhyb3VnaC4gKi8KIAlpZiAofnNldHVwICYgU1RETVNLX0lORFhTUkMpCiAJCWNyYSB8PSAoKHNldHVwICYgU1RETVNLX0lORFhQT0wpIDw8IChDUkFCSVRfSU5EWFBPTF9BIC0KIAkJCQlTVERCSVRfSU5EWFBPTCkpOwogCi0JLy8gSWYgSW50U3JjIGhhcyBiZWVuIGZvcmNlZCB0byBEaXNhYmxlZCwgdXBkYXRlIHRoZSBNSVNDMiBpbnRlcnJ1cHQKLQkvLyBlbmFibGUgbWFzayB0byBpbmRpY2F0ZSB0aGUgY291bnRlciBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisJLyogIElmIEludFNyYyBoYXMgYmVlbiBmb3JjZWQgdG8gRGlzYWJsZWQsIHVwZGF0ZSB0aGUgTUlTQzIgaW50ZXJydXB0ICovCisJLyogIGVuYWJsZSBtYXNrIHRvIGluZGljYXRlIHRoZSBjb3VudGVyIGludGVycnVwdCBpcyBkaXNhYmxlZC4gKi8KIAlpZiAoRGlzYWJsZUludFNyYykKIAkJZGV2cHJpdi0+Q291bnRlckludEVuYWJzICY9IH5rLT5NeUV2ZW50Qml0c1szXTsKIAotCS8vIFdoaWxlIHJldGFpbmluZyBDb3VudGVyQiBhbmQgTGF0Y2hTcmMgY29uZmlndXJhdGlvbnMsIHByb2dyYW0gdGhlCi0JLy8gbmV3IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUuCisJLyogIFdoaWxlIHJldGFpbmluZyBDb3VudGVyQiBhbmQgTGF0Y2hTcmMgY29uZmlndXJhdGlvbnMsIHByb2dyYW0gdGhlICovCisJLyogIG5ldyBjb3VudGVyIG9wZXJhdGluZyBtb2RlLiAqLwogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkEsIENSQU1TS19JTkRYU1JDX0IgfCBDUkFNU0tfQ0xLU1JDX0IsIGNyYSk7CiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQiwKIAkJKHVpbnQxNl90KSAofihDUkJNU0tfSU5UQ1RSTCB8IENSQk1TS19DTEtFTkFCX0EpKSwgY3JiKTsKIH0KIAotc3RhdGljIHZvaWQgU2V0TW9kZV9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgU2V0dXAsCitzdGF0aWMgdm9pZCBTZXRNb2RlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBTZXR1cCwKIAl1aW50MTZfdCBEaXNhYmxlSW50U3JjKQogewogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYTsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmI7Ci0JcmVnaXN0ZXIgdWludDE2X3Qgc2V0dXAgPSBTZXR1cDsJLy8gQ2FjaGUgdGhlIFN0YW5kYXJkIFNldHVwLgorCXJlZ2lzdGVyIHVpbnQxNl90IHNldHVwID0gU2V0dXA7CS8qICBDYWNoZSB0aGUgU3RhbmRhcmQgU2V0dXAuICovCiAKLQkvLyBJbml0aWFsaXplIENSQSBhbmQgQ1JCIGltYWdlcy4KLQljcmEgPSAoKHNldHVwICYgU1RETVNLX0lORFhTUkMpIDw8ICgoQ1JBQklUX0lORFhTUkNfQiArIDEpIC0gU1REQklUX0lORFhTUkMpKTsJLy8gSW5kZXhTcmMgZmllbGQgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLgorCS8qICBJbml0aWFsaXplIENSQSBhbmQgQ1JCIGltYWdlcy4gKi8KKwljcmEgPSAoKHNldHVwICYgU1RETVNLX0lORFhTUkMpIDw8ICgoQ1JBQklUX0lORFhTUkNfQiArIDEpIC0gU1REQklUX0lORFhTUkMpKTsJLyogIEluZGV4U3JjIGZpZWxkIGlzIHJlc3RyaWN0ZWQgdG8gRU5DX1ggb3IgSW5keFBvbC4gKi8KIAotCWNyYiA9IChDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQgkvLyBSZXNldCBldmVudCBjYXB0dXJlcyBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLgotCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLRU5BQikgPDwgKENSQkJJVF9DTEtFTkFCX0IgLSBTVERCSVRfQ0xLRU5BQikpCS8vIENsb2NrIGVuYWJsZSBpcyBwYXNzZWQgdGhyb3VnaC4KLQkJfCAoKHNldHVwICYgU1RETVNLX0xPQURTUkMpID4+IChTVERCSVRfTE9BRFNSQyAtIENSQkJJVF9MT0FEU1JDX0IpKSk7CS8vIFByZWxvYWQgdHJpZ2dlciBzb3VyY2UgaXMgcGFzc2VkIHRocm91Z2guCisJY3JiID0gKENSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9CCS8qICBSZXNldCBldmVudCBjYXB0dXJlcyBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLiAqLworCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLRU5BQikgPDwgKENSQkJJVF9DTEtFTkFCX0IgLSBTVERCSVRfQ0xLRU5BQikpCS8qICBDbG9jayBlbmFibGUgaXMgcGFzc2VkIHRocm91Z2guICovCisJCXwgKChzZXR1cCAmIFNURE1TS19MT0FEU1JDKSA+PiAoU1REQklUX0xPQURTUkMgLSBDUkJCSVRfTE9BRFNSQ19CKSkpOwkvKiAgUHJlbG9hZCB0cmlnZ2VyIHNvdXJjZSBpcyBwYXNzZWQgdGhyb3VnaC4gKi8KIAotCS8vIEZvcmNlIEludFNyYyB0byBEaXNhYmxlZCBpZiBEaXNhYmxlSW50U3JjIGlzIGFzc2VydGVkLgorCS8qICBGb3JjZSBJbnRTcmMgdG8gRGlzYWJsZWQgaWYgRGlzYWJsZUludFNyYyBpcyBhc3NlcnRlZC4gKi8KIAlpZiAoIURpc2FibGVJbnRTcmMpCiAJCWNyYiB8PSAoKHNldHVwICYgU1RETVNLX0lOVFNSQykgPj4gKFNUREJJVF9JTlRTUkMgLQogCQkJCUNSQkJJVF9JTlRTUkNfQikpOwogCi0JLy8gUG9wdWxhdGUgYWxsIG1vZGUtZGVwZW5kZW50IGF0dHJpYnV0ZXMgb2YgQ1JBICYgQ1JCIGltYWdlcy4KKwkvKiAgUG9wdWxhdGUgYWxsIG1vZGUtZGVwZW5kZW50IGF0dHJpYnV0ZXMgb2YgQ1JBICYgQ1JCIGltYWdlcy4gKi8KIAlzd2l0Y2ggKChzZXR1cCAmIFNURE1TS19DTEtTUkMpID4+IFNUREJJVF9DTEtTUkMpIHsKLQljYXNlIENMS1NSQ19USU1FUjoJLy8gVGltZXIgTW9kZToKLQkJY3JhIHw9ICgoMiA8PCBDUkFCSVRfQ0xLU1JDX0IpCS8vICAgQ2xrU3JjQjwxPiBzZWxlY3RzIHN5c3RlbSBjbG9jawotCQkJfCAoKHNldHVwICYgU1RETVNLX0NMS1BPTCkgPDwgKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSk7CS8vICAgICB3aXRoIGRpcmVjdGlvbiAoQ2xrU3JjQjwwPikgb2J0YWluZWQgZnJvbSBDbGtQb2wuCi0JCWNyYiB8PSAoKDEgPDwgQ1JCQklUX0NMS1BPTF9CKQkvLyAgIENsa1BvbEIgYmVoYXZlcyBhcyBhbHdheXMtb24gY2xvY2sgZW5hYmxlLgotCQkJfCAoTVVMVF9YMSA8PCBDUkJCSVRfQ0xLTVVMVF9CKSk7CS8vICAgQ2xrTXVsdEIgbXVzdCBiZSAxeC4KKwljYXNlIENMS1NSQ19USU1FUjoJLyogIFRpbWVyIE1vZGU6ICovCisJCWNyYSB8PSAoKDIgPDwgQ1JBQklUX0NMS1NSQ19CKQkvKiAgICBDbGtTcmNCPDE+IHNlbGVjdHMgc3lzdGVtIGNsb2NrICovCisJCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA8PCAoQ1JBQklUX0NMS1NSQ19CIC0gU1REQklUX0NMS1BPTCkpKTsJLyogICAgICB3aXRoIGRpcmVjdGlvbiAoQ2xrU3JjQjwwPikgb2J0YWluZWQgZnJvbSBDbGtQb2wuICovCisJCWNyYiB8PSAoKDEgPDwgQ1JCQklUX0NMS1BPTF9CKQkvKiAgICBDbGtQb2xCIGJlaGF2ZXMgYXMgYWx3YXlzLW9uIGNsb2NrIGVuYWJsZS4gKi8KKwkJCXwgKE1VTFRfWDEgPDwgQ1JCQklUX0NMS01VTFRfQikpOwkvKiAgICBDbGtNdWx0QiBtdXN0IGJlIDF4LiAqLwogCQlicmVhazsKIAotCWNhc2UgQ0xLU1JDX0VYVEVOREVSOgkvLyBFeHRlbmRlciBNb2RlOgotCQljcmEgfD0gKCgyIDw8IENSQUJJVF9DTEtTUkNfQikJLy8gICBDbGtTcmNCIHNvdXJjZSBpcyBPdmVyZmxvd0EgKHNhbWUgYXMgInRpbWVyIikKLQkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpIDw8IChDUkFCSVRfQ0xLU1JDX0IgLSBTVERCSVRfQ0xLUE9MKSkpOwkvLyAgICAgd2l0aCBkaXJlY3Rpb24gb2J0YWluZWQgZnJvbSBDbGtQb2wuCi0JCWNyYiB8PSAoKDEgPDwgQ1JCQklUX0NMS1BPTF9CKQkvLyAgIENsa1BvbEIgY29udHJvbHMgSW5kZXhCIC0tIGFsd2F5cyBzZXQgdG8gYWN0aXZlLgotCQkJfCAoTVVMVF9YMCA8PCBDUkJCSVRfQ0xLTVVMVF9CKSk7CS8vICAgQ2xrTXVsdEIgc2VsZWN0cyBPdmVyZmxvd0EgYXMgdGhlIGNsb2NrIHNvdXJjZS4KKwljYXNlIENMS1NSQ19FWFRFTkRFUjoJLyogIEV4dGVuZGVyIE1vZGU6ICovCisJCWNyYSB8PSAoKDIgPDwgQ1JBQklUX0NMS1NSQ19CKQkvKiAgICBDbGtTcmNCIHNvdXJjZSBpcyBPdmVyZmxvd0EgKHNhbWUgYXMgInRpbWVyIikgKi8KKwkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpIDw8IChDUkFCSVRfQ0xLU1JDX0IgLSBTVERCSVRfQ0xLUE9MKSkpOwkvKiAgICAgIHdpdGggZGlyZWN0aW9uIG9idGFpbmVkIGZyb20gQ2xrUG9sLiAqLworCQljcmIgfD0gKCgxIDw8IENSQkJJVF9DTEtQT0xfQikJLyogICAgQ2xrUG9sQiBjb250cm9scyBJbmRleEIgLS0gYWx3YXlzIHNldCB0byBhY3RpdmUuICovCisJCQl8IChNVUxUX1gwIDw8IENSQkJJVF9DTEtNVUxUX0IpKTsJLyogICAgQ2xrTXVsdEIgc2VsZWN0cyBPdmVyZmxvd0EgYXMgdGhlIGNsb2NrIHNvdXJjZS4gKi8KIAkJYnJlYWs7CiAKLQlkZWZhdWx0OgkJLy8gQ291bnRlciBNb2RlOgotCQljcmEgfD0gKENMS1NSQ19DT1VOVEVSIDw8IENSQUJJVF9DTEtTUkNfQik7CS8vICAgU2VsZWN0IEVOQ19DIGFuZCBFTkNfRCBhcyBjbG9jay9kaXJlY3Rpb24gaW5wdXRzLgotCQljcmIgfD0gKCgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA+PiAoU1REQklUX0NMS1BPTCAtIENSQkJJVF9DTEtQT0xfQikpCS8vICAgQ2xrUG9sIGlzIHBhc3NlZCB0aHJvdWdoLgotCQkJfCAoKChzZXR1cCAmIFNURE1TS19DTEtNVUxUKSA9PSAoTVVMVF9YMCA8PCBTVERCSVRfQ0xLTVVMVCkpID8JLy8gICBGb3JjZSBDbGtNdWx0IHRvIHgxIGlmIG5vdCBsZWdhbCwgb3RoZXJ3aXNlIHBhc3MgdGhyb3VnaC4KKwlkZWZhdWx0OgkJLyogIENvdW50ZXIgTW9kZTogKi8KKwkJY3JhIHw9IChDTEtTUkNfQ09VTlRFUiA8PCBDUkFCSVRfQ0xLU1JDX0IpOwkvKiAgICBTZWxlY3QgRU5DX0MgYW5kIEVOQ19EIGFzIGNsb2NrL2RpcmVjdGlvbiBpbnB1dHMuICovCisJCWNyYiB8PSAoKChzZXR1cCAmIFNURE1TS19DTEtQT0wpID4+IChTVERCSVRfQ0xLUE9MIC0gQ1JCQklUX0NMS1BPTF9CKSkJLyogICAgQ2xrUG9sIGlzIHBhc3NlZCB0aHJvdWdoLiAqLworCQkJfCAoKChzZXR1cCAmIFNURE1TS19DTEtNVUxUKSA9PSAoTVVMVF9YMCA8PCBTVERCSVRfQ0xLTVVMVCkpID8JLyogICAgRm9yY2UgQ2xrTXVsdCB0byB4MSBpZiBub3QgbGVnYWwsIG90aGVyd2lzZSBwYXNzIHRocm91Z2guICovCiAJCQkJKE1VTFRfWDEgPDwgQ1JCQklUX0NMS01VTFRfQikgOgogCQkJCSgoc2V0dXAgJiBTVERNU0tfQ0xLTVVMVCkgPDwgKENSQkJJVF9DTEtNVUxUX0IgLQogCQkJCQkJU1REQklUX0NMS01VTFQpKSkpOwogCX0KIAotCS8vIEZvcmNlIHBvc2l0aXZlIGluZGV4IHBvbGFyaXR5IGlmIEluZHhTcmMgaXMgc29mdHdhcmUtZHJpdmVuIG9ubHksCi0JLy8gb3RoZXJ3aXNlIHBhc3MgaXQgdGhyb3VnaC4KKwkvKiAgRm9yY2UgcG9zaXRpdmUgaW5kZXggcG9sYXJpdHkgaWYgSW5keFNyYyBpcyBzb2Z0d2FyZS1kcml2ZW4gb25seSwgKi8KKwkvKiAgb3RoZXJ3aXNlIHBhc3MgaXQgdGhyb3VnaC4gKi8KIAlpZiAofnNldHVwICYgU1RETVNLX0lORFhTUkMpCiAJCWNyYiB8PSAoKHNldHVwICYgU1RETVNLX0lORFhQT0wpID4+IChTVERCSVRfSU5EWFBPTCAtCiAJCQkJQ1JCQklUX0lORFhQT0xfQikpOwogCi0JLy8gSWYgSW50U3JjIGhhcyBiZWVuIGZvcmNlZCB0byBEaXNhYmxlZCwgdXBkYXRlIHRoZSBNSVNDMiBpbnRlcnJ1cHQKLQkvLyBlbmFibGUgbWFzayB0byBpbmRpY2F0ZSB0aGUgY291bnRlciBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuCisJLyogIElmIEludFNyYyBoYXMgYmVlbiBmb3JjZWQgdG8gRGlzYWJsZWQsIHVwZGF0ZSB0aGUgTUlTQzIgaW50ZXJydXB0ICovCisJLyogIGVuYWJsZSBtYXNrIHRvIGluZGljYXRlIHRoZSBjb3VudGVyIGludGVycnVwdCBpcyBkaXNhYmxlZC4gKi8KIAlpZiAoRGlzYWJsZUludFNyYykKIAkJZGV2cHJpdi0+Q291bnRlckludEVuYWJzICY9IH5rLT5NeUV2ZW50Qml0c1szXTsKIAotCS8vIFdoaWxlIHJldGFpbmluZyBDb3VudGVyQSBhbmQgTGF0Y2hTcmMgY29uZmlndXJhdGlvbnMsIHByb2dyYW0gdGhlCi0JLy8gbmV3IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUuCisJLyogIFdoaWxlIHJldGFpbmluZyBDb3VudGVyQSBhbmQgTGF0Y2hTcmMgY29uZmlndXJhdGlvbnMsIHByb2dyYW0gdGhlICovCisJLyogIG5ldyBjb3VudGVyIG9wZXJhdGluZyBtb2RlLiAqLwogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkEsCiAJCSh1aW50MTZfdCkgKH4oQ1JBTVNLX0lORFhTUkNfQiB8IENSQU1TS19DTEtTUkNfQikpLCBjcmEpOwogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsIENSQk1TS19DTEtFTkFCX0EgfCBDUkJNU0tfTEFUQ0hTUkMsIGNyYik7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmV0dXJuL3NldCBhIGNvdW50ZXIncyBlbmFibGUuICBlbmFiOiAwPWFsd2F5cyBlbmFibGVkLCAxPWVuYWJsZWQgYnkgaW5kZXguCisvKiAgUmV0dXJuL3NldCBhIGNvdW50ZXIncyBlbmFibGUuICBlbmFiOiAwPWFsd2F5cyBlbmFibGVkLCAxPWVuYWJsZWQgYnkgaW5kZXguICovCiAKLXN0YXRpYyB2b2lkIFNldEVuYWJsZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgZW5hYikKK3N0YXRpYyB2b2lkIFNldEVuYWJsZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgZW5hYikKIHsKIAlERUJVRygiU2V0RW5hYmxlX0E6IFNldEVuYWJsZV9BIGVudGVyIDM1NDFcbiIpOwogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsCkBAIC0zMDA2LDI5ICszMDE2LDI5IEBACiAJCSh1aW50MTZfdCkgKGVuYWIgPDwgQ1JCQklUX0NMS0VOQUJfQSkpOwogfQogCi1zdGF0aWMgdm9pZCBTZXRFbmFibGVfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IGVuYWIpCitzdGF0aWMgdm9pZCBTZXRFbmFibGVfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IGVuYWIpCiB7CiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQiwKIAkJKHVpbnQxNl90KSAofihDUkJNU0tfSU5UQ1RSTCB8IENSQk1TS19DTEtFTkFCX0IpKSwKIAkJKHVpbnQxNl90KSAoZW5hYiA8PCBDUkJCSVRfQ0xLRU5BQl9CKSk7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRFbmFibGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0RW5hYmxlX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJldHVybiAoREVCSXJlYWQoZGV2LCBrLT5NeUNSQikgPj4gQ1JCQklUX0NMS0VOQUJfQSkgJiAxOwogfQogCi1zdGF0aWMgdWludDE2X3QgR2V0RW5hYmxlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZXR1cm4gKERFQklyZWFkKGRldiwgay0+TXlDUkIpID4+IENSQkJJVF9DTEtFTkFCX0IpICYgMTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBSZXR1cm4vc2V0IGEgY291bnRlciBwYWlyJ3MgbGF0Y2ggdHJpZ2dlciBzb3VyY2UuICAwOiBPbiByZWFkCi0vLyBhY2Nlc3MsIDE6IEEgaW5kZXggbGF0Y2hlcyBBLCAyOiBCIGluZGV4IGxhdGNoZXMgQiwgMzogQSBvdmVyZmxvdwotLy8gbGF0Y2hlcyBCLgorLyogUmV0dXJuL3NldCBhIGNvdW50ZXIgcGFpcidzIGxhdGNoIHRyaWdnZXIgc291cmNlLiAgMDogT24gcmVhZAorICogYWNjZXNzLCAxOiBBIGluZGV4IGxhdGNoZXMgQSwgMjogQiBpbmRleCBsYXRjaGVzIEIsIDM6IEEgb3ZlcmZsb3cKKyAqIGxhdGNoZXMgQi4KKyAqLwogCi1zdGF0aWMgdm9pZCBTZXRMYXRjaFNvdXJjZShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IHZhbHVlKQorc3RhdGljIHZvaWQgU2V0TGF0Y2hTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSkKIHsKIAlERUJVRygiU2V0TGF0Y2hTb3VyY2U6IFNldExhdGNoU291cmNlIGVudGVyIDM1NTAgXG4iKTsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLApAQCAtMzAzOCwyMTAgKzMwNDgsMjA2IEBACiAJREVCVUcoIlNldExhdGNoU291cmNlOiBTZXRMYXRjaFNvdXJjZSBleGl0IFxuIik7CiB9CiAKLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRMYXRjaFNvdXJjZShjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgKi8KLS8qIHsgKi8KLS8qICAgcmV0dXJuICggREVCSXJlYWQoIGRldiwgay0+TXlDUkIpID4+IENSQkJJVF9MQVRDSFNSQyApICYgMzsgKi8KLS8qIH0gKi8KKy8qCisgKiBzdGF0aWMgdWludDE2X3QgR2V0TGF0Y2hTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkKKyAqIHsKKyAqIAlyZXR1cm4gKCBERUJJcmVhZCggZGV2LCBrLT5NeUNSQikgPj4gQ1JCQklUX0xBVENIU1JDICkgJiAzOworICogfQorICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJldHVybi9zZXQgdGhlIGV2ZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRyYW5zZmVyIG9mIHRoZSBwcmVsb2FkCi0vLyByZWdpc3RlciBpbnRvIHRoZSBjb3VudGVyLiAgMD1UaGlzQ250cl9JbmRleCwgMT1UaGlzQ250cl9PdmVyZmxvdywKLS8vIDI9T3ZlcmZsb3dBIChCIGNvdW50ZXJzIG9ubHkpLCAzPWRpc2FibGVkLgorLyoKKyAqIFJldHVybi9zZXQgdGhlIGV2ZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRyYW5zZmVyIG9mIHRoZSBwcmVsb2FkCisgKiByZWdpc3RlciBpbnRvIHRoZSBjb3VudGVyLiAgMD1UaGlzQ250cl9JbmRleCwgMT1UaGlzQ250cl9PdmVyZmxvdywKKyAqIDI9T3ZlcmZsb3dBIChCIGNvdW50ZXJzIG9ubHkpLCAzPWRpc2FibGVkLgorICovCiAKLXN0YXRpYyB2b2lkIFNldExvYWRUcmlnX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MTZfdCBUcmlnKQorc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IFRyaWcpCiB7CiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQSwgKHVpbnQxNl90KSAofkNSQU1TS19MT0FEU1JDX0EpLAogCQkodWludDE2X3QpIChUcmlnIDw8IENSQUJJVF9MT0FEU1JDX0EpKTsKIH0KIAotc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFRyaWcpCitzdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgVHJpZykKIHsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLAogCQkodWludDE2X3QpICh+KENSQk1TS19MT0FEU1JDX0IgfCBDUkJNU0tfSU5UQ1RSTCkpLAogCQkodWludDE2X3QpIChUcmlnIDw8IENSQkJJVF9MT0FEU1JDX0IpKTsKIH0KIAotc3RhdGljIHVpbnQxNl90IEdldExvYWRUcmlnX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQxNl90IEdldExvYWRUcmlnX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJldHVybiAoREVCSXJlYWQoZGV2LCBrLT5NeUNSQSkgPj4gQ1JBQklUX0xPQURTUkNfQSkgJiAzOwogfQogCi1zdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmV0dXJuIChERUJJcmVhZChkZXYsIGstPk15Q1JCKSA+PiBDUkJCSVRfTE9BRFNSQ19CKSAmIDM7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBSZXR1cm4vc2V0IGNvdW50ZXIgaW50ZXJydXB0IHNvdXJjZSBhbmQgY2xlYXIgYW55IGNhcHR1cmVkCi0vLyBpbmRleC9vdmVyZmxvdyBldmVudHMuICBJbnRTb3VyY2U6IDA9RGlzYWJsZWQsIDE9T3ZlcmZsb3dPbmx5LAotLy8gMj1JbmRleE9ubHksIDM9SW5kZXhBbmRPdmVyZmxvdy4KKy8qIFJldHVybi9zZXQgY291bnRlciBpbnRlcnJ1cHQgc291cmNlIGFuZCBjbGVhciBhbnkgY2FwdHVyZWQKKyAqIGluZGV4L292ZXJmbG93IGV2ZW50cy4gIEludFNvdXJjZTogMD1EaXNhYmxlZCwgMT1PdmVyZmxvd09ubHksCisgKiAyPUluZGV4T25seSwgMz1JbmRleEFuZE92ZXJmbG93LgorICovCiAKLXN0YXRpYyB2b2lkIFNldEludFNyY19BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywKK3N0YXRpYyB2b2lkIFNldEludFNyY19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywKIAl1aW50MTZfdCBJbnRTb3VyY2UpCiB7Ci0JLy8gUmVzZXQgYW55IHBlbmRpbmcgY291bnRlciBvdmVyZmxvdyBvciBpbmRleCBjYXB0dXJlcy4KKwkvKiAgUmVzZXQgYW55IHBlbmRpbmcgY291bnRlciBvdmVyZmxvdyBvciBpbmRleCBjYXB0dXJlcy4gKi8KIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLCAodWludDE2X3QpICh+Q1JCTVNLX0lOVENUUkwpLAogCQlDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQSk7CiAKLQkvLyBQcm9ncmFtIGNvdW50ZXIgaW50ZXJydXB0IHNvdXJjZS4KKwkvKiAgUHJvZ3JhbSBjb3VudGVyIGludGVycnVwdCBzb3VyY2UuICovCiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQSwgfkNSQU1TS19JTlRTUkNfQSwKIAkJKHVpbnQxNl90KSAoSW50U291cmNlIDw8IENSQUJJVF9JTlRTUkNfQSkpOwogCi0JLy8gVXBkYXRlIE1JU0MyIGludGVycnVwdCBlbmFibGUgbWFzay4KKwkvKiAgVXBkYXRlIE1JU0MyIGludGVycnVwdCBlbmFibGUgbWFzay4gKi8KIAlkZXZwcml2LT5Db3VudGVySW50RW5hYnMgPQogCQkoZGV2cHJpdi0+Q291bnRlckludEVuYWJzICYgfmstPk15RXZlbnRCaXRzWzNdKSB8IGstPgogCQlNeUV2ZW50Qml0c1tJbnRTb3VyY2VdOwogfQogCi1zdGF0aWMgdm9pZCBTZXRJbnRTcmNfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssCitzdGF0aWMgdm9pZCBTZXRJbnRTcmNfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssCiAJdWludDE2X3QgSW50U291cmNlKQogewogCXVpbnQxNl90IGNyYjsKIAotCS8vIENhY2hlIHdyaXRlYWJsZSBDUkIgcmVnaXN0ZXIgaW1hZ2UuCisJLyogIENhY2hlIHdyaXRlYWJsZSBDUkIgcmVnaXN0ZXIgaW1hZ2UuICovCiAJY3JiID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQikgJiB+Q1JCTVNLX0lOVENUUkw7CiAKLQkvLyBSZXNldCBhbnkgcGVuZGluZyBjb3VudGVyIG92ZXJmbG93IG9yIGluZGV4IGNhcHR1cmVzLgorCS8qICBSZXNldCBhbnkgcGVuZGluZyBjb3VudGVyIG92ZXJmbG93IG9yIGluZGV4IGNhcHR1cmVzLiAqLwogCURFQkl3cml0ZShkZXYsIGstPk15Q1JCLAogCQkodWludDE2X3QpIChjcmIgfCBDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQikpOwogCi0JLy8gUHJvZ3JhbSBjb3VudGVyIGludGVycnVwdCBzb3VyY2UuCisJLyogIFByb2dyYW0gY291bnRlciBpbnRlcnJ1cHQgc291cmNlLiAqLwogCURFQkl3cml0ZShkZXYsIGstPk15Q1JCLAogCQkodWludDE2X3QpICgoY3JiICYgfkNSQk1TS19JTlRTUkNfQikgfCAoSW50U291cmNlIDw8CiAJCQkJQ1JCQklUX0lOVFNSQ19CKSkpOwogCi0JLy8gVXBkYXRlIE1JU0MyIGludGVycnVwdCBlbmFibGUgbWFzay4KKwkvKiAgVXBkYXRlIE1JU0MyIGludGVycnVwdCBlbmFibGUgbWFzay4gKi8KIAlkZXZwcml2LT5Db3VudGVySW50RW5hYnMgPQogCQkoZGV2cHJpdi0+Q291bnRlckludEVuYWJzICYgfmstPk15RXZlbnRCaXRzWzNdKSB8IGstPgogCQlNeUV2ZW50Qml0c1tJbnRTb3VyY2VdOwogfQogCi1zdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQxNl90IEdldEludFNyY19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZXR1cm4gKERFQklyZWFkKGRldiwgay0+TXlDUkEpID4+IENSQUJJVF9JTlRTUkNfQSkgJiAzOwogfQogCi1zdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQxNl90IEdldEludFNyY19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZXR1cm4gKERFQklyZWFkKGRldiwgay0+TXlDUkIpID4+IENSQkJJVF9JTlRTUkNfQikgJiAzOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBSZXR1cm4vc2V0IHRoZSBjbG9jayBtdWx0aXBsaWVyLgorLyogIFJldHVybi9zZXQgdGhlIGNsb2NrIG11bHRpcGxpZXIuICovCiAKLS8qIHN0YXRpYyB2b2lkIFNldENsa011bHQoY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KKy8qIHN0YXRpYyB2b2lkIFNldENsa011bHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLwogLyogeyAqLwogLyogICBrLT5TZXRNb2RlKGRldiwgaywgKHVpbnQxNl90KSggKCBrLT5HZXRNb2RlKGRldiwgayApICYgflNURE1TS19DTEtNVUxUICkgfCAoIHZhbHVlIDw8IFNUREJJVF9DTEtNVUxUICkgKSwgRkFMU0UgKTsgKi8KIC8qIH0gKi8KIAotLyogc3RhdGljIHVpbnQxNl90IEdldENsa011bHQoY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqayApICAqLworLyogc3RhdGljIHVpbnQxNl90IEdldENsa011bHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0NMS01VTFQgKSAmIDM7ICovCiAvKiB9ICovCiAKLS8qIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCi0vKiAvLyBSZXR1cm4vc2V0IHRoZSBjbG9jayBwb2xhcml0eS4gKi8KKy8qIFJldHVybi9zZXQgdGhlIGNsb2NrIHBvbGFyaXR5LiAqLwogCi0vKiBzdGF0aWMgdm9pZCBTZXRDbGtQb2woIGNvbWVkaV9kZXZpY2UgKmRldixlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KKy8qIHN0YXRpYyB2b2lkIFNldENsa1BvbCggc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlICkgICovCiAvKiB7ICovCiAvKiAgIGstPlNldE1vZGUoZGV2LCBrLCAodWludDE2X3QpKCAoIGstPkdldE1vZGUoZGV2LCBrICkgJiB+U1RETVNLX0NMS1BPTCApIHwgKCB2YWx1ZSA8PCBTVERCSVRfQ0xLUE9MICkgKSwgRkFMU0UgKTsgKi8KIC8qIH0gKi8KIAotLyogc3RhdGljIHVpbnQxNl90IEdldENsa1BvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrUG9sKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApICAqLwogLyogeyAqLwogLyogICByZXR1cm4gKCBrLT5HZXRNb2RlKGRldiwgayApID4+IFNUREJJVF9DTEtQT0wgKSAmIDE7ICovCiAvKiB9ICovCiAKLS8qIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCi0vKiAvLyBSZXR1cm4vc2V0IHRoZSBjbG9jayBzb3VyY2UuICovCisvKiBSZXR1cm4vc2V0IHRoZSBjbG9jayBzb3VyY2UuICAqLwogCi0vKiBzdGF0aWMgdm9pZCBTZXRDbGtTcmMoIGNvbWVkaV9kZXZpY2UgKmRldixlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KKy8qIHN0YXRpYyB2b2lkIFNldENsa1NyYyggc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlICkgICovCiAvKiB7ICovCiAvKiAgIGstPlNldE1vZGUoZGV2LCBrLCAodWludDE2X3QpKCAoIGstPkdldE1vZGUoZGV2LCBrICkgJiB+U1RETVNLX0NMS1NSQyApIHwgKCB2YWx1ZSA8PCBTVERCSVRfQ0xLU1JDICkgKSwgRkFMU0UgKTsgKi8KIC8qIH0gKi8KIAotLyogc3RhdGljIHVpbnQxNl90IEdldENsa1NyYyggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprICkgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrU3JjKCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApICAqLwogLyogeyAqLwogLyogICByZXR1cm4gKCBrLT5HZXRNb2RlKGRldiwgayApID4+IFNUREJJVF9DTEtTUkMgKSAmIDM7ICovCiAvKiB9ICovCiAKLS8qIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLwotLyogLy8gUmV0dXJuL3NldCB0aGUgaW5kZXggcG9sYXJpdHkuICovCisvKiBSZXR1cm4vc2V0IHRoZSBpbmRleCBwb2xhcml0eS4gKi8KIAotLyogc3RhdGljIHZvaWQgU2V0SW5kZXhQb2woY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KKy8qIHN0YXRpYyB2b2lkIFNldEluZGV4UG9sKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KIC8qIHsgKi8KIC8qICAgay0+U2V0TW9kZShkZXYsIGssICh1aW50MTZfdCkoICggay0+R2V0TW9kZShkZXYsIGsgKSAmIH5TVERNU0tfSU5EWFBPTCApIHwgKCAodmFsdWUgIT0gMCkgPDwgU1REQklUX0lORFhQT0wgKSApLCBGQUxTRSApOyAqLwogLyogfSAqLwogCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0SW5kZXhQb2woY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqayApICAqLworLyogc3RhdGljIHVpbnQxNl90IEdldEluZGV4UG9sKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApICAqLwogLyogeyAqLwogLyogICByZXR1cm4gKCBrLT5HZXRNb2RlKGRldiwgayApID4+IFNUREJJVF9JTkRYUE9MICkgJiAxOyAqLwogLyogfSAqLwogCi0vKiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLS8qIC8vIFJldHVybi9zZXQgdGhlIGluZGV4IHNvdXJjZS4gKi8KKy8qICBSZXR1cm4vc2V0IHRoZSBpbmRleCBzb3VyY2UuICovCiAKLS8qIHN0YXRpYyB2b2lkIFNldEluZGV4U3JjKGNvbWVkaV9kZXZpY2UgKmRldiwgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlICkgICovCisvKiBzdGF0aWMgdm9pZCBTZXRJbmRleFNyYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlICkgICovCiAvKiB7ICovCiAvKiAgIERFQlVHKCJTZXRJbmRleFNyYzogc2V0IGluZGV4IHNyYyBlbnRlciAzNzAwXG4iKTsgKi8KIC8qICAgay0+U2V0TW9kZShkZXYsIGssICh1aW50MTZfdCkoICggay0+R2V0TW9kZShkZXYsIGsgKSAmIH5TVERNU0tfSU5EWFNSQyApIHwgKCAodmFsdWUgIT0gMCkgPDwgU1REQklUX0lORFhTUkMgKSApLCBGQUxTRSApOyAqLwogLyogfSAqLwogCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0SW5kZXhTcmMoY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqayApICAqLworLyogc3RhdGljIHVpbnQxNl90IEdldEluZGV4U3JjKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApICAqLwogLyogeyAqLwogLyogICByZXR1cm4gKCBrLT5HZXRNb2RlKGRldiwgayApID4+IFNUREJJVF9JTkRYU1JDICkgJiAxOyAqLwogLyogfSAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBHZW5lcmF0ZSBhbiBpbmRleCBwdWxzZS4KKy8qICBHZW5lcmF0ZSBhbiBpbmRleCBwdWxzZS4gKi8KIAotc3RhdGljIHZvaWQgUHVsc2VJbmRleF9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB2b2lkIFB1bHNlSW5kZXhfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JhOwogCiAJREVCVUcoIlB1bHNlSW5kZXhfQTogcHVsc2UgaW5kZXggZW50ZXJcbiIpOwogCi0JY3JhID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQSk7CS8vIFB1bHNlIGluZGV4LgorCWNyYSA9IERFQklyZWFkKGRldiwgay0+TXlDUkEpOwkvKiAgUHVsc2UgaW5kZXguICovCiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkEsICh1aW50MTZfdCkgKGNyYSBeIENSQU1TS19JTkRYUE9MX0EpKTsKIAlERUJVRygiUHVsc2VJbmRleF9BOiBwdWxzZSBpbmRleCBzdGVwMVxuIik7CiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkEsIGNyYSk7CiB9CiAKLXN0YXRpYyB2b2lkIFB1bHNlSW5kZXhfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdm9pZCBQdWxzZUluZGV4X0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYjsKIAotCWNyYiA9IERFQklyZWFkKGRldiwgay0+TXlDUkIpICYgfkNSQk1TS19JTlRDVFJMOwkvLyBQdWxzZSBpbmRleC4KKwljcmIgPSBERUJJcmVhZChkZXYsIGstPk15Q1JCKSAmIH5DUkJNU0tfSU5UQ1RSTDsJLyogIFB1bHNlIGluZGV4LiAqLwogCURFQkl3cml0ZShkZXYsIGstPk15Q1JCLCAodWludDE2X3QpIChjcmIgXiBDUkJNU0tfSU5EWFBPTF9CKSk7CiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkIsIGNyYik7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gV3JpdGUgdmFsdWUgaW50byBjb3VudGVyIHByZWxvYWQgcmVnaXN0ZXIuCisvKiAgV3JpdGUgdmFsdWUgaW50byBjb3VudGVyIHByZWxvYWQgcmVnaXN0ZXIuICovCiAKLXN0YXRpYyB2b2lkIFByZWxvYWQoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MzJfdCB2YWx1ZSkKK3N0YXRpYyB2b2lkIFByZWxvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MzJfdCB2YWx1ZSkKIHsKIAlERUJVRygiUHJlbG9hZDogcHJlbG9hZCBlbnRlclxuIik7Ci0JREVCSXdyaXRlKGRldiwgKHVpbnQxNl90KSAoay0+TXlMYXRjaExzdyksICh1aW50MTZfdCkgdmFsdWUpOwkvLyBXcml0ZSB2YWx1ZSB0byBwcmVsb2FkIHJlZ2lzdGVyLgorCURFQkl3cml0ZShkZXYsICh1aW50MTZfdCkgKGstPk15TGF0Y2hMc3cpLCAodWludDE2X3QpIHZhbHVlKTsJLyogIFdyaXRlIHZhbHVlIHRvIHByZWxvYWQgcmVnaXN0ZXIuICovCiAJREVCVUcoIlByZWxvYWQ6IHByZWxvYWQgc3RlcCAxXG4iKTsKIAlERUJJd3JpdGUoZGV2LCAodWludDE2X3QpIChrLT5NeUxhdGNoTHN3ICsgMiksCiAJCSh1aW50MTZfdCkgKHZhbHVlID4+IDE2KSk7CiB9CiAKLXN0YXRpYyB2b2lkIENvdW50ZXJzSW5pdChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgQ291bnRlcnNJbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaW50IGNoYW47Ci0JZW5jX3ByaXZhdGUgKms7Ci0JdWludDE2X3QgU2V0dXAgPSAoTE9BRFNSQ19JTkRYIDw8IEJGX0xPQURTUkMpIHwJLy8gUHJlbG9hZCB1cG9uCi0JCS8vIGluZGV4LgotCQkoSU5EWFNSQ19TT0ZUIDw8IEJGX0lORFhTUkMpIHwJLy8gRGlzYWJsZSBoYXJkd2FyZSBpbmRleC4KLQkJKENMS1NSQ19DT1VOVEVSIDw8IEJGX0NMS1NSQykgfAkvLyBPcGVyYXRpbmcgbW9kZSBpcyBjb3VudGVyLgotCQkoQ0xLUE9MX1BPUyA8PCBCRl9DTEtQT0wpIHwJLy8gQWN0aXZlIGhpZ2ggY2xvY2suCi0JCShDTlRESVJfVVAgPDwgQkZfQ0xLUE9MKSB8CS8vIENvdW50IGRpcmVjdGlvbiBpcyB1cC4KLQkJKENMS01VTFRfMVggPDwgQkZfQ0xLTVVMVCkgfAkvLyBDbG9jayBtdWx0aXBsaWVyIGlzIDF4LgotCQkoQ0xLRU5BQl9JTkRFWCA8PCBCRl9DTEtFTkFCKTsJLy8gRW5hYmxlZCBieSBpbmRleAorCXN0cnVjdCBlbmNfcHJpdmF0ZSAqazsKKwl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvKiAgUHJlbG9hZCB1cG9uICovCisJCS8qICBpbmRleC4gKi8KKwkJKElORFhTUkNfU09GVCA8PCBCRl9JTkRYU1JDKSB8CS8qICBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LiAqLworCQkoQ0xLU1JDX0NPVU5URVIgPDwgQkZfQ0xLU1JDKSB8CS8qICBPcGVyYXRpbmcgbW9kZSBpcyBjb3VudGVyLiAqLworCQkoQ0xLUE9MX1BPUyA8PCBCRl9DTEtQT0wpIHwJLyogIEFjdGl2ZSBoaWdoIGNsb2NrLiAqLworCQkoQ05URElSX1VQIDw8IEJGX0NMS1BPTCkgfAkvKiAgQ291bnQgZGlyZWN0aW9uIGlzIHVwLiAqLworCQkoQ0xLTVVMVF8xWCA8PCBCRl9DTEtNVUxUKSB8CS8qICBDbG9jayBtdWx0aXBsaWVyIGlzIDF4LiAqLworCQkoQ0xLRU5BQl9JTkRFWCA8PCBCRl9DTEtFTkFCKTsJLyogIEVuYWJsZWQgYnkgaW5kZXggKi8KIAotCS8vIERpc2FibGUgYWxsIGNvdW50ZXIgaW50ZXJydXB0cyBhbmQgY2xlYXIgYW55IGNhcHR1cmVkIGNvdW50ZXIgZXZlbnRzLgorCS8qICBEaXNhYmxlIGFsbCBjb3VudGVyIGludGVycnVwdHMgYW5kIGNsZWFyIGFueSBjYXB0dXJlZCBjb3VudGVyIGV2ZW50cy4gKi8KIAlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgUzYyNl9FTkNPREVSX0NIQU5ORUxTOyBjaGFuKyspIHsKIAkJayA9ICZlbmNwcml2W2NoYW5dOwogCQlrLT5TZXRNb2RlKGRldiwgaywgU2V0dXAsIFRSVUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmgKaW5kZXggMTFkOGIxYy4uODkxMTI2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oCkBAIC01MSwxNSArNTEsMTUgQEAKIAogICAgRXhhbXBsZSBjb2RlCiAKLSAgIGluc24uaW5zbj1JTlNOX0NPTkZJRzsgICAvL2NvbmZpZ3VyYXRpb24gaW5zdHJ1Y3Rpb24KLSAgIGluc24ubj0xOyAgICAgICAgICAgICAgICAvL251bWJlciBvZiBvcGVyYXRpb24gKG11c3QgYmUgMSkKLSAgIGluc24uZGF0YT0maW5pdGlhbHZhbHVlOyAvL2luaXRpYWwgdmFsdWUgbG9hZGVkIGludG8gZW5jb2RlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZHVyaW5nIGNvbmZpZ3VyYXRpb24KLSAgIGluc24uc3ViZGV2PTU7ICAgICAgICAgICAvL2VuY29kZXIgc3ViZGV2aWNlCi0gICBpbnNuLmNoYW5zcGVjPUNSX1BBQ0soZW5jb2Rlcl9jaGFubmVsLDAsQVJFRl9PVEhFUik7IC8vZW5jb2Rlcl9jaGFubmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gY29uZmlndXJlCisgICBpbnNuLmluc249SU5TTl9DT05GSUc7ICAgLy8gY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbgorICAgaW5zbi5uPTE7ICAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBvcGVyYXRpb24gKG11c3QgYmUgMSkKKyAgIGluc24uZGF0YT0maW5pdGlhbHZhbHVlOyAvLyBpbml0aWFsIHZhbHVlIGxvYWRlZCBpbnRvIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkdXJpbmcgY29uZmlndXJhdGlvbgorICAgaW5zbi5zdWJkZXY9NTsgICAgICAgICAgIC8vIGVuY29kZXIgc3ViZGV2aWNlCisgICBpbnNuLmNoYW5zcGVjPUNSX1BBQ0soZW5jb2Rlcl9jaGFubmVsLDAsQVJFRl9PVEhFUik7IC8vIGVuY29kZXJfY2hhbm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBjb25maWd1cmUKIAotICAgY29tZWRpX2RvX2luc24oY2YsJmluc24pOyAvL2V4ZWN1dGluZyBjb25maWd1cmF0aW9uCisgICBjb21lZGlfZG9faW5zbihjZiwmaW5zbik7IC8vIGV4ZWN1dGluZyBjb25maWd1cmF0aW9uCiAqLwogCiAjaWZkZWYgX0RFQlVHXwpAQCAtODgsMTQ3ICs4OCwxMzYgQEAKICNkZWZpbmUgSU5MSU5FIHN0YXRpYyBfX2lubGluZQogI2VuZGlmCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjaW5jbHVkZTxsaW51eC9zbGFiLmg+CiAKICNkZWZpbmUgUzYyNl9TSVpFIDB4MDIwMAogI2RlZmluZSBTSVpFT0ZfQUREUkVTU19TUEFDRQkJMHgwMjAwCi0jZGVmaW5lIERNQUJVRl9TSVpFCQkJNDA5NgkvLyA0ayBwYWdlcworI2RlZmluZSBETUFCVUZfU0laRQkJCTQwOTYJLyogIDRrIHBhZ2VzICovCiAKICNkZWZpbmUgUzYyNl9BRENfQ0hBTk5FTFMgICAgICAgMTYKICNkZWZpbmUgUzYyNl9EQUNfQ0hBTk5FTFMgICAgICAgNAogI2RlZmluZSBTNjI2X0VOQ09ERVJfQ0hBTk5FTFMgICA2CiAjZGVmaW5lIFM2MjZfRElPX0NIQU5ORUxTICAgICAgIDQ4Ci0jZGVmaW5lIFM2MjZfRElPX0JBTktTCQkzCS8vIE51bWJlciBvZiBESU8gZ3JvdXBzLgotI2RlZmluZSBTNjI2X0RJT19FWFRDSEFOUwk0MAkvLyBOdW1iZXIgb2YKLQkJCQkJLy8gZXh0ZW5kZWQtY2FwYWJpbGl0eQotCQkJCQkvLyBESU8gY2hhbm5lbHMuCisjZGVmaW5lIFM2MjZfRElPX0JBTktTCQkzCS8qICBOdW1iZXIgb2YgRElPIGdyb3Vwcy4gKi8KKyNkZWZpbmUgUzYyNl9ESU9fRVhUQ0hBTlMJNDAJLyogIE51bWJlciBvZiAqLworCQkJCQkvKiAgZXh0ZW5kZWQtY2FwYWJpbGl0eSAqLworCQkJCQkvKiAgRElPIGNoYW5uZWxzLiAqLwogCi0jZGVmaW5lIE5VTV9UUklNREFDUwkxMgkvLyBOdW1iZXIgb2YgdmFsaWQgVHJpbURBQyBjaGFubmVscy4KKyNkZWZpbmUgTlVNX1RSSU1EQUNTCTEyCS8qICBOdW1iZXIgb2YgdmFsaWQgVHJpbURBQyBjaGFubmVscy4gKi8KIAotLy8gUENJIGJ1cyBpbnRlcmZhY2UgdHlwZXMuCi0jZGVmaW5lIElOVEVMCQkJCTEJLy8gSW50ZWwgYnVzIHR5cGUuCi0jZGVmaW5lIE1PVE9ST0xBCQkJMgkvLyBNb3Rvcm9sYSBidXMgdHlwZS4KKy8qICBQQ0kgYnVzIGludGVyZmFjZSB0eXBlcy4gKi8KKyNkZWZpbmUgSU5URUwJCQkJMQkvKiAgSW50ZWwgYnVzIHR5cGUuICovCisjZGVmaW5lIE1PVE9ST0xBCQkJMgkvKiAgTW90b3JvbGEgYnVzIHR5cGUuICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNkZWZpbmUgUExBVEZPUk0JCUlOVEVMCS8qICAqKiogU0VMRUNUIFBMQVRGT1JNIFRZUEUgKioqICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSNkZWZpbmUgUExBVEZPUk0JCUlOVEVMCS8vICoqKiBTRUxFQ1QgUExBVEZPUk0gVFlQRSAqKioKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNkZWZpbmUgUkFOR0VfNVYgICAgICAgICAgICAgICAgMHgxMAkvKiAgKy8tNVYgcmFuZ2UgKi8KKyNkZWZpbmUgUkFOR0VfMTBWICAgICAgICAgICAgICAgMHgwMAkvKiAgKy8tMTBWIHJhbmdlICovCiAKLSNkZWZpbmUgUkFOR0VfNVYgICAgICAgICAgICAgICAgMHgxMAkvLyArLy01ViByYW5nZQotI2RlZmluZSBSQU5HRV8xMFYgICAgICAgICAgICAgICAweDAwCS8vICsvLTEwViByYW5nZQorI2RlZmluZSBFT1BMCQkJMHg4MAkvKiAgRW5kIG9mIEFEQyBwb2xsIGxpc3QgbWFya2VyLiAqLworI2RlZmluZSBHU0VMX0JJUE9MQVI1VgkJMHgwMEYwCS8qICBMUF9HU0VMIHNldHRpbmcgZm9yIDVWIGJpcG9sYXIgcmFuZ2UuICovCisjZGVmaW5lIEdTRUxfQklQT0xBUjEwVgkJMHgwMEEwCS8qICBMUF9HU0VMIHNldHRpbmcgZm9yIDEwViBiaXBvbGFyIHJhbmdlLiAqLwogCi0jZGVmaW5lIEVPUEwJCQkweDgwCS8vIEVuZCBvZiBBREMgcG9sbCBsaXN0IG1hcmtlci4KLSNkZWZpbmUgR1NFTF9CSVBPTEFSNVYJCTB4MDBGMAkvLyBMUF9HU0VMIHNldHRpbmcgZm9yIDVWIGJpcG9sYXIgcmFuZ2UuCi0jZGVmaW5lIEdTRUxfQklQT0xBUjEwVgkJMHgwMEEwCS8vIExQX0dTRUwgc2V0dGluZyBmb3IgMTBWIGJpcG9sYXIgcmFuZ2UuCisvKiAgRXJyb3IgY29kZXMgdGhhdCBtdXN0IGJlIHZpc2libGUgdG8gdGhpcyBiYXNlIGNsYXNzLiAqLworI2RlZmluZSBFUlJfSUxMRUdBTF9QQVJNCTB4MDAwMTAwMDAJLyogIElsbGVnYWwgZnVuY3Rpb24gcGFyYW1ldGVyIHZhbHVlIHdhcyBzcGVjaWZpZWQuICovCisjZGVmaW5lIEVSUl9JMkMJCQkweDAwMDIwMDAwCS8qICBJMkMgZXJyb3IuICovCisjZGVmaW5lIEVSUl9DT1VOVEVSU0VUVVAJMHgwMDIwMDAwMAkvKiAgSWxsZWdhbCBzZXR1cCBzcGVjaWZpZWQgZm9yIGNvdW50ZXIgY2hhbm5lbC4gKi8KKyNkZWZpbmUgRVJSX0RFQklfVElNRU9VVAkweDAwNDAwMDAwCS8qICBERUJJIHRyYW5zZmVyIHRpbWVkIG91dC4gKi8KIAotLy8gRXJyb3IgY29kZXMgdGhhdCBtdXN0IGJlIHZpc2libGUgdG8gdGhpcyBiYXNlIGNsYXNzLgotI2RlZmluZSBFUlJfSUxMRUdBTF9QQVJNCTB4MDAwMTAwMDAJLy8gSWxsZWdhbCBmdW5jdGlvbiBwYXJhbWV0ZXIgdmFsdWUgd2FzIHNwZWNpZmllZC4KLSNkZWZpbmUgRVJSX0kyQwkJCTB4MDAwMjAwMDAJLy8gSTJDIGVycm9yLgotI2RlZmluZSBFUlJfQ09VTlRFUlNFVFVQCTB4MDAyMDAwMDAJLy8gSWxsZWdhbCBzZXR1cCBzcGVjaWZpZWQgZm9yIGNvdW50ZXIgY2hhbm5lbC4KLSNkZWZpbmUgRVJSX0RFQklfVElNRU9VVAkweDAwNDAwMDAwCS8vIERFQkkgdHJhbnNmZXIgdGltZWQgb3V0LgorLyogIE9yZ2FuaXphdGlvbiAocGh5c2ljYWwgb3JkZXIpIGFuZCBzaXplIChpbiBEV09SRHMpIG9mIGxvZ2ljYWwgRE1BIGJ1ZmZlcnMgY29udGFpbmVkIGJ5IEFOQV9ETUFCVUYuICovCisjZGVmaW5lIEFEQ19ETUFCVUZfRFdPUkRTCTQwCS8qICBBREMgRE1BIGJ1ZmZlciBtdXN0IGhvbGQgMTYgc2FtcGxlcywgcGx1cyBwcmUvcG9zdCBnYXJiYWdlIHNhbXBsZXMuICovCisjZGVmaW5lIERBQ19XRE1BQlVGX0RXT1JEUwkxCS8qICBEQUMgb3V0cHV0IERNQSBidWZmZXIgaG9sZHMgYSBzaW5nbGUgc2FtcGxlLiAqLwogCi0vLyBPcmdhbml6YXRpb24gKHBoeXNpY2FsIG9yZGVyKSBhbmQgc2l6ZSAoaW4gRFdPUkRzKSBvZiBsb2dpY2FsIERNQSBidWZmZXJzIGNvbnRhaW5lZCBieSBBTkFfRE1BQlVGLgotI2RlZmluZSBBRENfRE1BQlVGX0RXT1JEUwk0MAkvLyBBREMgRE1BIGJ1ZmZlciBtdXN0IGhvbGQgMTYgc2FtcGxlcywgcGx1cyBwcmUvcG9zdCBnYXJiYWdlIHNhbXBsZXMuCi0jZGVmaW5lIERBQ19XRE1BQlVGX0RXT1JEUwkxCS8vIERBQyBvdXRwdXQgRE1BIGJ1ZmZlciBob2xkcyBhIHNpbmdsZSBzYW1wbGUuCisvKiAgQWxsIHJlbWFpbmluZyBzcGFjZSBpbiA0S0IgRE1BIGJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHRoZSBSUFMxIHByb2dyYW0uICovCiAKLS8vIEFsbCByZW1haW5pbmcgc3BhY2UgaW4gNEtCIERNQSBidWZmZXIgaXMgYXZhaWxhYmxlIGZvciB0aGUgUlBTMSBwcm9ncmFtLgotCi0vLyBBZGRyZXNzIG9mZnNldHMsIGluIERXT1JEUywgZnJvbSBiYXNlIG9mIERNQSBidWZmZXIuCisvKiAgQWRkcmVzcyBvZmZzZXRzLCBpbiBEV09SRFMsIGZyb20gYmFzZSBvZiBETUEgYnVmZmVyLiAqLwogI2RlZmluZSBEQUNfV0RNQUJVRl9PUwkJQURDX0RNQUJVRl9EV09SRFMKIAotLy8gSW50ZXJydXB0IGVuYWIgYml0IGluIElTUiBhbmQgSUVSLgotI2RlZmluZSBJUlFfR1BJTzMJCTB4MDAwMDAwNDAJLy8gSVJRIGVuYWJsZSBmb3IgR1BJTzMuCisvKiAgSW50ZXJydXB0IGVuYWIgYml0IGluIElTUiBhbmQgSUVSLiAqLworI2RlZmluZSBJUlFfR1BJTzMJCTB4MDAwMDAwNDAgIC8qICBJUlEgZW5hYmxlIGZvciBHUElPMy4gKi8KICNkZWZpbmUgSVJRX1JQUzEgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBJU1JfQUZPVQkJMHgwMDAwMDgwMAkvLyBBdWRpbyBmaWZvCi0JCQkJCQkvLyB1bmRlci9vdmVyZmxvdwotCQkJCQkJLy8gZGV0ZWN0ZWQuCi0jZGVmaW5lIElSUV9DT0lOVDFBICAgICAgICAgICAgIDB4MDQwMAkvLyBjb250ZXIgMUEgb3ZlcmZsb3cKLQkJCQkJCS8vIGludGVycnVwdCBtYXNrCi0jZGVmaW5lIElSUV9DT0lOVDFCICAgICAgICAgICAgIDB4MDgwMAkvLyBjb250ZXIgMUIgb3ZlcmZsb3cKLQkJCQkJCS8vIGludGVycnVwdCBtYXNrCi0jZGVmaW5lIElSUV9DT0lOVDJBICAgICAgICAgICAgIDB4MTAwMAkvLyBjb250ZXIgMkEgb3ZlcmZsb3cKLQkJCQkJCS8vIGludGVycnVwdCBtYXNrCi0jZGVmaW5lIElSUV9DT0lOVDJCICAgICAgICAgICAgIDB4MjAwMAkvLyBjb250ZXIgMkIgb3ZlcmZsb3cKLQkJCQkJCS8vIGludGVycnVwdCBtYXNrCi0jZGVmaW5lIElSUV9DT0lOVDNBICAgICAgICAgICAgIDB4NDAwMAkvLyBjb250ZXIgM0Egb3ZlcmZsb3cKLQkJCQkJCS8vIGludGVycnVwdCBtYXNrCi0jZGVmaW5lIElSUV9DT0lOVDNCICAgICAgICAgICAgIDB4ODAwMAkvLyBjb250ZXIgM0Igb3ZlcmZsb3cKLQkJCQkJCS8vIGludGVycnVwdCBtYXNrCisjZGVmaW5lIElTUl9BRk9VCQkweDAwMDAwODAwCisvKiBBdWRpbyBmaWZvIHVuZGVyL292ZXJmbG93ICBkZXRlY3RlZC4gKi8KIAotLy8gUlBTIGNvbW1hbmQgY29kZXMuCi0jZGVmaW5lIFJQU19DTFJTSUdOQUwJCTB4MDAwMDAwMDAJLy8gQ0xFQVIgU0lHTkFMCi0jZGVmaW5lIFJQU19TRVRTSUdOQUwJCTB4MTAwMDAwMDAJLy8gU0VUIFNJR05BTAotI2RlZmluZSBSUFNfTk9QCQkJMHgwMDAwMDAwMAkvLyBOT1AKLSNkZWZpbmUgUlBTX1BBVVNFCQkweDIwMDAwMDAwCS8vIFBBVVNFCi0jZGVmaW5lIFJQU19VUExPQUQJCTB4NDAwMDAwMDAJLy8gVVBMT0FECi0jZGVmaW5lIFJQU19KVU1QCQkweDgwMDAwMDAwCS8vIEpVTVAKLSNkZWZpbmUgUlBTX0xEUkVHCQkweDkwMDAwMTAwCS8vIExEUkVHICgxIHVpbnQzMl90IG9ubHkpCi0jZGVmaW5lIFJQU19TVFJFRwkJMHhBMDAwMDEwMAkvLyBTVFJFRyAoMSB1aW50MzJfdCBvbmx5KQotI2RlZmluZSBSUFNfU1RPUAkJMHg1MDAwMDAwMAkvLyBTVE9QCi0jZGVmaW5lIFJQU19JUlEgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAJLy8gSVJRCisjZGVmaW5lIElSUV9DT0lOVDFBICAgICAgICAgICAgIDB4MDQwMCAvKiBjb250ZXIgMUEgb3ZlcmZsb3cgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgSVJRX0NPSU5UMUIgICAgICAgICAgICAgMHgwODAwIC8qIGNvbnRlciAxQiBvdmVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBJUlFfQ09JTlQyQSAgICAgICAgICAgICAweDEwMDAgLyogY29udGVyIDJBIG92ZXJmbG93IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIElSUV9DT0lOVDJCICAgICAgICAgICAgIDB4MjAwMCAvKiBjb250ZXIgMkIgb3ZlcmZsb3cgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgSVJRX0NPSU5UM0EgICAgICAgICAgICAgMHg0MDAwIC8qIGNvbnRlciAzQSBvdmVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBJUlFfQ09JTlQzQiAgICAgICAgICAgICAweDgwMDAgLyogY29udGVyIDNCIG92ZXJmbG93IGludGVycnVwdCBtYXNrICovCiAKLSNkZWZpbmUgUlBTX0xPR0lDQUxfT1IJCTB4MDgwMDAwMDAJLy8gTG9naWNhbCBPUiBjb25kaXRpb25hbHMuCi0jZGVmaW5lIFJQU19JTlZFUlQJCTB4MDQwMDAwMDAJLy8gVGVzdCBmb3IgbmVnYXRlZCBzZW1hcGhvcmVzLgotI2RlZmluZSBSUFNfREVCSQkJMHgwMDAwMDAwMgkvLyBERUJJIGRvbmUKKy8qICBSUFMgY29tbWFuZCBjb2Rlcy4gKi8KKyNkZWZpbmUgUlBTX0NMUlNJR05BTAkJMHgwMDAwMDAwMAkvKiAgQ0xFQVIgU0lHTkFMICovCisjZGVmaW5lIFJQU19TRVRTSUdOQUwJCTB4MTAwMDAwMDAJLyogIFNFVCBTSUdOQUwgKi8KKyNkZWZpbmUgUlBTX05PUAkJCTB4MDAwMDAwMDAJLyogIE5PUCAqLworI2RlZmluZSBSUFNfUEFVU0UJCTB4MjAwMDAwMDAJLyogIFBBVVNFICovCisjZGVmaW5lIFJQU19VUExPQUQJCTB4NDAwMDAwMDAJLyogIFVQTE9BRCAqLworI2RlZmluZSBSUFNfSlVNUAkJMHg4MDAwMDAwMAkvKiAgSlVNUCAqLworI2RlZmluZSBSUFNfTERSRUcJCTB4OTAwMDAxMDAJLyogIExEUkVHICgxIHVpbnQzMl90IG9ubHkpICovCisjZGVmaW5lIFJQU19TVFJFRwkJMHhBMDAwMDEwMAkvKiAgU1RSRUcgKDEgdWludDMyX3Qgb25seSkgKi8KKyNkZWZpbmUgUlBTX1NUT1AJCTB4NTAwMDAwMDAJLyogIFNUT1AgKi8KKyNkZWZpbmUgUlBTX0lSUSAgICAgICAgICAgICAgICAgMHg2MDAwMDAwMAkvKiAgSVJRICovCiAKLSNkZWZpbmUgUlBTX1NJRzAJCTB4MDAyMDAwMDAJLy8gUlBTIHNlbWFwaG9yZSAwICh1c2VkIGJ5IEFEQykuCi0jZGVmaW5lIFJQU19TSUcxCQkweDAwNDAwMDAwCS8vIFJQUyBzZW1hcGhvcmUgMSAodXNlZCBieSBEQUMpLgotI2RlZmluZSBSUFNfU0lHMgkJMHgwMDgwMDAwMAkvLyBSUFMgc2VtYXBob3JlIDIgKG5vdCB1c2VkKS4KLSNkZWZpbmUgUlBTX0dQSU8yCQkweDAwMDgwMDAwCS8vIFJQUyBHUElPMgotI2RlZmluZSBSUFNfR1BJTzMJCTB4MDAxMDAwMDAJLy8gUlBTIEdQSU8zCisjZGVmaW5lIFJQU19MT0dJQ0FMX09SCQkweDA4MDAwMDAwCS8qICBMb2dpY2FsIE9SIGNvbmRpdGlvbmFscy4gKi8KKyNkZWZpbmUgUlBTX0lOVkVSVAkJMHgwNDAwMDAwMAkvKiAgVGVzdCBmb3IgbmVnYXRlZCBzZW1hcGhvcmVzLiAqLworI2RlZmluZSBSUFNfREVCSQkJMHgwMDAwMDAwMgkvKiAgREVCSSBkb25lICovCiAKLSNkZWZpbmUgUlBTX1NJR0FEQwkJUlBTX1NJRzAJLy8gVHJpZ2dlci9zdGF0dXMgZm9yIEFEQydzIFJQUyBwcm9ncmFtLgotI2RlZmluZSBSUFNfU0lHREFDCQlSUFNfU0lHMQkvLyBUcmlnZ2VyL3N0YXR1cyBmb3IgREFDJ3MgUlBTIHByb2dyYW0uCisjZGVmaW5lIFJQU19TSUcwCQkweDAwMjAwMDAwCS8qICBSUFMgc2VtYXBob3JlIDAgKHVzZWQgYnkgQURDKS4gKi8KKyNkZWZpbmUgUlBTX1NJRzEJCTB4MDA0MDAwMDAJLyogIFJQUyBzZW1hcGhvcmUgMSAodXNlZCBieSBEQUMpLiAqLworI2RlZmluZSBSUFNfU0lHMgkJMHgwMDgwMDAwMAkvKiAgUlBTIHNlbWFwaG9yZSAyIChub3QgdXNlZCkuICovCisjZGVmaW5lIFJQU19HUElPMgkJMHgwMDA4MDAwMAkvKiAgUlBTIEdQSU8yICovCisjZGVmaW5lIFJQU19HUElPMwkJMHgwMDEwMDAwMAkvKiAgUlBTIEdQSU8zICovCiAKLS8vIFJQUyBjbG9jayBwYXJhbWV0ZXJzLgotI2RlZmluZSBSUFNDTEtfU0NBTEFSCQk4CS8vIFRoaXMgaXMgYXBwYXJlbnQgcmF0aW8gb2YgUENJL1JQUyBjbGtzICh1bmRvY3VtZW50ZWQhISkuCi0jZGVmaW5lIFJQU0NMS19QRVJfVVMJCSggMzMgLyBSUFNDTEtfU0NBTEFSICkJLy8gTnVtYmVyIG9mIFJQUyBjbG9ja3MgaW4gb25lIG1pY3Jvc2Vjb25kLgorI2RlZmluZSBSUFNfU0lHQURDCQlSUFNfU0lHMAkvKiAgVHJpZ2dlci9zdGF0dXMgZm9yIEFEQydzIFJQUyBwcm9ncmFtLiAqLworI2RlZmluZSBSUFNfU0lHREFDCQlSUFNfU0lHMQkvKiAgVHJpZ2dlci9zdGF0dXMgZm9yIERBQydzIFJQUyBwcm9ncmFtLiAqLwogCi0vLyBFdmVudCBjb3VudGVyIHNvdXJjZSBhZGRyZXNzZXMuCi0jZGVmaW5lIFNCQV9SUFNfQTAJCTB4MjcJLy8gVGltZSBvZiBSUFMwIGJ1c3ksIGluIFBDSSBjbG9ja3MuCisvKiAgUlBTIGNsb2NrIHBhcmFtZXRlcnMuICovCisjZGVmaW5lIFJQU0NMS19TQ0FMQVIJCTgJLyogIFRoaXMgaXMgYXBwYXJlbnQgcmF0aW8gb2YgUENJL1JQUyBjbGtzICh1bmRvY3VtZW50ZWQhISkuICovCisjZGVmaW5lIFJQU0NMS19QRVJfVVMJCSgzMyAvIFJQU0NMS19TQ0FMQVIpCS8qICBOdW1iZXIgb2YgUlBTIGNsb2NrcyBpbiBvbmUgbWljcm9zZWNvbmQuICovCiAKLS8vIEdQSU8gY29uc3RhbnRzLgotI2RlZmluZSBHUElPX0JBU0UJCTB4MTAwMDQwMDAJLy8gR1BJTyAwLDIsMyA9IGlucHV0cywgR1BJTzMgPSBJUlE7IEdQSU8xID0gb3V0LgotI2RlZmluZSBHUElPMV9MTwkJMHgwMDAwMDAwMAkvLyBHUElPMSBzZXQgdG8gTE9XLgotI2RlZmluZSBHUElPMV9ISQkJMHgwMDAwMTAwMAkvLyBHUElPMSBzZXQgdG8gSElHSC4KKy8qICBFdmVudCBjb3VudGVyIHNvdXJjZSBhZGRyZXNzZXMuICovCisjZGVmaW5lIFNCQV9SUFNfQTAJCTB4MjcJLyogIFRpbWUgb2YgUlBTMCBidXN5LCBpbiBQQ0kgY2xvY2tzLiAqLwogCi0vLyBQcmltYXJ5IFN0YXR1cyBSZWdpc3RlciAoUFNSKSBjb25zdGFudHMuCi0jZGVmaW5lIFBTUl9ERUJJX0UJCTB4MDAwNDAwMDAJLy8gREVCSSBldmVudCBmbGFnLgotI2RlZmluZSBQU1JfREVCSV9TCQkweDAwMDgwMDAwCS8vIERFQkkgc3RhdHVzIGZsYWcuCi0jZGVmaW5lIFBTUl9BMl9JTgkJMHgwMDAwODAwMAkvLyBBdWRpbyBvdXRwdXQgRE1BMiBwcm90ZWN0aW9uIGFkZHJlc3MgcmVhY2hlZC4KLSNkZWZpbmUgUFNSX0FGT1UJCTB4MDAwMDA4MDAJLy8gQXVkaW8gRklGTyB1bmRlci9vdmVyZmxvdyBkZXRlY3RlZC4KLSNkZWZpbmUgUFNSX0dQSU8yCQkweDAwMDAwMDIwCS8vIEdQSU8yIGlucHV0IHBpbjogMD1BZGNCdXN5LCAxPUFkY0lkbGUuCi0jZGVmaW5lIFBTUl9FQzBTCQkweDAwMDAwMDAxCS8vIEV2ZW50IGNvdW50ZXIgMCB0aHJlc2hvbGQgcmVhY2hlZC4KKy8qICBHUElPIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgR1BJT19CQVNFCQkweDEwMDA0MDAwCS8qICBHUElPIDAsMiwzID0gaW5wdXRzLCBHUElPMyA9IElSUTsgR1BJTzEgPSBvdXQuICovCisjZGVmaW5lIEdQSU8xX0xPCQkweDAwMDAwMDAwCS8qICBHUElPMSBzZXQgdG8gTE9XLiAqLworI2RlZmluZSBHUElPMV9ISQkJMHgwMDAwMTAwMAkvKiAgR1BJTzEgc2V0IHRvIEhJR0guICovCiAKLS8vIFNlY29uZGFyeSBTdGF0dXMgUmVnaXN0ZXIgKFNTUikgY29uc3RhbnRzLgotI2RlZmluZSBTU1JfQUYyX09VVAkJMHgwMDAwMDIwMAkvLyBBdWRpbyAyIG91dHB1dCBGSUZPIHVuZGVyL292ZXJmbG93IGRldGVjdGVkLgorLyogIFByaW1hcnkgU3RhdHVzIFJlZ2lzdGVyIChQU1IpIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgUFNSX0RFQklfRQkJMHgwMDA0MDAwMAkvKiAgREVCSSBldmVudCBmbGFnLiAqLworI2RlZmluZSBQU1JfREVCSV9TCQkweDAwMDgwMDAwCS8qICBERUJJIHN0YXR1cyBmbGFnLiAqLworI2RlZmluZSBQU1JfQTJfSU4JCTB4MDAwMDgwMDAJLyogIEF1ZGlvIG91dHB1dCBETUEyIHByb3RlY3Rpb24gYWRkcmVzcyByZWFjaGVkLiAqLworI2RlZmluZSBQU1JfQUZPVQkJMHgwMDAwMDgwMAkvKiAgQXVkaW8gRklGTyB1bmRlci9vdmVyZmxvdyBkZXRlY3RlZC4gKi8KKyNkZWZpbmUgUFNSX0dQSU8yCQkweDAwMDAwMDIwCS8qICBHUElPMiBpbnB1dCBwaW46IDA9QWRjQnVzeSwgMT1BZGNJZGxlLiAqLworI2RlZmluZSBQU1JfRUMwUwkJMHgwMDAwMDAwMQkvKiAgRXZlbnQgY291bnRlciAwIHRocmVzaG9sZCByZWFjaGVkLiAqLwogCi0vLyBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAxIChNQzEpIGNvbnN0YW50cy4KLSNkZWZpbmUgTUMxX1NPRlRfUkVTRVQJCTB4ODAwMDAwMDAJLy8gSW52b2tlIDcxNDYgc29mdCByZXNldC4KLSNkZWZpbmUgTUMxX1NIVVRET1dOCQkweDNGRkYwMDAwCS8vIFNodXQgZG93biBhbGwgTUMxLWNvbnRyb2xsZWQgZW5hYmxlcy4KKy8qICBTZWNvbmRhcnkgU3RhdHVzIFJlZ2lzdGVyIChTU1IpIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgU1NSX0FGMl9PVVQJCTB4MDAwMDAyMDAJLyogIEF1ZGlvIDIgb3V0cHV0IEZJRk8gdW5kZXIvb3ZlcmZsb3cgZGV0ZWN0ZWQuICovCiAKLSNkZWZpbmUgTUMxX0VSUFMxCQkweDIwMDAJLy8gZW5hYi9kaXNhYmxlIFJQUyB0YXNrIDEuCi0jZGVmaW5lIE1DMV9FUlBTMAkJMHgxMDAwCS8vIGVuYWIvZGlzYWJsZSBSUFMgdGFzayAwLgotI2RlZmluZSBNQzFfREVCSQkJMHgwODAwCS8vIGVuYWIvZGlzYWJsZSBERUJJIHBpbnMuCi0jZGVmaW5lIE1DMV9BVURJTwkJMHgwMjAwCS8vIGVuYWIvZGlzYWJsZSBhdWRpbyBwb3J0IHBpbnMuCi0jZGVmaW5lIE1DMV9JMkMJCQkweDAxMDAJLy8gZW5hYi9kaXNhYmxlIEkyQyBpbnRlcmZhY2UuCi0jZGVmaW5lIE1DMV9BMk9VVAkJMHgwMDA4CS8vIGVuYWIvZGlzYWJsZSB0cmFuc2ZlciBvbiBBMiBvdXQuCi0jZGVmaW5lIE1DMV9BMklOCQkweDAwMDQJLy8gZW5hYi9kaXNhYmxlIHRyYW5zZmVyIG9uIEEyIGluLgotI2RlZmluZSBNQzFfQTFJTgkJMHgwMDAxCS8vIGVuYWIvZGlzYWJsZSB0cmFuc2ZlciBvbiBBMSBpbi4KKy8qICBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAxIChNQzEpIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgTUMxX1NPRlRfUkVTRVQJCTB4ODAwMDAwMDAJLyogIEludm9rZSA3MTQ2IHNvZnQgcmVzZXQuICovCisjZGVmaW5lIE1DMV9TSFVURE9XTgkJMHgzRkZGMDAwMAkvKiAgU2h1dCBkb3duIGFsbCBNQzEtY29udHJvbGxlZCBlbmFibGVzLiAqLwogCi0vLyBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAyIChNQzIpIGNvbnN0YW50cy4KLSNkZWZpbmUgTUMyX1VQTERfREVCSXEJCTB4MDAwMjAwMDIJLy8gVXBsb2FkIERFQkkgcmVnaXN0ZXJzLgotI2RlZmluZSBNQzJfVVBMRF9JSUNxCQkweDAwMDEwMDAxCS8vIFVwbG9hZCBJMkMgcmVnaXN0ZXJzLgotI2RlZmluZSBNQzJfUlBTU0lHMl9PTnEJCTB4MjAwMDIwMDAJLy8gQXNzZXJ0IFJQU19TSUcyLgotI2RlZmluZSBNQzJfUlBTU0lHMV9PTnEJCTB4MTAwMDEwMDAJLy8gQXNzZXJ0IFJQU19TSUcxLgotI2RlZmluZSBNQzJfUlBTU0lHMF9PTnEJCTB4MDgwMDA4MDAJLy8gQXNzZXJ0IFJQU19TSUcwLgotI2RlZmluZSBNQzJfVVBMRF9ERUJJX01BU0txCTB4MDAwMDAwMDIJLy8gVXBsb2FkIERFQkkgbWFzay4KLSNkZWZpbmUgTUMyX1VQTERfSUlDX01BU0txCTB4MDAwMDAwMDEJLy8gVXBsb2FkIEkyQyBtYXNrLgotI2RlZmluZSBNQzJfUlBTU0lHMl9NQVNLcQkweDAwMDAyMDAwCS8vIFJQU19TSUcyIGJpdCBtYXNrLgotI2RlZmluZSBNQzJfUlBTU0lHMV9NQVNLcQkweDAwMDAxMDAwCS8vIFJQU19TSUcxIGJpdCBtYXNrLgotI2RlZmluZSBNQzJfUlBTU0lHMF9NQVNLcQkweDAwMDAwODAwCS8vIFJQU19TSUcwIGJpdCBtYXNrLgorI2RlZmluZSBNQzFfRVJQUzEJCTB4MjAwMAkvKiAgZW5hYi9kaXNhYmxlIFJQUyB0YXNrIDEuICovCisjZGVmaW5lIE1DMV9FUlBTMAkJMHgxMDAwCS8qICBlbmFiL2Rpc2FibGUgUlBTIHRhc2sgMC4gKi8KKyNkZWZpbmUgTUMxX0RFQkkJCTB4MDgwMAkvKiAgZW5hYi9kaXNhYmxlIERFQkkgcGlucy4gKi8KKyNkZWZpbmUgTUMxX0FVRElPCQkweDAyMDAJLyogIGVuYWIvZGlzYWJsZSBhdWRpbyBwb3J0IHBpbnMuICovCisjZGVmaW5lIE1DMV9JMkMJCQkweDAxMDAJLyogIGVuYWIvZGlzYWJsZSBJMkMgaW50ZXJmYWNlLiAqLworI2RlZmluZSBNQzFfQTJPVVQJCTB4MDAwOAkvKiAgZW5hYi9kaXNhYmxlIHRyYW5zZmVyIG9uIEEyIG91dC4gKi8KKyNkZWZpbmUgTUMxX0EySU4JCTB4MDAwNAkvKiAgZW5hYi9kaXNhYmxlIHRyYW5zZmVyIG9uIEEyIGluLiAqLworI2RlZmluZSBNQzFfQTFJTgkJMHgwMDAxCS8qICBlbmFiL2Rpc2FibGUgdHJhbnNmZXIgb24gQTEgaW4uICovCisKKy8qICBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAyIChNQzIpIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgTUMyX1VQTERfREVCSXEJCTB4MDAwMjAwMDIJLyogIFVwbG9hZCBERUJJIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgTUMyX1VQTERfSUlDcQkJMHgwMDAxMDAwMQkvKiAgVXBsb2FkIEkyQyByZWdpc3RlcnMuICovCisjZGVmaW5lIE1DMl9SUFNTSUcyX09OcQkJMHgyMDAwMjAwMAkvKiAgQXNzZXJ0IFJQU19TSUcyLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMV9PTnEJCTB4MTAwMDEwMDAJLyogIEFzc2VydCBSUFNfU0lHMS4gKi8KKyNkZWZpbmUgTUMyX1JQU1NJRzBfT05xCQkweDA4MDAwODAwCS8qICBBc3NlcnQgUlBTX1NJRzAuICovCisjZGVmaW5lIE1DMl9VUExEX0RFQklfTUFTS3EJMHgwMDAwMDAwMgkvKiAgVXBsb2FkIERFQkkgbWFzay4gKi8KKyNkZWZpbmUgTUMyX1VQTERfSUlDX01BU0txCTB4MDAwMDAwMDEJLyogIFVwbG9hZCBJMkMgbWFzay4gKi8KKyNkZWZpbmUgTUMyX1JQU1NJRzJfTUFTS3EJMHgwMDAwMjAwMAkvKiAgUlBTX1NJRzIgYml0IG1hc2suICovCisjZGVmaW5lIE1DMl9SUFNTSUcxX01BU0txCTB4MDAwMDEwMDAJLyogIFJQU19TSUcxIGJpdCBtYXNrLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMF9NQVNLcQkweDAwMDAwODAwCS8qICBSUFNfU0lHMCBiaXQgbWFzay4gKi8KIAogI2RlZmluZSBNQzJfREVMQVlUUklHXzRVU3EJTUMyX1JQU1NJRzFfT04KICNkZWZpbmUgTUMyX0RFTEFZQlVTWV80VVNxCU1DMl9SUFNTSUcxX01BU0sKQEAgLTIzNiw0NjkgKzIyNSw0MjUgQEAKICNkZWZpbmUJTUMyX0RFTEFZVFJJR182VVNxCU1DMl9SUFNTSUcyX09OCiAjZGVmaW5lIE1DMl9ERUxBWUJVU1lfNlVTcQlNQzJfUlBTU0lHMl9NQVNLCiAKLSNkZWZpbmUgTUMyX1VQTERfREVCSQkJMHgwMDAyCS8vIFVwbG9hZCBERUJJLgotI2RlZmluZSBNQzJfVVBMRF9JSUMJCTB4MDAwMQkvLyBVcGxvYWQgSTJDLgotI2RlZmluZSBNQzJfUlBTU0lHMgkJMHgyMDAwCS8vIFJQUyBzaWduYWwgMiAobm90IHVzZWQpLgotI2RlZmluZSBNQzJfUlBTU0lHMQkJMHgxMDAwCS8vIFJQUyBzaWduYWwgMSAoREFDIFJQUyBidXN5KS4KLSNkZWZpbmUgTUMyX1JQU1NJRzAJCTB4MDgwMAkvLyBSUFMgc2lnbmFsIDAgKEFEQyBSUFMgYnVzeSkuCisjZGVmaW5lIE1DMl9VUExEX0RFQkkJCTB4MDAwMgkvKiAgVXBsb2FkIERFQkkuICovCisjZGVmaW5lIE1DMl9VUExEX0lJQwkJMHgwMDAxCS8qICBVcGxvYWQgSTJDLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMgkJMHgyMDAwCS8qICBSUFMgc2lnbmFsIDIgKG5vdCB1c2VkKS4gKi8KKyNkZWZpbmUgTUMyX1JQU1NJRzEJCTB4MTAwMAkvKiAgUlBTIHNpZ25hbCAxIChEQUMgUlBTIGJ1c3kpLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMAkJMHgwODAwCS8qICBSUFMgc2lnbmFsIDAgKEFEQyBSUFMgYnVzeSkuICovCiAKLSNkZWZpbmUgTUMyX0FEQ19SUFMJCU1DMl9SUFNTSUcwCS8vIEFEQyBSUFMgYnVzeS4KLSNkZWZpbmUgTUMyX0RBQ19SUFMJCU1DMl9SUFNTSUcxCS8vIERBQyBSUFMgYnVzeS4KKyNkZWZpbmUgTUMyX0FEQ19SUFMJCU1DMl9SUFNTSUcwCS8qICBBREMgUlBTIGJ1c3kuICovCisjZGVmaW5lIE1DMl9EQUNfUlBTCQlNQzJfUlBTU0lHMQkvKiAgREFDIFJQUyBidXN5LiAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vb2xkaWVzLy8vLy8vLy8vLy8KLSNkZWZpbmUgTUMyX1VQTERfREVCSVEJCTB4MDAwMjAwMDIJLy8gVXBsb2FkIERFQkkgcmVnaXN0ZXJzLgotI2RlZmluZSBNQzJfVVBMRF9JSUNRCQkweDAwMDEwMDAxCS8vIFVwbG9hZCBJMkMgcmVnaXN0ZXJzLgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyogKioqKiogb2xkaWVzICoqKioqICovCisjZGVmaW5lIE1DMl9VUExEX0RFQklRCQkweDAwMDIwMDAyCS8qICBVcGxvYWQgREVCSSByZWdpc3RlcnMuICovCisjZGVmaW5lIE1DMl9VUExEX0lJQ1EJCTB4MDAwMTAwMDEJLyogIFVwbG9hZCBJMkMgcmVnaXN0ZXJzLiAqLwogCi0vLyBQQ0kgQlVTIChTQUE3MTQ2KSBSRUdJU1RFUiBBRERSRVNTIE9GRlNFVFMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jZGVmaW5lIFBfUENJX0JUX0EJCTB4MDA0QwkvLyBBdWRpbyBETUEKLQkJCQkJCS8vIGJ1cnN0L3RocmVzaG9sZAotCQkJCQkJLy8gY29udHJvbC4KLSNkZWZpbmUgUF9ERUJJQ0ZHICAgICAgICAgICAgICAgMHgwMDdDCS8vIERFQkkgY29uZmlndXJhdGlvbi4KLSNkZWZpbmUgUF9ERUJJQ01EICAgICAgICAgICAgICAgMHgwMDgwCS8vIERFQkkgY29tbWFuZC4KLSNkZWZpbmUgUF9ERUJJUEFHRSAgICAgICAgICAgICAgMHgwMDg0CS8vIERFQkkgcGFnZS4KLSNkZWZpbmUgUF9ERUJJQUQgICAgICAgICAgICAgICAgMHgwMDg4CS8vIERFQkkgdGFyZ2V0IGFkZHJlc3MuCi0jZGVmaW5lIFBfSTJDQ1RSTCAgICAgICAgICAgICAgIDB4MDA4QwkvLyBJMkMgY29udHJvbC4KLSNkZWZpbmUgUF9JMkNTVEFUICAgICAgICAgICAgICAgMHgwMDkwCS8vIEkyQyBzdGF0dXMuCi0jZGVmaW5lIFBfQkFTRUEyX0lOCQkweDAwQUMJLy8gQXVkaW8gaW5wdXQgMiBiYXNlCi0JCQkJCQkvLyBwaHlzaWNhbCBETUFidWYKLQkJCQkJCS8vIGFkZHJlc3MuCi0jZGVmaW5lIFBfUFJPVEEyX0lOCQkweDAwQjAJLy8gQXVkaW8gaW5wdXQgMgotCQkJCQkJLy8gcGh5c2ljYWwgRE1BYnVmCi0JCQkJCQkvLyBwcm90ZWN0aW9uIGFkZHJlc3MuCi0jZGVmaW5lIFBfUEFHRUEyX0lOCQkweDAwQjQJLy8gQXVkaW8gaW5wdXQgMgotCQkJCQkJLy8gcGFnaW5nIGF0dHJpYnV0ZXMuCi0jZGVmaW5lIFBfQkFTRUEyX09VVAkJMHgwMEI4CS8vIEF1ZGlvIG91dHB1dCAyIGJhc2UKLQkJCQkJCS8vIHBoeXNpY2FsIERNQWJ1ZgotCQkJCQkJLy8gYWRkcmVzcy4KLSNkZWZpbmUgUF9QUk9UQTJfT1VUCQkweDAwQkMJLy8gQXVkaW8gb3V0cHV0IDIKLQkJCQkJCS8vIHBoeXNpY2FsIERNQWJ1ZgotCQkJCQkJLy8gcHJvdGVjdGlvbiBhZGRyZXNzLgotI2RlZmluZSBQX1BBR0VBMl9PVVQJCTB4MDBDMAkvLyBBdWRpbyBvdXRwdXQgMgotCQkJCQkJLy8gcGFnaW5nIGF0dHJpYnV0ZXMuCi0jZGVmaW5lIFBfUlBTUEFHRTAgICAgICAgICAgICAgIDB4MDBDNAkvLyBSUFMwIHBhZ2UuCi0jZGVmaW5lIFBfUlBTUEFHRTEgICAgICAgICAgICAgIDB4MDBDOAkvLyBSUFMxIHBhZ2UuCi0jZGVmaW5lIFBfUlBTMF9UT1VUCQkweDAwRDQJLy8gUlBTMCB0aW1lLW91dC4KLSNkZWZpbmUgUF9SUFMxX1RPVVQJCTB4MDBEOAkvLyBSUFMxIHRpbWUtb3V0LgotI2RlZmluZSBQX0lFUiAgICAgICAgICAgICAgICAgICAweDAwREMJLy8gSW50ZXJydXB0IGVuYWJsZS4KLSNkZWZpbmUgUF9HUElPICAgICAgICAgICAgICAgICAgMHgwMEUwCS8vIEdlbmVyYWwtcHVycG9zZSBJL08uCi0jZGVmaW5lIFBfRUMxU1NSCQkweDAwRTQJLy8gRXZlbnQgY291bnRlciBzZXQgMQotCQkJCQkJLy8gc291cmNlIHNlbGVjdC4KLSNkZWZpbmUgUF9FQ1QxUgkJCTB4MDBFQwkvLyBFdmVudCBjb3VudGVyCi0JCQkJCQkvLyB0aHJlc2hvbGQgc2V0IDEuCi0jZGVmaW5lIFBfQUNPTjEgICAgICAgICAgICAgICAgIDB4MDBGNAkvLyBBdWRpbyBjb250cm9sIDEuCi0jZGVmaW5lIFBfQUNPTjIgICAgICAgICAgICAgICAgIDB4MDBGOAkvLyBBdWRpbyBjb250cm9sIDIuCi0jZGVmaW5lIFBfTUMxICAgICAgICAgICAgICAgICAgIDB4MDBGQwkvLyBNYXN0ZXIgY29udHJvbCAxLgotI2RlZmluZSBQX01DMiAgICAgICAgICAgICAgICAgICAweDAxMDAJLy8gTWFzdGVyIGNvbnRyb2wgMi4KLSNkZWZpbmUgUF9SUFNBRERSMCAgICAgICAgICAgICAgMHgwMTA0CS8vIFJQUzAgaW5zdHJ1Y3Rpb24gcG9pbnRlci4KLSNkZWZpbmUgUF9SUFNBRERSMSAgICAgICAgICAgICAgMHgwMTA4CS8vIFJQUzEgaW5zdHJ1Y3Rpb24gcG9pbnRlci4KLSNkZWZpbmUgUF9JU1IgICAgICAgICAgICAgICAgICAgMHgwMTBDCS8vIEludGVycnVwdCBzdGF0dXMuCi0jZGVmaW5lIFBfUFNSICAgICAgICAgICAgICAgICAgIDB4MDExMAkvLyBQcmltYXJ5IHN0YXR1cy4KLSNkZWZpbmUgUF9TU1IgICAgICAgICAgICAgICAgICAgMHgwMTE0CS8vIFNlY29uZGFyeSBzdGF0dXMuCi0jZGVmaW5lIFBfRUMxUgkJCTB4MDExOAkvLyBFdmVudCBjb3VudGVyIHNldCAxLgotI2RlZmluZSBQX0FEUDQJCQkweDAxMzgJLy8gTG9naWNhbCBhdWRpbyBETUEKLQkJCQkJCS8vIHBvaW50ZXIgb2YgYXVkaW8KLQkJCQkJCS8vIGlucHV0IEZJRk8gQTJfSU4uCi0jZGVmaW5lIFBfRkJfQlVGRkVSMSAgICAgICAgICAgIDB4MDE0NAkvLyBBdWRpbyBmZWVkYmFjayBidWZmZXIgMS4KLSNkZWZpbmUgUF9GQl9CVUZGRVIyICAgICAgICAgICAgMHgwMTQ4CS8vIEF1ZGlvIGZlZWRiYWNrIGJ1ZmZlciAyLgotI2RlZmluZSBQX1RTTDEgICAgICAgICAgICAgICAgICAweDAxODAJLy8gQXVkaW8gdGltZSBzbG90IGxpc3QgMS4KLSNkZWZpbmUgUF9UU0wyICAgICAgICAgICAgICAgICAgMHgwMUMwCS8vIEF1ZGlvIHRpbWUgc2xvdCBsaXN0IDIuCisvKiAgUENJIEJVUyAoU0FBNzE0NikgUkVHSVNURVIgQUREUkVTUyBPRkZTRVRTICovCisjZGVmaW5lIFBfUENJX0JUX0EJCTB4MDA0QwkvKiBBdWRpbyBETUEgYnVyc3QvdGhyZXNob2xkIGNvbnRyb2wuICovCisjZGVmaW5lIFBfREVCSUNGRyAgICAgICAgICAgICAgIDB4MDA3QwkvKiBERUJJIGNvbmZpZ3VyYXRpb24uICovCisjZGVmaW5lIFBfREVCSUNNRCAgICAgICAgICAgICAgIDB4MDA4MAkvKiBERUJJIGNvbW1hbmQuICovCisjZGVmaW5lIFBfREVCSVBBR0UgICAgICAgICAgICAgIDB4MDA4NAkvKiBERUJJIHBhZ2UuICovCisjZGVmaW5lIFBfREVCSUFEICAgICAgICAgICAgICAgIDB4MDA4OAkvKiBERUJJIHRhcmdldCBhZGRyZXNzLiAqLworI2RlZmluZSBQX0kyQ0NUUkwgICAgICAgICAgICAgICAweDAwOEMJLyogSTJDIGNvbnRyb2wuICovCisjZGVmaW5lIFBfSTJDU1RBVCAgICAgICAgICAgICAgIDB4MDA5MAkvKiBJMkMgc3RhdHVzLiAqLworI2RlZmluZSBQX0JBU0VBMl9JTgkJMHgwMEFDCS8qIEF1ZGlvIGlucHV0IDIgYmFzZSBwaHlzaWNhbCBETUFidWYKKwkJCQkJICogYWRkcmVzcy4gKi8KKyNkZWZpbmUgUF9QUk9UQTJfSU4JCTB4MDBCMAkvKiBBdWRpbyBpbnB1dCAyIHBoeXNpY2FsIERNQWJ1ZgorCQkJCQkgKiBwcm90ZWN0aW9uIGFkZHJlc3MuICovCisjZGVmaW5lIFBfUEFHRUEyX0lOCQkweDAwQjQJLyogQXVkaW8gaW5wdXQgMiBwYWdpbmcgYXR0cmlidXRlcy4gKi8KKyNkZWZpbmUgUF9CQVNFQTJfT1VUCQkweDAwQjgJLyogQXVkaW8gb3V0cHV0IDIgYmFzZSBwaHlzaWNhbCBETUFidWYKKwkJCQkJICogYWRkcmVzcy4gKi8KKyNkZWZpbmUgUF9QUk9UQTJfT1VUCQkweDAwQkMJLyogQXVkaW8gb3V0cHV0IDIgcGh5c2ljYWwgRE1BYnVmCisJCQkJCSAqIHByb3RlY3Rpb24gYWRkcmVzcy4gKi8KKyNkZWZpbmUgUF9QQUdFQTJfT1VUCQkweDAwQzAJLyogQXVkaW8gb3V0cHV0IDIgcGFnaW5nIGF0dHJpYnV0ZXMuICovCisjZGVmaW5lIFBfUlBTUEFHRTAgICAgICAgICAgICAgIDB4MDBDNAkvKiBSUFMwIHBhZ2UuICovCisjZGVmaW5lIFBfUlBTUEFHRTEgICAgICAgICAgICAgIDB4MDBDOAkvKiBSUFMxIHBhZ2UuICovCisjZGVmaW5lIFBfUlBTMF9UT1VUCQkweDAwRDQJLyogUlBTMCB0aW1lLW91dC4gKi8KKyNkZWZpbmUgUF9SUFMxX1RPVVQJCTB4MDBEOAkvKiBSUFMxIHRpbWUtb3V0LiAqLworI2RlZmluZSBQX0lFUiAgICAgICAgICAgICAgICAgICAweDAwREMJLyogSW50ZXJydXB0IGVuYWJsZS4gKi8KKyNkZWZpbmUgUF9HUElPICAgICAgICAgICAgICAgICAgMHgwMEUwCS8qIEdlbmVyYWwtcHVycG9zZSBJL08uICovCisjZGVmaW5lIFBfRUMxU1NSCQkweDAwRTQJLyogRXZlbnQgY291bnRlciBzZXQgMSBzb3VyY2Ugc2VsZWN0LiAqLworI2RlZmluZSBQX0VDVDFSCQkJMHgwMEVDCS8qIEV2ZW50IGNvdW50ZXIgdGhyZXNob2xkIHNldCAxLiAqLworI2RlZmluZSBQX0FDT04xICAgICAgICAgICAgICAgICAweDAwRjQJLyogQXVkaW8gY29udHJvbCAxLiAqLworI2RlZmluZSBQX0FDT04yICAgICAgICAgICAgICAgICAweDAwRjgJLyogQXVkaW8gY29udHJvbCAyLiAqLworI2RlZmluZSBQX01DMSAgICAgICAgICAgICAgICAgICAweDAwRkMJLyogTWFzdGVyIGNvbnRyb2wgMS4gKi8KKyNkZWZpbmUgUF9NQzIgICAgICAgICAgICAgICAgICAgMHgwMTAwCS8qIE1hc3RlciBjb250cm9sIDIuICovCisjZGVmaW5lIFBfUlBTQUREUjAgICAgICAgICAgICAgIDB4MDEwNAkvKiBSUFMwIGluc3RydWN0aW9uIHBvaW50ZXIuICovCisjZGVmaW5lIFBfUlBTQUREUjEgICAgICAgICAgICAgIDB4MDEwOAkvKiBSUFMxIGluc3RydWN0aW9uIHBvaW50ZXIuICovCisjZGVmaW5lIFBfSVNSICAgICAgICAgICAgICAgICAgIDB4MDEwQwkvKiBJbnRlcnJ1cHQgc3RhdHVzLiAqLworI2RlZmluZSBQX1BTUiAgICAgICAgICAgICAgICAgICAweDAxMTAJLyogUHJpbWFyeSBzdGF0dXMuICovCisjZGVmaW5lIFBfU1NSICAgICAgICAgICAgICAgICAgIDB4MDExNAkvKiBTZWNvbmRhcnkgc3RhdHVzLiAqLworI2RlZmluZSBQX0VDMVIJCQkweDAxMTgJLyogRXZlbnQgY291bnRlciBzZXQgMS4gKi8KKyNkZWZpbmUgUF9BRFA0CQkJMHgwMTM4CS8qIExvZ2ljYWwgYXVkaW8gRE1BIHBvaW50ZXIgb2YgYXVkaW8KKwkJCQkJICogaW5wdXQgRklGTyBBMl9JTi4gKi8KKyNkZWZpbmUgUF9GQl9CVUZGRVIxICAgICAgICAgICAgMHgwMTQ0CS8qIEF1ZGlvIGZlZWRiYWNrIGJ1ZmZlciAxLiAqLworI2RlZmluZSBQX0ZCX0JVRkZFUjIgICAgICAgICAgICAweDAxNDgJLyogQXVkaW8gZmVlZGJhY2sgYnVmZmVyIDIuICovCisjZGVmaW5lIFBfVFNMMSAgICAgICAgICAgICAgICAgIDB4MDE4MAkvKiBBdWRpbyB0aW1lIHNsb3QgbGlzdCAxLiAqLworI2RlZmluZSBQX1RTTDIgICAgICAgICAgICAgICAgICAweDAxQzAJLyogQXVkaW8gdGltZSBzbG90IGxpc3QgMi4gKi8KIAotLy8gTE9DQUwgQlVTIChHQVRFIEFSUkFZKSBSRUdJU1RFUiBBRERSRVNTIE9GRlNFVFMgLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEFuYWxvZyBJL08gcmVnaXN0ZXJzOgotI2RlZmluZSBMUF9EQUNQT0wJCTB4MDA4MgkvLyAgV3JpdGUgREFDIHBvbGFyaXR5LgotI2RlZmluZSBMUF9HU0VMCQkJMHgwMDg0CS8vICBXcml0ZSBBREMgZ2Fpbi4KLSNkZWZpbmUgTFBfSVNFTAkJCTB4MDA4NgkvLyAgV3JpdGUgQURDIGNoYW5uZWwgc2VsZWN0LgotLy8gRGlnaXRhbCBJL08gKHdyaXRlIG9ubHkpOgotI2RlZmluZSBMUF9XUklOVFNFTEEJCTB4MDA0MgkvLyAgV3JpdGUgQSBpbnRlcnJ1cHQgZW5hYmxlLgotI2RlZmluZSBMUF9XUkVER1NFTEEJCTB4MDA0NAkvLyAgV3JpdGUgQSBlZGdlIHNlbGVjdGlvbi4KLSNkZWZpbmUgTFBfV1JDQVBTRUxBCQkweDAwNDYJLy8gIFdyaXRlIEEgY2FwdHVyZSBlbmFibGUuCi0jZGVmaW5lIExQX1dSRE9VVEEJCTB4MDA0OAkvLyAgV3JpdGUgQSBkaWdpdGFsIG91dHB1dC4KLSNkZWZpbmUgTFBfV1JJTlRTRUxCCQkweDAwNTIJLy8gIFdyaXRlIEIgaW50ZXJydXB0IGVuYWJsZS4KLSNkZWZpbmUgTFBfV1JFREdTRUxCCQkweDAwNTQJLy8gIFdyaXRlIEIgZWRnZSBzZWxlY3Rpb24uCi0jZGVmaW5lIExQX1dSQ0FQU0VMQgkJMHgwMDU2CS8vICBXcml0ZSBCIGNhcHR1cmUgZW5hYmxlLgotI2RlZmluZSBMUF9XUkRPVVRCCQkweDAwNTgJLy8gIFdyaXRlIEIgZGlnaXRhbCBvdXRwdXQuCi0jZGVmaW5lIExQX1dSSU5UU0VMQwkJMHgwMDYyCS8vICBXcml0ZSBDIGludGVycnVwdCBlbmFibGUuCi0jZGVmaW5lIExQX1dSRURHU0VMQwkJMHgwMDY0CS8vICBXcml0ZSBDIGVkZ2Ugc2VsZWN0aW9uLgotI2RlZmluZSBMUF9XUkNBUFNFTEMJCTB4MDA2NgkvLyAgV3JpdGUgQyBjYXB0dXJlIGVuYWJsZS4KLSNkZWZpbmUgTFBfV1JET1VUQwkJMHgwMDY4CS8vICBXcml0ZSBDIGRpZ2l0YWwgb3V0cHV0LgorLyogIExPQ0FMIEJVUyAoR0FURSBBUlJBWSkgUkVHSVNURVIgQUREUkVTUyBPRkZTRVRTICovCisvKiAgQW5hbG9nIEkvTyByZWdpc3RlcnM6ICovCisjZGVmaW5lIExQX0RBQ1BPTAkJMHgwMDgyCS8qICAgV3JpdGUgREFDIHBvbGFyaXR5LiAqLworI2RlZmluZSBMUF9HU0VMCQkJMHgwMDg0CS8qICAgV3JpdGUgQURDIGdhaW4uICovCisjZGVmaW5lIExQX0lTRUwJCQkweDAwODYJLyogICBXcml0ZSBBREMgY2hhbm5lbCBzZWxlY3QuICovCisvKiAgRGlnaXRhbCBJL08gKHdyaXRlIG9ubHkpOiAqLworI2RlZmluZSBMUF9XUklOVFNFTEEJCTB4MDA0MgkvKiAgIFdyaXRlIEEgaW50ZXJydXB0IGVuYWJsZS4gKi8KKyNkZWZpbmUgTFBfV1JFREdTRUxBCQkweDAwNDQJLyogICBXcml0ZSBBIGVkZ2Ugc2VsZWN0aW9uLiAqLworI2RlZmluZSBMUF9XUkNBUFNFTEEJCTB4MDA0NgkvKiAgIFdyaXRlIEEgY2FwdHVyZSBlbmFibGUuICovCisjZGVmaW5lIExQX1dSRE9VVEEJCTB4MDA0OAkvKiAgIFdyaXRlIEEgZGlnaXRhbCBvdXRwdXQuICovCisjZGVmaW5lIExQX1dSSU5UU0VMQgkJMHgwMDUyCS8qICAgV3JpdGUgQiBpbnRlcnJ1cHQgZW5hYmxlLiAqLworI2RlZmluZSBMUF9XUkVER1NFTEIJCTB4MDA1NAkvKiAgIFdyaXRlIEIgZWRnZSBzZWxlY3Rpb24uICovCisjZGVmaW5lIExQX1dSQ0FQU0VMQgkJMHgwMDU2CS8qICAgV3JpdGUgQiBjYXB0dXJlIGVuYWJsZS4gKi8KKyNkZWZpbmUgTFBfV1JET1VUQgkJMHgwMDU4CS8qICAgV3JpdGUgQiBkaWdpdGFsIG91dHB1dC4gKi8KKyNkZWZpbmUgTFBfV1JJTlRTRUxDCQkweDAwNjIJLyogICBXcml0ZSBDIGludGVycnVwdCBlbmFibGUuICovCisjZGVmaW5lIExQX1dSRURHU0VMQwkJMHgwMDY0CS8qICAgV3JpdGUgQyBlZGdlIHNlbGVjdGlvbi4gKi8KKyNkZWZpbmUgTFBfV1JDQVBTRUxDCQkweDAwNjYJLyogICBXcml0ZSBDIGNhcHR1cmUgZW5hYmxlLiAqLworI2RlZmluZSBMUF9XUkRPVVRDCQkweDAwNjgJLyogICBXcml0ZSBDIGRpZ2l0YWwgb3V0cHV0LiAqLwogCi0vLyBEaWdpdGFsIEkvTyAocmVhZCBvbmx5KToKLSNkZWZpbmUgTFBfUkRESU5BCQkweDAwNDAJLy8gIFJlYWQgZGlnaXRhbCBpbnB1dC4KLSNkZWZpbmUgTFBfUkRDQVBGTEdBCQkweDAwNDgJLy8gIFJlYWQgZWRnZXMgY2FwdHVyZWQuCi0jZGVmaW5lIExQX1JESU5UU0VMQQkJMHgwMDRBCS8vICBSZWFkIGludGVycnVwdAotCQkJCQkJLy8gIGVuYWJsZSByZWdpc3Rlci4KLSNkZWZpbmUgTFBfUkRFREdTRUxBCQkweDAwNEMJLy8gIFJlYWQgZWRnZQotCQkJCQkJLy8gIHNlbGVjdGlvbgotCQkJCQkJLy8gIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9SRENBUFNFTEEJCTB4MDA0RQkvLyAgUmVhZCBjYXB0dXJlCi0JCQkJCQkvLyAgZW5hYmxlIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9SRERJTkIJCTB4MDA1MAkvLyAgUmVhZCBkaWdpdGFsIGlucHV0LgotI2RlZmluZSBMUF9SRENBUEZMR0IJCTB4MDA1OAkvLyAgUmVhZCBlZGdlcyBjYXB0dXJlZC4KLSNkZWZpbmUgTFBfUkRJTlRTRUxCCQkweDAwNUEJLy8gIFJlYWQgaW50ZXJydXB0Ci0JCQkJCQkvLyAgZW5hYmxlIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9SREVER1NFTEIJCTB4MDA1QwkvLyAgUmVhZCBlZGdlCi0JCQkJCQkvLyAgc2VsZWN0aW9uCi0JCQkJCQkvLyAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JEQ0FQU0VMQgkJMHgwMDVFCS8vICBSZWFkIGNhcHR1cmUKLQkJCQkJCS8vICBlbmFibGUgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JERElOQwkJMHgwMDYwCS8vICBSZWFkIGRpZ2l0YWwgaW5wdXQuCi0jZGVmaW5lIExQX1JEQ0FQRkxHQwkJMHgwMDY4CS8vICBSZWFkIGVkZ2VzIGNhcHR1cmVkLgotI2RlZmluZSBMUF9SRElOVFNFTEMJCTB4MDA2QQkvLyAgUmVhZCBpbnRlcnJ1cHQKLQkJCQkJCS8vICBlbmFibGUgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JERURHU0VMQwkJMHgwMDZDCS8vICBSZWFkIGVkZ2UKLQkJCQkJCS8vICBzZWxlY3Rpb24KLQkJCQkJCS8vICByZWdpc3Rlci4KLSNkZWZpbmUgTFBfUkRDQVBTRUxDCQkweDAwNkUJLy8gIFJlYWQgY2FwdHVyZQotCQkJCQkJLy8gIGVuYWJsZSByZWdpc3Rlci4KLS8vIENvdW50ZXIgUmVnaXN0ZXJzIChyZWFkL3dyaXRlKToKLSNkZWZpbmUgTFBfQ1IwQQkJCTB4MDAwMAkvLyAgMEEgc2V0dXAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX0NSMEIJCQkweDAwMDIJLy8gIDBCIHNldHVwIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9DUjFBCQkJMHgwMDA0CS8vICAxQSBzZXR1cCByZWdpc3Rlci4KLSNkZWZpbmUgTFBfQ1IxQgkJCTB4MDAwNgkvLyAgMUIgc2V0dXAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX0NSMkEJCQkweDAwMDgJLy8gIDJBIHNldHVwIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9DUjJCCQkJMHgwMDBBCS8vICAyQiBzZXR1cCByZWdpc3Rlci4KLS8vIENvdW50ZXIgUHJlTG9hZCAod3JpdGUpIGFuZCBMYXRjaCAocmVhZCkgUmVnaXN0ZXJzOgotI2RlZmluZQlMUF9DTlRSMEFMU1cJCTB4MDAwQwkvLyAgMEEgbHN3LgotI2RlZmluZQlMUF9DTlRSMEFNU1cJCTB4MDAwRQkvLyAgMEEgbXN3LgotI2RlZmluZQlMUF9DTlRSMEJMU1cJCTB4MDAxMAkvLyAgMEIgbHN3LgotI2RlZmluZQlMUF9DTlRSMEJNU1cJCTB4MDAxMgkvLyAgMEIgbXN3LgotI2RlZmluZQlMUF9DTlRSMUFMU1cJCTB4MDAxNAkvLyAgMUEgbHN3LgotI2RlZmluZQlMUF9DTlRSMUFNU1cJCTB4MDAxNgkvLyAgMUEgbXN3LgotI2RlZmluZQlMUF9DTlRSMUJMU1cJCTB4MDAxOAkvLyAgMUIgbHN3LgotI2RlZmluZQlMUF9DTlRSMUJNU1cJCTB4MDAxQQkvLyAgMUIgbXN3LgotI2RlZmluZQlMUF9DTlRSMkFMU1cJCTB4MDAxQwkvLyAgMkEgbHN3LgotI2RlZmluZQlMUF9DTlRSMkFNU1cJCTB4MDAxRQkvLyAgMkEgbXN3LgotI2RlZmluZQlMUF9DTlRSMkJMU1cJCTB4MDAyMAkvLyAgMkIgbHN3LgotI2RlZmluZQlMUF9DTlRSMkJNU1cJCTB4MDAyMgkvLyAgMkIgbXN3LgotLy8gTWlzY2VsbGFuZW91cyBSZWdpc3RlcnMgKHJlYWQvd3JpdGUpOgotI2RlZmluZSBMUF9NSVNDMQkJMHgwMDg4CS8vICBSZWFkL3dyaXRlIE1pc2MxLgotI2RlZmluZSBMUF9XUk1JU0MyCQkweDAwOTAJLy8gIFdyaXRlIE1pc2MyLgotI2RlZmluZSBMUF9SRE1JU0MyCQkweDAwODIJLy8gIFJlYWQgTWlzYzIuCisvKiAgRGlnaXRhbCBJL08gKHJlYWQgb25seSk6ICovCisjZGVmaW5lIExQX1JERElOQQkJMHgwMDQwCS8qICAgUmVhZCBkaWdpdGFsIGlucHV0LiAqLworI2RlZmluZSBMUF9SRENBUEZMR0EJCTB4MDA0OAkvKiAgIFJlYWQgZWRnZXMgY2FwdHVyZWQuICovCisjZGVmaW5lIExQX1JESU5UU0VMQQkJMHgwMDRBCS8qICAgUmVhZCBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SREVER1NFTEEJCTB4MDA0QwkvKiAgIFJlYWQgZWRnZSBzZWxlY3Rpb24gcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX1JEQ0FQU0VMQQkJMHgwMDRFCS8qICAgUmVhZCBjYXB0dXJlIGVuYWJsZSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfUkRESU5CCQkweDAwNTAJLyogICBSZWFkIGRpZ2l0YWwgaW5wdXQuICovCisjZGVmaW5lIExQX1JEQ0FQRkxHQgkJMHgwMDU4CS8qICAgUmVhZCBlZGdlcyBjYXB0dXJlZC4gKi8KKyNkZWZpbmUgTFBfUkRJTlRTRUxCCQkweDAwNUEJLyogICBSZWFkIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX1JERURHU0VMQgkJMHgwMDVDCS8qICAgUmVhZCBlZGdlIHNlbGVjdGlvbiByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfUkRDQVBTRUxCCQkweDAwNUUJLyogICBSZWFkIGNhcHR1cmUgZW5hYmxlIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SRERJTkMJCTB4MDA2MAkvKiAgIFJlYWQgZGlnaXRhbCBpbnB1dC4gKi8KKyNkZWZpbmUgTFBfUkRDQVBGTEdDCQkweDAwNjgJLyogICBSZWFkIGVkZ2VzIGNhcHR1cmVkLiAqLworI2RlZmluZSBMUF9SRElOVFNFTEMJCTB4MDA2QQkvKiAgIFJlYWQgaW50ZXJydXB0IGVuYWJsZSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfUkRFREdTRUxDCQkweDAwNkMJLyogICBSZWFkIGVkZ2Ugc2VsZWN0aW9uIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SRENBUFNFTEMJCTB4MDA2RQkvKiAgIFJlYWQgY2FwdHVyZSBlbmFibGUgcmVnaXN0ZXIuICovCiAKLS8vIEJpdCBtYXNrcyBmb3IgTUlTQzEgcmVnaXN0ZXIgdGhhdCBhcmUgdGhlIHNhbWUgZm9yIHJlYWRzIGFuZCB3cml0ZXMuCi0jZGVmaW5lIE1JU0MxX1dFTkFCTEUJCTB4ODAwMAkvLyBlbmFiIHdyaXRlcyB0bwotCQkJCQkJLy8gTUlTQzIgKGV4Y2VwdCBDbGVhcgotCQkJCQkJLy8gV2F0Y2hkb2cgYml0KS4KLSNkZWZpbmUgTUlTQzFfV0RJU0FCTEUJCTB4MDAwMAkvLyBEaXNhYmxlIHdyaXRlcyB0byBNSVNDMi4KLSNkZWZpbmUgTUlTQzFfRURDQVAJCTB4MTAwMAkvLyBlbmFiIGVkZ2UgY2FwdHVyZQotCQkJCQkJLy8gb24gRElPIGNoYW5zCi0JCQkJCQkvLyBzcGVjaWZpZWQgYnkKLQkJCQkJCS8vIExQX1dSQ0FQU0VMeC4KLSNkZWZpbmUgTUlTQzFfTk9FRENBUAkJMHgwMDAwCS8vIERpc2FibGUgZWRnZQotCQkJCQkJLy8gY2FwdHVyZSBvbgotCQkJCQkJLy8gc3BlY2lmaWVkIERJTwotCQkJCQkJLy8gY2hhbnMuCisvKiAgQ291bnRlciBSZWdpc3RlcnMgKHJlYWQvd3JpdGUpOiAqLworI2RlZmluZSBMUF9DUjBBCQkJMHgwMDAwCS8qICAgMEEgc2V0dXAgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX0NSMEIJCQkweDAwMDIJLyogICAwQiBzZXR1cCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfQ1IxQQkJCTB4MDAwNAkvKiAgIDFBIHNldHVwIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9DUjFCCQkJMHgwMDA2CS8qICAgMUIgc2V0dXAgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX0NSMkEJCQkweDAwMDgJLyogICAyQSBzZXR1cCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfQ1IyQgkJCTB4MDAwQQkvKiAgIDJCIHNldHVwIHJlZ2lzdGVyLiAqLwogCi0vLyBCaXQgbWFza3MgZm9yIE1JU0MxIHJlZ2lzdGVyIHJlYWRzLgotI2RlZmluZSBSRE1JU0MxX1dEVElNRU9VVAkweDQwMDAJLy8gV2F0Y2hkb2cgdGltZXIgdGltZWQgb3V0LgorLyogIENvdW50ZXIgUHJlTG9hZCAod3JpdGUpIGFuZCBMYXRjaCAocmVhZCkgUmVnaXN0ZXJzOiAqLworI2RlZmluZQlMUF9DTlRSMEFMU1cJCTB4MDAwQwkvKiAgIDBBIGxzdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjBBTVNXCQkweDAwMEUJLyogICAwQSBtc3cuICovCisjZGVmaW5lCUxQX0NOVFIwQkxTVwkJMHgwMDEwCS8qICAgMEIgbHN3LiAqLworI2RlZmluZQlMUF9DTlRSMEJNU1cJCTB4MDAxMgkvKiAgIDBCIG1zdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjFBTFNXCQkweDAwMTQJLyogICAxQSBsc3cuICovCisjZGVmaW5lCUxQX0NOVFIxQU1TVwkJMHgwMDE2CS8qICAgMUEgbXN3LiAqLworI2RlZmluZQlMUF9DTlRSMUJMU1cJCTB4MDAxOAkvKiAgIDFCIGxzdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjFCTVNXCQkweDAwMUEJLyogICAxQiBtc3cuICovCisjZGVmaW5lCUxQX0NOVFIyQUxTVwkJMHgwMDFDCS8qICAgMkEgbHN3LiAqLworI2RlZmluZQlMUF9DTlRSMkFNU1cJCTB4MDAxRQkvKiAgIDJBIG1zdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjJCTFNXCQkweDAwMjAJLyogICAyQiBsc3cuICovCisjZGVmaW5lCUxQX0NOVFIyQk1TVwkJMHgwMDIyCS8qICAgMkIgbXN3LiAqLwogCi0vLyBCaXQgbWFza3MgZm9yIE1JU0MyIHJlZ2lzdGVyIHdyaXRlcy4KLSNkZWZpbmUgV1JNSVNDMl9XRENMRUFSCQkweDgwMDAJLy8gUmVzZXQgd2F0Y2hkb2cKLQkJCQkJCS8vIHRpbWVyIHRvIHplcm8uCi0jZGVmaW5lIFdSTUlTQzJfQ0hBUkdFX0VOQUJMRQkweDQwMDAJLy8gZW5hYiBiYXR0ZXJ5Ci0JCQkJCQkvLyB0cmlja2xlIGNoYXJnaW5nLgorLyogIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXJzIChyZWFkL3dyaXRlKTogKi8KKyNkZWZpbmUgTFBfTUlTQzEJCTB4MDA4OAkvKiAgIFJlYWQvd3JpdGUgTWlzYzEuICovCisjZGVmaW5lIExQX1dSTUlTQzIJCTB4MDA5MAkvKiAgIFdyaXRlIE1pc2MyLiAqLworI2RlZmluZSBMUF9SRE1JU0MyCQkweDAwODIJLyogICBSZWFkIE1pc2MyLiAqLwogCi0vLyBCaXQgbWFza3MgZm9yIE1JU0MyIHJlZ2lzdGVyIHRoYXQgYXJlIHRoZSBzYW1lIGZvciByZWFkcyBhbmQgd3JpdGVzLgotI2RlZmluZSBNSVNDMl9CQVRUX0VOQUJMRQkweDAwMDgJLy8gQmFja3VwIGJhdHRlcnkgZW5hYmxlLgotI2RlZmluZSBNSVNDMl9XREVOQUJMRQkJMHgwMDA0CS8vIFdhdGNoZG9nIHRpbWVyIGVuYWJsZS4KLSNkZWZpbmUgTUlTQzJfV0RQRVJJT0RfTUFTSwkweDAwMDMJLy8gV2F0Y2hkb2cgaW50ZXJ2YWwKLQkJCQkJCS8vIHNlbGVjdCBtYXNrLgorLyogIEJpdCBtYXNrcyBmb3IgTUlTQzEgcmVnaXN0ZXIgdGhhdCBhcmUgdGhlIHNhbWUgZm9yIHJlYWRzIGFuZCB3cml0ZXMuICovCisjZGVmaW5lIE1JU0MxX1dFTkFCTEUJCTB4ODAwMAkvKiBlbmFiIHdyaXRlcyB0byBNSVNDMiAoZXhjZXB0IENsZWFyCisJCQkJCSAqIFdhdGNoZG9nIGJpdCkuICovCisjZGVmaW5lIE1JU0MxX1dESVNBQkxFCQkweDAwMDAJLyogRGlzYWJsZSB3cml0ZXMgdG8gTUlTQzIuICovCisjZGVmaW5lIE1JU0MxX0VEQ0FQCQkweDEwMDAJLyogZW5hYiBlZGdlIGNhcHR1cmUgb24gRElPIGNoYW5zCisJCQkJCSAqIHNwZWNpZmllZCBieSAgTFBfV1JDQVBTRUx4LiAqLworI2RlZmluZSBNSVNDMV9OT0VEQ0FQCQkweDAwMDAJLyogRGlzYWJsZSBlZGdlIGNhcHR1cmUgb24gc3BlY2lmaWVkCisJCQkJCSAqIERJTyBjaGFucy4gKi8KIAotLy8gQml0IG1hc2tzIGZvciBBQ09OMSByZWdpc3Rlci4KLSNkZWZpbmUgQTJfUlVOCQkJMHg0MDAwMDAwMAkvLyBSdW4gQTIgYmFzZWQgb24gVFNMMi4KLSNkZWZpbmUgQTFfUlVOCQkJMHgyMDAwMDAwMAkvLyBSdW4gQTEgYmFzZWQgb24gVFNMMS4KLSNkZWZpbmUgQTFfU1dBUAkJCTB4MDAyMDAwMDAJLy8gVXNlIGJpZy1lbmRpYW4gZm9yIEExLgotI2RlZmluZSBBMl9TV0FQCQkJMHgwMDEwMDAwMAkvLyBVc2UgYmlnLWVuZGlhbiBmb3IgQTIuCi0jZGVmaW5lIFdTX01PREVTCQkweDAwMDE5OTk5CS8vIFdTMCA9IFRTTDEgdHJpZ2dlcgotCQkJCQkJLy8gaW5wdXQsIFdTMS1XUzQgPQotCQkJCQkJLy8gQ1MqIG91dHB1dHMuCisvKiAgQml0IG1hc2tzIGZvciBNSVNDMSByZWdpc3RlciByZWFkcy4gKi8KKyNkZWZpbmUgUkRNSVNDMV9XRFRJTUVPVVQJMHg0MDAwCS8qICBXYXRjaGRvZyB0aW1lciB0aW1lZCBvdXQuICovCiAKLSNpZiBQTEFURk9STSA9PSBJTlRFTAkJLy8gQmFzZSBBQ09OMSBjb25maWc6Ci0JCQkJCQkvLyBhbHdheXMgcnVuIEExIGJhc2VkCi0JCQkJCQkvLyBvbiBUU0wxLgotI2RlZmluZSBBQ09OMV9CQVNFCQkoIFdTX01PREVTIHwgQTFfUlVOICkKKy8qICBCaXQgbWFza3MgZm9yIE1JU0MyIHJlZ2lzdGVyIHdyaXRlcy4gKi8KKyNkZWZpbmUgV1JNSVNDMl9XRENMRUFSCQkweDgwMDAJLyogIFJlc2V0IHdhdGNoZG9nIHRpbWVyIHRvIHplcm8uICovCisjZGVmaW5lIFdSTUlTQzJfQ0hBUkdFX0VOQUJMRQkweDQwMDAJLyogIGVuYWIgYmF0dGVyeSB0cmlja2xlIGNoYXJnaW5nLiAqLworCisvKiAgQml0IG1hc2tzIGZvciBNSVNDMiByZWdpc3RlciB0aGF0IGFyZSB0aGUgc2FtZSBmb3IgcmVhZHMgYW5kIHdyaXRlcy4gKi8KKyNkZWZpbmUgTUlTQzJfQkFUVF9FTkFCTEUJMHgwMDA4CS8qICBCYWNrdXAgYmF0dGVyeSBlbmFibGUuICovCisjZGVmaW5lIE1JU0MyX1dERU5BQkxFCQkweDAwMDQJLyogIFdhdGNoZG9nIHRpbWVyIGVuYWJsZS4gKi8KKyNkZWZpbmUgTUlTQzJfV0RQRVJJT0RfTUFTSwkweDAwMDMJLyogIFdhdGNoZG9nIGludGVydmFsICovCisJCQkJCQkvKiAgc2VsZWN0IG1hc2suICovCisKKy8qICBCaXQgbWFza3MgZm9yIEFDT04xIHJlZ2lzdGVyLiAqLworI2RlZmluZSBBMl9SVU4JCQkweDQwMDAwMDAwCS8qICBSdW4gQTIgYmFzZWQgb24gVFNMMi4gKi8KKyNkZWZpbmUgQTFfUlVOCQkJMHgyMDAwMDAwMAkvKiAgUnVuIEExIGJhc2VkIG9uIFRTTDEuICovCisjZGVmaW5lIEExX1NXQVAJCQkweDAwMjAwMDAwCS8qICBVc2UgYmlnLWVuZGlhbiBmb3IgQTEuICovCisjZGVmaW5lIEEyX1NXQVAJCQkweDAwMTAwMDAwCS8qICBVc2UgYmlnLWVuZGlhbiBmb3IgQTIuICovCisjZGVmaW5lIFdTX01PREVTCQkweDAwMDE5OTk5CS8qICBXUzAgPSBUU0wxIHRyaWdnZXIgKi8KKwkJCQkJCS8qICBpbnB1dCwgV1MxLVdTNCA9ICovCisJCQkJCQkvKiAgQ1MqIG91dHB1dHMuICovCisKKyNpZiBQTEFURk9STSA9PSBJTlRFTAkJLyogQmFzZSBBQ09OMSBjb25maWc6IGFsd2F5cyBydW4gQTEgYmFzZWQKKwkJCQkgKiBvbiBUU0wxLiAqLworI2RlZmluZSBBQ09OMV9CQVNFCQkoV1NfTU9ERVMgfCBBMV9SVU4pCiAjZWxpZiBQTEFURk9STSA9PSBNT1RPUk9MQQotI2RlZmluZSBBQ09OMV9CQVNFCQkoIFdTX01PREVTIHwgQTFfUlVOIHwgQTFfU1dBUCB8IEEyX1NXQVAgKQorI2RlZmluZSBBQ09OMV9CQVNFCQkoV1NfTU9ERVMgfCBBMV9SVU4gfCBBMV9TV0FQIHwgQTJfU1dBUCkKICNlbmRpZgogCi0jZGVmaW5lIEFDT04xX0FEQ1NUQVJUCQlBQ09OMV9CQVNFCS8vIFN0YXJ0IEFEQzogcnVuIEExCi0JCQkJCQkvLyBiYXNlZCBvbiBUU0wxLgotI2RlZmluZSBBQ09OMV9EQUNTVEFSVAkJKCBBQ09OMV9CQVNFIHwgQTJfUlVOICkJLy8gU3RhcnQKLQkJCQkJCQkvLyB0cmFuc21pdCB0bwotCQkJCQkJCS8vIERBQzogcnVuIEEyCi0JCQkJCQkJLy8gYmFzZWQgb24KLQkJCQkJCQkvLyBUU0wyLgotI2RlZmluZSBBQ09OMV9EQUNTVE9QCQlBQ09OMV9CQVNFCS8vIEhhbHQgQTIuCisjZGVmaW5lIEFDT04xX0FEQ1NUQVJUCQlBQ09OMV9CQVNFCS8qIFN0YXJ0IEFEQzogcnVuIEExCisJCQkJCQkgKiAgYmFzZWQgb24gVFNMMS4gKi8KKyNkZWZpbmUgQUNPTjFfREFDU1RBUlQJCShBQ09OMV9CQVNFIHwgQTJfUlVOKQorLyogU3RhcnQgdHJhbnNtaXQgdG8gREFDOiBydW4gQTIgYmFzZWQgb24gVFNMMi4gKi8KKyNkZWZpbmUgQUNPTjFfREFDU1RPUAkJQUNPTjFfQkFTRQkvKiAgSGFsdCBBMi4gKi8KIAotLy8gQml0IG1hc2tzIGZvciBBQ09OMiByZWdpc3Rlci4KLSNkZWZpbmUgQTFfQ0xLU1JDX0JDTEsxCQkweDAwMDAwMDAwCS8vIEExIGJpdCByYXRlID0gQkNMSzEgKEFEQykuCi0jZGVmaW5lIEEyX0NMS1NSQ19YMQkJMHgwMDgwMDAwMAkvLyBBMiBiaXQgcmF0ZSA9IEFDTEsvMSAoREFDcykuCi0jZGVmaW5lIEEyX0NMS1NSQ19YMgkJMHgwMEMwMDAwMAkvLyBBMiBiaXQgcmF0ZSA9IEFDTEsvMiAoREFDcykuCi0jZGVmaW5lIEEyX0NMS1NSQ19YNAkJMHgwMTQwMDAwMAkvLyBBMiBiaXQgcmF0ZSA9IEFDTEsvNCAoREFDcykuCi0jZGVmaW5lIElOVkVSVF9CQ0xLMgkJMHgwMDEwMDAwMAkvLyBJbnZlcnQgQkNMSzIgKERBQ3MpLgotI2RlZmluZSBCQ0xLMl9PRQkJMHgwMDA0MDAwMAkvLyBlbmFiIEJDTEsyIChEQUNzKS4KLSNkZWZpbmUgQUNPTjJfWE9STUFTSwkJMHgwMDBDMDAwMAkvLyBYT1IgbWFzayBmb3IgQUNPTjIKLQkJCQkJCS8vIGFjdGl2ZS1sb3cgYml0cy4KKy8qICBCaXQgbWFza3MgZm9yIEFDT04yIHJlZ2lzdGVyLiAqLworI2RlZmluZSBBMV9DTEtTUkNfQkNMSzEJCTB4MDAwMDAwMDAJLyogIEExIGJpdCByYXRlID0gQkNMSzEgKEFEQykuICovCisjZGVmaW5lIEEyX0NMS1NSQ19YMQkJMHgwMDgwMDAwMAkvKiAgQTIgYml0IHJhdGUgPSBBQ0xLLzEgKERBQ3MpLiAqLworI2RlZmluZSBBMl9DTEtTUkNfWDIJCTB4MDBDMDAwMDAJLyogIEEyIGJpdCByYXRlID0gQUNMSy8yIChEQUNzKS4gKi8KKyNkZWZpbmUgQTJfQ0xLU1JDX1g0CQkweDAxNDAwMDAwCS8qICBBMiBiaXQgcmF0ZSA9IEFDTEsvNCAoREFDcykuICovCisjZGVmaW5lIElOVkVSVF9CQ0xLMgkJMHgwMDEwMDAwMAkvKiAgSW52ZXJ0IEJDTEsyIChEQUNzKS4gKi8KKyNkZWZpbmUgQkNMSzJfT0UJCTB4MDAwNDAwMDAJLyogIGVuYWIgQkNMSzIgKERBQ3MpLiAqLworI2RlZmluZSBBQ09OMl9YT1JNQVNLCQkweDAwMEMwMDAwCS8qICBYT1IgbWFzayBmb3IgQUNPTjIgKi8KKwkJCQkJCS8qICBhY3RpdmUtbG93IGJpdHMuICovCiAKLSNkZWZpbmUgQUNPTjJfSU5JVAkJKCBBQ09OMl9YT1JNQVNLIF4gKCBBMV9DTEtTUkNfQkNMSzEgfCBBMl9DTEtTUkNfWDIgfCBJTlZFUlRfQkNMSzIgfCBCQ0xLMl9PRSApICkKKyNkZWZpbmUgQUNPTjJfSU5JVAkJKEFDT04yX1hPUk1BU0sgXiAoQTFfQ0xLU1JDX0JDTEsxIHwgQTJfQ0xLU1JDX1gyIHwgSU5WRVJUX0JDTEsyIHwgQkNMSzJfT0UpKQogCi0vLyBCaXQgbWFza3MgZm9yIHRpbWVzbG90IHJlY29yZHMuCi0jZGVmaW5lIFdTMQkJICAgICAJMHg0MDAwMDAwMAkvLyBXUyBvdXRwdXQgdG8gYXNzZXJ0LgorLyogIEJpdCBtYXNrcyBmb3IgdGltZXNsb3QgcmVjb3Jkcy4gKi8KKyNkZWZpbmUgV1MxCQkgICAgIAkweDQwMDAwMDAwCS8qICBXUyBvdXRwdXQgdG8gYXNzZXJ0LiAqLwogI2RlZmluZSBXUzIJCSAgICAgCTB4MjAwMDAwMDAKICNkZWZpbmUgV1MzCQkgICAgIAkweDEwMDAwMDAwCiAjZGVmaW5lIFdTNAkJICAgICAJMHgwODAwMDAwMAotI2RlZmluZSBSU0QxCQkJMHgwMTAwMDAwMAkvLyBTaGlmdCBBMSBkYXRhIGluIG9uIFNEMS4KLSNkZWZpbmUgU0RXX0ExCQkJMHgwMDgwMDAwMAkvLyBTdG9yZSByY3YnZCBjaGFyIGF0Ci0JCQkJCQkvLyBuZXh0IGNoYXIgc2xvdCBvZgotCQkJCQkJLy8gRFdPUkQxIGJ1ZmZlci4KLSNkZWZpbmUgU0lCX0ExCQkJMHgwMDQwMDAwMAkvLyBTdG9yZSByY3YnZCBjaGFyIGF0Ci0JCQkJCQkvLyBuZXh0IGNoYXIgc2xvdCBvZgotCQkJCQkJLy8gRkIxIGJ1ZmZlci4KLSNkZWZpbmUgU0ZfQTEJCQkweDAwMjAwMDAwCS8vIFdyaXRlIHVuc2lnbmVkIGxvbmcKLQkJCQkJCS8vIGJ1ZmZlciB0byBpbnB1dAotCQkJCQkJLy8gRklGTy4KKyNkZWZpbmUgUlNEMQkJCTB4MDEwMDAwMDAJLyogU2hpZnQgQTEgZGF0YSBpbiBvbiBTRDEuICovCisjZGVmaW5lIFNEV19BMQkJCTB4MDA4MDAwMDAJLyogU3RvcmUgcmN2J2QgY2hhciBhdCBuZXh0CisJCQkJCQkgKiBjaGFyIHNsb3Qgb2YgRFdPUkQxIGJ1ZmZlci4gKi8KKyNkZWZpbmUgU0lCX0ExCQkJMHgwMDQwMDAwMAkvKiBTdG9yZSByY3YnZCBjaGFyIGF0IG5leHQKKwkJCQkJCSAqIGNoYXIgc2xvdCBvZiBGQjEgYnVmZmVyLiAqLworI2RlZmluZSBTRl9BMQkJCTB4MDAyMDAwMDAJLyogV3JpdGUgdW5zaWduZWQgbG9uZworCQkJCQkJICogYnVmZmVyIHRvIGlucHV0IEZJRk8uICovCiAKLS8vU2VsZWN0IHBhcmFsbGVsLXRvLXNlcmlhbCBjb252ZXJ0ZXIncyBkYXRhIHNvdXJjZToKLSNkZWZpbmUgWEZJRk9fMAkJCTB4MDAwMDAwMDAJLy8gICBEYXRhIGZpZm8gYnl0ZSAwLgotI2RlZmluZSBYRklGT18xCQkJMHgwMDAwMDAxMAkvLyAgIERhdGEgZmlmbyBieXRlIDEuCi0jZGVmaW5lIFhGSUZPXzIJCQkweDAwMDAwMDIwCS8vICAgRGF0YSBmaWZvIGJ5dGUgMi4KLSNkZWZpbmUgWEZJRk9fMwkJCTB4MDAwMDAwMzAJLy8gICBEYXRhIGZpZm8gYnl0ZSAzLgotI2RlZmluZSBYRkIwCQkJMHgwMDAwMDA0MAkvLyAgIEZCX0JVRkZFUiBieXRlIDAuCi0jZGVmaW5lIFhGQjEJCQkweDAwMDAwMDUwCS8vICAgRkJfQlVGRkVSIGJ5dGUgMS4KLSNkZWZpbmUgWEZCMgkJCTB4MDAwMDAwNjAJLy8gICBGQl9CVUZGRVIgYnl0ZSAyLgotI2RlZmluZSBYRkIzCQkJMHgwMDAwMDA3MAkvLyAgIEZCX0JVRkZFUiBieXRlIDMuCi0jZGVmaW5lIFNJQl9BMgkJCTB4MDAwMDAyMDAJLy8gU3RvcmUgbmV4dCBkd29yZAotCQkJCQkJLy8gZnJvbSBBMidzIGlucHV0Ci0JCQkJCQkvLyBzaGlmdGVyIHRvIEZCMgotCQkJCQkJLy8gYnVmZmVyLgotI2RlZmluZSBTRl9BMgkJCTB4MDAwMDAxMDAJLy8gU3RvcmUgbmV4dCBkd29yZAotCQkJCQkJLy8gZnJvbSBBMidzIGlucHV0Ci0JCQkJCQkvLyBzaGlmdGVyIHRvIGl0cwotCQkJCQkJLy8gaW5wdXQgZmlmby4KLSNkZWZpbmUgTEZfQTIJCQkweDAwMDAwMDgwCS8vIExvYWQgbmV4dCBkd29yZAotCQkJCQkJLy8gZnJvbSBBMidzIG91dHB1dAotCQkJCQkJLy8gZmlmbyBpbnRvIGl0cwotCQkJCQkJLy8gb3V0cHV0IGR3b3JkCi0JCQkJCQkvLyBidWZmZXIuCi0jZGVmaW5lIFhTRDIJCQkweDAwMDAwMDA4CS8vIFNoaWZ0IGRhdGEgb3V0IG9uIFNEMi4KLSNkZWZpbmUgUlNEMwkJCTB4MDAwMDE4MDAJLy8gU2hpZnQgZGF0YSBpbiBvbiBTRDMuCi0jZGVmaW5lIFJTRDIJCQkweDAwMDAxMDAwCS8vIFNoaWZ0IGRhdGEgaW4gb24gU0QyLgotI2RlZmluZSBMT1dfQTIJCQkweDAwMDAwMDAyCS8vIERyaXZlIGxhc3QgU0QgbG93Ci0JCQkJCQkvLyBmb3IgNyBjbGtzLCB0aGVuCi0JCQkJCQkvLyB0cmktc3RhdGUuCi0jZGVmaW5lIEVPUwkJICAgICAJMHgwMDAwMDAwMQkvLyBFbmQgb2Ygc3VwZXJmcmFtZS4KKy8qIFNlbGVjdCBwYXJhbGxlbC10by1zZXJpYWwgY29udmVydGVyJ3MgZGF0YSBzb3VyY2U6ICovCisjZGVmaW5lIFhGSUZPXzAJCQkweDAwMDAwMDAwCS8qICAgIERhdGEgZmlmbyBieXRlIDAuICovCisjZGVmaW5lIFhGSUZPXzEJCQkweDAwMDAwMDEwCS8qICAgIERhdGEgZmlmbyBieXRlIDEuICovCisjZGVmaW5lIFhGSUZPXzIJCQkweDAwMDAwMDIwCS8qICAgIERhdGEgZmlmbyBieXRlIDIuICovCisjZGVmaW5lIFhGSUZPXzMJCQkweDAwMDAwMDMwCS8qICAgIERhdGEgZmlmbyBieXRlIDMuICovCisjZGVmaW5lIFhGQjAJCQkweDAwMDAwMDQwCS8qICAgIEZCX0JVRkZFUiBieXRlIDAuICovCisjZGVmaW5lIFhGQjEJCQkweDAwMDAwMDUwCS8qICAgIEZCX0JVRkZFUiBieXRlIDEuICovCisjZGVmaW5lIFhGQjIJCQkweDAwMDAwMDYwCS8qICAgIEZCX0JVRkZFUiBieXRlIDIuICovCisjZGVmaW5lIFhGQjMJCQkweDAwMDAwMDcwCS8qICAgIEZCX0JVRkZFUiBieXRlIDMuICovCisjZGVmaW5lIFNJQl9BMgkJCTB4MDAwMDAyMDAJLyogU3RvcmUgbmV4dCBkd29yZCBmcm9tIEEyJ3MKKwkJCQkJCSAqIGlucHV0IHNoaWZ0ZXIgdG8gRkIyIGJ1ZmZlci4gKi8KKyNkZWZpbmUgU0ZfQTIJCQkweDAwMDAwMTAwCS8qIFN0b3JlIG5leHQgZHdvcmQgZnJvbSBBMidzCisJCQkJCQkgKiBpbnB1dCBzaGlmdGVyIHRvIGl0cyBpbnB1dAorCQkJCQkJICogZmlmby4gKi8KKyNkZWZpbmUgTEZfQTIJCQkweDAwMDAwMDgwCS8qIExvYWQgbmV4dCBkd29yZCBmcm9tIEEyJ3MKKwkJCQkJCSAqIG91dHB1dCBmaWZvIGludG8gaXRzCisJCQkJCQkgKiBvdXRwdXQgZHdvcmQgYnVmZmVyLiAqLworI2RlZmluZSBYU0QyCQkJMHgwMDAwMDAwOAkvKiAgU2hpZnQgZGF0YSBvdXQgb24gU0QyLiAqLworI2RlZmluZSBSU0QzCQkJMHgwMDAwMTgwMAkvKiAgU2hpZnQgZGF0YSBpbiBvbiBTRDMuICovCisjZGVmaW5lIFJTRDIJCQkweDAwMDAxMDAwCS8qICBTaGlmdCBkYXRhIGluIG9uIFNEMi4gKi8KKyNkZWZpbmUgTE9XX0EyCQkJMHgwMDAwMDAwMgkvKiAgRHJpdmUgbGFzdCBTRCBsb3cgKi8KKwkJCQkJCS8qICBmb3IgNyBjbGtzLCB0aGVuICovCisJCQkJCQkvKiAgdHJpLXN0YXRlLiAqLworI2RlZmluZSBFT1MJCSAgICAgCTB4MDAwMDAwMDEJLyogIEVuZCBvZiBzdXBlcmZyYW1lLiAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLS8vIEkyQyBjb25maWd1cmF0aW9uIGNvbnN0YW50cy4KLSNkZWZpbmUgSTJDX0NMS1NFTAkJMHgwNDAwCS8vIEkyQyBiaXQgcmF0ZSA9Ci0JCQkJCQkvLyBQQ0ljbGsvNDgwID0gNjguNzUKLQkJCQkJCS8vIEtIei4KLSNkZWZpbmUgSTJDX0JJVFJBVEUJCTY4Ljc1CS8vIEkyQyBidXMgZGF0YSBiaXQKLQkJCQkJCS8vIHJhdGUgKGRldGVybWluZWQgYnkKLQkJCQkJCS8vIEkyQ19DTEtTRUwpIGluIEtIei4KLSNkZWZpbmUgSTJDX1dSVElNRQkJMTUuMAkvLyBXb3JzdCBjYXNlIHRpbWUsaW4KLQkJCQkJCS8vIG1zZWMsIGZvciBFRVBST00KLQkJCQkJCS8vIGludGVybmFsIHdyaXRlIG9wLgorLyogIEkyQyBjb25maWd1cmF0aW9uIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgSTJDX0NMS1NFTAkJMHgwNDAwCisvKiBJMkMgYml0IHJhdGUgPSBQQ0ljbGsvNDgwID0gNjguNzUgS0h6LiAqLwogCi0vLyBJMkMgbWFuaWZlc3QgY29uc3RhbnRzLgorI2RlZmluZSBJMkNfQklUUkFURQkJNjguNzUKKy8qIEkyQyBidXMgZGF0YSBiaXQgcmF0ZSAoZGV0ZXJtaW5lZCBieSBJMkNfQ0xLU0VMKSBpbiBLSHouICovCiAKLS8vIE1heCByZXRyaWVzIHRvIHdhaXQgZm9yIEVFUFJPTSB3cml0ZS4KLSNkZWZpbmUgSTJDX1JFVFJJRVMJCSggSTJDX1dSVElNRSAqIEkyQ19CSVRSQVRFIC8gOS4wICkKLSNkZWZpbmUgSTJDX0VSUgkJCTB4MDAwMgkvLyBJMkMgY29udHJvbC9zdGF0dXMKLQkJCQkJCS8vIGZsYWcgRVJST1IuCi0jZGVmaW5lIEkyQ19CVVNZCQkweDAwMDEJLy8gSTJDIGNvbnRyb2wvc3RhdHVzCi0JCQkJCQkvLyBmbGFnIEJVU1kuCi0jZGVmaW5lIEkyQ19BQk9SVAkJMHgwMDgwCS8vIEkyQyBzdGF0dXMgZmxhZyBBQk9SVC4KLSNkZWZpbmUgSTJDX0FUVFJTVEFSVAkJMHgzCS8vIEkyQyBhdHRyaWJ1dGUgU1RBUlQuCi0jZGVmaW5lIEkyQ19BVFRSQ09OVAkJMHgyCS8vIEkyQyBhdHRyaWJ1dGUgQ09OVC4KLSNkZWZpbmUgSTJDX0FUVFJTVE9QCQkweDEJLy8gSTJDIGF0dHJpYnV0ZSBTVE9QLgotI2RlZmluZSBJMkNfQVRUUk5PUAkJMHgwCS8vIEkyQyBhdHRyaWJ1dGUgTk9QLgorI2RlZmluZSBJMkNfV1JUSU1FCQkxNS4wCisvKiBXb3JzdCBjYXNlIHRpbWUsIGluIG1zZWMsIGZvciBFRVBST00gaW50ZXJuYWwgd3JpdGUgb3AuICovCiAKLS8vIEkyQyByZWFkIGNvbW1hbmQgIHwgRUVQUk9NIGFkZHJlc3MuCi0jZGVmaW5lIEkyQ1IJCQkoIGRldnByaXYtPkkyQ0FkcnMgfCAxICkKKy8qICBJMkMgbWFuaWZlc3QgY29uc3RhbnRzLiAqLwogCi0vLyBJMkMgd3JpdGUgY29tbWFuZCB8IEVFUFJPTSBhZGRyZXNzLgotI2RlZmluZSBJMkNXCQkJKCBkZXZwcml2LT5JMkNBZHJzICkKKy8qICBNYXggcmV0cmllcyB0byB3YWl0IGZvciBFRVBST00gd3JpdGUuICovCisjZGVmaW5lIEkyQ19SRVRSSUVTCQkoSTJDX1dSVElNRSAqIEkyQ19CSVRSQVRFIC8gOS4wKQorI2RlZmluZSBJMkNfRVJSCQkJMHgwMDAyCS8qICBJMkMgY29udHJvbC9zdGF0dXMgKi8KKwkJCQkJCS8qICBmbGFnIEVSUk9SLiAqLworI2RlZmluZSBJMkNfQlVTWQkJMHgwMDAxCS8qICBJMkMgY29udHJvbC9zdGF0dXMgKi8KKwkJCQkJCS8qICBmbGFnIEJVU1kuICovCisjZGVmaW5lIEkyQ19BQk9SVAkJMHgwMDgwCS8qICBJMkMgc3RhdHVzIGZsYWcgQUJPUlQuICovCisjZGVmaW5lIEkyQ19BVFRSU1RBUlQJCTB4MwkvKiAgSTJDIGF0dHJpYnV0ZSBTVEFSVC4gKi8KKyNkZWZpbmUgSTJDX0FUVFJDT05UCQkweDIJLyogIEkyQyBhdHRyaWJ1dGUgQ09OVC4gKi8KKyNkZWZpbmUgSTJDX0FUVFJTVE9QCQkweDEJLyogIEkyQyBhdHRyaWJ1dGUgU1RPUC4gKi8KKyNkZWZpbmUgSTJDX0FUVFJOT1AJCTB4MAkvKiAgSTJDIGF0dHJpYnV0ZSBOT1AuICovCiAKLS8vIENvZGUgbWFjcm9zIHVzZWQgZm9yIGNvbnN0cnVjdGluZyBJMkMgY29tbWFuZCBieXRlcy4KLSNkZWZpbmUgSTJDX0IyKEFUVFIsVkFMKQkoICggKEFUVFIpIDw8IDYgKSB8ICggKFZBTCkgPDwgMjQgKSApCi0jZGVmaW5lIEkyQ19CMShBVFRSLFZBTCkJKCAoIChBVFRSKSA8PCA0ICkgfCAoIChWQUwpIDw8IDE2ICkgKQotI2RlZmluZSBJMkNfQjAoQVRUUixWQUwpCSggKCAoQVRUUikgPDwgMiApIHwgKCAoVkFMKSA8PCAgOCApICkKKy8qICBJMkMgcmVhZCBjb21tYW5kICB8IEVFUFJPTSBhZGRyZXNzLiAqLworI2RlZmluZSBJMkNSCQkJKGRldnByaXYtPkkyQ0FkcnMgfCAxKQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy9vbGRlc3QKLSNkZWZpbmUgUF9ERUJJQ0ZHcSAgICAgICAgICAgICAgMHgwMDdDCS8vIERFQkkgY29uZmlndXJhdGlvbi4KLSNkZWZpbmUgUF9ERUJJQ01EcSAgICAgICAgICAgICAgMHgwMDgwCS8vIERFQkkgY29tbWFuZC4KLSNkZWZpbmUgUF9ERUJJUEFHRXEgICAgICAgICAgICAgMHgwMDg0CS8vIERFQkkgcGFnZS4KLSNkZWZpbmUgUF9ERUJJQURxICAgICAgICAgICAgICAgMHgwMDg4CS8vIERFQkkgdGFyZ2V0IGFkZHJlc3MuCisvKiAgSTJDIHdyaXRlIGNvbW1hbmQgfCBFRVBST00gYWRkcmVzcy4gKi8KKyNkZWZpbmUgSTJDVwkJCShkZXZwcml2LT5JMkNBZHJzKQogCi0jZGVmaW5lIERFQklfQ0ZHX1RPUQkJMHgwM0MwMDAwMAkvLyB0aW1lb3V0ICgxNSBQQ0kgY3ljbGVzKQotI2RlZmluZSBERUJJX0NGR19GQVNUUQkJMHgxMDAwMDAwMAkvLyBmYXN0IG1vZGUgZW5hYmxlCi0jZGVmaW5lIERFQklfQ0ZHXzE2UQkJMHgwMDA4MDAwMAkvLyAxNi1iaXQgYWNjZXNzIGVuYWJsZQotI2RlZmluZSBERUJJX0NGR19JTkNRCQkweDAwMDQwMDAwCS8vIGVuYWJsZSBhZGRyZXNzIGluY3JlbWVudAotI2RlZmluZSBERUJJX0NGR19USU1FUk9GRlEJMHgwMDAxMDAwMAkvLyBkaXNhYmxlIHRpbWVyCi0jZGVmaW5lIERFQklfQ01EX1JEUQkJMHgwMDA1MDAwMAkvLyByZWFkIGltbWVkaWF0ZSAyIGJ5dGVzCi0jZGVmaW5lIERFQklfQ01EX1dSUQkJMHgwMDA0MDAwMAkvLyB3cml0ZSBpbW1lZGlhdGUgMiBieXRlcwotI2RlZmluZSBERUJJX1BBR0VfRElTQUJMRVEJMHgwMDAwMDAwMAkvLyBwYWdpbmcgZGlzYWJsZQorLyogIENvZGUgbWFjcm9zIHVzZWQgZm9yIGNvbnN0cnVjdGluZyBJMkMgY29tbWFuZCBieXRlcy4gKi8KKyNkZWZpbmUgSTJDX0IyKEFUVFIsIFZBTCkJKCgoQVRUUikgPDwgNikgfCAoKFZBTCkgPDwgMjQpKQorI2RlZmluZSBJMkNfQjEoQVRUUiwgVkFMKQkoKChBVFRSKSA8PCA0KSB8ICgoVkFMKSA8PCAxNikpCisjZGVmaW5lIEkyQ19CMChBVFRSLCBWQUwpCSgoKEFUVFIpIDw8IDIpIHwgKChWQUwpIDw8ICA4KSkKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gREVCSSBjb21tYW5kIGNvbnN0YW50cy4KLSNkZWZpbmUgREVCSV9DTURfU0laRTE2CQkoIDIgPDwgMTcgKQkvLyBUcmFuc2ZlciBzaXplIGlzCi0JCQkJCQkvLyBhbHdheXMgMiBieXRlcy4KLSNkZWZpbmUgREVCSV9DTURfUkVBRAkJMHgwMDAxMDAwMAkvLyBSZWFkIG9wZXJhdGlvbi4KLSNkZWZpbmUgREVCSV9DTURfV1JJVEUJCTB4MDAwMDAwMDAJLy8gV3JpdGUgb3BlcmF0aW9uLgorLyogb2xkZXN0ICovCisjZGVmaW5lIFBfREVCSUNGR3EgICAgICAgICAgICAgIDB4MDA3QwkvKiAgREVCSSBjb25maWd1cmF0aW9uLiAqLworI2RlZmluZSBQX0RFQklDTURxICAgICAgICAgICAgICAweDAwODAJLyogIERFQkkgY29tbWFuZC4gKi8KKyNkZWZpbmUgUF9ERUJJUEFHRXEgICAgICAgICAgICAgMHgwMDg0CS8qICBERUJJIHBhZ2UuICovCisjZGVmaW5lIFBfREVCSUFEcSAgICAgICAgICAgICAgIDB4MDA4OAkvKiAgREVCSSB0YXJnZXQgYWRkcmVzcy4gKi8KIAotLy8gUmVhZCBpbW1lZGlhdGUgMiBieXRlcy4KLSNkZWZpbmUgREVCSV9DTURfUkRXT1JECQkoIERFQklfQ01EX1JFQUQgIHwgREVCSV9DTURfU0laRTE2ICkKKyNkZWZpbmUgREVCSV9DRkdfVE9RCQkweDAzQzAwMDAwCS8qICB0aW1lb3V0ICgxNSBQQ0kgY3ljbGVzKSAqLworI2RlZmluZSBERUJJX0NGR19GQVNUUQkJMHgxMDAwMDAwMAkvKiAgZmFzdCBtb2RlIGVuYWJsZSAqLworI2RlZmluZSBERUJJX0NGR18xNlEJCTB4MDAwODAwMDAJLyogIDE2LWJpdCBhY2Nlc3MgZW5hYmxlICovCisjZGVmaW5lIERFQklfQ0ZHX0lOQ1EJCTB4MDAwNDAwMDAJLyogIGVuYWJsZSBhZGRyZXNzIGluY3JlbWVudCAqLworI2RlZmluZSBERUJJX0NGR19USU1FUk9GRlEJMHgwMDAxMDAwMAkvKiAgZGlzYWJsZSB0aW1lciAqLworI2RlZmluZSBERUJJX0NNRF9SRFEJCTB4MDAwNTAwMDAJLyogIHJlYWQgaW1tZWRpYXRlIDIgYnl0ZXMgKi8KKyNkZWZpbmUgREVCSV9DTURfV1JRCQkweDAwMDQwMDAwCS8qICB3cml0ZSBpbW1lZGlhdGUgMiBieXRlcyAqLworI2RlZmluZSBERUJJX1BBR0VfRElTQUJMRVEJMHgwMDAwMDAwMAkvKiAgcGFnaW5nIGRpc2FibGUgKi8KIAotLy8gV3JpdGUgaW1tZWRpYXRlIDIgYnl0ZXMuCi0jZGVmaW5lIERFQklfQ01EX1dSV09SRAkJKCBERUJJX0NNRF9XUklURSB8IERFQklfQ01EX1NJWkUxNiApCisvKiAgREVCSSBjb21tYW5kIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgREVCSV9DTURfU0laRTE2CQkoMiA8PCAxNykJLyogIFRyYW5zZmVyIHNpemUgaXMgKi8KKwkJCQkJCS8qICBhbHdheXMgMiBieXRlcy4gKi8KKyNkZWZpbmUgREVCSV9DTURfUkVBRAkJMHgwMDAxMDAwMAkvKiAgUmVhZCBvcGVyYXRpb24uICovCisjZGVmaW5lIERFQklfQ01EX1dSSVRFCQkweDAwMDAwMDAwCS8qICBXcml0ZSBvcGVyYXRpb24uICovCiAKLS8vIERFQkkgY29uZmlndXJhdGlvbiBjb25zdGFudHMuCi0jZGVmaW5lIERFQklfQ0ZHX1hJUlFfRU4JMHg4MDAwMDAwMAkvLyBlbmFiIGV4dGVybmFsCi0JCQkJCQkvLyBpbnRlcnJ1cHQgb24gR1BJTzMuCi0jZGVmaW5lIERFQklfQ0ZHX1hSRVNVTUUJMHg0MDAwMDAwMAkvLyBSZXN1bWUgYmxvY2sKLQkJCQkJCS8vIHRyYW5zZmVyIHdoZW4gWElSUQotCQkJCQkJLy8gZGVhc3NlcnRlZC4KLSNkZWZpbmUgREVCSV9DRkdfRkFTVAkJMHgxMDAwMDAwMAkvLyBGYXN0IG1vZGUgZW5hYmxlLgorLyogIFJlYWQgaW1tZWRpYXRlIDIgYnl0ZXMuICovCisjZGVmaW5lIERFQklfQ01EX1JEV09SRAkJKERFQklfQ01EX1JFQUQgIHwgREVCSV9DTURfU0laRTE2KQogCi0vLyA0LWJpdCBmaWVsZCB0aGF0IHNwZWNpZmllcyBERUJJIHRpbWVvdXQgdmFsdWUgaW4gUENJIGNsb2NrIGN5Y2xlczoKLSNkZWZpbmUgREVCSV9DRkdfVE9VVF9CSVQJMjIJLy8gICBGaW5pc2ggREVCSSBjeWNsZSBhZnRlcgotCQkJCQkvLyAgIHRoaXMgbWFueSBjbG9ja3MuCisvKiAgV3JpdGUgaW1tZWRpYXRlIDIgYnl0ZXMuICovCisjZGVmaW5lIERFQklfQ01EX1dSV09SRAkJKERFQklfQ01EX1dSSVRFIHwgREVCSV9DTURfU0laRTE2KQogCi0vLyAyLWJpdCBmaWVsZCB0aGF0IHNwZWNpZmllcyBFbmRpYW4gYnl0ZSBsYW5lIHN0ZWVyaW5nOgotI2RlZmluZSBERUJJX0NGR19TV0FQX05PTkUJMHgwMDAwMDAwMAkvLyAgIFN0cmFpZ2h0IC0gZG9uJ3QKLQkJCQkJCS8vICAgc3dhcCBhbnkgYnl0ZXMKLQkJCQkJCS8vICAgKEludGVsKS4KLSNkZWZpbmUgREVCSV9DRkdfU1dBUF8yCQkweDAwMTAwMDAwCS8vICAgMi1ieXRlIHN3YXAgKE1vdG9yb2xhKS4KLSNkZWZpbmUgREVCSV9DRkdfU1dBUF80CQkweDAwMjAwMDAwCS8vICAgNC1ieXRlIHN3YXAuCi0jZGVmaW5lIERFQklfQ0ZHXzE2CQkweDAwMDgwMDAwCS8vIFNsYXZlIGlzIGFibGUgdG8KLQkJCQkJCS8vIHNlcnZlIDE2LWJpdAotCQkJCQkJLy8gY3ljbGVzLgorLyogIERFQkkgY29uZmlndXJhdGlvbiBjb25zdGFudHMuICovCisjZGVmaW5lIERFQklfQ0ZHX1hJUlFfRU4JMHg4MDAwMDAwMAkvKiAgZW5hYiBleHRlcm5hbCAqLworCQkJCQkJLyogIGludGVycnVwdCBvbiBHUElPMy4gKi8KKyNkZWZpbmUgREVCSV9DRkdfWFJFU1VNRQkweDQwMDAwMDAwCS8qICBSZXN1bWUgYmxvY2sgKi8KKwkJCQkJCS8qICB0cmFuc2ZlciB3aGVuIFhJUlEgKi8KKwkJCQkJCS8qICBkZWFzc2VydGVkLiAqLworI2RlZmluZSBERUJJX0NGR19GQVNUCQkweDEwMDAwMDAwCS8qICBGYXN0IG1vZGUgZW5hYmxlLiAqLwogCi0jZGVmaW5lIERFQklfQ0ZHX1NMQVZFMTYJMHgwMDA4MDAwMAkvLyBTbGF2ZSBpcyBhYmxlIHRvCi0JCQkJCQkvLyBzZXJ2ZSAxNi1iaXQKLQkJCQkJCS8vIGN5Y2xlcy4KLSNkZWZpbmUgREVCSV9DRkdfSU5DCQkweDAwMDQwMDAwCS8vIGVuYWIgYWRkcmVzcwotCQkJCQkJLy8gaW5jcmVtZW50IGZvciBibG9jawotCQkJCQkJLy8gdHJhbnNmZXJzLgotI2RlZmluZSBERUJJX0NGR19JTlRFTAkJMHgwMDAyMDAwMAkvLyBJbnRlbCBzdHlsZSBsb2NhbCBidXMuCi0jZGVmaW5lIERFQklfQ0ZHX1RJTUVST0ZGCTB4MDAwMTAwMDAJLy8gRGlzYWJsZSB0aW1lci4KKy8qICA0LWJpdCBmaWVsZCB0aGF0IHNwZWNpZmllcyBERUJJIHRpbWVvdXQgdmFsdWUgaW4gUENJIGNsb2NrIGN5Y2xlczogKi8KKyNkZWZpbmUgREVCSV9DRkdfVE9VVF9CSVQJMjIJLyogICAgRmluaXNoIERFQkkgY3ljbGUgYWZ0ZXIgKi8KKwkJCQkJLyogICAgdGhpcyBtYW55IGNsb2Nrcy4gKi8KKworLyogIDItYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIEVuZGlhbiBieXRlIGxhbmUgc3RlZXJpbmc6ICovCisjZGVmaW5lIERFQklfQ0ZHX1NXQVBfTk9ORQkweDAwMDAwMDAwCS8qICAgIFN0cmFpZ2h0IC0gZG9uJ3QgKi8KKwkJCQkJCS8qICAgIHN3YXAgYW55IGJ5dGVzICovCisJCQkJCQkvKiAgICAoSW50ZWwpLiAqLworI2RlZmluZSBERUJJX0NGR19TV0FQXzIJCTB4MDAxMDAwMDAJLyogICAgMi1ieXRlIHN3YXAgKE1vdG9yb2xhKS4gKi8KKyNkZWZpbmUgREVCSV9DRkdfU1dBUF80CQkweDAwMjAwMDAwCS8qICAgIDQtYnl0ZSBzd2FwLiAqLworI2RlZmluZSBERUJJX0NGR18xNgkJMHgwMDA4MDAwMAkvKiAgU2xhdmUgaXMgYWJsZSB0byAqLworCQkJCQkJLyogIHNlcnZlIDE2LWJpdCAqLworCQkJCQkJLyogIGN5Y2xlcy4gKi8KKworI2RlZmluZSBERUJJX0NGR19TTEFWRTE2CTB4MDAwODAwMDAJLyogIFNsYXZlIGlzIGFibGUgdG8gKi8KKwkJCQkJCS8qICBzZXJ2ZSAxNi1iaXQgKi8KKwkJCQkJCS8qICBjeWNsZXMuICovCisjZGVmaW5lIERFQklfQ0ZHX0lOQwkJMHgwMDA0MDAwMAkvKiAgZW5hYiBhZGRyZXNzICovCisJCQkJCQkvKiAgaW5jcmVtZW50IGZvciBibG9jayAqLworCQkJCQkJLyogIHRyYW5zZmVycy4gKi8KKyNkZWZpbmUgREVCSV9DRkdfSU5URUwJCTB4MDAwMjAwMDAJLyogIEludGVsIHN0eWxlIGxvY2FsIGJ1cy4gKi8KKyNkZWZpbmUgREVCSV9DRkdfVElNRVJPRkYJMHgwMDAxMDAwMAkvKiAgRGlzYWJsZSB0aW1lci4gKi8KIAogI2lmIFBMQVRGT1JNID09IElOVEVMCiAKLSNkZWZpbmUgREVCSV9UT1VUCQk3CS8vIFdhaXQgNyBQQ0kgY2xvY2tzCi0JCQkJCQkvLyAoMjEyIG5zKSBiZWZvcmUKLQkJCQkJCS8vIHBvbGxpbmcgUkRZLgorI2RlZmluZSBERUJJX1RPVVQJCTcJLyogIFdhaXQgNyBQQ0kgY2xvY2tzICovCisJCQkJCQkvKiAgKDIxMiBucykgYmVmb3JlICovCisJCQkJCQkvKiAgcG9sbGluZyBSRFkuICovCiAKLS8vIEludGVsIGJ5dGUgbGFuZSBzdGVlcmluZyAocGFzcyB0aHJvdWdoIGFsbCBieXRlIGxhbmVzKS4KKy8qICBJbnRlbCBieXRlIGxhbmUgc3RlZXJpbmcgKHBhc3MgdGhyb3VnaCBhbGwgYnl0ZSBsYW5lcykuICovCiAjZGVmaW5lIERFQklfU1dBUAkJREVCSV9DRkdfU1dBUF9OT05FCiAKICNlbGlmIFBMQVRGT1JNID09IE1PVE9ST0xBCiAKLSNkZWZpbmUgREVCSV9UT1VUCQkxNQkvLyBXYWl0IDE1IFBDSSBjbG9ja3MgKDQ1NCBucykKLQkJCQkJLy8gbWF4aW11bSBiZWZvcmUgdGltaW5nIG91dC4KLSNkZWZpbmUgREVCSV9TV0FQCQlERUJJX0NGR19TV0FQXzIJLy8gTW90b3JvbGEgYnl0ZSBsYW5lIHN0ZWVyaW5nLgorI2RlZmluZSBERUJJX1RPVVQJCTE1CS8qICBXYWl0IDE1IFBDSSBjbG9ja3MgKDQ1NCBucykgKi8KKwkJCQkJLyogIG1heGltdW0gYmVmb3JlIHRpbWluZyBvdXQuICovCisjZGVmaW5lIERFQklfU1dBUAkJREVCSV9DRkdfU1dBUF8yCS8qICBNb3Rvcm9sYSBieXRlIGxhbmUgc3RlZXJpbmcuICovCiAKICNlbmRpZgogCi0vLyBERUJJIHBhZ2UgdGFibGUgY29uc3RhbnRzLgotI2RlZmluZSBERUJJX1BBR0VfRElTQUJMRQkweDAwMDAwMDAwCS8vIFBhZ2luZyBkaXNhYmxlLgorLyogIERFQkkgcGFnZSB0YWJsZSBjb25zdGFudHMuICovCisjZGVmaW5lIERFQklfUEFHRV9ESVNBQkxFCTB4MDAwMDAwMDAJLyogIFBhZ2luZyBkaXNhYmxlLiAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vRVhUUkEgRlJPTSBPVEhFUiBTQU5TT1JBWSAgKiAuaC8vLy8vLy8vCisvKiAqKioqKioqIEVYVFJBIEZST00gT1RIRVIgU0FOU09SQVkgICogLmggICoqKioqKiogKi8KIAotLy8gTG9hZFNyYyB2YWx1ZXM6Ci0jZGVmaW5lIExPQURTUkNfSU5EWAkJMAkvLyBQcmVsb2FkIGNvcmUgaW4gcmVzcG9uc2UgdG8KLQkJCQkJLy8gSW5kZXguCi0jZGVmaW5lIExPQURTUkNfT1ZFUgkJMQkvLyBQcmVsb2FkIGNvcmUgaW4gcmVzcG9uc2UgdG8KLQkJCQkJLy8gT3ZlcmZsb3cuCi0jZGVmaW5lIExPQURTUkNCX09WRVJBCQkyCS8vIFByZWxvYWQgQiBjb3JlIGluIHJlc3BvbnNlCi0JCQkJCS8vIHRvIEEgT3ZlcmZsb3cuCi0jZGVmaW5lIExPQURTUkNfTk9ORQkJMwkvLyBOZXZlciBwcmVsb2FkIGNvcmUuCisvKiAgTG9hZFNyYyB2YWx1ZXM6ICovCisjZGVmaW5lIExPQURTUkNfSU5EWAkJMAkvKiAgUHJlbG9hZCBjb3JlIGluIHJlc3BvbnNlIHRvICovCisJCQkJCS8qICBJbmRleC4gKi8KKyNkZWZpbmUgTE9BRFNSQ19PVkVSCQkxCS8qICBQcmVsb2FkIGNvcmUgaW4gcmVzcG9uc2UgdG8gKi8KKwkJCQkJLyogIE92ZXJmbG93LiAqLworI2RlZmluZSBMT0FEU1JDQl9PVkVSQQkJMgkvKiAgUHJlbG9hZCBCIGNvcmUgaW4gcmVzcG9uc2UgKi8KKwkJCQkJLyogIHRvIEEgT3ZlcmZsb3cuICovCisjZGVmaW5lIExPQURTUkNfTk9ORQkJMwkvKiAgTmV2ZXIgcHJlbG9hZCBjb3JlLiAqLwogCi0vLyBJbnRTcmMgdmFsdWVzOgotI2RlZmluZSBJTlRTUkNfTk9ORSAJCTAJLy8gSW50ZXJydXB0cyBkaXNhYmxlZC4KLSNkZWZpbmUgSU5UU1JDX09WRVIgCQkxCS8vIEludGVycnVwdCBvbiBPdmVyZmxvdy4KLSNkZWZpbmUgSU5UU1JDX0lORFggCQkyCS8vIEludGVycnVwdCBvbiBJbmRleC4KLSNkZWZpbmUgSU5UU1JDX0JPVEggCQkzCS8vIEludGVycnVwdCBvbiBJbmRleCBvciBPdmVyZmxvdy4KKy8qICBJbnRTcmMgdmFsdWVzOiAqLworI2RlZmluZSBJTlRTUkNfTk9ORSAJCTAJLyogIEludGVycnVwdHMgZGlzYWJsZWQuICovCisjZGVmaW5lIElOVFNSQ19PVkVSIAkJMQkvKiAgSW50ZXJydXB0IG9uIE92ZXJmbG93LiAqLworI2RlZmluZSBJTlRTUkNfSU5EWCAJCTIJLyogIEludGVycnVwdCBvbiBJbmRleC4gKi8KKyNkZWZpbmUgSU5UU1JDX0JPVEggCQkzCS8qICBJbnRlcnJ1cHQgb24gSW5kZXggb3IgT3ZlcmZsb3cuICovCiAKLS8vIExhdGNoU3JjIHZhbHVlczoKLSNkZWZpbmUgTEFUQ0hTUkNfQUJfUkVBRAkwCS8vIExhdGNoIG9uIHJlYWQuCi0jZGVmaW5lIExBVENIU1JDX0FfSU5EWEEJMQkvLyBMYXRjaCBBIG9uIEEgSW5kZXguCi0jZGVmaW5lIExBVENIU1JDX0JfSU5EWEIJMgkvLyBMYXRjaCBCIG9uIEIgSW5kZXguCi0jZGVmaW5lIExBVENIU1JDX0JfT1ZFUkEJMwkvLyBMYXRjaCBCIG9uIEEgT3ZlcmZsb3cuCisvKiAgTGF0Y2hTcmMgdmFsdWVzOiAqLworI2RlZmluZSBMQVRDSFNSQ19BQl9SRUFECTAJLyogIExhdGNoIG9uIHJlYWQuICovCisjZGVmaW5lIExBVENIU1JDX0FfSU5EWEEJMQkvKiAgTGF0Y2ggQSBvbiBBIEluZGV4LiAqLworI2RlZmluZSBMQVRDSFNSQ19CX0lORFhCCTIJLyogIExhdGNoIEIgb24gQiBJbmRleC4gKi8KKyNkZWZpbmUgTEFUQ0hTUkNfQl9PVkVSQQkzCS8qICBMYXRjaCBCIG9uIEEgT3ZlcmZsb3cuICovCiAKLS8vIEluZHhTcmMgdmFsdWVzOgotI2RlZmluZSBJTkRYU1JDX0hBUkQJCTAJLy8gSGFyZHdhcmUgb3Igc29mdHdhcmUgaW5kZXguCi0jZGVmaW5lIElORFhTUkNfU09GVAkJMQkvLyBTb2Z0d2FyZSBpbmRleCBvbmx5LgorLyogIEluZHhTcmMgdmFsdWVzOiAqLworI2RlZmluZSBJTkRYU1JDX0hBUkQJCTAJLyogIEhhcmR3YXJlIG9yIHNvZnR3YXJlIGluZGV4LiAqLworI2RlZmluZSBJTkRYU1JDX1NPRlQJCTEJLyogIFNvZnR3YXJlIGluZGV4IG9ubHkuICovCiAKLS8vIEluZHhQb2wgdmFsdWVzOgotI2RlZmluZSBJTkRYUE9MX1BPUyAJCTAJLy8gSW5kZXggaW5wdXQgaXMgYWN0aXZlIGhpZ2guCi0jZGVmaW5lIElORFhQT0xfTkVHIAkJMQkvLyBJbmRleCBpbnB1dCBpcyBhY3RpdmUgbG93LgorLyogIEluZHhQb2wgdmFsdWVzOiAqLworI2RlZmluZSBJTkRYUE9MX1BPUyAJCTAJLyogIEluZGV4IGlucHV0IGlzIGFjdGl2ZSBoaWdoLiAqLworI2RlZmluZSBJTkRYUE9MX05FRyAJCTEJLyogIEluZGV4IGlucHV0IGlzIGFjdGl2ZSBsb3cuICovCiAKLS8vIENsa1NyYyB2YWx1ZXM6Ci0jZGVmaW5lIENMS1NSQ19DT1VOVEVSCQkwCS8vIENvdW50ZXIgbW9kZS4KLSNkZWZpbmUgQ0xLU1JDX1RJTUVSCQkyCS8vIFRpbWVyIG1vZGUuCi0jZGVmaW5lIENMS1NSQ19FWFRFTkRFUgkJMwkvLyBFeHRlbmRlciBtb2RlLgorLyogIENsa1NyYyB2YWx1ZXM6ICovCisjZGVmaW5lIENMS1NSQ19DT1VOVEVSCQkwCS8qICBDb3VudGVyIG1vZGUuICovCisjZGVmaW5lIENMS1NSQ19USU1FUgkJMgkvKiAgVGltZXIgbW9kZS4gKi8KKyNkZWZpbmUgQ0xLU1JDX0VYVEVOREVSCQkzCS8qICBFeHRlbmRlciBtb2RlLiAqLwogCi0vLyBDbGtQb2wgdmFsdWVzOgotI2RlZmluZSBDTEtQT0xfUE9TCQkwCS8vIENvdW50ZXIvRXh0ZW5kZXIgY2xvY2sgaXMKLQkJCQkJLy8gYWN0aXZlIGhpZ2guCi0jZGVmaW5lIENMS1BPTF9ORUcJCTEJLy8gQ291bnRlci9FeHRlbmRlciBjbG9jayBpcwotCQkJCQkvLyBhY3RpdmUgbG93LgotI2RlZmluZSBDTlRESVJfVVAJCTAJLy8gVGltZXIgY291bnRzIHVwLgotI2RlZmluZSBDTlRESVJfRE9XTiAJCTEJLy8gVGltZXIgY291bnRzIGRvd24uCisvKiAgQ2xrUG9sIHZhbHVlczogKi8KKyNkZWZpbmUgQ0xLUE9MX1BPUwkJMAkvKiAgQ291bnRlci9FeHRlbmRlciBjbG9jayBpcyAqLworCQkJCQkvKiAgYWN0aXZlIGhpZ2guICovCisjZGVmaW5lIENMS1BPTF9ORUcJCTEJLyogIENvdW50ZXIvRXh0ZW5kZXIgY2xvY2sgaXMgKi8KKwkJCQkJLyogIGFjdGl2ZSBsb3cuICovCisjZGVmaW5lIENOVERJUl9VUAkJMAkvKiAgVGltZXIgY291bnRzIHVwLiAqLworI2RlZmluZSBDTlRESVJfRE9XTiAJCTEJLyogIFRpbWVyIGNvdW50cyBkb3duLiAqLwogCi0vLyBDbGtFbmFiIHZhbHVlczoKLSNkZWZpbmUgQ0xLRU5BQl9BTFdBWVMJCTAJLy8gQ2xvY2sgYWx3YXlzIGVuYWJsZWQuCi0jZGVmaW5lIENMS0VOQUJfSU5ERVgJCTEJLy8gQ2xvY2sgaXMgZW5hYmxlZCBieSBpbmRleC4KKy8qICBDbGtFbmFiIHZhbHVlczogKi8KKyNkZWZpbmUgQ0xLRU5BQl9BTFdBWVMJCTAJLyogIENsb2NrIGFsd2F5cyBlbmFibGVkLiAqLworI2RlZmluZSBDTEtFTkFCX0lOREVYCQkxCS8qICBDbG9jayBpcyBlbmFibGVkIGJ5IGluZGV4LiAqLwogCi0vLyBDbGtNdWx0IHZhbHVlczoKLSNkZWZpbmUgQ0xLTVVMVF80WCAJCTAJLy8gNHggY2xvY2sgbXVsdGlwbGllci4KLSNkZWZpbmUgQ0xLTVVMVF8yWCAJCTEJLy8gMnggY2xvY2sgbXVsdGlwbGllci4KLSNkZWZpbmUgQ0xLTVVMVF8xWCAJCTIJLy8gMXggY2xvY2sgbXVsdGlwbGllci4KKy8qICBDbGtNdWx0IHZhbHVlczogKi8KKyNkZWZpbmUgQ0xLTVVMVF80WCAJCTAJLyogIDR4IGNsb2NrIG11bHRpcGxpZXIuICovCisjZGVmaW5lIENMS01VTFRfMlggCQkxCS8qICAyeCBjbG9jayBtdWx0aXBsaWVyLiAqLworI2RlZmluZSBDTEtNVUxUXzFYIAkJMgkvKiAgMXggY2xvY2sgbXVsdGlwbGllci4gKi8KIAotLy8gQml0IEZpZWxkIHBvc2l0aW9ucyBpbiBDT1VOVEVSX1NFVFVQIHN0cnVjdHVyZToKLSNkZWZpbmUgQkZfTE9BRFNSQwkJOQkvLyBQcmVsb2FkIHRyaWdnZXIuCi0jZGVmaW5lIEJGX0lORFhTUkMJCTcJLy8gSW5kZXggc291cmNlLgotI2RlZmluZSBCRl9JTkRYUE9MCQk2CS8vIEluZGV4IHBvbGFyaXR5LgotI2RlZmluZSBCRl9DTEtTUkMJCTQJLy8gQ2xvY2sgc291cmNlLgotI2RlZmluZSBCRl9DTEtQT0wJCTMJLy8gQ2xvY2sgcG9sYXJpdHkvY291bnQgZGlyZWN0aW9uLgotI2RlZmluZSBCRl9DTEtNVUxUCQkxCS8vIENsb2NrIG11bHRpcGxpZXIuCi0jZGVmaW5lIEJGX0NMS0VOQUIJCTAJLy8gQ2xvY2sgZW5hYmxlLgorLyogIEJpdCBGaWVsZCBwb3NpdGlvbnMgaW4gQ09VTlRFUl9TRVRVUCBzdHJ1Y3R1cmU6ICovCisjZGVmaW5lIEJGX0xPQURTUkMJCTkJLyogIFByZWxvYWQgdHJpZ2dlci4gKi8KKyNkZWZpbmUgQkZfSU5EWFNSQwkJNwkvKiAgSW5kZXggc291cmNlLiAqLworI2RlZmluZSBCRl9JTkRYUE9MCQk2CS8qICBJbmRleCBwb2xhcml0eS4gKi8KKyNkZWZpbmUgQkZfQ0xLU1JDCQk0CS8qICBDbG9jayBzb3VyY2UuICovCisjZGVmaW5lIEJGX0NMS1BPTAkJMwkvKiAgQ2xvY2sgcG9sYXJpdHkvY291bnQgZGlyZWN0aW9uLiAqLworI2RlZmluZSBCRl9DTEtNVUxUCQkxCS8qICBDbG9jayBtdWx0aXBsaWVyLiAqLworI2RlZmluZSBCRl9DTEtFTkFCCQkwCS8qICBDbG9jayBlbmFibGUuICovCiAKLS8vIEVudW1lcmF0ZWQgY291bnRlciBvcGVyYXRpbmcgbW9kZXMgc3BlY2lmaWVkIGJ5IENsa1NyYyBiaXQgZmllbGQgaW4KLS8vIGEgQ09VTlRFUl9TRVRVUC4KKy8qICBFbnVtZXJhdGVkIGNvdW50ZXIgb3BlcmF0aW5nIG1vZGVzIHNwZWNpZmllZCBieSBDbGtTcmMgYml0IGZpZWxkIGluICovCisvKiAgYSBDT1VOVEVSX1NFVFVQLiAqLwogCi0jZGVmaW5lIENMS1NSQ19DT1VOVEVSCQkwCS8vIENvdW50ZXI6IEVOQ19DIGNsb2NrLCBFTkNfRAotCQkJCQkvLyBkaXJlY3Rpb24uCi0jZGVmaW5lIENMS1NSQ19USU1FUgkJMgkvLyBUaW1lcjogU1lTX0MgY2xvY2ssCi0JCQkJCS8vIGRpcmVjdGlvbiBzcGVjaWZpZWQgYnkKLQkJCQkJLy8gQ2xrUG9sLgotI2RlZmluZSBDTEtTUkNfRVhURU5ERVIJCTMJLy8gRXh0ZW5kZXI6IE9WUl9BIGNsb2NrLAotCQkJCQkvLyBFTkNfRCBkaXJlY3Rpb24uCisjZGVmaW5lIENMS1NSQ19DT1VOVEVSCQkwCS8qICBDb3VudGVyOiBFTkNfQyBjbG9jaywgRU5DX0QgKi8KKwkJCQkJLyogIGRpcmVjdGlvbi4gKi8KKyNkZWZpbmUgQ0xLU1JDX1RJTUVSCQkyCS8qICBUaW1lcjogU1lTX0MgY2xvY2ssICovCisJCQkJCS8qICBkaXJlY3Rpb24gc3BlY2lmaWVkIGJ5ICovCisJCQkJCS8qICBDbGtQb2wuICovCisjZGVmaW5lIENMS1NSQ19FWFRFTkRFUgkJMwkvKiAgRXh0ZW5kZXI6IE9WUl9BIGNsb2NrLCAqLworCQkJCQkvKiAgRU5DX0QgZGlyZWN0aW9uLiAqLwogCi0vLyBFbnVtZXJhdGVkIGNvdW50ZXIgY2xvY2sgbXVsdGlwbGllcnMuCisvKiAgRW51bWVyYXRlZCBjb3VudGVyIGNsb2NrIG11bHRpcGxpZXJzLiAqLwogCi0jZGVmaW5lIE1VTFRfWDAJCQkweDAwMDMJLy8gU3VwcG9ydHMgbm8gbXVsdGlwbGllcnM7Ci0JCQkJCS8vIGZpeGVkIHBoeXNpY2FsIG11bHRpcGxpZXIgPQotCQkJCQkvLyAzLgotI2RlZmluZSBNVUxUX1gxCQkJMHgwMDAyCS8vIFN1cHBvcnRzIG11bHRpcGxpZXIgeDE7Ci0JCQkJCS8vIGZpeGVkIHBoeXNpY2FsIG11bHRpcGxpZXIgPQotCQkJCQkvLyAyLgotI2RlZmluZSBNVUxUX1gyCQkJMHgwMDAxCS8vIFN1cHBvcnRzIG11bHRpcGxpZXJzIHgxLAotCQkJCQkvLyB4MjsgcGh5c2ljYWwgbXVsdGlwbGllcnMgPQotCQkJCQkvLyAxIG9yIDIuCi0jZGVmaW5lIE1VTFRfWDQJCQkweDAwMDAJLy8gU3VwcG9ydHMgbXVsdGlwbGllcnMgeDEsCi0JCQkJCS8vIHgyLCB4NDsgcGh5c2ljYWwKLQkJCQkJLy8gbXVsdGlwbGllcnMgPSAwLCAxIG9yIDIuCisjZGVmaW5lIE1VTFRfWDAJCQkweDAwMDMJLyogIFN1cHBvcnRzIG5vIG11bHRpcGxpZXJzOyAqLworCQkJCQkvKiAgZml4ZWQgcGh5c2ljYWwgbXVsdGlwbGllciA9ICovCisJCQkJCS8qICAzLiAqLworI2RlZmluZSBNVUxUX1gxCQkJMHgwMDAyCS8qICBTdXBwb3J0cyBtdWx0aXBsaWVyIHgxOyAqLworCQkJCQkvKiAgZml4ZWQgcGh5c2ljYWwgbXVsdGlwbGllciA9ICovCisJCQkJCS8qICAyLiAqLworI2RlZmluZSBNVUxUX1gyCQkJMHgwMDAxCS8qICBTdXBwb3J0cyBtdWx0aXBsaWVycyB4MSwgKi8KKwkJCQkJLyogIHgyOyBwaHlzaWNhbCBtdWx0aXBsaWVycyA9ICovCisJCQkJCS8qICAxIG9yIDIuICovCisjZGVmaW5lIE1VTFRfWDQJCQkweDAwMDAJLyogIFN1cHBvcnRzIG11bHRpcGxpZXJzIHgxLCAqLworCQkJCQkvKiAgeDIsIHg0OyBwaHlzaWNhbCAqLworCQkJCQkvKiAgbXVsdGlwbGllcnMgPSAwLCAxIG9yIDIuICovCiAKLS8vIFNhbml0eS1jaGVjayBsaW1pdHMgZm9yIHBhcmFtZXRlcnMuCisvKiAgU2FuaXR5LWNoZWNrIGxpbWl0cyBmb3IgcGFyYW1ldGVycy4gKi8KIAotI2RlZmluZSBOVU1fQ09VTlRFUlMJCTYJLy8gTWF4aW11bSB2YWxpZCBjb3VudGVyCi0JCQkJCS8vIGxvZ2ljYWwgY2hhbm5lbCBudW1iZXIuCisjZGVmaW5lIE5VTV9DT1VOVEVSUwkJNgkvKiAgTWF4aW11bSB2YWxpZCBjb3VudGVyICovCisJCQkJCS8qICBsb2dpY2FsIGNoYW5uZWwgbnVtYmVyLiAqLwogI2RlZmluZSBOVU1fSU5UU09VUkNFUwkJNAogI2RlZmluZSBOVU1fTEFUQ0hTT1VSQ0VTCTQKICNkZWZpbmUgTlVNX0NMS01VTFRTCQk0CkBAIC03MDgsNTkgKzY1Myw1OSBAQAogI2RlZmluZSBOVU1fSU5ERVhTT1VSQ0VTCTIKICNkZWZpbmUgTlVNX0xPQURUUklHUwkJNAogCi0vLyBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQSBhbmQgQ1JCIGNvdW50ZXIgY29udHJvbCByZWdpc3RlcnMuCisvKiAgQml0IGZpZWxkIHBvc2l0aW9ucyBpbiBDUkEgYW5kIENSQiBjb3VudGVyIGNvbnRyb2wgcmVnaXN0ZXJzLiAqLwogCi0vLyBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQToKLSNkZWZpbmUgQ1JBQklUX0lORFhTUkNfQgkxNAkvLyAgIEIgaW5kZXggc291cmNlLgotI2RlZmluZSBDUkFCSVRfQ0xLU1JDX0IJCTEyCS8vICAgQiBjbG9jayBzb3VyY2UuCi0jZGVmaW5lIENSQUJJVF9JTkRYUE9MX0EJMTEJLy8gICBBIGluZGV4IHBvbGFyaXR5LgotI2RlZmluZSBDUkFCSVRfTE9BRFNSQ19BCSA5CS8vICAgQSBwcmVsb2FkIHRyaWdnZXIuCi0jZGVmaW5lIENSQUJJVF9DTEtNVUxUX0EJIDcJLy8gICBBIGNsb2NrIG11bHRpcGxpZXIuCi0jZGVmaW5lIENSQUJJVF9JTlRTUkNfQQkJIDUJLy8gICBBIGludGVycnVwdCBzb3VyY2UuCi0jZGVmaW5lIENSQUJJVF9DTEtQT0xfQQkJIDQJLy8gICBBIGNsb2NrIHBvbGFyaXR5LgotI2RlZmluZSBDUkFCSVRfSU5EWFNSQ19BCSAyCS8vICAgQSBpbmRleCBzb3VyY2UuCi0jZGVmaW5lIENSQUJJVF9DTEtTUkNfQQkJIDAJLy8gICBBIGNsb2NrIHNvdXJjZS4KKy8qICBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQTogKi8KKyNkZWZpbmUgQ1JBQklUX0lORFhTUkNfQgkxNAkvKiAgICBCIGluZGV4IHNvdXJjZS4gKi8KKyNkZWZpbmUgQ1JBQklUX0NMS1NSQ19CCQkxMgkvKiAgICBCIGNsb2NrIHNvdXJjZS4gKi8KKyNkZWZpbmUgQ1JBQklUX0lORFhQT0xfQQkxMQkvKiAgICBBIGluZGV4IHBvbGFyaXR5LiAqLworI2RlZmluZSBDUkFCSVRfTE9BRFNSQ19BCSA5CS8qICAgIEEgcHJlbG9hZCB0cmlnZ2VyLiAqLworI2RlZmluZSBDUkFCSVRfQ0xLTVVMVF9BCSA3CS8qICAgIEEgY2xvY2sgbXVsdGlwbGllci4gKi8KKyNkZWZpbmUgQ1JBQklUX0lOVFNSQ19BCQkgNQkvKiAgICBBIGludGVycnVwdCBzb3VyY2UuICovCisjZGVmaW5lIENSQUJJVF9DTEtQT0xfQQkJIDQJLyogICAgQSBjbG9jayBwb2xhcml0eS4gKi8KKyNkZWZpbmUgQ1JBQklUX0lORFhTUkNfQQkgMgkvKiAgICBBIGluZGV4IHNvdXJjZS4gKi8KKyNkZWZpbmUgQ1JBQklUX0NMS1NSQ19BCQkgMAkvKiAgICBBIGNsb2NrIHNvdXJjZS4gKi8KIAotLy8gQml0IGZpZWxkIHBvc2l0aW9ucyBpbiBDUkI6Ci0jZGVmaW5lIENSQkJJVF9JTlRSRVNFVENNRAkxNQkvLyAgIEludGVycnVwdCByZXNldCBjb21tYW5kLgotI2RlZmluZSBDUkJCSVRfSU5UUkVTRVRfQgkxNAkvLyAgIEIgaW50ZXJydXB0IHJlc2V0IGVuYWJsZS4KLSNkZWZpbmUgQ1JCQklUX0lOVFJFU0VUX0EJMTMJLy8gICBBIGludGVycnVwdCByZXNldCBlbmFibGUuCi0jZGVmaW5lIENSQkJJVF9DTEtFTkFCX0EJMTIJLy8gICBBIGNsb2NrIGVuYWJsZS4KLSNkZWZpbmUgQ1JCQklUX0lOVFNSQ19CCQkxMAkvLyAgIEIgaW50ZXJydXB0IHNvdXJjZS4KLSNkZWZpbmUgQ1JCQklUX0xBVENIU1JDCQkgOAkvLyAgIEEvQiBsYXRjaCBzb3VyY2UuCi0jZGVmaW5lIENSQkJJVF9MT0FEU1JDX0IJIDYJLy8gICBCIHByZWxvYWQgdHJpZ2dlci4KLSNkZWZpbmUgQ1JCQklUX0NMS01VTFRfQgkgMwkvLyAgIEIgY2xvY2sgbXVsdGlwbGllci4KLSNkZWZpbmUgQ1JCQklUX0NMS0VOQUJfQgkgMgkvLyAgIEIgY2xvY2sgZW5hYmxlLgotI2RlZmluZSBDUkJCSVRfSU5EWFBPTF9CCSAxCS8vICAgQiBpbmRleCBwb2xhcml0eS4KLSNkZWZpbmUgQ1JCQklUX0NMS1BPTF9CCQkgMAkvLyAgIEIgY2xvY2sgcG9sYXJpdHkuCisvKiAgQml0IGZpZWxkIHBvc2l0aW9ucyBpbiBDUkI6ICovCisjZGVmaW5lIENSQkJJVF9JTlRSRVNFVENNRAkxNQkvKiAgICBJbnRlcnJ1cHQgcmVzZXQgY29tbWFuZC4gKi8KKyNkZWZpbmUgQ1JCQklUX0lOVFJFU0VUX0IJMTQJLyogICAgQiBpbnRlcnJ1cHQgcmVzZXQgZW5hYmxlLiAqLworI2RlZmluZSBDUkJCSVRfSU5UUkVTRVRfQQkxMwkvKiAgICBBIGludGVycnVwdCByZXNldCBlbmFibGUuICovCisjZGVmaW5lIENSQkJJVF9DTEtFTkFCX0EJMTIJLyogICAgQSBjbG9jayBlbmFibGUuICovCisjZGVmaW5lIENSQkJJVF9JTlRTUkNfQgkJMTAJLyogICAgQiBpbnRlcnJ1cHQgc291cmNlLiAqLworI2RlZmluZSBDUkJCSVRfTEFUQ0hTUkMJCSA4CS8qICAgIEEvQiBsYXRjaCBzb3VyY2UuICovCisjZGVmaW5lIENSQkJJVF9MT0FEU1JDX0IJIDYJLyogICAgQiBwcmVsb2FkIHRyaWdnZXIuICovCisjZGVmaW5lIENSQkJJVF9DTEtNVUxUX0IJIDMJLyogICAgQiBjbG9jayBtdWx0aXBsaWVyLiAqLworI2RlZmluZSBDUkJCSVRfQ0xLRU5BQl9CCSAyCS8qICAgIEIgY2xvY2sgZW5hYmxlLiAqLworI2RlZmluZSBDUkJCSVRfSU5EWFBPTF9CCSAxCS8qICAgIEIgaW5kZXggcG9sYXJpdHkuICovCisjZGVmaW5lIENSQkJJVF9DTEtQT0xfQgkJIDAJLyogICAgQiBjbG9jayBwb2xhcml0eS4gKi8KIAotLy8gQml0IGZpZWxkIG1hc2tzIGZvciBDUkEgYW5kIENSQi4KKy8qICBCaXQgZmllbGQgbWFza3MgZm9yIENSQSBhbmQgQ1JCLiAqLwogCi0jZGVmaW5lIENSQU1TS19JTkRYU1JDX0IJKCAodWludDE2X3QpKCAzIDw8IENSQUJJVF9JTkRYU1JDX0IpICkKLSNkZWZpbmUgQ1JBTVNLX0NMS1NSQ19CCQkoICh1aW50MTZfdCkoIDMgPDwgQ1JBQklUX0NMS1NSQ19CKSApCi0jZGVmaW5lIENSQU1TS19JTkRYUE9MX0EJKCAodWludDE2X3QpKCAxIDw8IENSQUJJVF9JTkRYUE9MX0EpICkKLSNkZWZpbmUgQ1JBTVNLX0xPQURTUkNfQQkoICh1aW50MTZfdCkoIDMgPDwgQ1JBQklUX0xPQURTUkNfQSkgKQotI2RlZmluZSBDUkFNU0tfQ0xLTVVMVF9BCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfQ0xLTVVMVF9BKSApCi0jZGVmaW5lIENSQU1TS19JTlRTUkNfQQkJKCAodWludDE2X3QpKCAzIDw8IENSQUJJVF9JTlRTUkNfQSkgKQotI2RlZmluZSBDUkFNU0tfQ0xLUE9MX0EJCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfQ0xLUE9MX0EpICkKLSNkZWZpbmUgQ1JBTVNLX0lORFhTUkNfQQkoICh1aW50MTZfdCkoIDMgPDwgQ1JBQklUX0lORFhTUkNfQSkgKQotI2RlZmluZSBDUkFNU0tfQ0xLU1JDX0EJCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfQ0xLU1JDX0EpICkKKyNkZWZpbmUgQ1JBTVNLX0lORFhTUkNfQgkoKHVpbnQxNl90KSgzIDw8IENSQUJJVF9JTkRYU1JDX0IpKQorI2RlZmluZSBDUkFNU0tfQ0xLU1JDX0IJCSgodWludDE2X3QpKDMgPDwgQ1JBQklUX0NMS1NSQ19CKSkKKyNkZWZpbmUgQ1JBTVNLX0lORFhQT0xfQQkoKHVpbnQxNl90KSgxIDw8IENSQUJJVF9JTkRYUE9MX0EpKQorI2RlZmluZSBDUkFNU0tfTE9BRFNSQ19BCSgodWludDE2X3QpKDMgPDwgQ1JBQklUX0xPQURTUkNfQSkpCisjZGVmaW5lIENSQU1TS19DTEtNVUxUX0EJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfQ0xLTVVMVF9BKSkKKyNkZWZpbmUgQ1JBTVNLX0lOVFNSQ19BCQkoKHVpbnQxNl90KSgzIDw8IENSQUJJVF9JTlRTUkNfQSkpCisjZGVmaW5lIENSQU1TS19DTEtQT0xfQQkJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfQ0xLUE9MX0EpKQorI2RlZmluZSBDUkFNU0tfSU5EWFNSQ19BCSgodWludDE2X3QpKDMgPDwgQ1JBQklUX0lORFhTUkNfQSkpCisjZGVmaW5lIENSQU1TS19DTEtTUkNfQQkJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfQ0xLU1JDX0EpKQogCi0jZGVmaW5lIENSQk1TS19JTlRSRVNFVENNRAkoICh1aW50MTZfdCkoIDEgPDwgQ1JCQklUX0lOVFJFU0VUQ01EKSApCi0jZGVmaW5lIENSQk1TS19JTlRSRVNFVF9CCSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfSU5UUkVTRVRfQikgKQotI2RlZmluZSBDUkJNU0tfSU5UUkVTRVRfQQkoICh1aW50MTZfdCkoIDEgPDwgQ1JCQklUX0lOVFJFU0VUX0EpICkKLSNkZWZpbmUgQ1JCTVNLX0NMS0VOQUJfQQkoICh1aW50MTZfdCkoIDEgPDwgQ1JCQklUX0NMS0VOQUJfQSkgKQotI2RlZmluZSBDUkJNU0tfSU5UU1JDX0IJCSggKHVpbnQxNl90KSggMyA8PCBDUkJCSVRfSU5UU1JDX0IpICkKLSNkZWZpbmUgQ1JCTVNLX0xBVENIU1JDCQkoICh1aW50MTZfdCkoIDMgPDwgQ1JCQklUX0xBVENIU1JDKSApCi0jZGVmaW5lIENSQk1TS19MT0FEU1JDX0IJKCAodWludDE2X3QpKCAzIDw8IENSQkJJVF9MT0FEU1JDX0IpICkKLSNkZWZpbmUgQ1JCTVNLX0NMS01VTFRfQgkoICh1aW50MTZfdCkoIDMgPDwgQ1JCQklUX0NMS01VTFRfQikgKQotI2RlZmluZSBDUkJNU0tfQ0xLRU5BQl9CCSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfQ0xLRU5BQl9CKSApCi0jZGVmaW5lIENSQk1TS19JTkRYUE9MX0IJKCAodWludDE2X3QpKCAxIDw8IENSQkJJVF9JTkRYUE9MX0IpICkKLSNkZWZpbmUgQ1JCTVNLX0NMS1BPTF9CCQkoICh1aW50MTZfdCkoIDEgPDwgQ1JCQklUX0NMS1BPTF9CKSApCisjZGVmaW5lIENSQk1TS19JTlRSRVNFVENNRAkoKHVpbnQxNl90KSgxIDw8IENSQkJJVF9JTlRSRVNFVENNRCkpCisjZGVmaW5lIENSQk1TS19JTlRSRVNFVF9CCSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0lOVFJFU0VUX0IpKQorI2RlZmluZSBDUkJNU0tfSU5UUkVTRVRfQQkoKHVpbnQxNl90KSgxIDw8IENSQkJJVF9JTlRSRVNFVF9BKSkKKyNkZWZpbmUgQ1JCTVNLX0NMS0VOQUJfQQkoKHVpbnQxNl90KSgxIDw8IENSQkJJVF9DTEtFTkFCX0EpKQorI2RlZmluZSBDUkJNU0tfSU5UU1JDX0IJCSgodWludDE2X3QpKDMgPDwgQ1JCQklUX0lOVFNSQ19CKSkKKyNkZWZpbmUgQ1JCTVNLX0xBVENIU1JDCQkoKHVpbnQxNl90KSgzIDw8IENSQkJJVF9MQVRDSFNSQykpCisjZGVmaW5lIENSQk1TS19MT0FEU1JDX0IJKCh1aW50MTZfdCkoMyA8PCBDUkJCSVRfTE9BRFNSQ19CKSkKKyNkZWZpbmUgQ1JCTVNLX0NMS01VTFRfQgkoKHVpbnQxNl90KSgzIDw8IENSQkJJVF9DTEtNVUxUX0IpKQorI2RlZmluZSBDUkJNU0tfQ0xLRU5BQl9CCSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0NMS0VOQUJfQikpCisjZGVmaW5lIENSQk1TS19JTkRYUE9MX0IJKCh1aW50MTZfdCkoMSA8PCBDUkJCSVRfSU5EWFBPTF9CKSkKKyNkZWZpbmUgQ1JCTVNLX0NMS1BPTF9CCQkoKHVpbnQxNl90KSgxIDw8IENSQkJJVF9DTEtQT0xfQikpCiAKLSNkZWZpbmUgQ1JCTVNLX0lOVENUUkwJCSggQ1JCTVNLX0lOVFJFU0VUQ01EIHwgQ1JCTVNLX0lOVFJFU0VUX0EgfCBDUkJNU0tfSU5UUkVTRVRfQiApCS8vIEludGVycnVwdCByZXNldCBjb250cm9sIGJpdHMuCisjZGVmaW5lIENSQk1TS19JTlRDVFJMCQkoQ1JCTVNLX0lOVFJFU0VUQ01EIHwgQ1JCTVNLX0lOVFJFU0VUX0EgfCBDUkJNU0tfSU5UUkVTRVRfQikJLyogIEludGVycnVwdCByZXNldCBjb250cm9sIGJpdHMuICovCiAKLS8vIEJpdCBmaWVsZCBwb3NpdGlvbnMgZm9yIHN0YW5kYXJkaXplZCBTRVRVUCBzdHJ1Y3R1cmUuCisvKiAgQml0IGZpZWxkIHBvc2l0aW9ucyBmb3Igc3RhbmRhcmRpemVkIFNFVFVQIHN0cnVjdHVyZS4gKi8KIAogI2RlZmluZSBTVERCSVRfSU5UU1JDCQkxMwogI2RlZmluZSBTVERCSVRfTEFUQ0hTUkMJCTExCkBAIC03NzIsMTkgKzcxNywxOCBAQAogI2RlZmluZSBTVERCSVRfQ0xLTVVMVAkJIDEKICNkZWZpbmUgU1REQklUX0NMS0VOQUIJCSAwCiAKLS8vIEJpdCBmaWVsZCBtYXNrcyBmb3Igc3RhbmRhcmRpemVkIFNFVFVQIHN0cnVjdHVyZS4KKy8qICBCaXQgZmllbGQgbWFza3MgZm9yIHN0YW5kYXJkaXplZCBTRVRVUCBzdHJ1Y3R1cmUuICovCiAKLSNkZWZpbmUgU1RETVNLX0lOVFNSQwkJKCAodWludDE2X3QpKCAzIDw8IFNUREJJVF9JTlRTUkMgICApICkKLSNkZWZpbmUgU1RETVNLX0xBVENIU1JDCQkoICh1aW50MTZfdCkoIDMgPDwgU1REQklUX0xBVENIU1JDICkgKQotI2RlZmluZSBTVERNU0tfTE9BRFNSQwkJKCAodWludDE2X3QpKCAzIDw8IFNUREJJVF9MT0FEU1JDICApICkKLSNkZWZpbmUgU1RETVNLX0lORFhTUkMJCSggKHVpbnQxNl90KSggMSA8PCBTVERCSVRfSU5EWFNSQyAgKSApCi0jZGVmaW5lIFNURE1TS19JTkRYUE9MCQkoICh1aW50MTZfdCkoIDEgPDwgU1REQklUX0lORFhQT0wgICkgKQotI2RlZmluZSBTVERNU0tfQ0xLU1JDCQkoICh1aW50MTZfdCkoIDMgPDwgU1REQklUX0NMS1NSQyAgICkgKQotI2RlZmluZSBTVERNU0tfQ0xLUE9MCQkoICh1aW50MTZfdCkoIDEgPDwgU1REQklUX0NMS1BPTCAgICkgKQotI2RlZmluZSBTVERNU0tfQ0xLTVVMVAkJKCAodWludDE2X3QpKCAzIDw8IFNUREJJVF9DTEtNVUxUICApICkKLSNkZWZpbmUgU1RETVNLX0NMS0VOQUIJCSggKHVpbnQxNl90KSggMSA8PCBTVERCSVRfQ0xLRU5BQiAgKSApCisjZGVmaW5lIFNURE1TS19JTlRTUkMJCSgodWludDE2X3QpKDMgPDwgU1REQklUX0lOVFNSQykpCisjZGVmaW5lIFNURE1TS19MQVRDSFNSQwkJKCh1aW50MTZfdCkoMyA8PCBTVERCSVRfTEFUQ0hTUkMpKQorI2RlZmluZSBTVERNU0tfTE9BRFNSQwkJKCh1aW50MTZfdCkoMyA8PCBTVERCSVRfTE9BRFNSQykpCisjZGVmaW5lIFNURE1TS19JTkRYU1JDCQkoKHVpbnQxNl90KSgxIDw8IFNUREJJVF9JTkRYU1JDKSkKKyNkZWZpbmUgU1RETVNLX0lORFhQT0wJCSgodWludDE2X3QpKDEgPDwgU1REQklUX0lORFhQT0wpKQorI2RlZmluZSBTVERNU0tfQ0xLU1JDCQkoKHVpbnQxNl90KSgzIDw8IFNUREJJVF9DTEtTUkMpKQorI2RlZmluZSBTVERNU0tfQ0xLUE9MCQkoKHVpbnQxNl90KSgxIDw8IFNUREJJVF9DTEtQT0wpKQorI2RlZmluZSBTVERNU0tfQ0xLTVVMVAkJKCh1aW50MTZfdCkoMyA8PCBTVERCSVRfQ0xLTVVMVCkpCisjZGVmaW5lIFNURE1TS19DTEtFTkFCCQkoKHVpbnQxNl90KSgxIDw8IFNUREJJVF9DTEtFTkFCKSkKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAvKiB0eXBlZGVmIHN0cnVjdCBpbmRleENvdW50ZXIgKi8KIC8qIHsgKi8KQEAgLTc5NSw4ICs3MzksOCBAQAogLyogICB1bnNpZ25lZCBpbnQgZW5jOyAqLwogLyogfUNhbGxDb3VudGVyOyAqLwogCi10eXBlZGVmIHN0cnVjdCBidWZmZXJETUEgeworc3RydWN0IGJ1ZmZlckRNQSB7CiAJZG1hX2FkZHJfdCBQaHlzaWNhbEJhc2U7CiAJdm9pZCAqTG9naWNhbEJhc2U7CiAJdWludDMyX3QgRE1BSGFuZGxlOwotfSBETUFCVUY7Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0ZmQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKQEAgLTAsMCArMSw4NzAgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCisgICAgU2tlbGV0b24gY29kZSBmb3IgYSBDb21lZGkgZHJpdmVyCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAyIEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKy8qCitEcml2ZXI6IHNlcmlhbDIwMDIKK0Rlc2NyaXB0aW9uOiBEcml2ZXIgZm9yIHNlcmlhbCBjb25uZWN0ZWQgaGFyZHdhcmUKK0RldmljZXM6CitBdXRob3I6IEFuZGVycyBCbG9tZGVsbAorVXBkYXRlZDogRnJpLCAgNyBKdW4gMjAwMiAxMjo1Njo0NSAtMDcwMAorU3RhdHVzOiBpbiBkZXZlbG9wbWVudAorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IHNlcmlhbDIwMDJfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcmlhbDIwMDJfYm9hcmQgc2VyaWFsMjAwMl9ib2FyZHNbXSA9IHsKKwl7CisgICAgICBuYW1lOgkic2VyaWFsMjAwMiJ9Cit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBzZXJpYWwyMDAyX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBzZXJpYWwyMDAyX3JhbmdlX3RhYmxlX3QgeworCisJLy8gSEFDSy4uLgorCWludCBsZW5ndGg7CisJc3RydWN0IGNvbWVkaV9rcmFuZ2UgcmFuZ2U7Cit9OworCisKK3N0cnVjdCBzZXJpYWwyMDAyX3ByaXZhdGUgeworCisJaW50IHBvcnQ7CQkvLyAvZGV2L3R0eVM8cG9ydD4KKwlpbnQgc3BlZWQ7CQkvLyBiYXVkcmF0ZQorCXN0cnVjdCBmaWxlICp0dHk7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGRpZ2l0YWxfaW5fbWFwcGluZ1szMl07CisJdW5zaWduZWQgY2hhciBkaWdpdGFsX291dF9tYXBwaW5nWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGFuYWxvZ19pbl9tYXBwaW5nWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGFuYWxvZ19vdXRfbWFwcGluZ1szMl07CisJdW5zaWduZWQgY2hhciBlbmNvZGVyX2luX21hcHBpbmdbMzJdOworCXN0cnVjdCBzZXJpYWwyMDAyX3JhbmdlX3RhYmxlX3QgaW5fcmFuZ2VbMzJdLCBvdXRfcmFuZ2VbMzJdOworfTsKKworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHNlcmlhbDIwMDJfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBzZXJpYWwyMDAyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHNlcmlhbDIwMDJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9zZXJpYWwyMDAyID0geworICAgICAgZHJpdmVyX25hbWU6InNlcmlhbDIwMDIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnNlcmlhbDIwMDJfYXR0YWNoLAorICAgICAgZGV0YWNoOnNlcmlhbDIwMDJfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomc2VyaWFsMjAwMl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHNlcmlhbDIwMDJfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihzZXJpYWwyMDAyX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHNlcmlhbDIwMDJfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBzZXJpYWwyMDAyX2RpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHNlcmlhbDIwMDJfZG9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzZXJpYWwyMDAyX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHNlcmlhbDIwMDJfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RydWN0IHNlcmlhbF9kYXRhIHsKKwllbnVtIHsgaXNfaW52YWxpZCwgaXNfZGlnaXRhbCwgaXNfY2hhbm5lbCB9IGtpbmQ7CisJaW50IGluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsdWU7Cit9OworCitzdGF0aWMgbG9uZyB0dHlfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIG9wLCB1bnNpZ25lZCBsb25nIHBhcmFtKQoreworI2lmZGVmIEhBVkVfVU5MT0NLRURfSU9DVEwKKyAgCWlmIChmLT5mX29wLT51bmxvY2tlZF9pb2N0bCkgeworCQlyZXR1cm4gZi0+Zl9vcC0+dW5sb2NrZWRfaW9jdGwoZiwgb3AsIHBhcmFtKTsKKwl9CisjZW5kaWYKKwlpZiAoZi0+Zl9vcC0+aW9jdGwpIHsKKwkgIAlyZXR1cm4gZi0+Zl9vcC0+aW9jdGwoZi0+Zl9kZW50cnktPmRfaW5vZGUsIGYsIG9wLCBwYXJhbSk7CisJfQorCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW50IHR0eV93cml0ZShzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJaW50IHJlc3VsdDsKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCWYtPmZfcG9zID0gMDsKKwlyZXN1bHQgPSBmLT5mX29wLT53cml0ZShmLCBidWYsIGNvdW50LCAmZi0+Zl9wb3MpOworCXNldF9mcyhvbGRmcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIDAKKy8qCisgKiBPbiAyLjYuMjYuMyB0aGlzIG9jY2Fpc29uYWxseSBnYXZlIG1lIHBhZ2UgZmF1bHRzLCB3b3JrZWQgYXJvdW5kIGJ5CisgKiBzZXR0aW5ncy5jX2NjW1ZNSU5dID0gMDsgc2V0dGluZ3MuY19jY1tWVElNRV0gPSAwCisgKi8KK3N0YXRpYyBpbnQgdHR5X2F2YWlsYWJsZShzdHJ1Y3QgZmlsZSAqZikKK3sKKwlsb25nIHJlc3VsdCA9IDA7CisJbW1fc2VnbWVudF90IG9sZGZzOworCisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKwl0dHlfaW9jdGwoZiwgRklPTlJFQUQsICh1bnNpZ25lZCBsb25nKSZyZXN1bHQpOworCXNldF9mcyhvbGRmcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHR0eV9yZWFkKHN0cnVjdCBmaWxlICpmLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gLTE7CisJaWYgKCFJU19FUlIoZikpIHsKKwkJbW1fc2VnbWVudF90IG9sZGZzOworCisJCW9sZGZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCQlpZiAoZi0+Zl9vcC0+cG9sbCkgeworCQkJc3RydWN0IHBvbGxfd3F1ZXVlcyB0YWJsZTsKKwkJCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBub3c7CisKKwkJCWRvX2dldHRpbWVvZmRheSgmc3RhcnQpOworCQkJcG9sbF9pbml0d2FpdCgmdGFibGUpOworCQkJd2hpbGUgKDEpIHsKKwkJCQlsb25nIGVsYXBzZWQ7CisJCQkJaW50IG1hc2s7CisKKwkJCQltYXNrID0gZi0+Zl9vcC0+cG9sbChmLCAmdGFibGUucHQpOworCQkJCWlmIChtYXNrICYgKFBPTExSRE5PUk0gfCBQT0xMUkRCQU5EIHwgUE9MTElOIHwKKwkJCQkJCVBPTExIVVAgfCBQT0xMRVJSKSkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCQkJCWVsYXBzZWQgPQorCQkJCQkoMTAwMDAwMCAqIChub3cudHZfc2VjIC0gc3RhcnQudHZfc2VjKSArCisJCQkJCW5vdy50dl91c2VjIC0gc3RhcnQudHZfdXNlYyk7CisJCQkJaWYgKGVsYXBzZWQgPiB0aW1lb3V0KSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCXNjaGVkdWxlX3RpbWVvdXQoKCh0aW1lb3V0IC0KKwkJCQkJCQllbGFwc2VkKSAqIEhaKSAvIDEwMDAwKTsKKwkJCX0KKwkJCXBvbGxfZnJlZXdhaXQoJnRhYmxlKTsKKwkJCXsKKwkJCSAgdW5zaWduZWQgY2hhciBjaDsKKworCQkJICBmLT5mX3BvcyA9IDA7CisJCQkgIGlmIChmLT5mX29wLT5yZWFkKGYsICZjaCwgMSwgJmYtPmZfcG9zKSA9PSAxKSB7CisJCQkgICAgcmVzdWx0ID0gY2g7CisJCQkgIH0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIERldmljZSBkb2VzIG5vdCBzdXBwb3J0IHBvbGwsIGJ1c3kgd2FpdCAqLworCQkJaW50IHJldHJpZXMgPSAwOworCQkJd2hpbGUgKDEpIHsKKwkJCSAgCXVuc2lnbmVkIGNoYXIgY2g7CisKKwkJCQlyZXRyaWVzKys7CisJCQkJaWYgKHJldHJpZXMgPj0gdGltZW91dCkgeworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlmLT5mX3BvcyA9IDA7CisJCQkJaWYgKGYtPmZfb3AtPnJlYWQoZiwgJmNoLCAxLCAmZi0+Zl9wb3MpID09IDEpIHsKKwkJCQkgIAlyZXN1bHQgPSBjaDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNvbWVkaV91ZGVsYXkoMTAwKTsKKwkJCX0KKwkJfQorCQlzZXRfZnMob2xkZnMpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCB0dHlfc2V0c3BlZWQoc3RydWN0IGZpbGUgKmYsIGludCBzcGVlZCkKK3sKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCXsKKwkJLy8gU2V0IHNwZWVkCisJCXN0cnVjdCB0ZXJtaW9zIHNldHRpbmdzOworCisJCXR0eV9pb2N0bChmLCBUQ0dFVFMsICh1bnNpZ25lZCBsb25nKSZzZXR0aW5ncyk7CisvLyAgICBwcmludGsoIlNwZWVkOiAlZFxuIiwgc2V0dGluZ3MuY19jZmxhZyAmIChDQkFVRCB8IENCQVVERVgpKTsKKwkJc2V0dGluZ3MuY19pZmxhZyA9IDA7CisJCXNldHRpbmdzLmNfb2ZsYWcgPSAwOworCQlzZXR0aW5ncy5jX2xmbGFnID0gMDsKKwkJc2V0dGluZ3MuY19jZmxhZyA9IENMT0NBTCB8IENTOCB8IENSRUFEOworCQlzZXR0aW5ncy5jX2NjW1ZNSU5dID0gMDsKKwkJc2V0dGluZ3MuY19jY1tWVElNRV0gPSAwOworCQlzd2l0Y2ggKHNwZWVkKSB7CisJCWNhc2UgMjQwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCMjQwMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDQ4MDA6eworCQkJCXNldHRpbmdzLmNfY2ZsYWcgfD0gQjQ4MDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSA5NjAwOnsKKwkJCQlzZXR0aW5ncy5jX2NmbGFnIHw9IEI5NjAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMTkyMDA6eworCQkJCXNldHRpbmdzLmNfY2ZsYWcgfD0gQjE5MjAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMzg0MDA6eworCQkJCXNldHRpbmdzLmNfY2ZsYWcgfD0gQjM4NDAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNTc2MDA6eworCQkJCXNldHRpbmdzLmNfY2ZsYWcgfD0gQjU3NjAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMTE1MjAwOnsKKwkJCQlzZXR0aW5ncy5jX2NmbGFnIHw9IEIxMTUyMDA7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCOTYwMDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCXR0eV9pb2N0bChmLCBUQ1NFVFMsICh1bnNpZ25lZCBsb25nKSZzZXR0aW5ncyk7CisvLyAgICBwcmludGsoIlNwZWVkOiAlZFxuIiwgc2V0dGluZ3MuY19jZmxhZyAmIChDQkFVRCB8IENCQVVERVgpKTsKKwl9CisJeworCQkvLyBTZXQgbG93IGxhdGVuY3kKKwkJc3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2V0dGluZ3M7CisKKwkJdHR5X2lvY3RsKGYsIFRJT0NHU0VSSUFMLCAodW5zaWduZWQgbG9uZykmc2V0dGluZ3MpOworCQlzZXR0aW5ncy5mbGFncyB8PSBBU1lOQ19MT1dfTEFURU5DWTsKKwkJdHR5X2lvY3RsKGYsIFRJT0NTU0VSSUFMLCAodW5zaWduZWQgbG9uZykmc2V0dGluZ3MpOworCX0KKworCXNldF9mcyhvbGRmcyk7Cit9CisKK3N0YXRpYyB2b2lkIHBvbGxfZGlnaXRhbChzdHJ1Y3QgZmlsZSAqZiwgaW50IGNoYW5uZWwpCit7CisJY2hhciBjbWQ7CisKKwljbWQgPSAweDQwIHwgKGNoYW5uZWwgJiAweDFmKTsKKwl0dHlfd3JpdGUoZiwgJmNtZCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvbGxfY2hhbm5lbChzdHJ1Y3QgZmlsZSAqZiwgaW50IGNoYW5uZWwpCit7CisJY2hhciBjbWQ7CisKKwljbWQgPSAweDYwIHwgKGNoYW5uZWwgJiAweDFmKTsKKwl0dHlfd3JpdGUoZiwgJmNtZCwgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VyaWFsX2RhdGEgc2VyaWFsX3JlYWQoc3RydWN0IGZpbGUgKmYsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBzZXJpYWxfZGF0YSByZXN1bHQ7CisJaW50IGxlbmd0aDsKKworCXJlc3VsdC5raW5kID0gaXNfaW52YWxpZDsKKwlyZXN1bHQuaW5kZXggPSAwOworCXJlc3VsdC52YWx1ZSA9IDA7CisJbGVuZ3RoID0gMDsKKwl3aGlsZSAoMSkgeworCQlpbnQgZGF0YSA9IHR0eV9yZWFkKGYsIHRpbWVvdXQpOworCisJCWxlbmd0aCsrOworCQlpZiAoZGF0YSA8IDApIHsKKwkJCXByaW50aygic2VyaWFsMjAwMiBlcnJvclxuIik7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChkYXRhICYgMHg4MCkgeworCQkJcmVzdWx0LnZhbHVlID0gKHJlc3VsdC52YWx1ZSA8PCA3KSB8IChkYXRhICYgMHg3Zik7CisJCX0gZWxzZSB7CisJCQlpZiAobGVuZ3RoID09IDEpIHsKKwkJCQlzd2l0Y2ggKChkYXRhID4+IDUpICYgMHgwMykgeworCQkJCWNhc2UgMDp7CisJCQkJCQlyZXN1bHQudmFsdWUgPSAwOworCQkJCQkJcmVzdWx0LmtpbmQgPSBpc19kaWdpdGFsOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMTp7CisJCQkJCQlyZXN1bHQudmFsdWUgPSAxOworCQkJCQkJcmVzdWx0LmtpbmQgPSBpc19kaWdpdGFsOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcmVzdWx0LnZhbHVlID0KKwkJCQkJKHJlc3VsdC4KKwkJCQkJdmFsdWUgPDwgMikgfCAoKGRhdGEgJiAweDYwKSA+PiA1KTsKKwkJCQlyZXN1bHQua2luZCA9IGlzX2NoYW5uZWw7CisJCQl9CisJCQlyZXN1bHQuaW5kZXggPSBkYXRhICYgMHgxZjsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX3dyaXRlKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3Qgc2VyaWFsX2RhdGEgZGF0YSkKK3sKKwlpZiAoZGF0YS5raW5kID09IGlzX2RpZ2l0YWwpIHsKKwkJdW5zaWduZWQgY2hhciBjaCA9CisJCQkoKGRhdGEudmFsdWUgPDwgNSkgJiAweDIwKSB8IChkYXRhLmluZGV4ICYgMHgxZik7CisJCXR0eV93cml0ZShmLCAmY2gsIDEpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgY2hbNl07CisJCWludCBpID0gMDsKKwkJaWYgKGRhdGEudmFsdWUgPj0gKDFMIDw8IDMwKSkgeworCQkJY2hbaV0gPSAweDgwIHwgKChkYXRhLnZhbHVlID4+IDMwKSAmIDB4MDMpOworCQkJaSsrOworCQl9CisJCWlmIChkYXRhLnZhbHVlID49ICgxTCA8PCAyMykpIHsKKwkJCWNoW2ldID0gMHg4MCB8ICgoZGF0YS52YWx1ZSA+PiAyMykgJiAweDdmKTsKKwkJCWkrKzsKKwkJfQorCQlpZiAoZGF0YS52YWx1ZSA+PSAoMUwgPDwgMTYpKSB7CisJCQljaFtpXSA9IDB4ODAgfCAoKGRhdGEudmFsdWUgPj4gMTYpICYgMHg3Zik7CisJCQlpKys7CisJCX0KKwkJaWYgKGRhdGEudmFsdWUgPj0gKDFMIDw8IDkpKSB7CisJCQljaFtpXSA9IDB4ODAgfCAoKGRhdGEudmFsdWUgPj4gOSkgJiAweDdmKTsKKwkJCWkrKzsKKwkJfQorCQljaFtpXSA9IDB4ODAgfCAoKGRhdGEudmFsdWUgPj4gMikgJiAweDdmKTsKKwkJaSsrOworCQljaFtpXSA9ICgoZGF0YS52YWx1ZSA8PCA1KSAmIDB4NjApIHwgKGRhdGEuaW5kZXggJiAweDFmKTsKKwkJaSsrOworCQl0dHlfd3JpdGUoZiwgY2gsIGkpOworCX0KK30KKworc3RhdGljIHZvaWQgc2VyaWFsXzIwMDJfb3BlbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwljaGFyIHBvcnRbMjBdOworCisJc3ByaW50Zihwb3J0LCAiL2Rldi90dHlTJWQiLCBkZXZwcml2LT5wb3J0KTsKKwlkZXZwcml2LT50dHkgPSBmaWxwX29wZW4ocG9ydCwgMCwgT19SRFdSKTsKKwlpZiAoSVNfRVJSKGRldnByaXYtPnR0eSkpIHsKKwkJcHJpbnRrKCJzZXJpYWxfMjAwMjogZmlsZSBvcGVuIGVycm9yID0gJWxkXG4iLAorCQkJUFRSX0VSUihkZXZwcml2LT50dHkpKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgY29uZmlnX3QgeworCisJCQlpbnQga2luZDsKKwkJCWludCBiaXRzOworCQkJaW50IG1pbjsKKwkJCWludCBtYXg7CisJCX07CisKKwkJc3RydWN0IGNvbmZpZ190IGRpZ19pbl9jb25maWdbMzJdOworCQlzdHJ1Y3QgY29uZmlnX3QgZGlnX291dF9jb25maWdbMzJdOworCQlzdHJ1Y3QgY29uZmlnX3QgY2hhbl9pbl9jb25maWdbMzJdOworCQlzdHJ1Y3QgY29uZmlnX3QgY2hhbl9vdXRfY29uZmlnWzMyXTsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJCWRpZ19pbl9jb25maWdbaV0ua2luZCA9IDA7CisJCQlkaWdfaW5fY29uZmlnW2ldLmJpdHMgPSAwOworCQkJZGlnX2luX2NvbmZpZ1tpXS5taW4gPSAwOworCQkJZGlnX2luX2NvbmZpZ1tpXS5tYXggPSAwOworCQkJZGlnX291dF9jb25maWdbaV0ua2luZCA9IDA7CisJCQlkaWdfb3V0X2NvbmZpZ1tpXS5iaXRzID0gMDsKKwkJCWRpZ19vdXRfY29uZmlnW2ldLm1pbiA9IDA7CisJCQlkaWdfb3V0X2NvbmZpZ1tpXS5tYXggPSAwOworCQkJY2hhbl9pbl9jb25maWdbaV0ua2luZCA9IDA7CisJCQljaGFuX2luX2NvbmZpZ1tpXS5iaXRzID0gMDsKKwkJCWNoYW5faW5fY29uZmlnW2ldLm1pbiA9IDA7CisJCQljaGFuX2luX2NvbmZpZ1tpXS5tYXggPSAwOworCQkJY2hhbl9vdXRfY29uZmlnW2ldLmtpbmQgPSAwOworCQkJY2hhbl9vdXRfY29uZmlnW2ldLmJpdHMgPSAwOworCQkJY2hhbl9vdXRfY29uZmlnW2ldLm1pbiA9IDA7CisJCQljaGFuX291dF9jb25maWdbaV0ubWF4ID0gMDsKKwkJfQorCisJCXR0eV9zZXRzcGVlZChkZXZwcml2LT50dHksIGRldnByaXYtPnNwZWVkKTsKKwkJcG9sbF9jaGFubmVsKGRldnByaXYtPnR0eSwgMzEpOwkvLyBTdGFydCByZWFkaW5nIGNvbmZpZ3VyYXRpb24KKwkJd2hpbGUgKDEpIHsKKwkJCXN0cnVjdCBzZXJpYWxfZGF0YSBkYXRhOworCisJCQlkYXRhID0gc2VyaWFsX3JlYWQoZGV2cHJpdi0+dHR5LCAxMDAwKTsKKwkJCWlmIChkYXRhLmtpbmQgIT0gaXNfY2hhbm5lbCB8fCBkYXRhLmluZGV4ICE9IDMxCisJCQkJfHwgIShkYXRhLnZhbHVlICYgMHhlMCkpIHsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJaW50IGNvbW1hbmQsIGNoYW5uZWwsIGtpbmQ7CisJCQkJc3RydWN0IGNvbmZpZ190ICpjdXJfY29uZmlnID0gMDsKKworCQkJCWNoYW5uZWwgPSBkYXRhLnZhbHVlICYgMHgxZjsKKwkJCQlraW5kID0gKGRhdGEudmFsdWUgPj4gNSkgJiAweDc7CisJCQkJY29tbWFuZCA9IChkYXRhLnZhbHVlID4+IDgpICYgMHgzOworCQkJCXN3aXRjaCAoa2luZCkgeworCQkJCWNhc2UgMTp7CisJCQkJCQljdXJfY29uZmlnID0gZGlnX2luX2NvbmZpZzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIDI6eworCQkJCQkJY3VyX2NvbmZpZyA9IGRpZ19vdXRfY29uZmlnOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzp7CisJCQkJCQljdXJfY29uZmlnID0gY2hhbl9pbl9jb25maWc7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA0OnsKKwkJCQkJCWN1cl9jb25maWcgPSBjaGFuX291dF9jb25maWc7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA1OnsKKwkJCQkJCWN1cl9jb25maWcgPSBjaGFuX2luX2NvbmZpZzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoY3VyX2NvbmZpZykgeworCQkJCQljdXJfY29uZmlnW2NoYW5uZWxdLmtpbmQgPSBraW5kOworCQkJCQlzd2l0Y2ggKGNvbW1hbmQpIHsKKwkJCQkJY2FzZSAwOnsKKwkJCQkJCQljdXJfY29uZmlnW2NoYW5uZWxdLgorCQkJCQkJCQliaXRzID0KKwkJCQkJCQkJKGRhdGEuCisJCQkJCQkJCXZhbHVlID4+IDEwKSAmCisJCQkJCQkJCTB4M2Y7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAxOnsKKwkJCQkJCQlpbnQgdW5pdCwgc2lnbiwgbWluOworCQkJCQkJCXVuaXQgPSAoZGF0YS4KKwkJCQkJCQkJdmFsdWUgPj4gMTApICYKKwkJCQkJCQkJMHg3OworCQkJCQkJCXNpZ24gPSAoZGF0YS4KKwkJCQkJCQkJdmFsdWUgPj4gMTMpICYKKwkJCQkJCQkJMHgxOworCQkJCQkJCW1pbiA9IChkYXRhLgorCQkJCQkJCQl2YWx1ZSA+PiAxNCkgJgorCQkJCQkJCQkweGZmZmZmOworCisJCQkJCQkJc3dpdGNoICh1bml0KSB7CisJCQkJCQkJY2FzZSAwOnsKKwkJCQkJCQkJCW1pbiA9IG1pbiAqIDEwMDAwMDA7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAxOnsKKwkJCQkJCQkJCW1pbiA9IG1pbiAqIDEwMDA7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAyOnsKKwkJCQkJCQkJCW1pbiA9IG1pbiAqIDE7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJCWlmIChzaWduKSB7CisJCQkJCQkJCW1pbiA9IC1taW47CisJCQkJCQkJfQorCQkJCQkJCWN1cl9jb25maWdbY2hhbm5lbF0uCisJCQkJCQkJCW1pbiA9IG1pbjsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDI6eworCQkJCQkJCWludCB1bml0LCBzaWduLCBtYXg7CisJCQkJCQkJdW5pdCA9IChkYXRhLgorCQkJCQkJCQl2YWx1ZSA+PiAxMCkgJgorCQkJCQkJCQkweDc7CisJCQkJCQkJc2lnbiA9IChkYXRhLgorCQkJCQkJCQl2YWx1ZSA+PiAxMykgJgorCQkJCQkJCQkweDE7CisJCQkJCQkJbWF4ID0gKGRhdGEuCisJCQkJCQkJCXZhbHVlID4+IDE0KSAmCisJCQkJCQkJCTB4ZmZmZmY7CisKKwkJCQkJCQlzd2l0Y2ggKHVuaXQpIHsKKwkJCQkJCQljYXNlIDA6eworCQkJCQkJCQkJbWF4ID0gbWF4ICogMTAwMDAwMDsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDE6eworCQkJCQkJCQkJbWF4ID0gbWF4ICogMTAwMDsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDI6eworCQkJCQkJCQkJbWF4ID0gbWF4ICogMTsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJaWYgKHNpZ24pIHsKKwkJCQkJCQkJbWF4ID0gLW1heDsKKwkJCQkJCQl9CisJCQkJCQkJY3VyX2NvbmZpZ1tjaGFubmVsXS4KKwkJCQkJCQkJbWF4ID0gbWF4OworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yIChpID0gMDsgaSA8PSA0OyBpKyspIHsKKwkJCS8vIEZpbGwgaW4gc3ViZGV2IGRhdGEKKwkJCXN0cnVjdCBjb25maWdfdCAqYzsKKwkJCXVuc2lnbmVkIGNoYXIgKm1hcHBpbmcgPSAwOworCQkJc3RydWN0IHNlcmlhbDIwMDJfcmFuZ2VfdGFibGVfdCAqcmFuZ2UgPSAwOworCQkJaW50IGtpbmQgPSAwOworCisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgMDp7CisJCQkJCWMgPSBkaWdfaW5fY29uZmlnOworCQkJCQltYXBwaW5nID0gZGV2cHJpdi0+ZGlnaXRhbF9pbl9tYXBwaW5nOworCQkJCQlraW5kID0gMTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDE6eworCQkJCQljID0gZGlnX291dF9jb25maWc7CisJCQkJCW1hcHBpbmcgPSBkZXZwcml2LT5kaWdpdGFsX291dF9tYXBwaW5nOworCQkJCQlraW5kID0gMjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDI6eworCQkJCQljID0gY2hhbl9pbl9jb25maWc7CisJCQkJCW1hcHBpbmcgPSBkZXZwcml2LT5hbmFsb2dfaW5fbWFwcGluZzsKKwkJCQkJcmFuZ2UgPSBkZXZwcml2LT5pbl9yYW5nZTsKKwkJCQkJa2luZCA9IDM7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAzOnsKKwkJCQkJYyA9IGNoYW5fb3V0X2NvbmZpZzsKKwkJCQkJbWFwcGluZyA9IGRldnByaXYtPmFuYWxvZ19vdXRfbWFwcGluZzsKKwkJCQkJcmFuZ2UgPSBkZXZwcml2LT5vdXRfcmFuZ2U7CisJCQkJCWtpbmQgPSA0OworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgNDp7CisJCQkJCWMgPSBjaGFuX2luX2NvbmZpZzsKKwkJCQkJbWFwcGluZyA9IGRldnByaXYtPmVuY29kZXJfaW5fbWFwcGluZzsKKwkJCQkJcmFuZ2UgPSBkZXZwcml2LT5pbl9yYW5nZTsKKwkJCQkJa2luZCA9IDU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDp7CisJCQkJCWMgPSAwOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjKSB7CisJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJCQkJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKipyYW5nZV90YWJsZV9saXN0ID0gTlVMTDsKKwkJCQl1bnNpZ25lZCBpbnQgKm1heGRhdGFfbGlzdDsKKwkJCQlpbnQgaiwgY2hhbjsKKworCQkJCWZvciAoY2hhbiA9IDAsIGogPSAwOyBqIDwgMzI7IGorKykgeworCQkJCQlpZiAoY1tqXS5raW5kID09IGtpbmQpIHsKKwkJCQkJCWNoYW4rKzsKKwkJCQkJfQorCQkJCX0KKwkJCQlzID0gJmRldi0+c3ViZGV2aWNlc1tpXTsKKwkJCQlzLT5uX2NoYW4gPSBjaGFuOworCQkJCXMtPm1heGRhdGEgPSAwOworCQkJCWlmIChzLT5tYXhkYXRhX2xpc3QpIHsKKwkJCQkJa2ZyZWUocy0+bWF4ZGF0YV9saXN0KTsKKwkJCQl9CisJCQkJcy0+bWF4ZGF0YV9saXN0ID0gbWF4ZGF0YV9saXN0ID0KKwkJCQkJa21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIHMtPm5fY2hhbiwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQkJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKKwkJCQkJa2ZyZWUocy0+cmFuZ2VfdGFibGVfbGlzdCk7CisJCQkJfQorCQkJCWlmIChyYW5nZSkgeworCQkJCQlzLT5yYW5nZV90YWJsZSA9IDA7CisJCQkJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSByYW5nZV90YWJsZV9saXN0ID0KKwkJCQkJCWttYWxsb2Moc2l6ZW9mCisJCQkJCQkoc3RydWN0IHNlcmlhbDIwMDJfcmFuZ2VfdGFibGVfdCkgKgorCQkJCQkJcy0+bl9jaGFuLCBHRlBfS0VSTkVMKTsKKwkJCQl9CisJCQkJZm9yIChjaGFuID0gMCwgaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQkJCWlmIChjW2pdLmtpbmQgPT0ga2luZCkgeworCQkJCQkJaWYgKG1hcHBpbmcpIHsKKwkJCQkJCQltYXBwaW5nW2NoYW5dID0gajsKKwkJCQkJCX0KKwkJCQkJCWlmIChyYW5nZSkgeworCQkJCQkJCXJhbmdlW2pdLmxlbmd0aCA9IDE7CisJCQkJCQkJcmFuZ2Vbal0ucmFuZ2UubWluID0KKwkJCQkJCQkJY1tqXS5taW47CisJCQkJCQkJcmFuZ2Vbal0ucmFuZ2UubWF4ID0KKwkJCQkJCQkJY1tqXS5tYXg7CisJCQkJCQkJcmFuZ2VfdGFibGVfbGlzdFtjaGFuXSA9CisJCQkJCQkJCShjb25zdCBzdHJ1Y3QKKwkJCQkJCQkJY29tZWRpX2xyYW5nZSAqKQorCQkJCQkJCQkmcmFuZ2Vbal07CisJCQkJCQl9CisJCQkJCQltYXhkYXRhX2xpc3RbY2hhbl0gPQorCQkJCQkJCSgobG9uZyBsb25nKTEgPDwgY1tqXS4KKwkJCQkJCQliaXRzKSAtIDE7CisJCQkJCQljaGFuKys7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF8yMDAyX2Nsb3NlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmICghSVNfRVJSKGRldnByaXYtPnR0eSkgJiYgKGRldnByaXYtPnR0eSAhPSAwKSkgeworCQlmaWxwX2Nsb3NlKGRldnByaXYtPnR0eSwgMCk7CisJfQorfQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfZGlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuOworCisJY2hhbiA9IGRldnByaXYtPmRpZ2l0YWxfaW5fbWFwcGluZ1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlzdHJ1Y3Qgc2VyaWFsX2RhdGEgcmVhZDsKKworCQlwb2xsX2RpZ2l0YWwoZGV2cHJpdi0+dHR5LCBjaGFuKTsKKwkJd2hpbGUgKDEpIHsKKwkJCXJlYWQgPSBzZXJpYWxfcmVhZChkZXZwcml2LT50dHksIDEwMDApOworCQkJaWYgKHJlYWQua2luZCAhPSBpc19kaWdpdGFsIHx8IHJlYWQuaW5kZXggPT0gY2hhbikgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWRhdGFbbl0gPSByZWFkLnZhbHVlOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzZXJpYWwyMDAyX2RvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBkZXZwcml2LT5kaWdpdGFsX291dF9tYXBwaW5nW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCXN0cnVjdCBzZXJpYWxfZGF0YSB3cml0ZTsKKworCQl3cml0ZS5raW5kID0gaXNfZGlnaXRhbDsKKwkJd3JpdGUuaW5kZXggPSBjaGFuOworCQl3cml0ZS52YWx1ZSA9IGRhdGFbbl07CisJCXNlcmlhbF93cml0ZShkZXZwcml2LT50dHksIHdyaXRlKTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW47CisKKwljaGFuID0gZGV2cHJpdi0+YW5hbG9nX2luX21hcHBpbmdbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJc3RydWN0IHNlcmlhbF9kYXRhIHJlYWQ7CisKKwkJcG9sbF9jaGFubmVsKGRldnByaXYtPnR0eSwgY2hhbik7CisJCXdoaWxlICgxKSB7CisJCQlyZWFkID0gc2VyaWFsX3JlYWQoZGV2cHJpdi0+dHR5LCAxMDAwKTsKKwkJCWlmIChyZWFkLmtpbmQgIT0gaXNfY2hhbm5lbCB8fCByZWFkLmluZGV4ID09IGNoYW4pIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlkYXRhW25dID0gcmVhZC52YWx1ZTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW47CisKKwljaGFuID0gZGV2cHJpdi0+YW5hbG9nX291dF9tYXBwaW5nW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCXN0cnVjdCBzZXJpYWxfZGF0YSB3cml0ZTsKKworCQl3cml0ZS5raW5kID0gaXNfY2hhbm5lbDsKKwkJd3JpdGUuaW5kZXggPSBjaGFuOworCQl3cml0ZS52YWx1ZSA9IGRhdGFbbl07CisJCXNlcmlhbF93cml0ZShkZXZwcml2LT50dHksIHdyaXRlKTsKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW25dOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzZXJpYWwyMDAyX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9laV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW47CisKKwljaGFuID0gZGV2cHJpdi0+ZW5jb2Rlcl9pbl9tYXBwaW5nW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCXN0cnVjdCBzZXJpYWxfZGF0YSByZWFkOworCisJCXBvbGxfY2hhbm5lbChkZXZwcml2LT50dHksIGNoYW4pOworCQl3aGlsZSAoMSkgeworCQkJcmVhZCA9IHNlcmlhbF9yZWFkKGRldnByaXYtPnR0eSwgMTAwMCk7CisJCQlpZiAocmVhZC5raW5kICE9IGlzX2NoYW5uZWwgfHwgcmVhZC5pbmRleCA9PSBjaGFuKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZGF0YVtuXSA9IHJlYWQudmFsdWU7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJcHJpbnRrKCJjb21lZGklZDogc2VyaWFsMjAwMjogIiwgZGV2LT5taW5vcik7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBzZXJpYWwyMDAyX3ByaXZhdGUpKSA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRldi0+b3BlbiA9IHNlcmlhbF8yMDAyX29wZW47CisJZGV2LT5jbG9zZSA9IHNlcmlhbF8yMDAyX2Nsb3NlOworCWRldnByaXYtPnBvcnQgPSBpdC0+b3B0aW9uc1swXTsKKwlkZXZwcml2LT5zcGVlZCA9IGl0LT5vcHRpb25zWzFdOworCXByaW50aygiL2Rldi90dHlTJWQgQCAlZFxuIiwgZGV2cHJpdi0+cG9ydCwgZGV2cHJpdi0+c3BlZWQpOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA1KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZGlnaXRhbCBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDA7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX3JlYWQgPSAmc2VyaWFsMjAwMl9kaV9yaW5zbjsKKworCS8qIGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFOworCXMtPm5fY2hhbiA9IDA7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX3dyaXRlID0gJnNlcmlhbDIwMDJfZG9fd2luc247CisKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IDA7CisJcy0+aW5zbl9yZWFkID0gJnNlcmlhbDIwMDJfYWlfcmluc247CisKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFOworCXMtPm5fY2hhbiA9IDA7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAwOworCXMtPmluc25fd3JpdGUgPSAmc2VyaWFsMjAwMl9hb193aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSAmc2VyaWFsMjAwMl9hb19yaW5zbjsKKworCS8qIGVuY29kZXIgaW5wdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0xTQU1QTDsKKwlzLT5uX2NoYW4gPSAwOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gMDsKKwlzLT5pbnNuX3JlYWQgPSAmc2VyaWFsMjAwMl9laV9yaW5zbjsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogc2VyaWFsMjAwMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOworCQlpZiAocy0+bWF4ZGF0YV9saXN0KSB7CisJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOworCQl9CisJCWlmIChzLT5yYW5nZV90YWJsZV9saXN0KSB7CisJCQlrZnJlZShzLT5yYW5nZV90YWJsZV9saXN0KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9zZXJpYWwyMDAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9za2VsLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2tlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NzAwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2tlbC5jCkBAIC0wLDAgKzEsNjI0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3NrZWwuYworICAgIFNrZWxldG9uIGNvZGUgZm9yIGEgQ29tZWRpIGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogc2tlbAorRGVzY3JpcHRpb246IFNrZWxldG9uIGRyaXZlciwgYW4gZXhhbXBsZSBmb3IgZHJpdmVyIHdyaXRlcnMKK0RldmljZXM6CitBdXRob3I6IGRzCitVcGRhdGVkOiBNb24sIDE4IE1hciAyMDAyIDE1OjM0OjAxIC0wODAwCitTdGF0dXM6IHdvcmtzCisKK1RoaXMgZHJpdmVyIGlzIGEgZG9jdW1lbnRlZCBleGFtcGxlIG9uIGhvdyBDb21lZGkgZHJpdmVycyBhcmUKK3dyaXR0ZW4uCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgbm9uZQorKi8KKworLyoKKyAqIFRoZSBwcmV2aW91cyBibG9jayBjb21tZW50IGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZQorICogZG9jdW1lbnRhdGlvbiBpbiBDb21lZGkgYW5kIENvbWVkaWxpYi4gIFRoZSBmaWVsZHM6CisgKgorICogRHJpdmVyOiB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyCisgKiBEZXNjcmlwdGlvbjogYSBzaG9ydCBwaHJhc2UgZGVzY3JpYmluZyB0aGUgZHJpdmVyLiAgRG9uJ3QgbGlzdCBib2FyZHMuCisgKiBEZXZpY2VzOiBhIGZ1bGwgbGlzdCBvZiB0aGUgYm9hcmRzIHRoYXQgYXR0ZW1wdCB0byBiZSBzdXBwb3J0ZWQgYnkKKyAqICAgdGhlIGRyaXZlci4gIEZvcm1hdCBpcyAiKG1hbnVmYWN0dXJlcikgYm9hcmQgbmFtZSBbY29tZWRpIG5hbWVdIiwKKyAqICAgd2hlcmUgY29tZWRpX25hbWUgaXMgdGhlIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYm9hcmQuCisgKiAgIFNlZSB0aGUgY29tbWVudCBuZWFyIGJvYXJkX25hbWU6IGluIHRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUKKyAqICAgYmVsb3cuICBJZiAobWFudWZhY3R1cmVyKSBvciBbY29tZWRpIG5hbWVdIGlzIG1pc3NpbmcsIHRoZSBwcmV2aW91cworICogICB2YWx1ZSBpcyB1c2VkLgorICogQXV0aG9yOiB5b3UKKyAqIFVwZGF0ZWQ6IGRhdGUgd2hlbiB0aGUgX2RvY3VtZW50YXRpb25fIHdhcyBsYXN0IHVwZGF0ZWQuICBVc2UgJ2RhdGUgLVInCisgKiAgIHRvIGdldCBhIHZhbHVlIGZvciB0aGlzLgorICogU3RhdHVzOiBhIG9uZS13b3JkIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0dXMuICBWYWxpZCB2YWx1ZXMgYXJlOgorICogICB3b3JrcyAtIGRyaXZlciB3b3JrcyBjb3JyZWN0bHkgb24gbW9zdCBib2FyZHMgc3VwcG9ydGVkLCBhbmQKKyAqICAgICBwYXNzZXMgY29tZWRpX3Rlc3QuCisgKiAgIHVua25vd24gLSB1bmtub3duLiAgVXN1YWxseSBwdXQgdGhlcmUgYnkgZHMuCisgKiAgIGV4cGVyaW1lbnRhbCAtIG1heSBub3Qgd29yayBpbiBhbnkgcGFydGljdWxhciByZWxlYXNlLiAgQXV0aG9yCisgKiAgICAgcHJvYmFibHkgd2FudHMgYXNzaXN0YW5jZSB0ZXN0aW5nIGl0LgorICogICBiaXRyb3R0ZW4gLSBkcml2ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZSBpbiBhIGxvbmcgdGltZSwgcHJvYmFibHkKKyAqICAgICBkb2Vzbid0IHdvcmssIGFuZCBwcm9iYWJseSBpcyBtaXNzaW5nIHN1cHBvcnQgZm9yIHNpZ25pZmljYW50CisgKiAgICAgQ29tZWRpIGludGVyZmFjZSBmZWF0dXJlcy4KKyAqICAgdW50ZXN0ZWQgLSBhdXRob3IgcHJvYmFibHkgd3JvdGUgaXQgImJsaW5kIiwgYW5kIGlzIGJlbGlldmVkIHRvCisgKiAgICAgd29yaywgYnV0IG5vIGNvbmZpcm1hdGlvbi4KKyAqCisgKiBUaGVzZSBoZWFkZXJzIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUsIGFuZCBhbnkgY29tbWVudHMKKyAqIHlvdSB3aXNoIHRvIHNheSBhYm91dCB0aGUgZHJpdmVyLiAgVGhlIGNvbW1lbnQgYXJlYSBpcyB0aGUgcGxhY2UKKyAqIHRvIHB1dCBhbnkga25vd24gYnVncywgbGltaXRhdGlvbnMsIHVuc3VwcG9ydGVkIGZlYXR1cmVzLCBzdXBwb3J0ZWQKKyAqIGNvbW1hbmQgdHJpZ2dlcnMsIHdoZXRoZXIgb3Igbm90IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQgb24gcGFydGljdWxhcgorICogc3ViZGV2aWNlcywgZXRjLgorICoKKyAqIFNvbWV3aGVyZSBpbiB0aGUgY29tbWVudCBzaG91bGQgYmUgaW5mb3JtYXRpb24gYWJvdXQgY29uZmlndXJhdGlvbgorICogb3B0aW9ucyB0aGF0IGFyZSB1c2VkIHdpdGggY29tZWRpX2NvbmZpZy4KKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4JCS8qIGZvciBQQ0kgZGV2aWNlcyAqLworCisvKiBJbWFnaW5hcnkgcmVnaXN0ZXJzIGZvciB0aGUgaW1hZ2luYXJ5IGJvYXJkICovCisKKyNkZWZpbmUgU0tFTF9TSVpFIDAKKworI2RlZmluZSBTS0VMX1NUQVJUX0FJX0NPTlYJMAorI2RlZmluZSBTS0VMX0FJX1JFQUQJCTAKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgdHdvIGltYWdpbmFyeSBib2FyZHMuICBEZXNjcmliaW5nIHRoZQorICogYm9hcmRzIGluIHRoaXMgd2F5IGlzIG9wdGlvbmFsLCBhbmQgY29tcGxldGVseSBkcml2ZXItZGVwZW5kZW50LgorICogU29tZSBkcml2ZXJzIHVzZSBhcnJheXMgc3VjaCBhcyB0aGlzLCBvdGhlciBkbyBub3QuCisgKi8KK3N0cnVjdCBza2VsX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBhaV9jaGFuczsKKwlpbnQgYWlfYml0czsKKwlpbnQgaGF2ZV9kaW87Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNrZWxfYm9hcmQgc2tlbF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInNrZWwtMTAwIiwKKwkgICAgICBhaV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkic2tlbC0yMDAiLAorCSAgICAgIGFpX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgaGF2ZV9kaW86MCwKKwkJfSwKK307CisKKy8qIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLiAgU2hvdWxkCisgKiBvbmx5IGJlIHVzZWQgZm9yIFBDSSBhbmQgSVNBLVBuUCBkZXZpY2VzICovCisvKiBQbGVhc2UgYWRkIHlvdXIgUENJIHZlbmRvciBJRCB0byBjb21lZGlkZXYuaCwgYW5kIGl0IHdpbGwgYmUgZm9yd2FyZGVkCisgKiB1cHN0cmVhbS4gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TS0VMIDB4ZGFmZQorc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNrZWxfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9TS0VMLCAweDAxMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX1NLRUwsIDB4MDIwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2tlbF9wY2lfdGFibGUpOworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBza2VsX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBza2VsX3ByaXZhdGUgeworCisJaW50IGRhdGE7CisKKwkvKiB3b3VsZCBiZSB1c2VmdWwgZm9yIGEgUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCisJLyogVXNlZCBmb3IgQU8gcmVhZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07Cit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHNrZWxfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgc2tlbF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBza2VsX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3NrZWwgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHVtbXkiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnNrZWxfYXR0YWNoLAorICAgICAgZGV0YWNoOnNrZWxfZGV0YWNoLAorLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGlmIHlvdSBhcmUKKyAqIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgSVNBIFBuUCBvciBQQ0kgY2FyZCAqLworCS8qIE1vc3QgZHJpdmVycyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgdHlwZXMgb2YgYm9hcmRzIGJ5CisJICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKwkgKiBpbiBza2VsX2JvYXJkc1tdIGFib3ZlLiAgTm90ZSB0aGF0IHRoZSBlbGVtZW50ICduYW1lJworCSAqIHdhcyBmaXJzdCBpbiB0aGUgc3RydWN0dXJlIC0tIENvbWVkaSB1c2VzIHRoaXMgZmFjdCB0bworCSAqIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlIGJvYXJkIHdpdGhvdXQga25vd2luZyBhbnkgZGV0YWlscworCSAqIGFib3V0IHRoZSBzdHJ1Y3R1cmUgZXhjZXB0IGZvciBpdHMgbGVuZ3RoLgorCSAqIFdoZW4gYSBkZXZpY2UgaXMgYXR0YWNoZWQgKGJ5IGNvbWVkaV9jb25maWcpLCB0aGUgbmFtZQorCSAqIG9mIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdG8gQ29tZWRpLCBhbmQgQ29tZWRpIHRyaWVzIHRvCisJICogbWF0Y2ggaXQgYnkgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBib2FyZCBuYW1lcy4gIElmCisJICogdGhlcmUgaXMgYSBtYXRjaCwgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgaXMgcHV0CisJICogaW50byBkZXYtPmJvYXJkX3B0ciBhbmQgZHJpdmVyLT5hdHRhY2goKSBpcyBjYWxsZWQuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlc2UgYXJlIG5vdCBuZWNlc3NhcnkgaWYgeW91IGNhbiBkZXRlcm1pbmUKKwkgKiB0aGUgdHlwZSBvZiBib2FyZCBpbiBzb2Z0d2FyZS4gIElTQSBQblAsIFBDSSwgYW5kIFBDTUNJQQorCSAqIGRldmljZXMgYXJlIHN1Y2ggYm9hcmRzLgorCSAqLworICAgICAgYm9hcmRfbmFtZTomc2tlbF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHNrZWxfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihza2VsX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHNrZWxfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBza2VsX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHNrZWxfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2tlbF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBza2VsX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2tlbF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2tlbF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBza2VsX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCk7CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBza2VsX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCXByaW50aygiY29tZWRpJWQ6IHNrZWw6ICIsIGRldi0+bWlub3IpOworCisvKgorICogSWYgeW91IGNhbiBwcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiBhIHNlcmllcworICogaXQgaXMsIHRoaXMgaXMgdGhlIHBsYWNlIHRvIGRvIGl0LiAgT3RoZXJ3aXNlLCBkZXYtPmJvYXJkX3B0cgorICogc2hvdWxkIGFscmVhZHkgYmUgaW5pdGlhbGl6ZWQuCisgKi8KKwkvKiBkZXYtPmJvYXJkX3B0ciA9IHNrZWxfcHJvYmUoZGV2LCBpdCk7ICovCisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3Qgc2tlbF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGRldi0+cmVhZF9zdWJkZXY9czsgKi8KKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCS8qIHdlIHN1cHBvcnQgc2luZ2xlLWVuZGVkIChncm91bmQpIGFuZCBkaWZmZXJlbnRpYWwgKi8KKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0RJRkY7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haV9jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCXMtPmxlbl9jaGFubGlzdCA9IDE2OwkvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGNoYW5saXN0IGxlbmd0aCB0aGF0CisJCQkJICAgdGhlIGJvYXJkIGNhbiBoYW5kbGUgKi8KKwlzLT5pbnNuX3JlYWQgPSBza2VsX2FpX3JpbnNuOworLyoKKyogICAgICAgcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKyogICAgICAgcy0+ZG9fY21kID0gc2tlbF9haV9jbWQ7CisqLworCXMtPmRvX2NtZHRlc3QgPSBza2VsX2FpX2NtZHRlc3Q7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCXMtPmluc25fd3JpdGUgPSBza2VsX2FvX3dpbnNuOworCXMtPmluc25fcmVhZCA9IHNrZWxfYW9fcmluc247CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwlpZiAodGhpc2JvYXJkLT5oYXZlX2RpbykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IDE2OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gc2tlbF9kaW9faW5zbl9iaXRzOworCQlzLT5pbnNuX2NvbmZpZyA9IHNrZWxfZGlvX2luc25fY29uZmlnOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBza2VsX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBza2VsOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAiaW5zdHJ1Y3Rpb25zIiByZWFkL3dyaXRlIGRhdGEgaW4gIm9uZS1zaG90IiBvciAic29mdHdhcmUtdHJpZ2dlcmVkIgorICogbW9kZS4KKyAqLworc3RhdGljIGludCBza2VsX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgaTsKKwl1bnNpZ25lZCBpbnQgZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJLyogYSB0eXBpY2FsIHByb2dyYW1taW5nIHNlcXVlbmNlICovCisKKwkvKiB3cml0ZSBjaGFubmVsIHRvIG11bHRpcGxleGVyICovCisJLyogb3V0dyhjaGFuLGRldi0+aW9iYXNlICsgU0tFTF9NVVgpOyAqLworCisJLyogZG9uJ3Qgd2FpdCBmb3IgbXV4IHRvIHNldHRsZSAqLworCisJLyogY29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQkvKiBvdXR3KDAsZGV2LT5pb2Jhc2UgKyBTS0VMX0NPTlZFUlQpOyAqLworCisjZGVmaW5lIFRJTUVPVVQgMTAwCisJCS8qIHdhaXQgZm9yIGNvbnZlcnNpb24gdG8gZW5kICovCisJCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJCXN0YXR1cyA9IDE7CisJCQkvKiBzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBTS0VMX1NUQVRVUyk7ICovCisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IFRJTUVPVVQpIHsKKwkJCS8qIHJ0X3ByaW50aygpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgcHJpbnRrKCkKKwkJCSAqIHdoZW5ldmVyIHRoZSBjb2RlIGNhbiBiZSBjYWxsZWQgZnJvbSByZWFsLXRpbWUuICovCisJCQlydF9wcmludGsoInRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQkvKiByZWFkIGRhdGEgKi8KKwkJLyogZCA9IGludyhkZXYtPmlvYmFzZSArIFNLRUxfQUlfREFUQSk7ICovCisJCWQgPSAwOworCisJCS8qIG1hbmdsZSB0aGUgZGF0YSBhcyBuZWNlc3NhcnkgKi8KKwkJZCBePSAxIDw8ICh0aGlzYm9hcmQtPmFpX2JpdHMgLSAxKTsKKworCQlkYXRhW25dID0gZDsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHNrZWxfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRUQJMTAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKyNkZWZpbmUgTUlOX1NQRUVECTEwMDAwMDAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzaG91bGQgYmUgbGV2ZWwvZWRnZSwgaGkvbG8gc3BlY2lmaWNhdGlvbiBoZXJlICovCisJCS8qIHNob3VsZCBzcGVjaWZ5IG11bHRpcGxlIGV4dGVybmFsIHRyaWdnZXJzICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gOSkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDk7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgTUFYX1NQRUVEKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gTUFYX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiBNSU5fU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNSU5fU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2VlIGFib3ZlICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gOSkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDk7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoY21kLT5zdG9wX2FyZyA+IDB4MDBmZmZmZmYpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAweDAwZmZmZmZmOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlza2VsX25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCXNrZWxfbnNfdG9fdGltZXIoJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCByZXF1aXJlIGEgcGFydGljdWxhciBmb3JtLCB0aGlzIGlzIGp1c3QKKyAqIHdoYXQgaGFwcGVucyB0byBiZSB1c2VkIGluIHNvbWUgb2YgdGhlIGRyaXZlcnMuICBJdCBzaG91bGQKKyAqIGNvbnZlcnQgbnMgbmFub3NlY29uZHMgdG8gYSBjb3VudGVyIHZhbHVlIHN1aXRhYmxlIGZvciBwcm9ncmFtbWluZworICogdGhlIGRldmljZS4gIEFsc28sIGl0IHNob3VsZCBhZGp1c3QgbnMgc28gdGhhdCBpdCBjb29yZXNwb25kcyB0bworICogdGhlIGFjdHVhbCB0aW1lIHRoYXQgdGhlIGRldmljZSB3aWxsIHVzZS4gKi8KK3N0YXRpYyBpbnQgc2tlbF9uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCBpbnQgcm91bmQpCit7CisJLyogdHJpdmlhbCB0aW1lciAqLworCS8qIGlmIHlvdXIgdGltaW5nIGlzIGRvbmUgdGhyb3VnaCB0d28gY2FzY2FkZWQgdGltZXJzLCB0aGUKKwkgKiBpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKCkgZnVuY3Rpb24gaW4gODI1My5oIGNhbiBiZQorCSAqIHZlcnkgaGVscGZ1bC4gIFRoZXJlIGFyZSBhbHNvIGk4MjU0X2xvYWQoKSBhbmQgaTgyNTRfbW1fbG9hZCgpCisJICogd2hpY2ggY2FuIGJlIHVzZWQgdG8gbG9hZCB2YWx1ZXMgaW50byB0aGUgdWJpcXVpdG91cyA4MjU0IGNvdW50ZXJzCisJICovCisKKwlyZXR1cm4gKm5zOworfQorCitzdGF0aWMgaW50IHNrZWxfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlwcmludGsoInNrZWxfYW9fd2luc25cbiIpOworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiBhIHR5cGljYWwgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgKi8KKwkJLyogb3V0dyhkYXRhW2ldLGRldi0+aW9iYXNlICsgU0tFTF9EQTAgKyBjaGFuKTsgKi8KKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIGk7Cit9CisKKy8qIEFPIHN1YmRldmljZXMgc2hvdWxkIGhhdmUgYSByZWFkIGluc24gYXMgd2VsbCBhcyBhIHdyaXRlIGluc24uCisgKiBVc3VhbGx5IHRoaXMgbWVhbnMgY29weWluZyBhIHZhbHVlIHN0b3JlZCBpbiBkZXZwcml2LiAqLworc3RhdGljIGludCBza2VsX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBza2VsX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhCisJICogaW4gZGF0YVsxXSwgZWFjaCBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICovCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQkvKiBXcml0ZSBvdXQgdGhlIG5ldyBkaWdpdGFsIG91dHB1dCBsaW5lcyAqLworCQkvKiBvdXR3KHMtPnN0YXRlLGRldi0+aW9iYXNlICsgU0tFTF9ESU8pOyAqLworCX0KKworCS8qIG9uIHJldHVybiwgZGF0YVsxXSBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0YWwKKwkgKiBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiAqLworCS8qIGRhdGFbMV09aW53KGRldi0+aW9iYXNlICsgU0tFTF9ESU8pOyAqLworCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCS8qIGRhdGFbMV09cy0+c3RhdGU7ICovCisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBza2VsX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gMSA8PCBjaGFuOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+KDEgPDwgY2hhbik7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT4KKwkJCWlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkvKiBvdXR3KHMtPmlvX2JpdHMsZGV2LT5pb2Jhc2UgKyBTS0VMX0RJT19DT05GSUcpOyAqLworCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfc2tlbCk7CisvKiBJZiB5b3UgYXJlIHdyaXRpbmcgYSBQQ0kgZHJpdmVyIHlvdSBzaG91bGQgdXNlIENPTUVESV9QQ0lfSU5JVENMRUFOVVAgaW5zdGVhZC4KKyovCisvKiBDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9za2VsLCBza2VsX3BjaV90YWJsZSkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjhkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jCkBAIC0wLDAgKzEsMzExIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYworICAgIGdlbmVyaWMgY29tZWRpIGRyaXZlciBmb3IgU1NWIEVtYmVkZGVkIFN5c3RlbXMnIERJTC9OZXQtUENzCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIFJvYmVydCBTY2h3ZWJlbCA8cm9iZXJ0QHNjaHdlYmVsLmRlPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogc3N2X2RucAorRGVzY3JpcHRpb246IFNTViBFbWJlZGRlZCBTeXN0ZW1zIERJTC9OZXQtUEMKK0F1dGhvcjogUm9iZXJ0IFNjaHdlYmVsIDxyb2JlcnRAc2Nod2ViZWwuZGU+CitEZXZpY2VzOiBbU1NWIEVtYmVkZGVkIFN5c3RlbXNdIERJTC9OZXQtUEMgMTQ4NiAoZG5wLTE0ODYpCitTdGF0dXM6IHVua25vd24KKyovCisKKy8qIGluY2x1ZGUgZmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisvKiBTb21lIGdsb2JhbCBkZWZpbml0aW9uczogdGhlIHJlZ2lzdGVycyBvZiB0aGUgRE5QIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBGb3IgcG9ydCBBIGFuZCBCIHRoZSBtb2RlIHJlZ2lzdGVyIGhhcyBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG91dHB1dCAgICovCisvKiBwaW5zLCB3aGVyZSBCaXQtTiA9IDAgLT4gaW5wdXQsIEJpdC1OID0gMSAtPiBvdXRwdXQuIE5vdGUgdGhhdCBiaXRzICAgICAgICovCisvKiA0IHRvIDcgY29ycmVzcG9uZCB0byBwaW4gMC4uMyBmb3IgcG9ydCBDIGRhdGEgcmVnaXN0ZXIuIEVuc3VyZSB0aGF0IGJpdHMgICovCisvKiAwLi4zIHJlbWFpbiB1bmNoYW5nZWQhIEZvciBkZXRhaWxzIGFib3V0IFBvcnQgQyBNb2RlIFJlZ2lzdGVyIHNlZSAgICAgICAgICovCisvKiB0aGUgcmVtYXJrcyBpbiBkbnBfaW5zbl9jb25maWcoKSBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQ1NDSVIgMHgyMgkJLyogQ2hpcCBTZXR1cCBhbmQgQ29udHJvbCBJbmRleCBSZWdpc3RlciAgICAgICAqLworI2RlZmluZSBDU0NEUiAweDIzCQkvKiBDaGlwIFNldHVwIGFuZCBDb250cm9sIERhdGEgUmVnaXN0ZXIgICAgICAgICovCisjZGVmaW5lIFBBTVIgIDB4YTUJCS8qIFBvcnQgQSBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFEUiAgMHhhOQkJLyogUG9ydCBBIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQk1SICAweGE0CQkvKiBQb3J0IEIgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBCRFIgIDB4YTgJCS8qIFBvcnQgQiBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUENNUiAgMHhhMwkJLyogUG9ydCBDIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQ0RSICAweGE3CQkvKiBQb3J0IEMgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN1cHBvcnRlZCBib2FyZHMgLS0tLS0tLS0gKi8KKworc3RydWN0IGRucF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWlfY2hhbnM7CisJaW50IGFpX2JpdHM7CisJaW50IGhhdmVfZGlvOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbnBfYm9hcmQgZG5wX2JvYXJkc1tdID0gewkvKiB3ZSBvbmx5IHN1cHBvcnQgb25lIEROUCAnYm9hcmQnICAgKi8KKwl7CQkJLyogdmFyaWFudCBhdCB0aGUgbW9tZW50ICAgICAgICAgICAgICovCisJICAgICAgbmFtZToJImRucC0xNDg2IiwKKwkgICAgICBhaV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9LAorfTsKKworLyogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZSAtLS0tLS0tLS0tLSAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZG5wX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGUgRE5QIGRyaXZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0cnVjdCBkbnBfcHJpdmF0ZV9kYXRhIHsKKworCS8vCit9OworCisKKy8qIFNob3J0aGFuZCBtYWNybyBmb3IgZmFzdGVyIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgZGV2cHJpdiAoKGRucF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUgd2hpY2ggZnVuY3Rpb25zICAqLworLyogdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpIHRoZSBib2FyZCwgYW5kIGFsc28gICAgICAqLworLyogYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucyB0aGUgZGV2aWNlIGNvZGUuICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uIHdlIGRlZmluZSB0aGUgQVBJIG9mIHRoaXMgZHJpdmVyLiAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGRucF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkbnBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kbnAgPSB7CisgICAgICBkcml2ZXJfbmFtZToic3N2X2RucCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZG5wX2F0dGFjaCwKKyAgICAgIGRldGFjaDpkbnBfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomZG5wX2JvYXJkc1swXS5uYW1lLAorCS8qIG9ubHkgbmVjZXNzYXJ5IGZvciBub24tUG5QIGRldnMgICAqLworICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZG5wX2JvYXJkKSwvKiBsaWtlIElTQS1QblAsIFBDSSBvciBQQ01DSUEuICAgICAgKi8KKyAgICAgIG51bV9uYW1lczpzaXplb2YoZG5wX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IGRucF9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RucCk7CisKK3N0YXRpYyBpbnQgZG5wX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBkbnBfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEF0dGFjaCBpcyBjYWxsZWQgYnkgY29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIgZm9yIGEgcGFydGljdWxhciAgKi8KKy8qIGJvYXJkLiBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheSBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgICAgICAgKi8KKy8qIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQgYWRkcmVzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBkbnBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlwcmludGsoImNvbWVkaSVkOiBkbnA6ICIsIGRldi0+bWlub3IpOworCisJLyogQXV0b3Byb2Jpbmc6IHRoaXMgc2hvdWxkIGZpbmQgb3V0IHdoaWNoIGJvYXJkIHdlIGhhdmUuIEN1cnJlbnRseSBvbmx5ICAgKi8KKwkvKiB0aGUgMTQ4NiBib2FyZCBpcyBzdXBwb3J0ZWQgYW5kIGF1dG9wcm9iaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCA6LSkgICAgICAqLworCS8vZGV2LT5ib2FyZF9wdHIgPSBkbnBfcHJvYmUoZGV2KTsKKworCS8qIEluaXRpYWxpemUgdGhlIG5hbWUgb2YgdGhlIGJvYXJkLiBXZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIiBtYWNybyBub3cuICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJLyogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuIGFsbG9jX3ByaXZhdGUoKSBpcyBhIGNvbnZlbmllbnQgICAgKi8KKwkvKiBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkbnBfcHJpdmF0ZV9kYXRhKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYSBjb252ZW5pZW50ICAgICovCisJLyogbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMjA7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkbnBfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IGRucF9kaW9faW5zbl9jb25maWc7CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCS8qIFdlIHVzZSB0aGUgSS9PIHBvcnRzIDB4MjIsMHgyMyBhbmQgMHhhMy0weGE5LCB3aGljaCBhcmUgYWx3YXlzCisJICogYWxsb2NhdGVkIGZvciB0aGUgcHJpbWFyeSA4MjU5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGFsbG9jYXRlIHRoZW0KKwkgKiBvdXJzZWx2ZXMuICovCisKKwkvKiBjb25maWd1cmUgYWxsIHBvcnRzIGFzIGlucHV0IChkZWZhdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCW91dGIoUEFNUiwgQ1NDSVIpOworCW91dGIoMHgwMCwgQ1NDRFIpOworCW91dGIoUEJNUiwgQ1NDSVIpOworCW91dGIoMHgwMCwgQ1NDRFIpOworCW91dGIoUENNUiwgQ1NDSVIpOworCW91dGIoKGluYihDU0NEUikgJiAweEFBKSwgQ1NDRFIpOworCisJcmV0dXJuIDE7CisKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gSXQgc2hvdWxkIGRlYWxsb2NhdGUgdGhlICAgICAgICAqLworLyogcmVzb3VyY2VzLiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCAgICAgICAqLworLyogc2hvdWxkIGJlIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkgICAgICAqLworLyogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlICAgICAgICAgICAgICAqLworLyogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGRucF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwkvKiBjb25maWd1cmUgYWxsIHBvcnRzIGFzIGlucHV0IChkZWZhdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCW91dGIoUEFNUiwgQ1NDSVIpOworCW91dGIoMHgwMCwgQ1NDRFIpOworCW91dGIoUEJNUiwgQ1NDSVIpOworCW91dGIoMHgwMCwgQ1NDRFIpOworCW91dGIoUENNUiwgQ1NDSVIpOworCW91dGIoKGluYihDU0NEUikgJiAweEFBKSwgQ1NDRFIpOworCisJLyogYW5ub3VuY2UgdGhhdCB3ZSBhcmUgZmluaXNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlwcmludGsoImNvbWVkaSVkOiBkbnA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBUaGUgaW5zbl9iaXRzIGludGVyZmFjZSBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiBESU8gY2hhbm5lbHMuICAgICovCisvKiBUaGUgY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSwgc28geW91ICovCisvKiBhcmUgYWJsZSB0byB1c2UgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFzIHdlbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZG5wX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CS8qIGluc24gdXNlcyBkYXRhWzBdIGFuZCBkYXRhWzFdICAgICAqLworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhIGluIGRhdGFbMV0sIGVhY2ggICAgKi8KKwkvKiBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJLyogUG9ydHMgQSBhbmQgQiBhcmUgc3RyYWlnaHQgZm9yd2FyZDogZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYW4gb3V0cHV0ICAgKi8KKwkvKiBwaW4gd2l0aCB0aGUgc2FtZSBvcmRlci4gUG9ydCBDIGlzIGRpZmZlcmVudDogYml0cyAwLi4uMyBjb3JyZXNwb25kIHRvICAqLworCS8qIGJpdHMgNC4uLjcgb2YgdGhlIG91dHB1dCByZWdpc3RlciAoUENEUikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwlpZiAoZGF0YVswXSkgeworCisJCW91dGIoUEFEUiwgQ1NDSVIpOworCQlvdXRiKChpbmIoQ1NDRFIpCisJCQkJJiB+KHU4KSAoZGF0YVswXSAmIDB4MDAwMEZGKSkKKwkJCXwgKHU4KSAoZGF0YVsxXSAmIDB4MDAwMEZGKSwgQ1NDRFIpOworCisJCW91dGIoUEJEUiwgQ1NDSVIpOworCQlvdXRiKChpbmIoQ1NDRFIpCisJCQkJJiB+KHU4KSAoKGRhdGFbMF0gJiAweDAwRkYwMCkgPj4gOCkpCisJCQl8ICh1OCkgKChkYXRhWzFdICYgMHgwMEZGMDApID4+IDgpLCBDU0NEUik7CisKKwkJb3V0YihQQ0RSLCBDU0NJUik7CisJCW91dGIoKGluYihDU0NEUikKKwkJCQkmIH4odTgpICgoZGF0YVswXSAmIDB4MEYwMDAwKSA+PiAxMikpCisJCQl8ICh1OCkgKChkYXRhWzFdICYgMHgwRjAwMDApID4+IDEyKSwgQ1NDRFIpOworCX0KKworCS8qIG9uIHJldHVybiwgZGF0YVsxXSBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0YWwgaW5wdXQgbGluZXMuICAgICAgICovCisJb3V0YihQQURSLCBDU0NJUik7CisJZGF0YVswXSA9IGluYihDU0NEUik7CisJb3V0YihQQkRSLCBDU0NJUik7CisJZGF0YVswXSArPSBpbmIoQ1NDRFIpIDw8IDg7CisJb3V0YihQQ0RSLCBDU0NJUik7CisJZGF0YVswXSArPSAoKGluYihDU0NEUikgJiAweEYwKSA8PCAxMik7CisKKwlyZXR1cm4gMjsKKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBDb25maWd1cmUgdGhlIGRpcmVjdGlvbiBvZiB0aGUgYmlkaXJlY3Rpb25hbCBkaWdpdGFsIGkvbyBwaW5zLiBjaGFuc3BlYyAgICovCisvKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkIGFuZCBkYXRhWzBdIGNvbnRhaW5zIGVpdGhlciAgICAgICAgICAgICovCisvKiBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZG5wX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwl1OCByZWdpc3Rlcl9idWZmZXI7CisKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvKiByZWR1Y2VzIGNoYW5zcGVjIHRvIGxvd2VyIDE2IGJpdHMgKi8KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKGluYihDU0NEUikgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJLyogVGVzdDogd2hpY2ggcG9ydCBkb2VzIHRoZSBjaGFubmVsIGJlbG9uZyB0bz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCS8qIFdlIGhhdmUgdG8gcGF5IGF0dGVudGlvbiB3aXRoIHBvcnQgQzogdGhpcyBpcyB0aGUgbWVhbmluZyBvZiBQQ01SOiAgICAgICovCisJLyogQml0IGluIFBDTVI6ICAgICAgICAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBDb3JyZXNwb25kaW5nIHBvcnQgQyBwaW46IGQgMyBkIDIgZCAxIGQgMCAgIGQ9IGRvbid0IHRvdWNoICAgICAgICAgICAgICAqLworCisJaWYgKChjaGFuID49IDApICYmIChjaGFuIDw9IDcpKSB7CisJCS8qIHRoaXMgaXMgcG9ydCBBICovCisJCW91dGIoUEFNUiwgQ1NDSVIpOworCX0gZWxzZSBpZiAoKGNoYW4gPj0gOCkgJiYgKGNoYW4gPD0gMTUpKSB7CisJCS8qIHRoaXMgaXMgcG9ydCBCICovCisJCWNoYW4gLT0gODsKKwkJb3V0YihQQk1SLCBDU0NJUik7CisJfSBlbHNlIGlmICgoY2hhbiA+PSAxNikgJiYgKGNoYW4gPD0gMTkpKSB7CisJCS8qIHRoaXMgaXMgcG9ydCBDOyBtdWx0aXBsaWNhdGlvbiB3aXRoIDIgYnJpbmdzIGJpdHMgaW50byBjb3JyZWN0ICAgICAgICAqLworCQkvKiBwb3NpdGlvbiBmb3IgUENNUiEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJY2hhbiAtPSAxNjsKKwkJY2hhbiAqPSAyOworCQlvdXRiKFBDTVIsIENTQ0lSKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZWFkICdvbGQnIGRpcmVjdGlvbiBvZiB0aGUgcG9ydCBhbmQgc2V0IGJpdHMgKG91dD0xLCBpbj0wKSAgICAgICAgICAgICAqLworCXJlZ2lzdGVyX2J1ZmZlciA9IGluYihDU0NEUik7CisJaWYgKGRhdGFbMF0gPT0gQ09NRURJX09VVFBVVCkgeworCQlyZWdpc3Rlcl9idWZmZXIgfD0gKDEgPDwgY2hhbik7CisJfSBlbHNlIHsKKwkJcmVnaXN0ZXJfYnVmZmVyICY9IH4oMSA8PCBjaGFuKTsKKwl9CisJb3V0YihyZWdpc3Rlcl9idWZmZXIsIENTQ0RSKTsKKworCXJldHVybiAxOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VuaW94eDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDNiMTExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VuaW94eDUuYwpAQCAtMCwwICsxLDUxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIGNvbWVkaS9kcml2ZXJzL3VuaW94eDUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIERyaXZlciBmb3IgRmFzdHdlbCBVTklPeHgtNSAoYW5hbG9nIGFuZCBkaWdpdGFsIGkvbykgYm9hcmRzLiAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBLcnVjaGluaW4gRGFuaWlsIChhc2dhcmQpIFthc2dhcmRAZXRlcnNvZnQucnVdICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UgICAgICAgICAgICAgICAgKgorICogIENvcHlyaWdodCAoQykgMTk5OCwyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgKgorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgKgorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgKgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgKgorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgKgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgKgorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgKgorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisKK0RyaXZlcjogdW5pb3h4NQorRGVzY3JpcHRpb246IERyaXZlciBmb3IgRmFzdHdlbCBVTklPeHgtNSAoYW5hbG9nIGFuZCBkaWdpdGFsIGkvbykgYm9hcmRzLgorQXV0aG9yOiBLcnVjaGluaW4gRGFuaWlsIChhc2dhcmQpIDxhc2dhcmRAZXRlcnNvZnQucnU+CitTdGF0dXM6IHVua25vd24KK1VwZGF0ZWQ6IDIwMDYtMTAtMDkKK0RldmljZXM6IFtGYXN0d2VsXSBVTklPeHgtNSAodW5pb3h4NSksCisKKyBUaGlzIGNhcmQgc3VwcG9ydHMgZGlnaXRhbCBhbmQgYW5hbG9nIEkvTy4gSXQgd3JpdHRlbiBmb3IgZzAxCisgc3ViZGV2aWNlcyBvbmx5LgorIGNoYW5uZWxzIHJhbmdlOiAwIC4uIDIzIGRpbyBjaGFubmVscworIGFuZCAwIC4uIDExIGFuYWxvZyBtb2R1bGVzIHJhbmdlCisgRHVyaW5nIGF0dGFjaGluZyB1bmlveHg1IG1vZHVsZSBkaXNwbGF5cyBtb2R1bGVzIGlkZW50aWZpZXJzCisgKHNlZSBkbWVzZyBhZnRlciBjb21lZGlfY29uZmlnKSBpbiBmb3JtYXQ6CisgfCBbbW9kdWxlX251bWJlcl0gbW9kdWxlX2lkIHwKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ1bmlveHg1IgorI2RlZmluZSBVTklPWFg1X1NJWkUgMHgxMAorI2RlZmluZSBVTklPWFg1X1NVQkRFVl9CQVNFIDB4QTAwMAkvKiBiYXNlIGFkZHIgb2YgZmlyc3Qgc3ViZGV2ICovCisjZGVmaW5lIFVOSU9YWDVfU1VCREVWX09ERFMgMHg0MDAKKworLyogbW9kdWxlcyB0eXBlcyAqLworI2RlZmluZSBNT0RVTEVfRElHSVRBTCAwCisjZGVmaW5lIE1PRFVMRV9PVVRQVVRfTUFTSyAweDgwCS8qIGFuYWxvZyBpbnB1dC9vdXRwdXQgKi8KKworLyogY29uc3RhbnRzIGZvciBkaWdpdGFsIGkvbyAqLworI2RlZmluZSBVTklPWFg1X05VTV9PRl9DSEFOUyAyNAorCisvKiBjb25zdGFudHMgZm9yIGFuYWxvZyBpL28gKi8KKyNkZWZpbmUgVHhCRSAgMHgxMAkJLyogdHJhbnNtaXQgYnVmZmVyIGVuYWJsZSAqLworI2RlZmluZSBSeENBICAweDIwCQkvKiAxIHJlY2VpdmUgY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworI2RlZmluZSBSeDJDQSAweDQwCQkvKiAyIHJlY2VpdmUgY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworI2RlZmluZSBSeDRDQSAweDgwCQkvKiA0IHJlY2VpdmUgY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworCisvKiBieXRlcyBtYXNrIGVycm9ycyAqLworI2RlZmluZSBSeDJDQV9FUlJfTUFTSyAweDA0CS8qIDIgYnl0ZXMgcmVjZWl2aW5nIGVycm9yICovCisjZGVmaW5lIFJ4NENBX0VSUl9NQVNLIDB4MDgJLyogNCBieXRlcyByZWNlaXZpbmcgZXJyb3IgKi8KKworLyogY2hhbm5lbCBtb2RlcyAqLworI2RlZmluZSBBTExfMl9JTlBVVCAgMAkJLyogY29uZmlnIGFsbCBkaWdpdGFsIGNoYW5uZWxzIHRvIGlucHV0ICovCisjZGVmaW5lIEFMTF8yX09VVFBVVCAxCQkvKiBjb25maWcgYWxsIGRpZ2l0YWwgY2hhbm5lbHMgdG8gb3V0cHV0ICovCisKKy8qICdwcml2YXRlJyBzdHJ1Y3R1cmUgZm9yIGVhY2ggc3ViZGV2aWNlICovCitzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgeworCWludCB1c3BfaW9iYXNlOworCXVuc2lnbmVkIGNoYXIgdXNwX21vZHVsZV90eXBlWzEyXTsJLyogMTIgbW9kdWxlcy4gZWFjaCBjYW4gYmUgNzBMIG9yIDczTCAqLworCXVuc2lnbmVkIGNoYXIgdXNwX2V4dHJhX2RhdGFbMTJdWzRdOwkvKiBmb3Igc2F2aW5nIHByZXZpb3VzIHdyaXR0ZW4gdmFsdWUgZm9yIGFuYWxvZyBtb2R1bGVzICovCisJdW5zaWduZWQgY2hhciB1c3BfcHJldl93cl92YWxbM107CS8qIHByZXZpb3VzIHdyaXR0ZW4gdmFsdWUgKi8KKwl1bnNpZ25lZCBjaGFyIHVzcF9wcmV2X2NuX3ZhbFszXTsJLyogcHJldmlvdXMgY2hhbm5lbCB2YWx1ZSAqLworfTsKKworc3RhdGljIGludCB1bmlveHg1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHVuaW94eDVfc3ViZGV2X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldiwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgdW5pb3h4NV9zdWJkZXZfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHVuaW94eDVfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCB1bmlveHg1X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IF9fdW5pb3h4NV9zdWJkZXZfaW5pdChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldiwgaW50IHN1YmRldl9pb2Jhc2UsCisJaW50IG1pbm9yKTsKK3N0YXRpYyBpbnQgX191bmlveHg1X2RpZ2l0YWxfd3JpdGUoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpOworc3RhdGljIGludCBfX3VuaW94eDVfZGlnaXRhbF9yZWFkKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgdW5zaWduZWQgaW50ICogZGF0YSwKKwlpbnQgY2hhbm5lbCwgaW50IG1pbm9yKTsKKy8vc3RhdGljIHZvaWQgX191bmlveHg1X2RpZ2l0YWxfY29uZmlnKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiogdXNwLCBpbnQgbW9kZSk7CitzdGF0aWMgaW50IF9fdW5pb3h4NV9hbmFsb2dfd3JpdGUoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpOworc3RhdGljIGludCBfX3VuaW94eDVfYW5hbG9nX3JlYWQoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpOworc3RhdGljIGludCBfX3VuaW94eDVfZGVmaW5lX2NoYW5fb2Zmc2V0KGludCBjaGFuX251bSk7CitzdGF0aWMgdm9pZCBfX3VuaW94eDVfYW5hbG9nX2NvbmZpZyhzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIGludCBjaGFubmVsKTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIHVuaW94eDVfZHJpdmVyID0geworICAgICAgZHJpdmVyX25hbWU6RFJJVkVSX05BTUUsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6dW5pb3h4NV9hdHRhY2gsCisgICAgICBkZXRhY2g6dW5pb3h4NV9kZXRhY2gKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUCh1bmlveHg1X2RyaXZlcik7CisKK3N0YXRpYyBpbnQgdW5pb3h4NV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IGlvYmFzZSwgaSwgbl9zdWJkOworCWludCBpZCwgbnVtLCBiYTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCisJZGV2LT5ib2FyZF9uYW1lID0gRFJJVkVSX05BTUU7CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJaW9iYXNlICs9IFVOSU9YWDVfU1VCREVWX0JBU0U7CisKKwkvKiBkZWZpbmluZyBudW1iZXIgb2Ygc3ViZGV2aWNlcyBhbmQgZ2V0dGluZyB0aGV5IHR5cGVzIChpdCBtdXN0IGJlICdnMDEnKSAgKi8KKwlmb3IgKGkgPSBuX3N1YmQgPSAwLCBiYSA9IGlvYmFzZTsgaSA8IDQ7IGkrKywgYmEgKz0gVU5JT1hYNV9TVUJERVZfT0REUykgeworCQlpZCA9IGluYihiYSArIDB4RSk7CisJCW51bSA9IGluYihiYSArIDB4Rik7CisKKwkJaWYgKGlkICE9ICdnJyB8fCBudW0gIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCW5fc3ViZCsrOworCX0KKworCS8qIHVuaW94eDUgY2FuIGhhcyBmcm9tIHR3byB0byBmb3VyIHN1YmRldmljZXMgKi8KKwlpZiAobl9zdWJkIDwgMikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJ5b3VyIGNhcmQgbXVzdCBoYXMgYXQgbGVhc3QgMiAnZzAxJyBzdWJkZXZpY2VzXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogaW5pdGlhbGl6aW5nIGVhY2ggb2YgZm9yIHNhbWUgc3ViZGV2aWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBuX3N1YmQ7IGkrKywgaW9iYXNlICs9IFVOSU9YWDVfU1VCREVWX09ERFMpIHsKKwkJaWYgKF9fdW5pb3h4NV9zdWJkZXZfaW5pdCgmZGV2LT5zdWJkZXZpY2VzW2ldLCBpb2Jhc2UsCisJCQkJZGV2LT5taW5vcikgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVuaW94eDVfc3ViZGV2X3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICp1c3AgPSBzdWJkZXYtPnByaXZhdGU7CisJaW50IGNoYW5uZWwsIHR5cGU7CisKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdHlwZSA9IHVzcC0+dXNwX21vZHVsZV90eXBlW2NoYW5uZWwgLyAyXTsJLyogZGVmaW5pbmcgbW9kdWxlIHR5cGUoYW5hbG9nIG9yIGRpZ2l0YWwpICovCisKKwlpZiAodHlwZSA9PSBNT0RVTEVfRElHSVRBTCkgeworCQlpZiAoIV9fdW5pb3h4NV9kaWdpdGFsX3JlYWQodXNwLCBkYXRhLCBjaGFubmVsLCBkZXYtPm1pbm9yKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlpZiAoIV9fdW5pb3h4NV9hbmFsb2dfcmVhZCh1c3AsIGRhdGEsIGNoYW5uZWwsIGRldi0+bWlub3IpKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHVuaW94eDVfc3ViZGV2X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldiwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqdXNwID0gc3ViZGV2LT5wcml2YXRlOworCWludCBjaGFubmVsLCB0eXBlOworCisJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXR5cGUgPSB1c3AtPnVzcF9tb2R1bGVfdHlwZVtjaGFubmVsIC8gMl07CS8qIGRlZmluaW5nIG1vZHVsZSB0eXBlKGFuYWxvZyBvciBkaWdpdGFsKSAqLworCisJaWYgKHR5cGUgPT0gTU9EVUxFX0RJR0lUQUwpIHsKKwkJaWYgKCFfX3VuaW94eDVfZGlnaXRhbF93cml0ZSh1c3AsIGRhdGEsIGNoYW5uZWwsIGRldi0+bWlub3IpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCWlmICghX191bmlveHg1X2FuYWxvZ193cml0ZSh1c3AsIGRhdGEsIGNoYW5uZWwsIGRldi0+bWlub3IpKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAxOworfQorCisvKiBmb3IgZGlnaXRhbCBtb2R1bGVzIG9ubHkgKi8KK3N0YXRpYyBpbnQgdW5pb3h4NV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbm5lbF9vZmZzZXQsIGZsYWdzLCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIHR5cGU7CisJc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICp1c3AgPSBzdWJkZXYtPnByaXZhdGU7CisJaW50IG1hc2sgPSAxIDw8IChjaGFubmVsICYgMHgwNyk7CisKKwl0eXBlID0gdXNwLT51c3BfbW9kdWxlX3R5cGVbY2hhbm5lbCAvIDJdOworCisJaWYgKHR5cGUgIT0gTU9EVUxFX0RJR0lUQUwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IGNoYW5uZWwgY29uZmlndXJhdGlvbiBhY2Nlc3NpYmxlIG9ubHkgZm9yIGRpZ2l0YWwgbW9kdWxlc1xuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChjaGFubmVsX29mZnNldCA9IF9fdW5pb3h4NV9kZWZpbmVfY2hhbl9vZmZzZXQoY2hhbm5lbCkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogdW5kZWZpbmVkIGNoYW5uZWwgJWQuIGNoYW5uZWwgcmFuZ2UgaXMgMCAuLiAyM1xuIiwKKwkJCWRldi0+bWlub3IsIGNoYW5uZWwpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogZ2V0cyBwcmV2aW91c2x5IHdyaXR0ZW4gdmFsdWUgKi8KKwlmbGFncyA9IHVzcC0+dXNwX3ByZXZfY25fdmFsW2NoYW5uZWxfb2Zmc2V0IC0gMV07CisKKwlzd2l0Y2ggKCpkYXRhKSB7CisJY2FzZSBDT01FRElfSU5QVVQ6CisJCWZsYWdzICY9IH5tYXNrOworCQlicmVhazsKKwljYXNlIENPTUVESV9PVVRQVVQ6CisJCWZsYWdzIHw9IG1hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVua25vd24gZmxhZ1xuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlwKKwkgKiBzZXRzIGNoYW5uZWxzIGJ1ZmZlciB0byAxKGFmdGVyIHRoaXMgd2UgYXJlIGFsbG93ZWQgdG8gKgorCSAqIGNoYW5nZSBjaGFubmVsIHR5cGUgb24gaW5wdXQgb3Igb3V0cHV0KSAgICAgICAgICAgICAgICAqCisJIFwqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCW91dGIoMSwgdXNwLT51c3BfaW9iYXNlICsgMCk7CisJb3V0YihmbGFncywgdXNwLT51c3BfaW9iYXNlICsgY2hhbm5lbF9vZmZzZXQpOwkvKiBjaGFuZ2VzIHR5cGUgb2YgX29uZV8gY2hhbm5lbCAqLworCW91dGIoMCwgdXNwLT51c3BfaW9iYXNlICsgMCk7CS8qIHNldHMgY2hhbm5lbHMgYmFuayB0byAwKGFsbG93cyBkaXJlY3RseSBpbnB1dC9vdXRwdXQpICovCisJdXNwLT51c3BfcHJldl9jbl92YWxbY2hhbm5lbF9vZmZzZXQgLSAxXSA9IGZsYWdzOwkvKiBzYXZlcyB3cml0dGVuIHZhbHVlICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bmlveHg1X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2OworCXN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqdXNwOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyBpKyspIHsKKwkJc3ViZGV2ID0gJmRldi0+c3ViZGV2aWNlc1tpXTsKKwkJdXNwID0gc3ViZGV2LT5wcml2YXRlOworCQlyZWxlYXNlX3JlZ2lvbih1c3AtPnVzcF9pb2Jhc2UsIFVOSU9YWDVfU0laRSk7CisJCWtmcmVlKHN1YmRldi0+cHJpdmF0ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGluaXRpYWxpemluZyBzdWJkZXZpY2Ugd2l0aCBnaXZlbiBhZGRyZXNzICovCitzdGF0aWMgaW50IF9fdW5pb3h4NV9zdWJkZXZfaW5pdChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldiwgaW50IHN1YmRldl9pb2Jhc2UsCisJaW50IG1pbm9yKQoreworCXN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqdXNwOworCWludCBpLCB0bywgbmRlZl9mbGFnID0gMDsKKworCWlmICghcmVxdWVzdF9yZWdpb24oc3ViZGV2X2lvYmFzZSwgVU5JT1hYNV9TSVpFLCBEUklWRVJfTkFNRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogSS9PIHBvcnQgY29uZmxpY3RcbiIsIG1pbm9yKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKCh1c3AgPSAoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICopIGt6YWxsb2Moc2l6ZW9mKCp1c3ApLAorCQkJCUdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVyb3JyISAtLT4gb3V0IG9mIG1lbW9yeSFcbiIsIG1pbm9yKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXVzcC0+dXNwX2lvYmFzZSA9IHN1YmRldl9pb2Jhc2U7CisJcHJpbnRrKCJjb21lZGklZDogfCIsIG1pbm9yKTsKKworCS8qIGRlZmluaW5nIG1vZHVsZXMgdHlwZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCQl0byA9IDEwMDAwOworCisJCV9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHVzcCwgaSAqIDIpOworCQlvdXRiKGkgKyAxLCBzdWJkZXZfaW9iYXNlICsgNSk7CS8qIHNlbmRzIGNoYW5uZWwgbnVtYmVyIHRvIGNhcmQgKi8KKwkJb3V0YignSCcsIHN1YmRldl9pb2Jhc2UgKyA2KTsJLyogcmVxdWVzdHMgRUVQUk9NIHdvcmxkICovCisJCXdoaWxlICghKGluYihzdWJkZXZfaW9iYXNlICsgMCkgJiBUeEJFKSkgOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJb3V0YigwLCBzdWJkZXZfaW9iYXNlICsgNik7CisKKwkJLyogd2FpdHMgd2hpbGUgcmVhZGluZyBvZiB0d28gYnl0ZXMgd2lsbCBiZSBhbGxvd2VkICovCisJCXdoaWxlICghKGluYihzdWJkZXZfaW9iYXNlICsgMCkgJiBSeDJDQSkpIHsKKwkJCWlmICgtLXRvIDw9IDApIHsKKwkJCQluZGVmX2ZsYWcgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG5kZWZfZmxhZykgeworCQkJdXNwLT51c3BfbW9kdWxlX3R5cGVbaV0gPSAwOworCQkJbmRlZl9mbGFnID0gMDsKKwkJfSBlbHNlCisJCQl1c3AtPnVzcF9tb2R1bGVfdHlwZVtpXSA9IGluYihzdWJkZXZfaW9iYXNlICsgNik7CisKKwkJcHJpbnRrKCIgWyVkXSAweCUwMnggfCIsIGksIHVzcC0+dXNwX21vZHVsZV90eXBlW2ldKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwl9CisKKwlwcmludGsoIlxuIik7CisKKwkvKiBpbml0aWFsIHN1YmRldmljZSBmb3IgZGlnaXRhbCBvciBhbmFsb2cgaS9vICovCisJc3ViZGV2LT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXN1YmRldi0+cHJpdmF0ZSA9IHVzcDsKKwlzdWJkZXYtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzdWJkZXYtPm5fY2hhbiA9IFVOSU9YWDVfTlVNX09GX0NIQU5TOworCXN1YmRldi0+bWF4ZGF0YSA9IDB4RkZGOworCXN1YmRldi0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzdWJkZXYtPmluc25fcmVhZCA9IHVuaW94eDVfc3ViZGV2X3JlYWQ7CisJc3ViZGV2LT5pbnNuX3dyaXRlID0gdW5pb3h4NV9zdWJkZXZfd3JpdGU7CisJc3ViZGV2LT5pbnNuX2NvbmZpZyA9IHVuaW94eDVfaW5zbl9jb25maWc7CS8qIGZvciBkaWdpdGFsIG1vZHVsZXMgb25seSEhISAqLworCisJcHJpbnRrKCJzdWJkZXZpY2UgY29uZmlndXJlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3VuaW94eDVfZGlnaXRhbF93cml0ZShzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcikKK3sKKwlpbnQgY2hhbm5lbF9vZmZzZXQsIHZhbDsKKwlpbnQgbWFzayA9IDEgPDwgKGNoYW5uZWwgJiAweDA3KTsKKworCWlmICgoY2hhbm5lbF9vZmZzZXQgPSBfX3VuaW94eDVfZGVmaW5lX2NoYW5fb2Zmc2V0KGNoYW5uZWwpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IHVuZGVmaW5lZCBjaGFubmVsICVkLiBjaGFubmVsIHJhbmdlIGlzIDAgLi4gMjNcbiIsCisJCQltaW5vciwgY2hhbm5lbCk7CisJCXJldHVybiAwOworCX0KKworCXZhbCA9IHVzcC0+dXNwX3ByZXZfd3JfdmFsW2NoYW5uZWxfb2Zmc2V0IC0gMV07CS8qIGdldHRpbmcgcHJldmlvdXMgd3JpdHRlbiB2YWx1ZSAqLworCisJaWYgKCpkYXRhKQorCQl2YWwgfD0gbWFzazsKKwllbHNlCisJCXZhbCAmPSB+bWFzazsKKworCW91dGIodmFsLCB1c3AtPnVzcF9pb2Jhc2UgKyBjaGFubmVsX29mZnNldCk7CisJdXNwLT51c3BfcHJldl93cl92YWxbY2hhbm5lbF9vZmZzZXQgLSAxXSA9IHZhbDsJLyogc2F2aW5nIG5ldyB3cml0dGVuIHZhbHVlICovCisKKwlyZXR1cm4gMTsKK30KKworLyogZnVuY3Rpb24gZm9yIGRpZ2l0YWwgcmVhZGluZyAqLworc3RhdGljIGludCBfX3VuaW94eDVfZGlnaXRhbF9yZWFkKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgdW5zaWduZWQgaW50ICogZGF0YSwKKwlpbnQgY2hhbm5lbCwgaW50IG1pbm9yKQoreworCWludCBjaGFubmVsX29mZnNldCwgbWFzayA9IDEgPDwgKGNoYW5uZWwgJiAweDA3KTsKKworCWlmICgoY2hhbm5lbF9vZmZzZXQgPSBfX3VuaW94eDVfZGVmaW5lX2NoYW5fb2Zmc2V0KGNoYW5uZWwpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IHVuZGVmaW5lZCBjaGFubmVsICVkLiBjaGFubmVsIHJhbmdlIGlzIDAgLi4gMjNcbiIsCisJCQltaW5vciwgY2hhbm5lbCk7CisJCXJldHVybiAwOworCX0KKworCSpkYXRhID0gaW5iKHVzcC0+dXNwX2lvYmFzZSArIGNoYW5uZWxfb2Zmc2V0KTsKKwkqZGF0YSAmPSBtYXNrOworCisJaWYgKGNoYW5uZWxfb2Zmc2V0ID4gMSkKKwkJY2hhbm5lbCAtPSAyIDw8IGNoYW5uZWxfb2Zmc2V0OwkvKiB0aGlzIG9wZXJhdGlvbiBpcyBjcmVhdGVkIGZvciBjb3JyZWN0IHJlYWRlZCB2YWx1ZSB0byAwIG9yIDEgKi8KKworCSpkYXRhID4+PSBjaGFubmVsOworCXJldHVybiAxOworfQorCisjaWYgMAkJCQkvKiBub3QgdXNlZD8gKi8KK3N0YXRpYyB2b2lkIF9fdW5pb3h4NV9kaWdpdGFsX2NvbmZpZyhzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIGludCBtb2RlKQoreworCWludCBpLCBtYXNrOworCisJbWFzayA9IChtb2RlID09IEFMTF8yX09VVFBVVCkgPyAweEZGIDogMHgwMDsKKwlwcmludGsoIkNPTUVESTogbW9kZSA9ICVkXG4iLCBtYXNrKTsKKworCW91dGIoMSwgdXNwLT51c3BfaW9iYXNlICsgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlvdXRiKG1hc2ssIHVzcC0+dXNwX2lvYmFzZSArIGkpOworCisJb3V0YigwLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fdW5pb3h4NV9hbmFsb2dfd3JpdGUoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpCit7CisJaW50IG1vZHVsZSwgaTsKKworCW1vZHVsZSA9IGNoYW5uZWwgLyAyOwkvKiBkZWZpbmlnIG1vZHVsZSBudW1iZXIoMCAuLiAxMSkgKi8KKwlpID0gKGNoYW5uZWwgJSAyKSA8PCAxOwkvKiBkZXBlbmRzIG9uIHR5cGUgb2YgY2hhbm5lbCAoQSBvciBCKSAqLworCisJLyogZGVmaW5pbmcgaWYgZ2l2ZW4gbW9kdWxlIGNhbiB3b3JrIG9uIG91dHB1dCAqLworCWlmICghKHVzcC0+dXNwX21vZHVsZV90eXBlW21vZHVsZV0gJiBNT0RVTEVfT1VUUFVUX01BU0spKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiBtb2R1bGUgaW4gcG9zaXRpb24gJWQgd2l0aCBpZCAweCUweCBpcyBmb3IgaW5wdXQgb25seSFcbiIsCisJCQltaW5vciwgbW9kdWxlLCB1c3AtPnVzcF9tb2R1bGVfdHlwZVttb2R1bGVdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJX191bmlveHg1X2FuYWxvZ19jb25maWcodXNwLCBjaGFubmVsKTsKKwkvKiBzYXZpbmcgbWlub3IgYnl0ZSAqLworCXVzcC0+dXNwX2V4dHJhX2RhdGFbbW9kdWxlXVtpKytdID0gKHVuc2lnbmVkIGNoYXIpKCpkYXRhICYgMHgwMEZGKTsKKwkvKiBzYXZpbmcgbWFqb3IgYnl0ZSAqLworCXVzcC0+dXNwX2V4dHJhX2RhdGFbbW9kdWxlXVtpXSA9ICh1bnNpZ25lZCBjaGFyKSgoKmRhdGEgJiAweEZGMDApID4+IDgpOworCisJLy93aGlsZSghKChpbmIodXNwLT51c3BfaW9iYXNlICsgMCkpICYgVHhCRSkpOworCW91dGIobW9kdWxlICsgMSwgdXNwLT51c3BfaW9iYXNlICsgNSk7CS8qIHNlbmRpbmcgbW9kdWxlIG51bWJlciB0byBjYXJkKDEgLi4gMTIpICovCisJb3V0YignVycsIHVzcC0+dXNwX2lvYmFzZSArIDYpOwkvKiBzZW5kcyAoVylyaXRlIGNvbW1hbmQgdG8gbW9kdWxlICovCisKKwkvKiBzZW5kaW5nIGZvciBieXRlcyB0byBtb2R1bGUob25lIGJ5dGUgcGVyIGN5Y2xlIGl0ZXJhdGlvbikgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXdoaWxlICghKChpbmIodXNwLT51c3BfaW9iYXNlICsgMCkpICYgVHhCRSkpIDsJLyogd2FpdHMgd2hpbGUgd3JpdHRpbmcgd2lsbCBiZSBhbGxvd2VkICovCisJCW91dGIodXNwLT51c3BfZXh0cmFfZGF0YVttb2R1bGVdW2ldLCB1c3AtPnVzcF9pb2Jhc2UgKyA2KTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX3VuaW94eDVfYW5hbG9nX3JlYWQoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpCit7CisJaW50IG1vZHVsZV9ubywgcmVhZF9jaDsKKwljaGFyIGNvbnRyb2w7CisKKwltb2R1bGVfbm8gPSBjaGFubmVsIC8gMjsKKwlyZWFkX2NoID0gY2hhbm5lbCAlIDI7CS8qIGRlcGVuZCBvbiB0eXBlIG9mIGNoYW5uZWwgKEEgb3IgQikgKi8KKworCS8qIGRlZmluaW5nIGlmIGdpdmVuIG1vZHVsZSBjYW4gd29yayBvbiBpbnB1dCAqLworCWlmICh1c3AtPnVzcF9tb2R1bGVfdHlwZVttb2R1bGVfbm9dICYgTU9EVUxFX09VVFBVVF9NQVNLKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiBtb2R1bGUgaW4gcG9zaXRpb24gJWQgd2l0aCBpZCAweCUwMnggaXMgZm9yIG91dHB1dCBvbmx5IiwKKwkJCW1pbm9yLCBtb2R1bGVfbm8sIHVzcC0+dXNwX21vZHVsZV90eXBlW21vZHVsZV9ub10pOworCQlyZXR1cm4gMDsKKwl9CisKKwlfX3VuaW94eDVfYW5hbG9nX2NvbmZpZyh1c3AsIGNoYW5uZWwpOworCW91dGIobW9kdWxlX25vICsgMSwgdXNwLT51c3BfaW9iYXNlICsgNSk7CS8qIHNlbmRzIG1vZHVsZSBudW1iZXIgdG8gY2FyZCgxIC4uIDEyKSAqLworCW91dGIoJ1YnLCB1c3AtPnVzcF9pb2Jhc2UgKyA2KTsJLyogc2VuZHMgdG8gbW9kdWxlIChWKWVyaWZ5IGNvbW1hbmQgKi8KKwljb250cm9sID0gaW5iKHVzcC0+dXNwX2lvYmFzZSk7CS8qIGdldCBjb250cm9sIHJlZ2lzdGVyIGJ5dGUgKi8KKworCS8qIHdhaXRzIHdoaWxlIHJlYWRpbmcgZm91ciBieXRlcyB3aWxsIGJlIGFsbG93ZWQgKi8KKwl3aGlsZSAoISgoY29udHJvbCA9IGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBSeDRDQSkpIDsKKworCS8qIGlmIGZvdXIgYnl0ZXMgcmVhZGRpbmcgZXJyb3Igb2NjdXJzIC0gcmV0dXJuIDAoZmFsc2UpICovCisJaWYgKChjb250cm9sICYgUng0Q0FfRVJSX01BU0spKSB7CisJCXByaW50aygiQ09NRURJOiA0IGJ5dGVzIGVycm9yXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHJlYWRfY2gpCisJCSpkYXRhID0gaW53KHVzcC0+dXNwX2lvYmFzZSArIDYpOwkvKiBjaGFubmVsIEIgKi8KKwllbHNlCisJCSpkYXRhID0gaW53KHVzcC0+dXNwX2lvYmFzZSArIDQpOwkvKiBjaGFubmVsIEEgKi8KKworCXJldHVybiAxOworfQorCisvKiBjb25maWd1cmUgY2hhbm5lbHMgZm9yIGFuYWxvZyBpL28gKGV2ZW4gdG8gb3V0cHV0LCBvZGQgdG8gaW5wdXQpICovCitzdGF0aWMgdm9pZCBfX3VuaW94eDVfYW5hbG9nX2NvbmZpZyhzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIGludCBjaGFubmVsKQoreworCWludCBjaGFuX2EsIGNoYW5fYiwgY29uZiwgY2hhbm5lbF9vZmZzZXQ7CisKKwljaGFubmVsX29mZnNldCA9IF9fdW5pb3h4NV9kZWZpbmVfY2hhbl9vZmZzZXQoY2hhbm5lbCk7CisJY29uZiA9IHVzcC0+dXNwX3ByZXZfY25fdmFsW2NoYW5uZWxfb2Zmc2V0IC0gMV07CisJY2hhbl9hID0gY2hhbl9iID0gMTsKKworCS8qIHNldHRpbmcgY2hhbm5lbCBBIGFuZCBjaGFubmVsIEIgbWFzayAqLworCWlmIChjaGFubmVsICUgMiA9PSAwKSB7CisJCWNoYW5fYSA8PD0gY2hhbm5lbCAmIDB4MDc7CisJCWNoYW5fYiA8PD0gKGNoYW5uZWwgKyAxKSAmIDB4MDc7CisJfSBlbHNlIHsKKwkJY2hhbl9hIDw8PSAoY2hhbm5lbCAtIDEpICYgMHgwNzsKKwkJY2hhbl9iIDw8PSBjaGFubmVsICYgMHgwNzsKKwl9CisKKwljb25mIHw9IGNoYW5fYTsJCS8qIGV2ZW4gY2hhbm5lbCBvdCBvdXRwdXQgKi8KKwljb25mICY9IH5jaGFuX2I7CS8qIG9kZCBjaGFubmVsIHRvIGlucHV0ICovCisKKwlvdXRiKDEsIHVzcC0+dXNwX2lvYmFzZSArIDApOworCW91dGIoY29uZiwgdXNwLT51c3BfaW9iYXNlICsgY2hhbm5lbF9vZmZzZXQpOworCW91dGIoMCwgdXNwLT51c3BfaW9iYXNlICsgMCk7CisKKwl1c3AtPnVzcF9wcmV2X2NuX3ZhbFtjaGFubmVsX29mZnNldCAtIDFdID0gY29uZjsKK30KKworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlwKKyAqIHRoaXMgZnVuY3Rpb24gZGVmaW5lcyBpZiB0aGUgZ2l2ZW4gY2hhbm5lbCBudW1iZXIgICoKKyAqIGVudGVycyBpbiBkZWZhdWx0IG51bWVyaWMgaW50ZXJzcGFjZShmcm9tIDAgdG8gMjMpICoKKyAqIGFuZCBpdCByZXR1cm5zIGFkZHJlc3Mgb2Zmc2V0IGZvciB1c2FnZSBuZWVkZWQgICAgICoKKyAqIGNoYW5uZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK1wqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK3N0YXRpYyBpbnQgX191bmlveHg1X2RlZmluZV9jaGFuX29mZnNldChpbnQgY2hhbl9udW0pCit7CisKKwlpZiAoY2hhbl9udW0gPCAwIHx8IGNoYW5fbnVtID4gMjMpCisJCXJldHVybiAtMTsKKworCXJldHVybiAoY2hhbl9udW0gPj4gMykgKyAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCmluZGV4IDM1MTM4MjUuLmQwYjU5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKQEAgLTEsNCArMSw0IEBACi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4xIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMiIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQmVybmQgUG9yciwgQmVybmRQb3JyQGYycy5jb20iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJTdGlybGluZy9JVEwgVVNCLURVWCAtLSBCZXJuZC5Qb3JyQGYycy5jb20iCiAvKgpAQCAtMjUsOCArMjUsOCBAQAogRGVzY3JpcHRpb246IFVuaXZlcnNpdHkgb2YgU3RpcmxpbmcgVVNCIERBUSAmIElOQ0lURSBUZWNobm9sb2d5IExpbWl0ZWQKIERldmljZXM6IFtJVExdIFVTQi1EVVggKHVzYmR1eC5vKQogQXV0aG9yOiBCZXJuZCBQb3JyIDxCZXJuZFBvcnJAZjJzLmNvbT4KLVVwZGF0ZWQ6IDI1IE5vdiAyMDA3Ci1TdGF0dXM6IFRlc3RpbmcKK1VwZGF0ZWQ6IDggRGVjIDIwMDgKK1N0YXR1czogU3RhYmxlCiBDb25maWd1cmF0aW9uIG9wdGlvbnM6CiAgIFlvdSBoYXZlIHRvIHVwbG9hZCBmaXJtd2FyZSB3aXRoIHRoZSAtaSBvcHRpb24uIFRoZQogICBmaXJtd2FyZSBpcyB1c3VhbGx5IGluc3RhbGxlZCB1bmRlciAvdXNyL3NoYXJlL3VzYiBvcgpAQCAtNzksNiArNzksNyBAQAogICogMS4yOiAgYWRkZWQgUFdNIHN1cG9ydCB2aWEgRVA0CiAgKiAyLjA6ICBQV00gc2VlbXMgdG8gYmUgc3RhYmxlIGFuZCBpcyBub3QgaW50ZXJmZXJpbmcgd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zCiAgKiAyLjE6ICBjaGFuZ2VkIFBXTSBBUEkKKyAqIDIuMjogIGFkZGVkIGZpcm13YXJlIGtlcm5lbCByZXF1ZXN0IHRvIGZpeCBhbiB1ZGV2IHByb2JsZW0KICAqCiAgKi8KIApAQCAtOTQsNiArOTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIApAQCAtMjEyLDcgKzIxNCw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGNvbWVkaSBjb25zdGFudHMgKi8KLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VzYmR1eF9haV9yYW5nZSA9IHsgNCwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VzYmR1eF9haV9yYW5nZSA9IHsgNCwgewogCQkJQklQX1JBTkdFKDQuMDk2KSwKIAkJCUJJUF9SQU5HRSg0LjA5NiAvIDIpLAogCQkJVU5JX1JBTkdFKDQuMDk2KSwKQEAgLTIyMCw3ICsyMjIsNyBAQAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VzYmR1eF9hb19yYW5nZSA9IHsgMiwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VzYmR1eF9hb19yYW5nZSA9IHsgMiwgewogCQkJQklQX1JBTkdFKDQuMDk2KSwKIAkJCVVOSV9SQU5HRSg0LjA5NiksCiAJfQpAQCAtMjUxLDcgKzI1Myw3IEBACiAJLyogcHdtLXRyYW5zZmVyIGhhbmRsaW5nICovCiAJc3RydWN0IHVyYiAqdXJiUHdtOwogCS8qIFBXTSBwZXJpb2QgKi8KLQlsc2FtcGxfdCBwd21QZXJpb2Q7CisJdW5zaWduZWQgaW50IHB3bVBlcmlvZDsKIAkvKiBQV00gaW50ZXJuYWwgZGVsYXkgZm9yIHRoZSBHUElGIGluIHRoZSBGWDIgKi8KIAlpbnQ4X3QgcHdtRGVsYXk7CiAJLyogc2l6ZSBvZiB0aGUgUFdNIGJ1ZmZlciB3aGljaCBob2xkcyB0aGUgYml0IHBhdHRlcm4gKi8KQEAgLTI2Nyw3ICsyNjksNyBAQAogCS8qIGludGVyZmFjZSBzdHJ1Y3R1cmUgaW4gMi42ICovCiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAkvKiBjb21lZGkgZGV2aWNlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRleHQgKi8KLQljb21lZGlfZGV2aWNlICpjb21lZGlkZXY7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmNvbWVkaWRldjsKIAkvKiBpcyBpdCBVU0JfU1BFRURfSElHSCBvciBub3Q/ICovCiAJc2hvcnQgaW50IGhpZ2hfc3BlZWQ7CiAJLyogYXN5bmNocm9ub3VzIGNvbW1hbmQgaXMgcnVubmluZyAqLwpAQCAtMzYxLDcgKzM2Myw3IEBACiAgKiBUaGlzIHdpbGwgY2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiBvcGVyYXRpb24uCiAgKiBUaGlzIGlzIGNhbGxlZCBieSBjb21lZGkgYnV0IG5ldmVyIGZyb20gaW5zaWRlIHRoZSBkcml2ZXIuCiAgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHVzYmR1eF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWI7CiAJaW50IHJlcyA9IDA7CkBAIC0zOTAsOCArMzkyLDggQEAKIHsKIAlpbnQgaSwgZXJyLCBuOwogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViOwotCWNvbWVkaV9kZXZpY2UgKnRoaXNfY29tZWRpZGV2OwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKnRoaXNfY29tZWRpZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJLyogdGhlIGNvbnRleHQgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzdWJkZXZpY2UgKi8KIAl0aGlzX2NvbWVkaWRldiA9IHVyYi0+Y29udGV4dDsKQEAgLTU1OSw3ICs1NjEsNyBAQAogfQogCiAvKiBmb3JjZSB1bmxpbmssIGlzIGNhbGxlZCBieSBjb21lZGkgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X2FvX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHVzYmR1eF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAJaW50IHJlcyA9IDA7CkBAIC01ODQsOCArNTg2LDggQEAKIAlpbnQgaSwgcmV0OwogCWludDhfdCAqZGF0YXA7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWI7Ci0JY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAkvKiB0aGUgY29udGV4dCB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHN1YmRldmljZSAqLwogCXRoaXNfY29tZWRpZGV2ID0gdXJiLT5jb250ZXh0OwpAQCAtNjU0LDcgKzY1Niw3IEBACiAJCSgodWludDhfdCAqKSAodXJiLT50cmFuc2Zlcl9idWZmZXIpKVswXSA9CiAJCQlzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbjsKIAkJZm9yIChpID0gMDsgaSA8IHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOyBpKyspIHsKLQkJCXNhbXBsX3QgdGVtcDsKKwkJCXNob3J0IHRlbXA7CiAJCQlpZiAoaSA+PSBOVU1PVVRDSEFOTkVMUykKIAkJCQlicmVhazsKIApAQCAtNzE4LDMxICs3MjAsMjkgQEAKIAlpbnQgZXJyY29kZSA9IDA7CiAJdWludDhfdCBsb2NhbF90cmFuc2Zlcl9idWZmZXJbMTZdOwogCi0JaWYgKHVzYmR1eHN1Yi0+cHJvYmVkKSB7Ci0JCS8qIDdmOTIgdG8gemVybyAqLwotCQlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAwOwotCQllcnJjb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYmR1eHN1Yi0+dXNiZGV2LAotCQkJLyogY3JlYXRlIGEgcGlwZSBmb3IgYSBjb250cm9sIHRyYW5zZmVyICovCi0JCQl1c2Jfc25kY3RybHBpcGUodXNiZHV4c3ViLT51c2JkZXYsIDApLAotCQkJLyogYlJlcXVlc3QsICJGaXJtd2FyZSIgKi8KLQkJCVVTQkRVWFNVQl9GSVJNV0FSRSwKLQkJCS8qIGJtUmVxdWVzdFR5cGUgKi8KLQkJCVZFTkRPUl9ESVJfT1VULAotCQkJLyogVmFsdWUgKi8KLQkJCVVTQkRVWFNVQl9DUFVDUywKLQkJCS8qIEluZGV4ICovCi0JCQkweDAwMDAsCi0JCQkvKiBhZGRyZXNzIG9mIHRoZSB0cmFuc2ZlciBidWZmZXIgKi8KLQkJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKLQkJCS8qIExlbmd0aCAqLwotCQkJMSwKLQkJCS8qIFRpbWVvdXQgKi8KLQkJCUVaVElNRU9VVCk7Ci0JCWlmIChlcnJjb2RlIDwgMCkgewotCQkJZGV2X2VycigmdXNiZHV4c3ViLT5pbnRlcmZhY2UtPmRldiwKLQkJCQkiY29tZWRpXzogY29udHJvbCBtc2cgZmFpbGVkIChzdGFydClcbiIpOwotCQkJcmV0dXJuIGVycmNvZGU7Ci0JCX0KKwkvKiA3ZjkyIHRvIHplcm8gKi8KKwlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAwOworCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4c3ViLT51c2JkZXYsCisJCQkJICAvKiBjcmVhdGUgYSBwaXBlIGZvciBhIGNvbnRyb2wgdHJhbnNmZXIgKi8KKwkJCQkgIHVzYl9zbmRjdHJscGlwZSh1c2JkdXhzdWItPnVzYmRldiwgMCksCisJCQkJICAvKiBiUmVxdWVzdCwgIkZpcm13YXJlIiAqLworCQkJCSAgVVNCRFVYU1VCX0ZJUk1XQVJFLAorCQkJCSAgLyogYm1SZXF1ZXN0VHlwZSAqLworCQkJCSAgVkVORE9SX0RJUl9PVVQsCisJCQkJICAvKiBWYWx1ZSAqLworCQkJCSAgVVNCRFVYU1VCX0NQVUNTLAorCQkJCSAgLyogSW5kZXggKi8KKwkJCQkgIDB4MDAwMCwKKwkJCQkgIC8qIGFkZHJlc3Mgb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlciAqLworCQkJCSAgbG9jYWxfdHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgLyogTGVuZ3RoICovCisJCQkJICAxLAorCQkJCSAgLyogVGltZW91dCAqLworCQkJCSAgRVpUSU1FT1VUKTsKKwlpZiAoZXJyY29kZSA8IDApIHsKKwkJZGV2X2VycigmdXNiZHV4c3ViLT5pbnRlcmZhY2UtPmRldiwKKwkJCSJjb21lZGlfOiBjb250cm9sIG1zZyBmYWlsZWQgKHN0YXJ0KVxuIik7CisJCXJldHVybiBlcnJjb2RlOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTc1MiwyOCArNzUyLDI3IEBACiAJaW50IGVycmNvZGUgPSAwOwogCiAJdWludDhfdCBsb2NhbF90cmFuc2Zlcl9idWZmZXJbMTZdOwotCWlmICh1c2JkdXhzdWItPnByb2JlZCkgewotCQkvKiA3ZjkyIHRvIG9uZSAqLwotCQlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAxOwotCQllcnJjb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYmR1eHN1Yi0+dXNiZGV2LAotCQkJdXNiX3NuZGN0cmxwaXBlKHVzYmR1eHN1Yi0+dXNiZGV2LCAwKSwKLQkJCS8qIGJSZXF1ZXN0LCAiRmlybXdhcmUiICovCi0JCQlVU0JEVVhTVUJfRklSTVdBUkUsCi0JCQkvKiBibVJlcXVlc3RUeXBlICovCi0JCQlWRU5ET1JfRElSX09VVCwKLQkJCS8qIFZhbHVlICovCi0JCQlVU0JEVVhTVUJfQ1BVQ1MsCi0JCQkvKiBJbmRleCAqLwotCQkJMHgwMDAwLCBsb2NhbF90cmFuc2Zlcl9idWZmZXIsCi0JCQkvKiBMZW5ndGggKi8KLQkJCTEsCi0JCQkvKiBUaW1lb3V0ICovCi0JCQlFWlRJTUVPVVQpOwotCQlpZiAoZXJyY29kZSA8IDApIHsKLQkJCWRldl9lcnIoJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXYsCi0JCQkJImNvbWVkaV86IGNvbnRyb2wgbXNnIGZhaWxlZCAoc3RvcClcbiIpOwotCQkJcmV0dXJuIGVycmNvZGU7Ci0JCX0KKworCS8qIDdmOTIgdG8gb25lICovCisJbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzBdID0gMTsKKwllcnJjb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYmR1eHN1Yi0+dXNiZGV2LAorCQkJCSAgdXNiX3NuZGN0cmxwaXBlKHVzYmR1eHN1Yi0+dXNiZGV2LCAwKSwKKwkJCQkgIC8qIGJSZXF1ZXN0LCAiRmlybXdhcmUiICovCisJCQkJICBVU0JEVVhTVUJfRklSTVdBUkUsCisJCQkJICAvKiBibVJlcXVlc3RUeXBlICovCisJCQkJICBWRU5ET1JfRElSX09VVCwKKwkJCQkgIC8qIFZhbHVlICovCisJCQkJICBVU0JEVVhTVUJfQ1BVQ1MsCisJCQkJICAvKiBJbmRleCAqLworCQkJCSAgMHgwMDAwLCBsb2NhbF90cmFuc2Zlcl9idWZmZXIsCisJCQkJICAvKiBMZW5ndGggKi8KKwkJCQkgIDEsCisJCQkJICAvKiBUaW1lb3V0ICovCisJCQkJICBFWlRJTUVPVVQpOworCWlmIChlcnJjb2RlIDwgMCkgeworCQlkZXZfZXJyKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAorCQkJImNvbWVkaV86IGNvbnRyb2wgbXNnIGZhaWxlZCAoc3RvcClcbiIpOworCQlyZXR1cm4gZXJyY29kZTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC03ODQsMTMgKzc4Myw3IEBACiB7CiAJaW50IGVycmNvZGU7CiAKLQlpZiAodXNiZHV4c3ViLT5wcm9iZWQpIHsKLQkJZGV2X2RiZygmdXNiZHV4c3ViLT5pbnRlcmZhY2UtPmRldiwKLQkJCSJjb21lZGklZDogdXNiZHV4OiB1cGxvYWRpbmcgJWQgYnl0ZXMiCi0JCQkiIHRvIGFkZHIgJWQsIGZpcnN0IGJ5dGU9JWQuXG4iLAotCQkJdXNiZHV4c3ViLT5jb21lZGlkZXYtPm1pbm9yLCBsZW4sCi0JCQlzdGFydEFkZHIsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSk7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4c3ViLT51c2JkZXYsCisJZXJyY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2JkdXhzdWItPnVzYmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZSh1c2JkdXhzdWItPnVzYmRldiwgMCksCiAJCQkvKiBicmVxdWVzdCwgZmlybXdhcmUgKi8KIAkJCVVTQkRVWFNVQl9GSVJNV0FSRSwKQEAgLTgwNiwxNiArNzk5LDEyIEBACiAJCQlsZW4sCiAJCQkvKiB0aW1lb3V0ICovCiAJCQlFWlRJTUVPVVQpOwotCQlkZXZfZGJnKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAotCQkJImNvbWVkaV86IHJlc3VsdD0lZFxuIiwgZXJyY29kZSk7Ci0JCWlmIChlcnJjb2RlIDwgMCkgewotCQkJZGV2X2VycigmdXNiZHV4c3ViLT5pbnRlcmZhY2UtPmRldiwKLQkJCQkiY29tZWRpXzogdXBsb2FkIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gZXJyY29kZTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIG5vIGRldmljZSBvbiB0aGUgYnVzIGZvciB0aGlzIGluZGV4ICovCi0JCXJldHVybiAtRUZBVUxUOworCWRldl9kYmcoJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXYsCisJCSJjb21lZGlfOiByZXN1bHQ9JWRcbiIsIGVycmNvZGUpOworCWlmIChlcnJjb2RlIDwgMCkgeworCQlkZXZfZXJyKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAorCQkiY29tZWRpXzogdXBsb2FkIGZhaWxlZFxuIik7CisJCXJldHVybiBlcnJjb2RlOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTkwNyw4ICs4OTYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9haV9jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgY29tZWRpX2NtZCAqY21kKQorc3RhdGljIGludCB1c2JkdXhfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMCwgdG1wLCBpOwogCXVuc2lnbmVkIGludCB0bXBUaW1lcjsKQEAgLTExMjcsNyArMTExNiw3IEBACiAJcmV0dXJuIC1FRkFVTFQ7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X2FpX2ludHRyaWcoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAorc3RhdGljIGludCB1c2JkdXhfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCSAgICAgdW5zaWduZWQgaW50IHRyaWdudW0pCiB7CiAJaW50IHJldDsKQEAgLTExNzEsOSArMTE2MCw5IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X2FpX2NtZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHVzYmR1eF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBjaGFuLCByYW5nZTsKIAlpbnQgaSwgcmV0OwogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwpAQCAtMTI4NywxMSArMTI3NiwxMSBAQAogfQogCiAvKiBNb2RlIDAgaXMgdXNlZCB0byBnZXQgYSBzaW5nbGUgY29udmVyc2lvbiBvbiBkZW1hbmQgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X2FpX2luc25fcmVhZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBpOwotCWxzYW1wbF90IG9uZSA9IDA7CisJdW5zaWduZWQgaW50IG9uZSA9IDA7CiAJaW50IGNoYW4sIHJhbmdlOwogCWludCBlcnI7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CkBAIC0xMzQ4LDggKzEzMzcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGFuYWxvZyBvdXQgKi8KIAotc3RhdGljIGludCB1c2JkdXhfYW9faW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGk7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKQEAgLTEzNzAsOCArMTM1OSw4IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X2FvX2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCWNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGksIGVycjsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMTQyMCw3ICsxNDA5LDcgQEAKIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYW9faW50dHJpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdGF0aWMgaW50IHVzYmR1eF9hb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgICB1bnNpZ25lZCBpbnQgdHJpZ251bSkKIHsKIAlpbnQgcmV0OwpAQCAtMTQ2MSw4ICsxNDUwLDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYW9fY21kdGVzdChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgIGNvbWVkaV9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDAsIHRtcDsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKQEAgLTE2MDAsOSArMTU4OSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X2FvX2NtZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHVzYmR1eF9hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBjaGFuLCBnYWluOwogCWludCBpLCByZXQ7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CkBAIC0xNzA4LDggKzE2OTcsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIApAQCAtMTczOSw4ICsxNzI4LDggQEAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwpAQCAtMTc4Niw4ICsxNzc1LDggQEAKIH0KIAogLyogcmVhZHMgdGhlIDQgY291bnRlcnMsIG9ubHkgdHdvIGFyZSB1c2VkIGp1c3Qgbm93ICovCi1zdGF0aWMgaW50IHVzYmR1eF9jb3VudGVyX3JlYWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgdXNiZHV4X2NvdW50ZXJfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgY2hhbiA9IGluc24tPmNoYW5zcGVjOwpAQCAtMTgyMCw4ICsxODA5LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfY291bnRlcl93cml0ZShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfY291bnRlcl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgZXJyOwpAQCAtMTg1MCw4ICsxODM5LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfY291bnRlcl9jb25maWcoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9jb3VudGVyX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJLyogbm90aGluZyB0byBkbyBzbyBmYXIgKi8KIAlyZXR1cm4gMjsKQEAgLTE4OTQsNyArMTg4Myw3IEBACiB9CiAKIC8qIGZvcmNlIHVubGluayAtIGlzIGNhbGxlZCBieSBjb21lZGkgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X3B3bV9jYW5jZWwoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCB1c2JkdXhfcHdtX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgcmVzID0gMDsKQEAgLTE5MTYsOCArMTkwNSw4IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YjsKLQljb21lZGlfZGV2aWNlICp0aGlzX2NvbWVkaWRldjsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICp0aGlzX2NvbWVkaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCS8qIHByaW50ayhLRVJOX0RFQlVHICJQV006IElSUVxuIik7ICovCiAKQEAgLTIwMDcsOCArMTk5Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X3B3bV9wZXJpb2QoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICBsc2FtcGxfdCBwZXJpb2QpCitzdGF0aWMgaW50IHVzYmR1eF9wd21fcGVyaW9kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcGVyaW9kKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCWludCBmeDJkZWxheSA9IDI1NTsKQEAgLTIwMzUsNyArMjAyNCw3IEBACiB9CiAKIC8qIGlzIGNhbGxlZCBmcm9tIGluc24gc28gdGhlcmUncyBubyBuZWVkIHRvIGRvIGFsbCB0aGUgc2FuaXR5IGNoZWNrcyAqLwotc3RhdGljIGludCB1c2JkdXhfcHdtX3N0YXJ0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X3B3bV9zdGFydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlpbnQgcmV0LCBpOwogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwpAQCAtMjA2Nyw4ICsyMDU2LDggQEAKIH0KIAogLyogZ2VuZXJhdGVzIHRoZSBiaXQgcGF0dGVybiBmb3IgUFdNIHdpdGggdGhlIG9wdGlvbmFsIHNpZ24gYml0ICovCi1zdGF0aWMgaW50IHVzYmR1eF9wd21fcGF0dGVybihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgICBpbnQgY2hhbm5lbCwgbHNhbXBsX3QgdmFsdWUsIGxzYW1wbF90IHNpZ24pCitzdGF0aWMgaW50IHVzYmR1eF9wd21fcGF0dGVybihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBzaWduKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCWludCBpLCBzemJ1ZjsKQEAgLTIxMDgsOCArMjA5Nyw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X3B3bV93cml0ZShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfcHdtX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCkBAIC0yMTMzLDE2ICsyMTIyLDE2IEBACiAJCQkJICBkYXRhWzBdLCAwKTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfcHdtX3JlYWQoY29tZWRpX2RldmljZSAqeDEsIGNvbWVkaV9zdWJkZXZpY2UgKngyLAotCQkJICAgY29tZWRpX2luc24gKngzLCBsc2FtcGxfdCAqeDQpCitzdGF0aWMgaW50IHVzYmR1eF9wd21fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqeDEsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICp4MiwKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqeDMsIHVuc2lnbmVkIGludCAqeDQpCiB7CiAJLyogbm90IG5lZWRlZCAqLwogCXJldHVybiAtRUlOVkFMOwogfTsKIAogLyogc3dpdGNoZXMgb24vb2ZmIFBXTSAqLwotc3RhdGljIGludCB1c2JkdXhfcHdtX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgdXNiZHV4X3B3bV9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCXN3aXRjaCAoZGF0YVswXSkgewpAQCAtMjI5MiwxMyArMjI4MSwxMyBAQAogI2RlZmluZSBGSVJNV0FSRV9NQVhfTEVOIDB4MjAwMAogCiAvKiB0YWtlbiBmcm9tIERhdmlkIEJyb3duZWxsJ3MgZnhsb2FkIGFuZCBhZGp1c3RlZCBmb3IgdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBpbnQgcmVhZF9maXJtd2FyZShzdHJ1Y3QgdXNiZHV4c3ViICp1c2JkdXhzdWIsIHZvaWQgKmZpcm13YXJlUHRyLAorc3RhdGljIGludCByZWFkX2Zpcm13YXJlKHN0cnVjdCB1c2JkdXhzdWIgKnVzYmR1eHN1YiwgY29uc3Qgdm9pZCAqZmlybXdhcmVQdHIsCiAJCQkgbG9uZyBzaXplKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2OwogCWludCBpID0gMDsKIAl1bnNpZ25lZCBjaGFyICpmcCA9IChjaGFyICopZmlybXdhcmVQdHI7Ci0JdW5zaWduZWQgY2hhciAqZmlybXdhcmVCaW5hcnkgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlQmluYXJ5OwogCWludCByZXMgPSAwOwogCWludCBtYXhBZGRyID0gMDsKIApAQCAtMjMyMiw2ICsyMzExLDcgQEAKIAkJCWorKzsKIAkJCWlmIChqID49IHNpemVvZihidWYpKSB7CiAJCQkJZGV2X2VycihkZXYsICJjb21lZGlfOiBib2d1cyBmaXJtd2FyZSBmaWxlIVxuIik7CisJCQkJa2ZyZWUoZmlybXdhcmVCaW5hcnkpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJfQpAQCAtMjM0NCw2ICsyMzM0LDcgQEAKIAkJaWYgKGJ1ZlswXSAhPSAnOicpIHsKIAkJCWRldl9lcnIoZGV2LCAiY29tZWRpXzogdXBsb2FkOiBub3QgYW4gaWhleCByZWNvcmQ6ICVzIiwKIAkJCQlidWYpOworCQkJa2ZyZWUoZmlybXdhcmVCaW5hcnkpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIApAQCAtMjM2MCw2ICsyMzUxLDcgQEAKIAkJaWYgKG1heEFkZHIgPj0gRklSTVdBUkVfTUFYX0xFTikgewogCQkJZGV2X2VycihkZXYsICJjb21lZGlfOiBmaXJtd2FyZSB1cGxvYWQgZ29lcyAiCiAJCQkJImJleW9uZCBGWDIgUkFNIGJvdW5kYXJpZXMuXG4iKTsKKwkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAJCS8qIGRldl9kYmcoZGV2LCAiY29tZWRpXzogb2ZmPSV4LCBsZW49JXg6XG4iLCBvZmYsIGxlbik7ICovCkBAIC0yMzc1LDYgKzIzNjcsNyBAQAogCQlpZiAodHlwZSAhPSAwKSB7CiAJCQlkZXZfZXJyKGRldiwgImNvbWVkaV86IHVuc3VwcG9ydGVkIHJlY29yZCB0eXBlOiAldVxuIiwKIAkJCQl0eXBlKTsKKwkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKQEAgLTIzOTUsNiArMjM4OCwzNCBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyB2b2lkIHVzYmR1eF9maXJtd2FyZV9yZXF1ZXN0X2NvbXBsZXRlX2hhbmRsZXIoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKKwkJCQkJCSAgICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdXNiZHV4c3ViICp1c2JkdXhzdWJfdG1wID0gY29udGV4dDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gdXNiZHV4c3ViX3RtcC0+dXNiZGV2OworCWludCByZXQ7CisKKwlpZiAoZncgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZ1c2JkZXYtPmRldiwKKwkJCSJGaXJtd2FyZSBjb21wbGV0ZSBoYW5kbGVyIHdpdGhvdXQgZmlybXdhcmUhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogd2UgbmVlZCB0byB1cGxvYWQgdGhlIGZpcm13YXJlIGhlcmUgYmVjYXVzZSBmdyB3aWxsIGJlCisJICogZnJlZWQgb25jZSB3ZSd2ZSBsZWZ0IHRoaXMgZnVuY3Rpb24KKwkgKi8KKwlyZXQgPSByZWFkX2Zpcm13YXJlKHVzYmR1eHN1Yl90bXAsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnVzYmRldi0+ZGV2LAorCQkJIkNvdWxkIG5vdCB1cGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsCisJCQlyZXQpOworCQlyZXR1cm47CisJfQorCWNvbWVkaV91c2JfYXV0b19jb25maWcodXNiZGV2LCBCT0FSRE5BTUUpOworfQorCiAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB1cmJzIGFuZCBpbml0aWFsaXNlIHRoZW0gKi8KIHN0YXRpYyBpbnQgdXNiZHV4c3ViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1aW50ZXJmLAogCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtMjQwMyw2ICsyNDI0LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdWludGVyZi0+ZGV2OwogCWludCBpOwogCWludCBpbmRleDsKKwlpbnQgcmV0OwogCiAJZGV2X2RiZyhkZXYsICJjb21lZGlfOiB1c2JkdXhfOiAiCiAJCSJmaW5kaW5nIGEgZnJlZSBzdHJ1Y3R1cmUgZm9yIHRoZSB1c2ItZGV2aWNlXG4iKTsKQEAgLTI2MzcsNiArMjY1OSwxOSBAQAogCS8qIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvdHRvbSBvZiB0aGUgZnVuY3Rpb24gKi8KIAl1c2JkdXhzdWJbaW5kZXhdLnByb2JlZCA9IDE7CiAJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLAorCQkJCSAgICAgIEZXX0FDVElPTl9IT1RQTFVHLAorCQkJCSAgICAgICJ1c2JkdXhfZmlybXdhcmUuaGV4IiwKKwkJCQkgICAgICAmdWRldi0+ZGV2LAorCQkJCSAgICAgIHVzYmR1eHN1YiArIGluZGV4LAorCQkJCSAgICAgIHVzYmR1eF9maXJtd2FyZV9yZXF1ZXN0X2NvbXBsZXRlX2hhbmRsZXIpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBsb2FkIGZpcm13YXJlIChlcnI9JWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwogCWRldl9pbmZvKGRldiwgImNvbWVkaV86IHVzYmR1eCVkICIKIAkJICJoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5pdGlhbGlzZWQuXG4iLCBpbmRleCk7CiAJLyogc3VjY2VzcyAqLwpAQCAtMjY1OCw2ICsyNjkzLDcgQEAKIAkJCSJjb21lZGlfOiBCVUchIGNhbGxlZCB3aXRoIHdyb25nIHB0ciEhIVxuIik7CiAJCXJldHVybjsKIAl9CisJY29tZWRpX3VzYl9hdXRvX3VuY29uZmlnKHVkZXYpOwogCWRvd24oJnN0YXJ0X3N0b3Bfc2VtKTsKIAlkb3duKCZ1c2JkdXhzdWJfdG1wLT5zZW0pOwogCXRpZHlfdXAodXNiZHV4c3ViX3RtcCk7CkBAIC0yNjY3LDE0ICsyNzAzLDE0IEBACiB9CiAKIC8qIGlzIGNhbGxlZCB3aGVuIGNvbWVkaS1jb25maWcgaXMgY2FsbGVkICovCi1zdGF0aWMgaW50IHVzYmR1eF9hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCkKK3N0YXRpYyBpbnQgdXNiZHV4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJaW50IHJldDsKIAlpbnQgaW5kZXg7CiAJaW50IGk7CiAJc3RydWN0IHVzYmR1eHN1YiAqdWRldjsKIAotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gTlVMTDsKIAlkZXYtPnByaXZhdGUgPSBOVUxMOwogCiAJZG93bigmc3RhcnRfc3RvcF9zZW0pOwpAQCAtMjgzNCw3ICsyODcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdXNiZHV4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnVzYmR1eHN1Yl90bXA7CiAKQEAgLTI4NjcsMjYgKzI5MDMsMTMgQEAKIH0KIAogLyogbWFpbiBkcml2ZXIgc3RydWN0ICovCi1zdGF0aWMgY29tZWRpX2RyaXZlciBkcml2ZXJfdXNiZHV4ID0geworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl91c2JkdXggPSB7CiAgICAgICAuZHJpdmVyX25hbWUgPQkidXNiZHV4IiwKICAgICAgIC5tb2R1bGUgPQkJVEhJU19NT0RVTEUsCiAgICAgICAuYXR0YWNoID0JCXVzYmR1eF9hdHRhY2gsCiAgICAgICAuZGV0YWNoID0JCXVzYmR1eF9kZXRhY2gsCiB9OwogCi1zdGF0aWMgdm9pZCBpbml0X3VzYl9kZXZpY2VzKHZvaWQpCi17Ci0JaW50IGluZGV4OwotCi0JLyogYWxsIGRldmljZXMgZW50cmllcyBhcmUgaW52YWxpZCB0byBiZWdpbiB3aXRoICovCi0JLyogdGhleSB3aWxsIGJlY29tZSB2YWxpZCBieSB0aGUgcHJvYmUgZnVuY3Rpb24gKi8KLQkvKiBhbmQgdGhlbiBmaW5hbGx5IGJ5IHRoZSBhdHRhY2gtZnVuY3Rpb24gKi8KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1VU0JEVVg7IGluZGV4KyspIHsKLQkJbWVtc2V0KCYodXNiZHV4c3ViW2luZGV4XSksIDB4MDAsIHNpemVvZih1c2JkdXhzdWJbaW5kZXhdKSk7Ci0JCWluaXRfTVVURVgoJih1c2JkdXhzdWJbaW5kZXhdLnNlbSkpOwotCX0KLX0KLQogLyogVGFibGUgd2l0aCB0aGUgVVNCLWRldmljZXM6IGp1c3Qgbm93IG9ubHkgdGVzdGluZyBJRHMgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JkdXhzdWJfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDEzZDgsIDB4MDAwMSkgfSwKQEAgLTI5MDcsMTggKzI5MzAsMTcgQEAKIC8qIENhbid0IHVzZSB0aGUgbmljZSBtYWNybyBhcyBJIGhhdmUgYWxzbyB0byBpbml0aWFsaXNlIHRoZSBVU0IgKi8KIC8qIHN1YnN5c3RlbTogKi8KIC8qIHJlZ2lzdGVyaW5nIHRoZSB1c2Itc3lzdGVtIF9hbmRfIHRoZSBjb21lZGktZHJpdmVyICovCi1zdGF0aWMgaW50IGluaXRfdXNiZHV4KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3VzYmR1eCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIgogCSAgICAgICBEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MgIlxuIik7Ci0JaW5pdF91c2JfZGV2aWNlcygpOwogCXVzYl9yZWdpc3RlcigmdXNiZHV4c3ViX2RyaXZlcik7CiAJY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3VzYmR1eCk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIGRlcmVnaXN0ZXJpbmcgdGhlIGNvbWVkaSBkcml2ZXIgYW5kIHRoZSB1c2Itc3Vic3lzdGVtICovCi1zdGF0aWMgdm9pZCBleGl0X3VzYmR1eCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGV4aXRfdXNiZHV4KHZvaWQpCiB7CiAJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfdXNiZHV4KTsKIAl1c2JfZGVyZWdpc3RlcigmdXNiZHV4c3ViX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYwppbmRleCAzYTAwZmYwLi4yZmI2NGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKQEAgLTEsMzMgKzEsMjAgQEAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjk5YSIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQmVybmQgUG9yciwgQmVybmRQb3JyQGYycy5jb20iCi0jZGVmaW5lIERSSVZFUl9ERVNDICJVU0ItRFVYZmFzdCwgQmVybmRQb3JyQGYycy5jb20iCiAvKgotICAgY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCi0gICBDb3B5cmlnaHQgKEMpIDIwMDQgQmVybmQgUG9yciwgQmVybmQuUG9yckBmMnMuY29tCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotCi0vKgotRHJpdmVyOiB1c2JkdXhmYXN0Ci1EZXNjcmlwdGlvbjogSVRMIFVTQi1EVVhmYXN0Ci1EZXZpY2VzOiBbSVRMXSBVU0ItRFVYICh1c2JkdXhmYXN0Lm8pCi1BdXRob3I6IEJlcm5kIFBvcnIgPEJlcm5kUG9yckBmMnMuY29tPgotVXBkYXRlZDogMDQgRGVjIDIwMDYKLVN0YXR1czogdGVzdGluZwotKi8KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQmVybmQgUG9yciwgQmVybmQuUG9yckBmMnMuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KIAogLyoKICAqIEkgbXVzdCBnaXZlIGNyZWRpdCBoZXJlIHRvIENocmlzIEJhdWdoZXIgd2hvCkBAIC00MiwxMiArMjksMTYgQEAKICAqIDAuOTogRHJvcHBpbmcgdGhlIGZpcnN0IGRhdGEgcGFja2V0IHdoaWNoIHNlZW1zIHRvIGJlIGZyb20gdGhlIGxhc3QgdHJhbnNmZXIuCiAgKiAgICAgIEJ1ZmZlciBvdmVyZmxvd3MgaW4gdGhlIEZYMiBhcmUgaGFuZGVkIG92ZXIgdG8gY29tZWRpLgogICogMC45MjogRHJvcHBpbmcgbm93IDQgcGFja2V0cy4gVGhlIHF1YWQgYnVmZmVyIGhhcyB0byBiZSBlbXB0aWVkLgotICogICAgICAgQWRkZWQgaW5zbiBjb21tYW5kIGJhc2ljYWxseSBmb3IgdGVzdGluZy4gU2FtcGxlIHJhdGUgaXMgMU1Iei8xNmNoPTYyLjVrSHoKKyAqICAgICAgIEFkZGVkIGluc24gY29tbWFuZCBiYXNpY2FsbHkgZm9yIHRlc3RpbmcuIFNhbXBsZSByYXRlIGlzCisgKiAgICAgICAxTUh6LzE2Y2g9NjIuNWtIegogICogMC45OTogSWFuIEFiYm90dCBwb2ludGVkIG91dCBhIGJ1ZyB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuIFRoYW5rcyEKICAqIDAuOTlhOiBhZGRlZCBleHRlcm5hbCB0cmlnZ2VyLgorICogMS4wMDogYWRkZWQgZmlybXdhcmUga2VybmVsIHJlcXVlc3QgdG8gdGhlIGRyaXZlciB3aGljaCBmaXhlZAorICogICAgICAgdWRldiBjb2xkcGx1ZyBwcm9ibGVtCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTU5LDUzNiArNTAsNTQ5IEBACiAjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKLS8vICh1biljb21tZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gaGF2ZSBkZWJ1ZyBpbmZvLgotLy8jZGVmaW5lIENPTkZJR19DT01FRElfREVCVUcKLSN1bmRlZiAgQ09ORklHX0NPTUVESV9ERUJVRwogCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQi1EVVhmYXN0LCBCZXJuZFBvcnJAZjJzLmNvbSIKICNkZWZpbmUgQk9BUkROQU1FICJ1c2JkdXhmYXN0IgogCi0vLyB0aW1lb3V0IGZvciB0aGUgVVNCLXRyYW5zZmVyCi0jZGVmaW5lIEVaVElNRU9VVCAzMAorLyoKKyAqIHRpbWVvdXQgZm9yIHRoZSBVU0ItdHJhbnNmZXIKKyAqLworI2RlZmluZSBFWlRJTUVPVVQJMzAKIAotLy8gY29uc3RhbnRzIGZvciAiZmlybXdhcmUiIHVwbG9hZCBhbmQgZG93bmxvYWQKLSNkZWZpbmUgVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSAweEEwCi0jZGVmaW5lIFZFTkRPUl9ESVJfSU4gIDB4QzAKLSNkZWZpbmUgVkVORE9SX0RJUl9PVVQgMHg0MAorLyoKKyAqIGNvbnN0YW50cyBmb3IgImZpcm13YXJlIiB1cGxvYWQgYW5kIGRvd25sb2FkCisgKi8KKyNkZWZpbmUgVVNCRFVYRkFTVFNVQl9GSVJNV0FSRQkweEEwCisjZGVmaW5lIFZFTkRPUl9ESVJfSU4JCTB4QzAKKyNkZWZpbmUgVkVORE9SX0RJUl9PVVQJCTB4NDAKIAotLy8gaW50ZXJuYWwgYWRyZXNzZXMgb2YgdGhlIDgwNTEgcHJvY2Vzc29yCi0jZGVmaW5lIFVTQkRVWEZBU1RTVUJfQ1BVQ1MgMHhFNjAwCisvKgorICogaW50ZXJuYWwgYWRyZXNzZXMgb2YgdGhlIDgwNTEgcHJvY2Vzc29yCisgKi8KKyNkZWZpbmUgVVNCRFVYRkFTVFNVQl9DUFVDUwkweEU2MDAKIAotLy8gbWF4IGxlbmdodGggb2YgdGhlIHRyYW5zZmVyLWJ1ZmZlciBmb3Igc29mdHdhcmUgdXBsb2FkCi0jZGVmaW5lIFRCX0xFTiAweDIwMDAKKy8qCisgKiBtYXggbGVuZ2h0aCBvZiB0aGUgdHJhbnNmZXItYnVmZmVyIGZvciBzb2Z0d2FyZSB1cGxvYWQKKyAqLworI2RlZmluZSBUQl9MRU4JMHgyMDAwCiAKLS8vIElucHV0IGVuZHBvaW50IG51bWJlcgotI2RlZmluZSBCVUxLSU5FUCAgICAgICAgICAgNgorLyoKKyAqIGlucHV0IGVuZHBvaW50IG51bWJlcgorICovCisjZGVmaW5lIEJVTEtJTkVQCTYKIAotLy8gRW5kcG9pbnQgZm9yIHRoZSBBL0QgY2hhbm5lbGxpc3Q6IGJ1bGsgT1VUCi0jZGVmaW5lIENIQU5ORUxMSVNURVAgICAgIDQKKy8qCisgKiBlbmRwb2ludCBmb3IgdGhlIEEvRCBjaGFubmVsbGlzdDogYnVsayBPVVQKKyAqLworI2RlZmluZSBDSEFOTkVMTElTVEVQCTQKIAotLy8gTnVtYmVyIG9mIGNoYW5uZWxzCi0jZGVmaW5lIE5VTUNIQU5ORUxTICAgICAgIDMyCisvKgorICogbnVtYmVyIG9mIGNoYW5uZWxzCisgKi8KKyNkZWZpbmUgTlVNQ0hBTk5FTFMJMzIKIAotLy8gc2l6ZSBvZiB0aGUgd2F2ZWZvcm0gZGVzY3JpcHRvcgotI2RlZmluZSBXQVZFU0laRSAgICAgICAgICAweDIwCisvKgorICogc2l6ZSBvZiB0aGUgd2F2ZWZvcm0gZGVzY3JpcHRvcgorICovCisjZGVmaW5lIFdBVkVTSVpFCTB4MjAKIAotLy8gU2l6ZSBvZiBvbmUgQS9EIHZhbHVlCi0jZGVmaW5lIFNJWkVBRElOICAgICAgICAgICgoc2l6ZW9mKGludDE2X3QpKSkKKy8qCisgKiBzaXplIG9mIG9uZSBBL0QgdmFsdWUKKyAqLworI2RlZmluZSBTSVpFQURJTgkoc2l6ZW9mKGludDE2X3QpKQogCi0vLyBTaXplIG9mIHRoZSBpbnB1dC1idWZmZXIgSU4gQllURVMKLSNkZWZpbmUgU0laRUlOQlVGICAgICAgICAgNTEyCisvKgorICogc2l6ZSBvZiB0aGUgaW5wdXQtYnVmZmVyIElOIEJZVEVTCisgKi8KKyNkZWZpbmUgU0laRUlOQlVGCTUxMgogCi0vLyAxNiBieXRlcy4KLSNkZWZpbmUgU0laRUlOU05CVUYgICAgICAgNTEyCisvKgorICogMTYgYnl0ZXMKKyAqLworI2RlZmluZSBTSVpFSU5TTkJVRgk1MTIKIAotLy8gU2l6ZSBvZiB0aGUgYnVmZmVyIGZvciB0aGUgZHV4IGNvbW1hbmRzCi0jZGVmaW5lIFNJWkVPRkRVWEJVRkZFUiAgICAyNTYJLy8gYnl0ZXMKKy8qCisgKiBzaXplIG9mIHRoZSBidWZmZXIgZm9yIHRoZSBkdXggY29tbWFuZHMgaW4gYnl0ZXMKKyAqLworI2RlZmluZSBTSVpFT0ZEVVhCVUZGRVIJMjU2CiAKLS8vIE51bWJlciBvZiBpbi1VUkJzIHdoaWNoIHJlY2VpdmUgdGhlIGRhdGE6IG1pbj01Ci0jZGVmaW5lIE5VTU9GSU5CVUZGRVJTSElHSCAgICAgMTAKKy8qCisgKiBudW1iZXIgb2YgaW4tVVJCcyB3aGljaCByZWNlaXZlIHRoZSBkYXRhOiBtaW49NQorICovCisjZGVmaW5lIE5VTU9GSU5CVUZGRVJTSElHSAkxMAogCi0vLyBUb3RhbCBudW1iZXIgb2YgdXNiZHV4ZmFzdCBkZXZpY2VzCi0jZGVmaW5lIE5VTVVTQkRVWEZBU1QgICAgICAgICAgICAgMTYKKy8qCisgKiB0b3RhbCBudW1iZXIgb2YgdXNiZHV4ZmFzdCBkZXZpY2VzCisgKi8KKyNkZWZpbmUgTlVNVVNCRFVYRkFTVAkxNgogCi0vLyBOdW1iZXIgb2Ygc3ViZGV2aWNlcwotI2RlZmluZSBOX1NVQkRFVklDRVMgICAgICAgICAgMQorLyoKKyAqIG51bWJlciBvZiBzdWJkZXZpY2VzCisgKi8KKyNkZWZpbmUgTl9TVUJERVZJQ0VTCTEKIAotLy8gQW5hbG9ndWUgaW4gc3ViZGV2aWNlCi0jZGVmaW5lIFNVQkRFVl9BRCAgICAgICAgICAgICAwCisvKgorICogYW5hbG9ndWUgaW4gc3ViZGV2aWNlCisgKi8KKyNkZWZpbmUgU1VCREVWX0FECTAKIAotLy8gbWluIGRlbGF5IHN0ZXBzIGZvciBtb3JlIHRoYW4gb25lIGNoYW5uZWwKLS8vIGJhc2ljYWxseSB3aGVuIHRoZSBtdXggZ2l2ZXMgdXAuIDstKQotI2RlZmluZSBNSU5fU0FNUExJTkdfUEVSSU9EIDkJLy8gc3RlcHMgYXQgMzBNSHogaW4gdGhlIEZYMgorLyoKKyAqIG1pbiBkZWxheSBzdGVwcyBmb3IgbW9yZSB0aGFuIG9uZSBjaGFubmVsCisgKiBiYXNpY2FsbHkgd2hlbiB0aGUgbXV4IGdpdmVzIHVwIDstKQorICoKKyAqIHN0ZXBzIGF0IDMwTUh6IGluIHRoZSBGWDIKKyAqLworI2RlZmluZSBNSU5fU0FNUExJTkdfUEVSSU9ECTkKIAotLy8gTWF4IG51bWJlciBvZiAxLzMwTUh6IGRlbGF5IHN0ZXBzOgotI2RlZmluZSBNQVhfU0FNUExJTkdfUEVSSU9EIDUwMAorLyoKKyAqIG1heCBudW1iZXIgb2YgMS8zME1IeiBkZWxheSBzdGVwcworICovCisjZGVmaW5lIE1BWF9TQU1QTElOR19QRVJJT0QJNTAwCiAKLS8vIE51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHRvIGlnbm9yZSBiZWZvcmUgd2Ugc3RhcnQgaGFuZGluZyBkYXRhIG92ZXIgdG8gY29tZWRpLgotLy8gSXQncyBxdWFkIGJ1ZmZlcmluZyBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgNCBwYWNrZXRzLgotI2RlZmluZSBQQUNLRVRTX1RPX0lHTk9SRSA0CisvKgorICogbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgdG8gaWdub3JlIGJlZm9yZSB3ZSBzdGFydCBoYW5kaW5nIGRhdGEKKyAqIG92ZXIgdG8gY29tZWRpLCBpdCdzIHF1YWQgYnVmZmVyaW5nIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSA0IHBhY2tldHMKKyAqLworI2RlZmluZSBQQUNLRVRTX1RPX0lHTk9SRQk0CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gY29tZWRpIGNvbnN0YW50cwotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4ZmFzdF9haV9yYW5nZSA9IHsgMiwgewotCQkJQklQX1JBTkdFKDAuNzUpLAotCQkJQklQX1JBTkdFKDAuNSksCi0JfQorLyoKKyAqIGNvbWVkaSBjb25zdGFudHMKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VzYmR1eGZhc3RfYWlfcmFuZ2UgPSB7CisJMiwgeyBCSVBfUkFOR0UoMC43NSksIEJJUF9SQU5HRSgwLjUpIH0KIH07CiAKIC8qCiAgKiBwcml2YXRlIHN0cnVjdHVyZSBvZiBvbmUgc3ViZGV2aWNlCisgKgorICogdGhpcyBpcyB0aGUgc3RydWN0dXJlIHdoaWNoIGhvbGRzIGFsbCB0aGUgZGF0YSBvZiB0aGlzIGRyaXZlcgorICogb25lIHN1YiBkZXZpY2UganVzdCBub3c6IEEvRAogICovCi0KLS8vIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3aGljaCBob2xkcyBhbGwgdGhlIGRhdGEgb2YgdGhpcyBkcml2ZXIKLS8vIG9uZSBzdWIgZGV2aWNlIGp1c3Qgbm93OiBBL0QKLXR5cGVkZWYgc3RydWN0IHsKLQkvLyBhdHRhY2hlZD8KLQlpbnQgYXR0YWNoZWQ7Ci0JLy8gaXMgaXQgYXNzb2NpYXRlZCB3aXRoIGEgc3ViZGV2aWNlPwotCWludCBwcm9iZWQ7Ci0JLy8gcG9pbnRlciB0byB0aGUgdXNiLWRldmljZQotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7Ci0JLy8gQlVMSy10cmFuc2ZlciBoYW5kbGluZzogdXJiCi0Jc3RydWN0IHVyYiAqdXJiSW47CitzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zIHsKKwlpbnQgYXR0YWNoZWQ7CQkJLyogaXMgYXR0YWNoZWQ/ICovCisJaW50IHByb2JlZDsJCQkvKiBpcyBpdCBhc3NvY2lhdGVkIHdpdGggYSBzdWJkZXZpY2U/ICovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsJLyogcG9pbnRlciB0byB0aGUgdXNiLWRldmljZSAqLworCXN0cnVjdCB1cmIgKnVyYkluOwkJLyogQlVMSy10cmFuc2ZlciBoYW5kbGluZzogdXJiICovCiAJaW50OF90ICp0cmFuc2Zlcl9idWZmZXI7Ci0JLy8gaW5wdXQgYnVmZmVyIGZvciBzaW5nbGUgaW5zbgotCWludDE2X3QgKmluc25CdWZmZXI7Ci0JLy8gaW50ZXJmYWNlIG51bWJlcgotCWludCBpZm51bTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApCi0JLy8gaW50ZXJmYWNlIHN0cnVjdHVyZSBpbiAyLjYKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOwotI2VuZGlmCi0JLy8gY29tZWRpIGRldmljZSBmb3IgdGhlIGludGVycnVwdCBjb250ZXh0Ci0JY29tZWRpX2RldmljZSAqY29tZWRpZGV2OwotCS8vIGFzeW5jaHJvbm91cyBjb21tYW5kIGlzIHJ1bm5pbmcKLQlzaG9ydCBpbnQgYWlfY21kX3J1bm5pbmc7Ci0JLy8gY29udGlub3VzIGFxdWlzaXRpb24KLQlzaG9ydCBpbnQgYWlfY29udGlub3VzOwotCS8vIG51bWJlciBvZiBzYW1wbGVzIHRvIGFxdWlyZQotCWxvbmcgaW50IGFpX3NhbXBsZV9jb3VudDsKLQkvLyBjb21tYW5kcwotCXVpbnQ4X3QgKmR1eF9jb21tYW5kczsKLQkvLyBjb3VudGVyIHdoaWNoIGlnbm9yZXMgdGhlIGZpcnN0IGJ1ZmZlcnMKLQlpbnQgaWdub3JlOworCWludDE2X3QgKmluc25CdWZmZXI7CQkvKiBpbnB1dCBidWZmZXIgZm9yIHNpbmdsZSBpbnNuICovCisJaW50IGlmbnVtOwkJCS8qIGludGVyZmFjZSBudW1iZXIgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOwkvKiBpbnRlcmZhY2Ugc3RydWN0dXJlICovCisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmNvbWVkaWRldjsJLyogY29tZWRpIGRldmljZSBmb3IgdGhlIGludGVycnVwdAorCQkJCQkgICBjb250ZXh0ICovCisJc2hvcnQgaW50IGFpX2NtZF9ydW5uaW5nOwkvKiBhc3luY2hyb25vdXMgY29tbWFuZCBpcyBydW5uaW5nICovCisJc2hvcnQgaW50IGFpX2NvbnRpbm91czsJCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJbG9uZyBpbnQgYWlfc2FtcGxlX2NvdW50OwkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBhcXVpcmUgKi8KKwl1aW50OF90ICpkdXhfY29tbWFuZHM7CQkvKiBjb21tYW5kcyAqLworCWludCBpZ25vcmU7CQkJLyogY291bnRlciB3aGljaCBpZ25vcmVzIHRoZSBmaXJzdAorCQkJCQkgICBidWZmZXJzICovCiAJc3RydWN0IHNlbWFwaG9yZSBzZW07Ci19IHVzYmR1eGZhc3RzdWJfdDsKK307CiAKLS8vIFRoZSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIHVzYi1kYXRhIG9mIHRoZSBkcml2ZXIKLS8vIGlzIGFsc28gdGhlIHByaXZhdGUgZGF0YSBmb3IgdGhlIGNvbWVkaS1kZXZpY2UuCi0vLyBUaGlzIGhhcyB0byBiZSBnbG9iYWwgYXMgdGhlIHVzYiBzdWJzeXN0ZW0gbmVlZHMKLS8vIGdsb2JhbCB2YXJpYWJsZXMuIFRoZSBvdGhlciByZWFzb24gaXMgdGhhdCB0aGlzCi0vLyBzdHJ1Y3R1cmUgbXVzdCBiZSB0aGVyZSBfYmVmb3JlXyBhbnkgY29tZWRpCi0vLyBjb21tYW5kIGlzIGlzc3VlZC4gVGhlIHVzYiBzdWJzeXN0ZW0gbXVzdCBiZQotLy8gaW5pdGlhbGlzZWQgYmVmb3JlIGNvbWVkaSBjYW4gYWNjZXNzIGl0Lgotc3RhdGljIHVzYmR1eGZhc3RzdWJfdCB1c2JkdXhmYXN0c3ViW05VTVVTQkRVWEZBU1RdOworLyoKKyAqIFRoZSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIHVzYi1kYXRhIG9mIHRoZSBkcml2ZXIKKyAqIGlzIGFsc28gdGhlIHByaXZhdGUgZGF0YSBmb3IgdGhlIGNvbWVkaS1kZXZpY2UuCisgKiBUaGlzIGhhcyB0byBiZSBnbG9iYWwgYXMgdGhlIHVzYiBzdWJzeXN0ZW0gbmVlZHMKKyAqIGdsb2JhbCB2YXJpYWJsZXMuIFRoZSBvdGhlciByZWFzb24gaXMgdGhhdCB0aGlzCisgKiBzdHJ1Y3R1cmUgbXVzdCBiZSB0aGVyZSBfYmVmb3JlXyBhbnkgY29tZWRpCisgKiBjb21tYW5kIGlzIGlzc3VlZC4gVGhlIHVzYiBzdWJzeXN0ZW0gbXVzdCBiZQorICogaW5pdGlhbGlzZWQgYmVmb3JlIGNvbWVkaSBjYW4gYWNjZXNzIGl0LgorICovCitzdGF0aWMgc3RydWN0IHVzYmR1eGZhc3RzdWJfcyB1c2JkdXhmYXN0c3ViW05VTVVTQkRVWEZBU1RdOwogCiBzdGF0aWMgREVDTEFSRV9NVVRFWChzdGFydF9zdG9wX3NlbSk7CiAKLS8vIGJ1bGsgdHJhbnNmZXJzIHRvIHVzYmR1eGZhc3QKLQorLyoKKyAqIGJ1bGsgdHJhbnNmZXJzIHRvIHVzYmR1eGZhc3QKKyAqLwogI2RlZmluZSBTRU5EQURDT01NQU5EUyAgICAgICAgICAgIDAKICNkZWZpbmUgU0VORElOSVRFUDYgICAgICAgICAgICAgICAxCiAKLXN0YXRpYyBpbnQgc2VuZF9kdXhfY29tbWFuZHModXNiZHV4ZmFzdHN1Yl90ICogdGhpc191c2JkdXhmYXN0c3ViLCBpbnQgY21kX3R5cGUpCitzdGF0aWMgaW50IHNlbmRfZHV4X2NvbW1hbmRzKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMsIGludCBjbWRfdHlwZSkKIHsKLQlpbnQgcmVzdWx0LCBuc2VudDsKLQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1swXSA9IGNtZF90eXBlOworCWludCB0bXAsIG5zZW50OworCisJdWRmcy0+ZHV4X2NvbW1hbmRzWzBdID0gY21kX3R5cGU7CisKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JaW50IGk7Ci0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogZHV4X2NvbW1hbmRzOiAiLAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldi0+bWlub3IpOwotCWZvciAoaSA9IDA7IGkgPCBTSVpFT0ZEVVhCVUZGRVI7IGkrKykgewotCQlwcmludGsoIiAlMDJ4IiwgdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbaV0pOwotCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGR1eF9jb21tYW5kczogIiwKKwkJdWRmcy0+Y29tZWRpZGV2LT5taW5vcik7CisJZm9yICh0bXAgPSAwOyB0bXAgPCBTSVpFT0ZEVVhCVUZGRVI7IHRtcCsrKQorCQlwcmludGsoIiAlMDJ4IiwgdWRmcy0+ZHV4X2NvbW1hbmRzW3RtcF0pOwogCXByaW50aygiXG4iKTsKICNlbmRpZgotCXJlc3VsdCA9IHVzYl9idWxrX21zZyh0aGlzX3VzYmR1eGZhc3RzdWItPnVzYmRldiwKLQkJCSAgICAgIHVzYl9zbmRidWxrcGlwZSh0aGlzX3VzYmR1eGZhc3RzdWItPnVzYmRldiwKLQkJCQkJICAgICAgQ0hBTk5FTExJU1RFUCksCi0JCQkgICAgICB0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kcywgU0laRU9GRFVYQlVGRkVSLAotCQkJICAgICAgJm5zZW50LCAxMDAwMCk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogY291bGQgbm90IHRyYW5zbWl0IGR1eF9jb21tYW5kcyB0byB0aGUgdXNiLWRldmljZSwgZXJyPSVkXG4iLCB0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldi0+bWlub3IsIHJlc3VsdCk7Ci0JfQotCXJldHVybiByZXN1bHQ7CisKKwl0bXAgPSB1c2JfYnVsa19tc2codWRmcy0+dXNiZGV2LAorCQkJICAgdXNiX3NuZGJ1bGtwaXBlKHVkZnMtPnVzYmRldiwgQ0hBTk5FTExJU1RFUCksCisJCQkgICB1ZGZzLT5kdXhfY29tbWFuZHMsIFNJWkVPRkRVWEJVRkZFUiwgJm5zZW50LCAxMDAwMCk7CisJaWYgKHRtcCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGNvdWxkIG5vdCB0cmFuc21pdCBkdXhfY29tbWFuZHMgdG8iCisJCSAgICAgICJ0aGUgdXNiLWRldmljZSwgZXJyPSVkXG4iLCB1ZGZzLT5jb21lZGlkZXYtPm1pbm9yLCB0bXApOworCXJldHVybiB0bXA7CiB9CiAKLS8vIFN0b3BzIHRoZSBkYXRhIGFjcXVpc2lvbgotLy8gSXQgc2hvdWxkIGJlIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gYW55IGNvbnRleHQKLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdHN1Yl91bmxpbmtfSW5VUkJzKHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWJfdG1wKQorLyoKKyAqIFN0b3BzIHRoZSBkYXRhIGFjcXVpc2lvbi4KKyAqIEl0IHNob3VsZCBiZSBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFueSBjb250ZXh0LgorICovCitzdGF0aWMgaW50IHVzYmR1eGZhc3RzdWJfdW5saW5rX0luVVJCcyhzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzKQogewogCWludCBqID0gMDsKIAlpbnQgZXJyID0gMDsKIAotCWlmICh1c2JkdXhmYXN0c3ViX3RtcCAmJiB1c2JkdXhmYXN0c3ViX3RtcC0+dXJiSW4pIHsKLQkJdXNiZHV4ZmFzdHN1Yl90bXAtPmFpX2NtZF9ydW5uaW5nID0gMDsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsOCkKLQkJaiA9IHVzYl91bmxpbmtfdXJiKHVzYmR1eGZhc3RzdWJfdG1wLT51cmJJbik7Ci0JCWlmIChqIDwgMCkgewotCQkJZXJyID0gajsKLQkJfQotI2Vsc2UKLQkJLy8gd2FpdHMgdW50aWwgYSBydW5uaW5nIHRyYW5zZmVyIGlzIG92ZXIKLQkJdXNiX2tpbGxfdXJiKHVzYmR1eGZhc3RzdWJfdG1wLT51cmJJbik7CisJaWYgKHVkZnMgJiYgdWRmcy0+dXJiSW4pIHsKKwkJdWRmcy0+YWlfY21kX3J1bm5pbmcgPSAwOworCQkvKiB3YWl0cyB1bnRpbCBhIHJ1bm5pbmcgdHJhbnNmZXIgaXMgb3ZlciAqLworCQl1c2Jfa2lsbF91cmIodWRmcy0+dXJiSW4pOwogCQlqID0gMDsKLSNlbmRpZgogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGk6IHVzYmR1eGZhc3Q6IHVubGlua2VkIEluVVJCOiByZXM9JWRcbiIsIGopOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGk6IHVzYmR1eGZhc3Q6IHVubGlua2VkIEluVVJCOiByZXM9JWRcbiIsIGopOwogI2VuZGlmCiAJcmV0dXJuIGVycjsKIH0KIAotLyogVGhpcyB3aWxsIHN0b3AgYSBydW5uaW5nIGFjcXVpc2l0aW9uIG9wZXJhdGlvbiAqLwotLy8gSXMgY2FsbGVkIGZyb20gd2l0aGluIHRoaXMgZHJpdmVyIGZyb20gYm90aCB0aGUKLS8vIGludGVycnVwdCBjb250ZXh0IGFuZCBmcm9tIGNvbWVkaQotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX3N0b3AodXNiZHV4ZmFzdHN1Yl90ICogdGhpc191c2JkdXhmYXN0c3ViLAorLyoKKyAqIFRoaXMgd2lsbCBzdG9wIGEgcnVubmluZyBhY3F1aXNpdGlvbiBvcGVyYXRpb24uCisgKiBJcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhpcyBkcml2ZXIgZnJvbSBib3RoIHRoZQorICogaW50ZXJydXB0IGNvbnRleHQgYW5kIGZyb20gY29tZWRpLgorICovCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfc3RvcChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzLAogCWludCBkb191bmxpbmspCiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIXRoaXNfdXNiZHV4ZmFzdHN1YikgewotCQlwcmludGsoImNvbWVkaT86IHVzYmR1eGZhc3RfYWlfc3RvcDogdGhpc191c2JkdXhmYXN0c3ViPU5VTEwhXG4iKTsKKwlpZiAoIXVkZnMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGk/OiB1c2JkdXhmYXN0X2FpX3N0b3A6IHVkZnM9TlVMTCFcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CisKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGk6IHVzYmR1eGZhc3RfYWlfc3RvcFxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaTogdXNiZHV4ZmFzdF9haV9zdG9wXG4iKTsKICNlbmRpZgogCi0JdGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZyA9IDA7CisJdWRmcy0+YWlfY21kX3J1bm5pbmcgPSAwOwogCi0JaWYgKGRvX3VubGluaykgewotCQkvLyBzdG9wIGFxdWlzdGlvbgotCQlyZXQgPSB1c2JkdXhmYXN0c3ViX3VubGlua19JblVSQnModGhpc191c2JkdXhmYXN0c3ViKTsKLQl9CisJaWYgKGRvX3VubGluaykKKwkJcmV0ID0gdXNiZHV4ZmFzdHN1Yl91bmxpbmtfSW5VUkJzKHVkZnMpOyAvKiBzdG9wIGFxdWlzdGlvbiAqLwogCiAJcmV0dXJuIHJldDsKIH0KIAotLy8gVGhpcyB3aWxsIGNhbmNlbCBhIHJ1bm5pbmcgYWNxdWlzaXRpb24gb3BlcmF0aW9uLgotLy8gVGhpcyBpcyBjYWxsZWQgYnkgY29tZWRpIGJ1dCBuZXZlciBmcm9tIGluc2lkZSB0aGUKLS8vIGRyaXZlci4KLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCisvKgorICogVGhpcyB3aWxsIGNhbmNlbCBhIHJ1bm5pbmcgYWNxdWlzaXRpb24gb3BlcmF0aW9uLgorICogVGhpcyBpcyBjYWxsZWQgYnkgY29tZWRpIGJ1dCBuZXZlciBmcm9tIGluc2lkZSB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCXVzYmR1eGZhc3RzdWJfdCAqdGhpc191c2JkdXhmYXN0c3ViOwotCWludCByZXMgPSAwOworCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnM7CisJaW50IHJldDsKIAotCS8vIGZvcmNlIHVubGluayBvZiBhbGwgdXJicworCS8qIGZvcmNlIHVubGluayBvZiBhbGwgdXJicyAqLwogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaTogdXNiZHV4ZmFzdF9haV9jYW5jZWxcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGk6IHVzYmR1eGZhc3RfYWlfY2FuY2VsXG4iKTsKICNlbmRpZgotCXRoaXNfdXNiZHV4ZmFzdHN1YiA9IGRldi0+cHJpdmF0ZTsKLQlpZiAoIXRoaXNfdXNiZHV4ZmFzdHN1YikgewotCQlwcmludGsoImNvbWVkaTogdXNiZHV4ZmFzdF9haV9jYW5jZWw6IHRoaXNfdXNiZHV4ZmFzdHN1Yj1OVUxMXG4iKTsKKwl1ZGZzID0gZGV2LT5wcml2YXRlOworCWlmICghdWRmcykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaTogdXNiZHV4ZmFzdF9haV9jYW5jZWw6IHVkZnM9TlVMTFxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlkb3duKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7Ci0JaWYgKCEodGhpc191c2JkdXhmYXN0c3ViLT5wcm9iZWQpKSB7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJZG93bigmdWRmcy0+c2VtKTsKKwlpZiAoIXVkZnMtPnByb2JlZCkgeworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCS8vIHVubGluawotCXJlcyA9IHVzYmR1eGZhc3RfYWlfc3RvcCh0aGlzX3VzYmR1eGZhc3RzdWIsIDEpOwotCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJLyogdW5saW5rICovCisJcmV0ID0gdXNiZHV4ZmFzdF9haV9zdG9wKHVkZnMsIDEpOworCXVwKCZ1ZGZzLT5zZW0pOwogCi0JcmV0dXJuIHJlczsKKwlyZXR1cm4gcmV0OwogfQogCi0vLyBhbmFsb2d1ZSBJTgotLy8gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotc3RhdGljIHZvaWQgdXNiZHV4ZmFzdHN1Yl9haV9JcnEoc3RydWN0IHVyYiAqdXJiKQotI2Vsc2UKKy8qCisgKiBhbmFsb2d1ZSBJTgorICogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQorICovCiBzdGF0aWMgdm9pZCB1c2JkdXhmYXN0c3ViX2FpX0lycShzdHJ1Y3QgdXJiICp1cmIgUFRfUkVHU19BUkcpCi0jZW5kaWYKIHsKIAlpbnQgbiwgZXJyOwotCXVzYmR1eGZhc3RzdWJfdCAqdGhpc191c2JkdXhmYXN0c3ViOwotCWNvbWVkaV9kZXZpY2UgKnRoaXNfY29tZWRpZGV2OwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJdWludDE2X3QgKnA7CiAKLQkvLyBzYW5pdHkgY2hlY2tzCi0JLy8gaXMgdGhlIHVyYiB0aGVyZT8KKwkvKiBzYW5pdHkgY2hlY2tzIC0gaXMgdGhlIHVyYiB0aGVyZT8gKi8KIAlpZiAoIXVyYikgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3RfOiBhbyBpbnQtaGFuZGxlciBjYWxsZWQgd2l0aCB1cmI9TlVMTCFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3RfOiBhbyBpbnQtaGFuZGxlciBjYWxsZWQgIgorCQkgICAgICAgIndpdGggdXJiPU5VTEwhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQkvLyB0aGUgY29udGV4dCB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHN1YmRldmljZQorCS8qIHRoZSBjb250ZXh0IHZhcmlhYmxlIHBvaW50cyB0byB0aGUgc3ViZGV2aWNlICovCiAJdGhpc19jb21lZGlkZXYgPSB1cmItPmNvbnRleHQ7CiAJaWYgKCF0aGlzX2NvbWVkaWRldikgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3RfOiB1cmIgY29udGV4dCBpcyBhIE5VTEwgcG9pbnRlciFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3RfOiB1cmIgY29udGV4dCBpcyBhIE5VTEwgIgorCQkgICAgICAgInBvaW50ZXIhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQkvLyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgb2YgdGhlIHN1YmRldmljZSBpcyB1c2JkdXhmYXN0c3ViX3QKLQl0aGlzX3VzYmR1eGZhc3RzdWIgPSB0aGlzX2NvbWVkaWRldi0+cHJpdmF0ZTsKLQlpZiAoIXRoaXNfdXNiZHV4ZmFzdHN1YikgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3RfOiBwcml2YXRlIG9mIGNvbWVkaSBzdWJkZXYgaXMgYSBOVUxMIHBvaW50ZXIhXG4iKTsKKwkvKiB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgb2YgdGhlIHN1YmRldmljZSBpcyB1c2JkdXhmYXN0c3ViX3MgKi8KKwl1ZGZzID0gdGhpc19jb21lZGlkZXYtPnByaXZhdGU7CisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdF86IHByaXZhdGUgb2YgY29tZWRpICIKKwkJICAgICAgICJzdWJkZXYgaXMgYSBOVUxMIHBvaW50ZXIhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQkvLyBhcmUgd2UgcnVubmluZyBhIGNvbW1hbmQ/Ci0JaWYgKHVubGlrZWx5KCEodGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZykpKSB7Ci0JCS8vIG5vdCBydW5uaW5nIGEgY29tbWFuZAotCQkvLyBkbyBub3QgY29udGludWUgZXhlY3V0aW9uIGlmIG5vIGFzeW5jaHJvbm91cyBjb21tYW5kIGlzIHJ1bm5pbmcKLQkJLy8gaW4gcGFydGljdWxhciBub3QgcmVzdWJtaXQKKwkvKiBhcmUgd2UgcnVubmluZyBhIGNvbW1hbmQ/ICovCisJaWYgKHVubGlrZWx5KCF1ZGZzLT5haV9jbWRfcnVubmluZykpIHsKKwkJLyoKKwkJICogbm90IHJ1bm5pbmcgYSBjb21tYW5kCisJCSAqIGRvIG5vdCBjb250aW51ZSBleGVjdXRpb24gaWYgbm8gYXN5bmNocm9ub3VzIGNvbW1hbmQKKwkJICogaXMgcnVubmluZyBpbiBwYXJ0aWN1bGFyIG5vdCByZXN1Ym1pdAorCQkgKi8KIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseSghKHRoaXNfdXNiZHV4ZmFzdHN1Yi0+YXR0YWNoZWQpKSkgewotCQkvLyBubyBjb21lZGkgZGV2aWNlIHRoZXJlCisJaWYgKHVubGlrZWx5KCF1ZGZzLT5hdHRhY2hlZCkpIHsKKwkJLyogbm8gY29tZWRpIGRldmljZSB0aGVyZSAqLwogCQlyZXR1cm47CiAJfQotCS8vIHN1YmRldmljZSB3aGljaCBpcyB0aGUgQUQgY29udmVydGVyCisJLyogc3ViZGV2aWNlIHdoaWNoIGlzIHRoZSBBRCBjb252ZXJ0ZXIgKi8KIAlzID0gdGhpc19jb21lZGlkZXYtPnN1YmRldmljZXMgKyBTVUJERVZfQUQ7CiAKLQkvLyBmaXJzdCB3ZSB0ZXN0IGlmIHNvbWV0aGluZyB1bnVzdWFsIGhhcyBqdXN0IGhhcHBlbmVkCisJLyogZmlyc3Qgd2UgdGVzdCBpZiBzb21ldGhpbmcgdW51c3VhbCBoYXMganVzdCBoYXBwZW5lZCAqLwogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CiAJCWJyZWFrOwogCi0JCS8vIGhhcHBlbnMgYWZ0ZXIgYW4gdW5saW5rIGNvbW1hbmQgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIHBsdWdnZWQgb3V0CisJCS8qCisJCSAqIGhhcHBlbnMgYWZ0ZXIgYW4gdW5saW5rIGNvbW1hbmQgb3Igd2hlbiB0aGUgZGV2aWNlCisJCSAqIGlzIHBsdWdnZWQgb3V0CisJCSAqLwogCWNhc2UgLUVDT05OUkVTRVQ6CiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAljYXNlIC1FQ09OTkFCT1JURUQ6Ci0JCS8vIHRlbGwgdGhpcyBjb21lZGkKKwkJLyogdGVsbCB0aGlzIGNvbWVkaSAqLwogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOwotCQljb21lZGlfZXZlbnQodGhpc191c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYsIHMpOwotCQkvLyBzdG9wIHRoZSB0cmFuc2ZlciB3L28gdW5saW5rCi0JCXVzYmR1eGZhc3RfYWlfc3RvcCh0aGlzX3VzYmR1eGZhc3RzdWIsIDApOworCQljb21lZGlfZXZlbnQodWRmcy0+Y29tZWRpZGV2LCBzKTsKKwkJLyogc3RvcCB0aGUgdHJhbnNmZXIgdy9vIHVubGluayAqLworCQl1c2JkdXhmYXN0X2FpX3N0b3AodWRmcywgMCk7CiAJCXJldHVybjsKIAogCWRlZmF1bHQ6Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IG5vbi16ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQgaW4gYWkgaW50ciBjb250ZXh0OiAlZFxuIiwgdGhpc191c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYtPm1pbm9yLCB1cmItPnN0YXR1cyk7CisJCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IG5vbi16ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQgaW4gIgorCQkgICAgICAgImFpIGludHIgY29udGV4dDogJWRcbiIsCisJCSAgICAgICB1ZGZzLT5jb21lZGlkZXYtPm1pbm9yLCB1cmItPnN0YXR1cyk7CiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7Ci0JCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldiwgcyk7Ci0JCXVzYmR1eGZhc3RfYWlfc3RvcCh0aGlzX3VzYmR1eGZhc3RzdWIsIDApOworCQljb21lZGlfZXZlbnQodWRmcy0+Y29tZWRpZGV2LCBzKTsKKwkJdXNiZHV4ZmFzdF9haV9zdG9wKHVkZnMsIDApOwogCQlyZXR1cm47CiAJfQogCiAJcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCWlmICghdGhpc191c2JkdXhmYXN0c3ViLT5pZ25vcmUpIHsKLQkJaWYgKCEodGhpc191c2JkdXhmYXN0c3ViLT5haV9jb250aW5vdXMpKSB7Ci0JCQkvLyBub3QgY29udGlub3VzLCBmaXhlZCBudW1iZXIgb2Ygc2FtcGxlcworCWlmICghdWRmcy0+aWdub3JlKSB7CisJCWlmICghdWRmcy0+YWlfY29udGlub3VzKSB7CisJCQkvKiBub3QgY29udGlub3VzLCBmaXhlZCBudW1iZXIgb2Ygc2FtcGxlcyAqLwogCQkJbiA9IHVyYi0+YWN0dWFsX2xlbmd0aCAvIHNpemVvZih1aW50MTZfdCk7Ci0JCQlpZiAodW5saWtlbHkodGhpc191c2JkdXhmYXN0c3ViLT5haV9zYW1wbGVfY291bnQgPCBuKSkgewotCQkJCS8vIHdlIGhhdmUgc2VuZCBvbmx5IGEgZnJhY3Rpb24gb2YgdGhlIGJ5dGVzIHJlY2VpdmVkCisJCQlpZiAodW5saWtlbHkodWRmcy0+YWlfc2FtcGxlX2NvdW50IDwgbikpIHsKKwkJCQkvKgorCQkJCSAqIHdlIGhhdmUgc2VuZCBvbmx5IGEgZnJhY3Rpb24gb2YgdGhlIGJ5dGVzCisJCQkJICogcmVjZWl2ZWQKKwkJCQkgKi8KIAkJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsCiAJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3NhbXBsZV9jb3VudCAqCi0JCQkJCXNpemVvZih1aW50MTZfdCkpOwotCQkJCXVzYmR1eGZhc3RfYWlfc3RvcCh0aGlzX3VzYmR1eGZhc3RzdWIsIDApOwotCQkJCS8vIHNheSBjb21lZGkgdGhhdCB0aGUgYWNxdWlzdGlvbiBpcyBvdmVyCisJCQkJCXVkZnMtPmFpX3NhbXBsZV9jb3VudAorCQkJCQkqIHNpemVvZih1aW50MTZfdCkpOworCQkJCXVzYmR1eGZhc3RfYWlfc3RvcCh1ZGZzLCAwKTsKKwkJCQkvKiBzYXkgY29tZWRpIHRoYXQgdGhlIGFjcXVpc3Rpb24gaXMgb3ZlciAqLwogCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKLQkJCQljb21lZGlfZXZlbnQodGhpc191c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYsIHMpOworCQkJCWNvbWVkaV9ldmVudCh1ZGZzLT5jb21lZGlkZXYsIHMpOwogCQkJCXJldHVybjsKIAkJCX0KLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+YWlfc2FtcGxlX2NvdW50IC09IG47CisJCQl1ZGZzLT5haV9zYW1wbGVfY291bnQgLT0gbjsKIAkJfQotCQkvLyB3cml0ZSB0aGUgZnVsbCBidWZmZXIgdG8gY29tZWRpCi0JCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywKLQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkvKiB3cml0ZSB0aGUgZnVsbCBidWZmZXIgdG8gY29tZWRpICovCisJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAotCQkvLyB0ZWxsIGNvbWVkaSB0aGF0IGRhdGEgaXMgdGhlcmUKLQkJY29tZWRpX2V2ZW50KHRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LCBzKTsKKwkJLyogdGVsbCBjb21lZGkgdGhhdCBkYXRhIGlzIHRoZXJlICovCisJCWNvbWVkaV9ldmVudCh1ZGZzLT5jb21lZGlkZXYsIHMpOwogCiAJfSBlbHNlIHsKLQkJLy8gaWdub3JlIHRoaXMgcGFja2V0Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+aWdub3JlLS07CisJCS8qIGlnbm9yZSB0aGlzIHBhY2tldCAqLworCQl1ZGZzLT5pZ25vcmUtLTsKIAl9CiAKLQkvLyBjb21tYW5kIGlzIHN0aWxsIHJ1bm5pbmcKLQkvLyByZXN1Ym1pdCB1cmIgZm9yIEJVTEsgdHJhbnNmZXIKLQl1cmItPmRldiA9IHRoaXNfdXNiZHV4ZmFzdHN1Yi0+dXNiZGV2OworCS8qCisJICogY29tbWFuZCBpcyBzdGlsbCBydW5uaW5nCisJICogcmVzdWJtaXQgdXJiIGZvciBCVUxLIHRyYW5zZmVyCisJICovCisJdXJiLT5kZXYgPSB1ZGZzLT51c2JkZXY7CiAJdXJiLT5zdGF0dXMgPSAwOwogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogdXJiIHJlc3VibSBmYWlsZWQ6ICVkIiwKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vciwgZXJyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdDogdXJiIHJlc3VibSBmYWlsZWQ6ICVkIiwKKwkJCXVkZnMtPmNvbWVkaWRldi0+bWlub3IsIGVycik7CiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7Ci0JCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldiwgcyk7Ci0JCXVzYmR1eGZhc3RfYWlfc3RvcCh0aGlzX3VzYmR1eGZhc3RzdWIsIDApOworCQljb21lZGlfZXZlbnQodWRmcy0+Y29tZWRpZGV2LCBzKTsKKwkJdXNiZHV4ZmFzdF9haV9zdG9wKHVkZnMsIDApOwogCX0KIH0KIAotc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3N0YXJ0KHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWIpCitzdGF0aWMgaW50IHVzYmR1eGZhc3RzdWJfc3RhcnQoc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcykKIHsKLQlpbnQgZXJyY29kZSA9IDA7CisJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIGxvY2FsX3RyYW5zZmVyX2J1ZmZlclsxNl07CiAKLQlpZiAodXNiZHV4ZmFzdHN1Yi0+cHJvYmVkKSB7Ci0JCS8vIDdmOTIgdG8gemVybwotCQlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAwOwotCQllcnJjb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYmR1eGZhc3RzdWItPnVzYmRldiwKLQkJCS8vIGNyZWF0ZSBhIHBpcGUgZm9yIGEgY29udHJvbCB0cmFuc2ZlcgotCQkJdXNiX3NuZGN0cmxwaXBlKHVzYmR1eGZhc3RzdWItPnVzYmRldiwgMCksCi0JCQkvLyBiUmVxdWVzdCwgIkZpcm13YXJlIgotCQkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwKLQkJCS8vIGJtUmVxdWVzdFR5cGUKLQkJCVZFTkRPUl9ESVJfT1VULAotCQkJLy8gVmFsdWUKLQkJCVVTQkRVWEZBU1RTVUJfQ1BVQ1MsCi0JCQkvLyBJbmRleAotCQkJMHgwMDAwLAotCQkJLy8gYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIgYnVmZmVyCi0JCQlsb2NhbF90cmFuc2Zlcl9idWZmZXIsCi0JCQkvLyBMZW5ndGgKLQkJCTEsCi0JCQkvLyBUaW1lb3V0Ci0JCQlFWlRJTUVPVVQpOwotCQlpZiAoZXJyY29kZSA8IDApIHsKLQkJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IGNvbnRyb2wgbXNnIGZhaWxlZCAoc3RhcnQpXG4iKTsKLQkJCXJldHVybiBlcnJjb2RlOwotCQl9CisJLyogN2Y5MiB0byB6ZXJvICovCisJbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzBdID0gMDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRmcy0+dXNiZGV2LAorCQl1c2Jfc25kY3RybHBpcGUodWRmcy0+dXNiZGV2LCAwKSwKKwkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwJLyogYlJlcXVlc3QsICJGaXJtd2FyZSIgKi8KKwkJVkVORE9SX0RJUl9PVVQsCQkvKiBibVJlcXVlc3RUeXBlICovCisJCVVTQkRVWEZBU1RTVUJfQ1BVQ1MsCS8qIFZhbHVlICovCisJCTB4MDAwMCwJCQkvKiBJbmRleCAqLworCQlsb2NhbF90cmFuc2Zlcl9idWZmZXIsCS8qIGFkZHJlc3Mgb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlciAqLworCQkxLAkJCS8qIExlbmd0aCAqLworCQlFWlRJTUVPVVQpOwkJLyogVGltZW91dCAqLworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IGNvbnRyb2wgbXNnIGZhaWxlZCAoc3RhcnQpXG4iKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3N0b3AodXNiZHV4ZmFzdHN1Yl90ICogdXNiZHV4ZmFzdHN1YikKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdHN1Yl9zdG9wKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMpCiB7Ci0JaW50IGVycmNvZGUgPSAwOwotCisJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIGxvY2FsX3RyYW5zZmVyX2J1ZmZlclsxNl07Ci0JaWYgKHVzYmR1eGZhc3RzdWItPnByb2JlZCkgewotCQkvLyA3ZjkyIHRvIG9uZQotCQlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAxOwotCQllcnJjb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYmR1eGZhc3RzdWItPnVzYmRldiwKLQkJCXVzYl9zbmRjdHJscGlwZSh1c2JkdXhmYXN0c3ViLT51c2JkZXYsIDApLAotCQkJLy8gYlJlcXVlc3QsICJGaXJtd2FyZSIKLQkJCVVTQkRVWEZBU1RTVUJfRklSTVdBUkUsCi0JCQkvLyBibVJlcXVlc3RUeXBlCi0JCQlWRU5ET1JfRElSX09VVCwKLQkJCS8vIFZhbHVlCi0JCQlVU0JEVVhGQVNUU1VCX0NQVUNTLAotCQkJLy8gSW5kZXgKLQkJCTB4MDAwMCwgbG9jYWxfdHJhbnNmZXJfYnVmZmVyLAotCQkJLy8gTGVuZ3RoCi0JCQkxLAotCQkJLy8gVGltZW91dAotCQkJRVpUSU1FT1VUKTsKLQkJaWYgKGVycmNvZGUgPCAwKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNvbnRyb2wgbXNnIGZhaWxlZCAoc3RvcClcbiIpOwotCQkJcmV0dXJuIGVycmNvZGU7Ci0JCX0KKworCS8qIDdmOTIgdG8gb25lICovCisJbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzBdID0gMTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRmcy0+dXNiZGV2LAorCQl1c2Jfc25kY3RybHBpcGUodWRmcy0+dXNiZGV2LCAwKSwKKwkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwJLyogYlJlcXVlc3QsICJGaXJtd2FyZSIgKi8KKwkJVkVORE9SX0RJUl9PVVQsCQkvKiBibVJlcXVlc3RUeXBlICovCisJCVVTQkRVWEZBU1RTVUJfQ1BVQ1MsCS8qIFZhbHVlICovCisJCTB4MDAwMCwJCQkvKiBJbmRleCAqLworCQlsb2NhbF90cmFuc2Zlcl9idWZmZXIsCisJCTEsCQkJLyogTGVuZ3RoICovCisJCUVaVElNRU9VVCk7CQkvKiBUaW1lb3V0ICovCisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBjb250cm9sIG1zZyBmYWlsZWQgIgorCQkgICAgICAgIihzdG9wKVxuIik7CisJCXJldHVybiByZXQ7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdHN1Yl91cGxvYWQodXNiZHV4ZmFzdHN1Yl90ICogdXNiZHV4ZmFzdHN1YiwKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdHN1Yl91cGxvYWQoc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcywKIAl1bnNpZ25lZCBjaGFyICpsb2NhbF90cmFuc2Zlcl9idWZmZXIsCiAJdW5zaWduZWQgaW50IHN0YXJ0QWRkciwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQgZXJyY29kZTsKKwlpbnQgcmV0OwogCi0JaWYgKHVzYmR1eGZhc3RzdWItPnByb2JlZCkgewogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogdXBsb2FkaW5nICVkIGJ5dGVzIiwKLQkJCXVzYmR1eGZhc3RzdWItPmNvbWVkaWRldi0+bWlub3IsIGxlbik7Ci0JCXByaW50aygiIHRvIGFkZHIgJWQsIGZpcnN0IGJ5dGU9JWQuXG4iLAotCQkJc3RhcnRBZGRyLCBsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0pOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGk6IHVzYmR1eGZhc3Q6IHVwbG9hZGluZyAlZCBieXRlcyIsIGxlbik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiB0byBhZGRyICVkLCBmaXJzdCBieXRlPSVkLlxuIiwKKwkJc3RhcnRBZGRyLCBsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0pOwogI2VuZGlmCi0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJdXNiX3NuZGN0cmxwaXBlKHVzYmR1eGZhc3RzdWItPnVzYmRldiwgMCksCi0JCQkvLyBicmVxdWVzdCwgZmlybXdhcmUKLQkJCVVTQkRVWEZBU1RTVUJfRklSTVdBUkUsCi0JCQkvLyBibVJlcXVlc3RUeXBlCi0JCQlWRU5ET1JfRElSX09VVCwKLQkJCS8vIHZhbHVlCi0JCQlzdGFydEFkZHIsCi0JCQkvLyBpbmRleAotCQkJMHgwMDAwLAotCQkJLy8gb3VyIGxvY2FsIHNhZmUgYnVmZmVyCi0JCQlsb2NhbF90cmFuc2Zlcl9idWZmZXIsCi0JCQkvLyBsZW5ndGgKLQkJCWxlbiwKLQkJCS8vIHRpbWVvdXQKLQkJCUVaVElNRU9VVCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZnMtPnVzYmRldiwKKwkJdXNiX3NuZGN0cmxwaXBlKHVkZnMtPnVzYmRldiwgMCksCisJCVVTQkRVWEZBU1RTVUJfRklSTVdBUkUsIC8qIGJyZXF1ZXN0LCBmaXJtd2FyZSAqLworCQlWRU5ET1JfRElSX09VVCwJCS8qIGJtUmVxdWVzdFR5cGUgKi8KKwkJc3RhcnRBZGRyLAkJLyogdmFsdWUgKi8KKwkJMHgwMDAwLAkJCS8qIGluZGV4ICovCisJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwJLyogb3VyIGxvY2FsIHNhZmUgYnVmZmVyICovCisJCWxlbiwJCQkvKiBsZW5ndGggKi8KKwkJRVpUSU1FT1VUKTsJCS8qIHRpbWVvdXQgKi8KKwogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiByZXN1bHQ9JWRcbiIsIGVycmNvZGUpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGlfOiB1c2JkdXhmYXN0OiByZXN1bHQ9JWRcbiIsIHJldCk7CiAjZW5kaWYKLQkJaWYgKGVycmNvZGUgPCAwKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVwcGxvYWQgZmFpbGVkXG4iKTsKLQkJCXJldHVybiBlcnJjb2RlOwotCQl9Ci0JfSBlbHNlIHsKLQkJLy8gbm8gZGV2aWNlIG9uIHRoZSBidXMgZm9yIHRoaXMgaW5kZXgKLQkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVwcGxvYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAotaW50IGZpcm13YXJlVXBsb2FkKHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWIsCi0JdW5zaWduZWQgY2hhciAqZmlybXdhcmVCaW5hcnksIGludCBzaXplRmlybXdhcmUpCitpbnQgZmlybXdhcmVVcGxvYWQoc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcywgdW5zaWduZWQgY2hhciAqZmlybXdhcmVCaW5hcnksCisJCSAgIGludCBzaXplRmlybXdhcmUpCiB7CiAJaW50IHJldDsKIAotCWlmICghZmlybXdhcmVCaW5hcnkpIHsKKwlpZiAoIWZpcm13YXJlQmluYXJ5KQogCQlyZXR1cm4gMDsKLQl9Ci0JcmV0ID0gdXNiZHV4ZmFzdHN1Yl9zdG9wKHVzYmR1eGZhc3RzdWIpOworCisJcmV0ID0gdXNiZHV4ZmFzdHN1Yl9zdG9wKHVkZnMpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogY2FuIG5vdCBzdG9wIGZpcm13YXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBjYW4gbm90IHN0b3AgZmlybXdhcmVcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlyZXQgPSB1c2JkdXhmYXN0c3ViX3VwbG9hZCh1c2JkdXhmYXN0c3ViLAotCQlmaXJtd2FyZUJpbmFyeSwgMCwgc2l6ZUZpcm13YXJlKTsKKwlyZXQgPSB1c2JkdXhmYXN0c3ViX3VwbG9hZCh1ZGZzLCBmaXJtd2FyZUJpbmFyeSwgMCwgc2l6ZUZpcm13YXJlKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGZpcm13YXJlIHVwbG9hZCBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGZpcm13YXJlIHVwbG9hZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlyZXQgPSB1c2JkdXhmYXN0c3ViX3N0YXJ0KHVzYmR1eGZhc3RzdWIpOworCXJldCA9IHVzYmR1eGZhc3RzdWJfc3RhcnQodWRmcyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBjYW4gbm90IHN0YXJ0IGZpcm13YXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBjYW4gbm90IHN0YXJ0IGZpcm13YXJlXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVzYmR1eGZhc3RzdWJfc3VibWl0X0luVVJCcyh1c2JkdXhmYXN0c3ViX3QgKiB1c2JkdXhmYXN0c3ViKQoraW50IHVzYmR1eGZhc3RzdWJfc3VibWl0X0luVVJCcyhzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzKQogewotCWludCBlcnJGbGFnOworCWludCByZXQ7CiAKLQlpZiAoIXVzYmR1eGZhc3RzdWIpIHsKKwlpZiAoIXVkZnMpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLQl1c2JfZmlsbF9idWxrX3VyYih1c2JkdXhmYXN0c3ViLT51cmJJbiwKLQkJdXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQl1c2JfcmN2YnVsa3BpcGUodXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LCBCVUxLSU5FUCksCi0JCXVzYmR1eGZhc3RzdWItPnRyYW5zZmVyX2J1ZmZlciwKLQkJU0laRUlOQlVGLCB1c2JkdXhmYXN0c3ViX2FpX0lycSwgdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2KTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVkZnMtPnVyYkluLCB1ZGZzLT51c2JkZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZSh1ZGZzLT51c2JkZXYsIEJVTEtJTkVQKSwKKwkJCSAgdWRmcy0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICBTSVpFSU5CVUYsIHVzYmR1eGZhc3RzdWJfYWlfSXJxLCB1ZGZzLT5jb21lZGlkZXYpOwogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IHN1Ym1pdHRpbmcgaW4tdXJiOiAleCwleFxuIiwKLQkJdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vciwKLQkJKGludCkodXNiZHV4ZmFzdHN1Yi0+dXJiSW4tPmNvbnRleHQpLAotCQkoaW50KSh1c2JkdXhmYXN0c3ViLT51cmJJbi0+ZGV2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBzdWJtaXR0aW5nIGluLXVyYjogIgorCSAgICAgICAiMHglcCwweCVwXG4iLCB1ZGZzLT5jb21lZGlkZXYtPm1pbm9yLCB1ZGZzLT51cmJJbi0+Y29udGV4dCwKKwkJdWRmcy0+dXJiSW4tPmRldik7CiAjZW5kaWYKLQllcnJGbGFnID0gdXNiX3N1Ym1pdF91cmIodXNiZHV4ZmFzdHN1Yi0+dXJiSW4sIEdGUF9BVE9NSUMpOwotCWlmIChlcnJGbGFnKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogYWk6IHVzYl9zdWJtaXRfdXJiIGVycm9yICVkXG4iLAotCQkJZXJyRmxhZyk7Ci0JCXJldHVybiBlcnJGbGFnOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVkZnMtPnVyYkluLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogYWk6IHVzYl9zdWJtaXRfdXJiIGVycm9yIgorCQkgICAgICAgIiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9jbWQgKiBjbWQpCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwLCBzdG9wX21hc2sgPSAwOwotCWxvbmcgaW50IHN0ZXBzLCB0bXAgPSAwOworCWxvbmcgaW50IHN0ZXBzLCB0bXA7CiAJaW50IG1pblNhbXBsUGVyOwotCXVzYmR1eGZhc3RzdWJfdCAqdGhpc191c2JkdXhmYXN0c3ViID0gZGV2LT5wcml2YXRlOwotCWlmICghKHRoaXNfdXNiZHV4ZmFzdHN1Yi0+cHJvYmVkKSkgeworCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoIXVkZnMtPnByb2JlZCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfY21kdGVzdFxuIiwgZGV2LT5taW5vcik7Ci0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogY29udmVydF9hcmc9JXUgc2Nhbl9iZWdpbl9hcmc9JXVcbiIsCi0JCWRldi0+bWlub3IsIGNtZC0+Y29udmVydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9jbWR0ZXN0XG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGNvbnZlcnRfYXJnPSV1ICIKKwkgICAgICAgInNjYW5fYmVnaW5fYXJnPSV1XG4iLAorCSAgICAgICBkZXYtPm1pbm9yLCBjbWQtPmNvbnZlcnRfYXJnLCBjbWQtPnNjYW5fYmVnaW5fYXJnKTsKICNlbmRpZgogCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCiAKQEAgLTYyMSw3ICs2MjUsOSBAQAogCWlmIChlcnIpCiAJCXJldHVybiAxOwogCi0JLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwkvKgorCSAqIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlCisJICovCiAKIAlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYKIAkJY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19JTlQpCkBAIC02MzYsNyArNjQyLDcgQEAKIAkJY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKIAkJZXJyKys7CiAKLQkvLyBjYW4ndCBoYXZlIGV4dGVybmFsIHN0b3AgYW5kIHN0YXJ0IHRyaWdnZXJzIGF0IG9uY2UKKwkvKiBjYW4ndCBoYXZlIGV4dGVybmFsIHN0b3AgYW5kIHN0YXJ0IHRyaWdnZXJzIGF0IG9uY2UgKi8KIAlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkKIAkJZXJyKys7CiAKQEAgLTY1MCwyOSArNjU2LDI4IEBACiAJCWVycisrOwogCX0KIAotCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKQogCQllcnIrKzsKLQl9CisKIAlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKIAkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKIAkJZXJyKys7CiAJfQogCi0JaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDEpIHsKKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMSkKIAkJbWluU2FtcGxQZXIgPSAxOwotCX0gZWxzZSB7CisJZWxzZQogCQltaW5TYW1wbFBlciA9IE1JTl9TQU1QTElOR19QRVJJT0Q7Ci0JfQogCiAJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewogCQlzdGVwcyA9IGNtZC0+Y29udmVydF9hcmcgKiAzMDsKLQkJaWYgKHN0ZXBzIDwgKG1pblNhbXBsUGVyICogMTAwMCkpIHsKKwkJaWYgKHN0ZXBzIDwgKG1pblNhbXBsUGVyICogMTAwMCkpCiAJCQlzdGVwcyA9IG1pblNhbXBsUGVyICogMTAwMDsKLQkJfQotCQlpZiAoc3RlcHMgPiAoTUFYX1NBTVBMSU5HX1BFUklPRCAqIDEwMDApKSB7CisKKwkJaWYgKHN0ZXBzID4gKE1BWF9TQU1QTElOR19QRVJJT0QgKiAxMDAwKSkKIAkJCXN0ZXBzID0gTUFYX1NBTVBMSU5HX1BFUklPRCAqIDEwMDA7Ci0JCX0KLQkJLy8gY2FsYyBhcmcgYWdhaW4KKworCQkvKiBjYWxjIGFyZyBhZ2FpbiAqLwogCQl0bXAgPSBzdGVwcyAvIDMwOwogCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSB0bXApIHsKIAkJCWNtZC0+Y29udmVydF9hcmcgPSB0bXA7CkBAIC02ODAsMTAgKzY4NSwxMCBAQAogCQl9CiAJfQogCi0JaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCiAJCWVycisrOwotCX0KLQkvLyBzdG9wIHNvdXJjZQorCisJLyogc3RvcCBzb3VyY2UgKi8KIAlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKIAljYXNlIFRSSUdfQ09VTlQ6CiAJCWlmICghY21kLT5zdG9wX2FyZykgewpAQCAtNjk3LDcgKzcwMiwxMCBAQAogCQkJZXJyKys7CiAJCX0KIAkJYnJlYWs7Ci0JCS8vIFRSSUdfRVhUIGRvZXNuJ3QgY2FyZSBzaW5jZSBpdCBkb2Vzbid0IHRyaWdnZXIgb2ZmIGEgbnVtYmVyZWQgY2hhbm5lbAorCQkvKgorCQkgKiBUUklHX0VYVCBkb2Vzbid0IGNhcmUgc2luY2UgaXQgZG9lc24ndCB0cmlnZ2VyCisJCSAqIG9mZiBhIG51bWJlcmVkIGNoYW5uZWwKKwkJICovCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNzExLDYwMCArNzE5LDY4OCBAQAogCiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9pbnR0cmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCB0cmlnbnVtKQorc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50IHRyaWdudW0pCiB7CiAJaW50IHJldDsKLQl1c2JkdXhmYXN0c3ViX3QgKnRoaXNfdXNiZHV4ZmFzdHN1YiA9IGRldi0+cHJpdmF0ZTsKLQlpZiAoIXRoaXNfdXNiZHV4ZmFzdHN1YikgeworCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoIXVkZnMpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLQlkb3duKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7Ci0JaWYgKCEodGhpc191c2JkdXhmYXN0c3ViLT5wcm9iZWQpKSB7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisKKwlkb3duKCZ1ZGZzLT5zZW0pOworCWlmICghdWRmcy0+cHJvYmVkKSB7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfaW50dHJpZ1xuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0X2FpX2ludHRyaWdcbiIsIGRldi0+bWlub3IpOwogI2VuZGlmCiAKIAlpZiAodHJpZ251bSAhPSAwKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfaW50dHJpZzogaW52YWxpZCB0cmlnbnVtXG4iLAotCQkJZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfaW50dHJpZzogaW52YWxpZCIKKwkJICAgICAgICIgdHJpZ251bVxuIiwgZGV2LT5taW5vcik7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKCEodGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZykpIHsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZyA9IDE7Ci0JCXJldCA9IHVzYmR1eGZhc3RzdWJfc3VibWl0X0luVVJCcyh0aGlzX3VzYmR1eGZhc3RzdWIpOworCWlmICghdWRmcy0+YWlfY21kX3J1bm5pbmcpIHsKKwkJdWRmcy0+YWlfY21kX3J1bm5pbmcgPSAxOworCQlyZXQgPSB1c2JkdXhmYXN0c3ViX3N1Ym1pdF9JblVSQnModWRmcyk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0X2FpX2ludHRyaWc6IHVyYlN1Ym1pdDogZXJyPSVkXG4iLCBkZXYtPm1pbm9yLCByZXQpOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZyA9IDA7Ci0JCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9pbnR0cmlnOiAiCisJCQkgICAgICAgInVyYlN1Ym1pdDogZXJyPSVkXG4iLCBkZXYtPm1pbm9yLCByZXQpOworCQkJdWRmcy0+YWlfY21kX3J1bm5pbmcgPSAwOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKIAl9IGVsc2UgewotCQlwcmludGsoImNvbWVkaSVkOiBhaV9pbnR0cmlnIGJ1dCBhY3F1IGlzIGFscmVhZHkgcnVubmluZ1xuIiwKLQkJCWRldi0+bWlub3IpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBhaV9pbnR0cmlnIGJ1dCBhY3F1IGlzIGFscmVhZHkiCisJCSAgICAgICAiIHJ1bm5pbmdcbiIsIGRldi0+bWlub3IpOwogCX0KLQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCXVwKCZ1ZGZzLT5zZW0pOwogCXJldHVybiAxOwogfQogCi0vLyBvZmZzZXRzIGZvciB0aGUgR1BJRiBieXRlcwotLy8gdGhlIGZpcnN0IGJ5dGUgaXMgdGhlIGNvbW1hbmQgYnl0ZQotI2RlZmluZSBMRU5CQVNFIDErMHgwMAotI2RlZmluZSBPUEJBU0UgIDErMHgwOAotI2RlZmluZSBPVVRCQVNFIDErMHgxMAotI2RlZmluZSBMT0dCQVNFIDErMHgxOAorLyoKKyAqIG9mZnNldHMgZm9yIHRoZSBHUElGIGJ5dGVzCisgKiB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgY29tbWFuZCBieXRlCisgKi8KKyNkZWZpbmUgTEVOQkFTRQkoMSsweDAwKQorI2RlZmluZSBPUEJBU0UJKDErMHgwOCkKKyNkZWZpbmUgT1VUQkFTRQkoMSsweDEwKQorI2RlZmluZSBMT0dCQVNFCSgxKzB4MTgpCiAKLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jbWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCWNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAl1bnNpZ25lZCBpbnQgY2hhbiwgZ2Fpbiwgcm5nbWFzayA9IDB4ZmY7CiAJaW50IGksIGosIHJldDsKLQl1c2JkdXhmYXN0c3ViX3QgKnRoaXNfdXNiZHV4ZmFzdHN1YiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzOwogCWludCByZXN1bHQ7CiAJbG9uZyBzdGVwcywgc3RlcHNfdG1wOwogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfY21kXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfY21kXG4iLCBkZXYtPm1pbm9yKTsKICNlbmRpZgotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7CisJdWRmcyA9IGRldi0+cHJpdmF0ZTsKKwlpZiAoIXVkZnMpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLQlkb3duKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7Ci0JaWYgKCEodGhpc191c2JkdXhmYXN0c3ViLT5wcm9iZWQpKSB7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisKKwlkb3duKCZ1ZGZzLT5zZW0pOworCWlmICghdWRmcy0+cHJvYmVkKSB7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKHRoaXNfdXNiZHV4ZmFzdHN1Yi0+YWlfY21kX3J1bm5pbmcpIHsKLQkJcHJpbnRrKCJjb21lZGklZDogYWlfY21kIG5vdCBwb3NzaWJsZS4gQW5vdGhlciBhaV9jbWQgaXMgcnVubmluZy5cbiIsIGRldi0+bWlub3IpOwotCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCWlmICh1ZGZzLT5haV9jbWRfcnVubmluZykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBhaV9jbWQgbm90IHBvc3NpYmxlLiBBbm90aGVyIGFpX2NtZCIKKwkJICAgICAgICIgaXMgcnVubmluZy5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLy8gc2V0IGN1cnJlbnQgY2hhbm5lbCBvZiB0aGUgcnVubmluZyBhcXVpc2l0aW9uIHRvIHplcm8KKwkvKiBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFxdWlzaXRpb24gdG8gemVybyAqLwogCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAKLQkvLyBpZ25vcmUgdGhlIGZpcnN0IGJ1ZmZlcnMgZnJvbSB0aGUgZGV2aWNlIGlmIHRoZXJlIGlzIGFuIGVycm9yIGNvbmRpdGlvbgotCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+aWdub3JlID0gUEFDS0VUU19UT19JR05PUkU7CisJLyoKKwkgKiBpZ25vcmUgdGhlIGZpcnN0IGJ1ZmZlcnMgZnJvbSB0aGUgZGV2aWNlIGlmIHRoZXJlCisJICogaXMgYW4gZXJyb3IgY29uZGl0aW9uCisJICovCisJdWRmcy0+aWdub3JlID0gUEFDS0VUU19UT19JR05PUkU7CiAKIAlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiAwKSB7CiAJCWdhaW4gPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKIAkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyArK2kpIHsKIAkJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOwogCQkJaWYgKGNoYW4gIT0gaSkgewotCQkJCXByaW50aygiY29tZWRpJWQ6IGNtZCBpcyBhY2NlcHRpbmcgb25seSBjb25zZWN1dGl2ZSBjaGFubmVscy5cbiIsIGRldi0+bWlub3IpOwotCQkJCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogY21kIGlzIGFjY2VwdGluZyAiCisJCQkJICAgICAgICJvbmx5IGNvbnNlY3V0aXZlIGNoYW5uZWxzLlxuIiwKKwkJCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpZiAoKGdhaW4gIT0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkpCiAJCQkJJiYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gMykpIHsKLQkJCQlwcmludGsoImNvbWVkaSVkOiB0aGUgZ2FpbiBtdXN0IGJlIHRoZSBzYW1lIGZvciBhbGwgY2hhbm5lbHMuXG4iLCBkZXYtPm1pbm9yKTsKLQkJCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHRoZSBnYWluIG11c3QgYmUiCisJCQkJICAgICAgICIgdGhlIHNhbWUgZm9yIGFsbCBjaGFubmVscy5cbiIsCisJCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJCXVwKCZ1ZGZzLT5zZW0pOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWYgKGkgPj0gTlVNQ0hBTk5FTFMpIHsKLQkJCQlwcmludGsoImNvbWVkaSVkOiBjaGFubmVsIGxpc3QgdG9vIGxvbmdcbiIsCi0JCQkJCWRldi0+bWlub3IpOworCQkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGNoYW5uZWwgbGlzdCB0b28iCisJCQkJICAgICAgICIgbG9uZ1xuIiwgZGV2LT5taW5vcik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CiAJc3RlcHMgPSAwOwogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogc2Nhbl9iZWdpbl9zcmM9PVRSSUdfVElNRVIgbm90IHZhbGlkLlxuIiwgZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6ICIKKwkJICAgICAgICJzY2FuX2JlZ2luX3NyYz09VFJJR19USU1FUiBub3QgdmFsaWQuXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikKIAkJc3RlcHMgPSAoY21kLT5jb252ZXJ0X2FyZyAqIDMwKSAvIDEwMDA7Ci0JfQorCiAJaWYgKChzdGVwcyA8IE1JTl9TQU1QTElOR19QRVJJT0QpICYmIChjbWQtPmNoYW5saXN0X2xlbiAhPSAxKSkgewotCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBhaV9jbWQ6IHN0ZXBzPSVsZCwgc2Nhbl9iZWdpbl9hcmc9JWQuIE5vdCBwcm9wZXJseSB0ZXN0ZWQgYnkgY21kdGVzdD9cbiIsIGRldi0+bWlub3IsIHN0ZXBzLCBjbWQtPnNjYW5fYmVnaW5fYXJnKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdDogYWlfY21kOiBzdGVwcz0lbGQsICIKKwkJICAgICAgICJzY2FuX2JlZ2luX2FyZz0lZC4gTm90IHByb3Blcmx5IHRlc3RlZCBieSBjbWR0ZXN0P1xuIiwKKwkJICAgICAgIGRldi0+bWlub3IsIHN0ZXBzLCBjbWQtPnNjYW5fYmVnaW5fYXJnKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoc3RlcHMgPiBNQVhfU0FNUExJTkdfUEVSSU9EKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGFpX2NtZDogc2FtcGxpbmcgcmF0ZSB0b28gbG93LlxuIiwKLQkJCWRldi0+bWlub3IpOwotCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBhaV9jbWQ6IHNhbXBsaW5nIHJhdGUgIgorCQkgICAgICAgInRvbyBsb3cuXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSAmJiAoY21kLT5jaGFubGlzdF9sZW4gIT0gMSkKIAkJJiYgKGNtZC0+Y2hhbmxpc3RfbGVuICE9IDE2KSkgewotCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBhaV9jbWQ6IFRSSUdfRVhUIG9ubHkgd2l0aCAxIG9yIDE2IGNoYW5uZWxzIHBvc3NpYmxlLlxuIiwgZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGFpX2NtZDogVFJJR19FWFQgb25seSIKKwkJICAgICAgICIgd2l0aCAxIG9yIDE2IGNoYW5uZWxzIHBvc3NpYmxlLlxuIiwgZGV2LT5taW5vcik7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IHN0ZXBzPSVsZCwgY29udmVydF9hcmc9JXUsIGFpX3RpbWVyPSV1XG4iLAotCQlkZXYtPm1pbm9yLAotCQlzdGVwcywgY21kLT5jb252ZXJ0X2FyZywgdGhpc191c2JkdXhmYXN0c3ViLT5haV90aW1lcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBzdGVwcz0lbGQsIGNvbnZlcnRfYXJnPSV1XG4iLAorCSAgICAgICBkZXYtPm1pbm9yLCBzdGVwcywgY21kLT5jb252ZXJ0X2FyZyk7CiAjZW5kaWYKIAogCXN3aXRjaCAoY21kLT5jaGFubGlzdF9sZW4pIHsKLQkJLy8gb25lIGNoYW5uZWwKIAljYXNlIDE6CisJCS8qCisJCSAqIG9uZSBjaGFubmVsCisJCSAqLworCiAJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKSA+IDApCiAJCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJCWVsc2UKIAkJCXJuZ21hc2sgPSAweGZmOwogCi0JCS8vIGZvciBleHRlcm5hbCB0cmlnZ2VyOiBsb29waW5nIGluIHRoaXMgc3RhdGUgdW50aWwgdGhlIFJEWTAgcGluCi0JCS8vIGJlY29tZXMgemVybwotCQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsJLy8gd2UgbG9vcCBoZXJlIHVudGlsIHJlYWR5IGhhcyBiZWVuIHNldAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDBdID0gMHgwMTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMF0gPSAweDAxOwkvLyBkZWNlaXNpb24gc3RhdGUgdy9vIGRhdGEKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAwXSA9Ci0JCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAweDAwOwkvLyBSRFkwID0gMAotCQl9IGVsc2UgewkvLyB3ZSBqdXN0IHByb2NlZWQgdG8gc3RhdGUgMQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDBdID0gMTsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDBdID0gMDsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAwXSA9Ci0JCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAwOworCQkvKgorCQkgKiBmb3IgZXh0ZXJuYWwgdHJpZ2dlcjogbG9vcGluZyBpbiB0aGlzIHN0YXRlIHVudGlsCisJCSAqIHRoZSBSRFkwIHBpbiBiZWNvbWVzIHplcm8KKwkJICovCisKKwkJLyogd2UgbG9vcCBoZXJlIHVudGlsIHJlYWR5IGhhcyBiZWVuIHNldCAqLworCQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJCS8qIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDAgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzBdID0gMHgwMTsKKwkJCS8qIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSswXSA9IDB4MDE7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSswXSA9IDB4RkYgJiBybmdtYXNrOworCQkJLyogUkRZMCA9IDAgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzBdID0gMHgwMDsKKwkJfSBlbHNlIHsJLyogd2UganVzdCBwcm9jZWVkIHRvIHN0YXRlIDEgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzBdID0gMTsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMF0gPSAwOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMF0gPSAweEZGICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzBdID0gMDsKIAkJfQogCiAJCWlmIChzdGVwcyA8IE1JTl9TQU1QTElOR19QRVJJT0QpIHsKLQkJCS8vIGZvciBmYXN0IHNpbmdsZSBjaGFubmVsIGFxdSB3aXRob3V0IG11eAorCQkJLyogZm9yIGZhc3Qgc2luZ2xlIGNoYW5uZWwgYXF1IHdpdGhvdXQgbXV4ICovCiAJCQlpZiAoc3RlcHMgPD0gMSkgewotCQkJCS8vIHdlIGp1c3Qgc3RheSBoZXJlIGF0IHN0YXRlIDEgYW5kIHJleGVjdXRlIHRoZSBzYW1lIHN0YXRlCi0JCQkJLy8gdGhpcyBnaXZlcyB1cyAzME1IeiBzYW1wbGluZyByYXRlCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDFdID0gMHg4OTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMQotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDFdID0gMHgwMzsJLy8gZGVjZWlzaW9uIHN0YXRlIHdpdGggZGF0YQotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAxXSA9Ci0JCQkJCTB4RkYgJiBybmdtYXNrOwotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAxXSA9IDB4RkY7CS8vIGRvZXNuJ3QgbWF0dGVyCi0JCQl9IGVsc2UgewotCQkJCS8vIHdlIGxvb3AgdGhyb3VnaCB0d28gc3RhdGVzOiBkYXRhIGFuZCBkZWxheTogbWF4IHJhdGUgaXMgMTVNaHoKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMV0gPQotCQkJCQlzdGVwcyAtIDE7Ci0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMV0gPSAweDAyOwkvLyBkYXRhCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDFdID0KLQkJCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDFdID0gMDsJLy8gZG9lc24ndCBtYXR0ZXIKKwkJCQkvKgorCQkJCSAqIHdlIGp1c3Qgc3RheSBoZXJlIGF0IHN0YXRlIDEgYW5kIHJleGVjdXRlCisJCQkJICogdGhlIHNhbWUgc3RhdGUgdGhpcyBnaXZlcyB1cyAzME1IeiBzYW1wbGluZworCQkJCSAqIHJhdGUKKwkJCQkgKi8KIAotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAyXSA9IDB4MDk7CS8vIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDEKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAyXSA9IDB4MDE7CS8vIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YQotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAyXSA9Ci0JCQkJCTB4RkYgJiBybmdtYXNrOwotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAyXSA9IDB4RkY7CS8vIGRvZXNuJ3QgbWF0dGVyCisJCQkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMSAqLworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzFdID0gMHg4OTsKKwkJCQkvKiBkZWNlaXNpb24gc3RhdGUgd2l0aCBkYXRhICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSsxXSA9IDB4MDM7CisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMV0gPSAweEZGICYgcm5nbWFzazsKKwkJCQkvKiBkb2Vzbid0IG1hdHRlciAqLworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzFdID0gMHhGRjsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiB3ZSBsb29wIHRocm91Z2ggdHdvIHN0YXRlczogZGF0YSBhbmQgZGVsYXkKKwkJCQkgKiBtYXggcmF0ZSBpcyAxNU1IegorCQkJCSAqLworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzFdID0gc3RlcHMgLSAxOworCQkJCS8qIGRhdGEgKi8KKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzFdID0gMHgwMjsKKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsxXSA9IDB4RkYgJiBybmdtYXNrOworCQkJCS8qIGRvZXNuJ3QgbWF0dGVyICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMV0gPSAwOworCQkJCS8qIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDEgKi8KKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSsyXSA9IDB4MDk7CisJCQkJLyogZGVjZWlzaW9uIHN0YXRlIHcvbyBkYXRhICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSsyXSA9IDB4MDE7CisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMl0gPSAweEZGICYgcm5nbWFzazsKKwkJCQkvKiBkb2Vzbid0IG1hdHRlciAqLworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzJdID0gMHhGRjsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCS8vIHdlIGxvb3AgdGhyb3VnaCAzIHN0YXRlczogMnggZGVsYXkgYW5kIDF4IGRhdGEuIFRoaXMgZ2l2ZXMgYSBtaW4KLQkJCS8vIHNhbXBsaW5nIHJhdGUgb2YgNjBrSHouCisJCQkvKgorCQkJICogd2UgbG9vcCB0aHJvdWdoIDMgc3RhdGVzOiAyeCBkZWxheSBhbmQgMXggZGF0YQorCQkJICogdGhpcyBnaXZlcyBhIG1pbiBzYW1wbGluZyByYXRlIG9mIDYwa0h6CisJCQkgKi8KIAotCQkJLy8gd2UgaGF2ZSAxIHN0YXRlIHdpdGggZHVyYXRpb24gMQorCQkJLyogd2UgaGF2ZSAxIHN0YXRlIHdpdGggZHVyYXRpb24gMSAqLwogCQkJc3RlcHMgPSBzdGVwcyAtIDE7CiAKLQkJCS8vIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDFdID0KLQkJCQlzdGVwcyAvIDI7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAxXSA9IDA7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMV0gPQotCQkJCTB4RkYgJiBybmdtYXNrOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDFdID0gMDsKKwkJCS8qIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSBzdGVwcyAvIDI7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzFdID0gMDsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzFdID0gMHhGRiAmIHJuZ21hc2s7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsxXSA9IDA7CiAKLQkJCS8vIGFuZCB0aGUgc2Vjb25kIHBhcnQKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAyXSA9Ci0JCQkJc3RlcHMgLSBzdGVwcyAvIDI7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAyXSA9IDA7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMl0gPQotCQkJCTB4RkYgJiBybmdtYXNrOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDJdID0gMDsKKwkJCS8qIGFuZCB0aGUgc2Vjb25kIHBhcnQgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzJdID0gc3RlcHMgLSBzdGVwcyAvIDI7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMDsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzJdID0gMHhGRiAmIHJuZ21hc2s7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsyXSA9IDA7CiAKLQkJCS8vIGdldCB0aGUgZGF0YSBhbmQgYnJhbmNoIGJhY2sKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAzXSA9IDB4MDk7CS8vIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDEKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDNdID0gMHgwMzsJLy8gZGVjZWlzaW9uIHN0YXRlIHcgZGF0YQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDNdID0KLQkJCQkweEZGICYgcm5nbWFzazsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAzXSA9IDB4RkY7CS8vIGRvZXNuJ3QgbWF0dGVyCisJCQkvKiBnZXQgdGhlIGRhdGEgYW5kIGJyYW5jaCBiYWNrICovCisKKwkJCS8qIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDEgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzNdID0gMHgwOTsKKwkJCS8qIGRlY2Vpc2lvbiBzdGF0ZSB3IGRhdGEgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrM10gPSAweDAzOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrM10gPSAweEZGICYgcm5nbWFzazsKKwkJCS8qIGRvZXNuJ3QgbWF0dGVyICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSszXSA9IDB4RkY7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIDI6Ci0JCS8vIHR3byBjaGFubmVscwotCQkvLyBjb21taXQgZGF0YSB0byB0aGUgRklGTworCQkvKgorCQkgKiB0d28gY2hhbm5lbHMKKwkJICogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8KKwkJICovCisKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAwXSA9IDE7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDBdID0gMHgwMjsJLy8gZGF0YQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMF0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDBdID0gMDsKIAotCQkvLyB3ZSBoYXZlIDEgc3RhdGUgd2l0aCBkdXJhdGlvbiAxOiBzdGF0ZSAwCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzBdID0gMTsKKwkJLyogZGF0YSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzBdID0gMHgwMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMF0gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAwOworCisJCS8qIHdlIGhhdmUgMSBzdGF0ZSB3aXRoIGR1cmF0aW9uIDE6IHN0YXRlIDAgKi8KIAkJc3RlcHNfdG1wID0gc3RlcHMgLSAxOwogCiAJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0WzFdKSA+IDApCiAJCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJCWVsc2UKIAkJCXJuZ21hc2sgPSAweGZmOwotCQkvLyBkbyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGVsYXkKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDFdID0gc3RlcHNfdG1wIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMV0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMV0gPSAweEZFICYgcm5nbWFzazsJLy9jb3VudAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMV0gPSAwOwogCi0JCS8vIGFuZCB0aGUgc2Vjb25kIHBhcnQKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDJdID0KLQkJCXN0ZXBzX3RtcCAtIHN0ZXBzX3RtcCAvIDI7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDJdID0gMDsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDJdID0gMHhGRiAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAyXSA9IDA7CisJCS8qIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSsxXSA9IHN0ZXBzX3RtcCAvIDI7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMV0gPSAwOworCQkvKiBjb3VudCAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsxXSA9IDB4RkUgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsxXSA9IDA7CiAKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDNdID0gMTsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgM10gPSAweDAyOwkvLyBkYXRhCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAzXSA9IDB4RkYgJiBybmdtYXNrOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgM10gPSAwOworCQkvKiBhbmQgdGhlIHNlY29uZCBwYXJ0ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzJdID0gc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSsyXSA9IDA7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzJdID0gMHhGRiAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzJdID0gMDsKIAotCQkvLyB3ZSBoYXZlIDIgc3RhdGVzIHdpdGggZHVyYXRpb24gMTogc3RlcCA2IGFuZCB0aGUgSURMRSBzdGF0ZQorCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSszXSA9IDE7CisJCS8qIGRhdGEgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSszXSA9IDB4MDI7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzNdID0gMHhGRiAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzNdID0gMDsKKworCQkvKgorCQkgKiB3ZSBoYXZlIDIgc3RhdGVzIHdpdGggZHVyYXRpb24gMTogc3RlcCA2IGFuZAorCQkgKiB0aGUgSURMRSBzdGF0ZQorCQkgKi8KIAkJc3RlcHNfdG1wID0gc3RlcHMgLSAyOwogCiAJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKSA+IDApCiAJCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJCWVsc2UKIAkJCXJuZ21hc2sgPSAweGZmOwotCQkvLyBkbyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGVsYXkKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDRdID0gc3RlcHNfdG1wIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNF0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNF0gPSAoMHhGRiAtIDB4MDIpICYgcm5nbWFzazsJLy9yZXNldAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNF0gPSAwOwogCi0JCS8vIGFuZCB0aGUgc2Vjb25kIHBhcnQKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDVdID0KLQkJCXN0ZXBzX3RtcCAtIHN0ZXBzX3RtcCAvIDI7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDVdID0gMDsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDVdID0gMHhGRiAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyA1XSA9IDA7CisJCS8qIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs0XSA9IHN0ZXBzX3RtcCAvIDI7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrNF0gPSAwOworCQkvKiByZXNldCAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs0XSA9ICgweEZGIC0gMHgwMikgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs0XSA9IDA7CiAKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDZdID0gMTsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNl0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNl0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDZdID0gMDsKKwkJLyogYW5kIHRoZSBzZWNvbmQgcGFydCAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs1XSA9IHN0ZXBzX3RtcCAtIHN0ZXBzX3RtcCAvIDI7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrNV0gPSAwOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs1XSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs1XSA9IDA7CisKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNl0gPSAxOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzZdID0gMDsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNl0gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrNl0gPSAwOwogCQlicmVhazsKIAogCWNhc2UgMzoKLQkJLy8gdGhyZWUgY2hhbm5lbHMKKwkJLyoKKwkJICogdGhyZWUgY2hhbm5lbHMKKwkJICovCiAJCWZvciAoaiA9IDA7IGogPCAxOyBqKyspIHsKIAkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2pdKSA+IDApCiAJCQkJcm5nbWFzayA9IDB4ZmYgLSAweDA0OwogCQkJZWxzZQogCQkJCXJuZ21hc2sgPSAweGZmOwotCQkJLy8gY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gYW5kIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIGogKiAyXSA9Ci0JCQkJc3RlcHMgLyAyOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgaiAqIDJdID0gMHgwMjsJLy8gZGF0YQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIGogKiAyXSA9IDB4RkYgJiBybmdtYXNrOwkvLyBubyBjaGFuZ2UKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyBqICogMl0gPSAwOworCQkJLyoKKwkJCSAqIGNvbW1pdCBkYXRhIHRvIHRoZSBGSUZPIGFuZCBkbyB0aGUgZmlyc3QgcGFydAorCQkJICogb2YgdGhlIGRlbGF5CisJCQkgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFK2oqMl0gPSBzdGVwcyAvIDI7CisJCQkvKiBkYXRhICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFK2oqMl0gPSAweDAyOworCQkJLyogbm8gY2hhbmdlICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRStqKjJdID0gMHhGRiAmIHJuZ21hc2s7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRStqKjJdID0gMDsKIAogCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaiArIDFdKSA+IDApCiAJCQkJcm5nbWFzayA9IDB4ZmYgLSAweDA0OwogCQkJZWxzZQogCQkJCXJuZ21hc2sgPSAweGZmOwotCQkJLy8gZG8gdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBkZWxheQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIGogKiAyICsgMV0gPQotCQkJCXN0ZXBzIC0gc3RlcHMgLyAyOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgaiAqIDIgKyAxXSA9IDA7CS8vIG5vIGRhdGEKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyBqICogMiArIDFdID0gMHhGRSAmIHJuZ21hc2s7CS8vY291bnQKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyBqICogMiArIDFdID0KLQkJCQkwOworCisJCQkvKiBkbyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRStqKjIrMV0gPSBzdGVwcyAtIHN0ZXBzIC8gMjsKKwkJCS8qIG5vIGRhdGEgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UraioyKzFdID0gMDsKKwkJCS8qIGNvdW50ICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRStqKjIrMV0gPSAweEZFICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFK2oqMisxXSA9IDA7CiAJCX0KIAotCQkvLyAyIHN0ZXBzIHdpdGggZHVyYXRpb24gMTogdGhlIGlkZWxlIHN0ZXAgYW5kIHN0ZXAgNjoKKwkJLyogMiBzdGVwcyB3aXRoIGR1cmF0aW9uIDE6IHRoZSBpZGVsZSBzdGVwIGFuZCBzdGVwIDY6ICovCiAJCXN0ZXBzX3RtcCA9IHN0ZXBzIC0gMjsKLQkJLy8gY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gYW5kIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNF0gPSBzdGVwc190bXAgLyAyOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA0XSA9IDB4MDI7CS8vIGRhdGEKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDRdID0gMHhGRiAmIHJuZ21hc2s7CS8vIG5vIGNoYW5nZQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNF0gPSAwOworCisJCS8qIGNvbW1pdCBkYXRhIHRvIHRoZSBGSUZPIGFuZCBkbyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGVsYXkgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNF0gPSBzdGVwc190bXAgLyAyOworCQkvKiBkYXRhICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrNF0gPSAweDAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs0XSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs0XSA9IDA7CiAKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCS8vIGRvIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgZGVsYXkKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDVdID0KLQkJCXN0ZXBzX3RtcCAtIHN0ZXBzX3RtcCAvIDI7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDVdID0gMDsJLy8gbm8gZGF0YQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNV0gPSAoMHhGRiAtIDB4MDIpICYgcm5nbWFzazsJLy8gcmVzZXQKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDVdID0gMDsKIAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNl0gPSAxOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA2XSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA2XSA9IDB4RkYgJiBybmdtYXNrOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNl0gPSAwOworCQkvKiBkbyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzVdID0gc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKKwkJLyogbm8gZGF0YSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzVdID0gMDsKKwkJLyogcmVzZXQgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNV0gPSAoMHhGRiAtIDB4MDIpICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrNV0gPSAwOworCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzZdID0gMTsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs2XSA9IDA7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzZdID0gMHhGRiAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzZdID0gMDsKIAogCWNhc2UgMTY6CiAJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKSA+IDApCiAJCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJCWVsc2UKIAkJCXJuZ21hc2sgPSAweGZmOwotCQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsJLy8gd2UgbG9vcCBoZXJlIHVudGlsIHJlYWR5IGhhcyBiZWVuIHNldAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDBdID0gMHgwMTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMF0gPSAweDAxOwkvLyBkZWNlaXNpb24gc3RhdGUgdy9vIGRhdGEKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAwXSA9ICgweEZGIC0gMHgwMikgJiBybmdtYXNrOwkvLyByZXNldAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDBdID0gMHgwMDsJLy8gUkRZMCA9IDAKLQkJfSBlbHNlIHsJLy8gd2UganVzdCBwcm9jZWVkIHRvIHN0YXRlIDEKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAwXSA9IDI1NTsJLy8gMzB1cyByZXNldCBwdWxzZQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMF0gPSAwOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0gKDB4RkYgLSAweDAyKSAmIHJuZ21hc2s7CS8vIHJlc2V0Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAwOworCisJCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQkJLyoKKwkJCSAqIHdlIGxvb3AgaGVyZSB1bnRpbCByZWFkeSBoYXMgYmVlbiBzZXQKKwkJCSAqLworCisJCQkvKiBicmFuY2ggYmFjayB0byBzdGF0ZSAwICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSswXSA9IDB4MDE7CisJCQkvKiBkZWNlaXNpb24gc3RhdGUgdy9vIGRhdGEgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMF0gPSAweDAxOworCQkJLyogcmVzZXQgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzBdID0gKDB4RkYtMHgwMikgJiBybmdtYXNrOworCQkJLyogUkRZMCA9IDAgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzBdID0gMHgwMDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiB3ZSBqdXN0IHByb2NlZWQgdG8gc3RhdGUgMQorCQkJICovCisKKwkJCS8qIDMwdXMgcmVzZXQgcHVsc2UgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzBdID0gMjU1OworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSswXSA9IDA7CisJCQkvKiByZXNldCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMF0gPSAoMHhGRi0weDAyKSAmIHJuZ21hc2s7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSswXSA9IDA7CiAJCX0KIAotCQkvLyBjb21taXQgZGF0YSB0byB0aGUgRklGTwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMV0gPSAxOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAxXSA9IDB4MDI7CS8vIGRhdGEKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDFdID0gMHhGRiAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAxXSA9IDA7CisJCS8qIGNvbW1pdCBkYXRhIHRvIHRoZSBGSUZPICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzFdID0gMTsKKwkJLyogZGF0YSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzFdID0gMHgwMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMV0gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMV0gPSAwOwogCi0JCS8vIHdlIGhhdmUgMiBzdGF0ZXMgd2l0aCBkdXJhdGlvbiAxCisJCS8qIHdlIGhhdmUgMiBzdGF0ZXMgd2l0aCBkdXJhdGlvbiAxICovCiAJCXN0ZXBzID0gc3RlcHMgLSAyOwogCi0JCS8vIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMl0gPSBzdGVwcyAvIDI7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDJdID0gMDsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDJdID0gMHhGRSAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAyXSA9IDA7CisJCS8qIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSsyXSA9IHN0ZXBzIC8gMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSsyXSA9IDA7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzJdID0gMHhGRSAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzJdID0gMDsKIAotCQkvLyBhbmQgdGhlIHNlY29uZCBwYXJ0Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAzXSA9Ci0JCQlzdGVwcyAtIHN0ZXBzIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgM10gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgM10gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDNdID0gMDsKKwkJLyogYW5kIHRoZSBzZWNvbmQgcGFydCAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSszXSA9IHN0ZXBzIC0gc3RlcHMgLyAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzNdID0gMDsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrM10gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrM10gPSAwOwogCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyA0XSA9IDB4MDk7CS8vIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDEKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNF0gPSAweDAxOwkvLyBkZWNlaXNpb24gc3RhdGUgdy9vIGRhdGEKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDRdID0gMHhGRiAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyA0XSA9IDB4RkY7CS8vIGRvZXNuJ3QgbWF0dGVyCisJCS8qIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDEgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNF0gPSAweDA5OworCQkvKiBkZWNlaXNpb24gc3RhdGUgdy9vIGRhdGEgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs0XSA9IDB4MDE7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzRdID0gMHhGRiAmIHJuZ21hc2s7CisJCS8qIGRvZXNuJ3QgbWF0dGVyICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzRdID0gMHhGRjsKIAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50aygiY29tZWRpICVkOiB1bnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBjaGFubmVsc1xuIiwKLQkJCWRldi0+bWlub3IpOwotCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSAlZDogdW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgIgorCQkgICAgICAgImNoYW5uZWxzXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaSAlZDogc2VuZGluZyBjb21tYW5kcyB0byB0aGUgdXNiIGRldmljZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSAlZDogc2VuZGluZyBjb21tYW5kcyB0byB0aGUgdXNiIGRldmljZVxuIiwKKwkgICAgICAgZGV2LT5taW5vcik7CiAjZW5kaWYKLQkvLyAwIG1lYW5zIHRoYXQgdGhlIEFEIGNvbW1hbmRzIGFyZSBzZW50Ci0JcmVzdWx0ID0gc2VuZF9kdXhfY29tbWFuZHModGhpc191c2JkdXhmYXN0c3ViLCBTRU5EQURDT01NQU5EUyk7CisJLyogMCBtZWFucyB0aGF0IHRoZSBBRCBjb21tYW5kcyBhcmUgc2VudCAqLworCXJlc3VsdCA9IHNlbmRfZHV4X2NvbW1hbmRzKHVkZnMsIFNFTkRBRENPTU1BTkRTKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoImNvbWVkaSVkOiBhZGMgY29tbWFuZCBjb3VsZCBub3QgYmUgc3VibWl0dGVkLiBBYm9ydGluZy4uLlxuIiwgZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGFkYyBjb21tYW5kIGNvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuIgorCQkgICAgICAgIkFib3J0aW5nLi4uXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9zYW1wbGVfY291bnQgPQotCQkJKGNtZC0+c3RvcF9hcmcpICogKGNtZC0+c2Nhbl9lbmRfYXJnKTsKLQkJaWYgKHVzYmR1eGZhc3RzdWItPmFpX3NhbXBsZV9jb3VudCA8IDEpIHsKLQkJCXByaW50aygiY29tZWRpJWQ6IChjbWQtPnN0b3BfYXJnKSooY21kLT5zY2FuX2VuZF9hcmcpPDEsIGFib3J0aW5nLlxuIiwgZGV2LT5taW5vcik7Ci0JCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQl1ZGZzLT5haV9zYW1wbGVfY291bnQgPQljbWQtPnN0b3BfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCWlmICh1ZGZzLT5haV9zYW1wbGVfY291bnQgPCAxKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiAiCisJCQkgICAgICAgIihjbWQtPnN0b3BfYXJnKSooY21kLT5zY2FuX2VuZF9hcmcpPDEsICIKKwkJCSAgICAgICAiYWJvcnRpbmcuXG4iLCBkZXYtPm1pbm9yKTsKKwkJCXVwKCZ1ZGZzLT5zZW0pOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9jb250aW5vdXMgPSAwOworCQl1ZGZzLT5haV9jb250aW5vdXMgPSAwOwogCX0gZWxzZSB7Ci0JCS8vIGNvbnRpbm91cyBhcXVpc2l0aW9uCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+YWlfY29udGlub3VzID0gMTsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9zYW1wbGVfY291bnQgPSAwOworCQkvKiBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCQl1ZGZzLT5haV9jb250aW5vdXMgPSAxOworCQl1ZGZzLT5haV9zYW1wbGVfY291bnQgPSAwOwogCX0KIAogCWlmICgoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cpIHx8IChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkpIHsKLQkJLy8gZW5hYmxlIHRoaXMgYWNxdWlzaXRpb24gb3BlcmF0aW9uCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+YWlfY21kX3J1bm5pbmcgPSAxOwotCQlyZXQgPSB1c2JkdXhmYXN0c3ViX3N1Ym1pdF9JblVSQnModGhpc191c2JkdXhmYXN0c3ViKTsKKwkJLyogZW5hYmxlIHRoaXMgYWNxdWlzaXRpb24gb3BlcmF0aW9uICovCisJCXVkZnMtPmFpX2NtZF9ydW5uaW5nID0gMTsKKwkJcmV0ID0gdXNiZHV4ZmFzdHN1Yl9zdWJtaXRfSW5VUkJzKHVkZnMpOwogCQlpZiAocmV0IDwgMCkgewotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZyA9IDA7Ci0JCQkvLyBmaXhtZTogdW5saW5rIGhlcmU/PwotCQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJCXVkZnMtPmFpX2NtZF9ydW5uaW5nID0gMDsKKwkJCS8qIGZpeG1lOiB1bmxpbmsgaGVyZT8/ICovCisJCQl1cCgmdWRmcy0+c2VtKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCS8qIFRSSUdfSU5UICovCi0JCS8vIGRvbid0IGVuYWJsZSB0aGUgYWNxdWlzaW9uIG9wZXJhdGlvbgotCQkvLyB3YWl0IGZvciBhbiBpbnRlcm5hbCBzaWduYWwKKwkJLyoKKwkJICogVFJJR19JTlQKKwkJICogZG9uJ3QgZW5hYmxlIHRoZSBhY3F1aXNpb24gb3BlcmF0aW9uCisJCSAqIHdhaXQgZm9yIGFuIGludGVybmFsIHNpZ25hbAorCQkgKi8KIAkJcy0+YXN5bmMtPmludHRyaWcgPSB1c2JkdXhmYXN0X2FpX2ludHRyaWc7CiAJfQotCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJdXAoJnVkZnMtPnNlbSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogTW9kZSAwIGlzIHVzZWQgdG8gZ2V0IGEgc2luZ2xlIGNvbnZlcnNpb24gb24gZGVtYW5kICovCi1zdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorLyoKKyAqIE1vZGUgMCBpcyB1c2VkIHRvIGdldCBhIHNpbmdsZSBjb252ZXJzaW9uIG9uIGRlbWFuZC4KKyAqLworc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaSwgaiwgbiwgYWN0dWFsX2xlbmd0aDsKIAlpbnQgY2hhbiwgcmFuZ2UsIHJuZ21hc2s7CiAJaW50IGVycjsKLQl1c2JkdXhmYXN0c3ViX3QgKnVzYmR1eGZhc3RzdWIgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmczsKIAotCWlmICghdXNiZHV4ZmFzdHN1YikgewotCQlwcmludGsoImNvbWVkaSVkOiBhaV9pbnNuX3JlYWQ6IG5vIHVzYiBkZXYuXG4iLCBkZXYtPm1pbm9yKTsKKwl1ZGZzID0gZGV2LT5wcml2YXRlOworCWlmICghdWRmcykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBhaV9pbnNuX3JlYWQ6IG5vIHVzYiBkZXYuXG4iLAorCQkgICAgICAgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogYWlfaW5zbl9yZWFkLCBpbnNuLT5uPSVkLCBpbnNuLT5zdWJkZXY9JWRcbiIsCi0JCWRldi0+bWlub3IsIGluc24tPm4sIGluc24tPnN1YmRldik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiBhaV9pbnNuX3JlYWQsIGluc24tPm49JWQsICIKKwkgICAgICAgImluc24tPnN1YmRldj0lZFxuIiwgZGV2LT5taW5vciwgaW5zbi0+biwgaW5zbi0+c3ViZGV2KTsKICNlbmRpZgotCWRvd24oJnVzYmR1eGZhc3RzdWItPnNlbSk7Ci0JaWYgKCEodXNiZHV4ZmFzdHN1Yi0+cHJvYmVkKSkgewotCQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwlkb3duKCZ1ZGZzLT5zZW0pOworCWlmICghdWRmcy0+cHJvYmVkKSB7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKHVzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IGFpX2luc25fcmVhZCBub3QgcG9zc2libGUuIEFzeW5jIENvbW1hbmQgaXMgcnVubmluZy5cbiIsIGRldi0+bWlub3IpOwotCQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwlpZiAodWRmcy0+YWlfY21kX3J1bm5pbmcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogYWlfaW5zbl9yZWFkIG5vdCBwb3NzaWJsZS4gQXN5bmMgIgorCQkgICAgICAgIkNvbW1hbmQgaXMgcnVubmluZy5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLy8gc2FtcGxlIG9uZSBjaGFubmVsCisJLyogc2FtcGxlIG9uZSBjaGFubmVsICovCiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOwotCS8vIHNldCBjb21tYW5kIGZvciB0aGUgZmlyc3QgY2hhbm5lbAorCS8qIHNldCBjb21tYW5kIGZvciB0aGUgZmlyc3QgY2hhbm5lbCAqLwogCiAJaWYgKHJhbmdlID4gMCkKIAkJcm5nbWFzayA9IDB4ZmYgLSAweDA0OwogCWVsc2UKIAkJcm5nbWFzayA9IDB4ZmY7Ci0JLy8gY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8KLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDBdID0gMTsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMF0gPSAweDAyOwkvLyBkYXRhCi0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAwXSA9IDB4RkYgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAwOwogCi0JLy8gZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAxXSA9IDEyOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAxXSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAxXSA9IDB4RkUgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMV0gPSAwOworCS8qIGNvbW1pdCBkYXRhIHRvIHRoZSBGSUZPICovCisJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAxOworCS8qIGRhdGEgKi8KKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzBdID0gMHgwMjsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSswXSA9IDB4RkYgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzBdID0gMDsKIAotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMl0gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAyXSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAyXSA9IDB4RkUgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMl0gPSAwOworCS8qIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheSAqLworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzFdID0gMTI7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSsxXSA9IDA7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMV0gPSAweEZFICYgcm5nbWFzazsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsxXSA9IDA7CiAKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDNdID0gMTsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgM10gPSAwOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgM10gPSAweEZFICYgcm5nbWFzazsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDNdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSsyXSA9IDE7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSsyXSA9IDA7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMl0gPSAweEZFICYgcm5nbWFzazsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsyXSA9IDA7CiAKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDRdID0gMTsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNF0gPSAwOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNF0gPSAweEZFICYgcm5nbWFzazsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDRdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSszXSA9IDE7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSszXSA9IDA7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrM10gPSAweEZFICYgcm5nbWFzazsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSszXSA9IDA7CiAKLQkvLyBzZWNvbmQgcGFydAotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNV0gPSAxMjsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNV0gPSAwOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNV0gPSAweEZGICYgcm5nbWFzazsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDVdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs0XSA9IDE7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs0XSA9IDA7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNF0gPSAweEZFICYgcm5nbWFzazsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs0XSA9IDA7CiAKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDZdID0gMTsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNl0gPSAwOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNl0gPSAweEZGICYgcm5nbWFzazsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDBdID0gMDsKKwkvKiBzZWNvbmQgcGFydCAqLworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzVdID0gMTI7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs1XSA9IDA7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNV0gPSAweEZGICYgcm5nbWFzazsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs1XSA9IDA7CisKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs2XSA9IDE7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs2XSA9IDA7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNl0gPSAweEZGICYgcm5nbWFzazsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSswXSA9IDA7CiAKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGkgJWQ6IHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIHVzYiBkZXZpY2VcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGkgJWQ6IHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIHVzYiBkZXZpY2VcbiIsCisJICAgICAgIGRldi0+bWlub3IpOwogI2VuZGlmCi0JLy8gMCBtZWFucyB0aGF0IHRoZSBBRCBjb21tYW5kcyBhcmUgc2VudAotCWVyciA9IHNlbmRfZHV4X2NvbW1hbmRzKHVzYmR1eGZhc3RzdWIsIFNFTkRBRENPTU1BTkRTKTsKKwkvKiAwIG1lYW5zIHRoYXQgdGhlIEFEIGNvbW1hbmRzIGFyZSBzZW50ICovCisJZXJyID0gc2VuZF9kdXhfY29tbWFuZHModWRmcywgU0VOREFEQ09NTUFORFMpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IGFkYyBjb21tYW5kIGNvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuIEFib3J0aW5nLi4uXG4iLCBkZXYtPm1pbm9yKTsKLQkJdXAoJnVzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGFkYyBjb21tYW5kIGNvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuIgorCQkgICAgICAgIkFib3J0aW5nLi4uXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiBlcnI7CiAJfQogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBzdWJtaXR0aW5nIGluLXVyYjogJXgsJXhcbiIsCi0JCXVzYmR1eGZhc3RzdWItPmNvbWVkaWRldi0+bWlub3IsCi0JCShpbnQpKHVzYmR1eGZhc3RzdWItPnVyYkluLT5jb250ZXh0KSwKLQkJKGludCkodXNiZHV4ZmFzdHN1Yi0+dXJiSW4tPmRldikpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdDogc3VibWl0dGluZyBpbi11cmI6ICIKKwkgICAgICAgIjB4JXAsMHglcFxuIiwgdWRmcy0+Y29tZWRpZGV2LT5taW5vciwgdWRmcy0+dXJiSW4tPmNvbnRleHQsCisJICAgICAgIHVkZnMtPnVyYkluLT5kZXYpOwogI2VuZGlmCiAJZm9yIChpID0gMDsgaSA8IFBBQ0tFVFNfVE9fSUdOT1JFOyBpKyspIHsKLQkJZXJyID0gdXNiX2J1bGtfbXNnKHVzYmR1eGZhc3RzdWItPnVzYmRldiwKLQkJCQkgICB1c2JfcmN2YnVsa3BpcGUodXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJCQkJICAgQlVMS0lORVApLAotCQkJCSAgIHVzYmR1eGZhc3RzdWItPnRyYW5zZmVyX2J1ZmZlciwgU0laRUlOQlVGLAorCQllcnIgPSB1c2JfYnVsa19tc2codWRmcy0+dXNiZGV2LAorCQkJCSAgIHVzYl9yY3ZidWxrcGlwZSh1ZGZzLT51c2JkZXYsIEJVTEtJTkVQKSwKKwkJCQkgICB1ZGZzLT50cmFuc2Zlcl9idWZmZXIsIFNJWkVJTkJVRiwKIAkJCQkgICAmYWN0dWFsX2xlbmd0aCwgMTAwMDApOwogCQlpZiAoZXJyIDwgMCkgewotCQkJcHJpbnRrKCJjb21lZGklZDogaW5zbiB0aW1lb3V0LiBObyBkYXRhLlxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGluc24gdGltZW91dC4gTm8gZGF0YS5cbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJCXVwKCZ1ZGZzLT5zZW0pOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQkvLyBkYXRhIHBvaW50cworCS8qIGRhdGEgcG9pbnRzICovCiAJZm9yIChpID0gMDsgaSA8IGluc24tPm47KSB7Ci0JCWVyciA9IHVzYl9idWxrX21zZyh1c2JkdXhmYXN0c3ViLT51c2JkZXYsCi0JCQkJICAgdXNiX3JjdmJ1bGtwaXBlKHVzYmR1eGZhc3RzdWItPnVzYmRldiwKLQkJCQkJCSAgIEJVTEtJTkVQKSwKLQkJCQkgICB1c2JkdXhmYXN0c3ViLT50cmFuc2Zlcl9idWZmZXIsIFNJWkVJTkJVRiwKKwkJZXJyID0gdXNiX2J1bGtfbXNnKHVkZnMtPnVzYmRldiwKKwkJCQkgICB1c2JfcmN2YnVsa3BpcGUodWRmcy0+dXNiZGV2LCBCVUxLSU5FUCksCisJCQkJICAgdWRmcy0+dHJhbnNmZXJfYnVmZmVyLCBTSVpFSU5CVUYsCiAJCQkJICAgJmFjdHVhbF9sZW5ndGgsIDEwMDAwKTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCXByaW50aygiY29tZWRpJWQ6IGluc24gZGF0YSBlcnJvcjogJWRcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBpbnNuIGRhdGEgZXJyb3I6ICVkXG4iLAogCQkJCWRldi0+bWlub3IsIGVycik7Ci0JCQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJCXVwKCZ1ZGZzLT5zZW0pOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCQluID0gYWN0dWFsX2xlbmd0aCAvIHNpemVvZih1aW50MTZfdCk7CiAJCWlmICgobiAlIDE2KSAhPSAwKSB7Ci0JCQlwcmludGsoImNvbWVkaSVkOiBpbnNuIGRhdGEgcGFja2V0IGNvcnJ1cHRlZC5cbiIsCi0JCQkJZGV2LT5taW5vcik7Ci0JCQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGluc24gZGF0YSBwYWNrZXQgIgorCQkJICAgICAgICJjb3JydXB0ZWQuXG4iLCBkZXYtPm1pbm9yKTsKKwkJCXVwKCZ1ZGZzLT5zZW0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZm9yIChqID0gY2hhbjsgKGogPCBuKSAmJiAoaSA8IGluc24tPm4pOyBqID0gaiArIDE2KSB7Ci0JCQlkYXRhW2ldID0KLQkJCQkoKHVpbnQxNl90ICopICh1c2JkdXhmYXN0c3ViLT4KLQkJCQkJdHJhbnNmZXJfYnVmZmVyKSlbal07CisJCQlkYXRhW2ldID0gKCh1aW50MTZfdCAqKSAodWRmcy0+dHJhbnNmZXJfYnVmZmVyKSlbal07CiAJCQlpKys7CiAJCX0KIAl9Ci0JdXAoJnVzYmR1eGZhc3RzdWItPnNlbSk7CisJdXAoJnVkZnMtPnNlbSk7CiAJcmV0dXJuIGk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBoZXgydW5zaWduZWQoY2hhciAqaCkKIHsKIAl1bnNpZ25lZCBoaSwgbG87Ci0JaWYgKGhbMF0gPiAnOScpIHsKKworCWlmIChoWzBdID4gJzknKQogCQloaSA9IGhbMF0gLSAnQScgKyAweDBhOwotCX0gZWxzZSB7CisJZWxzZQogCQloaSA9IGhbMF0gLSAnMCc7Ci0JfQotCWlmIChoWzFdID4gJzknKSB7CisKKwlpZiAoaFsxXSA+ICc5JykKIAkJbG8gPSBoWzFdIC0gJ0EnICsgMHgwYTsKLQl9IGVsc2UgeworCWVsc2UKIAkJbG8gPSBoWzFdIC0gJzAnOwotCX0KKwogCXJldHVybiBoaSAqIDB4MTAgKyBsbzsKIH0KIAotLy8gZm9yIEZYMgorLyogZm9yIEZYMiAqLwogI2RlZmluZSBGSVJNV0FSRV9NQVhfTEVOIDB4MjAwMAogCi0vLyB0YWtlbiBmcm9tIERhdmlkIEJyb3duZWxsJ3MgZnhsb2FkIGFuZCBhZGp1c3RlZCBmb3IgdGhpcyBkcml2ZXIKLXN0YXRpYyBpbnQgcmVhZF9maXJtd2FyZSh1c2JkdXhmYXN0c3ViX3QgKiB1c2JkdXhmYXN0c3ViLCB2b2lkICpmaXJtd2FyZVB0ciwKLQlsb25nIHNpemUpCisvKgorICogdGFrZW4gZnJvbSBEYXZpZCBCcm93bmVsbCdzIGZ4bG9hZCBhbmQgYWRqdXN0ZWQgZm9yIHRoaXMgZHJpdmVyCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9maXJtd2FyZShzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzLCBjb25zdCB2b2lkICpmaXJtd2FyZVB0ciwKKwkJCSBsb25nIHNpemUpCiB7CiAJaW50IGkgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmZwID0gKGNoYXIgKilmaXJtd2FyZVB0cjsKLQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeSA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqZmlybXdhcmVCaW5hcnk7CiAJaW50IHJlcyA9IDA7CiAJaW50IG1heEFkZHIgPSAwOwogCiAJZmlybXdhcmVCaW5hcnkgPSBrbWFsbG9jKEZJUk1XQVJFX01BWF9MRU4sIEdGUF9LRVJORUwpOwogCWlmICghZmlybXdhcmVCaW5hcnkpIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBtZW0gYWxsb2MgZm9yIGZpcm13YXJlIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogbWVtIGFsbG9jIGZvciBmaXJtd2FyZSAiCisJCSAgICAgICAiIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTMxNSwzMSArMTQxMSwzNyBAQAogCQlpbnQgaWR4LCBvZmY7CiAJCWludCBqID0gMDsKIAotCQkvLyBnZXQgb25lIGxpbmUKKwkJLyogZ2V0IG9uZSBsaW5lICovCiAJCXdoaWxlICgoaSA8IHNpemUpICYmIChmcFtpXSAhPSAxMykgJiYgKGZwW2ldICE9IDEwKSkgewogCQkJYnVmW2pdID0gZnBbaV07CiAJCQlpKys7CiAJCQlqKys7CiAJCQlpZiAoaiA+PSBzaXplb2YoYnVmKSkgewotCQkJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogYm9ndXMgZmlybXdhcmUgZmlsZSFcbiIpOworCQkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogYm9ndXMgIgorCQkJCSAgICAgICAiZmlybXdhcmUgZmlsZSFcbiIpOworCQkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0KLQkJLy8gZ2V0IHJpZCBvZiBMRi9DUi8uLi4KKwkJLyogZ2V0IHJpZCBvZiBMRi9DUi8uLi4gKi8KIAkJd2hpbGUgKChpIDwgc2l6ZSkgJiYgKChmcFtpXSA9PSAxMykgfHwgKGZwW2ldID09IDEwKQotCQkJCXx8IChmcFtpXSA9PSAwKSkpIHsKKwkJCQkJfHwgKGZwW2ldID09IDApKSkKIAkJCWkrKzsKLQkJfQogCiAJCWJ1ZltqXSA9IDA7Ci0JCS8vcHJpbnRrKCJjb21lZGlfOiBidWY9JXNcbiIsYnVmKTsKKwkJLyogcHJpbnRrKCJjb21lZGlfOiBidWY9JXNcbiIsYnVmKTsgKi8KIAotCQkvKiBFWFRFTlNJT046ICIjIGNvbW1lbnQtdGlsbC1lbmQtb2YtbGluZSIsIGZvciBjb3B5cmlnaHRzIGV0YyAqLworCQkvKgorCQkgKiBFWFRFTlNJT046ICIjIGNvbW1lbnQtdGlsbC1lbmQtb2YtbGluZSIsCisJCSAqIGZvciBjb3B5cmlnaHRzIGV0YworCQkgKi8KIAkJaWYgKGJ1ZlswXSA9PSAnIycpCiAJCQljb250aW51ZTsKIAogCQlpZiAoYnVmWzBdICE9ICc6JykgewotCQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiB1cGxvYWQ6IG5vdCBhbiBpaGV4IHJlY29yZDogJXMiLCBidWYpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiB1cGxvYWQ6IG5vdCBhbiAiCisJCQkgICAgICAgImloZXggcmVjb3JkOiAlcyIsIGJ1Zik7CisJCQlrZnJlZShmaXJtd2FyZUJpbmFyeSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCkBAIC0xMzQ5LDI2NiArMTQ1MSwzMDkgQEAKIAkJLyogUmVhZCB0aGUgdGFyZ2V0IG9mZnNldCAqLwogCQlvZmYgPSAoaGV4MnVuc2lnbmVkKGJ1ZiArIDMpICogMHgwMTAwKSArIGhleDJ1bnNpZ25lZChidWYgKyA1KTsKIAotCQlpZiAoKG9mZiArIGxlbikgPiBtYXhBZGRyKSB7CisJCWlmICgob2ZmICsgbGVuKSA+IG1heEFkZHIpCiAJCQltYXhBZGRyID0gb2ZmICsgbGVuOwotCQl9CiAKIAkJaWYgKG1heEFkZHIgPj0gRklSTVdBUkVfTUFYX0xFTikgewotCQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBmaXJtd2FyZSB1cGxvYWQgZ29lcyBiZXlvbmQgRlgyIFJBTSBib3VuZGFyaWVzLiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBmaXJtd2FyZSB1cGxvYWQgIgorCQkJICAgICAgICJnb2VzIGJleW9uZCBGWDIgUkFNIGJvdW5kYXJpZXMuIik7CisJCQlrZnJlZShmaXJtd2FyZUJpbmFyeSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQkvL3ByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogb2ZmPSV4LCBsZW49JXg6IixvZmYsbGVuKTsKKwkJLyogcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBvZmY9JXgsIGxlbj0leDoiLG9mZixsZW4pOyAqLwogCiAJCS8qIFJlYWQgdGhlIHJlY29yZCB0eXBlICovCiAJCXR5cGUgPSBoZXgydW5zaWduZWQoYnVmICsgNyk7CiAKIAkJLyogSWYgdGhpcyBpcyBhbiBFT0YgcmVjb3JkLCB0aGVuIG1ha2UgaXQgc28uICovCi0JCWlmICh0eXBlID09IDEpIHsKKwkJaWYgKHR5cGUgPT0gMSkKIAkJCWJyZWFrOwotCQl9CiAKIAkJaWYgKHR5cGUgIT0gMCkgewotCQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiB1bnN1cHBvcnRlZCByZWNvcmQgdHlwZTogJXVcbiIsIHR5cGUpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiB1bnN1cHBvcnRlZCAiCisJCQkgICAgICAgInJlY29yZCB0eXBlOiAldVxuIiwgdHlwZSk7CisJCQlrZnJlZShmaXJtd2FyZUJpbmFyeSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCiAJCWZvciAoaWR4ID0gMCwgY3AgPSBidWYgKyA5OyBpZHggPCBsZW47IGlkeCArPSAxLCBjcCArPSAyKSB7CiAJCQlmaXJtd2FyZUJpbmFyeVtpZHggKyBvZmZdID0gaGV4MnVuc2lnbmVkKGNwKTsKLQkJCS8vcHJpbnRrKCIlMDJ4ICIsZmlybXdhcmVCaW5hcnlbaWR4K29mZl0pOworCQkJLyogcHJpbnRrKCIlMDJ4ICIsZmlybXdhcmVCaW5hcnlbaWR4K29mZl0pOyAqLwogCQl9Ci0JCS8vcHJpbnRrKCJcbiIpOworCisJCS8qIHByaW50aygiXG4iKTsgKi8KIAogCQlpZiAoaSA+PSBzaXplKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVuZXhwZWN0ZWQgZW5kIG9mIGhleCBmaWxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogdW5leHBlY3RlZCBlbmQgIgorCQkJICAgICAgICJvZiBoZXggZmlsZVxuIik7CiAJCQlicmVhazsKIAkJfQogCiAJfQotCXJlcyA9IGZpcm13YXJlVXBsb2FkKHVzYmR1eGZhc3RzdWIsIGZpcm13YXJlQmluYXJ5LCBtYXhBZGRyICsgMSk7CisJcmVzID0gZmlybXdhcmVVcGxvYWQodWRmcywgZmlybXdhcmVCaW5hcnksIG1heEFkZHIgKyAxKTsKIAlrZnJlZShmaXJtd2FyZUJpbmFyeSk7CiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHZvaWQgdGlkeV91cCh1c2JkdXhmYXN0c3ViX3QgKiB1c2JkdXhmYXN0c3ViX3RtcCkKK3N0YXRpYyB2b2lkIHRpZHlfdXAoc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcykKIHsKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiB0aWRpbmcgdXBcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGlfOiB1c2JkdXhmYXN0OiB0aWRpbmcgdXBcbiIpOwogI2VuZGlmCi0JaWYgKCF1c2JkdXhmYXN0c3ViX3RtcCkgeworCisJaWYgKCF1ZGZzKQogCQlyZXR1cm47Ci0JfQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkKLQkvLyBzaG93cyB0aGUgdXNiIHN1YnN5c3RlbSB0aGF0IHRoZSBkcml2ZXIgaXMgZG93bgotCWlmICh1c2JkdXhmYXN0c3ViX3RtcC0+aW50ZXJmYWNlKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEodXNiZHV4ZmFzdHN1Yl90bXAtPmludGVyZmFjZSwgTlVMTCk7Ci0JfQotI2VuZGlmCiAKLQl1c2JkdXhmYXN0c3ViX3RtcC0+cHJvYmVkID0gMDsKKwkvKiBzaG93cyB0aGUgdXNiIHN1YnN5c3RlbSB0aGF0IHRoZSBkcml2ZXIgaXMgZG93biAqLworCWlmICh1ZGZzLT5pbnRlcmZhY2UpCisJCXVzYl9zZXRfaW50ZmRhdGEodWRmcy0+aW50ZXJmYWNlLCBOVUxMKTsKIAotCWlmICh1c2JkdXhmYXN0c3ViX3RtcC0+dXJiSW4pIHsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDgpCi0JCS8vIHdhaXRzIHVudGlsIGEgcnVubmluZyB0cmFuc2ZlciBpcyBvdmVyCi0JCS8vIHRodXMsIHVuZGVyIDIuNCBob3RwbHVnZ2luZyB3aGlsZSBhIGNvbW1hbmQKLQkJLy8gaXMgcnVubmluZyBpcyBub3Qgc2FmZQotCQl1c2Jfa2lsbF91cmIodXNiZHV4ZmFzdHN1Yl90bXAtPnVyYkluKTsKLSNlbmRpZgotCQlpZiAodXNiZHV4ZmFzdHN1Yl90bXAtPnRyYW5zZmVyX2J1ZmZlcikgewotCQkJa2ZyZWUodXNiZHV4ZmFzdHN1Yl90bXAtPnRyYW5zZmVyX2J1ZmZlcik7Ci0JCQl1c2JkdXhmYXN0c3ViX3RtcC0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKLQkJfQotCQl1c2JfZnJlZV91cmIodXNiZHV4ZmFzdHN1Yl90bXAtPnVyYkluKTsKLQkJdXNiZHV4ZmFzdHN1Yl90bXAtPnVyYkluID0gTlVMTDsKKwl1ZGZzLT5wcm9iZWQgPSAwOworCisJaWYgKHVkZnMtPnVyYkluKSB7CisJCS8qIHdhaXRzIHVudGlsIGEgcnVubmluZyB0cmFuc2ZlciBpcyBvdmVyICovCisJCXVzYl9raWxsX3VyYih1ZGZzLT51cmJJbik7CisKKwkJa2ZyZWUodWRmcy0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdWRmcy0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKKworCQl1c2JfZnJlZV91cmIodWRmcy0+dXJiSW4pOworCQl1ZGZzLT51cmJJbiA9IE5VTEw7CiAJfQotCWlmICh1c2JkdXhmYXN0c3ViX3RtcC0+aW5zbkJ1ZmZlcikgewotCQlrZnJlZSh1c2JkdXhmYXN0c3ViX3RtcC0+aW5zbkJ1ZmZlcik7Ci0JCXVzYmR1eGZhc3RzdWJfdG1wLT5pbnNuQnVmZmVyID0gTlVMTDsKLQl9Ci0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT5kdXhfY29tbWFuZHMpIHsKLQkJa2ZyZWUodXNiZHV4ZmFzdHN1Yl90bXAtPmR1eF9jb21tYW5kcyk7Ci0JCXVzYmR1eGZhc3RzdWJfdG1wLT5kdXhfY29tbWFuZHMgPSBOVUxMOwotCX0KLQl1c2JkdXhmYXN0c3ViX3RtcC0+YWlfY21kX3J1bm5pbmcgPSAwOworCisJa2ZyZWUodWRmcy0+aW5zbkJ1ZmZlcik7CisJdWRmcy0+aW5zbkJ1ZmZlciA9IE5VTEw7CisKKwlrZnJlZSh1ZGZzLT5kdXhfY29tbWFuZHMpOworCXVkZnMtPmR1eF9jb21tYW5kcyA9IE5VTEw7CisKKwl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDA7CiB9CiAKLS8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHVyYnMgYW5kIGluaXRpYWxpc2UgdGhlbQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotc3RhdGljIHZvaWQgKnVzYmR1eGZhc3RzdWJfcHJvYmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCi0JdW5zaWduZWQgaW50IGludGVyZm51bSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIHZvaWQgdXNiZHV4ZmFzdF9maXJtd2FyZV9yZXF1ZXN0X2NvbXBsZXRlX2hhbmRsZXIoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKKwkJCQkJCQkgdm9pZCAqY29udGV4dCkKIHsKLSNlbHNlCisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdXNiZHV4ZmFzdHN1Yl90bXAgPSBjb250ZXh0OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSB1c2JkdXhmYXN0c3ViX3RtcC0+dXNiZGV2OworCWludCByZXQ7CisKKwlpZiAoZncgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiB3ZSBuZWVkIHRvIHVwbG9hZCB0aGUgZmlybXdhcmUgaGVyZSBiZWNhdXNlIGZ3IHdpbGwgYmUKKwkgKiBmcmVlZCBvbmNlIHdlJ3ZlIGxlZnQgdGhpcyBmdW5jdGlvbgorCSAqLworCXJldCA9IHJlYWRfZmlybXdhcmUodXNiZHV4ZmFzdHN1Yl90bXAsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnVzYmRldi0+ZGV2LAorCQkJIkNvdWxkIG5vdCB1cGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsCisJCQlyZXQpOworCQlyZXR1cm47CisJfQorCisJY29tZWRpX3VzYl9hdXRvX2NvbmZpZyh1c2JkZXYsIEJPQVJETkFNRSk7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB1cmJzIGFuZCBpbml0aWFsaXNlIHRoZW0KKyAqLwogc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1aW50ZXJmLAogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYodWludGVyZik7Ci0jZW5kaWYKIAlpbnQgaTsKIAlpbnQgaW5kZXg7CisJaW50IHJldDsKIAogCWlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3RfOiBUaGlzIGRyaXZlciBuZWVkcyBVU0IgMi4wIHRvIG9wZXJhdGUuIEFib3J0aW5nLi4uXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0XzogVGhpcyBkcml2ZXIgbmVlZHMiCisJCSAgICAgICAiVVNCIDIuMCB0byBvcGVyYXRlLiBBYm9ydGluZy4uLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0XzogZmluZGluZyBhIGZyZWUgc3RydWN0dXJlIGZvciB0aGUgdXNiLWRldmljZVxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaV86IHVzYmR1eGZhc3RfOiBmaW5kaW5nIGEgZnJlZSBzdHJ1Y3R1cmUgZm9yICIKKwkgICAgICAgInRoZSB1c2ItZGV2aWNlXG4iKTsKICNlbmRpZgogCWRvd24oJnN0YXJ0X3N0b3Bfc2VtKTsKLQkvLyBsb29rIGZvciBhIGZyZWUgcGxhY2UgaW4gdGhlIHVzYmR1eGZhc3QgYXJyYXkKKwkvKiBsb29rIGZvciBhIGZyZWUgcGxhY2UgaW4gdGhlIHVzYmR1eGZhc3QgYXJyYXkgKi8KIAlpbmRleCA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBOVU1VU0JEVVhGQVNUOyBpKyspIHsKLQkJaWYgKCEodXNiZHV4ZmFzdHN1YltpXS5wcm9iZWQpKSB7CisJCWlmICghdXNiZHV4ZmFzdHN1YltpXS5wcm9iZWQpIHsKIAkJCWluZGV4ID0gaTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi0JLy8gbm8gbW9yZSBzcGFjZQorCS8qIG5vIG1vcmUgc3BhY2UgKi8KIAlpZiAoaW5kZXggPT0gLTEpIHsKLQkJcHJpbnRrKCJUb28gbWFueSB1c2JkdXhmYXN0LWRldmljZXMgY29ubmVjdGVkLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiVG9vIG1hbnkgdXNiZHV4ZmFzdC1kZXZpY2VzIGNvbm5lY3RlZC5cbiIpOwogCQl1cCgmc3RhcnRfc3RvcF9zZW0pOwogCQlyZXR1cm4gLUVNRklMRTsKIAl9CiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogdXNiZHV4ZmFzdHN1YlslZF0gaXMgcmVhZHkgdG8gY29ubmVjdCB0byBjb21lZGkuXG4iLCBpbmRleCk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVzYmR1eGZhc3RzdWJbJWRdIGlzIHJlYWR5IHRvICIKKwkgICAgICAgImNvbm5lY3QgdG8gY29tZWRpLlxuIiwgaW5kZXgpOwogI2VuZGlmCiAKIAlpbml0X01VVEVYKCYodXNiZHV4ZmFzdHN1YltpbmRleF0uc2VtKSk7Ci0JLy8gc2F2ZSBhIHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UKKwkvKiBzYXZlIGEgcG9pbnRlciB0byB0aGUgdXNiIGRldmljZSAqLwogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLnVzYmRldiA9IHVkZXY7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkKLQkvLyBzYXZlIHRoZSBpbnRlcmZhY2UgbnVtYmVyCi0JdXNiZHV4ZmFzdHN1YltpbmRleF0uaWZudW0gPSBpbnRlcmZudW07Ci0jZWxzZQotCS8vIDIuNjogc2F2ZSB0aGUgaW50ZXJmYWNlIGl0c2VsZgorCS8qIHNhdmUgdGhlIGludGVyZmFjZSBpdHNlbGYgKi8KIAl1c2JkdXhmYXN0c3ViW2luZGV4XS5pbnRlcmZhY2UgPSB1aW50ZXJmOwotCS8vIGdldCB0aGUgaW50ZXJmYWNlIG51bWJlciBmcm9tIHRoZSBpbnRlcmZhY2UKKwkvKiBnZXQgdGhlIGludGVyZmFjZSBudW1iZXIgZnJvbSB0aGUgaW50ZXJmYWNlICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0uaWZudW0gPSB1aW50ZXJmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0JLy8gaGFuZCB0aGUgcHJpdmF0ZSBkYXRhIG92ZXIgdG8gdGhlIHVzYiBzdWJzeXN0ZW0KLQkvLyB3aWxsIGJlIG5lZWRlZCBmb3IgZGlzY29ubmVjdAorCS8qCisJICogaGFuZCB0aGUgcHJpdmF0ZSBkYXRhIG92ZXIgdG8gdGhlIHVzYiBzdWJzeXN0ZW0KKwkgKiB3aWxsIGJlIG5lZWRlZCBmb3IgZGlzY29ubmVjdAorCSAqLwogCXVzYl9zZXRfaW50ZmRhdGEodWludGVyZiwgJih1c2JkdXhmYXN0c3ViW2luZGV4XSkpOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBpZm51bT0lZFxuIiwgdXNiZHV4ZmFzdHN1YltpbmRleF0uaWZudW0pOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGlfOiB1c2JkdXhmYXN0OiBpZm51bT0lZFxuIiwKKwkgICAgICAgdXNiZHV4ZmFzdHN1YltpbmRleF0uaWZudW0pOwogI2VuZGlmCi0JLy8gY3JlYXRlIHNwYWNlIGZvciB0aGUgY29tbWFuZHMgZ29pbmcgdG8gdGhlIHVzYiBkZXZpY2UKKwkvKiBjcmVhdGUgc3BhY2UgZm9yIHRoZSBjb21tYW5kcyBnb2luZyB0byB0aGUgdXNiIGRldmljZSAqLwogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLmR1eF9jb21tYW5kcyA9IGttYWxsb2MoU0laRU9GRFVYQlVGRkVSLAotCQlHRlBfS0VSTkVMKTsKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXVzYmR1eGZhc3RzdWJbaW5kZXhdLmR1eF9jb21tYW5kcykgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGVycm9yIGFsbG9jIHNwYWNlIGZvciBkYWMgY29tbWFuZHNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGVycm9yIGFsbG9jIHNwYWNlIGZvciAiCisJCSAgICAgICAiZGFjIGNvbW1hbmRzXG4iKTsKIAkJdGlkeV91cCgmKHVzYmR1eGZhc3RzdWJbaW5kZXhdKSk7CiAJCXVwKCZzdGFydF9zdG9wX3NlbSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQkvLyBjcmVhdGUgc3BhY2Ugb2YgdGhlIGluc3RydWN0aW9uIGJ1ZmZlcgorCS8qIGNyZWF0ZSBzcGFjZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gYnVmZmVyICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0uaW5zbkJ1ZmZlciA9IGttYWxsb2MoU0laRUlOU05CVUYsIEdGUF9LRVJORUwpOwotCWlmICghKHVzYmR1eGZhc3RzdWJbaW5kZXhdLmluc25CdWZmZXIpKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogY291bGQgbm90IGFsbG9jIHNwYWNlIGZvciBpbnNuQnVmZmVyXG4iKTsKKwlpZiAoIXVzYmR1eGZhc3RzdWJbaW5kZXhdLmluc25CdWZmZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBjb3VsZCBub3QgYWxsb2Mgc3BhY2UgIgorCQkgICAgICAgImZvciBpbnNuQnVmZmVyXG4iKTsKIAkJdGlkeV91cCgmKHVzYmR1eGZhc3RzdWJbaW5kZXhdKSk7CiAJCXVwKCZzdGFydF9zdG9wX3NlbSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQkvLyBzZXR0aW5nIHRvIGFsdGVybmF0ZSBzZXR0aW5nIDE6IGVuYWJsaW5nIGJ1bGsgZXAKKwkvKiBzZXR0aW5nIHRvIGFsdGVybmF0ZSBzZXR0aW5nIDE6IGVuYWJsaW5nIGJ1bGsgZXAgKi8KIAlpID0gdXNiX3NldF9pbnRlcmZhY2UodXNiZHV4ZmFzdHN1YltpbmRleF0udXNiZGV2LAogCQl1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSwgMSk7CiAJaWYgKGkgPCAwKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdCVkOiBjb3VsZCBub3Qgc3dpdGNoIHRvIGFsdGVybmF0ZSBzZXR0aW5nIDEuXG4iLCBpbmRleCk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdCVkOiBjb3VsZCBub3Qgc3dpdGNoIHRvICIKKwkJICAgICAgICJhbHRlcm5hdGUgc2V0dGluZyAxLlxuIiwgaW5kZXgpOwogCQl0aWR5X3VwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLnVyYkluID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAodXNiZHV4ZmFzdHN1YltpbmRleF0udXJiSW4gPT0gTlVMTCkgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3QlZDogQ291bGQgbm90IGFsbG9jLiB1cmJcbiIsIGluZGV4KTsKKwlpZiAoIXVzYmR1eGZhc3RzdWJbaW5kZXhdLnVyYkluKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdCVkOiBDb3VsZCBub3QgYWxsb2MuIgorCQkgICAgICAgInVyYlxuIiwgaW5kZXgpOwogCQl0aWR5X3VwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoU0laRUlOQlVGLCBHRlBfS0VSTkVMKTsKLQlpZiAoISh1c2JkdXhmYXN0c3ViW2luZGV4XS50cmFuc2Zlcl9idWZmZXIpKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdCVkOiBjb3VsZCBub3QgYWxsb2MuIHRyYW5zYi5cbiIsCi0JCQlpbmRleCk7CisJaWYgKCF1c2JkdXhmYXN0c3ViW2luZGV4XS50cmFuc2Zlcl9idWZmZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IGNvdWxkIG5vdCBhbGxvYy4gIgorCQkgICAgICAgInRyYW5zYi5cbiIsIGluZGV4KTsKIAkJdGlkeV91cCgmKHVzYmR1eGZhc3RzdWJbaW5kZXhdKSk7CiAJCXVwKCZzdGFydF9zdG9wX3NlbSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQkvLyB3ZSd2ZSByZWFjaGVkIHRoZSBib3R0b20gb2YgdGhlIGZ1bmN0aW9uCisJLyogd2UndmUgcmVhY2hlZCB0aGUgYm90dG9tIG9mIHRoZSBmdW5jdGlvbiAqLwogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLnByb2JlZCA9IDE7CiAJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3QlZCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuXG4iLAotCQlpbmRleCk7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCi0JcmV0dXJuICh2b2lkICopKCZ1c2JkdXhmYXN0c3ViW2luZGV4XSk7Ci0jZWxzZQotCS8vIHN1Y2Nlc3MKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLAorCQkJCSAgICAgIEZXX0FDVElPTl9IT1RQTFVHLAorCQkJCSAgICAgICJ1c2JkdXhmYXN0X2Zpcm13YXJlLmhleCIsCisJCQkJICAgICAgJnVkZXYtPmRldiwKKwkJCQkgICAgICB1c2JkdXhmYXN0c3ViICsgaW5kZXgsCisJCQkJICAgICAgdXNiZHV4ZmFzdF9maXJtd2FyZV9yZXF1ZXN0X2NvbXBsZXRlX2hhbmRsZXIpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJjb3VsZCBub3QgbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpXzogdXNiZHV4ZmFzdCVkIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSAiCisJICAgICAgICJpbml0aWFsaXplZC5cbiIsIGluZGV4KTsKKwkvKiBzdWNjZXNzICovCiAJcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotc3RhdGljIHZvaWQgdXNiZHV4ZmFzdHN1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB2b2lkICpwdHIpCi17Ci0JdXNiZHV4ZmFzdHN1Yl90ICp1c2JkdXhmYXN0c3ViX3RtcCA9ICh1c2JkdXhmYXN0c3ViX3QgKikgcHRyOwotI2Vsc2UKIHN0YXRpYyB2b2lkIHVzYmR1eGZhc3RzdWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQl1c2JkdXhmYXN0c3ViX3QgKnVzYmR1eGZhc3RzdWJfdG1wID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0jZW5kaWYKLQlpZiAoIXVzYmR1eGZhc3RzdWJfdG1wKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogZGlzY29ubmVjdCBjYWxsZWQgd2l0aCBudWxsIHBvaW50ZXIuXG4iKTsKKworCWlmICghdWRmcykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGRpc2Nvbm5lY3QgY2FsbGVkIHdpdGggIgorCQkgICAgICAgIm51bGwgcG9pbnRlci5cbiIpOwogCQlyZXR1cm47CiAJfQotCWlmICh1c2JkdXhmYXN0c3ViX3RtcC0+dXNiZGV2ICE9IHVkZXYpIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBCVUchIGNhbGxlZCB3aXRoIHdyb25nIHB0ciEhIVxuIik7CisJaWYgKHVkZnMtPnVzYmRldiAhPSB1ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogQlVHISBjYWxsZWQgd2l0aCB3cm9uZyAiCisJCSAgICAgICAicHRyISEhXG4iKTsKIAkJcmV0dXJuOwogCX0KKworCWNvbWVkaV91c2JfYXV0b191bmNvbmZpZyh1ZGV2KTsKKwogCWRvd24oJnN0YXJ0X3N0b3Bfc2VtKTsKLQlkb3duKCZ1c2JkdXhmYXN0c3ViX3RtcC0+c2VtKTsKLQl0aWR5X3VwKHVzYmR1eGZhc3RzdWJfdG1wKTsKLQl1cCgmdXNiZHV4ZmFzdHN1Yl90bXAtPnNlbSk7CisJZG93bigmdWRmcy0+c2VtKTsKKwl0aWR5X3VwKHVkZnMpOworCXVwKCZ1ZGZzLT5zZW0pOwogCXVwKCZzdGFydF9zdG9wX3NlbSk7CisKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgdXNiXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpXzogdXNiZHV4ZmFzdDogZGlzY29ubmVjdGVkIGZyb20gdGhlIHVzYlxuIik7CiAjZW5kaWYKIH0KIAotLy8gaXMgY2FsbGVkIHdoZW4gY29tZWRpLWNvbmZpZyBpcyBjYWxsZWQKLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KQorLyoKKyAqIGlzIGNhbGxlZCB3aGVuIGNvbWVkaS1jb25maWcgaXMgY2FsbGVkCisgKi8KK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCWludCByZXQ7CiAJaW50IGluZGV4OwogCWludCBpOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gTlVMTDsKIAlkZXYtPnByaXZhdGUgPSBOVUxMOwogCiAJZG93bigmc3RhcnRfc3RvcF9zZW0pOwotCS8vIGZpbmQgYSB2YWxpZCBkZXZpY2Ugd2hpY2ggaGFzIGJlZW4gZGV0ZWN0ZWQgYnkgdGhlIHByb2JlIGZ1bmN0aW9uIG9mIHRoZSB1c2IKKwkvKgorCSAqIGZpbmQgYSB2YWxpZCBkZXZpY2Ugd2hpY2ggaGFzIGJlZW4gZGV0ZWN0ZWQgYnkgdGhlCisJICogcHJvYmUgZnVuY3Rpb24gb2YgdGhlIHVzYgorCSAqLwogCWluZGV4ID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IE5VTVVTQkRVWEZBU1Q7IGkrKykgewotCQlpZiAoKHVzYmR1eGZhc3RzdWJbaV0ucHJvYmVkKSAmJiAoIXVzYmR1eGZhc3RzdWJbaV0uYXR0YWNoZWQpKSB7CisJCWlmICh1c2JkdXhmYXN0c3ViW2ldLnByb2JlZCAmJiAhdXNiZHV4ZmFzdHN1YltpXS5hdHRhY2hlZCkgewogCQkJaW5kZXggPSBpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlpZiAoaW5kZXggPCAwKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGVycm9yOiBhdHRhY2ggZmFpbGVkLCBubyB1c2JkdXhmYXN0IGRldnMgY29ubmVjdGVkIHRvIHRoZSB1c2IgYnVzLlxuIiwgZGV2LT5taW5vcik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGVycm9yOiBhdHRhY2ggZmFpbGVkLCAiCisJCSAgICAgICAibm8gdXNiZHV4ZmFzdCBkZXZzIGNvbm5lY3RlZCB0byB0aGUgdXNiIGJ1cy5cbiIsCisJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZG93bigmKHVzYmR1eGZhc3RzdWJbaW5kZXhdLnNlbSkpOwotCS8vIHBvaW50ZXIgYmFjayB0byB0aGUgY29ycmVzcG9uZGluZyBjb21lZGkgZGV2aWNlCisJLyogcG9pbnRlciBiYWNrIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbWVkaSBkZXZpY2UgKi8KIAl1c2JkdXhmYXN0c3ViW2luZGV4XS5jb21lZGlkZXYgPSBkZXY7CiAKLQkvLyB0cnlpbmcgdG8gdXBsb2FkIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBjaGlwCisJLyogdHJ5aW5nIHRvIHVwbG9hZCB0aGUgZmlybXdhcmUgaW50byB0aGUgY2hpcCAqLwogCWlmIChjb21lZGlfYXV4X2RhdGEoaXQtPm9wdGlvbnMsIDApICYmCi0JCWl0LT5vcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBX0xFTkdUSF0pIHsKLQkJcmVhZF9maXJtd2FyZSh1c2JkdXhmYXN0c3ViLAotCQkJY29tZWRpX2F1eF9kYXRhKGl0LT5vcHRpb25zLCAwKSwKLQkJCWl0LT5vcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBX0xFTkdUSF0pOworCSAgICBpdC0+b3B0aW9uc1tDT01FRElfREVWQ09ORl9BVVhfREFUQV9MRU5HVEhdKSB7CisJCXJlYWRfZmlybXdhcmUoJnVzYmR1eGZhc3RzdWJbaW5kZXhdLAorCQkJICAgICAgY29tZWRpX2F1eF9kYXRhKGl0LT5vcHRpb25zLCAwKSwKKwkJCSAgICAgIGl0LT5vcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBX0xFTkdUSF0pOwogCX0KIAogCWRldi0+Ym9hcmRfbmFtZSA9IEJPQVJETkFNRTsKQEAgLTE2MTYsMTU1ICsxNzYxLDE1MCBAQAogCS8qIHNldCBudW1iZXIgb2Ygc3ViZGV2aWNlcyAqLwogCWRldi0+bl9zdWJkZXZpY2VzID0gTl9TVUJERVZJQ0VTOwogCi0JLy8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBzdWJkZXZpY2VzCi0JaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgTl9TVUJERVZJQ0VTKSkgPCAwKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGVycm9yIGFsbG9jIHNwYWNlIGZvciBzdWJkZXZcbiIsCi0JCQlkZXYtPm1pbm9yKTsKKwkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHN1YmRldmljZXMgKi8KKwlyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgTl9TVUJERVZJQ0VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBlcnJvciBhbGxvYyBzcGFjZSBmb3IgIgorCQkgICAgICAgInN1YmRldlxuIiwgZGV2LT5taW5vcik7CisJCXVwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0uc2VtKSk7CiAJCXVwKCZzdGFydF9zdG9wX3NlbSk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogdXNiLWRldmljZSAlZCBpcyBhdHRhY2hlZCB0byBjb21lZGkuXG4iLAotCQlkZXYtPm1pbm9yLCBpbmRleCk7Ci0JLy8gcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgYWxzbyBzaW1wbHkgdGhlIHVzYi1zdHJ1Y3R1cmUKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogdXNiZHV4ZmFzdDogdXNiLWRldmljZSAlZCBpcyBhdHRhY2hlZCB0byAiCisJICAgICAgICJjb21lZGkuXG4iLCBkZXYtPm1pbm9yLCBpbmRleCk7CisJLyogcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgYWxzbyBzaW1wbHkgdGhlIHVzYi1zdHJ1Y3R1cmUgKi8KIAlkZXYtPnByaXZhdGUgPSB1c2JkdXhmYXN0c3ViICsgaW5kZXg7Ci0JLy8gdGhlIGZpcnN0IHN1YmRldmljZSBpcyB0aGUgQS9EIGNvbnZlcnRlcgorCS8qIHRoZSBmaXJzdCBzdWJkZXZpY2UgaXMgdGhlIEEvRCBjb252ZXJ0ZXIgKi8KIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgU1VCREVWX0FEOwotCS8vIHRoZSBVUkJzIGdldCB0aGUgY29tZWRpIHN1YmRldmljZQotCS8vIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciByZWFkaW5nCi0JLy8gdGhpcyBpcyB0aGUgc3ViZGV2aWNlIHdoaWNoIHJlYWRzIGRhdGEKKwkvKgorCSAqIHRoZSBVUkJzIGdldCB0aGUgY29tZWRpIHN1YmRldmljZSB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgcmVhZGluZworCSAqIHRoaXMgaXMgdGhlIHN1YmRldmljZSB3aGljaCByZWFkcyBkYXRhCisJICovCiAJZGV2LT5yZWFkX3N1YmRldiA9IHM7Ci0JLy8gdGhlIHN1YmRldmljZSByZWNlaXZlcyBhcyBwcml2YXRlIHN0cnVjdHVyZSB0aGUKLQkvLyB1c2Itc3RydWN0dXJlCisJLyogdGhlIHN1YmRldmljZSByZWNlaXZlcyBhcyBwcml2YXRlIHN0cnVjdHVyZSB0aGUgdXNiLXN0cnVjdHVyZSAqLwogCXMtPnByaXZhdGUgPSBOVUxMOwotCS8vIGFuYWxvZyBpbnB1dAorCS8qIGFuYWxvZyBpbnB1dCAqLwogCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKLQkvLyByZWFkYWJsZSBhbmQgcmVmIGlzIHRvIGdyb3VuZAorCS8qIHJlYWRhYmxlIGFuZCByZWYgaXMgdG8gZ3JvdW5kICovCiAJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DTURfUkVBRDsKLQkvLyAxNiBjaGFubmVscworCS8qIDE2IGNoYW5uZWxzICovCiAJcy0+bl9jaGFuID0gMTY7Ci0JLy8gbGVuZ3RoIG9mIHRoZSBjaGFubmVsbGlzdAorCS8qIGxlbmd0aCBvZiB0aGUgY2hhbm5lbGxpc3QgKi8KIAlzLT5sZW5fY2hhbmxpc3QgPSAxNjsKLQkvLyBjYWxsYmFjayBmdW5jdGlvbnMKKwkvKiBjYWxsYmFjayBmdW5jdGlvbnMgKi8KIAlzLT5pbnNuX3JlYWQgPSB1c2JkdXhmYXN0X2FpX2luc25fcmVhZDsKIAlzLT5kb19jbWR0ZXN0ID0gdXNiZHV4ZmFzdF9haV9jbWR0ZXN0OwogCXMtPmRvX2NtZCA9IHVzYmR1eGZhc3RfYWlfY21kOwogCXMtPmNhbmNlbCA9IHVzYmR1eGZhc3RfYWlfY2FuY2VsOwotCS8vIG1heCB2YWx1ZSBmcm9tIHRoZSBBL0QgY29udmVydGVyICgxMmJpdCsxIGJpdCBmb3Igb3ZlcmZsb3cpCisJLyogbWF4IHZhbHVlIGZyb20gdGhlIEEvRCBjb252ZXJ0ZXIgKDEyYml0KzEgYml0IGZvciBvdmVyZmxvdykgKi8KIAlzLT5tYXhkYXRhID0gMHgxMDAwOwotCS8vIHJhbmdlIHRhYmxlIHRvIGNvbnZlcnQgdG8gcGh5c2ljYWwgdW5pdHMKKwkvKiByYW5nZSB0YWJsZSB0byBjb252ZXJ0IHRvIHBoeXNpY2FsIHVuaXRzICovCiAJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdXNiZHV4ZmFzdF9haV9yYW5nZTsKIAotCS8vIGZpbmFsbHkgZGVjaWRlIHRoYXQgaXQncyBhdHRhY2hlZAorCS8qIGZpbmFsbHkgZGVjaWRlIHRoYXQgaXQncyBhdHRhY2hlZCAqLwogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLmF0dGFjaGVkID0gMTsKIAogCXVwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0uc2VtKSk7Ci0KIAl1cCgmc3RhcnRfc3RvcF9zZW0pOwotCi0JcHJpbnRrKCJjb21lZGklZDogc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIHRvIHVzYmR1eGZhc3QuXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIHRvIHVzYmR1eGZhc3QuXG4iLAorCSAgICAgICBkZXYtPm1pbm9yKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eGZhc3RfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JdXNiZHV4ZmFzdHN1Yl90ICp1c2JkdXhmYXN0c3ViX3RtcDsKLQotI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBkZXRhY2ggdXNiIGRldmljZVxuIiwgZGV2LT5taW5vcik7Ci0jZW5kaWYKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzOwogCiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKCJjb21lZGk/OiB1c2JkdXhmYXN0OiBkZXRhY2ggd2l0aG91dCBkZXYgdmFyaWFibGUuLi5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaT86IHVzYmR1eGZhc3Q6IGRldGFjaCB3aXRob3V0IGRldiAiCisJCSAgICAgICAidmFyaWFibGUuLi5cbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQl1c2JkdXhmYXN0c3ViX3RtcCA9IGRldi0+cHJpdmF0ZTsKLQlpZiAoIXVzYmR1eGZhc3RzdWJfdG1wKSB7Ci0JCXByaW50aygiY29tZWRpPzogdXNiZHV4ZmFzdDogZGV0YWNoIHdpdGhvdXQgcHRyIHRvIHVzYmR1eGZhc3RzdWJbXVxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWRvd24oJnVzYmR1eGZhc3RzdWJfdG1wLT5zZW0pOwotCWRvd24oJnN0YXJ0X3N0b3Bfc2VtKTsKLQkvLyBEb24ndCBhbGxvdyBkZXRhY2ggdG8gZnJlZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKLQkvLyBJdCdzIG9uZSBlbnRyeSBvZiBvZiB1c2JkdXhmYXN0c3ViW10KLQlkZXYtPnByaXZhdGUgPSBOVUxMOwotCXVzYmR1eGZhc3RzdWJfdG1wLT5hdHRhY2hlZCA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yl90bXAtPmNvbWVkaWRldiA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGRldGFjaDogc3VjY2Vzc2Z1bGx5IHJlbW92ZWRcbiIsCi0JCWRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdDogZGV0YWNoIHVzYiBkZXZpY2VcbiIsCisJICAgICAgIGRldi0+bWlub3IpOworI2VuZGlmCisKKwl1ZGZzID0gZGV2LT5wcml2YXRlOworCWlmICghdWRmcykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaT86IHVzYmR1eGZhc3Q6IGRldGFjaCB3aXRob3V0IHB0ciB0byAiCisJCSAgICAgICAidXNiZHV4ZmFzdHN1YltdXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZG93bigmdWRmcy0+c2VtKTsKKwlkb3duKCZzdGFydF9zdG9wX3NlbSk7CisJLyoKKwkgKiBEb24ndCBhbGxvdyBkZXRhY2ggdG8gZnJlZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKKwkgKiBJdCdzIG9uZSBlbnRyeSBvZiBvZiB1c2JkdXhmYXN0c3ViW10KKwkgKi8KKwlkZXYtPnByaXZhdGUgPSBOVUxMOworCXVkZnMtPmF0dGFjaGVkID0gMDsKKwl1ZGZzLT5jb21lZGlkZXYgPSBOVUxMOworI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGRldGFjaDogc3VjY2Vzc2Z1bGx5ICIKKwkgICAgICAgInJlbW92ZWRcbiIsIGRldi0+bWlub3IpOwogI2VuZGlmCiAJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKLQl1cCgmdXNiZHV4ZmFzdHN1Yl90bXAtPnNlbSk7CisJdXAoJnVkZnMtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIG1haW4gZHJpdmVyIHN0cnVjdCAqLwotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX3VzYmR1eGZhc3QgPSB7Ci0gICAgICBkcml2ZXJfbmFtZToidXNiZHV4ZmFzdCIsCi0gICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCi0gICAgICBhdHRhY2g6dXNiZHV4ZmFzdF9hdHRhY2gsCi0gICAgICBkZXRhY2g6dXNiZHV4ZmFzdF9kZXRhY2gsCisvKgorICogbWFpbiBkcml2ZXIgc3RydWN0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfdXNiZHV4ZmFzdCA9IHsKKwkuZHJpdmVyX25hbWUJPSAidXNiZHV4ZmFzdCIsCisJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuYXR0YWNoCQk9IHVzYmR1eGZhc3RfYXR0YWNoLAorCS5kZXRhY2gJCT0gdXNiZHV4ZmFzdF9kZXRhY2gKIH07CiAKLXN0YXRpYyB2b2lkIGluaXRfdXNiX2RldmljZXModm9pZCkKLXsKLQlpbnQgaW5kZXg7Ci0jaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogc2V0dGluZyBhbGwgcG9zc2libGUgZGV2cyB0byBpbnZhbGlkXG4iKTsKLSNlbmRpZgotCS8vIGFsbCBkZXZpY2VzIGVudHJpZXMgYXJlIGludmFsaWQgdG8gYmVnaW4gd2l0aAotCS8vIHRoZXkgd2lsbCBiZWNvbWUgdmFsaWQgYnkgdGhlIHByb2JlIGZ1bmN0aW9uCi0JLy8gYW5kIHRoZW4gZmluYWxseSBieSB0aGUgYXR0YWNoLWZ1bmN0aW9uCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNVVNCRFVYRkFTVDsgaW5kZXgrKykgewotCQltZW1zZXQoJih1c2JkdXhmYXN0c3ViW2luZGV4XSksIDB4MDAsCi0JCQlzaXplb2YodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKLQkJaW5pdF9NVVRFWCgmKHVzYmR1eGZhc3RzdWJbaW5kZXhdLnNlbSkpOwotCX0KLX0KLQotLy8gVGFibGUgd2l0aCB0aGUgVVNCLWRldmljZXM6IGp1c3Qgbm93IG9ubHkgdGVzdGluZyBJRHMKKy8qCisgKiBUYWJsZSB3aXRoIHRoZSBVU0ItZGV2aWNlczoganVzdCBub3cgb25seSB0ZXN0aW5nIElEcworICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiZHV4ZmFzdHN1Yl90YWJsZVtdID0gewotCS8vICAgICAgICB7IFVTQl9ERVZJQ0UoMHg0YjQsIDB4ODYxMyksIC8vdGVzdGluZwotCS8vICAgICAgICB9LAotCXtVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDEwKQkvL3JlYWwgSUQKLQkJfSwKLQl7VVNCX0RFVklDRSgweDEzZDgsIDB4MDAxMSkJLy9yZWFsIElECi0JCX0sCi0Je30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCS8qIHsgVVNCX0RFVklDRSgweDRiNCwgMHg4NjEzKSB9LCB0ZXN0aW5nICovCisJeyBVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDEwKSB9LAkvKiByZWFsIElEICovCisJeyBVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDExKSB9LAkvKiByZWFsIElEICovCisJeyB9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JkdXhmYXN0c3ViX3RhYmxlKTsKIAotLy8gVGhlIHVzYmR1eGZhc3RzdWItZHJpdmVyCisvKgorICogVGhlIHVzYmR1eGZhc3RzdWItZHJpdmVyCisgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JkdXhmYXN0c3ViX2RyaXZlciA9IHsKICNpZmRlZiBDT01FRElfSEFWRV9VU0JfRFJJVkVSX09XTkVSCi0gICAgICBvd25lcjpUSElTX01PRFVMRSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAjZW5kaWYKLSAgICAgIG5hbWU6Qk9BUkROQU1FLAotICAgICAgcHJvYmU6dXNiZHV4ZmFzdHN1Yl9wcm9iZSwKLSAgICAgIGRpc2Nvbm5lY3Q6dXNiZHV4ZmFzdHN1Yl9kaXNjb25uZWN0LAotICAgICAgaWRfdGFibGU6dXNiZHV4ZmFzdHN1Yl90YWJsZSwKKwkubmFtZQkJPSBCT0FSRE5BTUUsCisJLnByb2JlCQk9IHVzYmR1eGZhc3RzdWJfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB1c2JkdXhmYXN0c3ViX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gdXNiZHV4ZmFzdHN1Yl90YWJsZQogfTsKIAotLy8gQ2FuJ3QgdXNlIHRoZSBuaWNlIG1hY3JvIGFzIEkgaGF2ZSBhbHNvIHRvIGluaXRpYWxpc2UgdGhlIFVTQgotLy8gc3Vic3lzdGVtOgotLy8gcmVnaXN0ZXJpbmcgdGhlIHVzYi1zeXN0ZW0gX2FuZF8gdGhlIGNvbWVkaS1kcml2ZXIKLXN0YXRpYyBpbnQgaW5pdF91c2JkdXhmYXN0KHZvaWQpCisvKgorICogQ2FuJ3QgdXNlIHRoZSBuaWNlIG1hY3JvIGFzIEkgaGF2ZSBhbHNvIHRvIGluaXRpYWxpc2UgdGhlIFVTQiBzdWJzeXN0ZW06CisgKiByZWdpc3RlcmluZyB0aGUgdXNiLXN5c3RlbSBfYW5kXyB0aGUgY29tZWRpLWRyaXZlcgorICovCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3VzYmR1eGZhc3Qodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIKLQkgICAgICAgRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDICJcbiIpOwotCWluaXRfdXNiX2RldmljZXMoKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDICJcbiIpOwogCXVzYl9yZWdpc3RlcigmdXNiZHV4ZmFzdHN1Yl9kcml2ZXIpOwogCWNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl91c2JkdXhmYXN0KTsKIAlyZXR1cm4gMDsKIH0KIAotLy8gZGVyZWdpc3RlcmluZyB0aGUgY29tZWRpIGRyaXZlciBhbmQgdGhlIHVzYi1zdWJzeXN0ZW0KLXN0YXRpYyB2b2lkIGV4aXRfdXNiZHV4ZmFzdCh2b2lkKQorLyoKKyAqIGRlcmVnaXN0ZXJpbmcgdGhlIGNvbWVkaSBkcml2ZXIgYW5kIHRoZSB1c2Itc3Vic3lzdGVtCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3VzYmR1eGZhc3Qodm9pZCkKIHsKIAljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl91c2JkdXhmYXN0KTsKIAl1c2JfZGVyZWdpc3RlcigmdXNiZHV4ZmFzdHN1Yl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9pbnRlcnJ1cHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvaW50ZXJydXB0LmgKaW5kZXggMzAzOGU0Ni4uZDFmMDk4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9pbnRlcnJ1cHQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2ludGVycnVwdC5oCkBAIC0yMSwxNSArMjEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0KLSNpZm5kZWYgSVJRX05PTkUKLXR5cGVkZWYgdm9pZCBpcnFyZXR1cm5fdDsKLSNkZWZpbmUgSVJRX05PTkUKLSNkZWZpbmUgSVJRX0hBTkRMRUQKLSNkZWZpbmUgSVJRX1JFVFZBTCh4KSAodm9pZCkoeCkKLSNlbmRpZgotCiAjaWZuZGVmIElSUUZfRElTQUJMRUQKICNkZWZpbmUgSVJRRl9ESVNBQkxFRCAgICAgICAgICAgU0FfSU5URVJSVVBUCiAjZGVmaW5lIElSUUZfU0FNUExFX1JBTkRPTSAgICAgIFNBX1NBTVBMRV9SQU5ET00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9kYXRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZGF0YS5jCmluZGV4IDc5YWVjMjAuLjk3OTdlMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9kYXRhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2RhdGEuYwpAQCAtMjcsMTAgKzI3LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAotaW50IGNvbWVkaV9kYXRhX3dyaXRlKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCBsc2FtcGxfdCBkYXRhKQoraW50IGNvbWVkaV9kYXRhX3dyaXRlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCisJdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwgdW5zaWduZWQgaW50IGRhdGEpCiB7Ci0JY29tZWRpX2luc24gaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX1dSSVRFOwpAQCAtNDIsMTAgKzQyLDEwIEBACiAJcmV0dXJuIGNvbWVkaV9kb19pbnNuKGRldiwgJmluc24pOwogfQogCi1pbnQgY29tZWRpX2RhdGFfcmVhZChjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCi0JdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwgbHNhbXBsX3QgKiBkYXRhKQoraW50IGNvbWVkaV9kYXRhX3JlYWQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7Ci0JY29tZWRpX2luc24gaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX1JFQUQ7CkBAIC01NywxMSArNTcsMTEgQEAKIAlyZXR1cm4gY29tZWRpX2RvX2luc24oZGV2LCAmaW5zbik7CiB9CiAKLWludCBjb21lZGlfZGF0YV9yZWFkX2hpbnQoY29tZWRpX3QgKiBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCitpbnQgY29tZWRpX2RhdGFfcmVhZF9oaW50KHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwKIAl1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZikKIHsKLQljb21lZGlfaW5zbiBpbnNuOwotCWxzYW1wbF90IGR1bW15X2RhdGE7CisJc3RydWN0IGNvbWVkaV9pbnNuIGluc247CisJdW5zaWduZWQgaW50IGR1bW15X2RhdGE7CiAKIAltZW1zZXQoJmluc24sIDAsIHNpemVvZihpbnNuKSk7CiAJaW5zbi5pbnNuID0gSU5TTl9SRUFEOwpAQCAtNzMsOSArNzMsOSBAQAogCXJldHVybiBjb21lZGlfZG9faW5zbihkZXYsICZpbnNuKTsKIH0KIAotaW50IGNvbWVkaV9kYXRhX3JlYWRfZGVsYXllZChjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwKK2ludCBjb21lZGlfZGF0YV9yZWFkX2RlbGF5ZWQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAogCXVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLAotCWxzYW1wbF90ICogZGF0YSwgdW5zaWduZWQgaW50IG5hbm9fc2VjKQorCXVuc2lnbmVkIGludCAqZGF0YSwgdW5zaWduZWQgaW50IG5hbm9fc2VjKQogewogCWludCByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9kaW8uYwppbmRleCBhOWY0ODhhLi44NTk1NTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2Rpby5jCkBAIC0yNiwxMCArMjYsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCi1pbnQgY29tZWRpX2Rpb19jb25maWcoY29tZWRpX3QgKiBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAoraW50IGNvbWVkaV9kaW9fY29uZmlnKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50IGlvKQogewotCWNvbWVkaV9pbnNuIGluc247CisJc3RydWN0IGNvbWVkaV9pbnNuIGluc247CiAKIAltZW1zZXQoJmluc24sIDAsIHNpemVvZihpbnNuKSk7CiAJaW5zbi5pbnNuID0gSU5TTl9DT05GSUc7CkBAIC00MSwxMCArNDEsMTAgQEAKIAlyZXR1cm4gY29tZWRpX2RvX2luc24oZGV2LCAmaW5zbik7CiB9CiAKLWludCBjb21lZGlfZGlvX3JlYWQoY29tZWRpX3QgKiBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAoraW50IGNvbWVkaV9kaW9fcmVhZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAogCXVuc2lnbmVkIGludCAqdmFsKQogewotCWNvbWVkaV9pbnNuIGluc247CisJc3RydWN0IGNvbWVkaV9pbnNuIGluc247CiAKIAltZW1zZXQoJmluc24sIDAsIHNpemVvZihpbnNuKSk7CiAJaW5zbi5pbnNuID0gSU5TTl9SRUFEOwpAQCAtNTYsMTAgKzU2LDEwIEBACiAJcmV0dXJuIGNvbWVkaV9kb19pbnNuKGRldiwgJmluc24pOwogfQogCi1pbnQgY29tZWRpX2Rpb193cml0ZShjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCitpbnQgY29tZWRpX2Rpb193cml0ZSh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAogCXVuc2lnbmVkIGludCB2YWwpCiB7Ci0JY29tZWRpX2luc24gaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX1dSSVRFOwpAQCAtNzEsMTEgKzcxLDExIEBACiAJcmV0dXJuIGNvbWVkaV9kb19pbnNuKGRldiwgJmluc24pOwogfQogCi1pbnQgY29tZWRpX2Rpb19iaXRmaWVsZChjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IG1hc2ssCitpbnQgY29tZWRpX2Rpb19iaXRmaWVsZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBtYXNrLAogCXVuc2lnbmVkIGludCAqYml0cykKIHsKLQljb21lZGlfaW5zbiBpbnNuOwotCWxzYW1wbF90IGRhdGFbMl07CisJc3RydWN0IGNvbWVkaV9pbnNuIGluc247CisJdW5zaWduZWQgaW50IGRhdGFbMl07CiAJaW50IHJldDsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9nZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9nZXQuYwppbmRleCAyMDA0YWQ0Li5iNmI3MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZ2V0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2dldC5jCkBAIC0yNiw1MSArMjYsNTEgQEAKICNpbmNsdWRlICIuLi9jb21lZGlsaWIuaCIKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAotaW50IGNvbWVkaV9nZXRfbl9zdWJkZXZpY2VzKGNvbWVkaV90ICogZCkKK2ludCBjb21lZGlfZ2V0X25fc3ViZGV2aWNlcyh2b2lkICpkKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOwogCiAJcmV0dXJuIGRldi0+bl9zdWJkZXZpY2VzOwogfQogCi1pbnQgY29tZWRpX2dldF92ZXJzaW9uX2NvZGUoY29tZWRpX3QgKiBkKQoraW50IGNvbWVkaV9nZXRfdmVyc2lvbl9jb2RlKHZvaWQgKmQpCiB7CiAJcmV0dXJuIENPTUVESV9WRVJTSU9OX0NPREU7CiB9CiAKLWNvbnN0IGNoYXIgKmNvbWVkaV9nZXRfZHJpdmVyX25hbWUoY29tZWRpX3QgKiBkKQorY29uc3QgY2hhciAqY29tZWRpX2dldF9kcml2ZXJfbmFtZSh2b2lkICogZCkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKIAogCXJldHVybiBkZXYtPmRyaXZlci0+ZHJpdmVyX25hbWU7CiB9CiAKLWNvbnN0IGNoYXIgKmNvbWVkaV9nZXRfYm9hcmRfbmFtZShjb21lZGlfdCAqIGQpCitjb25zdCBjaGFyICpjb21lZGlfZ2V0X2JvYXJkX25hbWUodm9pZCAqIGQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAlyZXR1cm4gZGV2LT5ib2FyZF9uYW1lOwogfQogCi1pbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfdHlwZShjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfdHlwZSh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CiAKIAlyZXR1cm4gcy0+dHlwZTsKIH0KIAotdW5zaWduZWQgaW50IGNvbWVkaV9nZXRfc3ViZGV2aWNlX2ZsYWdzKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK3Vuc2lnbmVkIGludCBjb21lZGlfZ2V0X3N1YmRldmljZV9mbGFncyh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CiAKIAlyZXR1cm4gcy0+c3ViZGV2X2ZsYWdzOwogfQogCi1pbnQgY29tZWRpX2ZpbmRfc3ViZGV2aWNlX2J5X3R5cGUoY29tZWRpX3QgKiBkLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN1YmQpCitpbnQgY29tZWRpX2ZpbmRfc3ViZGV2aWNlX2J5X3R5cGUodm9pZCAqZCwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdWJkKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOwogCiAJaWYgKHN1YmQgPiBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC04MiwyNyArODIsMjcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBjb21lZGlfZ2V0X25fY2hhbm5lbHMoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQoraW50IGNvbWVkaV9nZXRfbl9jaGFubmVscyh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CiAKIAlyZXR1cm4gcy0+bl9jaGFuOwogfQogCi1pbnQgY29tZWRpX2dldF9sZW5fY2hhbmxpc3QoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQoraW50IGNvbWVkaV9nZXRfbGVuX2NoYW5saXN0KHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCXJldHVybiBzLT5sZW5fY2hhbmxpc3Q7CiB9CiAKLWxzYW1wbF90IGNvbWVkaV9nZXRfbWF4ZGF0YShjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCit1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9tYXhkYXRhKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCWlmIChzLT5tYXhkYXRhX2xpc3QpCiAJCXJldHVybiBzLT5tYXhkYXRhX2xpc3RbY2hhbl07CkBAIC0xMTEsMTEgKzExMSwxMSBAQAogfQogCiAjaWZkZWYgS0NPTUVESUxJQl9ERVBSRUNBVEVECi1pbnQgY29tZWRpX2dldF9yYW5nZXR5cGUoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAoraW50IGNvbWVkaV9nZXRfcmFuZ2V0eXBlKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAlpbnQgcmV0OwogCiAJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKQEAgLTEzMCwxMCArMTMwLDEwIEBACiB9CiAjZW5kaWYKIAotaW50IGNvbWVkaV9nZXRfbl9yYW5nZXMoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZCBpbnQgY2hhbikKK2ludCBjb21lZGlfZ2V0X25fcmFuZ2VzKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludCBjaGFuKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CiAJaW50IHJldDsKIAogCWlmIChzLT5yYW5nZV90YWJsZV9saXN0KSB7CkBAIC0xNDgsMjIgKzE0OCwyMiBAQAogLyoKICAqIEFMUEhBIChub24tcG9ydGFibGUpCiAqLwotaW50IGNvbWVkaV9nZXRfa3JhbmdlKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50IGNoYW4sCi0JdW5zaWduZWQgaW50IHJhbmdlLCBjb21lZGlfa3JhbmdlICoga3JhbmdlKQoraW50IGNvbWVkaV9nZXRfa3JhbmdlKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludCBjaGFuLAorCXVuc2lnbmVkIGludCByYW5nZSwgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7Ci0JY29uc3QgY29tZWRpX2xyYW5nZSAqbHI7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpscjsKIAogCWlmIChzLT5yYW5nZV90YWJsZV9saXN0KSB7CiAJCWxyID0gcy0+cmFuZ2VfdGFibGVfbGlzdFtjaGFuXTsKIAl9IGVsc2UgewogCQlsciA9IHMtPnJhbmdlX3RhYmxlOwogCX0KLQlpZiAocmFuZ2UgPj0gbHItPmxlbmd0aCkgeworCWlmIChyYW5nZSA+PSBsci0+bGVuZ3RoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JbWVtY3B5KGtyYW5nZSwgbHItPnJhbmdlICsgcmFuZ2UsIHNpemVvZihjb21lZGlfa3JhbmdlKSk7CisKKwltZW1jcHkoa3JhbmdlLCBsci0+cmFuZ2UgKyByYW5nZSwgc2l6ZW9mKHN0cnVjdCBjb21lZGlfa3JhbmdlKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MSwxMSArMTcxLDExIEBACiAvKgogICogQUxQSEEgKG1heSBiZSByZW5hbWVkKQogKi8KLXVuc2lnbmVkIGludCBjb21lZGlfZ2V0X2J1Zl9oZWFkX3Bvcyhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCit1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9idWZfaGVhZF9wb3Modm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAKIAlhc3luYyA9IHMtPmFzeW5jOwogCWlmIChhc3luYyA9PSBOVUxMKQpAQCAtMTg0LDExICsxODQsMTEgQEAKIAlyZXR1cm4gYXN5bmMtPmJ1Zl93cml0ZV9jb3VudDsKIH0KIAotaW50IGNvbWVkaV9nZXRfYnVmZmVyX2NvbnRlbnRzKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfZ2V0X2J1ZmZlcl9jb250ZW50cyh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzOwogCiAJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKQEAgLTIwMywxMiArMjAzLDEyIEBACiAvKgogICogQUxQSEEKICovCi1pbnQgY29tZWRpX3NldF91c2VyX2ludF9jb3VudChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX3NldF91c2VyX2ludF9jb3VudCh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAogCXVuc2lnbmVkIGludCBidWZfdXNlcl9jb3VudCkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAJaW50IG51bV9ieXRlczsKIAogCWFzeW5jID0gcy0+YXN5bmM7CkBAIC0yMjQsMTIgKzIyNCwxMiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY29tZWRpX21hcmtfYnVmZmVyX3JlYWQoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAoraW50IGNvbWVkaV9tYXJrX2J1ZmZlcl9yZWFkKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAKIAlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLTE7CkBAIC0yNDMsMTIgKzI0MywxMiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY29tZWRpX21hcmtfYnVmZmVyX3dyaXR0ZW4oY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAoraW50IGNvbWVkaV9tYXJrX2J1ZmZlcl93cml0dGVuKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAJaW50IGJ5dGVzX3dyaXR0ZW47CiAKIAlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQpAQCAtMjYzLDExICsyNjMsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNvbWVkaV9nZXRfYnVmZmVyX3NpemUoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2KQoraW50IGNvbWVkaV9nZXRfYnVmZmVyX3NpemUodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldikKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAKIAlpZiAoc3ViZGV2ID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLTE7CkBAIC0yNzgsMTEgKzI3OCwxMSBAQAogCXJldHVybiBhc3luYy0+cHJlYWxsb2NfYnVmc3o7CiB9CiAKLWludCBjb21lZGlfZ2V0X2J1ZmZlcl9vZmZzZXQoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQoraW50IGNvbWVkaV9nZXRfYnVmZmVyX29mZnNldCh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAogCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rY29tZWRpbGliX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rY29tZWRpbGliX21haW4uYwppbmRleCA1MTBmYmRjLi5hNGZhOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIva2NvbWVkaWxpYl9tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tjb21lZGlsaWJfbWFpbi5jCkBAIC00MiwxMCArNDIsMTAgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGtlcm5lbCBsaWJyYXJ5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLWNvbWVkaV90ICpjb21lZGlfb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSkKK3ZvaWQgKmNvbWVkaV9vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbzsKLQljb21lZGlfZGV2aWNlICpkZXY7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBpbnQgbWlub3I7CiAKIAlpZiAoc3RybmNtcChmaWxlbmFtZSwgIi9kZXYvY29tZWRpIiwgMTEpICE9IDApCkBAIC01Nyw0MSArNTcsNDEgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlkZXZfZmlsZV9pbmZvID0gY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQlpZihkZXZfZmlsZV9pbmZvID09IE5VTEwpCisJaWYgKGRldl9maWxlX2luZm8gPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOwogCi0JaWYoZGV2ID09IE5VTEwgfHwgIWRldi0+YXR0YWNoZWQpCisJaWYgKGRldiA9PSBOVUxMIHx8ICFkZXYtPmF0dGFjaGVkKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoZGV2LT5kcml2ZXItPm1vZHVsZSkpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIChjb21lZGlfdCAqKSBkZXY7CisJcmV0dXJuICh2b2lkICopIGRldjsKIH0KIAotY29tZWRpX3QgKmNvbWVkaV9vcGVuX29sZCh1bnNpZ25lZCBpbnQgbWlub3IpCit2b2lkICpjb21lZGlfb3Blbl9vbGQodW5zaWduZWQgaW50IG1pbm9yKQogewogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbzsKLQljb21lZGlfZGV2aWNlICpkZXY7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKIAogCWlmIChtaW5vciA+PSBDT01FRElfTlVNX01JTk9SUykKIAkJcmV0dXJuIE5VTEw7CiAKIAlkZXZfZmlsZV9pbmZvID0gY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQlpZihkZXZfZmlsZV9pbmZvID09IE5VTEwpCisJaWYgKGRldl9maWxlX2luZm8gPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOwogCi0JaWYoZGV2ID09IE5VTEwgfHwgIWRldi0+YXR0YWNoZWQpCisJaWYgKGRldiA9PSBOVUxMIHx8ICFkZXYtPmF0dGFjaGVkKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiAoY29tZWRpX3QgKikgZGV2OworCXJldHVybiAodm9pZCAqKSBkZXY7CiB9CiAKLWludCBjb21lZGlfY2xvc2UoY29tZWRpX3QgKiBkKQoraW50IGNvbWVkaV9jbG9zZSh2b2lkICpkKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOwogCiAJbW9kdWxlX3B1dChkZXYtPmRyaXZlci0+bW9kdWxlKTsKIApAQCAtMTEzLDE5ICsxMTMsMTkgQEAKIAlyZXR1cm4gInVua25vd24gZXJyb3IiOwogfQogCi1pbnQgY29tZWRpX2ZpbGVubyhjb21lZGlfdCAqIGQpCitpbnQgY29tZWRpX2ZpbGVubyh2b2lkICpkKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOwogCiAJLyogcmV0dXJuIHNvbWV0aGluZyByYW5kb20gKi8KIAlyZXR1cm4gZGV2LT5taW5vcjsKIH0KIAotaW50IGNvbWVkaV9jb21tYW5kKGNvbWVkaV90ICogZCwgY29tZWRpX2NtZCAqIGNtZCkKK2ludCBjb21lZGlfY29tbWFuZCh2b2lkICpkLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAl1bnNpZ25lZCBydW5mbGFnczsKIAogCWlmIChjbWQtPnN1YmRldiA+PSBkZXYtPm5fc3ViZGV2aWNlcykKQEAgLTE2MSwxMCArMTYxLDEwIEBACiAJcmV0dXJuIHMtPmRvX2NtZChkZXYsIHMpOwogfQogCi1pbnQgY29tZWRpX2NvbW1hbmRfdGVzdChjb21lZGlfdCAqIGQsIGNvbWVkaV9jbWQgKiBjbWQpCitpbnQgY29tZWRpX2NvbW1hbmRfdGVzdCh2b2lkICpkLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoY21kLT5zdWJkZXYgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTgzLDEwICsxODMsMTAgQEAKICAqCUNPTUVESV9JTlNOCiAgKglwZXJmb3JtIGFuIGluc3RydWN0aW9uCiAgKi8KLWludCBjb21lZGlfZG9faW5zbihjb21lZGlfdCAqIGQsIGNvbWVkaV9pbnNuICogaW5zbikKK2ludCBjb21lZGlfZG9faW5zbih2b2lkICpkLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24pCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChpbnNuLT5pbnNuICYgSU5TTl9NQVNLX1NQRUNJQUwpIHsKQEAgLTI1Niw3ICsyNTYsOCBAQAogCiAJCS8qIFhYWCBjaGVjayBsb2NrICovCiAKLQkJaWYgKChyZXQgPSBjaGVja19jaGFubGlzdChzLCAxLCAmaW5zbi0+Y2hhbnNwZWMpKSA8IDApIHsKKwkJcmV0ID0gY2hlY2tfY2hhbmxpc3QocywgMSwgJmluc24tPmNoYW5zcGVjKTsKKwkJaWYgKHJldCA8IDApIHsKIAkJCXJ0X3ByaW50aygiYmFkIGNoYW5zcGVjXG4iKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycm9yOwpAQCAtMzIzLDE2ICszMjQsMTYgQEAKIAktIGxvY2sgd2hpbGUgc3ViZGV2aWNlIGJlaW5nIHByb2dyYW1tZWQKIAogKi8KLWludCBjb21lZGlfbG9jayhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2xvY2sodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmcy0+c3Bpbl9sb2NrLCBmbGFncyk7CkBAIC0zNjYsMTcgKzM2NywxNyBAQAogCQlub25lCiAKICovCi1pbnQgY29tZWRpX3VubG9jayhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX3VubG9jayh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCWludCByZXQ7CiAKLQlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCWFzeW5jID0gcy0+YXN5bmM7CkBAIC00MTgsMTUgKzQxOSwxNSBAQAogCQlub3RoaW5nCiAKICovCi1pbnQgY29tZWRpX2NhbmNlbChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2NhbmNlbCh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCWlmIChzLT5sb2NrICYmIHMtPmxvY2sgIT0gZCkKQEAgLTQ0MywxMyArNDQ0LDE1IEBACiAJaWYgKCFzLT5jYW5jZWwgfHwgIXMtPmFzeW5jKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICgocmV0ID0gcy0+Y2FuY2VsKGRldiwgcykpKQorCXJldCA9IHMtPmNhbmNlbChkZXYsIHMpOworCisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogI2lmZGVmIENPTkZJR19DT01FRElfUlQKLQlpZiAoY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3MocykgJiBTUkZfUlQpIHsKKwlpZiAoY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3MocykgJiBTUkZfUlQpCiAJCWNvbWVkaV9zd2l0Y2hfdG9fbm9uX3J0KGRldik7Ci0JfQorCiAjZW5kaWYKIAljb21lZGlfc2V0X3N1YmRldmljZV9ydW5mbGFncyhzLCBTUkZfUlVOTklORyB8IFNSRl9SVCwgMCk7CiAJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwpAQCAtNDYxLDE2ICs0NjQsMTYgQEAKIC8qCiAgICByZWdpc3RyYXRpb24gb2YgY2FsbGJhY2sgZnVuY3Rpb25zCiAgKi8KLWludCBjb21lZGlfcmVnaXN0ZXJfY2FsbGJhY2soY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAoraW50IGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAogCXVuc2lnbmVkIGludCBtYXNrLCBpbnQgKCpjYikgKHVuc2lnbmVkIGludCwgdm9pZCAqKSwgdm9pZCAqYXJnKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJYXN5bmMgPSBzLT5hc3luYzsKQEAgLTQ5OCwxNSArNTAxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb21lZGlfcG9sbChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX3BvbGwodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAKLQlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCWFzeW5jID0gcy0+YXN5bmM7CkBAIC01MjUsMjIgKzUyOCwyMSBAQAogfQogCiAvKiBXQVJOSU5HOiBub3QgcG9ydGFibGUgKi8KLWludCBjb21lZGlfbWFwKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdm9pZCAqcHRyKQoraW50IGNvbWVkaV9tYXAodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdm9pZCAqcHRyKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKLQlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCWlmICghcy0+YXN5bmMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHB0cikgeworCWlmIChwdHIpCiAJCSooKHZvaWQgKiopcHRyKSA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWY7Ci0JfQogCiAJLyogWFhYIG5vIHJlZmVyZW5jZSBjb3VudGluZyAqLwogCkBAIC01NDgsMTQgKzU1MCwxNCBAQAogfQogCiAvKiBXQVJOSU5HOiBub3QgcG9ydGFibGUgKi8KLWludCBjb21lZGlfdW5tYXAoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQoraW50IGNvbWVkaV91bm1hcCh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKLQlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCWlmICghcy0+YXN5bmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIva3N5bXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rc3ltcy5jCmluZGV4IDc2YjQ1MDYuLjNkYjg2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rc3ltcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rc3ltcy5jCkBAIC00MCw4ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gMHgwMjAyMDAKLQogLyogZnVuY3Rpb25zIHNwZWNpZmljIHRvIGtjb21lZGlsaWIgKi8KIAogRVhQT1JUX1NZTUJPTChjb21lZGlfcmVnaXN0ZXJfY2FsbGJhY2spOwpAQCAtMTQwLDUgKzEzOCwzIEBACiAKIC8qIGFscGhhICovCiAvL0VYUE9SVF9TWU1CT0woY29tZWRpX3NldF9nbG9iYWxfb29yX2JlaGF2aW9yKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3BjaV9pZHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcGNpX2lkcy5oCmluZGV4IGM2MWJhOTAuLmQ5NzlhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcGNpX2lkcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcGNpX2lkcy5oCkBAIC0yOCw0ICsyOCw0IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBTkNPTV9HUElCCTB4MzMwMgogI2VuZGlmCiAKLSNlbmRpZiAvLyBfX0NPTVBBVF9MSU5VWF9QQ0lfSURTX0gKKyNlbmRpZiAvKiBfX0NPTVBBVF9MSU5VWF9QQ0lfSURTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wcm9jLmMKaW5kZXggNWEyYjcyZC4uMzZhZTJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wcm9jLmMKQEAgLTMxLDEyICszMSwxMiBAQAogI2RlZmluZSBfX05PX1ZFUlNJT05fXwogI2luY2x1ZGUgImNvbWVkaWRldi5oIgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLS8vI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorLyogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPiAqLwogCiBpbnQgY29tZWRpX3JlYWRfcHJvY21lbShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuLAogCWludCAqZW9mLCB2b2lkICpkYXRhKTsKIAotZXh0ZXJuIGNvbWVkaV9kcml2ZXIgKmNvbWVkaV9kcml2ZXJzOworZXh0ZXJuIHN0cnVjdCBjb21lZGlfZHJpdmVyICpjb21lZGlfZHJpdmVyczsKIAogaW50IGNvbWVkaV9yZWFkX3Byb2NtZW0oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbiwKIAlpbnQgKmVvZiwgdm9pZCAqZGF0YSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlpbnQgaTsKIAlpbnQgZGV2aWNlc19xID0gMDsKIAlpbnQgbCA9IDA7Ci0JY29tZWRpX2RyaXZlciAqZHJpdjsKKwlzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdjsKIAogCWwgKz0gc3ByaW50ZihidWYgKyBsLAogCQkiY29tZWRpIHZlcnNpb24gIiBDT01FRElfUkVMRUFTRSAiXG4iCkBAIC01Myw5ICs1MywxMCBAQAogCiAJZm9yIChpID0gMDsgaSA8IENPTUVESV9OVU1fQk9BUkRfTUlOT1JTOyBpKyspIHsKIAkJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0gY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKGkpOwotCQljb21lZGlfZGV2aWNlICpkZXY7CisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CiAKLQkJaWYoZGV2X2ZpbGVfaW5mbyA9PSBOVUxMKSBjb250aW51ZTsKKwkJaWYgKGRldl9maWxlX2luZm8gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwogCQlkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CiAKIAkJaWYgKGRldi0+YXR0YWNoZWQpIHsKQEAgLTY2LDkgKzY3LDggQEAKIAkJCQlkZXYtPmJvYXJkX25hbWUsIGRldi0+bl9zdWJkZXZpY2VzKTsKIAkJfQogCX0KLQlpZiAoIWRldmljZXNfcSkgeworCWlmICghZGV2aWNlc19xKQogCQlsICs9IHNwcmludGYoYnVmICsgbCwgIm5vIGRldmljZXNcbiIpOwotCX0KIAogCWZvciAoZHJpdiA9IGNvbWVkaV9kcml2ZXJzOyBkcml2OyBkcml2ID0gZHJpdi0+bmV4dCkgewogCQlsICs9IHNwcmludGYoYnVmICsgbCwgIiVzOlxuIiwgZHJpdi0+ZHJpdmVyX25hbWUpOwpAQCAtNzcsOSArNzcsOCBAQAogCQkJCSooY2hhciAqKikoKGNoYXIgKilkcml2LT5ib2FyZF9uYW1lICsKIAkJCQkJaSAqIGRyaXYtPm9mZnNldCkpOwogCQl9Ci0JCWlmICghZHJpdi0+bnVtX25hbWVzKSB7CisJCWlmICghZHJpdi0+bnVtX25hbWVzKQogCQkJbCArPSBzcHJpbnRmKGJ1ZiArIGwsICIgJXNcbiIsIGRyaXYtPmRyaXZlcl9uYW1lKTsKLQkJfQogCX0KIAogCXJldHVybiBsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9yYW5nZS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9yYW5nZS5jCmluZGV4IDYxZGMzY2QuLmFjMjAwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcmFuZ2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3JhbmdlLmMKQEAgLTI0LDEyICsyNCwxMiBAQAogI2luY2x1ZGUgImNvbWVkaWRldi5oIgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLWNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjEwID0geyAxLCB7QklQX1JBTkdFKDEwKX0gfTsKLWNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjUgPSB7IDEsIHtCSVBfUkFOR0UoNSl9IH07Ci1jb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIyXzUgPSB7IDEsIHtCSVBfUkFOR0UoMi41KX0gfTsKLWNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5pcG9sYXIxMCA9IHsgMSwge1VOSV9SQU5HRSgxMCl9IH07Ci1jb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VuaXBvbGFyNSA9IHsgMSwge1VOSV9SQU5HRSg1KX0gfTsKLWNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5rbm93biA9IHsgMSwge3swLCAxMDAwMDAwLCBVTklUX25vbmV9fSB9OworY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjEwID0geyAxLCB7QklQX1JBTkdFKDEwKX0gfTsKK2NvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXI1ID0geyAxLCB7QklQX1JBTkdFKDUpfSB9OworY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjJfNSA9IHsgMSwge0JJUF9SQU5HRSgyLjUpfSB9OworY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5pcG9sYXIxMCA9IHsgMSwge1VOSV9SQU5HRSgxMCl9IH07Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjUgPSB7IDEsIHtVTklfUkFOR0UoNSl9IH07Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmtub3duID0geyAxLCB7ezAsIDEwMDAwMDAsIFVOSVRfbm9uZX19IH07CiAKIC8qCiAgICAJQ09NRURJX1JBTkdFSU5GTwpAQCAtNDIsMTYgKzQyLDE2IEBACiAJCXJhbmdlIGluZm8gc3RydWN0dXJlCiAKIAl3cml0ZXM6Ci0JCW4gY29tZWRpX2tyYW5nZSBzdHJ1Y3R1cmVzIHRvIHJhbmdlaW5mby0+cmFuZ2VfcHRyCisJCW4gc3RydWN0IGNvbWVkaV9rcmFuZ2Ugc3RydWN0dXJlcyB0byByYW5nZWluZm8tPnJhbmdlX3B0cgogKi8KLWludCBkb19yYW5nZWluZm9faW9jdGwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3JhbmdlaW5mbyAqIGFyZykKK2ludCBkb19yYW5nZWluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9yYW5nZWluZm8gKmFyZykKIHsKLQljb21lZGlfcmFuZ2VpbmZvIGl0OworCXN0cnVjdCBjb21lZGlfcmFuZ2VpbmZvIGl0OwogCWludCBzdWJkLCBjaGFuOwotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKmxyOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmxyOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2YoY29tZWRpX3JhbmdlaW5mbykpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmaXQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfcmFuZ2VpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXN1YmQgPSAoaXQucmFuZ2VfdHlwZSA+PiAyNCkgJiAweGY7CiAJY2hhbiA9IChpdC5yYW5nZV90eXBlID4+IDE2KSAmIDB4ZmY7CkBAIC03OCwxNyArNzgsMTcgQEAKIAl9CiAKIAlpZiAoY29weV90b191c2VyKGl0LnJhbmdlX3B0ciwgbHItPnJhbmdlLAotCQkJc2l6ZW9mKGNvbWVkaV9rcmFuZ2UpICogbHItPmxlbmd0aCkpCisJCQlzaXplb2Yoc3RydWN0IGNvbWVkaV9rcmFuZ2UpICogbHItPmxlbmd0aCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXJlZl9pbnZhbGlkKGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBpbnQgY2hhbnNwZWMpCitzdGF0aWMgaW50IGFyZWZfaW52YWxpZChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50IGNoYW5zcGVjKQogewogCXVuc2lnbmVkIGludCBhcmVmOwogCi0JLy8gZGlzYWJsZSByZXBvcnRpbmcgaW52YWxpZCBhcmVmcy4uLiBtYXliZSBzb21lZGF5CisJLyogIGRpc2FibGUgcmVwb3J0aW5nIGludmFsaWQgYXJlZnMuLi4gbWF5YmUgc29tZWRheSAqLwogCXJldHVybiAwOwogCiAJYXJlZiA9IENSX0FSRUYoY2hhbnNwZWMpOwpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBlYWNoIGVsZW1lbnQgaW4gYSBjaGFubmVsL2dhaW4gbGlzdCB0byBtYWtlCiAgICBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCiAqLwotaW50IGNoZWNrX2NoYW5saXN0KGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCkKK2ludCBjaGVja19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgaW50IG4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QpCiB7CiAJaW50IGk7CiAJaW50IGNoYW47CkBAIC0xMzUsOSArMTM1LDggQEAKIAkJCQkJaSwgY2hhbmxpc3RbaV0sIHMtPm5fY2hhbiwKIAkJCQkJcy0+cmFuZ2VfdGFibGUtPmxlbmd0aCk7CiAjaWYgMAotCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCQkJCQlwcmludGsoIlslZF09MHglMDh4XG4iLCBpLCBjaGFubGlzdFtpXSk7Ci0JCQkJfQogI2VuZGlmCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0LmMKaW5kZXggMzg1YjgxYi4uZTlmNTc3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9ydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnQuYwpAQCAtNTcsNyArNTcsNyBAQAogCSBpcnFyZXR1cm5fdCgqaGFuZGxlcikgKGludCBpcnEsIHZvaWQgKmRldl9pZCBQVF9SRUdTX0FSRyk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljb25zdCBjaGFyICpkZXZpY2U7Ci0JY29tZWRpX2RldmljZSAqZGV2X2lkOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXZfaWQ7CiB9OwogCiBzdGF0aWMgaW50IGNvbWVkaV9ydF9nZXRfaXJxKHN0cnVjdCBjb21lZGlfaXJxX3N0cnVjdCAqaXQpOwpAQCAtNjcsNyArNjcsNyBAQAogCiBpbnQgY29tZWRpX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGlycSwgaXJxcmV0dXJuX3QoKmhhbmRsZXIpIChpbnQsCiAJCXZvaWQgKlBUX1JFR1NfQVJHKSwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2aWNlLAotCWNvbWVkaV9kZXZpY2UgKiBkZXZfaWQpCisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgY29tZWRpX2lycV9zdHJ1Y3QgKml0OwogCWludCByZXQ7CkBAIC03OCwxNSArNzgsMTUgQEAKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgaGFuZGxlciwgdW5zaGFyZWRfZmxhZ3MsIGRldmljZSwgZGV2X2lkKTsKIAlpZiAocmV0IDwgMCkgewotCQkvLyB3ZSBmYWlsZWQsIHNvIGZhbGwgYmFjayBvbiBhbGxvd2luZyBzaGFyZWQgaW50ZXJydXB0ICh3aGljaCB3ZSB3b24ndCBldmVyIG1ha2UgUlQpCisJCS8qICB3ZSBmYWlsZWQsIHNvIGZhbGwgYmFjayBvbiBhbGxvd2luZyBzaGFyZWQgaW50ZXJydXB0ICh3aGljaCB3ZSB3b24ndCBldmVyIG1ha2UgUlQpICovCiAJCWlmIChmbGFncyAmIElSUUZfU0hBUkVEKSB7CiAJCQlydF9wcmludGsKIAkJCQkoImNvbWVkaTogY2Fubm90IGdldCB1bnNoYXJlZCBpbnRlcnJ1cHQsIHdpbGwgbm90IHVzZSBSVCBpbnRlcnJ1cHRzLlxuIik7CiAJCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGhhbmRsZXIsIGZsYWdzLCBkZXZpY2UsIGRldl9pZCk7CiAJCX0KLQkJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CisKIAl9IGVsc2UgewogCQlpdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21lZGlfaXJxX3N0cnVjdCksIEdGUF9LRVJORUwpOwogCQlpZiAoIWl0KQpAQCAtMTAyLDcgKzEwMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY29tZWRpX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNvbWVkaV9kZXZpY2UgKiBkZXZfaWQpCit2b2lkIGNvbWVkaV9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2X2lkKQogewogCXN0cnVjdCBjb21lZGlfaXJxX3N0cnVjdCAqaXQ7CiAKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWNvbWVkaV9pcnFzW2lycV0gPSBOVUxMOwogfQogCi1pbnQgY29tZWRpX3N3aXRjaF90b19ydChjb21lZGlfZGV2aWNlICogZGV2KQoraW50IGNvbWVkaV9zd2l0Y2hfdG9fcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY29tZWRpX2lycV9zdHJ1Y3QgKml0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjb21lZGlfc3dpdGNoX3RvX25vbl9ydChjb21lZGlfZGV2aWNlICogZGV2KQordm9pZCBjb21lZGlfc3dpdGNoX3RvX25vbl9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjb21lZGlfaXJxX3N0cnVjdCAqaXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE3MCw3ICsxNzAsNyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgod2FpdF9xdWV1ZV9oZWFkX3QgKikgYXJnMik7CiB9CiAKLXZvaWQgY29tZWRpX3J0X3BlbmRfd2FrZXVwKHdhaXRfcXVldWVfaGVhZF90ICogcSkKK3ZvaWQgY29tZWRpX3J0X3BlbmRfd2FrZXVwKHdhaXRfcXVldWVfaGVhZF90ICpxKQogewogCXJ0X3BlbmRfY2FsbCh3YWtlX3VwX2ludF9oYW5kbGVyLCAwLCBxKTsKIH0KQEAgLTE4MCw3ICsxODAsNyBAQAogCiAjaWZuZGVmIEhBVkVfUlRfUkVRVUVTVF9JUlFfV0lUSF9BUkcKICNkZWZpbmUgREVDTEFSRV9WT0lEX0lSUShpcnEpIFwKLXN0YXRpYyB2b2lkIGhhbmRsZV92b2lkX2lycV8gIyMgaXJxICh2b2lkKXsgaGFuZGxlX3ZvaWRfaXJxKGlycSk7fQorc3RhdGljIHZvaWQgaGFuZGxlX3ZvaWRfaXJxXyAjIyBpcnEgKHZvaWQpeyBoYW5kbGVfdm9pZF9pcnEoaXJxKTsgfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfdm9pZF9pcnEoaW50IGlycSkKIHsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQlyZXR1cm47CiAJfQogCWl0LT5oYW5kbGVyKGlycSwgaXQtPmRldl9pZCBQVF9SRUdTX05VTEwpOwotCXJ0X2VuYWJsZV9pcnEoaXJxKTsJLy9uZWVkZWQgYnkgcnRhaS1hZGVvcywgc2VlbXMgbGlrZSBpdCBzaG91bGRuJ3QgaHVydCBlYXJsaWVyIHZlcnNpb25zCisJcnRfZW5hYmxlX2lycShpcnEpOwkvKiBuZWVkZWQgYnkgcnRhaS1hZGVvcywgc2VlbXMgbGlrZSBpdCBzaG91bGRuJ3QgaHVydCBlYXJsaWVyIHZlcnNpb25zICovCiB9CiAKIERFQ0xBUkVfVk9JRF9JUlEoMCk7CkBAIC0yMjAsOCArMjIwLDcgQEAKIERFQ0xBUkVfVk9JRF9JUlEoMjIpOwogREVDTEFSRV9WT0lEX0lSUSgyMyk7CiAKLXR5cGVkZWYgdm9pZCAoKlZfRlBfVikgKHZvaWQpOwotc3RhdGljIFZfRlBfViBoYW5kbGVfdm9pZF9pcnFfcHRyc1tdID0geworc3RhdGljIHZvaWQgaGFuZGxlX3ZvaWRfaXJxX3B0cnNbXSA9IHsKIAloYW5kbGVfdm9pZF9pcnFfMCwKIAloYW5kbGVfdm9pZF9pcnFfMSwKIAloYW5kbGVfdm9pZF9pcnFfMiwKQEAgLTQwMiwxMSArNDAxLDExIEBACiAKIHZvaWQgY29tZWRpX3J0X2luaXQodm9pZCkKIHsKLQkvL3J0X3BlbmRfdHFfaW5pdCgpOworCS8qIHJ0X3BlbmRfdHFfaW5pdCgpOyAqLwogfQogCiB2b2lkIGNvbWVkaV9ydF9jbGVhbnVwKHZvaWQpCiB7Ci0JLy9ydF9wZW5kX3RxX2NsZWFudXAoKTsKKwkvKiBydF9wZW5kX3RxX2NsZWFudXAoKTsgKi8KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9ydF9wZW5kX3RxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0X3BlbmRfdHEuYwppbmRleCA5OTVmMDc2Li5mOWRmZDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0X3BlbmRfdHEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0X3BlbmRfdHEuYwpAQCAtMyw3ICszLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSAiY29tZWRpZGV2LmgiCS8vIGZvciBydCBzcGlubG9ja3MKKyNpbmNsdWRlICJjb21lZGlkZXYuaCIJLyogZm9yIHJ0IHNwaW5sb2NrcyAqLwogI2luY2x1ZGUgInJ0X3BlbmRfdHEuaCIKICNpZmRlZiBDT05GSUdfQ09NRURJX1JUQUkKICNpbmNsdWRlIDxydGFpLmg+CkBAIC0yNSw5ICsyNSw5IEBACiB2b2xhdGlsZSBzdGF0aWMgc3RydWN0IHJ0X3BlbmRfdHEgKnZvbGF0aWxlIHJ0X3BlbmRfaGVhZCA9IHJ0X3BlbmRfdHEsCiAJKnZvbGF0aWxlIHJ0X3BlbmRfdGFpbCA9IHJ0X3BlbmRfdHE7CiBpbnQgcnRfcGVuZF90cV9pcnEgPSAwOwotc3BpbmxvY2tfdCBydF9wZW5kX3RxX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitERUZJTkVfU1BJTkxPQ0socnRfcGVuZF90cV9sb2NrKTsKIAotLy8gV0FSTklORzogZm9sbG93aW5nIGNvZGUgbm90IGNoZWNrZWQgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMgeWV0LgorLyogV0FSTklORzogZm9sbG93aW5nIGNvZGUgbm90IGNoZWNrZWQgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMgeWV0LiAqLwogI2RlZmluZSBJTkNfQ0lSQ1VMQVJfUFRSKHB0cixiZWdpbixzaXplKSBkbyB7aWYoKysocHRyKT49KGJlZ2luKSsoc2l6ZSkpIChwdHIpPShiZWdpbik7IH0gd2hpbGUoMCkKICNkZWZpbmUgREVDX0NJUkNVTEFSX1BUUihwdHIsYmVnaW4sc2l6ZSkgZG8ge2lmKC0tKHB0cik8KGJlZ2luKSkgKHB0cik9KGJlZ2luKSsoc2l6ZSktMTsgfSB3aGlsZSgwKQogCkBAIC00Miw3ICs0Miw3IEBACiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZydF9wZW5kX3RxX2xvY2ssIGZsYWdzKTsKIAlJTkNfQ0lSQ1VMQVJfUFRSKHJ0X3BlbmRfaGVhZCwgcnRfcGVuZF90cSwgUlRfUEVORF9UUV9TSVpFKTsKIAlpZiAocnRfcGVuZF9oZWFkID09IHJ0X3BlbmRfdGFpbCkgewotCQkvLyBvdmVyZmxvdywgd2UganVzdCByZWZ1c2UgdG8gdGFrZSB0aGlzIHJlcXVlc3QKKwkJLyogb3ZlcmZsb3csIHdlIGp1c3QgcmVmdXNlIHRvIHRha2UgdGhpcyByZXF1ZXN0ICovCiAJCURFQ19DSVJDVUxBUl9QVFIocnRfcGVuZF9oZWFkLCBydF9wZW5kX3RxLCBSVF9QRU5EX1RRX1NJWkUpOwogCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRfcGVuZF90cV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OGQzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWcKQEAgLTAsMCArMSw2NyBAQAorY29uZmlnIERTVAorCXRyaXN0YXRlICJEaXN0cmlidXRlZCBzdG9yYWdlIgorCWRlcGVuZHMgb24gTkVUICYmIENSWVBUTyAmJiBTWVNGUyAmJiBCTEtfREVWCisJc2VsZWN0IENPTk5FQ1RPUgorCS0tLWhlbHAtLS0KKwlEU1QgaXMgYSBuZXR3b3JrIGJsb2NrIGRldmljZSBzdG9yYWdlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZQorCWV4cG9ydGVkIHN0b3JhZ2Ugb24gdGhlIHJlbW90ZSBub2RlcyBpbnRvIHRoZSBsb2NhbCBibG9jayBkZXZpY2UuCisKKwlEU1Qgd29ya3Mgb24gdG9wIG9mIGFueSBuZXR3b3JrIG1lZGlhIGFuZCBwcm90b2NvbDsgaXQgaXMganVzdCBhIG1hdHRlcgorCW9mIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSB0byB1bmRlcnN0YW5kIHRoZSBjb3JyZWN0IGFkZHJlc3Nlcy4gVGhlIG1vc3QKKwljb21tb24gZXhhbXBsZSBpcyBUQ1Agb3ZlciBJUCwgd2hpY2ggYWxsb3dzIHRvIHBhc3MgdGhyb3VnaCBmaXJld2FsbHMgYW5kCisJY3JlYXRlIHJlbW90ZSBiYWNrdXAgc3RvcmFnZSBpbiBhIGRpZmZlcmVudCBkYXRhY2VudGVyLiBEU1QgcmVxdWlyZXMKKwlzaW5nbGUgcG9ydCB0byBiZSBlbmFibGVkIG9uIHRoZSBleHBvcnRpbmcgbm9kZSBhbmQgb3V0Z29pbmcgY29ubmVjdGlvbnMKKwlvbiB0aGUgbG9jYWwgbm9kZS4KKworCURTVCB3b3JrcyB3aXRoIGluLWtlcm5lbCBjbGllbnQgYW5kIHNlcnZlciwgd2hpY2ggaW1wcm92ZXMgcGVyZm9ybWFuY2UgYnkKKwllbGltaW5hdGluZyB1bm5lZGVkIGRhdGEgY29waWVzIGFuZCBieSBub3QgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uCisJb2YgdGhlIGV4dGVybmFsIElPIGNvbXBvbmVudHMuIEl0IHJlcXVpcmVzIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIHV0aWxpdHkKKwl0aG91Z2guCisKKwlEU1QgdXNlcyB0cmFuc2FjdGlvbiBtb2RlbCwgd2hlbiBlYWNoIHN0b3JlIGhhcyB0byBiZSBleHBsaWNpdGx5IGFja2VkCisJZnJvbSB0aGUgcmVtb3RlIG5vZGUgdG8gYmUgY29uc2lkZXJlZCBhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gVGhlcmUKKwltYXkgYmUgbG90cyBvZiBpbi1mbGlnaHQgdHJhbnNhY3Rpb25zLiBXaGVuIHJlbW90ZSBob3N0IGRvZXMgbm90IGFjaworCXRoZSB0cmFuc2FjdGlvbiBpdCB3aWxsIGJlIHJlc2VudCBwcmVkZWZpbmVkIG51bWJlciBvZiB0aW1lcyB3aXRoIHNwZWNpZmllZAorCXRpbWVvdXRzIGJldHdlZW4gdGhlbS4gQWxsIHRob3NlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyYWJsZS4gVHJhbnNhY3Rpb25zCisJYXJlIG1hcmtlZCBhcyBmYWlsZWQgYWZ0ZXIgYWxsIHJlc2VuZHMgY29tcGxldGUgdW5zdWNjZXNzZnVsbHk7IGhhdmluZworCWxvbmcgZW5vdWdoIHJlc2VuZCB0aW1lb3V0IGFuZC9vciBsYXJnZSBudW1iZXIgb2YgcmVzZW5kcyBhbGxvd3Mgbm90IHRvCisJcmV0dXJuIGVycm9yIHRvIHRoZSBoaWdoZXIgKEZTIHVzdWFsbHkpIGxheWVyIGluIGNhc2Ugb2Ygc2hvcnQgbmV0d29yaworCXByb2JsZW1zIG9yIHJlbW90ZSBub2RlIG91dGFnZXMuIEluIGNhc2Ugb2YgbmV0d29yayBSQUlEIHNldHVwIHRoaXMgbWVhbnMKKwl0aGF0IHN0b3JhZ2Ugd2lsbCBub3QgZGVncmFkZSB1bnRpbCB0cmFuc2FjdGlvbnMgYXJlIG1hcmtlZCBhcyBmYWlsZWQsIGFuZAorCXRodXMgd2lsbCBub3QgZm9yY2UgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiBhbmQgZGF0YSByZWJ1aWxkLiBJbiBjYXNlIG9mCisJY29ubmVjdGlvbiBmYWlsdXJlIERTVCB3aWxsIHRyeSB0byByZWNvbm5lY3QgdG8gdGhlIHJlbW90ZSBub2RlIGF1dG9tYXRpY2FsbHkuCisJRFNUIHNlbmRzIHBpbmcgY29tbWFuZHMgYXQgaWRsZSB0aW1lIHRvIGRldGVjdCBpZiByZW1vdGUgbm9kZSBpcyBhbGl2ZS4KKworCUJlY2F1c2Ugb2YgdHJhbnNhY3Rpb25hbCBtb2RlbCBpdCBpcyBwb3NzaWJsZSB0byB1c2UgemVyby1jb3B5IHNlbmRpbmcKKwl3aXRob3V0IHdvcnJ5IG9mIGRhdGEgY29ycnVwdGlvbiAod2hpY2ggaW4gdHVybiBjb3VsZCBiZSBkZXRlY3RlZCBieSB0aGUKKwlzdHJvbmcgY2hlY2tzdW1zIHRob3VnaCkuCisKKwlEU1QgbWF5IGZ1bGx5IGVuY3J5cHQgdGhlIGRhdGEgY2hhbm5lbCBpbiBjYXNlIG9mIHVudHJ1c3RlZCBjaGFubmVsIGFuZCBpbXBsZW1lbnQKKwlzdHJvbmcgY2hlY2tzdW0gb2YgdGhlIHRyYW5zZmVycmVkIGRhdGEuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBhbGdvcml0aG1zCisJYW5kIGNyeXB0byBrZXlzOyB0aGV5IHNob3VsZCBtYXRjaCBvbiBib3RoIHNpZGVzIG9mIHRoZSBuZXR3b3JrIGNoYW5uZWwuCisJQ3J5cHRvIHByb2Nlc3NpbmcgZG9lcyBub3QgaW50cm9kdWNlIG5vdGljZWJsZSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgc2luY2UgRFNUCisJdXNlcyBjb25maWd1cmFibGUgcG9vbCBvZiB0aHJlYWRzIHRvIHBlcmZvcm0gY3J5cHRvIHByb2Nlc3NpbmcuCisKKwlEU1QgdXRpbGl6ZXMgbWVtb3J5IHBvb2wgbW9kZWwgb2YgYWxsIGl0cyB0cmFuc2FjdGlvbiBhbGxvY2F0aW9ucyAoaXQgaXMgdGhlCisJb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gb24gdGhlIGNsaWVudCkgYW5kIHNlcnZlciBhbGxvY2F0aW9ucyAoYmlvIHBvb2xzLAorCXdoaWxlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2xhYikuCisKKwlBdCBzdGFydHVwIERTVCBwZXJmb3JtcyBhIHNpbXBsZSBuZWdvdGlhdGlvbiB3aXRoIHRoZSBleHBvcnQgbm9kZSB0byBkZXRlcm1pbmUKKwlhY2Nlc3MgcGVybWlzc2lvbnMgYW5kIHNpemUgb2YgdGhlIGV4cG9ydGVkIHN0b3JhZ2UuIEl0IGNhbiBiZSBleHRlbmRlZCBpZgorCW5ldyBwYXJhbWV0ZXJzIHNob3VsZCBiZSBhdXRvbmVnb3RpYXRlZC4KKworCURTVCBjYXJyaWVzIGJsb2NrIElPIGZsYWdzIGluIHRoZSBwcm90b2NvbCwgd2hpY2ggYWxsb3dzIHRvIHRyYW5zcGFyZW50bHkgaW1wbGVtZW50CisJYmFycmllcnMgYW5kIHN5bmMvZmx1c2ggb3BlcmF0aW9ucy4gVGhvc2UgZmxhZ3MgYXJlIHVzZWQgaW4gdGhlIGV4cG9ydCBub2RlIHdoZXJlCisJSU8gYWdhaW5zdCB0aGUgbG9jYWwgc3RvcmFnZSBpcyBwZXJmb3JtZWQsIHdoaWNoIG1lYW5zIHRoYXQgc3luYyB3cml0ZSB3aWxsIGJlIHN5bmMKKwlvbiB0aGUgcmVtb3RlIG5vZGUgdG9vLCB3aGljaCBpbiB0dXJuIGltcHJvdmVzIGRhdGEgaW50ZWdyaXR5IGFuZCBpbXByb3ZlZCByZXNpc3RhbmNlCisJdG8gZXJyb3JzIGFuZCBkYXRhIGNvcnJ1cHRpb24gZHVyaW5nIHBvd2VyIG91dGFnZXMgb3Igc3RvcmFnZSBkYW1hZ2VzLgorCisJSG9tZXBhZ2U6IGh0dHA6Ly93d3cuaW9yZW1hcC5uZXQvcHJvamVjdHMvZHN0CisJVXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgdGhlIGxhdGVzdCByZWxlYXNlczogaHR0cDovL3d3dy5pb3JlbWFwLm5ldC9hcmNoaXZlL2RzdC8KKworY29uZmlnIERTVF9ERUJVRworCWJvb2wgIkRTVCBkZWJ1ZyIKKwlkZXBlbmRzIG9uIERTVAorCS0tLWhlbHAtLS0KKwlUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBIRUFWWSBkZWJ1Z2dpbmcgb2YgdGhlIERTVC4KKwlUdXJuIGl0IG9uIE9OTFkgaWYgeW91IGhhdmUgdG8gZGVidWcgc29tZSByZWFsbHkgb2JzY3VyZSBwcm9ibGVtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4YjBjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmotJChDT05GSUdfRFNUKSArPSBuc3QubworCituc3QteSA6PSBkY29yZS5vIHN0YXRlLm8gZXhwb3J0Lm8gdGhyZWFkX3Bvb2wubyBjcnlwdG8ubyB0cmFucy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9jcnlwdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjUwZjkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9jcnlwdG8uYwpAQCAtMCwwICsxLDczMSBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisvKgorICogVHJpY2t5IGJhc3RhcmQsIGJ1dCBJViBjYW4gYmUgbW9yZSBjb21wbGV4IHdpdGggdGltZS4uLgorICovCitzdGF0aWMgaW5saW5lIHU2NCBkc3RfZ2VuX2l2KHN0cnVjdCBkc3RfdHJhbnMgKnQpCit7CisJcmV0dXJuIHQtPmdlbjsKK30KKworLyoKKyAqIENyeXB0byBtYWNoaW5lcnk6IGhhc2gvY2lwaGVyIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBjcnlwdG8gY29udHJvbHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2hhc2ggKmRzdF9pbml0X2hhc2goc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwsIHU4ICprZXkpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2g7CisKKwloYXNoID0gY3J5cHRvX2FsbG9jX2hhc2goY3RsLT5oYXNoX2FsZ28sIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoaGFzaCkpIHsKKwkJZXJyID0gUFRSX0VSUihoYXNoKTsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBoYXNoICclcycsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBjdGwtPmhhc2hfYWxnbywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJY3RsLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoaGFzaCk7CisKKwlpZiAoIWN0bC0+aGFzaF9rZXlzaXplKQorCQlyZXR1cm4gaGFzaDsKKworCWVyciA9IGNyeXB0b19oYXNoX3NldGtleShoYXNoLCBrZXksIGN0bC0+aGFzaF9rZXlzaXplKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgaGFzaCAnJXMnLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgY3RsLT5oYXNoX2FsZ28sIGVycik7CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCXJldHVybiBoYXNoOworCitlcnJfb3V0X2ZyZWU6CisJY3J5cHRvX2ZyZWVfaGFzaChoYXNoKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpkc3RfaW5pdF9jaXBoZXIoc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwsIHU4ICprZXkpCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXI7CisKKwlpZiAoIWN0bC0+Y2lwaGVyX2tleXNpemUpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJY2lwaGVyID0gY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIoY3RsLT5jaXBoZXJfYWxnbywgMCwgMCk7CisJaWYgKElTX0VSUihjaXBoZXIpKSB7CisJCWVyciA9IFBUUl9FUlIoY2lwaGVyKTsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGN0bC0+Y2lwaGVyX2FsZ28sIGVycik7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWNyeXB0b19hYmxrY2lwaGVyX2NsZWFyX2ZsYWdzKGNpcGhlciwgfjApOworCisJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KGNpcGhlciwga2V5LCBjdGwtPmNpcGhlcl9rZXlzaXplKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgY2lwaGVyICclcycsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBjdGwtPmNpcGhlcl9hbGdvLCBlcnIpOworCQlnb3RvIGVycl9vdXRfZnJlZTsKKwl9CisKKwlyZXR1cm4gY2lwaGVyOworCitlcnJfb3V0X2ZyZWU6CisJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihjaXBoZXIpOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qCisgKiBDcnlwdG8gZW5naW5lIGhhcyBhIHBvb2wgb2YgcGFnZXMgdG8gZW5jcnlwdCBkYXRhIGludG8gYmVmb3JlIHNlbmRpbmcKKyAqIGl0IG92ZXIgdGhlIG5ldHdvcmsuIFRoaXMgcG9vbCBpcyBmcmVlZC9hbGxvY2F0ZWQgaGVyZS4KKyAqLworc3RhdGljIHZvaWQgZHN0X2NyeXB0b19wYWdlc19mcmVlKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaT0wOyBpPGUtPnBhZ2VfbnVtOyArK2kpCisJCV9fZnJlZV9wYWdlKGUtPnBhZ2VzW2ldKTsKKwlrZnJlZShlLT5wYWdlcyk7Cit9CisKK3N0YXRpYyBpbnQgZHN0X2NyeXB0b19wYWdlc19hbGxvYyhzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIGludCBudW0pCit7CisJaW50IGk7CisKKwllLT5wYWdlcyA9IGttYWxsb2MobnVtICogc2l6ZW9mKHN0cnVjdCBwYWdlICoqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlLT5wYWdlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGk9MDsgaTxudW07ICsraSkgeworCQllLT5wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghZS0+cGFnZXNbaV0pCisJCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlczsKKwl9CisKKwllLT5wYWdlX251bSA9IG51bTsKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlX3BhZ2VzOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJX19mcmVlX3BhZ2UoZS0+cGFnZXNbaV0pOworCisJa2ZyZWUoZS0+cGFnZXMpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKgorICogSW5pdGlhbGl6ZSBjcnlwdG8gZW5naW5lIGZvciBnaXZlbiBub2RlLgorICogU2V0dXAgY2lwaGVyL2hhc2gsIGtleXMsIHBvb2wgb2YgdGhyZWFkcyBhbmQgcHJpdmF0ZSBkYXRhLgorICovCitzdGF0aWMgaW50IGRzdF9jcnlwdG9fZW5naW5lX2luaXQoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCA9ICZuLT5jcnlwdG87CisKKwllcnIgPSBkc3RfY3J5cHRvX3BhZ2VzX2FsbG9jKGUsIG4tPm1heF9wYWdlcyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllLT5zaXplID0gUEFHRV9TSVpFOworCWUtPmRhdGEgPSBrbWFsbG9jKGUtPnNpemUsIEdGUF9LRVJORUwpOworCWlmICghZS0+ZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlczsKKwl9CisKKwlpZiAoY3RsLT5oYXNoX2FsZ29bMF0pIHsKKwkJZS0+aGFzaCA9IGRzdF9pbml0X2hhc2goY3RsLCBuLT5oYXNoX2tleSk7CisJCWlmIChJU19FUlIoZS0+aGFzaCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZS0+aGFzaCk7CisJCQllLT5oYXNoID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCQl9CisJfQorCisJaWYgKGN0bC0+Y2lwaGVyX2FsZ29bMF0pIHsKKwkJZS0+Y2lwaGVyID0gZHN0X2luaXRfY2lwaGVyKGN0bCwgbi0+Y2lwaGVyX2tleSk7CisJCWlmIChJU19FUlIoZS0+Y2lwaGVyKSkgeworCQkJZXJyID0gUFRSX0VSUihlLT5jaXBoZXIpOworCQkJZS0+Y2lwaGVyID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dF9mcmVlX2hhc2g7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlX2hhc2g6CisJY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKK2Vycl9vdXRfZnJlZToKKwlrZnJlZShlLT5kYXRhKTsKK2Vycl9vdXRfZnJlZV9wYWdlczoKKwlkc3RfY3J5cHRvX3BhZ2VzX2ZyZWUoZSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZHN0X2NyeXB0b19lbmdpbmVfZXhpdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUpCit7CisJaWYgKGUtPmhhc2gpCisJCWNyeXB0b19mcmVlX2hhc2goZS0+aGFzaCk7CisJaWYgKGUtPmNpcGhlcikKKwkJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihlLT5jaXBoZXIpOworCWRzdF9jcnlwdG9fcGFnZXNfZnJlZShlKTsKKwlrZnJlZShlLT5kYXRhKTsKK30KKworLyoKKyAqIFdhaXRpbmcgZm9yIGNpcGhlciBwcm9jZXNzaW5nIHRvIGJlIGNvbXBsZXRlZC4KKyAqLworc3RydWN0IGRzdF9jcnlwdG9fY29tcGxldGlvbgoreworCXN0cnVjdCBjb21wbGV0aW9uCQljb21wbGV0ZTsKKwlpbnQJCQkJZXJyb3I7Cit9OworCitzdGF0aWMgdm9pZCBkc3RfY3J5cHRvX2NvbXBsZXRlKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2NvbXBsZXRpb24gKmMgPSByZXEtPmRhdGE7CisKKwlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuOworCisJZHByaW50aygiJXM6IHJlcTogJXAsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgcmVxLCBlcnIpOworCWMtPmVycm9yID0gZXJyOworCWNvbXBsZXRlKCZjLT5jb21wbGV0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjLAorCQl2b2lkICppdiwgaW50IGVuYywgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2NvbXBsZXRpb24gYzsKKwlpbnQgZXJyOworCisJaW5pdF9jb21wbGV0aW9uKCZjLmNvbXBsZXRlKTsKKwljLmVycm9yID0gLUVJTlBST0dSRVNTOworCisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIENSWVBUT19URk1fUkVRX01BWV9CQUNLTE9HLAorCQkJCQlkc3RfY3J5cHRvX2NvbXBsZXRlLCAmYyk7CisKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KHJlcSwgc2dfc3JjLCBzZ19kc3QsIHNnX3NyYy0+bGVuZ3RoLCBpdik7CisKKwlpZiAoZW5jKQorCQllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KHJlcSk7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KHJlcSk7CisKKwlzd2l0Y2ggKGVycikgeworCQljYXNlIC1FSU5QUk9HUkVTUzoKKwkJY2FzZSAtRUJVU1k6CisJCQllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmYy5jb21wbGV0ZSwKKwkJCQkJdGltZW91dCk7CisJCQlpZiAoIWVycikKKwkJCQllcnIgPSAtRVRJTUVET1VUOworCQkJZWxzZQorCQkJCWVyciA9IGMuZXJyb3I7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBEU1QgdXNlcyBnZW5lcmljIGl0ZXJhdGlvbiBhcHByb2FjaCBmb3IgZGF0YSBjcnlwdG8gcHJvY2Vzc2luZy4KKyAqIFNpbmdsZSBibG9jayBJTyByZXF1ZXN0IGlzIHN3aXRjaGVkIGludG8gYXJyYXkgb2Ygc2NhdHRlcmxpc3RzLAorICogd2hpY2ggYXJlIHN1Ym1pdHRlZCB0byB0aGUgY3J5cHRvIHByb2Nlc3NpbmcgaXRlcmF0b3IuCisgKgorICogSW5wdXQgYW5kIG91dHB1dCBpdGVyYXRvciBpbml0aWFsaXphdGlvbiBhcmUgZGlmZmVyZW50LCBzaW5jZQorICogaW4gb3V0cHV0IGNhc2Ugd2UgY2FuIG5vdCBlbmNyeXB0IGRhdGEgaW4tcGxhY2UgYW5kIG5lZWQgYQorICogdGVtcG9yYXJ5IHN0b3JhZ2UsIHdoaWNoIGlzIHRoZW4gYmVpbmcgc2VudCB0byB0aGUgcmVtb3RlIHBlZXIuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3RyYW5zX2l0ZXJfb3V0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAorCQlpbnQgKCogaXRlcmF0b3IpIChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjKSkKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJaW50IGVyciwgaTsKKworCXNnX2luaXRfdGFibGUoZS0+c3JjLCBiaW8tPmJpX3ZjbnQpOworCXNnX2luaXRfdGFibGUoZS0+ZHN0LCBiaW8tPmJpX3ZjbnQpOworCisJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgeworCQlzZ19zZXRfcGFnZSgmZS0+c3JjW2ldLCBidi0+YnZfcGFnZSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7CisJCXNnX3NldF9wYWdlKCZlLT5kc3RbaV0sIGUtPnBhZ2VzW2ldLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKKworCQllcnIgPSBpdGVyYXRvcihlLCAmZS0+ZHN0W2ldLCAmZS0+c3JjW2ldKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHN0X3RyYW5zX2l0ZXJfaW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCWludCAoKiBpdGVyYXRvcikgKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKKwkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMpKQoreworCXN0cnVjdCBiaW9fdmVjICpidjsKKwlpbnQgZXJyLCBpOworCisJc2dfaW5pdF90YWJsZShlLT5zcmMsIGJpby0+YmlfdmNudCk7CisJc2dfaW5pdF90YWJsZShlLT5kc3QsIGJpby0+YmlfdmNudCk7CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7CisJCXNnX3NldF9wYWdlKCZlLT5zcmNbaV0sIGJ2LT5idl9wYWdlLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKKwkJc2dfc2V0X3BhZ2UoJmUtPmRzdFtpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOworCisJCWVyciA9IGl0ZXJhdG9yKGUsICZlLT5kc3RbaV0sICZlLT5zcmNbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc3RfY3J5cHRfaXRlcmF0b3Ioc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCit7CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKKwl1OCBpdlszMl07CisKKwltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOworCisJbWVtY3B5KGl2LCAmZS0+aXYsIHNpemVvZihlLT5pdikpOworCisJcmV0dXJuIGRzdF9jcnlwdG9fcHJvY2VzcyhyZXEsIHNnX2RzdCwgc2dfc3JjLCBpdiwgZS0+ZW5jLCBlLT50aW1lb3V0KTsKK30KKworc3RhdGljIGludCBkc3RfY3J5cHQoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKKworCW1lbXNldChyZXEsIDAsIHNpemVvZihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0KSk7CisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0ocmVxLCBlLT5jaXBoZXIpOworCisJaWYgKGUtPmVuYykKKwkJcmV0dXJuIGRzdF90cmFuc19pdGVyX291dChiaW8sIGUsIGRzdF9jcnlwdF9pdGVyYXRvcik7CisJZWxzZQorCQlyZXR1cm4gZHN0X3RyYW5zX2l0ZXJfaW4oYmlvLCBlLCBkc3RfY3J5cHRfaXRlcmF0b3IpOworfQorCitzdGF0aWMgaW50IGRzdF9oYXNoX2l0ZXJhdG9yKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjKQoreworCXJldHVybiBjcnlwdG9faGFzaF91cGRhdGUoZS0+ZGF0YSwgc2dfc3JjLCBzZ19zcmMtPmxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgZHN0X2hhc2goc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgYmlvICpiaW8sIHZvaWQgKmRzdCkKK3sKKwlzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjID0gZS0+ZGF0YTsKKwlpbnQgZXJyOworCisJZGVzYy0+dGZtID0gZS0+aGFzaDsKKwlkZXNjLT5mbGFncyA9IDA7CisKKwllcnIgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkc3RfdHJhbnNfaXRlcl9pbihiaW8sIGUsIGRzdF9oYXNoX2l0ZXJhdG9yKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgZHN0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbml0aWFsaXplL2NsZWFudXAgYSBjcnlwdG8gdGhyZWFkLiBUaGUgb25seSB0aGluZyBpdCBzaG91bGQKKyAqIGRvIGlzIHRvIGFsbG9jYXRlIGEgcG9vbCBvZiBwYWdlcyBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4KKyAqIEFuZCB0byBzZXR1cCBjaXBoZXIgYW5kL29yIGhhc2guCisgKi8KK3N0YXRpYyB2b2lkICpkc3RfY3J5cHRvX3RocmVhZF9pbml0KHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gZGF0YTsKKwlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmU7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwllID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKwllLT5zcmMgPSBrY2FsbG9jKDIgKiBuLT5tYXhfcGFnZXMsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFlLT5zcmMpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJZS0+ZHN0ID0gZS0+c3JjICsgbi0+bWF4X3BhZ2VzOworCisJZXJyID0gZHN0X2NyeXB0b19lbmdpbmVfaW5pdChlLCBuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9hbGw7CisKKwlyZXR1cm4gZTsKKworZXJyX291dF9mcmVlX2FsbDoKKwlrZnJlZShlLT5zcmMpOworZXJyX291dF9mcmVlOgorCWtmcmVlKGUpOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGRzdF9jcnlwdG9fdGhyZWFkX2NsZWFudXAodm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBwcml2YXRlOworCisJZHN0X2NyeXB0b19lbmdpbmVfZXhpdChlKTsKKwlrZnJlZShlLT5zcmMpOworCWtmcmVlKGUpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBjcnlwdG8gZW5naW5lIGZvciBnaXZlbiBub2RlOiBzdG9yZSBrZXlzLCBjcmVhdGUgcG9vbAorICogb2YgdGhyZWFkcywgaW5pdGlhbGl6ZSBlYWNoIG9uZS4KKyAqCisgKiBFYWNoIHRocmVhZCBoYXMgdW5pcXVlIElELCBidXQgMCBhbmQgMSBhcmUgcmVzZXJ2ZWQgZm9yIHJlY2VpdmluZyBhbmQgYWNjZXB0aW5nCisgKiB0aHJlYWRzIChpZiBleHBvcnQgbm9kZSksIHNvIElEcyBjb3VsZCBzdGFydCBmcm9tIDIsIGJ1dCBzdGFydGluZyB0aGVtCisgKiBmcm9tIDEwIGFsbG93cyBlYXNpbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGhyZWFkIGlzIGZvci4KKyAqLworaW50IGRzdF9ub2RlX2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwpCit7CisJdm9pZCAqa2V5ID0gKGN0bCArIDEpOworCWludCBlcnIgPSAtRU5PTUVNLCBpOworCWNoYXIgbmFtZVszMl07CisKKwlpZiAoY3RsLT5oYXNoX2tleXNpemUpIHsKKwkJbi0+aGFzaF9rZXkgPSBrbWFsbG9jKGN0bC0+aGFzaF9rZXlzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFuLT5oYXNoX2tleSkKKwkJCWdvdG8gZXJyX291dF9leGl0OworCQltZW1jcHkobi0+aGFzaF9rZXksIGtleSwgY3RsLT5oYXNoX2tleXNpemUpOworCX0KKworCWlmIChjdGwtPmNpcGhlcl9rZXlzaXplKSB7CisJCW4tPmNpcGhlcl9rZXkgPSBrbWFsbG9jKGN0bC0+Y2lwaGVyX2tleXNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIW4tPmNpcGhlcl9rZXkpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9oYXNoOworCQltZW1jcHkobi0+Y2lwaGVyX2tleSwga2V5LCBjdGwtPmNpcGhlcl9rZXlzaXplKTsKKwl9CisJbWVtY3B5KCZuLT5jcnlwdG8sIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCkpOworCisJZm9yIChpPTA7IGk8Y3RsLT50aHJlYWRfbnVtOyArK2kpIHsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMtY3J5cHRvLSVkIiwgbi0+bmFtZSwgaSk7CisJCS8qIFVuaXF1ZSBpZHMuLi4gKi8KKwkJZXJyID0gdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihuLT5wb29sLCBuYW1lLCBpKzEwLAorCQkJZHN0X2NyeXB0b190aHJlYWRfaW5pdCwgZHN0X2NyeXB0b190aHJlYWRfY2xlYW51cCwgbik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZnJlZV90aHJlYWRzOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfdGhyZWFkczoKKwl3aGlsZSAoLS1pID49IDApCisJCXRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQobi0+cG9vbCwgaSsxMCk7CisKKwlpZiAoY3RsLT5jaXBoZXJfa2V5c2l6ZSkKKwkJa2ZyZWUobi0+Y2lwaGVyX2tleSk7CisJY3RsLT5jaXBoZXJfa2V5c2l6ZSA9IDA7CitlcnJfb3V0X2ZyZWVfaGFzaDoKKwlpZiAoY3RsLT5oYXNoX2tleXNpemUpCisJCWtmcmVlKG4tPmhhc2hfa2V5KTsKKwljdGwtPmhhc2hfa2V5c2l6ZSA9IDA7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBkc3Rfbm9kZV9jcnlwdG9fZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwgPSAmbi0+Y3J5cHRvOworCisJaWYgKGN0bC0+Y2lwaGVyX2FsZ29bMF0gfHwgY3RsLT5oYXNoX2FsZ29bMF0pIHsKKwkJa2ZyZWUobi0+aGFzaF9rZXkpOworCQlrZnJlZShuLT5jaXBoZXJfa2V5KTsKKwl9Cit9CisKKy8qCisgKiBUaHJhZCBwb29sIHNldHVwIGNhbGxiYWNrLiBKdXN0IHN0b3JlcyBhIHRyYW5zYWN0aW9uIGluIHByaXZhdGUgZGF0YS4KKyAqLworc3RhdGljIGludCBkc3RfdHJhbnNfY3J5cHRvX3NldHVwKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnRyYW5zKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7CisKKwllLT5wcml2YXRlID0gdHJhbnM7CisJcmV0dXJuIDA7Cit9CisKKyNpZiAwCitzdGF0aWMgdm9pZCBkc3RfZHVtcF9iaW8oc3RydWN0IGJpbyAqYmlvKQoreworCXU4ICpwOworCXN0cnVjdCBiaW9fdmVjICpidjsKKwlpbnQgaTsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJZHByaW50aygiJXM6ICVsbHUvJXU6IHNpemU6ICV1LCBvZmZzZXQ6ICV1LCBkYXRhOiAiLAorCQkJCV9fZnVuY19fLCBiaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAorCQkJCWJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOworCisJCXAgPSBrbWFwKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7CisJCWZvciAoaT0wOyBpPGJ2LT5idl9sZW47ICsraSkKKwkJCXByaW50aygiJTAyeCAiLCBwW2ldKTsKKwkJa3VubWFwKGJ2LT5idl9wYWdlKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KK30KKyNlbmRpZgorCisvKgorICogRW5jcnlwdC9oYXNoIGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldHdvcmsuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzX3NlbmRpbmcoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3QgYmlvICpiaW8sIHU4ICpoYXNoKQoreworCWludCBlcnI7CisKKwlpZiAoZS0+Y2lwaGVyKSB7CisJCWVyciA9IGRzdF9jcnlwdChlLCBiaW8pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJaWYgKGUtPmhhc2gpIHsKKwkJZXJyID0gZHN0X2hhc2goZSwgYmlvLCBoYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisjaWZkZWYgQ09ORklHX0RTVF9ERUJVRworCQl7CisJCQl1bnNpZ25lZCBpbnQgaTsKKworCQkJLyogZHN0X2R1bXBfYmlvKGJpbyk7ICovCisKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBoYXNoOiAiLAorCQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLAorCQkJCWJpby0+Ymlfc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOworCQkJZm9yIChpPTA7IGk8Y3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsgKytpKQorCQkJCQlwcmludGsoIiUwMnggIiwgaGFzaFtpXSk7CisJCQlwcmludGsoIlxuIik7CisJCX0KKyNlbmRpZgorCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENoZWNrIGlmIHJlY2VpdmVkIGRhdGEgaXMgdmFsaWQuIERlY2lwaGVyIGlmIGl0IGlzLgorICovCitzdGF0aWMgaW50IGRzdF9jcnlwdG9fcHJvY2Vzc19yZWNlaXZpbmcoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3QgYmlvICpiaW8sIHU4ICpoYXNoLCB1OCAqcmVjdl9oYXNoKQoreworCWludCBlcnI7CisKKwlpZiAoZS0+aGFzaCkgeworCQlpbnQgbWlzbWF0Y2g7CisKKwkJZXJyID0gZHN0X2hhc2goZSwgYmlvLCBoYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCW1pc21hdGNoID0gISFtZW1jbXAocmVjdl9oYXNoLCBoYXNoLAorCQkJCWNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCkpOworI2lmZGVmIENPTkZJR19EU1RfREVCVUcKKwkJLyogZHN0X2R1bXBfYmlvKGJpbyk7ICovCisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGhhc2ggbWlzbWF0Y2g6ICVkIiwKKwkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCisJCQliaW9fZGF0YV9kaXIoYmlvKSwgbWlzbWF0Y2gpOworCQlpZiAobWlzbWF0Y2gpIHsKKwkJCXVuc2lnbmVkIGludCBpOworCisJCQlwcmludGsoIiwgcmVjdi9jYWxjOiAiKTsKKwkJCWZvciAoaT0wOyBpPGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7ICsraSkgeworCQkJCXByaW50aygiJTAyeC8lMDJ4ICIsIHJlY3ZfaGFzaFtpXSwgaGFzaFtpXSk7CisJCQl9CisJCX0KKwkJcHJpbnRrKCJcbiIpOworI2VuZGlmCisJCWVyciA9IC0xOworCQlpZiAobWlzbWF0Y2gpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAoZS0+Y2lwaGVyKSB7CisJCWVyciA9IGRzdF9jcnlwdChlLCBiaW8pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVGhyZWFkIHBvb2wgY2FsbGJhY2sgdG8gZW5jcnlwdCBkYXRhIGFuZCBzZW5kIGl0IHRvIHRoZSBuZXRvd29yay4KKyAqLworc3RhdGljIGludCBkc3RfdHJhbnNfY3J5cHRvX2FjdGlvbih2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICpzY2hlZHVsZV9kYXRhKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7CisJc3RydWN0IGRzdF90cmFucyAqdCA9IHNjaGVkdWxlX2RhdGE7CisJc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOworCWludCBlcnI7CisKKwlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJWxsdSwgY2lwaGVyOiAlcCwgaGFzaDogJXAuXG4iLAorCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgZS0+Y2lwaGVyLCBlLT5oYXNoKTsKKworCWUtPmVuYyA9IHQtPmVuYzsKKwllLT5pdiA9IGRzdF9nZW5faXYodCk7CisKKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKKwkJZXJyID0gZHN0X2NyeXB0b19wcm9jZXNzX3NlbmRpbmcoZSwgYmlvLCB0LT5jbWQuaGFzaCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQlpZiAoZS0+aGFzaCkgeworCQkJdC0+Y21kLmNzaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsKKwkJCXQtPmNtZC5zaXplICs9IHQtPmNtZC5jc2l6ZTsKKwkJfQorCisJCXJldHVybiBkc3RfdHJhbnNfc2VuZCh0KTsKKwl9IGVsc2UgeworCQl1OCAqaGFzaCA9IGUtPmRhdGEgKyBlLT5zaXplLzI7CisKKwkJZXJyID0gZHN0X2NyeXB0b19wcm9jZXNzX3JlY2VpdmluZyhlLCBiaW8sIGhhc2gsIHQtPmNtZC5oYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWRzdF90cmFuc19yZW1vdmUodCk7CisJCWRzdF90cmFuc19wdXQodCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwl0LT5lcnJvciA9IGVycjsKKwlkc3RfdHJhbnNfcHV0KHQpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTY2hlZHVsZSBjcnlwdG8gcHJvY2Vzc2luZyBmb3IgZ2l2ZW4gdHJhbnNhY3Rpb24uCisgKi8KK2ludCBkc3RfdHJhbnNfY3J5cHRvKHN0cnVjdCBkc3RfdHJhbnMgKnQpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKKwlpbnQgZXJyOworCisJZXJyID0gdGhyZWFkX3Bvb2xfc2NoZWR1bGUobi0+cG9vbCwKKwkJZHN0X3RyYW5zX2NyeXB0b19zZXR1cCwgZHN0X3RyYW5zX2NyeXB0b19hY3Rpb24sCisJCXQsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJZHN0X3RyYW5zX3B1dCh0KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ3J5cHRvIG1hY2hpbmVyeSBmb3IgdGhlIGV4cG9ydCBub2RlLgorICovCitzdGF0aWMgaW50IGRzdF9leHBvcnRfY3J5cHRvX3NldHVwKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKmJpbykKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBjcnlwdG9fZW5naW5lOworCisJZS0+cHJpdmF0ZSA9IGJpbzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc3RfZXhwb3J0X2NyeXB0b19hY3Rpb24odm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBjcnlwdG9fZW5naW5lOworCXN0cnVjdCBiaW8gKmJpbyA9IHNjaGVkdWxlX2RhdGE7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IGJpby0+YmlfcHJpdmF0ZTsKKwlpbnQgZXJyOworCisJZHByaW50aygiJXM6IGU6ICVwLCBkYXRhOiAlcCwgYmlvOiAlbGx1LyV1LCBkaXI6ICVsdS5cbiIsIF9fZnVuY19fLAorCQllLCBlLT5kYXRhLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGJpb19kYXRhX2RpcihiaW8pKTsKKworCWUtPmVuYyA9IChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKTsKKwllLT5pdiA9IHAtPmNtZC5pZDsKKworCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgeworCQl1OCAqaGFzaCA9IGUtPmRhdGEgKyBlLT5zaXplLzI7CisKKwkJZXJyID0gZHN0X2NyeXB0b19wcm9jZXNzX3JlY2VpdmluZyhlLCBiaW8sIGhhc2gsIHAtPmNtZC5oYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CisJfSBlbHNlIHsKKwkJZXJyID0gZHN0X2NyeXB0b19wcm9jZXNzX3NlbmRpbmcoZSwgYmlvLCBwLT5jbWQuaGFzaCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQlpZiAoZS0+aGFzaCkgeworCQkJcC0+Y21kLmNzaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsKKwkJCXAtPmNtZC5zaXplICs9IHAtPmNtZC5jc2l6ZTsKKwkJfQorCisJCWVyciA9IGRzdF9leHBvcnRfc2VuZF9iaW8oYmlvKTsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGRzdF9leHBvcnRfY3J5cHRvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKQoreworCWludCBlcnI7CisKKwllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLAorCQlkc3RfZXhwb3J0X2NyeXB0b19zZXR1cCwgZHN0X2V4cG9ydF9jcnlwdG9fYWN0aW9uLAorCQliaW8sIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJYmlvX3B1dChiaW8pOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkMjViNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwpAQCAtMCwwICsxLDk5NSBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8bGludXgvZHN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKworc3RhdGljIGludCBkc3RfbWFqb3I7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZHN0X2hhc2hfbG9jayk7CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqZHN0X2hhc2h0YWJsZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZHN0X2hhc2h0YWJsZV9zaXplID0gMTI4OworbW9kdWxlX3BhcmFtKGRzdF9oYXNodGFibGVfc2l6ZSwgdWludCwgMDY0NCk7CisKK3N0YXRpYyBjaGFyIGRzdF9uYW1lW10gPSAiRGVtZW50aWFudGluZyBnb2xkZmlzaCI7CisKK3N0YXRpYyBERUZJTkVfSURSKGRzdF9pbmRleF9pZHIpOworc3RhdGljIHN0cnVjdCBjYl9pZCBjbl9kc3RfaWQgPSB7IENOX0RTVF9JRFgsIENOX0RTVF9WQUwgfTsKKworLyoKKyAqIERTVCBzeXNmcyB0cmVlIGZvciBkZXZpY2UgY2FsbGVkICdzdG9yYWdlJzoKKyAqCisgKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlLworICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS90eXBlIDogMTkyLjE2OC40LjgwOjEwMjUKKyAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2Uvc2l6ZSA6IDgwMAorICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS9uYW1lIDogc3RvcmFnZQorICovCisKK3N0YXRpYyBpbnQgZHN0X2Rldl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgZHN0X2Rldl9idXNfdHlwZSA9IHsKKwkubmFtZSAJCT0gImRzdCIsCisJLm1hdGNoIAkJPSAmZHN0X2Rldl9tYXRjaCwKK307CisKK3N0YXRpYyB2b2lkIGRzdF9ub2RlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKKworCWtmcmVlKGluZm8pOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZSBkc3Rfbm9kZV9kZXYgPSB7CisJLmJ1cyAJCT0gJmRzdF9kZXZfYnVzX3R5cGUsCisJLnJlbGVhc2UgCT0gJmRzdF9ub2RlX3JlbGVhc2UKK307CisKKy8qCisgKiBTZXR0aW5nIHNpemUgb2YgdGhlIG5vZGUgYWZ0ZXIgaXQgd2FzIGNoYW5nZWQuCisgKi8KK3N0YXRpYyB2b2lkIGRzdF9ub2RlX3NldF9zaXplKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCisJc2V0X2NhcGFjaXR5KG4tPmRpc2ssIG4tPnNpemUgPj4gOSk7CisKKwliZGV2ID0gYmRnZXRfZGlzayhuLT5kaXNrLCAwKTsKKwlpZiAoYmRldikgeworCQltdXRleF9sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7CisJCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgbi0+c2l6ZSk7CisJCW11dGV4X3VubG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOworCQliZHB1dChiZGV2KTsKKwl9Cit9CisKKy8qCisgKiBEaXN0cmlidXRlZCBzdG9yYWdlIHJlcXVlc3QgcHJvY2Vzc2luZyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBkc3RfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQoreworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHEtPnF1ZXVlZGF0YTsKKwlpbnQgZXJyID0gLUVJTzsKKworCWlmIChiaW9fZW1wdHlfYmFycmllcihiaW8pICYmICFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhIGRpcnR5XlduaWNlIGhhY2ssIGJ1dCBpZiB3ZSBjb21wbGV0ZSB0aGlzCisJCSAqIG9wZXJhdGlvbiB3aXRoIC1FT1BOT1RTVVBQIGxpa2UgaW50ZW5kZWQsIFhGUworCQkgKiB3aWxsIHN0dWNrIGFuZCBmcmVlemUgdGhlIG1hY2hpbmUuIFRoaXMgbWF5IGJlCisJCSAqIG5vdCBwYXJ0aWN1bGFyeSBYRlMgcHJvYmxlbSB0aG91Z2gsIGJ1dCBpdCBpcyB0aGUKKwkJICogb25seSBGUyB3aGljaCBzZW5kcyBlbXB0eSBiYXJyaWVyIGF0IHVtb3VudCB0aW1lCisJCSAqIEkgd29ya2VkIHdpdGguCisJCSAqCisJCSAqIEVtcHR5IGJhcnJpZXJzIGFyZSBub3QgYWxsb3dlZCBhbnl3YXksIHNlZSA1MWZkNzdiZDlmNTEyCisJCSAqIGZvciBleGFtcGxlLCBhbHRob3VnaCBsYXRlciBpdCB3YXMgY2hhbmdlZCB0byBiaW9fZGlzY2FyZCgpCisJCSAqIG9ubHksIHdoaWNoIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBjYXNlLgorCQkgKi8KKwkJLy9lcnIgPSAtRU9QTk9UU1VQUDsKKwkJZXJyID0gMDsKKwkJZ290byBlbmRfaW87CisJfQorCisJYmlvX2dldChiaW8pOworCisJcmV0dXJuIGRzdF9wcm9jZXNzX2JpbyhuLCBiaW8pOworCitlbmRfaW86CisJYmlvX2VuZGlvKGJpbywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogT3Blbi9jbG9zZSBjYWxsYmFja3MgZm9yIGFwcHJvcHJpYXRlIGJsb2NrIGRldmljZS4KKyAqLworc3RhdGljIGludCBkc3RfYmRldl9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisKKwlkc3Rfbm9kZV9nZXQobik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHN0X2JkZXZfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGRpc2stPnByaXZhdGVfZGF0YTsKKworCWRzdF9ub2RlX3B1dChuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkc3RfYmxrX29wcyA9IHsKKwkub3BlbgkJPSBkc3RfYmRldl9vcGVuLAorCS5yZWxlYXNlCT0gZHN0X2JkZXZfcmVsZWFzZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCisvKgorICogQmxvY2sgbGF5ZXIgYmluZGluZyAtIGRpc2sgaXMgY3JlYXRlZCB3aGVuIGFycmF5IGlzIGZ1bGx5IGNvbmZpZ3VyZWQKKyAqIGJ5IHVzZXJzcGFjZSByZXF1ZXN0LgorICovCitzdGF0aWMgaW50IGRzdF9ub2RlX2NyZWF0ZV9kaXNrKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKwl1MzIgaW5kZXggPSAwOworCisJbi0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShOVUxMLCBOVUxMKTsKKwlpZiAoIW4tPnF1ZXVlKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCW4tPnF1ZXVlLT5xdWV1ZWRhdGEgPSBuOworCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3Qobi0+cXVldWUsIGRzdF9yZXF1ZXN0KTsKKwlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMobi0+cXVldWUsIG4tPm1heF9wYWdlcyk7CisJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhuLT5xdWV1ZSwgbi0+bWF4X3BhZ2VzKTsKKworCWVyciA9IC1FTk9NRU07CisJbi0+ZGlzayA9IGFsbG9jX2Rpc2soMSk7CisJaWYgKCFuLT5kaXNrKQorCQlnb3RvIGVycl9vdXRfZnJlZV9xdWV1ZTsKKworCWlmICghKG4tPnN0YXRlLT5wZXJtaXNzaW9ucyAmIERTVF9QRVJNX1dSSVRFKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJEU1Qgbm9kZSAlcyBhdHRhY2hlZCByZWFkLW9ubHkuXG4iLCBuLT5uYW1lKTsKKwkJc2V0X2Rpc2tfcm8obi0+ZGlzaywgMSk7CisJfQorCisJaWYgKCFpZHJfcHJlX2dldCgmZHN0X2luZGV4X2lkciwgR0ZQX0tFUk5FTCkpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKKwllcnIgPSBpZHJfZ2V0X25ldygmZHN0X2luZGV4X2lkciwgTlVMTCwgJmluZGV4KTsKKwltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwluLT5kaXNrLT5tYWpvciA9IGRzdF9tYWpvcjsKKwluLT5kaXNrLT5maXJzdF9taW5vciA9IGluZGV4OworCW4tPmRpc2stPmZvcHMgPSAmZHN0X2Jsa19vcHM7CisJbi0+ZGlzay0+cXVldWUgPSBuLT5xdWV1ZTsKKwluLT5kaXNrLT5wcml2YXRlX2RhdGEgPSBuOworCXNucHJpbnRmKG4tPmRpc2stPmRpc2tfbmFtZSwgc2l6ZW9mKG4tPmRpc2stPmRpc2tfbmFtZSksICJkc3QtJXMiLCBuLT5uYW1lKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3B1dDoKKwlwdXRfZGlzayhuLT5kaXNrKTsKK2Vycl9vdXRfZnJlZV9xdWV1ZToKKwlibGtfY2xlYW51cF9xdWV1ZShuLT5xdWV1ZSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFN5c2ZzIG1hY2hpbmVyeTogc2hvdyBkZXZpY2UncyBzaXplLgorICovCitzdGF0aWMgc3NpemVfdCBkc3Rfc2hvd19zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCBpbmZvLT5zaXplKTsKK30KKworLyoKKyAqIFNob3cgbG9jYWwgZXhwb3J0ZWQgZGV2aWNlLgorICovCitzdGF0aWMgc3NpemVfdCBkc3Rfc2hvd19sb2NhbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGluZm8tPmxvY2FsKTsKK30KKworLyoKKyAqIFNob3dzIHR5cGUgb2YgdGhlIHJlbW90ZSBub2RlIC0gZGV2aWNlIG1ham9yL21pbm9yIG51bWJlcgorICogZm9yIGxvY2FsIG5vZGVzIGFuZCBhZGRyZXNzIChhZl9pbmV0IGlwdjQvaXB2NiBvbmx5KSBmb3IgcmVtb3RlIG5vZGVzLgorICovCitzdGF0aWMgc3NpemVfdCBkc3Rfc2hvd190eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7CisJaW50IGZhbWlseSA9IGluZm8tPm5ldC5hZGRyLnNhX2ZhbWlseTsKKworCWlmIChmYW1pbHkgPT0gQUZfSU5FVCkgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaW5mby0+bmV0LmFkZHI7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1LiV1LiV1LiV1OiVkXG4iLAorCQkJTklQUVVBRChzaW4tPnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwl9IGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZpbmZvLT5uZXQuYWRkcjsKKwkJcmV0dXJuIHNwcmludGYoYnVmLAorCQkJIiVwaTY6JWRcbiIsCisJCQkmc2luLT5zaW42X2FkZHIsIG50b2hzKHNpbi0+c2luNl9wb3J0KSk7CisJfSBlbHNlIHsKKwkJaW50IGksIHN6ID0gUEFHRV9TSVpFIC0gMjsgLyogMCBzeW1ib2wgYW5kICdcbicgYmVsb3cgKi8KKwkJaW50IHNpemUsIGFkZHJsZW4gPSBpbmZvLT5uZXQuYWRkci5zYV9kYXRhX2xlbjsKKwkJdW5zaWduZWQgY2hhciAqYSA9ICh1bnNpZ25lZCBjaGFyICopJmluZm8tPm5ldC5hZGRyLnNhX2RhdGE7CisJCWNoYXIgKmJ1Zl9vcmlnID0gYnVmOworCisJCXNpemUgPSBzbnByaW50ZihidWYsIHN6LCAiZmFtaWx5OiAlZCwgYWRkcmxlbjogJXUsIGFkZHI6ICIsCisJCQkJZmFtaWx5LCBhZGRybGVuKTsKKwkJc3ogLT0gc2l6ZTsKKwkJYnVmICs9IHNpemU7CisKKwkJZm9yIChpPTA7IGk8YWRkcmxlbjsgKytpKSB7CisJCQlpZiAoc3ogPCAzKQorCQkJCWJyZWFrOworCisJCQlzaXplID0gc25wcmludGYoYnVmLCBzeiwgIiUwMnggIiwgYVtpXSk7CisJCQlzeiAtPSBzaXplOworCQkJYnVmICs9IHNpemU7CisJCX0KKwkJYnVmICs9IHNwcmludGYoYnVmLCAiXG4iKTsKKworCQlyZXR1cm4gYnVmIC0gYnVmX29yaWc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZHN0X25vZGVfYXR0cnNbXSA9IHsKKwlfX0FUVFIoc2l6ZSwgMDQ0NCwgZHN0X3Nob3dfc2l6ZSwgTlVMTCksCisJX19BVFRSKHR5cGUsIDA0NDQsIGRzdF9zaG93X3R5cGUsIE5VTEwpLAorCV9fQVRUUihsb2NhbCwgMDQ0NCwgZHN0X3Nob3dfbG9jYWwsIE5VTEwpLAorfTsKKworc3RhdGljIGludCBkc3RfY3JlYXRlX25vZGVfYXR0cmlidXRlcyhzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJaW50IGVyciwgaTsKKworCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZHN0X25vZGVfYXR0cnMpOyArK2kpIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCisJCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9yZW1vdmVfYWxsOworCX0KKwlyZXR1cm4gMDsKKworZXJyX291dF9yZW1vdmVfYWxsOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCisJCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGRzdF9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVzKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZHN0X25vZGVfYXR0cnMpOyArK2kpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmbi0+aW5mby0+ZGV2aWNlLAorCQkJCSZkc3Rfbm9kZV9hdHRyc1tpXSk7Cit9CisKKy8qCisgKiBTeXNmcyBjbGVhbnVwIGFuZCBpbml0aWFsaXphdGlvbi4KKyAqIFNob3dzIG51bWJlciBvZiB1c2VmdWwgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHZvaWQgZHN0X25vZGVfc3lzZnNfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJaWYgKG4tPmluZm8pIHsKKwkJZHN0X3JlbW92ZV9ub2RlX2F0dHJpYnV0ZXMobik7CisJCWRldmljZV91bnJlZ2lzdGVyKCZuLT5pbmZvLT5kZXZpY2UpOworCQluLT5pbmZvID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHN0X25vZGVfc3lzZnNfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJaW50IGVycjsKKworCW4tPmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW4tPmluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KCZuLT5pbmZvLT5kZXZpY2UsICZkc3Rfbm9kZV9kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CisJbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7CisKKwlkZXZfc2V0X25hbWUoJm4tPmluZm8tPmRldmljZSwgImRzdC0lcyIsIG4tPm5hbWUpOworCWVyciA9IGRldmljZV9yZWdpc3Rlcigmbi0+aW5mby0+ZGV2aWNlKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBub2RlICclcycsIGVycjogJWQuXG4iLAorCQkJCW4tPm5hbWUsIGVycik7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWRzdF9jcmVhdGVfbm9kZV9hdHRyaWJ1dGVzKG4pOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlrZnJlZShuLT5pbmZvKTsKKwluLT5pbmZvID0gTlVMTDsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogRFNUIG5vZGUgaGFzaCB0YWJsZXMgbWFjaGluZXJ5LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkc3RfaGFzaChjaGFyICpzdHIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXJldHVybiAoamhhc2goc3RyLCBzaXplLCAwKSAlIGRzdF9oYXNodGFibGVfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRzdF9ub2RlX3JlbW92ZShzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmbi0+bm9kZV9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZHN0X25vZGVfYWRkKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwl1bnNpZ25lZCBoYXNoID0gZHN0X2hhc2gobi0+bmFtZSwgc2l6ZW9mKG4tPm5hbWUpKTsKKworCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJm4tPm5vZGVfZW50cnksICZkc3RfaGFzaHRhYmxlW2hhc2hdKTsKKwltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOworfQorCisvKgorICogQ2xlYW5pbmcgbm9kZSB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGZyZWVkLgorICogVGhlcmUgYXJlIHN0aWxsIHVzZXJzIG9mIHRoZSBzb2NrZXQgdGhvdWdoLAorICogc28gY29ubmVjdGlvbiBjbGVhbnVwIHNob3VsZCBiZSBwcm90ZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGRzdF9ub2RlX2NsZWFudXAoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gbi0+c3RhdGU7CisKKwlpZiAoIXN0KQorCQlyZXR1cm47CisKKwlpZiAobi0+cXVldWUpIHsKKwkJYmxrX2NsZWFudXBfcXVldWUobi0+cXVldWUpOworCisJCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOworCQlpZHJfcmVtb3ZlKCZkc3RfaW5kZXhfaWRyLCBuLT5kaXNrLT5maXJzdF9taW5vcik7CisJCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7CisKKwkJcHV0X2Rpc2sobi0+ZGlzayk7CisJfQorCisJaWYgKG4tPmJkZXYpIHsKKwkJc3luY19ibG9ja2RldihuLT5iZGV2KTsKKwkJYmxrZGV2X3B1dChuLT5iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKKwl9CisKKwlkc3Rfc3RhdGVfbG9jayhzdCk7CisJc3QtPm5lZWRfZXhpdCA9IDE7CisJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7CisKKwlkc3Rfc3RhdGVfcHV0KHN0KTsKKwluLT5zdGF0ZSA9IE5VTEw7Cit9CisKKy8qCisgKiBGcmVlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gZ2l2ZW4gbm9kZS4KKyAqLworc3RhdGljIHZvaWQgZHN0X3NlY3VyaXR5X2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXN0cnVjdCBkc3Rfc2VjdXJlICpzLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIHRtcCwgJm4tPnNlY3VyaXR5X2xpc3QsIHNlY19lbnRyeSkgeworCQlsaXN0X2RlbCgmcy0+c2VjX2VudHJ5KTsKKwkJa2ZyZWUocyk7CisJfQorfQorCisvKgorICogRnJlZSBub2RlIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgdXNlcnMuCisgKiBBY3R1YWxseSBub2RlIGhhcyB0byBiZSBmcmVlZCBvbiBiZWhhbGYgb2QgdXNlcnNwYWNlIHByb2Nlc3MsCisgKiBzaW5jZSB0aGVyZSBhcmUgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGFyZSBlbWJlZGRlZCBpbiB0aGUKKyAqIG5vZGUsIHNvIHRoZXkgY2FuIG5vdCBleGl0IGFuZCBmcmVlIG5vZGUgZnJvbSB0aGVyZSwgdGhhdCBpcworICogd2h5IHRoZXJlIGlzIGEgd2FrZXVwIGlmIHJlZmVyZW5jZSBjb3VudGVyIGlzIG5vdCBlcXVhbCB0byB6ZXJvLgorICovCit2b2lkIGRzdF9ub2RlX3B1dChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJaWYgKHVubGlrZWx5KCFuKSkKKwkJcmV0dXJuOworCisJZHByaW50aygiJXM6IG46ICVwLCByZWZjbnQ6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBuLCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbi0+cmVmY250KSkgeworCQlkc3Rfbm9kZV9yZW1vdmUobik7CisJCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IDA7CisJCWRzdF9ub2RlX2NsZWFudXAobik7CisJCXRocmVhZF9wb29sX2Rlc3Ryb3kobi0+cG9vbCk7CisJCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7CisJCWRzdF9ub2RlX2NyeXB0b19leGl0KG4pOworCQlkc3Rfc2VjdXJpdHlfZXhpdChuKTsKKwkJZHN0X25vZGVfdHJhbnNfZXhpdChuKTsKKworCQlrZnJlZShuKTsKKworCQlkcHJpbnRrKCIlczogZnJlZWQgbjogJXAuXG4iLCBfX2Z1bmNfXywgbik7CisJfSBlbHNlIHsKKwkJd2FrZV91cCgmbi0+d2FpdCk7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyBkZXZpY2VzIG1ham9yL21pbm9yIG51bWJlcnMgZm9yIGdpdmVuIHBhdGhuYW1lLgorICovCitzdGF0aWMgaW50IGRzdF9sb29rdXBfZGV2aWNlKGNvbnN0IGNoYXIgKnBhdGgsIGRldl90ICpkZXYpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfRk9MTE9XLCAmbmQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpbm9kZSA9IG5kLnBhdGguZGVudHJ5LT5kX2lub2RlOworCWlmICghaW5vZGUpIHsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB7CisJCWVyciA9IC1FTk9UQkxLOworCQlnb3RvIG91dDsKKwl9CisKKwkqZGV2ID0gaW5vZGUtPmlfcmRldjsKKworb3V0OgorCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU2V0dGluZyB1cCBleHBvcnQgZGV2aWNlOiBsb29rdXAgYnkgdGhlIG5hbWUsIGdldCBpdHMgc2l6ZQorICogYW5kIHNldHVwIGxpc3RlbmluZyBzb2NrZXQsIHdoaWNoIHdpbGwgYWNjZXB0IGNsaWVudHMsIHdoaWNoCisgKiB3aWxsIHN1Ym1pdCBJTyBmb3IgZ2l2ZW4gc3RvcmFnZS4KKyAqLworc3RhdGljIGludCBkc3Rfc2V0dXBfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSkKK3sKKwlpbnQgZXJyOworCWRldl90IGRldiA9IDA7IC8qIGdjYyBsaWtlcyB0byBzY3JlYW0gaGVyZSAqLworCisJc25wcmludGYobi0+aW5mby0+bG9jYWwsIHNpemVvZihuLT5pbmZvLT5sb2NhbCksICIlcyIsIGxlLT5kZXZpY2UpOworCisJZXJyID0gZHN0X2xvb2t1cF9kZXZpY2UobGUtPmRldmljZSwgJmRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW4tPmJkZXYgPSBvcGVuX2J5X2Rldm51bShkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOworCWlmICghbi0+YmRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAobi0+c2l6ZSAhPSAwKQorCQluLT5zaXplID0gbWluX3QobG9mZl90LCBuLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplLCBuLT5zaXplKTsKKwllbHNlCisJCW4tPnNpemUgPSBuLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplOworCisJbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7CisJZXJyID0gZHN0X25vZGVfaW5pdF9saXN0ZW5lZChuLCBsZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2NsZWFudXA7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9jbGVhbnVwOgorCWJsa2Rldl9wdXQobi0+YmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CisJbi0+YmRldiA9IE5VTEw7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBFbXB0eSB0aHJlYWQgcG9vbCBjYWxsYmFja3MgZm9yIHRoZSBuZXR3b3JrIHByb2Nlc3NpbmcgdGhyZWFkcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZHN0X3RocmVhZF9uZXR3b3JrX2luaXQodm9pZCAqZGF0YSkKK3sKKwlkcHJpbnRrKCIlczogZGF0YTogJXAuXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3RfdGhyZWFkX25ldHdvcmtfY2xlYW51cCh2b2lkICpkYXRhKQoreworCWRwcmludGsoIiVzOiBkYXRhOiAlcC5cbiIsIF9fZnVuY19fLCBkYXRhKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIERTVCBub2RlIGFuZCBpbml0aWFsaXplIHNvbWUgb2YgaXRzIHBhcmFtZXRlcnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHN0X25vZGUgKmRzdF9hbGxvY19ub2RlKHN0cnVjdCBkc3RfY3RsICpjdGwsCisJCWludCAoKnN0YXJ0KShzdHJ1Y3QgZHN0X25vZGUgKiksCisJCWludCBudW0pCit7CisJc3RydWN0IGRzdF9ub2RlICpuOworCWludCBlcnI7CisKKwluID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZuLT5ub2RlX2VudHJ5KTsKKworCUlOSVRfTElTVF9IRUFEKCZuLT5zZWN1cml0eV9saXN0KTsKKwltdXRleF9pbml0KCZuLT5zZWN1cml0eV9sb2NrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm4tPndhaXQpOworCisJbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhjdGwtPnRyYW5zX3NjYW5fdGltZW91dCk7CisJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQpCisJCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IEhaOworCisJbi0+dHJhbnNfbWF4X3JldHJpZXMgPSBjdGwtPnRyYW5zX21heF9yZXRyaWVzOworCWlmICghbi0+dHJhbnNfbWF4X3JldHJpZXMpCisJCW4tPnRyYW5zX21heF9yZXRyaWVzID0gMTA7CisKKwkvKgorCSAqIFByZXR0eSBtdWNoIGFyYml0cmFyeSBkZWZhdWx0IG51bWJlcnMuCisJICogMzIgbWF0Y2hlcyBtYXhpbXVtIG51bWJlciBvZiBwYWdlcyBpbiBiaW8gb3JpZ2luYXRlZCBmcm9tIGV4dDMgKDMxKS4KKwkgKi8KKwluLT5tYXhfcGFnZXMgPSBjdGwtPm1heF9wYWdlczsKKwlpZiAoIW4tPm1heF9wYWdlcykKKwkJbi0+bWF4X3BhZ2VzID0gMzI7CisKKwlpZiAobi0+bWF4X3BhZ2VzID4gMTAyNCkKKwkJbi0+bWF4X3BhZ2VzID0gMTAyNDsKKworCW4tPnN0YXJ0ID0gc3RhcnQ7CisJbi0+c2l6ZSA9IGN0bC0+c2l6ZTsKKworCWF0b21pY19zZXQoJm4tPnJlZmNudCwgMSk7CisJYXRvbWljX2xvbmdfc2V0KCZuLT5nZW4sIDApOworCXNucHJpbnRmKG4tPm5hbWUsIHNpemVvZihuLT5uYW1lKSwgIiVzIiwgY3RsLT5uYW1lKTsKKworCWVyciA9IGRzdF9ub2RlX3N5c2ZzX2luaXQobik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwluLT5wb29sID0gdGhyZWFkX3Bvb2xfY3JlYXRlKG51bSwgbi0+bmFtZSwgZHN0X3RocmVhZF9uZXR3b3JrX2luaXQsCisJCQlkc3RfdGhyZWFkX25ldHdvcmtfY2xlYW51cCwgbik7CisJaWYgKElTX0VSUihuLT5wb29sKSkgeworCQllcnIgPSBQVFJfRVJSKG4tPnBvb2wpOworCQlnb3RvIGVycl9vdXRfc3lzZnNfZXhpdDsKKwl9CisKKwlkcHJpbnRrKCIlczogbjogJXAsIG5hbWU6ICVzLlxuIiwgX19mdW5jX18sIG4sIG4tPm5hbWUpOworCisJcmV0dXJuIG47CisKK2Vycl9vdXRfc3lzZnNfZXhpdDoKKwlkc3Rfbm9kZV9zeXNmc19leGl0KG4pOworZXJyX291dF9mcmVlOgorCWtmcmVlKG4pOworCXJldHVybiBOVUxMOworfQorCisvKgorICogU3RhcnRpbmcgYSBub2RlLCBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBzZXJ2ZXI6CisgKiByZWdpc3RlciBibG9jayBkZXZpY2UgYW5kIGluaXRpYWxpemUgdHJhbnNhY3Rpb24gbWVjaGFuaXNtLgorICogSW4gcmV2ZXJzIG9yZGVyIHRob3VnaC4KKyAqCisgKiBJdCB3aWxsIGF1dG9uZWdvdGlhdGUgc29tZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHJlbW90ZSBub2RlCisgKiBhbmQgdXBkYXRlIGxvY2FsIGlmIG5lZWRlZC4KKyAqCisgKiBUcmFuc2FjdGlvbiBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgdGhlIGxhc3QgdGhpbmcgYmVmb3JlCisgKiBzdGFydGluZyB0aGUgbm9kZSwgc2luY2UgdHJhbnNhY3Rpb24gc2hvdWxkIGluY2x1ZGUgbm90IG9ubHkKKyAqIGJsb2NrIElPLCBidXQgYWxzbyBjcnlwdG8gcmVsYXRlZCBkYXRhIChpZiBhbnkpLCB3aGljaCBhcmUKKyAqIGluaXRpYWxpemVkIHNlcGFyYXRlbHkuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3N0YXJ0X3JlbW90ZShzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJaW50IGVycjsKKworCWVyciA9IGRzdF9ub2RlX3RyYW5zX2luaXQobiwgc2l6ZW9mKHN0cnVjdCBkc3RfdHJhbnMpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZHN0X25vZGVfY3JlYXRlX2Rpc2sobik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWRzdF9ub2RlX3NldF9zaXplKG4pOworCWFkZF9kaXNrKG4tPmRpc2spOworCisJZHByaW50aygiRFNUOiBzdGFydGVkIHJlbW90ZSBub2RlICclcycsIG1pbm9yOiAlZC5cbiIsIG4tPm5hbWUsIG4tPmRpc2stPmZpcnN0X21pbm9yKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQWRkaW5nIHJlbW90ZSBub2RlIGFuZCBpbml0aWFsaXplIGNvbm5lY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZHN0X2FkZF9yZW1vdGUoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKnJjdGwgPSBkYXRhOworCisJaWYgKG4pCisJCXJldHVybiAtRUVYSVNUOworCisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW4gPSBkc3RfYWxsb2Nfbm9kZShjdGwsIGRzdF9zdGFydF9yZW1vdGUsIDEpOworCWlmICghbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoJm4tPmluZm8tPm5ldCwgcmN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKTsKKwllcnIgPSBkc3Rfbm9kZV9pbml0X2Nvbm5lY3RlZChuLCByY3RsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCWRzdF9ub2RlX2FkZChuKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJZHN0X25vZGVfcHV0KG4pOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBBZGRpbmcgZXhwb3J0IG5vZGU6IGluaXRpYWxpemluZyBibG9jayBkZXZpY2UgYW5kIGxpc3RlbmluZyBzb2NrZXQuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2FkZF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUgPSBkYXRhOworCisJaWYgKG4pCisJCXJldHVybiAtRUVYSVNUOworCisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X2N0bCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbiA9IGRzdF9hbGxvY19ub2RlKGN0bCwgZHN0X3N0YXJ0X2V4cG9ydCwgMik7CisJaWYgKCFuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IGRzdF9zZXR1cF9leHBvcnQobiwgY3RsLCBsZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlkc3Rfbm9kZV9hZGQobik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCWRzdF9ub2RlX3B1dChuKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRzdF9ub2RlX3JlbW92ZV91bmxvYWQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXByaW50ayhLRVJOX0lORk8gIlNUT1BQRUQgbmFtZTogJyVzJywgc2l6ZTogJWxsdS5cbiIsCisJCQluLT5uYW1lLCBuLT5zaXplKTsKKworCWlmIChuLT5kaXNrKQorCQlkZWxfZ2VuZGlzayhuLT5kaXNrKTsKKworCWRzdF9ub2RlX3JlbW92ZShuKTsKKwlkc3Rfbm9kZV9zeXNmc19leGl0KG4pOworCisJLyoKKwkgKiBUaGlzIGlzIG5vdCBhIGhhY2suIFJlYWxseS4KKwkgKiBOb2RlJ3MgcmVmZXJlbmNlIGNvdW50ZXIgYWxsb3dzIHRvIGltcGxlbWVudCBmaW5lIGdyYWluZWQKKwkgKiBub2RlIGZyZWVpbmcsIGJ1dCBzaW5jZSBhbGwgdHJhbnNhY3Rpb25zICh3aGljaCBob2xkIG5vZGUncworCSAqIHJlZmVyZW5jZSBjb3VudGVyKSBhcmUgcHJvY2Vzc2VkIGluIHRoZSBkZWRpY2F0ZWQgdGhyZWFkLAorCSAqIGl0IGlzIHBvc3NpYmxlIHRoYXQgcmVmZXJlbmNlIHdpbGwgaGl0IHplcm8gaW4gdGhhdCB0aHJlYWQsCisJICogc28gd2Ugd2lsbCBub3QgYmUgYWJsZSB0byBleGl0IHRocmVhZCBhbmQgY2xlYW51cCB0aGUgbm9kZS4KKwkgKgorCSAqIFNvLCB3ZSByZW1vdmUgZGlzaywgc28gbm8gbmV3IGFjdGl2aXR5IGlzIHBvc3NpYmxlLCBhbmQKKwkgKiB3YWl0IHVudGlsIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9uIGFyZSBjb21wbGV0ZWQgKGVpdGhlcgorCSAqIGluIHJlY2VpdmluZyB0aHJlYWQgb3IgYnkgdGltZW91dCBpbiB3b3JrcXVldWUpLCBpbiB0aGlzCisJICogY2FzZSByZWZlcmVuY2UgY291bnRlciB3aWxsIGJlIGxlc3Mgb3IgZXF1YWwgdG8gMiAob25jZSBzZXQgaW4KKwkgKiBkc3RfYWxsb2Nfbm9kZSgpIGFuZCB0aGVuIGluIGNvbm5lY3RvciBtZXNzYWdlIHBhcnNlcjsKKwkgKiBvciB3aGVuIHdlIGZvcmNlIG1vZHVsZSB1bmxvYWRpbmcsIGFuZCBjb25uZWN0b3IgbWVzc2FnZQorCSAqIHBhcnNlciBkb2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlLCBpbiB0aGlzIGNhc2UgcmVmZXJlbmNlCisJICogY291bnRlciB3aWxsIGJlIGVxdWFsIHRvIDEpLAorCSAqIGFuZCBzdWJzZXF1ZW50IGRzdF9ub2RlX3B1dCgpIGNhbGxzIHdpbGwgZnJlZSB0aGUgbm9kZS4KKwkgKi8KKwlkcHJpbnRrKCIlczogZ29pbmcgdG8gc2xlZXAgd2l0aCAlZCByZWZjbnQuXG4iLCBfX2Z1bmNfXywgYXRvbWljX3JlYWQoJm4tPnJlZmNudCkpOworCXdhaXRfZXZlbnQobi0+d2FpdCwgYXRvbWljX3JlYWQoJm4tPnJlZmNudCkgPD0gMik7CisKKwlkc3Rfbm9kZV9wdXQobik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZW1vdmUgbm9kZSBmcm9tIHRoZSBoYXNoIHRhYmxlLgorICovCitzdGF0aWMgaW50IGRzdF9kZWxfbm9kZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCWlmICghbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gZHN0X25vZGVfcmVtb3ZlX3VubG9hZChuKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgY3J5cHRvIHByb2Nlc3NpbmcgZm9yIGdpdmVuIG5vZGUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjcnlwdG8gPSBkYXRhOworCisJaWYgKCFuKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZHN0X2NyeXB0b19jdGwpICsgY3J5cHRvLT5oYXNoX2tleXNpemUgKworCQkJY3J5cHRvLT5jaXBoZXJfa2V5c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobi0+dHJhbnNfY2FjaGUpCisJCXJldHVybiAtRUVYSVNUOworCisJcmV0dXJuIGRzdF9ub2RlX2NyeXB0b19pbml0KG4sIGNyeXB0byk7Cit9CisKKy8qCisgKiBTZWN1cml0eSBhdHRyaWJ1dGVzIGZvciBnaXZlbiBub2RlLgorICovCitzdGF0aWMgaW50IGRzdF9zZWN1cml0eV9pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IGRzdF9zZWN1cmUgKnM7CisKKwlpZiAoIW4pCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X3NlY3VyZSksIEdGUF9LRVJORUwpOworCWlmICghcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoJnMtPnNlYywgZGF0YSwgc2l6ZSk7CisKKwltdXRleF9sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZzLT5zZWNfZW50cnksICZuLT5zZWN1cml0eV9saXN0KTsKKwltdXRleF91bmxvY2soJm4tPnNlY3VyaXR5X2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBLaWxsJ2VtIGFsbCEKKyAqLworc3RhdGljIGludCBkc3Rfc3RhcnRfbm9kZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCBlcnI7CisKKwlpZiAoIW4pCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG4tPnRyYW5zX2NhY2hlKQorCQlyZXR1cm4gMDsKKworCWVyciA9IG4tPnN0YXJ0KG4pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPICJTVEFSVEVEIG5hbWU6ICclcycsIHNpemU6ICVsbHUuXG4iLCBuLT5uYW1lLCBuLT5zaXplKTsKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCpkc3RfY29tbWFuZF9mdW5jKShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKTsKKworLyoKKyAqIExpc3Qgb2YgdXNlcnNwYWNlIGNvbW1hbmRzLgorICovCitzdGF0aWMgZHN0X2NvbW1hbmRfZnVuYyBkc3RfY29tbWFuZHNbXSA9IHsKKwlbRFNUX0FERF9SRU1PVEVdID0gJmRzdF9hZGRfcmVtb3RlLAorCVtEU1RfQUREX0VYUE9SVF0gPSAmZHN0X2FkZF9leHBvcnQsCisJW0RTVF9ERUxfTk9ERV0gPSAmZHN0X2RlbF9ub2RlLAorCVtEU1RfQ1JZUFRPXSA9ICZkc3RfY3J5cHRvX2luaXQsCisJW0RTVF9TRUNVUklUWV0gPSAmZHN0X3NlY3VyaXR5X2luaXQsCisJW0RTVF9TVEFSVF0gPSAmZHN0X3N0YXJ0X25vZGUsCit9OworCisvKgorICogQ29uZmlndXJhdGlvbiBwYXJzZXIuCisgKi8KK3N0YXRpYyB2b2lkIGNuX2RzdF9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBkc3RfY3RsICpjdGw7CisJc3RydWN0IGNuX21zZyAqbXNnID0gZGF0YTsKKwlpbnQgZXJyOworCXN0cnVjdCBkc3RfY3RsX2FjayBhY2s7CisJc3RydWN0IGRzdF9ub2RlICpuID0gTlVMTCwgKnRtcDsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKworCWlmIChtc2ctPmxlbiA8IHNpemVvZihzdHJ1Y3QgZHN0X2N0bCkpIHsKKwkJZXJyID0gLUVCQURNU0c7CisJCWdvdG8gb3V0OworCX0KKworCWN0bCA9IChzdHJ1Y3QgZHN0X2N0bCAqKW1zZy0+ZGF0YTsKKworCWlmIChjdGwtPmNtZCA+PSBEU1RfQ01EX01BWCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaGFzaCA9IGRzdF9oYXNoKGN0bC0+bmFtZSwgc2l6ZW9mKGN0bC0+bmFtZSkpOworCisJbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZkc3RfaGFzaHRhYmxlW2hhc2hdLCBub2RlX2VudHJ5KSB7CisJCWlmICghbWVtY21wKHRtcC0+bmFtZSwgY3RsLT5uYW1lLCBzaXplb2YodG1wLT5uYW1lKSkpIHsKKwkJCW4gPSB0bXA7CisJCQlkc3Rfbm9kZV9nZXQobik7CisJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOworCisJZXJyID0gZHN0X2NvbW1hbmRzW2N0bC0+Y21kXShuLCBjdGwsIG1zZy0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgZHN0X2N0bCksCisJCQltc2ctPmxlbiAtIHNpemVvZihzdHJ1Y3QgZHN0X2N0bCkpOworCisJZHN0X25vZGVfcHV0KG4pOworb3V0OgorCW1lbWNweSgmYWNrLm1zZywgbXNnLCBzaXplb2Yoc3RydWN0IGNuX21zZykpOworCisJYWNrLm1zZy5hY2sgPSBtc2ctPmFjayArIDE7CisJYWNrLm1zZy5sZW4gPSBzaXplb2Yoc3RydWN0IGRzdF9jdGxfYWNrKSAtIHNpemVvZihzdHJ1Y3QgY25fbXNnKTsKKworCWFjay5lcnJvciA9IGVycjsKKworCWNuX25ldGxpbmtfc2VuZCgmYWNrLm1zZywgMCwgR0ZQX0tFUk5FTCk7Cit9CisKKy8qCisgKiBHbG9iYWwgaW5pdGlhbGl6YXRpb246IHN5c2ZzLCBoYXNoIHRhYmxlLCBibG9jayBkZXZpY2UgcmVnaXN0cmF0aW9uLAorICogY29ubmVjdG9yIGFuZCB2YXJpb3VzIGNhY2hlcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgZHN0X3N5c2ZzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gYnVzX3JlZ2lzdGVyKCZkc3RfZGV2X2J1c190eXBlKTsKK30KKworc3RhdGljIHZvaWQgZHN0X3N5c2ZzX2V4aXQodm9pZCkKK3sKKwlidXNfdW5yZWdpc3RlcigmZHN0X2Rldl9idXNfdHlwZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRzdF9oYXNodGFibGVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJZHN0X2hhc2h0YWJsZSA9IGtjYWxsb2MoZHN0X2hhc2h0YWJsZV9zaXplLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWRzdF9oYXNodGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpPTA7IGk8ZHN0X2hhc2h0YWJsZV9zaXplOyArK2kpCisJCUlOSVRfTElTVF9IRUFEKCZkc3RfaGFzaHRhYmxlW2ldKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkc3RfaGFzaHRhYmxlX2V4aXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgZHN0X25vZGUgKm4sICp0bXA7CisKKwlmb3IgKGk9MDsgaTxkc3RfaGFzaHRhYmxlX3NpemU7ICsraSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobiwgdG1wLCAmZHN0X2hhc2h0YWJsZVtpXSwgbm9kZV9lbnRyeSkgeworCQkJZHN0X25vZGVfcmVtb3ZlX3VubG9hZChuKTsKKwkJfQorCX0KKworCWtmcmVlKGRzdF9oYXNodGFibGUpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkc3Rfc3lzX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWVyciA9IGRzdF9oYXNodGFibGVfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0gZHN0X2V4cG9ydF9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2hhc2h0YWJsZV9leGl0OworCisJZXJyID0gcmVnaXN0ZXJfYmxrZGV2KGRzdF9tYWpvciwgRFNUX05BTUUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfZXhwb3J0X2V4aXQ7CisJaWYgKGVycikKKwkJZHN0X21ham9yID0gZXJyOworCisJZXJyID0gZHN0X3N5c2ZzX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfdW5yZWdpc3RlcjsKKworCWVyciA9IGNuX2FkZF9jYWxsYmFjaygmY25fZHN0X2lkLCAiRFNUIiwgY25fZHN0X2NhbGxiYWNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfc3lzZnNfZXhpdDsKKworCXByaW50ayhLRVJOX0lORk8gIkRpc3RyaWJ1dGVkIHN0b3JhZ2UsICclcycgcmVsZWFzZS5cbiIsIGRzdF9uYW1lKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3N5c2ZzX2V4aXQ6CisJZHN0X3N5c2ZzX2V4aXQoKTsKK2Vycl9vdXRfdW5yZWdpc3RlcjoKKwl1bnJlZ2lzdGVyX2Jsa2Rldihkc3RfbWFqb3IsIERTVF9OQU1FKTsKK2Vycl9vdXRfZXhwb3J0X2V4aXQ6CisJZHN0X2V4cG9ydF9leGl0KCk7CitlcnJfb3V0X2hhc2h0YWJsZV9leGl0OgorCWRzdF9oYXNodGFibGVfZXhpdCgpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkc3Rfc3lzX2V4aXQodm9pZCkKK3sKKwljbl9kZWxfY2FsbGJhY2soJmNuX2RzdF9pZCk7CisJdW5yZWdpc3Rlcl9ibGtkZXYoZHN0X21ham9yLCBEU1RfTkFNRSk7CisJZHN0X2hhc2h0YWJsZV9leGl0KCk7CisJZHN0X3N5c2ZzX2V4aXQoKTsKKwlkc3RfZXhwb3J0X2V4aXQoKTsKK30KKworbW9kdWxlX2luaXQoZHN0X3N5c19pbml0KTsKK21vZHVsZV9leGl0KGRzdF9zeXNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRGlzdHJpYnV0ZWQgc3RvcmFnZSIpOworTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhZTRlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZXhwb3J0LmMKQEAgLTAsMCArMSw2NTcgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisvKgorICogRXhwb3J0IGJpb3NldCBpcyB1c2VkIGZvciBzZXJ2ZXIgYmxvY2sgSU8gcmVxdWVzdHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmlvX3NldCAqZHN0X2Jpb19zZXQ7CisKK2ludCBfX2luaXQgZHN0X2V4cG9ydF9pbml0KHZvaWQpCit7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlkc3RfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoMzIsIHNpemVvZihzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7CisJaWYgKCFkc3RfYmlvX3NldCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgZHN0X2V4cG9ydF9leGl0KHZvaWQpCit7CisJYmlvc2V0X2ZyZWUoZHN0X2Jpb19zZXQpOworfQorCisvKgorICogV2hlbiBjbGllbnQgY29ubmVjdHMgYW5kIGF1dG9uZWdvdGlhdGVzIHdpdGggdGhlIHNlcnZlciBub2RlLAorICogaXRzIHBlcm1pc3Npb25zIGFyZSBjaGVja2VkIGluIGEgc2VjdXJpdHkgYXR0cmlidXRlcyBhbmQgc2VudAorICogYmFjay4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBkc3RfY2hlY2tfcGVybWlzc2lvbnMoc3RydWN0IGRzdF9zdGF0ZSAqbWFpbiwgc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gbWFpbi0+bm9kZTsKKwlzdHJ1Y3QgZHN0X3NlY3VyZSAqc2VudHJ5OworCXN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIgKnM7CisJc3RydWN0IHNhZGRyICpzYSA9ICZzdC0+Y3RsLmFkZHI7CisJdW5zaWduZWQgaW50IHBlcm0gPSAwOworCisJbXV0ZXhfbG9jaygmbi0+c2VjdXJpdHlfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZW50cnksICZuLT5zZWN1cml0eV9saXN0LCBzZWNfZW50cnkpIHsKKwkJcyA9ICZzZW50cnktPnNlYzsKKworCQlpZiAocy0+YWRkci5zYV9mYW1pbHkgIT0gc2EtPnNhX2ZhbWlseSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzLT5hZGRyLnNhX2RhdGFfbGVuICE9IHNhLT5zYV9kYXRhX2xlbikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRoaXMgJzInIGJlbG93IGlzIGEgcG9ydCBmaWVsZC4gVGhpcyBtYXkgYmUgdmVyeSB3cm9uZyB0byBkbworCQkgKiBpbiBhdGFsayBmb3IgZXhhbXBsZSB0aG91Z2guIElmIHRoZXJlIHdpbGwgYmUgYW55IG5lZWQgdG8gZXh0ZW50CisJCSAqIHByb3RvY29sIHRvIHNvbWV0aGluZyBlbHNlLCBJIGNhbiBjcmVhdGUgcGVyLWZhbWlseSBoZWxwZXJzIGFuZAorCQkgKiB1c2UgdGhlbSBpbnN0ZWFkIG9mIHRoaXMgbWVtY21wLgorCQkgKi8KKwkJaWYgKG1lbWNtcChzLT5hZGRyLnNhX2RhdGEgKyAyLCBzYS0+c2FfZGF0YSArIDIsCisJCQkJCXNhLT5zYV9kYXRhX2xlbiAtIDIpKQorCQkJY29udGludWU7CisKKwkJcGVybSA9IHMtPnBlcm1pc3Npb25zOworCX0KKwltdXRleF91bmxvY2soJm4tPnNlY3VyaXR5X2xvY2spOworCisJcmV0dXJuIHBlcm07Cit9CisKKy8qCisgKiBBY2NlcHQgbmV3IGNsaWVudDogYWxsb2NhdGUgYXBwcm9wcmlhdGUgbmV0d29yayBzdGF0ZSBhbmQgY2hlY2sgcGVybWlzc2lvbnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHN0X3N0YXRlICpkc3RfYWNjZXB0X2NsaWVudChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IDA7CisJdW5zaWduZWQgaW50IGVycl9tYXNrID0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7CisJdW5zaWduZWQgaW50IG1hc2sgPSBlcnJfbWFzayB8IFBPTExJTjsKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gTlVMTDsKKwlzdHJ1Y3QgZHN0X3N0YXRlICpuZXc7CisKKwl3aGlsZSAoIWVyciAmJiAhc29jaykgeworCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOworCisJCWlmICghKHJldmVudHMgJiBtYXNrKSkgeworCQkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJCWZvciAoOzspIHsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwKKwkJCQkJCSZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCisJCQkJCWJyZWFrOworCisJCQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKKworCQkJCWlmIChyZXZlbnRzICYgbWFzaykKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCWJyZWFrOworCisJCQkJLyoKKwkJCQkgKiBNYWdpYyBIWj8gUG9sbGluZyBjaGVjayBhYm92ZSBpcyBub3Qgc2FmZSBpbgorCQkJCSAqIGFsbCBjYXNlcyAobGlrZSBzb2NrZXQgcmVzZXQgaW4gQkggY29udGV4dCksCisJCQkJICogc28gaXQgaXMgc2ltcGxlciBqdXN0IHRvIHBvc3Rwb25lIGl0IHRvIHRoZQorCQkJCSAqIHByb2Nlc3MgY29udGV4dCBpbnN0ZWFkIG9mIGltcGxlbWVudGluZyBzcGVjaWFsCisJCQkJICogbG9ja2luZyB0aGVyZS4KKwkJCQkgKi8KKwkJCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKKwkJCX0KKwkJCWZpbmlzaF93YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0KTsKKwkJfQorCisJCWVyciA9IC1FQ09OTlJFU0VUOworCQlkc3Rfc3RhdGVfbG9jayhzdCk7CisKKwkJZHByaW50aygiJXM6IHN0OiAlcCwgcmV2ZW50czogJXggW2VycjogJWQsIGluOiAlZF0uXG4iLAorCQkJX19mdW5jX18sIHN0LCByZXZlbnRzLCByZXZlbnRzICYgZXJyX21hc2ssCisJCQlyZXZlbnRzICYgUE9MTElOKTsKKworCQlpZiAocmV2ZW50cyAmIGVycl9tYXNrKSB7CisJCQlkcHJpbnRrKCIlczogcmV2ZW50czogJXgsIHNvY2tldDogJXAsIGVycjogJWQuXG4iLAorCQkJCQlfX2Z1bmNfXywgcmV2ZW50cywgc3QtPnNvY2tldCwgZXJyKTsKKwkJCWVyciA9IC1FQ09OTlJFU0VUOworCQl9CisKKwkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKKwkJCWVyciA9IC1FTk9ERVY7CisKKwkJaWYgKHN0LT5zb2NrZXQgJiYgKHJldmVudHMgJiBQT0xMSU4pKQorCQkJZXJyID0ga2VybmVsX2FjY2VwdChzdC0+c29ja2V0LCAmc29jaywgMCk7CisKKwkJZHN0X3N0YXRlX3VubG9jayhzdCk7CisJfQorCisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwluZXcgPSBkc3Rfc3RhdGVfYWxsb2Moc3QtPm5vZGUpOworCWlmICghbmV3KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9yZWxlYXNlOworCX0KKwluZXctPnNvY2tldCA9IHNvY2s7CisKKwluZXctPmN0bC5hZGRyLnNhX2RhdGFfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7CisJZXJyID0ga2VybmVsX2dldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV3LT5jdGwuYWRkciwKKwkJCShpbnQgKikmbmV3LT5jdGwuYWRkci5zYV9kYXRhX2xlbik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCW5ldy0+cGVybWlzc2lvbnMgPSBkc3RfY2hlY2tfcGVybWlzc2lvbnMoc3QsIG5ldyk7CisJaWYgKG5ldy0+cGVybWlzc2lvbnMgPT0gMCkgeworCQllcnIgPSAtRVBFUk07CisJCWRzdF9kdW1wX2FkZHIoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPmN0bC5hZGRyLAorCQkJCSJDbGllbnQgaXMgbm90IGFsbG93ZWQgdG8gY29ubmVjdCIpOworCQlnb3RvIGVycl9vdXRfcHV0OworCX0KKworCWVyciA9IGRzdF9wb2xsX2luaXQobmV3KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJZHN0X2R1bXBfYWRkcihzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5ldy0+Y3RsLmFkZHIsCisJCQkiQ29ubmVjdGVkIGNsaWVudCIpOworCisJcmV0dXJuIG5ldzsKKworZXJyX291dF9wdXQ6CisJZHN0X3N0YXRlX3B1dChuZXcpOworZXJyX291dF9yZWxlYXNlOgorCXNvY2tfcmVsZWFzZShzb2NrKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCisvKgorICogRWFjaCBzZXJ2ZXIncyBibG9jayByZXF1ZXN0IHNvbWV0aW1lIGZpbmlzaGVzLgorICogVXN1YWxseSBpdCBoYXBwZW5zIGluIGhhcmQgaXJxIGNvbnRleHQgb2YgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xsZXIsCisgKiBzbyB0byBwbGF5IGdvb2Qgd2l0aCBhbGwgY2FzZXMgd2UganVzdCBxdWV1ZSBCSU8gaW50byB0aGUgcXVldWUKKyAqIGFuZCB3YWtlIHVwIHByb2Nlc3NpbmcgdGhyZWFkLCB3aGljaCBnZXRzIGNvbXBsZXRlZCByZXF1ZXN0IGFuZAorICogc2VuZCAoZW5jcnlwdGluZyBpZiBuZWVkZWQpIGl0IGJhY2sgdG8gdGhlIGNsaWVudCAoaWYgaXQgd2FzIGEgcmVhZAorICogcmVxdWVzdCksIG9yIHNlbmRzIGJhY2sgcmVwbHkgdGhhdCB3cml0aW5nIHN1Y2Nlc2Z1bGx5IGNvbXBsZXRlZC4KKyAqLworc3RhdGljIGludCBkc3RfZXhwb3J0X3Byb2Nlc3NfcmVxdWVzdF9xdWV1ZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnAgPSBOVUxMOworCXN0cnVjdCBiaW8gKmJpbzsKKwlpbnQgZXJyID0gMDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgeworCQkJcCA9IGxpc3RfZmlyc3RfZW50cnkoJnN0LT5yZXF1ZXN0X2xpc3QsCisJCQkJc3RydWN0IGRzdF9leHBvcnRfcHJpdiwgcmVxdWVzdF9lbnRyeSk7CisJCQlsaXN0X2RlbCgmcC0+cmVxdWVzdF9lbnRyeSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCisJCWlmICghcCkKKwkJCWJyZWFrOworCisJCWJpbyA9IHAtPmJpbzsKKworCQlpZiAoZHN0X25lZWRfY3J5cHRvKHN0LT5ub2RlKSAmJiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkpCisJCQllcnIgPSBkc3RfZXhwb3J0X2NyeXB0byhzdC0+bm9kZSwgYmlvKTsKKwkJZWxzZQorCQkJZXJyID0gZHN0X2V4cG9ydF9zZW5kX2JpbyhiaW8pOworCisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2xlYW51cCBleHBvcnQgc3RhdGUuCisgKiBJdCBoYXMgdG8gd2FpdCB1bnRpbCBhbGwgcmVxdWVzdHMgYXJlIGZpbmlzaGVkLAorICogYW5kIHRoZW4gZnJlZSB0aGVtIGFsbC4KKyAqLworc3RhdGljIHZvaWQgZHN0X3N0YXRlX2NsZWFudXBfZXhwb3J0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogVGhpcyBsb29wIHdhaXRzIGZvciBhbGwgcGVuZGluZyBiaW9zIHRvIGJlIGNvbXBsZXRlZCBhbmQgZnJlZWQuCisJICovCisJd2hpbGUgKGF0b21pY19yZWFkKCZzdC0+cmVmY250KSA+IDEpIHsKKwkJZHByaW50aygiJXM6IHN0OiAlcCwgcmVmY250OiAlZCwgbGlzdF9lbXB0eTogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBzdCwgYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpLAorCQkJCWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKTsKKwkJd2FpdF9ldmVudF90aW1lb3V0KHN0LT50aHJlYWRfd2FpdCwKKwkJCQkoYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID09IDEpIHx8CisJCQkJIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpLAorCQkJCUhaLzIpOworCisJCXdoaWxlICghbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpIHsKKwkJCXAgPSBOVUxMOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpIHsKKwkJCQlwID0gbGlzdF9maXJzdF9lbnRyeSgmc3QtPnJlcXVlc3RfbGlzdCwKKwkJCQkJc3RydWN0IGRzdF9leHBvcnRfcHJpdiwgcmVxdWVzdF9lbnRyeSk7CisJCQkJbGlzdF9kZWwoJnAtPnJlcXVlc3RfZW50cnkpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocCkKKwkJCQliaW9fcHV0KHAtPmJpbyk7CisKKwkJCWRwcmludGsoIiVzOiBzdDogJXAsIHJlZmNudDogJWQsIGxpc3RfZW1wdHk6ICVkLCBwOiAlcC5cbiIsCisJCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCksCisJCQkJbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCksIHApOworCQl9CisJfQorCisJZHN0X3N0YXRlX3B1dChzdCk7Cit9CisKKy8qCisgKiBDbGllbnQgYWNjZXB0aW5nIHRocmVhZC4KKyAqIE5vdCBvbmx5IGFjY2VwdHMgbmV3IGNvbm5lY3Rpb24sIGJ1dCBhbHNvIHNjaGVkdWxlcyByZWNlaXZpbmcgdGhyZWFkCisgKiBhbmQgcGVyZm9ybXMgcmVxdWVzdCBjb21wbGV0aW9uIGRlc2NyaWJlZCBhYm92ZS4KKyAqLworc3RhdGljIGludCBkc3RfYWNjZXB0KHZvaWQgKmluaXRfZGF0YSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICptYWluX3N0ID0gc2NoZWR1bGVfZGF0YTsKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBpbml0X2RhdGE7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3Q7CisJaW50IGVycjsKKworCXdoaWxlIChuLT50cmFuc19zY2FuX3RpbWVvdXQgJiYgIW1haW5fc3QtPm5lZWRfZXhpdCkgeworCQlkcHJpbnRrKCIlczogbWFpbl9zdDogJXAsIG46ICVwLlxuIiwgX19mdW5jX18sIG1haW5fc3QsIG4pOworCQlzdCA9IGRzdF9hY2NlcHRfY2xpZW50KG1haW5fc3QpOworCQlpZiAoSVNfRVJSKHN0KSkKKwkJCWNvbnRpbnVlOworCisJCWVyciA9IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdCk7CisJCWlmICghZXJyKSB7CisJCQl3aGlsZSAobi0+dHJhbnNfc2Nhbl90aW1lb3V0KSB7CisJCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3QtPnRocmVhZF93YWl0LAorCQkJCQkJIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpIHx8CisJCQkJCQkhbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8CisJCQkJCQlzdC0+bmVlZF9leGl0LAorCQkJCQlIWik7CisKKwkJCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQorCQkJCQlicmVhazsKKworCQkJCWlmIChsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkKKwkJCQkJY29udGludWU7CisKKwkJCQllcnIgPSBkc3RfZXhwb3J0X3Byb2Nlc3NfcmVxdWVzdF9xdWV1ZShzdCk7CisJCQkJaWYgKGVycikKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCXN0LT5uZWVkX2V4aXQgPSAxOworCQkJd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKKwkJfQorCisJCWRzdF9zdGF0ZV9jbGVhbnVwX2V4cG9ydChzdCk7CisJfQorCisJZHByaW50aygiJXM6IGZyZWVpbmcgbGlzdGVuaW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCk7CisKKwlkc3Rfc3RhdGVfbG9jayhtYWluX3N0KTsKKwlkc3RfcG9sbF9leGl0KG1haW5fc3QpOworCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShtYWluX3N0KTsKKwlkc3Rfc3RhdGVfdW5sb2NrKG1haW5fc3QpOworCWRzdF9zdGF0ZV9wdXQobWFpbl9zdCk7CisJZHByaW50aygiJXM6IGZyZWVkIGxpc3RlbmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIG1haW5fc3QpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkc3Rfc3RhcnRfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpZiAobGlzdF9lbXB0eSgmbi0+c2VjdXJpdHlfbGlzdCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJZb3UgYXJlIHRyeWluZyB0byBleHBvcnQgbm9kZSAnJXMnIHdpdGhvdXQgc2VjdXJpdHkgYXR0cmlidXRlcy5cbiIKKwkJCQkiTm8gY2xpZW50cyB3aWxsIGJlIGFsbG93ZWQgdG8gY29ubmVjdC4gRXhpdGluZy5cbiIsIG4tPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGRzdF9ub2RlX3RyYW5zX2luaXQobiwgc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgbGlzdGVuaW5nIHN0YXRlIGFuZCBzY2hlZHVsZSBhY2NlcHRpbmcgdGhyZWFkLgorICovCitpbnQgZHN0X25vZGVfaW5pdF9saXN0ZW5lZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUpCit7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3Q7CisJaW50IGVyciA9IC1FTk9NRU07CisJc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqY3RsID0gJmxlLT5jdGw7CisKKwltZW1jcHkoJm4tPmluZm8tPm5ldCwgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOworCisJc3QgPSBkc3Rfc3RhdGVfYWxsb2Mobik7CisJaWYgKElTX0VSUihzdCkpIHsKKwkJZXJyID0gUFRSX0VSUihzdCk7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKwltZW1jcHkoJnN0LT5jdGwsIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKTsKKworCWVyciA9IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJc3QtPnNvY2tldC0+c2stPnNrX3JldXNlID0gMTsKKworCWVyciA9IGtlcm5lbF9iaW5kKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY3RsLT5hZGRyLAorCQkJY3RsLT5hZGRyLnNhX2RhdGFfbGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfc29ja2V0X3JlbGVhc2U7CisKKwllcnIgPSBrZXJuZWxfbGlzdGVuKHN0LT5zb2NrZXQsIDEwMjQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9zb2NrZXRfcmVsZWFzZTsKKwluLT5zdGF0ZSA9IHN0OworCisJZXJyID0gZHN0X3BvbGxfaW5pdChzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3NvY2tldF9yZWxlYXNlOworCisJZHN0X3N0YXRlX2dldChzdCk7CisKKwllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLCBkc3RfdGhyZWFkX3NldHVwLAorCQkJZHN0X2FjY2VwdCwgc3QsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcG9sbF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcG9sbF9leGl0OgorCWRzdF9wb2xsX2V4aXQoc3QpOworZXJyX291dF9zb2NrZXRfcmVsZWFzZToKKwlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOworZXJyX291dF9wdXQ6CisJZHN0X3N0YXRlX3B1dChzdCk7CitlcnJfb3V0X2V4aXQ6CisJbi0+c3RhdGUgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBGcmVlIGJpbyBhbmQgcmVsYXRlZCBwcml2YXRlIGRhdGEuCisgKiBBbHNvIGRyb3AgYSByZWZlcmVuY2UgY291bnRlciBmb3IgYXBwcm9wcmlhdGUgc3RhdGUsCisgKiB3aGljaCB3YWl0cyB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIGJsb2NrIElPcyBpbi1mbGlnaHQuCisgKi8KK3N0YXRpYyB2b2lkIGRzdF9iaW9fZGVzdHJ1Y3RvcihzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnByaXYgPSBiaW8tPmJpX3ByaXZhdGU7CisJaW50IGk7CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7CisJCWlmICghYnYtPmJ2X3BhZ2UpCisJCQlicmVhazsKKworCQlfX2ZyZWVfcGFnZShidi0+YnZfcGFnZSk7CisJfQorCisJaWYgKHByaXYpCisJCWRzdF9zdGF0ZV9wdXQocHJpdi0+c3RhdGUpOworCWJpb19mcmVlKGJpbywgZHN0X2Jpb19zZXQpOworfQorCisvKgorICogQmxvY2sgSU8gY29tcGxldGlvbi4gUXVldWUgcmVxdWVzdCB0byBiZSBzZW50IGJhY2sgdG8KKyAqIHRoZSBjbGllbnQgKG9yIGp1c3QgY29uZmlybWF0aW9uKS4KKyAqLworc3RhdGljIHZvaWQgZHN0X2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQoreworCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnAgPSBiaW8tPmJpX3ByaXZhdGU7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBwLT5zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZwLT5yZXF1ZXN0X2VudHJ5LCAmc3QtPnJlcXVlc3RfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCisJd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKK30KKworLyoKKyAqIEFsbG9jYXRlIHJlYWQgcmVxdWVzdCBmb3IgdGhlIHNlcnZlci4KKyAqLworc3RhdGljIGludCBkc3RfZXhwb3J0X3JlYWRfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCB0b3RhbF9zaXplKQoreworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnI7CisKKwl3aGlsZSAodG90YWxfc2l6ZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFLCB0b3RhbF9zaXplKTsKKworCQllcnIgPSBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBzaXplLCAwKTsKKwkJZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgc2l6ZTogJXUsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCisJCQkJc2l6ZSwgZXJyKTsKKwkJaWYgKGVyciA8PSAwKQorCQkJZ290byBlcnJfb3V0X2ZyZWVfcGFnZTsKKworCQl0b3RhbF9zaXplIC09IHNpemU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV9wYWdlOgorCV9fZnJlZV9wYWdlKHBhZ2UpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSB3cml0ZSByZXF1ZXN0IGZvciB0aGUgc2VydmVyLgorICogU2hvdWxkIG5vdCBvbmx5IGdldCBwYWdlcywgYnV0IGFsc28gcmVhZCBkYXRhIGZyb20gdGhlIG5ldHdvcmsuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2V4cG9ydF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LAorCQlzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCB0b3RhbF9zaXplKQoreworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKmRhdGE7CisJaW50IGVycjsKKworCXdoaWxlICh0b3RhbF9zaXplKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIXBhZ2UpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQlkYXRhID0ga21hcChwYWdlKTsKKwkJaWYgKCFkYXRhKQorCQkJZ290byBlcnJfb3V0X2ZyZWVfcGFnZTsKKworCQlzaXplID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUsIHRvdGFsX3NpemUpOworCisJCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGRhdGEsIHNpemUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3VubWFwX3BhZ2U7CisKKwkJZXJyID0gYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgc2l6ZSwgMCk7CisJCWlmIChlcnIgPD0gMCkKKwkJCWdvdG8gZXJyX291dF91bm1hcF9wYWdlOworCisJCWt1bm1hcChwYWdlKTsKKworCQl0b3RhbF9zaXplIC09IHNpemU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfdW5tYXBfcGFnZToKKwlrdW5tYXAocGFnZSk7CitlcnJfb3V0X2ZyZWVfcGFnZToKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogR3Jvb3Z5LCB3ZSd2ZSBnb3R0ZW4gYW4gSU8gcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuCisgKiBBbGxvY2F0ZSBCSU8gZnJvbSB0aGUgYmlvc2V0LCBwcml2YXRlIGRhdGEgZnJvbSB0aGUgbWVtcG9vbAorICogYW5kIGxvdHMgb2YgcGFnZXMgZm9yIElPLgorICovCitpbnQgZHN0X3Byb2Nlc3NfaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwcml2OworCWludCBlcnIgPSAtRU5PTUVNOworCisJaWYgKHVubGlrZWx5KCFuLT5iZGV2KSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwliaW8gPSBiaW9fYWxsb2NfYmlvc2V0KEdGUF9LRVJORUwsCisJCQlQQUdFX0FMSUdOKGNtZC0+c2l6ZSkgPj4gUEFHRV9TSElGVCwKKwkJCWRzdF9iaW9fc2V0KTsKKwlpZiAoIWJpbykKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlwcml2ID0gKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKikoKCh2b2lkICopYmlvKSAtIHNpemVvZiAoc3RydWN0IGRzdF9leHBvcnRfcHJpdikpOworCisJcHJpdi0+c3RhdGUgPSBkc3Rfc3RhdGVfZ2V0KHN0KTsKKwlwcml2LT5iaW8gPSBiaW87CisKKwliaW8tPmJpX3ByaXZhdGUgPSBwcml2OworCWJpby0+YmlfZW5kX2lvID0gZHN0X2Jpb19lbmRfaW87CisJYmlvLT5iaV9kZXN0cnVjdG9yID0gZHN0X2Jpb19kZXN0cnVjdG9yOworCWJpby0+YmlfYmRldiA9IG4tPmJkZXY7CisKKwkvKgorCSAqIFNlcnZlciBzaWRlIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0d28gbG93IGJpdHM6CisJICogdXB0b2RhdGUgKHNldCBieSBpdHNlbGYgYWN0dWFsbHkpIGFuZCBydyBibG9jaworCSAqLworCWJpby0+YmlfZmxhZ3MgfD0gY21kLT5mbGFncyAmIDM7CisKKwliaW8tPmJpX3J3ID0gY21kLT5ydzsKKwliaW8tPmJpX3NpemUgPSAwOworCWJpby0+Ymlfc2VjdG9yID0gY21kLT5zZWN0b3I7CisKKwlkc3RfYmlvX3RvX2NtZChiaW8sICZwcml2LT5jbWQsIERTVF9JT19SRVNQT05TRSwgY21kLT5pZCk7CisKKwlwcml2LT5jbWQuZmxhZ3MgPSAwOworCXByaXYtPmNtZC5zaXplID0gY21kLT5zaXplOworCisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7CisJCWVyciA9IGRzdF9yZWN2X2NkYXRhKHN0LCBwcml2LT5jbWQuaGFzaCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCQllcnIgPSBkc3RfZXhwb3J0X3dyaXRlX3JlcXVlc3Qoc3QsIGJpbywgY21kLT5zaXplKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCisJCWlmIChkc3RfbmVlZF9jcnlwdG8obikpCisJCQlyZXR1cm4gZHN0X2V4cG9ydF9jcnlwdG8obiwgYmlvKTsKKwl9IGVsc2UgeworCQllcnIgPSBkc3RfZXhwb3J0X3JlYWRfcmVxdWVzdChiaW8sIGNtZC0+c2l6ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwl9CisKKwlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCBydzogJWx1LCBkaXI6ICVsdSwgZmxhZ3M6ICVseCwgcGh5czogJWQuXG4iLAorCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKKwkJCWJpby0+YmlfcncsIGJpb19kYXRhX2RpcihiaW8pLAorCQkJYmlvLT5iaV9mbGFncywgYmlvLT5iaV9waHlzX3NlZ21lbnRzKTsKKworCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCWJpb19wdXQoYmlvKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogT2ssIGJsb2NrIElPIGlzIHJlYWR5LCBsZXQncyBzZW5kIGl0IGJhY2sgdG8gdGhlIGNsaWVudC4uLgorICovCitpbnQgZHN0X2V4cG9ydF9zZW5kX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IGJpby0+YmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHAtPnN0YXRlOworCXN0cnVjdCBkc3RfY21kICpjbWQgPSAmcC0+Y21kOworCWludCBlcnI7CisKKwlkcHJpbnRrKCIlczogaWQ6ICVsbHUsIGJpbzogJWxsdS8ldSwgY3NpemU6ICV1LCBmbGFnczogJWx1LCBydzogJWx1LlxuIiwKKwkJCV9fZnVuY19fLCBjbWQtPmlkLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCisJCQljbWQtPmNzaXplLCBiaW8tPmJpX2ZsYWdzLCBiaW8tPmJpX3J3KTsKKworCWRzdF9jb252ZXJ0X2NtZChjbWQpOworCisJZHN0X3N0YXRlX2xvY2soc3QpOworCWlmICghc3QtPnNvY2tldCkgeworCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJZ290byBlcnJfb3V0X3VubG9jazsKKwl9CisKKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKKwkJLyogLi4uIG9yIGp1c3QgY29uZmlybWF0aW9uIHRoYXQgd3JpdGluZyBoYXMgY29tcGxldGVkLiAqLworCQljbWQtPnNpemUgPSBjbWQtPmNzaXplID0gMDsKKwkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLAorCQkJCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3VubG9jazsKKwl9IGVsc2UgeworCQllcnIgPSBkc3Rfc2VuZF9iaW8oc3QsIGNtZCwgYmlvKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF91bmxvY2s7CisJfQorCisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfdW5sb2NrOgorCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCisJYmlvX3B1dChiaW8pOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3N0YXRlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3N0YXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1N2U1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYwpAQCAtMCwwICsxLDgzOSBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8bGludXgvZHN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisvKgorICogUG9sbGluZyBtYWNoaW5lcnkuCisgKi8KKworc3RydWN0IGRzdF9wb2xsX2hlbHBlcgoreworCXBvbGxfdGFibGUgCQlwdDsKKwlzdHJ1Y3QgZHN0X3N0YXRlCSpzdDsKK307CisKK3N0YXRpYyBpbnQgZHN0X3F1ZXVlX3dha2Uod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KQoreworCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBkc3Rfc3RhdGUsIHdhaXQpOworCisJd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZHN0X3F1ZXVlX2Z1bmMoc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCwKKwkJCQkgcG9sbF90YWJsZSAqcHQpCit7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHQsIHN0cnVjdCBkc3RfcG9sbF9oZWxwZXIsIHB0KS0+c3Q7CisKKwlzdC0+d2hlYWQgPSB3aGVhZDsKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZzdC0+d2FpdCwgZHN0X3F1ZXVlX3dha2UpOworCWFkZF93YWl0X3F1ZXVlKHdoZWFkLCAmc3QtPndhaXQpOworfQorCit2b2lkIGRzdF9wb2xsX2V4aXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJaWYgKHN0LT53aGVhZCkgeworCQlyZW1vdmVfd2FpdF9xdWV1ZShzdC0+d2hlYWQsICZzdC0+d2FpdCk7CisJCXN0LT53aGVhZCA9IE5VTEw7CisJfQorfQorCitpbnQgZHN0X3BvbGxfaW5pdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X3BvbGxfaGVscGVyIHBoOworCisJcGguc3QgPSBzdDsKKwlpbml0X3BvbGxfZnVuY3B0cigmcGgucHQsICZkc3RfcXVldWVfZnVuYyk7CisKKwlzdC0+c29ja2V0LT5vcHMtPnBvbGwoTlVMTCwgc3QtPnNvY2tldCwgJnBoLnB0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlYWRlciByZWNlaXZpbmcgZnVuY3Rpb24gLSBtYXkgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgZHN0X2RhdGFfcmVjdl9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBibG9jaykKK3sKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3Y7CisJaW50IGVycjsKKworCWlvdi5pb3ZfYmFzZSA9IGRhdGE7CisJaW92Lmlvdl9sZW4gPSBzaXplOworCisJbXNnLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopJmlvdjsKKwltc2cubXNnX2lvdmxlbiA9IDE7CisJbXNnLm1zZ19uYW1lID0gTlVMTDsKKwltc2cubXNnX25hbWVsZW4gPSAwOworCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2cubXNnX2ZsYWdzID0gKGJsb2NrKT9NU0dfV0FJVEFMTDpNU0dfRE9OVFdBSVQ7CisKKwllcnIgPSBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBpb3YuaW92X2xlbiwKKwkJCW1zZy5tc2dfZmxhZ3MpOworCWlmIChlcnIgIT0gc2l6ZSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIZWFkZXIgc2VuZGluZyBmdW5jdGlvbiAtIG1heSBibG9jay4KKyAqLworaW50IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgbW9yZSkKK3sKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3Y7CisJaW50IGVycjsKKworCWlvdi5pb3ZfYmFzZSA9IGRhdGE7CisJaW92Lmlvdl9sZW4gPSBzaXplOworCisJbXNnLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopJmlvdjsKKwltc2cubXNnX2lvdmxlbiA9IDE7CisJbXNnLm1zZ19uYW1lID0gTlVMTDsKKwltc2cubXNnX25hbWVsZW4gPSAwOworCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2cubXNnX2ZsYWdzID0gTVNHX1dBSVRBTEwgfCAobW9yZSk/TVNHX01PUkU6MDsKKworCWVyciA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuKTsKKwlpZiAoZXJyICE9IHNpemUpIHsKKwkJZHByaW50aygiJXM6IHNpemU6ICV1LCBtb3JlOiAlZCwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHNpemUsIG1vcmUsIGVycik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEJsb2NrIGF1dG9jb25maWd1cmF0aW9uOiByZXF1ZXN0IHNpemUgb2YgdGhlIHN0b3JhZ2UgYW5kIHBlcm1pc3Npb25zLgorICovCitzdGF0aWMgaW50IGRzdF9yZXF1ZXN0X3JlbW90ZV9jb25maWcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7CisJaW50IGVyciA9IC1FSU5WQUw7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOworCisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSk7CisJY21kLT5jbWQgPSBEU1RfQ0ZHOworCisJZHN0X2NvbnZlcnRfY21kKGNtZCk7CisKKwllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gZHN0X2RhdGFfcmVjdl9oZWFkZXIoc3QtPnNvY2tldCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWRzdF9jb252ZXJ0X2NtZChjbWQpOworCisJaWYgKGNtZC0+Y21kICE9IERTVF9DRkcpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZHByaW50aygiJXM6IGNoZWNraW5nIHJlc3VsdDogY21kOiAlZCwgc2l6ZSByZXBvcnRlZDogJWxsdS5cbiIsCisJCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2VjdG9yKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG4tPnNpemUgIT0gMCkKKwkJbi0+c2l6ZSA9IG1pbl90KGxvZmZfdCwgbi0+c2l6ZSwgY21kLT5zZWN0b3IpOworCWVsc2UKKwkJbi0+c2l6ZSA9IGNtZC0+c2VjdG9yOworCisJbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7CisJc3QtPnBlcm1pc3Npb25zID0gY21kLT5ydzsKKworb3V0OgorCWRwcmludGsoIiVzOiBuOiAlcCwgZXJyOiAlZCwgc2l6ZTogJWxsdSwgcGVybWlzc2lvbjogJXguXG4iLAorCQkJX19mdW5jX18sIG4sIGVyciwgbi0+c2l6ZSwgc3QtPnBlcm1pc3Npb25zKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU29ja2V0IG1hY2hpbmVyeS4KKyAqLworCisjZGVmaW5lIERTVF9ERUZBVUxUX1RJTUVPCTIwMDAwCisKK2ludCBkc3Rfc3RhdGVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqY3RsID0gJnN0LT5jdGw7CisKKwllcnIgPSBzb2NrX2NyZWF0ZShjdGwtPmFkZHIuc2FfZmFtaWx5LCBjdGwtPnR5cGUsIGN0bC0+cHJvdG8sICZzb2NrKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNvY2stPnNrLT5za19zbmR0aW1lbyA9IHNvY2stPnNrLT5za19yY3Z0aW1lbyA9CisJCW1zZWNzX3RvX2ppZmZpZXMoRFNUX0RFRkFVTFRfVElNRU8pOworCXNvY2stPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PSU87CisKKwlzdC0+c29ja2V0ID0gc3QtPnJlYWRfc29ja2V0ID0gc29jazsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJZHByaW50aygiJXM6IHN0OiAlcCwgc29ja2V0OiAlcCwgbjogJXAuXG4iLAorCQkJX19mdW5jX18sIHN0LCBzdC0+c29ja2V0LCBzdC0+bm9kZSk7CisJaWYgKHN0LT5zb2NrZXQpIHsKKwkJc29ja19yZWxlYXNlKHN0LT5zb2NrZXQpOworCQlzdC0+c29ja2V0ID0gTlVMTDsKKwkJc3QtPnJlYWRfc29ja2V0ID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgZHN0X2R1bXBfYWRkcihzdHJ1Y3Qgc29ja2V0ICpzaywgc3RydWN0IHNvY2thZGRyICpzYSwgY2hhciAqc3RyKQoreworCWlmIChzay0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVCkgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXUuJXUuJXUuJXU6JWQuXG4iLAorCQkJc3RyLCBOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCX0gZWxzZSBpZiAoc2stPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJCXByaW50ayhLRVJOX0lORk8gIiVzICVwaTY6JWQiLAorCQkJc3RyLCAmc2luLT5zaW42X2FkZHIsIG50b2hzKHNpbi0+c2luNl9wb3J0KSk7CisJfQorfQorCit2b2lkIGRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlpZiAoc3QtPnNvY2tldCkgeworCQlkc3RfcG9sbF9leGl0KHN0KTsKKwkJc3QtPnNvY2tldC0+b3BzLT5zaHV0ZG93bihzdC0+c29ja2V0LCAyKTsKKworCQlkc3RfZHVtcF9hZGRyKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3QtPmN0bC5hZGRyLAorCQkJCSJEaXNjb25uZWN0ZWQgcGVlciIpOworCQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOworCX0KK30KKworc3RhdGljIGludCBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmc3QtPmN0bDsKKworCWVyciA9IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWVyciA9IGtlcm5lbF9jb25uZWN0KHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3QtPmN0bC5hZGRyLAorCQkJc3QtPmN0bC5hZGRyLnNhX2RhdGFfbGVuLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKworCWVyciA9IGRzdF9wb2xsX2luaXQoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9yZWxlYXNlOworCisJZHN0X2R1bXBfYWRkcihzdC0+c29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJmN0bC0+YWRkciwKKwkJCSJDb25uZWN0ZWQgdG8gcGVlciIpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcmVsZWFzZToKKwlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTdGF0ZSByZXNldCBpcyB1c2VkIHRvIHJlY29ubmVjdCB0byB0aGUgcmVtb3RlIHBlZXIuCisgKiBNYXkgZmFpbCwgYnV0IHdobyBjYXJlcywgd2Ugd2lsbCB0cnkgYWdhaW4gbGF0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZSBkc3Rfc3RhdGVfcmVzZXRfbm9sb2NrKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7CisJZHN0X3N0YXRlX2luaXRfY29ubmVjdGVkKHN0KTsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIGRzdF9zdGF0ZV9yZXNldChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlkc3Rfc3RhdGVfbG9jayhzdCk7CisJZHN0X3N0YXRlX3Jlc2V0X25vbG9jayhzdCk7CisJZHN0X3N0YXRlX3VubG9jayhzdCk7Cit9CisKKy8qCisgKiBCYXNpYyBuZXR3b3JrIHNlbmRpbmcvcmVjZWl2aW5nIGZ1bmN0aW9ucy4KKyAqIEJsb2NrZWQgbW9kZSBpcyB1c2VkLgorICovCitzdGF0aWMgaW50IGRzdF9kYXRhX3JlY3ZfcmF3KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpidWYsIHU2NCBzaXplKQoreworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdjsKKwlpbnQgZXJyOworCisJQlVHX09OKCFzaXplKTsKKworCWlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKwlpb3YuaW92X2xlbiA9IHNpemU7CisKKwltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQ7CisKKwllcnIgPSBrZXJuZWxfcmVjdm1zZyhzdC0+c29ja2V0LCAmbXNnLCAmaW92LCAxLCBpb3YuaW92X2xlbiwKKwkJCW1zZy5tc2dfZmxhZ3MpOworCWlmIChlcnIgPD0gMCkgeworCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIHJlY3YgZGF0YTogc2l6ZTogJWxsdSwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHNpemUsIGVycik7CisJCWlmIChlcnIgPT0gMCkKKwkJCWVyciA9IC1FQ09OTlJFU0VUOworCisJCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFBpbmcgY29tbWFuZCB0byBlYXJseSBkZXRlY3QgZmFpbGVkIG5vZGVzLgorICovCitzdGF0aWMgaW50IGRzdF9zZW5kX3Bpbmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOworCWludCBlcnIgPSAtRUNPTk5SRVNFVDsKKworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwlpZiAoc3QtPnNvY2tldCkgeworCQltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKKworCQljbWQtPmNtZCA9IF9fY3B1X3RvX2JlMzIoRFNUX1BJTkcpOworCisJCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7CisJfQorCWRwcmludGsoIiVzOiBzdDogJXAsIHNvY2tldDogJXAsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgc3QsIHN0LT5zb2NrZXQsIGVycik7CisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVjZWl2aW5nIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgZWl0aGVyIHJldHVybiBlcnJvciBvciByZWFkCisgKiB3aG9sZSBibG9jayByZXF1ZXN0LiBJZiB0aGVyZSB3YXMgbm8gdHJhZmZpYyBmb3IgYSBvbmUgc2Vjb25kLAorICogc2VuZCBhIHBpbmcsIHNpbmNlIHJlbW90ZSBub2RlIG1heSBkaWUuCisgKi8KK2ludCBkc3RfZGF0YV9yZWN2KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IDA7CisJdW5zaWduZWQgaW50IGVycl9tYXNrID0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7CisJdW5zaWduZWQgaW50IG1hc2sgPSBlcnJfbWFzayB8IFBPTExJTjsKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKKwlpbnQgZXJyID0gMDsKKworCXdoaWxlIChzaXplICYmICFlcnIpIHsKKwkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKKworCQlpZiAoIShyZXZlbnRzICYgbWFzaykpIHsKKwkJCURFRklORV9XQUlUKHdhaXQpOworCisJCQlmb3IgKDs7KSB7CisJCQkJcHJlcGFyZV90b193YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0LAorCQkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQorCQkJCQlicmVhazsKKworCQkJCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7CisKKwkJCQlpZiAocmV2ZW50cyAmIG1hc2spCisJCQkJCWJyZWFrOworCisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCQlicmVhazsKKworCQkJCWlmICghc2NoZWR1bGVfdGltZW91dChIWikpIHsKKwkJCQkJZXJyID0gZHN0X3NlbmRfcGluZyhzdCk7CisJCQkJCWlmIChlcnIpCisJCQkJCQlyZXR1cm4gZXJyOworCQkJCX0KKworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZmluaXNoX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQpOworCQl9CisKKwkJZXJyID0gLUVDT05OUkVTRVQ7CisJCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKworCQlpZiAoCQlzdC0+c29ja2V0ICYmCisJCQkJKHN0LT5yZWFkX3NvY2tldCA9PSBzdC0+c29ja2V0KSAmJgorCQkJCShyZXZlbnRzICYgUE9MTElOKSkgeworCQkJZXJyID0gZHN0X2RhdGFfcmVjdl9yYXcoc3QsIGRhdGEsIHNpemUpOworCQkJaWYgKGVyciA+IDApIHsKKwkJCQlkYXRhICs9IGVycjsKKwkJCQlzaXplIC09IGVycjsKKwkJCQllcnIgPSAwOworCQkJfQorCQl9CisKKwkJaWYgKHJldmVudHMgJiBlcnJfbWFzayB8fCAhc3QtPnNvY2tldCkgeworCQkJZHByaW50aygiJXM6IHJldmVudHM6ICV4LCBzb2NrZXQ6ICVwLCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCByZXZlbnRzLCBzdC0+c29ja2V0LCBzaXplLCBlcnIpOworCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJCX0KKworCQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCkKKwkJCWVyciA9IC1FTk9ERVY7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNlbmQgYmxvY2sgYXV0b2NvbmYgcmVwbHkuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3Byb2Nlc3NfY2ZnKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOworCXN0cnVjdCBkc3RfY21kICpjbWQgPSBzdC0+ZGF0YTsKKwlpbnQgZXJyOworCisJY21kLT5zZWN0b3IgPSBuLT5zaXplOworCWNtZC0+cncgPSBzdC0+cGVybWlzc2lvbnM7CisKKwlkc3RfY29udmVydF9jbWQoY21kKTsKKworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOworCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlY2VpdmUgYmxvY2sgSU8gZnJvbSB0aGUgbmV0d29yay4KKyAqLworc3RhdGljIGludCBkc3RfcmVjdl9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHRvdGFsX3NpemUpCit7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCWludCBpLCBlcnI7CisJdm9pZCAqZGF0YTsKKwl1bnNpZ25lZCBpbnQgc3o7CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7CisJCXN6ID0gbWluKHRvdGFsX3NpemUsIGJ2LT5idl9sZW4pOworCisJCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIHRvdGFsOiAldSwgbGVuOiAldSwgc3o6ICV1LCBvZmY6ICV1LlxuIiwKKwkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIHRvdGFsX3NpemUsCisJCQlidi0+YnZfbGVuLCBzeiwgYnYtPmJ2X29mZnNldCk7CisKKwkJZGF0YSA9IGttYXAoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgZGF0YSwgc3opOworCQlrdW5tYXAoYnYtPmJ2X3BhZ2UpOworCisJCWJ2LT5idl9sZW4gPSBzejsKKworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQl0b3RhbF9zaXplIC09IHN6OworCQlpZiAodG90YWxfc2l6ZSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBPdXIgYmxvY2sgSU8gaGFzIGp1c3QgY29tcGxldGVkIGFuZCBhcnJpdmVkOiBnZXQgaXQuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3Byb2Nlc3NfaW9fcmVzcG9uc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOworCXN0cnVjdCBkc3RfdHJhbnMgKnQ7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGJpbyAqYmlvOworCisJbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7CisJdCA9IGRzdF90cmFuc19zZWFyY2gobiwgY21kLT5pZCk7CisJbXV0ZXhfdW5sb2NrKCZuLT50cmFuc19sb2NrKTsKKworCWlmICghdCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwliaW8gPSB0LT5iaW87CisKKwlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCBjbWRfc2l6ZTogJXUsIGNzaXplOiAldSwgZGlyOiAlbHUuXG4iLAorCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLCBjbWQtPnNpemUsCisJCWNtZC0+Y3NpemUsIGJpb19kYXRhX2RpcihiaW8pKTsKKworCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSB7CisJCWlmIChiaW8tPmJpX3NpemUgIT0gY21kLT5zaXplIC0gY21kLT5jc2l6ZSkKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWlmIChkc3RfbmVlZF9jcnlwdG8obikpIHsKKwkJCWVyciA9IGRzdF9yZWN2X2NkYXRhKHN0LCB0LT5jbWQuaGFzaCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyX291dF9leGl0OworCQl9CisKKwkJZXJyID0gZHN0X3JlY3ZfYmlvKHN0LCB0LT5iaW8sIGJpby0+Ymlfc2l6ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQlpZiAoZHN0X25lZWRfY3J5cHRvKG4pKQorCQkJcmV0dXJuIGRzdF90cmFuc19jcnlwdG8odCk7CisJfSBlbHNlIHsKKwkJZXJyID0gLUVCQURNU0c7CisJCWlmIChjbWQtPnNpemUgfHwgY21kLT5jc2l6ZSkKKwkJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWRzdF90cmFuc19yZW1vdmUodCk7CisJZHN0X3RyYW5zX3B1dCh0KTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlY2VpdmUgY3J5cHRvIGRhdGEuCisgKi8KK2ludCBkc3RfcmVjdl9jZGF0YShzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqY2RhdGEpCit7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOworCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqYyA9ICZuLT5jcnlwdG87CisJaW50IGVycjsKKworCWlmIChjbWQtPmNzaXplICE9IGMtPmNyeXB0b19hdHRhY2hlZF9zaXplKSB7CisJCWRwcmludGsoIiVzOiBjbWQ6IGNtZDogJXUsIHNlY3RvcjogJWxsdSwgc2l6ZTogJXUsICIKKwkJCQkiY3NpemU6ICV1ICE9IGRpZ2VzdCBzaXplICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2VjdG9yLCBjbWQtPnNpemUsCisJCQkJY21kLT5jc2l6ZSwgYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBjZGF0YSwgY21kLT5jc2l6ZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwljbWQtPnNpemUgLT0gY21kLT5jc2l6ZTsKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWNlaXZlIHRoZSBjb21tYW5kIGFuZCBzdGFydCBpdHMgcHJvY2Vzc2luZy4KKyAqLworc3RhdGljIGludCBkc3RfcmVjdl9wcm9jZXNzaW5nKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWludCBlcnIgPSAtRUlOVFI7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOworCisJLyoKKwkgKiBJZiBzb2NrZXQgd2lsbCBiZSByZXNldCBhZnRlciB0aGlzIHN0YXRlbWVudCwgdGhlbgorCSAqIGRzdF9kYXRhX3JlY3YoKSB3aWxsIGp1c3QgZmFpbCBhbmQgbG9vcCB3aWxsCisJICogc3RhcnQgYWdhaW4sIHNvIGl0IGNhbiBiZSBkb25lIHdpdGhvdXQgYW55IGxvY2tzLgorCSAqCisJICogc3QtPnJlYWRfc29ja2V0IGlzIG5lZWRlZCB0byBwcmV2ZW50cyBzdGF0ZSBtYWNoaW5lCisJICogYnJlYWtpbmcgYmV0d2VlbiB0aGlzIGRhdGEgcmVhZGluZyBhbmQgc3Vic2VxdWVudCBvbmUKKwkgKiBpbiBwcm90b2NvbCBzcGVjaWZpYyBmdW5jdGlvbnMgZHVyaW5nIGNvbm5lY3Rpb24gcmVzZXQuCisJICogSW4gY2FzZSBvZiByZXNldCB3ZSBoYXZlIHRvIHJlYWQgbmV4dCBjb21tYW5kIGFuZCBkbworCSAqIG5vdCBleHBlY3QgZGF0YSBmb3Igb2xkIGNvbW1hbmQgdG8gbWFnaWNhbGx5IGFwcGVhciBpbgorCSAqIG5ldyBjb25uZWN0aW9uLgorCSAqLworCXN0LT5yZWFkX3NvY2tldCA9IHN0LT5zb2NrZXQ7CisJZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9leGl0OworCisJZHN0X2NvbnZlcnRfY21kKGNtZCk7CisKKwlkcHJpbnRrKCIlczogY21kOiAldSwgc2l6ZTogJXUsIGNzaXplOiAldSwgaWQ6ICVsbHUsICIKKwkJCSJzZWN0b3I6ICVsbHUsIGZsYWdzOiAlbGx4LCBydzogJWxseC5cbiIsCisJCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+c2l6ZSwKKwkJCWNtZC0+Y3NpemUsIGNtZC0+aWQsIGNtZC0+c2VjdG9yLAorCQkJY21kLT5mbGFncywgY21kLT5ydyk7CisKKwkvKgorCSAqIFRoaXMgc2hvdWxkIGNhdGNoIHByb3RvY29sIGJyZWFrYWdlIGFuZCByYW5kb20gZ2FyYmFnZSBpbnN0ZWFkIG9mIGNvbW1hbmRzLgorCSAqLworCWlmICh1bmxpa2VseShjbWQtPmNzaXplID4gc3QtPnNpemUgLSBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKSkgeworCQllcnIgPSAtRUJBRE1TRzsKKwkJZ290byBvdXRfZXhpdDsKKwl9CisKKwllcnIgPSAtRVBST1RPOworCXN3aXRjaCAoY21kLT5jbWQpIHsKKwkJY2FzZSBEU1RfSU9fUkVTUE9OU0U6CisJCQllcnIgPSBkc3RfcHJvY2Vzc19pb19yZXNwb25zZShzdCk7CisJCQlicmVhazsKKwkJY2FzZSBEU1RfSU86CisJCQllcnIgPSBkc3RfcHJvY2Vzc19pbyhzdCk7CisJCQlicmVhazsKKwkJY2FzZSBEU1RfQ0ZHOgorCQkJZXJyID0gZHN0X3Byb2Nlc3NfY2ZnKHN0KTsKKwkJCWJyZWFrOworCQljYXNlIERTVF9QSU5HOgorCQkJZXJyID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCitvdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVjZWl2aW5nIHRocmVhZC4gRm9yIHRoZSBjbGllbnQgbm9kZSB3ZSBzaG91bGQgdHJ5IHRvIHJlY29ubmVjdCwKKyAqIGZvciBhY2NlcHRlZCBjbGllbnQgd2UganVzdCBkcm9wIHRoZSBzdGF0ZSBhbmQgZXhwZWN0IGl0IHRvIHJlY29ubmVjdC4KKyAqLworc3RhdGljIGludCBkc3RfcmVjdih2b2lkICppbml0X2RhdGEsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCit7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBzY2hlZHVsZV9kYXRhOworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGluaXRfZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCWRwcmludGsoIiVzOiBzdGFydCBzdDogJXAsIG46ICVwLCBzY2FuOiAlbHUsIG5lZWRfZXhpdDogJWQuXG4iLAorCQkJX19mdW5jX18sIHN0LCBuLCBuLT50cmFuc19zY2FuX3RpbWVvdXQsIHN0LT5uZWVkX2V4aXQpOworCisJd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCAmJiAhc3QtPm5lZWRfZXhpdCkgeworCQllcnIgPSBkc3RfcmVjdl9wcm9jZXNzaW5nKHN0KTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWlmICghc3QtPmN0bC50eXBlKQorCQkJCWJyZWFrOworCisJCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQorCQkJCWJyZWFrOworCisJCQlkc3Rfc3RhdGVfcmVzZXQoc3QpOworCQkJbXNsZWVwKDEwMDApOworCQl9CisJfQorCisJc3QtPm5lZWRfZXhpdCA9IDE7CisJd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKKworCWRwcmludGsoIiVzOiBmcmVlaW5nIHJlY2VpdmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKKwlkc3Rfc3RhdGVfbG9jayhzdCk7CisJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKwlkc3Rfc3RhdGVfcHV0KHN0KTsKKworCWRwcmludGsoIiVzOiBmcmVlZCByZWNlaXZpbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogTmV0d29yayBzdGF0ZSBkaWVzIGhlcmUgYW5kIGJvcm5zIGNvdXBsZSBvZiBsaW5lcyBiZWxvdy4KKyAqIFRoaXMgb2JqZWN0IGlzIHRoZSBtYWluIG5ldHdvcmsgc3RhdGUgcHJvY2Vzc2luZyBlbmdpbmU6CisgKiBzZW5kaW5nLCByZWNlaXZpbmcsIHJlY29ubmVjdGlvbnMsIGFsbCBuZXR3b3JrIHJlbGF0ZWQKKyAqIHRhc2tzIGFyZSBoYW5kbGVkIG9uIGJlaGFsZiBvZiB0aGUgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIGRzdF9zdGF0ZV9mcmVlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWRwcmludGsoIiVzOiBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOworCWlmIChzdC0+Y2xlYW51cCkKKwkJc3QtPmNsZWFudXAoc3QpOworCWtmcmVlKHN0LT5kYXRhKTsKKwlrZnJlZShzdCk7Cit9CisKK3N0cnVjdCBkc3Rfc3RhdGUgKmRzdF9zdGF0ZV9hbGxvYyhzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3Q7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXN0LT5ub2RlID0gbjsKKwlzdC0+bmVlZF9leGl0ID0gMDsKKworCXN0LT5zaXplID0gUEFHRV9TSVpFOworCXN0LT5kYXRhID0ga21hbGxvYyhzdC0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdC0+ZGF0YSkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlzcGluX2xvY2tfaW5pdCgmc3QtPnJlcXVlc3RfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnN0LT5yZXF1ZXN0X2xpc3QpOworCisJbXV0ZXhfaW5pdCgmc3QtPnN0YXRlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0LT50aHJlYWRfd2FpdCk7CisKKwkvKgorCSAqIE9uZSBmb3IgcHJvY2Vzc2luZyB0aHJlYWQsIGFub3RoZXIgb25lIGZvciBub2RlIGl0c2VsZi4KKwkgKi8KKwlhdG9taWNfc2V0KCZzdC0+cmVmY250LCAyKTsKKworCWRwcmludGsoIiVzOiBzdDogJXAsIG46ICVwLlxuIiwgX19mdW5jX18sIHN0LCBzdC0+bm9kZSk7CisKKwlyZXR1cm4gc3Q7CisKK2Vycl9vdXRfZnJlZToKKwlrZnJlZShzdCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworaW50IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlyZXR1cm4gdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShzdC0+bm9kZS0+cG9vbCwgZHN0X3RocmVhZF9zZXR1cCwKKwkJCWRzdF9yZWN2LCBzdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIHN0LT5ub2RlKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgY2xpZW50J3MgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIHBlZXI6IGFsbG9jYXRlIHN0YXRlLAorICogY29ubmVjdCBhbmQgcGVyZm9ybSBibG9jayBJTyBhdXRvY29uZmlndXJhdGlvbi4KKyAqLworaW50IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcikKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXN0ID0gZHN0X3N0YXRlX2FsbG9jKG4pOworCWlmIChJU19FUlIoc3QpKSB7CisJCWVyciA9IFBUUl9FUlIoc3QpOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisJbWVtY3B5KCZzdC0+Y3RsLCByLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOworCisJZXJyID0gZHN0X3N0YXRlX2luaXRfY29ubmVjdGVkKHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9kYXRhOworCisJZXJyID0gZHN0X3JlcXVlc3RfcmVtb3RlX2NvbmZpZyhzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXRfY29ubmVjdGVkOworCW4tPnN0YXRlID0gc3Q7CisKKwllcnIgPSBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0X2Nvbm5lY3RlZDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXRfY29ubmVjdGVkOgorCWRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdCk7CitlcnJfb3V0X2ZyZWVfZGF0YToKKwlkc3Rfc3RhdGVfZnJlZShzdCk7CitlcnJfb3V0X2V4aXQ6CisJbi0+c3RhdGUgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgZHN0X3N0YXRlX3B1dChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBzdCwgYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc3QtPnJlZmNudCkpCisJCWRzdF9zdGF0ZV9mcmVlKHN0KTsKK30KKworLyoKKyAqIFNlbmQgYmxvY2sgSU8gdG8gdGhlIG5ldHdvcmsgb25lIGJ5IG9uZSB1c2luZyB6ZXJvLWNvcHkgLT5zZW5kcGFnZSgpLgorICovCitpbnQgZHN0X3NlbmRfYmlvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCBzdHJ1Y3QgZHN0X2NtZCAqY21kLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqYyA9ICZzdC0+bm9kZS0+Y3J5cHRvOworCWludCBlcnIsIGkgPSAwOworCWludCBmbGFncyA9IE1TR19XQUlUQUxMOworCisJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLAorCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpICsgYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUsIGJpby0+YmlfdmNudCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7CisJCWlmIChpIDwgYmlvLT5iaV92Y250IC0gMSkKKwkJCWZsYWdzIHw9IE1TR19NT1JFOworCisJCWVyciA9IGtlcm5lbF9zZW5kcGFnZShzdC0+c29ja2V0LCBidi0+YnZfcGFnZSwgYnYtPmJ2X29mZnNldCwKKwkJCQlidi0+YnZfbGVuLCBmbGFncyk7CisJCWlmIChlcnIgPD0gMCkKKwkJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJZHByaW50aygiJXM6ICVkLyVkLCBmbGFnczogJXgsIGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sIGksIGJpby0+YmlfdmNudCwgZmxhZ3MsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNlbmQgdHJhbnNhY3Rpb24gdG8gdGhlIHJlbW90ZSBwZWVyLgorICovCitpbnQgZHN0X3RyYW5zX3NlbmQoc3RydWN0IGRzdF90cmFucyAqdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gdC0+bi0+c3RhdGU7CisJc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOworCisJZHN0X2NvbnZlcnRfY21kKCZ0LT5jbWQpOworCisJZHN0X3N0YXRlX2xvY2soc3QpOworCWlmICghc3QtPnNvY2tldCkgeworCQllcnIgPSBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3VubG9jazsKKwl9CisKKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKKwkJZXJyID0gZHN0X3NlbmRfYmlvKHN0LCAmdC0+Y21kLCB0LT5iaW8pOworCX0gZWxzZSB7CisJCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsICZ0LT5jbWQsCisJCQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7CisJfQorCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9yZXNldDsKKworCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCXJldHVybiAwOworCitlcnJfb3V0X3Jlc2V0OgorCWRzdF9zdGF0ZV9yZXNldF9ub2xvY2soc3QpOworZXJyX291dF91bmxvY2s6CisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC90aHJlYWRfcG9vbC5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC90aHJlYWRfcG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZWQ0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisvKgorICogVGhyZWFkIHBvb2wgYWJzdHJhY3Rpb24gYWxsb3dzIHRvIHNjaGVkdWxlIGEgd29yayB0byBiZSBwZXJmb3JtZWQKKyAqIG9uIGJlaGFsZiBvZiBrZXJuZWwgdGhyZWFkLiBPbmUgZG9lcyBub3Qgb3BlcmF0ZSB3aXRoIHRocmVhZHMgaXRzZWxmLAorICogaW5zdGVhZCB1c2VyIHByb3ZpZGVzIHNldHVwIGFuZCBjbGVhbnVwIGNhbGxiYWNrcyBmb3IgdGhyZWFkIHBvb2wgaXRzZWxmLAorICogYW5kIGFjdGlvbiBhbmQgY2xlYW51cCBjYWxsYmFja3MgZm9yIGVhY2ggc3VibWl0dGVkIHdvcmsuCisgKgorICogRWFjaCB3b3JrZXIgaGFzIHByaXZhdGUgZGF0YSBpbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIGFuZCBkYXRhLAorICogcHJvdmlkZWQgYnkgdXNlciBhdCBzY2hlZHVsaW5nIHRpbWUuCisgKgorICogV2hlbiBhY3Rpb24gaXMgYmVpbmcgcGVyZm9ybWVkLCB0aHJlYWQgY2FuIG5vdCBiZSB1c2VkIGJ5IG90aGVyIHVzZXJzLAorICogaW5zdGVhZCB0aGV5IHdpbGwgc2xlZXAgdW50aWwgdGhlcmUgaXMgZnJlZSB0aHJlYWQgdG8gcGljayB0aGVpciB3b3JrLgorICovCitzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyCit7CisJc3RydWN0IGxpc3RfaGVhZAl3b3JrZXJfZW50cnk7CisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZDsKKworCXN0cnVjdCB0aHJlYWRfcG9vbAkqcG9vbDsKKworCWludAkJCWVycm9yOworCWludAkJCWhhc19kYXRhOworCWludAkJCW5lZWRfZXhpdDsKKwl1bnNpZ25lZCBpbnQJCWlkOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKworCXZvaWQJCQkqcHJpdmF0ZTsKKwl2b2lkCQkJKnNjaGVkdWxlX2RhdGE7CisKKwlpbnQJCQkoKiBhY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKnNjaGVkdWxlX2RhdGEpOworCXZvaWQJCQkoKiBjbGVhbnVwKSh2b2lkICpwcml2YXRlKTsKK307CisKK3N0YXRpYyB2b2lkIHRocmVhZF9wb29sX2V4aXRfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncpCit7CisJa3RocmVhZF9zdG9wKHctPnRocmVhZCk7CisKKwl3LT5jbGVhbnVwKHctPnByaXZhdGUpOworCWtmcmVlKHcpOworfQorCisvKgorICogQ2FsbGVkIHRvIG1hcmsgdGhyZWFkIGFzIHJlYWR5IGFuZCBhbGxvdyB1c2VycyB0byBzY2hlZHVsZSBuZXcgd29yay4KKyAqLworc3RhdGljIHZvaWQgdGhyZWFkX3Bvb2xfd29ya2VyX21ha2VfcmVhZHkoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdykKK3sKKwlzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAgPSB3LT5wb29sOworCisJbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOworCisJaWYgKCF3LT5uZWVkX2V4aXQpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPnJlYWR5X2xpc3QpOworCQl3LT5oYXNfZGF0YSA9IDA7CisJCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOworCisJCXdha2VfdXAoJnAtPndhaXQpOworCX0gZWxzZSB7CisJCXAtPnRocmVhZF9udW0tLTsKKwkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7CisJCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOworCisJCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOworCX0KK30KKworLyoKKyAqIFRocmVhZCBhY3Rpb24gbG9vcDogd2FpdHMgdW50aWwgdGhlcmUgaXMgbmV3IHdvcmsuCisgKi8KK3N0YXRpYyBpbnQgdGhyZWFkX3Bvb2xfd29ya2VyX2Z1bmModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3ID0gZGF0YTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3LT53YWl0LAorCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHctPmhhc19kYXRhKTsKKworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisKKwkJaWYgKCF3LT5oYXNfZGF0YSkKKwkJCWNvbnRpbnVlOworCisJCXctPmFjdGlvbih3LT5wcml2YXRlLCB3LT5zY2hlZHVsZV9kYXRhKTsKKwkJdGhyZWFkX3Bvb2xfd29ya2VyX21ha2VfcmVhZHkodyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZW1vdmUgc2luZ2xlIHdvcmtlciB3aXRob3V0IHNwZWNpZnlpbmcgd2hpY2ggb25lLgorICovCit2b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncgPSBOVUxMOworCisJd2hpbGUgKCF3ICYmIHAtPnRocmVhZF9udW0pIHsKKwkJd2FpdF9ldmVudChwLT53YWl0LCAhbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCkgfHwgIXAtPnRocmVhZF9udW0pOworCisJCWRwcmludGsoIiVzOiBsb2NraW5nIGxpc3RfZW1wdHk6ICVkLCB0aHJlYWRfbnVtOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGxpc3RfZW1wdHkoJnAtPnJlYWR5X2xpc3QpLCBwLT50aHJlYWRfbnVtKTsKKworCQltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCkpIHsKKwkJCXcgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwLT5yZWFkeV9saXN0LAorCQkJCQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyLAorCQkJCQl3b3JrZXJfZW50cnkpOworCisJCQlkcHJpbnRrKCIlczogZGVsZXRpbmcgdzogJXAsIHRocmVhZF9udW06ICVkLCBsaXN0OiAlcCBbJXAuJXBdLlxuIiwKKwkJCQkJX19mdW5jX18sIHcsIHAtPnRocmVhZF9udW0sICZwLT5yZWFkeV9saXN0LAorCQkJCQlwLT5yZWFkeV9saXN0LnByZXYsIHAtPnJlYWR5X2xpc3QubmV4dCk7CisKKwkJCXAtPnRocmVhZF9udW0tLTsKKwkJCWxpc3RfZGVsKCZ3LT53b3JrZXJfZW50cnkpOworCQl9CisJCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOworCX0KKworCWlmICh3KQorCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKKwlkcHJpbnRrKCIlczogZGVsZXRlZCB3OiAlcCwgdGhyZWFkX251bTogJWQuXG4iLAorCQkJX19mdW5jX18sIHcsIHAtPnRocmVhZF9udW0pOworfQorCisvKgorICogUmVtb3ZlIGEgd29ya2VyIHdpdGggZ2l2ZW4gSUQuCisgKi8KK3ZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcl9pZChzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3OworCWludCBmb3VuZCA9IDA7CisKKwltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmcC0+cmVhZHlfbGlzdCwgd29ya2VyX2VudHJ5KSB7CisJCWlmICh3LT5pZCA9PSBpZCkgeworCQkJZm91bmQgPSAxOworCQkJcC0+dGhyZWFkX251bS0tOworCQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmcC0+YWN0aXZlX2xpc3QsIHdvcmtlcl9lbnRyeSkgeworCQkJaWYgKHctPmlkID09IGlkKSB7CisJCQkJdy0+bmVlZF9leGl0ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKKworCWlmIChmb3VuZCkKKwkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7Cit9CisKKy8qCisgKiBBZGQgbmV3IHdvcmtlciB0aHJlYWQgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLgorICogSWYgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZmFpbHMsIHJldHVybiBlcnJvci4KKyAqLworaW50IHRocmVhZF9wb29sX2FkZF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwLAorCQljaGFyICpuYW1lLAorCQl1bnNpZ25lZCBpbnQgaWQsCisJCXZvaWQgKigqIGluaXQpKHZvaWQgKnByaXZhdGUpLAorCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKnByaXZhdGUpLAorCQl2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKnc7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwl3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciksIEdGUF9LRVJORUwpOworCWlmICghdykKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwl3LT5wb29sID0gcDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3LT53YWl0KTsKKwl3LT5jbGVhbnVwID0gY2xlYW51cDsKKwl3LT5pZCA9IGlkOworCisJdy0+dGhyZWFkID0ga3RocmVhZF9ydW4odGhyZWFkX3Bvb2xfd29ya2VyX2Z1bmMsIHcsICIlcyIsIG5hbWUpOworCWlmIChJU19FUlIody0+dGhyZWFkKSkgeworCQllcnIgPSBQVFJfRVJSKHctPnRocmVhZCk7CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCXctPnByaXZhdGUgPSBpbml0KHByaXZhdGUpOworCWlmIChJU19FUlIody0+cHJpdmF0ZSkpIHsKKwkJZXJyID0gUFRSX0VSUih3LT5wcml2YXRlKTsKKwkJZ290byBlcnJfb3V0X3N0b3BfdGhyZWFkOworCX0KKworCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5yZWFkeV9saXN0KTsKKwlwLT50aHJlYWRfbnVtKys7CisJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9zdG9wX3RocmVhZDoKKwlrdGhyZWFkX3N0b3Aody0+dGhyZWFkKTsKK2Vycl9vdXRfZnJlZToKKwlrZnJlZSh3KTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogRGVzdHJveSB0aGUgd2hvbGUgcG9vbC4KKyAqLwordm9pZCB0aHJlYWRfcG9vbF9kZXN0cm95KHN0cnVjdCB0aHJlYWRfcG9vbCAqcCkKK3sKKwl3aGlsZSAocC0+dGhyZWFkX251bSkgeworCQlkcHJpbnRrKCIlczogbnVtOiAlZC5cbiIsIF9fZnVuY19fLCBwLT50aHJlYWRfbnVtKTsKKwkJdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcihwKTsKKwl9CisKKwlrZnJlZShwKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHBvb2wgd2l0aCBnaXZlbiBudW1iZXIgb2YgdGhyZWFkcy4KKyAqIFRoZXkgd2lsbCBoYXZlIHNlcXVlbnRpYWwgSURzIHN0YXJ0ZWQgZnJvbSB6ZXJvLgorICovCitzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnRocmVhZF9wb29sX2NyZWF0ZShpbnQgbnVtLCBjaGFyICpuYW1lLAorCQl2b2lkICooKiBpbml0KSh2b2lkICpwcml2YXRlKSwKKwkJdm9pZCAoKiBjbGVhbnVwKSh2b2lkICpwcml2YXRlKSwKKwkJdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3LCAqdG1wOworCXN0cnVjdCB0aHJlYWRfcG9vbCAqcDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlpbnQgaTsKKworCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhyZWFkX3Bvb2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApCisJCWdvdG8gZXJyX291dF9leGl0OworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcC0+d2FpdCk7CisJbXV0ZXhfaW5pdCgmcC0+dGhyZWFkX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZwLT5yZWFkeV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcC0+YWN0aXZlX2xpc3QpOworCXAtPnRocmVhZF9udW0gPSAwOworCisJZm9yIChpPTA7IGk8bnVtOyArK2kpIHsKKwkJZXJyID0gdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihwLCBuYW1lLCBpLCBpbml0LAorCQkJCWNsZWFudXAsIHByaXZhdGUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2ZyZWVfYWxsOworCX0KKworCXJldHVybiBwOworCitlcnJfb3V0X2ZyZWVfYWxsOgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCB0bXAsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKKwkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7CisJCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOworCX0KKwlrZnJlZShwKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCisvKgorICogU2NoZWR1bGUgZXhlY3V0aW9uIG9mIHRoZSBhY3Rpb24gb24gYSBnaXZlbiB0aHJlYWQsCisgKiBwcm92aWRlZCBJRCBwb2ludGVyIGhhcyB0byBtYXRjaCBwcmV2aW91c2x5IHN0b3JlZAorICogcHJpdmF0ZSBkYXRhLgorICovCitpbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCisJCWludCAoKiBzZXR1cCkodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCisJCWludCAoKiBhY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAorCQl2b2lkICpkYXRhLCBsb25nIHRpbWVvdXQsIHZvaWQgKmlkKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncsICp0bXAsICp3b3JrZXIgPSBOVUxMOworCWludCBlcnIgPSAwOworCisJd2hpbGUgKCF3b3JrZXIgJiYgIWVycikgeworCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocC0+d2FpdCwKKwkJCQkhbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCksCisJCQkJdGltZW91dCk7CisKKwkJaWYgKCF0aW1lb3V0KSB7CisJCQllcnIgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKworCQl3b3JrZXIgPSBOVUxMOworCQltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCB0bXAsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKKwkJCWlmIChpZCAmJiBpZCAhPSB3LT5wcml2YXRlKQorCQkJCWNvbnRpbnVlOworCisJCQl3b3JrZXIgPSB3OworCisJCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+YWN0aXZlX2xpc3QpOworCisJCQllcnIgPSBzZXR1cCh3LT5wcml2YXRlLCBkYXRhKTsKKwkJCWlmICghZXJyKSB7CisJCQkJdy0+c2NoZWR1bGVfZGF0YSA9IGRhdGE7CisJCQkJdy0+YWN0aW9uID0gYWN0aW9uOworCQkJCXctPmhhc19kYXRhID0gMTsKKwkJCQl3YWtlX3VwKCZ3LT53YWl0KTsKKwkJCX0gZWxzZSB7CisJCQkJbGlzdF9tb3ZlX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPnJlYWR5X2xpc3QpOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU2NoZWR1bGUgZXhlY3V0aW9uIG9uIGFyYml0cmFyeSB0aHJlYWQgZnJvbSB0aGUgcG9vbC4KKyAqLworaW50IHRocmVhZF9wb29sX3NjaGVkdWxlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKKwkJaW50ICgqIHNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKKwkJaW50ICgqIGFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCisJCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCkKK3sKKwlyZXR1cm4gdGhyZWFkX3Bvb2xfc2NoZWR1bGVfcHJpdmF0ZShwLCBzZXR1cCwKKwkJCWFjdGlvbiwgZGF0YSwgdGltZW91dCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RyYW5zLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3RyYW5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3ZDM3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYwpAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisKKy8qCisgKiBUcmFuc2FjdGlvbiBtZW1vcnkgcG9vbCBzaXplLgorICovCitzdGF0aWMgaW50IGRzdF9tZW1wb29sX251bSA9IDMyOworbW9kdWxlX3BhcmFtKGRzdF9tZW1wb29sX251bSwgaW50LCAwNjQ0KTsKKworLyoKKyAqIFRyYW5zYWN0aW9uIHRyZWUgbWFuYWdlbWVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZHN0X3RyYW5zX2NtcChkc3RfZ2VuX3QgZ2VuLCBkc3RfZ2VuX3QgbmV3KQoreworCWlmIChnZW4gPCBuZXcpCisJCXJldHVybiAxOworCWlmIChnZW4gPiBuZXcpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRzdF90cmFucyAqZHN0X3RyYW5zX3NlYXJjaChzdHJ1Y3QgZHN0X25vZGUgKm5vZGUsIGRzdF9nZW5fdCBnZW4pCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmbm9kZS0+dHJhbnNfcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJvb3QtPnJiX25vZGU7CisJc3RydWN0IGRzdF90cmFucyAqdCwgKnJldCA9IE5VTEw7CisJaW50IGNtcDsKKworCXdoaWxlIChuKSB7CisJCXQgPSByYl9lbnRyeShuLCBzdHJ1Y3QgZHN0X3RyYW5zLCB0cmFuc19lbnRyeSk7CisKKwkJY21wID0gZHN0X3RyYW5zX2NtcCh0LT5nZW4sIGdlbik7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJcmV0ID0gdDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZHByaW50aygiJXM6ICVzIHRyYW5zYWN0aW9uOiBpZDogJWxsdS5cbiIsIF9fZnVuY19fLAorCQkJKHJldCk/ImZvdW5kIjoibm90IGZvdW5kIiwgZ2VuKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHN0X3RyYW5zX2luc2VydChzdHJ1Y3QgZHN0X3RyYW5zICpuZXcpCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmbmV3LT5uLT50cmFuc19yb290OworCXN0cnVjdCByYl9ub2RlICoqbiA9ICZyb290LT5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgZHN0X3RyYW5zICpyZXQgPSBOVUxMLCAqdDsKKwlpbnQgY21wOworCisJd2hpbGUgKCpuKSB7CisJCXBhcmVudCA9ICpuOworCisJCXQgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKKworCQljbXAgPSBkc3RfdHJhbnNfY21wKHQtPmdlbiwgbmV3LT5nZW4pOworCQlpZiAoY21wIDwgMCkKKwkJCW4gPSAmcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCXJldCA9IHQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCW5ldy0+c2VuZF90aW1lID0gamlmZmllczsKKwlpZiAocmV0KSB7CisJCXByaW50aygiJXM6IGV4aXN0OiBvbGQ6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCBzZW5kX3RpbWU6ICVsdSwgIgorCQkJCSJuZXc6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCBzZW5kX3RpbWU6ICVsdS5cbiIsCisJCQlfX2Z1bmNfXywKKwkJCXJldC0+Z2VuLCAodTY0KXJldC0+YmlvLT5iaV9zZWN0b3IsCisJCQlyZXQtPmJpby0+Ymlfc2l6ZSwgcmV0LT5zZW5kX3RpbWUsCisJCQluZXctPmdlbiwgKHU2NCluZXctPmJpby0+Ymlfc2VjdG9yLAorCQkJbmV3LT5iaW8tPmJpX3NpemUsIG5ldy0+c2VuZF90aW1lKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmJfbGlua19ub2RlKCZuZXctPnRyYW5zX2VudHJ5LCBwYXJlbnQsIG4pOworCXJiX2luc2VydF9jb2xvcigmbmV3LT50cmFuc19lbnRyeSwgcm9vdCk7CisKKwlkcHJpbnRrKCIlczogaW5zZXJ0ZWQ6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCBzZW5kX3RpbWU6ICVsdS5cbiIsCisJCV9fZnVuY19fLCBuZXctPmdlbiwgKHU2NCluZXctPmJpby0+Ymlfc2VjdG9yLAorCQluZXctPmJpby0+Ymlfc2l6ZSwgbmV3LT5zZW5kX3RpbWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayhzdHJ1Y3QgZHN0X3RyYW5zICp0KQoreworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHQtPm47CisKKwlpZiAodC0+dHJhbnNfZW50cnkucmJfcGFyZW50X2NvbG9yKSB7CisJCXJiX2VyYXNlKCZ0LT50cmFuc19lbnRyeSwgJm4tPnRyYW5zX3Jvb3QpOworCQl0LT50cmFuc19lbnRyeS5yYl9wYXJlbnRfY29sb3IgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGRzdF90cmFuc19yZW1vdmUoc3RydWN0IGRzdF90cmFucyAqdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHQtPm47CisKKwltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKKwlyZXQgPSBkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKKwltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFdoZW4gdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIGFuZCB0aGVyZSBhcmUgbm8gbW9yZSB1c2VycywKKyAqIHdlIGNvbXBsZXRlIGFwcHJpYXRlIGJsb2NrIElPIHJlcXVlc3Qgd2l0aCBnaXZlbiBlcnJvciBzdGF0dXMuCisgKi8KK3ZvaWQgZHN0X3RyYW5zX3B1dChzdHJ1Y3QgZHN0X3RyYW5zICp0KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0LT5yZWZjbnQpKSB7CisJCXN0cnVjdCBiaW8gKmJpbyA9IHQtPmJpbzsKKworCQlkcHJpbnRrKCIlczogY29tcGxldGVkIHQ6ICVwLCBnZW46ICVsbHUsIGJpbzogJXAuXG4iLAorCQkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIGJpbyk7CisKKwkJYmlvX2VuZGlvKGJpbywgdC0+ZXJyb3IpOworCQliaW9fcHV0KGJpbyk7CisKKwkJZHN0X25vZGVfcHV0KHQtPm4pOworCQltZW1wb29sX2ZyZWUodCwgdC0+bi0+dHJhbnNfcG9vbCk7CisJfQorfQorCisvKgorICogUHJvY2VzcyBnaXZlbiBibG9jayBJTyByZXF1ZXN0OiBhbGxvY2F0ZSB0cmFuc2FjdGlvbiwgaW5zZXJ0IGl0IGludG8gdGhlIHRyZWUKKyAqIGFuZCBzZW5kL3NjaGVkdWxlIGNyeXB0byBwcm9jZXNzaW5nLgorICovCitpbnQgZHN0X3Byb2Nlc3NfYmlvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKQoreworCXN0cnVjdCBkc3RfdHJhbnMgKnQ7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwl0ID0gbWVtcG9vbF9hbGxvYyhuLT50cmFuc19wb29sLCBHRlBfTk9GUyk7CisJaWYgKCF0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXQtPm4gPSBkc3Rfbm9kZV9nZXQobik7CisJdC0+YmlvID0gYmlvOworCXQtPmVycm9yID0gMDsKKwl0LT5yZXRyaWVzID0gMDsKKwlhdG9taWNfc2V0KCZ0LT5yZWZjbnQsIDEpOworCXQtPmdlbiA9IGF0b21pY19sb25nX2luY19yZXR1cm4oJm4tPmdlbik7CisKKwl0LT5lbmMgPSBiaW9fZGF0YV9kaXIoYmlvKTsKKwlkc3RfYmlvX3RvX2NtZChiaW8sICZ0LT5jbWQsIERTVF9JTywgdC0+Z2VuKTsKKworCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOworCWVyciA9IGRzdF90cmFuc19pbnNlcnQodCk7CisJbXV0ZXhfdW5sb2NrKCZuLT50cmFuc19sb2NrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCWRwcmludGsoIiVzOiBnZW46ICVsbHUsIGJpbzogJWxsdS8ldSwgZGlyL2VuYzogJWQsIG5lZWRfY3J5cHRvOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgdC0+Z2VuLCAodTY0KWJpby0+Ymlfc2VjdG9yLAorCQkJYmlvLT5iaV9zaXplLCB0LT5lbmMsIGRzdF9uZWVkX2NyeXB0byhuKSk7CisKKwlpZiAoZHN0X25lZWRfY3J5cHRvKG4pICYmIHQtPmVuYykKKwkJZHN0X3RyYW5zX2NyeXB0byh0KTsKKwllbHNlCisJCWRzdF90cmFuc19zZW5kKHQpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlkc3Rfbm9kZV9wdXQobik7CisJbWVtcG9vbF9mcmVlKHQsIG4tPnRyYW5zX3Bvb2wpOworZXJyX291dF9leGl0OgorCWJpb19lbmRpbyhiaW8sIGVycik7CisJYmlvX3B1dChiaW8pOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTY2FuIGZvciB0aW1lb3V0L3N0YWxlIHRyYW5zYWN0aW9ucy4KKyAqIEVhY2ggdHJhbnNhY3Rpb24gaXMgYmVpbmcgcmVzZW50IG11bHRpcGxlIHRpbWVzIGJlZm9yZSBlcnJvciBjb21wbGV0aW9uLgorICovCitzdGF0aWMgdm9pZCBkc3RfdHJhbnNfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkc3Rfbm9kZSwgdHJhbnNfd29yay53b3JrKTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKKwlzdHJ1Y3QgZHN0X3RyYW5zICp0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG4tPnRyYW5zX3NjYW5fdGltZW91dDsKKwlpbnQgbnVtID0gMTAgKiBuLT50cmFuc19tYXhfcmV0cmllczsKKworCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOworCisJZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJm4tPnRyYW5zX3Jvb3QpOyByYl9ub2RlOyApIHsKKwkJdCA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKKworCQlpZiAodGltZW91dCAmJiB0aW1lX2FmdGVyKHQtPnNlbmRfdGltZSArIHRpbWVvdXQsIGppZmZpZXMpCisJCQkJJiYgdC0+cmV0cmllcyA9PSAwKQorCQkJYnJlYWs7CisjaWYgMAorCQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJWxsdSwgbjogJXMsIHJldHJpZXM6ICV1LCBtYXg6ICV1LlxuIiwKKwkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIG4tPm5hbWUsCisJCQl0LT5yZXRyaWVzLCBuLT50cmFuc19tYXhfcmV0cmllcyk7CisjZW5kaWYKKwkJaWYgKC0tbnVtID09IDApCisJCQlicmVhazsKKworCQlkc3RfdHJhbnNfZ2V0KHQpOworCisJCXJiX25vZGUgPSByYl9uZXh0KHJiX25vZGUpOworCisJCWlmICh0aW1lb3V0ICYmICgrK3QtPnJldHJpZXMgPCBuLT50cmFuc19tYXhfcmV0cmllcykpIHsKKwkJCWRzdF90cmFuc19zZW5kKHQpOworCQl9IGVsc2UgeworCQkJdC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCQkJZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2sodCk7CisJCQlkc3RfdHJhbnNfcHV0KHQpOworCQl9CisKKwkJZHN0X3RyYW5zX3B1dCh0KTsKKwl9CisKKwltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOworCisJLyoKKwkgKiBJZiBubyB0aW1lb3V0IHNwZWNpZmllZCB0aGVuIHN5c3RlbSBpcyBpbiB0aGUgbWlkZGxlIG9mIGV4aXRpbmcgcHJvY2VzcywKKwkgKiBzbyBubyBuZWVkIHRvIHJlc2NoZWR1bGUgc2Nhbm5pbmcgcHJvY2VzcyBhZ2Fpbi4KKwkgKi8KKwlpZiAodGltZW91dCkgeworCQlpZiAoIW51bSkKKwkJCXRpbWVvdXQgPSBIWjsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZuLT50cmFuc193b3JrLCB0aW1lb3V0KTsKKwl9Cit9CisKKy8qCisgKiBGbHVzaCBhbGwgdHJhbnNhY3Rpb25zIGFuZCBtYXJrIHRoZW0gYXMgdGltZWQgb3V0LgorICogRGVzdHJveSB0cmFuc2FjdGlvbiBwb29scy4KKyAqLwordm9pZCBkc3Rfbm9kZV90cmFuc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgZHN0X3RyYW5zICp0OworCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOworCisJaWYgKCFuLT50cmFuc19jYWNoZSkKKwkJcmV0dXJuOworCisJZHByaW50aygiJXM6IG46ICVwLCBjYW5jZWxsaW5nIHRoZSB3b3JrLlxuIiwgX19mdW5jX18sIG4pOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbi0+dHJhbnNfd29yayk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlkcHJpbnRrKCIlczogbjogJXAsIHdvcmsgaGFzIGJlZW4gY2FuY2VsbGVkLlxuIiwgX19mdW5jX18sIG4pOworCisJZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJm4tPnRyYW5zX3Jvb3QpOyByYl9ub2RlOyApIHsKKwkJdCA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKKworCQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJWxsdSwgbjogJXMuXG4iLAorCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgbi0+bmFtZSk7CisKKwkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7CisKKwkJdC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCQlkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKKwkJZHN0X3RyYW5zX3B1dCh0KTsKKwl9CisKKwltZW1wb29sX2Rlc3Ryb3kobi0+dHJhbnNfcG9vbCk7CisJa21lbV9jYWNoZV9kZXN0cm95KG4tPnRyYW5zX2NhY2hlKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdHJhbnNhY3Rpb24gc3RvcmFnZSBmb3IgZ2l2ZW4gbm9kZS4KKyAqIFRyYW5zYWN0aW9uIHN0b3JlcyBub3Qgb25seSBjb250cm9sIGluZm9ybWF0aW9uLAorICogYnV0IGFsc28gbmV0d29yayBjb21tYW5kIGFuZCBjcnlwdG8gZGF0YSAoaWYgbmVlZGVkKQorICogdG8gcmVkdWNlIG51bWJlciBvZiBhbGxvY2F0aW9ucy4gVGh1cyB0cmFuc2FjdGlvbiBzaXplCisgKiBkaWZmZXJzIGZyb20gbm9kZSB0byBub2RlLgorICovCitpbnQgZHN0X25vZGVfdHJhbnNfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHVuc2lnbmVkIGludCBzaXplKQoreworCS8qCisJICogV2UgbmVlZCB0aGlzLCBzaW5jZSBub2RlIHdpdGggZ2l2ZW4gbmFtZSBjYW4gYmUgZHJvcHBlZCBmcm9tIHRoZQorCSAqIGhhc2ggdGFibGUsIGJ1dCBiZSBzdGlsbCBhbGl2ZSwgc28gc3Vic2VxdWVudCBjcmVhdGlvbiBvZiB0aGUgbm9kZQorCSAqIHdpdGggdGhlIHNhbWUgbmFtZSBtYXkgY29sbGlkZSB3aXRoIGV4aXN0aW5nIGNhY2hlIG5hbWUuCisJICovCisKKwlzbnByaW50ZihuLT5jYWNoZV9uYW1lLCBzaXplb2Yobi0+Y2FjaGVfbmFtZSksICIlcy0lcCIsIG4tPm5hbWUsIG4pOworCisJbi0+dHJhbnNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShuLT5jYWNoZV9uYW1lLAorCQkJc2l6ZSArIG4tPmNyeXB0by5jcnlwdG9fYXR0YWNoZWRfc2l6ZSwKKwkJCTAsIDAsIE5VTEwpOworCWlmICghbi0+dHJhbnNfY2FjaGUpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJbi0+dHJhbnNfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChkc3RfbWVtcG9vbF9udW0sIG4tPnRyYW5zX2NhY2hlKTsKKwlpZiAoIW4tPnRyYW5zX3Bvb2wpCisJCWdvdG8gZXJyX291dF9jYWNoZV9kZXN0cm95OworCisJbXV0ZXhfaW5pdCgmbi0+dHJhbnNfbG9jayk7CisJbi0+dHJhbnNfcm9vdCA9IFJCX1JPT1Q7CisKKwlJTklUX0RFTEFZRURfV09SSygmbi0+dHJhbnNfd29yaywgZHN0X3RyYW5zX3NjYW4pOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbi0+dHJhbnNfd29yaywgbi0+dHJhbnNfc2Nhbl90aW1lb3V0KTsKKworCWRwcmludGsoIiVzOiBuOiAlcCwgc2l6ZTogJXUsIGNyeXB0bzogJXUuXG4iLAorCQlfX2Z1bmNfXywgbiwgc2l6ZSwgbi0+Y3J5cHRvLmNyeXB0b19hdHRhY2hlZF9zaXplKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2NhY2hlX2Rlc3Ryb3k6CisJa21lbV9jYWNoZV9kZXN0cm95KG4tPnRyYW5zX2NhY2hlKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gLUVOT01FTTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2JpdF9vcGVyYXRpb25zLmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9iaXRfb3BlcmF0aW9ucy5oCmluZGV4IGNlY2RjZjMuLjRjNGNjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2JpdF9vcGVyYXRpb25zLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaApAQCAtMjEsOCArMjEsNiBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiAkSWQ6IGJpdF9vcGVyYXRpb25zLmgsdiAxLjExIDIwMDYvMTEvMjggMTU6Mzc6MDMgc3RldmV1IEV4cCAkCiAgKi8KIAogLyohIFxmaWxlICovCkBAIC0zNCw3ICszMiw3IEBACiAvKiEgXGJyaWVmIEZpbmQgdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgaGlnaGVzdCBzZXQgYml0IGluIGEgd29yZAogICAgIFxwYXJhbSBiaXRzIFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkCiAgICAgXHJldHVybiBUaGUgYml0IG51bWJlciBvZiB0aGUgaGlnaGVzdCBzZXQgYml0LCBvciAtMSBpZiB0aGUgd29yZCBpcyB6ZXJvLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHRvcF9iaXQodW5zaWduZWQgaW50IGJpdHMpCitzdGF0aWMgaW5saW5lIGludCB0b3BfYml0KHVuc2lnbmVkIGludCBiaXRzKQogewogCWludCByZXM7CiAKQEAgLTUwLDcgKzQ4LDcgQEAKIC8qISBcYnJpZWYgRmluZCB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhIHdvcmQKICAgICBccGFyYW0gYml0cyBUaGUgd29yZCB0byBiZSBzZWFyY2hlZAogICAgIFxyZXR1cm4gVGhlIGJpdCBudW1iZXIgb2YgdGhlIGxvd2VzdCBzZXQgYml0LCBvciAtMSBpZiB0aGUgd29yZCBpcyB6ZXJvLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGJvdHRvbV9iaXQodW5zaWduZWQgaW50IGJpdHMpCitzdGF0aWMgaW5saW5lIGludCBib3R0b21fYml0KHVuc2lnbmVkIGludCBiaXRzKQogewogCWludCByZXM7CiAKQEAgLTYzLDcgKzYxLDcgQEAKIAlyZXR1cm4gcmVzOwogfQogI2Vsc2UKLXN0YXRpYyBfX2lubGluZV9fIGludCB0b3BfYml0KHVuc2lnbmVkIGludCBiaXRzKQorc3RhdGljIGlubGluZSBpbnQgdG9wX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKIHsKIAlpbnQgaTsKIApAQCAtOTMsNyArOTEsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYm90dG9tX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3N0YXRpYyBpbmxpbmUgaW50IGJvdHRvbV9iaXQodW5zaWduZWQgaW50IGJpdHMpCiB7CiAJaW50IGk7CiAKQEAgLTEyNyw3ICsxMjUsNyBAQAogLyohIFxicmllZiBCaXQgcmV2ZXJzZSBhIGJ5dGUuCiAgICAgXHBhcmFtIGRhdGEgVGhlIGJ5dGUgdG8gYmUgcmV2ZXJzZWQuCiAgICAgXHJldHVybiBUaGUgYml0IHJldmVyc2VkIHZlcnNpb24gb2YgZGF0YS4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHVpbnQ4X3QgYml0X3JldmVyc2U4KHVpbnQ4X3QgeCkKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBiaXRfcmV2ZXJzZTgodWludDhfdCB4KQogewogI2lmIGRlZmluZWQoX19pMzg2X18pICB8fCAgZGVmaW5lZChfX3g4Nl82NF9fKQogCS8qIElmIG11bHRpcGx5IGlzIGZhc3QgKi8KQEAgLTE3MiwzMiArMTcwLDMyIEBACiB1aW50MTZfdCBtYWtlX21hc2sxNih1aW50MTZfdCB4KTsKIAogLyohIFxicmllZiBGaW5kIHRoZSBsZWFzdCBzaWduaWZpY2FudCBvbmUgaW4gYSB3b3JkLCBhbmQgcmV0dXJuIGEgd29yZAotICAgICAgICAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgorCSAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgogICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgogICAgIFxyZXR1cm4gVGhlIHdvcmQgd2l0aCB0aGUgc2luZ2xlIHNldCBiaXQuICovCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBsZWFzdF9zaWduaWZpY2FudF9vbmUzMih1aW50MzJfdCB4KQorc3RhdGljIGlubGluZSB1aW50MzJfdCBsZWFzdF9zaWduaWZpY2FudF9vbmUzMih1aW50MzJfdCB4KQogewotCXJldHVybiAoeCAmICgtKGludDMyX3QpIHgpKTsKKwlyZXR1cm4geCAmICgtKGludDMyX3QpIHgpOwogfQogCiAvKiEgXGJyaWVmIEZpbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgb25lIGluIGEgd29yZCwgYW5kIHJldHVybiBhIHdvcmQKLSAgICAgICAgICAgd2l0aCBqdXN0IHRoYXQgYml0IHNldC4KKwkgICAgd2l0aCBqdXN0IHRoYXQgYml0IHNldC4KICAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBzZWFyY2hlZC4KICAgICBccmV0dXJuIFRoZSB3b3JkIHdpdGggdGhlIHNpbmdsZSBzZXQgYml0LiAqLwotc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgbW9zdF9zaWduaWZpY2FudF9vbmUzMih1aW50MzJfdCB4KQorc3RhdGljIGlubGluZSB1aW50MzJfdCBtb3N0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCiB7CiAjaWYgZGVmaW5lZChfX2kzODZfXykgIHx8ICBkZWZpbmVkKF9feDg2XzY0X18pCiAJcmV0dXJuIDEgPDwgdG9wX2JpdCh4KTsKICNlbHNlCiAJeCA9IG1ha2VfbWFzazMyKHgpOwotCXJldHVybiAoeCBeICh4ID4+IDEpKTsKKwlyZXR1cm4geCBeICh4ID4+IDEpOwogI2VuZGlmCiB9CiAKIC8qISBcYnJpZWYgRmluZCB0aGUgcGFyaXR5IG9mIGEgYnl0ZS4KICAgICBccGFyYW0geCBUaGUgYnl0ZSB0byBiZSBjaGVja2VkLgogICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTgodWludDhfdCB4KQorc3RhdGljIGlubGluZSBpbnQgcGFyaXR5OCh1aW50OF90IHgpCiB7CiAJeCA9ICh4IF4gKHggPj4gNCkpICYgMHgwRjsKIAlyZXR1cm4gKDB4Njk5NiA+PiB4KSAmIDE7CkBAIC0yMDYsNyArMjA0LDcgQEAKIC8qISBcYnJpZWYgRmluZCB0aGUgcGFyaXR5IG9mIGEgMTYgYml0IHdvcmQuCiAgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgY2hlY2tlZC4KICAgICBccmV0dXJuIDEgZm9yIG9kZCwgb3IgMCBmb3IgZXZlbi4gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBwYXJpdHkxNih1aW50MTZfdCB4KQorc3RhdGljIGlubGluZSBpbnQgcGFyaXR5MTYodWludDE2X3QgeCkKIHsKIAl4IF49ICh4ID4+IDgpOwogCXggPSAoeCBeICh4ID4+IDQpKSAmIDB4MEY7CkBAIC0yMTYsNyArMjE0LDcgQEAKIC8qISBcYnJpZWYgRmluZCB0aGUgcGFyaXR5IG9mIGEgMzIgYml0IHdvcmQuCiAgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgY2hlY2tlZC4KICAgICBccmV0dXJuIDEgZm9yIG9kZCwgb3IgMCBmb3IgZXZlbi4gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBwYXJpdHkzMih1aW50MzJfdCB4KQorc3RhdGljIGlubGluZSBpbnQgcGFyaXR5MzIodWludDMyX3QgeCkKIHsKIAl4IF49ICh4ID4+IDE2KTsKIAl4IF49ICh4ID4+IDgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jCmluZGV4IGZkNDAwN2UuLjZkNzIxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMKQEAgLTI3LDggKzI3LDYgQEAKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICogJElkOiBlY2hvLmMsdiAxLjIwIDIwMDYvMTIvMDEgMTg6MDA6NDggc3RldmV1IEV4cCAkCiAgKi8KIAogLyohIFxmaWxlICovCkBAIC0xMTMsMTcgKzExMSwxNyBAQAogCiAjZGVmaW5lIE1JTl9UWF9QT1dFUl9GT1JfQURBUFRJT04gICA2NAogI2RlZmluZSBNSU5fUlhfUE9XRVJfRk9SX0FEQVBUSU9OICAgNjQKLSNkZWZpbmUgRFREX0hBTkdPVkVSICAgICAgICAgICAgICAgNjAwCS8qIDYwMCBzYW1wbGVzLCBvciA3NW1zICAgICAqLwotI2RlZmluZSBEQ19MT0cyQkVUQSAgICAgICAgICAgICAgICAgIDMJLyogbG9nMigpIG9mIERDIGZpbHRlciBCZXRhICovCisjZGVmaW5lIERURF9IQU5HT1ZFUgkJIDYwMAkvKiA2MDAgc2FtcGxlcywgb3IgNzVtcyAgICAgKi8KKyNkZWZpbmUgRENfTE9HMkJFVEEJCSAgICAzCS8qIGxvZzIoKSBvZiBEQyBmaWx0ZXIgQmV0YSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVU5DVElPTlMKKwkJCQkgICBGVU5DVElPTlMKIFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBhZGFwdGluZyBjb2VmZnMgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIHN0b2NoYXN0aWMgZGVzY2VudCAoTilMTVMgYWxnb3JpdGhtICovCiAKICNpZmRlZiBfX2JmaW5fXwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBsbXNfYWRhcHRfYmcoc3RydWN0IG9zbGVjX3N0YXRlICplYywgaW50IGNsZWFuLAorc3RhdGljIGlubGluZSB2b2lkIGxtc19hZGFwdF9iZyhzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQgY2xlYW4sCiAJCQkJICAgIGludCBzaGlmdCkKIHsKIAlpbnQgaSwgajsKQEAgLTE0NywxMyArMTQ1LDEzIEBACiAKIAkvKiBzdDogYW5kIGVuOiBoZWxwIHVzIGxvY2F0ZSB0aGUgYXNzZW1ibGVyIGluIGVjaG8ucyAqLwogCi0JLy9hc20oInN0OiIpOworCS8qIGFzbSgic3Q6Iik7ICovCiAJbiA9IGVjLT50YXBzOwogCWZvciAoaSA9IDAsIGogPSBvZmZzZXQyOyBpIDwgbjsgaSsrLCBqKyspIHsKIAkJZXhwID0gKnBoaXN0KysgKiBmYWN0b3I7CiAJCWVjLT5maXJfdGFwczE2WzFdW2ldICs9IChpbnQxNl90KSAoKGV4cCArICgxIDw8IDE0KSkgPj4gMTUpOwogCX0KLQkvL2FzbSgiZW46Iik7CisJLyogYXNtKCJlbjoiKTsgKi8KIAogCS8qIE5vdGUgdGhlIGFzbSBmb3IgdGhlIGlubmVyIGxvb3AgYWJvdmUgZ2VuZXJhdGVkIGJ5IEJsYWNrZmluIGdjYwogCSAgIDQuMS4xIGlzIHByZXR0eSBnb29kIChub3RlIGV2ZW4gcGFyYWxsZWwgaW5zdHJ1Y3Rpb25zIHVzZWQpOgpAQCAtMTk1LDcgKzE5Myw3IEBACiAqLwogCiAjZWxzZQotc3RhdGljIF9faW5saW5lX18gdm9pZCBsbXNfYWRhcHRfYmcoc3RydWN0IG9zbGVjX3N0YXRlICplYywgaW50IGNsZWFuLAorc3RhdGljIGlubGluZSB2b2lkIGxtc19hZGFwdF9iZyhzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQgY2xlYW4sCiAJCQkJICAgIGludCBzaGlmdCkKIHsKIAlpbnQgaTsKQEAgLTI0OSw5ICsyNDcsOCBAQAogCWZpcjE2X2NyZWF0ZSgmZWMtPmZpcl9zdGF0ZSwgZWMtPmZpcl90YXBzMTZbMF0sIGVjLT50YXBzKTsKIAlmaXIxNl9jcmVhdGUoJmVjLT5maXJfc3RhdGVfYmcsIGVjLT5maXJfdGFwczE2WzFdLCBlYy0+dGFwcyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKIAkJZWMtPnh2dHhbaV0gPSBlYy0+eXZ0eFtpXSA9IGVjLT54dnJ4W2ldID0gZWMtPnl2cnhbaV0gPSAwOwotCX0KIAogCWVjLT5jbmdfbGV2ZWwgPSAxMDAwOwogCW9zbGVjX2FkYXB0aW9uX21vZGUoZWMsIGFkYXB0aW9uX21vZGUpOwpAQCAtMjcxLDE0ICsyNjgsMTMgQEAKIAogCXJldHVybiBlYzsKIAotICAgICAgZXJyb3Jfb29tOgorZXJyb3Jfb29tOgogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCiAJCWtmcmVlKGVjLT5maXJfdGFwczE2W2ldKTsKIAogCWtmcmVlKGVjKTsKIAlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfY3JlYXRlKTsKIAogdm9pZCBvc2xlY19mcmVlKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMpCkBAIC0yOTIsMTQgKzI4OCwxMiBAQAogCWtmcmVlKGVjLT5zbmFwc2hvdCk7CiAJa2ZyZWUoZWMpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19mcmVlKTsKIAogdm9pZCBvc2xlY19hZGFwdGlvbl9tb2RlKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBhZGFwdGlvbl9tb2RlKQogewogCWVjLT5hZGFwdGlvbl9tb2RlID0gYWRhcHRpb25fbW9kZTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfYWRhcHRpb25fbW9kZSk7CiAKIHZvaWQgb3NsZWNfZmx1c2goc3RydWN0IG9zbGVjX3N0YXRlICplYykKQEAgLTMyNiwxNCArMzIwLDEyIEBACiAJZWMtPmN1cnJfcG9zID0gZWMtPnRhcHMgLSAxOwogCWVjLT5Qc3RhdGVzID0gMDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfZmx1c2gpOwogCiB2b2lkIG9zbGVjX3NuYXBzaG90KHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMpCiB7CiAJbWVtY3B5KGVjLT5zbmFwc2hvdCwgZWMtPmZpcl90YXBzMTZbMF0sIGVjLT50YXBzICogc2l6ZW9mKGludDE2X3QpKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfc25hcHNob3QpOwogCiAvKiBEdWFsIFBhdGggRWNobyBDYW5jZWxsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM5OSw3ICszOTEsNyBAQAogCQkvKiBlZmZpY2llbnQgIm91dCB3aXRoIHRoZSBvbGQgYW5kIGluIHdpdGggdGhlIG5ldyIgYWxnb3JpdGhtIHNvCiAJCSAgIHdlIGRvbid0IGhhdmUgdG8gcmVjYWxjdWxhdGUgb3ZlciB0aGUgd2hvbGUgYmxvY2sgb2YKIAkJICAgc2FtcGxlcy4gKi8KLQkJbmV3ID0gKGludCl0eCAqKGludCl0eDsKKwkJbmV3ID0gKGludCl0eCAqIChpbnQpdHg7CiAJCW9sZCA9IChpbnQpZWMtPmZpcl9zdGF0ZS5oaXN0b3J5W2VjLT5maXJfc3RhdGUuY3Vycl9wb3NdICoKIAkJICAgIChpbnQpZWMtPmZpcl9zdGF0ZS5oaXN0b3J5W2VjLT5maXJfc3RhdGUuY3Vycl9wb3NdOwogCQllYy0+UHN0YXRlcyArPQpAQCAtNDk4LDE1ICs0OTAsMTUgQEAKIAogCWlmICgoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfQURBUFRJT04pICYmCiAJICAgIChlYy0+bm9udXBkYXRlX2R3ZWxsID09IDApICYmCi0JICAgICg4ICogZWMtPkxjbGVhbl9iZyA8Ci0JICAgICA3ICogZWMtPkxjbGVhbikgLyogKGVjLT5MY2xlYW5fYmcgPCAwLjg3NSplYy0+TGNsZWFuKSAqLyAmJgotCSAgICAoOCAqIGVjLT5MY2xlYW5fYmcgPAotCSAgICAgZWMtPkx0eCkgLyogKGVjLT5MY2xlYW5fYmcgPCAwLjEyNSplYy0+THR4KSAgICAqLyApIHsKKwkgICAgLyogKGVjLT5MY2xlYW5fYmcgPCAwLjg3NSplYy0+TGNsZWFuKSAqLworCSAgICAoOCAqIGVjLT5MY2xlYW5fYmcgPCA3ICogZWMtPkxjbGVhbikgJiYKKwkgICAgLyogKGVjLT5MY2xlYW5fYmcgPCAwLjEyNSplYy0+THR4KSAqLworCSAgICAoOCAqIGVjLT5MY2xlYW5fYmcgPCBlYy0+THR4KSkgewogCQlpZiAoZWMtPmNvbmRfbWV0ID09IDYpIHsKIAkJCS8qIEJHIGZpbHRlciBoYXMgaGFkIGJldHRlciByZXN1bHRzIGZvciA2IGNvbnNlY3V0aXZlIHNhbXBsZXMgKi8KIAkJCWVjLT5hZGFwdCA9IDE7CiAJCQltZW1jcHkoZWMtPmZpcl90YXBzMTZbMF0sIGVjLT5maXJfdGFwczE2WzFdLAotCQkJICAgICAgIGVjLT50YXBzICogc2l6ZW9mKGludDE2X3QpKTsKKwkJCQllYy0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7CiAJCX0gZWxzZQogCQkJZWMtPmNvbmRfbWV0Kys7CiAJfSBlbHNlCkBAIC01ODAsNyArNTcyLDYgQEAKIAogCXJldHVybiAoaW50MTZfdCkgZWMtPmNsZWFuX25scCA8PCAxOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY191cGRhdGUpOwogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHNlcGVyYXRlZCBmcm9tIHRoZSBlY2hvIGNhbmNlbGxlciBpcyBpdCBpcyB1c3VhbGx5IGNhbGxlZApAQCAtNjA0LDcgKzU5NSw3IEBACiAgICBwcmVjaXNpb24sIHdoaWNoIG5vaXNlIHNoYXBlcyB0aGluZ3MsIGdpdmluZyB2ZXJ5IGNsZWFuIERDIHJlbW92YWwuCiAqLwogCi1pbnQxNl90IG9zbGVjX2hwZl90eChzdHJ1Y3Qgb3NsZWNfc3RhdGUgKiBlYywgaW50MTZfdCB0eCkKK2ludDE2X3Qgb3NsZWNfaHBmX3R4KHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludDE2X3QgdHgpCiB7CiAJaW50IHRtcCwgdG1wMTsKIApAQCAtNjI5LDcgKzYyMCw2IEBACiAKIAlyZXR1cm4gdHg7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKG9zbGVjX2hwZl90eCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaAppbmRleCAzNGZiODE2Li5jODM1ZTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oCkBAIC0yMyw4ICsyMyw2IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqICRJZDogZWNoby5oLHYgMS45IDIwMDYvMTAvMjQgMTM6NDU6Mjggc3RldmV1IEV4cCAkCiAgKi8KIAogI2lmbmRlZiBfX0VDSE9fSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZmlyLmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaAppbmRleCBkMzVmMTY4Li5hYzZjNTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaApAQCAtMjEsOCArMjEsNiBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiAkSWQ6IGZpci5oLHYgMS44IDIwMDYvMTAvMjQgMTM6NDU6Mjggc3RldmV1IEV4cCAkCiAgKi8KIAogLyohIFxwYWdlIGZpcl9wYWdlIEZJUiBmaWx0ZXJpbmcKQEAgLTEwMiw4ICsxMDAsOCBAQAogCWZsb2F0ICpoaXN0b3J5OwogfTsKIAotc3RhdGljIF9faW5saW5lX18gY29uc3QgaW50MTZfdCAqZmlyMTZfY3JlYXRlKHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIsCi0JCQkJCSAgICAgIGNvbnN0IGludDE2X3QgKiBjb2VmZnMsIGludCB0YXBzKQorc3RhdGljIGlubGluZSBjb25zdCBpbnQxNl90ICpmaXIxNl9jcmVhdGUoc3RydWN0IGZpcjE2X3N0YXRlX3QgKmZpciwKKwkJCQkJICAgICAgY29uc3QgaW50MTZfdCAqY29lZmZzLCBpbnQgdGFwcykKIHsKIAlmaXItPnRhcHMgPSB0YXBzOwogCWZpci0+Y3Vycl9wb3MgPSB0YXBzIC0gMTsKQEAgLTExNiw3ICsxMTQsNyBAQAogCXJldHVybiBmaXItPmhpc3Rvcnk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyMTZfZmx1c2goc3RydWN0IGZpcjE2X3N0YXRlX3QgKmZpcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaXIxNl9mbHVzaChzdHJ1Y3QgZmlyMTZfc3RhdGVfdCAqZmlyKQogewogI2lmIGRlZmluZWQoVVNFX01NWCkgIHx8ICBkZWZpbmVkKFVTRV9TU0UyKSB8fCBkZWZpbmVkKF9fYmZpbl9fKQogCW1lbXNldChmaXItPmhpc3RvcnksIDAsIDIgKiBmaXItPnRhcHMgKiBzaXplb2YoaW50MTZfdCkpOwpAQCAtMTI1LDcgKzEyMyw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIxNl9mcmVlKHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIpCitzdGF0aWMgaW5saW5lIHZvaWQgZmlyMTZfZnJlZShzdHJ1Y3QgZmlyMTZfc3RhdGVfdCAqZmlyKQogewogCWtmcmVlKGZpci0+aGlzdG9yeSk7CiB9CkBAIC0xNDgsMTYgKzE0NiwxNiBAQAogCQkiQTAgKz0gUjAuTCpSMS5MIChJUyk7XG5cdCIKIAkJIlIwID0gQTA7XG5cdCIKIAkJIiUwID0gUjA7XG5cdCIKLQkJOiI9JmQiKGRvdCkKLQkJOiJhIih4KSwgImEiKHkpLCAiYSIobGVuKQotCQk6IkkwIiwgIkkxIiwgIkExIiwgIkEwIiwgIlIwIiwgIlIxIgorCQk6ICI9JmQiKGRvdCkKKwkJOiAiYSIoeCksICJhIih5KSwgImEiKGxlbikKKwkJOiAiSTAiLCAiSTEiLCAiQTEiLCAiQTAiLCAiUjAiLCAiUjEiCiAJKTsKIAogCXJldHVybiBkb3Q7CiB9CiAjZW5kaWYKIAotc3RhdGljIF9faW5saW5lX18gaW50MTZfdCBmaXIxNihzdHJ1Y3QgZmlyMTZfc3RhdGVfdCAqZmlyLCBpbnQxNl90IHNhbXBsZSkKK3N0YXRpYyBpbmxpbmUgaW50MTZfdCBmaXIxNihzdHJ1Y3QgZmlyMTZfc3RhdGVfdCAqZmlyLCBpbnQxNl90IHNhbXBsZSkKIHsKIAlpbnQzMl90IHk7CiAjaWYgZGVmaW5lZChVU0VfTU1YKQpAQCAtMjUwLDggKzI0OCw4IEBACiAJcmV0dXJuIChpbnQxNl90KSAoeSA+PiAxNSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGNvbnN0IGludDE2X3QgKmZpcjMyX2NyZWF0ZShzdHJ1Y3QgZmlyMzJfc3RhdGVfdCAqZmlyLAotCQkJCQkgICAgICBjb25zdCBpbnQzMl90ICogY29lZmZzLCBpbnQgdGFwcykKK3N0YXRpYyBpbmxpbmUgY29uc3QgaW50MTZfdCAqZmlyMzJfY3JlYXRlKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIsCisJCQkJCSAgICAgIGNvbnN0IGludDMyX3QgKmNvZWZmcywgaW50IHRhcHMpCiB7CiAJZmlyLT50YXBzID0gdGFwczsKIAlmaXItPmN1cnJfcG9zID0gdGFwcyAtIDE7CkBAIC0yNjAsMTcgKzI1OCwxNyBAQAogCXJldHVybiBmaXItPmhpc3Rvcnk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyMzJfZmx1c2goc3RydWN0IGZpcjMyX3N0YXRlX3QgKmZpcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaXIzMl9mbHVzaChzdHJ1Y3QgZmlyMzJfc3RhdGVfdCAqZmlyKQogewogCW1lbXNldChmaXItPmhpc3RvcnksIDAsIGZpci0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyMzJfZnJlZShzdHJ1Y3QgZmlyMzJfc3RhdGVfdCAqZmlyKQorc3RhdGljIGlubGluZSB2b2lkIGZpcjMyX2ZyZWUoc3RydWN0IGZpcjMyX3N0YXRlX3QgKmZpcikKIHsKIAlrZnJlZShmaXItPmhpc3RvcnkpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IGZpcjMyKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQorc3RhdGljIGlubGluZSBpbnQxNl90IGZpcjMyKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQogewogCWludCBpOwogCWludDMyX3QgeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL21teC5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmgKaW5kZXggNDRlNWNmZS4uYzFkY2Q3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmgKQEAgLTQ0LDIzOCArNDQsMjM4IEBACiAJY2hhciBiWzE2XTsKIH07CiAKLSNkZWZpbmUgICAgICAgICBtbXhfaTJyKG9wLGltbSxyZWcpIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaSIgKGltbSkgKQorI2RlZmluZQltbXhfaTJyKG9wLCBpbW0sIHJlZykgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAorCQkJCTogLyogbm90aGluZyAqLyBcCisJCQkJOiAiaSIgKGltbSkpCiAKLSNkZWZpbmUgICAgICAgICBtbXhfbTJyKG9wLG1lbSxyZWcpIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKG1lbSkpCisjZGVmaW5lCW1teF9tMnIob3AsIG1lbSwgcmVnKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZyBcCisJCQkJOiAvKiBub3RoaW5nICovIFwKKwkJCQk6ICJtIiAobWVtKSkKIAotI2RlZmluZSAgICAgICAgIG1teF9yMm0ob3AscmVnLG1lbSkgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSUiICNyZWcgIiwgJTAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAobWVtKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gKQorI2RlZmluZQltbXhfcjJtKG9wLCByZWcsIG1lbSkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlJSIgI3JlZyAiLCAlMCIgXAorCQkJCTogIj1tIiAobWVtKSBcCisJCQkJOiAvKiBub3RoaW5nICovKQogCi0jZGVmaW5lICAgICAgICAgbW14X3IycihvcCxyZWdzLHJlZ2QpIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUiICNyZWdzICIsICUiICNyZWdkKQorI2RlZmluZQltbXhfcjJyKG9wLCByZWdzLCByZWdkKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUiICNyZWdzICIsICUiICNyZWdkKQogCi0jZGVmaW5lICAgICAgICAgZW1tcygpIF9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tcyIpCisjZGVmaW5lCWVtbXMoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVtbXMiKQogCi0jZGVmaW5lICAgICAgICAgbW92ZF9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKG1vdmQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIG1vdmRfcjJtKHJlZyx2YXIpICAgICAgICAgICBtbXhfcjJtIChtb3ZkLCByZWcsIHZhcikKLSNkZWZpbmUgICAgICAgICBtb3ZkX3IycihyZWdzLHJlZ2QpICAgICAgICAgbW14X3IyciAobW92ZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJbW92ZF9tMnIodmFyLCByZWcpCW1teF9tMnIobW92ZCwgdmFyLCByZWcpCisjZGVmaW5lCW1vdmRfcjJtKHJlZywgdmFyKQltbXhfcjJtKG1vdmQsIHJlZywgdmFyKQorI2RlZmluZQltb3ZkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKG1vdmQsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBtb3ZxX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAobW92cSwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgbW92cV9yMm0ocmVnLHZhcikgICAgICAgICAgIG1teF9yMm0gKG1vdnEsIHJlZywgdmFyKQotI2RlZmluZSAgICAgICAgIG1vdnFfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChtb3ZxLCByZWdzLCByZWdkKQorI2RlZmluZQltb3ZxX20ycih2YXIsIHJlZykJbW14X20ycihtb3ZxLCB2YXIsIHJlZykKKyNkZWZpbmUJbW92cV9yMm0ocmVnLCB2YXIpCW1teF9yMm0obW92cSwgcmVnLCB2YXIpCisjZGVmaW5lCW1vdnFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIobW92cSwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBhY2tzc2R3X20ycih2YXIscmVnKSAgICAgICBtbXhfbTJyIChwYWNrc3NkdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFja3NzZHdfcjJyKHJlZ3MscmVnZCkgICAgIG1teF9yMnIgKHBhY2tzc2R3LCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBhY2tzc3diX20ycih2YXIscmVnKSAgICAgICBtbXhfbTJyIChwYWNrc3N3YiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFja3Nzd2JfcjJyKHJlZ3MscmVnZCkgICAgIG1teF9yMnIgKHBhY2tzc3diLCByZWdzLCByZWdkKQorI2RlZmluZQlwYWNrc3Nkd19tMnIodmFyLCByZWcpCQltbXhfbTJyKHBhY2tzc2R3LCB2YXIsIHJlZykKKyNkZWZpbmUJcGFja3NzZHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFja3NzZHcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhY2tzc3diX20ycih2YXIsIHJlZykJCW1teF9tMnIocGFja3Nzd2IsIHZhciwgcmVnKQorI2RlZmluZQlwYWNrc3N3Yl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWNrc3N3YiwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBhY2t1c3diX20ycih2YXIscmVnKSAgICAgICBtbXhfbTJyIChwYWNrdXN3YiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFja3Vzd2JfcjJyKHJlZ3MscmVnZCkgICAgIG1teF9yMnIgKHBhY2t1c3diLCByZWdzLCByZWdkKQorI2RlZmluZQlwYWNrdXN3Yl9tMnIodmFyLCByZWcpCQltbXhfbTJyKHBhY2t1c3diLCB2YXIsIHJlZykKKyNkZWZpbmUJcGFja3Vzd2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFja3Vzd2IsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwYWRkYl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFkZGIsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhZGRiX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYWRkYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwYWRkZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFkZGQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhZGRkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYWRkZCwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwYWRkd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFkZHcsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhZGR3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYWRkdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGFkZGJfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGRiLCB2YXIsIHJlZykKKyNkZWZpbmUJcGFkZGJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFkZGIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGRkX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkZCwgdmFyLCByZWcpCisjZGVmaW5lCXBhZGRkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGRkLCByZWdzLCByZWdkKQorI2RlZmluZQlwYWRkd19tMnIodmFyLCByZWcpCW1teF9tMnIocGFkZHcsIHZhciwgcmVnKQorI2RlZmluZQlwYWRkd19yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBhZGRzYl9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwYWRkc2IsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhZGRzYl9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwYWRkc2IsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGFkZHN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBhZGRzdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZHN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBhZGRzdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGFkZHNiX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkc2IsIHZhciwgcmVnKQorI2RlZmluZQlwYWRkc2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFkZHNiLCByZWdzLCByZWdkKQorI2RlZmluZQlwYWRkc3dfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGRzdywgdmFyLCByZWcpCisjZGVmaW5lCXBhZGRzd19yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkc3csIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwYWRkdXNiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGFkZHVzYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZHVzYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBhZGR1c2IsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGFkZHVzd19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBhZGR1c3csIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhZGR1c3dfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwYWRkdXN3LCByZWdzLCByZWdkKQorI2RlZmluZQlwYWRkdXNiX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdXNiLCB2YXIsIHJlZykKKyNkZWZpbmUJcGFkZHVzYl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkdXNiLCByZWdzLCByZWdkKQorI2RlZmluZQlwYWRkdXN3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdXN3LCB2YXIsIHJlZykKKyNkZWZpbmUJcGFkZHVzd19yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkdXN3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGFuZF9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKHBhbmQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhbmRfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChwYW5kLCByZWdzLCByZWdkKQorI2RlZmluZQlwYW5kX20ycih2YXIsIHJlZykJbW14X20ycihwYW5kLCB2YXIsIHJlZykKKyNkZWZpbmUJcGFuZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwYW5kLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGFuZG5fbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhbmRuLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYW5kbl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFuZG4sIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhbmRuX20ycih2YXIsIHJlZykJbW14X20ycihwYW5kbiwgdmFyLCByZWcpCisjZGVmaW5lCXBhbmRuX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhbmRuLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGNtcGVxYl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBlcWIsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBjbXBlcWJfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZXFiLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBjbXBlcWRfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZXFkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwY21wZXFkX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGVxZCwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwY21wZXF3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGVxdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGNtcGVxd19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBlcXcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBjbXBlcWJfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBlcWIsIHZhciwgcmVnKQorI2RlZmluZQlwY21wZXFiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBlcWIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBjbXBlcWRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBlcWQsIHZhciwgcmVnKQorI2RlZmluZQlwY21wZXFkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBlcWQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBjbXBlcXdfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBlcXcsIHZhciwgcmVnKQorI2RlZmluZQlwY21wZXF3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBlcXcsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwY21wZ3RiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGd0YiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGNtcGd0Yl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBndGIsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGNtcGd0ZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBndGQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBjbXBndGRfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZ3RkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBjbXBndHdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZ3R3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwY21wZ3R3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGd0dywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGd0Yl9tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGd0YiwgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBndGJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGd0YiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGd0ZF9tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGd0ZCwgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBndGRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGd0ZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGd0d19tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGd0dywgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBndHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGd0dywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBtYWRkd2RfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwbWFkZHdkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwbWFkZHdkX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocG1hZGR3ZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1hZGR3ZF9tMnIodmFyLCByZWcpCW1teF9tMnIocG1hZGR3ZCwgdmFyLCByZWcpCisjZGVmaW5lCXBtYWRkd2RfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1hZGR3ZCwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBtdWxod19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbXVsaHcsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtdWxod19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbXVsaHcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBtdWxod19tMnIodmFyLCByZWcpCW1teF9tMnIocG11bGh3LCB2YXIsIHJlZykKKyNkZWZpbmUJcG11bGh3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtdWxodywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBtdWxsd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbXVsbHcsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtdWxsd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbXVsbHcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBtdWxsd19tMnIodmFyLCByZWcpCW1teF9tMnIocG11bGx3LCB2YXIsIHJlZykKKyNkZWZpbmUJcG11bGx3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtdWxsdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBvcl9tMnIodmFyLHJlZykgICAgICAgICAgICBtbXhfbTJyIChwb3IsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBvcl9yMnIocmVncyxyZWdkKSAgICAgICAgICBtbXhfcjJyIChwb3IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBvcl9tMnIodmFyLCByZWcpCW1teF9tMnIocG9yLCB2YXIsIHJlZykKKyNkZWZpbmUJcG9yX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBvciwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBzbGxkX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc2xsZCwgaW1tLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNsbGRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzbGxkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc2xsZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNsbGQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHNsbHFfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzbGxxLCBpbW0sIHJlZykKLSNkZWZpbmUgICAgICAgICBwc2xscV9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNsbHEsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzbGxxX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc2xscSwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwc2xsd19pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNsbHcsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzbGx3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc2xsdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNsbHdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzbGx3LCByZWdzLCByZWdkKQorI2RlZmluZQlwc2xsZF9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNsbGQsIGltbSwgcmVnKQorI2RlZmluZQlwc2xsZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHNsbGQsIHZhciwgcmVnKQorI2RlZmluZQlwc2xsZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc2xsZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNsbHFfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzbGxxLCBpbW0sIHJlZykKKyNkZWZpbmUJcHNsbHFfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzbGxxLCB2YXIsIHJlZykKKyNkZWZpbmUJcHNsbHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNsbHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzbGx3X2kycihpbW0sIHJlZykJbW14X2kycihwc2xsdywgaW1tLCByZWcpCisjZGVmaW5lCXBzbGx3X20ycih2YXIsIHJlZykJbW14X20ycihwc2xsdywgdmFyLCByZWcpCisjZGVmaW5lCXBzbGx3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzbGx3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHNyYWRfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmFkLCBpbW0sIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3JhZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNyYWQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmFkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JhZCwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwc3Jhd19pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNyYXcsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmF3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JhdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNyYXdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmF3LCByZWdzLCByZWdkKQorI2RlZmluZQlwc3JhZF9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNyYWQsIGltbSwgcmVnKQorI2RlZmluZQlwc3JhZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHNyYWQsIHZhciwgcmVnKQorI2RlZmluZQlwc3JhZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JhZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNyYXdfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzcmF3LCBpbW0sIHJlZykKKyNkZWZpbmUJcHNyYXdfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzcmF3LCB2YXIsIHJlZykKKyNkZWZpbmUJcHNyYXdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNyYXcsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwc3JsZF9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNybGQsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmxkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JsZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNybGRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmxkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzcmxxX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JscSwgaW1tLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNybHFfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmxxLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3JscV9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNybHEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHNybHdfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmx3LCBpbW0sIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3Jsd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNybHcsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmx3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JsdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNybGRfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzcmxkLCBpbW0sIHJlZykKKyNkZWZpbmUJcHNybGRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzcmxkLCB2YXIsIHJlZykKKyNkZWZpbmUJcHNybGRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNybGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzcmxxX2kycihpbW0sIHJlZykJbW14X2kycihwc3JscSwgaW1tLCByZWcpCisjZGVmaW5lCXBzcmxxX20ycih2YXIsIHJlZykJbW14X20ycihwc3JscSwgdmFyLCByZWcpCisjZGVmaW5lCXBzcmxxX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzcmxxLCByZWdzLCByZWdkKQorI2RlZmluZQlwc3Jsd19pMnIoaW1tLCByZWcpCW1teF9pMnIocHNybHcsIGltbSwgcmVnKQorI2RlZmluZQlwc3Jsd19tMnIodmFyLCByZWcpCW1teF9tMnIocHNybHcsIHZhciwgcmVnKQorI2RlZmluZQlwc3Jsd19yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JsdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBzdWJiX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3ViYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHN1YmJfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJiLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzdWJkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3ViZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHN1YmRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzdWJ3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3VidywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHN1YndfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJ3LCByZWdzLCByZWdkKQorI2RlZmluZQlwc3ViYl9tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YmIsIHZhciwgcmVnKQorI2RlZmluZQlwc3ViYl9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3ViYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YmRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzdWJkLCB2YXIsIHJlZykKKyNkZWZpbmUJcHN1YmRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YmQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzdWJ3X20ycih2YXIsIHJlZykJbW14X20ycihwc3VidywgdmFyLCByZWcpCisjZGVmaW5lCXBzdWJ3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJ3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHN1YnNiX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBzdWJzYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHN1YnNiX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBzdWJzYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwc3Vic3dfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocHN1YnN3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3Vic3dfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocHN1YnN3LCByZWdzLCByZWdkKQorI2RlZmluZQlwc3Vic2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzdWJzYiwgdmFyLCByZWcpCisjZGVmaW5lCXBzdWJzYl9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3Vic2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzdWJzd19tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YnN3LCB2YXIsIHJlZykKKyNkZWZpbmUJcHN1YnN3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJzdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBzdWJ1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwc3VidXNiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3VidXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocHN1YnVzYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwc3VidXN3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocHN1YnVzdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHN1YnVzd19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBzdWJ1c3csIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzdWJ1c2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzdWJ1c2IsIHZhciwgcmVnKQorI2RlZmluZQlwc3VidXNiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJ1c2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzdWJ1c3dfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzdWJ1c3csIHZhciwgcmVnKQorI2RlZmluZQlwc3VidXN3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJ1c3csIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwdW5wY2toYndfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNraGJ3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwdW5wY2toYndfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNraGJ3LCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHB1bnBja2hkcV9tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2toZHEsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHB1bnBja2hkcV9yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2toZHEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHVucGNraHdkX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2h3ZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHVucGNraHdkX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2h3ZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHVucGNraGJ3X20ycih2YXIsIHJlZykJCW1teF9tMnIocHVucGNraGJ3LCB2YXIsIHJlZykKKyNkZWZpbmUJcHVucGNraGJ3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB1bnBja2hidywgcmVncywgcmVnZCkKKyNkZWZpbmUJcHVucGNraGRxX20ycih2YXIsIHJlZykJCW1teF9tMnIocHVucGNraGRxLCB2YXIsIHJlZykKKyNkZWZpbmUJcHVucGNraGRxX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB1bnBja2hkcSwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHVucGNraHdkX20ycih2YXIsIHJlZykJCW1teF9tMnIocHVucGNraHdkLCB2YXIsIHJlZykKKyNkZWZpbmUJcHVucGNraHdkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB1bnBja2h3ZCwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHB1bnBja2xid19tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2tsYncsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHB1bnBja2xid19yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2tsYncsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHVucGNrbGRxX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2xkcSwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHVucGNrbGRxX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2xkcSwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwdW5wY2tsd2RfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNrbHdkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwdW5wY2tsd2RfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNrbHdkLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2tsYndfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2tsYncsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2tsYndfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNrbGJ3LCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2tsZHFfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2tsZHEsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2tsZHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNrbGRxLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2tsd2RfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2tsd2QsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2tsd2RfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNrbHdkLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHhvcl9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKHB4b3IsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHB4b3JfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChweG9yLCByZWdzLCByZWdkKQorI2RlZmluZQlweG9yX20ycih2YXIsIHJlZykJbW14X20ycihweG9yLCB2YXIsIHJlZykKKyNkZWZpbmUJcHhvcl9yMnIocmVncywgcmVnZCkJbW14X3IycihweG9yLCByZWdzLCByZWdkKQogCiAvKiAzRE5PVyBleHRlbnNpb25zICovCiAKLSNkZWZpbmUgICAgICAgICBwYXZndXNiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGF2Z3VzYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGF2Z3VzYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBhdmd1c2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhdmd1c2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhdmd1c2IsIHZhciwgcmVnKQorI2RlZmluZQlwYXZndXNiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhdmd1c2IsIHJlZ3MsIHJlZ2QpCiAKIC8qIEFNRCBNTVggZXh0ZW5zaW9ucyAtIGFsc28gYXZhaWxhYmxlIGluIGludGVsIFNTRSAqLwogCi0jZGVmaW5lICAgICAgICAgbW14X20ycmkob3AsbWVtLHJlZyxpbW0pIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUxLCAlMCwgJSUiICNyZWcgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm0iIChtZW0pLCAiaSIgKGltbSkpCi0jZGVmaW5lICAgICAgICAgbW14X3Iycmkob3AscmVncyxyZWdkLGltbSkgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVncyAiLCAlJSIgI3JlZ2QgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImkiIChpbW0pICkKKyNkZWZpbmUJbW14X20ycmkob3AsIG1lbSwgcmVnLCBpbW0pIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTEsICUwLCAlJSIgI3JlZyBcCisJCQkJOiAvKiBub3RoaW5nICovIFwKKwkJCQk6ICJtIiAobWVtKSwgImkiIChpbW0pKQorI2RlZmluZQltbXhfcjJyaShvcCwgcmVncywgcmVnZCwgaW1tKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZ3MgIiwgJSUiICNyZWdkIFwKKwkJCQk6IC8qIG5vdGhpbmcgKi8gXAorCQkJCTogImkiIChpbW0pKQogCi0jZGVmaW5lICAgICAgICAgbW14X2ZldGNoKG1lbSxoaW50KSBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgicHJlZmV0Y2giICNoaW50ICIgJTAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAobWVtKSkKKyNkZWZpbmUJbW14X2ZldGNoKG1lbSwgaGludCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgicHJlZmV0Y2giICNoaW50ICIgJTAiIFwKKwkJCQk6IC8qIG5vdGhpbmcgKi8gXAorCQkJCTogIm0iIChtZW0pKQogCi0jZGVmaW5lICAgICAgICAgbWFza21vdnEocmVncyxtYXNrcmVnKSAgICAgIG1teF9yMnJpIChtYXNrbW92cSwgcmVncywgbWFza3JlZykKKyNkZWZpbmUJbWFza21vdnEocmVncywgbWFza3JlZykJbW14X3IycmkobWFza21vdnEsIHJlZ3MsIG1hc2tyZWcpCiAKLSNkZWZpbmUgICAgICAgICBtb3ZudHFfcjJtKG1tcmVnLHZhcikgICAgICAgbW14X3IybSAobW92bnRxLCBtbXJlZywgdmFyKQorI2RlZmluZQltb3ZudHFfcjJtKG1tcmVnLCB2YXIpCW1teF9yMm0obW92bnRxLCBtbXJlZywgdmFyKQogCi0jZGVmaW5lICAgICAgICAgcGF2Z2JfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhdmdiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYXZnYl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGF2Z2IsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGF2Z3dfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhdmd3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYXZnd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGF2Z3csIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhdmdiX20ycih2YXIsIHJlZykJbW14X20ycihwYXZnYiwgdmFyLCByZWcpCisjZGVmaW5lCXBhdmdiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhdmdiLCByZWdzLCByZWdkKQorI2RlZmluZQlwYXZnd19tMnIodmFyLCByZWcpCW1teF9tMnIocGF2Z3csIHZhciwgcmVnKQorI2RlZmluZQlwYXZnd19yMnIocmVncywgcmVnZCkJbW14X3IycihwYXZndywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBleHRyd19yMnIobW1yZWcscmVnLGltbSkgICBtbXhfcjJyaSAocGV4dHJ3LCBtbXJlZywgcmVnLCBpbW0pCisjZGVmaW5lCXBleHRyd19yMnIobW1yZWcsIHJlZywgaW1tKQltbXhfcjJyaShwZXh0cncsIG1tcmVnLCByZWcsIGltbSkKIAotI2RlZmluZSAgICAgICAgIHBpbnNyd19yMnIocmVnLG1tcmVnLGltbSkgICBtbXhfcjJyaSAocGluc3J3LCByZWcsIG1tcmVnLCBpbW0pCisjZGVmaW5lCXBpbnNyd19yMnIocmVnLCBtbXJlZywgaW1tKQltbXhfcjJyaShwaW5zcncsIHJlZywgbW1yZWcsIGltbSkKIAotI2RlZmluZSAgICAgICAgIHBtYXhzd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWF4c3csIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtYXhzd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWF4c3csIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBtYXhzd19tMnIodmFyLCByZWcpCW1teF9tMnIocG1heHN3LCB2YXIsIHJlZykKKyNkZWZpbmUJcG1heHN3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtYXhzdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBtYXh1Yl9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWF4dWIsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtYXh1Yl9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWF4dWIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBtYXh1Yl9tMnIodmFyLCByZWcpCW1teF9tMnIocG1heHViLCB2YXIsIHJlZykKKyNkZWZpbmUJcG1heHViX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtYXh1YiwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBtaW5zd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWluc3csIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtaW5zd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWluc3csIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBtaW5zd19tMnIodmFyLCByZWcpCW1teF9tMnIocG1pbnN3LCB2YXIsIHJlZykKKyNkZWZpbmUJcG1pbnN3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtaW5zdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBtaW51Yl9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWludWIsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtaW51Yl9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWludWIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBtaW51Yl9tMnIodmFyLCByZWcpCW1teF9tMnIocG1pbnViLCB2YXIsIHJlZykKKyNkZWZpbmUJcG1pbnViX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtaW51YiwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBtb3Ztc2tiKG1tcmVnLHJlZykgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdm1za3BzICUiICNtbXJlZyAiLCAlIiAjcmVnKQorI2RlZmluZQlwbW92bXNrYihtbXJlZywgcmVnKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3Ztc2twcyAlIiAjbW1yZWcgIiwgJSIgI3JlZykKIAotI2RlZmluZSAgICAgICAgIHBtdWxodXdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwbXVsaHV3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwbXVsaHV3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocG11bGh1dywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG11bGh1d19tMnIodmFyLCByZWcpCW1teF9tMnIocG11bGh1dywgdmFyLCByZWcpCisjZGVmaW5lCXBtdWxodXdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG11bGh1dywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHByZWZldGNodDAobWVtKSAgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgdDApCi0jZGVmaW5lICAgICAgICAgcHJlZmV0Y2h0MShtZW0pICAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCB0MSkKLSNkZWZpbmUgICAgICAgICBwcmVmZXRjaHQyKG1lbSkgICAgICAgICAgICAgbW14X2ZldGNoIChtZW0sIHQyKQotI2RlZmluZSAgICAgICAgIHByZWZldGNobnRhKG1lbSkgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgbnRhKQorI2RlZmluZQlwcmVmZXRjaHQwKG1lbSkJCW1teF9mZXRjaChtZW0sIHQwKQorI2RlZmluZQlwcmVmZXRjaHQxKG1lbSkJCW1teF9mZXRjaChtZW0sIHQxKQorI2RlZmluZQlwcmVmZXRjaHQyKG1lbSkJCW1teF9mZXRjaChtZW0sIHQyKQorI2RlZmluZQlwcmVmZXRjaG50YShtZW0pCW1teF9mZXRjaChtZW0sIG50YSkKIAotI2RlZmluZSAgICAgICAgIHBzYWRid19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwc2FkYncsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzYWRid19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwc2FkYncsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzYWRid19tMnIodmFyLCByZWcpCW1teF9tMnIocHNhZGJ3LCB2YXIsIHJlZykKKyNkZWZpbmUJcHNhZGJ3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzYWRidywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBzaHVmd19tMnIodmFyLHJlZyxpbW0pICAgICBtbXhfbTJyaShwc2h1ZncsIHZhciwgcmVnLCBpbW0pCi0jZGVmaW5lICAgICAgICAgcHNodWZ3X3IycihyZWdzLHJlZ2QsaW1tKSAgIG1teF9yMnJpKHBzaHVmdywgcmVncywgcmVnZCwgaW1tKQorI2RlZmluZQlwc2h1ZndfbTJyKHZhciwgcmVnLCBpbW0pCW1teF9tMnJpKHBzaHVmdywgdmFyLCByZWcsIGltbSkKKyNkZWZpbmUJcHNodWZ3X3IycihyZWdzLCByZWdkLCBpbW0pCW1teF9yMnJpKHBzaHVmdywgcmVncywgcmVnZCwgaW1tKQogCi0jZGVmaW5lICAgICAgICAgc2ZlbmNlKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzZmVuY2Vcblx0IikKKyNkZWZpbmUJc2ZlbmNlKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzZmVuY2Vcblx0IikKIAogLyogU1NFMiAqLwotI2RlZmluZSAgICAgICAgIHBzaHVmaHdfbTJyKHZhcixyZWcsaW1tKSAgICBtbXhfbTJyaShwc2h1Zmh3LCB2YXIsIHJlZywgaW1tKQotI2RlZmluZSAgICAgICAgIHBzaHVmaHdfcjJyKHJlZ3MscmVnZCxpbW0pICBtbXhfcjJyaShwc2h1Zmh3LCByZWdzLCByZWdkLCBpbW0pCi0jZGVmaW5lICAgICAgICAgcHNodWZsd19tMnIodmFyLHJlZyxpbW0pICAgIG1teF9tMnJpKHBzaHVmbHcsIHZhciwgcmVnLCBpbW0pCi0jZGVmaW5lICAgICAgICAgcHNodWZsd19yMnIocmVncyxyZWdkLGltbSkgIG1teF9yMnJpKHBzaHVmbHcsIHJlZ3MsIHJlZ2QsIGltbSkKKyNkZWZpbmUJcHNodWZod19tMnIodmFyLCByZWcsIGltbSkJbW14X20ycmkocHNodWZodywgdmFyLCByZWcsIGltbSkKKyNkZWZpbmUJcHNodWZod19yMnIocmVncywgcmVnZCwgaW1tKQltbXhfcjJyaShwc2h1Zmh3LCByZWdzLCByZWdkLCBpbW0pCisjZGVmaW5lCXBzaHVmbHdfbTJyKHZhciwgcmVnLCBpbW0pCW1teF9tMnJpKHBzaHVmbHcsIHZhciwgcmVnLCBpbW0pCisjZGVmaW5lCXBzaHVmbHdfcjJyKHJlZ3MsIHJlZ2QsIGltbSkJbW14X3IycmkocHNodWZsdywgcmVncywgcmVnZCwgaW1tKQogCi0jZGVmaW5lICAgICAgICAgcHNodWZkX3IycihyZWdzLHJlZ2QsaW1tKSAgIG1teF9yMnJpKHBzaHVmZCwgcmVncywgcmVnZCwgaW1tKQorI2RlZmluZQlwc2h1ZmRfcjJyKHJlZ3MsIHJlZ2QsIGltbSkJbW14X3IycmkocHNodWZkLCByZWdzLCByZWdkLCBpbW0pCiAKLSNkZWZpbmUgICAgICAgICBtb3ZkcWFfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAobW92ZHFhLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBtb3ZkcWFfcjJtKHJlZyx2YXIpICAgICAgICAgbW14X3IybSAobW92ZHFhLCByZWcsIHZhcikKLSNkZWZpbmUgICAgICAgICBtb3ZkcWFfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAobW92ZHFhLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIG1vdmRxdV9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChtb3ZkcXUsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIG1vdmRxdV9yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChtb3ZkcXUsIHJlZywgdmFyKQotI2RlZmluZSAgICAgICAgIG1vdmRxdV9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChtb3ZkcXUsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCW1vdmRxYV9tMnIodmFyLCByZWcpCW1teF9tMnIobW92ZHFhLCB2YXIsIHJlZykKKyNkZWZpbmUJbW92ZHFhX3IybShyZWcsIHZhcikJbW14X3IybShtb3ZkcWEsIHJlZywgdmFyKQorI2RlZmluZQltb3ZkcWFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIobW92ZHFhLCByZWdzLCByZWdkKQorI2RlZmluZQltb3ZkcXVfbTJyKHZhciwgcmVnKQltbXhfbTJyKG1vdmRxdSwgdmFyLCByZWcpCisjZGVmaW5lCW1vdmRxdV9yMm0ocmVnLCB2YXIpCW1teF9yMm0obW92ZHF1LCByZWcsIHZhcikKKyNkZWZpbmUJbW92ZHF1X3IycihyZWdzLCByZWdkKQltbXhfcjJyKG1vdmRxdSwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBtdWxsd19yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChwbXVsbHcsIHJlZywgdmFyKQorI2RlZmluZQlwbXVsbHdfcjJtKHJlZywgdmFyKQltbXhfcjJtKHBtdWxsdywgcmVnLCB2YXIpCiAKLSNkZWZpbmUgICAgICAgICBwc2xsZHFfaTJyKGltbSxyZWcpICAgICAgICAgbW14X2kyciAocHNsbGRxLCBpbW0sIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3JsZHFfaTJyKGltbSxyZWcpICAgICAgICAgbW14X2kyciAocHNybGRxLCBpbW0sIHJlZykKKyNkZWZpbmUJcHNsbGRxX2kycihpbW0sIHJlZykJbW14X2kycihwc2xsZHEsIGltbSwgcmVnKQorI2RlZmluZQlwc3JsZHFfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzcmxkcSwgaW1tLCByZWcpCiAKLSNkZWZpbmUgICAgICAgICBwdW5wY2tscWRxX3IycihyZWdzLHJlZ2QpICAgbW14X3IyciAocHVucGNrbHFkcSwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwdW5wY2tocWRxX3IycihyZWdzLHJlZ2QpICAgbW14X3IyciAocHVucGNraHFkcSwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHVucGNrbHFkcV9yMnIocmVncywgcmVnZCkJbW14X3IycihwdW5wY2tscWRxLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2tocWRxX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB1bnBja2hxZHEsIHJlZ3MsIHJlZ2QpCiAKICNlbmRpZiAvKiBBVkNPREVDX0kzODZNTVhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9CZW5jaG1hcmsuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvQmVuY2htYXJrLmgKaW5kZXggNjJkZWUzYi4uNGNjMDFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9CZW5jaG1hcmsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0JlbmNobWFyay5oCkBAIC03MywxMiArNzMsNiBAQAogCiAjaW5jbHVkZSAiZ2xvYmFsLmgiCiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTk9fT1NfKSAmJiAoREVWX1NZU1RFTSA9PSBfREVWX0dOVV9DRjU0OFhfKQotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0jZWxpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCi0KLS8vICAgICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2lmZGVmIENPTkZJR19DT0xERklSRQpAQCAtOTMsMTIgKzg3LDYgQEAKICNkZWZpbmUgQkVOQ0hNQVJLX01PRFVMRVMgICAgICAgICAgIDB4MDAwMDAwMDAKICNlbmRpZgogCi0jZWxzZQotICAgIC8vIGRpc2FibGUgQmVuY2htYXJraW5nCi0jdW5kZWYgQkVOQ0hNQVJLX01PRFVMRVMKLSNkZWZpbmUgQkVOQ0hNQVJLX01PRFVMRVMgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9EZWJ1Zy5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9EZWJ1Zy5oCmluZGV4IDA1ZGU5ZDUuLjg1MWEyMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRGVidWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0RlYnVnLmgKQEAgLTE2MywyNSArMTYzLDYgQEAKICNlbmRpZgogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmIChERVZfU1lTVEVNID09IF9ERVZfV0lOMzJfKSAmJiBkZWZpbmVkIChUUkFDRV9NU0cpCi0KLSAgICAvLyBGb3IgV0lOMzIgdGhlIG1hY3JvIERFQlVHX1RSQUNFMCBjYW4gYmUgZGVmaW5lZCBhcyBmdW5jdGlvbiBjYWxsIFRyYWNlTHZsKCkKLSAgICAvLyBvciBhcyBtYWNybyBUUkFDRSgpLgotICAgIC8vCi0gICAgLy8gSGVyZSB0aGUgcGFyYW1ldGVyICdsdmwnIGNhbiBiZSB1c2VkIHdpdGggbW9yZSB0aGFuIG9uZQotICAgIC8vIGRlYnVnLWxldmVsICh1c2luZyBPUikuCi0gICAgLy8KLSAgICAvLyBFeGFtcGxlOiBERUJVR19UUkFDRTEoREVCVUdfTFZMXzMwIHwgREVCVUdfTFZMXzAyLCAiSGVsbG8gJWQiLCBiQ291bnQpOwotCi0jZGVmaW5lIERFQlVHX1RSQUNFMChsdmwsc3RyKSAgICAgICAgICAgICAgIFRyYWNlTHZsKChsdmwpLHN0cikKLSNkZWZpbmUgREVCVUdfVFJBQ0UxKGx2bCxzdHIscDEpICAgICAgICAgICAgVHJhY2VMdmwoKGx2bCksc3RyLHAxKQotI2RlZmluZSBERUJVR19UUkFDRTIobHZsLHN0cixwMSxwMikgICAgICAgICBUcmFjZUx2bCgobHZsKSxzdHIscDEscDIpCi0jZGVmaW5lIERFQlVHX1RSQUNFMyhsdmwsc3RyLHAxLHAyLHAzKSAgICAgIFRyYWNlTHZsKChsdmwpLHN0cixwMSxwMixwMykKLSNkZWZpbmUgREVCVUdfVFJBQ0U0KGx2bCxzdHIscDEscDIscDMscDQpICAgVHJhY2VMdmwoKGx2bCksc3RyLHAxLHAyLHAzLHA0KQotI2RlZmluZSBERUJVR19HTEJfTFZMKCkgICAgICAgICAgICAgICAgICAgICBkd0RlYnVnTGV2ZWxfZwotCi0jZWxzZQotCiAgICAgLy8gQXQgbWljcm9jb250cm9sbGVycyB3ZSBkbyByZWR1Y2UgdGhlIG1lbW9yeSB1c2FnZSBieSBkZWxldGluZyBERUJVR19UUkFDRS1saW5lcwogICAgIC8vIChjb21waWxlciBkb2VzIGRlbGV0ZSB0aGUgbGluZXMpLgogICAgIC8vCkBAIC02NDMsMjUgKzYyNCwyMyBAQAogI2RlZmluZSBERUJVR19UUkFDRTMobHZsLHN0cixwMSxwMixwMykgICAgICAgICAgICAgICAgICBsdmwjI19UUkFDRTMoc3RyLHAxLHAyLHAzKQogI2RlZmluZSBERUJVR19UUkFDRTQobHZsLHN0cixwMSxwMixwMyxwNCkgICAgICAgICAgICAgICBsdmwjI19UUkFDRTQoc3RyLHAxLHAyLHAzLHA0KQogCi0jZW5kaWYKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFRoZSBtYWNybyBERUJVR19EVU1QX0RBVEEoKSBjYW4gYmUgdXNlZCB3aXRoIHRoZSBzYW1lIGRlYnVnLWxldmVscyB0byBkdW1wCiAvLyBvdXQgZGF0YSBieXRlcy4gRnVuY3Rpb24gRHVtcERhdGEoKSBoYXMgdG8gYmUgaW5jbHVkZWQuCiAvLyBOT1RFOiBEVU1QX0RBVEEgaGFzIHRvIGJlIGRlZmluZWQgaW4gcHJvamVjdCBzZXR0aW5ncy4KLSNpZiAoIWRlZmluZWQgKE5ERUJVRykgJiYgZGVmaW5lZCAoRFVNUF9EQVRBKSkgfHwgKERFVl9TWVNURU0gPT0gX0RFVl9XSU4zMl8pCisjaWYgKCFkZWZpbmVkIChOREVCVUcpICYmIGRlZmluZWQgKERVTVBfREFUQSkpCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotCXZvaWQgRHVtcERhdGEoY2hhciAqc3pTdHJfcCwgQllURSBNRU0gKiBwYkRhdGFfcCwgV09SRCB3U2l6ZV9wKTsKKwl2b2lkIER1bXBEYXRhKGNoYXIgKnN6U3RyX3AsIHU4ICpwYkRhdGFfcCwgdTE2IHdTaXplX3ApOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0JCQkJLy8gdm9uIGV4dGVybiAiQyIKICNlbmRpZgogI2RlZmluZSBERUJVR19EVU1QX0RBVEEobHZsLHN0cixwdHIsc2l6KSAgICBpZiAoKERFQlVHX0dMQl9MVkwoKSAmIChsdmwpKT09KGx2bCkpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdW1wRGF0YSAoc3RyLCAoQllURSBNRU0qKSAocHRyKSwgKFdPUkQpIChzaXopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdW1wRGF0YSAoc3RyLCAodTggKikocHRyKSwgKHUxNikoc2l6KSk7CiAjZWxzZQogCiAjZGVmaW5lIERFQlVHX0RVTVBfREFUQShsdmwsc3RyLHB0cixzaXopCkBAIC02NzUsMjQgKzY1NCw2IEBACiAvLyAgICAgICBkZWxldGVkIGZyb20gY29tcGlsZXIgKGluIHJlbGVhc2UgdmVyc2lvbiB0b28pLgogI2lmICFkZWZpbmVkIChOREVCVUcpIHx8IGRlZmluZWQgKERFQlVHX0tFRVBfQVNTRVJUKQogCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9XSU4zMl8pCi0KLQkvLyBGb3IgV0lOMzIgcHJvY2VzcyB3aWxsIGJlIGtpbGxlZCBhZnRlciBjbG9zaW5nIG1lc3NhZ2UgYm94LgotCi0jZGVmaW5lIERFQlVHX0FTU0VSVDAoZXhwcixzdHIpICAgICAgICAgaWYgKCEoZXhwciApICYmICgoREVCVUdfR0xCX0xWTCgpICYgREVCVUdfTFZMX0FTU0VSVCkhPTApKSB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlQm94IChOVUxMLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICIgX19MSU5FX18gIiBmaWxlICIgX19GSUxFX18gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4gICAgLT4gIiBzdHIgIlxuIik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGl0UHJvY2VzcyAoLTEpOyB9Ci0KLSNkZWZpbmUgREVCVUdfQVNTRVJUMShleHByLHN0cixwMSkgICAgICBpZiAoIShleHByICkgJiYgKChERUJVR19HTEJfTFZMKCkgJiBERUJVR19MVkxfQVNTRVJUKSE9MCkpIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VCb3ggKE5VTEwsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgIiBfX0xJTkVfXyAiIGZpbGUgIiBfX0ZJTEVfXyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICAtPiAiIHN0ciAiXG4iKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXRQcm9jZXNzICgtMSk7IH0KLQotI2Vsc2UKLQogCS8vIEZvciBtaWNyb2NvbnRyb2xsZXJzIHByb2Nlc3Mgd2lsbCBiZSBzdG9wcGVkIHVzaW5nIGVuZGxlc3MgbG9vcC4KIAogI2RlZmluZSBERUJVR19BU1NFUlQwKGV4cHIsc3RyKSAgICAgICAgIGlmICghKGV4cHIgKSkgeyBcCkBAIC03MDUsMTAgKzY2Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfTFZMX0FTU0VSVF9UUkFDRTQgKCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICVkIGZpbGUgJyVzJ1xuIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgLT4gJyVzJ1xuIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgLT4gMHglMDhsWFxuIiwgX19MSU5FX18sIF9fRklMRV9fLCBzdHIsIChEV09SRCkgcDEpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgLT4gMHglMDhsWFxuIiwgX19MSU5FX18sIF9fRklMRV9fLCBzdHIsICh1MzIpIHAxKTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKTsgfQogCi0jZW5kaWYKIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2ODEzOS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2ODEzOS5jCmluZGV4IDI5NjM1NGEuLjQ0ZTNmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydjgxMzkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnY4MTM5LmMKQEAgLTgxLDcgKzgxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTIzNCw4ICsyMzMsOCBAQAogCiAvLyBUcmFjZVBvaW50IHN1cHBvcnQgZm9yIHJlYWx0aW1lLWRlYnVnZ2luZwogI2lmZGVmIF9EQkdfVFJBQ0VfUE9JTlRTXwotdm9pZCBQVUJMSUMgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChCWVRFIGJUcmFjZVBvaW50TnVtYmVyX3ApOwotdm9pZCBQVUJMSUMgVGd0RGJnUG9zdFRyYWNlVmFsdWUoRFdPUkQgZHdUcmFjZVZhbHVlX3ApOwordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApOwordm9pZCBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh1MzIgZHdUcmFjZVZhbHVlX3ApOwogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKSAgIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQocCkKICNkZWZpbmUgVEdUX0RCR19QT1NUX1RSQUNFX1ZBTFVFKHYpICAgICBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh2KQogI2Vsc2UKQEAgLTI4Miw5ICsyODEsOSBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXN0cnVjdCBwY2lfZGV2ICptX3BQY2lEZXY7CS8vIHBvaW50ZXIgdG8gUENJIGRldmljZSBzdHJ1Y3R1cmUKIAl2b2lkICptX3BJb0FkZHI7CS8vIHBvaW50ZXIgdG8gcmVnaXN0ZXIgc3BhY2Ugb2YgRXRoZXJuZXQgY29udHJvbGxlcgotCUJZVEUgKm1fcGJSeEJ1ZjsJLy8gcG9pbnRlciB0byBSeCBidWZmZXIKKwl1OCAqbV9wYlJ4QnVmOwkvLyBwb2ludGVyIHRvIFJ4IGJ1ZmZlcgogCWRtYV9hZGRyX3QgbV9wUnhCdWZEbWE7Ci0JQllURSAqbV9wYlR4QnVmOwkvLyBwb2ludGVyIHRvIFR4IGJ1ZmZlcgorCXU4ICptX3BiVHhCdWY7CS8vIHBvaW50ZXIgdG8gVHggYnVmZmVyCiAJZG1hX2FkZHJfdCBtX3BUeEJ1ZkRtYTsKIAlCT09MIG1fYWZUeEJ1ZlVzZWRbRURSVl9NQVhfVFhfQlVGRkVSU107CiAJdW5zaWduZWQgaW50IG1fdWlDdXJUeERlc2M7CkBAIC0zNTksNyArMzU4LDcgQEAKIC8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBCWVRFIEVkcnZDYWxjSGFzaChCWVRFICogcGJNQUNfcCk7CitzdGF0aWMgdTggRWRydkNhbGNIYXNoKHU4ICogcGJNQUNfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtNDUzLDIwICs0NTIsMjAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIEVkcnZEZWZpbmVSeE1hY0FkZHJFbnRyeShCWVRFICogcGJNYWNBZGRyX3ApCit0RXBsS2VybmVsIEVkcnZEZWZpbmVSeE1hY0FkZHJFbnRyeSh1OCAqIHBiTWFjQWRkcl9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JRFdPUkQgZHdEYXRhOwotCUJZVEUgYkhhc2g7CisJdTMyIGR3RGF0YTsKKwl1OCBiSGFzaDsKIAogCWJIYXNoID0gRWRydkNhbGNIYXNoKHBiTWFjQWRkcl9wKTsKIC8qCiAgICAgZHdEYXRhID0gZXRoZXJfY3JjKDYsIHBiTWFjQWRkcl9wKTsKIAogICAgIHByaW50aygiRWRydkRlZmluZVJ4TWFjQWRkckVudHJ5KCclMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCcpIGhhc2ggPSAldSAvICV1ICBldGhlcl9jcmMgPSAweCUwOGxYXG4iLAotICAgICAgICAoV09SRCkgcGJNYWNBZGRyX3BbMF0sIChXT1JEKSBwYk1hY0FkZHJfcFsxXSwgKFdPUkQpIHBiTWFjQWRkcl9wWzJdLAotICAgICAgICAoV09SRCkgcGJNYWNBZGRyX3BbM10sIChXT1JEKSBwYk1hY0FkZHJfcFs0XSwgKFdPUkQpIHBiTWFjQWRkcl9wWzVdLAotICAgICAgICAoV09SRCkgYkhhc2gsIChXT1JEKSAoZHdEYXRhID4+IDI2KSwgZHdEYXRhKTsKKyAgICAgICAgKHUxNikgcGJNYWNBZGRyX3BbMF0sICh1MTYpIHBiTWFjQWRkcl9wWzFdLCAodTE2KSBwYk1hY0FkZHJfcFsyXSwKKyAgICAgICAgKHUxNikgcGJNYWNBZGRyX3BbM10sICh1MTYpIHBiTWFjQWRkcl9wWzRdLCAodTE2KSBwYk1hY0FkZHJfcFs1XSwKKyAgICAgICAgKHUxNikgYkhhc2gsICh1MTYpIChkd0RhdGEgPj4gMjYpLCBkd0RhdGEpOwogKi8KIAlpZiAoYkhhc2ggPiAzMSkgewogCQlkd0RhdGEgPSBFRFJWX1JFR0RXX1JFQUQoRURSVl9SRUdEV19NQVI0KTsKQEAgLTQ5NCwxMSArNDkzLDExIEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBFZHJ2VW5kZWZpbmVSeE1hY0FkZHJFbnRyeShCWVRFICogcGJNYWNBZGRyX3ApCit0RXBsS2VybmVsIEVkcnZVbmRlZmluZVJ4TWFjQWRkckVudHJ5KHU4ICogcGJNYWNBZGRyX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQlEV09SRCBkd0RhdGE7Ci0JQllURSBiSGFzaDsKKwl1MzIgZHdEYXRhOworCXU4IGJIYXNoOwogCiAJYkhhc2ggPSBFZHJ2Q2FsY0hhc2gocGJNYWNBZGRyX3ApOwogCkBAIC01MzIsNyArNTMxLDcgQEAKIHRFcGxLZXJuZWwgRWRydkFsbG9jVHhNc2dCdWZmZXIodEVkcnZUeEJ1ZmZlciAqIHBCdWZmZXJfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwotCURXT1JEIGk7CisJdTMyIGk7CiAKIAlpZiAocEJ1ZmZlcl9wLT5tX3VpTWF4QnVmZmVyTGVuID4gRURSVl9NQVhfRlJBTUVfU0laRSkgewogCQlSZXQgPSBrRXBsRWRydk5vRnJlZUJ1ZkVudHJ5OwpAQCAtNjA1LDcgKzYwNCw3IEBACiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl1bnNpZ25lZCBpbnQgdWlCdWZmZXJOdW1iZXI7Ci0JRFdPUkQgZHdUZW1wOworCXUzMiBkd1RlbXA7CiAKIAl1aUJ1ZmZlck51bWJlciA9IHBCdWZmZXJfcC0+bV91aUJ1ZmZlck51bWJlcjsKIApAQCAtNjIwLDExICs2MTksMTEgQEAKIAkJZHdUZW1wID0KIAkJICAgIEVEUlZfUkVHRFdfUkVBRCgoRURSVl9SRUdEV19UU0QwICsKIAkJCQkgICAgIChFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjICoKLQkJCQkgICAgICBzaXplb2YoRFdPUkQpKSkpOwotCQlwcmludGsoIiVzIEludk9wIFRTRCV1ID0gMHglMDhsWCIsIF9fZnVuY19fLAorCQkJCSAgICAgIHNpemVvZih1MzIpKSkpOworCQlwcmludGsoIiVzIEludk9wIFRTRCV1ID0gMHglMDhYIiwgX19mdW5jX18sCiAJCSAgICAgICBFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjLCBkd1RlbXApOwogCQlwcmludGsoIiAgQ21kID0gMHglMDJYXG4iLAotCQkgICAgICAgKFdPUkQpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CisJCSAgICAgICAodTE2KSBFRFJWX1JFR0JfUkVBRChFRFJWX1JFR0JfQ09NTUFORCkpOwogCQlnb3RvIEV4aXQ7CiAJfQogCS8vIHNhdmUgcG9pbnRlciB0byBidWZmZXIgc3RydWN0dXJlIGZvciBUeEhhbmRsZXIKQEAgLTY0MCwyMiArNjM5LDIyIEBACiAJfQogCS8vIHNldCBETUEgYWRkcmVzcyBvZiBidWZmZXIKIAlFRFJWX1JFR0RXX1dSSVRFKChFRFJWX1JFR0RXX1RTQUQwICsKLQkJCSAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YoRFdPUkQpKSksCisJCQkgIChFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjICogc2l6ZW9mKHUzMikpKSwKIAkJCSAoRWRydkluc3RhbmNlX2wubV9wVHhCdWZEbWEgKwogCQkJICAodWlCdWZmZXJOdW1iZXIgKiBFRFJWX01BWF9GUkFNRV9TSVpFKSkpOwogCWR3VGVtcCA9CiAJICAgIEVEUlZfUkVHRFdfUkVBRCgoRURSVl9SRUdEV19UU0FEMCArCi0JCQkgICAgIChFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjICogc2l6ZW9mKERXT1JEKSkpKTsKKwkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YodTMyKSkpKTsKIC8vICAgIHByaW50aygiJXMgVFNBRCV1ID0gMHglMDhsWCIsIF9fZnVuY19fLCBFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjLCBkd1RlbXApOwogCiAJLy8gc3RhcnQgdHJhbnNtaXNzaW9uCiAJRURSVl9SRUdEV19XUklURSgoRURSVl9SRUdEV19UU0QwICsKLQkJCSAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YoRFdPUkQpKSksCisJCQkgIChFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjICogc2l6ZW9mKHUzMikpKSwKIAkJCSAoRURSVl9SRUdEV19UU0RfVFhUSF9ERUYgfCBwQnVmZmVyX3AtPm1fdWlUeE1zZ0xlbikpOwogCWR3VGVtcCA9CiAJICAgIEVEUlZfUkVHRFdfUkVBRCgoRURSVl9SRUdEV19UU0QwICsKLQkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YoRFdPUkQpKSkpOwotLy8gICAgcHJpbnRrKCIgVFNEJXUgPSAweCUwOGxYIC8gMHglMDhsWFxuIiwgRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYywgZHdUZW1wLCAoRFdPUkQpKEVEUlZfUkVHRFdfVFNEX1RYVEhfREVGIHwgcEJ1ZmZlcl9wLT5tX3VpVHhNc2dMZW4pKTsKKwkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YodTMyKSkpKTsKKy8vICAgIHByaW50aygiIFRTRCV1ID0gMHglMDhsWCAvIDB4JTA4bFhcbiIsIEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MsIGR3VGVtcCwgKHUzMikoRURSVl9SRUdEV19UU0RfVFhUSF9ERUYgfCBwQnVmZmVyX3AtPm1fdWlUeE1zZ0xlbikpOwogCiAgICAgICBFeGl0OgogCXJldHVybiBSZXQ7CkBAIC03MjAsNyArNzE5LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzdGF0aWMgdm9pZCBFZHJ2UmVpbml0Ungodm9pZCkKIHsKLQlCWVRFIGJDbWQ7CisJdTggYkNtZDsKIAogCS8vIHNpbXBseSBzd2l0Y2ggb2ZmIGFuZCBvbiB0aGUgcmVjZWl2ZXIKIAkvLyB0aGlzIHdpbGwgcmVzZXQgdGhlIENBUFIgcmVnaXN0ZXIKQEAgLTc1MSwyMSArNzUwLDE2IEBACiB9CiAjZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTkpCiBzdGF0aWMgaW50IFRndEV0aElzcihpbnQgbklycU51bV9wLCB2b2lkICpwcERldkluc3REYXRhX3ApCi0jZWxzZQotc3RhdGljIGludCBUZ3RFdGhJc3IoaW50IG5JcnFOdW1fcCwgdm9pZCAqcHBEZXZJbnN0RGF0YV9wLAotCQkgICAgIHN0cnVjdCBwdF9yZWdzICpwdFJlZ3NfcCkKLSNlbmRpZgogewogLy8gICAgRWRydkludGVycnVwdEhhbmRsZXIoKTsKIAl0RWRydlJ4QnVmZmVyIFJ4QnVmZmVyOwogCXRFZHJ2VHhCdWZmZXIgKnBUeEJ1ZmZlcjsKLQlXT1JEIHdTdGF0dXM7Ci0JRFdPUkQgZHdUeFN0YXR1czsKLQlEV09SRCBkd1J4U3RhdHVzOwotCVdPUkQgd0N1clJ4OwotCUJZVEUgKnBiUnhCdWY7CisJdTE2IHdTdGF0dXM7CisJdTMyIGR3VHhTdGF0dXM7CisJdTMyIGR3UnhTdGF0dXM7CisJdTE2IHdDdXJSeDsKKwl1OCAqcGJSeEJ1ZjsKIAl1bnNpZ25lZCBpbnQgdWlMZW5ndGg7CiAJaW50IGlIYW5kbGVkID0gSVJRX0hBTkRMRUQ7CiAKQEAgLTc5Myw3ICs3ODcsNyBAQAogCQlkd1R4U3RhdHVzID0KIAkJICAgIEVEUlZfUkVHRFdfUkVBRCgoRURSVl9SRUdEV19UU0QwICsKIAkJCQkgICAgIChFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjICoKLQkJCQkgICAgICBzaXplb2YoRFdPUkQpKSkpOworCQkJCSAgICAgIHNpemVvZih1MzIpKSkpOwogCQlpZiAoKGR3VHhTdGF0dXMgJiAoRURSVl9SRUdEV19UU0RfVE9LIHwgRURSVl9SRUdEV19UU0RfVEFCVCB8IEVEUlZfUkVHRFdfVFNEX1RVTikpICE9IDApIHsJLy8gdHJhbnNtaXQgZmluaXNoZWQKIAkJCUVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgPQogCQkJICAgIChFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjICsgMSkgJiAweDAzOwpAQCAtODU1LDggKzg0OSw4IEBACiAJCQkvLyBjYWxjdWxhdGUgcG9pbnRlciB0byBjdXJyZW50IGZyYW1lIGluIHJlY2VpdmUgYnVmZmVyCiAJCQlwYlJ4QnVmID0gRWRydkluc3RhbmNlX2wubV9wYlJ4QnVmICsgd0N1clJ4OwogCi0JCQkvLyByZWFkIHJlY2VpdmUgc3RhdHVzIERXT1JECi0JCQlkd1J4U3RhdHVzID0gbGUzMl90b19jcHUoKigoRFdPUkQgKikgcGJSeEJ1ZikpOworCQkJLy8gcmVhZCByZWNlaXZlIHN0YXR1cyB1MzIKKwkJCWR3UnhTdGF0dXMgPSBsZTMyX3RvX2NwdSgqKCh1MzIgKikgcGJSeEJ1ZikpOwogCiAJCQkvLyBjYWxjdWxhdGUgbGVuZ3RoIG9mIHJlY2VpdmVkIGZyYW1lCiAJCQl1aUxlbmd0aCA9IGR3UnhTdGF0dXMgPj4gMTY7CkBAIC04OTYsOSArODkwLDkgQEAKIAkJCQkgICAgbV9wZm5SeEhhbmRsZXIoJlJ4QnVmZmVyKTsKIAkJCX0KIAotCQkJLy8gY2FsdWxhdGUgbmV3IG9mZnNldCAoRFdPUkQgYWxpZ25lZCkKKwkJCS8vIGNhbHVsYXRlIG5ldyBvZmZzZXQgKHUzMiBhbGlnbmVkKQogCQkJd0N1clJ4ID0KLQkJCSAgICAoV09SRCkgKCh3Q3VyUnggKyB1aUxlbmd0aCArIHNpemVvZihkd1J4U3RhdHVzKSArCisJCQkgICAgKHUxNikgKCh3Q3VyUnggKyB1aUxlbmd0aCArIHNpemVvZihkd1J4U3RhdHVzKSArCiAJCQkJICAgICAzKSAmIH4weDMpOwogCQkJRURSVl9UUkFDRV9DQVBSKHdDdXJSeCAtIDB4MTApOwogCQkJRURSVl9SRUdXX1dSSVRFKEVEUlZfUkVHV19DQVBSLCB3Q3VyUnggLSAweDEwKTsKQEAgLTk0MSw3ICs5MzUsNyBAQAogc3RhdGljIGludCBFZHJ2SW5pdE9uZShzdHJ1Y3QgcGNpX2RldiAqcFBjaURldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBJZCkKIHsKIAlpbnQgaVJlc3VsdCA9IDA7Ci0JRFdPUkQgZHdUZW1wOworCXUzMiBkd1RlbXA7CiAKIAlpZiAoRWRydkluc3RhbmNlX2wubV9wUGNpRGV2ICE9IE5VTEwpIHsJLy8gRWRydiBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIFBDSSBkZXZpY2UKIAkJcHJpbnRrKCIlcyBkZXZpY2UgJXMgZGlzY2FyZGVkXG4iLCBfX2Z1bmNfXywKQEAgLTEwMDgsNyArMTAwMiw3IEBACiAJZHdUZW1wID0gRURSVl9SRUdEV19SRUFEKEVEUlZfUkVHRFdfVENSKTsKIAlpZiAoKChkd1RlbXAgJiBFRFJWX1JFR0RXX1RDUl9WRVJfTUFTSykgIT0gRURSVl9SRUdEV19UQ1JfVkVSX0MpCiAJICAgICYmICgoZHdUZW1wICYgRURSVl9SRUdEV19UQ1JfVkVSX01BU0spICE9IEVEUlZfUkVHRFdfVENSX1ZFUl9EKSkgewkvLyB1bnN1cHBvcnRlZCBjaGlwCi0JCXByaW50aygiJXMgVW5zdXBwb3J0ZWQgY2hpcCEgVENSID0gMHglMDhsWFxuIiwgX19mdW5jX18sCisJCXByaW50aygiJXMgVW5zdXBwb3J0ZWQgY2hpcCEgVENSID0gMHglMDhYXG4iLCBfX2Z1bmNfXywKIAkJICAgICAgIGR3VGVtcCk7CiAJCWlSZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIEV4aXQ7CkBAIC0xMDQzLDExICsxMDM3LDExIEBACiAgICAgICAgICAgICBwcmludGsoIiVzIHNldCBsb2NhbCBNQUMgYWRkcmVzc1xuIiwgX19mdW5jX18pOwogICAgICAgICAgICAgLy8gd3JpdGUgdGhpcyBNQUMgYWRkcmVzcyB0byBjb250cm9sbGVyCiAgICAgICAgICAgICBFRFJWX1JFR0RXX1dSSVRFKEVEUlZfUkVHRFdfSURSMCwKLSAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSgqKChEV09SRCopJkVkcnZJbnN0YW5jZV9sLm1fSW5pdFBhcmFtLm1fYWJNeU1hY0FkZHJbMF0pKSk7CisgICAgICAgICAgICAgICAgbGUzMl90b19jcHUoKigodTMyKikmRWRydkluc3RhbmNlX2wubV9Jbml0UGFyYW0ubV9hYk15TWFjQWRkclswXSkpKTsKICAgICAgICAgICAgIGR3VGVtcCA9IEVEUlZfUkVHRFdfUkVBRChFRFJWX1JFR0RXX0lEUjApOwogCiAgICAgICAgICAgICBFRFJWX1JFR0RXX1dSSVRFKEVEUlZfUkVHRFdfSURSNCwKLSAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSgqKChEV09SRCopJkVkcnZJbnN0YW5jZV9sLm1fSW5pdFBhcmFtLm1fYWJNeU1hY0FkZHJbNF0pKSk7CisgICAgICAgICAgICAgICAgbGUzMl90b19jcHUoKigodTMyKikmRWRydkluc3RhbmNlX2wubV9Jbml0UGFyYW0ubV9hYk15TWFjQWRkcls0XSkpKTsKICAgICAgICAgICAgIGR3VGVtcCA9IEVEUlZfUkVHRFdfUkVBRChFRFJWX1JFR0RXX0lEUjQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEwODcsNyArMTA4MSw3IEBACiAJZHdUZW1wID0gRURSVl9SRUdEV19SRUFEKEVEUlZfUkVHRFdfVFNBRDMpOwogCiAJcHJpbnRrKCIgICAgQ29tbWFuZCA9IDB4JTAyWFxuIiwKLQkgICAgICAgKFdPUkQpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CisJICAgICAgICh1MTYpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CiAKIAkvLyBzZXQgcG9pbnRlciBmb3IgcmVjZWl2ZSBidWZmZXIgaW4gY29udHJvbGxlcgogCXByaW50aygiJXMgc2V0IHBvaW50ZXIgdG8gUnggYnVmZmVyXG4iLCBfX2Z1bmNfXyk7CkBAIC0xMDk4LDcgKzEwOTIsNyBAQAogCUVEUlZfUkVHQl9XUklURShFRFJWX1JFR0JfQ09NTUFORCwKIAkJCShFRFJWX1JFR0JfQ09NTUFORF9SRSB8IEVEUlZfUkVHQl9DT01NQU5EX1RFKSk7CiAJcHJpbnRrKCIgIENvbW1hbmQgPSAweCUwMlhcbiIsCi0JICAgICAgIChXT1JEKSBFRFJWX1JFR0JfUkVBRChFRFJWX1JFR0JfQ09NTUFORCkpOworCSAgICAgICAodTE2KSBFRFJWX1JFR0JfUkVBRChFRFJWX1JFR0JfQ09NTUFORCkpOwogCiAJLy8gY2xlYXIgbWlzc2VkIHBhY2tldCBjb3VudGVyIHRvIGVuYWJsZSBSeC9UeCBwcm9jZXNzCiAJRURSVl9SRUdEV19XUklURShFRFJWX1JFR0RXX01QQywgMCk7CkBAIC0xMTIzLDcgKzExMTcsNyBAQAogICAgIC8vIGVuYWJsZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIKICAgICBwcmludGsoIiVzIGVuYWJsZSBUeCBhbmQgUngiLCBfX2Z1bmNfXyk7CiAgICAgRURSVl9SRUdCX1dSSVRFKEVEUlZfUkVHQl9DT01NQU5ELCAoRURSVl9SRUdCX0NPTU1BTkRfUkUgfCBFRFJWX1JFR0JfQ09NTUFORF9URSkpOwotICAgIHByaW50aygiICBDb21tYW5kID0gMHglMDJYXG4iLCAoV09SRCkgRURSVl9SRUdCX1JFQUQoRURSVl9SRUdCX0NPTU1BTkQpKTsKKyAgICBwcmludGsoIiAgQ29tbWFuZCA9IDB4JTAyWFxuIiwgKHUxNikgRURSVl9SRUdCX1JFQUQoRURSVl9SRUdCX0NPTU1BTkQpKTsKICovCiAJLy8gZGlzYWJsZSBlYXJseSBpbnRlcnJ1cHRzCiAJRURSVl9SRUdXX1dSSVRFKEVEUlZfUkVHV19NVUxJTlQsIDApOwpAQCAtMTIxNSwxNSArMTIwOSwxNSBAQAogLy8jZGVmaW5lIENSQzMyX1BPTFkgICAgMHhFREI4ODMyMCAgLy8KIC8vIEcoeCkgPSB4MzIgKyB4MjYgKyB4MjMgKyB4MjIgKyB4MTYgKyB4MTIgKyB4MTEgKyB4MTAgKyB4OCArIHg3ICsgeDUgKyB4NCArIHgyICsgeCArIDEKIAotc3RhdGljIEJZVEUgRWRydkNhbGNIYXNoKEJZVEUgKiBwYk1BQ19wKQorc3RhdGljIHU4IEVkcnZDYWxjSGFzaCh1OCAqIHBiTUFDX3ApCiB7Ci0JRFdPUkQgZHdCeXRlQ291bnRlcjsKLQlEV09SRCBkd0JpdENvdW50ZXI7Ci0JRFdPUkQgZHdEYXRhOwotCURXT1JEIGR3Q3JjOwotCURXT1JEIGR3Q2Fycnk7Ci0JQllURSAqcGJEYXRhOwotCUJZVEUgYkhhc2g7CisJdTMyIGR3Qnl0ZUNvdW50ZXI7CisJdTMyIGR3Qml0Q291bnRlcjsKKwl1MzIgZHdEYXRhOworCXUzMiBkd0NyYzsKKwl1MzIgZHdDYXJyeTsKKwl1OCAqcGJEYXRhOworCXU4IGJIYXNoOwogCiAJcGJEYXRhID0gcGJNQUNfcDsKIApAQCAtMTI0Niw3ICsxMjQwLDcgQEAKIC8vICAgIHByaW50aygiTXlDUkMgPSAweCUwOGxYXG4iLCBkd0NyYyk7CiAJLy8gb25seSB1cHBlciA2IGJpdHMgKEhBU0hfQklUUykgYXJlIHVzZWQKIAkvLyB3aGljaCBwb2ludCB0byBzcGVjaWZpYyBiaXQgaW4gdGhlIGhhc2ggcmVnaXN0ZXJzCi0JYkhhc2ggPSAoQllURSkgKChkd0NyYyA+PiAoMzIgLSBIQVNIX0JJVFMpKSAmIDB4M2YpOworCWJIYXNoID0gKHU4KSAoKGR3Q3JjID4+ICgzMiAtIEhBU0hfQklUUykpICYgMHgzZik7CiAKIAlyZXR1cm4gYkhhc2g7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnZGZWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydkZlYy5oCmluZGV4IDVmMjUyZmIuLjU2NzI4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydkZlYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydkZlYy5oCkBAIC05Niw5ICs5Niw5IEBACiAKIC8vIFJ4IGFuZCBUeCBidWZmZXIgZGVzY3JpcHRvciBmb3JtYXQKIHR5cGVkZWYgc3RydWN0IHsKLQlXT1JEIG1fd1N0YXR1czsJCS8vIGNvbnRyb2wgLyBzdGF0dXMgIC0tLSAgdXNlZCBieSBlZHJ2LCBkbyBub3QgY2hhbmdlIGluIGFwcGxpY2F0aW9uCi0JV09SRCBtX3dMZW5ndGg7CQkvLyB0cmFuc2ZlciBsZW5ndGgKLQlCWVRFICptX3BiRGF0YTsJCS8vIGJ1ZmZlciBhZGRyZXNzCisJdTE2IG1fd1N0YXR1czsJCS8vIGNvbnRyb2wgLyBzdGF0dXMgIC0tLSAgdXNlZCBieSBlZHJ2LCBkbyBub3QgY2hhbmdlIGluIGFwcGxpY2F0aW9uCisJdTE2IG1fd0xlbmd0aDsJCS8vIHRyYW5zZmVyIGxlbmd0aAorCXU4ICptX3BiRGF0YTsJCS8vIGJ1ZmZlciBhZGRyZXNzCiB9IHRCdWZmZXJEZXNjcjsKIAogI2lmICgoVEFSR0VUX0hBUkRXQVJFICYgVEdUX0NQVV9NQVNLXykgPT0gVEdUX0NQVV81MjgyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjNTI4Mi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjNTI4Mi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTZiYjFkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydkZlYzUyODIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgb3BlblBPV0VSTElOSwotCi0gIERlc2NyaXB0aW9uOiAgaW50ZXJmYWNlIGZvciBldGhlcm5ldGRyaXZlcgotICAgICAgICAgICAgICAgICJmYXN0IGV0aGVybmV0IGNvbnRyb2xsZXIiIChGRUMpCi0gICAgICAgICAgICAgICAgZnJlZXNjYWxlIGNvbGRmaXJlIE1DRjUyOHggYW5kIGNvbXBhdGlibGUgRkVDCi0KLSAgTGljZW5zZToKLQotICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICAgIGFyZSBtZXQ6Ci0KLSAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAgICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgotCi0gICAgICAgIElmIGEgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBvciBiZWNvbWVzIGlsbGVnYWwsIGludmFsaWQgb3IKLSAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6Ci0gICAgICAgIDEuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiB0aGF0IGp1cmlzZGljdGlvbiBvZiBhbnkgb3RoZXIKLSAgICAgICAgICAgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZTsgb3IKLSAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgotICAgICAgICAgICBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZS4KLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgICAgICAgICAkUkNTZmlsZTogRWRydkZlYzUyODIuaCx2ICQKLQotICAgICAgICAgICAgICAgICRBdXRob3I6IEQuS3J1ZWdlciAkCi0KLSAgICAgICAgICAgICAgICAkUmV2aXNpb246IDEuMyAkICAkRGF0ZTogMjAwOC8wNC8xNyAyMTozNjozMiAkCi0KLSAgICAgICAgICAgICAgICAkU3RhdGU6IEV4cCAkCi0KLSAgICAgICAgICAgICAgICBCdWlsZCBFbnZpcm9ubWVudDoKLSAgICAgICAgICAgICAgICBEZXYgQysrIGFuZCBHTlUtQ29tcGlsZXIgZm9yIG02OGsKLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgUmV2aXNpb24gSGlzdG9yeToKLQotICAyMDA1LzA4LzAxIG0uYi46ICAgc3RhcnQgb2YgaW1wbGVtZW50YXRpb24KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfRURSVkZFQ19IXwotI2RlZmluZSBfRURSVkZFQ19IXwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGJhc2UgYWRkcmVzc2VzCi0jZGVmaW5lIEZFQzBfQUREUiAweDAwMDAKLSNkZWZpbmUgRkVDMV9BRERSIDB4MDAwMAkvL3RiZAotCi0vLyBjb250cm9sIC8gc3RhdHVzIHJlZ2lzdGVycwotI2RlZmluZSBGRUNfRUlSICAgICAgICAgICAgICAgICAweDEwMDQJLy8gaW50ZXJydXB0IGV2ZW50IHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19FSU1SICAgICAgICAgICAgICAgIDB4MTAwOAkvLyBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcgotI2RlZmluZSBGRUNfUkRBUiAgICAgICAgICAgICAgICAweDEwMTAJLy8gcmVjZWl2ZSBkZXNjcmlwdG9yIGFjdGl2ZSByZWdpc3RlcgotI2RlZmluZSBGRUNfVERBUiAgICAgICAgICAgICAgICAweDEwMTQJLy8gdHJhbnNtaXQgZGVzY3JpcHRvciBhY3RpdmUgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX0VDUiAgICAgICAgICAgICAgICAgMHgxMDI0CS8vIGV0aGVybmV0IGNvbnRyb2wgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX01NRlIgICAgICAgICAgICAgICAgMHgxMDQwCS8vIE1JSSBkYXRhIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19NU0NSICAgICAgICAgICAgICAgIDB4MTA0NAkvLyBNSUkgc3BlZWQgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX01JQkMgICAgICAgICAgICAgICAgMHgxMDY0CS8vIE1JQiBjb250cm9sL3N0YXR1cyByZWdpc3RlcgotI2RlZmluZSBGRUNfUkNSICAgICAgICAgICAgICAgICAweDEwODQJLy8gcmVjZWl2ZSBjb250cm9sIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19UQ1IgICAgICAgICAgICAgICAgIDB4MTBDNAkvLyB0cmFuc21pdCBjb250cm9sIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19QQUxSICAgICAgICAgICAgICAgIDB4MTBFNAkvLyBwaHlzaWNhbCBhZGRyZXNzIGxvdyByZWdpc3RlcgotI2RlZmluZSBGRUNfUEFVUiAgICAgICAgICAgICAgICAweDEwRTgJLy8gcGh5c2ljYWwgYWRkcmVzcyBoaWdoICsgdHlwZSByZWdpc3RlcgotI2RlZmluZSBGRUNfT1BEICAgICAgICAgICAgICAgICAweDEwRUMJLy8gb3Bjb2RlICsgcGF1c2UgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX0lBVVIgICAgICAgICAgICAgICAgMHgxMTE4CS8vIHVwcGVyIDMyIGJpdCBvZiBpbmRpdmlkdWFsIGhhc2ggdGFibGUKLSNkZWZpbmUgRkVDX0lBTFIgICAgICAgICAgICAgICAgMHgxMTFDCS8vIGxvd2VyIDMyIGJpdCBvZiBpbmRpdmlkdWFsIGhhc2ggdGFibGUKLSNkZWZpbmUgRkVDX0dBVVIgICAgICAgICAgICAgICAgMHgxMTIwCS8vIHVwcGVyIDMyIGJpdCBvZiBncm91cCBoYXNoIHRhYmxlCi0jZGVmaW5lIEZFQ19HQUxSICAgICAgICAgICAgICAgIDB4MTEyNAkvLyBsb3dlciAzMiBiaXQgb2YgZ3JvdXAgaGFzaCB0YWJsZQotI2RlZmluZSBGRUNfVEZXUiAgICAgICAgICAgICAgICAweDExNDQJLy8gdHJhbnNtaXQgRklGTyB3YXRlcm1hcmsKLSNkZWZpbmUgRkVDX0ZSQlIgICAgICAgICAgICAgICAgMHgxMTRDCS8vIEZJRk8gcmVjZWl2ZSBib3VuZCByZWdpc3RlcgotI2RlZmluZSBGRUNfRlJTUiAgICAgICAgICAgICAgICAweDExNTAJLy8gRklGTyByZWNlaXZlIEZJRk8gc3RhcnQgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX0VSRFNSICAgICAgICAgICAgICAgMHgxMTgwCS8vIHBvaW50ZXIgdG8gcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmcKLSNkZWZpbmUgRkVDX0VURFNSICAgICAgICAgICAgICAgMHgxMTg0CS8vIHBvaW50ZXIgdG8gdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nCi0jZGVmaW5lIEZFQ19FTVJCUiAgICAgICAgICAgICAgIDB4MTE4OAkvLyBtYXhpbXVtIHJlY2VpdmUgYnVmZmVyIHNpemUKLQotLy8gbWliIGJsb2NrIGNvdW50ZXJzIG1lbW9yeSBtYXAKLSNkZWZpbmUgRkVDX1JNT05fVF9EUk9QICAgICAgICAgMHgxMjAwCS8vIGNvdW50IG9mIGZyYW1lcyBub3QgY291bnRlZCBjb3JyZWN0bHkKLSNkZWZpbmUgRkVDX1JNT05fVF9QQUNLRVRTICAgICAgMHgxMjA0CS8vIFJNT04gdHggcGFja2V0IGNvdW50Ci0jZGVmaW5lIEZFQ19STU9OX1RfQkNfUEtUICAgICAgIDB4MTIwOAkvLyBSTU9OIHR4IGJyb2FkY2FzdCBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1RfTUNfUEtUICAgICAgIDB4MTIwQwkvLyBSTU9OIHR4IG11bHRpY2FzdCBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1RfQ1JDX0FMSUdOICAgIDB4MTIxMAkvLyBSTU9OIHR4IHBhY2tldHMgdyBDUkMvYWxpZ24gZXJyb3IKLSNkZWZpbmUgRkVDX1JNT05fVF9VTkRFUlNJWkUgICAgMHgxMjE0CS8vIFJNT04gdHggcGFja2V0cyA8IDY0IGJ5dGVzLCBnb29kIENSQwotI2RlZmluZSBGRUNfUk1PTl9UX09WRVJTSVpFICAgICAweDEyMTgJLy8gUk1PTiB0eCBwYWNrZXRzID4gTUFYX0ZMIGJ5dGVzLCBnb29kIENSQwotI2RlZmluZSBGRUNfUk1PTl9UX0ZSQUcgICAgICAgICAweDEyMUMJLy8gUk1PTiB0eCBwYWNrZXRzIDwgNjQgYnl0ZXMsIGJhZCBDUkMKLSNkZWZpbmUgRkVDX1JNT05fVF9KQUIgICAgICAgICAgMHgxMjIwCS8vIFJNT04gdHggcGFja2V0cyA+IE1BWF9GTCBieXRlcywgYmFkIENSQwotI2RlZmluZSBGRUNfUk1PTl9UX0NPTCAgICAgICAgICAweDEyMjQJLy8gUk1PTiB0eCBjb2xsaXNpb24gY291bnQKLSNkZWZpbmUgRkVDX1JNT05fVF9QNjQgICAgICAgICAgMHgxMjI4CS8vIFJNT04gdHggICAgICAgICAgIDY0IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9UX1A2NVRPMTI3ICAgICAweDEyMkMJLy8gUk1PTiB0eCAgIDY1IHRvICAxMjcgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1RfUDEyOFRPMjU1ICAgIDB4MTIzMAkvLyBSTU9OIHR4ICAxMjggdG8gIDI1NSBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9QMjU2VE81MTEgICAgMHgxMjM0CS8vIFJNT04gdHggIDI1NiB0byAgNTExIGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9UX1A1MTJUTzEwMjMgICAweDEyMzgJLy8gUk1PTiB0eCAgNTEyIHRvIDEwMjMgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1RfUDEwMjRUTzIwNDcgIDB4MTIzQwkvLyBSTU9OIHR4IDEwMjQgdG8gMjA0NyBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9QX0dURTIwNDggICAgMHgxMjQwCS8vIFJNT04gdHggdyA+IDIwNDggYnl0ZXMKLSNkZWZpbmUgRkVDX1JNT05fVF9PQ1RFVFMgICAgICAgMHgxMjQ0CS8vIFJNT04gdHggb2N0ZXRzCi0jZGVmaW5lIEZFQ19JRUVFX1RfRFJPUCAgICAgICAgIDB4MTI0OAkvLyBjb3VudCBvZiBmcmFtZXMgbm90IGNvdW50ZWQgY29ycmVjdGx5Ci0jZGVmaW5lIEZFQ19JRUVFX1RfRlJBTUVfT0sgICAgIDB4MTI0QwkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgT0sKLSNkZWZpbmUgRkVDX0lFRUVfVF8xQ09MICAgICAgICAgMHgxMjUwCS8vIGZyYW1lcyB0cmFuc21pdHRlZCB3aXRoIHNpbmdsZSBjb2xsaXNpb24KLSNkZWZpbmUgRkVDX0lFRUVfVF9NQ09MICAgICAgICAgMHgxMjU0CS8vIGZyYW1lcyB0cmFuc21pdHRlZCB3aXRoIG11bHRpcGxlIGNvbGxpc2lvbnMKLSNkZWZpbmUgRkVDX0lFRUVfVF9ERUYgICAgICAgICAgMHgxMjU4CS8vIGZyYW1lcyB0cmFuc21pdHRlZCBhZnRlciBkZWZlcnJhbCBkZWxheQotI2RlZmluZSBGRUNfSUVFRV9UX0xDT0wgICAgICAgICAweDEyNUMJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIHdpdGggbGF0ZSBjb2xsaXNpb25zCi0jZGVmaW5lIEZFQ19JRUVFX1RfRVhDT0wgICAgICAgIDB4MTI2MAkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCBleGNlc3NpdmUgY29sbGlzaW9ucwotI2RlZmluZSBGRUNfSUVFRV9UX01BQ0VSUiAgICAgICAweDEyNjQJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIHdpdGggdHgtRklGTyB1bmRlcnJ1bgotI2RlZmluZSBGRUNfSUVFRV9UX0NTRVJSICAgICAgICAweDEyNjgJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIHdpdGggY2FycmllciBzZW5zZSBlcnJvcgotI2RlZmluZSBGRUNfSUVFRV9UX1NRRSAgICAgICAgICAweDEyNkMJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIHdpdGggU1FFIGVycm9yCi0jZGVmaW5lIEZFQ19JRUVFX1RfRkRYRkMgICAgICAgIDB4MTI3MAkvLyBmbG93IGNvbnRyb2wgcGF1c2UgZnJhbWVzIHRyYW5zbWl0dGVkCi0jZGVmaW5lIEZFQ19JRUVFX1RfT0NURVRTX09LICAgIDB4MTI3NAkvLyBvY3RldCBjb3VudCBmb3IgZnJhbWVzIHRyYW5zbWl0dGVkIHcvbyBlcnJvcgotI2RlZmluZSBGRUNfUk1PTl9SX1BBQ0tFVFMgICAgICAweDEyODQJLy8gUk1PTiByeCBwYWNrZXQgY291bnQKLSNkZWZpbmUgRkVDX1JNT05fUl9CQ19QS1QgICAgICAgMHgxMjg4CS8vIFJNT04gcnggYnJvYWRjYXN0IHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fUl9NQ19QS1QgICAgICAgMHgxMjhDCS8vIFJNT04gcnggbXVsdGljYXN0IHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fUl9DUkNfQUxJR04gICAgMHgxMjkwCS8vIFJNT04gcnggcGFja2V0cyB3IENSQy9hbGlnbiBlcnJvcgotI2RlZmluZSBGRUNfUk1PTl9SX1VOREVSU0laRSAgICAweDEyOTQJLy8gUk1PTiByeCBwYWNrZXRzIDwgNjQgYnl0ZXMsIGdvb2QgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1JfT1ZFUlNJWkUgICAgIDB4MTI5OAkvLyBSTU9OIHJ4IHBhY2tldHMgPiBNQVhfRkwgYnl0ZXMsIGdvb2QgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1JfRlJBRyAgICAgICAgIDB4MTI5QwkvLyBSTU9OIHJ4IHBhY2tldHMgPCA2NCBieXRlcywgYmFkIENSQwotI2RlZmluZSBGRUNfUk1PTl9SX0pBQiAgICAgICAgICAweDEyQTAJLy8gUk1PTiByeCBwYWNrZXRzID4gTUFYX0ZMIGJ5dGVzLCBiYWQgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1JfUkVTVkRfMCAgICAgIDB4MTJBNAkvLwotI2RlZmluZSBGRUNfUk1PTl9SX1A2NCAgICAgICAgICAweDEyQTgJLy8gUk1PTiByeCAgICAgICAgICAgNjQgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1JfUDY1VDAxMjcgICAgIDB4MTJBQwkvLyBSTU9OIHJ4ICAgNjUgdG8gIDEyNyBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fUl9QMTI4VE8yNTUgICAgMHgxMkIwCS8vIFJNT04gcnggIDEyOCB0byAgMjU1IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX1AyNTZUTzUxMSAgICAweDEyQjQJLy8gUk1PTiByeCAgMjU2IHRvICA1MTEgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1JfUDUxMlRPMTAyMyAgIDB4MTJCOAkvLyBSTU9OIHJ4ICA1MTIgdG8gMTAyMyBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fUl9QMTAyNFRPMjA0NyAgMHgxMkJDCS8vIFJNT04gcnggMTAyNCB0byAyMDQ3IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX0dURTIwNDggICAgICAweDEyQzAJLy8gUk1PTiByeCB3ID4gMjA0OCBieXRlcwotI2RlZmluZSBGRUNfUk1PTl9SX09DVEVUUyAgICAgICAweDEyQzQJLy8gUk1PTiByeCBvY3RldHMKLSNkZWZpbmUgRkVDX0lFRUVfUl9EUk9QICAgICAgICAgMHgxMkM4CS8vIGNvdW50IG9mIGZyYW1lcyBub3QgY291bnRlZCBjb3JyZWN0bHkKLSNkZWZpbmUgRkVDX0lFRUVfUl9GUkFNRV9PSyAgICAgMHgxMkNDCS8vIGZyYW1lcyByZWNlaXZlZCBPSwotI2RlZmluZSBGRUNfSUVFRV9SX0NSQyAgICAgICAgICAweDEyRDAJLy8gZnJhbWVzIHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yCi0jZGVmaW5lIEZFQ19JRUVFX1JfQUxJR04gICAgICAgIDB4MTJENAkvLyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBhbGlnbm1lbnQgZXJyb3IKLSNkZWZpbmUgRkVDX0lFRUVfUl9NQUNFUlIgICAgICAgMHgxMkQ4CS8vIHJlY2VpdmUgRklGTyBvdmVyZmxvdyBjb3VudAotI2RlZmluZSBGRUNfSUVFRV9SX0ZEWEZDICAgICAgICAweDEyREMJLy8gZmxvdyBjb250cm9sIHBhdXNlIGZyYW1lcyByZWNlaXZlZAotI2RlZmluZSBGRUNfSUVFRV9SX09DVEVUU19PSyAgICAweDEyRTAJLy8gb2N0ZXQgY291bnQgZm9yIGZyYW1lcyByY3ZkIHcvbyBlcnJvcgotCi0vLyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcwotI2RlZmluZSBGRUNfRUlSX1VOICAgICAgICAgICAgICAoMHgwMDA4MDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9STCAgICAgICAgICAgICAgKDB4MDAxMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfTEMgICAgICAgICAgICAgICgweDAwMjAwMDAwKQotI2RlZmluZSBGRUNfRUlSX0VCRVJSICAgICAgICAgICAoMHgwMDQwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9NSUkgICAgICAgICAgICAgKDB4MDA4MDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfUlhCICAgICAgICAgICAgICgweDAxMDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX1JYRiAgICAgICAgICAgICAoMHgwMjAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9UWEIgICAgICAgICAgICAgKDB4MDQwMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfVFhGICAgICAgICAgICAgICgweDA4MDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX0dSQSAgICAgICAgICAgICAoMHgxMDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9CQUJUICAgICAgICAgICAgKDB4MjAwMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfQkFCUiAgICAgICAgICAgICgweDQwMDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX0hCRVJSICAgICAgICAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBGRUNfRUlNUl9VTiAgICAgICAgICAgICAoMHgwMDA4MDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfUkwgICAgICAgICAgICAgKDB4MDAxMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX0xDICAgICAgICAgICAgICgweDAwMjAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9FQkVSUiAgICAgICAgICAoMHgwMDQwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfTUlJICAgICAgICAgICAgKDB4MDA4MDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX1JYQiAgICAgICAgICAgICgweDAxMDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9SWEYgICAgICAgICAgICAoMHgwMjAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfVFhCICAgICAgICAgICAgKDB4MDQwMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX1RYRiAgICAgICAgICAgICgweDA4MDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9HUkEgICAgICAgICAgICAoMHgxMDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfQkFCVCAgICAgICAgICAgKDB4MjAwMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX0JBQlIgICAgICAgICAgICgweDQwMDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9IQkVSUiAgICAgICAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBGRUNfUkRBUl9SX0RFU19BQ1RJVkUgICAoMHgwMTAwMDAwMCkKLQotI2RlZmluZSBGRUNfVERBUl9YX0RFU19BQ1RJVkUgICAoMHgwMTAwMDAwMCkKLQotI2RlZmluZSBGRUNfRUNSX1JFU0VUICAgICAgICAgICAoMHgwMDAwMDAwMSkKLSNkZWZpbmUgRkVDX0VDUl9FVEhFUl9FTiAgICAgICAgKDB4MDAwMDAwMDIpCi0KLSNkZWZpbmUgRkVDX01NRlJfREFUQSh4KSAgICAgICAgKCgoeCkgJiAweEZGRkYpKQotI2RlZmluZSBGRUNfTU1GUl9UQSAgICAgICAgICAgICAoMHgwMDAyMDAwMCkKLSNkZWZpbmUgRkVDX01NRlJfUkEoeCkgICAgICAgICAgKCgoeCkgJiAweDFGKSA8PCAxOCkKLSNkZWZpbmUgRkVDX01NRlJfUEEoeCkgICAgICAgICAgKCgoeCkgJiAweDFGKSA8PCAyMykKLSNkZWZpbmUgRkVDX01NRlJfT1BfV1IgICAgICAgICAgKDB4MTAwMDAwMDApCi0jZGVmaW5lIEZFQ19NTUZSX09QX1JEICAgICAgICAgICgweDIwMDAwMDAwKQotI2RlZmluZSBGRUNfTU1GUl9TVCAgICAgICAgICAgICAoMHg0MDAwMDAwMCkKLQotI2RlZmluZSBGRUNfTVNDUl9NSUlfU1BFRUQoeCkgICAoKCh4KSAmIDB4MUYpIDw8IDEpCi0jZGVmaW5lIEZFQ19NU0NSX0RJU19QUkVBTUJMRSAgICgweDAwMDAwMDA4KQotCi0jZGVmaW5lIEZFQ19NSUJDX01JQl9JRExFICAgICAgICgweDQwMDAwMDAwKQotI2RlZmluZSBGRUNfTUlCQ19NSUJfRElTQUJMRSAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBGRUNfUkNSX0xPT1AgICAgICAgICAgICAoMHgwMDAwMDAwMSkKLSNkZWZpbmUgRkVDX1JDUl9EUlQgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCi0jZGVmaW5lIEZFQ19SQ1JfTUlJX01PREUgICAgICAgICgweDAwMDAwMDA0KQotI2RlZmluZSBGRUNfUkNSX1BST00gICAgICAgICAgICAoMHgwMDAwMDAwOCkKLSNkZWZpbmUgRkVDX1JDUl9CQ19SRUogICAgICAgICAgKDB4MDAwMDAwMTApCi0jZGVmaW5lIEZFQ19SQ1JfRkNFICAgICAgICAgICAgICgweDAwMDAwMDIwKQotI2RlZmluZSBGRUNfUkNSX01BWF9GTCh4KSAgICAgICAoKCh4KSAmIDB4MDdGRikgPDwgMTYpCi0KLSNkZWZpbmUgRkVDX1RDUl9HVFMgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0jZGVmaW5lIEZFQ19UQ1JfSEJDICAgICAgICAgICAgICgweDAwMDAwMDAyKQotI2RlZmluZSBGRUNfVENSX0ZERU4gICAgICAgICAgICAoMHgwMDAwMDAwNCkKLSNkZWZpbmUgRkVDX1RDUl9URkNfUEFVU0UgICAgICAgKDB4MDAwMDAwMDgpCi0jZGVmaW5lIEZFQ19UQ1JfUkZDX1BBVVNFICAgICAgICgweDAwMDAwMDEwKQotCi0jZGVmaW5lIEZFQ19QQUxSX0JZVEUzKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDApCi0jZGVmaW5lIEZFQ19QQUxSX0JZVEUyKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDgpCi0jZGVmaW5lIEZFQ19QQUxSX0JZVEUxKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMTYpCi0jZGVmaW5lIEZFQ19QQUxSX0JZVEUwKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCi0KLS8vI2RlZmluZSBGRUNfUEFVUl9UWVBFKHgpICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgIDApCi0jZGVmaW5lIEZFQ19QQVVSX0JZVEU1KHgpICAgICAgICgoKHgpICYgICAweEZGKSA8PCAxNikKLSNkZWZpbmUgRkVDX1BBVVJfQllURTQoeCkgICAgICAgKCgoeCkgJiAgIDB4RkYpIDw8IDI0KQotCi0jZGVmaW5lIEZFQ19PUERfUEFVU0VfRFVSKHgpICAgICgoKHgpICYgMHhGRkZGKSkKLS8vI2RlZmluZSBGRUNfT1BEX09QQ09ERSh4KSAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCi0KLS8vbS5iLgotI2RlZmluZSBGRUNfSUFVUl9CWVRFNyh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8ICAwKQotI2RlZmluZSBGRUNfSUFVUl9CWVRFNih4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8ICA4KQotI2RlZmluZSBGRUNfSUFVUl9CWVRFNSh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDE2KQotI2RlZmluZSBGRUNfSUFVUl9CWVRFNCh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDI0KQotCi0jZGVmaW5lIEZFQ19JQUxSX0JZVEUzKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDApCi0jZGVmaW5lIEZFQ19JQUxSX0JZVEUyKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDgpCi0jZGVmaW5lIEZFQ19JQUxSX0JZVEUxKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMTYpCi0jZGVmaW5lIEZFQ19JQUxSX0JZVEUwKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCi0KLSNkZWZpbmUgRkVDX0dBVVJfQllURTcoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgMCkKLSNkZWZpbmUgRkVDX0dBVVJfQllURTYoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgOCkKLSNkZWZpbmUgRkVDX0dBVVJfQllURTUoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxNikKLSNkZWZpbmUgRkVDX0dBVVJfQllURTQoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKLQotI2RlZmluZSBGRUNfR0FMUl9CWVRFMyh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8ICAwKQotI2RlZmluZSBGRUNfR0FMUl9CWVRFMih4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8ICA4KQotI2RlZmluZSBGRUNfR0FMUl9CWVRFMSh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDE2KQotI2RlZmluZSBGRUNfR0FMUl9CWVRFMCh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDI0KQotLy8gXl5eXgotCi0jZGVmaW5lIEZFQ19URldSX1hfV01SS182NCAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBGRUNfVEZXUl9YX1dNUktfMTI4ICAgICAoMHgwMDAwMDAwMikKLSNkZWZpbmUgRkVDX1RGV1JfWF9XTVJLXzE5MiAgICAgKDB4MDAwMDAwMDMpCi0KLS8vbS5iLgotI2RlZmluZSBGRUNfRlJCUl9SX0JPVU5EKHgpICAgICAoKCh4KSAmIDB4RkYpIDw8IDIpCi0KLS8vbS5iLgotI2RlZmluZSBGRUNfRlJTUl9SX0ZTVEFSVCh4KSAgICAoKCh4KSAmIDB4RkYpIDw8IDIpCi0KLS8vbS5iLgotI2RlZmluZSBGRUNfRVJEU1JfUl9ERVNfU1RBUlQoeCkgICgoKHgpICYgMHgzRkZGRkZGRikgPDwgMikKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19FVFNEUl9YX0RFU19TVEFSVCh4KSAgKCgoeCkgJiAweDNGRkZGRkZGKSA8PCAyKQotCi0jZGVmaW5lIEZFQ19FTVJCUl9SX0JVRl9TSVpFKHgpICgoKHgpICYgMHg3RikgPDwgIDQpCi0KLSNkZWZpbmUgRkVDX1J4QkRfVFIgICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEZFQ19SeEJEX09WICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBGRUNfUnhCRF9DUiAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgRkVDX1J4QkRfTk8gICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lIEZFQ19SeEJEX0xHICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBGRUNfUnhCRF9NQyAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgRkVDX1J4QkRfQkMgICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lIEZFQ19SeEJEX00gICAgICAgICAgICAgIDB4MDEwMAotI2RlZmluZSBGRUNfUnhCRF9MICAgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUgRkVDX1J4QkRfUjAyICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lIEZFQ19SeEJEX1cgICAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBGRUNfUnhCRF9SMDEgICAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgRkVDX1J4QkRfSU5VU0UgICAgICAgICAgMHg0MDAwCi0jZGVmaW5lIEZFQ19SeEJEX0UgICAgICAgICAgICAgIDB4ODAwMAotCi0vL20uYi4KLS8vI2RlZmluZSBGRUNfVHhCRF9DU0wgICAgICAgICAgICAweDAwMDEKLS8vI2RlZmluZSBGRUNfVHhCRF9VTiAgICAgICAgICAgICAweDAwMDIKLS8vI2RlZmluZSBGRUNfVHhCRF9STCAgICAgICAgICAgICAweDAwNDAKLS8vI2RlZmluZSBGRUNfVHhCRF9MQyAgICAgICAgICAgICAweDAwODAKLS8vI2RlZmluZSBGRUNfVHhCRF9IQiAgICAgICAgICAgICAweDAxMDAKLS8vI2RlZmluZSBGRUNfVHhCRF9ERUYgICAgICAgICAgICAweDAyMDAKLSNkZWZpbmUgRkVDX1R4QkRfQUJDICAgICAgICAgICAgMHgwMjAwCi0vLyBeXl5eCi0jZGVmaW5lIEZFQ19UeEJEX1RDICAgICAgICAgICAgIDB4MDQwMAotI2RlZmluZSBGRUNfVHhCRF9MICAgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUgRkVDX1R4QkRfVE8yICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lIEZFQ19UeEJEX1cgICAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBGRUNfVHhCRF9UTzEgICAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgRkVDX1R4QkRfSU5VU0UgICAgICAgICAgMHg0MDAwCi0jZGVmaW5lIEZFQ19UeEJEX1IgICAgICAgICAgICAgIDB4ODAwMAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFJ4IGFuZCBUeCBidWZmZXIgZGVzY3JpcHRvciBmb3JtYXQKLXR5cGVkZWYgc3RydWN0IHsKLQlXT1JEIG1fd1N0YXR1czsJCS8vIGNvbnRyb2wgLyBzdGF0dXMgIC0tLSAgdXNlZCBieSBlZHJ2LCBkbyBub3QgY2hhbmdlIGluIGFwcGxpY2F0aW9uCi0JV09SRCBtX3dMZW5ndGg7CQkvLyB0cmFuc2ZlciBsZW5ndGgKLQlCWVRFICptX3BiRGF0YTsJCS8vIGJ1ZmZlciBhZGRyZXNzCi19IHRCdWZmZXJEZXNjcjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAoTk9fT0ZfSU5TVEFOQ0VTID4gMSkKLSNkZWZpbmUgRUNJX1dSSVRFX0RXX1JFRyhvZmYsdmFsKSAgICAgICAoKihEV09SRCAqKSh2b2lkICopKCZfX0lQU0JBUltvZmZdKSA9IHZhbCkKLSNkZWZpbmUgRUNJX1JFQURfRFdfUkVHKG9mZikgICAgICAgICAgICAoKihEV09SRCAqKSh2b2lkICopKCZfX0lQU0JBUltvZmZdKSkKLSNlbHNlCi0jaWYgKEVEUlZfVVNFRF9FVEhfQ1RSTCA9PSAwKQotI2RlZmluZSBFQ0lfV1JJVEVfRFdfUkVHKG9mZix2YWwpICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW0ZFQzBfQUREUitvZmZdKSA9IHZhbCkKLSNkZWZpbmUgRUNJX1JFQURfRFdfUkVHKG9mZikgICAgICAgICAgICAoKihEV09SRCAqKSh2b2lkICopKCZfX0lQU0JBUltGRUMwX0FERFIrb2ZmXSkpCi0jZWxzZQotI2RlZmluZSBFQ0lfV1JJVEVfRFdfUkVHKG9mZix2YWwpICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW0ZFQzFfQUREUitvZmZdKSA9IHZhbCkKLSNkZWZpbmUgRUNJX1JFQURfRFdfUkVHKG9mZikgICAgICAgICAgICAoKihEV09SRCAqKSh2b2lkICopKCZfX0lQU0JBUltGRUMxX0FERFIrb2ZmXSkpCi0jZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgLy8gI2lmbmRlZiBfRURSVl9GRUNfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydlNpbS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmgKaW5kZXggMzkzMDBlMy4uMTkxZWMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmgKQEAgLTgzLDcgKzgzLDcgQEAKIC8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgRWRydlJ4SW50ZXJydXB0SGFuZGxlcihCWVRFIGJCdWZmZXJJbkZyYW1lX3AsIEJZVEUgKiBwYkV0aGVybmV0RGF0YV9wLAotCQkJICAgIFdPUkQgd0RhdGFMZW5fcCk7Cit2b2lkIEVkcnZSeEludGVycnVwdEhhbmRsZXIodTggYkJ1ZmZlckluRnJhbWVfcCwgdTggKiBwYkV0aGVybmV0RGF0YV9wLAorCQkJICAgIHUxNiB3RGF0YUxlbl9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VEUlZTSU1fSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbC5oCmluZGV4IGJlNjBmNzcuLjdmMjJiMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGwuaApAQCAtODksNyArODksNyBAQAogCXVuc2lnbmVkIGludCBtX3VpTm9kZUlkOwogCXRFcGxObXRTdGF0ZSBtX05tdFN0YXRlOwogCXRFcGxObXROb2RlRXZlbnQgbV9Ob2RlRXZlbnQ7Ci0JV09SRCBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fTm9kZUV2ZW50ID09IGtFcGxObXROb2RlRXZlbnRFcnJvcgorCXUxNiBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fTm9kZUV2ZW50ID09IGtFcGxObXROb2RlRXZlbnRFcnJvcgogCUJPT0wgbV9mTWFuZGF0b3J5OwogCiB9IHRFcGxBcGlFdmVudE5vZGU7CkBAIC05Nyw3ICs5Nyw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbE5tdFN0YXRlIG1fTm10U3RhdGU7CS8vIGxvY2FsIE5NVCBzdGF0ZQogCXRFcGxObXRCb290RXZlbnQgbV9Cb290RXZlbnQ7Ci0JV09SRCBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fQm9vdEV2ZW50ID09IGtFcGxObXRCb290RXZlbnRFcnJvcgorCXUxNiBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fQm9vdEV2ZW50ID09IGtFcGxObXRCb290RXZlbnRFcnJvcgogCiB9IHRFcGxBcGlFdmVudEJvb3Q7CiAKQEAgLTEzMSwzMyArMTMxLDMzIEBACiAKIH0gdEVwbEFwaUV2ZW50QXJnOwogCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDIFJPTSAqIHRFcGxBcGlDYkV2ZW50KSAodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCi0JCQkJCQkgdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkJCQkgdm9pZCBHRU5FUklDICogcFVzZXJBcmdfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxBcGlDYkV2ZW50KSAodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCisJCQkJICAgICB0RXBsQXBpRXZlbnRBcmcgKnBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQorCQkJCSAgICAgIHZvaWQgKnBVc2VyQXJnX3ApOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IG1fdWlTaXplT2ZTdHJ1Y3Q7CiAJQk9PTCBtX2ZBc3luY09ubHk7CS8vIGRvIG5vdCBuZWVkIHRvIHJlZ2lzdGVyIFBSZXMKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gbG9jYWwgbm9kZSBJRAotCUJZVEUgbV9hYk1hY0FkZHJlc3NbNl07CS8vIGxvY2FsIE1BQyBhZGRyZXNzCisJdTggbV9hYk1hY0FkZHJlc3NbNl07CS8vIGxvY2FsIE1BQyBhZGRyZXNzCiAKIAkvLyAweDFGODI6IE5NVF9GZWF0dXJlRmxhZ3NfVTMyCi0JRFdPUkQgbV9kd0ZlYXR1cmVGbGFnczsKKwl1MzIgbV9kd0ZlYXR1cmVGbGFnczsKIAkvLyBDeWNsZSBMZW5ndGggKDB4MTAwNjogTk1UX0N5Y2xlTGVuX1UzMikgaW4gW3VzXQotCURXT1JEIG1fZHdDeWNsZUxlbjsJLy8gcmVxdWlyZWQgZm9yIGVycm9yIGRldGVjdGlvbgorCXUzMiBtX2R3Q3ljbGVMZW47CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KIAkvLyAweDFGOTg6IE5NVF9DeWNsZVRpbWluZ19SRUMKIAkvLyAweDFGOTguMTogSXNvY2hyVHhNYXhQYXlsb2FkX1UxNgogCXVuc2lnbmVkIGludCBtX3VpSXNvY2hyVHhNYXhQYXlsb2FkOwkvLyBjb25zdAogCS8vIDB4MUY5OC4yOiBJc29jaHJSeE1heFBheWxvYWRfVTE2CiAJdW5zaWduZWQgaW50IG1fdWlJc29jaHJSeE1heFBheWxvYWQ7CS8vIGNvbnN0CiAJLy8gMHgxRjk4LjM6IFBSZXNNYXhMYXRlbmN5X1UzMgotCURXT1JEIG1fZHdQcmVzTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKKwl1MzIgbV9kd1ByZXNNYXhMYXRlbmN5OwkvLyBjb25zdCBpbiBbbnNdLCBvbmx5IHJlcXVpcmVkIGZvciBJZGVudFJlcwogCS8vIDB4MUY5OC40OiBQUmVxQWN0UGF5bG9hZExpbWl0X1UxNgogCXVuc2lnbmVkIGludCBtX3VpUHJlcUFjdFBheWxvYWRMaW1pdDsJLy8gcmVxdWlyZWQgZm9yIGluaXRpYWxpc2F0aW9uICgrMjggYnl0ZXMpCiAJLy8gMHgxRjk4LjU6IFBSZXNBY3RQYXlsb2FkTGltaXRfVTE2CiAJdW5zaWduZWQgaW50IG1fdWlQcmVzQWN0UGF5bG9hZExpbWl0OwkvLyByZXF1aXJlZCBmb3IgaW5pdGlhbGlzYXRpb24gb2YgUHJlcyBmcmFtZSAoKzI4IGJ5dGVzKQogCS8vIDB4MUY5OC42OiBBU25kTWF4TGF0ZW5jeV9VMzIKLQlEV09SRCBtX2R3QXNuZE1heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCisJdTMyIG1fZHdBc25kTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKIAkvLyAweDFGOTguNzogTXVsdGlwbEN5Y2xlQ250X1U4CiAJdW5zaWduZWQgaW50IG1fdWlNdWx0aXBsQ3ljbGVDbnQ7CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KIAkvLyAweDFGOTguODogQXN5bmNNVFVfVTE2CkBAIC0xNjcsMzAgKzE2NywzMCBAQAogCS8vICQkJCBNdWx0aXBsZXhlZCBTbG90CiAKIAkvLyAweDFDMTQ6IERMTF9Mb3NzT2ZGcmFtZVRvbGVyYW5jZV9VMzIgaW4gW25zXQotCURXT1JEIG1fZHdMb3NzT2ZGcmFtZVRvbGVyYW5jZTsKKwl1MzIgbV9kd0xvc3NPZkZyYW1lVG9sZXJhbmNlOwogCiAJLy8gMHgxRjhBOiBOTVRfTU5DeWNsZVRpbWluZ19SRUMKIAkvLyAweDFGOEEuMTogV2FpdFNvQ1BSZXFfVTMyIGluIFtuc10KLQlEV09SRCBtX2R3V2FpdFNvY1ByZXE7CisJdTMyIG1fZHdXYWl0U29jUHJlcTsKIAogCS8vIDB4MUY4QS4yOiBBc3luY1Nsb3RUaW1lb3V0X1UzMiBpbiBbbnNdCi0JRFdPUkQgbV9kd0FzeW5jU2xvdFRpbWVvdXQ7CisJdTMyIG1fZHdBc3luY1Nsb3RUaW1lb3V0OwogCi0JRFdPUkQgbV9kd0RldmljZVR5cGU7CS8vIE5NVF9EZXZpY2VUeXBlX1UzMgotCURXT1JEIG1fZHdWZW5kb3JJZDsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5WZW5kb3JJZF9VMzIKLQlEV09SRCBtX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCi0JRFdPUkQgbV9kd1JldmlzaW9uTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlJldmlzaW9uTm9fVTMyCi0JRFdPUkQgbV9kd1NlcmlhbE51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5TZXJpYWxOb19VMzIKLQlRV09SRCBtX3F3VmVuZG9yU3BlY2lmaWNFeHQxOwotCURXT1JEIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uRGF0ZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZEYXRlX1UzMgotCURXT1JEIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uVGltZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZUaW1lX1UzMgotCURXT1JEIG1fZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCi0JRFdPUkQgbV9kd0FwcGxpY2F0aW9uU3dUaW1lOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dUaW1lX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIHRpbWUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2R3SXBBZGRyZXNzOwotCURXT1JEIG1fZHdTdWJuZXRNYXNrOwotCURXT1JEIG1fZHdEZWZhdWx0R2F0ZXdheTsKLQlCWVRFIG1fc0hvc3RuYW1lWzMyXTsKLQlCWVRFIG1fYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOworCXUzMiBtX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCisJdTMyIG1fZHdWZW5kb3JJZDsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5WZW5kb3JJZF9VMzIKKwl1MzIgbV9kd1Byb2R1Y3RDb2RlOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlByb2R1Y3RDb2RlX1UzMgorCXUzMiBtX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKKwl1MzIgbV9kd1NlcmlhbE51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5TZXJpYWxOb19VMzIKKwl1NjQgbV9xd1ZlbmRvclNwZWNpZmljRXh0MTsKKwl1MzIgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCisJdTMyIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uVGltZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZUaW1lX1UzMgorCXUzMiBtX2R3QXBwbGljYXRpb25Td0RhdGU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd0RhdGVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgZGF0ZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQorCXUzMiBtX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQorCXUzMiBtX2R3SXBBZGRyZXNzOworCXUzMiBtX2R3U3VibmV0TWFzazsKKwl1MzIgbV9kd0RlZmF1bHRHYXRld2F5OworCXU4IG1fc0hvc3RuYW1lWzMyXTsKKwl1OCBtX2FiVmVuZG9yU3BlY2lmaWNFeHQyWzQ4XTsKIAogCWNoYXIgKm1fcHN6RGV2TmFtZTsJLy8gTk1UX01hbnVmYWN0RGV2TmFtZV9WUyAoMHgxMDA4LzAgbG9jYWwgT0QpCiAJY2hhciAqbV9wc3pId1ZlcnNpb247CS8vIE5NVF9NYW51ZmFjdEh3VmVyc19WUyAgKDB4MTAwOS8wIGxvY2FsIE9EKQpAQCAtMjEyLDYyICsyMTIsNjEgQEAKIC8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUluaXRpYWxpemUodEVwbEFwaUluaXRQYXJhbSAqIHBJbml0UGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbEFwaUluaXRpYWxpemUodEVwbEFwaUluaXRQYXJhbSAqcEluaXRQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpU2h1dGRvd24odm9pZCk7Cit0RXBsS2VybmVsIEVwbEFwaVNodXRkb3duKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCi0JCQkJICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKK3RFcGxLZXJuZWwgRXBsQXBpUmVhZE9iamVjdCh0RXBsU2RvQ29tQ29uSGRsICpwU2RvQ29tQ29uSGRsX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJICAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCisJCQkgICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCisJCQkgICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqIHBTZG9Db21Db25IZGxfcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJICAgIHZvaWQgKnBTcmNEYXRhX2xlX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aVNpemVfcCwKLQkJCQkgICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCSAgICAgdm9pZCAqcFNyY0RhdGFfbGVfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU2l6ZV9wLAorCQkJICAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpRnJlZVNkb0NoYW5uZWwodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQl1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCk7Cit0RXBsS2VybmVsIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSB1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVdyaXRlTG9jYWxPYmplY3QodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJCSB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgdW5zaWduZWQgaW50IHVpU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk9iZEFjY2Vzcyh0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbEFwaUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUxpbmtPYmplY3QodW5zaWduZWQgaW50IHVpT2JqSW5kZXhfcCwKLQkJCQkgICB2b2lkICpwVmFyX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlWYXJFbnRyaWVzX3AsCi0JCQkJICAgdEVwbE9iZFNpemUgKiBwRW50cnlTaXplX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpRmlyc3RTdWJpbmRleF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpTGlua09iamVjdCh1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wLAorCQkJICAgIHZvaWQgKnBWYXJfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnB1aVZhckVudHJpZXNfcCwKKwkJCSAgICB0RXBsT2JkU2l6ZSAqcEVudHJ5U2l6ZV9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aUZpcnN0U3ViaW5kZXhfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUV4ZWNObXRDb21tYW5kKHRFcGxObXRFdmVudCBObXRFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpRXhlY05tdENvbW1hbmQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzKHZvaWQpOwordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzKHZvaWQpOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpTW5UcmlnZ2VyU3RhdGVDaGFuZ2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICAgdEVwbE5tdE5vZGVDb21tYW5kIE5vZGVDb21tYW5kX3ApOwordEVwbEtlcm5lbCBFcGxBcGlNblRyaWdnZXJTdGF0ZUNoYW5nZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICAgICB0RXBsTm10Tm9kZUNvbW1hbmQgTm9kZUNvbW1hbmRfcCk7CiAjZW5kaWYKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpR2V0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJIHRFcGxJZGVudFJlc3BvbnNlICoqCi0JCQkJCSBwcElkZW50UmVzcG9uc2VfcCk7Cit0RXBsS2VybmVsIEVwbEFwaUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICB0RXBsSWRlbnRSZXNwb25zZSAqKnBwSWRlbnRSZXNwb25zZV9wKTsKIAogLy8gZnVuY3Rpb25zIGZvciBwcm9jZXNzIGltYWdlIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gc2VwYXJhdGUgZmlsZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpUHJvY2Vzc0ltYWdlU2V0dXAodm9pZCk7Ci10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZUluKHRFcGxBcGlQcm9jZXNzSW1hZ2UgKiBwUElfcCk7Ci10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZU91dCh0RXBsQXBpUHJvY2Vzc0ltYWdlICogcFBJX3ApOwordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzSW1hZ2VTZXR1cCh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0ltYWdlRXhjaGFuZ2VJbih0RXBsQXBpUHJvY2Vzc0ltYWdlICpwUElfcCk7Cit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlT3V0KHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTF9BUElfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQW1pLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFtaS5oCmluZGV4IDZmYTA0YTQuLjNiNDZlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQW1pLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBbWkuaApAQCAtNjksNyArNjksNyBAQAogCiAgICAxNi4wOS4yMDAyICAtYXMKICAgICAgICAgICAgICAgIFRvIHNhdmUgY29kZSBzcGFjZSB0aGUgZnVuY3Rpb25zIEFtaVNldEJ5dGUgYW5kIEFtaUdldEJ5dGUKLSAgICAgICAgICAgICAgIGFyZSByZXBsYWNlZCBieSBtYWNyb3MuIEZvciB0YXJnZXRzIHdoaWNoIGFzc2lnbiBCWVRFIGJ5CisgICAgICAgICAgICAgICBhcmUgcmVwbGFjZWQgYnkgbWFjcm9zLiBGb3IgdGFyZ2V0cyB3aGljaCBhc3NpZ24gdTggYnkKICAgICAgICAgICAgICAgIGFuIDE2Qml0IHR5cGUsIHRoZSBkZWZpbml0aW9uIG9mIG1hY3JvcyBtdXN0IGNoYW5nZWQgdG8KICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy4KIApAQCAtODYsMTEgKzg2LDYgQEAKICNpZm5kZWYgX0VQTEFNSV9IXwogI2RlZmluZSBfRVBMQU1JX0hfCiAKLSNpZiAoKERFVl9TWVNURU0gJiBfREVWXzY0QklUX1NVUFBPUlRfKSA9PSAwKQotLy8gICAgI2lmZGVmIFVTRV9WQVI2NAotI2Vycm9yICdFUlJPUjogZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgNjQgYml0IG9wZXJhdGlvbnMhJwotLy8gICAgI2VuZGlmCi0jZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICB0eXBlcwpAQCAtMTA0LDQ0ICs5OSwyMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0jaWYgZGVmaW5lZChJTkxJTkVfRlVOQ1RJT05fREVGKQotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT04KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGCi0jZGVmaW5lIElOTElORV9FTkFCTEVEICAgICAgVFJVRQotI2RlZmluZSBFUExfQU1JX0lOTElORUQKLSNpbmNsdWRlICIuLi9FcGxTdGFjay9hbWl4ODYuYyIKLSNlbmRpZgotCi0jZWxpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKQotI2lmIGRlZmluZWQoX19tNjhrX18pCQkvLyBpdCBpcyBhbiBiaWcgZW5kaWFuIG1hY2hpbmUKLSNpZiBkZWZpbmVkKElOTElORV9GVU5DVElPTl9ERUYpCi0jdW5kZWYgIElOTElORV9GVU5DVElPTgotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSNkZWZpbmUgSU5MSU5FX0VOQUJMRUQgICAgICBUUlVFCi0jZGVmaW5lIEVQTF9BTUlfSU5MSU5FRAotI2luY2x1ZGUgIi4uL0VwbFN0YWNrL2FtaWJlLmMiCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gd3JpdGUgZnVuY3Rpb25zCiAvLwogLy8gVG8gc2F2ZSBjb2RlIHNwYWNlIHRoZSBmdW5jdGlvbiBBbWlTZXRCeXRlIGlzIHJlcGxhY2VkIGJ5CiAvLyBhbiBtYWNyby4KLS8vIHZvaWQgICBQVUJMSUMgIEFtaVNldEJ5dGUgICh2b2lkIEZBUiogcEFkZHJfcCwgQllURSBiQnl0ZVZhbF9wKTsKKy8vIHZvaWQgIEFtaVNldEJ5dGUgICh2b2lkICogcEFkZHJfcCwgdTggYkJ5dGVWYWxfcCk7CiAKLSNkZWZpbmUgQW1pU2V0Qnl0ZVRvQmUocEFkZHJfcCwgYkJ5dGVWYWxfcCkgIHsqKEJZVEUgRkFSKikocEFkZHJfcCkgPSAoYkJ5dGVWYWxfcCk7fQotI2RlZmluZSBBbWlTZXRCeXRlVG9MZShwQWRkcl9wLCBiQnl0ZVZhbF9wKSAgeyooQllURSBGQVIqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CisjZGVmaW5lIEFtaVNldEJ5dGVUb0JlKHBBZGRyX3AsIGJCeXRlVmFsX3ApICB7Kih1OCAqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CisjZGVmaW5lIEFtaVNldEJ5dGVUb0xlKHBBZGRyX3AsIGJCeXRlVmFsX3ApICB7Kih1OCAqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQl2b2lkIFBVQkxJQyBBbWlTZXRXb3JkVG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFdPUkQgd1dvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgRFdPUkQgZHdEd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRXb3JkVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFdPUkQgd1dvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmRUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwgRFdPUkQgZHdEd29yZFZhbF9wKTsKLSNlbmRpZgordm9pZCBBbWlTZXRXb3JkVG9CZSh2b2lkICpwQWRkcl9wLCB1MTYgd1dvcmRWYWxfcCk7Cit2b2lkIEFtaVNldER3b3JkVG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0V29yZFRvTGUodm9pZCAqcEFkZHJfcCwgdTE2IHdXb3JkVmFsX3ApOwordm9pZCBBbWlTZXREd29yZFRvTGUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMTQ5LDE3ICsxMjEsMTUgQEAKIC8vCiAvLyBUbyBzYXZlIGNvZGUgc3BhY2UgdGhlIGZ1bmN0aW9uIEFtaUdldEJ5dGUgaXMgcmVwbGFjZWQgYnkKIC8vIGFuIG1hY3JvLgotLy8gQllURSAgIFBVQkxJQyAgQW1pR2V0Qnl0ZSAgKHZvaWQgRkFSKiBwQWRkcl9wKTsKKy8vIHU4ICAgQW1pR2V0Qnl0ZSAgKHZvaWQgKiBwQWRkcl9wKTsKIAotI2RlZmluZSBBbWlHZXRCeXRlRnJvbUJlKHBBZGRyX3ApICAoKihCWVRFIEZBUiopKHBBZGRyX3ApKQotI2RlZmluZSBBbWlHZXRCeXRlRnJvbUxlKHBBZGRyX3ApICAoKihCWVRFIEZBUiopKHBBZGRyX3ApKQorI2RlZmluZSBBbWlHZXRCeXRlRnJvbUJlKHBBZGRyX3ApICAoKih1OCAqKShwQWRkcl9wKSkKKyNkZWZpbmUgQW1pR2V0Qnl0ZUZyb21MZShwQWRkcl9wKSAgKCoodTggKikocEFkZHJfcCkpCiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQotCVdPUkQgUFVCTElDIEFtaUdldFdvcmRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlXT1JEIFBVQkxJQyBBbWlHZXRXb3JkRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Ci0JRFdPUkQgUFVCTElDIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1MTYgQW1pR2V0V29yZEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UzMiBBbWlHZXREd29yZEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UxNiBBbWlHZXRXb3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApOwordTMyIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTE3NCw4ICsxNDQsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQl2b2lkIFBVQkxJQyBBbWlTZXREd29yZDI0VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIERXT1JEIGR3RHdvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmQyNFRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLCBEV09SRCBkd0R3b3JkVmFsX3ApOwordm9pZCBBbWlTZXREd29yZDI0VG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0RHdvcmQyNFRvTGUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMTg1LDEyICsxNTUsMTIgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIERXT1JEICAgICAgICAgICA9IHJlYWQgdmFsdWUKKy8vIFJldHVybjogICAgICB1MzIgICAgICAgICAgID0gcmVhZCB2YWx1ZQogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwotCURXT1JEIFBVQkxJQyBBbWlHZXREd29yZDI0RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1MzIgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UzMiBBbWlHZXREd29yZDI0RnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLyNpZmRlZiBVU0VfVkFSNjQKIApAQCAtMjA3LDggKzE3Nyw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDBUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQwVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNDBUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDQwVG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0yMTgsMTIgKzE4OCwxMiBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgUVdPUkQKKy8vIFJldHVybjogICAgICB1NjQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0MEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCAqcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ0MEZyb21MZSh2b2lkICpwQWRkcl9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0yMzgsOCArMjA4LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0Jdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ0OFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLCBRV09SRCBxd1F3b3JkVmFsX3ApOwotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0UXdvcmQ0OFRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTI0OSwxMiArMjE5LDEyIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0OEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwotCVFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDQ4RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ0OEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3U2NCBBbWlHZXRRd29yZDQ4RnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTI2OSw4ICsyMzksOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDU2VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ1NlRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLCBRV09SRCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDU2VG9CZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0UXdvcmQ1NlRvTGUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMjgwLDEyICsyNTAsMTIgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCVFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDU2RnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCk7Ci0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNTZGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKTsKK3U2NCBBbWlHZXRRd29yZDU2RnJvbUJlKHZvaWQgKnBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNTZGcm9tTGUodm9pZCAqcEFkZHJfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMzAwLDggKzI3MCw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDY0VG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDY0VG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0zMTUsOCArMjg1LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNjRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNjRGcm9tQmUodm9pZCAqcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkICpwQWRkcl9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0zMzAsOSArMzAwLDcgQEAKIC8vIFJldHVybjogICAgICB2b2lkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCXZvaWQgUFVCTElDIEFtaVNldFRpbWVPZkRheSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJICAgIHRUaW1lT2ZEYXkgRkFSICogcFRpbWVPZkRheV9wKTsKK3ZvaWQgQW1pU2V0VGltZU9mRGF5KHZvaWQgKnBBZGRyX3AsIHRUaW1lT2ZEYXkgKnBUaW1lT2ZEYXlfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMzQ2LDE0ICszMTQsNyBAQAogLy8gUmV0dXJuOiAgICAgIHZvaWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0Jdm9pZCBQVUJMSUMgQW1pR2V0VGltZU9mRGF5KHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkgICAgdFRpbWVPZkRheSBGQVIgKiBwVGltZU9mRGF5X3ApOwotCi0jZW5kaWYKLQotI3VuZGVmICBJTkxJTkVfRU5BQkxFRAkJLy8gZGlzYWJsZSBhY3R1YWwgaW5saW5pbmcgb2YgZnVuY3Rpb25zCi0jZGVmaW5lIEVQTF9BTUlfSU5DTFVERUQKK3ZvaWQgQW1pR2V0VGltZU9mRGF5KHZvaWQgKnBBZGRyX3AsIHRUaW1lT2ZEYXkgKnBUaW1lT2ZEYXlfcCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlHZW5lcmljLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYwppbmRleCBhZTE5ZTM0Li5jNDQxOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYwpAQCAtMTYyLDQ0ICsxNjIsNDEgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIE5NVCBzdGF0ZSBjaGFuZ2UgZXZlbnQgY2FsbGJhY2sgZnVuY3Rpb24KLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCQlObXRTdGF0ZUNoYW5nZV9wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UgTm10U3RhdGVDaGFuZ2VfcCk7CiAKIC8vIHVwZGF0ZSBETEwgY29uZmlndXJhdGlvbiBmcm9tIE9ECi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApOwogCiAvLyB1cGRhdGUgT0QgZnJvbSBpbml0IHBhcmFtCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlT2JkKHZvaWQpOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlT2JkKHZvaWQpOwogCiAvLyBwcm9jZXNzIGV2ZW50cyBmcm9tIHVzZXIgZXZlbnQgcXVldWUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEVwbEV2ZW50X3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIFNETyBtb2R1bGUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKnBTZG9Db21GaW5pc2hlZF9wKTsKICNlbmRpZgogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQogLy8gY2FsbGJhY2sgZnVuY3Rpb25zIG9mIE5tdE1udSBtb2R1bGUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wLAotCQkJCQkgICBCT09MIGZNYW5kYXRvcnlfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKKwkJCQkgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJICAgIHUxNiB3RXJyb3JDb2RlX3AsIEJPT0wgZk1hbmRhdG9yeV9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUNiQm9vdEV2ZW50KHRFcGxObXRCb290RXZlbnQgQm9vdEV2ZW50X3AsCi0JCQkJCSAgIHRFcGxObXRTdGF0ZSBObXRTdGF0ZV9wLAotCQkJCQkgICBXT1JEIHdFcnJvckNvZGVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYkJvb3RFdmVudCh0RXBsTm10Qm9vdEV2ZW50IEJvb3RFdmVudF9wLAorCQkJCSAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKKwkJCQkgICAgdTE2IHdFcnJvckNvZGVfcCk7CiAjZW5kaWYKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTEVEVSkpICE9IDApCiAvLyBjYWxsYmFjayBmdW5jdGlvbiBvZiBMZWR1IG1vZHVsZQotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUNiTGVkU3RhdGVDaGFuZ2UodEVwbExlZFR5cGUgTGVkVHlwZV9wLAotCQkJCQkJQk9PTCBmT25fcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYkxlZFN0YXRlQ2hhbmdlKHRFcGxMZWRUeXBlIExlZFR5cGVfcCwgQk9PTCBmT25fcCk7CiAjZW5kaWYKIAogLy8gT0QgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGltcGxlbWVudGVkIGluIE9iamRpY3QuYykKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXRSYW0odEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmRJbml0UmFtKHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMjI2LDcgKzIyMyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpSW5pdGlhbGl6ZSh0RXBsQXBpSW5pdFBhcmFtICogcEluaXRQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxBcGlJbml0aWFsaXplKHRFcGxBcGlJbml0UGFyYW0gKnBJbml0UGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxPYmRJbml0UGFyYW0gT2JkSW5pdFBhcmFtOwpAQCAtNDE1LDcgKzQxMiw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpU2h1dGRvd24odm9pZCkKK3RFcGxLZXJuZWwgRXBsQXBpU2h1dGRvd24odm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC01MjMsNyArNTIwLDcgQEAKIC8vIFN0YXRlOgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUV4ZWNObXRDb21tYW5kKHRFcGxObXRFdmVudCBObXRFdmVudF9wKQordEVwbEtlcm5lbCBFcGxBcGlFeGVjTm10Q29tbWFuZCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC01NTMsMTUgKzU1MCwxNSBAQAogLy8gU3RhdGU6CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpTGlua09iamVjdCh1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wLAotCQkJCSAgIHZvaWQgKnBWYXJfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgKnB1aVZhckVudHJpZXNfcCwKLQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBFbnRyeVNpemVfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlGaXJzdFN1YmluZGV4X3ApCit0RXBsS2VybmVsIEVwbEFwaUxpbmtPYmplY3QodW5zaWduZWQgaW50IHVpT2JqSW5kZXhfcCwKKwkJCSAgICB2b2lkICpwVmFyX3AsCisJCQkgICAgdW5zaWduZWQgaW50ICpwdWlWYXJFbnRyaWVzX3AsCisJCQkgICAgdEVwbE9iZFNpemUgKnBFbnRyeVNpemVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlGaXJzdFN1YmluZGV4X3ApCiB7Ci0JQllURSBiVmFyRW50cmllczsKLQlCWVRFIGJJbmRleEVudHJpZXM7Ci0JQllURSBNRU0gKnBiRGF0YTsKKwl1OCBiVmFyRW50cmllczsKKwl1OCBiSW5kZXhFbnRyaWVzOworCXU4ICpwYkRhdGE7CiAJdW5zaWduZWQgaW50IHVpU3ViaW5kZXg7CiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKQEAgLTU3Nyw4ICs1NzQsOCBAQAogCQlnb3RvIEV4aXQ7CiAJfQogCi0JcGJEYXRhID0gKEJZVEUgTUVNICopIHBWYXJfcDsKLQliVmFyRW50cmllcyA9IChCWVRFKSAqIHB1aVZhckVudHJpZXNfcDsKKwlwYkRhdGEgPSAodTggKilwVmFyX3A7CisJYlZhckVudHJpZXMgPSAodTgpICogcHVpVmFyRW50cmllc19wOwogCVVzZWRTaXplID0gMDsKIAogCS8vIGluaXQgVmFyUGFyYW0gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMKQEAgLTU5MSw3ICs1ODgsNyBAQAogCQlFbnRyeVNpemUgPSAodEVwbE9iZFNpemUpIHNpemVvZihiSW5kZXhFbnRyaWVzKTsKIAkJUmV0Q29kZSA9IEVwbE9iZFJlYWRFbnRyeSh1aU9iakluZGV4X3AsCiAJCQkJCSAgMHgwMCwKLQkJCQkJICAodm9pZCBHRU5FUklDICopJmJJbmRleEVudHJpZXMsCisJCQkJCSAgKHZvaWQgKikmYkluZGV4RW50cmllcywKIAkJCQkJICAmRW50cnlTaXplKTsKIAogCQlpZiAoKFJldENvZGUgIT0ga0VwbFN1Y2Nlc3NmdWwpIHx8IChiSW5kZXhFbnRyaWVzID09IDB4MDApKSB7CkBAIC02MTAsNyArNjA3LDcgQEAKIAkvLyBvYmplY3QgYWN0dWFsbHkgaGFzLgogCWlmICgoYkluZGV4RW50cmllcyA+IChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSkpICYmCiAJICAgIChiVmFyRW50cmllcyAhPSAweDAwKSkgewotCQliSW5kZXhFbnRyaWVzID0gKEJZVEUpIChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSk7CisJCWJJbmRleEVudHJpZXMgPSAodTgpIChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSk7CiAJfQogCS8vIG1hcCBlbnRyaWVzCiAJZm9yICh1aVN1YmluZGV4ID0gdWlGaXJzdFN1YmluZGV4X3A7IHVpU3ViaW5kZXggPD0gYkluZGV4RW50cmllczsKQEAgLTY3NywxMyArNjc0LDEzIEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCi0JCQkJICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKQordEVwbEtlcm5lbCBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKnBTZG9Db21Db25IZGxfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkgICAgdm9pZCAqcERzdERhdGFfbGVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCwKKwkJCSAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtNzY1LDEzICs3NjIsMTMgQEAKIC8vCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVdyaXRlT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgICB2b2lkICpwU3JjRGF0YV9sZV9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTaXplX3AsCi0JCQkJICAgIHRFcGxTZG9UeXBlIFNkb1R5cGVfcCwgdm9pZCAqcFVzZXJBcmdfcCkKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCSAgICAgdm9pZCAqcFNyY0RhdGFfbGVfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU2l6ZV9wLAorCQkJICAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtODUwLDcgKzg0Nyw3IEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKQordEVwbEtlcm5lbCBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTg4MSwxMCArODc4LDkgQEAKIC8vCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQl1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsQXBpUmVhZExvY2FsT2JqZWN0KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJIHZvaWQgKnBEc3REYXRhX3AsIHVuc2lnbmVkIGludCAqcHVpU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKQEAgLTkxMSwxMCArOTA3LDEwIEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlXcml0ZUxvY2FsT2JqZWN0KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtOTM5LDggKzkzNSw4IEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlNblRyaWdnZXJTdGF0ZUNoYW5nZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgICB0RXBsTm10Tm9kZUNvbW1hbmQgTm9kZUNvbW1hbmRfcCkKK3RFcGxLZXJuZWwgRXBsQXBpTW5UcmlnZ2VyU3RhdGVDaGFuZ2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgICAgdEVwbE5tdE5vZGVDb21tYW5kIE5vZGVDb21tYW5kX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtOTY2LDcgKzk2Miw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gTUVNICogcFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbEFwaUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0xMDAxLDggKzk5Nyw4IEBACiAJCXsKIAkJCWlmICgocFBhcmFtX3AtPm1fT2JkRXZlbnQgPT0ga0VwbE9iZEV2UG9zdFdyaXRlKQogCQkJICAgICYmIChwUGFyYW1fcC0+bV91aVN1YkluZGV4ID09IDMpCi0JCQkgICAgJiYgKCooKERXT1JEICopIHBQYXJhbV9wLT5tX3BBcmcpICE9IDApKSB7Ci0JCQkJRFdPUkQgZHdWZXJpZnlDb25mSW52YWxpZCA9IDA7CisJCQkgICAgJiYgKCooKHUzMiAqKSBwUGFyYW1fcC0+bV9wQXJnKSAhPSAwKSkgeworCQkJCXUzMiBkd1ZlcmlmeUNvbmZJbnZhbGlkID0gMDsKIAkJCQkvLyBzZXQgQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLlZlcmlmeUNvbmZJbnZhbGlkX1UzMiB0byAwCiAJCQkJUmV0ID0KIAkJCQkgICAgRXBsT2JkV3JpdGVFbnRyeSgweDEwMjAsIDQsCkBAIC0xMDE2LDkgKzEwMTIsOSBAQAogCWNhc2UgMHgxRjlFOgkJLy8gTk1UX1Jlc2V0Q21kX1U4CiAJCXsKIAkJCWlmIChwUGFyYW1fcC0+bV9PYmRFdmVudCA9PSBrRXBsT2JkRXZQcmVXcml0ZSkgewotCQkJCUJZVEUgYk5tdENvbW1hbmQ7CisJCQkJdTggYk5tdENvbW1hbmQ7CiAKLQkJCQliTm10Q29tbWFuZCA9ICooKEJZVEUgKikgcFBhcmFtX3AtPm1fcEFyZyk7CisJCQkJYk5tdENvbW1hbmQgPSAqKCh1OCAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKIAkJCQkvLyBjaGVjayB2YWx1ZSByYW5nZQogCQkJCXN3aXRjaCAoKHRFcGxObXRDb21tYW5kKSBiTm10Q29tbWFuZCkgewogCQkJCWNhc2Uga0VwbE5tdENtZFJlc2V0Tm9kZToKQEAgLTEwMzYsOSArMTAzMiw5IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAocFBhcmFtX3AtPm1fT2JkRXZlbnQgPT0ga0VwbE9iZEV2UG9zdFdyaXRlKSB7Ci0JCQkJQllURSBiTm10Q29tbWFuZDsKKwkJCQl1OCBiTm10Q29tbWFuZDsKIAotCQkJCWJObXRDb21tYW5kID0gKigoQllURSAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKKwkJCQliTm10Q29tbWFuZCA9ICooKHU4ICopIHBQYXJhbV9wLT5tX3BBcmcpOwogCQkJCS8vIGNoZWNrIHZhbHVlIHJhbmdlCiAJCQkJc3dpdGNoICgodEVwbE5tdENvbW1hbmQpIGJObXRDb21tYW5kKSB7CiAJCQkJY2FzZSBrRXBsTm10Q21kUmVzZXROb2RlOgpAQCAtMTExNSw3ICsxMTExLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEV2ZW50RXJyb3IgKnBFdmVudEVycm9yOwpAQCAtMTE4OCwxNSArMTE4NCwxNCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCQlObXRTdGF0ZUNoYW5nZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZSBObXRTdGF0ZUNoYW5nZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JQllURSBiTm10U3RhdGU7CisJdTggYk5tdFN0YXRlOwogCXRFcGxBcGlFdmVudEFyZyBFdmVudEFyZzsKIAogCS8vIHNhdmUgTk1UIHN0YXRlIGluIE9ECi0JYk5tdFN0YXRlID0gKEJZVEUpIE5tdFN0YXRlQ2hhbmdlX3AubV9OZXdObXRTdGF0ZTsKKwliTm10U3RhdGUgPSAodTgpIE5tdFN0YXRlQ2hhbmdlX3AubV9OZXdObXRTdGF0ZTsKIAlSZXQgPSBFcGxPYmRXcml0ZUVudHJ5KDB4MUY4QywgMCwgJmJObXRTdGF0ZSwgMSk7CiAJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewogCQlnb3RvIEV4aXQ7CkBAIC0xMjc1LDcgKzEyNzAsNyBAQAogCWNhc2Uga0VwbE5tdENzTm90QWN0aXZlOgogCQl7CiAJCQkvLyBpbmRpY2F0ZSBjb21wbGV0aW9uIG9mIHJlc2V0IGluIE5NVF9SZXNldENtZF9VOAotCQkJYk5tdFN0YXRlID0gKEJZVEUpIGtFcGxObXRDbWRJbnZhbGlkU2VydmljZTsKKwkJCWJObXRTdGF0ZSA9ICh1OCkga0VwbE5tdENtZEludmFsaWRTZXJ2aWNlOwogCQkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOUUsIDAsICZiTm10U3RhdGUsIDEpOwogCQkJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewogCQkJCWdvdG8gRXhpdDsKQEAgLTE0MTEsMTQgKzE0MDYsMTQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlVcGRhdGVEbGxDb25maWcoQk9PTCBmVXBkYXRlSWRlbnRpdHlfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxEbGxDb25maWdQYXJhbSBEbGxDb25maWdQYXJhbTsKIAl0RXBsRGxsSWRlbnRQYXJhbSBEbGxJZGVudFBhcmFtOwogCXRFcGxPYmRTaXplIE9iZFNpemU7Ci0JV09SRCB3VGVtcDsKLQlCWVRFIGJUZW1wOworCXUxNiB3VGVtcDsKKwl1OCBiVGVtcDsKIAogCS8vIGNvbmZpZ3VyZSBEbGwKIAlFUExfTUVNU0VUKCZEbGxDb25maWdQYXJhbSwgMCwgc2l6ZW9mKERsbENvbmZpZ1BhcmFtKSk7CkBAIC0xNjM0LDExICsxNjI5LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVVwZGF0ZU9iZCh2b2lkKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlT2JkKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQlXT1JEIHdUZW1wOwotCUJZVEUgYlRlbXA7CisJdTE2IHdUZW1wOworCXU4IGJUZW1wOwogCiAJLy8gc2V0IG5vZGUgaWQgaW4gT0QKIAlSZXQgPSBFcGxPYmRTZXROb2RlSWQoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpTm9kZUlkLAkvLyBub2RlIGlkCkBAIC0xNjgwLDE0ICsxNjc1LDE0IEBACiAJCSAgIH0gKi8KIAl9CiAKLQl3VGVtcCA9IChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJUeE1heFBheWxvYWQ7CisJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJUeE1heFBheWxvYWQ7CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDEsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgfSovCiAKLQl3VGVtcCA9IChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJSeE1heFBheWxvYWQ7CisJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJSeE1heFBheWxvYWQ7CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDIsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTcwNiw3ICsxNzAxLDcgQEAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlcUFjdFBheWxvYWRMaW1pdCA8PQogCSAgICBFUExfQ19ETExfSVNPQ0hSX01BWF9QQVlMKSB7CiAJCXdUZW1wID0KLQkJICAgIChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVxQWN0UGF5bG9hZExpbWl0OworCQkgICAgKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlcUFjdFBheWxvYWRMaW1pdDsKIAkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDQsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTcxNyw3ICsxNzEyLDcgQEAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlc0FjdFBheWxvYWRMaW1pdCA8PQogCSAgICBFUExfQ19ETExfSVNPQ0hSX01BWF9QQVlMKSB7CiAJCXdUZW1wID0KLQkJICAgIChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVzQWN0UGF5bG9hZExpbWl0OworCQkgICAgKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlc0FjdFBheWxvYWRMaW1pdDsKIAkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDUsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTczNSw3ICsxNzMwLDcgQEAKICAgICB9Ki8KIAogCWlmIChFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQgPD0gMHhGRikgewotCQliVGVtcCA9IChCWVRFKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQ7CisJCWJUZW1wID0gKHU4KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQ7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA3LCAmYlRlbXAsIDEpOwogLyogICAgaWYoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKQogICAgIHsKQEAgLTE3NDUsNyArMTc0MCw3IEBACiAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHUgPD0KIAkgICAgRVBMX0NfRExMX01BWF9BU1lOQ19NVFUpIHsKLQkJd1RlbXAgPSAoV09SRCkgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHU7CisJCXdUZW1wID0gKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHU7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA4LCAmd1RlbXAsIDIpOwogLyogICAgaWYoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKQogICAgIHsKQEAgLTE3NTQsNyArMTc0OSw3IEBACiAJfQogCiAJaWYgKEVwbEFwaUluc3RhbmNlX2cubV9Jbml0UGFyYW0ubV91aVByZXNjYWxlciA8PSAxMDAwKSB7Ci0JCXdUZW1wID0gKFdPUkQpIEVwbEFwaUluc3RhbmNlX2cubV9Jbml0UGFyYW0ubV91aVByZXNjYWxlcjsKKwkJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVzY2FsZXI7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA5LCAmd1RlbXAsIDIpOwogCQkvLyBpZ25vcmUgcmV0dXJuIGNvZGUKIAkJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CkBAIC0xODQ0LDcgKzE4MzksNyBAQAogCQkvLyB3cml0ZSBEZXZpY2UgTmFtZSAoMHgxMDA4KQogCQlSZXQgPQogCQkgICAgRXBsT2JkV3JpdGVFbnRyeSgweDEwMDgsIDAsCi0JCQkJICAgICAodm9pZCBHRU5FUklDICopRXBsQXBpSW5zdGFuY2VfZy4KKwkJCQkgICAgICh2b2lkICopRXBsQXBpSW5zdGFuY2VfZy4KIAkJCQkgICAgIG1fSW5pdFBhcmFtLm1fcHN6RGV2TmFtZSwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE4NTksNyArMTg1NCw3IEBACiAJCS8vIHdyaXRlIEhhcmR3YXJlIHZlcnNpb24gKDB4MTAwOSkKIAkJUmV0ID0KIAkJICAgIEVwbE9iZFdyaXRlRW50cnkoMHgxMDA5LCAwLAotCQkJCSAgICAgKHZvaWQgR0VORVJJQyAqKUVwbEFwaUluc3RhbmNlX2cuCisJCQkJICAgICAodm9pZCAqKUVwbEFwaUluc3RhbmNlX2cuCiAJCQkJICAgICBtX0luaXRQYXJhbS5tX3Bzekh3VmVyc2lvbiwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE4NzQsNyArMTg2OSw3IEBACiAJCS8vIHdyaXRlIFNvZnR3YXJlIHZlcnNpb24gKDB4MTAwQSkKIAkJUmV0ID0KIAkJICAgIEVwbE9iZFdyaXRlRW50cnkoMHgxMDBBLCAwLAotCQkJCSAgICAgKHZvaWQgR0VORVJJQyAqKUVwbEFwaUluc3RhbmNlX2cuCisJCQkJICAgICAodm9pZCAqKUVwbEFwaUluc3RhbmNlX2cuCiAJCQkJICAgICBtX0luaXRQYXJhbS5tX3BzelN3VmVyc2lvbiwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE5MDUsNyArMTkwMCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiU2RvQ29uKHRFcGxTZG9Db21GaW5pc2hlZCAqcFNkb0NvbUZpbmlzaGVkX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMTk0NiwxMCArMTk0MSwxMCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wLCBCT09MIGZNYW5kYXRvcnlfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiTm9kZUV2ZW50KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCSAgICB0RXBsTm10Tm9kZUV2ZW50IE5vZGVFdmVudF9wLAorCQkJCSAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKKwkJCQkgICAgdTE2IHdFcnJvckNvZGVfcCwgQk9PTCBmTWFuZGF0b3J5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMTk5MCw5ICsxOTg1LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JCb290RXZlbnQodEVwbE5tdEJvb3RFdmVudCBCb290RXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JCb290RXZlbnQodEVwbE5tdEJvb3RFdmVudCBCb290RXZlbnRfcCwKKwkJCQkgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJICAgIHUxNiB3RXJyb3JDb2RlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMjAzMyw4ICsyMDI4LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JMZWRTdGF0ZUNoYW5nZSh0RXBsTGVkVHlwZSBMZWRUeXBlX3AsCi0JCQkJCQlCT09MIGZPbl9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JMZWRTdGF0ZUNoYW5nZSh0RXBsTGVkVHlwZSBMZWRUeXBlX3AsIEJPT0wgZk9uX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlMaW51eEtlcm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlMaW51eEtlcm5lbC5jCmluZGV4IDA1Y2EwNjIuLmNiM2UyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQXBpTGludXhLZXJuZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUxpbnV4S2VybmVsLmMKQEAgLTcyLDkgKzcyLDYgQEAKIAogLy8ga2VybmVsIG1vZHVsIGFuZCBkcml2ZXIKIAotLy8jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KQEAgLTkyLDI1ICs4OSwxMSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiRXBsLmgiCiAjaW5jbHVkZSAiRXBsQXBpTGludXguaCIKIC8vI2luY2x1ZGUgImtlcm5lbC9FcGxQZG9rQ2FsLmgiCiAjaW5jbHVkZSAicHJvY19mcy5oIgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotICAgIC8vIHJlbW92ZSAoIm1ha2UgaW52aXNpYmxlIikgb2Jzb2xldGUgc3ltYm9scyBmb3Iga2VybmVsIHZlcnNpb25zIDIuNgotICAgIC8vIGFuZCBoaWdoZXIKLSNkZWZpbmUgTU9EX0lOQ19VU0VfQ09VTlQKLSNkZWZpbmUgTU9EX0RFQ19VU0VfQ09VTlQKLSNkZWZpbmUgRVhQT1JUX05PX1NZTUJPTFMKLSNlbHNlCi0jZXJyb3IgIlRoaXMgZHJpdmVyIG5lZWRzIGEgMi42Lngga2VybmVsIG9yIGhpZ2hlciIKLSNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzOSw3ICsxMjIsNyBAQAogCiAvLyBUcmFjZVBvaW50IHN1cHBvcnQgZm9yIHJlYWx0aW1lLWRlYnVnZ2luZwogI2lmZGVmIF9EQkdfVFJBQ0VfUE9JTlRTXwotdm9pZCBQVUJMSUMgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChCWVRFIGJUcmFjZVBvaW50TnVtYmVyX3ApOwordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApOwogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKSAgIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQocCkKICNlbHNlCiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApCkBAIC0xNTksMTkgKzE0MiwxMCBAQAogLy8gIEdsb2JhbCB2YXJpYWJsZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZmRlZiBDT05GSUdfREVWRlNfRlMKLQotICAgIC8vIGRyaXZlciBtYWpvciBudW1iZXIKLXN0YXRpYyBpbnQgbkRydk1ham9yTnVtYmVyX2c7Ci0KLSNlbHNlCi0KICAgICAvLyBkZXZpY2UgbnVtYmVyIChtYWpvciBhbmQgbWlub3IpCiBzdGF0aWMgZGV2X3QgbkRldk51bV9nOwogc3RhdGljIHN0cnVjdCBjZGV2ICpwRXBsX2NkZXZfZzsKIAotI2VuZGlmCi0KIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdWlFcGxTdGF0ZV9nID0gRVBMX1NUQVRFX05PVE9QRU47CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIFNlbWFwaG9yZUNiRXZlbnRfZzsJLy8gc2VtYXBob3JlIGZvciBFcGxMaW5DYkV2ZW50CkBAIC0yMDQsMTEgKzE3OCwxMSBAQAogLy8gIFByb3RvdHlwZXMgb2YgaW50ZXJuYWwgZnVuY3Rpb25zCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxMaW5DYkV2ZW50KHRFcGxBcGlFdmVudFR5cGUgRXZlbnRUeXBlX3AsCS8vIElOOiBldmVudCB0eXBlIChlbnVtKQotCQkJCXRFcGxBcGlFdmVudEFyZyAqIHBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQotCQkJCXZvaWQgR0VORVJJQyAqIHBVc2VyQXJnX3ApOwordEVwbEtlcm5lbCBFcGxMaW5DYkV2ZW50KHRFcGxBcGlFdmVudFR5cGUgRXZlbnRUeXBlX3AsCS8vIElOOiBldmVudCB0eXBlIChlbnVtKQorCQkJIHRFcGxBcGlFdmVudEFyZyAqcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCisJCQkgdm9pZCAqcFVzZXJBcmdfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExpbkNiU3luYyh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsTGluQ2JTeW5jKHZvaWQpOwogCiBzdGF0aWMgaW50IF9faW5pdCBFcGxMaW5Jbml0KHZvaWQpOwogc3RhdGljIHZvaWQgX19leGl0IEVwbExpbkV4aXQodm9pZCk7CkBAIC0yMjYsOCArMjAwLDYgQEAKIC8vICBLZXJuZWwgTW9kdWxlIHNwZWNpZmljIERhdGEgU3RydWN0dXJlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVhQT1JUX05PX1NZTUJPTFM7Ci0KIG1vZHVsZV9pbml0KEVwbExpbkluaXQpOwogbW9kdWxlX2V4aXQoRXBsTGluRXhpdCk7CiAKQEAgLTI1OSw5ICsyMzEsNiBAQAogCXRFcGxLZXJuZWwgRXBsUmV0OwogCWludCBpRXJyOwogCWludCBpUmV0OwotI2lmZGVmIENPTkZJR19ERVZGU19GUwotCWludCBuTWlub3JOdW1iZXI7Ci0jZW5kaWYKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbkluaXQuLi5cbiIpOwogCVRSQUNFMigiRVBMOiAgIERyaXZlciBidWlsZDogJXMgLyAlc1xuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKQEAgLTI3NSw0NCArMjQ0LDYgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZXYWl0UXVldWVQcm9jZXNzX2cpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJldhaXRRdWV1ZVJlbGVhc2VfZyk7CiAKLSNpZmRlZiBDT05GSUdfREVWRlNfRlMKLQotCS8vIHJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxlcgotCVRSQUNFMigiRVBMOiAgIEluc3RhbGxpbmcgRHJpdmVyICclcycsIFZlcnNpb24gJXMuLi5cbiIsCi0JICAgICAgIEVQTExJTl9EUlZfTkFNRSwgRVBMX1BST0RVQ1RfVkVSU0lPTik7Ci0JVFJBQ0UwKCJFUEw6ICAgKHVzaW5nIGR5bmFtaWMgbWFqb3IgbnVtYmVyIGFzc2lnbm1lbnQpXG4iKTsKLQluRHJ2TWFqb3JOdW1iZXJfZyA9Ci0JICAgIHJlZ2lzdGVyX2NocmRldigwLCBFUExMSU5fRFJWX05BTUUsICZFcGxMaW5GaWxlT3BzX2cpOwotCWlmIChuRHJ2TWFqb3JOdW1iZXJfZyAhPSAwKSB7Ci0JCVRSQUNFMgotCQkgICAgKCJFUEw6ICAgRHJpdmVyICclcycgaW5zdGFsbGVkIHN1Y2Nlc3NmdWwsIGFzc2lnbmVkIE1ham9yTnVtYmVyPSVkXG4iLAotCQkgICAgIEVQTExJTl9EUlZfTkFNRSwgbkRydk1ham9yTnVtYmVyX2cpOwotCX0gZWxzZSB7Ci0JCVRSQUNFMQotCQkgICAgKCJFUEw6ICAgRVJST1I6IERyaXZlciAnJXMnIGlzIHVuYWJsZSB0byBnZXQgYSBmcmVlIE1ham9yTnVtYmVyIVxuIiwKLQkJICAgICBFUExMSU5fRFJWX05BTUUpOwotCQlpUmV0ID0gLUVJTzsKLQkJZ290byBFeGl0OwotCX0KLQotCS8vIGNyZWF0ZSBkZXZpY2Ugbm9kZSBpbiBERVZGUwotCW5NaW5vck51bWJlciA9IDA7Ci0JVFJBQ0UxKCJFUEw6ICAgQ3JlYXRpbmcgZGV2aWNlIG5vZGUgJy9kZXYvJXMnLi4uXG4iLCBFUExMSU5fREVWX05BTUUpOwotCWlFcnIgPQotCSAgICBkZXZmc19ta19jZGV2KE1LREVWKG5EcnZNYWpvck51bWJlcl9nLCBuTWlub3JOdW1iZXIpLAotCQkJICBTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sIEVQTExJTl9ERVZfTkFNRSk7Ci0JaWYgKGlFcnIgPT0gMCkgewotCQlUUkFDRTEoIkVQTDogICBEZXZpY2Ugbm9kZSAnL2Rldi8lcycgY3JlYXRlZCBzdWNjZXNzZnVsLlxuIiwKLQkJICAgICAgIEVQTExJTl9ERVZfTkFNRSk7Ci0JfSBlbHNlIHsKLQkJVFJBQ0UxKCJFUEw6ICAgRVJST1I6IHVuYWJsZSB0byBjcmVhdGUgZGV2aWNlIG5vZGUgJy9kZXYvJXMnXG4iLAotCQkgICAgICAgRVBMTElOX0RFVl9OQU1FKTsKLQkJaVJldCA9IC1FSU87Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLSNlbHNlCi0KIAkvLyByZWdpc3RlciBjaGFyYWN0ZXIgZGV2aWNlIGhhbmRsZXIKIAkvLyBvbmx5IG9uZSBNaW5vciByZXF1aXJlZAogCVRSQUNFMigiRVBMOiAgIEluc3RhbGxpbmcgRHJpdmVyICclcycsIFZlcnNpb24gJXMuLi5cbiIsCkBAIC0zNDEsNyArMjcyLDYgQEAKIAkJaVJldCA9IC1FSU87CiAJCWdvdG8gRXhpdDsKIAl9Ci0jZW5kaWYKIAogCS8vIGNyZWF0ZSBkZXZpY2Ugbm9kZSBpbiBQUk9DRlMKIAlFcGxSZXQgPSBFcGxMaW5Qcm9jSW5pdCgpOwpAQCAtMzc3LDI1ICszMDcsMTIgQEAKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbkV4aXQuLi5cbiIpOwogCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi0KLQkvLyByZW1vdmUgZGV2aWNlIG5vZGUgZnJvbSBERVZGUwotCWRldmZzX3JlbW92ZShFUExMSU5fREVWX05BTUUpOwotCVRSQUNFMSgiRVBMOiAgIERldmljZSBub2RlICcvZGV2LyVzJyByZW1vdmVkLlxuIiwgRVBMTElOX0RFVl9OQU1FKTsKLQotCS8vIHVucmVnaXN0ZXIgY2hhcmFjdGVyIGRldmljZSBoYW5kbGVyCi0JdW5yZWdpc3Rlcl9jaHJkZXYobkRydk1ham9yTnVtYmVyX2csIEVQTExJTl9EUlZfTkFNRSk7Ci0KLSNlbHNlCi0KIAkvLyByZW1vdmUgY2RldiBzdHJ1Y3R1cmUKIAljZGV2X2RlbChwRXBsX2NkZXZfZyk7CiAKIAkvLyB1bnJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxlcgogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihuRGV2TnVtX2csIDEpOwogCi0jZW5kaWYKLQogCVRSQUNFMSgiRVBMOiAgIERyaXZlciAnJXMnIHJlbW92ZWQuXG4iLCBFUExMSU5fRFJWX05BTUUpOwogCiAJVFJBQ0UwKCJFUEw6IC0gRXBsTGluRXhpdFxuIik7CkBAIC00MTYsOCArMzMzLDYgQEAKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbk9wZW4uLi5cbiIpOwogCi0JTU9EX0lOQ19VU0VfQ09VTlQ7Ci0KIAlpZiAodWlFcGxTdGF0ZV9nICE9IEVQTF9TVEFURV9OT1RPUEVOKSB7CS8vIHN0YWNrIGFscmVhZHkgaW5pdGlhbGl6ZWQKIAkJaVJldCA9IC1FQUxSRUFEWTsKIAl9IGVsc2UgewpAQCAtNDkwLDggKzQwNSw2IEBACiAJdWlFcGxTdGF0ZV9nID0gRVBMX1NUQVRFX05PVE9QRU47CiAJaVJldCA9IDA7CiAKLQlNT0RfREVDX1VTRV9DT1VOVDsKLQogCVRSQUNFMSgiRVBMOiAtIEVwbExpblJlbGVhc2UgKGlSZXQ9JWQpXG4iLCBpUmV0KTsKIAlyZXR1cm4gKGlSZXQpOwogCkBAIC0xMTU4LDkgKzEwNzEsOSBAQAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExpbkNiRXZlbnQodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCi0JCQkJdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkJdm9pZCBHRU5FUklDICogcFVzZXJBcmdfcCkKK3RFcGxLZXJuZWwgRXBsTGluQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKKwkJCSB0RXBsQXBpRXZlbnRBcmcgKnBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQorCQkJIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBFcGxSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAlpbnQgaUVycjsKQEAgLTEyMjQsNyArMTEzNyw3IEBACiAJcmV0dXJuIEVwbFJldDsKIH0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTGluQ2JTeW5jKHZvaWQpCit0RXBsS2VybmVsIEVwbExpbkNiU3luYyh2b2lkKQogewogCXRFcGxLZXJuZWwgRXBsUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJaW50IGlFcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaVByb2Nlc3NJbWFnZS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlQcm9jZXNzSW1hZ2UuYwppbmRleCAyYjJmZGYyLi43ZDU1MDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaVByb2Nlc3NJbWFnZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQXBpUHJvY2Vzc0ltYWdlLmMKQEAgLTY5LDExICs2OSw4IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiRXBsLmgiCi0vLyNpbmNsdWRlICJrZXJuZWwvRXBsUGRva0NhbC5oIgogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTI5LDEwICsxMjYsMTAgQEAKICNpZiAoKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMCkgfHwgKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX09VVCA+IDApKQogdHlwZWRlZiBzdHJ1Y3QgewogI2lmIEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMAotCUJZVEUgbV9hYlByb2Nlc3NJbWFnZUlucHV0W0VQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOXTsKKwl1OCBtX2FiUHJvY2Vzc0ltYWdlSW5wdXRbRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfSU5dOwogI2VuZGlmCiAjaWYgRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfT1VUID4gMAotCUJZVEUgbV9hYlByb2Nlc3NJbWFnZU91dHB1dFtFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9PVVRdOworCXU4IG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXRbRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfT1VUXTsKICNlbmRpZgogCiB9IHRFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZTsKQEAgLTE2OSw3ICsxNjYsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVByb2Nlc3NJbWFnZVNldHVwKHZvaWQpCit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZVNldHVwKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKICNpZiAoKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMCkgfHwgKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX09VVCA+IDApKQpAQCAtMjgwLDI0ICsyNzcsMTYgQEAKIC8vIFN0YXRlOgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlSW4odEVwbEFwaVByb2Nlc3NJbWFnZSAqIHBQSV9wKQordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZUluKHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKICNpZiBFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9JTiA+IDAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJY29weV90b191c2VyKHBQSV9wLT5tX3BJbWFnZSwKIAkJICAgICBFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZV9nLm1fYWJQcm9jZXNzSW1hZ2VJbnB1dCwKIAkJICAgICBtaW4ocFBJX3AtPm1fdWlTaXplLAogCQkJIHNpemVvZihFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZV9nLgogCQkJCW1fYWJQcm9jZXNzSW1hZ2VJbnB1dCkpKTsKLSNlbHNlCi0JRVBMX01FTUNQWShwUElfcC0+bV9wSW1hZ2UsCi0JCSAgIEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cubV9hYlByb2Nlc3NJbWFnZUlucHV0LAotCQkgICBtaW4ocFBJX3AtPm1fdWlTaXplLAotCQkgICAgICAgc2l6ZW9mKEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cuCi0JCQkgICAgICBtX2FiUHJvY2Vzc0ltYWdlSW5wdXQpKSk7Ci0jZW5kaWYKICNlbmRpZgogCiAJcmV0dXJuIFJldDsKQEAgLTMxNSwyNCArMzA0LDE2IEBACiAvLyBTdGF0ZToKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZU91dCh0RXBsQXBpUHJvY2Vzc0ltYWdlICogcFBJX3ApCit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlT3V0KHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKICNpZiBFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9PVVQgPiAwCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCWNvcHlfZnJvbV91c2VyKEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cubV9hYlByb2Nlc3NJbWFnZU91dHB1dCwKIAkJICAgICAgIHBQSV9wLT5tX3BJbWFnZSwKIAkJICAgICAgIG1pbihwUElfcC0+bV91aVNpemUsCiAJCQkgICBzaXplb2YoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy4KIAkJCQkgIG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXQpKSk7Ci0jZWxzZQotCUVQTF9NRU1DUFkoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy5tX2FiUHJvY2Vzc0ltYWdlT3V0cHV0LAotCQkgICBwUElfcC0+bV9wSW1hZ2UsCi0JCSAgIG1pbihwUElfcC0+bV91aVNpemUsCi0JCSAgICAgICBzaXplb2YoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy4KLQkJCSAgICAgIG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXQpKSk7Ci0jZW5kaWYKICNlbmRpZgogCiAJcmV0dXJuIFJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbC5oCmluZGV4IDM2NjU3ZjIuLmI5NjAxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGwuaApAQCAtMTM1LDIyICsxMzUsMjIgQEAKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gbG9jYWwgbm9kZSBJRAogCiAJLy8gMHgxRjgyOiBOTVRfRmVhdHVyZUZsYWdzX1UzMgotCURXT1JEIG1fZHdGZWF0dXJlRmxhZ3M7CisJdTMyIG1fZHdGZWF0dXJlRmxhZ3M7CiAJLy8gQ3ljbGUgTGVuZ3RoICgweDEwMDY6IE5NVF9DeWNsZUxlbl9VMzIpIGluIFt1c10KLQlEV09SRCBtX2R3Q3ljbGVMZW47CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KKwl1MzIgbV9kd0N5Y2xlTGVuOwkvLyByZXF1aXJlZCBmb3IgZXJyb3IgZGV0ZWN0aW9uCiAJLy8gMHgxRjk4OiBOTVRfQ3ljbGVUaW1pbmdfUkVDCiAJLy8gMHgxRjk4LjE6IElzb2NoclR4TWF4UGF5bG9hZF9VMTYKIAl1bnNpZ25lZCBpbnQgbV91aUlzb2NoclR4TWF4UGF5bG9hZDsJLy8gY29uc3QKIAkvLyAweDFGOTguMjogSXNvY2hyUnhNYXhQYXlsb2FkX1UxNgogCXVuc2lnbmVkIGludCBtX3VpSXNvY2hyUnhNYXhQYXlsb2FkOwkvLyBjb25zdAogCS8vIDB4MUY5OC4zOiBQUmVzTWF4TGF0ZW5jeV9VMzIKLQlEV09SRCBtX2R3UHJlc01heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCisJdTMyIG1fZHdQcmVzTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKIAkvLyAweDFGOTguNDogUFJlcUFjdFBheWxvYWRMaW1pdF9VMTYKIAl1bnNpZ25lZCBpbnQgbV91aVByZXFBY3RQYXlsb2FkTGltaXQ7CS8vIHJlcXVpcmVkIGZvciBpbml0aWFsaXNhdGlvbiAoKzI0IGJ5dGVzKQogCS8vIDB4MUY5OC41OiBQUmVzQWN0UGF5bG9hZExpbWl0X1UxNgogCXVuc2lnbmVkIGludCBtX3VpUHJlc0FjdFBheWxvYWRMaW1pdDsJLy8gcmVxdWlyZWQgZm9yIGluaXRpYWxpc2F0aW9uIG9mIFByZXMgZnJhbWUgKCsyNCBieXRlcykKIAkvLyAweDFGOTguNjogQVNuZE1heExhdGVuY3lfVTMyCi0JRFdPUkQgbV9kd0FzbmRNYXhMYXRlbmN5OwkvLyBjb25zdCBpbiBbbnNdLCBvbmx5IHJlcXVpcmVkIGZvciBJZGVudFJlcworCXUzMiBtX2R3QXNuZE1heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCiAJLy8gMHgxRjk4Ljc6IE11bHRpcGxDeWNsZUNudF9VOAogCXVuc2lnbmVkIGludCBtX3VpTXVsdGlwbEN5Y2xlQ250OwkvLyByZXF1aXJlZCBmb3IgZXJyb3IgZGV0ZWN0aW9uCiAJLy8gMHgxRjk4Ljg6IEFzeW5jTVRVX1UxNgpAQCAtMTU5LDQyICsxNTksNDIgQEAKIAkvLyAkJCQgTXVsdGlwbGV4ZWQgU2xvdAogCiAJLy8gMHgxQzE0OiBETExfTG9zc09mRnJhbWVUb2xlcmFuY2VfVTMyIGluIFtuc10KLQlEV09SRCBtX2R3TG9zc09mRnJhbWVUb2xlcmFuY2U7CisJdTMyIG1fZHdMb3NzT2ZGcmFtZVRvbGVyYW5jZTsKIAogCS8vIDB4MUY4QTogTk1UX01OQ3ljbGVUaW1pbmdfUkVDCiAJLy8gMHgxRjhBLjE6IFdhaXRTb0NQUmVxX1UzMiBpbiBbbnNdCi0JRFdPUkQgbV9kd1dhaXRTb2NQcmVxOworCXUzMiBtX2R3V2FpdFNvY1ByZXE7CiAKIAkvLyAweDFGOEEuMjogQXN5bmNTbG90VGltZW91dF9VMzIgaW4gW25zXQotCURXT1JEIG1fZHdBc3luY1Nsb3RUaW1lb3V0OworCXUzMiBtX2R3QXN5bmNTbG90VGltZW91dDsKIAogfSB0RXBsRGxsQ29uZmlnUGFyYW07CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbV91aVNpemVPZlN0cnVjdDsKLQlEV09SRCBtX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCi0JRFdPUkQgbV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgotCURXT1JEIG1fZHdQcm9kdWN0Q29kZTsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5Qcm9kdWN0Q29kZV9VMzIKLQlEV09SRCBtX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKLQlEV09SRCBtX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgotCVFXT1JEIG1fcXdWZW5kb3JTcGVjaWZpY0V4dDE7Ci0JRFdPUkQgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCi0JRFdPUkQgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCi0JRFdPUkQgbV9kd0FwcGxpY2F0aW9uU3dEYXRlOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dEYXRlX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIGRhdGUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQotCURXT1JEIG1fZHdJcEFkZHJlc3M7Ci0JRFdPUkQgbV9kd1N1Ym5ldE1hc2s7Ci0JRFdPUkQgbV9kd0RlZmF1bHRHYXRld2F5OwotCUJZVEUgbV9zSG9zdG5hbWVbMzJdOwotCUJZVEUgbV9hYlZlbmRvclNwZWNpZmljRXh0Mls0OF07CisJdTMyIG1fZHdEZXZpY2VUeXBlOwkvLyBOTVRfRGV2aWNlVHlwZV9VMzIKKwl1MzIgbV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgorCXUzMiBtX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCisJdTMyIG1fZHdSZXZpc2lvbk51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5SZXZpc2lvbk5vX1UzMgorCXUzMiBtX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgorCXU2NCBtX3F3VmVuZG9yU3BlY2lmaWNFeHQxOworCXUzMiBtX2R3VmVyaWZ5Q29uZmlndXJhdGlvbkRhdGU7CS8vIENGTV9WZXJpZnlDb25maWd1cmF0aW9uX1JFQy5Db25mRGF0ZV9VMzIKKwl1MzIgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCisJdTMyIG1fZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fZHdBcHBsaWNhdGlvblN3VGltZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3VGltZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciB0aW1lIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fZHdJcEFkZHJlc3M7CisJdTMyIG1fZHdTdWJuZXRNYXNrOworCXUzMiBtX2R3RGVmYXVsdEdhdGV3YXk7CisJdTggbV9zSG9zdG5hbWVbMzJdOworCXU4IG1fYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOwogCiB9IHRFcGxEbGxJZGVudFBhcmFtOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7Ci0JV09SRCBtX3dQcmVxUGF5bG9hZExpbWl0OwkvLyBvYmplY3QgMHgxRjhCOiBOTVRfTU5QUmVxUGF5bG9hZExpbWl0TGlzdF9BVTE2Ci0JV09SRCBtX3dQcmVzUGF5bG9hZExpbWl0OwkvLyBvYmplY3QgMHgxRjhEOiBOTVRfUFJlc1BheWxvYWRMaW1pdExpc3RfQVUxNgotCURXT1JEIG1fZHdQcmVzVGltZW91dDsJLy8gb2JqZWN0IDB4MUY5MjogTk1UX01OQ05QUmVzVGltZW91dF9BVTMyCisJdTE2IG1fd1ByZXFQYXlsb2FkTGltaXQ7CS8vIG9iamVjdCAweDFGOEI6IE5NVF9NTlBSZXFQYXlsb2FkTGltaXRMaXN0X0FVMTYKKwl1MTYgbV93UHJlc1BheWxvYWRMaW1pdDsJLy8gb2JqZWN0IDB4MUY4RDogTk1UX1BSZXNQYXlsb2FkTGltaXRMaXN0X0FVMTYKKwl1MzIgbV9kd1ByZXNUaW1lb3V0OwkvLyBvYmplY3QgMHgxRjkyOiBOTVRfTU5DTlBSZXNUaW1lb3V0X0FVMzIKIAogfSB0RXBsRGxsTm9kZUluZm87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsQ2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbENhbC5oCmluZGV4IDI0NDYwMDguLjcwYjI3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsQ2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGxDYWwuaApAQCAtMTEyLDcgKzExMiw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbERsbFJlcVNlcnZpY2VJZCBtX1NlcnZpY2U7CiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7Ci0JQllURSBtX2JTb2FGbGFnMTsKKwl1OCBtX2JTb2FGbGFnMTsKIAogfSB0RXBsRGxsQ2FsSXNzdWVSZXF1ZXN0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCmluZGV4IDllMjI2NDEuLjI1ZDJjMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCkBAIC0xMjEsOCArMTIxLDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0xOTUsMTIgKzE5NSwxMiBAQAogfSB0RXBsRGxsU3RhdGU7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlCWVRFIG1fYmVfYWJTcmNNYWNbNl07CisJdTggbV9iZV9hYlNyY01hY1s2XTsKIAl0RWRydlR4QnVmZmVyICptX3BUeEJ1ZmZlcjsJLy8gQnVmZmVycyBmb3IgVHgtRnJhbWVzCiAJdW5zaWduZWQgaW50IG1fdWlNYXhUeEZyYW1lczsKLQlCWVRFIG1fYkZsYWcxOwkJLy8gRmxhZyAxIHdpdGggRU4sIEVDIGZvciBQUmVzLCBTdGF0dXNSZXMKLQlCWVRFIG1fYk1uRmxhZzE7CS8vIEZsYWcgMSB3aXRoIEVBLCBFUiBmcm9tIFBSZXEsIFNvQSBvZiBNTgotCUJZVEUgbV9iRmxhZzI7CQkvLyBGbGFnIDIgd2l0aCBQUiBhbmQgUlMgZm9yIFBSZXMsIFN0YXR1c1JlcywgSWRlbnRSZXMKKwl1OCBtX2JGbGFnMTsJCS8vIEZsYWcgMSB3aXRoIEVOLCBFQyBmb3IgUFJlcywgU3RhdHVzUmVzCisJdTggbV9iTW5GbGFnMTsJLy8gRmxhZyAxIHdpdGggRUEsIEVSIGZyb20gUFJlcSwgU29BIG9mIE1OCisJdTggbV9iRmxhZzI7CQkvLyBGbGFnIDIgd2l0aCBQUiBhbmQgUlMgZm9yIFBSZXMsIFN0YXR1c1JlcywgSWRlbnRSZXMKIAl0RXBsRGxsQ29uZmlnUGFyYW0gbV9EbGxDb25maWdQYXJhbTsKIAl0RXBsRGxsSWRlbnRQYXJhbSBtX0RsbElkZW50UGFyYW07CiAJdEVwbERsbFN0YXRlIG1fRGxsU3RhdGU7CkBAIC0yNTcsNyArMjU3LDcgQEAKIAogLy8gY2FsbGVkIGJ5IGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBtb2R1bGUgdG8gbW9uaXRvciBFUEwgY3ljbGUgYXMgQ04KICNpZiBFUExfVElNRVJfVVNFX0hJR0hSRVMgIT0gRkFMU0UKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxEbGxrQ2JDblRpbWVyKHRFcGxUaW1lckV2ZW50QXJnICogcEV2ZW50QXJnX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApOwogI2VuZGlmCiAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9NTikpICE9IDApCkBAIC0yNzgsMTAgKzI3OCw5IEBACiAJCQkJCSAgICAgICBSZXFTZXJ2aWNlSWRfcCwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbERsbGtDYk1uVGltZXJDeWNsZSh0RXBsVGltZXJFdmVudEFyZyAqIHBFdmVudEFyZ19wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbERsbGtDYk1uVGltZXJDeWNsZSh0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICoKLQkJCQkJCSAgcEV2ZW50QXJnX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICpwRXZlbnRBcmdfcCk7CiAKICNlbmRpZgogCkBAIC01MTQsNyArNTEzLDcgQEAKIAkJCSAgICAgICBFUExfQ19ETExfRVRIRVJUWVBFX0VQTCk7CiAJCS8vIHNvdXJjZSBub2RlIElECiAJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iU3JjTm9kZUlkLAotCQkJICAgICAgIChCWVRFKSBFcGxEbGxrSW5zdGFuY2VfZy5tX0RsbENvbmZpZ1BhcmFtLgorCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cubV9EbGxDb25maWdQYXJhbS4KIAkJCSAgICAgICBtX3VpTm9kZUlkKTsKIAkJLy8gc291cmNlIE1BQyBhZGRyZXNzCiAJCUVQTF9NRU1DUFkoJnBUeEZyYW1lLT5tX2JlX2FiU3JjTWFjWzBdLApAQCAtNTMxLDcgKzUzMCw3IEBACiAJCQkJewkvLyBJZGVudFJlc3BvbnNlcyBhbmQgU3RhdHVzUmVzcG9uc2VzIGFyZSBCcm9hZGNhc3QKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT4KIAkJCQkJCSAgICAgICBtX2xlX2JEc3ROb2RlSWQsCi0JCQkJCQkgICAgICAgKEJZVEUpCisJCQkJCQkgICAgICAgKHU4KQogCQkJCQkJICAgICAgIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC01NTAsMTAgKzU0OSwxMCBAQAogCQkJCQkgIEVQTF9DX0RMTF9NVUxUSUNBU1RfU09DKTsKIAkJCS8vIGRlc3RpbmF0aW9uIG5vZGUgSUQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLAotCQkJCSAgICAgICAoQllURSkgRVBMX0NfQURSX0JST0FEQ0FTVCk7CisJCQkJICAgICAgICh1OCkgRVBMX0NfQURSX0JST0FEQ0FTVCk7CiAJCQkvLyByZXNldCBGbGFncwotCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMSwgKEJZVEUpIDApOwotCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMSwgKHU4KSAwKTsKKwkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2MubV9sZV9iRmxhZzIsICh1OCkgMCk7CiAJCQlicmVhazsKIAogCQljYXNlIGtFcGxNc2dUeXBlU29hOgpAQCAtNTYyLDEzICs1NjEsMTMgQEAKIAkJCQkJICBFUExfQ19ETExfTVVMVElDQVNUX1NPQSk7CiAJCQkvLyBkZXN0aW5hdGlvbiBub2RlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYkRzdE5vZGVJZCwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9DX0FEUl9CUk9BRENBU1QpOworCQkJCSAgICAgICAodTgpIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzEsIChCWVRFKSAwKTsKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzIsIChCWVRFKSAwKTsKKwkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLm1fbGVfYkZsYWcyLCAodTgpIDApOwogCQkJLy8gRVBMIHByb2ZpbGUgdmVyc2lvbgogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRXBsVmVyc2lvbiwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9TUEVDX1ZFUlNJT04pOworCQkJCSAgICAgICAodTgpIEVQTF9TUEVDX1ZFUlNJT04pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBrRXBsTXNnVHlwZVByZXM6CkBAIC01NzcsMTggKzU3NiwxOCBAQAogCQkJCQkgIEVQTF9DX0RMTF9NVUxUSUNBU1RfUFJFUyk7CiAJCQkvLyBkZXN0aW5hdGlvbiBub2RlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYkRzdE5vZGVJZCwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9DX0FEUl9CUk9BRENBU1QpOworCQkJCSAgICAgICAodTgpIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLm1fbGVfYkZsYWcxLCAoQllURSkgMCk7Ci0JCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX2JGbGFnMiwgKHU4KSAwKTsKIAkJCS8vIFBETyBzaXplCiAJCQkvL0FtaVNldFdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX3dTaXplLCAwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2Uga0VwbE1zZ1R5cGVQcmVxOgogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVxLm1fbGVfYkZsYWcxLCAoQllURSkgMCk7Ci0JCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXEubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX2JGbGFnMiwgKHU4KSAwKTsKIAkJCS8vIFBETyBzaXplCiAJCQkvL0FtaVNldFdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX3dTaXplLCAwKTsKIAkJCWJyZWFrOwpAQCAtNTk3LDcgKzU5Niw3IEBACiAJCQlicmVhazsKIAkJfQogCQkvLyBFUEwgbWVzc2FnZSB0eXBlCi0JCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iTWVzc2FnZVR5cGUsIChCWVRFKSBNc2dUeXBlX3ApOworCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYk1lc3NhZ2VUeXBlLCAodTgpIE1zZ1R5cGVfcCk7CiAJfQogCiAJKnBwRnJhbWVfcCA9IHBUeEZyYW1lOwpAQCAtNjczLDcgKzY3Miw3IEBACiAJdEVkcnZUeEJ1ZmZlciAqcFR4QnVmZmVyOwogCXVuc2lnbmVkIGludCB1aUhhbmRsZTsKIAl1bnNpZ25lZCBpbnQgdWlGcmFtZVNpemU7Ci0JQllURSBhYk11bHRpY2FzdE1hY1s2XTsKKwl1OCBhYk11bHRpY2FzdE1hY1s2XTsKIAl0RXBsRGxsQXN5bmNSZXFQcmlvcml0eSBBc3luY1JlcVByaW9yaXR5OwogCXVuc2lnbmVkIGludCB1aUZyYW1lQ291bnQ7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwpAQCAtNzEyLDcgKzcxMSw3IEBACiAJCQkvLyBFUEwgcHJvZmlsZSB2ZXJzaW9uCiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLgogCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UubV9sZV9iRXBsUHJvZmlsZVZlcnNpb24sCi0JCQkJICAgICAgIChCWVRFKSBFUExfU1BFQ19WRVJTSU9OKTsKKwkJCQkgICAgICAgKHU4KSBFUExfU1BFQ19WRVJTSU9OKTsKIAkJCS8vIEZlYXR1cmVGbGFncwogCQkJQW1pU2V0RHdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCiAJCQkJCW1fSWRlbnRSZXNwb25zZS5tX2xlX2R3RmVhdHVyZUZsYWdzLApAQCAtNzIxLDE4ICs3MjAsMTggQEAKIAkJCS8vIE1UVQogCQkJQW1pU2V0V29yZFRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC4KIAkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLm1fbGVfd010dSwKLQkJCQkgICAgICAgKFdPUkQpIEVwbERsbGtJbnN0YW5jZV9nLgorCQkJCSAgICAgICAodTE2KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkgICAgICAgbV9EbGxDb25maWdQYXJhbS5tX3VpQXN5bmNNdHUpOwogCQkJLy8gUG9sbEluU2l6ZQogCQkJQW1pU2V0V29yZFRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC4KIAkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLm1fbGVfd1BvbGxJblNpemUsCi0JCQkJICAgICAgIChXT1JEKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHUxNikgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJICAgICAgIG1fdWlQcmVxQWN0UGF5bG9hZExpbWl0KTsKIAkJCS8vIFBvbGxPdXRTaXplCiAJCQlBbWlTZXRXb3JkVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLgogCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UubV9sZV93UG9sbE91dFNpemUsCi0JCQkJICAgICAgIChXT1JEKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHUxNikgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJICAgICAgIG1fdWlQcmVzQWN0UGF5bG9hZExpbWl0KTsKIAkJCS8vIFJlc3BvbnNlVGltZSAvIFByZXNNYXhMYXRlbmN5CkBAIC05MzYsNyArOTM1LDcgQEAKIC8vICAgICAgICAgICAgICAgICAgICBFcGxEbGxrSW5zdGFuY2VfZy5tX2FOb2RlSW5mb1t1aUluZGV4XS5tX3VpTm9kZUlkID0gdWlJbmRleCArIDE7CiAJCQkJCUVwbERsbGtJbnN0YW5jZV9nLm1fYU5vZGVJbmZvW3VpSW5kZXhdLgogCQkJCQkgICAgbV93UHJlc1BheWxvYWRMaW1pdCA9Ci0JCQkJCSAgICAoV09SRCkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJCSAgICAodTE2KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkJICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJCSAgICBtX3VpSXNvY2hyUnhNYXhQYXlsb2FkOwogCQkJCX0KQEAgLTEyMzMsNyArMTIzMiw3IEBACiAJCQkJfQogCQkJCWlmICh1aUZyYW1lQ291bnQgPiAwKSB7CiAJCQkJCUVwbERsbGtJbnN0YW5jZV9nLm1fYkZsYWcyID0KLQkJCQkJICAgIChCWVRFKSAoKChBc3luY1JlcVByaW9yaXR5IDw8CisJCQkJCSAgICAodTgpICgoKEFzeW5jUmVxUHJpb3JpdHkgPDwKIAkJCQkJCSAgICAgIEVQTF9GUkFNRV9GTEFHMl9QUl9TSElGVCkKIAkJCQkJCSAgICAgJiBFUExfRlJBTUVfRkxBRzJfUFIpCiAJCQkJCQkgICAgfCAodWlGcmFtZUNvdW50ICYKQEAgLTEzMDcsNyArMTMwNiw3IEBACiAJCQkJCX0KIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLgogCQkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iRmxhZzIsCiAJCQkJCQkgICAgICAgRXBsRGxsa0luc3RhbmNlX2cuCkBAIC0xNTMzLDcgKzE1MzIsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsRGxsa1NldEZsYWcxT2ZOb2RlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQordEVwbEtlcm5lbCBFcGxEbGxrU2V0RmxhZzFPZk5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbERsbGtOb2RlSW5mbyAqcE5vZGVJbmZvOwpAQCAtMTY2NCw3ICsxNjYzLDcgQEAKIAkJcEludE5vZGVJbmZvLT5tX3BQcmVxVHhCdWZmZXIgPQogCQkgICAgJkVwbERsbGtJbnN0YW5jZV9nLm1fcFR4QnVmZmVyW3VpSGFuZGxlXTsKIAkJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLAotCQkJICAgICAgIChCWVRFKSBwTm9kZUluZm9fcC0+bV91aU5vZGVJZCk7CisJCQkgICAgICAgKHU4KSBwTm9kZUluZm9fcC0+bV91aU5vZGVJZCk7CiAKIAkJLy8gc2V0IHVwIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzCiAJCUVQTF9NRU1DUFkocEZyYW1lLT5tX2JlX2FiRHN0TWFjLCBwSW50Tm9kZUluZm8tPm1fYmVfYWJNYWNBZGRyLApAQCAtMjQzMSw3ICsyNDMwLDcgQEAKIAl0RXBsRGxsUmVxU2VydmljZUlkIFJlcVNlcnZpY2VJZDsKIAl1bnNpZ25lZCBpbnQgdWlBc25kU2VydmljZUlkOwogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKLQlCWVRFIGJGbGFnMTsKKwl1OCBiRmxhZzE7CiAKIAlCRU5DSE1BUktfTU9EXzAyX1NFVCgzKTsKIAlObXRTdGF0ZSA9IEVwbE5tdGtHZXRObXRTdGF0ZSgpOwpAQCAtMjQ2Niw3ICsyNDY1LDcgQEAKIAkJCQkJLy8gdXBkYXRlIGZyYW1lIChOTVQgc3RhdGUsIFJELCBSUywgUFIsIE1TLCBFTiBmbGFncykKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLgogCQkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iRmxhZzIsCiAJCQkJCQkgICAgICAgRXBsRGxsa0luc3RhbmNlX2cuCkBAIC0yNTQxLDcgKzI1NDAsNyBAQAogCQkJCQkvLyB1cGRhdGUgZnJhbWUgKE5NVCBzdGF0ZSwgUkQsIFJTLCBQUiwgTVMsIEVOIGZsYWdzKQogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkgICAgICAgKHU4KSBObXRTdGF0ZSk7CiAJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy4KIAkJCQkJCSAgICAgICBtX2xlX2JGbGFnMiwKIAkJCQkJCSAgICAgICBFcGxEbGxrSW5zdGFuY2VfZy4KQEAgLTI4MDMsNyArMjgwMiw3IEBACiAJCQkJfQogCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy4KIAkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCSAgICAgICBtX2xlX2JGbGFnMiwKIAkJCQkJICAgICAgIEVwbERsbGtJbnN0YW5jZV9nLm1fYkZsYWcyKTsKQEAgLTI4ODgsNyArMjg4Nyw3IEBACiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCQkgICAgICAgbV9TdGF0dXNSZXNwb25zZS4KIAkJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+CiAJCQkJCQkJICAgICAgIG1fRGF0YS5tX0FzbmQuCiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KQEAgLTI5NTQsNyArMjk1Myw3IEBACiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLgogCQkJCQkJCSAgICAgICBtX2xlX2JObXRTdGF0dXMsCi0JCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT4KIAkJCQkJCQkgICAgICAgbV9EYXRhLm1fQXNuZC4KIAkJCQkJCQkgICAgICAgbV9QYXlsb2FkLgpAQCAtMzE1NSw3ICszMTU0LDcgQEAKIAogICAgICAgRXhpdDoKIAlpZiAoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKSB7Ci0JCURXT1JEIGR3QXJnOworCQl1MzIgZHdBcmc7CiAKIAkJQkVOQ0hNQVJLX01PRF8wMl9UT0dHTEUoOSk7CiAKQEAgLTMyODYsNyArMzI4NSw3IEBACiAJCQkJCQkgICAgICAgbV9QYXlsb2FkLgogCQkJCQkJICAgICAgIG1fU3RhdHVzUmVzcG9uc2UuCiAJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkgICAgICAgKHU4KSBObXRTdGF0ZSk7CiAJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fQXNuZC4KIAkJCQkJCSAgICAgICBtX1BheWxvYWQuCiAJCQkJCQkgICAgICAgbV9TdGF0dXNSZXNwb25zZS4KQEAgLTMzMjIsNyArMzMyMSw3IEBACiAJCQkJCQkgICAgICAgbV9QYXlsb2FkLgogCQkJCQkJICAgICAgIG1fSWRlbnRSZXNwb25zZS4KIAkJCQkJCSAgICAgICBtX2xlX2JObXRTdGF0dXMsCi0JCQkJCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlKTsKKwkJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLgogCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UuCkBAIC0zMzYyLDEyICszMzYxLDEyIEBACiAJCQkJCQlpZiAoKEFtaUdldEJ5dGVGcm9tTGUKIAkJCQkJCSAgICAgKCZwVHhGcmFtZS0+CiAJCQkJCQkgICAgICBtX2xlX2JNZXNzYWdlVHlwZSkKLQkJCQkJCSAgICAgPT0gKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCkKKwkJCQkJCSAgICAgPT0gKHU4KSBrRXBsTXNnVHlwZUFzbmQpCiAJCQkJCQkgICAgJiYKIAkJCQkJCSAgICAoQW1pR2V0Qnl0ZUZyb21MZQogCQkJCQkJICAgICAoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLgogCQkJCQkJICAgICAgbV9sZV9iU2VydmljZUlkKQotCQkJCQkJICAgICA9PSAoQllURSkga0VwbERsbEFzbmRObXRDb21tYW5kKSkgewkvLyBwb3N0IGV2ZW50IGRpcmVjdGx5IHRvIE5tdE1udSBtb2R1bGUKKwkJCQkJCSAgICAgPT0gKHU4KSBrRXBsRGxsQXNuZE5tdENvbW1hbmQpKSB7CS8vIHBvc3QgZXZlbnQgZGlyZWN0bHkgdG8gTm10TW51IG1vZHVsZQogCQkJCQkJCUV2ZW50Lm1fRXZlbnRTaW5rID0KIAkJCQkJCQkgICAga0VwbEV2ZW50U2lua05tdE1udTsKIAkJCQkJCQlFdmVudC5tX0V2ZW50VHlwZSA9CkBAIC0zNDQ5LDcgKzM0NDgsNyBAQAogCiAgICAgICBFeGl0OgogCWlmIChSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpIHsKLQkJRFdPUkQgZHdBcmc7CisJCXUzMiBkd0FyZzsKIAogCQlCRU5DSE1BUktfTU9EXzAyX1RPR0dMRSg5KTsKIApAQCAtMzQ4NSw3ICszNDg0LDcgQEAKIAkJCQkgICAgdW5zaWduZWQgaW50IHVpRnJhbWVTaXplX3ApCiB7CiAJdEVwbE1zZ1R5cGUgTXNnVHlwZTsKLQlXT1JEIHdFdGhlclR5cGU7CisJdTE2IHdFdGhlclR5cGU7CiAKIAkvLyBjaGVjayBmcmFtZQogCWlmIChwRnJhbWVfcCAhPSBOVUxMKSB7CkBAIC0zNTA2LDcgKzM1MDUsNyBAQAogCQlpZiAod0V0aGVyVHlwZSA9PSBFUExfQ19ETExfRVRIRVJUWVBFX0VQTCkgewogCQkJLy8gc291cmNlIG5vZGUgSUQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWVfcC0+bV9sZV9iU3JjTm9kZUlkLAotCQkJCSAgICAgICAoQllURSkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0ubV91aU5vZGVJZCk7CiAKIAkJCS8vIGNoZWNrIG1lc3NhZ2UgdHlwZQpAQCAtMzUxNSw3ICszNTE0LDcgQEAKIAkJCWlmIChNc2dUeXBlID09IDApIHsKIAkJCQlNc2dUeXBlID0ga0VwbE1zZ1R5cGVBc25kOwogCQkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWVfcC0+bV9sZV9iTWVzc2FnZVR5cGUsCi0JCQkJCSAgICAgICAoQllURSkgTXNnVHlwZSk7CisJCQkJCSAgICAgICAodTgpIE1zZ1R5cGUpOwogCQkJfQogCiAJCQlpZiAoTXNnVHlwZSA9PSBrRXBsTXNnVHlwZUFzbmQpIHsKQEAgLTM1NDYsNyArMzU0NSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgRVBMX1RJTUVSX1VTRV9ISUdIUkVTICE9IEZBTFNFCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqIHBFdmVudEFyZ19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CkBAIC0zNTgzLDcgKzM1ODIsNyBAQAogCiAgICAgICBFeGl0OgogCWlmIChSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpIHsKLQkJRFdPUkQgZHdBcmc7CisJCXUzMiBkd0FyZzsKIAogCQlCRU5DSE1BUktfTU9EXzAyX1RPR0dMRSg5KTsKIApAQCAtMzYxNyw3ICszNjE2LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiTW5UaW1lckN5Y2xlKHRFcGxUaW1lckV2ZW50QXJnICogcEV2ZW50QXJnX3ApCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxEbGxrQ2JNblRpbWVyQ3ljbGUodEVwbFRpbWVyRXZlbnRBcmcgKnBFdmVudEFyZ19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwpAQCAtMzYzOSw3ICszNjM4LDcgQEAKIAogICAgICAgRXhpdDoKIAlpZiAoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKSB7Ci0JCURXT1JEIGR3QXJnOworCQl1MzIgZHdBcmc7CiAKIAkJQkVOQ0hNQVJLX01PRF8wMl9UT0dHTEUoOSk7CiAKQEAgLTM2NzAsOCArMzY2OSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbERsbGtDYk1uVGltZXJSZXNwb25zZSh0RXBsVGltZXJFdmVudEFyZyAqCi0JCQkJCQkgIHBFdmVudEFyZ19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICpwRXZlbnRBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxObXRTdGF0ZSBObXRTdGF0ZTsKQEAgLTM2OTMsNyArMzY5MSw3IEBACiAKICAgICAgIEV4aXQ6CiAJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewotCQlEV09SRCBkd0FyZzsKKwkJdTMyIGR3QXJnOwogCiAJCUJFTkNITUFSS19NT0RfMDJfVE9HR0xFKDkpOwogCkBAIC0zODI3LDI0ICszODI1LDI0IEBACiAJCQkvLyB1cGRhdGUgZnJhbWUgKHRhcmdldCkKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgogCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlSWQsCi0JCQkJICAgICAgIChCWVRFKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHU4KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkgICAgICAgbV9MYXN0UmVxU2VydmljZUlkKTsKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgogCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlVGFyZ2V0LAotCQkJCSAgICAgICAoQllURSkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fdWlMYXN0VGFyZ2V0Tm9kZUlkKTsKIAogCQl9IGVsc2UgewkvLyBpbnZpdGUgbm9ib2R5CiAJCQkvLyB1cGRhdGUgZnJhbWUgKHRhcmdldCkKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgotCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlSWQsIChCWVRFKSAwKTsKKwkJCQkgICAgICAgbV9sZV9iUmVxU2VydmljZUlkLCAodTgpIDApOwogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EuCi0JCQkJICAgICAgIG1fbGVfYlJlcVNlcnZpY2VUYXJnZXQsIChCWVRFKSAwKTsKKwkJCQkgICAgICAgbV9sZV9iUmVxU2VydmljZVRhcmdldCwgKHU4KSAwKTsKIAkJfQogCiAJCS8vIHVwZGF0ZSBmcmFtZSAoTk1UIHN0YXRlKQogCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYS5tX2xlX2JObXRTdGF0dXMsCi0JCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlX3ApOworCQkJICAgICAgICh1OCkgTm10U3RhdGVfcCk7CiAKIAkJLy8gc2VuZCBTb0EgZnJhbWUKIAkJUmV0ID0gRWRydlNlbmRUeE1zZyhwVHhCdWZmZXIpOwpAQCAtMzkyMSw3ICszOTE5LDcgQEAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFZHJ2VHhCdWZmZXIgKnBUeEJ1ZmZlciA9IE5VTEw7CiAJdEVwbEZyYW1lICpwVHhGcmFtZTsKLQlCWVRFIGJGbGFnMSA9IDA7CisJdTggYkZsYWcxID0gMDsKIAogCWlmIChFcGxEbGxrSW5zdGFuY2VfZy5tX3BDdXJOb2RlSW5mbyA9PSBOVUxMKSB7CS8vIHN0YXJ0IHdpdGggZmlyc3QgaXNvY2hyb25vdXMgQ04KIAkJRXBsRGxsa0luc3RhbmNlX2cubV9wQ3VyTm9kZUluZm8gPQpAQCAtMzk3Miw3ICszOTcwLDcgQEAKIAkJaWYgKHBUeEJ1ZmZlciA9PSAmRXBsRGxsa0luc3RhbmNlX2cubV9wVHhCdWZmZXJbRVBMX0RMTEtfVFhGUkFNRV9QUkVTXSkgewkvLyBQUmVzIG9mIE1OIHdpbGwgYmUgc2VudAogCQkJLy8gdXBkYXRlIE5NVCBzdGF0ZQogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLm1fbGVfYk5tdFN0YXR1cywKLQkJCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlX3ApOworCQkJCSAgICAgICAodTgpIE5tdFN0YXRlX3ApOwogCQkJKnBEbGxTdGF0ZVByb3Bvc2VkX3AgPSBrRXBsRGxsTXNXYWl0U29hVHJpZzsKIAkJfQogCQkvLyAkJCQgZC5rLiBzZXQgRVBMX0ZSQU1FX0ZMQUcxX01TIGlmIG5lY2Vzc2FyeQpAQCAtNDAxNSw3ICs0MDEzLDcgQEAKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JQllURSBhYkJ1ZmZlclsxOF07CisJdTggYWJCdWZmZXJbMThdOwogCXRFcGxGcmFtZSAqcEZyYW1lID0gKHRFcGxGcmFtZSAqKSBhYkJ1ZmZlcjsKIAl0RXBsRnJhbWVJbmZvIEZyYW1lSW5mbzsKIApAQCAtNDAyNiwxMyArNDAyNCwxMyBAQAogCQkvLyBBU25kIHNlcnZpY2UgcmVnaXN0ZXJlZD8KIAkJaWYgKEVwbERsbGtJbnN0YW5jZV9nLm1fYUFzbmRGaWx0ZXJbUmVxU2VydmljZUlkX3BdID09IGtFcGxEbGxBc25kRmlsdGVyQW55KSB7CS8vIEFTbmQgc2VydmljZSBJRCBpcyByZWdpc3RlcmVkCiAJCQlBbWlTZXRCeXRlVG9MZSgmcEZyYW1lLT5tX2xlX2JTcmNOb2RlSWQsCi0JCQkJICAgICAgIChCWVRFKSB1aU5vZGVJZF9wKTsKKwkJCQkgICAgICAgKHU4KSB1aU5vZGVJZF9wKTsKIAkJCS8vIEVQTCBNc2dUeXBlIEFTbmQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWUtPm1fbGVfYk1lc3NhZ2VUeXBlLAotCQkJCSAgICAgICAoQllURSkga0VwbE1zZ1R5cGVBc25kKTsKKwkJCQkgICAgICAgKHU4KSBrRXBsTXNnVHlwZUFzbmQpOwogCQkJLy8gQVNuZCBTZXJ2aWNlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fbGVfYlNlcnZpY2VJZCwKLQkJCQkgICAgICAgKEJZVEUpIFJlcVNlcnZpY2VJZF9wKTsKKwkJCQkgICAgICAgKHU4KSBSZXFTZXJ2aWNlSWRfcCk7CiAJCQkvLyBjcmVhdGUgZnJhbWUgaW5mbyBzdHJ1Y3R1cmUKIAkJCUZyYW1lSW5mby5tX3BGcmFtZSA9IHBGcmFtZTsKIAkJCUZyYW1lSW5mby5tX3VpRnJhbWVTaXplID0gMTg7CS8vIGVtcHR5IG5vbiBleGlzdGluZyBBU25kIGZyYW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbGtDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCmluZGV4IDM1OTA4M2UuLjBlMjgzZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCkBAIC0xNDIsOSArMTQyLDkgQEAKIAl0U2hiSW5zdGFuY2UgbV9TaGJJbnN0YW5jZVR4R2VuOwkvLyBGSUZPIGZvciBUeCBmcmFtZXMgd2l0aCBnZW5lcmljIHByaW9yaXR5CiAjZWxzZQogCXVuc2lnbmVkIGludCBtX3VpRnJhbWVTaXplTm10OwotCUJZVEUgbV9hYkZyYW1lTm10WzE1MDBdOworCXU4IG1fYWJGcmFtZU5tdFsxNTAwXTsKIAl1bnNpZ25lZCBpbnQgbV91aUZyYW1lU2l6ZUdlbjsKLQlCWVRFIG1fYWJGcmFtZUdlblsxNTAwXTsKKwl1OCBtX2FiRnJhbWVHZW5bMTUwMF07CiAjZW5kaWYKIAogCXRFcGxEbGxrQ2FsU3RhdGlzdGljcyBtX1N0YXRpc3RpY3M7CkBAIC0yMDIsNyArMjAyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIEVwbERsbGtDYWxBZGRJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbERsbGtDYWxBZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC0yNzksNyArMjc5LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIEVwbERsbGtDYWxEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbERsbGtDYWxEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC01MzYsNyArNTM2LDcgQEAKIAljYXNlIGtFcGxEbGxBc3luY1JlcVByaW9ObXQ6CS8vIE5NVCByZXF1ZXN0IHByaW9yaXR5CiAJCVNoYkVycm9yID0KIAkJICAgIFNoYkNpclJlYWREYXRhQmxvY2soRXBsRGxsa0NhbEluc3RhbmNlX2cubV9TaGJJbnN0YW5jZVR4Tm10LAotCQkJCQkoQllURSAqKSBwRnJhbWVfcCwgKnB1aUZyYW1lU2l6ZV9wLAorCQkJCQkodTggKikgcEZyYW1lX3AsICpwdWlGcmFtZVNpemVfcCwKIAkJCQkJJnVsRnJhbWVTaXplKTsKIAkJLy8gcmV0dXJucyBrU2hiT2ssIGtTaGJEYXRhVHJ1bmNhdGVkLCBrU2hiSW52YWxpZEFyZywga1NoYk5vUmVhZGFibGVEYXRhCiAJCWJyZWFrOwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJZGVmYXVsdDoJCS8vIGdlbmVyaWMgcHJpb3JpdHkKIAkJU2hiRXJyb3IgPQogCQkgICAgU2hiQ2lyUmVhZERhdGFCbG9jayhFcGxEbGxrQ2FsSW5zdGFuY2VfZy5tX1NoYkluc3RhbmNlVHhHZW4sCi0JCQkJCShCWVRFICopIHBGcmFtZV9wLCAqcHVpRnJhbWVTaXplX3AsCisJCQkJCSh1OCAqKSBwRnJhbWVfcCwgKnB1aUZyYW1lU2l6ZV9wLAogCQkJCQkmdWxGcmFtZVNpemUpOwogCQkvLyByZXR1cm5zIGtTaGJPaywga1NoYkRhdGFUcnVuY2F0ZWQsIGtTaGJJbnZhbGlkQXJnLCBrU2hiTm9SZWFkYWJsZURhdGEKIAkJYnJlYWs7CkBAIC04NzYsNyArODc2LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRFcGxLZXJuZWwgRXBsRGxsa0NhbElzc3VlUmVxdWVzdCh0RXBsRGxsUmVxU2VydmljZUlkIFNlcnZpY2VfcCwKLQkJCQkgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQorCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsdUNhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKaW5kZXggN2Y0YTE3NC4uZjk2ZmU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsRGxsdUNhbEFkZEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRGxsdUNhbEFkZEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBFcGxEbGx1Q2FsRGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxEbGx1Q2FsRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0zNTUsNyArMzU1LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRFcGxLZXJuZWwgRXBsRGxsdUNhbElzc3VlUmVxdWVzdCh0RXBsRGxsUmVxU2VydmljZUlkIFNlcnZpY2VfcCwKLQkJCQkgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQorCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXJyb3JIYW5kbGVyay5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKaW5kZXggZDEyNTIxZi4uNmJhZWQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKQEAgLTk3LDkgKzk3LDkgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlEV09SRCBtX2R3Q3VtdWxhdGl2ZUNudDsJLy8gc3ViaW5kZXggMQotCURXT1JEIG1fZHdUaHJlc2hvbGRDbnQ7CS8vIHN1YmluZGV4IDIKLQlEV09SRCBtX2R3VGhyZXNob2xkOwkvLyBzdWJpbmRleCAzCisJdTMyIG1fZHdDdW11bGF0aXZlQ250OwkvLyBzdWJpbmRleCAxCisJdTMyIG1fZHdUaHJlc2hvbGRDbnQ7CS8vIHN1YmluZGV4IDIKKwl1MzIgbV9kd1RocmVzaG9sZDsJLy8gc3ViaW5kZXggMwogCiB9IHRFcGxFcnJvckhhbmRsZXJrRXJyb3JDb3VudGVyOwogCkBAIC0xMTIsOSArMTEyLDkgQEAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9NTikpICE9IDApCiAJdEVwbEVycm9ySGFuZGxlcmtFcnJvckNvdW50ZXIgbV9NbkNyY0VycjsJLy8gb2JqZWN0IDB4MUMwMAogCXRFcGxFcnJvckhhbmRsZXJrRXJyb3JDb3VudGVyIG1fTW5DeWNUaW1lRXhjZWVkOwkvLyBvYmplY3QgMHgxQzAyCi0JRFdPUkQgbV9hZHdNbkNuTG9zc1ByZXNDdW1DbnRbMjU0XTsJLy8gb2JqZWN0IDB4MUMwNwotCURXT1JEIG1fYWR3TW5Dbkxvc3NQcmVzVGhyQ250WzI1NF07CS8vIG9iamVjdCAweDFDMDgKLQlEV09SRCBtX2Fkd01uQ25Mb3NzUHJlc1RocmVzaG9sZFsyNTRdOwkvLyBvYmplY3QgMHgxQzA5CisJdTMyIG1fYWR3TW5Dbkxvc3NQcmVzQ3VtQ250WzI1NF07CS8vIG9iamVjdCAweDFDMDcKKwl1MzIgbV9hZHdNbkNuTG9zc1ByZXNUaHJDbnRbMjU0XTsJLy8gb2JqZWN0IDB4MUMwOAorCXUzMiBtX2Fkd01uQ25Mb3NzUHJlc1RocmVzaG9sZFsyNTRdOwkvLyBvYmplY3QgMHgxQzA5CiAJQk9PTCBtX2FmTW5Dbkxvc3NQcmVzRXZlbnRbMjU0XTsKICNlbmRpZgogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJCQkJCSAgIHVuc2lnbmVkIGludCB1aUluZGV4X3ApOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotc3RhdGljIHRFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0xpbmtBcnJheShEV09SRCAqIHBkd1ZhbHVlX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrTGlua0FycmF5KHUzMiAqIHBkd1ZhbHVlX3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlWYWx1ZUNvdW50X3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKTsKICNlbmRpZgpAQCAtMTc2LDcgKzE3Niw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0luaXQodm9pZCkKK3RFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0luaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAzLDcgKzIwMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0FkZEluc3RhbmNlKHZvaWQpCit0RXBsS2VybmVsIEVwbEVycm9ySGFuZGxlcmtBZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zMDYsNyArMzA2LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzMzLDcgKzMzMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEVycm9ySGFuZGxlcmtQcm9jZXNzKHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgbG9uZyB1bERsbEVycm9yRXZlbnRzOwpAQCAtNzEzLDcgKzcxMyw3IEBACiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCiAJVmFyUGFyYW0ubV9wRGF0YSA9ICZwRXJyb3JDb3VudGVyX3AtPm1fZHdDdW11bGF0aXZlQ250OwotCVZhclBhcmFtLm1fU2l6ZSA9IHNpemVvZihEV09SRCk7CisJVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKHUzMik7CiAJVmFyUGFyYW0ubV91aUluZGV4ID0gdWlJbmRleF9wOwogCVZhclBhcmFtLm1fdWlTdWJpbmRleCA9IDB4MDE7CiAJVmFyUGFyYW0ubV9WYWxpZEZsYWcgPSBrVmFyVmFsaWRBbGw7CkBAIC03MjMsNyArNzIzLDcgQEAKIAl9CiAKIAlWYXJQYXJhbS5tX3BEYXRhID0gJnBFcnJvckNvdW50ZXJfcC0+bV9kd1RocmVzaG9sZENudDsKLQlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YoRFdPUkQpOworCVZhclBhcmFtLm1fU2l6ZSA9IHNpemVvZih1MzIpOwogCVZhclBhcmFtLm1fdWlJbmRleCA9IHVpSW5kZXhfcDsKIAlWYXJQYXJhbS5tX3VpU3ViaW5kZXggPSAweDAyOwogCVZhclBhcmFtLm1fVmFsaWRGbGFnID0ga1ZhclZhbGlkQWxsOwpAQCAtNzMzLDcgKzczMyw3IEBACiAJfQogCiAJVmFyUGFyYW0ubV9wRGF0YSA9ICZwRXJyb3JDb3VudGVyX3AtPm1fZHdUaHJlc2hvbGQ7Ci0JVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKERXT1JEKTsKKwlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YodTMyKTsKIAlWYXJQYXJhbS5tX3VpSW5kZXggPSB1aUluZGV4X3A7CiAJVmFyUGFyYW0ubV91aVN1YmluZGV4ID0gMHgwMzsKIAlWYXJQYXJhbS5tX1ZhbGlkRmxhZyA9IGtWYXJWYWxpZEFsbDsKQEAgLTc2MywxOCArNzYzLDE4IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotc3RhdGljIHRFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0xpbmtBcnJheShEV09SRCAqIHBkd1ZhbHVlX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrTGlua0FycmF5KHUzMiAqIHBkd1ZhbHVlX3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlWYWx1ZUNvdW50X3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKLQlCWVRFIGJJbmRleEVudHJpZXM7CisJdTggYkluZGV4RW50cmllczsKIAogCUVudHJ5U2l6ZSA9ICh0RXBsT2JkU2l6ZSkgc2l6ZW9mKGJJbmRleEVudHJpZXMpOwogCVJldCA9IEVwbE9iZFJlYWRFbnRyeSh1aUluZGV4X3AsCi0JCQkgICAgICAweDAwLCAodm9pZCBHRU5FUklDICopJmJJbmRleEVudHJpZXMsICZFbnRyeVNpemUpOworCQkJICAgICAgMHgwMCwgKHZvaWQgKikmYkluZGV4RW50cmllcywgJkVudHJ5U2l6ZSk7CiAKIAlpZiAoKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgfHwgKGJJbmRleEVudHJpZXMgPT0gMHgwMCkpIHsKIAkJLy8gT2JqZWN0IGRvZXNuJ3QgZXhpc3Qgb3IgaW52YWxpZCBlbnRyeSBudW1iZXIKQEAgLTc4Niw3ICs3ODYsNyBAQAogCQl1aVZhbHVlQ291bnRfcCA9IGJJbmRleEVudHJpZXM7CiAJfQogCi0JVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKERXT1JEKTsKKwlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YodTMyKTsKIAlWYXJQYXJhbS5tX3VpSW5kZXggPSB1aUluZGV4X3A7CiAJVmFyUGFyYW0ubV9WYWxpZEZsYWcgPSBrVmFyVmFsaWRBbGw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnQuaAppbmRleCBiNmRjMWI5Li45MTBiZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudC5oCkBAIC0yNDgsOCArMjQ4LDggQEAKIAl0RXBsRXZlbnRTb3VyY2UgbV9FdmVudFNvdXJjZTsJLy8gbW9kdWxlIHdoaWNoIHBvc3RlZCB0aGlzIGVycm9yIGV2ZW50CiAJdEVwbEtlcm5lbCBtX0VwbEVycm9yOwkvLyBFUEwgZXJyb3Igd2hpY2ggb2NjdXJlZAogCXVuaW9uIHsKLQkJQllURSBtX2JBcmc7Ci0JCURXT1JEIG1fZHdBcmc7CisJCXU4IG1fYkFyZzsKKwkJdTMyIG1fZHdBcmc7CiAJCXRFcGxFdmVudFNvdXJjZSBtX0V2ZW50U291cmNlOwkvLyBmcm9tIEV2ZW50ay91IG1vZHVsZSAob3JpZ2luYXRpbmcgZXJyb3Igc291cmNlKQogCQl0RXBsRXZlbnRPYmRFcnJvciBtX09iZEVycm9yOwkvLyBmcm9tIE9iZCBtb2R1bGUKIC8vICAgICAgICB0RXBsRXJySGlzdG9yeUVudHJ5ICAgICBtX0hpc3RvcnlFbnRyeTsgLy8gZnJvbSBObXRrL3UgbW9kdWxlCkBAIC0yNjcsMTAgKzI2NywxMCBAQAogfSB0RXBsRXJyb3JIYW5kbGVya0V2ZW50OwogCiAvLyBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgaW5mb3JtZWQgYWJvdXQgc3luYyBldmVudAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxTeW5jQ2IpICh2b2lkKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbFN5bmNDYikgKHZvaWQpOwogCiAvLyBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBldmVudHMKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsUHJvY2Vzc0V2ZW50Q2IpICh0RXBsRXZlbnQgKiBwRXBsRXZlbnRfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxQcm9jZXNzRXZlbnRDYikgKHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gZnVuY3Rpb24gcHJvdG90eXBlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnRrLmMKaW5kZXggODA2OGE2Yy4uZWYzNjgxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudGsuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50ay5jCkBAIC0xMDAsOCArMTAwLDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0xNzIsNyArMTcyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtJbml0KHRFcGxTeW5jQ2IgcGZuQ2JTeW5jX3ApCit0RXBsS2VybmVsIEVwbEV2ZW50a0luaXQodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTk2LDcgKzE5Niw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnRrQWRkSW5zdGFuY2UodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKK3RFcGxLZXJuZWwgRXBsRXZlbnRrQWRkSW5zdGFuY2UodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTI3NSw3ICsyNzUsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a0RlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRXZlbnRrRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTMzOSw3ICszMzksNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEV2ZW50a1Byb2Nlc3ModEVwbEV2ZW50ICpwRXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2U7CkBAIC01NjIsNyArNTYyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKQordEVwbEtlcm5lbCBFcGxFdmVudGtQb3N0KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC03NTUsMTIgKzc1NSwxMiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a1Bvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKLQkJCQkgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKQordEVwbEtlcm5lbCBFcGxFdmVudGtQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKLQlCWVRFIGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOworCXU4IGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOwogCXRFcGxFdmVudEVycm9yICpwRXZlbnRFcnJvciA9ICh0RXBsRXZlbnRFcnJvciAqKSBhYkJ1ZmZlcjsKIAl0RXBsRXZlbnQgRXBsRXZlbnQ7CiAKQEAgLTgxNCw3ICs4MTQsNyBAQAogCXRTaGJFcnJvciBTaGJFcnJvcjsKIC8vdW5zaWduZWQgbG9uZyAgIHVsQmxvY2tDb3VudDsKIC8vdW5zaWduZWQgbG9uZyAgIHVsRGF0YVNpemU7Ci0JQllURSBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKKwl1OCBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKIAkvLyBkLmsuOiBhYkRhdGFCdWZmZXIgY29udGFpbnMgdGhlIGNvbXBsZXRlIHRFcGxFdmVudCBzdHJ1Y3R1cmUKIAkvLyAgICAgICBhbmQgYmVoaW5kIHRoaXMgdGhlIGFyZ3VtZW50CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnR1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50dS5jCmluZGV4IDgxNWY5YTguLjNhZTI4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudHUuYwpAQCAtOTYsOCArOTYsOCBAQAogCiAvLyBUcmFjZVBvaW50IHN1cHBvcnQgZm9yIHJlYWx0aW1lLWRlYnVnZ2luZwogI2lmZGVmIF9EQkdfVFJBQ0VfUE9JTlRTXwotdm9pZCBQVUJMSUMgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChCWVRFIGJUcmFjZVBvaW50TnVtYmVyX3ApOwotdm9pZCBQVUJMSUMgVGd0RGJnUG9zdFRyYWNlVmFsdWUoRFdPUkQgZHdUcmFjZVZhbHVlX3ApOwordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApOwordm9pZCBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh1MzIgZHdUcmFjZVZhbHVlX3ApOwogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKSAgIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQocCkKICNkZWZpbmUgVEdUX0RCR19QT1NUX1RSQUNFX1ZBTFVFKHYpICAgICBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh2KQogI2Vsc2UKQEAgLTE3Miw3ICsxNzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dUluaXQodEVwbFByb2Nlc3NFdmVudENiIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApCit0RXBsS2VybmVsIEVwbEV2ZW50dUluaXQodEVwbFByb2Nlc3NFdmVudENiIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5OSw4ICsxOTksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dUFkZEluc3RhbmNlKHRFcGxQcm9jZXNzRXZlbnRDYgotCQkJCSAgICAgICBwZm5BcGlQcm9jZXNzRXZlbnRDYl9wKQordEVwbEtlcm5lbCBFcGxFdmVudHVBZGRJbnN0YW5jZSh0RXBsUHJvY2Vzc0V2ZW50Q2IgcGZuQXBpUHJvY2Vzc0V2ZW50Q2JfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTI4MCw3ICsyNzksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dURlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRXZlbnR1RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTM0OCw3ICszNDcsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVByb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEV2ZW50dVByb2Nlc3ModEVwbEV2ZW50ICpwRXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2U7CkBAIC01MTUsNyArNTE0LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKQordEVwbEtlcm5lbCBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC02ODksMTIgKzY4OCwxMiBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVBvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKLQkJCQkgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKQordEVwbEtlcm5lbCBFcGxFdmVudHVQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKLQlCWVRFIGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOworCXU4IGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOwogCXRFcGxFdmVudEVycm9yICpwRXZlbnRFcnJvciA9ICh0RXBsRXZlbnRFcnJvciAqKSBhYkJ1ZmZlcjsKIAl0RXBsRXZlbnQgRXBsRXZlbnQ7CiAKQEAgLTc1MSw3ICs3NTAsNyBAQAogCXRTaGJFcnJvciBTaGJFcnJvcjsKIC8vdW5zaWduZWQgbG9uZyAgIHVsQmxvY2tDb3VudDsKIC8vdW5zaWduZWQgbG9uZyAgIHVsRGF0YVNpemU7Ci0JQllURSBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKKwl1OCBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKIAkvLyBkLmsuOiBhYkRhdGFCdWZmZXIgY29udGFpbnMgdGhlIGNvbXBsZXRlIHRFcGxFdmVudCBzdHJ1Y3R1cmUKIAkvLyAgICAgICBhbmQgYmVoaW5kIHRoaXMgdGhlIGFyZ3VtZW50CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRnJhbWUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRnJhbWUuaAppbmRleCA5YTdmOGI5Li5iYTFhZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEZyYW1lLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxGcmFtZS5oCkBAIC0xMjIsMTU1ICsxMjIsMTU1IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvLyBPZmZzZXQgMTcKLQlCWVRFIG1fbGVfYlJlczE7CS8vIHJlc2VydmVkCisJdTggbV9sZV9iUmVzMTsJLy8gcmVzZXJ2ZWQKIAkvLyBPZmZzZXQgMTgKLQlCWVRFIG1fbGVfYkZsYWcxOwkvLyBGbGFnczogTUMsIFBTCisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNQywgUFMKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiByZXMKIAkvLyBPZmZzZXQgMjAKIAl0RXBsTmV0VGltZSBtX2xlX05ldFRpbWU7CS8vIHN1cHBvcnRlZCBpZiBEX05NVF9OZXRUaW1lSXNSZWFsVGltZV9CT09MIGlzIHNldAogCS8vIE9mZnNldCAyOAotCVFXT1JEIG1fbGVfUmVsYXRpdmVUaW1lOwkvLyBpbiB1cyAoc3VwcG9ydGVkIGlmIERfTk1UX1JlbGF0aXZlVGltZV9CT09MIGlzIHNldCkKKwl1NjQgbV9sZV9SZWxhdGl2ZVRpbWU7CS8vIGluIHVzIChzdXBwb3J0ZWQgaWYgRF9OTVRfUmVsYXRpdmVUaW1lX0JPT0wgaXMgc2V0KQogCiB9IFBBQ0tfU1RSVUNUIHRFcGxTb2NGcmFtZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxNwotCUJZVEUgbV9sZV9iUmVzMTsJLy8gcmVzZXJ2ZWQKKwl1OCBtX2xlX2JSZXMxOwkvLyByZXNlcnZlZAogCS8vIE9mZnNldCAxOAotCUJZVEUgbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNUywgRUEsIFJECisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNUywgRUEsIFJECiAJLy8gT2Zmc2V0IDE5Ci0JQllURSBtX2xlX2JGbGFnMjsJLy8gRmxhZ3M6IHJlcworCXU4IG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCiAJLy8gT2Zmc2V0IDIwCi0JQllURSBtX2xlX2JQZG9WZXJzaW9uOworCXU4IG1fbGVfYlBkb1ZlcnNpb247CiAJLy8gT2Zmc2V0IDIxCi0JQllURSBtX2xlX2JSZXMyOwkvLyByZXNlcnZlZAorCXU4IG1fbGVfYlJlczI7CS8vIHJlc2VydmVkCiAJLy8gT2Zmc2V0IDIyCi0JV09SRCBtX2xlX3dTaXplOworCXUxNiBtX2xlX3dTaXplOwogCS8vIE9mZnNldCAyNAotCUJZVEUgbV9sZV9hYlBheWxvYWRbMjU2IC8qRF9OTVRfSXNvY2hyUnhNYXhQYXlsb2FkX1UxNiAqLyBdOworCXU4IG1fbGVfYWJQYXlsb2FkWzI1NiAvKkRfTk1UX0lzb2NoclJ4TWF4UGF5bG9hZF9VMTYgKi8gXTsKIAogfSBQQUNLX1NUUlVDVCB0RXBsUHJlcUZyYW1lOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE3Ci0JQllURSBtX2xlX2JObXRTdGF0dXM7CS8vIE5NVCBzdGF0ZQorCXU4IG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IE1TLCBFTiwgUkQKKwl1OCBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IE1TLCBFTiwgUkQKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiBQUiwgUlMKIAkvLyBPZmZzZXQgMjAKLQlCWVRFIG1fbGVfYlBkb1ZlcnNpb247CisJdTggbV9sZV9iUGRvVmVyc2lvbjsKIAkvLyBPZmZzZXQgMjEKLQlCWVRFIG1fbGVfYlJlczI7CS8vIHJlc2VydmVkCisJdTggbV9sZV9iUmVzMjsJLy8gcmVzZXJ2ZWQKIAkvLyBPZmZzZXQgMjIKLQlXT1JEIG1fbGVfd1NpemU7CisJdTE2IG1fbGVfd1NpemU7CiAJLy8gT2Zmc2V0IDI0Ci0JQllURSBtX2xlX2FiUGF5bG9hZFsyNTYJLypEX05NVF9Jc29jaHJSeE1heFBheWxvYWRfVTE2CisJdTggbV9sZV9hYlBheWxvYWRbMjU2CS8qRF9OTVRfSXNvY2hyUnhNYXhQYXlsb2FkX1UxNgogCQkJCSAgIC8gRF9OTVRfSXNvY2hyVHhNYXhQYXlsb2FkX1UxNiAqLyBdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxQcmVzRnJhbWU7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvLyBPZmZzZXQgMTcKLQlCWVRFIG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCisJdTggbV9sZV9iTm10U3RhdHVzOwkvLyBOTVQgc3RhdGUKIAkvLyBPZmZzZXQgMTgKLQlCWVRFIG1fbGVfYkZsYWcxOwkvLyBGbGFnczogRUEsIEVSCisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBFQSwgRVIKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiByZXMKIAkvLyBPZmZzZXQgMjAKLQlCWVRFIG1fbGVfYlJlcVNlcnZpY2VJZDsKKwl1OCBtX2xlX2JSZXFTZXJ2aWNlSWQ7CiAJLy8gT2Zmc2V0IDIxCi0JQllURSBtX2xlX2JSZXFTZXJ2aWNlVGFyZ2V0OworCXU4IG1fbGVfYlJlcVNlcnZpY2VUYXJnZXQ7CiAJLy8gT2Zmc2V0IDIyCi0JQllURSBtX2xlX2JFcGxWZXJzaW9uOworCXU4IG1fbGVfYkVwbFZlcnNpb247CiAKIH0gUEFDS19TVFJVQ1QgdEVwbFNvYUZyYW1lOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JV09SRCBtX3dFbnRyeVR5cGU7Ci0JV09SRCBtX3dFcnJvckNvZGU7CisJdTE2IG1fd0VudHJ5VHlwZTsKKwl1MTYgbV93RXJyb3JDb2RlOwogCXRFcGxOZXRUaW1lIG1fVGltZVN0YW1wOwotCUJZVEUgbV9hYkFkZEluZm9bOF07CisJdTggbV9hYkFkZEluZm9bOF07CiAKIH0gUEFDS19TVFJVQ1QgdEVwbEVyckhpc3RvcnlFbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxOAotCUJZVEUgbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBFTiwgRUMKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCi0JQllURSBtX2xlX2JObXRTdGF0dXM7CS8vIE5NVCBzdGF0ZQotCUJZVEUgbV9sZV9iUmVzMVszXTsKLQlRV09SRCBtX2xlX3F3U3RhdGljRXJyb3I7CS8vIHN0YXRpYyBlcnJvciBiaXQgZmllbGQKKwl1OCBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IEVOLCBFQworCXU4IG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCisJdTggbV9sZV9iTm10U3RhdHVzOwkvLyBOTVQgc3RhdGUKKwl1OCBtX2xlX2JSZXMxWzNdOworCXU2NCBtX2xlX3F3U3RhdGljRXJyb3I7CS8vIHN0YXRpYyBlcnJvciBiaXQgZmllbGQKIAl0RXBsRXJySGlzdG9yeUVudHJ5IG1fbGVfYUVyckhpc3RvcnlFbnRyeVsxNF07CiAKIH0gUEFDS19TVFJVQ1QgdEVwbFN0YXR1c1Jlc3BvbnNlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IHJlcwotCUJZVEUgbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiBQUiwgUlMKLQlCWVRFIG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCi0JQllURSBtX2xlX2JJZGVudFJlc3BGbGFnczsJLy8gRmxhZ3M6IEZXCi0JQllURSBtX2xlX2JFcGxQcm9maWxlVmVyc2lvbjsKLQlCWVRFIG1fbGVfYlJlczE7Ci0JRFdPUkQgbV9sZV9kd0ZlYXR1cmVGbGFnczsJLy8gTk1UX0ZlYXR1cmVGbGFnc19VMzIKLQlXT1JEIG1fbGVfd010dTsJCS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuQXN5bmNNVFVfVTE2OiBDX0lQX01JTl9NVFUgLSBDX0lQX01BWF9NVFUKLQlXT1JEIG1fbGVfd1BvbGxJblNpemU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlcUFjdFBheWxvYWRfVTE2Ci0JV09SRCBtX2xlX3dQb2xsT3V0U2l6ZTsJLy8gTk1UX0N5Y2xlVGltaW5nX1JFQy5QUmVzQWN0UGF5bG9hZF9VMTYKLQlEV09SRCBtX2xlX2R3UmVzcG9uc2VUaW1lOwkvLyBOTVRfQ3ljbGVUaW1pbmdfUkVDLlBSZXNNYXhMYXRlbmN5X1UzMgotCVdPUkQgbV9sZV93UmVzMjsKLQlEV09SRCBtX2xlX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCi0JRFdPUkQgbV9sZV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgotCURXT1JEIG1fbGVfZHdQcm9kdWN0Q29kZTsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5Qcm9kdWN0Q29kZV9VMzIKLQlEV09SRCBtX2xlX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKLQlEV09SRCBtX2xlX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgotCVFXT1JEIG1fbGVfcXdWZW5kb3JTcGVjaWZpY0V4dDE7Ci0JRFdPUkQgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCi0JRFdPUkQgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCi0JRFdPUkQgbV9sZV9kd0FwcGxpY2F0aW9uU3dEYXRlOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dEYXRlX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIGRhdGUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2xlX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQotCURXT1JEIG1fbGVfZHdJcEFkZHJlc3M7Ci0JRFdPUkQgbV9sZV9kd1N1Ym5ldE1hc2s7Ci0JRFdPUkQgbV9sZV9kd0RlZmF1bHRHYXRld2F5OwotCUJZVEUgbV9sZV9zSG9zdG5hbWVbMzJdOwotCUJZVEUgbV9sZV9hYlZlbmRvclNwZWNpZmljRXh0Mls0OF07CisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiByZXMKKwl1OCBtX2xlX2JGbGFnMjsJLy8gRmxhZ3M6IFBSLCBSUworCXU4IG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCisJdTggbV9sZV9iSWRlbnRSZXNwRmxhZ3M7CS8vIEZsYWdzOiBGVworCXU4IG1fbGVfYkVwbFByb2ZpbGVWZXJzaW9uOworCXU4IG1fbGVfYlJlczE7CisJdTMyIG1fbGVfZHdGZWF0dXJlRmxhZ3M7CS8vIE5NVF9GZWF0dXJlRmxhZ3NfVTMyCisJdTE2IG1fbGVfd010dTsJCS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuQXN5bmNNVFVfVTE2OiBDX0lQX01JTl9NVFUgLSBDX0lQX01BWF9NVFUKKwl1MTYgbV9sZV93UG9sbEluU2l6ZTsJLy8gTk1UX0N5Y2xlVGltaW5nX1JFQy5QUmVxQWN0UGF5bG9hZF9VMTYKKwl1MTYgbV9sZV93UG9sbE91dFNpemU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlc0FjdFBheWxvYWRfVTE2CisJdTMyIG1fbGVfZHdSZXNwb25zZVRpbWU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlc01heExhdGVuY3lfVTMyCisJdTE2IG1fbGVfd1JlczI7CisJdTMyIG1fbGVfZHdEZXZpY2VUeXBlOwkvLyBOTVRfRGV2aWNlVHlwZV9VMzIKKwl1MzIgbV9sZV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgorCXUzMiBtX2xlX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCisJdTMyIG1fbGVfZHdSZXZpc2lvbk51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5SZXZpc2lvbk5vX1UzMgorCXUzMiBtX2xlX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgorCXU2NCBtX2xlX3F3VmVuZG9yU3BlY2lmaWNFeHQxOworCXUzMiBtX2xlX2R3VmVyaWZ5Q29uZmlndXJhdGlvbkRhdGU7CS8vIENGTV9WZXJpZnlDb25maWd1cmF0aW9uX1JFQy5Db25mRGF0ZV9VMzIKKwl1MzIgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCisJdTMyIG1fbGVfZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fbGVfZHdBcHBsaWNhdGlvblN3VGltZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3VGltZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciB0aW1lIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fbGVfZHdJcEFkZHJlc3M7CisJdTMyIG1fbGVfZHdTdWJuZXRNYXNrOworCXUzMiBtX2xlX2R3RGVmYXVsdEdhdGV3YXk7CisJdTggbV9sZV9zSG9zdG5hbWVbMzJdOworCXU4IG1fbGVfYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxJZGVudFJlc3BvbnNlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JObXRDb21tYW5kSWQ7Ci0JQllURSBtX2xlX2JSZXMxOwotCUJZVEUgbV9sZV9hYk5tdENvbW1hbmREYXRhWzMyXTsKKwl1OCBtX2xlX2JObXRDb21tYW5kSWQ7CisJdTggbV9sZV9iUmVzMTsKKwl1OCBtX2xlX2FiTm10Q29tbWFuZERhdGFbMzJdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxObXRDb21tYW5kU2VydmljZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9sZV9iUmVzZXJ2ZWQ7Ci0JQllURSBtX2xlX2JUcmFuc2FjdGlvbklkOwotCUJZVEUgbV9sZV9iRmxhZ3M7Ci0JQllURSBtX2xlX2JDb21tYW5kSWQ7Ci0JV09SRCBtX2xlX3dTZWdtZW50U2l6ZTsKLQlXT1JEIG1fbGVfd1Jlc2VydmVkOwotCUJZVEUgbV9sZV9hYkNvbW1hbmREYXRhWzhdOwkvLyBqdXN0IHJlc2VydmUgYSBtaW5pbXVtIG51bWJlciBvZiBieXRlcyBhcyBhIHBsYWNlaG9sZGVyCisJdTggbV9sZV9iUmVzZXJ2ZWQ7CisJdTggbV9sZV9iVHJhbnNhY3Rpb25JZDsKKwl1OCBtX2xlX2JGbGFnczsKKwl1OCBtX2xlX2JDb21tYW5kSWQ7CisJdTE2IG1fbGVfd1NlZ21lbnRTaXplOworCXUxNiBtX2xlX3dSZXNlcnZlZDsKKwl1OCBtX2xlX2FiQ29tbWFuZERhdGFbOF07CS8vIGp1c3QgcmVzZXJ2ZSBhIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIGFzIGEgcGxhY2Vob2xkZXIKIAogfSBQQUNLX1NUUlVDVCB0RXBsQXN5U2RvQ29tOwogCiAvLyBhc3luY2hyb25vdXMgU0RPIFNlcXVlbmNlIEhlYWRlcgogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9sZV9iUmVjU2VxTnVtQ29uOwotCUJZVEUgbV9sZV9iU2VuZFNlcU51bUNvbjsKLQlCWVRFIG1fbGVfYWJSZXNlcnZlZFsyXTsKKwl1OCBtX2xlX2JSZWNTZXFOdW1Db247CisJdTggbV9sZV9iU2VuZFNlcU51bUNvbjsKKwl1OCBtX2xlX2FiUmVzZXJ2ZWRbMl07CiAJdEVwbEFzeVNkb0NvbSBtX2xlX2FiU2RvU2VxUGF5bG9hZDsKIAogfSBQQUNLX1NUUlVDVCB0RXBsQXN5U2RvU2VxOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JObXRDb21tYW5kSWQ7Ci0JQllURSBtX2xlX2JUYXJnZXROb2RlSWQ7Ci0JQllURSBtX2xlX2FiTm10Q29tbWFuZERhdGFbMzJdOworCXU4IG1fbGVfYk5tdENvbW1hbmRJZDsKKwl1OCBtX2xlX2JUYXJnZXROb2RlSWQ7CisJdTggbV9sZV9hYk5tdENvbW1hbmREYXRhWzMyXTsKIAogfSBQQUNLX1NUUlVDVCB0RXBsTm10UmVxdWVzdFNlcnZpY2U7CiAKQEAgLTI4MSwxNCArMjgxLDE0IEBACiAJdEVwbE5tdENvbW1hbmRTZXJ2aWNlIG1fTm10Q29tbWFuZFNlcnZpY2U7CiAJdEVwbE5tdFJlcXVlc3RTZXJ2aWNlIG1fTm10UmVxdWVzdFNlcnZpY2U7CiAJdEVwbEFzeVNkb1NlcSBtX1Nkb1NlcXVlbmNlRnJhbWU7Ci0JQllURSBtX2xlX2FiUGF5bG9hZFsyNTYJLypEX05NVF9BU25kVHhNYXhQYXlsb2FkX1UxNgorCXU4IG1fbGVfYWJQYXlsb2FkWzI1NgkvKkRfTk1UX0FTbmRUeE1heFBheWxvYWRfVTE2CiAJCQkJICAgLyBEX05NVF9BU25kUnhNYXhQYXlsb2FkX1UxNiAqLyBdOwogCiB9IHRFcGxBc25kUGF5bG9hZDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxNwotCUJZVEUgbV9sZV9iU2VydmljZUlkOworCXU4IG1fbGVfYlNlcnZpY2VJZDsKIAkvLyBPZmZzZXQgMTgKIAl0RXBsQXNuZFBheWxvYWQgbV9QYXlsb2FkOwogCkBAIC0zMDYsMTcgKzMwNiwxNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDAKLQlCWVRFIG1fYmVfYWJEc3RNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSBhZGRyZXNzZWQgbm9kZXMKKwl1OCBtX2JlX2FiRHN0TWFjWzZdOwkvLyBNQUMgYWRkcmVzcyBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCiAJLy8gT2Zmc2V0IDYKLQlCWVRFIG1fYmVfYWJTcmNNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQorCXU4IG1fYmVfYWJTcmNNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQogCS8vIE9mZnNldCAxMgotCVdPUkQgbV9iZV93RXRoZXJUeXBlOwkvLyBFdGhlcm5ldCBtZXNzYWdlIHR5cGUgKGJpZyBlbmRpYW4pCisJdTE2IG1fYmVfd0V0aGVyVHlwZTsJLy8gRXRoZXJuZXQgbWVzc2FnZSB0eXBlIChiaWcgZW5kaWFuKQogCS8vIE9mZnNldCAxNAotCUJZVEUgbV9sZV9iTWVzc2FnZVR5cGU7CS8vIEVQTCBtZXNzYWdlIHR5cGUKKwl1OCBtX2xlX2JNZXNzYWdlVHlwZTsJLy8gRVBMIG1lc3NhZ2UgdHlwZQogCS8vIE9mZnNldCAxNQotCUJZVEUgbV9sZV9iRHN0Tm9kZUlkOwkvLyBFUEwgbm9kZSBJRCBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCisJdTggbV9sZV9iRHN0Tm9kZUlkOwkvLyBFUEwgbm9kZSBJRCBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCiAJLy8gT2Zmc2V0IDE2Ci0JQllURSBtX2xlX2JTcmNOb2RlSWQ7CS8vIEVQTCBub2RlIElEIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQorCXU4IG1fbGVfYlNyY05vZGVJZDsJLy8gRVBMIG5vZGUgSUQgb2YgdGhlIHRyYW5zbWl0dGluZyBub2RlCiAJLy8gT2Zmc2V0IDE3CiAJdEVwbEZyYW1lRGF0YSBtX0RhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSWRlbnR1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbElkZW50dS5jCmluZGV4IGNlNTllZjAuLjkzZDVhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSWRlbnR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJZGVudHUuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMTY0LDcgKzE2NCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUluaXQoKQordEVwbEtlcm5lbCBFcGxJZGVudHVJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVBZGRJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbElkZW50dUFkZEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbElkZW50dURlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVSZXNldCgpCit0RXBsS2VybmVsIEVwbElkZW50dVJlc2V0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJaW50IGlJbmRleDsKQEAgLTMwMCw5ICszMDAsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICB0RXBsSWRlbnRSZXNwb25zZSAqKgotCQkJCQkgICAgcHBJZGVudFJlc3BvbnNlX3ApCit0RXBsS2VybmVsIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgICB0RXBsSWRlbnRSZXNwb25zZSAqKnBwSWRlbnRSZXNwb25zZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zMzgsOSArMzM3LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVSZXF1ZXN0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCXRFcGxJZGVudHVDYlJlc3BvbnNlCi0JCQkJCQlwZm5DYlJlc3BvbnNlX3ApCit0RXBsS2VybmVsIEVwbElkZW50dVJlcXVlc3RJZGVudFJlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCQkgdEVwbElkZW50dUNiUmVzcG9uc2UgcGZuQ2JSZXNwb25zZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zODgsOSArMzg2LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgRFdPUkQgUFVCTElDIEVwbElkZW50dUdldFJ1bm5pbmdSZXF1ZXN0cyh2b2lkKQordTMyIEVwbElkZW50dUdldFJ1bm5pbmdSZXF1ZXN0cyh2b2lkKQogewotCURXT1JEIGR3UmVxcyA9IDA7CisJdTMyIGR3UmVxcyA9IDA7CiAJdW5zaWduZWQgaW50IHVpSW5kZXg7CiAKIAlmb3IgKHVpSW5kZXggPSAwOyB1aUluZGV4IDwgMzI7IHVpSW5kZXgrKykgewpAQCAtNDI2LDcgKzQyNCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUNiSWRlbnRSZXNwb25zZSh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEluYy5oCmluZGV4IDc3ZjkzZDEuLmY5MTc5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5jLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbmMuaApAQCAtMTQwLDggKzE0MCw4IEBACiAKIC8vIElFRUUgMTU4OCBjb25mb3JtYW50IG5ldCB0aW1lIHN0cnVjdHVyZQogdHlwZWRlZiBzdHJ1Y3QgewotCURXT1JEIG1fZHdTZWM7Ci0JRFdPUkQgbV9kd05hbm9TZWM7CisJdTMyIG1fZHdTZWM7CisJdTMyIG1fZHdOYW5vU2VjOwogCiB9IHRFcGxOZXRUaW1lOwogCkBAIC0xNTQsOCArMTU0LDggQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2RlZmluZSBFUExfU1BFQ19WRVJTSU9OICAgICAgICAgICAgICAgICAgICAweDIwCS8vIEVUSEVSTkVUIFBvd2VybGluayBWLiAyLjAKLSNkZWZpbmUgRVBMX1NUQUNLX1ZFUlNJT04odmVyLHJldixyZWwpICAgICAgKCgoKERXT1JEKSh2ZXIpKSAmIDB4RkYpfCgoKChEV09SRCkocmV2KSkmMHhGRik8PDgpfCgoKERXT1JEKShyZWwpKTw8MTYpKQotI2RlZmluZSBFUExfT0JKMTAxOF9WRVJTSU9OKHZlcixyZXYscmVsKSAgICAoKCgoRFdPUkQpKHZlcikpPDwxNikgfCgoKERXT1JEKShyZXYpKSYweEZGRkYpKQorI2RlZmluZSBFUExfU1RBQ0tfVkVSU0lPTih2ZXIscmV2LHJlbCkgICAgICAoKCgodTMyKSh2ZXIpKSAmIDB4RkYpfCgoKCh1MzIpKHJldikpJjB4RkYpPDw4KXwoKCh1MzIpKHJlbCkpPDwxNikpCisjZGVmaW5lIEVQTF9PQkoxMDE4X1ZFUlNJT04odmVyLHJldixyZWwpICAgICgoKCh1MzIpKHZlcikpPDwxNikgfCgoKHUzMikocmV2KSkmMHhGRkZGKSkKICNkZWZpbmUgRVBMX1NUUklOR19WRVJTSU9OKHZlcixyZXYscmVsKSAgICAgIlYiICN2ZXIgIi4iICNyZXYgIiByIiAjcmVsCiAKICNpbmNsdWRlICJFcGxWZXJzaW9uLmgiCkBAIC0yMzYsMjEgKzIzNiw2IEBACiAjZGVmaW5lIHRhYmVudHJpZXMoYSkgICAoc2l6ZW9mKGEpL3NpemVvZigqKGEpKSkKICNlbmRpZgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gZGVmaW5pdGlvbnMgZm9yIERMTCBleHBvcnQKLSNpZiAoKERFVl9TWVNURU0gPT0gX0RFVl9XSU4zMl8pIHx8IChERVZfU1lTVEVNID09IF9ERVZfV0lOX0NFXykpICYmIGRlZmluZWQgKENPUF9MSUIpCi0KLSNkZWZpbmUgRVBMRExMRVhQT1JUICAgIF9fZGVjbHNwZWMgKGRsbGV4cG9ydCkKLQotI2Vsc2UKLQotI2RlZmluZSBFUExETExFWFBPUlQKLQotI2VuZGlmCi0KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIGNvbW1vbiBkZWJ1ZyBtYWNyb3MKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5zdERlZi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKaW5kZXggODllZmJmMi4uMjlhYjdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKQEAgLTcxLDYgKzcxLDggQEAKICNpZm5kZWYgX0VQTElOU1RERUZfSF8KICNkZWZpbmUgX0VQTElOU1RERUZfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyB0eXBlcyBhbmQgbWFjcm9zIGZvciBnZW5lcmF0aW5nIGluc3RhbmNlcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtODMsOCArODUsOCBAQAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10eXBlZGVmIHZvaWQgTUVNICp0RXBsUHRySW5zdGFuY2U7Ci10eXBlZGVmIEJZVEUgdEVwbEluc3RhbmNlSGRsOwordHlwZWRlZiB2b2lkICp0RXBsUHRySW5zdGFuY2U7Cit0eXBlZGVmIHU4IHRFcGxJbnN0YW5jZUhkbDsKIAogLy8gZGVmaW5lIGNvbnN0IGZvciBpbGxlZ2FsZSB2YWx1ZXMKICNkZWZpbmUgQ0NNX0lMTElOU1RBTkNFICAgICAgTlVMTApAQCAtOTksOCArMTAxLDYgQEAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBtZW1vcnkgYXR0cmlidXRlcyBmb3IgaW5zdGFuY2UgdGFibGUKLSNkZWZpbmUgSU5TVF9ORUFSCQkvLyBmYXN0ZXIgYWNjZXNzIHRvIHZhcmlhYmxlcwotI2RlZmluZSBJTlNUX0ZBUgkJLy8gdmFyaWFibGVzIHdpY2ggaGF2ZSB0byBsb2NhdGVkIGluIHhkYXRhCiAjZGVmaW5lIFNUQVRJQwkJCS8vIHByZXZlbnQgd2FybmluZ3MgZm9yIHZhcmlhYmxlcyB3aXRoIHNhbWUgbmFtZQogCiAjZGVmaW5lIElOU1RBTkNFX1RZUEVfQkVHSU4gICAgIHR5cGVkZWYgc3RydWN0IHsKQEAgLTExNywxMiArMTE3LDEyIEBACiAjZGVmaW5lIENDTV9ERUNMX0lOU1RBTkNFX0hETF8gICAgICAgICAgICAgICAgICB0RXBsSW5zdGFuY2VIZGwgSW5zdGFuY2VIYW5kbGUsCiAKICAgICAvLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uIG9mIHBvaW50ZXIgdG8gaW5zdGFuY2UgaGFuZGxlIHdpdGhpbiBmdW5jdGlvbiBoZWFkZXIgb3IgcHJvdG90eXBlIG9mIEFQSSBmdW5jdGlvbnMKLSNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETCAgICAgICAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCBNRU0qIHBJbnN0YW5jZUhhbmRsZQotI2RlZmluZSBDQ01fREVDTF9QVFJfSU5TVEFOQ0VfSERMXyAgICAgICAgICAgICAgdEVwbEluc3RhbmNlSGRsIE1FTSogcEluc3RhbmNlSGFuZGxlLAorI2RlZmluZSBDQ01fREVDTF9QVFJfSU5TVEFOQ0VfSERMICAgICAgICAgICAgICAgdEVwbEluc3RhbmNlSGRsICpwSW5zdGFuY2VIYW5kbGUKKyNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF8gICAgICAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCAqcEluc3RhbmNlSGFuZGxlLAogCiAgICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiBpbnN0YW5jZSBhcyBsb2thY2wgdmFyaWFibGUgd2l0aGluIGZ1bmN0aW9ucwotI2RlZmluZSBDQ01fREVDTF9JTlNUQU5DRV9QVFJfTE9DQUwgICAgICAgICAgICAgdENjbUluc3RhbmNlSW5mbyBNRU0qIHBJbnN0YW5jZTsKLSNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF9MT0NBTCAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCAgTUVNKiBwSW5zdGFuY2VIYW5kbGU7CisjZGVmaW5lIENDTV9ERUNMX0lOU1RBTkNFX1BUUl9MT0NBTCAgICAgICAgICAgICB0Q2NtSW5zdGFuY2VJbmZvICpwSW5zdGFuY2U7CisjZGVmaW5lIENDTV9ERUNMX1BUUl9JTlNUQU5DRV9IRExfTE9DQUwgICAgICAgICB0RXBsSW5zdGFuY2VIZGwgICpwSW5zdGFuY2VIYW5kbGU7CiAKICAgICAvLyByZWZlcmVuY2U6CiAKQEAgLTE2MywxMCArMTYzLDEwIEBACiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGZ1bmN0aW9uIGhlYWRlciwgcHJvdG90eXBlIG9yIGxvY2FsIHZhciBsaXN0Ci0gICAgLy8gRGVjbGFyYXRpb24gb2YgcG9pbnRlcnMgd2l0aGluIGZ1bmN0aW9uIHBhcmFtYXRlciBsaXN0IG11c3QgZGVmaW5lZCBhcyB2b2lkIE1FTSoKKyAgICAvLyBEZWNsYXJhdGlvbiBvZiBwb2ludGVycyB3aXRoaW4gZnVuY3Rpb24gcGFyYW1hdGVyIGxpc3QgbXVzdCBkZWZpbmVkIGFzIHZvaWQgKgogICAgIC8vIHBvaW50ZXIuCi0jZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIgICAgICAgICAgICAgICAgICAgdm9pZCBNRU0qIHBJbnN0YW5jZQotI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyAgICAgICAgICAgICAgICAgIHZvaWQgTUVNKiBwSW5zdGFuY2UsCisjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIgICAgICAgICAgICAgICAgICAgdm9pZCAqcEluc3RhbmNlCisjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfICAgICAgICAgICAgICAgICAgdm9pZCAqcEluc3RhbmNlLAogI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMICAgICAgICAgICAgIHRFcGxQdHJJbnN0YW5jZSAgcEluc3RhbmNlOwogCiAgICAgLy8gbWFjcm9zIGZvciByZWZlcmVuY2Ugb2YgcG9pbnRlciB0byBpbnN0YW5jZQpAQCAtMTkxLDggKzE5MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUICgoKHRFcGxQdHJJbnN0YW5jZSlwSW5zdGFuY2UpLT5tX0luc3RTdGF0ZSA9PSBrU3RhdGVVc2VkKTsKIAogICAgIC8vIG1hY3JvcyBmb3IgZGVjbGFyYXRpb24gb2YgcG9pbnRlciB0byBpbnN0YW5jZSBwb2ludGVyCi0jZGVmaW5lIEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSICAgICAgICAgICAgICAgdm9pZCBNRU0qICBNRU0qIHBJbnN0YW5jZVB0cgotI2RlZmluZSBFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8gICAgICAgICAgICAgIHZvaWQgTUVNKiAgTUVNKiBwSW5zdGFuY2VQdHIsCisjZGVmaW5lIEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSICAgICAgICAgICAgICAgdm9pZCAqKnBJbnN0YW5jZVB0cgorI2RlZmluZSBFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8gICAgICAgICAgICAgIHZvaWQgKipwSW5zdGFuY2VQdHIsCiAKICAgICAvLyBtYWNyb3MgZm9yIHJlZmVyZW5jZSBvZiBwb2ludGVyIHRvIGluc3RhbmNlIHBvaW50ZXIKICAgICAvLyBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgZm9yIHBhcmFtZXRlciBwYXNzaW5nIHRvIGNhbGxlZCBmdW5jdGlvbi4KQEAgLTIxMiwxMiArMjEyLDEyIEBACiAgICAgLy8gdGhpcyBtYWNybyBkZWxldGVzIGFsbCBpbnN0YW5jZSBlbnRyaWVzIGFzIHVudXNlZAogI2RlZmluZSBFUExfTUNPX0RFTEVURV9JTlNUQU5DRV9UQUJMRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSogICBwSW5zdGFuY2UgICAgICAgPSAmYUVwbEluc3RhbmNlVGFibGVfZ1swXTsgXAotICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICAgICBJbnN0TnVtYmVyICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICAgICBpICAgICAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgXAorICAgICAgICB0RXBsSW5zdGFuY2VJbmZvICogICBwSW5zdGFuY2UgICAgICAgPSAmYUVwbEluc3RhbmNlVGFibGVfZ1swXTsgICAgXAorICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICBJbnN0TnVtYmVyICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICBpICAgICAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgICAgXAogICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcEluc3RhbmNlLT5tX0luc3RTdGF0ZSA9IChCWVRFKSBrU3RhdGVVbnVzZWQ7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcEluc3RhbmNlLT5tX2JJbnN0SW5kZXggPSAoQllURSkgSW5zdE51bWJlcjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcEluc3RhbmNlLT5tX0luc3RTdGF0ZSA9ICh1OCkga1N0YXRlVW51c2VkOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBJbnN0YW5jZS0+bV9iSW5zdEluZGV4ID0gKHU4KSBJbnN0TnVtYmVyOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBwSW5zdGFuY2UrKzsgSW5zdE51bWJlcisrOyBpLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gd2hpbGUgKGkgIT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQpAQCAtMjMwLDggKzIzMCw4IEBACiAgICAgICAgIHN0YXRpYyB0RXBsUHRySW5zdGFuY2UgR2V0SW5zdGFuY2VQdHIgKHRFcGxJbnN0YW5jZUhkbCBJbnN0SGFuZGxlX3ApIHsgXAogICAgICAgICAgICAgcmV0dXJuICZhRXBsSW5zdGFuY2VUYWJsZV9nW0luc3RIYW5kbGVfcF07IH0gICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgc3RhdGljIHRFcGxQdHJJbnN0YW5jZSBHZXRGcmVlSW5zdGFuY2UgKHZvaWQpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSogICBwSW5zdGFuY2UgICA9ICZhRXBsSW5zdGFuY2VUYWJsZV9nWzBdOyAgICAgXAotICAgICAgICAgICAgdEZhc3RCeXRlICAgICAgICAgICAgICAgaSAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRFcGxJbnN0YW5jZUluZm8gKnBJbnN0YW5jZSAgID0gJmFFcGxJbnN0YW5jZVRhYmxlX2dbMF07ICAgICAgICAgICBcCisgICAgICAgICAgICB0RmFzdEJ5dGUgICAgICAgICBpICAgICAgICAgICA9IEVQTF9NQVhfSU5TVEFOQ0VTOyAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZG8geyBpZiAocEluc3RhbmNlLT5tX0luc3RTdGF0ZSAhPSBrU3RhdGVVc2VkKSB7ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0RXBsUHRySW5zdGFuY2UpIHBJbnN0YW5jZTsgfSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgcEluc3RhbmNlKys7IGktLTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjQwLDEzICsyNDAsMTMgQEAKIAogICAgIC8vIHRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgaW5zdGFuY2UgdGFibGUuIEVhY2ggZW50cnkgaXMgcmVzZXJ2ZWQgZm9yIGFuIGluc3RhbmNlIG9mIENBTm9wZW4uCiAjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKSBcCi0gICAgICAgIHN0YXRpYyB0RXBsSW5zdGFuY2VJbmZvIE1FTSBhRXBsSW5zdGFuY2VUYWJsZV9nIFtFUExfTUFYX0lOU1RBTkNFU107CisgICAgICAgIHN0YXRpYyB0RXBsSW5zdGFuY2VJbmZvIGFFcGxJbnN0YW5jZVRhYmxlX2cgW0VQTF9NQVhfSU5TVEFOQ0VTXTsKIAogICAgIC8vIHRoaXMgbWFjcm8gZGVmaW5lcyBtZW1iZXIgdmFyaWFibGVzIGluIGluc3RhbmNlIHRhYmxlIHdoaWNoIGFyZSBuZWVkZWQgaW4KICAgICAvLyBhbGwgbW9kdWxlcyBvZiBFcGwgc3RhY2sKICNkZWZpbmUgRVBMX01DT19ERUNMX0lOU1RBTkNFX01FTUJFUigpIFwKLSAgICAgICAgU1RBVElDICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5zdFN0YXRlOyBcCi0gICAgICAgIFNUQVRJQyAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JJbnN0SW5kZXg7CisgICAgICAgIFNUQVRJQyAgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbnN0U3RhdGU7IFwKKyAgICAgICAgU1RBVElDICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JJbnN0SW5kZXg7CiAKICNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QQVJBTV9JRFhfKCkgICAgICAgICAgIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCiAjZGVmaW5lIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fSURYKCkgICAgICAgICAgICBFUExfTUNPX0lOU1RBTkNFX1BBUkFNIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCkBAIC0yNTQsOCArMjU0LDYgQEAKICNlbHNlIC8vIG9ubHkgb25lIGluc3RhbmNlIGlzIHVzZWQKIAogICAgIC8vIE1lbW9yeSBhdHRyaWJ1dGVzIGZvciBpbnN0YW5jZSB0YWJsZS4KLSNkZWZpbmUgSU5TVF9ORUFSICAgTkVBUgkvLyBmYXN0ZXIgYWNjZXNzIHRvIHZhcmlhYmxlcwotI2RlZmluZSBJTlNUX0ZBUiAgICBNRU0JCS8vIHZhcmlhYmxlcyB3aWNoIGhhdmUgdG8gbG9jYXRlZCBpbiB4ZGF0YQogI2RlZmluZSBTVEFUSUMgICAgICBzdGF0aWMJLy8gcHJldmVudCB3YXJuaW5ncyBmb3IgdmFyaWFibGVzIHdpdGggc2FtZSBuYW1lCiAKICNkZWZpbmUgSU5TVEFOQ0VfVFlQRV9CRUdJTgpAQCAtMzU5LDE4ICszNTcsNiBAQAogCiAjZW5kaWYKIAotLyoKLSNpZiAoQ0RSVl9NQVhfSU5TVEFOQ0VTID4gMSkKLQotICAgICNkZWZpbmUgQ0RSVl9SRUVOVFJBTlQgICAgICAgICAgICAgICAgICAgICAgICAgIFJFRU5UUkFOVAotCi0jZWxzZQotCi0gICAgI2RlZmluZSBDRFJWX1JFRU5UUkFOVAotCi0jZW5kaWYKLSovCi0KICNlbmRpZiAvLyBfRVBMSU5TVERFRl9IXwogCiAvLyBEaWUgbGV0enRlIFplaWxlIG113yB1bmJlZGluZ3QgZWluZSBsZWVyZSBaZWlsZSBzZWluLCB3ZWlsIG1hbmNoZSBDb21waWxlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10LmgKaW5kZXggNGMxMWU1Yi4uZTM1MWI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdC5oCkBAIC0xODUsNyArMTg1LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gTm9kZUlkCiAJdEVwbE5tdFN0YXRlIG1fTm10U3RhdGU7CS8vIE5NVCBzdGF0ZSAocmVtZW1iZXIgZGlzdGluZ3Vpc2ggYmV0d2VlbiBNTiAvIENOKQotCVdPUkQgbV93RXJyb3JDb2RlOwkvLyBFUEwgZXJyb3IgY29kZSBpbiBjYXNlIG9mIE5NVCBzdGF0ZSBOb3RBY3RpdmUKKwl1MTYgbV93RXJyb3JDb2RlOwkvLyBFUEwgZXJyb3IgY29kZSBpbiBjYXNlIG9mIE5NVCBzdGF0ZSBOb3RBY3RpdmUKIAogfSB0RXBsSGVhcnRiZWF0RXZlbnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10Q251LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdENudS5jCmluZGV4IGYyZjQ2ZGEuLmMyN2NhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10Q251LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXRDbnUuYwpAQCAtMTA4LDkgKzEwOCw5IEBACiAKIHN0YXRpYyB0RXBsTm10Q29tbWFuZCBFcGxObXRDbnVHZXRObXRDb21tYW5kKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwogCi1zdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KEJZVEUgKiBwYk5tdENvbW1hbmREYXRlX3ApOworc3RhdGljIEJPT0wgRXBsTm10Q251Tm9kZUlkTGlzdCh1OCAqIHBiTm10Q29tbWFuZERhdGVfcCk7CiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqIHBGcmFtZUluZm9fcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqcEZyYW1lSW5mb19wKTsKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCkBAIC0xMzUsNyArMTM1LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251SW5pdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKK3RFcGxLZXJuZWwgRXBsTm10Q251SW5pdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTYxLDcgKzE2MSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudUFkZEluc3RhbmNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKQordEVwbEtlcm5lbCBFcGxObXRDbnVBZGRJbnN0YW5jZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAxLDcgKzIwMSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudURlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsTm10Q251RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjM0LDkgKzIzNCw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudVNlbmRObXRSZXF1ZXN0KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgICAgIHRFcGxObXRDb21tYW5kCi0JCQkJCQkgICAgICAgTm10Q29tbWFuZF9wKQordEVwbEtlcm5lbCBFcGxObXRDbnVTZW5kTm10UmVxdWVzdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICB0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEZyYW1lSW5mbyBObXRSZXF1ZXN0RnJhbWVJbmZvOwpAQCAtMjQ5LDE1ICsyNDgsMTUgQEAKIAlFUExfTUVNU0VUKCZObXRSZXF1ZXN0RnJhbWUubV9iZV9hYlNyY01hY1swXSwgMHgwMCwgc2l6ZW9mKE5tdFJlcXVlc3RGcmFtZS5tX2JlX2FiU3JjTWFjKSk7CS8vIHNldCBieSBETEwKIAlBbWlTZXRXb3JkVG9CZSgmTm10UmVxdWVzdEZyYW1lLm1fYmVfd0V0aGVyVHlwZSwKIAkJICAgICAgIEVQTF9DX0RMTF9FVEhFUlRZUEVfRVBMKTsKLQlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fbGVfYkRzdE5vZGVJZCwgKEJZVEUpIEVQTF9DX0FEUl9NTl9ERUZfTk9ERV9JRCk7CS8vIG5vZGUgaWQgb2YgdGhlIE1OCisJQW1pU2V0Qnl0ZVRvTGUoJk5tdFJlcXVlc3RGcmFtZS5tX2xlX2JEc3ROb2RlSWQsICh1OCkgRVBMX0NfQURSX01OX0RFRl9OT0RFX0lEKTsJLy8gbm9kZSBpZCBvZiB0aGUgTU4KIAlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fbGVfYk1lc3NhZ2VUeXBlLAotCQkgICAgICAgKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCk7CisJCSAgICAgICAodTgpIGtFcGxNc2dUeXBlQXNuZCk7CiAJQW1pU2V0Qnl0ZVRvTGUoJk5tdFJlcXVlc3RGcmFtZS5tX0RhdGEubV9Bc25kLm1fbGVfYlNlcnZpY2VJZCwKLQkJICAgICAgIChCWVRFKSBrRXBsRGxsQXNuZE5tdFJlcXVlc3QpOworCQkgICAgICAgKHU4KSBrRXBsRGxsQXNuZE5tdFJlcXVlc3QpOwogCUFtaVNldEJ5dGVUb0xlKCZObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCiAJCSAgICAgICBtX05tdFJlcXVlc3RTZXJ2aWNlLm1fbGVfYk5tdENvbW1hbmRJZCwKLQkJICAgICAgIChCWVRFKSBObXRDb21tYW5kX3ApOwotCUFtaVNldEJ5dGVUb0xlKCZObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQubV9ObXRSZXF1ZXN0U2VydmljZS5tX2xlX2JUYXJnZXROb2RlSWQsIChCWVRFKSB1aU5vZGVJZF9wKTsJLy8gdGFyZ2V0IGZvciB0aGUgbm10IGNvbW1hbmQKKwkJICAgICAgICh1OCkgTm10Q29tbWFuZF9wKTsKKwlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLm1fTm10UmVxdWVzdFNlcnZpY2UubV9sZV9iVGFyZ2V0Tm9kZUlkLCAodTgpIHVpTm9kZUlkX3ApOwkvLyB0YXJnZXQgZm9yIHRoZSBubXQgY29tbWFuZAogCUVQTF9NRU1TRVQoJk5tdFJlcXVlc3RGcmFtZS5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC5tX05tdFJlcXVlc3RTZXJ2aWNlLgogCQkgICBtX2xlX2FiTm10Q29tbWFuZERhdGFbMF0sIDB4MDAsCiAJCSAgIHNpemVvZihObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCkBAIC0yOTcsOSArMjk2LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdENudVJlZ2lzdGVyQ2hlY2tFdmVudENiKHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrCi0JCQkgICAgICBwZm5FcGxObXRDaGVja0V2ZW50Q2JfcCkKK3RFcGxLZXJuZWwgRXBsTm10Q251UmVnaXN0ZXJDaGVja0V2ZW50Q2IodEVwbE5tdHVDaGVja0V2ZW50Q2FsbGJhY2sgcGZuRXBsTm10Q2hlY2tFdmVudENiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTMzNSw3ICszMzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqIHBGcmFtZUluZm9fcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE5tdENudUNvbW1hbmRDYih0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kOwpAQCAtNjc2LDE4ICs2NzMsMTggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KEJZVEUgKiBwYk5tdENvbW1hbmREYXRlX3ApCitzdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KHU4ICogcGJObXRDb21tYW5kRGF0ZV9wKQogewogCUJPT0wgZk5vZGVJZEluTGlzdDsKIAl1bnNpZ25lZCBpbnQgdWlCeXRlT2Zmc2V0OwotCUJZVEUgYkJpdE9mZnNldDsKLQlCWVRFIGJOb2RlTGlzdEJ5dGU7CisJdTggYkJpdE9mZnNldDsKKwl1OCBiTm9kZUxpc3RCeXRlOwogCiAJLy8gZ2V0IGJ5dGUtb2Zmc2V0IG9mIHRoZSBvd24gbm9kZWlkIGluIE5vZGVJZExpc3QKIAkvLyBkZXZpZGUgdGhvdWdoIDgKIAl1aUJ5dGVPZmZzZXQgPSAodW5zaWduZWQgaW50KShFcGxObXRDbnVJbnN0YW5jZV9nLm1fdWlOb2RlSWQgPj4gMyk7CiAJLy8gZ2V0IGJpdG9mZnNldAotCWJCaXRPZmZzZXQgPSAoQllURSkgRXBsTm10Q251SW5zdGFuY2VfZy5tX3VpTm9kZUlkICUgODsKKwliQml0T2Zmc2V0ID0gKHU4KSBFcGxObXRDbnVJbnN0YW5jZV9nLm1fdWlOb2RlSWQgJSA4OwogCiAJYk5vZGVMaXN0Qnl0ZSA9IEFtaUdldEJ5dGVGcm9tTGUoJnBiTm10Q29tbWFuZERhdGVfcFt1aUJ5dGVPZmZzZXRdKTsKIAlpZiAoKGJOb2RlTGlzdEJ5dGUgJiBiQml0T2Zmc2V0KSA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdE1udS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXRNbnUuYwppbmRleCA0ZWQwYjZjLi5kMTk0MzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdE1udS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10TW51LmMKQEAgLTk0LDggKzk0LDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0yMTEsOCArMjExLDggQEAKIAl0RXBsVGltZXJIZGwgbV9UaW1lckhkbFN0YXRSZXE7CS8vIHRpbWVyIHRvIGRlbGF5IFN0YXR1c1JlcXVlc3RzIGFuZCBJZGVudFJlcXVlc3RzCiAJdEVwbFRpbWVySGRsIG1fVGltZXJIZGxMb25nZXI7CS8vIDJuZCB0aW1lciBmb3IgTk1UIGNvbW1hbmQgRW5hYmxlUmVhZHlUb09wIGFuZCBDaGVja0NvbW11bmljYXRpb24KIAl0RXBsTm10TW51Tm9kZVN0YXRlIG1fTm9kZVN0YXRlOwkvLyBpbnRlcm5hbCBub2RlIHN0YXRlIChraW5kIG9mIHN1YiBzdGF0ZSBvZiBOTVQgc3RhdGUpCi0JRFdPUkQgbV9kd05vZGVDZmc7CS8vIHN1YmluZGV4IGZyb20gMHgxRjgxCi0JV09SRCBtX3dGbGFnczsJCS8vIGZsYWdzOiBDTiBpcyBiZWluZyBhY2Nlc3NlZCBpc29jaHJvbm91c2x5CisJdTMyIG1fZHdOb2RlQ2ZnOwkvLyBzdWJpbmRleCBmcm9tIDB4MUY4MQorCXUxNiBtX3dGbGFnczsJCS8vIGZsYWdzOiBDTiBpcyBiZWluZyBhY2Nlc3NlZCBpc29jaHJvbm91c2x5CiAKIH0gdEVwbE5tdE1udU5vZGVJbmZvOwogCkBAIC0yMjQsOCArMjI0LDggQEAKIAl1bnNpZ25lZCBsb25nIG1fdWxTdGF0dXNSZXF1ZXN0RGVsYXk7CS8vIGluIFttc10gKG9iamVjdCAweDEwMDYgKiBFUExfQ19OTVRfU1RBVFJFUV9DWUNMRSkKIAl1bnNpZ25lZCBsb25nIG1fdWxUaW1lb3V0UmVhZHlUb09wOwkvLyBpbiBbbXNdIChvYmplY3QgMHgxRjg5LzUpCiAJdW5zaWduZWQgbG9uZyBtX3VsVGltZW91dENoZWNrQ29tOwkvLyBpbiBbbXNdIChvYmplY3QgMHgxMDA2ICogTXVsdGlwbGV4ZWRDeWNsZUNvdW50KQotCVdPUkQgbV93RmxhZ3M7CQkvLyBnbG9iYWwgZmxhZ3MKLQlEV09SRCBtX2R3Tm10U3RhcnR1cDsJLy8gb2JqZWN0IDB4MUY4MCBOTVRfU3RhcnRVcF9VMzIKKwl1MTYgbV93RmxhZ3M7CQkvLyBnbG9iYWwgZmxhZ3MKKwl1MzIgbV9kd05tdFN0YXJ0dXA7CS8vIG9iamVjdCAweDFGODAgTk1UX1N0YXJ0VXBfVTMyCiAJdEVwbE5tdE1udUNiTm9kZUV2ZW50IG1fcGZuQ2JOb2RlRXZlbnQ7CiAJdEVwbE5tdE1udUNiQm9vdEV2ZW50IG1fcGZuQ2JCb290RXZlbnQ7CiAKQEAgLTI0MSwyMCArMjQxLDE4IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCk7CiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgIHRFcGxJZGVudFJlc3BvbnNlICoKLQkJCQkJCSAgcElkZW50UmVzcG9uc2VfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgIHRFcGxJZGVudFJlc3BvbnNlICpwSWRlbnRSZXNwb25zZV9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiU3RhdHVzUmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgICB0RXBsU3RhdHVzUmVzcG9uc2UgKgotCQkJCQkJICAgcFN0YXR1c1Jlc3BvbnNlX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgIHRFcGxTdGF0dXNSZXNwb25zZSAqcFN0YXR1c1Jlc3BvbnNlX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDaGVja05tdFN0YXRlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCQkgdEVwbE5tdE1udU5vZGVJbmZvICogcE5vZGVJbmZvX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCSBXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJIHUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTG9jYWxObXRTdGF0ZV9wKTsKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51U3RhcnRCb290U3RlcDEodm9pZCk7CkBAIC0yNzMsNyArMjcxLDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCiAJCQkJCQl0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCQlXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJCXUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCQl0RXBsTm10TW51SW50Tm9kZUV2ZW50CiAJCQkJCQlOb2RlRXZlbnRfcCk7CiAKQEAgLTM4MCw3ICszNzgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsTm10TW51RGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxObXRNbnVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00MTksNyArNDE3LDcgQEAKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxGcmFtZUluZm8gRnJhbWVJbmZvOwotCUJZVEUgYWJCdWZmZXJbRVBMX0NfRExMX01JTlNJWkVfTk1UQ01ERVhUXTsKKwl1OCBhYkJ1ZmZlcltFUExfQ19ETExfTUlOU0laRV9OTVRDTURFWFRdOwogCXRFcGxGcmFtZSAqcEZyYW1lID0gKHRFcGxGcmFtZSAqKSBhYkJ1ZmZlcjsKIAlCT09MIGZTb2Z0RGVsZXRlTm9kZSA9IEZBTFNFOwogCkBAIC00MzksMTEgKzQzNywxMSBAQAogCiAJLy8gYnVpbGQgZnJhbWUKIAlFUExfTUVNU0VUKHBGcmFtZSwgMHgwMCwgc2l6ZW9mKGFiQnVmZmVyKSk7Ci0JQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLCAoQllURSkgdWlOb2RlSWRfcCk7CisJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLCAodTgpIHVpTm9kZUlkX3ApOwogCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWUtPm1fRGF0YS5tX0FzbmQubV9sZV9iU2VydmljZUlkLAotCQkgICAgICAgKEJZVEUpIGtFcGxEbGxBc25kTm10Q29tbWFuZCk7CisJCSAgICAgICAodTgpIGtFcGxEbGxBc25kTm10Q29tbWFuZCk7CiAJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9EYXRhLm1fQXNuZC5tX1BheWxvYWQubV9ObXRDb21tYW5kU2VydmljZS4KLQkJICAgICAgIG1fbGVfYk5tdENvbW1hbmRJZCwgKEJZVEUpIE5tdENvbW1hbmRfcCk7CisJCSAgICAgICBtX2xlX2JObXRDb21tYW5kSWQsICh1OCkgTm10Q29tbWFuZF9wKTsKIAlpZiAoKHBObXRDb21tYW5kRGF0YV9wICE9IE5VTEwpICYmICh1aURhdGFTaXplX3AgPiAwKSkgewkvLyBjb3B5IGNvbW1hbmQgZGF0YSB0byBmcmFtZQogCQlFUExfTUVNQ1BZKCZwRnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLm1fTm10Q29tbWFuZFNlcnZpY2UuCiAJCQkgICBtX2xlX2FiTm10Q29tbWFuZERhdGFbMF0sIHBObXRDb21tYW5kRGF0YV9wLApAQCAtNTc0LDggKzU3Miw4IEBACiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10TW51SW50Tm9kZUV2ZW50IE5vZGVFdmVudDsKIAl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCUJZVEUgYk5tdFN0YXRlOwotCVdPUkQgd0Vycm9yQ29kZSA9IEVQTF9FX05PX0VSUk9SOworCXU4IGJObXRTdGF0ZTsKKwl1MTYgd0Vycm9yQ29kZSA9IEVQTF9FX05PX0VSUk9SOwogCiAJaWYgKCh1aU5vZGVJZF9wID09IDApIHx8ICh1aU5vZGVJZF9wID49IEVQTF9DX0FEUl9CUk9BRENBU1QpKSB7CiAJCVJldCA9IGtFcGxJbnZhbGlkTm9kZUlkOwpAQCAtNjQ1LDggKzY0Myw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10TW51Q2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZQotCQkJCQkgICAgTm10U3RhdGVDaGFuZ2VfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZSBObXRTdGF0ZUNoYW5nZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTY3Niw3ICs2NzMsNyBAQAogCQkvLyBidWlsZCB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGluZm9zIGZyb20gT0QKIAljYXNlIGtFcGxObXRHc1Jlc2V0Q29uZmlndXJhdGlvbjoKIAkJewotCQkJRFdPUkQgZHdUaW1lb3V0OworCQkJdTMyIGR3VGltZW91dDsKIAkJCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAkJCS8vIHJlYWQgb2JqZWN0IDB4MUY4MCBOTVRfU3RhcnRVcF9VMzIKQEAgLTc4OCw3ICs3ODUsNyBAQAogCQkvLyBub2RlIHByb2Nlc3NlcyBvbmx5IGFzeW5jIGZyYW1lcwogCWNhc2Uga0VwbE5tdE1zUHJlT3BlcmF0aW9uYWwxOgogCQl7Ci0JCQlEV09SRCBkd1RpbWVvdXQ7CisJCQl1MzIgZHdUaW1lb3V0OwogCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCQkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAkJCXRFcGxFdmVudCBFdmVudDsKQEAgLTkyOCw3ICs5MjUsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiQ2hlY2tFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51Q2JDaGVja0V2ZW50KHRFcGxObXRFdmVudCBObXRFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTk0OSw3ICs5NDYsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbE5tdE1udVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKnBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC05NzAsNyArOTY3LDcgQEAKIAkJCQkJICAgRVBMX05NVE1OVV9USU1FUkFSR19OT0RFX01BU0spOwogCQkJaWYgKHVpTm9kZUlkICE9IDApIHsKIAkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCQkJCUJZVEUgYk5tdFN0YXRlOworCQkJCXU4IGJObXRTdGF0ZTsKIAkJCQl0RXBsTm10TW51Tm9kZUluZm8gKnBOb2RlSW5mbzsKIAogCQkJCXBOb2RlSW5mbyA9IEVQTF9OTVRNTlVfR0VUX05PREVJTkZPKHVpTm9kZUlkKTsKQEAgLTExNTAsNyArMTE0Nyw3IEBACiAJCQl0RXBsRnJhbWUgKnBGcmFtZSA9ICh0RXBsRnJhbWUgKikgcEV2ZW50X3AtPm1fcEFyZzsKIAkJCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKIAkJCXRFcGxObXRDb21tYW5kIE5tdENvbW1hbmQ7Ci0JCQlCWVRFIGJObXRTdGF0ZTsKKwkJCXU4IGJObXRTdGF0ZTsKIAogCQkJdWlOb2RlSWQgPSBBbWlHZXRCeXRlRnJvbUxlKCZwRnJhbWUtPm1fbGVfYkRzdE5vZGVJZCk7CiAJCQlObXRDb21tYW5kID0KQEAgLTExNjIsMzAgKzExNTksMzAgQEAKIAkJCXN3aXRjaCAoTm10Q29tbWFuZCkgewogCQkJY2FzZSBrRXBsTm10Q21kU3RhcnROb2RlOgogCQkJCWJObXRTdGF0ZSA9Ci0JCQkJICAgIChCWVRFKSAoa0VwbE5tdENzT3BlcmF0aW9uYWwgJiAweEZGKTsKKwkJCQkgICAgKHU4KSAoa0VwbE5tdENzT3BlcmF0aW9uYWwgJiAweEZGKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBrRXBsTm10Q21kU3RvcE5vZGU6Ci0JCQkJYk5tdFN0YXRlID0gKEJZVEUpIChrRXBsTm10Q3NTdG9wcGVkICYgMHhGRik7CisJCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzU3RvcHBlZCAmIDB4RkYpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIGtFcGxObXRDbWRFbnRlclByZU9wZXJhdGlvbmFsMjoKIAkJCQliTm10U3RhdGUgPQotCQkJCSAgICAoQllURSkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMiAmIDB4RkYpOworCQkJCSAgICAodTgpIChrRXBsTm10Q3NQcmVPcGVyYXRpb25hbDIgJiAweEZGKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBrRXBsTm10Q21kRW5hYmxlUmVhZHlUb09wZXJhdGU6CiAJCQkJLy8gZC5rLiBkbyBub3QgY2hhbmdlIGV4cGVjdGVkIG5vZGUgc3RhdGUsIGJlY2F1c2Ugb2YgRFMgMS4wLjAgNy4zLjEuMi4xIFBsYWluIE5NVCBTdGF0ZSBDb21tYW5kCiAJCQkJLy8gICAgICBhbmQgYmVjYXVzZSBub2RlIG1heSBub3QgY2hhbmdlIE5NVCBzdGF0ZSB3aXRoaW4gRVBMX0NfTk1UX1NUQVRFX1RPTEVSQU5DRQogCQkJCWJObXRTdGF0ZSA9Ci0JCQkJICAgIChCWVRFKSAoa0VwbE5tdENzUHJlT3BlcmF0aW9uYWwyICYgMHhGRik7CisJCQkJICAgICh1OCkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMiAmIDB4RkYpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIGtFcGxObXRDbWRSZXNldE5vZGU6CiAJCQljYXNlIGtFcGxObXRDbWRSZXNldENvbW11bmljYXRpb246CiAJCQljYXNlIGtFcGxObXRDbWRSZXNldENvbmZpZ3VyYXRpb246CiAJCQljYXNlIGtFcGxObXRDbWRTd1Jlc2V0OgotCQkJCWJObXRTdGF0ZSA9IChCWVRFKSAoa0VwbE5tdENzTm90QWN0aXZlICYgMHhGRik7CisJCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzTm90QWN0aXZlICYgMHhGRik7CiAJCQkJLy8gRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQoKSBzZXRzIGludGVybmFsIG5vZGUgc3RhdGUgdG8ga0VwbE5tdE1udU5vZGVTdGF0ZVVua25vd24KIAkJCQkvLyBhZnRlciBuZXh0IHVucmVzcG9uZGVkIElkZW50UmVxdWVzdC9TdGF0dXNSZXF1ZXN0CiAJCQkJYnJlYWs7CkBAIC0xMjU4LDExICsxMjU1LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVHZXREaWFnbm9zdGljSW5mbyh1bnNpZ25lZCBpbnQKLQkJCQkJICAgICAqcHVpTWFuZGF0b3J5U2xhdmVDb3VudF9wLAotCQkJCQkgICAgIHVuc2lnbmVkIGludAotCQkJCQkgICAgICpwdWlTaWduYWxTbGF2ZUNvdW50X3AsCi0JCQkJCSAgICAgV09SRCAqIHB3RmxhZ3NfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51R2V0RGlhZ25vc3RpY0luZm8odW5zaWduZWQgaW50ICpwdWlNYW5kYXRvcnlTbGF2ZUNvdW50X3AsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpwdWlTaWduYWxTbGF2ZUNvdW50X3AsCisJCQkJICAgICAgdTE2ICpwd0ZsYWdzX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTI5Niw3ICsxMjkxLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLyoKLURXT1JEIEVwbE5tdE1udUdldFJ1bm5pbmdUaW1lclN0YXRSZXEodm9pZCkKK3UzMiBFcGxObXRNbnVHZXRSdW5uaW5nVGltZXJTdGF0UmVxKHZvaWQpCiB7CiB0RXBsS2VybmVsICAgICAgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiB1bnNpZ25lZCBpbnQgICAgdWlJbmRleDsKQEAgLTEzNDcsNyArMTM0Miw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiTm10UmVxdWVzdCh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0xMzcxLDkgKzEzNjYsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgIHRFcGxJZGVudFJlc3BvbnNlICoKLQkJCQkJCSAgcElkZW50UmVzcG9uc2VfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE5tdE1udUNiSWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgdEVwbElkZW50UmVzcG9uc2UgKnBJZGVudFJlc3BvbnNlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTM4Miw4ICsxMzc2LDggQEAKIAkJCQkJCSAgICBrRXBsTm10TW51SW50Tm9kZUV2ZW50Tm9JZGVudFJlc3BvbnNlKTsKIAl9IGVsc2UgewkJLy8gbm9kZSBhbnN3ZXJlZCBJZGVudFJlcXVlc3QKIAkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQkJRFdPUkQgZHdEZXZUeXBlOwotCQlXT1JEIHdFcnJvckNvZGUgPSBFUExfRV9OT19FUlJPUjsKKwkJdTMyIGR3RGV2VHlwZTsKKwkJdTE2IHdFcnJvckNvZGUgPSBFUExfRV9OT19FUlJPUjsKIAkJdEVwbE5tdFN0YXRlIE5tdFN0YXRlID0KIAkJICAgICh0RXBsTm10U3RhdGUpIChBbWlHZXRCeXRlRnJvbUxlCiAJCQkJICAgICgmcElkZW50UmVzcG9uc2VfcC0+CkBAIC0xNDMxLDkgKzE0MjUsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYlN0YXR1c1Jlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgdEVwbFN0YXR1c1Jlc3BvbnNlICoKLQkJCQkJCSAgIHBTdGF0dXNSZXNwb25zZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgIHRFcGxTdGF0dXNSZXNwb25zZSAqcFN0YXR1c1Jlc3BvbnNlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTQ3Myw3ICsxNDY2LDcgQEAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aVN1YkluZGV4OwogCXVuc2lnbmVkIGludCB1aUxvY2FsTm9kZUlkOwotCURXT1JEIGR3Tm9kZUNmZzsKKwl1MzIgZHdOb2RlQ2ZnOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAkvLyAkJCQgZC5rLjogc2F2ZSBjdXJyZW50IHRpbWUgZm9yIDB4MUY4OS8yIE1OVGltZW91dFByZU9wMV9VMzIKQEAgLTE2MzMsNyArMTYyNiw3IEBACiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsRGxsTm9kZUluZm8gRGxsTm9kZUluZm87Ci0JRFdPUkQgZHdOb2RlQ2ZnOworCXUzMiBkd05vZGVDZmc7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAl0RXBsVGltZXJBcmcgVGltZXJBcmc7CiAKQEAgLTE3ODIsNyArMTc3NSw3IEBACiAJCQkJCXRFcGxObXRNbnVOb2RlSW5mbyAqIHBOb2RlSW5mb19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JRFdPUkQgZHdOb2RlQ2ZnOworCXUzMiBkd05vZGVDZmc7CiAJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCiAJZHdOb2RlQ2ZnID0gcE5vZGVJbmZvX3AtPm1fZHdOb2RlQ2ZnOwpAQCAtMTkxNiw3ICsxOTA5LDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCiAJCQkJCQl0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCQlXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJCXUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCQl0RXBsTm10TW51SW50Tm9kZUV2ZW50CiAJCQkJCQlOb2RlRXZlbnRfcCkKIHsKQEAgLTE5MzQsNyArMTkyNyw3IEBACiAJc3dpdGNoIChOb2RlRXZlbnRfcCkgewogCWNhc2Uga0VwbE5tdE1udUludE5vZGVFdmVudElkZW50UmVzcG9uc2U6CiAJCXsKLQkJCUJZVEUgYk5tdFN0YXRlOworCQkJdTggYk5tdFN0YXRlOwogCiAJCQlFUExfTk1UTU5VX0RCR19QT1NUX1RSQUNFX1ZBTFVFKE5vZGVFdmVudF9wLAogCQkJCQkJCXVpTm9kZUlkX3AsCkBAIC0xOTYxLDcgKzE5NTQsNyBAQAogCQkJCSAgICB+RVBMX05NVE1OVV9OT0RFX0ZMQUdfTk9UX1NDQU5ORUQ7CiAJCQl9CiAJCQkvLyB1cGRhdGUgb2JqZWN0IDB4MUY4RiBOTVRfTU5Ob2RlRXhwU3RhdGVfQVU4IHRvIFByZU9wMSAoZXZlbiBpZiBsb2NhbCBzdGF0ZSA+PSBQcmVPcDIpCi0JCQliTm10U3RhdGUgPSAoQllURSkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMSAmIDB4RkYpOworCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzUHJlT3BlcmF0aW9uYWwxICYgMHhGRik7CiAJCQlSZXQgPQogCQkJICAgIEVwbE9iZHVXcml0ZUVudHJ5KDB4MUY4RiwgdWlOb2RlSWRfcCwgJmJObXRTdGF0ZSwKIAkJCQkJICAgICAgMSk7CkBAIC0yNDQxLDExICsyNDM0LDExIEBACiAKIAljYXNlIGtFcGxObXRNbnVJbnROb2RlRXZlbnRObXRDbWRTZW50OgogCQl7Ci0JCQlCWVRFIGJObXRTdGF0ZTsKKwkJCXU4IGJObXRTdGF0ZTsKIAogCQkJLy8gdXBkYXRlIGV4cGVjdGVkIE5NVCBzdGF0ZSB3aXRoIHRoZSBvbmUgdGhhdCByZXN1bHRzCiAJCQkvLyBmcm9tIHRoZSBzZW50IE5NVCBjb21tYW5kCi0JCQliTm10U3RhdGUgPSAoQllURSkgKE5vZGVObXRTdGF0ZV9wICYgMHhGRik7CisJCQliTm10U3RhdGUgPSAodTgpIChOb2RlTm10U3RhdGVfcCAmIDB4RkYpOwogCiAJCQkvLyB3cml0ZSBvYmplY3QgMHgxRjhGIE5NVF9NTk5vZGVFeHBTdGF0ZV9BVTgKIAkJCVJldCA9CkBAIC0yNjMwLDEzICsyNjIzLDEzIEBACiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDaGVja05tdFN0YXRlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCQkgdEVwbE5tdE1udU5vZGVJbmZvICogcE5vZGVJbmZvX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCSBXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJIHUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTG9jYWxObXRTdGF0ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJObXRTdGF0ZTsKLQlCWVRFIGJObXRTdGF0ZVByZXY7CisJdTggYk5tdFN0YXRlOworCXU4IGJObXRTdGF0ZVByZXY7CiAJdEVwbE5tdFN0YXRlIEV4cE5tdFN0YXRlOwogCiAJT2JkU2l6ZSA9IDE7CkBAIC0yNjQ3LDggKzI2NDAsOCBAQAogCX0KIAkvLyBjb21wdXRlIGV4cGVjdGVkIE5NVCBzdGF0ZQogCUV4cE5tdFN0YXRlID0gKHRFcGxObXRTdGF0ZSkgKGJObXRTdGF0ZSB8IEVQTF9OTVRfVFlQRV9DUyk7Ci0JLy8gY29tcHV0ZSBCWVRFIG9mIGN1cnJlbnQgTk1UIHN0YXRlCi0JYk5tdFN0YXRlID0gKChCWVRFKSBOb2RlTm10U3RhdGVfcCAmIDB4RkYpOworCS8vIGNvbXB1dGUgdTggb2YgY3VycmVudCBOTVQgc3RhdGUKKwliTm10U3RhdGUgPSAoKHU4KSBOb2RlTm10U3RhdGVfcCAmIDB4RkYpOwogCiAJaWYgKEV4cE5tdFN0YXRlID09IGtFcGxObXRDc05vdEFjdGl2ZSkgewkvLyBpZ25vcmUgdGhlIGN1cnJlbnQgc3RhdGUsIGJlY2F1c2UgdGhlIENOIHNoYWxsIGJlIG5vdCBhY3RpdmUKIAkJUmV0ID0ga0VwbFJlamVjdDsKQEAgLTI3MDYsNyArMjY5OSw3IEBACiAJfSBlbHNlIGlmICgoRXhwTm10U3RhdGUgIT0gTm9kZU5tdFN0YXRlX3ApCiAJCSAgICYmICEoKEV4cE5tdFN0YXRlID09IGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMSkKIAkJCSYmIChOb2RlTm10U3RhdGVfcCA9PSBrRXBsTm10Q3NQcmVPcGVyYXRpb25hbDIpKSkgewkvLyBDTiBpcyBub3QgaW4gZXhwZWN0ZWQgTk1UIHN0YXRlICh3aXRob3V0IHRoZSBleGNlcHRpb25zIGFib3ZlKQotCQlXT1JEIHdiZUVycm9yQ29kZTsKKwkJdTE2IHdiZUVycm9yQ29kZTsKIAogCQlpZiAoKHBOb2RlSW5mb19wLT4KIAkJICAgICBtX3dGbGFncyAmIEVQTF9OTVRNTlVfTk9ERV9GTEFHX05PVF9TQ0FOTkVEKSAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCmluZGV4IDRlMmQwZTEuLjYwOWQ1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCkBAIC04OCw4ICs4OCw4IEBACiAKIC8vIFRyYWNlUG9pbnQgc3VwcG9ydCBmb3IgcmVhbHRpbWUtZGVidWdnaW5nCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Ci12b2lkIFBVQkxJQyBUZ3REYmdQb3N0VHJhY2VWYWx1ZShEV09SRCBkd1RyYWNlVmFsdWVfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHUzMiBkd1RyYWNlVmFsdWVfcCk7CiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApICAgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChwKQogI2RlZmluZSBUR1RfREJHX1BPU1RfVFJBQ0VfVkFMVUUodikgICAgIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHYpCiAjZWxzZQpAQCAtMTA3LDEyICsxMDcsMTIgQEAKIC8vIHN0cnVjdCBmb3IgaW5zdGFuY2UgdGFibGUKIElOU1RBTkNFX1RZUEVfQkVHSU4gRVBMX01DT19ERUNMX0lOU1RBTkNFX01FTUJFUigpCiAKLVNUQVRJQyB2b2xhdGlsZSB0RXBsTm10U3RhdGUgSU5TVF9GQVIgbV9ObXRTdGF0ZTsKLVNUQVRJQyB2b2xhdGlsZSBCT09MIElOU1RfRkFSIG1fZkVuYWJsZVJlYWR5VG9PcGVyYXRlOwotU1RBVElDIHZvbGF0aWxlIEJPT0wgSU5TVF9GQVIgbV9mQXBwUmVhZHlUb09wZXJhdGU7Ci1TVEFUSUMgdm9sYXRpbGUgQk9PTCBJTlNUX0ZBUiBtX2ZUaW1lck1zUHJlT3AyOwotU1RBVElDIHZvbGF0aWxlIEJPT0wgSU5TVF9GQVIgbV9mQWxsTWFuZGF0b3J5Q05JZGVudDsKLVNUQVRJQyB2b2xhdGlsZSBCT09MIElOU1RfRkFSIG1fZkZyb3plbjsKK1NUQVRJQyB2b2xhdGlsZSB0RXBsTm10U3RhdGUgbV9ObXRTdGF0ZTsKK1NUQVRJQyB2b2xhdGlsZSBCT09MIG1fZkVuYWJsZVJlYWR5VG9PcGVyYXRlOworU1RBVElDIHZvbGF0aWxlIEJPT0wgbV9mQXBwUmVhZHlUb09wZXJhdGU7CitTVEFUSUMgdm9sYXRpbGUgQk9PTCBtX2ZUaW1lck1zUHJlT3AyOworU1RBVElDIHZvbGF0aWxlIEJPT0wgbV9mQWxsTWFuZGF0b3J5Q05JZGVudDsKK1NUQVRJQyB2b2xhdGlsZSBCT09MIG1fZkZyb3plbjsKIAogSU5TVEFOQ0VfVFlQRV9FTkQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjEsNyArMTIxLDcgQEAKIC8vIFRoaXMgbWFjcm8gcmVwbGFjZSB0aGUgdW5zcGVjaWZpYyBwb2ludGVyIHRvIGFuIGluc3RhbmNlIHRocm91Z2gKIC8vIHRoZSBtb2R1bCBzcGVjaWZpYyB0eXBlIGZvciB0aGUgbG9jYWwgaW5zdGFuY2UgdGFibGUuIFRoaXMgbWFjcm8KIC8vIG11c3QgZGVmaW5lZCBpbiBlYWNoIG1vZHVsLgotLy8jZGVmaW5lIHRFcGxQdHJJbnN0YW5jZSAgICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSoKKy8vI2RlZmluZSB0RXBsUHRySW5zdGFuY2UgICAgICAgICAgICAgdEVwbEluc3RhbmNlSW5mbyoKIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKQEAgLTE2Myw3ICsxNjMsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrSW5pdChFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsTm10a0luaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE4OSw3ICsxODksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrQWRkSW5zdGFuY2UoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCit0RXBsS2VybmVsIEVwbE5tdGtBZGRJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKIHsKIAlFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMIHRFcGxLZXJuZWwgUmV0OwogLy90RXBsRXZlbnQgICAgICAgICAgICAgICBFdmVudDsKQEAgLTI1OCw3ICsyNTgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgKEVQTF9VU0VfREVMRVRFSU5TVF9GVU5DICE9IEZBTFNFKQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdGtEZWxJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsTm10a0RlbEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJLy8gY2hlY2sgZm9yIGFsbCBBUEkgZnVuY3Rpb24gaWYgaW5zdGFuY2UgaXMgdmFsaWQKQEAgLTI5Niw4ICsyOTYsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrUHJvY2VzcyhFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8KLQkJCQkJICAgICAgdEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbE5tdGtQcm9jZXNzKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsRXZlbnQgKnBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxObXRTdGF0ZSBPbGRObXRTdGF0ZTsKQEAgLTE4MDQsOCArMTgwMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMKLUVwbE5tdGtHZXRObXRTdGF0ZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxObXRTdGF0ZSBFcGxObXRrR2V0Tm10U3RhdGUoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdGtDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCmluZGV4IDRhZDcxYTcuLjQ0NTNjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCkBAIC02OSw4ICs2OSw2IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICJrZXJuZWwvRXBsTm10a0NhbC5oIgotCiAvLyBUT0RPOiBpbml0IGZ1bmN0aW9uIG5lZWRlZCB0byBwcmVwYXJlIEVwbE5tdGtHZXRObXRTdGF0ZSBmb3IKIC8vICAgICAgIGlvLWNvbnRyb2xsLWNhbGwgZnJvbSBFcGxObXR1Q2FsLU1vZHVsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10dS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKaW5kZXggM2RlMTZhMS4uOWFjMmU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1SW5pdCgpCit0RXBsS2VybmVsIEVwbE5tdHVJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1QWRkSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxObXR1QWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTg3LDcgKzE4Nyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbE5tdHVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yMTksNyArMjE5LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dU5tdEV2ZW50KHRFcGxObXRFdmVudCBObXRFdmVudF9wKQordEVwbEtlcm5lbCBFcGxObXR1Tm10RXZlbnQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEV2ZW50IEV2ZW50OwpAQCAtMjUzLDcgKzI1Myw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMgRXBsTm10dUdldE5tdFN0YXRlKCkKK3RFcGxObXRTdGF0ZSBFcGxObXR1R2V0Tm10U3RhdGUodm9pZCkKIHsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CiAKQEAgLTI4NCw3ICsyODQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKQordEVwbEtlcm5lbCBFcGxObXR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTM4Miw3ICszODIsNyBAQAogCQkJCQkvLyBub2RlIGxpc3RlbnMgZm9yIEVQTC1GcmFtZXMgYW5kIGNoZWNrIHRpbWVvdXQKIAkJCQljYXNlIGtFcGxObXRDc05vdEFjdGl2ZToKIAkJCQkJewotCQkJCQkJRFdPUkQgZHdCdWZmZXI7CisJCQkJCQl1MzIgZHdCdWZmZXI7CiAJCQkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwogCQkJCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCkBAIC00NzUsNyArNDc1LDcgQEAKIAkJCQkJLy8gbm9kZSBsaXN0ZW5zIGZvciBFUEwtRnJhbWVzIGFuZCBjaGVjayB0aW1lb3V0CiAJCQkJY2FzZSBrRXBsTm10TXNOb3RBY3RpdmU6CiAJCQkJCXsKLQkJCQkJCURXT1JEIGR3QnVmZmVyOworCQkJCQkJdTMyIGR3QnVmZmVyOwogCQkJCQkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAkJCQkJCXRFcGxUaW1lckFyZyBUaW1lckFyZzsKIApAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQkJCS8vIG5vZGUgcHJvY2Vzc2VzIG9ubHkgYXN5bmMgZnJhbWVzCiAJCQkJY2FzZSBrRXBsTm10TXNQcmVPcGVyYXRpb25hbDE6CiAJCQkJCXsKLQkJCQkJCURXT1JEIGR3QnVmZmVyID0gMDsKKwkJCQkJCXUzMiBkd0J1ZmZlciA9IDA7CiAJCQkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwogCQkJCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCkBAIC02NjQsOSArNjY0LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdHVSZWdpc3RlclN0YXRlQ2hhbmdlQ2IodEVwbE5tdHVTdGF0ZUNoYW5nZUNhbGxiYWNrCi0JCQkgICAgIHBmbkVwbE5tdFN0YXRlQ2hhbmdlQ2JfcCkKK3RFcGxLZXJuZWwgRXBsTm10dVJlZ2lzdGVyU3RhdGVDaGFuZ2VDYih0RXBsTm10dVN0YXRlQ2hhbmdlQ2FsbGJhY2sgcGZuRXBsTm10U3RhdGVDaGFuZ2VDYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10dUNhbC5jCmluZGV4IDRhMjllZjUuLjkyMTY0YzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMgRXBsTm10a0NhbEdldE5tdFN0YXRlKCkKK3RFcGxObXRTdGF0ZSBFcGxObXRrQ2FsR2V0Tm10U3RhdGUodm9pZCkKIHsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CiAJLy8gZm9yIHRlc3QgZGlyZWt0IGNhbGwgZm9yIEVwbE5tdGtHZXRObXRTdGF0ZSgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmQuYwppbmRleCBlZmJiMTk2Li4xZTQ2MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkLmMKQEAgLTEwMSw4ICsxMDEsOCBAQAogLy8gc3RydWN0IGZvciBpbnN0YW5jZSB0YWJsZQogSU5TVEFOQ0VfVFlQRV9CRUdJTiBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfTUVNQkVSKCkKIAotU1RBVElDIHRFcGxPYmRJbml0UGFyYW0gSU5TVF9GQVIgbV9PYmRJbml0UGFyYW07Ci1TVEFUSUMgdEVwbE9iZFN0b3JlTG9hZE9iakNhbGxiYWNrIElOU1RfTkVBUiBtX2ZwU3RvcmVMb2FkT2JqQ2FsbGJhY2s7CitTVEFUSUMgdEVwbE9iZEluaXRQYXJhbSBtX09iZEluaXRQYXJhbTsKK1NUQVRJQyB0RXBsT2JkU3RvcmVMb2FkT2JqQ2FsbGJhY2sgbV9mcFN0b3JlTG9hZE9iakNhbGxiYWNrOwogCiBJTlNUQU5DRV9UWVBFX0VORAogLy8gZGVjb21wb3NpdGlvbiBvZiBmbG9hdApAQCAtMTE5LDExICsxMTksMTEgQEAKIC8vIFRoaXMgbWFjcm8gcmVwbGFjZSB0aGUgdW5zcGVjaWZpYyBwb2ludGVyIHRvIGFuIGluc3RhbmNlIHRocm91Z2gKIC8vIHRoZSBtb2R1bCBzcGVjaWZpYyB0eXBlIGZvciB0aGUgbG9jYWwgaW5zdGFuY2UgdGFibGUuIFRoaXMgbWFjcm8KIC8vIG11c3QgZGVmaW5lZCBpbiBlYWNoIG1vZHVsLgotLy8jZGVmaW5lIHRFcGxQdHJJbnN0YW5jZSAgICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSoKKy8vI2RlZmluZSB0RXBsUHRySW5zdGFuY2UgICAgICAgICAgICAgdEVwbEluc3RhbmNlSW5mbyAqCiAKIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKQogCi1CWVRFIE1FTSBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07Cit1OCBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbE9iamVjdENhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJCSAgIHRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrX3AsCi0JCQkJCSAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3ApOworCQkJCQkgICB0RXBsT2JkQ2JQYXJhbSAqcENiUGFyYW1fcCk7CiAKIHN0YXRpYyB0RXBsT2JkU2l6ZSBFcGxPYmRHZXREYXRhU2l6ZUludGVybih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldFZhckVudHJ5KHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViaW5kZXhFbnRyeV9wLAotCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgTUVNICoqIHBwVmFyRW50cnlfcCk7CisJCQkJICAgIHRFcGxPYmRWYXJFbnRyeSAqKnBwVmFyRW50cnlfcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogc3RhdGljIHRFcGxPYmRTaXplIEVwbE9iZEdldE9iamVjdFNpemUodEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJJbmRleEVudHJ5X3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRHZXRJbmRleEludGVybih0RXBsT2JkSW5pdFBhcmFtIE1FTSAqIHBJbml0UGFyYW1fcCwKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldEluZGV4SW50ZXJuKHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKIAkJCQkgICAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wKTsKIApAQCAtMTcwLDE3ICsxNzAsMTUgQEAKIAkJCQkJICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7CiAKIHN0YXRpYyB2b2lkICpFcGxPYmRHZXRPYmplY3REZWZhdWx0UHRyKHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViSW5kZXhFbnRyeV9wKTsKLXN0YXRpYyB2b2lkIE1FTSAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CitzdGF0aWMgdm9pZCAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CiAKICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICB0RXBsT2JkQ2JTdG9yZVBhcmFtIE1FTSAqCi0JCQkJCSAgcENiU3RvcmVQYXJhbV9wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZENhbGxTdG9yZUNhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRDYlN0b3JlUGFyYW0gKnBDYlN0b3JlUGFyYW1fcCk7CiAKICNlbmRpZiAvLyAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAotc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCBNRU0gKiBwRHN0RGF0YV9wLAorc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCAqcERzdERhdGFfcCwKIAkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKIAkJCQkgdEVwbE9iZFNpemUgT2JqU2l6ZV9wLCB0RXBsT2JkVHlwZSBPYmpUeXBlX3ApOwogCkBAIC0xODksMjQgKzE4NywyMiBAQAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkSXNOdW1lcmljYWxJbnRlcm4odEVwbE9iZFN1YkVudHJ5UHRyIHBPYmRTdWJFbnRyeV9wLAogCQkJCQkgIEJPT0wgKiBwZkVudHJ5TnVtZXJpY2FsX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVByZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgICAgIHZvaWQgKipwcERzdERhdGFfcCwKLQkJCQkJICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCi0JCQkJCSAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wLAotCQkJCQkgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciAqIHBwU3ViRW50cnlfcCwKLQkJCQkJICAgICB0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwQ2JQYXJhbV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplICogcE9iZFNpemVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRXcml0ZUVudHJ5UHJlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICAgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgICAgIHZvaWQgKipwcERzdERhdGFfcCwKKwkJCQkgICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCisJCQkJICAgICAgdEVwbE9iZEVudHJ5UHRyICpwcE9iZEVudHJ5X3AsCisJCQkJICAgICAgdEVwbE9iZFN1YkVudHJ5UHRyICpwcFN1YkVudHJ5X3AsCisJCQkJICAgICAgdEVwbE9iZENiUGFyYW0gKnBDYlBhcmFtX3AsCisJCQkJICAgICAgdEVwbE9iZFNpemUgKnBPYmRTaXplX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVBvc3QoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICAgICAgdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeV9wLAotCQkJCQkgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5X3AsCi0JCQkJCSAgICAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCSAgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRXcml0ZUVudHJ5UG9zdChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5X3AsCisJCQkJICAgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnlfcCwKKwkJCQkgICAgICAgdEVwbE9iZENiUGFyYW0gKnBDYlBhcmFtX3AsCisJCQkJICAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCisJCQkJICAgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMjI4LDggKzIyNCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgdEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZEluaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfIHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwpAQCAtMjYxLDkgKzI1Niw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEFkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHRFcGxPYmRJbml0UGFyYW0gTUVNICoKLQkJCQkJCSBwSW5pdFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZEFkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3ApCiB7CiAKIAlFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMIHRFcGxLZXJuZWwgUmV0OwpAQCAtMzA4LDcgKzMwMSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoRVBMX1VTRV9ERUxFVEVJTlNUX0ZVTkMgIT0gRkFMU0UpCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkRGVsZXRlSW5zdGFuY2UoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsT2JkRGVsZXRlSW5zdGFuY2UoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUikKIHsKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZAogCUVQTF9NQ09fQ0hFQ0tfSU5TVEFOQ0VfU1RBVEUoKTsKQEAgLTM0MSwxOCArMzM0LDE2IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFdyaXRlRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCXVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCXRFcGxPYmRTaXplIFNpemVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkgICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOwotCXZvaWQgTUVNICpwRHN0RGF0YTsKKwl0RXBsT2JkQ2JQYXJhbSBDYlBhcmFtOworCXZvaWQgKnBEc3REYXRhOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAlSZXQgPSBFcGxPYmRXcml0ZUVudHJ5UHJlKEVQTF9NQ09fSU5TVEFOQ0VfUFRSXwpAQCAtNDAyLDE3ICszOTMsMTUgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkUmVhZEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlYWRFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgIHZvaWQgKnBEc3REYXRhX3AsIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CiAJdm9pZCAqcFNyY0RhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIApAQCAtNDg3LDkgKzQ3Niw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEFjY2Vzc09kUGFydChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICB0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCi0JCQkJCQkgIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApCit0RXBsS2VybmVsIEVwbE9iZEFjY2Vzc09kUGFydChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCisJCQkgICAgICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKQEAgLTU4NywxMiArNTc1LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZERlZmluZVZhcihFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICAgdEVwbFZhclBhcmFtIE1FTSAqIHBWYXJQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxPYmREZWZpbmVWYXIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwotCXRFcGxPYmRWYXJFbnRyeSBNRU0gKnBWYXJFbnRyeTsKKwl0RXBsT2JkVmFyRW50cnkgKnBWYXJFbnRyeTsKIAl0RXBsVmFyUGFyYW1WYWxpZCBWYXJWYWxpZDsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YmluZGV4RW50cnk7CiAKQEAgLTY3NCw5ICs2NjEsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB2b2lkICpQVUJMSUMgRXBsT2JkR2V0T2JqZWN0RGF0YVB0cihFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3ZvaWQgKkVwbE9iZEdldE9iamVjdERhdGFQdHIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl2b2lkICpwRGF0YTsKQEAgLTcxOSw4ICs3MDUsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWdpc3RlclVzZXJPZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlZ2lzdGVyVXNlck9kKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCiB7CiAKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC03NDksMTAgKzczNCw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZEluaXRWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgdEVwbE9iZFZhckVudHJ5IE1FTSAqIHBWYXJFbnRyeV9wLAotCQkJCQkgICAgdEVwbE9iZFR5cGUgVHlwZV9wLAotCQkJCQkgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQordm9pZCBFcGxPYmRJbml0VmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwKKwkJCXRFcGxPYmRUeXBlIFR5cGVfcCwgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQogewogLyoKICAgICAjaWYgKEVQTF9QRE9fVVNFX1NUQVRJQ19NQVBQSU5HID09IEZBTFNFKQpAQCAtODAzLDkgKzc4Niw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxPYmRTaXplIFBVQkxJQyBFcGxPYmRHZXREYXRhU2l6ZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordEVwbE9iZFNpemUgRXBsT2JkR2V0RGF0YVNpemUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKQEAgLTg0NSwxMSArODI3LDExIEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHVuc2lnbmVkIGludCBQVUJMSUMgRXBsT2JkR2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIpCit1bnNpZ25lZCBpbnQgRXBsT2JkR2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJOb2RlSWQ7CisJdTggYk5vZGVJZDsKIAogCWJOb2RlSWQgPSAwOwogCU9iZFNpemUgPSBzaXplb2YoYk5vZGVJZCk7CkBAIC04ODIsMjIgKzg2NCwyMSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRTZXROb2RlSWQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgICAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkU2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCUJZVEUgZkh3Qm9vbDsKLQlCWVRFIGJOb2RlSWQ7CisJdTggZkh3Qm9vbDsKKwl1OCBiTm9kZUlkOwogCiAJLy8gY2hlY2sgTm9kZSBJZAogCWlmICh1aU5vZGVJZF9wID09IEVQTF9DX0FEUl9JTlZBTElEKSB7CiAJCVJldCA9IGtFcGxJbnZhbGlkTm9kZUlkOwogCQlnb3RvIEV4aXQ7CiAJfQotCWJOb2RlSWQgPSAoQllURSkgdWlOb2RlSWRfcDsKLQlPYmRTaXplID0gc2l6ZW9mKEJZVEUpOworCWJOb2RlSWQgPSAodTgpIHVpTm9kZUlkX3A7CisJT2JkU2l6ZSA9IHNpemVvZih1OCk7CiAJLy8gd3JpdGUgTm9kZUlkIHRvIE9EIGVudHJ5CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeShFUExfTUNPX1BUUl9JTlNUQU5DRV9QVFJfCiAJCQkgICAgICAgRVBMX09CRF9OT0RFX0lEX0lOREVYLApAQCAtOTY2LDEwICs5NDcsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRJc051bWVyaWNhbChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSBCT09MICogcGZFbnRyeU51bWVyaWNhbF9wKQordEVwbEtlcm5lbCBFcGxPYmRJc051bWVyaWNhbChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICBCT09MICpwZkVudHJ5TnVtZXJpY2FsX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKQEAgLTEwMTgsMTYgKzk5OCwxNCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWFkRW50cnlUb0xlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlYWRFbnRyeVRvTGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxPYmRFbnRyeVB0ciBwT2JkRW50cnk7CiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJFbnRyeTsKLQl0RXBsT2JkQ2JQYXJhbSBNRU0gQ2JQYXJhbTsKKwl0RXBsT2JkQ2JQYXJhbSBDYlBhcmFtOwogCXZvaWQgKnBTcmNEYXRhOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKQEAgLTEwOTEsNyArMTA2OSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50ODoKIAljYXNlIGtFcGxPYmRUeXBVSW50ODoKIAkJewotCQkJQW1pU2V0Qnl0ZVRvTGUocERzdERhdGFfcCwgKigoQllURSAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0Qnl0ZVRvTGUocERzdERhdGFfcCwgKigodTggKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEwOTksNyArMTA3Nyw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MTY6CiAJY2FzZSBrRXBsT2JkVHlwVUludDE2OgogCQl7Ci0JCQlBbWlTZXRXb3JkVG9MZShwRHN0RGF0YV9wLCAqKChXT1JEICopIHBTcmNEYXRhKSk7CisJCQlBbWlTZXRXb3JkVG9MZShwRHN0RGF0YV9wLCAqKCh1MTYgKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTExMDcsNyArMTA4NSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MjQ6CiAJY2FzZSBrRXBsT2JkVHlwVUludDI0OgogCQl7Ci0JCQlBbWlTZXREd29yZDI0VG9MZShwRHN0RGF0YV9wLCAqKChEV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0RHdvcmQyNFRvTGUocERzdERhdGFfcCwgKigodTMyICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTE2LDcgKzEwOTQsNyBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQzMjoKIAljYXNlIGtFcGxPYmRUeXBSZWFsMzI6CiAJCXsKLQkJCUFtaVNldER3b3JkVG9MZShwRHN0RGF0YV9wLCAqKChEV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0RHdvcmRUb0xlKHBEc3REYXRhX3AsICooKHUzMiAqKSBwU3JjRGF0YSkpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTEyNCw3ICsxMTAyLDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ0MDoKIAljYXNlIGtFcGxPYmRUeXBVSW50NDA6CiAJCXsKLQkJCUFtaVNldFF3b3JkNDBUb0xlKHBEc3REYXRhX3AsICooKFFXT1JEICopIHBTcmNEYXRhKSk7CisJCQlBbWlTZXRRd29yZDQwVG9MZShwRHN0RGF0YV9wLCAqKCh1NjQgKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTExMzIsNyArMTExMCw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50NDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDQ4OgogCQl7Ci0JCQlBbWlTZXRRd29yZDQ4VG9MZShwRHN0RGF0YV9wLCAqKChRV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0UXdvcmQ0OFRvTGUocERzdERhdGFfcCwgKigodTY0ICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTQwLDcgKzExMTgsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDU2OgogCWNhc2Uga0VwbE9iZFR5cFVJbnQ1NjoKIAkJewotCQkJQW1pU2V0UXdvcmQ1NlRvTGUocERzdERhdGFfcCwgKigoUVdPUkQgKikgcFNyY0RhdGEpKTsKKwkJCUFtaVNldFF3b3JkNTZUb0xlKHBEc3REYXRhX3AsICooKHU2NCAqKSBwU3JjRGF0YSkpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTE0OSw3ICsxMTI3LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBVSW50NjQ6CiAJY2FzZSBrRXBsT2JkVHlwUmVhbDY0OgogCQl7Ci0JCQlBbWlTZXRRd29yZDY0VG9MZShwRHN0RGF0YV9wLCAqKChRV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0UXdvcmQ2NFRvTGUocERzdERhdGFfcCwgKigodTY0ICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTk5LDE5ICsxMTc3LDE3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFdyaXRlRW50cnlGcm9tTGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeUZyb21MZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsIHRFcGxPYmRTaXplIFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5OwogCXRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnk7Ci0JdEVwbE9iZENiUGFyYW0gTUVNIENiUGFyYW07Ci0Jdm9pZCBNRU0gKnBEc3REYXRhOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CisJdm9pZCAqcERzdERhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlRV09SRCBxd0J1ZmZlcjsKKwl1NjQgcXdCdWZmZXI7CiAJdm9pZCAqcEJ1ZmZlciA9ICZxd0J1ZmZlcjsKIAogCVJldCA9IEVwbE9iZFdyaXRlRW50cnlQcmUoRVBMX01DT19JTlNUQU5DRV9QVFJfCkBAIC0xMjQyLDcgKzEyMTgsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDg6CiAJCXsKLQkJCSooKEJZVEUgKikgcEJ1ZmZlcikgPSBBbWlHZXRCeXRlRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTggKikgcEJ1ZmZlcikgPSBBbWlHZXRCeXRlRnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI1MCw3ICsxMjI2LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQxNjoKIAljYXNlIGtFcGxPYmRUeXBVSW50MTY6CiAJCXsKLQkJCSooKFdPUkQgKikgcEJ1ZmZlcikgPSBBbWlHZXRXb3JkRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTE2ICopIHBCdWZmZXIpID0gQW1pR2V0V29yZEZyb21MZShwU3JjRGF0YV9wKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyNTgsNyArMTIzNCw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MjQ6CiAJY2FzZSBrRXBsT2JkVHlwVUludDI0OgogCQl7Ci0JCQkqKChEV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldER3b3JkMjRGcm9tTGUocFNyY0RhdGFfcCk7CisJCQkqKCh1MzIgKikgcEJ1ZmZlcikgPSBBbWlHZXREd29yZDI0RnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI2Nyw3ICsxMjQzLDcgQEAKIAljYXNlIGtFcGxPYmRUeXBVSW50MzI6CiAJY2FzZSBrRXBsT2JkVHlwUmVhbDMyOgogCQl7Ci0JCQkqKChEV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldER3b3JkRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTMyICopIHBCdWZmZXIpID0gQW1pR2V0RHdvcmRGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMjc1LDcgKzEyNTEsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDQwOgogCWNhc2Uga0VwbE9iZFR5cFVJbnQ0MDoKIAkJewotCQkJKigoUVdPUkQgKikgcEJ1ZmZlcikgPSBBbWlHZXRRd29yZDQwRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTY0ICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ0MEZyb21MZShwU3JjRGF0YV9wKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyODMsNyArMTI1OSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50NDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDQ4OgogCQl7Ci0JCQkqKChRV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNDhGcm9tTGUocFNyY0RhdGFfcCk7CisJCQkqKCh1NjQgKikgcEJ1ZmZlcikgPSBBbWlHZXRRd29yZDQ4RnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI5MSw3ICsxMjY3LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ1NjoKIAljYXNlIGtFcGxPYmRUeXBVSW50NTY6CiAJCXsKLQkJCSooKFFXT1JEICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ1NkZyb21MZShwU3JjRGF0YV9wKTsKKwkJCSooKHU2NCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNTZGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzAwLDcgKzEyNzYsNyBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQ2NDoKIAljYXNlIGtFcGxPYmRUeXBSZWFsNjQ6CiAJCXsKLQkJCSooKFFXT1JEICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ2NEZyb21MZShwU3JjRGF0YV9wKTsKKwkJCSooKHU2NCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNjRGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzQ1LDEwICsxMzIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkR2V0QWNjZXNzVHlwZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB0RXBsT2JkQWNjZXNzICogcEFjY2Vzc1R5cF9wKQordEVwbEtlcm5lbCBFcGxPYmRHZXRBY2Nlc3NUeXBlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB0RXBsT2JkQWNjZXNzICpwQWNjZXNzVHlwX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKQEAgLTEzODgsMTAgKzEzNjMsOSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJICAgICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQordEVwbEtlcm5lbCBFcGxPYmRTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CkBAIC0xNDM1LDExICsxNDA5LDExIEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbE9iamVjdENhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJCSAgIHRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrX3AsCi0JCQkJCSAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3ApCisJCQkJCSAgIHRFcGxPYmRDYlBhcmFtICpwQ2JQYXJhbV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7Ci0JdEVwbE9iZENhbGxiYWNrIE1FTSBmcENhbGxiYWNrOworCXRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrOwogCiAJLy8gY2hlY2sgZm9yIGFsbCBBUEkgZnVuY3Rpb24gaWYgaW5zdGFuY2UgaXMgdmFsaWQKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC0xNDgxLDcgKzE0NTUsNyBAQAogewogCiAJdEVwbE9iZFNpemUgRGF0YVNpemU7Ci0Jdm9pZCBNRU0gKnBEYXRhOworCXZvaWQgKnBEYXRhOwogCiAJLy8gSWYgT0QgZW50cnkgaXMgZGVmaW5lZCBieSBtYWNybyBFUExfT0JEX1NVQklOREVYX1JPTV9WU1RSSU5HCiAJLy8gdGhlbiB0aGUgY3VycmVudCBwb2ludGVyIGlzIGFsd2F5cyBOVUxMLiBUaGUgZnVuY3Rpb24KQEAgLTE0OTAsOCArMTQ2NCw3IEBACiAKIAlpZiAocFN1YkluZGV4RW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7CiAJCS8vIFRoZSBwb2ludGVyIHRvIGN1cnJlbnQgdmFsdWUgY2FuIGJlIHJlY2VpdmVkIGZyb20gRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cigpCi0JCXBEYXRhID0KLQkJICAgICgodm9pZCBNRU0gKilFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHBTdWJJbmRleEVudHJ5X3ApKTsKKwkJcERhdGEgPSAoKHZvaWQgKilFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHBTdWJJbmRleEVudHJ5X3ApKTsKIAkJaWYgKHBEYXRhICE9IE5VTEwpIHsKIAkJCURhdGFTaXplID0KIAkJCSAgICBFcGxPYmRHZXRTdHJMZW4oKHZvaWQgKilwRGF0YSwgRGF0YVNpemUsCkBAIC0xNTI2LDcgKzE0OTksNyBAQAogewogCiAJdEVwbE9iZFNpemUgU3RyTGVuID0gMDsKLQlCWVRFICpwYlN0cmluZzsKKwl1OCAqcGJTdHJpbmc7CiAKIAlpZiAocE9iakRhdGFfcCA9PSBOVUxMKSB7CiAJCWdvdG8gRXhpdDsKQEAgLTE3NjMsMTggKzE3MzYsMTggQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ2NDoKIAogCQkvLyBzd2l0Y2ggdG8gbG93ZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgoc2lnbmVkIFFXT1JEICopcFJhbmdlRGF0YSkgKyAxOworCQlwUmFuZ2VEYXRhID0gKChzaWduZWQgdTY0ICopcFJhbmdlRGF0YSkgKyAxOwogCiAJCS8vIGNoZWNrIGlmIHZhbHVlIGlzIHRvIGxvdwotCQlpZiAoKigoc2lnbmVkIFFXT1JEICopcERhdGFfcCkgPCAqKChzaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSkgeworCQlpZiAoKigoc2lnbmVkIHU2NCAqKXBEYXRhX3ApIDwgKigoc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpKSB7CiAJCQlSZXQgPSBrRXBsT2JkVmFsdWVUb29Mb3c7CiAJCQlicmVhazsKIAkJfQogCQkvLyBzd2l0Y2ggdG8gaGlnaGVyIGxpbWl0Ci0JCXBSYW5nZURhdGEgPSAoKHNpZ25lZCBRV09SRCAqKXBSYW5nZURhdGEpICsgMTsKKwkJcFJhbmdlRGF0YSA9ICgoc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBoaWdoCi0JCWlmICgqKChzaWduZWQgUVdPUkQgKilwRGF0YV9wKSA+ICooKHNpZ25lZCBRV09SRCAqKXBSYW5nZURhdGEpKSB7CisJCWlmICgqKChzaWduZWQgdTY0ICopcERhdGFfcCkgPiAqKChzaWduZWQgdTY0ICopcFJhbmdlRGF0YSkpIHsKIAkJCVJldCA9IGtFcGxPYmRWYWx1ZVRvb0hpZ2g7CiAJCX0KIApAQCAtMTc4NywyMCArMTc2MCwyMCBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQ2NDoKIAogCQkvLyBzd2l0Y2ggdG8gbG93ZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSArIDE7CisJCXBSYW5nZURhdGEgPSAoKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBsb3cKLQkJaWYgKCooKHVuc2lnbmVkIFFXT1JEICopcERhdGFfcCkgPAotCQkgICAgKigodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSkgeworCQlpZiAoKigodW5zaWduZWQgdTY0ICopcERhdGFfcCkgPAorCQkgICAgKigodW5zaWduZWQgdTY0ICopcFJhbmdlRGF0YSkpIHsKIAkJCVJldCA9IGtFcGxPYmRWYWx1ZVRvb0xvdzsKIAkJCWJyZWFrOwogCQl9CiAJCS8vIHN3aXRjaCB0byBoaWdoZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSArIDE7CisJCXBSYW5nZURhdGEgPSAoKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBoaWdoCi0JCWlmICgqKCh1bnNpZ25lZCBRV09SRCAqKXBEYXRhX3ApID4KLQkJICAgICooKHVuc2lnbmVkIFFXT1JEICopcFJhbmdlRGF0YSkpIHsKKwkJaWYgKCooKHVuc2lnbmVkIHU2NCAqKXBEYXRhX3ApID4KKwkJICAgICooKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpKSB7CiAJCQlSZXQgPSBrRXBsT2JkVmFsdWVUb29IaWdoOwogCQl9CiAKQEAgLTE4NzAsMjkgKzE4NDMsMjggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVByZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgICAgIHZvaWQgKipwcERzdERhdGFfcCwKLQkJCQkJICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCi0JCQkJCSAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wLAotCQkJCQkgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciAqIHBwU3ViRW50cnlfcCwKLQkJCQkJICAgICB0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwQ2JQYXJhbV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplICogcE9iZFNpemVfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZFdyaXRlRW50cnlQcmUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICAgICAgdm9pZCAqKnBwRHN0RGF0YV9wLAorCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVfcCwKKwkJCQkgICAgICB0RXBsT2JkRW50cnlQdHIgKnBwT2JkRW50cnlfcCwKKwkJCQkgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgKnBwU3ViRW50cnlfcCwKKwkJCQkgICAgICB0RXBsT2JkQ2JQYXJhbSAqcENiUGFyYW1fcCwKKwkJCQkgICAgICB0RXBsT2JkU2l6ZSAqcE9iZFNpemVfcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxPYmRFbnRyeVB0ciBwT2JkRW50cnk7CiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJFbnRyeTsKIAl0RXBsT2JkQWNjZXNzIEFjY2VzczsKLQl2b2lkIE1FTSAqcERzdERhdGE7CisJdm9pZCAqcERzdERhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAlCT09MIGZFbnRyeU51bWVyaWNhbDsKIAogI2lmIChFUExfT0JEX1VTRV9TVFJJTkdfRE9NQUlOX0lOX1JBTSAhPSBGQUxTRSkKLQl0RXBsT2JkVlN0cmluZ0RvbWFpbiBNRU0gTWVtVlN0cmluZ0RvbWFpbjsKLQl2b2lkIE1FTSAqcEN1cnJEYXRhOworCXRFcGxPYmRWU3RyaW5nRG9tYWluIE1lbVZTdHJpbmdEb21haW47CisJdm9pZCAqcEN1cnJEYXRhOwogI2VuZGlmCiAKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZApAQCAtMTkwOCw3ICsxODgwLDcgQEAKIAkJZ290byBFeGl0OwogCX0KIAkvLyBnZXQgcG9pbnRlciB0byBvYmplY3QgZGF0YQotCXBEc3REYXRhID0gKHZvaWQgTUVNICopRXBsT2JkR2V0T2JqZWN0RGF0YVB0ckludGVybihwU3ViRW50cnkpOworCXBEc3REYXRhID0gKHZvaWQgKilFcGxPYmRHZXRPYmplY3REYXRhUHRySW50ZXJuKHBTdWJFbnRyeSk7CiAKIAlBY2Nlc3MgPSAodEVwbE9iZEFjY2VzcykgcFN1YkVudHJ5LT5tX0FjY2VzczsKIApAQCAtMTkzMyw3ICsxOTA1LDcgQEAKIAkvLyBhZGFwdGVkIGJ5IHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24sIHJlLXJlYWQKIAkvLyB0aGlzIHZhbHVlcy4KIAlPYmRTaXplID0gRXBsT2JkR2V0T2JqZWN0U2l6ZShwU3ViRW50cnkpOwotCXBEc3REYXRhID0gKHZvaWQgTUVNICopRXBsT2JkR2V0T2JqZWN0RGF0YVB0ckludGVybihwU3ViRW50cnkpOworCXBEc3REYXRhID0gKHZvaWQgKilFcGxPYmRHZXRPYmplY3REYXRhUHRySW50ZXJuKHBTdWJFbnRyeSk7CiAKIAkvLyAwOS1kZWMtMjAwNCByLmQuOgogCS8vICAgICAgRnVuY3Rpb24gRXBsT2JkV3JpdGVFbnRyeSgpIGNhbGxzIG5ldyBldmVudCBrRXBsT2JkRXZXclN0cmluZ0RvbWFpbgpAQCAtMTk2NywyMyArMTkzOSwxOSBAQAogCQlwQ3VyckRhdGEgPSBwU3ViRW50cnktPm1fcEN1cnJlbnQ7CiAJCWlmICgocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpCiAJCSAgICB8fCAocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cE9TdHJpbmcpKSB7Ci0JCQkoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwQ3VyckRhdGEpLT5tX1NpemUgPQotCQkJICAgIE1lbVZTdHJpbmdEb21haW4ubV9PYmpTaXplOwotCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikgcEN1cnJEYXRhKS0+bV9wU3RyaW5nID0KLQkJCSAgICBNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CisJCQkoKHRFcGxPYmRWU3RyaW5nICopcEN1cnJEYXRhKS0+bV9TaXplID0gTWVtVlN0cmluZ0RvbWFpbi5tX09ialNpemU7CisJCQkoKHRFcGxPYmRWU3RyaW5nICopcEN1cnJEYXRhKS0+bV9wU3RyaW5nID0gTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOwogCQl9IGVsc2UJCS8vIGlmIChwU2Rvc1RhYmxlRW50cnlfcC0+bV9iT2JqVHlwZSA9PSBrRXBsT2JkVHlwRG9tYWluKQogCQl7Ci0JCQkoKHRFcGxPYmRWYXJFbnRyeSBNRU0gKikgcEN1cnJEYXRhKS0+bV9TaXplID0KLQkJCSAgICBNZW1WU3RyaW5nRG9tYWluLm1fT2JqU2l6ZTsKLQkJCSgodEVwbE9iZFZhckVudHJ5IE1FTSAqKSBwQ3VyckRhdGEpLT5tX3BEYXRhID0KLQkJCSAgICAodm9pZCBNRU0gKilNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CisJCQkoKHRFcGxPYmRWYXJFbnRyeSAqKXBDdXJyRGF0YSktPm1fU2l6ZSA9IE1lbVZTdHJpbmdEb21haW4ubV9PYmpTaXplOworCQkJKCh0RXBsT2JkVmFyRW50cnkgKilwQ3VyckRhdGEpLT5tX3BEYXRhID0gKHZvaWQgKilNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CiAJCX0KIAogCQkvLyBCZWNhdXNlIG9iamVjdCBzaXplIGFuZCBvYmplY3QgcG9pbnRlciBhcmUKIAkJLy8gYWRhcHRlZCBieSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLCByZS1yZWFkCiAJCS8vIHRoaXMgdmFsdWVzLgogCQlPYmRTaXplID0gTWVtVlN0cmluZ0RvbWFpbi5tX09ialNpemU7Ci0JCXBEc3REYXRhID0gKHZvaWQgTUVNICopTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOworCQlwRHN0RGF0YSA9ICh2b2lkICopTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOwogCX0KICNlbmRpZiAvLyNpZiAoT0JEX1VTRV9TVFJJTkdfRE9NQUlOX0lOX1JBTSAhPSBGQUxTRSkKIApAQCAtMjAwNCw3ICsxOTcyLDcgQEAKIAl9CiAKIAlpZiAocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpIHsKLQkJaWYgKCgoY2hhciBNRU0gKilwU3JjRGF0YV9wKVtTaXplX3AgLSAxXSA9PSAnXDAnKSB7CS8vIGxhc3QgYnl0ZSBvZiBzb3VyY2Ugc3RyaW5nIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVyCisJCWlmICgoKGNoYXIgKilwU3JjRGF0YV9wKVtTaXplX3AgLSAxXSA9PSAnXDAnKSB7CS8vIGxhc3QgYnl0ZSBvZiBzb3VyY2Ugc3RyaW5nIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVyCiAKIAkJCS8vIHJlc2VydmUgb25lIGJ5dGUgaW4gZGVzdGluYXRpb24gZm9yIDAtdGVybWluYXRpb24KIAkJCVNpemVfcCAtPSAxOwpAQCAtMjA2NCwxMyArMjAzMiwxMiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRXcml0ZUVudHJ5UG9zdChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICB0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5X3AsCi0JCQkJCSAgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnlfcCwKLQkJCQkJICAgICAgdEVwbE9iZENiUGFyYW0gTUVNICogcENiUGFyYW1fcCwKLQkJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJICAgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJICAgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeVBvc3QoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeV9wLAorCQkJCSAgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5X3AsCisJCQkJICAgICAgIHRFcGxPYmRDYlBhcmFtICpwQ2JQYXJhbV9wLAorCQkJCSAgICAgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSAgICAgICB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApCiB7CiAKIAl0RXBsS2VybmVsIFJldDsKQEAgLTIxMDMsNyArMjA3MCw3IEBACiAKIAkvLyB0ZXJtaW5hdGUgc3RyaW5nIHdpdGggMAogCWlmIChwU3ViRW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7Ci0JCSgoY2hhciBNRU0gKilwRHN0RGF0YV9wKVtPYmRTaXplX3BdID0gJ1wwJzsKKwkJKChjaGFyICopcERzdERhdGFfcClbT2JkU2l6ZV9wXSA9ICdcMCc7CiAJfQogCS8vIHdyaXRlIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24gdG8gc3RydWN0dXJlIG9mIGNhbGxiYWNrIHBhcmFtZXRlcnMKIAkvLyBzbyBjYWxsYmFjayBmdW5jdGlvbiBjYW4gY2hhbmdlIGRhdGEgc3Vic2VxdWVudGx5CkBAIC0yMTIzLDcgKzIwOTAsNyBAQAogLy8gRnVuY3Rpb246ICAgIEVwbE9iZEdldE9iamVjdFNpemUoKQogLy8KIC8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiB0byBnZXQgc2l6ZSBvZiBvYmplY3QKLS8vICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgdHlwZSBhbiBmaXhlZCBkYXRhIHR5cGUgKEJZVEUsIFdPUkQsIC4uLikKKy8vICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgdHlwZSBhbiBmaXhlZCBkYXRhIHR5cGUgKHU4LCB1MTYsIC4uLikKIC8vICAgICAgICAgICAgICBvciBub24gZml4ZWQgb2JqZWN0IChzdHJpbmcsIGRvbWFpbikuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBkZWNpZGUKIC8vICAgICAgICAgICAgICBpZiBkb3dubG9hZCBkYXRhIGFyZSBzdG9yZWQgdGVtcG9yYXJ5IG9yIG5vdC4gRm9yIG9iamVjdHMgd2l0aCBmaXhlZCBkYXRhIGxlbmd0aAogLy8gICAgICAgICAgICAgIGFuZCB0eXBlcyBhIHZhbHVlIHJhbmdlIGNoZWNraW5nIGNhbiBwcm9jZXNzLgpAQCAtMjE5Miw4ICsyMTU5LDggQEAKIAljYXNlIGtFcGxPYmRUeXBEb21haW46CiAKIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7Ci0JCQlEYXRhU2l6ZSA9ICgodEVwbE9iZFZhckVudHJ5IE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJaWYgKCh2b2lkICopcERhdGEgIT0gKHZvaWQgKilOVUxMKSB7CisJCQlEYXRhU2l6ZSA9ICgodEVwbE9iZFZhckVudHJ5ICopIHBEYXRhKS0+bV9TaXplOwogCQl9CiAJCWJyZWFrOwogCkBAIC0yMjA1LDIxICsyMTcyLDE5IEBACiAJCS8vIHRoZW4gdGhlIGN1cnJlbnQgcG9pbnRlciBpcyBhbHdheXMgTlVMTC4gVGhlIGZ1bmN0aW9uCiAJCS8vIHJldHVybnMgdGhlIGxlbmd0aCBvZiBkZWZhdWx0IHN0cmluZy4KIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7CisJCWlmICgodm9pZCAqKXBEYXRhICE9ICh2b2lkICopTlVMTCkgewogCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJLy8gdEVwbE9iZFZTdHJpbmcgb2YgY3VycmVudCB2YWx1ZS4KIAkJCS8vICh0eXBlcyB0RXBsT2JkVlN0cmluZywgdEVwbE9iZE9TdHJpbmcgYW5kIHRFcGxPYmRVU3RyaW5nIGhhcyB0aGUgc2FtZSBtZW1iZXJzKQotCQkJRGF0YVNpemUgPSAoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJCURhdGFTaXplID0gKCh0RXBsT2JkVlN0cmluZyAqKSBwRGF0YSktPm1fU2l6ZTsKIAkJfSBlbHNlIHsKIAkJCS8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCBkZWNsZWFyZWQuIFRoZSBzdHJpbmcKIAkJCS8vIGlzIGxvY2F0ZWQgaW4gUk9NLCB0aGVyZWZvciB1c2UgZGVmYXVsdCBwb2ludGVyLgogCQkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcERlZmF1bHQ7Ci0JCQlpZiAoKENPTlNUIHZvaWQgUk9NICopcERhdGEgIT0gKENPTlNUIHZvaWQgUk9NICopTlVMTCkgeworCQkJaWYgKChjb25zdCB2b2lkICopcERhdGEgIT0gKGNvbnN0IHZvaWQgKilOVUxMKSB7CiAJCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJCS8vIHRFcGxPYmRWU3RyaW5nIG9mIGRlZmF1bHQgdmFsdWUuCi0JCQkJRGF0YVNpemUgPQotCQkJCSAgICAoKENPTlNUIHRFcGxPYmRWU3RyaW5nIFJPTSAqKSBwRGF0YSktPgotCQkJCSAgICBtX1NpemU7CisJCQkJRGF0YVNpemUgPSAoKGNvbnN0IHRFcGxPYmRWU3RyaW5nICopcERhdGEpLT5tX1NpemU7CiAJCQl9CiAJCX0KIApAQCAtMjIyOSwyMSArMjE5NCwxOSBAQAogCWNhc2Uga0VwbE9iZFR5cE9TdHJpbmc6CiAKIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7CisJCWlmICgodm9pZCAqKXBEYXRhICE9ICh2b2lkICopTlVMTCkgewogCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJLy8gdEVwbE9iZFZTdHJpbmcgb2YgY3VycmVudCB2YWx1ZS4KIAkJCS8vICh0eXBlcyB0RXBsT2JkVlN0cmluZywgdEVwbE9iZE9TdHJpbmcgYW5kIHRFcGxPYmRVU3RyaW5nIGhhcyB0aGUgc2FtZSBtZW1iZXJzKQotCQkJRGF0YVNpemUgPSAoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJCURhdGFTaXplID0gKCh0RXBsT2JkT1N0cmluZyAqKSBwRGF0YSktPm1fU2l6ZTsKIAkJfSBlbHNlIHsKIAkJCS8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCBkZWNsZWFyZWQuIFRoZSBzdHJpbmcKIAkJCS8vIGlzIGxvY2F0ZWQgaW4gUk9NLCB0aGVyZWZvciB1c2UgZGVmYXVsdCBwb2ludGVyLgogCQkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcERlZmF1bHQ7Ci0JCQlpZiAoKENPTlNUIHZvaWQgUk9NICopcERhdGEgIT0gKENPTlNUIHZvaWQgUk9NICopTlVMTCkgeworCQkJaWYgKChjb25zdCB2b2lkICopcERhdGEgIT0gKGNvbnN0IHZvaWQgKilOVUxMKSB7CiAJCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJCS8vIHRFcGxPYmRWU3RyaW5nIG9mIGRlZmF1bHQgdmFsdWUuCi0JCQkJRGF0YVNpemUgPQotCQkJCSAgICAoKENPTlNUIHRFcGxPYmRPU3RyaW5nIFJPTSAqKSBwRGF0YSktPgotCQkJCSAgICBtX1NpemU7CisJCQkJRGF0YVNpemUgPSAoKGNvbnN0IHRFcGxPYmRPU3RyaW5nICopcERhdGEpLT5tX1NpemU7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC0yMzY2LDcgKzIzMjksNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkR2V0VmFyRW50cnkodEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJpbmRleEVudHJ5X3AsCi0JCQkJICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQorCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApCiB7CiAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxPYmRWYXJFbnRyeU5vdEV4aXN0OwpAQCAtMjM3OCwxMyArMjM0MSw5IEBACiAJaWYgKChwU3ViaW5kZXhFbnRyeV9wLT5tX0FjY2VzcyAmIGtFcGxPYmRBY2NWYXIpICE9IDApIHsKIAkJLy8gY2hlY2sgaWYgb2JqZWN0IGlzIGFuIGFycmF5CiAJCWlmICgocFN1YmluZGV4RW50cnlfcC0+bV9BY2Nlc3MgJiBrRXBsT2JkQWNjQXJyYXkpICE9IDApIHsKLQkJCSpwcFZhckVudHJ5X3AgPQotCQkJICAgICYoKHRFcGxPYmRWYXJFbnRyeSBNRU0gKikgcFN1YmluZGV4RW50cnlfcC0+Ci0JCQkgICAgICBtX3BDdXJyZW50KVtwU3ViaW5kZXhFbnRyeV9wLT5tX3VpU3ViSW5kZXggLSAxXTsKKwkJCSpwcFZhckVudHJ5X3AgPSAmKCh0RXBsT2JkVmFyRW50cnkgKilwU3ViaW5kZXhFbnRyeV9wLT5tX3BDdXJyZW50KVtwU3ViaW5kZXhFbnRyeV9wLT5tX3VpU3ViSW5kZXggLSAxXTsKIAkJfSBlbHNlIHsKLQkJCSpwcFZhckVudHJ5X3AgPQotCQkJICAgICh0RXBsT2JkVmFyRW50cnkgTUVNICopIHBTdWJpbmRleEVudHJ5X3AtPgotCQkJICAgIG1fcEN1cnJlbnQ7CisJCQkqcHBWYXJFbnRyeV9wID0gKHRFcGxPYmRWYXJFbnRyeSAqKXBTdWJpbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7CiAJCX0KIAogCQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKQEAgLTI0MjAsNyArMjM3OSw3IEBACiB7CiAKIAl0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CiAJdEVwbEtlcm5lbCBSZXQ7CiAKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZApAQCAtMjQ3NCwxNiArMjQzMywxNiBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwU3ViSW5kZXhFbnRyeV9wCiAvLwotLy8gUmV0dXJuOiAgICAgIHZvaWQgTUVNKgorLy8gUmV0dXJuOiAgICAgIHZvaWQgKgogLy8KIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB2b2lkIE1FTSAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCkKK3N0YXRpYyB2b2lkICpFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViSW5kZXhFbnRyeV9wKQogewogCi0Jdm9pZCBNRU0gKnBEYXRhOworCXZvaWQgKnBEYXRhOwogCXVuc2lnbmVkIGludCB1aUFycmF5SW5kZXg7CiAJdEVwbE9iZFNpemUgU2l6ZTsKIApAQCAtMjUwMCwyNCArMjQ1OSwyMSBAQAogCQkJfSBlbHNlIHsKIAkJCQlTaXplID0gRXBsT2JkR2V0T2JqZWN0U2l6ZShwU3ViSW5kZXhFbnRyeV9wKTsKIAkJCX0KLQkJCXBEYXRhID0gKChCWVRFIE1FTSAqKSBwRGF0YSkgKyAoU2l6ZSAqIHVpQXJyYXlJbmRleCk7CisJCQlwRGF0YSA9ICgodTggKikgcERhdGEpICsgKFNpemUgKiB1aUFycmF5SW5kZXgpOwogCQl9CiAJCS8vIGNoZWNrIGlmIFZhckVudHJ5CiAJCWlmICgocFN1YkluZGV4RW50cnlfcC0+bV9BY2Nlc3MgJiBrRXBsT2JkQWNjVmFyKSAhPSAwKSB7CiAJCQkvLyBUaGUgZGF0YSBwb2ludGVyIGlzIHN0b3JlZCBpbiBWYXJFbnRyeS0+cERhdGEKLQkJCXBEYXRhID0gKCh0RXBsT2JkVmFyRW50cnkgTUVNICopIHBEYXRhKS0+bV9wRGF0YTsKKwkJCXBEYXRhID0gKCh0RXBsT2JkVmFyRW50cnkgKikgcERhdGEpLT5tX3BEYXRhOwogCQl9CiAJCS8vIHRoZSBkZWZhdWx0IHBvaW50ZXIgaXMgc3RvcmVkIGZvciBzdHJpbmdzIGluIHRFcGxPYmRWU3RyaW5nCiAJCWVsc2UgaWYgKChwU3ViSW5kZXhFbnRyeV9wLT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpCS8qIHx8CiAJCQkJCQkJCQkJICAgKHBTdWJJbmRleEVudHJ5X3AtPm1fVHlwZSA9PSBrRXBsT2JkVHlwVVN0cmluZykgICAgKi8KIAkJCSApIHsKLQkJCXBEYXRhID0KLQkJCSAgICAodm9pZCBNRU0gKikoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwRGF0YSktPgotCQkJICAgIG1fcFN0cmluZzsKKwkJCXBEYXRhID0gKHZvaWQgKikoKHRFcGxPYmRWU3RyaW5nICopcERhdGEpLT5tX3BTdHJpbmc7CiAJCX0gZWxzZSBpZiAocFN1YkluZGV4RW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBPU3RyaW5nKSB7CiAJCQlwRGF0YSA9Ci0JCQkgICAgKHZvaWQgTUVNICopKCh0RXBsT2JkT1N0cmluZyBNRU0gKikgcERhdGEpLT4KLQkJCSAgICBtX3BTdHJpbmc7CisJCQkgICAgKHZvaWQgKikoKHRFcGxPYmRPU3RyaW5nICopcERhdGEpLT5tX3BTdHJpbmc7CiAJCX0KIAl9CiAKQEAgLTI1NDEsNyArMjQ5Nyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkR2V0SW5kZXhJbnRlcm4odEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRHZXRJbmRleEludGVybih0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCiAJCQkJICAgICAgIHRFcGxPYmRFbnRyeVB0ciAqIHBwT2JkRW50cnlfcCkKIHsKQEAgLTI3NjIsOSArMjcxOCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsT2JkU2V0U3RvcmVMb2FkT2JqQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCSAgICAgIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApCit0RXBsS2VybmVsIEVwbE9iZFNldFN0b3JlTG9hZE9iakNhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApCiB7CiAKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC0yODAyLDI2ICsyNzU2LDI2IEBACiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJJbmRleDsKIAl1bnNpZ25lZCBpbnQgblN1YkluZGV4Q291bnQ7CiAJdEVwbE9iZEFjY2VzcyBBY2Nlc3M7Ci0Jdm9pZCBNRU0gKnBEc3REYXRhOworCXZvaWQgKnBEc3REYXRhOwogCXZvaWQgKnBEZWZhdWx0OwogCXRFcGxPYmRTaXplIE9ialNpemU7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JdEVwbE9iZENiU3RvcmVQYXJhbSBNRU0gQ2JTdG9yZTsKLQl0RXBsT2JkVmFyRW50cnkgTUVNICpwVmFyRW50cnk7CisJdEVwbE9iZENiU3RvcmVQYXJhbSBDYlN0b3JlOworCXRFcGxPYmRWYXJFbnRyeSAqcFZhckVudHJ5OwogCiAJQVNTRVJUKHBPYmRFbnR5X3AgIT0gTlVMTCk7CiAKIAlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAogCS8vIHByZXBhcmUgc3RydWN0dXJlIGZvciBTVE9SRSBSRVNUT1JFIGNhbGxiYWNrIGZ1bmN0aW9uCi0JQ2JTdG9yZS5tX2JDdXJyZW50T2RQYXJ0ID0gKEJZVEUpIEN1cnJlbnRPZFBhcnRfcDsKKwlDYlN0b3JlLm1fYkN1cnJlbnRPZFBhcnQgPSAodTgpIEN1cnJlbnRPZFBhcnRfcDsKIAlDYlN0b3JlLm1fcERhdGEgPSBOVUxMOwogCUNiU3RvcmUubV9PYmpTaXplID0gMDsKIAogCS8vIGNvbW1hbmQgb2YgZmlyc3QgYWN0aW9uIGRlcGVuZHMgb24gZGlyZWN0aW9uIHRvIGFjY2VzcwogI2lmIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogCWlmIChEaXJlY3Rpb25fcCA9PSBrRXBsT2JkRGlyTG9hZCkgewotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1PcGVuUmVhZDsKKwkJQ2JTdG9yZS5tX2JDb21tYW5kID0gKHU4KSBrRXBsT2JkQ29tbU9wZW5SZWFkOwogCiAJCS8vIGNhbGwgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHByZXZpb3VzIGNvbW1hbmQKIAkJUmV0ID0gRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19JTlNUQU5DRV9QVFJfICYgQ2JTdG9yZSk7CkBAIC0yODI5LDkgKzI3ODMsOSBAQAogCQkJZ290byBFeGl0OwogCQl9CiAJCS8vIHNldCBjb21tYW5kIGZvciBpbmRleCBhbmQgc3ViaW5kZXggbG9vcAotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1SZWFkT2JqOworCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tUmVhZE9iajsKIAl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJTdG9yZSkgewotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1PcGVuV3JpdGU7CisJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1PcGVuV3JpdGU7CiAKIAkJLy8gY2FsbCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcHJldmlvdXMgY29tbWFuZAogCQlSZXQgPSBFcGxPYmRDYWxsU3RvcmVDYWxsYmFjayhFUExfTUNPX0lOU1RBTkNFX1BUUl8gJiBDYlN0b3JlKTsKQEAgLTI4MzksNyArMjc5Myw3IEBACiAJCQlnb3RvIEV4aXQ7CiAJCX0KIAkJLy8gc2V0IGNvbW1hbmQgZm9yIGluZGV4IGFuZCBzdWJpbmRleCBsb29wCi0JCUNiU3RvcmUubV9iQ29tbWFuZCA9IChCWVRFKSBrRXBsT2JkQ29tbVdyaXRlT2JqOworCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tV3JpdGVPYmo7CiAJfQogI2VuZGlmIC8vIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogCkBAIC0yODkwLDcgKzI4NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcGxPYmRJbml0VmFyRW50cnkgKCh0RXBsT2JkVmFyRW50cnkgTUVNKikgKCgoQllURSBNRU0qKSBwU3ViSW5kZXgtPm1fcEN1cnJlbnQpICsgKHNpemVvZiAodEVwbE9iZFZhckVudHJ5KSAqIHBTdWJJbmRleC0+bV91aVN1YkluZGV4KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVwbE9iZEluaXRWYXJFbnRyeSAoKHRFcGxPYmRWYXJFbnRyeSAqKSAoKCh1OCAqKSBwU3ViSW5kZXgtPm1fcEN1cnJlbnQpICsgKHNpemVvZiAodEVwbE9iZFZhckVudHJ5KSAqIHBTdWJJbmRleC0+bV91aVN1YkluZGV4KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3ViSW5kZXgtPm1fVHlwZSwgT2JqU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogKi8KQEAgLTI5MTEsMjkgKzI4NjUsMTcgQEAKIAkJCQkJCSAgICBwU3ViSW5kZXgtPm1fcEN1cnJlbnQ7CiAJCQkJCQlpZiAocERzdERhdGEgIT0gTlVMTCkgewogCQkJCQkJCS8vIDA4LWRlYy0yMDA0OiBjb2RlIG9wdGltaXphdGlvbiAhISEKLQkJCQkJCQkvLyAgICAgICAgICAgICAgZW50cmllcyAoKHRFcGxPYmRWU3RyaW5nRGVmIFJPTSopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fcFN0cmluZwotCQkJCQkJCS8vICAgICAgICAgICAgICBhbmQgKCh0RXBsT2JkVlN0cmluZ0RlZiBST00qKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemUgd2VyZSByZWFkCisJCQkJCQkJLy8gICAgICAgICAgICAgIGVudHJpZXMgKCh0RXBsT2JkVlN0cmluZ0RlZiopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fcFN0cmluZworCQkJCQkJCS8vICAgICAgICAgICAgICBhbmQgKCh0RXBsT2JkVlN0cmluZ0RlZiopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fU2l6ZSB3ZXJlIHJlYWQKIAkJCQkJCQkvLyAgICAgICAgICAgICAgdHdpY2UuIHRoYXRzIG5vdCBuZWNlc3NhcnkhCiAKIAkJCQkJCQkvLyBGb3IgY29weWluZyBkYXRhIHdlIGhhdmUgdG8gc2V0IHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIHRvIHRoZSByZWFsIFJBTSBzdHJpbmcuIFRoaXMKIAkJCQkJCQkvLyBwb2ludGVyIHRvIFJBTSBzdHJpbmcgaXMgbG9jYXRlZCBpbiBkZWZhdWx0IHN0cmluZyBpbmZvIHN0cnVjdHVyZS4gKHRyYW5zbGF0ZWQgci5kLikKLQkJCQkJCQlwRHN0RGF0YSA9Ci0JCQkJCQkJICAgICh2b2lkIE1FTQotCQkJCQkJCSAgICAgKikoKHRFcGxPYmRWU3RyaW5nRGVmIFJPTSAqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmc7Ci0JCQkJCQkJT2JqU2l6ZSA9Ci0JCQkJCQkJICAgICgodEVwbE9iZFZTdHJpbmdEZWYKLQkJCQkJCQkgICAgICBST00gKikgcFN1YkluZGV4LT4KLQkJCQkJCQkgICAgIG1fcERlZmF1bHQpLT4KLQkJCQkJCQkgICAgbV9TaXplOworCQkJCQkJCXBEc3REYXRhID0gKHZvaWQgKikoKHRFcGxPYmRWU3RyaW5nRGVmKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9wU3RyaW5nOworCQkJCQkJCU9ialNpemUgPSAoKHRFcGxPYmRWU3RyaW5nRGVmICopcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9TaXplOwogCi0JCQkJCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikKLQkJCQkJCQkgcFN1YkluZGV4LT4KLQkJCQkJCQkgbV9wQ3VycmVudCktPgotCQkJCSAgICAgbV9wU3RyaW5nID0gcERzdERhdGE7Ci0JCQkJCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikKLQkJCQkJCQkgcFN1YkluZGV4LT4KLQkJCQkJCQkgbV9wQ3VycmVudCktPm1fU2l6ZSA9Ci0JCQkJICAgICBPYmpTaXplOworCQkJCQkJCSgodEVwbE9iZFZTdHJpbmcgKilwU3ViSW5kZXgtPm1fcEN1cnJlbnQpLT5tX3BTdHJpbmcgPSBwRHN0RGF0YTsKKwkJCQkJCQkoKHRFcGxPYmRWU3RyaW5nICopcFN1YkluZGV4LT5tX3BDdXJyZW50KS0+bV9TaXplID0gT2JqU2l6ZTsKIAkJCQkJCX0KIAogCQkJCQl9IGVsc2UgaWYgKHBTdWJJbmRleC0+bV9UeXBlID09CkBAIC0yOTQyLDI5ICsyODg0LDE3IEBACiAJCQkJCQkgICAgcFN1YkluZGV4LT5tX3BDdXJyZW50OwogCQkJCQkJaWYgKHBEc3REYXRhICE9IE5VTEwpIHsKIAkJCQkJCQkvLyAwOC1kZWMtMjAwNDogY29kZSBvcHRpbWl6YXRpb24gISEhCi0JCQkJCQkJLy8gICAgICAgICAgICAgIGVudHJpZXMgKCh0RXBsT2JkT1N0cmluZ0RlZiBST00qKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmcKLQkJCQkJCQkvLyAgICAgICAgICAgICAgYW5kICgodEVwbE9iZE9TdHJpbmdEZWYgUk9NKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9TaXplIHdlcmUgcmVhZAorCQkJCQkJCS8vICAgICAgICAgICAgICBlbnRyaWVzICgodEVwbE9iZE9TdHJpbmdEZWYqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmcKKwkJCQkJCQkvLyAgICAgICAgICAgICAgYW5kICgodEVwbE9iZE9TdHJpbmdEZWYqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemUgd2VyZSByZWFkCiAJCQkJCQkJLy8gICAgICAgICAgICAgIHR3aWNlLiB0aGF0cyBub3QgbmVjZXNzYXJ5IQogCiAJCQkJCQkJLy8gRm9yIGNvcHlpbmcgZGF0YSB3ZSBoYXZlIHRvIHNldCB0aGUgZGVzdGluYXRpb24gcG9pbnRlciB0byB0aGUgcmVhbCBSQU0gc3RyaW5nLiBUaGlzCiAJCQkJCQkJLy8gcG9pbnRlciB0byBSQU0gc3RyaW5nIGlzIGxvY2F0ZWQgaW4gZGVmYXVsdCBzdHJpbmcgaW5mbyBzdHJ1Y3R1cmUuICh0cmFuc2xhdGVkIHIuZC4pCi0JCQkJCQkJcERzdERhdGEgPQotCQkJCQkJCSAgICAodm9pZCBNRU0KLQkJCQkJCQkgICAgICopKCh0RXBsT2JkT1N0cmluZ0RlZiBST00gKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9wU3RyaW5nOwotCQkJCQkJCU9ialNpemUgPQotCQkJCQkJCSAgICAoKHRFcGxPYmRPU3RyaW5nRGVmCi0JCQkJCQkJICAgICAgUk9NICopIHBTdWJJbmRleC0+Ci0JCQkJCQkJICAgICBtX3BEZWZhdWx0KS0+Ci0JCQkJCQkJICAgIG1fU2l6ZTsKKwkJCQkJCQlwRHN0RGF0YSA9ICh2b2lkICopKCh0RXBsT2JkT1N0cmluZ0RlZiAqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmc7CisJCQkJCQkJT2JqU2l6ZSA9ICgodEVwbE9iZE9TdHJpbmdEZWYgKilwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemU7CiAKLQkJCQkJCQkoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKQotCQkJCQkJCSBwU3ViSW5kZXgtPgotCQkJCQkJCSBtX3BDdXJyZW50KS0+Ci0JCQkJICAgICBtX3BTdHJpbmcgPSBwRHN0RGF0YTsKLQkJCQkJCQkoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKQotCQkJCQkJCSBwU3ViSW5kZXgtPgotCQkJCQkJCSBtX3BDdXJyZW50KS0+bV9TaXplID0KLQkJCQkgICAgIE9ialNpemU7CisJCQkJCQkJKCh0RXBsT2JkT1N0cmluZyAqKXBTdWJJbmRleC0+bV9wQ3VycmVudCktPm1fcFN0cmluZyA9IHBEc3REYXRhOworCQkJCQkJCSgodEVwbE9iZE9TdHJpbmcgKilwU3ViSW5kZXgtPm1fcEN1cnJlbnQpLT5tX1NpemUgPSBPYmpTaXplOwogCQkJCQkJfQogCiAJCQkJCX0KQEAgLTMwNjksMTEgKzI5OTksMTEgQEAKICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAllbHNlIHsKIAkJaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJMb2FkKSB7Ci0JCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1DbG9zZVJlYWQ7CisJCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tQ2xvc2VSZWFkOwogCQl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJTdG9yZSkgewotCQkJQ2JTdG9yZS5tX2JDb21tYW5kID0gKEJZVEUpIGtFcGxPYmRDb21tQ2xvc2VXcml0ZTsKKwkJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1DbG9zZVdyaXRlOwogCQl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJSZXN0b3JlKSB7Ci0JCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1DbGVhcjsKKwkJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1DbGVhcjsKIAkJfSBlbHNlIHsKIAkJCWdvdG8gRXhpdDsKIAkJfQpAQCAtMzEwNCw3ICszMDM0LDcgQEAKIC8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCBNRU0gKiBwRHN0RGF0YV9wLAorc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCAqcERzdERhdGFfcCwKIAkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKIAkJCQkgdEVwbE9iZFNpemUgT2JqU2l6ZV9wLCB0RXBsT2JkVHlwZSBPYmpUeXBlX3ApCiB7CkBAIC0zMTM1LDcgKzMwNjUsNyBAQAogCQkJRVBMX01FTUNQWShwRHN0RGF0YV9wLCBwU3JjRGF0YV9wLCBPYmpTaXplX3ApOwogCiAJCQlpZiAoT2JqVHlwZV9wID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7Ci0JCQkJKChjaGFyIE1FTSAqKXBEc3REYXRhX3ApW1N0clNpemVdID0gJ1wwJzsKKwkJCQkoKGNoYXIgKilwRHN0RGF0YV9wKVtTdHJTaXplXSA9ICdcMCc7CiAJCQl9CiAJCX0KIAl9CkBAIC0zMTk2LDcgKzMxMjYsNyBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICB0RXBsT2JkQ2JTdG9yZVBhcmFtIE1FTSAqCisJCQkJCSAgdEVwbE9iZENiU3RvcmVQYXJhbSAqCiAJCQkJCSAgcENiU3RvcmVQYXJhbV9wKQogewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmQuaAppbmRleCA4OGNjMTFlLi42YmI1YTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkLmgKQEAgLTY4LDExICs2OCwxMSBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiRXBsSW5jLmgiCi0KICNpZm5kZWYgX0VQTE9CRF9IXwogI2RlZmluZSBfRVBMT0JEX0hfCiAKKyNpbmNsdWRlICJFcGxJbmMuaCIKKwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gZGVmaW5lcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjA2LDcgKzIwNiw3IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIHR5cGVzIG9mIG9iamVjdHMgaW4gb2JqZWN0IGRpY3Rpb25hcnkKLS8vIERTLTMwMSBkZWZpbmVzIHRoZXNlIHR5cGVzIGFzIFdPUkQKKy8vIERTLTMwMSBkZWZpbmVzIHRoZXNlIHR5cGVzIGFzIHUxNgogdHlwZWRlZiBlbnVtIHsKIC8vIHR5cGVzIHdoaWNoIGFyZSBhbHdheXMgc3VwcG9ydGVkCiAJa0VwbE9iZFR5cEJvb2wgPSAweDAwMDEsCkBAIC0yNTUsMTUgKzI1NSwxNSBAQAogdHlwZWRlZiBzaWduZWQgbG9uZyB0RXBsT2JkSW50ZWdlcjI0OwkvLyAwMDEwCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdEVwbE9iZFVuc2lnbmVkMjQ7CS8vIDAwMTYKIAotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI0MDsJLy8gMDAxMgotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI0ODsJLy8gMDAxMwotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI1NjsJLy8gMDAxNAotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI2NDsJLy8gMDAxNQordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI0MDsJLy8gMDAxMgordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI0ODsJLy8gMDAxMwordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI1NjsJLy8gMDAxNAordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI2NDsJLy8gMDAxNQogCi10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDQwOwkvLyAwMDE4Ci10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDQ4OwkvLyAwMDE5Ci10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDU2OwkvLyAwMDFBCi10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDY0OwkvLyAwMDFCCit0eXBlZGVmIHU2NCB0RXBsT2JkVW5zaWduZWQ0MDsJLy8gMDAxOAordHlwZWRlZiB1NjQgdEVwbE9iZFVuc2lnbmVkNDg7CS8vIDAwMTkKK3R5cGVkZWYgdTY0IHRFcGxPYmRVbnNpZ25lZDU2OwkvLyAwMDFBCit0eXBlZGVmIHU2NCB0RXBsT2JkVW5zaWduZWQ2NDsJLy8gMDAxQgogCiB0eXBlZGVmIGRvdWJsZSB0RXBsT2JkUmVhbDY0OwkvLyAwMDExCiAKQEAgLTI4MywyMiArMjgzLDIxIEBACiAJa1ZhclZhbGlkQWxsID0gMHgwMwkvLyBjdXJyZW50bHkgb25seSBzaXplIGFuZCBkYXRhIGFyZSBpbXBsZW1lbnRlZCBhbmQgdXNlZAogfSB0RXBsVmFyUGFyYW1WYWxpZDsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0RXBsVmFyQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgIHZvaWQgKnBQYXJhbV9wKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbFZhckNhbGxiYWNrKSAoQ0NNX0RFQ0xfSU5TVEFOQ0VfSERMXyB2b2lkICpwUGFyYW1fcCk7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsVmFyUGFyYW1WYWxpZCBtX1ZhbGlkRmxhZzsKIAl1bnNpZ25lZCBpbnQgbV91aUluZGV4OwogCXVuc2lnbmVkIGludCBtX3VpU3ViaW5kZXg7CiAJdEVwbE9iZFNpemUgbV9TaXplOwotCXZvaWQgTUVNICptX3BEYXRhOworCXZvaWQgKm1fcERhdGE7CiAvLyAgICB0RXBsVmFyQ2FsbGJhY2sgICAgIG1fZnBDYWxsYmFjazsKIC8vICAgIHZvaWQgKiAgICAgICBtX3BBcmc7CiAKIH0gdEVwbFZhclBhcmFtOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0Jdm9pZCBNRU0gKm1fcERhdGE7CisJdm9pZCAqbV9wRGF0YTsKIAl0RXBsT2JkU2l6ZSBtX1NpemU7CiAvKgogICAgICNpZiAoRVBMX1BET19VU0VfU1RBVElDX01BUFBJTkcgPT0gRkFMU0UpCkBAIC0zMTAsNyArMzA5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXRFcGxPYmRTaXplIG1fU2l6ZTsKLQlCWVRFICptX3BTdHJpbmc7CisJdTggKm1fcFN0cmluZzsKIAogfSB0RXBsT2JkT1N0cmluZzsJCS8vIDAwMEMKIApAQCAtMzI4LDggKzMyNyw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsT2JkU2l6ZSBtX1NpemU7Ci0JQllURSAqbV9wRGVmU3RyaW5nOwkvLyAkJCQgZC5rLiBpdCBpcyB1bnVzZWQsIHNvIHdlIGNvdWxkIGRlbGV0ZSBpdAotCUJZVEUgKm1fcFN0cmluZzsKKwl1OCAqbV9wRGVmU3RyaW5nOwkvLyAkJCQgZC5rLiBpdCBpcyB1bnVzZWQsIHNvIHdlIGNvdWxkIGRlbGV0ZSBpdAorCXU4ICptX3BTdHJpbmc7CiAKIH0gdEVwbE9iZE9TdHJpbmdEZWY7CiAKQEAgLTM1NCw3ICszNTMsNyBAQAogCXRFcGxPYmRUeXBlIG1fVHlwZTsKIAl0RXBsT2JkQWNjZXNzIG1fQWNjZXNzOwogCXZvaWQgKm1fcERlZmF1bHQ7Ci0Jdm9pZCBNRU0gKm1fcEN1cnJlbnQ7CS8vIHBvaW50cyBhbHdheXMgdG8gUkFNCisJdm9pZCAqbV9wQ3VycmVudDsJLy8gcG9pbnRzIGFsd2F5cyB0byBSQU0KIAogfSB0RXBsT2JkU3ViRW50cnk7CiAKQEAgLTM3MSwxNCArMzcwLDEyIEBACiAJdW5zaWduZWQgaW50IG1fdWlJbmRleDsKIAl1bnNpZ25lZCBpbnQgbV91aVN1YkluZGV4OwogCXZvaWQgKm1fcEFyZzsKLQlEV09SRCBtX2R3QWJvcnRDb2RlOworCXUzMiBtX2R3QWJvcnRDb2RlOwogCiB9IHRFcGxPYmRDYlBhcmFtOwogCiAvLyBkZWZpbmUgdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb246IHBQYXJhbV9wIHBvaW50cyB0byB0RXBsT2JkQ2JQYXJhbQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0RXBsT2JkQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgIHRFcGxPYmRDYlBhcmFtIE1FTSAqCi0JCQkJCQkgIHBQYXJhbV9wKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbE9iZENhbGxiYWNrKSAoQ0NNX0RFQ0xfSU5TVEFOQ0VfSERMXyB0RXBsT2JkQ2JQYXJhbSAqcFBhcmFtX3ApOwogCiAvLyBkbyBub3QgY2hhbmdlIHRoZSBvcmRlciBmb3IgdGhpcyBzdHJ1Y3QhISEKIApAQCAtNDE3LDE5ICs0MTQsMTQgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsT2JkQ29tbWFuZCBtX2JDb21tYW5kOwogCXRFcGxPYmRQYXJ0IG1fYkN1cnJlbnRPZFBhcnQ7Ci0Jdm9pZCBNRU0gKm1fcERhdGE7CisJdm9pZCAqbV9wRGF0YTsKIAl0RXBsT2JkU2l6ZSBtX09ialNpemU7CiAKIH0gdEVwbE9iZENiU3RvcmVQYXJhbTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0SW5pdFRhYkVudHJ5Q2FsbGJhY2spICh2b2lkIE1FTSAqIHBUYWJFbnRyeV9wLAotCQkJCQkJCXVuc2lnbmVkIGludAotCQkJCQkJCXVpT2JqSW5kZXhfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRJbml0VGFiRW50cnlDYWxsYmFjaykgKHZvaWQgKnBUYWJFbnRyeV9wLCB1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKgotCQkgICB0RXBsT2JkU3RvcmVMb2FkT2JqQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgdEVwbE9iZENiU3RvcmVQYXJhbSBNRU0gKgotCQkJCQkJIHBDYlN0b3JlUGFyYW1fcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjaykgKENDTV9ERUNMX0lOU1RBTkNFX0hETF8gdEVwbE9iZENiU3RvcmVQYXJhbSAqcENiU3RvcmVQYXJhbV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhpcyBzdHVjdHVyZSBpcyB1c2VkIGZvciBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbiBPYmRJbml0TW9kdWxlVGFiKCkKQEAgLTQzOCw4ICs0MzAsOCBAQAogCXVuc2lnbmVkIGludCBtX3VpTG93ZXJPYmpJbmRleDsJLy8gbG93ZXIgbGltaXQgb2YgT2JqSW5kZXgKIAl1bnNpZ25lZCBpbnQgbV91aVVwcGVyT2JqSW5kZXg7CS8vIHVwcGVyIGxpbWl0IG9mIE9iakluZGV4CiAJdEluaXRUYWJFbnRyeUNhbGxiYWNrIG1fZnBJbml0VGFiRW50cnk7CS8vIHdpbGwgYmUgY2FsbGVkIGlmIE9iakluZGV4IHdhcyBmb3VuZAotCXZvaWQgTUVNICptX3BUYWJCYXNlOwkvLyBiYXNlIGFkZHJlc3Mgb2YgdGFibGUKLQl1bnNpZ25lZCBpbnQgbV91aUVudHJ5U2l6ZTsJLy8gc2l6ZSBvZiB0YWJsZSBlbnRyeSAgICAgIC8vIDI1LWZlYi0yMDA1IHIuZC46IGV4cGFuc2lvbiBmcm9tIEJZVEUgdG8gV09SRCBuZWNlc3NhcnkgZm9yIFBETyBiaXQgbWFwcGluZworCXZvaWQgKm1fcFRhYkJhc2U7CS8vIGJhc2UgYWRkcmVzcyBvZiB0YWJsZQorCXVuc2lnbmVkIGludCBtX3VpRW50cnlTaXplOwkvLyBzaXplIG9mIHRhYmxlIGVudHJ5ICAgICAgLy8gMjUtZmViLTIwMDUgci5kLjogZXhwYW5zaW9uIGZyb20gdTggdG8gdTE2IG5lY2Vzc2FyeSBmb3IgUERPIGJpdCBtYXBwaW5nCiAJdW5zaWduZWQgaW50IG1fdWlNYXhFbnRyaWVzOwkvLyBtYXguIHRhYmVsIGVudHJpZXMKIAogfSB0RXBsT2JkTW9kdWxUYWJQYXJhbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkTWFjcm8uaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkTWFjcm8uaAppbmRleCAyM2YyYWQ4Li5mYzMyNWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZE1hY3JvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRNYWNyby5oCkBAIC04MCw3ICs4MCw3IEBACiAKIC8vICAgICAgICAjcHJhZ21hIG1lc3NhZ2UgKCJFUExfT0JEX0NSRUFURV9ST01fREFUQSIpCiAKLSNkZWZpbmUgRVBMX09CRF9CRUdJTigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljICBEV09SRCAgZHdPYmRfT0JLX2cgPSAweDAwMDA7CisjZGVmaW5lIEVQTF9PQkRfQkVHSU4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdTMyICBkd09iZF9PQktfZyA9IDB4MDAwMDsKICNkZWZpbmUgRVBMX09CRF9FTkQoKQogCiAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMiwxMSArMTAyLDExIEBACiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyAgZHR5cCAgeERlZiMjaW5kIyNfIyNzdWIjI19nICAgICAgICA9IHZhbDsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljICBkdHlwICB4RGVmIyNpbmQjI18jI3N1YiMjX2dbM10gICAgID0ge3ZhbCxsb3csaGlnaH07CiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUl9OT0lOSVQoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSkKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVlNUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUsdmFsKSAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgIE1FTSBzekN1ciMjaW5kIyNfIyNzdWIjI19nW3NpemUrMV07IFwKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVlNUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUsdmFsKSAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgIHN6Q3VyIyNpbmQjI18jI3N1YiMjX2dbc2l6ZSsxXTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdEVwbE9iZFZTdHJpbmdEZWYgIHhEZWYjI2luZCMjXyMjc3ViIyNfZyA9IHtzaXplLCB2YWwsIHN6Q3VyIyNpbmQjI18jI3N1YiMjX2d9OwogCi0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX09TVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplKSAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgQllURSAgTUVNIGJDdXIjI2luZCMjXyMjc3ViIyNfZ1tzaXplXTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdEVwbE9iZE9TdHJpbmdEZWYgIHhEZWYjI2luZCMjXyMjc3ViIyNfZyA9IHtzaXplLCAoKEJZVEUqKSIiKSwgYkN1ciMjaW5kIyNfIyNzdWIjI19nfTsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fT1NUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUpICAgICAgICAgICAgICAgICAgICAgc3RhdGljICB1OCAgYkN1ciMjaW5kIyNfIyNzdWIjI19nW3NpemVdOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljICB0RXBsT2JkT1N0cmluZ0RlZiAgeERlZiMjaW5kIyNfIyNzdWIjI19nID0ge3NpemUsICgodTgqKSIiKSwgYkN1ciMjaW5kIyNfIyNzdWIjI19nfTsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fRE9NQUlOKGluZCxzdWIsYWNjLG5hbWUpCiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1VTRVJERUYoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSx2YWwpICAgICAgICAgICAgIHN0YXRpYyAgZHR5cCAgeERlZiMjaW5kIyNfIyNzdWIjI19nICAgICAgICA9IHZhbDsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVVNFUkRFRl9SRyhpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCxsb3csaGlnaCkgc3RhdGljICBkdHlwICB4RGVmIyNpbmQjI18jI3N1YiMjX2dbM10gICAgID0ge3ZhbCxsb3csaGlnaH07CkBAIC0xMjksMjAgKzEyOSwyMCBAQAogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjZGVmaW5lIEVQTF9PQkRfQkVHSU5fSU5ERVhfUkFNKGluZCxjbnQsY2FsbCkKICNkZWZpbmUgRVBMX09CRF9FTkRfSU5ERVgoaW5kKQotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICAgICBzdGF0aWMgZHR5cCAgICAgICAgIE1FTSBheEN1ciMjaW5kIyNfZ1tjbnRdOwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fVkFSQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKLSNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZX05PSU5JVChpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUpICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBNRU0gYVZhckVudHJ5IyNpbmQjI19nW2NudF07CisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9BUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgICAgIHN0YXRpYyBkdHlwICAgICAgICAgYXhDdXIjI2luZCMjX2dbY250XTsKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSxkZWYpICAgICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZX05PSU5JVChpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUpICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKIAogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyBkdHlwICAgICAgICAgTUVNIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljIGR0eXAgICAgICAgICBNRU0geEN1ciMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9WU1RSSU5HKGluZCxzdWIsYWNjLG5hbWUsc2l6ZSx2YWwpICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZTdHJpbmcgIE1FTSB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7Ci0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX09TVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplKSAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkT1N0cmluZyAgTUVNIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICAgICAgc3RhdGljIGR0eXAgICAgICAgICBNRU0geEN1ciMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9ET01BSU4oaW5kLHN1YixhY2MsbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsKSAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9WQVIoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSx2YWwpICAgICAgICAgICAgICAgICBzdGF0aWMgZHR5cCAgICAgICAgIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljIGR0eXAgICAgICAgICB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZTVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVlN0cmluZyAgeEN1ciMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9PU1RSSU5HKGluZCxzdWIsYWNjLG5hbWUsc2l6ZSkgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZE9TdHJpbmcgIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICAgICAgc3RhdGljIGR0eXAgICAgICAgICB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX0RPTUFJTihpbmQsc3ViLGFjYyxuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVmFyRW50cnkgVmFyRW50cnkjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVVNFUkRFRihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IFZhckVudHJ5IyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1VTRVJERUZfTk9JTklUKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUpICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVmFyRW50cnkgVmFyRW50cnkjI2luZCMjXyMjc3ViIyNfZzsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2VsaWYgZGVmaW5lZCAoRVBMX09CRF9DUkVBVEVfU1VCSU5ERVhfVEFCKQpAQCAtMTU5LDE3ICsxNTksMTcgQEAKICNkZWZpbmUgRVBMX09CRF9FTkRfUEFSVCgpCiAKIAkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2RlZmluZSBFUExfT0JEX0JFR0lOX0lOREVYX1JBTShpbmQsY250LGNhbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbY250XT0geworI2RlZmluZSBFUExfT0JEX0JFR0lOX0lOREVYX1JBTShpbmQsY250LGNhbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IGFPYmRTdWJFbnRyeSMjaW5kIyNSYW1fZ1tjbnRdPSB7CiAjZGVmaW5lIEVQTF9PQkRfRU5EX0lOREVYKGluZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVQTF9PQkRfRU5EX1NVQklOREVYKCl9OwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9BUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgICAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgYU9iZFN1YkVudHJ5IyNpbmQjI1JhbV9nW109IHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswLCBrRXBsT2JkVHlwVUludDgsIGtFcGxPYmRBY2NDUiwgICAgICAgICAgJnhEZWYjI2luZCMjXzB4MDBfZywgICBOVUxMfSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLCB0eXAsICAgICAgICAgIChhY2MpfGtFcGxPYmRBY2NBcnJheSwgJnhEZWYjI2luZCMjXzB4MDFfZywgICAmYXhDdXIjI2luZCMjX2dbMF19LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVBMX09CRF9FTkRfU1VCSU5ERVgoKX07Ci0jZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9WQVJBUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgTUVNIGFPYmRTdWJFbnRyeSMjaW5kIyNSYW1fZ1tdPSB7IFwKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSxkZWYpICAgICAgc3RhdGljIHRFcGxPYmRTdWJFbnRyeSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezAsIGtFcGxPYmRUeXBVSW50OCwga0VwbE9iZEFjY0NSLCAgICAgICAgICAgICAgICAgICAgICZ4RGVmIyNpbmQjI18weDAwX2csICAgTlVMTH0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwgdHlwLCAgICAgICAgICAoYWNjKXxrRXBsT2JkQWNjQXJyYXl8a0VwbE9iZEFjY1ZhciwgJnhEZWYjI2luZCMjXzB4MDFfZywgICAmYVZhckVudHJ5IyNpbmQjI19nWzBdfSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVQTF9PQkRfRU5EX1NVQklOREVYKCl9OwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fVkFSQVJSQVlfTk9JTklUKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSkgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9WQVJBUlJBWV9OT0lOSVQoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lKSAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgYU9iZFN1YkVudHJ5IyNpbmQjI1JhbV9nW109IHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswLCBrRXBsT2JkVHlwVUludDgsIGtFcGxPYmRBY2NDUiwgICAgICAgICAgICAgICAgICAgICAmeERlZiMjaW5kIyNfMHgwMF9nLCAgIE5VTEx9LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsIHR5cCwgICAgICAgICAgKGFjYyl8a0VwbE9iZEFjY0FycmF5fGtFcGxPYmRBY2NWYXIsIE5VTEwsICAgICAgICAgICAgICAgICAgJmFWYXJFbnRyeSMjaW5kIyNfZ1swXX0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUExfT0JEX0VORF9TVUJJTkRFWCgpfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2Jka0NhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKaW5kZXggNGM5YWY4OS4uMDJiZDcyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKQEAgLTcwLDcgKzcwLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJFcGxJbmMuaCIKLSNpbmNsdWRlICJrZXJuZWwvRXBsT2Jka0NhbC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkdS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKaW5kZXggMjE4ZDE1Mi4uNWYxZDk5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKQEAgLTEyMSwxMCArMTIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVdyaXRlRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1V3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLCB0RXBsT2JkU2l6ZSBTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE1MywxMCArMTUyLDEwIEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1UmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJICAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xNzksOCArMTc4LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUFjY2Vzc09kUGFydCh0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCi0JCQkJCQkgICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKQordEVwbEtlcm5lbCBFcGxPYmR1QWNjZXNzT2RQYXJ0KHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwgdEVwbE9iZERpciBEaXJlY3Rpb25fcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAyLDcgKzIwMCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVEZWZpbmVWYXIodEVwbFZhclBhcmFtIE1FTSAqIHBWYXJQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxPYmR1RGVmaW5lVmFyKHRFcGxWYXJQYXJhbSAqcFZhclBhcmFtX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIyNiw4ICsyMjQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB2b2lkICpQVUJMSUMgRXBsT2JkdUdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3ZvaWQgKkVwbE9iZHVHZXRPYmplY3REYXRhUHRyKHVuc2lnbmVkIGludCB1aUluZGV4X3AsIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdm9pZCAqcERhdGE7CiAKQEAgLTI1MCw3ICsyNDcsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgKGRlZmluZWQgKEVQTF9PQkRfVVNFUl9PRCkgJiYgKEVQTF9PQkRfVVNFUl9PRCAhPSBGQUxTRSkpCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVJlZ2lzdGVyVXNlck9kKHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCit0RXBsS2VybmVsIEVwbE9iZHVSZWdpc3RlclVzZXJPZCh0RXBsT2JkRW50cnlQdHIgcFVzZXJPZF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yNzUsOSArMjcyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCBQVUJMSUMgRXBsT2JkdUluaXRWYXJFbnRyeSh0RXBsT2JkVmFyRW50cnkgTUVNICogcFZhckVudHJ5X3AsCi0JCQkJCSAgICAgQllURSBiVHlwZV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCkKK3ZvaWQgRXBsT2JkdUluaXRWYXJFbnRyeSh0RXBsT2JkVmFyRW50cnkgKnBWYXJFbnRyeV9wLCB1OCBiVHlwZV9wLCB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApCiB7CiAJRXBsT2JkdUNhbEluaXRWYXJFbnRyeShwVmFyRW50cnlfcCwgYlR5cGVfcCwgT2JkU2l6ZV9wKTsKIH0KQEAgLTI5OSw4ICsyOTQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsT2JkU2l6ZSBQVUJMSUMgRXBsT2JkdUdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordEVwbE9iZFNpemUgRXBsT2JkdUdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdEVwbE9iZFNpemUgU2l6ZTsKIApAQCAtMzIzLDcgKzMxNyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHVuc2lnbmVkIGludCBQVUJMSUMgRXBsT2JkdUdldE5vZGVJZCgpCit1bnNpZ25lZCBpbnQgRXBsT2JkdUdldE5vZGVJZCh2b2lkKQogewogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKIApAQCAtMzQ3LDggKzM0MSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQl0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApCit0RXBsS2VybmVsIEVwbE9iZHVTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzczLDEwICszNjYsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1R2V0QWNjZXNzVHlwZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgdEVwbE9iZEFjY2VzcyAqCi0JCQkJCQkgICAgcEFjY2Vzc1R5cF9wKQordEVwbEtlcm5lbCBFcGxPYmR1R2V0QWNjZXNzVHlwZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdEVwbE9iZEFjY2VzcyAqcEFjY2Vzc1R5cF9wKQogewogCXRFcGxPYmRBY2Nlc3MgQWNjZXNzVHlwZTsKIApAQCAtNDEwLDEwICs0MDIsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1UmVhZEVudHJ5VG9MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdm9pZCAqcERzdERhdGFfcCwKKwkJCQl0RXBsT2JkU2l6ZSAqcFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtNDQ1LDExICs0MzcsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVdyaXRlRW50cnlGcm9tTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZHVXcml0ZUVudHJ5RnJvbUxlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgIHRFcGxPYmRTaXplIFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtNDc1LDExICs0NjYsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1U2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKLQkJCQkJCSAgICAgdEVwbE9iZFZhckVudHJ5IE1FTSAqKgotCQkJCQkJICAgICBwcFZhckVudHJ5X3ApCit0RXBsS2VybmVsIEVwbE9iZHVTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkdUNhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKaW5kZXggODViM2RmMC4uNTU2MTJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKQEAgLTEyMSwxMCArMTIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFdyaXRlRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkgICAgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsV3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xNTUsMTAgKzE1NCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLCB0RXBsT2JkU2l6ZSAqcFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTg1LDggKzE4Myw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLAotCQkJCQkJICAgICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCkKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEFjY2Vzc09kUGFydCh0RXBsT2JkUGFydCBPYmRQYXJ0X3AsIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIxMiw4ICsyMDksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsRGVmaW5lVmFyKHRFcGxWYXJQYXJhbSBNRU0gKgotCQkJCQkJICAgcFZhclBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxEZWZpbmVWYXIodEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjQwLDggKzIzNiw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgKlBVQkxJQyBFcGxPYmR1Q2FsR2V0T2JqZWN0RGF0YVB0cih1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordm9pZCAqRXBsT2JkdUNhbEdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl2b2lkICpwRGF0YTsKIApAQCAtMjY4LDggKzI2Myw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoZGVmaW5lZCAoRVBMX09CRF9VU0VSX09EKSAmJiAoRVBMX09CRF9VU0VSX09EICE9IEZBTFNFKSkKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyCi0JCQkJCQkJcFVzZXJPZF9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjk4LDkgKzI5Miw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZHVDYWxJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5IE1FTSAqCi0JCQkJCQlwVmFyRW50cnlfcCwgQllURSBiVHlwZV9wLAotCQkJCQkJdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQordm9pZCBFcGxPYmR1Q2FsSW5pdFZhckVudHJ5KHRFcGxPYmRWYXJFbnRyeSAqcFZhckVudHJ5X3AsIHU4IGJUeXBlX3AsCisJCQkgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQogewogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9PQkRLKSkgIT0gMCkKIAlFcGxPYmRJbml0VmFyRW50cnkocFZhckVudHJ5X3AsIGJUeXBlX3AsIE9iZFNpemVfcCk7CkBAIC0zMjQsOCArMzE3LDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE9iZFNpemUgUFVCTElDIEVwbE9iZHVDYWxHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3RFcGxPYmRTaXplIEVwbE9iZHVDYWxHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl0RXBsT2JkU2l6ZSBTaXplOwogCkBAIC0zNTIsNyArMzQ1LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdW5zaWduZWQgaW50IFBVQkxJQyBFcGxPYmR1Q2FsR2V0Tm9kZUlkKCkKK3Vuc2lnbmVkIGludCBFcGxPYmR1Q2FsR2V0Tm9kZUlkKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHVpTm9kZUlkOwogCkBAIC0zODAsOSArMzczLDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFNldE5vZGVJZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgIHRFcGxPYmROb2RlSWRUeXBlCi0JCQkJCQkgICBOb2RlSWRUeXBlX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbE9iZE5vZGVJZFR5cGUgTm9kZUlkVHlwZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00MTEsMTEgKzQwMyw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxHZXRBY2Nlc3NUeXBlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgaW50Ci0JCQkJCQkgICAgICAgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgICAgIHRFcGxPYmRBY2Nlc3MgKgotCQkJCQkJICAgICAgIHBBY2Nlc3NUeXBfcCkKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgIHRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCkKIHsKIAl0RXBsT2JkQWNjZXNzIEFjY2VzVHlwZTsKIApAQCAtNDQ3LDExICs0MzcsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxSZWFkRW50cnlUb0xlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00ODEsMTIgKzQ3MCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxXcml0ZUVudHJ5RnJvbUxlKHVuc2lnbmVkIGludAotCQkJCQkJCSAgdWlJbmRleF9wLAotCQkJCQkJCSAgdW5zaWduZWQgaW50Ci0JCQkJCQkJICB1aVN1YkluZGV4X3AsCi0JCQkJCQkJICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJCSAgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsV3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC01MTQsMTAgKzUwMCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxPYmR1Q2FsU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgICAgdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iakRlZi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmpEZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcxMzEyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iakRlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5Ci0gICAgICB3d3cuc3lzdGVjLWVsZWN0cm9uaWMuY29tCi0KLSAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCi0KLSAgRGVzY3JpcHRpb246ICBkZWZpbmVzIG9iamRpY3QgZGljdGlvbmFyeQotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbE9iakRlZi5oLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS40ICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgICAgICBHQ0MgVjMuNAotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBSZXZpc2lvbiBIaXN0b3J5OgotCi0gIDIwMDYvMDYvMDYgICAgay50LjogICB0YWtlIE9iakRlZi5oIGZyb20gQ0FOb3BlbiBhbmQgbW9kaWZ5IGZvciBFUEwKLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfRVBMT0JKREVGX0hfCi0jZGVmaW5lIF9FUExPQkpERUZfSF8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHNlY3VyaXR5IGNoZWNrcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIG1hY3JvcyB0byBoZWxwIGJ1aWxkaW5nIE9ECi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmIChkZWZpbmVkIChFUExfT0JEX1VTRV9WQVJJQUJMRV9TVUJJTkRFWF9UQUIpICYmIChFUExfT0JEX1VTRV9WQVJJQUJMRV9TVUJJTkRFWF9UQUIgIT0gRkFMU0UpKQotCi0jZGVmaW5lIENDTV9TVUJJTkRFWF9SQU1fT05MWShhKSAgICBhOwotI2RlZmluZSBDQ01fU1VCSU5ERVhfUkFNX09ORU9GKGEsYikgYQotCi0jZWxzZQotCi0jZGVmaW5lIENDTV9TVUJJTkRFWF9SQU1fT05MWShhKQotI2RlZmluZSBDQ01fU1VCSU5ERVhfUkFNX09ORU9GKGEsYikgYgotCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRvIHByZXZlbnQgdW51c2VkIG1lbW9yeSBpbiBzdWJpbmRleCB0YWJsZXMgd2UgbmVlZCB0aGlzIG1hY3JvLgotLy8gQnV0IG5vdCBhbGwgY29tcGlsZXJzIHN1cHBvcnQgdG8gcHJlc2V0IHRoZSBsYXN0IHN0cnVjdCB2YWx1ZSBmb2xsb3dlZCBieSBhIGNvbW1hLgotLy8gQ29tcGlsZXJzIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgYSBjb21tYSBhZnRlciBsYXN0IHN0cnVjdCB2YWx1ZSBoYXMgdG8gcGxhY2UgaW4gYSBkdW1teSBzdWJpbmRleC4KLSNpZiAoKERFVl9TWVNURU0gJiBfREVWX0NPTU1BX0VYVF8pICE9IDApCi0KLSNkZWZpbmUgRVBMX09CRF9FTkRfU1VCSU5ERVgoKQotI2RlZmluZSBFUExfT0JEX01BWF9BUlJBWV9TVUJFTlRSSUVTICAgIDIKLQotI2Vsc2UKLQotI2RlZmluZSBFUExfT0JEX0VORF9TVUJJTkRFWCgpICAgICAgICAgIHswLDAsMCxOVUxMLE5VTEx9Ci0jZGVmaW5lIEVQTF9PQkRfTUFYX0FSUkFZX1NVQkVOVFJJRVMgICAgMwotCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBnbG9iYWxlIHZhcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjcmVhdGlvbiBvZiBkYXRhIGluIFJPTSBtZW1vcnkKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfUk9NX0RBVEEKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfUk9NX0RBVEEKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY3JlYXRpb24gb2YgZGF0YSBpbiBSQU0gbWVtb3J5Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfUkFNX0RBVEEKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfUkFNX0RBVEEKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY3JlYXRpb24gb2Ygc3ViaW5kZXggdGFibGVzIGluIFJPTSBhbmQgUkFNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfU1VCSU5ERVhfVEFCCi0jaW5jbHVkZSAib2JqZGljdC5oIgotI3VuZGVmIEVQTF9PQkRfQ1JFQVRFX1NVQklOREVYX1RBQgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjcmVhdGlvbiBvZiBpbmRleCB0YWJsZXMgZm9yIGdlbmVyaWMsIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIHBhcnQKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBFUExfT0JEX0NSRUFURV9JTkRFWF9UQUIKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfSU5ERVhfVEFCCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgUCBVIEIgTCBJIEMgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVQTF9PQkRfSU5JVF9SQU1fTkFNRSgpCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgb2JqZWN0IGRpY3Rpb25hcnkKLS8vCi0vLyBQYXJhbWV0ZXJzOiAgcEluaXRQYXJhbV9wICAgID0gcG9pbnRlciB0byBpbml0IHBhcmFtIHN0cnVjdCBvZiBFcGwKLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgICAgID0gZXJyb3IgY29kZQotLy8KLS8vIFN0YXRlOgotLy8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVQTF9PQkRfSU5JVF9SQU1fTkFNRSh0RXBsT2JkSW5pdFBhcmFtIE1FTSAqCi0JCQkJCQkgICAgIHBJbml0UGFyYW1fcCkKLXsKLQotCXRFcGxPYmRJbml0UGFyYW0gTUVNICpwSW5pdFBhcmFtID0gcEluaXRQYXJhbV9wOwotCi0JLy8gY2hlY2sgaWYgcG9pbnRlciB0byBwYXJhbWV0ZXIgc3RydWN0dXJlIGlzIHZhbGlkCi0JLy8gaWYgbm90IHRoZW4gb25seSBjb3B5IHN1YmluZGV4IHRhYmxlcyBiZWxvdwotCWlmIChwSW5pdFBhcmFtICE9IE5VTEwpIHsKLQkJLy8gYXQgZmlyc3QgZGVsZXRlIGFsbCBwYXJhbWV0ZXJzIChhbGwgcG9pbnRlcnMgd2lsbCBiZSBzZXQgenUgTlVMTCkKLQkJRVBMX01FTVNFVChwSW5pdFBhcmFtLCAwLCBzaXplb2YodEVwbE9iZEluaXRQYXJhbSkpOwotCi0jZGVmaW5lIEVQTF9PQkRfQ1JFQVRFX0lOSVRfRlVOQ1RJT04KLQkJewotCQkJLy8gaW5zZXJ0cyBjb2RlIHRvIGluaXQgcG9pbnRlciB0byBpbmRleCB0YWJsZXMKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0JCX0KLSN1bmRlZiBFUExfT0JEX0NSRUFURV9JTklUX0ZVTkNUSU9OCi0KLSNpZiAoZGVmaW5lZCAoRVBMX09CRF9VU0VSX09EKSAmJiAoRVBMX09CRF9VU0VSX09EICE9IEZBTFNFKSkKLQkJewotCQkJLy8gdG8gYmVnaW4gbm8gdXNlciBPRCBpcyBkZWZpbmVkCi0JCQlwSW5pdFBhcmFtX3AtPm1fcFVzZXJQYXJ0ID0gTlVMTDsKLQkJfQotI2VuZGlmCi0JfQotI2RlZmluZSBFUExfT0JEX0NSRUFURV9JTklUX1NVQklOREVYCi0JewotCQkvLyBpbnNlcnRzIGNvZGUgdG8gY29weSBzdWJpbmRleCB0YWJsZXMKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0JfQotI3VuZGVmIEVQTF9PQkRfQ1JFQVRFX0lOSVRfU1VCSU5ERVgKLQotCXJldHVybiBrRXBsU3VjY2Vzc2Z1bDsKLQotfQotCi0jZW5kaWYgLy8gX0VQTE9CSkRFRl9IXwotCi0vLyBEaWUgbGV0enRlIFplaWxlIG113yB1bmJlZGluZ3QgZWluZSBsZWVyZSBaZWlsZSBzZWluLCB3ZWlsIG1hbmNoZSBDb21waWxlcgotLy8gZGFtaXQgZWluIFByb2JsZW0gaGFiZW4sIHdlbm4gZGFzIG5pY2h0IHNvIGlzdCAoei5CLiBHTlUgb2RlciBCb3JsYW5kIEMrKyBCdWlsZGVyKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkby5oCmluZGV4IGQyMmFjODYuLjBiM2FkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxQZG8uaApAQCAtOTAsOCArOTAsOCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9pZCAqbV9wVmFyOwotCVdPUkQgbV93T2Zmc2V0OwkJLy8gaW4gQml0cwotCVdPUkQgbV93U2l6ZTsJCS8vIGluIEJpdHMKKwl1MTYgbV93T2Zmc2V0OwkJLy8gaW4gQml0cworCXUxNiBtX3dTaXplOwkJLy8gaW4gQml0cwogCUJPT0wgbV9mTnVtZXJpYzsJLy8gbnVtZXJpYyB2YWx1ZSAtPiB1c2UgQU1JIGZ1bmN0aW9ucwogCiB9IHRFcGxQZG9NYXBwaW5nOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJLy8gICAgICAgICAgICAgICBUUERPOiAweDAwPVBSZXMsIE1OOiBDbk5vZGVJZD1QUmVxCiAKIAlCT09MIG1fZlR4Ung7Ci0JQllURSBtX2JNYXBwaW5nVmVyc2lvbjsKKwl1OCBtX2JNYXBwaW5nVmVyc2lvbjsKIAl1bnNpZ25lZCBpbnQgbV91aU1heE1hcHBpbmdFbnRyaWVzOwkvLyBtYXhpbXVtIG51bWJlciBvZiBtYXBwaW5nIGVudHJpZXMsIGkuZS4gc2l6ZSBvZiBtX2FQZG9NYXBwaW5nCiAJdEVwbFBkb01hcHBpbmcgbV9hUGRvTWFwcGluZ1sxXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxQZG9rLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYwppbmRleCAxNTk5OWI0Li5kYjliM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYwpAQCAtNzMsMTEgKzczLDYgQEAKICNpbmNsdWRlICJrZXJuZWwvRXBsRXZlbnRrLmgiCiAjaW5jbHVkZSAia2VybmVsL0VwbE9iZGsuaCIKIAotI2lmIChERVZfU1lTVEVNID09IF9ERVZfR05VX0NGNTQ4WF8pCi0jaW5jbHVkZSAicGxjY29yZS5oIgotI2RlZmluZSBQRE9fTEVEIDB4MDgKLSNlbmRpZgotCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9QRE9LKSkgIT0gMCkKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfRExMSykpID09IDApCkBAIC0yMjYsMTEgKzIyMSw2IEBACiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsRXZlbnQgRXZlbnQ7CiAKLSNpZiAoREVWX1NZU1RFTSA9PSBfREVWX0dOVV9DRjU0OFhfKQotCS8vIHJlc2V0IExFRAotLy8gICAgTUNGX0dQSU9fUE9EUl9QQ0lCRyAmPSB+UERPX0xFRDsgIC8vIExldmVsCi0jZW5kaWYKLQogCUV2ZW50Lm1fRXZlbnRTaW5rID0ga0VwbEV2ZW50U2lua1Bkb2s7CiAJRXZlbnQubV9FdmVudFR5cGUgPSBrRXBsRXZlbnRUeXBlUGRvUng7CiAJLy8gbGltaXQgY29waWVkIGRhdGEgdG8gc2l6ZSBvZiBQRE8gKGJlY2F1c2UgZnJvbSBzb21lIENOcyB0aGUgZnJhbWUgaXMgbGFyZ2VyIHRoYW4gbmVjZXNzYXJ5KQpAQCAtMjM4LDExICsyMjgsNiBAQAogCUV2ZW50Lm1fcEFyZyA9IHBGcmFtZUluZm9fcC0+bV9wRnJhbWU7CiAJUmV0ID0gRXBsRXZlbnRrUG9zdCgmRXZlbnQpOwogCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9HTlVfQ0Y1NDhYXykKLQkvLyBzZXQgTEVECi0vLyAgICBNQ0ZfR1BJT19QT0RSX1BDSUJHIHw9IFBET19MRUQ7ICAvLyBMZXZlbAotI2VuZGlmCi0KIAlyZXR1cm4gUmV0OwogfQogCkBAIC0yNjksMjIgKzI1NCwxMiBAQAogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbEV2ZW50IEV2ZW50OwogCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9HTlVfQ0Y1NDhYXykKLQkvLyByZXNldCBMRUQKLQlNQ0ZfR1BJT19QT0RSX1BDSUJHICY9IH5QRE9fTEVEOwkvLyBMZXZlbAotI2VuZGlmCi0KIAlFdmVudC5tX0V2ZW50U2luayA9IGtFcGxFdmVudFNpbmtQZG9rOwogCUV2ZW50Lm1fRXZlbnRUeXBlID0ga0VwbEV2ZW50VHlwZVBkb1R4OwogCUV2ZW50Lm1fdWlTaXplID0gc2l6ZW9mKHRFcGxGcmFtZUluZm8pOwogCUV2ZW50Lm1fcEFyZyA9IHBGcmFtZUluZm9fcDsKIAlSZXQgPSBFcGxFdmVudGtQb3N0KCZFdmVudCk7CiAKLSNpZiAoREVWX1NZU1RFTSA9PSBfREVWX0dOVV9DRjU0OFhfKQotCS8vIHNldCBMRUQKLQlNQ0ZfR1BJT19QT0RSX1BDSUJHIHw9IFBET19MRUQ7CS8vIExldmVsCi0jZW5kaWYKLQogCXJldHVybiBSZXQ7CiB9CiAKQEAgLTMzOSwxOSArMzE0LDE5IEBACiB0RXBsS2VybmVsIEVwbFBkb2tQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JV09SRCB3UGRvU2l6ZTsKLQlXT1JEIHdCaXRPZmZzZXQ7Ci0JV09SRCB3Qml0U2l6ZTsKLQlXT1JEIHdWYXJTaXplOwotCVFXT1JEIHF3T2JqZWN0TWFwcGluZzsKLQlCWVRFIGJNYXBwU3ViaW5kZXg7Ci0JQllURSBiT2JkU3ViaW5kZXg7Ci0JV09SRCB3T2JkTWFwcEluZGV4OwotCVdPUkQgd09iZENvbW1JbmRleDsKLQlXT1JEIHdQZG9JZDsKLQlCWVRFIGJPYmREYXRhOwotCUJZVEUgYk9iamVjdENvdW50OwotCUJZVEUgYkZyYW1lRGF0YTsKKwl1MTYgd1Bkb1NpemU7CisJdTE2IHdCaXRPZmZzZXQ7CisJdTE2IHdCaXRTaXplOworCXUxNiB3VmFyU2l6ZTsKKwl1NjQgcXdPYmplY3RNYXBwaW5nOworCXU4IGJNYXBwU3ViaW5kZXg7CisJdTggYk9iZFN1YmluZGV4OworCXUxNiB3T2JkTWFwcEluZGV4OworCXUxNiB3T2JkQ29tbUluZGV4OworCXUxNiB3UGRvSWQ7CisJdTggYk9iZERhdGE7CisJdTggYk9iamVjdENvdW50OworCXU4IGJGcmFtZURhdGE7CiAJQk9PTCBmVmFsaWQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAl0RXBsRnJhbWUgKnBGcmFtZTsKQEAgLTQ0OCw3ICs0MjMsNyBAQAogCQkJLy8gcHJvY2VzcyBtYXBwaW5nCiAJCQlmb3IgKGJNYXBwU3ViaW5kZXggPSAxOyBiTWFwcFN1YmluZGV4IDw9IGJPYmplY3RDb3VudDsKIAkJCSAgICAgYk1hcHBTdWJpbmRleCsrKSB7Ci0JCQkJT2JkU2l6ZSA9IDg7CS8vIFFXT1JECisJCQkJT2JkU2l6ZSA9IDg7CS8vIHU2NAogCQkJCS8vIHJlYWQgb2JqZWN0IG1hcHBpbmcgZnJvbSBPRAogCQkJCVJldCA9CiAJCQkJICAgIEVwbE9iZFJlYWRFbnRyeSh3T2JkTWFwcEluZGV4LApAQCAtNDYzLDE2ICs0MzgsMTYgQEAKIAkJCQl9CiAJCQkJLy8gZGVjb2RlIG9iamVjdCBtYXBwaW5nCiAJCQkJd09iZENvbW1JbmRleCA9Ci0JCQkJICAgIChXT1JEKSAocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAweDAwMDAwMDAwMDAwMEZGRkZMTCk7CiAJCQkJYk9iZFN1YmluZGV4ID0KLQkJCQkgICAgKEJZVEUpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHU4KSAoKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAgMHgwMDAwMDAwMDAwRkYwMDAwTEwpID4+IDE2KTsKIAkJCQl3Qml0T2Zmc2V0ID0KLQkJCQkgICAgKFdPUkQpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4MDAwMEZGRkYwMDAwMDAwMExMKSA+PiAzMik7CiAJCQkJd0JpdFNpemUgPQotCQkJCSAgICAoV09SRCkgKChxd09iamVjdE1hcHBpbmcgJgorCQkJCSAgICAodTE2KSAoKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAgMHhGRkZGMDAwMDAwMDAwMDAwTEwpID4+IDQ4KTsKIAogCQkJCS8vIGNoZWNrIGlmIG9iamVjdCBleGNlZWRzIFBETyBzaXplCkBAIC01NzgsNyArNTUzLDcgQEAKIAkJCS8vIHByb2Nlc3MgbWFwcGluZwogCQkJZm9yIChiTWFwcFN1YmluZGV4ID0gMTsgYk1hcHBTdWJpbmRleCA8PSBiT2JqZWN0Q291bnQ7CiAJCQkgICAgIGJNYXBwU3ViaW5kZXgrKykgewotCQkJCU9iZFNpemUgPSA4OwkvLyBRV09SRAorCQkJCU9iZFNpemUgPSA4OwkvLyB1NjQKIAkJCQkvLyByZWFkIG9iamVjdCBtYXBwaW5nIGZyb20gT0QKIAkJCQlSZXQgPQogCQkJCSAgICBFcGxPYmRSZWFkRW50cnkod09iZE1hcHBJbmRleCwKQEAgLTU5MywyMSArNTY4LDIxIEBACiAJCQkJfQogCQkJCS8vIGRlY29kZSBvYmplY3QgbWFwcGluZwogCQkJCXdPYmRDb21tSW5kZXggPQotCQkJCSAgICAoV09SRCkgKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1MTYpIChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgMHgwMDAwMDAwMDAwMDBGRkZGTEwpOwogCQkJCWJPYmRTdWJpbmRleCA9Ci0JCQkJICAgIChCWVRFKSAoKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1OCkgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4MDAwMDAwMDAwMEZGMDAwMExMKSA+PiAxNik7CiAJCQkJd0JpdE9mZnNldCA9Ci0JCQkJICAgIChXT1JEKSAoKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1MTYpICgocXdPYmplY3RNYXBwaW5nICYKIAkJCQkJICAgICAweDAwMDBGRkZGMDAwMDAwMDBMTCkgPj4gMzIpOwogCQkJCXdCaXRTaXplID0KLQkJCQkgICAgKFdPUkQpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4RkZGRjAwMDAwMDAwMDAwMExMKSA+PiA0OCk7CiAKIAkJCQkvLyBjYWxjdWxhdGUgbWF4IFBETyBzaXplCiAJCQkJT2JkU2l6ZSA9IHdCaXRTaXplID4+IDM7Ci0JCQkJd1ZhclNpemUgPSAod0JpdE9mZnNldCA+PiAzKSArIChXT1JEKSBPYmRTaXplOworCQkJCXdWYXJTaXplID0gKHdCaXRPZmZzZXQgPj4gMykgKyAodTE2KSBPYmRTaXplOwogCQkJCWlmICgodW5zaWduZWQgaW50KSh3VmFyU2l6ZSArIDI0KSA+IHBGcmFtZUluZm8tPm1fdWlGcmFtZVNpemUpIHsJLy8gVFBETyBpcyB0b28gc2hvcnQKIAkJCQkJLy8gJCQkIHJhaXNlIFBETyBlcnJvciwgc2V0IFJldAogCQkJCQlnb3RvIEV4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb3UuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCmluZGV4IGU3YjEwNjUuLmQ2ZDA2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCkBAIC0xNDksMTggKzE0OSwxOCBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrUGRvVmFsaWRpdHkodEVwbE9iZENiUGFyYW0gTUVNICogcFBhcmFtX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tQZG9WYWxpZGl0eSh0RXBsT2JkQ2JQYXJhbSAqcFBhcmFtX3AsCiAJCQkJCSAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCk7CiAKLXN0YXRpYyB2b2lkIEVwbFBkb3VEZWNvZGVPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHZvaWQgRXBsUGRvdURlY29kZU9iamVjdE1hcHBpbmcodTY0IHF3T2JqZWN0TWFwcGluZ19wLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnB1aUluZGV4X3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCAqcHVpU3ViSW5kZXhfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlCaXRPZmZzZXRfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlCaXRTaXplX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyh1NjQgcXdPYmplY3RNYXBwaW5nX3AsCiAJCQkJCSAgICB0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGVfcCwKLQkJCQkJICAgIERXT1JEICogcGR3QWJvcnRDb2RlX3AsCisJCQkJCSAgICB1MzIgKiBwZHdBYm9ydENvZGVfcCwKIAkJCQkJICAgIHVuc2lnbmVkIGludCAqcHVpUGRvU2l6ZV9wKTsKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KQEAgLTIyNiwxOCArMjI2LDE4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsUGRvdUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxQZG91Q2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gKnBQYXJhbV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpUGRvSWQ7CiAJdW5zaWduZWQgaW50IHVpSW5kZXhUeXBlOwogCXRFcGxPYmRTaXplIE9iZFNpemU7Ci0JQllURSBiT2JqZWN0Q291bnQ7Ci0JUVdPUkQgcXdPYmplY3RNYXBwaW5nOworCXU4IGJPYmplY3RDb3VudDsKKwl1NjQgcXdPYmplY3RNYXBwaW5nOwogCXRFcGxPYmRBY2Nlc3MgQWNjZXNzVHlwZTsKLQlCWVRFIGJNYXBwU3ViaW5kZXg7CisJdTggYk1hcHBTdWJpbmRleDsKIAl1bnNpZ25lZCBpbnQgdWlDdXJQZG9TaXplOwotCVdPUkQgd01heFBkb1NpemU7CisJdTE2IHdNYXhQZG9TaXplOwogCXVuc2lnbmVkIGludCB1aVN1YkluZGV4OwogCiAJLy8gZmV0Y2ggUERPIElECkBAIC0yOTMsNyArMjkzLDcgQEAKIAlpZiAocFBhcmFtX3AtPm1fdWlTdWJJbmRleCA9PSAwKSB7CS8vIG9iamVjdCBtYXBwaW5nIGNvdW50IGFjY2Vzc2VkCiAKIAkJLy8gUERPIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQKLQkJYk9iamVjdENvdW50ID0gKigoQllURSAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKKwkJYk9iamVjdENvdW50ID0gKigodTggKikgcFBhcmFtX3AtPm1fcEFyZyk7CiAKIAkJaWYgKGJPYmplY3RDb3VudCA9PSAwKSB7CS8vIFBETyBzaGFsbCBiZSBkaXNhYmxlZAogCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJZm9yIChiTWFwcFN1YmluZGV4ID0gMTsgYk1hcHBTdWJpbmRleCA8PSBiT2JqZWN0Q291bnQ7CiAJCSAgICAgYk1hcHBTdWJpbmRleCsrKSB7CiAJCQkvLyByZWFkIG9iamVjdCBtYXBwaW5nIGZyb20gT0QKLQkJCU9iZFNpemUgPSBzaXplb2YocXdPYmplY3RNYXBwaW5nKTsJLy8gUVdPUkQKKwkJCU9iZFNpemUgPSBzaXplb2YocXdPYmplY3RNYXBwaW5nKTsJLy8gdTY0CiAJCQlSZXQgPSBFcGxPYmR1UmVhZEVudHJ5KHBQYXJhbV9wLT5tX3VpSW5kZXgsCiAJCQkJCSAgICAgICBiTWFwcFN1YmluZGV4LCAmcXdPYmplY3RNYXBwaW5nLAogCQkJCQkgICAgICAgJk9iZFNpemUpOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCX0KIAkJLy8gY2hlY2sgZXhpc3RlbmNlIG9mIG9iamVjdCBhbmQgdmFsaWRpdHkgb2Ygb2JqZWN0IGxlbmd0aAogCi0JCXF3T2JqZWN0TWFwcGluZyA9ICooKFFXT1JEICopIHBQYXJhbV9wLT5tX3BBcmcpOworCQlxd09iamVjdE1hcHBpbmcgPSAqKCh1NjQgKikgcFBhcmFtX3AtPm1fcEFyZyk7CiAKIAkJUmV0ID0gRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyhxd09iamVjdE1hcHBpbmcsCiAJCQkJCQlBY2Nlc3NUeXBlLApAQCAtMzk0LDEyICszOTQsMTIgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tQZG9WYWxpZGl0eSh0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwUGFyYW1fcCwKK3N0YXRpYyB0RXBsS2VybmVsIEVwbFBkb3VDaGVja1Bkb1ZhbGlkaXR5KHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCwKIAkJCQkJICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJPYmplY3RDb3VudDsKKwl1OCBiT2JqZWN0Q291bnQ7CiAKIAlPYmRTaXplID0gMTsKIAkvLyByZWFkIG51bWJlciBvZiBtYXBwZWQgb2JqZWN0cyBmcm9tIE9EOyB0aGlzIGluZGljYXRlcyBpZiB0aGUgUERPIGlzIHZhbGlkCkBAIC00MzksNyArNDM5LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdm9pZCBFcGxQZG91RGVjb2RlT2JqZWN0TWFwcGluZyhRV09SRCBxd09iamVjdE1hcHBpbmdfcCwKK3N0YXRpYyB2b2lkIEVwbFBkb3VEZWNvZGVPYmplY3RNYXBwaW5nKHU2NCBxd09iamVjdE1hcHBpbmdfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlJbmRleF9wLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnB1aVN1YkluZGV4X3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCAqcHVpQml0T2Zmc2V0X3AsCkBAIC00ODAsOSArNDgwLDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyh1NjQgcXdPYmplY3RNYXBwaW5nX3AsCiAJCQkJCSAgICB0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGVfcCwKLQkJCQkJICAgIERXT1JEICogcGR3QWJvcnRDb2RlX3AsCisJCQkJCSAgICB1MzIgKiBwZHdBYm9ydENvZGVfcCwKIAkJCQkJICAgIHVuc2lnbmVkIGludCAqcHVpUGRvU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkby5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG8uaAppbmRleCAxY2IzZjJkLi44MDAyZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvLmgKQEAgLTExNiwyMCArMTE2LDE4IEBACiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIFByb3RvY29sIEFic3RyYWN0aW9uIExheWVyIHRvIGNhbGwKIC8vIGFzeW5jaHJvbnV1cyBTRE8gU2VxdWVuY2UgTGF5ZXIKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsU2VxdUxheWVyUmVjZWl2ZUNiKSAodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKLQkJCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqCi0JCQkJCQkgICAgIHBTZG9TZXFEYXRhX3AsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCp0RXBsU2VxdUxheWVyUmVjZWl2ZUNiKSAodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKKwkJCQkJICAgICB0RXBsQXN5U2RvU2VxICpwU2RvU2VxRGF0YV9wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwogCiAvLyBoYW5kbGUgYmV0d2VlbiBhc3luY2hyb251dXMgU0RPIFNlcXVlbmNlIExheWVyIGFuZCBTRE8gQ29tbWFuZCBsYXllcgogdHlwZWRlZiB1bnNpZ25lZCBpbnQgdEVwbFNkb1NlcUNvbkhkbDsKIAogLy8gY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciBmb3IgYXN5bmNocm9udXVzIFNETyBTZXF1ZW5jZSBMYXllciB0byBjYWxsCiAvLyBTRE8gQ29tbWFuZCBsYXllciBmb3IgcmVjZWl2ZWQgZGF0YQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqCi0JCSAgIHRFcGxTZG9Db21SZWNlaXZlQ2IpICh0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAotCQkJCQkgdEVwbEFzeVNkb0NvbSAqIHBBc3lTZG9Db21fcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbFNkb0NvbVJlY2VpdmVDYikgKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkJCSAgIHRFcGxBc3lTZG9Db20gKnBBc3lTZG9Db21fcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7CiAKIC8vIHN0YXR1cyBvZiBjb25uZWN0aW9uCiB0eXBlZGVmIGVudW0gewpAQCAtMTQzLDkgKzE0MSw4IEBACiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIGFzeW5jaHJvbnV1cyBTRE8gU2VxdWVuY2UgTGF5ZXIgdG8gY2FsbAogLy8gU0RPIENvbW1hbmQgbGF5ZXIgZm9yIGNvbm5lY3Rpb24gc3RhdHVzCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbFNkb0NvbUNvbkNiKSAodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKLQkJCQkJICAgICAgdEVwbEFzeVNkb0NvblN0YXRlCi0JCQkJCSAgICAgIEFzeVNkb0NvblN0YXRlX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbFNkb0NvbUNvbkNiKSAodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCQkgICAgICAgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApOwogCiAvLyBoYW5kbGUgYmV0d2VlbiAgU0RPIENvbW1hbmQgbGF5ZXIgYW5kIGFwcGxpY2F0aW9uCiB0eXBlZGVmIHVuc2lnbmVkIGludCB0RXBsU2RvQ29tQ29uSGRsOwpAQCAtMjEwLDcgKzIwNyw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbFNkb0NvbUNvbkhkbCBtX1Nkb0NvbUNvbkhkbDsKIAl0RXBsU2RvQ29tQ29uU3RhdGUgbV9TZG9Db21Db25TdGF0ZTsKLQlEV09SRCBtX2R3QWJvcnRDb2RlOworCXUzMiBtX2R3QWJvcnRDb2RlOwogCXRFcGxTZG9BY2Nlc3NUeXBlIG1fU2RvQWNjZXNzVHlwZTsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gTm9kZUlkIG9mIHRoZSB0YXJnZXQKIAl1bnNpZ25lZCBpbnQgbV91aVRhcmdldEluZGV4OwkvLyBpbmRleCB3aGljaCB3YXMgYWNjZXNzZWQKQEAgLTIyMSw4ICsyMTgsNyBAQAogfSB0RXBsU2RvQ29tRmluaXNoZWQ7CiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdG8gaW5mb3JtIGFwcGxpY2F0aW9uIGFib3V0IGNvbm5lY3Rpb24KLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsU2RvRmluaXNoZWRDYikgKHRFcGxTZG9Db21GaW5pc2hlZCAqCi0JCQkJCQlwU2RvQ29tRmluaXNoZWRfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsU2RvRmluaXNoZWRDYikgKHRFcGxTZG9Db21GaW5pc2hlZCAqcFNkb0NvbUZpbmlzaGVkX3ApOwogCiAvLyBzdHJ1Y3R1cmUgdG8gaW5pdCBTRE8gdHJhbnNmZXIgdG8gUmVhZCBvciBXcml0ZSBieSBJbmRleAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Bc25kdS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Bc25kdS5jCmluZGV4IDA1YTAwYzkuLmFhOGJkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXNuZHUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0FzbmR1LmMKQEAgLTExMCw3ICsxMTAsNyBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVDYih0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVDYih0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc25kdUFkZEluc3RhbmNlKHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjE4LDcgKzIxOCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjUxLDggKzI1MSw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKiBwU2RvQ29uSGFuZGxlX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKnBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUNvdW50OwpAQCAtMzE5LDkgKzMxOSw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAotCQkJCSAgICAgIHRFcGxGcmFtZSAqIHBTcmNEYXRhX3AsCi0JCQkJICAgICAgRFdPUkQgZHdEYXRhU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc25kdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgICAgdEVwbEZyYW1lICpwU3JjRGF0YV9wLAorCQkJICAgICAgIHUzMiBkd0RhdGFTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQXJyYXk7CkBAIC0zMzksMTAgKzMzOSwxMCBAQAogCS8vIG93biBub2RlIGlkIG5vdCBuZWVkZWQgLT4gZmlsbGVkIGJ5IERMTAogCiAJLy8gc2V0IG1lc3NhZ2UgdHlwZQotCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JNZXNzYWdlVHlwZSwgKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCk7CS8vIEFTbmQgPT0gMHgwNgorCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JNZXNzYWdlVHlwZSwgKHU4KSBrRXBsTXNnVHlwZUFzbmQpOwkvLyBBU25kID09IDB4MDYKIAkvLyB0YXJnZXQgbm9kZSBpZAogCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JEc3ROb2RlSWQsCi0JCSAgICAgICAoQllURSkgU2RvQXNuZEluc3RhbmNlX2cuCisJCSAgICAgICAodTgpIFNkb0FzbmRJbnN0YW5jZV9nLgogCQkgICAgICAgbV9hdWlTZG9Bc25kQ29ubmVjdGlvblt1aUFycmF5XSk7CiAJLy8gc2V0IHNvdXJjZS1ub2RlaWQgKGZpbGxlZCBieSBETEwgMCkKIAlBbWlTZXRCeXRlVG9MZSgmcFNyY0RhdGFfcC0+bV9sZV9iU3JjTm9kZUlkLCAweDAwKTsKQEAgLTM3OSw3ICszNzksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQXJyYXk7CkBAIC00MjIsNyArNDIyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdUNiKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1Q2IodEVwbEZyYW1lSW5mbyAqcEZyYW1lSW5mb19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpQ291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0FzeVNlcXUuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCmluZGV4IDZiNmE5OTcuLjI1NmQ3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCkBAIC0xMjgsMTEgKzEyOCwxMSBAQAogCiAvLyBzdHJ1Y3R1cmUgZm9yIEhpc3RvcnktQnVmZmVyCiB0eXBlZGVmIHN0cnVjdCB7Ci0JQllURSBtX2JGcmVlRW50cmllczsKLQlCWVRFIG1fYldyaXRlOwkJLy8gaW5kZXggb2YgdGhlIG5leHQgZnJlZSBidWZmZXIgZW50cnkKLQlCWVRFIG1fYkFjazsJCS8vIGluZGV4IG9mIHRoZSBuZXh0IG1lc3NhZ2Ugd2hpY2ggc2hvdWxkIGJlY29tZSBhY2tub3dsZWRnZWQKLQlCWVRFIG1fYlJlYWQ7CQkvLyBpbmRleCBiZXR3ZWVuIG1fYkFjayBhbmQgbV9iV3JpdGUgdG8gdGhlIG5leHQgbWVzc2FnZSBmb3IgcmV0cmFuc21pc3Npb24KLQlCWVRFIG1fYWFiSGlzdG9yeUZyYW1lW0VQTF9TRE9fSElTVE9SWV9TSVpFXQorCXU4IG1fYkZyZWVFbnRyaWVzOworCXU4IG1fYldyaXRlOwkJLy8gaW5kZXggb2YgdGhlIG5leHQgZnJlZSBidWZmZXIgZW50cnkKKwl1OCBtX2JBY2s7CQkvLyBpbmRleCBvZiB0aGUgbmV4dCBtZXNzYWdlIHdoaWNoIHNob3VsZCBiZWNvbWUgYWNrbm93bGVkZ2VkCisJdTggbV9iUmVhZDsJCS8vIGluZGV4IGJldHdlZW4gbV9iQWNrIGFuZCBtX2JXcml0ZSB0byB0aGUgbmV4dCBtZXNzYWdlIGZvciByZXRyYW5zbWlzc2lvbgorCXU4IG1fYWFiSGlzdG9yeUZyYW1lW0VQTF9TRE9fSElTVE9SWV9TSVpFXQogCSAgICBbRVBMX1NFUV9ISVNUUk9ZX0ZSQU1FX1NJWkVdOwogCXVuc2lnbmVkIGludCBtX2F1aUZyYW1lU2l6ZVtFUExfU0RPX0hJU1RPUllfU0laRV07CiAKQEAgLTE1Miw4ICsxNTIsOCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXRFcGxTZG9Db25IZGwgbV9Db25IYW5kbGU7CiAJdEVwbEFzeVNkb1N0YXRlIG1fU2RvU3RhdGU7Ci0JQllURSBtX2JSZWNTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKLQlCWVRFIG1fYlNlbmRTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKKwl1OCBtX2JSZWNTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKKwl1OCBtX2JTZW5kU2VxTnVtOwkvLyBuYW1lIGZyb20gdmlldyBvZiB0aGUgY29tbXVuaWNhdGlvbiBwYXJ0bmVyCiAJdEVwbEFzeVNkb0Nvbkhpc3RvcnkgbV9TZG9Db25IaXN0b3J5OwogCXRFcGxUaW1lckhkbCBtX0VwbFRpbWVySGRsOwogCXVuc2lnbmVkIGludCBtX3VpUmV0cnlDb3VudDsJLy8gcmV0cnkgY291bnRlcgpAQCAtMjAzLDkgKzIwMyw5IEBACiAJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCwKIAkJCQkJICAgICB0RXBsRnJhbWUgKiBwRXBsRnJhbWVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVJlY2VpdmVDYih0RXBsU2RvQ29uSGRsIENvbkhkbF9wLAotCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqIHBTZG9TZXFEYXRhX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5UmVjZWl2ZUNiKHRFcGxTZG9Db25IZGwgQ29uSGRsX3AsCisJCQkgICAgICB0RXBsQXN5U2RvU2VxICpwU2RvU2VxRGF0YV9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbFNkb0FzeUluaXRIaXN0b3J5KHZvaWQpOwogCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Bc3lBY2tGcmFtZVRvSGlzdG9yeSh0RXBsQXN5U2RvU2VxQ29uICogcEFzeVNkb1NlcUNvbl9wLAotCQkJCQkgICAgIEJZVEUgYlJlY1NlcU51bWJlcl9wKTsKKwkJCQkJICAgICB1OCBiUmVjU2VxTnVtYmVyX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Bc3lSZWFkRnJvbUhpc3RvcnkodEVwbEFzeVNkb1NlcUNvbiAqIHBBc3lTZG9TZXFDb25fcCwKIAkJCQkJICAgdEVwbEZyYW1lICoqIHBwRnJhbWVfcCwKQEAgLTI2Nyw4ICsyNjcsOCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcUluaXQodEVwbFNkb0NvbVJlY2VpdmVDYiBmcFNkb0NvbUNiX3AsCi0JCQkJICAgdEVwbFNkb0NvbUNvbkNiIGZwU2RvQ29tQ29uQ2JfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxSW5pdCh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKKwkJCSAgICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yOTcsOCArMjk3LDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFBZGRJbnN0YW5jZSh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKLQkJCQkJICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFBZGRJbnN0YW5jZSh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKKwkJCQkgICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zODAsNyArMzgwLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQ291bnQ7CkBAIC00MzksOSArNDM5LDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFJbml0Q29uKHRFcGxTZG9TZXFDb25IZGwgKiBwU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxSW5pdENvbih0RXBsU2RvU2VxQ29uSGRsICpwU2RvU2VxQ29uSGRsX3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl1bnNpZ25lZCBpbnQgdWlDb3VudDsKQEAgLTU5NCw5ICs1OTQsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVNlbmREYXRhKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3AsCi0JCQkJICAgICAgIHRFcGxGcmFtZSAqIHBhYkRhdGFfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxU2VuZERhdGEodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wLAorCQkJCXRFcGxGcmFtZSAqcGFiRGF0YV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUhhbmRsZTsKQEAgLTY0MCw3ICs2NDAsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXZlbnRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbFRpbWVyRXZlbnRBcmcgKnBUaW1lckV2ZW50QXJnOwpAQCAtNzE0LDcgKzcxNCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXN5U2VxRGVsQ29uKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbENvbih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpSGFuZGxlOwpAQCAtMTQ5OCw3ICsxNDk4LDcgQEAKIAkJCQkvLyBmcmFtZSByZWNlaXZlZAogCQkJY2FzZSBrQXN5U2RvU2VxRXZlbnRGcmFtZVJlYzoKIAkJCQl7Ci0JCQkJCUJZVEUgYlNlbmRTZXFOdW1Db24gPQorCQkJCQl1OCBiU2VuZFNlcU51bUNvbiA9CiAJCQkJCSAgICBBbWlHZXRCeXRlRnJvbUxlKCZwUmVjRnJhbWVfcC0+CiAJCQkJCQkJICAgICBtX2xlX2JTZW5kU2VxTnVtQ29uKTsKIApAQCAtMjAxNiw3ICsyMDE2LDcgQEAKIAkJCQkJIEJPT0wgZkZyYW1lSW5IaXN0b3J5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JQllURSBhYkZyYW1lW0VQTF9TRVFfRlJBTUVfU0laRV07CisJdTggYWJGcmFtZVtFUExfU0VRX0ZSQU1FX1NJWkVdOwogCXRFcGxGcmFtZSAqcEVwbEZyYW1lOwogCXVuc2lnbmVkIGludCB1aUZyZWVFbnRyaWVzOwogCkBAIC0yMTM5LDkgKzIxMzksOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVJlY2VpdmVDYih0RXBsU2RvQ29uSGRsIENvbkhkbF9wLAotCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqIHBTZG9TZXFEYXRhX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc3lSZWNlaXZlQ2IodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKKwkJCSAgICAgIHRFcGxBc3lTZG9TZXEgKnBTZG9TZXFEYXRhX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUNvdW50ID0gMDsKQEAgLTIxNTQsNyArMjE1NCw3IEBACiAjZW5kaWYKIAogCUVQTF9EQkdMVkxfU0RPX1RSQUNFMigiSGFuZGxlOiAweCV4ICwgRmlyc3QgRGF0YWJ5dGUgMHgleFxuIiwgQ29uSGRsX3AsCi0JCQkgICAgICAoKEJZVEUgKikgcFNkb1NlcURhdGFfcClbMF0pOworCQkJICAgICAgKCh1OCAqKSBwU2RvU2VxRGF0YV9wKVswXSk7CiAKIAkvLyBzZWFyY2ggY29udHJvbGwgc3RydWN0dXJlIGZvciB0aGlzIGNvbm5lY3Rpb24KIAlwQXN5U2RvU2VxQ29uID0gJkFzeVNkb1NlcXVJbnN0YW5jZV9nLm1fQXN5U2RvQ29ubmVjdGlvblt1aUNvdW50XTsKQEAgLTIzMjgsMTIgKzIzMjgsMTIgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHRFcGxLZXJuZWwgRXBsU2RvQXN5QWNrRnJhbWVUb0hpc3RvcnkodEVwbEFzeVNkb1NlcUNvbiAqIHBBc3lTZG9TZXFDb25fcCwKLQkJCQkJICAgICBCWVRFIGJSZWNTZXFOdW1iZXJfcCkKKwkJCQkJICAgICB1OCBiUmVjU2VxTnVtYmVyX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFzeVNkb0Nvbkhpc3RvcnkgKnBIaXN0b3J5OwotCUJZVEUgYkFja0luZGV4OwotCUJZVEUgYkN1cnJlbnRTZXFOdW07CisJdTggYkFja0luZGV4OworCXU4IGJDdXJyZW50U2VxTnVtOwogCiAJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTI0MjIsOCArMjQyMiw4IEBACiAJLy8gY2hlY2sgaWYgZW50cmllcyBhcmUgYXZhaWxhYmxlIGZvciByZWFkaW5nCiAJaWYgKChwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMgPCBFUExfU0RPX0hJU1RPUllfU0laRSkKIAkgICAgJiYgKHBIaXN0b3J5LT5tX2JXcml0ZSAhPSBwSGlzdG9yeS0+bV9iUmVhZCkpIHsKLS8vICAgICAgICBQUklOVEY0KCJFcGxTZG9Bc3lSZWFkRnJvbUhpc3RvcnkoKTogaW5pdCA9ICVkLCByZWFkID0gJXUsIHdyaXRlID0gJXUsIGFjayA9ICV1IiwgKGludCkgZkluaXRSZWFkX3AsIChXT1JEKXBIaXN0b3J5LT5tX2JSZWFkLCAoV09SRClwSGlzdG9yeS0+bV9iV3JpdGUsIChXT1JEKXBIaXN0b3J5LT5tX2JBY2spOwotLy8gICAgICAgIFBSSU5URjIoIiwgZnJlZSBlbnRyaWVzID0gJXUsIG5leHQgZnJhbWUgc2l6ZSA9ICV1XG4iLCAoV09SRClwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMsIHBIaXN0b3J5LT5tX2F1aUZyYW1lU2l6ZVtwSGlzdG9yeS0+bV9iUmVhZF0pOworLy8gICAgICAgIFBSSU5URjQoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiBpbml0ID0gJWQsIHJlYWQgPSAldSwgd3JpdGUgPSAldSwgYWNrID0gJXUiLCAoaW50KSBmSW5pdFJlYWRfcCwgKHUxNilwSGlzdG9yeS0+bV9iUmVhZCwgKHUxNilwSGlzdG9yeS0+bV9iV3JpdGUsICh1MTYpcEhpc3RvcnktPm1fYkFjayk7CisvLyAgICAgICAgUFJJTlRGMigiLCBmcmVlIGVudHJpZXMgPSAldSwgbmV4dCBmcmFtZSBzaXplID0gJXVcbiIsICh1MTYpcEhpc3RvcnktPm1fYkZyZWVFbnRyaWVzLCBwSGlzdG9yeS0+bV9hdWlGcmFtZVNpemVbcEhpc3RvcnktPm1fYlJlYWRdKTsKIAogCQkvLyByZXR1cm4gcG9pbnRlciB0byBzdG9yZWQgZnJhbWUKIAkJKnBwRnJhbWVfcCA9CkBAIC0yNDM5LDcgKzI0MzksNyBAQAogCQl9CiAKIAl9IGVsc2UgewotLy8gICAgICAgIFBSSU5URjMoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiByZWFkID0gJXUsIGFjayA9ICV1LCBmcmVlIGVudHJpZXMgPSAldSwgbm8gZnJhbWVcbiIsIChXT1JEKXBIaXN0b3J5LT5tX2JSZWFkLCAoV09SRClwSGlzdG9yeS0+bV9iQWNrLCAoV09SRClwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMpOworLy8gICAgICAgIFBSSU5URjMoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiByZWFkID0gJXUsIGFjayA9ICV1LCBmcmVlIGVudHJpZXMgPSAldSwgbm8gZnJhbWVcbiIsICh1MTYpcEhpc3RvcnktPm1fYlJlYWQsICh1MTYpcEhpc3RvcnktPm1fYkFjaywgKHUxNilwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMpOwogCiAJCS8vIG5vIG1vcmUgZnJhbWVzIHRvIHNlbmQKIAkJLy8gcmV0dXJuIG51bGwgcG9pbnRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Db211LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0NvbXUuYwppbmRleCBjZTBlYjMzLi5iZjM1YWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0NvbXUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0NvbXUuYwpAQCAtMTU2LDE0ICsxNTYsMTQgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsU2RvU2VxQ29uSGRsIG1fU2RvU2VxQ29uSGRsOwkvLyBpZiAhPSAwIC0+IGVudHJ5IHVzZWQKIAl0RXBsU2RvQ29tU3RhdGUgbV9TZG9Db21TdGF0ZTsKLQlCWVRFIG1fYlRyYW5zYWN0aW9uSWQ7CisJdTggbV9iVHJhbnNhY3Rpb25JZDsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gTm9kZUlkIG9mIHRoZSB0YXJnZXQKIAkvLyAtPiBuZWVkZWQgdG8gcmVpbml0IGNvbm5lY3Rpb24KIAkvLyAgICBhZnRlciB0aW1lb3V0CiAJdEVwbFNkb1RyYW5zVHlwZSBtX1Nkb1RyYW5zVHlwZTsJLy8gQXV0bywgRXhwZWRpdGVkLCBTZWdtZW50ZWQKIAl0RXBsU2RvU2VydmljZVR5cGUgbV9TZG9TZXJ2aWNlVHlwZTsJLy8gV3JpdGVCeUluZGV4LCBSZWFkQnlJbmRleAogCXRFcGxTZG9UeXBlIG1fU2RvUHJvdFR5cGU7CS8vIHByb3RvY29sIGxheWVyOiBBdXRvLCBVZHAsIEFzbmQsIFBkbwotCUJZVEUgKm1fcERhdGE7CQkvLyBwb2ludGVyIHRvIGRhdGEKKwl1OCAqbV9wRGF0YTsJCS8vIHBvaW50ZXIgdG8gZGF0YQogCXVuc2lnbmVkIGludCBtX3VpVHJhbnNTaXplOwkvLyBudW1iZXIgb2YgYnl0ZXMKIAkvLyB0byB0cmFuc2ZlcgogCXVuc2lnbmVkIGludCBtX3VpVHJhbnNmZXJyZWRCeXRlOwkvLyBudW1iZXIgb2YgYnl0ZXMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCS8vICAgIHRoZSBTRE8gdHJhbnNmZXIKIAl2b2lkICptX3BVc2VyQXJnOwkvLyB1c2VyIGRlZmluYWJsZSBhcmd1bWVudCBwb2ludGVyCiAKLQlEV09SRCBtX2R3TGFzdEFib3J0Q29kZTsJLy8gc2F2ZSB0aGUgbGFzdCBhYm9ydCBjb2RlCisJdTMyIG1fZHdMYXN0QWJvcnRDb2RlOwkvLyBzYXZlIHRoZSBsYXN0IGFib3J0IGNvZGUKICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCiAJLy8gb25seSBmb3IgY2xpZW50CiAJdW5zaWduZWQgaW50IG1fdWlUYXJnZXRJbmRleDsJLy8gaW5kZXggdG8gYWNjZXNzCkBAIC0yMDUsMTIgKzIwNSwxMiBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21SZWNlaXZlQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKLQkJCQkgICAgIHRFcGxBc3lTZG9Db20gKiBwQXN5U2RvQ29tX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tUmVjZWl2ZUNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkgICAgICB0RXBsQXN5U2RvQ29tICpwQXN5U2RvQ29tX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tQ29uQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKLQkJCQkgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21Db25DYih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAorCQkJICB0RXBsQXN5U2RvQ29uU3RhdGUgQXN5U2RvQ29uU3RhdGVfcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbFNkb0NvbVNlYXJjaENvbkludGVybih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAogCQkJCQkgICB0RXBsU2RvQ29tQ29uRXZlbnQgU2RvQ29tQ29uRXZlbnRfcCwKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQkJCQkgICAgICB0RXBsQXN5U2RvQ29tICogcEFzeVNkb0NvbV9wKTsKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsU2RvQ29tQ2xpZW50U2VuZEFib3J0KHRFcGxTZG9Db21Db24gKiBwU2RvQ29tQ29uX3AsCi0JCQkJCSAgIERXT1JEIGR3QWJvcnRDb2RlX3ApOworCQkJCQkgICB1MzIgZHdBYm9ydENvZGVfcCk7CiAjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI4NSw3ICsyODUsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUluaXQodm9pZCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tSW5pdCh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zMTIsNyArMzEyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21BZGRJbnN0YW5jZSh2b2lkKQordEVwbEtlcm5lbCBFcGxTZG9Db21BZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zNTQsNyArMzU0LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21EZWxJbnN0YW5jZSh2b2lkKQordEVwbEtlcm5lbCBFcGxTZG9Db21EZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zOTgsOSArMzk4LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbURlZmluZUNvbih0RXBsU2RvQ29tQ29uSGRsICogcFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3AsCi0JCQkJICAgICB0RXBsU2RvVHlwZSBQcm90VHlwZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Db21EZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3AsCisJCQkgICAgICB0RXBsU2RvVHlwZSBQcm90VHlwZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUNvdW50OwpAQCAtNTExLDggKzUxMSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21Jbml0VHJhbnNmZXJCeUluZGV4KHRFcGxTZG9Db21UcmFuc1BhcmFtQnlJbmRleCAqCi0JCQkJCSAgICAgICBwU2RvQ29tVHJhbnNQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxTZG9Db21Jbml0VHJhbnNmZXJCeUluZGV4KHRFcGxTZG9Db21UcmFuc1BhcmFtQnlJbmRleCAqcFNkb0NvbVRyYW5zUGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsU2RvQ29tQ29uICpwU2RvQ29tQ29uOwpAQCAtNjAzLDcgKzYwMiw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21VbmRlZmluZUNvbih0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKQordEVwbEtlcm5lbCBFcGxTZG9Db21VbmRlZmluZUNvbih0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxTZG9Db21Db24gKnBTZG9Db21Db247CkBAIC02NjksOCArNjY4LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUdldFN0YXRlKHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgIHRFcGxTZG9Db21GaW5pc2hlZCAqIHBTZG9Db21GaW5pc2hlZF9wKQordEVwbEtlcm5lbCBFcGxTZG9Db21HZXRTdGF0ZSh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB0RXBsU2RvQ29tRmluaXNoZWQgKnBTZG9Db21GaW5pc2hlZF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxTZG9Db21Db24gKnBTZG9Db21Db247CkBAIC03NDcsOCArNzQ2LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbVNkb0Fib3J0KHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgIERXT1JEIGR3QWJvcnRDb2RlX3ApCit0RXBsS2VybmVsIEVwbFNkb0NvbVNkb0Fib3J0KHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3AsCisJCQkgICAgIHUzMiBkd0Fib3J0Q29kZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxTZG9Db21Db24gKnBTZG9Db21Db247CkBAIC03NjYsNyArNzY1LDcgQEAKIAkJZ290byBFeGl0OwogCX0KIAkvLyBzYXZlIHBvaW50ZXIgdG8gYWJvcnQgY29kZQotCXBTZG9Db21Db24tPm1fcERhdGEgPSAoQllURSAqKSAmIGR3QWJvcnRDb2RlX3A7CisJcFNkb0NvbUNvbi0+bV9wRGF0YSA9ICh1OCAqKSAmIGR3QWJvcnRDb2RlX3A7CiAKIAlSZXQgPSBFcGxTZG9Db21Qcm9jZXNzSW50ZXJuKFNkb0NvbUNvbkhkbF9wLAogCQkJCSAgICAga0VwbFNkb0NvbUNvbkV2ZW50QWJvcnQsCkBAIC04MDMsOSArODAyLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21SZWNlaXZlQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKLQkJCQkgICAgIHRFcGxBc3lTZG9Db20gKiBwQXN5U2RvQ29tX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Db21SZWNlaXZlQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCSAgICAgIHRFcGxBc3lTZG9Db20gKnBBc3lTZG9Db21fcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTgxNSw3ICs4MTQsNyBAQAogCiAJRVBMX0RCR0xWTF9TRE9fVFJBQ0UzCiAJICAgICgiRXBsU2RvQ29tUmVjZWl2ZUNiIFNkb1NlcUNvbkhkbDogMHglWCwgRmlyc3QgQnl0ZSBvZiBwQXN5U2RvQ29tX3A6IDB4JTAyWCwgdWlEYXRhU2l6ZV9wOiAweCUwNFhcbiIsCi0JICAgICBTZG9TZXFDb25IZGxfcCwgKFdPUkQpIHBBc3lTZG9Db21fcC0+bV9sZV9hYkNvbW1hbmREYXRhWzBdLAorCSAgICAgU2RvU2VxQ29uSGRsX3AsICh1MTYpIHBBc3lTZG9Db21fcC0+bV9sZV9hYkNvbW1hbmREYXRhWzBdLAogCSAgICAgdWlEYXRhU2l6ZV9wKTsKIAogCXJldHVybiBSZXQ7CkBAIC04NDAsOCArODM5LDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21Db25DYih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAotCQkJCSB0RXBsQXN5U2RvQ29uU3RhdGUgQXN5U2RvQ29uU3RhdGVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tQ29uQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCSAgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbFNkb0NvbUNvbkV2ZW50IFNkb0NvbUNvbkV2ZW50ID0ga0VwbFNkb0NvbUNvbkV2ZW50U2VuZEZpcnN0OwpAQCAtOTk5LDEwICs5OTgsMTAgQEAKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsU2RvQ29tQ29uICpwU2RvQ29tQ29uOwotCUJZVEUgYkZsYWc7CisJdTggYkZsYWc7CiAKICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPUykpICE9IDApCi0JRFdPUkQgZHdBYm9ydENvZGU7CisJdTMyIGR3QWJvcnRDb2RlOwogCXVuc2lnbmVkIGludCB1aVNpemU7CiAjZW5kaWYKIApAQCAtMTEzOCw3ICsxMTM3LDcgQEAKIAkJCQkJCQkJCXBTZG9Db21Db24tPgogCQkJCQkJCQkJICAgIG1fcERhdGEKIAkJCQkJCQkJCSAgICA9Ci0JCQkJCQkJCQkgICAgKEJZVEUKKwkJCQkJCQkJCSAgICAodTgKIAkJCQkJCQkJCSAgICAgKikKIAkJCQkJCQkJCSAgICAmCiAJCQkJCQkJCQkgICAgZHdBYm9ydENvZGU7CkBAIC0xMjgzLDcgKzEyODIsNyBAQAogCQkJCQkJCWlmIChwU2RvQ29tQ29uLT4KIAkJCQkJCQkgICAgbV9kd0xhc3RBYm9ydENvZGUgPT0KIAkJCQkJCQkgICAgMCkgewotCQkJCQkJCQkoIC8qKEJZVEUqKSAqLworCQkJCQkJCQkoIC8qKHU4KikgKi8KIAkJCQkJCQkJIHBTZG9Db21Db24tPgogCQkJCQkJCQkgbV9wRGF0YSkgKz0KIAkJCQkJCSAgICAgIHVpU2l6ZTsKQEAgLTEzMjEsNyArMTMyMCw3IEBACiAJCQkJCQkJCQlwU2RvQ29tQ29uLT4KIAkJCQkJCQkJCSAgICBtX3BEYXRhCiAJCQkJCQkJCQkgICAgPQotCQkJCQkJCQkJICAgIChCWVRFCisJCQkJCQkJCQkgICAgKHU4CiAJCQkJCQkJCQkgICAgICopCiAJCQkJCQkJCQkgICAgJgogCQkJCQkJCQkJICAgIHBTZG9Db21Db24tPgpAQCAtMTY2Nyw3ICsxNjY2LDcgQEAKIAkJCWNhc2Uga0VwbFNkb0NvbUNvbkV2ZW50QWJvcnQ6CiAJCQkJewogCQkJCQlFcGxTZG9Db21DbGllbnRTZW5kQWJvcnQocFNkb0NvbUNvbiwKLQkJCQkJCQkJICooKERXT1JEICopCisJCQkJCQkJCSAqKCh1MzIgKikKIAkJCQkJCQkJICAgcFNkb0NvbUNvbi0+CiAJCQkJCQkJCSAgIG1fcERhdGEpKTsKIApAQCAtMTY3NSw3ICsxNjc0LDcgQEAKIAkJCQkJcFNkb0NvbUNvbi0+bV9iVHJhbnNhY3Rpb25JZCsrOwogCQkJCQkvLyBjYWxsIGNhbGxiYWNrIG9mIGFwcGxpY2F0aW9uCiAJCQkJCXBTZG9Db21Db24tPm1fZHdMYXN0QWJvcnRDb2RlID0KLQkJCQkJICAgICooKERXT1JEICopIHBTZG9Db21Db24tPm1fcERhdGEpOworCQkJCQkgICAgKigodTMyICopIHBTZG9Db21Db24tPm1fcERhdGEpOwogCQkJCQlSZXQgPQogCQkJCQkgICAgRXBsU2RvQ29tVHJhbnNmZXJGaW5pc2hlZAogCQkJCQkgICAgKFNkb0NvbUNvbl9wLCBwU2RvQ29tQ29uLApAQCAtMTg2OSw3ICsxODY4LDcgQEAKIAkJCWNhc2Uga0VwbFNkb0NvbUNvbkV2ZW50QWJvcnQ6CiAJCQkJewogCQkJCQlFcGxTZG9Db21DbGllbnRTZW5kQWJvcnQocFNkb0NvbUNvbiwKLQkJCQkJCQkJICooKERXT1JEICopCisJCQkJCQkJCSAqKCh1MzIgKikKIAkJCQkJCQkJICAgcFNkb0NvbUNvbi0+CiAJCQkJCQkJCSAgIG1fcERhdGEpKTsKIApAQCAtMTg4MCw3ICsxODc5LDcgQEAKIAkJCQkJICAgIGtFcGxTZG9Db21TdGF0ZUNsaWVudENvbm5lY3RlZDsKIAkJCQkJLy8gY2FsbCBjYWxsYmFjayBvZiBhcHBsaWNhdGlvbgogCQkJCQlwU2RvQ29tQ29uLT5tX2R3TGFzdEFib3J0Q29kZSA9Ci0JCQkJCSAgICAqKChEV09SRCAqKSBwU2RvQ29tQ29uLT5tX3BEYXRhKTsKKwkJCQkJICAgICooKHUzMiAqKSBwU2RvQ29tQ29uLT5tX3BEYXRhKTsKIAkJCQkJUmV0ID0KIAkJCQkJICAgIEVwbFNkb0NvbVRyYW5zZmVyRmluaXNoZWQKIAkJCQkJICAgIChTZG9Db21Db25fcCwgcFNkb0NvbUNvbiwKQEAgLTE5NjUsNyArMTk2NCw3IEBACiAJdW5zaWduZWQgaW50IHVpU3ViaW5kZXg7CiAJdEVwbE9iZFNpemUgRW50cnlTaXplOwogCXRFcGxPYmRBY2Nlc3MgQWNjZXNzVHlwZTsKLQlEV09SRCBkd0Fib3J0Q29kZTsKKwl1MzIgZHdBYm9ydENvZGU7CiAKIAlkd0Fib3J0Q29kZSA9IDA7CiAKQEAgLTE5ODcsNyArMTk4Niw3IEBACiAJaWYgKFJldCA9PSBrRXBsT2JkU3ViaW5kZXhOb3RFeGlzdCkgewkvLyBzdWJlbnRyeSBkb2Vzbid0IGV4aXN0CiAJCWR3QWJvcnRDb2RlID0gRVBMX1NET0FDX1NVQl9JTkRFWF9OT1RfRVhJU1Q7CiAJCS8vIHNlbmQgYWJvcnQKLQkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUgKikgJiBkd0Fib3J0Q29kZTsKKwkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4ICopICYgZHdBYm9ydENvZGU7CiAJCVJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCQkJCQkgICAgIHVpSW5kZXgsCiAJCQkJCQkgICAgIHVpU3ViaW5kZXgsCkBAIC0xOTk2LDcgKzE5OTUsNyBAQAogCX0gZWxzZSBpZiAoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKSB7CS8vIGVudHJ5IGRvZXNuJ3QgZXhpc3QKIAkJZHdBYm9ydENvZGUgPSBFUExfU0RPQUNfT0JKRUNUX05PVF9FWElTVDsKIAkJLy8gc2VuZCBhYm9ydAotCQlwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAoQllURSAqKSAmIGR3QWJvcnRDb2RlOworCQlwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTggKikgJiBkd0Fib3J0Q29kZTsKIAkJUmV0ID0gRXBsU2RvQ29tU2VydmVyU2VuZEZyYW1lSW50ZXJuKHBTZG9Db21Db25fcCwKIAkJCQkJCSAgICAgdWlJbmRleCwKIAkJCQkJCSAgICAgdWlTdWJpbmRleCwKQEAgLTIwMTQsNyArMjAxMyw3IEBACiAJCQlkd0Fib3J0Q29kZSA9IEVQTF9TRE9BQ19VTlNVUFBPUlRFRF9BQ0NFU1M7CiAJCX0KIAkJLy8gc2VuZCBhYm9ydAotCQlwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAoQllURSAqKSAmIGR3QWJvcnRDb2RlOworCQlwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTggKikgJiBkd0Fib3J0Q29kZTsKIAkJUmV0ID0gRXBsU2RvQ29tU2VydmVyU2VuZEZyYW1lSW50ZXJuKHBTZG9Db21Db25fcCwKIAkJCQkJCSAgICAgdWlJbmRleCwKIAkJCQkJCSAgICAgdWlTdWJpbmRleCwKQEAgLTIwNTEsNyArMjA1MCw3IEBACiAJCS8vIGVycm9yIC0+IGFib3J0CiAJCWR3QWJvcnRDb2RlID0gRVBMX1NET0FDX0dFTkVSQUxfRVJST1I7CiAJCS8vIHNlbmQgYWJvcnQKLQkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUgKikgJiBkd0Fib3J0Q29kZTsKKwkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4ICopICYgZHdBYm9ydENvZGU7CiAJCVJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCQkJCQkgICAgIHVpSW5kZXgsCiAJCQkJCQkgICAgIHVpU3ViaW5kZXgsCkBAIC0yMDkwLDExICsyMDg5LDExIEBACiAJCQkJCQkgdEVwbFNkb0NvbVNlbmRUeXBlIFNlbmRUeXBlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JQllURSBhYkZyYW1lW0VQTF9NQVhfU0RPX0ZSQU1FX1NJWkVdOworCXU4IGFiRnJhbWVbRVBMX01BWF9TRE9fRlJBTUVfU0laRV07CiAJdEVwbEZyYW1lICpwRnJhbWU7CiAJdEVwbEFzeVNkb0NvbSAqcENvbW1hbmRGcmFtZTsKIAl1bnNpZ25lZCBpbnQgdWlTaXplT2ZGcmFtZTsKLQlCWVRFIGJGbGFnOworCXU4IGJGbGFnOwogCiAJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTIxNjcsNyArMjE2Niw3IEBACiAJCQkJLy8gc2V0IHNpemUgb2YgZnJhbWUKIAkJCQlBbWlTZXRXb3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+CiAJCQkJCSAgICAgICBtX2xlX3dTZWdtZW50U2l6ZSwKLQkJCQkJICAgICAgIChXT1JEKSBwU2RvQ29tQ29uX3AtPgorCQkJCQkgICAgICAgKHUxNikgcFNkb0NvbUNvbl9wLT4KIAkJCQkJICAgICAgIG1fdWlUcmFuc1NpemUpOwogCiAJCQkJLy8gY29ycmVjdCBieXRlLWNvdW50ZXIKQEAgLTIyOTcsNyArMjI5Niw3IEBACiAJCQkJCS8vIHNldCBzZWdtZW50IHNpemUKIAkJCQkJQW1pU2V0V29yZFRvTGUoJnBDb21tYW5kRnJhbWUtPgogCQkJCQkJICAgICAgIG1fbGVfd1NlZ21lbnRTaXplLAotCQkJCQkJICAgICAgIChXT1JEKSBwU2RvQ29tQ29uX3AtPgorCQkJCQkJICAgICAgICh1MTYpIHBTZG9Db21Db25fcC0+CiAJCQkJCQkgICAgICAgbV91aVRyYW5zU2l6ZSk7CiAKIAkJCQkJLy8gc2VuZCBmcmFtZQpAQCAtMjMyNCwxOCArMjMyMywxOCBAQAogCiAJCQkvLyBjb3B5IGFib3J0Y29kZSB0byBmcmFtZQogCQkJQW1pU2V0RHdvcmRUb0xlKCZwQ29tbWFuZEZyYW1lLT5tX2xlX2FiQ29tbWFuZERhdGFbMF0sCi0JCQkJCSooKERXT1JEICopIHBTZG9Db21Db25fcC0+bV9wRGF0YSkpOworCQkJCQkqKCh1MzIgKikgcFNkb0NvbUNvbl9wLT5tX3BEYXRhKSk7CiAKIAkJCS8vIHNldCBzaXplIG9mIHNlZ21lbnQKIAkJCUFtaVNldFdvcmRUb0xlKCZwQ29tbWFuZEZyYW1lLT5tX2xlX3dTZWdtZW50U2l6ZSwKLQkJCQkgICAgICAgc2l6ZW9mKERXT1JEKSk7CisJCQkJICAgICAgIHNpemVvZih1MzIpKTsKIAogCQkJLy8gdXBkYXRlIGNvdW50ZXIKLQkJCXBTZG9Db21Db25fcC0+bV91aVRyYW5zZmVycmVkQnl0ZSA9IHNpemVvZihEV09SRCk7CisJCQlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc2ZlcnJlZEJ5dGUgPSBzaXplb2YodTMyKTsKIAkJCXBTZG9Db21Db25fcC0+bV91aVRyYW5zU2l6ZSA9IDA7CiAKIAkJCS8vIGNhbGMgZnJhbWVzaXplCi0JCQl1aVNpemVPZkZyYW1lICs9IHNpemVvZihEV09SRCk7CisJCQl1aVNpemVPZkZyYW1lICs9IHNpemVvZih1MzIpOwogCQkJUmV0ID0gRXBsU2RvQXN5U2VxU2VuZERhdGEocFNkb0NvbUNvbl9wLT5tX1Nkb1NlcUNvbkhkbCwKIAkJCQkJCSAgIHVpU2l6ZU9mRnJhbWUsIHBGcmFtZSk7CiAJCQlicmVhazsKQEAgLTIzNzMsOCArMjM3Miw4IEBACiAJdW5zaWduZWQgaW50IHVpQnl0ZXNUb1RyYW5zZmVyOwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKIAl0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGU7Ci0JRFdPUkQgZHdBYm9ydENvZGU7Ci0JQllURSAqcGJTcmNEYXRhOworCXUzMiBkd0Fib3J0Q29kZTsKKwl1OCAqcGJTcmNEYXRhOwogCiAJZHdBYm9ydENvZGUgPSAwOwogCkBAIC0yNDI3LDcgKzI0MjYsNyBAQAogCQlwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlID0gRVBMX1NET0FDX1NVQl9JTkRFWF9OT1RfRVhJU1Q7CiAJCS8vIHNlbmQgYWJvcnQKIAkJLy8gZC5rLiBUaGlzIGlzIHdyb25nOiBrLnQuIG5vdCBuZWVkZWQgc2VuZCBhYm9ydCBvbiBlbmQgb2Ygd3JpdGUKLQkJLypwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAoQllURSopcFNkb0NvbUNvbl9wLT5tX2R3TGFzdEFib3J0Q29kZTsKKwkJLypwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTgqKXBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGU7CiAJCSAgIFJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCSAgIHVpSW5kZXgsCiAJCSAgIHVpU3ViaW5kZXgsCkBAIC0yNDM4LDcgKzI0MzcsNyBAQAogCQkvLyBzZW5kIGFib3J0CiAJCS8vIGQuay4gVGhpcyBpcyB3cm9uZzogay50LiBub3QgbmVlZGVkIHNlbmQgYWJvcnQgb24gZW5kIG9mIHdyaXRlCiAJCS8qCi0JCSAgIHBTZG9Db21Db25fcC0+bV9wRGF0YSA9IChCWVRFKikmZHdBYm9ydENvZGU7CisJCSAgIHBTZG9Db21Db25fcC0+bV9wRGF0YSA9ICh1OCopJmR3QWJvcnRDb2RlOwogCQkgICBSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkgICB1aUluZGV4LAogCQkgICB1aVN1YmluZGV4LApAQCAtMjQ1OCw3ICsyNDU3LDcgQEAKIAkJfQogCQkvLyBzZW5kIGFib3J0CiAJCS8vIGQuay4gVGhpcyBpcyB3cm9uZzogay50LiBub3QgbmVlZGVkIHNlbmQgYWJvcnQgb24gZW5kIG9mIHdyaXRlCi0JCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUqKSZkd0Fib3J0Q29kZTsKKwkJLypwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTgqKSZkd0Fib3J0Q29kZTsKIAkJICAgUmV0ID0gRXBsU2RvQ29tU2VydmVyU2VuZEZyYW1lSW50ZXJuKHBTZG9Db21Db25fcCwKIAkJICAgdWlJbmRleCwKIAkJICAgdWlTdWJpbmRleCwKQEAgLTI1NDksNyArMjU0OCw3IEBACiAJCQkgICAgRVBMX1NET0FDX0RBVEFfVFlQRV9MRU5HVEhfVE9PX0hJR0g7CiAJCQkvLyBzZW5kIGFib3J0CiAJCQkvLyBkLmsuIFRoaXMgaXMgd3Jvbmc6IGsudC4gbm90IG5lZWRlZCBzZW5kIGFib3J0IG9uIGVuZCBvZiB3cml0ZQotCQkJLypwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAoQllURSopJmR3QWJvcnRDb2RlOworCQkJLypwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTgqKSZkd0Fib3J0Q29kZTsKIAkJCSAgIFJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCQkgICB1aUluZGV4LAogCQkJICAgdWlTdWJpbmRleCwKQEAgLTI1NzEsNyArMjU3MCw3IEBACiAJCQkgICAgRVBMX1NET0FDX0dFTkVSQUxfRVJST1I7CiAJCQkvLyBzZW5kIGFib3J0CiAJCQkvLyBkLmsuIFRoaXMgaXMgd3Jvbmc6IGsudC4gbm90IG5lZWRlZCBzZW5kIGFib3J0IG9uIGVuZCBvZiB3cml0ZQotLyogICAgICAgICAgICBwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAoQllURSopJnBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGU7CisvKiAgICAgICAgICAgIHBTZG9Db21Db25fcC0+bV9wRGF0YSA9ICh1OCopJnBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGU7CiAgICAgICAgICAgICBSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlTdWJpbmRleCwKQEAgLTI1ODYsNyArMjU4NSw3IEBACiAJCXBTZG9Db21Db25fcC0+bV91aVRyYW5zU2l6ZSAtPSB1aUJ5dGVzVG9UcmFuc2ZlcjsKIAogCQkvLyB1cGRhdGUgdGFyZ2V0IHBvaW50ZXIKLQkJKCAvKihCWVRFKikgKi8gcFNkb0NvbUNvbl9wLT5tX3BEYXRhKSArPSB1aUJ5dGVzVG9UcmFuc2ZlcjsKKwkJKCAvKih1OCopICovIHBTZG9Db21Db25fcC0+bV9wRGF0YSkgKz0gdWlCeXRlc1RvVHJhbnNmZXI7CiAKIAkJLy8gc2VuZCBhY2tub3dsZWRnZSB3aXRob3V0IGFueSBDb21tYW5kIGxheWVyIGRhdGEKIAkJUmV0ID0gRXBsU2RvQXN5U2VxU2VuZERhdGEocFNkb0NvbUNvbl9wLT5tX1Nkb1NlcUNvbkhkbCwKQEAgLTI1OTgsNyArMjU5Nyw3IEBACiAJaWYgKHBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGUgIT0gMCkgewogCQkvLyBzZW5kIGFib3J0CiAJCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9Ci0JCSAgICAoQllURSAqKSAmIHBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGU7CisJCSAgICAodTggKikgJiBwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOwogCQlSZXQgPQogCQkgICAgRXBsU2RvQ29tU2VydmVyU2VuZEZyYW1lSW50ZXJuKHBTZG9Db21Db25fcCwgdWlJbmRleCwKIAkJCQkJCSAgIHVpU3ViaW5kZXgsCkBAIC0yNjM1LDEyICsyNjM0LDEyIEBACiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Db21DbGllbnRTZW5kKHRFcGxTZG9Db21Db24gKiBwU2RvQ29tQ29uX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JQllURSBhYkZyYW1lW0VQTF9NQVhfU0RPX0ZSQU1FX1NJWkVdOworCXU4IGFiRnJhbWVbRVBMX01BWF9TRE9fRlJBTUVfU0laRV07CiAJdEVwbEZyYW1lICpwRnJhbWU7CiAJdEVwbEFzeVNkb0NvbSAqcENvbW1hbmRGcmFtZTsKIAl1bnNpZ25lZCBpbnQgdWlTaXplT2ZGcmFtZTsKLQlCWVRFIGJGbGFnczsKLQlCWVRFICpwYlBheWxvYWQ7CisJdTggYkZsYWdzOworCXU4ICpwYlBheWxvYWQ7CiAKIAlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMjY4MCwxMSArMjY3OSwxMSBAQAogCiAJCQkJCS8vIGNyZWF0ZSBjb21tYW5kIGhlYWRlcgogCQkJCQlBbWlTZXRXb3JkVG9MZShwYlBheWxvYWQsCi0JCQkJCQkgICAgICAgKFdPUkQpIHBTZG9Db21Db25fcC0+CisJCQkJCQkgICAgICAgKHUxNikgcFNkb0NvbUNvbl9wLT4KIAkJCQkJCSAgICAgICBtX3VpVGFyZ2V0SW5kZXgpOwogCQkJCQlwYlBheWxvYWQgKz0gMjsKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUocGJQYXlsb2FkLAotCQkJCQkJICAgICAgIChCWVRFKSBwU2RvQ29tQ29uX3AtPgorCQkJCQkJICAgICAgICh1OCkgcFNkb0NvbUNvbl9wLT4KIAkJCQkJCSAgICAgICBtX3VpVGFyZ2V0U3ViSW5kZXgpOwogCQkJCQkvLyBjYWxjIHNpemUKIAkJCQkJdWlTaXplT2ZGcmFtZSArPSA0OwpAQCAtMjcyMSwxMiArMjcyMCwxMiBAQAogCQkJCQkJCSAgICAgICBiRmxhZ3MpOwogCQkJCQkJLy8gY3JlYXRlIGNvbW1hbmQgaGVhZGVyCiAJCQkJCQlBbWlTZXRXb3JkVG9MZShwYlBheWxvYWQsCi0JCQkJCQkJICAgICAgIChXT1JEKQorCQkJCQkJCSAgICAgICAodTE2KQogCQkJCQkJCSAgICAgICBwU2RvQ29tQ29uX3AtPgogCQkJCQkJCSAgICAgICBtX3VpVGFyZ2V0SW5kZXgpOwogCQkJCQkJcGJQYXlsb2FkICs9IDI7CiAJCQkJCQlBbWlTZXRCeXRlVG9MZShwYlBheWxvYWQsCi0JCQkJCQkJICAgICAgIChCWVRFKQorCQkJCQkJCSAgICAgICAodTgpCiAJCQkJCQkJICAgICAgIHBTZG9Db21Db25fcC0+CiAJCQkJCQkJICAgICAgIG1fdWlUYXJnZXRTdWJJbmRleCk7CiAJCQkJCQkvLyBvbiBieXRlIGZvciByZXNlcnZlZApAQCAtMjc2MCwxMiArMjc1OSwxMiBAQAogCiAJCQkJCQkvLyBjcmVhdGUgY29tbWFuZCBoZWFkZXIKIAkJCQkJCUFtaVNldFdvcmRUb0xlKHBiUGF5bG9hZCwKLQkJCQkJCQkgICAgICAgKFdPUkQpCisJCQkJCQkJICAgICAgICh1MTYpCiAJCQkJCQkJICAgICAgIHBTZG9Db21Db25fcC0+CiAJCQkJCQkJICAgICAgIG1fdWlUYXJnZXRJbmRleCk7CiAJCQkJCQlwYlBheWxvYWQgKz0gMjsKIAkJCQkJCUFtaVNldEJ5dGVUb0xlKHBiUGF5bG9hZCwKLQkJCQkJCQkgICAgICAgKEJZVEUpCisJCQkJCQkJICAgICAgICh1OCkKIAkJCQkJCQkgICAgICAgcFNkb0NvbUNvbl9wLT4KIAkJCQkJCQkgICAgICAgbV91aVRhcmdldFN1YkluZGV4KTsKIAkJCQkJCS8vICsgMiAtPiBvbmUgYnl0ZSBmb3Igc3ViaW5kZXggYW5kIG9uZSBieXRlIHJlc2VydmVkCkBAIC0yNzg0LDcgKzI3ODMsNyBAQAogCQkJCQkJLy8gZmlsbCByZXN0IG9mIGhlYWRlcgogCQkJCQkJQW1pU2V0V29yZFRvTGUoJnBDb21tYW5kRnJhbWUtPgogCQkJCQkJCSAgICAgICBtX2xlX3dTZWdtZW50U2l6ZSwKLQkJCQkJCQkgICAgICAgKFdPUkQpICg0ICsKKwkJCQkJCQkgICAgICAgKHUxNikgKDQgKwogCQkJCQkJCQkgICAgICAgcFNkb0NvbUNvbl9wLT4KIAkJCQkJCQkJICAgICAgIG1fdWlUcmFuc1NpemUpKTsKIApAQCAtMjg1NSw3ICsyODU0LDcgQEAKIAkJCQkJCQlBbWlTZXRXb3JkVG9MZQogCQkJCQkJCSAgICAoJnBDb21tYW5kRnJhbWUtPgogCQkJCQkJCSAgICAgbV9sZV93U2VnbWVudFNpemUsCi0JCQkJCQkJICAgICAoV09SRCkKKwkJCQkJCQkgICAgICh1MTYpCiAJCQkJCQkJICAgICBwU2RvQ29tQ29uX3AtPgogCQkJCQkJCSAgICAgbV91aVRyYW5zU2l6ZSk7CiAJCQkJCQkJYkZsYWdzID0gMHgzMDsKQEAgLTI5NDQsNyArMjk0Myw3IEBACiAJCQkJCSAgICAgIHRFcGxBc3lTZG9Db20gKiBwQXN5U2RvQ29tX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JQllURSBiQnVmZmVyOworCXU4IGJCdWZmZXI7CiAJdW5zaWduZWQgaW50IHVpQnVmZmVyOwogCXVuc2lnbmVkIGludCB1aURhdGFTaXplOwogCXVuc2lnbmVkIGxvbmcgdWxCdWZmZXI7CkBAIC0zMjE3LDEwICszMjE2LDEwIEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKIHN0YXRpYyB0RXBsS2VybmVsIEVwbFNkb0NvbUNsaWVudFNlbmRBYm9ydCh0RXBsU2RvQ29tQ29uICogcFNkb0NvbUNvbl9wLAotCQkJCQkgICBEV09SRCBkd0Fib3J0Q29kZV9wKQorCQkJCQkgICB1MzIgZHdBYm9ydENvZGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKLQlCWVRFIGFiRnJhbWVbRVBMX01BWF9TRE9fRlJBTUVfU0laRV07CisJdTggYWJGcmFtZVtFUExfTUFYX1NET19GUkFNRV9TSVpFXTsKIAl0RXBsRnJhbWUgKnBGcmFtZTsKIAl0RXBsQXN5U2RvQ29tICpwQ29tbWFuZEZyYW1lOwogCXVuc2lnbmVkIGludCB1aVNpemVPZkZyYW1lOwpAQCAtMzI1MCwxNCArMzI0OSwxNCBAQAogCUFtaVNldER3b3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+bV9sZV9hYkNvbW1hbmREYXRhWzBdLCBkd0Fib3J0Q29kZV9wKTsKIAogCS8vIHNldCBzaXplIG9mIHNlZ21lbnQKLQlBbWlTZXRXb3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+bV9sZV93U2VnbWVudFNpemUsIHNpemVvZihEV09SRCkpOworCUFtaVNldFdvcmRUb0xlKCZwQ29tbWFuZEZyYW1lLT5tX2xlX3dTZWdtZW50U2l6ZSwgc2l6ZW9mKHUzMikpOwogCiAJLy8gdXBkYXRlIGNvdW50ZXIKLQlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc2ZlcnJlZEJ5dGUgPSBzaXplb2YoRFdPUkQpOworCXBTZG9Db21Db25fcC0+bV91aVRyYW5zZmVycmVkQnl0ZSA9IHNpemVvZih1MzIpOwogCXBTZG9Db21Db25fcC0+bV91aVRyYW5zU2l6ZSA9IDA7CiAKIAkvLyBjYWxjIGZyYW1lc2l6ZQotCXVpU2l6ZU9mRnJhbWUgKz0gc2l6ZW9mKERXT1JEKTsKKwl1aVNpemVPZkZyYW1lICs9IHNpemVvZih1MzIpOwogCiAJLy8gc2F2ZSBhYm9ydCBjb2RlCiAJcFNkb0NvbUNvbl9wLT5tX2R3TGFzdEFib3J0Q29kZSA9IGR3QWJvcnRDb2RlX3A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb1VkcHUuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvVWRwdS5jCmluZGV4IGJlNTIyMzMuLmI0MDljOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvVWRwdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvVWRwdS5jCkBAIC03MiwxMSArNzIsOSBAQAogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9fVURQKSkgIT0gMCkKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKICNpbmNsdWRlICJTb2NrZXRMaW51eEtlcm5lbC5oIgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTEwLDE3ICsxMDgsOSBAQAogCXRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgbV9mcFNkb0FzeVNlcUNiOwogCVNPQ0tFVCBtX1VkcFNvY2tldDsKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JSEFORExFIG1fVGhyZWFkSGFuZGxlOwotCUxQQ1JJVElDQUxfU0VDVElPTiBtX3BDcml0aWNhbFNlY3Rpb247Ci0JQ1JJVElDQUxfU0VDVElPTiBtX0NyaXRpY2FsU2VjdGlvbjsKLQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCXN0cnVjdCBjb21wbGV0aW9uIG1fQ29tcGxldGlvblVkcFRocmVhZDsKIAlpbnQgbV9UaHJlYWRIYW5kbGU7CiAJaW50IG1faVRlcm1pbmF0ZVRocmVhZDsKLSNlbmRpZgotCiB9IHRFcGxTZG9VZHBJbnN0YW5jZTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMywxMiArMTIzLDcgQEAKIC8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotc3RhdGljIERXT1JEIFBVQkxJQyBFcGxTZG9VZHBUaHJlYWQoTFBWT0lEIGxwUGFyYW1ldGVyKTsKLQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogc3RhdGljIGludCBFcGxTZG9VZHBUaHJlYWQodm9pZCAqcEFyZ19wKTsKLSNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE3Nyw3ICsxNjIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVJbml0KHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCkKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUluaXQodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yMDUsMTYgKzE5MCwxMCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVBZGRJbnN0YW5jZSh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCit0RXBsS2VybmVsIEVwbFNkb1VkcHVBZGRJbnN0YW5jZSh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCWludCBpRXJyb3I7Ci0JV1NBREFUQSBXc2E7Ci0KLSNlbmRpZgotCiAJLy8gc2V0IGluc3RhbmNlIHZhcmlhYmxlcyB0byAwCiAJRVBMX01FTVNFVCgmU2RvVWRwSW5zdGFuY2VfZywgMHgwMCwgc2l6ZW9mKFNkb1VkcEluc3RhbmNlX2cpKTsKIApAQCAtMjI4LDI0ICsyMDcsOCBAQAogCQlnb3RvIEV4aXQ7CiAJfQogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkvLyBzdGFydCB3aW5zb2NrMiBmb3Igd2luMzIKLQkvLyB3aW5kb3dzIHNwZWNpZmljIHN0YXJ0IG9mIHNvY2tldAotCWlFcnJvciA9IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwgMCksICZXc2EpOwotCWlmIChpRXJyb3IgIT0gMCkgewotCQlSZXQgPSBrRXBsU2RvVWRwTm9Tb2NrZXQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gY3JlYXRlIGNyaXRpY2FsIHNlY3Rpb24gZm9yIGFjY2Nlc3Mgb2YgaW5zdG5hY2UgdmFyaWFibGVzCi0JU2RvVWRwSW5zdGFuY2VfZy5tX3BDcml0aWNhbFNlY3Rpb24gPQotCSAgICAmU2RvVWRwSW5zdGFuY2VfZy5tX0NyaXRpY2FsU2VjdGlvbjsKLQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKFNkb1VkcEluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCWluaXRfY29tcGxldGlvbigmU2RvVWRwSW5zdGFuY2VfZy5tX0NvbXBsZXRpb25VZHBUaHJlYWQpOwogCVNkb1VkcEluc3RhbmNlX2cubV9pVGVybWluYXRlVGhyZWFkID0gMDsKLSNlbmRpZgotCiAJU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSA9IDA7CiAJU2RvVWRwSW5zdGFuY2VfZy5tX1VkcFNvY2tldCA9IElOVkFMSURfU09DS0VUOwogCkBAIC0yNzMsMzIgKzIzNiwxOCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFNkb1VkcHVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQlCT09MIGZUZXJtRXJyb3I7Ci0jZW5kaWYKLQogCVJldCA9IGtFcGxTdWNjZXNzZnVsOwogCiAJaWYgKFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgIT0gMCkgewkvLyBsaXN0ZW4gdGhyZWFkIHdhcyBzdGFydGVkCiAJCS8vIGNsb3NlIHRocmVhZAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JCWZUZXJtRXJyb3IgPQotCQkgICAgVGVybWluYXRlVGhyZWFkKFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUsIDApOwotCQlpZiAoZlRlcm1FcnJvciA9PSBGQUxTRSkgewotCQkJUmV0ID0ga0VwbFNkb1VkcFRocmVhZEVycm9yOwotCQkJZ290byBFeGl0OwotCQl9Ci0jZWxpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJCVNkb1VkcEluc3RhbmNlX2cubV9pVGVybWluYXRlVGhyZWFkID0gMTsKIAkJLyoga2lsbF9wcm9jKFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUsIFNJR1RFUk0sIDEgKTsgKi8KIAkJc2VuZF9zaWcoU0lHVEVSTSwgU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSwgMSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJlNkb1VkcEluc3RhbmNlX2cubV9Db21wbGV0aW9uVWRwVGhyZWFkKTsKLSNlbmRpZgotCiAJCVNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPSAwOwogCX0KIApAQCAtMzA3LDE5ICsyNTYsNiBAQAogCQljbG9zZXNvY2tldChTZG9VZHBJbnN0YW5jZV9nLm1fVWRwU29ja2V0KTsKIAkJU2RvVWRwSW5zdGFuY2VfZy5tX1VkcFNvY2tldCA9IElOVkFMSURfU09DS0VUOwogCX0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCS8vIGRlbGV0ZSBjcml0aWNhbCBzZWN0aW9uCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKFNkb1VkcEluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLSNlbmRpZgotCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkvLyBmb3Igd2luIDMyCi0JV1NBQ2xlYW51cCgpOwotI2VuZGlmCi0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotICAgICAgRXhpdDoKLSNlbmRpZgogCXJldHVybiBSZXQ7CiB9CiAKQEAgLTM0MCwxOCArMjc2LDEyIEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUNvbmZpZyh1bnNpZ25lZCBsb25nIHVsSXBBZGRyX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpUG9ydF9wKQordEVwbEtlcm5lbCBFcGxTZG9VZHB1Q29uZmlnKHVuc2lnbmVkIGxvbmcgdWxJcEFkZHJfcCwgdW5zaWduZWQgaW50IHVpUG9ydF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXN0cnVjdCBzb2NrYWRkcl9pbiBBZGRyOwogCWludCBpRXJyb3I7CiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCUJPT0wgZlRlcm1FcnJvcjsKLQl1bnNpZ25lZCBsb25nIHVsVGhyZWFkSWQ7Ci0jZW5kaWYKLQogCVJldCA9IGtFcGxTdWNjZXNzZnVsOwogCiAJaWYgKHVpUG9ydF9wID09IDApIHsJLy8gc2V0IFVEUCBwb3J0IHRvIGRlZmF1bHQgcG9ydCBudW1iZXIKQEAgLTM2NCwyMSArMjk0LDExIEBACiAJaWYgKFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgIT0gMCkgewkvLyBsaXN0ZW4gdGhyZWFkIHdhcyBzdGFydGVkCiAKIAkJLy8gY2xvc2Ugb2xkIHRocmVhZAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JCWZUZXJtRXJyb3IgPQotCQkgICAgVGVybWluYXRlVGhyZWFkKFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUsIDApOwotCQlpZiAoZlRlcm1FcnJvciA9PSBGQUxTRSkgewotCQkJUmV0ID0ga0VwbFNkb1VkcFRocmVhZEVycm9yOwotCQkJZ290byBFeGl0OwotCQl9Ci0jZWxpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJCVNkb1VkcEluc3RhbmNlX2cubV9pVGVybWluYXRlVGhyZWFkID0gMTsKIAkJLyoga2lsbF9wcm9jKFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUsIFNJR1RFUk0sIDEgKTsgKi8KIAkJc2VuZF9zaWcoU0lHVEVSTSwgU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSwgMSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJlNkb1VkcEluc3RhbmNlX2cubV9Db21wbGV0aW9uVWRwVGhyZWFkKTsKIAkJU2RvVWRwSW5zdGFuY2VfZy5tX2lUZXJtaW5hdGVUaHJlYWQgPSAwOwotI2VuZGlmCi0KIAkJU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSA9IDA7CiAJfQogCkBAIC00MTMsMjggKzMzMywxMiBAQAogCQlnb3RvIEV4aXQ7CiAJfQogCS8vIGNyZWF0ZSBMaXN0ZW4tVGhyZWFkCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkvLyBmb3Igd2luMzIKLQotCS8vIGNyZWF0ZSB0aHJlYWQKLQlTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlID0gQ3JlYXRlVGhyZWFkKE5VTEwsCi0JCQkJCQkgICAgICAgMCwKLQkJCQkJCSAgICAgICBFcGxTZG9VZHBUaHJlYWQsCi0JCQkJCQkgICAgICAgJlNkb1VkcEluc3RhbmNlX2csCi0JCQkJCQkgICAgICAgMCwgJnVsVGhyZWFkSWQpOwotCWlmIChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFNkb1VkcFRocmVhZEVycm9yOwotCQlnb3RvIEV4aXQ7Ci0JfQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQotCiAJU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSA9CiAJICAgIGtlcm5lbF90aHJlYWQoRXBsU2RvVWRwVGhyZWFkLCAmU2RvVWRwSW5zdGFuY2VfZywgQ0xPTkVfS0VSTkVMKTsKIAlpZiAoU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSA9PSAwKSB7CiAJCVJldCA9IGtFcGxTZG9VZHBUaHJlYWRFcnJvcjsKIAkJZ290byBFeGl0OwogCX0KLSNlbmRpZgogCiAgICAgICBFeGl0OgogCXJldHVybiBSZXQ7CkBAIC00NTksOCArMzYzLDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1SW5pdENvbih0RXBsU2RvQ29uSGRsICogcFNkb0NvbkhhbmRsZV9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUluaXRDb24odEVwbFNkb0NvbkhkbCAqcFNkb0NvbkhhbmRsZV9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl1bnNpZ25lZCBpbnQgdWlDb3VudDsKQEAgLTUyNiw4ICs0MzAsOCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAotCQkJCSAgICAgdEVwbEZyYW1lICogcFNyY0RhdGFfcCwgRFdPUkQgZHdEYXRhU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxTZG9VZHB1U2VuZERhdGEodEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgIHRFcGxGcmFtZSAqcFNyY0RhdGFfcCwgdTMyIGR3RGF0YVNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAlpbnQgaUVycm9yOwpAQCAtNTUzLDIyICs0NTcsMTIgQEAKIAogCS8vIGNhbGwgc2VuZHRvCiAJQWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCS8vIGVudGVyICBjcml0aWNhbCBzZWN0aW9uIGZvciBwcm9jZXNzIGZ1bmN0aW9uCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oU2RvVWRwSW5zdGFuY2VfZy5tX3BDcml0aWNhbFNlY3Rpb24pOwotI2VuZGlmCi0KIAlBZGRyLnNpbl9wb3J0ID0KIAkgICAgKHVuc2lnbmVkIHNob3J0KVNkb1VkcEluc3RhbmNlX2cubV9hU2RvQWJzVWRwQ29ubmVjdGlvblt1aUFycmF5XS4KIAkgICAgbV91aVBvcnQ7CiAJQWRkci5zaW5fYWRkci5zX2FkZHIgPQogCSAgICBTZG9VZHBJbnN0YW5jZV9nLm1fYVNkb0Fic1VkcENvbm5lY3Rpb25bdWlBcnJheV0ubV91bElwQWRkcjsKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKFNkb1VkcEluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLSNlbmRpZgotCiAJaUVycm9yID0gc2VuZHRvKFNkb1VkcEluc3RhbmNlX2cubV9VZHBTb2NrZXQsCS8vIHNvY2tldGhhbmRsZQogCQkJKGNvbnN0IGNoYXIgKikmcFNyY0RhdGFfcC0+bV9sZV9iTWVzc2FnZVR5cGUsCS8vIGRhdGEgdG8gc2VuZAogCQkJZHdEYXRhU2l6ZV9wLAkvLyBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZApAQCAtNjAzLDcgKzQ5Nyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdURlbENvbih0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wKQordEVwbEtlcm5lbCBFcGxTZG9VZHB1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQXJyYXk7CkBAIC02NDIsMTcgKzUzNiwxMyBAQAogLy8gUGFyYW1ldGVyczogICAgICBscFBhcmFtZXRlciA9IHBvaW50ZXIgdG8gcGFyYW1ldGVyIHR5cGUgdEVwbFNkb1VkcFRocmVhZFBhcmEKIC8vCiAvLwotLy8gUmV0dXJuczogICAgICAgICBEV09SRCAgID0gICBlcnJvcmNvZGUKKy8vIFJldHVybnM6ICAgICAgICAgdTMyICAgPSAgIGVycm9yY29kZQogLy8KIC8vCiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi1zdGF0aWMgRFdPUkQgUFVCTElDIEVwbFNkb1VkcFRocmVhZChMUFZPSUQgbHBQYXJhbWV0ZXIpCi0jZWxpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiBzdGF0aWMgaW50IEVwbFNkb1VkcFRocmVhZCh2b2lkICpwQXJnX3ApCi0jZW5kaWYKIHsKIAogCXRFcGxTZG9VZHBJbnN0YW5jZSAqcEluc3RhbmNlOwpAQCAtNjYwLDIxICs1NTAsMTUgQEAKIAlpbnQgaUVycm9yOwogCWludCBpQ291bnQ7CiAJaW50IGlGcmVlRW50cnk7Ci0JQllURSBhYkJ1ZmZlcltFUExfTUFYX1NET19SRUNfRlJBTUVfU0laRV07CisJdTggYWJCdWZmZXJbRVBMX01BWF9TRE9fUkVDX0ZSQU1FX1NJWkVdOwogCXVuc2lnbmVkIGludCB1aVNpemU7CiAJdEVwbFNkb0NvbkhkbCBTZG9Db25IZGw7CiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCXBJbnN0YW5jZSA9ICh0RXBsU2RvVWRwSW5zdGFuY2UgKikgbHBQYXJhbWV0ZXI7Ci0KLQlmb3IgKDs7KQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCXBJbnN0YW5jZSA9ICh0RXBsU2RvVWRwSW5zdGFuY2UgKikgcEFyZ19wOwogCWRhZW1vbml6ZSgiRXBsU2RvVWRwVGhyZWFkIik7CiAJYWxsb3dfc2lnbmFsKFNJR1RFUk0pOwogCiAJZm9yICg7IHBJbnN0YW5jZS0+bV9pVGVybWluYXRlVGhyZWFkID09IDA7KQotI2VuZGlmCiAKIAl7CiAJCS8vIHdhaXQgZm9yIGRhdGEKQEAgLTY4NSwyMCArNTY5LDEzIEBACiAJCQkJICAwLAkvLyBmbGFncwogCQkJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZSZW1vdGVBZGRyLAogCQkJCSAgKGludCAqKSZ1aVNpemUpOwotI2lmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIAkJaWYgKGlFcnJvciA9PSAtRVJFU1RBUlRTWVMpIHsKIAkJCWJyZWFrOwogCQl9Ci0jZW5kaWYKIAkJaWYgKGlFcnJvciA+IDApIHsKIAkJCS8vIGdldCBoYW5kbGUgZm9yIGhpZ2hlciBsYXllcgogCQkJaUNvdW50ID0gMDsKIAkJCWlGcmVlRW50cnkgPSAweEZGRkY7Ci0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkJCS8vIGVudGVyICBjcml0aWNhbCBzZWN0aW9uIGZvciBwcm9jZXNzIGZ1bmN0aW9uCi0JCQlFbnRlckNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLgotCQkJCQkgICAgIG1fcENyaXRpY2FsU2VjdGlvbik7Ci0jZW5kaWYKIAkJCXdoaWxlIChpQ291bnQgPCBFUExfU0RPX01BWF9DT05ORUNUSU9OX1VEUCkgewogCQkJCS8vIGNoZWNrIGlmIHRoaXMgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGtub3duCiAJCQkJaWYgKChwSW5zdGFuY2UtPm1fYVNkb0Fic1VkcENvbm5lY3Rpb25baUNvdW50XS4KQEAgLTczNCwxMSArNjExLDYgQEAKIAkJCQkJcEluc3RhbmNlLT4KIAkJCQkJICAgIG1fYVNkb0Fic1VkcENvbm5lY3Rpb25baUZyZWVFbnRyeV0uCiAJCQkJCSAgICBtX3VpUG9ydCA9IFJlbW90ZUFkZHIuc2luX3BvcnQ7Ci0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkJCQkJLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCQkJCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLgotCQkJCQkJCSAgICAgbV9wQ3JpdGljYWxTZWN0aW9uKTsKLSNlbmRpZgogCQkJCQkvLyBjYWxsIGNhbGxiYWNrCiAJCQkJCVNkb0NvbkhkbCA9IGlGcmVlRW50cnk7CiAJCQkJCVNkb0NvbkhkbCB8PSBFUExfU0RPX1VEUF9IQU5ETEU7CkBAIC03NTIsMTEgKzYyNCw2IEBACiAJCQkJfSBlbHNlIHsKIAkJCQkJRVBMX0RCR0xWTF9TRE9fVFJBQ0UwCiAJCQkJCSAgICAoIkVycm9yIGluIEVwbFNkb1VkcFRocmVhZCgpIG5vIGZyZWUgaGFuZGxlXG4iKTsKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCQkJCQkvLyBsZWF2ZSBjcml0aWNhbCBzZWN0aW9uIGZvciBwcm9jZXNzIGZ1bmN0aW9uCi0JCQkJCUxlYXZlQ3JpdGljYWxTZWN0aW9uKFNkb1VkcEluc3RhbmNlX2cuCi0JCQkJCQkJICAgICBtX3BDcml0aWNhbFNlY3Rpb24pOwotI2VuZGlmCiAJCQkJfQogCiAJCQl9IGVsc2UgewpAQCAtNzY0LDExICs2MzEsNiBAQAogCQkJCS8vIGNhbGwgY2FsbGJhY2sgd2l0aCBjb3JyZWN0IGhhbmRsZQogCQkJCVNkb0NvbkhkbCA9IGlDb3VudDsKIAkJCQlTZG9Db25IZGwgfD0gRVBMX1NET19VRFBfSEFORExFOwotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JCQkJLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCQkJCUxlYXZlQ3JpdGljYWxTZWN0aW9uKFNkb1VkcEluc3RhbmNlX2cuCi0JCQkJCQkgICAgIG1fcENyaXRpY2FsU2VjdGlvbik7Ci0jZW5kaWYKIAkJCQkvLyBvZmZzZXQgNCAtPiBzdGFydCBvZiBTRE8gU2VxdWVuY2UgaGVhZGVyCiAJCQkJcEluc3RhbmNlLT5tX2ZwU2RvQXN5U2VxQ2IoU2RvQ29uSGRsLAogCQkJCQkJCSAgICh0RXBsQXN5U2RvU2VxICopICYKQEAgLTc3OCwxMCArNjQwLDcgQEAKIAkJfQkJLy8gZW5kIG9mICBpZihpRXJyb3IhPVNPQ0tFVF9FUlJPUikKIAl9CQkJLy8gZW5kIG9mIGZvcig7OykKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIAljb21wbGV0ZV9hbmRfZXhpdCgmU2RvVWRwSW5zdGFuY2VfZy5tX0NvbXBsZXRpb25VZHBUaHJlYWQsIDApOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTdGF0dXN1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFN0YXR1c3UuYwppbmRleCA2ODlmOTEyLi5iMjkxMzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFN0YXR1c3UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFN0YXR1c3UuYwpAQCAtMTM3LDggKzEzNyw3IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdUNiU3RhdHVzUmVzcG9uc2UodEVwbEZyYW1lSW5mbyAqCi0JCQkJCQkgICAgcEZyYW1lSW5mb19wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbFN0YXR1c3VDYlN0YXR1c1Jlc3BvbnNlKHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMTY0LDcgKzE2Myw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VJbml0KCkKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdUluaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTkxLDcgKzE5MCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VBZGRJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFN0YXR1c3VBZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yMjgsNyArMjI3LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdURlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdURlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTI1OCw3ICsyNTcsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1UmVzZXQoKQordEVwbEtlcm5lbCBFcGxTdGF0dXN1UmVzZXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjg3LDkgKzI4Niw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdVJlcXVlc3RTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgdEVwbFN0YXR1c3VDYlJlc3BvbnNlCi0JCQkJCQkgIHBmbkNiUmVzcG9uc2VfcCkKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdVJlcXVlc3RTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgdEVwbFN0YXR1c3VDYlJlc3BvbnNlIHBmbkNiUmVzcG9uc2VfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzQyLDggKzM0MCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VDYlN0YXR1c1Jlc3BvbnNlKHRFcGxGcmFtZUluZm8gKgotCQkJCQkJICAgIHBGcmFtZUluZm9fcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbFN0YXR1c3VDYlN0YXR1c1Jlc3BvbnNlKHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGFyZ2V0LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRhcmdldC5oCmluZGV4IGIyYjY2ZjguLmU3NmQyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGFyZ2V0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUYXJnZXQuaApAQCAtODMsOTUgKzgzLDExIEBACiAvLyBhcHBsaWNhdGlvbnMgbmVlZHMgdG8gdXNlIG9uZSBjb21tb24gbGlicmFyeSBmdW5jdGlvbiAoZS5nLiBtZW1jcHkoKSkuIFNvCiAvLyB5b3UgY2FuIHNldCAob3IgY2hhbmdlKSBpdCBoZXJlLgogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQotI2RlZmluZSBfV0lOMzJfV0lORE9XUyAweDA0MDEKLSNkZWZpbmUgX1dJTjMyX1dJTk5UICAgMHgwNDAwCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0gICAgLy8yOS4xMS4yMDA0IGYuai4gc29uc3QgaXN0IG1lbWNweSB1bmQgbWVtc2V0IHVuYmVrYW5udAotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIEVQTF9NRU1DUFkoZHN0LHNyYyxzaXopICAgICBtZW1jcHkoKHZvaWQqKShkc3QpLChjb25zdCB2b2lkKikoc3JjKSwoc2l6ZV90KShzaXopKTsKLSNkZWZpbmUgRVBMX01FTVNFVChkc3QsdmFsLHNpeikgICAgIG1lbXNldCgodm9pZCopKGRzdCksKGludCkodmFsKSwoc2l6ZV90KShzaXopKTsKLQotICAgIC8vIGYuai46IGRpZSBGdW5rdGlvbmVuIGb8ciA8TWVtQWxsb2M+IHVuZCA8TWVtRnJlZT4gc2luZCBpbiBXaW5NZW0uYyBkZWZpbmllcnQKLSAgICAvL2RlZmluaXRpb24gZGVyIFByb3RvdHlwZW4KLXZvaWQgRkFSICpNZW1BbGxvYyhEV09SRCBkd01lbVNpemVfcCk7Ci12b2lkIE1lbUZyZWUodm9pZCBGQVIgKiBwTWVtX3ApOwotCi0jZGVmaW5lIEVQTF9NQUxMT0Moc2l6KSAgICAgICAgICAgICBtYWxsb2MoKHNpemVfdCkoc2l6KSkKLSNkZWZpbmUgRVBMX0ZSRUUocHRyKSAgICAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwdHIpCi0KLSNpZm5kZWYgUFJJTlRGMAotdm9pZCB0cmFjZShjb25zdCBjaGFyICpmbXQsIC4uLik7Ci0jZGVmaW5lIFBSSU5URiAgICAgICAgICAgICAgICAgICAgICBUUkFDRQotI2RlZmluZSBQUklOVEYwKGFyZykgICAgICAgICAgICAgICAgVFJBQ0UwKGFyZykKLSNkZWZpbmUgUFJJTlRGMShhcmcscDEpICAgICAgICAgICAgIFRSQUNFMShhcmcscDEpCi0jZGVmaW5lIFBSSU5URjIoYXJnLHAxLHAyKSAgICAgICAgICBUUkFDRTIoYXJnLHAxLHAyKQotI2RlZmluZSBQUklOVEYzKGFyZyxwMSxwMixwMykgICAgICAgVFJBQ0UzKGFyZyxwMSxwMixwMykKLSNkZWZpbmUgUFJJTlRGNChhcmcscDEscDIscDMscDQpICAgIFRSQUNFNChhcmcscDEscDIscDMscDQpCi0JLy8jZGVmaW5lIFBSSU5URiAgICAgICAgICAgICAgICAgICAgICBwcmludGYKLQkvLyNkZWZpbmUgUFJJTlRGMChhcmcpICAgICAgICAgICAgICAgIFBSSU5URihhcmcpCi0JLy8jZGVmaW5lIFBSSU5URjEoYXJnLHAxKSAgICAgICAgICAgICBQUklOVEYoYXJnLHAxKQotCS8vI2RlZmluZSBQUklOVEYyKGFyZyxwMSxwMikgICAgICAgICAgUFJJTlRGKGFyZyxwMSxwMikKLQkvLyNkZWZpbmUgUFJJTlRGMyhhcmcscDEscDIscDMpICAgICAgIFBSSU5URihhcmcscDEscDIscDMpCi0JLy8jZGVmaW5lIFBSSU5URjQoYXJnLHAxLHAyLHAzLHA0KSAgICBQUklOVEYoYXJnLHAxLHAyLHAzLHA0KQotI2VuZGlmCi0KLSNpZmRlZiBBU1NFUlRNU0cKLSN1bmRlZiBBU1NFUlRNU0cKLSNlbmRpZgotCi0jZGVmaW5lIEFTU0VSVE1TRyhleHByLHN0cmluZykgIGlmICghKGV4cHIpKSB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlQm94IChOVUxMLCBzdHJpbmcsICJBc3NlcnRpb24gZmFpbGVkIiwgTUJfT0sgfCBNQl9JQ09ORVJST1IpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAoLTEpO30KLQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX05PX09TXykKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSAgICAvLzI5LjExLjIwMDQgZi5qLiBzb25zdCBpc3QgbWVtY3B5IHVuZCBtZW1zZXQgdW5iZWthbm50Ci0vLyAgICAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZpbmUgRVBMX01FTUNQWShkc3Qsc3JjLHNpeikgICAgIG1lbWNweSgodm9pZCopKGRzdCksKGNvbnN0IHZvaWQqKShzcmMpLChzaXplX3QpKHNpeikpOwotI2RlZmluZSBFUExfTUVNU0VUKGRzdCx2YWwsc2l6KSAgICAgbWVtc2V0KCh2b2lkKikoZHN0KSwoaW50KSh2YWwpLChzaXplX3QpKHNpeikpOwotCi0jZGVmaW5lIEVQTF9NQUxMT0Moc2l6KSAgICAgICAgICAgICBtYWxsb2MoKHNpemVfdCkoc2l6KSkKLSNkZWZpbmUgRVBMX0ZSRUUocHRyKSAgICAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwdHIpCi0KLSNpZm5kZWYgUFJJTlRGMAotI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UKLSNkZWZpbmUgUFJJTlRGMChhcmcpICAgICAgICAgICAgICAgIFRSQUNFMChhcmcpCi0jZGVmaW5lIFBSSU5URjEoYXJnLHAxKSAgICAgICAgICAgICBUUkFDRTEoYXJnLHAxKQotI2RlZmluZSBQUklOVEYyKGFyZyxwMSxwMikgICAgICAgICAgVFJBQ0UyKGFyZyxwMSxwMikKLSNkZWZpbmUgUFJJTlRGMyhhcmcscDEscDIscDMpICAgICAgIFRSQUNFMyhhcmcscDEscDIscDMpCi0jZGVmaW5lIFBSSU5URjQoYXJnLHAxLHAyLHAzLHA0KSAgICBUUkFDRTQoYXJnLHAxLHAyLHAzLHA0KQotCS8vI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmCi0JLy8jZGVmaW5lIFBSSU5URjAoYXJnKSAgICAgICAgICAgICAgICBQUklOVEYoYXJnKQotCS8vI2RlZmluZSBQUklOVEYxKGFyZyxwMSkgICAgICAgICAgICAgUFJJTlRGKGFyZyxwMSkKLQkvLyNkZWZpbmUgUFJJTlRGMihhcmcscDEscDIpICAgICAgICAgIFBSSU5URihhcmcscDEscDIpCi0JLy8jZGVmaW5lIFBSSU5URjMoYXJnLHAxLHAyLHAzKSAgICAgICBQUklOVEYoYXJnLHAxLHAyLHAzKQotCS8vI2RlZmluZSBQUklOVEY0KGFyZyxwMSxwMixwMyxwNCkgICAgUFJJTlRGKGFyZyxwMSxwMixwMyxwNCkKLSNlbmRpZgotCi0jZWxpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKQotCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2Vsc2UKLS8vICAgICAgICAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jZW5kaWYKIAogICAgIC8vMjkuMTEuMjAwNCBmLmouIHNvbnN0IGlzdCBtZW1jcHkgdW5kIG1lbXNldCB1bmJla2FubnQKIC8vICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTE3OSwxMyArOTUsOCBAQAogI2RlZmluZSBFUExfTUVNQ1BZKGRzdCxzcmMsc2l6KSAgICAgbWVtY3B5KCh2b2lkKikoZHN0KSwoY29uc3Qgdm9pZCopKHNyYyksKHNpemVfdCkoc2l6KSk7CiAjZGVmaW5lIEVQTF9NRU1TRVQoZHN0LHZhbCxzaXopICAgICBtZW1zZXQoKHZvaWQqKShkc3QpLChpbnQpKHZhbCksKHNpemVfdCkoc2l6KSk7CiAKLSNpZm5kZWYgX19LRVJORUxfXwotI2RlZmluZSBFUExfTUFMTE9DKHNpeikgICAgICAgICAgICAgbWFsbG9jKChzaXplX3QpKHNpeikpCi0jZGVmaW5lIEVQTF9GUkVFKHB0cikgICAgICAgICAgICAgICBmcmVlKCh2b2lkICopcHRyKQotI2Vsc2UKICNkZWZpbmUgRVBMX01BTExPQyhzaXopICAgICAgICAgICAgIGttYWxsb2MoKHNpemVfdCkoc2l6KSwgR0ZQX0tFUk5FTCkKICNkZWZpbmUgRVBMX0ZSRUUocHRyKSAgICAgICAgICAgICAgIGtmcmVlKCh2b2lkICopcHRyKQotI2VuZGlmCiAKICNpZm5kZWYgUFJJTlRGMAogI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UKQEAgLTIwMiw4ICsxMTMsNiBAQAogCS8vI2RlZmluZSBQUklOVEY0KGFyZyxwMSxwMixwMyxwNCkgICAgUFJJTlRGKGFyZyxwMSxwMixwMyxwNCkKICNlbmRpZgogCi0jZW5kaWYKLQogI2RlZmluZSBFUExfVEdUX0lOVE1BU0tfRVRIICAgICAweDAwMDEJLy8gZXRoZXJuZXQgaW50ZXJydXB0CiAjZGVmaW5lIEVQTF9UR1RfSU5UTUFTS19ETUEgICAgIDB4MDAwMgkvLyBETUEgaW50ZXJydXB0CiAKQEAgLTIxNywxNyArMTI2LDE1IEBACiAKIC8vIGN1cnJlbnRseSBubyBUaW1lciBmdW5jdGlvbnMgYXJlIG5lZWRlZCBieSBFUEwgc3RhY2sKIC8vIHNvIHRoZXkgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQKLS8vdm9pZCAgUFVCTElDIFRndFRpbWVySW5pdCh2b2lkKTsKLS8vRFdPUkQgUFVCTElDIFRndEdldFRpY2tDb3VudCh2b2lkKTsKLS8vdm9pZCBQVUJMSUMgVGd0R2V0TmV0VGltZSh0RXBsTmV0VGltZSAqIHBOZXRUaW1lX3ApOworLy92b2lkICBUZ3RUaW1lckluaXQodm9pZCk7CisvL3UzMiBUZ3RHZXRUaWNrQ291bnQodm9pZCk7CisvL3ZvaWQgVGd0R2V0TmV0VGltZSh0RXBsTmV0VGltZSAqIHBOZXRUaW1lX3ApOwogCiAvLyBmdW5jdGlvbnMgZm9yIGV0aGVybmV0IGRyaXZlcgotdEVwbEtlcm5lbCBQVUJMSUMgVGd0SW5pdEV0aElzcih2b2lkKTsKLXZvaWQgUFVCTElDIFRndEZyZWVFdGhJc3Iodm9pZCk7Ci12b2lkIFBVQkxJQyBUZ3RFbmFibGVHbG9iYWxJbnRlcnJ1cHQoQllURSBmRW5hYmxlX3ApOwotdm9pZCBQVUJMSUMgVGd0RW5hYmxlRXRoSW50ZXJydXB0MChCWVRFIGZFbmFibGVfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlJbnRlcnJ1cHRNYXNrX3ApOwotdm9pZCBQVUJMSUMgVGd0RW5hYmxlRXRoSW50ZXJydXB0MShCWVRFIGZFbmFibGVfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlJbnRlcnJ1cHRNYXNrX3ApOwordEVwbEtlcm5lbCBUZ3RJbml0RXRoSXNyKHZvaWQpOwordm9pZCBUZ3RGcmVlRXRoSXNyKHZvaWQpOwordm9pZCBUZ3RFbmFibGVHbG9iYWxJbnRlcnJ1cHQodTggZkVuYWJsZV9wKTsKK3ZvaWQgVGd0RW5hYmxlRXRoSW50ZXJydXB0MCh1OCBmRW5hYmxlX3AsIHVuc2lnbmVkIGludCB1aUludGVycnVwdE1hc2tfcCk7Cit2b2lkIFRndEVuYWJsZUV0aEludGVycnVwdDEodTggZkVuYWJsZV9wLCB1bnNpZ25lZCBpbnQgdWlJbnRlcnJ1cHRNYXNrX3ApOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMVEFSR0VUX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVyLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVyLmgKaW5kZXggZmFjYmZkOC4uZDFhNzNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXIuaApAQCAtMTA3LDggKzEwNyw3IEBACiAKIH0gdEVwbFRpbWVyRXZlbnRBcmc7CiAKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsVGltZXJrQ2FsbGJhY2spICh0RXBsVGltZXJFdmVudEFyZyAqCi0JCQkJCQkgcEV2ZW50QXJnX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbFRpbWVya0NhbGxiYWNrKSAodEVwbFRpbWVyRXZlbnRBcmcgKnBFdmVudEFyZ19wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1TGludXhLZXJuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1TGludXhLZXJuZWwuYwppbmRleCAwODgyMGQxLi5mZjgwZmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydUxpbnV4S2VybmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lcnVMaW51eEtlcm5lbC5jCkBAIC05OSw3ICs5OSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB2b2lkIFBVQkxJQyBFcGxUaW1lcnVDYk1zKHVuc2lnbmVkIGxvbmcgdWxQYXJhbWV0ZXJfcCk7CitzdGF0aWMgdm9pZCBFcGxUaW1lcnVDYk1zKHVuc2lnbmVkIGxvbmcgdWxQYXJhbWV0ZXJfcCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1SW5pdCgpCit0RXBsS2VybmVsIEVwbFRpbWVydUluaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTU3LDcgKzE1Nyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1QWRkSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxUaW1lcnVBZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xODIsNyArMTgyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFRpbWVydURlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIwNyw5ICsyMDcsOSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkgICAgICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCkKK3RFcGxLZXJuZWwgRXBsVGltZXJ1U2V0VGltZXJNcyh0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCisJCQkgICAgICAgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsVGltZXJ1RGF0YSAqcERhdGE7CkBAIC0yNTcsOSArMjU3LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVNb2RpZnlUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCQkgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkJIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQordEVwbEtlcm5lbCBFcGxUaW1lcnVNb2RpZnlUaW1lck1zKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3AsCisJCQkJICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAorCQkJCSAgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsVGltZXJ1RGF0YSAqcERhdGE7CkBAIC0zMTUsNyArMzE1LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCkKK3RFcGxLZXJuZWwgRXBsVGltZXJ1RGVsZXRlVGltZXIodEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxUaW1lcnVEYXRhICpwRGF0YTsKQEAgLTM3MCw3ICszNzAsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUJPT0wgUFVCTElDIEVwbFRpbWVydUlzVGltZXJBY3RpdmUodEVwbFRpbWVySGRsIFRpbWVySGRsX3ApCitCT09MIEVwbFRpbWVydUlzVGltZXJBY3RpdmUodEVwbFRpbWVySGRsIFRpbWVySGRsX3ApCiB7CiAJQk9PTCBmQWN0aXZlID0gRkFMU0U7CiAJdEVwbFRpbWVydURhdGEgKnBEYXRhOwpAQCAtNDE3LDcgKzQxNyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RhdGljIHZvaWQgUFVCTElDIEVwbFRpbWVydUNiTXModW5zaWduZWQgbG9uZyB1bFBhcmFtZXRlcl9wKQorc3RhdGljIHZvaWQgRXBsVGltZXJ1Q2JNcyh1bnNpZ25lZCBsb25nIHVsUGFyYW1ldGVyX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsVGltZXJ1RGF0YSAqcERhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydU51bGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1TnVsbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGNlNDAzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1TnVsbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5Ci0gICAgICB3d3cuc3lzdGVjLWVsZWN0cm9uaWMuY29tCi0KLSAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCi0KLSAgRGVzY3JpcHRpb246ICBzb3VyY2UgZmlsZSBmb3IgRXBsIFVzZXJzcGFjZS1UaW1lcm1vZHVsZSBOVUxMLUltcGxlbWVudGF0aW9uCi0KLSAgTGljZW5zZToKLQotICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICAgIGFyZSBtZXQ6Ci0KLSAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAgICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgotCi0gICAgICAgIElmIGEgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBvciBiZWNvbWVzIGlsbGVnYWwsIGludmFsaWQgb3IKLSAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6Ci0gICAgICAgIDEuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiB0aGF0IGp1cmlzZGljdGlvbiBvZiBhbnkgb3RoZXIKLSAgICAgICAgICAgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZTsgb3IKLSAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgotICAgICAgICAgICBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZS4KLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgICAgICAgICAkUkNTZmlsZTogRXBsVGltZXJ1TnVsbC5jLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS4zICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgIEtFSUwgdVZpc2lvbiAyCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIFJldmlzaW9uIEhpc3Rvcnk6Ci0KLSAgMjAwNi8wNy8wNiBrLnQuOiAgIHN0YXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAidXNlci9FcGxUaW1lcnUuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgRyBMIE8gQiBBIEwgICBEIEUgRiBJIE4gSSBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBsb2NhbCB0eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIG1vZHVsIGdsb2JhbGUgdmFycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgIEMgTCBBIFMgUyAgPEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgTlVMTC1JbXBsZW1lbnRhdGlvbj4gICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gRGVzY3JpcHRpb246IEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgTlVMTC1JbXBsZW1lbnRhdGlvbgotLy8KLS8vCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgIFAgVSBCIEwgSSBDICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1SW5pdAotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBpbml0IGZpcnN0IGluc3RhbmNlCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydUluaXQoKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0gRXBsVGltZXJ1QWRkSW5zdGFuY2UoKTsKLQotCXJldHVybiBSZXQ7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydUFkZEluc3RhbmNlCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGluaXQgYWRkaXRpb25hbCBpbnN0YW5jZQotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczoKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVBZGRJbnN0YW5jZSgpCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0KLQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQotCXJldHVybiBSZXQ7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydURlbEluc3RhbmNlCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGRlbHRlIGluc3RhbmNlCi0vLyAgICAgICAgICAgICAgLT4gdW5kZXIgV2luMzIgbm90aGluZyB0byBkbwotLy8gICAgICAgICAgICAgIC0+IG5vIGluc3RuYWNlIHRhYmxlIG5lZWRlZAotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczoKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVEZWxJbnN0YW5jZSgpCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0KLQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQotCXJldHVybiBSZXQ7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydVNldFRpbWVyTXMKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gY3JlYXRlIGEgdGltZXIgYW5kIHJldHVybiBhIGhhbmRsZSB0byB0aGUgcG9pbnRlcgotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczogIHBUaW1lckhkbF9wID0gcG9pbnRlciB0byBhIGJ1ZmZlciB0byBmaWxsIGluIHRoZSBoYW5kbGUKLS8vICAgICAgICAgICAgICB1bFRpbWVfcCAgICA9IHRpbWUgZm9yIHRpbWVyIGluIG1zCi0vLyAgICAgICAgICAgICAgQXJndW1lbnRfcCAgPSBhcmd1bWVudCBmb3IgdGltZXIKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVTZXRUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJICAgICAgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0KLQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQotCS8vIGNoZWNrIGhhbmRsZQotCWlmIChwVGltZXJIZGxfcCA9PSBOVUxMKSB7Ci0JCVJldCA9IGtFcGxUaW1lckludmFsaWRIYW5kbGU7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLSAgICAgIEV4aXQ6Ci0JcmV0dXJuIFJldDsKLX0KLQotIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydU1vZGlmeVRpbWVyTXMKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gY2hhbmdlIGEgdGltZXIgYW5kIHJldHVybiBhIGhhbmRsZSB0byB0aGUgcG9pbnRlcgotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczogIHBUaW1lckhkbF9wID0gcG9pbnRlciB0byBhIGJ1ZmZlciB0byBmaWxsIGluIHRoZSBoYW5kbGUKLS8vICAgICAgICAgICAgICB1bFRpbWVfcCAgICA9IHRpbWUgZm9yIHRpbWVyIGluIG1zCi0vLyAgICAgICAgICAgICAgQXJndW1lbnRfcCAgPSBhcmd1bWVudCBmb3IgdGltZXIKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVNb2RpZnlUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCQkgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkJIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQkvLyBjaGVjayBwYXJhbWV0ZXIKLQlpZiAocFRpbWVySGRsX3AgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJJbnZhbGlkSGFuZGxlOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0gICAgICBFeGl0OgotCXJldHVybiBSZXQ7Ci19Ci0KLSAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVEZWxldGVUaW1lcgotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBkZWx0ZSBhIHRpbWVyCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOiAgcFRpbWVySGRsX3AgPSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIGZpbGwgaW4gdGhlIGhhbmRsZQotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydURlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQkvLyBjaGVjayBwYXJhbWV0ZXIKLQlpZiAocFRpbWVySGRsX3AgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJJbnZhbGlkSGFuZGxlOwotCQlnb3RvIEV4aXQ7Ci0JfQotCS8vIHNldCBoYW5kbGUgaW52YWxpZGUKLQkqcFRpbWVySGRsX3AgPSAwOwotCi0gICAgICBFeGl0OgotCXJldHVybiBSZXQ7Ci0KLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lcnVXaW4zMi5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lcnVXaW4zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTY3YjRlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1V2luMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgb3BlblBPV0VSTElOSwotCi0gIERlc2NyaXB0aW9uOiAgc291cmNlIGZpbGUgZm9yIEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgZm9yIFdpbjMyCi0KLSAgTGljZW5zZToKLQotICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICAgIGFyZSBtZXQ6Ci0KLSAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAgICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgotCi0gICAgICAgIElmIGEgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBvciBiZWNvbWVzIGlsbGVnYWwsIGludmFsaWQgb3IKLSAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6Ci0gICAgICAgIDEuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiB0aGF0IGp1cmlzZGljdGlvbiBvZiBhbnkgb3RoZXIKLSAgICAgICAgICAgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZTsgb3IKLSAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgotICAgICAgICAgICBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZS4KLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgICAgICAgICAkUkNTZmlsZTogRXBsVGltZXJ1V2luMzIuYyx2ICQKLQotICAgICAgICAgICAgICAgICRBdXRob3I6IEQuS3J1ZWdlciAkCi0KLSAgICAgICAgICAgICAgICAkUmV2aXNpb246IDEuNCAkICAkRGF0ZTogMjAwOC8wNC8xNyAyMTozNjozMiAkCi0KLSAgICAgICAgICAgICAgICAkU3RhdGU6IEV4cCAkCi0KLSAgICAgICAgICAgICAgICBCdWlsZCBFbnZpcm9ubWVudDoKLSAgICAgICAgICAgICAgICAgICAgR0NDIFYzLjQKLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgUmV2aXNpb24gSGlzdG9yeToKLQotICAyMDA2LzA3LzA2IGsudC46ICAgc3RhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJ1c2VyL0VwbFRpbWVydS5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICBHIEwgTyBCIEEgTCAgIEQgRSBGIEkgTiBJIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGxvY2FsIHR5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBzdHJ1Y3QgewotCXRFcGxUaW1lckFyZyBUaW1lckFyZ3VtZW50OwotCUhBTkRMRSBEZWx0ZUhhbmRsZTsKLQl1bnNpZ25lZCBsb25nIHVsVGltZW91dDsKLQotfSB0RXBsVGltZXJ1VGhyZWFkOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JTFBDUklUSUNBTF9TRUNUSU9OIG1fcENyaXRpY2FsU2VjdGlvbjsKLQlDUklUSUNBTF9TRUNUSU9OIG1fQ3JpdGljYWxTZWN0aW9uOwotfSB0RXBsVGltZXJ1SW5zdGFuY2U7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gbW9kdWwgZ2xvYmFsZSB2YXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RhdGljIHRFcGxUaW1lcnVJbnN0YW5jZSBFcGxUaW1lcnVJbnN0YW5jZV9nOwotc3RhdGljIHRFcGxUaW1lcnVUaHJlYWQgVGhyZWFkRGF0YV9sOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1EV09SRCBQVUJMSUMgRXBsU2RvVGltZXJ1VGhyZWFkbXMoTFBWT0lEIGxwUGFyYW1ldGVyKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgQyBMIEEgUyBTICA8RXBsIFVzZXJzcGFjZS1UaW1lcm1vZHVsZSBmb3IgV2luMzI+ICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBEZXNjcmlwdGlvbjogRXBsIFVzZXJzcGFjZS1UaW1lcm1vZHVsZSBmb3IgV2luMzIKLS8vCi0vLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFUgQiBMIEkgQyAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydUluaXQKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gaW5pdCBmaXJzdCBpbnN0YW5jZQotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczoKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVJbml0KCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IEVwbFRpbWVydUFkZEluc3RhbmNlKCk7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVBZGRJbnN0YW5jZQotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBpbml0IGFkZGl0aW9uYWwgaW5zdGFuY2UKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1QWRkSW5zdGFuY2UoKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQkvLyBjcmVhdGUgY3JpdGljYWwgc2VjdGlvbgotCUVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uID0KLQkgICAgJkVwbFRpbWVydUluc3RhbmNlX2cubV9Dcml0aWNhbFNlY3Rpb247Ci0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbihFcGxUaW1lcnVJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVEZWxJbnN0YW5jZQotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBkZWx0ZSBpbnN0YW5jZQotLy8gICAgICAgICAgICAgIC0+IHVuZGVyIFdpbjMyIG5vdGhpbmcgdG8gZG8KLS8vICAgICAgICAgICAgICAtPiBubyBpbnN0bmFjZSB0YWJsZSBuZWVkZWQKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsSW5zdGFuY2UoKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVTZXRUaW1lck1zCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGNyZWF0ZSBhIHRpbWVyIGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIHBvaW50ZXIKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBwVGltZXJIZGxfcCA9IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gZmlsbCBpbiB0aGUgaGFuZGxlCi0vLyAgICAgICAgICAgICAgdWxUaW1lX3AgICAgPSB0aW1lIGZvciB0aW1lciBpbiBtcwotLy8gICAgICAgICAgICAgIEFyZ3VtZW50X3AgID0gYXJndW1lbnQgZm9yIHRpbWVyCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1U2V0VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAotCQkJCSAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQotewotCXRFcGxLZXJuZWwgUmV0OwotCUhBTkRMRSBEZWxldGVIYW5kbGU7Ci0JSEFORExFIFRocmVhZEhhbmRsZTsKLQlEV09SRCBUaHJlYWRJZDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY2hlY2sgaGFuZGxlCi0JaWYgKHBUaW1lckhkbF9wID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVySW52YWxpZEhhbmRsZTsKLQkJZ290byBFeGl0OwotCX0KLQkvLyBlbnRlciAgY3JpdGljYWwgc2VjdGlvbgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKEVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotCS8vIGZpcnN0IGNyZWF0ZSBldmVudCB0byBkZWxldGUgdGltZXIKLQlEZWxldGVIYW5kbGUgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpOwotCWlmIChEZWxldGVIYW5kbGUgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJOb1RpbWVyQ3JlYXRlZDsKLQkJZ290byBFeGl0OwotCX0KLQkvLyBzZXQgaGFuZGxlIGZvciBjYWxsZXIKLQkqcFRpbWVySGRsX3AgPSAodEVwbFRpbWVySGRsKSBEZWxldGVIYW5kbGU7Ci0KLQkvLyBmaWxsIGRhdGEgZm9yIHRocmVhZAotCVRocmVhZERhdGFfbC5EZWx0ZUhhbmRsZSA9IERlbGV0ZUhhbmRsZTsKLQlFUExfTUVNQ1BZKCZUaHJlYWREYXRhX2wuVGltZXJBcmd1bWVudCwgJkFyZ3VtZW50X3AsCi0JCSAgIHNpemVvZih0RXBsVGltZXJBcmcpKTsKLQlUaHJlYWREYXRhX2wudWxUaW1lb3V0ID0gdWxUaW1lX3A7Ci0KLQkvLyBjcmVhdGUgdGhyZWFkIHRvIGNyZWF0ZSB3YWl0YWJsZSB0aW1lciBhbmQgd2FpdCBmb3IgdGltZXIKLQlUaHJlYWRIYW5kbGUgPSBDcmVhdGVUaHJlYWQoTlVMTCwKLQkJCQkgICAgMCwKLQkJCQkgICAgRXBsU2RvVGltZXJ1VGhyZWFkbXMsCi0JCQkJICAgICZUaHJlYWREYXRhX2wsIDAsICZUaHJlYWRJZCk7Ci0JaWYgKFRocmVhZEhhbmRsZSA9PSBOVUxMKSB7Ci0JCS8vIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24KLQkJTGVhdmVDcml0aWNhbFNlY3Rpb24oRXBsVGltZXJ1SW5zdGFuY2VfZy5tX3BDcml0aWNhbFNlY3Rpb24pOwotCi0JCS8vIGRlbHRlIGhhbmRsZQotCQlDbG9zZUhhbmRsZShEZWxldGVIYW5kbGUpOwotCi0JCVJldCA9IGtFcGxUaW1lck5vVGltZXJDcmVhdGVkOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0gICAgICBFeGl0OgotCXJldHVybiBSZXQ7Ci19Ci0KLSAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVNb2RpZnlUaW1lck1zCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGNoYW5nZSBhIHRpbWVyIGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIHBvaW50ZXIKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBwVGltZXJIZGxfcCA9IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gZmlsbCBpbiB0aGUgaGFuZGxlCi0vLyAgICAgICAgICAgICAgdWxUaW1lX3AgICAgPSB0aW1lIGZvciB0aW1lciBpbiBtcwotLy8gICAgICAgICAgICAgIEFyZ3VtZW50X3AgID0gYXJndW1lbnQgZm9yIHRpbWVyCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJCSB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQlIQU5ETEUgRGVsZXRlSGFuZGxlOwotCUhBTkRMRSBUaHJlYWRIYW5kbGU7Ci0JRFdPUkQgVGhyZWFkSWQ7Ci0KLQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQotCS8vIGNoZWNrIHBhcmFtZXRlcgotCWlmIChwVGltZXJIZGxfcCA9PSBOVUxMKSB7Ci0JCVJldCA9IGtFcGxUaW1lckludmFsaWRIYW5kbGU7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLQlEZWxldGVIYW5kbGUgPSAoSEFORExFKSAoKnBUaW1lckhkbF9wKTsKLQotCS8vIHNldCBldmVudCB0byBlbmQgdGltZXIgdGFzayBmb3IgdGhpcyB0aW1lcgotCVNldEV2ZW50KERlbGV0ZUhhbmRsZSk7Ci0KLQkvLyBjcmVhdGUgbmV3IHRpbWVyCi0JLy8gZmlyc3QgY3JlYXRlIGV2ZW50IHRvIGRlbGV0ZSB0aW1lcgotCURlbGV0ZUhhbmRsZSA9IENyZWF0ZUV2ZW50KE5VTEwsIEZBTFNFLCBGQUxTRSwgTlVMTCk7Ci0JaWYgKERlbGV0ZUhhbmRsZSA9PSBOVUxMKSB7Ci0JCVJldCA9IGtFcGxUaW1lck5vVGltZXJDcmVhdGVkOwotCQlnb3RvIEV4aXQ7Ci0JfQotCS8vIHNldCBoYW5kbGUgZm9yIGNhbGxlcgotCSpwVGltZXJIZGxfcCA9ICh0RXBsVGltZXJIZGwpIERlbGV0ZUhhbmRsZTsKLQotCS8vIGVudGVyICBjcml0aWNhbCBzZWN0aW9uCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oRXBsVGltZXJ1SW5zdGFuY2VfZy5tX3BDcml0aWNhbFNlY3Rpb24pOwotCi0JLy8gZmlsbCBkYXRhIGZvciB0aHJlYWQKLQlUaHJlYWREYXRhX2wuRGVsdGVIYW5kbGUgPSBEZWxldGVIYW5kbGU7Ci0JRVBMX01FTUNQWSgmVGhyZWFkRGF0YV9sLlRpbWVyQXJndW1lbnQsICZBcmd1bWVudF9wLAotCQkgICBzaXplb2YodEVwbFRpbWVyQXJnKSk7Ci0JVGhyZWFkRGF0YV9sLnVsVGltZW91dCA9IHVsVGltZV9wOwotCi0JLy8gY3JlYXRlIHRocmVhZCB0byBjcmVhdGUgd2FpdGFibGUgdGltZXIgYW5kIHdhaXQgZm9yIHRpbWVyCi0JVGhyZWFkSGFuZGxlID0gQ3JlYXRlVGhyZWFkKE5VTEwsCi0JCQkJICAgIDAsCi0JCQkJICAgIEVwbFNkb1RpbWVydVRocmVhZG1zLAotCQkJCSAgICAmVGhyZWFkRGF0YV9sLCAwLCAmVGhyZWFkSWQpOwotCWlmIChUaHJlYWRIYW5kbGUgPT0gTlVMTCkgewotCQkvLyBsZWF2ZSBjcml0aWNhbCBzZWN0aW9uCi0JCUxlYXZlQ3JpdGljYWxTZWN0aW9uKEVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotCQkvLyBkZWx0ZSBoYW5kbGUKLQotCQlSZXQgPSBrRXBsVGltZXJOb1RpbWVyQ3JlYXRlZDsKLQkJZ290byBFeGl0OwotCX0KLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotfQotCi0gLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1RGVsZXRlVGltZXIKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gZGVsdGUgYSB0aW1lcgotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczogIHBUaW1lckhkbF9wID0gcG9pbnRlciB0byBhIGJ1ZmZlciB0byBmaWxsIGluIHRoZSBoYW5kbGUKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQlIQU5ETEUgRGVsZXRlSGFuZGxlOwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQkvLyBjaGVjayBwYXJhbWV0ZXIKLQlpZiAocFRpbWVySGRsX3AgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJJbnZhbGlkSGFuZGxlOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0JRGVsZXRlSGFuZGxlID0gKEhBTkRMRSkgKCpwVGltZXJIZGxfcCk7Ci0KLQkvLyBzZXQgZXZlbnQgdG8gZW5kIHRpbWVyIHRhc2sgZm9yIHRoaXMgdGltZXIKLQlTZXRFdmVudChEZWxldGVIYW5kbGUpOwotCi0JLy8gc2V0IGhhbmRsZSBpbnZhbGlkZQotCSpwVGltZXJIZGxfcCA9IDA7Ci0KLSAgICAgIEV4aXQ6Ci0JcmV0dXJuIFJldDsKLQotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgIFAgUiBJIFYgQSBUIEUgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsU2RvVGltZXJ1VGhyZWFkbXMKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gdG8gcHJvY2VzcyB0aW1lciBhcyB0aHJlYWQKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBscFBhcmFtZXRlciA9IHBvaW50ZXIgdG8gc3RydWN0dXIgb2YgdHlwZSB0RXBsVGltZXJ1VGhyZWFkCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICBEV09SRCA9IEVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRFdPUkQgUFVCTElDIEVwbFNkb1RpbWVydVRocmVhZG1zKExQVk9JRCBscFBhcmFtZXRlcikKLXsKLQl0RXBsS2VybmVsIFJldDsKLQl0RXBsVGltZXJ1VGhyZWFkICpwVGhyZWFkRGF0YTsKLQlIQU5ETEUgYUhhbmRsZXNbMl07Ci0JQk9PTCBmUmV0dXJuOwotCUxBUkdFX0lOVEVHRVIgVGltZW91dFRpbWU7Ci0JdW5zaWduZWQgbG9uZyB1bEV2ZW50OwotCXRFcGxFdmVudCBFcGxFdmVudDsKLQl0RXBsVGltZXJ1VGhyZWFkIFRocmVhZERhdGE7Ci0JdEVwbFRpbWVyRXZlbnRBcmcgVGltZXJFdmVudEFyZzsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gZ2V0IHBvaW50ZXIgdG8gZGF0YQotCXBUaHJlYWREYXRhID0gKHRFcGxUaW1lcnVUaHJlYWQgKikgbHBQYXJhbWV0ZXI7Ci0JLy8gY29weSB0aHJlYWQgZGF0YQotCUVQTF9NRU1DUFkoJlRocmVhZERhdGEsIHBUaHJlYWREYXRhLCBzaXplb2YoVGhyZWFkRGF0YSkpOwotCXBUaHJlYWREYXRhID0gJlRocmVhZERhdGE7Ci0KLQkvLyBsZWF2ZSBjcml0aWNhbCBzZWN0aW9uCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oRXBsVGltZXJ1SW5zdGFuY2VfZy5tX3BDcml0aWNhbFNlY3Rpb24pOwotCi0JLy8gY3JlYXRlIHdhaXRhYmxlIHRpbWVyCi0JYUhhbmRsZXNbMV0gPSBDcmVhdGVXYWl0YWJsZVRpbWVyKE5VTEwsIEZBTFNFLCBOVUxMKTsKLQlpZiAoYUhhbmRsZXNbMV0gPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJOb1RpbWVyQ3JlYXRlZDsKLQkJZ290byBFeGl0OwotCX0KLQkvLyBzZXQgdGltZXIKLQkvLyBzZXQgdGltZW91dCBpbnRlcnZhbCAtPiBuZWVkZWQgdG8gYmUgbmVnYXRpdgotCS8vIC0+IGJlY2F1c2UgcmVsYXRpdmUgdGltZW91dAotCS8vIC0+IG11bHRpcGx5IGJ5IDEwMDAwIGZvciAxMDAgbnMgdGltZWJhc2Ugb2YgZnVuY3Rpb24KLQlUaW1lb3V0VGltZS5RdWFkUGFydCA9ICgoKGxvbmcgbG9uZylwVGhyZWFkRGF0YS0+dWxUaW1lb3V0KSAqIC0xMDAwMCk7Ci0JZlJldHVybiA9IFNldFdhaXRhYmxlVGltZXIoYUhhbmRsZXNbMV0sCi0JCQkJICAgJlRpbWVvdXRUaW1lLCAwLCBOVUxMLCBOVUxMLCBGQUxTRSk7Ci0JaWYgKGZSZXR1cm4gPT0gMCkgewotCQlSZXQgPSBrRXBsVGltZXJOb1RpbWVyQ3JlYXRlZDsKLQkJZ290byBFeGl0OwotCX0KLQkvLyBzYXZlIGRlbHRlIGV2ZW50IGhhbmRsZSBpbiBoYW5kbGUgYXJyYXkKLQlhSGFuZGxlc1swXSA9IHBUaHJlYWREYXRhLT5EZWx0ZUhhbmRsZTsKLQotCS8vIHdhaXQgZm9yIG9uZSBvZiB0aGUgZXZlbnRzCi0JdWxFdmVudCA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoMiwgJmFIYW5kbGVzWzBdLCBGQUxTRSwgSU5GSU5JVEUpOwotCWlmICh1bEV2ZW50ID09IFdBSVRfT0JKRUNUXzApIHsJLy8gZGVsdGUgZXZlbnQKLQotCQkvLyBjbG9zZSBoYW5kZWxzCi0JCUNsb3NlSGFuZGxlKGFIYW5kbGVzWzFdKTsKLQkJLy8gdGVybWluYXRlIHRocmVhZAotCQlnb3RvIEV4aXQ7Ci0JfSBlbHNlIGlmICh1bEV2ZW50ID09IChXQUlUX09CSkVDVF8wICsgMSkpIHsJLy8gdGltZXIgZXZlbnQKLQkJLy8gY2FsbCBldmVudCBmdW5jdGlvbgotCQlUaW1lckV2ZW50QXJnLm1fVGltZXJIZGwgPQotCQkgICAgKHRFcGxUaW1lckhkbCkgcFRocmVhZERhdGEtPkRlbHRlSGFuZGxlOwotCQlUaW1lckV2ZW50QXJnLm1fdWxBcmcgPSBwVGhyZWFkRGF0YS0+VGltZXJBcmd1bWVudC5tX3VsQXJnOwotCi0JCUVwbEV2ZW50Lm1fRXZlbnRTaW5rID0gcFRocmVhZERhdGEtPlRpbWVyQXJndW1lbnQubV9FdmVudFNpbms7Ci0JCUVwbEV2ZW50Lm1fRXZlbnRUeXBlID0ga0VwbEV2ZW50VHlwZVRpbWVyOwotCQlFUExfTUVNU0VUKCZFcGxFdmVudC5tX05ldFRpbWUsIDB4MDAsIHNpemVvZih0RXBsTmV0VGltZSkpOwotCQlFcGxFdmVudC5tX3BBcmcgPSAmVGltZXJFdmVudEFyZzsKLQkJRXBsRXZlbnQubV91aVNpemUgPSBzaXplb2YoVGltZXJFdmVudEFyZyk7Ci0KLQkJUmV0ID0gRXBsRXZlbnR1UG9zdCgmRXBsRXZlbnQpOwotCi0JCS8vIGNsb3NlIGhhbmRlbHMKLQkJQ2xvc2VIYW5kbGUoYUhhbmRsZXNbMV0pOwotCQkvLyB0ZXJtaW5hdGUgdGhyZWFkCi0JCWdvdG8gRXhpdDsKLQotCX0gZWxzZSB7CQkvLyBlcnJvcgotCQl1bEV2ZW50ID0gR2V0TGFzdEVycm9yKCk7Ci0JCVRSQUNFMSgiRXJyb3IgaW4gV2FpdEZvck11bHRpcGxlT2JqZWN0cyBFcnJvcmNvZGU6IDB4JXhcbiIsCi0JCSAgICAgICB1bEV2ZW50KTsKLQkJLy8gdGVybWluYXRlIHRocmVhZAotCQlnb3RvIEV4aXQ7Ci0JfQotCi0gICAgICBFeGl0OgotCXJldHVybiBSZXQ7Ci19Ci0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYXJlZEJ1ZmYuYwppbmRleCA5ZmIwOWQ2Li4yYjEwYzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYXJlZEJ1ZmYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYXJlZEJ1ZmYuYwpAQCAtODUsMTQgKzg1LDggQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmLmgiCiAjaW5jbHVkZSAiU2hiSXBjLmgiCiAKLS8vIGQuay4gTGludXgga2VybmVsIG1vZHVsZXMgbmVlZHMgb3RoZXIgaGVhZGVyIGZpbGVzIGZvciBtZW1jcHkoKQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwMiw4ICs5Niw2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmICghZGVmaW5lZChTSEFSRURCVUZGX0lOTElORUQpKSB8fCBkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIENvbmZpZ3VyYXRpb24KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzcsNyArMTY5LDcgQEAKIC8vICBHZXQgcG9pbnRlciB0byBDaXJjdWxhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkNpckJ1ZmYgKlNoYkNpckdldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit0U2hiQ2lyQnVmZiAqU2hiQ2lyR2V0QnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTE5Myw3ICsxODUsNyBAQAogLy8gIEdldCBwb2ludGVyIHRvIExpbmVhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkxpbkJ1ZmYgKlNoYkxpbkdldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit0U2hiTGluQnVmZiAqU2hiTGluR2V0QnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAogCXRTaGJMaW5CdWZmICpwU2hiTGluQnVmZjsKQEAgLTIxMCw3ICsyMDIsNiBAQAogdm9pZCBTaGJDaXJTaWduYWxIYW5kbGVyUmVzZXQodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAogCQkJICAgICAgdW5zaWduZWQgaW50IGZUaW1lT3V0X3ApOwogCi0jZW5kaWYKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCkBAIC0yMTgsNyArMjA5LDYgQEAKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogCi0jaWYgIWRlZmluZWQoSU5MSU5FX0VOQUJMRUQpCiAvLyBub3QgaW5saW5lZCBleHRlcm5hbCBmdW5jdGlvbnMKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM2MywxOCArMzUzLDEzIEBACiAKIH0KIAotI2VuZGlmIC8vICFkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCi0jaWYgKCFkZWZpbmVkKFNIQVJFREJVRkZfSU5MSU5FRCkpIHx8IGRlZmluZWQoSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgUmVzZXQgQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJSZXNldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIHVsVGltZU91dF9wLAotCQkJCQkgICAgdFNoYkNpclNpZ0huZGxyUmVzZXQKLQkJCQkJICAgIHBmblNpZ25hbEhhbmRsZXJSZXNldF9wKQordFNoYkVycm9yIFNoYkNpclJlc2V0QnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHVsVGltZU91dF9wLAorCQkJICAgIHRTaGJDaXJTaWdIbmRsclJlc2V0IHBmblNpZ25hbEhhbmRsZXJSZXNldF9wKQogewogCiAJdFNoYkNpckJ1ZmYgKnBTaGJDaXJCdWZmOwpAQCAtNDQwLDkgKzQyNSw5IEBACiAvLyAgV3JpdGUgZGF0YSBibG9jayB0byBDaXJjdWxhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYkNpcldyaXRlRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKLQkJCQkJICAgICAgIGNvbnN0IHZvaWQgKnBTcmNEYXRhQmxvY2tfcCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApCit0U2hiRXJyb3IgU2hiQ2lyV3JpdGVEYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJICAgICAgIGNvbnN0IHZvaWQgKnBTcmNEYXRhQmxvY2tfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUJsb2NrU2l6ZV9wKQogewogCiAJdFNoYkNpckJ1ZmYgKnBTaGJDaXJCdWZmOwpAQCAtNjA4LDkgKzU5Myw5IEBACiAvLyAgQWxsb2NhdGUgYmxvY2sgd2l0aGluIHRoZSBDaXJjdWxhciBTaGFyZWQgQnVmZmVyIGZvciBjaHVuayB3cml0aW5nCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYkNpckFsbG9jRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKLQkJCQkJICAgICAgIHRTaGJDaXJDaHVuayAqIHBTaGJDaXJDaHVua19wLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCdWZmZXJTaXplX3ApCit0U2hiRXJyb3IgU2hiQ2lyQWxsb2NEYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJICAgICAgIHRTaGJDaXJDaHVuayAqIHBTaGJDaXJDaHVua19wLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQnVmZmVyU2l6ZV9wKQogewogCiAJdFNoYkNpckJ1ZmYgKnBTaGJDaXJCdWZmOwpAQCAtNzE3LDEyICs3MDIsMTEgQEAKIC8vICBXcml0ZSBkYXRhIGNodW5rIGludG8gYW4gYWxsb2NhdGVkIGJ1ZmZlciBvZiB0aGUgQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJXcml0ZURhdGFDaHVuayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgICB0U2hiQ2lyQ2h1bmsgKiBwU2hiQ2lyQ2h1bmtfcCwKLQkJCQkJICAgICAgIGNvbnN0IHZvaWQgKnBTcmNEYXRhQ2h1bmtfcCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQ2h1bmtTaXplX3AsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJICAgICAgICpwZkJ1ZmZlckNvbXBsZXRlZF9wKQordFNoYkVycm9yIFNoYkNpcldyaXRlRGF0YUNodW5rKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCSAgICAgICB0U2hiQ2lyQ2h1bmsgKnBTaGJDaXJDaHVua19wLAorCQkJICAgICAgIGNvbnN0IHZvaWQgKnBTcmNEYXRhQ2h1bmtfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUNodW5rU2l6ZV9wLAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqcGZCdWZmZXJDb21wbGV0ZWRfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTg1NywxMCArODQxLDEwIEBACiAvLyAgUmVhZCBkYXRhIGJsb2NrIGZyb20gQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJSZWFkRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKLQkJCQkJICAgICAgdm9pZCAqcERzdERhdGFCbG9ja19wLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsUmRCdWZmU2l6ZV9wLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpwdWxEYXRhQmxvY2tTaXplX3ApCit0U2hiRXJyb3IgU2hiQ2lyUmVhZERhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkgICAgICB2b2lkICpwRHN0RGF0YUJsb2NrX3AsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsUmRCdWZmU2l6ZV9wLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqcHVsRGF0YUJsb2NrU2l6ZV9wKQogewogCiAJdFNoYkNpckJ1ZmYgKnBTaGJDaXJCdWZmOwpAQCAtMTAwOSw5ICs5OTMsOCBAQAogLy8gIEdldCBkYXRhIHNpemUgb2YgbmV4dCByZWFkYWJsZSBibG9jayBmcm9tIENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyR2V0UmVhZERhdGFTaXplKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcKLQkJCQkJCSpwdWxEYXRhQmxvY2tTaXplX3ApCit0U2hiRXJyb3IgU2hiQ2lyR2V0UmVhZERhdGFTaXplKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCQl1bnNpZ25lZCBsb25nICpwdWxEYXRhQmxvY2tTaXplX3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC0xMDcwLDkgKzEwNTMsOCBAQAogLy8gIEdldCBudW1iZXIgb2YgcmVhZGFibGUgYmxvY2tzIGZyb20gQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJHZXRSZWFkQmxvY2tDb3VudCh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCQkgIHVuc2lnbmVkIGxvbmcKLQkJCQkJCSAgKnB1bERhdGFCbG9ja0NvdW50X3ApCit0U2hiRXJyb3IgU2hiQ2lyR2V0UmVhZEJsb2NrQ291bnQodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqcHVsRGF0YUJsb2NrQ291bnRfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTExMTMsMTIgKzEwOTUsOSBAQAogLy8gIGQuay46IG5ldyBwYXJhbWV0ZXIgcHJpb3JpdHkgYXMgZW51bQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJTZXRTaWduYWxIYW5kbGVyTmV3RGF0YSh0U2hiSW5zdGFuY2UKLQkJCQkJCQlwU2hiSW5zdGFuY2VfcCwKLQkJCQkJCQl0U2hiQ2lyU2lnSG5kbHJOZXdEYXRhCi0JCQkJCQkJcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKLQkJCQkJCQl0U2hiUHJpb3JpdHkKLQkJCQkJCQlTaGJQcmlvcml0eV9wKQordFNoYkVycm9yIFNoYkNpclNldFNpZ25hbEhhbmRsZXJOZXdEYXRhKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCQkJdFNoYkNpclNpZ0huZGxyTmV3RGF0YSBwZm5TaWduYWxIYW5kbGVyTmV3RGF0YV9wLAorCQkJCQl0U2hiUHJpb3JpdHkgU2hiUHJpb3JpdHlfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTExNjUsMTAgKzExNDQsNiBAQAogCiB9CiAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgREVCVUc6IFRyYWNlIENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDEzLDE4ICsxMzg4LDEzIEBACiAKIH0KIAotI2VuZGlmIC8vICFkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCi0jaWYgKCFkZWZpbmVkKFNIQVJFREJVRkZfSU5MSU5FRCkpIHx8IGRlZmluZWQoSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgV3JpdGUgZGF0YSBibG9jayB0byBMaW5lYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJMaW5Xcml0ZURhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRHN0QnVmZmVyT2Zmc19wLAotCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqcFNyY0RhdGFCbG9ja19wLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCbG9ja1NpemVfcCkKK3RTaGJFcnJvciBTaGJMaW5Xcml0ZURhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERzdEJ1ZmZlck9mZnNfcCwKKwkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUJsb2NrX3AsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCbG9ja1NpemVfcCkKIHsKIAogCXRTaGJMaW5CdWZmICpwU2hiTGluQnVmZjsKQEAgLTE0ODksMTEgKzE0NTksMTAgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgUmVhZCBkYXRhIGJsb2NrIGZyb20gTGluZWFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiTGluUmVhZERhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBEc3REYXRhQmxvY2tfcCwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFNyY0J1ZmZlck9mZnNfcCwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCbG9ja1NpemVfcCkKK3RTaGJFcnJvciBTaGJMaW5SZWFkRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCSAgICAgIHZvaWQgKnBEc3REYXRhQmxvY2tfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxTcmNCdWZmZXJPZmZzX3AsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUJsb2NrU2l6ZV9wKQogewogCiAJdFNoYkxpbkJ1ZmYgKnBTaGJMaW5CdWZmOwpAQCAtMTU1NSwxMCArMTUyNCw2IEBACiAKIH0KIAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBERUJVRzogVHJhY2UgTGluZWFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjM5LDcgKzE2MDQsNyBAQAogCXVsQnVmZlNpemUgPSB1bERhdGFTaXplX3A7CiAKIAlpZiAocHN6SW5mb1RleHRfcCAhPSBOVUxMKSB7Ci0JCVRSQUNFMChwc3pJbmZvVGV4dF9wKTsKKwkJVFJBQ0UxKCIlcyIsIHBzekluZm9UZXh0X3ApOwogCX0KIAkvLyBkdW1wIGJ1ZmZlciBjb250ZW50cwogCWZvciAoblJvdyA9IDA7OyBuUm93KyspIHsKQEAgLTE3OTQsNiArMTc1OSw0IEBACiAKIH0KIAotI2VuZGlmCi0KIC8vIEVPRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYXJlZEJ1ZmYuaAppbmRleCAwZWMxYjRiLi40ZWRiZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYXJlZEJ1ZmYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYXJlZEJ1ZmYuaApAQCAtMTEwLDE1ICsxMTAsNiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotLyojaWYgZGVmaW5lZChJTkxJTkVfRlVOQ1RJT05fREVGKQotICAgICN1bmRlZiAgSU5MSU5FX0ZVTkNUSU9OCi0gICAgI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSAgICAjZGVmaW5lIElOTElORV9FTkFCTEVEICAgICAgVFJVRQotICAgICNkZWZpbmUgU0hBUkVEQlVGRl9JTkxJTkVECi0gICAgI2luY2x1ZGUgIlNoYXJlZEJ1ZmYuYyIKLSNlbmRpZgotKi8KLQogCXRTaGJFcnJvciBTaGJJbml0KHZvaWQpOwogCXRTaGJFcnJvciBTaGJFeGl0KHZvaWQpOwogCkBAIC0xMjksNyArMTIwLDYgQEAKIAkJCQkgICAgdW5zaWduZWQgaW50ICpwZlNoYk5ld0NyZWF0ZWRfcCk7CiAJdFNoYkVycm9yIFNoYkNpclJlbGVhc2VCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIAotI2lmICFkZWZpbmVkKElOTElORV9FTkFCTEVEKQogCiAJdFNoYkVycm9yIFNoYkNpclJlc2V0QnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVPdXRfcCwKQEAgLTE1OSw3ICsxNDksNiBAQAogCQkJCQkJcGZuU2hiU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKIAkJCQkJCXRTaGJQcmlvcml0eSBTaGJQcmlvcml0eV9wKTsKIAotI2VuZGlmCiAKIC8vIExpbmVhciBTaGFyZWQgQnVmZmVyCiAJdFNoYkVycm9yIFNoYkxpbkFsbG9jQnVmZmVyKHVuc2lnbmVkIGxvbmcgdWxCdWZmZXJTaXplX3AsCkBAIC0xNjgsNyArMTU3LDYgQEAKIAkJCQkgICAgdW5zaWduZWQgaW50ICpwZlNoYk5ld0NyZWF0ZWRfcCk7CiAJdFNoYkVycm9yIFNoYkxpblJlbGVhc2VCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIAotI2lmICFkZWZpbmVkKElOTElORV9FTkFCTEVEKQogCiAJdFNoYkVycm9yIFNoYkxpbldyaXRlRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERzdEJ1ZmZlck9mZnNfcCwKQEAgLTE3OSw3ICsxNjcsNiBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxTcmNCdWZmZXJPZmZzX3AsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCbG9ja1NpemVfcCk7CiAKLSNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwogCXRTaGJFcnJvciBTaGJDaXJUcmFjZUJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApOwpAQCAtMTk0LDEwICsxODEsNiBAQAogI2RlZmluZSBTaGJUcmFjZUR1bXAocDAsIHAxLCBwMiwgcDMpCiAjZW5kaWYKIAotI3VuZGVmICBJTkxJTkVfRU5BQkxFRAkJLy8gZGlzYWJsZSBhY3R1YWwgaW5saW5pbmcgb2YgZnVuY3Rpb25zCi0jdW5kZWYgIElOTElORV9GVU5DVElPTgotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04JCS8vIGRlZmluZSBJTkxJTkVfRlVOQ1RJT04gdG8gbm90aGluZwotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMtTGludXhLZXJuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLUxpbnV4S2VybmVsLmMKaW5kZXggMWQzY2IzZi4uNDk3OTM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMtTGludXhLZXJuZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy1MaW51eEtlcm5lbC5jCkBAIC03OSw4ICs3OSw2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmICghZGVmaW5lZChTSEJJUENfSU5MSU5FRCkpIHx8IGRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIENvbmZpZ3VyYXRpb24KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMTEsMTMgKzIwOSwxMSBAQAogLy8gbm90IGlubGluZWQgaW50ZXJuYWwgZnVuY3Rpb25zCiBpbnQgU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YSh2b2lkICpwdlRocmVhZFBhcmFtX3ApOwogaW50IFNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5KHZvaWQgKnB2VGhyZWFkUGFyYW1fcCk7Ci0jZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIG1vZHVsIGdsb2JhbGUgdmFycwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotI2lmICFkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKIHN0cnVjdCBzU2hiTWVtVGFibGUgKnBzTWVtVGFibGVFbGVtZW50Rmlyc3RfZzsKIAogc3RhdGljIHZvaWQgKlNoYklwY0FsbG9jUHJpdmF0ZU1lbSh1bnNpZ25lZCBsb25nIHVsTWVtU2l6ZV9wKTsKQEAgLTIzMCw3ICsyMjYsNiBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgU2hiSXBjQ3JjMzJHZXRDcmMoY29uc3QgY2hhciAqcGNTdHJpbmcsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXVsQ3JjVGFibGVbMjU2XSk7CiAKLSNlbmRpZgogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KQEAgLTIzOCw3ICsyMzMsNiBAQAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAKLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCiAvLyBub3QgaW5saW5lZCBleHRlcm5hbCBmdW5jdGlvbnMKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQzMywxNSArNDI3LDExIEBACiAJcmV0dXJuIChTaGJFcnJvcik7CiB9CiAKLSNlbmRpZiAvLyAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KLSNpZiAoIWRlZmluZWQoU0hCSVBDX0lOTElORUQpKSB8fCBkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBFbnRlciBhdG9taWMgc2VjdGlvbiBmb3IgU2hhcmVkIEJ1ZmZlciBhY2Nlc3MKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKK3RTaGJFcnJvciBTaGJJcGNFbnRlckF0b21pY1NlY3Rpb24odFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQogewogCiAJdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwpAQCAtNDY5LDcgKzQ1OSw3IEBACiAvLyAgTGVhdmUgYXRvbWljIHNlY3Rpb24gZm9yIFNoYXJlZCBCdWZmZXIgYWNjZXNzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY0xlYXZlQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit0U2hiRXJyb3IgU2hiSXBjTGVhdmVBdG9taWNTZWN0aW9uKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAogCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKQEAgLTQ5NiwxMiArNDg2LDkgQEAKIC8vICBTdGFydCBzaWduYWxpbmcgb2YgbmV3IGRhdGEgKGNhbGxlZCBmcm9tIHJlYWRpbmcgcHJvY2VzcykKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU3RhcnRTaWduYWxpbmdOZXdEYXRhKHRTaGJJbnN0YW5jZQotCQkJCQkJICAgICAgcFNoYkluc3RhbmNlX3AsCi0JCQkJCQkgICAgICB0U2lnSG5kbHJOZXdEYXRhCi0JCQkJCQkgICAgICBwZm5TaWduYWxIYW5kbGVyTmV3RGF0YV9wLAotCQkJCQkJICAgICAgdFNoYlByaW9yaXR5Ci0JCQkJCQkgICAgICBTaGJQcmlvcml0eV9wKQordFNoYkVycm9yIFNoYklwY1N0YXJ0U2lnbmFsaW5nTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkJICAgICAgdFNpZ0huZGxyTmV3RGF0YSBwZm5TaWduYWxIYW5kbGVyTmV3RGF0YV9wLAorCQkJCSAgICAgIHRTaGJQcmlvcml0eSBTaGJQcmlvcml0eV9wKQogewogCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKIAl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwpAQCAtNTU3LDggKzU0NCw3IEBACiAvLyAgU3RvcCBzaWduYWxpbmcgb2YgbmV3IGRhdGEgKGNhbGxlZCBmcm9tIHJlYWRpbmcgcHJvY2VzcykKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU3RvcFNpZ25hbGluZ05ld0RhdGEodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgIHBTaGJJbnN0YW5jZV9wKQordFNoYkVycm9yIFNoYklwY1N0b3BTaWduYWxpbmdOZXdEYXRhKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7CiAJdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKQEAgLTYwNCw3ICs1OTAsNyBAQAogLy8gIFNpZ25hbCBuZXcgZGF0YSAoY2FsbGVkIGZyb20gd3JpdGluZyBwcm9jZXNzKQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNTaWduYWxOZXdEYXRhKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKK3RTaGJFcnJvciBTaGJJcGNTaWduYWxOZXdEYXRhKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwogCkBAIC02MjUsMTIgKzYxMSw5IEBACiAvLyAgU3RhcnQgc2lnbmFsaW5nIGZvciBqb2IgcmVhZHkgKGNhbGxlZCBmcm9tIHdhaXRpbmcgcHJvY2VzcykKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU3RhcnRTaWduYWxpbmdKb2JSZWFkeSh0U2hiSW5zdGFuY2UKLQkJCQkJCSAgICAgICBwU2hiSW5zdGFuY2VfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nCi0JCQkJCQkgICAgICAgdWxUaW1lT3V0X3AsCi0JCQkJCQkgICAgICAgdFNpZ0huZGxySm9iUmVhZHkKLQkJCQkJCSAgICAgICBwZm5TaWduYWxIYW5kbGVySm9iUmVhZHlfcCkKK3RTaGJFcnJvciBTaGJJcGNTdGFydFNpZ25hbGluZ0pvYlJlYWR5KHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVPdXRfcCwKKwkJCQkgICAgICAgdFNpZ0huZGxySm9iUmVhZHkgcGZuU2lnbmFsSGFuZGxlckpvYlJlYWR5X3ApCiB7CiAJdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwogCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7CkBAIC02NjMsNyArNjQ2LDcgQEAKIC8vICBTaWduYWwgam9iIHJlYWR5IChjYWxsZWQgZnJvbSBleGVjdXRpbmcgcHJvY2VzcykKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsSm9iUmVhZHkodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQordFNoYkVycm9yIFNoYklwY1NpZ25hbEpvYlJlYWR5KHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwogCkBAIC02ODUsNyArNjY4LDcgQEAKIC8vICBHZXQgcG9pbnRlciB0byBjb21tb24gdXNlZCBzaGFyZSBtZW1vcnkgYXJlYQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgKlNoYklwY0dldFNoTWVtUHRyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKK3ZvaWQgKlNoYklwY0dldFNoTWVtUHRyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAogCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7CkBAIC02OTQsNyArNjc3LDcgQEAKIAlwU2hiTWVtSGVhZGVyID0KIAkgICAgU2hiSXBjR2V0U2hiTWVtSGVhZGVyKFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApKTsKIAlpZiAocFNoYk1lbUhlYWRlciAhPSBOVUxMKSB7Ci0JCXBTaGJTaE1lbVB0ciA9IChCWVRFICopIHBTaGJNZW1IZWFkZXIgKyBzaXplb2YodFNoYk1lbUhlYWRlcik7CisJCXBTaGJTaE1lbVB0ciA9ICh1OCAqKSBwU2hiTWVtSGVhZGVyICsgc2l6ZW9mKHRTaGJNZW1IZWFkZXIpOwogCX0gZWxzZSB7CiAJCXBTaGJTaE1lbVB0ciA9IE5VTEw7CiAJfQpAQCAtNzAzLDE2ICs2ODYsMTIgQEAKIAogfQogCi0jZW5kaWYKLQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLyAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAKLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgR2V0IHBvaW50ZXIgdG8gcHJvY2VzcyBsb2NhbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05NjMsNCArOTQyLDMgQEAKIAogfQogCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLVdpbjMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy1XaW4zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTE4MTQ3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLVdpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5Ci0gICAgICB3d3cuc3lzdGVjLWVsZWN0cm9uaWMuY29tCi0KLSAgUHJvamVjdDogICAgICBQcm9qZWN0IGluZGVwZW5kZW5kIHNoYXJlZCBidWZmZXIgKGxpbmVhciArIGNpcmN1bGFyKQotCi0gIERlc2NyaXB0aW9uOiAgSW1wbGVtZW50YXRpb24gb2YgcGxhdGZvcm0gc3BlY2lmaWMgcGFydCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgc2hhcmVkIGJ1ZmZlcgotICAgICAgICAgICAgICAgIChJbXBsZW1lbnRhdGlvbiBmb3IgV2luMzIpCi0KLSAgTGljZW5zZToKLQotICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICAgIGFyZSBtZXQ6Ci0KLSAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAgICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgotCi0gICAgICAgIElmIGEgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBvciBiZWNvbWVzIGlsbGVnYWwsIGludmFsaWQgb3IKLSAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6Ci0gICAgICAgIDEuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiB0aGF0IGp1cmlzZGljdGlvbiBvZiBhbnkgb3RoZXIKLSAgICAgICAgICAgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZTsgb3IKLSAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgotICAgICAgICAgICBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZS4KLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgMjAwNi8wNi8yNyAtcnM6ICAgViAxLjAwIChpbml0aWFsIHZlcnNpb24pCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgV0lOVkVSICAgICAgIDB4MDQwMAkvLyAjZGVmaW5lcyBuZWNlc3NhcnkgZm9yIHVzYWdlIG9mCi0jZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA0MDAJLy8gZnVuY3Rpb24gPFNpZ25hbE9iamVjdEFuZFdhaXQ+Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJnbG9iYWwuaCIKLSNpbmNsdWRlICJzaGFyZWRidWZmLmgiCi0jaW5jbHVkZSAic2hiaXBjLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgIEcgTCBPIEIgQSBMICAgRCBFIEYgSSBOIEkgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZiAoIWRlZmluZWQoU0hCSVBDX0lOTElORUQpKSB8fCBkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBDb25maWd1cmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIENvbnN0YW50IGRlZmluaXRpb25zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIE1BWF9MRU5fQlVGRkVSX0lEICAgICAgIE1BWF9QQVRICi0KLSNkZWZpbmUgSURYX0VWRU5UX05FV19EQVRBICAgICAgMAotI2RlZmluZSBJRFhfRVZFTlRfVEVSTV9SRVFVICAgICAxCi0jZGVmaW5lIElEWF9FVkVOVF9URVJNX1JFU1AgICAgIDIKLQotI2RlZmluZSBOQU1FX01VVEVYX0JVRkZfQUNDRVNTICAiQnVmZkFjY2VzcyIKLSNkZWZpbmUgTkFNRV9FVkVOVF9ORVdfREFUQSAgICAgIk5ld0RhdGEiCi0jZGVmaW5lIE5BTUVfRVZFTlRfVEVSTV9SRVFVICAgICJUZXJtUmVxdSIKLSNkZWZpbmUgTkFNRV9FVkVOVF9URVJNX1JFU1AgICAgIlRlcm1SZXNwIgotI2RlZmluZSBOQU1FX0VWRU5UX0pPQl9SRUFEWSAgICAiSm9iUmVhZHkiCi0KLSNkZWZpbmUgVElNRU9VVF9FTlRFUl9BVE9NSUMgICAgMTAwMAkvLyBmb3IgZGViZ2dpbmc6IElORklOSVRFCi0jZGVmaW5lIFRJTUVPVVRfVEVSTV9USFJFQUQgICAgIDIwMDAKLQotI2RlZmluZSBTQklfTUFHSUNfSUQgICAgICAgICAgICAweDUzNDI0OTJCCS8vIG1hZ2ljIElEICgiU0JJKyIpCi0jZGVmaW5lIFNCSF9NQUdJQ19JRCAgICAgICAgICAgIDB4NTM0MjQ4MkEJLy8gbWFnaWMgSUQgKCJTQkgqIikKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBMb2NhbCB0eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIGNvbW1vbiBoZWFkZXIgZm9yIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiB1c2VkCi0vLyBieSBhbGwgcHJvY2Vzc2VzIGF0dGFjaGVkIHRoaXMgc2hhcmVkIG1lbW9yeS4gSXQgaW5jbHVkZXMgY29tbW9uCi0vLyBpbmZvcm1hdGlvbiB0byBhZG1pbmlzdHJhdGUvbWFuYWdlIHRoZSBzaGFyZWQgYnVmZmVyIGZyb20gYSBjb3VwbGUgb2YKLS8vIHNlcGFyYXRlZCBwcm9jZXNzZXMgKGUuZy4gdGhlIHJlZmVybmNlIGNvdW50ZXIpLiBUaGlzIHN0cnVjdHVyZSBpcwotLy8gbG9jYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGl0c2VsZiBhbmQgZXhpc3RzCi0vLyBjb25zZXF1ZW50bHkgb25seSBvbmUgdGltZXMgcGVyIHNoYXJlZCBtZW1vcnkgaW5zdGFuY2UuCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBtX1NiaE1hZ2ljSUQ7CS8vIG1hZ2ljIElEICgiU0JIKiIpCi0JdW5zaWduZWQgbG9uZyBtX3VsU2hNZW1TaXplOwotCXVuc2lnbmVkIGxvbmcgbV91bFJlZkNvdW50OwotCWNoYXIgbV9zekJ1ZmZlcklEW01BWF9MRU5fQlVGRkVSX0lEXTsKLQotI2lmbmRlZiBOREVCVUcKLQl1bnNpZ25lZCBsb25nIG1fdWxPd25lclByb2NJRDsKLSNlbmRpZgotCi19IHRTaGJNZW1IZWFkZXI7Ci0KLS8vIFRoaXMgc3RydWN0dXJlIGlzIHRoZSAiZXh0ZXJuYWwgZW50cnkgcG9pbnQiIGZyb20gYSBzZXBhcmF0ZSBwcm9jZXNzCi0vLyB0byBnZXQgYWNjZXNzIHRvIGEgc2hhcmVkIGJ1ZmZlci4gVGhpcyBzdHJ1Y3R1cmUgaW5jbHVkZXMgYWxsIHBsYXRmb3JtCi0vLyByZXNwLiB0YXJnZXQgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gYWRtaW5pc3RyYXRlL21hbmFnZSB0aGUgc2hhcmVkCi0vLyBidWZmZXIgZnJvbSBhIHNlcGFyYXRlIHByb2Nlc3MuIEV2ZXJ5IHByb2Nlc3MgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZAotLy8gYnVmZmVyIGhhcyBpdHMgb3duIHJ1bnRpbWUgaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgd2l0aCBpdHMgaW5kaXZpZHVhbAotLy8gcnVudGltZSBkYXRhIChlLmcuIHRoZSBzY29wZSBvZiBhbiBldmVudCBoYW5kbGUgaXMgbGltaXR0ZWQgdG8gdGhlCi0vLyBvd25lciBwcm9jZXNzIG9ubHkpLiBUaGUgc3RydWN0dXJlIG1lbWJlciA8bV9wU2hiTWVtSGVhZGVyPiBwb2ludHMKLS8vIHRvIHRoZSAocHJvY2VzcyBzcGVjaWZpYykgc3RhcnQgYWRkcmVzcyBvZiB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24KLS8vIGl0c2VsZi4KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIG1fU2JpTWFnaWNJRDsJLy8gbWFnaWMgSUQgKCJTQkkrIikKLQlIQU5ETEUgbV9oU2hhcmVkTWVtOwotCUhBTkRMRSBtX2hNdXRleEJ1ZmZBY2Nlc3M7Ci0JSEFORExFIG1faFRocmVhZE5ld0RhdGE7CS8vIHRocmFlZCB0byBzaWduYWwgdGhhdCBuZXcgZGF0YSBhcmUgYXZhaWxhYmxlCi0JSEFORExFIG1fYWhFdmVudE5ld0RhdGFbM107CS8vIElEWF9FVkVOVF9ORVdfREFUQSArIElEWF9FVkVOVF9URVJNX1JFUVUgKyBJRF9FVkVOVF9URVJNX1JFU1AKLQl0U2lnSG5kbHJOZXdEYXRhIG1fcGZuU2lnSG5kbHJOZXdEYXRhOwotCUhBTkRMRSBtX2hUaHJlYWRKb2JSZWFkeTsJLy8gdGhyZWFkIHRvIHNpZ25hbCB0aGF0IGEgam9iL29wZXJhdGlvbiBpcyByZWFkeSBub3cgKGUuZy4gcmVzZXQgYnVmZmVyKQotCUhBTkRMRSBtX2hFdmVudEpvYlJlYWR5OwotCXVuc2lnbmVkIGxvbmcgbV91bFRpbWVPdXRKb2JSZWFkeTsKLQl0U2lnSG5kbHJKb2JSZWFkeSBtX3BmblNpZ0huZGxySm9iUmVhZHk7Ci0JdFNoYk1lbUhlYWRlciAqbV9wU2hiTWVtSGVhZGVyOwotCi0jaWZuZGVmIE5ERUJVRwotCXVuc2lnbmVkIGxvbmcgbV91bFRocmVhZElETmV3RGF0YTsKLQl1bnNpZ25lZCBsb25nIG1fdWxUaHJlYWRJREpvYlJlYWR5OwotI2VuZGlmCi0KLX0gdFNoYk1lbUluc3Q7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgR2xvYmFsIHZhcmlhYmxlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBMb2NhbCB2YXJpYWJsZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgUHJvdG90eXBlcyBvZiBpbnRlcm5hbCBmdW5jdGlvbnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgR2V0IHBvaW50ZXIgdG8gcHJvY2VzcyBsb2NhbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiTWVtSW5zdCAqU2hiSXBjR2V0U2hiTWVtSW5zdCh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0KLQlwU2hiTWVtSW5zdCA9ICh0U2hiTWVtSW5zdCAqKSBwU2hiSW5zdGFuY2VfcDsKLQlBU1NFUlQocFNoYk1lbUluc3QtPm1fU2JpTWFnaWNJRCA9PSBTQklfTUFHSUNfSUQpOwotCi0JcmV0dXJuIChwU2hiTWVtSW5zdCk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBHZXQgcG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IGhlYWRlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJNZW1IZWFkZXIgKlNoYklwY0dldFNoYk1lbUhlYWRlcih0U2hiSW5zdGFuY2UKLQkJCQkJCSAgICAgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKLQotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2VfcCk7Ci0JcFNoYk1lbUhlYWRlciA9IHBTaGJNZW1JbnN0LT5tX3BTaGJNZW1IZWFkZXI7Ci0JQVNTRVJUKHBTaGJNZW1IZWFkZXItPm1fU2JoTWFnaWNJRCA9PSBTQkhfTUFHSUNfSUQpOwotCi0JcmV0dXJuIChwU2hiTWVtSGVhZGVyKTsKLQotfQotCi0vLyBub3QgaW5saW5lZCBpbnRlcm5hbCBmdW5jdGlvbnMKLURXT1JEIFdJTkFQSSBTaGJJcGNUaHJlYWRTaWduYWxOZXdEYXRhKExQVk9JRCBwdlRocmVhZFBhcmFtX3ApOwotRFdPUkQgV0lOQVBJIFNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5KExQVk9JRCBwdlRocmVhZFBhcmFtX3ApOwotY29uc3QgY2hhciAqU2hiSXBjR2V0VW5pZm9ybU9iamVjdE5hbWUoY29uc3QgY2hhciAqcHN6RXZlbnRKb2JOYW1lX3AsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgKnBzekJ1ZmZlcklEX3AsCi0JCQkJICAgICAgIEJPT0wgZkdsb2JhbE9iamVjdF9wKTsKLQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0vLyB0cnVlIGludGVybmFsIGZ1bmN0aW9ucyAobm90IGlubGluZWQpCi1zdGF0aWMgdm9pZCAqU2hiSXBjQWxsb2NQcml2YXRlTWVtKHVuc2lnbmVkIGxvbmcgdWxNZW1TaXplX3ApOwotc3RhdGljIHZvaWQgU2hiSXBjUmVsZWFzZVByaXZhdGVNZW0odm9pZCAqcE1lbV9wKTsKLSNlbmRpZgotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgIFAgVSBCIEwgSSBDICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLQotI2lmICFkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLS8vIG5vdCBpbmxpbmVkIGV4dGVybmFsIGZ1bmN0aW9ucwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIEluaXRpYWxpemUgSVBDIGZvciBTaGFyZWQgQnVmZmVyIE1vZHVsZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdFNoYkVycm9yIFNoYklwY0luaXQodm9pZCkKLXsKLQotCXJldHVybiAoa1NoYk9rKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIERlaW5pdGlhbGl6ZSBJUEMgZm9yIFNoYXJlZCBCdWZmZXIgTW9kdWxlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10U2hiRXJyb3IgU2hiSXBjRXhpdCh2b2lkKQotewotCi0JcmV0dXJuIChrU2hiT2spOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgQWxsb2NhdGUgU2hhcmVkIEJ1ZmZlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdFNoYkVycm9yIFNoYklwY0FsbG9jQnVmZmVyKHVuc2lnbmVkIGxvbmcgdWxCdWZmZXJTaXplX3AsCi0JCQkgICAgY29uc3QgY2hhciAqcHN6QnVmZmVySURfcCwKLQkJCSAgICB0U2hiSW5zdGFuY2UgKiBwcFNoYkluc3RhbmNlX3AsCi0JCQkgICAgdW5zaWduZWQgaW50ICpwZlNoYk5ld0NyZWF0ZWRfcCkKLXsKLQotCUhBTkRMRSBoU2hhcmVkTWVtOwotCUxQVk9JRCBwU2hhcmVkTWVtOwotCXVuc2lnbmVkIGxvbmcgdWxTaE1lbVNpemU7Ci0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7Ci0JdFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZTsKLQl1bnNpZ25lZCBpbnQgZlNoTWVtTmV3Q3JlYXRlZDsKLQljb25zdCBjaGFyICpwc3pPYmplY3ROYW1lOwotCUhBTkRMRSBoTXV0ZXhCdWZmQWNjZXNzOwotCUhBTkRMRSBoRXZlbnROZXdEYXRhOwotCUhBTkRMRSBoRXZlbnRKb2JSZWFkeTsKLQl0U2hiRXJyb3IgU2hiRXJyb3I7Ci0KLQl1bFNoTWVtU2l6ZSA9IHVsQnVmZmVyU2l6ZV9wICsgc2l6ZW9mKHRTaGJNZW1IZWFkZXIpOwotCXBTaGFyZWRNZW0gPSBOVUxMOwotCXBTaGJJbnN0YW5jZSA9IE5VTEw7Ci0JZlNoTWVtTmV3Q3JlYXRlZCA9IEZBTFNFOwotCVNoYkVycm9yID0ga1NoYk9rOwotCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkvLyAoMSkgb3BlbiBhbiBleGlzdGluZyBvciBjcmVhdGUgYSBuZXcgc2hhcmVkIG1lbW9yeQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gdHJ5IHRvIG9wZW4gYW4gYWxyZWFkeSBleGlzdGluZyBzaGFyZWQgbWVtb3J5Ci0JLy8gKGNyZWF0ZWQgYnkgYW4gYW5vdGhlciBwcm9jZXNzKQotCWhTaGFyZWRNZW0gPSBPcGVuRmlsZU1hcHBpbmcoRklMRV9NQVBfQUxMX0FDQ0VTUywJLy8gRFdPUkQgZHdEZXNpcmVkQWNjZXNzCi0JCQkJICAgICBGQUxTRSwJLy8gQk9PTCBiSW5oZXJpdEhhbmRsZQotCQkJCSAgICAgcHN6QnVmZmVySURfcCk7CS8vIExQQ1RTVFIgbHBOYW1lCi0JaWYgKGhTaGFyZWRNZW0gIT0gTlVMTCkgewotCQkvLyBhIHNoYXJlZCBtZW1vcnkgYWxyZWFkeSBleGlzdHMKLQkJZlNoTWVtTmV3Q3JlYXRlZCA9IEZBTFNFOwotCX0gZWxzZSB7Ci0JCS8vIGl0IHNlYW1zIHRoYXQgdGhpcyBwcm9jZXNzIGlzIHRoZSBmaXJzdCB3aG8gd2FudHMgdG8gdXNlIHRoZQotCQkvLyBzaGFyZWQgbWVtb3J5LCBzbyBpdCBoYXMgdG8gY3JlYXRlIGEgbmV3IHNoYXJlZCBtZW1vcnkKLQkJaFNoYXJlZE1lbSA9IENyZWF0ZUZpbGVNYXBwaW5nKElOVkFMSURfSEFORExFX1ZBTFVFLAkvLyBIQU5ETEUgaEZpbGUKLQkJCQkJICAgICAgIE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscEF0dHJpYnV0ZXMKLQkJCQkJICAgICAgIFBBR0VfUkVBRFdSSVRFLAkvLyBEV09SRCBmbFByb3RlY3QKLQkJCQkJICAgICAgIDAsCS8vIERXT1JEIGR3TWF4aW11bVNpemVIaWdoCi0JCQkJCSAgICAgICB1bFNoTWVtU2l6ZSwJLy8gRFdPUkQgZHdNYXhpbXVtU2l6ZUxvdwotCQkJCQkgICAgICAgcHN6QnVmZmVySURfcCk7CS8vIExQQ1RTVFIgbHBOYW1lCi0KLQkJZlNoTWVtTmV3Q3JlYXRlZCA9IFRSVUU7Ci0JfQotCi0JaWYgKGhTaGFyZWRNZW0gPT0gTlVMTCkgewotCQlTaGJFcnJvciA9IGtTaGJPdXRPZk1lbTsKLQkJZ290byBFeGl0OwotCX0KLQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gKDIpIGdldCB0aGUgcG9pbnRlciB0byB0aGUgc2hhcmVkIG1lbW9yeQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JcFNoYXJlZE1lbSA9IE1hcFZpZXdPZkZpbGUoaFNoYXJlZE1lbSwJLy8gSEFORExFIGhGaWxlTWFwcGluZ09iamVjdAotCQkJCSAgIEZJTEVfTUFQX0FMTF9BQ0NFU1MsCS8vIERXT1JEIGR3RGVzaXJlZEFjY2VzcywKLQkJCQkgICAwLAkvLyBEV09SRCBkd0ZpbGVPZmZzZXRIaWdoLAotCQkJCSAgIDAsCS8vIERXT1JEIGR3RmlsZU9mZnNldExvdywKLQkJCQkgICB1bFNoTWVtU2l6ZSk7CS8vIFNJWkVfVCBkd051bWJlck9mQnl0ZXNUb01hcAotCi0JaWYgKHBTaGFyZWRNZW0gPT0gTlVMTCkgewotCQlTaGJFcnJvciA9IGtTaGJPdXRPZk1lbTsKLQkJZ290byBFeGl0OwotCX0KLQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gKDMpIHNldHVwIG9yIHVwZGF0ZSBoZWFkZXIgYW5kIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXBTaGJNZW1IZWFkZXIgPSAodFNoYk1lbUhlYWRlciAqKSBwU2hhcmVkTWVtOwotCi0JLy8gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgZnJvbSBwcm9jZXNzIHNwZWNpZmljIG1lbXBvb2wgdG8gc2F2ZQotCS8vIHByb2Nlc3MgbG9jYWwgaW5mb3JtYXRpb24gdG8gYWRtaW5pc3RyYXRlL21hbmFnZSB0aGUgc2hhcmVkIGJ1ZmZlcgotCXBTaGJNZW1JbnN0ID0KLQkgICAgKHRTaGJNZW1JbnN0ICopIFNoYklwY0FsbG9jUHJpdmF0ZU1lbShzaXplb2YodFNoYk1lbUluc3QpKTsKLQlpZiAocFNoYk1lbUluc3QgPT0gTlVMTCkgewotCQlTaGJFcnJvciA9IGtTaGJPdXRPZk1lbTsKLQkJZ290byBFeGl0OwotCX0KLQkvLyByZXNldCBjb21wbGV0ZSBoZWFkZXIgdG8gZGVmYXVsdCB2YWx1ZXMKLQlwU2hiTWVtSW5zdC0+bV9TYmlNYWdpY0lEID0gU0JJX01BR0lDX0lEOwotCXBTaGJNZW1JbnN0LT5tX2hTaGFyZWRNZW0gPSBoU2hhcmVkTWVtOwotCXBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3MgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9oVGhyZWFkTmV3RGF0YSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV0gPQotCSAgICBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSA9Ci0JICAgIElOVkFMSURfSEFORExFX1ZBTFVFOwotCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdID0KLQkgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJOZXdEYXRhID0gTlVMTDsKLQlwU2hiTWVtSW5zdC0+bV9oVGhyZWFkSm9iUmVhZHkgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCXBTaGJNZW1JbnN0LT5tX3VsVGltZU91dEpvYlJlYWR5ID0gMDsKLQlwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsckpvYlJlYWR5ID0gTlVMTDsKLQlwU2hiTWVtSW5zdC0+bV9wU2hiTWVtSGVhZGVyID0gcFNoYk1lbUhlYWRlcjsKLQotI2lmbmRlZiBOREVCVUcKLQl7Ci0JCXBTaGJNZW1JbnN0LT5tX3VsVGhyZWFkSUROZXdEYXRhID0gMDsKLQkJcFNoYk1lbUluc3QtPm1fdWxUaHJlYWRJREpvYlJlYWR5ID0gMDsKLQl9Ci0jZW5kaWYKLQotCS8vIGNyZWF0ZSBtdXRleCBmb3IgYnVmZmVyIGFjY2VzcwotCXBzek9iamVjdE5hbWUgPQotCSAgICBTaGJJcGNHZXRVbmlmb3JtT2JqZWN0TmFtZShOQU1FX01VVEVYX0JVRkZfQUNDRVNTLCBwc3pCdWZmZXJJRF9wLAotCQkJCSAgICAgICBUUlVFKTsKLQloTXV0ZXhCdWZmQWNjZXNzID0gQ3JlYXRlTXV0ZXgoTlVMTCwJLy8gTFBTRUNVUklUWV9BVFRSSUJVVEVTIGxwTXV0ZXhBdHRyaWJ1dGVzCi0JCQkJICAgICAgIEZBTFNFLAkvLyBCT09MIGJJbml0aWFsT3duZXIKLQkJCQkgICAgICAgcHN6T2JqZWN0TmFtZSk7CS8vIExQQ1RTVFIgbHBOYW1lCi0JcFNoYk1lbUluc3QtPm1faE11dGV4QnVmZkFjY2VzcyA9IGhNdXRleEJ1ZmZBY2Nlc3M7Ci0JQVNTRVJUKHBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3MgIT0gTlVMTCk7Ci0KLQkvLyBUaGUgRXZlbnROZXdEYXRhIGlzIHVzZWQgZm9yIHNpZ25hbGluZyBvZiBuZXcgZGF0YSBhZnRlciBhIHdyaXRlCi0JLy8gb3BlcmF0aW9uIChTZXRFdmVudCkgYXMgd2VsbCBhcyBmb3Igd2FpdGluZyBmb3IgbmV3IGRhdGEgb24gdGhlCi0JLy8gcmVhZGVyIHNpZGUgKFdhaXRGb3JNdWx0aXBsZU9iamVjdHMpLiBCZWNhdXNlIGl0J3Mgbm90IGtub3duIGlmCi0JLy8gdGhpcyBwcm9jZXNzIHdpbGwgYmUgcmVhZCBvciB3cml0ZSBkYXRhLCB0aGUgZXZlbnQgd2lsbCBiZQotCS8vIGFsd2F5cyBjcmVhdGVkIGhlcmUuCi0JcHN6T2JqZWN0TmFtZSA9Ci0JICAgIFNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKE5BTUVfRVZFTlRfTkVXX0RBVEEsIHBzekJ1ZmZlcklEX3AsCi0JCQkJICAgICAgIFRSVUUpOwotCWhFdmVudE5ld0RhdGEgPSBDcmVhdGVFdmVudChOVUxMLAkvLyBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgbHBFdmVudEF0dHJpYnV0ZXMKLQkJCQkgICAgRkFMU0UsCS8vIEJPT0wgYk1hbnVhbFJlc2V0Ci0JCQkJICAgIEZBTFNFLAkvLyBCT09MIGJJbml0aWFsU3RhdGUKLQkJCQkgICAgcHN6T2JqZWN0TmFtZSk7CS8vIExQQ1RTVFIgbHBOYW1lCi0JcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX05FV19EQVRBXSA9IGhFdmVudE5ld0RhdGE7Ci0JQVNTRVJUKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV0gIT0gTlVMTCk7Ci0KLQkvLyBUaGUgRXZlbnRKb2JSZWFkeSBpcyB1c2VkIGZvciBzaWduYWxpbmcgdGhhdCBhIGpvYiBpcyBkb25lIChTZXRFdmVudCkKLQkvLyBhcyB3ZWxsIGFzIGZvciB3YWl0aW5nIGZvciBmaW5pc2hpbmcgb2YgYSBqb2IgKFdhaXRGb3JNdWx0aXBsZU9iamVjdHMpLgotCS8vIEJlY2F1c2UgaXQncyBub3Qga25vd24gaWYgdGhpcyBwcm9jZXNzIHdpbGwgc2lnbmFsIG9yIHdhaXQsIHRoZSBldmVudAotCS8vIHdpbGwgYmUgYWx3YXlzIGNyZWF0ZWQgaGVyZS4KLQlwc3pPYmplY3ROYW1lID0KLQkgICAgU2hiSXBjR2V0VW5pZm9ybU9iamVjdE5hbWUoTkFNRV9FVkVOVF9KT0JfUkVBRFksIHBzekJ1ZmZlcklEX3AsCi0JCQkJICAgICAgIFRSVUUpOwotCWhFdmVudEpvYlJlYWR5ID0gQ3JlYXRlRXZlbnQoTlVMTCwJLy8gTFBTRUNVUklUWV9BVFRSSUJVVEVTIGxwRXZlbnRBdHRyaWJ1dGVzCi0JCQkJICAgICBGQUxTRSwJLy8gQk9PTCBiTWFudWFsUmVzZXQKLQkJCQkgICAgIEZBTFNFLAkvLyBCT09MIGJJbml0aWFsU3RhdGUKLQkJCQkgICAgIHBzek9iamVjdE5hbWUpOwkvLyBMUENUU1RSIGxwTmFtZQotCXBTaGJNZW1JbnN0LT5tX2hFdmVudEpvYlJlYWR5ID0gaEV2ZW50Sm9iUmVhZHk7Ci0JQVNTRVJUKHBTaGJNZW1JbnN0LT5tX2hFdmVudEpvYlJlYWR5ICE9IE5VTEwpOwotCi0JaWYgKGZTaE1lbU5ld0NyZWF0ZWQpIHsKLQkJLy8gdGhpcyBwcm9jZXNzIHdhcyB0aGUgZmlyc3Qgd2hvIHdhbnRlZCB0byB1c2UgdGhlIHNoYXJlZCBtZW1vcnksCi0JCS8vIHNvIGEgbmV3IHNoYXJlZCBtZW1vcnkgd2FzIGNyZWF0ZWQKLQkJLy8gLT4gc2V0dXAgbmV3IGhlYWRlciBpbmZvcm1hdGlvbiBpbnNpZGUgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uCi0JCS8vICAgIGl0c2VsZgotCQlwU2hiTWVtSGVhZGVyLT5tX1NiaE1hZ2ljSUQgPSBTQkhfTUFHSUNfSUQ7Ci0JCXBTaGJNZW1IZWFkZXItPm1fdWxTaE1lbVNpemUgPSB1bFNoTWVtU2l6ZTsKLQkJcFNoYk1lbUhlYWRlci0+bV91bFJlZkNvdW50ID0gMTsKLQkJc3RybmNweShwU2hiTWVtSGVhZGVyLT5tX3N6QnVmZmVySUQsIHBzekJ1ZmZlcklEX3AsCi0JCQlzaXplb2YocFNoYk1lbUhlYWRlci0+bV9zekJ1ZmZlcklEKSAtIDEpOwotCi0jaWZuZGVmIE5ERUJVRwotCQl7Ci0JCQlwU2hiTWVtSGVhZGVyLT5tX3VsT3duZXJQcm9jSUQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0JCX0KLSNlbmRpZgotCX0gZWxzZSB7Ci0JCS8vIGFueSBvdGhlciBwcm9jZXNzIGhhcyBjcmVhdGVkIHRoZSBzaGFyZWQgbWVtb3J5IGFuZCB0aGlzCi0JCS8vIHByb2Nlc3MgaGFzIG9ubHkgYXR0YWNoZWQgdG8gaXQKLQkJLy8gLT4gY2hlY2sgYW5kIHVwZGF0ZSBleGlzdGluZyBoZWFkZXIgaW5mb3JtYXRpb24gaW5zaWRlIHRoZQotCQkvLyAgICBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBpdHNlbGYKLQkJaWYgKHBTaGJNZW1IZWFkZXItPm1fdWxTaE1lbVNpemUgIT0gdWxTaE1lbVNpemUpIHsKLQkJCVNoYkVycm9yID0ga1NoYk9wZW5NaXNtYXRjaDsKLQkJCWdvdG8gRXhpdDsKLQkJfQotI2lmbmRlZiBOREVCVUcKLQkJewotCQkJaWYgKHN0cm5jbXAKLQkJCSAgICAocFNoYk1lbUhlYWRlci0+bV9zekJ1ZmZlcklELCBwc3pCdWZmZXJJRF9wLAotCQkJICAgICBzaXplb2YocFNoYk1lbUhlYWRlci0+bV9zekJ1ZmZlcklEKSAtIDEpKSB7Ci0JCQkJU2hiRXJyb3IgPSBrU2hiT3Blbk1pc21hdGNoOwotCQkJCWdvdG8gRXhpdDsKLQkJCX0KLQkJfQotI2VuZGlmCi0KLQkJcFNoYk1lbUhlYWRlci0+bV91bFJlZkNvdW50Kys7Ci0JfQotCi0JLy8gc2V0IGFic3RhcmN0ICJoYW5kbGUiIGZvciByZXR1cm5pbmcgdG8gYXBwbGljYXRpb24KLQlwU2hiSW5zdGFuY2UgPSAodFNoYkluc3RhbmNlICopIHBTaGJNZW1JbnN0OwotCi0gICAgICBFeGl0OgotCi0JaWYgKFNoYkVycm9yICE9IGtTaGJPaykgewotCQlpZiAocFNoYk1lbUluc3QgIT0gTlVMTCkgewotCQkJU2hiSXBjUmVsZWFzZVByaXZhdGVNZW0ocFNoYk1lbUluc3QpOwotCQl9Ci0JCWlmIChwU2hhcmVkTWVtICE9IE5VTEwpIHsKLQkJCVVubWFwVmlld09mRmlsZShwU2hhcmVkTWVtKTsKLQkJfQotCQlpZiAoaFNoYXJlZE1lbSAhPSBOVUxMKSB7Ci0JCQlDbG9zZUhhbmRsZShoU2hhcmVkTWVtKTsKLQkJfQotCX0KLQotCSpwZlNoYk5ld0NyZWF0ZWRfcCA9IGZTaE1lbU5ld0NyZWF0ZWQ7Ci0JKnBwU2hiSW5zdGFuY2VfcCA9IHBTaGJJbnN0YW5jZTsKLQotCXJldHVybiAoU2hiRXJyb3IpOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgUmVsZWFzZSBTaGFyZWQgQnVmZmVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10U2hiRXJyb3IgU2hiSXBjUmVsZWFzZUJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKLQlIQU5ETEUgaEV2ZW50TmV3RGF0YTsKLQlIQU5ETEUgaE11dGV4QnVmZkFjY2VzczsKLQl0U2hiRXJyb3IgU2hiRXJyb3I7Ci0JdFNoYkVycm9yIFNoYkVycm9yMjsKLQotCWlmIChwU2hiSW5zdGFuY2VfcCA9PSBOVUxMKSB7Ci0JCXJldHVybiAoa1NoYk9rKTsKLQl9Ci0KLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApOwotCXBTaGJNZW1IZWFkZXIgPSBTaGJJcGNHZXRTaGJNZW1IZWFkZXIocFNoYkluc3RhbmNlX3ApOwotCi0JaWYgKCEtLXBTaGJNZW1IZWFkZXItPm1fdWxSZWZDb3VudCkgewotCQlTaGJFcnJvciA9IGtTaGJPazsKLQl9IGVsc2UgewotCQlTaGJFcnJvciA9IGtTaGJNZW1Vc2VkQnlPdGhlclByb2NzOwotCX0KLQotCVNoYkVycm9yMiA9IFNoYklwY1N0b3BTaWduYWxpbmdOZXdEYXRhKHBTaGJJbnN0YW5jZV9wKTsKLQloRXZlbnROZXdEYXRhID0gcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX05FV19EQVRBXTsKLQlpZiAoaEV2ZW50TmV3RGF0YSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlDbG9zZUhhbmRsZShoRXZlbnROZXdEYXRhKTsKLQkJcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX05FV19EQVRBXSA9Ci0JCSAgICBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQl9Ci0KLQloTXV0ZXhCdWZmQWNjZXNzID0gcFNoYk1lbUluc3QtPm1faE11dGV4QnVmZkFjY2VzczsKLQlpZiAoaE11dGV4QnVmZkFjY2VzcyAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlDbG9zZUhhbmRsZShoTXV0ZXhCdWZmQWNjZXNzKTsKLQkJcFNoYk1lbUluc3QtPm1faE11dGV4QnVmZkFjY2VzcyA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCX0KLQotCVVubWFwVmlld09mRmlsZShwU2hiTWVtSGVhZGVyKTsKLQlpZiAocFNoYk1lbUluc3QtPm1faFNoYXJlZE1lbSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlDbG9zZUhhbmRsZShwU2hiTWVtSW5zdC0+bV9oU2hhcmVkTWVtKTsKLQkJcFNoYk1lbUluc3QtPm1faFNoYXJlZE1lbSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCX0KLQotCVNoYklwY1JlbGVhc2VQcml2YXRlTWVtKHBTaGJNZW1JbnN0KTsKLQotCWlmIChTaGJFcnJvciA9PSBrU2hiT2spIHsKLQkJU2hiRXJyb3IgPSBTaGJFcnJvcjI7Ci0JfQotCi0JcmV0dXJuIChTaGJFcnJvcik7Ci0KLX0KLQotI2VuZGlmIC8vICFkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQotI2lmICghZGVmaW5lZChTSEJJUENfSU5MSU5FRCkpIHx8IGRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIEVudGVyIGF0b21pYyBzZWN0aW9uIGZvciBTaGFyZWQgQnVmZmVyIGFjY2VzcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNFbnRlckF0b21pY1NlY3Rpb24odFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCUhBTkRMRSBoTXV0ZXhCdWZmQWNjZXNzOwotCURXT1JEIGR3V2FpdFJlc3VsdDsKLQl0U2hiRXJyb3IgU2hiRXJyb3I7Ci0KLQlpZiAocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKGtTaGJJbnZhbGlkQXJnKTsKLQl9Ci0KLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApOwotCVNoYkVycm9yID0ga1NoYk9rOwotCi0JaE11dGV4QnVmZkFjY2VzcyA9IHBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3M7Ci0JaWYgKGhNdXRleEJ1ZmZBY2Nlc3MgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJZHdXYWl0UmVzdWx0ID0KLQkJICAgIFdhaXRGb3JTaW5nbGVPYmplY3QoaE11dGV4QnVmZkFjY2VzcywgVElNRU9VVF9FTlRFUl9BVE9NSUMpOwotCQlzd2l0Y2ggKGR3V2FpdFJlc3VsdCkgewotCQljYXNlIFdBSVRfT0JKRUNUXzAgKyAwOgotCQkJewotCQkJCWJyZWFrOwotCQkJfQotCi0JCWNhc2UgV0FJVF9USU1FT1VUOgotCQkJewotCQkJCVRSQUNFMAotCQkJCSAgICAoIlxuU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKCk6IFdBSVRfVElNRU9VVCIpOwotCQkJCUFTU0VSVCgwKTsKLQkJCQlTaGJFcnJvciA9IGtTaGJCdWZmZXJJbnZhbGlkOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCWNhc2UgV0FJVF9BQkFORE9ORUQ6Ci0JCQl7Ci0JCQkJVFJBQ0UwCi0JCQkJICAgICgiXG5TaGJJcGNFbnRlckF0b21pY1NlY3Rpb24oKTogV0FJVF9BQkFORE9ORUQiKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJU2hiRXJyb3IgPSBrU2hiQnVmZmVySW52YWxpZDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQljYXNlIFdBSVRfRkFJTEVEOgotCQkJewotCQkJCVRSQUNFMQotCQkJCSAgICAoIlxuU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKCk6IFdBSVRfRkFJTEVEIC0+IExhc3RFcnJvcj0lbGQiLAotCQkJCSAgICAgR2V0TGFzdEVycm9yKCkpOwotCQkJCUFTU0VSVCgwKTsKLQkJCQlTaGJFcnJvciA9IGtTaGJCdWZmZXJJbnZhbGlkOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJVFJBQ0UxCi0JCQkJICAgICgiXG5TaGJJcGNFbnRlckF0b21pY1NlY3Rpb24oKTogdW5rbm93biBlcnJvciAtPiBMYXN0RXJyb3I9JWxkIiwKLQkJCQkgICAgIEdldExhc3RFcnJvcigpKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJU2hiRXJyb3IgPSBrU2hiQnVmZmVySW52YWxpZDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCVNoYkVycm9yID0ga1NoYkJ1ZmZlckludmFsaWQ7Ci0JfQotCi0JcmV0dXJuIChTaGJFcnJvcik7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBMZWF2ZSBhdG9taWMgc2VjdGlvbiBmb3IgU2hhcmVkIEJ1ZmZlciBhY2Nlc3MKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjTGVhdmVBdG9taWNTZWN0aW9uKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKLXsKLQotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQlIQU5ETEUgaE11dGV4QnVmZkFjY2VzczsKLQlCT09MIGZSZXM7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCi0JaWYgKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQlTaGJFcnJvciA9IGtTaGJPazsKLQotCWhNdXRleEJ1ZmZBY2Nlc3MgPSBwU2hiTWVtSW5zdC0+bV9oTXV0ZXhCdWZmQWNjZXNzOwotCWlmIChoTXV0ZXhCdWZmQWNjZXNzICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0JCWZSZXMgPSBSZWxlYXNlTXV0ZXgoaE11dGV4QnVmZkFjY2Vzcyk7Ci0JCUFTU0VSVChmUmVzKTsKLQl9IGVsc2UgewotCQlTaGJFcnJvciA9IGtTaGJCdWZmZXJJbnZhbGlkOwotCX0KLQotCXJldHVybiAoU2hiRXJyb3IpOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgU3RhcnQgc2lnbmFsaW5nIG9mIG5ldyBkYXRhIChjYWxsZWQgZnJvbSByZWFkaW5nIHByb2Nlc3MpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0YXJ0U2lnbmFsaW5nTmV3RGF0YSh0U2hiSW5zdGFuY2UKLQkJCQkJCSAgICAgIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkJICAgICAgdFNpZ0huZGxyTmV3RGF0YQotCQkJCQkJICAgICAgcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKLQkJCQkJCSAgICAgIHRTaGJQcmlvcml0eQotCQkJCQkJICAgICAgU2hiUHJpb3JpdHlfcCkKLXsKLQotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwotCWNvbnN0IGNoYXIgKnBzek9iamVjdE5hbWU7Ci0JSEFORExFIGhFdmVudFRlcm1SZXF1OwotCUhBTkRMRSBoRXZlbnRUZXJtUmVzcDsKLQlIQU5ETEUgaFRocmVhZE5ld0RhdGE7Ci0JdW5zaWduZWQgbG9uZyB1bFRocmVhZElETmV3RGF0YTsKLQl0U2hiRXJyb3IgU2hiRXJyb3I7Ci0JaW50IGlQcmlvcml0eTsKLQotCWlmICgocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgfHwgKHBmblNpZ25hbEhhbmRsZXJOZXdEYXRhX3AgPT0gTlVMTCkpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQlwU2hiTWVtSGVhZGVyID0gU2hiSXBjR2V0U2hiTWVtSGVhZGVyKHBTaGJJbnN0YW5jZV9wKTsKLQlTaGJFcnJvciA9IGtTaGJPazsKLQotCWlmICgocFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHx8Ci0JICAgIChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSAhPQotCSAgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JICAgIHx8IChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSAhPQotCQlJTlZBTElEX0hBTkRMRV9WQUxVRSkKLQkgICAgfHwgKHBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxyTmV3RGF0YSAhPSBOVUxMKSkgewotCQlTaGJFcnJvciA9IGtTaGJBbHJlYWR5U2lnbmFsaW5nOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0JcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJOZXdEYXRhID0gcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcDsKLQotCS8vIEJlY2F1c2UgdGhlIGV2ZW50IDxwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfTkVXX0RBVEFdPgotCS8vIGlzIHVzZWQgZm9yIHNpZ25hbGluZyBvZiBuZXcgZGF0YSBhZnRlciBhIHdyaXRlIG9wZXJhdGlvbiB0b28gKHVzaW5nCi0JLy8gU2V0RXZlbnQpLCBpdCBpcyBhbHdheXMgY3JlYXRlZCBoZXJlIChzZWUgPFNoYklwY0FsbG9jQnVmZmVyPikuCi0KLQlwc3pPYmplY3ROYW1lID0KLQkgICAgU2hiSXBjR2V0VW5pZm9ybU9iamVjdE5hbWUoTkFNRV9FVkVOVF9URVJNX1JFUVUsCi0JCQkJICAgICAgIHBTaGJNZW1IZWFkZXItPm1fc3pCdWZmZXJJRCwgRkFMU0UpOwotCWhFdmVudFRlcm1SZXF1ID0gQ3JlYXRlRXZlbnQoTlVMTCwJLy8gTFBTRUNVUklUWV9BVFRSSUJVVEVTIGxwRXZlbnRBdHRyaWJ1dGVzCi0JCQkJICAgICBGQUxTRSwJLy8gQk9PTCBiTWFudWFsUmVzZXQKLQkJCQkgICAgIEZBTFNFLAkvLyBCT09MIGJJbml0aWFsU3RhdGUKLQkJCQkgICAgIHBzek9iamVjdE5hbWUpOwkvLyBMUENUU1RSIGxwTmFtZQotCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFUVVdID0gaEV2ZW50VGVybVJlcXU7Ci0JQVNTRVJUKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFUVVdICE9IE5VTEwpOwotCi0JcHN6T2JqZWN0TmFtZSA9Ci0JICAgIFNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKE5BTUVfRVZFTlRfVEVSTV9SRVNQLAotCQkJCSAgICAgICBwU2hiTWVtSGVhZGVyLT5tX3N6QnVmZmVySUQsIEZBTFNFKTsKLQloRXZlbnRUZXJtUmVzcCA9IENyZWF0ZUV2ZW50KE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscEV2ZW50QXR0cmlidXRlcwotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYk1hbnVhbFJlc2V0Ci0JCQkJICAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbFN0YXRlCi0JCQkJICAgICBwc3pPYmplY3ROYW1lKTsJLy8gTFBDVFNUUiBscE5hbWUKLQlwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSA9IGhFdmVudFRlcm1SZXNwOwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSAhPSBOVUxMKTsKLQotCWhUaHJlYWROZXdEYXRhID0gQ3JlYXRlVGhyZWFkKE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscFRocmVhZEF0dHJpYnV0ZXMKLQkJCQkgICAgICAwLAkvLyBTSVpFX1QgZHdTdGFja1NpemUKLQkJCQkgICAgICBTaGJJcGNUaHJlYWRTaWduYWxOZXdEYXRhLAkvLyBMUFRIUkVBRF9TVEFSVF9ST1VUSU5FIGxwU3RhcnRBZGRyZXNzCi0JCQkJICAgICAgcFNoYkluc3RhbmNlX3AsCS8vIExQVk9JRCBscFBhcmFtZXRlcgotCQkJCSAgICAgIDAsCS8vIERXT1JEIGR3Q3JlYXRpb25GbGFncwotCQkJCSAgICAgICZ1bFRocmVhZElETmV3RGF0YSk7CS8vIExQRFdPUkQgbHBUaHJlYWRJZAotCi0Jc3dpdGNoIChTaGJQcmlvcml0eV9wKSB7Ci0JY2FzZSBrU2hiUHJpb3JpdHlMb3c6Ci0JCWlQcmlvcml0eSA9IFRIUkVBRF9QUklPUklUWV9CRUxPV19OT1JNQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBrU2hiUHJpb3JpdHlOb3JtYWw6Ci0JCWlQcmlvcml0eSA9IFRIUkVBRF9QUklPUklUWV9OT1JNQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBrc2hiUHJpb3JpdHlIaWdoOgotCQlpUHJpb3JpdHkgPSBUSFJFQURfUFJJT1JJVFlfQUJPVkVfTk9STUFMOwotCQlicmVhazsKLQotCX0KLQotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9oVGhyZWFkTmV3RGF0YSAhPSBOVUxMKTsKLQotCVNldFRocmVhZFByaW9yaXR5KGhUaHJlYWROZXdEYXRhLCBpUHJpb3JpdHkpOwotCi0JcFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEgPSBoVGhyZWFkTmV3RGF0YTsKLQotI2lmbmRlZiBOREVCVUcKLQl7Ci0JCXBTaGJNZW1JbnN0LT5tX3VsVGhyZWFkSUROZXdEYXRhID0gdWxUaHJlYWRJRE5ld0RhdGE7Ci0JfQotI2VuZGlmCi0KLSAgICAgIEV4aXQ6Ci0KLQlyZXR1cm4gKFNoYkVycm9yKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFN0b3Agc2lnbmFsaW5nIG9mIG5ldyBkYXRhIChjYWxsZWQgZnJvbSByZWFkaW5nIHByb2Nlc3MpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0b3BTaWduYWxpbmdOZXdEYXRhKHRTaGJJbnN0YW5jZQotCQkJCQkJICAgICBwU2hiSW5zdGFuY2VfcCkKLXsKLQotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQlIQU5ETEUgaEV2ZW50VGVybVJlcXU7Ci0JSEFORExFIGhFdmVudFRlcm1SZXNwOwotCURXT1JEIGR3V2FpdFJlc3VsdDsKLQotCWlmIChwU2hiSW5zdGFuY2VfcCA9PSBOVUxMKSB7Ci0JCXJldHVybiAoa1NoYkludmFsaWRBcmcpOwotCX0KLQotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2VfcCk7Ci0KLQkvLyB0ZXJtaW5hdGUgbmV3IGRhdGEgc2lnbmFsaW5nIHRocmVhZAotCS8vIChzZXQgZXZlbnQgPGhFdmVudFRlcm1SZXF1PiB0byB3YWtldXAgdGhlIHRocmVhZCBhbmQgZGlzcG9zZSBpdAotCS8vIHRvIGV4aXQsIHRoZW4gd2FpdCBmb3IgY29uZmlybWF0aW9uIHVzaW5nIGV2ZW50IDxoRXZlbnRUZXJtUmVzcD4pCi0JaEV2ZW50VGVybVJlcXUgPSBwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXTsKLQloRXZlbnRUZXJtUmVzcCA9IHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdOwotCWlmICgoaEV2ZW50VGVybVJlcXUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpICYmCi0JICAgIChoRXZlbnRUZXJtUmVzcCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkpIHsKLQkJVFJBQ0UwKCJcblNoYklwY1N0b3BTaWduYWxpbmdOZXdEYXRhKCk6IGVudGVyIHdhaXQgc3RhdGUiKTsKLQkJZHdXYWl0UmVzdWx0ID0gU2lnbmFsT2JqZWN0QW5kV2FpdChoRXZlbnRUZXJtUmVxdSwJLy8gSEFORExFIGhPYmplY3RUb1NpZ25hbAotCQkJCQkJICAgaEV2ZW50VGVybVJlc3AsCS8vIEhBTkRMRSBoT2JqZWN0VG9XYWl0T24KLQkJCQkJCSAgIFRJTUVPVVRfVEVSTV9USFJFQUQsCS8vIERXT1JEIGR3TWlsbGlzZWNvbmRzCi0JCQkJCQkgICBGQUxTRSk7CS8vIEJPT0wgYkFsZXJ0YWJsZQotCQlUUkFDRTAKLQkJICAgICgiXG5TaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YSgpOiB3YWl0IHN0YXRlIGxlYXZlZDogLS0tPiAiKTsKLQkJc3dpdGNoIChkd1dhaXRSZXN1bHQpIHsKLQkJY2FzZSBXQUlUX09CSkVDVF8wICsgMDoJLy8gZXZlbnQgIm5ldyBkYXRhIHNpZ25hbGluZyB0aHJlYWQgdGVybWluYXRlZCIKLQkJCXsKLQkJCQlUUkFDRTAoIkV2ZW50ID0gV0FJVF9PQkpFQ1RfMCswIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJZGVmYXVsdDoKLQkJCXsKLQkJCQlUUkFDRTAoIlVuaGFuZGxlZCBFdmVudCIpOwotCQkJCUFTU0VSVCgwKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChwU2hiTWVtSW5zdC0+bV9oVGhyZWFkTmV3RGF0YSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlDbG9zZUhhbmRsZShwU2hiTWVtSW5zdC0+bV9oVGhyZWFkTmV3RGF0YSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2hUaHJlYWROZXdEYXRhID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JfQotCi0JaWYgKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFUVVdICE9Ci0JICAgIElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0JCUNsb3NlSGFuZGxlKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFUVVdKTsKLQkJcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVRVV0gPQotCQkgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JfQotCi0JaWYgKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdICE9Ci0JICAgIElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0JCUNsb3NlSGFuZGxlKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdKTsKLQkJcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0gPQotCQkgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JfQotCi0JcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJOZXdEYXRhID0gTlVMTDsKLQotCXJldHVybiAoa1NoYk9rKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFNpZ25hbCBuZXcgZGF0YSAoY2FsbGVkIGZyb20gd3JpdGluZyBwcm9jZXNzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNTaWduYWxOZXdEYXRhKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKLXsKLQotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQlIQU5ETEUgaEV2ZW50TmV3RGF0YTsKLQlCT09MIGZSZXM7Ci0KLQkvLyBUUkFDRTAoIlxuU2hiSXBjU2lnbmFsTmV3RGF0YSgpOiBlbnRlclxuIik7Ci0KLQlpZiAocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKGtTaGJJbnZhbGlkQXJnKTsKLQl9Ci0KLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApOwotCi0JQVNTRVJUKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV0gIT0KLQkgICAgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUUpOwotCWhFdmVudE5ld0RhdGEgPSBwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfTkVXX0RBVEFdOwotCWlmIChoRXZlbnROZXdEYXRhICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0JCWZSZXMgPSBTZXRFdmVudChoRXZlbnROZXdEYXRhKTsKLQkJLy8gVFJBQ0UxKCJcblNoYklwY1NpZ25hbE5ld0RhdGEoKTogRXZlbnROZXdEYXRhIHNldCAoUmVzdWx0PSVkKVxuIiwgKGludClmUmVzKTsKLQkJQVNTRVJUKGZSZXMpOwotCX0KLQkvLyBUUkFDRTAoIlxuU2hiSXBjU2lnbmFsTmV3RGF0YSgpOiBsZWF2ZVxuIik7Ci0JcmV0dXJuIChrU2hiT2spOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgU3RhcnQgc2lnbmFsaW5nIGZvciBqb2IgcmVhZHkgKGNhbGxlZCBmcm9tIHdhaXRpbmcgcHJvY2VzcykKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU3RhcnRTaWduYWxpbmdKb2JSZWFkeSh0U2hiSW5zdGFuY2UKLQkJCQkJCSAgICAgICBwU2hiSW5zdGFuY2VfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nCi0JCQkJCQkgICAgICAgdWxUaW1lT3V0X3AsCi0JCQkJCQkgICAgICAgdFNpZ0huZGxySm9iUmVhZHkKLQkJCQkJCSAgICAgICBwZm5TaWduYWxIYW5kbGVySm9iUmVhZHlfcCkKLXsKLQotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwotCUhBTkRMRSBoVGhyZWFkSm9iUmVhZHk7Ci0JdW5zaWduZWQgbG9uZyB1bFRocmVhZElESm9iUmVhZHk7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCi0JaWYgKChwU2hiSW5zdGFuY2VfcCA9PSBOVUxMKSB8fCAocGZuU2lnbmFsSGFuZGxlckpvYlJlYWR5X3AgPT0gTlVMTCkpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQlwU2hiTWVtSGVhZGVyID0gU2hiSXBjR2V0U2hiTWVtSGVhZGVyKHBTaGJJbnN0YW5jZV9wKTsKLQlTaGJFcnJvciA9IGtTaGJPazsKLQotCWlmICgocFNoYk1lbUluc3QtPm1faFRocmVhZEpvYlJlYWR5ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB8fAotCSAgICAocFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJKb2JSZWFkeSAhPSBOVUxMKSkgewotCQlTaGJFcnJvciA9IGtTaGJBbHJlYWR5U2lnbmFsaW5nOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0JcFNoYk1lbUluc3QtPm1fdWxUaW1lT3V0Sm9iUmVhZHkgPSB1bFRpbWVPdXRfcDsKLQlwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsckpvYlJlYWR5ID0gcGZuU2lnbmFsSGFuZGxlckpvYlJlYWR5X3A7Ci0KLQkvLyBCZWNhdXNlIHRoZSBldmVudCA8cFNoYk1lbUluc3QtPm1fYWhFdmVudEpvYlJlYWR5PiBpcyB1c2VkIGZvcgotCS8vIHNpZ25hbGluZyBvZiBhIGZpbmlzaGVkIGpvYiB0b28gKHVzaW5nIFNldEV2ZW50KSwgaXQgaXMgYWx3YXlzCi0JLy8gY3JlYXRlZCBoZXJlIChzZWUgPFNoYklwY0FsbG9jQnVmZmVyPikuCi0KLQloVGhyZWFkSm9iUmVhZHkgPSBDcmVhdGVUaHJlYWQoTlVMTCwJLy8gTFBTRUNVUklUWV9BVFRSSUJVVEVTIGxwVGhyZWFkQXR0cmlidXRlcwotCQkJCSAgICAgICAwLAkvLyBTSVpFX1QgZHdTdGFja1NpemUKLQkJCQkgICAgICAgU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHksCS8vIExQVEhSRUFEX1NUQVJUX1JPVVRJTkUgbHBTdGFydEFkZHJlc3MKLQkJCQkgICAgICAgcFNoYkluc3RhbmNlX3AsCS8vIExQVk9JRCBscFBhcmFtZXRlcgotCQkJCSAgICAgICAwLAkvLyBEV09SRCBkd0NyZWF0aW9uRmxhZ3MKLQkJCQkgICAgICAgJnVsVGhyZWFkSURKb2JSZWFkeSk7CS8vIExQRFdPUkQgbHBUaHJlYWRJZAotCi0JcFNoYk1lbUluc3QtPm1faFRocmVhZEpvYlJlYWR5ID0gaFRocmVhZEpvYlJlYWR5OwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9oVGhyZWFkSm9iUmVhZHkgIT0gTlVMTCk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0JewotCQlwU2hiTWVtSW5zdC0+bV91bFRocmVhZElESm9iUmVhZHkgPSB1bFRocmVhZElESm9iUmVhZHk7Ci0JfQotI2VuZGlmCi0KLSAgICAgIEV4aXQ6Ci0KLQlyZXR1cm4gKFNoYkVycm9yKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFNpZ25hbCBqb2IgcmVhZHkgKGNhbGxlZCBmcm9tIGV4ZWN1dGluZyBwcm9jZXNzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNTaWduYWxKb2JSZWFkeSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JSEFORExFIGhFdmVudEpvYlJlYWR5OwotCUJPT0wgZlJlczsKLQotCS8vIFRSQUNFMCgiXG5TaGJJcGNTaWduYWxKb2JSZWFkeSgpOiBlbnRlclxuIik7Ci0KLQlpZiAocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKGtTaGJJbnZhbGlkQXJnKTsKLQl9Ci0KLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApOwotCi0JQVNTRVJUKHBTaGJNZW1JbnN0LT5tX2hFdmVudEpvYlJlYWR5ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKTsKLQloRXZlbnRKb2JSZWFkeSA9IHBTaGJNZW1JbnN0LT5tX2hFdmVudEpvYlJlYWR5OwotCWlmIChoRXZlbnRKb2JSZWFkeSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlmUmVzID0gU2V0RXZlbnQoaEV2ZW50Sm9iUmVhZHkpOwotCQkvLyBUUkFDRTEoIlxuU2hiSXBjU2lnbmFsSm9iUmVhZHkoKTogRXZlbnRKb2JSZWFkeSBzZXQgKFJlc3VsdD0lZClcbiIsIChpbnQpZlJlcyk7Ci0JCUFTU0VSVChmUmVzKTsKLQl9Ci0JLy8gVFJBQ0UwKCJcblNoYklwY1NpZ25hbEpvYlJlYWR5KCk6IGxlYXZlXG4iKTsKLQlyZXR1cm4gKGtTaGJPayk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBHZXQgcG9pbnRlciB0byBjb21tb24gdXNlZCBzaGFyZSBtZW1vcnkgYXJlYQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgKlNoYklwY0dldFNoTWVtUHRyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKLXsKLQotCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7Ci0Jdm9pZCAqcFNoYlNoTWVtUHRyOwotCi0JcFNoYk1lbUhlYWRlciA9IFNoYklwY0dldFNoYk1lbUhlYWRlcihwU2hiSW5zdGFuY2VfcCk7Ci0JaWYgKHBTaGJNZW1IZWFkZXIgIT0gTlVMTCkgewotCQlwU2hiU2hNZW1QdHIgPSAoQllURSAqKSBwU2hiTWVtSGVhZGVyICsgc2l6ZW9mKHRTaGJNZW1IZWFkZXIpOwotCX0gZWxzZSB7Ci0JCXBTaGJTaE1lbVB0ciA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIChwU2hiU2hNZW1QdHIpOwotCi19Ci0KLSNlbmRpZgotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgIFAgUiBJIFYgQSBUIEUgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLQotI2lmICFkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBBbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBmcm9tIHByb2Nlc3Mgc3BlY2lmaWMgbWVtcG9vbAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotc3RhdGljIHZvaWQgKlNoYklwY0FsbG9jUHJpdmF0ZU1lbSh1bnNpZ25lZCBsb25nIHVsTWVtU2l6ZV9wKQotewotCi0JSEdMT0JBTCBoTWVtOwotCXZvaWQgKnBNZW07Ci0KLQloTWVtID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgdWxNZW1TaXplX3AgKyBzaXplb2YoSEdMT0JBTCkpOwotCXBNZW0gPSBHbG9iYWxMb2NrKGhNZW0pOwotCWlmIChwTWVtICE9IE5VTEwpIHsKLQkJKihIR0xPQkFMICopIHBNZW0gPSBoTWVtOwotCQkoQllURSAqKSBwTWVtICs9IHNpemVvZihIR0xPQkFMKTsKLQl9Ci0KLSNpZm5kZWYgTkRFQlVHCi0JewotCQltZW1zZXQocE1lbSwgMHhhYSwgdWxNZW1TaXplX3ApOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIChwTWVtKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgZnJvbSBwcm9jZXNzIHNwZWNpZmljIG1lbXBvb2wKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB2b2lkIFNoYklwY1JlbGVhc2VQcml2YXRlTWVtKHZvaWQgKnBNZW1fcCkKLXsKLQotCUhHTE9CQUwgaE1lbTsKLQotCWlmIChwTWVtX3AgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCi0JKEJZVEUgKikgcE1lbV9wIC09IHNpemVvZihIR0xPQkFMKTsKLQloTWVtID0gKihIR0xPQkFMICopIHBNZW1fcDsKLQotCUdsb2JhbFVubG9jayhoTWVtKTsKLQlHbG9iYWxGcmVlKGhNZW0pOwotCi0JcmV0dXJuOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgQ3JlYXRlIHVuaWZvcm0gb2JqZWN0IG5hbWUgKG5lZWRlZCBmb3IgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY29uc3QgY2hhciAqU2hiSXBjR2V0VW5pZm9ybU9iamVjdE5hbWUoY29uc3QgY2hhciAqcHN6T2JqZWN0Sm9iTmFtZV9wLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpwc3pCdWZmZXJJRF9wLAotCQkJCSAgICAgICBCT09MIGZHbG9iYWxPYmplY3RfcCkKLXsKLQotCXN0YXRpYyBjaGFyIHN6T2JqZWN0TmFtZVtNQVhfUEFUSF07Ci0JY2hhciBzek9iamVjdFByZWZpeFtNQVhfUEFUSF07Ci0KLQlpZiAoZkdsb2JhbE9iamVjdF9wKSB7Ci0JCXN0cm5jcHkoc3pPYmplY3RQcmVmaXgsICJHbG9iYWxcXCIsIHNpemVvZihzek9iamVjdFByZWZpeCkpOwotCX0gZWxzZSB7Ci0JCV9zbnByaW50Zihzek9iamVjdFByZWZpeCwgc2l6ZW9mKHN6T2JqZWN0UHJlZml4KSwgIlBJRCUwOGxYXyIsCi0JCQkgICh1bnNpZ25lZCBsb25nKUdldEN1cnJlbnRQcm9jZXNzSWQoKSk7Ci0JfQotCi0JX3NucHJpbnRmKHN6T2JqZWN0TmFtZSwgc2l6ZW9mKHN6T2JqZWN0TmFtZSksICIlcyVzIyVzIiwKLQkJICBzek9iamVjdFByZWZpeCwgcHN6QnVmZmVySURfcCwgcHN6T2JqZWN0Sm9iTmFtZV9wKTsKLQotCXJldHVybiAoc3pPYmplY3ROYW1lKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFRocmVhZCBmb3IgbmV3IGRhdGEgc2lnbmFsaW5nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1EV09SRCBXSU5BUEkgU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YShMUFZPSUQgcHZUaHJlYWRQYXJhbV9wKQotewotCi0JdFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZTsKLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JRFdPUkQgZHdXYWl0UmVzdWx0OwotCUJPT0wgZlRlcm1SZXF1OwotCWludCBmQ2FsbEFnYWluOwotCi0JVFJBQ0UxCi0JICAgICgiXG5TaGJJcGNUaHJlYWRTaWduYWxOZXdEYXRhKCk6IFNpZ25hbFRocmVhZCBzdGFydGVkIChwU2hiSW5zdGFuY2U9MHglMDhsWClcbiIsCi0JICAgICAoRFdPUkQpIHB2VGhyZWFkUGFyYW1fcCk7Ci0KLQlwU2hiSW5zdGFuY2UgPSAodFNoYk1lbUluc3QgKikgcHZUaHJlYWRQYXJhbV9wOwotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2UpOwotCWZUZXJtUmVxdSA9IEZBTFNFOwotCi0JZG8gewotCQlBU1NFUlQoKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhWzBdICE9Ci0JCQlJTlZBTElEX0hBTkRMRV9WQUxVRSkKLQkJICAgICAgICYmIChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVswXSAhPSBOVUxMKSk7Ci0JCUFTU0VSVCgocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbMV0gIT0KLQkJCUlOVkFMSURfSEFORExFX1ZBTFVFKQotCQkgICAgICAgJiYgKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhWzFdICE9IE5VTEwpKTsKLQotCQlUUkFDRTAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YSgpOiBlbnRlciB3YWl0IHN0YXRlIik7Ci0JCWR3V2FpdFJlc3VsdCA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoMiwJLy8gRFdPUkQgbkNvdW50Ci0JCQkJCQkgICAgICBwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YSwJLy8gY29uc3QgSEFORExFKiBscEhhbmRsZXMKLQkJCQkJCSAgICAgIEZBTFNFLAkvLyBCT09MIGJXYWl0QWxsCi0JCQkJCQkgICAgICBJTkZJTklURSk7CS8vIERXT1JEIGR3TWlsbGlzZWNvbmRzCi0JCVRSQUNFMAotCQkgICAgKCJcblNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEoKTogd2FpdCBzdGF0ZSBsZWF2ZWQ6IC0tLT4gIik7Ci0JCXN3aXRjaCAoZHdXYWl0UmVzdWx0KSB7Ci0JCWNhc2UgV0FJVF9PQkpFQ1RfMCArIDA6CS8vIGV2ZW50ICJuZXcgZGF0YSIKLQkJCXsKLQkJCQlUUkFDRTAoIkV2ZW50ID0gV0FJVF9PQkpFQ1RfMCswIik7Ci0JCQkJaWYgKHBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxyTmV3RGF0YSAhPSBOVUxMKSB7Ci0JCQkJCVRSQUNFMAotCQkJCQkgICAgKCJcblNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEoKTogY2FsbGluZyBTaWduYWxIYW5kbGVyTmV3RGF0YSIpOwotCQkJCQlkbyB7Ci0JCQkJCQlmQ2FsbEFnYWluID0KLQkJCQkJCSAgICBwU2hiTWVtSW5zdC0+Ci0JCQkJCQkgICAgbV9wZm5TaWdIbmRsck5ld0RhdGEKLQkJCQkJCSAgICAocFNoYkluc3RhbmNlKTsKLQkJCQkJCS8vIGQuay46IHRyeSB0byBydW4gYW55IHNoYXJlZCBidWZmZXIgd2hpY2ggaGFzIGhpZ2hlciBwcmlvcml0eS4KLQkJCQkJCS8vICAgICAgICAgICB1bmRlciBXaW5kb3dzIHRoaXMgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgV2luZG93cyBzY2hlZHVsZXIKLQkJCQkJCS8vICAgICAgICAgICBhbHJlYWR5IHByZWVtcHRzIHRhc2tzIHdpdGggbG93ZXIgcHJpb3JpdHkuCi0JCQkJCX0gd2hpbGUgKGZDYWxsQWdhaW4gIT0gRkFMU0UpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQotCQljYXNlIFdBSVRfT0JKRUNUXzAgKyAxOgkvLyBldmVudCAidGVybWluYXRlIgotCQkJewotCQkJCVRSQUNFMCgiRXZlbnQgPSBXQUlUX09CSkVDVF8wKzEiKTsKLQkJCQlmVGVybVJlcXUgPSBUUlVFOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJVFJBQ0UwKCJVbmhhbmRsZWQgRXZlbnQiKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJZlRlcm1SZXF1ID0gVFJVRTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQl3aGlsZSAoIWZUZXJtUmVxdSk7Ci0KLQlpZiAocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0gIT0KLQkgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJU2V0RXZlbnQocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0pOwotCX0KLQotCVRSQUNFMQotCSAgICAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YSgpOiBTaWduYWxUaHJlYWQgdGVybWluYXRlZCAocFNoYkluc3RhbmNlPTB4JTA4bFgpXG4iLAotCSAgICAgKERXT1JEKSBwU2hiSW5zdGFuY2UpOwotCi0JRXhpdFRocmVhZCgwKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFRocmVhZCBmb3IgbmV3IGRhdGEgc2lnbmFsaW5nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1EV09SRCBXSU5BUEkgU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHkoTFBWT0lEIHB2VGhyZWFkUGFyYW1fcCkKLXsKLQotCXRTaGJJbnN0YW5jZSAqcFNoYkluc3RhbmNlOwotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQlEV09SRCB1bFRpbWVPdXQ7Ci0JRFdPUkQgZHdXYWl0UmVzdWx0OwotCXVuc2lnbmVkIGludCBmVGltZU91dDsKLQotCVRSQUNFMQotCSAgICAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHkoKTogU2lnbmFsVGhyZWFkIHN0YXJ0ZWQgKHBTaGJJbnN0YW5jZT0weCUwOGxYKVxuIiwKLQkgICAgIChEV09SRCkgcHZUaHJlYWRQYXJhbV9wKTsKLQotCXBTaGJJbnN0YW5jZSA9ICh0U2hiSW5zdGFuY2UgKikgcHZUaHJlYWRQYXJhbV9wOwotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2UpOwotCWZUaW1lT3V0ID0gRkFMU0U7Ci0KLQlpZiAocFNoYk1lbUluc3QtPm1fdWxUaW1lT3V0Sm9iUmVhZHkgIT0gMCkgewotCQl1bFRpbWVPdXQgPSBwU2hiTWVtSW5zdC0+bV91bFRpbWVPdXRKb2JSZWFkeTsKLQl9IGVsc2UgewotCQl1bFRpbWVPdXQgPSBJTkZJTklURTsKLQl9Ci0KLQlBU1NFUlQoKHBTaGJNZW1JbnN0LT5tX2hFdmVudEpvYlJlYWR5ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQotCSAgICAgICAmJiAocFNoYk1lbUluc3QtPm1faEV2ZW50Sm9iUmVhZHkgIT0gTlVMTCkpOwotCi0JVFJBQ0UwKCJcblNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5KCk6IGVudGVyIHdhaXQgc3RhdGUiKTsKLQlkd1dhaXRSZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHBTaGJNZW1JbnN0LT5tX2hFdmVudEpvYlJlYWR5LAkvLyBIQU5ETEUgaEhhbmRsZQotCQkJCQkgICB1bFRpbWVPdXQpOwkvLyBEV09SRCBkd01pbGxpc2Vjb25kcwotCVRSQUNFMCgiXG5TaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeSgpOiB3YWl0IHN0YXRlIGxlYXZlZDogLS0tPiAiKTsKLQlzd2l0Y2ggKGR3V2FpdFJlc3VsdCkgewotCWNhc2UgV0FJVF9PQkpFQ1RfMCArIDA6CS8vIGV2ZW50ICJuZXcgZGF0YSIKLQkJewotCQkJVFJBQ0UwKCJFdmVudCA9IFdBSVRfT0JKRUNUXzArMCIpOwotCQkJZlRpbWVPdXQgPSBGQUxTRTsKLQkJCWJyZWFrOwotCQl9Ci0KLQljYXNlIFdBSVRfVElNRU9VVDoKLQkJewotCQkJVFJBQ0UwKCJcbkV2ZW50ID0gV0FJVF9USU1FT1VUIik7Ci0JCQlmVGltZU91dCA9IFRSVUU7Ci0JCQkvLyBBU1NFUlQoMCk7Ci0JCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJewotCQkJVFJBQ0UwKCJVbmhhbmRsZWQgRXZlbnQiKTsKLQkJCWZUaW1lT3V0ID0gVFJVRTsKLQkJCUFTU0VSVCgwKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxySm9iUmVhZHkgIT0gTlVMTCkgewotCQlUUkFDRTAKLQkJICAgICgiXG5TaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeSgpOiBjYWxsaW5nIFNpZ25hbEhhbmRsZXJKb2JSZWFkeSIpOwotCQlwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsckpvYlJlYWR5KHBTaGJJbnN0YW5jZSwgZlRpbWVPdXQpOwotCX0KLQotCXBTaGJNZW1JbnN0LT5tX2hUaHJlYWRKb2JSZWFkeSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCXBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxySm9iUmVhZHkgPSBOVUxMOwotCi0JVFJBQ0UxCi0JICAgICgiXG5TaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeSgpOiBTaWduYWxUaHJlYWQgdGVybWluYXRlZCAocFNoYkluc3RhbmNlPTB4JTA4bFgpXG4iLAotCSAgICAgKERXT1JEKSBwU2hiSW5zdGFuY2UpOwotCi0JRXhpdFRocmVhZCgwKTsKLQotfQotCi0jZW5kaWYKLQotLy8gRU9GCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMuaAppbmRleCBjYWQ4ODQ2Li4yODVmMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLmgKQEAgLTY1LDI1ICs2NSw2IEBACiB0eXBlZGVmIHZvaWQgKCp0U2lnSG5kbHJKb2JSZWFkeSkgKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKIAkJCQkgICB1bnNpZ25lZCBpbnQgZlRpbWVPdXRfcCk7CiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotI2lmIGRlZmluZWQoSU5MSU5FX0ZVTkNUSU9OX0RFRikKLSN1bmRlZiAgSU5MSU5FX0ZVTkNUSU9OCi0jZGVmaW5lIElOTElORV9GVU5DVElPTiAgICAgSU5MSU5FX0ZVTkNUSU9OX0RFRgotI2RlZmluZSBTSEJJUENfSU5MSU5FX0VOQUJMRUQgICAgICBUUlVFCi0jZGVmaW5lIFNIQklQQ19JTkxJTkVECi0jaW5jbHVkZSAiU2hiSXBjLVdpbjMyLmMiCi0jZW5kaWYKLQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykKLSNpZiBkZWZpbmVkKElOTElORV9GVU5DVElPTl9ERUYpCi0jdW5kZWYgIElOTElORV9GVU5DVElPTgotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSNkZWZpbmUgU0hCSVBDX0lOTElORV9FTkFCTEVEICAgICAgVFJVRQotI2RlZmluZSBTSEJJUENfSU5MSU5FRAotI2luY2x1ZGUgIlNoYklwYy1MaW51eEtlcm5lbC5jIgotI2VuZGlmCi0jZW5kaWYKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBQcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTcsOCArNzgsNiBAQAogCQkJICAgIHVuc2lnbmVkIGludCAqcGZTaGJOZXdDcmVhdGVkX3ApOwogdFNoYkVycm9yIFNoYklwY1JlbGVhc2VCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIAotI2lmICFkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQogdFNoYkVycm9yIFNoYklwY0VudGVyQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApOwogdFNoYkVycm9yIFNoYklwY0xlYXZlQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApOwogCkBAIC0xMTYsMTAgKzk1LDUgQEAKIHRTaGJFcnJvciBTaGJJcGNTaWduYWxKb2JSZWFkeSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApOwogCiB2b2lkICpTaGJJcGNHZXRTaE1lbVB0cih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApOwotI2VuZGlmCi0KLSN1bmRlZiAgU0hCSVBDX0lOTElORV9FTkFCTEVECS8vIGRpc2FibGUgYWN0dWFsIGlubGluaW5nIG9mIGZ1bmN0aW9ucwotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT04KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OCQkvLyBkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OIHRvIG5vdGhpbmcKIAogI2VuZGlmIC8vICNpZm5kZWYgX1NIQklQQ19IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9UaW1lckhpZ2hSZXNrWDg2LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1RpbWVySGlnaFJlc2tYODYuYwppbmRleCA4MmVlZTQ3Li5kNjg5N2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1RpbWVySGlnaFJlc2tYODYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1RpbWVySGlnaFJlc2tYODYuYwpAQCAtOTcsMTQgKzk3LDEwIEBACiAKICNkZWZpbmUgUFJPVkVfT1ZFUlJVTgogCi0jaWZuZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKLSNlcnJvciAiS2VybmVsIHN5bWJvbCBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIHJlcXVpcmVkLiIKLSNlbmRpZgotCiAvLyBUcmFjZVBvaW50IHN1cHBvcnQgZm9yIHJlYWx0aW1lLWRlYnVnZ2luZwogI2lmZGVmIF9EQkdfVFJBQ0VfUE9JTlRTXwotdm9pZCBQVUJMSUMgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChCWVRFIGJUcmFjZVBvaW50TnVtYmVyX3ApOwotdm9pZCBQVUJMSUMgVGd0RGJnUG9zdFRyYWNlVmFsdWUoRFdPUkQgZHdUcmFjZVZhbHVlX3ApOwordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApOwordm9pZCBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh1MzIgZHdUcmFjZVZhbHVlX3ApOwogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKSAgIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQocCkKICNkZWZpbmUgVEdUX0RCR19QT1NUX1RSQUNFX1ZBTFVFKHYpICAgICBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh2KQogI2Vsc2UKQEAgLTE3Miw3ICsxNjgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tJbml0KHZvaWQpCit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5Niw3ICsxOTIsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tBZGRJbnN0YW5jZSh2b2lkKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrQWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl1bnNpZ25lZCBpbnQgdWlJbmRleDsKQEAgLTIwNiwxMyArMjAyLDYgQEAKIAlFUExfTUVNU0VUKCZFcGxUaW1lckhpZ2hSZXNrSW5zdGFuY2VfbCwgMCwKIAkJICAgc2l6ZW9mKEVwbFRpbWVySGlnaFJlc2tJbnN0YW5jZV9sKSk7CiAKLSNpZm5kZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwotCXByaW50awotCSAgICAoIkVwbFRpbWVySGlnaFJlc2s6IEtlcm5lbCBzeW1ib2wgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyByZXF1aXJlZC5cbiIpOwotCVJldCA9IGtFcGxOb1Jlc291cmNlOwotCXJldHVybiBSZXQ7Ci0jZW5kaWYKLQogCS8qCiAJICogSW5pdGlhbGl6ZSBocnRpbWVyIHN0cnVjdHVyZXMgZm9yIGFsbCB1c2FibGUgdGltZXJzLgogCSAqLwpAQCAtMjQ0LDcgKzIzMyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJIaWdoUmVza0RlbEluc3RhbmNlKHZvaWQpCit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxUaW1lckhpZ2hSZXNrVGltZXJJbmZvICpwVGltZXJJbmZvOwogCXRFcGxLZXJuZWwgUmV0OwpAQCAtMjk4LDEyICsyODcsMTEgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrTW9kaWZ5VGltZXJOcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB1bGxUaW1lTnNfcCwKLQkJCQkJCXRFcGxUaW1lcmtDYWxsYmFjawotCQkJCQkJcGZuQ2FsbGJhY2tfcCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgdWxBcmd1bWVudF9wLAotCQkJCQkJQk9PTCBmQ29udGludW91c2x5X3ApCit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tNb2RpZnlUaW1lck5zKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3AsCisJCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCisJCQkJCSB0RXBsVGltZXJrQ2FsbGJhY2sgcGZuQ2FsbGJhY2tfcCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgdWxBcmd1bWVudF9wLAorCQkJCQkgQk9PTCBmQ29udGludW91c2x5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpSW5kZXg7CkBAIC0zOTYsNyArMzg0LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApCit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpSW5kZXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1ZpcnR1YWxFdGhlcm5ldExpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1ZpcnR1YWxFdGhlcm5ldExpbnV4LmMKaW5kZXggNWQ4MzhkYi4uMjEyMDZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9WaXJ0dWFsRXRoZXJuZXRMaW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvVmlydHVhbEV0aGVybmV0TGludXguYwpAQCAtNzQsNyArNzQsNiBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CkBAIC0yODUsNyArMjg0LDcgQEAKIAlyZXR1cm4gUmV0OwogfQogCi10RXBsS2VybmVsIFBVQkxJQyBWRXRoQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKiBwSW5pdFBhcmFtX3ApCit0RXBsS2VybmVsIFZFdGhBZGRJbnN0YW5jZSh0RXBsRGxsa0luaXRQYXJhbSAqcEluaXRQYXJhbV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTMyNCw3ICszMjMsNyBAQAogCXJldHVybiBSZXQ7CiB9CiAKLXRFcGxLZXJuZWwgUFVCTElDIFZFdGhEZWxJbnN0YW5jZSh2b2lkKQordEVwbEtlcm5lbCBWRXRoRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2FtaXg4Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9hbWl4ODYuYwppbmRleCA5Zjc0MjM4Li5kNDBhZDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2FtaXg4Ni5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvYW1peDg2LmMKQEAgLTc0LDI0ICs3NCwyMiBAQAogLy8jaW5jbHVkZSAiRXBsQW1pLmgiCiAjaW5jbHVkZSAiRXBsSW5jLmgiCiAKLSNpZiAoIWRlZmluZWQoRVBMX0FNSV9JTkxJTkVEKSkgfHwgZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIHR5cGVkZWYKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlXT1JEIG1fd1dvcmQ7CisJdTE2IG1fd1dvcmQ7CiAKIH0gdHdTdHJ1Y3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlEV09SRCBtX2R3RHdvcmQ7CisJdTMyIG1fZHdEd29yZDsKIAogfSB0ZHdTdHJ1Y3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlRV09SRCBtX3F3UXdvcmQ7CisJdTY0IG1fcXdRd29yZDsKIAogfSB0cXdTdHJ1Y3Q7CiAKQEAgLTExNywzNyArMTE1LDM2IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8tLS0tLS0tLS0tLS08IHdyaXRlIEJZVEUgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tPCB3cml0ZSB1OCBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLyoKLXZvaWQgIFBVQkxJQyAgQW1pU2V0Qnl0ZVRvQmUgKHZvaWQgRkFSKiBwQWRkcl9wLCBCWVRFIGJCeXRlVmFsX3ApCit2b2lkIEFtaVNldEJ5dGVUb0JlICh2b2lkICpwQWRkcl9wLCB1OCBiQnl0ZVZhbF9wKQogewogCi0gICAqKEJZVEUgRkFSKilwQWRkcl9wID0gYkJ5dGVWYWxfcDsKKwkqKHU4ICopcEFkZHJfcCA9IGJCeXRlVmFsX3A7CiAKIH0KICovCiAKLS8vLS0tLS0tLS0tLS0tPCB3cml0ZSBXT1JEIGluIGJpZyBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgd3JpdGUgdTE2IGluIGJpZyBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRXb3JkVG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFdPUkQgd1dvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0V29yZFRvQmUodm9pZCAqIHBBZGRyX3AsIHUxNiB3V29yZFZhbF9wKQogewotCXR3U3RydWN0IEZBUiAqcHdTdHJ1Y3Q7CisJdHdTdHJ1Y3QgKnB3U3RydWN0OwogCXR3U3RydWN0IHdWYWx1ZTsKIAotCXdWYWx1ZS5tX3dXb3JkID0gKFdPUkQpICgod1dvcmRWYWxfcCAmIDB4MDBGRikgPDwgOCk7CS8vTFNCIHRvIE1TQgotCXdWYWx1ZS5tX3dXb3JkIHw9IChXT1JEKSAoKHdXb3JkVmFsX3AgJiAweEZGMDApID4+IDgpOwkvL01TQiB0byBMU0IKKwl3VmFsdWUubV93V29yZCA9ICh1MTYpICgod1dvcmRWYWxfcCAmIDB4MDBGRikgPDwgOCk7CS8vTFNCIHRvIE1TQgorCXdWYWx1ZS5tX3dXb3JkIHw9ICh1MTYpICgod1dvcmRWYWxfcCAmIDB4RkYwMCkgPj4gOCk7CS8vTVNCIHRvIExTQgogCi0JcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAlwd1N0cnVjdC0+bV93V29yZCA9IHdWYWx1ZS5tX3dXb3JkOwogCiB9CiAKLS8vLS0tLS0tLS0tLS0tPCB3cml0ZSBEV09SRCBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgd3JpdGUgdTMyIGluIGJpZyBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldER3b3JkVG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICBEV09SRCBkd0R3b3JkVmFsX3ApCit2b2lkIEFtaVNldER3b3JkVG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKQogewotCXRkd1N0cnVjdCBGQVIgKnBkd1N0cnVjdDsKKwl0ZHdTdHJ1Y3QgKnBkd1N0cnVjdDsKIAl0ZHdTdHJ1Y3QgZHdWYWx1ZTsKIAogCWR3VmFsdWUubV9kd0R3b3JkID0gKChkd0R3b3JkVmFsX3AgJiAweDAwMDAwMEZGKSA8PCAyNCk7CS8vTFNCIHRvIE1TQgpAQCAtMTU1LDcgKzE1Miw3IEBACiAJZHdWYWx1ZS5tX2R3RHdvcmQgfD0gKChkd0R3b3JkVmFsX3AgJiAweDAwRkYwMDAwKSA+PiA4KTsKIAlkd1ZhbHVlLm1fZHdEd29yZCB8PSAoKGR3RHdvcmRWYWxfcCAmIDB4RkYwMDAwMDApID4+IDI0KTsJLy9NU0IgdG8gTFNCCiAKLQlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0IEZBUiAqKSBwQWRkcl9wOworCXBkd1N0cnVjdCA9ICh0ZHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAlwZHdTdHJ1Y3QtPm1fZHdEd29yZCA9IGR3VmFsdWUubV9kd0R3b3JkOwogCiB9CkBAIC0xNzYsMzUgKzE3MywzNCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tPCB3cml0ZSBCWVRFIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgd3JpdGUgdTggaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qCi12b2lkICBQVUJMSUMgIEFtaVNldEJ5dGVUb0xlICh2b2lkIEZBUiogcEFkZHJfcCwgQllURSBiQnl0ZVZhbF9wKQordm9pZCBBbWlTZXRCeXRlVG9MZSAodm9pZCAqcEFkZHJfcCwgdTggYkJ5dGVWYWxfcCkKIHsKIAotICAgKihCWVRFIEZBUiopcEFkZHJfcCA9IGJCeXRlVmFsX3A7CisJKih1OCAqKXBBZGRyX3AgPSBiQnl0ZVZhbF9wOwogCiB9CiAqLwogCi0vLy0tLS0tLS0tLS0tLTwgd3JpdGUgV09SRCBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHdyaXRlIHUxNiBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0V29yZFRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLCBXT1JEIHdXb3JkVmFsX3ApCit2b2lkIEFtaVNldFdvcmRUb0xlKHZvaWQgKnBBZGRyX3AsIHUxNiB3V29yZFZhbF9wKQogewotCXR3U3RydWN0IEZBUiAqcHdTdHJ1Y3Q7CisJdHdTdHJ1Y3QgKnB3U3RydWN0OwogCi0JcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAlwd1N0cnVjdC0+bV93V29yZCA9IHdXb3JkVmFsX3A7CiAKIH0KIAotLy8tLS0tLS0tLS0tLS08IHdyaXRlIERXT1JEIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tPCB3cml0ZSB1MzIgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmRUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgIERXT1JEIGR3RHdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0RHdvcmRUb0xlKHZvaWQgKnBBZGRyX3AsIHUzMiBkd0R3b3JkVmFsX3ApCiB7Ci0JdGR3U3RydWN0IEZBUiAqcGR3U3RydWN0OworCXRkd1N0cnVjdCAqcGR3U3RydWN0OwogCi0JcGR3U3RydWN0ID0gKHRkd1N0cnVjdCBGQVIgKikgcEFkZHJfcDsKKwlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0ICopIHBBZGRyX3A7CiAJcGR3U3RydWN0LT5tX2R3RHdvcmQgPSBkd0R3b3JkVmFsX3A7CiAKIH0KQEAgLTIyNCw0MCArMjIwLDQwIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8tLS0tLS0tLS0tLS08IHJlYWQgQllURSBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tPCByZWFkIHU4IGluIGJpZyBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLyoKLUJZVEUgIFBVQkxJQyAgQW1pR2V0Qnl0ZUZyb21CZSAodm9pZCBGQVIqIHBBZGRyX3ApCit1OCBBbWlHZXRCeXRlRnJvbUJlICh2b2lkICpwQWRkcl9wKQogewogCi0gICByZXR1cm4gKCAqKEJZVEUgRkFSKilwQWRkcl9wICk7CisJcmV0dXJuICggKih1OCAqKXBBZGRyX3AgKTsKIAogfQogKi8KIAotLy8tLS0tLS0tLS0tLS08IHJlYWQgV09SRCBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tPCByZWFkIHUxNiBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIFdPUkQgUFVCTElDIEFtaUdldFdvcmRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKQordTE2IEFtaUdldFdvcmRGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKLQl0d1N0cnVjdCBGQVIgKnB3U3RydWN0OworCXR3U3RydWN0ICpwd1N0cnVjdDsKIAl0d1N0cnVjdCB3VmFsdWU7CiAKLQlwd1N0cnVjdCA9ICh0d1N0cnVjdCBGQVIgKikgcEFkZHJfcDsKKwlwd1N0cnVjdCA9ICh0d1N0cnVjdCAqKSBwQWRkcl9wOwogCi0Jd1ZhbHVlLm1fd1dvcmQgPSAoV09SRCkgKChwd1N0cnVjdC0+bV93V29yZCAmIDB4MDBGRikgPDwgOCk7CS8vTFNCIHRvIE1TQgotCXdWYWx1ZS5tX3dXb3JkIHw9IChXT1JEKSAoKHB3U3RydWN0LT5tX3dXb3JkICYgMHhGRjAwKSA+PiA4KTsJLy9NU0IgdG8gTFNCCisJd1ZhbHVlLm1fd1dvcmQgPSAodTE2KSAoKHB3U3RydWN0LT5tX3dXb3JkICYgMHgwMEZGKSA8PCA4KTsJLy9MU0IgdG8gTVNCCisJd1ZhbHVlLm1fd1dvcmQgfD0gKHUxNikgKChwd1N0cnVjdC0+bV93V29yZCAmIDB4RkYwMCkgPj4gOCk7CS8vTVNCIHRvIExTQgogCiAJcmV0dXJuICh3VmFsdWUubV93V29yZCk7CiAKIH0KIAotLy8tLS0tLS0tLS0tLS08IHJlYWQgRFdPUkQgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tPCByZWFkIHUzMiBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gRFdPUkQgUFVCTElDIEFtaUdldER3b3JkRnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCkKK3UzMiBBbWlHZXREd29yZEZyb21CZSh2b2lkICpwQWRkcl9wKQogewotCXRkd1N0cnVjdCBGQVIgKnBkd1N0cnVjdDsKKwl0ZHdTdHJ1Y3QgKnBkd1N0cnVjdDsKIAl0ZHdTdHJ1Y3QgZHdWYWx1ZTsKIAotCXBkd1N0cnVjdCA9ICh0ZHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcGR3U3RydWN0ID0gKHRkd1N0cnVjdCAqKSBwQWRkcl9wOwogCiAJZHdWYWx1ZS5tX2R3RHdvcmQgPSAoKHBkd1N0cnVjdC0+bV9kd0R3b3JkICYgMHgwMDAwMDBGRikgPDwgMjQpOwkvL0xTQiB0byBNU0IKIAlkd1ZhbHVlLm1fZHdEd29yZCB8PSAoKHBkd1N0cnVjdC0+bV9kd0R3b3JkICYgMHgwMDAwRkYwMCkgPDwgOCk7CkBAIC0yODMsMzYgKzI3OSwzNCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIEJZVEUgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1OCBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qCi1CWVRFICBQVUJMSUMgIEFtaUdldEJ5dGVGcm9tTGUgKHZvaWQgRkFSKiBwQWRkcl9wKQordTggQW1pR2V0Qnl0ZUZyb21MZSAodm9pZCAqcEFkZHJfcCkKIHsKIAotICAgcmV0dXJuICggKihCWVRFIEZBUiopcEFkZHJfcCApOworCXJldHVybiAoICoodTggKilwQWRkcl9wICk7CiAKIH0KICovCiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIFdPUkQgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1MTYgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBXT1JEIFBVQkxJQyBBbWlHZXRXb3JkRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCkKK3UxNiBBbWlHZXRXb3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7Ci0JdHdTdHJ1Y3QgRkFSICpwd1N0cnVjdDsKKwl0d1N0cnVjdCAqcHdTdHJ1Y3Q7CiAKLQlwd1N0cnVjdCA9ICh0d1N0cnVjdCBGQVIgKikgcEFkZHJfcDsKKwlwd1N0cnVjdCA9ICh0d1N0cnVjdCAqKSBwQWRkcl9wOwogCXJldHVybiAocHdTdHJ1Y3QtPm1fd1dvcmQpOwotCiB9CiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIERXT1JEIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1MzIgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIERXT1JEIFBVQkxJQyBBbWlHZXREd29yZEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1MzIgQW1pR2V0RHdvcmRGcm9tTGUodm9pZCAqcEFkZHJfcCkKIHsKLQl0ZHdTdHJ1Y3QgRkFSICpwZHdTdHJ1Y3Q7CisJdGR3U3RydWN0ICpwZHdTdHJ1Y3Q7CiAKLQlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0IEZBUiAqKSBwQWRkcl9wOworCXBkd1N0cnVjdCA9ICh0ZHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAlyZXR1cm4gKHBkd1N0cnVjdC0+bV9kd0R3b3JkKTsKLQogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzMwLDE0ICszMjQsMTEgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmQyNFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBEV09SRCBkd0R3b3JkVmFsX3ApCit2b2lkIEFtaVNldER3b3JkMjRUb0JlKHZvaWQgKnBBZGRyX3AsIHUzMiBkd0R3b3JkVmFsX3ApCiB7Ci0KLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzBdID0gKChCWVRFIEZBUiAqKSAmIGR3RHdvcmRWYWxfcClbMl07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsxXSA9ICgoQllURSBGQVIgKikgJiBkd0R3b3JkVmFsX3ApWzFdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMl0gPSAoKEJZVEUgRkFSICopICYgZHdEd29yZFZhbF9wKVswXTsKLQorCSgodTggKikgcEFkZHJfcClbMF0gPSAoKHU4ICopICYgZHdEd29yZFZhbF9wKVsyXTsKKwkoKHU4ICopIHBBZGRyX3ApWzFdID0gKCh1OCAqKSAmIGR3RHdvcmRWYWxfcClbMV07CisJKCh1OCAqKSBwQWRkcl9wKVsyXSA9ICgodTggKikgJiBkd0R3b3JkVmFsX3ApWzBdOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzU1LDE0ICszNDYsMTEgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmQyNFRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBEV09SRCBkd0R3b3JkVmFsX3ApCit2b2lkIEFtaVNldER3b3JkMjRUb0xlKHZvaWQgKnBBZGRyX3AsIHUzMiBkd0R3b3JkVmFsX3ApCiB7Ci0KLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzBdID0gKChCWVRFIEZBUiAqKSAmIGR3RHdvcmRWYWxfcClbMF07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsxXSA9ICgoQllURSBGQVIgKikgJiBkd0R3b3JkVmFsX3ApWzFdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMl0gPSAoKEJZVEUgRkFSICopICYgZHdEd29yZFZhbF9wKVsyXTsKLQorCSgodTggKikgcEFkZHJfcClbMF0gPSAoKHU4ICopICYgZHdEd29yZFZhbF9wKVswXTsKKwkoKHU4ICopIHBBZGRyX3ApWzFdID0gKCh1OCAqKSAmIGR3RHdvcmRWYWxfcClbMV07CisJKCh1OCAqKSBwQWRkcl9wKVsyXSA9ICgodTggKikgJiBkd0R3b3JkVmFsX3ApWzJdOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzczLDIyICszNjEsMTkgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIERXT1JEICAgICAgICAgICA9IHJlYWQgdmFsdWUKKy8vIFJldHVybjogICAgICB1MzIgICAgICAgICAgID0gcmVhZCB2YWx1ZQogLy8KIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIERXT1JEIFBVQkxJQyBBbWlHZXREd29yZDI0RnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCkKK3UzMiBBbWlHZXREd29yZDI0RnJvbUJlKHZvaWQgKnBBZGRyX3ApCiB7Ci0KIAl0ZHdTdHJ1Y3QgZHdTdHJ1Y3Q7CiAKIAlkd1N0cnVjdC5tX2R3RHdvcmQgPSBBbWlHZXREd29yZEZyb21CZShwQWRkcl9wKTsKIAlkd1N0cnVjdC5tX2R3RHdvcmQgPj49IDg7CiAKIAlyZXR1cm4gKGR3U3RydWN0Lm1fZHdEd29yZCk7Ci0KIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM5OSwyMiArMzg0LDE5IEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBEV09SRCAgICAgICAgICAgPSByZWFkIHZhbHVlCisvLyBSZXR1cm46ICAgICAgdTMyICAgICAgICAgICA9IHJlYWQgdmFsdWUKIC8vCiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiBEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmQyNEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1MzIgQW1pR2V0RHdvcmQyNEZyb21MZSh2b2lkICpwQWRkcl9wKQogewotCiAJdGR3U3RydWN0IGR3U3RydWN0OwogCiAJZHdTdHJ1Y3QubV9kd0R3b3JkID0gQW1pR2V0RHdvcmRGcm9tTGUocEFkZHJfcCk7CiAJZHdTdHJ1Y3QubV9kd0R3b3JkICY9IDB4MDBGRkZGRkY7CiAKIAlyZXR1cm4gKGR3U3RydWN0Lm1fZHdEd29yZCk7Ci0KIH0KIAogLy8jaWZkZWYgVVNFX1ZBUjY0CkBAIC00MzMsMjAgKzQxNSwxNiBAQAogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ2NFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBRV09SRCBxd1F3b3JkVmFsX3ApCit2b2lkIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApCiB7Ci0KLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzBdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbN107Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsxXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzZdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMl0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs1XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzNdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbNF07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs0XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzNdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNV0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVsyXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzZdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMV07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs3XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOwotCisJKCh1OCAqKSBwQWRkcl9wKVswXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzddOworCSgodTggKikgcEFkZHJfcClbMV0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs2XTsKKwkoKHU4ICopIHBBZGRyX3ApWzJdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNV07CisJKCh1OCAqKSBwQWRkcl9wKVszXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzRdOworCSgodTggKikgcEFkZHJfcClbNF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVszXTsKKwkoKHU4ICopIHBBZGRyX3ApWzVdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMl07CisJKCh1OCAqKSBwQWRkcl9wKVs2XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzFdOworCSgodTggKikgcEFkZHJfcClbN10gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVswXTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2MywxNiArNDQxLDEyIEBACiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDY0VG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICAgIFFXT1JEIHF3UXdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0UXdvcmQ2NFRvTGUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCkKIHsKKwl1NjQgKnBxd0RzdDsKIAotCVFXT1JEIEZBUiAqcHF3RHN0OwotCi0JcHF3RHN0ID0gKFFXT1JEIEZBUiAqKSBwQWRkcl9wOworCXBxd0RzdCA9ICh1NjQgKikgcEFkZHJfcDsKIAkqcHF3RHN0ID0gcXdRd29yZFZhbF9wOwotCiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00ODgsMjMgKzQ2MiwyMCBAQAogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNjRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKQordTY0IEFtaUdldFF3b3JkNjRGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKLQogCXRxd1N0cnVjdCBxd1N0cnVjdDsKIAotCSgoQllURSBGQVIgKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzBdID0gKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs3XTsKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVsxXSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbNl07Ci0JKChCWVRFIEZBUiAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbMl0gPSAoKEJZVEUgRkFSICopIHBBZGRyX3ApWzVdOwotCSgoQllURSBGQVIgKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzNdID0gKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs0XTsKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs0XSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbM107Ci0JKChCWVRFIEZBUiAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbNV0gPSAoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdOwotCSgoQllURSBGQVIgKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzZdID0gKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsxXTsKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs3XSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbMF07CisJKCh1OCAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbMF0gPSAoKHU4ICopIHBBZGRyX3ApWzddOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzFdID0gKCh1OCAqKSBwQWRkcl9wKVs2XTsKKwkoKHU4ICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVsyXSA9ICgodTggKikgcEFkZHJfcClbNV07CisJKCh1OCAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbM10gPSAoKHU4ICopIHBBZGRyX3ApWzRdOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzRdID0gKCh1OCAqKSBwQWRkcl9wKVszXTsKKwkoKHU4ICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs1XSA9ICgodTggKikgcEFkZHJfcClbMl07CisJKCh1OCAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbNl0gPSAoKHU4ICopIHBBZGRyX3ApWzFdOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzddID0gKCh1OCAqKSBwQWRkcl9wKVswXTsKIAogCXJldHVybiAocXdTdHJ1Y3QubV9xd1F3b3JkKTsKLQogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTIwLDE4ICs0OTEsMTUgQEAKIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDY0RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDY0RnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7Ci0KLQl0cXdTdHJ1Y3QgRkFSICpwcXdTdHJ1Y3Q7CisJdHF3U3RydWN0ICpwcXdTdHJ1Y3Q7CiAJdHF3U3RydWN0IHF3U3RydWN0OwogCi0JcHF3U3RydWN0ID0gKHRxd1N0cnVjdCBGQVIgKikgcEFkZHJfcDsKKwlwcXdTdHJ1Y3QgPSAodHF3U3RydWN0ICopIHBBZGRyX3A7CiAJcXdTdHJ1Y3QubV9xd1F3b3JkID0gcHF3U3RydWN0LT5tX3F3UXdvcmQ7CiAKIAlyZXR1cm4gKHF3U3RydWN0Lm1fcXdRd29yZCk7Ci0KIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU0OSwxNSArNTE3LDE0IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDBUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDQwVG9CZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewogCi0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzRdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMV0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVszXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMl07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVszXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzFdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVswXTsKKwkoKHU4ICopIHBBZGRyX3ApWzBdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNF07CisJKCh1OCAqKSBwQWRkcl9wKVsxXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzNdOworCSgodTggKikgcEFkZHJfcClbMl0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsyXTsKKwkoKHU4ICopIHBBZGRyX3ApWzNdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMV07CisJKCh1OCAqKSBwQWRkcl9wKVs0XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzBdOwogCiB9CiAKQEAgLTU3NiwxMiArNTQzLDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDBUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDQwVG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewogCi0JKChEV09SRCBGQVIgKikgcEFkZHJfcClbMF0gPSAoKERXT1JEIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs0XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzRdOworCSgodTMyICopIHBBZGRyX3ApWzBdID0gKCh1MzIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOworCSgodTggKikgcEFkZHJfcClbNF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs0XTsKIAogfQogCkBAIC01OTMsMTMgKzU1OSwxMyBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgUVdPUkQKKy8vIFJldHVybjogICAgICB1NjQKIC8vCiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0MEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1NjQgQW1pR2V0UXdvcmQ0MEZyb21CZSh2b2lkICpwQWRkcl9wKQogewogCiAJdHF3U3RydWN0IHF3U3RydWN0OwpAQCAtNjE5LDEzICs1ODUsMTMgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNDBGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKQordTY0IEFtaUdldFF3b3JkNDBGcm9tTGUodm9pZCAqcEFkZHJfcCkKIHsKIAogCXRxd1N0cnVjdCBxd1N0cnVjdDsKQEAgLTY1MiwxNiArNjE4LDE1IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDhUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDQ4VG9CZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewogCi0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzVdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMV0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs0XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbM107Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVszXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzVdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07CisJKCh1OCAqKSBwQWRkcl9wKVswXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzVdOworCSgodTggKikgcEFkZHJfcClbMV0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs0XTsKKwkoKHU4ICopIHBBZGRyX3ApWzJdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbM107CisJKCh1OCAqKSBwQWRkcl9wKVszXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzJdOworCSgodTggKikgcEFkZHJfcClbNF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsxXTsKKwkoKHU4ICopIHBBZGRyX3ApWzVdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMF07CiAKIH0KIApAQCAtNjgwLDEyICs2NDUsMTEgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ0OFRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBRV09SRCBxd1F3b3JkVmFsX3ApCit2b2lkIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApCiB7CiAKLQkoKERXT1JEIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoRFdPUkQgRkFSICopICYgcXdRd29yZFZhbF9wKVswXTsKLQkoKFdPUkQgRkFSICopIHBBZGRyX3ApWzJdID0gKChXT1JEIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMl07CisJKCh1MzIgKikgcEFkZHJfcClbMF0gPSAoKHUzMiAqKSAmIHF3UXdvcmRWYWxfcClbMF07CisJKCh1MTYgKikgcEFkZHJfcClbMl0gPSAoKHUxNiAqKSAmIHF3UXdvcmRWYWxfcClbMl07CiAKIH0KIApAQCAtNjk3LDEzICs2NjEsMTMgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNDhGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKQordTY0IEFtaUdldFF3b3JkNDhGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKIAogCXRxd1N0cnVjdCBxd1N0cnVjdDsKQEAgLTcyMywxMyArNjg3LDEzIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDQ4RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDQ4RnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7CiAKIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CkBAIC03NTYsMTcgKzcyMCwxNiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDU2VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICAgIFFXT1JEIHF3UXdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0UXdvcmQ1NlRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCkKIHsKIAotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs2XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzFdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbNV07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzRdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbM10gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVszXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzRdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMl07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs1XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzFdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNl0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVswXTsKKwkoKHU4ICopIHBBZGRyX3ApWzBdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNl07CisJKCh1OCAqKSBwQWRkcl9wKVsxXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzVdOworCSgodTggKikgcEFkZHJfcClbMl0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs0XTsKKwkoKHU4ICopIHBBZGRyX3ApWzNdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbM107CisJKCh1OCAqKSBwQWRkcl9wKVs0XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzJdOworCSgodTggKikgcEFkZHJfcClbNV0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsxXTsKKwkoKHU4ICopIHBBZGRyX3ApWzZdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMF07CiAKIH0KIApAQCAtNzg1LDEzICs3NDgsMTIgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ1NlRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBRV09SRCBxd1F3b3JkVmFsX3ApCit2b2lkIEFtaVNldFF3b3JkNTZUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApCiB7CiAKLQkoKERXT1JEIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoRFdPUkQgRkFSICopICYgcXdRd29yZFZhbF9wKVswXTsKLQkoKFdPUkQgRkFSICopIHBBZGRyX3ApWzJdID0gKChXT1JEIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMl07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs2XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzZdOworCSgodTMyICopIHBBZGRyX3ApWzBdID0gKCh1MzIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOworCSgodTE2ICopIHBBZGRyX3ApWzJdID0gKCh1MTYgKikgJiBxd1F3b3JkVmFsX3ApWzJdOworCSgodTggKikgcEFkZHJfcClbNl0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs2XTsKIAogfQogCkBAIC04MDMsMTMgKzc2NSwxMyBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgUVdPUkQKKy8vIFJldHVybjogICAgICB1NjQKIC8vCiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ1NkZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1NjQgQW1pR2V0UXdvcmQ1NkZyb21CZSh2b2lkICpwQWRkcl9wKQogewogCiAJdHF3U3RydWN0IHF3U3RydWN0OwpAQCAtODI5LDEzICs3OTEsMTMgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNTZGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKQordTY0IEFtaUdldFF3b3JkNTZGcm9tTGUodm9pZCAqcEFkZHJfcCkKIHsKIAogCXRxd1N0cnVjdCBxd1N0cnVjdDsKQEAgLTg2MiwxMyArODI0LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFRpbWVPZkRheSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICB0VGltZU9mRGF5IEZBUiAqIHBUaW1lT2ZEYXlfcCkKK3ZvaWQgQW1pU2V0VGltZU9mRGF5KHZvaWQgKnBBZGRyX3AsIHRUaW1lT2ZEYXkgKnBUaW1lT2ZEYXlfcCkKIHsKIAotCUFtaVNldER3b3JkVG9MZSgoKEJZVEUgRkFSICopIHBBZGRyX3ApLAotCQkJcFRpbWVPZkRheV9wLT5tX2R3TXMgJiAweDBGRkZGRkZGKTsKLQlBbWlTZXRXb3JkVG9MZSgoKEJZVEUgRkFSICopIHBBZGRyX3ApICsgNCwgcFRpbWVPZkRheV9wLT5tX3dEYXlzKTsKKwlBbWlTZXREd29yZFRvTGUoKCh1OCAqKSBwQWRkcl9wKSwgcFRpbWVPZkRheV9wLT5tX2R3TXMgJiAweDBGRkZGRkZGKTsKKwlBbWlTZXRXb3JkVG9MZSgoKHU4ICopIHBBZGRyX3ApICsgNCwgcFRpbWVPZkRheV9wLT5tX3dEYXlzKTsKIAogfQogCkBAIC04ODcsMTggKzg0NywxNCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlHZXRUaW1lT2ZEYXkodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgdFRpbWVPZkRheSBGQVIgKiBwVGltZU9mRGF5X3ApCit2b2lkIEFtaUdldFRpbWVPZkRheSh2b2lkICpwQWRkcl9wLCB0VGltZU9mRGF5ICpwVGltZU9mRGF5X3ApCiB7CiAKLQlwVGltZU9mRGF5X3AtPm1fZHdNcyA9Ci0JICAgIEFtaUdldER3b3JkRnJvbUxlKCgoQllURSBGQVIgKikgcEFkZHJfcCkpICYgMHgwRkZGRkZGRjsKLQlwVGltZU9mRGF5X3AtPm1fd0RheXMgPSBBbWlHZXRXb3JkRnJvbUxlKCgoQllURSBGQVIgKikgcEFkZHJfcCkgKyA0KTsKKwlwVGltZU9mRGF5X3AtPm1fZHdNcyA9IEFtaUdldER3b3JkRnJvbUxlKCgodTggKikgcEFkZHJfcCkpICYgMHgwRkZGRkZGRjsKKwlwVGltZU9mRGF5X3AtPm1fd0RheXMgPSBBbWlHZXRXb3JkRnJvbUxlKCgodTggKikgcEFkZHJfcCkgKyA0KTsKIAogfQogCi0jZW5kaWYKLQogLy8gRU9GCiAKIC8vIERpZSBsZXR6dGUgWmVpbGUgbXXfIHVuYmVkaW5ndCBlaW5lIGxlZXJlIFplaWxlIHNlaW4sIHdlaWwgbWFuY2hlIENvbXBpbGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2RlbW9fbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9kZW1vX21haW4uYwppbmRleCAyNjNmYTA0Li43YWQxMGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2RlbW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZGVtb19tYWluLmMKQEAgLTc0LDcgKzc0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTg3LDE2ICs4Niw2IEBACiAjaW5jbHVkZSAiRXBsLmgiCiAjaW5jbHVkZSAicHJvY19mcy5oIgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotICAgIC8vIHJlbW92ZSAoIm1ha2UgaW52aXNpYmxlIikgb2Jzb2xldGUgc3ltYm9scyBmb3Iga2VybmVsIHZlcnNpb25zIDIuNgotICAgIC8vIGFuZCBoaWdoZXIKLSNkZWZpbmUgTU9EX0lOQ19VU0VfQ09VTlQKLSNkZWZpbmUgTU9EX0RFQ19VU0VfQ09VTlQKLSNkZWZpbmUgRVhQT1JUX05PX1NZTUJPTFMKLSNlbHNlCi0jZXJyb3IgIlRoaXMgZHJpdmVyIG5lZWRzIGEgMi42Lngga2VybmVsIG9yIGhpZ2hlciIKLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTgsNyArMTA3LDcgQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZWxzZQogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKQpAQCAtMTQ4LDMwICsxMzcsMzAgQEAKIC8vIG1vZHVsIGdsb2JhbGUgdmFycwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ09OU1QgQllURSBhYk1hY0FkZHJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9Oworc3RhdGljIGNvbnN0IHU4IGFiTWFjQWRkcltdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CiAKLUJZVEUgYlZhckluMV9sOwotQllURSBiVmFyT3V0MV9sOwotQllURSBiVmFyT3V0MU9sZF9sOwotQllURSBiTW9kZVNlbGVjdF9sOwkJLy8gc3RhdGUgb2YgdGhlIHB1c2hidXR0b25zIHRvIHNlbGVjdCB0aGUgbW9kZQotQllURSBiU3BlZWRTZWxlY3RfbDsJCS8vIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucyB0byBpbmNyZWFzZS9kZWNyZWFzZSB0aGUgc3BlZWQKLUJZVEUgYlNwZWVkU2VsZWN0T2xkX2w7CQkvLyBvbGQgc3RhdGUgb2YgdGhlIHB1c2hidXR0b25zCi1EV09SRCBkd0xlZHNfbDsJCQkvLyBjdXJyZW50IHN0YXRlIG9mIGFsbCBMRURzCi1CWVRFIGJMZWRzUm93MV9sOwkJLy8gY3VycmVudCBzdGF0ZSBvZiB0aGUgTEVEcyBpbiByb3cgMQotQllURSBiTGVkc1JvdzJfbDsJCS8vIGN1cnJlbnQgc3RhdGUgb2YgdGhlIExFRHMgaW4gcm93IDIKLUJZVEUgYWJTZWxlY3RfbFszXTsJCS8vIHB1c2hidXR0b25zIGZyb20gQ05zCitzdGF0aWMgdTggYlZhckluMV9sOworc3RhdGljIHU4IGJWYXJPdXQxX2w7CitzdGF0aWMgdTggYlZhck91dDFPbGRfbDsKK3N0YXRpYyB1OCBiTW9kZVNlbGVjdF9sOwkJLy8gc3RhdGUgb2YgdGhlIHB1c2hidXR0b25zIHRvIHNlbGVjdCB0aGUgbW9kZQorc3RhdGljIHU4IGJTcGVlZFNlbGVjdF9sOwkJLy8gc3RhdGUgb2YgdGhlIHB1c2hidXR0b25zIHRvIGluY3JlYXNlL2RlY3JlYXNlIHRoZSBzcGVlZAorc3RhdGljIHU4IGJTcGVlZFNlbGVjdE9sZF9sOwkJLy8gb2xkIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucworc3RhdGljIHUzMiBkd0xlZHNfbDsJCQkvLyBjdXJyZW50IHN0YXRlIG9mIGFsbCBMRURzCitzdGF0aWMgdTggYkxlZHNSb3cxX2w7CQkvLyBjdXJyZW50IHN0YXRlIG9mIHRoZSBMRURzIGluIHJvdyAxCitzdGF0aWMgdTggYkxlZHNSb3cyX2w7CQkvLyBjdXJyZW50IHN0YXRlIG9mIHRoZSBMRURzIGluIHJvdyAyCitzdGF0aWMgdTggYWJTZWxlY3RfbFszXTsJCS8vIHB1c2hidXR0b25zIGZyb20gQ05zCiAKLURXT1JEIGR3TW9kZV9sOwkJCS8vIGN1cnJlbnQgbW9kZQotaW50IGlDdXJDeWNsZUNvdW50X2w7CQkvLyBjdXJyZW50IGN5Y2xlIGNvdW50Ci1pbnQgaU1heEN5Y2xlQ291bnRfbDsJCS8vIG1heGltdW0gY3ljbGUgY291bnQgKGkuZS4gbnVtYmVyIG9mIGN5Y2xlcyB1bnRpbCBuZXh0IGxpZ2h0IG1vdmVtZW50IHN0ZXApCi1pbnQgaVRvZ2dsZTsJCQkvLyBpbmRpY2F0ZXMgdGhlIGxpZ2h0IG1vdmVtZW50IGRpcmVjdGlvbgorc3RhdGljIHUzMiBkd01vZGVfbDsJCQkvLyBjdXJyZW50IG1vZGUKK3N0YXRpYyBpbnQgaUN1ckN5Y2xlQ291bnRfbDsJCS8vIGN1cnJlbnQgY3ljbGUgY291bnQKK3N0YXRpYyBpbnQgaU1heEN5Y2xlQ291bnRfbDsJCS8vIG1heGltdW0gY3ljbGUgY291bnQgKGkuZS4gbnVtYmVyIG9mIGN5Y2xlcyB1bnRpbCBuZXh0IGxpZ2h0IG1vdmVtZW50IHN0ZXApCitzdGF0aWMgaW50IGlUb2dnbGU7CQkJLy8gaW5kaWNhdGVzIHRoZSBsaWdodCBtb3ZlbWVudCBkaXJlY3Rpb24KIAotQllURSBhYkRvbWFpbl9sWzMwMDBdOworLy9zdGF0aWMgdTggYWJEb21haW5fbFszMDAwXTsKIAogc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IFdhaXRRdWV1ZVNodXRkb3duX2c7CS8vIHdhaXQgcXVldWUgZm9yIHRFcGxObXRFdmVudFN3aXRjaE9mZgogc3RhdGljIGF0b21pY190IEF0b21pY1NodXRkb3duX2cgPSBBVE9NSUNfSU5JVChGQUxTRSk7CiAKLXN0YXRpYyBEV09SRCBkd19sZV9DeWNsZUxlbl9nOworc3RhdGljIHUzMiBkd19sZV9DeWNsZUxlbl9nOwogCiBzdGF0aWMgdWludCB1aU5vZGVJZF9nID0gRVBMX0NfQURSX0lOVkFMSUQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9kZWlkLCB1aU5vZGVJZF9nLCB1aW50LCAwKTsKQEAgLTE4OCwyMyArMTc3LDE5IEBACiAvLyB0aGlzIGZ1bmN0aW9uIHByb3RvdHlwZSBoZXJlLiBJZiB5b3Ugd2FudCB0byB1c2UgbW9yZSB0aGFuIG9uZSBFcGwKIC8vIGluc3RhbmNlcyB0aGVuIHRoZSBmdW5jdGlvbiBuYW1lIG9mIGVhY2ggb2JqZWN0IGRpY3Rpb25hcnkgaGFzIHRvIGRpZmZlci4KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkSW5pdFJhbSh0RXBsT2JkSW5pdFBhcmFtIE1FTSAqIHBJbml0UGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbE9iZEluaXRSYW0odEVwbE9iZEluaXRQYXJhbSAqcEluaXRQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgQXBwQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKLQkJCSAgICAgdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkgICAgIHZvaWQgR0VORVJJQyAqIHBVc2VyQXJnX3ApOwordEVwbEtlcm5lbCBBcHBDYkV2ZW50KHRFcGxBcGlFdmVudFR5cGUgRXZlbnRUeXBlX3AsCS8vIElOOiBldmVudCB0eXBlIChlbnVtKQorCQkgICAgICB0RXBsQXBpRXZlbnRBcmcgKnBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQorCQkgICAgICB2b2lkICpwVXNlckFyZ19wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgQXBwQ2JTeW5jKHZvaWQpOwordEVwbEtlcm5lbCBBcHBDYlN5bmModm9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IEVwbExpbkluaXQodm9pZCk7Ci1zdGF0aWMgdm9pZCBfX2V4aXQgRXBsTGluRXhpdCh2b2lkKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBLZXJuZWwgTW9kdWxlIHNwZWNpZmljIERhdGEgU3RydWN0dXJlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVhQT1JUX05PX1NZTUJPTFM7Ci0KIC8vbW9kdWxlX2luaXQoRXBsTGluSW5pdCk7CiAvL21vZHVsZV9leGl0KEVwbExpbkV4aXQpOwogCkBAIC0yMzEsNiArMjE2LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaWYgMAogc3RhdGljIGludCBfX2luaXQgRXBsTGluSW5pdCh2b2lkKQogewogCXRFcGxLZXJuZWwgRXBsUmV0OwpAQCAtMjYzLDcgKzI0OSw3IEBACiAJRXBsQXBpSW5pdFBhcmFtLm1fdWlTaXplT2ZTdHJ1Y3QgPSBzaXplb2YoRXBsQXBpSW5pdFBhcmFtKTsKIAlFUExfTUVNQ1BZKEVwbEFwaUluaXRQYXJhbS5tX2FiTWFjQWRkcmVzcywgYWJNYWNBZGRyLAogCQkgICBzaXplb2YoRXBsQXBpSW5pdFBhcmFtLm1fYWJNYWNBZGRyZXNzKSk7Ci0vLyAgICBFcGxBcGlJbml0UGFyYW0ubV9hYk1hY0FkZHJlc3NbNV0gPSAoQllURSkgRXBsQXBpSW5pdFBhcmFtLm1fdWlOb2RlSWQ7CisvLwlFcGxBcGlJbml0UGFyYW0ubV9hYk1hY0FkZHJlc3NbNV0gPSAodTgpIEVwbEFwaUluaXRQYXJhbS5tX3VpTm9kZUlkOwogCUVwbEFwaUluaXRQYXJhbS5tX2R3RmVhdHVyZUZsYWdzID0gLTE7CiAJRXBsQXBpSW5pdFBhcmFtLm1fZHdDeWNsZUxlbiA9IHVpQ3ljbGVMZW5fZzsJLy8gcmVxdWlyZWQgZm9yIGVycm9yIGRldGVjdGlvbgogCUVwbEFwaUluaXRQYXJhbS5tX3VpSXNvY2hyVHhNYXhQYXlsb2FkID0gMTAwOwkvLyBjb25zdApAQCAtNDAxLDcgKzM4Nyw3IEBACiAKIAkvLyBjb25maWd1cmUgSVAgYWRkcmVzcyBvZiB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlCiAJLy8gZm9yIFRDUC9JUCBjb21tdW5pY2F0aW9uIG92ZXIgdGhlIFBPV0VSTElOSyBuZXR3b3JrCi0Jc3ByaW50ZihzQnVmZmVyLCAiJWx1LiVsdS4lbHUuJWx1IiwKKwlzcHJpbnRmKHNCdWZmZXIsICIldS4ldS4ldS4ldSIsCiAJCShFcGxBcGlJbml0UGFyYW0ubV9kd0lwQWRkcmVzcyA+PiAyNCksCiAJCSgoRXBsQXBpSW5pdFBhcmFtLm1fZHdJcEFkZHJlc3MgPj4gMTYpICYgMHhGRiksCiAJCSgoRXBsQXBpSW5pdFBhcmFtLm1fZHdJcEFkZHJlc3MgPj4gOCkgJiAweEZGKSwKQEAgLTQ1Niw3ICs0NDIsNyBAQAogCXByaW50aygiRXBsTGluUHJvY0ZyZWUoKTogICAgICAgIDB4JVhcbiIsIEVwbFJldCk7CiAKIH0KLQorI2VuZGlmCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vICAgICAgICAgIFAgUiBJIFYgQSBUIEUgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCkBAIC00ODQsOSArNDcwLDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBBcHBDYkV2ZW50KHRFcGxBcGlFdmVudFR5cGUgRXZlbnRUeXBlX3AsCS8vIElOOiBldmVudCB0eXBlIChlbnVtKQotCQkJICAgICB0RXBsQXBpRXZlbnRBcmcgKiBwRXZlbnRBcmdfcCwJLy8gSU46IGV2ZW50IGFyZ3VtZW50ICh1bmlvbikKLQkJCSAgICAgdm9pZCBHRU5FUklDICogcFVzZXJBcmdfcCkKK3RFcGxLZXJuZWwgQXBwQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKKwkJICAgICAgdEVwbEFwaUV2ZW50QXJnICpwRXZlbnRBcmdfcCwJLy8gSU46IGV2ZW50IGFyZ3VtZW50ICh1bmlvbikKKwkJICAgICAgdm9pZCAqcFVzZXJBcmdfcCkKIHsKIAl0RXBsS2VybmVsIEVwbFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC01MTUsNyArNTAxLDcgQEAKIAogCQkJY2FzZSBrRXBsTm10R3NSZXNldENvbW11bmljYXRpb246CiAJCQkJewotCQkJCQlEV09SRCBkd0J1ZmZlcjsKKwkJCQkJdTMyIGR3QnVmZmVyOwogCiAJCQkJCS8vIGNvbmZpZ3VyZSBPRCBmb3IgTU4gaW4gc3RhdGUgUmVzZXRDb21tIGFmdGVyIHJlc2V0aW5nIHRoZSBPRAogCQkJCQkvLyBUT0RPOiBzZXR1cCB5b3VyIG93biBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaGVyZQpAQCAtNjc3LDggKzY2Myw4IEBACiAKIAkJCWNhc2Uga0VwbEV2ZW50U291cmNlRGxsazoKIAkJCQl7CS8vIGVycm9yIG9jY3VyZWQgd2l0aGluIHRoZSBkYXRhIGxpbmsgbGF5ZXIgKGUuZy4gaW50ZXJydXB0IHByb2Nlc3NpbmcpCi0JCQkJCS8vIHRoZSBEV09SRCBhcmd1bWVudCBjb250YWlucyB0aGUgRExMIHN0YXRlIGFuZCB0aGUgTk1UIGV2ZW50Ci0JCQkJCXByaW50aygiIHZhbD0lbFhcbiIsCisJCQkJCS8vIHRoZSB1MzIgYXJndW1lbnQgY29udGFpbnMgdGhlIERMTCBzdGF0ZSBhbmQgdGhlIE5NVCBldmVudAorCQkJCQlwcmludGsoIiB2YWw9JVhcbiIsCiAJCQkJCSAgICAgICBwRXZlbnRBcmdfcC0+bV9JbnRlcm5hbEVycm9yLgogCQkJCQkgICAgICAgbV9BcmcubV9kd0FyZyk7CiAJCQkJCWJyZWFrOwpAQCAtODAyLDcgKzc4OCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgQXBwQ2JTeW5jKHZvaWQpCit0RXBsS2VybmVsIEFwcENiU3luYyh2b2lkKQogewogCXRFcGxLZXJuZWwgRXBsUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTgxMCw3ICs3OTYsNyBAQAogCQliVmFyT3V0MU9sZF9sID0gYlZhck91dDFfbDsKIAkJLy8gc2V0IExFRHMKIAotLy8gICAgICAgIHByaW50aygiYlZhckluID0gMHglMDJYIGJWYXJPdXQgPSAweCUwMlhcbiIsIChXT1JEKSBiVmFySW5fbCwgKFdPUkQpIGJWYXJPdXRfbCk7CisvLyAgICAgICAgcHJpbnRrKCJiVmFySW4gPSAweCUwMlggYlZhck91dCA9IDB4JTAyWFxuIiwgKHUxNikgYlZhckluX2wsICh1MTYpIGJWYXJPdXRfbCk7CiAJfQogCWlmICh1aU5vZGVJZF9nICE9IEVQTF9DX0FEUl9NTl9ERUZfTk9ERV9JRCkgewogCQliVmFySW4xX2wrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvZWRydi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9lZHJ2LmgKaW5kZXggYTQ1OTg0ZC4uNjJiNGU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9lZHJ2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9lZHJ2LmgKQEAgLTEwNCw3ICsxMDQsNyBAQAogCXVuc2lnbmVkIGludCBtX3VpVHhNc2dMZW47CS8vIElOOiBsZW5ndGggb2YgbWVzc2FnZSB0byBiZSBzZW5kIChzZXQgZm9yIGVhY2ggdHJhbnNtaXQgY2FsbCkKIAkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJdW5zaWduZWQgaW50IG1fdWlCdWZmZXJOdW1iZXI7CS8vIE9VVDogbnVtYmVyIG9mIHRoZSBidWZmZXIsIHNldCBieSBldGhlcm5ldGRyaXZlcgotCUJZVEUgKm1fcGJCdWZmZXI7CS8vIE9VVDogcG9pbnRlciB0byB0aGUgYnVmZmVyLCBzZXQgYnkgZXRoZXJuZXRkcml2ZXIKKwl1OCAqbV9wYkJ1ZmZlcjsJLy8gT1VUOiBwb2ludGVyIHRvIHRoZSBidWZmZXIsIHNldCBieSBldGhlcm5ldGRyaXZlcgogCXRFcGxOZXRUaW1lIG1fTmV0VGltZTsJLy8gT1VUOiBUaW1lc3RhbXAgb2YgZW5kIG9mIHRyYW5zbWlzc2lvbiwgc2V0IGJ5IGV0aGVybmV0ZHJpdmVyCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCXVuc2lnbmVkIGludCBtX3VpTWF4QnVmZmVyTGVuOwkvLyBJTi9PVVQ6IG1heGltdW0gbGVuZ3RoIG9mIHRoZSBidWZmZXIKQEAgLTExNCwyMyArMTE0LDIzIEBACiB0eXBlZGVmIHN0cnVjdCBfdEVkcnZSeEJ1ZmZlciB7CiAJdEVkcnZCdWZmZXJJbkZyYW1lIG1fQnVmZmVySW5GcmFtZTsJLy8gT1VUIHBvc2l0aW9uIG9mIHJlY2VpdmVkIGJ1ZmZlciBpbiBhbiBldGhlcm5ldC1mcmFtZQogCXVuc2lnbmVkIGludCBtX3VpUnhNc2dMZW47CS8vIE9VVDogbGVuZ3RoIG9mIHJlY2VpdmVkIGJ1ZmZlciAod2l0aG91dCBDUkMpCi0JQllURSAqbV9wYkJ1ZmZlcjsJLy8gT1VUOiBwb2ludGVyIHRvIHRoZSBidWZmZXIsIHNldCBieSBldGhlcm5ldGRyaXZlcgorCXU4ICptX3BiQnVmZmVyOwkvLyBPVVQ6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciwgc2V0IGJ5IGV0aGVybmV0ZHJpdmVyCiAJdEVwbE5ldFRpbWUgbV9OZXRUaW1lOwkvLyBPVVQ6IFRpbWVzdGFtcCBvZiBlbmQgb2YgcmVjZWlwdGlvbgogCiB9IHRFZHJ2UnhCdWZmZXI7CiAKLS8vdHlwZWRlZiB2b2lkICgqdEVkcnZSeEhhbmRsZXIpIChCWVRFIGJCdWZmZXJJbkZyYW1lX3AsIHRCdWZmZXJEZXNjciAqIHBiQnVmZmVyX3ApOwotLy90eXBlZGVmIHZvaWQgKCp0RWRydlJ4SGFuZGxlcikgKEJZVEUgYkJ1ZmZlckluRnJhbWVfcCwgQllURSAqIHBiRXRoZXJuZXREYXRhX3AsIFdPUkQgd0RhdGFMZW5fcCk7CisvL3R5cGVkZWYgdm9pZCAoKnRFZHJ2UnhIYW5kbGVyKSAodTggYkJ1ZmZlckluRnJhbWVfcCwgdEJ1ZmZlckRlc2NyICogcGJCdWZmZXJfcCk7CisvL3R5cGVkZWYgdm9pZCAoKnRFZHJ2UnhIYW5kbGVyKSAodTggYkJ1ZmZlckluRnJhbWVfcCwgdTggKiBwYkV0aGVybmV0RGF0YV9wLCB1MTYgd0RhdGFMZW5fcCk7CiB0eXBlZGVmIHZvaWQgKCp0RWRydlJ4SGFuZGxlcikgKHRFZHJ2UnhCdWZmZXIgKiBwUnhCdWZmZXJfcCk7CiB0eXBlZGVmIHZvaWQgKCp0RWRydlR4SGFuZGxlcikgKHRFZHJ2VHhCdWZmZXIgKiBwVHhCdWZmZXJfcCk7CiAKIC8vIGZvcm1hdCBvZiBpbml0IHN0cnVjdHVyZQogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9hYk15TWFjQWRkcls2XTsJLy8gdGhlIG93biBNQUMgYWRkcmVzcworCXU4IG1fYWJNeU1hY0FkZHJbNl07CS8vIHRoZSBvd24gTUFDIGFkZHJlc3MKIAotLy8gICAgQllURSAgICAgICAgICAgIG1fYk5vT2ZSeEJ1ZmZEZXNjcjsgICAgIC8vIG51bWJlciBvZiBlbnRyaWVzIGluIHJ4IGJ1ZmZlcmRlc2NyaXB0b3IgdGFibGUKKy8vICAgIHU4ICAgICAgICAgICAgbV9iTm9PZlJ4QnVmZkRlc2NyOyAgICAgLy8gbnVtYmVyIG9mIGVudHJpZXMgaW4gcnggYnVmZmVyZGVzY3JpcHRvciB0YWJsZQogLy8gICAgdEJ1ZmZlckRlc2NyICogIG1fcFJ4QnVmZkRlc2NyVGFibGU7ICAgIC8vIHJ4IGJ1ZmZlcmRlc2NyaXB0b3IgdGFibGUKLS8vICAgIFdPUkQgICAgICAgICAgICBtX3dSeEJ1ZmZlclNpemU7ICAgICAgICAvLyBzaXplIG9mIHRoZSB3aG9sZSByeCBidWZmZXIKKy8vICAgIHUxNiAgICAgICAgICAgIG1fd1J4QnVmZmVyU2l6ZTsgICAgICAgIC8vIHNpemUgb2YgdGhlIHdob2xlIHJ4IGJ1ZmZlcgogCiAJdEVkcnZSeEhhbmRsZXIgbV9wZm5SeEhhbmRsZXI7CiAJdEVkcnZUeEhhbmRsZXIgbV9wZm5UeEhhbmRsZXI7CkBAIC0xNDUsMTEgKzE0NSwxMSBAQAogCiB0RXBsS2VybmVsIEVkcnZTaHV0ZG93bih2b2lkKTsKIAotdEVwbEtlcm5lbCBFZHJ2RGVmaW5lUnhNYWNBZGRyRW50cnkoQllURSAqIHBiTWFjQWRkcl9wKTsKLXRFcGxLZXJuZWwgRWRydlVuZGVmaW5lUnhNYWNBZGRyRW50cnkoQllURSAqIHBiTWFjQWRkcl9wKTsKK3RFcGxLZXJuZWwgRWRydkRlZmluZVJ4TWFjQWRkckVudHJ5KHU4ICogcGJNYWNBZGRyX3ApOwordEVwbEtlcm5lbCBFZHJ2VW5kZWZpbmVSeE1hY0FkZHJFbnRyeSh1OCAqIHBiTWFjQWRkcl9wKTsKIAotLy90RXBsS2VybmVsIEVkcnZEZWZpbmVVbmljYXN0RW50cnkgICAgIChCWVRFICogcGJVQ0VudHJ5X3ApOwotLy90RXBsS2VybmVsIEVkcnZVbmRmaW5lVW5pY2FzdEVudHJ5ICAgIChCWVRFICogcGJVQ0VudHJ5X3ApOworLy90RXBsS2VybmVsIEVkcnZEZWZpbmVVbmljYXN0RW50cnkgICAgICh1OCAqIHBiVUNFbnRyeV9wKTsKKy8vdEVwbEtlcm5lbCBFZHJ2VW5kZmluZVVuaWNhc3RFbnRyeSAgICAodTggKiBwYlVDRW50cnlfcCk7CiAKIHRFcGxLZXJuZWwgRWRydkFsbG9jVHhNc2dCdWZmZXIodEVkcnZUeEJ1ZmZlciAqIHBCdWZmZXJfcCk7CiB0RXBsS2VybmVsIEVkcnZSZWxlYXNlVHhNc2dCdWZmZXIodEVkcnZUeEJ1ZmZlciAqIHBCdWZmZXJfcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2dsb2JhbC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9nbG9iYWwuaAppbmRleCBmZTE2NzE2Li44YzUyZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2dsb2JhbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZ2xvYmFsLmgKQEAgLTIyLDEyNjEgKzIyLDIxIEBACiAjaWZuZGVmIF9HTE9CQUxfSF8KICNkZWZpbmUgX0dMT0JBTF9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGVsZW1lbnRzIG9mIGRlZmluZXMgZm9yIGRldmVsb3BtZW50IHN5c3RlbQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gdGhlc2UgZGVmaW5lcyBhcmUgbmVjZXNzYXJ5IHRvIGNoZWNrIHNvbWUgb2YgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkZXZlbG9wbWVudCBzeXN0ZW0KLSNkZWZpbmUgX0RFVl9CSUdFTkRfICAgICAgICAgICAgMHg4MDAwMDAwMEwJLy8gYmlnIGVuZGlhbiAobW90b3JvbGxhIGZvcm1hdCkKLSNkZWZpbmUgX0RFVl9BTElHTk1FTlRfNF8gICAgICAgMHgwMDQwMDAwMEwJLy8gICAgICAgICAgICAgICAgICB0aGUgQ1BVIG5lZWRzIGFsaWdubWVudCBvZiA0IGJ5dGVzCi0jZGVmaW5lIF9ERVZfT05MWV9JTlRfTUFJTl8gICAgIDB4MDAwMDQwMDBMCS8vICAgICAgICAgICAgICAgICAgdGhlIGNvbXBpbGVyIG5lZWRzICJpbnQgbWFpbihpbnQpIiBpbnN0ZWFkIG9mICJ2b2lkIG1haW4odm9pZCkiCi0jZGVmaW5lIF9ERVZfQ09NTUFfRVhUXyAgICAgICAgIDB4MDAwMDIwMDBMCS8vICAgICAgICAgICAgICAgICAgc3VwcG9ydCBvZiBsYXN0IGNvbW1hIGluIHN0cnVjdCBwcmVkZWZpbml0aW9uCi0jZGVmaW5lIF9ERVZfNjRCSVRfU1VQUE9SVF8gICAgIDB4MDAwMDEwMDBMCS8vICAgICAgICAgICAgICAgICAgc3VwcG9ydCBvZiA2NCBiaXQgb3BlcmF0aW9ucwotI2RlZmluZSBfREVWX0JJVDY0XyAgICAgICAgICAgICAweDAwMDAwNDAwTAkvLyBjb3VudCBvZiBiaXRzOiAgIDY0IGJpdAotI2RlZmluZSBfREVWX0JJVDMyXyAgICAgICAgICAgICAweDAwMDAwMzAwTAkvLyAgICAgICAgICAgICAgICAgIDMyIGJpdAotI2RlZmluZSBfREVWX0JJVDE2XyAgICAgICAgICAgICAweDAwMDAwMjAwTAkvLyAgICAgICAgICAgICAgICAgIDE2IGJpdAotI2RlZmluZSBfREVWX0JJVDhfICAgICAgICAgICAgICAweDAwMDAwMTAwTAkvLyAgICAgICAgICAgICAgICAgIDggYml0Ci0jZGVmaW5lIF9ERVZfUlZDVF9BUk1fICAgICAgICAgIDB4MDAwMDAwMUNMCS8vICAgICAgICAgICAgICAgICAgUmVhbFZpZXcgQVJNCi0jZGVmaW5lIF9ERVZfUkVORVNBU00zMkMgICAgICAgIDB4MDAwMDAwMUJMCS8vIGNvbXBpbGVyIGZyb206ICAgUmVuZXNhcwotI2RlZmluZSBfREVWX0dOVUNfTUlQUzJfICAgICAgICAweDAwMDAwMDFBTAkvLyAgICAgICAgICAgICAgICAgIEdOVSBmb3IgTUlQUzIKLSNkZWZpbmUgX0RFVl9NUExBQl9DMzBfICAgICAgICAgMHgwMDAwMDAxOUwJLy8gICAgICAgICAgICAgICAgICBNUExBQiBDMzAgZm9yIE1pY3JvY2hpcCBkc1BJQzMzRiBzZXJpZXMKLSNkZWZpbmUgX0RFVl9HTlVDX1RDXyAgICAgICAgICAgMHgwMDAwMDAxOEwJLy8gICAgICAgICAgICAgICAgICBHTlUgZm9yIEluZmluZW9uIFRyaUNvcmUKLSNkZWZpbmUgX0RFVl9HTlVDX1g4Nl8gICAgICAgICAgMHgwMDAwMDAxN0wJLy8gICAgICAgICAgICAgICAgICBHTlUgZm9yIEkzODYKLSNkZWZpbmUgX0RFVl9JQVJfQVJNXyAgICAgICAgICAgMHgwMDAwMDAxNkwJLy8gICAgICAgICAgICAgICAgICBBUk0gSUFSIEMvQysrIENvbXBpbGVyCi0jZGVmaW5lIF9ERVZfUEFSQURHTV9YODYgICAgICAgIDB4MDAwMDAwMTVMCS8vICAgICAgICAgICAgICAgICAgUGFyYWRpZ20gQy9DKysgZm9yIEJlY2sgMXgzCi0jZGVmaW5lIF9ERVZfR05VQ19DRl8gICAgICAgICAgIDB4MDAwMDAwMTRMCS8vICAgICAgICAgICAgICAgICAgR05VIGZvciBDb2xkZmlyZQotI2RlZmluZSBfREVWX0tFSUxfQVJNXyAgICAgICAgICAweDAwMDAwMDEzTAkvLyAgICAgICAgICAgICAgICAgIEtlaWwgQVJNCi0jZGVmaW5lIF9ERVZfTVNFVkNfICAgICAgICAgICAgIDB4MDAwMDAwMTJMCS8vICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IGVtYmVkZGVkIFZpc3VhbCBDL0MrKwotI2RlZmluZSBfREVWX0hJR0hURUNfR05VQ19YODZfICAweDAwMDAwMDExTAkvLyAgICAgICAgICAgICAgICAgIEhpZ2h0ZWMgZWxmMzg2IGdjYwotI2RlZmluZSBfREVWX01TVkNfUlRYXyAgICAgICAgICAweDAwMDAwMDEwTAkvLyAgICAgICAgICAgICAgICAgIFZDNjAwICsgUlRYCi0jZGVmaW5lIF9ERVZfTVNWQ19WMV81XyAgICAgICAgIDB4MDAwMDAwMEZMCS8vICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IFZpc3VhbCBDL0MrKyBWMS41Ci0jZGVmaW5lIF9ERVZfR05VQ19BUk03XyAgICAgICAgIDB4MDAwMDAwMEVMCS8vICAgICAgICAgICAgICAgICAgR05VIENvbXBpbGVyIGdjYyBmb3IgQVJNNwotI2RlZmluZSBfREVWX01FVFJPV0VSS1NfQ1dfICAgICAweDAwMDAwMDBETAkvLyAgICAgICAgICAgICAgICAgIE1ldHJvd2Vya3MgQ29kZSBXYXJyaW9yCi0jZGVmaW5lIF9ERVZfTUlUU1VCSVNISU0xNkNfICAgIDB4MDAwMDAwMENMCS8vY29tcGlsZXIgZnJvbTogICAgTWl0c3ViaXNoaQotI2RlZmluZSBfREVWX0dOVUNfQzE2WF8gICAgICAgICAweDAwMDAwMDBCTAkvLyAgICAgICAgICAgICAgICAgIEdOVSBDb21waWxlciBnY2MxNjYgZm9yIEluZmluZW9uIEMxNngKLSNkZWZpbmUgX0RFVl9MSU5VWF9HQ0NfICAgICAgICAgMHgwMDAwMDAwQUwJLy8gICAgICAgICAgICAgICAgICBMaW51eCBHTlUgQ29tcGlsZXIgZ2NjCi0jZGVmaW5lIF9ERVZfR05VQ19NUEM1WDUgICAgICAgIDB4MDAwMDAwMDlMCS8vICAgICAgICAgICAgICAgICAgR05VIGZvciBNb3Rvcm9sYSBQUEM1eDUKLSNkZWZpbmUgX0RFVl9UQVNLSU5HTTE2Q18gICAgICAgMHgwMDAwMDAwOEwJLy8gICAgICAgICAgICAgICAgICBUYXNraW5nIGZvciBNaXRzdWJpc2hpIE0xNkMKLSNkZWZpbmUgX0RFVl9GVUpJVFNVXyAgICAgICAgICAgMHgwMDAwMDAwN0wJLy8gICAgICAgICAgICAgICAgICBGdWppdHN1Ci0jZGVmaW5lIF9ERVZfVEFTS0lORzhfICAgICAgICAgIDB4MDAwMDAwMDZMCS8vICAgICAgICAgICAgICAgICAgVGFza2luZyA4MDUxCi0jZGVmaW5lIF9ERVZfVEFTS0lORzE2XyAgICAgICAgIDB4MDAwMDAwMDVMCS8vICAgICAgICAgICAgICAgICAgVGFza2luZyAxNjYKLSNkZWZpbmUgX0RFVl9LRUlMOF8gICAgICAgICAgICAgMHgwMDAwMDAwNEwJLy8gICAgICAgICAgICAgICAgICBLZWlsIEM1MQotI2RlZmluZSBfREVWX0tFSUwxNl8gICAgICAgICAgICAweDAwMDAwMDAzTAkvLyAgICAgICAgICAgICAgICAgIEtlaWwgQzE2NgotI2RlZmluZSBfREVWX0JPUkxBTkRDXyAgICAgICAgICAweDAwMDAwMDAyTAkvLyAgICAgICAgICAgICAgICAgIEJvcmxhbmQgQy9DKysKLSNkZWZpbmUgX0RFVl9NU1ZDMTZfICAgICAgICAgICAgMHgwMDAwMDAwMUwJLy8gICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgVmlzdWFsIEMvQysrCi0jZGVmaW5lIF9ERVZfTVNWQzMyXyAgICAgICAgICAgIDB4MDAwMDAwMDBMCS8vICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IFZpc3VhbCBDL0MrKwotCi0vLyB0aGVzZSBkZWZpbmVzIGNhbiBiZSB1c2VkIHRvIG1hc2sgcHJldmlvdXMgZWxlbWVudHMKLSNkZWZpbmUgX0RFVl9NQVNLX0NPTVBJTEVSICAgICAgMHgwMDAwMDBGRkwKLSNkZWZpbmUgX0RFVl9NQVNLX0JJVENPVU5UICAgICAgMHgwMDAwMEYwMEwKLSNkZWZpbmUgX0RFVl9NQVNLX0FERFNVUFBPUlQgICAgMHgwMDAwRjAwMEwKLSNkZWZpbmUgX0RFVl9NQVNLX0FMSUdOTUVOVCAgICAgMHgwMEYwMDAwMEwKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbmVzIGZvciBkZXZlbG9wbWVudCBzeXN0ZW0gKERFVl9TWVNURU0pIGluY2x1ZGluZyBwcmV2aW91cyBlbGVtZW50cwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBfREVWX1dJTjE2XyAgICAgICAgICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX01TVkMxNl8gICAgICAgICAgICAgICAgICApCi0jZGVmaW5lIF9ERVZfV0lOMzJfICAgICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTVNWQzMyXyAgICAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfTVNWQ19ET1NfICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTVNWQ19WMV81XyAgICAgICAgICAgICAgICkKLSNkZWZpbmUgX0RFVl9CT1JMQU5EX0RPU18gICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9CT1JMQU5EQ18gICAgICAgICAgICAgICAgKQkvL3wgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXykKLSNkZWZpbmUgX0RFVl9LRUlMX0M1MVhfICAgICAgICAgKF9ERVZfQklUOF8gIHwgX0RFVl9LRUlMOF8gICAgIHwgX0RFVl9CSUdFTkRfIHwgX0RFVl9DT01NQV9FWFRfKQkvLyBhdCBsZWFzdCBDNTEgdmVyc2lvbiA3LjA1IHN1cHBvcnRzIGNvbW1hIGV4dGVuc2lvbgotI2RlZmluZSBfREVWX0tFSUxfQzE2WF8gICAgICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX0tFSUwxNl8gICAgICAgICAgICAgICAgICAgfCBfREVWX0NPTU1BX0VYVF8pCS8vIGF0IGxlYXN0IEMxNjYgdmVyc2lvbiA1LjAzIHN1cHBvcnRzIGNvbW1hIGV4dGVuc2lvbgotI2RlZmluZSBfREVWX1RBU0tJTkdfQzUxWF8gICAgICAoX0RFVl9CSVQ4XyAgfCBfREVWX1RBU0tJTkc4XyAgfCBfREVWX0JJR0VORF8pCi0jZGVmaW5lIF9ERVZfVEFTS0lOR19DMTZYXyAgICAgIChfREVWX0JJVDE2XyB8IF9ERVZfVEFTS0lORzE2XyAgICAgICAgICAgICAgICkKLSNkZWZpbmUgX0RFVl9GVUpJVFNVX0Y1OTBfICAgICAgKF9ERVZfQklUOF8gIHwgX0RFVl9GVUpJVFNVXyAgICAgICAgICAgICAgICAgIHwgX0RFVl9DT01NQV9FWFRfKQkvLyBzb2Z0dW5lIGlzIG5vdCBhYmxlIHRvIHN1cHBvcnQgNjQgYml0IHZhcmlhYmxlcyBRV09SRCAhISEKLS8vZi5qLjI5LjA0LjAzIE0xNkMga2FubiBlZmZla3RpdiBtaXQgQnl0ZXMgdW1nZWhlbgotLy8jZGVmaW5lIF9ERVZfVEFTS0lOR19NMTZDXyAgICAgIChfREVWX0JJVDE2XyB8IF9ERVZfVEFTS0lOR00xNkNfICAgICAgICAgICAgICkKLSNkZWZpbmUgX0RFVl9UQVNLSU5HX00xNkNfICAgICAgKF9ERVZfQklUOF8gIHwgX0RFVl9UQVNLSU5HTTE2Q18gICAgICAgICAgICAgKQotI2RlZmluZSBfREVWX01JVFNVQklTSElfTTE2Q18gICAoX0RFVl9CSVQ4XyAgfCBfREVWX01JVFNVQklTSElNMTZDXyAgICAgICAgICApCi0jZGVmaW5lIF9ERVZfR05VX01QQzVYNV8gICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfR05VQ19NUEM1WDV8IF9ERVZfQklHRU5EXyB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfTElOVVhfICAgICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTElOVVhfR0NDXyAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfR05VX0MxNlhfICAgICAgICAgIChfREVWX0JJVDE2XyB8IF9ERVZfR05VQ19DMTZYXyAgICAgICAgICAgICAgICkJLy98IF9ERVZfQ09NTUFfRVhUXykKLSNkZWZpbmUgX0RFVl9NQ1dfTVBDNVg1XyAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9NRVRST1dFUktTX0NXXyAgICAgICAgICAgKQkvL3wgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXykKLSNkZWZpbmUgX0RFVl9HTlVfQVJNN18gICAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9HTlVDX0FSTTdfICAgICAgICAgICAgICAgIHwgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXyB8IF9ERVZfT05MWV9JTlRfTUFJTl8pCi0jZGVmaW5lIF9ERVZfV0lOMzJfUlRYXyAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTVNWQ19SVFhfICAgICAgICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfSElHSFRFQ19YODZfICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfSElHSFRFQ19HTlVDX1g4Nl8gICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfV0lOX0NFXyAgICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTVNFVkNfICAgICAgICAgICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfS0VJTF9DQVJNXyAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfS0VJTF9BUk1fICAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfSUFSX0NBUk1fICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfSUFSX0FSTV8gICAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfUlZDVF9DQVJNXyAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfUlZDVF9BUk1fICAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8gfCBfREVWX09OTFlfSU5UX01BSU5fKQotI2RlZmluZSBfREVWX01DV19NQ0Y1WFhYXyAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01FVFJPV0VSS1NfQ1dfICAgICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0dOVV9DRjUyODJfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfQ0ZfICAgfCBfREVWX0JJR0VORF8pCi0jZGVmaW5lIF9ERVZfUEFSX0JFQ0sxWDNfICAgICAgIChfREVWX0JJVDE2XyB8IF9ERVZfUEFSQURHTV9YODYpCi0jZGVmaW5lIF9ERVZfR05VX0NGNTQ4WF8gICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfR05VQ19DRl8gICB8IF9ERVZfQklHRU5EXyB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfR05VX0kzODZfICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfR05VQ19YODZfICAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8gfCBfREVWX09OTFlfSU5UX01BSU5fKQotI2RlZmluZSBfREVWX0dOVV9UUklDT1JFXyAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfVENfICAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfIHwgX0RFVl9PTkxZX0lOVF9NQUlOXyB8IF9ERVZfQUxJR05NRU5UXzRfKQotI2RlZmluZSBfREVWX01QTEFCX0RTUElDMzNGXyAgICAoX0RFVl9CSVQxNl8gfCBfREVWX01QTEFCX0MzMF8gICAgICAgICAgICAgICApCS8vfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfR05VX01JUFNFTF8gICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfR05VQ19NSVBTMl8gICAgIHwgX0RFVl9CSUdFTkRfIHwgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXyB8IF9ERVZfT05MWV9JTlRfTUFJTl8pCi0KLSNkZWZpbmUgX0RFVl9SRU5FU0FTX00zMkNfICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9SRU5FU0FTTTMyQykKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB1c2VmdWxsIG1hY3JvcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBDSEVDS19JRl9PTkxZX0lOVF9NQUlOKCkgICAgKERFVl9TWVNURU0gJiBfREVWX09OTFlfSU5UX01BSU5fKQotI2RlZmluZSBDSEVDS19NRU1PUllfQUxJTk1FTlQoKSAgICAgKERFVl9TWVNURU0gJiBfREVWX01BU0tfQUxJR05NRU5UKQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluZXMgZm9yIHRhcmdldCBzeXN0ZW0gKFRBUkdFVF9TWVNURU0pCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIF9ET1NfICAgICAgICAgICAgICAoMTYgKyAweDEwMDAwKQotI2RlZmluZSBfV0lOMTZfICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIF9XSU4zMl8gICAgICAgICAgICAgMzIKLSNkZWZpbmUgX1dJTkNFXyAgICAgICAgICAgICgzMiArIDB4MjAwMDApCi0jZGVmaW5lIF9OT19PU18gICAgICAgICAgICAgIDAKLSNkZWZpbmUgX0xJTlVYXyAgICAgICAgICAgICAgMQotI2RlZmluZSBfUFhST1NfICAgICAgICAgICAgICAyCi0jZGVmaW5lIF9FQ09TUFJPXyAgICAgICAgICAgIDMKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgZnVuY3Rpb24gaW5saW5pbmcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OCQkvLyBlbXB0eSBkZWZpbmUKLSN1bmRlZiAgSU5MSU5FX0VOQUJMRUQJCS8vIGRpc2FibGUgYWN0dWFsIGlubGluaW5nIG9mIGZ1bmN0aW9ucwotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT05fREVGCS8vIGRpc2FibGUgaW5saW5pbmcgZm9yIGFsbCBjb21waWxlcnMgcGVyIGRlZmF1bHQKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgS2VpbCBDNTEKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZmRlZiAgX19DNTFfXwotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0tFSUxfQzUxWF8KLQotI3ByYWdtYSBERUJVRyBPQkpFQ1RFWFRFTkQKLSNwcmFnbWEgV0FSTklOR0xFVkVMKDIpCQkvLyBtYXhpbXVtIHdhcm5pbmcgbGV2ZWwKLQotI2RlZmluZSBORUFSICAgICAgICAgICAgaWRhdGEJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgIHhkYXRhCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NICAgICAgICAgICAgIGNvZGUJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDICAgICAgICAgICB4ZGF0YQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRSAgICAgICAgICAgbGFyZ2UJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNICAgICAgICAgICAgIHhkYXRhCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UICAgICAgIHJlZW50cmFudAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBHTlUgQ29tcGlsZXIgZm9yIEluZmluZW9uIEMxNngKLS8vICAtIGl0IGhhdmUgdG8gYmUgYmVmb3IgS2VpbCAoaXQgaGFzIF9fQzE2Nl9fIHRvbykKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiAgZGVmaW5lZCAoX19HTlVDX18pICYmIGRlZmluZWQgKF9fQzE2Nl9fKQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0dOVV9DMTZYXwotCi0vLyAgICAjZGVmaW5lIE5FQVIgICAgICAgICAgICBpZGF0YSAgICAgICAvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBORUFSICAgICAgICAgICAgbmVhcgkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotLy8gICAgI2RlZmluZSBGQVIgICAgICAgICAgICAgeGh1Z2UgICAgICAgLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgIGh1Z2UJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLS8vICAgICNkZWZpbmUgSFdBQ0MgICAgICAgICAgIHNkYXRhICAgICAgIC8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIEhXQUNDICAgICAgICAgICBodWdlCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0vLyAgICAjZGVmaW5lIEdFTkVSSUMgICAgICAgICB4aHVnZSAgICAgICAvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotI2RlZmluZSBHRU5FUklDICAgICAgICAgaHVnZQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0KLSNkZWZpbmUgQVNTRVJUKHApICBcCi0gICAgICAgICAgICBpZiAocCkgICAgICAgICBcCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgOyAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBlbHNlICAgICAgICAgICBcCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgUFJJTlRGMCgiQXNzZXJ0IGZhaWxlZDogIiAjcCAiIChmaWxlICVzIGxpbmUgJWQpXG4iLCBfX0ZJTEVfXywgKGludCkgX19MSU5FX18gKTsgXAotICAgICAgICAgICAgICAgIHdoaWxlICgxKTsgXAotICAgICAgICAgICAgfQotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKHApCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgS2VpbCBDMTY2Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgIGRlZmluZWQgKF9fQzE2Nl9fKQkvLyAyNC4wMS4yMDA1IHIuZC46IEtlaWwgQVJNNyBuZWVkcyBkaXJlY3RpdmUgJ2RlZmluZWQnCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfS0VJTF9DMTZYXwotCi0jcHJhZ21hIENPREUKLSNwcmFnbWEgTU9EMTY3Ci0jcHJhZ21hIE5PSU5JVAotI3ByYWdtYSBERUJVRwotI3ByYWdtYSBXQVJOSU5HTEVWRUwoMykJCS8vIG1heGltdW0gd2FybmluZyBsZXZlbAotI3ByYWdtYSBXQVJOSU5HIERJU0FCTEUgPSA0NwkvLyB3YXJuaW5nIDx1bnJlZmVyZW5jZWQgcGFyYW1ldGVyPiA9IE9GRgotI3ByYWdtYSBXQVJOSU5HIERJU0FCTEUgPSAzOAkvLyB3YXJuaW5nIDxlbXB0eSB0cmFuc2xhdGlvbiB1bml0PiA9IE9GRgotLy8gICNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gMTAyICAgICAgIC8vIHdhcm5pbmcgPGRpZmZlcmVudCBjb25zdC92b2xhdGlsZSBxdWFsaWZpZXJzPiA9IE9GRgotI3ByYWdtYSBXQVJOSU5HIERJU0FCTEUgPSAxNzQJLy8gd2FybmluZyA8dW5yZWZlcmVuY2VkICdzdGF0aWMnIGZ1bmN0aW9uPiA9IE9GRgotI3ByYWdtYSBXQVJOSU5HIERJU0FCTEUgPSAxODMJLy8gd2FybmluZyA8ZGVhZCBhc3NpZ25lbWVudCBlbGltaW5hdGVkPiA9IE9GRgotCi0jZGVmaW5lIE5FQVIgICAgICAgICAgICBpZGF0YQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIgICAgICAgICAgICAgeGh1Z2UJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLS8vICAgICNkZWZpbmUgSFdBQ0MgICAgICAgICAgIHNkYXRhICAgICAgIC8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIEhXQUNDICAgICAgICAgICBodWdlCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMgICAgICAgICB4aHVnZQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgTVBMQUIgQzMwIGZvciBkc1BJQzMzRiBzZXJpZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiAgZGVmaW5lZCAoX19DMzBfXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9NUExBQl9EU1BJQzMzRl8KLQotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0vLyAgICAjaWZuZGVmIFFXT1JECi0vLyAgICAgICAgI2RlZmluZSBRV09SRCBsb25nIGxvbmcKLS8vICAgICNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEtlaWwgQVJNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgIGRlZmluZWQgKF9fQ0FfXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9LRUlMX0NBUk1fCi0KLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBRV09SRAotI2RlZmluZSBRV09SRCBsb25nIGxvbmcKLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIFJlYWxWaWV3IEFSTSBjb21waWxhdGlvbiB0b29scyAocHJvdmlkZWQgYnkgcmVjZW50IEtlaWwgTWljcm9jb250cm9sbGVyIERldmVsb3BtZW50IEtpdHMpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgIGRlZmluZWQgKF9fQVJNQ0NfVkVSU0lPTikKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9SVkNUX0NBUk1fCi0KLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBRV09SRAotI2RlZmluZSBRV09SRCBsb25nIGxvbmcKLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwotI2RlZmluZSBBU1NFUlQoZXhwcikgICAgaWYgKCEoZXhwcikpIHtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMCAoIkFzc2VydGlvbiBmYWlsZWQ6ICIgI2V4cHIgKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKTt9Ci0jZWxzZQotI2RlZmluZSBBU1NFUlQoZXhwcikKLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEFSTSBJQVIgQyBDb21waWxlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmICBkZWZpbmVkIChfX0lDQ0FSTV9fKQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0lBUl9DQVJNXwotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCi0jZW5kaWYKLQotICAgIC8vIFdvcmthcm91bmQ6Ci0gICAgLy8gSWYgd2UgdXNlIElBUiBhbmQgd2FudCB0byBkZWJ1ZyBidXQgZG9uJ3Qgd2FudCB0byB1c2UgQy1TcHkgRGVidWdnZXIKLSAgICAvLyBhc3NlcnQoKSBkb2Vzbid0IHdvcmsgaW4gZGVidWcgbW9kZSBiZWNhdXNlIGl0IG5lZWRzIHN1cHBvcnQgZm9yIEZJTEUgZGVzY3JpcHRvcnMKLSAgICAvLyAoX0RMSUJfRklMRV9ERVNDUklQVE9SID09IDEpLgotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgQVNTRVJUKGV4cHIpICAgIGlmICghKGV4cHIpKSB7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFDRTAgKCJBc3NlcnRpb24gZmFpbGVkOiAiICNleHByICk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSk7fQotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKGV4cHIpCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLS8vICAgICAgICAjZGVmaW5lIFRSQUNFICBQUklOVEY0Ci0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgVGFza2luZyA4MDUxCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZWxpZiBkZWZpbmVkIChfQ0M1MSkKLQotI2luY2x1ZGUgPGNjNTEuaD4KLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9UQVNLSU5HX0M1MVhfCi0KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIF9kYXRhCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBfeGRhdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQyAgICAgICAgICAgX3hkYXQJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0gICAgICAgICAgICAgX3hkYXQJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQgICAgICAgX3JlZW50cmFudAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBUYXNraW5nIEMxNjdDUiBhbmQgQzE2NENJCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZWxpZiBkZWZpbmVkIChfQzE2NikKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9UQVNLSU5HX0MxNlhfCi0KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIG5lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgIGZhcgkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQyAgIC8qIHRvIGJlIGRlZmluZWQgKi8JLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotICAgIC8vIFN0ZGlvLmggaGFzIHRvIGJlIGFsd2F5IGluY2x1ZGVkIGhlcmUuIElmIHByaW50ZigpIGlzIHVzZWQgc3RkaW8uaCBkZWZpbmVzIE5VTEwKLSAgICAvLyB3aXRob3V0IGNoZWNraW5nIGlmIGl0IGlzIGFscmVhZHkgaW5jbHVkZWQuIFNvIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21waWxpbmcuCi0gICAgLy8gKHIuZC4pCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEZVSklUU1UgRkZNQy0xNkxYIE1COTA1OTAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vI2VsaWYgKGRlZmluZWQgKEY1OTApIHx8IGRlZmluZWQgKEY1NDMpIHx8IGRlZmluZWQgKEY1OTgpIHx8IGRlZmluZWQgKEY0OTUpIHx8IGRlZmluZWQgKEYzNTApKQotI2VsaWYgZGVmaW5lZChfX0NPTVBJTEVSX0ZDQzkwN19fKQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0ZVSklUU1VfRjU5MF8KLQotI2RlZmluZSBORUFSICAgIC8qIHRvIGJlIGRlZmluZWQgKi8JLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NICAgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQyAgIC8qIHRvIGJlIGRlZmluZWQgKi8JLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0gICAgLy8gc29mdHVuZSBpcyBub3QgYWJsZSB0byBzdXBwb3J0IDY0IGJpdCB2YXJpYWJsZXMgUVdPUkQgISEhCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIE1pdHN1YmlzaGkgTTE2QyBmYW1pbHkgZm9yIFRBU0tJTkcgQ29tcGlsZXIgQ00xNgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2VsaWYgZGVmaW5lZCAoX0NNMTZDKQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1RBU0tJTkdfTTE2Q18KLQotI2RlZmluZSBORUFSICAgICAgICAgICAgX25lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgIF9mYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIF9mYXJyb20JLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQyAgICAgICAgICAgX25lYXIJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQyAgICAgICAgIF9mYXIJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0JCQkJCS8vIGRvIHlvdSB1c2UgbWVtb3J5IG1vZGVsIFNNQUxMLCB0aGFuIHlvdSBoYXZlIHRvIHNldCBfZmFyCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0gICAgLy8gU3RkaW8uaCBoYXMgdG8gYmUgYWx3YXkgaW5jbHVkZWQgaGVyZS4gSWYgcHJpbnRmKCkgaXMgdXNlZCBzdGRpby5oIGRlZmluZXMgTlVMTAotICAgIC8vIHdpdGhvdXQgY2hlY2tpbmcgaWYgaXQgaXMgYWxyZWFkeSBpbmNsdWRlZC4gU28gYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXBpbGluZy4KLSAgICAvLyAoci5kLikKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jaWZuZGVmIE5ERUJVRwotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgTWl0c3ViaXNoaSBNMTZDIGZhbWlseSBmb3IgTWl0c3ViaXNoaSBDb21waWxlciBOQzMwCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gbmFtZSBOQzMwLCBhbmRlcmUgRm9ybSB3aWxsIGRlciBDb21waWxlciBuaWNodCAhIQotI2VsaWYgZGVmaW5lZCAoTkMzMCkKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9NSVRTVUJJU0hJX00xNkNfCi0KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIG5lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgIGZhcgkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQyAgICAgICAgICAgbmVhcgkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDICAgICAgICAgZmFyCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBSZW5lc2FzIE0zMkMgZmFtaWx5IGZvciBSZW5lc2FzIENvbXBpbGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgZGVmaW5lZCAoTkMzMDgpCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfUkVORVNBU19NMzJDXwotCi0jZGVmaW5lIE5FQVIgICAgICAgICAgICAgbmVhcgkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIgICAgICAgICAgICAgIGZhcgkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNICAgICAgICAgICAgICBmYXIJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8gICAgI2Vycm9yICgiUkVORVNBUyBvLmsuIikKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgQVJNNyBmYW1pbHkgd2l0aCBHTlUgY29tcGlsZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19MSU5VWF9BUk1fQVJDSF9fKQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0dOVV9BUk03XwotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBRV09SRAotI2RlZmluZSBRV09SRCBsb25nIGxvbmcJCS8vIGkuQS4gZHVyY2ggSGVyciBLdXNjaGVsCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBNb3Rvcm9sYSBQb3dlclBDIGZhbWlseSA1eDUgKDU1NS81NjUpCi0vLyAgZGVmaW5pdGlvbnMgTGludXgtUEMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQotCi0jaWYgZGVmaW5lZCAoTElOVVgpIHx8IGRlZmluZWQgKGxpbnV4KSB8fCBkZWZpbmVkIChfX2xpbnV4X18pCi0jZGVmaW5lIExJTlVYX1NZU1RFTQkJLy8gZGVmaW5lICdMSU5VWF9TWVNURU0nIHVuaWZvcm0gZm9yIGFsbCBMaW51eCBiYXNlZCBzeXN0ZW1zCi0JLy8gci5kLjogV2Ugd2lsbCBuZWVkIGFuIG90aGVyIHNvbHV0aW9uIGhlcmUhIFRoZXJlIGFyZSB0d28gc2VjdGlvbnMgaGVyZSB3aGljaCBkbyBjaGVjayB0aGUgcHJlcHJvYy1kZWZpbml0aW9uczoKLQkvLyAgICAgTElOVVggYW5kIF9fbGludXhfXyAuIFRoZSBmaXJzdCBvbmUgd2FzIExpbnV4IGZvciBQQywgdGhlIHNlY29uZCBvbmUgaXMgdGhpcyBzZWN0aW9uIGZvciBlbWJlZGRlZCBMaW51eCAoTUNGNXh4eCkuCi0JLy8gICAgIEJ1dCBMaW51eCBmb3IgUEMgZG9lcyBub3QgbmVlZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGVtYmVkZGVkIExpbnV4LgotI2VuZGlmCi0KLSAgICAvLyBHTlUgQyBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBpbmxpbmluZwotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT05fREVGIGV4dGVybiBpbmxpbmUKLQotICAgIC8vIHRvIGFjdHVhbGx5IGVuYWJsZSBpbmxpbmluZyBqdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyB0aHJlZSBsaW5lcwotICAgIC8vICN1bmRlZiBJTkxJTkVfRlVOQ1RJT04KLSAgICAvLyAjZGVmaW5lIElOTElORV9GVU5DVElPTiAgICAgSU5MSU5FX0ZVTkNUSU9OX0RFRgotICAgIC8vICNkZWZpbmUgSU5MSU5FX0VOQUJMRUQgICAgICBUUlVFCi0KLSNpZmRlZiBQWFJPUwotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgIF9QWFJPU18KLSNpZmRlZiBfX2kzODZfXwotI3VuZGVmIExJTlVYCQkJLy8gdGhpcyBkZWZpbmUgc2VlbXMgdG8gYmUgc2V0IGZyb20gY29tcGlsZXIKLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfSElHSFRFQ19YODZfCi0jZWxpZiBkZWZpbmVkIChfX3RyaWNvcmVfXykKLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfR05VX1RSSUNPUkVfCi0jZWxzZSAvLyBNUEM1eDUKLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfR05VX01QQzVYNV8KLSNlbmRpZgotCi0jZWxpZiBkZWZpbmVkIChMSU5VWCkgfHwgZGVmaW5lZCAoX19saW51eF9fKQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgIF9MSU5VWF8JLy8gTGludXggZGVmaW5pdGlvbgotI2RlZmluZSBERVZfU1lTVEVNICAgICAgICAgIF9ERVZfTElOVVhfCi0KLSNlbGlmIGRlZmluZWQgKEdOVV9DRjUyODIpCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICAgICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgICAgIF9ERVZfR05VX0NGNTI4Ml8KLQotI2VsaWYgZGVmaW5lZCAoRUNPU1BST19JMzg2X1BFQUtfUENJKQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgIF9FQ09TUFJPXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgICAgIF9ERVZfR05VX0kzODZfCi0KLSNlbGlmIGRlZmluZWQgKEdOVV9DRjU0OFgpCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICAgICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgICAgIF9ERVZfR05VX0NGNTQ4WF8KLSNlbHNlCi0jZXJyb3IgJ0VSUk9SOiBERVZfU1lTVEVNIG5vdCBmb3VuZCEnCi0jZW5kaWYKLQotI2lmbmRlZiBRV09SRAotI2RlZmluZSBRV09SRCBsb25nIGxvbmcgaW50Ci0jZW5kaWYKLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9QWFJPU18pCi0KLSNpZm5kZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPHN0cmluZy5oPgotI2VuZGlmCi0KLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NICAgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCSAgICAvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCSAgICAvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkgICAgLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBRV09SRAotI2RlZmluZSBRV09SRCBsb25nIGxvbmcgaW50Ci0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBHTlVDIGZvciBJMzg2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgfHwgKFRBUkdFVF9TWVNURU0gPT0gX0VDT1NQUk9fKQotCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwogCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZWxzZQogI2RlZmluZSBUUkFDRSAgcHJpbnRrCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCiAKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gR05VIHdpdGhvdXQgT1MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTk9fT1NfKQotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotLy8gICAgICAgICAgICAjaW5jbHVkZSAieHVhcnRkcnYuaCIKLS8vICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgICAgICAvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotLy8gICAgICAgICAgICAjZGVmaW5lIFRSQUNFICBtcHJpbnRmCi0vLyAgICAgICAgICAgICNpZm5kZWYgVFJBQ0UKLS8vICAgICAgICAgICAgICAgICNkZWZpbmUgVFJBQ0UgdHJhY2UKLS8vICAgICAgICAgICAgICAgIHZvaWQgdHJhY2UgKGNoYXIgKmZtdCwgLi4uKTsKLS8vICAgICAgICAgICAgI2VuZGlmCi0jZW5kaWYKLQotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIE1QQzU2NQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmIF9fTVdFUktTX18KLQotI2lmZGVmIF9fTUM2OEtfXwotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gPSBfTUNGNTQ4WF8KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTUNXX01DRjVYWFhfCi0KLSNlbHNlCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gPSBfTVBDNTY1XwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9NQ1dfTVBDNVg1XwotI2VuZGlmCi0KLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEJFQ0sgMXgzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgZGVmaW5lZCAoX19CT1JMQU5EQ19fKSAmJiBkZWZpbmVkIChfX1BBUkFESUdNX18pCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgIF9ERVZfUEFSX0JFQ0sxWDNfCi0KLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkgICAgIC8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLSAgICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkgICAgIC8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJICAgICAvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLSNkZWZpbmUgTkVBUiBfX25lYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgX19mYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgTEFSR0UKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaWZuZGVmIFRSQUNFCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNkZWZpbmUgVFJBQ0UgcHJpbnRmCi0jZW5kaWYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBQQwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2VsaWYgZGVmaW5lZCAoX19CT1JMQU5EQ19fKQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluaXRpb24gdGFyZ2V0IHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfV0lOMzJfCS8vIFdJTjMyIGRlZmluaXRpb24KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfV0lOMzJfCi0jZWxzZQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX0RPU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfQk9STEFORF9ET1NfCi0jZW5kaWYKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBXSU4zMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0KLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotCS8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0JLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNpZm5kZWYgTkVBUgotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIEZBUgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0KLSNpZm5kZWYgQ09OU1QKLSNkZWZpbmUgQ09OU1QgY29uc3QJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2VuZGlmCi0KLSNkZWZpbmUgTEFSR0UKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDIF9fc3RkY2FsbAotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIFRSQUNFIHByaW50ZgotI2VuZGlmCi0jZW5kaWYKLQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0RPU18pCi0KLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotCS8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0JLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0jZGVmaW5lIE5FQVIgbmVhcgkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICBmYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgTEFSR0UKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaWZuZGVmIFRSQUNFCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNkZWZpbmUgVFJBQ0UgcHJpbnRmCi0jZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYKLQotI2VsaWYgKF9NU0NfVkVSID09IDgwMCkJCS8vIFBDIE1TIFZpc3VhbCBDL0MrKyBmb3IgRE9TIGFwcGxpY2F0aW9ucwotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfRE9TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9NU1ZDX0RPU18KLQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCSAgICAvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgbmVhcgkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkgICAgLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkgICAgLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0jZGVmaW5lIE5FQVIgbmVhcgkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICBmYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgTEFSR0UKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaWZuZGVmIFRSQUNFCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNkZWZpbmUgVFJBQ0UgcHJpbnRmCi0jZW5kaWYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVmaW5pdGlvbnMgZm9yIFJUWCB1bmRlciBXSU4zMgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmIChkZWZpbmVkIChVTkRFUl9SVFNTKSAmJiBkZWZpbmVkIChXSU4zMikpCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gZGVmaW5pdGlvbiB0YXJnZXQgc3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfV0lOMzJfUlRYXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9XSU4zMl9SVFhfCi0KLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkgICAgLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkgICAgLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNpZm5kZWYgTkVBUgotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIEZBUgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0KLSNpZm5kZWYgQ09OU1QKLSNkZWZpbmUgQ09OU1QgY29uc3QJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2VuZGlmCi0KLSNkZWZpbmUgTEFSR0UKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDIF9fc3RkY2FsbAotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2RlZmluZSBUUkFDRSBSdFByaW50ZgotI2VuZGlmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlZmluaXRpb25zIGZvciBXaW5DRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmIGRlZmluZWQgKF9XSU4zMl9XQ0UpCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gZGVmaW5pdGlvbiB0YXJnZXQgc3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICAgICAgICAgIF9XSU5DRV8KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICAgICAgX0RFVl9XSU5fQ0VfCi0KLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkgICAgLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkgICAgLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNpZm5kZWYgTkVBUgotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIEZBUgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0KLSNpZm5kZWYgQ09OU1QKLSNkZWZpbmUgQ09OU1QgY29uc3QJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2VuZGlmCi0KLSNkZWZpbmUgTEFSR0UKLQotI2lmbmRlZiBRV09SRAotICAgICAgLy8jZGVmaW5lIFFXT1JEIGxvbmcgbG9uZyBpbnQgLy8gTVNWQyAuTkVUIGNhbiB1c2UgImxvbmcgbG9uZyBpbnQiIHRvbyAobGlrZSBHTlUpCi0jZGVmaW5lIFFXT1JEIF9faW50NjQKLSNlbmRpZgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMgX19jZGVjbAotCi0jaWZkZWYgQVNTRVJUTVNHCi0jdW5kZWYgQVNTRVJUTVNHCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNkZWZpbmUgVFJBQ0UgcHJpbnRmCi0vLyAgICAgICAgICAgIHZvaWQgdHJhY2UgKGNoYXIgKmZtdCwgLi4uKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNlbHNlIC8vID09PT4gUEMgTVMgVmlzdWFsIEMvQysrCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gZGVmaW5pdGlvbiB0YXJnZXQgc3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZmRlZiBfV0lOMzIKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9XSU4zMl8JLy8gV0lOMzIgZGVmaW5pdGlvbgotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9XSU4zMl8KLSNlbHNlCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfV0lOMTZfCS8vIFdJTjE2IGRlZmluaXRpb24KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfV0lOMTZfCi0jZW5kaWYKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBXSU4xNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4xNl8pCi0KLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotCS8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0JLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNpZm5kZWYgTkVBUgotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIEZBUgotI2RlZmluZSBGQVIgZmFyCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQyBfZmFyIF9wYXNjYWwgX2V4cG9ydAotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2RlZmluZSBUUkFDRSB0cmFjZQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCXZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm10LCAuLi4pOwotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gV0lOMzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0by8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLSNpZm5kZWYgRkFSCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLSNpZm5kZWYgQ09OU1QKLSNkZWZpbmUgQ09OU1QgY29uc3QJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2VuZGlmCi0jZGVmaW5lIExBUkdFCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMgX19zdGRjYWxsCi0jaWZuZGVmIFFXT1JECi0JICAvLyNkZWZpbmUgUVdPUkQgbG9uZyBsb25nIGludCAvLyBNU1ZDIC5ORVQgY2FuIHVzZSAibG9uZyBsb25nIGludCIgdG9vIChsaWtlIEdOVSkKLSNkZWZpbmUgUVdPUkQgX19pbnQ2NAotI2VuZGlmCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2RlZmluZSBUUkFDRSB0cmFjZQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCXZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm10LCAuLi4pOwotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0JLy8gTVMgVmlzdWFsIEMrKyBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBpbmxpbmluZwotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT05fREVGIF9fZm9yY2VpbmxpbmUKLQkvLyB0byBhY3R1YWxseSBlbmFibGUgaW5saW5pbmcganVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzLy8gI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYvLyAjZGVmaW5lIElOTElORV9FTkFCTEVEICAgICAgVFJVRQotI2VuZGlmCi0jZW5kaWYJCQkJLy8gPT09PiBQQwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLyAgZGVmaW5pdGlvbnMgb2YgYmFzaWMgdHlwZXMvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmbmRlZiBfV0lOREVGXwkJLy8gZGVmaW5lZCBpbiBXSU5ERUYuSCwgaW5jbHVkZWQgYnkgPHdpbmRvd3MuaD4KLSAgICAvLyAtLS0gYXJpdGhtZXRpYyB0eXBlcyAtLS0KLSNpZm5kZWYgU0hPUlQKLSNkZWZpbmUgU0hPUlQgc2hvcnQgaW50Ci0jZW5kaWYKLSNpZm5kZWYgVVNIT1JUCi0jZGVmaW5lIFVTSE9SVCB1bnNpZ25lZCBzaG9ydCBpbnQKLSNlbmRpZgotI2lmbmRlZiBJTlQKLSNkZWZpbmUgSU5UIGludAotI2VuZGlmCi0jaWZuZGVmIFVJTlQKLSNkZWZpbmUgVUlOVCB1bnNpZ25lZCBpbnQKLSNlbmRpZgotI2lmbmRlZiBMT05HCi0jZGVmaW5lIExPTkcgbG9uZyBpbnQKLSNlbmRpZgotI2lmbmRlZiBVTE9ORwotI2RlZmluZSBVTE9ORyB1bnNpZ25lZCBsb25nIGludAotI2VuZGlmCi0gICAgLy8gLS0tIGxvZ2ljIHR5cGVzIC0tLQotI2lmbmRlZiBCWVRFCi0jZGVmaW5lIEJZVEUgdW5zaWduZWQgY2hhcgotI2VuZGlmCi0jaWZuZGVmIFdPUkQKLSNkZWZpbmUgV09SRCB1bnNpZ25lZCBzaG9ydCBpbnQKLSNlbmRpZgotI2lmbmRlZiBEV09SRAotI2RlZmluZSBEV09SRCB1bnNpZ25lZCBsb25nIGludAotI2VuZGlmCisvLyAtLS0gbG9naWMgdHlwZXMgLS0tCiAjaWZuZGVmIEJPT0wKICNkZWZpbmUgQk9PTCB1bnNpZ25lZCBjaGFyCiAjZW5kaWYKLSAgICAvLyAtLS0gYWxpYXMgdHlwZXMgLS0tCisKKy8vIC0tLSBhbGlhcyB0eXBlcyAtLS0KICNpZm5kZWYgVFJVRQogI2RlZmluZSBUUlVFICAweEZGCiAjZW5kaWYKICNpZm5kZWYgRkFMU0UKICNkZWZpbmUgRkFMU0UgMHgwMAogI2VuZGlmCi0jaWZuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkKLSNlbmRpZgotI2VuZGlmCiAjaWZuZGVmIF9USU1FX09GX0RBWV9ERUZJTkVEXwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgaW50IG1fZHdNczsKQEAgLTEzNTksMTUgKzExOSw4IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWZuZGVmIEFTU0VSVAotI2lmICFkZWZpbmVkIChfX2xpbnV4X18pICYmICFkZWZpbmVkIChfX0tFUk5FTF9fKQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2lmbmRlZiBBU1NFUlQKLSNkZWZpbmUgQVNTRVJUKHApICAgIGFzc2VydChwKQotI2VuZGlmCi0jZWxzZQogI2RlZmluZSBBU1NFUlQocCkKICNlbmRpZgotI2VuZGlmCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgU1lTIFRFQyBleHRlbnNpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxEbGxrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxEbGxrLmgKaW5kZXggNTg4ZTg3MS4uYTk3OTIwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbERsbGsuaApAQCAtNzQsMTggKzc0LDEwIEBACiAjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAjaW5jbHVkZSAiLi4vRXBsRXZlbnQuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiB0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxEbGxrQ2JBc3luYykgKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JQllURSBtX2JlX2FiU3JjTWFjWzZdOworCXU4IG1fYmVfYWJTcmNNYWNbNl07CiAKIH0gdEVwbERsbGtJbml0UGFyYW07CiAKQEAgLTk2LDIyICs4OCwxOCBAQAogCXN0cnVjdCBfdEVwbERsbGtOb2RlSW5mbyAqbV9wTmV4dE5vZGVJbmZvOwogCXN0cnVjdCBfdEVkcnZUeEJ1ZmZlciAqbV9wUHJlcVR4QnVmZmVyOwogCXVuc2lnbmVkIGludCBtX3VpTm9kZUlkOwotCURXT1JEIG1fZHdQcmVzVGltZW91dDsKKwl1MzIgbV9kd1ByZXNUaW1lb3V0OwogCXVuc2lnbmVkIGxvbmcgbV91bERsbEVycm9yRXZlbnRzOwogCXRFcGxObXRTdGF0ZSBtX05tdFN0YXRlOwotCVdPUkQgbV93UHJlc1BheWxvYWRMaW1pdDsKLQlCWVRFIG1fYmVfYWJNYWNBZGRyWzZdOwotCUJZVEUgbV9iU29hRmxhZzE7CisJdTE2IG1fd1ByZXNQYXlsb2FkTGltaXQ7CisJdTggbV9iZV9hYk1hY0FkZHJbNl07CisJdTggbV9iU29hRmxhZzE7CiAJQk9PTCBtX2ZTb2Z0RGVsZXRlOwkvLyBkZWxldGUgbm9kZSBhZnRlciBlcnJvciBhbmQgaWdub3JlIGVycm9yCiAKIH07CiAKIHR5cGVkZWYgc3RydWN0IF90RXBsRGxsa05vZGVJbmZvIHRFcGxEbGxrTm9kZUluZm87CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX0RMTEspKSAhPSAwKQogCiB0RXBsS2VybmVsIEVwbERsbGtBZGRJbnN0YW5jZSh0RXBsRGxsa0luaXRQYXJhbSAqIHBJbml0UGFyYW1fcCk7CkBAIC0xNTQsNyArMTQyLDcgQEAKIAogdEVwbEtlcm5lbCBFcGxEbGxrU29mdERlbGV0ZU5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3ApOwogCi10RXBsS2VybmVsIEVwbERsbGtTZXRGbGFnMU9mTm9kZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgQllURSBiU29hRmxhZzFfcCk7Cit0RXBsS2VybmVsIEVwbERsbGtTZXRGbGFnMU9mTm9kZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgdTggYlNvYUZsYWcxX3ApOwogCiB0RXBsS2VybmVsIEVwbERsbGtHZXRGaXJzdE5vZGVJbmZvKHRFcGxEbGxrTm9kZUluZm8gKiogcHBOb2RlSW5mb19wKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsa0NhbC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsa0NhbC5oCmluZGV4IDZjNGRjN2UuLmRkZWMxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbERsbGtDYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxEbGxrQ2FsLmgKQEAgLTc0LDE0ICs3NCw2IEBACiAjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAjaW5jbHVkZSAiLi4vRXBsRXZlbnQuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBtX3VsQ3VyVHhGcmFtZUNvdW50R2VuOwogCXVuc2lnbmVkIGxvbmcgbV91bEN1clR4RnJhbWVDb3VudE5tdDsKQEAgLTkyLDEwICs4NCw2IEBACiAKIH0gdEVwbERsbGtDYWxTdGF0aXN0aWNzOwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9ETExLKSkgIT0gMCkKIAogdEVwbEtlcm5lbCBFcGxEbGxrQ2FsQWRkSW5zdGFuY2Uodm9pZCk7CkBAIC0xMjQsNyArMTEyLDcgQEAKIHRFcGxLZXJuZWwgRXBsRGxsa0NhbEFzeW5jQ2xlYXJRdWV1ZXModm9pZCk7CiAKIHRFcGxLZXJuZWwgRXBsRGxsa0NhbElzc3VlUmVxdWVzdCh0RXBsRGxsUmVxU2VydmljZUlkIFNlcnZpY2VfcCwKLQkJCQkgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKTsKKwkJCQkgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCB1OCBiU29hRmxhZzFfcCk7CiAKIHRFcGxLZXJuZWwgRXBsRGxsa0NhbEFzeW5jR2V0U29hUmVxdWVzdCh0RXBsRGxsUmVxU2VydmljZUlkICogcFJlcVNlcnZpY2VJZF9wLAogCQkJCQl1bnNpZ25lZCBpbnQgKnB1aU5vZGVJZF9wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbEVycm9ySGFuZGxlcmsuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbEVycm9ySGFuZGxlcmsuaAppbmRleCA0YTY3ZWY4Li4xODViNTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFcnJvckhhbmRsZXJrLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRXJyb3JIYW5kbGVyay5oCkBAIC03MywyOCArNzMsMTYgQEAKIAogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIC8vIGluaXQgZnVuY3Rpb24KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEVycm9ySGFuZGxlcmtJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrSW5pdCh2b2lkKTsKIAogLy8gYWRkIGluc3RhbmNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFcnJvckhhbmRsZXJrQWRkSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbEVycm9ySGFuZGxlcmtBZGRJbnN0YW5jZSh2b2lkKTsKIAogLy8gZGVsZXRlIGluc3RhbmNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbEVycm9ySGFuZGxlcmtEZWxJbnN0YW5jZSh2b2lkKTsKIAogLy8gcHJvY2Vzc2VzIGVycm9yIGV2ZW50cwotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrUHJvY2Vzcyh0RXBsRXZlbnQgKnBFdmVudF9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTF9FUlJPUkhBTkRMRVJLX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFdmVudGsuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbEV2ZW50ay5oCmluZGV4IDFkMjVhYWEuLjBjMmE2MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbEV2ZW50ay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbEV2ZW50ay5oCkBAIC03MywzNiArNzMsMjQgQEAKIAogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIC8vIGluaXQgZnVuY3Rpb24KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a0luaXQodEVwbFN5bmNDYiBmcFN5bmNDYik7Cit0RXBsS2VybmVsIEVwbEV2ZW50a0luaXQodEVwbFN5bmNDYiBmcFN5bmNDYik7CiAKIC8vIGFkZCBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnRrQWRkSW5zdGFuY2UodEVwbFN5bmNDYiBmcFN5bmNDYik7Cit0RXBsS2VybmVsIEVwbEV2ZW50a0FkZEluc3RhbmNlKHRFcGxTeW5jQ2IgZnBTeW5jQ2IpOwogCiAvLyBkZWxldGUgaW5zdGFuY2UKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a0RlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxFdmVudGtEZWxJbnN0YW5jZSh2b2lkKTsKIAogLy8gS2VybmVsdGhyZWFkIHRoYXQgZGlzcGF0Y2hlcyBldmVudHMgaW4ga2VybmVsc3BhY2UKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxFdmVudGtQcm9jZXNzKHRFcGxFdmVudCAqcEV2ZW50X3ApOwogCiAvLyBwb3N0IGV2ZW50cyBmcm9tIGtlcm5lbHNwYWNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnRrUG9zdCh0RXBsRXZlbnQgKnBFdmVudF9wKTsKIAogLy8gcG9zdCBlcnJvcmV2ZW50cyBmcm9tIGtlcm5lbHNwYWNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCi0JCQkJICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCk7Cit0RXBsS2VybmVsIEVwbEV2ZW50a1Bvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKKwkJCSAgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTF9FVkVOVEtfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGsuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGsuaAppbmRleCA1MzQwOWNjLi41ZGM4YTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxObXRrLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsTm10ay5oCkBAIC03NCwzMSArNzQsMTYgQEAKICNpbmNsdWRlICIuLi9FcGxObXQuaCIKICNpbmNsdWRlICJFcGxFdmVudGsuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1USykpICE9IDApCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10a0luaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpOwordEVwbEtlcm5lbCBFcGxObXRrSW5pdChFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUik7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsTm10a0FkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKK3RFcGxLZXJuZWwgRXBsTm10a0FkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxObXRrRGVsSW5zdGFuY2UoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpOwordEVwbEtlcm5lbCBFcGxObXRrRGVsSW5zdGFuY2UoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10a1Byb2Nlc3MoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgIHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsTm10a1Byb2Nlc3MoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfIHRFcGxFdmVudCAqcEV2ZW50X3ApOwogCi1FUExETExFWFBPUlQgdEVwbE5tdFN0YXRlIFBVQkxJQwotRXBsTm10a0dldE5tdFN0YXRlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKK3RFcGxObXRTdGF0ZSBFcGxObXRrR2V0Tm10U3RhdGUoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpOwogCiAjZW5kaWYgLy8gI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRLKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsTm10a0NhbC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsTm10a0NhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWRlYWZjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGtDYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5Ci0gICAgICB3d3cuc3lzdGVjLWVsZWN0cm9uaWMuY29tCi0KLSAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCi0KLSAgRGVzY3JpcHRpb246ICBpbmNsdWRlIGZpbGUgZm9yIGNvbW11bmljYXRpb24gYWJzdHJhY3Rpb24gbGF5ZXIgb2YgdGhlCi0gICAgICAgICAgICAgICAgTk1ULUtlcm5lbC1Nb2R1bGUKLQotICBMaWNlbnNlOgotCi0gICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gICAgYXJlIG1ldDoKLQotICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU1lTVEVDIGVsZWN0cm9uaWMgR21iSCBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSAgICAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBpbmZvQHN5c3RlYy1lbGVjdHJvbmljLmNvbS4KLQotICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAgICBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICAgIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gICAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KLSAgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotICAgIFNldmVyYWJpbGl0eSBDbGF1c2U6Ci0KLSAgICAgICAgSWYgYSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIG9yIGJlY29tZXMgaWxsZWdhbCwgaW52YWxpZCBvcgotICAgICAgICB1bmVuZm9yY2VhYmxlIGluIGFueSBqdXJpc2RpY3Rpb24sIHRoYXQgc2hhbGwgbm90IGFmZmVjdDoKLSAgICAgICAgMS4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIHRoYXQganVyaXNkaWN0aW9uIG9mIGFueSBvdGhlcgotICAgICAgICAgICBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlOyBvcgotICAgICAgICAyLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gb3RoZXIganVyaXNkaWN0aW9ucyBvZiB0aGF0IG9yCi0gICAgICAgICAgIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLgotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICAgICAgICAgICAgICRSQ1NmaWxlOiBFcGxObXRrQ2FsLmgsdiAkCi0KLSAgICAgICAgICAgICAgICAkQXV0aG9yOiBELktydWVnZXIgJAotCi0gICAgICAgICAgICAgICAgJFJldmlzaW9uOiAxLjMgJCAgJERhdGU6IDIwMDgvMDQvMTcgMjE6MzY6MzIgJAotCi0gICAgICAgICAgICAgICAgJFN0YXRlOiBFeHAgJAotCi0gICAgICAgICAgICAgICAgQnVpbGQgRW52aXJvbm1lbnQ6Ci0gICAgICAgICAgICAgICAgS0VJTCB1VmlzaW9uIDIKLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgUmV2aXNpb24gSGlzdG9yeToKLQotICAyMDA2LzA2LzE2IC1rLnQuOiAgIHN0YXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAiRXBsTm10ay5oIgotCi0jaWZuZGVmIF9FUExOTVRLQ0FMX0hfCi0jZGVmaW5lIF9FUExOTVRLQ0FMX0hfCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbmRpZiAvLyAjaWZuZGVmIF9FUExOTVRLQ0FMX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrLmgKaW5kZXggY2Y5ZjU4My4uNzhjNGQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsT2Jkay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE9iZGsuaApAQCAtNjgsMTI4ICs2OCw4OCBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsT2JkLmgiCi0KICNpZm5kZWYgX0VQTE9CREtfSF8KICNkZWZpbmUgX0VQTE9CREtfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsT2JkLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZXh0ZXJuIHU4IGFiRXBsT2JkVHJhc2hPYmplY3RfZ1s4XTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGdsb2JhbCB2YXJpYWJsZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWV4dGVybiBCWVRFIE1FTSBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9PQkRLKSkgIT0gMCkKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgdEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmRJbml0KEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRBZGRJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSB0RXBsT2JkSW5pdFBhcmFtIE1FTSAqCi0JCQkJCQkgcEluaXRQYXJhbV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkQWRkSW5zdGFuY2UoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfIHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZERlbGV0ZUluc3RhbmNlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIpOwordEVwbEtlcm5lbCBFcGxPYmREZWxldGVJbnN0YW5jZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQl2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJdEVwbE9iZFNpemUgU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkgICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkUmVhZEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmRSZWFkRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkgICB2b2lkICpwRHN0RGF0YV9wLCB0RXBsT2JkU2l6ZSAqcFNpemVfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxPYmRTZXRTdG9yZUxvYWRPYmpDYWxsYmFjayhFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJICAgICAgdEVwbE9iZFN0b3JlTG9hZE9iakNhbGxiYWNrIGZwQ2FsbGJhY2tfcCk7Cit0RXBsS2VybmVsIEVwbE9iZFNldFN0b3JlTG9hZE9iakNhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRBY2Nlc3NPZFBhcnQoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgdEVwbE9iZFBhcnQgT2JkUGFydF9wLAotCQkJCQkJICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkQWNjZXNzT2RQYXJ0KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwKKwkJCSAgICAgIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmREZWZpbmVWYXIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICAgICAgIHRFcGxWYXJQYXJhbSBNRU0gKiBwVmFyUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbE9iZERlZmluZVZhcihFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsVmFyUGFyYW0gKnBWYXJQYXJhbV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCAqUFVCTElDIEVwbE9iZEdldE9iamVjdERhdGFQdHIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwordm9pZCAqRXBsT2JkR2V0T2JqZWN0RGF0YVB0cihFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFJlZ2lzdGVyVXNlck9kKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICAgdEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCk7Cit0RXBsS2VybmVsIEVwbE9iZFJlZ2lzdGVyVXNlck9kKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB2b2lkIFBVQkxJQyBFcGxPYmRJbml0VmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiBwVmFyRW50cnlfcCwKLQkJCQkJICAgIHRFcGxPYmRUeXBlIFR5cGVfcCwKLQkJCQkJICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7Cit2b2lkIEVwbE9iZEluaXRWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkVmFyRW50cnkgKnBWYXJFbnRyeV9wLAorCQkJdEVwbE9iZFR5cGUgVHlwZV9wLCB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsT2JkU2l6ZSBQVUJMSUMgRXBsT2JkR2V0RGF0YVNpemUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7Cit0RXBsT2JkU2l6ZSBFcGxPYmRHZXREYXRhU2l6ZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHVuc2lnbmVkIGludCBQVUJMSUMgRXBsT2JkR2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIpOwordW5zaWduZWQgaW50IEVwbE9iZEdldE5vZGVJZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkU2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgICAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZFNldE5vZGVJZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZElzTnVtZXJpY2FsKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJIEJPT0wgKiBwZkVudHJ5TnVtZXJpY2FsKTsKK3RFcGxLZXJuZWwgRXBsT2JkSXNOdW1lcmljYWwoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwgQk9PTCAqcGZFbnRyeU51bWVyaWNhbCk7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRXcml0ZUVudHJ5RnJvbUxlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkgICAgICB0RXBsT2JkU2l6ZSBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmRXcml0ZUVudHJ5RnJvbUxlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgdm9pZCAqcFNyY0RhdGFfcCwKKwkJCQkgIHRFcGxPYmRTaXplIFNpemVfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFJlYWRFbnRyeVRvTGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCSAgIHRFcGxPYmRTaXplICogcFNpemVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZFJlYWRFbnRyeVRvTGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCisJCQkgICAgICAgdEVwbE9iZFNpemUgKnBTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRHZXRBY2Nlc3NUeXBlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgIHRFcGxPYmRBY2Nlc3MgKgotCQkJCQkJICAgcEFjY2Vzc1R5cF9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkR2V0QWNjZXNzVHlwZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkgICAgICAgdEVwbE9iZEFjY2VzcyAqcEFjY2Vzc1R5cF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJCQkgICAgdEVwbE9iZFZhckVudHJ5IE1FTSAqKgotCQkJCQkJICAgIHBwVmFyRW50cnlfcCk7Cit0RXBsS2VybmVsIEVwbE9iZFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQl0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApOwogCiAjZW5kaWYgLy8gZW5kIG9mICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfT0JESykpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE9iZGtDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE9iZGtDYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE3M2E5NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrQ2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgb3BlblBPV0VSTElOSwotCi0gIERlc2NyaXB0aW9uOiAgaW5jbHVkZSBmaWxlIGZvciBjb21tdW5pY2F0aW9uIGFic3RyYWN0aW9uIGxheWVyCi0gICAgICAgICAgICAgICAgZm9yIHRoZSBFcGwtT2JkLUtlcm5lbHNwYWNlLU1vZHVsCi0KLSAgTGljZW5zZToKLQotICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICAgIGFyZSBtZXQ6Ci0KLSAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAgICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgotCi0gICAgICAgIElmIGEgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBvciBiZWNvbWVzIGlsbGVnYWwsIGludmFsaWQgb3IKLSAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6Ci0gICAgICAgIDEuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiB0aGF0IGp1cmlzZGljdGlvbiBvZiBhbnkgb3RoZXIKLSAgICAgICAgICAgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZTsgb3IKLSAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgotICAgICAgICAgICBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZS4KLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgICAgICAgICAkUkNTZmlsZTogRXBsT2Jka0NhbC5oLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS40ICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgICAgICBHQ0MgVjMuNAotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBSZXZpc2lvbiBIaXN0b3J5OgotCi0gIDIwMDYvMDYvMTkgay50LjogICBzdGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgotCi0jaWZuZGVmIF9FUExPQkRLQ0FMX0hfCi0jZGVmaW5lIF9FUExPQkRLQ0FMX0hfCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbmRpZiAvLyAjaWZuZGVmIF9FUExPQkRLQ0FMX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rLmgKaW5kZXggYjViMThmNC4uMjRiZmMzZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFBkb2suaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rLmgKQEAgLTc1LDE4ICs3NSw2IEBACiAjaW5jbHVkZSAiLi4vRXBsRXZlbnQuaCIKICNpbmNsdWRlICIuLi9FcGxEbGwuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogLy8gcHJvY2VzcyBldmVudHMgZnJvbSBxdWV1ZSAoUERPcy9mcmFtZXMgYW5kIFNvQSBmb3Igc3luY2hyb25pemF0aW9uKQogdEVwbEtlcm5lbCBFcGxQZG9rUHJvY2Vzcyh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFBkb2tDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFBkb2tDYWwuaAppbmRleCA2YTE4M2ViLi44YTMxZWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rQ2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRva0NhbC5oCkBAIC03MiwxOSArNzIsNiBAQAogI2RlZmluZSBfRVBMX1BET0tDQUxfSF8KIAogI2luY2x1ZGUgIi4uL0VwbEluYy5oIgotLy8jaW5jbHVkZSAiRXBsUGRvLmgiCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRFcGxLZXJuZWwgRXBsUGRva0NhbEFkZEluc3RhbmNlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxUaW1lckhpZ2hSZXNrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxUaW1lckhpZ2hSZXNrLmgKaW5kZXggZDVkMDQ2ZC4uYTIxMjRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsVGltZXJIaWdoUmVzay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVySGlnaFJlc2suaApAQCAtNjgsNDIgKzY4LDI5IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxUaW1lci5oIgotCiAjaWZuZGVmIF9FUExUSU1FUkhJR0hSRVNLX0hfCiAjZGVmaW5lIF9FUExUSU1FUkhJR0hSRVNLX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbFRpbWVyLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrSW5pdCh2b2lkKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tBZGRJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJIaWdoUmVza0luaXQodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJIaWdoUmVza0FkZEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrU2V0VGltZXJOcyh0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGxUaW1lTnNfcCwKKwkJCQkgICAgICB0RXBsVGltZXJrQ2FsbGJhY2sgcGZuQ2FsbGJhY2tfcCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsQXJndW1lbnRfcCwKKwkJCQkgICAgICBCT09MIGZDb250aW51b3VzbHlfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJIaWdoUmVza01vZGlmeVRpbWVyTnModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGxUaW1lTnNfcCwKKwkJCQkJIHRFcGxUaW1lcmtDYWxsYmFjayBwZm5DYWxsYmFja19wLAorCQkJCQkgdW5zaWduZWQgbG9uZyB1bEFyZ3VtZW50X3AsCisJCQkJCSBCT09MIGZDb250aW51b3VzbHlfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tTZXRUaW1lck5zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGxUaW1lTnNfcCwKLQkJCQkJICAgICB0RXBsVGltZXJrQ2FsbGJhY2sgcGZuQ2FsbGJhY2tfcCwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHVsQXJndW1lbnRfcCwKLQkJCQkJICAgICBCT09MIGZDb250aW51b3VzbHlfcCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tNb2RpZnlUaW1lck5zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCQkJdW5zaWduZWQgbG9uZyBsb25nIHVsbFRpbWVOc19wLAotCQkJCQkJdEVwbFRpbWVya0NhbGxiYWNrCi0JCQkJCQlwZm5DYWxsYmFja19wLAotCQkJCQkJdW5zaWduZWQgbG9uZyB1bEFyZ3VtZW50X3AsCi0JCQkJCQlCT09MIGZDb250aW51b3VzbHlfcCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCk7Cit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTFRJTUVSSElHSFJFU0tfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVyay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsVGltZXJrLmgKaW5kZXggOTE2MGU3Mi4uNDdjNWY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsVGltZXJrLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsVGltZXJrLmgKQEAgLTY4LDE5ICs2OCwxNiBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsVGltZXIuaCIKLSNpbmNsdWRlICIuLi91c2VyL0VwbEV2ZW50dS5oIgotCiAjaWZuZGVmIF9FUExUSU1FUktfSF8KICNkZWZpbmUgX0VQTFRJTUVSS19IXwogCisjaW5jbHVkZSAiLi4vRXBsVGltZXIuaCIKKyNpbmNsdWRlICIuLi91c2VyL0VwbEV2ZW50dS5oIgorCiAjaWYgRVBMX1RJTUVSX1VTRV9VU0VSICE9IEZBTFNFCiAjaW5jbHVkZSAiLi4vdXNlci9FcGxUaW1lcnUuaCIKICNlbmRpZgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmIEVQTF9USU1FUl9VU0VfVVNFUiAhPSBGQUxTRQogI2RlZmluZSBFcGxUaW1lcmtJbml0ICAgICAgICAgICBFcGxUaW1lcnVJbml0CkBAIC05MSwyOCArODgsMjEgQEAKICNkZWZpbmUgRXBsVGltZXJrRGVsZXRlVGltZXIgICAgRXBsVGltZXJ1RGVsZXRlVGltZXIKICNlbmRpZgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgRVBMX1RJTUVSX1VTRV9VU0VSID09IEZBTFNFCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcmtJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lcmtJbml0KHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcmtBZGRJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrQWRkSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVya0RlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lcmtEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJrU2V0VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAotCQkJCSAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrU2V0VGltZXJNcyh0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCisJCQkgICAgICAgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcmtNb2RpZnlUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCQkgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkJIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrTW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wLAorCQkJCSAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKKwkJCQkgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApOwordEVwbEtlcm5lbCBFcGxUaW1lcmtEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wKTsKICNlbmRpZgogI2VuZGlmIC8vICNpZm5kZWYgX0VQTFRJTUVSS19IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvVmlydHVhbEV0aGVybmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9WaXJ0dWFsRXRoZXJuZXQuaAppbmRleCBkZWZmODcyLi40YTQyY2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9WaXJ0dWFsRXRoZXJuZXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9WaXJ0dWFsRXRoZXJuZXQuaApAQCAtNzMsMjMgKzczLDExIEBACiAKICNpbmNsdWRlICJFcGxEbGxrLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfVkVUSCkpICE9IDApCiAKLXRFcGxLZXJuZWwgUFVCTElDIFZFdGhBZGRJbnN0YW5jZSh0RXBsRGxsa0luaXRQYXJhbSAqIHBJbml0UGFyYW1fcCk7Cit0RXBsS2VybmVsIFZFdGhBZGRJbnN0YW5jZSh0RXBsRGxsa0luaXRQYXJhbSAqcEluaXRQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgVkV0aERlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBWRXRoRGVsSW5zdGFuY2Uodm9pZCk7CiAKICNlbmRpZiAvLyAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1ZFVEgpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3Byb2NfZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvcHJvY19mcy5jCmluZGV4IGY0OTEwMzMuLjljY2YwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvcHJvY19mcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvcHJvY19mcy5jCkBAIC04Myw3ICs4Myw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC05NSw2ICs5NCw4IEBACiAjaW5jbHVkZSAiZmVjLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgInByb2NfZnMuaCIKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTI5LDggKzEzMCw4IEBACiAKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KIGF0b21pY190IGFhdG1EYmdUcmFjZVBvaW50X2xbREJHX1RSQUNFX1BPSU5UU107Ci1EV09SRCBhZHdEYmdUcmFjZVZhbHVlX2xbREJHX1RSQUNFX1ZBTFVFU107Ci1EV09SRCBkd0RiZ1RyYWNlVmFsdWVPbGRfbDsKK3UzMiBhZHdEYmdUcmFjZVZhbHVlX2xbREJHX1RSQUNFX1ZBTFVFU107Cit1MzIgZHdEYmdUcmFjZVZhbHVlT2xkX2w7CiB1bnNpZ25lZCBpbnQgdWlEYmdUcmFjZVZhbHVlUG9zX2w7CiBzcGlubG9ja190IHNwaW5sb2NrRGJnVHJhY2VWYWx1ZV9sOwogdW5zaWduZWQgbG9uZyB1bERiVHJhY2VWYWx1ZUZsYWdzX2w7CkBAIC0xNDUsMTAgKzE0NiwxMCBAQAogc3RhdGljIGludCBFcGxMaW5Qcm9jV3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAogCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSk7CiAKLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKIAotRVBMRExMRVhQT1JUIERXT1JEIFBVQkxJQyBFcGxJZGVudHVHZXRSdW5uaW5nUmVxdWVzdHModm9pZCk7CitleHRlcm4gdTMyIEVwbElkZW50dUdldFJ1bm5pbmdSZXF1ZXN0cyh2b2lkKTsKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCkBAIC0xOTEsNyArMTkyLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKQordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApCiB7CiAKIAlpZiAoYlRyYWNlUG9pbnROdW1iZXJfcCA+PQpAQCAtMjA3LDcgKzIwOCw3IEBACiAKIH0KIAotdm9pZCBQVUJMSUMgVGd0RGJnUG9zdFRyYWNlVmFsdWUoRFdPUkQgZHdUcmFjZVZhbHVlX3ApCit2b2lkIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHUzMiBkd1RyYWNlVmFsdWVfcCkKIHsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzcGlubG9ja0RiZ1RyYWNlVmFsdWVfbCwgdWxEYlRyYWNlVmFsdWVGbGFnc19sKTsKQEAgLTI2Myw3ICsyNjQsNyBAQAogCS8vIC0tLS0gRVBMIHN0YXRlIC0tLS0KIAluU2l6ZSArPSBzbnByaW50ZihwY0J1ZmZlcl9wICsgblNpemUsIG5CdWZmZXJTaXplX3AgLSBuU2l6ZSwKIAkJCSAgIk5NVCBzdGF0ZTogICAgICAgICAgICAgICAgICAweCUwNFhcbiIsCi0JCQkgIChXT1JEKSBFcGxObXRrR2V0Tm10U3RhdGUoKSk7CisJCQkgICh1MTYpIEVwbE5tdGtHZXRObXRTdGF0ZSgpKTsKIAogCUVwbERsbGtDYWxHZXRTdGF0aXN0aWNzKCZwRGxsa0NhbFN0YXRzKTsKIApAQCAtMjc5LDE0ICsyODAsMTQgQEAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9NTikpICE9IDApCiAJLy8gZmV0Y2ggcnVubmluZyBJZGVudFJlcXVlc3RzCiAJblNpemUgKz0gc25wcmludGYocGNCdWZmZXJfcCArIG5TaXplLCBuQnVmZmVyU2l6ZV9wIC0gblNpemUsCi0JCQkgICJydW5uaW5nIElkZW50UmVxdWVzdHM6ICAgICAgMHglMDhsWFxuIiwKKwkJCSAgInJ1bm5pbmcgSWRlbnRSZXF1ZXN0czogICAgICAweCUwOFhcbiIsCiAJCQkgIEVwbElkZW50dUdldFJ1bm5pbmdSZXF1ZXN0cygpKTsKIAogCS8vIGZldGNoIHN0YXRlIG9mIE5tdE1udSBtb2R1bGUKIAl7CiAJCXVuc2lnbmVkIGludCB1aU1hbmRhdG9yeVNsYXZlQ291bnQ7CiAJCXVuc2lnbmVkIGludCB1aVNpZ25hbFNsYXZlQ291bnQ7Ci0JCVdPUkQgd0ZsYWdzOworCQl1MTYgd0ZsYWdzOwogCiAJCUVwbE5tdE1udUdldERpYWdub3N0aWNJbmZvKCZ1aU1hbmRhdG9yeVNsYXZlQ291bnQsCiAJCQkJCSAgICZ1aVNpZ25hbFNsYXZlQ291bnQsICZ3RmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbENmZ01hdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbENmZ01hdS5oCmluZGV4IGQyNWExZTkuLjRhYzc3MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxDZmdNYXUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsQ2ZnTWF1LmgKQEAgLTY5LDI1ICs2OSwyMiBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsSW5jLmgiCi0KICNpZm5kZWYgX0VQTENGR01BX0hfCiAjZGVmaW5lIF9FUExDRkdNQV9IXwogCisjaW5jbHVkZSAiLi4vRXBsSW5jLmgiCisKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX0NGR01BKSkgIT0gMCkKIAogI2luY2x1ZGUgIkVwbE9iZHUuaCIKICNpbmNsdWRlICJFcGxTZG9Db211LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy9kZWZpbmUgbWF4IG51bWJlciBvZiB0aW1lb3V0cyBmb3IgY29uZmlndXJhdGlvbiBvZiAxIGRldmljZQogI2RlZmluZSBFUExfQ0ZHTUFfTUFYX1RJTUVPVVQgICAzCiAKIC8vY2FsbGJhY2tmdW5jdGlvbiwgY2FsbGVkIGlmIGNvbmZpZ3VyYXRpb24gaXMgZmluaXNoZWQKLXR5cGVkZWYgdm9pZCAoUFVCTElDICogdGZwRXBsQ2ZnTWFDYikgKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCSAgICAgICB0RXBsS2VybmVsIEVycm9yc3RhdGVfcCk7Cit0eXBlZGVmIHZvaWQgKCogdGZwRXBsQ2ZnTWFDYikodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbEtlcm5lbCBFcnJvcnN0YXRlX3ApOwogCiAvL1N0YXRlIGZvciBjb25maWd1YXJ0aW9uIG1hbmFnZXIgU3RhdGVtYWNoaW5lCiB0eXBlZGVmIGVudW0gewpAQCAtMTMxLDMzICsxMjgsMjkgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsQ2ZnU3RhdGUgbV9DZmdTdGF0ZTsJLy8gc3RhdGUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgbWFzY2hpbmUKIAl0RXBsU2RvQ29tQ29uSGRsIG1fU2RvQ29tQ29uSGRsOwkvLyBoYW5kbGUgZm9yIHNkbyBjb25uZWN0aW9uCi0JRFdPUkQgbV9kd0xhc3RBYm9ydENvZGU7CisJdTMyIG1fZHdMYXN0QWJvcnRDb2RlOwogCXVuc2lnbmVkIGludCBtX3VpTGFzdEluZGV4OwkvLyBsYXN0IGluZGV4IG9mIGNvbmZpZ3VyYXRpb24sIHRvIGNvbXBhaXIgd2l0aCBhY3R1YWwgaW5kZXgKLQlCWVRFICptX3BiQ29uY2lzZTsJLy8gUHRyIHRvIGNvbmNpc2UgRENGCi0JQllURSAqbV9wYkFjdHVhbEluZGV4OwkvLyBQdHIgdG8gYWN0dWFsIGluZGV4IGluIHRoZSBEQ0Ygc2VnbWVudAorCXU4ICptX3BiQ29uY2lzZTsJLy8gUHRyIHRvIGNvbmNpc2UgRENGCisJdTggKm1fcGJBY3R1YWxJbmRleDsJLy8gUHRyIHRvIGFjdHVhbCBpbmRleCBpbiB0aGUgRENGIHNlZ21lbnQKIAl0ZnBFcGxDZmdNYUNiIG1fcGZuQ2ZnTWFDYjsJLy8gUHRyIHRvIENmZ01hIENhbGxiYWNrLCBpcyBjYWxsIGlmIGNvbmZpZ3VyYXRpb24gZmluaXNoZWQKIAl0RXBsS2VybmVsIG1fRXBsS2VybmVsRXJyb3I7CS8vIGVycm9yY29kZQotCURXT1JEIG1fZHdOdW1WYWx1ZUNvcHk7CS8vIG51bWVyaWMgdmFsdWVzIGFyZSBjb3BpZWQgaW4gdGhpcyB2YXJpYWJsZQorCXUzMiBtX2R3TnVtVmFsdWVDb3B5OwkvLyBudW1lcmljIHZhbHVlcyBhcmUgY29waWVkIGluIHRoaXMgdmFyaWFibGUKIAl1bnNpZ25lZCBpbnQgbV91aVBkb05vZGVJZDsJLy8gYnVmZmVyIGZvciBQRE8gbm9kZSBpZAotCUJZVEUgbV9iTnJPZk1hcHBlZE9iamVjdDsJLy8gbnVtYmVyIG9mIG1hcHBlZCBvYmplY3RzCisJdTggbV9iTnJPZk1hcHBlZE9iamVjdDsJLy8gbnVtYmVyIG9mIG1hcHBlZCBvYmplY3RzCiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7CS8vIEVwbCBub2RlIGFkZHJlc3NlCiAJdEVwbFNkb2NTdGF0ZSBtX1Nkb2NTdGF0ZTsJLy8gYml0Y29kZWQgc3RhdGUgb2YgdGhlIFNETyB0cmFuc2ZlcgogCXVuc2lnbmVkIGludCBtX3VpTGFzdFN1YkluZGV4OwkvLyBsYXN0IHN1YmluZGV4IG9mIGNvbmZpZ3VyYXRpb24KIAlCT09MIG1fZk9uZVRyYW5mZXJPazsJLy8gYXRsZWFzZWQgb25lIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsCi0JQllURSBtX2JFdmVudEZsYWc7CS8vIGZvciBFdmVudHNpZ25hbGluZyB0byB0aGUgU3RhdGUgTWFzY2hpbmUKLQlEV09SRCBtX2R3Q250T2JqZWN0SW5EY2Y7CS8vIG51bWJlciBvZiBPYmplY3RzIGluIERDRgorCXU4IG1fYkV2ZW50RmxhZzsJLy8gZm9yIEV2ZW50c2lnbmFsaW5nIHRvIHRoZSBTdGF0ZSBNYXNjaGluZQorCXUzMiBtX2R3Q250T2JqZWN0SW5EY2Y7CS8vIG51bWJlciBvZiBPYmplY3RzIGluIERDRgogCXRFcGxDZmdNYUluZGV4VHlwZSBtX1NraXBDZmc7CS8vIFRSVUUgaWYgYSBhZHNpdGlvbmFsIENvbmZpZ3VyYXRpb25wcm9jZXNzCiAJLy8gaGF2ZSB0byBpbnNlcnQgZS5nLiBQRE8tbWFwcGluZwotCVdPUkQgbV93VGltZU91dENudDsJLy8gVGltZW91dCBDb3VudGVyLCBicmVhayBjb25maWd1cmF0aW9uIGlzCisJdTE2IG1fd1RpbWVPdXRDbnQ7CS8vIFRpbWVvdXQgQ291bnRlciwgYnJlYWsgY29uZmlndXJhdGlvbiBpcwogCS8vIG1fd1RpbWVPdXRDbnQgPT0gQ0ZHTUFfTUFYX1RJTUVPVVQKIAogfSB0RXBsQ2ZnTWFOb2RlOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZ1bmN0aW9uOiAgICBFcGxDZmdNYUluaXQoKQogLy8KIC8vIERlc2NyaXB0aW9uOiBGdW5jdGlvbiBjcmVhdGVzIGZpcnN0IGluc3RhbmNlIG9mIENvbmZpZ3VyYXRpb24gTWFuYWdlcgpAQCAtMTY2LDcgKzE1OSw3IEBACiAvLwogLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgICAgICAgICAgICAgID0gZXJyb3IgY29kZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbENmZ01hSW5pdCgpOwordEVwbEtlcm5lbCBFcGxDZmdNYUluaXQodm9pZCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBGdW5jdGlvbjogICAgRXBsQ2ZnTWFBZGRJbnN0YW5jZSgpCkBAIC0xNzcsNyArMTcwLDcgQEAKIC8vCiAvLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgICAgICAgICAgICAgPSBlcnJvciBjb2RlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQ2ZnTWFBZGRJbnN0YW5jZSgpOwordEVwbEtlcm5lbCBFcGxDZmdNYUFkZEluc3RhbmNlKHZvaWQpOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hRGVsSW5zdGFuY2UoKQpAQCAtMTg4LDcgKzE4MSw3IEBACiAvLwogLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgICAgICAgICAgICAgID0gZXJyb3IgY29kZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbENmZ01hRGVsSW5zdGFuY2UoKTsKK3RFcGxLZXJuZWwgcGxDZmdNYURlbEluc3RhbmNlKHZvaWQpOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hU3RhcnRDb25maWcoKQpAQCAtMTk5LDE2ICsxOTIsMTYgQEAKIC8vIFBhcmFtZXRlcnM6ICB1aU5vZGVJZF9wICAgICAgICAgICAgICA9IE5vZGVJZCBvZiB0aGUgbm9kZSB0byBjb25maWd1cmUKIC8vICAgICAgICAgICAgICBwYkNvbmNpc2VfcCAgICAgICAgICAgICA9IHBvaW50ZXIgdG8gRENGCiAvLyAgICAgICAgICAgICAgZnBDZmdNYUNiX3AgICAgICAgICAgICAgPSBwb2ludGVyIHRvIGNhbGxiYWNrIGZ1bmN0aW9uIChzaG91bGQgbm90IGJlIE5VTEwpCi0vLyAgICAgICAgICAgICAgU2l6ZU9mQ29uY2lzZV9wICAgICAgICAgPSBzaXplIG9mIERDRiBpbiBCWVRFIC0+IGZvciBmdXR1cmUgdXNlCisvLyAgICAgICAgICAgICAgU2l6ZU9mQ29uY2lzZV9wICAgICAgICAgPSBzaXplIG9mIERDRiBpbiB1OCAtPiBmb3IgZnV0dXJlIHVzZQogLy8gICAgICAgICAgICAgIERjZlR5cGVfcCAgICAgICAgICAgICAgID0gdHlwZSBvZiB0aGUgRENGCiAvLwogLy8gUmV0dXJuczogICAgIHRDb3BLZXJuZWwgICAgICAgICAgICAgID0gZXJyb3IgY29kZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbENmZ01hU3RhcnRDb25maWcodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgICAgQllURSAqIHBiQ29uY2lzZV9wLAotCQkJCSAgICAgIHRmcEVwbENmZ01hQ2IgZnBDZmdNYUNiX3AsCi0JCQkJICAgICAgdEVwbE9iZFNpemUgU2l6ZU9mQ29uY2lzZV9wLAotCQkJCSAgICAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxDZmdNYVN0YXJ0Q29uZmlnKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJICAgICAgIHU4ICogcGJDb25jaXNlX3AsCisJCQkgICAgICAgdGZwRXBsQ2ZnTWFDYiBmcENmZ01hQ2JfcCwKKwkJCSAgICAgICB0RXBsT2JkU2l6ZSBTaXplT2ZDb25jaXNlX3AsCisJCQkgICAgICAgdEVwbENmZ01hRGNmVHlwIERjZlR5cGVfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBGdW5jdGlvbjogICAgQ2ZnTWFTdGFydENvbmZpZ3VyYXRpb25Ob2RlKCkKQEAgLTIyMiw5ICsyMTUsOSBAQAogLy8KIC8vIFJldHVybnM6ICAgICB0Q29wS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYVN0YXJ0Q29uZmlnTm9kZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICB0ZnBFcGxDZmdNYUNiIGZwQ2ZnTWFDYl9wLAotCQkJCQkgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxDZmdNYVN0YXJ0Q29uZmlnTm9kZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICB0ZnBFcGxDZmdNYUNiIGZwQ2ZnTWFDYl9wLAorCQkJCSAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hU3RhcnRDb25maWdOb2RlRGNmKCkKQEAgLTIzNSwxNiArMjI4LDE2IEBACiAvLyBQYXJhbWV0ZXJzOiAgdWlOb2RlSWRfcCAgICAgICAgICAgICAgPSBOb2RlSWQgb2YgdGhlIG5vZGUgdG8gY29uZmlndXJlCiAvLyAgICAgICAgICAgICAgcGJDb25jaXNlX3AgICAgICAgICAgICAgPSBwb2ludGVyIHRvIERDRgogLy8gICAgICAgICAgICAgIGZwQ2ZnTWFDYl9wICAgICAgICAgICAgID0gcG9pbnRlciB0byBjYWxsYmFjayBmdW5jdGlvbiAoc2hvdWxkIG5vdCBiZSBOVUxMKQotLy8gICAgICAgICAgICAgIFNpemVPZkNvbmNpc2VfcCAgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gQllURSAtPiBmb3IgZnV0dXJlIHVzZQorLy8gICAgICAgICAgICAgIFNpemVPZkNvbmNpc2VfcCAgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gdTggLT4gZm9yIGZ1dHVyZSB1c2UKIC8vICAgICAgICAgICAgICBEY2ZUeXBlX3AgICAgICAgICAgICAgICA9IHR5cGUgb2YgdGhlIERDRgogLy8KIC8vIFJldHVybnM6ICAgICB0Q29wS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYVN0YXJ0Q29uZmlnTm9kZURjZih1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgICBCWVRFICogcGJDb25jaXNlX3AsCi0JCQkJCSAgICAgdGZwRXBsQ2ZnTWFDYiBmcENmZ01hQ2JfcCwKLQkJCQkJICAgICB0RXBsT2JkU2l6ZSBTaXplT2ZDb25jaXNlX3AsCi0JCQkJCSAgICAgdEVwbENmZ01hRGNmVHlwIERjZlR5cGVfcCk7Cit0RXBsS2VybmVsIEVwbENmZ01hU3RhcnRDb25maWdOb2RlRGNmKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCSAgICAgIHU4ICogcGJDb25jaXNlX3AsCisJCQkJICAgICAgdGZwRXBsQ2ZnTWFDYiBmcENmZ01hQ2JfcCwKKwkJCQkgICAgICB0RXBsT2JkU2l6ZSBTaXplT2ZDb25jaXNlX3AsCisJCQkJICAgICAgdEVwbENmZ01hRGNmVHlwIERjZlR5cGVfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBGdW5jdGlvbjogICAgRXBsQ2ZnTWFMaW5rRGNmKCkKQEAgLTI1MywxNSArMjQ2LDE1IEBACiAvLwogLy8gUGFyYW1ldGVyczogIHVpTm9kZUlkX3AgICAgICAgICAgICAgID0gTm9kZUlkIG9mIHRoZSBub2RlIHRvIGNvbmZpZ3VyZQogLy8gICAgICAgICAgICAgIHBiQ29uY2lzZV9wICAgICAgICAgICAgID0gcG9pbnRlciB0byBEQ0YKLS8vICAgICAgICAgICAgICBTaXplT2ZDb25jaXNlX3AgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gQllURSAtPiBmb3IgZnV0dXJlIHVzZQorLy8gICAgICAgICAgICAgIFNpemVPZkNvbmNpc2VfcCAgICAgICAgPSBzaXplIG9mIERDRiBpbiB1OCAtPiBmb3IgZnV0dXJlIHVzZQogLy8gICAgICAgICAgICAgIERjZlR5cGVfcCAgICAgICAgICAgICAgID0gdHlwZSBvZiB0aGUgRENGCiAvLwogLy8gUmV0dXJuczogICAgIHRDb3BLZXJuZWwgICAgICAgICAgICAgID0gZXJyb3IgY29kZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbENmZ01hTGlua0RjZih1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkgIEJZVEUgKiBwYkNvbmNpc2VfcCwKLQkJCQkgIHRFcGxPYmRTaXplIFNpemVPZkNvbmNpc2VfcCwKLQkJCQkgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxDZmdNYUxpbmtEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICB1OCAqIHBiQ29uY2lzZV9wLAorCQkJICAgdEVwbE9iZFNpemUgU2l6ZU9mQ29uY2lzZV9wLAorCQkJICAgdEVwbENmZ01hRGNmVHlwIERjZlR5cGVfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBGdW5jdGlvbjogICAgRXBsQ2ZnTWFDaGVja0RjZigpCkBAIC0yNzQsOCArMjY3LDcgQEAKIC8vCiAvLyBSZXR1cm5zOiAgICAgdENvcEtlcm5lbCAgICAgICAgICAgICAgPSBlcnJvciBjb2RlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQ2ZnTWFDaGVja0RjZih1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkgICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFDaGVja0RjZih1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgdEVwbENmZ01hRGNmVHlwIERjZlR5cGVfcCk7CiAKICNlbmRpZiAvLyAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9DRkdNQSkpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxEbGx1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdS5oCmluZGV4IDM2ZjhiYjcuLjg5MGY4MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxEbGx1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbERsbHUuaApAQCAtNzMsMTkgKzczLDcgQEAKIAogI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsRGxsdUNiQXNuZCkgKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxEbGx1Q2JBc25kKSAodEVwbEZyYW1lSW5mbyAqIHBGcmFtZUluZm9fcCk7CiAKICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfRExMVSkpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxEbGx1Q2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdUNhbC5oCmluZGV4IGIxZGNkMDYuLmJjOTEyNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxEbGx1Q2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbERsbHVDYWwuaApAQCAtNzQsMTkgKzc0LDggQEAKICNpbmNsdWRlICIuLi9FcGxEbGwuaCIKICNpbmNsdWRlICIuLi9FcGxFdmVudC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsRGxsdUNiQXNuZCkgKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxEbGx1Q2JBc25kKSAodEVwbEZyYW1lSW5mbyAqIHBGcmFtZUluZm9fcCk7CiAKIHRFcGxLZXJuZWwgRXBsRGxsdUNhbEFkZEluc3RhbmNlKHZvaWQpOwogCkBAIC0xMTAsNyArOTksNyBAQAogdEVwbEtlcm5lbCBFcGxEbGx1Q2FsU29mdERlbGV0ZU5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3ApOwogCiB0RXBsS2VybmVsIEVwbERsbHVDYWxJc3N1ZVJlcXVlc3QodEVwbERsbFJlcVNlcnZpY2VJZCBTZXJ2aWNlX3AsCi0JCQkJICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgQllURSBiU29hRmxhZzFfcCk7CisJCQkJICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgdTggYlNvYUZsYWcxX3ApOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbEV2ZW50dS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbEV2ZW50dS5oCmluZGV4IDMyMmNmZmQuLmFiODUyMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxFdmVudHUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRXZlbnR1LmgKQEAgLTczLDM2ICs3MywyNCBAQAogCiAjaW5jbHVkZSAiLi4vRXBsRXZlbnQuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGluaXQgZnVuY3Rpb24KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dUluaXQodEVwbFByb2Nlc3NFdmVudENiIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApOwordEVwbEtlcm5lbCBFcGxFdmVudHVJbml0KHRFcGxQcm9jZXNzRXZlbnRDYiBwZm5BcGlQcm9jZXNzRXZlbnRDYl9wKTsKIAogLy8gYWRkIGluc3RhbmNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVBZGRJbnN0YW5jZSh0RXBsUHJvY2Vzc0V2ZW50Q2IKLQkJCQkgICAgICAgcGZuQXBpUHJvY2Vzc0V2ZW50Q2JfcCk7Cit0RXBsS2VybmVsIEVwbEV2ZW50dUFkZEluc3RhbmNlKHRFcGxQcm9jZXNzRXZlbnRDYiBwZm5BcGlQcm9jZXNzRXZlbnRDYl9wKTsKIAogLy8gZGVsZXRlIGluc3RhbmNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1RGVsSW5zdGFuY2Uodm9pZCk7CiAKIC8vIFRhc2sgdGhhdCBkaXNwYXRjaGVzIGV2ZW50cyBpbiB1c2Vyc3BhY2UKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVByb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxFdmVudHVQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKTsKIAogLy8gcG9zdCBldmVudHMgZnJvbSB1c2Vyc3BhY2UKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVBvc3QodEVwbEV2ZW50ICogcEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKTsKIAogLy8gcG9zdCBlcnJvcmV2ZW50cyBmcm9tIHVzZXJzcGFjZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnR1UG9zdEVycm9yKHRFcGxFdmVudFNvdXJjZSBFdmVudFNvdXJjZV9wLAotCQkJCSAgICAgdEVwbEtlcm5lbCBFcGxFcnJvcl9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpQXJnU2l6ZV9wLCB2b2lkICpwQXJnX3ApOwordEVwbEtlcm5lbCBFcGxFdmVudHVQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExfRVZFTlRVX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsSWRlbnR1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsSWRlbnR1LmgKaW5kZXggZTczMDIxMC4uMDU3YzkwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbElkZW50dS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxJZGVudHUuaApAQCAtNjgsNDEgKzY4LDI3IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxEbGwuaCIKLQogI2lmbmRlZiBfRVBMSURFTlRVX0hfCiAjZGVmaW5lIF9FUExJREVOVFVfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbElkZW50dUNiUmVzcG9uc2UpICh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxJZGVudHVDYlJlc3BvbnNlKSAodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCiAJCQkJCQkgICB0RXBsSWRlbnRSZXNwb25zZSAqCiAJCQkJCQkgICBwSWRlbnRSZXNwb25zZV9wKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbElkZW50dUluaXQodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUluaXQodm9pZCk7Cit0RXBsS2VybmVsIEVwbElkZW50dUFkZEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVBZGRJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsSWRlbnR1RGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxJZGVudHVSZXNldCh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsSWRlbnR1UmVzZXQodm9pZCk7Cit0RXBsS2VybmVsIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgICB0RXBsSWRlbnRSZXNwb25zZSAqKnBwSWRlbnRSZXNwb25zZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsSWRlbnR1R2V0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgIHRFcGxJZGVudFJlc3BvbnNlICoqCi0JCQkJCSAgICBwcElkZW50UmVzcG9uc2VfcCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dVJlcXVlc3RJZGVudFJlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJdEVwbElkZW50dUNiUmVzcG9uc2UKLQkJCQkJCXBmbkNiUmVzcG9uc2VfcCk7Cit0RXBsS2VybmVsIEVwbElkZW50dVJlcXVlc3RJZGVudFJlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCQkgdEVwbElkZW50dUNiUmVzcG9uc2UgcGZuQ2JSZXNwb25zZV9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTElERU5UVV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbExlZHUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxMZWR1LmgKaW5kZXggNzhlNzBkMDY0Li5jYTllYjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTGVkdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxMZWR1LmgKQEAgLTY4LDQxICs2OCwyNyBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZuZGVmIF9FUExMRURVX0hfCisjZGVmaW5lIF9FUExMRURVX0hfCisKICNpbmNsdWRlICIuLi9FcGxMZWQuaCIKICNpbmNsdWRlICIuLi9FcGxObXQuaCIKICNpbmNsdWRlICJFcGxFdmVudHUuaCIKIAotI2lmbmRlZiBfRVBMTEVEVV9IXwotI2RlZmluZSBfRVBMTEVEVV9IXwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsTGVkdVN0YXRlQ2hhbmdlQ2FsbGJhY2spICh0RXBsTGVkVHlwZSBMZWRUeXBlX3AsCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsTGVkdVN0YXRlQ2hhbmdlQ2FsbGJhY2spICh0RXBsTGVkVHlwZSBMZWRUeXBlX3AsCiAJCQkJCQkJICBCT09MIGZPbl9wKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX0xFRFUpKSAhPSAwKQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxMZWR1SW5pdCh0RXBsTGVkdVN0YXRlQ2hhbmdlQ2FsbGJhY2sgcGZuQ2JTdGF0ZUNoYW5nZV9wKTsKK3RFcGxLZXJuZWwgRXBsTGVkdUluaXQodEVwbExlZHVTdGF0ZUNoYW5nZUNhbGxiYWNrIHBmbkNiU3RhdGVDaGFuZ2VfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExlZHVBZGRJbnN0YW5jZSh0RXBsTGVkdVN0YXRlQ2hhbmdlQ2FsbGJhY2sKLQkJCQkgICAgIHBmbkNiU3RhdGVDaGFuZ2VfcCk7Cit0RXBsS2VybmVsIEVwbExlZHVBZGRJbnN0YW5jZSh0RXBsTGVkdVN0YXRlQ2hhbmdlQ2FsbGJhY2sgcGZuQ2JTdGF0ZUNoYW5nZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTGVkdURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxMZWR1RGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExlZHVDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCSAgTm10U3RhdGVDaGFuZ2VfcCk7Cit0RXBsS2VybmVsIEVwbExlZHVDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlIE5tdFN0YXRlQ2hhbmdlX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxMZWR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsTGVkdVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXBsRXZlbnRfcCk7CiAKICNlbmRpZiAvLyAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9MRURVKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdENudS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdENudS5oCmluZGV4IGU1MDgwNTUuLjdkMjMwMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXRDbnUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10Q251LmgKQEAgLTY4LDQwICs2OCwyNCBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZuZGVmIF9FUExOTVRDTlVfSF8KKyNkZWZpbmUgX0VQTE5NVENOVV9IXworCiAjaW5jbHVkZSAiRXBsTm10dS5oIgogI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogI2luY2x1ZGUgIi4uL0VwbEZyYW1lLmgiCiAKLSNpZm5kZWYgX0VQTE5NVENOVV9IXwotI2RlZmluZSBfRVBMTk1UQ05VX0hfCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1UX0NOKSkgIT0gMCkKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudUluaXQodW5zaWduZWQgaW50IHVpTm9kZUlkX3ApOwordEVwbEtlcm5lbCBFcGxObXRDbnVJbml0KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudUFkZEluc3RhbmNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKK3RFcGxLZXJuZWwgRXBsTm10Q251QWRkSW5zdGFuY2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3ApOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbE5tdENudURlbEluc3RhbmNlKHZvaWQpOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251U2VuZE5tdFJlcXVlc3QodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgICAgICAgdEVwbE5tdENvbW1hbmQKLQkJCQkJCSAgICAgICBObXRDb21tYW5kX3ApOwordEVwbEtlcm5lbCBFcGxObXRDbnVTZW5kTm10UmVxdWVzdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgdEVwbE5tdENvbW1hbmQgTm10Q29tbWFuZF9wKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxObXRDbnVSZWdpc3RlckNoZWNrRXZlbnRDYih0RXBsTm10dUNoZWNrRXZlbnRDYWxsYmFjawotCQkJICAgICAgcGZuRXBsTm10Q2hlY2tFdmVudENiX3ApOwordEVwbEtlcm5lbCBFcGxObXRDbnVSZWdpc3RlckNoZWNrRXZlbnRDYih0RXBsTm10dUNoZWNrRXZlbnRDYWxsYmFjayBwZm5FcGxObXRDaGVja0V2ZW50Q2JfcCk7CiAKICNlbmRpZiAvLyAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9DTikpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXRNbnUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXRNbnUuaAppbmRleCBjNTRlZmViLi41ZTVlMGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10TW51LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdE1udS5oCkBAIC02OCwzNCArNjgsMjAgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIkVwbE5tdHUuaCIKLQogI2lmbmRlZiBfRVBMTk1UTU5VX0hfCiAjZGVmaW5lIF9FUExOTVRNTlVfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiRXBsTm10dS5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxObXRNbnVDYk5vZGVFdmVudCkgKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCQkgICAgIHRFcGxObXROb2RlRXZlbnQgTm9kZUV2ZW50X3AsCisJCQkJCSAgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJCSAgICAgdTE2IHdFcnJvckNvZGVfcCwKKwkJCQkJICAgICBCT09MIGZNYW5kYXRvcnlfcCk7CiAKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsTm10TW51Q2JOb2RlRXZlbnQpICh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgICB0RXBsTm10Tm9kZUV2ZW50Ci0JCQkJCQkgICAgTm9kZUV2ZW50X3AsCi0JCQkJCQkgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCQkgICAgV09SRCB3RXJyb3JDb2RlX3AsCi0JCQkJCQkgICAgQk9PTCBmTWFuZGF0b3J5X3ApOwotCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICoKLQkJICAgdEVwbE5tdE1udUNiQm9vdEV2ZW50KSAodEVwbE5tdEJvb3RFdmVudCBCb290RXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsTm10TW51Q2JCb290RXZlbnQpICh0RXBsTm10Qm9vdEV2ZW50IEJvb3RFdmVudF9wLAorCQkJCQkgICAgIHRFcGxObXRTdGF0ZSBObXRTdGF0ZV9wLAorCQkJCQkgICAgIHUxNiB3RXJyb3JDb2RlX3ApOwogCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9NTikpICE9IDApCiAKQEAgLTEwNyw3ICs5Myw3IEBACiAKIHRFcGxLZXJuZWwgRXBsTm10TW51RGVsSW5zdGFuY2Uodm9pZCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxObXRNbnVQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICpwRXZlbnRfcCk7CiAKIHRFcGxLZXJuZWwgRXBsTm10TW51U2VuZE5tdENvbW1hbmQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCiAJCQkJICAgdEVwbE5tdENvbW1hbmQgTm10Q29tbWFuZF9wKTsKQEAgLTExNSwxNiArMTAxLDE2IEBACiB0RXBsS2VybmVsIEVwbE5tdE1udVRyaWdnZXJTdGF0ZUNoYW5nZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKIAkJCQkgICAgICAgdEVwbE5tdE5vZGVDb21tYW5kIE5vZGVDb21tYW5kX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCit0RXBsS2VybmVsIEVwbE5tdE1udUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UKIAkJCQkJICAgIE5tdFN0YXRlQ2hhbmdlX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYkNoZWNrRXZlbnQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxObXRNbnVDYkNoZWNrRXZlbnQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVHZXREaWFnbm9zdGljSW5mbyh1bnNpZ25lZCBpbnQKK3RFcGxLZXJuZWwgRXBsTm10TW51R2V0RGlhZ25vc3RpY0luZm8odW5zaWduZWQgaW50CiAJCQkJCSAgICAgKnB1aU1hbmRhdG9yeVNsYXZlQ291bnRfcCwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQKIAkJCQkJICAgICAqcHVpU2lnbmFsU2xhdmVDb3VudF9wLAotCQkJCQkgICAgIFdPUkQgKiBwd0ZsYWdzX3ApOworCQkJCQkgICAgIHUxNiAqIHB3RmxhZ3NfcCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10dS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdHUuaAppbmRleCA1YTU2YzU4Li5jMWZjYTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10dS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1LmgKQEAgLTY4LDE5ICs2OCwxMiBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsTm10LmgiCi0jaW5jbHVkZSAiRXBsRXZlbnR1LmgiCi0KICNpZm5kZWYgX0VQTE5NVFVfSF8KICNkZWZpbmUgX0VQTE5NVFVfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsTm10LmgiCisjaW5jbHVkZSAiRXBsRXZlbnR1LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gbm10IGNvbW1hbmRzCiB0eXBlZGVmIGVudW0gewogCS8vIHJlcXVlc3RhYmxlIEFTbmQgU2VydmljZUlkcyAgICAweDAxLi4weDFGCkBAIC0xMjEsMzQgKzExNCwyNSBAQAogCWtFcGxObXRDbWRJbnZhbGlkU2VydmljZSA9IDB4RkYKIH0gdEVwbE5tdENvbW1hbmQ7CiAKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKgotCQkgICB0RXBsTm10dVN0YXRlQ2hhbmdlQ2FsbGJhY2spICh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZQotCQkJCQkJIE5tdFN0YXRlQ2hhbmdlX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbE5tdHVTdGF0ZUNoYW5nZUNhbGxiYWNrKSAodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UgTm10U3RhdGVDaGFuZ2VfcCk7CiAKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKgotCQkgICB0RXBsTm10dUNoZWNrRXZlbnRDYWxsYmFjaykgKHRFcGxObXRFdmVudCBObXRFdmVudF9wKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsTm10dUNoZWNrRXZlbnRDYWxsYmFjaykgKHRFcGxObXRFdmVudCBObXRFdmVudF9wKTsKIAogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRVKSkgIT0gMCkKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdHVJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxObXR1SW5pdCh2b2lkKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdHVBZGRJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsTm10dUFkZEluc3RhbmNlKHZvaWQpOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxObXR1RGVsSW5zdGFuY2Uodm9pZCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1Tm10RXZlbnQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxObXR1Tm10RXZlbnQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwogCi1FUExETExFWFBPUlQgdEVwbE5tdFN0YXRlIFBVQkxJQyBFcGxObXR1R2V0Tm10U3RhdGUodm9pZCk7Cit0RXBsTm10U3RhdGUgRXBsTm10dUdldE5tdFN0YXRlKHZvaWQpOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXBsRXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdHVQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICpwRXBsRXZlbnRfcCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsTm10dVJlZ2lzdGVyU3RhdGVDaGFuZ2VDYih0RXBsTm10dVN0YXRlQ2hhbmdlQ2FsbGJhY2sKLQkJCSAgICAgcGZuRXBsTm10U3RhdGVDaGFuZ2VDYl9wKTsKK3RFcGxLZXJuZWwgRXBsTm10dVJlZ2lzdGVyU3RhdGVDaGFuZ2VDYih0RXBsTm10dVN0YXRlQ2hhbmdlQ2FsbGJhY2sgcGZuRXBsTm10U3RhdGVDaGFuZ2VDYl9wKTsKIAogI2VuZGlmIC8vICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1UVSkpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1Q2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10dUNhbC5oCmluZGV4IGM4ODE1ODIuLmI5ODUwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1Q2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdHVDYWwuaApAQCAtNjksMjMgKzY5LDEyIEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICJFcGxObXR1LmgiCi0jaW5jbHVkZSAiLi4va2VybmVsL0VwbE5tdGsuaCIKLQogI2lmbmRlZiBfRVBMTk1UVUNBTF9IXwogI2RlZmluZSBfRVBMTk1UVUNBTF9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICJFcGxObXR1LmgiCisjaW5jbHVkZSAiLi4va2VybmVsL0VwbE5tdGsuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMgRXBsTm10a0NhbEdldE5tdFN0YXRlKHZvaWQpOwordEVwbE5tdFN0YXRlIEVwbE5tdGtDYWxHZXRObXRTdGF0ZSh2b2lkKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTE5NVFVDQUxfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxPYmR1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsT2JkdS5oCmluZGV4IGJjMWUxNzMuLjA4NjM3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxPYmR1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHUuaApAQCAtNjgsMjIgKzY4LDEwIEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxPYmQuaCIKLQogI2lmbmRlZiBfRVBMT0JEVV9IXwogI2RlZmluZSBfRVBMT0JEVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9PQkRVKSkgIT0gMCkKIApAQCAtOTEsNjggKzc5LDU3IEBACiAjZXJyb3IgIkVQTCBPQkR1IG1vZHVsZSBlbmFibGVkLCBidXQgT0JEX1VTRV9LRVJORUwgPT0gVFJVRSIKICNlbmRpZgogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVdyaXRlRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkgdEVwbE9iZFNpemUgU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdVdyaXRlRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVJlYWRFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCXZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQl0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1UmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkgICAgdm9pZCAqcERzdERhdGFfcCwgdEVwbE9iZFNpemUgKnBTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1QWNjZXNzT2RQYXJ0KHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwKLQkJCQkJCSAgIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1QWNjZXNzT2RQYXJ0KHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVEZWZpbmVWYXIodEVwbFZhclBhcmFtIE1FTSAqIHBWYXJQYXJhbV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdURlZmluZVZhcih0RXBsVmFyUGFyYW0gKnBWYXJQYXJhbV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCAqUFVCTElDIEVwbE9iZHVHZXRPYmplY3REYXRhUHRyKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVJlZ2lzdGVyVXNlck9kKHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApOwordm9pZCAqRXBsT2JkdUdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZHVJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5IE1FTSAqIHBWYXJFbnRyeV9wLAotCQkJCQkgICAgIEJZVEUgYlR5cGVfcCwKLQkJCQkJICAgICB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1UmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxPYmRTaXplIFBVQkxJQyBFcGxPYmR1R2V0RGF0YVNpemUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwordm9pZCBFcGxPYmR1SW5pdFZhckVudHJ5KHRFcGxPYmRWYXJFbnRyeSAqcFZhckVudHJ5X3AsIHU4IGJUeXBlX3AsCisJCQkgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdW5zaWduZWQgaW50IFBVQkxJQyBFcGxPYmR1R2V0Tm9kZUlkKHZvaWQpOwordEVwbE9iZFNpemUgRXBsT2JkdUdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQl0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApOwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgIHRFcGxPYmRBY2Nlc3MgKgotCQkJCQkJICAgIHBBY2Nlc3NUeXBfcCk7Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1UmVhZEVudHJ5VG9MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCSAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVdyaXRlRW50cnlGcm9tTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSBTaXplX3ApOwordW5zaWduZWQgaW50IEVwbE9iZHVHZXROb2RlSWQodm9pZCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQkJICAgICB0RXBsT2JkVmFyRW50cnkgTUVNICoqCi0JCQkJCQkgICAgIHBwVmFyRW50cnlfcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgdEVwbE9iZE5vZGVJZFR5cGUgTm9kZUlkVHlwZV9wKTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbE9iZHVHZXRBY2Nlc3NUeXBlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQl0RXBsT2JkQWNjZXNzICpwQWNjZXNzVHlwX3ApOworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbE9iZHVSZWFkRW50cnlUb0xlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQl2b2lkICpwRHN0RGF0YV9wLCB0RXBsT2JkU2l6ZSAqcFNpemVfcCk7CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsT2JkdVdyaXRlRW50cnlGcm9tTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgIHZvaWQgKnBTcmNEYXRhX3AsIHRFcGxPYmRTaXplIFNpemVfcCk7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxPYmR1U2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKTsKIAogI2VsaWYgRVBMX09CRF9VU0VfS0VSTkVMICE9IEZBTFNFCiAjaW5jbHVkZSAiLi4va2VybmVsL0VwbE9iZGsuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxPYmR1Q2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsT2JkdUNhbC5oCmluZGV4IDQ5OGUwMTEuLjA3Mjc3NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxPYmR1Q2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHVDYWwuaApAQCAtNjksODAgKzY5LDU4IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxPYmQuaCIKLQogI2lmbmRlZiBfRVBMT0JEVUNBTF9IXwogI2RlZmluZSBfRVBMT0JEVUNBTF9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxPYmQuaCIKIAordEVwbEtlcm5lbCBFcGxPYmR1Q2FsV3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdm9pZCAqcFNyY0RhdGFfcCwKKwkJCQl0RXBsT2JkU2l6ZSBTaXplX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbFJlYWRFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkgICAgICAgdm9pZCAqcERzdERhdGFfcCwKKwkJCSAgICAgICB0RXBsT2JkU2l6ZSAqcFNpemVfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCit0RXBsS2VybmVsIEVwbE9iZHVDYWxBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLAorCQkJCSAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwordEVwbEtlcm5lbCBFcGxPYmR1Q2FsRGVmaW5lVmFyKHRFcGxWYXJQYXJhbSAqcFZhclBhcmFtX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsV3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSAgICB0RXBsT2JkU2l6ZSBTaXplX3ApOwordm9pZCAqRXBsT2JkdUNhbEdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbFJlZ2lzdGVyVXNlck9kKHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsQWNjZXNzT2RQYXJ0KHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwKLQkJCQkJCSAgICAgIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApOwordm9pZCBFcGxPYmR1Q2FsSW5pdFZhckVudHJ5KHRFcGxPYmRWYXJFbnRyeSAqcFZhckVudHJ5X3AsCisJCQkgICAgdTggYlR5cGVfcCwgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbERlZmluZVZhcih0RXBsVmFyUGFyYW0gTUVNICoKLQkJCQkJCSAgIHBWYXJQYXJhbV9wKTsKK3RFcGxPYmRTaXplIEVwbE9iZHVDYWxHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgKlBVQkxJQyBFcGxPYmR1Q2FsR2V0T2JqZWN0RGF0YVB0cih1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKK3Vuc2lnbmVkIGludCBFcGxPYmR1Q2FsR2V0Tm9kZUlkKHZvaWQpOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyCi0JCQkJCQkJcFVzZXJPZF9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbFNldE5vZGVJZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgICB0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB2b2lkIFBVQkxJQyBFcGxPYmR1Q2FsSW5pdFZhckVudHJ5KHRFcGxPYmRWYXJFbnRyeSBNRU0gKgotCQkJCQkJcFZhckVudHJ5X3AsIEJZVEUgYlR5cGVfcCwKLQkJCQkJCXRFcGxPYmRTaXplIE9iZFNpemVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVDYWxHZXRBY2Nlc3NUeXBlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICB0RXBsT2JkQWNjZXNzICpwQWNjZXNzVHlwX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsT2JkU2l6ZSBQVUJMSUMgRXBsT2JkdUNhbEdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgIHVpU3ViSW5kZXhfcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVDYWxSZWFkRW50cnlUb0xlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdW5zaWduZWQgaW50IFBVQkxJQyBFcGxPYmR1Q2FsR2V0Tm9kZUlkKHZvaWQpOwordEVwbEtlcm5lbCBFcGxPYmR1Q2FsV3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKKwkJCQkgICAgICB0RXBsT2JkU2l6ZSBTaXplX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsU2V0Tm9kZUlkKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgdEVwbE9iZE5vZGVJZFR5cGUKLQkJCQkJCSAgIE5vZGVJZFR5cGVfcCk7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxHZXRBY2Nlc3NUeXBlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgaW50Ci0JCQkJCQkgICAgICAgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgICAgIHRFcGxPYmRBY2Nlc3MgKgotCQkJCQkJICAgICAgIHBBY2Nlc3NUeXBfcCk7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxSZWFkRW50cnlUb0xlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgaW50Ci0JCQkJCQkgICAgICAgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICAgICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKTsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFdyaXRlRW50cnlGcm9tTGUodW5zaWduZWQgaW50Ci0JCQkJCQkJICB1aUluZGV4X3AsCi0JCQkJCQkJICB1bnNpZ25lZCBpbnQKLQkJCQkJCQkgIHVpU3ViSW5kZXhfcCwKLQkJCQkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkJICB0RXBsT2JkU2l6ZSBTaXplX3ApOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsT2JkdUNhbFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKLQkJCSB0RXBsT2JkVmFyRW50cnkgTUVNICoqIHBwVmFyRW50cnlfcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVDYWxTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMT0JEVUNBTF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFBkb3UuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxQZG91LmgKaW5kZXggMTFkZTQ4Ni4uYjhjODMyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFBkb3UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsUGRvdS5oCkBAIC03MiwyNCArNzIsMTIgQEAKIAogI2luY2x1ZGUgIi4uL0VwbFBkby5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiB0RXBsS2VybmVsIEVwbFBkb3VBZGRJbnN0YW5jZSh2b2lkKTsKIAogdEVwbEtlcm5lbCBFcGxQZG91RGVsSW5zdGFuY2Uodm9pZCk7CiAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1BET1UpKSAhPSAwKQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsUGRvdUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBQYXJhbV9wKTsKK3RFcGxLZXJuZWwgRXBsUGRvdUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCk7CiAjZWxzZQogI2RlZmluZSBFcGxQZG91Q2JPYmRBY2Nlc3MJCU5VTEwKICNlbmRpZgpAQCAtOTcsMTIgKzg1LDEyIEBACiAvLyByZXR1cm5zIGVycm9yIGlmIGJQZG9JZF9wIGlzIGFscmVhZHkgdmFsaWQKIC8qCiB0RXBsS2VybmVsIEVwbFBkb3VTZXRNYXBwaW5nKAotICAgIEJZVEUgYlBkb0lkX3AsIEJPT0wgZlR4UnhfcCwgQllURSBiTm9kZUlkLCBCWVRFIGJNYXBwaW5nVmVyc2lvbiwKLSAgICB0RXBsUGRvTWFwcGluZyAqIHBNYXBwaW5nX3AsIEJZVEUgYk1heEVudHJpZXNfcCk7CisgICAgdTggYlBkb0lkX3AsIEJPT0wgZlR4UnhfcCwgdTggYk5vZGVJZCwgdTggYk1hcHBpbmdWZXJzaW9uLAorICAgIHRFcGxQZG9NYXBwaW5nICogcE1hcHBpbmdfcCwgdTggYk1heEVudHJpZXNfcCk7CiAKIHRFcGxLZXJuZWwgRXBsUGRvdUdldE1hcHBpbmcoCi0gICAgQllURSBiUGRvSWRfcCwgQk9PTCBmVHhSeF9wLCBCWVRFICogcGJOb2RlSWQsIEJZVEUgKiBwYk1hcHBpbmdWZXJzaW9uLAotICAgIHRFcGxQZG9NYXBwaW5nICogcE1hcHBpbmdfcCwgQllURSAqIHBiTWF4RW50cmllc19wKTsKKyAgICB1OCBiUGRvSWRfcCwgQk9PTCBmVHhSeF9wLCB1OCAqIHBiTm9kZUlkLCB1OCAqIHBiTWFwcGluZ1ZlcnNpb24sCisgICAgdEVwbFBkb01hcHBpbmcgKiBwTWFwcGluZ19wLCB1OCAqIHBiTWF4RW50cmllc19wKTsKICovCiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExfUERPVV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0FzbmR1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXNuZHUuaAppbmRleCBlMzQ5NTlmLi5hNjJkNGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXNuZHUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXNuZHUuaApAQCAtNjgsMzkgKzY4LDI4IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxTZG8uaCIKLSNpbmNsdWRlICIuLi9FcGxEbGwuaCIKLQogI2lmbmRlZiBfRVBMU0RPQVNORFVfSF8KICNkZWZpbmUgX0VQTFNET0FTTkRVX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbFNkby5oIgorI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET19BU05EKSkgIT0gMCkKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVJbml0KHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzbmR1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdUFkZEluc3RhbmNlKHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzbmR1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKiBwU2RvQ29uSGFuZGxlX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzbmR1SW5pdENvbih0RXBsU2RvQ29uSGRsICpwU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1U2VuZERhdGEodEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgICB0RXBsRnJhbWUgKiBwU3JjRGF0YV9wLAotCQkJCSAgICAgIERXT1JEIGR3RGF0YVNpemVfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzbmR1U2VuZERhdGEodEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgICB0RXBsRnJhbWUgKnBTcmNEYXRhX3AsCisJCQkgICAgICAgdTMyIGR3RGF0YVNpemVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Bc25kdURlbENvbih0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wKTsKIAogI2VuZGlmIC8vIGVuZCBvZiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET19BU05EKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0FzeVNlcXUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc3lTZXF1LmgKaW5kZXggNDY1OGI1Zi4uY2M4NjJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0FzeVNlcXUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXN5U2VxdS5oCkBAIC02OCw0NCArNjgsMzMgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBfRVBMU0RPQVNZU0VRVV9IXworI2RlZmluZSBfRVBMU0RPQVNZU0VRVV9IXworCiAjaW5jbHVkZSAiLi4vRXBsU2RvLmgiCiAjaW5jbHVkZSAiRXBsU2RvVWRwdS5oIgogI2luY2x1ZGUgIkVwbFNkb0FzbmR1LmgiCiAjaW5jbHVkZSAiLi4vRXBsRXZlbnQuaCIKICNpbmNsdWRlICJFcGxUaW1lcnUuaCIKIAotI2lmbmRlZiBfRVBMU0RPQVNZU0VRVV9IXwotI2RlZmluZSBfRVBMU0RPQVNZU0VRVV9IXwordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFJbml0KHRFcGxTZG9Db21SZWNlaXZlQ2IgZnBTZG9Db21DYl9wLAorCQkJICAgIHRFcGxTZG9Db21Db25DYiBmcFNkb0NvbUNvbkNiX3ApOwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXN5U2VxSW5pdCh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxQWRkSW5zdGFuY2UodEVwbFNkb0NvbVJlY2VpdmVDYiBmcFNkb0NvbUNiX3AsCiAJCQkJICAgdEVwbFNkb0NvbUNvbkNiIGZwU2RvQ29tQ29uQ2JfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcUFkZEluc3RhbmNlKHRFcGxTZG9Db21SZWNlaXZlQ2IgZnBTZG9Db21DYl9wLAotCQkJCQkgIHRFcGxTZG9Db21Db25DYiBmcFNkb0NvbUNvbkNiX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXN5U2VxRGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcUluaXRDb24odEVwbFNkb1NlcUNvbkhkbCAqcFNkb1NlcUNvbkhkbF9wLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJICAgICAgIHRFcGxTZG9UeXBlIFNkb1R5cGUpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFJbml0Q29uKHRFcGxTZG9TZXFDb25IZGwgKiBwU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSk7Cit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcVNlbmREYXRhKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkJdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCwKKwkJCQl0RXBsRnJhbWUgKnBEYXRhX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFTZW5kRGF0YSh0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wLAotCQkJCSAgICAgICB0RXBsRnJhbWUgKiBwRGF0YV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEV2ZW50X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEV2ZW50X3ApOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFEZWxDb24odEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbENvbih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTFNET0FTWVNFUVVfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Db211LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQ29tdS5oCmluZGV4IDNlNDU0YzcuLjRlZWU2ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Db211LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0NvbXUuaApAQCAtNjgsNTggKzY4LDQ2IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgX0VQTFNET0NPTVVfSF8KKyNkZWZpbmUgX0VQTFNET0NPTVVfSF8KKwogI2luY2x1ZGUgIi4uL0VwbFNkby5oIgogI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgogI2luY2x1ZGUgIi4uL0VwbFNkb0FjLmgiCiAjaW5jbHVkZSAiRXBsT2JkdS5oIgogI2luY2x1ZGUgIkVwbFNkb0FzeVNlcXUuaCIKIAotI2lmbmRlZiBfRVBMU0RPQ09NVV9IXwotI2RlZmluZSBfRVBMU0RPQ09NVV9IXwordEVwbEtlcm5lbCBFcGxTZG9Db21Jbml0KHZvaWQpOwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsU2RvQ29tQWRkSW5zdGFuY2Uodm9pZCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUluaXQodm9pZCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUFkZEluc3RhbmNlKHZvaWQpOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21EZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tRGVsSW5zdGFuY2Uodm9pZCk7CiAKICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbURlZmluZUNvbih0RXBsU2RvQ29tQ29uSGRsICogcFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3AsCi0JCQkJICAgICB0RXBsU2RvVHlwZSBQcm90VHlwZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tRGVmaW5lQ29uKHRFcGxTZG9Db21Db25IZGwgKnBTZG9Db21Db25IZGxfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wLAorCQkJICAgICAgdEVwbFNkb1R5cGUgUHJvdFR5cGVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUluaXRUcmFuc2ZlckJ5SW5kZXgodEVwbFNkb0NvbVRyYW5zUGFyYW1CeUluZGV4ICoKLQkJCQkJICAgICAgIHBTZG9Db21UcmFuc1BhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21Jbml0VHJhbnNmZXJCeUluZGV4KHRFcGxTZG9Db21UcmFuc1BhcmFtQnlJbmRleCAqcFNkb0NvbVRyYW5zUGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbVVuZGVmaW5lQ29uKHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21VbmRlZmluZUNvbih0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tR2V0U3RhdGUodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCwKLQkJCQkgICAgdEVwbFNkb0NvbUZpbmlzaGVkICogcFNkb0NvbUZpbmlzaGVkX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21HZXRTdGF0ZSh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB0RXBsU2RvQ29tRmluaXNoZWQgKnBTZG9Db21GaW5pc2hlZF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tU2RvQWJvcnQodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCwKLQkJCQkgICAgRFdPUkQgZHdBYm9ydENvZGVfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbVNkb0Fib3J0KHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3AsCisJCQkgICAgIHUzMiBkd0Fib3J0Q29kZV9wKTsKIAogI2VuZGlmCiAKIC8vIGZvciBmdXR1cmUgZXh0ZW50aW9uCiAvKgotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQWxsQnlJbmRleCh0RXBsU2RvQ29tVHJhbnNQYXJhbUFsbEJ5SW5kZXgqIHBTZG9Db21UcmFuc1BhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21Jbml0VHJhbnNmZXJBbGxCeUluZGV4KHRFcGxTZG9Db21UcmFuc1BhcmFtQWxsQnlJbmRleCogcFNkb0NvbVRyYW5zUGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUluaXRUcmFuc2ZlckJ5TmFtZSh0RXBsU2RvQ29tVHJhbnNQYXJhbUJ5TmFtZSogcFNkb0NvbVRyYW5zUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXRUcmFuc2ZlckJ5TmFtZSh0RXBsU2RvQ29tVHJhbnNQYXJhbUJ5TmFtZSogcFNkb0NvbVRyYW5zUGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUluaXRUcmFuc2ZlckZpbGUodEVwbFNkb0NvbVRyYW5zUGFyYW1GaWxlKiBwU2RvQ29tVHJhbnNQYXJhbV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tSW5pdFRyYW5zZmVyRmlsZSh0RXBsU2RvQ29tVHJhbnNQYXJhbUZpbGUqIHBTZG9Db21UcmFuc1BhcmFtX3ApOwogCiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvVWRwdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb1VkcHUuaAppbmRleCAyZDc3YjZmLi4xM2UyYTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvVWRwdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9VZHB1LmgKQEAgLTY4LDQxICs2OCwyOSBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsU2RvLmgiCi0KICNpZm5kZWYgX0VQTFNET1VEUFVfSF8KICNkZWZpbmUgX0VQTFNET1VEUFVfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsU2RvLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX1VEUCkpICE9IDApCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVJbml0KHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCk7Cit0RXBsS2VybmVsIEVwbFNkb1VkcHVJbml0KHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVBZGRJbnN0YW5jZSh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApOwordEVwbEtlcm5lbCBFcGxTZG9VZHB1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxTZG9VZHB1RGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVDb25maWcodW5zaWduZWQgbG9uZyB1bElwQWRkcl9wLAotCQkJCSAgIHVuc2lnbmVkIGludCB1aVBvcnRfcCk7Cit0RXBsS2VybmVsIEVwbFNkb1VkcHVDb25maWcodW5zaWduZWQgbG9uZyB1bElwQWRkcl9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aVBvcnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKiBwU2RvQ29uSGFuZGxlX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUluaXRDb24odEVwbFNkb0NvbkhkbCAqcFNkb0NvbkhhbmRsZV9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAotCQkJCSAgICAgdEVwbEZyYW1lICogcFNyY0RhdGFfcCwKLQkJCQkgICAgIERXT1JEIGR3RGF0YVNpemVfcCk7Cit0RXBsS2VybmVsIEVwbFNkb1VkcHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAorCQkJICAgICAgdEVwbEZyYW1lICpwU3JjRGF0YV9wLCB1MzIgZHdEYXRhU2l6ZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdURlbENvbih0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdURlbENvbih0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wKTsKIAogI2VuZGlmIC8vIGVuZCBvZiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET19VRFApKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU3RhdHVzdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFN0YXR1c3UuaAppbmRleCBkMjExOTM1Li4wZmQzZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU3RhdHVzdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTdGF0dXN1LmgKQEAgLTY4LDM3ICs2OCwyMyBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsRGxsLmgiCi0KICNpZm5kZWYgX0VQTFNUQVRVU1VfSF8KICNkZWZpbmUgX0VQTFNUQVRVU1VfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbFN0YXR1c3VDYlJlc3BvbnNlKSAodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgICAgdEVwbFN0YXR1c1Jlc3BvbnNlICpwU3RhdHVzUmVzcG9uc2VfcCk7CiAKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsU3RhdHVzdUNiUmVzcG9uc2UpICh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgICB0RXBsU3RhdHVzUmVzcG9uc2UgKgotCQkJCQkJICAgIHBTdGF0dXNSZXNwb25zZV9wKTsKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdUluaXQodm9pZCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxTdGF0dXN1QWRkSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxTdGF0dXN1RGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VBZGRJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdVJlc2V0KHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1RGVsSW5zdGFuY2Uodm9pZCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VSZXNldCh2b2lkKTsKLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdVJlcXVlc3RTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgdEVwbFN0YXR1c3VDYlJlc3BvbnNlCi0JCQkJCQkgIHBmbkNiUmVzcG9uc2VfcCk7Cit0RXBsS2VybmVsIEVwbFN0YXR1c3VSZXF1ZXN0U3RhdHVzUmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgIHRFcGxTdGF0dXN1Q2JSZXNwb25zZSBwZm5DYlJlc3BvbnNlX3ApOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMU1RBVFVTVV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFRpbWVydS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFRpbWVydS5oCmluZGV4IDQwNDQ5NTUuLjVjNDQ3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxUaW1lcnUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsVGltZXJ1LmgKQEAgLTY4LDQwICs2OCwyOCBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsVGltZXIuaCIKLSNpbmNsdWRlICJFcGxFdmVudHUuaCIKLQogI2lmbmRlZiBfRVBMVElNRVJVX0hfCiAjZGVmaW5lIF9FUExUSU1FUlVfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsVGltZXIuaCIKKyNpbmNsdWRlICJFcGxFdmVudHUuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbFRpbWVydUluaXQodm9pZCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxUaW1lcnVBZGRJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1SW5pdCh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJ1RGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydUFkZEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lcnVTZXRUaW1lck1zKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3AsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKKwkJCSAgICAgICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lcnVNb2RpZnlUaW1lck1zKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3AsCisJCQkJICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAorCQkJCSAgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVTZXRUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJICAgICAgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApOwordEVwbEtlcm5lbCBFcGxUaW1lcnVEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJCSB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydURlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wKTsKLQotQk9PTCBQVUJMSUMgRXBsVGltZXJ1SXNUaW1lckFjdGl2ZSh0RXBsVGltZXJIZGwgVGltZXJIZGxfcCk7CitCT09MIEVwbFRpbWVydUlzVGltZXJBY3RpdmUodEVwbFRpbWVySGRsIFRpbWVySGRsX3ApOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMVElNRVJVX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwppbmRleCBlYzk4ZGE1Li44ZGM1NTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTEyMDMsOCArMTIwMyw3IEBACiAKIAkJcE1wUmZkID0gKFBNUF9SRkQpIGxpc3RfZW50cnkoZWxlbWVudCwgTVBfUkZELCBsaXN0X25vZGUpOwogCi0JCWxpc3RfZGVsKCZwTXBSZmQtPmxpc3Rfbm9kZSk7Ci0JCWxpc3RfYWRkX3RhaWwoJnBNcFJmZC0+bGlzdF9ub2RlLCAmcEFkYXB0ZXItPlJ4UmluZy5SZWN2TGlzdCk7CisJCWxpc3RfbW92ZV90YWlsKCZwTXBSZmQtPmxpc3Rfbm9kZSwgJnBBZGFwdGVyLT5SeFJpbmcuUmVjdkxpc3QpOwogCX0KIAogCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL1JFQURNRQppbmRleCAwN2M5ZWY5Li5jZDA3YWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvUkVBRE1FCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9SRUFETUUKQEAgLTEsMjggKzEsNDcgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBVU0IgVHJhbnpwb3J0IGFuZCBBbHBoYXRyYWNrIEtlcm5lbCBkcml2ZXJzIGZvciBMaW51eC4KK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBMaW51eCBVU0IgVHJhbnpwb3J0IGFuZCBBbHBoYXRyYWNrIEtlcm5lbCBkcml2ZXJzLgogCi1BdCBwcmVzZW50IHRoZSB0cmFuenBvcnQgZG9lcyByZWFkcy93cml0ZXMgb2YgOCBieXRlIGNtZHMgdG8gL2Rldi90cmFuenBvcnQwIHRvIGNvbnRyb2wKLXRoZSBsaWdodHMgYW5kIHNjcmVlbiBhbmQgd2hlZWwKK1NlZSBodHRwOi8vd3d3LmZyb250aWVyZGVzaWduLmNvbSBmb3IgZGV0YWlscyBvbiB0aGVzZSBkZXZpY2VzLgogCi1BdCBwcmVzZW50IHRoZSBhbHBoYXRyYWNrIGFjY2VwdHMgcmVhZHMvd3JpdGVzIG9mIDEyIGJ5dGUgY21kcyB0byAvZGV2L3RyYW56cG9ydDAgdG8gY29udHJvbAotdGhlIGxpZ2h0cyBhbmQgc2NyZWVuIGFuZCBmYWRlci4KK1VzZXJzcGFjZSB0ZXN0IGNvZGUgaXMgYXZhaWxhYmxlIGZyb20KIAotQm90aCBkcml2ZXJzIGFsc28gaGF2ZSBzb21lIHN5c2ZzIGhvb2tzIHRoYXQgYXJlIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQuCitnaXQ6Ly90b3V0YXRpcy5pc2Mub3JnL2hvbWUvZC9zcmMvZ2l0L2Zyb250aWVyLmdpdAogCi1UaGUgQVBJIGlzIGN1cnJlbnRseSBjbG9zZWx5IHRpZWQgdG8gdGhlIGFyZG91ciByZXZpc2lvbiBhbmQgV0lMTCBjaGFuZ2UuCitBdCBwcmVzZW50IHRoZSB0cmFuenBvcnQgZG9lcyByZWFkcy93cml0ZXMgb2YgOCBieXRlIGNtZHMgdG8KKy9kZXYvdHJhbnpwb3J0MCB0byBjb250cm9sIHRoZSBsaWdodHMsIHNjcmVlbiwgYW5kIHdoZWVsLgogCi1BIHN5c2ZzIGludGVyZmFjZSBpcyBQRVJGRUNUIGZvciBzaW1wbGUgdXNlcnNwYWNlIGFwcHMgdG8gZG8gZnVuIHRoaW5ncyB3aXRoIHRoZQotbGlnaHRzIGFuZCBzY3JlZW4uIEl0J3MgZmFpcmx5IGxvdXN5IGZvciBoYW5kbGluZyBpbnB1dCBldmVudHMgYW5kIHZlcnkgbG91c3kKLWZvciB3YXRjaGluZyB0aGUgc3RhdGUgb2YgdGhlIHNodXR0bGUgd2hlZWwuCitBdCBwcmVzZW50IHRoZSBhbHBoYXRyYWNrIGFjY2VwdHMgcmVhZHMvd3JpdGVzIG9mIDEyIGJ5dGUgY21kcyB0bworL2Rldi90cmFuenBvcnQwIHRvIGNvbnRyb2wgdGhlIGxpZ2h0cywgc2NyZWVuLCBmYWRlciBhbmQgdG91Y2hwYWQuCiAKLUEgbGludXggaW5wdXQgZXZlbnRzIGludGVyZmFjZSBpcyBncmVhdCBmb3IgdGhlIGlucHV0IGV2ZW50cyBhbmQgc2h1dHRsZSB3aGVlbC4gSXQncwotdGhlb3JldGljYWxseSBPSyBvbiBMRURzLiBBIEZhZGVyIGNhbiBiZSBtYXBwZWQgdG8gYW4gYWJzb2x1dGUgbW91c2UgZGV2aWNlLgotQnV0IHRoZXJlIGlzIG5vIExDRCBzdXBwb3J0IGF0IGFsbC4KK1RoZSB0cmFuenBvcnQgZHJpdmVyIHByb3ZpZGVzIGEgcnVkaW1lbnRhcnkgc3lzZnMgaW50ZXJmYWNlIGZvciB0aGUgc3RhdHVzIG9mCit0aGUgZGV2aWNlIGFuZCBhIHdyaXRhYmxlIHBhcmFtZXRlciBmb3IgdHVybmluZyB3aGVlbCBjb21wcmVzc2lvbiBvbiBhbmQgb2ZmLgogCi1JbiB0aGUgZW5kIHRoaXMgaXMgZ29pbmcgdG8gYmUgZHJpdmVuIGJ5IGEgbWlkaSBsYXllciwgd2hpY2ggaGFuZGxlcyBhbGwgdGhvc2UKLWNhc2VzIHZpYSBhIGRlZmluZWQgQVBJLCBidXQgLSBhbW9uZyBvdGhlciB0aGluZ3MgLSBpcyBzbG93LCBkb2Vzbid0IGRvCi1mbG93IGNvbnRyb2wsIGFuZCBpcyBhIExPVCBvZiBleHRyYSB3b3JrLiBGcmFua2x5LCBJJ2QgbGlrZSB0byBrZWVwIHRoZQorVGhlIEFQSSBpcyBub3RoaW5nIG1vcmUgdGhhbiB0aGUgVVNCIGNvbW1hbmRzIGlzc3VlZCB0byB0aGUgZGV2aWNlLiBXaHk/CisKK1RoZSBjb250cm9sIHdoZWVsL2ZhZGVyIGNhbiBnZW5lcmF0ZSBldmVudHMgZmFyIHRvbyBxdWlja2x5IGZvcgorYSB0eXBpY2FsIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB0byBrZWVwIHVwIHdpdGggdGhlbSB2aWEgbGlidXNiLiBJbnB1dAorbmVlZHMgdG8gYmUgMTAwJSBhY2N1cmF0ZSBhbmQgZmFzdCBpbiBvcmRlciBmb3IgdGhlIGFscGhhdHJhY2sgb3IgdHJhbnpwb3J0Cit0byBiZSB1c2VmdWwuCisKK1VJTyB3b3VsZCBiZSB1c2VmdWwgZXhjZXB0IHRoYXQgdXNiIGRpc2Nvbm5lY3QgZXZlbnRzIG5lZWQKK3RvIGJlIGhhbmRsZWQgY29ycmVjdGx5LgorCitBIHN5c2ZzIGludGVyZmFjZSBpcyBwZXJmZWN0IGZvciBzaW1wbGUgdXNlcnNwYWNlIGFwcHMgdG8gZG8gZnVuIHRoaW5ncyB3aXRoCit0aGUgbGlnaHRzIGFuZCBzY3JlZW4uIEJ1dCBpdCdzIGZhaXJseSBsb3VzeSBmb3IgaGFuZGxpbmcgaW5wdXQgZXZlbnRzIGFuZAordmVyeSBsb3VzeSBmb3Igd2F0Y2hpbmcgdGhlIHN0YXRlIG9mIHRoZSBzaHV0dGxlIHdoZWVsLgorCitBIGxpbnV4IGlucHV0IGV2ZW50cyBpbnRlcmZhY2UgaXMgZ3JlYXQgZm9yIHRoZSBpbnB1dCBldmVudHMgYW5kIHNodXR0bGUgd2hlZWwuCisqIEl0J3MgdGhlb3JldGljYWxseSBPSyBvbiBMRURzLgorKiBBIGZhZGVyIGNhbiBiZSBtYXBwZWQgdG8gYW4gYWJzb2x1dGUgbW91c2UgZGV2aWNlLgorKiBCdXQgdGhlcmUgaXMgbm8gTENEIHN1cHBvcnQgYXQgYWxsLCBvciBmYWRlciBmZWVkYmFjayBzdXBwb3J0IGluIHRoYXQgQVBJCisKK1NvLCB0aHVzLCB0aGVzZSBzdHViYnkgZHJpdmVycyBleGlzdC4KKworSW4gdGhlIGVuZCB0aGlzIGNvdWxkIGJlIGRyaXZlbiBieSBhIG1pZGkgbGF5ZXIsIHdoaWNoIGhhbmRsZXMgYWxsIHRob3NlCitjYXNlcyB2aWEgYSB3ZWxsIGRlZmluZWQgQVBJLCBidXQgLSBhbW9uZyBvdGhlciB0aGluZ3MgLSBpcyBzbG93LCBkb2Vzbid0IGRvCitmbG93IGNvbnRyb2wsIGFuZCBpcyBhIExPVCBvZiBleHRyYSB3b3JrLCBub25lIG9mIHdoaWNoIGlzIHJlcXVpcmVkIGF0Cit0aGUga2VybmVsIGxldmVsIChwcm9iYWJseSkuIEZyYW5rbHksIEknZCBsaWtlIHRvIGtlZXAgdGhlCiBjb3JlIGRyaXZlciBzaW1wbGUgYmVjYXVzZSB0aGUgb25seSByZWFsdGltZSB3b3JrIHJlYWxseSByZXF1aXJlZCBpcwogdGhlIGJvdHRvbSBoYWxmIGludGVycnVwdCBoYW5kbGVyIGFuZCB0aGUgb3V0cHV0IG92ZXJsYXBwaW5nLgogCi1FeHBvc2luZyBzb21lIHNvcnQgb2YgY2xlYW4gYWlvIGFwaSB0byB1c2Vyc3BhY2Ugd291bGQgYmUgcGVyZmVjdC4gV2hhdCB0aGF0CitFeHBvc2luZyBzb21lIHNvcnQgb2YgY2xlYW4gYXBpIHRvIHVzZXJzcGFjZSB3b3VsZCBiZSBwZXJmZWN0LiBXaGF0IHRoYXQKIEFQSSBsb29rcyBsaWtlPyBHYWguIGJlYXRzIG1lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmMKaW5kZXggNjEzNmUzZi4uYmNiYTE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5jCkBAIC00MSwxOSArNDEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCi0jaW5jbHVkZSAic3VyZmFjZV9zeXNmcy5oIgotCi0vKiBtYWtlIHRoaXMgd29yayBvbiBvbGRlciBrZXJuZWwgdmVyc2lvbnMgKi8KLQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQotI2luY2x1ZGUgImZyb250aWVyX2NvbXBhdC5oIgotI2VuZGlmIC8qIG9sZGVyIGtlcm5lbCB2ZXJzaW9ucyAqLwotCiAjaW5jbHVkZSAiYWxwaGF0cmFjay5oIgogCiAjZGVmaW5lIFZFTkRPUl9JRAkweDE2NWIKQEAgLTYyLDE5ICs1NCwxOCBAQAogI2lmZGVmIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMKICNkZWZpbmUgVVNCX0FMUEhBVFJBQ0tfTUlOT1JfQkFTRQkwCiAjZWxzZQotLy8gRklYTUUgMTc2IC0gaXMgYW5vdGhlciBkcml2ZXIncyBtaW5vciAtIGFwcGx5IGZvciB0aGF0Ci0vLyAjZGVmaW5lIFVTQl9BTFBIQVRSQUNLX01JTk9SX0JBU0UJMTc3CisvKiBGSVhNRSAxNzYgLSBpcyBhbm90aGVyIGRyaXZlcidzIG1pbm9yIC0gYXBwbHkgZm9yIHRoYXQgKi8KICNkZWZpbmUgVVNCX0FMUEhBVFJBQ0tfTUlOT1JfQkFTRQkxNzYKICNlbmRpZgogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2FscGhhdHJhY2tfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCkgfSwKLQl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2FscGhhdHJhY2tfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRShWRU5ET1JfSUQsIFBST0RVQ1RfSUQpfSwKKwl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiX2FscGhhdHJhY2tfdGFibGUpOwotTU9EVUxFX1ZFUlNJT04oIjAuNDAiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjQxIik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIFRhaHQgPG1AdGFodC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFscGhhdHJhY2sgVVNCIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtOTMsMTggKzg0LDE4IEBACiAjZGVmaW5lIEFMUEhBVFJBQ0tfVVNCX1RJTUVPVVQgMTAKICNkZWZpbmUgT1VUUFVUX0NNRF9TSVpFIDgKICNkZWZpbmUgSU5QVVRfQ01EX1NJWkUgMTIKKyNkZWZpbmUgQUxQSEFUUkFDS19ERUJVRyAwCiAKLQotc3RhdGljIGludCBkZWJ1ZyA9IDA7CitzdGF0aWMgaW50IGRlYnVnID0gQUxQSEFUUkFDS19ERUJVRzsKIAogLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCi0jZGVmaW5lIGRiZ19pbmZvKGRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnKSBkZXZfaW5mbyhkZXYgLCBmb3JtYXQgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorI2RlZmluZSBkYmdfaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbyBcCisgICAgeyBpZiAoZGVidWcpIGRldl9pbmZvKGRldiAsIGZvcm1hdCAsICMjIGFyZyk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgYWxwaGF0cmFja19vY21kX2luZm8oZGV2LCBjbWQsIGZvcm1hdCwgYXJnLi4uKQogCiAjZGVmaW5lIGFscGhhdHJhY2tfaWNtZF9pbmZvKGRldiwgY21kLCBmb3JtYXQsIGFyZy4uLikKIAotCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwogCiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwpAQCAtMTE2LDE0ICsxMDcsMTQgQEAKIAogc3RhdGljIGludCByaW5nX2J1ZmZlcl9zaXplID0gUklOR19CVUZGRVJfU0laRTsKIAotbW9kdWxlX3BhcmFtKHJpbmdfYnVmZmVyX3NpemUsIGludCwgIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKHJpbmdfYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHJpbmdfYnVmZmVyX3NpemUsICJSZWFkIHJpbmcgYnVmZmVyIHNpemUiKTsKIAogLyogVGhlIHdyaXRlX2J1ZmZlciBjYW4gb25lIGRheSBjb250YWluIG1vcmUgdGhhbiBvbmUgaW50ZXJydXB0IG91dCB0cmFuc2Zlci4KICAqLwogCiBzdGF0aWMgaW50IHdyaXRlX2J1ZmZlcl9zaXplID0gV1JJVEVfQlVGRkVSX1NJWkU7Ci1tb2R1bGVfcGFyYW0od3JpdGVfYnVmZmVyX3NpemUsIGludCwgIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKHdyaXRlX2J1ZmZlcl9zaXplLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyh3cml0ZV9idWZmZXJfc2l6ZSwgIldyaXRlIGJ1ZmZlciBzaXplIik7CiAKIC8qCkBAIC0xMzMsNTUgKzEyNCw1NiBAQAogCiBzdGF0aWMgaW50IG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPSBBTFBIQVRSQUNLX1VTQl9USU1FT1VUOwogbW9kdWxlX3BhcmFtKG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwsICJNaW5pbXVtIGludGVycnVwdCBpbiBpbnRlcnZhbCBpbiBtcyIpOworTU9EVUxFX1BBUk1fREVTQyhtaW5faW50ZXJydXB0X2luX2ludGVydmFsLAorCQkgIk1pbmltdW0gaW50ZXJydXB0IGluIGludGVydmFsIGluIG1zIik7CiAKIHN0YXRpYyBpbnQgbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSBBTFBIQVRSQUNLX1VTQl9USU1FT1VUOwogbW9kdWxlX3BhcmFtKG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCwgIk1pbmltdW0gaW50ZXJydXB0IG91dCBpbnRlcnZhbCBpbiBtcyIpOwotCi0KK01PRFVMRV9QQVJNX0RFU0MobWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwsCisJCSAiTWluaW11bSBpbnRlcnJ1cHQgb3V0IGludGVydmFsIGluIG1zIik7CiAKIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCiAKIHN0cnVjdCB1c2JfYWxwaGF0cmFjayB7Ci0Jc3RydWN0IHNlbWFwaG9yZQlzZW07CQkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlKglpbnRmOwkJLyogc2F2ZSBvZmYgdGhlIHVzYiBpbnRlcmZhY2UgcG9pbnRlciAqLwotCWludAkJCW9wZW5fY291bnQ7CS8qIG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIGJlZW4gb3BlbmVkICovCisJc3RydWN0IHNlbWFwaG9yZSBzZW07CS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CS8qIHNhdmUgb2ZmIHRoZSB1c2IgaW50ZXJmYWNlIHBvaW50ZXIgKi8KKwlpbnQgb3Blbl9jb3VudDsJCS8qIG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIGJlZW4gb3BlbmVkICovCiAKLQlzdHJ1Y3QgYWxwaGF0cmFja19pY21kCSgqcmluZ19idWZmZXIpW1JJTkdfQlVGRkVSX1NJWkVdOyAvKiBqdXN0IG1ha2UgYyBoYXBweSAqLwotCXN0cnVjdCBhbHBoYXRyYWNrX29jbWQJKCp3cml0ZV9idWZmZXIpW1dSSVRFX0JVRkZFUl9TSVpFXTsgLyoganVzdCBtYWtlIGMgaGFwcHkgKi8KLQl1bnNpZ25lZCBpbnQJCXJpbmdfaGVhZDsKLQl1bnNpZ25lZCBpbnQJCXJpbmdfdGFpbDsKKwkvKiBtYWtlIGdjYyBoYXBweSAqLworCXN0cnVjdCBhbHBoYXRyYWNrX2ljbWQgKCpyaW5nX2J1ZmZlcilbUklOR19CVUZGRVJfU0laRV07CisJc3RydWN0IGFscGhhdHJhY2tfb2NtZCAoKndyaXRlX2J1ZmZlcilbV1JJVEVfQlVGRkVSX1NJWkVdOworCXVuc2lnbmVkIGludCByaW5nX2hlYWQ7CisJdW5zaWduZWQgaW50IHJpbmdfdGFpbDsKIAotCXdhaXRfcXVldWVfaGVhZF90CXJlYWRfd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3cml0ZV93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cml0ZV93YWl0OwogCi0JdW5zaWduZWQgY2hhcioJCWludGVycnVwdF9pbl9idWZmZXI7Ci0JdW5zaWduZWQgY2hhcioJCW9sZGlfYnVmZmVyOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogaW50ZXJydXB0X2luX2VuZHBvaW50OwotCXN0cnVjdCB1cmIqCQlpbnRlcnJ1cHRfaW5fdXJiOwotCWludAkJCWludGVycnVwdF9pbl9pbnRlcnZhbDsKLQlzaXplX3QJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZTsKLQlpbnQJCQlpbnRlcnJ1cHRfaW5fcnVubmluZzsKLQlpbnQJCQlpbnRlcnJ1cHRfaW5fZG9uZTsKKwl1bnNpZ25lZCBjaGFyICppbnRlcnJ1cHRfaW5fYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKm9sZGlfYnVmZmVyOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaW50ZXJydXB0X2luX2VuZHBvaW50OworCXN0cnVjdCB1cmIgKmludGVycnVwdF9pbl91cmI7CisJaW50IGludGVycnVwdF9pbl9pbnRlcnZhbDsKKwlzaXplX3QgaW50ZXJydXB0X2luX2VuZHBvaW50X3NpemU7CisJaW50IGludGVycnVwdF9pbl9ydW5uaW5nOworCWludCBpbnRlcnJ1cHRfaW5fZG9uZTsKIAotCWNoYXIqCQkJaW50ZXJydXB0X291dF9idWZmZXI7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yKiBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50OwotCXN0cnVjdCB1cmIqCQlpbnRlcnJ1cHRfb3V0X3VyYjsKLQlpbnQJCQlpbnRlcnJ1cHRfb3V0X2ludGVydmFsOwotCXNpemVfdAkJCWludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZTsKLQlpbnQJCQlpbnRlcnJ1cHRfb3V0X2J1c3k7CisJY2hhciAqaW50ZXJydXB0X291dF9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfb3V0X2VuZHBvaW50OworCXN0cnVjdCB1cmIgKmludGVycnVwdF9vdXRfdXJiOworCWludCBpbnRlcnJ1cHRfb3V0X2ludGVydmFsOworCXNpemVfdCBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemU7CisJaW50IGludGVycnVwdF9vdXRfYnVzeTsKIAogCWF0b21pY190IHdyaXRlc19wZW5kaW5nOwotCWludCBldmVudDsgLyogYWx0ZXJuYXRlIGludGVyZmFjZSB0byBldmVudHMgKi8KLQlpbnQgZmFkZXI7IC8qIDEwIGJpdHMgKi8KLQlpbnQgbGlnaHRzOyAvKiAyMyBiaXRzICovCi0JdW5zaWduZWQgY2hhciBkdW1wX3N0YXRlOyAvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLwotCXVuc2lnbmVkIGNoYXIgZW5hYmxlOyAvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLwotCXVuc2lnbmVkIGNoYXIgb2ZmbGluZTsgLyogaWYgdGhlIGRldmljZSBpcyBvdXQgb2YgcmFuZ2Ugb3IgYXNsZWVwICovCi0JdW5zaWduZWQgY2hhciB2ZXJib3NlOyAvKiBiZSB2ZXJib3NlIGluIGVycm9yIHJlcG9ydGluZyAqLwotCXVuc2lnbmVkIGNoYXIgIGxhc3RfY21kW09VVFBVVF9DTURfU0laRV07Ci0JdW5zaWduZWQgY2hhciAgc2NyZWVuWzMyXTsKKwlpbnQgZXZlbnQ7CQkvKiBhbHRlcm5hdGUgaW50ZXJmYWNlIHRvIGV2ZW50cyAqLworCWludCBmYWRlcjsJCS8qIDEwIGJpdHMgKi8KKwlpbnQgbGlnaHRzOwkJLyogMjMgYml0cyAqLworCXVuc2lnbmVkIGNoYXIgZHVtcF9zdGF0ZTsJLyogMCBpZiBkaXNhYmxlZCAxIGlmIGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGVuYWJsZTsJLyogMCBpZiBkaXNhYmxlZCAxIGlmIGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBjaGFyIG9mZmxpbmU7CS8qIGlmIHRoZSBkZXZpY2UgaXMgb3V0IG9mIHJhbmdlIG9yIGFzbGVlcCAqLworCXVuc2lnbmVkIGNoYXIgdmVyYm9zZTsJLyogYmUgdmVyYm9zZSBpbiBlcnJvciByZXBvcnRpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIGxhc3RfY21kW09VVFBVVF9DTURfU0laRV07CisJdW5zaWduZWQgY2hhciBzY3JlZW5bMzJdOwogfTsKIAogLyogcHJldmVudCByYWNlcyBiZXR3ZWVuIG9wZW4oKSBhbmQgZGlzY29ubmVjdCgpICovCkBAIC0yMTksNyArMjExLDcgQEAKIAlrZnJlZShkZXYtPnJpbmdfYnVmZmVyKTsKIAlrZnJlZShkZXYtPmludGVycnVwdF9pbl9idWZmZXIpOwogCWtmcmVlKGRldi0+aW50ZXJydXB0X291dF9idWZmZXIpOwotCWtmcmVlKGRldik7IC8vIGZpeG1lIG9sZGlfYnVmZmVyCisJa2ZyZWUoZGV2KTsJCS8qIGZpeG1lIG9sZGlfYnVmZmVyICovCiB9CiAKIC8qKgpAQCAtMjM0LDM5ICsyMjYsNTIgQEAKIAogCWlmICh1cmItPnN0YXR1cykgewogCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAotCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHsKKwkJICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8IHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHsKIAkJCWdvdG8gZXhpdDsKIAkJfSBlbHNlIHsKLQkJCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBub256ZXJvIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCi0JCQkJIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7Ci0JCQlnb3RvIHJlc3VibWl0OyAvKiBtYXliZSB3ZSBjYW4gcmVjb3ZlciAqLworCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJCSAiJXM6IG5vbnplcm8gc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwgX19mdW5jX18sCisJCQkJIHVyYi0+c3RhdHVzKTsKKwkJCWdvdG8gcmVzdWJtaXQ7CS8qIG1heWJlIHdlIGNhbiByZWNvdmVyICovCiAJCX0KIAl9CiAKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IElOUFVUX0NNRF9TSVpFKSB7CiAJCWRldl93YXJuKCZkZXYtPmludGYtPmRldiwKLQkJCSAiVXJiIGxlbmd0aCB3YXMgJWQgYnl0ZXMhISBEbyBzb21ldGhpbmcgaW50ZWxsaWdlbnQgXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJICJVcmIgbGVuZ3RoIHdhcyAlZCBieXRlcyEhIgorCQkJICJEbyBzb21ldGhpbmcgaW50ZWxsaWdlbnQgXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0gZWxzZSB7Ci0JCSBhbHBoYXRyYWNrX29jbWRfaW5mbygmZGV2LT5pbnRmLT5kZXYsJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZCwiJXMiLCAiYmxhIik7Ci0JCSBpZihtZW1jbXAoZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLGRldi0+b2xkaV9idWZmZXIsSU5QVVRfQ01EX1NJWkUpPT0wKSB7Ci0JCQkJCQlnb3RvIHJlc3VibWl0OworCQlhbHBoYXRyYWNrX29jbWRfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCQkJICAgICAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kLAorCQkJCSAgICAgIiVzIiwgImJsYSIpOworCQlpZiAobWVtY21wCisJCSAgICAoZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLCBkZXYtPm9sZGlfYnVmZmVyLAorCQkgICAgIElOUFVUX0NNRF9TSVpFKSA9PSAwKSB7CisJCQlnb3RvIHJlc3VibWl0OwogCQl9Ci0JCW1lbWNweShkZXYtPm9sZGlfYnVmZmVyLGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcixJTlBVVF9DTURfU0laRSk7CisJCW1lbWNweShkZXYtPm9sZGlfYnVmZmVyLCBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsCisJCSAgICAgICBJTlBVVF9DTURfU0laRSk7CiAKICNpZiBTVVBQUkVTU19FWFRSQV9PRkZMSU5FX0VWRU5UUwotCWlmKGRldi0+b2ZmbGluZSA9PSAyICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7IGdvdG8gcmVzdWJtaXQ7IH0KLQkJaWYoZGV2LT5vZmZsaW5lID09IDEgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpIHsgZGV2LT5vZmZsaW5lID0gMjsgZ290byByZXN1Ym1pdDsgfQorCQlpZiAoZGV2LT5vZmZsaW5lID09IDIgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpCisJCQlnb3RvIHJlc3VibWl0OworCQlpZiAoZGV2LT5vZmZsaW5lID09IDEgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpIHsKKwkJCWRldi0+b2ZmbGluZSA9IDI7CisJCQlnb3RvIHJlc3VibWl0OworCQl9CiAvKiBBbHdheXMgcGFzcyBvbmUgb2ZmbGluZSBldmVudCB1cCB0aGUgc3RhY2sgKi8KLQkJaWYoZGV2LT5vZmZsaW5lID4gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gIT0gMHhmZikgeyBkZXYtPm9mZmxpbmUgPSAwOyB9Ci0JCWlmKGRldi0+b2ZmbGluZSA9PSAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7IGRldi0+b2ZmbGluZSA9IDE7IH0KKwkJaWYgKGRldi0+b2ZmbGluZSA+IDAgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdICE9IDB4ZmYpCisJCQlkZXYtPm9mZmxpbmUgPSAwOworCQlpZiAoZGV2LT5vZmZsaW5lID09IDAgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpCisJCQlkZXYtPm9mZmxpbmUgPSAxOwogI2VuZGlmCi0JCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsIF9fZnVuY19fLGRldi0+cmluZ19oZWFkLGRldi0+cmluZ190YWlsKTsKLQkJbmV4dF9yaW5nX2hlYWQgPSAoZGV2LT5yaW5nX2hlYWQrMSkgJSByaW5nX2J1ZmZlcl9zaXplOworCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLAorCQkJIF9fZnVuY19fLCBkZXYtPnJpbmdfaGVhZCwgZGV2LT5yaW5nX3RhaWwpOworCQluZXh0X3JpbmdfaGVhZCA9IChkZXYtPnJpbmdfaGVhZCArIDEpICUgcmluZ19idWZmZXJfc2l6ZTsKIAogCQlpZiAobmV4dF9yaW5nX2hlYWQgIT0gZGV2LT5yaW5nX3RhaWwpIHsKIAkJCW1lbWNweSgmKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX2hlYWRdKSwKLQkJCQkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQkgICAgICAgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJZGV2LT5yaW5nX2hlYWQgPSBuZXh0X3JpbmdfaGVhZDsKIAkJCXJldHZhbCA9IDA7CiAJCQltZW1zZXQoZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLCAwLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtMzMwLDcgKzMzNSw3IEBACiAKIAlpZiAoIWludGVyZmFjZSkgewogCQllcnIoIiVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZFxuIiwKLQkJICAgICBfX2Z1bmNfXywgc3VibWlub3IpOworCQkgICAgX19mdW5jX18sIHN1Ym1pbm9yKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byB1bmxvY2tfZGlzY29ubmVjdF9leGl0OwogCX0KQEAgLTM2MSwxMSArMzY2LDExIEBACiAJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsCiAJCQkgaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLAogCQkJIHVzYl9yY3ZpbnRwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSwKLQkJCQkJZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+CisJCQkJCWJFbmRwb2ludEFkZHJlc3MpLAogCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwKIAkJCSBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplLAotCQkJIHVzYl9hbHBoYXRyYWNrX2ludGVycnVwdF9pbl9jYWxsYmFjaywKLQkJCSBkZXYsCisJCQkgdXNiX2FscGhhdHJhY2tfaW50ZXJydXB0X2luX2NhbGxiYWNrLCBkZXYsCiAJCQkgZGV2LT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwpOwogCiAJZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyA9IDE7CkBAIC0zNzUsNyArMzgwLDggQEAKIAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IHN1Ym1pdCBpbnRlcnJ1cHRfaW5fdXJiICVkXG4iLCByZXR2YWwpOworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwKKwkJCSJDb3VsZG4ndCBzdWJtaXQgaW50ZXJydXB0X2luX3VyYiAlZFxuIiwgcmV0dmFsKTsKIAkJZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyA9IDA7CiAJCWRldi0+b3Blbl9jb3VudCA9IDA7CiAJCWdvdG8gdW5sb2NrX2V4aXQ7CkBAIC0zODQsNyArMzkwLDYgQEAKIAkvKiBzYXZlIGRldmljZSBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwogCi0KIHVubG9ja19leGl0OgogCXVwKCZkZXYtPnNlbSk7CiAKQEAgLTQzMCw3ICs0MzUsOSBAQAogCiAJLyogd2FpdCB1bnRpbCB3cml0ZSB0cmFuc2ZlciBpcyBmaW5pc2hlZCAqLwogCWlmIChkZXYtPmludGVycnVwdF9vdXRfYnVzeSkKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53cml0ZV93YWl0LCAhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3ksIDIgKiBIWik7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d3JpdGVfd2FpdCwKKwkJCQkJCSAhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3ksCisJCQkJCQkgMiAqIEhaKTsKIAl1c2JfYWxwaGF0cmFja19hYm9ydF90cmFuc2ZlcnMoZGV2KTsKIAlkZXYtPm9wZW5fY291bnQgPSAwOwogCkBAIC00NDQsNyArNDUxLDcgQEAKIC8qKgogICoJdXNiX2FscGhhdHJhY2tfcG9sbAogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHVzYl9hbHBoYXRyYWNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYl9hbHBoYXRyYWNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQogewogCXN0cnVjdCB1c2JfYWxwaGF0cmFjayAqZGV2OwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKQEAgLTQ2NSw4ICs0NzIsOCBAQAogLyoqCiAgKgl1c2JfYWxwaGF0cmFja19yZWFkCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHVzYl9hbHBoYXRyYWNrX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKLQkJCSAgIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IHVzYl9hbHBoYXRyYWNrX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHVzYl9hbHBoYXRyYWNrICpkZXY7CiAJaW50IHJldHZhbCA9IDA7CkBAIC00OTMsMzAgKzUwMCwzNiBAQAogCX0KIAogCXdoaWxlIChkZXYtPnJpbmdfaGVhZCA9PSBkZXYtPnJpbmdfdGFpbCkgewotCQkJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCQkJCQkJCXJldHZhbCA9IC1FQUdBSU47Ci0JCQkJCQkJCQlnb3RvIHVubG9ja19leGl0OwotCQkJCQl9Ci0JCQkJCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwIDsKLQkJCQkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+cmVhZF93YWl0LCBkZXYtPmludGVycnVwdF9pbl9kb25lKTsKLQkJCQkJaWYgKHJldHZhbCA8IDApIHsKLQkJCQkJCQkJCWdvdG8gdW5sb2NrX2V4aXQ7Ci0JCQkJCX0KKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJZ290byB1bmxvY2tfZXhpdDsKKwkJfQorCQlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMDsKKwkJcmV0dmFsID0KKwkJICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPnJlYWRfd2FpdCwKKwkJCQkJICAgICBkZXYtPmludGVycnVwdF9pbl9kb25lKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlnb3RvIHVubG9ja19leGl0OwogCX0KIAotCWFscGhhdHJhY2tfb2NtZF9pbmZvKCZkZXYtPmludGYtPmRldiwgJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZCwgIiVzIiwgIjogY29weWluZyB0byB1c2Vyc3BhY2UiKTsKKwlhbHBoYXRyYWNrX29jbWRfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCQkgICAgICYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWQsICIlcyIsCisJCQkgICAgICI6IGNvcHlpbmcgdG8gdXNlcnNwYWNlIik7CiAKLQkgICBjID0gMDsKLQkgICB3aGlsZSgoYyA8IGNvdW50KSAmJiAoZGV2LT5yaW5nX3RhaWwgIT0gZGV2LT5yaW5nX2hlYWQpKSB7Ci0JCQkJCQkgaWYgKGNvcHlfdG9fdXNlcigmYnVmZmVyW2NdLCAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0sIElOUFVUX0NNRF9TSVpFKSkgewotCQkJCQkJCQkJCSByZXR2YWwgPSAtRUZBVUxUOwotCQkJCQkJCQkJCSBnb3RvIHVubG9ja19leGl0OwotCQkJCQkJIH0KLQkJCQkJCSBkZXYtPnJpbmdfdGFpbCA9IChkZXYtPnJpbmdfdGFpbCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7Ci0JCQkJCQkgYys9SU5QVVRfQ01EX1NJWkU7Ci0JCQkJCQkgZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGhlYWQsIHRhaWwgYXJlICV4LCAleFxuIiwgX19mdW5jX18sZGV2LT5yaW5nX2hlYWQsZGV2LT5yaW5nX3RhaWwpOwotCSAgIH0KLQkgICByZXR2YWwgPSBjOworCWMgPSAwOworCXdoaWxlICgoYyA8IGNvdW50KSAmJiAoZGV2LT5yaW5nX3RhaWwgIT0gZGV2LT5yaW5nX2hlYWQpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIKKwkJICAgICgmYnVmZmVyW2NdLCAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0sCisJCSAgICAgSU5QVVRfQ01EX1NJWkUpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byB1bmxvY2tfZXhpdDsKKwkJfQorCQlkZXYtPnJpbmdfdGFpbCA9IChkZXYtPnJpbmdfdGFpbCArIDEpICUgcmluZ19idWZmZXJfc2l6ZTsKKwkJYyArPSBJTlBVVF9DTURfU0laRTsKKwkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGhlYWQsIHRhaWwgYXJlICV4LCAleFxuIiwKKwkJCSBfX2Z1bmNfXywgZGV2LT5yaW5nX2hlYWQsIGRldi0+cmluZ190YWlsKTsKKwl9CisJcmV0dmFsID0gYzsKIAogdW5sb2NrX2V4aXQ6CiAJLyogdW5sb2NrIHRoZSBkZXZpY2UgKi8KQEAgLTUyOSw4ICs1NDIsOSBAQAogLyoqCiAgKgl1c2JfYWxwaGF0cmFja193cml0ZQogICovCi1zdGF0aWMgc3NpemVfdCB1c2JfYWxwaGF0cmFja193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IHVzYl9hbHBoYXRyYWNrX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkJICAgIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdXNiX2FscGhhdHJhY2sgKmRldjsKIAlzaXplX3QgYnl0ZXNfdG9fd3JpdGU7CkBAIC01NjEsMTkgKzU3NSwyNCBAQAogCQkJcmV0dmFsID0gLUVBR0FJTjsKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7CiAJCX0KLQkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d3JpdGVfd2FpdCwgIWRldi0+aW50ZXJydXB0X291dF9idXN5KTsKLQkJaWYgKHJldHZhbCA8IDApIHsKKwkJcmV0dmFsID0KKwkJICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndyaXRlX3dhaXQsCisJCQkJCSAgICAgIWRldi0+aW50ZXJydXB0X291dF9idXN5KTsKKwkJaWYgKHJldHZhbCA8IDApCiAJCQlnb3RvIHVubG9ja19leGl0OwotCQl9CiAJfQogCiAJLyogd3JpdGUgdGhlIGRhdGEgaW50byBpbnRlcnJ1cHRfb3V0X2J1ZmZlciBmcm9tIHVzZXJzcGFjZSAqLwotICAvKiBGSVhNRSAtIGlmIHlvdSB3cml0ZSBtb3JlIHRoYW4gMTIgYnl0ZXMgdGhpcyBicmVha3MgKi8KLQlieXRlc190b193cml0ZSA9IG1pbihjb3VudCwgd3JpdGVfYnVmZmVyX3NpemUqZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUpOworCS8qIEZJWE1FIC0gaWYgeW91IHdyaXRlIG1vcmUgdGhhbiAxMiBieXRlcyB0aGlzIGJyZWFrcyAqLworCWJ5dGVzX3RvX3dyaXRlID0KKwkgICAgbWluKGNvdW50LCB3cml0ZV9idWZmZXJfc2l6ZSAqIGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplKTsKIAlpZiAoYnl0ZXNfdG9fd3JpdGUgPCBjb3VudCkKLQkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LCAiV3JpdGUgYnVmZmVyIG92ZXJmbG93LCAlemQgYnl0ZXMgZHJvcHBlZFxuIixjb3VudC1ieXRlc190b193cml0ZSk7CisJCWRldl93YXJuKCZkZXYtPmludGYtPmRldiwKKwkJCSAiV3JpdGUgYnVmZmVyIG92ZXJmbG93LCAlemQgYnl0ZXMgZHJvcHBlZFxuIiwKKwkJCSBjb3VudCAtIGJ5dGVzX3RvX3dyaXRlKTsKIAotCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBjb3VudCA9ICV6ZCwgYnl0ZXNfdG9fd3JpdGUgPSAlemRcbiIsIF9fZnVuY19fLCBjb3VudCwgYnl0ZXNfdG9fd3JpdGUpOworCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBjb3VudCA9ICV6ZCwgYnl0ZXNfdG9fd3JpdGUgPSAlemRcbiIsCisJCSBfX2Z1bmNfXywgY291bnQsIGJ5dGVzX3RvX3dyaXRlKTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLCBidWZmZXIsIGJ5dGVzX3RvX3dyaXRlKSkgewogCQlyZXR2YWwgPSAtRUZBVUxUOwpAQCAtNTg5LDExICs2MDgsMTAgQEAKIAl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0X291dF91cmIsCiAJCQkgaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAogCQkJIHVzYl9zbmRpbnRwaXBlKGludGVyZmFjZV90b191c2JkZXYoZGV2LT5pbnRmKSwKLQkJCQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJCSBkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLAotCQkJIGJ5dGVzX3RvX3dyaXRlLAotCQkJIHVzYl9hbHBoYXRyYWNrX2ludGVycnVwdF9vdXRfY2FsbGJhY2ssCi0JCQkgZGV2LAorCQkJCQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPgorCQkJCQliRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLCBieXRlc190b193cml0ZSwKKwkJCSB1c2JfYWxwaGF0cmFja19pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrLCBkZXYsCiAJCQkgZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsKTsKIAlkZXYtPmludGVycnVwdF9vdXRfYnVzeSA9IDE7CiAJYXRvbWljX2luYygmZGV2LT53cml0ZXNfcGVuZGluZyk7CkBAIC02MTgsMTIgKzYzNiwxMiBAQAogCiAvKiBmaWxlIG9wZXJhdGlvbnMgbmVlZGVkIHdoZW4gd2UgcmVnaXN0ZXIgdGhpcyBkcml2ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9hbHBoYXRyYWNrX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLnJlYWQgID0JdXNiX2FscGhhdHJhY2tfcmVhZCwKLQkud3JpdGUgPQl1c2JfYWxwaGF0cmFja193cml0ZSwKLQkub3BlbiA9CQl1c2JfYWxwaGF0cmFja19vcGVuLAotCS5yZWxlYXNlID0JdXNiX2FscGhhdHJhY2tfcmVsZWFzZSwKLQkucG9sbCA9CQl1c2JfYWxwaGF0cmFja19wb2xsLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gdXNiX2FscGhhdHJhY2tfcmVhZCwKKwkud3JpdGUgPSB1c2JfYWxwaGF0cmFja193cml0ZSwKKwkub3BlbiA9IHVzYl9hbHBoYXRyYWNrX29wZW4sCisJLnJlbGVhc2UgPSB1c2JfYWxwaGF0cmFja19yZWxlYXNlLAorCS5wb2xsID0gdXNiX2FscGhhdHJhY2tfcG9sbCwKIH07CiAKIC8qCkBAIC02MzIsMTkgKzY1MCwxOSBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JfYWxwaGF0cmFja19jbGFzcyA9IHsKLQkubmFtZSA9CQkiYWxwaGF0cmFjayVkIiwKLQkuZm9wcyA9CQkmdXNiX2FscGhhdHJhY2tfZm9wcywKLQkubWlub3JfYmFzZSA9CVVTQl9BTFBIQVRSQUNLX01JTk9SX0JBU0UsCisJLm5hbWUgPSAiYWxwaGF0cmFjayVkIiwKKwkuZm9wcyA9ICZ1c2JfYWxwaGF0cmFja19mb3BzLAorCS5taW5vcl9iYXNlID0gVVNCX0FMUEhBVFJBQ0tfTUlOT1JfQkFTRSwKIH07CiAKLQogLyoqCiAgKgl1c2JfYWxwaGF0cmFja19wcm9iZQogICoKICAqCUNhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiBhIG5ldyBkZXZpY2UgaXMgY29ubmVjdGVkIHRoYXQgaXQgdGhpbmtzCiAgKgl0aGlzIGRyaXZlciBtaWdodCBiZSBpbnRlcmVzdGVkIGluLgogICovCi1zdGF0aWMgaW50IHVzYl9hbHBoYXRyYWNrX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHVzYl9hbHBoYXRyYWNrX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJc3RydWN0IHVzYl9hbHBoYXRyYWNrICpkZXYgPSBOVUxMOwpAQCAtNjgzLDI4ICs3MDEsMzUgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAJaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA9PSBOVUxMKQotCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiSW50ZXJydXB0IG91dCBlbmRwb2ludCBub3QgZm91bmQgKHVzaW5nIGNvbnRyb2wgZW5kcG9pbnQgaW5zdGVhZClcbiIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJICJJbnRlcnJ1cHQgb3V0IGVuZHBvaW50IG5vdCBmb3VuZCIKKwkJCSAiKHVzaW5nIGNvbnRyb2wgZW5kcG9pbnQgaW5zdGVhZClcbiIpOwogCi0JZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSA9IGxlMTZfdG9fY3B1KGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSA9CisJICAgIGxlMTZfdG9fY3B1KGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CiAKIAlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSAhPSA2NCkKLQkgICAgZGV2X3dhcm4oJmludGYtPmRldiwgIkludGVycnVwdCBpbiBlbmRwb2ludCBzaXplIGlzIG5vdCA2NCFcbiIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiSW50ZXJydXB0IGluIGVuZHBvaW50IHNpemUgaXMgbm90IDY0IVxuIik7CiAKLQlpZihyaW5nX2J1ZmZlcl9zaXplID09IDApIHsgcmluZ19idWZmZXJfc2l6ZSA9IFJJTkdfQlVGRkVSX1NJWkU7IH0KKwlpZiAocmluZ19idWZmZXJfc2l6ZSA9PSAwKQorCQlyaW5nX2J1ZmZlcl9zaXplID0gUklOR19CVUZGRVJfU0laRTsKIAotCXRydWVfc2l6ZSA9IG1pbihyaW5nX2J1ZmZlcl9zaXplLFJJTkdfQlVGRkVSX1NJWkUpOworCXRydWVfc2l6ZSA9IG1pbihyaW5nX2J1ZmZlcl9zaXplLCBSSU5HX0JVRkZFUl9TSVpFKTsKIAotCS8qIEZJWE1FIC0gdGhlcmUgYXJlIG1vcmUgdXNiX2FsbG9jIHJvdXRpbmVzIGZvciBkbWEgY29ycmVjdG5lc3MuIE5lZWRlZD8gKi8KLQotLy8JZGV2LT5yaW5nX2J1ZmZlciA9IGttYWxsb2MoKHRydWVfc2l6ZSpzaXplb2Yoc3RydWN0IGFscGhhdHJhY2tfaWNtZCkpKzEyLCBHRlBfS0VSTkVMKTsKLQlkZXYtPnJpbmdfYnVmZmVyID0ga21hbGxvYygodHJ1ZV9zaXplKnNpemVvZihzdHJ1Y3QgYWxwaGF0cmFja19pY21kKSksIEdGUF9LRVJORUwpOworCS8qIEZJWE1FIC0gdGhlcmUgYXJlIG1vcmUgdXNiX2FsbG9jIHJvdXRpbmVzIGZvciBkbWEgY29ycmVjdG5lc3MuCisJICAgTmVlZGVkPyAqLworCWRldi0+cmluZ19idWZmZXIgPQorCSAgICBrbWFsbG9jKCh0cnVlX3NpemUgKiBzaXplb2Yoc3RydWN0IGFscGhhdHJhY2tfaWNtZCkpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2LT5yaW5nX2J1ZmZlcikgewotCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnB1dCByaW5nX2J1ZmZlciBvZiBzaXplICVkXG4iLHRydWVfc2l6ZSk7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJDb3VsZG4ndCBhbGxvY2F0ZSBpbnB1dCByaW5nX2J1ZmZlciBvZiBzaXplICVkXG4iLAorCQkJdHJ1ZV9zaXplKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlkZXYtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jKGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUsIEdGUF9LRVJORUwpOworCWRldi0+aW50ZXJydXB0X2luX2J1ZmZlciA9CisJICAgIGttYWxsb2MoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWRldi0+aW50ZXJydXB0X2luX2J1ZmZlcikgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfaW5fYnVmZmVyXG4iKTsKQEAgLTcyMSwyMyArNzQ2LDMwIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgPSBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPyBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6Ci0JCQkJCQkJCQkgdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CisJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgPQorCSAgICBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPyBsZTE2X3RvX2NwdShkZXYtPgorCQkJCQkJICAgICAgaW50ZXJydXB0X291dF9lbmRwb2ludC0+CisJCQkJCQkgICAgICB3TWF4UGFja2V0U2l6ZSkgOiB1ZGV2LT4KKwkgICAgZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CiAKLQlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgIT02NCkKLQkJZGV2X3dhcm4oJmludGYtPmRldiwgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgc2l6ZSBpcyBub3QgNjQhKVxuIik7CisJaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplICE9IDY0KQorCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJICJJbnRlcnJ1cHQgb3V0IGVuZHBvaW50IHNpemUgaXMgbm90IDY0ISlcbiIpOwogCi0JaWYod3JpdGVfYnVmZmVyX3NpemUgPT0gMCkgeyB3cml0ZV9idWZmZXJfc2l6ZSA9IFdSSVRFX0JVRkZFUl9TSVpFOyB9Ci0JdHJ1ZV9zaXplID0gbWluKHdyaXRlX2J1ZmZlcl9zaXplLFdSSVRFX0JVRkZFUl9TSVpFKTsKKwlpZiAod3JpdGVfYnVmZmVyX3NpemUgPT0gMCkKKwkJd3JpdGVfYnVmZmVyX3NpemUgPSBXUklURV9CVUZGRVJfU0laRTsKKwl0cnVlX3NpemUgPSBtaW4od3JpdGVfYnVmZmVyX3NpemUsIFdSSVRFX0JVRkZFUl9TSVpFKTsKIAotCWRldi0+aW50ZXJydXB0X291dF9idWZmZXIgPSBrbWFsbG9jKHRydWVfc2l6ZSpkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9CisJICAgIGttYWxsb2ModHJ1ZV9zaXplICogZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUsIEdGUF9LRVJORUwpOwogCiAJaWYgKCFkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9vdXRfYnVmZmVyXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlkZXYtPndyaXRlX2J1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbHBoYXRyYWNrX29jbWQpKnRydWVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZGV2LT53cml0ZV9idWZmZXIgPQorCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWxwaGF0cmFja19vY21kKSAqIHRydWVfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWRldi0+d3JpdGVfYnVmZmVyKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIHdyaXRlX2J1ZmZlciBcbiIpOwpAQCAtNzQ5LDI1ICs3ODEsMzYgQEAKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF91cmJcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KLQlkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCA9IG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPiBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkludGVydmFsID8gbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA6IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWw7CisJZGV2LT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPQorCSAgICBtaW5faW50ZXJydXB0X2luX2ludGVydmFsID4KKwkgICAgZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPgorCSAgICBiSW50ZXJ2YWwgPyBtaW5faW50ZXJydXB0X2luX2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPgorCSAgICBiSW50ZXJ2YWw7CiAJaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCkKLQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsID0gbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgPiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbCA/IG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iSW50ZXJ2YWw7CisJCWRldi0+aW50ZXJydXB0X291dF9pbnRlcnZhbCA9CisJCSAgICBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA+CisJCSAgICBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPgorCQkgICAgYkludGVydmFsID8gbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgOiBkZXYtPgorCQkgICAgaW50ZXJydXB0X291dF9lbmRwb2ludC0+YkludGVydmFsOwogCiAJLyogd2UgY2FuIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugbm93LCBhcyBpdCBpcyByZWFkeSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKIAotCWF0b21pY19zZXQoJmRldi0+d3JpdGVzX3BlbmRpbmcsMCk7CisJYXRvbWljX3NldCgmZGV2LT53cml0ZXNfcGVuZGluZywgMCk7CiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX2FscGhhdHJhY2tfY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKIAkJLyogc29tZXRoaW5nIHByZXZlbnRlZCB1cyBmcm9tIHJlZ2lzdGVyaW5nIHRoaXMgZHJpdmVyICovCi0JCWRldl9lcnIoJmludGYtPmRldiwgIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuIik7CiAJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCWRldl9pbmZvKCZpbnRmLT5kZXYsICJBbHBoYXRyYWNrIERldmljZSAjJWQgbm93IGF0dGFjaGVkIHRvIG1ham9yICVkIG1pbm9yICVkXG4iLAotCQkoaW50Zi0+bWlub3IgLSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFKSwgVVNCX01BSk9SLCBpbnRmLT5taW5vcik7CisJZGV2X2luZm8oJmludGYtPmRldiwKKwkJICJBbHBoYXRyYWNrIERldmljZSAjJWQgbm93IGF0dGFjaGVkIHRvIG1ham9yICVkIG1pbm9yICVkXG4iLAorCQkgKGludGYtPm1pbm9yIC0gVVNCX0FMUEhBVFJBQ0tfTUlOT1JfQkFTRSksIFVTQl9NQUpPUiwKKwkJIGludGYtPm1pbm9yKTsKIAogZXhpdDoKIAlyZXR1cm4gcmV0dmFsOwpAQCAtODA5LDcgKzg1Miw3IEBACiAJCXVwKCZkZXYtPnNlbSk7CiAJfQogCi0JYXRvbWljX3NldCgmZGV2LT53cml0ZXNfcGVuZGluZywwKTsKKwlhdG9taWNfc2V0KCZkZXYtPndyaXRlc19wZW5kaW5nLCAwKTsKIAltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJZGV2X2luZm8oJmludGYtPmRldiwgIkFscGhhdHJhY2sgU3VyZmFjZSAjJWQgbm93IGRpc2Nvbm5lY3RlZFxuIiwKQEAgLTgxOCwxMCArODYxLDEwIEBACiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfYWxwaGF0cmFja19kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJImFscGhhdHJhY2siLAotCS5wcm9iZSA9CXVzYl9hbHBoYXRyYWNrX3Byb2JlLAotCS5kaXNjb25uZWN0ID0JdXNiX2FscGhhdHJhY2tfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPQl1c2JfYWxwaGF0cmFja190YWJsZSwKKwkubmFtZSA9ICJhbHBoYXRyYWNrIiwKKwkucHJvYmUgPSB1c2JfYWxwaGF0cmFja19wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHVzYl9hbHBoYXRyYWNrX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gdXNiX2FscGhhdHJhY2tfdGFibGUsCiB9OwogCiAvKioKQEAgLTgzNCw3ICs4NzcsOCBAQAogCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYl9hbHBoYXRyYWNrX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIl9fRklMRV9fIiBkcml2ZXIuIEVycm9yIG51bWJlciAlZFxuIiwgcmV0dmFsKTsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIiBfX0ZJTEVfXworCQkgICAgIiBkcml2ZXIuIEVycm9yIG51bWJlciAlZFxuIiwgcmV0dmFsKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC04NTAsNCArODk0LDMgQEAKIAogbW9kdWxlX2luaXQodXNiX2FscGhhdHJhY2tfaW5pdCk7CiBtb2R1bGVfZXhpdCh1c2JfYWxwaGF0cmFja19leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suaCBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmgKaW5kZXggMzVjOTBhOS4uMTBhNzk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5oCkBAIC0xLDQyICsxLDM4IEBACi0jZGVmaW5lIHNob3dfc2V0X2JpdChhKSBzaG93X3NldF9tYml0KGFscGhhdHJhY2ssYSkKLSNkZWZpbmUgc2hvd19zZXRfY21kKGEpIHNob3dfc2V0X21jbWQoYWxwaGF0cmFjayxhKQotI2RlZmluZSBzaG93X3NldF9pbnQoYSkgc2hvd19zZXRfbWludChhbHBoYXRyYWNrLGEpCi0jZGVmaW5lIHNob3dfc2V0X2NoYXIoYSkgc2hvd19zZXRfbWNoYXIoYWxwaGF0cmFjayxhKQotI2RlZmluZSBzaG93X3NldF9saWdodChhKSBzaG93X3NldF9lYml0KGFscGhhdHJhY2ssTGlnaHRJRCxsaWdodHMsYSkKLSNkZWZpbmUgc2hvd19zZXRfYnV0dG9uKGEpIHNob3dfc2V0X2ViaXQoYWxwaGF0cmFjayxCdXR0b25JRCxidXR0b24sYSkKLQogc3RydWN0IGFscGhhdHJhY2tfaWNtZCB7Ci0gICAgdW5zaWduZWQgY2hhciBjbWRbMTJdOworCXVuc2lnbmVkIGNoYXIgY21kWzEyXTsKIH07CiAKIHN0cnVjdCBhbHBoYXRyYWNrX29jbWQgewotICAgIHVuc2lnbmVkIGNoYXIgY21kWzhdOworCXVuc2lnbmVkIGNoYXIgY21kWzhdOwogfTsKIAorLyogVGhlc2UgYXJlIHVudXNlZCBieSB0aGUgcHJlc2VudCBkcml2ZXIgYnV0IHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgKiB1c2Vyc3BhY2UgQVBJLgorICovCiBlbnVtIExpZ2h0SUQgewotICAgICAgICBMSUdIVF9FUSA9IDAsCi0gICAgICAgIExJR0hUX09VVCwKLSAgICAgICAgTElHSFRfRjIsCi0gICAgICAgIExJR0hUX1NFTkQsCi0gICAgICAgIExJR0hUX0lOLAotICAgICAgICBMSUdIVF9GMSwKLSAgICAgICAgTElHSFRfUEFOLAotICAgICAgICBMSUdIVF9VTkRFRjEsCi0gICAgICAgIExJR0hUX1VOREVGMiwKLSAgICAgICAgTElHSFRfU0hJRlQsCi0gICAgICAgIExJR0hUX1RSQUNLTVVURSwKLSAgICAgICAgTElHSFRfVFJBQ0tTT0xPLAotICAgICAgICBMSUdIVF9UUkFDS1JFQywKLSAgICAgICAgTElHSFRfUkVBRCwKLSAgICAgICAgTElHSFRfV1JJVEUsCi0gICAgICAgIExJR0hUX0FOWVNPTE8sCi0gICAgICAgIExJR0hUX0FVVE8sCi0gICAgICAgIExJR0hUX0Y0LAotICAgICAgICBMSUdIVF9SRUNPUkQsCi0gICAgICAgIExJR0hUX1dJTkRPVywKLSAgICAgICAgTElHSFRfUExVR0lOLAotICAgICAgICBMSUdIVF9GMywKLSAgICAgICAgTElHSFRfTE9PUAorCUxJR0hUX0VRID0gMCwKKwlMSUdIVF9PVVQsCisJTElHSFRfRjIsCisJTElHSFRfU0VORCwKKwlMSUdIVF9JTiwKKwlMSUdIVF9GMSwKKwlMSUdIVF9QQU4sCisJTElHSFRfVU5ERUYxLAorCUxJR0hUX1VOREVGMiwKKwlMSUdIVF9TSElGVCwKKwlMSUdIVF9UUkFDS01VVEUsCisJTElHSFRfVFJBQ0tTT0xPLAorCUxJR0hUX1RSQUNLUkVDLAorCUxJR0hUX1JFQUQsCisJTElHSFRfV1JJVEUsCisJTElHSFRfQU5ZU09MTywKKwlMSUdIVF9BVVRPLAorCUxJR0hUX0Y0LAorCUxJR0hUX1JFQ09SRCwKKwlMSUdIVF9XSU5ET1csCisJTElHSFRfUExVR0lOLAorCUxJR0hUX0YzLAorCUxJR0hUX0xPT1AKIH07CiAKICNkZWZpbmUgQlVUVE9OTUFTS19CQVRURVJZICAgICAweDAwMDA0MDAwCkBAIC02Miw4ICs1OCw5IEBACiAjZGVmaW5lIEJVVFRPTk1BU0tfUFJFU1MyICAgICAgMHgwMDAwODAxMAogI2RlZmluZSBCVVRUT05NQVNLX1BSRVNTMyAgICAgIDB4MDAwMDIwMjAKIAotLy8gbGFzdCAzIGJ5dGVzIGFyZSB0aGUgc2xpZGVyIHBvc2l0aW9uCi0vLyA0MCBpcyB0aGUgYWN0dWFsIHNsaWRlciBtb3ZpbmcsIHRoZSBtb3N0IHNpZyBiaXRzLCBhbmQgMyBsc2IKKy8qIGxhc3QgMyBieXRlcyBhcmUgdGhlIHNsaWRlciBwb3NpdGlvbgorICogNDAgaXMgdGhlIGFjdHVhbCBzbGlkZXIgbW92aW5nLCB0aGUgbW9zdCBzaWcgYml0cywgYW5kIDMgbHNiCisgKi8KIAogI2RlZmluZSBCVVRUT05NQVNLX0ZMSVAgICAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIEJVVFRPTk1BU0tfRjEgICAgICAgICAgIDB4MDAxMDAwMDAKQEAgLTc2LDE3ICs3Myw0IEBACiAjZGVmaW5lIEJVVFRPTk1BU0tfUExVR0lOICAgICAgIDB4MDAwMDA0MDAKICNkZWZpbmUgQlVUVE9OTUFTS19BVVRPICAgICAgICAgMHgwMDAwMDEwMAogCi0KLS8vICNkZWZpbmUgQlVUVE9OTUFTS19GT09UU1dJVENIIEZJWE1FCi0KLS8vIExvb2t1cC4gbmFtZS4gbWlkaSBvdXQuIG1pZGkgaW4uCi0KLXN0cnVjdCBidXR0b25tYXBfdCB7Ci0JdTMyIG1hc2s7Ci0Jc2hvcnQgbWlkaV9pbjsKLQlzaG9ydCBtaWRpX291dDsKLQljaGFyICpuYW1lOwotLy8gIAl2b2lkICgqZnVuY3Rpb24pIChidXR0b25tYXBfdCAqKTsKLSAgCXZvaWQgKCpmdW5jdGlvbikgKHZvaWQpOwotfTsKLQorLyogI2RlZmluZSBCVVRUT05NQVNLX0ZPT1RTV0lUQ0ggRklYTUUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9mcm9udGllcl9jb21wYXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9mcm9udGllcl9jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA0NTBlNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvZnJvbnRpZXJfY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBVU0IgZGVmaW5lcyBmb3Igb2xkZXIga2VybmVscyAqLwotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCi0KLS8qKgotICogdXNiX2VuZHBvaW50X2Rpcl9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIE9VVCBkaXJlY3Rpb24KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgT1VULCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX291dChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLSAgICAgICByZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLSAgICAgICByZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pOwotfQotCi0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfaW50IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpbnRlcnJ1cHQsIG90aGVyd2lzZSBpdCByZXR1cm5zCi0gKiBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaW50KGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotICAgICAgIHJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0gICAgICAgICAgICAgICBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpOwotfQotCi0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2ludF9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLSAgICAgICByZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2ludF9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaW50ZXJydXB0IE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9vdXQoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0gICAgICAgcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKLX0KLQotI2VuZGlmIC8qIG9sZGVyIGtlcm5lbCB2ZXJzaW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3N1cmZhY2Vfc3lzZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9zdXJmYWNlX3N5c2ZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MGE1NjJkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9zdXJmYWNlX3N5c2ZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyogSWYgeW91IGFyZSBnb2luZyB0byBhYnVzZSB0aGUgcHJlcHJvY2Vzc29yLCB3aHkgbm90IEFCVVNFIHRoZSBwcmVwcm9jZXNzb3I/Ci0gICBJIHN0dWNrIHRoaXMgaGVhZGVyIGluIGEgc2VwYXJhdGUgZmlsZSBzbyBJIGRvbid0IGhhdmUgdG8gbG9vayBhdCBpdCAqLwotCi0vLyBGSVhNRSBOZWVkIGxvY2tpbmcgb3IgYXRvbWljIG9wcwotCi0jZGVmaW5lIHNob3dfc2V0X21iaXQoZG5hbWUsdmFsdWUsYml0KQkJCQkJCQkJCQkJCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9ICgxICYmICh0LT52YWx1ZSAmICgxIDw8IGJpdCkpKTsJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAotCWlmKHRlbXAgPiAwKSB7IGxvbmcgYiA9IDEgPDwgYml0OyB0LT52YWx1ZSB8PSBiOyB9IFwKLQllbHNlIHsgbG9uZyBiID0gfigxIDw8IGJpdCk7IHQtPnZhbHVlICY9IGIgOwkJCQkgXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwotCi0jZGVmaW5lIHNob3dfc2V0X2ViaXQoZG5hbWUsZW51bW5hbWUsdmFsdWUsYml0KQkJCQkJCQkJCQkJCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjYml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl8jI2RuYW1lICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0gIGVudW0gZW51bW5hbWUgbCA9IGJpdDsgXAotICBpbnQgdGVtcCA9IHQtPnZhbHVlICYgKDEgPDwgbCk7CQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjYml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAotICBlbnVtIGVudW1uYW1lIGwgPSBiaXQ7XAotCWxvbmcgYiAgPSAxIDw8IGw7IFwKLQlpZih0ZW1wID4gMCkgeyB0LT52YWx1ZSB8PSBiOyB9CVwKLQllbHNlIHsgdC0+dmFsdWUgJj0gfmIgOwkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd18jI3ZhbHVlLCBzZXRfIyN2YWx1ZSk7Ci0KLS8vIEZJWE1FIEZPUiBDT1JSRUNUTFkgU0VUVElORyBIRVggZnJvbSBhIHN0cmluZwotI2RlZmluZSBzaG93X3NldF9tY21kKGRuYW1lLHZhbHVlKQkJCQkJCQkJCQkJCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLSAgaW50IGNvdW50ID0gMDtcCi0JaW50IGk7IFwKLQlmb3IgKGkgPSAwLGk8c2l6ZW9mKGRuYW1lKTsgaSsrKSBjb3VudCArPSBzbnByaW50ZihidWYsICIlMDJ4Iix0LT5kbmFtZVtpXSk7IFwKLSAgcmV0dXJuKGNvdW50KTtcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl8jI2RuYW1lICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCi0JdC0+dmFsdWUgPSB0ZW1wOwkJCQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIHNldF8jI3ZhbHVlKTsKLQotI2RlZmluZSBzaG93X3NldF9taW50KGRuYW1lLHZhbHVlKQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdC0+dmFsdWUpOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwotCi0jZGVmaW5lIHNob3dfc2V0X21jaGFyKGRuYW1lLHZhbHVlKQkJCQkJCQkJCQkJCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl8jI2RuYW1lICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWNcbiIsIHQtPnZhbHVlKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl8jI2RuYW1lICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCi0JdC0+dmFsdWUgPSB0ZW1wOwkJCQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIHNldF8jI3ZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYwppbmRleCA3OWFiYjZiLi4yNzRiODJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvdHJhbnpwb3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKgogICovCiAKLS8qKgorLyoKICAqIFRoaXMgZHJpdmVyIHVzZXMgYSByaW5nIGJ1ZmZlciBmb3IgdGltZSBjcml0aWNhbCByZWFkaW5nIG9mCiAgKiBpbnRlcnJ1cHQgaW4gcmVwb3J0cyBhbmQgcHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgbWV0aG9kcyBmb3IKICAqIHJhdyBpbnRlcnJ1cHQgcmVwb3J0cy4KQEAgLTMwLDcgKzMwLDcgQEAKICAqIGFzIHdlIG9ubHkgaGF2ZSAxNyBjb21tYW5kcyBmb3IgdGhlIHRyYW56cG9ydC4gSW4gcGFydGljdWxhciB0aGlzIGlzCiAgKiBrZXkgZm9yIGdldHRpbmcgbGlnaHRzIHRvIGZsYXNoIGluIHRpbWUgYXMgb3RoZXJ3aXNlIG1hbnkgY29tbWFuZHMKICAqIGNhbiBiZSBidWZmZXJlZCB1cCBiZWZvcmUgdGhlIGxpZ2h0IGNoYW5nZSBtYWtlcyBpdCB0byB0aGUgaW50ZXJmYWNlLgotKi8KKyAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTQwLDU2ICs0MCw0NyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKLSNpbmNsdWRlIGZyb250aWVyX2NvbXBhdC5oCi0jZW5kaWYKLQogLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZXMgKi8KICNkZWZpbmUgVkVORE9SX0lEICAgMHgxNjViCi0jZGVmaW5lIFBST0RVQ1RfSUQJMHg4MTAxCisjZGVmaW5lIFBST0RVQ1RfSUQgIDB4ODEwMQogCiAjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUwogI2RlZmluZSBVU0JfVFJBTlpQT1JUX01JTk9SX0JBU0UJMAotI2Vsc2UKLS8vIEZJWE1FIDE3NiAtIGlzIHRoZSBsZHVzYiBkcml2ZXIncyBtaW5vciAtIGFwcGx5IGZvciBhIG1pbm9yIHNvb24KKyNlbHNlICAvKiBGSVhNRSAxNzctIGlzIHRoZSBhbm90aGVyIGRyaXZlcidzIG1pbm9yIC0gYXBwbHkgZm9yIGEgbWlub3Igc29vbiAqLwogI2RlZmluZSBVU0JfVFJBTlpQT1JUX01JTk9SX0JBU0UJMTc3CiAjZW5kaWYKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl90cmFuenBvcnRfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCkgfSwKLQl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3RyYW56cG9ydF90YWJsZVtdID0geworCXtVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCl9LAorCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfdHJhbnpwb3J0X3RhYmxlKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjMzIik7CitNT0RVTEVfVkVSU0lPTigiMC4zNSIpOwogTU9EVUxFX0FVVEhPUigiTWlrZSBUYWh0IDxtQHRhaHQubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJUcmFuenBvcnQgVVNCIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkZyb250aWVyIERlc2lnbnMgVHJhbnpwb3J0IENvbnRyb2wgU3VyZmFjZSIpOwogCi0vKiBUaGVzZSB0d28gYXJlbid0IGRvbmUgeWV0ICovCi0KLSNkZWZpbmUgU1VQUFJFU1NfRVhUUkFfT05MSU5FX0VWRU5UUyAwCi0jZGVmaW5lIEJVRkZFUkVEX1dSSVRFUyAwCi0KICNkZWZpbmUgU1VQUFJFU1NfRVhUUkFfT0ZGTElORV9FVkVOVFMgMQogI2RlZmluZSBDT01QUkVTU19XSEVFTF9FVkVOVFMgMQogI2RlZmluZSBCVUZGRVJFRF9SRUFEUyAxCiAjZGVmaW5lIFJJTkdfQlVGRkVSX1NJWkUgMTAwMAogI2RlZmluZSBXUklURV9CVUZGRVJfU0laRSAzNAogI2RlZmluZSBUUkFOWlBPUlRfVVNCX1RJTUVPVVQgMTAKKyNkZWZpbmUgVFJBTlpQT1JUX0RFQlVHIDAKIAotCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKK3N0YXRpYyBpbnQgZGVidWcgPSBUUkFOWlBPUlRfREVCVUc7CiAKIC8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLwotI2RlZmluZSBkYmdfaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZykgZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGJnX2luZm8oZGV2LCBmb3JtYXQsIGFyZy4uLikgZG8JCQlcCisJeyBpZiAoZGVidWcpIGRldl9pbmZvKGRldiAsIGZvcm1hdCAsICMjIGFyZyk7IH0gd2hpbGUgKDApCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCiAKQEAgLTEwMiwxMyArOTMsMTMgQEAKIAogc3RhdGljIGludCByaW5nX2J1ZmZlcl9zaXplID0gUklOR19CVUZGRVJfU0laRTsKIAotbW9kdWxlX3BhcmFtKHJpbmdfYnVmZmVyX3NpemUsIGludCwgIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKHJpbmdfYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHJpbmdfYnVmZmVyX3NpemUsICJSZWFkIHJpbmcgYnVmZmVyIHNpemUgaW4gcmVwb3J0cyIpOwogCiAvKiBUaGUgd3JpdGVfYnVmZmVyIGNhbiBvbmUgZGF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgb3V0IHRyYW5zZmVyLgogICovCiBzdGF0aWMgaW50IHdyaXRlX2J1ZmZlcl9zaXplID0gV1JJVEVfQlVGRkVSX1NJWkU7Ci1tb2R1bGVfcGFyYW0od3JpdGVfYnVmZmVyX3NpemUsIGludCwgIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKHdyaXRlX2J1ZmZlcl9zaXplLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyh3cml0ZV9idWZmZXJfc2l6ZSwgIldyaXRlIGJ1ZmZlciBzaXplIik7CiAKIC8qCkBAIC0xMTgsNjkgKzEwOSw0OCBAQAogCiBzdGF0aWMgaW50IG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPSBUUkFOWlBPUlRfVVNCX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0obWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCwgIk1pbmltdW0gaW50ZXJydXB0IGluIGludGVydmFsIGluIG1zIik7CitNT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwsCisJCSJNaW5pbXVtIGludGVycnVwdCBpbiBpbnRlcnZhbCBpbiBtcyIpOwogCiBzdGF0aWMgaW50IG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsID0gVFJBTlpQT1JUX1VTQl9USU1FT1VUOwogbW9kdWxlX3BhcmFtKG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCwgIk1pbmltdW0gaW50ZXJydXB0IG91dCBpbnRlcnZhbCBpbiBtcyIpOworTU9EVUxFX1BBUk1fREVTQyhtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCwKKwkJIk1pbmltdW0gaW50ZXJydXB0IG91dCBpbnRlcnZhbCBpbiBtcyIpOwogCiBzdHJ1Y3QgdHJhbnpwb3J0X2NtZCB7Ci0gICAgdW5zaWduZWQgY2hhciBjbWRbOF07CisJdW5zaWduZWQgY2hhciBjbWRbOF07CiB9OwogCi1lbnVtIExpZ2h0SUQgewotCUxpZ2h0UmVjb3JkID0gMCwKLQlMaWdodFRyYWNrcmVjLAotCUxpZ2h0VHJhY2ttdXRlLAotCUxpZ2h0VHJhY2tzb2xvLAotCUxpZ2h0QW55c29sbywKLQlMaWdodExvb3AsCi0JTGlnaHRQdW5jaAotCX07Ci0KIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCiAKIHN0cnVjdCB1c2JfdHJhbnpwb3J0IHsKLQlzdHJ1Y3Qgc2VtYXBob3JlCXNlbTsJCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UqCWludGY7CQkvKiBzYXZlIG9mZiB0aGUgdXNiIGludGVyZmFjZSBwb2ludGVyICovCisJc3RydWN0IHNlbWFwaG9yZSBzZW07CS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CS8qIHNhdmUgb2ZmIHRoZSB1c2IgaW50ZXJmYWNlIHBvaW50ZXIgKi8KKwlpbnQgb3Blbl9jb3VudDsJCS8qIG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgb3BlbmVkICovCisJc3RydWN0IHRyYW56cG9ydF9jbWQgKCpyaW5nX2J1ZmZlcilbUklOR19CVUZGRVJfU0laRV07CisJdW5zaWduZWQgaW50IHJpbmdfaGVhZDsKKwl1bnNpZ25lZCBpbnQgcmluZ190YWlsOworCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cml0ZV93YWl0OworCXVuc2lnbmVkIGNoYXIgKmludGVycnVwdF9pbl9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7CisJc3RydWN0IHVyYiAqaW50ZXJydXB0X2luX3VyYjsKKwlpbnQgaW50ZXJydXB0X2luX2ludGVydmFsOworCXNpemVfdCBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZTsKKwlpbnQgaW50ZXJydXB0X2luX3J1bm5pbmc7CisJaW50IGludGVycnVwdF9pbl9kb25lOworCWNoYXIgKmludGVycnVwdF9vdXRfYnVmZmVyOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaW50ZXJydXB0X291dF9lbmRwb2ludDsKKwlzdHJ1Y3QgdXJiICppbnRlcnJ1cHRfb3V0X3VyYjsKKwlpbnQgaW50ZXJydXB0X291dF9pbnRlcnZhbDsKKwlzaXplX3QgaW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplOworCWludCBpbnRlcnJ1cHRfb3V0X2J1c3k7CiAKLQlpbnQJCQlvcGVuX2NvdW50OwkvKiBudW1iZXIgb2YgdGltZXMgdGhpcyBwb3J0IGhhcyBiZWVuIG9wZW5lZCAqLworCS8qIFN5c2ZzIHN1cHBvcnQgKi8KIAotCXN0cnVjdCB0cmFuenBvcnRfY21kCSgqcmluZ19idWZmZXIpW1JJTkdfQlVGRkVSX1NJWkVdOyAvKiBqdXN0IG1ha2UgYyBoYXBweSAqLwotCXVuc2lnbmVkIGludAkJcmluZ19oZWFkOwotCXVuc2lnbmVkIGludAkJcmluZ190YWlsOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90CXdyaXRlX3dhaXQ7Ci0KLQl1bnNpZ25lZCBjaGFyKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IqIGludGVycnVwdF9pbl9lbmRwb2ludDsKLQlzdHJ1Y3QgdXJiKgkJaW50ZXJydXB0X2luX3VyYjsKLQlpbnQJCQlpbnRlcnJ1cHRfaW5faW50ZXJ2YWw7Ci0Jc2l6ZV90CWludGVycnVwdF9pbl9lbmRwb2ludF9zaXplOwotCWludAkJCWludGVycnVwdF9pbl9ydW5uaW5nOwotCWludAkJCWludGVycnVwdF9pbl9kb25lOwotCi0JY2hhcioJCQlpbnRlcnJ1cHRfb3V0X2J1ZmZlcjsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IqIGludGVycnVwdF9vdXRfZW5kcG9pbnQ7Ci0Jc3RydWN0IHVyYioJCWludGVycnVwdF9vdXRfdXJiOwotCWludAkJCWludGVycnVwdF9vdXRfaW50ZXJ2YWw7Ci0Jc2l6ZV90CWludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZTsKLQlpbnQJCQlpbnRlcnJ1cHRfb3V0X2J1c3k7Ci0KLQkvKiBTeXNmcyBhbmQgdHJhbnNsYXRpb24gc3VwcG9ydCAqLwotCi0JaW50IGV2ZW50OyAvKiBhbHRlcm5hdGUgaW50ZXJmYWNlIHRvIGV2ZW50cyAqLwotCWludCB3aGVlbDsgLyogLSBmb3IgbmVnYXRpdmUsIDAgZm9yIG5vbmUsICsgZm9yIHBvc2l0aXZlICovCi0JdW5zaWduZWQgY2hhciBkdW1wX3N0YXRlOyAvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLwotCXVuc2lnbmVkIGNoYXIgZW5hYmxlOyAvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLwotCXVuc2lnbmVkIGNoYXIgb2ZmbGluZTsgLyogaWYgdGhlIGRldmljZSBpcyBvdXQgb2YgcmFuZ2Ugb3IgYXNsZWVwICovCi0JdW5zaWduZWQgY2hhciBjb21wcmVzc193aGVlbDsgLyogZmxhZyB0byBjb21wcmVzcyB3aGVlbCBldmVudHMgKi8KLQl1bnNpZ25lZCBjaGFyIGxpZ2h0OyAvKiA3IGJpdHMgdXNlZCAqLwotCXVuc2lnbmVkIGNoYXIgbGFzdF9jbWRbOF07Ci0JdW5zaWduZWQgY2hhciBsYXN0X2lucHV0WzhdOwotCXVuc2lnbmVkIGNoYXIgc2NyZWVuWzQwXTsgLy8gV2UnbGwgYWxzbyBoYXZlIGNlbGxzCi0KKwl1bnNpZ25lZCBjaGFyIGVuYWJsZTsJLyogMCBpZiBkaXNhYmxlZCAxIGlmIGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBjaGFyIG9mZmxpbmU7CS8qIGlmIHRoZSBkZXZpY2UgaXMgb3V0IG9mIHJhbmdlIG9yIGFzbGVlcCAqLworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3Nfd2hlZWw7CS8qIGZsYWcgdG8gY29tcHJlc3Mgd2hlZWwgZXZlbnRzICovCiB9OwogCiAvKiBwcmV2ZW50IHJhY2VzIGJldHdlZW4gb3BlbigpIGFuZCBkaXNjb25uZWN0KCkgKi8KQEAgLTIwNSw4NCArMTc1LDM5IEBACiAJCQl1c2Jfa2lsbF91cmIoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYik7CiB9CiAKLS8vIEZJWE1FIH5saWdodCBub3QgZ29vZCBlbm91Z2ggb3IgY29ycmVjdCAtIG5lZWQgYXRvbWljIHNldF9iaXQKKyNkZWZpbmUgc2hvd19pbnQodmFsdWUpCQkJCQkJCVwKKyAgc3RhdGljIHNzaXplX3Qgc2hvd18jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCisgIHsJCQkJCQkJCQlcCisgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQkJXAorICAgIHN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCisgICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHQtPnZhbHVlKTsJCQkgICAgICAgIFwKKyAgfQkJCQkJCQkJCVwKKyAgc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIE5VTEwpOwogCi0jZGVmaW5lIHNob3dfc2V0X2xpZ2h0KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQlcCi0JZW51bSBMaWdodElEIGxpZ2h0ID0gdmFsdWU7CQkJCQlcCi0JaW50IHRlbXAgPSAoMSAmJiAodC0+bGlnaHQgJiAoMSA8PCBsaWdodCkpKTsJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXAgKTsJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQllbnVtIExpZ2h0SUQgbGlnaHQgPSAodGVtcCA8PCB2YWx1ZSkgJiAodC0+bGlnaHQgPDwgdmFsdWUpOwlcCi0JdC0+bGlnaHQgPSAodC0+bGlnaHQgJiB+bGlnaHQpIDsJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOworI2RlZmluZSBzaG93X3NldF9pbnQodmFsdWUpCQkJCQkJXAorICBzdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKKyAgewkJCQkJCQkJCVwKKyAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCQlcCisgICAgc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKKyAgICByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdC0+dmFsdWUpOwkJCSAgICAgICAgXAorICB9CQkJCQkJCQkJXAorICBzdGF0aWMgc3NpemVfdCBzZXRfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCVwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCisgIHsJCQkJCQkJCQlcCisgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQkJXAorICAgIHN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCisgICAgaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQkJXAorICAgIHQtPnZhbHVlID0gdGVtcDsJCQkJCQkJXAorICAgIHJldHVybiBjb3VudDsJCQkJCQkJXAorICB9CQkJCQkJCQkJXAorICBzdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIHNldF8jI3ZhbHVlKTsKIAotc2hvd19zZXRfbGlnaHQoTGlnaHRSZWNvcmQpOwotc2hvd19zZXRfbGlnaHQoTGlnaHRUcmFja3JlYyk7Ci1zaG93X3NldF9saWdodChMaWdodFRyYWNrbXV0ZSk7Ci1zaG93X3NldF9saWdodChMaWdodFRyYWNrc29sbyk7Ci1zaG93X3NldF9saWdodChMaWdodEFueXNvbG8pOwotc2hvd19zZXRfbGlnaHQoTGlnaHRMb29wKTsKLXNob3dfc2V0X2xpZ2h0KExpZ2h0UHVuY2gpOwotCi0KLSNkZWZpbmUgc2hvd19zZXRfaW50KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0LT52YWx1ZSk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCi0JCQkJCQkJCQlcCi0JdC0+dmFsdWUgPSB0ZW1wOwkJCQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIHNldF8jI3ZhbHVlKTsKLQotc2hvd19zZXRfaW50KGVuYWJsZSk7Ci1zaG93X3NldF9pbnQob2ZmbGluZSk7CitzaG93X2ludChlbmFibGUpOworc2hvd19pbnQob2ZmbGluZSk7CiBzaG93X3NldF9pbnQoY29tcHJlc3Nfd2hlZWwpOwotc2hvd19zZXRfaW50KGR1bXBfc3RhdGUpOwotc2hvd19zZXRfaW50KHdoZWVsKTsKLXNob3dfc2V0X2ludChldmVudCk7Ci0KLSNkZWZpbmUgc2hvd19zZXRfY21kKHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0LT52YWx1ZSk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCi0JCQkJCQkJCQlcCi0JdC0+dmFsdWUgPSB0ZW1wOwkJCQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIHNldF8jI3ZhbHVlKTsKLQotCi0KIAogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X2RlbGV0ZQpAQCAtMjkwLDIzICsyMTUsMTAgQEAKIHN0YXRpYyB2b2lkIHVzYl90cmFuenBvcnRfZGVsZXRlKHN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXYpCiB7CiAJdXNiX3RyYW56cG9ydF9hYm9ydF90cmFuc2ZlcnMoZGV2KTsKLQkvKiAgVGhpcyBpcyBqdXN0IHRvbyB0d2lzdGVkIHRvIGJlIGNvcnJlY3QgKi8KLQlpZihkZXYtPmludGYgIT0gTlVMTCkgewotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFJlY29yZCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0VHJhY2tyZWMpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFRyYWNrbXV0ZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0VHJhY2tzb2xvKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja211dGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodEFueXNvbG8pOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodExvb3ApOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFB1bmNoKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfd2hlZWwpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9lbmFibGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9ldmVudCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX29mZmxpbmUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9jb21wcmVzc193aGVlbCk7Ci0KLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfZHVtcF9zdGF0ZSk7CisJaWYgKGRldi0+aW50ZiAhPSBOVUxMKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9lbmFibGUpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfb2ZmbGluZSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9jb21wcmVzc193aGVlbCk7CiAJfQogCiAJLyogZnJlZSBkYXRhIHN0cnVjdHVyZXMgKi8KQEAgLTMzMCwzNyArMjQyLDU2IEBACiAKIAlpZiAodXJiLT5zdGF0dXMpIHsKIAkJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKLQkJICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8Ci0JCSAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB7CisJCQl1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorCQkJdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgewogCQkJZ290byBleGl0OwogCQl9IGVsc2UgewotCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IG5vbnplcm8gc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJCQkgIiVzOiBub256ZXJvIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCiAJCQkJIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7Ci0JCQlnb3RvIHJlc3VibWl0OyAvKiBtYXliZSB3ZSBjYW4gcmVjb3ZlciAqLworCQkJZ290byByZXN1Ym1pdDsJLyogbWF5YmUgd2UgY2FuIHJlY292ZXIgKi8KIAkJfQogCX0KIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gOCkgewogCQlkZXZfd2FybigmZGV2LT5pbnRmLT5kZXYsCi0JCQkgIlVyYiBsZW5ndGggd2FzICVkIGJ5dGVzISEgRG8gc29tZXRoaW5nIGludGVsbGlnZW50IFxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCSJVcmIgbGVuZ3RoIHdhcyAlZCBieXRlcyEhIgorCQkJIkRvIHNvbWV0aGluZyBpbnRlbGxpZ2VudCBcbiIsCisJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9IGVsc2UgewotCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogcmVjZWl2ZWQ6ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAotCQkJIF9fZnVuY19fLCBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMF0sZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdLGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsyXSxkZXYtPmludGVycnVwdF9pbl9idWZmZXJbM10sZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzRdLGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcls1XSxkZXYtPmludGVycnVwdF9pbl9idWZmZXJbNl0sZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzddKTsKKwkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJICIlczogcmVjZWl2ZWQ6ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJIF9fZnVuY19fLCBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMF0sCisJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdLAorCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsyXSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbM10sCisJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzRdLAorCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcls1XSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbNl0sCisJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzddKTsKICNpZiBTVVBQUkVTU19FWFRSQV9PRkZMSU5FX0VWRU5UUwotCQlpZihkZXYtPm9mZmxpbmUgPT0gMiAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikgeyBnb3RvIHJlc3VibWl0OyB9Ci0JCWlmKGRldi0+b2ZmbGluZSA9PSAxICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7IGRldi0+b2ZmbGluZSA9IDI7IGdvdG8gcmVzdWJtaXQ7IH0KKwlpZiAoZGV2LT5vZmZsaW5lID09IDIgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpCisJCWdvdG8gcmVzdWJtaXQ7CisJCWlmIChkZXYtPm9mZmxpbmUgPT0gMSAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikgeworCQkJZGV2LT5vZmZsaW5lID0gMjsKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCX0KIAotLyogQWx3YXlzIHBhc3Mgb25lIG9mZmxpbmUgZXZlbnQgdXAgdGhlIHN0YWNrICovCi0JCWlmKGRldi0+b2ZmbGluZSA+IDAgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdICE9IDB4ZmYpIHsgZGV2LT5vZmZsaW5lID0gMDsgfQotCQlpZihkZXYtPm9mZmxpbmUgPT0gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikgeyBkZXYtPm9mZmxpbmUgPSAxOyB9CisJCS8qIEFsd2F5cyBwYXNzIG9uZSBvZmZsaW5lIGV2ZW50IHVwIHRoZSBzdGFjayAqLworCQlpZiAoZGV2LT5vZmZsaW5lID4gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gIT0gMHhmZikKKwkJCWRldi0+b2ZmbGluZSA9IDA7CisJCWlmIChkZXYtPm9mZmxpbmUgPT0gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikKKwkJCWRldi0+b2ZmbGluZSA9IDE7CiAKLSNlbmRpZgotCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLCBfX2Z1bmNfXyxkZXYtPnJpbmdfaGVhZCxkZXYtPnJpbmdfdGFpbCk7CisjZW5kaWYJLyogU1VQUFJFU1NfRVhUUkFfT0ZGTElORV9FVkVOVFMgKi8KKwkgICBkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLAorCQlfX2Z1bmNfXywgZGV2LT5yaW5nX2hlYWQsIGRldi0+cmluZ190YWlsKTsKIAotCQluZXh0X3JpbmdfaGVhZCA9IChkZXYtPnJpbmdfaGVhZCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7CisJCW5leHRfcmluZ19oZWFkID0gKGRldi0+cmluZ19oZWFkICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOwogCiAJCWlmIChuZXh0X3JpbmdfaGVhZCAhPSBkZXYtPnJpbmdfdGFpbCkgewotCQkJbWVtY3B5KCYoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfaGVhZF0pLCBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQltZW1jcHkoJigoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ19oZWFkXSksCisJCQkgICAgICAgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJZGV2LT5yaW5nX2hlYWQgPSBuZXh0X3JpbmdfaGVhZDsKIAkJCXJldHZhbCA9IDA7CiAJCQltZW1zZXQoZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLCAwLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtMzczLDcgKzMwNCw3IEBACiAJfQogCiByZXN1Ym1pdDoKLQkvKiByZXN1Ym1pdCBpZiB3ZSdyZSBzdGlsbCBydW5uaW5nICovCisvKiByZXN1Ym1pdCBpZiB3ZSdyZSBzdGlsbCBydW5uaW5nICovCiAJaWYgKGRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgJiYgZGV2LT5pbnRmKSB7CiAJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXR2YWwpCkBAIC0zOTIsMTkgKzMyMywxNyBAQAogc3RhdGljIHZvaWQgdXNiX3RyYW56cG9ydF9pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqZGV2ID0gdXJiLT5jb250ZXh0OwotCiAJLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KIAlpZiAodXJiLT5zdGF0dXMgJiYgISh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8Ci0JCQkgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8Ci0JCQkgICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKQorCQkJCXVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCQkJdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpCiAJCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwKLQkJCSAiJXMgLSBub256ZXJvIHdyaXRlIGludGVycnVwdCBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAotCQkJIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCQkiJXMgLSBub256ZXJvIHdyaXRlIGludGVycnVwdCBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAogCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMDsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d3JpdGVfd2FpdCk7CiB9Ci0KIC8qKgogICoJdXNiX3RyYW56cG9ydF9vcGVuCiAgKi8KQEAgLTQyNCw3ICszNTMsNyBAQAogCiAJaWYgKCFpbnRlcmZhY2UpIHsKIAkJZXJyKCIlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWRcbiIsCi0JCSAgICAgX19mdW5jX18sIHN1Ym1pbm9yKTsKKwkJCV9fZnVuY19fLCBzdWJtaW5vcik7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gdW5sb2NrX2Rpc2Nvbm5lY3RfZXhpdDsKIAl9CkBAIC00NTMsMTQgKzM4MiwxNCBAQAogCWRldi0+cmluZ19oZWFkID0gMDsKIAlkZXYtPnJpbmdfdGFpbCA9IDA7CiAJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsCi0JCQkgaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLAotCQkJIHVzYl9yY3ZpbnRwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSwKLQkJCQkJZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwKLQkJCSBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplLAotCQkJIHVzYl90cmFuenBvcnRfaW50ZXJydXB0X2luX2NhbGxiYWNrLAotCQkJIGRldiwKLQkJCSBkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCk7CisJCQlpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSksCisJCQl1c2JfcmN2aW50cGlwZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSksCisJCQkJZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPgorCQkJCWJFbmRwb2ludEFkZHJlc3MpLAorCQkJZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAorCQkJZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSwKKwkJCXVzYl90cmFuenBvcnRfaW50ZXJydXB0X2luX2NhbGxiYWNrLCBkZXYsCisJCQlkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCk7CiAKIAlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMTsKIAlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMDsKQEAgLTQ3MCw3ICszOTksOCBAQAogCiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9pbl91cmIgJWRcbiIsIHJldHZhbCk7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJIkNvdWxkbid0IHN1Ym1pdCBpbnRlcnJ1cHRfaW5fdXJiICVkXG4iLCByZXR2YWwpOwogCQlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMDsKIAkJZGV2LT5vcGVuX2NvdW50ID0gMDsKIAkJZ290byB1bmxvY2tfZXhpdDsKQEAgLTQ3OSw3ICs0MDksNiBAQAogCS8qIHNhdmUgZGV2aWNlIGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CiAKLQogdW5sb2NrX2V4aXQ6CiAJdXAoJmRldi0+c2VtKTsKIApAQCAtNTI1LDcgKzQ1NCw5IEBACiAKIAkvKiB3YWl0IHVudGlsIHdyaXRlIHRyYW5zZmVyIGlzIGZpbmlzaGVkICovCiAJaWYgKGRldi0+aW50ZXJydXB0X291dF9idXN5KQotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPndyaXRlX3dhaXQsICFkZXYtPmludGVycnVwdF9vdXRfYnVzeSwgMiAqIEhaKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53cml0ZV93YWl0LAorCQkJCQkJIWRldi0+aW50ZXJydXB0X291dF9idXN5LAorCQkJCQkJMiAqIEhaKTsKIAl1c2JfdHJhbnpwb3J0X2Fib3J0X3RyYW5zZmVycyhkZXYpOwogCWRldi0+b3Blbl9jb3VudCA9IDA7CiAKQEAgLTUzOSwzNyArNDcwLDMxIEBACiAvKioKICAqCXVzYl90cmFuenBvcnRfcG9sbAogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHVzYl90cmFuenBvcnRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX3RyYW56cG9ydF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKIHsKIAlzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqZGV2OwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKLQogCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQogCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5yZWFkX3dhaXQsIHdhaXQpOwogCXBvbGxfd2FpdChmaWxlLCAmZGV2LT53cml0ZV93YWl0LCB3YWl0KTsKLQogCWlmIChkZXYtPnJpbmdfaGVhZCAhPSBkZXYtPnJpbmdfdGFpbCkKIAkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCWlmICghZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpCiAJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07Ci0KIAlyZXR1cm4gbWFzazsKIH0KLQogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X3JlYWQKICAqLwotc3RhdGljIHNzaXplX3QgdXNiX3RyYW56cG9ydF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsCi0JCQkgICBsb2ZmX3QgKnBwb3MpCisKK3N0YXRpYyBzc2l6ZV90IHVzYl90cmFuenBvcnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqZGV2OwogCWludCByZXR2YWwgPSAwOwotCiAjaWYgQlVGRkVSRURfUkVBRFMKIAlpbnQgYyA9IDA7CiAjZW5kaWYKLQogI2lmIENPTVBSRVNTX1dIRUVMX0VWRU5UUwogCXNpZ25lZCBjaGFyIG9sZHdoZWVsOwogCXNpZ25lZCBjaGFyIG5ld3doZWVsOwpAQCAtNTc3LDcgKzUwMiw3IEBACiAJaW50IG5leHRfdGFpbDsKICNlbmRpZgogCi0vKiBkbyBJIGhhdmUgc3VjaCBhIHRoaW5nIGFzIGEgbnVsbCBldmVudD8gKi8KKwkvKiBkbyBJIGhhdmUgc3VjaCBhIHRoaW5nIGFzIGEgbnVsbCBldmVudD8gKi8KIAogCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIApAQCAtNTkxLDggKzUxNiw3IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQkvKiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQgKi8KLQlpZiAoZGV2LT5pbnRmID09IE5VTEwpIHsKKwkvKiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQgKi8gaWYgKGRldi0+aW50ZiA9PSBOVUxMKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWVycigiTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gdW5sb2NrX2V4aXQ7CkBAIC02MDQsMTA0ICs1MjgsMTQ5IEBACiAJCQlyZXR2YWwgPSAtRUFHQUlOOwogCQkJZ290byB1bmxvY2tfZXhpdDsKIAkJfQotCQkvLyBhdG9taWNfY21wX2V4Y2hhbmdlKCZkZXYtPmludGVycnVwdF9pbl9kb25lLDAsMCk7Ci0JCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwIDsgLyogdGlueSByYWNlIC0gRklYTUU6IG1ha2UgYXRvbWljPyAqLwotCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2LT5yZWFkX3dhaXQsIGRldi0+aW50ZXJydXB0X2luX2RvbmUpOwotCQlpZiAocmV0dmFsIDwgMCkgeworCQkvKiB0aW55IHJhY2UgLSBGSVhNRTogbWFrZSBhdG9taWM/ICovCisJCS8qIGF0b21pY19jbXBfZXhjaGFuZ2UoJmRldi0+aW50ZXJydXB0X2luX2RvbmUsMCwwKTsgKi8KKwkJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDA7CisJCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPnJlYWRfd2FpdCwKKwkJCQkJCSAgZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSk7CisJCWlmIChyZXR2YWwgPCAwKQogCQkJZ290byB1bmxvY2tfZXhpdDsKLQkJfQogCX0KIAotCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBjb3B5aW5nIHRvIHVzZXJzcGFjZTogJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgX19mdW5jX18sICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFswXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMV0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNF0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbN10pOworCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJIiVzOiBjb3B5aW5nIHRvIHVzZXJzcGFjZTogIgorCQkiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCSBfX2Z1bmNfXywKKwkJICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFswXSwKKwkJICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsxXSwKKwkJICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsyXSwKKwkJICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSwKKwkJICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs0XSwKKwkJICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs1XSwKKwkJICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSwKKwkJICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs3XSk7CiAKICNpZiBCVUZGRVJFRF9SRUFEUwotCSAgIGMgPSAwOwotCSAgIHdoaWxlKChjIDwgY291bnQpICYmIChkZXYtPnJpbmdfdGFpbCAhPSBkZXYtPnJpbmdfaGVhZCkpIHsKKwljID0gMDsKKwl3aGlsZSAoKGMgPCBjb3VudCkgJiYgKGRldi0+cmluZ190YWlsICE9IGRldi0+cmluZ19oZWFkKSkgewogCi0vKiBUaGlzIHN0YXJ0ZWQgb2ZmIGluIHRoZSBsb3dlciBsZXZlbCBzZXJ2aWNlIHJvdXRpbmUsIGFuZCBJIG1vdmVkIGl0IGhlcmUuIFRoZW4gbXkgYnJhaW4gZGllZC4gTm90IGRvbmUgeWV0LiAqLwogI2lmIENPTVBSRVNTX1dIRUVMX0VWRU5UUwogCQluZXh0X3RhaWwgPSAoZGV2LT5yaW5nX3RhaWwrMSkgJSByaW5nX2J1ZmZlcl9zaXplOwotCQlpZihkZXYtPmNvbXByZXNzX3doZWVsKSBjYW5jb21wcmVzcyA9IDE7Ci0JCXdoaWxlKGRldi0+cmluZ19oZWFkICE9IG5leHRfdGFpbCAmJiBjYW5jb21wcmVzcyA9PSAxICkgeworCQlpZiAoZGV2LT5jb21wcmVzc193aGVlbCkKKwkJCWNhbmNvbXByZXNzID0gMTsKKwkJd2hpbGUgKGRldi0+cmluZ19oZWFkICE9IG5leHRfdGFpbCAmJiBjYW5jb21wcmVzcyA9PSAxKSB7CiAJCQluZXd3aGVlbCA9ICgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNl07CiAJCQlvbGR3aGVlbCA9ICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XTsKLQkJCS8vIGlmIGJvdGggYXJlIHdoZWVsIGV2ZW50cywgYW5kIG5vIGJ1dHRvbnMgaGF2ZSBjaGFuZ2VzIChGSVhNRSwgZG8gSSBoYXZlIHRvIGNoZWNrPyksCi0JCQkvLyBhbmQgd2UgYXJlIHRoZSBzYW1lIHNpZ24sIHdlIGNhbiBjb21wcmVzcyArLSA3RgotCQkJLy8gRklYTUU6IHNhbmVyIGNoZWNrIGZvciBvdmVyZmxvdyEgLSBtYXggb2YgKy0gN0YKLQkJCS8vIEZJWE1FIHRoZSBtYXRoIGlzIHdyb25nIGZvciBnb2luZyBpbiByZXZlcnNlLCBhY3R1YWxseSwgYXMgdGhlIG1pZGkgc3BlYyBkb2Vzbid0IGFsbG93IHNpZ25lZCBjaGFycworCQkJLyogaWYgYm90aCBhcmUgd2hlZWwgZXZlbnRzLCBhbmQKKwkJCSAgIG5vIGJ1dHRvbnMgaGF2ZSBjaGFuZ2VzIChGSVhNRSwgZG8gSSBoYXZlIHRvIGNoZWNrPyksCisJCQkgICBhbmQgd2UgYXJlIHRoZSBzYW1lIHNpZ24sIHdlIGNhbiBjb21wcmVzcyArLSA3RgorCQkJKi8KKwkJCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJCQkiJXM6IHRyeWluZyB0byBjb21wcmVzczogIgorCQkJCSIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQlfX2Z1bmNfXywKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMF0sCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzFdLAorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsyXSwKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbM10sCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdLAorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs1XSwKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNl0sCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzddKTsKIAotCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiB0cnlpbmcgdG8gY29tcHJlc3M6ICUwMnglMDJ4JTAyeCUwMnglMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCQkJIF9fZnVuY19fLCAoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMF0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzFdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsyXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbM10sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs1XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNl0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzddKTsKLQotCi0JCQlpZigoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzZdICE9IDAgJiYKLQkJCSAgICAoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzZdICE9IDAgKSAmJgorCQkJaWYgKCgoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNl0gIT0gMCAmJgorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNl0gIT0gMCkgJiYKIAkJCQkoKG5ld3doZWVsID4gMCAmJiBvbGR3aGVlbCA+IDApIHx8Ci0JCQkJKG5ld3doZWVsIDwgMCAmJiBvbGR3aGVlbCA8IDApKSAmJgotCQkJCSgoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMl0gPT0gKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFsyXSkgJiYKLQkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzNdID09ICgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbM10pICYmCi0JCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs0XSA9PSAoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzRdKSAmJgotCQkJCSgoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNV0gPT0gKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs1XSkpCi0gewotCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBzaG91bGQgY29tcHJlc3M6ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAotCQkJIF9fZnVuY19fLCAoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMF0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzFdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsyXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbM10sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs1XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNl0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzddKTsKLQorCQkJCQkobmV3d2hlZWwgPCAwICYmIG9sZHdoZWVsIDwgMCkpICYmCisJCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsyXSA9PQorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbMl0pICYmCisJCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSA9PQorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbM10pICYmCisJCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs0XSA9PQorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNF0pICYmCisJCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs1XSA9PQorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNV0pKSB7CisJCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJCQkiJXM6IHNob3VsZCBjb21wcmVzczogIgorCQkJCQkiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkJCV9fZnVuY19fLAorCQkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS4KKwkJCQkJY21kWzBdLAorCQkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS4KKwkJCQkJY21kWzFdLAorCQkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS4KKwkJCQkJY21kWzJdLAorCQkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS4KKwkJCQkJY21kWzNdLAorCQkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS4KKwkJCQkJY21kWzRdLAorCQkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS4KKwkJCQkJY21kWzVdLAorCQkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS4KKwkJCQkJY21kWzZdLAorCQkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS4KKwkJCQkJY21kWzddKTsKIAkJCQluZXd3aGVlbCArPSBvbGR3aGVlbDsKLQkJCQlpZihvbGR3aGVlbCA+IDAgJiYgIShuZXd3aGVlbCA+IDApKSB7CisJCQkJaWYgKG9sZHdoZWVsID4gMCAmJiAhKG5ld3doZWVsID4gMCkpIHsKIAkJCQkJbmV3d2hlZWwgPSAweDdmOwogCQkJCQljYW5jb21wcmVzcyA9IDA7CiAJCQkJfQotCQkJCWlmKG9sZHdoZWVsIDwgMCAmJiAhKG5ld3doZWVsIDwgMCkpIHsKKwkJCQlpZiAob2xkd2hlZWwgPCAwICYmICEobmV3d2hlZWwgPCAwKSkgewogCQkJCQluZXd3aGVlbCA9IDB4ODA7CiAJCQkJCWNhbmNvbXByZXNzID0gMDsKIAkJCQl9CiAKLQkJCQkoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzZdID0gbmV3d2hlZWw7CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs2XSA9CisJCQkJCW5ld3doZWVsOwogCQkJCWRldi0+cmluZ190YWlsID0gbmV4dF90YWlsOwotCQkJCW5leHRfdGFpbCA9IChkZXYtPnJpbmdfdGFpbCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7CisJCQkJbmV4dF90YWlsID0KKwkJCQkJKGRldi0+cmluZ190YWlsICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOwogCQkJfSBlbHNlIHsKIAkJCQljYW5jb21wcmVzcyA9IDA7CiAJCQl9CiAJCX0KICNlbmRpZiAvKiBDT01QUkVTU19XSEVFTF9FVkVOVFMgKi8KLQotCQlpZiAoY29weV90b191c2VyKCZidWZmZXJbY10sICYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXSwgOCkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcigKKwkJCQkmYnVmZmVyW2NdLAorCQkJCSYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXSwgOCkpIHsKIAkJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCQlnb3RvIHVubG9ja19leGl0OwogCQl9Ci0KLQkJZGV2LT5yaW5nX3RhaWwgPSAoZGV2LT5yaW5nX3RhaWwrMSkgJSByaW5nX2J1ZmZlcl9zaXplOwotCQljKz04OwotCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLCBfX2Z1bmNfXyxkZXYtPnJpbmdfaGVhZCxkZXYtPnJpbmdfdGFpbCk7Ci0JICAgfQotCSAgIHJldHZhbCA9IGM7CisJCWRldi0+cmluZ190YWlsID0gKGRldi0+cmluZ190YWlsICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOworCQljICs9IDg7CisJCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJCSAiJXM6IGhlYWQsIHRhaWwgYXJlICV4LCAleFxuIiwKKwkJCSBfX2Z1bmNfXywgZGV2LT5yaW5nX2hlYWQsIGRldi0+cmluZ190YWlsKTsKKwl9CisJcmV0dmFsID0gYzsKIAogI2Vsc2UKLQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLCA4KSkgewotCQlyZXR2YWwgPSAtRUZBVUxUOwotCQlnb3RvIHVubG9ja19leGl0OwotCX0KKy8qICBpZiAoY29weV90b191c2VyKGJ1ZmZlciwgJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLCA4KSkgeyAqLworCXJldHZhbCA9IC1FRkFVTFQ7CisJZ290byB1bmxvY2tfZXhpdDsKK30KIAotCWRldi0+cmluZ190YWlsID0gKGRldi0+cmluZ190YWlsKzEpICUgcmluZ19idWZmZXJfc2l6ZTsKLQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLCBfX2Z1bmNfXyxkZXYtPnJpbmdfaGVhZCxkZXYtPnJpbmdfdGFpbCk7CitkZXYtPnJpbmdfdGFpbCA9IChkZXYtPnJpbmdfdGFpbCArIDEpICUgcmluZ19idWZmZXJfc2l6ZTsKK2RiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsCisJIF9fZnVuY19fLCBkZXYtPnJpbmdfaGVhZCwgZGV2LT5yaW5nX3RhaWwpOwogCi0JcmV0dmFsID0gODsKK3JldHZhbCA9IDg7CiAjZW5kaWYgLyogQlVGRkVSRURfUkVBRFMgKi8KIAogdW5sb2NrX2V4aXQ6Ci0JLyogdW5sb2NrIHRoZSBkZXZpY2UgKi8KLQl1cCgmZGV2LT5zZW0pOworLyogdW5sb2NrIHRoZSBkZXZpY2UgKi8KK3VwKCZkZXYtPnNlbSk7CiAKIGV4aXQ6Ci0JcmV0dXJuIHJldHZhbDsKK3JldHVybiByZXR2YWw7CiB9CiAKIC8qKgogICoJdXNiX3RyYW56cG9ydF93cml0ZQogICovCi1zdGF0aWMgc3NpemVfdCB1c2JfdHJhbnpwb3J0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgdXNiX3RyYW56cG9ydF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkJbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXY7CiAJc2l6ZV90IGJ5dGVzX3RvX3dyaXRlOwpAQCAtNzE4LDcgKzY4Nyw2IEBACiAJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJZ290byBleGl0OwogCX0KLQogCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwogCWlmIChkZXYtPmludGYgPT0gTlVMTCkgewogCQlyZXR2YWwgPSAtRU5PREVWOwpAQCAtNzMyLDE4ICs3MDAsMjQgQEAKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlnb3RvIHVubG9ja19leGl0OwogCQl9Ci0JCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndyaXRlX3dhaXQsICFkZXYtPmludGVycnVwdF9vdXRfYnVzeSk7Ci0JCWlmIChyZXR2YWwgPCAwKSB7CisJCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndyaXRlX3dhaXQsCisJCQkJCQkhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpOworCQlpZiAocmV0dmFsIDwgMCkKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7Ci0JCX0KIAl9CiAKIAkvKiB3cml0ZSB0aGUgZGF0YSBpbnRvIGludGVycnVwdF9vdXRfYnVmZmVyIGZyb20gdXNlcnNwYWNlICovCi0JYnl0ZXNfdG9fd3JpdGUgPSBtaW4oY291bnQsIHdyaXRlX2J1ZmZlcl9zaXplKmRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplKTsKKwlieXRlc190b193cml0ZSA9IG1pbihjb3VudCwKKwkJCXdyaXRlX2J1ZmZlcl9zaXplICoKKwkJCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplKTsKIAlpZiAoYnl0ZXNfdG9fd3JpdGUgPCBjb3VudCkKLQkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LCAiV3JpdGUgYnVmZmVyIG92ZXJmbG93LCAlemQgYnl0ZXMgZHJvcHBlZFxuIixjb3VudC1ieXRlc190b193cml0ZSk7CisJCWRldl93YXJuKCZkZXYtPmludGYtPmRldiwKKwkJCSJXcml0ZSBidWZmZXIgb3ZlcmZsb3csICV6ZCBieXRlcyBkcm9wcGVkXG4iLAorCQkJY291bnQgLSBieXRlc190b193cml0ZSk7CiAKLQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogY291bnQgPSAlemQsIGJ5dGVzX3RvX3dyaXRlID0gJXpkXG4iLCBfX2Z1bmNfXywgY291bnQsIGJ5dGVzX3RvX3dyaXRlKTsKKwlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCSIlczogY291bnQgPSAlemQsIGJ5dGVzX3RvX3dyaXRlID0gJXpkXG4iLCBfX2Z1bmNfXywKKwkJY291bnQsIGJ5dGVzX3RvX3dyaXRlKTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLCBidWZmZXIsIGJ5dGVzX3RvX3dyaXRlKSkgewogCQlyZXR2YWwgPSAtRUZBVUxUOwpAQCAtNzU3LDE0ICs3MzEsMTMgQEAKIAogCS8qIHNlbmQgb2ZmIHRoZSB1cmIgKi8KIAl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0X291dF91cmIsCi0JCQkgaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAotCQkJIHVzYl9zbmRpbnRwaXBlKGludGVyZmFjZV90b191c2JkZXYoZGV2LT5pbnRmKSwKLQkJCQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJCSBkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLAotCQkJIGJ5dGVzX3RvX3dyaXRlLAotCQkJIHVzYl90cmFuenBvcnRfaW50ZXJydXB0X291dF9jYWxsYmFjaywKLQkJCSBkZXYsCi0JCQkgZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsKTsKKwkJCWludGVyZmFjZV90b191c2JkZXYoZGV2LT5pbnRmKSwKKwkJCXVzYl9zbmRpbnRwaXBlKGludGVyZmFjZV90b191c2JkZXYoZGV2LT5pbnRmKSwKKwkJCQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPgorCQkJCWJFbmRwb2ludEFkZHJlc3MpLAorCQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciwgYnl0ZXNfdG9fd3JpdGUsCisJCQl1c2JfdHJhbnpwb3J0X2ludGVycnVwdF9vdXRfY2FsbGJhY2ssIGRldiwKKwkJCWRldi0+aW50ZXJydXB0X291dF9pbnRlcnZhbCk7CiAKIAlkZXYtPmludGVycnVwdF9vdXRfYnVzeSA9IDE7CiAJd21iKCk7CkBAIC03ODcsMTIgKzc2MCwxMiBAQAogCiAvKiBmaWxlIG9wZXJhdGlvbnMgbmVlZGVkIHdoZW4gd2UgcmVnaXN0ZXIgdGhpcyBkcml2ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl90cmFuenBvcnRfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkucmVhZCAgPQl1c2JfdHJhbnpwb3J0X3JlYWQsCi0JLndyaXRlID0JdXNiX3RyYW56cG9ydF93cml0ZSwKLQkub3BlbiA9CQl1c2JfdHJhbnpwb3J0X29wZW4sCi0JLnJlbGVhc2UgPQl1c2JfdHJhbnpwb3J0X3JlbGVhc2UsCi0JLnBvbGwgPQkJdXNiX3RyYW56cG9ydF9wb2xsLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gdXNiX3RyYW56cG9ydF9yZWFkLAorCS53cml0ZSA9IHVzYl90cmFuenBvcnRfd3JpdGUsCisJLm9wZW4gPSB1c2JfdHJhbnpwb3J0X29wZW4sCisJLnJlbGVhc2UgPSB1c2JfdHJhbnpwb3J0X3JlbGVhc2UsCisJLnBvbGwgPSB1c2JfdHJhbnpwb3J0X3BvbGwsCiB9OwogCiAvKgpAQCAtODAwLDIwICs3NzMsMTkgQEAKICAqIGFuZCB0byBoYXZlIHRoZSBkZXZpY2UgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkcml2ZXIgY29yZQogICovCiBzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNiX3RyYW56cG9ydF9jbGFzcyA9IHsKLQkubmFtZSA9CQkidHJhbnpwb3J0JWQiLAotCS5mb3BzID0JCSZ1c2JfdHJhbnpwb3J0X2ZvcHMsCi0JLm1pbm9yX2Jhc2UgPQlVU0JfVFJBTlpQT1JUX01JTk9SX0JBU0UsCisJLm5hbWUgPSAidHJhbnpwb3J0JWQiLAorCS5mb3BzID0gJnVzYl90cmFuenBvcnRfZm9wcywKKwkubWlub3JfYmFzZSA9IFVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRSwKIH07CiAKLQogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X3Byb2JlCiAgKgogICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKICAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCiAgKi8KLXN0YXRpYyBpbnQgdXNiX3RyYW56cG9ydF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoteworc3RhdGljIGludCB1c2JfdHJhbnpwb3J0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwpAQCAtODI0LDcgKzc5Niw3IEBACiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLwogCi0JZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCSBkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGV4aXQ7CkBAIC04NTEsMjUgKzgyMywzMyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50ID09IE5VTEwpCi0JCWRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgb3V0IGVuZHBvaW50IG5vdCBmb3VuZCAodXNpbmcgY29udHJvbCBlbmRwb2ludCBpbnN0ZWFkKVxuIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkiSW50ZXJydXB0IG91dCBlbmRwb2ludCBub3QgZm91bmQiCisJCQkiKHVzaW5nIGNvbnRyb2wgZW5kcG9pbnQgaW5zdGVhZClcbiIpOwogCi0KLQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplID0gbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplID0KKwkgICAgbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAogCWlmIChkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplICE9IDgpCi0JICAgIGRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgaW4gZW5kcG9pbnQgc2l6ZSBpcyBub3QgOCFcbiIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiSW50ZXJydXB0IGluIGVuZHBvaW50IHNpemUgaXMgbm90IDghXG4iKTsKIAotCWlmKHJpbmdfYnVmZmVyX3NpemUgPT0gMCkgeyByaW5nX2J1ZmZlcl9zaXplID0gUklOR19CVUZGRVJfU0laRTsgfQotCXRydWVfc2l6ZSA9IG1pbihyaW5nX2J1ZmZlcl9zaXplLFJJTkdfQlVGRkVSX1NJWkUpOwotCS8qIEZJWE1FIC0gdGhlcmUgYXJlIG1vcmUgdXNiX2FsbG9jIHJvdXRpbmVzIGZvciBkbWEgY29ycmVjdG5lc3MuIE5lZWRlZD8gKi8KKwlpZiAocmluZ19idWZmZXJfc2l6ZSA9PSAwKQorCQlyaW5nX2J1ZmZlcl9zaXplID0gUklOR19CVUZGRVJfU0laRTsKKwl0cnVlX3NpemUgPSBtaW4ocmluZ19idWZmZXJfc2l6ZSwgUklOR19CVUZGRVJfU0laRSk7CiAKLQlkZXYtPnJpbmdfYnVmZmVyID0ga21hbGxvYygodHJ1ZV9zaXplKnNpemVvZihzdHJ1Y3QgdHJhbnpwb3J0X2NtZCkpKzgsIEdGUF9LRVJORUwpOworCS8qIEZJWE1FIC0gdGhlcmUgYXJlIG1vcmUgdXNiX2FsbG9jIHJvdXRpbmVzIGZvciBkbWEgY29ycmVjdG5lc3MuCisJICAgTmVlZGVkPyAqLworCisJZGV2LT5yaW5nX2J1ZmZlciA9CisJICAgIGttYWxsb2MoKHRydWVfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgdHJhbnpwb3J0X2NtZCkpICsgOCwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWRldi0+cmluZ19idWZmZXIpIHsKLQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgcmluZ19idWZmZXIgb2Ygc2l6ZSAlZFxuIix0cnVlX3NpemUpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkiQ291bGRuJ3QgYWxsb2NhdGUgcmluZ19idWZmZXIgc2l6ZSAlZFxuIiwgdHJ1ZV9zaXplKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0ga21hbGxvYyhkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplLCBHRlBfS0VSTkVMKTsKKwlkZXYtPmludGVycnVwdF9pbl9idWZmZXIgPQorCSAgICBrbWFsbG9jKGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXJcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtODc5LDEzICs4NTksMTggQEAKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X2luX3VyYlxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplID0gZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50ID8gbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgOgotCQkJCQkJCQkJIHVkZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwOworCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplID0KKwkgICAgZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50ID8KKwkgICAgbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgOgorCSAgICB1ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMDsKIAotCWlmIChkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSAhPTgpCi0JCWRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgb3V0IGVuZHBvaW50IHNpemUgaXMgbm90IDghKVxuIik7CisJaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplICE9IDgpCisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgc2l6ZSBpcyBub3QgOCEpXG4iKTsKIAotCWRldi0+aW50ZXJydXB0X291dF9idWZmZXIgPSBrbWFsbG9jKHdyaXRlX2J1ZmZlcl9zaXplKmRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplLCBHRlBfS0VSTkVMKTsKKwlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyID0KKwkgICAga21hbGxvYyh3cml0ZV9idWZmZXJfc2l6ZSAqIGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplLAorCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9vdXRfYnVmZmVyXG4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTg5NSw5ICs4ODAsMTggQEAKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF91cmJcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KLQlkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCA9IG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPiBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkludGVydmFsID8gbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA6IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWw7Ci0JaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCkKLQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsID0gbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgPiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbCA/IG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iSW50ZXJ2YWw7CisJZGV2LT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPQorCSAgICBtaW5faW50ZXJydXB0X2luX2ludGVydmFsID4KKwkgICAgZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJJbnRlcnZhbCA/IG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwKKwkgICAgOiBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkludGVydmFsOworCisJaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCkgeworCQlkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwgPQorCQkgICAgbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgPgorCQkgICAgZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iSW50ZXJ2YWwgPworCQkgICAgbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgOgorCQkgICAgZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iSW50ZXJ2YWw7CisJfQogCiAJLyogd2UgY2FuIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugbm93LCBhcyBpdCBpcyByZWFkeSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKQEAgLTkwNSwzNSArODk5LDMzIEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3RyYW56cG9ydF9jbGFzcyk7CiAJaWYgKHJldHZhbCkgewogCQkvKiBzb21ldGhpbmcgcHJldmVudGVkIHVzIGZyb20gcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgKi8KLQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuIik7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKIAkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFJlY29yZCkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0VHJhY2tyZWMpKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFRyYWNrbXV0ZSkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0VHJhY2tzb2xvKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRBbnlzb2xvKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRMb29wKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRQdW5jaCkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3doZWVsKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfZXZlbnQpKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9kdW1wX3N0YXRlKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfY29tcHJlc3Nfd2hlZWwpKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9lbmFibGUpKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vZmZsaW5lKSkpIGdvdG8gZXJyb3I7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9jb21wcmVzc193aGVlbCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX29mZmxpbmUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JZGV2X2luZm8oJmludGYtPmRldiwgIlRyYW56cG9ydCBEZXZpY2UgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAlZCBtaW5vciAlZFxuIiwKLQkJKGludGYtPm1pbm9yIC0gVVNCX1RSQU5aUE9SVF9NSU5PUl9CQVNFKSwgVVNCX01BSk9SLCBpbnRmLT5taW5vcik7CisJZGV2X2luZm8oJmludGYtPmRldiwKKwkJIlRyYW56cG9ydCBEZXZpY2UgIyVkIG5vdyBhdHRhY2hlZCB0byBtYWpvciAlZCBtaW5vciAlZFxuIiwKKwkJKGludGYtPm1pbm9yIC0gVVNCX1RSQU5aUE9SVF9NSU5PUl9CQVNFKSwgVVNCX01BSk9SLAorCQlpbnRmLT5taW5vcik7CiAKIGV4aXQ6CiAJcmV0dXJuIHJldHZhbDsKIAogZXJyb3I6CiAJdXNiX3RyYW56cG9ydF9kZWxldGUoZGV2KTsKLQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTk2NiwxNSArOTU4LDE1IEBACiAJbXV0ZXhfdW5sb2NrKCZkaXNjb25uZWN0X211dGV4KTsKIAogCWRldl9pbmZvKCZpbnRmLT5kZXYsICJUcmFuenBvcnQgU3VyZmFjZSAjJWQgbm93IGRpc2Nvbm5lY3RlZFxuIiwKLQkJIChtaW5vciAtIFVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRSkpOworCQkobWlub3IgLSBVU0JfVFJBTlpQT1JUX01JTk9SX0JBU0UpKTsKIH0KIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl90cmFuenBvcnRfZHJpdmVyID0gewotCS5uYW1lID0JCSJ0cmFuenBvcnQiLAotCS5wcm9iZSA9CXVzYl90cmFuenBvcnRfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQl1c2JfdHJhbnpwb3J0X2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0JdXNiX3RyYW56cG9ydF90YWJsZSwKKwkubmFtZSA9ICJ0cmFuenBvcnQiLAorCS5wcm9iZSA9IHVzYl90cmFuenBvcnRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB1c2JfdHJhbnpwb3J0X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gdXNiX3RyYW56cG9ydF90YWJsZSwKIH07CiAKIC8qKgpAQCAtOTg3LDE0ICs5NzksMTQgQEAKIAkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfdHJhbnpwb3J0X2RyaXZlcik7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIl9fRklMRV9fIiBkcml2ZXIuIEVycm9yIG51bWJlciAlZFxuIiwgcmV0dmFsKTsKLQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiIF9fRklMRV9fCisJCQkiIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9Ci0KIC8qKgogICoJdXNiX3RyYW56cG9ydF9leGl0CiAgKi8KKwogc3RhdGljIHZvaWQgX19leGl0IHVzYl90cmFuenBvcnRfZXhpdCh2b2lkKQogewogCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwpAQCAtMTAwMyw0ICs5OTUsMyBAQAogCiBtb2R1bGVfaW5pdCh1c2JfdHJhbnpwb3J0X2luaXQpOwogbW9kdWxlX2V4aXQodXNiX3RyYW56cG9ydF9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnCmluZGV4IGYyY2Y3ZjYuLmNhNmFkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKIAlzZWxlY3QgQ1JDMzIKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBzb21lIHdpZXJkIGRldmljZS4uLgorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3Igc29tZSB3ZWlyZCBkZXZpY2UuLi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ283MDA3CkBAIC0yMCw3ICsyMCw3IEBACiAJZGVwZW5kcyBvbiBWSURFT19HTzcwMDcgJiYgVVNCCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3Igc29tZSB3aWVyZCBkZXZpY2UuLi4KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHNvbWUgd2VpcmQgZGV2aWNlLi4uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdvNzAwNy11c2IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYwppbmRleCA4NjhlZGI2Li4wNmNhY2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCkBAIC0xODI3LDcgKzE4MjcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBnbzcwMDdfdGVtcGxhdGUgPSB7CiAJLm5hbWUJCT0gImdvNzAwNyIsCi0JLnZmbF90eXBlCT0gVklEX1RZUEVfQ0FQVFVSRSwKIAkuZm9wcwkJPSAmZ283MDA3X2ZvcHMsCiAJLm1pbm9yCQk9IC0xLAogCS5yZWxlYXNlCT0gZ283MDA3X3ZmbF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCmluZGV4IGZiNjg0NWUuLmQzMzNlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogc3RhdGljIGludCB3cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgZ283MDA3ICpnbyA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2I7CiAJaW50IHJjOwogCWludCBkZXZfYWRkciA9IGNsaWVudC0+YWRkcjsKIAl1OCAqYnVmOwpAQCAtMTY0LDggKzE2NCwxMCBAQAogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwl1c2IgPSBnby0+aHBpX2NvbnRleHQ7CiAJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdXNiLT5pMmNfbG9jaykgIT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJpMmMgbG9jayBmYWlsZWRcbiIpOworCQlrZnJlZShidWYpOwogCQlyZXR1cm4gLUVJTlRSOwogCX0KIAlyYyA9IGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4NTUsIGRldl9hZGRyLApAQCAtMTgxLDcgKzE4Myw3IEBACiBzdGF0aWMgaW50IHdyaXRlX3JlZ19mcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgYWRkciwgdTE2IHZhbCkKIHsKIAlzdHJ1Y3QgZ283MDA3ICpnbyA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2I7CiAJdTggKmJ1ZjsKIAlzdHJ1Y3QgczIyNTAgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0yMDAsNiArMjAyLDcgQEAKIAogCW1lbXNldChidWYsIDB4Y2QsIDYpOwogCisJdXNiID0gZ28tPmhwaV9jb250ZXh0OwogCWlmIChkb3duX2ludGVycnVwdGlibGUoJnVzYi0+aTJjX2xvY2spICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaTJjIGxvY2sgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5UUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOGQ1ODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9LY29uZmlnCkBAIC0wLDAgKzEsNiBAQAorY29uZmlnIEhFQ0kKKwl0cmlzdGF0ZSAiSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIChNRUkpIFN1cHBvcnQiCisJLS0taGVscC0tLQorCSAgVGhlIEludGVsIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSAoSW50ZWwgTUVJKSBkcml2ZXIgYWxsb3dzCisJICBhcHBsaWNhdGlvbnMgdG8gYWNjZXNzIHRoZSBBY3RpdmUgTWFuYWdlbWVudCBUZWNobm9sb2d5CisJICBmaXJtd2FyZSBhbmQgb3RoZXIgTWFuYWdlbWVudCBFbmdpbmUgc3ViLXN5c3RlbXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MjQ4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK29iai0kKENPTkZJR19IRUNJKQkrPSBoZWNpLm8KKworaGVjaS1vYmpzIDo9CQkJCVwKKwkJaGVjaV9pbml0Lm8JCVwKKwkJaW50ZXJydXB0Lm8JCVwKKwkJaGVjaV9pbnRlcmZhY2UubwlcCisJCWlvX2hlY2kubwkJXAorCQloZWNpX21haW4ubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODY3MTVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvVE9ETwpAQCAtMCwwICsxLDYgQEAKK1RPRE86CisJLSBmaXggdXNlci9rZXJuZWwgcG9pbnRlciBtZXNzIGluIHRoZSBpb2N0bCBoYW5kbGVycyBhcyBwb2ludGVkCisJICBvdXQgYnkgc3BhcnNlLgorCS0gcmVzb2x2ZSB0aGUgaW9jdGxzIGFuZCBzZWUgaWYgbW9zdCBvZiB0aGVtIGNhbiBqdXN0IGJlIHNpbXBsZQorCSAgc3lzZnMgZmlsZXMKKwktIGZpeCBsb2NraW5nIGlzc3VlcyB0aGF0IHNwYXJzZSBwb2ludHMgb3V0IGF0IHRoZSBsZWFzdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDE5MmUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaS5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaWZuZGVmIF9IRUNJX0hfCisjZGVmaW5lIF9IRUNJX0hfCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9haW8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgImhlY2lfZGF0YV9zdHJ1Y3R1cmVzLmgiCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ3VpZCBoZWNpX3B0aGlfZ3VpZDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ3VpZCBoZWNpX3dkX2d1aWQ7CitleHRlcm4gY29uc3QgX191OCBoZWNpX3N0YXJ0X3dkX3BhcmFtc1tdOworZXh0ZXJuIGNvbnN0IF9fdTggaGVjaV9zdG9wX3dkX3BhcmFtc1tdOworZXh0ZXJuIGNvbnN0IF9fdTggaGVjaV93ZF9zdGF0ZV9pbmRlcGVuZGVuY2VfbXNnWzNdWzRdOworCisvKgorICogaGVjaSBkZXZpY2UgSUQKKyAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF84Mjk0NkdaICAgIDB4Mjk3NCAgLyogODI5NDZHWi9HTCAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF84MkczNSAgICAgIDB4Mjk4NCAgLyogODJHMzUgRXhwcmVzcyAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF84MlE5NjUgICAgIDB4Mjk5NCAgLyogODJROTYzL1E5NjUgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfODJHOTY1ICAgICAweDI5QTQgIC8qIDgyUDk2NS9HOTY1ICovCisKKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfODJHTTk2NSAgICAweDJBMDQgIC8qIE1vYmlsZSBQTTk2NS9HTTk2NSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF84MkdNRTk2NSAgIDB4MkExNCAgLyogTW9iaWxlIEdNRTk2NS9HTEU5NjAgKi8KKworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzgyUTM1IDB4MjlCNCAgLyogODJRMzUgRXhwcmVzcyAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzgyRzMzIDB4MjlDNCAgLyogODJHMzMvRzMxL1AzNS9QMzEgRXhwcmVzcyAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzgyUTMzIDB4MjlENCAgLyogODJRMzMgRXhwcmVzcyAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzgyWDM4IDB4MjlFNCAgLyogODJYMzgvWDQ4IEV4cHJlc3MgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV8zMjAwICAweDI5RjQgIC8qIDMyMDAvMzIxMCBTZXJ2ZXIgKi8KKworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzYgICAgIDB4MjhCNCAgLyogQmVhcmxha2UgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV83ICAgICAweDI4QzQgIC8qIEJlYXJsYWtlICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfOCAgICAgMHgyOEQ0ICAvKiBCZWFybGFrZSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzkgICAgIDB4MjhFNCAgLyogQmVhcmxha2UgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV8xMCAgICAweDI4RjQgIC8qIEJlYXJsYWtlICovCisKKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOU1fMSAgICAweDJBNDQgIC8qIENhbnRpZ2EgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOU1fMiAgICAweDJBNTQgIC8qIENhbnRpZ2EgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOU1fMyAgICAweDJBNjQgIC8qIENhbnRpZ2EgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOU1fNCAgICAweDJBNzQgIC8qIENhbnRpZ2EgKi8KKworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0gxMF8xICAgIDB4MkUwNCAgLyogRWFnbGVsYWtlICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDEwXzIgICAgMHgyRTE0ICAvKiBFYWdsZWxha2UgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIMTBfMyAgICAweDJFMjQgIC8qIEVhZ2xlbGFrZSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0gxMF80ICAgIDB4MkUzNCAgLyogRWFnbGVsYWtlICovCisKKy8qCisgKiBoZWNpIGluaXQgZnVuY3Rpb24gcHJvdG90eXBlcworICovCitzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqaW5pdF9oZWNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit2b2lkIGhlY2lfcmVzZXQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGludGVycnVwdHMpOworaW50IGhlY2lfaHdfaW5pdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK2ludCBoZWNpX3Rhc2tfaW5pdGlhbGl6ZV9jbGllbnRzKHZvaWQgKmRhdGEpOworaW50IGhlY2lfaW5pdGlhbGl6ZV9jbGllbnRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpoZWNpX2FsbG9jX2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CitpbnQgaGVjaV9kaXNjb25uZWN0X2hvc3RfY2xpZW50KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7Cit2b2lkIGhlY2lfaW5pdGlhbGl6ZV9saXN0KHN0cnVjdCBpb19oZWNpX2xpc3QgKmxpc3QsCisJCQkgIHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOwordm9pZCBoZWNpX2ZsdXNoX2xpc3Qoc3RydWN0IGlvX2hlY2lfbGlzdCAqbGlzdCwKKwkJICAgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKK3ZvaWQgaGVjaV9mbHVzaF9xdWV1ZXMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCit2b2lkIGhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBfX3U4IGhvc3RfY2xpZW50X2lkKTsKKworLyoKKyAqICBpbnRlcnJ1cHQgZnVuY3Rpb24gcHJvdG90eXBlCisgKi8KK2lycXJldHVybl90IGhlY2lfaXNyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworCit2b2lkIGhlY2lfd2RfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKKworLyoKKyAqICBpbnB1dCBvdXRwdXQgZnVuY3Rpb24gcHJvdG90eXBlCisgKi8KK2ludCBoZWNpX2lvY3RsX2dldF92ZXJzaW9uKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCQkgICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgX191c2VyICp1X21zZywKKwkJCSAgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZywKKwkJCSAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCitpbnQgaGVjaV9pb2N0bF9jb25uZWN0X2NsaWVudChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkJICAgICAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIF9fdXNlciAqdV9tc2csCisJCQkgICAgICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2csCisJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKK2ludCBoZWNpX2lvY3RsX3dkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCSAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnLAorCQkgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCitpbnQgaGVjaV9pb2N0bF9ieXBhc3Nfd2Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2csCisJCSAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKK2ludCBoZWNpX3N0YXJ0X3JlYWQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJICAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCitpbnQgcHRoaV93cml0ZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCSAgICAgICBzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiKTsKKworaW50IHB0aGlfcmVhZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgICAgICBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpvZmZzZXQpOworCitzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpmaW5kX3B0aGlfcmVhZF9saXN0X2VudHJ5KAorCQkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBmaWxlICpmaWxlKTsKKwordm9pZCBydW5fbmV4dF9pYW10aGlmX2NtZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKKwordm9pZCBoZWNpX2ZyZWVfY2JfcHJpdmF0ZShzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiKTsKKworLyoqCisgKiBoZWNpX2ZlX3NhbWVfaWQgLSB0ZWxsIGlmIGZpbGUgcHJpdmF0ZSBkYXRhIGhhdmUgc2FtZSBpZAorICoKKyAqIEBmZTE6IHByaXZhdGUgZGF0YSBvZiAxLiBmaWxlIG9iamVjdAorICogQGZlMjogcHJpdmF0ZSBkYXRhIG9mIDIuIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAgIT0wIC0gaWYgaWRzIGFyZSB0aGUgc2FtZSwgMCAtIGlmIGRpZmZlci4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaGVjaV9mZV9zYW1lX2lkKGNvbnN0IHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmUxLAorCQkJCSAgY29uc3Qgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmZTIpCit7CisJcmV0dXJuICgoZmUxLT5ob3N0X2NsaWVudF9pZCA9PSBmZTItPmhvc3RfY2xpZW50X2lkKQorCQkmJiAoZmUxLT5tZV9jbGllbnRfaWQgPT0gZmUyLT5tZV9jbGllbnRfaWQpKTsKK30KKworI2VuZGlmIC8qIF9IRUNJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2RhdGFfc3RydWN0dXJlcy5oIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9kYXRhX3N0cnVjdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzVlOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9kYXRhX3N0cnVjdHVyZXMuaApAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworI2lmbmRlZiBfSEVDSV9EQVRBX1NUUlVDVFVSRVNfSF8KKyNkZWZpbmUgX0hFQ0lfREFUQV9TVFJVQ1RVUkVTX0hfCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9haW8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogZXJyb3IgY29kZSBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgICAgIEVTTE9UU19PVkVSRkxPVyAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgRUNPUlJVUFRFRF9NRVNTQUdFX0hFQURFUiAgICAxMDAwCisjZGVmaW5lICAgICBFQ09NUExFVEVfTUVTU0FHRSAgICAgICAgICAgIDEwMDEKKworI2RlZmluZSAgICAgSEVDSV9GQ19NRVNTQUdFX1JFU0VSVkVEX0xFTkdUSCAgICAgICAgICAgNQorCisvKgorICogTnVtYmVyIG9mIHF1ZXVlIGxpc3RzIHVzZWQgYnkgdGhpcyBkcml2ZXIKKyAqLworI2RlZmluZSBIRUNJX0lPX0xJU1RTX05VTUJFUiAgICAgICAgNworCisvKgorICogTWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAoTVRVKSBvZiBoZWNpIG1lc3NhZ2VzCisgKi8KKyNkZWZpbmUgSUFNVEhJRl9NVFUgNDE2MAorCisKKy8qCisgKiBIRUNJIEhXIFNlY3Rpb24KKyAqLworCisvKiBIRUNJIHJlZ2lzdGVycyAqLworLyogSF9DQl9XVyAtIEhvc3QgQ2lyY3VsYXIgQnVmZmVyIChDQikgV3JpdGUgV2luZG93IHJlZ2lzdGVyICovCisjZGVmaW5lIEhfQ0JfV1cgICAgMAorLyogSF9DU1IgLSBIb3N0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEhfQ1NSICAgICAgNAorLyogTUVfQ0JfUlcgLSBNRSBDaXJjdWxhciBCdWZmZXIgUmVhZCBXaW5kb3cgcmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgTUVfQ0JfUlcgICA4CisvKiBNRV9DU1JfSEEgLSBNRSBDb250cm9sIFN0YXR1cyBIb3N0IEFjY2VzcyByZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBNRV9DU1JfSEEgIDB4QworCisKKy8qIHJlZ2lzdGVyIGJpdHMgb2YgSF9DU1IgKEhvc3QgQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIpICovCisvKiBIb3N0IENpcmN1bGFyIEJ1ZmZlciBEZXB0aCAtIG1heGltdW0gbnVtYmVyIG9mIDMyLWJpdCBlbnRyaWVzIGluIENCICovCisjZGVmaW5lIEhfQ0JEICAgICAgICAgICAgIDB4RkYwMDAwMDAKKy8qIEhvc3QgQ2lyY3VsYXIgQnVmZmVyIFdyaXRlIFBvaW50ZXIgKi8KKyNkZWZpbmUgSF9DQldQICAgICAgICAgICAgMHgwMEZGMDAwMAorLyogSG9zdCBDaXJjdWxhciBCdWZmZXIgUmVhZCBQb2ludGVyICovCisjZGVmaW5lIEhfQ0JSUCAgICAgICAgICAgIDB4MDAwMEZGMDAKKy8qIEhvc3QgUmVzZXQgKi8KKyNkZWZpbmUgSF9SU1QgICAgICAgICAgICAgMHgwMDAwMDAxMAorLyogSG9zdCBSZWFkeSAqLworI2RlZmluZSBIX1JEWSAgICAgICAgICAgICAweDAwMDAwMDA4CisvKiBIb3N0IEludGVycnVwdCBHZW5lcmF0ZSAqLworI2RlZmluZSBIX0lHICAgICAgICAgICAgICAweDAwMDAwMDA0CisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgSF9JUyAgICAgICAgICAgICAgMHgwMDAwMDAwMgorLyogSG9zdCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEhfSUUgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworCisvKiByZWdpc3RlciBiaXRzIG9mIE1FX0NTUl9IQSAoTUUgQ29udHJvbCBTdGF0dXMgSG9zdCBBY2Nlc3MgcmVnaXN0ZXIpICovCisvKiBNRSBDQiAoQ2lyY3VsYXIgQnVmZmVyKSBEZXB0aCBIUkEgKEhvc3QgUmVhZCBBY2Nlc3MpCisgKiAgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfQ0JEICovCisjZGVmaW5lIE1FX0NCRF9IUkEgICAgICAgIDB4RkYwMDAwMDAKKy8qIE1FIENCIFdyaXRlIFBvaW50ZXIgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX0NCV1AgKi8KKyNkZWZpbmUgTUVfQ0JXUF9IUkEgICAgICAgMHgwMEZGMDAwMAorLyogTUUgQ0IgUmVhZCBQb2ludGVyIEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9DQlJQICovCisjZGVmaW5lIE1FX0NCUlBfSFJBICAgICAgIDB4MDAwMEZGMDAKKy8qIE1FIFJlc2V0IEhSQSAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9SU1QgKi8KKyNkZWZpbmUgTUVfUlNUX0hSQSAgICAgICAgMHgwMDAwMDAxMAorLyogTUUgUmVhZHkgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX1JEWSAqLworI2RlZmluZSBNRV9SRFlfSFJBICAgICAgICAweDAwMDAwMDA4CisvKiBNRSBJbnRlcnJ1cHQgR2VuZXJhdGUgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX0lHICovCisjZGVmaW5lIE1FX0lHX0hSQSAgICAgICAgIDB4MDAwMDAwMDQKKy8qIE1FIEludGVycnVwdCBTdGF0dXMgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX0lTICovCisjZGVmaW5lIE1FX0lTX0hSQSAgICAgICAgIDB4MDAwMDAwMDIKKy8qIE1FIEludGVycnVwdCBFbmFibGUgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX0lFICovCisjZGVmaW5lIE1FX0lFX0hSQSAgICAgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSBIRUNJX01JTk9SU19CQVNFCTEKKyNkZWZpbmUgSEVDSV9NSU5PUlNfQ09VTlQJMQorCisjZGVmaW5lICBIRUNJX01JTk9SX05VTUJFUgkxCisjZGVmaW5lICBIRUNJX01BWF9PUEVOX0hBTkRMRV9DT1VOVAkyNTMKKworLyoKKyAqIGRlYnVnIGtlcm5lbCBwcmludCBtYWNybyBkZWZpbmUKKyAqLworZXh0ZXJuIGludCBoZWNpX2RlYnVnOworCisjZGVmaW5lIERCRyhmb3JtYXQsIGFyZy4uLikgZG8geyBcCisJaWYgKGhlY2lfZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGVjaTogJXM6ICIgZm9ybWF0LCBfX2Z1bmNfXywgIyMgYXJnKTsgXAorfSB3aGlsZSAoMCkKKworCisvKgorICogdGltZSB0byB3YWl0IEhFQ0kgYmVjb21lIHJlYWR5IGFmdGVyIGluaXQKKyAqLworI2RlZmluZSBIRUNJX0lOVEVST1BfVElNRU9VVCAgICAoSFogKiA3KQorCisvKgorICogd2F0Y2ggZG9nIGRlZmluaXRpb24KKyAqLworI2RlZmluZSBIRUNJX1dBVENIRE9HX0RBVEFfU0laRSAgICAgICAgIDE2CisjZGVmaW5lIEhFQ0lfU1RBUlRfV0RfREFUQV9TSVpFICAgICAgICAgMjAKKyNkZWZpbmUgSEVDSV9XRF9QQVJBTVNfU0laRSAgICAgICAgICAgICA0CisjZGVmaW5lIEhFQ0lfV0RfU1RBVEVfSU5ERVBFTkRFTkNFX01TR19TRU5UICAgICAgICgxIDw8IDApCisKKyNkZWZpbmUgSEVDSV9XRF9IT1NUX0NMSUVOVF9JRCAgICAgICAgICAxCisjZGVmaW5lIEhFQ0lfSUFNVEhJRl9IT1NUX0NMSUVOVF9JRCAgICAgMgorCitzdHJ1Y3QgZ3VpZCB7CisJX191MzIgZGF0YTE7CisJX191MTYgZGF0YTI7CisJX191MTYgZGF0YTM7CisJX191OCBkYXRhNFs4XTsKK307CisKKy8qIEZpbGUgc3RhdGUgKi8KK2VudW0gZmlsZV9zdGF0ZSB7CisJSEVDSV9GSUxFX0lOSVRJQUxJWklORyA9IDAsCisJSEVDSV9GSUxFX0NPTk5FQ1RJTkcsCisJSEVDSV9GSUxFX0NPTk5FQ1RFRCwKKwlIRUNJX0ZJTEVfRElTQ09OTkVDVElORywKKwlIRUNJX0ZJTEVfRElTQ09OTkVDVEVECit9OworCisvKiBIRUNJIGRldmljZSBzdGF0ZXMgKi8KK2VudW0gaGVjaV9zdGF0ZXMgeworCUhFQ0lfSU5JVElBTElaSU5HID0gMCwKKwlIRUNJX0VOQUJMRUQsCisJSEVDSV9SRVNFVElORywKKwlIRUNJX0RJU0FCTEVELAorCUhFQ0lfUkVDT1ZFUklOR19GUk9NX1JFU0VULAorCUhFQ0lfUE9XRVJfRE9XTiwKKwlIRUNJX1BPV0VSX1VQCit9OworCitlbnVtIGlhbXRoaWZfc3RhdGVzIHsKKwlIRUNJX0lBTVRISUZfSURMRSwKKwlIRUNJX0lBTVRISUZfV1JJVElORywKKwlIRUNJX0lBTVRISUZfRkxPV19DT05UUk9MLAorCUhFQ0lfSUFNVEhJRl9SRUFESU5HLAorCUhFQ0lfSUFNVEhJRl9SRUFEX0NPTVBMRVRFCit9OworCitlbnVtIGhlY2lfZmlsZV90cmFuc2FjdGlvbl9zdGF0ZXMgeworCUhFQ0lfSURMRSwKKwlIRUNJX1dSSVRJTkcsCisJSEVDSV9XUklURV9DT01QTEVURSwKKwlIRUNJX0ZMT1dfQ09OVFJPTCwKKwlIRUNJX1JFQURJTkcsCisJSEVDSV9SRUFEX0NPTVBMRVRFCit9OworCisvKiBIRUNJIENCICovCitlbnVtIGhlY2lfY2JfbWFqb3JfdHlwZXMgeworCUhFQ0lfUkVBRCA9IDAsCisJSEVDSV9XUklURSwKKwlIRUNJX0lPQ1RMLAorCUhFQ0lfT1BFTiwKKwlIRUNJX0NMT1NFCit9OworCisvKiBIRUNJIHVzZXIgZGF0YSBzdHJ1Y3QgKi8KK3N0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSB7CisJX191MzIgc2l6ZTsKKwljaGFyICpkYXRhOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBIRUNJX0NPTk5FQ1RfVElNRU9VVCAgICAgICAgICAgICAzCS8qIGF0IGxlYXN0IDIgc2Vjb25kcyAqLworCisjZGVmaW5lIElBTVRISUZfU1RBTExfVElNRVIgICAgICAgICAgICAgIDEyCS8qIHNlY29uZHMgKi8KKyNkZWZpbmUgSUFNVEhJRl9SRUFEX1RJTUVSICAgICAgICAgICAgICAgMTUJLyogc2Vjb25kcyAqLworCitzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNiX2xpc3Q7CisJZW51bSBoZWNpX2NiX21ham9yX3R5cGVzIG1ham9yX2ZpbGVfb3BlcmF0aW9uczsKKwl2b2lkICpmaWxlX3ByaXZhdGU7CisJc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIHJlcXVlc3RfYnVmZmVyOworCXN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSByZXNwb25zZV9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBpbmZvcm1hdGlvbjsKKwl1bnNpZ25lZCBsb25nIHJlYWRfdGltZTsKKwlzdHJ1Y3QgZmlsZSAqZmlsZV9vYmplY3Q7Cit9OworCisvKiBQcml2YXRlIGZpbGUgc3RydWN0ICovCitzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwllbnVtIGZpbGVfc3RhdGUgc3RhdGU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgdHhfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByeF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3BpbmxvY2tfdCBmaWxlX2xvY2s7IC8qIGZpbGUgbG9jayAqLworCXNwaW5sb2NrX3QgcmVhZF9pb19sb2NrOyAvKiByZWFkIGxvY2sgKi8KKwlzcGlubG9ja190IHdyaXRlX2lvX2xvY2s7IC8qIHdyaXRlIGxvY2sgKi8KKwlpbnQgcmVhZF9wZW5kaW5nOworCWludCBzdGF0dXM7CisJLyogSUQgb2YgY2xpZW50IGNvbm5lY3RlZCAqLworCV9fdTggaG9zdF9jbGllbnRfaWQ7CisJX191OCBtZV9jbGllbnRfaWQ7CisJX191OCBmbG93X2N0cmxfY3JlZHM7CisJX191OCB0aW1lcl9jb3VudDsKKwllbnVtIGhlY2lfZmlsZV90cmFuc2FjdGlvbl9zdGF0ZXMgcmVhZGluZ19zdGF0ZTsKKwllbnVtIGhlY2lfZmlsZV90cmFuc2FjdGlvbl9zdGF0ZXMgd3JpdGluZ19zdGF0ZTsKKwlpbnQgc21fc3RhdGU7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcmVhZF9jYjsKK307CisKK3N0cnVjdCBpb19oZWNpX2xpc3QgeworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgaGVjaV9jYjsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXZpY2VfZXh0ZW5zaW9uOworfTsKKworc3RydWN0IGhlY2lfZHJpdmVyX3ZlcnNpb24geworCV9fdTggbWFqb3I7CisJX191OCBtaW5vcjsKKwlfX3U4IGhvdGZpeDsKKwlfX3UxNiBidWlsZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworc3RydWN0IGhlY2lfY2xpZW50IHsKKwlfX3UzMiBtYXhfbXNnX2xlbmd0aDsKKwlfX3U4IHByb3RvY29sX3ZlcnNpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogIEhFQ0kgQlVTIEludGVyZmFjZSBTZWN0aW9uCisgKi8KK3N0cnVjdCBoZWNpX21zZ19oZHIgeworCV9fdTMyIG1lX2FkZHI6ODsKKwlfX3UzMiBob3N0X2FkZHI6ODsKKwlfX3UzMiBsZW5ndGg6OTsKKwlfX3UzMiByZXNlcnZlZDo2OworCV9fdTMyIG1zZ19jb21wbGV0ZToxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgaGJtX2NtZCB7CisJX191OCBjbWQ6NzsKKwlfX3U4IGlzX3Jlc3BvbnNlOjE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCBoZWNpX2J1c19tZXNzYWdlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCBjb21tYW5kX3NwZWNpZmljX2RhdGFbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1fdmVyc2lvbiB7CisJX191OCBtaW5vcl92ZXJzaW9uOworCV9fdTggbWFqb3JfdmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IHJlc2VydmVkOworCXN0cnVjdCBoYm1fdmVyc2lvbiBob3N0X3ZlcnNpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXNwb25zZSB7CisJc3RydWN0IGhibV9jbWQgY21kOworCWludCBob3N0X3ZlcnNpb25fc3VwcG9ydGVkOworCXN0cnVjdCBoYm1fdmVyc2lvbiBtZV9tYXhfdmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IHJlYXNvbjsKKwlfX3U4IHJlc2VydmVkWzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9ob3N0X3N0b3BfcmVzcG9uc2UgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9tZV9zdG9wX3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IHJlYXNvbjsKKwlfX3U4IHJlc2VydmVkWzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9ob3N0X2VudW1fcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXNwb25zZSB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggcmVzZXJ2ZWRbM107CisJX191OCB2YWxpZF9hZGRyZXNzZXNbMzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhlY2lfY2xpZW50X3Byb3BlcnRpZXMgeworCXN0cnVjdCBndWlkIHByb3RvY29sX25hbWU7CisJX191OCBwcm90b2NvbF92ZXJzaW9uOworCV9fdTggbWF4X251bWJlcl9vZl9jb25uZWN0aW9uczsKKwlfX3U4IGZpeGVkX2FkZHJlc3M7CisJX191OCBzaW5nbGVfcmVjdl9idWY7CisJX191MzIgbWF4X21zZ19sZW5ndGg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX3Byb3BzX3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IGFkZHJlc3M7CisJX191OCByZXNlcnZlZFsyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworc3RydWN0IGhibV9wcm9wc19yZXNwb25zZSB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggYWRkcmVzczsKKwlfX3U4IHN0YXR1czsKKwlfX3U4IHJlc2VydmVkWzFdOworCXN0cnVjdCBoZWNpX2NsaWVudF9wcm9wZXJ0aWVzIGNsaWVudF9wcm9wZXJ0aWVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCBtZV9hZGRyOworCV9fdTggaG9zdF9hZGRyOworCV9fdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCBtZV9hZGRyOworCV9fdTggaG9zdF9hZGRyOworCV9fdTggc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCBtZV9hZGRyOworCV9fdTggaG9zdF9hZGRyOworCV9fdTggcmVzZXJ2ZWRbMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggbWVfYWRkcjsKKwlfX3U4IGhvc3RfYWRkcjsKKwlfX3U4IHJlc2VydmVkW0hFQ0lfRkNfTUVTU0FHRV9SRVNFUlZFRF9MRU5HVEhdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhlY2lfbWVfY2xpZW50IHsKKwlzdHJ1Y3QgaGVjaV9jbGllbnRfcHJvcGVydGllcyBwcm9wczsKKwlfX3U4IGNsaWVudF9pZDsKKwlfX3U4IGZsb3dfY3RybF9jcmVkczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIHByaXZhdGUgZGV2aWNlIHN0cnVjdCAqLworc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkvKiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0ICovCisJLyoKKwkgKiBsaXN0cyBvZiBxdWV1ZXMKKwkgKi8KKwkgLyogYXJyYXkgb2YgcG9pbnRlcnMgdG8gIGFpbyBsaXN0cyAqLworCXN0cnVjdCBpb19oZWNpX2xpc3QgKmlvX2xpc3RfYXJyYXlbSEVDSV9JT19MSVNUU19OVU1CRVJdOworCXN0cnVjdCBpb19oZWNpX2xpc3QgcmVhZF9saXN0OwkvKiBkcml2ZXIgcmVhZCBxdWV1ZSAqLworCXN0cnVjdCBpb19oZWNpX2xpc3Qgd3JpdGVfbGlzdDsJLyogZHJpdmVyIHdyaXRlIHF1ZXVlICovCisJc3RydWN0IGlvX2hlY2lfbGlzdCB3cml0ZV93YWl0aW5nX2xpc3Q7CS8qIHdyaXRlIHdhaXRpbmcgcXVldWUgKi8KKwlzdHJ1Y3QgaW9faGVjaV9saXN0IGN0cmxfd3JfbGlzdDsJLyogbWFuYWdlZCB3cml0ZSBJT0NUTCBsaXN0ICovCisJc3RydWN0IGlvX2hlY2lfbGlzdCBjdHJsX3JkX2xpc3Q7CS8qIG1hbmFnZWQgcmVhZCBJT0NUTCBsaXN0ICovCisJc3RydWN0IGlvX2hlY2lfbGlzdCBwdGhpX2NtZF9saXN0OwkvKiBQVEhJIGxpc3QgZm9yIGNtZCB3YWl0aW5nICovCisKKwkvKiBkcml2ZXIgbWFuYWdlZCBQVEhJIGxpc3QgZm9yIHJlYWRpbmcgY29tcGxldGVkIHB0aGkgY21kIGRhdGEgKi8KKwlzdHJ1Y3QgaW9faGVjaV9saXN0IHB0aGlfcmVhZF9jb21wbGV0ZV9saXN0OworCS8qCisJICogbGlzdCBvZiBmaWxlcworCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmlsZV9saXN0OworCS8qCisJICogbWVtb3J5IG9mIGRldmljZQorCSAqLworCXVuc2lnbmVkIGludCBtZW1fYmFzZTsKKwl1bnNpZ25lZCBpbnQgbWVtX2xlbmd0aDsKKwl2b2lkIF9faW9tZW0gKm1lbV9hZGRyOworCS8qCisJICogbG9jayBmb3IgdGhlIGRldmljZQorCSAqLworCXNwaW5sb2NrX3QgZGV2aWNlX2xvY2s7IC8qIGRldmljZSBsb2NrKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlpbnQgcmVjdmRfbXNnOworCisJc3RydWN0IHRhc2tfc3RydWN0ICpyZWluaXRfdHNrOworCisJc3RydWN0IHRpbWVyX2xpc3Qgd2RfdGltZXI7CisJLyoKKwkgKiBodyBzdGF0ZXMgb2YgaG9zdCBhbmQgZncoTUUpCisJICovCisJX191MzIgaG9zdF9od19zdGF0ZTsKKwlfX3UzMiBtZV9od19zdGF0ZTsKKwkvKgorCSAqIHdhaXRpbmcgcXVldWUgZm9yIHJlY2VpdmUgbWVzc2FnZSBmcm9tIEZXCisJICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9yZWN2ZF9tc2c7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9zdG9wX3dkOworCS8qCisJICogaGVjaSBkZXZpY2UgIHN0YXRlcworCSAqLworCWVudW0gaGVjaV9zdGF0ZXMgaGVjaV9zdGF0ZTsKKwlpbnQgc3RvcDsKKworCV9fdTMyIGV4dHJhX3dyaXRlX2luZGV4OworCV9fdTMyIHJkX21zZ19idWZbMTI4XTsJLyogdXNlZCBmb3IgY29udHJvbCBtZXNzYWdlcyAqLworCV9fdTMyIHdyX21zZ19idWZbMTI4XTsJLyogdXNlZCBmb3IgY29udHJvbCBtZXNzYWdlcyAqLworCV9fdTMyIGV4dF9tc2dfYnVmWzhdOwkvKiBmb3IgY29udHJvbCByZXNwb25zZXMgICAgKi8KKwlfX3UzMiByZF9tc2dfaGRyOworCisJc3RydWN0IGhibV92ZXJzaW9uIHZlcnNpb247CisKKwlpbnQgaG9zdF9idWZmZXJfaXNfZW1wdHk7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlIHdkX2ZpbGVfZXh0OworCXN0cnVjdCBoZWNpX21lX2NsaWVudCAqbWVfY2xpZW50czsgLyogTm90ZTogbWVtb3J5IGhhcyB0byBiZSBhbGxvY2F0ZWQqLworCV9fdTggaGVjaV9tZV9jbGllbnRzWzMyXTsJLyogbGlzdCBvZiBleGlzdGluZyBjbGllbnRzICovCisJX191OCBudW1faGVjaV9tZV9jbGllbnRzOworCV9fdTggaGVjaV9ob3N0X2NsaWVudHNbMzJdOwkvKiBsaXN0IG9mIGV4aXN0aW5nIGNsaWVudHMgKi8KKwlfX3U4IGN1cnJlbnRfaG9zdF9jbGllbnRfaWQ7CisKKwlpbnQgd2RfcGVuZGluZzsKKwlpbnQgd2Rfc3RvcGVkOworCV9fdTE2IHdkX3RpbWVvdXQ7CS8qIHNlY29uZHMgKCh3ZF9kYXRhWzFdIDw8IDgpICsgd2RfZGF0YVswXSkgKi8KKwl1bnNpZ25lZCBjaGFyIHdkX2RhdGFbSEVDSV9TVEFSVF9XRF9EQVRBX1NJWkVdOworCisKKwlfX3UxNiB3ZF9kdWVfY291bnRlcjsKKwlpbnQgYXNmX21vZGU7CisJaW50IHdkX2J5cGFzczsJLyogaWYgMSwgZG9uJ3QgcmVmcmVzaCB3YXRjaGRvZyBNRSBjbGllbnQgKi8KKworCXN0cnVjdCBmaWxlICppYW10aGlmX2ZpbGVfb2JqZWN0OworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSBpYW10aGlmX2ZpbGVfZXh0OworCWludCBpYW10aGlmX2lvY3RsOworCWludCBpYW10aGlmX2NhbmNlbGVkOworCV9fdTMyIGlhbXRoaWZfdGltZXI7CisJX191MzIgaWFtdGhpZl9zdGFsbF90aW1lcjsKKwl1bnNpZ25lZCBjaGFyIGlhbXRoaWZfbXNnX2J1ZltJQU1USElGX01UVV07CisJX191MzIgaWFtdGhpZl9tc2dfYnVmX3NpemU7CisJX191MzIgaWFtdGhpZl9tc2dfYnVmX2luZGV4OworCWludCBpYW10aGlmX2Zsb3dfY29udHJvbF9wZW5kaW5nOworCWVudW0gaWFtdGhpZl9zdGF0ZXMgaWFtdGhpZl9zdGF0ZTsKKworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKmlhbXRoaWZfY3VycmVudF9jYjsKKwlfX3U4IHdyaXRlX2hhbmc7CisJaW50IG5lZWRfcmVzZXQ7CisJbG9uZyBvcGVuX2hhbmRsZV9jb3VudDsKKworfTsKKworLyoqCisgKiByZWFkX2hlY2lfcmVnaXN0ZXIgLSBSZWFkIGEgYnl0ZSBmcm9tIHRoZSBoZWNpIGRldmljZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAb2Zmc2V0OiBvZmZzZXQgZnJvbSB3aGljaCB0byByZWFkIHRoZSBkYXRhCisgKgorICogcmV0dXJucyAgdGhlIGJ5dGUgcmVhZC4KKyAqLworc3RhdGljIGlubGluZSBfX3UzMiByZWFkX2hlY2lfcmVnaXN0ZXIoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKGRldi0+bWVtX2FkZHIgKyBvZmZzZXQpOworfQorCisvKioKKyAqIHdyaXRlX2hlY2lfcmVnaXN0ZXIgLSBXcml0ZSAgNCBieXRlcyB0byB0aGUgaGVjaSBkZXZpY2UKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQG9mZnNldDogb2Zmc2V0IGZyb20gd2hpY2ggdG8gd3JpdGUgdGhlIGRhdGEKKyAqIEB2YWx1ZTogdGhlIGJ5dGUgdG8gd3JpdGUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2hlY2lfcmVnaXN0ZXIoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsICBfX3UzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIGRldi0+bWVtX2FkZHIgKyBvZmZzZXQpOworfQorCisjZW5kaWYgLyogX0hFQ0lfREFUQV9TVFJVQ1RVUkVTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTBkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2luaXQuYwpAQCAtMCwwICsxLDEwNzcgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorCisjaW5jbHVkZSAiaGVjaV9kYXRhX3N0cnVjdHVyZXMuaCIKKyNpbmNsdWRlICJoZWNpX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImhlY2kuaCIKKworCitjb25zdCBfX3U4IGhlY2lfc3RhcnRfd2RfcGFyYW1zW10gPSB7IDB4MDIsIDB4MTIsIDB4MTMsIDB4MTAgfTsKK2NvbnN0IF9fdTggaGVjaV9zdG9wX3dkX3BhcmFtc1tdID0geyAweDAyLCAweDAyLCAweDE0LCAweDEwIH07CisKK2NvbnN0IF9fdTggaGVjaV93ZF9zdGF0ZV9pbmRlcGVuZGVuY2VfbXNnWzNdWzRdID0geworCXsweDA1LCAweDAyLCAweDUxLCAweDEwfSwKKwl7MHgwNSwgMHgwMiwgMHg1MiwgMHgxMH0sCisJezB4MDcsIDB4MDIsIDB4MDEsIDB4MTB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGd1aWQgaGVjaV9hc2ZfZ3VpZCA9IHsKKwkweDc1QjMwQ0Q2LCAweEEyOUUsIDB4NEFGNywKKwl7MHhBNywgMHgxMiwgMHhFNiwgMHgxNywgMHg0MywgMHg5MywgMHhDOCwgMHhBNn0KK307Citjb25zdCBzdHJ1Y3QgZ3VpZCBoZWNpX3dkX2d1aWQgPSB7CisJMHgwNUI3OUE2RiwgMHg0NjI4LCAweDREN0YsCisJezB4ODksIDB4OUQsIDB4QTksIDB4MTUsIDB4MTQsIDB4Q0IsIDB4MzIsIDB4QUJ9Cit9OworY29uc3Qgc3RydWN0IGd1aWQgaGVjaV9wdGhpX2d1aWQgPSB7CisJMHgxMmY4MDAyOCwgMHhiNGI3LCAweDRiMmQsCisJezB4YWMsIDB4YTgsIDB4NDYsIDB4ZTAsIDB4ZmYsIDB4NjUsIDB4ODEsIDB4NGN9Cit9OworCisKKy8qCisgKiAgaGVjaSBpbml0IGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworc3RhdGljIHZvaWQgaGVjaV9jaGVja19hc2ZfbW9kZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaG9zdF9zdGFydF9tZXNzYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBob3N0X2VudW1fY2xpZW50c19tZXNzYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBhbGxvY2F0ZV9tZV9jbGllbnRzX3N0b3JhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBob3N0X2luaXRfd2Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBob3N0X2luaXRfaWFtdGhpZihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaGVjaV93YWl0X2V2ZW50X2ludF90aW1lb3V0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIGxvbmcgdGltZW91dCk7CisKKworLyoqCisgKiBoZWNpX2luaXRpYWxpemVfbGlzdCAtIFNldHMgdXAgYSBxdWV1ZSBsaXN0LgorICoKKyAqIEBsaXN0OiBBbiBpbnN0YW5jZSBvZiBvdXIgbGlzdCBzdHJ1Y3R1cmUKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqLwordm9pZCBoZWNpX2luaXRpYWxpemVfbGlzdChzdHJ1Y3QgaW9faGVjaV9saXN0ICpsaXN0LAorCQkJICBzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCS8qIGluaXRpYWxpemUgb3VyIHF1ZXVlIGxpc3QgKi8KKwlJTklUX0xJU1RfSEVBRCgmbGlzdC0+aGVjaV9jYi5jYl9saXN0KTsKKwlsaXN0LT5zdGF0dXMgPSAwOworCWxpc3QtPmRldmljZV9leHRlbnNpb24gPSBkZXY7Cit9CisKKy8qKgorICogaGVjaV9mbHVzaF9xdWV1ZXMgLSBmbHVzaCBvdXIgcXVldWVzIGxpc3QgYmVsb25nIHRvIGZpbGVfZXh0LgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICovCit2b2lkIGhlY2lfZmx1c2hfcXVldWVzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCWludCBpOworCisJaWYgKCFkZXYgfHwgIWZpbGVfZXh0KQorCQlyZXR1cm47CisKKwkvKiBmbHVzaCBvdXIgcXVldWUgbGlzdCBiZWxvbmcgdG8gZmlsZV9leHQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSEVDSV9JT19MSVNUU19OVU1CRVI7IGkrKykgeworCQlEQkcoInJlbW92ZSBsaXN0IGVudHJ5IGJlbG9uZyB0byBmaWxlX2V4dFxuIik7CisJCWhlY2lfZmx1c2hfbGlzdChkZXYtPmlvX2xpc3RfYXJyYXlbaV0sIGZpbGVfZXh0KTsKKwl9Cit9CisKKworLyoqCisgKiBoZWNpX2ZsdXNoX2xpc3QgLSByZW1vdmUgbGlzdCBlbnRyeSBiZWxvbmcgdG8gZmlsZV9leHQuCisgKgorICogQGxpc3Q6ICBBbiBpbnN0YW5jZSBvZiBvdXIgbGlzdCBzdHJ1Y3R1cmUKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICovCit2b2lkIGhlY2lfZmx1c2hfbGlzdChzdHJ1Y3QgaW9faGVjaV9saXN0ICpsaXN0LAorCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHRfdG1wOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX25leHQgPSBOVUxMOworCisJaWYgKCFsaXN0IHx8ICFmaWxlX2V4dCkKKwkJcmV0dXJuOworCisJaWYgKGxpc3QtPnN0YXR1cyAhPSAwKQorCQlyZXR1cm47CisKKwlpZiAobGlzdF9lbXB0eSgmbGlzdC0+aGVjaV9jYi5jYl9saXN0KSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkJICZsaXN0LT5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJaWYgKHByaXZfY2JfcG9zKSB7CisJCQlmaWxlX2V4dF90bXAgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJCWlmIChmaWxlX2V4dF90bXApIHsKKwkJCQlpZiAoaGVjaV9mZV9zYW1lX2lkKGZpbGVfZXh0LCBmaWxlX2V4dF90bXApKQorCQkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIGhlY2lfcmVzZXRfaWFtdGhpZl9wYXJhbXMgLSBpbml0aWFsaXplcyBoZWNpIGRldmljZSBpYW10aGlmCisgKgorICogQGRldjogVGhlIGhlY2kgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBoZWNpX3Jlc2V0X2lhbXRoaWZfcGFyYW1zKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJLyogcmVzZXQgaWFtdGhpZiBwYXJhbWV0ZXJzLiAqLworCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKwlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplID0gMDsKKwlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCA9IDA7CisJZGV2LT5pYW10aGlmX2NhbmNlbGVkID0gMDsKKwlkZXYtPmlhbXRoaWZfZmlsZV9leHQuZmlsZSA9IE5VTEw7CisJZGV2LT5pYW10aGlmX2lvY3RsID0gMDsKKwlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfSURMRTsKKwlkZXYtPmlhbXRoaWZfdGltZXIgPSAwOworfQorCisvKioKKyAqIGluaXRfaGVjaV9kZXZpY2UgLSBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBoZWNpIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBAcGRldjogVGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyBUaGUgaGVjaV9kZXZpY2VfZGV2aWNlIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqaW5pdF9oZWNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2OworCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBzZXR1cCBvdXIgbGlzdCBhcnJheSAqLworCWRldi0+aW9fbGlzdF9hcnJheVswXSA9ICZkZXYtPnJlYWRfbGlzdDsKKwlkZXYtPmlvX2xpc3RfYXJyYXlbMV0gPSAmZGV2LT53cml0ZV9saXN0OworCWRldi0+aW9fbGlzdF9hcnJheVsyXSA9ICZkZXYtPndyaXRlX3dhaXRpbmdfbGlzdDsKKwlkZXYtPmlvX2xpc3RfYXJyYXlbM10gPSAmZGV2LT5jdHJsX3dyX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzRdID0gJmRldi0+Y3RybF9yZF9saXN0OworCWRldi0+aW9fbGlzdF9hcnJheVs1XSA9ICZkZXYtPnB0aGlfY21kX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzZdID0gJmRldi0+cHRoaV9yZWFkX2NvbXBsZXRlX2xpc3Q7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZmlsZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT53ZF9maWxlX2V4dC5saW5rKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LmxpbmspOworCXNwaW5fbG9ja19pbml0KCZkZXYtPmRldmljZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfcmVjdmRfbXNnKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfc3RvcF93ZCk7CisJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9JTklUSUFMSVpJTkc7CisJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0lETEU7CisKKwkvKiBpbml0IHdvcmsgZm9yIHNjaGVkdWxlIHdvcmsgKi8KKwlJTklUX1dPUksoJmRldi0+d29yaywgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IEhFQ0lfSU9fTElTVFNfTlVNQkVSOyBpKyspCisJCWhlY2lfaW5pdGlhbGl6ZV9saXN0KGRldi0+aW9fbGlzdF9hcnJheVtpXSwgZGV2KTsKKwlkZXYtPnBkZXYgPSBwZGV2OworCXJldHVybiBkZXY7Cit9CisKKworCisKK3N0YXRpYyBpbnQgaGVjaV93YWl0X2V2ZW50X2ludF90aW1lb3V0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCWxvbmcgdGltZW91dCkKK3sKKwlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53YWl0X3JlY3ZkX21zZywKKwkJCShkZXYtPnJlY3ZkX21zZyksIHRpbWVvdXQpOworfQorCisvKioKKyAqIGhlY2lfaHdfaW5pdCAgLSBpbml0IGhvc3QgYW5kIGZ3IHRvIHN0YXJ0IHdvcmsuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgaGVjaV9od19pbml0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJaW50IGVyciA9IDA7CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisJZGV2LT5tZV9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIE1FX0NTUl9IQSk7CisJREJHKCJob3N0X2h3X3N0YXRlID0gMHglMDh4LCBtZXN0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlLCBkZXYtPm1lX2h3X3N0YXRlKTsKKworCWlmICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9JUykgPT0gSF9JUykgeworCQkvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgYW5kIHN0b3AgaW50ZXJ1cHRzICovCisJCWhlY2lfc2V0X2Nzcl9yZWdpc3RlcihkZXYpOworCX0KKwlkZXYtPnJlY3ZkX21zZyA9IDA7CisJREJHKCJyZXNldCBpbiBzdGFydCB0aGUgaGVjaSBkZXZpY2UuXG4iKTsKKworCWhlY2lfcmVzZXQoZGV2LCAxKTsKKworCURCRygiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUsIGRldi0+bWVfaHdfc3RhdGUpOworCisJLyogd2FpdCBmb3IgTUUgdG8gdHVybiBvbiBNRV9SRFkgKi8KKwlpZiAoIWRldi0+cmVjdmRfbXNnKQorCQllcnIgPSBoZWNpX3dhaXRfZXZlbnRfaW50X3RpbWVvdXQoZGV2LCBIRUNJX0lOVEVST1BfVElNRU9VVCk7CisKKwlpZiAoIWVyciAmJiAhZGV2LT5yZWN2ZF9tc2cpIHsKKwkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9ESVNBQkxFRDsKKwkJREJHKCJ3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCBmYWlsZWQiCisJCSAgICAib24gd2FpdCBmb3IgTUUgdG8gdHVybiBvbiBNRV9SRFkuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJaWYgKCEoKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkgPT0gSF9SRFkpCisJCSAgICAgICYmICgoZGV2LT5tZV9od19zdGF0ZSAmIE1FX1JEWV9IUkEpID09IE1FX1JEWV9IUkEpKSkgeworCQkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9ESVNBQkxFRDsKKwkJCURCRygiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCQkJICAgIGRldi0+aG9zdF9od19zdGF0ZSwKKwkJCSAgICBkZXYtPm1lX2h3X3N0YXRlKTsKKworCQkJaWYgKCEoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SRFkpICE9IEhfUkRZKQorCQkJCURCRygiaG9zdCB0dXJuIG9mZiBIX1JEWS5cbiIpOworCisJCQlpZiAoIShkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgIT0gTUVfUkRZX0hSQSkKKwkJCQlEQkcoIk1FIHR1cm4gb2ZmIE1FX1JEWS5cbiIpOworCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiaGVjaTogbGluayBsYXllciBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCWRldi0+cmVjdmRfbXNnID0gMDsKKwlEQkcoImhvc3RfaHdfc3RhdGUgPSAweCUwOHgsIG1lX2h3X3N0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlLCBkZXYtPm1lX2h3X3N0YXRlKTsKKwlEQkcoIk1FIHR1cm4gb24gTUVfUkRZIGFuZCBob3N0IHR1cm4gb24gSF9SRFkuXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJoZWNpOiBsaW5rIGxheWVyIGhhcyBiZWVuIGVzdGFibGlzaGVkLlxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaGVjaV9od19yZXNldCAtIHJlc2V0IGZ3IHZpYSBoZWNpIGNzciByZWdpc3Rlci4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaW50ZXJydXB0czogaWYgaW50ZXJydXB0IHNob3VsZCBiZSBlbmFibGUgYWZ0ZXIgcmVzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfaHdfcmVzZXQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGludGVycnVwdHMpCit7CisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IChIX1JTVCB8IEhfSUcpOworCisJaWYgKGludGVycnVwdHMpCisJCWhlY2lfY3NyX2VuYWJsZV9pbnRlcnJ1cHRzKGRldik7CisJZWxzZQorCQloZWNpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMoZGV2KTsKKworCUJVR19PTigoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SU1QpICE9IEhfUlNUKTsKKwlCVUdfT04oKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfUkRZKSAhPSAwKTsKK30KKworLyoqCisgKiBoZWNpX3Jlc2V0IC0gcmVzZXQgaG9zdCBhbmQgZncuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGludGVycnVwdHM6IGlmIGludGVycnVwdCBzaG91bGQgYmUgZW5hYmxlIGFmdGVyIHJlc2V0LgorICovCit2b2lkIGhlY2lfcmVzZXQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGludGVycnVwdHMpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX25leHQgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX25leHQgPSBOVUxMOworCWludCB1bmV4cGVjdGVkID0gMDsKKworCWlmIChkZXYtPmhlY2lfc3RhdGUgPT0gSEVDSV9SRUNPVkVSSU5HX0ZST01fUkVTRVQpIHsKKwkJZGV2LT5uZWVkX3Jlc2V0ID0gMTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9JTklUSUFMSVpJTkcgJiYKKwkgICAgZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRElTQUJMRUQgJiYKKwkgICAgZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfUE9XRVJfRE9XTiAmJgorCSAgICBkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9QT1dFUl9VUCkKKwkJdW5leHBlY3RlZCA9IDE7CisKKwlpZiAoZGV2LT5yZWluaXRfdHNrICE9IE5VTEwpIHsKKwkJa3RocmVhZF9zdG9wKGRldi0+cmVpbml0X3Rzayk7CisJCWRldi0+cmVpbml0X3RzayA9IE5VTEw7CisJfQorCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCisJREJHKCJiZWZvcmUgcmVzZXQgaG9zdF9od19zdGF0ZSA9IDB4JTA4eC5cbiIsCisJICAgIGRldi0+aG9zdF9od19zdGF0ZSk7CisKKwloZWNpX2h3X3Jlc2V0KGRldiwgaW50ZXJydXB0cyk7CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgJj0gfkhfUlNUOworCWRldi0+aG9zdF9od19zdGF0ZSB8PSBIX0lHOworCisJd3JpdGVfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSLCBkZXYtPmhvc3RfaHdfc3RhdGUpOworCisJREJHKCJjdXJyZW50bHkgc2F2ZWQgaG9zdF9od19zdGF0ZSA9IDB4JTA4eC5cbiIsCisJICAgIGRldi0+aG9zdF9od19zdGF0ZSk7CisKKwlkZXYtPm5lZWRfcmVzZXQgPSAwOworCisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0lOSVRJQUxJWklORykgeworCQlpZiAoKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0RJU0FCTEVEKSAmJgorCQkgICAgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX1BPV0VSX0RPV04pKQorCQkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9SRVNFVElORzsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlsZV9wb3MsCisJCQkJZmlsZV9uZXh0LCAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJCWZpbGVfcG9zLT5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNURUQ7CisJCQlmaWxlX3Bvcy0+Zmxvd19jdHJsX2NyZWRzID0gMDsKKwkJCWZpbGVfcG9zLT5yZWFkX2NiID0gTlVMTDsKKwkJCWZpbGVfcG9zLT50aW1lcl9jb3VudCA9IDA7CisJCX0KKwkJLyogcmVtb3ZlIGVudHJ5IGlmIGFscmVhZHkgaW4gbGlzdCAqLworCQlEQkcoImxpc3QgZGVsIGlhbXRoaWYgYW5kIHdkIGZpbGUgbGlzdC5cbiIpOworCQloZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QoZGV2LAorCQkJCWRldi0+d2RfZmlsZV9leHQuaG9zdF9jbGllbnRfaWQpOworCisJCWhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsCisJCQkJZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lmhvc3RfY2xpZW50X2lkKTsKKworCQloZWNpX3Jlc2V0X2lhbXRoaWZfcGFyYW1zKGRldik7CisJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAwOworCQlkZXYtPmV4dHJhX3dyaXRlX2luZGV4ID0gMDsKKwl9CisKKwlkZXYtPm51bV9oZWNpX21lX2NsaWVudHMgPSAwOworCWRldi0+cmRfbXNnX2hkciA9IDA7CisJZGV2LT5zdG9wID0gMDsKKwlkZXYtPndkX3BlbmRpbmcgPSAwOworCisJLyogdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgcmVnaXN0ZXJzIGFmdGVyIHJlc2V0ICovCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gIHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKwlkZXYtPm1lX2h3X3N0YXRlID0gIHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIE1FX0NTUl9IQSk7CisKKwlEQkcoImFmdGVyIHJlc2V0IGhvc3RfaHdfc3RhdGUgPSAweCUwOHgsIG1lX2h3X3N0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlLCBkZXYtPm1lX2h3X3N0YXRlKTsKKworCWlmICh1bmV4cGVjdGVkKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZWNpOiB1bmV4cGVjdGVkIHJlc2V0LlxuIik7CisKKwkvKiBXYWtlIHVwIGFsbCByZWFkaW5ncyBzbyB0aGV5IGNhbiBiZSBpbnRlcnJ1cHRlZCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWxlX3BvcywgZmlsZV9uZXh0LCAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJaWYgKCZmaWxlX3Bvcy0+cnhfd2FpdCAmJgorCQkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmZmlsZV9wb3MtPnJ4X3dhaXQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJoZWNpOiBXYWtpbmcgdXAgY2xpZW50IVxuIik7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZpbGVfcG9zLT5yeF93YWl0KTsKKwkJfQorCX0KKwkvKiByZW1vdmUgYWxsIHdhaXRpbmcgcmVxdWVzdHMgKi8KKwlpZiAoZGV2LT53cml0ZV9saXN0LnN0YXR1cyA9PSAwICYmCisJCSFsaXN0X2VtcHR5KCZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCQkmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJaWYgKHByaXZfY2JfcG9zKSB7CisJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X2NiX3Bvcyk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogaGVjaV9pbml0aWFsaXplX2NsaWVudHMgLSBoZWNpIGNvbW11bmljYXRpb24gaW5pdGlhbGl6YXRpb24uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICovCitpbnQgaGVjaV9pbml0aWFsaXplX2NsaWVudHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlpbnQgc3RhdHVzOworCisJbXNsZWVwKDEwMCk7IC8qIEZXIG5lZWRzIHRpbWUgdG8gYmUgcmVhZHkgdG8gdGFsayB3aXRoIHVzICovCisJREJHKCJsaW5rIGlzIGVzdGFibGlzaGVkIHN0YXJ0IHNlbmRpbmcgbWVzc2FnZXMuXG4iKTsKKwkvKiBsaW5rIGlzIGVzdGFibGlzaGVkIHN0YXJ0IHNlbmRpbmcgbWVzc2FnZXMuICovCisJc3RhdHVzID0gaG9zdF9zdGFydF9tZXNzYWdlKGRldik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfRElTQUJMRUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJREJHKCJzdGFydCBzZW5kaW5nIG1lc3NhZ2VzIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIGVudW1lcmF0ZSBjbGllbnRzICovCisJc3RhdHVzID0gaG9zdF9lbnVtX2NsaWVudHNfbWVzc2FnZShkZXYpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0RJU0FCTEVEOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCURCRygiZW51bSBjbGllbnRzIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwkvKiBhbGxvY2F0ZSBzdG9yYWdlIGZvciBNRSBjbGllbnRzIHJlcHJlc2VudGF0aW9uICovCisJc3RhdHVzID0gYWxsb2NhdGVfbWVfY2xpZW50c19zdG9yYWdlKGRldik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWRldi0+bnVtX2hlY2lfbWVfY2xpZW50cyA9IDA7CisJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfRElTQUJMRUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJREJHKCJhbGxvY2F0ZSBjbGllbnRzIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWhlY2lfY2hlY2tfYXNmX21vZGUoZGV2KTsKKwkvKmhlY2kgaW5pdGlhbGl6YXRpb24gd2QgKi8KKwlob3N0X2luaXRfd2QoZGV2KTsKKwkvKmhlY2kgaW5pdGlhbGl6YXRpb24gaWFtdGhpZiBjbGllbnQgKi8KKwlob3N0X2luaXRfaWFtdGhpZihkZXYpOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5uZWVkX3Jlc2V0KSB7CisJCWRldi0+bmVlZF9yZXNldCA9IDA7CisJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfRElTQUJMRUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWVtc2V0KGRldi0+aGVjaV9ob3N0X2NsaWVudHMsIDAsIHNpemVvZihkZXYtPmhlY2lfaG9zdF9jbGllbnRzKSk7CisJZGV2LT5vcGVuX2hhbmRsZV9jb3VudCA9IDA7CisJZGV2LT5oZWNpX2hvc3RfY2xpZW50c1swXSB8PSA3OworCWRldi0+Y3VycmVudF9ob3N0X2NsaWVudF9pZCA9IDM7CisJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9FTkFCTEVEOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlEQkcoImluaXRpYWxpemF0aW9uIGhlY2kgY2xpZW50cyBzdWNjZXNzZnVsLlxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaGVjaV90YXNrX2luaXRpYWxpemVfY2xpZW50cyAtIGhlY2kgcmVpbml0aWFsaXphdGlvbiB0YXNrCisgKgorICogQGRhdGE6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqLworaW50IGhlY2lfdGFza19pbml0aWFsaXplX2NsaWVudHModm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYgPSAoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKikgZGF0YTsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+cmVpbml0X3RzayAhPSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJREJHKCJyZWluaXQgdGFzayBhbHJlYWR5IHN0YXJ0ZWQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWRldi0+cmVpbml0X3RzayA9IGN1cnJlbnQ7CisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJcmV0ID0gaGVjaV9pbml0aWFsaXplX2NsaWVudHMoZGV2KTsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZGV2LT5yZWluaXRfdHNrID0gTlVMTDsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGhvc3Rfc3RhcnRfbWVzc2FnZSAtIGhlY2kgaG9zdCBzZW5kIHN0YXJ0IG1lc3NhZ2UuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhvc3Rfc3RhcnRfbWVzc2FnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCWxvbmcgdGltZW91dCA9IDYwOwkvKiA2MCBzZWNvbmQgKi8KKworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCXN0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3JlcXVlc3QgKmhvc3Rfc3RhcnRfcmVxOworCXN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QgKmhvc3Rfc3RvcF9yZXE7CisJaW50IGVyciA9IDA7CisKKwkvKiBob3N0IHN0YXJ0IG1lc3NhZ2UgKi8KKwloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCWhlY2lfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVxdWVzdCk7CisJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCWhvc3Rfc3RhcnRfcmVxID0KKwkgICAgKHN0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3JlcXVlc3QgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKwltZW1zZXQoaG9zdF9zdGFydF9yZXEsIDAsIHNpemVvZihzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXF1ZXN0KSk7CisJaG9zdF9zdGFydF9yZXEtPmNtZC5jbWQgPSBIT1NUX1NUQVJUX1JFUV9DTUQ7CisJaG9zdF9zdGFydF9yZXEtPmhvc3RfdmVyc2lvbi5tYWpvcl92ZXJzaW9uID0gSEJNX01BSk9SX1ZFUlNJT047CisJaG9zdF9zdGFydF9yZXEtPmhvc3RfdmVyc2lvbi5taW5vcl92ZXJzaW9uID0gSEJNX01JTk9SX1ZFUlNJT047CisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopIChob3N0X3N0YXJ0X3JlcSksCisJCQkJICAgICAgIGhlY2lfaGRyLT5sZW5ndGgpKSB7CisJCURCRygic2VuZCB2ZXJzaW9uIHRvIGZ3IGZhaWwuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCURCRygiY2FsbCB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCBmb3IgcmVzcG9uc2UgbWVzc2FnZS5cbiIpOworCS8qIHdhaXQgZm9yIHJlc3BvbnNlICovCisJZXJyID0gaGVjaV93YWl0X2V2ZW50X2ludF90aW1lb3V0KGRldiwgdGltZW91dCAqIEhaKTsKKwlpZiAoIWVyciAmJiAhZGV2LT5yZWN2ZF9tc2cpIHsKKwkJREJHKCJ3YWl0X3RpbWVvdXQgZmFpbGVkIG9uIGhvc3Qgc3RhcnQgcmVzcG9uc2UgbWVzc2FnZS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCURCRygid2FpdF90aW1lb3V0IHN1Y2Nlc3NmdWwgb24gaG9zdCBzdGFydCByZXNwb25zZSBtZXNzYWdlLlxuIik7CisJaWYgKChkZXYtPnZlcnNpb24ubWFqb3JfdmVyc2lvbiAhPSBIQk1fTUFKT1JfVkVSU0lPTikgfHwKKwkgICAgKGRldi0+dmVyc2lvbi5taW5vcl92ZXJzaW9uICE9IEhCTV9NSU5PUl9WRVJTSU9OKSkgeworCQkvKiBzZW5kIHN0b3AgbWVzc2FnZSAqLworCQloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwkJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCQloZWNpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QpOworCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwkJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCQlob3N0X3N0b3BfcmVxID0KKwkJICAgIChzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0ICopICZkZXYtPndyX21zZ19idWZbMV07CisKKwkJbWVtc2V0KGhvc3Rfc3RvcF9yZXEsIDAsIHNpemVvZihzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0KSk7CisJCWhvc3Rfc3RvcF9yZXEtPmNtZC5jbWQgPSBIT1NUX1NUT1BfUkVRX0NNRDsKKwkJaG9zdF9zdG9wX3JlcS0+cmVhc29uID0gRFJJVkVSX1NUT1BfUkVRVUVTVDsKKwkJaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJICAgKHVuc2lnbmVkIGNoYXIgKikgKGhvc3Rfc3RvcF9yZXEpLAorCQkJCSAgIGhlY2lfaGRyLT5sZW5ndGgpOworCQlEQkcoInZlcnNpb24gbWlzbWF0Y2guXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaG9zdF9lbnVtX2NsaWVudHNfbWVzc2FnZSAtIGhvc3Qgc2VuZCBlbnVtZXJhdGlvbiBjbGllbnQgcmVxdWVzdCBtZXNzYWdlLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBob3N0X2VudW1fY2xpZW50c19tZXNzYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJbG9uZyB0aW1lb3V0ID0gNTsJLyo1IHNlY29uZCAqLworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCXN0cnVjdCBoYm1faG9zdF9lbnVtX3JlcXVlc3QgKmhvc3RfZW51bV9yZXE7CisJaW50IGVyciA9IDA7CisJaW50IGksIGo7CisKKwloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJLyogZW51bWVyYXRlIGNsaWVudHMgKi8KKwloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJaGVjaV9oZHItPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXF1ZXN0KTsKKwloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJaG9zdF9lbnVtX3JlcSA9IChzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXF1ZXN0ICopICZkZXYtPndyX21zZ19idWZbMV07CisJbWVtc2V0KGhvc3RfZW51bV9yZXEsIDAsIHNpemVvZihzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXF1ZXN0KSk7CisJaG9zdF9lbnVtX3JlcS0+Y21kLmNtZCA9IEhPU1RfRU5VTV9SRVFfQ01EOworCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgKGhvc3RfZW51bV9yZXEpLAorCQkJICAgICAgIGhlY2lfaGRyLT5sZW5ndGgpKSB7CisJCURCRygic2VuZCBlbnVtZXJhdGlvbiByZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogd2FpdCBmb3IgcmVzcG9uc2UgKi8KKwlkZXYtPnJlY3ZkX21zZyA9IDA7CisJZXJyID0gaGVjaV93YWl0X2V2ZW50X2ludF90aW1lb3V0KGRldiwgdGltZW91dCAqIEhaKTsKKwlpZiAoIWVyciAmJiAhZGV2LT5yZWN2ZF9tc2cpIHsKKwkJREJHKCJ3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCBmYWlsZWQgIgorCQkJCSJvbiBlbnVtZXJhdGlvbiBjbGllbnRzIHJlc3BvbnNlIG1lc3NhZ2UuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldi0+cmVjdmRfbXNnID0gMDsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJLyogY291bnQgaG93IG1hbnkgTUUgY2xpZW50cyB3ZSBoYXZlICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihkZXYtPmhlY2lfbWVfY2xpZW50cyk7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQlpZiAoKGRldi0+aGVjaV9tZV9jbGllbnRzW2ldICYgKDEgPDwgaikpICE9IDApCisJCQkJZGV2LT5udW1faGVjaV9tZV9jbGllbnRzKys7CisKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBob3N0X2NsaWVudF9wcm9wZXJ0aWVzIC0gcmVhZHMgcHJvcGVydGllcyBmb3IgY2xpZW50CisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGlkeDogY2xpZW50IGluZGV4IGluIG1lIGNsaWVudCBhcnJheQorICogQGNsaWVudF9pZDogaWQgb2YgdGhlIGNsaWVudAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhvc3RfY2xpZW50X3Byb3BlcnRpZXMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBoZWNpX21lX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCXN0cnVjdCBoYm1fcHJvcHNfcmVxdWVzdCAqaG9zdF9jbGlfcmVxOworCWludCBlcnI7CisKKwloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCWhlY2lfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9wcm9wc19yZXF1ZXN0KTsKKwloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJaG9zdF9jbGlfcmVxID0gKHN0cnVjdCBoYm1fcHJvcHNfcmVxdWVzdCAqKSAmZGV2LT53cl9tc2dfYnVmWzFdOworCW1lbXNldChob3N0X2NsaV9yZXEsIDAsIHNpemVvZihzdHJ1Y3QgaGJtX3Byb3BzX3JlcXVlc3QpKTsKKwlob3N0X2NsaV9yZXEtPmNtZC5jbWQgPSBIT1NUX0NMSUVOVF9QUk9QRVJURUlTX1JFUV9DTUQ7CisJaG9zdF9jbGlfcmVxLT5hZGRyZXNzID0gY2xpZW50LT5jbGllbnRfaWQ7CisJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkodW5zaWduZWQgY2hhciAqKSAoaG9zdF9jbGlfcmVxKSwKKwkJCQloZWNpX2hkci0+bGVuZ3RoKSkgeworCQlEQkcoInNlbmQgcHJvcHMgcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIHdhaXQgZm9yIHJlc3BvbnNlICovCisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCWVyciA9IGhlY2lfd2FpdF9ldmVudF9pbnRfdGltZW91dChkZXYsIDEwICogSFopOworCWlmICghZXJyICYmICFkZXYtPnJlY3ZkX21zZykgeworCQlEQkcoIndhaXQgZmFpbGVkIG9uIHByb3BzIHJlc3AgbXNnLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXYtPnJlY3ZkX21zZyA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWxsb2NhdGVfbWVfY2xpZW50c19zdG9yYWdlIC0gYWxsb2NhdGUgc3RvcmFnZSBmb3IgbWUgY2xpZW50cworICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBhbGxvY2F0ZV9tZV9jbGllbnRzX3N0b3JhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaGVjaV9tZV9jbGllbnQgKmNsaWVudHM7CisJc3RydWN0IGhlY2lfbWVfY2xpZW50ICpjbGllbnQ7CisJX191OCBudW0sIGksIGo7CisJaW50IGVycjsKKworCWlmIChkZXYtPm51bV9oZWNpX21lX2NsaWVudHMgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWtmcmVlKGRldi0+bWVfY2xpZW50cyk7CisJZGV2LT5tZV9jbGllbnRzID0gTlVMTDsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkvKiBhbGxvY2F0ZSBzdG9yYWdlIGZvciBNRSBjbGllbnRzIHJlcHJlc2VudGF0aW9uICovCisJY2xpZW50cyA9IGtjYWxsb2MoZGV2LT5udW1faGVjaV9tZV9jbGllbnRzLAorCQkJc2l6ZW9mKHN0cnVjdCBoZWNpX21lX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmICghY2xpZW50cykgeworCQlEQkcoIm1lbW9yeSBhbGxvY2F0aW9uIGZvciBNRSBjbGllbnRzIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWRldi0+bWVfY2xpZW50cyA9IGNsaWVudHM7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJbnVtID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRldi0+aGVjaV9tZV9jbGllbnRzKTsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWlmICgoZGV2LT5oZWNpX21lX2NsaWVudHNbaV0gJiAoMSA8PCBqKSkgIT0gMCkgeworCQkJCWNsaWVudCA9ICZkZXYtPm1lX2NsaWVudHNbbnVtXTsKKwkJCQljbGllbnQtPmNsaWVudF9pZCA9IChpICogOCkgKyBqOworCQkJCWNsaWVudC0+Zmxvd19jdHJsX2NyZWRzID0gMDsKKwkJCQllcnIgPSBob3N0X2NsaWVudF9wcm9wZXJ0aWVzKGRldiwgY2xpZW50KTsKKwkJCQlpZiAoZXJyICE9IDApIHsKKwkJCQkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCQkJa2ZyZWUoZGV2LT5tZV9jbGllbnRzKTsKKwkJCQkJZGV2LT5tZV9jbGllbnRzID0gTlVMTDsKKwkJCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJCQlyZXR1cm4gZXJyOworCQkJCX0KKwkJCQludW0rKzsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhlY2lfaW5pdF9maWxlX3ByaXZhdGUgLSBpbml0aWFsaXplcyBwcml2YXRlIGZpbGUgc3RydWN0dXJlLgorICoKKyAqIEBwcml2OiBwcml2YXRlIGZpbGUgc3RydWN0dXJlIHRvIGJlIGluaXRpYWxpemVkCisgKiBAZmlsZTogdGhlIGZpbGUgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfaW5pdF9maWxlX3ByaXZhdGUoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlKQoreworCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlKSk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmZpbGVfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJlYWRfaW9fbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPndyaXRlX2lvX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPnJ4X3dhaXQpOworCURCRygicHJpdi0+cnhfd2FpdCA9JXBcbiIsICZwcml2LT5yeF93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT50eF93YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+bGluayk7CisJcHJpdi0+cmVhZGluZ19zdGF0ZSA9IEhFQ0lfSURMRTsKKwlwcml2LT53cml0aW5nX3N0YXRlID0gSEVDSV9JRExFOworfQorCisvKioKKyAqIGhlY2lfZmluZF9tZV9jbGllbnQgLSBzZWFyY2ggZm9yIE1FIGNsaWVudCBndWlkCisgKiAgICAgICAgICAgICAgICAgICAgICAgc2V0cyBjbGllbnRfaWQgaW4gaGVjaV9maWxlX3ByaXZhdGUgaWYgZm91bmQKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBwcml2OiBwcml2YXRlIGZpbGUgc3RydWN0dXJlIHRvIHNldCBjbGllbnRfaWQgaW4KKyAqIEBjZ3VpZDogc2VhcmNoZWQgZ3VpZCBvZiBNRSBjbGllbnQKKyAqIEBjbGllbnRfaWQ6IGlkIG9mIGhvc3QgY2xpZW50IHRvIGJlIHNldCBpbiBmaWxlIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogcmV0dXJucyBNRSBjbGllbnQgaW5kZXgKKyAqLworc3RhdGljIF9fdTggaGVjaV9maW5kX21lX2NsaWVudChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqcHJpdiwKKwkJCQljb25zdCBzdHJ1Y3QgZ3VpZCAqY2d1aWQsIF9fdTggY2xpZW50X2lkKQoreworCV9fdTggaTsKKworCWlmICgoZGV2ID09IE5VTEwpIHx8IChwcml2ID09IE5VTEwpIHx8IChjZ3VpZCA9PSBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKG1lbWNtcChjZ3VpZCwKKwkJCSAgICZkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMucHJvdG9jb2xfbmFtZSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgZ3VpZCkpID09IDApIHsKKwkJCXByaXYtPm1lX2NsaWVudF9pZCA9IGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQ7CisJCQlwcml2LT5zdGF0ZSA9IEhFQ0lfRklMRV9DT05ORUNUSU5HOworCQkJcHJpdi0+aG9zdF9jbGllbnRfaWQgPSBjbGllbnRfaWQ7CisKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXYtPmxpbmssICZkZXYtPmZpbGVfbGlzdCk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoZWNpX2NoZWNrX2FzZl9tb2RlIC0gY2hlY2sgZm9yIEFTRiBjbGllbnQKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfY2hlY2tfYXNmX21vZGUoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlfX3U4IGk7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWRldi0+YXNmX21vZGUgPSAwOworCS8qIGZpbmQgTUUgQVNGIGNsaWVudCAtIG90aGVyd2lzZSBhc3N1bWUgQU1UIG1vZGUgKi8KKwlEQkcoImZpbmQgTUUgQVNGIGNsaWVudCAtIG90aGVyd2lzZSBhc3N1bWUgQU1UIG1vZGUuXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKG1lbWNtcCgmaGVjaV9hc2ZfZ3VpZCwKKwkJCQkmZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnByb3RvY29sX25hbWUsCisJCQkJc2l6ZW9mKHN0cnVjdCBndWlkKSkgPT0gMCkgeworCQkJZGV2LT5hc2ZfbW9kZSA9IDE7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlEQkcoImZvdW5kIE1FIEFTRiBjbGllbnQuXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJREJHKCJhc3N1bWUgQU1UIG1vZGUuXG4iKTsKK30KKworLyoqCisgKiBoZWNpX2Nvbm5lY3RfbWVfY2xpZW50IC0gY29ubmVjdCBNRSBjbGllbnQKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBwcml2OiBwcml2YXRlIGZpbGUgc3RydWN0dXJlCisgKiBAdGltZW91dDogY29ubmVjdCB0aW1lb3V0IGluIHNlY29uZHMKKyAqCisgKiByZXR1cm5zIDEgLSBpZiBjb25uZWN0ZWQsIDAgLSBpZiBub3QKKyAqLworc3RhdGljIF9fdTggaGVjaV9jb25uZWN0X21lX2NsaWVudChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICBsb25nIHRpbWVvdXQpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGRldiA9PSBOVUxMKSB8fCAocHJpdiA9PSBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWhlY2lfY29ubmVjdChkZXYsIHByaXYpKSB7CisJCURCRygiZmFpbGVkIHRvIGNhbGwgaGVjaV9jb25uZWN0IGZvciBjbGllbnRfaWQ9JWQuXG4iLAorCQkgICAgcHJpdi0+aG9zdF9jbGllbnRfaWQpOworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQloZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QoZGV2LCBwcml2LT5ob3N0X2NsaWVudF9pZCk7CisJCXByaXYtPnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwllcnIgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3JlY3ZkX21zZywKKwkgICAgKEhFQ0lfRklMRV9DT05ORUNURUQgPT0gcHJpdi0+c3RhdGUgfHwKKwkgICAgIEhFQ0lfRklMRV9ESVNDT05ORUNURUQgPT0gcHJpdi0+c3RhdGUpLAorCSAgICB0aW1lb3V0ICogSFopOworCWlmIChIRUNJX0ZJTEVfQ09OTkVDVEVEICE9IHByaXYtPnN0YXRlKSB7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsIHByaXYtPmhvc3RfY2xpZW50X2lkKTsKKwkJREJHKCJmYWlsZWQgdG8gY29ubmVjdCBjbGllbnRfaWQ9JWQgc3RhdGU9JWQuXG4iLAorCQkgICAgcHJpdi0+aG9zdF9jbGllbnRfaWQsIHByaXYtPnN0YXRlKTsKKwkJaWYgKGVycikKKwkJCURCRygiZmFpbGVkIGNvbm5lY3QgZXJyPSUwOHhcbiIsIGVycik7CisJCXByaXYtPnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisJREJHKCJzdWNjZXNzZnVsbHkgY29ubmVjdGVkIGNsaWVudF9pZD0lZC5cbiIsCisJICAgIHByaXYtPmhvc3RfY2xpZW50X2lkKTsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBob3N0X2luaXRfd2QgLSBoZWNpIGluaXRpYWxpemF0aW9uIHdkLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqLworc3RhdGljIHZvaWQgaG9zdF9pbml0X3dkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWhlY2lfaW5pdF9maWxlX3ByaXZhdGUoJmRldi0+d2RfZmlsZV9leHQsIE5VTEwpOworCisJLyogbG9vayBmb3IgV0QgY2xpZW50IGFuZCBjb25uZWN0IHRvIGl0ICovCisJZGV2LT53ZF9maWxlX2V4dC5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNURUQ7CisJZGV2LT53ZF90aW1lb3V0ID0gMDsKKworCWlmIChkZXYtPmFzZl9tb2RlKSB7CisJCW1lbWNweShkZXYtPndkX2RhdGEsIGhlY2lfc3RvcF93ZF9wYXJhbXMsIEhFQ0lfV0RfUEFSQU1TX1NJWkUpOworCX0gZWxzZSB7CisJCS8qIEFNVCBtb2RlICovCisJCWRldi0+d2RfdGltZW91dCA9IEFNVF9XRF9WQUxVRTsKKwkJREJHKCJkZXYtPndkX3RpbWVvdXQ9JWQuXG4iLCBkZXYtPndkX3RpbWVvdXQpOworCQltZW1jcHkoZGV2LT53ZF9kYXRhLCBoZWNpX3N0YXJ0X3dkX3BhcmFtcywgSEVDSV9XRF9QQVJBTVNfU0laRSk7CisJCW1lbWNweShkZXYtPndkX2RhdGEgKyBIRUNJX1dEX1BBUkFNU19TSVpFLAorCQkgICAgICAgJmRldi0+d2RfdGltZW91dCwgc2l6ZW9mKF9fdTE2KSk7CisJfQorCisJLyogZmluZCBNRSBXRCBjbGllbnQgKi8KKwloZWNpX2ZpbmRfbWVfY2xpZW50KGRldiwgJmRldi0+d2RfZmlsZV9leHQsCisJCQkgICAgJmhlY2lfd2RfZ3VpZCwgSEVDSV9XRF9IT1NUX0NMSUVOVF9JRCk7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJREJHKCJjaGVjayB3ZF9maWxlX2V4dFxuIik7CisJaWYgKEhFQ0lfRklMRV9DT05ORUNUSU5HID09IGRldi0+d2RfZmlsZV9leHQuc3RhdGUpIHsKKwkJaWYgKGhlY2lfY29ubmVjdF9tZV9jbGllbnQoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCwgMTUpID09IDEpIHsKKwkJCURCRygiZGV2LT53ZF90aW1lb3V0PSVkLlxuIiwgZGV2LT53ZF90aW1lb3V0KTsKKwkJCWlmIChkZXYtPndkX3RpbWVvdXQgIT0gMCkKKwkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMTsKKwkJCWVsc2UKKwkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKwkJCURCRygic3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byBXRCBjbGllbnQuXG4iKTsKKwkJfQorCX0gZWxzZQorCQlEQkcoImZhaWxlZCB0byBmaW5kIFdEIGNsaWVudC5cbiIpOworCisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWRldi0+d2RfdGltZXIuZnVuY3Rpb24gPSAmaGVjaV93ZF90aW1lcjsKKwlkZXYtPndkX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKK30KKworCisvKioKKyAqIGhvc3RfaW5pdF9pYW10aGlmIC0gaGVjaSBpbml0aWFsaXphdGlvbiBpYW10aGlmIGNsaWVudC4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICovCitzdGF0aWMgdm9pZCBob3N0X2luaXRfaWFtdGhpZihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCV9fdTggaTsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwloZWNpX2luaXRfZmlsZV9wcml2YXRlKCZkZXYtPmlhbXRoaWZfZmlsZV9leHQsIE5VTEwpOworCWRldi0+aWFtdGhpZl9maWxlX2V4dC5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNURUQ7CisKKwkvKiBmaW5kIE1FIFBUSEkgY2xpZW50ICovCisJaSA9IGhlY2lfZmluZF9tZV9jbGllbnQoZGV2LCAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LAorCQkJICAgICZoZWNpX3B0aGlfZ3VpZCwgSEVDSV9JQU1USElGX0hPU1RfQ0xJRU5UX0lEKTsKKwlpZiAoZGV2LT5pYW10aGlmX2ZpbGVfZXh0LnN0YXRlICE9IEhFQ0lfRklMRV9DT05ORUNUSU5HKSB7CisJCURCRygiZmFpbGVkIHRvIGZpbmQgaWFtdGhpZiBjbGllbnQuXG4iKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aCAhPSBJQU1USElGX01UVSk7CisKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGhlY2lfY29ubmVjdF9tZV9jbGllbnQoZGV2LCAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LCAxNSkgPT0gMSkgeworCQlEQkcoImNvbm5lY3RlZCB0byBpYW10aGlmIGNsaWVudC5cbiIpOworCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfSURMRTsKKwl9Cit9CisKKy8qKgorICogaGVjaV9hbGxvY19maWxlX3ByaXZhdGUgLSBhbGxvY2F0ZXMgYSBwcml2YXRlIGZpbGUgc3RydWN0dXJlIGFuZCBzZXQgaXQgdXAuCisgKiBAZmlsZTogdGhlIGZpbGUgc3RydWN0dXJlCisgKgorICogcmV0dXJucyAgVGhlIGFsbG9jYXRlZCBmaWxlIG9yIE5VTEwgb24gZmFpbHVyZQorICovCitzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmhlY2lfYWxsb2NfZmlsZV9wcml2YXRlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiBOVUxMOworCisJaGVjaV9pbml0X2ZpbGVfcHJpdmF0ZShwcml2LCBmaWxlKTsKKworCXJldHVybiBwcml2OworfQorCisKKworLyoqCisgKiBoZWNpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQgLSBzZW5kIGRpc2Nvbm5lY3QgbWVzc2FnZSAgdG8gZncgZnJvbSBob3N0IGNsaWVudC4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IGhlY2lfZGlzY29ubmVjdF9ob3N0X2NsaWVudChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCWludCByZXRzLCBlcnI7CisJbG9uZyB0aW1lb3V0ID0gMTU7CS8qIDE1IHNlY29uZHMgKi8KKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiOworCisJaWYgKCghZGV2KSB8fCAoIWZpbGVfZXh0KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZmlsZV9leHQtPnN0YXRlICE9IEhFQ0lfRklMRV9ESVNDT05ORUNUSU5HKQorCQlyZXR1cm4gMDsKKworCXByaXZfY2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2X2NiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2X2NiLT5jYl9saXN0KTsKKwlwcml2X2NiLT5maWxlX3ByaXZhdGUgPSBmaWxlX2V4dDsKKwlwcml2X2NiLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPSBIRUNJX0NMT1NFOworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkpIHsKKwkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCWlmIChoZWNpX2Rpc2Nvbm5lY3QoZGV2LCBmaWxlX2V4dCkpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkJJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCURCRygiZmFpbGVkIHRvIGNhbGwgaGVjaV9kaXNjb25uZWN0LlxuIik7CisJCQlnb3RvIGZyZWU7CisJCX0KKwl9IGVsc2UgeworCQlEQkcoImFkZCBkaXNjb25uZWN0IGNiIHRvIGNvbnRyb2wgd3JpdGUgbGlzdFxuIik7CisJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkJJmRldi0+Y3RybF93cl9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWVyciA9IHdhaXRfZXZlbnRfdGltZW91dChkZXYtPndhaXRfcmVjdmRfbXNnLAorCQkgKEhFQ0lfRklMRV9ESVNDT05ORUNURUQgPT0gZmlsZV9leHQtPnN0YXRlKSwKKwkJIHRpbWVvdXQgKiBIWik7CisJaWYgKEhFQ0lfRklMRV9ESVNDT05ORUNURUQgPT0gZmlsZV9leHQtPnN0YXRlKSB7CisJCXJldHMgPSAwOworCQlEQkcoInN1Y2Nlc3NmdWxseSBkaXNjb25uZWN0ZWQgZnJvbSBmdyBjbGllbnQuXG4iKTsKKwl9IGVsc2UgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJaWYgKEhFQ0lfRklMRV9ESVNDT05ORUNURUQgIT0gZmlsZV9leHQtPnN0YXRlKQorCQkJREJHKCJ3cm9uZyBzdGF0dXMgY2xpZW50IGRpc2Nvbm5lY3QuXG4iKTsKKworCQlpZiAoZXJyKQorCQkJREJHKCJ3YWl0IGZhaWxlZCBkaXNjb25uZWN0IGVycj0lMDh4XG4iLCBlcnIpOworCisJCURCRygiZmFpbGVkIHRvIGRpc2Nvbm5lY3QgZnJvbSBmdyBjbGllbnQuXG4iKTsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWhlY2lfZmx1c2hfbGlzdCgmZGV2LT5jdHJsX3JkX2xpc3QsIGZpbGVfZXh0KTsKKwloZWNpX2ZsdXNoX2xpc3QoJmRldi0+Y3RybF93cl9saXN0LCBmaWxlX2V4dCk7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworZnJlZToKKwloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X2NiKTsKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBoZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QgLQorICoJcmVtb3ZlIGZpbGUgcHJpdmF0ZSBkYXRhIGZyb20gZGV2aWNlIGZpbGUgbGlzdAorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBob3N0X2NsaWVudF9pZDogaG9zdCBjbGllbnQgaWQgdG8gYmUgcmVtb3ZlZAorICovCit2b2lkIGhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBfX3U4IGhvc3RfY2xpZW50X2lkKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9uZXh0ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlsZV9wb3MsIGZpbGVfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCWlmIChob3N0X2NsaWVudF9pZCA9PSBmaWxlX3Bvcy0+aG9zdF9jbGllbnRfaWQpIHsKKwkJCURCRygicmVtb3ZlIGhvc3QgY2xpZW50ID0gJWQsIE1FIGNsaWVudCA9ICVkXG4iLAorCQkJCQlmaWxlX3Bvcy0+aG9zdF9jbGllbnRfaWQsCisJCQkJCWZpbGVfcG9zLT5tZV9jbGllbnRfaWQpOworCQkJbGlzdF9kZWxfaW5pdCgmZmlsZV9wb3MtPmxpbmspOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY1MWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbnRlcmZhY2UuYwpAQCAtMCwwICsxLDQ4NSBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworCisjaW5jbHVkZSAiaGVjaS5oIgorI2luY2x1ZGUgImhlY2lfaW50ZXJmYWNlLmgiCisKKworLyoqCisgKiBoZWNpX3NldF9jc3JfcmVnaXN0ZXIgLSB3cml0ZSBIX0NTUiByZWdpc3RlciB0byB0aGUgaGVjaSBkZXZpY2UKKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKi8KK3ZvaWQgaGVjaV9zZXRfY3NyX3JlZ2lzdGVyKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJd3JpdGVfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSLCBkZXYtPmhvc3RfaHdfc3RhdGUpOworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKK30KKworLyoqCisgKiBoZWNpX2Nzcl9lbmFibGVfaW50ZXJydXB0cyAtIGVuYWJsZSBoZWNpIGRldmljZSBpbnRlcnJ1cHRzCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICovCit2b2lkIGhlY2lfY3NyX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IEhfSUU7CisJaGVjaV9zZXRfY3NyX3JlZ2lzdGVyKGRldik7Cit9CisKKy8qKgorICogaGVjaV9jc3JfZGlzYWJsZV9pbnRlcnJ1cHRzIC0gZGlzYWJsZSBoZWNpIGRldmljZSBpbnRlcnJ1cHRzCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICovCit2b2lkIGhlY2lfY3NyX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCWRldi0+aG9zdF9od19zdGF0ZSAmPSB+SF9JRTsKKwloZWNpX3NldF9jc3JfcmVnaXN0ZXIoZGV2KTsKK30KKworCisvKioKKyAqIF9ob3N0X2dldF9maWxsZWRfc2xvdHMgLSBnZXQgbnVtYmVyIG9mIGRldmljZSBmaWxsZWQgYnVmZmVyIHNsb3RzCisgKgorICogQGRldmljZTogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIG51bWVyIG9mIGZpbGxlZCBzbG90cworICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBfaG9zdF9nZXRfZmlsbGVkX3Nsb3RzKGNvbnN0IHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJY2hhciByZWFkX3B0ciwgd3JpdGVfcHRyOworCisJcmVhZF9wdHIgPSAoY2hhcikgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCUlApID4+IDgpOworCXdyaXRlX3B0ciA9IChjaGFyKSAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JXUCkgPj4gMTYpOworCisJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSAod3JpdGVfcHRyIC0gcmVhZF9wdHIpOworfQorCisvKioKKyAqIGhvc3RfYnVmZmVyX2lzX2VtcHR5ICAtIGNoZWNrIGlmIGhvc3QgYnVmZmVyIGlzIGVtcHR5LgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zICAxIGlmIGVtcHR5LCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgaG9zdF9idWZmZXJfaXNfZW1wdHkoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBjaGFyIGZpbGxlZF9zbG90czsKKworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKwlmaWxsZWRfc2xvdHMgPSBfaG9zdF9nZXRfZmlsbGVkX3Nsb3RzKGRldik7CisKKwlpZiAoZmlsbGVkX3Nsb3RzID4gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBjb3VudF9lbXB0eV93cml0ZV9zbG90cyAgLSBjb3VudCB3cml0ZSBlbXB0eSBzbG90cy4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAtMShFU0xPVFNfT1ZFUkZMT1cpIGlmIG92ZXJmbG93LCBvdGhlcndpc2UgZW1wdHkgc2xvdHMgY291bnQKKyAqLworX19zMzIgY291bnRfZW1wdHlfd3JpdGVfc2xvdHMoY29uc3Qgc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcl9kZXB0aCwgZmlsbGVkX3Nsb3RzLCBlbXB0eV9zbG90czsKKworCWJ1ZmZlcl9kZXB0aCA9ICh1bnNpZ25lZCBjaGFyKSAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCk7CisJZmlsbGVkX3Nsb3RzID0gX2hvc3RfZ2V0X2ZpbGxlZF9zbG90cyhkZXYpOworCWVtcHR5X3Nsb3RzID0gYnVmZmVyX2RlcHRoIC0gZmlsbGVkX3Nsb3RzOworCisJaWYgKGZpbGxlZF9zbG90cyA+IGJ1ZmZlcl9kZXB0aCkgeworCQkvKiBvdmVyZmxvdyAqLworCQlyZXR1cm4gLUVTTE9UU19PVkVSRkxPVzsKKwl9CisKKwlyZXR1cm4gKF9fczMyKSBlbXB0eV9zbG90czsKK30KKworLyoqCisgKiBoZWNpX3dyaXRlX21lc3NhZ2UgIC0gd3JpdGUgYSBtZXNzYWdlIHRvIGhlY2kgZGV2aWNlLgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBoZWNpX2hkcjogaGVhZGVyIG9mICBtZXNzYWdlCisgKiBAd3JpdGVfYnVmZmVyOiBtZXNzYWdlIGJ1ZmZlciB3aWxsIGJlIHdyaXRlCisgKiBAd3JpdGVfbGVuZ3RoOiBtZXNzYWdlIHNpemUgd2lsbCBiZSB3cml0ZQorICoKKyAqIHJldHVybnMgMSBpZiBzdWNjZXNzLCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgaGVjaV93cml0ZV9tZXNzYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBoZWNpX21zZ19oZHIgKmhlYWRlciwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqd3JpdGVfYnVmZmVyLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHdyaXRlX2xlbmd0aCkKK3sKKwlfX3UzMiB0ZW1wX21zZyA9IDA7CisJdW5zaWduZWQgbG9uZyBieXRlc193cml0dGVuID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcl9kZXB0aCwgZmlsbGVkX3Nsb3RzLCBlbXB0eV9zbG90czsKKwl1bnNpZ25lZCBsb25nIGR3X3RvX3dyaXRlOworCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCURCRygiaG9zdF9od19zdGF0ZSA9IDB4JTA4eC5cbiIsIGRldi0+aG9zdF9od19zdGF0ZSk7CisJREJHKCJoZWNpX3dyaXRlX21lc3NhZ2UgaGVhZGVyPSUwOHguXG4iLCAqKChfX3UzMiAqKSBoZWFkZXIpKTsKKwlidWZmZXJfZGVwdGggPSAodW5zaWduZWQgY2hhcikgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpOworCWZpbGxlZF9zbG90cyA9IF9ob3N0X2dldF9maWxsZWRfc2xvdHMoZGV2KTsKKwllbXB0eV9zbG90cyA9IGJ1ZmZlcl9kZXB0aCAtIGZpbGxlZF9zbG90czsKKwlEQkcoImZpbGxlZCA9ICVodSwgZW1wdHkgPSAlaHUuXG4iLCBmaWxsZWRfc2xvdHMsIGVtcHR5X3Nsb3RzKTsKKworCWR3X3RvX3dyaXRlID0gKCh3cml0ZV9sZW5ndGggKyAzKSAvIDQpOworCisJaWYgKGR3X3RvX3dyaXRlID4gZW1wdHlfc2xvdHMpCisJCXJldHVybiAwOworCisJd3JpdGVfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ0JfV1csICooKF9fdTMyICopIGhlYWRlcikpOworCisJd2hpbGUgKHdyaXRlX2xlbmd0aCA+PSA0KSB7CisJCXdyaXRlX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NCX1dXLAorCQkJCSooX191MzIgKikgKHdyaXRlX2J1ZmZlciArIGJ5dGVzX3dyaXR0ZW4pKTsKKwkJYnl0ZXNfd3JpdHRlbiArPSA0OworCQl3cml0ZV9sZW5ndGggLT0gNDsKKwl9CisKKwlpZiAod3JpdGVfbGVuZ3RoID4gMCkgeworCQltZW1jcHkoJnRlbXBfbXNnLCAmd3JpdGVfYnVmZmVyW2J5dGVzX3dyaXR0ZW5dLCB3cml0ZV9sZW5ndGgpOworCQl3cml0ZV9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DQl9XVywgdGVtcF9tc2cpOworCX0KKworCWRldi0+aG9zdF9od19zdGF0ZSB8PSBIX0lHOworCXdyaXRlX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUiwgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKwlkZXYtPm1lX2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgTUVfQ1NSX0hBKTsKKwlpZiAoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9SRFlfSFJBKSAhPSBNRV9SRFlfSFJBKQorCQlyZXR1cm4gMDsKKworCWRldi0+d3JpdGVfaGFuZyA9IDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogY291bnRfZnVsbF9yZWFkX3Nsb3RzICAtIGNvdW50IHJlYWQgZnVsbCBzbG90cy4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAtMShFU0xPVFNfT1ZFUkZMT1cpIGlmIG92ZXJmbG93LCBvdGhlcndpc2UgZmlsbGVkIHNsb3RzIGNvdW50CisgKi8KK19fczMyIGNvdW50X2Z1bGxfcmVhZF9zbG90cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCWNoYXIgcmVhZF9wdHIsIHdyaXRlX3B0cjsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcl9kZXB0aCwgZmlsbGVkX3Nsb3RzOworCisJZGV2LT5tZV9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIE1FX0NTUl9IQSk7CisJYnVmZmVyX2RlcHRoID0gKHVuc2lnbmVkIGNoYXIpKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfQ0JEX0hSQSkgPj4gMjQpOworCXJlYWRfcHRyID0gKGNoYXIpICgoZGV2LT5tZV9od19zdGF0ZSAmIE1FX0NCUlBfSFJBKSA+PiA4KTsKKwl3cml0ZV9wdHIgPSAoY2hhcikgKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfQ0JXUF9IUkEpID4+IDE2KTsKKwlmaWxsZWRfc2xvdHMgPSAodW5zaWduZWQgY2hhcikgKHdyaXRlX3B0ciAtIHJlYWRfcHRyKTsKKworCWlmIChmaWxsZWRfc2xvdHMgPiBidWZmZXJfZGVwdGgpIHsKKwkJLyogb3ZlcmZsb3cgKi8KKwkJcmV0dXJuIC1FU0xPVFNfT1ZFUkZMT1c7CisJfQorCisJREJHKCJmaWxsZWRfc2xvdHMgPSUwOHggIFxuIiwgZmlsbGVkX3Nsb3RzKTsKKwlyZXR1cm4gKF9fczMyKSBmaWxsZWRfc2xvdHM7Cit9CisKKy8qKgorICogaGVjaV9yZWFkX3Nsb3RzICAtIHJlYWQgYSBtZXNzYWdlIGZyb20gaGVjaSBkZXZpY2UuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGJ1ZmZlcjogbWVzc2FnZSBidWZmZXIgd2lsbCBiZSB3cml0ZQorICogQGJ1ZmZlcl9sZW5ndGg6IG1lc3NhZ2Ugc2l6ZSB3aWxsIGJlIHJlYWQKKyAqLwordm9pZCBoZWNpX3JlYWRfc2xvdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbmd0aCkKK3sKKwlfX3UzMiBpID0gMDsKKwl1bnNpZ25lZCBjaGFyIHRlbXBfYnVmW3NpemVvZihfX3UzMildOworCisJd2hpbGUgKGJ1ZmZlcl9sZW5ndGggPj0gc2l6ZW9mKF9fdTMyKSkgeworCQkoKF9fdTMyICopIGJ1ZmZlcilbaV0gPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBNRV9DQl9SVyk7CisJCURCRygiYnVmZmVyWyVkXT0gJWRcbiIsIGksICgoX191MzIgKikgYnVmZmVyKVtpXSk7CisJCWkrKzsKKwkJYnVmZmVyX2xlbmd0aCAtPSBzaXplb2YoX191MzIpOworCX0KKworCWlmIChidWZmZXJfbGVuZ3RoID4gMCkgeworCQkqKChfX3UzMiAqKSAmdGVtcF9idWYpID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgTUVfQ0JfUlcpOworCQltZW1jcHkoJmJ1ZmZlcltpICogNF0sIHRlbXBfYnVmLCBidWZmZXJfbGVuZ3RoKTsKKwl9CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgfD0gSF9JRzsKKwloZWNpX3NldF9jc3JfcmVnaXN0ZXIoZGV2KTsKK30KKworLyoqCisgKiBmbG93X2N0cmxfY3JlZHMgIC0gY2hlY2sgZmxvd19jb250cm9sIGNyZWRlbnRpYWxzLgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMSBpZiBmbG93X2N0cmxfY3JlZHMgPjAsIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBmbG93X2N0cmxfY3JlZHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCV9fdTggaTsKKworCWlmICghZGV2LT5udW1faGVjaV9tZV9jbGllbnRzKQorCQlyZXR1cm4gMDsKKworCWlmIChmaWxlX2V4dCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChmaWxlX2V4dC0+Zmxvd19jdHJsX2NyZWRzID4gMCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0gZmlsZV9leHQtPm1lX2NsaWVudF9pZCkgeworCQkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5mbG93X2N0cmxfY3JlZHMgPiAwKSB7CisJCQkJQlVHX09OKGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5zaW5nbGVfcmVjdl9idWYKKwkJCQkJID09IDApOworCQkJCXJldHVybiAxOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZmxvd19jdHJsX3JlZHVjZSAgLSByZWR1Y2UgZmxvd19jb250cm9sLgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICovCit2b2lkIGZsb3dfY3RybF9yZWR1Y2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCV9fdTggaTsKKworCWlmICghZGV2LT5udW1faGVjaV9tZV9jbGllbnRzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0gZmlsZV9leHQtPm1lX2NsaWVudF9pZCkgeworCQkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5zaW5nbGVfcmVjdl9idWYgIT0gMCkgeworCQkJCUJVR19PTihkZXYtPm1lX2NsaWVudHNbaV0uZmxvd19jdHJsX2NyZWRzIDw9IDApOworCQkJCWRldi0+bWVfY2xpZW50c1tpXS5mbG93X2N0cmxfY3JlZHMtLTsKKwkJCX0gZWxzZSB7CisJCQkJQlVHX09OKGZpbGVfZXh0LT5mbG93X2N0cmxfY3JlZHMgPD0gMCk7CisJCQkJZmlsZV9leHQtPmZsb3dfY3RybF9jcmVkcy0tOworCQkJfQorCQkJcmV0dXJuOworCQl9CisJfQorCUJVRygpOworfQorCisvKioKKyAqIGhlY2lfc2VuZF9mbG93X2NvbnRyb2wgLSBzZW5kIGZsb3cgY29udHJvbCB0byBmdy4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDEgaWYgc3VjY2VzcywgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IGhlY2lfc2VuZF9mbG93X2NvbnRyb2woc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKwlzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqaGVjaV9mbG93X2NvbnRyb2w7CisKKwloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCWhlY2lfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9mbG93X2NvbnRyb2wpOworCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwloZWNpX2Zsb3dfY29udHJvbCA9IChzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqKSAmZGV2LT53cl9tc2dfYnVmWzFdOworCW1lbXNldChoZWNpX2Zsb3dfY29udHJvbCwgMCwgc2l6ZW9mKGhlY2lfZmxvd19jb250cm9sKSk7CisJaGVjaV9mbG93X2NvbnRyb2wtPmhvc3RfYWRkciA9IGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZDsKKwloZWNpX2Zsb3dfY29udHJvbC0+bWVfYWRkciA9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQ7CisJaGVjaV9mbG93X2NvbnRyb2wtPmNtZC5jbWQgPSBIRUNJX0ZMT1dfQ09OVFJPTF9DTUQ7CisJbWVtc2V0KGhlY2lfZmxvd19jb250cm9sLT5yZXNlcnZlZCwgMCwKKwkJCXNpemVvZihoZWNpX2Zsb3dfY29udHJvbC0+cmVzZXJ2ZWQpKTsKKwlEQkcoInNlbmRpbmcgZmxvdyBjb250cm9sIGhvc3QgY2xpZW50ID0gJWQsIG1lIGNsaWVudCA9ICVkXG4iLAorCSAgICBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQsIGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgaGVjaV9mbG93X2NvbnRyb2wsCisJCQkJc2l6ZW9mKHN0cnVjdCBoYm1fZmxvd19jb250cm9sKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7CisKK30KKworLyoqCisgKiBvdGhlcl9jbGllbnRfaXNfY29ubmVjdGluZyAgLSBjaGVjayBpZiBvdGhlcgorICogICAgY2xpZW50IHdpdGggdGhlIHNhbWUgY2xpZW50IGlkIGlzIGNvbm5lY3RlZC4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDEgaWYgb3RoZXIgY2xpZW50IGlzIGNvbm5lY3RlZCwgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IG90aGVyX2NsaWVudF9pc19jb25uZWN0aW5nKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX25leHQgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpbGVfcG9zLCBmaWxlX25leHQsICZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQlpZiAoKGZpbGVfcG9zLT5zdGF0ZSA9PSBIRUNJX0ZJTEVfQ09OTkVDVElORykKKwkJCSYmIChmaWxlX3BvcyAhPSBmaWxlX2V4dCkKKwkJCSYmIGZpbGVfZXh0LT5tZV9jbGllbnRfaWQgPT0gZmlsZV9wb3MtPm1lX2NsaWVudF9pZCkKKwkJCXJldHVybiAxOworCisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGhlY2lfc2VuZF93ZCAgLSBzZW5kIHdhdGNoIGRvZyBtZXNzYWdlIHRvIGZ3LgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIDEgaWYgc3VjY2VzcywgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IGhlY2lfc2VuZF93ZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCisJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSBkZXYtPndkX2ZpbGVfZXh0Lmhvc3RfY2xpZW50X2lkOworCWhlY2lfaGRyLT5tZV9hZGRyID0gZGV2LT53ZF9maWxlX2V4dC5tZV9jbGllbnRfaWQ7CisJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCWlmICghbWVtY21wKGRldi0+d2RfZGF0YSwgaGVjaV9zdGFydF93ZF9wYXJhbXMsCisJCQlIRUNJX1dEX1BBUkFNU19TSVpFKSkgeworCQloZWNpX2hkci0+bGVuZ3RoID0gSEVDSV9TVEFSVF9XRF9EQVRBX1NJWkU7CisJfSBlbHNlIHsKKwkJQlVHX09OKG1lbWNtcChkZXYtPndkX2RhdGEsIGhlY2lfc3RvcF93ZF9wYXJhbXMsCisJCQlIRUNJX1dEX1BBUkFNU19TSVpFKSk7CisJCWhlY2lfaGRyLT5sZW5ndGggPSBIRUNJX1dEX1BBUkFNU19TSVpFOworCX0KKworCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsIGRldi0+d2RfZGF0YSwgaGVjaV9oZHItPmxlbmd0aCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogaGVjaV9kaXNjb25uZWN0ICAtIHNlbmQgZGlzY29ubmVjdCBtZXNzYWdlIHRvIGZ3LgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMSBpZiBzdWNjZXNzLCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgaGVjaV9kaXNjb25uZWN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisJc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICpoZWNpX2NsaV9kaXNjb25uZWN0OworCisJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwloZWNpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCk7CisJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCWhlY2lfY2xpX2Rpc2Nvbm5lY3QgPQorCSAgICAoc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICopICZkZXYtPndyX21zZ19idWZbMV07CisJbWVtc2V0KGhlY2lfY2xpX2Rpc2Nvbm5lY3QsIDAsIHNpemVvZihoZWNpX2NsaV9kaXNjb25uZWN0KSk7CisJaGVjaV9jbGlfZGlzY29ubmVjdC0+aG9zdF9hZGRyID0gZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkOworCWhlY2lfY2xpX2Rpc2Nvbm5lY3QtPm1lX2FkZHIgPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkOworCWhlY2lfY2xpX2Rpc2Nvbm5lY3QtPmNtZC5jbWQgPSBDTElFTlRfRElTQ09OTkVDVF9SRVFfQ01EOworCWhlY2lfY2xpX2Rpc2Nvbm5lY3QtPnJlc2VydmVkWzBdID0gMDsKKworCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgaGVjaV9jbGlfZGlzY29ubmVjdCwKKwkJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0KSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogaGVjaV9jb25uZWN0IC0gc2VuZCBjb25uZWN0IG1lc3NhZ2UgdG8gZncuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAxIGlmIHN1Y2Nlc3MsIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBoZWNpX2Nvbm5lY3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0ICpoZWNpX2NsaV9jb25uZWN0OworCisJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwloZWNpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVxdWVzdCk7CisJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCWhlY2lfY2xpX2Nvbm5lY3QgPQorCSAgICAoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0ICopICZkZXYtPndyX21zZ19idWZbMV07CisJaGVjaV9jbGlfY29ubmVjdC0+aG9zdF9hZGRyID0gZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkOworCWhlY2lfY2xpX2Nvbm5lY3QtPm1lX2FkZHIgPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkOworCWhlY2lfY2xpX2Nvbm5lY3QtPmNtZC5jbWQgPSBDTElFTlRfQ09OTkVDVF9SRVFfQ01EOworCWhlY2lfY2xpX2Nvbm5lY3QtPnJlc2VydmVkID0gMDsKKworCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgaGVjaV9oZHIsCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgaGVjaV9jbGlfY29ubmVjdCwKKwkJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0KSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2ludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzMzNmViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworCisjaWZuZGVmIF9IRUNJX0lOVEVSRkFDRV9IXworI2RlZmluZSBfSEVDSV9JTlRFUkZBQ0VfSF8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAiaGVjaV9kYXRhX3N0cnVjdHVyZXMuaCIKKworCisjZGVmaW5lIEhCTV9NSU5PUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSEJNX01BSk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBIQk1fVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAxCS8qIDEgc2Vjb25kICovCisKKworI2RlZmluZSBIT1NUX1NUQVJUX1JFUV9DTUQgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEhPU1RfU1RBUlRfUkVTX0NNRCAgICAgICAgICAgICAgICAgIDB4ODEKKworI2RlZmluZSBIT1NUX1NUT1BfUkVRX0NNRCAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEhPU1RfU1RPUF9SRVNfQ01EICAgICAgICAgICAgICAgICAgIDB4ODIKKworI2RlZmluZSBNRV9TVE9QX1JFUV9DTUQgICAgICAgICAgICAgICAgICAgICAweDAzCisKKyNkZWZpbmUgSE9TVF9FTlVNX1JFUV9DTUQgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBIT1NUX0VOVU1fUkVTX0NNRCAgICAgICAgICAgICAgICAgICAweDg0CisKKyNkZWZpbmUgSE9TVF9DTElFTlRfUFJPUEVSVEVJU19SRVFfQ01EICAgICAgMHgwNQorI2RlZmluZSBIT1NUX0NMSUVOVF9QUk9QRVJURUlTX1JFU19DTUQgICAgICAweDg1CisKKyNkZWZpbmUgQ0xJRU5UX0NPTk5FQ1RfUkVRX0NNRCAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBDTElFTlRfQ09OTkVDVF9SRVNfQ01EICAgICAgICAgICAgICAweDg2CisKKyNkZWZpbmUgQ0xJRU5UX0RJU0NPTk5FQ1RfUkVRX0NNRCAgICAgICAgICAgMHgwNworI2RlZmluZSBDTElFTlRfRElTQ09OTkVDVF9SRVNfQ01EICAgICAgICAgICAweDg3CisKKyNkZWZpbmUgSEVDSV9GTE9XX0NPTlRST0xfQ01EICAgICAgICAgICAgICAgMHgwOAorCisKKyNkZWZpbmUgQU1UX1dEX1ZBTFVFIDEyMAkvKiBzZWNvbmRzICovCisKKyNkZWZpbmUgSEVDSV9XQVRDSERPR19EQVRBX1NJWkUgICAgICAgICAxNgorI2RlZmluZSBIRUNJX1NUQVJUX1dEX0RBVEFfU0laRSAgICAgICAgIDIwCisjZGVmaW5lIEhFQ0lfV0RfUEFSQU1TX1NJWkUgICAgICAgICAgICAgNAorCisvKiBJT0NUTCBjb21tYW5kcyAqLworI2RlZmluZSBJT0NUTF9IRUNJX0dFVF9WRVJTSU9OIFwKKyAgICBfSU9XUignSCcgLCAweDAsIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSkKKyNkZWZpbmUgSU9DVExfSEVDSV9DT05ORUNUX0NMSUVOVCBcCisgICAgX0lPV1IoJ0gnICwgMHgwMSwgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhKQorI2RlZmluZSBJT0NUTF9IRUNJX1dEIFwKKyAgICBfSU9XUignSCcgLCAweDAyLCBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEpCisjZGVmaW5lIElPQ1RMX0hFQ0lfQllQQVNTX1dEIFwKKyAgICBfSU9XUignSCcgLCAweDEwLCBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEpCisKK2VudW0gaGVjaV9zdG9wX3JlYXNvbl90eXBlc3sKKwlEUklWRVJfU1RPUF9SRVFVRVNUID0gMHgwMCwKKwlERVZJQ0VfRDFfRU5UUlkgPSAweDAxLAorCURFVklDRV9EMl9FTlRSWSA9IDB4MDIsCisJREVWSUNFX0QzX0VOVFJZID0gMHgwMywKKwlTWVNURU1fUzFfRU5UUlkgPSAweDA0LAorCVNZU1RFTV9TMl9FTlRSWSA9IDB4MDUsCisJU1lTVEVNX1MzX0VOVFJZID0gMHgwNiwKKwlTWVNURU1fUzRfRU5UUlkgPSAweDA3LAorCVNZU1RFTV9TNV9FTlRSWSA9IDB4MDgKK307CisKK2VudW0gbWVfc3RvcF9yZWFzb25fdHlwZXN7CisJRldfVVBEQVRFID0gMHgwMAorfTsKKworZW51bSBjbGllbnRfY29ubmVjdF9zdGF0dXNfdHlwZXN7CisJQ0NTX1NVQ0NFU1MgPSAweDAwLAorCUNDU19OT1RfRk9VTkQgPSAweDAxLAorCUNDU19BTFJFQURZX1NUQVJURUQgPSAweDAyLAorCUNDU19PVVRfT0ZfUkVTT1VSQ0VTID0gMHgwMywKKwlDQ1NfTUVTU0FHRV9TTUFMTCA9IDB4MDQKK307CisKK2VudW0gY2xpZW50X2Rpc2Nvbm5lY3Rfc3RhdHVzX3R5cGVzeworCUNEU19TVUNDRVNTID0gMHgwMAorfTsKKworCisvKgorICogaGVjaSBpbnRlcmZhY2UgZnVuY3Rpb24gcHJvdG90eXBlcworICovCit2b2lkIGhlY2lfc2V0X2Nzcl9yZWdpc3RlcihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3ZvaWQgaGVjaV9jc3JfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7Cit2b2lkIGhlY2lfY3NyX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKKwordm9pZCBoZWNpX3JlYWRfc2xvdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbmd0aCk7CisKK2ludCBoZWNpX3dyaXRlX21lc3NhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGhlY2lfbXNnX2hkciAqaGVhZGVyLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICp3cml0ZV9idWZmZXIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgd3JpdGVfbGVuZ3RoKTsKKworaW50IGhvc3RfYnVmZmVyX2lzX2VtcHR5KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworCitfX3MzMiBjb3VudF9mdWxsX3JlYWRfc2xvdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CisKK19fczMyIGNvdW50X2VtcHR5X3dyaXRlX3Nsb3RzKGNvbnN0IHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworCitpbnQgZmxvd19jdHJsX2NyZWRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKK2ludCBoZWNpX3NlbmRfd2Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CisKK3ZvaWQgZmxvd19jdHJsX3JlZHVjZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCitpbnQgaGVjaV9zZW5kX2Zsb3dfY29udHJvbChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKworaW50IGhlY2lfZGlzY29ubmVjdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKK2ludCBvdGhlcl9jbGllbnRfaXNfY29ubmVjdGluZyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CitpbnQgaGVjaV9jb25uZWN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKworI2VuZGlmIC8qIF9IRUNJX0lOVEVSRkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGU0NGM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9tYWluLmMKQEAgLTAsMCArMSwxNTY0IEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorCisjaW5jbHVkZSAiaGVjaS5oIgorI2luY2x1ZGUgImhlY2lfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiaGVjaV92ZXJzaW9uLmgiCisKKworI2RlZmluZSBIRUNJX1JFQURfVElNRU9VVAk0NQorCisjZGVmaW5lIEhFQ0lfRFJJVkVSX05BTUUJImhlY2kiCisKKy8qCisgKiAgaGVjaSBkcml2ZXIgc3RyaW5ncworICovCitzdGF0aWMgY2hhciBoZWNpX2RyaXZlcl9uYW1lW10gPSBIRUNJX0RSSVZFUl9OQU1FOworc3RhdGljIGNoYXIgaGVjaV9kcml2ZXJfc3RyaW5nW10gPSAiSW50ZWwoUikgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIjsKK3N0YXRpYyBjaGFyIGhlY2lfZHJpdmVyX3ZlcnNpb25bXSA9IEhFQ0lfRFJJVkVSX1ZFUlNJT047CitzdGF0aWMgY2hhciBoZWNpX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIjsKKworCisjaWZkZWYgSEVDSV9ERUJVRworaW50IGhlY2lfZGVidWcgPSAxOworI2Vsc2UKK2ludCBoZWNpX2RlYnVnOworI2VuZGlmCitNT0RVTEVfUEFSTV9ERVNDKGhlY2lfZGVidWcsICAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKK21vZHVsZV9wYXJhbShoZWNpX2RlYnVnLCBpbnQsIDA2NDQpOworCisKKyNkZWZpbmUgSEVDSV9ERVZfTkFNRQkiaGVjaSIKKworLyogaGVjaSBjaGFyIGRldmljZSBmb3IgcmVnaXN0cmF0aW9uICovCitzdGF0aWMgc3RydWN0IGNkZXYgaGVjaV9jZGV2OworCisvKiBtYWpvciBudW1iZXIgZm9yIGRldmljZSAqLworc3RhdGljIGludCBoZWNpX21ham9yOworLyogVGhlIGRldmljZSBwb2ludGVyICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmhlY2lfZGV2aWNlOworCitzdGF0aWMgc3RydWN0IGNsYXNzICpoZWNpX2NsYXNzOworCisKKy8qIGhlY2lfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoZWNpX3BjaV90YmxbXSA9IHsKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF84Mjk0NkdaKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfODJHMzUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF84MlE5NjUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF84Mkc5NjUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF84MkdNOTY1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfODJHTUU5NjUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzgyUTM1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV84MkczMyl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfODJRMzMpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzgyWDM4KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV8zMjAwKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV82KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV83KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV84KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV85KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV8xMCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlNXzEpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5TV8yKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOU1fMyl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlNXzQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0gxMF8xKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIMTBfMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDEwXzMpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0gxMF80KX0sCisJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLworCXswLCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaGVjaV9wY2lfdGJsKTsKKworLyoKKyAqIExvY2FsIEZ1bmN0aW9uIFByb3RvdHlwZXMKKyAqLworc3RhdGljIGludCBfX2luaXQgaGVjaV9pbml0X21vZHVsZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBoZWNpX2V4aXRfbW9kdWxlKHZvaWQpOworc3RhdGljIGludCBfX2RldmluaXQgaGVjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBoZWNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitzdGF0aWMgaW50IGhlY2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IGhlY2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgc3NpemVfdCBoZWNpX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLAorCQkJIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KTsKK3N0YXRpYyBpbnQgaGVjaV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyBzc2l6ZV90IGhlY2lfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJICBzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKm9mZnNldCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGhlY2lfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7CitzdGF0aWMgc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqZmluZF9yZWFkX2xpc3RfZW50cnkoCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBoZWNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitzdGF0aWMgaW50IGhlY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0YXRpYyBfX3UxNiBnX3N1c193ZF90aW1lb3V0OworI2Vsc2UKKyNkZWZpbmUgaGVjaV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgaGVjaV9yZXN1bWUgTlVMTAorI2VuZGlmCisvKgorICogIFBDSSBkcml2ZXIgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBoZWNpX2RyaXZlciA9IHsKKwkubmFtZSA9IGhlY2lfZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0gaGVjaV9wY2lfdGJsLAorCS5wcm9iZSA9IGhlY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGhlY2lfcmVtb3ZlKSwKKwkuc2h1dGRvd24gPSBfX2RldmV4aXRfcChoZWNpX3JlbW92ZSksCisJLnN1c3BlbmQgPSBoZWNpX3N1c3BlbmQsCisJLnJlc3VtZSA9IGhlY2lfcmVzdW1lCit9OworCisvKgorICogZmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZSB3aWxsIGJlIHVzZSBoZWNpIGNoYXIgZGV2aWNlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZWNpX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSBoZWNpX3JlYWQsCisJLmlvY3RsID0gaGVjaV9pb2N0bCwKKwkub3BlbiA9IGhlY2lfb3BlbiwKKwkucmVsZWFzZSA9IGhlY2lfcmVsZWFzZSwKKwkud3JpdGUgPSBoZWNpX3dyaXRlLAorCS5wb2xsID0gaGVjaV9wb2xsLAorfTsKKworLyoqCisgKiBoZWNpX3JlZ2lzdHJhdGlvbl9jZGV2IC0gc2V0IHVwIHRoZSBjZGV2IHN0cnVjdHVyZSBmb3IgaGVjaSBkZXZpY2UuCisgKgorICogQGRldjogY2hhciBkZXZpY2Ugc3RydWN0CisgKiBAaG1pbm9yOiBtaW5vciBudW1iZXIgZm9yIHJlZ2lzdHJhdGlvbiBjaGFyIGRldmljZQorICogQGZvcHM6IGZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBoZWNpX3JlZ2lzdHJhdGlvbl9jZGV2KHN0cnVjdCBjZGV2ICpkZXYsIGludCBobWlub3IsCisJCQkJICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQoreworCWludCByZXQsIGRldm5vID0gTUtERVYoaGVjaV9tYWpvciwgaG1pbm9yKTsKKworCWNkZXZfaW5pdChkZXYsIGZvcHMpOworCWRldi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlyZXQgPSBjZGV2X2FkZChkZXYsIGRldm5vLCAxKTsKKwkvKiBGYWlsIGdyYWNlZnVsbHkgaWYgbmVlZCBiZSAqLworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBFcnJvciAlZCByZWdpc3RlcmluZyBoZWNpIGRldmljZSAlZFxuIiwKKwkJICAgICAgIHJldCwgaG1pbm9yKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogRGlzcGxheSB0aGUgdmVyc2lvbiBvZiBoZWNpIGRyaXZlci4gKi8KK3N0YXRpYyBzc2l6ZV90IHZlcnNpb25fc2hvdyhzdHJ1Y3QgY2xhc3MgKmRldiwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzICVzLlxuIiwKKwkJICAgICAgIGhlY2lfZHJpdmVyX3N0cmluZywgaGVjaV9kcml2ZXJfdmVyc2lvbik7Cit9CisKK3N0YXRpYyBDTEFTU19BVFRSKHZlcnNpb24sIFNfSVJVR08sIHZlcnNpb25fc2hvdywgTlVMTCk7CisKKy8qKgorICogaGVjaV9yZWdpc3Rlcl9jZGV2IC0gcmVnaXN0ZXJzIGhlY2kgY2hhciBkZXZpY2UKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBoZWNpX3JlZ2lzdGVyX2NkZXYodm9pZCkKK3sKKwlpbnQgcmV0OworCWRldl90IGRldjsKKworCS8qIHJlZ2lzdHJhdGlvbiBvZiBjaGFyIGRldmljZXMgKi8KKwlyZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIEhFQ0lfTUlOT1JTX0JBU0UsIEhFQ0lfTUlOT1JTX0NPVU5ULAorCQkJCSAgSEVDSV9EUklWRVJfTkFNRSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IEVycm9yIGFsbG9jYXRpbmcgY2hhciBkZXZpY2UgcmVnaW9uLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaGVjaV9tYWpvciA9IE1BSk9SKGRldik7CisKKwlyZXQgPSBoZWNpX3JlZ2lzdHJhdGlvbl9jZGV2KCZoZWNpX2NkZXYsIEhFQ0lfTUlOT1JfTlVNQkVSLAorCQkJCSAgICAgJmhlY2lfZm9wcyk7CisJaWYgKHJldCkKKwkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKGhlY2lfbWFqb3IsIEhFQ0lfTUlOT1JTX0JBU0UpLAorCQkJCQkgSEVDSV9NSU5PUlNfQ09VTlQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBoZWNpX3VucmVnaXN0ZXJfY2RldiAtIHVucmVnaXN0ZXJzIGhlY2kgY2hhciBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgaGVjaV91bnJlZ2lzdGVyX2NkZXYodm9pZCkKK3sKKwljZGV2X2RlbCgmaGVjaV9jZGV2KTsKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoaGVjaV9tYWpvciwgSEVDSV9NSU5PUlNfQkFTRSksCisJCQkJIEhFQ0lfTUlOT1JTX0NPVU5UKTsKK30KKworI2lmbmRlZiBIRUNJX0RFVklDRV9DUkVBVEUKKyNkZWZpbmUgSEVDSV9ERVZJQ0VfQ1JFQVRFIGRldmljZV9jcmVhdGUKKyNlbmRpZgorLyoqCisgKiBoZWNpX3N5c2ZzX2RldmljZV9jcmVhdGUgLSBhZGRzIGRldmljZSBlbnRyeSB0byBzeXNmcworICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhlY2lfc3lzZnNfZGV2aWNlX2NyZWF0ZSh2b2lkKQoreworCXN0cnVjdCBjbGFzcyAqY2xhc3M7CisJdm9pZCAqdG1waGRldjsKKwlpbnQgZXJyID0gMDsKKworCWNsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBIRUNJX0RSSVZFUl9OQU1FKTsKKwlpZiAoSVNfRVJSKGNsYXNzKSkgeworCQllcnIgPSBQVFJfRVJSKGNsYXNzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBFcnJvciBjcmVhdGluZyBoZWNpIGNsYXNzLlxuIik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwllcnIgPSBjbGFzc19jcmVhdGVfZmlsZShjbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJaWYgKGVycikgeworCQljbGFzc19kZXN0cm95KGNsYXNzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBFcnJvciBjcmVhdGluZyBoZWNpIGNsYXNzIGZpbGUuXG4iKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXRtcGhkZXYgPSBIRUNJX0RFVklDRV9DUkVBVEUoY2xhc3MsIE5VTEwsIGhlY2lfY2Rldi5kZXYsIE5VTEwsCisJCQkJCUhFQ0lfREVWX05BTUUpOworCWlmIChJU19FUlIodG1waGRldikpIHsKKwkJZXJyID0gUFRSX0VSUih0bXBoZGV2KTsKKwkJY2xhc3NfcmVtb3ZlX2ZpbGUoY2xhc3MsICZjbGFzc19hdHRyX3ZlcnNpb24pOworCQljbGFzc19kZXN0cm95KGNsYXNzKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWhlY2lfY2xhc3MgPSBjbGFzczsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBoZWNpX3N5c2ZzX2RldmljZV9yZW1vdmUgLSB1bnJlZ2lzdGVycyB0aGUgZGV2aWNlIGVudHJ5IG9uIHN5c2ZzCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfc3lzZnNfZGV2aWNlX3JlbW92ZSh2b2lkKQoreworCWlmICgoaGVjaV9jbGFzcyA9PSBOVUxMKSB8fCAoSVNfRVJSKGhlY2lfY2xhc3MpKSkKKwkJcmV0dXJuOworCisJZGV2aWNlX2Rlc3Ryb3koaGVjaV9jbGFzcywgaGVjaV9jZGV2LmRldik7CisJY2xhc3NfcmVtb3ZlX2ZpbGUoaGVjaV9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJY2xhc3NfZGVzdHJveShoZWNpX2NsYXNzKTsKK30KKworLyoqCisgKiBoZWNpX2luaXRfbW9kdWxlIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiBSb3V0aW5lCisgKgorICogaGVjaV9pbml0X21vZHVsZSBpcyB0aGUgZmlyc3Qgcm91dGluZSBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzCisgKiBsb2FkZWQuIEFsbCBpdCBkb2VzIGlzIHJlZ2lzdGVyIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGhlY2lfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gImhlY2k6ICVzIC0gdmVyc2lvbiAlc1xuIiwgaGVjaV9kcml2ZXJfc3RyaW5nLAorCQkJaGVjaV9kcml2ZXJfdmVyc2lvbik7CisJcHJpbnRrKEtFUk5fSU5GTyAiaGVjaTogJXNcbiIsIGhlY2lfY29weXJpZ2h0KTsKKworCS8qIGluaXQgcGNpIG1vZHVsZSAqLworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmhlY2lfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IEVycm9yIHJlZ2lzdGVyaW5nIGRyaXZlci5cbiIpOworCQlnb3RvIGVuZDsKKwl9CisKKwlyZXQgPSBoZWNpX3JlZ2lzdGVyX2NkZXYoKTsKKwlpZiAocmV0KQorCQlnb3RvIHVucmVnaXN0ZXJfcGNpOworCisJcmV0ID0gaGVjaV9zeXNmc19kZXZpY2VfY3JlYXRlKCk7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZ2lzdGVyX2NkZXY7CisKKwlyZXR1cm4gcmV0OworCit1bnJlZ2lzdGVyX2NkZXY6CisJaGVjaV91bnJlZ2lzdGVyX2NkZXYoKTsKK3VucmVnaXN0ZXJfcGNpOgorCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaGVjaV9kcml2ZXIpOworZW5kOgorCXJldHVybiByZXQ7Cit9CisKK21vZHVsZV9pbml0KGhlY2lfaW5pdF9tb2R1bGUpOworCisKKy8qKgorICogaGVjaV9leGl0X21vZHVsZSAtIERyaXZlciBFeGl0IENsZWFudXAgUm91dGluZQorICoKKyAqIGhlY2lfZXhpdF9tb2R1bGUgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBkcml2ZXIgaXMgcmVtb3ZlZAorICogZnJvbSBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBoZWNpX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZoZWNpX2RyaXZlcik7CisJaGVjaV9zeXNmc19kZXZpY2VfcmVtb3ZlKCk7CisJaGVjaV91bnJlZ2lzdGVyX2NkZXYoKTsKK30KKworbW9kdWxlX2V4aXQoaGVjaV9leGl0X21vZHVsZSk7CisKKworLyoqCisgKiBoZWNpX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKKyAqCisgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqIEBlbnQ6IGVudHJ5IGluIGtjc19wY2lfdGJsCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGhlY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2ID0gTlVMTDsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChoZWNpX2RldmljZSkgeworCQllcnIgPSAtRUVYSVNUOworCQlnb3RvIGVuZDsKKwl9CisJLyogZW5hYmxlIHBjaSBkZXYgKi8KKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogRmFpbGVkIHRvIGVuYWJsZSBwY2kgZGV2aWNlLlxuIik7CisJCWdvdG8gZW5kOworCX0KKwkvKiBzZXQgUENJIGhvc3QgbWFzdGVyaW5nICAqLworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCS8qIHBjaSByZXF1ZXN0IHJlZ2lvbnMgZm9yIGhlY2kgZHJpdmVyICovCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBoZWNpX2RyaXZlcl9uYW1lKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogRmFpbGVkIHRvIGdldCBwY2kgcmVnaW9ucy5cbiIpOworCQlnb3RvIGRpc2FibGVfZGV2aWNlOworCX0KKwkvKiBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBoZWNpIGRldiBzdHJ1Y3R1cmUgKi8KKwlkZXYgPSBpbml0X2hlY2lfZGV2aWNlKHBkZXYpOworCWlmICghZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gcmVsZWFzZV9yZWdpb25zOworCX0KKwkvKiBtYXBwaW5nICBJTyBkZXZpY2UgbWVtb3J5ICovCisJZm9yIChpID0gMDsgaSA8PSA1OyBpKyspIHsKKwkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgSU9SRVNPVVJDRV9JTykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBoZWNpIGhhcyBJTyBwb3J0cy5cbiIpOworCQkJZ290byBmcmVlX2RldmljZTsKKwkJfSBlbHNlIGlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBJT1JFU09VUkNFX01FTSkgeworCQkJaWYgKGRldi0+bWVtX2Jhc2UpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJImhlY2k6IFRvbyBtYW55IG1lbSBhZGRyZXNzZXMuXG4iKTsKKwkJCQlnb3RvIGZyZWVfZGV2aWNlOworCQkJfQorCQkJZGV2LT5tZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKKwkJCWRldi0+bWVtX2xlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSk7CisJCX0KKwl9CisJaWYgKCFkZXYtPm1lbV9iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogTm8gYWRkcmVzcyB0byB1c2UuXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX2RldmljZTsKKwl9CisJZGV2LT5tZW1fYWRkciA9IGlvcmVtYXBfbm9jYWNoZShkZXYtPm1lbV9iYXNlLAorCQkJZGV2LT5tZW1fbGVuZ3RoKTsKKwlpZiAoIWRldi0+bWVtX2FkZHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBSZW1hcCBJTyBkZXZpY2UgbWVtb3J5IGZhaWx1cmUuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2RldmljZTsKKwl9CisJLyogcmVxdWVzdCBhbmQgZW5hYmxlIGludGVycnVwdCAgICovCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBoZWNpX2lzcl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJaGVjaV9kcml2ZXJfbmFtZSwgZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogUmVxdWVzdF9pcnEgZmFpbHVyZS4gaXJxID0gJWQgXG4iLAorCQkgICAgICAgcGRldi0+aXJxKTsKKwkJZ290byB1bm1hcF9tZW1vcnk7CisJfQorCisJaWYgKGhlY2lfaHdfaW5pdChkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogSW5pdCBodyBmYWlsdXJlLlxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gcmVsZWFzZV9pcnE7CisJfQorCWluaXRfdGltZXIoJmRldi0+d2RfdGltZXIpOworCisJaGVjaV9pbml0aWFsaXplX2NsaWVudHMoZGV2KTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIHJlbGVhc2VfaHc7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwloZWNpX2RldmljZSA9IHBkZXY7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJaWYgKGRldi0+d2RfdGltZW91dCkKKwkJbW9kX3RpbWVyKCZkZXYtPndkX3RpbWVyLCBqaWZmaWVzKTsKKworI2lmZGVmIENPTkZJR19QTQorCWdfc3VzX3dkX3RpbWVvdXQgPSAwOworI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiaGVjaSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc3VjY2Vzc2Z1bC5cbiIpOworCXJldHVybiAwOworCityZWxlYXNlX2h3OgorCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKwloZWNpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMoZGV2KTsKKworCWRlbF90aW1lcl9zeW5jKCZkZXYtPndkX3RpbWVyKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKK3JlbGVhc2VfaXJxOgorCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKK3VubWFwX21lbW9yeToKKwlpZiAoZGV2LT5tZW1fYWRkcikKKwkJaW91bm1hcChkZXYtPm1lbV9hZGRyKTsKK2ZyZWVfZGV2aWNlOgorCWtmcmVlKGRldik7CityZWxlYXNlX3JlZ2lvbnM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK2VuZDoKKwlwcmludGsoS0VSTl9FUlIgImhlY2kgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogaGVjaV9yZW1vdmUgLSBEZXZpY2UgUmVtb3ZhbCBSb3V0aW5lCisgKgorICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CisgKgorICogaGVjaV9yZW1vdmUgaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIHRvIGFsZXJ0IHRoZSBkcml2ZXIKKyAqIHRoYXQgaXQgc2hvdWxkIHJlbGVhc2UgYSBQQ0kgZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaGVjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChoZWNpX2RldmljZSAhPSBwZGV2KQorCQlyZXR1cm47CisKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGhlY2lfZGV2aWNlICE9IHBkZXYpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm47CisJfQorCisJaWYgKGRldi0+cmVpbml0X3RzayAhPSBOVUxMKSB7CisJCWt0aHJlYWRfc3RvcChkZXYtPnJlaW5pdF90c2spOworCQlkZXYtPnJlaW5pdF90c2sgPSBOVUxMOworCX0KKworCWRlbF90aW1lcl9zeW5jKCZkZXYtPndkX3RpbWVyKTsKKwlpZiAoZGV2LT53ZF9maWxlX2V4dC5zdGF0ZSA9PSBIRUNJX0ZJTEVfQ09OTkVDVEVECisJICAgICYmIGRldi0+d2RfdGltZW91dCkgeworCQlkZXYtPndkX3RpbWVvdXQgPSAwOworCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSwgaGVjaV9zdG9wX3dkX3BhcmFtcywgSEVDSV9XRF9QQVJBTVNfU0laRSk7CisJCWRldi0+c3RvcCA9IDE7CisJCWlmIChkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ICYmCisJCSAgICBmbG93X2N0cmxfY3JlZHMoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCkpIHsKKwkJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSAwOworCisJCQlpZiAoIWhlY2lfc2VuZF93ZChkZXYpKQorCQkJCURCRygic2VuZCBzdG9wIFdEIGZhaWxlZFxuIik7CisJCQllbHNlCisJCQkJZmxvd19jdHJsX3JlZHVjZShkZXYsICZkZXYtPndkX2ZpbGVfZXh0KTsKKworCQkJZGV2LT53ZF9wZW5kaW5nID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRldi0+d2RfcGVuZGluZyA9IDE7CisJCX0KKwkJZGV2LT53ZF9zdG9wZWQgPSAwOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53YWl0X3N0b3Bfd2QsCisJCQkJKGRldi0+d2Rfc3RvcGVkKSwgMTAgKiBIWik7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWlmICghZGV2LT53ZF9zdG9wZWQpCisJCQlEQkcoInN0b3Agd2QgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CisJCWVsc2UKKwkJCURCRygic3RvcCB3ZCBjb21wbGV0ZS5cbiIpOworCisJfQorCisJaGVjaV9kZXZpY2UgPSBOVUxMOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWlmIChkZXYtPmlhbXRoaWZfZmlsZV9leHQuc3RhdGUgPT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkgeworCQlkZXYtPmlhbXRoaWZfZmlsZV9leHQuc3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVElORzsKKwkJaGVjaV9kaXNjb25uZWN0X2hvc3RfY2xpZW50KGRldiwKKwkJCQkJICAgICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpOworCX0KKwlpZiAoZGV2LT53ZF9maWxlX2V4dC5zdGF0ZSA9PSBIRUNJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCWRldi0+d2RfZmlsZV9leHQuc3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVElORzsKKwkJaGVjaV9kaXNjb25uZWN0X2hvc3RfY2xpZW50KGRldiwKKwkJCQkJICAgICZkZXYtPndkX2ZpbGVfZXh0KTsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJLyogcmVtb3ZlIGVudHJ5IGlmIGFscmVhZHkgaW4gbGlzdCAqLworCURCRygibGlzdCBkZWwgaWFtdGhpZiBhbmQgd2QgZmlsZSBsaXN0LlxuIik7CisJaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KGRldiwgZGV2LT53ZF9maWxlX2V4dC4KKwkJCQkJICBob3N0X2NsaWVudF9pZCk7CisJaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KGRldiwKKwkJCWRldi0+aWFtdGhpZl9maWxlX2V4dC5ob3N0X2NsaWVudF9pZCk7CisKKwlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisJZGV2LT5pYW10aGlmX2ZpbGVfZXh0LmZpbGUgPSBOVUxMOworCWRldi0+bnVtX2hlY2lfbWVfY2xpZW50cyA9IDA7CisKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJaGVjaV9jc3JfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldik7CisKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWYgKGRldi0+bWVtX2FkZHIpCisJCWlvdW5tYXAoZGV2LT5tZW1fYWRkcik7CisKKwlrZnJlZShkZXYpOworCisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKKy8qKgorICogaGVjaV9jbGVhcl9saXN0IC0gcmVtb3ZlIGFsbCBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIGZpbGUKKyAqIAkJZnJvbSBoZWNpX2NiX2xpc3QKKyAqCisgKiBAZmlsZTogZmlsZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqIEBoZWNpX2NiX2xpc3Q6IGNhbGxiYWNrcyBsaXN0CisgKgorICogaGVjaV9jbGVhcl9saXN0IGlzIGNhbGxlZCB0byBjbGVhciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGZpbGUKKyAqIHdoZW4gYXBwbGljYXRpb24gY2FsbHMgY2xvc2UgZnVuY3Rpb24gb3IgQ3RybC1DIHdhcyBwcmVzc2VkCisgKgorICogcmV0dXJucyAxIGlmIGNhbGxiYWNrIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCwgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBoZWNpX2NsZWFyX2xpc3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBsaXN0X2hlYWQgKmhlY2lfY2JfbGlzdCkKK3sKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZV90ZW1wOworCWludCByZXRzID0gMDsKKworCS8qIGxpc3QgYWxsIGxpc3QgbWVtYmVyICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkJIGhlY2lfY2JfbGlzdCwgY2JfbGlzdCkgeworCQlmaWxlX3RlbXAgPSAoc3RydWN0IGZpbGUgKilwcml2X2NiX3Bvcy0+ZmlsZV9vYmplY3Q7CisJCS8qIGNoZWNrIGlmIGxpc3QgbWVtYmVyIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgKi8KKwkJaWYgKGZpbGVfdGVtcCA9PSBmaWxlKSB7CisJCQkvKiByZW1vdmUgbWVtYmVyIGZyb20gdGhlIGxpc3QgKi8KKwkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkvKiBjaGVjayBpZiBjYiBlcXVhbCB0byBjdXJyZW50IGlhbXRoaWYgY2IgKi8KKwkJCWlmIChkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9PSBwcml2X2NiX3BvcykgeworCQkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKwkJCQkvKiBzZW5kIGZsb3cgY29udHJvbCB0byBpYW10aGlmIGNsaWVudCAqLworCQkJCWhlY2lfc2VuZF9mbG93X2NvbnRyb2woZGV2LAorCQkJCQkJICAgICAgICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpOworCQkJfQorCQkJLyogZnJlZSBhbGwgYWxsb2NhdGVkIGJ1ZmZlcnMgKi8KKwkJCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfY2JfcG9zKTsKKwkJCXJldHMgPSAxOworCQl9CisJfQorCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGhlY2lfY2xlYXJfbGlzdHMgLSByZW1vdmUgYWxsIGNhbGxiYWNrcyBhc3NvY2lhdGVkIHdpdGggZmlsZQorICoKKyAqIEBkZXY6IGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqIEBmaWxlOiBmaWxlIGluZm9ybWF0aW9uIHN0cnVjdAorICoKKyAqIGhlY2lfY2xlYXJfbGlzdHMgaXMgY2FsbGVkIHRvIGNsZWFyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZmlsZQorICogd2hlbiBhcHBsaWNhdGlvbiBjYWxscyBjbG9zZSBmdW5jdGlvbiBvciBDdHJsLUMgd2FzIHByZXNzZWQKKyAqCisgKiByZXR1cm5zIDEgaWYgY2FsbGJhY2sgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGhlY2lfY2xlYXJfbGlzdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldHMgPSAwOworCisJLyogcmVtb3ZlIGNhbGxiYWNrcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlICovCisJaGVjaV9jbGVhcl9saXN0KGRldiwgZmlsZSwgJmRldi0+cHRoaV9jbWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCWlmIChoZWNpX2NsZWFyX2xpc3QoZGV2LCBmaWxlLAorCQkJICAgICZkZXYtPnB0aGlfcmVhZF9jb21wbGV0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCkpCisJCXJldHMgPSAxOworCisJaGVjaV9jbGVhcl9saXN0KGRldiwgZmlsZSwgJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisKKwlpZiAoaGVjaV9jbGVhcl9saXN0KGRldiwgZmlsZSwgJmRldi0+Y3RybF93cl9saXN0LmhlY2lfY2IuY2JfbGlzdCkpCisJCXJldHMgPSAxOworCisJaWYgKGhlY2lfY2xlYXJfbGlzdChkZXYsIGZpbGUsCisJCQkgICAgJmRldi0+d3JpdGVfd2FpdGluZ19saXN0LmhlY2lfY2IuY2JfbGlzdCkpCisJCXJldHMgPSAxOworCisJaWYgKGhlY2lfY2xlYXJfbGlzdChkZXYsIGZpbGUsICZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkKKwkJcmV0cyA9IDE7CisKKwkvKiBjaGVjayBpZiBpYW10aGlmX2N1cnJlbnRfY2Igbm90IE5VTEwgKi8KKwlpZiAoZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgJiYgKCFyZXRzKSkgeworCQkvKiBjaGVjayBmaWxlIGFuZCBpYW10aGlmIGN1cnJlbnQgY2IgYXNzb2NpYXRpb24gKi8KKwkJaWYgKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiLT5maWxlX29iamVjdCA9PSBmaWxlKSB7CisJCQkvKiByZW1vdmUgY2IgKi8KKwkJCWhlY2lfZnJlZV9jYl9wcml2YXRlKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiKTsKKwkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKwkJCXJldHMgPSAxOworCQl9CisJfQorCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGhlY2lfb3BlbiAtIHRoZSBvcGVuIGZ1bmN0aW9uCisgKgorICogQGlub2RlOiBwb2ludGVyIHRvIGlub2RlIHN0cnVjdHVyZQorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBoZWNpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dDsKKwlpbnQgaWZfbnVtID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2OworCisJaWYgKCFoZWNpX2RldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEoaGVjaV9kZXZpY2UpOworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikpCisJCXJldHVybiAtRU5PREVWOworCisJZmlsZV9leHQgPSBoZWNpX2FsbG9jX2ZpbGVfcHJpdmF0ZShmaWxlKTsKKwlpZiAoZmlsZV9leHQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJa2ZyZWUoZmlsZV9leHQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGRldi0+b3Blbl9oYW5kbGVfY291bnQgPj0gSEVDSV9NQVhfT1BFTl9IQU5ETEVfQ09VTlQpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlrZnJlZShmaWxlX2V4dCk7CisJCXJldHVybiAtRU5GSUxFOworCX07CisJZGV2LT5vcGVuX2hhbmRsZV9jb3VudCsrOworCWxpc3RfYWRkX3RhaWwoJmZpbGVfZXh0LT5saW5rLCAmZGV2LT5maWxlX2xpc3QpOworCXdoaWxlICgoZGV2LT5oZWNpX2hvc3RfY2xpZW50c1tkZXYtPmN1cnJlbnRfaG9zdF9jbGllbnRfaWQgLyA4XQorCQkmICgxIDw8IChkZXYtPmN1cnJlbnRfaG9zdF9jbGllbnRfaWQgJSA4KSkpICE9IDApIHsKKworCQlkZXYtPmN1cnJlbnRfaG9zdF9jbGllbnRfaWQrKzsgLyogYWxsb3cgb3ZlcmZsb3cgKi8KKwkJREJHKCJjdXJyZW50X2hvc3RfY2xpZW50X2lkID0gJWRcbiIsCisJCSAgICBkZXYtPmN1cnJlbnRfaG9zdF9jbGllbnRfaWQpOworCQlEQkcoImRldi0+b3Blbl9oYW5kbGVfY291bnQgPSAlbHVcbiIsCisJCSAgICBkZXYtPm9wZW5faGFuZGxlX2NvdW50KTsKKwl9CisJREJHKCJjdXJyZW50X2hvc3RfY2xpZW50X2lkID0gJWRcbiIsIGRldi0+Y3VycmVudF9ob3N0X2NsaWVudF9pZCk7CisJZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkID0gZGV2LT5jdXJyZW50X2hvc3RfY2xpZW50X2lkOworCWRldi0+aGVjaV9ob3N0X2NsaWVudHNbZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkIC8gOF0gfD0KKwkJKDEgPDwgKGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCAlIDgpKTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwlmaWxlX2V4dC0+c3RhdGUgPSBIRUNJX0ZJTEVfSU5JVElBTElaSU5HOworCWZpbGVfZXh0LT5zbV9zdGF0ZSA9IDA7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaWxlX2V4dDsKKwlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoZWNpX3JlbGVhc2UgLSB0aGUgcmVsZWFzZSBmdW5jdGlvbgorICoKKyAqIEBpbm9kZTogcG9pbnRlciB0byBpbm9kZSBzdHJ1Y3R1cmUKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXRzID0gMDsKKwlpbnQgaWZfbnVtID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IgPSBOVUxMOworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXY7CisKKwlpZiAoIWhlY2lfZGV2aWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShoZWNpX2RldmljZSk7CisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSB8fCAoIWZpbGVfZXh0KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZmlsZV9leHQgIT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQlzcGluX2xvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCQlpZiAoZmlsZV9leHQtPnN0YXRlID09IEhFQ0lfRklMRV9DT05ORUNURUQpIHsKKwkJCWZpbGVfZXh0LT5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNUSU5HOworCQkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCQkJREJHKCJkaXNjb25uZWN0aW5nIGNsaWVudCBob3N0IGNsaWVudCA9ICVkLCAiCisJCQkgICAgIk1FIGNsaWVudCA9ICVkXG4iLAorCQkJICAgIGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCwKKwkJCSAgICBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKwkJCXJldHMgPSBoZWNpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQoZGV2LCBmaWxlX2V4dCk7CisJCQlzcGluX2xvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCQl9CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWhlY2lfZmx1c2hfcXVldWVzKGRldiwgZmlsZV9leHQpOworCQlEQkcoInJlbW92ZSBjbGllbnQgaG9zdCBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWRcbiIsCisJCSAgICBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQsCisJCSAgICBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKworCQlpZiAoZGV2LT5vcGVuX2hhbmRsZV9jb3VudCA+IDApIHsKKwkJCWRldi0+aGVjaV9ob3N0X2NsaWVudHNbZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkIC8gOF0gJj0KKwkJCX4oMSA8PCAoZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkICUgOCkpOworCQkJZGV2LT5vcGVuX2hhbmRsZV9jb3VudC0tOworCQl9CisJCWhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsCisJCQkJZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkKTsKKworCQkvKiBmcmVlIHJlYWQgY2IgKi8KKwkJaWYgKGZpbGVfZXh0LT5yZWFkX2NiICE9IE5VTEwpIHsKKwkJCXByaXZfY2IgPSBmaW5kX3JlYWRfbGlzdF9lbnRyeShkZXYsIGZpbGVfZXh0KTsKKwkJCS8qIFJlbW92ZSBlbnRyeSBmcm9tIHJlYWQgbGlzdCAqLworCQkJaWYgKHByaXZfY2IgIT0gTlVMTCkKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYi0+Y2JfbGlzdCk7CisKKwkJCXByaXZfY2IgPSBmaWxlX2V4dC0+cmVhZF9jYjsKKwkJCWZpbGVfZXh0LT5yZWFkX2NiID0gTlVMTDsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCisJCWlmIChwcml2X2NiICE9IE5VTEwpCisJCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X2NiKTsKKworCQlrZnJlZShmaWxlX2V4dCk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCQlpZiAoZGV2LT5vcGVuX2hhbmRsZV9jb3VudCA+IDApCisJCQlkZXYtPm9wZW5faGFuZGxlX2NvdW50LS07CisKKwkJaWYgKGRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9PSBmaWxlCisJCSAgICAmJiBkZXYtPmlhbXRoaWZfc3RhdGUgIT0gSEVDSV9JQU1USElGX0lETEUpIHsKKwkJCURCRygicHRoaSBjYW5jZWxlZCBpYW10aGlmIHN0YXRlICVkXG4iLAorCQkJICAgIGRldi0+aWFtdGhpZl9zdGF0ZSk7CisJCQlkZXYtPmlhbXRoaWZfY2FuY2VsZWQgPSAxOworCQkJaWYgKGRldi0+aWFtdGhpZl9zdGF0ZSA9PSBIRUNJX0lBTVRISUZfUkVBRF9DT01QTEVURSkgeworCQkJCURCRygicnVuIG5leHQgcHRoaSBpYW10aGlmIGNiXG4iKTsKKwkJCQlydW5fbmV4dF9pYW10aGlmX2NtZChkZXYpOworCQkJfQorCQl9CisKKwkJaWYgKGhlY2lfY2xlYXJfbGlzdHMoZGV2LCBmaWxlKSkKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9JRExFOworCisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwl9CisJcmV0dXJuIHJldHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpmaW5kX3JlYWRfbGlzdF9lbnRyeSgKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0X2xpc3RfdGVtcDsKKworCWlmIChkZXYtPnJlYWRfbGlzdC5zdGF0dXMgPT0gMAorCSAgICAmJiAhbGlzdF9lbXB0eSgmZGV2LT5yZWFkX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkgeworCQlEQkcoInJlbW92ZSByZWFkX2xpc3QgQ0IgXG4iKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLAorCQkJCXByaXZfY2JfbmV4dCwKKwkJCQkmZGV2LT5yZWFkX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisKKwkJCWZpbGVfZXh0X2xpc3RfdGVtcCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCisJCQlpZiAoKGZpbGVfZXh0X2xpc3RfdGVtcCAhPSBOVUxMKSAmJgorCQkJICAgIGhlY2lfZmVfc2FtZV9pZChmaWxlX2V4dCwgZmlsZV9leHRfbGlzdF90ZW1wKSkKKwkJCQlyZXR1cm4gcHJpdl9jYl9wb3M7CisKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBoZWNpX3JlYWQgLSB0aGUgcmVhZCBjbGllbnQgbWVzc2FnZSBmdW5jdGlvbi4KKyAqCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICogQHVidWY6IHBvaW50ZXIgdG8gdXNlciBidWZmZXIKKyAqIEBsZW5ndGg6IGJ1ZmZlciBsZW5ndGgKKyAqIEBvZmZzZXQ6IGRhdGEgb2Zmc2V0IGluIGJ1ZmZlcgorICoKKyAqIHJldHVybnMgPj0wIGRhdGEgbGVuZ3RoIG9uIHN1Y2Nlc3MgLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgc3NpemVfdCBoZWNpX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLAorCQkJIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KQoreworCWludCBpOworCWludCByZXRzID0gMCwgZXJyID0gMDsKKwlpbnQgaWZfbnVtID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiID0gTlVMTDsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2OworCisJaWYgKCFoZWNpX2RldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEoaGVjaV9kZXZpY2UpOworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikgfHwgKCFmaWxlX2V4dCkpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlzcGluX2xvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCWlmICgoZmlsZV9leHQtPnNtX3N0YXRlICYgSEVDSV9XRF9TVEFURV9JTkRFUEVOREVOQ0VfTVNHX1NFTlQpID09IDApIHsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCQkvKiBEbyBub3QgYWxsb3cgdG8gcmVhZCB3YXRjaGRvZyBjbGllbnQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCQlpZiAobWVtY21wKCZoZWNpX3dkX2d1aWQsCisJCQkJICAgJmRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5wcm90b2NvbF9uYW1lLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgZ3VpZCkpID09IDApIHsKKwkJCQlpZiAoZmlsZV9leHQtPm1lX2NsaWVudF9pZCA9PQorCQkJCSAgICBkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkKQorCQkJCQlyZXR1cm4gLUVCQURGOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZmlsZV9leHQtPnNtX3N0YXRlICY9IH5IRUNJX1dEX1NUQVRFX0lOREVQRU5ERU5DRV9NU0dfU0VOVDsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCX0KKworCWlmIChmaWxlX2V4dCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCXJldHMgPSBwdGhpX3JlYWQoZGV2LCBpZl9udW0sIGZpbGUsIHVidWYsIGxlbmd0aCwgb2Zmc2V0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGZpbGVfZXh0LT5yZWFkX2NiICYmIGZpbGVfZXh0LT5yZWFkX2NiLT5pbmZvcm1hdGlvbiA+ICpvZmZzZXQpIHsKKwkJcHJpdl9jYiA9IGZpbGVfZXh0LT5yZWFkX2NiOworCQlnb3RvIGNvcHlfYnVmZmVyOworCX0gZWxzZSBpZiAoZmlsZV9leHQtPnJlYWRfY2IgJiYgZmlsZV9leHQtPnJlYWRfY2ItPmluZm9ybWF0aW9uID4gMCAmJgorCQkgICBmaWxlX2V4dC0+cmVhZF9jYi0+aW5mb3JtYXRpb24gPD0gKm9mZnNldCkgeworCQlwcml2X2NiID0gZmlsZV9leHQtPnJlYWRfY2I7CisJCXJldHMgPSAwOworCQlnb3RvIGZyZWU7CisJfSBlbHNlIGlmICgoIWZpbGVfZXh0LT5yZWFkX2NiIHx8IGZpbGVfZXh0LT5yZWFkX2NiLT5pbmZvcm1hdGlvbiA9PSAwKQorCQkgICAgJiYgKm9mZnNldCA+IDApIHsKKwkJLypPZmZzZXQgbmVlZHMgdG8gYmUgY2xlYW5lZCBmb3IgY29udGluZ291cyByZWFkcyovCisJCSpvZmZzZXQgPSAwOworCQlyZXRzID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwllcnIgPSBoZWNpX3N0YXJ0X3JlYWQoZGV2LCBpZl9udW0sIGZpbGVfZXh0KTsKKwlpZiAoZXJyICE9IDAgJiYgZXJyICE9IC1FQlVTWSkgeworCQlEQkcoImhlY2kgc3RhcnQgcmVhZCBmYWlsdXJlIHdpdGggc3RhdHVzID0gJWRcbiIsIGVycik7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJcmV0cyA9IGVycjsKKwkJZ290byBvdXQ7CisJfQorCWlmIChIRUNJX1JFQURfQ09NUExFVEUgIT0gZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUKKwkJCSYmICF3YWl0cXVldWVfYWN0aXZlKCZmaWxlX2V4dC0+cnhfd2FpdCkpIHsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXRzID0gLUVBR0FJTjsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKworCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZpbGVfZXh0LT5yeF93YWl0LAorCQkJKEhFQ0lfUkVBRF9DT01QTEVURSA9PSBmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZQorCQkJIHx8IEhFQ0lfRklMRV9JTklUSUFMSVpJTkcgPT0gZmlsZV9leHQtPnN0YXRlCisJCQkgfHwgSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRCA9PSBmaWxlX2V4dC0+c3RhdGUKKwkJCSB8fCBIRUNJX0ZJTEVfRElTQ09OTkVDVElORyA9PSBmaWxlX2V4dC0+c3RhdGUpKSkgeworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcmV0cyA9IC1FSU5UUjsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCX0KKworCQlpZiAoSEVDSV9GSUxFX0lOSVRJQUxJWklORyA9PSBmaWxlX2V4dC0+c3RhdGUgfHwKKwkJICAgIEhFQ0lfRklMRV9ESVNDT05ORUNURUQgPT0gZmlsZV9leHQtPnN0YXRlIHx8CisJCSAgICBIRUNJX0ZJTEVfRElTQ09OTkVDVElORyA9PSBmaWxlX2V4dC0+c3RhdGUpIHsKKwkJCXJldHMgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzcGluX2xvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCX0KKworCXByaXZfY2IgPSBmaWxlX2V4dC0+cmVhZF9jYjsKKworCWlmICghcHJpdl9jYikgeworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUgIT0gSEVDSV9SRUFEX0NPTVBMRVRFKSB7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkvKiBub3cgY29weSB0aGUgZGF0YSB0byB1c2VyIHNwYWNlICovCitjb3B5X2J1ZmZlcjoKKwlEQkcoInByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlciBzaXplIC0gJWRcbiIsCisJICAgIHByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplKTsKKwlEQkcoInByaXZfY2ItPmluZm9ybWF0aW9uIC0gJWx1XG4iLAorCSAgICBwcml2X2NiLT5pbmZvcm1hdGlvbik7CisJaWYgKGxlbmd0aCA9PSAwIHx8IHVidWYgPT0gTlVMTCB8fAorCSAgICAqb2Zmc2V0ID4gcHJpdl9jYi0+aW5mb3JtYXRpb24pIHsKKwkJcmV0cyA9IC1FTVNHU0laRTsKKwkJZ290byBmcmVlOworCX0KKworCS8qIGxlbmd0aCBpcyBiZWluZyB0dXJuY2F0ZWQgdG8gUEFHRV9TSVpFLCBob3dldmVyLCAqLworCS8qIGluZm9ybWF0aW9uIHNpemUgbWF5IGJlIGxvbmdlciAqLworCWxlbmd0aCA9IChsZW5ndGggPCAocHJpdl9jYi0+aW5mb3JtYXRpb24gLSAqb2Zmc2V0KSA/CisJCQlsZW5ndGggOiAocHJpdl9jYi0+aW5mb3JtYXRpb24gLSAqb2Zmc2V0KSk7CisKKwlpZiAoY29weV90b191c2VyKHVidWYsCisJCQkgcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEgKyAqb2Zmc2V0LAorCQkJIGxlbmd0aCkpIHsKKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnJlZTsKKwl9CisKKwlyZXRzID0gbGVuZ3RoOworCSpvZmZzZXQgKz0gbGVuZ3RoOworCWlmICgodW5zaWduZWQgbG9uZykqb2Zmc2V0IDwgcHJpdl9jYi0+aW5mb3JtYXRpb24pCisJCWdvdG8gb3V0OworCitmcmVlOgorCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJcHJpdl9jYl9wb3MgPSBmaW5kX3JlYWRfbGlzdF9lbnRyeShkZXYsIGZpbGVfZXh0KTsKKwkvKiBSZW1vdmUgZW50cnkgZnJvbSByZWFkIGxpc3QgKi8KKwlpZiAocHJpdl9jYl9wb3MgIT0gTlVMTCkKKwkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl9jYik7CisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwlmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSA9IEhFQ0lfSURMRTsKKwlmaWxlX2V4dC0+cmVhZF9jYiA9IE5VTEw7CisJZmlsZV9leHQtPnJlYWRfcGVuZGluZyA9IDA7CisJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworb3V0OglEQkcoImVuZCBoZWNpIHJlYWQgcmV0cz0gJWRcbiIsIHJldHMpOworCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGhlY2lfd3JpdGUgLSB0aGUgd3JpdGUgZnVuY3Rpb24uCisgKgorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUKKyAqIEB1YnVmOiBwb2ludGVyIHRvIHVzZXIgYnVmZmVyCisgKiBAbGVuZ3RoOiBidWZmZXIgbGVuZ3RoCisgKiBAb2Zmc2V0OiBkYXRhIG9mZnNldCBpbiBidWZmZXIKKyAqCisgKiByZXR1cm5zID49MCBkYXRhIGxlbmd0aCBvbiBzdWNjZXNzICwgPDAgb24gZXJyb3IKKyAqLworc3RhdGljIHNzaXplX3QgaGVjaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KQoreworCWludCByZXRzID0gMDsKKwlfX3U4IGk7CisJaW50IGlmX251bSA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X3dyaXRlX2NiID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyIGhlY2lfaGRyOworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXY7CisJdW5zaWduZWQgbG9uZyBjdXJydGltZSA9IGdldF9zZWNvbmRzKCk7CisKKwlpZiAoIWhlY2lfZGV2aWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShoZWNpX2RldmljZSk7CisKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpIHx8ICghZmlsZV9leHQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZmlsZV9leHQgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQlwcml2X3dyaXRlX2NiID0gZmluZF9wdGhpX3JlYWRfbGlzdF9lbnRyeShkZXYsIGZpbGUpOworCQlpZiAoKHByaXZfd3JpdGVfY2IgIT0gTlVMTCkgJiYKKwkJICAgICAoKChjdXJydGltZSAtIHByaXZfd3JpdGVfY2ItPnJlYWRfdGltZSkgPgorCQkJICAgIElBTVRISUZfUkVBRF9USU1FUikgfHwKKwkJICAgICAgKGZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlID09IEhFQ0lfUkVBRF9DT01QTEVURSkpKSB7CisJCQkoKm9mZnNldCkgPSAwOworCQkJbGlzdF9kZWwoJnByaXZfd3JpdGVfY2ItPmNiX2xpc3QpOworCQkJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl93cml0ZV9jYik7CisJCQlwcml2X3dyaXRlX2NiID0gTlVMTDsKKwkJfQorCX0KKworCS8qIGZyZWUgZW50cnkgdXNlZCBpbiByZWFkICovCisJaWYgKGZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlID09IEhFQ0lfUkVBRF9DT01QTEVURSkgeworCQkqb2Zmc2V0ID0gMDsKKwkJcHJpdl93cml0ZV9jYiA9IGZpbmRfcmVhZF9saXN0X2VudHJ5KGRldiwgZmlsZV9leHQpOworCQlpZiAocHJpdl93cml0ZV9jYiAhPSBOVUxMKSB7CisJCQlsaXN0X2RlbCgmcHJpdl93cml0ZV9jYi0+Y2JfbGlzdCk7CisJCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X3dyaXRlX2NiKTsKKwkJCXByaXZfd3JpdGVfY2IgPSBOVUxMOworCQkJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJCWZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlID0gSEVDSV9JRExFOworCQkJZmlsZV9leHQtPnJlYWRfY2IgPSBOVUxMOworCQkJZmlsZV9leHQtPnJlYWRfcGVuZGluZyA9IDA7CisJCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCX0KKwl9IGVsc2UgaWYgKGZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlID09IEhFQ0lfSURMRSAmJgorCQkJZmlsZV9leHQtPnJlYWRfcGVuZGluZyA9PSAwKQorCQkoKm9mZnNldCkgPSAwOworCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJcHJpdl93cml0ZV9jYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZfd3JpdGVfY2IpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdl93cml0ZV9jYi0+ZmlsZV9vYmplY3QgPSBmaWxlOworCXByaXZfd3JpdGVfY2ItPmZpbGVfcHJpdmF0ZSA9IGZpbGVfZXh0OworCXByaXZfd3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2X3dyaXRlX2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhKSB7CisJCWtmcmVlKHByaXZfd3JpdGVfY2IpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJREJHKCJsZW5ndGggPSVkXG4iLCAoaW50KSBsZW5ndGgpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKHByaXZfd3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEsCisJCXVidWYsIGxlbmd0aCkpIHsKKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlzcGluX2xvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCWZpbGVfZXh0LT5zbV9zdGF0ZSA9IDA7CisJaWYgKChsZW5ndGggPT0gNCkgJiYKKwkgICAgKChtZW1jbXAoaGVjaV93ZF9zdGF0ZV9pbmRlcGVuZGVuY2VfbXNnWzBdLCB1YnVmLCA0KSA9PSAwKSB8fAorCSAgICAgKG1lbWNtcChoZWNpX3dkX3N0YXRlX2luZGVwZW5kZW5jZV9tc2dbMV0sIHVidWYsIDQpID09IDApIHx8CisJICAgICAobWVtY21wKGhlY2lfd2Rfc3RhdGVfaW5kZXBlbmRlbmNlX21zZ1syXSwgdWJ1ZiwgNCkgPT0gMCkpKQorCQlmaWxlX2V4dC0+c21fc3RhdGUgfD0gSEVDSV9XRF9TVEFURV9JTkRFUEVOREVOQ0VfTVNHX1NFTlQ7CisJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXZfd3JpdGVfY2ItPmNiX2xpc3QpOworCWlmIChmaWxlX2V4dCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCXByaXZfd3JpdGVfY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhID0KKwkJICAgIGttYWxsb2MoSUFNVEhJRl9NVFUsIEdGUF9LRVJORUwpOworCQlpZiAoIXByaXZfd3JpdGVfY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhKSB7CisJCQlyZXRzID0gLUVOT01FTTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCA9PQorCQkJCWRldi0+aWFtdGhpZl9maWxlX2V4dC5tZV9jbGllbnRfaWQpCisJCQkJYnJlYWs7CisJCX0KKworCQlCVUdfT04oZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCAhPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKwkJaWYgKChpID09IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50cykgfHwKKwkJICAgIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkICE9CisJCSAgICAgIGRldi0+aWFtdGhpZl9maWxlX2V4dC5tZV9jbGllbnRfaWQpKSB7CisKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJZ290byBmYWlsOworCQl9IGVsc2UgaWYgKChsZW5ndGggPiBkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGgpCisJCQkgICAgfHwgKGxlbmd0aCA8PSAwKSkgeworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJcmV0cyA9IC1FTVNHU0laRTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisKKwkJcHJpdl93cml0ZV9jYi0+cmVzcG9uc2VfYnVmZmVyLnNpemUgPSBJQU1USElGX01UVTsKKwkJcHJpdl93cml0ZV9jYi0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID0gSEVDSV9JT0NUTDsKKwkJcHJpdl93cml0ZV9jYi0+aW5mb3JtYXRpb24gPSAwOworCQlwcml2X3dyaXRlX2NiLT5yZXF1ZXN0X2J1ZmZlci5zaXplID0gbGVuZ3RoOworCQlpZiAoZGV2LT5pYW10aGlmX2ZpbGVfZXh0LnN0YXRlICE9IEhFQ0lfRklMRV9DT05ORUNURUQpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJZ290byBmYWlsOworCQl9CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPnB0aGlfY21kX2xpc3QuaGVjaV9jYi5jYl9saXN0KQorCQkJCXx8IGRldi0+aWFtdGhpZl9zdGF0ZSAhPSBIRUNJX0lBTVRISUZfSURMRSkgeworCQkJREJHKCJwdGhpX3N0YXRlID0gJWRcbiIsIChpbnQpIGRldi0+aWFtdGhpZl9zdGF0ZSk7CisJCQlEQkcoImFkZCBQVEhJIGNiIHRvIHB0aGkgY21kIHdhaXRpbmcgbGlzdFxuIik7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X3dyaXRlX2NiLT5jYl9saXN0LAorCQkJCQkmZGV2LT5wdGhpX2NtZF9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCQlyZXRzID0gbGVuZ3RoOworCQl9IGVsc2UgeworCQkJREJHKCJjYWxsIHB0aGkgd3JpdGVcbiIpOworCQkJcmV0cyA9IHB0aGlfd3JpdGUoZGV2LCBwcml2X3dyaXRlX2NiKTsKKworCQkJaWYgKHJldHMgIT0gMCkgeworCQkJCURCRygicHRoaSB3cml0ZSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwKKwkJCQkgICAgcmV0cyk7CisJCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCXJldHMgPSBsZW5ndGg7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gcmV0czsKKwl9CisKKwlwcml2X3dyaXRlX2NiLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPSBIRUNJX1dSSVRFOworCS8qIG1ha2Ugc3VyZSBpbmZvcm1hdGlvbiBpcyB6ZXJvIGJlZm9yZSB3ZSBzdGFydCAqLworCisJcHJpdl93cml0ZV9jYi0+aW5mb3JtYXRpb24gPSAwOworCXByaXZfd3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLnNpemUgPSBsZW5ndGg7CisKKwlzcGluX2xvY2soJmZpbGVfZXh0LT53cml0ZV9pb19sb2NrKTsKKwlEQkcoImhvc3QgY2xpZW50ID0gJWQsIE1FIGNsaWVudCA9ICVkXG4iLAorCSAgICBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQsIGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCWlmIChmaWxlX2V4dC0+c3RhdGUgIT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJREJHKCJob3N0IGNsaWVudCA9ICVkLCAgaXMgbm90IGNvbm5lY3RlZCB0byBNRSBjbGllbnQgPSAlZCIsCisJCSAgICBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQsCisJCSAgICBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKTsKKworCQlnb3RvIHVubG9jazsKKwl9CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkID09CisJCSAgICBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKQorCQkJYnJlYWs7CisJfQorCUJVR19PTihkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkICE9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCWlmIChpID09IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50cykgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2s7CisJfQorCWlmIChsZW5ndGggPiBkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGggfHwgbGVuZ3RoIDw9IDApIHsKKwkJcmV0cyA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKwlwcml2X3dyaXRlX2NiLT5maWxlX3ByaXZhdGUgPSBmaWxlX2V4dDsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGZsb3dfY3RybF9jcmVkcyhkZXYsIGZpbGVfZXh0KSAmJgorCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5KSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCWlmIChsZW5ndGggPiAoKCgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSAqCisJCQlzaXplb2YoX191MzIpKSAtIHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSkpIHsKKworCQkJaGVjaV9oZHIubGVuZ3RoID0KKwkJCQkoKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpICoKKwkJCQlzaXplb2YoX191MzIpKSAtCisJCQkJc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpOworCQkJaGVjaV9oZHIubXNnX2NvbXBsZXRlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWhlY2lfaGRyLmxlbmd0aCA9IGxlbmd0aDsKKwkJCWhlY2lfaGRyLm1zZ19jb21wbGV0ZSA9IDE7CisJCX0KKwkJaGVjaV9oZHIuaG9zdF9hZGRyID0gZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkOworCQloZWNpX2hkci5tZV9hZGRyID0gZmlsZV9leHQtPm1lX2NsaWVudF9pZDsKKwkJaGVjaV9oZHIucmVzZXJ2ZWQgPSAwOworCQlEQkcoImNhbGwgaGVjaV93cml0ZV9tZXNzYWdlIGhlYWRlcj0lMDh4LlxuIiwKKwkJICAgICooKF9fdTMyICopICZoZWNpX2hkcikpOworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPndyaXRlX2lvX2xvY2spOworCQkvKiAgcHJvdGVjdCBoZWNpIGxvdyBsZXZlbCB3cml0ZSAqLworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsICZoZWNpX2hkciwKKwkJCSh1bnNpZ25lZCBjaGFyICopIChwcml2X3dyaXRlX2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhKSwKKwkJCWhlY2lfaGRyLmxlbmd0aCkpIHsKKworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl93cml0ZV9jYik7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCXByaXZfd3JpdGVfY2ItPmluZm9ybWF0aW9uID0gMDsKKwkJCXJldHVybiByZXRzOworCQl9CisJCWZpbGVfZXh0LT53cml0aW5nX3N0YXRlID0gSEVDSV9XUklUSU5HOworCQlwcml2X3dyaXRlX2NiLT5pbmZvcm1hdGlvbiA9IGhlY2lfaGRyLmxlbmd0aDsKKwkJaWYgKGhlY2lfaGRyLm1zZ19jb21wbGV0ZSkgeworCQkJZmxvd19jdHJsX3JlZHVjZShkZXYsIGZpbGVfZXh0KTsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfd3JpdGVfY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmRldi0+d3JpdGVfd2FpdGluZ19saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X3dyaXRlX2NiLT5jYl9saXN0LAorCQkJCSAgICAgICZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwl9IGVsc2UgeworCisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcHJpdl93cml0ZV9jYi0+aW5mb3JtYXRpb24gPSAwOworCQlmaWxlX2V4dC0+d3JpdGluZ19zdGF0ZSA9IEhFQ0lfV1JJVElORzsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT53cml0ZV9pb19sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmcHJpdl93cml0ZV9jYi0+Y2JfbGlzdCwKKwkJCSAgICAgICZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwl9CisJcmV0dXJuIGxlbmd0aDsKKwordW5sb2NrOgorCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+d3JpdGVfaW9fbG9jayk7CitmYWlsOgorCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfd3JpdGVfY2IpOworCXJldHVybiByZXRzOworCit9CisKKy8qKgorICogaGVjaV9pb2N0bCAtIHRoZSBJT0NUTCBmdW5jdGlvbgorICoKKyAqIEBpbm9kZTogcG9pbnRlciB0byBpbm9kZSBzdHJ1Y3R1cmUKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKiBAY21kOiBpb2N0bCBjb21tYW5kCisgKiBAZGF0YTogcG9pbnRlciB0byBoZWNpIG1lc3NhZ2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MgLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IGhlY2lfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpbnQgcmV0cyA9IDA7CisJaW50IGlmX251bSA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkvKiBpbiB1c2VyIHNwYWNlICovCisJc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIF9fdXNlciAqdV9tc2c7CisJc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnOwkvKiBhbGwgaW4ga2VybmVsIG9uIHRoZSBzdGFjayAqLworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXY7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoIWhlY2lfZGV2aWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShoZWNpX2RldmljZSk7CisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSB8fCAoIWZpbGVfZXh0KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCS8qIGZpcnN0IGNvcHkgZnJvbSB1c2VyIGFsbCBkYXRhIG5lZWRlZCAqLworCXVfbXNnID0gKHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBfX3VzZXIgKilkYXRhOworCWlmIChjb3B5X2Zyb21fdXNlcigma19tc2csIHVfbXNnLCBzaXplb2Yoa19tc2cpKSkgeworCQlEQkcoImZpcnN0IGNvcHkgZnJvbSB1c2VyIGFsbCBkYXRhIG5lZWRlZCBmaWxsZWRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJREJHKCJ1c2VyIG1lc3NhZ2Ugc2l6ZSBpcyAlZFxuIiwga19tc2cuc2l6ZSk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSU9DVExfSEVDSV9HRVRfVkVSU0lPTjoKKwkJREJHKCI6IElPQ1RMX0hFQ0lfR0VUX1ZFUlNJT05cbiIpOworCQlyZXRzID0gaGVjaV9pb2N0bF9nZXRfdmVyc2lvbihkZXYsIGlmX251bSwgdV9tc2csIGtfbXNnLAorCQkJCQkgICAgICBmaWxlX2V4dCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NUTF9IRUNJX0NPTk5FQ1RfQ0xJRU5UOgorCQlEQkcoIjogSU9DVExfSEVDSV9DT05ORUNUX0NMSUVOVC5cbiIpOworCQlyZXRzID0gaGVjaV9pb2N0bF9jb25uZWN0X2NsaWVudChkZXYsIGlmX251bSwgdV9tc2csIGtfbXNnLAorCQkJCQkJIGZpbGUpOworCQlicmVhazsKKworCWNhc2UgSU9DVExfSEVDSV9XRDoKKwkJREJHKCI6IElPQ1RMX0hFQ0lfV0QuXG4iKTsKKwkJcmV0cyA9IGhlY2lfaW9jdGxfd2QoZGV2LCBpZl9udW0sIGtfbXNnLCBmaWxlX2V4dCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NUTF9IRUNJX0JZUEFTU19XRDoKKwkJREJHKCI6IElPQ1RMX0hFQ0lfQllQQVNTX1dELlxuIik7CisJCXJldHMgPSBoZWNpX2lvY3RsX2J5cGFzc193ZChkZXYsIGlmX251bSwga19tc2csIGZpbGVfZXh0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXRzID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGhlY2lfcG9sbCAtIHRoZSBwb2xsIGZ1bmN0aW9uCisgKgorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUKKyAqIEB3YWl0OiBwb2ludGVyIHRvIHBvbGxfdGFibGUgc3RydWN0dXJlCisgKgorICogcmV0dXJucyBwb2xsIG1hc2sKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBoZWNpX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJaW50IGlmX251bSA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldjsKKworCWlmICghaGVjaV9kZXZpY2UpCisJCXJldHVybiBtYXNrOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKGhlY2lfZGV2aWNlKTsKKworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikgfHwgKCFmaWxlX2V4dCkpCisJCXJldHVybiBtYXNrOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiBtYXNrOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlpZiAoZmlsZV9leHQgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQlwb2xsX3dhaXQoZmlsZSwgJmRldi0+aWFtdGhpZl9maWxlX2V4dC53YWl0LCB3YWl0KTsKKwkJc3Bpbl9sb2NrKCZkZXYtPmlhbXRoaWZfZmlsZV9leHQuZmlsZV9sb2NrKTsKKwkJaWYgKGRldi0+aWFtdGhpZl9zdGF0ZSA9PSBIRUNJX0lBTVRISUZfUkVBRF9DT01QTEVURQorCQkgICAgJiYgZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID09IGZpbGUpIHsKKwkJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCQkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCURCRygicnVuIG5leHQgcHRoaSBjYlxuIik7CisJCQlydW5fbmV4dF9pYW10aGlmX2NtZChkZXYpOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQl9CisJCXNwaW5fdW5sb2NrKCZkZXYtPmlhbXRoaWZfZmlsZV9leHQuZmlsZV9sb2NrKTsKKworCX0gZWxzZXsKKwkJcG9sbF93YWl0KGZpbGUsICZmaWxlX2V4dC0+dHhfd2FpdCwgd2FpdCk7CisJCXNwaW5fbG9jaygmZmlsZV9leHQtPndyaXRlX2lvX2xvY2spOworCQlpZiAoSEVDSV9XUklURV9DT01QTEVURSA9PSBmaWxlX2V4dC0+d3JpdGluZ19zdGF0ZSkKKwkJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+d3JpdGVfaW9fbG9jayk7CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaGVjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgZXJyID0gMDsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+cmVpbml0X3RzayAhPSBOVUxMKSB7CisJCWt0aHJlYWRfc3RvcChkZXYtPnJlaW5pdF90c2spOworCQlkZXYtPnJlaW5pdF90c2sgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkvKiBTdG9wIHdhdGNoZG9nIGlmIGV4aXN0cyAqLworCWRlbF90aW1lcl9zeW5jKCZkZXYtPndkX3RpbWVyKTsKKwlpZiAoZGV2LT53ZF9maWxlX2V4dC5zdGF0ZSA9PSBIRUNJX0ZJTEVfQ09OTkVDVEVECisJICAgICYmIGRldi0+d2RfdGltZW91dCkgeworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlnX3N1c193ZF90aW1lb3V0ID0gZGV2LT53ZF90aW1lb3V0OworCQlkZXYtPndkX3RpbWVvdXQgPSAwOworCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSwgaGVjaV9zdG9wX3dkX3BhcmFtcywKKwkJCQkJSEVDSV9XRF9QQVJBTVNfU0laRSk7CisJCWRldi0+c3RvcCA9IDE7CisJCWlmIChkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ICYmCisJCSAgICBmbG93X2N0cmxfY3JlZHMoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCkpIHsKKwkJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSAwOworCQkJaWYgKCFoZWNpX3NlbmRfd2QoZGV2KSkKKwkJCQlEQkcoInNlbmQgc3RvcCBXRCBmYWlsZWRcbiIpOworCQkJZWxzZQorCQkJCWZsb3dfY3RybF9yZWR1Y2UoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCk7CisKKwkJCWRldi0+d2RfcGVuZGluZyA9IDA7CisJCX0gZWxzZSB7CisJCQlkZXYtPndkX3BlbmRpbmcgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZGV2LT53ZF9zdG9wZWQgPSAwOworCisJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d2FpdF9zdG9wX3dkLAorCQkJCQkJICAgICAgIChkZXYtPndkX3N0b3BlZCksCisJCQkJCQkgICAgICAgMTAgKiBIWik7CisJCWlmICghZGV2LT53ZF9zdG9wZWQpCisJCQlEQkcoInN0b3Agd2QgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CisJCWVsc2UgeworCQkJREJHKCJzdG9wIHdkIGNvbXBsZXRlICVkLlxuIiwgZXJyKTsKKwkJCWVyciA9IDA7CisJCX0KKwl9CisJLyogU2V0IG5ldyBoZWNpIHN0YXRlICovCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlID09IEhFQ0lfRU5BQkxFRCB8fAorCSAgICBkZXYtPmhlY2lfc3RhdGUgPT0gSEVDSV9SRUNPVkVSSU5HX0ZST01fUkVTRVQpIHsKKwkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9QT1dFUl9ET1dOOworCQloZWNpX3Jlc2V0KGRldiwgMCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaGVjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldjsKKwlpbnQgZXJyID0gMDsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiByZXF1ZXN0IGFuZCBlbmFibGUgaW50ZXJydXB0ICAgKi8KKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGhlY2lfaXNyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQloZWNpX2RyaXZlcl9uYW1lLCBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBSZXF1ZXN0X2lycSBmYWlsdXJlLiBpcnEgPSAlZCBcbiIsCisJCSAgICAgICBwZGV2LT5pcnEpOworCQlyZXR1cm4gZXJyOworCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9QT1dFUl9VUDsKKwloZWNpX3Jlc2V0KGRldiwgMSk7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJLyogU3RhcnQgd2F0Y2hkb2cgaWYgc3RvcHBlZCBpbiBzdXNwZW5kICovCisJaWYgKGdfc3VzX3dkX3RpbWVvdXQgIT0gMCkgeworCQlkZXYtPndkX3RpbWVvdXQgPSBnX3N1c193ZF90aW1lb3V0OworCisJCW1lbWNweShkZXYtPndkX2RhdGEsIGhlY2lfc3RhcnRfd2RfcGFyYW1zLAorCQkJCQlIRUNJX1dEX1BBUkFNU19TSVpFKTsKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSArIEhFQ0lfV0RfUEFSQU1TX1NJWkUsCisJCSAgICAgICAmZGV2LT53ZF90aW1lb3V0LCBzaXplb2YoX191MTYpKTsKKwkJZGV2LT53ZF9kdWVfY291bnRlciA9IDE7CisKKwkJaWYgKGRldi0+d2RfdGltZW91dCkKKwkJCW1vZF90aW1lcigmZGV2LT53ZF90aW1lciwgamlmZmllcyk7CisKKwkJZ19zdXNfd2RfdGltZW91dCA9IDA7CisJfQorCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWwoUikgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CitNT0RVTEVfVkVSU0lPTihIRUNJX0RSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfdmVyc2lvbi5oIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV92ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwN2FhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfdmVyc2lvbi5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKyNpZm5kZWYgSEVDSV9WRVJTSU9OX0gKKyNkZWZpbmUgSEVDSV9WRVJTSU9OX0gKKworI2RlZmluZSBNQUpPUl9WRVJTSU9OICAgICAgICAgICAgICA1CisjZGVmaW5lIE1JTk9SX1ZFUlNJT04gICAgICAgICAgICAgIDAKKyNkZWZpbmUgUVVJQ0tfRklYX05VTUJFUiAgICAgICAgMAorI2RlZmluZSBWRVJfQlVJTEQgICAgICAgICAgICAgICAzMQorCisjZGVmaW5lIEhFQ0lfRFJWX1ZFUjEgX19zdHJpbmdpZnkoTUFKT1JfVkVSU0lPTikgIi4iIF9fc3RyaW5naWZ5KE1JTk9SX1ZFUlNJT04pCisjZGVmaW5lIEhFQ0lfRFJWX1ZFUjIgX19zdHJpbmdpZnkoUVVJQ0tfRklYX05VTUJFUikgIi4iIF9fc3RyaW5naWZ5KFZFUl9CVUlMRCkKKworI2RlZmluZSBIRUNJX0RSSVZFUl9WRVJTSU9OCUhFQ0lfRFJWX1ZFUjEgIi4iIEhFQ0lfRFJWX1ZFUjIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2ludGVycnVwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2QyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9pbnRlcnJ1cHQuYwpAQCAtMCwwICsxLDE1NTMgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisKKyNpbmNsdWRlICJoZWNpLmgiCisjaW5jbHVkZSAiaGVjaV9pbnRlcmZhY2UuaCIKKworLyoKKyAqICBpbnRlcnJ1cHQgZnVuY3Rpb24gcHJvdG90eXBlcworICovCitzdGF0aWMgdm9pZCBoZWNpX2JoX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgaGVjaV9iaF9yZWFkX2hhbmRsZXIoc3RydWN0IGlvX2hlY2lfbGlzdCAqY29tcGxldGVfbGlzdCwKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJX19zMzIgKnNsb3RzKTsKK3N0YXRpYyBpbnQgaGVjaV9iaF93cml0ZV9oYW5kbGVyKHN0cnVjdCBpb19oZWNpX2xpc3QgKmNvbXBsZXRlX2xpc3QsCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCV9fczMyICpzbG90cyk7CitzdGF0aWMgdm9pZCBoZWNpX2JoX3JlYWRfYnVzX21lc3NhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHIpOworc3RhdGljIGludCBoZWNpX2JoX3JlYWRfcHRoaV9tZXNzYWdlKHN0cnVjdCBpb19oZWNpX2xpc3QgKmNvbXBsZXRlX2xpc3QsCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyKTsKK3N0YXRpYyBpbnQgaGVjaV9iaF9yZWFkX2NsaWVudF9tZXNzYWdlKHN0cnVjdCBpb19oZWNpX2xpc3QgKmNvbXBsZXRlX2xpc3QsCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyKTsKK3N0YXRpYyB2b2lkIGhlY2lfY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqY29ubmVjdF9yZXMpOworc3RhdGljIHZvaWQgaGVjaV9jbGllbnRfZGlzY29ubmVjdF9yZXNwb25zZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpkaXNjb25uZWN0X3Jlcyk7CitzdGF0aWMgdm9pZCBoZWNpX2NsaWVudF9mbG93X2NvbnRyb2xfcmVzcG9uc2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKmZsb3dfY29udHJvbCk7CitzdGF0aWMgdm9pZCBoZWNpX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICpkaXNjb25uZWN0X3JlcSk7CisKKworLyoqCisgKiBoZWNpX2lzcl9pbnRlcnJ1cHQgLSBUaGUgSVNSIG9mIHRoZSBIRUNJIGRldmljZQorICoKKyAqIEBpcnE6IFRoZSBpcnEgbnVtYmVyCisgKiBAZGV2X2lkOiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyBpcnFyZXR1cm5fdAorICovCitpcnFyZXR1cm5fdCBoZWNpX2lzcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWludCBlcnI7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqKSBkZXZfaWQ7CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisKKwlpZiAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfSVMpICE9IEhfSVMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWhlY2lfY3NyX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYpOworCisJLyoKKwkgKiBPdXIgZGV2aWNlIGludGVycnVwdGVkLCBzY2hlZHVsZSB3b3JrIHRoZSBoZWNpX2JoX2hhbmRsZXIKKwkgKiB0byBoYW5kbGUgdGhlIGludGVycnVwdCBwcm9jZXNzaW5nLiBUaGlzIG5lZWRzIHRvIGJlIGEKKwkgKiB3b3JrcXVldWUgaXRlbSBzaW5jZSB0aGUgaGFuZGxlciBjYW4gc2xlZXAuCisJICovCisJUFJFUEFSRV9XT1JLKCZkZXYtPndvcmssIGhlY2lfYmhfaGFuZGxlcik7CisJREJHKCJzY2hlZHVsZSB3b3JrIHRoZSBoZWNpX2JoX2hhbmRsZXIuXG4iKTsKKwllcnIgPSBzY2hlZHVsZV93b3JrKCZkZXYtPndvcmspOworCWlmICghZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogc2NoZWR1bGUgdGhlIGhlY2lfYmhfaGFuZGxlciIKKwkJICAgICAgICIgZmFpbGVkIGVycm9yPSV4XG4iLCBlcnIpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogX2hlY2lfY21wbCAtIHByb2Nlc3MgY29tcGxldGVkIG9wZXJhdGlvbi4KKyAqCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAcHJpdl9jYl9wb3M6IGNhbGxiYWNrIGJsb2NrLgorICovCitzdGF0aWMgdm9pZCBfaGVjaV9jbXBsKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQsCisJCQkJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MpCit7CisJaWYgKHByaXZfY2JfcG9zLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPT0gSEVDSV9XUklURSkgeworCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X2NiX3Bvcyk7CisJCURCRygiY29tcGxldGluZyB3cml0ZSBjYWxsIGJhY2suXG4iKTsKKwkJZmlsZV9leHQtPndyaXRpbmdfc3RhdGUgPSBIRUNJX1dSSVRFX0NPTVBMRVRFOworCQlpZiAoKCZmaWxlX2V4dC0+dHhfd2FpdCkgJiYKKwkJICAgIHdhaXRxdWV1ZV9hY3RpdmUoJmZpbGVfZXh0LT50eF93YWl0KSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmlsZV9leHQtPnR4X3dhaXQpOworCisJfSBlbHNlIGlmIChwcml2X2NiX3Bvcy0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID09IEhFQ0lfUkVBRAorCQkJCSYmIEhFQ0lfUkVBRElORyA9PSBmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSkgeworCQlEQkcoImNvbXBsZXRpbmcgcmVhZCBjYWxsIGJhY2sgaW5mb3JtYXRpb249ICVsdVxuIiwKKwkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pOworCQlmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSA9IEhFQ0lfUkVBRF9DT01QTEVURTsKKwkJaWYgKCgmZmlsZV9leHQtPnJ4X3dhaXQpICYmCisJCSAgICB3YWl0cXVldWVfYWN0aXZlKCZmaWxlX2V4dC0+cnhfd2FpdCkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZpbGVfZXh0LT5yeF93YWl0KTsKKworCX0KK30KKworLyoqCisgKiBfaGVjaV9jbXBsX2lhbXRoaWYgLSBwcm9jZXNzIGNvbXBsZXRlZCBpYW10aGlmIG9wZXJhdGlvbi4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyLgorICogQHByaXZfY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqLworc3RhdGljIHZvaWQgX2hlY2lfY21wbF9pYW10aGlmKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MpCit7CisJaWYgKGRldi0+aWFtdGhpZl9jYW5jZWxlZCAhPSAxKSB7CisJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9SRUFEX0NPTVBMRVRFOworCQlkZXYtPmlhbXRoaWZfc3RhbGxfdGltZXIgPSAwOworCQltZW1jcHkocHJpdl9jYl9wb3MtPnJlc3BvbnNlX2J1ZmZlci5kYXRhLAorCQkJCWRldi0+aWFtdGhpZl9tc2dfYnVmLAorCQkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4KTsKKwkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJJmRldi0+cHRoaV9yZWFkX2NvbXBsZXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJREJHKCJwdGhpIHJlYWQgY29tcGxldGVkLlxuIik7CisJfSBlbHNlIHsKKwkJcnVuX25leHRfaWFtdGhpZl9jbWQoZGV2KTsKKwl9CisJaWYgKCZkZXYtPmlhbXRoaWZfZmlsZV9leHQud2FpdCkgeworCQlEQkcoImNvbXBsZXRpbmcgcHRoaSBjYWxsIGJhY2suXG4iKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPmlhbXRoaWZfZmlsZV9leHQud2FpdCk7CisJfQorfQorLyoqCisgKiBoZWNpX2JoX2hhbmRsZXIgLSBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgSVNSIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0CisgKiBwcm9jZXNzaW5nLgorICoKKyAqIEB3b3JrOiBwb2ludGVyIHRvIHRoZSB3b3JrIHN0cnVjdHVyZQorICoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHNjaGVkdWxlIHdvcmsKKyAqLworc3RhdGljIHZvaWQgaGVjaV9iaF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlLCB3b3JrKTsKKwlzdHJ1Y3QgaW9faGVjaV9saXN0IGNvbXBsZXRlX2xpc3Q7CisJX19zMzIgc2xvdHM7CisJaW50IHJldHM7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqY2JfcG9zID0gTlVMTCwgKmNiX25leHQgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQ7CisJaW50IGJ1c19tZXNzYWdlX3JlY2VpdmVkID0gMDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKKworCURCRygiZnVuY3Rpb24gY2FsbGVkIGFmdGVyIElTUiB0byBoYW5kbGUgdGhlIGludGVycnVwdCBwcm9jZXNzaW5nLlxuIik7CisJLyogaW5pdGlhbGl6ZSBvdXIgY29tcGxldGUgbGlzdCAqLworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaGVjaV9pbml0aWFsaXplX2xpc3QoJmNvbXBsZXRlX2xpc3QsIGRldik7CisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCWRldi0+bWVfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBNRV9DU1JfSEEpOworCisJLyogY2hlY2sgaWYgTUUgd2FudHMgYSByZXNldCAqLworCWlmICgoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9SRFlfSFJBKSA9PSAwKQorCSAgICAmJiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfUkVTRVRJTkcpCisJICAgICYmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9JTklUSUFMSVpJTkcpKSB7CisJCURCRygiRlcgbm90IHJlYWR5LlxuIik7CisJCWhlY2lfcmVzZXQoZGV2LCAxKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm47CisJfQorCisJLyogIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3RhcnQgdGhlIGRldiAqLworCWlmICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SRFkpID09IDApIHsKKwkJaWYgKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgPT0gTUVfUkRZX0hSQSkgeworCQkJREJHKCJ3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBkZXYuXG4iKTsKKwkJCWRldi0+aG9zdF9od19zdGF0ZSB8PSAoSF9JRSB8IEhfSUcgfCBIX1JEWSk7CisJCQloZWNpX3NldF9jc3JfcmVnaXN0ZXIoZGV2KTsKKwkJCWlmIChkZXYtPmhlY2lfc3RhdGUgPT0gSEVDSV9JTklUSUFMSVpJTkcpIHsKKwkJCQlkZXYtPnJlY3ZkX21zZyA9IDE7CisJCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X3JlY3ZkX21zZyk7CisJCQkJcmV0dXJuOworCisJCQl9IGVsc2UgeworCQkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCQl0c2sgPSBrdGhyZWFkX3J1bihoZWNpX3Rhc2tfaW5pdGlhbGl6ZV9jbGllbnRzLAorCQkJCQkJICBkZXYsICJoZWNpX3JlaW5pdCIpOworCQkJCWlmIChJU19FUlIodHNrKSkgeworCQkJCQlpbnQgcmMgPSBQVFJfRVJSKHRzayk7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhlY2k6IFVuYWJsZSB0byIKKwkJCQkJInN0YXJ0IHRoZSBoZWNpIHRocmVhZDogJWRcbiIsIHJjKTsKKwkJCQl9CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJREJHKCJlbmFibGUgaW50ZXJydXB0IEZXIG5vdCByZWFkeS5cbiIpOworCQkJaGVjaV9jc3JfZW5hYmxlX2ludGVycnVwdHMoZGV2KTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkvKiBjaGVjayBzbG90cyBhdmFsYWJsZSBmb3IgcmVhZGluZyAqLworCXNsb3RzID0gY291bnRfZnVsbF9yZWFkX3Nsb3RzKGRldik7CisJREJHKCJzbG90cyA9JTA4eCAgZXh0cmFfd3JpdGVfaW5kZXggPSUwOHguXG4iLAorCQlzbG90cywgZGV2LT5leHRyYV93cml0ZV9pbmRleCk7CisJd2hpbGUgKChzbG90cyA+IDApICYmICghZGV2LT5leHRyYV93cml0ZV9pbmRleCkpIHsKKwkJREJHKCJzbG90cyA9JTA4eCAgZXh0cmFfd3JpdGVfaW5kZXggPSUwOHguXG4iLCBzbG90cywKKwkJCQlkZXYtPmV4dHJhX3dyaXRlX2luZGV4KTsKKwkJREJHKCJjYWxsIGhlY2lfYmhfcmVhZF9oYW5kbGVyLlxuIik7CisJCXJldHMgPSBoZWNpX2JoX3JlYWRfaGFuZGxlcigmY29tcGxldGVfbGlzdCwgZGV2LCAmc2xvdHMpOworCQlpZiAocmV0cyAhPSAwKQorCQkJZ290byBlbmQ7CisJfQorCXJldHMgPSBoZWNpX2JoX3dyaXRlX2hhbmRsZXIoJmNvbXBsZXRlX2xpc3QsIGRldiwgJnNsb3RzKTsKK2VuZDoKKwlEQkcoImVuZCBvZiBib3R0b20gaGFsZiBmdW5jdGlvbi5cbiIpOworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKwlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gaG9zdF9idWZmZXJfaXNfZW1wdHkoZGV2KTsKKworCWlmICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9JUykgPT0gSF9JUykgeworCQkvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLworCQloZWNpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMoZGV2KTsKKworCQlQUkVQQVJFX1dPUksoJmRldi0+d29yaywgaGVjaV9iaF9oYW5kbGVyKTsKKwkJREJHKCJzY2hlZHVsZSB3b3JrIHRoZSBoZWNpX2JoX2hhbmRsZXIuXG4iKTsKKwkJcmV0cyA9IHNjaGVkdWxlX3dvcmsoJmRldi0+d29yayk7CisJCWlmICghcmV0cykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBzY2hlZHVsZSB0aGUgaGVjaV9iaF9oYW5kbGVyIgorCQkJICAgICAgICIgZmFpbGVkIGVycm9yPSV4XG4iLCByZXRzKTsKKwkJfQorCX0gZWxzZSB7CisJCWhlY2lfY3NyX2VuYWJsZV9pbnRlcnJ1cHRzKGRldik7CisJfQorCisJaWYgKGRldi0+cmVjdmRfbXNnICYmIHdhaXRxdWV1ZV9hY3RpdmUoJmRldi0+d2FpdF9yZWN2ZF9tc2cpKSB7CisJCURCRygicmVjZWl2ZWQgd2FpdGluZyBidXMgbWVzc2FnZVxuIik7CisJCWJ1c19tZXNzYWdlX3JlY2VpdmVkID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChidXNfbWVzc2FnZV9yZWNlaXZlZCkgeworCQlEQkcoIndha2UgdXAgZGV2LT53YWl0X3JlY3ZkX21zZ1xuIik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X3JlY3ZkX21zZyk7CisJCWJ1c19tZXNzYWdlX3JlY2VpdmVkID0gMDsKKwl9CisJaWYgKChjb21wbGV0ZV9saXN0LnN0YXR1cyAhPSAwKQorCSAgICB8fCBsaXN0X2VtcHR5KCZjb21wbGV0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCkpCisJCXJldHVybjsKKworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNiX3BvcywgY2JfbmV4dCwKKwkJCSZjb21wbGV0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQlmaWxlX2V4dCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKiljYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJbGlzdF9kZWwoJmNiX3Bvcy0+Y2JfbGlzdCk7CisJCWlmIChmaWxlX2V4dCAhPSBOVUxMKSB7CisJCQlpZiAoZmlsZV9leHQgIT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQkJCURCRygiY29tcGxldGluZyBjYWxsIGJhY2suXG4iKTsKKwkJCQlfaGVjaV9jbXBsKGZpbGVfZXh0LCBjYl9wb3MpOworCQkJCWNiX3BvcyA9IE5VTEw7CisJCQl9IGVsc2UgaWYgKGZpbGVfZXh0ID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJCQlfaGVjaV9jbXBsX2lhbXRoaWYoZGV2LCBjYl9wb3MpOworCQkJfQorCQl9CisJfQorfQorCisKKy8qKgorICogaGVjaV9iaF9yZWFkX2hhbmRsZXIgLSBib3R0b20gaGFsZiByZWFkIHJvdXRpbmUgYWZ0ZXIgSVNSIHRvCisgKiBoYW5kbGUgdGhlIHJlYWQgcHJvY2Vzc2luZy4KKyAqCisgKiBAY21wbF9saXN0OiBBbiBpbnN0YW5jZSBvZiBvdXIgbGlzdCBzdHJ1Y3R1cmUKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBzbG90czogc2xvdHMgdG8gcmVhZC4KKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBoZWNpX2JoX3JlYWRfaGFuZGxlcihzdHJ1Y3QgaW9faGVjaV9saXN0ICpjbXBsX2xpc3QsCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCV9fczMyICpzbG90cykKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfbmV4dCA9IE5VTEw7CisKKwlpZiAoIWRldi0+cmRfbXNnX2hkcikgeworCQlkZXYtPnJkX21zZ19oZHIgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBNRV9DQl9SVyk7CisJCURCRygic2xvdHM9JTA4eC5cbiIsICpzbG90cyk7CisJCSgqc2xvdHMpLS07CisJCURCRygic2xvdHM9JTA4eC5cbiIsICpzbG90cyk7CisJfQorCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+cmRfbXNnX2hkcjsKKwlEQkcoImhlY2lfaGRyLT5sZW5ndGggPSVkXG4iLCBoZWNpX2hkci0+bGVuZ3RoKTsKKworCWlmICgoaGVjaV9oZHItPnJlc2VydmVkKSB8fCAhKGRldi0+cmRfbXNnX2hkcikpIHsKKwkJREJHKCJjb3JydXB0ZWQgbWVzc2FnZSBoZWFkZXIuXG4iKTsKKwkJcmV0ID0gLUVDT1JSVVBURURfTUVTU0FHRV9IRUFERVI7CisJCWdvdG8gZW5kOworCX0KKworCWlmICgoaGVjaV9oZHItPmhvc3RfYWRkcikgfHwgKGhlY2lfaGRyLT5tZV9hZGRyKSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlsZV9wb3MsIGZpbGVfbmV4dCwKKwkJCQkmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJCURCRygibGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIHJlYWQgaG9zdCIKKwkJCQkJIiBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWRcbiIsCisJCQkJCWZpbGVfcG9zLT5ob3N0X2NsaWVudF9pZCwKKwkJCQkJZmlsZV9wb3MtPm1lX2NsaWVudF9pZCk7CisJCQlpZiAoKGZpbGVfcG9zLT5ob3N0X2NsaWVudF9pZCA9PSBoZWNpX2hkci0+aG9zdF9hZGRyKQorCQkJICAgICYmIChmaWxlX3Bvcy0+bWVfY2xpZW50X2lkID09IGhlY2lfaGRyLT5tZV9hZGRyKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICgmZmlsZV9wb3MtPmxpbmsgPT0gJmRldi0+ZmlsZV9saXN0KSB7CisJCQlEQkcoImNvcnJ1cHRlZCBtZXNzYWdlIGhlYWRlclxuIik7CisJCQlyZXQgPSAtRUNPUlJVUFRFRF9NRVNTQUdFX0hFQURFUjsKKwkJCWdvdG8gZW5kOworCQl9CisJfQorCWlmICgoKCpzbG90cykgKiBzaXplb2YoX191MzIpKSA8IGhlY2lfaGRyLT5sZW5ndGgpIHsKKwkJREJHKCJ3ZSBjYW4ndCByZWFkIHRoZSBtZXNzYWdlIHNsb3RzPSUwOHguXG4iLCAqc2xvdHMpOworCQkvKiB3ZSBjYW4ndCByZWFkIHRoZSBtZXNzYWdlICovCisJCXJldCA9IC1FUkFOR0U7CisJCWdvdG8gZW5kOworCX0KKworCS8qIGRlY2lkZSB3aGVyZSB0byByZWFkIHRoZSBtZXNzYWdlIHRvbyAqLworCWlmICghaGVjaV9oZHItPmhvc3RfYWRkcikgeworCQlEQkcoImNhbGwgaGVjaV9iaF9yZWFkX2J1c19tZXNzYWdlLlxuIik7CisJCWhlY2lfYmhfcmVhZF9idXNfbWVzc2FnZShkZXYsIGhlY2lfaGRyKTsKKwkJREJHKCJlbmQgaGVjaV9iaF9yZWFkX2J1c19tZXNzYWdlLlxuIik7CisJfSBlbHNlIGlmICgoaGVjaV9oZHItPmhvc3RfYWRkciA9PSBkZXYtPmlhbXRoaWZfZmlsZV9leHQuaG9zdF9jbGllbnRfaWQpCisJCSAgICYmIChIRUNJX0ZJTEVfQ09OTkVDVEVEID09IGRldi0+aWFtdGhpZl9maWxlX2V4dC5zdGF0ZSkKKwkJICAgJiYgKGRldi0+aWFtdGhpZl9zdGF0ZSA9PSBIRUNJX0lBTVRISUZfUkVBRElORykpIHsKKwkJREJHKCJjYWxsIGhlY2lfYmhfcmVhZF9pYW10aGlmX21lc3NhZ2UuXG4iKTsKKwkJREJHKCJoZWNpX2hkci0+bGVuZ3RoID0lZFxuIiwgaGVjaV9oZHItPmxlbmd0aCk7CisJCXJldCA9IGhlY2lfYmhfcmVhZF9wdGhpX21lc3NhZ2UoY21wbF9saXN0LCBkZXYsIGhlY2lfaGRyKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBlbmQ7CisKKwl9IGVsc2UgeworCQlEQkcoImNhbGwgaGVjaV9iaF9yZWFkX2NsaWVudF9tZXNzYWdlLlxuIik7CisJCXJldCA9IGhlY2lfYmhfcmVhZF9jbGllbnRfbWVzc2FnZShjbXBsX2xpc3QsIGRldiwgaGVjaV9oZHIpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGVuZDsKKworCX0KKworCS8qIHJlc2V0IHRoZSBudW1iZXIgb2Ygc2xvdHMgYW5kIGhlYWRlciAqLworCSpzbG90cyA9IGNvdW50X2Z1bGxfcmVhZF9zbG90cyhkZXYpOworCWRldi0+cmRfbXNnX2hkciA9IDA7CisKKwlpZiAoKnNsb3RzID09IC1FU0xPVFNfT1ZFUkZMT1cpIHsKKwkJLyogb3ZlcmZsb3cgLSByZXNldCAqLworCQlEQkcoInJlc2V0aW5nIGR1ZSB0byBzbG90cyBvdmVyZmxvdy5cbiIpOworCQkvKiBzZXQgdGhlIGV2ZW50IHNpbmNlIG1lc3NhZ2UgaGFzIGJlZW4gcmVhZCAqLworCQlyZXQgPSAtRVJBTkdFOworCQlnb3RvIGVuZDsKKwl9CitlbmQ6CisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqIGhlY2lfYmhfcmVhZF9idXNfbWVzc2FnZSAtIGJvdHRvbSBoYWxmIHJlYWQgcm91dGluZSBhZnRlciBJU1IgdG8KKyAqIGhhbmRsZSB0aGUgcmVhZCBidXMgbWVzc2FnZSBjbWQgIHByb2Nlc3NpbmcuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGhlY2lfaGRyOiBoZWFkZXIgb2YgYnVzIG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgaGVjaV9iaF9yZWFkX2J1c19tZXNzYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyKQoreworCXN0cnVjdCBoZWNpX2J1c19tZXNzYWdlICpoZWNpX21zZzsKKwlzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXNwb25zZSAqdmVyc2lvbl9yZXM7CisJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqY29ubmVjdF9yZXM7CisJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqZGlzY29ubmVjdF9yZXM7CisJc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKmZsb3dfY29udHJvbDsKKwlzdHJ1Y3QgaGJtX3Byb3BzX3Jlc3BvbnNlICpwcm9wc19yZXM7CisJc3RydWN0IGhibV9ob3N0X2VudW1fcmVzcG9uc2UgKmVudW1fcmVzOworCXN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCAqZGlzY29ubmVjdF9yZXE7CisJc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCAqaF9zdG9wX3JlcTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwkvKiAgcmVhZCB0aGUgbWVzc2FnZSB0byBvdXIgYnVmZmVyICovCisJYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgZGV2LT5yZF9tc2dfYnVmOworCUJVR19PTihoZWNpX2hkci0+bGVuZ3RoID49IHNpemVvZihkZXYtPnJkX21zZ19idWYpKTsKKwloZWNpX3JlYWRfc2xvdHMoZGV2LCBidWZmZXIsIGhlY2lfaGRyLT5sZW5ndGgpOworCWhlY2lfbXNnID0gKHN0cnVjdCBoZWNpX2J1c19tZXNzYWdlICopIGJ1ZmZlcjsKKworCXN3aXRjaCAoKihfX3U4ICopIGhlY2lfbXNnKSB7CisJY2FzZSBIT1NUX1NUQVJUX1JFU19DTUQ6CisJCXZlcnNpb25fcmVzID0gKHN0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3Jlc3BvbnNlICopIGhlY2lfbXNnOworCQlpZiAodmVyc2lvbl9yZXMtPmhvc3RfdmVyc2lvbl9zdXBwb3J0ZWQpIHsKKwkJCWRldi0+dmVyc2lvbi5tYWpvcl92ZXJzaW9uID0gSEJNX01BSk9SX1ZFUlNJT047CisJCQlkZXYtPnZlcnNpb24ubWlub3JfdmVyc2lvbiA9IEhCTV9NSU5PUl9WRVJTSU9OOworCQl9IGVsc2UgeworCQkJZGV2LT52ZXJzaW9uID0gdmVyc2lvbl9yZXMtPm1lX21heF92ZXJzaW9uOworCQl9CisJCWRldi0+cmVjdmRfbXNnID0gMTsKKwkJREJHKCJob3N0IHN0YXJ0IHJlc3BvbnNlIG1lc3NhZ2UgcmVjZWl2ZWQuXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIENMSUVOVF9DT05ORUNUX1JFU19DTUQ6CisJCWNvbm5lY3RfcmVzID0KKwkJCShzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICopIGhlY2lfbXNnOworCQloZWNpX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlKGRldiwgY29ubmVjdF9yZXMpOworCQlEQkcoImNsaWVudCBjb25uZWN0IHJlc3BvbnNlIG1lc3NhZ2UgcmVjZWl2ZWQuXG4iKTsKKwkJd2FrZV91cCgmZGV2LT53YWl0X3JlY3ZkX21zZyk7CisJCWJyZWFrOworCisJY2FzZSBDTElFTlRfRElTQ09OTkVDVF9SRVNfQ01EOgorCQlkaXNjb25uZWN0X3JlcyA9CisJCQkoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqKSBoZWNpX21zZzsKKwkJaGVjaV9jbGllbnRfZGlzY29ubmVjdF9yZXNwb25zZShkZXYsCSBkaXNjb25uZWN0X3Jlcyk7CisJCURCRygiY2xpZW50IGRpc2Nvbm5lY3QgcmVzcG9uc2UgbWVzc2FnZSByZWNlaXZlZC5cbiIpOworCQl3YWtlX3VwKCZkZXYtPndhaXRfcmVjdmRfbXNnKTsKKwkJYnJlYWs7CisKKwljYXNlIEhFQ0lfRkxPV19DT05UUk9MX0NNRDoKKwkJZmxvd19jb250cm9sID0gKHN0cnVjdCBoYm1fZmxvd19jb250cm9sICopIGhlY2lfbXNnOworCQloZWNpX2NsaWVudF9mbG93X2NvbnRyb2xfcmVzcG9uc2UoZGV2LCBmbG93X2NvbnRyb2wpOworCQlEQkcoImNsaWVudCBmbG93IGNvbnRyb2wgcmVzcG9uc2UgbWVzc2FnZSByZWNlaXZlZC5cbiIpOworCQlicmVhazsKKworCWNhc2UgSE9TVF9DTElFTlRfUFJPUEVSVEVJU19SRVNfQ01EOgorCQlwcm9wc19yZXMgPSAoc3RydWN0IGhibV9wcm9wc19yZXNwb25zZSAqKSBoZWNpX21zZzsKKwkJaWYgKHByb3BzX3Jlcy0+c3RhdHVzICE9IDApIHsKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCA9PQorCQkJCQlwcm9wc19yZXMtPmFkZHJlc3MpIHsKKwkJCQlkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMgPQorCQkJCQlwcm9wc19yZXMtPmNsaWVudF9wcm9wZXJ0aWVzOworCQkJCWJyZWFrOworCQkJfQorCisJCX0KKwkJZGV2LT5yZWN2ZF9tc2cgPSAxOworCQlicmVhazsKKworCWNhc2UgSE9TVF9FTlVNX1JFU19DTUQ6CisJCWVudW1fcmVzID0gKHN0cnVjdCBoYm1faG9zdF9lbnVtX3Jlc3BvbnNlICopIGhlY2lfbXNnOworCQltZW1jcHkoZGV2LT5oZWNpX21lX2NsaWVudHMsIGVudW1fcmVzLT52YWxpZF9hZGRyZXNzZXMsIDMyKTsKKwkJZGV2LT5yZWN2ZF9tc2cgPSAxOworCQlicmVhazsKKworCWNhc2UgSE9TVF9TVE9QX1JFU19DTUQ6CisJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfRElTQUJMRUQ7CisJCURCRygicmVzZXRpbmcgYmVjYXVzZSBvZiBGVyBzdG9wIHJlc3BvbnNlLlxuIik7CisJCWhlY2lfcmVzZXQoZGV2LCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIENMSUVOVF9ESVNDT05ORUNUX1JFUV9DTUQ6CisJCS8qIHNlYXJjaCBmb3IgY2xpZW50ICovCisJCWRpc2Nvbm5lY3RfcmVxID0KKwkJCShzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKikgaGVjaV9tc2c7CisJCWhlY2lfY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdChkZXYsIGRpc2Nvbm5lY3RfcmVxKTsKKwkJYnJlYWs7CisKKwljYXNlIE1FX1NUT1BfUkVRX0NNRDoKKwkJLyogcHJlcGFyZSBzdG9wIHJlcXVlc3QgKi8KKwkJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT5leHRfbXNnX2J1ZlswXTsKKwkJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwkJaGVjaV9oZHItPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0KTsKKwkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisJCWhfc3RvcF9yZXEgPQorCQkJKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QgKikgJmRldi0+ZXh0X21zZ19idWZbMV07CisJCW1lbXNldChoX3N0b3BfcmVxLCAwLCBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCkpOworCQloX3N0b3BfcmVxLT5jbWQuY21kID0gSE9TVF9TVE9QX1JFUV9DTUQ7CisJCWhfc3RvcF9yZXEtPnJlYXNvbiA9IERSSVZFUl9TVE9QX1JFUVVFU1Q7CisJCWhfc3RvcF9yZXEtPnJlc2VydmVkWzBdID0gMDsKKwkJaF9zdG9wX3JlcS0+cmVzZXJ2ZWRbMV0gPSAwOworCQlkZXYtPmV4dHJhX3dyaXRlX2luZGV4ID0gMjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisKKwl9Cit9CisKKy8qKgorICogaGVjaV9iaF9yZWFkX3B0aGlfbWVzc2FnZSAtIGJvdHRvbSBoYWxmIHJlYWQgcm91dGluZSBhZnRlciBJU1IgdG8KKyAqIGhhbmRsZSB0aGUgcmVhZCBwdGhpIG1lc3NhZ2UgZGF0YSBwcm9jZXNzaW5nLgorICoKKyAqIEBjb21wbGV0ZV9saXN0OiBBbiBpbnN0YW5jZSBvZiBvdXIgbGlzdCBzdHJ1Y3R1cmUKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBoZWNpX2hkcjogaGVhZGVyIG9mIHB0aGkgbWVzc2FnZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhlY2lfYmhfcmVhZF9wdGhpX21lc3NhZ2Uoc3RydWN0IGlvX2hlY2lfbGlzdCAqY29tcGxldGVfbGlzdCwKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHIpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCUJVR19PTihoZWNpX2hkci0+bWVfYWRkciAhPSBkZXYtPmlhbXRoaWZfZmlsZV9leHQubWVfY2xpZW50X2lkKTsKKwlCVUdfT04oZGV2LT5pYW10aGlmX3N0YXRlICE9IEhFQ0lfSUFNVEhJRl9SRUFESU5HKTsKKworCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIChkZXYtPmlhbXRoaWZfbXNnX2J1ZiArCisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCk7CisJQlVHX09OKHNpemVvZihkZXYtPmlhbXRoaWZfbXNnX2J1ZikgPAorCQkJKGRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ICsgaGVjaV9oZHItPmxlbmd0aCkpOworCisJaGVjaV9yZWFkX3Nsb3RzKGRldiwgYnVmZmVyLCBoZWNpX2hkci0+bGVuZ3RoKTsKKworCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ICs9IGhlY2lfaGRyLT5sZW5ndGg7CisKKwlpZiAoIShoZWNpX2hkci0+bXNnX2NvbXBsZXRlKSkKKwkJcmV0dXJuIDA7CisKKwlEQkcoInB0aGlfbWVzc2FnZV9idWZmZXJfaW5kZXg9JWRcbiIsIGhlY2lfaGRyLT5sZW5ndGgpOworCURCRygiY29tcGxldGVkIHB0aGkgcmVhZC5cbiAiKTsKKwlpZiAoIWRldi0+aWFtdGhpZl9jdXJyZW50X2NiKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaXZfY2IgPSBkZXYtPmlhbXRoaWZfY3VycmVudF9jYjsKKwlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisKKwlmaWxlX2V4dCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKilwcml2X2NiLT5maWxlX3ByaXZhdGU7CisJaWYgKCFmaWxlX2V4dCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYtPmlhbXRoaWZfc3RhbGxfdGltZXIgPSAwOworCXByaXZfY2ItPmluZm9ybWF0aW9uID0JZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXg7CisJcHJpdl9jYi0+cmVhZF90aW1lID0gZ2V0X3NlY29uZHMoKTsKKwlpZiAoKGRldi0+aWFtdGhpZl9pb2N0bCkgJiYgKGZpbGVfZXh0ID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpKSB7CisJCS8qIGZvdW5kIHRoZSBpYW10aGlmIGNiICovCisJCURCRygiY29tcGxldGUgdGhlIHB0aGkgcmVhZCBjYi5cbiAiKTsKKwkJaWYgKCZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJCURCRygiYWRkIHRoZSBwdGhpIHJlYWQgY2IgdG8gY29tcGxldGUuXG4gIik7CisJCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJCSAgICAgICZjb21wbGV0ZV9saXN0LT5oZWNpX2NiLmNiX2xpc3QpOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIF9oZWNpX2JoX3N0YXRlX29rIC0gY2hlY2sgaWYgaGVjaSBoZWFkZXIgbWF0Y2hlcyBmaWxlIHByaXZhdGUgZGF0YQorICoKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICogQGhlY2lfaGRyOiBoZWFkZXIgb2YgaGVjaSBjbGllbnQgbWVzc2FnZQorICoKKyAqIHJldHVybnMgICE9MCBpZiBtYXRjaGVzLCAwIGlmIG5vIG1hdGNoLgorICovCitzdGF0aWMgaW50IF9oZWNpX2JoX3N0YXRlX29rKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQsCisJCQkJCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyKQoreworCXJldHVybiAoKGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCA9PSBoZWNpX2hkci0+aG9zdF9hZGRyKQorCQkmJiAoZmlsZV9leHQtPm1lX2NsaWVudF9pZCA9PSBoZWNpX2hkci0+bWVfYWRkcikKKwkJJiYgKGZpbGVfZXh0LT5zdGF0ZSA9PSBIRUNJX0ZJTEVfQ09OTkVDVEVEKQorCQkmJiAoSEVDSV9SRUFEX0NPTVBMRVRFICE9IGZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlKSk7Cit9CisKKy8qKgorICogaGVjaV9iaF9yZWFkX2NsaWVudF9tZXNzYWdlIC0gYm90dG9tIGhhbGYgcmVhZCByb3V0aW5lIGFmdGVyIElTUiB0bworICogaGFuZGxlIHRoZSByZWFkIGhlY2kgY2xpZW50IG1lc3NhZ2UgZGF0YSAgcHJvY2Vzc2luZy4KKyAqCisgKiBAY29tcGxldGVfbGlzdDogQW4gaW5zdGFuY2Ugb2Ygb3VyIGxpc3Qgc3RydWN0dXJlCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaGVjaV9oZHI6IGhlYWRlciBvZiBoZWNpIGNsaWVudCBtZXNzYWdlCisgKgorICogcmV0dXJucyAgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhlY2lfYmhfcmVhZF9jbGllbnRfbWVzc2FnZShzdHJ1Y3QgaW9faGVjaV9saXN0ICpjb21wbGV0ZV9saXN0LAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcikKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0OworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTCwgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyID0gTlVMTDsKKworCURCRygic3RhcnQgY2xpZW50IG1zZ1xuIik7CisJaWYgKCEoKGRldi0+cmVhZF9saXN0LnN0YXR1cyA9PSAwKSAmJgorCSAgICAgICFsaXN0X2VtcHR5KCZkZXYtPnJlYWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKSkKKwkJZ290byBxdWl0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkmZGV2LT5yZWFkX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCWZpbGVfZXh0ID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCWlmICgoZmlsZV9leHQgIT0gTlVMTCkgJiYKKwkJICAgIChfaGVjaV9iaF9zdGF0ZV9vayhmaWxlX2V4dCwgaGVjaV9oZHIpKSkgeworCQkJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJCWZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlID0gSEVDSV9SRUFESU5HOworCQkJYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikKKwkJCQkocHJpdl9jYl9wb3MtPnJlc3BvbnNlX2J1ZmZlci5kYXRhICsKKwkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pOworCQkJQlVHX09OKHByaXZfY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuc2l6ZSA8CisJCQkJCWhlY2lfaGRyLT5sZW5ndGggKworCQkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pOworCisJCQlpZiAocHJpdl9jYl9wb3MtPnJlc3BvbnNlX2J1ZmZlci5zaXplIDwKKwkJCQkJaGVjaV9oZHItPmxlbmd0aCArCisJCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbikgeworCQkJCURCRygibWVzc2FnZSBvdmVyZmxvdy5cbiIpOworCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJaWYgKGJ1ZmZlcikgeworCQkJCWhlY2lfcmVhZF9zbG90cyhkZXYsIGJ1ZmZlciwKKwkJCQkJCWhlY2lfaGRyLT5sZW5ndGgpOworCQkJfQorCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uICs9IGhlY2lfaGRyLT5sZW5ndGg7CisJCQlpZiAoaGVjaV9oZHItPm1zZ19jb21wbGV0ZSkgeworCQkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQkJCURCRygiY29tcGxldGVkIHJlYWQgaG9zdCBjbGllbnQgPSAlZCwiCisJCQkJCSJNRSBjbGllbnQgPSAlZCwgIgorCQkJCQkiZGF0YSBsZW5ndGggPSAlbHVcbiIsCisJCQkJCWZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCwKKwkJCQkJZmlsZV9leHQtPm1lX2NsaWVudF9pZCwKKwkJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKTsKKworCQkJCSoocHJpdl9jYl9wb3MtPnJlc3BvbnNlX2J1ZmZlci5kYXRhICsKKwkJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKSA9ICdcMCc7CisJCQkJREJHKCJwcml2X2NiX3Bvcy0+cmVzX2J1ZmZlciAtICVzXG4iLAorCQkJCQlwcml2X2NiX3Bvcy0+cmVzcG9uc2VfYnVmZmVyLmRhdGEpOworCQkJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmY29tcGxldGVfbGlzdC0+aGVjaV9jYi5jYl9saXN0KTsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCisJfQorCitxdWl0OgorCURCRygibWVzc2FnZSByZWFkXG4iKTsKKwlpZiAoIWJ1ZmZlcikgeworCQloZWNpX3JlYWRfc2xvdHMoZGV2LCAodW5zaWduZWQgY2hhciAqKSBkZXYtPnJkX21zZ19idWYsCisJCQkJCQloZWNpX2hkci0+bGVuZ3RoKTsKKwkJREJHKCJkaXNjYXJkaW5nIG1lc3NhZ2UsIGhlYWRlcj0lMDh4LlxuIiwKKwkJCQkqKF9fdTMyICopIGRldi0+cmRfbXNnX2J1Zik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2hlY2lfYmhfaWFtdGhpZl9yZWFkIC0gcHJlcGFyZSB0byByZWFkIGlhbXRoaWYgZGF0YS4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyLgorICogQHNsb3RzOiBmcmVlIHNsb3RzLgorICoKKyAqIHJldHVybnMgIDAsIE9LOyBvdGhlcndpc2UsIGVycm9yLgorICovCitzdGF0aWMgaW50IF9oZWNpX2JoX2lhbXRoaWZfcmVhZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAlfX3MzMiAqc2xvdHMpCit7CisKKwlpZiAoKCgqc2xvdHMpICogc2l6ZW9mKF9fdTMyKSkgPj0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKQorCQkJKyBzaXplb2Yoc3RydWN0IGhibV9mbG93X2NvbnRyb2wpKSkgeworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBoYm1fZmxvd19jb250cm9sKSArIDMpIC8gNDsKKwkJaWYgKCFoZWNpX3NlbmRfZmxvd19jb250cm9sKGRldiwgJmRldi0+aWFtdGhpZl9maWxlX2V4dCkpIHsKKwkJCURCRygiaWFtdGhpZiBmbG93IGNvbnRyb2wgZmFpbGVkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCURCRygiaWFtdGhpZiBmbG93IGNvbnRyb2wgc3VjY2Vzc1xuIik7CisJCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfUkVBRElORzsKKwkJCWRldi0+aWFtdGhpZl9mbG93X2NvbnRyb2xfcGVuZGluZyA9IDA7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCA9IDA7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplID0gMDsKKwkJCWRldi0+aWFtdGhpZl9zdGFsbF90aW1lciA9IElBTVRISUZfU1RBTExfVElNRVI7CisJCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gaG9zdF9idWZmZXJfaXNfZW1wdHkoZGV2KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVDT01QTEVURV9NRVNTQUdFOworCX0KK30KKworLyoqCisgKiBfaGVjaV9iaF9jbG9zZSAtIHByb2Nlc3MgY2xvc2UgcmVsYXRlZCBvcGVyYXRpb24uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlci4KKyAqIEBzbG90czogZnJlZSBzbG90cy4KKyAqIEBwcml2X2NiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAY21wbF9saXN0OiBjb21wbGV0ZSBsaXN0LgorICoKKyAqIHJldHVybnMgIDAsIE9LOyBvdGhlcndpc2UsIGVycm9yLgorICovCitzdGF0aWMgaW50IF9oZWNpX2JoX2Nsb3NlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCV9fczMyICpzbG90cywKKwkJCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zLAorCQkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCwKKwkJCXN0cnVjdCBpb19oZWNpX2xpc3QgKmNtcGxfbGlzdCkKK3sKKwlpZiAoKCpzbG90cyAqIHNpemVvZihfX3UzMikpID49IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCkpKSB7CisJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QpICsgMykgLyA0OworCisJCWlmICghaGVjaV9kaXNjb25uZWN0KGRldiwgZmlsZV9leHQpKSB7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiA9IDA7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJCSZjbXBsX2xpc3QtPmhlY2lfY2IuY2JfbGlzdCk7CisJCQlyZXR1cm4gLUVDT01QTEVURV9NRVNTQUdFOworCQl9IGVsc2UgeworCQkJZmlsZV9leHQtPnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RJTkc7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiA9IDA7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJCSZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQkJZmlsZV9leHQtPnRpbWVyX2NvdW50ID0gSEVDSV9DT05ORUNUX1RJTUVPVVQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiByZXR1cm4gdGhlIGNhbmNlbCByb3V0aW5lICovCisJCXJldHVybiAtRUNPUlJVUFRFRF9NRVNTQUdFX0hFQURFUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfaGVjaV9oYl9jbG9zZSAtIHByb2Nlc3MgcmVhZCByZWxhdGVkIG9wZXJhdGlvbi4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyLgorICogQHNsb3RzOiBmcmVlIHNsb3RzLgorICogQHByaXZfY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBjbXBsX2xpc3Q6IGNvbXBsZXRlIGxpc3QuCisgKgorICogcmV0dXJucyAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfaGVjaV9iaF9yZWFkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCV9fczMyICpzbG90cywKKwkJCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zLAorCQkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCwKKwkJCXN0cnVjdCBpb19oZWNpX2xpc3QgKmNtcGxfbGlzdCkKK3sKKwlpZiAoKCpzbG90cyAqIHNpemVvZihfX3UzMikpID49IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJc2l6ZW9mKHN0cnVjdCBoYm1fZmxvd19jb250cm9sKSkpIHsKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJc2l6ZW9mKHN0cnVjdCBoYm1fZmxvd19jb250cm9sKSArIDMpIC8gNDsKKwkJaWYgKCFoZWNpX3NlbmRfZmxvd19jb250cm9sKGRldiwgZmlsZV9leHQpKSB7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiA9IDA7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJCSZjbXBsX2xpc3QtPmhlY2lfY2IuY2JfbGlzdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkJJmRldi0+cmVhZF9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiByZXR1cm4gdGhlIGNhbmNlbCByb3V0aW5lICovCisJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCXJldHVybiAtRUNPUlJVUFRFRF9NRVNTQUdFX0hFQURFUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIF9oZWNpX2JoX2lvY3RsIC0gcHJvY2VzcyBpb2N0bCByZWxhdGVkIG9wZXJhdGlvbi4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyLgorICogQHNsb3RzOiBmcmVlIHNsb3RzLgorICogQHByaXZfY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBjbXBsX2xpc3Q6IGNvbXBsZXRlIGxpc3QuCisgKgorICogcmV0dXJucyAgMCwgT0s7IG90aGVyd2lzZSwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX2hlY2lfYmhfaW9jdGwoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwJX19zMzIgKnNsb3RzLAorCQkJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MsCisJCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0LAorCQkJc3RydWN0IGlvX2hlY2lfbGlzdCAqY21wbF9saXN0KQoreworCWlmICgoKnNsb3RzICogc2l6ZW9mKF9fdTMyKSkgPj0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0KSkpIHsKKwkJZmlsZV9leHQtPnN0YXRlID0gSEVDSV9GSUxFX0NPTk5FQ1RJTkc7CisJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QpICsgMykgLyA0OworCQlpZiAoIWhlY2lfY29ubmVjdChkZXYsIGZpbGVfZXh0KSkgeworCQkJZmlsZV9leHQtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gPSAwOworCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgeworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCSZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQkJZmlsZV9leHQtPnRpbWVyX2NvdW50ID0gSEVDSV9DT05ORUNUX1RJTUVPVVQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiByZXR1cm4gdGhlIGNhbmNlbCByb3V0aW5lICovCisJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCXJldHVybiAtRUNPUlJVUFRFRF9NRVNTQUdFX0hFQURFUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfaGVjaV9iaF9jbXBsIC0gcHJvY2VzcyBjb21wbGV0ZWQgYW5kIG5vLWlhbXRoaWYgb3BlcmF0aW9uLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKiBAcHJpdl9jYl9wb3M6IGNhbGxiYWNrIGJsb2NrLgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQGNtcGxfbGlzdDogY29tcGxldGUgbGlzdC4KKyAqCisgKiByZXR1cm5zICAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfaGVjaV9iaF9jbXBsKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCV9fczMyICpzbG90cywKKwkJCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zLAorCQkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCwKKwkJCXN0cnVjdCBpb19oZWNpX2xpc3QgKmNtcGxfbGlzdCkKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKworCWlmICgoKnNsb3RzICogc2l6ZW9mKF9fdTMyKSkgPj0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQkocHJpdl9jYl9wb3MtPnJlcXVlc3RfYnVmZmVyLnNpemUgLQorCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKSkpIHsKKwkJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCQloZWNpX2hkci0+aG9zdF9hZGRyID0gZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkOworCQloZWNpX2hkci0+bWVfYWRkciA9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLT5sZW5ndGggPSAoKHByaXZfY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplKSAtCisJCQkJKHByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbikpOworCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwkJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKwkJREJHKCJwcml2X2NiX3Bvcy0+cmVxdWVzdF9idWZmZXIuc2l6ZSA9JWQiCisJCQkiaGVjaV9oZHItPm1zZ19jb21wbGV0ZT0gJWRcbiIsCisJCQkJcHJpdl9jYl9wb3MtPnJlcXVlc3RfYnVmZmVyLnNpemUsCisJCQkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSk7CisJCURCRygicHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uICA9JWx1XG4iLAorCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbik7CisJCURCRygiaGVjaV9oZHItPmxlbmd0aCAgPSVkXG4iLAorCQkJCWhlY2lfaGRyLT5sZW5ndGgpOworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQkJaGVjaV9oZHItPmxlbmd0aCArIDMpIC8gNDsKKwkJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkodW5zaWduZWQgY2hhciAqKQorCQkJCShwcml2X2NiX3Bvcy0+cmVxdWVzdF9idWZmZXIuZGF0YSArCisJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKSwKKwkJCQloZWNpX2hkci0+bGVuZ3RoKSkgeworCQkJZmlsZV9leHQtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJJmNtcGxfbGlzdC0+aGVjaV9jYi5jYl9saXN0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgeworCQkJZmxvd19jdHJsX3JlZHVjZShkZXYsIGZpbGVfZXh0KTsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uICs9IGhlY2lfaGRyLT5sZW5ndGg7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJJmRldi0+d3JpdGVfd2FpdGluZ19saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCX0KKwl9IGVsc2UgaWYgKCpzbG90cyA9PSAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCkpIHsKKwkJLyogYnVmZmVyIGlzIHN0aWxsIGVtcHR5ICovCisJCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwkJaGVjaV9oZHItPmhvc3RfYWRkciA9IGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZDsKKwkJaGVjaV9oZHItPm1lX2FkZHIgPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkOworCQloZWNpX2hkci0+bGVuZ3RoID0KKwkJCSgqc2xvdHMgKiBzaXplb2YoX191MzIpKSAtIHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKTsKKwkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDA7CisJCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwkJKCpzbG90cykgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQkJaGVjaV9oZHItPmxlbmd0aCArIDMpIC8gNDsKKwkJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkJKHVuc2lnbmVkIGNoYXIgKikKKwkJCQkJKHByaXZfY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5kYXRhICsKKwkJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKSwKKwkJCQkJaGVjaV9oZHItPmxlbmd0aCkpIHsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAtRU5PREVWOworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCSZjbXBsX2xpc3QtPmhlY2lfY2IuY2JfbGlzdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfSBlbHNlIHsKKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiArPSBoZWNpX2hkci0+bGVuZ3RoOworCQkJREJHKCJwcml2X2NiX3Bvcy0+cmVxdWVzdF9idWZmZXIuc2l6ZSA9JWQiCisJCQkJCSIgaGVjaV9oZHItPm1zZ19jb21wbGV0ZT0gJWRcbiIsCisJCQkJCXByaXZfY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplLAorCQkJCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlKTsKKwkJCURCRygicHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uICA9JWx1XG4iLAorCQkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pOworCQkJREJHKCJoZWNpX2hkci0+bGVuZ3RoICA9JWRcbiIsIGhlY2lfaGRyLT5sZW5ndGgpOworCQl9CisJCXJldHVybiAtRUNPTVBMRVRFX01FU1NBR0U7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FQ09SUlVQVEVEX01FU1NBR0VfSEVBREVSOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9oZWNpX2JoX2NtcGxfaWFtdGhpZiAtIHByb2Nlc3MgY29tcGxldGVkIGlhbXRoaWYgb3BlcmF0aW9uLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKiBAcHJpdl9jYl9wb3M6IGNhbGxiYWNrIGJsb2NrLgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQGNtcGxfbGlzdDogY29tcGxldGUgbGlzdC4KKyAqCisgKiByZXR1cm5zICAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfaGVjaV9iaF9jbXBsX2lhbXRoaWYoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgX19zMzIgKnNsb3RzLAorCQkJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MsCisJCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0LAorCQkJc3RydWN0IGlvX2hlY2lfbGlzdCAqY21wbF9saXN0KQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCisJaWYgKCgqc2xvdHMgKiBzaXplb2YoX191MzIpKSA+PSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX3NpemUgLQorCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXgpKSB7CisJCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwkJaGVjaV9oZHItPmhvc3RfYWRkciA9IGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZDsKKwkJaGVjaV9oZHItPm1lX2FkZHIgPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkOworCQloZWNpX2hkci0+bGVuZ3RoID0gZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSAtCisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleDsKKwkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJCWhlY2lfaGRyLT5sZW5ndGggKyAzKSAvIDQ7CisKKwkJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkJKGRldi0+aWFtdGhpZl9tc2dfYnVmICsKKwkJCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXgpLAorCQkJCQloZWNpX2hkci0+bGVuZ3RoKSkgeworCQkJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0lETEU7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfSBlbHNlIHsKKwkJCWZsb3dfY3RybF9yZWR1Y2UoZGV2LCBmaWxlX2V4dCk7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArPSBoZWNpX2hkci0+bGVuZ3RoOworCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uID0gZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXg7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9GTE9XX0NPTlRST0w7CisJCQlkZXYtPmlhbXRoaWZfZmxvd19jb250cm9sX3BlbmRpbmcgPSAxOworCQkJLyogc2F2ZSBpYW10aGlmIGNiIHNlbnQgdG8gcHRoaSBjbGllbnQgKi8KKwkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gcHJpdl9jYl9wb3M7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJJmRldi0+d3JpdGVfd2FpdGluZ19saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisKKwkJfQorCX0gZWxzZSBpZiAoKnNsb3RzID09ICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSkgeworCQkJLyogYnVmZmVyIGlzIHN0aWxsIGVtcHR5ICovCisJCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwkJaGVjaV9oZHItPmhvc3RfYWRkciA9IGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZDsKKwkJaGVjaV9oZHItPm1lX2FkZHIgPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkOworCQloZWNpX2hkci0+bGVuZ3RoID0KKwkJCSgqc2xvdHMgKiBzaXplb2YoX191MzIpKSAtIHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKTsKKwkJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDA7CisJCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJCWhlY2lfaGRyLT5sZW5ndGggKyAzKSAvIDQ7CisKKwkJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkJKGRldi0+aWFtdGhpZl9tc2dfYnVmICsKKwkJCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXgpLAorCQkJCQloZWNpX2hkci0+bGVuZ3RoKSkgeworCQkJZmlsZV9leHQtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQl9IGVsc2UgeworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggKz0gaGVjaV9oZHItPmxlbmd0aDsKKwkJfQorCQlyZXR1cm4gLUVDT01QTEVURV9NRVNTQUdFOworCX0gZWxzZSB7CisJCXJldHVybiAtRUNPUlJVUFRFRF9NRVNTQUdFX0hFQURFUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoZWNpX2JoX3dyaXRlX2hhbmRsZXIgLSBib3R0b20gaGFsZiB3cml0ZSByb3V0aW5lIGFmdGVyCisgKiBJU1IgdG8gaGFuZGxlIHRoZSB3cml0ZSBwcm9jZXNzaW5nLgorICoKKyAqIEBjbXBsX2xpc3Q6IEFuIGluc3RhbmNlIG9mIG91ciBsaXN0IHN0cnVjdHVyZQorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQHNsb3RzOiBzbG90cyB0byB3cml0ZS4KKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBoZWNpX2JoX3dyaXRlX2hhbmRsZXIoc3RydWN0IGlvX2hlY2lfbGlzdCAqY21wbF9saXN0LAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlfX3MzMiAqc2xvdHMpCit7CisKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0OworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTCwgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisJc3RydWN0IGlvX2hlY2lfbGlzdCAqbGlzdDsKKwlpbnQgcmV0OworCisJaWYgKCFob3N0X2J1ZmZlcl9pc19lbXB0eShkZXYpKSB7CisJCURCRygiaG9zdCBidWZmZXIgaXMgbm90IGVtcHR5LlxuIik7CisJCXJldHVybiAwOworCX0KKwlkZXYtPndyaXRlX2hhbmcgPSAtMTsKKwkqc2xvdHMgPSBjb3VudF9lbXB0eV93cml0ZV9zbG90cyhkZXYpOworCS8qIGNvbXBsZXRlIGFsbCB3YWl0aW5nIGZvciB3cml0ZSBDQiAqLworCURCRygiY29tcGxldGUgYWxsIHdhaXRpbmcgZm9yIHdyaXRlIGNiLlxuIik7CisKKwlsaXN0ID0gJmRldi0+d3JpdGVfd2FpdGluZ19saXN0OworCWlmICgobGlzdC0+c3RhdHVzID09IDApCisJICAgICYmICFsaXN0X2VtcHR5KCZsaXN0LT5oZWNpX2NiLmNiX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJCSZsaXN0LT5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWZpbGVfZXh0ID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCQkJaWYgKGZpbGVfZXh0ICE9IE5VTEwpIHsKKwkJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCWlmICgoSEVDSV9XUklUSU5HID09IGZpbGVfZXh0LT53cml0aW5nX3N0YXRlKSAmJgorCQkJCQkocHJpdl9jYl9wb3MtPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9PQorCQkJCQkJSEVDSV9XUklUSU5HKSAmJgorCQkJCQkoZmlsZV9leHQgIT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkpIHsKKwkJCQkJREJHKCJIRUNJIFdSSVRFIENPTVBMRVRFXG4iKTsKKwkJCQkJZmlsZV9leHQtPndyaXRpbmdfc3RhdGUgPQorCQkJCQkJSEVDSV9XUklURV9DT01QTEVURTsKKwkJCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJCQkmY21wbF9saXN0LT5oZWNpX2NiLmNiX2xpc3QpOworCQkJCX0KKwkJCQlpZiAoZmlsZV9leHQgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQkJCQlEQkcoImNoZWNrIGlhbXRoaWYgZmxvdyBjb250cm9sLlxuIik7CisJCQkJCWlmIChkZXYtPmlhbXRoaWZfZmxvd19jb250cm9sX3BlbmRpbmcpIHsKKwkJCQkJCXJldCA9IF9oZWNpX2JoX2lhbXRoaWZfcmVhZChkZXYsCisJCQkJCQkJCQlzbG90cyk7CisJCQkJCQlpZiAocmV0ICE9IDApCisJCQkJCQkJcmV0dXJuIHJldDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQl9CisJfQorCisJaWYgKChkZXYtPnN0b3ApICYmICghZGV2LT53ZF9wZW5kaW5nKSkgeworCQlkZXYtPndkX3N0b3BlZCA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X3N0b3Bfd2QpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGV2LT5leHRyYV93cml0ZV9pbmRleCAhPSAwKSB7CisJCURCRygiZXh0cmFfd3JpdGVfaW5kZXggPSVkLlxuIiwJZGV2LT5leHRyYV93cml0ZV9pbmRleCk7CisJCWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsCisJCQkJKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+ZXh0X21zZ19idWZbMF0sCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgJmRldi0+ZXh0X21zZ19idWZbMV0sCisJCQkJKGRldi0+ZXh0cmFfd3JpdGVfaW5kZXggLSAxKSAqIHNpemVvZihfX3UzMikpOworCQkqc2xvdHMgLT0gZGV2LT5leHRyYV93cml0ZV9pbmRleDsKKwkJZGV2LT5leHRyYV93cml0ZV9pbmRleCA9IDA7CisJfQorCWlmIChkZXYtPmhlY2lfc3RhdGUgPT0gSEVDSV9FTkFCTEVEKSB7CisJCWlmICgoZGV2LT53ZF9wZW5kaW5nKQorCQkgICAgJiYgZmxvd19jdHJsX2NyZWRzKGRldiwgJmRldi0+d2RfZmlsZV9leHQpKSB7CisJCQlpZiAoIWhlY2lfc2VuZF93ZChkZXYpKQorCQkJCURCRygid2Qgc2VuZCBmYWlsZWQuXG4iKTsKKwkJCWVsc2UKKwkJCQlmbG93X2N0cmxfcmVkdWNlKGRldiwgJmRldi0+d2RfZmlsZV9leHQpOworCisJCQlkZXYtPndkX3BlbmRpbmcgPSAwOworCisJCQlpZiAoZGV2LT53ZF90aW1lb3V0ICE9IDApIHsKKwkJCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQkJCSBIRUNJX1NUQVJUX1dEX0RBVEFfU0laRSArIDMpIC8gNDsKKwkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMjsKKwkJCX0gZWxzZSB7CisJCQkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJCQkgSEVDSV9XRF9QQVJBTVNfU0laRSArIDMpIC8gNDsKKwkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKwkJCX0KKworCQl9CisJfQorCWlmIChkZXYtPnN0b3ApCisJCXJldHVybiB+RU5PREVWOworCisJLyogY29tcGxldGUgY29udHJvbCB3cml0ZSBsaXN0IENCICovCisJaWYgKGRldi0+Y3RybF93cl9saXN0LnN0YXR1cyA9PSAwKSB7CisJCS8qIGNvbXBsZXRlIGNvbnRyb2wgd3JpdGUgbGlzdCBDQiAqLworCQlEQkcoImNvbXBsZXRlIGNvbnRyb2wgd3JpdGUgbGlzdCBjYi5cbiIpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCQkmZGV2LT5jdHJsX3dyX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlmaWxlX2V4dCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCQkJaWYgKGZpbGVfZXh0ID09IE5VTEwpIHsKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQkJc3dpdGNoIChwcml2X2NiX3Bvcy0+bWFqb3JfZmlsZV9vcGVyYXRpb25zKSB7CisJCQljYXNlIEhFQ0lfQ0xPU0U6CisJCQkJLyogc2VuZCBkaXNjb25uZWN0IG1lc3NhZ2UgKi8KKwkJCQlyZXQgPSBfaGVjaV9iaF9jbG9zZShkZXYsIHNsb3RzLAorCQkJCQkJICAgICBwcml2X2NiX3BvcywKKwkJCQkJCSAgICAgZmlsZV9leHQsIGNtcGxfbGlzdCk7CisJCQkJaWYgKHJldCAhPSAwKQorCQkJCQlyZXR1cm4gcmV0OworCisJCQkJYnJlYWs7CisJCQljYXNlIEhFQ0lfUkVBRDoKKwkJCQkvKiBzZW5kIGZsb3cgY29udHJvbCBtZXNzYWdlICovCisJCQkJcmV0ID0gX2hlY2lfYmhfcmVhZChkZXYsIHNsb3RzLAorCQkJCQkJICAgIHByaXZfY2JfcG9zLAorCQkJCQkJICAgIGZpbGVfZXh0LCBjbXBsX2xpc3QpOworCQkJCWlmIChyZXQgIT0gMCkKKwkJCQkJcmV0dXJuIHJldDsKKworCQkJCWJyZWFrOworCQkJY2FzZSBIRUNJX0lPQ1RMOgorCQkJCS8qIGNvbm5lY3QgbWVzc2FnZSAqLworCQkJCWlmICghb3RoZXJfY2xpZW50X2lzX2Nvbm5lY3RpbmcoZGV2LCBmaWxlX2V4dCkpCisJCQkJCWNvbnRpbnVlOworCQkJCXJldCA9IF9oZWNpX2JoX2lvY3RsKGRldiwgc2xvdHMsCisJCQkJCQkgICAgIHByaXZfY2JfcG9zLAorCQkJCQkJICAgICBmaWxlX2V4dCwgY21wbF9saXN0KTsKKwkJCQlpZiAocmV0ICE9IDApCisJCQkJCXJldHVybiByZXQ7CisKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlCVUcoKTsKKwkJCX0KKworCQl9CisJfQorCS8qIGNvbXBsZXRlICB3cml0ZSBsaXN0IENCICovCisJaWYgKChkZXYtPndyaXRlX2xpc3Quc3RhdHVzID09IDApCisJICAgICYmICFsaXN0X2VtcHR5KCZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkgeworCQlEQkcoImNvbXBsZXRlIHdyaXRlIGxpc3QgY2IuXG4iKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkJJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWZpbGVfZXh0ID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCisJCQlpZiAoZmlsZV9leHQgIT0gTlVMTCkgeworCQkJCWlmIChmaWxlX2V4dCAhPSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCQkJCWlmICghZmxvd19jdHJsX2NyZWRzKGRldiwgZmlsZV9leHQpKSB7CisJCQkJCQlEQkcoIk5vIGZsb3cgY29udHJvbCIKKwkJCQkJCSAgICAiIGNyZWRlbnRpYWxzIGZvciBjbGllbnQiCisJCQkJCQkgICAgIiAlZCwgbm90IHNlbmRpbmcuXG4iLAorCQkJCQkJICAgIGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlyZXQgPSBfaGVjaV9iaF9jbXBsKGRldiwgc2xvdHMsCisJCQkJCQkJICAgIHByaXZfY2JfcG9zLAorCQkJCQkJCSAgICBmaWxlX2V4dCwKKwkJCQkJCQkgICAgY21wbF9saXN0KTsKKwkJCQkJaWYgKHJldCAhPSAwKQorCQkJCQkJcmV0dXJuIHJldDsKKworCQkJCX0gZWxzZSBpZiAoZmlsZV9leHQgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQkJCQkvKiBJQU1USElGIElPQ1RMICovCisJCQkJCURCRygiY29tcGxldGUgcHRoaSB3cml0ZSBjYi5cbiIpOworCQkJCQlpZiAoIWZsb3dfY3RybF9jcmVkcyhkZXYsIGZpbGVfZXh0KSkgeworCQkJCQkJREJHKCJObyBmbG93IGNvbnRyb2wiCisJCQkJCQkgICAgIiBjcmVkZW50aWFscyBmb3IgcHRoaSIKKwkJCQkJCSAgICAiIGNsaWVudCAlZC5cbiIsCisJCQkJCQkgICAgZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXJldCA9IF9oZWNpX2JoX2NtcGxfaWFtdGhpZihkZXYsIHNsb3RzLAorCQkJCQkJCQkgICBwcml2X2NiX3BvcywKKwkJCQkJCQkJICAgZmlsZV9leHQsCisJCQkJCQkJCSAgIGNtcGxfbGlzdCk7CisJCQkJCWlmIChyZXQgIT0gMCkKKwkJCQkJCXJldHVybiByZXQ7CisKKwkJCQl9CisJCQl9CisKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIGlzX3RyZWF0X3NwZWNpYWxseV9jbGllbnQgIC0gY2hlY2sgaWYgdGhlIG1lc3NhZ2UgYmVsb25nCisgKiB0byB0aGUgZmlsZSBwcml2YXRlIGRhdGEuCisgKgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKiBAcnM6IGNvbm5lY3QgcmVzcG9uc2UgYnVzIG1lc3NhZ2UKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBpc190cmVhdF9zcGVjaWFsbHlfY2xpZW50KHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQsCisJCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKnJzKQoreworCWludCByZXQgPSAwOworCisJaWYgKChmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgPT0gcnMtPmhvc3RfYWRkcikgJiYKKwkgICAgKGZpbGVfZXh0LT5tZV9jbGllbnRfaWQgPT0gcnMtPm1lX2FkZHIpKSB7CisJCWlmIChycy0+c3RhdHVzID09IDApIHsKKwkJCURCRygiY2xpZW50IGNvbm5lY3Qgc3RhdHVzID0gMHglMDh4LlxuIiwgcnMtPnN0YXR1cyk7CisJCQlmaWxlX2V4dC0+c3RhdGUgPSBIRUNJX0ZJTEVfQ09OTkVDVEVEOworCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCX0gZWxzZSB7CisJCQlEQkcoImNsaWVudCBjb25uZWN0IHN0YXR1cyA9IDB4JTA4eC5cbiIsIHJzLT5zdGF0dXMpOworCQkJZmlsZV9leHQtPnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAtRU5PREVWOworCQl9CisJCXJldCA9IDE7CisJfQorCURCRygiY2xpZW50IHN0YXRlID0gJWQuXG4iLCBmaWxlX2V4dC0+c3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaGVjaV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAgLSBjb25uZWN0IHJlc3BvbnNlIGJoIHJvdXRpbmUKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAcnM6IGNvbm5lY3QgcmVzcG9uc2UgYnVzIG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgaGVjaV9jbGllbnRfY29ubmVjdF9yZXNwb25zZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpycykKK3sKKworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQ7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMLCAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKworCS8qIGlmIFdEIG9yIGlhbXRoaWYgY2xpZW50IHRyZWF0IHNwZWNpYWxseSAqLworCisJaWYgKChpc190cmVhdF9zcGVjaWFsbHlfY2xpZW50KCYoZGV2LT53ZF9maWxlX2V4dCksIHJzKSkgfHwKKwkgICAgKGlzX3RyZWF0X3NwZWNpYWxseV9jbGllbnQoJihkZXYtPmlhbXRoaWZfZmlsZV9leHQpLCBycykpKQorCQlyZXR1cm47CisKKwlpZiAoZGV2LT5jdHJsX3JkX2xpc3Quc3RhdHVzID09IDAKKwkgICAgJiYgIWxpc3RfZW1wdHkoJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuY2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlmaWxlX2V4dCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJCWlmIChmaWxlX2V4dCA9PSBOVUxMKSB7CisJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoSEVDSV9JT0NUTCA9PSBwcml2X2NiX3Bvcy0+bWFqb3JfZmlsZV9vcGVyYXRpb25zKSB7CisJCQkJaWYgKGlzX3RyZWF0X3NwZWNpYWxseV9jbGllbnQoZmlsZV9leHQsIHJzKSkgeworCQkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJCQkJZmlsZV9leHQtPnRpbWVyX2NvdW50ID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIGhlY2lfY2xpZW50X2Rpc2Nvbm5lY3RfcmVzcG9uc2UgIC0gZGlzY29ubmVjdCByZXNwb25zZSBiaCByb3V0aW5lCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQHJzOiBkaXNjb25uZWN0IHJlc3BvbnNlIGJ1cyBtZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfY2xpZW50X2Rpc2Nvbm5lY3RfcmVzcG9uc2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqcnMpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEwsICpwcml2X2NiX25leHQgPSBOVUxMOworCisJaWYgKGRldi0+Y3RybF9yZF9saXN0LnN0YXR1cyA9PSAwCisJICAgICYmICFsaXN0X2VtcHR5KCZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJCSZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWZpbGVfZXh0ID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisKKwkJCWlmIChmaWxlX2V4dCA9PSBOVUxMKSB7CisJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCURCRygibGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIGluIGN0cmxfcmRfbGlzdC5cbiIpOworCQkJaWYgKChmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgPT0gcnMtPmhvc3RfYWRkcikgJiYKKwkJCQkoZmlsZV9leHQtPm1lX2NsaWVudF9pZCA9PSBycy0+bWVfYWRkcikpIHsKKworCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJaWYgKHJzLT5zdGF0dXMgPT0gMCkgeworCQkJCQlmaWxlX2V4dC0+c3RhdGUgPQorCQkJCQkgICAgSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKwkJCQl9CisKKwkJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJCQlmaWxlX2V4dC0+dGltZXJfY291bnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIHNhbWVfZmxvd19hZGRyIC0gdGVsbCB0aGV5IGhhdmUgc2FtZSBhZGRyZXNzLgorICoKKyAqIEBmaWxlOiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQGZsb3c6IGZsb3cgY29udHJvbC4KKyAqCisgKiByZXR1cm5zICAhPTAsIHNhbWU7IDAsbm90LgorICovCitzdGF0aWMgaW50IHNhbWVfZmxvd19hZGRyKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZSwKKwkJCQkJc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKmZsb3cpCit7CisJcmV0dXJuICgoZmlsZS0+aG9zdF9jbGllbnRfaWQgPT0gZmxvdy0+aG9zdF9hZGRyKQorCQkmJiAoZmlsZS0+bWVfY2xpZW50X2lkID09IGZsb3ctPm1lX2FkZHIpKTsKK30KKworLyoqCisgKiBhZGRfc2luZ2xlX2Zsb3dfY3JlZHMgLSBhZGQgc2luZ2xlIGJ1ZmZlciBjcmVkZW50aWFscy4KKyAqCisgKiBAZmlsZTogcHJpdmF0ZSBkYXRhIG90IHRoZSBmaWxlIG9iamVjdC4KKyAqIEBmbG93OiBmbG93IGNvbnRyb2wuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9zaW5nbGVfZmxvd19jcmVkcyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKmZsb3cpCit7CisJc3RydWN0IGhlY2lfbWVfY2xpZW50ICpjbGllbnQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJY2xpZW50ID0gJmRldi0+bWVfY2xpZW50c1tpXTsKKwkJaWYgKChjbGllbnQgIT0gTlVMTCkgJiYKKwkJICAgIChmbG93LT5tZV9hZGRyID09IGNsaWVudC0+Y2xpZW50X2lkKSkgeworCQkJaWYgKGNsaWVudC0+cHJvcHMuc2luZ2xlX3JlY3ZfYnVmICE9IDApIHsKKwkJCQljbGllbnQtPmZsb3dfY3RybF9jcmVkcysrOworCQkJCURCRygicmVjdiBmbG93IGN0cmwgbXNnIE1FICVkIChzaW5nbGUpLlxuIiwKKwkJCQkgICAgZmxvdy0+bWVfYWRkcik7CisJCQkJREJHKCJmbG93IGNvbnRyb2wgY3JlZGVudGlhbHM9JWQuXG4iLAorCQkJCSAgICBjbGllbnQtPmZsb3dfY3RybF9jcmVkcyk7CisJCQl9IGVsc2UgeworCQkJCUJVRygpOwkvKiBlcnJvciBpbiBmbG93IGNvbnRyb2wgKi8KKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBoZWNpX2NsaWVudF9mbG93X2NvbnRyb2xfcmVzcG9uc2UgIC0gZmxvdyBjb250cm9sIHJlc3BvbnNlIGJoIHJvdXRpbmUKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmxvd19jb250cm9sOiBmbG93IGNvbnRyb2wgcmVzcG9uc2UgYnVzIG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgaGVjaV9jbGllbnRfZmxvd19jb250cm9sX3Jlc3BvbnNlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoYm1fZmxvd19jb250cm9sICpmbG93X2NvbnRyb2wpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX25leHQgPSBOVUxMOworCisJaWYgKGZsb3dfY29udHJvbC0+aG9zdF9hZGRyID09IDApIHsKKwkJLyogc2luZ2xlIHJlY2VpdmUgYnVmZmVyICovCisJCWFkZF9zaW5nbGVfZmxvd19jcmVkcyhkZXYsIGZsb3dfY29udHJvbCk7CisJfSBlbHNlIHsKKwkJLyogbm9ybWFsIGNvbm5lY3Rpb24gKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpbGVfcG9zLCBmaWxlX25leHQsCisJCQkJJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCQlEQkcoImxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSBpbiBmaWxlX2xpc3RcbiIpOworCisJCQlEQkcoImZpbGVfZXh0IG9mIGhvc3QgY2xpZW50ICVkIE1FIGNsaWVudCAlZC5cbiIsCisJCQkgICAgZmlsZV9wb3MtPmhvc3RfY2xpZW50X2lkLAorCQkJICAgIGZpbGVfcG9zLT5tZV9jbGllbnRfaWQpOworCQkJREJHKCJmbG93IGN0cmwgbXNnIGZvciBob3N0ICVkIE1FICVkLlxuIiwKKwkJCSAgICBmbG93X2NvbnRyb2wtPmhvc3RfYWRkciwKKwkJCSAgICBmbG93X2NvbnRyb2wtPm1lX2FkZHIpOworCQkJaWYgKHNhbWVfZmxvd19hZGRyKGZpbGVfcG9zLCBmbG93X2NvbnRyb2wpKSB7CisJCQkJREJHKCJyZWN2IGN0cmwgbXNnIGZvciBob3N0ICAlZCBNRSAlZC5cbiIsCisJCQkJICAgIGZsb3dfY29udHJvbC0+aG9zdF9hZGRyLAorCQkJCSAgICBmbG93X2NvbnRyb2wtPm1lX2FkZHIpOworCQkJCWZpbGVfcG9zLT5mbG93X2N0cmxfY3JlZHMrKzsKKwkJCQlEQkcoImZsb3cgY29udHJvbCBjcmVkZW50aWFscz0lZC5cbiIsCisJCQkJICAgIGZpbGVfcG9zLT5mbG93X2N0cmxfY3JlZHMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIHNhbWVfZGlzY29ubl9hZGRyIC0gdGVsbCB0aGV5IGhhdmUgc2FtZSBhZGRyZXNzCisgKgorICogQGZpbGU6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAZGlzY29ubjogZGlzY29ubmVjdGlvbiByZXF1ZXN0LgorICoKKyAqIHJldHVybnMgIT0wLCBzYW1lOyAwLG5vdC4KKyAqLworc3RhdGljIGludCBzYW1lX2Rpc2Nvbm5fYWRkcihzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGUsCisJCQkgICAgIHN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCAqZGlzY29ubikKK3sKKwlyZXR1cm4gKChmaWxlLT5ob3N0X2NsaWVudF9pZCA9PSBkaXNjb25uLT5ob3N0X2FkZHIpCisJCSYmIChmaWxlLT5tZV9jbGllbnRfaWQgPT0gZGlzY29ubi0+bWVfYWRkcikpOworfQorCisvKioKKyAqIGhlY2lfY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCAgLSBkaXNjb25uZWN0IHJlcXVlc3QgYmggcm91dGluZQorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIuCisgKiBAZGlzY29ubmVjdF9yZXE6IGRpc2Nvbm5lY3QgcmVxdWVzdCBidXMgbWVzc2FnZS4KKyAqLworc3RhdGljIHZvaWQgaGVjaV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCAqZGlzY29ubmVjdF9yZXEpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqZGlzY29ubmVjdF9yZXM7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX25leHQgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpbGVfcG9zLCBmaWxlX25leHQsICZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQlpZiAoc2FtZV9kaXNjb25uX2FkZHIoZmlsZV9wb3MsIGRpc2Nvbm5lY3RfcmVxKSkgeworCQkJREJHKCJkaXNjb25uZWN0IHJlcXVlc3QgaG9zdCBjbGllbnQgJWQgTUUgY2xpZW50ICVkLlxuIiwKKwkJCQkJZGlzY29ubmVjdF9yZXEtPmhvc3RfYWRkciwKKwkJCQkJZGlzY29ubmVjdF9yZXEtPm1lX2FkZHIpOworCQkJZmlsZV9wb3MtPnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKwkJCWZpbGVfcG9zLT50aW1lcl9jb3VudCA9IDA7CisJCQlpZiAoZmlsZV9wb3MgPT0gJmRldi0+d2RfZmlsZV9leHQpIHsKKwkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKwkJCQlkZXYtPndkX3BlbmRpbmcgPSAwOworCQkJfSBlbHNlIGlmIChmaWxlX3BvcyA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KQorCQkJCWRldi0+aWFtdGhpZl90aW1lciA9IDA7CisKKwkJCS8qIHByZXBhcmUgZGlzY29ubmVjdCByZXNwb25zZSAqLworCQkJaGVjaV9oZHIgPQorCQkJCShzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPmV4dF9tc2dfYnVmWzBdOworCQkJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJCQloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJCQloZWNpX2hkci0+bGVuZ3RoID0KKwkJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSk7CisJCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwkJCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwkJCWRpc2Nvbm5lY3RfcmVzID0KKwkJCQkoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqKQorCQkJCSZkZXYtPmV4dF9tc2dfYnVmWzFdOworCQkJZGlzY29ubmVjdF9yZXMtPmhvc3RfYWRkciA9IGZpbGVfcG9zLT5ob3N0X2NsaWVudF9pZDsKKwkJCWRpc2Nvbm5lY3RfcmVzLT5tZV9hZGRyID0gZmlsZV9wb3MtPm1lX2NsaWVudF9pZDsKKwkJCSooX191OCAqKSAoJmRpc2Nvbm5lY3RfcmVzLT5jbWQpID0KKwkJCQlDTElFTlRfRElTQ09OTkVDVF9SRVNfQ01EOworCQkJZGlzY29ubmVjdF9yZXMtPnN0YXR1cyA9IDA7CisJCQlkZXYtPmV4dHJhX3dyaXRlX2luZGV4ID0gMjsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKioKKyAqIGhlY2lfdGltZXIgLSB0aW1lciBmdW5jdGlvbi4KKyAqCisgKiBAZGF0YTogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRpbWVyIGludGVycnVwdCB3b3JrCisgKi8KK3ZvaWQgaGVjaV93ZF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqKSBkYXRhOworCisJREJHKCJzZW5kIHdhdGNoZG9nLlxuIik7CisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQltb2RfdGltZXIoJmRldi0+d2RfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybjsKKwl9CisJaWYgKGRldi0+d2RfZmlsZV9leHQuc3RhdGUgIT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkgeworCQltb2RfdGltZXIoJmRldi0+d2RfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybjsKKwl9CisJLyogV2F0Y2hkb2cgKi8KKwlpZiAoKGRldi0+d2RfZHVlX2NvdW50ZXIgIT0gMCkgJiYgKGRldi0+d2RfYnlwYXNzID09IDApKSB7CisJCWlmICgtLWRldi0+d2RfZHVlX2NvdW50ZXIgPT0gMCkgeworCQkJaWYgKGRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgJiYKKwkJCSAgICBmbG93X2N0cmxfY3JlZHMoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCkpIHsKKwkJCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJCQlpZiAoIWhlY2lfc2VuZF93ZChkZXYpKSB7CisJCQkJCURCRygid2Qgc2VuZCBmYWlsZWQuXG4iKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmbG93X2N0cmxfcmVkdWNlKGRldiwKKwkJCQkJCQkgJmRldi0+d2RfZmlsZV9leHQpOworCQkJCX0KKworCQkJCWlmIChkZXYtPndkX3RpbWVvdXQgIT0gMCkKKwkJCQkJZGV2LT53ZF9kdWVfY291bnRlciA9IDI7CisJCQkJZWxzZQorCQkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKworCQkJfSBlbHNlCisJCQkJZGV2LT53ZF9wZW5kaW5nID0gMTsKKworCQl9CisJfQorCWlmIChkZXYtPmlhbXRoaWZfc3RhbGxfdGltZXIgIT0gMCkgeworCQlpZiAoLS1kZXYtPmlhbXRoaWZfc3RhbGxfdGltZXIgPT0gMCkgeworCQkJREJHKCJyZXNldGluZyBiZWNhdXNlIG9mIGhhbmcgdG8gUFRISS5cbiIpOworCQkJaGVjaV9yZXNldChkZXYsIDEpOworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSA9IDA7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCA9IDA7CisJCQlkZXYtPmlhbXRoaWZfY2FuY2VsZWQgPSAwOworCQkJZGV2LT5pYW10aGlmX2lvY3RsID0gMTsKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9JRExFOworCQkJZGV2LT5pYW10aGlmX3RpbWVyID0gMDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCQkJaWYgKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiKQorCQkJCWhlY2lfZnJlZV9jYl9wcml2YXRlKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiKTsKKworCQkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCWRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9IE5VTEw7CisJCQlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisJCQlydW5fbmV4dF9pYW10aGlmX2NtZChkZXYpOworCQl9CisJfQorCW1vZF90aW1lcigmZGV2LT53ZF90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaW9faGVjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaW9faGVjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTQ0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9pb19oZWNpLmMKQEAgLTAsMCArMSw4NDcgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJoZWNpX2RhdGFfc3RydWN0dXJlcy5oIgorI2luY2x1ZGUgImhlY2kuaCIKKyNpbmNsdWRlICJoZWNpX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImhlY2lfdmVyc2lvbi5oIgorCisKKy8qKgorICogaGVjaV9pb2N0bF9nZXRfdmVyc2lvbiAtIHRoZSBnZXQgZHJpdmVyIHZlcnNpb24gSU9DVEwgZnVuY3Rpb24KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaWZfbnVtOiAgbWlub3IgbnVtYmVyCisgKiBAKnVfbXNnOiBwb2ludGVyIHRvIHVzZXIgZGF0YSBzdHJ1Y3QgaW4gdXNlciBzcGFjZQorICogQGtfbXNnOiBkYXRhIGluIGtlcm5lbCBvbiB0aGUgc3RhY2sKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgaGVjaV9pb2N0bF9nZXRfdmVyc2lvbihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkJICAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIF9fdXNlciAqdV9tc2csCisJCQkgICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2csCisJCQkgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCWludCByZXRzID0gMDsKKwlzdHJ1Y3QgaGVjaV9kcml2ZXJfdmVyc2lvbiAqdmVyc2lvbjsKKwlzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgcmVzX21zZzsKKworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikKKwkgICAgfHwgKCFmaWxlX2V4dCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGtfbXNnLnNpemUgPCAoc2l6ZW9mKHN0cnVjdCBoZWNpX2RyaXZlcl92ZXJzaW9uKSAtIDIpKSB7CisJCURCRygidXNlciBidWZmZXIgbGVzcyB0aGFuIGhlY2lfZHJpdmVyX3ZlcnNpb24uXG4iKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisKKwlyZXNfbXNnLmRhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGVjaV9kcml2ZXJfdmVyc2lvbiksIEdGUF9LRVJORUwpOworCWlmICghcmVzX21zZy5kYXRhKSB7CisJCURCRygiZmFpbGVkIGFsbG9jYXRpb24gcmVzcG9uc2UgYnVmZmVyIHNpemUgPSAlZC5cbiIsCisJCSAgICAoaW50KSBzaXplb2Yoc3RydWN0IGhlY2lfZHJpdmVyX3ZlcnNpb24pKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdmVyc2lvbiA9IChzdHJ1Y3QgaGVjaV9kcml2ZXJfdmVyc2lvbiAqKSByZXNfbXNnLmRhdGE7CisJdmVyc2lvbi0+bWFqb3IgPSBNQUpPUl9WRVJTSU9OOworCXZlcnNpb24tPm1pbm9yID0gTUlOT1JfVkVSU0lPTjsKKwl2ZXJzaW9uLT5ob3RmaXggPSBRVUlDS19GSVhfTlVNQkVSOworCXZlcnNpb24tPmJ1aWxkID0gVkVSX0JVSUxEOworCXJlc19tc2cuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGVjaV9kcml2ZXJfdmVyc2lvbik7CisJaWYgKGtfbXNnLnNpemUgPCBzaXplb2Yoc3RydWN0IGhlY2lfZHJpdmVyX3ZlcnNpb24pKQorCQlyZXNfbXNnLnNpemUgLT0gMjsKKworCXJldHMgPSBmaWxlX2V4dC0+c3RhdHVzOworCS8qIG5vdyBjb3B5IHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UgKi8KKwlpZiAoY29weV90b191c2VyKGtfbXNnLmRhdGEsIHJlc19tc2cuZGF0YSwgcmVzX21zZy5zaXplKSkgeworCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQorCWlmIChwdXRfdXNlcihyZXNfbXNnLnNpemUsICZ1X21zZy0+c2l6ZSkpIHsKKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gZW5kOworCX0KK2VuZDoKKwlrZnJlZShyZXNfbXNnLmRhdGEpOworCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGhlY2lfaW9jdGxfY29ubmVjdF9jbGllbnQgLSB0aGUgY29ubmVjdCB0byBmdyBjbGllbnQgSU9DVEwgZnVuY3Rpb24KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaWZfbnVtOiAgbWlub3IgbnVtYmVyCisgKiBAKnVfbXNnOiBwb2ludGVyIHRvIHVzZXIgZGF0YSBzdHJ1Y3QgaW4gdXNlciBzcGFjZQorICogQGtfbXNnOiBkYXRhIGluIGtlcm5lbCBvbiB0aGUgc3RhY2sKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgaGVjaV9pb2N0bF9jb25uZWN0X2NsaWVudChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkJICAgICAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIF9fdXNlciAqdV9tc2csCisJCQkgICAgICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2csCisJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0cyA9IDA7CisJc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIHJlcV9tc2csIHJlc19tc2c7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYiA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfbmV4dCA9IE5VTEw7CisJbG9uZyB0aW1lb3V0ID0gMTU7CS8qMTUgc2Vjb25kICovCisJX191OCBpOworCWludCBlcnIgPSAwOworCisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSB8fCAoIWZpbGUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZpbGVfZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmICghZmlsZV9leHQpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGtfbXNnLnNpemUgIT0gc2l6ZW9mKHN0cnVjdCBndWlkKSkgeworCQlEQkcoInVzZXIgYnVmZmVyIHNpemUgaXMgbm90IGVxdWFsIHRvIHNpemUgb2Ygc3RydWN0ICIKKwkJCQkiZ3VpZCgxNikuXG4iKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisKKwlpZiAoIWtfbXNnLmRhdGEpCisJCXJldHVybiAtRUlPOworCisJcmVxX21zZy5kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGd1aWQpLCBHRlBfS0VSTkVMKTsKKwlyZXNfbXNnLmRhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGVjaV9jbGllbnQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcmVzX21zZy5kYXRhKSB7CisJCURCRygiZmFpbGVkIGFsbG9jYXRpb24gcmVzcG9uc2UgYnVmZmVyIHNpemUgPSAlZC5cbiIsCisJCSAgICAoaW50KSBzaXplb2Yoc3RydWN0IGhlY2lfY2xpZW50KSk7CisJCWtmcmVlKHJlcV9tc2cuZGF0YSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoIXJlcV9tc2cuZGF0YSkgeworCQlEQkcoImZhaWxlZCBhbGxvY2F0aW9uIHJlcXVlc3QgYnVmZmVyIHNpemUgPSAlZC5cbiIsCisJCSAgICAoaW50KSBzaXplb2Yoc3RydWN0IGd1aWQpKTsKKwkJa2ZyZWUocmVzX21zZy5kYXRhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJlcV9tc2cuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ3VpZCk7CisJcmVzX21zZy5zaXplID0gc2l6ZW9mKHN0cnVjdCBoZWNpX2NsaWVudCk7CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIHRvIGtlcm5lbCBzcGFjZSAtCisJICogdXNlIGEgcG9pbnRlciBhbHJlYWR5IGNvcGllZCBpbnRvIGtlcm5lbCBzcGFjZQorCSAqLworCWlmIChjb3B5X2Zyb21fdXNlcihyZXFfbXNnLmRhdGEsIGtfbXNnLmRhdGEsIGtfbXNnLnNpemUpKSB7CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIGVuZDsKKwl9CisJLyogYnVmZmVyZWQgaW9jdGwgY2IgKi8KKwlwcml2X2NiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdl9jYikgeworCQlyZXRzID0gLUVOT01FTTsKKwkJZ290byBlbmQ7CisJfQorCUlOSVRfTElTVF9IRUFEKCZwcml2X2NiLT5jYl9saXN0KTsKKwlwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSA9IHJlc19tc2cuZGF0YTsKKwlwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuc2l6ZSA9IHJlc19tc2cuc2l6ZTsKKwlwcml2X2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhID0gcmVxX21zZy5kYXRhOworCXByaXZfY2ItPnJlcXVlc3RfYnVmZmVyLnNpemUgPSByZXFfbXNnLnNpemU7CisJcHJpdl9jYi0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID0gSEVDSV9JT0NUTDsKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWdvdG8gZW5kOworCX0KKwlpZiAoKGZpbGVfZXh0LT5zdGF0ZSAhPSBIRUNJX0ZJTEVfSU5JVElBTElaSU5HKSAmJgorCSAgICAoZmlsZV9leHQtPnN0YXRlICE9IEhFQ0lfRklMRV9ESVNDT05ORUNURUQpKSB7CisJCXJldHMgPSAtRUJVU1k7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZ290byBlbmQ7CisJfQorCisJLyogZmluZCBNRSBjbGllbnQgd2UncmUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKG1lbWNtcCgoc3RydWN0IGd1aWQgKilyZXFfbXNnLmRhdGEsCisJCQkgICAgJmRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5wcm90b2NvbF9uYW1lLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgZ3VpZCkpID09IDApIHsKKwkJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMuZml4ZWRfYWRkcmVzcyA9PSAwKSB7CisJCQkJZmlsZV9leHQtPm1lX2NsaWVudF9pZCA9CisJCQkJICAgIGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQ7CisJCQkJZmlsZV9leHQtPnN0YXRlID0gSEVDSV9GSUxFX0NPTk5FQ1RJTkc7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBpZiB3ZSdyZSBjb25uZWN0aW5nIHRvIFBUSEkgY2xpZW50IHNvIHdlIHdpbGwgdXNlIHRoZSBleGlzdAorCSAqIGNvbm5lY3Rpb24KKwkgKi8KKwlpZiAobWVtY21wKChzdHJ1Y3QgZ3VpZCAqKXJlcV9tc2cuZGF0YSwgJmhlY2lfcHRoaV9ndWlkLAorCQkJCXNpemVvZihzdHJ1Y3QgZ3VpZCkpID09IDApIHsKKwkJaWYgKGRldi0+aWFtdGhpZl9maWxlX2V4dC5zdGF0ZSAhPSBIRUNJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCWdvdG8gZW5kOworCQl9CisJCWRldi0+aGVjaV9ob3N0X2NsaWVudHNbZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkIC8gOF0gJj0KKwkJCX4oMSA8PCAoZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkICUgOCkpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlsZV9wb3MsCisJCSAgICBmaWxlX25leHQsICZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQkJaWYgKGhlY2lfZmVfc2FtZV9pZChmaWxlX2V4dCwgZmlsZV9wb3MpKSB7CisJCQkJREJHKCJyZW1vdmUgZmlsZSBwcml2YXRlIGRhdGEgbm9kZSBob3N0IgorCQkJCSAgICAiIGNsaWVudCA9ICVkLCBNRSBjbGllbnQgPSAlZC5cbiIsCisJCQkJICAgIGZpbGVfcG9zLT5ob3N0X2NsaWVudF9pZCwKKwkJCQkgICAgZmlsZV9wb3MtPm1lX2NsaWVudF9pZCk7CisJCQkJbGlzdF9kZWwoJmZpbGVfcG9zLT5saW5rKTsKKwkJCX0KKworCQl9CisJCURCRygiZnJlZSBmaWxlIHByaXZhdGUgZGF0YSBtZW1vcnkuXG4iKTsKKwkJa2ZyZWUoZmlsZV9leHQpOworCQlmaWxlX2V4dCA9IE5VTEw7CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQ7CisJCWNsaWVudCA9IChzdHJ1Y3QgaGVjaV9jbGllbnQgKikgcmVzX21zZy5kYXRhOworCQljbGllbnQtPm1heF9tc2dfbGVuZ3RoID0KKwkJCWRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aDsKKwkJY2xpZW50LT5wcm90b2NvbF92ZXJzaW9uID0KKwkJCWRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5wcm90b2NvbF92ZXJzaW9uOworCQlyZXRzID0gZGV2LT5pYW10aGlmX2ZpbGVfZXh0LnN0YXR1czsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJCS8qIG5vdyBjb3B5IHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UgKi8KKwkJaWYgKGNvcHlfdG9fdXNlcihrX21zZy5kYXRhLCByZXNfbXNnLmRhdGEsIHJlc19tc2cuc2l6ZSkpIHsKKwkJCXJldHMgPSAtRUZBVUxUOworCQkJZ290byBlbmQ7CisJCX0KKwkJaWYgKHB1dF91c2VyKHJlc19tc2cuc2l6ZSwgJnVfbXNnLT5zaXplKSkgeworCQkJcmV0cyA9IC1FRkFVTFQ7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlnb3RvIGVuZDsKKwl9CisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwlpZiAoZmlsZV9leHQtPnN0YXRlICE9IEhFQ0lfRklMRV9DT05ORUNUSU5HKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZ290byBlbmQ7CisJfQorCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwkvKiBwcmVwYXJlIHRoZSBvdXRwdXQgYnVmZmVyICovCisJY2xpZW50ID0gKHN0cnVjdCBoZWNpX2NsaWVudCAqKSByZXNfbXNnLmRhdGE7CisJY2xpZW50LT5tYXhfbXNnX2xlbmd0aCA9IGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aDsKKwljbGllbnQtPnByb3RvY29sX3ZlcnNpb24gPSBkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMucHJvdG9jb2xfdmVyc2lvbjsKKwlpZiAoZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eQorCSAgICAmJiAhb3RoZXJfY2xpZW50X2lzX2Nvbm5lY3RpbmcoZGV2LCBmaWxlX2V4dCkpIHsKKwkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCWlmICghaGVjaV9jb25uZWN0KGRldiwgZmlsZV9leHQpKSB7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCWdvdG8gZW5kOworCQl9IGVsc2UgeworCQkJZmlsZV9leHQtPnRpbWVyX2NvdW50ID0gSEVDSV9DT05ORUNUX1RJTUVPVVQ7CisJCQlwcml2X2NiLT5maWxlX3ByaXZhdGUgPSBmaWxlX2V4dDsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuCisJCQkJICAgICAgY2JfbGlzdCk7CisJCX0KKworCisJfSBlbHNlIHsKKwkJcHJpdl9jYi0+ZmlsZV9wcml2YXRlID0gZmlsZV9leHQ7CisJCURCRygiYWRkIGNvbm5lY3QgY2IgdG8gY29udHJvbCB3cml0ZSBsaXN0LlxuIik7CisJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkgICAgICAmZGV2LT5jdHJsX3dyX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWVyciA9IHdhaXRfZXZlbnRfdGltZW91dChkZXYtPndhaXRfcmVjdmRfbXNnLAorCQkJKEhFQ0lfRklMRV9DT05ORUNURUQgPT0gZmlsZV9leHQtPnN0YXRlCisJCQkgfHwgSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRCA9PSBmaWxlX2V4dC0+c3RhdGUpLAorCQkJdGltZW91dCAqIEhaKTsKKworCWlmIChIRUNJX0ZJTEVfQ09OTkVDVEVEID09IGZpbGVfZXh0LT5zdGF0ZSkgeworCQlEQkcoInN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gRlcgY2xpZW50LlxuIik7CisJCXJldHMgPSBmaWxlX2V4dC0+c3RhdHVzOworCQkvKiBub3cgY29weSB0aGUgZGF0YSB0byB1c2VyIHNwYWNlICovCisJCWlmIChjb3B5X3RvX3VzZXIoa19tc2cuZGF0YSwgcmVzX21zZy5kYXRhLCByZXNfbXNnLnNpemUpKSB7CisJCQlyZXRzID0gLUVGQVVMVDsKKwkJCWdvdG8gZW5kOworCQl9CisJCWlmIChwdXRfdXNlcihyZXNfbXNnLnNpemUsICZ1X21zZy0+c2l6ZSkpIHsKKwkJCXJldHMgPSAtRUZBVUxUOworCQkJZ290byBlbmQ7CisJCX0KKwkJZ290byBlbmQ7CisJfSBlbHNlIHsKKwkJREJHKCJmYWlsZWQgdG8gY29ubmVjdCB0byBGVyBjbGllbnQuZmlsZV9leHQtPnN0YXRlID0gJWQuXG4iLAorCQkgICAgZmlsZV9leHQtPnN0YXRlKTsKKwkJaWYgKCFlcnIpIHsKKwkJCURCRygid2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQgZmFpbGVkIG9uIGNsaWVudCIKKwkJCSAgICAiIGNvbm5lY3QgbWVzc2FnZSBmdyByZXNwb25zZSBtZXNzYWdlLlxuIik7CisJCX0KKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gcmVtb3ZlX2xpc3Q7CisJfQorCityZW1vdmVfbGlzdDoKKwlpZiAocHJpdl9jYikgeworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQloZWNpX2ZsdXNoX2xpc3QoJmRldi0+Y3RybF9yZF9saXN0LCBmaWxlX2V4dCk7CisJCWhlY2lfZmx1c2hfbGlzdCgmZGV2LT5jdHJsX3dyX2xpc3QsIGZpbGVfZXh0KTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCX0KK2VuZDoKKwlEQkcoImZyZWUgY29ubmVjdCBjYiBtZW1vcnkuIik7CisJa2ZyZWUocmVxX21zZy5kYXRhKTsKKwlrZnJlZShyZXNfbXNnLmRhdGEpOworCWtmcmVlKHByaXZfY2IpOworCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGhlY2lfaW9jdGxfd2QgIC0gdGhlIHdkIElPQ1RMIGZ1bmN0aW9uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGlmX251bTogIG1pbm9yIG51bWJlcgorICogQGtfbXNnOiBkYXRhIGluIGtlcm5lbCBvbiB0aGUgc3RhY2sKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgaGVjaV9pb2N0bF93ZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZywKKwkJICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCWludCByZXRzID0gMDsKKwlzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgcmVxX21zZzsJLyppbiBrZXJuZWwgb24gdGhlIHN0YWNrICovCisKKwlpZiAoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJaWYgKGtfbXNnLnNpemUgIT0gSEVDSV9XQVRDSERPR19EQVRBX1NJWkUpIHsKKwkJREJHKCJ1c2VyIGJ1ZmZlciBoYXMgaW52YWxpZCBzaXplLlxuIik7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCisJcmVxX21zZy5kYXRhID0ga21hbGxvYyhIRUNJX1dBVENIRE9HX0RBVEFfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXFfbXNnLmRhdGEpIHsKKwkJREJHKCJmYWlsZWQgYWxsb2NhdGlvbiByZXF1ZXN0IGJ1ZmZlciBzaXplID0gJWQuXG4iLAorCQkgICAgSEVDSV9XQVRDSERPR19EQVRBX1NJWkUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmVxX21zZy5zaXplID0gSEVDSV9XQVRDSERPR19EQVRBX1NJWkU7CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIHRvIGtlcm5lbCBzcGFjZSAtIHVzZSBhIHBvaW50ZXIgYWxyZWFkeQorCSAqIGNvcGllZCBpbnRvIGtlcm5lbCBzcGFjZQorCSAqLworCWlmIChjb3B5X2Zyb21fdXNlcihyZXFfbXNnLmRhdGEsIGtfbXNnLmRhdGEsIHJlcV9tc2cuc2l6ZSkpIHsKKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gZW5kOworCX0KKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWdvdG8gZW5kOworCX0KKworCWlmIChkZXYtPndkX2ZpbGVfZXh0LnN0YXRlICE9IEhFQ0lfRklMRV9DT05ORUNURUQpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZ290byBlbmQ7CisJfQorCWlmICghZGV2LT5hc2ZfbW9kZSkgeworCQlyZXRzID0gLUVJTzsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlnb3RvIGVuZDsKKwl9CisKKwltZW1jcHkoJmRldi0+d2RfZGF0YVtIRUNJX1dEX1BBUkFNU19TSVpFXSwgcmVxX21zZy5kYXRhLAorCSAgICAgICBIRUNJX1dBVENIRE9HX0RBVEFfU0laRSk7CisKKwlkZXYtPndkX3RpbWVvdXQgPSAocmVxX21zZy5kYXRhWzFdIDw8IDgpICsgcmVxX21zZy5kYXRhWzBdOworCWRldi0+d2RfcGVuZGluZyA9IDA7CisJZGV2LT53ZF9kdWVfY291bnRlciA9IDE7CS8qIG5leHQgdGltZXIgKi8KKwlpZiAoZGV2LT53ZF90aW1lb3V0ID09IDApIHsKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSwgaGVjaV9zdG9wX3dkX3BhcmFtcywKKwkJICAgICAgIEhFQ0lfV0RfUEFSQU1TX1NJWkUpOworCX0gZWxzZSB7CisJCW1lbWNweShkZXYtPndkX2RhdGEsIGhlY2lfc3RhcnRfd2RfcGFyYW1zLAorCQkgICAgICAgSEVDSV9XRF9QQVJBTVNfU0laRSk7CisJCW1vZF90aW1lcigmZGV2LT53ZF90aW1lciwgamlmZmllcyk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKK2VuZDoKKwlrZnJlZShyZXFfbXNnLmRhdGEpOworCXJldHVybiByZXRzOworfQorCisKKy8qKgorICogaGVjaV9pb2N0bF9ieXBhc3Nfd2QgIC0gdGhlIGJ5cGFzc193ZCBJT0NUTCBmdW5jdGlvbgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpZl9udW06ICBtaW5vciBudW1iZXIKKyAqIEBrX21zZzogZGF0YSBpbiBrZXJuZWwgb24gdGhlIHN0YWNrCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IGhlY2lfaW9jdGxfYnlwYXNzX3dkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCSAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnLAorCQkgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJX191OCBmbGFnID0gMDsKKwlpbnQgcmV0cyA9IDA7CisKKwlpZiAoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJaWYgKGtfbXNnLnNpemUgPCAxKSB7CisJCURCRygidXNlciBidWZmZXIgbGVzcyB0aGFuIEhFQ0lfV0FUQ0hET0dfREFUQV9TSVpFLlxuIik7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCWlmIChjb3B5X2Zyb21fdXNlcigmZmxhZywga19tc2cuZGF0YSwgMSkpIHsKKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gZW5kOworCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZmxhZyA9IGZsYWcgPyAoMSkgOiAoMCk7CisJZGV2LT53ZF9ieXBhc3MgPSBmbGFnOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKK2VuZDoKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBmaW5kX3B0aGlfcmVhZF9saXN0X2VudHJ5IC0gZmluZHMgYSBQVEhJbGlzdCBlbnRyeSBmb3IgY3VycmVudCBmaWxlCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zICAgcmV0dXJuZWQgYSBsaXN0IGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqZmluZF9wdGhpX3JlYWRfbGlzdF9lbnRyeSgKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dF90ZW1wOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX25leHQgPSBOVUxMOworCisJaWYgKChkZXYtPnB0aGlfcmVhZF9jb21wbGV0ZV9saXN0LnN0YXR1cyA9PSAwKSAmJgorCSAgICAhbGlzdF9lbXB0eSgmZGV2LT5wdGhpX3JlYWRfY29tcGxldGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkgICAgJmRldi0+cHRoaV9yZWFkX2NvbXBsZXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlmaWxlX2V4dF90ZW1wID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCQkJaWYgKChmaWxlX2V4dF90ZW1wICE9IE5VTEwpICYmCisJCQkgICAgKGZpbGVfZXh0X3RlbXAgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgJiYKKwkJCSAgICAocHJpdl9jYl9wb3MtPmZpbGVfb2JqZWN0ID09IGZpbGUpKQorCQkJCXJldHVybiBwcml2X2NiX3BvczsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBwdGhpX3JlYWQgLSByZWFkIGRhdGEgZnJvbSBwdGhpIGNsaWVudAorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpZl9udW06ICBtaW5vciBudW1iZXIKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgb2JqZWN0CisgKiBAKnVidWY6IHBvaW50ZXIgdG8gdXNlciBkYXRhIGluIHVzZXIgc3BhY2UKKyAqIEBsZW5ndGg6IGRhdGEgbGVuZ3RoIHRvIHJlYWQKKyAqIEBvZmZzZXQ6IGRhdGEgcmVhZCBvZmZzZXQKKyAqCisgKiByZXR1cm5zCisgKiAgcmV0dXJuZWQgZGF0YSBsZW5ndGggb24gc3VjY2VzcywKKyAqICB6ZXJvIGlmIG5vIGRhdGEgdG8gcmVhZCwKKyAqICBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICovCitpbnQgcHRoaV9yZWFkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sIHN0cnVjdCBmaWxlICpmaWxlLAorCSAgICAgIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlpbnQgcmV0cyA9IDA7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYiA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlfX3U4IGk7CisJdW5zaWduZWQgbG9uZyBjdXJydGltZSA9IGdldF9zZWNvbmRzKCk7CisKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgoZmlsZV9leHQgPT0gTlVMTCkgfHwgKGZpbGVfZXh0ICE9ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkID09CisJCSAgICBkZXYtPmlhbXRoaWZfZmlsZV9leHQubWVfY2xpZW50X2lkKQorCQkJYnJlYWs7CisJfQorCUJVR19PTihkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkICE9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCWlmICgoaSA9PSBkZXYtPm51bV9oZWNpX21lX2NsaWVudHMpCisJICAgIHx8IChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkICE9CisJCWRldi0+aWFtdGhpZl9maWxlX2V4dC5tZV9jbGllbnRfaWQpKSB7CisJCURCRygiUFRISSBjbGllbnQgbm90IGZvdW5kLlxuIik7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXByaXZfY2IgPSBmaW5kX3B0aGlfcmVhZF9saXN0X2VudHJ5KGRldiwgZmlsZSk7CisJaWYgKCFwcml2X2NiKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIDA7IC8qIE5vIG1vcmUgZGF0YSB0byByZWFkICovCisJfSBlbHNlIHsKKwkJaWYgKHByaXZfY2IgJiYKKwkJICAgIChjdXJydGltZSAtIHByaXZfY2ItPnJlYWRfdGltZSA+IElBTVRISUZfUkVBRF9USU1FUikpIHsKKwkJCS8qIDE1IHNlYyBmb3IgdGhlIG1lc3NhZ2UgaGFzIGV4cGlyZWQgKi8KKwkJCWxpc3RfZGVsKCZwcml2X2NiLT5jYl9saXN0KTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCXJldHMgPSAtRVRJTUVET1VUOworCQkJZ290byBmcmVlOworCQl9CisJCS8qIGlmIHRoZSB3aG9sZSBtZXNzYWdlIHdpbGwgZml0IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0ICovCisJCWlmICgocHJpdl9jYi0+aW5mb3JtYXRpb24gPj0gKm9mZnNldCkgICYmCisJCSAgICAobGVuZ3RoID49IChwcml2X2NiLT5pbmZvcm1hdGlvbiAtICpvZmZzZXQpKSkKKwkJCWxpc3RfZGVsKCZwcml2X2NiLT5jYl9saXN0KTsKKwkJZWxzZSBpZiAoKHByaXZfY2ItPmluZm9ybWF0aW9uID4gMCkgJiYKKwkJICAgIChwcml2X2NiLT5pbmZvcm1hdGlvbiA8PSAqb2Zmc2V0KSkgeworCQkJLyogZW5kIG9mIHRoZSBtZXNzYWdlIGhhcyBiZWVuIHJlYWNoZWQgKi8KKwkJCWxpc3RfZGVsKCZwcml2X2NiLT5jYl9saXN0KTsKKwkJCXJldHMgPSAwOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJZ290byBmcmVlOworCQl9CisJCS8qIGVsc2UgbWVhbnMgdGhhdCBub3QgZnVsbCBidWZmZXIgd2lsbCBiZSByZWFkIGFuZCBkbyBub3QKKwkJICogcmVtb3ZlIG1lc3NhZ2UgZnJvbSBkZWxldGlvbiBsaXN0CisJCSAqLworCX0KKwlEQkcoInB0aGkgcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyIHNpemUgLSAlZFxuIiwKKwkgICAgcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLnNpemUpOworCURCRygicHRoaSBwcml2X2NiLT5pbmZvcm1hdGlvbiAtICVsdVxuIiwKKwkgICAgcHJpdl9jYi0+aW5mb3JtYXRpb24pOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCS8qIGxlbmd0aCBpcyBiZWluZyB0dXJuY2F0ZWQgdG8gUEFHRV9TSVpFLCBob3dldmVyLAorCSAqIHRoZSBpbmZvcm1hdGlvbiBtYXkgYmUgbG9uZ2VyICovCisJbGVuZ3RoID0gbGVuZ3RoIDwgKHByaXZfY2ItPmluZm9ybWF0aW9uIC0gKm9mZnNldCkgPworCQkJbGVuZ3RoIDogKHByaXZfY2ItPmluZm9ybWF0aW9uIC0gKm9mZnNldCk7CisKKwlpZiAoY29weV90b191c2VyKHVidWYsCisJCQkgcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEgKyAqb2Zmc2V0LAorCQkJIGxlbmd0aCkpCisJCXJldHMgPSAtRUZBVUxUOworCWVsc2UgeworCQlyZXRzID0gbGVuZ3RoOworCQlpZiAoKCpvZmZzZXQgKyBsZW5ndGgpIDwgcHJpdl9jYi0+aW5mb3JtYXRpb24pIHsKKwkJCSpvZmZzZXQgKz0gbGVuZ3RoOworCQkJZ290byBvdXQ7CisJCX0KKwl9CitmcmVlOgorCURCRygiZnJlZSBwdGhpIGNiIG1lbW9yeS5cbiIpOworCSpvZmZzZXQgPSAwOworCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfY2IpOworb3V0OgorCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGhlY2lfc3RhcnRfcmVhZCAgLSB0aGUgc3RhcnQgcmVhZCBjbGllbnQgbWVzc2FnZSBmdW5jdGlvbi4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaWZfbnVtOiAgbWlub3IgbnVtYmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IGhlY2lfc3RhcnRfcmVhZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkgICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlpbnQgcmV0cyA9IDA7CisJX191OCBpOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IgPSBOVUxMOworCisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSB8fCAoIWZpbGVfZXh0KSkgeworCQlEQkcoInJlY2VpdmVkIHdyb25nIGZ1bmN0aW9uIGlucHV0IHBhcmFtLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZmlsZV9leHQtPnN0YXRlICE9IEhFQ0lfRklMRV9DT05ORUNURUQpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRU5BQkxFRCkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJREJHKCJjaGVjayBpZiByZWFkIGlzIHBlbmRpbmcuXG4iKTsKKwlpZiAoKGZpbGVfZXh0LT5yZWFkX3BlbmRpbmcpIHx8IChmaWxlX2V4dC0+cmVhZF9jYiAhPSBOVUxMKSkgeworCQlEQkcoInJlYWQgaXMgcGVuZGluZy5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlwcml2X2NiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdl9jYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlEQkcoImFsbG9jYXRpb24gY2FsbCBiYWNrIHN1Y2Nlc3NcbiIKKwkgICAgImhvc3QgY2xpZW50ID0gJWQsIE1FIGNsaWVudCA9ICVkXG4iLAorCSAgICBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQsIGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50czsgaSsrKSB7CisJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkID09IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpCisJCQlicmVhazsKKworCX0KKworCUJVR19PTihkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkICE9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCWlmIChpID09IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50cykgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2s7CisJfQorCisJcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLnNpemUgPSBkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGg7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCXByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhID0KKwkgICAga21hbGxvYyhwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSkgeworCQlyZXRzID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlEQkcoImFsbG9jYXRpb24gY2FsbCBiYWNrIGRhdGEgc3VjY2Vzcy5cbiIpOworCXByaXZfY2ItPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9IEhFQ0lfUkVBRDsKKwkvKiBtYWtlIHN1cmUgaW5mb3JtYXRpb24gaXMgemVybyBiZWZvcmUgd2Ugc3RhcnQgKi8KKwlwcml2X2NiLT5pbmZvcm1hdGlvbiA9IDA7CisJcHJpdl9jYi0+ZmlsZV9wcml2YXRlID0gKHZvaWQgKikgZmlsZV9leHQ7CisJZmlsZV9leHQtPnJlYWRfY2IgPSBwcml2X2NiOworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkpIHsKKwkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCWlmICghaGVjaV9zZW5kX2Zsb3dfY29udHJvbChkZXYsIGZpbGVfZXh0KSkgeworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlnb3RvIHVubG9jazsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmRldi0+cmVhZF9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCX0KKwl9IGVsc2UgeworCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJICAgICAgJmRldi0+Y3RybF93cl9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlyZXR1cm4gcmV0czsKK3VubG9jazoKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CitmYWlsOgorCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfY2IpOworCXJldHVybiByZXRzOworfQorCisvKioKKyAqIHB0aGlfd3JpdGUgLSB3cml0ZSBpYW10aGlmIGRhdGEgdG8gcHRoaSBjbGllbnQKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAcHJpdl9jYjogaGVjaSBjYWxsIGJhY2sgc3RydWN0CisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBwdGhpX3dyaXRlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJICAgICAgIHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IpCit7CisJaW50IHJldHMgPSAwOworCXN0cnVjdCBoZWNpX21zZ19oZHIgaGVjaV9oZHI7CisKKwlpZiAoKCFkZXYpIHx8ICghcHJpdl9jYikpCisJCXJldHVybiAtRU5PREVWOworCisJREJHKCJ3cml0ZSBkYXRhIHRvIHB0aGkgY2xpZW50LlxuIik7CisKKwlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfV1JJVElORzsKKwlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IHByaXZfY2I7CisJZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID0gcHJpdl9jYi0+ZmlsZV9vYmplY3Q7CisJZGV2LT5pYW10aGlmX2NhbmNlbGVkID0gMDsKKwlkZXYtPmlhbXRoaWZfaW9jdGwgPSAxOworCWRldi0+aWFtdGhpZl9tc2dfYnVmX3NpemUgPSBwcml2X2NiLT5yZXF1ZXN0X2J1ZmZlci5zaXplOworCW1lbWNweShkZXYtPmlhbXRoaWZfbXNnX2J1ZiwgcHJpdl9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSwKKwkgICAgcHJpdl9jYi0+cmVxdWVzdF9idWZmZXIuc2l6ZSk7CisKKwlpZiAoZmxvd19jdHJsX2NyZWRzKGRldiwgJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgJiYKKwkgICAgZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSkgeworCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJaWYgKHByaXZfY2ItPnJlcXVlc3RfYnVmZmVyLnNpemUgPgorCQkgICAgKCgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSAqCisJCSAgICBzaXplb2YoX191MzIpKSAtIHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSkgeworCQkJaGVjaV9oZHIubGVuZ3RoID0KKwkJCSAgICAoKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpICoKKwkJCSAgICBzaXplb2YoX191MzIpKSAtIHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKTsKKwkJCWhlY2lfaGRyLm1zZ19jb21wbGV0ZSA9IDA7CisJCX0gZWxzZSB7CisJCQloZWNpX2hkci5sZW5ndGggPSBwcml2X2NiLT5yZXF1ZXN0X2J1ZmZlci5zaXplOworCQkJaGVjaV9oZHIubXNnX2NvbXBsZXRlID0gMTsKKwkJfQorCisJCWhlY2lfaGRyLmhvc3RfYWRkciA9IGRldi0+aWFtdGhpZl9maWxlX2V4dC5ob3N0X2NsaWVudF9pZDsKKwkJaGVjaV9oZHIubWVfYWRkciA9IGRldi0+aWFtdGhpZl9maWxlX2V4dC5tZV9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLnJlc2VydmVkID0gMDsKKwkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggKz0gaGVjaV9oZHIubGVuZ3RoOworCQlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsICZoZWNpX2hkciwKKwkJCQkJKHVuc2lnbmVkIGNoYXIgKikoZGV2LT5pYW10aGlmX21zZ19idWYpLAorCQkJCQloZWNpX2hkci5sZW5ndGgpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJaWYgKGhlY2lfaGRyLm1zZ19jb21wbGV0ZSkgeworCQkJZmxvd19jdHJsX3JlZHVjZShkZXYsICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpOworCQkJZGV2LT5pYW10aGlmX2Zsb3dfY29udHJvbF9wZW5kaW5nID0gMTsKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9GTE9XX0NPTlRST0w7CisJCQlEQkcoImFkZCBwdGhpIGNiIHRvIHdyaXRlIHdhaXRpbmcgbGlzdFxuIik7CisJCQlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IHByaXZfY2I7CisJCQlkZXYtPmlhbXRoaWZfZmlsZV9vYmplY3QgPSBwcml2X2NiLT5maWxlX29iamVjdDsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmRldi0+d3JpdGVfd2FpdGluZ19saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlEQkcoIm1lc3NhZ2UgZG9lcyBub3QgY29tcGxldGUsICIKKwkJCQkJInNvIGFkZCBwdGhpIGNiIHRvIHdyaXRlIGxpc3QuXG4iKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCEoZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSkpCisJCQlEQkcoImhvc3QgYnVmZmVyIGlzIG5vdCBlbXB0eSIpOworCisJCURCRygiTm8gZmxvdyBjb250cm9sIGNyZWRlbnRpYWxzLCAiCisJCQkJInNvIGFkZCBpYW10aGlmIGNiIHRvIHdyaXRlIGxpc3QuXG4iKTsKKwkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCSAgICAgICZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwl9CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaWFtdGhpZl9pb2N0bF9zZW5kX21zZyAtIHNlbmQgY21kIGRhdGEgdG8gcHRoaSBjbGllbnQKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3ZvaWQgcnVuX25leHRfaWFtdGhpZl9jbWQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0X3RtcDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplID0gMDsKKwlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCA9IDA7CisJZGV2LT5pYW10aGlmX2NhbmNlbGVkID0gMDsKKwlkZXYtPmlhbXRoaWZfaW9jdGwgPSAxOworCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9JRExFOworCWRldi0+aWFtdGhpZl90aW1lciA9IDA7CisJZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID0gTlVMTDsKKworCWlmIChkZXYtPnB0aGlfY21kX2xpc3Quc3RhdHVzID09IDAgJiYKKwkgICAgIWxpc3RfZW1wdHkoJmRldi0+cHRoaV9jbWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKSB7CisJCURCRygiY29tcGxldGUgcHRoaSBjbWRfbGlzdCBjYi5cbiIpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkgICAgJmRldi0+cHRoaV9jbWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQlmaWxlX2V4dF90bXAgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisKKwkJCWlmICgoZmlsZV9leHRfdG1wICE9IE5VTEwpICYmCisJCQkgICAgKGZpbGVfZXh0X3RtcCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSkgeworCQkJCXN0YXR1cyA9IHB0aGlfd3JpdGUoZGV2LCBwcml2X2NiX3Bvcyk7CisJCQkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQkJCURCRygicHRoaSB3cml0ZSBmYWlsZWQgc3RhdHVzID0gJWRcbiIsCisJCQkJCQkJc3RhdHVzKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBoZWNpX2ZyZWVfY2JfcHJpdmF0ZSAtIGZyZWUgaGVjaV9jYl9wcml2YXRlIHJlbGF0ZWQgbWVtb3J5CisgKgorICogQHByaXZfY2I6IGhlY2kgY2FsbGJhY2sgc3RydWN0CisgKi8KK3ZvaWQgaGVjaV9mcmVlX2NiX3ByaXZhdGUoc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYikKK3sKKwlpZiAocHJpdl9jYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlrZnJlZShwcml2X2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhKTsKKwlrZnJlZShwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSk7CisJa2ZyZWUocHJpdl9jYik7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1MmQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnCkBAIC0wLDAgKzEsMjEgQEAKK2NvbmZpZyBMSU5FNl9VU0IKKwl0cmlzdGF0ZSAiTGluZTYgVVNCIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgU05ECisJc2VsZWN0IFNORF9SQVdNSURJCisJaGVscAorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIGd1aXRhciBhbXAsIGNhYiwgYW5kIGVmZmVjdHMgbW9kZWxsZXIKKwkgIFBPRHh0IFBybyBieSBMaW5lNiAoYW5kIHNpbWlsYXIgZGV2aWNlcyksIHN1cHBvcnRpbmcgdGhlCisJICBmb2xsb3dpbmcgZmVhdHVyZXM6CisJICAgICogUmVhZGluZy93cml0aW5nIGluZGl2aWR1YWwgcGFyYW1ldGVycworCSAgICAqIFJlYWRpbmcvd3JpdGluZyBjb21wbGV0ZSBjaGFubmVsLCBlZmZlY3RzIHNldHVwLCBhbmQgYW1wCisJICAgICAgc2V0dXAgZGF0YQorCSAgICAqIENoYW5uZWwgc3dpdGNoaW5nCisJICAgICogVmlydHVhbCBNSURJIGludGVyZmFjZQorCSAgICAqIFR1bmVyIGFjY2VzcworCSAgICAqIFBsYXliYWNrL2NhcHR1cmUvbWl4ZXIgZGV2aWNlIGZvciBhbnkgQUxTQS1jb21wYXRpYmxlIFBDTQorCSAgICAgIGF1ZGlvIGFwcGxpY2F0aW9uCisJICAgICogU2lnbmFsIHJvdXRpbmcgKHJlY29yZCBjbGVhbi9wcm9jZXNzZWQgZ3VpdGFyIHNpZ25hbCwKKwkgICAgICByZS1hbXBpbmcpCisKKwkgIFByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIHRoZSBWYXJpYXggV29ya2JlbmNoIGlzIGluY2x1ZGVkLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjOTNlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACitvYmotJChDT05GSUdfTElORTZfVVNCKQkJKz0gbGluZTZ1c2IubworCitsaW5lNnVzYi1vYmpzIDo9IAkJXAorCQlhdWRpby5vCQlcCisJCWNhcHR1cmUubwlcCisJCWNvbnRyb2wubwlcCisJCWRyaXZlci5vCVwKKwkJZHVtcHJlcXVlc3QubwlcCisJCW1pZGkubwkJXAorCQltaWRpYnVmLm8JXAorCQlwY20ubwkJXAorCQlwbGF5YmFjay5vCVwKKwkJcG9kLm8JCVwKKwkJdG9uZXBvcnQubwlcCisJCXZhcmlheC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvYXVkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYTk0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvYXVkaW8uYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorI2luY2x1ZGUgImF1ZGlvLmgiCisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisKK3N0YXRpYyBpbnQgbGluZTZfaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CitzdGF0aWMgY2hhciAqbGluZTZfaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CisKKworLyoKKwlJbml0aWFsaXplIHRoZSBMaW5lNiBVU0IgYXVkaW8gc3lzdGVtLgorKi8KK2ludCBsaW5lNl9pbml0X2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQoreworCXN0YXRpYyBpbnQgZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKworCWNhcmQgPSBzbmRfY2FyZF9uZXcobGluZTZfaW5kZXhbZGV2XSwgbGluZTZfaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCisJaWYgKGNhcmQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsaW5lNi0+Y2FyZCA9IGNhcmQ7CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkxpbmU2LVVTQiIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJMaW5lNiAlcyBhdCBVU0IgJXMiLCBsaW5lNi0+cHJvcGVydGllcy0+bmFtZSwKKwkJZGV2X25hbWUobGluZTYtPmlmY2RldikpOyAgLyogODAgY2hhcnMgLSBzZWUgYXNvdW5kLmggKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKwlSZWdpc3RlciB0aGUgTGluZTYgVVNCIGF1ZGlvIHN5c3RlbS4KKyovCitpbnQgbGluZTZfcmVnaXN0ZXJfYXVkaW8oc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCit7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGxpbmU2LT5jYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisvKgorCUNsZWFudXAgdGhlIExpbmU2IFVTQiBhdWRpbyBzeXN0ZW0uCisqLwordm9pZCBsaW5lNl9jbGVhbnVwX2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGxpbmU2LT5jYXJkOworCisJaWYgKGNhcmQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCWxpbmU2LT5jYXJkID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2F1ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwMjQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIEFVRElPX0gKKyNkZWZpbmUgQVVESU9fSAorCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworCitleHRlcm4gdm9pZCBsaW5lNl9jbGVhbnVwX2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKik7CitleHRlcm4gaW50IGxpbmU2X2luaXRfYXVkaW8oc3RydWN0IHVzYl9saW5lNiAqKTsKK2V4dGVybiBpbnQgbGluZTZfcmVnaXN0ZXJfYXVkaW8oc3RydWN0IHVzYl9saW5lNiAqKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY2FwdHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOTNlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY2FwdHVyZS5jCkBAIC0wLDAgKzEsMzcyIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAicGNtLmgiCisjaW5jbHVkZSAicG9kLmgiCisjaW5jbHVkZSAiY2FwdHVyZS5oIgorCisKKy8qCisJRmluZCBhIGZyZWUgVVJCIGFuZCBzdWJtaXQgaXQuCisqLworc3RhdGljIGludCBzdWJtaXRfYXVkaW9faW5fdXJiKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCWludCBpbmRleDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgaSwgdXJiX3NpemU7CisJc3RydWN0IHVyYiAqdXJiX2luOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX2luLCBmbGFncyk7CisJaW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbiwgTElORTZfSVNPX0JVRkZFUlMpOworCisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBMSU5FNl9JU09fQlVGRkVSUykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbiwgZmxhZ3MpOworCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAibm8gZnJlZSBVUkIgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1cmJfaW4gPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2luZGV4XTsKKwl1cmJfc2l6ZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX1BBQ0tFVFM7ICsraSkgeworCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZmluID0gJnVyYl9pbi0+aXNvX2ZyYW1lX2Rlc2NbaV07CisJCWZpbi0+b2Zmc2V0ID0gdXJiX3NpemU7CisJCWZpbi0+bGVuZ3RoID0gbGluZTZwY20tPm1heF9wYWNrZXRfc2l6ZTsKKwkJdXJiX3NpemUgKz0gbGluZTZwY20tPm1heF9wYWNrZXRfc2l6ZTsKKwl9CisKKwl1cmJfaW4tPnRyYW5zZmVyX2J1ZmZlciA9IGxpbmU2cGNtLT5idWZmZXJfaW4gKyBpbmRleCAqIExJTkU2X0lTT19QQUNLRVRTICogbGluZTZwY20tPm1heF9wYWNrZXRfc2l6ZTsKKwl1cmJfaW4tPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB1cmJfc2l6ZTsKKwl1cmJfaW4tPmNvbnRleHQgPSBzdWJzdHJlYW07CisKKwlpZiAodXNiX3N1Ym1pdF91cmIodXJiX2luLCBHRlBfQVRPTUlDKSA9PSAwKQorCQlzZXRfYml0KGluZGV4LCAmbGluZTZwY20tPmFjdGl2ZV91cmJfaW4pOworCWVsc2UKKwkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgIlVSQiBpbiAjJWQgc3VibWlzc2lvbiBmYWlsZWRcbiIsIGluZGV4KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX2luLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJU3VibWl0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIGNhcHR1cmUgVVJCcy4KKyovCitzdGF0aWMgaW50IHN1Ym1pdF9hdWRpb19pbl9hbGxfdXJicyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgcmV0LCBpOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19CVUZGRVJTOyArK2kpIHsKKwkJcmV0ID0gc3VibWl0X2F1ZGlvX2luX3VyYihzdWJzdHJlYW0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJVW5saW5rIGFsbCBjdXJyZW50bHkgYWN0aXZlIGNhcHR1cmUgVVJCcy4KKyovCitzdGF0aWMgdm9pZCB1bmxpbmtfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSBMSU5FNl9JU09fQlVGRkVSUzsgaS0tOykgeworCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX2luKSkgeworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksICZsaW5lNnBjbS0+dW5saW5rX3VyYl9pbikpIHsKKwkJCQlzdHJ1Y3QgdXJiICp1ID0gbGluZTZwY20tPnVyYl9hdWRpb19pbltpXTsKKwkJCQl1c2JfdW5saW5rX3VyYih1KTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKwlXYWl0IHVudGlsIHVubGlua2luZyBvZiBhbGwgY3VycmVudGx5IGFjdGl2ZSBjYXB0dXJlIFVSQnMgaGFzIGJlZW4KKwlmaW5pc2hlZC4KKyovCitzdGF0aWMgdm9pZCB3YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCWludCB0aW1lb3V0ID0gSFo7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGFsaXZlOworCisJZG8geworCQlhbGl2ZSA9IDA7CisJCWZvciAoaSA9IExJTkU2X0lTT19CVUZGRVJTOyBpLS07KSB7CisJCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX2luKSkKKwkJCQlhbGl2ZSsrOworCQl9CisJCWlmICghYWxpdmUpCisJCQlicmVhazsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCX0gd2hpbGUgKC0tdGltZW91dCA+IDApOworCWlmIChhbGl2ZSkKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidGltZW91dDogc3RpbGwgJWQgYWN0aXZlIHVyYnMuLlxuIiwgYWxpdmUpOworCisJbGluZTZwY20tPmFjdGl2ZV91cmJfaW4gPSAwOworCWxpbmU2cGNtLT51bmxpbmtfdXJiX2luID0gMDsKK30KKworLyoKKwlVbmxpbmsgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2FwdHVyZSBVUkJzLCBhbmQgd2FpdCBmb3IgZmluaXNoaW5nLgorKi8KK3ZvaWQgdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJdW5saW5rX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOworCXdhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7Cit9CisKKy8qCisJQ2FsbGJhY2sgZm9yIGNvbXBsZXRlZCBjYXB0dXJlIFVSQi4KKyovCitzdGF0aWMgdm9pZCBhdWRpb19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGksIGluZGV4LCBsZW5ndGggPSAwLCBzaHV0ZG93biA9IDA7CisJaW50IGZyYW1lczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwljb25zdCBpbnQgYnl0ZXNfcGVyX2ZyYW1lID0gbGluZTZwY20tPnByb3BlcnRpZXMtPmJ5dGVzX3Blcl9mcmFtZTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJLyogZmluZCBpbmRleCBvZiBVUkIgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBMSU5FNl9JU09fQlVGRkVSUzsgKytpbmRleCkKKwkJaWYgKHVyYiA9PSBsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2luZGV4XSkKKwkJCWJyZWFrOworCisjaWYgRE9fRFVNUF9QQ01fUkVDRUlWRQorCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fUEFDS0VUUzsgKytpKSB7CisJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmb3V0ID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07CisJCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTZwY20tPmxpbmU2LCAnQycsIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgZm91dC0+b2Zmc2V0LCBmb3V0LT5sZW5ndGgpOworCX0KKyNlbmRpZgorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX2luLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX1BBQ0tFVFM7ICsraSkgeworCQljaGFyICpmYnVmOworCQlpbnQgZnNpemU7CisJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmaW4gPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKKworCQlpZiAoZmluLT5zdGF0dXMgPT0gLTE4KSB7CisJCQlzaHV0ZG93biA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWZidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIGZpbi0+b2Zmc2V0OworCQlmc2l6ZSA9IGZpbi0+YWN0dWFsX2xlbmd0aDsKKwkJbGVuZ3RoICs9IGZzaXplOworCisJCWlmIChmc2l6ZSA+IDApIHsKKwkJCWZyYW1lcyA9IGZzaXplIC8gYnl0ZXNfcGVyX2ZyYW1lOworCisJCQlpZiAobGluZTZwY20tPnBvc19pbl9kb25lICsgZnJhbWVzID4gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJCQkvKgorCQkJCQlUaGUgdHJhbnNmZXJyZWQgYXJlYSBnb2VzIG92ZXIgYnVmZmVyIGJvdW5kYXJ5LAorCQkJCQljb3B5IHR3byBzZXBhcmF0ZSBjaHVua3MuCisJCQkJKi8KKwkJCQlpbnQgbGVuOworCQkJCWxlbiA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gbGluZTZwY20tPnBvc19pbl9kb25lOworCisJCQkJaWYgKGxlbiA+IDApIHsKKwkJCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgbGluZTZwY20tPnBvc19pbl9kb25lICogYnl0ZXNfcGVyX2ZyYW1lLCBmYnVmLCBsZW4gKiBieXRlc19wZXJfZnJhbWUpOworCQkJCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEsIGZidWYgKyBsZW4gKiBieXRlc19wZXJfZnJhbWUsIChmcmFtZXMgLSBsZW4pICogYnl0ZXNfcGVyX2ZyYW1lKTsKKwkJCQl9IGVsc2UKKwkJCQkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgImRyaXZlciBidWc6IGxlbiA9ICVkXG4iLCBsZW4pOyAgLyogdGhpcyBpcyBzb21ld2hhdCBwYXJhbm9pZCAqLworCQkJfSBlbHNlIHsKKwkJCQkvKiBjb3B5IHNpbmdsZSBjaHVuayAqLworCQkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIGxpbmU2cGNtLT5wb3NfaW5fZG9uZSAqIGJ5dGVzX3Blcl9mcmFtZSwgZmJ1ZiwgZnNpemUgKiBieXRlc19wZXJfZnJhbWUpOworCQkJfQorCisJCQlpZiAoKGxpbmU2cGNtLT5wb3NfaW5fZG9uZSArPSBmcmFtZXMpID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQkJCWxpbmU2cGNtLT5wb3NfaW5fZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJfQorCX0KKworCWNsZWFyX2JpdChpbmRleCwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX2luKTsKKworCWlmICh0ZXN0X2JpdChpbmRleCwgJmxpbmU2cGNtLT51bmxpbmtfdXJiX2luKSkKKwkJc2h1dGRvd24gPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfYXVkaW9faW4sIGZsYWdzKTsKKworCWlmICghc2h1dGRvd24pIHsKKwkJc3VibWl0X2F1ZGlvX2luX3VyYihzdWJzdHJlYW0pOworCisJCWlmICgobGluZTZwY20tPmJ5dGVzX2luICs9IGxlbmd0aCkgPj0gbGluZTZwY20tPnBlcmlvZF9pbikgeworCQkJbGluZTZwY20tPmJ5dGVzX2luIC09IGxpbmU2cGNtLT5wZXJpb2RfaW47CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisJCX0KKwl9Cit9CisKKy8qIG9wZW4gY2FwdHVyZSBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCWludCBlcnI7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0ZGVucyhydW50aW1lLCAwLAorCQkJCQkgICAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkJCSAgICAoJmxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5zbmRfbGluZTZfcmF0ZXMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJ1bnRpbWUtPmh3ID0gbGluZTZwY20tPnByb3BlcnRpZXMtPnNuZF9saW5lNl9jYXB0dXJlX2h3OworCXJldHVybiAwOworfQorCisvKiBjbG9zZSBjYXB0dXJlIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCisvKiBod19wYXJhbXMgY2FwdHVyZSBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfY2FwdHVyZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJLyogLS0gRmxvcmlhbiBEZW1za2kgW0ZEXSAqLworCS8qIGRvbid0IGFzayBtZSB3aHksIGJ1dCB0aGlzIGZpeGVzIHRoZSBidWcgb24gbXkgbWFjaGluZSAqLworCWlmIChsaW5lNnBjbSA9PSBOVUxMKSB7CisJCWlmIChzdWJzdHJlYW0tPnBjbSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWlmIChzdWJzdHJlYW0tPnBjbS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJc3Vic3RyZWFtLT5wcml2YXRlX2RhdGEgPSBzdWJzdHJlYW0tPnBjbS0+cHJpdmF0ZV9kYXRhOworCQlsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl9CisJLyogLS0gW0ZEXSBlbmQgKi8KKworCXJldCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlsaW5lNnBjbS0+cGVyaW9kX2luID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhod19wYXJhbXMpOworCWxpbmU2cGNtLT5idWZmZXJfaW4gPSBrbWFsbG9jKExJTkU2X0lTT19CVUZGRVJTICogTElORTZfSVNPX1BBQ0tFVFMgKiBMSU5FNl9JU09fUEFDS0VUX1NJWkVfTUFYLCBHRlBfS0VSTkVMKTsKKworCWlmICghbGluZTZwY20tPmJ1ZmZlcl9pbikgeworCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAiY2Fubm90IG1hbGxvYyBidWZmZXJfaW5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogaHdfZnJlZSBjYXB0dXJlIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jYXB0dXJlX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVubGlua193YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOworCisJa2ZyZWUobGluZTZwY20tPmJ1ZmZlcl9pbik7CisJbGluZTZwY20tPmJ1ZmZlcl9pbiA9IE5VTEw7CisKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCisvKiB0cmlnZ2VyIGNhbGxiYWNrICovCitpbnQgc25kX2xpbmU2X2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IGVycjsKKwlsaW5lNnBjbS0+Y291bnRfaW4gPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQklUX1JVTk5JTkdfQ0FQVFVSRSwgJmxpbmU2cGNtLT5mbGFncykpIHsKKwkJCWVyciA9IHN1Ym1pdF9hdWRpb19pbl9hbGxfdXJicyhzdWJzdHJlYW0pOworCisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWNsZWFyX2JpdChCSVRfUlVOTklOR19DQVBUVVJFLCAmbGluZTZwY20tPmZsYWdzKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQklUX1JVTk5JTkdfQ0FQVFVSRSwgJmxpbmU2cGNtLT5mbGFncykpCisJCQl1bmxpbmtfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FwdHVyZSBwb2ludGVyIGNhbGxiYWNrICovCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9saW5lNl9jYXB0dXJlX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXJldHVybiBsaW5lNnBjbS0+cG9zX2luX2RvbmU7Cit9CisKKy8qIGNhcHR1cmUgb3BlcmF0b3JzICovCitzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2xpbmU2X2NhcHR1cmVfb3BzID0geworCS5vcGVuID0gICAgICAgIHNuZF9saW5lNl9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0gICAgICAgc25kX2xpbmU2X2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsID0gICAgICAgc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9ICAgc25kX2xpbmU2X2NhcHR1cmVfaHdfcGFyYW1zLAorCS5od19mcmVlID0gICAgIHNuZF9saW5lNl9jYXB0dXJlX2h3X2ZyZWUsCisJLnByZXBhcmUgPSAgICAgc25kX2xpbmU2X3ByZXBhcmUsCisJLnRyaWdnZXIgPSAgICAgc25kX2xpbmU2X3RyaWdnZXIsCisJLnBvaW50ZXIgPSAgICAgc25kX2xpbmU2X2NhcHR1cmVfcG9pbnRlciwKK307CisKK2ludCBjcmVhdGVfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJaW50IGk7CisKKwkvKiBjcmVhdGUgYXVkaW8gVVJCcyBhbmQgZmlsbCBpbiBjb25zdGFudCB2YWx1ZXM6ICovCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19CVUZGRVJTOyArK2kpIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCisJCS8qIFVSQiBmb3IgYXVkaW8gaW46ICovCisJCXVyYiA9IGxpbmU2cGNtLT51cmJfYXVkaW9faW5baV0gPSB1c2JfYWxsb2NfdXJiKExJTkU2X0lTT19QQUNLRVRTLCBHRlBfS0VSTkVMKTsKKworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCWRldl9lcnIobGluZTZwY20tPmxpbmU2LT5pZmNkZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJdXJiLT5kZXYgPSBsaW5lNnBjbS0+bGluZTYtPnVzYmRldjsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGxpbmU2cGNtLT5saW5lNi0+dXNiZGV2LCBsaW5lNnBjbS0+ZXBfYXVkaW9fcmVhZCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+c3RhcnRfZnJhbWUgPSAtMTsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IExJTkU2X0lTT19QQUNLRVRTOworCQl1cmItPmludGVydmFsID0gTElORTZfSVNPX0lOVEVSVkFMOworCQl1cmItPmVycm9yX2NvdW50ID0gMDsKKwkJdXJiLT5jb21wbGV0ZSA9IGF1ZGlvX2luX2NhbGxiYWNrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0NDQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgQ0FQVFVSRV9ICisjZGVmaW5lIENBUFRVUkVfSAorCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCisjaW5jbHVkZSAicGNtLmgiCisKKworZXh0ZXJuIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbGluZTZfY2FwdHVyZV9vcHM7CisKKworZXh0ZXJuIGludCBjcmVhdGVfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOworZXh0ZXJuIGludCBzbmRfbGluZTZfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgaW50IGNtZCk7CitleHRlcm4gdm9pZCB1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29uZmlnLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhZDEzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb25maWcuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBDT05GSUdfSAorI2RlZmluZSBDT05GSUdfSAorCisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjZGVmaW5lIERFQlVHIDEKKyNlbmRpZgorCisKKy8qKgorICAgRGV2ZWxvcG1lbnQgdG9vbHMuCisqLworI2RlZmluZSBET19ERUJVR19NRVNTQUdFUyAgICAwCisjZGVmaW5lIERPX0RVTVBfVVJCX1NFTkQgICAgIERPX0RFQlVHX01FU1NBR0VTCisjZGVmaW5lIERPX0RVTVBfVVJCX1JFQ0VJVkUgIERPX0RFQlVHX01FU1NBR0VTCisjZGVmaW5lIERPX0RVTVBfUENNX1NFTkQgICAgIDAKKyNkZWZpbmUgRE9fRFVNUF9QQ01fUkVDRUlWRSAgMAorI2RlZmluZSBET19EVU1QX01JRElfU0VORCAgICBET19ERUJVR19NRVNTQUdFUworI2RlZmluZSBET19EVU1QX01JRElfUkVDRUlWRSBET19ERUJVR19NRVNTQUdFUworI2RlZmluZSBET19EVU1QX0FOWSAgICAgICAgICAoRE9fRFVNUF9VUkJfU0VORCB8fCBET19EVU1QX1VSQl9SRUNFSVZFIHx8IFwKKwkJCSAgICAgIERPX0RVTVBfUENNX1NFTkQgfHwgRE9fRFVNUF9QQ01fUkVDRUlWRSB8fCBcCisJCQkgICAgICBET19EVU1QX01JRElfU0VORCB8fCBET19EVU1QX01JRElfUkVDRUlWRSkKKyNkZWZpbmUgQ1JFQVRFX1JBV19GSUxFICAgICAgMAorCisjaWYgRE9fREVCVUdfTUVTU0FHRVMKKyNkZWZpbmUgQ0hFQ0tQT0lOVCBwcmludGsoS0VSTl9JTkZPICJsaW5lNnVzYjogJXMgKCVzOiVkKVxuIiwgXAorCQkJICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKQorI2VuZGlmCisKKyNpZiBET19ERUJVR19NRVNTQUdFUworI2RlZmluZSBERUJVR19NRVNTQUdFUyh4KSAoeCkKKyNlbHNlCisjZGVmaW5lIERFQlVHX01FU1NBR0VTKHgpCisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb250cm9sLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29udHJvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYWQwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29udHJvbC5jCkBAIC0wLDAgKzEsODQwIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAicG9kLmgiCisjaW5jbHVkZSAidXNiZGVmcy5oIgorI2luY2x1ZGUgInZhcmlheC5oIgorCisjZGVmaW5lIERFVklDRV9BVFRSMihfbmFtZTEsIF9uYW1lMiwgX21vZGUsIF9zaG93LCBfc3RvcmUpIFwKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyXyMjX25hbWUxID0gX19BVFRSKF9uYW1lMiwgX21vZGUsIF9zaG93LCBfc3RvcmUpCisKKyNkZWZpbmUgTElORTZfUEFSQU1fUihQUkVGSVgsIHByZWZpeCwgdHlwZSwgcGFyYW0pIFwKK3N0YXRpYyBzc2l6ZV90IHByZWZpeCAjIyBfZ2V0XyAjIyBwYXJhbShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXJldHVybiBwcmVmaXggIyMgX2dldF9wYXJhbV8gIyMgdHlwZShkZXYsIGJ1ZiwgUFJFRklYICMjIF8gIyMgcGFyYW0pOyBcCit9CisKKyNkZWZpbmUgTElORTZfUEFSQU1fUlcoUFJFRklYLCBwcmVmaXgsIHR5cGUsIHBhcmFtKSBcCitMSU5FNl9QQVJBTV9SKFBSRUZJWCwgcHJlZml4LCB0eXBlLCBwYXJhbSk7IFwKK3N0YXRpYyBzc2l6ZV90IHByZWZpeCAjIyBfc2V0XyAjIyBwYXJhbShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCit7IFwKKwlyZXR1cm4gcHJlZml4ICMjIF9zZXRfcGFyYW1fICMjIHR5cGUoZGV2LCBidWYsIGNvdW50LCBQUkVGSVggIyMgXyAjIyBwYXJhbSk7IFwKK30KKworI2RlZmluZSBQT0RfUEFSQU1fUih0eXBlLCBwYXJhbSkgTElORTZfUEFSQU1fUihQT0QsIHBvZCwgdHlwZSwgcGFyYW0pCisjZGVmaW5lIFBPRF9QQVJBTV9SVyh0eXBlLCBwYXJhbSkgTElORTZfUEFSQU1fUlcoUE9ELCBwb2QsIHR5cGUsIHBhcmFtKQorI2RlZmluZSBWQVJJQVhfUEFSQU1fUih0eXBlLCBwYXJhbSkgTElORTZfUEFSQU1fUihWQVJJQVgsIHZhcmlheCwgdHlwZSwgcGFyYW0pCisjZGVmaW5lIFZBUklBWF9QQVJBTV9SVyh0eXBlLCBwYXJhbSkgTElORTZfUEFSQU1fUlcoVkFSSUFYLCB2YXJpYXgsIHR5cGUsIHBhcmFtKQorCisKK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfcGFyYW1faW50KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgcGFyYW0pCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCByZXR2YWwgPSBsaW5lNl93YWl0X2R1bXAoJnBvZC0+ZHVtcHJlcSwgMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBvZC0+cHJvZ19kYXRhLmNvbnRyb2xbcGFyYW1dKTsKK30KKworc3RhdGljIHNzaXplX3QgcG9kX3NldF9wYXJhbV9pbnQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IHBhcmFtKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlwb2RfdHJhbnNtaXRfcGFyYW1ldGVyKHBvZCwgcGFyYW0sIHZhbHVlKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfcGFyYW1faW50KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgcGFyYW0pCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCByZXR2YWwgPSBsaW5lNl93YWl0X2R1bXAoJnZhcmlheC0+ZHVtcHJlcSwgMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sW3BhcmFtXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfcGFyYW1fZmxvYXQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBwYXJhbSkKK3sKKwkvKgorCQlXZSBkbyBvdXIgb3duIGZsb2F0aW5nIHBvaW50IGhhbmRsaW5nIGhlcmUgc2luY2UgZmxvYXRzIGluIHRoZQorCQlrZXJuZWwgYXJlIHByb2JsZW1hdGljIGZvciBhdCBsZWFzdCB0d28gcmVhc29uczogLSBtYW55IGRpc3Ryb3MKKwkJYXJlIHN0aWxsIHNoaXBwZWQgd2l0aCBiaW5hcnkga2VybmVscyBvcHRpbWl6ZWQgZm9yIHRoZSBhbmNpZW50CisJCTgwMzg2IHdpdGhvdXQgRlBVCisJCS0gdGhlcmUgaXNuJ3QgYSBwcmludGYoIiVmIikKKwkJICAoc2VlIGh0dHA6Ly93d3cua2VybmVsdGhyZWFkLmNvbS9wdWJsaWNhdGlvbnMvZmFxLzMzNS5odG1sKQorCSovCisKKwlzdGF0aWMgY29uc3QgaW50IEJJQVMgPSAweDdmOworCXN0YXRpYyBjb25zdCBpbnQgT0ZGU0VUID0gMHhmOworCXN0YXRpYyBjb25zdCBpbnQgUFJFQ0lTSU9OID0gMTAwMDsKKworCWludCBsZW4gPSAwOworCXVuc2lnbmVkIHBhcnRfaW50LCBwYXJ0X2ZyYWM7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSB2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbCArIHBhcmFtOworCWludCByZXR2YWwgPSBsaW5lNl93YWl0X2R1bXAoJnZhcmlheC0+ZHVtcHJlcSwgMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoKHBbMF0gPT0gMCkgJiYgKHBbMV0gPT0gMCkgJiYgKHBbMl0gPT0gMCkpCisJCXBhcnRfaW50ID0gcGFydF9mcmFjID0gMDsKKwllbHNlIHsKKwkJaW50IGV4cG9uZW50ID0gKCgocFswXSAmIDB4N2YpIDw8IDEpIHwgKHBbMV0gPj4gNykpIC0gQklBUzsKKwkJdW5zaWduZWQgbWFudGlzc2EgPSAocFsxXSA8PCA4KSB8IHBbMl0gfCAweDgwMDA7CisJCWV4cG9uZW50IC09IE9GRlNFVDsKKworCQlpZiAoZXhwb25lbnQgPj0gMCkgeworCQkJcGFydF9pbnQgPSBtYW50aXNzYSA8PCBleHBvbmVudDsKKwkJCXBhcnRfZnJhYyA9IDA7CisJCX0gZWxzZSB7CisJCQlwYXJ0X2ludCA9IG1hbnRpc3NhID4+IC1leHBvbmVudDsKKwkJCXBhcnRfZnJhYyA9IChtYW50aXNzYSA8PCAoMzIgKyBleHBvbmVudCkpICYgMHhmZmZmZmZmZjsKKwkJfQorCisJCXBhcnRfZnJhYyA9IChwYXJ0X2ZyYWMgLyAoKDFVTCA8PCAzMSkgLyAoUFJFQ0lTSU9OIC8gMiAqIDEwKSkgKyA1KSAvIDEwOworCX0KKworCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVzJWQuJTAzZFxuIiwgKChwWzBdICYgMHg4MCkgPyAiLSIgOiAiIiksIHBhcnRfaW50LCBwYXJ0X2ZyYWMpOworCXJldHVybiBsZW47Cit9CisKK1BPRF9QQVJBTV9SVyhpbnQsIHR3ZWFrKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHdhaF9wb3NpdGlvbik7CitQT0RfUEFSQU1fUlcoaW50LCBjb21wcmVzc2lvbl9nYWluKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHZvbF9wZWRhbF9wb3NpdGlvbik7CitQT0RfUEFSQU1fUlcoaW50LCBjb21wcmVzc2lvbl90aHJlc2hvbGQpOworUE9EX1BBUkFNX1JXKGludCwgcGFuKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGFtcF9tb2RlbF9zZXR1cCk7CitQT0RfUEFSQU1fUlcoaW50LCBhbXBfbW9kZWwpOworUE9EX1BBUkFNX1JXKGludCwgZHJpdmUpOworUE9EX1BBUkFNX1JXKGludCwgYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCBtaWQpOworUE9EX1BBUkFNX1JXKGludCwgbG93bWlkKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHRyZWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCBoaWdobWlkKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGNoYW5fdm9sKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHJldmVyYl9taXgpOworUE9EX1BBUkFNX1JXKGludCwgZWZmZWN0X3NldHVwKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfMV9mcmVxdWVuY3kpOworUE9EX1BBUkFNX1JXKGludCwgcHJlc2VuY2UpOworUE9EX1BBUkFNX1JXKGludCwgdHJlYmxlX19iYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG5vaXNlX2dhdGVfZW5hYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGdhdGVfdGhyZXNob2xkKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGdhdGVfZGVjYXlfdGltZSk7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF9lbmFibGUpOworUE9EX1BBUkFNX1JXKGludCwgY29tcF9lbmFibGUpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfdGltZSk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9lbmFibGUpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3BhcmFtXzEpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcGFyYW1fMSk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9wYXJhbV8xX25vdGVfdmFsdWUpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8yX2ZyZXF1ZW5jeV9fYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9wYXJhbV8yKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3ZvbHVtZV9taXgpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcGFyYW1fMyk7CitQT0RfUEFSQU1fUlcoaW50LCByZXZlcmJfZW5hYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHJldmVyYl90eXBlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHJldmVyYl9kZWNheSk7CitQT0RfUEFSQU1fUlcoaW50LCByZXZlcmJfdG9uZSk7CitQT0RfUEFSQU1fUlcoaW50LCByZXZlcmJfcHJlX2RlbGF5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHJldmVyYl9wcmVfcG9zdCk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzJfZnJlcXVlbmN5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfM19mcmVxdWVuY3lfX2Jhc3MpOworUE9EX1BBUkFNX1JXKGludCwgd2FoX2VuYWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2R1bGF0aW9uX2xvX2N1dCk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9yZXZlcmJfbG9fY3V0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHZvbHVtZV9wZWRhbF9taW5pbXVtKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGVxX3ByZV9wb3N0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHZvbHVtZV9wcmVfcG9zdCk7CitQT0RfUEFSQU1fUlcoaW50LCBkaV9tb2RlbCk7CitQT0RfUEFSQU1fUlcoaW50LCBkaV9kZWxheSk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfZW5hYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9wYXJhbV8xX25vdGVfdmFsdWUpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3BhcmFtXzIpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3BhcmFtXzMpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3BhcmFtXzQpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3BhcmFtXzUpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3ZvbHVtZV9taXgpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3ByZV9wb3N0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZHVsYXRpb25fbW9kZWwpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8zX2ZyZXF1ZW5jeSk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzRfZnJlcXVlbmN5X19iYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24pOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGVxX2VuYWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCB0YXApOworUE9EX1BBUkFNX1JXKGludCwgdm9sdW1lX3R3ZWFrX3BlZGFsX2Fzc2lnbik7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzVfZnJlcXVlbmN5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHR1bmVyKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1pY19zZWxlY3Rpb24pOworUE9EX1BBUkFNX1JXKGludCwgY2FiaW5ldF9tb2RlbCk7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF9tb2RlbCk7CitQT0RfUEFSQU1fUlcoaW50LCByb29tbGV2ZWwpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF80X2ZyZXF1ZW5jeSk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzZfZnJlcXVlbmN5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX3BhcmFtXzFfbm90ZV92YWx1ZSk7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF9wYXJhbV8yKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX3BhcmFtXzMpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfcGFyYW1fNCk7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF9wYXJhbV81KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX3BhcmFtXzYpOworUE9EX1BBUkFNX1JXKGludCwgYW1wX3N3aXRjaF9zZWxlY3QpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcGFyYW1fNCk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9wYXJhbV81KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3ByZV9wb3N0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X21vZGVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3ZlcmJfbW9kZWwpOworUE9EX1BBUkFNX1JXKGludCwgdGVtcG9fbXNiKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHRlbXBvX2xzYik7CitQT0RfUEFSQU1fUlcoaW50LCB3YWhfbW9kZWwpOworUE9EX1BBUkFNX1JXKGludCwgYnlwYXNzX3ZvbHVtZSk7CitQT0RfUEFSQU1fUlcoaW50LCBmeF9sb29wX29uX29mZik7CitQT0RfUEFSQU1fUlcoaW50LCB0d2Vha19wYXJhbV9zZWxlY3QpOworUE9EX1BBUkFNX1JXKGludCwgYW1wMV9lbmdhZ2UpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8xX2dhaW4pOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8yX2dhaW5fX2Jhc3MpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8yX2dhaW4pOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8zX2dhaW5fX2Jhc3MpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8zX2dhaW4pOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF80X2dhaW5fX2Jhc3MpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF81X2dhaW5fX2Jhc3MpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF80X2dhaW4pOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF82X2dhaW5fX2Jhc3MpOworVkFSSUFYX1BBUkFNX1IoaW50LCBib2R5KTsKK1ZBUklBWF9QQVJBTV9SKGludCwgcGlja3VwMV9lbmFibGUpOworVkFSSUFYX1BBUkFNX1IoaW50LCBwaWNrdXAxX3R5cGUpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHBpY2t1cDFfcG9zaXRpb24pOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHBpY2t1cDFfYW5nbGUpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHBpY2t1cDFfbGV2ZWwpOworVkFSSUFYX1BBUkFNX1IoaW50LCBwaWNrdXAyX2VuYWJsZSk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHBpY2t1cDJfdHlwZSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgcGlja3VwMl9wb3NpdGlvbik7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgcGlja3VwMl9hbmdsZSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgcGlja3VwMl9sZXZlbCk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHBpY2t1cF9waGFzZSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgY2FwYWNpdGFuY2UpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHRvbmVfcmVzaXN0YW5jZSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgdm9sdW1lX3Jlc2lzdGFuY2UpOworVkFSSUFYX1BBUkFNX1IoaW50LCB0YXBlcik7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgdG9uZV9kdW1wKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgc2F2ZV90b25lKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCB2b2x1bWVfZHVtcCk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHR1bmluZ19lbmFibGUpOworVkFSSUFYX1BBUkFNX1IoaW50LCB0dW5pbmc2KTsKK1ZBUklBWF9QQVJBTV9SKGludCwgdHVuaW5nNSk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHR1bmluZzQpOworVkFSSUFYX1BBUkFNX1IoaW50LCB0dW5pbmczKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgdHVuaW5nMik7CitWQVJJQVhfUEFSQU1fUihpbnQsIHR1bmluZzEpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIGRldHVuZTYpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIGRldHVuZTUpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIGRldHVuZTQpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIGRldHVuZTMpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIGRldHVuZTIpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIGRldHVuZTEpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIG1peDYpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIG1peDUpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIG1peDQpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIG1peDMpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIG1peDIpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIG1peDEpOworVkFSSUFYX1BBUkFNX1IoaW50LCBwaWNrdXBfd2lyaW5nKTsKKworc3RhdGljIERFVklDRV9BVFRSKHR3ZWFrLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90d2VhaywgcG9kX3NldF90d2Vhayk7CitzdGF0aWMgREVWSUNFX0FUVFIod2FoX3Bvc2l0aW9uLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF93YWhfcG9zaXRpb24sIHBvZF9zZXRfd2FoX3Bvc2l0aW9uKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjb21wcmVzc2lvbl9nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9jb21wcmVzc2lvbl9nYWluLCBwb2Rfc2V0X2NvbXByZXNzaW9uX2dhaW4pOworc3RhdGljIERFVklDRV9BVFRSKHZvbF9wZWRhbF9wb3NpdGlvbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdm9sX3BlZGFsX3Bvc2l0aW9uLCBwb2Rfc2V0X3ZvbF9wZWRhbF9wb3NpdGlvbik7CitzdGF0aWMgREVWSUNFX0FUVFIoY29tcHJlc3Npb25fdGhyZXNob2xkLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9jb21wcmVzc2lvbl90aHJlc2hvbGQsIHBvZF9zZXRfY29tcHJlc3Npb25fdGhyZXNob2xkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwYW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3BhbiwgcG9kX3NldF9wYW4pOworc3RhdGljIERFVklDRV9BVFRSKGFtcF9tb2RlbF9zZXR1cCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYW1wX21vZGVsX3NldHVwLCBwb2Rfc2V0X2FtcF9tb2RlbF9zZXR1cCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYW1wX21vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9hbXBfbW9kZWwsIHBvZF9zZXRfYW1wX21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkcml2ZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZHJpdmUsIHBvZF9zZXRfZHJpdmUpOworc3RhdGljIERFVklDRV9BVFRSKGJhc3MsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2Jhc3MsIHBvZF9zZXRfYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIobWlkLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9taWQsIHBvZF9zZXRfbWlkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsb3dtaWQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2xvd21pZCwgcG9kX3NldF9sb3dtaWQpOworc3RhdGljIERFVklDRV9BVFRSKHRyZWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdHJlYmxlLCBwb2Rfc2V0X3RyZWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoaGlnaG1pZCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfaGlnaG1pZCwgcG9kX3NldF9oaWdobWlkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjaGFuX3ZvbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfY2hhbl92b2wsIHBvZF9zZXRfY2hhbl92b2wpOworc3RhdGljIERFVklDRV9BVFRSKHJldmVyYl9taXgsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3JldmVyYl9taXgsIHBvZF9zZXRfcmV2ZXJiX21peCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZWZmZWN0X3NldHVwLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9lZmZlY3Rfc2V0dXAsIHBvZF9zZXRfZWZmZWN0X3NldHVwKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzFfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzFfZnJlcXVlbmN5LCBwb2Rfc2V0X2JhbmRfMV9mcmVxdWVuY3kpOworc3RhdGljIERFVklDRV9BVFRSKHByZXNlbmNlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9wcmVzZW5jZSwgcG9kX3NldF9wcmVzZW5jZSk7CitzdGF0aWMgREVWSUNFX0FUVFIyKHRyZWJsZV9fYmFzcywgdHJlYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90cmVibGVfX2Jhc3MsIHBvZF9zZXRfdHJlYmxlX19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihub2lzZV9nYXRlX2VuYWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbm9pc2VfZ2F0ZV9lbmFibGUsIHBvZF9zZXRfbm9pc2VfZ2F0ZV9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKGdhdGVfdGhyZXNob2xkLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9nYXRlX3RocmVzaG9sZCwgcG9kX3NldF9nYXRlX3RocmVzaG9sZCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZ2F0ZV9kZWNheV90aW1lLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9nYXRlX2RlY2F5X3RpbWUsIHBvZF9zZXRfZ2F0ZV9kZWNheV90aW1lKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF9lbmFibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX2VuYWJsZSwgcG9kX3NldF9zdG9tcF9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKGNvbXBfZW5hYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9jb21wX2VuYWJsZSwgcG9kX3NldF9jb21wX2VuYWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfdGltZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfdGltZSwgcG9kX3NldF9zdG9tcF90aW1lKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9lbmFibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X2VuYWJsZSwgcG9kX3NldF9kZWxheV9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9wYXJhbV8xLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfcGFyYW1fMSwgcG9kX3NldF9tb2RfcGFyYW1fMSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcGFyYW1fMSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcGFyYW1fMSwgcG9kX3NldF9kZWxheV9wYXJhbV8xKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9wYXJhbV8xX25vdGVfdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3BhcmFtXzFfbm90ZV92YWx1ZSwgcG9kX3NldF9kZWxheV9wYXJhbV8xX25vdGVfdmFsdWUpOworc3RhdGljIERFVklDRV9BVFRSMihiYW5kXzJfZnJlcXVlbmN5X19iYXNzLCBiYW5kXzJfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzJfZnJlcXVlbmN5X19iYXNzLCBwb2Rfc2V0X2JhbmRfMl9mcmVxdWVuY3lfX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3BhcmFtXzIsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3BhcmFtXzIsIHBvZF9zZXRfZGVsYXlfcGFyYW1fMik7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfdm9sdW1lX21peCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfdm9sdW1lX21peCwgcG9kX3NldF9kZWxheV92b2x1bWVfbWl4KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9wYXJhbV8zLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9wYXJhbV8zLCBwb2Rfc2V0X2RlbGF5X3BhcmFtXzMpOworc3RhdGljIERFVklDRV9BVFRSKHJldmVyYl9lbmFibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3JldmVyYl9lbmFibGUsIHBvZF9zZXRfcmV2ZXJiX2VuYWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2ZXJiX3R5cGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3JldmVyYl90eXBlLCBwb2Rfc2V0X3JldmVyYl90eXBlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXZlcmJfZGVjYXksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3JldmVyYl9kZWNheSwgcG9kX3NldF9yZXZlcmJfZGVjYXkpOworc3RhdGljIERFVklDRV9BVFRSKHJldmVyYl90b25lLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yZXZlcmJfdG9uZSwgcG9kX3NldF9yZXZlcmJfdG9uZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2ZXJiX3ByZV9kZWxheSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcmV2ZXJiX3ByZV9kZWxheSwgcG9kX3NldF9yZXZlcmJfcHJlX2RlbGF5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXZlcmJfcHJlX3Bvc3QsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3JldmVyYl9wcmVfcG9zdCwgcG9kX3NldF9yZXZlcmJfcHJlX3Bvc3QpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfMl9mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfMl9mcmVxdWVuY3ksIHBvZF9zZXRfYmFuZF8yX2ZyZXF1ZW5jeSk7CitzdGF0aWMgREVWSUNFX0FUVFIyKGJhbmRfM19mcmVxdWVuY3lfX2Jhc3MsIGJhbmRfM19mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfM19mcmVxdWVuY3lfX2Jhc3MsIHBvZF9zZXRfYmFuZF8zX2ZyZXF1ZW5jeV9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIod2FoX2VuYWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfd2FoX2VuYWJsZSwgcG9kX3NldF93YWhfZW5hYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2R1bGF0aW9uX2xvX2N1dCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kdWxhdGlvbl9sb19jdXQsIHBvZF9zZXRfbW9kdWxhdGlvbl9sb19jdXQpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3JldmVyYl9sb19jdXQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3JldmVyYl9sb19jdXQsIHBvZF9zZXRfZGVsYXlfcmV2ZXJiX2xvX2N1dCk7CitzdGF0aWMgREVWSUNFX0FUVFIodm9sdW1lX3BlZGFsX21pbmltdW0sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3ZvbHVtZV9wZWRhbF9taW5pbXVtLCBwb2Rfc2V0X3ZvbHVtZV9wZWRhbF9taW5pbXVtKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihlcV9wcmVfcG9zdCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZXFfcHJlX3Bvc3QsIHBvZF9zZXRfZXFfcHJlX3Bvc3QpOworc3RhdGljIERFVklDRV9BVFRSKHZvbHVtZV9wcmVfcG9zdCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdm9sdW1lX3ByZV9wb3N0LCBwb2Rfc2V0X3ZvbHVtZV9wcmVfcG9zdCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGlfbW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RpX21vZGVsLCBwb2Rfc2V0X2RpX21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkaV9kZWxheSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGlfZGVsYXksIHBvZF9zZXRfZGlfZGVsYXkpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9lbmFibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9lbmFibGUsIHBvZF9zZXRfbW9kX2VuYWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3BhcmFtXzFfbm90ZV92YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3BhcmFtXzFfbm90ZV92YWx1ZSwgcG9kX3NldF9tb2RfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfcGFyYW1fMiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3BhcmFtXzIsIHBvZF9zZXRfbW9kX3BhcmFtXzIpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9wYXJhbV8zLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfcGFyYW1fMywgcG9kX3NldF9tb2RfcGFyYW1fMyk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3BhcmFtXzQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9wYXJhbV80LCBwb2Rfc2V0X21vZF9wYXJhbV80KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfcGFyYW1fNSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3BhcmFtXzUsIHBvZF9zZXRfbW9kX3BhcmFtXzUpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF92b2x1bWVfbWl4LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2Rfdm9sdW1lX21peCwgcG9kX3NldF9tb2Rfdm9sdW1lX21peCk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3ByZV9wb3N0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfcHJlX3Bvc3QsIHBvZF9zZXRfbW9kX3ByZV9wb3N0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2R1bGF0aW9uX21vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2R1bGF0aW9uX21vZGVsLCBwb2Rfc2V0X21vZHVsYXRpb25fbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfM19mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfM19mcmVxdWVuY3ksIHBvZF9zZXRfYmFuZF8zX2ZyZXF1ZW5jeSk7CitzdGF0aWMgREVWSUNFX0FUVFIyKGJhbmRfNF9mcmVxdWVuY3lfX2Jhc3MsIGJhbmRfNF9mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfNF9mcmVxdWVuY3lfX2Jhc3MsIHBvZF9zZXRfYmFuZF80X2ZyZXF1ZW5jeV9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbiwgcG9kX3NldF9tb2RfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbiwgcG9kX3NldF9kZWxheV9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24pOworc3RhdGljIERFVklDRV9BVFRSKGVxX2VuYWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZXFfZW5hYmxlLCBwb2Rfc2V0X2VxX2VuYWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodGFwLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90YXAsIHBvZF9zZXRfdGFwKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih2b2x1bWVfdHdlYWtfcGVkYWxfYXNzaWduLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF92b2x1bWVfdHdlYWtfcGVkYWxfYXNzaWduLCBwb2Rfc2V0X3ZvbHVtZV90d2Vha19wZWRhbF9hc3NpZ24pOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfNV9mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfNV9mcmVxdWVuY3ksIHBvZF9zZXRfYmFuZF81X2ZyZXF1ZW5jeSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuZXIsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3R1bmVyLCBwb2Rfc2V0X3R1bmVyKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaWNfc2VsZWN0aW9uLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9taWNfc2VsZWN0aW9uLCBwb2Rfc2V0X21pY19zZWxlY3Rpb24pOworc3RhdGljIERFVklDRV9BVFRSKGNhYmluZXRfbW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2NhYmluZXRfbW9kZWwsIHBvZF9zZXRfY2FiaW5ldF9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfbW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX21vZGVsLCBwb2Rfc2V0X3N0b21wX21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyb29tbGV2ZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3Jvb21sZXZlbCwgcG9kX3NldF9yb29tbGV2ZWwpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfNF9mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfNF9mcmVxdWVuY3ksIHBvZF9zZXRfYmFuZF80X2ZyZXF1ZW5jeSk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF82X2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF82X2ZyZXF1ZW5jeSwgcG9kX3NldF9iYW5kXzZfZnJlcXVlbmN5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF9wYXJhbV8xX25vdGVfdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX3BhcmFtXzFfbm90ZV92YWx1ZSwgcG9kX3NldF9zdG9tcF9wYXJhbV8xX25vdGVfdmFsdWUpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX3BhcmFtXzIsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX3BhcmFtXzIsIHBvZF9zZXRfc3RvbXBfcGFyYW1fMik7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfcGFyYW1fMywgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfcGFyYW1fMywgcG9kX3NldF9zdG9tcF9wYXJhbV8zKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF9wYXJhbV80LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF9wYXJhbV80LCBwb2Rfc2V0X3N0b21wX3BhcmFtXzQpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX3BhcmFtXzUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX3BhcmFtXzUsIHBvZF9zZXRfc3RvbXBfcGFyYW1fNSk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfcGFyYW1fNiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfcGFyYW1fNiwgcG9kX3NldF9zdG9tcF9wYXJhbV82KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhbXBfc3dpdGNoX3NlbGVjdCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYW1wX3N3aXRjaF9zZWxlY3QsIHBvZF9zZXRfYW1wX3N3aXRjaF9zZWxlY3QpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3BhcmFtXzQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3BhcmFtXzQsIHBvZF9zZXRfZGVsYXlfcGFyYW1fNCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcGFyYW1fNSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcGFyYW1fNSwgcG9kX3NldF9kZWxheV9wYXJhbV81KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9wcmVfcG9zdCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcHJlX3Bvc3QsIHBvZF9zZXRfZGVsYXlfcHJlX3Bvc3QpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X21vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9tb2RlbCwgcG9kX3NldF9kZWxheV9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfdmVyYl9tb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfdmVyYl9tb2RlbCwgcG9kX3NldF9kZWxheV92ZXJiX21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wb19tc2IsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3RlbXBvX21zYiwgcG9kX3NldF90ZW1wb19tc2IpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXBvX2xzYiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdGVtcG9fbHNiLCBwb2Rfc2V0X3RlbXBvX2xzYik7CitzdGF0aWMgREVWSUNFX0FUVFIod2FoX21vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF93YWhfbW9kZWwsIHBvZF9zZXRfd2FoX21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihieXBhc3Nfdm9sdW1lLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9ieXBhc3Nfdm9sdW1lLCBwb2Rfc2V0X2J5cGFzc192b2x1bWUpOworc3RhdGljIERFVklDRV9BVFRSKGZ4X2xvb3Bfb25fb2ZmLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9meF9sb29wX29uX29mZiwgcG9kX3NldF9meF9sb29wX29uX29mZik7CitzdGF0aWMgREVWSUNFX0FUVFIodHdlYWtfcGFyYW1fc2VsZWN0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90d2Vha19wYXJhbV9zZWxlY3QsIHBvZF9zZXRfdHdlYWtfcGFyYW1fc2VsZWN0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhbXAxX2VuZ2FnZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYW1wMV9lbmdhZ2UsIHBvZF9zZXRfYW1wMV9lbmdhZ2UpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfMV9nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzFfZ2FpbiwgcG9kX3NldF9iYW5kXzFfZ2Fpbik7CitzdGF0aWMgREVWSUNFX0FUVFIyKGJhbmRfMl9nYWluX19iYXNzLCBiYW5kXzJfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8yX2dhaW5fX2Jhc3MsIHBvZF9zZXRfYmFuZF8yX2dhaW5fX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfMl9nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzJfZ2FpbiwgcG9kX3NldF9iYW5kXzJfZ2Fpbik7CitzdGF0aWMgREVWSUNFX0FUVFIyKGJhbmRfM19nYWluX19iYXNzLCBiYW5kXzNfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8zX2dhaW5fX2Jhc3MsIHBvZF9zZXRfYmFuZF8zX2dhaW5fX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfM19nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzNfZ2FpbiwgcG9kX3NldF9iYW5kXzNfZ2Fpbik7CitzdGF0aWMgREVWSUNFX0FUVFIyKGJhbmRfNF9nYWluX19iYXNzLCBiYW5kXzRfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF80X2dhaW5fX2Jhc3MsIHBvZF9zZXRfYmFuZF80X2dhaW5fX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSMihiYW5kXzVfZ2Fpbl9fYmFzcywgYmFuZF81X2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfNV9nYWluX19iYXNzLCBwb2Rfc2V0X2JhbmRfNV9nYWluX19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzRfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF80X2dhaW4sIHBvZF9zZXRfYmFuZF80X2dhaW4pOworc3RhdGljIERFVklDRV9BVFRSMihiYW5kXzZfZ2Fpbl9fYmFzcywgYmFuZF82X2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfNl9nYWluX19iYXNzLCBwb2Rfc2V0X2JhbmRfNl9nYWluX19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihib2R5LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2JvZHksIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMV9lbmFibGUsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMV9lbmFibGUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMV90eXBlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDFfdHlwZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAxX3Bvc2l0aW9uLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDFfcG9zaXRpb24sIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMV9hbmdsZSwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAxX2FuZ2xlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDFfbGV2ZWwsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMV9sZXZlbCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAyX2VuYWJsZSwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAyX2VuYWJsZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAyX3R5cGUsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMl90eXBlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDJfcG9zaXRpb24sIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMl9wb3NpdGlvbiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAyX2FuZ2xlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDJfYW5nbGUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMl9sZXZlbCwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAyX2xldmVsLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cF9waGFzZSwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXBfcGhhc2UsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2FwYWNpdGFuY2UsIFNfSVJVR08sIHZhcmlheF9nZXRfY2FwYWNpdGFuY2UsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodG9uZV9yZXNpc3RhbmNlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3RvbmVfcmVzaXN0YW5jZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih2b2x1bWVfcmVzaXN0YW5jZSwgU19JUlVHTywgdmFyaWF4X2dldF92b2x1bWVfcmVzaXN0YW5jZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0YXBlciwgU19JUlVHTywgdmFyaWF4X2dldF90YXBlciwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0b25lX2R1bXAsIFNfSVJVR08sIHZhcmlheF9nZXRfdG9uZV9kdW1wLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHNhdmVfdG9uZSwgU19JUlVHTywgdmFyaWF4X2dldF9zYXZlX3RvbmUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodm9sdW1lX2R1bXAsIFNfSVJVR08sIHZhcmlheF9nZXRfdm9sdW1lX2R1bXAsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuaW5nX2VuYWJsZSwgU19JUlVHTywgdmFyaWF4X2dldF90dW5pbmdfZW5hYmxlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmluZzYsIFNfSVJVR08sIHZhcmlheF9nZXRfdHVuaW5nNiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5pbmc1LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3R1bmluZzUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuaW5nNCwgU19JUlVHTywgdmFyaWF4X2dldF90dW5pbmc0LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmluZzMsIFNfSVJVR08sIHZhcmlheF9nZXRfdHVuaW5nMywgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5pbmcyLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3R1bmluZzIsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuaW5nMSwgU19JUlVHTywgdmFyaWF4X2dldF90dW5pbmcxLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGRldHVuZTYsIFNfSVJVR08sIHZhcmlheF9nZXRfZGV0dW5lNiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZXR1bmU1LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2RldHVuZTUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0dW5lNCwgU19JUlVHTywgdmFyaWF4X2dldF9kZXR1bmU0LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGRldHVuZTMsIFNfSVJVR08sIHZhcmlheF9nZXRfZGV0dW5lMywgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZXR1bmUyLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2RldHVuZTIsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0dW5lMSwgU19JUlVHTywgdmFyaWF4X2dldF9kZXR1bmUxLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKG1peDYsIFNfSVJVR08sIHZhcmlheF9nZXRfbWl4NiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaXg1LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X21peDUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobWl4NCwgU19JUlVHTywgdmFyaWF4X2dldF9taXg0LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKG1peDMsIFNfSVJVR08sIHZhcmlheF9nZXRfbWl4MywgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaXgyLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X21peDIsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobWl4MSwgU19JUlVHTywgdmFyaWF4X2dldF9taXgxLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cF93aXJpbmcsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwX3dpcmluZywgbGluZTZfbm9wX3dyaXRlKTsKKworaW50IHBvZF9jcmVhdGVfZmlsZXMoaW50IGZpcm13YXJlLCBpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBlcnI7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90d2VhaykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2FoX3Bvc2l0aW9uKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NvbXByZXNzaW9uX2dhaW4pKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbF9wZWRhbF9wb3NpdGlvbikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY29tcHJlc3Npb25fdGhyZXNob2xkKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wYW4pKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FtcF9tb2RlbF9zZXR1cCkpOworCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYW1wX21vZGVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kcml2ZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFzcykpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taWQpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2xvd21pZCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90cmVibGUpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2hpZ2htaWQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NoYW5fdm9sKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9taXgpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2VmZmVjdF9zZXR1cCkpOworCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8xX2ZyZXF1ZW5jeSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wcmVzZW5jZSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHJlYmxlX19iYXNzKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9ub2lzZV9nYXRlX2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZ2F0ZV90aHJlc2hvbGQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2dhdGVfZGVjYXlfdGltZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jb21wX2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfdGltZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMV9ub3RlX3ZhbHVlKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8yX2ZyZXF1ZW5jeV9fYmFzcykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfdm9sdW1lX21peCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMykpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfZW5hYmxlKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl90eXBlKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9kZWNheSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfdG9uZSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfcHJlX2RlbGF5KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9wcmVfcG9zdCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8yX2ZyZXF1ZW5jeSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfM19mcmVxdWVuY3lfX2Jhc3MpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3dhaF9lbmFibGUpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZHVsYXRpb25fbG9fY3V0KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9yZXZlcmJfbG9fY3V0KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfcGVkYWxfbWluaW11bSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2VxX3ByZV9wb3N0KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfcHJlX3Bvc3QpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpX21vZGVsKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kaV9kZWxheSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzFfbm90ZV92YWx1ZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8zKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fNCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF92b2x1bWVfbWl4KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcHJlX3Bvc3QpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZHVsYXRpb25fbW9kZWwpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfM19mcmVxdWVuY3kpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzRfZnJlcXVlbmN5X19iYXNzKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24pKTsKKwlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2VxX2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGFwKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfdHdlYWtfcGVkYWxfYXNzaWduKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF81X2ZyZXF1ZW5jeSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21pY19zZWxlY3Rpb24pKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NhYmluZXRfbW9kZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX21vZGVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yb29tbGV2ZWwpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNF9mcmVxdWVuY3kpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzZfZnJlcXVlbmN5KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV8xX25vdGVfdmFsdWUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzMpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzYpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19MSVZFKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hbXBfc3dpdGNoX3NlbGVjdCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fNCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fNSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcHJlX3Bvc3QpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfbW9kZWwpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3ZlcmJfbW9kZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RlbXBvX21zYikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGVtcG9fbHNiKSk7CisJaWYgKGZpcm13YXJlID49IDMwMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl93YWhfbW9kZWwpKTsKKwlpZiAoZmlybXdhcmUgPj0gMjE0KQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2J5cGFzc192b2x1bWUpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QUk8pKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2Z4X2xvb3Bfb25fb2ZmKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90d2Vha19wYXJhbV9zZWxlY3QpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FtcDFfZW5nYWdlKSk7CisJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzFfZ2FpbikpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMl9nYWluX19iYXNzKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzJfZ2FpbikpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfM19nYWluX19iYXNzKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzNfZ2FpbikpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNF9nYWluX19iYXNzKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF81X2dhaW5fX2Jhc3MpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNF9nYWluKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF82X2dhaW5fX2Jhc3MpKTsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgcG9kX3JlbW92ZV9maWxlcyhpbnQgZmlybXdhcmUsIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R3ZWFrKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2FoX3Bvc2l0aW9uKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jb21wcmVzc2lvbl9nYWluKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sX3BlZGFsX3Bvc2l0aW9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY29tcHJlc3Npb25fdGhyZXNob2xkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGFuKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYW1wX21vZGVsX3NldHVwKTsKKwlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYW1wX21vZGVsKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZHJpdmUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYXNzKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taWQpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9sb3dtaWQpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RyZWJsZSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2hpZ2htaWQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jaGFuX3ZvbCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX21peCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2VmZmVjdF9zZXR1cCk7CisJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMV9mcmVxdWVuY3kpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ByZXNlbmNlKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHJlYmxlX19iYXNzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbm9pc2VfZ2F0ZV9lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9nYXRlX3RocmVzaG9sZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2dhdGVfZGVjYXlfdGltZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NvbXBfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfdGltZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8xKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzFfbm90ZV92YWx1ZSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzJfZnJlcXVlbmN5X19iYXNzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3ZvbHVtZV9taXgpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8zKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfZW5hYmxlKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfdHlwZSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX2RlY2F5KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfdG9uZSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX3ByZV9kZWxheSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX3ByZV9wb3N0KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8yX2ZyZXF1ZW5jeSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzNfZnJlcXVlbmN5X19iYXNzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2FoX2VuYWJsZSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZHVsYXRpb25fbG9fY3V0KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcmV2ZXJiX2xvX2N1dCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV9wZWRhbF9taW5pbXVtKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2VxX3ByZV9wb3N0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX3ByZV9wb3N0KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlfbW9kZWwpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaV9kZWxheSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV80KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2Rfdm9sdW1lX21peCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wcmVfcG9zdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZHVsYXRpb25fbW9kZWwpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzNfZnJlcXVlbmN5KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNF9mcmVxdWVuY3lfX2Jhc3MpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uKTsKKwlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXFfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGFwKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX3R3ZWFrX3BlZGFsX2Fzc2lnbik7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzVfZnJlcXVlbmN5KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taWNfc2VsZWN0aW9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2FiaW5ldF9tb2RlbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX21vZGVsKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcm9vbWxldmVsKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF80X2ZyZXF1ZW5jeSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzZfZnJlcXVlbmN5KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fMik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzMpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV80KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fNSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzYpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0xJVkUpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYW1wX3N3aXRjaF9zZWxlY3QpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV80KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fNSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3ByZV9wb3N0KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9tb2RlbCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3ZlcmJfbW9kZWwpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90ZW1wb19tc2IpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90ZW1wb19sc2IpOworCWlmIChmaXJtd2FyZSA+PSAzMDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl93YWhfbW9kZWwpOworCWlmIChmaXJtd2FyZSA+PSAyMTQpCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9ieXBhc3Nfdm9sdW1lKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QUk8pKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZnhfbG9vcF9vbl9vZmYpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90d2Vha19wYXJhbV9zZWxlY3QpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9hbXAxX2VuZ2FnZSk7CisJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMV9nYWluKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMl9nYWluX19iYXNzKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8yX2dhaW4pOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8zX2dhaW5fX2Jhc3MpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzNfZ2Fpbik7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzRfZ2Fpbl9fYmFzcyk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzVfZ2Fpbl9fYmFzcyk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNF9nYWluKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNl9nYWluX19iYXNzKTsKK30KKworRVhQT1JUX1NZTUJPTChwb2RfY3JlYXRlX2ZpbGVzKTsKK0VYUE9SVF9TWU1CT0wocG9kX3JlbW92ZV9maWxlcyk7CisKK2ludCB2YXJpYXhfY3JlYXRlX2ZpbGVzKGludCBmaXJtd2FyZSwgaW50IHR5cGUsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYm9keSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV9lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfdHlwZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV9wb3NpdGlvbikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV9hbmdsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV9sZXZlbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl9lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfdHlwZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl9wb3NpdGlvbikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl9hbmdsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl9sZXZlbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwX3BoYXNlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jYXBhY2l0YW5jZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdG9uZV9yZXNpc3RhbmNlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfcmVzaXN0YW5jZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGFwZXIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RvbmVfZHVtcCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc2F2ZV90b25lKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfZHVtcCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nX2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nNikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nNSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nNCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nMykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nMikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nMSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lNikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lNSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lNCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lMykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lMikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lMSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4NikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4NSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4NCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4MykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4MikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4MSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwX3dpcmluZykpOworICByZXR1cm4gMDsKK30KKwordm9pZCB2YXJpYXhfcmVtb3ZlX2ZpbGVzKGludCBmaXJtd2FyZSwgaW50IHR5cGUsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYm9keSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV90eXBlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV9wb3NpdGlvbik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfYW5nbGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX2xldmVsKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl9lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX3R5cGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX3Bvc2l0aW9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl9hbmdsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfbGV2ZWwpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXBfcGhhc2UpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jYXBhY2l0YW5jZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RvbmVfcmVzaXN0YW5jZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV9yZXNpc3RhbmNlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGFwZXIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90b25lX2R1bXApOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zYXZlX3RvbmUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfZHVtcCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZ19lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmc2KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nNSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmczKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nMik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzEpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmU2KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lNSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmUzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lMik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTEpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taXg2KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4NSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taXgzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4Mik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDEpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXBfd2lyaW5nKTsKK30KKworRVhQT1JUX1NZTUJPTCh2YXJpYXhfY3JlYXRlX2ZpbGVzKTsKK0VYUE9SVF9TWU1CT0wodmFyaWF4X3JlbW92ZV9maWxlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29udHJvbC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbnRyb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE5NjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbnRyb2wuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgTElORTZfQ09OVFJPTF9ICisjZGVmaW5lIExJTkU2X0NPTlRST0xfSAorCisKKy8qKgorICAgTGlzdCBvZiBQT0R4dCBQcm8gY29udHJvbHMuCisgICBTZWUgQXBwZW5kaXggQyBvZiB0aGUgIlBPRHh0IChQcm8pIFBpbG90J3MgSGFuZGJvb2siIGJ5IExpbmU2LgorICAgQ29tbWVudHMgYWZ0ZXIgdGhlIG51bWJlciByZWZlciB0byB0aGUgUE9EeHQgUHJvIGZpcm13YXJlIHZlcnNpb24gcmVxdWlyZWQKKyAgIGZvciB0aGlzIGZlYXR1cmUuCisqLworZW51bSB7CisJUE9EX3R3ZWFrICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAgMSwKKwlQT0Rfd2FoX3Bvc2l0aW9uICAgICAgICAgICAgICAgICAgID0gICA0LAorCVBPRF9jb21wcmVzc2lvbl9nYWluICAgICAgICAgICAgICAgPSAgIDUsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0Rfdm9sX3BlZGFsX3Bvc2l0aW9uICAgICAgICAgICAgID0gICA3LAorCVBPRF9jb21wcmVzc2lvbl90aHJlc2hvbGQgICAgICAgICAgPSAgIDksCisJUE9EX3BhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAxMCwKKwlQT0RfYW1wX21vZGVsX3NldHVwICAgICAgICAgICAgICAgID0gIDExLAorCVBPRF9hbXBfbW9kZWwgICAgICAgICAgICAgICAgICAgICAgPSAgMTIsICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2RyaXZlICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAxMywKKwlQT0RfYmFzcyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gIDE0LAorCVBPRF9taWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgMTUsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfbG93bWlkICAgICAgICAgICAgICAgICAgICAgICAgID0gIDE1LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF90cmVibGUgICAgICAgICAgICAgICAgICAgICAgICAgPSAgMTYsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfaGlnaG1pZCAgICAgICAgICAgICAgICAgICAgICAgID0gIDE2LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF9jaGFuX3ZvbCAgICAgICAgICAgICAgICAgICAgICAgPSAgMTcsCisJUE9EX3JldmVyYl9taXggICAgICAgICAgICAgICAgICAgICA9ICAxOCwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9lZmZlY3Rfc2V0dXAgICAgICAgICAgICAgICAgICAgPSAgMTksCisJUE9EX2JhbmRfMV9mcmVxdWVuY3kgICAgICAgICAgICAgICA9ICAyMCwgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfcHJlc2VuY2UgICAgICAgICAgICAgICAgICAgICAgID0gIDIxLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX3RyZWJsZV9fYmFzcyAgICAgICAgICAgICAgICAgICA9ICAyMSwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0Rfbm9pc2VfZ2F0ZV9lbmFibGUgICAgICAgICAgICAgID0gIDIyLAorCVBPRF9nYXRlX3RocmVzaG9sZCAgICAgICAgICAgICAgICAgPSAgMjMsCisJUE9EX2dhdGVfZGVjYXlfdGltZSAgICAgICAgICAgICAgICA9ICAyNCwKKwlQT0Rfc3RvbXBfZW5hYmxlICAgICAgICAgICAgICAgICAgID0gIDI1LAorCVBPRF9jb21wX2VuYWJsZSAgICAgICAgICAgICAgICAgICAgPSAgMjYsCisJUE9EX3N0b21wX3RpbWUgICAgICAgICAgICAgICAgICAgICA9ICAyNywKKwlQT0RfZGVsYXlfZW5hYmxlICAgICAgICAgICAgICAgICAgID0gIDI4LAorCVBPRF9tb2RfcGFyYW1fMSAgICAgICAgICAgICAgICAgICAgPSAgMjksCisJUE9EX2RlbGF5X3BhcmFtXzEgICAgICAgICAgICAgICAgICA9ICAzMCwKKwlQT0RfZGVsYXlfcGFyYW1fMV9ub3RlX3ZhbHVlICAgICAgID0gIDMxLAorCVBPRF9iYW5kXzJfZnJlcXVlbmN5X19iYXNzICAgICAgICAgPSAgMzIsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfZGVsYXlfcGFyYW1fMiAgICAgICAgICAgICAgICAgID0gIDMzLAorCVBPRF9kZWxheV92b2x1bWVfbWl4ICAgICAgICAgICAgICAgPSAgMzQsCisJUE9EX2RlbGF5X3BhcmFtXzMgICAgICAgICAgICAgICAgICA9ICAzNSwKKwlQT0RfcmV2ZXJiX2VuYWJsZSAgICAgICAgICAgICAgICAgID0gIDM2LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX3JldmVyYl90eXBlICAgICAgICAgICAgICAgICAgICA9ICAzNywgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9yZXZlcmJfZGVjYXkgICAgICAgICAgICAgICAgICAgPSAgMzgsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfcmV2ZXJiX3RvbmUgICAgICAgICAgICAgICAgICAgID0gIDM5LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX3JldmVyYl9wcmVfZGVsYXkgICAgICAgICAgICAgICA9ICA0MCwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9yZXZlcmJfcHJlX3Bvc3QgICAgICAgICAgICAgICAgPSAgNDEsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfYmFuZF8yX2ZyZXF1ZW5jeSAgICAgICAgICAgICAgID0gIDQyLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovICAgICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfM19mcmVxdWVuY3lfX2Jhc3MgICAgICAgICA9ICA0MiwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF93YWhfZW5hYmxlICAgICAgICAgICAgICAgICAgICAgPSAgNDMsCisJUE9EX21vZHVsYXRpb25fbG9fY3V0ICAgICAgICAgICAgICA9ICA0NCwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0RfZGVsYXlfcmV2ZXJiX2xvX2N1dCAgICAgICAgICAgID0gIDQ1LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF92b2x1bWVfcGVkYWxfbWluaW11bSAgICAgICAgICAgPSAgNDYsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8gICAgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfZXFfcHJlX3Bvc3QgICAgICAgICAgICAgICAgICAgID0gIDQ2LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX3ZvbHVtZV9wcmVfcG9zdCAgICAgICAgICAgICAgICA9ICA0NywKKwlQT0RfZGlfbW9kZWwgICAgICAgICAgICAgICAgICAgICAgID0gIDQ4LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF9kaV9kZWxheSAgICAgICAgICAgICAgICAgICAgICAgPSAgNDksICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX21vZF9lbmFibGUgICAgICAgICAgICAgICAgICAgICA9ICA1MCwKKwlQT0RfbW9kX3BhcmFtXzFfbm90ZV92YWx1ZSAgICAgICAgID0gIDUxLAorCVBPRF9tb2RfcGFyYW1fMiAgICAgICAgICAgICAgICAgICAgPSAgNTIsCisJUE9EX21vZF9wYXJhbV8zICAgICAgICAgICAgICAgICAgICA9ICA1MywKKwlQT0RfbW9kX3BhcmFtXzQgICAgICAgICAgICAgICAgICAgID0gIDU0LAorCVBPRF9tb2RfcGFyYW1fNSAgICAgICAgICAgICAgICAgICAgPSAgNTUsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX21vZF92b2x1bWVfbWl4ICAgICAgICAgICAgICAgICA9ICA1NiwKKwlQT0RfbW9kX3ByZV9wb3N0ICAgICAgICAgICAgICAgICAgID0gIDU3LAorCVBPRF9tb2R1bGF0aW9uX21vZGVsICAgICAgICAgICAgICAgPSAgNTgsCisJUE9EX2JhbmRfM19mcmVxdWVuY3kgICAgICAgICAgICAgICA9ICA2MCwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLyAgICAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzRfZnJlcXVlbmN5X19iYXNzICAgICAgICAgPSAgNjAsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfbW9kX3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbiAgID0gIDYxLAorCVBPRF9kZWxheV9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24gPSAgNjIsCisJUE9EX2VxX2VuYWJsZSAgICAgICAgICAgICAgICAgICAgICA9ICA2MywgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfdGFwICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gIDY0LAorCVBPRF92b2x1bWVfdHdlYWtfcGVkYWxfYXNzaWduICAgICAgPSAgNjUsCisJUE9EX2JhbmRfNV9mcmVxdWVuY3kgICAgICAgICAgICAgICA9ICA2OCwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF90dW5lciAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgNjksCisJUE9EX21pY19zZWxlY3Rpb24gICAgICAgICAgICAgICAgICA9ICA3MCwKKwlQT0RfY2FiaW5ldF9tb2RlbCAgICAgICAgICAgICAgICAgID0gIDcxLAorCVBPRF9zdG9tcF9tb2RlbCAgICAgICAgICAgICAgICAgICAgPSAgNzUsCisJUE9EX3Jvb21sZXZlbCAgICAgICAgICAgICAgICAgICAgICA9ICA3NiwKKwlQT0RfYmFuZF80X2ZyZXF1ZW5jeSAgICAgICAgICAgICAgID0gIDc3LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovICAgICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfNl9mcmVxdWVuY3kgICAgICAgICAgICAgICA9ICA3NywgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9zdG9tcF9wYXJhbV8xX25vdGVfdmFsdWUgICAgICAgPSAgNzgsCisJUE9EX3N0b21wX3BhcmFtXzIgICAgICAgICAgICAgICAgICA9ICA3OSwKKwlQT0Rfc3RvbXBfcGFyYW1fMyAgICAgICAgICAgICAgICAgID0gIDgwLAorCVBPRF9zdG9tcF9wYXJhbV80ICAgICAgICAgICAgICAgICAgPSAgODEsCisJUE9EX3N0b21wX3BhcmFtXzUgICAgICAgICAgICAgICAgICA9ICA4MiwKKwlQT0Rfc3RvbXBfcGFyYW1fNiAgICAgICAgICAgICAgICAgID0gIDgzLAorCVBPRF9hbXBfc3dpdGNoX3NlbGVjdCAgICAgICAgICAgICAgPSAgODQsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfTElWRSAqLworCVBPRF9kZWxheV9wYXJhbV80ICAgICAgICAgICAgICAgICAgPSAgODUsCisJUE9EX2RlbGF5X3BhcmFtXzUgICAgICAgICAgICAgICAgICA9ICA4NiwKKwlQT0RfZGVsYXlfcHJlX3Bvc3QgICAgICAgICAgICAgICAgID0gIDg3LAorCVBPRF9kZWxheV9tb2RlbCAgICAgICAgICAgICAgICAgICAgPSAgODgsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfZGVsYXlfdmVyYl9tb2RlbCAgICAgICAgICAgICAgID0gIDg4LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF90ZW1wb19tc2IgICAgICAgICAgICAgICAgICAgICAgPSAgODksCisJUE9EX3RlbXBvX2xzYiAgICAgICAgICAgICAgICAgICAgICA9ICA5MCwKKwlQT0Rfd2FoX21vZGVsICAgICAgICAgICAgICAgICAgICAgID0gIDkxLCAgLyogZmlybXdhcmU6IDMuMCAqLworCVBPRF9ieXBhc3Nfdm9sdW1lICAgICAgICAgICAgICAgICAgPSAxMDUsICAvKiBmaXJtd2FyZTogMi4xNCAqLworCVBPRF9meF9sb29wX29uX29mZiAgICAgICAgICAgICAgICAgPSAxMDcsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUFJPICovCisJUE9EX3R3ZWFrX3BhcmFtX3NlbGVjdCAgICAgICAgICAgICA9IDEwOCwKKwlQT0RfYW1wMV9lbmdhZ2UgICAgICAgICAgICAgICAgICAgID0gMTExLAorCVBPRF9iYW5kXzFfZ2FpbiAgICAgICAgICAgICAgICAgICAgPSAxMTQsICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfMl9nYWluX19iYXNzICAgICAgICAgICAgICA9IDExNSwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzJfZ2FpbiAgICAgICAgICAgICAgICAgICAgPSAxMTYsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8gICAgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF8zX2dhaW5fX2Jhc3MgICAgICAgICAgICAgID0gMTE2LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfM19nYWluICAgICAgICAgICAgICAgICAgICA9IDExNywgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLyAgICAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzRfZ2Fpbl9fYmFzcyAgICAgICAgICAgICAgPSAxMTcsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF81X2dhaW5fX2Jhc3MgICAgICAgICAgICAgID0gMTE4LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfNF9nYWluICAgICAgICAgICAgICAgICAgICA9IDExOSwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLyAgICAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzZfZ2Fpbl9fYmFzcyAgICAgICAgICAgICAgPSAxMTkgICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KK307CisKKy8qKgorICAgTGlzdCBvZiBWYXJpYXggd29ya2JlbmNoIGNvbnRyb2xzIChkdW1wKS4KKyovCitlbnVtIHsKKwlWQVJJQVhfYm9keSAgICAgICAgICAgICAgICAgICAgICAgID0gICAzLAorCVZBUklBWF9waWNrdXAxX2VuYWJsZSAgICAgICAgICAgICAgPSAgIDQsICAvKiAwOiBlbmFibGVkLCAxOiBkaXNhYmxlZCAqLworCVZBUklBWF9waWNrdXAxX3R5cGUgICAgICAgICAgICAgICAgPSAgIDgsCisJVkFSSUFYX3BpY2t1cDFfcG9zaXRpb24gICAgICAgICAgICA9ICAgOSwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9waWNrdXAxX2FuZ2xlICAgICAgICAgICAgICAgPSAgMTIsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfcGlja3VwMV9sZXZlbCAgICAgICAgICAgICAgID0gIDE1LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3BpY2t1cDJfZW5hYmxlICAgICAgICAgICAgICA9ICAxOCwgIC8qIDA6IGVuYWJsZWQsIDE6IGRpc2FibGVkICovCisJVkFSSUFYX3BpY2t1cDJfdHlwZSAgICAgICAgICAgICAgICA9ICAyMiwKKwlWQVJJQVhfcGlja3VwMl9wb3NpdGlvbiAgICAgICAgICAgID0gIDIzLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3BpY2t1cDJfYW5nbGUgICAgICAgICAgICAgICA9ICAyNiwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9waWNrdXAyX2xldmVsICAgICAgICAgICAgICAgPSAgMjksICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfcGlja3VwX3BoYXNlICAgICAgICAgICAgICAgID0gIDMyLCAgLyogMDogaW4gcGhhc2UsIDE6IG91dCBvZiBwaGFzZSAqLworCVZBUklBWF9jYXBhY2l0YW5jZSAgICAgICAgICAgICAgICAgPSAgMzMsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfdG9uZV9yZXNpc3RhbmNlICAgICAgICAgICAgID0gIDM2LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3ZvbHVtZV9yZXNpc3RhbmNlICAgICAgICAgICA9ICAzOSwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF90YXBlciAgICAgICAgICAgICAgICAgICAgICAgPSAgNDIsICAvKiAwOiBMaW5lYXIsIDE6IEF1ZGlvICovCisJVkFSSUFYX3RvbmVfZHVtcCAgICAgICAgICAgICAgICAgICA9ICA0MywgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9zYXZlX3RvbmUgICAgICAgICAgICAgICAgICAgPSAgNDYsCisJVkFSSUFYX3ZvbHVtZV9kdW1wICAgICAgICAgICAgICAgICA9ICA0NywgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF90dW5pbmdfZW5hYmxlICAgICAgICAgICAgICAgPSAgNTAsCisJVkFSSUFYX3R1bmluZzYgICAgICAgICAgICAgICAgICAgICA9ICA1MSwKKwlWQVJJQVhfdHVuaW5nNSAgICAgICAgICAgICAgICAgICAgID0gIDUyLAorCVZBUklBWF90dW5pbmc0ICAgICAgICAgICAgICAgICAgICAgPSAgNTMsCisJVkFSSUFYX3R1bmluZzMgICAgICAgICAgICAgICAgICAgICA9ICA1NCwKKwlWQVJJQVhfdHVuaW5nMiAgICAgICAgICAgICAgICAgICAgID0gIDU1LAorCVZBUklBWF90dW5pbmcxICAgICAgICAgICAgICAgICAgICAgPSAgNTYsCisJVkFSSUFYX2RldHVuZTYgICAgICAgICAgICAgICAgICAgICA9ICA1NywgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9kZXR1bmU1ICAgICAgICAgICAgICAgICAgICAgPSAgNjAsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfZGV0dW5lNCAgICAgICAgICAgICAgICAgICAgID0gIDYzLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX2RldHVuZTMgICAgICAgICAgICAgICAgICAgICA9ICA2NiwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9kZXR1bmUyICAgICAgICAgICAgICAgICAgICAgPSAgNjksICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfZGV0dW5lMSAgICAgICAgICAgICAgICAgICAgID0gIDcyLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX21peDYgICAgICAgICAgICAgICAgICAgICAgICA9ICA3NSwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9taXg1ICAgICAgICAgICAgICAgICAgICAgICAgPSAgNzgsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfbWl4NCAgICAgICAgICAgICAgICAgICAgICAgID0gIDgxLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX21peDMgICAgICAgICAgICAgICAgICAgICAgICA9ICA4NCwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9taXgyICAgICAgICAgICAgICAgICAgICAgICAgPSAgODcsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfbWl4MSAgICAgICAgICAgICAgICAgICAgICAgID0gIDkwLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3BpY2t1cF93aXJpbmcgICAgICAgICAgICAgICA9ICA5NiAgIC8qIDA6IHBhcmFsbGVsLCAxOiBzZXJpZXMgKi8KK307CisKKy8qKgorICAgTGlzdCBvZiBWYXJpYXggd29ya2JlbmNoIGNvbnRyb2xzIChNSURJKS4KKyovCitlbnVtIHsKKwlWQVJJQVhNSURJX3ZvbHVtZSAgICAgICAgICAgICAgICAgID0gICA3LAorCVZBUklBWE1JRElfdG9uZSAgICAgICAgICAgICAgICAgICAgPSAgNzksCit9OworCisKK2V4dGVybiBpbnQgcG9kX2NyZWF0ZV9maWxlcyhpbnQgZmlybXdhcmUsIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcG9kX3JlbW92ZV9maWxlcyhpbnQgZmlybXdhcmUsIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCB2YXJpYXhfY3JlYXRlX2ZpbGVzKGludCBmaXJtd2FyZSwgaW50IHR5cGUsIHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB2YXJpYXhfcmVtb3ZlX2ZpbGVzKGludCBmaXJtd2FyZSwgaW50IHR5cGUsIHN0cnVjdCBkZXZpY2UgKmRldik7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhMjBkMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYwpAQCAtMCwwICsxLDExMDIgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAiY2FwdHVyZS5oIgorI2luY2x1ZGUgImNvbnRyb2wuaCIKKyNpbmNsdWRlICJtaWRpLmgiCisjaW5jbHVkZSAicGxheWJhY2suaCIKKyNpbmNsdWRlICJwb2QuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInRvbmVwb3J0LmgiCisjaW5jbHVkZSAidXNiZGVmcy5oIgorI2luY2x1ZGUgInZhcmlheC5oIgorCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgIk1hcmt1cyBHcmFibmVyIDxncmFibmVyQGljZy50dWdyYXouYXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAgICAiTGluZTYgVVNCIERyaXZlciIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuOC4wIgorCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBsaW5lNl9pZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX0JBU1NQT0RYVCkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTykgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1BPQ0tFVFBPRCkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RYMykgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RYM0xJVkUpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9EWFQpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9EWFRMSVZFKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1BPRFhUUFJPKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMSkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDIpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfVkFSSUFYKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbGluZTZfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGxpbmU2X3Byb3BlcnRpZXMgbGluZTZfcHJvcGVydGllc190YWJsZVtdID0geworCXsgIkJhc3NQT0R4dCIsICAgICAgICBMSU5FNl9CSVRfQkFTU1BPRFhULCAgICAgTElORTZfQklUX0NPTlRST0xfUENNIH0sCisJeyAiQmFzc1BPRHh0IExpdmUiLCAgIExJTkU2X0JJVF9CQVNTUE9EWFRMSVZFLCBMSU5FNl9CSVRfQ09OVFJPTF9QQ00gfSwKKwl7ICJCYXNzUE9EeHQgUHJvIiwgICAgTElORTZfQklUX0JBU1NQT0RYVFBSTywgIExJTkU2X0JJVF9DT05UUk9MX1BDTSB9LAorCXsgIkd1aXRhclBvcnQiLCAgICAgICBMSU5FNl9CSVRfR1VJVEFSUE9SVCwgICAgTElORTZfQklUX1BDTSAgICAgICAgIH0sCisJeyAiUG9ja2V0IFBPRCIsICAgICAgIExJTkU2X0JJVF9QT0NLRVRQT0QsICAgICBMSU5FNl9CSVRfQ09OVFJPTF9QQ00gfSwKKwl7ICJQT0QgWDMiLCAgICAgICAgICAgTElORTZfQklUX1BPRFgzLCAgICAgICAgIExJTkU2X0JJVF9QQ00gICAgICAgICB9LAorCXsgIlBPRCBYMyBMaXZlIiwgICAgICBMSU5FNl9CSVRfUE9EWDNMSVZFLCAgICAgTElORTZfQklUX1BDTSAgICAgICAgIH0sCisJeyAiUE9EeHQiLCAgICAgICAgICAgIExJTkU2X0JJVF9QT0RYVCwgICAgICAgICBMSU5FNl9CSVRfQ09OVFJPTF9QQ00gfSwKKwl7ICJQT0R4dCBMaXZlIiwgICAgICAgTElORTZfQklUX1BPRFhUTElWRSwgICAgIExJTkU2X0JJVF9DT05UUk9MX1BDTSB9LAorCXsgIlBPRHh0IFBybyIsICAgICAgICBMSU5FNl9CSVRfUE9EWFRQUk8sICAgICAgTElORTZfQklUX0NPTlRST0xfUENNIH0sCisJeyAiVG9uZVBvcnQgR1giLCAgICAgIExJTkU2X0JJVF9UT05FUE9SVF9HWCwgICBMSU5FNl9CSVRfUENNICAgICAgICAgfSwKKwl7ICJUb25lUG9ydCBVWDEiLCAgICAgTElORTZfQklUX1RPTkVQT1JUX1VYMSwgIExJTkU2X0JJVF9QQ00gICAgICAgICB9LAorCXsgIlRvbmVQb3J0IFVYMiIsICAgICBMSU5FNl9CSVRfVE9ORVBPUlRfVVgyLCAgTElORTZfQklUX1BDTSAgICAgICAgIH0sCisJeyAiVmFyaWF4IFdvcmtiZW5jaCIsIExJTkU2X0JJVF9WQVJJQVgsICAgICAgICBMSU5FNl9CSVRfQ09OVFJPTCAgICAgfQorfTsKKworCisvKgorCVRoaXMgaXMgTGluZTYncyBNSURJIG1hbnVmYWN0dXJlciBJRC4KKyovCitjb25zdCB1bnNpZ25lZCBjaGFyIGxpbmU2X21pZGlfaWRbXSA9IHsgMHgwMCwgMHgwMSwgMHgwYyB9OworCitzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNl9kZXZpY2VzW0xJTkU2X01BWF9ERVZJQ0VTXTsKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsaW5lNl93b3JrcXVldWU7CisKKworLyoqCisJIENsYXNzIGZvciBhc3luY2hyb25vdXMgbWVzc2FnZXMuCisqLworc3RydWN0IG1lc3NhZ2UgeworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCWNvbnN0IGNoYXIgKmJ1ZmZlcjsKKwlpbnQgc2l6ZTsKKwlpbnQgZG9uZTsKK307CisKKworLyoKKwlGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9kYXRhX3JlY2VpdmVkKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmNfcGFydChzdHJ1Y3QgbWVzc2FnZSAqbXNnLAorCQkJCQkgICAgIHN0cnVjdCB1cmIgKnVyYik7CisKKworLyoKKwlTdGFydCB0byBsaXN0ZW4gb24gZW5kcG9pbnQuCisqLworc3RhdGljIGludCBsaW5lNl9zdGFydF9saXN0ZW4oc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCit7CisJdXNiX2ZpbGxfaW50X3VyYihsaW5lNi0+dXJiX2xpc3RlbiwgbGluZTYtPnVzYmRldiwKKwkJCSB1c2JfcmN2aW50cGlwZShsaW5lNi0+dXNiZGV2LCBsaW5lNi0+ZXBfY29udHJvbF9yZWFkKSwKKwkJCSBsaW5lNi0+YnVmZmVyX2xpc3RlbiwgTElORTZfQlVGU0laRV9MSVNURU4sCisJCQkgbGluZTZfZGF0YV9yZWNlaXZlZCwgbGluZTYsIGxpbmU2LT5pbnRlcnZhbCk7CisJbGluZTYtPnVyYl9saXN0ZW4tPmFjdHVhbF9sZW5ndGggPSAwOworCXJldHVybiB1c2Jfc3VibWl0X3VyYihsaW5lNi0+dXJiX2xpc3RlbiwgR0ZQX0tFUk5FTCk7Cit9CisKKyNpZiBET19EVU1QX0FOWQorLyoKKwlXcml0ZSBoZXhkdW1wIHRvIHN5c2xvZy4KKyovCit2b2lkIGxpbmU2X3dyaXRlX2hleGR1bXAoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGNoYXIgZGlyLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpCit7CisJc3RhdGljIGNvbnN0IGludCBCWVRFU19QRVJfTElORSA9IDg7CisJY2hhciBoZXhkdW1wWzEwMF07CisJY2hhciBhc2NbQllURVNfUEVSX0xJTkUgKyAxXTsKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IEJZVEVTX1BFUl9MSU5FKSB7CisJCWludCBoZXhkdW1wc2l6ZSA9IHNpemVvZihoZXhkdW1wKTsKKwkJY2hhciAqcCA9IGhleGR1bXA7CisJCWludCBuID0gbWluKHNpemUgLSBpLCBCWVRFU19QRVJfTElORSk7CisJCWFzY1tuXSA9IDA7CisKKwkJZm9yIChqID0gMDsgaiA8IEJZVEVTX1BFUl9MSU5FOyArK2opIHsKKwkJCWludCBieXRlczsKKworCQkJaWYgKGogPCBuKSB7CisJCQkJdW5zaWduZWQgY2hhciB2YWwgPSBidWZmZXJbaSArIGpdOworCQkJCWJ5dGVzID0gc25wcmludGYocCwgaGV4ZHVtcHNpemUsICIgJTAyWCIsIHZhbCk7CisJCQkJYXNjW2pdID0gKCh2YWwgPj0gMHgyMCkgJiYgKHZhbCA8IDB4N2YpKSA/IHZhbCA6ICcuJzsKKwkJCX0gZWxzZQorCQkJCWJ5dGVzID0gc25wcmludGYocCwgaGV4ZHVtcHNpemUsICIgICAiKTsKKworCQkJaWYgKGJ5dGVzID4gaGV4ZHVtcHNpemUpCisJCQkJYnJlYWs7ICAvKiBidWZmZXIgb3ZlcmZsb3cgKi8KKworCQkJcCArPSBieXRlczsKKwkJCWhleGR1bXBzaXplIC09IGJ5dGVzOworCQl9CisKKwkJZGV2X2luZm8obGluZTYtPmlmY2RldiwgIiVjJTA0WDolcyAlc1xuIiwgZGlyLCBpLCBoZXhkdW1wLCBhc2MpOworCX0KK30KKyNlbmRpZgorCisjaWYgRE9fRFVNUF9VUkJfUkVDRUlWRQorLyoKKwlEdW1wIFVSQiBkYXRhIHRvIHN5c2xvZy4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9kdW1wX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSAoc3RydWN0IHVzYl9saW5lNiAqKXVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cyA8IDApCisJCXJldHVybjsKKworCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTYsICdSJywgKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgICB1cmItPmFjdHVhbF9sZW5ndGgpOworfQorI2VuZGlmCisKKy8qCisJU2VuZCByYXcgbWVzc2FnZSBpbiBwaWVjZXMgb2Ygd01heFBhY2tldFNpemUgYnl0ZXMuCisqLworaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCSAgIGludCBzaXplKQoreworCWludCBpLCBkb25lID0gMDsKKworI2lmIERPX0RVTVBfVVJCX1NFTkQKKwlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2LCAnUycsIGJ1ZmZlciwgc2l6ZSk7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGxpbmU2LT5tYXhfcGFja2V0X3NpemUpIHsKKwkJaW50IHBhcnRpYWw7CisJCWNvbnN0IGNoYXIgKmZyYWdfYnVmID0gYnVmZmVyICsgaTsKKwkJaW50IGZyYWdfc2l6ZSA9IG1pbihsaW5lNi0+bWF4X3BhY2tldF9zaXplLCBzaXplIC0gaSk7CisJCWludCByZXR2YWw7CisKKwkJcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2cobGluZTYtPnVzYmRldiwKKwkJCQkJICAgdXNiX3NuZGludHBpcGUobGluZTYtPnVzYmRldiwKKwkJCQkJCQkgIGxpbmU2LT5lcF9jb250cm9sX3dyaXRlKSwKKwkJCQkJICAgKGNoYXIgKilmcmFnX2J1ZiwgZnJhZ19zaXplLAorCQkJCQkgICAmcGFydGlhbCwgTElORTZfVElNRU9VVCAqIEhaKTsKKworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCisJCQkJInVzYl9pbnRlcnJ1cHRfbXNnIGZhaWxlZCAoJWQpXG4iLCByZXR2YWwpOworCQkJYnJlYWs7CisJCX0KKworCQlkb25lICs9IGZyYWdfc2l6ZTsKKwl9CisKKwlyZXR1cm4gZG9uZTsKK30KKworLyoKKwlOb3RpZmljYXRpb24gb2YgY29tcGxldGlvbiBvZiBhc3luY2hyb25vdXMgcmVxdWVzdCB0cmFuc21pc3Npb24uCisqLworc3RhdGljIHZvaWQgbGluZTZfYXN5bmNfcmVxdWVzdF9zZW50KHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgbWVzc2FnZSAqbXNnID0gKHN0cnVjdCBtZXNzYWdlICopdXJiLT5jb250ZXh0OworCisJaWYgKG1zZy0+ZG9uZSA+PSBtc2ctPnNpemUpIHsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCWtmcmVlKG1zZyk7CisJfSBlbHNlCisJCWxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmNfcGFydChtc2csIHVyYik7Cit9CisKKy8qCisJQXN5bmNocm9ub3VzbHkgc2VuZCBwYXJ0IG9mIGEgcmF3IG1lc3NhZ2UuCisqLworc3RhdGljIGludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jX3BhcnQoc3RydWN0IG1lc3NhZ2UgKm1zZywKKwkJCQkJICAgICBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IG1zZy0+bGluZTY7CisJaW50IGRvbmUgPSBtc2ctPmRvbmU7CisJaW50IGJ5dGVzID0gbWluKG1zZy0+c2l6ZSAtIGRvbmUsIGxpbmU2LT5tYXhfcGFja2V0X3NpemUpOworCisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGxpbmU2LT51c2JkZXYsCisJCQkgdXNiX3NuZGludHBpcGUobGluZTYtPnVzYmRldiwgbGluZTYtPmVwX2NvbnRyb2xfd3JpdGUpLAorCQkJIChjaGFyICopbXNnLT5idWZmZXIgKyBkb25lLCBieXRlcywKKwkJCSBsaW5lNl9hc3luY19yZXF1ZXN0X3NlbnQsIG1zZywgbGluZTYtPmludGVydmFsKTsKKworI2lmIERPX0RVTVBfVVJCX1NFTkQKKwlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2LCAnUycsIChjaGFyICopbXNnLT5idWZmZXIgKyBkb25lLCBieXRlcyk7CisjZW5kaWYKKworCW1zZy0+ZG9uZSArPSBieXRlczsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAoJWQpXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCk7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlrZnJlZShtc2cpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlBc3luY2hyb25vdXNseSBzZW5kIHJhdyBtZXNzYWdlLgorKi8KK2ludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkJIGludCBzaXplKQoreworCXN0cnVjdCBtZXNzYWdlICptc2c7CisJc3RydWN0IHVyYiAqdXJiOworCisJLyogY3JlYXRlIG1lc3NhZ2U6ICovCisJbXNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lc3NhZ2UpLCBHRlBfQVRPTUlDKTsKKworCWlmIChtc2cgPT0gTlVMTCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogY3JlYXRlIFVSQjogKi8KKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCisJaWYgKHVyYiA9PSBOVUxMKSB7CisJCWtmcmVlKG1zZyk7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzZXQgbWVzc2FnZSBkYXRhOiAqLworCW1zZy0+bGluZTYgPSBsaW5lNjsKKwltc2ctPmJ1ZmZlciA9IGJ1ZmZlcjsKKwltc2ctPnNpemUgPSBzaXplOworCW1zZy0+ZG9uZSA9IDA7CisKKwkvKiBzdGFydCBzZW5kaW5nOiAqLworCXJldHVybiBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jX3BhcnQobXNnLCB1cmIpOworfQorCisvKgorCVNlbmQgc3lzZXggbWVzc2FnZSBpbiBwaWVjZXMgb2Ygd01heFBhY2tldFNpemUgYnl0ZXMuCisqLworaW50IGxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkJICAgICBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gbGluZTZfc2VuZF9yYXdfbWVzc2FnZShsaW5lNiwgYnVmZmVyLCBzaXplICsgU1lTRVhfRVhUUkFfU0laRSkgLSBTWVNFWF9FWFRSQV9TSVpFOworfQorCisvKgorCUFsbG9jYXRlIGJ1ZmZlciBmb3Igc3lzZXggbWVzc2FnZSBhbmQgcHJlcGFyZSBoZWFkZXIuCisJQHBhcmFtIGNvZGUgc3lzZXggbWVzc2FnZSBjb2RlCisJQHBhcmFtIHNpemUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gY29kZSBhbmQgc3lzZXggZW5kCisqLworY2hhciAqbGluZTZfYWxsb2Nfc3lzZXhfYnVmZmVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgY29kZTEsIGludCBjb2RlMiwKKwkJCSAgICAgICBpbnQgc2l6ZSkKK3sKKwljaGFyICpidWZmZXIgPSBrbWFsbG9jKHNpemUgKyBTWVNFWF9FWFRSQV9TSVpFLCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlidWZmZXJbMF0gPSBMSU5FNl9TWVNFWF9CRUdJTjsKKwltZW1jcHkoYnVmZmVyICsgMSwgbGluZTZfbWlkaV9pZCwgc2l6ZW9mKGxpbmU2X21pZGlfaWQpKTsKKwlidWZmZXJbc2l6ZW9mKGxpbmU2X21pZGlfaWQpICsgMV0gPSBjb2RlMTsKKwlidWZmZXJbc2l6ZW9mKGxpbmU2X21pZGlfaWQpICsgMl0gPSBjb2RlMjsKKwlidWZmZXJbc2l6ZW9mKGxpbmU2X21pZGlfaWQpICsgMyArIHNpemVdID0gTElORTZfU1lTRVhfRU5EOworCXJldHVybiBidWZmZXI7Cit9CisKKy8qCisJTm90aWZpY2F0aW9uIG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgTGluZTYgZGV2aWNlLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2RhdGFfcmVjZWl2ZWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gKHN0cnVjdCB1c2JfbGluZTYgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IE1pZGlCdWZmZXIgKm1iID0gJmxpbmU2LT5saW5lNm1pZGktPm1pZGlidWZfaW47CisJaW50IGRvbmU7CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikKKwkJcmV0dXJuOworCisjaWYgRE9fRFVNUF9VUkJfUkVDRUlWRQorCWxpbmU2X2R1bXBfdXJiKHVyYik7CisjZW5kaWYKKworCWRvbmUgPSBtaWRpYnVmX3dyaXRlKG1iLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCWlmIChkb25lIDwgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCW1pZGlidWZfaWdub3JlKG1iLCBkb25lKTsKKwkJREVCVUdfTUVTU0FHRVMoZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiJWQgJWQgYnVmZmVyIG92ZXJmbG93IC0gbWVzc2FnZSBza2lwcGVkXG4iLCBkb25lLCB1cmItPmFjdHVhbF9sZW5ndGgpKTsKKwl9CisKKwlmb3IgKDs7KSB7CisJCWRvbmUgPSBtaWRpYnVmX3JlYWQobWIsIGxpbmU2LT5idWZmZXJfbWVzc2FnZSwgTElORTZfTUVTU0FHRV9NQVhMRU4pOworCisJCWlmIChkb25lID09IDApCisJCQlicmVhazsKKworCQkvKiBNSURJIGlucHV0IGZpbHRlciAqLworCQlpZiAobWlkaWJ1Zl9za2lwX21lc3NhZ2UobWIsIGxpbmU2LT5saW5lNm1pZGktPm1pZGlfbWFza19yZWNlaXZlKSkKKwkJCWNvbnRpbnVlOworCisJCWxpbmU2LT5tZXNzYWdlX2xlbmd0aCA9IGRvbmU7CisjaWYgRE9fRFVNUF9NSURJX1JFQ0VJVkUKKwkJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNiwgJ3InLCBsaW5lNi0+YnVmZmVyX21lc3NhZ2UsIGRvbmUpOworI2VuZGlmCisJCWxpbmU2X21pZGlfcmVjZWl2ZShsaW5lNiwgbGluZTYtPmJ1ZmZlcl9tZXNzYWdlLCBkb25lKTsKKworCQlzd2l0Y2ggKGxpbmU2LT51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSB7CisJCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgorCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6CisJCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgorCQljYXNlIExJTkU2X0RFVklEX1BPRFhUOgorCQljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgorCQljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKKwkJCXBvZF9wcm9jZXNzX21lc3NhZ2UoKHN0cnVjdCB1c2JfbGluZTZfcG9kICopbGluZTYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVExJVkU6CisJCQlzd2l0Y2ggKGxpbmU2LT5pbnRlcmZhY2VfbnVtYmVyKSB7CisJCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfUE9EOgorCQkJCXBvZF9wcm9jZXNzX21lc3NhZ2UoKHN0cnVjdCB1c2JfbGluZTZfcG9kICopbGluZTYpOworCQkJCWJyZWFrOworCisJCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfVkFSSUFYOgorCQkJCXZhcmlheF9wcm9jZXNzX21lc3NhZ2UoKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICopbGluZTYpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIlBPRHh0IExpdmUgaW50ZXJmYWNlICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGxpbmU2LT5pbnRlcmZhY2VfbnVtYmVyKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgTElORTZfREVWSURfVkFSSUFYOgorCQkJdmFyaWF4X3Byb2Nlc3NfbWVzc2FnZSgoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKilsaW5lNik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJTUlTU0lOR19DQVNFOworCQl9CisJfQorCisJbGluZTZfc3RhcnRfbGlzdGVuKGxpbmU2KTsKK30KKworLyoKKwlTZW5kIGNoYW5uZWwgbnVtYmVyIChpLmUuLCBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgc291bmQpLgorKi8KK2ludCBsaW5lNl9zZW5kX3Byb2dyYW0oc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCB2YWx1ZSkKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKworCWJ1ZmZlciA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnVmZmVyWzBdID0gTElORTZfUFJPR1JBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0hPU1Q7CisJYnVmZmVyWzFdID0gdmFsdWU7CisKKyNpZiBET19EVU1QX1VSQl9TRU5ECisJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNiwgJ1MnLCBidWZmZXIsIDIpOworI2VuZGlmCisKKwlyZXR2YWwgPSB1c2JfaW50ZXJydXB0X21zZyhsaW5lNi0+dXNiZGV2LAorCQkJCSAgIHVzYl9zbmRpbnRwaXBlKGxpbmU2LT51c2JkZXYsCisJCQkJCQkgIGxpbmU2LT5lcF9jb250cm9sX3dyaXRlKSwKKwkJCQkgICBidWZmZXIsIDIsICZwYXJ0aWFsLCBMSU5FNl9USU1FT1VUICogSFopOworCisJaWYgKHJldHZhbCkKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAidXNiX2ludGVycnVwdF9tc2cgZmFpbGVkICglZClcbiIsIHJldHZhbCk7CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisJVHJhbnNtaXQgTGluZTYgY29udHJvbCBwYXJhbWV0ZXIuCisqLworaW50IGxpbmU2X3RyYW5zbWl0X3BhcmFtZXRlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IHBhcmFtLCBpbnQgdmFsdWUpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IHBhcnRpYWw7CisKKwlidWZmZXIgPSBrbWFsbG9jKDMsIEdGUF9LRVJORUwpOworCisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJ1ZmZlclswXSA9IExJTkU2X1BBUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVDsKKwlidWZmZXJbMV0gPSBwYXJhbTsKKwlidWZmZXJbMl0gPSB2YWx1ZTsKKworI2lmIERPX0RVTVBfVVJCX1NFTkQKKwlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2LCAnUycsIGJ1ZmZlciwgMyk7CisjZW5kaWYKKworCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKGxpbmU2LT51c2JkZXYsCisJCQkJCQkJCQkJCQkJCSB1c2Jfc25kaW50cGlwZShsaW5lNi0+dXNiZGV2LCBsaW5lNi0+ZXBfY29udHJvbF93cml0ZSksCisJCQkJCQkJCQkJCQkJCSBidWZmZXIsIDMsICZwYXJ0aWFsLCBMSU5FNl9USU1FT1VUICogSFopOworCisJaWYgKHJldHZhbCkKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAidXNiX2ludGVycnVwdF9tc2cgZmFpbGVkICglZClcbiIsIHJldHZhbCk7CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisJUmVhZCBkYXRhIGZyb20gZGV2aWNlLgorKi8KK2ludCBsaW5lNl9yZWFkX2RhdGEoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBhZGRyZXNzLCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gbGluZTYtPnVzYmRldjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgbGVuOworCisJLyogcXVlcnkgdGhlIHNlcmlhbCBudW1iZXI6ICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCisJCQkJCQkJCQkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJCQkJCQkJCQkoZGF0YWxlbiA8PCA4KSB8IDB4MjEsIGFkZHJlc3MsIE5VTEwsIDAsIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJyZWFkIHJlcXVlc3QgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogV2FpdCBmb3IgZGF0YSBsZW5ndGguIFdlJ2xsIGdldCBhIGNvdXBsZSBvZiAweGZmIHVudGlsIGxlbmd0aCBhcnJpdmVzLiAqLworCWRvIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCisJCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8CisJCQkJICAgICAgVVNCX0RJUl9JTiwKKwkJCQkgICAgICAweDAwMTIsIDB4MDAwMCwgJmxlbiwgMSwKKwkJCQkgICAgICBMSU5FNl9USU1FT1VUICogSFopOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAorCQkJCSJyZWNlaXZlIGxlbmd0aCBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJd2hpbGUgKGxlbiA9PSAweGZmKQorCQk7CisKKwlpZiAobGVuICE9IGRhdGFsZW4pIHsKKwkJLyogc2hvdWxkIGJlIGVxdWFsIG9yIHNvbWV0aGluZyB3ZW50IHdyb25nICovCisJCWRldl9lcnIobGluZTYtPmlmY2RldiwKKwkJCSJsZW5ndGggbWlzbWF0Y2ggKGV4cGVjdGVkICVkLCBnb3QgJWQpXG4iLAorCQkJKGludClkYXRhbGVuLCAoaW50KWxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlY2VpdmUgdGhlIHJlc3VsdDogKi8KKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiZGV2LCAwKSwgMHg2NywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkJICAgICAgMHgwMDEzLCAweDAwMDAsIGRhdGEsIGRhdGFsZW4sCisJCQkgICAgICBMSU5FNl9USU1FT1VUICogSFopOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAicmVhZCBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlXcml0ZSBkYXRhIHRvIGRldmljZS4KKyovCitpbnQgbGluZTZfd3JpdGVfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsCisJCSAgICAgc2l6ZV90IGRhdGFsZW4pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGxpbmU2LT51c2JkZXY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JkZXYsIDApLCAweDY3LAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfT1VULAorCQkJICAgICAgMHgwMDIyLCBhZGRyZXNzLCBkYXRhLCBkYXRhbGVuLAorCQkJICAgICAgTElORTZfVElNRU9VVCAqIEhaKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwKKwkJCSJ3cml0ZSByZXF1ZXN0IGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRvIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwgMCksCisJCQkJICAgICAgMHg2NywKKwkJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwKKwkJCQkgICAgICBVU0JfRElSX0lOLAorCQkJCSAgICAgIDB4MDAxMiwgMHgwMDAwLAorCQkJCSAgICAgICZzdGF0dXMsIDEsIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIobGluZTYtPmlmY2RldiwKKwkJCQkicmVjZWl2aW5nIHN0YXR1cyBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJd2hpbGUgKHN0YXR1cyA9PSAweGZmKQorCQk7CisKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAid3JpdGUgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorCVJlYWQgTGluZTYgZGV2aWNlIHNlcmlhbCBudW1iZXIuCisJKFBPRCwgVG9uZVBvcnQsIEd1aXRhclBvcnQpCisqLworaW50IGxpbmU2X3JlYWRfc2VyaWFsX251bWJlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50ICpzZXJpYWxfbnVtYmVyKQoreworCXJldHVybiBsaW5lNl9yZWFkX2RhdGEobGluZTYsIDB4ODBkMCwgc2VyaWFsX251bWJlciwgc2l6ZW9mKCpzZXJpYWxfbnVtYmVyKSk7Cit9CisKKy8qCisJTm8gb3BlcmF0aW9uIChpLmUuLCB1bnN1cHBvcnRlZCkuCisqLworc3NpemVfdCBsaW5lNl9ub3BfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICAgY2hhciAqYnVmKQoreworCXJldHVybiAwOworfQorCisvKgorCU5vIG9wZXJhdGlvbiAoaS5lLiwgdW5zdXBwb3J0ZWQpLgorKi8KK3NzaXplX3QgbGluZTZfbm9wX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJyYXciIHNwZWNpYWwgZmlsZS4KKyovCisjaWYgQ1JFQVRFX1JBV19GSUxFCitzc2l6ZV90IGxpbmU2X3NldF9yYXcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlsaW5lNl9zZW5kX3Jhd19tZXNzYWdlKGxpbmU2LCBidWYsIGNvdW50KTsKKwlyZXR1cm4gY291bnQ7Cit9CisjZW5kaWYKKworLyoKKwlHZW5lcmljIGRlc3RydWN0b3IuCisqLworc3RhdGljIHZvaWQgbGluZTZfZGVzdHJ1Y3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKworCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCWxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWlmIChsaW5lNiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBmcmVlIGJ1ZmZlciBtZW1vcnkgZmlyc3Q6ICovCisJa2ZyZWUobGluZTYtPmJ1ZmZlcl9tZXNzYWdlKTsKKwlrZnJlZShsaW5lNi0+YnVmZmVyX2xpc3Rlbik7CisKKwkvKiB0aGVuIGZyZWUgVVJCczogKi8KKwl1c2JfZnJlZV91cmIobGluZTYtPnVyYl9saXN0ZW4pOworCisJLyogbWFrZSBzdXJlIHRoZSBkZXZpY2UgaXNuJ3QgZGVzdHJ1Y3RlZCB0d2ljZTogKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwkvKiBmcmVlIGludGVyZmFjZSBkYXRhOiAqLworCWtmcmVlKGxpbmU2KTsKK30KKworc3RhdGljIHZvaWQgbGluZTZfbGlzdF9kZXZpY2VzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfTUFYX0RFVklDRVM7ICsraSkgeworCQlzdHJ1Y3QgdXNiX2xpbmU2ICpkZXYgPSBsaW5lNl9kZXZpY2VzW2ldOworCQlwcmludGsoS0VSTl9JTkZPICJMaW5lNiBkZXZpY2UgJWQ6ICIsIGkpOworCisJCWlmIChkZXYgPT0gTlVMTCkKKwkJCXByaW50aygiKG5vdCB1c2VkKVxuIik7CisJCWVsc2UKKwkJCXByaW50aygiJXM6JWRcbiIsIGRldi0+cHJvcGVydGllcy0+bmFtZSwgZGV2LT5pbnRlcmZhY2VfbnVtYmVyKTsKKwl9Cit9CisKKy8qCisJUHJvYmUgVVNCIGRldmljZS4KKyovCitzdGF0aWMgaW50IGxpbmU2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZGV2dHlwZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGxpbmU2X3Byb3BlcnRpZXMgKnByb3BlcnRpZXM7CisJaW50IGRldm51bTsKKwlpbnQgaW50ZXJmYWNlX251bWJlciwgYWx0ZXJuYXRlID0gMDsKKwlpbnQgcHJvZHVjdDsKKwlpbnQgc2l6ZSA9IDA7CisJaW50IGVwX3JlYWQgPSAwLCBlcF93cml0ZSA9IDA7CisJaW50IHJldDsKKworCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCWlmICh1c2JkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBpbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50ZXJzOiAqLworCXVzYl9nZXRfaW50ZihpbnRlcmZhY2UpOworCXVzYl9nZXRfZGV2KHVzYmRldik7CisKKwkvKiB3ZSBkb24ndCBoYW5kbGUgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgKi8KKwlpZiAodXNiZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGNoZWNrIHZlbmRvciBhbmQgcHJvZHVjdCBpZCAqLworCWZvciAoZGV2dHlwZSA9IHNpemVvZihsaW5lNl9pZF90YWJsZSkgLyBzaXplb2YobGluZTZfaWRfdGFibGVbMF0pIC0gMTsgZGV2dHlwZS0tOykKKwkJaWYgKChsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IGxpbmU2X2lkX3RhYmxlW2RldnR5cGVdLmlkVmVuZG9yKSAmJgorCQkJIChsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBsaW5lNl9pZF90YWJsZVtkZXZ0eXBlXS5pZFByb2R1Y3QpKQorCQkJYnJlYWs7CisKKwlpZiAoZGV2dHlwZSA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogZmluZCBmcmVlIHNsb3QgaW4gZGV2aWNlIHRhYmxlOiAqLworCWZvciAoZGV2bnVtID0gMDsgZGV2bnVtIDwgTElORTZfTUFYX0RFVklDRVM7ICsrZGV2bnVtKQorCQlpZiAobGluZTZfZGV2aWNlc1tkZXZudW1dID09IE5VTEwpCisJCQlicmVhazsKKworCWlmIChkZXZudW0gPT0gTElORTZfTUFYX0RFVklDRVMpCisJCXJldHVybiAtRU5PREVWOworCisJLyogaW5pdGlhbGl6ZSBkZXZpY2UgaW5mbzogKi8KKwlwcm9wZXJ0aWVzID0gJmxpbmU2X3Byb3BlcnRpZXNfdGFibGVbZGV2dHlwZV07CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTGluZTYgJXMgZm91bmRcbiIsIHByb3BlcnRpZXMtPm5hbWUpOworCXByb2R1Y3QgPSBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKworCS8qIHF1ZXJ5IGludGVyZmFjZSBudW1iZXIgKi8KKwlpbnRlcmZhY2VfbnVtYmVyID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisJc3dpdGNoIChwcm9kdWN0KSB7CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgorCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgorCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgorCWNhc2UgTElORTZfREVWSURfVkFSSUFYOgorCQlhbHRlcm5hdGUgPSAxOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfUE9EWDM6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6CisJCXN3aXRjaCAoaW50ZXJmYWNlX251bWJlcikgeworCQljYXNlIDA6CisJCQlhbHRlcm5hdGUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWFsdGVybmF0ZSA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCU1JU1NJTkdfQ0FTRTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgorCWNhc2UgTElORTZfREVWSURfUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVFBSTzoKKwkJYWx0ZXJuYXRlID0gNTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYOgorCWNhc2UgTElORTZfREVWSURfR1VJVEFSUE9SVDoKKwkJYWx0ZXJuYXRlID0gMjsgIC8qIDEuLjQgc2VlbSB0byBiZSBvayAqLworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgxOgorCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgyOgorCQlzd2l0Y2ggKGludGVyZmFjZV9udW1iZXIpIHsKKwkJY2FzZSAwOgorCQkJLyogZGVmYXVsdHMgdG8gNDQuMWtIeiwgMTYtYml0ICovCisJCQlhbHRlcm5hdGUgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWFsdGVybmF0ZSA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCU1JU1NJTkdfQ0FTRTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodXNiZGV2LCBpbnRlcmZhY2VfbnVtYmVyLCBhbHRlcm5hdGUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGluaXRpYWxpemUgZGV2aWNlIGRhdGEgYmFzZWQgb24gcHJvZHVjdCBpZDogKi8KKwlzd2l0Y2ggKHByb2R1Y3QpIHsKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86CisJY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgorCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfcG9kKTsKKwkJZXBfcmVhZCAgPSAweDg0OworCQllcF93cml0ZSA9IDB4MDM7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYMzoKKwljYXNlIExJTkU2X0RFVklEX1BPRFgzTElWRToKKwkJLyogY3VycmVudGx5IHVudXNlZCEgKi8KKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCk7CisJCWVwX3JlYWQgID0gMHg4MTsKKwkJZXBfd3JpdGUgPSAweDAxOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6CisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6CisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6CisJY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgorCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQpOworCQkvKiB0aGVzZSBkb24ndCBoYXZlIGEgY29udHJvbCBjaGFubmVsICovCisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVExJVkU6CisJCXN3aXRjaCAoaW50ZXJmYWNlX251bWJlcikgeworCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfUE9EOgorCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCk7CisJCQllcF9yZWFkICA9IDB4ODQ7CisJCQllcF93cml0ZSA9IDB4MDM7CisJCQlicmVhazsKKworCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfVkFSSUFYOgorCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCk7CisJCQllcF9yZWFkICA9IDB4ODY7CisJCQllcF93cml0ZSA9IDB4MDU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1ZBUklBWDoKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCk7CisJCWVwX3JlYWQgID0gMHg4MjsKKwkJZXBfd3JpdGUgPSAweDAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNpemUgPT0gMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJkcml2ZXIgYnVnOiBpbnRlcmZhY2UgZGF0YSBzaXplIG5vdCBzZXRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsaW5lNiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAobGluZTYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzdG9yZSBiYXNpYyBkYXRhOiAqLworCWxpbmU2LT5pbnRlcmZhY2VfbnVtYmVyID0gaW50ZXJmYWNlX251bWJlcjsKKwlsaW5lNi0+cHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisJbGluZTYtPnVzYmRldiA9IHVzYmRldjsKKwlsaW5lNi0+aWZjZGV2ID0gJmludGVyZmFjZS0+ZGV2OworCWxpbmU2LT5lcF9jb250cm9sX3JlYWQgPSBlcF9yZWFkOworCWxpbmU2LT5lcF9jb250cm9sX3dyaXRlID0gZXBfd3JpdGU7CisJbGluZTYtPnByb2R1Y3QgPSBwcm9kdWN0OworCisJLyogZ2V0IGRhdGEgZnJvbSBlbmRwb2ludCBkZXNjcmlwdG9yIChzZWUgdXNiX21heHBhY2tldCk6ICovCisJeworCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCQl1bnNpZ25lZCBlcG51bSA9IHVzYl9waXBlZW5kcG9pbnQodXNiX3JjdmludHBpcGUodXNiZGV2LCBlcF9yZWFkKSk7CisJCWVwID0gdXNiZGV2LT5lcF9pbltlcG51bV07CisKKwkJaWYgKGVwICE9IE5VTEwpIHsKKwkJCWxpbmU2LT5pbnRlcnZhbCA9IGVwLT5kZXNjLmJJbnRlcnZhbDsKKwkJCWxpbmU2LT5tYXhfcGFja2V0X3NpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CisJCX0gZWxzZSB7CisJCQlsaW5lNi0+aW50ZXJ2YWwgPSBMSU5FNl9GQUxMQkFDS19JTlRFUlZBTDsKKwkJCWxpbmU2LT5tYXhfcGFja2V0X3NpemUgPSBMSU5FNl9GQUxMQkFDS19NQVhQQUNLRVRTSVpFOworCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiZW5kcG9pbnQgbm90IGF2YWlsYWJsZSwgdXNpbmcgZmFsbGJhY2sgdmFsdWVzIik7CisJCX0KKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgbGluZTYpOworCisJaWYgKHByb3BlcnRpZXMtPmNhcGFiaWxpdGllcyAmIExJTkU2X0JJVF9DT05UUk9MKSB7CisJCS8qIGluaXRpYWxpemUgVVNCIGJ1ZmZlcnM6ICovCisJCWxpbmU2LT5idWZmZXJfbGlzdGVuID0ga21hbGxvYyhMSU5FNl9CVUZTSVpFX0xJU1RFTiwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGxpbmU2LT5idWZmZXJfbGlzdGVuID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlsaW5lNi0+YnVmZmVyX21lc3NhZ2UgPSBrbWFsbG9jKExJTkU2X01FU1NBR0VfTUFYTEVOLCBHRlBfS0VSTkVMKTsKKworCQlpZiAobGluZTYtPmJ1ZmZlcl9tZXNzYWdlID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlsaW5lNi0+dXJiX2xpc3RlbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGxpbmU2LT51cmJfbGlzdGVuID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlyZXQgPSBsaW5lNl9zdGFydF9saXN0ZW4obGluZTYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogaW5pdGlhbGl6ZSBkZXZpY2UgZGF0YSBiYXNlZCBvbiBwcm9kdWN0IGlkOiAqLworCXN3aXRjaCAocHJvZHVjdCkgeworCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKKwljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKKwljYXNlIExJTkU2X0RFVklEX1BPRFgzOgorCWNhc2UgTElORTZfREVWSURfUE9EWDNMSVZFOgorCWNhc2UgTElORTZfREVWSURfUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVFBSTzoKKwkJcmV0ID0gcG9kX2luaXQoaW50ZXJmYWNlLCAoc3RydWN0IHVzYl9saW5lNl9wb2QgKilsaW5lNik7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVExJVkU6CisJCXN3aXRjaCAoaW50ZXJmYWNlX251bWJlcikgeworCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfUE9EOgorCQkJcmV0ID0gcG9kX2luaXQoaW50ZXJmYWNlLCAoc3RydWN0IHVzYl9saW5lNl9wb2QgKilsaW5lNik7CisJCQlicmVhazsKKworCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfVkFSSUFYOgorCQkJcmV0ID0gdmFyaWF4X2luaXQoaW50ZXJmYWNlLCAoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKilsaW5lNik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkJIlBPRHh0IExpdmUgaW50ZXJmYWNlICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJaW50ZXJmYWNlX251bWJlcik7CisJCQlyZXQgPSAtRU5PREVWOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1ZBUklBWDoKKwkJcmV0ID0gdmFyaWF4X2luaXQoaW50ZXJmYWNlLCAoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKilsaW5lNik7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWDoKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMToKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMjoKKwljYXNlIExJTkU2X0RFVklEX0dVSVRBUlBPUlQ6CisJCXJldCA9IHRvbmVwb3J0X2luaXQoaW50ZXJmYWNlLCAoc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqKWxpbmU2KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0U7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCisJaWYgKHJldCA8IDApIHsKKwkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmaW50ZXJmYWNlLT5kZXYua29iaiwgJnVzYmRldi0+ZGV2LmtvYmosCisJCQkJInVzYl9kZXZpY2UiKTsKKwlpZiAocmV0IDwgMCkgeworCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxpbmU2ICVzIG5vdyBhdHRhY2hlZFxuIiwKKwkJIGxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lKTsKKwlsaW5lNl9kZXZpY2VzW2Rldm51bV0gPSBsaW5lNjsKKwlsaW5lNl9saXN0X2RldmljZXMoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorCUxpbmU2IGRldmljZSBkaXNjb25uZWN0ZWQuCisqLworc3RhdGljIHZvaWQgbGluZTZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJaW50IGludGVyZmFjZV9udW1iZXIsIGk7CisKKwlpZiAoaW50ZXJmYWNlID09IE5VTEwpCisJCXJldHVybjsKKwl1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJaWYgKHVzYmRldiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzeXNmc19yZW1vdmVfbGluaygmaW50ZXJmYWNlLT5kZXYua29iaiwgInVzYl9kZXZpY2UiKTsKKworCWludGVyZmFjZV9udW1iZXIgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAobGluZTYgIT0gTlVMTCkgeworCQlpZiAobGluZTYtPnVyYl9saXN0ZW4gIT0gTlVMTCkKKwkJCXVzYl9raWxsX3VyYihsaW5lNi0+dXJiX2xpc3Rlbik7CisKKwkJaWYgKHVzYmRldiAhPSBsaW5lNi0+dXNiZGV2KQorCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAorCQkJCSJkcml2ZXIgYnVnOiBpbmNvbnNpc3RlbnQgdXNiIGRldmljZVxuIik7CisKKwkJc3dpdGNoIChsaW5lNi0+dXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgeworCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKKwkJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgorCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6CisJCWNhc2UgTElORTZfREVWSURfUE9EWDM6CisJCWNhc2UgTElORTZfREVWSURfUE9EWDNMSVZFOgorCQljYXNlIExJTkU2X0RFVklEX1BPRFhUOgorCQljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgorCQkJcG9kX2Rpc2Nvbm5lY3QoaW50ZXJmYWNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgorCQkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7CisJCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfUE9EOgorCQkJCXBvZF9kaXNjb25uZWN0KGludGVyZmFjZSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9WQVJJQVg6CisJCQkJdmFyaWF4X2Rpc2Nvbm5lY3QoaW50ZXJmYWNlKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBMSU5FNl9ERVZJRF9WQVJJQVg6CisJCQl2YXJpYXhfZGlzY29ubmVjdChpbnRlcmZhY2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWDoKKwkJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6CisJCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgyOgorCQljYXNlIExJTkU2X0RFVklEX0dVSVRBUlBPUlQ6CisJCQl0b25lcG9ydF9kaXNjb25uZWN0KGludGVyZmFjZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJTUlTU0lOR19DQVNFOworCQl9CisKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTGluZTYgJXMgbm93IGRpc2Nvbm5lY3RlZFxuIiwgbGluZTYtPnByb3BlcnRpZXMtPm5hbWUpOworCisJCWZvciAoaSA9IExJTkU2X01BWF9ERVZJQ0VTOyBpLS07KQorCQkJaWYgKGxpbmU2X2RldmljZXNbaV0gPT0gbGluZTYpCisJCQkJbGluZTZfZGV2aWNlc1tpXSA9IE5VTEw7CisJfQorCisJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKworCS8qIGRlY3JlbWVudCByZWZlcmVuY2UgY291bnRlcnM6ICovCisJdXNiX3B1dF9pbnRmKGludGVyZmFjZSk7CisJdXNiX3B1dF9kZXYodXNiZGV2KTsKKworCWxpbmU2X2xpc3RfZGV2aWNlcygpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbGluZTZfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLnByb2JlID0gbGluZTZfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBsaW5lNl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGxpbmU2X2lkX3RhYmxlLAorfTsKKworLyoKKwlNb2R1bGUgaW5pdGlhbGl6YXRpb24uCisqLworc3RhdGljIGludCBfX2luaXQgbGluZTZfaW5pdCh2b2lkKQoreworCWludCBpLCByZXR2YWw7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcyBkcml2ZXIgdmVyc2lvbiAlcyVzXG4iLAorCSAgICAgICBEUklWRVJfTkFNRSwgRFJJVkVSX1ZFUlNJT04sIERSSVZFUl9SRVZJU0lPTik7CisJbGluZTZfd29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZShEUklWRVJfTkFNRSk7CisKKwlpZiAobGluZTZfd29ya3F1ZXVlID09IE5VTEwpIHsKKwkJZXJyKCJjb3VsZG4ndCBjcmVhdGUgd29ya3F1ZXVlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IExJTkU2X01BWF9ERVZJQ0VTOyBpLS07KQorCQlsaW5lNl9kZXZpY2VzW2ldID0gTlVMTDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbGluZTZfZHJpdmVyKTsKKworCWlmIChyZXR2YWwpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisJTW9kdWxlIGNsZWFudXAuCisqLworc3RhdGljIHZvaWQgX19leGl0IGxpbmU2X2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShsaW5lNl93b3JrcXVldWUpOworCXVzYl9kZXJlZ2lzdGVyKCZsaW5lNl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChsaW5lNl9pbml0KTsKK21vZHVsZV9leGl0KGxpbmU2X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTA4YmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBEUklWRVJfSAorI2RlZmluZSBEUklWRVJfSAorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKworI2luY2x1ZGUgIm1pZGkuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAibGluZTZ1c2IiCisKKyNkZWZpbmUgTElORTZfVElNRU9VVCAxCisjZGVmaW5lIExJTkU2X01BWF9ERVZJQ0VTIDgKKyNkZWZpbmUgTElORTZfQlVGU0laRV9MSVNURU4gMzIKKyNkZWZpbmUgTElORTZfTUVTU0FHRV9NQVhMRU4gMjU2CisKKworLyoKKwlMaW5lNiBNSURJIGNvbnRyb2wgY29tbWFuZHMKKyovCisjZGVmaW5lIExJTkU2X1BBUkFNX0NIQU5HRSAgIDB4YjAKKyNkZWZpbmUgTElORTZfUFJPR1JBTV9DSEFOR0UgMHhjMAorI2RlZmluZSBMSU5FNl9TWVNFWF9CRUdJTiAgICAweGYwCisjZGVmaW5lIExJTkU2X1NZU0VYX0VORCAgICAgIDB4ZjcKKyNkZWZpbmUgTElORTZfUkVTRVQgICAgICAgICAgMHhmZgorCisvKgorCU1JREkgY2hhbm5lbCBmb3IgbWVzc2FnZXMgaW5pdGlhdGVkIGJ5IHRoZSBob3N0CisJKGFuZCBldmVudHVhbGx5IGVjaG9lZCBiYWNrIGJ5IHRoZSBkZXZpY2UpCisqLworI2RlZmluZSBMSU5FNl9DSEFOTkVMX0hPU1QgICAweDAwCisKKy8qCisJTUlESSBjaGFubmVsIGZvciBtZXNzYWdlcyBpbml0aWF0ZWQgYnkgdGhlIGRldmljZQorKi8KKyNkZWZpbmUgTElORTZfQ0hBTk5FTF9ERVZJQ0UgMHgwMgorCisjZGVmaW5lIExJTkU2X0NIQU5ORUxfVU5LTk9XTiA1ICAvKiBkb24ndCBrbm93IHlldCB3aGF0IHRoaXMgaXMgZ29vZCBmb3IgKi8KKworI2RlZmluZSBMSU5FNl9DSEFOTkVMX01BU0sgMHgwZgorCisKKyNkZWZpbmUgTUlTU0lOR19DQVNFCVwKKwlwcmludGsoS0VSTl9FUlIgImxpbmU2dXNiIGRyaXZlciBidWc6IG1pc3NpbmcgY2FzZSBpbiAlczolZFxuIiwgXAorCQlfX0ZJTEVfXywgX19MSU5FX18pCisKKworI2RlZmluZSBDSEVDS19SRVRVUk4oeCkJCVwKK2RvIHsJCQkJXAorCWVyciA9IHg7CQlcCisJaWYgKGVyciA8IDApCQlcCisJCXJldHVybiBlcnI7CVwKK30gd2hpbGUgKDApCisKKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbGluZTZfbWlkaV9pZFszXTsKK2V4dGVybiBzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNl9kZXZpY2VzW0xJTkU2X01BWF9ERVZJQ0VTXTsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGluZTZfd29ya3F1ZXVlOworCitzdGF0aWMgY29uc3QgaW50IFNZU0VYX0RBVEFfT0ZTID0gc2l6ZW9mKGxpbmU2X21pZGlfaWQpICsgMzsKK3N0YXRpYyBjb25zdCBpbnQgU1lTRVhfRVhUUkFfU0laRSA9IHNpemVvZihsaW5lNl9taWRpX2lkKSArIDQ7CisKKworLyoqCisJIENvbW1vbiBwcm9wZXJ0aWVzIG9mIExpbmU2IGRldmljZXMuCisqLworc3RydWN0IGxpbmU2X3Byb3BlcnRpZXMgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGRldmljZV9iaXQ7CisJaW50IGNhcGFiaWxpdGllczsKK307CisKKy8qKgorCSBDb21tb24gZGF0YSBzaGFyZWQgYnkgYWxsIExpbmU2IGRldmljZXMuCisJIENvcnJlc3BvbmRzIHRvIGEgcGFpciBvZiBVU0IgZW5kcG9pbnRzLgorKi8KK3N0cnVjdCB1c2JfbGluZTYgeworCS8qKgorCQkgVVNCIGRldmljZS4KKwkqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisKKwkvKioKKwkJIFByb2R1Y3QgaWQuCisJKi8KKwlpbnQgcHJvZHVjdDsKKworCS8qKgorCQkgUHJvcGVydGllcy4KKwkqLworCWNvbnN0IHN0cnVjdCBsaW5lNl9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzOworCisJLyoqCisJCSBJbnRlcmZhY2UgbnVtYmVyLgorCSovCisJaW50IGludGVyZmFjZV9udW1iZXI7CisKKwkvKioKKwkJIEludGVydmFsIChtcykuCisJKi8KKwlpbnQgaW50ZXJ2YWw7CisKKwkvKioKKwkJIE1heGltdW0gc2l6ZSBvZiBVU0IgcGFja2V0LgorCSovCisJaW50IG1heF9wYWNrZXRfc2l6ZTsKKworCS8qKgorCQkgRGV2aWNlIHJlcHJlc2VudGluZyB0aGUgVVNCIGludGVyZmFjZS4KKwkqLworCXN0cnVjdCBkZXZpY2UgKmlmY2RldjsKKworCS8qKgorCQkgTGluZTYgc291bmQgY2FyZCBkYXRhIHN0cnVjdHVyZS4KKwkJIEVhY2ggZGV2aWNlIGhhcyBhdCBsZWFzdCBNSURJIG9yIFBDTS4KKwkqLworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKworCS8qKgorCQkgTGluZTYgUENNIGRldmljZSBkYXRhIHN0cnVjdHVyZS4KKwkqLworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbTsKKworCS8qKgorCQkgTGluZTYgTUlESSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUuCisJKi8KKwlzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKmxpbmU2bWlkaTsKKworCS8qKgorCQkgVVNCIGVuZHBvaW50IGZvciBsaXN0ZW5pbmcgdG8gY29udHJvbCBjb21tYW5kcy4KKwkqLworCWludCBlcF9jb250cm9sX3JlYWQ7CisKKwkvKioKKwkJIFVTQiBlbmRwb2ludCBmb3Igd3JpdGluZyBjb250cm9sIGNvbW1hbmRzLgorCSovCisJaW50IGVwX2NvbnRyb2xfd3JpdGU7CisKKwkvKioKKwkJIFVSQiBmb3IgbGlzdGVuaW5nIHRvIFBPRHh0IFBybyBjb250cm9sIGVuZHBvaW50LgorCSovCisJc3RydWN0IHVyYiAqdXJiX2xpc3RlbjsKKworCS8qKgorCQkgQnVmZmVyIGZvciBsaXN0ZW5pbmcgdG8gUE9EeHQgUHJvIGNvbnRyb2wgZW5kcG9pbnQuCisJKi8KKwl1bnNpZ25lZCBjaGFyICpidWZmZXJfbGlzdGVuOworCisJLyoqCisJCSBCdWZmZXIgZm9yIG1lc3NhZ2UgdG8gYmUgcHJvY2Vzc2VkLgorCSovCisJdW5zaWduZWQgY2hhciAqYnVmZmVyX21lc3NhZ2U7CisKKwkvKioKKwkJIExlbmd0aCBvZiBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KKwkqLworCWludCBtZXNzYWdlX2xlbmd0aDsKK307CisKKworZXh0ZXJuIGNoYXIgKmxpbmU2X2FsbG9jX3N5c2V4X2J1ZmZlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGNvZGUxLAorCQkJCSAgICAgIGludCBjb2RlMiwgaW50IHNpemUpOworZXh0ZXJuIHNzaXplX3QgbGluZTZfbm9wX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitleHRlcm4gc3NpemVfdCBsaW5lNl9ub3Bfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgbGluZTZfcmVhZF9kYXRhKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgYWRkcmVzcywgdm9pZCAqZGF0YSwKKwkJCSAgIHNpemVfdCBkYXRhbGVuKTsKK2V4dGVybiBpbnQgbGluZTZfcmVhZF9zZXJpYWxfbnVtYmVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAorCQkJCSAgICBpbnQgKnNlcmlhbF9udW1iZXIpOworZXh0ZXJuIGludCBsaW5lNl9zZW5kX3Byb2dyYW0oc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCB2YWx1ZSk7CitleHRlcm4gaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCQkgIGludCBzaXplKTsKK2V4dGVybiBpbnQgbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luYyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwKKwkJCQkJY29uc3QgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSk7CitleHRlcm4gaW50IGxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwKKwkJCQkgICAgY29uc3QgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSk7CitleHRlcm4gc3NpemVfdCBsaW5lNl9zZXRfcmF3KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgbGluZTZfdHJhbnNtaXRfcGFyYW1ldGVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgcGFyYW0sCisJCQkJICAgIGludCB2YWx1ZSk7CitleHRlcm4gaW50IGxpbmU2X3dyaXRlX2RhdGEoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBhZGRyZXNzLCB2b2lkICpkYXRhLAorCQkJICAgIHNpemVfdCBkYXRhbGVuKTsKK2V4dGVybiB2b2lkIGxpbmU2X3dyaXRlX2hleGR1bXAoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGNoYXIgZGlyLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2R1bXByZXF1ZXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHVtcHJlcXVlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWNiYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2R1bXByZXF1ZXN0LmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisjaW5jbHVkZSAiZHVtcHJlcXVlc3QuaCIKKworCisvKgorCVNldCAiZHVtcCBpbiBwcm9ncmVzcyIgZmxhZy4KKyovCit2b2lkIGxpbmU2X2R1bXBfc3RhcnRlZChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBpbnQgZGVzdCkKK3sKKwlsNmRyLT5pbl9wcm9ncmVzcyA9IGRlc3Q7Cit9CisKKy8qCisJSW52YWxpZGF0ZSBjdXJyZW50IGNoYW5uZWwsIGkuZS4sIHNldCAiZHVtcCBpbiBwcm9ncmVzcyIgZmxhZy4KKwlSZWFkaW5nIGZyb20gdGhlICJkdW1wIiBzcGVjaWFsIGZpbGUgYmxvY2tzIHVudGlsIGR1bXAgaXMgY29tcGxldGVkLgorKi8KK3ZvaWQgbGluZTZfaW52YWxpZGF0ZV9jdXJyZW50KHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIpCit7CisJbGluZTZfZHVtcF9zdGFydGVkKGw2ZHIsIExJTkU2X0RVTVBfQ1VSUkVOVCk7Cit9CisKKy8qCisJQ2xlYXIgImR1bXAgaW4gcHJvZ3Jlc3MiIGZsYWcgYW5kIG5vdGlmeSB3YWl0aW5nIHByb2Nlc3Nlcy4KKyovCit2b2lkIGxpbmU2X2R1bXBfZmluaXNoZWQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkcikKK3sKKwlsNmRyLT5pbl9wcm9ncmVzcyA9IExJTkU2X0RVTVBfTk9ORTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmw2ZHItPndhaXQpOworfQorCisvKgorCVNlbmQgYW4gYXN5bmNocm9ub3VzIGNoYW5uZWwgZHVtcCByZXF1ZXN0LgorKi8KK2ludCBsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwKKwkJCSAgICAgc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBudW0pCit7CisJaW50IHJldDsKKwlsaW5lNl9pbnZhbGlkYXRlX2N1cnJlbnQobDZkcik7CisJcmV0ID0gbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luYyhsaW5lNiwgbDZkci0+cmVxYnVmc1tudW1dLmJ1ZmZlciwKKwkJCQkJICAgbDZkci0+cmVxYnVmc1tudW1dLmxlbmd0aCk7CisKKwlpZiAocmV0IDwgMCkKKwkJbGluZTZfZHVtcF9maW5pc2hlZChsNmRyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisJU2VuZCBhbiBhc3luY2hyb25vdXMgZHVtcCByZXF1ZXN0IGFmdGVyIGEgZ2l2ZW4gaW50ZXJ2YWwuCisqLwordm9pZCBsaW5lNl9zdGFydHVwX2RlbGF5ZWQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgaW50IHNlY29uZHMsCisJCQkgICB2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLCB2b2lkICpkYXRhKQoreworCWw2ZHItPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgc2Vjb25kcyAqIEhaOworCWw2ZHItPnRpbWVyLmZ1bmN0aW9uID0gZnVuY3Rpb247CisJbDZkci0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRhdGE7CisJYWRkX3RpbWVyKCZsNmRyLT50aW1lcik7Cit9CisKKy8qCisJV2FpdCBmb3IgY29tcGxldGlvbi4KKyovCitpbnQgbGluZTZfd2FpdF9kdW1wKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGludCBub25ibG9jaykKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1ZSgmbDZkci0+d2FpdCwgJndhaXQpOworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCisJd2hpbGUgKGw2ZHItPmluX3Byb2dyZXNzKSB7CisJCWlmIChub25ibG9jaykgeworCQkJcmV0dmFsID0gLUVBR0FJTjsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlzY2hlZHVsZSgpOworCX0KKworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCXJlbW92ZV93YWl0X3F1ZXVlKCZsNmRyLT53YWl0LCAmd2FpdCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKwlJbml0aWFsaXplIGR1bXAgcmVxdWVzdCBidWZmZXIuCisqLworaW50IGxpbmU2X2R1bXByZXFfaW5pdGJ1ZihzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBjb25zdCB2b2lkICpidWYsCisJCQkgIHNpemVfdCBsZW4sIGludCBudW0pCit7CisJbDZkci0+cmVxYnVmc1tudW1dLmJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAobDZkci0+cmVxYnVmc1tudW1dLmJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkobDZkci0+cmVxYnVmc1tudW1dLmJ1ZmZlciwgYnVmLCBsZW4pOworCWw2ZHItPnJlcWJ1ZnNbbnVtXS5sZW5ndGggPSBsZW47CisJcmV0dXJuIDA7Cit9CisKKy8qCisJSW5pdGlhbGl6ZSBkdW1wIHJlcXVlc3QgZGF0YSBzdHJ1Y3R1cmUgKGluY2x1ZGluZyBvbmUgYnVmZmVyKS4KKyovCitpbnQgbGluZTZfZHVtcHJlcV9pbml0KHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJICAgICAgIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKwlyZXQgPSBsaW5lNl9kdW1wcmVxX2luaXRidWYobDZkciwgYnVmLCBsZW4sIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmw2ZHItPndhaXQpOworCWluaXRfdGltZXIoJmw2ZHItPnRpbWVyKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKwlEZXN0cnVjdCBkdW1wIHJlcXVlc3QgZGF0YSBzdHJ1Y3R1cmUuCisqLwordm9pZCBsaW5lNl9kdW1wcmVxX2Rlc3RydWN0YnVmKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGludCBudW0pCit7CisJaWYgKGw2ZHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChsNmRyLT5yZXFidWZzW251bV0uYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKKwlrZnJlZShsNmRyLT5yZXFidWZzW251bV0uYnVmZmVyKTsKKwlsNmRyLT5yZXFidWZzW251bV0uYnVmZmVyID0gTlVMTDsKK30KKworLyoKKwlEZXN0cnVjdCBkdW1wIHJlcXVlc3QgZGF0YSBzdHJ1Y3R1cmUuCisqLwordm9pZCBsaW5lNl9kdW1wcmVxX2Rlc3RydWN0KHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIpCit7CisJaWYgKGw2ZHItPnJlcWJ1ZnNbMF0uYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKKwlsaW5lNl9kdW1wcmVxX2Rlc3RydWN0YnVmKGw2ZHIsIDApOworCWw2ZHItPm9rID0gMTsKKwlkZWxfdGltZXJfc3luYygmbDZkci0+dGltZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2R1bXByZXF1ZXN0LmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHVtcHJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc1ZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2R1bXByZXF1ZXN0LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgRFVNUFJFUVVFU1RfSAorI2RlZmluZSBEVU1QUkVRVUVTVF9ICisKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKworCitlbnVtIHsKKwlMSU5FNl9EVU1QX05PTkUsCisJTElORTZfRFVNUF9DVVJSRU5UCit9OworCisKK3N0cnVjdCBsaW5lNl9kdW1wX3JlcWJ1ZiB7CisJLyoqCisJCSBCdWZmZXIgZm9yIGR1bXAgcmVxdWVzdHMuCisJKi8KKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwkvKioKKwkJIFNpemUgb2YgZHVtcCByZXF1ZXN0LgorCSovCisJc2l6ZV90IGxlbmd0aDsKK307CisKKy8qKgorCSBQcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byByZXF1ZXN0IGNoYW5uZWwvbW9kZWwvLi4uIGR1bXAgZGF0YSBmcm9tIGEKKwkgTGluZTYgZGV2aWNlLgorKi8KK3N0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgeworCS8qKgorCQkgV2FpdCBxdWV1ZSBmb3IgYWNjZXNzIHRvIHByb2dyYW0gZHVtcCBkYXRhLgorCSovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKworCS8qKgorCQkgSW5kaWNhdGVzIGFuIHVuZmluaXNoZWQgcHJvZ3JhbSBkdW1wIHJlcXVlc3QuCisJCSAwOiBubyBkdW1wCisJCSAxOiBkdW1wIGN1cnJlbnQgc2V0dGluZ3MKKwkJIE90aGVyIGRldmljZS1zcGVjaWZpYyB2YWx1ZXMgYXJlIGFsc28gYWxsb3dlZC4KKwkqLworCWludCBpbl9wcm9ncmVzczsKKworCS8qKgorCQkgVGltZXIgZm9yIGRlbGF5ZWQgZHVtcCByZXF1ZXN0LgorCSovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisKKwkvKioKKwkJIEZsYWcgaWYgaW5pdGlhbCBkdW1wIHJlcXVlc3QgaGFzIGJlZW4gc3VjY2Vzc2Z1bC4KKwkqLworCWNoYXIgb2s7CisKKwkvKioKKwkJIER1bXAgcmVxdWVzdCBidWZmZXJzCisJKi8KKwlzdHJ1Y3QgbGluZTZfZHVtcF9yZXFidWYgcmVxYnVmc1sxXTsKK307CisKK2V4dGVybiB2b2lkIGxpbmU2X2R1bXBfZmluaXNoZWQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkcik7CitleHRlcm4gaW50IGxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYyhzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLAorCQkJCSAgICBzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IG51bSk7CitleHRlcm4gdm9pZCBsaW5lNl9kdW1wX3N0YXJ0ZWQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgaW50IGRlc3QpOworZXh0ZXJuIHZvaWQgbGluZTZfZHVtcHJlcV9kZXN0cnVjdChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyKTsKK2V4dGVybiB2b2lkIGxpbmU2X2R1bXByZXFfZGVzdHJ1Y3RidWYoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgaW50IG51bSk7CitleHRlcm4gaW50IGxpbmU2X2R1bXByZXFfaW5pdChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBjb25zdCB2b2lkICpidWYsCisJCQkgICAgICBzaXplX3QgbGVuKTsKK2V4dGVybiBpbnQgbGluZTZfZHVtcHJlcV9pbml0YnVmKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsCisJCQkJIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IG51bSk7CitleHRlcm4gdm9pZCBsaW5lNl9pbnZhbGlkYXRlX2N1cnJlbnQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkcik7CitleHRlcm4gdm9pZCBsaW5lNl9zdGFydHVwX2RlbGF5ZWQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgaW50IHNlY29uZHMsCisJCQkJICB2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgbGluZTZfd2FpdF9kdW1wKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGludCBub25ibG9jayk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWEyYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGkuYwpAQCAtMCwwICsxLDQyMiBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKworI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAibWlkaS5oIgorI2luY2x1ZGUgInBvZC5oIgorI2luY2x1ZGUgInVzYmRlZnMuaCIKKworCisjZGVmaW5lIFVTRV9NSURJQlVGICAgICAgMQorI2RlZmluZSBPVVRQVVRfRFVNUF9PTkxZIDAKKworCisjZGVmaW5lIGxpbmU2X3Jhd21pZGlfc3Vic3RyZWFtX21pZGkoc3Vic3RyZWFtKSBcCisJKChzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKikoKHN1YnN0cmVhbSktPnJtaWRpLT5wcml2YXRlX2RhdGEpKQorCisKK3N0YXRpYyBpbnQgc2VuZF9taWRpX2FzeW5jKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJICAgaW50IGxlbmd0aCk7CisKKworLyoKKwlQYXNzIGRhdGEgcmVjZWl2ZWQgdmlhIFVTQiB0byBNSURJLgorKi8KK3ZvaWQgbGluZTZfbWlkaV9yZWNlaXZlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJaW50IGxlbmd0aCkKK3sKKwlpZiAobGluZTYtPmxpbmU2bWlkaS0+c3Vic3RyZWFtX3JlY2VpdmUpCisJCXNuZF9yYXdtaWRpX3JlY2VpdmUobGluZTYtPmxpbmU2bWlkaS0+c3Vic3RyZWFtX3JlY2VpdmUsCisJCQkJICAgIGRhdGEsIGxlbmd0aCk7Cit9CisKKy8qCisJUmVhZCBkYXRhIGZyb20gTUlESSBidWZmZXIgYW5kIHRyYW5zbWl0IHRoZW0gdmlhIFVTQi4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9taWRpX3RyYW5zbWl0KHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IGxpbmU2X3Jhd21pZGlfc3Vic3RyZWFtX21pZGkoc3Vic3RyZWFtKS0+bGluZTY7CisJc3RydWN0IHNuZF9saW5lNl9taWRpICpsaW5lNm1pZGkgPSBsaW5lNi0+bGluZTZtaWRpOworCXN0cnVjdCBNaWRpQnVmZmVyICptYiA9ICZsaW5lNm1pZGktPm1pZGlidWZfb3V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBjaHVua1tsaW5lNi0+bWF4X3BhY2tldF9zaXplXTsKKwlpbnQgcmVxLCBkb25lOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2LT5saW5lNm1pZGktPm1pZGlfdHJhbnNtaXRfbG9jaywgZmxhZ3MpOworCisJZm9yICg7OykgeworCQlyZXEgPSBtaW4obWlkaWJ1Zl9ieXRlc19mcmVlKG1iKSwgbGluZTYtPm1heF9wYWNrZXRfc2l6ZSk7CisJCWRvbmUgPSBzbmRfcmF3bWlkaV90cmFuc21pdF9wZWVrKHN1YnN0cmVhbSwgY2h1bmssIHJlcSk7CisKKwkJaWYgKGRvbmUgPT0gMCkKKwkJCWJyZWFrOworCisjaWYgRE9fRFVNUF9NSURJX1NFTkQKKwkJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNiwgJ3MnLCBjaHVuaywgZG9uZSk7CisjZW5kaWYKKwkJbWlkaWJ1Zl93cml0ZShtYiwgY2h1bmssIGRvbmUpOworCQlzbmRfcmF3bWlkaV90cmFuc21pdF9hY2soc3Vic3RyZWFtLCBkb25lKTsKKwl9CisKKwlmb3IgKDs7KSB7CisJCWRvbmUgPSBtaWRpYnVmX3JlYWQobWIsIGNodW5rLCBsaW5lNi0+bWF4X3BhY2tldF9zaXplKTsKKworCQlpZiAoZG9uZSA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKG1pZGlidWZfc2tpcF9tZXNzYWdlKG1iLCBsaW5lNm1pZGktPm1pZGlfbWFza190cmFuc21pdCkpCisJCQljb250aW51ZTsKKworCQlzZW5kX21pZGlfYXN5bmMobGluZTYsIGNodW5rLCBkb25lKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNi0+bGluZTZtaWRpLT5taWRpX3RyYW5zbWl0X2xvY2ssIGZsYWdzKTsKK30KKworLyoKKwlOb3RpZmljYXRpb24gb2YgY29tcGxldGlvbiBvZiBNSURJIHRyYW5zbWlzc2lvbi4KKyovCitzdGF0aWMgdm9pZCBtaWRpX3NlbnQoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKwlpbnQgbnVtOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gKHN0cnVjdCB1c2JfbGluZTYgKil1cmItPmNvbnRleHQ7CisKKwlzdGF0dXMgPSB1cmItPnN0YXR1czsKKwlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX2ZyZWVfdXJiKHVyYik7CisKKwlpZiAoc3RhdHVzID09IC1FU0hVVERPV04pCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrLCBmbGFncyk7CisJbnVtID0gLS1saW5lNi0+bGluZTZtaWRpLT5udW1fYWN0aXZlX3NlbmRfdXJiczsKKworCWlmIChudW0gPT0gMCkgeworCQlsaW5lNl9taWRpX3RyYW5zbWl0KGxpbmU2LT5saW5lNm1pZGktPnN1YnN0cmVhbV90cmFuc21pdCk7CisJCW51bSA9IGxpbmU2LT5saW5lNm1pZGktPm51bV9hY3RpdmVfc2VuZF91cmJzOworCX0KKworCWlmIChudW0gPT0gMCkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3dhaXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTYtPmxpbmU2bWlkaS0+c2VuZF91cmJfbG9jaywgZmxhZ3MpOworfQorCisvKgorCVNlbmQgYW4gYXN5bmNocm9ub3VzIE1JREkgbWVzc2FnZS4KKwlBc3N1bWVzIHRoYXQgbGluZTYtPmxpbmU2bWlkaS0+c2VuZF91cmJfbG9jayBpcyBoZWxkCisJKGkuZS4sIHRoaXMgZnVuY3Rpb24gaXMgc2VyaWFsaXplZCkuCisqLworc3RhdGljIGludCBzZW5kX21pZGlfYXN5bmMoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgICBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisKKwlpZiAodXJiID09IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworI2lmIERPX0RVTVBfVVJCX1NFTkQKKwlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2LCAnUycsIGRhdGEsIGxlbmd0aCk7CisjZW5kaWYKKworCXRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MobGVuZ3RoLCBHRlBfQVRPTUlDKTsKKworCWlmICh0cmFuc2Zlcl9idWZmZXIgPT0gMCkgeworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweSh0cmFuc2Zlcl9idWZmZXIsIGRhdGEsIGxlbmd0aCk7CisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGxpbmU2LT51c2JkZXYsCisJCQkgdXNiX3NuZGJ1bGtwaXBlKGxpbmU2LT51c2JkZXYsCisJCQkJCSBsaW5lNi0+ZXBfY29udHJvbF93cml0ZSksCisJCQkgdHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsIG1pZGlfc2VudCwgbGluZTYsCisJCQkgbGluZTYtPmludGVydmFsKTsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJ1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKytsaW5lNi0+bGluZTZtaWRpLT5udW1fYWN0aXZlX3NlbmRfdXJiczsKKworCXN3aXRjaCAobGluZTYtPnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpIHsKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgorCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgorCQlwb2RfbWlkaV9wb3N0cHJvY2Vzcygoc3RydWN0IHVzYl9saW5lNl9wb2QgKilsaW5lNiwgZGF0YSwKKwkJCQkgICAgIGxlbmd0aCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbmU2X21pZGlfb3V0cHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbmU2X21pZGlfb3V0cHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGluZTZfbWlkaV9vdXRwdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICAgaW50IHVwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSBsaW5lNl9yYXdtaWRpX3N1YnN0cmVhbV9taWRpKHN1YnN0cmVhbSktPmxpbmU2OworCisJbGluZTYtPmxpbmU2bWlkaS0+c3Vic3RyZWFtX3RyYW5zbWl0ID0gc3Vic3RyZWFtOworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrLCBmbGFncyk7CisKKwlpZiAobGluZTYtPmxpbmU2bWlkaS0+bnVtX2FjdGl2ZV9zZW5kX3VyYnMgPT0gMCkKKwkJbGluZTZfbWlkaV90cmFuc21pdChzdWJzdHJlYW0pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTYtPmxpbmU2bWlkaS0+c2VuZF91cmJfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBsaW5lNl9taWRpX291dHB1dF9kcmFpbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSBsaW5lNl9yYXdtaWRpX3N1YnN0cmVhbV9taWRpKHN1YnN0cmVhbSktPmxpbmU2OworCXdhaXRfcXVldWVfaGVhZF90ICpoZWFkID0gJmxpbmU2LT5saW5lNm1pZGktPnNlbmRfd2FpdDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1ZShoZWFkLCAmd2FpdCk7CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisKKwl3aGlsZSAobGluZTYtPmxpbmU2bWlkaS0+bnVtX2FjdGl2ZV9zZW5kX3VyYnMgPiAwKQorCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKwkJZWxzZQorCQkJc2NoZWR1bGUoKTsKKworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCXJlbW92ZV93YWl0X3F1ZXVlKGhlYWQsICZ3YWl0KTsKK30KKworc3RhdGljIGludCBsaW5lNl9taWRpX2lucHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbmU2X21pZGlfaW5wdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsaW5lNl9taWRpX2lucHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgaW50IHVwKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gbGluZTZfcmF3bWlkaV9zdWJzdHJlYW1fbWlkaShzdWJzdHJlYW0pLT5saW5lNjsKKworCWlmICh1cCkKKwkJbGluZTYtPmxpbmU2bWlkaS0+c3Vic3RyZWFtX3JlY2VpdmUgPSBzdWJzdHJlYW07CisJZWxzZQorCQlsaW5lNi0+bGluZTZtaWRpLT5zdWJzdHJlYW1fcmVjZWl2ZSA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzIGxpbmU2X21pZGlfb3V0cHV0X29wcyA9IHsKKwkub3BlbiA9IGxpbmU2X21pZGlfb3V0cHV0X29wZW4sCisJLmNsb3NlID0gbGluZTZfbWlkaV9vdXRwdXRfY2xvc2UsCisJLnRyaWdnZXIgPSBsaW5lNl9taWRpX291dHB1dF90cmlnZ2VyLAorCS5kcmFpbiA9IGxpbmU2X21pZGlfb3V0cHV0X2RyYWluLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgbGluZTZfbWlkaV9pbnB1dF9vcHMgPSB7CisJLm9wZW4gPSBsaW5lNl9taWRpX2lucHV0X29wZW4sCisJLmNsb3NlID0gbGluZTZfbWlkaV9pbnB1dF9jbG9zZSwKKwkudHJpZ2dlciA9IGxpbmU2X21pZGlfaW5wdXRfdHJpZ2dlciwKK307CisKKy8qCisJQ2xlYW51cCB0aGUgTGluZTYgTUlESSBkZXZpY2UuCisqLworc3RhdGljIHZvaWQgbGluZTZfY2xlYW51cF9taWRpKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGkpCit7Cit9CisKKy8qIENyZWF0ZSBhIE1JREkgZGV2aWNlICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9uZXdfbWlkaShzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKmxpbmU2bWlkaSkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcmF3bWlkaV9uZXcobGluZTZtaWRpLT5saW5lNi0+Y2FyZCwgIkxpbmU2IE1JREkiLCAwLCAxLCAxLAorCQkJICAgICAgJnJtaWRpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJtaWRpLT5wcml2YXRlX2RhdGEgPSBsaW5lNm1pZGk7CisJcm1pZGktPnByaXZhdGVfZnJlZSA9IGxpbmU2X2NsZWFudXBfbWlkaTsKKwlzdHJjcHkocm1pZGktPm5hbWUsIGxpbmU2bWlkaS0+bGluZTYtPnByb3BlcnRpZXMtPm5hbWUpOworCisJcm1pZGktPmluZm9fZmxhZ3MgPQorCQlTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUIHwKKwkJU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUIHwKKwkJU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKKworCXNuZF9yYXdtaWRpX3NldF9vcHMocm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKKwkJCSAgICAmbGluZTZfbWlkaV9vdXRwdXRfb3BzKTsKKwlzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKKwkJCSAgICAmbGluZTZfbWlkaV9pbnB1dF9vcHMpOworCXJldHVybiAwOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJtaWRpX21hc2tfdHJhbnNtaXQiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBtaWRpX2dldF9taWRpX21hc2tfdHJhbnNtaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxpbmU2LT5saW5lNm1pZGktPm1pZGlfbWFza190cmFuc21pdCk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJtaWRpX21hc2siIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBtaWRpX3NldF9taWRpX21hc2tfdHJhbnNtaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlsaW5lNi0+bGluZTZtaWRpLT5taWRpX21hc2tfdHJhbnNtaXQgPSB2YWx1ZTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gIm1pZGlfbWFza19yZWNlaXZlIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgbWlkaV9nZXRfbWlkaV9tYXNrX3JlY2VpdmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBsaW5lNi0+bGluZTZtaWRpLT5taWRpX21hc2tfcmVjZWl2ZSk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJtaWRpX21hc2siIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBtaWRpX3NldF9taWRpX21hc2tfcmVjZWl2ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlsaW5lNi0+bGluZTZtaWRpLT5taWRpX21hc2tfcmVjZWl2ZSA9IHZhbHVlOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1pZGlfbWFza190cmFuc21pdCwgU19JV1VHTyB8IFNfSVJVR08sIG1pZGlfZ2V0X21pZGlfbWFza190cmFuc21pdCwgbWlkaV9zZXRfbWlkaV9tYXNrX3RyYW5zbWl0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaWRpX21hc2tfcmVjZWl2ZSwgU19JV1VHTyB8IFNfSVJVR08sIG1pZGlfZ2V0X21pZGlfbWFza19yZWNlaXZlLCBtaWRpX3NldF9taWRpX21hc2tfcmVjZWl2ZSk7CisKKy8qIE1JREkgZGV2aWNlIGRlc3RydWN0b3IgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X21pZGlfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobGluZTZtaWRpLT5saW5lNi0+aWZjZGV2LCAmZGV2X2F0dHJfbWlkaV9tYXNrX3RyYW5zbWl0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobGluZTZtaWRpLT5saW5lNi0+aWZjZGV2LCAmZGV2X2F0dHJfbWlkaV9tYXNrX3JlY2VpdmUpOworCW1pZGlidWZfZGVzdHJveSgmbGluZTZtaWRpLT5taWRpYnVmX2luKTsKKwltaWRpYnVmX2Rlc3Ryb3koJmxpbmU2bWlkaS0+bWlkaWJ1Zl9vdXQpOworCXJldHVybiAwOworfQorCisvKgorCUluaXRpYWxpemUgdGhlIExpbmU2IE1JREkgc3Vic3lzdGVtLgorKi8KK2ludCBsaW5lNl9pbml0X21pZGkoc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCit7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBtaWRpX29wcyA9IHsKKwkJLmRldl9mcmVlID0gc25kX2xpbmU2X21pZGlfZnJlZSwKKwl9OworCisJaW50IGVycjsKKwlzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKmxpbmU2bWlkaTsKKworCWlmICghKGxpbmU2LT5wcm9wZXJ0aWVzLT5jYXBhYmlsaXRpZXMgJiBMSU5FNl9CSVRfQ09OVFJPTCkpCisJCXJldHVybiAwOyAgLyogc2tpcCBNSURJIGluaXRpYWxpemF0aW9uIGFuZCByZXBvcnQgc3VjY2VzcyAqLworCisJbGluZTZtaWRpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9saW5lNl9taWRpKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAobGluZTZtaWRpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gbWlkaWJ1Zl9pbml0KCZsaW5lNm1pZGktPm1pZGlidWZfaW4sIE1JRElfQlVGRkVSX1NJWkUsIDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbWlkaWJ1Zl9pbml0KCZsaW5lNm1pZGktPm1pZGlidWZfb3V0LCBNSURJX0JVRkZFUl9TSVpFLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWxpbmU2bWlkaS0+bGluZTYgPSBsaW5lNjsKKwlsaW5lNm1pZGktPm1pZGlfbWFza190cmFuc21pdCA9IDE7CisJbGluZTZtaWRpLT5taWRpX21hc2tfcmVjZWl2ZSA9IDQ7CisJbGluZTYtPmxpbmU2bWlkaSA9IGxpbmU2bWlkaTsKKworCWVyciA9IHNuZF9kZXZpY2VfbmV3KGxpbmU2LT5jYXJkLCBTTkRSVl9ERVZfUkFXTUlESSwgbGluZTZtaWRpLAorCQkJICAgICAmbWlkaV9vcHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc25kX2NhcmRfc2V0X2RldihsaW5lNi0+Y2FyZCwgbGluZTYtPmlmY2Rldik7CisKKwllcnIgPSBzbmRfbGluZTZfbmV3X21pZGkobGluZTZtaWRpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShsaW5lNi0+aWZjZGV2LCAmZGV2X2F0dHJfbWlkaV9tYXNrX3RyYW5zbWl0KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShsaW5lNi0+aWZjZGV2LCAmZGV2X2F0dHJfbWlkaV9tYXNrX3JlY2VpdmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmbGluZTZtaWRpLT5zZW5kX3dhaXQpOworCXNwaW5fbG9ja19pbml0KCZsaW5lNm1pZGktPnNlbmRfdXJiX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZsaW5lNm1pZGktPm1pZGlfdHJhbnNtaXRfbG9jayk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjlmZDExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGkuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBNSURJX0gKKyNkZWZpbmUgTUlESV9ICisKKworI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKworI2luY2x1ZGUgIm1pZGlidWYuaCIKKworCisjZGVmaW5lIE1JRElfQlVGRkVSX1NJWkUgMTAyNAorCisKK3N0cnVjdCBzbmRfbGluZTZfbWlkaSB7CisJLyoqCisJCSBQb2ludGVyIGJhY2sgdG8gdGhlIExpbmU2IGRyaXZlciBkYXRhIHN0cnVjdHVyZS4KKwkqLworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCisJLyoqCisJCSBNSURJIHN1YnN0cmVhbSBmb3IgcmVjZWl2aW5nIChvciBOVUxMIGlmIG5vdCBhY3RpdmUpLgorCSovCisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtX3JlY2VpdmU7CisKKwkvKioKKwkJIE1JREkgc3Vic3RyZWFtIGZvciB0cmFuc21pdHRpbmcgKG9yIE5VTEwgaWYgbm90IGFjdGl2ZSkuCisJKi8KKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW1fdHJhbnNtaXQ7CisKKwkvKioKKwkJIE51bWJlciBvZiBjdXJyZW50bHkgYWN0aXZlIE1JREkgc2VuZCBVUkJzLgorCSovCisJaW50IG51bV9hY3RpdmVfc2VuZF91cmJzOworCisJLyoqCisJCSBTcGluIGxvY2sgdG8gcHJvdGVjdCB1cGRhdGVzIG9mIHNlbmRfdXJiLgorCSovCisJc3BpbmxvY2tfdCBzZW5kX3VyYl9sb2NrOworCisJLyoqCisJCSBTcGluIGxvY2sgdG8gcHJvdGVjdCBNSURJIGJ1ZmZlciBoYW5kbGluZy4KKwkqLworCXNwaW5sb2NrX3QgbWlkaV90cmFuc21pdF9sb2NrOworCisJLyoqCisJCSBXYWl0IHF1ZXVlIGZvciBNSURJIHRyYW5zbWlzc2lvbi4KKwkqLworCXdhaXRfcXVldWVfaGVhZF90IHNlbmRfd2FpdDsKKworCS8qKgorCQkgQml0IG1hc2sgZm9yIG91dHB1dCBNSURJIGNoYW5uZWxzLgorCSovCisJaW50IG1pZGlfbWFza190cmFuc21pdDsKKworCS8qKgorCQkgQml0IG1hc2sgZm9yIGlucHV0IE1JREkgY2hhbm5lbHMuCisJKi8KKwlpbnQgbWlkaV9tYXNrX3JlY2VpdmU7CisKKwkvKioKKwkJIEJ1ZmZlciBmb3IgaW5jb21pbmcgTUlESSBzdHJlYW0uCisJKi8KKwlzdHJ1Y3QgTWlkaUJ1ZmZlciBtaWRpYnVmX2luOworCisJLyoqCisJCSBCdWZmZXIgZm9yIG91dGdvaW5nIE1JREkgc3RyZWFtLgorCSovCisJc3RydWN0IE1pZGlCdWZmZXIgbWlkaWJ1Zl9vdXQ7Cit9OworCisKK2V4dGVybiBpbnQgbGluZTZfaW5pdF9taWRpKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KTsKK2V4dGVybiB2b2lkIGxpbmU2X21pZGlfcmVjZWl2ZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSAgICAgICBpbnQgbGVuZ3RoKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaWJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGE1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaWJ1Zi5jCkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAibWlkaWJ1Zi5oIgorCisKK3N0YXRpYyBpbnQgbWlkaWJ1Zl9tZXNzYWdlX2xlbmd0aCh1bnNpZ25lZCBjaGFyIGNvZGUpCit7CisJaWYgKGNvZGUgPCAweDgwKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoY29kZSA8IDB4ZjApIHsKKwkJc3RhdGljIGNvbnN0IGludCBsZW5ndGhbXSA9IHsgMywgMywgMywgMywgMiwgMiwgMyB9OworCQlyZXR1cm4gbGVuZ3RoWyhjb2RlID4+IDQpIC0gOF07CisJfSBlbHNlIHsKKwkJLyoKKwkJCU5vdGUgdGhhdCBhY2NvcmRpbmcgdG8gdGhlIE1JREkgc3BlY2lmaWNhdGlvbiAweGYyIGlzCisJCQl0aGUgIlNvbmcgUG9zaXRpb24gUG9pbnRlciIsIGJ1dCB0aGlzIGlzIHVzZWQgYnkgTGluZTYKKwkJCXRvIHNlbmQgc3lzZXggbWVzc2FnZXMgdG8gdGhlIGhvc3QuCisJCSovCisJCXN0YXRpYyBjb25zdCBpbnQgbGVuZ3RoW10gPSB7IC0xLCAyLCAtMSwgMiwgLTEsIC0xLCAxLCAxLCAxLCAxLAorCQkJCQkgICAgICAgMSwgMSwgMSwgLTEsIDEsIDEgfTsKKwkJcmV0dXJuIGxlbmd0aFtjb2RlICYgMHgwZl07CisJfQorfQorCit2b2lkIG1pZGlidWZfcmVzZXQoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMpCit7CisJdGhpcy0+cG9zX3JlYWQgPSB0aGlzLT5wb3Nfd3JpdGUgPSB0aGlzLT5mdWxsID0gMDsKKwl0aGlzLT5jb21tYW5kX3ByZXYgPSAtMTsKK30KKworaW50IG1pZGlidWZfaW5pdChzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcywgaW50IHNpemUsIGludCBzcGxpdCkKK3sKKwl0aGlzLT5idWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCisJaWYgKHRoaXMtPmJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRoaXMtPnNpemUgPSBzaXplOworCXRoaXMtPnNwbGl0ID0gc3BsaXQ7CisJbWlkaWJ1Zl9yZXNldCh0aGlzKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtaWRpYnVmX3N0YXR1cyhzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcykKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAibWlkaWJ1ZiBzaXplPSVkIHNwbGl0PSVkIHBvc19yZWFkPSVkIHBvc193cml0ZT0lZCAiCisJICAgICAgICJmdWxsPSVkIGNvbW1hbmRfcHJldj0lMDJ4XG4iLCB0aGlzLT5zaXplLCB0aGlzLT5zcGxpdCwKKwkgICAgICAgdGhpcy0+cG9zX3JlYWQsIHRoaXMtPnBvc193cml0ZSwgdGhpcy0+ZnVsbCwgdGhpcy0+Y29tbWFuZF9wcmV2KTsKK30KKworc3RhdGljIGludCBtaWRpYnVmX2lzX2VtcHR5KHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzKQoreworCXJldHVybiAodGhpcy0+cG9zX3JlYWQgPT0gdGhpcy0+cG9zX3dyaXRlKSAmJiAhdGhpcy0+ZnVsbDsKK30KKworc3RhdGljIGludCBtaWRpYnVmX2lzX2Z1bGwoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMpCit7CisJcmV0dXJuIHRoaXMtPmZ1bGw7Cit9CisKK2ludCBtaWRpYnVmX2J5dGVzX2ZyZWUoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMpCit7CisJcmV0dXJuCisJCW1pZGlidWZfaXNfZnVsbCh0aGlzKSA/CisJCTAgOgorCQkodGhpcy0+cG9zX3JlYWQgLSB0aGlzLT5wb3Nfd3JpdGUgKyB0aGlzLT5zaXplIC0gMSkgJSB0aGlzLT5zaXplICsgMTsKK30KKworaW50IG1pZGlidWZfYnl0ZXNfdXNlZChzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcykKK3sKKwlyZXR1cm4KKwkJbWlkaWJ1Zl9pc19lbXB0eSh0aGlzKSA/CisJCTAgOgorCQkodGhpcy0+cG9zX3dyaXRlIC0gdGhpcy0+cG9zX3JlYWQgKyB0aGlzLT5zaXplIC0gMSkgJSB0aGlzLT5zaXplICsgMTsKK30KKworaW50IG1pZGlidWZfd3JpdGUoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGJ5dGVzX2ZyZWU7CisJaW50IGxlbmd0aDEsIGxlbmd0aDI7CisJaW50IHNraXBfYWN0aXZlX3NlbnNlID0gMDsKKworCWlmIChtaWRpYnVmX2lzX2Z1bGwodGhpcykgfHwgKGxlbmd0aCA8PSAwKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBza2lwIHRyYWlsaW5nIGFjdGl2ZSBzZW5zZSAqLworCWlmIChkYXRhW2xlbmd0aCAtIDFdID09IDB4ZmUpIHsKKwkJLS1sZW5ndGg7CisJCXNraXBfYWN0aXZlX3NlbnNlID0gMTsKKwl9CisKKwlieXRlc19mcmVlID0gbWlkaWJ1Zl9ieXRlc19mcmVlKHRoaXMpOworCisJaWYgKGxlbmd0aCA+IGJ5dGVzX2ZyZWUpCisJCWxlbmd0aCA9IGJ5dGVzX2ZyZWU7CisKKwlpZiAobGVuZ3RoID4gMCkgeworCQlsZW5ndGgxID0gdGhpcy0+c2l6ZSAtIHRoaXMtPnBvc193cml0ZTsKKworCQlpZiAobGVuZ3RoIDwgbGVuZ3RoMSkgeworCQkJLyogbm8gYnVmZmVyIHdyYXBhcm91bmQgKi8KKwkJCW1lbWNweSh0aGlzLT5idWYgKyB0aGlzLT5wb3Nfd3JpdGUsIGRhdGEsIGxlbmd0aCk7CisJCQl0aGlzLT5wb3Nfd3JpdGUgKz0gbGVuZ3RoOworCQl9IGVsc2UgeworCQkJLyogYnVmZmVyIHdyYXBhcm91bmQgKi8KKwkJCWxlbmd0aDIgPSBsZW5ndGggLSBsZW5ndGgxOworCQkJbWVtY3B5KHRoaXMtPmJ1ZiArIHRoaXMtPnBvc193cml0ZSwgZGF0YSwgbGVuZ3RoMSk7CisJCQltZW1jcHkodGhpcy0+YnVmLCBkYXRhICsgbGVuZ3RoMSwgbGVuZ3RoMik7CisJCQl0aGlzLT5wb3Nfd3JpdGUgPSBsZW5ndGgyOworCQl9CisKKwkJaWYgKHRoaXMtPnBvc193cml0ZSA9PSB0aGlzLT5wb3NfcmVhZCkKKwkJCXRoaXMtPmZ1bGwgPSAxOworCX0KKworCXJldHVybiBsZW5ndGggKyBza2lwX2FjdGl2ZV9zZW5zZTsKK30KKworaW50IG1pZGlidWZfcmVhZChzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgYnl0ZXNfdXNlZDsKKwlpbnQgbGVuZ3RoMSwgbGVuZ3RoMjsKKwlpbnQgY29tbWFuZDsKKwlpbnQgbWlkaV9sZW5ndGg7CisJaW50IHJlcGVhdCA9IDA7CisJaW50IGk7CisKKwkvKiB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3RvcmUgYXQgbGVhc3QgYSAzIGJ5dGUgTUlESSBtZXNzYWdlICovCisJaWYgKGxlbmd0aCA8IDMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1pZGlidWZfaXNfZW1wdHkodGhpcykpCisJCXJldHVybiAwOworCisJYnl0ZXNfdXNlZCA9IG1pZGlidWZfYnl0ZXNfdXNlZCh0aGlzKTsKKworCWlmIChsZW5ndGggPiBieXRlc191c2VkKQorCQlsZW5ndGggPSBieXRlc191c2VkOworCisJbGVuZ3RoMSA9IHRoaXMtPnNpemUgLSB0aGlzLT5wb3NfcmVhZDsKKworCS8qIGNoZWNrIE1JREkgY29tbWFuZCBsZW5ndGggKi8KKwljb21tYW5kID0gdGhpcy0+YnVmW3RoaXMtPnBvc19yZWFkXTsKKworCWlmIChjb21tYW5kICYgMHg4MCkgeworCQltaWRpX2xlbmd0aCA9IG1pZGlidWZfbWVzc2FnZV9sZW5ndGgoY29tbWFuZCk7CisJCXRoaXMtPmNvbW1hbmRfcHJldiA9IGNvbW1hbmQ7CisJfSBlbHNlIHsKKwkJaWYgKHRoaXMtPmNvbW1hbmRfcHJldiA+IDApIHsKKwkJCWludCBtaWRpX2xlbmd0aF9wcmV2ID0gbWlkaWJ1Zl9tZXNzYWdlX2xlbmd0aCh0aGlzLT5jb21tYW5kX3ByZXYpOworCisJCQlpZiAobWlkaV9sZW5ndGhfcHJldiA+IDApIHsKKwkJCQltaWRpX2xlbmd0aCA9IG1pZGlfbGVuZ3RoX3ByZXYgLSAxOworCQkJCXJlcGVhdCA9IDE7CisJCQl9IGVsc2UKKwkJCQltaWRpX2xlbmd0aCA9IC0xOworCQl9IGVsc2UKKwkJCW1pZGlfbGVuZ3RoID0gLTE7CisJfQorCisJaWYgKG1pZGlfbGVuZ3RoIDwgMCkgeworCQkvKiBzZWFyY2ggZm9yIGVuZCBvZiBtZXNzYWdlICovCisJCWlmIChsZW5ndGggPCBsZW5ndGgxKSB7CisJCQkvKiBubyBidWZmZXIgd3JhcGFyb3VuZCAqLworCQkJZm9yIChpID0gMTsgaSA8IGxlbmd0aDsgKytpKQorCQkJCWlmICh0aGlzLT5idWZbdGhpcy0+cG9zX3JlYWQgKyBpXSAmIDB4ODApCisJCQkJCWJyZWFrOworCisJCQltaWRpX2xlbmd0aCA9IGk7CisJCX0gZWxzZSB7CisJCQkvKiBidWZmZXIgd3JhcGFyb3VuZCAqLworCQkJbGVuZ3RoMiA9IGxlbmd0aCAtIGxlbmd0aDE7CisKKwkJCWZvciAoaSA9IDE7IGkgPCBsZW5ndGgxOyArK2kpCisJCQkJaWYgKHRoaXMtPmJ1Zlt0aGlzLT5wb3NfcmVhZCArIGldICYgMHg4MCkKKwkJCQkJYnJlYWs7CisKKwkJCWlmIChpIDwgbGVuZ3RoMSkKKwkJCQltaWRpX2xlbmd0aCA9IGk7CisJCQllbHNlIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoMjsgKytpKQorCQkJCQlpZiAodGhpcy0+YnVmW2ldICYgMHg4MCkKKwkJCQkJCWJyZWFrOworCisJCQkJbWlkaV9sZW5ndGggPSBsZW5ndGgxICsgaTsKKwkJCX0KKwkJfQorCisJCWlmIChtaWRpX2xlbmd0aCA9PSBsZW5ndGgpCisJCQltaWRpX2xlbmd0aCA9IC0xOyAgLyogZW5kIG9mIG1lc3NhZ2Ugbm90IGZvdW5kICovCisJfQorCisJaWYgKG1pZGlfbGVuZ3RoIDwgMCkgeworCQlpZiAoIXRoaXMtPnNwbGl0KQorCQkJcmV0dXJuIDA7ICAvKiBjb21tYW5kIGlzIG5vdCB5ZXQgY29tcGxldGUgKi8KKwl9IGVsc2UgeworCQlpZiAobGVuZ3RoIDwgbWlkaV9sZW5ndGgpCisJCQlyZXR1cm4gMDsgIC8qIGNvbW1hbmQgaXMgbm90IHlldCBjb21wbGV0ZSAqLworCisJCWxlbmd0aCA9IG1pZGlfbGVuZ3RoOworCX0KKworCWlmIChsZW5ndGggPCBsZW5ndGgxKSB7CisJCS8qIG5vIGJ1ZmZlciB3cmFwYXJvdW5kICovCisJCW1lbWNweShkYXRhICsgcmVwZWF0LCB0aGlzLT5idWYgKyB0aGlzLT5wb3NfcmVhZCwgbGVuZ3RoKTsKKwkJdGhpcy0+cG9zX3JlYWQgKz0gbGVuZ3RoOworCX0gZWxzZSB7CisJCS8qIGJ1ZmZlciB3cmFwYXJvdW5kICovCisJCWxlbmd0aDIgPSBsZW5ndGggLSBsZW5ndGgxOworCQltZW1jcHkoZGF0YSArIHJlcGVhdCwgdGhpcy0+YnVmICsgdGhpcy0+cG9zX3JlYWQsIGxlbmd0aDEpOworCQltZW1jcHkoZGF0YSArIHJlcGVhdCArIGxlbmd0aDEsIHRoaXMtPmJ1ZiwgbGVuZ3RoMik7CisJCXRoaXMtPnBvc19yZWFkID0gbGVuZ3RoMjsKKwl9CisKKwlpZiAocmVwZWF0KQorCQlkYXRhWzBdID0gdGhpcy0+Y29tbWFuZF9wcmV2OworCisJdGhpcy0+ZnVsbCA9IDA7CisJcmV0dXJuIGxlbmd0aCArIHJlcGVhdDsKK30KKworaW50IG1pZGlidWZfaWdub3JlKHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzLCBpbnQgbGVuZ3RoKQoreworCWludCBieXRlc191c2VkID0gbWlkaWJ1Zl9ieXRlc191c2VkKHRoaXMpOworCisJaWYgKGxlbmd0aCA+IGJ5dGVzX3VzZWQpCisJCWxlbmd0aCA9IGJ5dGVzX3VzZWQ7CisKKwl0aGlzLT5wb3NfcmVhZCA9ICh0aGlzLT5wb3NfcmVhZCArIGxlbmd0aCkgJSB0aGlzLT5zaXplOworCXRoaXMtPmZ1bGwgPSAwOworCXJldHVybiBsZW5ndGg7Cit9CisKK2ludCBtaWRpYnVmX3NraXBfbWVzc2FnZShzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcywgdW5zaWduZWQgc2hvcnQgbWFzaykKK3sKKwlpbnQgY21kID0gdGhpcy0+Y29tbWFuZF9wcmV2OworCisJaWYgKChjbWQgPj0gMHg4MCkgJiYgKGNtZCA8IDB4ZjApKQorCQlpZiAoKG1hc2sgJiAoMSA8PCAoY21kICYgMHgwZikpKSA9PSAwKQorCQkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtaWRpYnVmX2Rlc3Ryb3koc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMpCit7CisJa2ZyZWUodGhpcy0+YnVmKTsKKwl0aGlzLT5idWYgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGlidWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NzU4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgTUlESUJVRl9ICisjZGVmaW5lIE1JRElCVUZfSAorCisKK3N0cnVjdCBNaWRpQnVmZmVyIHsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJaW50IHNpemU7CisJaW50IHNwbGl0OworCWludCBwb3NfcmVhZCwgcG9zX3dyaXRlOworCWludCBmdWxsOworCWludCBjb21tYW5kX3ByZXY7Cit9OworCisKK2V4dGVybiBpbnQgbWlkaWJ1Zl9ieXRlc191c2VkKHN0cnVjdCBNaWRpQnVmZmVyICptYik7CitleHRlcm4gaW50IG1pZGlidWZfYnl0ZXNfZnJlZShzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIpOworZXh0ZXJuIHZvaWQgbWlkaWJ1Zl9kZXN0cm95KHN0cnVjdCBNaWRpQnVmZmVyICptYik7CitleHRlcm4gaW50IG1pZGlidWZfaWdub3JlKHN0cnVjdCBNaWRpQnVmZmVyICptYiwgaW50IGxlbmd0aCk7CitleHRlcm4gaW50IG1pZGlidWZfaW5pdChzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIsIGludCBzaXplLCBpbnQgc3BsaXQpOworZXh0ZXJuIGludCBtaWRpYnVmX3JlYWQoc3RydWN0IE1pZGlCdWZmZXIgKm1iLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiB2b2lkIG1pZGlidWZfcmVzZXQoc3RydWN0IE1pZGlCdWZmZXIgKm1iKTsKK2V4dGVybiBpbnQgbWlkaWJ1Zl9za2lwX21lc3NhZ2Uoc3RydWN0IE1pZGlCdWZmZXIgKm1iLCB1bnNpZ25lZCBzaG9ydCBtYXNrKTsKK2V4dGVybiB2b2lkIG1pZGlidWZfc3RhdHVzKHN0cnVjdCBNaWRpQnVmZmVyICptYik7CitleHRlcm4gaW50IG1pZGlidWZfd3JpdGUoc3RydWN0IE1pZGlCdWZmZXIgKm1iLCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJIGludCBsZW5ndGgpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDExM2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAiY2FwdHVyZS5oIgorI2luY2x1ZGUgInBsYXliYWNrLmgiCisjaW5jbHVkZSAicG9kLmgiCisKKworLyogdHJpZ2dlciBjYWxsYmFjayAqLworaW50IHNuZF9saW5lNl90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2cGNtLT5sb2NrX3RyaWdnZXIsIGZsYWdzKTsKKwljbGVhcl9iaXQoQklUX1BSRVBBUkVELCAmbGluZTZwY20tPmZsYWdzKTsKKworCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CisJCXN3aXRjaCAocy0+c3RyZWFtKSB7CisJCWNhc2UgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzoKKwkJCWVyciA9IHNuZF9saW5lNl9wbGF5YmFja190cmlnZ2VyKHMsIGNtZCk7CisKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfdHJpZ2dlciwKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkU6CisJCQllcnIgPSBzbmRfbGluZTZfY2FwdHVyZV90cmlnZ2VyKHMsIGNtZCk7CisKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfdHJpZ2dlciwKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJVbmtub3duIHN0cmVhbSBkaXJlY3Rpb24gJWRcbiIsCisJCQkJcy0+c3RyZWFtKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX3RyaWdnZXIsIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogY29udHJvbCBpbmZvIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jb250cm9sX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDI7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAyNTY7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNvbnRyb2wgZ2V0IGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jb250cm9sX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaW50IGk7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJZm9yIChpID0gMjsgaS0tOykKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV0gPSBsaW5lNnBjbS0+dm9sdW1lW2ldOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNvbnRyb2wgcHV0IGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jb250cm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaW50IGksIGNoYW5nZWQgPSAwOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCWZvciAoaSA9IDI7IGktLTspCisJCWlmIChsaW5lNnBjbS0+dm9sdW1lW2ldICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldKSB7CisJCQlsaW5lNnBjbS0+dm9sdW1lW2ldID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV07CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKKy8qIGNvbnRyb2wgZGVmaW5pdGlvbiAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbmU2X2NvbnRyb2wgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJLmluZGV4ID0gMCwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKKwkuaW5mbyA9IHNuZF9saW5lNl9jb250cm9sX2luZm8sCisJLmdldCA9IHNuZF9saW5lNl9jb250cm9sX2dldCwKKwkucHV0ID0gc25kX2xpbmU2X2NvbnRyb2xfcHV0Cit9OworCisvKgorCUNsZWFudXAgdGhlIFBDTSBkZXZpY2UuCisqLworc3RhdGljIHZvaWQgbGluZTZfY2xlYW51cF9wY20oc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX2NoaXAocGNtKTsKKworCWZvciAoaSA9IExJTkU2X0lTT19CVUZGRVJTOyBpLS07KSB7CisJCWlmIChsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXSkgeworCQkJdXNiX2tpbGxfdXJiKGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2ldKTsKKwkJCXVzYl9mcmVlX3VyYihsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXSk7CisJCX0KKwkJaWYgKGxpbmU2cGNtLT51cmJfYXVkaW9faW5baV0pIHsKKwkJCXVzYl9raWxsX3VyYihsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2ldKTsKKwkJCXVzYl9mcmVlX3VyYihsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2ldKTsKKwkJfQorCX0KK30KKworLyogY3JlYXRlIGEgUENNIGRldmljZSAqLworc3RhdGljIGludCBzbmRfbGluZTZfbmV3X3BjbShzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3BjbV9uZXcobGluZTZwY20tPmxpbmU2LT5jYXJkLAorCQkJIChjaGFyICopbGluZTZwY20tPmxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lLAorCQkJIDAsIDEsIDEsICZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcGNtLT5wcml2YXRlX2RhdGEgPSBsaW5lNnBjbTsKKwlwY20tPnByaXZhdGVfZnJlZSA9IGxpbmU2X2NsZWFudXBfcGNtOworCWxpbmU2cGNtLT5wY20gPSBwY207CisJc3RyY3B5KHBjbS0+bmFtZSwgbGluZTZwY20tPmxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lKTsKKworCS8qIHNldCBvcGVyYXRvcnMgKi8KKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX2xpbmU2X3BsYXliYWNrX29wcyk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2xpbmU2X2NhcHR1cmVfb3BzKTsKKworCS8qIHByZS1hbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgKi8KKwlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfQ09OVElOVU9VUywKKwkJCQkJc25kX2RtYV9jb250aW51b3VzX2RhdGEoR0ZQX0tFUk5FTCksCisJCQkJCTY0ICogMTAyNCwgMTI4ICogMTAyNCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogUENNIGRldmljZSBkZXN0cnVjdG9yICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9wY21fZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQoreworCXJldHVybiAwOworfQorCisvKgorCUNyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlIFBDTSBkZXZpY2UgYW5kIG1peGVyIGVudHJpZXMuCisJQ3JlYXRlIFVSQnMgZm9yIHBsYXliYWNrIGFuZCBjYXB0dXJlLgorKi8KK2ludCBsaW5lNl9pbml0X3BjbShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwKKwkJICAgc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgcGNtX29wcyA9IHsKKwkJLmRldl9mcmVlID0gc25kX2xpbmU2X3BjbV9mcmVlLAorCX07CisKKwlpbnQgZXJyOworCWludCBlcF9yZWFkID0gMCwgZXBfd3JpdGUgPSAwOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbTsKKworCWlmICghKGxpbmU2LT5wcm9wZXJ0aWVzLT5jYXBhYmlsaXRpZXMgJiBMSU5FNl9CSVRfUENNKSkKKwkJcmV0dXJuIDA7ICAvKiBza2lwIFBDTSBpbml0aWFsaXphdGlvbiBhbmQgcmVwb3J0IHN1Y2Nlc3MgKi8KKworCS8qIGluaXRpYWxpemUgUENNIHN1YnN5c3RlbSBiYXNlZCBvbiBwcm9kdWN0IGlkOiAqLworCXN3aXRjaCAobGluZTYtPnByb2R1Y3QpIHsKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgorCQllcF9yZWFkICA9IDB4ODI7CisJCWVwX3dyaXRlID0gMHgwMTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1BPRFgzOgorCWNhc2UgTElORTZfREVWSURfUE9EWDNMSVZFOgorCQllcF9yZWFkICA9IDB4ODY7CisJCWVwX3dyaXRlID0gMHgwMjsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKKwkJZXBfcmVhZCAgPSAweDgyOworCQllcF93cml0ZSA9IDB4MDI7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgorCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6CisJCWVwX3JlYWQgID0gMHg4MjsKKwkJZXBfd3JpdGUgPSAweDAxOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgxOgorCQllcF9yZWFkICA9IDB4MDA7CisJCWVwX3dyaXRlID0gMHgwMDsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMjoKKwkJZXBfcmVhZCAgPSAweDg3OworCQllcF93cml0ZSA9IDB4MDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFOworCX0KKworCWxpbmU2cGNtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9saW5lNl9wY20pLCBHRlBfS0VSTkVMKTsKKworCWlmIChsaW5lNnBjbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxpbmU2cGNtLT52b2x1bWVbMF0gPSBsaW5lNnBjbS0+dm9sdW1lWzFdID0gMTI4OworCWxpbmU2cGNtLT5saW5lNiA9IGxpbmU2OworCWxpbmU2cGNtLT5lcF9hdWRpb19yZWFkID0gZXBfcmVhZDsKKwlsaW5lNnBjbS0+ZXBfYXVkaW9fd3JpdGUgPSBlcF93cml0ZTsKKwlsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplID0gdXNiX21heHBhY2tldChsaW5lNi0+dXNiZGV2LAorCQkJCQkJIHVzYl9yY3ZpbnRwaXBlKGxpbmU2LT51c2JkZXYsCisJCQkJCQkJCWVwX3JlYWQpLAorCQkJCQkJICAwKTsKKwlsaW5lNnBjbS0+cHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisJbGluZTYtPmxpbmU2cGNtID0gbGluZTZwY207CisKKwkvKiBQQ00gZGV2aWNlOiAqLworCWVyciA9IHNuZF9kZXZpY2VfbmV3KGxpbmU2LT5jYXJkLCBTTkRSVl9ERVZfUENNLCBsaW5lNiwgJnBjbV9vcHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc25kX2NhcmRfc2V0X2RldihsaW5lNi0+Y2FyZCwgbGluZTYtPmlmY2Rldik7CisKKwllcnIgPSBzbmRfbGluZTZfbmV3X3BjbShsaW5lNnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzcGluX2xvY2tfaW5pdCgmbGluZTZwY20tPmxvY2tfYXVkaW9fb3V0KTsKKwlzcGluX2xvY2tfaW5pdCgmbGluZTZwY20tPmxvY2tfYXVkaW9faW4pOworCXNwaW5fbG9ja19pbml0KCZsaW5lNnBjbS0+bG9ja190cmlnZ2VyKTsKKworCWVyciA9IGNyZWF0ZV9hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjcmVhdGVfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBtaXhlcjogKi8KKwllcnIgPSBzbmRfY3RsX2FkZChsaW5lNi0+Y2FyZCwgc25kX2N0bF9uZXcxKCZsaW5lNl9jb250cm9sLCBsaW5lNnBjbSkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHByZXBhcmUgcGNtIGNhbGxiYWNrICovCitpbnQgc25kX2xpbmU2X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJJVF9QUkVQQVJFRCwgJmxpbmU2cGNtLT5mbGFncykpIHsKKwkJdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOworCQlsaW5lNnBjbS0+cG9zX291dCA9IDA7CisJCWxpbmU2cGNtLT5wb3Nfb3V0X2RvbmUgPSAwOworCisJCXVubGlua193YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOworCQlsaW5lNnBjbS0+Ynl0ZXNfb3V0ID0gMDsKKwkJbGluZTZwY20tPnBvc19pbl9kb25lID0gMDsKKwkJbGluZTZwY20tPmJ5dGVzX2luID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wY20uaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RiMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworLyoKKwlQQ00gaW50ZXJmYWNlIHRvIFBPRCBzZXJpZXMgZGV2aWNlcy4KKyovCisKKyNpZm5kZWYgUENNX0gKKyNkZWZpbmUgUENNX0gKKworCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKyNpbmNsdWRlICJ1c2JkZWZzLmgiCisKKworLyogbnVtYmVyIG9mIFVSQnMgKi8KKyNkZWZpbmUgTElORTZfSVNPX0JVRkZFUlMJOAorCisvKiBudW1iZXIgb2YgVVNCIGZyYW1lcyBwZXIgVVJCICovCisjZGVmaW5lIExJTkU2X0lTT19QQUNLRVRTCTIKKworLyogaW4gYSAiZnVsbCBzcGVlZCIgZGV2aWNlIChzdWNoIGFzIHRoZSBQT0R4dCBQcm8pIHRoaXMgbWVhbnMgMW1zICovCisjZGVmaW5lIExJTkU2X0lTT19JTlRFUlZBTAkxCisKKy8qIHRoaXMgc2hvdWxkIGJlIHF1ZXJpZWQgZHluYW1pY2FsbHkgZnJvbSB0aGUgVVNCIGludGVyZmFjZSEgKi8KKyNkZWZpbmUgTElORTZfSVNPX1BBQ0tFVF9TSVpFX01BWAkyNTIKKworCisvKgorCUV4dHJhY3QgdGhlIG1lc3NhZ2luZyBkZXZpY2UgZnJvbSB0aGUgc3Vic3RyZWFtIGluc3RhbmNlCisqLworI2RlZmluZSBzMm0ocykJKCgoc3RydWN0IHNuZF9saW5lNl9wY20gKikgXAorCQkgICBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHMpKS0+bGluZTYtPmlmY2RldikKKworCitlbnVtIHsKKwlCSVRfUlVOTklOR19QTEFZQkFDSywKKwlCSVRfUlVOTklOR19DQVBUVVJFLAorCUJJVF9QQVVTRV9QTEFZQkFDSywKKwlCSVRfUFJFUEFSRUQKK307CisKK3N0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyB7CisJc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2xpbmU2X3BsYXliYWNrX2h3LCBzbmRfbGluZTZfY2FwdHVyZV9odzsKKwlzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMgc25kX2xpbmU2X3JhdGVzOworCWludCBieXRlc19wZXJfZnJhbWU7Cit9OworCitzdHJ1Y3Qgc25kX2xpbmU2X3BjbSB7CisJLyoqCisJCSBQb2ludGVyIGJhY2sgdG8gdGhlIExpbmU2IGRyaXZlciBkYXRhIHN0cnVjdHVyZS4KKwkqLworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCisJLyoqCisJCSBQcm9wZXJ0aWVzLgorCSovCisJc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzOworCisJLyoqCisJCSBBTFNBIHBjbSBzdHJlYW0KKwkqLworCXN0cnVjdCBzbmRfcGNtICpwY207CisKKwkvKioKKwkJIFVSQnMgZm9yIGF1ZGlvIHBsYXliYWNrLgorCSovCisJc3RydWN0IHVyYiAqdXJiX2F1ZGlvX291dFtMSU5FNl9JU09fQlVGRkVSU107CisKKwkvKioKKwkJIFVSQnMgZm9yIGF1ZGlvIGNhcHR1cmUuCisJKi8KKwlzdHJ1Y3QgdXJiICp1cmJfYXVkaW9faW5bTElORTZfSVNPX0JVRkZFUlNdOworCisJLyoqCisJCSBUZW1wb3JhcnkgYnVmZmVyIHRvIGhvbGQgZGF0YSB3aGVuIHBsYXliYWNrIGJ1ZmZlciB3cmFwcy4KKwkqLworCXVuc2lnbmVkIGNoYXIgKndyYXBfb3V0OworCisJLyoqCisJCSBUZW1wb3JhcnkgYnVmZmVyIGZvciBjYXB0dXJlLgorCQkgU2luY2UgdGhlIHBhY2tldCBzaXplIGlzIG5vdCBrbm93biBpbiBhZHZhbmNlLCB0aGlzIGJ1ZmZlciBpcworCQkgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIG1heGltdW0gc2l6ZSBwYWNrZXRzLgorCSovCisJdW5zaWduZWQgY2hhciAqYnVmZmVyX2luOworCisJLyoqCisJCSBGcmVlIGZyYW1lIHBvc2l0aW9uIGluIHRoZSBwbGF5YmFjayBidWZmZXIuCisJKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBwb3Nfb3V0OworCisJLyoqCisJCSBDb3VudCBwcm9jZXNzZWQgYnl0ZXMgZm9yIHBsYXliYWNrLgorCQkgVGhpcyBpcyBtb2R1bG8gcGVyaW9kIHNpemUgKHRvIGRldGVybWluZSB3aGVuIGEgcGVyaW9kIGlzCisJCSBmaW5pc2hlZCkuCisJKi8KKwl1bnNpZ25lZCBieXRlc19vdXQ7CisKKwkvKioKKwkJIENvdW50ZXIgdG8gY3JlYXRlIGRlc2lyZWQgcGxheWJhY2sgc2FtcGxlIHJhdGUuCisJKi8KKwl1bnNpZ25lZCBjb3VudF9vdXQ7CisKKwkvKioKKwkJIFBsYXliYWNrIHBlcmlvZCBzaXplIGluIGJ5dGVzCisJKi8KKwl1bnNpZ25lZCBwZXJpb2Rfb3V0OworCisJLyoqCisJCSBQcm9jZXNzZWQgZnJhbWUgcG9zaXRpb24gaW4gdGhlIHBsYXliYWNrIGJ1ZmZlci4KKwkJIFRoZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHJpbmcgYnVmZmVyIGhhdmUgYmVlbiBjb25zdW1lZCBieQorCQkgdGhlIFVTQiBzdWJzeXN0ZW0gKGkuZS4sIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UpIHVwIHRvIHRoaXMKKwkJIHBvc2l0aW9uLgorCSovCisJc25kX3BjbV91ZnJhbWVzX3QgcG9zX291dF9kb25lOworCisJLyoqCisJCSBDb3VudCBwcm9jZXNzZWQgYnl0ZXMgZm9yIGNhcHR1cmUuCisJCSBUaGlzIGlzIG1vZHVsbyBwZXJpb2Qgc2l6ZSAodG8gZGV0ZXJtaW5lIHdoZW4gYSBwZXJpb2QgaXMKKwkJIGZpbmlzaGVkKS4KKwkqLworCXVuc2lnbmVkIGJ5dGVzX2luOworCisJLyoqCisJCSBDb3VudGVyIHRvIGNyZWF0ZSBkZXNpcmVkIGNhcHR1cmUgc2FtcGxlIHJhdGUuCisJKi8KKwl1bnNpZ25lZCBjb3VudF9pbjsKKworCS8qKgorCQkgQ2FwdHVyZSBwZXJpb2Qgc2l6ZSBpbiBieXRlcworCSovCisJdW5zaWduZWQgcGVyaW9kX2luOworCisJLyoqCisJCSBQcm9jZXNzZWQgZnJhbWUgcG9zaXRpb24gaW4gdGhlIGNhcHR1cmUgYnVmZmVyLgorCQkgVGhlIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgcmluZyBidWZmZXIgaGF2ZSBiZWVuIGNvbnN1bWVkIGJ5CisJCSB0aGUgVVNCIHN1YnN5c3RlbSAoaS5lLiwgc2VudCB0byB0aGUgVVNCIGRldmljZSkgdXAgdG8gdGhpcworCQkgcG9zaXRpb24uCisJKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBwb3NfaW5fZG9uZTsKKworCS8qKgorCQkgQml0IG1hc2sgb2YgYWN0aXZlIHBsYXliYWNrIFVSQnMuCisJKi8KKwl1bnNpZ25lZCBsb25nIGFjdGl2ZV91cmJfb3V0OworCisJLyoqCisJCSBNYXhpbXVtIHNpemUgb2YgVVNCIHBhY2tldC4KKwkqLworCWludCBtYXhfcGFja2V0X3NpemU7CisKKwkvKioKKwkJIFVTQiBlbmRwb2ludCBmb3IgbGlzdGVuaW5nIHRvIGF1ZGlvIGRhdGEuCisJKi8KKwlpbnQgZXBfYXVkaW9fcmVhZDsKKworCS8qKgorCQkgVVNCIGVuZHBvaW50IGZvciB3cml0aW5nIGF1ZGlvIGRhdGEuCisJKi8KKwlpbnQgZXBfYXVkaW9fd3JpdGU7CisKKwkvKioKKwkJIEJpdCBtYXNrIG9mIGFjdGl2ZSBjYXB0dXJlIFVSQnMuCisJKi8KKwl1bnNpZ25lZCBsb25nIGFjdGl2ZV91cmJfaW47CisKKwkvKioKKwkJIEJpdCBtYXNrIG9mIHBsYXliYWNrIFVSQnMgY3VycmVudGx5IGJlaW5nIHVubGlua2VkLgorCSovCisJdW5zaWduZWQgbG9uZyB1bmxpbmtfdXJiX291dDsKKworCS8qKgorCQkgQml0IG1hc2sgb2YgY2FwdHVyZSBVUkJzIGN1cnJlbnRseSBiZWluZyB1bmxpbmtlZC4KKwkqLworCXVuc2lnbmVkIGxvbmcgdW5saW5rX3VyYl9pbjsKKworCS8qKgorCQkgU3BpbiBsb2NrIHRvIHByb3RlY3QgdXBkYXRlcyBvZiB0aGUgcGxheWJhY2sgYnVmZmVyIHBvc2l0aW9ucyAobm90CisJCSBjb250ZW50cyEpCisJKi8KKwlzcGlubG9ja190IGxvY2tfYXVkaW9fb3V0OworCisJLyoqCisJCSBTcGluIGxvY2sgdG8gcHJvdGVjdCB1cGRhdGVzIG9mIHRoZSBjYXB0dXJlIGJ1ZmZlciBwb3NpdGlvbnMgKG5vdAorCQkgY29udGVudHMhKQorCSovCisJc3BpbmxvY2tfdCBsb2NrX2F1ZGlvX2luOworCisJLyoqCisJCSBTcGluIGxvY2sgdG8gcHJvdGVjdCB0cmlnZ2VyLgorCSovCisJc3BpbmxvY2tfdCBsb2NrX3RyaWdnZXI7CisKKwkvKioKKwkJIFBDTSBwbGF5YmFjayB2b2x1bWUgKGxlZnQgYW5kIHJpZ2h0KS4KKwkqLworCWludCB2b2x1bWVbMl07CisKKwkvKioKKwkJIFNldmVyYWwgc3RhdHVzIGJpdHMgKHNlZSBCSVRfKikuCisJKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworCitleHRlcm4gaW50IGxpbmU2X2luaXRfcGNtKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAorCQkJICBzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgKnByb3BlcnRpZXMpOworZXh0ZXJuIGludCBzbmRfbGluZTZfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCk7CitleHRlcm4gaW50IHNuZF9saW5lNl9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BsYXliYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiMDYxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5jCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAicGNtLmgiCisjaW5jbHVkZSAicG9kLmgiCisjaW5jbHVkZSAicGxheWJhY2suaCIKKworCisvKgorCVNvZnR3YXJlIHN0ZXJlbyB2b2x1bWUgY29udHJvbC4KKyovCitzdGF0aWMgdm9pZCBjaGFuZ2Vfdm9sdW1lKHN0cnVjdCB1cmIgKnVyYl9vdXQsIGludCB2b2x1bWVbXSwKKwkJCSAgaW50IGJ5dGVzX3Blcl9mcmFtZSkKK3sKKwlpbnQgY2huID0gMDsKKworCWlmICh2b2x1bWVbMF0gPT0gMjU2ICYmIHZvbHVtZVsxXSA9PSAyNTYpCisJCXJldHVybjsgIC8qIG1heGltdW0gdm9sdW1lIC0gbm8gY2hhbmdlICovCisKKwlpZiAoYnl0ZXNfcGVyX2ZyYW1lID09IDQpIHsKKwkJc2hvcnQgKnAsICpidWZfZW5kOworCQlwID0gKHNob3J0ICopdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyOworCQlidWZfZW5kID0gcCArIHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLyBzaXplb2YoKnApOworCisJCWZvciAoOyBwIDwgYnVmX2VuZDsgKytwKSB7CisJCQkqcCA9ICgqcCAqIHZvbHVtZVtjaG4gJiAxXSkgPj4gODsKKwkJCSsrY2huOworCQl9CisJfSBlbHNlIGlmIChieXRlc19wZXJfZnJhbWUgPT0gNikgeworCQl1bnNpZ25lZCBjaGFyICpwLCAqYnVmX2VuZDsKKwkJcCA9ICh1bnNpZ25lZCBjaGFyICopdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyOworCQlidWZfZW5kID0gcCArIHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisKKwkJZm9yICg7IHAgPCBidWZfZW5kOyBwICs9IDMpIHsKKwkJCWludCB2YWw7CisJCQl2YWwgPSBwWzBdICsgKHBbMV0gPDwgOCkgKyAoKHNpZ25lZCBjaGFyKXBbMl0gPDwgMTYpOworCQkJdmFsID0gKHZhbCAqIHZvbHVtZVtjaG4gJiAxXSkgPj4gODsKKwkJCXBbMF0gPSB2YWw7CisJCQlwWzFdID0gdmFsID4+IDg7CisJCQlwWzJdID0gdmFsID4+IDE2OworCQkJKytjaG47CisJCX0KKwl9Cit9CisKKy8qCisJRmluZCBhIGZyZWUgVVJCLCBwcmVwYXJlIGF1ZGlvIGRhdGEsIGFuZCBzdWJtaXQgVVJCLgorKi8KK3N0YXRpYyBpbnQgc3VibWl0X2F1ZGlvX291dF91cmIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IGluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHVyYl9zaXplLCB1cmJfZnJhbWVzOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwljb25zdCBpbnQgYnl0ZXNfcGVyX2ZyYW1lID0gbGluZTZwY20tPnByb3BlcnRpZXMtPmJ5dGVzX3Blcl9mcmFtZTsKKwljb25zdCBpbnQgZnJhbWVfaW5jcmVtZW50ID0gbGluZTZwY20tPnByb3BlcnRpZXMtPnNuZF9saW5lNl9yYXRlcy5yYXRzWzBdLm51bV9taW47CisJY29uc3QgaW50IGZyYW1lX2ZhY3RvciA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5zbmRfbGluZTZfcmF0ZXMucmF0c1swXS5kZW4gKiAoVVNCX0lOVEVSVkFMU19QRVJfU0VDT05EIC8gTElORTZfSVNPX0lOVEVSVkFMKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCB1cmIgKnVyYl9vdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTZwY20tPmxvY2tfYXVkaW9fb3V0LCBmbGFncyk7CisJaW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZsaW5lNnBjbS0+YWN0aXZlX3VyYl9vdXQsIExJTkU2X0lTT19CVUZGRVJTKTsKKworCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gTElORTZfSVNPX0JVRkZFUlMpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfYXVkaW9fb3V0LCBmbGFncyk7CisJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJubyBmcmVlIFVSQiBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXVyYl9vdXQgPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpbmRleF07CisJdXJiX3NpemUgPSAwOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyArK2kpIHsKKwkJLyogY29tcHV0ZSBmcmFtZSBzaXplIGZvciBnaXZlbiBzYW1wbGluZyByYXRlICovCisJCWludCBuLCBmczsKKwkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZvdXQgPSAmdXJiX291dC0+aXNvX2ZyYW1lX2Rlc2NbaV07CisJCWxpbmU2cGNtLT5jb3VudF9vdXQgKz0gZnJhbWVfaW5jcmVtZW50OworCQluID0gbGluZTZwY20tPmNvdW50X291dCAvIGZyYW1lX2ZhY3RvcjsKKwkJbGluZTZwY20tPmNvdW50X291dCAtPSBuICogZnJhbWVfZmFjdG9yOworCQlmcyA9IG4gKiBieXRlc19wZXJfZnJhbWU7CisJCWZvdXQtPm9mZnNldCA9IHVyYl9zaXplOworCQlmb3V0LT5sZW5ndGggPSBmczsKKwkJdXJiX3NpemUgKz0gZnM7CisJfQorCisJdXJiX2ZyYW1lcyA9IHVyYl9zaXplIC8gYnl0ZXNfcGVyX2ZyYW1lOworCisJaWYgKHRlc3RfYml0KEJJVF9QQVVTRV9QTEFZQkFDSywgJmxpbmU2cGNtLT5mbGFncykpIHsKKwkJdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyID0gbGluZTZwY20tPndyYXBfb3V0OworCQltZW1zZXQobGluZTZwY20tPndyYXBfb3V0LCAwLCB1cmJfc2l6ZSk7CisJfSBlbHNlIHsKKwkJaWYgKGxpbmU2cGNtLT5wb3Nfb3V0ICsgdXJiX2ZyYW1lcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCQkvKgorCQkJCVRoZSB0cmFuc2ZlcnJlZCBhcmVhIGdvZXMgb3ZlciBidWZmZXIgYm91bmRhcnksCisJCQkJY29weSB0aGUgZGF0YSB0byB0aGUgdGVtcCBidWZmZXIuCisJCQkqLworCQkJaW50IGxlbjsKKwkJCWxlbiA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gbGluZTZwY20tPnBvc19vdXQ7CisJCQl1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIgPSBsaW5lNnBjbS0+d3JhcF9vdXQ7CisKKwkJCWlmIChsZW4gPiAwKSB7CisJCQkJbWVtY3B5KGxpbmU2cGNtLT53cmFwX291dCwgcnVudGltZS0+ZG1hX2FyZWEgKyBsaW5lNnBjbS0+cG9zX291dCAqIGJ5dGVzX3Blcl9mcmFtZSwgbGVuICogYnl0ZXNfcGVyX2ZyYW1lKTsKKwkJCQltZW1jcHkobGluZTZwY20tPndyYXBfb3V0ICsgbGVuICogYnl0ZXNfcGVyX2ZyYW1lLCBydW50aW1lLT5kbWFfYXJlYSwgKHVyYl9mcmFtZXMgLSBsZW4pICogYnl0ZXNfcGVyX2ZyYW1lKTsKKwkJCX0gZWxzZQorCQkJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJkcml2ZXIgYnVnOiBsZW4gPSAlZFxuIiwgbGVuKTsgIC8qIHRoaXMgaXMgc29tZXdoYXQgcGFyYW5vaWQgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIHNldCB0aGUgYnVmZmVyIHBvaW50ZXIgKi8KKwkJCXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlciA9IHJ1bnRpbWUtPmRtYV9hcmVhICsgbGluZTZwY20tPnBvc19vdXQgKiBieXRlc19wZXJfZnJhbWU7CisJCX0KKwl9CisKKwlpZiAoKGxpbmU2cGNtLT5wb3Nfb3V0ICs9IHVyYl9mcmFtZXMpID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlsaW5lNnBjbS0+cG9zX291dCAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKworCXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB1cmJfc2l6ZTsKKwl1cmJfb3V0LT5jb250ZXh0ID0gc3Vic3RyZWFtOworCWNoYW5nZV92b2x1bWUodXJiX291dCwgbGluZTZwY20tPnZvbHVtZSwgYnl0ZXNfcGVyX2ZyYW1lKTsKKworI2lmIERPX0RVTVBfUENNX1NFTkQKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX1BBQ0tFVFM7ICsraSkgeworCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZm91dCA9ICZ1cmJfb3V0LT5pc29fZnJhbWVfZGVzY1tpXTsKKwkJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNnBjbS0+bGluZTYsICdQJywgdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyICsgZm91dC0+b2Zmc2V0LCBmb3V0LT5sZW5ndGgpOworCX0KKyNlbmRpZgorCisJaWYgKHVzYl9zdWJtaXRfdXJiKHVyYl9vdXQsIEdGUF9BVE9NSUMpID09IDApCisJCXNldF9iaXQoaW5kZXgsICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9vdXQpOworCWVsc2UKKwkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgIlVSQiBvdXQgIyVkIHN1Ym1pc3Npb24gZmFpbGVkXG4iLCBpbmRleCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKwlTdWJtaXQgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgcGxheWJhY2sgVVJCcy4KKyovCitzdGF0aWMgaW50IHN1Ym1pdF9hdWRpb19vdXRfYWxsX3VyYnMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IHJldCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fQlVGRkVSUzsgKytpKSB7CisJCXJldCA9IHN1Ym1pdF9hdWRpb19vdXRfdXJiKHN1YnN0cmVhbSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlVbmxpbmsgYWxsIGN1cnJlbnRseSBhY3RpdmUgcGxheWJhY2sgVVJCcy4KKyovCitzdGF0aWMgdm9pZCB1bmxpbmtfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gTElORTZfSVNPX0JVRkZFUlM7IGktLTspIHsKKwkJaWYgKHRlc3RfYml0KGksICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9vdXQpKSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgJmxpbmU2cGNtLT51bmxpbmtfdXJiX291dCkpIHsKKwkJCQlzdHJ1Y3QgdXJiICp1ID0gbGluZTZwY20tPnVyYl9hdWRpb19vdXRbaV07CisJCQkJdXNiX3VubGlua191cmIodSk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisJV2FpdCB1bnRpbCB1bmxpbmtpbmcgb2YgYWxsIGN1cnJlbnRseSBhY3RpdmUgcGxheWJhY2sgVVJCcyBoYXMgYmVlbiBmaW5pc2hlZC4KKyovCitzdGF0aWMgdm9pZCB3YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwlpbnQgdGltZW91dCA9IEhaOworCXVuc2lnbmVkIGludCBpOworCWludCBhbGl2ZTsKKworCWRvIHsKKwkJYWxpdmUgPSAwOworCQlmb3IgKGkgPSBMSU5FNl9JU09fQlVGRkVSUzsgaS0tOykgeworCQkJaWYgKHRlc3RfYml0KGksICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9vdXQpKQorCQkJCWFsaXZlKys7CisJCX0KKwkJaWYgKCFhbGl2ZSkKKwkJCWJyZWFrOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJfSB3aGlsZSAoLS10aW1lb3V0ID4gMCk7CisJaWYgKGFsaXZlKQorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ0aW1lb3V0OiBzdGlsbCAlZCBhY3RpdmUgdXJicy4uXG4iLCBhbGl2ZSk7CisKKwlsaW5lNnBjbS0+YWN0aXZlX3VyYl9vdXQgPSAwOworCWxpbmU2cGNtLT51bmxpbmtfdXJiX291dCA9IDA7Cit9CisKKy8qCisJVW5saW5rIGFsbCBjdXJyZW50bHkgYWN0aXZlIHBsYXliYWNrIFVSQnMsIGFuZCB3YWl0IGZvciBmaW5pc2hpbmcuCisqLwordm9pZCB1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJdW5saW5rX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKKwl3YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKK30KKworLyoKKwlDYWxsYmFjayBmb3IgY29tcGxldGVkIHBsYXliYWNrIFVSQi4KKyovCitzdGF0aWMgdm9pZCBhdWRpb19vdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCWludCBpLCBpbmRleCwgbGVuZ3RoID0gMCwgc2h1dGRvd24gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwkvKiBmaW5kIGluZGV4IG9mIFVSQiAqLworCWZvciAoaW5kZXggPSBMSU5FNl9JU09fQlVGRkVSUzsgaW5kZXgtLTspCisJCWlmICh1cmIgPT0gbGluZTZwY20tPnVyYl9hdWRpb19vdXRbaW5kZXhdKQorCQkJYnJlYWs7CisKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm47ICAvKiBVUkIgaGFzIGJlZW4gdW5saW5rZWQgYXN5bmNocm9ub3VzbHkgKi8KKworCWZvciAoaSA9IExJTkU2X0lTT19QQUNLRVRTOyBpLS07KQorCQlsZW5ndGggKz0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTZwY20tPmxvY2tfYXVkaW9fb3V0LCBmbGFncyk7CisJbGluZTZwY20tPnBvc19vdXRfZG9uZSArPSBsZW5ndGggLyBsaW5lNnBjbS0+cHJvcGVydGllcy0+Ynl0ZXNfcGVyX2ZyYW1lOworCisJaWYgKGxpbmU2cGNtLT5wb3Nfb3V0X2RvbmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWxpbmU2cGNtLT5wb3Nfb3V0X2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisKKwljbGVhcl9iaXQoaW5kZXgsICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9vdXQpOworCisJZm9yIChpID0gTElORTZfSVNPX1BBQ0tFVFM7IGktLTspCisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9PSAtRVNIVVRET1dOKSB7CisJCQlzaHV0ZG93biA9IDE7CisJCQlicmVhazsKKwkJfQorCisJaWYgKHRlc3RfYml0KGluZGV4LCAmbGluZTZwY20tPnVubGlua191cmJfb3V0KSkKKwkJc2h1dGRvd24gPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfYXVkaW9fb3V0LCBmbGFncyk7CisKKwlpZiAoIXNodXRkb3duKSB7CisJCXN1Ym1pdF9hdWRpb19vdXRfdXJiKHN1YnN0cmVhbSk7CisKKwkJaWYgKChsaW5lNnBjbS0+Ynl0ZXNfb3V0ICs9IGxlbmd0aCkgPj0gbGluZTZwY20tPnBlcmlvZF9vdXQpIHsKKwkJCWxpbmU2cGNtLT5ieXRlc19vdXQgLT0gbGluZTZwY20tPnBlcmlvZF9vdXQ7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisJCX0KKwl9Cit9CisKKy8qIG9wZW4gcGxheWJhY2sgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQkgICAgKCZsaW5lNnBjbS0+cHJvcGVydGllcy0+c25kX2xpbmU2X3JhdGVzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlydW50aW1lLT5odyA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5zbmRfbGluZTZfcGxheWJhY2tfaHc7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNsb3NlIHBsYXliYWNrIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyogaHdfcGFyYW1zIHBsYXliYWNrIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9wbGF5YmFja19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJLyogLS0gRmxvcmlhbiBEZW1za2kgW0ZEXSAqLworCS8qIGRvbid0IGFzayBtZSB3aHksIGJ1dCB0aGlzIGZpeGVzIHRoZSBidWcgb24gbXkgbWFjaGluZSAqLworCWlmIChsaW5lNnBjbSA9PSBOVUxMKSB7CisJCWlmIChzdWJzdHJlYW0tPnBjbSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWlmIChzdWJzdHJlYW0tPnBjbS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJc3Vic3RyZWFtLT5wcml2YXRlX2RhdGEgPSBzdWJzdHJlYW0tPnBjbS0+cHJpdmF0ZV9kYXRhOworCQlsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl9CisJLyogLS0gW0ZEXSBlbmQgKi8KKworCXJldCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlsaW5lNnBjbS0+cGVyaW9kX291dCA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKKwlsaW5lNnBjbS0+d3JhcF9vdXQgPSBrbWFsbG9jKDIgKiBMSU5FNl9JU09fUEFDS0VUX1NJWkVfTUFYLCBHRlBfS0VSTkVMKTsKKworCWlmICghbGluZTZwY20tPndyYXBfb3V0KSB7CisJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJjYW5ub3QgbWFsbG9jIHdyYXBfb3V0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGh3X2ZyZWUgcGxheWJhY2sgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X3BsYXliYWNrX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVubGlua193YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKKworCWtmcmVlKGxpbmU2cGNtLT53cmFwX291dCk7CisJbGluZTZwY20tPndyYXBfb3V0ID0gTlVMTDsKKworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKKy8qIHRyaWdnZXIgcGxheWJhY2sgY2FsbGJhY2sgKi8KK2ludCBzbmRfbGluZTZfcGxheWJhY2tfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IGVycjsKKwlsaW5lNnBjbS0+Y291bnRfb3V0ID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJJVF9SVU5OSU5HX1BMQVlCQUNLLCAmbGluZTZwY20tPmZsYWdzKSkgeworCQkJZXJyID0gc3VibWl0X2F1ZGlvX291dF9hbGxfdXJicyhzdWJzdHJlYW0pOworCisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWNsZWFyX2JpdChCSVRfUlVOTklOR19QTEFZQkFDSywgJmxpbmU2cGNtLT5mbGFncyk7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJJVF9SVU5OSU5HX1BMQVlCQUNLLCAmbGluZTZwY20tPmZsYWdzKSkKKwkJCXVubGlua19hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7CisKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXNldF9iaXQoQklUX1BBVVNFX1BMQVlCQUNLLCAmbGluZTZwY20tPmZsYWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWNsZWFyX2JpdChCSVRfUEFVU0VfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiBwbGF5YmFjayBwb2ludGVyIGNhbGxiYWNrICovCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9saW5lNl9wbGF5YmFja19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlyZXR1cm4gbGluZTZwY20tPnBvc19vdXRfZG9uZTsKK30KKworLyogcGxheWJhY2sgb3BlcmF0b3JzICovCitzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2xpbmU2X3BsYXliYWNrX29wcyA9IHsKKwkub3BlbiA9ICAgICAgICBzbmRfbGluZTZfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPSAgICAgICBzbmRfbGluZTZfcGxheWJhY2tfY2xvc2UsCisJLmlvY3RsID0gICAgICAgc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9ICAgc25kX2xpbmU2X3BsYXliYWNrX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9ICAgICBzbmRfbGluZTZfcGxheWJhY2tfaHdfZnJlZSwKKwkucHJlcGFyZSA9ICAgICBzbmRfbGluZTZfcHJlcGFyZSwKKwkudHJpZ2dlciA9ICAgICBzbmRfbGluZTZfdHJpZ2dlciwKKwkucG9pbnRlciA9ICAgICBzbmRfbGluZTZfcGxheWJhY2tfcG9pbnRlciwKK307CisKK2ludCBjcmVhdGVfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCWludCBpOworCisJLyogY3JlYXRlIGF1ZGlvIFVSQnMgYW5kIGZpbGwgaW4gY29uc3RhbnQgdmFsdWVzOiAqLworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fQlVGRkVSUzsgKytpKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQkvKiBVUkIgZm9yIGF1ZGlvIG91dDogKi8KKwkJdXJiID0gbGluZTZwY20tPnVyYl9hdWRpb19vdXRbaV0gPSB1c2JfYWxsb2NfdXJiKExJTkU2X0lTT19QQUNLRVRTLCBHRlBfS0VSTkVMKTsKKworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCWRldl9lcnIobGluZTZwY20tPmxpbmU2LT5pZmNkZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJdXJiLT5kZXYgPSBsaW5lNnBjbS0+bGluZTYtPnVzYmRldjsKKwkJdXJiLT5waXBlID0gdXNiX3NuZGlzb2NwaXBlKGxpbmU2cGNtLT5saW5lNi0+dXNiZGV2LCBsaW5lNnBjbS0+ZXBfYXVkaW9fd3JpdGUgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnN0YXJ0X2ZyYW1lID0gLTE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBMSU5FNl9JU09fUEFDS0VUUzsKKwkJdXJiLT5pbnRlcnZhbCA9IExJTkU2X0lTT19JTlRFUlZBTDsKKwkJdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJCXVyYi0+Y29tcGxldGUgPSBhdWRpb19vdXRfY2FsbGJhY2s7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGxheWJhY2suaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWU0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGxheWJhY2suaApAQCAtMCwwICsxLDMwIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFZQkFDS19ICisjZGVmaW5lIFBMQVlCQUNLX0gKKworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworCitleHRlcm4gc3RydWN0IHNuZF9wY21fb3BzIHNuZF9saW5lNl9wbGF5YmFja19vcHM7CisKKworZXh0ZXJuIGludCBjcmVhdGVfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKTsKK2V4dGVybiBpbnQgc25kX2xpbmU2X3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICAgaW50IGNtZCk7CitleHRlcm4gdm9pZCB1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWNhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcG9kLmMKQEAgLTAsMCArMSwxMTUxIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSAiYXVkaW8uaCIKKyNpbmNsdWRlICJjYXB0dXJlLmgiCisjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgInBsYXliYWNrLmgiCisjaW5jbHVkZSAicG9kLmgiCisKKworI2RlZmluZSBQT0RfU1lTRVhfQ09ERSAzCisjZGVmaW5lIFBPRF9CWVRFU19QRVJfRlJBTUUgNiAgLyogMjRiaXQgYXVkaW8gKHN0ZXJlbykgKi8KKworCitlbnVtIHsKKwlQT0RfU1lTRVhfQ0xJUCAgICAgID0gMHgwZiwKKwlQT0RfU1lTRVhfU0FWRSAgICAgID0gMHgyNCwKKwlQT0RfU1lTRVhfU1lTVEVNICAgID0gMHg1NiwKKwlQT0RfU1lTRVhfU1lTVEVNUkVRID0gMHg1NywKKwkvKiBQT0RfU1lTRVhfVVBEQVRFICAgID0gMHg2YywgKi8gIC8qIHNvZnR3YXJlIHVwZGF0ZSEgKi8KKwlQT0RfU1lTRVhfU1RPUkUgICAgID0gMHg3MSwKKwlQT0RfU1lTRVhfRklOSVNIICAgID0gMHg3MiwKKwlQT0RfU1lTRVhfRFVNUE1FTSAgID0gMHg3MywKKwlQT0RfU1lTRVhfRFVNUCAgICAgID0gMHg3NCwKKwlQT0RfU1lTRVhfRFVNUFJFUSAgID0gMHg3NQorCS8qIFBPRF9TWVNFWF9EVU1QTUVNMiAgPSAweDc2ICovICAgLyogZHVtcHMgZW50aXJlIGludGVybmFsIG1lbW9yeSBvZiBQT0R4dCBQcm8gKi8KK307CisKK2VudW0geworCVBPRF9tb25pdG9yX2xldmVsICA9IDB4MDQsCisJUE9EX3JvdXRpbmcgICAgICAgID0gMHgwNSwKKwlQT0RfdHVuZXJfbXV0ZSAgICAgPSAweDEzLAorCVBPRF90dW5lcl9mcmVxICAgICA9IDB4MTUsCisJUE9EX3R1bmVyX25vdGUgICAgID0gMHgxNiwKKwlQT0RfdHVuZXJfcGl0Y2ggICAgPSAweDE3LAorCVBPRF9zeXN0ZW1faW52YWxpZCA9IDB4N2ZmZgorfTsKKworZW51bSB7CisJUE9EX0RVTVBfTUVNT1JZID0gMgorfTsKKworZW51bSB7CisJUE9EX0JVU1lfUkVBRCwKKwlQT0RfQlVTWV9XUklURSwKKwlQT0RfQ0hBTk5FTF9ESVJUWSwKKwlQT0RfU0FWRV9QUkVTU0VELAorCVBPRF9CVVNZX01JRElTRU5ECit9OworCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3JhdGRlbiBwb2RfcmF0ZGVuID0geworCS5udW1fbWluID0gNzgxMjUsCisJLm51bV9tYXggPSA3ODEyNSwKKwkubnVtX3N0ZXAgPSAxLAorCS5kZW4gPSAyCit9OworCitzdGF0aWMgc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzIHBvZF9wY21fcHJvcGVydGllcyA9IHsKKyAgLnNuZF9saW5lNl9wbGF5YmFja19odyA9IHsKKwkJLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCisJCS5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFLAorCQkucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFX0tOT1QsCisJCS5yYXRlX21pbiA9ICAgICAgICAgMzkwNjIsCisJCS5yYXRlX21heCA9ICAgICAgICAgMzkwNjMsCisJCS5jaGFubmVsc19taW4gPSAgICAgMiwKKwkJLmNoYW5uZWxzX21heCA9ICAgICAyLAorCQkuYnVmZmVyX2J5dGVzX21heCA9IDYwMDAwLAorCQkucGVyaW9kX2J5dGVzX21pbiA9IExJTkU2X0lTT19QQUNLRVRfU0laRV9NQVggKiBQT0RfQllURVNfUEVSX0ZSQU1FLCAgLyogYXQgbGVhc3Qgb25lIFVSQiBtdXN0IGZpdCBpbnRvIG9uZSBwZXJpb2QgKi8KKwkJLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAorCQkucGVyaW9kc19taW4gPSAgICAgIDEsCisJCS5wZXJpb2RzX21heCA9ICAgICAgMTAyNAorCX0sCisgIC5zbmRfbGluZTZfY2FwdHVyZV9odyA9IHsKKwkJLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUKSwKKwkJLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUsCisJCS5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfS05PVCwKKwkJLnJhdGVfbWluID0gICAgICAgICAzOTA2MiwKKwkJLnJhdGVfbWF4ID0gICAgICAgICAzOTA2MywKKwkJLmNoYW5uZWxzX21pbiA9ICAgICAyLAorCQkuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisJCS5idWZmZXJfYnl0ZXNfbWF4ID0gNjAwMDAsCisJCS5wZXJpb2RfYnl0ZXNfbWluID0gTElORTZfSVNPX1BBQ0tFVF9TSVpFX01BWCAqIFBPRF9CWVRFU19QRVJfRlJBTUUsICAvKiBhdCBsZWFzdCBvbmUgVVJCIG11c3QgZml0IGludG8gb25lIHBlcmlvZCAqLworCQkucGVyaW9kX2J5dGVzX21heCA9IDgxOTIsCisJCS5wZXJpb2RzX21pbiA9ICAgICAgMSwKKwkJLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0CisJfSwKKwkuc25kX2xpbmU2X3JhdGVzID0geworCQkubnJhdHMgPSAxLAorCQkucmF0cyA9ICZwb2RfcmF0ZGVuCisJfSwKKwkuYnl0ZXNfcGVyX2ZyYW1lID0gUE9EX0JZVEVTX1BFUl9GUkFNRQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgcG9kX3JlcXVlc3RfdmVyc2lvbltdID0geyAweGYwLCAweDdlLCAweDdmLCAweDA2LCAweDAxLCAweGY3IH07CitzdGF0aWMgY29uc3QgY2hhciBwb2RfcmVxdWVzdF9jaGFubmVsW10gPSB7IDB4ZjAsIDB4MDAsIDB4MDEsIDB4MGMsIDB4MDMsIDB4NzUsIDB4ZjcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIHBvZF92ZXJzaW9uX2hlYWRlcltdICA9IHsgMHhmMiwgMHg3ZSwgMHg3ZiwgMHgwNiwgMHgwMiB9OworCisKKy8qCisJTWFyayBhbGwgcGFyYW1ldGVycyBhcyBkaXJ0eSBhbmQgbm90aWZ5IHdhaXRpbmcgcHJvY2Vzc2VzLgorKi8KK3N0YXRpYyB2b2lkIHBvZF9tYXJrX2JhdGNoX2FsbF9kaXJ0eShzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kKQoreworCWludCBpOworCisJZm9yIChpID0gUE9EX0NPTlRST0xfU0laRTsgaS0tOykKKwkJc2V0X2JpdChpLCBwb2QtPnBhcmFtX2RpcnR5KTsKK30KKworLyoKKwlTZW5kIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IGZvciB0aGUgUE9EIGZpcm13YXJlIHZlcnNpb24gYW5kIGRldmljZSBJRC4KKyovCitzdGF0aWMgaW50IHBvZF92ZXJzaW9uX3JlcXVlc3RfYXN5bmMoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCkKK3sKKwlyZXR1cm4gbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luYygmcG9kLT5saW5lNiwgcG9kLT5idWZmZXJfdmVyc2lvbnJlcSwgc2l6ZW9mKHBvZF9yZXF1ZXN0X3ZlcnNpb24pKTsKK30KKworc3RhdGljIHZvaWQgcG9kX2NyZWF0ZV9maWxlc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1c2JfbGluZTZfcG9kLCBjcmVhdGVfZmlsZXNfd29yayk7CisKKwlwb2RfY3JlYXRlX2ZpbGVzKHBvZC0+ZmlybXdhcmVfdmVyc2lvbiwgcG9kLT5saW5lNi5wcm9wZXJ0aWVzLT5kZXZpY2VfYml0LCBwb2QtPmxpbmU2LmlmY2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHBvZF9zdGFydHVwX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJZW51bSB7CisJCVJFUVVFU1RfTk9ORSwKKwkJUkVRVUVTVF9EVU1QLAorCQlSRVFVRVNUX1ZFUlNJT04KKwl9OworCisJaW50IHJlcXVlc3QgPSBSRVFVRVNUX05PTkU7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKWFyZzsKKworCWlmIChwb2QtPmR1bXByZXEub2spIHsKKwkJaWYgKCFwb2QtPnZlcnNpb25yZXFfb2spCisJCQlyZXF1ZXN0ID0gUkVRVUVTVF9WRVJTSU9OOworCX0gZWxzZSB7CisJCWlmIChwb2QtPnZlcnNpb25yZXFfb2spCisJCQlyZXF1ZXN0ID0gUkVRVUVTVF9EVU1QOworCQllbHNlIGlmIChwb2QtPnN0YXJ0dXBfY291bnQrKyAmIDEpCisJCQlyZXF1ZXN0ID0gUkVRVUVTVF9EVU1QOworCQllbHNlCisJCQlyZXF1ZXN0ID0gUkVRVUVTVF9WRVJTSU9OOworCX0KKworCXN3aXRjaCAocmVxdWVzdCkgeworCWNhc2UgUkVRVUVTVF9EVU1QOgorCQlsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoJnBvZC0+ZHVtcHJlcSwgJnBvZC0+bGluZTYsIDApOworCQlicmVhazsKKworCWNhc2UgUkVRVUVTVF9WRVJTSU9OOgorCQlwb2RfdmVyc2lvbl9yZXF1ZXN0X2FzeW5jKHBvZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWxpbmU2X3N0YXJ0dXBfZGVsYXllZCgmcG9kLT5kdW1wcmVxLCAxLCBwb2Rfc3RhcnR1cF90aW1lb3V0LCBwb2QpOworfQorCitzdGF0aWMgY2hhciAqcG9kX2FsbG9jX3N5c2V4X2J1ZmZlcihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBpbnQgY29kZSwgaW50IHNpemUpCit7CisJcmV0dXJuIGxpbmU2X2FsbG9jX3N5c2V4X2J1ZmZlcigmcG9kLT5saW5lNiwgUE9EX1NZU0VYX0NPREUsIGNvZGUsIHNpemUpOworfQorCisvKgorCVNlbmQgY2hhbm5lbCBkdW1wIGRhdGEgdG8gdGhlIFBPRHh0IFByby4KKyovCitzdGF0aWMgdm9pZCBwb2RfZHVtcChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCWludCBzaXplID0gMSArIHNpemVvZihwb2QtPnByb2dfZGF0YSk7CisJY2hhciAqc3lzZXggPSBwb2RfYWxsb2Nfc3lzZXhfYnVmZmVyKHBvZCwgUE9EX1NZU0VYX0RVTVAsIHNpemUpOworCWlmICghc3lzZXgpCisJCXJldHVybjsKKwkvKiBEb24ndCBrbm93IHdoYXQgdGhpcyBpcyBnb29kIGZvciwgYnV0IFBPRHh0IFBybyB0cmFuc21pdHMgaXQsIHNvIHdlCisJICogYWxzbyBkby4uLiAqLworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTXSA9IDU7CisJbWVtY3B5KHN5c2V4ICsgU1lTRVhfREFUQV9PRlMgKyAxLCBkYXRhLCBzaXplb2YocG9kLT5wcm9nX2RhdGEpKTsKKwlsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2UoJnBvZC0+bGluZTYsIHN5c2V4LCBzaXplKTsKKwltZW1jcHkoJnBvZC0+cHJvZ19kYXRhLCBkYXRhLCBzaXplb2YocG9kLT5wcm9nX2RhdGEpKTsKKwlwb2RfbWFya19iYXRjaF9hbGxfZGlydHkocG9kKTsKKwlrZnJlZShzeXNleCk7Cit9CisKKy8qCisJU3RvcmUgcGFyYW1ldGVyIHZhbHVlIGluIGRyaXZlciBtZW1vcnkgYW5kIG1hcmsgaXQgYXMgZGlydHkuCisqLworc3RhdGljIHZvaWQgcG9kX3N0b3JlX3BhcmFtZXRlcihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBpbnQgcGFyYW0sIGludCB2YWx1ZSkKK3sKKwlwb2QtPnByb2dfZGF0YS5jb250cm9sW3BhcmFtXSA9IHZhbHVlOworCXNldF9iaXQocGFyYW0sIHBvZC0+cGFyYW1fZGlydHkpOworCXBvZC0+ZGlydHkgPSAxOworfQorCisvKgorCUhhbmRsZSBTQVZFIGJ1dHRvbgorKi8KK3N0YXRpYyB2b2lkIHBvZF9zYXZlX2J1dHRvbl9wcmVzc2VkKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGludCB0eXBlLCBpbnQgaW5kZXgpCit7CisJcG9kLT5kaXJ0eSA9IDA7CisJc2V0X2JpdChQT0RfU0FWRV9QUkVTU0VELCAmcG9kLT5hdG9taWNfZmxhZ3MpOworfQorCisvKgorCVByb2Nlc3MgYSBjb21wbGV0ZWx5IHJlY2VpdmVkIG1lc3NhZ2UuCisqLwordm9pZCBwb2RfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmID0gcG9kLT5saW5lNi5idWZmZXJfbWVzc2FnZTsKKworCS8qIGZpbHRlciBtZXNzYWdlcyBieSB0eXBlICovCisJc3dpdGNoIChidWZbMF0gJiAweGYwKSB7CisJY2FzZSBMSU5FNl9QQVJBTV9DSEFOR0U6CisJY2FzZSBMSU5FNl9QUk9HUkFNX0NIQU5HRToKKwljYXNlIExJTkU2X1NZU0VYX0JFR0lOOgorCQlicmVhazsgIC8qIGhhbmRsZSB0aGVzZSBmdXJ0aGVyIGRvd24gKi8KKworCWRlZmF1bHQ6CisJCXJldHVybjsgIC8qIGlnbm9yZSBhbGwgb3RoZXJzICovCisJfQorCisJLyogcHJvY2VzcyBhbGwgcmVtYWluaW5nIG1lc3NhZ2VzICovCisJc3dpdGNoIChidWZbMF0pIHsKKwljYXNlIExJTkU2X1BBUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfREVWSUNFOgorCQlwb2Rfc3RvcmVfcGFyYW1ldGVyKHBvZCwgYnVmWzFdLCBidWZbMl0pOworCQkvKiBpbnRlbnRpb25hbGx5IG5vIGJyZWFrIGhlcmUhICovCisKKwljYXNlIExJTkU2X1BBUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVDoKKwkJaWYgKChidWZbMV0gPT0gUE9EX2FtcF9tb2RlbF9zZXR1cCkgfHwKKwkJICAgIChidWZbMV0gPT0gUE9EX2VmZmVjdF9zZXR1cCkpCisJCQkvKiB0aGVzZSBhbHNvIGFmZmVjdCBvdGhlciBzZXR0aW5ncyAqLworCQkJbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKCZwb2QtPmR1bXByZXEsICZwb2QtPmxpbmU2LCAwKTsKKworCQlicmVhazsKKworCWNhc2UgTElORTZfUFJPR1JBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0RFVklDRToKKwljYXNlIExJTkU2X1BST0dSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUOgorCQlwb2QtPmNoYW5uZWxfbnVtID0gYnVmWzFdOworCQlwb2QtPmRpcnR5ID0gMDsKKwkJc2V0X2JpdChQT0RfQ0hBTk5FTF9ESVJUWSwgJnBvZC0+YXRvbWljX2ZsYWdzKTsKKwkJbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKCZwb2QtPmR1bXByZXEsICZwb2QtPmxpbmU2LCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X1NZU0VYX0JFR0lOIHwgTElORTZfQ0hBTk5FTF9ERVZJQ0U6CisJY2FzZSBMSU5FNl9TWVNFWF9CRUdJTiB8IExJTkU2X0NIQU5ORUxfVU5LTk9XTjoKKwkJaWYgKG1lbWNtcChidWYgKyAxLCBsaW5lNl9taWRpX2lkLCBzaXplb2YobGluZTZfbWlkaV9pZCkpID09IDApIHsKKwkJCXN3aXRjaCAoYnVmWzVdKSB7CisJCQljYXNlIFBPRF9TWVNFWF9EVU1QOgorCQkJCWlmIChwb2QtPmxpbmU2Lm1lc3NhZ2VfbGVuZ3RoID09IHNpemVvZihwb2QtPnByb2dfZGF0YSkgKyA3KSB7CisJCQkJCXN3aXRjaCAocG9kLT5kdW1wcmVxLmluX3Byb2dyZXNzKSB7CisJCQkJCWNhc2UgTElORTZfRFVNUF9DVVJSRU5UOgorCQkJCQkJbWVtY3B5KCZwb2QtPnByb2dfZGF0YSwgYnVmICsgNywgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSk7CisJCQkJCQlwb2RfbWFya19iYXRjaF9hbGxfZGlydHkocG9kKTsKKwkJCQkJCXBvZC0+ZHVtcHJlcS5vayA9IDE7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIFBPRF9EVU1QX01FTU9SWToKKwkJCQkJCW1lbWNweSgmcG9kLT5wcm9nX2RhdGFfYnVmLCBidWYgKyA3LCBzaXplb2YocG9kLT5wcm9nX2RhdGFfYnVmKSk7CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgInVua25vd24gZHVtcCBjb2RlICUwMlhcbiIsIHBvZC0+ZHVtcHJlcS5pbl9wcm9ncmVzcykpOworCQkJCQl9CisKKwkJCQkJbGluZTZfZHVtcF9maW5pc2hlZCgmcG9kLT5kdW1wcmVxKTsKKwkJCQl9IGVsc2UKKwkJCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgIndyb25nIHNpemUgb2YgY2hhbm5lbCBkdW1wIG1lc3NhZ2UgKCVkIGluc3RlYWQgb2YgJWQpXG4iLAorCQkJCQkJCQkJCQkJCQkJCSBwb2QtPmxpbmU2Lm1lc3NhZ2VfbGVuZ3RoLCAoaW50KXNpemVvZihwb2QtPnByb2dfZGF0YSkgKyA3KSk7CisKKwkJCQlicmVhazsKKworCQkJY2FzZSBQT0RfU1lTRVhfU1lTVEVNOiB7CisJCQkJc2hvcnQgdmFsdWUgPSAoKGludClidWZbN10gPDwgMTIpIHwgKChpbnQpYnVmWzhdIDw8IDgpIHwgKChpbnQpYnVmWzldIDw8IDQpIHwgKGludClidWZbMTBdOworCisjZGVmaW5lIFBST0NFU1NfU1lTVEVNX1BBUkFNKHgpIFwKKwkJCQkJY2FzZSBQT0RfICMjIHg6IFwKKwkJCQkJCXBvZC0+eC52YWx1ZSA9IHZhbHVlOyBcCisJCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvZC0+eC53YWl0KTsgXAorCQkJCQkJYnJlYWs7CisKKwkJCQlzd2l0Y2ggKGJ1Zls2XSkgeworCQkJCQlQUk9DRVNTX1NZU1RFTV9QQVJBTShtb25pdG9yX2xldmVsKTsKKwkJCQkJUFJPQ0VTU19TWVNURU1fUEFSQU0ocm91dGluZyk7CisJCQkJCVBST0NFU1NfU1lTVEVNX1BBUkFNKHR1bmVyX211dGUpOworCQkJCQlQUk9DRVNTX1NZU1RFTV9QQVJBTSh0dW5lcl9mcmVxKTsKKwkJCQkJUFJPQ0VTU19TWVNURU1fUEFSQU0odHVuZXJfbm90ZSk7CisJCQkJCVBST0NFU1NfU1lTVEVNX1BBUkFNKHR1bmVyX3BpdGNoKTsKKworI3VuZGVmIFBST0NFU1NfU1lTVEVNX1BBUkFNCisKKwkJCQlkZWZhdWx0OgorCQkJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAidW5rbm93biB0dW5lci9zeXN0ZW0gcmVzcG9uc2UgJTAyWFxuIiwgYnVmWzZdKSk7CisJCQkJfQorCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWNhc2UgUE9EX1NZU0VYX0ZJTklTSDoKKwkJCQkvKiBkbyB3ZSBuZWVkIHRvIHJlc3BvbmQgdG8gdGhpcz8gKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBQT0RfU1lTRVhfU0FWRToKKwkJCQlwb2Rfc2F2ZV9idXR0b25fcHJlc3NlZChwb2QsIGJ1Zls2XSwgYnVmWzddKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBQT0RfU1lTRVhfQ0xJUDoKKwkJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAiYXVkaW8gY2xpcHBlZFxuIikpOworCQkJCXBvZC0+Y2xpcHBpbmcudmFsdWUgPSAxOworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9kLT5jbGlwcGluZy53YWl0KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBQT0RfU1lTRVhfU1RPUkU6CisJCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgIm1lc3NhZ2UgJTAyWCBub3QgeWV0IGltcGxlbWVudGVkXG4iLCBidWZbNV0pKTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAidW5rbm93biBzeXNleCBtZXNzYWdlICUwMlhcbiIsIGJ1Zls1XSkpOworCQkJfQorCQl9IGVsc2UgaWYgKG1lbWNtcChidWYsIHBvZF92ZXJzaW9uX2hlYWRlciwgc2l6ZW9mKHBvZF92ZXJzaW9uX2hlYWRlcikpID09IDApIHsKKwkJCWlmIChwb2QtPnZlcnNpb25yZXFfb2sgPT0gMCkgeworCQkJCXBvZC0+ZmlybXdhcmVfdmVyc2lvbiA9IGJ1ZlsxM10gKiAxMDAgKyBidWZbMTRdICogMTAgKyBidWZbMTVdOworCQkJCXBvZC0+ZGV2aWNlX2lkID0gKChpbnQpYnVmWzhdIDw8IDE2KSB8ICgoaW50KWJ1Zls5XSA8PCA4KSB8IChpbnQpYnVmWzEwXTsKKwkJCQlwb2QtPnZlcnNpb25yZXFfb2sgPSAxOworCisJCQkJLyogTm93IHdlIGtub3cgdGhlIGZpcm13YXJlIHZlcnNpb24sIHNvIHdlIHNjaGVkdWxlIGEgYm90dG9tIGhhbGYKKwkJCQkJIGhhbmRsZXIgdG8gY3JlYXRlIHRoZSBzcGVjaWFsIGZpbGVzOiAqLworCQkJCUlOSVRfV09SSygmcG9kLT5jcmVhdGVfZmlsZXNfd29yaywgcG9kX2NyZWF0ZV9maWxlc193b3JrKTsKKwkJCQlxdWV1ZV93b3JrKGxpbmU2X3dvcmtxdWV1ZSwgJnBvZC0+Y3JlYXRlX2ZpbGVzX3dvcmspOworCQkJfSBlbHNlCisJCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgIm11bHRpcGxlIGZpcm13YXJlIHZlcnNpb24gbWVzc2FnZVxuIikpOworCQl9IGVsc2UKKwkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJ1bmtub3duIHN5c2V4IGhlYWRlclxuIikpOworCisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9TWVNFWF9FTkQ6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgIlBPRDogdW5rbm93biBtZXNzYWdlICUwMlhcbiIsIGJ1ZlswXSkpOworCX0KK30KKworLyoKKwlEZXRlY3Qgc29tZSBjYXNlcyB0aGF0IHJlcXVpcmUgYSBjaGFubmVsIGR1bXAgYWZ0ZXIgc2VuZGluZyBhIGNvbW1hbmQgdG8gdGhlCisJZGV2aWNlLiBJbXBvcnRhbnQgbm90ZXM6CisJKikgVGhlIGFjdHVhbCBkdW1wIHJlcXVlc3QgY2FuIG5vdCBiZSBzZW50IGhlcmUgc2luY2Ugd2UgYXJlIG5vdCBhbGxvd2VkIHRvCisJd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGZpcnN0IG1lc3NhZ2UgaW4gdGhpcyBjb250ZXh0LCBhbmQgc2VuZGluZworCXRoZSBkdW1wIHJlcXVlc3QgYmVmb3JlIGNvbXBsZXRpb24gb2YgdGhlIHByZXZpb3VzIG1lc3NhZ2UgbGVhdmVzIHRoZSBQT0QKKwlpbiBhbiB1bmRlZmluZWQgc3RhdGUuIFRoZSBkdW1wIHJlcXVlc3Qgd2lsbCBiZSBzZW50IHdoZW4gdGhlIGVjaG9lZAorCWNvbW1hbmRzIGFyZSByZWNlaXZlZC4KKwkqKSBUaGlzIG1ldGhvZCBmYWlscyBpZiBhIHBhcmFtIGNoYW5nZSBtZXNzYWdlIGlzICJjaG9wcGVkIiBhZnRlciB0aGUgZmlyc3QKKwlieXRlLgorKi8KK3ZvaWQgcG9kX21pZGlfcG9zdHByb2Nlc3Moc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKworCWlmICghcG9kLT5taWRpX3Bvc3Rwcm9jZXNzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKwkJaWYgKGRhdGFbaV0gPT0gKExJTkU2X1BST0dSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUKSkgeworCQkJbGluZTZfaW52YWxpZGF0ZV9jdXJyZW50KCZwb2QtPmR1bXByZXEpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoKGRhdGFbaV0gPT0gKExJTkU2X1BBUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVCkpICYmIChpIDwgbGVuZ3RoIC0gMSkpCisJCQlpZiAoKGRhdGFbaSArIDFdID09IFBPRF9hbXBfbW9kZWxfc2V0dXApIHx8IChkYXRhW2kgKyAxXSA9PSBQT0RfZWZmZWN0X3NldHVwKSkgeworCQkJCWxpbmU2X2ludmFsaWRhdGVfY3VycmVudCgmcG9kLT5kdW1wcmVxKTsKKwkJCQlicmVhazsKKwkJCX0KKwl9Cit9CisKKy8qCisJU2VuZCBjaGFubmVsIG51bWJlciAoaS5lLiwgc3dpdGNoIHRvIGEgZGlmZmVyZW50IHNvdW5kKS4KKyovCitzdGF0aWMgdm9pZCBwb2Rfc2VuZF9jaGFubmVsKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGludCB2YWx1ZSkKK3sKKwlsaW5lNl9pbnZhbGlkYXRlX2N1cnJlbnQoJnBvZC0+ZHVtcHJlcSk7CisKKwlpZiAobGluZTZfc2VuZF9wcm9ncmFtKCZwb2QtPmxpbmU2LCB2YWx1ZSkgPT0gMCkKKwkJcG9kLT5jaGFubmVsX251bSA9IHZhbHVlOworCWVsc2UKKwkJbGluZTZfZHVtcF9maW5pc2hlZCgmcG9kLT5kdW1wcmVxKTsKK30KKworLyoKKwlUcmFuc21pdCBQT0R4dCBQcm8gY29udHJvbCBwYXJhbWV0ZXIuCisqLwordm9pZCBwb2RfdHJhbnNtaXRfcGFyYW1ldGVyKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGludCBwYXJhbSwgaW50IHZhbHVlKQoreworCWlmIChsaW5lNl90cmFuc21pdF9wYXJhbWV0ZXIoJnBvZC0+bGluZTYsIHBhcmFtLCB2YWx1ZSkgPT0gMCkKKwkJcG9kX3N0b3JlX3BhcmFtZXRlcihwb2QsIHBhcmFtLCB2YWx1ZSk7CisKKwlpZiAoKHBhcmFtID09IFBPRF9hbXBfbW9kZWxfc2V0dXApIHx8IChwYXJhbSA9PSBQT0RfZWZmZWN0X3NldHVwKSkgIC8qIHRoZXNlIGFsc28gYWZmZWN0IG90aGVyIHNldHRpbmdzICovCisJCWxpbmU2X2ludmFsaWRhdGVfY3VycmVudCgmcG9kLT5kdW1wcmVxKTsKK30KKworLyoKKwlSZXNvbHZlIHZhbHVlIHRvIG1lbW9yeSBsb2NhdGlvbi4KKyovCitzdGF0aWMgdm9pZCBwb2RfcmVzb2x2ZShjb25zdCBjaGFyICpidWYsIHNob3J0IGJsb2NrMCwgc2hvcnQgYmxvY2sxLCB1bnNpZ25lZCBjaGFyICpsb2NhdGlvbikKK3sKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlzaG9ydCBibG9jayA9ICh2YWx1ZSA8IDB4NDApID8gYmxvY2swIDogYmxvY2sxOworCXZhbHVlICY9IDB4M2Y7CisJbG9jYXRpb25bMF0gPSBibG9jayA+PiA3OworCWxvY2F0aW9uWzFdID0gdmFsdWUgfCAoYmxvY2sgJiAweDdmKTsKK30KKworLyoKKwlTZW5kIGNvbW1hbmQgdG8gc3RvcmUgY2hhbm5lbC9lZmZlY3RzIHNldHVwL2FtcCBzZXR1cCB0byBQT0R4dCBQcm8uCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NlbmRfc3RvcmVfY29tbWFuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBzaG9ydCBibG9jazAsIHNob3J0IGJsb2NrMSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpbnQgc2l6ZSA9IDMgKyBzaXplb2YocG9kLT5wcm9nX2RhdGFfYnVmKTsKKwljaGFyICpzeXNleCA9IHBvZF9hbGxvY19zeXNleF9idWZmZXIocG9kLCBQT0RfU1lTRVhfU1RPUkUsIHNpemUpOworCWlmICghc3lzZXgpCisJCXJldHVybiAwOworCisJc3lzZXhbU1lTRVhfREFUQV9PRlNdID0gNTsgIC8qIHNlZSBwb2RfZHVtcCgpICovCisJcG9kX3Jlc29sdmUoYnVmLCBibG9jazAsIGJsb2NrMSwgc3lzZXggKyBTWVNFWF9EQVRBX09GUyArIDEpOworCW1lbWNweShzeXNleCArIFNZU0VYX0RBVEFfT0ZTICsgMywgJnBvZC0+cHJvZ19kYXRhX2J1Ziwgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhX2J1ZikpOworCisJbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKCZwb2QtPmxpbmU2LCBzeXNleCwgc2l6ZSk7CisJa2ZyZWUoc3lzZXgpOworCS8qIG5lZWRzIHNvbWUgZGVsYXkgaGVyZSBvbiBBTUQ2NCBwbGF0Zm9ybSAqLworCXJldHVybiBjb3VudDsKK30KKworLyoKKwlTZW5kIGNvbW1hbmQgdG8gcmV0cmlldmUgY2hhbm5lbC9lZmZlY3RzIHNldHVwL2FtcCBzZXR1cCB0byBQT0R4dCBQcm8uCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NlbmRfcmV0cmlldmVfY29tbWFuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBzaG9ydCBibG9jazAsIHNob3J0IGJsb2NrMSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHNpemUgPSA0OworCWNoYXIgKnN5c2V4ID0gcG9kX2FsbG9jX3N5c2V4X2J1ZmZlcihwb2QsIFBPRF9TWVNFWF9EVU1QTUVNLCBzaXplKTsKKworCWlmICghc3lzZXgpCisJCXJldHVybiAwOworCisJcG9kX3Jlc29sdmUoYnVmLCBibG9jazAsIGJsb2NrMSwgc3lzZXggKyBTWVNFWF9EQVRBX09GUyk7CisJc3lzZXhbU1lTRVhfREFUQV9PRlMgKyAyXSA9IDA7CisJc3lzZXhbU1lTRVhfREFUQV9PRlMgKyAzXSA9IDA7CisJbGluZTZfZHVtcF9zdGFydGVkKCZwb2QtPmR1bXByZXEsIFBPRF9EVU1QX01FTU9SWSk7CisKKwlpZiAobGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKCZwb2QtPmxpbmU2LCBzeXNleCwgc2l6ZSkgPCBzaXplKQorCQlsaW5lNl9kdW1wX2ZpbmlzaGVkKCZwb2QtPmR1bXByZXEpOworCisJa2ZyZWUoc3lzZXgpOworCS8qIG5lZWRzIHNvbWUgZGVsYXkgaGVyZSBvbiBBTUQ2NCBwbGF0Zm9ybSAqLworCXJldHVybiBjb3VudDsKK30KKworLyoKKwlHZW5lcmljIGdldCBuYW1lIGZ1bmN0aW9uLgorKi8KK3N0YXRpYyBzc2l6ZV90IGdldF9uYW1lX2dlbmVyaWMoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgY29uc3QgY2hhciAqc3RyLCBjaGFyICpidWYpCit7CisJaW50IGxlbmd0aCA9IDA7CisJY29uc3QgY2hhciAqcDE7CisJY2hhciAqcDI7CisJY2hhciAqbGFzdF9ub25fc3BhY2UgPSBidWY7CisKKwlpbnQgcmV0dmFsID0gbGluZTZfd2FpdF9kdW1wKCZwb2QtPmR1bXByZXEsIDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZm9yIChwMSA9IHN0ciwgcDIgPSBidWY7ICpwMTsgKytwMSwgKytwMikgeworCQkqcDIgPSAqcDE7CisJCWlmICgqcDIgIT0gJyAnKQorCQkJbGFzdF9ub25fc3BhY2UgPSBwMjsKKwkJaWYgKCsrbGVuZ3RoID09IFBPRF9OQU1FX0xFTkdUSCkKKwkJCWJyZWFrOworCX0KKworCSoobGFzdF9ub25fc3BhY2UgKyAxKSA9ICdcbic7CisJcmV0dXJuIGxhc3Rfbm9uX3NwYWNlIC0gYnVmICsgMjsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiY2hhbm5lbCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBvZC0+Y2hhbm5lbF9udW0pOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAiY2hhbm5lbCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCXBvZF9zZW5kX2NoYW5uZWwocG9kLCB2YWx1ZSk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJuYW1lIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gZ2V0X25hbWVfZ2VuZXJpYyhwb2QsIHBvZC0+cHJvZ19kYXRhLmhlYWRlciArIFBPRF9OQU1FX09GRlNFVCwgYnVmKTsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAibmFtZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfbmFtZV9idWYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBnZXRfbmFtZV9nZW5lcmljKHBvZCwgcG9kLT5wcm9nX2RhdGFfYnVmLmhlYWRlciArIFBPRF9OQU1FX09GRlNFVCwgYnVmKTsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiZHVtcCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfZHVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHJldHZhbCA9IGxpbmU2X3dhaXRfZHVtcCgmcG9kLT5kdW1wcmVxLCAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1jcHkoYnVmLCAmcG9kLT5wcm9nX2RhdGEsIHNpemVvZihwb2QtPnByb2dfZGF0YSkpOworCXJldHVybiBzaXplb2YocG9kLT5wcm9nX2RhdGEpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAiZHVtcCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfZHVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmIChjb3VudCAhPSBzaXplb2YocG9kLT5wcm9nX2RhdGEpKSB7CisJCWRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsCisJCQkJCQkiZGF0YSBibG9jayBtdXN0IGJlIGV4YWN0bHkgJWQgYnl0ZXNcbiIsCisJCQkJCQkoaW50KXNpemVvZihwb2QtPnByb2dfZGF0YSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwb2RfZHVtcChwb2QsIGJ1Zik7CisJcmV0dXJuIHNpemVvZihwb2QtPnByb2dfZGF0YSk7Cit9CisKKy8qCisJUmVxdWVzdCBzeXN0ZW0gcGFyYW1ldGVyLgorCUBwYXJhbSB0dW5lciBub24temVybywgaWYgY29kZSByZWZlcnMgdG8gYSB0dW5lciBwYXJhbWV0ZXIKKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X3N5c3RlbV9wYXJhbShzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBjaGFyICpidWYsIGludCBjb2RlLCBzdHJ1Y3QgVmFsdWVXYWl0ICpwYXJhbSwgaW50IHR1bmVyLCBpbnQgc2lnbikKK3sKKwljaGFyICpzeXNleDsKKwlpbnQgdmFsdWU7CisJc3RhdGljIGNvbnN0IGludCBzaXplID0gMTsKKwlpbnQgcmV0dmFsID0gMDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmICgoKHBvZC0+cHJvZ19kYXRhLmNvbnRyb2xbUE9EX3R1bmVyXSAmIDB4NDApID09IDApICYmIHR1bmVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHNlbmQgdmFsdWUgcmVxdWVzdCB0byB0dW5lcjogKi8KKwlwYXJhbS0+dmFsdWUgPSBQT0Rfc3lzdGVtX2ludmFsaWQ7CisJc3lzZXggPSBwb2RfYWxsb2Nfc3lzZXhfYnVmZmVyKHBvZCwgUE9EX1NZU0VYX1NZU1RFTVJFUSwgc2l6ZSk7CisJaWYgKCFzeXNleCkKKwkJcmV0dXJuIDA7CisJc3lzZXhbU1lTRVhfREFUQV9PRlNdID0gY29kZTsKKwlsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2UoJnBvZC0+bGluZTYsIHN5c2V4LCBzaXplKTsKKwlrZnJlZShzeXNleCk7CisKKwkvKiB3YWl0IGZvciB0dW5lciB0byByZXNwb25kOiAqLworCWFkZF93YWl0X3F1ZXVlKCZwYXJhbS0+d2FpdCwgJndhaXQpOworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCisJd2hpbGUgKHBhcmFtLT52YWx1ZSA9PSBQT0Rfc3lzdGVtX2ludmFsaWQpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlzY2hlZHVsZSgpOworCX0KKworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwYXJhbS0+d2FpdCwgJndhaXQpOworCisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwl2YWx1ZSA9IHNpZ24gPyAoaW50KShzaWduZWQgc2hvcnQpcGFyYW0tPnZhbHVlIDogKGludCkodW5zaWduZWQgc2hvcnQpcGFyYW0tPnZhbHVlOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWx1ZSk7Cit9CisKKy8qCisJU2VuZCBzeXN0ZW0gcGFyYW1ldGVyLgorCUBwYXJhbSB0dW5lciBub24temVybywgaWYgY29kZSByZWZlcnMgdG8gYSB0dW5lciBwYXJhbWV0ZXIKKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X3N5c3RlbV9wYXJhbShzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBjb25zdCBjaGFyICpidWYsCisJCQkJICAgIGludCBjb3VudCwgaW50IGNvZGUsIHVuc2lnbmVkIHNob3J0IG1hc2ssCisJCQkJICAgIGludCB0dW5lcikKK3sKKwljaGFyICpzeXNleDsKKwlzdGF0aWMgY29uc3QgaW50IHNpemUgPSA1OworCXVuc2lnbmVkIHNob3J0IHZhbHVlOworCisJaWYgKCgocG9kLT5wcm9nX2RhdGEuY29udHJvbFtQT0RfdHVuZXJdICYgMHg0MCkgPT0gMCkgJiYgdHVuZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc2VuZCB2YWx1ZSB0byB0dW5lcjogKi8KKwlzeXNleCA9IHBvZF9hbGxvY19zeXNleF9idWZmZXIocG9kLCBQT0RfU1lTRVhfU1lTVEVNLCBzaXplKTsKKwlpZiAoIXN5c2V4KQorCQlyZXR1cm4gMDsKKwl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApICYgbWFzazsKKwlzeXNleFtTWVNFWF9EQVRBX09GU10gPSBjb2RlOworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTICsgMV0gPSAodmFsdWUgPj4gMTIpICYgMHgwZjsKKwlzeXNleFtTWVNFWF9EQVRBX09GUyArIDJdID0gKHZhbHVlID4+ICA4KSAmIDB4MGY7CisJc3lzZXhbU1lTRVhfREFUQV9PRlMgKyAzXSA9ICh2YWx1ZSA+PiAgNCkgJiAweDBmOworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTICsgNF0gPSAodmFsdWUgICAgICApICYgMHgwZjsKKwlsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2UoJnBvZC0+bGluZTYsIHN5c2V4LCBzaXplKTsKKwlrZnJlZShzeXNleCk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJkdW1wX2J1ZiIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfZHVtcF9idWYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCByZXR2YWwgPSBsaW5lNl93YWl0X2R1bXAoJnBvZC0+ZHVtcHJlcSwgMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJbWVtY3B5KGJ1ZiwgJnBvZC0+cHJvZ19kYXRhX2J1Ziwgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhX2J1ZikpOworCXJldHVybiBzaXplb2YocG9kLT5wcm9nX2RhdGFfYnVmKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gImR1bXBfYnVmIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9kdW1wX2J1ZihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKGNvdW50ICE9IHNpemVvZihwb2QtPnByb2dfZGF0YSkpIHsKKwkJZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwKKwkJCQkJCSJkYXRhIGJsb2NrIG11c3QgYmUgZXhhY3RseSAlZCBieXRlc1xuIiwKKwkJCQkJCShpbnQpc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbWNweSgmcG9kLT5wcm9nX2RhdGFfYnVmLCBidWYsIHNpemVvZihwb2QtPnByb2dfZGF0YSkpOworCXJldHVybiBzaXplb2YocG9kLT5wcm9nX2RhdGEpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAiZmluaXNoIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9maW5pc2goc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHNpemUgPSAwOworCWNoYXIgKnN5c2V4ID0gcG9kX2FsbG9jX3N5c2V4X2J1ZmZlcihwb2QsIFBPRF9TWVNFWF9GSU5JU0gsIHNpemUpOworCWlmICghc3lzZXgpCisJCXJldHVybiAwOworCWxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZSgmcG9kLT5saW5lNiwgc3lzZXgsIHNpemUpOworCWtmcmVlKHN5c2V4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJzdG9yZV9jaGFubmVsIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9zdG9yZV9jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBvZF9zZW5kX3N0b3JlX2NvbW1hbmQoZGV2LCBidWYsIGNvdW50LCAweDAwMDAsIDB4MDBjMCk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJzdG9yZV9lZmZlY3RzX3NldHVwIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9zdG9yZV9lZmZlY3RzX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBwb2Rfc2VuZF9zdG9yZV9jb21tYW5kKGRldiwgYnVmLCBjb3VudCwgMHgwMDgwLCAweDAwODApOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAic3RvcmVfYW1wX3NldHVwIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9zdG9yZV9hbXBfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBvZF9zZW5kX3N0b3JlX2NvbW1hbmQoZGV2LCBidWYsIGNvdW50LCAweDAwNDAsIDB4MDEwMCk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJyZXRyaWV2ZV9jaGFubmVsIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9yZXRyaWV2ZV9jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBwb2Rfc2VuZF9yZXRyaWV2ZV9jb21tYW5kKGRldiwgYnVmLCBjb3VudCwgMHgwMDAwLCAweDAwYzApOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAicmV0cmlldmVfZWZmZWN0c19zZXR1cCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfcmV0cmlldmVfZWZmZWN0c19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gcG9kX3NlbmRfcmV0cmlldmVfY29tbWFuZChkZXYsIGJ1ZiwgY291bnQsIDB4MDA4MCwgMHgwMDgwKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInJldHJpZXZlX2FtcF9zZXR1cCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfcmV0cmlldmVfYW1wX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gcG9kX3NlbmRfcmV0cmlldmVfY29tbWFuZChkZXYsIGJ1ZiwgY291bnQsIDB4MDA0MCwgMHgwMTAwKTsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiZGlydHkiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X2RpcnR5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJYnVmWzBdID0gcG9kLT5kaXJ0eSA/ICcxJyA6ICcwJzsKKwlidWZbMV0gPSAnXG4nOworCXJldHVybiAyOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJtaWRpX3Bvc3Rwcm9jZXNzIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9taWRpX3Bvc3Rwcm9jZXNzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBvZC0+bWlkaV9wb3N0cHJvY2Vzcyk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJtaWRpX3Bvc3Rwcm9jZXNzIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9taWRpX3Bvc3Rwcm9jZXNzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlwb2QtPm1pZGlfcG9zdHByb2Nlc3MgPSB2YWx1ZSA/IDEgOiAwOworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAic2VyaWFsX251bWJlciIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfc2VyaWFsX251bWJlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG9kLT5zZXJpYWxfbnVtYmVyKTsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiZmlybXdhcmVfdmVyc2lvbiIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfZmlybXdhcmVfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwMmRcbiIsIHBvZC0+ZmlybXdhcmVfdmVyc2lvbiAvIDEwMCwKKwkJICAgICAgIHBvZC0+ZmlybXdhcmVfdmVyc2lvbiAlIDEwMCk7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImRldmljZV9pZCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfZGV2aWNlX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBvZC0+ZGV2aWNlX2lkKTsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiY2xpcCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF93YWl0X2Zvcl9jbGlwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IGVyciA9IDA7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJcG9kLT5jbGlwcGluZy52YWx1ZSA9IDA7CisJYWRkX3dhaXRfcXVldWUoJnBvZC0+Y2xpcHBpbmcud2FpdCwgJndhaXQpOworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCisJd2hpbGUgKHBvZC0+Y2xpcHBpbmcudmFsdWUgPT0gMCkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWVyciA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXNjaGVkdWxlKCk7CisJfQorCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBvZC0+Y2xpcHBpbmcud2FpdCwgJndhaXQpOworCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgUE9EX0dFVF9TWVNURU1fUEFSQU0oY29kZSwgdHVuZXIsIHNpZ24pIFwKK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfICMjIGNvZGUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsgXAorCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7IFwKKwlyZXR1cm4gcG9kX2dldF9zeXN0ZW1fcGFyYW0ocG9kLCBidWYsIFBPRF8gIyMgY29kZSwgJnBvZC0+Y29kZSwgXAorCQkJCSAgICB0dW5lciwgc2lnbik7IFwKK30KKworI2RlZmluZSBQT0RfR0VUX1NFVF9TWVNURU1fUEFSQU0oY29kZSwgbWFzaywgdHVuZXIsIHNpZ24pIFwKK1BPRF9HRVRfU1lTVEVNX1BBUkFNKGNvZGUsIHR1bmVyLCBzaWduKSBcCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0XyAjIyBjb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKK3sgXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7IFwKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOyBcCisJcmV0dXJuIHBvZF9zZXRfc3lzdGVtX3BhcmFtKHBvZCwgYnVmLCBjb3VudCwgUE9EXyAjIyBjb2RlLCBtYXNrLCBcCisJCQkJICAgIHR1bmVyKTsgXAorfQorCitQT0RfR0VUX1NFVF9TWVNURU1fUEFSQU0obW9uaXRvcl9sZXZlbCwgMHhmZmZmLCAwLCAwKTsKK1BPRF9HRVRfU0VUX1NZU1RFTV9QQVJBTShyb3V0aW5nLCAweDAwMDMsIDAsIDApOworUE9EX0dFVF9TRVRfU1lTVEVNX1BBUkFNKHR1bmVyX211dGUsIDB4MDAwMSwgMSwgMCk7CitQT0RfR0VUX1NFVF9TWVNURU1fUEFSQU0odHVuZXJfZnJlcSwgMHhmZmZmLCAxLCAwKTsKK1BPRF9HRVRfU1lTVEVNX1BBUkFNKHR1bmVyX25vdGUsIDEsIDEpOworUE9EX0dFVF9TWVNURU1fUEFSQU0odHVuZXJfcGl0Y2gsIDEsIDEpOworCisjdW5kZWYgR0VUX1NFVF9TWVNURU1fUEFSQU0KKyN1bmRlZiBHRVRfU1lTVEVNX1BBUkFNCisKKy8qIFBPRCBzcGVjaWFsIGZpbGVzOiAqLworc3RhdGljIERFVklDRV9BVFRSKGNoYW5uZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2NoYW5uZWwsIHBvZF9zZXRfY2hhbm5lbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2xpcCwgU19JUlVHTywgcG9kX3dhaXRfZm9yX2NsaXAsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGV2aWNlX2lkLCBTX0lSVUdPLCBwb2RfZ2V0X2RldmljZV9pZCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkaXJ0eSwgU19JUlVHTywgcG9kX2dldF9kaXJ0eSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkdW1wLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kdW1wLCBwb2Rfc2V0X2R1bXApOworc3RhdGljIERFVklDRV9BVFRSKGR1bXBfYnVmLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kdW1wX2J1ZiwgcG9kX3NldF9kdW1wX2J1Zik7CitzdGF0aWMgREVWSUNFX0FUVFIoZmluaXNoLCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgcG9kX3NldF9maW5pc2gpOworc3RhdGljIERFVklDRV9BVFRSKGZpcm13YXJlX3ZlcnNpb24sIFNfSVJVR08sIHBvZF9nZXRfZmlybXdhcmVfdmVyc2lvbiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaWRpX3Bvc3Rwcm9jZXNzLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9taWRpX3Bvc3Rwcm9jZXNzLCBwb2Rfc2V0X21pZGlfcG9zdHByb2Nlc3MpOworc3RhdGljIERFVklDRV9BVFRSKG1vbml0b3JfbGV2ZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vbml0b3JfbGV2ZWwsIHBvZF9zZXRfbW9uaXRvcl9sZXZlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgcG9kX2dldF9uYW1lLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKG5hbWVfYnVmLCBTX0lSVUdPLCBwb2RfZ2V0X25hbWVfYnVmLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHJldHJpZXZlX2FtcF9zZXR1cCwgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIHBvZF9zZXRfcmV0cmlldmVfYW1wX3NldHVwKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXRyaWV2ZV9jaGFubmVsLCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgcG9kX3NldF9yZXRyaWV2ZV9jaGFubmVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXRyaWV2ZV9lZmZlY3RzX3NldHVwLCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgcG9kX3NldF9yZXRyaWV2ZV9lZmZlY3RzX3NldHVwKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyb3V0aW5nLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yb3V0aW5nLCBwb2Rfc2V0X3JvdXRpbmcpOworc3RhdGljIERFVklDRV9BVFRSKHNlcmlhbF9udW1iZXIsIFNfSVJVR08sIHBvZF9nZXRfc2VyaWFsX251bWJlciwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9yZV9hbXBfc2V0dXAsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBwb2Rfc2V0X3N0b3JlX2FtcF9zZXR1cCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvcmVfY2hhbm5lbCwgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIHBvZF9zZXRfc3RvcmVfY2hhbm5lbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvcmVfZWZmZWN0c19zZXR1cCwgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIHBvZF9zZXRfc3RvcmVfZWZmZWN0c19zZXR1cCk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuZXJfZnJlcSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdHVuZXJfZnJlcSwgcG9kX3NldF90dW5lcl9mcmVxKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5lcl9tdXRlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90dW5lcl9tdXRlLCBwb2Rfc2V0X3R1bmVyX211dGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmVyX25vdGUsIFNfSVJVR08sIHBvZF9nZXRfdHVuZXJfbm90ZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5lcl9waXRjaCwgU19JUlVHTywgcG9kX2dldF90dW5lcl9waXRjaCwgbGluZTZfbm9wX3dyaXRlKTsKKworI2lmIENSRUFURV9SQVdfRklMRQorc3RhdGljIERFVklDRV9BVFRSKHJhdywgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIGxpbmU2X3NldF9yYXcpOworI2VuZGlmCisKKy8qCisJUE9EIGRlc3RydWN0b3IuCisqLworc3RhdGljIHZvaWQgcG9kX2Rlc3RydWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKworCWlmIChwb2QgPT0gTlVMTCkKKwkJcmV0dXJuOworCWxpbmU2ID0gJnBvZC0+bGluZTY7CisJaWYgKGxpbmU2ID09IE5VTEwpCisJCXJldHVybjsKKwlsaW5lNl9jbGVhbnVwX2F1ZGlvKGxpbmU2KTsKKworCS8qIGZyZWUgZHVtcCByZXF1ZXN0IGRhdGE6ICovCisJbGluZTZfZHVtcHJlcV9kZXN0cnVjdCgmcG9kLT5kdW1wcmVxKTsKKworCWtmcmVlKHBvZC0+YnVmZmVyX3ZlcnNpb25yZXEpOworfQorCisvKgorCUNyZWF0ZSBzeXNmcyBlbnRyaWVzLgorKi8KK3N0YXRpYyBpbnQgcG9kX2NyZWF0ZV9maWxlczIoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBlcnI7CisKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NoYW5uZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NsaXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldmljZV9pZCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlydHkpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2R1bXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2R1bXBfYnVmKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9maW5pc2gpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24pKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21pZGlfcG9zdHByb2Nlc3MpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vbml0b3JfbGV2ZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWVfYnVmKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXRyaWV2ZV9hbXBfc2V0dXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldHJpZXZlX2NoYW5uZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldHJpZXZlX2VmZmVjdHNfc2V0dXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JvdXRpbmcpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3NlcmlhbF9udW1iZXIpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b3JlX2FtcF9zZXR1cCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvcmVfY2hhbm5lbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvcmVfZWZmZWN0c19zZXR1cCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXJfZnJlcSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXJfbXV0ZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXJfbm90ZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuZXJfcGl0Y2gpKTsKKworI2lmIENSRUFURV9SQVdfRklMRQorCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmF3KSk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKgorCSBJbml0IFBPRCBkZXZpY2UuCisqLworaW50IHBvZF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9ICZwb2QtPmxpbmU2OworCisJaWYgKChpbnRlcmZhY2UgPT0gTlVMTCkgfHwgKHBvZCA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwb2QtPmNoYW5uZWxfbnVtID0gMjU1OworCisJLyogaW5pdGlhbGl6ZSB3YWl0IHF1ZXVlczogKi8KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb2QtPm1vbml0b3JfbGV2ZWwud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9kLT5yb3V0aW5nLndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvZC0+dHVuZXJfbXV0ZS53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb2QtPnR1bmVyX2ZyZXEud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9kLT50dW5lcl9ub3RlLndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvZC0+dHVuZXJfcGl0Y2gud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9kLT5jbGlwcGluZy53YWl0KTsKKworCW1lbXNldChwb2QtPnBhcmFtX2RpcnR5LCAweGZmLCBzaXplb2YocG9kLT5wYXJhbV9kaXJ0eSkpOworCisJLyogaW5pdGlhbGl6ZSBVU0IgYnVmZmVyczogKi8KKwllcnIgPSBsaW5lNl9kdW1wcmVxX2luaXQoJnBvZC0+ZHVtcHJlcSwgcG9kX3JlcXVlc3RfY2hhbm5lbCwKKwkJCQkgc2l6ZW9mKHBvZF9yZXF1ZXN0X2NoYW5uZWwpKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlwb2RfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG9kLT5idWZmZXJfdmVyc2lvbnJlcSA9IGttYWxsb2Moc2l6ZW9mKHBvZF9yZXF1ZXN0X3ZlcnNpb24pLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisKKwlpZiAocG9kLT5idWZmZXJfdmVyc2lvbnJlcSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXBvZF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkocG9kLT5idWZmZXJfdmVyc2lvbnJlcSwgcG9kX3JlcXVlc3RfdmVyc2lvbiwKKwkgICAgICAgc2l6ZW9mKHBvZF9yZXF1ZXN0X3ZlcnNpb24pKTsKKworCS8qIGNyZWF0ZSBzeXNmcyBlbnRyaWVzOiAqLworCWVyciA9IHBvZF9jcmVhdGVfZmlsZXMyKCZpbnRlcmZhY2UtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogaW5pdGlhbGl6ZSBhdWRpbyBzeXN0ZW06ICovCisJZXJyID0gbGluZTZfaW5pdF9hdWRpbyhsaW5lNik7CisJaWYgKGVyciA8IDApIHsKKwkJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogaW5pdGlhbGl6ZSBNSURJIHN1YnN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9pbml0X21pZGkobGluZTYpOworCWlmIChlcnIgPCAwKSB7CisJCXBvZF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGluaXRpYWxpemUgUENNIHN1YnN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9pbml0X3BjbShsaW5lNiwgJnBvZF9wY21fcHJvcGVydGllcyk7CisJaWYgKGVyciA8IDApIHsKKwkJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogcmVnaXN0ZXIgYXVkaW8gc3lzdGVtOiAqLworCWVyciA9IGxpbmU2X3JlZ2lzdGVyX2F1ZGlvKGxpbmU2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwb2RfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAocG9kLT5saW5lNi5wcm9wZXJ0aWVzLT5jYXBhYmlsaXRpZXMgJiBMSU5FNl9CSVRfQ09OVFJPTCkgeworCQkvKiBxdWVyeSBzb21lIGRhdGE6ICovCisJCWxpbmU2X3N0YXJ0dXBfZGVsYXllZCgmcG9kLT5kdW1wcmVxLCBQT0RfU1RBUlRVUF9ERUxBWSwKKwkJCQkgICAgICBwb2Rfc3RhcnR1cF90aW1lb3V0LCBwb2QpOworCQlsaW5lNl9yZWFkX3NlcmlhbF9udW1iZXIoJnBvZC0+bGluZTYsICZwb2QtPnNlcmlhbF9udW1iZXIpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorCVBPRCBkZXZpY2UgZGlzY29ubmVjdGVkLgorKi8KK3ZvaWQgcG9kX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kOworCisJaWYgKGludGVyZmFjZSA9PSBOVUxMKQorCQlyZXR1cm47CisJcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKHBvZCAhPSBOVUxMKSB7CisJCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHBvZC0+bGluZTYubGluZTZwY207CisJCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsKKworCQlpZiAobGluZTZwY20gIT0gTlVMTCkgeworCQkJdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOworCQkJdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7CisJCX0KKworCQlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJCS8qIHJlbW92ZSBzeXNmcyBlbnRyaWVzOiAqLworCQkJaWYgKHBvZC0+dmVyc2lvbnJlcV9vaykKKwkJCQlwb2RfcmVtb3ZlX2ZpbGVzKHBvZC0+ZmlybXdhcmVfdmVyc2lvbiwgcG9kLT5saW5lNi5wcm9wZXJ0aWVzLT5kZXZpY2VfYml0LCBkZXYpOworCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2hhbm5lbCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2xpcCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV2aWNlX2lkKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaXJ0eSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZHVtcCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZHVtcF9idWYpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2ZpbmlzaCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbik7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWlkaV9wb3N0cHJvY2Vzcyk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9uaXRvcl9sZXZlbCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZV9idWYpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldHJpZXZlX2FtcF9zZXR1cCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV0cmlldmVfY2hhbm5lbCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV0cmlldmVfZWZmZWN0c19zZXR1cCk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcm91dGluZyk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc2VyaWFsX251bWJlcik7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvcmVfYW1wX3NldHVwKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9yZV9jaGFubmVsKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9yZV9lZmZlY3RzX3NldHVwKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcl9mcmVxKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcl9tdXRlKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcl9ub3RlKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcl9waXRjaCk7CisKKyNpZiBDUkVBVEVfUkFXX0ZJTEUKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yYXcpOworI2VuZGlmCisJCX0KKwl9CisKKwlwb2RfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDUxY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBQT0RfSAorI2RlZmluZSBQT0RfSAorCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorCisjaW5jbHVkZSAiZHVtcHJlcXVlc3QuaCIKKworCisvKgorCVBPRHh0IExpdmUgaW50ZXJmYWNlcworKi8KKyNkZWZpbmUgUE9EWFRMSVZFX0lOVEVSRkFDRV9QT0QgICAgMAorI2RlZmluZSBQT0RYVExJVkVfSU5URVJGQUNFX1ZBUklBWCAxCisKKy8qCisJTG9jYXRlIG5hbWUgaW4gYmluYXJ5IHByb2dyYW0gZHVtcAorKi8KKyNkZWZpbmUJUE9EX05BTUVfT0ZGU0VUIDAKKyNkZWZpbmUJUE9EX05BTUVfTEVOR1RIIDE2CisKKy8qCisJT3RoZXIgY29uc3RhbnRzCisqLworI2RlZmluZSBQT0RfQ09OVFJPTF9TSVpFIDB4ODAKKyNkZWZpbmUgUE9EX0JVRlNJWkVfRFVNUFJFUSA3CisjZGVmaW5lIFBPRF9TVEFSVFVQX0RFTEFZIDMKKworCisvKioKKwkgRGF0YSBzdHJ1Y3R1cmUgZm9yIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgcmVxdWVzdGVkIGV4cGxpY2l0bHkuCisJIFRoaXMgaXMgdGhlIGNhc2UgZm9yIHN5c3RlbSBhbmQgdHVuZXIgc2V0dGluZ3MuCisqLworc3RydWN0IFZhbHVlV2FpdCB7CisJdW5zaWduZWQgc2hvcnQgdmFsdWU7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKy8qKgorCSBCaW5hcnkgUG9kWFQgUHJvIHByb2dyYW0gZHVtcAorKi8KK3N0cnVjdCBwb2RfcHJvZ3JhbSB7CisJLyoqCisJCSBIZWFkZXIgaW5mb3JtYXRpb24gKGluY2x1ZGluZyBwcm9ncmFtIG5hbWUpLgorCSovCisJdW5zaWduZWQgY2hhciBoZWFkZXJbMHgyMF07CisKKwkvKioKKwkJIFByb2dyYW0gcGFyYW1ldGVycy4KKwkqLworCXVuc2lnbmVkIGNoYXIgY29udHJvbFtQT0RfQ09OVFJPTF9TSVpFXTsKK307CisKK3N0cnVjdCB1c2JfbGluZTZfcG9kIHsKKwkvKioKKwkJIEdlbmVyaWMgTGluZTYgVVNCIGRhdGEuCisJKi8KKwlzdHJ1Y3QgdXNiX2xpbmU2IGxpbmU2OworCisJLyoqCisJCSBEdW1wIHJlcXVlc3Qgc3RydWN0dXJlLgorCSovCisJc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCBkdW1wcmVxOworCisJLyoqCisJCSBDdXJyZW50IHByb2dyYW0gbnVtYmVyLgorCSovCisJdW5zaWduZWQgY2hhciBjaGFubmVsX251bTsKKworCS8qKgorCQkgQ3VycmVudCBwcm9ncmFtIHNldHRpbmdzLgorCSovCisJc3RydWN0IHBvZF9wcm9ncmFtIHByb2dfZGF0YTsKKworCS8qKgorCQkgQnVmZmVyIGZvciBkYXRhIHJldHJpZXZlZCBmcm9tIG9yIHRvIGJlIHN0b3JlZCBvbiBQT0R4dCBQcm8uCisJKi8KKwlzdHJ1Y3QgcG9kX3Byb2dyYW0gcHJvZ19kYXRhX2J1ZjsKKworCS8qKgorCQkgQnVmZmVyIGZvciByZXF1ZXN0aW5nIHZlcnNpb24gbnVtYmVyLgorCSovCisJdW5zaWduZWQgY2hhciAqYnVmZmVyX3ZlcnNpb25yZXE7CisKKwkvKioKKwkJIFR1bmVyIG11dGUgbW9kZS4KKwkqLworCXN0cnVjdCBWYWx1ZVdhaXQgdHVuZXJfbXV0ZTsKKworCS8qKgorCQkgVHVuZXIgYmFzZSBmcmVxdWVuY3kgKHR5cGljYWxseSA0NDBIeikuCisJKi8KKwlzdHJ1Y3QgVmFsdWVXYWl0IHR1bmVyX2ZyZXE7CisKKwkvKioKKwkJIE5vdGUgcmVjZWl2ZWQgZnJvbSB0dW5lci4KKwkqLworCXN0cnVjdCBWYWx1ZVdhaXQgdHVuZXJfbm90ZTsKKworCS8qKgorCQkgUGl0Y2ggdmFsdWUgcmVjZWl2ZWQgZnJvbSB0dW5lci4KKwkqLworCXN0cnVjdCBWYWx1ZVdhaXQgdHVuZXJfcGl0Y2g7CisKKwkvKioKKwkJIEluc3RydW1lbnQgbW9uaXRvciBsZXZlbC4KKwkqLworCXN0cnVjdCBWYWx1ZVdhaXQgbW9uaXRvcl9sZXZlbDsKKworCS8qKgorCQkgQXVkaW8gcm91dGluZyBtb2RlLgorCQkgMDogc2VuZCBwcm9jZXNzZWQgZ3VpdGFyCisJCSAxOiBzZW5kIGNsZWFuIGd1aXRhcgorCQkgMjogc2VuZCBjbGVhbiBndWl0YXIgcmUtYW1wIHBsYXliYWNrCisJCSAzOiBzZW5kIHJlLWFtcCBwbGF5YmFjaworCSovCisJc3RydWN0IFZhbHVlV2FpdCByb3V0aW5nOworCisJLyoqCisJCSBXYWl0IGZvciBhdWRpbyBjbGlwcGluZyBldmVudC4KKwkqLworCXN0cnVjdCBWYWx1ZVdhaXQgY2xpcHBpbmc7CisKKwkvKioKKwkJIEJvdHRvbS1oYWxmIGZvciBjcmVhdGlvbiBvZiBzeXNmcyBzcGVjaWFsIGZpbGVzLgorCSovCisJc3RydWN0IHdvcmtfc3RydWN0IGNyZWF0ZV9maWxlc193b3JrOworCisJLyoqCisJCSBEaXJ0eSBmbGFncyBmb3IgYWNjZXNzIHRvIHBhcmFtZXRlciBkYXRhLgorCSovCisJdW5zaWduZWQgbG9uZyBwYXJhbV9kaXJ0eVtQT0RfQ09OVFJPTF9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKworCS8qKgorCQkgU29tZSBhdG9taWMgZmxhZ3MuCisJKi8KKwl1bnNpZ25lZCBsb25nIGF0b21pY19mbGFnczsKKworCS8qKgorCQkgQ291bnRlciBmb3Igc3RhcnR1cCBwcm9jZXNzLgorCSovCisJaW50IHN0YXJ0dXBfY291bnQ7CisKKwkvKioKKwkJIFNlcmlhbCBudW1iZXIgb2YgZGV2aWNlLgorCSovCisJaW50IHNlcmlhbF9udW1iZXI7CisKKwkvKioKKwkJIEZpcm13YXJlIHZlcnNpb24gKHggMTAwKS4KKwkqLworCWludCBmaXJtd2FyZV92ZXJzaW9uOworCisJLyoqCisJCSBEZXZpY2UgSUQuCisJKi8KKwlpbnQgZGV2aWNlX2lkOworCisJLyoqCisJCSBGbGFnIHRvIGluZGljYXRlIG1vZGlmaWNhdGlvbiBvZiBjdXJyZW50IHByb2dyYW0gc2V0dGluZ3MuCisJKi8KKwljaGFyIGRpcnR5OworCisJLyoqCisJCSBGbGFnIGlmIGluaXRpYWwgZmlybXdhcmUgdmVyc2lvbiByZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWwuCisJKi8KKwljaGFyIHZlcnNpb25yZXFfb2s7CisKKwkvKioKKwkJIEZsYWcgdG8gZW5hYmxlIE1JREkgcG9zdHByb2Nlc3NpbmcuCisJKi8KKwljaGFyIG1pZGlfcG9zdHByb2Nlc3M7Cit9OworCisKK2V4dGVybiB2b2lkIHBvZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworZXh0ZXJuIGludCBwb2RfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kKTsKK2V4dGVybiB2b2lkIHBvZF9taWRpX3Bvc3Rwcm9jZXNzKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpOworZXh0ZXJuIHZvaWQgcG9kX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kKTsKK2V4dGVybiB2b2lkIHBvZF9yZWNlaXZlX3BhcmFtZXRlcihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBpbnQgcGFyYW0pOworZXh0ZXJuIHZvaWQgcG9kX3RyYW5zbWl0X3BhcmFtZXRlcihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBpbnQgcGFyYW0sCisJCQkJICAgaW50IHZhbHVlKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9yZXZpc2lvbi5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3JldmlzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhMGE4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9yZXZpc2lvbi5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBEUklWRVJfUkVWSVNJT04KKy8qIGN1cnJlbnQgc3VidmVyc2lvbiByZXZpc2lvbiAqLworI2RlZmluZSBEUklWRVJfUkVWSVNJT04gIiAocmV2aXNpb24gNTI5KSIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdG9uZXBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWExMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICogICAgICAgICAgICAgICAgICAgICAgICAgRW1pbCBNeWhybWFuIChlbWlsLm15aHJtYW5AZ21haWwuY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgImNhcHR1cmUuaCIKKyNpbmNsdWRlICJwbGF5YmFjay5oIgorI2luY2x1ZGUgInRvbmVwb3J0LmgiCisKKworc3RhdGljIGludCB0b25lcG9ydF9zZW5kX2NtZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LCBpbnQgY21kMSwgaW50IGNtZDIpOworCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3JhdGRlbiB0b25lcG9ydF9yYXRkZW4gPSB7CisJLm51bV9taW4gPSA0NDEwMCwKKwkubnVtX21heCA9IDQ0MTAwLAorCS5udW1fc3RlcCA9IDEsCisJLmRlbiA9IDEKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgdG9uZXBvcnRfcGNtX3Byb3BlcnRpZXMgPSB7CisgIC5zbmRfbGluZTZfcGxheWJhY2tfaHcgPSB7CisJCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCQkuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQkucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFX0tOT1QsCisJCS5yYXRlX21pbiA9ICAgICAgICAgNDQxMDAsCisJCS5yYXRlX21heCA9ICAgICAgICAgNDQxMDAsCisJCS5jaGFubmVsc19taW4gPSAgICAgMiwKKwkJLmNoYW5uZWxzX21heCA9ICAgICAyLAorCQkuYnVmZmVyX2J5dGVzX21heCA9IDYwMDAwLAorCQkucGVyaW9kX2J5dGVzX21pbiA9IDE4MCAqIDQsCisJCS5wZXJpb2RfYnl0ZXNfbWF4ID0gODE5MiwKKwkJLnBlcmlvZHNfbWluID0gICAgICAxLAorCQkucGVyaW9kc19tYXggPSAgICAgIDEwMjQKKwl9LAorICAuc25kX2xpbmU2X2NhcHR1cmVfaHcgPSB7CisJCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCisJCS5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCS5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfS05PVCwKKwkJLnJhdGVfbWluID0gICAgICAgICA0NDEwMCwKKwkJLnJhdGVfbWF4ID0gICAgICAgICA0NDEwMCwKKwkJLmNoYW5uZWxzX21pbiA9ICAgICAyLAorCQkuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisJCS5idWZmZXJfYnl0ZXNfbWF4ID0gNjAwMDAsCisJCS5wZXJpb2RfYnl0ZXNfbWluID0gMTg4ICogNCwKKwkJLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAorCQkucGVyaW9kc19taW4gPSAgICAgIDEsCisJCS5wZXJpb2RzX21heCA9ICAgICAgMTAyNAorCX0sCisJLnNuZF9saW5lNl9yYXRlcyA9IHsKKwkJLm5yYXRzID0gMSwKKwkJLnJhdHMgPSAmdG9uZXBvcnRfcmF0ZGVuCisJfSwKKwkuYnl0ZXNfcGVyX2ZyYW1lID0gNAorfTsKKworLyoKKwlGb3IgdGhlIGxlZCBvbiBHdWl0YXJwb3J0LgorCUJyaWdodG5lc3MgZ29lcyBmcm9tIDB4MDAgdG8gMHgyNi4gU2V0IGEgdmFsdWUgYWJvdmUgdGhpcyB0byBoYXZlIGxlZAorCWJsaW5rLgorCSh2b2lkIGNtZF8weDAyKGJ5dGUgcmVkLCBieXRlIGdyZWVuKQorKi8KK3N0YXRpYyBpbnQgbGVkX3JlZCA9IDB4MDA7CitzdGF0aWMgaW50IGxlZF9ncmVlbiA9IDB4MjY7CisKK3N0YXRpYyB2b2lkIHRvbmVwb3J0X3VwZGF0ZV9sZWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdHAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisKKwlpZiAoIXRwKQorCQlyZXR1cm47CisKKwlsaW5lNiA9ICZ0cC0+bGluZTY7CisJaWYgKGxpbmU2KQorCQl0b25lcG9ydF9zZW5kX2NtZChsaW5lNi0+dXNiZGV2LCAobGVkX3JlZCA8PCA4KSB8IDB4MDAwMiwKKwkJCQkgIGxlZF9ncmVlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRvbmVwb3J0X3NldF9sZWRfcmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNoYXIgKmM7CisJbGVkX3JlZCA9IHNpbXBsZV9zdHJ0b2woYnVmLCAmYywgMTApOworCXRvbmVwb3J0X3VwZGF0ZV9sZWQoZGV2KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRvbmVwb3J0X3NldF9sZWRfZ3JlZW4oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNoYXIgKmM7CisJbGVkX2dyZWVuID0gc2ltcGxlX3N0cnRvbChidWYsICZjLCAxMCk7CisJdG9uZXBvcnRfdXBkYXRlX2xlZChkZXYpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGxlZF9yZWQsIFNfSVdVR08gfCBTX0lSVUdPLCBsaW5lNl9ub3BfcmVhZCwgdG9uZXBvcnRfc2V0X2xlZF9yZWQpOworc3RhdGljIERFVklDRV9BVFRSKGxlZF9ncmVlbiwgU19JV1VHTyB8IFNfSVJVR08sIGxpbmU2X25vcF9yZWFkLCB0b25lcG9ydF9zZXRfbGVkX2dyZWVuKTsKKworCitzdGF0aWMgaW50IHRvbmVwb3J0X3NlbmRfY21kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIGludCBjbWQxLCBpbnQgY21kMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCisJCQkgICAgICBjbWQxLCBjbWQyLCBOVUxMLCAwLCBMSU5FNl9USU1FT1VUICogSFopOworCisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJzZW5kIGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorCVRvbmVwb3J0IGRlc3RydWN0b3IuCisqLworc3RhdGljIHZvaWQgdG9uZXBvcnRfZGVzdHJ1Y3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKworCWlmICh0b25lcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisJbGluZTYgPSAmdG9uZXBvcnQtPmxpbmU2OworCWlmIChsaW5lNiA9PSBOVUxMKQorCQlyZXR1cm47CisJbGluZTZfY2xlYW51cF9hdWRpbyhsaW5lNik7Cit9CisKKy8qCisJIEluaXQgVG9uZXBvcnQgZGV2aWNlLgorKi8KK2ludCB0b25lcG9ydF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQpCit7CisJaW50IGVyciwgdGlja3M7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSAmdG9uZXBvcnQtPmxpbmU2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisKKwlpZiAoKGludGVyZmFjZSA9PSBOVUxMKSB8fCAodG9uZXBvcnQgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PREVWOworCisJLyogaW5pdGlhbGl6ZSBhdWRpbyBzeXN0ZW06ICovCisJZXJyID0gbGluZTZfaW5pdF9hdWRpbyhsaW5lNik7CisJaWYgKGVyciA8IDApIHsKKwkJdG9uZXBvcnRfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBpbml0aWFsaXplIFBDTSBzdWJzeXN0ZW06ICovCisJZXJyID0gbGluZTZfaW5pdF9wY20obGluZTYsICZ0b25lcG9ydF9wY21fcHJvcGVydGllcyk7CisJaWYgKGVyciA8IDApIHsKKwkJdG9uZXBvcnRfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiByZWdpc3RlciBhdWRpbyBzeXN0ZW06ICovCisJZXJyID0gbGluZTZfcmVnaXN0ZXJfYXVkaW8obGluZTYpOworCWlmIChlcnIgPCAwKSB7CisJCXRvbmVwb3J0X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJdXNiZGV2ID0gbGluZTYtPnVzYmRldjsKKwlsaW5lNl9yZWFkX3NlcmlhbF9udW1iZXIobGluZTYsICZ0b25lcG9ydC0+c2VyaWFsX251bWJlcik7CisJbGluZTZfcmVhZF9kYXRhKGxpbmU2LCAweDgwYzIsICZ0b25lcG9ydC0+ZmlybXdhcmVfdmVyc2lvbiwgMSk7CisKKwkvKiBzeW5jIHRpbWUgb24gZGV2aWNlIHdpdGggaG9zdDogKi8KKwl0aWNrcyA9IChpbnQpZ2V0X3NlY29uZHMoKTsKKwlsaW5lNl93cml0ZV9kYXRhKGxpbmU2LCAweDgwYzYsICZ0aWNrcywgNCk7CisKKwkvKgorCXNlZW1zIHRvIHdvcmsgd2l0aG91dCB0aGUgZmlyc3QgdHdvLi4uCisJKi8KKwkvKiB0b25lcG9ydF9zZW5kX2NtZCh1c2JkZXYsIDB4MDIwMSwgMHgwMDAyKTsgKi8KKwkvKiB0b25lcG9ydF9zZW5kX2NtZCh1c2JkZXYsIDB4MDgwMSwgMHgwMDAwKTsgKi8KKwkvKiBvbmx5IG9uZSB0aGF0IHdvcmtzIGZvciBtZTsgb24gR1AsIFRQIG1pZ2h0IGJlIGRpZmZlcmVudD8gKi8KKwl0b25lcG9ydF9zZW5kX2NtZCh1c2JkZXYsIDB4MDMwMSwgMHgwMDAwKTsKKworCWlmICh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IExJTkU2X0RFVklEX0dVSVRBUlBPUlQpIHsKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9sZWRfcmVkKSk7CisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfbGVkX2dyZWVuKSk7CisJCXRvbmVwb3J0X3VwZGF0ZV9sZWQoJnVzYmRldi0+ZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlUb25lcG9ydCBkZXZpY2UgZGlzY29ubmVjdGVkLgorKi8KK3ZvaWQgdG9uZXBvcnRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0OworCisJaWYgKGludGVyZmFjZSA9PSBOVUxMKQorCQlyZXR1cm47CisJdG9uZXBvcnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAodG9uZXBvcnQtPmxpbmU2LnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgIT0gTElORTZfREVWSURfR1VJVEFSUE9SVCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfbGVkX3JlZCk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9sZWRfZ3JlZW4pOworCX0KKworCWlmICh0b25lcG9ydCAhPSBOVUxMKSB7CisJCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHRvbmVwb3J0LT5saW5lNi5saW5lNnBjbTsKKworCQlpZiAobGluZTZwY20gIT0gTlVMTCkgeworCQkJdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOworCQkJdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7CisJCX0KKwl9CisKKwl0b25lcG9ydF9kZXN0cnVjdChpbnRlcmZhY2UpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdG9uZXBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGRjNThkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgVE9ORVBPUlRfSAorI2RlZmluZSBUT05FUE9SVF9ICisKKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorCisKK3N0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgeworCS8qKgorCQkgR2VuZXJpYyBMaW5lNiBVU0IgZGF0YS4KKwkqLworCXN0cnVjdCB1c2JfbGluZTYgbGluZTY7CisKKwkvKioKKwkJIFNlcmlhbCBudW1iZXIgb2YgZGV2aWNlLgorCSovCisJaW50IHNlcmlhbF9udW1iZXI7CisKKwkvKioKKwkJIEZpcm13YXJlIHZlcnNpb24gKHggMTAwKS4KKwkqLworCWludCBmaXJtd2FyZV92ZXJzaW9uOworfTsKKworCitleHRlcm4gdm9pZCB0b25lcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworZXh0ZXJuIGludCB0b25lcG9ydF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3VzYmRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi91c2JkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4ZjMxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi91c2JkZWZzLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgVVNCREVGU19ICisjZGVmaW5lIFVTQkRFRlNfSAorCisKKyNkZWZpbmUgTElORTZfVkVORE9SX0lEICAweDBlNDEKKworI2RlZmluZSBVU0JfSU5URVJWQUxTX1BFUl9TRUNPTkQgMTAwMAorCisvKgorCURldmljZSBpZHMuCisqLworI2RlZmluZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQgICAgIDB4NDI1MAorI2RlZmluZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFIDB4NDY0MgorI2RlZmluZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk8gIDB4NDI1MgorI2RlZmluZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUICAgIDB4NDc1MAorI2RlZmluZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0QgICAgIDB4NTA1MQorI2RlZmluZSBMSU5FNl9ERVZJRF9QT0RYMyAgICAgICAgIDB4NDE0YQorI2RlZmluZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkUgICAgIDB4NDE0YgorI2RlZmluZSBMSU5FNl9ERVZJRF9QT0RYVCAgICAgICAgIDB4NTA0NAorI2RlZmluZSBMSU5FNl9ERVZJRF9QT0RYVExJVkUgICAgIDB4NDY1MAorI2RlZmluZSBMSU5FNl9ERVZJRF9QT0RYVFBSTyAgICAgIDB4NTA1MAorI2RlZmluZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWCAgIDB4NDE0NworI2RlZmluZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDEgIDB4NDE0MQorI2RlZmluZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDIgIDB4NDE0MgorI2RlZmluZSBMSU5FNl9ERVZJRF9WQVJJQVggICAgICAgIDB4NTM0ZAorCisjZGVmaW5lIExJTkU2X0JJVF9CQVNTUE9EWFQgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgTElORTZfQklUX0JBU1NQT0RYVExJVkUgICAoMSA8PCAxKQorI2RlZmluZSBMSU5FNl9CSVRfQkFTU1BPRFhUUFJPICAgICgxIDw8IDIpCisjZGVmaW5lIExJTkU2X0JJVF9HVUlUQVJQT1JUICAgICAgKDEgPDwgMykKKyNkZWZpbmUgTElORTZfQklUX1BPQ0tFVFBPRCAgICAgICAoMSA8PCA0KQorI2RlZmluZSBMSU5FNl9CSVRfUE9EWDMgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIExJTkU2X0JJVF9QT0RYM0xJVkUgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgTElORTZfQklUX1BPRFhUICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBMSU5FNl9CSVRfUE9EWFRMSVZFICAgICAgICgxIDw8IDgpCisjZGVmaW5lIExJTkU2X0JJVF9QT0RYVFBSTyAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgTElORTZfQklUX1RPTkVQT1JUX0dYICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgTElORTZfQklUX1RPTkVQT1JUX1VYMSAgICAoMSA8PCAxMSkKKyNkZWZpbmUgTElORTZfQklUX1RPTkVQT1JUX1VYMiAgICAoMSA8PCAxMikKKyNkZWZpbmUgTElORTZfQklUX1ZBUklBWCAgICAgICAgICAoMSA8PCAxMykKKworI2RlZmluZSBMSU5FNl9CSVRTX1BSTwkJKExJTkU2X0JJVF9CQVNTUE9EWFRQUk8gfCBcCisJCQkJIExJTkU2X0JJVF9QT0RYVFBSTykKKyNkZWZpbmUgTElORTZfQklUU19MSVZFCQkoTElORTZfQklUX0JBU1NQT0RYVExJVkUgfCBcCisJCQkJIExJTkU2X0JJVF9QT0RYVExJVkUgfCBcCisJCQkJIExJTkU2X0JJVF9QT0RYM0xJVkUpCisjZGVmaW5lIExJTkU2X0JJVFNfUE9EWFRBTEwJKExJTkU2X0JJVF9QT0RYVCB8IFwKKwkJCQkgTElORTZfQklUX1BPRFhUTElWRSB8IFwKKwkJCQkgTElORTZfQklUX1BPRFhUUFJPKQorI2RlZmluZSBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTAkoTElORTZfQklUX0JBU1NQT0RYVCB8IFwKKwkJCQkgTElORTZfQklUX0JBU1NQT0RYVExJVkUgfCBcCisJCQkJIExJTkU2X0JJVF9CQVNTUE9EWFRQUk8pCisKKy8qIGRldmljZSBzdXBwb3J0cyBzZXR0aW5ncyBwYXJhbWV0ZXIgdmlhIFVTQiAqLworI2RlZmluZSBMSU5FNl9CSVRfQ09OVFJPTAkoMSA8PCAwKQorLyogZGV2aWNlIHN1cHBvcnRzIFBDTSBpbnB1dC9vdXRwdXQgdmlhIFVTQiAqLworI2RlZmluZSBMSU5FNl9CSVRfUENNCQkoMSA8PCAxKQorI2RlZmluZSBMSU5FNl9CSVRfQ09OVFJPTF9QQ00JKExJTkU2X0JJVF9DT05UUk9MIHwgTElORTZfQklUX1BDTSkKKworI2RlZmluZSBMSU5FNl9GQUxMQkFDS19JTlRFUlZBTAkJMTAKKyNkZWZpbmUgTElORTZfRkFMTEJBQ0tfTUFYUEFDS0VUU0laRQkxNgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ5Njk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5jCkBAIC0wLDAgKzEsNTQ2IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSAiYXVkaW8uaCIKKyNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAidmFyaWF4LmgiCisKKworI2RlZmluZSBWQVJJQVhfU1lTRVhfQ09ERSA3CisjZGVmaW5lIFZBUklBWF9TWVNFWF9QQVJBTSAweDNiCisjZGVmaW5lIFZBUklBWF9TWVNFWF9BQ1RJVkFURSAweDJhCisjZGVmaW5lIFZBUklBWF9NT0RFTF9IRUFERVJfTEVOR1RIIDcKKyNkZWZpbmUgVkFSSUFYX01PREVMX01FU1NBR0VfTEVOR1RIIDE5OQorI2RlZmluZSBWQVJJQVhfT0ZGU0VUX0FDVElWQVRFIDcKKworCitzdGF0aWMgY29uc3QgY2hhciB2YXJpYXhfYWN0aXZhdGVbXSA9IHsKKwkweGYwLCAweDAwLCAweDAxLCAweDBjLCAweDA3LCAweDAwLCAweDJhLCAweDAxLAorCTB4ZjcKK307CitzdGF0aWMgY29uc3QgY2hhciB2YXJpYXhfcmVxdWVzdF9iYW5rW10gPSB7CisJMHhmMCwgMHgwMCwgMHgwMSwgMHgwYywgMHgwNywgMHgwMCwgMHg2ZCwgMHhmNworfTsKK3N0YXRpYyBjb25zdCBjaGFyIHZhcmlheF9yZXF1ZXN0X21vZGVsMVtdID0geworCTB4ZjAsIDB4MDAsIDB4MDEsIDB4MGMsIDB4MDcsIDB4MDAsIDB4M2MsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwNSwgMHgwMywKKwkweDAwLCAweDAwLCAweDAwLCAweGY3Cit9Oworc3RhdGljIGNvbnN0IGNoYXIgdmFyaWF4X3JlcXVlc3RfbW9kZWwyW10gPSB7CisJMHhmMCwgMHgwMCwgMHgwMSwgMHgwYywgMHgwNywgMHgwMCwgMHgzYywgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA3LCAweDAzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcKK307CisKKworLyoKKwlEZWNvZGUgZGF0YSB0cmFuc21pdHRlZCBieSB3b3JrYmVuY2guCisqLworc3RhdGljIHZvaWQgdmFyaWF4X2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpyYXdfZGF0YSwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSAgaW50IHJhd19zaXplKQoreworCWZvciAoOyByYXdfc2l6ZSA+IDA7IHJhd19zaXplIC09IDYpIHsKKwkJZGF0YVsyXSA9IHJhd19kYXRhWzBdIHwgKHJhd19kYXRhWzFdIDw8IDQpOworCQlkYXRhWzFdID0gcmF3X2RhdGFbMl0gfCAocmF3X2RhdGFbM10gPDwgNCk7CisJCWRhdGFbMF0gPSByYXdfZGF0YVs0XSB8IChyYXdfZGF0YVs1XSA8PCA0KTsKKwkJcmF3X2RhdGEgKz0gNjsKKwkJZGF0YSArPSAzOworCX0KK30KKworc3RhdGljIHZvaWQgdmFyaWF4X2FjdGl2YXRlX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWFyZzsKKwl2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZVtWQVJJQVhfT0ZGU0VUX0FDVElWQVRFXSA9IDE7CisJbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luYygmdmFyaWF4LT5saW5lNiwgdmFyaWF4LT5idWZmZXJfYWN0aXZhdGUsCisJCQkJICAgICBzaXplb2YodmFyaWF4X2FjdGl2YXRlKSk7Cit9CisKKy8qCisJU2VuZCBhbiBhc3luY2hyb25vdXMgYWN0aXZhdGlvbiByZXF1ZXN0IGFmdGVyIGEgZ2l2ZW4gaW50ZXJ2YWwuCisqLworc3RhdGljIHZvaWQgdmFyaWF4X2FjdGl2YXRlX2RlbGF5ZWQoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCwKKwkJCQkgICAgaW50IHNlY29uZHMpCit7CisJdmFyaWF4LT5hY3RpdmF0ZV90aW1lci5leHBpcmVzID0gamlmZmllcyArIHNlY29uZHMgKiBIWjsKKwl2YXJpYXgtPmFjdGl2YXRlX3RpbWVyLmZ1bmN0aW9uID0gdmFyaWF4X2FjdGl2YXRlX3RpbWVvdXQ7CisJdmFyaWF4LT5hY3RpdmF0ZV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdmFyaWF4OworCWFkZF90aW1lcigmdmFyaWF4LT5hY3RpdmF0ZV90aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkIHZhcmlheF9zdGFydHVwX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWFyZzsKKworCWlmICh2YXJpYXgtPmR1bXByZXEub2spCisJCXJldHVybjsKKworCWxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYygmdmFyaWF4LT5kdW1wcmVxLCAmdmFyaWF4LT5saW5lNiwgMCk7CisJbGluZTZfc3RhcnR1cF9kZWxheWVkKCZ2YXJpYXgtPmR1bXByZXEsIDEsIHZhcmlheF9zdGFydHVwX3RpbWVvdXQsCisJCQkgICAgICB2YXJpYXgpOworfQorCisvKgorCVByb2Nlc3MgYSBjb21wbGV0ZWx5IHJlY2VpdmVkIG1lc3NhZ2UuCisqLwordm9pZCB2YXJpYXhfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXgpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmID0gdmFyaWF4LT5saW5lNi5idWZmZXJfbWVzc2FnZTsKKworCXN3aXRjaCAoYnVmWzBdKSB7CisJY2FzZSBMSU5FNl9QQVJBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0hPU1Q6CisJCXN3aXRjaCAoYnVmWzFdKSB7CisJCWNhc2UgVkFSSUFYTUlESV92b2x1bWU6CisJCQl2YXJpYXgtPnZvbHVtZSA9IGJ1ZlsyXTsKKwkJCWJyZWFrOworCisJCWNhc2UgVkFSSUFYTUlESV90b25lOgorCQkJdmFyaWF4LT50b25lID0gYnVmWzJdOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X1BST0dSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9ERVZJQ0U6CisJY2FzZSBMSU5FNl9QUk9HUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVDoKKwkJdmFyaWF4LT5tb2RlbCA9IGJ1ZlsxXTsKKwkJbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKCZ2YXJpYXgtPmR1bXByZXEsICZ2YXJpYXgtPmxpbmU2LCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X1JFU0VUOgorCQlkZXZfaW5mbyh2YXJpYXgtPmxpbmU2LmlmY2RldiwgIlZBUklBWCByZXNldFxuIik7CisJCXZhcmlheF9hY3RpdmF0ZV9kZWxheWVkKHZhcmlheCwgVkFSSUFYX0FDVElWQVRFX0RFTEFZKTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X1NZU0VYX0JFR0lOOgorCQlpZiAobWVtY21wKGJ1ZiArIDEsIHZhcmlheF9yZXF1ZXN0X21vZGVsMSArIDEsCisJCQkgICBWQVJJQVhfTU9ERUxfSEVBREVSX0xFTkdUSCAtIDEpID09IDApIHsKKwkJCWlmICh2YXJpYXgtPmxpbmU2Lm1lc3NhZ2VfbGVuZ3RoID09CisJCQkgICAgVkFSSUFYX01PREVMX01FU1NBR0VfTEVOR1RIKSB7CisJCQkJc3dpdGNoICh2YXJpYXgtPmR1bXByZXEuaW5fcHJvZ3Jlc3MpIHsKKwkJCQljYXNlIFZBUklBWF9EVU1QX1BBU1MxOgorCQkJCQl2YXJpYXhfZGVjb2RlKGJ1ZiArIFZBUklBWF9NT0RFTF9IRUFERVJfTEVOR1RILCAodW5zaWduZWQgY2hhciAqKSZ2YXJpYXgtPm1vZGVsX2RhdGEsCisJCQkJCQkJCQkJCQkoc2l6ZW9mKHZhcmlheC0+bW9kZWxfZGF0YS5uYW1lKSArIHNpemVvZih2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbCkgLyAyKSAqIDIpOworCQkJCQlsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoJnZhcmlheC0+ZHVtcHJlcSwgJnZhcmlheC0+bGluZTYsIDEpOworCQkJCQlsaW5lNl9kdW1wX3N0YXJ0ZWQoJnZhcmlheC0+ZHVtcHJlcSwgVkFSSUFYX0RVTVBfUEFTUzIpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgVkFSSUFYX0RVTVBfUEFTUzI6CisJCQkJCS8qIG1vZGVsIG5hbWUgaXMgdHJhbnNtaXR0ZWQgdHdpY2UsIHNvIHNraXAgaXQgaGVyZTogKi8KKwkJCQkJdmFyaWF4X2RlY29kZShidWYgKyBWQVJJQVhfTU9ERUxfSEVBREVSX0xFTkdUSCwKKwkJCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopJnZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sICsgc2l6ZW9mKHZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sKSAvIDIsCisJCQkJCQkgICAgICBzaXplb2YodmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2wpIC8gMiAqIDIpOworCQkJCQl2YXJpYXgtPmR1bXByZXEub2sgPSAxOworCQkJCQlsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoJnZhcmlheC0+ZHVtcHJlcSwgJnZhcmlheC0+bGluZTYsIDIpOworCQkJCQlsaW5lNl9kdW1wX3N0YXJ0ZWQoJnZhcmlheC0+ZHVtcHJlcSwgVkFSSUFYX0RVTVBfUEFTUzMpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycih2YXJpYXgtPmxpbmU2LmlmY2RldiwgImlsbGVnYWwgbGVuZ3RoICVkIG9mIG1vZGVsIGRhdGFcbiIsIHZhcmlheC0+bGluZTYubWVzc2FnZV9sZW5ndGgpKTsKKwkJCQlsaW5lNl9kdW1wX2ZpbmlzaGVkKCZ2YXJpYXgtPmR1bXByZXEpOworCQkJfQorCQl9IGVsc2UgaWYgKG1lbWNtcChidWYgKyAxLCB2YXJpYXhfcmVxdWVzdF9iYW5rICsgMSwKKwkJCQlzaXplb2YodmFyaWF4X3JlcXVlc3RfYmFuaykgLSAyKSA9PSAwKSB7CisJCQltZW1jcHkodmFyaWF4LT5iYW5rLAorCQkJICAgICAgIGJ1ZiArIHNpemVvZih2YXJpYXhfcmVxdWVzdF9iYW5rKSAtIDEsCisJCQkgICAgICAgc2l6ZW9mKHZhcmlheC0+YmFuaykpOworCQkJdmFyaWF4LT5kdW1wcmVxLm9rID0gMTsKKwkJCWxpbmU2X2R1bXBfZmluaXNoZWQoJnZhcmlheC0+ZHVtcHJlcSk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgTElORTZfU1lTRVhfRU5EOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURFQlVHX01FU1NBR0VTKGRldl9lcnIodmFyaWF4LT5saW5lNi5pZmNkZXYsICJWYXJpYXg6IHVua25vd24gbWVzc2FnZSAlMDJYXG4iLCBidWZbMF0pKTsKKwl9Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gInZvbHVtZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfdm9sdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YXJpYXgtPnZvbHVtZSk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJ2b2x1bWUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfc2V0X3ZvbHVtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCisJaWYgKGxpbmU2X3RyYW5zbWl0X3BhcmFtZXRlcigmdmFyaWF4LT5saW5lNiwgVkFSSUFYTUlESV92b2x1bWUsCisJCQkJICAgICB2YWx1ZSkgPT0gMCkKKwkJdmFyaWF4LT52b2x1bWUgPSB2YWx1ZTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAibW9kZWwiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X21vZGVsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhcmlheC0+bW9kZWwpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAibW9kZWwiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfc2V0X21vZGVsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCisJaWYgKGxpbmU2X3NlbmRfcHJvZ3JhbSgmdmFyaWF4LT5saW5lNiwgdmFsdWUpID09IDApCisJCXZhcmlheC0+bW9kZWwgPSB2YWx1ZTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiYWN0aXZlIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF9hY3RpdmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhcmlheC0+YnVmZmVyX2FjdGl2YXRlW1ZBUklBWF9PRkZTRVRfQUNUSVZBVEVdKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gImFjdGl2ZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9zZXRfYWN0aXZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgPyAxIDogMDsKKwl2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZVtWQVJJQVhfT0ZGU0VUX0FDVElWQVRFXSA9IHZhbHVlOworCWxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoJnZhcmlheC0+bGluZTYsIHZhcmlheC0+YnVmZmVyX2FjdGl2YXRlLAorCQkJCSAgICAgc2l6ZW9mKHZhcmlheF9hY3RpdmF0ZSkpOworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAidG9uZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfdG9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YXJpYXgtPnRvbmUpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAidG9uZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9zZXRfdG9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKworCWlmIChsaW5lNl90cmFuc21pdF9wYXJhbWV0ZXIoJnZhcmlheC0+bGluZTYsIFZBUklBWE1JRElfdG9uZSwKKwkJCQkgICAgIHZhbHVlKSA9PSAwKQorCQl2YXJpYXgtPnRvbmUgPSB2YWx1ZTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgZ2V0X3N0cmluZyhjaGFyICpidWYsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGk7CisJbWVtY3B5KGJ1ZiwgZGF0YSwgbGVuZ3RoKTsKKworCWZvciAoaSA9IGxlbmd0aDsgaS0tOykgeworCQljaGFyIGMgPSBidWZbaV07CisKKwkJaWYgKChjICE9IDApICYmIChjICE9ICcgJykpCisJCQlicmVhazsKKwl9CisKKwlidWZbaSArIDFdID0gJ1xuJzsKKwlyZXR1cm4gaSArIDI7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gIm5hbWUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlsaW5lNl93YWl0X2R1bXAoJnZhcmlheC0+ZHVtcHJlcSwgMCk7CisJcmV0dXJuIGdldF9zdHJpbmcoYnVmLCB2YXJpYXgtPm1vZGVsX2RhdGEubmFtZSwKKwkJCSAgc2l6ZW9mKHZhcmlheC0+bW9kZWxfZGF0YS5uYW1lKSk7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImJhbmsiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X2Jhbmsoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlsaW5lNl93YWl0X2R1bXAoJnZhcmlheC0+ZHVtcHJlcSwgMCk7CisJcmV0dXJuIGdldF9zdHJpbmcoYnVmLCB2YXJpYXgtPmJhbmssIHNpemVvZih2YXJpYXgtPmJhbmspKTsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiZHVtcCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfZHVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCByZXR2YWw7CisJcmV0dmFsID0gbGluZTZfd2FpdF9kdW1wKCZ2YXJpYXgtPmR1bXByZXEsIDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbWNweShidWYsICZ2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbCwKKwkgICAgICAgc2l6ZW9mKHZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sKSk7CisJcmV0dXJuIHNpemVvZih2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbCk7Cit9CisKKyNpZiBDUkVBVEVfUkFXX0ZJTEUKKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInJhdyIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9zZXRfcmF3MihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKwljaGFyICpzeXNleDsKKworCWNvdW50IC09IGNvdW50ICUgMzsKKwlzaXplID0gY291bnQgKiAyOworCXN5c2V4ID0gdmFyaWF4X2FsbG9jX3N5c2V4X2J1ZmZlcih2YXJpYXgsIFZBUklBWF9TWVNFWF9QQVJBTSwgc2l6ZSk7CisKKwlpZiAoIXN5c2V4KQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSArPSAzKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxID0gYnVmICsgaTsKKwkJY2hhciAqcDIgPSBzeXNleCArIFNZU0VYX0RBVEFfT0ZTICsgaSAqIDI7CisJCXAyWzBdID0gcDFbMl0gJiAweDBmOworCQlwMlsxXSA9IHAxWzJdID4+IDQ7CisJCXAyWzJdID0gcDFbMV0gJiAweDBmOworCQlwMlszXSA9IHAxWzFdID4+IDQ7CisJCXAyWzRdID0gcDFbMF0gJiAweDBmOworCQlwMls1XSA9IHAxWzBdID4+IDQ7CisJfQorCisJbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKCZ2YXJpYXgtPmxpbmU2LCBzeXNleCwgc2l6ZSk7CisJa2ZyZWUoc3lzZXgpOworCXJldHVybiBjb3VudDsKK30KKworI2VuZGlmCisKKy8qIFZhcmlheCB3b3JrYmVuY2ggc3BlY2lhbCBmaWxlczogKi8KK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHZhcmlheF9nZXRfbW9kZWwsIHZhcmlheF9zZXRfbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKHZvbHVtZSwgU19JV1VHTyB8IFNfSVJVR08sIHZhcmlheF9nZXRfdm9sdW1lLCB2YXJpYXhfc2V0X3ZvbHVtZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodG9uZSwgU19JV1VHTyB8IFNfSVJVR08sIHZhcmlheF9nZXRfdG9uZSwgdmFyaWF4X3NldF90b25lKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X25hbWUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuaywgU19JUlVHTywgdmFyaWF4X2dldF9iYW5rLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGR1bXAsIFNfSVJVR08sIHZhcmlheF9nZXRfZHVtcCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhY3RpdmUsIFNfSVdVR08gfCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2FjdGl2ZSwgdmFyaWF4X3NldF9hY3RpdmUpOworCisjaWYgQ1JFQVRFX1JBV19GSUxFCitzdGF0aWMgREVWSUNFX0FUVFIocmF3LCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgbGluZTZfc2V0X3Jhdyk7CitzdGF0aWMgREVWSUNFX0FUVFIocmF3MiwgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIHZhcmlheF9zZXRfcmF3Mik7CisjZW5kaWYKKworCisvKgorCVZhcmlheCBkZXN0cnVjdG9yLgorKi8KK3N0YXRpYyB2b2lkIHZhcmlheF9kZXN0cnVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisKKwlpZiAodmFyaWF4ID09IE5VTEwpCisJCXJldHVybjsKKwlsaW5lNiA9ICZ2YXJpYXgtPmxpbmU2OworCWlmIChsaW5lNiA9PSBOVUxMKQorCQlyZXR1cm47CisJbGluZTZfY2xlYW51cF9hdWRpbyhsaW5lNik7CisKKwkvKiBmcmVlIGR1bXAgcmVxdWVzdCBkYXRhOiAqLworCWxpbmU2X2R1bXByZXFfZGVzdHJ1Y3RidWYoJnZhcmlheC0+ZHVtcHJlcSwgMik7CisJbGluZTZfZHVtcHJlcV9kZXN0cnVjdGJ1ZigmdmFyaWF4LT5kdW1wcmVxLCAxKTsKKwlsaW5lNl9kdW1wcmVxX2Rlc3RydWN0KCZ2YXJpYXgtPmR1bXByZXEpOworCisJa2ZyZWUodmFyaWF4LT5idWZmZXJfYWN0aXZhdGUpOworCWRlbF90aW1lcl9zeW5jKCZ2YXJpYXgtPmFjdGl2YXRlX3RpbWVyKTsKK30KKworLyoKKwlDcmVhdGUgc3lzZnMgZW50cmllcy4KKyovCitzdGF0aWMgaW50IHZhcmlheF9jcmVhdGVfZmlsZXMyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdG9uZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuaykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZHVtcCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYWN0aXZlKSk7CisjaWYgQ1JFQVRFX1JBV19GSUxFCisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yYXcpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JhdzIpKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisvKgorCSBJbml0IHdvcmtiZW5jaCBkZXZpY2UuCisqLworaW50IHZhcmlheF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXgpCit7CisJaW50IGVycjsKKworCWlmICgoaW50ZXJmYWNlID09IE5VTEwpIHx8ICh2YXJpYXggPT0gTlVMTCkpCisJCXJldHVybiAtRU5PREVWOworCisJLyogaW5pdGlhbGl6ZSBVU0IgYnVmZmVyczogKi8KKwllcnIgPSBsaW5lNl9kdW1wcmVxX2luaXQoJnZhcmlheC0+ZHVtcHJlcSwgdmFyaWF4X3JlcXVlc3RfbW9kZWwxLAorCQkJCSBzaXplb2YodmFyaWF4X3JlcXVlc3RfbW9kZWwxKSk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBsaW5lNl9kdW1wcmVxX2luaXRidWYoJnZhcmlheC0+ZHVtcHJlcSwgdmFyaWF4X3JlcXVlc3RfbW9kZWwyLAorCQkJCSAgICBzaXplb2YodmFyaWF4X3JlcXVlc3RfbW9kZWwyKSwgMSk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBsaW5lNl9kdW1wcmVxX2luaXRidWYoJnZhcmlheC0+ZHVtcHJlcSwgdmFyaWF4X3JlcXVlc3RfYmFuaywKKwkJCQkgICAgc2l6ZW9mKHZhcmlheF9yZXF1ZXN0X2JhbmspLCAyKTsKKworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCXZhcmlheC0+YnVmZmVyX2FjdGl2YXRlID0ga21hbGxvYyhzaXplb2YodmFyaWF4X2FjdGl2YXRlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAodmFyaWF4LT5idWZmZXJfYWN0aXZhdGUgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KHZhcmlheC0+YnVmZmVyX2FjdGl2YXRlLCB2YXJpYXhfYWN0aXZhdGUsCisJICAgICAgIHNpemVvZih2YXJpYXhfYWN0aXZhdGUpKTsKKwlpbml0X3RpbWVyKCZ2YXJpYXgtPmFjdGl2YXRlX3RpbWVyKTsKKworCS8qIGNyZWF0ZSBzeXNmcyBlbnRyaWVzOiAqLworCWVyciA9IHZhcmlheF9jcmVhdGVfZmlsZXMoMCwgMCwgJmludGVyZmFjZS0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB2YXJpYXhfY3JlYXRlX2ZpbGVzMigmaW50ZXJmYWNlLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGluaXRpYWxpemUgYXVkaW8gc3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfYXVkaW8oJnZhcmlheC0+bGluZTYpOworCWlmIChlcnIgPCAwKSB7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGluaXRpYWxpemUgTUlESSBzdWJzeXN0ZW06ICovCisJZXJyID0gbGluZTZfaW5pdF9taWRpKCZ2YXJpYXgtPmxpbmU2KTsKKwlpZiAoZXJyIDwgMCkgeworCQl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiByZWdpc3RlciBhdWRpbyBzeXN0ZW06ICovCisJZXJyID0gbGluZTZfcmVnaXN0ZXJfYXVkaW8oJnZhcmlheC0+bGluZTYpOworCWlmIChlcnIgPCAwKSB7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCXZhcmlheF9hY3RpdmF0ZV9kZWxheWVkKHZhcmlheCwgVkFSSUFYX0FDVElWQVRFX0RFTEFZKTsKKwlsaW5lNl9zdGFydHVwX2RlbGF5ZWQoJnZhcmlheC0+ZHVtcHJlcSwgVkFSSUFYX1NUQVJUVVBfREVMQVksCisJCQkgICAgICB2YXJpYXhfc3RhcnR1cF90aW1lb3V0LCB2YXJpYXgpOworCXJldHVybiAwOworfQorCisvKgorCVdvcmtiZW5jaCBkZXZpY2UgZGlzY29ubmVjdGVkLgorKi8KK3ZvaWQgdmFyaWF4X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpZiAoaW50ZXJmYWNlID09IE5VTEwpCisJCXJldHVybjsKKwlkZXYgPSAmaW50ZXJmYWNlLT5kZXY7CisKKwlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJLyogcmVtb3ZlIHN5c2ZzIGVudHJpZXM6ICovCisJCXZhcmlheF9yZW1vdmVfZmlsZXMoMCwgMCwgZGV2KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZGVsKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZSk7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90b25lKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWUpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuayk7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kdW1wKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2FjdGl2ZSk7CisjaWYgQ1JFQVRFX1JBV19GSUxFCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yYXcpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmF3Mik7CisjZW5kaWYKKwl9CisKKwl2YXJpYXhfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTMzMGJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBWQVJJQVhfSAorI2RlZmluZSBWQVJJQVhfSAorCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorCisjaW5jbHVkZSAiZHVtcHJlcXVlc3QuaCIKKworCisjZGVmaW5lIFZBUklBWF9BQ1RJVkFURV9ERUxBWSAxMAorI2RlZmluZSBWQVJJQVhfU1RBUlRVUF9ERUxBWSAzCisKKworZW51bSB7CisJVkFSSUFYX0RVTVBfUEFTUzEgPSBMSU5FNl9EVU1QX0NVUlJFTlQsCisJVkFSSUFYX0RVTVBfUEFTUzIsCisJVkFSSUFYX0RVTVBfUEFTUzMKK307CisKKworLyoqCisJIEJpbmFyeSBWYXJpYXggbW9kZWwgZHVtcAorKi8KK3N0cnVjdCB2YXJpYXhfbW9kZWwgeworCS8qKgorCQkgSGVhZGVyIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgcHJvZ3JhbSBuYW1lKS4KKwkqLworCXVuc2lnbmVkIGNoYXIgbmFtZVsxOF07CisKKwkvKioKKwkJIE1vZGVsIHBhcmFtZXRlcnMuCisJKi8KKwl1bnNpZ25lZCBjaGFyIGNvbnRyb2xbNzggKiAyXTsKK307CisKK3N0cnVjdCB1c2JfbGluZTZfdmFyaWF4IHsKKwkvKioKKwkJIEdlbmVyaWMgTGluZTYgVVNCIGRhdGEuCisJKi8KKwlzdHJ1Y3QgdXNiX2xpbmU2IGxpbmU2OworCisJLyoqCisJCSBEdW1wIHJlcXVlc3Qgc3RydWN0dXJlLgorCQkgQXBwZW5kIHR3byBleHRyYSBidWZmZXJzIGZvciAzLXBhc3MgZGF0YSBxdWVyeS4KKwkqLworCXN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgZHVtcHJlcTsgc3RydWN0IGxpbmU2X2R1bXBfcmVxYnVmIGV4dHJhYnVmWzJdOworCisJLyoqCisJCSBCdWZmZXIgZm9yIGFjdGl2YXRpb24gY29kZS4KKwkqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9hY3RpdmF0ZTsKKworCS8qKgorCQkgTW9kZWwgbnVtYmVyLgorCSovCisJaW50IG1vZGVsOworCisJLyoqCisJCSBDdXJyZW50IG1vZGVsIHNldHRpbmdzLgorCSovCisJc3RydWN0IHZhcmlheF9tb2RlbCBtb2RlbF9kYXRhOworCisJLyoqCisJCSBOYW1lIG9mIGN1cnJlbnQgbW9kZWwgYmFuay4KKwkqLworCXVuc2lnbmVkIGNoYXIgYmFua1sxOF07CisKKwkvKioKKwkJIFBvc2l0aW9uIG9mIHZvbHVtZSBkaWFsLgorCSovCisJaW50IHZvbHVtZTsKKworCS8qKgorCQkgUG9zaXRpb24gb2YgdG9uZSBjb250cm9sIGRpYWwuCisJKi8KKwlpbnQgdG9uZTsKKworCS8qKgorCQkgVGltZXIgZm9yIGRlbGF5ZWQgYWN0aXZhdGlvbiByZXF1ZXN0LgorCSovCisJc3RydWN0IHRpbWVyX2xpc3QgYWN0aXZhdGVfdGltZXI7Cit9OworCisKK2V4dGVybiB2b2lkIHZhcmlheF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworZXh0ZXJuIGludCB2YXJpYXhfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICAgc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCk7CitleHRlcm4gdm9pZCB2YXJpYXhfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXgpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmMKaW5kZXggZTFjNGE4MC4uMDEwMTdiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAvKiBJbmNsdWRlLUZpbGUgZm9yIHRoZSBNZWlsaGF1cyBNRS00MDAwIEkvTyBib2FyZCAqLwpAQCAtMjQ2LDE3ICsyNDYsMTcgQEAKICAgSW5saW5lIGZ1bmN0aW9ucwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IGlubGluZSBtZTQwMDBfYnVmX2NvdW50KHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IG1lNDAwMF9idWZfY291bnQoc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiBidWYsIGludCBzaXplKQogewotCXJldHVybiAoKGJ1Zi5oZWFkIC0gYnVmLnRhaWwpICYgKHNpemUgLSAxKSk7CisJcmV0dXJuIChidWYuaGVhZCAtIGJ1Zi50YWlsKSAmIChzaXplIC0gMSk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lNDAwMF9idWZfc3BhY2Uoc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiBidWYsIGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgbWU0MDAwX2J1Zl9zcGFjZShzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCiB7Ci0JcmV0dXJuICgoYnVmLnRhaWwgLSAoYnVmLmhlYWQgKyAxKSkgJiAoc2l6ZSAtIDEpKTsKKwlyZXR1cm4gKGJ1Zi50YWlsIC0gKGJ1Zi5oZWFkICsgMSkpICYgKHNpemUgLSAxKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgbWU0MDAwX3ZhbHVlc190b19lbmQoc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiBidWYsIGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgbWU0MDAwX3ZhbHVlc190b19lbmQoc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiBidWYsIGludCBzaXplKQogewogCWludCBlbmQ7CiAJaW50IG47CkBAIC0yNjUsNyArMjY1LDcgQEAKIAlyZXR1cm4gKG4gPCBlbmQpID8gbiA6IGVuZDsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgbWU0MDAwX3NwYWNlX3RvX2VuZChzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBtZTQwMDBfc3BhY2VfdG9fZW5kKHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKIHsKIAlpbnQgZW5kOwogCWludCBuOwpAQCAtMjc1LDE5ICsyNzUsMTkgQEAKIAlyZXR1cm4gKG4gPD0gZW5kKSA/IG4gOiAoZW5kICsgMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBtZTQwMDBfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgbWU0MDAwX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCVBPUlRfUERFQlVHKCItLT4gMHglMDJYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOwogCW91dGIodmFsdWUsIHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBpbmxpbmUgbWU0MDAwX291dGwodW5zaWduZWQgbG9uZyB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIG1lNDAwMF9vdXRsKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAlQT1JUX1BERUJVRygiLS0+IDB4JTA4bFggcG9ydCAweCUwNGxYXG4iLCB2YWx1ZSwgcG9ydCk7CiAJb3V0bCh2YWx1ZSwgcG9ydCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlubGluZSBtZTQwMDBfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZTQwMDBfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCXZhbHVlID0gaW5sKHBvcnQpOwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJcmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpbmxpbmUgbWU0MDAwX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgbWU0MDAwX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJdW5zaWduZWQgY2hhciB2YWx1ZTsKIAl2YWx1ZSA9IGluYihwb3J0KTsKQEAgLTMwOSw3ICszMDksNyBAQAogCS5wcm9iZSA9IG1lNDAwMF9wcm9iZQogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfc2luZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX3NpbmcgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC53cml0ZSA9IG1lNDAwMF9hb193cml0ZV9zaW5nLAogICAgICAgLmlvY3RsID0gbWU0MDAwX2FvX2lvY3RsX3NpbmcsCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc193cmFwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfd3JhcCA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLndyaXRlID0gbWU0MDAwX2FvX3dyaXRlX3dyYXAsCiAgICAgICAuaW9jdGwgPSBtZTQwMDBfYW9faW9jdGxfd3JhcCwKQEAgLTMyNSw3ICszMjUsNyBAQAogICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX2NvbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc19jb250ID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAud3JpdGUgPSBtZTQwMDBfYW9fd3JpdGVfY29udCwKICAgICAgIC5wb2xsID0gbWU0MDAwX2FvX3BvbGxfY29udCwKQEAgLTMzNSwxNCArMzM1LDE0IEBACiAgICAgICAuZnN5bmMgPSBtZTQwMDBfYW9fZnN5bmNfY29udCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX3NpbmcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19zaW5nID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAuaW9jdGwgPSBtZTQwMDBfYWlfaW9jdGxfc2luZywKICAgICAgIC5vcGVuID0gbWU0MDAwX29wZW4sCiAgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9zdyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfc3cgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC5yZWFkID0gbWU0MDAwX2FpX3JlYWQsCiAgICAgICAucG9sbCA9IG1lNDAwMF9haV9wb2xsLApAQCAtMzUyLDcgKzM1Miw3IEBACiAgICAgICAuZmFzeW5jID0gbWU0MDAwX2FpX2Zhc3luYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0ID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAucmVhZCA9IG1lNDAwMF9haV9yZWFkLAogICAgICAgLnBvbGwgPSBtZTQwMDBfYWlfcG9sbCwKQEAgLTM2MSw3ICszNjEsNyBAQAogICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXRfdmFsdWUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0X3ZhbHVlID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAucmVhZCA9IG1lNDAwMF9haV9yZWFkLAogICAgICAgLnBvbGwgPSBtZTQwMDBfYWlfcG9sbCwKQEAgLTM3MCw3ICszNzAsNyBAQAogICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXRfY2hhbmxpc3QgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0X2NoYW5saXN0ID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAucmVhZCA9IG1lNDAwMF9haV9yZWFkLAogICAgICAgLnBvbGwgPSBtZTQwMDBfYWlfcG9sbCwKQEAgLTM3OSwyMSArMzc5LDIxIEBACiAgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2Rpb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2Rpb19mb3BzID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAuaW9jdGwgPSBtZTQwMDBfZGlvX2lvY3RsLAogICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKICAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfY250X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfY250X2ZvcHMgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC5pb2N0bCA9IG1lNDAwMF9jbnRfaW9jdGwsCiAgICAgICAub3BlbiA9IG1lNDAwMF9vcGVuLAogICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9leHRfaW50X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfZXh0X2ludF9mb3BzID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAuaW9jdGwgPSBtZTQwMDBfZXh0X2ludF9pb2N0bCwKICAgICAgIC5vcGVuID0gbWU0MDAwX29wZW4sCkBAIC00MDEsMTggKzQwMSwyNiBAQAogICAgICAgLmZhc3luYyA9IG1lNDAwMF9leHRfaW50X2Zhc3luYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICptZTQwMDBfYW9fZm9wc19hcnJheVtdID0gewotCSZtZTQwMDBfYW9fZm9wc19zaW5nLAkvLyBzaW5nbGUgb3BlcmF0aW9ucwotCSZtZTQwMDBfYW9fZm9wc193cmFwLAkvLyB3cmFwYXJvdW5kIG9wZXJhdGlvbnMKLQkmbWU0MDAwX2FvX2ZvcHNfY29udCwJLy8gY29udGlub3VzIG9wZXJhdGlvbnMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICptZTQwMDBfYW9fZm9wc19hcnJheVtdID0geworCS8qIHNpbmdsZSBvcGVyYXRpb25zICovCisJJm1lNDAwMF9hb19mb3BzX3NpbmcsCisJLyogd3JhcGFyb3VuZCBvcGVyYXRpb25zICovCisJJm1lNDAwMF9hb19mb3BzX3dyYXAsCisJLyogY29udGludW91cyBvcGVyYXRpb25zICovCisJJm1lNDAwMF9hb19mb3BzX2NvbnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbWU0MDAwX2FpX2ZvcHNfYXJyYXlbXSA9IHsKLQkmbWU0MDAwX2FpX2ZvcHNfc2luZywJLy8gc2luZ2xlIG9wZXJhdGlvbnMKLQkmbWU0MDAwX2FpX2ZvcHNfY29udF9zdywJLy8gY29udGludW91cyBvcGVyYXRpb25zIHdpdGggc29mdHdhcmUgc3RhcnQKLQkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldCwJLy8gY29udGlub3VzIG9wZXJhdGlvbnMgd2l0aCBleHRlcm5hbCB0cmlnZ2VyCi0JJm1lNDAwMF9haV9mb3BzX2NvbnRfZXRfdmFsdWUsCS8vIHNhbXBsZSB2YWx1ZXMgYnkgZXh0ZXJuYWwgdHJpZ2dlcgotCSZtZTQwMDBfYWlfZm9wc19jb250X2V0X2NoYW5saXN0LAkvLyB3b3JrIHRocm91Z2ggb25lIGNoYW5uZWwgbGlzdCBieSBleHRlcm5hbCB0cmlnZ2VyCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbWU0MDAwX2FpX2ZvcHNfYXJyYXlbXSA9IHsKKwkvKiBzaW5nbGUgb3BlcmF0aW9ucyAqLworCSZtZTQwMDBfYWlfZm9wc19zaW5nLAorCS8qIGNvbnRpbnVvdXMgb3BlcmF0aW9ucyB3aXRoIHNvZnR3YXJlIHN0YXJ0ICovCisJJm1lNDAwMF9haV9mb3BzX2NvbnRfc3csCisJLyogY29udGludW91cyBvcGVyYXRpb25zIHdpdGggZXh0ZXJuYWwgdHJpZ2dlciAqLworCSZtZTQwMDBfYWlfZm9wc19jb250X2V0LAorCS8qIHNhbXBsZSB2YWx1ZXMgYnkgZXh0ZXJuYWwgdHJpZ2dlciAqLworCSZtZTQwMDBfYWlfZm9wc19jb250X2V0X3ZhbHVlLAorCS8qIHdvcmsgdGhyb3VnaCBvbmUgY2hhbm5lbCBsaXN0IGJ5IGV4dGVybmFsIHRyaWdnZXIgKi8KKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldF9jaGFubGlzdCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1lNDAwMF9pbml0X21vZHVsZSh2b2lkKQpAQCAtNTQ2LDE1ICs1NTQsMTMgQEAKIAkJCQkmYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0LCBsaXN0KSB7CiAJCQltZTQwMDBfYW9fcmVzZXQoYW9fY29udGV4dCk7CiAJCQlmcmVlX2lycShhb19jb250ZXh0LT5pcnEsIGFvX2NvbnRleHQpOwotCQkJaWYgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikKLQkJCQlrZnJlZShhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpOworCQkJa2ZyZWUoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKTsKIAkJCWxpc3RfZGVsKCZhb19jb250ZXh0LT5saXN0KTsKIAkJCWtmcmVlKGFvX2NvbnRleHQpOwogCQl9CiAKIAkJLyogQ2xlYXIgYW5hbG9nIGlucHV0IGNvbnRleHQgKi8KLQkJaWYgKGJvYXJkX2luZm8tPmFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikKLQkJCWtmcmVlKGJvYXJkX2luZm8tPmFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CisJCWtmcmVlKGJvYXJkX2luZm8tPmFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CiAJCWtmcmVlKGJvYXJkX2luZm8tPmFpX2NvbnRleHQpOwogCiAJCS8qIENsZWFyIGRpZ2l0YWwgSS9PIGNvbnRleHQgKi8KQEAgLTEyNjMsOSArMTI2OSw4IEBACiAJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT19ERU1VWF9BREpVU1RfUkVHKTsKIAogCS8qIFNldCBkaWdpdGFsIEkvTyBkaXJlY3Rpb24gZm9yIHBvcnQgMCB0byBvdXRwdXQgb24gaXNvbGF0ZWQgdmVyc2lvbnMgKi8KLQlpZiAoIShtZTQwMDBfaW5sKGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19ESVJfUkVHKSAmIDB4MSkpIHsKKwlpZiAoIShtZTQwMDBfaW5sKGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19ESVJfUkVHKSAmIDB4MSkpCiAJCW1lNDAwMF9vdXRsKDB4MSwgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0NUUkxfUkVHKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NjMsNyArMTQ2OCw3IEBACiAJCS8qIFNldCBmaWxlIG9wZXJhdGlvbnMgcG9pbnRlciB0byBzaW5nbGUgZnVuY3Rpb25zICovCiAJCWZpbGVfcC0+Zl9vcCA9ICZtZTQwMDBfZGlvX2ZvcHM7CiAKLQkJLy9tZTQwMDBfZGlvX3Jlc2V0KGRpb19jb250ZXh0KTsKKwkJLyogbWU0MDAwX2Rpb19yZXNldChkaW9fY29udGV4dCk7ICovCiAJfQogCS8qIENvdW50ZXJzICovCiAJZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubykgewpAQCAtMjA1OCw3ICsyMDYzLDcgQEAKIAkJCQkJCU1FNDAwMF9BT19CVUZGRVJfQ09VTlQpOwogCiAJCQlpZiAoYyA9PSAwKQotCQkJCXJldHVybiAoMiAqIHJldCk7CisJCQkJcmV0dXJuIDIgKiByZXQ7CiAKIAkJCS8qIE9ubHkgYWJsZSB0byB3cml0ZSBzaXplIG9mIGZyZWUgYnVmZmVyIG9yIHNpemUgb2YgY291bnQgKi8KIAkJCWlmIChjb3VudCA8IGMpCkBAIC0yMTA0LDkgKzIxMDksOCBAQAogCQl9CiAJfQogCi0JaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCXJldHVybiAocmV0ID09IDApID8gLUVBR0FJTiA6IDIgKiByZXQ7Ci0JfQogCiAJcmV0dXJuIDIgKiByZXQ7CiB9CkBAIC0yMjAxLDcgKzIyMDUsNyBAQAogCWNhc2UgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19VUERBVEU6CiAJCXJldHVybgogCQkgICAgbWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoCi0JCSAgICAJCShzdHJ1Y3QgbWU0MDAwX2FvX2NoYW5uZWxfbGlzdCAqKWFyZywKKwkJCQkoc3RydWN0IG1lNDAwMF9hb19jaGFubmVsX2xpc3QgKilhcmcsCiAJCQkJYW9fY29udGV4dCk7CiAJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19USU1FT1VUOgogCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgodW5zaWduZWQgbG9uZyAqKWFyZywKQEAgLTIzNjEsNyArMjM2NSw5IEBACiAJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zdGFydCgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CiAJCQkJCXJldHVybiAtRUlOVFI7CiAJCQkJfQotCQkJCWlmICgoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCQkvKiBrZXJuZWwgMi42IGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaCisJCQkJICogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlICovCisJCQkJaWYgKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3N0YXJ0KCk6VGltZW91dCByZWFjaGVkXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU87CkBAIC0yNDAyLDggKzI0MDgsOCBAQAogCX0KIAogCS8qIENsZWFyIHRoZSBzdG9wIGJpdCAqLwotCS8vdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUDsKLQkvL21lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCS8qIHRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX1NUT1A7ICovCisJLyogbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7ICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0MzQsOCArMjQ0MCw4IEBACiAJfQogCiAJLyogQ2xlYXIgdGhlIHN0b3AgYml0cyAqLwotCS8vdG1wICY9IH4oTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOwotCS8vbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJLyogdG1wICY9IH4oTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOyAqLworCS8qIG1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOyAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTk4LDggKzI2MDQsMTAgQEAKIAogCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIAl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKLQl0bXAgJj0gfigweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBEaXNhYmxlIHByZWxvYWQgYml0Ci0JdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIERpc2FibGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCS8qIERpc2FibGUgcHJlbG9hZCBiaXQgKi8KKwl0bXAgJj0gfigweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOworCS8qIERpc2FibGUgaHcgc2ltdWx0YW5lb3VzIGJpdCAqLworCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwogCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwogCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCkBAIC0yNjE0LDggKzI2MjIsMTAgQEAKIAogCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIAl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKLQl0bXAgfD0gKDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIEVuYWJsZSBwcmVsb2FkIGJpdAotCXRtcCB8PSAoMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIEVuYWJsZSBodyBzaW11bHRhbmVvdXMgYml0CisJLyogRW5hYmxlIHByZWxvYWQgYml0ICovCisJdG1wIHw9ICgweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOworCS8qIEVuYWJsZSBodyBzaW11bGF0ZW5vdXMgYml0ICovCisJdG1wIHw9ICgweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsKIAltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKIAlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIApAQCAtMjYzMCw4ICsyNjQwLDEwIEBACiAKIAlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7Ci0JdG1wIHw9ICgweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBFbmFibGUgcHJlbG9hZCBiaXQKLQl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsJLy8gRGlzYWJsZSBodyBzaW11bHRhbmVvdXMgYml0CisJLyogRW5hYmxlIHByZWxvYWQgYml0ICovCisJdG1wIHw9ICgweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOworCS8qIEVuYWJsZSBodyBzaW11bGF0ZW5vdXMgYml0ICovCisJdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CiAJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CiAJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAKQEAgLTI2NjksMTEgKzI2ODEsMTEgQEAKIAkJCSAgICAodG1wICYKIAkJCSAgICAgKDB4MSA8PAogCQkJICAgICAgKCgoc3RydWN0IG1lNDAwMF9hb19jb250ZXh0ICopZW50cnkpLT5pbmRleAotCQkJICAgICAgCQkJCQkgICAgICArIDE2KSkpKSB7CisJCQkJCQkJCSAgICAgICsgMTYpKSkpIHsKIAkJCQl0bXAgJj0KIAkJCQkgICAgfigweDEgPDwKIAkJCQkgICAgICAoKChzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKillbnRyeSktPgotCQkJCSAgICAgIAkJCQkJaW5kZXgpKTsKKwkJCQkJCQkJCWluZGV4KSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0yNzMyLDggKzI3NDQsMTAgQEAKIAkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKCk6SW52YWxpZCBib2FyZCBudW1iZXIgc3BlY2lmaWVkXG4iKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCXRtcCAmPSB+KDB4MSA8PCBjaGFubmVscy5saXN0W2ldKTsJLy8gQ2xlYXIgdGhlIHByZWxvYWQgYml0Ci0JCXRtcCAmPSB+KDB4MSA8PCAoY2hhbm5lbHMubGlzdFtpXSArIDE2KSk7CS8vIENsZWFyIHRoZSBodyBzaW11bHRhbmVvdXMgYml0CisJCS8qIENsZWFyIHRoZSBwcmVsb2FkIGJpdCAqLworCQl0bXAgJj0gfigweDEgPDwgY2hhbm5lbHMubGlzdFtpXSk7CisJCS8qIENsZWFyIHRoZSBodyBzaW11bHRhbmVvdXMgYml0ICovCisJCXRtcCAmPSB+KDB4MSA8PCAoY2hhbm5lbHMubGlzdFtpXSArIDE2KSk7CiAJfQogCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwogCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwpAQCAtMjc1OSw4ICsyNzczLDEwIEBACiAKIAlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7Ci0JdG1wICY9IH4oMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRGlzYWJsZSBzeW5jaHJvbm91cyBzdyBiaXQKLQl0bXAgfD0gMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KTsJLy8gRW5hYmxlIHN5bmNocm9ub3VzIGh3IGJpdAorCS8qIERpc2FibGUgc3luY2hyb25vdXMgc3cgYml0ICovCisJdG1wICY9IH4oMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsKKwkvKiBFbmFibGUgc3luY2hyb25vdXMgaHcgYml0ICovCisJdG1wIHw9IDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNik7CiAJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CiAJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAKQEAgLTI3OTQsOCArMjgxMCwxMCBAQAogCiAJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwotCXRtcCB8PSAweDEgPDwgYW9fY29udGV4dC0+aW5kZXg7CS8vIEVuYWJsZSBzeW5jaHJvbm91cyBzdyBiaXQKLQl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsJLy8gRGlzYWJsZSBzeW5jaHJvbm91cyBodyBiaXQKKwkvKiBFbmFibGUgc3luY2hyb25vdXMgc3cgYml0ICovCisJdG1wIHw9IDB4MSA8PCBhb19jb250ZXh0LT5pbmRleDsKKwkvKiBEaXNhYmxlIHN5bmNocm9ub3VzIGh3IGJpdCAqLworCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwogCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwogCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCkBAIC0yODY3LDcgKzI4ODUsOSBAQAogCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5UUjsKIAkJCQl9Ci0JCQkJaWYgKCgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpKSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJCS8qIGtlcm5lbCAyLjYgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9ucyBmb3IgSFoKKwkJCQkgKiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UgKi8KKwkJCQlpZiAoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSB7CiAJCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6VGltZW91dCByZWFjaGVkXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU87CkBAIC0zMjQzLDcgKzMyNjMsOCBAQAogCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOwogCQkJCXJldHVybiAtRUlOVFI7CiAJCQl9Ci0JCQlpZiAoKChqaWZmaWVzIC0gamlmZnkpID4gKGNtZC50aW1lb3V0ICogSFogLyBVU0VSX0haKSkgJiYgY21kLnRpbWVvdXQpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkvKiAyLjYgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlICovCisJCQlpZiAoKChqaWZmaWVzIC0gamlmZnkpID4gKGNtZC50aW1lb3V0ICogSFogLyBVU0VSX0haKSkgJiYgY21kLnRpbWVvdXQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6VGltZW91dCByZWFjaGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTzsKQEAgLTM2MjIsOSArMzY0Myw4IEBACiAJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CiAKIAkvKiBXcml0ZSB0aGUgY2hhbm5lbCBsaXN0ICovCi0JZm9yIChpID0gMDsgaSA8IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBjbWQuY2hhbm5lbF9saXN0LmNvdW50OyBpKyspCiAJCW1lNDAwMF9vdXRsKGxpc3RbaV0sIGFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9yZWcpOwotCX0KIAogCS8qIFNldHVwIHNhbXBsZSBhbmQgaG9sZCAqLwogCWlmIChjbWQuc2gpIHsKQEAgLTM2NjMsOCArMzY4Myw3IEBACiAJdG1wICY9CiAJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTyB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TQU1QTEVfSE9MRCk7CiAKLQlpZiAobGlzdCkKLQkJa2ZyZWUobGlzdCk7CisJa2ZyZWUobGlzdCk7CiAKIAlyZXR1cm4gZXJyOwogCkBAIC0zNzc0LDI1ICszNzkzLDIyIEBACiAKIAlpZiAodGltZW91dCkgewogCQlyZWYgPSBqaWZmaWVzOwotCQl3aGlsZSAoIQotCQkgICAgICAgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpCi0JCXsKKwkJd2hpbGUgKCEoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkgewogCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc3RhcnRfZXgoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOwogCQkJCXJldHVybiAtRUlOVFI7CiAJCQl9Ci0JCQlpZiAoKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkvKiAyLjYgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlICovCisJCQlpZiAoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0YXJ0X2V4KCk6VGltZW91dCByZWFjaGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KIAkJfQogCX0gZWxzZSB7Ci0JCXdoaWxlICghCi0JCSAgICAgICAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkKLQkJeworCQl3aGlsZSAoIShpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pKSB7CiAJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCXByaW50ayhLRVJOX0VSUgpAQCAtNDExMyw5ICs0MTI5LDggQEAKIAkJcmV0dXJuIC1FUElQRTsKIAl9CiAKLQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJcmV0dXJuIChrID09IDApID8gLUVBR0FJTiA6IDIgKiByZXQ7Ci0JfQogCiAJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9yZWFkKCkgaXMgbGVhdmVkXG4iKTsKIAlyZXR1cm4gcmV0ICogMjsKQEAgLTQyNTQsMTEgKzQyNjksMTAgQEAKIAl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQlpZiAoY21kICYgKCgweDEgPDwgKGxlbmd0aCAtIDEpKSA+PiBpKSkgeworCQlpZiAoY21kICYgKCgweDEgPDwgKGxlbmd0aCAtIDEpKSA+PiBpKSkKIAkJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKLQkJfQogCiAJCS8qIFdyaXRlIHRvIEVFUFJPTSAqLwogCQltZTQwMDBfb3V0bCh2YWx1ZSwKQEAgLTQzMTQsMTEgKzQzMjgsMTEgQEAKIAogCS8qIFdyaXRlIHRoZSByZWFkIGNvbW1hbmQgdG8gdGhlIGVlcHJvbSAqLwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQlpZiAoY21kICYgKCgweDEgPDwgKGxlbmd0aCAtIDEpKSA+PiBpKSkgeworCQlpZiAoY21kICYgKCgweDEgPDwgKGxlbmd0aCAtIDEpKSA+PiBpKSkKIAkJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKLQkJfQorCiAJCW1lNDAwMF9vdXRsKHZhbHVlLAogCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CiAJCXVkZWxheShFRVBST01fREVMQVkpOwpAQCAtNTQ0MCw4ICs1NDU0LDYgQEAKIAlpbnQgaTsKIAlpbnQgYyA9IDA7CiAJaW50IGMxID0gMDsKLQkvL3Vuc2lnbmVkIGxvbmcgYmVmb3JlOwotCS8vdW5zaWduZWQgbG9uZyBhZnRlcjsKIAogCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKSBpcyBleGVjdXRlZFxuIik7CiAKQEAgLTU0OTMsNyArNTUwNSw2IEBACiAJCQkgICAgKCJtZTQwMDBfYW9faXNyKCk6V29yayBkb25lIG9yIGJ1ZmZlciBlbXB0eVxuIik7CiAJCQlicmVhazsKIAkJfQotCQkvL3JkdHNjbChiZWZvcmUpOwogCQlpZiAoKChhb19jb250ZXh0LT5maWZvX3JlZyAmIDB4RkYpID09IE1FNDAwMF9BT18wMV9GSUZPX1JFRykgfHwKIAkJICAgICgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PSBNRTQwMDBfQU9fMDNfRklGT19SRUcpKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgYzE7IGkrKykgewpAQCAtNTUwOSw4ICs1NTIwLDYgQEAKIAkJCSAgICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCiAJCQkgICAgICBhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsLCBjMSk7CiAKLQkJLy9yZHRzY2woYWZ0ZXIpOwotCQkvL3ByaW50ayhLRVJOX0VSUiJNRTQwMDA6bWU0MDAwX2FvX2lzcigpOlRpbWUgbGFwc2UgPSAlbHVcbiIsIGFmdGVyIC0gYmVmb3JlKTsKIAogCQlhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0KIAkJICAgIChhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsICsgYzEpICYgKE1FNDAwMF9BT19CVUZGRVJfQ09VTlQgLQpAQCAtNTU0Miw4ICs1NTUxLDEwIEBACiAJLyogSWYgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkLCBmbG93IHdhcyBpbnRlcnJ1cHRlZCAqLwogCWlmICghKG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOm1lNDAwMF9hb19pc3IoKTpCcm9rZW4gcGlwZVxuIik7Ci0JCWFvX2NvbnRleHQtPnBpcGVfZmxhZyA9IDE7CS8vIFNldCBmbGFnIGluIG9yZGVyIHRvIGluZm9ybSB3cml0ZSByb3V0aW5lCi0JCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlE7CS8vIERpc2FibGUgaW50ZXJydXB0CisJCS8qIFNldCBmbGFnIGluIG9yZGVyIHRvIGluZm9ybSB3cml0ZSByb3V0aW5lICovCisJCWFvX2NvbnRleHQtPnBpcGVfZmxhZyA9IDE7CisJCS8qIERpc2FibGUgaW50ZXJydXB0ICovCisJCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlE7CiAJfQogCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOwogCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5pbnRfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9kZXZpY2UuYwppbmRleCA4OTUwZTQ3Li5iYWUxN2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZGV2aWNlLmMKQEAgLTE4Niw2ICsxODYsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTA2MDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTA2MDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTIxMCw2ICsyMTEsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTUUtNnh4IERldmljZSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLTZ4eCBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lMDYwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZGlvLmMKaW5kZXggM2EyNzc1Ny4uZDI5MzAzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2Rpby5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTkxLDcgKzkxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfZGlvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9kaW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX2Rpb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX2Rpb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX2Rpb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9kaW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0zMjksNyArMzI5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9kaW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfZGlvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfZGlvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfZGlvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zNTYsNyArMzU2LDcgQEAKIAogbWUwNjAwX2Rpb19zdWJkZXZpY2VfdCAqbWUwNjAwX2Rpb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkaW9faWR4LAotCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lMDYwMF9kaW9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJCWtmcmVlKHN1YmRldmljZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQkvLyBJbml0aWFsaXplIHNwaW4gbG9ja3MuCisJLyogSW5pdGlhbGl6ZSBzcGluIGxvY2tzLiAqLwogCXNwaW5fbG9ja19pbml0KCZzdWJkZXZpY2UtPnN1YmRldmljZV9sb2NrKTsKIAogCXN1YmRldmljZS0+Y3RybF9yZWdfbG9jayA9IGN0cmxfcmVnX2xvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2V4dF9pcnEuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZXh0X2lycS5jCmluZGV4IGViYTE4YWQuLjJmNmZlZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZXh0X2lycS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZXh0X2lycS5jCkBAIC0zNyw3ICszNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTMzNywxMSArMzM3LDcgQEAKIAlrZnJlZShpbnN0YW5jZSk7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWUwNjAwX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lMDYwMF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCW1lMDYwMF9leHRfaXJxX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0zOTcsNyArMzkzLDcgQEAKIAogbWUwNjAwX2V4dF9pcnFfc3ViZGV2aWNlX3QgKm1lMDYwMF9leHRfaXJxX2NvbnN0cnVjdG9yKHVpbnQzMl90IHBseF9yZWdfYmFzZSwKIAkJCQkJCSAgICAgICB1aW50MzJfdCBtZTA2MDBfcmVnX2Jhc2UsCi0JCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGludGNzcl9sb2NrLAorCQkJCQkJICAgICAgIHNwaW5sb2NrX3QgKmludGNzcl9sb2NrLAogCQkJCQkJICAgICAgIHVuc2lnbmVkIGV4dF9pcnFfaWR4LAogCQkJCQkJICAgICAgIGludCBpcnEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX29wdG9pLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX29wdG9pLmMKaW5kZXggYjZkOTc3Zi4uNDNmNzEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9vcHRvaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfb3B0b2kuYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC02OCw3ICs2OCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX29wdG9pX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSBpbnQgY2hhbm5lbCwKIAkJCQkJIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTE4LDcgKzExOCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfb3B0b2lfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTE2OSw3ICsxNjksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX29wdG9pX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX29wdG9pX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfb3B0b2lfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE4Niw3ICsxODYsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX29wdG9pX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTIxOSw3ICsyMTksNyBAQAogCQlrZnJlZShzdWJkZXZpY2UpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JLy8gSW5pdGlhbGl6ZSBzcGluIGxvY2tzLgorCS8qIEluaXRpYWxpemUgc3BpbiBsb2Nrcy4gKi8KIAlzcGluX2xvY2tfaW5pdCgmc3ViZGV2aWNlLT5zdWJkZXZpY2VfbG9jayk7CiAKIAkvKiBTYXZlIHRoZSBzdWJkZXZpY2UgaW5kZXggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfcmVsYXkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfcmVsYXkuYwppbmRleCAyNjY1YzY5Li4wMzgzNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX3JlbGF5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9yZWxheS5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTg1LDcgKzg1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfcmVsYXlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJIGludCBjaGFubmVsLAogCQkJCQkgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9yZWxheV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjAzLDcgKzIwMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfcmVsYXlfaW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfcmVsYXlfaW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJaW50IGNoYW5uZWwsCiAJCQkJCWludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yNzksNyArMjc5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9yZWxheV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9yZWxheV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfcmVsYXlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfcmVsYXlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9yZWxheV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX3R0bGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfdHRsaS5jCmluZGV4IGFiOGUxM2IuLjdkOTcwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfdHRsaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfdHRsaS5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTY3LDcgKzY3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfdHRsaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfdHRsaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJaW50IGNoYW5uZWwsCiAJCQkJCWludCBzaW5nbGVfY29uZmlnLApAQCAtMTE2LDcgKzExNiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfdHRsaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3R0bGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF90dGxpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3R0bGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3R0bGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF90dGxpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xODEsNyArMTgxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfdHRsaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3R0bGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kZXZpY2UuYwppbmRleCA3NjRkNWQzLi5lOWM2ODg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZGV2aWNlLmMKQEAgLTE1Miw2ICsxNTIsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTA5MDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTA5MDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTE3NSw2ICsxNzYsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTUUtOXggRGV2aWNlIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtOXggRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTA5MDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZGkuYwppbmRleCBkN2Q3Mzk0Li40NjY1YjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kaS5jCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgpAQCAtNzEsNyArNzEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTExNSw3ICsxMTUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0xNjEsNyArMTYxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xNzgsNyArMTc4LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWUwOTAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kby5jCmluZGV4IGI1YjljM2EuLmEyMjc1ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZG8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RvLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtODEsNyArODEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZG9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZG9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTIyMyw3ICsyMjMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0yMzEsNyArMjMxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZG9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTI0MCw3ICsyNDAsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTA5MDBfZG9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxMDAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTAwMF9kZXZpY2UuYwppbmRleCBjNDRlMjE0Li5jZjBmYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxMDAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTEwMDBfZGV2aWNlLmMKQEAgLTQ5LDggKzQ5LDggQEAKICNpbmNsdWRlICJtZXN1YmRldmljZS5oIgogI2luY2x1ZGUgIm1lMTAwMF9kaW8uaCIKIAotc3RhdGljIGludCBtZTEwMDBfY29uZmlnX2xvYWQobWVfZGV2aWNlX3QgKiBtZV9kZXZpY2UsIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCSAgICAgIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqIGNvbmZpZykKK3N0YXRpYyBpbnQgbWUxMDAwX2NvbmZpZ19sb2FkKG1lX2RldmljZV90ICptZV9kZXZpY2UsIHN0cnVjdCBmaWxlICpmaWxlcCwKKwkJCSAgICAgIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqY29uZmlnKQogewogCW1lMTAwMF9kZXZpY2VfdCAqbWUxMDAwX2RldmljZTsKIAltZTEwMDBfZGlvX3N1YmRldmljZV90ICpkaW87CkBAIC0xODEsNiArMTgxLDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWUxMDAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWUxMDAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogc3RhdGljIGludCBfX2luaXQgbWUxMDAwX2luaXQodm9pZCkKQEAgLTIwMyw2ICsyMDQsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTWVpbGhhdXMgTUUtMTAwMCBEZXZpY2VzIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtMTAwMCBEaWdpdGFsIEkvTyBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lMTAwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTAwMF9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTEwMDBfZGlvLmMKaW5kZXggODc2MDVhOS4uMmQ3ZWQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTAwMF9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxMDAwX2Rpby5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTM3MSw3ICszNzEsNyBAQAogCiBtZTEwMDBfZGlvX3N1YmRldmljZV90ICptZTEwMDBfZGlvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpb19pZHgsCi0JCQkJCSAgICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWUxMDAwX2Rpb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNDAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTQwMF9kZXZpY2UuYwppbmRleCBiOTViYjRmLi5jYTc0OThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNDAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE0MDBfZGV2aWNlLmMKQEAgLTIyOCw2ICsyMjgsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTE0MDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTE0MDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTI1MSw2ICsyNTIsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTWVpbGhhdXMgTUUtMTR4eCBkZXZpY2VzIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtMTR4eCBNSU8gZGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTE0MDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE0MDBfZXh0X2lycS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTQwMF9leHRfaXJxLmMKaW5kZXggYjRkZjdjYy4uMGRjNmI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTQwMF9leHRfaXJxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTQwMF9leHRfaXJxLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApAQCAtMzIzLDEyICszMjMsNyBAQAogCXJldHVybiBNRV9FUlJOT19OT1RfU1VQUE9SVEVEOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lMTQwMF9leHRfaXJxX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lMTQwMF9leHRfaXJxX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCi0JCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAltZTE0MDBfZXh0X2lycV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdWludDMyX3Qgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9hby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9hby5jCmluZGV4IGQxMjdjNmIuLjEyZTNjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfYW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2FvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCkBAIC01NSwzNiArNTUsMzIgQEAKIAogc3RhdGljIHZvaWQgbWUxNjAwX2FvX2Rlc3RydWN0b3Ioc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlKTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLXN0YXRpYyB2b2lkIG1lMTYwMF9hb193b3JrX2NvbnRyb2xfdGFzayh2b2lkICpzdWJkZXZpY2UpOwotI2Vsc2UKIHN0YXRpYyB2b2lkIG1lMTYwMF9hb193b3JrX2NvbnRyb2xfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotI2VuZGlmCiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsIGludCByZWYsIGludCB0cmlnX2NoYW4sCiAJCQkJICAgICAgaW50IHRyaWdfdHlwZSwgaW50IHRyaWdfZWRnZSwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgY2hhbm5lbCwgaW50ICp2YWx1ZSwKIAkJCQkgICAgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBjaGFubmVsLCBpbnQgdmFsdWUsCiAJCQkJICAgICBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpOwotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqdHlwZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqdHlwZSwKIAkJCQkJICBpbnQgKnN1YnR5cGUpOwotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqY2Fwcyk7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50IHVuaXQsIGludCAqbWluLCBpbnQgKm1heCwKIAkJCQkJICAgIGludCAqbWF4ZGF0YSwgaW50ICpyYW5nZSk7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgdW5pdCwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50IHVuaXQsCiAJCQkJCSBpbnQgKmNvdW50KTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCByYW5nZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50IHJhbmdlLAogCQkJCSAgICAgIGludCAqdW5pdCwgaW50ICptaW4sIGludCAqbWF4LAogCQkJCSAgICAgIGludCAqbWF4ZGF0YSk7CiAKQEAgLTk0LDEwICs5MCw5IEBACiBtZTE2MDBfYW9fc3ViZGV2aWNlX3QgKm1lMTYwMF9hb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgYW9faWR4LAogCQkJCQkgICAgIGludCBjdXJyLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBjb25maWdfcmVnc19sb2NrLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBhb19zaGFkb3dzX2xvY2ssCi0JCQkJCSAgICAgbWUxNjAwX2FvX3NoYWRvd190ICoKLQkJCQkJICAgICBhb19yZWdzX3NoYWRvd3MsCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqY29uZmlnX3JlZ3NfbG9jaywKKwkJCQkJICAgICBzcGlubG9ja190ICphb19zaGFkb3dzX2xvY2ssCisJCQkJCSAgICAgbWUxNjAwX2FvX3NoYWRvd190ICphb19yZWdzX3NoYWRvd3MsCiAJCQkJCSAgICAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lMTYwMF93cSkKIHsKIAltZTE2MDBfYW9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKQEAgLTIwMCwxMyArMTk1LDggQEAKIAlzdWJkZXZpY2UtPm1lMTYwMF93b3JrcXVldWUgPSBtZTE2MDBfd3E7CiAKIC8qIHdvcmtxdWV1ZSBBUEkgY2hhbmdlZCBpbiBrZXJuZWwgMi42LjIwICovCi0jaWYgKCBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApICkKLQlJTklUX1dPUksoJnN1YmRldmljZS0+YW9fY29udHJvbF90YXNrLCBtZTE2MDBfYW9fd29ya19jb250cm9sX3Rhc2ssCi0JCSAgKHZvaWQgKilzdWJkZXZpY2UpOwotI2Vsc2UKIAlJTklUX0RFTEFZRURfV09SSygmc3ViZGV2aWNlLT5hb19jb250cm9sX3Rhc2ssCiAJCQkgIG1lMTYwMF9hb193b3JrX2NvbnRyb2xfdGFzayk7Ci0jZW5kaWYKIAlyZXR1cm4gc3ViZGV2aWNlOwogfQogCkBAIC0yMzEsNyArMjIxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncykKIHsKIAltZTE2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMzEzLDcgKzMwMyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtNTQ1LDcgKzUzNSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC02MTIsNyArNjAyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTc1Niw3ICs3NDYsOSBAQAogCXF1ZXVlX2RlbGF5ZWRfd29yayhpbnN0YW5jZS0+bWUxNjAwX3dvcmtxdWV1ZSwKIAkJCSAgICZpbnN0YW5jZS0+YW9fY29udHJvbF90YXNrLCAxKTsKIAotCWlmICgoIWZsYWdzICYgTUVfSU9fU0lOR0xFX1RZUEVfV1JJVEVfTk9OQkxPQ0tJTkcpICYmICgoaW5zdGFuY2UtPmFvX3JlZ3Nfc2hhZG93cyktPnRyaWdnZXIgJiBpbnN0YW5jZS0+YW9faWR4KSkgewkvL0Jsb2NraW5nIG1vZGUuIFdhaXQgZm9yIHNvZnR3YXJlIHRyaWdnZXIuCisJaWYgKCghKGZsYWdzICYgTUVfSU9fU0lOR0xFX1RZUEVfV1JJVEVfTk9OQkxPQ0tJTkcpKSAmJgorCSAgICAoKGluc3RhbmNlLT5hb19yZWdzX3NoYWRvd3MpLT50cmlnZ2VyICYgaW5zdGFuY2UtPmFvX2lkeCkpIHsKKwkJLyogQmxvY2tpbmcgbW9kZS4gV2FpdCBmb3Igc29mdHdhcmUgdHJpZ2dlci4gKi8KIAkJaWYgKHRpbWVfb3V0KSB7CiAJCQlkZWxheSA9ICh0aW1lX291dCAqIEhaKSAvIDEwMDA7CiAJCQlpZiAoZGVsYXkgPT0gMCkKQEAgLTc5Myw3ICs3ODUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAltZTE2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtODA1LDcgKzc5Nyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKnR5cGUsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKnR5cGUsCiAJCQkJCSAgaW50ICpzdWJ0eXBlKQogewogCW1lMTYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC04MTgsMTQgKzgxMCwxNCBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9IE1FX0NBUFNfQU9fVFJJR19TWU5DSFJPTk9VUzsKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCB1bml0LAogCQkJCQkgICAgaW50ICptaW4sCiAJCQkJCSAgICBpbnQgKm1heCwgaW50ICptYXhkYXRhLCBpbnQgKnJhbmdlKQpAQCAtOTAzLDcgKzg5NSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBpbnQgdW5pdCwgaW50ICpjb3VudCkKIHsKIAltZTE2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtOTI4LDcgKzkyMCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgaW50IHJhbmdlLAogCQkJCSAgICAgIGludCAqdW5pdCwKIAkJCQkgICAgICBpbnQgKm1pbiwgaW50ICptYXgsIGludCAqbWF4ZGF0YSkKQEAgLTk2MCwyMiArOTUyLDE0IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi1zdGF0aWMgdm9pZCBtZTE2MDBfYW9fd29ya19jb250cm9sX3Rhc2sodm9pZCAqc3ViZGV2aWNlKQotI2Vsc2UKIHN0YXRpYyB2b2lkIG1lMTYwMF9hb193b3JrX2NvbnRyb2xfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi0jZW5kaWYKIHsKIAltZTE2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCWludCByZXNjaGVkdWxlID0gMTsKIAlpbnQgc2lnbmFsaW5nID0gMDsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQlpbnN0YW5jZSA9IChtZTE2MDBfYW9fc3ViZGV2aWNlX3QgKikgc3ViZGV2aWNlOwotI2Vsc2UKIAlpbnN0YW5jZSA9CiAJICAgIGNvbnRhaW5lcl9vZigodm9pZCAqKXdvcmssIG1lMTYwMF9hb19zdWJkZXZpY2VfdCwgYW9fY29udHJvbF90YXNrKTsKLSNlbmRpZgogCiAJUElORk8oIjwlczogJWxkPiBleGVjdXRlZC4gaWR4PSVkXG4iLCBfX2Z1bmNfXywgamlmZmllcywKIAkgICAgICBpbnN0YW5jZS0+YW9faWR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfYW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfYW8uaAppbmRleCBiODJiZjVhLi40ODI3ZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2FvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9hby5oCkBAIC05OCwxMSArOTgsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7CQkJCQkJCS8qKjwgV2FpdCBxdWV1ZSB0byBwdXQgb24gdGFza3Mgd2FpdGluZyBmb3IgZGF0YSB0byBhcnJpdmUuICovCiAJbWUxNjAwX2FvX3RpbWVvdXRfdCB0aW1lb3V0OwkJCQkJCQkvKio8IFRoZSB0aW1lb3V0IGZvciBzdGFydCBpbiBibG9ja2luZyBhbmQgbm9uLWJsb2NraW5nIG1vZGUuICovCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lMTYwMF93b3JrcXVldWU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCXN0cnVjdCB3b3JrX3N0cnVjdCBhb19jb250cm9sX3Rhc2s7Ci0jZWxzZQogCXN0cnVjdCBkZWxheWVkX3dvcmsgYW9fY29udHJvbF90YXNrOwotI2VuZGlmCiAKIAl2b2xhdGlsZSBpbnQgYW9fY29udHJvbF90YXNrX2ZsYWc7CQkJCQkJLyoqPCBGbGFnIGNvbnRyb2xpbmcgcmVleGVjdXRpbmcgb2YgY29udHJvbCB0YXNrICovCiB9IG1lMTYwMF9hb19zdWJkZXZpY2VfdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2RldmljZS5jCmluZGV4IDNiYzJjYjEuLmMyNDRlOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9kZXZpY2UuYwpAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIm1lc3ViZGV2aWNlLmgiCiAjaW5jbHVkZSAibWUxNjAwX2RldmljZS5oIgogCi1zdGF0aWMgdm9pZCBtZTE2MDBfc2V0X3JlZ2lzdHJ5KG1lMTYwMF9kZXZpY2VfdCAqIHN1YmRldmljZSwgdWludDMyX3QgcmVnX2Jhc2UpOworc3RhdGljIHZvaWQgbWUxNjAwX3NldF9yZWdpc3RyeShtZTE2MDBfZGV2aWNlX3QgKnN1YmRldmljZSwgdWludDMyX3QgcmVnX2Jhc2UpOwogc3RhdGljIHZvaWQgbWUxNjAwX2Rlc3RydWN0b3Ioc3RydWN0IG1lX2RldmljZSAqZGV2aWNlKTsKIAogLyoqCkBAIC0xNDIsNiArMTQyLDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWUxNjAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWUxNjAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIHN0YXRpYyB2b2lkIG1lMTYwMF9kZXN0cnVjdG9yKHN0cnVjdCBtZV9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTE1Nyw3ICsxNTgsNyBAQAogCWtmcmVlKG1lMTYwMF9kZXZpY2UpOwogfQogCi1zdGF0aWMgdm9pZCBtZTE2MDBfc2V0X3JlZ2lzdHJ5KG1lMTYwMF9kZXZpY2VfdCAqIHN1YmRldmljZSwgdWludDMyX3QgcmVnX2Jhc2UpCitzdGF0aWMgdm9pZCBtZTE2MDBfc2V0X3JlZ2lzdHJ5KG1lMTYwMF9kZXZpY2VfdCAqc3ViZGV2aWNlLCB1aW50MzJfdCByZWdfYmFzZSkKIHsJCQkJLy8gQ3JlYXRlIHNoYWRvdyBzdHJ1Y3R1cmUuCiAJaWYgKHN1YmRldmljZS0+YW9fcmVnc19zaGFkb3dzLmNvdW50ID49IDEpIHsKIAkJc3ViZGV2aWNlLT5hb19yZWdzX3NoYWRvd3MucmVnaXN0cnlbMF0gPQpAQCAtMjU2LDYgKzI1NywzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNRS0xNjAwIERldmljZSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLTE2MDAgRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTE2MDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYWkuYwppbmRleCAwYThjOWQ3Li5hM2NmZWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9haS5jCkBAIC0zNiw4ICszNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTU3LDEwICs1NywxMCBAQAogICovCiAKIHN0YXRpYyB2b2lkIG1lNDYwMF9haV9kZXN0cnVjdG9yKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTY4LDEyMCArNjgsMTEyIEBACiAJCQkJICAgICAgaW50IHRyaWdfY2hhbiwKIAkJCQkgICAgICBpbnQgdHJpZ190eXBlLCBpbnQgdHJpZ19lZGdlLCBpbnQgZmxhZ3MpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgICBpbnQgY291bnQsCi0JCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCByZWFkX21vZGUsCiAJCQkJICAgIGludCAqdmFsdWVzLCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJICBpbnQgdGltZV9vdXQsIGludCAqY291bnQsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IGlubGluZSBtZTQ2MDBfYWlfaW9fc3RyZWFtX3JlYWRfZ2V0X3ZhbHVlKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqCitzdGF0aWMgaW5saW5lIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3JlYWRfZ2V0X3ZhbHVlKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqCiAJCQkJCQkgICAgIGluc3RhbmNlLCBpbnQgKnZhbHVlcywKIAkJCQkJCSAgICAgY29uc3QgaW50IGNvdW50LAogCQkJCQkJICAgICBjb25zdCBpbnQgZmxhZ3MpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBzdGFydF9tb2RlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN0b3BfbW9kZSwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCB3YWl0LAogCQkJCSAgICAgIGludCAqc3RhdHVzLCBpbnQgKnZhbHVlcywgaW50IGZsYWdzKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCB1bml0LAogCQkJCQkgICAgaW50ICptaW4sCiAJCQkJCSAgICBpbnQgKm1heCwgaW50ICptYXhkYXRhLCBpbnQgKnJhbmdlKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBpbnQgdW5pdCwgaW50ICpjb3VudCk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIGludCByYW5nZSwKIAkJCQkgICAgICBpbnQgKnVuaXQsCiAJCQkJICAgICAgaW50ICptaW4sIGludCAqbWF4LCBpbnQgKm1heGRhdGEpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBpbnQgdGltZXIsCiAJCQkJIGludCAqYmFzZV9mcmVxdWVuY3ksCiAJCQkJIGxvbmcgbG9uZyAqbWluX3RpY2tzLCBsb25nIGxvbmcgKm1heF90aWNrcyk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKmNhcHMpOwogc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX2NhcHNfYXJncyhzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgICBpbnQgY2FwLCBpbnQgKmFyZ3MsIGludCBjb3VudCk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYWlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmCiAKLXN0YXRpYyBpbnQgYWlfbXV4X3RvZ2dsZXIobWU0NjAwX2FpX3N1YmRldmljZV90ICogc3ViZGV2aWNlKTsKK3N0YXRpYyBpbnQgYWlfbXV4X3RvZ2dsZXIobWU0NjAwX2FpX3N1YmRldmljZV90ICpzdWJkZXZpY2UpOwogCiAvKiogSW1taWRpYXRlIHN0b3AuCiAqIFJlc2V0IGFsbCBJUlEncyBzb3VyY2VzLiAoYmxvY2sgbGFjaGVzKQogKiBQcmVzZXJ2ZSBGSUZPCiAqLwotc3RhdGljIGludCBhaV9zdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKTsKK3N0YXRpYyBpbnQgYWlfc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKTsKIAogLyoqIEltbWlkaWF0ZSBzdG9wLgogKiBSZXNldCBhbGwgSVJRJ3Mgc291cmNlcy4gKGJsb2NrIGxhY2hlcykKICogUmVzZXQgZGF0YSBGSUZPCiAqLwotdm9pZCBpbmxpbmUgYWlfc3RvcF9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpOworaW5saW5lIHZvaWQgYWlfc3RvcF9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSk7CiAKIC8qKiBJbnRlcnJ1cHQgbG9naWNzLgogKiBSZWFkIGRhdGFzCiAqIFJlc2V0IGxhdGNoZXMKICovCi12b2lkIGFpX2xpbWl0ZWRfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBjb25zdCB1aW50MzJfdCBpcnFfc3RhdHVzLAordm9pZCBhaV9saW1pdGVkX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBjb25zdCB1aW50MzJfdCBpcnFfc3RhdHVzLAogCQkgICAgY29uc3QgdWludDMyX3QgY3RybF9zdGF0dXMpOwotdm9pZCBhaV9pbmZpbml0ZV9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UsCit2b2lkIGFpX2luZmluaXRlX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLAogCQkgICAgIGNvbnN0IHVpbnQzMl90IGlycV9zdGF0dXMsIGNvbnN0IHVpbnQzMl90IGN0cmxfc3RhdHVzKTsKIAogLyoqIExhc3QgY2h1bmNrIG9mIGRhdGFzLiBXZSBtdXN0IHJlc2NoZWR1bGUgc2FtcGxlIGNvdW50ZXIuCiAqIExlYXZpbmcgU0NfUkVMT0FEIGRvZXNuJ3QgZG8gYW55IGhhcm0sIGJ1dCBpbiBzb21lIGJhZCBjYXNlIGNhbiBtYWtlIGV4dHJhIGludGVycnVwdHMuCiAqIFdoZW4gdGhyZXNob2xkIGlzIHdyb25nbHkgc2V0IHNvbWUgSVJRIGFyZSBsb3N0LighISEpCiAqLwotdm9pZCBpbmxpbmUgYWlfcmVzY2hlZHVsZV9TQyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSk7CitpbmxpbmUgdm9pZCBhaV9yZXNjaGVkdWxlX1NDKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpOwogCiAvKiogUmVhZCBkYXRhcyBmcm9tIEZJRk8gYW5kIGNvcHkgdGhlbSB0byBidWZmZXIgKi8KLXN0YXRpYyBpbnQgaW5saW5lIGFpX3JlYWRfZGF0YShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwKK3N0YXRpYyBpbmxpbmUgaW50IGFpX3JlYWRfZGF0YShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLAogCQkJICAgICAgIGNvbnN0IGludCBjb3VudCk7CiAKIC8qKiBDb3B5IHJlc3Qgb2YgZGF0YSBmcm9tIGZpZm8gdG8gY2lyY3VsYXIgYnVmZmVyLiovCi1zdGF0aWMgaW50IGlubGluZSBhaV9yZWFkX2RhdGFfcG9vbGluZyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSk7CitzdGF0aWMgaW5saW5lIGludCBhaV9yZWFkX2RhdGFfcG9vbGluZyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKTsKIAogLyoqIFNldCBJU00gdG8gbmV4dCBzdGF0ZSBmb3IgaW5maW5pdGUgZGF0YSBhcXVzYXRpb24gbW9kZSovCi12b2lkIGlubGluZSBhaV9pbmZpbml0ZV9JU00obWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpOworaW5saW5lIHZvaWQgYWlfaW5maW5pdGVfSVNNKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpOwogCiAvKiogU2V0IElTTSB0byBuZXh0IHN0YXRlIGZvciBkZWZpbmUgYW1vdW50IG9mIGRhdGEgYXF1c2F0aW9uIG1vZGUqLwotdm9pZCBpbmxpbmUgYWlfbGltaXRlZF9JU00obWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UsCitpbmxpbmUgdm9pZCBhaV9saW1pdGVkX0lTTShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLAogCQkJICAgdWludDMyX3QgaXJxX3N0YXR1cyk7CiAKIC8qKiBTZXQgSVNNIHRvIG5leHQgc3RhZ2UgZm9yIGxpbWl0ZWQgbW9kZSAqLwotdm9pZCBpbmxpbmUgYWlfZGF0YV9hY3F1aXNpdGlvbl9sb2dpYyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSk7CitpbmxpbmUgdm9pZCBhaV9kYXRhX2FjcXVpc2l0aW9uX2xvZ2ljKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotc3RhdGljIHZvaWQgbWU0NjAwX2FpX3dvcmtfY29udHJvbF90YXNrKHZvaWQgKnN1YmRldmljZSk7Ci0jZWxzZQogc3RhdGljIHZvaWQgbWU0NjAwX2FpX3dvcmtfY29udHJvbF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0jZW5kaWYKIAogLyogRGVmaW5pdGlvbnMKICAqLwpAQCAtMTkyLDcgKzE4NCw3IEBACiAJCQkJCSAgICAgaW50IGlzb2xhdGVkLAogCQkJCQkgICAgIGludCBzaCwKIAkJCQkJICAgICBpbnQgaXJxLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrLAorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2ssCiAJCQkJCSAgICAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lNDYwMF93cSkKIHsKIAltZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKQEAgLTM2MCwxMyArMzUyLDggQEAKIAlzdWJkZXZpY2UtPm1lNDYwMF93b3JrcXVldWUgPSBtZTQ2MDBfd3E7CiAKIC8qIHdvcmtxdWV1ZSBBUEkgY2hhbmdlZCBpbiBrZXJuZWwgMi42LjIwICovCi0jaWYgKCBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApICkKLQlJTklUX1dPUksoJnN1YmRldmljZS0+YWlfY29udHJvbF90YXNrLCBtZTQ2MDBfYWlfd29ya19jb250cm9sX3Rhc2ssCi0JCSAgKHZvaWQgKilzdWJkZXZpY2UpOwotI2Vsc2UKIAlJTklUX0RFTEFZRURfV09SSygmc3ViZGV2aWNlLT5haV9jb250cm9sX3Rhc2ssCiAJCQkgIG1lNDYwMF9haV93b3JrX2NvbnRyb2xfdGFzayk7Ci0jZW5kaWYKIAogCXJldHVybiBzdWJkZXZpY2U7CiB9CkBAIC0zOTcsNyArMzg0LDcgQEAKIAlrZnJlZShpbnN0YW5jZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncykKIHsKIAltZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtNTE5LDcgKzUwNiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC03MDksNyArNjk2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtOTE1LDExICs5MDIsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICAgIGludCBjb3VudCwKLQkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncykKIHsKIAltZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMTU4NiwxNSArMTU3MywxNSBAQAogCQkgICAgTUVfU0lOR0xFX0NIQU5ORUxfTk9UX0NPTkZJR1VSRUQ7CiAJfQogCi0gICAgICBWRVJJRllfRVJST1I6CQkvLyBFcnJvciBpbiBjb2RlLiBXcm9uZyBzZXR0aW5nIGNoZWNrLiBUaGlzIHNob3VsZCBuZXZlciBldmVyIGhhcHBlbmQhCitWRVJJRllfRVJST1I6CQkvLyBFcnJvciBpbiBjb2RlLiBXcm9uZyBzZXR0aW5nIGNoZWNrLiBUaGlzIHNob3VsZCBuZXZlciBldmVyIGhhcHBlbmQhCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPnN1YmRldmljZV9sb2NrLCBjcHVfZmxhZ3MpOwotICAgICAgRVJST1I6CQkJLy8gRXJyb3IgaW4gc2V0dGluZ3MuCitFUlJPUjoJCQkvLyBFcnJvciBpbiBzZXR0aW5ncy4KIAlNRV9TVUJERVZJQ0VfRVhJVDsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSAgaW50IHRpbWVfb3V0LCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCiB7CkBAIC0xNjc3LDcgKzE2NjQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lNDYwMF9haV9pb19zdHJlYW1fcmVhZF9nZXRfdmFsdWUobWU0NjAwX2FpX3N1YmRldmljZV90ICoKK3N0YXRpYyBpbmxpbmUgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fcmVhZF9nZXRfdmFsdWUobWU0NjAwX2FpX3N1YmRldmljZV90ICoKIAkJCQkJCSAgICAgaW5zdGFuY2UsIGludCAqdmFsdWVzLAogCQkJCQkJICAgICBjb25zdCBpbnQgY291bnQsCiAJCQkJCQkgICAgIGNvbnN0IGludCBmbGFncykKQEAgLTE3MTIsNyArMTY5OSw3IEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgcmVhZF9tb2RlLAogCQkJCSAgICBpbnQgKnZhbHVlcywgaW50ICpjb3VudCwgaW50IGZsYWdzKQpAQCAtMTgzOCw3ICsxODI1LDcgQEAKICogQHBhcmFtIGluc3RhbmNlIFRoZSBzdWJkZXZpY2UgaW5zdGFuY2UgKHBvaW50ZXIpLgogKi8KIAotc3RhdGljIGludCBhaV9zdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQorc3RhdGljIGludCBhaV9zdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBjcHVfZmxhZ3MgPSAwOwogCXZvbGF0aWxlIHVpbnQzMl90IGN0cmw7CkBAIC0xODc3LDcgKzE4NjQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBzdGFydF9tb2RlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKIHsKQEAgLTIwNTUsMTMgKzIwNDIsMTMgQEAKIAkgICAgICAodG1wICYgTUU0NjAwX0FJX0NUUkxfQklUX1NDX0lSUV9SRVNFVCkgPyAicmVzZXQiIDogIndvcmsiKTsKICNlbmRpZgogCi0gICAgICBFUlJPUjoKK0VSUk9SOgogCU1FX1NVQkRFVklDRV9FWElUOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHdhaXQsCiAJCQkJICAgICAgaW50ICpzdGF0dXMsIGludCAqdmFsdWVzLCBpbnQgZmxhZ3MpCkBAIC0yMTM5LDcgKzIxMjYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3RvcF9tb2RlLCBpbnQgZmxhZ3MpCiB7CkBAIC0yMjM2LDcgKzIyMjMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgdW5pdCwKIAkJCQkJICAgIGludCAqbWluLAogCQkJCQkgICAgaW50ICptYXgsIGludCAqbWF4ZGF0YSwgaW50ICpyYW5nZSkKQEAgLTIyODgsNyArMjI3NSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBpbnQgdW5pdCwgaW50ICpjb3VudCkKIHsKIAltZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMjMwNiw3ICsyMjkzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBpbnQgcmFuZ2UsCiAJCQkJICAgICAgaW50ICp1bml0LAogCQkJCSAgICAgIGludCAqbWluLCBpbnQgKm1heCwgaW50ICptYXhkYXRhKQpAQCAtMjMzMCw3ICsyMzE3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBpbnQgdGltZXIsCiAJCQkJIGludCAqYmFzZV9mcmVxdWVuY3ksCiAJCQkJIGxvbmcgbG9uZyAqbWluX3RpY2tzLCBsb25nIGxvbmcgKm1heF90aWNrcykKQEAgLTIzNzAsNyArMjM1Nyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAltZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMjM4Myw3ICsyMzcwLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuIGlkeD0wXG4iKTsKQEAgLTIzOTQsNyArMjM4MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC4gaWR4PTBcbiIpOwogCkBAIC0yNDM5LDcgKzI0MjYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgYWlfbGltaXRlZF9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGNvbnN0IHVpbnQzMl90IGlycV9zdGF0dXMsCit2b2lkIGFpX2xpbWl0ZWRfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGNvbnN0IHVpbnQzMl90IGlycV9zdGF0dXMsCiAJCSAgICBjb25zdCB1aW50MzJfdCBjdHJsX3N0YXR1cykKIHsKIAlpbnQgdG9fcmVhZDsKQEAgLTI1NDcsNyArMjUzNCw3IEBACiAJfQogfQogCi12b2lkIGFpX2luZmluaXRlX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwKK3ZvaWQgYWlfaW5maW5pdGVfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsCiAJCSAgICAgY29uc3QgdWludDMyX3QgaXJxX3N0YXR1cywgY29uc3QgdWludDMyX3QgY3RybF9zdGF0dXMpCiB7CiAJaW50IHRvX3JlYWQ7CkBAIC0yNjAzLDExICsyNTkwLDcgQEAKIAl9CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9haV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCXVpbnQzMl90IGlycV9zdGF0dXM7CiAJdWludDMyX3QgY3RybF9zdGF0dXM7CkBAIC0yODAzLDcgKzI3ODYsNyBAQAogKgogKiBAcGFyYW0gaW5zdGFuY2UgVGhlIHN1YmRldmljZSBpbnN0YW5jZSAocG9pbnRlcikuCiAqLwotdm9pZCBpbmxpbmUgYWlfc3RvcF9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitpbmxpbmUgdm9pZCBhaV9zdG9wX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyBzb2Z0IHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJcmVnaXN0ZXIgdWludDMyX3QgdG1wOwogCkBAIC0yODI5LDcgKzI4MTIsNyBAQAogKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IE51bWJlciBvZiBjb3BpZWQgdmFsdWVzLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fUklOR19CVUZGRVJfT1ZFUkZMT1cuCiAqLwotc3RhdGljIGludCBpbmxpbmUgYWlfcmVhZF9kYXRhKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLAorc3RhdGljIGlubGluZSBpbnQgYWlfcmVhZF9kYXRhKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsCiAJCQkgICAgICAgY29uc3QgaW50IGNvdW50KQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCWludCBjID0gY291bnQ7CkBAIC0yODc1LDcgKzI4NTgsNyBAQAogCXJldHVybiBjb3BpZWQ7CiB9CiAKLXZvaWQgaW5saW5lIGFpX2luZmluaXRlX0lTTShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK2lubGluZSB2b2lkIGFpX2luZmluaXRlX0lTTShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCXJlZ2lzdGVyIHZvbGF0aWxlIHVpbnQzMl90IGN0cmxfc2V0LCBjdHJsX3Jlc2V0LCB0bXA7CiAKQEAgLTI5MjUsNyArMjkwOCw3IEBACiAKIH0KIAotdm9pZCBpbmxpbmUgYWlfbGltaXRlZF9JU00obWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UsCitpbmxpbmUgdm9pZCBhaV9saW1pdGVkX0lTTShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLAogCQkJICAgdWludDMyX3QgaXJxX3N0YXR1cykKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAlyZWdpc3RlciB2b2xhdGlsZSB1aW50MzJfdCBjdHJsX3NldCwgY3RybF9yZXNldCA9IDB4RkZGRkZGRkYsIHRtcDsKQEAgLTI5ODYsNyArMjk2OSw3IEBACiAqCUxlYXZpbmcgU0NfUkVMT0FEIGRvZXNuJ3QgZG8gYW55IGhhcm0sIGJ1dCBpbiBzb21lIGJhZCBjYXNlIGNhbiBtYWtlIGV4dHJhIGludGVycnVwdHMuCiAqCUB3YXJuaW5nIFdoZW4gdGhyZXNob2xkIGlzIHdyb25nbHkgc2V0IHNvbWUgSVJRIGFyZSBsb3N0LighISEpCiAqLwotdm9pZCBpbmxpbmUgYWlfcmVzY2hlZHVsZV9TQyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK2lubGluZSB2b2lkIGFpX3Jlc2NoZWR1bGVfU0MobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsKIAlyZWdpc3RlciB1aW50MzJfdCByZXN0OwogCkBAIC0zMDE4LDcgKzMwMDEsNyBAQAogfQogCiAvKiogU3RhcnQgdGhlIElTTS4gQWxsIG11c3QgYmUgcmVzZXRlZCBiZWZvcmUgZW50ZXIgdG8gdGhpcyBmdW5jdGlvbi4gKi8KLXZvaWQgaW5saW5lIGFpX2RhdGFfYWNxdWlzaXRpb25fbG9naWMobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitpbmxpbmUgdm9pZCBhaV9kYXRhX2FjcXVpc2l0aW9uX2xvZ2ljKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CiAJcmVnaXN0ZXIgdWludDMyX3QgdG1wOwogCkBAIC0zMTY2LDcgKzMxNDksNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBhaV9tdXhfdG9nZ2xlcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK3N0YXRpYyBpbnQgYWlfbXV4X3RvZ2dsZXIobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsKIAl1aW50MzJfdCB0bXA7CiAKQEAgLTMyNzYsNyArMzI1OSw3IEBACiAqIEByZXR1cm4gT24gc3VjY2VzczogTnVtYmVyIG9mIGNvcGllZCB2YWx1ZXMuCiAqIEByZXR1cm4gT24gZXJyb3I6IE5lZ2F0aXZlIGVycm9yIGNvZGUgLU1FX0VSUk5PX1JJTkdfQlVGRkVSX09WRVJGTE9XLgogKi8KLXN0YXRpYyBpbnQgaW5saW5lIGFpX3JlYWRfZGF0YV9wb29saW5nKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQorc3RhdGljIGlubGluZSBpbnQgYWlfcmVhZF9kYXRhX3Bvb2xpbmcobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAlpbnQgZW1wdHlfc3BhY2U7CiAJaW50IGNvcGllZCA9IDA7CkBAIC0zMzEwLDExICszMjkzLDcgQEAKIAlyZXR1cm4gKCFzdGF0dXMpID8gY29waWVkIDogLU1FX0VSUk5PX1JJTkdfQlVGRkVSX09WRVJGTE9XOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotc3RhdGljIHZvaWQgbWU0NjAwX2FpX3dvcmtfY29udHJvbF90YXNrKHZvaWQgKnN1YmRldmljZSkKLSNlbHNlCiBzdGF0aWMgdm9pZCBtZTQ2MDBfYWlfd29ya19jb250cm9sX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotI2VuZGlmCiB7CiAJbWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0zMzIzLDEyICszMzAyLDggQEAKIAlpbnQgcmVzY2hlZHVsZSA9IDA7CiAJaW50IHNpZ25hbGluZyA9IDA7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0JaW5zdGFuY2UgPSAobWU0NjAwX2FpX3N1YmRldmljZV90ICopIHN1YmRldmljZTsKLSNlbHNlCiAJaW5zdGFuY2UgPQogCSAgICBjb250YWluZXJfb2YoKHZvaWQgKil3b3JrLCBtZTQ2MDBfYWlfc3ViZGV2aWNlX3QsIGFpX2NvbnRyb2xfdGFzayk7Ci0jZW5kaWYKIAlQSU5GTygiPCVzOiAlbGQ+IGV4ZWN1dGVkLlxuIiwgX19mdW5jX18sIGppZmZpZXMpOwogCiAJc3RhdHVzID0gaW5sKGluc3RhbmNlLT5zdGF0dXNfcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYWkuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYWkuaAppbmRleCAxZDVhMWI5Li4xMDZlMTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9haS5oCkBAIC0xMzksMTEgKzEzOSw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xdWV1ZTsJCQkJCS8qKjwgV2FpdCBxdWV1ZSB0byBwdXQgb24gdGFza3Mgd2FpdGluZyBmb3IgZGF0YSB0byBhcnJpdmUuICovCiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWU0NjAwX3dvcmtxdWV1ZTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0Jc3RydWN0IHdvcmtfc3RydWN0IGFpX2NvbnRyb2xfdGFzazsKLSNlbHNlCiAJc3RydWN0IGRlbGF5ZWRfd29yayBhaV9jb250cm9sX3Rhc2s7Ci0jZW5kaWYKIAogCXZvbGF0aWxlIGludCBhaV9jb250cm9sX3Rhc2tfZmxhZzsJCQkJLyoqPCBGbGFnIGNvbnRyb2xpbmcgcmVleGVjdXRpbmcgb2YgY29udHJvbCB0YXNrICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYW8uYwppbmRleCBlMmJlYzgyLi5lYjQ3MjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9hby5jCkBAIC0zOCw4ICszOCw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNTgsMzEgKzU4LDMxIEBACiAvKiBEZWZpbmVzCiAgKi8KIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCB1bml0LAogCQkJCQkgICAgaW50ICptaW4sCiAJCQkJCSAgICBpbnQgKm1heCwgaW50ICptYXhkYXRhLCBpbnQgKnJhbmdlKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIGludCB1bml0LCBpbnQgKmNvdW50KTsKIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBpbnQgcmFuZ2UsCiAJCQkJICAgICAgaW50ICp1bml0LAogCQkJCSAgICAgIGludCAqbWluLCBpbnQgKm1heCwgaW50ICptYXhkYXRhKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBpbnQgdGltZXIsCiAJCQkJIGludCAqYmFzZV9mcmVxdWVuY3ksCiAJCQkJIGxvbmcgbG9uZyAqbWluX3RpY2tzLCBsb25nIGxvbmcgKm1heF90aWNrcyk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcik7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKmNhcHMpOwogCiBzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2Fwc19hcmdzKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSwKQEAgLTEwNSwxMiArMTA1LDEyIEBACiAKIC8qKiBSZXNldCBzdWJkZXZpY2UuIFN0b3AgYWxsIGFjdGlvbnMuIFJlc2V0IHJlZ2lzdHJ5LiBEaXNhYmxlIEZJRk8uIFNldCBvdXRwdXQgdG8gMFYgYW5kIHN0YXR1cyB0byAnbm9uZScuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKTsKIAogLyoqIFNldCBvdXRwdXQgYXMgc2luZ2xlCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xMjAsMTAzICsxMjAsOTMgQEAKIAogLyoqIFBhc3MgdG8gdXNlciBhY3R1YWwgdmFsdWUgb2Ygb3V0cHV0LgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwogCiAvKiogV3JpdGUgdG8gb3V0cHV0IHJlcXVlZCB2YWx1ZS4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7CiAKIC8qKiBTZXQgb3V0cHV0IGFzIHN0cmVhbWVkIGRldmljZS4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICAgIGludCBjb3VudCwKLQkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncyk7CiAKIC8qKiBXYWl0IGZvciAvIENoZWNrIGVtcHR5IHNwYWNlIGluIGJ1ZmZlci4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgIGludCB0aW1lX291dCwgaW50ICpjb3VudCwgaW50IGZsYWdzKTsKIAogLyoqIFN0YXJ0IHN0cmVhbWluZy4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBzdGFydF9tb2RlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7CiAKIC8qKiBDaGVjayBhY3R1YWwgc3RhdGUuIC8gV2FpdCBmb3IgZW5kLgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCB3YWl0LAogCQkJCSAgICAgIGludCAqc3RhdHVzLCBpbnQgKnZhbHVlcywgaW50IGZsYWdzKTsKIAogLyoqIFN0b3Agc3RyZWFtaW5nLgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3RvcF9tb2RlLCBpbnQgZmxhZ3MpOwogCiAvKiogV3JpdGUgZGF0YXMgdG8gYnVmZm9yLgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHdyaXRlX21vZGUsCiAJCQkJICAgICBpbnQgKnZhbHVlcywgaW50ICpjb3VudCwgaW50IGZsYWdzKTsKIAogLyoqIEludGVycnVwdCBoYW5kbGVyLiBDb3B5IGZyb20gYnVmZmVyIHRvIEZJRk8uCiAqLwotc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCi0JCQkJICwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MKLSNlbmRpZgotICAgICk7CitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogLyoqIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIGJ1ZmZlciB0byBmaWZvIChmYXN0KSBpbiB3cmFwYXJvdW5kIG1vZGUuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhX3dyYXBhcm91bmQobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YV93cmFwYXJvdW5kKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgICAgaW50IHN0YXJ0X3Bvcyk7CiAKIC8qKiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIgdG8gZmlmbyAoZmFzdCkuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGEobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJIGludCBzdGFydF9wb3MpOwogCiAvKiogQ29weSBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyIHRvIGZpZm8gKHNsb3cpLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YV9wb29saW5nKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGFfcG9vbGluZyhtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJIGludCBzdGFydF9wb3MpOwogCiAvKiogQ29weSBkYXRhIGZyb20gdXNlciBzcGFjZSB0byBjaXJjdWxhciBidWZmZXIuCiAqLwotaW50IGlubGluZSBhb19nZXRfZGF0YV9mcm9tX3VzZXIobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fZ2V0X2RhdGFfZnJvbV91c2VyKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgaW50ICp1c2VyX3ZhbHVlcyk7CiAKIC8qKiBTdG9wIHByZXNlbnRhdGlvbi4gUHJlc2VydmUgRklGT3MuCiAqLwotaW50IGlubGluZSBhb19zdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlKTsKK2lubGluZSBpbnQgYW9fc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlKTsKIAogLyoqIFRhc2sgZm9yIGFzeW5jaHJvbmljYWwgc3RhdGUgdmVyaWZ5aW5nLgogKi8KLXN0YXRpYyB2b2lkIG1lNDYwMF9hb193b3JrX2NvbnRyb2xfdGFzaygKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0JCQkJCSAgICAgICB2b2lkICpzdWJkZXZpY2UKLSNlbHNlCi0JCQkJCSAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsKLSNlbmRpZgotICAgICk7CitzdGF0aWMgdm9pZCBtZTQ2MDBfYW9fd29ya19jb250cm9sX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIC8qIEZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncykKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMjkwLDcgKzI4MCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC00NjMsNyArNDUzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtNTQ3LDcgKzUzNyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC05ODksMTEgKzk3OSwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgICAgaW50IGNvdW50LAotCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0xMDI1LDcgKzEwMTUsNyBAQAogCX0KIAogCWlmIChmbGFncyAmIE1FX0lPX1NUUkVBTV9DT05GSUdfSEFSRFdBUkVfT05MWSkgewotCQlpZiAoIWZsYWdzICYgTUVfSU9fU1RSRUFNX0NPTkZJR19XUkFQQVJPVU5EKSB7CisJCWlmICghKGZsYWdzICYgTUVfSU9fU1RSRUFNX0NPTkZJR19XUkFQQVJPVU5EKSkgewogCQkJUEVSUk9SCiAJCQkgICAgKCJIYXJkd2FyZSBNRV9JT19TVFJFQU1fQ09ORklHX0hBUkRXQVJFX09OTFkgaGFzIHRvIGJlIHdpdGggTUVfSU9fU1RSRUFNX0NPTkZJR19XUkFQQVJPVU5ELlxuIik7CiAJCQlyZXR1cm4gTUVfRVJSTk9fSU5WQUxJRF9GTEFHUzsKQEAgLTEzMjcsNyArMTMxNyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJICBpbnQgdGltZV9vdXQsIGludCAqY291bnQsIGludCBmbGFncykKIHsKQEAgLTE0MDgsNyArMTM5OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgc3RhcnRfbW9kZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCiB7CkBAIC0xODQ1LDcgKzE4MzUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCB3YWl0LAogCQkJCSAgICAgIGludCAqc3RhdHVzLCBpbnQgKnZhbHVlcywgaW50IGZsYWdzKQpAQCAtMTk0Myw3ICsxOTMzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN0b3BfbW9kZSwgaW50IGZsYWdzKQogewkJCQkvLyBTdG9wIHdvcmsgYW5kIGVtcHR5IGJ1ZmZlciBhbmQgRklGTwpAQCAtMjA0OCw3ICsyMDM4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCB3cml0ZV9tb2RlLAogCQkJCSAgICAgaW50ICp2YWx1ZXMsIGludCAqY291bnQsIGludCBmbGFncykKQEAgLTIyNzIsMTEgKzIyNjIsNyBAQAogCiAJcmV0dXJuIGVycjsKIH0KLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQotCQkJCSAsIHN0cnVjdCBwdF9yZWdzICpyZWdzCi0jZW5kaWYKLSAgICApCitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSA9IGRldl9pZDsKIAl1aW50MzJfdCBpcnFfc3RhdHVzOwpAQCAtMjQ5OCw4ICsyNDg0LDggQEAKIH0KIAogbWU0NjAwX2FvX3N1YmRldmljZV90ICptZTQ2MDBfYW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIHByZWxvYWRfcmVnX2xvY2ssCi0JCQkJCSAgICAgdWludDMyX3QgKiBwcmVsb2FkX2ZsYWdzLAorCQkJCQkgICAgIHNwaW5sb2NrX3QgKnByZWxvYWRfcmVnX2xvY2ssCisJCQkJCSAgICAgdWludDMyX3QgKnByZWxvYWRfZmxhZ3MsCiAJCQkJCSAgICAgaW50IGFvX2lkeCwKIAkJCQkJICAgICBpbnQgZmlmbywKIAkJCQkJICAgICBpbnQgaXJxLApAQCAtMjY4OSwxMyArMjY3NSw4IEBACiAJc3ViZGV2aWNlLT5tZTQ2MDBfd29ya3F1ZXVlID0gbWU0NjAwX3dxOwogCiAvKiB3b3JrcXVldWUgQVBJIGNoYW5nZWQgaW4ga2VybmVsIDIuNi4yMCAqLwotI2lmICggTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSApCi0JSU5JVF9XT1JLKCZzdWJkZXZpY2UtPmFvX2NvbnRyb2xfdGFzaywgbWU0NjAwX2FvX3dvcmtfY29udHJvbF90YXNrLAotCQkgICh2b2lkICopc3ViZGV2aWNlKTsKLSNlbHNlCiAJSU5JVF9ERUxBWUVEX1dPUksoJnN1YmRldmljZS0+YW9fY29udHJvbF90YXNrLAogCQkJICBtZTQ2MDBfYW9fd29ya19jb250cm9sX3Rhc2spOwotI2VuZGlmCiAKIAlpZiAoc3ViZGV2aWNlLT5maWZvKSB7CS8vIFNldCBzcGVlZCBmb3Igc2luZ2xlIG9wZXJhdGlvbnMuCiAJCW91dGwoTUU0NjAwX0FPX01JTl9DSEFOX1RJQ0tTIC0gMSwgc3ViZGV2aWNlLT50aW1lcl9yZWcpOwpAQCAtMjcwOSw3ICsyNjkwLDcgQEAKICoKICogQHBhcmFtIGluc3RhbmNlIFRoZSBzdWJkZXZpY2UgaW5zdGFuY2UgKHBvaW50ZXIpLgogKi8KLWludCBpbmxpbmUgYW9fc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK2lubGluZSBpbnQgYW9fc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewogCXVuc2lnbmVkIGxvbmcgY3B1X2ZsYWdzOwogCXVpbnQzMl90IGN0cmw7CkBAIC0yNzYyLDcgKzI3NDMsNyBAQAogKiBAcmV0dXJuIE9uIGVycm9yL3N1Y2Nlc3M6IDAuCU5vIGRhdGFzIHdlcmUgY29waWVkID0+IG5vIGRhdGEgaW4gYnVmZmVyLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fRklGT19CVUZGRVJfT1ZFUkZMT1cuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhX3dyYXBhcm91bmQobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YV93cmFwYXJvdW5kKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgICAgaW50IHN0YXJ0X3BvcykKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0yODI3LDcgKzI4MDgsNyBAQAogKiBAcmV0dXJuIE9uIGVycm9yL3N1Y2Nlc3M6IDAuCU5vIGRhdGFzIHdlcmUgY29waWVkID0+IG5vIGRhdGEgaW4gYnVmZmVyLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fRklGT19CVUZGRVJfT1ZFUkZMT1cuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGEobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJIGludCBzdGFydF9wb3MpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtMjg5Nyw3ICsyODc4LDcgQEAKICogQHJldHVybiBPbiBlcnJvci9zdWNjZXNzOiAwLglGSUZPIHdhcyBmdWxsIGF0IGJlZ2luaW5nLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fUklOR19CVUZGRVJfVU5ERUZGTE9XLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YV9wb29saW5nKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGFfcG9vbGluZyhtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJIGludCBzdGFydF9wb3MpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHNsb3cgZnVuY3Rpb24hCiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtMjk1NSw3ICsyOTM2LDcgQEAKICogQHJldHVybiBPbiBzdWNjZXNzOiBOdW1iZXIgb2YgY29waWVkIHZhbHVlcy4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX0lOVEVSTkFMLgogKi8KLWludCBpbmxpbmUgYW9fZ2V0X2RhdGFfZnJvbV91c2VyKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX2dldF9kYXRhX2Zyb21fdXNlcihtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJIGludCAqdXNlcl92YWx1ZXMpCiB7CiAJaW50IGksIGVycjsKQEAgLTI5ODcsMTMgKzI5NjgsNyBAQAogLyoqIEBicmllZiBDaGVja2luZyBhY3R1YWwgaGFyZHdhcmUgYW5kIGxvZ2ljYWwgc3RhdGUuCiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgc3ViZGV2aWNlIGluc3RhbmNlIChwb2ludGVyKS4KICovCi1zdGF0aWMgdm9pZCBtZTQ2MDBfYW9fd29ya19jb250cm9sX3Rhc2soCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCQkJCQkgICAgICAgdm9pZCAqc3ViZGV2aWNlCi0jZWxzZQotCQkJCQkgICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrCi0jZW5kaWYKLSAgICApCitzdGF0aWMgdm9pZCBtZTQ2MDBfYW9fd29ya19jb250cm9sX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdW5zaWduZWQgbG9uZyBjcHVfZmxhZ3MgPSAwOwpAQCAtMzAwMywxMiArMjk3OCw4IEBACiAJaW50IHJlc2NoZWR1bGUgPSAwOwogCWludCBzaWduYWxpbmcgPSAwOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCWluc3RhbmNlID0gKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqKSBzdWJkZXZpY2U7Ci0jZWxzZQogCWluc3RhbmNlID0KIAkgICAgY29udGFpbmVyX29mKCh2b2lkICopd29yaywgbWU0NjAwX2FvX3N1YmRldmljZV90LCBhb19jb250cm9sX3Rhc2spOwotI2VuZGlmCiAJUElORk8oIjwlczogJWxkPiBleGVjdXRlZC4gaWR4PSVkXG4iLCBfX2Z1bmNfXywgamlmZmllcywKIAkgICAgICBpbnN0YW5jZS0+YW9faWR4KTsKIApAQCAtMzMyMyw3ICszMjk0LDcgQEAKICNlbHNlCiAvLy8gQG5vdGUgU1BFQ0lBTCBCVUlMRCBGT1IgQk9TQ0gKIC8vLyBAYXV0aG9yIEd1ZW50ZXIgR2ViaGFyZHQKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncykKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMzM2NSw3ICszMzM2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTM2MzYsNyArMzYwNyw3IEBACiAJCWdvdG8gRVJST1I7CiAJfQogCi0gICAgICBFUlJPUjoKK0VSUk9SOgogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPnN1YmRldmljZV9sb2NrLCBjcHVfZmxhZ3MpOwogCkBAIC0zNjQ1LDcgKzM2MTYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0zNjgyLDcgKzM2NTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMzgzMCwxOCArMzgwMSwxOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+c3ViZGV2aWNlX2xvY2ssIGNwdV9mbGFncyk7CiAJfQogCi0gICAgICBFUlJPUjoKK0VSUk9SOgogCiAJTUVfU1VCREVWSUNFX0VYSVQ7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICAgIGludCBjb3VudCwKLQkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncykKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtNDE1MCw3ICs0MTIxLDcgQEAKIAlQREVCVUcoIkN0cmwgd29yZCA9IDB4JWxYLlxuIiwgY3RybCk7CiAJb3V0bChjdHJsLCBpbnN0YW5jZS0+Y3RybF9yZWcpOwkvLyBXcml0ZSB0aGUgY29udHJvbCB3b3JkCiAKLSAgICAgIEVSUk9SOgorRVJST1I6CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+c3ViZGV2aWNlX2xvY2ssIGNwdV9mbGFncyk7CiAKQEAgLTQxNTksNyArNDEzMCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJICBpbnQgdGltZV9vdXQsIGludCAqY291bnQsIGludCBmbGFncykKIHsKQEAgLTQyMzgsNyArNDIwOSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK3N0YXRpYyB2b2lkIHN0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsKIAl1bnNpZ25lZCBsb25nIGNwdV9mbGFnczsKIAl1aW50MzJfdCB0bXA7CkBAIC00MjUzLDcgKzQyMjQsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5zdWJkZXZpY2VfbG9jaywgY3B1X2ZsYWdzKTsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgc3RhcnRfbW9kZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCiB7CkBAIC00Nzc4LDE0ICs0NzQ5LDE0IEBACiAJCWdvdG8gRVJST1I7CiAJfQogCi0gICAgICBFUlJPUjoKK0VSUk9SOgogCiAJTUVfU1VCREVWSUNFX0VYSVQ7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgd2FpdCwKIAkJCQkgICAgICBpbnQgKnN0YXR1cywgaW50ICp2YWx1ZXMsIGludCBmbGFncykKQEAgLTQ4NDIsMTQgKzQ4MTMsMTQgQEAKIAkJZ290byBFUlJPUjsKIAl9CiAKLSAgICAgIEVSUk9SOgorRVJST1I6CiAKIAlNRV9TVUJERVZJQ0VfRVhJVDsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3RvcF9tb2RlLCBpbnQgZmxhZ3MpCiB7CkBAIC00ODkxLDE0ICs0ODYyLDE0IEBACiAJCWdvdG8gRVJST1I7CiAJfQogCi0gICAgICBFUlJPUjoKK0VSUk9SOgogCiAJTUVfU1VCREVWSUNFX0VYSVQ7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCB3cml0ZV9tb2RlLAogCQkJCSAgICAgaW50ICp2YWx1ZXMsIGludCAqY291bnQsIGludCBmbGFncykKQEAgLTU0MzIsMTggKzU0MDMsMTQgQEAKIAkJZ290byBFUlJPUjsKIAl9CiAKLSAgICAgIEVSUk9SOgorRVJST1I6CiAKIAlNRV9TVUJERVZJQ0VfRVhJVDsKIAogCXJldHVybiBlcnI7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWludCB2YWx1ZTsKQEAgLTU2NjAsOCArNTYyNyw4IEBACiB9CiAKIG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqbWU0NjAwX2FvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBwcmVsb2FkX3JlZ19sb2NrLAotCQkJCQkgICAgIHVpbnQzMl90ICogcHJlbG9hZF9mbGFncywKKwkJCQkJICAgICBzcGlubG9ja190ICpwcmVsb2FkX3JlZ19sb2NrLAorCQkJCQkgICAgIHVpbnQzMl90ICpwcmVsb2FkX2ZsYWdzLAogCQkJCQkgICAgIGludCBhb19pZHgsIGludCBmaWZvLCBpbnQgaXJxKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwpAQCAtNTgyMyw3ICs1NzkwLDcgQEAKIC8qIENvbW1vbiBmdW5jdGlvbnMKICovCiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgdW5pdCwKIAkJCQkJICAgIGludCAqbWluLAogCQkJCQkgICAgaW50ICptYXgsIGludCAqbWF4ZGF0YSwgaW50ICpyYW5nZSkKQEAgLTU4NTgsNyArNTgyNSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBpbnQgdW5pdCwgaW50ICpjb3VudCkKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtNTg3Niw3ICs1ODQzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBpbnQgcmFuZ2UsCiAJCQkJICAgICAgaW50ICp1bml0LAogCQkJCSAgICAgIGludCAqbWluLCBpbnQgKm1heCwgaW50ICptYXhkYXRhKQpAQCAtNTkwMCw3ICs1ODY3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBpbnQgdGltZXIsCiAJCQkJIGludCAqYmFzZV9mcmVxdWVuY3ksCiAJCQkJIGxvbmcgbG9uZyAqbWluX3RpY2tzLCBsb25nIGxvbmcgKm1heF90aWNrcykKQEAgLTU5MzQsNyArNTkwMSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtNTk0Nyw3ICs1OTE0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC01OTYyLDcgKzU5MjksNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJaW5zdGFuY2UgPSAobWU0NjAwX2FvX3N1YmRldmljZV90ICopIHN1YmRldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYW8uaAppbmRleCA2ZmJjNGEyLi43NTc5NDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9hby5oCkBAIC0yMjUsMTEgKzIyNSw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xdWV1ZTsJCQkJLyoqPCBXYWl0IHF1ZXVlIHRvIHB1dCBvbiB0YXNrcyB3YWl0aW5nIGZvciBkYXRhIHRvIGFycml2ZS4gKi8KIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptZTQ2MDBfd29ya3F1ZXVlOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYW9fY29udHJvbF90YXNrOwotI2Vsc2UKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGFvX2NvbnRyb2xfdGFzazsKLSNlbmRpZgogCiAJdm9sYXRpbGUgaW50IGFvX2NvbnRyb2xfdGFza19mbGFnOwkJCS8qKjwgRmxhZyBjb250cm9saW5nIHJlZXhlY3V0aW5nIG9mIGNvbnRyb2wgdGFzayAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kZXZpY2UuYwppbmRleCBmYTQ1NTg0Li40NTc2NjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGV2aWNlLmMKQEAgLTMzNiw2ICszMzYsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTQ2MDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTQ2MDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTM2OCw2ICszNjksMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTUUtNDZ4eCBEZXZpY2VzIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtNDZ4eCBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lNDYwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kaS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kaS5jCmluZGV4IDdlM2M5ZjQuLmUxMDdlNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RpLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtOTEsNyArOTEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTEzMyw3ICsxMzMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU0NjAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPSAwOwpAQCAtMjAyLDcgKzIwMiw3IEBACiB9CiAKIG1lNDYwMF9kaV9zdWJkZXZpY2VfdCAqbWU0NjAwX2RpX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWU0NjAwX2RpX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2Rpby5jCmluZGV4IDBhZjk1ZDEuLmJhYTI4ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC05NCw3ICs5NCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2Rpb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0zNDIsNyArMzQyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtNDI1LDcgKzQyNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2Rpb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNDUyLDcgKzQ1Miw3IEBACiAKIG1lNDYwMF9kaW9fc3ViZGV2aWNlX3QgKm1lNDYwMF9kaW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlvX2lkeCwKLQkJCQkJICAgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTQ2MDBfZGlvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZG8uYwppbmRleCBlZTU5MWJjLi4zOTUxMGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kby5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTkzLDcgKzkzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZG9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjg0LDcgKzI4NCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZG9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZG9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0zNTIsNyArMzUyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZG9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zNjksNyArMzY5LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZG9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU0NjAwX2RvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPSAwOwpAQCAtMzc3LDcgKzM3Nyw3IEBACiB9CiAKIG1lNDYwMF9kb19zdWJkZXZpY2VfdCAqbWU0NjAwX2RvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWU0NjAwX2RvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZXh0X2lycS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9leHRfaXJxLmMKaW5kZXggYWRjMWUxYi4uNmIzM2NiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9leHRfaXJxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9leHRfaXJxLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCkBAIC02MCw3ICs2MCw3IEBACiAgKiBGdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfaW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgIGludCBpcnFfc291cmNlLApAQCAtMTM1LDcgKzEzNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfaW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50ICppcnFfY291bnQsCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwgaW50IGZsYWdzKQogewpAQCAtMjU2LDcgKzI1Niw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKQogewogCW1lNDYwMF9leHRfaXJxX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTMwOCw3ICszMDgsNyBAQAogCWtmcmVlKGluc3RhbmNlKTsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkJaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zMjUsNyArMzI1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zMzUsMTIgKzMzNSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2V4dF9pcnFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2V4dF9pcnFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwKLQkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCW1lNDYwMF9leHRfaXJxX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1aW50MzJfdCBjdHJsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9hby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9hby5jCmluZGV4IDk0ZjAxMjMuLmY3YWJkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfYW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2FvLmMKQEAgLTM2LDggKzM2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNTcsMzEgKzU3LDMxIEBACiAvKiBEZWZpbmVzCiAgKi8KIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCB1bml0LAogCQkJCQkgICAgaW50ICptaW4sCiAJCQkJCSAgICBpbnQgKm1heCwgaW50ICptYXhkYXRhLCBpbnQgKnJhbmdlKTsKIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIGludCB1bml0LCBpbnQgKmNvdW50KTsKIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBpbnQgcmFuZ2UsCiAJCQkJICAgICAgaW50ICp1bml0LAogCQkJCSAgICAgIGludCAqbWluLCBpbnQgKm1heCwgaW50ICptYXhkYXRhKTsKIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBpbnQgdGltZXIsCiAJCQkJIGludCAqYmFzZV9mcmVxdWVuY3ksCiAJCQkJIGxvbmcgbG9uZyAqbWluX3RpY2tzLCBsb25nIGxvbmcgKm1heF90aWNrcyk7CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcik7CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSk7CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKmNhcHMpOwogCiBzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2Fwc19hcmdzKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSwKQEAgLTkxLDExICs5MSwxMSBAQAogc3RhdGljIHZvaWQgbWU2MDAwX2FvX2Rlc3RydWN0b3Ioc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlKTsKIAogLyoqIFJlc2V0IHN1YmRldmljZS4gU3RvcCBhbGwgYWN0aW9ucy4gUmVzZXQgcmVnaXN0cnkuIERpc2FibGUgRklGTy4gU2V0IG91dHB1dCB0byAwViBhbmQgc3RhdHVzIHRvICdub25lJy4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncyk7CiAKIC8qKiBTZXQgb3V0cHV0IGFzIHNpbmdsZSAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xMDQsODkgKzEwNCw4MSBAQAogCQkJCSAgICAgIGludCB0cmlnX3R5cGUsIGludCB0cmlnX2VkZ2UsIGludCBmbGFncyk7CiAKIC8qKiBQYXNzIHRvIHVzZXIgYWN0dWFsIHZhbHVlIG9mIG91dHB1dC4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwogCiAvKiogV3JpdGUgdG8gb3V0cHV0IHJlcXVlZCB2YWx1ZS4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKIAogLyoqIFNldCBvdXRwdXQgYXMgc3RyZWFtZWQgZGV2aWNlLiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgICBpbnQgY291bnQsCi0JCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpOwogCiAvKiogV2FpdCBmb3IgLyBDaGVjayBlbXB0eSBzcGFjZSBpbiBidWZmZXIuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgIGludCB0aW1lX291dCwgaW50ICpjb3VudCwgaW50IGZsYWdzKTsKIAogLyoqIFN0YXJ0IHN0cmVhbWluZy4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHN0YXJ0X21vZGUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKIAogLyoqIENoZWNrIGFjdHVhbCBzdGF0ZS4gLyBXYWl0IGZvciBlbmQuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgd2FpdCwKIAkJCQkgICAgICBpbnQgKnN0YXR1cywgaW50ICp2YWx1ZXMsIGludCBmbGFncyk7CiAKIC8qKiBTdG9wIHN0cmVhbWluZy4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3RvcF9tb2RlLCBpbnQgZmxhZ3MpOwogCiAvKiogV3JpdGUgZGF0YXMgdG8gYnVmZm9yLiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgd3JpdGVfbW9kZSwKIAkJCQkgICAgIGludCAqdmFsdWVzLCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpOwogCiAvKiogSW50ZXJydXB0IGhhbmRsZXIuIENvcHkgZnJvbSBidWZmZXIgdG8gRklGTy4gKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU2MDAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTYwMDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmCiAKIC8qKiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIgdG8gZmlmbyAoZmFzdCkgaW4gd3JhcGFyb3VuZCBtb2RlLiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhX3dyYXBhcm91bmQobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YV93cmFwYXJvdW5kKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgICAgaW50IHN0YXJ0X3Bvcyk7CiAKIC8qKiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIgdG8gZmlmbyAoZmFzdCkuKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YShtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCSBpbnQgc3RhcnRfcG9zKTsKIAogLyoqIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIGJ1ZmZlciB0byBmaWZvIChzbG93KS4qLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhX3Bvb2xpbmcobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YV9wb29saW5nKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgaW50IHN0YXJ0X3Bvcyk7CiAKIC8qKiBDb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlIHRvIGNpcmN1bGFyIGJ1ZmZlci4gKi8KLWludCBpbmxpbmUgYW9fZ2V0X2RhdGFfZnJvbV91c2VyKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX2dldF9kYXRhX2Zyb21fdXNlcihtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJIGludCAqdXNlcl92YWx1ZXMpOwogCiAvKiogU3RvcCBwcmVzZW50YXRpb24uIFByZXNlcnZlIEZJRk9zLiAqLwotaW50IGlubGluZSBhb19zdG9wX2ltbWVkaWF0ZWx5KG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlKTsKK2lubGluZSBpbnQgYW9fc3RvcF9pbW1lZGlhdGVseShtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlKTsKIAogLyoqIEZ1bmN0aW9uIGZvciBjaGVja2luZyB0aW1lb3V0IGluIG5vbi1ibG9ja2luZyBtb2RlLiAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLXN0YXRpYyB2b2lkIG1lNjAwMF9hb193b3JrX2NvbnRyb2xfdGFzayh2b2lkICpzdWJkZXZpY2UpOwotI2Vsc2UKIHN0YXRpYyB2b2lkIG1lNjAwMF9hb193b3JrX2NvbnRyb2xfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotI2VuZGlmCiAKIC8qIEZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncykKIHsKIAltZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMjc0LDcgKzI2Niw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC00NzMsNyArNDY1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtNTU1LDcgKzU0Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0xMDI3LDExICsxMDE5LDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgICBpbnQgY291bnQsCi0JCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpCiB7CiAJbWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTEwNjMsNyArMTA1NSw3IEBACiAJfQogCiAJaWYgKGZsYWdzICYgTUVfSU9fU1RSRUFNX0NPTkZJR19IQVJEV0FSRV9PTkxZKSB7Ci0JCWlmICghZmxhZ3MgJiBNRV9JT19TVFJFQU1fQ09ORklHX1dSQVBBUk9VTkQpIHsKKwkJaWYgKCEoZmxhZ3MgJiBNRV9JT19TVFJFQU1fQ09ORklHX1dSQVBBUk9VTkQpKSB7CiAJCQlQRVJST1IKIAkJCSAgICAoIkhhcmR3YXJlIE1FX0lPX1NUUkVBTV9DT05GSUdfSEFSRFdBUkVfT05MWSBoYXMgdG8gYmUgd2l0aCBNRV9JT19TVFJFQU1fQ09ORklHX1dSQVBBUk9VTkQuXG4iKTsKIAkJCXJldHVybiBNRV9FUlJOT19JTlZBTElEX0ZMQUdTOwpAQCAtMTM1OSw3ICsxMzUxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgIGludCB0aW1lX291dCwgaW50ICpjb3VudCwgaW50IGZsYWdzKQogewpAQCAtMTQ0MCw3ICsxNDMyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBzdGFydF9tb2RlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKIHsKQEAgLTE4ODksNyArMTg4MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHdhaXQsCiAJCQkJICAgICAgaW50ICpzdGF0dXMsIGludCAqdmFsdWVzLCBpbnQgZmxhZ3MpCkBAIC0xOTg3LDcgKzE5NzksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3RvcF9tb2RlLCBpbnQgZmxhZ3MpCiB7CQkJCS8vLyBAbm90ZSBTdG9wIHdvcmsgYW5kIGVtcHR5IGJ1ZmZlciBhbmQgRklGTwpAQCAtMjA5NCw3ICsyMDg2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCB3cml0ZV9tb2RlLAogCQkJCSAgICAgaW50ICp2YWx1ZXMsIGludCAqY291bnQsIGludCBmbGFncykKQEAgLTIzMjQsMTEgKzIzMTYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU2MDAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lNjAwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCW1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UgPSBkZXZfaWQ7CiAJdWludDMyX3QgaXJxX3N0YXR1czsKQEAgLTI1NDQsOSArMjUzMiw5IEBACiB9CiAKIG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqbWU2MDAwX2FvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBwcmVsb2FkX3JlZ19sb2NrLAotCQkJCQkgICAgIHVpbnQzMl90ICogcHJlbG9hZF9mbGFncywKLQkJCQkJICAgICB1aW50MzJfdCAqIHRyaWdnZXJpbmdfZmxhZ3MsCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqcHJlbG9hZF9yZWdfbG9jaywKKwkJCQkJICAgICB1aW50MzJfdCAqcHJlbG9hZF9mbGFncywKKwkJCQkJICAgICB1aW50MzJfdCAqdHJpZ2dlcmluZ19mbGFncywKIAkJCQkJICAgICBpbnQgYW9faWR4LAogCQkJCQkgICAgIGludCBmaWZvLAogCQkJCQkgICAgIGludCBpcnEsCkBAIC0yNzk3LDEzICsyNzg1LDggQEAKIAlzdWJkZXZpY2UtPm1lNjAwMF93b3JrcXVldWUgPSBtZTYwMDBfd3E7CiAKIC8qIHdvcmtxdWV1ZSBBUEkgY2hhbmdlZCBpbiBrZXJuZWwgMi42LjIwICovCi0jaWYgKCBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApICkKLQlJTklUX1dPUksoJnN1YmRldmljZS0+YW9fY29udHJvbF90YXNrLCBtZTYwMDBfYW9fd29ya19jb250cm9sX3Rhc2ssCi0JCSAgKHZvaWQgKilzdWJkZXZpY2UpOwotI2Vsc2UKIAlJTklUX0RFTEFZRURfV09SSygmc3ViZGV2aWNlLT5hb19jb250cm9sX3Rhc2ssCiAJCQkgIG1lNjAwMF9hb193b3JrX2NvbnRyb2xfdGFzayk7Ci0jZW5kaWYKIAogCWlmIChzdWJkZXZpY2UtPmZpZm8pIHsJLy9TZXQgc3BlZWQKIAkJb3V0bChNRTYwMDBfQU9fTUlOX0NIQU5fVElDS1MgLSAxLCBzdWJkZXZpY2UtPnRpbWVyX3JlZyk7CkBAIC0yODE3LDcgKzI4MDAsNyBAQAogKgogKiBAcGFyYW0gaW5zdGFuY2UgVGhlIHN1YmRldmljZSBpbnN0YW5jZSAocG9pbnRlcikuCiAqLwotaW50IGlubGluZSBhb19zdG9wX2ltbWVkaWF0ZWx5KG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQoraW5saW5lIGludCBhb19zdG9wX2ltbWVkaWF0ZWx5KG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBjcHVfZmxhZ3M7CiAJdWludDMyX3QgY3RybDsKQEAgLTI4MjUsMTAgKzI4MDgsMTEgQEAKIAlpbnQgaTsKIAl1aW50MzJfdCBzaW5nbGVfbWFzazsKIAotCXNpbmdsZV9tYXNrID0KLQkgICAgKGluc3RhbmNlLT5hb19pZHggLSBNRTYwMDBfQU9fU0lOR0xFX1NUQVRVU19PRkZTRVQgPAotCSAgICAgMCkgPyAweDAwMDAgOiAoMHgwMDAxIDw8IChpbnN0YW5jZS0+YW9faWR4IC0KLQkJCQkgICAgICAgTUU2MDAwX0FPX1NJTkdMRV9TVEFUVVNfT0ZGU0VUKSk7CisJaWYgKGluc3RhbmNlLT5hb19pZHggPCBNRTYwMDBfQU9fU0lOR0xFX1NUQVRVU19PRkZTRVQpCisJCXNpbmdsZV9tYXNrID0gMHgwMDAwOworCWVsc2UKKwkJc2luZ2xlX21hc2sgPSAweDAwMDEgPDwgKGluc3RhbmNlLT5hb19pZHggLQorCQkJCU1FNjAwMF9BT19TSU5HTEVfU1RBVFVTX09GRlNFVCk7CiAKIAl0aW1lb3V0ID0KIAkgICAgKGluc3RhbmNlLT5oYXJkd2FyZV9zdG9wX2RlbGF5ID4KQEAgLTI4ODcsNyArMjg3MSw3IEBACiAqIEByZXR1cm4gT24gZXJyb3Ivc3VjY2VzczogMC4JTm8gZGF0YXMgd2VyZSBjb3BpZWQgPT4gbm8gZGF0YSBpbiBidWZmZXIuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19GSUZPX0JVRkZFUl9PVkVSRkxPVy4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGFfd3JhcGFyb3VuZChtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhX3dyYXBhcm91bmQobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSAgICBpbnQgc3RhcnRfcG9zKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCXVpbnQzMl90IHN0YXR1czsKQEAgLTI5NTIsNyArMjkzNiw3IEBACiAqIEByZXR1cm4gT24gZXJyb3Ivc3VjY2VzczogMC4JTm8gZGF0YXMgd2VyZSBjb3BpZWQgPT4gbm8gZGF0YSBpbiBidWZmZXIuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19GSUZPX0JVRkZFUl9PVkVSRkxPVy4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGEobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YShtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkgaW50IHN0YXJ0X3BvcykKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0zMDIyLDcgKzMwMDYsNyBAQAogKiBAcmV0dXJuIE9uIGVycm9yL3N1Y2Nlc3M6IDAuCUZJRk8gd2FzIGZ1bGwgYXQgYmVnaW5pbmcuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19SSU5HX0JVRkZFUl9VTkRFRkZMT1cuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhX3Bvb2xpbmcobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YV9wb29saW5nKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgaW50IHN0YXJ0X3BvcykKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgc2xvdyBmdW5jdGlvbiEKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0zMDgwLDcgKzMwNjQsNyBAQAogKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IE51bWJlciBvZiBjb3BpZWQgdmFsdWVzLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fSU5URVJOQUwuCiAqLwotaW50IGlubGluZSBhb19nZXRfZGF0YV9mcm9tX3VzZXIobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fZ2V0X2RhdGFfZnJvbV91c2VyKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgaW50ICp1c2VyX3ZhbHVlcykKIHsKIAlpbnQgaSwgZXJyOwpAQCAtMzEwOSwxMyArMzA5Myw3IEBACiAJcmV0dXJuIGNvcGllZDsKIH0KIAotc3RhdGljIHZvaWQgbWU2MDAwX2FvX3dvcmtfY29udHJvbF90YXNrKAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQkJCQkJICAgICAgIHZvaWQgKnN1YmRldmljZQotI2Vsc2UKLQkJCQkJICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yawotI2VuZGlmCi0gICAgKQorc3RhdGljIHZvaWQgbWU2MDAwX2FvX3dvcmtfY29udHJvbF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAltZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVuc2lnbmVkIGxvbmcgY3B1X2ZsYWdzID0gMDsKQEAgLTMxMjYsMTIgKzMxMDQsOCBAQAogCWludCBzaWduYWxpbmcgPSAwOwogCXVpbnQzMl90IHNpbmdsZV9tYXNrOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCWluc3RhbmNlID0gKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqKSBzdWJkZXZpY2U7Ci0jZWxzZQogCWluc3RhbmNlID0KIAkgICAgY29udGFpbmVyX29mKCh2b2lkICopd29yaywgbWU2MDAwX2FvX3N1YmRldmljZV90LCBhb19jb250cm9sX3Rhc2spOwotI2VuZGlmCiAJUElORk8oIjwlczogJWxkPiBleGVjdXRlZC4gaWR4PSVkXG4iLCBfX2Z1bmNfXywgamlmZmllcywKIAkgICAgICBpbnN0YW5jZS0+YW9faWR4KTsKIApAQCAtMzU1NSw3ICszNTI5LDcgQEAKIAogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50IHVuaXQsCiAJCQkJCSAgICBpbnQgKm1pbiwKIAkJCQkJICAgIGludCAqbWF4LCBpbnQgKm1heGRhdGEsIGludCAqcmFuZ2UpCkBAIC0zNTg5LDcgKzM1NjMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgaW50IHVuaXQsIGludCAqY291bnQpCiB7CiAJbWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTM2MDcsNyArMzU4MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgaW50IHJhbmdlLAogCQkJCSAgICAgIGludCAqdW5pdCwKIAkJCQkgICAgICBpbnQgKm1pbiwgaW50ICptYXgsIGludCAqbWF4ZGF0YSkKQEAgLTM2MzEsNyArMzYwNSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgaW50IHRpbWVyLAogCQkJCSBpbnQgKmJhc2VfZnJlcXVlbmN5LAogCQkJCSBsb25nIGxvbmcgKm1pbl90aWNrcywgbG9uZyBsb25nICptYXhfdGlja3MpCkBAIC0zNjYwLDcgKzM2MzQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJbWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTM2NzIsNyArMzY0Niw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAltZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMzY5MCw3ICszNjY0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAltZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCWluc3RhbmNlID0gKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqKSBzdWJkZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2FvLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2FvLmgKaW5kZXggOTYyOTY0OS4uZWY0ZDAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9hby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfYW8uaApAQCAtMTYwLDExICsxNjAsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7CQkJLyoqPCBXYWl0IHF1ZXVlIHRvIHB1dCBvbiB0YXNrcyB3YWl0aW5nIGZvciBkYXRhIHRvIGFycml2ZS4gKi8KIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptZTYwMDBfd29ya3F1ZXVlOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYW9fY29udHJvbF90YXNrOwotI2Vsc2UKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGFvX2NvbnRyb2xfdGFzazsKLSNlbmRpZgogCiAJdm9sYXRpbGUgaW50IGFvX2NvbnRyb2xfdGFza19mbGFnOwkJLyoqPCBGbGFnIGNvbnRyb2xpbmcgcmVleGVjdXRpbmcgb2YgY29udHJvbCB0YXNrICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2RldmljZS5jCmluZGV4IGZlZTRjNTguLjFhNmNmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9kZXZpY2UuYwpAQCAtMTc4LDYgKzE3OCw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lNjAwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lNjAwMF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMjA2LDYgKzIwNywzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNRS02MDAwIERldmljZSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLTYwMDAgRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTYwMDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2Rpby5jCmluZGV4IDA3ZjEwNjkuLmM5MDY4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9kaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC05MSw3ICs5MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2Rpb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfZGlvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xNjEsNyArMTYxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9kaW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9kaW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yMzMsNyArMjMzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9kaW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfZGlvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMzE0LDcgKzMxNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfZGlvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2Rpb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTMyMiw3ICszMjIsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzQxLDcgKzM0MSw3IEBACiAKIG1lNjAwMF9kaW9fc3ViZGV2aWNlX3QgKm1lNjAwMF9kaW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlvX2lkeCwKLQkJCQkJICAgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTYwMDBfZGlvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RldmljZS5jCmluZGV4IDFmYjc5ZTQuLjQxYTkzNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kZXZpY2UuYwpAQCAtMTU5LDYgKzE1OSw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lODEwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lODEwMF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMTgyLDYgKzE4MywzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBUZW1wbGF0ZSBEZXZpY2UiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBUZW1wbGF0ZSBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lODEwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kaS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kaS5jCmluZGV4IDk3MTcyN2MuLjMwMWRiZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RpLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CkBAIC0xMTQsNyArMTE0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZGlfaW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZGlfaW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICBpbnQgY2hhbm5lbCwKIAkJCQkgIGludCBpcnFfc291cmNlLApAQCAtMjA4LDcgKzIwOCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZGlfaW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kaV9pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJIGludCBjaGFubmVsLAogCQkJCSBpbnQgKmlycV9jb3VudCwKQEAgLTMxNSw3ICszMTUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZGlfaW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgY2hhbm5lbCwgaW50IGZsYWdzKQogewogCW1lODEwMF9kaV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC00MDUsNyArNDA1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtNDY2LDcgKzQ2Niw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lODEwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0gTUVfQ0FQU19ESU9fQklUX1BBVFRFUk5fSVJRIHwgTUVfQ0FQU19ESU9fQklUX01BU0tfSVJRX0VER0VfQU5ZOwpAQCAtNTAzLDExICs1MDMsNyBAQAogCWtmcmVlKGluc3RhbmNlKTsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTgxMDBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU4MTAwX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJbWU4MTAwX2RpX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1aW50MzJfdCBpY3NyOwpAQCAtNTk4LDcgKzU5NCw3IEBACiAJCQkJCSAgICAgdWludDMyX3QgcGx4X3JlZ19iYXNlLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBkaV9pZHgsCiAJCQkJCSAgICAgaW50IGlycSwKLQkJCQkJICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lODEwMF9kaV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RvLmMKaW5kZXggOTU3YjlmOS4uODE2NTFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZG8uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC05Miw3ICs5Miw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTU4LDcgKzE1OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZG9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZG9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZG9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTMwNSw3ICszMDUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lODEwMF9kb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0gTUVfQ0FQU19ESU9fU0lOS19TT1VSQ0U7CkBAIC0zMjMsNyArMzIzLDcgQEAKIAogbWU4MTAwX2RvX3N1YmRldmljZV90ICptZTgxMDBfZG9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGRvX2lkeCwKLQkJCQkJICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lODEwMF9kb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kZXZpY2UuYwppbmRleCAyNjFjMGNiLi5iMzEzNjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGV2aWNlLmMKQEAgLTE2Niw2ICsxNjYsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTgyMDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTgyMDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTE4OSw2ICsxOTAsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgVGVtcGxhdGUgRGV2aWNlIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgVGVtcGxhdGUgRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZTgyMDBfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGkuYwppbmRleCAyNzUyNWJjLi5hOTMxZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kaS5jCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgpAQCAtNTAsNTIgKzUwLDQ0IEBACiAKIC8vLyBEZWZpbmVzCiBzdGF0aWMgdm9pZCBtZTgyMDBfZGlfZGVzdHJ1Y3RvcihzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UpOwotc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICBpbnQgY2hhbm5lbCwKIAkJCQkgIGludCBpcnFfc291cmNlLAogCQkJCSAgaW50IGlycV9lZGdlLCBpbnQgaXJxX2FyZywgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSBpbnQgY2hhbm5lbCwKIAkJCQkgaW50ICppcnFfY291bnQsCiAJCQkJIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgY2hhbm5lbCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLAogCQkJCSAgICAgIGludCByZWYsCiAJCQkJICAgICAgaW50IHRyaWdfY2hhbiwKIAkJCQkgICAgICBpbnQgdHJpZ190eXBlLCBpbnQgdHJpZ19lZGdlLCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTgyMDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7CiBzdGF0aWMgaW50IG1lODIwMF9kaV9pb19yZXNldF9zdWJkZXZpY2Uoc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpOwotc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKTsKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKmNhcHMpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lODIwMF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZW5kaWYKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2lzcl9FWChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfaXNyX0VYKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmCi1zdGF0aWMgdm9pZCBtZTgyMDBfZGlfY2hlY2tfdmVyc2lvbihtZTgyMDBfZGlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwKK3N0YXRpYyB2b2lkIG1lODIwMF9kaV9jaGVja192ZXJzaW9uKG1lODIwMF9kaV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKIC8vL0Z1bmN0aW9ucwotc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICBpbnQgY2hhbm5lbCwKIAkJCQkgIGludCBpcnFfc291cmNlLApAQCAtMjQ2LDcgKzIzOCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJIGludCBjaGFubmVsLAogCQkJCSBpbnQgKmlycV9jb3VudCwKQEAgLTM1Miw3ICszNDQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgY2hhbm5lbCwgaW50IGZsYWdzKQogewogCW1lODIwMF9kaV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC00MDYsNyArMzk4LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC00NTMsNyArNDQ1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtNTE4LDcgKzUxMCw3IEBACiAJcmV0dXJuIG1lODIwMF9kaV9pb19pcnFfc3RvcChzdWJkZXZpY2UsIGZpbGVwLCAwLCAwKTsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTUyNiw3ICs1MTgsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNTM1LDcgKzUyNyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0KQEAgLTU0NiwxMSArNTM4LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJbWU4MjAwX2RpX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1aW50OF90IGN0cmw7CkBAIC02MjksMTEgKzYxNyw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lODIwMF9pc3JfRVgoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfaXNyX0VYKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAltZTgyMDBfZGlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVpbnQ4X3QgaXJxX3N0YXR1cyA9IDA7CkBAIC03MTUsOCArNjk5LDggQEAKIG1lODIwMF9kaV9zdWJkZXZpY2VfdCAqbWU4MjAwX2RpX2NvbnN0cnVjdG9yKHVpbnQzMl90IG1lODIwMF9yZWdiYXNlLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBkaV9pZHgsCiAJCQkJCSAgICAgaW50IGlycSwKLQkJCQkJICAgICBzcGlubG9ja190ICogaXJxX2N0cmxfbG9jaywKLQkJCQkJICAgICBzcGlubG9ja190ICogaXJxX21vZGVfbG9jaykKKwkJCQkJICAgICBzcGlubG9ja190ICppcnFfY3RybF9sb2NrLAorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmlycV9tb2RlX2xvY2spCiB7CiAJbWU4MjAwX2RpX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKQEAgLTg0Myw3ICs4MjcsNyBAQAogCXJldHVybiBzdWJkZXZpY2U7CiB9CiAKLXN0YXRpYyB2b2lkIG1lODIwMF9kaV9jaGVja192ZXJzaW9uKG1lODIwMF9kaV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLAorc3RhdGljIHZvaWQgbWU4MjAwX2RpX2NoZWNrX3ZlcnNpb24obWU4MjAwX2RpX3N1YmRldmljZV90ICppbnN0YW5jZSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kaW8uYwppbmRleCBmZjhjYTFiLi5jN2Y0M2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGlvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtOTAsNyArOTAsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2Rpb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTY0LDcgKzE2NCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjQxLDcgKzI0MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2Rpb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTMzMiw3ICszMzIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2Rpb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zNDAsNyArMzQwLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTM0OSw3ICszNDksNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTM1OSw3ICszNTksNyBAQAogCiBtZTgyMDBfZGlvX3N1YmRldmljZV90ICptZTgyMDBfZGlvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpb19pZHgsCi0JCQkJCSAgICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWU4MjAwX2Rpb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RvLmMKaW5kZXggZDJiZWJkMS4uNDBkNTM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZG8uYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKQEAgLTU5LDcgKzU5LDcgQEAKICAqIEZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX2lycV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgaW50IGNoYW5uZWwsCiAJCQkJICBpbnQgaXJxX3NvdXJjZSwKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZG9faW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSBpbnQgY2hhbm5lbCwKIAkJCQkgaW50ICppcnFfY291bnQsCkBAIC0xODQsNyArMTg0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kb19pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGNoYW5uZWwsIGludCBmbGFncykKIHsKIAltZTgyMDBfZG9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMzA3LDcgKzMwNyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZG9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTM1NCw3ICszNTQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtNDE1LDcgKzQxNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZG9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZG9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTQyMyw3ICs0MjMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lODIwMF9kb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0gTUVfQ0FQU19ESU9fT1ZFUl9URU1QX0lSUTsKQEAgLTQ1MiwxMSArNDUyLDcgQEAKIAlrZnJlZShpbnN0YW5jZSk7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2RvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lODIwMF9kb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCW1lODIwMF9kb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdWludDE2X3QgY3RybDsKQEAgLTUwNSw3ICs1MDEsNyBAQAogbWU4MjAwX2RvX3N1YmRldmljZV90ICptZTgyMDBfZG9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGRvX2lkeCwKIAkJCQkJICAgICBpbnQgaXJxLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBpcnFfbW9kZV9sb2NrKQorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmlycV9tb2RlX2xvY2spCiB7CiAJbWU4MjAwX2RvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyNTQuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyNTQuYwppbmRleCA2ZTQ0YzNkLi5kOGY3NDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjU0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODI1NC5jCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTE4Myw3ICsxODMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNDAwX2FiX3JlZl9jb25maWcobWU4MjU0X3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCByZWYpCitzdGF0aWMgaW50IG1lMTQwMF9hYl9yZWZfY29uZmlnKG1lODI1NF9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCByZWYpCiB7CiAJdWludDhfdCBjbGtfc3JjOwogCkBAIC0yOTEsNyArMjkxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTE0MDBfY2RfcmVmX2NvbmZpZyhtZTgyNTRfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IHJlZikKK3N0YXRpYyBpbnQgbWUxNDAwX2NkX3JlZl9jb25maWcobWU4MjU0X3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IHJlZikKIHsKIAl1aW50OF90IGNsa19zcmM7CiAKQEAgLTQzNiw3ICs0MzYsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9yZWZfY29uZmlnKG1lODI1NF9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgcmVmKQorc3RhdGljIGludCBtZTQ2MDBfcmVmX2NvbmZpZyhtZTgyNTRfc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgcmVmKQogewogCXN3aXRjaCAocmVmKSB7CiAKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9yZWZfY29uZmlnKG1lODI1NF9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgcmVmKQorc3RhdGljIGludCBtZTgxMDBfcmVmX2NvbmZpZyhtZTgyNTRfc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgcmVmKQogewogCXN3aXRjaCAocmVmKSB7CiAKQEAgLTk2Miw4ICs5NjIsOCBAQAogCQkJCSAgICAgICB1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG1lODI1NF9pZHgsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBjdHJfaWR4LAotCQkJCSAgICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaywKLQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGNsa19zcmNfcmVnX2xvY2spCisJCQkJICAgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2ssCisJCQkJICAgICAgIHNwaW5sb2NrX3QgKmNsa19zcmNfcmVnX2xvY2spCiB7CiAJbWU4MjU0X3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyNTUuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyNTUuYwppbmRleCAxODBlN2Y4Li5lYzljNjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjU1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODI1NS5jCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWU4MjU1X2lkeCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpb19pZHgsCiAJCQkJICAgICAgIGludCAqY3RybF9yZWdfbWlycm9yLAotCQkJCSAgICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkgICAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTgyNTVfc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lY2lyY19idWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWNpcmNfYnVmLmgKaW5kZXggZTliNTkxZS4uNTE2NjU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lY2lyY19idWYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVjaXJjX2J1Zi5oCkBAIC00MCwxOSArNDAsMTkgQEAKIAlpbnQgdm9sYXRpbGUgdGFpbDsKIH0gbWVfY2lyY19idWZfdDsKIAotc3RhdGljIGludCBpbmxpbmUgbWVfY2lyY19idWZfdmFsdWVzKG1lX2NpcmNfYnVmX3QgKiBidWYpCitzdGF0aWMgaW5saW5lIGludCBtZV9jaXJjX2J1Zl92YWx1ZXMobWVfY2lyY19idWZfdCAqIGJ1ZikKIHsKIC8vICAgICAgcmV0dXJuICgoYnVmLT5oZWFkIC0gYnVmLT50YWlsKSAmIChidWYtPmNvdW50IC0gMSkpOwogCXJldHVybiAoKGJ1Zi0+aGVhZCAtIGJ1Zi0+dGFpbCkgJiAoYnVmLT5tYXNrKSk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lX2NpcmNfYnVmX3NwYWNlKG1lX2NpcmNfYnVmX3QgKiBidWYpCitzdGF0aWMgaW5saW5lIGludCBtZV9jaXJjX2J1Zl9zcGFjZShtZV9jaXJjX2J1Zl90ICogYnVmKQogewogLy8gICAgICByZXR1cm4gKChidWYtPnRhaWwgLSAoYnVmLT5oZWFkICsgMSkpICYgKGJ1Zi0+Y291bnQgLSAxKSk7CiAJcmV0dXJuICgoYnVmLT50YWlsIC0gKGJ1Zi0+aGVhZCArIDEpKSAmIChidWYtPm1hc2spKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgbWVfY2lyY19idWZfdmFsdWVzX3RvX2VuZChtZV9jaXJjX2J1Zl90ICogYnVmKQorc3RhdGljIGlubGluZSBpbnQgbWVfY2lyY19idWZfdmFsdWVzX3RvX2VuZChtZV9jaXJjX2J1Zl90ICogYnVmKQogewogCWludCBlbmQ7CiAJaW50IG47CkBAIC02Myw3ICs2Myw3IEBACiAJcmV0dXJuIChuIDwgZW5kKSA/IG4gOiBlbmQ7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lX2NpcmNfYnVmX3NwYWNlX3RvX2VuZChtZV9jaXJjX2J1Zl90ICogYnVmKQorc3RhdGljIGlubGluZSBpbnQgbWVfY2lyY19idWZfc3BhY2VfdG9fZW5kKG1lX2NpcmNfYnVmX3QgKiBidWYpCiB7CiAJaW50IGVuZDsKIAlpbnQgbjsKQEAgLTk5LDE5ICs5OSwxOSBAQAogIyAgIGVuZGlmIC8vX0NCVUZGXzMyYl90CiAKIC8qKiBIb3cgbWFueSB2YWx1ZXMgaXMgaW4gYnVmZmVyICovCi1zdGF0aWMgaW50IGlubGluZSBtZV9jaXJjX2J1Zl92YWx1ZXMobWVfY2lyY19idWZfdCAqIGJ1ZikKK3N0YXRpYyBpbmxpbmUgaW50IG1lX2NpcmNfYnVmX3ZhbHVlcyhtZV9jaXJjX2J1Zl90ICogYnVmKQogewogCXJldHVybiAoKGJ1Zi0+aGVhZCAtIGJ1Zi0+dGFpbCkgJiAoYnVmLT5tYXNrKSk7CiB9CiAKIC8qKiBIb3cgbWFueSBzcGFjZSBsZWZ0ICovCi1zdGF0aWMgaW50IGlubGluZSBtZV9jaXJjX2J1Zl9zcGFjZShtZV9jaXJjX2J1Zl90ICogYnVmKQorc3RhdGljIGlubGluZSBpbnQgbWVfY2lyY19idWZfc3BhY2UobWVfY2lyY19idWZfdCAqIGJ1ZikKIHsKIAlyZXR1cm4gKChidWYtPnRhaWwgLSAoYnVmLT5oZWFkICsgMSkpICYgKGJ1Zi0+bWFzaykpOwogfQogCiAvKiogSG93IG1hbnkgdmFsdWVzIGNhbiBiZSByZWFkIGZyb20gYnVmZm9yIGluIG9uZSBjaHVuY2suICovCi1zdGF0aWMgaW50IGlubGluZSBtZV9jaXJjX2J1Zl92YWx1ZXNfdG9fZW5kKG1lX2NpcmNfYnVmX3QgKiBidWYpCitzdGF0aWMgaW5saW5lIGludCBtZV9jaXJjX2J1Zl92YWx1ZXNfdG9fZW5kKG1lX2NpcmNfYnVmX3QgKiBidWYpCiB7CiAJcmV0dXJuIChidWYtPnRhaWwgPD0KIAkJYnVmLT5oZWFkKSA/IChidWYtPmhlYWQgLSBidWYtPnRhaWwpIDogKGJ1Zi0+bWFzayAtIGJ1Zi0+dGFpbCArCkBAIC0xMTksNyArMTE5LDcgQEAKIH0KIAogLyoqIEhvdyBtYW55IHZhbHVlcyBjYW4gYmUgd3JpdGUgdG8gYnVmZmVyIGluIG9uZSBjaHVuY2suICovCi1zdGF0aWMgaW50IGlubGluZSBtZV9jaXJjX2J1Zl9zcGFjZV90b19lbmQobWVfY2lyY19idWZfdCAqIGJ1ZikKK3N0YXRpYyBpbmxpbmUgaW50IG1lX2NpcmNfYnVmX3NwYWNlX3RvX2VuZChtZV9jaXJjX2J1Zl90ICogYnVmKQogewogCXJldHVybiAoYnVmLT50YWlsIDw9CiAJCWJ1Zi0+aGVhZCkgPyAoYnVmLT5tYXNrIC0gYnVmLT5oZWFkICsgMSkgOiAoYnVmLT50YWlsIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGV2aWNlLmMKaW5kZXggOGY2MmUxNi4uNzVhYWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGV2aWNlLmMKQEAgLTM5MCw5ICszOTAsOSBAQAogc3RhdGljIGludCBtZV9kZXZpY2VfaW9fc3RyZWFtX2NvbmZpZyhzdHJ1Y3QgbWVfZGV2aWNlICpkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBzdWJkZXZpY2UsCi0JCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgICBpbnQgY291bnQsCi0JCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpCiB7CiAJaW50IGVyciA9IE1FX0VSUk5PX1NVQ0NFU1M7CkBAIC0xMDQwLDcgKzEwNDAsNyBAQAogCQkJCSBpbnQgc3ViZGV2aWNlLAogCQkJCSBpbnQgdGltZXIsCiAJCQkJIGludCAqYmFzZV9mcmVxdWVuY3ksCi0JCQkJIHVpbnQ2NF90ICogbWluX3RpY2tzLCB1aW50NjRfdCAqIG1heF90aWNrcykKKwkJCQkgdWludDY0X3QgKm1pbl90aWNrcywgdWludDY0X3QgKm1heF90aWNrcykKIHsKIAlpbnQgZXJyID0gTUVfRVJSTk9fU1VDQ0VTUzsKIAltZV9zdWJkZXZpY2VfdCAqczsKQEAgLTEwODIsMTQgKzEwODIsMTQgQEAKIH0KIAogc3RhdGljIGludCBtZV9kZXZpY2VfY29uZmlnX2xvYWQoc3RydWN0IG1lX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqIGNvbmZpZykKKwkJCQkgbWVfY2ZnX2RldmljZV9lbnRyeV90ICpjb25maWcpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwkvL0lmIG5vIG5lZWQgZm9yIGNvbmZpZyByZXR1cm4gc3VjY2Vzcy4KIC8vICAgICAgcmV0dXJuIE1FX0VSUk5PX05PVF9TVVBQT1JURUQ7CiB9CiAKLXN0YXRpYyB2b2lkIG1lX2RldmljZV9kZXN0cnVjdG9yKG1lX2RldmljZV90ICogbWVfZGV2aWNlKQorc3RhdGljIHZvaWQgbWVfZGV2aWNlX2Rlc3RydWN0b3IobWVfZGV2aWNlX3QgKm1lX2RldmljZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJbWVfZGV2aWNlX2RlaW5pdChtZV9kZXZpY2UpOwpAQCAtMTU4MSw3ICsxNTgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1lX2RldmljZV9wY2lfaW5pdChtZV9kZXZpY2VfdCAqIG1lX2RldmljZSwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UpCitpbnQgbWVfZGV2aWNlX3BjaV9pbml0KG1lX2RldmljZV90ICptZV9kZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlKQogewogCWludCBlcnI7CiAJaW50IGk7CkBAIC0xNzIwLDcgKzE3MjAsNyBAQAogCXJldHVybiAxOwogfQogCi12b2lkIG1lX2RldmljZV9kZWluaXQobWVfZGV2aWNlX3QgKiBtZV9kZXZpY2UpCit2b2lkIG1lX2RldmljZV9kZWluaXQobWVfZGV2aWNlX3QgKm1lX2RldmljZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRsaXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkbGlzdC5jCmluZGV4IGVmNGUzNjkuLmI2YTQwNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRsaXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGxpc3QuYwpAQCAtNjksNyArNjksNyBAQAogCXJldHVybiBkZXZpY2U7CiB9CiAKLXZvaWQgbWVfZGxpc3RfYWRkX2RldmljZV90YWlsKHN0cnVjdCBtZV9kbGlzdCAqZGxpc3QsIG1lX2RldmljZV90ICogZGV2aWNlKQordm9pZCBtZV9kbGlzdF9hZGRfZGV2aWNlX3RhaWwoc3RydWN0IG1lX2RsaXN0ICpkbGlzdCwgbWVfZGV2aWNlX3QgKmRldmljZSkKIHsKIAlQREVCVUdfTE9DS1MoImNhbGxlZC5cbiIpOwogCkBAIC05OSw3ICs5OSw3IEBACiAJcmV0dXJuIGRldmljZTsKIH0KIAotaW50IG1lX2RsaXN0X2luaXQobWVfZGxpc3RfdCAqIGRsaXN0KQoraW50IG1lX2RsaXN0X2luaXQobWVfZGxpc3RfdCAqZGxpc3QpCiB7CiAJUERFQlVHX0xPQ0tTKCJjYWxsZWQuXG4iKTsKIApAQCAtMTA4LDcgKzEwOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbWVfZGxpc3RfZGVpbml0KG1lX2RsaXN0X3QgKiBkbGlzdCkKK3ZvaWQgbWVfZGxpc3RfZGVpbml0KG1lX2RsaXN0X3QgKmRsaXN0KQogewogCiAJc3RydWN0IGxpc3RfaGVhZCAqczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRsb2NrLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkbG9jay5jCmluZGV4IGY2NDllM2QuLjhkZWQzOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRsb2NrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGxvY2suYwpAQCAtNjUsNyArNjUsNyBAQAogfQogCiBpbnQgbWVfZGxvY2tfbG9jayhzdHJ1Y3QgbWVfZGxvY2sgKmRsb2NrLAotCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGxvY2ssIGludCBmbGFncywgbWVfc2xpc3RfdCAqIHNsaXN0KQorCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGxvY2ssIGludCBmbGFncywgbWVfc2xpc3RfdCAqc2xpc3QpCiB7CiAJaW50IGVyciA9IE1FX0VSUk5PX1NVQ0NFU1M7CiAJaW50IGk7CkBAIC0xODMsNyArMTgzLDcgQEAKIAlQREVCVUdfTE9DS1MoImV4ZWN1dGVkLlxuIik7CiB9CiAKLWludCBtZV9kbG9ja19pbml0KG1lX2Rsb2NrX3QgKiBkbG9jaykKK2ludCBtZV9kbG9ja19pbml0KG1lX2Rsb2NrX3QgKmRsb2NrKQogewogCVBERUJVR19MT0NLUygiZXhlY3V0ZWQuXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZHVtbXkuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWR1bW15LmMKaW5kZXggNmE5ZjA4ZC4uMjQyMzc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZHVtbXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkdW1teS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKICNpbmNsdWRlICJtZWR1bW15LmgiCiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19pcnFfc3RhcnQobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9faXJxX3N0YXJ0KG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCWludCBzdWJkZXZpY2UsCiAJCQkJaW50IGNoYW5uZWwsCkBAIC01OCw3ICs1OCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19pcnFfd2FpdChtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19pcnFfd2FpdChtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCSAgICAgICBpbnQgc3ViZGV2aWNlLAogCQkJICAgICAgIGludCBjaGFubmVsLApAQCAtNjksNyArNjksNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9faXJxX3N0b3AobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9faXJxX3N0b3AobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkgICAgICAgaW50IHN1YmRldmljZSwgaW50IGNoYW5uZWwsIGludCBmbGFncykKIHsKQEAgLTc3LDE0ICs3NywxNCBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fcmVzZXRfZGV2aWNlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3Jlc2V0X2RldmljZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3Jlc2V0X3N1YmRldmljZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19yZXNldF9zdWJkZXZpY2UobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHN1YmRldmljZSwgaW50IGZsYWdzKQogewpAQCAtOTIsNyArOTIsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc2luZ2xlX2NvbmZpZyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zaW5nbGVfY29uZmlnKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHN1YmRldmljZSwKIAkJCQkgICAgaW50IGNoYW5uZWwsCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3NpbmdsZV9yZWFkKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3NpbmdsZV9yZWFkKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICBpbnQgc3ViZGV2aWNlLAogCQkJCSAgaW50IGNoYW5uZWwsCkBAIC0xMTUsNyArMTE1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3NpbmdsZV93cml0ZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zaW5nbGVfd3JpdGUobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgaW50IHN1YmRldmljZSwKIAkJCQkgICBpbnQgY2hhbm5lbCwKQEAgLTEyNSwxOSArMTI1LDE5IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fY29uZmlnKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9jb25maWcobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3ViZGV2aWNlLAotCQkJCSAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgaW50IGNvdW50LAotCQkJCSAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJaW50IHN1YmRldmljZSwKIAkJCQkJaW50IHRpbWVvdXQsIGludCAqY291bnQsIGludCBmbGFncykKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3JlYWQobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3JlYWQobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgIGludCBzdWJkZXZpY2UsCiAJCQkJICBpbnQgcmVhZF9tb2RlLApAQCAtMTU2LDcgKzE1Niw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fc3RhcnQobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3N0YXJ0KG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgIGludCBzdWJkZXZpY2UsCiAJCQkJICAgaW50IHN0YXJ0X21vZGUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMTY1LDcgKzE2NSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fc3RhdHVzKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9zdGF0dXMobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3ViZGV2aWNlLAogCQkJCSAgICBpbnQgd2FpdCwKQEAgLTE3NSw3ICsxNzUsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3N0b3AobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3N0b3AobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgIGludCBzdWJkZXZpY2UsIGludCBzdG9wX21vZGUsIGludCBmbGFncykKIHsKQEAgLTE4Myw3ICsxODMsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3dyaXRlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV93cml0ZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICBpbnQgc3ViZGV2aWNlLAogCQkJCSAgIGludCB3cml0ZV9tb2RlLApAQCAtMTkzLDE0ICsxOTMsMTQgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2xvY2tfZGV2aWNlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2xvY2tfZGV2aWNlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgbG9jaywgaW50IGZsYWdzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2xvY2tfc3ViZGV2aWNlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2xvY2tfc3ViZGV2aWNlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICBpbnQgc3ViZGV2aWNlLCBpbnQgbG9jaywgaW50IGZsYWdzKQogewpAQCAtMjA4LDcgKzIwOCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9kZXNjcmlwdGlvbl9kZXZpY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfZGVzY3JpcHRpb25fZGV2aWNlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCSAgICBjaGFyICoqZGVzY3JpcHRpb24pCiB7CiAJbWVkdW1teV9kZXZpY2VfdCAqaW5zdGFuY2UgPSAobWVkdW1teV9kZXZpY2VfdCAqKSBkZXZpY2U7CkBAIC02MDIsNyArNjAyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X2luZm9fZGV2aWNlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X2luZm9fZGV2aWNlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgICBpbnQgKnZlbmRvcl9pZCwKIAkJCQkgICAgIGludCAqZGV2aWNlX2lkLAogCQkJCSAgICAgaW50ICpzZXJpYWxfbm8sCkBAIC02MzIsMTQgKzYzMiwxNCBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbmFtZV9kZXZpY2VfZHJpdmVyKG1lX2RldmljZV90ICogZGV2aWNlLCBjaGFyICoqbmFtZSkKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9uYW1lX2RldmljZV9kcml2ZXIobWVfZGV2aWNlX3QgKmRldmljZSwgY2hhciAqKm5hbWUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpuYW1lID0gTUVEVU1NWV9OQU1FX0RSSVZFUjsKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X25hbWVfZGV2aWNlKG1lX2RldmljZV90ICogZGV2aWNlLCBjaGFyICoqbmFtZSkKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9uYW1lX2RldmljZShtZV9kZXZpY2VfdCAqZGV2aWNlLCBjaGFyICoqbmFtZSkKIHsKIAltZWR1bW15X2RldmljZV90ICppbnN0YW5jZSA9IChtZWR1bW15X2RldmljZV90ICopIGRldmljZTsKIApAQCAtMTAxMiw0MSArMTAxMiw0MSBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbnVtYmVyX3N1YmRldmljZXMobWVfZGV2aWNlX3QgKiBkZXZpY2UsIGludCAqbnVtYmVyKQorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X251bWJlcl9zdWJkZXZpY2VzKG1lX2RldmljZV90ICpkZXZpY2UsIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJIGludCBzdWJkZXZpY2UsIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgICAgICBpbnQgc3ViZGV2aWNlLCBpbnQgdW5pdCwgaW50ICpjb3VudCkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQlpbnQgc3ViZGV2aWNlLCBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQlpbnQgc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfc3ViZGV2aWNlX2NhcHNfYXJncyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9zdWJkZXZpY2VfY2Fwc19hcmdzKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCSAgICAgaW50IHN1YmRldmljZSwKIAkJCQkJICAgICBpbnQgY2FwLCBpbnQgKmFyZ3MsIGludCBjb3VudCkKIHsKQEAgLTEwNTQsNyArMTA1NCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX05PVF9TVVBQT1JURUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9zdWJkZXZpY2VfYnlfdHlwZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9zdWJkZXZpY2VfYnlfdHlwZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQkgICBpbnQgc3RhcnRfc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgdHlwZSwKIAkJCQkJICAgaW50IHN1YnR5cGUsIGludCAqc3ViZGV2aWNlKQpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQkgIGludCBzdWJkZXZpY2UsCiAJCQkJCSAgaW50IHVuaXQsCiAJCQkJCSAgaW50ICptaW4sCkBAIC0xMDczLDcgKzEwNzMsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfcmFuZ2VfaW5mbyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9yYW5nZV9pbmZvKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgIGludCBzdWJkZXZpY2UsCiAJCQkJICAgIGludCByYW5nZSwKIAkJCQkgICAgaW50ICp1bml0LCBpbnQgKm1pbiwgaW50ICptYXgsIGludCAqbWF4ZGF0YSkKQEAgLTEwODIsMTcgKzEwODIsMTcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotaW50IG1lZHVtbXlfcXVlcnlfdGltZXIobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitpbnQgbWVkdW1teV9xdWVyeV90aW1lcihtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJaW50IHN1YmRldmljZSwKIAkJCWludCB0aW1lciwKIAkJCWludCAqYmFzZV9mcmVxdWVuY3ksCi0JCQl1aW50NjRfdCAqIG1pbl90aWNrcywgdWludDY0X3QgKiBtYXhfdGlja3MpCisJCQl1aW50NjRfdCAqbWluX3RpY2tzLCB1aW50NjRfdCAqbWF4X3RpY2tzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3ZlcnNpb25fZGV2aWNlX2RyaXZlcihtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV92ZXJzaW9uX2RldmljZV9kcml2ZXIobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJICAgICAgIGludCAqdmVyc2lvbikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xMTAxLDcgKzExMDEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgdm9pZCBtZWR1bW15X2Rlc3RydWN0b3IobWVfZGV2aWNlX3QgKiBkZXZpY2UpCitzdGF0aWMgdm9pZCBtZWR1bW15X2Rlc3RydWN0b3IobWVfZGV2aWNlX3QgKmRldmljZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJa2ZyZWUoZGV2aWNlKTsKQEAgLTExMTMsNyArMTExMyw3IEBACiAJCQkgICAgaW50IGJ1c190eXBlLAogCQkJICAgIGludCBidXNfbm8sCiAJCQkgICAgaW50IGRldl9ubywKLQkJCSAgICBpbnQgZnVuY19ubywgbWVkdW1teV9kZXZpY2VfdCAqIGluc3RhbmNlKQorCQkJICAgIGludCBmdW5jX25vLCBtZWR1bW15X2RldmljZV90ICppbnN0YW5jZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAKQEAgLTExMjksMTQgKzExMjksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2NvbmZpZ19sb2FkKG1lX2RldmljZV90ICogZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkgICAgICAgbWVfY2ZnX2RldmljZV9lbnRyeV90ICogY29uZmlnKQorc3RhdGljIGludCBtZWR1bW15X2NvbmZpZ19sb2FkKG1lX2RldmljZV90ICpkZXZpY2UsIHN0cnVjdCBmaWxlICpmaWxlcCwKKwkJCSAgICAgICBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKmNvbmZpZykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9kZXZpY2VfaW5zdGFuY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UpCitzdGF0aWMgaW50IGluaXRfZGV2aWNlX2luc3RhbmNlKG1lX2RldmljZV90ICpkZXZpY2UpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCkBAIC0xMjM4LDYgKzEyMzgsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBpbnN0YW5jZTsKIH0KK0VYUE9SVF9TWU1CT0wobWVkdW1teV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0xMjYxLDYgKzEyNjIsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTWVpbGhhdXMgTUUtRFVNTVkgRGV2aWNlcyIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLURVTU1ZIERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWVkdW1teV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVtYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVtYWluLmMKaW5kZXggYjA5ZDFhNi4uZmQ5ZjA3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZW1haW4uYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogLy8jaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KIApAQCAtNTYsNiArNTYsNyBAQAogCiAjaWZkZWYgQk9TQ0gKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWVfYm9zY2hfZncgPSAwOworRVhQT1JUX1NZTUJPTChtZV9ib3NjaF9mdyk7CiAKICMgaWZkZWYgbW9kdWxlX3BhcmFtCiBtb2R1bGVfcGFyYW0obWVfYm9zY2hfZncsIGludCwgU19JUlVHTyk7CkBAIC03OSw3ICs4MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqbWVfZmlsZXAgPSBOVUxMOwogc3RhdGljIGludCBtZV9jb3VudCA9IDA7Ci1zdGF0aWMgc3BpbmxvY2tfdCBtZV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIERFRklORV9TUElOTE9DSyhtZV9sb2NrKTsKIHN0YXRpYyBERUNMQVJFX1JXU0VNKG1lX3J3c2VtKTsKIAogLyogQm9hcmQgaW5zdGFuY2VzIGFyZSBrZXB0IGluIGEgZ2xvYmFsIGxpc3QgKi8KQEAgLTkwLDcgKzkxLDcgQEAKIAogc3RhdGljIGludCBtZV9wcm9iZV9wY2koc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIG1lX3JlbW92ZV9wY2koc3RydWN0IHBjaV9kZXYgKmRldik7Ci1zdGF0aWMgaW50IGluc2VydF90b19kZXZpY2VfbGlzdChtZV9kZXZpY2VfdCAqIG5fZGV2aWNlKTsKK3N0YXRpYyBpbnQgaW5zZXJ0X3RvX2RldmljZV9saXN0KG1lX2RldmljZV90ICpuX2RldmljZSk7CiBzdGF0aWMgaW50IHJlcGxhY2Vfd2l0aF9kdW1teShpbnQgdmVuZG9yX2lkLCBpbnQgZGV2aWNlX2lkLCBpbnQgc2VyaWFsX25vKTsKIHN0YXRpYyB2b2lkIGNsZWFyX2RldmljZV9saXN0KHZvaWQpOwogc3RhdGljIGludCBtZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGVfcHRyLCBzdHJ1Y3QgZmlsZSAqZmlsZXApOwpAQCAtNDcyLDcgKzQ3Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbGVhc2VfaW5zdGFuY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UpCitzdGF0aWMgdm9pZCByZWxlYXNlX2luc3RhbmNlKG1lX2RldmljZV90ICpkZXZpY2UpCiB7CiAJaW50IHZlbmRvcl9pZDsKIAlpbnQgZGV2aWNlX2lkOwpAQCAtNTE3LDcgKzUxOCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGluc2VydF90b19kZXZpY2VfbGlzdChtZV9kZXZpY2VfdCAqIG5fZGV2aWNlKQorc3RhdGljIGludCBpbnNlcnRfdG9fZGV2aWNlX2xpc3QobWVfZGV2aWNlX3QgKm5fZGV2aWNlKQogewogCW1lX2RldmljZV90ICpvX2RldmljZSA9IE5VTEw7CiAKQEAgLTc2Miw3ICs3NjMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWVfbG9ja19kcml2ZXIoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9sb2NrX2RyaXZlcl90ICogYXJnKQorc3RhdGljIGludCBtZV9sb2NrX2RyaXZlcihzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2xvY2tfZHJpdmVyX3QgKmFyZykKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtODA3LDcgKzgwOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbWVfcXVlcnlfdmVyc2lvbl9tYWluX2RyaXZlcihzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJCW1lX3F1ZXJ5X3ZlcnNpb25fbWFpbl9kcml2ZXJfdCAqIGFyZykKKwkJCQkJbWVfcXVlcnlfdmVyc2lvbl9tYWluX2RyaXZlcl90ICphcmcpCiB7CiAJaW50IGVycjsKIAltZV9xdWVyeV92ZXJzaW9uX21haW5fZHJpdmVyX3Qga2FyZzsKQEAgLTgyOCw3ICs4MjksNyBAQAogfQogCiBzdGF0aWMgaW50IG1lX2NvbmZpZ19sb2FkX2RldmljZShzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqIGthcmcsIGludCBkZXZpY2Vfbm8pCisJCQkJIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqa2FyZywgaW50IGRldmljZV9ubykKIHsKIAogCWludCBlcnIgPSBNRV9FUlJOT19TVUNDRVNTOwpAQCAtODc0LDcgKzg3NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZV9jb25maWdfbG9hZChzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2NvbmZpZ19sb2FkX3QgKiBhcmcpCitzdGF0aWMgaW50IG1lX2NvbmZpZ19sb2FkKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfY29uZmlnX2xvYWRfdCAqYXJnKQogewogCWludCBlcnI7CiAJaW50IGk7CkBAIC0xMTcwLDcgKzExNzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1lX2lvX3N0cmVhbV9zdGFydChzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2lvX3N0cmVhbV9zdGFydF90ICogYXJnKQorc3RhdGljIGludCBtZV9pb19zdHJlYW1fc3RhcnQoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9pb19zdHJlYW1fc3RhcnRfdCAqYXJnKQogewogCWludCBlcnI7CiAJaW50IGksIGs7CkBAIC0xMjkyLDcgKzEyOTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWVfaW9fc2luZ2xlKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfaW9fc2luZ2xlX3QgKiBhcmcpCitzdGF0aWMgaW50IG1lX2lvX3NpbmdsZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2lvX3NpbmdsZV90ICphcmcpCiB7CiAJaW50IGVycjsKIAlpbnQgaSwgazsKQEAgLTE0NDgsNyArMTQ0OSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZV9pb19zdHJlYW1fY29uZmlnKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfaW9fc3RyZWFtX2NvbmZpZ190ICogYXJnKQorc3RhdGljIGludCBtZV9pb19zdHJlYW1fY29uZmlnKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfaW9fc3RyZWFtX2NvbmZpZ190ICphcmcpCiB7CiAJaW50IGVycjsKIAlpbnQgayA9IDA7CkBAIC0xNTQwLDcgKzE1NDEsNyBAQAogfQogCiBzdGF0aWMgaW50IG1lX3F1ZXJ5X251bWJlcl9kZXZpY2VzKHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICBtZV9xdWVyeV9udW1iZXJfZGV2aWNlc190ICogYXJnKQorCQkJCSAgIG1lX3F1ZXJ5X251bWJlcl9kZXZpY2VzX3QgKmFyZykKIHsKIAlpbnQgZXJyOwogCW1lX3F1ZXJ5X251bWJlcl9kZXZpY2VzX3Qga2FyZzsKQEAgLTE1NjksNyArMTU3MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWVfaW9fc3RyZWFtX3N0b3Aoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9pb19zdHJlYW1fc3RvcF90ICogYXJnKQorc3RhdGljIGludCBtZV9pb19zdHJlYW1fc3RvcChzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2lvX3N0cmVhbV9zdG9wX3QgKmFyZykKIHsKIAlpbnQgZXJyOwogCWludCBpLCBrOwpAQCAtMjAxNSw4ICsyMDE2LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ2VudHJhbCBtb2R1bGUgZm9yIE1laWxoYXVzIERyaXZlciBTeXN0ZW0uIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgUENJL2NQQ0kgYm9hcmRzLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jaWZkZWYgQk9TQ0gKLS8vIEV4cG9ydCB0aGUgZmxhZyBmb3IgdGhlIEJPU0NIIGZpcm13YXJlLgotRVhQT1JUX1NZTUJPTChtZV9ib3NjaF9mdyk7Ci0jZW5kaWYgLy8gQk9TQ0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXNsaXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzbGlzdC5jCmluZGV4IDdlOGI2NmMuLmNlNDkxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXNsaXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc2xpc3QuYwpAQCAtMTE1LDcgKzExNSw3IEBACiB9CiAKIHZvaWQgbWVfc2xpc3RfYWRkX3N1YmRldmljZV90YWlsKHN0cnVjdCBtZV9zbGlzdCAqc2xpc3QsCi0JCQkJIG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlKQorCQkJCSBtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlKQogewogCVBERUJVR19MT0NLUygiY2FsbGVkLlxuIik7CiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXJldHVybiBzdWJkZXZpY2U7CiB9CiAKLWludCBtZV9zbGlzdF9pbml0KG1lX3NsaXN0X3QgKiBzbGlzdCkKK2ludCBtZV9zbGlzdF9pbml0KG1lX3NsaXN0X3QgKnNsaXN0KQogewogCVBERUJVR19MT0NLUygiY2FsbGVkLlxuIik7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG1lX3NsaXN0X2RlaW5pdChtZV9zbGlzdF90ICogc2xpc3QpCit2b2lkIG1lX3NsaXN0X2RlaW5pdChtZV9zbGlzdF90ICpzbGlzdCkKIHsKIAogCXN0cnVjdCBsaXN0X2hlYWQgKnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzbG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc2xvY2suYwppbmRleCA1MjMwYjg5Li5hYmNkYjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzbG9jay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXNsb2NrLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCVBERUJVR19MT0NLUygiZXhlY3V0ZWQuXG4iKTsKIH0KIAotaW50IG1lX3Nsb2NrX2luaXQobWVfc2xvY2tfdCAqIHNsb2NrKQoraW50IG1lX3Nsb2NrX2luaXQobWVfc2xvY2tfdCAqc2xvY2spCiB7CiAJUERFQlVHX0xPQ0tTKCJleGVjdXRlZC5cbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzdWJkZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXN1YmRldmljZS5jCmluZGV4IDk4ZDRmMWYuLmIyZTk1NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXN1YmRldmljZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXN1YmRldmljZS5jCkBAIC0xMDEsOSArMTAxLDkgQEAKIAogc3RhdGljIGludCBtZV9zdWJkZXZpY2VfaW9fc3RyZWFtX2NvbmZpZyhzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UsCiAJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJCSBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkJIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJCSBpbnQgY291bnQsCi0JCQkJCSBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkJIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJCSBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX05PVF9TVVBQT1JURUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVfc3ViZGV2aWNlX2xvY2tfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZV9zdWJkZXZpY2VfbG9ja19zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgbG9jaywgaW50IGZsYWdzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTIzNSw3ICsyMzUsNyBAQAogfQogCiBzdGF0aWMgaW50IG1lX3N1YmRldmljZV9jb25maWdfbG9hZChzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UsCi0JCQkJICAgIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqIGNvbmZpZykKKwkJCQkgICAgbWVfY2ZnX2RldmljZV9lbnRyeV90ICpjb25maWcpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJa2ZyZWUoc3ViZGV2aWNlKTsKIH0KIAotaW50IG1lX3N1YmRldmljZV9pbml0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlKQoraW50IG1lX3N1YmRldmljZV9pbml0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UpCiB7CiAJaW50IGVycjsKIApAQCAtMzA4LDcgKzMwOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbWVfc3ViZGV2aWNlX2RlaW5pdChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSkKK3ZvaWQgbWVfc3ViZGV2aWNlX2RlaW5pdChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAltZV9zdWJkZXZpY2VfaW9fcmVzZXRfc3ViZGV2aWNlKHN1YmRldmljZSwgTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXRlbXBsX2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21ldGVtcGxfZGV2aWNlLmMKaW5kZXggZTQ4NjMyZC4uYmRhZjZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21ldGVtcGxfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21ldGVtcGxfZGV2aWNlLmMKQEAgLTEwOSw2ICsxMDksNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZXRlbXBsX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWV0ZW1wbF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMTMyLDYgKzEzMywzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBUZW1wbGF0ZSBEZXZpY2UiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBUZW1wbGF0ZSBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1ldGVtcGxfcGNpX2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXRlbXBsX3N1Yi5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21ldGVtcGxfc3ViLmMKaW5kZXggZjFkNjVkOC4uYjVhNmE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21ldGVtcGxfc3ViLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21ldGVtcGxfc3ViLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtNjgsNyArNjgsNyBAQAogCWtmcmVlKGluc3RhbmNlKTsKIH0KIAotc3RhdGljIGludCBtZXRlbXBsX3N1Yl9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1ldGVtcGxfc3ViX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTc2LDcgKzc2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZXRlbXBsX3N1Yl9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWV0ZW1wbF9zdWJfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTg1LDcgKzg1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZXRlbXBsX3N1Yl9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWV0ZW1wbF9zdWJfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC05NSw3ICs5NSw3IEBACiAKIG1ldGVtcGxfc3ViX3N1YmRldmljZV90ICptZXRlbXBsX3N1Yl9jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJCSB1bnNpZ25lZCBpbnQgc3ViX2lkeCwKLQkJCQkJCSBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJCSBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1ldGVtcGxfc3ViX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9taW1pby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21pbWlvL0tjb25maWcKaW5kZXggYzBiYTRjOC4uNTA1ZGNiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21pbWlvL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL21pbWlvL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgSU5QVVRfTUlNSU8KIAl0cmlzdGF0ZSAiTWltaW8gWGkgaW50ZXJhY3RpdmUgd2hpdGVib2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKIAlkZWZhdWx0IE4KIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIE1pbWlvIFhpIGludGVyYWN0aXZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvYW1zZHUuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9hbXNkdS5jCmluZGV4IGM5MTIzZDUuLjAzMjEyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9hbXNkdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9hbXNkdS5jCkBAIC0zNCw1MyArMzQsNTMgQEAKIC8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXpidWZfdCogemZHZXRBbXNkdVN1YkZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIG9mZnNldCkKK3pidWZfdCAqemZHZXRBbXNkdVN1YkZyYW1lKHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdTE2X3QgKm9mZnNldCkKIHsKLSAgICB1MTZfdCBzdWJmcmFtZUxlbjsKLSAgICB1MTZfdCBhbXNkdUxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOwotICAgIHpidWZfdCogbmV3QnVmOworCXUxNl90IHN1YmZyYW1lTGVuOworCXUxNl90IGFtc2R1TGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisJemJ1Zl90ICpuZXdCdWY7CiAKLSAgICBaTV9QRVJGT1JNQU5DRV9SWF9BTVNEVShkZXYsIGJ1ZiwgYW1zZHVMZW4pOworCVpNX1BFUkZPUk1BTkNFX1JYX0FNU0RVKGRldiwgYnVmLCBhbXNkdUxlbik7CiAKLSAgICAvKiBWZXJpZnkgQS1NU0RVIGxlbmd0aCAqLwotICAgIGlmIChhbXNkdUxlbiA8ICgqb2Zmc2V0ICsgMTQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorCS8qIFZlcmlmeSBBLU1TRFUgbGVuZ3RoICovCisJaWYgKGFtc2R1TGVuIDwgKCpvZmZzZXQgKyAxNCkpCisJCXJldHVybiBOVUxMOwogCi0gICAgLyogTG9jYXRlIEEtTVNEVSBzdWJmcmFtZSBieSBvZmZzZXQgYW5kIHZlcmlmeSBzdWJmcmFtZSBsZW5ndGggKi8KLSAgICBzdWJmcmFtZUxlbiA9ICh6bXdfYnVmX3JlYWRiKGRldiwgYnVmLCAqb2Zmc2V0ICsgMTIpIDw8IDgpICsKLSAgICAgICAgICAgICAgICAgIHptd19idWZfcmVhZGIoZGV2LCBidWYsICpvZmZzZXQgKyAxMyk7Ci0gICAgaWYgKHN1YmZyYW1lTGVuID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisJLyogTG9jYXRlIEEtTVNEVSBzdWJmcmFtZSBieSBvZmZzZXQgYW5kIHZlcmlmeSBzdWJmcmFtZSBsZW5ndGggKi8KKwlzdWJmcmFtZUxlbiA9ICh6bXdfYnVmX3JlYWRiKGRldiwgYnVmLCAqb2Zmc2V0ICsgMTIpIDw8IDgpICsKKwkJem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgKm9mZnNldCArIDEzKTsKIAotICAgIC8qIFZlcmlmeSBBLU1TRFUgc3ViZnJhbWUgbGVuZ3RoICovCi0gICAgaWYgKCgqb2Zmc2V0KzE0K3N1YmZyYW1lTGVuKSA8PSBhbXNkdUxlbikKLSAgICB7Ci0gICAgICAgIC8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciAqLwotICAgICAgICBpZiAoKG5ld0J1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgMjQrMitzdWJmcmFtZUxlbikpICE9IE5VTEwpCi0gICAgICAgIHsKLSNpZmRlZiBaTV9FTkFCTEVfTkFUSVZFX1dJRkkKLSAgICAgICAgICAgIC8qIENvcHkgYW5kIGNvbnZlcnQgc3ViZnJhbWUgdG8gd2xhbiBmcmFtZSBmb3JtYXQgKi8KLSAgICAgICAgICAgIC8qIFNIQUxMIE5PVCBJTkNMVURFIFFPUyBhbmQgQU1TRFUgaGVhZGVyLiBSYXkgMjAwNzA4MDcgRm9yIFZpc3RhICovCi0gICAgICAgICAgICB6ZlJ4QnVmZmVyQ29weShkZXYsIG5ld0J1ZiwgYnVmLCAwLCAwLCAyNCk7Ci0gICAgICAgICAgICB6ZlJ4QnVmZmVyQ29weShkZXYsIG5ld0J1ZiwgYnVmLCAyNCwgKm9mZnNldCsxNCwgc3ViZnJhbWVMZW4pOwotICAgICAgICAgICAgemZ3QnVmU2V0U2l6ZShkZXYsIG5ld0J1ZiwgMjQrc3ViZnJhbWVMZW4pOwotI2Vsc2UKLSAgICAgICAgICAgIC8qIENvcHkgc3ViZnJhbWUgdG8gbmV3IGJ1ZmZlciAqLwotICAgICAgICAgICAgemZSeEJ1ZmZlckNvcHkoZGV2LCBuZXdCdWYsIGJ1ZiwgMCwgKm9mZnNldCwgMTQrc3ViZnJhbWVMZW4pOwotICAgICAgICAgICAgemZ3QnVmU2V0U2l6ZShkZXYsIG5ld0J1ZiwgMTQrc3ViZnJhbWVMZW4pOwotI2VuZGlmCi0gICAgICAgICAgICAvKiBVcGRhdGUgb2Zmc2V0ICovCi0gICAgICAgICAgICAqb2Zmc2V0ICs9ICgoKDE0K3N1YmZyYW1lTGVuKSszKSAmIDB4ZmZmYyk7CisJaWYgKHN1YmZyYW1lTGVuID09IDApCisJCXJldHVybiBOVUxMOwogCi0gICAgICAgICAgICAvKiBSZXR1cm4gYnVmZmVyIHBvaW50ZXIgKi8KLSAgICAgICAgICAgIHJldHVybiBuZXdCdWY7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7CisJLyogVmVyaWZ5IEEtTVNEVSBzdWJmcmFtZSBsZW5ndGggKi8KKwlpZiAoKCpvZmZzZXQrMTQrc3ViZnJhbWVMZW4pIDw9IGFtc2R1TGVuKSB7CisJCS8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciAqLworCQluZXdCdWYgPSB6ZndCdWZBbGxvY2F0ZShkZXYsIDI0KzIrc3ViZnJhbWVMZW4pOworCQlpZiAobmV3QnVmICE9IE5VTEwpIHsKKwkJCSNpZmRlZiBaTV9FTkFCTEVfTkFUSVZFX1dJRkkKKwkJCS8qIENvcHkgYW5kIGNvbnZlcnQgc3ViZnJhbWUgdG8gd2xhbiBmcmFtZSBmb3JtYXQKKwkJCSogU0hBTEwgTk9UIElOQ0xVREUgUU9TIGFuZCBBTVNEVSBoZWFkZXIuCisJCQkqIFJheSAyMDA3MDgwNyBGb3IgVmlzdGEKKwkJCSovCisJCQl6ZlJ4QnVmZmVyQ29weShkZXYsIG5ld0J1ZiwgYnVmLCAwLCAwLCAyNCk7CisJCQl6ZlJ4QnVmZmVyQ29weShkZXYsIG5ld0J1ZiwgYnVmLCAyNCwgKm9mZnNldCsxNCwKKwkJCQkJc3ViZnJhbWVMZW4pOworCQkJemZ3QnVmU2V0U2l6ZShkZXYsIG5ld0J1ZiwgMjQrc3ViZnJhbWVMZW4pOworCQkJI2Vsc2UKKwkJCS8qIENvcHkgc3ViZnJhbWUgdG8gbmV3IGJ1ZmZlciAqLworCQkJemZSeEJ1ZmZlckNvcHkoZGV2LCBuZXdCdWYsIGJ1ZiwgMCwgKm9mZnNldCwKKwkJCQkJMTQrc3ViZnJhbWVMZW4pOworCQkJemZ3QnVmU2V0U2l6ZShkZXYsIG5ld0J1ZiwgMTQrc3ViZnJhbWVMZW4pOworCQkJI2VuZGlmCisJCQkvKiBVcGRhdGUgb2Zmc2V0ICovCisJCQkqb2Zmc2V0ICs9ICgoKDE0K3N1YmZyYW1lTGVuKSszKSAmIDB4ZmZmYyk7CisKKwkJCS8qIFJldHVybiBidWZmZXIgcG9pbnRlciAqLworCQkJcmV0dXJuIG5ld0J1ZjsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKIH0KIAogCkBAIC0xMDEsMzQgKzEwMSwyOSBAQAogLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4yICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCB6ZkRlQW1zZHUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCB2YXAsIHU4X3QgZW5jcnlNb2RlKQordm9pZCB6ZkRlQW1zZHUoemRldl90ICpkZXYsIHpidWZfdCAqYnVmLCB1MTZfdCB2YXAsIHU4X3QgZW5jcnlNb2RlKQogewotICAgIHUxNl90IG9mZnNldCA9IFpNX1NJWkVfT0ZfV0xBTl9EQVRBX0hFQURFUitaTV9TSVpFX09GX1FPU19DVFJMOwotICAgIHpidWZfdCogc3ViZnJhbWVCdWY7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOworCXUxNl90IG9mZnNldCA9IFpNX1NJWkVfT0ZfV0xBTl9EQVRBX0hFQURFUitaTV9TSVpFX09GX1FPU19DVFJMOworCXpidWZfdCAqc3ViZnJhbWVCdWY7CisJem13X2dldF93bGFuX2RldihkZXYpOwogCi0gICAgWk1fQlVGRkVSX1RSQUNFKGRldiwgYnVmKQorCVpNX0JVRkZFUl9UUkFDRShkZXYsIGJ1ZikKIAotICAgIGlmIChlbmNyeU1vZGUgPT0gWk1fQUVTIHx8IGVuY3J5TW9kZSA9PSBaTV9US0lQKQotICAgIHsKLSAgICAgICAgb2Zmc2V0ICs9IChaTV9TSVpFX09GX0lWICsgWk1fU0laRV9PRl9FWFRfSVYpOwotICAgIH0KLSAgICBlbHNlIGlmIChlbmNyeU1vZGUgPT0gWk1fV0VQNjQgfHwgZW5jcnlNb2RlID09IFpNX1dFUDEyOCkKLSAgICB7Ci0gICAgICAgIG9mZnNldCArPSBaTV9TSVpFX09GX0lWOwotICAgIH0KKwlpZiAoZW5jcnlNb2RlID09IFpNX0FFUyB8fCBlbmNyeU1vZGUgPT0gWk1fVEtJUCkKKwkJb2Zmc2V0ICs9IChaTV9TSVpFX09GX0lWICsgWk1fU0laRV9PRl9FWFRfSVYpOworCWVsc2UgaWYgKGVuY3J5TW9kZSA9PSBaTV9XRVA2NCB8fCBlbmNyeU1vZGUgPT0gWk1fV0VQMTI4KQorCQlvZmZzZXQgKz0gWk1fU0laRV9PRl9JVjsKIAotICAgIC8qIFJlcGVhdGx5IGNhbGxpbmcgemZHZXRBbXNkdVN1YkZyYW1lKCkgdW50aWwgTlVMTCByZXR1cm5lZCAqLwotICAgIHdoaWxlICgoc3ViZnJhbWVCdWYgPSB6ZkdldEFtc2R1U3ViRnJhbWUoZGV2LCBidWYsICZvZmZzZXQpKSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgd2QtPmNvbW1UYWxseS5Ob3RpZnlORElTUnhGcm1DbnQrKzsKLSAgICAgICAgaWYgKHdkLT56ZmNiUmVjdkV0aCAhPSBOVUxMKQotICAgIAl7Ci0gICAgICAgICAgICB3ZC0+emZjYlJlY3ZFdGgoZGV2LCBzdWJmcmFtZUJ1ZiwgKHU4X3QpdmFwKTsKLSAgICAgICAgICAgIFpNX1BFUkZPUk1BTkNFX1JYX01TRFUoZGV2LCB3ZC0+dGljayk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CiAKLSAgICByZXR1cm47CisJLyogUmVwZWF0bHkgY2FsbGluZyB6ZkdldEFtc2R1U3ViRnJhbWUoKSB1bnRpbCBOVUxMIHJldHVybmVkICovCisJd2hpbGUgKChzdWJmcmFtZUJ1ZiA9IHpmR2V0QW1zZHVTdWJGcmFtZShkZXYsIGJ1ZiwgJm9mZnNldCkpICE9IE5VTEwpIHsKKwkJd2QtPmNvbW1UYWxseS5Ob3RpZnlORElTUnhGcm1DbnQrKzsKKwkJaWYgKHdkLT56ZmNiUmVjdkV0aCAhPSBOVUxMKSB7CisJCQl3ZC0+emZjYlJlY3ZFdGgoZGV2LCBzdWJmcmFtZUJ1ZiwgKHU4X3QpdmFwKTsKKwkJCVpNX1BFUkZPUk1BTkNFX1JYX01TRFUoZGV2LCB3ZC0+dGljayk7CisJCX0KKwl9CisJemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisKKwlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tc3RhLmMKaW5kZXggYzc1YmExMS4uYjI4YTRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW1zdGEuYwpAQCAtNzI0LDYgKzcyNCw5IEBACiAvKiBwcm9jZXNzIDgwMi4xMWggRHluYW1pYyBGcmVxdWVuY3kgU2VsZWN0aW9uICovCiB2b2lkIHpmU3RhVXBkYXRlRG90MTFIREZTKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKIHsKKyAgICAvL3U4X3QgICAgbGVuZ3RoLCBjaGFubmVsLCBpczVHOworICAgIHUxNl90ICAgb2Zmc2V0OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwogCiAgICAgLyoKQEAgLTczNiw4ICs3MzksNiBAQAogICAgIHxWYWx1ZSB8ICAgMzcgICAgIHwgIDMgICB8ICAgICAgIDAgb3IgMSAgICAgIHx1bnNpZ25lZCBpbnRlZ2VyICB8dW5zaWduZWQgaW50ZWdlciAgICB8CiAgICAgKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICAqLwotICAgIC8vdThfdCAgICBsZW5ndGgsIGNoYW5uZWwsIGlzNUc7Ci0gICAgdTE2X3QgICBvZmZzZXQ7CiAKICAgICAvKiBnZXQgRUlEKENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCkgKi8KICAgICBpZiAoIChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRSkpID09IDB4ZmZmZiApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY29pZC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NvaWQuYwppbmRleCA2MDA3ZjMxLi44OGY4ZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY29pZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jb2lkLmMKQEAgLTIxNCwxMCArMjE0LDEwIEBACiAKIHUzMl90IHpmaVdsYW5RdWVyeVRyYW5zbWl0UG93ZXIoemRldl90KiBkZXYpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAgICAgdTMyX3QgcmV0ID0gMDsKIAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKwogICAgIGlmICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpIHsKICAgICAgICAgcmV0ID0gd2QtPnN0YS5jb25uUG93ZXJJbkhhbGZEYm07CiAgICAgfSBlbHNlIHsKQEAgLTE0MzIsMTIgKzE0MzIsMTIgQEAKIAogdTMyX3QgemZpV2xhblF1ZXJ5RnJlcXVlbmN5QXR0cmlidXRlKHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxKQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQogICAgIHU4X3QgIGk7CiAgICAgdTE2X3QgZnJlcXVlbmN5ID0gKHUxNl90KSAoZnJlcS8xMDAwKTsKICAgICB1MzJfdCByZXQgPSAwOwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCiAgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCiAgICAgewogICAgICAgICBpZiAoIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWwgPT0gZnJlcXVlbmN5ICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jd20uYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jd20uYwppbmRleCA4MGYxMTQxLi4xYmQwYjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3dtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N3bS5jCkBAIC03NSw5ICs3NSw5IEBACiAKICAgICBpZigod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgfHwgd2QtPndsYW5Nb2RlID09IFpNX01PREVfUFNFVURPIHx8CiAgICAgICAgIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MpKSB7Ci0gICAgICAgIGlmICh3ZC0+c3RhLmllLkh0Q2FwLkh0Q2FwSW5mbyAmJiBIVENBUF9TdXBDaGFubmVsV2lkdGhTZXQgIT0gMCAmJgotICAgICAgICAgICAgd2QtPnN0YS5pZS5IdEluZm8uQ2hhbm5lbEluZm8gJiYgRXh0SHRDYXBfUmVjb21UeFdpZHRoU2V0ICE9IDAgJiYKLSAgICAgICAgICAgICh3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyAmJiBFeHRIdENhcF9FeHRDaGFubmVsT2Zmc2V0QWJvdmUpID09IDEpIHsKKyAgICAgICAgaWYgKCh3ZC0+c3RhLmllLkh0Q2FwLkh0Q2FwSW5mbyAmIEhUQ0FQX1N1cENoYW5uZWxXaWR0aFNldCkgJiYKKyAgICAgICAgICAgICh3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyAmIEV4dEh0Q2FwX1JlY29tVHhXaWR0aFNldCkgJiYKKyAgICAgICAgICAgICh3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyAmIEV4dEh0Q2FwX0V4dENoYW5uZWxPZmZzZXRBYm92ZSkpIHsKIAogICAgICAgICAgICAgd2QtPmN3bS5jd193aWR0aCA9IENXTV9XSURUSDQwOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL290dXMvVE9ETwppbmRleCBlOTEyMjkzLi40Y2FmMDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL1RPRE8KQEAgLTEsOCArMSwxNSBAQAorSSdtIGhlc2l0YW50IHRvIGFkZCBhIFRPRE8gZmlsZSBoZXJlLCBhcyB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVycyB3b3VsZAorcmVhbGx5IGhhdmUgcGVvcGxlIGhlbHAgdGhlbSBvdXQgb24gdGhlICJjbGVhbiIgYXI5MTcwIGRyaXZlciB0aGF0IGNhbgorYmUgZm91bmQgYXQgdGhlIGxpbnV4LXdpcmVsZXNzIGRldmVsb3BlciBzaXRlLgorCitCdXQsIGlmIHlvdSB3aXNoIHRvIGNsZWFuIHVwIHRoaXMgZHJpdmVyIGluc3RlYWQsIGhlcmUncyBhIHNob3J0IGxpc3Qgb2YKK3RoaW5ncyB0aGF0IG5lZWQgdG8gYmUgZG9uZSB0byBnZXQgaXQgaW50byBhIG1vcmUgbWVyZ2FibGUgc2hhcGU6CisKIFRPRE86CiAJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCiAJLSBzcGFyc2UgY2xlYW51cHMKIAktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrCi0JLSBwcm9wZXIgbmV0d29yayBkZXZlbG9wZXIgbWFpbnRhaW5lcgorCS0gcmV2aWV3IGJ5IHRoZSB3aXJlbGVzcyBkZXZlbG9wZXIgY29tbXVuaXR5CiAKIFBsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAogTHVpcyBSb2RyaWd1ZXogPEx1aXMuUm9kcmlndWV6QEF0aGVyb3MuY29tPiBhbmQgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCmluZGV4IGJhOTViNWQuLjBhZmVjZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCkBAIC01NSwxMCArNTUsMTAgQEAKIHMzMl90IEJFQUNPTl9SU1NJKHpkZXZfdCogZGV2KQogewogICAgIHMzMl90IHJzc2k7CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKIAogICAgIHJzc2kgPSBaTV9IQUxfRVBfUk5EKEhwUHJpdi0+c3RhdHMuYXN0X25vZGVzdGF0cy5uc19hdmdicnNzaSwgWk1fSEFMX1JTU0lfRVBfTVVMVElQTElFUik7CiAKQEAgLTc0LDE2ICs3NCwxNiBAQAogewogI2RlZmluZSBOKGEpICAgICAoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQogICAgIHUzMl90IGk7Ci0KLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CiAKICAgICBjb25zdCBpbnQgdG90YWxTaXplRGVzaXJlZFtdID0geyAtNTUsIC01NSwgLTU1LCAtNTUsIC02MiB9OwogICAgIGNvbnN0IGludCBjb2Fyc2VIaWdoW10gICAgICAgPSB7IC0xNCwgLTE0LCAtMTQsIC0xNCwgLTEyIH07CiAgICAgY29uc3QgaW50IGNvYXJzZUxvd1tdICAgICAgICA9IHsgLTY0LCAtNjQsIC02NCwgLTY0LCAtNzAgfTsKICAgICBjb25zdCBpbnQgZmlycHdyW10gICAgICAgICAgID0geyAtNzgsIC03OCwgLTc4LCAtNzgsIC04MCB9OwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisKICAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQogICAgIHsKICAgICAgICAgSHBQcml2LT50b3RhbFNpemVEZXNpcmVkW2ldID0gdG90YWxTaXplRGVzaXJlZFtpXTsKQEAgLTEzOSwxMiArMTM5LDEyIEBACiB7CiAjZGVmaW5lIE4oYSkgKHNpemVvZihhKS9zaXplb2YoYVswXSkpCiAgICAgdHlwZWRlZiBzMzJfdCBUQUJMRVtdOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OworICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKLQotICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZSA9IEhwUHJpdi0+Y3VyYW5pOworICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisgICAgYW5pU3RhdGUgPSBIcFByaXYtPmN1cmFuaTsKIAogICAgIHN3aXRjaCAoY21kKQogICAgIHsKQEAgLTM0NiwxMSArMzQ2LDEwIEBACiB2b2lkIHpmSHBBbmlSZXN0YXJ0KHpkZXZfdCogZGV2KQogewogICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKLQorICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CiAgICAgYW5pU3RhdGUgPSBIcFByaXYtPmN1cmFuaTsKIAogICAgIGFuaVN0YXRlLT5saXN0ZW5UaW1lID0gMDsKQEAgLTM4NywxMCArMzg2LDEwIEBACiB7CiAgICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlOwogICAgIHMzMl90IHJzc2k7CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKIAogICAgIC8vSEFMQVNTRVJUKGNoYW4gIT0gTlVMTCk7CiAKQEAgLTQ2NiwxMCArNDY1LDEwIEBACiB7CiAgICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlOwogICAgIHMzMl90IHJzc2k7CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKIAogICAgIC8vSEFMQVNTRVJUKGNoYW4gIT0gTlVMTCk7CiAKQEAgLTUxMSwxMSArNTEwLDEwIEBACiB7CiAgICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlOwogICAgIHMzMl90IHJzc2k7CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7Ci0KKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwogICAgIGFuaVN0YXRlID0gSHBQcml2LT5jdXJhbmk7CiAKICAgICByc3NpID0gQkVBQ09OX1JTU0koZGV2KTsKQEAgLTU4NiwxMCArNTg0LDEwIEBACiAgICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlOwogICAgIHUzMl90IHR4RnJhbWVDb3VudCwgcnhGcmFtZUNvdW50LCBjeWNsZUNvdW50OwogICAgIHMzMl90IGxpc3RlblRpbWU7CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKIAogICAgIHR4RnJhbWVDb3VudCA9IDA7Ly9PU19SRUdfUkVBRChhaCwgQVJfVEZDTlQpOwogICAgIHJ4RnJhbWVDb3VudCA9IDA7Ly9PU19SRUdfUkVBRChhaCwgQVJfUkZDTlQpOwpAQCAtNjI3LDEwICs2MjUsMTAgQEAKIHsKICAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CiAgICAgLy9zMzJfdCBsaXN0ZW5UaW1lOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CiAKICAgICAvKgogICAgICAqIFNpbmNlIHdlJ3JlIGNhbGxlZCBmcm9tIGVuZCBvZiByeCB0YXNrbGV0LCB3ZSBhbHNvIGNoZWNrIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jCmluZGV4IDJlNjVjNDYuLjMyMjU4NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgIGVsc2UKICAgICB7CiAgICAgI2lmbmRlZiBaTV9PVFVTX0xJTlVYX1BIQVNFXzIKLSAgICAgICAgLyogZG9ud2xvYWQgdGhlIG5vcm1hbCBmcmltd2FyZSAqLworICAgICAgICAvKiBkb3dubG9hZCB0aGUgbm9ybWFsIGZpcm13YXJlICovCiAgICAgICAgIGlmICgocmV0ID0gemZGaXJtd2FyZURvd25sb2FkKGRldiwgKHUzMl90Kil6Y0Z3SW1hZ2UsCiAgICAgICAgICAgICAgICAgKHUzMl90KXpjRndJbWFnZVNpemUsIFpNX0ZJUk1XQVJFX1dMQU5fQUREUikpICE9IFpNX1NVQ0NFU1MpCiAgICAgICAgIHsKQEAgLTMyOCw4ICszMjgsOCBAQAogICAgIHUxNl90IG1vZGVzSW5kZXggPSAwOwogICAgIHUxNl90IGZyZXFJbmRleCA9IDA7CiAgICAgdTMyX3QgdG1wLCB0bXAxOwotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgdTMyX3QgZWVwcm9tQm9hcmREYXRhWzE1XVs2XSA9IHsKICAgICAvKiBSZWdpc3RlciAgIEEtMjAgICAgICAgIEEtMjAvNDAgICAgIEctMjAvNDAgICAgIEctMjAgICAgICAgIEctVHVyYm8gICAgKi8KICAgICAgICAgezB4OTk2NCwgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwfSwKQEAgLTM0OSw2ICszNDksOSBAQAogICAgICAgICB7MHhhMjU4LCAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDB9LAogICAgIH07CiAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CisKICAgICAvKiAjMSBTYXZlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSByZWxhdGVkIFJJRlMgcmVnaXN0ZXIgc2V0dGluZ3MgKi8KICAgICAvLygoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aXNJbml0aWFsUGh5Kys7CiAKQEAgLTEzMjQsOSArMTMyNywxMCBAQAogICAgIGludCBkZWx0YV9zbG9wZV9jb2VmZl9tYW47CiAgICAgaW50IGRlbHRhX3Nsb3BlX2NvZWZmX2V4cF9zaGdpOwogICAgIGludCBkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKIAogICAgIHptX21zZzFfc2NhbihaTV9MVl8xLCAiRnJlcXVlbmN5ID0gIiwgZnJlcXVlbmN5KTsKICAgICB6bV9tc2cxX3NjYW4oWk1fTFZfMSwgImJ3NDAgPSAiLCBidzQwKTsKQEAgLTE1NjAsOSArMTU2NCwxMCBAQAogewogICAgIHU4X3QgaTsKICAgICB1MzJfdCBrZXlbNF0gPSB7MCwgMCwgMCwgMH07CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIGZvcihpPTA7aTw0O2krKykKICAgICB7CkBAIC0xNjAxLDkgKzE2MDYsMTAgQEAKICAgICB1MzJfdCBjbWRbKFpNX01BWF9DTURfU0laRS80KV07CiAgICAgdTE2X3QgcmV0OwogICAgIHUxNl90IGk7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogI2lmIDAgICAvKiByZW1vdmUgdG8gemZDb3JlU2V0S2V5KCkgKi8KICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwpAQCAtMTY3MCw4ICsxNjc2LDEwIEBACiAgICAgdTE2X3QgbWFjQWRkclszXSA9IHswLCAwLCAwfTsKIAogICAgICNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CiAKICAgICBpZiAoIGhwUHJpdi0+ZG90MTFNb2RlID09IFpNX0hBTF84MDIxMV9NT0RFX0lCU1NfV1BBMlBTSyApCiAgICAgeyAvKiBJZiBub3Qgd3BhMnBzayAsIHVzZSB0cmFkaXRpb25hbCAqLwpAQCAtMTcwMiw4ICsxNzEwLDEwIEBACiB1MzJfdCB6ZkhwU2V0UGVyVXNlcktleSh6ZGV2X3QqIGRldiwgdThfdCB1c2VyLCB1OF90IGtleUlkLCB1OF90KiBtYWMsIHU4X3QgdHlwZSwgdTMyX3QqIGtleSwgdTMyX3QqIG1pY0tleSkKIHsKICNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CiAKICAgICBpZiAoIGhwUHJpdi0+ZG90MTFNb2RlID09IFpNX0hBTF84MDIxMV9NT0RFX0lCU1NfV1BBMlBTSyApCiAgICAgeyAvKiBJZiBub3Qgd3BhMnBzayAsIHVzZSB0cmFkaXRpb25hbCAqLwpAQCAtMTkxOCw5ICsxOTI4LDEwIEBACiAKIHUxNl90IHpmSHBTZXRBcFN0YU1vZGUoemRldl90KiBkZXYsIHU4X3QgbW9kZSkKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CiAgICAgaHBQcml2LT5kb3QxMU1vZGUgPSBtb2RlOwogCiAgICAgc3dpdGNoKG1vZGUpCkBAIC0xOTkzLDggKzIwMDQsMTAgQEAKIHU4X3QgemZIcFVwZGF0ZVFvc1BhcmFtZXRlcih6ZGV2X3QqIGRldiwgdTE2X3QqIGN3bWluVGJsLCB1MTZfdCogY3dtYXhUYmwsCiAgICAgICAgIHUxNl90KiBhaWZzVGJsLCB1MTZfdCogdHhvcFRibCkKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKIAogICAgIHptX21zZzBfbW0oWk1fTFZfMCwgInpmSGFsVXBkYXRlUW9zUGFyYW1ldGVyKCkiKTsKIApAQCAtMjI1OSw5ICsyMjcyLDExIEBACiAgICAgLy8KICAgICAvL3JldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDEyLCBaTV9DV01fUkVBRCwgMCk7CiAgICAgLy9yZXR1cm4gcmV0OwotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKIAotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6ZkNvcmVDd21CdXN5KGRldiwgemZDd21Jc0V4dENoYW5CdXN5KGhwUHJpdi0+Y3RsQnVzeSwgaHBQcml2LT5leHRCdXN5KSk7CiAKQEAgLTIyOTEsOSArMjMwNiwxMCBAQAogICovCiB1MzJfdCB6ZkhwQW5pVXBkYXRlUnNzaSh6ZGV2X3QqIGRldiwgdThfdCByc3NpKQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgaHBQcml2LT5zdGF0cy5hc3Rfbm9kZXN0YXRzLm5zX2F2Z2Jyc3NpID0gcnNzaTsKIApAQCAtMjMyNSwxMSArMjM0MSwxMiBAQAogCiB1MzJfdCB6ZkhwR2V0VHJhbnNtaXRQb3dlcih6ZGV2X3QqIGRldikKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYqICAgIGhwUHJpdiAgPSB3ZC0+aHBQcml2YXRlOworICAgIHN0cnVjdCB6c0hwUHJpdiogICAgaHBQcml2OwogICAgIHUxNl90ICAgICAgICAgICAgICAgdHBjICAgICA9IDA7CiAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2ICA9IHdkLT5ocFByaXZhdGU7CisKICAgICBpZiAoaHBQcml2LT5od0ZyZXF1ZW5jeSA8IDMwMDApIHsKICAgICAgICAgdHBjID0gaHBQcml2LT50UG93MngyZ1swXSAmIDB4M2Y7CiAgICAgICAgIHdkLT5tYXhUeFBvd2VyMiAmPSAweDNmOwpAQCAtMjM0NSwxMSArMjM2MiwxMiBAQAogCiB1OF90IHpmSHBHZXRNaW5UeFBvd2VyKHpkZXZfdCogZGV2KQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiogICAgaHBQcml2ICA9IHdkLT5ocFByaXZhdGU7CisgICAgc3RydWN0IHpzSHBQcml2KiAgICBocFByaXY7CiAgICAgdThfdCAgICAgICAgICAgICAgIHRwYyAgICAgPSAwOwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdiAgPSB3ZC0+aHBQcml2YXRlOworCiAgICAgaWYgKGhwUHJpdi0+aHdGcmVxdWVuY3kgPCAzMDAwKQogICAgIHsKICAgICAgICAgaWYod2QtPkJhbmRXaWR0aDQwKQpAQCAtMjM4MiwxMSArMjQwMCwxMiBAQAogCiB1OF90IHpmSHBHZXRNYXhUeFBvd2VyKHpkZXZfdCogZGV2KQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiogICAgaHBQcml2ICA9IHdkLT5ocFByaXZhdGU7CisgICAgc3RydWN0IHpzSHBQcml2KiAgICBocFByaXY7CiAgICAgdThfdCAgICAgICAgICAgICAgIHRwYyAgICAgPSAwOwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGhwUHJpdiAgPSB3ZC0+aHBQcml2YXRlOworCiAgICAgaWYgKGhwUHJpdi0+aHdGcmVxdWVuY3kgPCAzMDAwKQogICAgIHsKICAgICAgICAgdHBjID0gKGhwUHJpdi0+dFBvdzJ4Q2NrWzBdJjB4M2YpOwpAQCAtMjQyMSwxMSArMjQ0MCwxMyBAQAogCiB2b2lkIHpmSHBIZWFydEJlYXQoemRldl90KiBkZXYpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAgICAgdThfdCBwb2xsdXRlZCA9IDA7CiAgICAgdThfdCBhY2tUcGM7CiAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CisKICAgICAvKiBXb3JrYXJvdW5kIDogTWFrZSBPVFVTIGZpcmUgbW9yZSBiZWFjb24gaW4gYWQgaG9jIG1vZGUgaW4gMi40R0h6ICovCiAgICAgaWYgKGhwUHJpdi0+aWJzc0JjbkVuYWJsZWQgIT0gMCkKICAgICB7CkBAIC00MjE5LDggKzQyNDAsMTAgQEAKIAogdm9pZCB6ZkhwUG93ZXJTYXZlU2V0U3RhdGUoemRldl90KiBkZXYsIHU4X3QgcHNTdGF0ZSkKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKIAogCS8vRGJnUHJpbnQoIklOVE8gemZIcFBvd2VyU2F2ZVNldFN0YXRlIik7CiAKQEAgLTQyNzksOCArNDMwMiwxMCBAQAogCiB2b2lkIHpmSHBTZXRBZ2dQa3ROdW0oemRldl90KiBkZXYsIHUzMl90IG51bSkKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKIAogICAgIG51bSA9IChudW0gPDwgMTYpIHwgKDB4YSk7CiAKQEAgLTQzMTAsOCArNDMzNSwxMCBAQAogCiB2b2lkIHpmSHBTZXRTbG90VGltZSh6ZGV2X3QqIGRldiwgdThfdCB0eXBlKQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOwogCiAgICAgaWYgKHR5cGUgPT0gMCkKICAgICB7CkBAIC00Mzc2LDggKzQ0MDMsMTAgQEAKIAogdm9pZCB6ZkhwQmVnaW5TaXRlU3VydmV5KHpkZXZfdCogZGV2LCB1OF90IHN0YXR1cykKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgaWYgKCBzdGF0dXMgPT0gMSApCiAgICAgeyAvLyBDb25uZWN0ZWQKQEAgLTQ0MjEsOCArNDQ1MCwxMCBAQAogCiB2b2lkIHpmSHBGaW5pc2hTaXRlU3VydmV5KHpkZXZfdCogZGV2LCB1OF90IHN0YXR1cykKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIApAQCAtNDUyNywxNiArNDU1OCwyMCBAQAogCiB1MzJfdCB6ZkhwQ2FwYWJpbGl0eSh6ZGV2X3QqIGRldikKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgcmV0dXJuIGhwUHJpdi0+aGFsQ2FwYWJpbGl0eTsKIH0KIAogdm9pZCB6ZkhwU2V0Um9sbENhbGxUYWJsZSh6ZGV2X3QqIGRldikKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgaWYgKGhwUHJpdi0+Y2FtUm9sbENhbGxUYWJsZSAhPSAodTY0X3QpIDApCiAgICAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcmVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYwppbmRleCAzY2ZlYmE4Li5kOTg5NGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYwpAQCAtMTc3MCw4ICsxNzcwLDEwIEBACiAJUkVHX0RPTUFJTiByZDVHSHosIHJkMkdIejsKIAljb25zdCBzdHJ1Y3QgY21vZGUgKmNtOwogCXMxNl90IG5leHQ9MCxiOworCXN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCkBAIC0yNDczLDkgKzI0NzUsMTAgQEAKIAogdm9pZCB6ZkhwRGlzYWJsZURmc0NoYW5uZWwoemRldl90KiBkZXYsIHU4X3QgZGlzYWJsZUZsYWcpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCi0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAgICAgaHBQcml2LT5kaXNhYmxlRGZzQ2ggPSBkaXNhYmxlRmxhZzsKICAgICByZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBydy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYwppbmRleCBkYjdkNDk1Li5kOWZhZDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBydy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJ3LmMKQEAgLTI5LDggKzI5LDEwIEBACiAKIHZvaWQgemZJbml0Q21kUXVldWUoemRldl90KiBkZXYpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kikod2QtPmhwUHJpdmF0ZSk7CisgICAgaHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopKHdkLT5ocFByaXZhdGUpOwogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIApAQCAtNDgsOSArNTAsMTAgQEAKIHUxNl90IHpmUHV0Q21kKHpkZXZfdCogZGV2LCB1MzJfdCogY21kLCB1MTZfdCBjbWRMZW4sIHUxNl90IHNyYywgdThfdCogYnVmKQogewogICAgIHUxNl90IGk7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIC8qIE1ha2Ugc3VyZSBjb21tYW5kIGxlbmd0aCA8IFpNX01BWF9DTURfU0laRSAqLwogICAgIHptX2Fzc2VydChjbWRMZW4gPD0gWk1fTUFYX0NNRF9TSVpFKTsKQEAgLTc3LDkgKzgwLDEwIEBACiB1MTZfdCB6ZkdldENtZCh6ZGV2X3QqIGRldiwgdTMyX3QqIGNtZCwgdTE2X3QqIGNtZExlbiwgdTE2X3QqIHNyYywgdThfdCoqIGJ1ZikKIHsKICAgICB1MTZfdCBpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICBpZiAoaHBQcml2LT5jbWRUYWlsID09IGhwUHJpdi0+Y21kSGVhZCkKICAgICB7CkBAIC0xMDYsOSArMTEwLDEwIEBACiAgICAgdTE2X3QgbmNtZExlbiA9IDA7CiAgICAgdTE2X3QgY21kRmxhZyA9IDA7CiAgICAgdTE2X3QgaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIApAQCAtMTQxLDggKzE0NiwxMCBAQAogCiB2b2lkIHpmaVNlbmRDbWRDb21wKHpkZXZfdCogZGV2KQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCkBAIC0xNTgsOSArMTY1LDEwIEBACiB7CiAgICAgdTE2X3QgY21kRmxhZyA9IDA7CiAgICAgdTE2X3QgcmV0OworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCkBAIC0yMTQsOSArMjIyLDEwIEBACiAgICAgdTE2X3QgaTsKICAgICBzMzJfdCBuZjsKICAgICBzMzJfdCBub2lzZWZsb29yWzRdOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CkBAIC04MjYsOSArODM1LDEwIEBACiAgICAgdTMyX3QgY21kWyhaTV9NQVhfQ01EX1NJWkUvNCldOwogICAgIHUxNl90IGk7CiAgICAgdTE2X3QgcmV0OworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCkBAIC04OTIsOCArOTAyLDEwIEBACiAgICAgdTMyX3QgY21kWyhaTV9NQVhfQ01EX1NJWkUvNCldOwogICAgIHUxNl90IGk7CiAgICAgdTE2X3QgcmV0OworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHB1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHVzYi5jCmluZGV4IDRiNzZkZTkuLmVlOTM5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHVzYi5jCkBAIC02NCw5ICs2NCwxMCBAQAogICAgIHUzMl90IG9sZFBoeUN0cmw7CiAKICAgICB1MTZfdCB0cGMgPSAwOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgIC8qIG1tICovCiAgICAgaWYgKGhlYWRlciA9PSBOVUxMKQpAQCAtMzMwLDggKzMzMSwxMCBAQAogICAgIHUxNl90IGk7CiAgICAJdTE2X3Qgc3dscE9mZnNldDsKICNlbmRpZiAvKiAjaWYgWk1fU1dfTE9PUF9CQUNLID09IDEgKi8KKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgem1fbXNnMV90eChaTV9MVl8xLCAiemZIcFNlbmQoKSwgbGVuID0gIiwgMTIgKyBoZWFkZXJMZW4tOCArIHNuYXBMZW4gKyB6ZndCdWZHZXRTaXplKGRldiwgYnVmKSArIDQgKyA4KTsKIApAQCAtNTc2LDggKzU3OSwxMCBAQAogICAgIHUzMl90ICAgICAgICAgICAgICAgcnhNQ1M7CiAgICAgdTMyX3QgICAgICAgICAgICAgICByeEJXOwogICAgIHUzMl90ICAgICAgICAgICAgICAgcnhTRzsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgLy96bV9tc2cwX3J4KFpNX0xWXzAsICJ6ZmlVc2JSZWN2KCkiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKaW5kZXggN2E1YzFlOC4uY2UwNDIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jCkBAIC0yNSw3ICsyNSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAidXNiZHJ2LmgiCiAKQEAgLTM0LDcgKzM0LDcgQEAKICNkZWZpbmUgWkRfSU9DVExfR0VUV1BBSUUJCSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAzKQogI2lmZGVmIFpNX0VOQUJMRV9DRU5DCiAjZGVmaW5lIFpNX0lPQ1RMX0NFTkMgICAgICAgICAgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA0KQotI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyNlbmRpZiAgLyogWk1fRU5BQkxFX0NFTkMgKi8KICNkZWZpbmUgWkRfUEFSQU1fUk9BTUlORwkJICAgIDB4MDAwMQogI2RlZmluZSBaRF9QQVJBTV9QUklWQUNZCQkgICAgMHgwMDAyCiAjZGVmaW5lIFpEX1BBUkFNX1dQQQkJCSAgICAweDAwMDMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogI2lmZGVmIFpNX0VOQUJMRV9DRU5DCiAjZGVmaW5lIFA4MDIxMV9QQUNLRVRfQ0VOQ0ZMQUcJCTB4MDAwMQotI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyNlbmRpZiAgLyogWk1fRU5BQkxFX0NFTkMgKi8KICNkZWZpbmUgUDgwMjExX1BBQ0tFVF9TRVRLRVkgICAgIAkweDAwMDMKIAogI2RlZmluZSBaRF9DTURfU0VUX0VOQ1JZUFRfS0VZCQkweDAwMDEKQEAgLTYyLDIwNCArNjIsMTkwIEBACiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNlbmRpZgogCi1leHRlcm4gdTE2X3QgemZMbnhHZXRWYXBJZCh6ZGV2X3QqIGRldik7CitleHRlcm4gdTE2X3QgemZMbnhHZXRWYXBJZCh6ZGV2X3QgKmRldik7CiAKIHN0YXRpYyBjb25zdCB1MzJfdCBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbXSA9CiB7Ci0vL0V2ZW4gZWxlbWVudCBmb3IgQ2hhbm5lbCBOdW1iZXIsIE9kZCBmb3IgRnJlcXVlbmN5Ci0gICAgMzYsNTE4MCwKLSAgICA0MCw1MjAwLAotICAgIDQ0LDUyMjAsCi0gICAgNDgsNTI0MCwKLSAgICA1Miw1MjYwLAotICAgIDU2LDUyODAsCi0gICAgNjAsNTMwMCwKLSAgICA2NCw1MzIwLAotICAgIDEwMCw1NTAwLAotICAgIDEwNCw1NTIwLAotICAgIDEwOCw1NTQwLAotICAgIDExMiw1NTYwLAotICAgIDExNiw1NTgwLAotICAgIDEyMCw1NjAwLAotICAgIDEyNCw1NjIwLAotICAgIDEyOCw1NjQwLAotICAgIDEzMiw1NjYwLAotICAgIDEzNiw1NjgwLAotICAgIDE0MCw1NzAwLAotLy8KLSAgICAxODQsNDkyMCwKLSAgICAxODgsNDk0MCwKLSAgICAxOTIsNDk2MCwKLSAgICAxOTYsNDk4MCwKLSAgICA4LDUwNDAsCi0gICAgMTIsNTA2MCwKLSAgICAxNiw1MDgwLAotICAgIDM0LDUxNzAsCi0gICAgMzgsNTE5MCwKLSAgICA0Miw1MjEwLAotICAgIDQ2LDUyMzAsCi0vLwotICAgIDE0OSw1NzQ1LAotICAgIDE1Myw1NzY1LAotICAgIDE1Nyw1Nzg1LAotICAgIDE2MSw1ODA1LAotICAgIDE2NSw1ODI1Ci0vLworCS8qIEV2ZW4gZWxlbWVudCBmb3IgQ2hhbm5lbCBOdW1iZXIsIE9kZCBmb3IgRnJlcXVlbmN5ICovCisJMzYsIDUxODAsCisJNDAsIDUyMDAsCisJNDQsIDUyMjAsCisJNDgsIDUyNDAsCisJNTIsIDUyNjAsCisJNTYsIDUyODAsCisJNjAsIDUzMDAsCisJNjQsIDUzMjAsCisJMTAwLCA1NTAwLAorCTEwNCwgNTUyMCwKKwkxMDgsIDU1NDAsCisJMTEyLCA1NTYwLAorCTExNiwgNTU4MCwKKwkxMjAsIDU2MDAsCisJMTI0LCA1NjIwLAorCTEyOCwgNTY0MCwKKwkxMzIsIDU2NjAsCisJMTM2LCA1NjgwLAorCTE0MCwgNTcwMCwKKwkvKiovCisJMTg0LCA0OTIwLAorCTE4OCwgNDk0MCwKKwkxOTIsIDQ5NjAsCisJMTk2LCA0OTgwLAorCTgsIDUwNDAsCisJMTIsIDUwNjAsCisJMTYsIDUwODAsCisJMzQsIDUxNzAsCisJMzgsIDUxOTAsCisJNDIsIDUyMTAsCisJNDYsIDUyMzAsCisJLyoqLworCTE0OSwgNTc0NSwKKwkxNTMsIDU3NjUsCisJMTU3LCA1Nzg1LAorCTE2MSwgNTgwNSwKKwkxNjUsIDU4MjUKKwkvKiovCiB9OwogCiBpbnQgdXNiZHJ2X2ZyZXEyY2hhbih1MzJfdCBmcmVxKQogewotICAgIC8qIDIuNEcgSHogKi8KLSAgICBpZiAoZnJlcSA+IDI0MDAgJiYgZnJlcSA8IDMwMDApCi0gICAgewotICAgICAgICByZXR1cm4gKChmcmVxLTI0MTIpLzUpICsgMTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgdTE2X3QgaWk7Ci0gICAgICAgIHUxNl90IG51bV9jaGFuID0gc2l6ZW9mKGNoYW5uZWxfZnJlcXVlbmN5XzExQSkvc2l6ZW9mKHUzMl90KTsKKwkvKiAyLjRHIEh6ICovCisJaWYgKGZyZXEgPiAyNDAwICYmIGZyZXEgPCAzMDAwKSB7CisJCXJldHVybiAoKGZyZXEtMjQxMikvNSkgKyAxOworCX0gZWxzZSB7CisJCXUxNl90IGlpOworCQl1MTZfdCBudW1fY2hhbiA9IHNpemVvZihjaGFubmVsX2ZyZXF1ZW5jeV8xMUEpL3NpemVvZih1MzJfdCk7CiAKLSAgICAgICAgZm9yKGlpID0gMTsgaWkgPCBudW1fY2hhbjsgaWkgKz0gMikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaV0gPT0gZnJlcSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpLTFdOwotICAgICAgICB9Ci0gICAgfQorCQlmb3IgKGlpID0gMTsgaWkgPCBudW1fY2hhbjsgaWkgKz0gMikgeworCQkJaWYgKGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaV0gPT0gZnJlcSkKKwkJCQlyZXR1cm4gY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpLTFdOworCQl9CisJfQogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZfY2hhbjJmcmVxKGludCBjaGFuKQogewotICAgIGludCBmcmVxOworCWludCBmcmVxOwogCi0gICAgLyogSWYgY2hhbm5lbCBudW1iZXIgaXMgb3V0IG9mIHJhbmdlICovCi0gICAgaWYgKGNoYW4gPiAxNjUgfHwgY2hhbiA8PSAwKQotICAgICAgICByZXR1cm4gLTE7CisJLyogSWYgY2hhbm5lbCBudW1iZXIgaXMgb3V0IG9mIHJhbmdlICovCisJaWYgKGNoYW4gPiAxNjUgfHwgY2hhbiA8PSAwKQorCQlyZXR1cm4gLTE7CiAKLSAgICAvKiAyLjRHIGJhbmQgKi8KLSAgICBpZiAoY2hhbiA+PSAxICYmIGNoYW4gPD0gMTMpCi0gICAgewotICAgICAgICBmcmVxID0gKDI0MTIgKyAoY2hhbiAtIDEpICogNSk7Ci0gICAgICAgIHJldHVybiBmcmVxOwotICAgIH0KLSAgICBlbHNlIGlmIChjaGFuID49IDM2ICYmIGNoYW4gPD0gMTY1KQotICAgIHsKLSAgICAgICAgdTE2X3QgaWk7Ci0gICAgICAgIHUxNl90IG51bV9jaGFuID0gc2l6ZW9mKGNoYW5uZWxfZnJlcXVlbmN5XzExQSkvc2l6ZW9mKHUzMl90KTsKKwkvKiAyLjRHIGJhbmQgKi8KKwlpZiAoY2hhbiA+PSAxICYmIGNoYW4gPD0gMTMpIHsKKwkJZnJlcSA9ICgyNDEyICsgKGNoYW4gLSAxKSAqIDUpOworCQkJcmV0dXJuIGZyZXE7CisJfSBlbHNlIGlmIChjaGFuID49IDM2ICYmIGNoYW4gPD0gMTY1KSB7CisJCXUxNl90IGlpOworCQl1MTZfdCBudW1fY2hhbiA9IHNpemVvZihjaGFubmVsX2ZyZXF1ZW5jeV8xMUEpL3NpemVvZih1MzJfdCk7CiAKLSAgICAgICAgZm9yKGlpID0gMDsgaWkgPCBudW1fY2hhbjsgaWkgKz0gMikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaV0gPT0gY2hhbikKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpKzFdOwotICAgICAgICB9CisJCWZvciAoaWkgPSAwOyBpaSA8IG51bV9jaGFuOyBpaSArPSAyKSB7CisJCQlpZiAoY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpXSA9PSBjaGFuKQorCQkJCXJldHVybiBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWkrMV07CisJCX0KIAotICAgICAgICAvKiBDYW4ndCBmaW5kIGRlc2lyZWQgZnJlcXVlbmN5ICovCi0gICAgICAgIGlmIChpaSA9PSBudW1fY2hhbikKLSAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwkvKiBDYW4ndCBmaW5kIGRlc2lyZWQgZnJlcXVlbmN5ICovCisJaWYgKGlpID09IG51bV9jaGFuKQorCQlyZXR1cm4gLTE7CisJfQogCi0gICAgLyogQ2FuJ3QgZmluZCBkZWlzcmVkIGZyZXF1ZW5jeSAqLwotICAgIHJldHVybiAtMTsKKwkvKiBDYW4ndCBmaW5kIGRlaXNyZWQgZnJlcXVlbmN5ICovCisJcmV0dXJuIC0xOwogfQogCiBpbnQgdXNiZHJ2X2lvY3RsX3NldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19wb2ludCAqZXJxKQogewotI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAotICAgIC8vc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIGNoYXIgZXNzaWRidWZbSVdfRVNTSURfTUFYX1NJWkUrMV07Ci0gICAgaW50IGk7CisJI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAorCS8qIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsgKi8KKwljaGFyIGVzc2lkYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCWludCBpOwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgbWVtc2V0KGVzc2lkYnVmLCAwLCBzaXplb2YoZXNzaWRidWYpKTsKKwltZW1zZXQoZXNzaWRidWYsIDAsIHNpemVvZihlc3NpZGJ1ZikpOwogCi0gICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfaW9jdGxfc2V0ZXNzaWRcbiIpOworCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2X2lvY3RsX3NldGVzc2lkXG4iKTsKIAotICAgIC8vcHJpbnRrKCJzc2lkbGVuPSVkXG4iLCBlcnEtPmxlbmd0aCk7IC8vZm9yIGFueSwgaXQgaXMgMS4KLSAgICBpZiAoZXJxLT5mbGFncykgewotICAgICAgICBpZiAoZXJxLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUrMSkpCi0gICAgICAgICAgICByZXR1cm4gLUUyQklHOworCS8qIHByaW50aygic3NpZGxlbj0lZFxuIiwgZXJxLT5sZW5ndGgpOyAvL2ZvciBhbnksIGl0IGlzIDEuICovCisJaWYgKGVycS0+ZmxhZ3MpIHsKKwkJaWYgKGVycS0+bGVuZ3RoID4gKElXX0VTU0lEX01BWF9TSVpFKzEpKQorCQkJcmV0dXJuIC1FMkJJRzsKIAotICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoZXNzaWRidWYsIGVycS0+cG9pbnRlciwgZXJxLT5sZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQorCQlpZiAoY29weV9mcm9tX3VzZXIoZXNzaWRidWYsIGVycS0+cG9pbnRlciwgZXJxLT5sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCi0gICAgLy96ZF9EaXNhc29jQWxsKDIpOwotICAgIC8vd2FpdF9tcygxMDApOworCS8qIHpkX0Rpc2Fzb2NBbGwoMik7ICovCisJLyogd2FpdF9tcygxMDApOyAqLwogCi0gICAgcHJpbnRrKEtFUk5fRVJSICJlc3NpZGJ1ZjogIik7CisJcHJpbnRrKEtFUk5fRVJSICJlc3NpZGJ1ZjogIik7CiAKLSAgICBmb3IoaSA9IDA7IGkgPCBlcnEtPmxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlMDJ4ICIsIGVzc2lkYnVmW2ldKTsKLSAgICB9CisJZm9yIChpID0gMDsgaSA8IGVycS0+bGVuZ3RoOyBpKyspCisJCXByaW50ayhLRVJOX0VSUiAiJTAyeCAiLCBlc3NpZGJ1ZltpXSk7CiAKLSAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCi0gICAgZXNzaWRidWZbZXJxLT5sZW5ndGhdID0gJ1wwJzsKLSAgICAvL21lbWNweShtYWNwLT53ZC53cy5zc2lkLCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpOwotICAgIC8vbWFjcC0+d2Qud3Muc3NpZExlbiA9IHN0cmxlbihlc3NpZGJ1ZikrMjsKLSAgICAvL21hY3AtPndkLndzLnNzaWRbMV0gPSBzdHJsZW4oZXNzaWRidWYpOyAvLyBVcGRhdGUgc3NpZCBsZW5ndGgKKwllc3NpZGJ1ZltlcnEtPmxlbmd0aF0gPSAnXDAnOworCS8qIG1lbWNweShtYWNwLT53ZC53cy5zc2lkLCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpOyAqLworCS8qIG1hY3AtPndkLndzLnNzaWRMZW4gPSBzdHJsZW4oZXNzaWRidWYpKzI7ICovCisJLyogbWFjcC0+d2Qud3Muc3NpZFsxXSA9IHN0cmxlbihlc3NpZGJ1Zik7IFVwZGF0ZSBzc2lkIGxlbmd0aCAqLwogCi0gICAgemZpV2xhblNldFNTSUQoZGV2LCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpOwotI2lmIDAKLSAgICBwcmludGsoS0VSTl9FUlIgIm1hY3AtPndkLndzLnNzaWQ6ICIpOworCXpmaVdsYW5TZXRTU0lEKGRldiwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKTsKKwkjaWYgMAorCQlwcmludGsoS0VSTl9FUlIgIm1hY3AtPndkLndzLnNzaWQ6ICIpOwogCi0gICAgZm9yKGkgPSAwOyBpIDwgbWFjcC0+d2Qud3Muc3NpZExlbjsgaSsrKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlMDJ4ICIsIG1hY3AtPndkLndzLnNzaWRbaV0pOwotICAgIH0KKwkJZm9yIChpID0gMDsgaSA8IG1hY3AtPndkLndzLnNzaWRMZW47IGkrKykKKwkJCXByaW50ayhLRVJOX0VSUiAiJTAyeCAiLCBtYWNwLT53ZC53cy5zc2lkW2ldKTsKIAotICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKLSNlbmRpZgotICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMCk7Ci0gICAgemZpV2xhbkVuYWJsZShkZXYpOworCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CisJI2VuZGlmCiAKLSNlbmRpZgorCXpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CisJemZpV2xhbkVuYWJsZShkZXYpOwogCi0gICAgcmV0dXJuIDA7CisJI2VuZGlmCisKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydl9pb2N0bF9nZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcG9pbnQgKmVycSkKIHsKLSAgICAgLy9zdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgIHU4X3QgZXNzaWRidWZbSVdfRVNTSURfTUFYX1NJWkUrMV07Ci0gICAgIHU4X3QgbGVuOwotICAgICB1OF90IGk7CisJLyogc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OyAqLworCXU4X3QgZXNzaWRidWZbSVdfRVNTSURfTUFYX1NJWkUrMV07CisJdThfdCBsZW47CisJdThfdCBpOwogCiAKLSAgICAgLy9sZW4gPSBtYWNwLT53ZC53cy5zc2lkTGVuOwotICAgICAvL21lbWNweShlc3NpZGJ1ZiwgbWFjcC0+d2Qud3Muc3NpZCwgbWFjcC0+d2Qud3Muc3NpZExlbik7Ci0gICAgIHpmaVdsYW5RdWVyeVNTSUQoZGV2LCBlc3NpZGJ1ZiwgJmxlbik7CisJLyogbGVuID0gbWFjcC0+d2Qud3Muc3NpZExlbjsgKi8KKwkvKiBtZW1jcHkoZXNzaWRidWYsIG1hY3AtPndkLndzLnNzaWQsIG1hY3AtPndkLndzLnNzaWRMZW4pOyAqLworCXpmaVdsYW5RdWVyeVNTSUQoZGV2LCBlc3NpZGJ1ZiwgJmxlbik7CiAKLSAgICAgZXNzaWRidWZbbGVuXSA9IDA7CisJZXNzaWRidWZbbGVuXSA9IDA7CiAKLSAgICAgcHJpbnRrKEtFUk5fRVJSICJFU1NJRDogIik7CisJcHJpbnRrKEtFUk5fRVJSICJFU1NJRDogIik7CiAKLSAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgIHsKLSAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiJWMiLCBlc3NpZGJ1ZltpXSk7Ci0gICAgIH0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXByaW50ayhLRVJOX0VSUiAiJWMiLCBlc3NpZGJ1ZltpXSk7CiAKLSAgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOworCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKIAotICAgICBlcnEtPmZsYWdzPSAxOwotICAgICBlcnEtPmxlbmd0aCA9IHN0cmxlbihlc3NpZGJ1ZikgKyAxOworCWVycS0+ZmxhZ3MgPSAxOworCWVycS0+bGVuZ3RoID0gc3RybGVuKGVzc2lkYnVmKSArIDE7CiAKLSAgICAgaWYgKGVycS0+cG9pbnRlcikKLSAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoZXJxLT5wb2ludGVyLCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpKQotICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCWlmIChlcnEtPnBvaW50ZXIpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihlcnEtPnBvaW50ZXIsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAKLSAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKLQogaW50IHVzYmRydl9pb2N0bF9zZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3BhcmFtICpycnEpCiB7Ci0KLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogI2lmIFdJUkVMRVNTX0VYVCA+IDE0CkBAIC0yNjcsNDYyICsyNTMsNDE4IEBACiAgKiBFbmNvZGUgYSBXUEEgb3IgUlNOIGluZm9ybWF0aW9uIGVsZW1lbnQgYXMgYSBjdXN0b20KICAqIGVsZW1lbnQgdXNpbmcgdGhlIGhvc3RhcCBmb3JtYXQuCiAgKi8KLXUzMiBlbmNvZGVfaWUodm9pZCAqYnVmLCB1MzIgYnVmc2l6ZSwgY29uc3QgdTggKmllLCB1MzIgaWVsZW4sIGNvbnN0IHU4ICpsZWFkZXIsIHUzMiBsZWFkZXJfbGVuKQordTMyIGVuY29kZV9pZSh2b2lkICpidWYsIHUzMiBidWZzaXplLCBjb25zdCB1OCAqaWUsIHUzMiBpZWxlbiwKKwkJY29uc3QgdTggKmxlYWRlciwgdTMyIGxlYWRlcl9sZW4pCiB7Ci0gICAgdTggKnA7Ci0gICAgdTMyIGk7CisJdTggKnA7CisJdTMyIGk7CiAKLSAgICBpZiAoYnVmc2l6ZSA8IGxlYWRlcl9sZW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHAgPSBidWY7Ci0gICAgbWVtY3B5KHAsIGxlYWRlciwgbGVhZGVyX2xlbik7Ci0gICAgYnVmc2l6ZSAtPSBsZWFkZXJfbGVuOwotICAgIHAgKz0gbGVhZGVyX2xlbjsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaWVsZW4gJiYgYnVmc2l6ZSA+IDI7IGkrKykKLSAgICAgICAgcCArPSBzcHJpbnRmKHAsICIlMDJ4IiwgaWVbaV0pOwotICAgIHJldHVybiAoaSA9PSBpZWxlbiA/IHAgLSAodTggKilidWYgOiAwKTsKKwlpZiAoYnVmc2l6ZSA8IGxlYWRlcl9sZW4pCisJCXJldHVybiAwOworCXAgPSBidWY7CisJbWVtY3B5KHAsIGxlYWRlciwgbGVhZGVyX2xlbik7CisJYnVmc2l6ZSAtPSBsZWFkZXJfbGVuOworCXAgKz0gbGVhZGVyX2xlbjsKKwlmb3IgKGkgPSAwOyBpIDwgaWVsZW4gJiYgYnVmc2l6ZSA+IDI7IGkrKykKKwkJcCArPSBzcHJpbnRmKHAsICIlMDJ4IiwgaWVbaV0pOworCXJldHVybiAoaSA9PSBpZWxlbiA/IHAgLSAodTggKilidWY6MCk7CiB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJUkVMRVNTX0VYVCA+IDE0ICovCisjZW5kaWYgIC8qIFdJUkVMRVNTX0VYVCA+IDE0ICovCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBUcmFuc2xhdGUgc2NhbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIGNhcmQgdG8gYSBjYXJkIGluZGVwZW5kZW50CiAgKiBmb3JtYXQgdGhhdCB0aGUgV2lyZWxlc3MgVG9vbHMgd2lsbCB1bmRlcnN0YW5kCiAgKi8KIGNoYXIgKnVzYmRydl90cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmN1cnJlbnRfZXYsCi0gICAgICAgIGNoYXIgKmVuZF9idWYsIHN0cnVjdCB6c0Jzc0luZm8gKmxpc3QpCisJY2hhciAqZW5kX2J1Ziwgc3RydWN0IHpzQnNzSW5mbyAqbGlzdCkKIHsKLSAgICBzdHJ1Y3QgaXdfZXZlbnQgaXdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAgIHUxNl90IGNhcGFiaWxpdGllczsKLSAgICBjaGFyICpjdXJyZW50X3ZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHJhdGVzICovCi0gICAgY2hhciAqbGFzdF9ldjsKLSAgICBpbnQgaTsKLSNpZiBXSVJFTEVTU19FWFQgPiAxNAotICAgIGNoYXIgICAgYnVmWzY0KjIgKyAzMF07Ci0jZW5kaWYKKwlzdHJ1Y3QgaXdfZXZlbnQgaXdlOyAgIC8qIFRlbXBvcmFyeSBidWZmZXIgKi8KKwl1MTZfdCBjYXBhYmlsaXRpZXM7CisJY2hhciAqY3VycmVudF92YWw7ICAgICAvKiBGb3IgcmF0ZXMgKi8KKwljaGFyICpsYXN0X2V2OworCWludCBpOworCSNpZiBXSVJFTEVTU19FWFQgPiAxNAorCQljaGFyICAgIGJ1Zls2NCoyICsgMzBdOworCSNlbmRpZgogCi0gICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CiAKLS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KLSAgICBpd2UuY21kID0gU0lPQ0dJV0FQOwotICAgIGl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotICAgIG1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGxpc3QtPmJzc2lkLCBFVEhfQUxFTik7Ci0gICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KAotCWluZm8sCi0JY3VycmVudF9ldiwKLQllbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CisJLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLworCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgbGlzdC0+YnNzaWQsIEVUSF9BTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywJY3VycmVudF9ldiwKKwkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwogCi0gICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgfQorCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKwlsYXN0X2V2ID0gY3VycmVudF9ldjsKIAotLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCisJLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCiAKLS8qIEFkZCB0aGUgRVNTSUQgKi8KLSAgICBpd2UudS5kYXRhLmxlbmd0aCA9IGxpc3QtPnNzaWRbMV07Ci0gICAgaWYoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKLSAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKLSAgICBpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotICAgIGl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKLQlpbmZvLAotCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICZsaXN0LT5zc2lkWzJdKTsKKwkvKiBBZGQgdGhlIEVTU0lEICovCisJaXdlLnUuZGF0YS5sZW5ndGggPSBsaXN0LT5zc2lkWzFdOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQorCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOworCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sCWN1cnJlbnRfZXYsCisJCQkJCWVuZF9idWYsICZpd2UsICZsaXN0LT5zc2lkWzJdKTsKIAotICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgIH0KKwkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCXJldHVybiBlbmRfYnVmOwogCi0gICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CiAKLS8qIEFkZCBtb2RlICovCi0gICAgaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwotICAgIGNhcGFiaWxpdGllcyA9IChsaXN0LT5jYXBhYmlsaXR5WzFdIDw8IDgpICsgbGlzdC0+Y2FwYWJpbGl0eVswXTsKLSAgICBpZihjYXBhYmlsaXRpZXMgJiAoMHgwMSB8IDB4MDIpKQotICAgIHsKLSAgICAgICAgaWYoY2FwYWJpbGl0aWVzICYgMHgwMSkKLSAgICAgICAgICAgIGl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0gICAgICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudCgKLQkJaW5mbywKLQkJY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotICAgIH0KKwkvKiBBZGQgbW9kZSAqLworCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwljYXBhYmlsaXRpZXMgPSAobGlzdC0+Y2FwYWJpbGl0eVsxXSA8PCA4KSArIGxpc3QtPmNhcGFiaWxpdHlbMF07CisJaWYgKGNhcGFiaWxpdGllcyAmICgweDAxIHwgMHgwMikpIHsKKwkJaWYgKGNhcGFiaWxpdGllcyAmIDB4MDEpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWVsc2UKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sCWN1cnJlbnRfZXYsCisJCQkJCQllbmRfYnVmLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJfQogCi0gICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgfQorCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKwlsYXN0X2V2ID0gY3VycmVudF9ldjsKIAotLyogQWRkIGZyZXF1ZW5jeSAqLwotICAgIGl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLSAgICBpd2UudS5mcmVxLm0gPSBsaXN0LT5jaGFubmVsOwotLyogQ2hhbm5lbCBmcmVxdWVuY3kgaW4gS0h6ICovCi0gICAgaWYgKGl3ZS51LmZyZXEubSA+IDE0KQotICAgIHsKLSAgICAgICAgaWYgKCgxODQgPD0gaXdlLnUuZnJlcS5tKSAmJiAoaXdlLnUuZnJlcS5tPD0xOTYpKQotICAgICAgICAgICAgICBpd2UudS5mcmVxLm0gPSA0MDAwICsgaXdlLnUuZnJlcS5tICogNTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICBpd2UudS5mcmVxLm0gPSA1MDAwICsgaXdlLnUuZnJlcS5tICogNTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKGl3ZS51LmZyZXEubSA9PSAxNCkKLSAgICAgICAgICAgICAgaXdlLnUuZnJlcS5tID0gMjQ4NDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICBpd2UudS5mcmVxLm0gPSAyNDEyICsgKGl3ZS51LmZyZXEubSAtIDEpICogNTsKLSAgICB9Ci0gICAgaXdlLnUuZnJlcS5lID0gNjsKLSAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoCi0JaW5mbywKLSAgICAJY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCS8qIEFkZCBmcmVxdWVuY3kgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJaXdlLnUuZnJlcS5tID0gbGlzdC0+Y2hhbm5lbDsKKwkvKiBDaGFubmVsIGZyZXF1ZW5jeSBpbiBLSHogKi8KKwlpZiAoaXdlLnUuZnJlcS5tID4gMTQpIHsKKwkJaWYgKCgxODQgPD0gaXdlLnUuZnJlcS5tKSAmJiAoaXdlLnUuZnJlcS5tIDw9IDE5NikpCisJCQlpd2UudS5mcmVxLm0gPSA0MDAwICsgaXdlLnUuZnJlcS5tICogNTsKKwkJZWxzZQorCQkJaXdlLnUuZnJlcS5tID0gNTAwMCArIGl3ZS51LmZyZXEubSAqIDU7CisJfSBlbHNlIHsKKwkJaWYgKGl3ZS51LmZyZXEubSA9PSAxNCkKKwkJCWl3ZS51LmZyZXEubSA9IDI0ODQ7CisJCWVsc2UKKwkJCWl3ZS51LmZyZXEubSA9IDI0MTIgKyAoaXdlLnUuZnJlcS5tIC0gMSkgKiA1OworCX0KKwlpd2UudS5mcmVxLmUgPSA2OworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQllbmRfYnVmLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CiAKLSAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgewotICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICB9CisJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCWxhc3RfZXYgPSBjdXJyZW50X2V2OwogCi0vKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzICovCi0gICAgaXdlLmNtZCA9IElXRVZRVUFMOwotI2lmIFdJUkVMRVNTX0VYVCA+IDE4Ci0gICAgaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQgfCBJV19RVUFMX0xFVkVMX1VQREFURUQKLSAgICAgICAgICAgICAgICAgICAgICAgIHxJV19RVUFMX05PSVNFX1VQREFURUQ7Ci0jZW5kaWYKLSAgICBpd2UudS5xdWFsLmxldmVsID0gbGlzdC0+c2lnbmFsU3RyZW5ndGg7Ci0gICAgaXdlLnUucXVhbC5ub2lzZSA9IDA7Ci0gICAgaXdlLnUucXVhbC5xdWFsID0gbGlzdC0+c2lnbmFsUXVhbGl0eTsKLSAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoCi0JaW5mbywKLQljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLworCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwkjaWYgV0lSRUxFU1NfRVhUID4gMTgKKwlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfVVBEQVRFRCB8IElXX1FVQUxfTEVWRUxfVVBEQVRFRAorCQkJCXwgSVdfUVVBTF9OT0lTRV9VUERBVEVEOworCSNlbmRpZgorCWl3ZS51LnF1YWwubGV2ZWwgPSBsaXN0LT5zaWduYWxTdHJlbmd0aDsKKwlpd2UudS5xdWFsLm5vaXNlID0gMDsKKwlpd2UudS5xdWFsLnF1YWwgPSBsaXN0LT5zaWduYWxRdWFsaXR5OworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLAljdXJyZW50X2V2LAorCQkJCQllbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CiAKLSAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgewotICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICB9CisJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCWxhc3RfZXYgPSBjdXJyZW50X2V2OwogCi0vKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCisJLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwogCi0gICAgaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7Ci0gICAgaWYoY2FwYWJpbGl0aWVzICYgMHgxMCkKLSAgICAgICAgaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotICAgIGVsc2UKLSAgICAgICAgaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgMHgxMCkKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCWVsc2UKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAotICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLSAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoCi0JaW5mbywKLQljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBsaXN0LT5zc2lkKTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sCWN1cnJlbnRfZXYsCisJCQkJCWVuZF9idWYsICZpd2UsIGxpc3QtPnNzaWQpOwogCi0gICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgfQorCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKwlsYXN0X2V2ID0gY3VycmVudF9ldjsKIAotLyogUmF0ZSA6IHN0dWZmaW5nIG11bHRpcGxlIHZhbHVlcyBpbiBhIHNpbmdsZSBldmVudCByZXF1aXJlIGEgYml0Ci0gKiBtb3JlIG9mIG1hZ2ljICovCi0gICAgY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgSVdfRVZfTENQX0xFTjsKKwkvKiBSYXRlIDogc3R1ZmZpbmcgbXVsdGlwbGUgdmFsdWVzIGluIGEgc2luZ2xlIGV2ZW50IHJlcXVpcmUgYSBiaXQKKwkqIG1vcmUgb2YgbWFnaWMKKwkqLworCWN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIElXX0VWX0xDUF9MRU47CiAKLSAgICBpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0vKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLSAgICBpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKIAotICAgIGZvcihpID0gMCA7IGkgPCBsaXN0LT5zdXBwb3J0ZWRSYXRlc1sxXSA7IGkrKykKLSAgICB7Ci0vKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLwotICAgICAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gKChsaXN0LT5zdXBwb3J0ZWRSYXRlc1tpKzJdICYgMHg3ZikgKiA1MDAwMDApOwotLyogQWRkIG5ldyB2YWx1ZSB0byBldmVudCAqLwotICAgICAgICBjdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKAotCQlpbmZvLAotCQljdXJyZW50X2V2LCBjdXJyZW50X3ZhbCwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKKwlmb3IgKGkgPSAwIDsgaSA8IGxpc3QtPnN1cHBvcnRlZFJhdGVzWzFdIDsgaSsrKSB7CisJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCisJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGxpc3QtPnN1cHBvcnRlZFJhdGVzW2krMl0gJiAweDdmKQorCQkJCQkqIDUwMDAwMCk7CisJCS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KKwkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LAorCQkJCWN1cnJlbnRfdmFsLCBlbmRfYnVmLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwogCi0gICAgICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfdmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICAgICAgfQorCQkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCQlpZiAobGFzdF9ldiA9PSBjdXJyZW50X3ZhbCkKKwkJCXJldHVybiBlbmRfYnVmOwogCi0gICAgICAgIGxhc3RfZXYgPSBjdXJyZW50X3ZhbDsKLSAgICB9CisJCWxhc3RfZXYgPSBjdXJyZW50X3ZhbDsKKwl9CiAKLSAgICBmb3IgKGkgPSAwIDsgaSA8IGxpc3QtPmV4dFN1cHBvcnRlZFJhdGVzWzFdIDsgaSsrKQotICAgIHsKLS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCi0gICAgICAgIGl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGxpc3QtPmV4dFN1cHBvcnRlZFJhdGVzW2krMl0gJiAweDdmKSAqIDUwMDAwMCk7Ci0vKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCi0gICAgICAgIGN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoCi0JCWluZm8sCi0JCWN1cnJlbnRfZXYsIGN1cnJlbnRfdmFsLCBlbmRfYnVmLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOworCWZvciAoaSA9IDAgOyBpIDwgbGlzdC0+ZXh0U3VwcG9ydGVkUmF0ZXNbMV0gOyBpKyspIHsKKwkJLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KKwkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgobGlzdC0+ZXh0U3VwcG9ydGVkUmF0ZXNbaSsyXSAmIDB4N2YpCisJCQkJCSogNTAwMDAwKTsKKwkJLyogQWRkIG5ldyB2YWx1ZSB0byBldmVudCAqLworCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCisJCQkJY3VycmVudF92YWwsIGVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAKLSAgICAgICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICAgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF92YWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgICAgICB9CisJCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfdmFsKQorCQkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICAgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7Ci0gICAgfQorCQlsYXN0X2V2ID0gY3VycmVudF9ldjsKKwl9CiAKLS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLwotICAgIGlmKChjdXJyZW50X3ZhbCAtIGN1cnJlbnRfZXYpID4gSVdfRVZfTENQX0xFTikKLSAgICAgICAgY3VycmVudF9ldiA9IGN1cnJlbnRfdmFsOwotI2lmIFdJUkVMRVNTX0VYVCA+IDE0Ci0jZGVmaW5lIElFRUU4MDIxMV9FTEVNSURfUlNOIDB4MzAKLSAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotICAgIGl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJiY25faW50PSVkIiwgKGxpc3QtPmJlYWNvbkludGVydmFsWzFdIDw8IDgpICsgbGlzdC0+YmVhY29uSW50ZXJ2YWxbMF0pOwotICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0gICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KAotCQlpbmZvLAotCQljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBidWYpOworCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLworCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IElXX0VWX0xDUF9MRU4pCisJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKKwkjaWYgV0lSRUxFU1NfRVhUID4gMTQKKwkJI2RlZmluZSBJRUVFODAyMTFfRUxFTUlEX1JTTiAweDMwCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYmNuX2ludD0lZCIsIChsaXN0LT5iZWFjb25JbnRlcnZhbFsxXSA8PCA4KQorCQkJCQkJKyBsaXN0LT5iZWFjb25JbnRlcnZhbFswXSk7CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCWVuZF9idWYsICZpd2UsIGJ1Zik7CiAKLSAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgewotICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICB9CisJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCWxhc3RfZXYgPSBjdXJyZW50X2V2OwogCi0gICAgaWYgKGxpc3QtPndwYUllWzFdICE9IDApCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciByc25fbGVhZGVyW10gPSAicnNuX2llPSI7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHdwYV9sZWFkZXJbXSA9ICJ3cGFfaWU9IjsKKwlpZiAobGlzdC0+d3BhSWVbMV0gIT0gMCkgeworCQlzdGF0aWMgY29uc3QgY2hhciByc25fbGVhZGVyW10gPSAicnNuX2llPSI7CisJCXN0YXRpYyBjb25zdCBjaGFyIHdwYV9sZWFkZXJbXSA9ICJ3cGFfaWU9IjsKIAotICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotICAgICAgICBpd2UuY21kID0gSVdFVkNVU1RPTTsKLSAgICAgICAgaWYgKGxpc3QtPndwYUllWzBdID09IElFRUU4MDIxMV9FTEVNSURfUlNOKQotICAgICAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSBlbmNvZGVfaWUoYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgICAgICAgICBsaXN0LT53cGFJZSwgbGlzdC0+d3BhSWVbMV0rMiwKLSAgICAgICAgICAgICAgICByc25fbGVhZGVyLCBzaXplb2YocnNuX2xlYWRlciktMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgbGlzdC0+d3BhSWUsIGxpc3QtPndwYUllWzFdKzIsCi0gICAgICAgICAgICAgICAgd3BhX2xlYWRlciwgc2l6ZW9mKHdwYV9sZWFkZXIpLTEpOworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJaWYgKGxpc3QtPndwYUllWzBdID09IElFRUU4MDIxMV9FTEVNSURfUlNOKQorCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmNvZGVfaWUoYnVmLCBzaXplb2YoYnVmKSwKKwkJCQkJbGlzdC0+d3BhSWUsIGxpc3QtPndwYUllWzFdKzIsCisJCQkJCXJzbl9sZWFkZXIsIHNpemVvZihyc25fbGVhZGVyKS0xKTsKKwkJZWxzZQorCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmNvZGVfaWUoYnVmLCBzaXplb2YoYnVmKSwKKwkJCQkJbGlzdC0+d3BhSWUsIGxpc3QtPndwYUllWzFdKzIsCisJCQkJCXdwYV9sZWFkZXIsIHNpemVvZih3cGFfbGVhZGVyKS0xKTsKIAotICAgICAgICBpZiAoaXdlLnUuZGF0YS5sZW5ndGggIT0gMCkKLSAgICAgICAgICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKLQkJaW5mbywKLQkJY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKKwkJaWYgKGl3ZS51LmRhdGEubGVuZ3RoICE9IDApCisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKKwkJCQkJCQllbmRfYnVmLCAmaXdlLCBidWYpOwogCi0gICAgICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgICAgICB9CisJCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgICAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKLSAgICB9Ci0gICAgaWYgKGxpc3QtPnJzbkllWzFdICE9IDApCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciByc25fbGVhZGVyW10gPSAicnNuX2llPSI7Ci0gICAgICAgIG1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0gICAgICAgIGl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCQlsYXN0X2V2ID0gY3VycmVudF9ldjsKKwl9CiAKLSAgICAgICAgaWYgKGxpc3QtPnJzbkllWzBdID09IElFRUU4MDIxMV9FTEVNSURfUlNOKQotICAgICAgICB7Ci0gICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IGVuY29kZV9pZShidWYsIHNpemVvZihidWYpLAotICAgICAgICAgICAgICAgIGxpc3QtPnJzbkllLCBsaXN0LT5yc25JZVsxXSsyLAotICAgICAgICAgICAgICAgIHJzbl9sZWFkZXIsIHNpemVvZihyc25fbGVhZGVyKS0xKTsKLSAgICAgICAgICAgIGlmIChpd2UudS5kYXRhLmxlbmd0aCAhPSAwKQotICAgICAgICAgICAgICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKLQkJCWluZm8sCi0JCQljdXJyZW50X2V2LCBlbmRfYnVmLCAgJml3ZSwgYnVmKTsKKwlpZiAobGlzdC0+cnNuSWVbMV0gIT0gMCkgeworCQlzdGF0aWMgY29uc3QgY2hhciByc25fbGVhZGVyW10gPSAicnNuX2llPSI7CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwogCi0gICAgICAgICAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgICAgICAgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICAgICAgICAgIH0KKwkJaWYgKGxpc3QtPnJzbkllWzBdID09IElFRUU4MDIxMV9FTEVNSURfUlNOKSB7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGVuY29kZV9pZShidWYsIHNpemVvZihidWYpLAorCQkJbGlzdC0+cnNuSWUsIGxpc3QtPnJzbkllWzFdKzIsCisJCQlyc25fbGVhZGVyLCBzaXplb2YocnNuX2xlYWRlciktMSk7CisJCQlpZiAoaXdlLnUuZGF0YS5sZW5ndGggIT0gMCkKKwkJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywKKwkJCQkJY3VycmVudF9ldiwgZW5kX2J1ZiwgICZpd2UsIGJ1Zik7CiAKLSAgICAgICAgICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0vKiBUaGUgb3RoZXIgZGF0YSBpbiB0aGUgc2NhbiByZXN1bHQgYXJlIG5vdCByZWFsbHkKLSAqIGludGVyZXN0aW5nLCBzbyBmb3Igbm93IGRyb3AgaXQgKi8KLSAgICByZXR1cm4gY3VycmVudF9ldjsKKwkJCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJCQlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQkJCXJldHVybiBlbmRfYnVmOworCisJCQlsYXN0X2V2ID0gY3VycmVudF9ldjsKKwkJfQorCX0KKwkjZW5kaWYKKwkvKiBUaGUgb3RoZXIgZGF0YSBpbiB0aGUgc2NhbiByZXN1bHQgYXJlIG5vdCByZWFsbHkKKwkqIGludGVyZXN0aW5nLCBzbyBmb3Igbm93IGRyb3AgaXQKKwkqLworCXJldHVybiBjdXJyZW50X2V2OwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXduYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJdW5pb24gaXdyZXFfZGF0YSAqd3JxLCBjaGFyICpleHRyYSkKIHsKLSAgICAvL3N0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwkvKiBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7ICovCiAKLSAgICBzdHJjcHkod3JxLT5uYW1lLCAiSUVFRSA4MDIuMTEtTUlNTyIpOworCXN0cmNweSh3cnEtPm5hbWUsICJJRUVFIDgwMi4xMS1NSU1PIik7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQogewotICAgIHUzMl90IEZyZXFLSHo7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXUzMl90IEZyZXFLSHo7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKGZyZXEtPmUgPiAxKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoZnJlcS0+ZSA+IDEpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKGZyZXEtPmUgPT0gMSkKLSAgICB7Ci0gICAgICAgIEZyZXFLSHogPSAoZnJlcS0+bSAvIDEwMDAwMCk7CisJaWYgKGZyZXEtPmUgPT0gMSkgeworCQlGcmVxS0h6ID0gKGZyZXEtPm0gLyAxMDAwMDApOwogCi0gICAgICAgIGlmIChGcmVxS0h6ID4gNDAwMDAwMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKEZyZXFLSHogPiA1ODI1MDAwKQotICAgICAgICAgICAgICAgIEZyZXFLSHogPSA1ODI1MDAwOwotICAgICAgICAgICAgZWxzZSBpZiAoRnJlcUtIeiA8IDQ5MjAwMDApCi0gICAgICAgICAgICAgICAgRnJlcUtIeiA9IDQ5MjAwMDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChGcmVxS0h6IDwgNTAwMDAwMCkKLSAgICAgICAgICAgICAgICBGcmVxS0h6ID0gKCgoRnJlcUtIeiAtIDQwMDAwMDApIC8gNTAwMCkgKiA1MDAwKSArIDQwMDAwMDA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRnJlcUtIeiA9ICgoKEZyZXFLSHogLSA1MDAwMDAwKSAvIDUwMDApICogNTAwMCkgKyA1MDAwMDAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKEZyZXFLSHogPiAyNDg0MDAwKQotICAgICAgICAgICAgICAgIEZyZXFLSHogPSAyNDg0MDAwOwotICAgICAgICAgICAgZWxzZSBpZiAoRnJlcUtIeiA8IDI0MTIwMDApCi0gICAgICAgICAgICAgICAgRnJlcUtIeiA9IDI0MTIwMDA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRnJlcUtIeiA9ICgoKEZyZXFLSHogLSAyNDEyMDAwKSAvIDUwMDApICogNTAwMCkgKyAyNDEyMDAwOwotICAgICAgICB9CisJCWlmIChGcmVxS0h6ID4gNDAwMDAwMCkgeworCQkJaWYgKEZyZXFLSHogPiA1ODI1MDAwKQorCQkJCUZyZXFLSHogPSA1ODI1MDAwOworCQkJZWxzZSBpZiAoRnJlcUtIeiA8IDQ5MjAwMDApCisJCQkJRnJlcUtIeiA9IDQ5MjAwMDA7CisJCQllbHNlIGlmIChGcmVxS0h6IDwgNTAwMDAwMCkKKwkJCQlGcmVxS0h6ID0gKCgoRnJlcUtIeiAtIDQwMDAwMDApIC8gNTAwMCkgKiA1MDAwKQorCQkJCQkJKyA0MDAwMDAwOworCQkJZWxzZQorCQkJCUZyZXFLSHogPSAoKChGcmVxS0h6IC0gNTAwMDAwMCkgLyA1MDAwKSAqIDUwMDApCisJCQkJCQkrIDUwMDAwMDA7CisJCX0gZWxzZSB7CisJCQlpZiAoRnJlcUtIeiA+IDI0ODQwMDApCisJCQkJRnJlcUtIeiA9IDI0ODQwMDA7CisJCQllbHNlIGlmIChGcmVxS0h6IDwgMjQxMjAwMCkKKwkJCQlGcmVxS0h6ID0gMjQxMjAwMDsKKwkJCWVsc2UKKwkJCQlGcmVxS0h6ID0gKCgoRnJlcUtIeiAtIDI0MTIwMDApIC8gNTAwMCkgKiA1MDAwKQorCQkJCQkJKyAyNDEyMDAwOworCQl9CisJfSBlbHNlIHsKKwkJRnJlcUtIeiA9IHVzYmRydl9jaGFuMmZyZXEoZnJlcS0+bSk7CiAKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRnJlcUtIeiA9IHVzYmRydl9jaGFuMmZyZXEoZnJlcS0+bSk7CisJCWlmIChGcmVxS0h6ICE9IC0xKQorCQkJRnJlcUtIeiAqPSAxMDAwOworCQllbHNlCisJCQlGcmVxS0h6ID0gMjQxMjAwMDsKKwl9CiAKLSAgICAgICAgaWYgKEZyZXFLSHogIT0gLTEpCi0gICAgICAgICAgICBGcmVxS0h6ICo9IDEwMDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEZyZXFLSHogPSAyNDEyMDAwOwotICAgIH0KKwkvKiBwcmludGsoImZyZXEtPm06ICVkLCBmcmVxLT5lOiAlZFxuIiwgZnJlcS0+bSwgZnJlcS0+ZSk7ICovCisJLyogcHJpbnRrKCJGcmVxS0h6OiAlZFxuIiwgRnJlcUtIeik7ICovCiAKLSAgICAvL3ByaW50aygiZnJlcS0+bTogJWQsIGZyZXEtPmU6ICVkXG4iLCBmcmVxLT5tLCBmcmVxLT5lKTsKLSAgICAvL3ByaW50aygiRnJlcUtIejogJWRcbiIsIEZyZXFLSHopOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkgeworCQl6ZmlXbGFuU2V0RnJlcXVlbmN5KGRldiwgRnJlcUtIeiwgMCk7IC8qIEltbWVkaWF0ZSAqLworCQkvKiB1OF90IHdwYWllTGVuLHdwYWllWzUwXTsgKi8KKwkJLyogemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsgKi8KKwkJemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKwkJemZpV2xhbkVuYWJsZShkZXYpOworCQkvKiBpZiAod3BhaWVMZW4gPiAyKSAqLworCQkvKiB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB3cGFpZSwgd3BhaWVMZW4pOyAqLworCX0KIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKLSAgICB7Ci0gICAgICAgIHpmaVdsYW5TZXRGcmVxdWVuY3koZGV2LCBGcmVxS0h6LCAwKTsgLy8gSW1tZWRpYXRlCi0gICAgICAgIC8vdThfdCB3cGFpZUxlbix3cGFpZVs1MF07Ci0gICAgICAgIC8vemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsKLSAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKLSAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOwotICAgICAgICAvL2lmICh3cGFpZUxlbiA+IDIpCi0gICAgICAgIC8vICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgZnJlcS0+bSA9IHpmaVdsYW5RdWVyeUZyZXF1ZW5jeShkZXYpOwotICAgIGZyZXEtPmUgPSAzOworCWZyZXEtPm0gPSB6ZmlXbGFuUXVlcnlGcmVxdWVuY3koZGV2KTsKKwlmcmVxLT5lID0gMzsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJdW5pb24gaXdyZXFfZGF0YSAqd3JxLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgdThfdCBXbGFuTW9kZTsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdThfdCBXbGFuTW9kZTsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIHN3aXRjaCh3cnEtPm1vZGUpCi0gICAgewotICAgICAgICBjYXNlIElXX01PREVfTUFTVEVSOgotICAgICAgICAgICAgV2xhbk1vZGUgPSBaTV9NT0RFX0FQOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfTU9ERV9JTkZSQToKLSAgICAgICAgICAgIFdsYW5Nb2RlID0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX01PREVfQURIT0M6Ci0gICAgICAgICAgICBXbGFuTW9kZSA9IFpNX01PREVfSUJTUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgV2xhbk1vZGUgPSBaTV9NT0RFX0lCU1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisJc3dpdGNoICh3cnEtPm1vZGUpIHsKKwljYXNlIElXX01PREVfTUFTVEVSOgorCQlXbGFuTW9kZSA9IFpNX01PREVfQVA7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJV2xhbk1vZGUgPSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFOworCQlicmVhazsKKwljYXNlIElXX01PREVfQURIT0M6CisJCVdsYW5Nb2RlID0gWk1fTU9ERV9JQlNTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXbGFuTW9kZSA9IFpNX01PREVfSUJTUzsKKwkJYnJlYWs7CisJfQogCi0gICAgemZpV2xhblNldFdsYW5Nb2RlKGRldixXbGFuTW9kZSk7Ci0gICAgemZpV2xhbkRpc2FibGUoZGV2LCAxKTsKLSAgICB6ZmlXbGFuRW5hYmxlKGRldik7CisJemZpV2xhblNldFdsYW5Nb2RlKGRldiwgV2xhbk1vZGUpOworCXpmaVdsYW5EaXNhYmxlKGRldiwgMSk7CisJemZpV2xhbkVuYWJsZShkZXYpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCisJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwlfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBpcnFGbGFnOwotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1bnNpZ25lZCBsb25nIGlycUZsYWc7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKIAotICAgIHN3aXRjaCh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpKQotICAgIHsKLSAgICAgICAgY2FzZSBaTV9NT0RFX0FQOgotICAgICAgICAgICAgKm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFpNX01PREVfSU5GUkFTVFJVQ1RVUkU6Ci0gICAgICAgICAgICAqbW9kZSA9IElXX01PREVfSU5GUkE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaTV9NT0RFX0lCU1M6Ci0gICAgICAgICAgICAqbW9kZSA9IElXX01PREVfQURIT0M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICptb2RlID0gSVdfTU9ERV9BREhPQzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKwlzd2l0Y2ggKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikpIHsKKwljYXNlIFpNX01PREVfQVA6CisJCSptb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWJyZWFrOworCWNhc2UgWk1fTU9ERV9JTkZSQVNUUlVDVFVSRToKKwkJKm1vZGUgPSBJV19NT0RFX0lORlJBOworCQlicmVhazsKKwljYXNlIFpNX01PREVfSUJTUzoKKwkJKm1vZGUgPSBJV19NT0RFX0FESE9DOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqbW9kZSA9IElXX01PREVfQURIT0M7CisJCWJyZWFrOworCX0KIAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd3NlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTc0MywzMzggKzY4NSwzNDEgQEAKIH0KIAogaW50IHVzYmRydndleHRfZ2l3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwotICAgIGludCBpLCB2YWw7Ci0gICAgLy9pbnQgbnVtX2JhbmRfYTsKLSAgICB1MTZfdCBjaGFubmVsc1s2MF07Ci0gICAgdTE2X3QgY2hhbm5lbF9udW07CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJaW50IGksIHZhbDsKKwkvKiBpbnQgbnVtX2JhbmRfYTsgKi8KKwl1MTZfdCBjaGFubmVsc1s2MF07CisJdTE2X3QgY2hhbm5lbF9udW07CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSNpZiBXSVJFTEVTU19FWFQgPiA5Ci0gICAgcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IElXX1RYUE9XX0RCTTsKLS8vIFhYWCB3aGF0IGFib3V0IG1pbi9tYXhfcG1wLCBtaW4vbWF4X3BtdCwgZXRjLgotI2VuZGlmCisJI2lmIFdJUkVMRVNTX0VYVCA+IDkKKwlyYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNOworCS8qIFhYWCB3aGF0IGFib3V0IG1pbi9tYXhfcG1wLCBtaW4vbWF4X3BtdCwgZXRjLiAqLworCSNlbmRpZgogCi0jaWYgV0lSRUxFU1NfRVhUID4gMTAKLSAgICByYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKLSAgICByYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxMzsKKwkjaWYgV0lSRUxFU1NfRVhUID4gMTAKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxMzsKIAotICAgIHJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7Ci0gICAgcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0gICAgcmFuZ2UtPm1pbl9yZXRyeSA9IDA7Ci0gICAgcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSVJFTEVTU19FWFQgPiAxMCAqLworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKKwkjZW5kaWYgIC8qIFdJUkVMRVNTX0VYVCA+IDEwICovCiAKLSAgICBjaGFubmVsX251bSA9IHpmaVdsYW5RdWVyeUFsbG93Q2hhbm5lbHMoZGV2LCBjaGFubmVscyk7CisJY2hhbm5lbF9udW0gPSB6ZmlXbGFuUXVlcnlBbGxvd0NoYW5uZWxzKGRldiwgY2hhbm5lbHMpOwogCi0gICAgLyogR3VyYW50ZWUgcmVwb3J0ZWQgY2hhbm5lbCBudW1iZXJzIGlzIGxlc3Mgb3IgZXF1YWwgdG8gSVdfTUFYX0ZSRVFVRU5DSUVTICovCi0gICAgaWYgKGNoYW5uZWxfbnVtID4gSVdfTUFYX0ZSRVFVRU5DSUVTKQotICAgICAgICBjaGFubmVsX251bSA9IElXX01BWF9GUkVRVUVOQ0lFUzsKKwkvKiBHdXJhbnRlZSByZXBvcnRlZCBjaGFubmVsIG51bWJlcnMgaXMgbGVzcworCSogb3IgZXF1YWwgdG8gSVdfTUFYX0ZSRVFVRU5DSUVTCisJKi8KKwlpZiAoY2hhbm5lbF9udW0gPiBJV19NQVhfRlJFUVVFTkNJRVMpCisJCWNoYW5uZWxfbnVtID0gSVdfTUFYX0ZSRVFVRU5DSUVTOwogCi0gICAgdmFsID0gMDsKKwl2YWwgPSAwOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxfbnVtOyBpKyspCi0gICAgewotICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLmkgPSB1c2JkcnZfZnJlcTJjaGFuKGNoYW5uZWxzW2ldKTsKLSAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5tID0gY2hhbm5lbHNbaV07Ci0gICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0uZSA9IDY7Ci0gICAgICAgIHZhbCsrOwotICAgIH0KKwlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbF9udW07IGkrKykgeworCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSB1c2JkcnZfZnJlcTJjaGFuKGNoYW5uZWxzW2ldKTsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gY2hhbm5lbHNbaV07CisJCXJhbmdlLT5mcmVxW3ZhbF0uZSA9IDY7CisJCXZhbCsrOworCX0KIAotICAgIHJhbmdlLT5udW1fY2hhbm5lbHMgPSBjaGFubmVsX251bTsKLSAgICByYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGNoYW5uZWxfbnVtOworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBjaGFubmVsX251bTsKKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGNoYW5uZWxfbnVtOwogCi0jaWYgMAotICAgIHJhbmdlLT5udW1fY2hhbm5lbHMgPSAxNDsgLy8gT25seSAyLjRHCisJI2lmIDAKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gMTQ7IC8qIE9ubHkgMi40RyAqLwogCi0vKiBYWFggbmVlZCB0byBmaWx0ZXIgYWdhaW5zdCB0aGUgcmVndWxhdG9yeSBkb21haW4gJnwgYWN0aXZlIHNldCAqLwotICAgIHZhbCA9IDA7Ci0gICAgZm9yIChpID0gMTsgaSA8PSAxNDsgaSsrKSAvLyBCLEcgQmFuZHMKLSAgICB7Ci0gICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0uaSA9IGk7Ci0gICAgICAgIGlmIChpID09IDE0KQotICAgICAgICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLm0gPSAyNDg0MDAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0ubSA9ICgyNDEyKyhpLTEpKjUpKjEwMDA7Ci0gICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0uZSA9IDM7Ci0gICAgICAgIHZhbCsrOwotICAgIH0KKwkvKiBYWFggbmVlZCB0byBmaWx0ZXIgYWdhaW5zdCB0aGUgcmVndWxhdG9yeSBkb21haW4gJnwgYWN0aXZlIHNldCAqLworCXZhbCA9IDA7CisJLyogQixHIEJhbmRzICovCisJZm9yIChpID0gMTsgaSA8PSAxNDsgaSsrKSB7CisJCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IGk7CisJCWlmIChpID09IDE0KQorCQkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gMjQ4NDAwMDsKKwkJZWxzZQorCQkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gKDI0MTIrKGktMSkqNSkqMTAwMDsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMzsKKwkJdmFsKys7CisJfQogCi0gICAgbnVtX2JhbmRfYSA9IChJV19NQVhfRlJFUVVFTkNJRVMgLSB2YWwpOworCW51bV9iYW5kX2EgPSAoSVdfTUFYX0ZSRVFVRU5DSUVTIC0gdmFsKTsKKwkvKiBBIEJhbmRzICovCisJZm9yIChpID0gMDsgaSA8IG51bV9iYW5kX2E7IGkrKykgeworCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbMiAqIGldOworCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbMiAqIGkgKyAxXSAqIDEwMDA7CisJCXJhbmdlLT5mcmVxW3ZhbF0uZSA9IDM7CisJCXZhbCsrOworCX0KKwkvKiBNSU1PIFJhdGUgTm90IERlZmluZWQgTm93CisJKiBGb3IgODAyLjExYSwgdGhlcmUgYXJlIHRvbyBtb3JlIGZyZXF1ZW5jeS4KKwkqIFdlIGNhbid0IHJldHVybiB0aGVtIGFsbC4KKwkqLworCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOworCSNlbmRpZgogCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9iYW5kX2E7IGkrKykgLy8gQSBCYW5kcwotICAgIHsKLSAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5pID0gY2hhbm5lbF9mcmVxdWVuY3lfMTFBWzIgKiBpXTsKLSAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5tID0gY2hhbm5lbF9mcmVxdWVuY3lfMTFBWzIgKiBpICsgMV0gKiAxMDAwOwotICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLmUgPSAzOwotICAgICAgICB2YWwrKzsKLSAgICB9Ci0gICAgLy8gTUlNTyBSYXRlIE5vdCBEZWZpbmVkIE5vdwotICAgIC8vRm9yIDgwMi4xMWEsIHRoZXJlIGFyZSB0b28gbW9yZSBmcmVxdWVuY3kuIFdlIGNhbid0IHJldHVybiB0aGVtIGFsbAotICAgIHJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOwotI2VuZGlmCisJLyogTWF4IG9mIC9wcm9jL25ldC93aXJlbGVzcyAqLworCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOyAgLyogPz8gIDkyOyAqLworCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDE1NDsgLyogPz8gKi8KKwlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAxNTQ7IC8qID8/ICovCisJcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsgICAgICAvKiA/PyAqLwogCi0vKiBNYXggb2YgL3Byb2MvbmV0L3dpcmVsZXNzICovCi0gICAgcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7IC8vPz8gICAgICAgICAgICAgICAgICAvLzkyOwotICAgIHJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDE1NDsgLy8/PwotICAgIHJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDE1NDsgLy8/PwotICAgIHJhbmdlLT5zZW5zaXRpdml0eSA9IDM7IC8vPz8KKwkvKiBYWFggdGhlc2UgbmVlZCB0byBiZSBuc2Qtc3BlY2lmaWMhICovCisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKwlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IDQgLyogTlVNX1dFUEtFWVMgPz8gKi87CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7IC8qID8/ICovCiAKLS8vIFhYWCB0aGVzZSBuZWVkIHRvIGJlIG5zZC1zcGVjaWZpYyEKLSAgICByYW5nZS0+bWluX3J0cyA9IDA7Ci0gICAgcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwotICAgIHJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLSAgICByYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwotICAgIHJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gNC8qTlVNX1dFUEtFWVMqLzsgLy8/PwotICAgIHJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOyAvLz8/CisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OyAvKiA/PyBXRVAgS2V5IEVuY29kaW5nIFNpemUgKi8KKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOyAvKiA/PyAqLwogCi0gICAgcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OyAvLz8/ICAgICAgICAgICAgICAgLy9XRVAgS2V5IEVuY29kaW5nIFNpemUKLSAgICByYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOy8vPz8KKwkvKiBYWFggd2hhdCBhYm91dCBudW1fYml0cmF0ZXMvdGhyb3VnaHB1dD8gKi8KKwlyYW5nZS0+bnVtX2JpdHJhdGVzID0gMDsgLyogPz8gKi8KIAotLy8gWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/Ci0gICAgcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDA7IC8vPz8KKwkvKiBlc3RpbWF0ZWQgbWF4IHRocm91Z2hwdXQKKwkqIFhYWCBuZWVkIHRvIGNhcCBpdCBpZiB3ZSdyZSBydW5uaW5nIGF0IH4yTWJwcy4uCisJKi8KIAotLyogZXN0aW1hdGVkIG1heCB0aHJvdWdocHV0ICovCi0vLyBYWFggbmVlZCB0byBjYXAgaXQgaWYgd2UncmUgcnVubmluZyBhdCB+Mk1icHMuLgorCXJhbmdlLT50aHJvdWdocHV0ID0gMzAwMDAwMDAwOwogCi0gICAgcmFuZ2UtPnRocm91Z2hwdXQgPSAzMDAwMDAwMDA7Ci0KLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgc3RydWN0IHNvY2thZGRyICpNYWNBZGRyLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IHNvY2thZGRyICpNYWNBZGRyLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgLy8gQVAgTW9kZQotICAgICAgICB6ZmlXbGFuU2V0TWFjQWRkcmVzcyhkZXYsKHUxNl90ICopJk1hY0FkZHItPnNhX2RhdGFbMF0pOwotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NUQSBNb2RlCi0gICAgICAgIHpmaVdsYW5TZXRCc3NpZChkZXYsJk1hY0FkZHItPnNhX2RhdGFbMF0pOworCWlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIHsKKwkJLyogQVAgTW9kZSAqLworCQl6ZmlXbGFuU2V0TWFjQWRkcmVzcyhkZXYsICh1MTZfdCAqKSZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKKwl9IGVsc2UgeworCQkvKiBTVEEgTW9kZSAqLworCQl6ZmlXbGFuU2V0QnNzaWQoZGV2LCAmTWFjQWRkci0+c2FfZGF0YVswXSk7CisJfQogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKQotICAgIHsKLSAgICAgICAgLy91OF90IHdwYWllTGVuLHdwYWllWzgwXTsKLSAgICAgICAgLy96ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOwotICAgICAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOwotICAgICAgICB6ZmlXbGFuRW5hYmxlKGRldik7Ci0gICAgICAgIC8vaWYgKHdwYWllTGVuID4gMikKLSAgICAgICAgLy8gICAgemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsKLSAgICB9CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKSB7CisJCS8qIHU4X3Qgd3BhaWVMZW4sd3BhaWVbODBdOyAqLworCQkvKiB6ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOyAqLworCQl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworCQl6ZmlXbGFuRW5hYmxlKGRldik7CisJCS8qIGlmICh3cGFpZUxlbiA+IDIpICovCisJCS8qIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7ICovCisJfQogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpNYWNBZGRyLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IHNvY2thZGRyICpNYWNBZGRyLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgLy8gQVAgTW9kZQotICAgICAgICB6ZmlXbGFuUXVlcnlNYWNBZGRyZXNzKGRldiwgJk1hY0FkZHItPnNhX2RhdGFbMF0pOwotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NUQSBNb2RlCi0gICAgewotICAgICAgICBpZiAobWFjcC0+YWRhcHRlclN0YXRlID09IFpNX1NUQVRVU19NRURJQV9DT05ORUNUKQotICAgICAgICB7Ci0gICAgICAgICAgICB6ZmlXbGFuUXVlcnlCc3NpZChkZXYsICZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHU4X3QgemVyb19hZGRyWzZdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0gICAgICAgICAgICBtZW1jcHkoJk1hY0FkZHItPnNhX2RhdGFbMF0sIHplcm9fYWRkciwgc2l6ZW9mKHplcm9fYWRkcikpOwotICAgICAgICB9Ci0gICAgfQorCWlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIHsKKwkJLyogQVAgTW9kZSAqLworCQl6ZmlXbGFuUXVlcnlNYWNBZGRyZXNzKGRldiwgJk1hY0FkZHItPnNhX2RhdGFbMF0pOworCX0gZWxzZSB7CisJCS8qIFNUQSBNb2RlICovCisJCWlmIChtYWNwLT5hZGFwdGVyU3RhdGUgPT0gWk1fU1RBVFVTX01FRElBX0NPTk5FQ1QpIHsKKwkJCXpmaVdsYW5RdWVyeUJzc2lkKGRldiwgJk1hY0FkZHItPnNhX2RhdGFbMF0pOworCQl9IGVsc2UgeworCQkJdThfdCB6ZXJvX2FkZHJbNl0gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJCQkJCTB4MDAsIDB4MDAgfTsKKwkJCW1lbWNweSgmTWFjQWRkci0+c2FfZGF0YVswXSwgemVyb19hZGRyLAorCQkJCQkJCXNpemVvZih6ZXJvX2FkZHIpKTsKKwkJfQorCX0KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9pd2FwbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgLy9Eb24ndCBrbm93IGhvdyB0byBkbyB5ZXQtLUNXWWFuZygrKQotICAgIHJldHVybiAwOworCS8qIERvbid0IGtub3cgaG93IHRvIGRvIHlldC0tQ1dZYW5nKCspICovCisJcmV0dXJuIDA7CiAKIH0KIAogaW50IHVzYmRydndleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQorCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIHByaW50aygiQ1dZIC0gdXNiZHJ2d2V4dF9zaXdzY2FuXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJDV1kgLSB1c2JkcnZ3ZXh0X3Npd3NjYW5cbiIpOwogCi0gICAgemZpV2xhblNjYW4oZGV2KTsKKwl6ZmlXbGFuU2NhbihkZXYpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICAvL3N0cnVjdCB6c1dsYW5EZXYqIHdkID0gKHN0cnVjdCB6c1dsYW5EZXYqKSB6bXdfd2xhbl9kZXYoZGV2KTsKLSAgICBjaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7Ci0gICAgY2hhciAqZW5kX2J1ZjsKLSAgICBpbnQgaTsKLSAgICAvL3N0cnVjdCB6c0Jzc0xpc3QgQnNzTGlzdDsKLSAgICBzdHJ1Y3QgenNCc3NMaXN0VjEgKnBCc3NMaXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpzQnNzTGlzdFYxKSwgR0ZQX0tFUk5FTCk7Ci0gICAgLy9Cc3NMaXN0ID0gd2QtPnN0YS5wQnNzTGlzdDsKLSAgICAvL3ptd19nZXRfd2xhbl9kZXYoZGV2KTsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJLyogc3RydWN0IHpzV2xhbkRldiogd2QgPSAoc3RydWN0IHpzV2xhbkRldiopIHptd193bGFuX2RldihkZXYpOyAqLworCWNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKKwljaGFyICplbmRfYnVmOworCWludCBpOworCS8qIHN0cnVjdCB6c0Jzc0xpc3QgQnNzTGlzdDsgKi8KKwlzdHJ1Y3QgenNCc3NMaXN0VjEgKnBCc3NMaXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpzQnNzTGlzdFYxKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJLyogQnNzTGlzdCA9IHdkLT5zdGEucEJzc0xpc3Q7ICovCisJLyogem13X2dldF93bGFuX2RldihkZXYpOyAqLwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgaWYgKGRhdGEtPmxlbmd0aCA9PSAwKQotICAgIHsKLSAgICAgICBlbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBlbmRfYnVmID0gZXh0cmEgKyBkYXRhLT5sZW5ndGg7Ci0gICAgfQorCWlmIChkYXRhLT5sZW5ndGggPT0gMCkKKwkJZW5kX2J1ZiA9IGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQTsKKwllbHNlCisJCWVuZF9idWYgPSBleHRyYSArIGRhdGEtPmxlbmd0aDsKIAotICAgIHByaW50aygiZ2l3c2NhbiAtIFJlcG9ydCBTY2FuIFJlc3VsdHNcbiIpOwotICAgIC8vcHJpbnRrKCJnaXdzY2FuIC0gQnNzTGlzdCBTcmV1Y3R1cmUgTGVuIDogJWRcbiIsIHNpemVvZihCc3NMaXN0KSk7Ci0gICAgLy9wcmludGsoImdpd3NjYW4gLSBCc3NMaXN0IENvdW50IDogJWRcbiIsIHdkLT5zdGEucEJzc0xpc3QtPmJzc0NvdW50KTsKLSAgICAvL3ByaW50aygiZ2l3c2NhbiAtIFVwZGF0ZUJzc0xpc3QgQ291bnQgOiAlZFxuIiwgd2QtPnN0YS5wVXBkYXRlQnNzTGlzdC0+YnNzQ291bnQpOwotICAgIHpmaVdsYW5RdWVyeUJzc0xpc3RWMShkZXYsIHBCc3NMaXN0KTsKLSAgICAvL3pmaVdsYW5RdWVyeUJzc0xpc3QoZGV2LCAmQnNzTGlzdCk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2l3c2NhbiAtIFJlcG9ydCBTY2FuIFJlc3VsdHNcbiIpOworCS8qIHByaW50aygiZ2l3c2NhbiAtIEJzc0xpc3QgU3JldWN0dXJlIExlbiA6ICVkXG4iLCBzaXplb2YoQnNzTGlzdCkpOworCSogcHJpbnRrKCJnaXdzY2FuIC0gQnNzTGlzdCBDb3VudCA6ICVkXG4iLAorCSogd2QtPnN0YS5wQnNzTGlzdC0+YnNzQ291bnQpOworCSogcHJpbnRrKCJnaXdzY2FuIC0gVXBkYXRlQnNzTGlzdCBDb3VudCA6ICVkXG4iLAorCSogd2QtPnN0YS5wVXBkYXRlQnNzTGlzdC0+YnNzQ291bnQpOworCSovCisJemZpV2xhblF1ZXJ5QnNzTGlzdFYxKGRldiwgcEJzc0xpc3QpOworCS8qIHpmaVdsYW5RdWVyeUJzc0xpc3QoZGV2LCAmQnNzTGlzdCk7ICovCiAKLS8qIFJlYWQgYW5kIHBhcnNlIGFsbCBlbnRyaWVzICovCi0gICAgcHJpbnRrKCJnaXdzY2FuIC0gcEJzc0xpc3QtPmJzc0NvdW50IDogJWRcbiIsIHBCc3NMaXN0LT5ic3NDb3VudCk7Ci0gICAgLy9wcmludGsoImdpd3NjYW4gLSBCc3NMaXN0LmJzc0NvdW50IDogJWRcbiIsIEJzc0xpc3QuYnNzQ291bnQpOworCS8qIFJlYWQgYW5kIHBhcnNlIGFsbCBlbnRyaWVzICovCisJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2l3c2NhbiAtIHBCc3NMaXN0LT5ic3NDb3VudCA6ICVkXG4iLAorCQkJCQkJcEJzc0xpc3QtPmJzc0NvdW50KTsKKwkvKiBwcmludGsoImdpd3NjYW4gLSBCc3NMaXN0LmJzc0NvdW50IDogJWRcbiIsIEJzc0xpc3QuYnNzQ291bnQpOyAqLwogCi0gICAgZm9yIChpID0gMDsgaSA8IHBCc3NMaXN0LT5ic3NDb3VudDsgaSsrKQotICAgIHsKLS8qIFRyYW5zbGF0ZSB0byBXRSBmb3JtYXQgdGhpcyBlbnRyeSAqLwotICAgICAgICAvL2N1cnJlbnRfZXYgPSB1c2JkcnZfdHJhbnNsYXRlX3NjYW4oZGV2LCBpbmZvLCBjdXJyZW50X2V2LAotICAgICAgICAvLyAgICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZwQnNzTGlzdC0+YnNzSW5mb1tpXSk7Ci0gICAgICAgIGN1cnJlbnRfZXYgPSB1c2JkcnZfdHJhbnNsYXRlX3NjYW4oZGV2LCBpbmZvLCBjdXJyZW50X2V2LAotICAgICAgICAgICAgZW5kX2J1ZiwgJnBCc3NMaXN0LT5ic3NJbmZvW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgcEJzc0xpc3QtPmJzc0NvdW50OyBpKyspIHsKKwkJLyogVHJhbnNsYXRlIHRvIFdFIGZvcm1hdCB0aGlzIGVudHJ5CisJCSogY3VycmVudF9ldiA9IHVzYmRydl90cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sIGN1cnJlbnRfZXYsCisJCSogZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmcEJzc0xpc3QtPmJzc0luZm9baV0pOworCQkqLworCQljdXJyZW50X2V2ID0gdXNiZHJ2X3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywgY3VycmVudF9ldiwKKwkJCQkJZW5kX2J1ZiwgJnBCc3NMaXN0LT5ic3NJbmZvW2ldKTsKIAotI2lmIFdJUkVMRVNTX0VYVCA+IDE2Ci0gICAgICAgIGlmIChjdXJyZW50X2V2ID09IGVuZF9idWYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGtmcmVlKHBCc3NMaXN0KTsKLSAgICAgICAgICAgIGRhdGEtPmxlbmd0aCA9IGN1cnJlbnRfZXYgLSBleHRyYTsKLSAgICAgICAgICAgIHJldHVybiAtRTJCSUc7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KKwkJI2lmIFdJUkVMRVNTX0VYVCA+IDE2CisJCWlmIChjdXJyZW50X2V2ID09IGVuZF9idWYpIHsKKwkJCWtmcmVlKHBCc3NMaXN0KTsKKwkJCWRhdGEtPmxlbmd0aCA9IGN1cnJlbnRfZXYgLSBleHRyYTsKKwkJCXJldHVybiAtRTJCSUc7CisJCX0KKwkJI2VuZGlmCisJfQogCi0vKiBMZW5ndGggb2YgZGF0YSAqLwotICAgIGRhdGEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOwotICAgIGRhdGEtPmZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0b2RvICovCisJLyogTGVuZ3RoIG9mIGRhdGEgKi8KKwlkYXRhLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKKwlkYXRhLT5mbGFncyA9IDA7ICAgLyogdG9kbyAqLwogCi0gICAga2ZyZWUocEJzc0xpc3QpOworCWtmcmVlKHBCc3NMaXN0KTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZXNzaWQsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkLCBjaGFyICpleHRyYSkKIHsKLSAgICBjaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOwotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwljaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFICsgMV07CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKGVzc2lkLT5mbGFncyA9PSAxKQotICAgIHsKLSAgICAgICAgaWYgKGVzc2lkLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUrMSkpCi0gICAgICAgICAgICByZXR1cm4gLUUyQklHOworCWlmIChlc3NpZC0+ZmxhZ3MgPT0gMSkgeworCQlpZiAoZXNzaWQtPmxlbmd0aCA+IChJV19FU1NJRF9NQVhfU0laRSArIDEpKQorCQkJcmV0dXJuIC1FMkJJRzsKIAotICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJkVzc2lkQnVmLCBlc3NpZC0+cG9pbnRlciwgZXNzaWQtPmxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZFc3NpZEJ1ZiwgZXNzaWQtPnBvaW50ZXIsIGVzc2lkLT5sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLSAgICAgICAgRXNzaWRCdWZbZXNzaWQtPmxlbmd0aF0gPSAnXDAnOwotICAgICAgICAvL3ByaW50aygic2l3ZXNzaWQgLSBTZXQgRXNzaWQgOiAlc1xuIixFc3NpZEJ1Zik7Ci0gICAgICAgIC8vcHJpbnRrKCJzaXdlc3NpZCAtIEVzc2lkIExlbiA6ICVkXG4iLGVzc2lkLT5sZW5ndGgpOwotICAgICAgICAvL3ByaW50aygic2l3ZXNzaWQgLSBFc3NpZCBGbGFnIDogJXhcbiIsZXNzaWQtPmZsYWdzKTsKLSAgICAgICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICB6ZmlXbGFuU2V0U1NJRChkZXYsIEVzc2lkQnVmLCBzdHJsZW4oRXNzaWRCdWYpKTsKLSAgICAgICAgICAgIHpmaVdsYW5TZXRGcmVxdWVuY3koZGV2LCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3koZGV2KSwgRkFMU0UpOwotICAgICAgICAgICAgemZpV2xhblNldEVuY3J5TW9kZShkZXYsIHpmaVdsYW5RdWVyeUVuY3J5TW9kZShkZXYpKTsKLSAgICAgICAgICAgIC8vdThfdCB3cGFpZUxlbix3cGFpZVs1MF07Ci0gICAgICAgICAgICAvL3pmaVdsYW5RdWVyeVdwYUllKGRldiwgd3BhaWUsICZ3cGFpZUxlbik7Ci0gICAgICAgICAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOwotICAgICAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOwotICAgICAgICAgICAgLy9pZiAod3BhaWVMZW4gPiAyKQotICAgICAgICAgICAgLy8gICAgemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsKLSAgICAgICAgfQotICAgIH0KKwkJRXNzaWRCdWZbZXNzaWQtPmxlbmd0aF0gPSAnXDAnOworCQkvKiBwcmludGsoInNpd2Vzc2lkIC0gU2V0IEVzc2lkIDogJXNcbiIsRXNzaWRCdWYpOyAqLworCQkvKiBwcmludGsoInNpd2Vzc2lkIC0gRXNzaWQgTGVuIDogJWRcbiIsZXNzaWQtPmxlbmd0aCk7ICovCisJCS8qIHByaW50aygic2l3ZXNzaWQgLSBFc3NpZCBGbGFnIDogJXhcbiIsZXNzaWQtPmZsYWdzKTsgKi8KKwkJaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKSB7CisJCQl6ZmlXbGFuU2V0U1NJRChkZXYsIEVzc2lkQnVmLCBzdHJsZW4oRXNzaWRCdWYpKTsKKwkJCXpmaVdsYW5TZXRGcmVxdWVuY3koZGV2LCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3koZGV2KSwKKwkJCQkJCUZBTFNFKTsKKwkJCXpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoZGV2KSk7CisJCQkvKiB1OF90IHdwYWllTGVuLHdwYWllWzUwXTsgKi8KKwkJCS8qIHpmaVdsYW5RdWVyeVdwYUllKGRldiwgd3BhaWUsICZ3cGFpZUxlbik7ICovCisJCQl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworCQkJemZpV2xhbkVuYWJsZShkZXYpOworCQkJLyogaWYgKHdwYWllTGVuID4gMikgKi8KKwkJCS8qIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7ICovCisJCX0KKwl9CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BvaW50ICplc3NpZCwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHU4X3QgRXNzaWRMZW47Ci0gICAgY2hhciBFc3NpZEJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXTsKLSAgICBpbnQgc3NpZF9sZW47CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXU4X3QgRXNzaWRMZW47CisJY2hhciBFc3NpZEJ1ZltJV19FU1NJRF9NQVhfU0laRSArIDFdOworCWludCBzc2lkX2xlbjsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIHpmaVdsYW5RdWVyeVNTSUQoZGV2LCAmRXNzaWRCdWZbMF0sICZFc3NpZExlbik7CisJemZpV2xhblF1ZXJ5U1NJRChkZXYsICZFc3NpZEJ1ZlswXSwgJkVzc2lkTGVuKTsKIAotICAgIC8qIENvbnZlcnQgdHlwZSBmcm9tIHVuc2lnbmVkIGNoYXIgdG8gY2hhciAqLwotICAgIHNzaWRfbGVuID0gKGludClFc3NpZExlbjsKKwkvKiBDb252ZXJ0IHR5cGUgZnJvbSB1bnNpZ25lZCBjaGFyIHRvIGNoYXIgKi8KKwlzc2lkX2xlbiA9IChpbnQpRXNzaWRMZW47CiAKLSAgICAvKiBNYWtlIHN1cmUgdGhlIGVzc2lkIGxlbmd0aCBpcyBub3QgZ3JlYXRlciB0aGFuIElXX0VTU0lEX01BWF9TSVpFICovCi0gICAgaWYgKHNzaWRfbGVuID4gSVdfRVNTSURfTUFYX1NJWkUpCi0gICAgICAgIHNzaWRfbGVuID0gSVdfRVNTSURfTUFYX1NJWkU7CisJLyogTWFrZSBzdXJlIHRoZSBlc3NpZCBsZW5ndGggaXMgbm90IGdyZWF0ZXIgdGhhbiBJV19FU1NJRF9NQVhfU0laRSAqLworCWlmIChzc2lkX2xlbiA+IElXX0VTU0lEX01BWF9TSVpFKQorCQlzc2lkX2xlbiA9IElXX0VTU0lEX01BWF9TSVpFOwogCi0gICAgRXNzaWRCdWZbc3NpZF9sZW5dID0gJ1wwJzsKKwlFc3NpZEJ1Zltzc2lkX2xlbl0gPSAnXDAnOwogCi0gICAgZXNzaWQtPmZsYWdzID0gMTsKLSAgICBlc3NpZC0+bGVuZ3RoID0gc3RybGVuKEVzc2lkQnVmKTsKKwllc3NpZC0+ZmxhZ3MgPSAxOworCWVzc2lkLT5sZW5ndGggPSBzdHJsZW4oRXNzaWRCdWYpOwogCi0gICAgbWVtY3B5KGV4dHJhLCBFc3NpZEJ1ZiwgZXNzaWQtPmxlbmd0aCk7Ci0gICAgLy8gd2lyZWxlc3MuYyBpbiBLZXJuZWwgd291bGQgaGFuZGxlIGNvcHlfdG9fdXNlciAtLSBsaW5lIDY3OQotICAgIC8qaWYgKGVzc2lkLT5wb2ludGVyKQotICAgIHsKLSAgICAgICAgaWYgKCBjb3B5X3RvX3VzZXIoZXNzaWQtPnBvaW50ZXIsIEVzc2lkQnVmLCBlc3NpZC0+bGVuZ3RoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50aygiZ2l3ZXNzaWQgLSBjb3B5X3RvX3VzZXIgRmFpbFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgfQotICAgIH0qLworCW1lbWNweShleHRyYSwgRXNzaWRCdWYsIGVzc2lkLT5sZW5ndGgpOworCS8qIHdpcmVsZXNzLmMgaW4gS2VybmVsIHdvdWxkIGhhbmRsZSBjb3B5X3RvX3VzZXIgLS0gbGluZSA2NzkgKi8KKwkvKiBpZiAoZXNzaWQtPnBvaW50ZXIpIHsKKwkqIGlmIChjb3B5X3RvX3VzZXIoZXNzaWQtPnBvaW50ZXIsIEVzc2lkQnVmLCBlc3NpZC0+bGVuZ3RoKSkgeworCSogcHJpbnRrKCJnaXdlc3NpZCAtIGNvcHlfdG9fdXNlciBGYWlsXG4iKTsKKwkqIHJldHVybiAtRUZBVUxUOworCSogfQorCSogfQorCSovCiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3bmlja24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKm5pY2tuYW1lKQogewotICAgIC8vRXhpc3QgYnV0IGp1bmstLUNXWWFuZygrKQorCS8qIEV4aXN0IGJ1dCBqdW5rLS1DV1lhbmcoKykgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA4MiwxODIgKzEwMjcsMTgwIEBACiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpuaWNrbmFtZSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgdThfdCBFc3NpZExlbjsKLSAgICBjaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1OF90IEVzc2lkTGVuOworCWNoYXIgRXNzaWRCdWZbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIHpmaVdsYW5RdWVyeVNTSUQoZGV2LCAmRXNzaWRCdWZbMF0sICZFc3NpZExlbik7Ci0gICAgRXNzaWRCdWZbRXNzaWRMZW5dID0gMDsKKwl6ZmlXbGFuUXVlcnlTU0lEKGRldiwgJkVzc2lkQnVmWzBdLCAmRXNzaWRMZW4pOworCUVzc2lkQnVmW0Vzc2lkTGVuXSA9IDA7CiAKLSAgICBkYXRhLT5mbGFncyA9IDE7Ci0gICAgZGF0YS0+bGVuZ3RoID0gc3RybGVuKEVzc2lkQnVmKTsKKwlkYXRhLT5mbGFncyA9IDE7CisJZGF0YS0+bGVuZ3RoID0gc3RybGVuKEVzc2lkQnVmKTsKIAotICAgIG1lbWNweShuaWNrbmFtZSwgRXNzaWRCdWYsIGRhdGEtPmxlbmd0aCk7CisJbWVtY3B5KG5pY2tuYW1lLCBFc3NpZEJ1ZiwgZGF0YS0+bGVuZ3RoKTsKIAogCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIC8vQXJyYXkgdG8gRGVmaW5lIFJhdGUgTnVtYmVyIHRoYXQgU2VuZCB0byBEcml2ZXIKLSAgICB1MTZfdCB6Y0luZGV4dG9SYXRlQkdbMTZdID0gezEwMDAsIDIwMDAsIDU1MDAsIDExMDAwLCAwLCAwLCAwLCAwLCA0ODAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDAwMCwgMTIwMDAsIDYwMDAsIDU0MDAwLCAzNjAwMCwgMTgwMDAsIDkwMDB9OwotICAgIHUxNl90IHpjUmF0ZVRvTUNTW10gPSB7MHhmZiwgMCwgMSwgMiwgMywgMHhiLCAweGYsIDB4YSwgMHhlLCAweDksIDB4ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OCwgMHhjfTsKLSAgICB1OF90IGksUmF0ZUluZGV4ID0gNDsKLSAgICB1MTZfdCBSYXRlS2JwczsKKwkvKiBBcnJheSB0byBEZWZpbmUgUmF0ZSBOdW1iZXIgdGhhdCBTZW5kIHRvIERyaXZlciAqLworCXUxNl90IHpjSW5kZXh0b1JhdGVCR1sxNl0gPSB7MTAwMCwgMjAwMCwgNTUwMCwgMTEwMDAsIDAsIDAsIDAsIDAsCisJCQk0ODAwMCwgMjQwMDAsIDEyMDAwLCA2MDAwLCA1NDAwMCwgMzYwMDAsIDE4MDAwLCA5MDAwfTsKKwl1MTZfdCB6Y1JhdGVUb01DU1tdID0gezB4ZmYsIDAsIDEsIDIsIDMsIDB4YiwgMHhmLCAweGEsIDB4ZSwgMHg5LCAweGQsCisJCQkJMHg4LCAweGN9OworCXU4X3QgaSwgUmF0ZUluZGV4ID0gNDsKKwl1MTZfdCBSYXRlS2JwczsKIAotICAgIC8vcHJpbnRrKCJmcnEtPmRpc2FibGVkIDogMHgleFxuIixmcnEtPmRpc2FibGVkKTsKLSAgICAvL3ByaW50aygiZnJxLT52YWx1ZSA6IDB4JXhcbiIsZnJxLT52YWx1ZSk7CisJLyogcHJpbnRrKCJmcnEtPmRpc2FibGVkIDogMHgleFxuIixmcnEtPmRpc2FibGVkKTsgKi8KKwkvKiBwcmludGsoImZycS0+dmFsdWUgOiAweCV4XG4iLGZycS0+dmFsdWUpOyAqLwogCi0gICAgUmF0ZUticHMgPSBmcnEtPnZhbHVlIC8gMTAwMDsKLSAgICAvL3ByaW50aygiUmF0ZUticHMgOiAlZFxuIiwgUmF0ZUticHMpOwotICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKFJhdGVLYnBzID09IHpjSW5kZXh0b1JhdGVCR1tpXSkKLSAgICAgICAgICAgIFJhdGVJbmRleCA9IGk7Ci0gICAgfQotICAgIGlmICh6Y0luZGV4dG9SYXRlQkdbUmF0ZUluZGV4XSA9PSAwKQotICAgICAgICBSYXRlSW5kZXggPSAweGZmOwotICAgIC8vcHJpbnRrKCJSYXRlSW5kZXggOiAleFxuIiwgUmF0ZUluZGV4KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykKLSAgICAgICAgaWYgKFJhdGVJbmRleCA9PSB6Y1JhdGVUb01DU1tpXSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIC8vcHJpbnRrKCJJbmRleCA6ICV4XG4iLCBpKTsKLSAgICBpZiAoUmF0ZUticHMgPT0gNjUwMDApCi0gICAgewotICAgICAgICBSYXRlSW5kZXggPSAyMDsKLSAgICAgICAgcHJpbnRrKCJSYXRlSW5kZXggOiAlZFxuIiwgUmF0ZUluZGV4KTsKLSAgICB9Ci0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKQotICAgIHsKLSAgICAgICAgemZpV2xhblNldFR4UmF0ZShkZXYsIGkpOwotICAgICAgICAvL3pmaVdsYW5EaXNhYmxlKGRldik7Ci0gICAgICAgIC8vemZpV2xhbkVuYWJsZShkZXYpOwotICAgIH0KKwlSYXRlS2JwcyA9IGZycS0+dmFsdWUgLyAxMDAwOworCS8qIHByaW50aygiUmF0ZUticHMgOiAlZFxuIiwgUmF0ZUticHMpOyAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmIChSYXRlS2JwcyA9PSB6Y0luZGV4dG9SYXRlQkdbaV0pCisJCQlSYXRlSW5kZXggPSBpOworCX0KIAotICAgIHJldHVybiAwOworCWlmICh6Y0luZGV4dG9SYXRlQkdbUmF0ZUluZGV4XSA9PSAwKQorCQlSYXRlSW5kZXggPSAweGZmOworCS8qIHByaW50aygiUmF0ZUluZGV4IDogJXhcbiIsIFJhdGVJbmRleCk7ICovCisJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspCisJCWlmIChSYXRlSW5kZXggPT0gemNSYXRlVG9NQ1NbaV0pCisJCQlicmVhazsKKwkvKiBwcmludGsoIkluZGV4IDogJXhcbiIsIGkpOyAqLworCWlmIChSYXRlS2JwcyA9PSA2NTAwMCkgeworCQlSYXRlSW5kZXggPSAyMDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmF0ZUluZGV4IDogJWRcbiIsIFJhdGVJbmRleCk7CisJfQorCisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKSB7CisJCXpmaVdsYW5TZXRUeFJhdGUoZGV2LCBpKTsKKwkJLyogemZpV2xhbkRpc2FibGUoZGV2KTsgKi8KKwkJLyogemZpV2xhbkVuYWJsZShkZXYpOyAqLworCX0KKworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIGZycS0+Zml4ZWQgPSAwOwotICAgIGZycS0+ZGlzYWJsZWQgPSAwOwotICAgIGZycS0+dmFsdWUgPSB6ZmlXbGFuUXVlcnlSeFJhdGUoZGV2KSAqIDEwMDA7CisJZnJxLT5maXhlZCA9IDA7CisJZnJxLT5kaXNhYmxlZCA9IDA7CisJZnJxLT52YWx1ZSA9IHpmaVdsYW5RdWVyeVJ4UmF0ZShkZXYpICogMTAwMDsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgaW50IHZhbCA9IHJ0cy0+dmFsdWU7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCWludCB2YWwgPSBydHMtPnZhbHVlOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgaWYgKHJ0cy0+ZGlzYWJsZWQpCi0gICAgICAgIHZhbCA9IDIzNDc7CisJaWYgKHJ0cy0+ZGlzYWJsZWQpCisJCXZhbCA9IDIzNDc7CiAKLSAgICBpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyMzQ3KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCh2YWwgPCAwKSB8fCAodmFsID4gMjM0NykpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgemZpV2xhblNldFJ0c1RocmVzaG9sZChkZXYsdmFsKTsKKwl6ZmlXbGFuU2V0UnRzVGhyZXNob2xkKGRldiwgdmFsKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgcnRzLT52YWx1ZSA9IHpmaVdsYW5RdWVyeVJ0c1RocmVzaG9sZChkZXYpOwotICAgIHJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA+PSAyMzQ3KTsKLSAgICBydHMtPmZpeGVkID0gMTsKKwlydHMtPnZhbHVlID0gemZpV2xhblF1ZXJ5UnRzVGhyZXNob2xkKGRldik7CisJcnRzLT5kaXNhYmxlZCA9IChydHMtPnZhbHVlID49IDIzNDcpOworCXJ0cy0+Zml4ZWQgPSAxOwogCi0gICAgcmV0dXJuIDA7Ci0KKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHUxNl90IGZyYWdUaHJlc2hvbGQ7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXUxNl90IGZyYWdUaHJlc2hvbGQ7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBpZiAoZnJhZy0+ZGlzYWJsZWQpCi0gICAgICAgIGZyYWdUaHJlc2hvbGQgPSAwOwotICAgIGVsc2UKLSAgICAgICAgZnJhZ1RocmVzaG9sZCA9IGZyYWctPnZhbHVlOworCWlmIChmcmFnLT5kaXNhYmxlZCkKKwkJZnJhZ1RocmVzaG9sZCA9IDA7CisJZWxzZQorCQlmcmFnVGhyZXNob2xkID0gZnJhZy0+dmFsdWU7CiAKLSAgICB6ZmlXbGFuU2V0RnJhZ1RocmVzaG9sZChkZXYsZnJhZ1RocmVzaG9sZCk7CisJemZpV2xhblNldEZyYWdUaHJlc2hvbGQoZGV2LCBmcmFnVGhyZXNob2xkKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgdTE2IHZhbDsKLSAgICB1bnNpZ25lZCBsb25nIGlycUZsYWc7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXUxNiB2YWw7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnOwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKIAotICAgIHZhbCA9IHpmaVdsYW5RdWVyeUZyYWdUaHJlc2hvbGQoZGV2KTsKKwl2YWwgPSB6ZmlXbGFuUXVlcnlGcmFnVGhyZXNob2xkKGRldik7CiAKLSAgICBmcmFnLT52YWx1ZSA9IHZhbDsKKwlmcmFnLT52YWx1ZSA9IHZhbDsKIAotICAgIGZyYWctPmRpc2FibGVkID0gKHZhbCA+PSAyMzQ2KTsKLSAgICBmcmFnLT5maXhlZCA9IDE7CisJZnJhZy0+ZGlzYWJsZWQgPSAodmFsID49IDIzNDYpOworCWZyYWctPmZpeGVkID0gMTsKIAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewotICAgIC8vTm90IHN1cHBvcnQgeWV0LS1DV1luZygrKQorCS8qIE5vdCBzdXBwb3J0IHlldC0tQ1dZbmcoKykgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI2NSw3ICsxMjA4LDcgQEAKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgLy9Ob3Qgc3VwcG9ydCB5ZXQtLUNXWW5nKCspCisJLyogTm90IHN1cHBvcnQgeWV0LS1DV1luZygrKSAqLwogCXJldHVybiAwOwogfQogCkBAIC0xMjczLDcgKzEyMTYsNyBAQAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKLSAgICAvL0RvIG5vdGhpbmctLUNXWWFuZygrKQorCS8qIERvIG5vdGhpbmctLUNXWWFuZygrKSAqLwogCXJldHVybiAwOwogfQogCkBAIC0xMjgxLDY2NSArMTIyNCw2NjIgQEAKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgLy9EbyBub3RoaW5nLS1DV1lhbmcoKykKKwkvKiBEbyBub3RoaW5nLS1DV1lhbmcoKykgKi8KIAlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKIHsKLSAgICBzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87Ci0gICAgaW50IGksIFdlcFN0YXRlID0gWk1fRU5DUllQVElPTl9XRVBfRElTQUJMRUQ7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKKwlpbnQgaTsKKwlpbnQgV2VwU3RhdGUgPSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRDsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAoKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpID09IDApCi0gICAgewotICAgICAgICBrZXlJbmZvLmtleSA9IGtleTsKLSAgICAgICAga2V5SW5mby5rZXlMZW5ndGggPSBlcnEtPmxlbmd0aDsKLSAgICAgICAga2V5SW5mby5rZXlJbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0gICAgICAgIGlmIChrZXlJbmZvLmtleUluZGV4ID49IDQpCi0gICAgICAgICAgICBrZXlJbmZvLmtleUluZGV4ID0gMDsKLSAgICAgICAga2V5SW5mby5mbGFnID0gWk1fS0VZX0ZMQUdfREVGQVVMVF9LRVk7CisJaWYgKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSA9PSAwKSB7CisJCWtleUluZm8ua2V5ID0ga2V5OworCQlrZXlJbmZvLmtleUxlbmd0aCA9IGVycS0+bGVuZ3RoOworCQlrZXlJbmZvLmtleUluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKwkJaWYgKGtleUluZm8ua2V5SW5kZXggPj0gNCkKKwkJCWtleUluZm8ua2V5SW5kZXggPSAwOworCQlrZXlJbmZvLmZsYWcgPSBaTV9LRVlfRkxBR19ERUZBVUxUX0tFWTsKIAotICAgICAgICB6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7Ci0gICAgICAgIFdlcFN0YXRlID0gWk1fRU5DUllQVElPTl9XRVBfRU5BQkxFRDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yIChpID0gMTsgaSA8IDQ7IGkrKykKLSAgICAgICAgICAgIHpmaVdsYW5SZW1vdmVLZXkoZGV2LCAwLCBpKTsKLSAgICAgICAgV2VwU3RhdGUgPSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRDsKLSAgICAgICAgLy96ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fTk9fV0VQKTsKLSAgICB9CisJCXpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKKwkJV2VwU3RhdGUgPSBaTV9FTkNSWVBUSU9OX1dFUF9FTkFCTEVEOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspCisJCQl6ZmlXbGFuUmVtb3ZlS2V5KGRldiwgMCwgaSk7CisJCVdlcFN0YXRlID0gWk1fRU5DUllQVElPTl9XRVBfRElTQUJMRUQ7CisJCS8qIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9OT19XRVApOyAqLworCX0KIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKLSAgICB7Ci0gICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBXZXBTdGF0ZSk7Ci0gICAgICAgIHpmaVdsYW5TZXRGcmVxdWVuY3koZGV2LCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3koZGV2KSwgRkFMU0UpOwotICAgICAgICAvL3pmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoZGV2KSk7Ci0gICAgICAgIC8vdThfdCB3cGFpZUxlbix3cGFpZVs1MF07Ci0gICAgICAgIC8vemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsKLSAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKLSAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOwotICAgICAgICAvL2lmICh3cGFpZUxlbiA+IDIpCi0gICAgICAgIC8vICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7Ci0gICAgfQorCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkgeworCQl6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgV2VwU3RhdGUpOworCQl6ZmlXbGFuU2V0RnJlcXVlbmN5KGRldiwgemZpV2xhblF1ZXJ5RnJlcXVlbmN5KGRldiksIEZBTFNFKTsKKwkJLyogemZpV2xhblNldEVuY3J5TW9kZShkZXYsIHpmaVdsYW5RdWVyeUVuY3J5TW9kZShkZXYpKTsgKi8KKwkJLyogdThfdCB3cGFpZUxlbix3cGFpZVs1MF07ICovCisJCS8qIHpmaVdsYW5RdWVyeVdwYUllKGRldiwgd3BhaWUsICZ3cGFpZUxlbik7ICovCisJCXpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CisJCXpmaVdsYW5FbmFibGUoZGV2KTsKKwkJLyogaWYgKHdwYWllTGVuID4gMikgKi8KKwkJLyogemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsgKi8KKwl9CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgdThfdCBFbmNyeXB0aW9uTW9kZTsKLSAgICB1OF90IGtleUxlbiA9IDA7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXU4X3QgRW5jcnlwdGlvbk1vZGU7CisJdThfdCBrZXlMZW4gPSAwOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgRW5jcnlwdGlvbk1vZGUgPSB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoZGV2KTsKKwlFbmNyeXB0aW9uTW9kZSA9IHpmaVdsYW5RdWVyeUVuY3J5TW9kZShkZXYpOwogCi0gICAgaWYgKEVuY3J5cHRpb25Nb2RlKQotICAgIHsKLSAgICAgICAgZXJxLT5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBlcnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotICAgIH0KKwlpZiAoRW5jcnlwdGlvbk1vZGUpCisJCWVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRDsKKwllbHNlCisJCWVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CiAKLS8qIFdlIGNhbid0IHJldHVybiB0aGUga2V5LCBzbyBzZXQgdGhlIHByb3BlciBmbGFnIGFuZCByZXR1cm4gemVybyAqLwotICAgIGVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX05PS0VZOwotICAgIG1lbXNldChrZXksIDAsIDE2KTsKKwkvKiBXZSBjYW4ndCByZXR1cm4gdGhlIGtleSwgc28gc2V0IHRoZSBwcm9wZXIgZmxhZyBhbmQgcmV0dXJuIHplcm8gKi8KKwllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9OT0tFWTsKKwltZW1zZXQoa2V5LCAwLCAxNik7CiAKLS8qIENvcHkgdGhlIGtleSB0byB0aGUgdXNlciBidWZmZXIgKi8KLSAgICBzd2l0Y2goRW5jcnlwdGlvbk1vZGUpCi0gICAgewotICAgICAgICBjYXNlIFpNX1dFUDY0OgotICAgICAgICAgICAga2V5TGVuID0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFpNX1dFUDEyODoKLSAgICAgICAgICAgIGtleUxlbiA9IDEzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWk1fV0VQMjU2OgotICAgICAgICAgICAga2V5TGVuID0gMjk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaTV9BRVM6Ci0gICAgICAgICAgICBrZXlMZW4gPSAxNjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFpNX1RLSVA6Ci0gICAgICAgICAgICBrZXlMZW4gPSAzMjsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIFpNX0VOQUJMRV9DRU5DCi0gICAgICAgIGNhc2UgWk1fQ0VOQzoKLSAgICAgICAgICAgIGtleUxlbiA9IDMyOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQwotICAgICAgICBjYXNlIFpNX05PX1dFUDoKLSAgICAgICAgICAgIGtleUxlbiA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICBrZXlMZW4gPSAwOwotICAgICAgICAgICAgcHJpbnRrKCJVbmtub3duIEVuY3J5TW9kZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKKwkvKiBDb3B5IHRoZSBrZXkgdG8gdGhlIHVzZXIgYnVmZmVyICovCisJc3dpdGNoIChFbmNyeXB0aW9uTW9kZSkgeworCWNhc2UgWk1fV0VQNjQ6CisJCWtleUxlbiA9IDU7CisJCWJyZWFrOworCWNhc2UgWk1fV0VQMTI4OgorCQlrZXlMZW4gPSAxMzsKKwkJYnJlYWs7CisJY2FzZSBaTV9XRVAyNTY6CisJCWtleUxlbiA9IDI5OworCQlicmVhazsKKwljYXNlIFpNX0FFUzoKKwkJa2V5TGVuID0gMTY7CisJCWJyZWFrOworCWNhc2UgWk1fVEtJUDoKKwkJa2V5TGVuID0gMzI7CisJCWJyZWFrOworCSNpZmRlZiBaTV9FTkFCTEVfQ0VOQworCWNhc2UgWk1fQ0VOQzoKKwkJLyogWk1fRU5BQkxFX0NFTkMgKi8KKwkJa2V5TGVuID0gMzI7CisJCWJyZWFrOworCSNlbmRpZgorCWNhc2UgWk1fTk9fV0VQOgorCQlrZXlMZW4gPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlrZXlMZW4gPSAwOworCQlwcmludGsoS0VSTl9FUlIgIlVua25vd24gRW5jcnlNb2RlXG4iKTsKKwkJYnJlYWs7CisJfQorCWVycS0+bGVuZ3RoID0ga2V5TGVuOwogCi0gICAgfQotICAgIGVycS0+bGVuZ3RoID0ga2V5TGVuOwotCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHU4X3QgUFNNb2RlOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1OF90IFBTTW9kZTsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIGlmIChmcnEtPmRpc2FibGVkKQotICAgICAgICBQU01vZGUgPSBaTV9TVEFfUFNfTk9ORTsKLSAgICBlbHNlCi0gICAgICAgIFBTTW9kZSA9IFpNX1NUQV9QU19NQVg7CisJaWYgKGZycS0+ZGlzYWJsZWQpCisJCVBTTW9kZSA9IFpNX1NUQV9QU19OT05FOworCWVsc2UKKwkJUFNNb2RlID0gWk1fU1RBX1BTX01BWDsKIAotICAgIHpmaVdsYW5TZXRQb3dlclNhdmVNb2RlKGRldixQU01vZGUpOworCXpmaVdsYW5TZXRQb3dlclNhdmVNb2RlKGRldiwgUFNNb2RlKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQogewotICAgIHVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CiAKLSAgICBpZiAoemZpV2xhblF1ZXJ5UG93ZXJTYXZlTW9kZShkZXYpID09IFpNX1NUQV9QU19OT05FKQotICAgICAgICBmcnEtPmRpc2FibGVkID0gMTsKLSAgICBlbHNlCi0gICAgICAgIGZycS0+ZGlzYWJsZWQgPSAwOworCWlmICh6ZmlXbGFuUXVlcnlQb3dlclNhdmVNb2RlKGRldikgPT0gWk1fU1RBX1BTX05PTkUpCisJCWZycS0+ZGlzYWJsZWQgPSAxOworCWVsc2UKKwkJZnJxLT5kaXNhYmxlZCA9IDA7CiAKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCi0vL2ludCB1c2JkcnZ3ZXh0X3NldHBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0vLwkJICAgCSB2b2lkICp3LCBjaGFyICpleHRyYSkKLS8vewotLy8Jc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gZGV2LT5tbF9wcml2OwotLy8Jc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2ljOwotLy8Jc3RydWN0IGllZWU4MDIxMV9yc25wYXJtcyAqcnNuID0gJnZhcC0+aXZfYnNzLT5uaV9yc247Ci0vLwlpbnQgKmkgPSAoaW50ICopIGV4dHJhOwotLy8JaW50IHBhcmFtID0gaVswXTsJCS8qIHBhcmFtZXRlciBpZCBpcyAxc3QgKi8KLS8vCWludCB2YWx1ZSA9IGlbMV07CQkvKiBOQjogbW9zdCB2YWx1ZXMgYXJlIFRZUEVfSU5UICovCi0vLwlpbnQgcmV0diA9IDA7Ci0vLwlpbnQgaiwgY2FwczsKLS8vCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYXV0aGVudGljYXRvciAqYXV0aDsKLS8vCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYWNsYXRvciAqYWNsOwotLy8KLS8vCXN3aXRjaCAocGFyYW0pIHsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FVVEhNT0RFOgotLy8JCXN3aXRjaCAodmFsdWUpIHsKLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIX1dQQToJLyogV1BBICovCi0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF84MDIxWDoJLyogODAyLjF4ICovCi0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9PUEVOOgkvKiBvcGVuICovCi0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9TSEFSRUQ6CS8qIHNoYXJlZC1rZXkgKi8KLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIX0FVVE86CS8qIGF1dG8gKi8KLS8vCQkJYXV0aCA9IGllZWU4MDIxMV9hdXRoZW50aWNhdG9yX2dldCh2YWx1ZSk7Ci0vLwkJCWlmIChhdXRoID09IE5VTEwpCi0vLwkJCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkJYnJlYWs7Ci0vLwkJZGVmYXVsdDoKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJfQotLy8JCXN3aXRjaCAodmFsdWUpIHsKLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIX1dQQToJLyogV1BBIHcvIDgwMi4xeCAqLwotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BSSVZBQ1k7Ci0vLwkJCXZhbHVlID0gSUVFRTgwMjExX0FVVEhfODAyMVg7Ci0vLwkJCWJyZWFrOwotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfT1BFTjoJLyogb3BlbiAqLwotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH4oSUVFRTgwMjExX0ZfV1BBfElFRUU4MDIxMV9GX1BSSVZBQ1kpOwotLy8JCQlicmVhazsKLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIX1NIQVJFRDoJLyogc2hhcmVkLWtleSAqLwotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfQVVUTzoJLyogYXV0byAqLwotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfODAyMVg6CS8qIDgwMi4xeCAqLwotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XUEE7Ci0vLwkJCS8qIGJvdGggcmVxdWlyZSBhIGtleSBzbyBtYXJrIHRoZSBQUklWQUNZIGNhcGFiaWxpdHkgKi8KLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QUklWQUNZOwotLy8JCQlicmVhazsKLS8vCQl9Ci0vLwkJLyogTkI6IGF1dGhlbnRpY2F0b3IgYXR0YWNoL2RldGFjaCBoYXBwZW5zIG9uIHN0YXRlIGNoYW5nZSAqLwotLy8JCXZhcC0+aXZfYnNzLT5uaV9hdXRobW9kZSA9IHZhbHVlOwotLy8JCS8qIFhYWCBtaXhlZC9tb2RlL3VzYWdlPyAqLwotLy8JCXZhcC0+aXZfYXV0aCA9IGF1dGg7Ci0vLwkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BST1RNT0RFOgotLy8JCWlmICh2YWx1ZSA+IElFRUU4MDIxMV9QUk9UX1JUU0NUUykKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJaWMtPmljX3Byb3Rtb2RlID0gdmFsdWU7Ci0vLwkJLyogTkI6IGlmIG5vdCBvcGVyYXRpbmcgaW4gMTFnIHRoaXMgY2FuIHdhaXQgKi8KLS8vCQlpZiAoaWMtPmljX2Jzc2NoYW4gIT0gSUVFRTgwMjExX0NIQU5fQU5ZQyAmJgotLy8JCSAgICBJRUVFODAyMTFfSVNfQ0hBTl9BTllHKGljLT5pY19ic3NjaGFuKSkKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX01DQVNUQ0lQSEVSOgotLy8JCWlmICgodmFwLT5pdl9jYXBzICYgY2lwaGVyMmNhcCh2YWx1ZSkpID09IDAgJiYKLS8vCQkgICAgIWllZWU4MDIxMV9jcnlwdG9fYXZhaWxhYmxlKHZhbHVlKSkKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJcnNuLT5yc25fbWNhc3RjaXBoZXIgPSB2YWx1ZTsKLS8vCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX01DQVNUS0VZTEVOOgotLy8JCWlmICghKDAgPCB2YWx1ZSAmJiB2YWx1ZSA8IElFRUU4MDIxMV9LRVlCVUZfU0laRSkpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCS8qIFhYWCBubyB3YXkgdG8gdmVyaWZ5IGRyaXZlciBjYXBhYmlsaXR5ICovCi0vLwkJcnNuLT5yc25fbWNhc3RrZXlsZW4gPSB2YWx1ZTsKLS8vCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VDQVNUQ0lQSEVSUzoKLS8vCQkvKgotLy8JCSAqIENvbnZlcnQgY2lwaGVyIHNldCB0byBlcXVpdmFsZW50IGNhcGFiaWxpdGllcy4KLS8vCQkgKiBOQjogdGhpcyBsb2dpYyBpbnRlbnRpb25hbGx5IGlnbm9yZXMgdW5rbm93biBhbmQKLS8vCQkgKiB1bnN1cHBvcnRlZCBjaXBoZXJzIHNvIGZvbGtzIGNhbiBzcGVjaWZ5IDB4ZmYgb3IKLS8vCQkgKiBzaW1pbGFyIGFuZCBnZXQgYWxsIGF2YWlsYWJsZSBjaXBoZXJzLgotLy8JCSAqLwotLy8JCWNhcHMgPSAwOwotLy8JCWZvciAoaiA9IDE7IGogPCAzMjsgaisrKQkvKiBOQjogc2tpcCBXRVAgKi8KLS8vCQkJaWYgKCh2YWx1ZSAmICgxPDxqKSkgJiYKLS8vCQkJICAgICgodmFwLT5pdl9jYXBzICYgY2lwaGVyMmNhcChqKSkgfHwKLS8vCQkJICAgICBpZWVlODAyMTFfY3J5cHRvX2F2YWlsYWJsZShqKSkpCi0vLwkJCQljYXBzIHw9IDE8PGo7Ci0vLwkJaWYgKGNhcHMgPT0gMCkJCQkvKiBub3RoaW5nIGF2YWlsYWJsZSAqLwotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkvKiBYWFggdmVyaWZ5IGNpcGhlcnMgb2sgZm9yIHVuaWNhc3QgdXNlPyAqLwotLy8JCS8qIFhYWCBkaXNhbGxvdyBpZiBydW5uaW5nIGFzIGl0J2xsIGhhdmUgbm8gZWZmZWN0ICovCi0vLwkJcnNuLT5yc25fdWNhc3RjaXBoZXJzZXQgPSBjYXBzOwotLy8JCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fVUNBU1RDSVBIRVI6Ci0vLwkJaWYgKChyc24tPnJzbl91Y2FzdGNpcGhlcnNldCAmIGNpcGhlcjJjYXAodmFsdWUpKSA9PSAwKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQlyc24tPnJzbl91Y2FzdGNpcGhlciA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fVUNBU1RLRVlMRU46Ci0vLwkJaWYgKCEoMCA8IHZhbHVlICYmIHZhbHVlIDwgSUVFRTgwMjExX0tFWUJVRl9TSVpFKSkKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJLyogWFhYIG5vIHdheSB0byB2ZXJpZnkgZHJpdmVyIGNhcGFiaWxpdHkgKi8KLS8vCQlyc24tPnJzbl91Y2FzdGtleWxlbiA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fS0VZTUdUQUxHUzoKLS8vCQkvKiBYWFggY2hlY2sgKi8KLS8vCQlyc24tPnJzbl9rZXltZ210c2V0ID0gdmFsdWU7Ci0vLwkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCi0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9SU05DQVBTOgotLy8JCS8qIFhYWCBjaGVjayAqLwotLy8JCXJzbi0+cnNuX2NhcHMgPSB2YWx1ZTsKLS8vCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1dQQToKLS8vCQlpZiAodmFsdWUgPiAzKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkvKiBYWFggdmVyaWZ5IGNpcGhlcnMgYXZhaWxhYmxlICovCi0vLwkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfV1BBOwotLy8JCXN3aXRjaCAodmFsdWUpIHsKLS8vCQljYXNlIDE6Ci0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV1BBMTsKLS8vCQkJYnJlYWs7Ci0vLwkJY2FzZSAyOgotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dQQTI7Ci0vLwkJCWJyZWFrOwotLy8JCWNhc2UgMzoKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XUEExIHwgSUVFRTgwMjExX0ZfV1BBMjsKLS8vCQkJYnJlYWs7Ci0vLwkJfQotLy8JCXJldHYgPSBFTkVUUkVTRVQ7CQkvKiBYWFg/ICovCi0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNSU5HOgotLy8JCWlmICghKElFRUU4MDIxMV9ST0FNSU5HX0RFVklDRSA8PSB2YWx1ZSAmJgotLy8JCSAgICB2YWx1ZSA8PSBJRUVFODAyMTFfUk9BTUlOR19NQU5VQUwpKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQlpYy0+aWNfcm9hbWluZyA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUFJJVkFDWToKLS8vCQlpZiAodmFsdWUpIHsKLS8vCQkJLyogWFhYIGNoZWNrIGZvciBrZXkgc3RhdGU/ICovCi0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFJJVkFDWTsKLS8vCQl9IGVsc2UKLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfUFJJVkFDWTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RST1BVTkVOQ1JZUFRFRDoKLS8vCQlpZiAodmFsdWUpCi0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfRFJPUFVORU5DOwotLy8JCWVsc2UKLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfRFJPUFVORU5DOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09VTlRFUk1FQVNVUkVTOgotLy8JCWlmICh2YWx1ZSkgewotLy8JCQlpZiAoKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpID09IDApCi0vLwkJCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9DT1VOVEVSTTsKLS8vCQl9IGVsc2UKLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfQ09VTlRFUk07Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9EUklWRVJfQ0FQUzoKLS8vCQl2YXAtPml2X2NhcHMgPSB2YWx1ZTsJCS8qIE5COiBmb3IgdGVzdGluZyAqLwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fTUFDQ01EOgotLy8JCWFjbCA9IHZhcC0+aXZfYWNsOwotLy8JCXN3aXRjaCAodmFsdWUpIHsKLS8vCQljYXNlIElFRUU4MDIxMV9NQUNDTURfUE9MSUNZX09QRU46Ci0vLwkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX1BPTElDWV9BTExPVzoKLS8vCQljYXNlIElFRUU4MDIxMV9NQUNDTURfUE9MSUNZX0RFTlk6Ci0vLwkJCWlmIChhY2wgPT0gTlVMTCkgewotLy8JCQkJYWNsID0gaWVlZTgwMjExX2FjbGF0b3JfZ2V0KCJtYWMiKTsKLS8vCQkJCWlmIChhY2wgPT0gTlVMTCB8fCAhYWNsLT5pYWNfYXR0YWNoKHZhcCkpCi0vLwkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJCQl2YXAtPml2X2FjbCA9IGFjbDsKLS8vCQkJfQotLy8JCQlhY2wtPmlhY19zZXRwb2xpY3kodmFwLCB2YWx1ZSk7Ci0vLwkJCWJyZWFrOwotLy8JCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9GTFVTSDoKLS8vCQkJaWYgKGFjbCAhPSBOVUxMKQotLy8JCQkJYWNsLT5pYWNfZmx1c2godmFwKTsKLS8vCQkJLyogTkI6IHNpbGVudGx5IGlnbm9yZSB3aGVuIG5vdCBpbiB1c2UgKi8KLS8vCQkJYnJlYWs7Ci0vLwkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX0RFVEFDSDoKLS8vCQkJaWYgKGFjbCAhPSBOVUxMKSB7Ci0vLwkJCQl2YXAtPml2X2FjbCA9IE5VTEw7Ci0vLwkJCQlhY2wtPmlhY19kZXRhY2godmFwKTsKLS8vCQkJfQotLy8JCQlicmVhazsKLS8vCQl9Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9XTU06Ci0vLwkJaWYgKGljLT5pY19jYXBzICYgSUVFRTgwMjExX0NfV01FKXsKLS8vCQkJaWYgKHZhbHVlKSB7Ci0vLwkJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dNRTsKLS8vCQkJCXZhcC0+aXZfaWMtPmljX2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dNRTsgLyogWFhYIG5lZWRlZCBieSBpY19yZXNldCAqLwotLy8JCQl9Ci0vLwkJCWVsc2UgewotLy8JCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfV01FOwotLy8JCQkJdmFwLT5pdl9pYy0+aWNfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dNRTsgLyogWFhYIG5lZWRlZCBieSBpY19yZXNldCAqLwotLy8JCQl9Ci0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7CS8qIFJlbmVnb3RpYXRlIGZvciBjYXBhYmlsaXRpZXMgKi8KLS8vCQl9Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ISURFU1NJRDoKLS8vCQlpZiAodmFsdWUpCi0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfSElERVNTSUQ7Ci0vLwkJZWxzZQotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9ISURFU1NJRDsKLS8vCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQVBCUklER0U6Ci0vLwkJaWYgKHZhbHVlID09IDApCi0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfTk9CUklER0U7Ci0vLwkJZWxzZQotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9OT0JSSURHRTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0lOQUNUOgotLy8JCXZhcC0+aXZfaW5hY3RfcnVuID0gdmFsdWUgLyBJRUVFODAyMTFfSU5BQ1RfV0FJVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0lOQUNUX0FVVEg6Ci0vLwkJdmFwLT5pdl9pbmFjdF9hdXRoID0gdmFsdWUgLyBJRUVFODAyMTFfSU5BQ1RfV0FJVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0lOQUNUX0lOSVQ6Ci0vLwkJdmFwLT5pdl9pbmFjdF9pbml0ID0gdmFsdWUgLyBJRUVFODAyMTFfSU5BQ1RfV0FJVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FCT0xUOgotLy8JCWNhcHMgPSAwOwotLy8JCS8qCi0vLwkJICogTWFwIGFib2x0IHNldHRpbmdzIHRvIGNhcGFiaWxpdHkgYml0czsKLS8vCQkgKiB0aGlzIGFsc28gc3RyaXBzIHVua25vd24vdW53YW50ZWQgYml0cy4KLS8vCQkgKi8KLS8vCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfVFVSQk9fUFJJTUUpCi0vLwkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfVFVSQk9QOwotLy8JCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9DT01QUkVTU0lPTikKLS8vCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19DT01QOwotLy8JCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9GQVNUX0ZSQU1FKQotLy8JCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0ZGOwotLy8JCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9YUikKLS8vCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19YUjsKLS8vCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfQVIpCi0vLwkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfQVI7Ci0vLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0JVUlNUKQotLy8JCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0JVUlNUOwotLy8gICAgICAgIGlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9XTUVfRUxFKQotLy8gICAgICAgICAgICBjYXBzIHw9IElFRUU4MDIxMV9BVEhDX1dNRTsKLS8vCQkvKiB2ZXJpZnkgcmVxdWVzdGVkIGNhcGFiaWxpdGllcyBhcmUgc3VwcG9ydGVkICovCi0vLwkJaWYgKChjYXBzICYgaWMtPmljX2F0aF9jYXApICE9IGNhcHMpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCWlmICh2YXAtPml2X2F0aF9jYXAgIT0gY2FwcykgewotLy8JCQlpZiAoKHZhcC0+aXZfYXRoX2NhcCBeIGNhcHMpICYgSUVFRTgwMjExX0FUSENfVFVSQk9QKSB7Ci0vLwkJCQlpZiAoaWVlZTgwMjExX3NldF90dXJibyhkZXYsICBjYXBzICYgSUVFRTgwMjExX0FUSENfVFVSQk9QKSkKLS8vCQkJCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkJCWllZWU4MDIxMV9zY2FuX2ZsdXNoKGljKTsKLS8vCQkJfQotLy8JCQl2YXAtPml2X2F0aF9jYXAgPSBjYXBzOwotLy8JCQlpYy0+aWNfYXRoY2Fwc2V0dXAodmFwLT5pdl9pYywgdmFwLT5pdl9hdGhfY2FwKTsKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQl9Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9EVElNX1BFUklPRDoKLS8vCQlpZiAodmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSE9TVEFQICYmCi0vLwkJICAgIHZhcC0+aXZfb3Btb2RlICE9IElFRUU4MDIxMV9NX0lCU1MpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCWlmIChJRUVFODAyMTFfRFRJTV9NSU4gPD0gdmFsdWUgJiYKLS8vCQkgICAgdmFsdWUgPD0gSUVFRTgwMjExX0RUSU1fTUFYKSB7Ci0vLwkJCXZhcC0+aXZfZHRpbV9wZXJpb2QgPSB2YWx1ZTsKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsJCS8qIHJlcXVpcmVzIHJlc3RhcnQgKi8KLS8vCQl9IGVsc2UKLS8vCQkJcmV0diA9IEVJTlZBTDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JFQUNPTl9JTlRFUlZBTDoKLS8vCQlpZiAodmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSE9TVEFQICYmCi0vLwkJICAgIHZhcC0+aXZfb3Btb2RlICE9IElFRUU4MDIxMV9NX0lCU1MpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCWlmIChJRUVFODAyMTFfQklOVFZBTF9NSU4gPD0gdmFsdWUgJiYKLS8vCQkgICAgdmFsdWUgPD0gSUVFRTgwMjExX0JJTlRWQUxfTUFYKSB7Ci0vLwkJCWljLT5pY19saW50dmFsID0gdmFsdWU7CQkvKiBYWFggbXVsdGktYnNzICovCi0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7CQkvKiByZXF1aXJlcyByZXN0YXJ0ICovCi0vLwkJfSBlbHNlCi0vLwkJCXJldHYgPSBFSU5WQUw7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ET1RIOgotLy8JCWlmICh2YWx1ZSkgewotLy8JCQlpYy0+aWNfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfRE9USDsKLS8vCQl9Ci0vLwkJZWxzZQotLy8JCQlpYy0+aWNfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0RPVEg7Ci0vLwkJcmV0diA9IEVORVRSRVNFVDsJLyogWFhYOiBuZWVkIHNvbWV0aGluZyB0aGlzIGRyYXN0aWM/ICovCi0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9QV1JUQVJHRVQ6Ci0vLwkJaWMtPmljX2N1cmNoYW5tYXhwd3IgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0dFTlJFQVNTT0M6Ci0vLwkJSUVFRTgwMjExX1NFTkRfTUdNVCh2YXAtPml2X2JzcywgSUVFRTgwMjExX0ZDMF9TVUJUWVBFX1JFQVNTT0NfUkVRLCAwKTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NPTVBSRVNTSU9OOgotLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfQ09NUCwgdmFsdWUpOwotLy8JCWJyZWFrOwotLy8gICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fV01NX0FHR1JNT0RFOgotLy8gICAgICAgIHJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfV01FLCB2YWx1ZSk7Ci0vLyAgICAgICAgYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9GRjoKLS8vCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX0ZGLCB2YWx1ZSk7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9UVVJCTzoKLS8vCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX1RVUkJPUCwgdmFsdWUpOwotLy8JCWlmIChyZXR2ID09IEVORVRSRVNFVCkgewotLy8JCQlpZihpZWVlODAyMTFfc2V0X3R1cmJvKGRldix2YWx1ZSkpCi0vLwkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJCWllZWU4MDIxMV9zY2FuX2ZsdXNoKGljKTsKLS8vCQl9Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9YUjoKLS8vCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX1hSLCB2YWx1ZSk7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9CVVJTVDoKLS8vCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX0JVUlNULCB2YWx1ZSk7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9BUjoKLS8vCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX0FSLCB2YWx1ZSk7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9QVVJFRzoKLS8vCQlpZiAodmFsdWUpCi0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFVSRUc7Ci0vLwkJZWxzZQotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9QVVJFRzsKLS8vCQkvKiBOQjogcmVzZXQgb25seSBpZiB3ZSdyZSBvcGVyYXRpbmcgb24gYW4gMTFnIGNoYW5uZWwgKi8KLS8vCQlpZiAoaWMtPmljX2Jzc2NoYW4gIT0gSUVFRTgwMjExX0NIQU5fQU5ZQyAmJgotLy8JCSAgICBJRUVFODAyMTFfSVNfQ0hBTl9BTllHKGljLT5pY19ic3NjaGFuKSkKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1dEUzoKLS8vCQlpZiAodmFsdWUpCi0vLwkJCXZhcC0+aXZfZmxhZ3NfZXh0IHw9IElFRUU4MDIxMV9GRVhUX1dEUzsKLS8vCQllbHNlCi0vLwkJCXZhcC0+aXZfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9XRFM7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9CR1NDQU46Ci0vLwkJaWYgKHZhbHVlKSB7Ci0vLwkJCWlmICgodmFwLT5pdl9jYXBzICYgSUVFRTgwMjExX0NfQkdTQ0FOKSA9PSAwKQotLy8JCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfQkdTQ0FOOwotLy8JCX0gZWxzZSB7Ci0vLwkJCS8qIFhYWCByYWNleT8gKi8KLS8vCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfQkdTQ0FOOwotLy8JCQlpZWVlODAyMTFfY2FuY2VsX3NjYW4odmFwKTsJLyogYW55dGhpbmcgY3VycmVudCAqLwotLy8JCX0KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JHU0NBTl9JRExFOgotLy8JCWlmICh2YWx1ZSA+PSBJRUVFODAyMTFfQkdTQ0FOX0lETEVfTUlOKQotLy8JCQl2YXAtPml2X2Jnc2NhbmlkbGUgPSB2YWx1ZSpIWi8xMDAwOwotLy8JCWVsc2UKLS8vCQkJcmV0diA9IEVJTlZBTDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JHU0NBTl9JTlRFUlZBTDoKLS8vCQlpZiAodmFsdWUgPj0gSUVFRTgwMjExX0JHU0NBTl9JTlRWQUxfTUlOKQotLy8JCQl2YXAtPml2X2Jnc2NhbmludHZsID0gdmFsdWUqSFo7Ci0vLwkJZWxzZQotLy8JCQlyZXR2ID0gRUlOVkFMOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RfUkFURToKLS8vCQkvKiB1bml0cyBhcmUgaW4gS0lMT2JpdHMgcGVyIHNlY29uZCAqLwotLy8JCWlmICh2YWx1ZSA+PSAyNTYgJiYgdmFsdWUgPD0gNTQwMDApCi0vLwkJCXZhcC0+aXZfbWNhc3RfcmF0ZSA9IHZhbHVlOwotLy8JCWVsc2UKLS8vCQkJcmV0diA9IEVJTlZBTDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NPVkVSQUdFX0NMQVNTOgotLy8JCWlmICh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IElFRUU4MDIxMV9DT1ZFUkFHRV9DTEFTU19NQVgpIHsKLS8vCQkJaWMtPmljX2NvdmVyYWdlY2xhc3MgPSB2YWx1ZTsKLS8vCQkJaWYgKElTX1VQX0FVVE8odmFwKSkKLS8vCQkJCWllZWU4MDIxMV9uZXdfc3RhdGUodmFwLCBJRUVFODAyMTFfU19TQ0FOLCAwKTsKLS8vCQkJcmV0diA9IDA7Ci0vLwkJfQotLy8JCWVsc2UKLS8vCQkJcmV0diA9IEVJTlZBTDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NPVU5UUllfSUU6Ci0vLwkJaWYgKHZhbHVlKQotLy8JCQlpYy0+aWNfZmxhZ3NfZXh0IHw9IElFRUU4MDIxMV9GRVhUX0NPVU5UUllJRTsKLS8vCQllbHNlCi0vLwkJCWljLT5pY19mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX0NPVU5UUllJRTsKLS8vCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUkVHQ0xBU1M6Ci0vLwkJaWYgKHZhbHVlKQotLy8JCQlpYy0+aWNfZmxhZ3NfZXh0IHw9IElFRUU4MDIxMV9GRVhUX1JFR0NMQVNTOwotLy8JCWVsc2UKLS8vCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfUkVHQ0xBU1M7Ci0vLwkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1NDQU5WQUxJRDoKLS8vCQl2YXAtPml2X3NjYW52YWxpZCA9IHZhbHVlKkhaOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SU1NJXzExQToKLS8vCQl2YXAtPml2X3JvYW0ucnNzaTExYSA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SU1NJXzExQjoKLS8vCQl2YXAtPml2X3JvYW0ucnNzaTExYk9ubHkgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUlNTSV8xMUc6Ci0vLwkJdmFwLT5pdl9yb2FtLnJzc2kxMWIgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUkFURV8xMUE6Ci0vLwkJdmFwLT5pdl9yb2FtLnJhdGUxMWEgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUkFURV8xMUI6Ci0vLwkJdmFwLT5pdl9yb2FtLnJhdGUxMWJPbmx5ID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JBVEVfMTFHOgotLy8JCXZhcC0+aXZfcm9hbS5yYXRlMTFiID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9VQVBTRElORk86Ci0vLwkJaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX0hPU1RBUCkgewotLy8JCQlpZiAoaWMtPmljX2NhcHMgJiBJRUVFODAyMTFfQ19VQVBTRCkgewotLy8JCQkJaWYgKHZhbHVlKQotLy8JCQkJCUlFRUU4MDIxMV9WQVBfVUFQU0RfRU5BQkxFKHZhcCk7Ci0vLwkJCQllbHNlCi0vLwkJCQkJSUVFRTgwMjExX1ZBUF9VQVBTRF9ESVNBQkxFKHZhcCk7Ci0vLwkJCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCQl9Ci0vLwkJfQotLy8JCWVsc2UgaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX1NUQSkgewotLy8JCQl2YXAtPml2X3VhcHNkaW5mbyA9IHZhbHVlOwotLy8JCQlJRUVFODAyMTFfVkFQX1VBUFNEX0VOQUJMRSh2YXApOwotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCX0KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1NMRUVQOgotLy8JCS8qIFhYWDogRm9yY2VkIHNsZWVwIGZvciB0ZXN0aW5nLiBEb2VzIG5vdCBhY3R1YWxseSBwbGFjZSB0aGUKLS8vCQkgKiAgICAgIEhXIGluIHNsZWVwIG1vZGUgeWV0LiB0aGlzIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIFNUQXMuCi0vLwkJICovCi0vLwkJaWYgKHZhbHVlKSB7Ci0vLwkJCS8qIGdvdG8gc2xlZXAgKi8KLS8vCQkJSUVFRTgwMjExX1ZBUF9HT1RPU0xFRVAodmFwKTsKLS8vCQl9Ci0vLwkJZWxzZSB7Ci0vLwkJCS8qIHdha2V1cCAqLwotLy8JCQlJRUVFODAyMTFfVkFQX1dBS0VVUCh2YXApOwotLy8JCX0KLS8vCQlpZWVlODAyMTFfc2VuZF9udWxsZGF0YShpZWVlODAyMTFfcmVmX25vZGUodmFwLT5pdl9ic3MpKTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1FPU05VTEw6Ci0vLwkJLyogRm9yY2UgYSBRb1MgTnVsbCBmb3IgdGVzdGluZy4gKi8KLS8vCQlpZWVlODAyMTFfc2VuZF9xb3NudWxsZGF0YSh2YXAtPml2X2JzcywgdmFsdWUpOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUFNQT0xMOgotLy8JCS8qIEZvcmNlIGEgUFMtUE9MTCBmb3IgdGVzdGluZy4gKi8KLS8vCQlpZWVlODAyMTFfc2VuZF9wc3BvbGwodmFwLT5pdl9ic3MpOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fRU9TUERST1A6Ci0vLwkJaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX0hPU1RBUCkgewotLy8JCQlpZiAodmFsdWUpIElFRUU4MDIxMV9WQVBfRU9TUERST1BfRU5BQkxFKHZhcCk7Ci0vLwkJCWVsc2UgSUVFRTgwMjExX1ZBUF9FT1NQRFJPUF9ESVNBQkxFKHZhcCk7Ci0vLwkJfQotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fTUFSS0RGUzoKLS8vCQlpZiAodmFsdWUpCi0vLwkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfTUFSS0RGUzsKLS8vCQllbHNlCi0vLwkJCWljLT5pY19mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX01BUktERlM7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9DSEFOQlc6Ci0vLwkJc3dpdGNoICh2YWx1ZSkgewotLy8JCQljYXNlIDA6Ci0vLwkJCQlpYy0+aWNfY2hhbmJ3ZmxhZyA9IDA7Ci0vLwkJCQlicmVhazsKLS8vCQkJY2FzZSAxOgotLy8JCQkJaWMtPmljX2NoYW5id2ZsYWcgPSBJRUVFODAyMTFfQ0hBTl9IQUxGOwotLy8JCQkJYnJlYWs7Ci0vLwkJCWNhc2UgMjoKLS8vCQkJCWljLT5pY19jaGFuYndmbGFnID0gSUVFRTgwMjExX0NIQU5fUVVBUlRFUjsKLS8vCQkJCWJyZWFrOwotLy8JCQlkZWZhdWx0OgotLy8JCQkJcmV0diA9IEVJTlZBTDsKLS8vCQkJCWJyZWFrOwotLy8JCX0KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1NIT1JUUFJFQU1CTEU6Ci0vLwkJaWYgKHZhbHVlKSB7Ci0vLwkJCWljLT5pY19jYXBzIHw9IElFRUU4MDIxMV9DX1NIUFJFQU1CTEU7Ci0vLwkJfSBlbHNlIHsKLS8vCQkJaWMtPmljX2NhcHMgJj0gfklFRUU4MDIxMV9DX1NIUFJFQU1CTEU7Ci0vLwkJfQotLy8JCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwlkZWZhdWx0OgotLy8JCXJldHYgPSBFT1BOT1RTVVBQOwotLy8JCWJyZWFrOwotLy8JfQotLy8JLyogWFhYIHNob3VsZCBhbnkgb2YgdGhlc2UgY2F1c2UgYSByZXNjYW4/ICovCi0vLwlpZiAocmV0diA9PSBFTkVUUkVTRVQpCi0vLwkJcmV0diA9IElTX1VQX0FVVE8odmFwKSA/IGllZWU4MDIxMV9vcGVuKHZhcC0+aXZfZGV2KSA6IDA7Ci0vLwlyZXR1cm4gLXJldHY7Ci0vL30KKy8qaW50IHVzYmRydndleHRfc2V0cGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyoJCSAgIAkgdm9pZCAqdywgY2hhciAqZXh0cmEpCisqeworKglzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBkZXYtPm1sX3ByaXY7CisqCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gdmFwLT5pdl9pYzsKKyoJc3RydWN0IGllZWU4MDIxMV9yc25wYXJtcyAqcnNuID0gJnZhcC0+aXZfYnNzLT5uaV9yc247CisqCWludCAqaSA9IChpbnQgKikgZXh0cmE7CisqCWludCBwYXJhbSA9IGlbMF07CQkvLyBwYXJhbWV0ZXIgaWQgaXMgMXN0CisqCWludCB2YWx1ZSA9IGlbMV07CQkvLyBOQjogbW9zdCB2YWx1ZXMgYXJlIFRZUEVfSU5UCisqCWludCByZXR2ID0gMDsKKyoJaW50IGosIGNhcHM7CisqCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYXV0aGVudGljYXRvciAqYXV0aDsKKyoJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9hY2xhdG9yICphY2w7CisqCisqCXN3aXRjaCAocGFyYW0pIHsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQVVUSE1PREU6CisqCQlzd2l0Y2ggKHZhbHVlKSB7CisqCQljYXNlIElFRUU4MDIxMV9BVVRIX1dQQToJLy8gV1BBCisqCQljYXNlIElFRUU4MDIxMV9BVVRIXzgwMjFYOgkvLyA4MDIuMXgKKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfT1BFTjoJLy8gb3BlbgorKgkJY2FzZSBJRUVFODAyMTFfQVVUSF9TSEFSRUQ6CS8vIHNoYXJlZC1rZXkKKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfQVVUTzoJLy8gYXV0bworKgkJCWF1dGggPSBpZWVlODAyMTFfYXV0aGVudGljYXRvcl9nZXQodmFsdWUpOworKgkJCWlmIChhdXRoID09IE5VTEwpCisqCQkJCXJldHVybiAtRUlOVkFMOworKgkJCWJyZWFrOworKgkJZGVmYXVsdDoKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCX0KKyoJCXN3aXRjaCAodmFsdWUpIHsKKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfV1BBOgkvLyBXUEEgdy8gODAyLjF4CisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QUklWQUNZOworKgkJCXZhbHVlID0gSUVFRTgwMjExX0FVVEhfODAyMVg7CisqCQkJYnJlYWs7CisqCQljYXNlIElFRUU4MDIxMV9BVVRIX09QRU46CS8vIG9wZW4KKyoJCXZhcC0+aXZfZmxhZ3MgJj0gfihJRUVFODAyMTFfRl9XUEEgfCBJRUVFODAyMTFfRl9QUklWQUNZKTsKKyoJCQlicmVhazsKKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfU0hBUkVEOgkvLyBzaGFyZWQta2V5CisqCQljYXNlIElFRUU4MDIxMV9BVVRIX0FVVE86CS8vIGF1dG8KKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfODAyMVg6CS8vIDgwMi4xeAorKgkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dQQTsKKyoJCQkvLyBib3RoIHJlcXVpcmUgYSBrZXkgc28gbWFyayB0aGUgUFJJVkFDWSBjYXBhYmlsaXR5CisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QUklWQUNZOworKgkJCWJyZWFrOworKgkJfQorKgkJLy8gTkI6IGF1dGhlbnRpY2F0b3IgYXR0YWNoL2RldGFjaCBoYXBwZW5zIG9uIHN0YXRlIGNoYW5nZQorKgkJdmFwLT5pdl9ic3MtPm5pX2F1dGhtb2RlID0gdmFsdWU7CisqCQkvLyBYWFggbWl4ZWQvbW9kZS91c2FnZT8KKyoJCXZhcC0+aXZfYXV0aCA9IGF1dGg7CisqCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BST1RNT0RFOgorKgkJaWYgKHZhbHVlID4gSUVFRTgwMjExX1BST1RfUlRTQ1RTKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJaWMtPmljX3Byb3Rtb2RlID0gdmFsdWU7CisqCQkvLyBOQjogaWYgbm90IG9wZXJhdGluZyBpbiAxMWcgdGhpcyBjYW4gd2FpdAorKgkJaWYgKGljLT5pY19ic3NjaGFuICE9IElFRUU4MDIxMV9DSEFOX0FOWUMgJiYKKyoJCSAgICBJRUVFODAyMTFfSVNfQ0hBTl9BTllHKGljLT5pY19ic3NjaGFuKSkKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX01DQVNUQ0lQSEVSOgorKgkJaWYgKCh2YXAtPml2X2NhcHMgJiBjaXBoZXIyY2FwKHZhbHVlKSkgPT0gMCAmJgorKgkJICAgICFpZWVlODAyMTFfY3J5cHRvX2F2YWlsYWJsZSh2YWx1ZSkpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQlyc24tPnJzbl9tY2FzdGNpcGhlciA9IHZhbHVlOworKgkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9NQ0FTVEtFWUxFTjoKKyoJCWlmICghKDAgPCB2YWx1ZSAmJiB2YWx1ZSA8IElFRUU4MDIxMV9LRVlCVUZfU0laRSkpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkvLyBYWFggbm8gd2F5IHRvIHZlcmlmeSBkcml2ZXIgY2FwYWJpbGl0eQorKgkJcnNuLT5yc25fbWNhc3RrZXlsZW4gPSB2YWx1ZTsKKyoJCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQorKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fVUNBU1RDSVBIRVJTOgorKgorKgkJIC8vIENvbnZlcnQgY2lwaGVyIHNldCB0byBlcXVpdmFsZW50IGNhcGFiaWxpdGllcy4KKyoJCSAvLyBOQjogdGhpcyBsb2dpYyBpbnRlbnRpb25hbGx5IGlnbm9yZXMgdW5rbm93biBhbmQKKyoJCSAvLyB1bnN1cHBvcnRlZCBjaXBoZXJzIHNvIGZvbGtzIGNhbiBzcGVjaWZ5IDB4ZmYgb3IKKyoJCSAvLyBzaW1pbGFyIGFuZCBnZXQgYWxsIGF2YWlsYWJsZSBjaXBoZXJzLgorKgorKgkJY2FwcyA9IDA7CisqCQlmb3IgKGogPSAxOyBqIDwgMzI7IGorKykJLy8gTkI6IHNraXAgV0VQCisqCQkJaWYgKCh2YWx1ZSAmICgxPDxqKSkgJiYKKyoJCQkgICAgKCh2YXAtPml2X2NhcHMgJiBjaXBoZXIyY2FwKGopKSB8fAorKgkJCSAgICAgaWVlZTgwMjExX2NyeXB0b19hdmFpbGFibGUoaikpKQorKgkJCQljYXBzIHw9IDE8PGo7CisqCQlpZiAoY2FwcyA9PSAwKQkJCS8vIG5vdGhpbmcgYXZhaWxhYmxlCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkvLyBYWFggdmVyaWZ5IGNpcGhlcnMgb2sgZm9yIHVuaWNhc3QgdXNlPworKgkJLy8gWFhYIGRpc2FsbG93IGlmIHJ1bm5pbmcgYXMgaXQnbGwgaGF2ZSBubyBlZmZlY3QKKyoJCXJzbi0+cnNuX3VjYXN0Y2lwaGVyc2V0ID0gY2FwczsKKyoJCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQorKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fVUNBU1RDSVBIRVI6CisqCQlpZiAoKHJzbi0+cnNuX3VjYXN0Y2lwaGVyc2V0ICYgY2lwaGVyMmNhcCh2YWx1ZSkpID09IDApCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQlyc24tPnJzbl91Y2FzdGNpcGhlciA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VDQVNUS0VZTEVOOgorKgkJaWYgKCEoMCA8IHZhbHVlICYmIHZhbHVlIDwgSUVFRTgwMjExX0tFWUJVRl9TSVpFKSkKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCS8vIFhYWCBubyB3YXkgdG8gdmVyaWZ5IGRyaXZlciBjYXBhYmlsaXR5CisqCQlyc24tPnJzbl91Y2FzdGtleWxlbiA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0tFWU1HVEFMR1M6CisqCQkvLyBYWFggY2hlY2sKKyoJCXJzbi0+cnNuX2tleW1nbXRzZXQgPSB2YWx1ZTsKKyoJCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQorKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUlNOQ0FQUzoKKyoJCS8vIFhYWCBjaGVjaworKgkJcnNuLT5yc25fY2FwcyA9IHZhbHVlOworKgkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9XUEE6CisqCQlpZiAodmFsdWUgPiAzKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJLy8gWFhYIHZlcmlmeSBjaXBoZXJzIGF2YWlsYWJsZQorKgkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfV1BBOworKgkJc3dpdGNoICh2YWx1ZSkgeworKgkJY2FzZSAxOgorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV1BBMTsKKyoJCQlicmVhazsKKyoJCWNhc2UgMjoKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dQQTI7CisqCQkJYnJlYWs7CisqCQljYXNlIDM6CisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XUEExIHwgSUVFRTgwMjExX0ZfV1BBMjsKKyoJCQlicmVhazsKKyoJCX0KKyoJCXJldHYgPSBFTkVUUkVTRVQ7CQkvLyBYWFg/CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTUlORzoKKyoJCWlmICghKElFRUU4MDIxMV9ST0FNSU5HX0RFVklDRSA8PSB2YWx1ZSAmJgorKgkJICAgIHZhbHVlIDw9IElFRUU4MDIxMV9ST0FNSU5HX01BTlVBTCkpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQlpYy0+aWNfcm9hbWluZyA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BSSVZBQ1k6CisqCQlpZiAodmFsdWUpIHsKKyoJCQkvLyBYWFggY2hlY2sgZm9yIGtleSBzdGF0ZT8KKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BSSVZBQ1k7CisqCQl9IGVsc2UKKyoJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9QUklWQUNZOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RST1BVTkVOQ1JZUFRFRDoKKyoJCWlmICh2YWx1ZSkKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0RST1BVTkVOQzsKKyoJCWVsc2UKKyoJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9EUk9QVU5FTkM7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09VTlRFUk1FQVNVUkVTOgorKgkJaWYgKHZhbHVlKSB7CisqCQkJaWYgKCh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKSA9PSAwKQorKgkJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0NPVU5URVJNOworKgkJfSBlbHNlCisqCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfQ09VTlRFUk07CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fRFJJVkVSX0NBUFM6CisqCQl2YXAtPml2X2NhcHMgPSB2YWx1ZTsJCS8vIE5COiBmb3IgdGVzdGluZworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX01BQ0NNRDoKKyoJCWFjbCA9IHZhcC0+aXZfYWNsOworKgkJc3dpdGNoICh2YWx1ZSkgeworKgkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX1BPTElDWV9PUEVOOgorKgkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX1BPTElDWV9BTExPVzoKKyoJCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9QT0xJQ1lfREVOWToKKyoJCQlpZiAoYWNsID09IE5VTEwpIHsKKyoJCQkJYWNsID0gaWVlZTgwMjExX2FjbGF0b3JfZ2V0KCJtYWMiKTsKKyoJCQkJaWYgKGFjbCA9PSBOVUxMIHx8ICFhY2wtPmlhY19hdHRhY2godmFwKSkKKyoJCQkJCXJldHVybiAtRUlOVkFMOworKgkJCQl2YXAtPml2X2FjbCA9IGFjbDsKKyoJCQl9CisqCQkJYWNsLT5pYWNfc2V0cG9saWN5KHZhcCwgdmFsdWUpOworKgkJCWJyZWFrOworKgkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX0ZMVVNIOgorKgkJCWlmIChhY2wgIT0gTlVMTCkKKyoJCQkJYWNsLT5pYWNfZmx1c2godmFwKTsKKyoJCQkvLyBOQjogc2lsZW50bHkgaWdub3JlIHdoZW4gbm90IGluIHVzZQorKgkJCWJyZWFrOworKgkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX0RFVEFDSDoKKyoJCQlpZiAoYWNsICE9IE5VTEwpIHsKKyoJCQkJdmFwLT5pdl9hY2wgPSBOVUxMOworKgkJCQlhY2wtPmlhY19kZXRhY2godmFwKTsKKyoJCQl9CisqCQkJYnJlYWs7CisqCQl9CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fV01NOgorKgkJaWYgKGljLT5pY19jYXBzICYgSUVFRTgwMjExX0NfV01FKXsKKyoJCQlpZiAodmFsdWUpIHsKKyoJCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XTUU7CisqCQkJCSAqLy8qIFhYWCBuZWVkZWQgYnkgaWNfcmVzZXQgKi8vKgorKgkJCQl2YXAtPml2X2ljLT5pY19mbGFncyB8PSBJRUVFODAyMTFfRl9XTUU7CisqCQkJfQorKgkJCWVsc2UgeworKgkJCQkqLy8qIFhYWCBuZWVkZWQgYnkgaWNfcmVzZXQgKi8vKgorKgkJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XTUU7CisqCQkJCXZhcC0+aXZfaWMtPmljX2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XTUU7CisqCQkJfQorKgkJCXJldHYgPSBFTkVUUkVTRVQ7CS8vIFJlbmVnb3RpYXRlIGZvciBjYXBhYmlsaXRpZXMKKyoJCX0KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ISURFU1NJRDoKKyoJCWlmICh2YWx1ZSkKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0hJREVTU0lEOworKgkJZWxzZQorKgkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0hJREVTU0lEOworKgkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9BUEJSSURHRToKKyoJCWlmICh2YWx1ZSA9PSAwKQorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfTk9CUklER0U7CisqCQllbHNlCisqCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfTk9CUklER0U7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1Q6CisqCQl2YXAtPml2X2luYWN0X3J1biA9IHZhbHVlIC8gSUVFRTgwMjExX0lOQUNUX1dBSVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1RfQVVUSDoKKyoJCXZhcC0+aXZfaW5hY3RfYXV0aCA9IHZhbHVlIC8gSUVFRTgwMjExX0lOQUNUX1dBSVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1RfSU5JVDoKKyoJCXZhcC0+aXZfaW5hY3RfaW5pdCA9IHZhbHVlIC8gSUVFRTgwMjExX0lOQUNUX1dBSVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQUJPTFQ6CisqCQljYXBzID0gMDsKKyoKKyoJCSAvLyBNYXAgYWJvbHQgc2V0dGluZ3MgdG8gY2FwYWJpbGl0eSBiaXRzOworKgkJIC8vIHRoaXMgYWxzbyBzdHJpcHMgdW5rbm93bi91bndhbnRlZCBiaXRzLgorKgorKgkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX1RVUkJPX1BSSU1FKQorKgkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfVFVSQk9QOworKgkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0NPTVBSRVNTSU9OKQorKgkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfQ09NUDsKKyoJCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9GQVNUX0ZSQU1FKQorKgkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfRkY7CisqCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfWFIpCisqCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19YUjsKKyoJCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9BUikKKyoJCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0FSOworKgkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0JVUlNUKQorKgkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfQlVSU1Q7CisqICAgICAgICBpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfV01FX0VMRSkKKyogICAgICAgICAgICBjYXBzIHw9IElFRUU4MDIxMV9BVEhDX1dNRTsKKyoJCS8vIHZlcmlmeSByZXF1ZXN0ZWQgY2FwYWJpbGl0aWVzIGFyZSBzdXBwb3J0ZWQKKyoJCWlmICgoY2FwcyAmIGljLT5pY19hdGhfY2FwKSAhPSBjYXBzKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJaWYgKHZhcC0+aXZfYXRoX2NhcCAhPSBjYXBzKSB7CisqCQkJaWYgKCh2YXAtPml2X2F0aF9jYXAgXiBjYXBzKSAmIElFRUU4MDIxMV9BVEhDX1RVUkJPUCkgeworKgkJCQlpZiAoaWVlZTgwMjExX3NldF90dXJibyhkZXYsCisqCQkJCQkJY2FwcyAmIElFRUU4MDIxMV9BVEhDX1RVUkJPUCkpCisqCQkJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCQkJaWVlZTgwMjExX3NjYW5fZmx1c2goaWMpOworKgkJCX0KKyoJCQl2YXAtPml2X2F0aF9jYXAgPSBjYXBzOworKgkJCWljLT5pY19hdGhjYXBzZXR1cCh2YXAtPml2X2ljLCB2YXAtPml2X2F0aF9jYXApOworKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQl9CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fRFRJTV9QRVJJT0Q6CisqCQlpZiAodmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSE9TVEFQICYmCisqCQkgICAgdmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSUJTUykKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCWlmIChJRUVFODAyMTFfRFRJTV9NSU4gPD0gdmFsdWUgJiYKKyoJCSAgICB2YWx1ZSA8PSBJRUVFODAyMTFfRFRJTV9NQVgpIHsKKyoJCQl2YXAtPml2X2R0aW1fcGVyaW9kID0gdmFsdWU7CisqCQkJcmV0diA9IEVORVRSRVNFVDsJCS8vIHJlcXVpcmVzIHJlc3RhcnQKKyoJCX0gZWxzZQorKgkJCXJldHYgPSBFSU5WQUw7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQkVBQ09OX0lOVEVSVkFMOgorKgkJaWYgKHZhcC0+aXZfb3Btb2RlICE9IElFRUU4MDIxMV9NX0hPU1RBUCAmJgorKgkJICAgIHZhcC0+aXZfb3Btb2RlICE9IElFRUU4MDIxMV9NX0lCU1MpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQlpZiAoSUVFRTgwMjExX0JJTlRWQUxfTUlOIDw9IHZhbHVlICYmCisqCQkgICAgdmFsdWUgPD0gSUVFRTgwMjExX0JJTlRWQUxfTUFYKSB7CisqCQkJaWMtPmljX2xpbnR2YWwgPSB2YWx1ZTsJCS8vIFhYWCBtdWx0aS1ic3MKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOwkJLy8gcmVxdWlyZXMgcmVzdGFydAorKgkJfSBlbHNlCisqCQkJcmV0diA9IEVJTlZBTDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ET1RIOgorKgkJaWYgKHZhbHVlKSB7CisqCQkJaWMtPmljX2ZsYWdzIHw9IElFRUU4MDIxMV9GX0RPVEg7CisqCQl9CisqCQllbHNlCisqCQkJaWMtPmljX2ZsYWdzICY9IH5JRUVFODAyMTFfRl9ET1RIOworKgkJcmV0diA9IEVORVRSRVNFVDsJLy8gWFhYOiBuZWVkIHNvbWV0aGluZyB0aGlzIGRyYXN0aWM/CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUFdSVEFSR0VUOgorKgkJaWMtPmljX2N1cmNoYW5tYXhwd3IgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9HRU5SRUFTU09DOgorKgkJSUVFRTgwMjExX1NFTkRfTUdNVCh2YXAtPml2X2JzcywKKyoJCQkJCUlFRUU4MDIxMV9GQzBfU1VCVFlQRV9SRUFTU09DX1JFUSwgMCk7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09NUFJFU1NJT046CisqCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX0NPTVAsIHZhbHVlKTsKKyoJCWJyZWFrOworKiAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9XTU1fQUdHUk1PREU6CisqICAgICAgICByZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX1dNRSwgdmFsdWUpOworKiAgICAgICAgYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0ZGOgorKgkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19GRiwgdmFsdWUpOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1RVUkJPOgorKgkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19UVVJCT1AsIHZhbHVlKTsKKyoJCWlmIChyZXR2ID09IEVORVRSRVNFVCkgeworKgkJCWlmKGllZWU4MDIxMV9zZXRfdHVyYm8oZGV2LHZhbHVlKSkKKyoJCQkJCXJldHVybiAtRUlOVkFMOworKgkJCWllZWU4MDIxMV9zY2FuX2ZsdXNoKGljKTsKKyoJCX0KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9YUjoKKyoJCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfWFIsIHZhbHVlKTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9CVVJTVDoKKyoJCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfQlVSU1QsIHZhbHVlKTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9BUjoKKyoJCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfQVIsIHZhbHVlKTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9QVVJFRzoKKyoJCWlmICh2YWx1ZSkKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BVUkVHOworKgkJZWxzZQorKgkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1BVUkVHOworKgkJLy8gTkI6IHJlc2V0IG9ubHkgaWYgd2UncmUgb3BlcmF0aW5nIG9uIGFuIDExZyBjaGFubmVsCisqCQlpZiAoaWMtPmljX2Jzc2NoYW4gIT0gSUVFRTgwMjExX0NIQU5fQU5ZQyAmJgorKgkJICAgIElFRUU4MDIxMV9JU19DSEFOX0FOWUcoaWMtPmljX2Jzc2NoYW4pKQorKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fV0RTOgorKgkJaWYgKHZhbHVlKQorKgkJCXZhcC0+aXZfZmxhZ3NfZXh0IHw9IElFRUU4MDIxMV9GRVhUX1dEUzsKKyoJCWVsc2UKKyoJCQl2YXAtPml2X2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfV0RTOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JHU0NBTjoKKyoJCWlmICh2YWx1ZSkgeworKgkJCWlmICgodmFwLT5pdl9jYXBzICYgSUVFRTgwMjExX0NfQkdTQ0FOKSA9PSAwKQorKgkJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0JHU0NBTjsKKyoJCX0gZWxzZSB7CisqCQkJLy8gWFhYIHJhY2V5PworKgkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0JHU0NBTjsKKyoJCQlpZWVlODAyMTFfY2FuY2VsX3NjYW4odmFwKTsJLy8gYW55dGhpbmcgY3VycmVudAorKgkJfQorKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JHU0NBTl9JRExFOgorKgkJaWYgKHZhbHVlID49IElFRUU4MDIxMV9CR1NDQU5fSURMRV9NSU4pCisqCQkJdmFwLT5pdl9iZ3NjYW5pZGxlID0gdmFsdWUqSFovMTAwMDsKKyoJCWVsc2UKKyoJCQlyZXR2ID0gRUlOVkFMOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JHU0NBTl9JTlRFUlZBTDoKKyoJCWlmICh2YWx1ZSA+PSBJRUVFODAyMTFfQkdTQ0FOX0lOVFZBTF9NSU4pCisqCQkJdmFwLT5pdl9iZ3NjYW5pbnR2bCA9IHZhbHVlKkhaOworKgkJZWxzZQorKgkJCXJldHYgPSBFSU5WQUw7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RfUkFURToKKyoJCS8vIHVuaXRzIGFyZSBpbiBLSUxPYml0cyBwZXIgc2Vjb25kCisqCQlpZiAodmFsdWUgPj0gMjU2ICYmIHZhbHVlIDw9IDU0MDAwKQorKgkJCXZhcC0+aXZfbWNhc3RfcmF0ZSA9IHZhbHVlOworKgkJZWxzZQorKgkJCXJldHYgPSBFSU5WQUw7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09WRVJBR0VfQ0xBU1M6CisqCQlpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSBJRUVFODAyMTFfQ09WRVJBR0VfQ0xBU1NfTUFYKSB7CisqCQkJaWMtPmljX2NvdmVyYWdlY2xhc3MgPSB2YWx1ZTsKKyoJCQlpZiAoSVNfVVBfQVVUTyh2YXApKQorKgkJCQlpZWVlODAyMTFfbmV3X3N0YXRlKHZhcCwgSUVFRTgwMjExX1NfU0NBTiwgMCk7CisqCQkJcmV0diA9IDA7CisqCQl9CisqCQllbHNlCisqCQkJcmV0diA9IEVJTlZBTDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9DT1VOVFJZX0lFOgorKgkJaWYgKHZhbHVlKQorKgkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfQ09VTlRSWUlFOworKgkJZWxzZQorKgkJCWljLT5pY19mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX0NPVU5UUllJRTsKKyoJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUkVHQ0xBU1M6CisqCQlpZiAodmFsdWUpCisqCQkJaWMtPmljX2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9SRUdDTEFTUzsKKyoJCWVsc2UKKyoJCQlpYy0+aWNfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9SRUdDTEFTUzsKKyoJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fU0NBTlZBTElEOgorKgkJdmFwLT5pdl9zY2FudmFsaWQgPSB2YWx1ZSpIWjsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JTU0lfMTFBOgorKgkJdmFwLT5pdl9yb2FtLnJzc2kxMWEgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JTU0lfMTFCOgorKgkJdmFwLT5pdl9yb2FtLnJzc2kxMWJPbmx5ID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SU1NJXzExRzoKKyoJCXZhcC0+aXZfcm9hbS5yc3NpMTFiID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SQVRFXzExQToKKyoJCXZhcC0+aXZfcm9hbS5yYXRlMTFhID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SQVRFXzExQjoKKyoJCXZhcC0+aXZfcm9hbS5yYXRlMTFiT25seSA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUkFURV8xMUc6CisqCQl2YXAtPml2X3JvYW0ucmF0ZTExYiA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VBUFNESU5GTzoKKyoJCWlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9IT1NUQVApIHsKKyoJCQlpZiAoaWMtPmljX2NhcHMgJiBJRUVFODAyMTFfQ19VQVBTRCkgeworKgkJCQlpZiAodmFsdWUpCisqCQkJCQlJRUVFODAyMTFfVkFQX1VBUFNEX0VOQUJMRSh2YXApOworKgkJCQllbHNlCisqCQkJCQlJRUVFODAyMTFfVkFQX1VBUFNEX0RJU0FCTEUodmFwKTsKKyoJCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCQl9CisqCQl9CisqCQllbHNlIGlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9TVEEpIHsKKyoJCQl2YXAtPml2X3VhcHNkaW5mbyA9IHZhbHVlOworKgkJCUlFRUU4MDIxMV9WQVBfVUFQU0RfRU5BQkxFKHZhcCk7CisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCX0KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9TTEVFUDoKKyoJCS8vIFhYWDogRm9yY2VkIHNsZWVwIGZvciB0ZXN0aW5nLiBEb2VzIG5vdCBhY3R1YWxseSBwbGFjZSB0aGUKKyoJCS8vICAgICAgSFcgaW4gc2xlZXAgbW9kZSB5ZXQuIHRoaXMgb25seSBtYWtlcyBzZW5zZSBmb3IgU1RBcy4KKyoKKyoJCWlmICh2YWx1ZSkgeworKgkJCS8vIGdvdG8gc2xlZXAKKyoJCQlJRUVFODAyMTFfVkFQX0dPVE9TTEVFUCh2YXApOworKgkJfQorKgkJZWxzZSB7CisqCQkJLy8gd2FrZXVwCisqCQkJSUVFRTgwMjExX1ZBUF9XQUtFVVAodmFwKTsKKyoJCX0KKyoJCWllZWU4MDIxMV9zZW5kX251bGxkYXRhKGllZWU4MDIxMV9yZWZfbm9kZSh2YXAtPml2X2JzcykpOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1FPU05VTEw6CisqCQkvLyBGb3JjZSBhIFFvUyBOdWxsIGZvciB0ZXN0aW5nLgorKgkJaWVlZTgwMjExX3NlbmRfcW9zbnVsbGRhdGEodmFwLT5pdl9ic3MsIHZhbHVlKTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9QU1BPTEw6CisqCQkvLyBGb3JjZSBhIFBTLVBPTEwgZm9yIHRlc3RpbmcuCisqCQlpZWVlODAyMTFfc2VuZF9wc3BvbGwodmFwLT5pdl9ic3MpOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0VPU1BEUk9QOgorKgkJaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX0hPU1RBUCkgeworKgkJCWlmICh2YWx1ZSkgSUVFRTgwMjExX1ZBUF9FT1NQRFJPUF9FTkFCTEUodmFwKTsKKyoJCQllbHNlIElFRUU4MDIxMV9WQVBfRU9TUERST1BfRElTQUJMRSh2YXApOworKgkJfQorKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX01BUktERlM6CisqCQlpZiAodmFsdWUpCisqCQkJaWMtPmljX2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9NQVJLREZTOworKgkJZWxzZQorKgkJCWljLT5pY19mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX01BUktERlM7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQ0hBTkJXOgorKgkJc3dpdGNoICh2YWx1ZSkgeworKgkJCWNhc2UgMDoKKyoJCQkJaWMtPmljX2NoYW5id2ZsYWcgPSAwOworKgkJCQlicmVhazsKKyoJCQljYXNlIDE6CisqCQkJCWljLT5pY19jaGFuYndmbGFnID0gSUVFRTgwMjExX0NIQU5fSEFMRjsKKyoJCQkJYnJlYWs7CisqCQkJY2FzZSAyOgorKgkJCQlpYy0+aWNfY2hhbmJ3ZmxhZyA9IElFRUU4MDIxMV9DSEFOX1FVQVJURVI7CisqCQkJCWJyZWFrOworKgkJCWRlZmF1bHQ6CisqCQkJCXJldHYgPSBFSU5WQUw7CisqCQkJCWJyZWFrOworKgkJfQorKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1NIT1JUUFJFQU1CTEU6CisqCQlpZiAodmFsdWUpIHsKKyoJCQlpYy0+aWNfY2FwcyB8PSBJRUVFODAyMTFfQ19TSFBSRUFNQkxFOworKgkJfSBlbHNlIHsKKyoJCQlpYy0+aWNfY2FwcyAmPSB+SUVFRTgwMjExX0NfU0hQUkVBTUJMRTsKKyoJCX0KKyoJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJZGVmYXVsdDoKKyoJCXJldHYgPSBFT1BOT1RTVVBQOworKgkJYnJlYWs7CisqCX0KKyoJLy8gWFhYIHNob3VsZCBhbnkgb2YgdGhlc2UgY2F1c2UgYSByZXNjYW4/CisqCWlmIChyZXR2ID09IEVORVRSRVNFVCkKKyoJCXJldHYgPSBJU19VUF9BVVRPKHZhcCkgPyBpZWVlODAyMTFfb3Blbih2YXAtPml2X2RldikgOiAwOworKglyZXR1cm4gLXJldHY7CisqfQorKi8KIAogaW50IHVzYmRydndleHRfc2V0bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAJIHZvaWQgKncsIGNoYXIgKmV4dHJhKQorCQkJdm9pZCAqdywgY2hhciAqZXh0cmEpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTQ3LDE1OCArMTg4NywxMzggQEAKIGludCB1c2JkcnZ3ZXh0X2dldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXZvaWQgKncsIGNoYXIgKmV4dHJhKQogewotCS8vc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCS8qIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsgKi8KIAlzdHJ1Y3QgaXdfcG9pbnQgKndyaSA9IChzdHJ1Y3QgaXdfcG9pbnQgKilleHRyYTsKIAljaGFyIG1vZGVbOF07CiAKLSAgICBzdHJjcHkobW9kZSwiMTFnIik7Ci0JcmV0dXJuIChjb3B5X3RvX3VzZXIod3JpLT5wb2ludGVyLCBtb2RlLCA2KSA/IC1FRkFVTFQgOiAwKTsKKwlzdHJjcHkobW9kZSwgIjExZyIpOworCXJldHVybiBjb3B5X3RvX3VzZXIod3JpLT5wb2ludGVyLCBtb2RlLCA2KSA/IC1FRkFVTFQgOiAwOwogfQogCiBpbnQgemZMbnhQcml2YXRlSW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHpkYXBfaW9jdGwqIHpkcmVxKQogewotCS8vdm9pZCogcmVncCA9IG1hY3AtPnJlZ3A7CisJLyogdm9pZCogcmVncCA9IG1hY3AtPnJlZ3A7ICovCiAJdTE2X3QgY21kOwotCS8vdTMyX3QgdGVtcDsKLQl1MzJfdCogcDsKKwkvKiB1MzJfdCB0ZW1wOyAqLworCXUzMl90ICpwOwogCXUzMl90IGk7CiAKIAljbWQgPSB6ZHJlcS0+Y21kOwotCXN3aXRjaChjbWQpCi0JeworCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBaTV9JT0NUTF9SRUdfUkVBRDoKIAkJemZpRGJnUmVhZFJlZyhkZXYsIHpkcmVxLT5hZGRyKTsKIAkJYnJlYWs7Ci0KIAljYXNlIFpNX0lPQ1RMX1JFR19XUklURToKIAkJemZpRGJnV3JpdGVSZWcoZGV2LCB6ZHJlcS0+YWRkciwgemRyZXEtPnZhbHVlKTsKIAkJYnJlYWs7Ci0KIAljYXNlIFpNX0lPQ1RMX01FTV9SRUFEOgogCQlwID0gKHUzMl90ICopIGJ1c190b192aXJ0KHpkcmVxLT5hZGRyKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInVzYmRydjogcmVhZCBtZW1vcnkgYWRkcjogMHglMDh4IHZhbHVlOiAweCUwOHhcbiIsIHpkcmVxLT5hZGRyLCAqcCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkidXNiZHJ2OiByZWFkIG1lbW9yeSBhZGRyOiAweCUwOHggdmFsdWU6IgorCQkJCSIgMHglMDh4XG4iLCB6ZHJlcS0+YWRkciwgKnApOwogCQlicmVhazsKLQogCWNhc2UgWk1fSU9DVExfTUVNX1dSSVRFOgogCQlwID0gKHUzMl90ICopIGJ1c190b192aXJ0KHpkcmVxLT5hZGRyKTsKIAkJKnAgPSB6ZHJlcS0+dmFsdWU7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJ1c2JkcnY6IHdyaXRlIHZhbHVlOiAweCUwOHggdG8gbWVtb3J5IGFkZHI6IDB4JTA4eFxuIiwgemRyZXEtPnZhbHVlLCB6ZHJlcS0+YWRkcik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJ1c2JkcnYgOiB3cml0ZSB2YWx1ZSA6IDB4JTA4eCB0byBtZW1vcnkgYWRkciA6IgorCQkJIiAweCUwOHhcbiIsIHpkcmVxLT52YWx1ZSwgemRyZXEtPmFkZHIpOwogCQlicmVhazsKLQotCWNhc2UgWk1fSU9DVExfVEFMTFkgOgorCWNhc2UgWk1fSU9DVExfVEFMTFk6CiAJCXpmaVdsYW5TaG93VGFsbHkoZGV2KTsKIAkJaWYgKHpkcmVxLT5hZGRyKQogCQkJemZpV2xhblJlc2V0VGFsbHkoZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBaTV9JT0NUTF9URVNUOgorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIlpNX0lPQ1RMX1RFU1Q6bGVuPSVkXG4iLCB6ZHJlcS0+YWRkcik7CisJCS8qIHpmaVdsYW5SZWFkUmVnKGRldiwgMHgxMGY0MDApOyAqLworCQkvKiB6ZmlXbGFuUmVhZFJlZyhkZXYsIDB4MTBmNDA0KTsgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU9DVEwgVEVTVFxuIik7CisJCSNpZiAxCisJCS8qIHByaW50IHBhY2tldCAqLworCQlmb3IgKGkgPSAwOyBpIDwgemRyZXEtPmFkZHI7IGkrKykgeworCQkJaWYgKChpJjB4NykgPT0gMCkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJcbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJTAyWCAiLAorCQkJCQkodW5zaWduZWQgY2hhcil6ZHJlcS0+ZGF0YVtpXSk7CisJCX0KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiXG4iKTsKKwkJI2VuZGlmCiAKLQljYXNlIFpNX0lPQ1RMX1RFU1QgOgotICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIlpNX0lPQ1RMX1RFU1Q6bGVuPSVkXG4iLCB6ZHJlcS0+YWRkcik7Ci0gICAgICAgICAgICAvL3pmaVdsYW5SZWFkUmVnKGRldiwgMHgxMGY0MDApOwotICAgICAgICAgICAgLy96ZmlXbGFuUmVhZFJlZyhkZXYsIDB4MTBmNDA0KTsKLSAgICAgICAgICAgIHByaW50aygiSU9DVEwgVEVTVFxuIik7Ci0gICAgICAgICAgICAjaWYgMQotICAgICAgICAgICAgLy9wcmludCBwYWNrZXQKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPHpkcmVxLT5hZGRyOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChpJjB4NykgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCIlMDJYICIsICh1bnNpZ25lZCBjaGFyKXpkcmVxLT5kYXRhW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgICAgICNlbmRpZgorCQkvKiBGb3IgVGVzdD8/IDEgdG8gMCBieSBDV1lhbmcoLSkgKi8KKwkJI2lmIDAKKwkJCXN0cnVjdCBza19idWZmICpzOwogCisJCQkvKiBBbGxvY2F0ZSBhIHNrYiAqLworCQkJcyA9IGFsbG9jX3NrYigyMDAwLCBHRlBfQVRPTUlDKTsKIAotICAgICAgICAgICAgI2lmIDAgLy9Gb3IgVGVzdD8/IDEgdG8gMCBieSBDV1lhbmcoLSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBza19idWZmKiBzOworCQkJLyogQ29weSBkYXRhIHRvIHNrYiAqLworCQkJZm9yIChpID0gMDsgaSA8IHpkcmVxLT5hZGRyOyBpKyspCisJCQkJcy0+ZGF0YVtpXSA9IHpkcmVxLT5kYXRhW2ldOworCQkJcy0+bGVuID0gemRyZXEtPmFkZHI7CiAKLSAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgc2tiICovCi0gICAgICAgICAgICBzID0gYWxsb2Nfc2tiKDIwMDAsIEdGUF9BVE9NSUMpOworCQkJLyogQ2FsbCB6ZklkbFJlY3YoKSAqLworCQkJemZpUmVjdjgwMjExKGRldiwgcywgTlVMTCk7CisJCSNlbmRpZgorCQlicmVhazsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiBaRENPTkZJRyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJY2FzZSBaTV9JT0NUTF9GUkFHOgorCQl6ZmlXbGFuU2V0RnJhZ1RocmVzaG9sZChkZXYsIHpkcmVxLT5hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBaTV9JT0NUTF9SVFM6CisJCXpmaVdsYW5TZXRSdHNUaHJlc2hvbGQoZGV2LCB6ZHJlcS0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgWk1fSU9DVExfU0NBTjoKKwkJemZpV2xhblNjYW4oZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBaTV9JT0NUTF9LRVk6IHsKKwkJdThfdCBrZXlbMjldOworCQlzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87CisJCXUzMl90IGk7CiAKLSAgICAgICAgICAgIC8qIENvcHkgZGF0YSB0byBza2IgKi8KLSAgICAgICAgICAgIGZvciAoaT0wOyBpPHpkcmVxLT5hZGRyOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcy0+ZGF0YVtpXSA9IHpkcmVxLT5kYXRhW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+bGVuID0gemRyZXEtPmFkZHI7CisJCWZvciAoaSA9IDA7IGkgPCAyOTsgaSsrKQorCQkJa2V5W2ldID0gMDsKIAotICAgICAgICAgICAgLyogQ2FsbCB6ZklkbFJlY3YoKSAqLwotICAgICAgICAgICAgemZpUmVjdjgwMjExKGRldiwgcywgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAjZW5kaWYKKwkJZm9yIChpID0gMDsgaSA8IHpkcmVxLT5hZGRyOyBpKyspCisJCQlrZXlbaV0gPSB6ZHJlcS0+ZGF0YVtpXTsKIAotICAgICAgICAgICAgYnJlYWs7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJrZXkgbGVuPSVkLCBrZXk9JTAyeCUwMnglMDJ4JTAyeCUwMnguLi5cbiIsCisJCQl6ZHJlcS0+YWRkciwga2V5WzBdLCBrZXlbMV0sIGtleVsyXSwga2V5WzNdLCBrZXlbNF0pOwogCisJCWtleUluZm8ua2V5TGVuZ3RoID0gemRyZXEtPmFkZHI7CisJCWtleUluZm8ua2V5SW5kZXggPSAwOworCQlrZXlJbmZvLmZsYWcgPSAwOworCQlrZXlJbmZvLmtleSA9IGtleTsKKwkJemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOworCX0KKwkJYnJlYWs7CisJY2FzZSBaTV9JT0NUTF9SQVRFOgorCQl6ZmlXbGFuU2V0VHhSYXRlKGRldiwgemRyZXEtPmFkZHIpOworCQlicmVhazsKKwljYXNlIFpNX0lPQ1RMX0VOQ1JZUFRJT05fTU9ERToKKwkJemZpV2xhblNldEVuY3J5TW9kZShkZXYsIHpkcmVxLT5hZGRyKTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBaRENPTkZJRyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgIGNhc2UgWk1fSU9DVExfRlJBRyA6Ci0gICAgICAgICAgICB6ZmlXbGFuU2V0RnJhZ1RocmVzaG9sZChkZXYsIHpkcmVxLT5hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgWk1fSU9DVExfUlRTIDoKLSAgICAgICAgICAgIHpmaVdsYW5TZXRSdHNUaHJlc2hvbGQoZGV2LCB6ZHJlcS0+YWRkcik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpNX0lPQ1RMX1NDQU4gOgotICAgICAgICAgICAgemZpV2xhblNjYW4oZGV2KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgWk1fSU9DVExfS0VZIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1OF90IGtleVsyOV07Ci0gICAgICAgICAgICAgICAgc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOwotICAgICAgICAgICAgICAgIHUzMl90IGk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwyOTsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAga2V5W2ldID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTx6ZHJlcS0+YWRkcjsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAga2V5W2ldID0gemRyZXEtPmRhdGFbaV07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJrZXkgbGVuPSVkLCBrZXk9JTAyeCUwMnglMDJ4JTAyeCUwMnguLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB6ZHJlcS0+YWRkciwga2V5WzBdLCBrZXlbMV0sIGtleVsyXSwga2V5WzNdLCBrZXlbNF0pOwotCi0gICAgICAgICAgICAgICAga2V5SW5mby5rZXlMZW5ndGggPSB6ZHJlcS0+YWRkcjsKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmtleUluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgPSAwOwotICAgICAgICAgICAgICAgIGtleUluZm8ua2V5ID0ga2V5OwotICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgWk1fSU9DVExfUkFURSA6Ci0gICAgICAgICAgICB6ZmlXbGFuU2V0VHhSYXRlKGRldiwgemRyZXEtPmFkZHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaTV9JT0NUTF9FTkNSWVBUSU9OX01PREUgOgotICAgICAgICAgICAgemZpV2xhblNldEVuY3J5TW9kZShkZXYsIHpkcmVxLT5hZGRyKTsKLQotICAgICAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKLSAgICAgICAgICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvL0NXWWFuZygrKQotICAgICAgICBjYXNlIFpNX0lPQ1RMX1NJR05BTF9TVFJFTkdUSCA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdThfdCBidWZmZXJbMl07Ci0gICAgICAgICAgICAgICAgemZpV2xhblF1ZXJ5U2lnbmFsSW5mbyhkZXYsICZidWZmZXJbMF0pOwotICAgICAgICAgICAgICAgIHByaW50aygiQ3VycmVudCBTaWduYWwgU3RyZW5ndGggOiAlMDJkXG4iLCBidWZmZXJbMF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vQ1dZYW5nKCspCi0gICAgICAgIGNhc2UgWk1fSU9DVExfU0lHTkFMX1FVQUxJVFkgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHU4X3QgYnVmZmVyWzJdOwotICAgICAgICAgICAgICAgIHpmaVdsYW5RdWVyeVNpZ25hbEluZm8oZGV2LCAmYnVmZmVyWzBdKTsKLSAgICAgICAgICAgICAgICBwcmludGsoIkN1cnJlbnQgU2lnbmFsIFF1YWxpdHkgOiAlMDJkXG4iLCBidWZmZXJbMV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KKwkJemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKwkJemZpV2xhbkVuYWJsZShkZXYpOworCQlicmVhazsKKwkJLyogQ1dZYW5nKCspICovCisJY2FzZSBaTV9JT0NUTF9TSUdOQUxfU1RSRU5HVEg6IHsKKwkJdThfdCBidWZmZXJbMl07CisJCXpmaVdsYW5RdWVyeVNpZ25hbEluZm8oZGV2LCAmYnVmZmVyWzBdKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkN1cnJlbnQgU2lnbmFsIFN0cmVuZ3RoIDogJTAyZFxuIiwgYnVmZmVyWzBdKTsKKwl9CisJCWJyZWFrOworCQkvKiBDV1lhbmcoKykgKi8KKwljYXNlIFpNX0lPQ1RMX1NJR05BTF9RVUFMSVRZOiB7CisJCXU4X3QgYnVmZmVyWzJdOworCQl6ZmlXbGFuUXVlcnlTaWduYWxJbmZvKGRldiwgJmJ1ZmZlclswXSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJDdXJyZW50IFNpZ25hbCBRdWFsaXR5IDogJTAyZFxuIiwgYnVmZmVyWzFdKTsKKwl9CisJCWJyZWFrOwogCWNhc2UgWk1fSU9DVExfU0VUX1BJQlNTX01PREU6CiAJCWlmICh6ZHJlcS0+YWRkciA9PSAxKQogCQkJemZpV2xhblNldFdsYW5Nb2RlKGRldiwgWk1fTU9ERV9QU0VVRE8pOwpAQCAtMjEwNywxMSArMjAyNyw5IEBACiAKIAkJemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKIAkJemZpV2xhbkVuYWJsZShkZXYpOwotCiAJCWJyZWFrOwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBaRENPTkZJRyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQlkZWZhdWx0IDoKKwkvKioqKioqKioqKioqKioqKioqKioqIFpEQ09ORklHICoqKioqKioqKioqKioqKioqKioqKioqLworCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2OiBlcnJvciBjb21tYW5kID0gJXhcbiIsIGNtZCk7CiAJCWJyZWFrOwogCX0KQEAgLTIxMjEsNzkzICsyMDM5LDczNiBAQAogCiBpbnQgdXNiZHJ2X3dwYV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYXRocl93bGFuX3BhcmFtICp6ZHBhcm0pCiB7Ci0gICAgaW50IHJldCA9IDA7Ci0gICAgdThfdCBiY19hZGRyWzZdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0gICAgdThfdCBtYWNfYWRkcls4MF07Ci0gICAgc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOwotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICB1MTZfdCB2YXBJZCA9IDA7CisJaW50IHJldCA9IDA7CisJdThfdCBiY19hZGRyWzZdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJdThfdCBtYWNfYWRkcls4MF07CisJc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1MTZfdCB2YXBJZCA9IDA7CiAKLSAgICAvL3ptd19nZXRfd2xhbl9kZXYoZGV2KTsKKwkvKiB6bXdfZ2V0X3dsYW5fZGV2KGRldik7ICovCiAKLSAgICBzd2l0Y2goemRwYXJtLT5jbWQpCi0gICAgewotICAgICAgICBjYXNlIFpEX0NNRF9TRVRfRU5DUllQVF9LRVk6CisJc3dpdGNoICh6ZHBhcm0tPmNtZCkgeworCWNhc2UgWkRfQ01EX1NFVF9FTkNSWVBUX0tFWToKKwkJLyogU2V0IHVwIGtleSBpbmZvcm1hdGlvbiAqLworCQlrZXlJbmZvLmtleUxlbmd0aCA9IHpkcGFybS0+dS5jcnlwdC5rZXlfbGVuOworCQlrZXlJbmZvLmtleUluZGV4ID0gemRwYXJtLT51LmNyeXB0LmlkeDsKKwkJaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgeworCQkJLyogQVAgTW9kZSAqLworCQkJa2V5SW5mby5mbGFnID0gWk1fS0VZX0ZMQUdfQVVUSEVOVElDQVRPUjsKKwkJfSBlbHNlCisJCQlrZXlJbmZvLmZsYWcgPSAwOworCQlrZXlJbmZvLmtleSA9IHpkcGFybS0+dS5jcnlwdC5rZXk7CisJCWtleUluZm8uaW5pdEl2ID0gemRwYXJtLT51LmNyeXB0LnNlcTsKKwkJa2V5SW5mby5tYWNBZGRyID0gKHUxNl90ICopemRwYXJtLT5zdGFfYWRkcjsKIAotICAgICAgICAgICAgLyogU2V0IHVwIGtleSBpbmZvcm1hdGlvbiAqLwotICAgICAgICAgICAga2V5SW5mby5rZXlMZW5ndGggPSB6ZHBhcm0tPnUuY3J5cHQua2V5X2xlbjsKLSAgICAgICAgICAgIGtleUluZm8ua2V5SW5kZXggPSB6ZHBhcm0tPnUuY3J5cHQuaWR4OwotICAgICAgICAgICAgaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgLy8gQVAgTW9kZQotICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyA9IFpNX0tFWV9GTEFHX0FVVEhFTlRJQ0FUT1I7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAga2V5SW5mby5mbGFnID0gMDsKLSAgICAgICAgICAgIGtleUluZm8ua2V5ID0gemRwYXJtLT51LmNyeXB0LmtleTsKLSAgICAgICAgICAgIGtleUluZm8uaW5pdEl2ID0gemRwYXJtLT51LmNyeXB0LnNlcTsKLSAgICAgICAgICAgIGtleUluZm8ubWFjQWRkciA9ICh1MTZfdCAqKXpkcGFybS0+c3RhX2FkZHI7CisJCS8qIElkZW50aWZ5IHRoZSBNQUMgYWRkcmVzcyBpbmZvcm1hdGlvbiAqLworCQlpZiAobWVtY21wKHpkcGFybS0+c3RhX2FkZHIsIGJjX2FkZHIsIHNpemVvZihiY19hZGRyKSkgPT0gMCkKKwkJCWtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19HSzsKKwkJZWxzZQorCQkJa2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX1BLOwogCi0gICAgICAgICAgICAvKiBJZGVudGlmeSB0aGUgTUFDIGFkZHJlc3MgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgICAgIGlmIChtZW1jbXAoemRwYXJtLT5zdGFfYWRkciwgYmNfYWRkciwgc2l6ZW9mKGJjX2FkZHIpKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19HSzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfUEs7Ci0gICAgICAgICAgICB9CisJCWlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJOT05FIikpIHsKKwkJCS8qIHU4X3QgemVyb19tYWNbXT17MCwwLDAsMCwwLDB9OyAqLwogCi0gICAgICAgICAgICBpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiTk9ORSIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vdThfdCB6ZXJvX21hY1tdPXswLDAsMCwwLDAsMH07CisJCQkvKiBTZXQga2V5IGxlbmd0aCB0byB6ZXJvICovCisJCQlrZXlJbmZvLmtleUxlbmd0aCA9IDA7CiAKLSAgICAgICAgICAgICAgICAvKiBTZXQga2V5IGxlbmd0aCB0byB6ZXJvICovCi0gICAgICAgICAgICAgICAga2V5SW5mby5rZXlMZW5ndGggPSAwOworCQkJLyogZGVsIGdyb3VwIGtleSAqLworCQkJaWYgKHpkcGFybS0+c3RhX2FkZHJbMF0gJiAxKSB7CisJCQkJLyogaWYgKG1hY3AtPmNhcmRTZXR0aW5nLldQQUllTGVuPT0wKQorCQkJCSogeyA4MDIuMXggZHluYW1pYyBXRVAKKwkJCQkqICAgIG1EeW5LZXlNb2RlID0gMDsKKwkJCQkqICAgIG1LZXlGb3JtYXRbMF0gPSAwOworCQkJCSogICAgbVByaXZhY3lJbnZva2VkWzBdPUZBTFNFOworCQkJCSogICAgbUNhcFswXSAmPSB+Q0FQX1BSSVZBQ1k7CisJCQkJKiAgICBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdPTA7CisJCQkJKiB9CisJCQkJKiBtV3BhQmNLZXlMZW4gPSBtR2tJbnN0YWxsZWQgPSAwOworCQkJCSovCisJCQl9IGVsc2UgeworCQkJCS8qIGlmIChtZW1jbXAoemVyb19tYWMsemRwYXJtLT5zdGFfYWRkciwgNik9PTApCisJCQkJKiB7CisJCQkJKiAgICAgbUR5bktleU1vZGU9MDsKKwkJCQkqICAgIG1LZXlGb3JtYXRbMF09MDsKKwkJCQkqICAgIHBTZXR0aW5nLT5EeW5LZXlNb2RlPTA7CisJCQkJKiAgICBwU2V0dGluZy0+RW5jcnlNb2RlWzBdPTA7CisJCQkJKiAgICBtRHluS2V5TW9kZT0wOworCQkJCSogfQorCQkJCSovCisJCQl9CiAKLSAgICAgICAgICAgICAgICBpZiAoemRwYXJtLT5zdGFfYWRkclswXSAmIDEpLy9kZWwgZ3JvdXAga2V5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvL2lmIChtYWNwLT5jYXJkU2V0dGluZy5XUEFJZUxlbj09MCkKLSAgICAgICAgICAgICAgICAgICAgLy97Ly84MDIuMXggZHluYW1pYyBXRVAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICAvLyAgICBtS2V5Rm9ybWF0WzBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgbVByaXZhY3lJbnZva2VkWzBdPUZBTFNFOwotICAgICAgICAgICAgICAgICAgICAvLyAgICBtQ2FwWzBdICY9IH5DQVBfUFJJVkFDWTsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXT0wOwotICAgICAgICAgICAgICAgICAgICAvL30KLSAgICAgICAgICAgICAgICAgICAgLy9tV3BhQmNLZXlMZW4gPSBtR2tJbnN0YWxsZWQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvL2lmIChtZW1jbXAoemVyb19tYWMsemRwYXJtLT5zdGFfYWRkciwgNik9PTApCi0gICAgICAgICAgICAgICAgICAgIC8vewotICAgICAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZT0wOwotICAgICAgICAgICAgICAgICAgICAvLyAgICBtS2V5Rm9ybWF0WzBdPTA7Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIHBTZXR0aW5nLT5EeW5LZXlNb2RlPTA7Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIHBTZXR0aW5nLT5FbmNyeU1vZGVbMF09MDsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGU9MDsKLSAgICAgICAgICAgICAgICAgICAgLy99Ci0gICAgICAgICAgICAgICAgfQorCQkJcHJpbnRrKEtFUk5fRVJSICJTZXQgRW5jcnlwdGlvbiBUeXBlIE5PTkVcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJUS0lQIikpIHsKKwkJCXpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9US0lQKTsKKwkJCS8qIC8vTGludXggU3VwcGxpY2FudCB3aWxsIGludmVyc2UgVHgvUngga2V5CisJCQkqIC8vU28gd2UgaW52ZXJzZSBpdCBiYWNrLCBDV1lhbmcoKykKKwkJCSogemZNZW1vcnlDb3B5KCZ0ZW1wWzBdLCAma2V5SW5mby5rZXlbMTZdLCA4KTsKKwkJCSogemZNZW1vcnlDb3B5KCZrZXlJbmZvLmtleVsxNl0sIGtleUluZm8ua2V5WzI0XSwgOCk7CisJCQkqIHpmTWVtb3J5Q29weSgma2V5SW5mby5rZXlbMjRdLCAmdGVtcFswXSwgOCk7CisJCQkqIHU4X3QgdGVtcDsKKwkJCSogaW50IGs7CisJCQkqIGZvciAoayA9IDA7IGsgPCA4OyBrKyspCisJCQkqIHsKKwkJCSogICAgIHRlbXAgPSBrZXlJbmZvLmtleVsxNiArIGtdOworCQkJKiAgICAga2V5SW5mby5rZXlbMTYgKyBrXSA9IGtleUluZm8ua2V5WzI0ICsga107CisJCQkqICAgICBrZXlJbmZvLmtleVsyNCArIGtdID0gdGVtcDsKKwkJCSogfQorCQkJKiBDYW1FbmNyeVR5cGUgPSBaTV9US0lQOworCQkJKiBpZiAoaWR4ID09IDApCisJCQkqIHsgICAvLyBQYWlyd2lzZSBrZXkKKwkJCSogICAgIG1LZXlGb3JtYXRbMF0gPSBDYW1FbmNyeVR5cGU7CisJCQkqICAgICBtRHluS2V5TW9kZSA9IHBTZXR0aW5nLT5EeW5LZXlNb2RlID0gRFlOX0tFWV9US0lQOworCQkJKiB9CisJCQkqLworCQl9IGVsc2UgaWYgKCFzdHJjbXAoemRwYXJtLT51LmNyeXB0LmFsZywgIkNDTVAiKSkgeworCQkJemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX0FFUyk7CisJCQkvKiBDYW1FbmNyeVR5cGUgPSBaTV9BRVM7CisJCQkqIGlmIChpZHggPT0gMCkKKwkJCSogeyAgLy8gUGFpcndpc2Uga2V5CisJCQkqICAgIG1LZXlGb3JtYXRbMF0gPSBDYW1FbmNyeVR5cGU7CisJCQkqICAgIG1EeW5LZXlNb2RlID0gcFNldHRpbmctPkR5bktleU1vZGUgPSBEWU5fS0VZX0FFUzsKKwkJCSogfQorCQkJKi8KKwkJfSBlbHNlIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJXRVAiKSkgeworCQkJaWYgKGtleUluZm8ua2V5TGVuZ3RoID09IDUpIHsKKwkJCQkvKiBXRVAgNjQgKi8KKwkJCQl6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQNjQpOworCQkJCS8qIENhbUVuY3J5VHlwZSA9IFpNX1dFUDY0OyAqLworCQkJCS8qIHRtcER5bktleU1vZGU9RFlOX0tFWV9XRVA2NDsgKi8KKwkJCX0gZWxzZSBpZiAoa2V5SW5mby5rZXlMZW5ndGggPT0gMTMpIHsKKwkJCQkvKiBrZXlsZW49MTMsIFdFUCAxMjggKi8KKwkJCQl6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQMTI4KTsKKwkJCQkvKiBDYW1FbmNyeVR5cGUgPSBaTV9XRVAxMjg7ICovCisJCQkJLyogdG1wRHluS2V5TW9kZT1EWU5fS0VZX1dFUDEyODsgKi8KKwkJCX0gZWxzZSB7CisJCQkJemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1dFUDI1Nik7CisJCQl9CiAKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlNldCBFbmNyeXB0aW9uIFR5cGUgTk9ORVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoemRwYXJtLT51LmNyeXB0LmFsZywgIlRLSVAiKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fVEtJUCk7Ci0gICAgICAgICAgICAgICAgLy9MaW51eCBTdXBwbGljYW50IHdpbGwgaW52ZXJzZSBUeC9SeCBrZXkKLSAgICAgICAgICAgICAgICAvL1NvIHdlIGludmVyc2UgaXQgYmFjayAvL0NXWWFuZygrKQotICAgICAgICAgICAgICAgIC8vemZNZW1vcnlDb3B5KCZ0ZW1wWzBdLCAma2V5SW5mby5rZXlbMTZdLCA4KTsKLSAgICAgICAgICAgICAgICAvL3pmTWVtb3J5Q29weSgma2V5SW5mby5rZXlbMTZdLCBrZXlJbmZvLmtleVsyNF0sIDgpOwotICAgICAgICAgICAgICAgIC8vemZNZW1vcnlDb3B5KCZrZXlJbmZvLmtleVsyNF0sICZ0ZW1wWzBdLCA4KTsKLSAgICAgICAgICAgICAgICAvL3U4X3QgdGVtcDsKLSAgICAgICAgICAgICAgICAvL2ludCBrOwotICAgICAgICAgICAgICAgIC8vZm9yIChrID0gMDsgayA8IDg7IGsrKykKLSAgICAgICAgICAgICAgICAvL3sKLSAgICAgICAgICAgICAgICAvLyAgICB0ZW1wID0ga2V5SW5mby5rZXlbMTYgKyBrXTsKLSAgICAgICAgICAgICAgICAvLyAgICBrZXlJbmZvLmtleVsxNiArIGtdID0ga2V5SW5mby5rZXlbMjQgKyBrXTsKLSAgICAgICAgICAgICAgICAvLyAgICBrZXlJbmZvLmtleVsyNCArIGtdID0gdGVtcDsKLSAgICAgICAgICAgICAgICAvL30KLSAgICAgICAgICAgICAgICAvL0NhbUVuY3J5VHlwZSA9IFpNX1RLSVA7Ci0gICAgICAgICAgICAgICAgLy8vL2lmIChpZHggPT0gMCkKLSAgICAgICAgICAgICAgICAvL3svLyBQYWlyd2lzZSBrZXkKLSAgICAgICAgICAgICAgICAvLyAgICBtS2V5Rm9ybWF0WzBdID0gQ2FtRW5jcnlUeXBlOwotICAgICAgICAgICAgICAgIC8vICAgIG1EeW5LZXlNb2RlID0gcFNldHRpbmctPkR5bktleU1vZGUgPSBEWU5fS0VZX1RLSVA7Ci0gICAgICAgICAgICAgICAgLy99Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJDQ01QIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX0FFUyk7Ci0gICAgICAgICAgICAgICAgLy9DYW1FbmNyeVR5cGUgPSBaTV9BRVM7Ci0gICAgICAgICAgICAgICAgLy8vL2lmIChpZHggPT0gMCkKLSAgICAgICAgICAgICAgICAvL3svLyBQYWlyd2lzZSBrZXkKLSAgICAgICAgICAgICAgICAvLyAgICBtS2V5Rm9ybWF0WzBdID0gQ2FtRW5jcnlUeXBlOwotICAgICAgICAgICAgICAgIC8vICAgIG1EeW5LZXlNb2RlID0gcFNldHRpbmctPkR5bktleU1vZGUgPSBEWU5fS0VZX0FFUzsKLSAgICAgICAgICAgICAgICAvL30KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoemRwYXJtLT51LmNyeXB0LmFsZywgIldFUCIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChrZXlJbmZvLmtleUxlbmd0aCA9PSA1KQotICAgICAgICAgICAgICAgIHsgLy8gV0VQIDY0Ci0gICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9XRVA2NCk7Ci0gICAgICAgICAgICAgICAgLy8gICAgQ2FtRW5jcnlUeXBlID0gWk1fV0VQNjQ7Ci0gICAgICAgICAgICAgICAgLy8gICAgdG1wRHluS2V5TW9kZT1EWU5fS0VZX1dFUDY0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXlJbmZvLmtleUxlbmd0aCA9PSAxMykKLSAgICAgICAgICAgICAgICB7Ly9rZXlsZW49MTMsIFdFUCAxMjgKLSAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1dFUDEyOCk7Ci0gICAgICAgICAgICAgICAgLy8gICAgQ2FtRW5jcnlUeXBlID0gWk1fV0VQMTI4OwotICAgICAgICAgICAgICAgIC8vICAgIHRtcER5bktleU1vZGU9RFlOX0tFWV9XRVAxMjg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9XRVAyNTYpOwotICAgICAgICAgICAgICAgIH0KKwkvKiBGb3IgRHluYW1pYyBXRVAga2V5IChOb24tV1BBIFJhZGl1cyksIHRoZSBrZXkgSUQgcmFuZ2U6IDAtMworCSogSW4gV1BBL1JTTiBtb2RlLCB0aGUga2V5IElEIHJhbmdlOiAxLTMsIHVzdWFsbHksIGEgYnJvYWRjYXN0IGtleS4KKwkqIEZvciBXRVAga2V5IHNldHRpbmc6IHdlIHNldCBtRHluS2V5TW9kZSBhbmQgbUtleUZvcm1hdCBpbiBmb2xsb3dpbmcKKwkqIGNhc2U6CisJKiAgIDEuIEZvciA4MDIuMXggZHluYW1pY2FsbHkgZ2VuZXJhdGVkIFdFUCBrZXkgbWV0aG9kLgorCSogICAyLiBGb3IgV1BBL1JTTiBtb2RlLCBidXQga2V5IGlkID09IDAuCisJKgkoQnV0IHRoaXMgaXMgYW4gaW1wb3NzaWJsZSBjYXNlKQorCSogU28sIG9ubHkgY2hlY2sgY2FzZSAxLgorCSogaWYgKG1hY3AtPmNhcmRTZXR0aW5nLldQQUllTGVuPT0wKQorCSogeworCSogICAgbUtleUZvcm1hdFswXSA9IENhbUVuY3J5VHlwZTsKKwkqICAgIG1EeW5LZXlNb2RlID0gcFNldHRpbmctPkR5bktleU1vZGUgPSB0bXBEeW5LZXlNb2RlOworCSogICAgbVByaXZhY3lJbnZva2VkWzBdPVRSVUU7CisJKiAgICBtQ2FwWzBdIHw9IENBUF9QUklWQUNZOworCSogICAgbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXT0xOworCSogfQorCSovCisJCX0KIAotICAgICAgICAgICAgICAgIC8vIEZvciBEeW5hbWljIFdFUCBrZXkgKE5vbi1XUEEgUmFkaXVzKSwgdGhlIGtleSBJRCByYW5nZTogMC0zCi0gICAgICAgICAgICAgICAgLy8gSW4gV1BBL1JTTiBtb2RlLCB0aGUga2V5IElEIHJhbmdlOiAxLTMsIHVzdWFsbHksIGEgYnJvYWRjYXN0IGtleS4KLSAgICAgICAgICAgICAgICAvLyBGb3IgV0VQIGtleSBzZXR0aW5nOiB3ZSBzZXQgbUR5bktleU1vZGUgYW5kIG1LZXlGb3JtYXQgaW4gZm9sbG93aW5nIGNhc2U6Ci0gICAgICAgICAgICAgICAgLy8gICAxLiBGb3IgODAyLjF4IGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBXRVAga2V5IG1ldGhvZC4KLSAgICAgICAgICAgICAgICAvLyAgIDIuIEZvciBXUEEvUlNOIG1vZGUsIGJ1dCBrZXkgaWQgPT0gMC4gKEJ1dCB0aGlzIGlzIGFuIGltcG9zc2libGUgY2FzZSkKLSAgICAgICAgICAgICAgICAvLyBTbywgb25seSBjaGVjayBjYXNlIDEuCi0gICAgICAgICAgICAgICAgLy9pZiAobWFjcC0+Y2FyZFNldHRpbmcuV1BBSWVMZW49PTApCi0gICAgICAgICAgICAgICAgLy97Ci0gICAgICAgICAgICAgICAgLy8gICAgbUtleUZvcm1hdFswXSA9IENhbUVuY3J5VHlwZTsKLSAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZSA9IHBTZXR0aW5nLT5EeW5LZXlNb2RlID0gdG1wRHluS2V5TW9kZTsKLSAgICAgICAgICAgICAgICAvLyAgICBtUHJpdmFjeUludm9rZWRbMF09VFJVRTsKLSAgICAgICAgICAgICAgICAvLyAgICBtQ2FwWzBdIHw9IENBUF9QUklWQUNZOwotICAgICAgICAgICAgICAgIC8vICAgIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF09MTsKLSAgICAgICAgICAgICAgICAvL30KLSAgICAgICAgICAgIH0KKwkJLyogRFVNUCBrZXkgY29udGV4dCAqLworCQkvKiAjaWZkZWYgV1BBX0RFQlVHICovCisJCWlmIChrZXlJbmZvLmtleUxlbmd0aCA+IDApIHsKKwkJCWludCBpaTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJPdHVzOiBLZXkgQ29udGV4dDpcbiIpOworCQkJZm9yIChpaSA9IDA7IGlpIDwga2V5SW5mby5rZXlMZW5ndGg7ICkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSIweCUwMnggIiwga2V5SW5mby5rZXlbaWldKTsKKwkJCQlpZiAoKCsraWkgJSAxNikgPT0gMCkKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiXG4iKTsKKwkJCX0KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlxuIik7CisJCX0KKwkJLyogI2VuZGlmICovCiAKLSAgICAgICAgICAgIC8qIERVTVAga2V5IGNvbnRleHQgKi8KLS8vI2lmZGVmIFdQQV9ERUJVRwotICAgICAgICAgICAgaWYgKGtleUluZm8ua2V5TGVuZ3RoID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgaWk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJPdHVzOiBLZXkgQ29udGV4dDpcbiIpOwotICAgICAgICAgICAgICAgIGZvcihpaSA9IDA7IGlpIDwga2V5SW5mby5rZXlMZW5ndGg7KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwMnggIiwga2V5SW5mby5rZXlbaWldKTsKLSAgICAgICAgICAgICAgICAgICAgaWYoKCsraWkgJSAxNikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICAgICAgfQotLy8jZW5kaWYKKwkJLyogU2V0IGVuY3J5cHQgbW9kZSAqLworCQkvKiB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgQ2FtRW5jcnlUeXBlKTsgKi8KKwkJdmFwSWQgPSB6ZkxueEdldFZhcElkKGRldik7CisJCWlmICh2YXBJZCA9PSAweGZmZmYpCisJCQlrZXlJbmZvLnZhcElkID0gMDsKKwkJZWxzZQorCQkJa2V5SW5mby52YXBJZCA9IHZhcElkICsgMTsKKwkJa2V5SW5mby52YXBBZGRyWzBdID0ga2V5SW5mby5tYWNBZGRyWzBdOworCQlrZXlJbmZvLnZhcEFkZHJbMV0gPSBrZXlJbmZvLm1hY0FkZHJbMV07CisJCWtleUluZm8udmFwQWRkclsyXSA9IGtleUluZm8ubWFjQWRkclsyXTsKIAotICAgICAgICAgICAgLyogU2V0IGVuY3J5cHQgbW9kZSAqLwotICAgICAgICAgICAgLy96ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgQ2FtRW5jcnlUeXBlKTsKLSAgICAgICAgICAgIHZhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOwotICAgICAgICAgICAgaWYgKHZhcElkID09IDB4ZmZmZikKLSAgICAgICAgICAgICAgICBrZXlJbmZvLnZhcElkID0gMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBrZXlJbmZvLnZhcElkID0gdmFwSWQgKyAxOwotICAgICAgICAgICAga2V5SW5mby52YXBBZGRyWzBdID0ga2V5SW5mby5tYWNBZGRyWzBdOwotICAgICAgICAgICAga2V5SW5mby52YXBBZGRyWzFdID0ga2V5SW5mby5tYWNBZGRyWzFdOwotICAgICAgICAgICAga2V5SW5mby52YXBBZGRyWzJdID0ga2V5SW5mby5tYWNBZGRyWzJdOworCQl6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CiAKLSAgICAgICAgICAgIHpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKKwkJLyogemZpV2xhbkRpc2FibGUoZGV2KTsgKi8KKwkJLyogemZpV2xhbkVuYWJsZShkZXYpOyAqLworCQlicmVhazsKKwljYXNlIFpEX0NNRF9TRVRfTUxNRToKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfU0VUX01MTUVcbiIpOwogCi0gICAgICAgICAgICAvL3pmaVdsYW5EaXNhYmxlKGRldik7Ci0gICAgICAgICAgICAvL3pmaVdsYW5FbmFibGUoZGV2KTsKLSAgICAgICAgICAgIGJyZWFrOworCQkvKiBUcmFuc2xhdGUgU1RBJ3MgYWRkcmVzcyAqLworCQlzcHJpbnRmKG1hY19hZGRyLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQkJemRwYXJtLT5zdGFfYWRkclswXSwgemRwYXJtLT5zdGFfYWRkclsxXSwKKwkJCXpkcGFybS0+c3RhX2FkZHJbMl0sIHpkcGFybS0+c3RhX2FkZHJbM10sCisJCQl6ZHBhcm0tPnN0YV9hZGRyWzRdLCB6ZHBhcm0tPnN0YV9hZGRyWzVdKTsKIAotICAgICAgICBjYXNlIFpEX0NNRF9TRVRfTUxNRToKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bDogWkRfQ01EX1NFVF9NTE1FXG4iKTsKKwkJc3dpdGNoICh6ZHBhcm0tPnUubWxtZS5jbWQpIHsKKwkJY2FzZSBNTE1FX1NUQV9ERUFVVEg6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIiAtLS0tLS0tQ2FsbCB6ZmlXbGFuRGVhdXRoLCByZWFzb246JWRcbiIsCisJCQkJemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOworCQkJaWYgKHpmaVdsYW5EZWF1dGgoZGV2LCAodTE2X3QgKikgemRwYXJtLT5zdGFfYWRkciwKKwkJCQl6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSkgIT0gMCkKKwkJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGRlYXV0aGVuY2F0ZSBTVEE6ICVzXG4iLAorCQkJCQltYWNfYWRkcik7CisJCQllbHNlCisJCQkJcHJpbnRrKEtFUk5fRVJSICJEZWF1dGhlbnRpY2F0ZSBTVEE6ICVzIgorCQkJCQkid2l0aCByZWFzb24gY29kZTogJWRcbiIsCisJCQkJCW1hY19hZGRyLCB6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7CisJCQlicmVhazsKKwkJY2FzZSBNTE1FX1NUQV9ESVNBU1NPQzoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkiIC0tLS0tLS1DYWxsIHpmaVdsYW5EZWF1dGgsIHJlYXNvbjolZFxuIiwKKwkJCQl6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7CisJCQlpZiAoemZpV2xhbkRlYXV0aChkZXYsICh1MTZfdCAqKSB6ZHBhcm0tPnN0YV9hZGRyLAorCQkJCXpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKSAhPSAwKQorCQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZGlzYXNzb2NpYXRlIFNUQTogJXNcbiIsCisJCQkJCW1hY19hZGRyKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoS0VSTl9FUlIgIkRpc2Fzc29jaWF0ZSBTVEE6ICVzIgorCQkJCQkid2l0aCByZWFzb24gY29kZTogJWRcbiIsCisJCQkJCW1hY19hZGRyLCB6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAiTUxNRSBjb21tYW5kOiAweCUwNHggbm90IHN1cHBvcnRcbiIsCisJCQkJemRwYXJtLT51Lm1sbWUuY21kKTsKKwkJCWJyZWFrOworCQl9CiAKLSAgICAgICAgICAgIC8qIFRyYW5zbGF0ZSBTVEEncyBhZGRyZXNzICovCi0gICAgICAgICAgICBzcHJpbnRmKG1hY19hZGRyLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCB6ZHBhcm0tPnN0YV9hZGRyWzBdLCB6ZHBhcm0tPnN0YV9hZGRyWzFdLAotICAgICAgICAgICAgICAgIHpkcGFybS0+c3RhX2FkZHJbMl0sIHpkcGFybS0+c3RhX2FkZHJbM10sIHpkcGFybS0+c3RhX2FkZHJbNF0sIHpkcGFybS0+c3RhX2FkZHJbNV0pOworCQlicmVhazsKKwljYXNlIFpEX0NNRF9TQ0FOX1JFUToKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfU0NBTl9SRVFcbiIpOworCQlicmVhazsKKwljYXNlIFpEX0NNRF9TRVRfR0VORVJJQ19FTEVNRU5UOgorCQlwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IgorCQkJCQkiIFpEX0NNRF9TRVRfR0VORVJJQ19FTEVNRU5UXG4iKTsKIAotICAgICAgICAgICAgc3dpdGNoKHpkcGFybS0+dS5tbG1lLmNtZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIE1MTUVfU1RBX0RFQVVUSDoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIgLS0tLS0tLUNhbGwgemZpV2xhbkRlYXV0aCwgcmVhc29uOiVkXG4iLHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYoemZpV2xhbkRlYXV0aChkZXYsICh1MTZfdCopIHpkcGFybS0+c3RhX2FkZHIsIHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBkZWF1dGhlbmNhdGUgU1RBOiAlc1xuIiwgbWFjX2FkZHIpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkRlYXV0aGVudGljYXRlIFNUQTogJXMgd2l0aCByZWFzb24gY29kZTogJWRcbiIsIG1hY19hZGRyLCB6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkvKiBDb3B5IHRoZSBXUEEgSUUKKwkJKiB6bV9tc2cxX21tKFpNX0xWXzAsICJDV1kgLSB3cGFpZSBMZW5ndGggOiAiLAorCQkqIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKKwkJKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJ3cGFpZSBMZW5ndGggOiAlIGRcbiIsCisJCQkJCQl6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7CisJCWlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIHsKKwkJCS8qIEFQIE1vZGUgKi8KKwkJCXpmaVdsYW5TZXRXcGFJZShkZXYsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YSwKKwkJCQkJemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOworCQl9IGVsc2UgeworCQkJbWFjcC0+c3VwTGVuID0gemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW47CisJCQltZW1jcHkobWFjcC0+c3VwSWUsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YSwKKwkJCQl6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7CisJCX0KKwkJemZpV2xhblNldFdwYVN1cHBvcnQoZGV2LCAxKTsKKwkJLyogemZpV2xhblNldFdwYUllKGRldiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhLAorCQkqIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKKwkJKi8KKwkJaW50IGlpOworCQl1OF90IGxlbiA9IHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuOworCQl1OF90ICp3cGFpZSA9ICh1OF90ICopemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhOwogCi0gICAgICAgICAgICAgICAgY2FzZSBNTE1FX1NUQV9ESVNBU1NPQzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIgLS0tLS0tLUNhbGwgemZpV2xhbkRlYXV0aCwgcmVhc29uOiVkXG4iLHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYoemZpV2xhbkRlYXV0aChkZXYsICh1MTZfdCopIHpkcGFybS0+c3RhX2FkZHIsIHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBkaXNhc3NvY2lhdGUgU1RBOiAlc1xuIiwgbWFjX2FkZHIpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkRpc2Fzc29jaWF0ZSBTVEE6ICVzIHdpdGggcmVhc29uIGNvZGU6ICVkXG4iLCBtYWNfYWRkciwgemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3ZC0+YXAud3BhTGVuIDogJSBkXG4iLCBsZW4pOwogCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJNTE1FIGNvbW1hbmQ6IDB4JTA0eCBub3Qgc3VwcG9ydFxuIiwgemRwYXJtLT51Lm1sbWUuY21kKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisJCS8qIERVTVAgV1BBIElFICovCisJCWZvcihpaSA9IDA7IGlpIDwgbGVuOykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgd3BhaWVbaWldKTsKIAotICAgICAgICAgICAgYnJlYWs7CisJCQlpZigoKytpaSAlIDE2KSA9PSAwKQorCQkJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwkJfQorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKLSAgICAgICAgY2FzZSBaRF9DTURfU0NBTl9SRVE6Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IFpEX0NNRF9TQ0FOX1JFUVxuIik7Ci0gICAgICAgICAgICBicmVhazsKKwkJLyogI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAorCQkqIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKwkJKiB7Ly8gVXBkYXRlIEJlYWNvbiBGSUZPIGluIHRoZSBuZXh0IFRCVFQuCisJCSogICAgIG1lbWNweSgmbVdQQUllLCBwU2V0dGluZy0+V1BBSWUsIHBTZXR0aW5nLT5XUEFJZUxlbik7CisJCSogICAgIHByaW50ayhLRVJOX0VSUiAiQ29weSBXUEEgSUUgaW50byBtV1BBSWVcbiIpOworCQkqIH0KKwkJKiAjZW5kaWYKKwkJKi8KKwkJYnJlYWs7CiAKLSAgICAgICAgY2FzZSBaRF9DTURfU0VUX0dFTkVSSUNfRUxFTUVOVDoKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bDogWkRfQ01EX1NFVF9HRU5FUklDX0VMRU1FTlRcbiIpOworCS8qICNpZmRlZiBaTV9IT1NUQVBEX1NVUFBPUlQgKi8KKwljYXNlIFpEX0NNRF9HRVRfVFNDOgorCQlwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGwgOiBaRF9DTURfR0VUX1RTQ1xuIik7CisJCWJyZWFrOworCS8qICNlbmRpZiAqLwogCi0gICAgICAgICAgICAvKiBDb3B5IHRoZSBXUEEgSUUgKi8KLSAgICAgICAgICAgIC8vem1fbXNnMV9tbShaTV9MVl8wLCAiQ1dZIC0gd3BhaWUgTGVuZ3RoIDogIiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOwotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3cGFpZSBMZW5ndGggOiAlZFxuIiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOwotICAgICAgICAgICAgaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgLy8gQVAgTW9kZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YSwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1hY3AtPnN1cExlbiA9IHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuOwotICAgICAgICAgICAgICAgIG1lbWNweShtYWNwLT5zdXBJZSwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhLCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB6ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDEpOwotICAgICAgICAgICAgLy96ZmlXbGFuU2V0V3BhSWUoZGV2LCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGEsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgaWk7Ci0gICAgICAgICAgICAgICAgdThfdCBsZW4gPSB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbjsKLSAgICAgICAgICAgICAgICB1OF90ICp3cGFpZSA9ICh1OF90ICopemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bCBkZWZhdWx0IDogMHglMDR4XG4iLAorCQkJemRwYXJtLT5jbWQpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CiAKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5hcC53cGFMZW46ICVkXG4iLCBsZW4pOwotCi0gICAgICAgICAgICAgICAgLyogRFVNUCBXUEEgSUUgKi8KLSAgICAgICAgICAgICAgICBmb3IoaWkgPSAwOyBpaSA8IGxlbjspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB3cGFpZVtpaV0pOwotCi0gICAgICAgICAgICAgICAgICAgIGlmKCgrK2lpICUgMTYpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKLSAgICAgICAgICAgIH0KLQotLy8gICAgICAgICAgICAjaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUCi0gICAgICAgICAgICAvL2lmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKLSAgICAgICAgICAgIC8vey8vIFVwZGF0ZSBCZWFjb24gRklGTyBpbiB0aGUgbmV4dCBUQlRULgotICAgICAgICAgICAgLy8gICAgbWVtY3B5KCZtV1BBSWUsIHBTZXR0aW5nLT5XUEFJZSwgcFNldHRpbmctPldQQUllTGVuKTsKLSAgICAgICAgICAgIC8vICAgIHByaW50ayhLRVJOX0VSUiAiQ29weSBXUEEgSUUgaW50byBtV1BBSWVcbiIpOwotICAgICAgICAgICAgLy99Ci0vLyAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0KLS8vICAgICAgICAjaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUCi0gICAgICAgIGNhc2UgWkRfQ01EX0dFVF9UU0M6Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IFpEX0NNRF9HRVRfVFNDXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotLy8gICAgICAgICNlbmRpZgotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGwgZGVmYXVsdDogMHglMDR4XG4iLCB6ZHBhcm0tPmNtZCk7Ci0gICAgICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgWk1fRU5BQkxFX0NFTkMKIGludCB1c2JkcnZfY2VuY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgenlkYXNfY2VuY19wYXJhbSAqemRwYXJtKQogewotICAgIC8vc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKLSAgICB1MTZfdCBhcElkOwotICAgIHU4X3QgYmNfYWRkcls2XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotICAgIGludCByZXQgPSAwOwotICAgIGludCBpaTsKKwkvKiBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7ICovCisJc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOworCXUxNl90IGFwSWQ7CisJdThfdCBiY19hZGRyWzZdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaW50IHJldCA9IDA7CisJaW50IGlpOwogCi0gICAgLyogR2V0IHRoZSBBUCBJZCAqLwotICAgIGFwSWQgPSB6ZkxueEdldFZhcElkKGRldik7CisJLyogR2V0IHRoZSBBUCBJZCAqLworCWFwSWQgPSB6ZkxueEdldFZhcElkKGRldik7CiAKLSAgICBpZiAoYXBJZCA9PSAweGZmZmYpCi0gICAgewotICAgICAgICBhcElkID0gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgYXBJZCA9IGFwSWQrMTsKLSAgICB9CisJaWYgKGFwSWQgPT0gMHhmZmZmKSB7CisJCWFwSWQgPSAwOworCX0gZWxzZSB7CisJCWFwSWQgPSBhcElkICsgMTsKKwl9CiAKLSAgICBzd2l0Y2ggKHpkcGFybS0+Y21kKQotICAgIHsKLSAgICAgICAgY2FzZSBaTV9DTURfQ0VOQ19TRVRDRU5DOgotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaTV9DTURfQ0VOQ19TRVRDRU5DXG4iKTsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAibGVuZ3RoOiAlZFxuIiwgemRwYXJtLT5sZW4pOwotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJwb2xpY3k6ICVkXG4iLCB6ZHBhcm0tPnUuaW5mby5jZW5jX3BvbGljeSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaTV9DTURfQ0VOQ19TRVRLRVk6Ci0gICAgICAgICAgICAvL3JldCA9IHdhaV9pb2N0bF9zZXRrZXkodmFwLCBpb2N0bF9tc2cpOwotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaTV9DTURfQ0VOQ19TRVRLRVlcbiIpOworCXN3aXRjaCAoemRwYXJtLT5jbWQpIHsKKwljYXNlIFpNX0NNRF9DRU5DX1NFVENFTkM6CisJCXByaW50ayhLRVJOX0VSUiAiWk1fQ01EX0NFTkNfU0VUQ0VOQ1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAibGVuZ3RoIDogJSBkXG4iLCB6ZHBhcm0tPmxlbik7CisJCXByaW50ayhLRVJOX0VSUiAicG9saWN5IDogJSBkXG4iLCB6ZHBhcm0tPnUuaW5mby5jZW5jX3BvbGljeSk7CisJCWJyZWFrOworCWNhc2UgWk1fQ01EX0NFTkNfU0VUS0VZOgorCQkvKiByZXQgPSB3YWlfaW9jdGxfc2V0a2V5KHZhcCwgaW9jdGxfbXNnKTsgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJaTV9DTURfQ0VOQ19TRVRLRVlcbiIpOwogCi0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIk1BQyBhZGRyZXNzPSAiKTsKLSAgICAgICAgICAgIGZvcihpaSA9IDA7IGlpIDwgNjsgaWkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB6ZHBhcm0tPnUuY3J5cHQuc3RhX2FkZHJbaWldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJNQUMgYWRkcmVzcyA9ICIpOworCQlmb3IgKGlpID0gMDsgaWkgPCA2OyBpaSsrKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLAorCQkJCXpkcGFybS0+dS5jcnlwdC5zdGFfYWRkcltpaV0pOworCQl9CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKIAotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJLZXkgSW5kZXg6ICVkXG4iLCB6ZHBhcm0tPnUuY3J5cHQua2V5aWQpOwotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJFbmNyeXB0aW9uIGtleT0gIik7Ci0gICAgICAgICAgICBmb3IoaWkgPSAwOyBpaSA8IDE2OyBpaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHpkcGFybS0+dS5jcnlwdC5rZXlbaWldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJLZXkgSW5kZXggOiAlIGRcbiIsIHpkcGFybS0+dS5jcnlwdC5rZXlpZCk7CisJCXByaW50ayhLRVJOX0VSUiAiRW5jcnlwdGlvbiBrZXkgPSAiKTsKKwkJZm9yIChpaSA9IDA7IGlpIDwgMTY7IGlpKyspIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHpkcGFybS0+dS5jcnlwdC5rZXlbaWldKTsKKwkJfQorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiTUlDIGtleT0gIik7Ci0gICAgICAgICAgICBmb3IoaWkgPSAxNjsgaWkgPCBaTV9DRU5DX0tFWV9TSVpFOyBpaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHpkcGFybS0+dS5jcnlwdC5rZXlbaWldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJNSUMga2V5ID0gIik7CisJCWZvcihpaSA9IDE2OyBpaSA8IFpNX0NFTkNfS0VZX1NJWkU7IGlpKyspIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHpkcGFybS0+dS5jcnlwdC5rZXlbaWldKTsKKwkJfQorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKLSAgICAgICAgICAgIC8qIFNldCB1cCBrZXkgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgICAgIGtleUluZm8ua2V5TGVuZ3RoID0gWk1fQ0VOQ19LRVlfU0laRTsKLSAgICAgICAgICAgIGtleUluZm8ua2V5SW5kZXggPSB6ZHBhcm0tPnUuY3J5cHQua2V5aWQ7Ci0gICAgICAgICAgICBrZXlJbmZvLmZsYWcgPSBaTV9LRVlfRkxBR19BVVRIRU5USUNBVE9SIHwgWk1fS0VZX0ZMQUdfQ0VOQzsKLSAgICAgICAgICAgIGtleUluZm8ua2V5ID0gemRwYXJtLT51LmNyeXB0LmtleTsKLSAgICAgICAgICAgIGtleUluZm8ubWFjQWRkciA9ICh1MTZfdCAqKXpkcGFybS0+dS5jcnlwdC5zdGFfYWRkcjsKKwkJLyogU2V0IHVwIGtleSBpbmZvcm1hdGlvbiAqLworCQlrZXlJbmZvLmtleUxlbmd0aCA9IFpNX0NFTkNfS0VZX1NJWkU7CisJCWtleUluZm8ua2V5SW5kZXggPSB6ZHBhcm0tPnUuY3J5cHQua2V5aWQ7CisJCWtleUluZm8uZmxhZyA9IFpNX0tFWV9GTEFHX0FVVEhFTlRJQ0FUT1IgfCBaTV9LRVlfRkxBR19DRU5DOworCQlrZXlJbmZvLmtleSA9IHpkcGFybS0+dS5jcnlwdC5rZXk7CisJCWtleUluZm8ubWFjQWRkciA9ICh1MTZfdCAqKXpkcGFybS0+dS5jcnlwdC5zdGFfYWRkcjsKIAotICAgICAgICAgICAgLyogSWRlbnRpZnkgdGhlIE1BQyBhZGRyZXNzIGluZm9ybWF0aW9uICovCi0gICAgICAgICAgICBpZiAobWVtY21wKHpkcGFybS0+dS5jcnlwdC5zdGFfYWRkciwgYmNfYWRkciwgc2l6ZW9mKGJjX2FkZHIpKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19HSzsKLSAgICAgICAgICAgICAgICBrZXlJbmZvLnZhcElkID0gYXBJZDsKLSAgICAgICAgICAgICAgICBtZW1jcHkoa2V5SW5mby52YXBBZGRyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAga2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX1BLOwotICAgICAgICAgICAgfQorCQkvKiBJZGVudGlmeSB0aGUgTUFDIGFkZHJlc3MgaW5mb3JtYXRpb24gKi8KKwkJaWYgKG1lbWNtcCh6ZHBhcm0tPnUuY3J5cHQuc3RhX2FkZHIsIGJjX2FkZHIsCisJCQkJc2l6ZW9mKGJjX2FkZHIpKSA9PSAwKSB7CisJCQlrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfR0s7CisJCQlrZXlJbmZvLnZhcElkID0gYXBJZDsKKwkJCW1lbWNweShrZXlJbmZvLnZhcEFkZHIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJfSBlbHNlIHsKKwkJCWtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19QSzsKKwkJfQogCi0gICAgICAgICAgICB6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CisJCXpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWk1fQ01EX0NFTkNfUkVLRVk6Ci0gICAgICAgICAgICAvL3JldCA9IHdhaV9pb2N0bF9yZWtleSh2YXAsIGlvY3RsX21zZyk7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpNX0NNRF9DRU5DX1JFS0VZXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7Ci0gICAgICAgICAgICBicmVhazsKKwkJYnJlYWs7CisJY2FzZSBaTV9DTURfQ0VOQ19SRUtFWToKKwkJLyogcmV0ID0gd2FpX2lvY3RsX3Jla2V5KHZhcCwgaW9jdGxfbXNnKTsgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJaTV9DTURfQ0VOQ19SRUtFWVxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CiAKLSAgICB9CisJLyogaWYgKHJldHYgPT0gRU5FVFJFU0VUKSAqLworCS8qIHJldHYgPSBJU19VUF9BVVRPKHZhcCkgPyBpZWVlODAyMTFfb3Blbih2YXAtPml2X2RldikgOiAwOyAqLwogCi0gICAgLy9pZiAocmV0diA9PSBFTkVUUkVTRVQpCi0gICAgLy8gICAgcmV0diA9IElTX1VQX0FVVE8odmFwKSA/IGllZWU4MDIxMV9vcGVuKHZhcC0+aXZfZGV2KSA6IDA7Ci0KLSAgICByZXR1cm4gcmV0OworCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNlbmRpZiAvKiBaTV9FTkFCTEVfQ0VOQyAqLworCiBpbnQgdXNiZHJ2X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewotLy8gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwOwotLy8gICAgdm9pZCAqcmVncDsKLSAgICBzdHJ1Y3QgemRhcF9pb2N0bCB6ZHJlcTsKLSAgICBzdHJ1Y3QgaXdyZXEgKndycSA9IChzdHJ1Y3QgaXdyZXEgKilpZnI7Ci0gICAgc3RydWN0IGF0aHJfd2xhbl9wYXJhbSB6ZHBhcm07Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCS8qIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcDsgKi8KKwkvKiB2b2lkICpyZWdwOyAqLworCXN0cnVjdCB6ZGFwX2lvY3RsIHpkcmVxOworCXN0cnVjdCBpd3JlcSAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKWlmcjsKKwlzdHJ1Y3QgYXRocl93bGFuX3BhcmFtIHpkcGFybTsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpbnQgZXJyID0gMDsKLSAgICBpbnQgY2hhbmdlZCA9IDA7CisJaW50IGVyciA9IDA7CisJaW50IGNoYW5nZWQgPSAwOwogCi0vLyAgICByZWdwID0gbWFjcC0+cmVncDsKKwkvKiByZWdwID0gbWFjcC0+cmVncDsgKi8KIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIHN3aXRjaCAoY21kKQotICAgIHsKLSAgICAgICAgICAgIGNhc2UgU0lPQ0dJV05BTUU6Ci0gICAgICAgICAgICBzdHJjcHkod3JxLT51Lm5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOwotICAgICAgICAgICAgYnJlYWs7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHSVdOQU1FOgorCQlzdHJjcHkod3JxLT51Lm5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdBUDoKKwkJZXJyID0gdXNiZHJ2d2V4dF9naXdhcChkZXYsIE5VTEwsICZ3cnEtPnUuYXBfYWRkciwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NJV0FQOgorCQllcnIgPSB1c2JkcnZ3ZXh0X3Npd2FwKGRldiwgTlVMTCwgJndycS0+dS5hcF9hZGRyLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXTU9ERToKKwkJZXJyID0gdXNiZHJ2d2V4dF9naXdtb2RlKGRldiwgTlVMTCwgJndycS0+dS5tb2RlLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lXRVNTSUQ6CisJCXByaW50ayhLRVJOX0VSUiAiQ1dZIC0gdXNiZHJ2d2V4dF9zaXdlc3NpZFxuIik7CisJCS8qIGVyciA9IHVzYmRydl9pb2N0bF9zZXRlc3NpZChkZXYsICZ3cnEtPnUuZXNzaWQpOyAqLworCQllcnIgPSB1c2JkcnZ3ZXh0X3Npd2Vzc2lkKGRldiwgTlVMTCwgJndycS0+dS5lc3NpZCwgTlVMTCk7CiAKLSAgICAgICAgY2FzZSBTSU9DR0lXQVA6Ci0gICAgICAgICAgICBlcnIgPSB1c2JkcnZ3ZXh0X2dpd2FwKGRldiwgTlVMTCwgJndycS0+dS5hcF9hZGRyLCBOVUxMKTsKLSAgICAgICAgICAgIGJyZWFrOworCQlpZiAoIWVycikKKwkJCWNoYW5nZWQgPSAxOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdFU1NJRDoKKwkJZXJyID0gdXNiZHJ2d2V4dF9naXdlc3NpZChkZXYsIE5VTEwsICZ3cnEtPnUuZXNzaWQsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NTSVdSVFM6CisJCWVyciA9IHVzYmRydl9pb2N0bF9zZXRydHMoZGV2LCAmd3JxLT51LnJ0cyk7CisJCWlmICghIGVycikKKwkJCWNoYW5nZWQgPSAxOworCQlicmVhazsKKwkvKiBzZXRfYXV0aCAqLworCWNhc2UgU0lPQ0lXRklSU1RQUklWICsgMHgyOiB7CisJCS8qIHByaW50aygiQ1dZIC0gU0lPQ0lXRklSU1RQUklWICsgMHgyKHNldF9hdXRoKVxuIik7ICovCisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJZXJyID0gLUVQRVJNOworCQkJYnJlYWs7CisJCX0KKwkJaW50IHZhbCA9ICooKGludCAqKSB3cnEtPnUubmFtZSk7CisJCWlmICgodmFsIDwgMCkgfHwgKHZhbCA+IDIpKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQl6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgdmFsKTsKIAorCQkJaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKSB7CisJCQkJemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKwkJCQl6ZmlXbGFuRW5hYmxlKGRldik7CisJCQl9CiAKLSAgICAgICAgY2FzZSBTSU9DU0lXQVA6Ci0gICAgICAgICAgICBlcnIgPSB1c2JkcnZ3ZXh0X3Npd2FwKGRldiwgTlVMTCwgJndycS0+dS5hcF9hZGRyLCBOVUxMKTsKLSAgICAgICAgICAgIGJyZWFrOworCQkJZXJyID0gMDsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisJfQorCQlicmVhazsKKwkvKiBnZXRfYXV0aCAqLworCWNhc2UgU0lPQ0lXRklSU1RQUklWICsgMHgzOiB7CisJCWludCBBdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9PUEVOOwogCisJCS8qIHByaW50aygiQ1dZIC0gU0lPQ0lXRklSU1RQUklWICsgMHgzKGdldF9hdXRoKVxuIik7ICovCiAKLSAgICAgICAgY2FzZSBTSU9DR0lXTU9ERToKLSAgICAgICAgICAgIGVyciA9IHVzYmRydndleHRfZ2l3bW9kZShkZXYsIE5VTEwsICZ3cnEtPnUubW9kZSwgTlVMTCk7Ci0gICAgICAgICAgICBicmVhazsKKwkJaWYgKHdycS0+dS5kYXRhLnBvaW50ZXIpIHsKKwkJCXdycS0+dS5kYXRhLmZsYWdzID0gMTsKIAorCQkJQXV0aE1vZGUgPSB6ZmlXbGFuUXVlcnlBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCAwKTsKKwkJCWlmIChBdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfT1BFTikgeworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDEyOwogCi0gICAgICAgIGNhc2UgU0lPQ1NJV0VTU0lEOgotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJDV1kgLSB1c2JkcnZ3ZXh0X3Npd2Vzc2lkXG4iKTsKLSAgICAgICAgICAgIC8vZXJyID0gdXNiZHJ2X2lvY3RsX3NldGVzc2lkKGRldiwgJndycS0+dS5lc3NpZCk7Ci0gICAgICAgICAgICBlcnIgPSB1c2JkcnZ3ZXh0X3Npd2Vzc2lkKGRldiwgTlVMTCwgJndycS0+dS5lc3NpZCwgTlVMTCk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLAorCQkJCQkib3BlbiBzeXN0ZW0iLCAxMikpIHsKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoQXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1NIQVJFRF9LRVkpCXsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxMTsKIAotICAgICAgICAgICAgaWYgKCEgZXJyKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwotICAgICAgICAgICAgYnJlYWs7CisJCQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLAorCQkJCQkic2hhcmVkIGtleSIsIDExKSkgeworCQkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoQXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX0FVVE8pIHsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxMDsKIAorCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwKKwkJCQkJImF1dG8gbW9kZSIsIDEwKSkgeworCQkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0KKwl9CisJCWJyZWFrOworCS8qIGRlYnVnIGNvbW1hbmQgKi8KKwljYXNlIFpEQVBJT0NUTDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ6ZHJlcSwgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHpkcmVxKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2IDogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KIAotICAgICAgICBjYXNlIFNJT0NHSVdFU1NJRDoKLSAgICAgICAgICAgIGVyciA9IHVzYmRydndleHRfZ2l3ZXNzaWQoZGV2LCBOVUxMLCAmd3JxLT51LmVzc2lkLCBOVUxMKTsKLSAgICAgICAgICAgIGJyZWFrOworCQkvKiBwcmludGsoS0VSTl9XQVJOSU5HCisJCSogInVzYmRydiA6IGNtZCA9ICUgMngsIHJlZyA9IDB4JTA0bHgsCisJCSp2YWx1ZSA9IDB4JTA4bHhcbiIsCisJCSogemRyZXEuY21kLCB6ZHJlcS5hZGRyLCB6ZHJlcS52YWx1ZSk7CisJCSovCisJCXpmTG54UHJpdmF0ZUlvY3RsKGRldiwgJnpkcmVxKTsKIAorCQllcnIgPSAwOworCQlicmVhazsKKwljYXNlIFpEX0lPQ1RMX1dQQToKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ6ZHBhcm0sIGlmci0+aWZyX2RhdGEsCisJCQlzaXplb2Yoc3RydWN0IGF0aHJfd2xhbl9wYXJhbSkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmRydiA6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CiAKLSAgICAgICAgY2FzZSBTSU9DU0lXUlRTOgorCQl1c2JkcnZfd3BhX2lvY3RsKGRldiwgJnpkcGFybSk7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgWkRfSU9DVExfUEFSQU06IHsKKwkJaW50ICpwOworCQlpbnQgb3A7CisJCWludCBhcmc7CiAKLSAgICAgICAgICAgIGVyciA9IHVzYmRydl9pb2N0bF9zZXRydHMoZGV2LCAmd3JxLT51LnJ0cyk7Ci0gICAgICAgICAgICBpZiAoISBlcnIpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKKwkJLyogUG9pbnQgdG8gdGhlIG5hbWUgZmllbGQgYW5kIHJldHJpZXZlIHRoZQorCQkqIG9wIGFuZCBhcmcgZWxlbWVudHMuCisJCSovCisJCXAgPSAoaW50ICopd3JxLT51Lm5hbWU7CisJCW9wID0gKnArKzsKKwkJYXJnID0gKnA7CiAKKwkJaWYgKG9wID09IFpEX1BBUkFNX1JPQU1JTkcpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJIioqKioqKioqKioqKipaRF9QQVJBTV9ST0FNSU5HIDogJSBkXG4iLCBhcmcpOworCQkJLyogbWFjcC0+Y2FyZFNldHRpbmcuYXBfc2Nhbj0oVTgpYXJnOyAqLworCQl9CisJCWlmIChvcCA9PSBaRF9QQVJBTV9QUklWQUNZKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlpEX0lPQ1RMX1BSSVZBQ1kgOiAiKTsKIAotCQljYXNlIFNJT0NJV0ZJUlNUUFJJViArIDB4MjogLyogc2V0X2F1dGggKi8KLQkJewotCQkJLy9wcmludGsoIkNXWSAtIFNJT0NJV0ZJUlNUUFJJViArIDB4MiAoc2V0X2F1dGgpXG4iKTsKLQkJCWlmICghIGNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQl7Ci0JCQkJZXJyID0gLUVQRVJNOworCQkJLyogVHVybiBvbiB0aGUgcHJpdmFjeSBpbnZva2UgZmxhZyAqLworCQkJaWYgKGFyZykgeworCQkJCS8qIG1DYXBbMF0gfD0gQ0FQX1BSSVZBQ1k7ICovCisJCQkJLyogbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXSA9IDE7ICovCisJCQkJcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOworCisJCQl9IGVsc2UgeworCQkJCS8qIG1DYXBbMF0gJj0gfkNBUF9QUklWQUNZOyAqLworCQkJCS8qIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF0gPSAwOyAqLworCQkJCXByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7CisJCQl9CisJCQkvKiBjaGFuZ2VkPTE7ICovCisJCX0KKwkJaWYgKG9wID09IFpEX1BBUkFNX1dQQSkgeworCisJCXByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fV1BBIDogIik7CisKKwkJaWYgKGFyZykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOworCisJCQlpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSAhPSBaTV9NT0RFX0FQKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJTdGF0aW9uIE1vZGVcbiIpOworCQkJCS8qIHpmaVdsYW5RdWVyeVdwYUllKGRldiwgKHU4X3QgKikKKwkJCQkJJndwYUllLCAmd3BhbGVuKTsgKi8KKwkJCQkvKiBwcmludGsoIndwYUllIDogJSAyeCwgJSAyeCwgJSAyeFxuIiwKKwkJCQkJd3BhSWVbMjFdLCB3cGFJZVsyMl0sIHdwYUllWzIzXSk7ICovCisJCQkJLyogcHJpbnRrKCJyc25JZSA6ICUgMngsICUgMngsICUgMnhcbiIsCisJCQkJCXdwYUllWzE3XSwgd3BhSWVbMThdLCB3cGFJZVsxOV0pOyAqLworCQkJCWlmICgobWFjcC0+c3VwSWVbMjFdID09IDB4NTApICYmCisJCQkJCShtYWNwLT5zdXBJZVsyMl0gPT0gMHhmMikgJiYKKwkJCQkJKG1hY3AtPnN1cEllWzIzXSA9PSAweDIpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVBTS1xuIik7CisJCQkJLyogd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFQU0s7ICovCisJCQkJLyogd2QtPndzLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVBTSzsgKi8KKwkJCQl6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwKKwkJCQkJCQlaTV9BVVRIX01PREVfV1BBUFNLKTsKKwkJCQl9IGVsc2UgaWYgKChtYWNwLT5zdXBJZVsyMV0gPT0gMHg1MCkgJiYKKwkJCQkJKG1hY3AtPnN1cEllWzIyXSA9PSAweGYyKSAmJgorCQkJCQkobWFjcC0+c3VwSWVbMjNdID09IDB4MSkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBXG4iKTsKKwkJCQkvKiB3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTsgKi8KKwkJCQkvKiB3ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBOyAqLworCQkJCXpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LAorCQkJCQkJCVpNX0FVVEhfTU9ERV9XUEEpOworCQkJCQl9IGVsc2UgaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSAmJgorCQkJCQkJKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSAmJgorCQkJCQkJKG1hY3AtPnN1cEllWzE5XSA9PSAweDIpKQorCQkJCQl7CisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLXG4iKTsKKwkJCQkvKiB3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0s7ICovCisJCQkJLyogd2QtPndzLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0s7ICovCisJCQkJemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsCisJCQkJWk1fQVVUSF9NT0RFX1dQQTJQU0spOworCQkJfSBlbHNlIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgJiYKKwkJCQkobWFjcC0+c3VwSWVbMThdID09IDB4YWMpICYmCisJCQkJKG1hY3AtPnN1cEllWzE5XSA9PSAweDEpKQorCQkJCXsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlxuIik7CisJCQkJLyogd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyOyAqLworCQkJCS8qIHdkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyOyAqLworCQkJCXpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LAorCQkJCQkJCVpNX0FVVEhfTU9ERV9XUEEyKTsKKwkJCX0KKwkJCS8qIFdQQSBvciBXUEFQU0sgKi8KKwkJCWlmICgobWFjcC0+c3VwSWVbMjFdID09IDB4NTApIHx8CisJCQkJKG1hY3AtPnN1cEllWzIyXSA9PSAweGYyKSkgeworCQkJCWlmIChtYWNwLT5zdXBJZVsxMV0gPT0gMHgyKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUFxuIik7CisJCQkJLyogd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7ICovCisJCQkJLyogd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsgKi8KKwkJCQl6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9US0lQKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVNcbiIpOworCQkJCS8qIHdkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7ICovCisJCQkJLyogd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOyAqLworCQkJCXpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX0FFUyk7CisJCQkJfQorCQkJfQorCQkJLy9XUEEyIG9yIFdQQTJQU0sKKwkJCWlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgfHwKKwkJCQkobWFjcC0+c3VwSWVbMThdID09IDB4YWMpKSB7CisJCQkJaWYgKG1hY3AtPnN1cEllWzEzXSA9PSAweDIpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQXG4iKTsKKwkJCQkvKiB3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsgKi8KKwkJCQkvKiB3ZC0+d3Mud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOyAqLworCQkJCXpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX1RLSVApOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTXG4iKTsKKwkJCQkvKiB3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOyAqLworCQkJCS8qIHdkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsgKi8KKwkJCQl6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9BRVMpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJemZpV2xhblNldFdwYVN1cHBvcnQoZGV2LCAxKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFJlc2V0IHRoZSBXUEEgcmVsYXRlZCB2YXJpYWJsZXMgKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7CisKKwkJCXpmaVdsYW5TZXRXcGFTdXBwb3J0KGRldiwgMCk7CisJCQl6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgWk1fQVVUSF9NT0RFX09QRU4pOworCQkJemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEKTsKKworCQkJLyogTm93IHdlIG9ubHkgc2V0IHRoZSBsZW5ndGggaW4gdGhlIFdQQSBJRQorCQkJKiBmaWVsZCB0byB6ZXJvLgorCQkJKm1hY3AtPmNhcmRTZXR0aW5nLldQQUllWzFdID0gMDsKKwkJCSovCisJCQl9CisJCX0KKworCQlpZiAob3AgPT0gWkRfUEFSQU1fQ09VTlRFUk1FQVNVUkVTKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiKioqKioqKioqKioqKioqKlpEX1BBUkFNX0NPVU5URVJNRUFTVVJFUyA6ICIpOworCisJCQlpZihhcmcpIHsKKwkJCQkvKiAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0xOyAqLworCQkJCXByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MDsgKi8KKwkJCQlwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOworCQkJfQorCQl9CisJCWlmIChvcCA9PSBaRF9QQVJBTV9EUk9QVU5FTkNSWVBURUQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fRFJPUFVORU5DUllQVEVEIDogIik7CisKKwkJCWlmKGFyZykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKKwkJCX0KKwkJfQorCQlpZiAob3AgPT0gWkRfUEFSQU1fQVVUSF9BTEdTKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX0FVVEhfQUxHUyA6ICIpOworCisJCQlpZiAoYXJnID09IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIk9QRU5fU1lTVEVNXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJTSEFSRURfS0VZXG4iKTsKKwkJCX0KKwkJfQorCQlpZiAob3AgPT0gWkRfUEFSQU1fV1BTX0ZJTFRFUikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9XUFNfRklMVEVSIDogIik7CisKKwkJCWlmIChhcmcpIHsKKwkJCQkvKiAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0xOyAqLworCQkJCW1hY3AtPmZvcndhcmRNZ210ID0gMTsKKwkJCQlwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7CisJCQl9IGVsc2UgeworCQkJCS8qICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTA7ICovCisJCQkJbWFjcC0+Zm9yd2FyZE1nbXQgPSAwOworCQkJCXByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7CisJCQl9CisJCX0KKwl9CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgWkRfSU9DVExfR0VUV1BBSUU6IHsKKwkJc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSByZXFfd3BhaWU7CisJCXUxNl90IGFwSWQsIGksIGo7CisKKwkJLyogR2V0IHRoZSBBUCBJZCAqLworCQlhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOworCisJCWlmIChhcElkID09IDB4ZmZmZikgeworCQkJYXBJZCA9IDA7CisJCX0gZWxzZSB7CisJCQlhcElkID0gYXBJZCArIDE7CisJCX0KKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcV93cGFpZSwgaWZyLT5pZnJfZGF0YSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFyZXFfd3BhaWUpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnYgOiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBaTV9PQUxfTUFYX1NUQV9TVVBQT1JUOyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBJRUVFODAyMTFfQUREUl9MRU47IGorKykgeworCQkJCWlmIChtYWNwLT5zdGF3cGFpZVtpXS53cGFfbWFjYWRkcltqXSAhPQorCQkJCQkJcmVxX3dwYWllLndwYV9tYWNhZGRyW2pdKQogCQkJCWJyZWFrOwogCQkJfQotCQkJewotCQkJCWludCB2YWwgPSAqKCAoaW50ICopIHdycS0+dS5uYW1lICk7Ci0JCQkJaWYgKCh2YWwgPCAwKSB8fCAodmFsID4gMikpCi0JCQkJewotCQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIHZhbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLQkJCQkJZXJyID0gMDsKLQkJCQkJY2hhbmdlZCA9IDE7Ci0JCQkJfQotCQkJfQotCQl9CisJCQlpZiAoaiA9PSA2KQogCQkJYnJlYWs7Ci0KLQkJY2FzZSBTSU9DSVdGSVJTVFBSSVYgKyAweDM6IC8qIGdldF9hdXRoICovCi0JCXsKLQkJICAgIGludCBBdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9PUEVOOwotCi0JCQkvL3ByaW50aygiQ1dZIC0gU0lPQ0lXRklSU1RQUklWICsgMHgzIChnZXRfYXV0aClcbiIpOwotCi0JCQlpZiAod3JxLT51LmRhdGEucG9pbnRlcikKLQkJCXsKLQkJCQl3cnEtPnUuZGF0YS5mbGFncyA9IDE7Ci0KLQkJCQlBdXRoTW9kZSA9IHpmaVdsYW5RdWVyeUF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIDApOwotCQkJCWlmIChBdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfT1BFTikKLQkJCQl7Ci0JCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDEyOwotCi0JCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgIm9wZW4gc3lzdGVtIiwgMTIpKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIGlmIChBdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfU0hBUkVEX0tFWSkKLQkJCQl7Ci0JCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDExOwotCi0JCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgInNoYXJlZCBrZXkiLCAxMSkpCi0JCQkJCXsKLQkJCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgaWYgKEF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9BVVRPKQotCQkJCXsKLQkJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTA7Ci0KLQkJCQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAiYXV0byBtb2RlIiwgMTApKQotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQl9Ci0JCQl9CiAJCX0KLQkJCWJyZWFrOwogCisJCWlmIChpIDwgWk1fT0FMX01BWF9TVEFfU1VQUE9SVCkgeworCQkvKiBwcmludGsoIlpEX0lPQ1RMX0dFVFdQQUlFIC0gc3RhIGluZGV4ID0gJSBkXG4iLCBpKTsgKi8KKwkJbWVtY3B5KHJlcV93cGFpZS53cGFfaWUsIG1hY3AtPnN0YXdwYWllW2ldLndwYV9pZSwKKwkJCQkJCQlJRUVFODAyMTFfTUFYX0lFX1NJWkUpOworCQl9CiAKLSAgICAgICAgY2FzZSBaREFQSU9DVEw6ICAgIC8vZGVidWcgY29tbWFuZAotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZ6ZHJlcSwgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mICh6ZHJlcSkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2OiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICB9CisJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnJlcV93cGFpZSwKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSkpKSB7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KIAotICAgICAgICAgICAgLy9wcmludGsoS0VSTl9ERUJVRyAidXNiZHJ2OiBjbWQ9JTJ4LCByZWc9MHglMDRseCwgdmFsdWU9MHglMDhseFxuIiwKLSAgICAgICAgICAgIC8vICAgICAgICB6ZHJlcS5jbWQsIHpkcmVxLmFkZHIsIHpkcmVxLnZhbHVlKTsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisJY2FzZSBaTV9JT0NUTF9DRU5DOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJm1hY3AtPnpkX3dwYV9yZXEsIGlmci0+aWZyX2RhdGEsCisJCQlzaXplb2Yoc3RydWN0IGF0aHJfd2xhbl9wYXJhbSkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmRydiA6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CiAKLQkJCXpmTG54UHJpdmF0ZUlvY3RsKGRldiwgJnpkcmVxKTsKKwkJdXNiZHJ2X2NlbmNfaW9jdGwoZGV2LAorCQkJCShzdHJ1Y3QgenlkYXNfY2VuY19wYXJhbSAqKSZtYWNwLT56ZF93cGFfcmVxKTsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJI2VuZGlmIC8qIFpNX0VOQUJMRV9DRU5DICovCisJZGVmYXVsdDoKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KIAotICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgWkRfSU9DVExfV1BBOgotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZ6ZHBhcm0sIGlmci0+aWZyX2RhdGEsIHNpemVvZihzdHJ1Y3QgYXRocl93bGFuX3BhcmFtKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnY6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXNiZHJ2X3dwYV9pb2N0bChkZXYsICZ6ZHBhcm0pOwotICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgWkRfSU9DVExfUEFSQU06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCAqcDsKLSAgICAgICAgICAgIGludCBvcDsKLSAgICAgICAgICAgIGludCBhcmc7Ci0KLSAgICAgICAgICAgIC8qIFBvaW50IHRvIHRoZSBuYW1lIGZpZWxkIGFuZCByZXRyaWV2ZSB0aGUKLSAgICAgICAgICAgICAqIG9wIGFuZCBhcmcgZWxlbWVudHMuICAgICAgICAgICovCi0gICAgICAgICAgICBwID0gKGludCAqKXdycS0+dS5uYW1lOwotICAgICAgICAgICAgb3AgPSAqcCsrOwotICAgICAgICAgICAgYXJnID0gKnA7Ci0KLSAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX1JPQU1JTkcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIqKioqKioqKioqKioqIFpEX1BBUkFNX1JPQU1JTkc6ICVkXG4iLCBhcmcpOwotICAgICAgICAgICAgICAgIC8vbWFjcC0+Y2FyZFNldHRpbmcuYXBfc2Nhbj0oVTgpYXJnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYob3AgPT0gWkRfUEFSQU1fUFJJVkFDWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpEX0lPQ1RMX1BSSVZBQ1k6ICIpOwotCi0gICAgICAgICAgICAgICAgLyogVHVybiBvbiB0aGUgcHJpdmFjeSBpbnZva2UgZmxhZyAqLwotICAgICAgICAgICAgICAgIGlmKGFyZykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUNhcFswXSB8PSBDQVBfUFJJVkFDWTsKLSAgICAgICAgICAgICAgICAvLyAgICBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdID0gMTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOwotCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUNhcFswXSAmPSB+Q0FQX1BSSVZBQ1k7Ci0gICAgICAgICAgICAgICAgLy8gICAgbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NoYW5nZWQ9MTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX1dQQSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX1dQQTogIik7Ci0KLSAgICAgICAgICAgICAgICBpZihhcmcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgIT0gWk1fTU9ERV9BUCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJTdGF0aW9uIE1vZGVcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy96ZmlXbGFuUXVlcnlXcGFJZShkZXYsICh1OF90ICopJndwYUllLCAmd3BhbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJ3cGFJZSA6ICUyeCwlMngsJTJ4XG4iLCB3cGFJZVsyMV0sIHdwYUllWzIyXSwgd3BhSWVbMjNdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJyc25JZSA6ICUyeCwlMngsJTJ4XG4iLCB3cGFJZVsxN10sIHdwYUllWzE4XSwgd3BhSWVbMTldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWFjcC0+c3VwSWVbMjFdID09IDB4NTApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzIyXSA9PSAweGYyKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsyM10gPT0gMHgyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBUFNLXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBUFNLOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVBTSzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgWk1fQVVUSF9NT0RFX1dQQVBTSyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgobWFjcC0+c3VwSWVbMjFdID09IDB4NTApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMjJdID09IDB4ZjIpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMjNdID09IDB4MSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIFpNX0FVVEhfTU9ERV9XUEEpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1hY3AtPnN1cEllWzE3XSA9PSAweGYpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMThdID09IDB4YWMpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMTldID09IDB4MikpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0tcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIFpNX0FVVEhfTU9ERV9XUEEyUFNLKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzE5XSA9PSAweDEpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCBaTV9BVVRIX01PREVfV1BBMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1hY3AtPnN1cEllWzIxXSA9PSAweDUwKSB8fCAobWFjcC0+c3VwSWVbMjJdID09IDB4ZjIpKS8vV1BBIG9yIFdQQVBTSwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWNwLT5zdXBJZVsxMV0gPT0gMHgyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fVEtJUCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFU1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3Mud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX0FFUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSB8fCAobWFjcC0+c3VwSWVbMThdID09IDB4YWMpKSAvL1dQQTIgb3IgV1BBMlBTSwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWNwLT5zdXBJZVsxM10gPT0gMHgyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fVEtJUCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFU1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3Mud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX0FFUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXcGFTdXBwb3J0KGRldiwgMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBXUEEgcmVsYXRlZCB2YXJpYWJsZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKLQotICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDApOwotICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgWk1fQVVUSF9NT0RFX09QRU4pOwotICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9XRVBfRElTQUJMRUQpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qIE5vdyB3ZSBvbmx5IHNldCB0aGUgbGVuZ3RoIGluIHRoZSBXUEEgSUUKLSAgICAgICAgICAgICAgICAgICAgICogZmllbGQgdG8gemVyby4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgLy9tYWNwLT5jYXJkU2V0dGluZy5XUEFJZVsxXSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYob3AgPT0gWkRfUEFSQU1fQ09VTlRFUk1FQVNVUkVTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiPT09PT09PT09PT09PT09PVpEX1BBUkFNX0NPVU5URVJNRUFTVVJFUzogIik7Ci0KLSAgICAgICAgICAgICAgICBpZihhcmcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTE7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0wOwotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX0RST1BVTkVOQ1JZUFRFRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX0RST1BVTkVOQ1JZUFRFRDogIik7Ci0KLSAgICAgICAgICAgICAgICBpZihhcmcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYob3AgPT0gWkRfUEFSQU1fQVVUSF9BTEdTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fQVVUSF9BTEdTOiAiKTsKLQotICAgICAgICAgICAgICAgIGlmKGFyZyA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJPUEVOX1NZU1RFTVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiU0hBUkVEX0tFWVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYob3AgPT0gWkRfUEFSQU1fV1BTX0ZJTFRFUikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX1dQU19GSUxURVI6ICIpOwotCi0gICAgICAgICAgICAgICAgaWYoYXJnKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0xOwotICAgICAgICAgICAgICAgICAgICBtYWNwLT5mb3J3YXJkTWdtdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0wOwotICAgICAgICAgICAgICAgICAgICBtYWNwLT5mb3J3YXJkTWdtdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaRF9JT0NUTF9HRVRXUEFJRToKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSByZXFfd3BhaWU7Ci0gICAgICAgICAgICB1MTZfdCBhcElkLCBpLCBqOwotCi0gICAgICAgICAgICAvKiBHZXQgdGhlIEFQIElkICovCi0gICAgICAgICAgICBhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOwotCi0gICAgICAgICAgICBpZiAoYXBJZCA9PSAweGZmZmYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBJZCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXBJZCA9IGFwSWQrMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZyZXFfd3BhaWUsIGlmci0+aWZyX2RhdGEsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllKSkpewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2OiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IFpNX09BTF9NQVhfU1RBX1NVUFBPUlQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBJRUVFODAyMTFfQUREUl9MRU47IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYWNwLT5zdGF3cGFpZVtpXS53cGFfbWFjYWRkcltqXSAhPSByZXFfd3BhaWUud3BhX21hY2FkZHJbal0pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGogPT0gNikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSA8IFpNX09BTF9NQVhfU1RBX1NVUFBPUlQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy9wcmludGsoIlpEX0lPQ1RMX0dFVFdQQUlFIC0gc3RhIGluZGV4ID0gJWRcbiIsIGkpOwotICAgICAgICAgICAgICAgIG1lbWNweShyZXFfd3BhaWUud3BhX2llLCBtYWNwLT5zdGF3cGFpZVtpXS53cGFfaWUsIElFRUU4MDIxMV9NQVhfSUVfU0laRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnJlcV93cGFpZSwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFyZXFfd3BhaWUpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIFpNX0VOQUJMRV9DRU5DCi0gICAgICAgIGNhc2UgWk1fSU9DVExfQ0VOQzoKLSAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmbWFjcC0+emRfd3BhX3JlcSwgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0pKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydjogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1c2JkcnZfY2VuY19pb2N0bChkZXYsIChzdHJ1Y3QgenlkYXNfY2VuY19wYXJhbSAqKSZtYWNwLT56ZF93cGFfcmVxKTsKLSAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnIgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotCi0gICAgcmV0dXJuIGVycjsKKwlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvdXNiZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwppbmRleCBkZmUwNzA3Li41NjVhODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwpAQCAtOTM2LDMwICs5MzYsMjYgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpCiAgICAgewogICAgICAgICBlbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOwotICAgICAgICBpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKLSAgICAgICAgICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDIpKQorCSBpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiYnVsayBpbjogd01heFBhY2tldFNpemUgPSAleFxuIiwgbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCi0gICAgICAgICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkKKwkgaWYgKHVzYl9lbmRwb2ludF9pc19idWxrX291dChlbmRwb2ludCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiYnVsayBvdXQ6IHdNYXhQYWNrZXRTaXplID0gJXhcbiIsIGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCi0gICAgICAgICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkKKwkgaWYgKHVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiB3ZSBmb3VuZCBhIGludGVycnVwdCBpbiBlbmRwb2ludCAqLwogICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpbnRlcnJ1cHQgaW46IHdNYXhQYWNrZXRTaXplID0gJXhcbiIsIGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpOwogICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpbnRlcnJ1cHQgaW46IGludF9pbnRlcnZhbCA9ICVkXG4iLCBlbmRwb2ludC0+YkludGVydmFsKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgPT0gMHgwMCkgJiYKLSAgICAgICAgICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDMpKQorCSBpZiAodXNiX2VuZHBvaW50X2lzX2ludF9vdXQoZW5kcG9pbnQpKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiB3ZSBmb3VuZCBhIGludGVycnVwdCBvdXQgZW5kcG9pbnQgKi8KICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaW50ZXJydXB0IG91dDogd01heFBhY2tldFNpemUgPSAleFxuIiwgbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3dyYXAuYwppbmRleCAxYmI1ZjU5Li40ZGI4ZjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3d3cmFwLmMKQEAgLTM1MCw4ICszNTAsNyBAQAogICAgIGJ1Zi0+bGVuID0gMDsKICNlbmRpZgogCi0gICAgaWYgKChidWYtPnRhaWwgKyB1cmItPmFjdHVhbF9sZW5ndGgpID4gYnVmLT5lbmQpCi0gICAgICAgIEJVRygpOworICAgIEJVR19PTigoYnVmLT50YWlsICsgdXJiLT5hY3R1YWxfbGVuZ3RoKSA+IGJ1Zi0+ZW5kKTsKIAogICAgIHNrYl9wdXQoYnVmLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCkBAIC05NzEsOCArOTcwLDcgQEAKIG91dDoKIAlyZXR1cm4gcmV0Owogbmxtc2dfZmFpbHVyZTogLypOTE1TR19QVVQgyqew3KOs1PKzt8/6zNe909fWu7q05iovCi0gIAlpZihza2IpCi0gICAgCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAlnb3RvIG91dDsKIAogI3VuZGVmIENPTU1UWVBFX0dST1VQCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZGNvbXBhdC5oIGIvZHJpdmVycy9zdGFnaW5nL290dXMvemRjb21wYXQuaAppbmRleCA4YWNmNDAwLi5kOWEzYjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZGNvbXBhdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkY29tcGF0LmgKQEAgLTQ1LDEzICs0NSw2IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIElSUV9OT05FCi10eXBlZGVmIHZvaWQgaXJxcmV0dXJuX3Q7Ci0jZGVmaW5lIElSUV9OT05FCi0jZGVmaW5lIElSUV9IQU5ETEVECi0jZGVmaW5lIElSUV9SRVRWQUwoeCkKLSNlbmRpZgotCiAjaWZuZGVmIGluX2F0b21pYwogI2RlZmluZSBpbl9hdG9taWMoKSAgMAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjNjZkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbmZpZyBQTEFOOUFVVEgKKwl0cmlzdGF0ZSAiUGxhbiA5IHN0eWxlIGNhcGFiaWxpdHkgZGV2aWNlIGltcGxlbWVudGF0aW9uIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gQ1JZUFRPCisJaGVscAorCSAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgUGxhbiA5IHN0eWxlIGNhcGFiaWxpdHkgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UKKwkgIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwOWF1dGguCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWJmNmZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfUExBTjlBVVRIKQkrPSBwOWF1dGgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhYzg5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBQbGFuIDkgc3R5bGUgY2FwYWJpbGl0eSBkZXZpY2UgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBMaW51eCBLZXJuZWwKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgMjAwOSBBc2h3aW4gR2FudGkgPGFzaHdpbi5nYW50aUBnbWFpbC5jb20+CisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmVkLmg+CisKKyNpZm5kZWYgQ0FQX01BSk9SCisjZGVmaW5lIENBUF9NQUpPUiAwCisjZW5kaWYKKworI2lmbmRlZiBDQVBfTlJfREVWUworI2RlZmluZSBDQVBfTlJfREVWUyAyCQkvKiBjYXBoYXNoIGFuZCBjYXB1c2UgKi8KKyNlbmRpZgorCisjaWZuZGVmIENBUF9OT0RFX1NJWkUKKyNkZWZpbmUgQ0FQX05PREVfU0laRSAyMAorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0RJR0VTVF9TSVpFICAyMAorCitzdHJ1Y3QgY2FwX25vZGUgeworCWNoYXIgZGF0YVtDQVBfTk9ERV9TSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdHJ1Y3QgY2FwX2RldiB7CisJc3RydWN0IGNhcF9ub2RlICpoZWFkOworCWludCBub2RlX3NpemU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBjZGV2IGNkZXY7Cit9OworCitzdGF0aWMgaW50IGNhcF9tYWpvciA9IENBUF9NQUpPUjsKK3N0YXRpYyBpbnQgY2FwX21pbm9yOworc3RhdGljIGludCBjYXBfbnJfZGV2cyA9IENBUF9OUl9ERVZTOworc3RhdGljIGludCBjYXBfbm9kZV9zaXplID0gQ0FQX05PREVfU0laRTsKKworbW9kdWxlX3BhcmFtKGNhcF9tYWpvciwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjYXBfbWlub3IsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2FwX25yX2RldnMsIGludCwgU19JUlVHTyk7CisKK01PRFVMRV9BVVRIT1IoIkFzaHdpbiBHYW50aSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgc3RydWN0IGNhcF9kZXYgKmNhcF9kZXZpY2VzOworCitzdGF0aWMgdm9pZCBoZXhkdW1wKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl3aGlsZSAobGVuLS0pCisJCXByaW50aygiJTAyeCIsICpidWYrKyk7CisJcHJpbnRrKCJcbiIpOworfQorCitzdGF0aWMgY2hhciAqY2FwX2hhc2goY2hhciAqcGxhaW5fdGV4dCwgdW5zaWduZWQgaW50IHBsYWluX3RleHRfc2l6ZSwKKwkJICAgICAgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5X3NpemUpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCWNoYXIgKnJlc3VsdDsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbTsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJaW50IHJldDsKKworCXRmbSA9IGNyeXB0b19hbGxvY19oYXNoKCJobWFjKHNoYTEpIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUih0Zm0pKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImZhaWxlZCB0byBsb2FkIHRyYW5zZm9ybSBmb3IgaG1hYyhzaGExKTogJWxkXG4iLAorCQkgICAgICAgUFRSX0VSUih0Zm0pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZGVzYy50Zm0gPSB0Zm07CisJZGVzYy5mbGFncyA9IDA7CisKKwlyZXN1bHQgPSBremFsbG9jKE1BWF9ESUdFU1RfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvdXQgb2YgbWVtb3J5IVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXNnX3NldF9idWYoJnNnLCBwbGFpbl90ZXh0LCBwbGFpbl90ZXh0X3NpemUpOworCisJcmV0ID0gY3J5cHRvX2hhc2hfc2V0a2V5KHRmbSwga2V5LCBrZXlfc2l6ZSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInNldGtleSgpIGZhaWxlZCByZXQ9JWRcbiIsIHJldCk7CisJCWtmcmVlKHJlc3VsdCk7CisJCXJlc3VsdCA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgJnNnLCBwbGFpbl90ZXh0X3NpemUsIHJlc3VsdCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImRpZ2VzdCAoKSBmYWlsZWQgcmV0PSVkXG4iLCByZXQpOworCQlrZnJlZShyZXN1bHQpOworCQlyZXN1bHQgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY3J5cHRvIGhhc2ggZGlnZXN0IHNpemUgJWRcbiIsCisJICAgICAgIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUodGZtKSk7CisJaGV4ZHVtcChyZXN1bHQsIE1BWF9ESUdFU1RfU0laRSk7CisKK291dDoKKwljcnlwdG9fZnJlZV9oYXNoKHRmbSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBjYXBfdHJpbShzdHJ1Y3QgY2FwX2RldiAqZGV2KQoreworCXN0cnVjdCBjYXBfbm9kZSAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnE7CisJaWYgKGRldi0+aGVhZCAhPSBOVUxMKSB7CisJCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHEsICYoZGV2LT5oZWFkLT5saXN0KSkgeworCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBjYXBfbm9kZSwgbGlzdCk7CisJCQlsaXN0X2RlbChwb3MpOworCQkJa2ZyZWUodG1wKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FwX2RldiAqZGV2OworCWRldiA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgY2FwX2RldiwgY2Rldik7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZGV2OworCisJLyogdHJpbSB0byAwIHRoZSBsZW5ndGggb2YgdGhlIGRldmljZSBpZiBvcGVuIHdhcyB3cml0ZS1vbmx5ICovCisJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkgeworCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPnNlbSkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQljYXBfdHJpbShkZXYpOworCQl1cCgmZGV2LT5zZW0pOworCX0KKwkvKiBpbml0aWFsaXNlIHRoZSBoZWFkIGlmIGl0IGlzIE5VTEwgKi8KKwlpZiAoZGV2LT5oZWFkID09IE5VTEwpIHsKKwkJZGV2LT5oZWFkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhcF9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJCUlOSVRfTElTVF9IRUFEKCYoZGV2LT5oZWFkLT5saXN0KSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBjYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQoreworCXN0cnVjdCBjYXBfbm9kZSAqbm9kZV9wdHIsICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCBjYXBfZGV2ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdCByZXR2YWwgPSAtRU5PTUVNOworCXN0cnVjdCBjcmVkICpuZXc7CisJaW50IGxlbiwgdGFyZ2V0X2ludCwgc291cmNlX2ludCwgZmxhZyA9IDA7CisJY2hhciAqdXNlcl9idWYsICp1c2VyX2J1Zl9ydW5uaW5nLCAqc291cmNlX3VzZXIsICp0YXJnZXRfdXNlciwKKwkgICAgKnJhbmRfc3RyLCAqaGFzaF9zdHIsICpyZXN1bHQ7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPnNlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlub2RlX3B0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXBfbm9kZSksIEdGUF9LRVJORUwpOworCXVzZXJfYnVmID0ga3phbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIodXNlcl9idWYsIGJ1ZiwgY291bnQpKSB7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgdGhlIG1pbm9yIG51bWJlciBpcyAwICggL2Rldi9jYXBoYXNoICkgdGhlbiBzaW1wbHkgYWRkIHRoZQorCSAqIGhhc2hlZCBjYXBhYmlsaXR5IHN1cHBsaWVkIGJ5IHRoZSB1c2VyIHRvIHRoZSBsaXN0IG9mIGhhc2hlcworCSAqLworCWlmICgwID09IGltaW5vcihmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ2FwYWJpbGl0eSBiZWluZyB3cml0dGVuIHRvIC9kZXYvY2FwaGFzaCA6IFxuIik7CisJCWhleGR1bXAodXNlcl9idWYsIGNvdW50KTsKKwkJbWVtY3B5KG5vZGVfcHRyLT5kYXRhLCB1c2VyX2J1ZiwgY291bnQpOworCQlsaXN0X2FkZCgmKG5vZGVfcHRyLT5saXN0KSwgJihkZXYtPmhlYWQtPmxpc3QpKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBicmVhayB0aGUgc3VwcGxpZWQgc3RyaW5nIGludG8gdG9rZW5zIHdpdGggQCBhcyB0aGUKKwkJICogZGVsaW1pdGVyIElmIHRoZSBzdHJpbmcgaXMgInVzZXIxQHVzZXIyQHJhbmRvbXN0cmluZyIgd2UKKwkJICogbmVlZCB0byBzcGxpdCBpdCBhbmQgaGFzaCAndXNlcjFAdXNlcjInIHVzaW5nICdyYW5kb21zdHJpbmcnCisJCSAqIGFzIHRoZSBrZXkuCisJCSAqLworCQl1c2VyX2J1Zl9ydW5uaW5nID0ga3N0cmR1cCh1c2VyX2J1ZiwgR0ZQX0tFUk5FTCk7CisJCXNvdXJjZV91c2VyID0gc3Ryc2VwKCZ1c2VyX2J1Zl9ydW5uaW5nLCAiQCIpOworCQl0YXJnZXRfdXNlciA9IHN0cnNlcCgmdXNlcl9idWZfcnVubmluZywgIkAiKTsKKwkJcmFuZF9zdHIgPSBzdHJzZXAoJnVzZXJfYnVmX3J1bm5pbmcsICJAIik7CisKKwkJLyogaGFzaCB0aGUgc3RyaW5nIHVzZXIxQHVzZXIyIHdpdGggcmFuZF9zdHIgYXMgdGhlIGtleSAqLworCQlsZW4gPSBzdHJsZW4oc291cmNlX3VzZXIpICsgc3RybGVuKHRhcmdldF91c2VyKSArIDE7CisJCWhhc2hfc3RyID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCQlzdHJjYXQoaGFzaF9zdHIsIHNvdXJjZV91c2VyKTsKKwkJc3RyY2F0KGhhc2hfc3RyLCAiQCIpOworCQlzdHJjYXQoaGFzaF9zdHIsIHRhcmdldF91c2VyKTsKKworCQlwcmludGsoS0VSTl9BTEVSVCAidGhlIHNvdXJjZSB1c2VyIGlzICVzIFxuIiwgc291cmNlX3VzZXIpOworCQlwcmludGsoS0VSTl9BTEVSVCAidGhlIHRhcmdldCB1c2VyIGlzICVzIFxuIiwgdGFyZ2V0X3VzZXIpOworCisJCXJlc3VsdCA9IGNhcF9oYXNoKGhhc2hfc3RyLCBsZW4sIHJhbmRfc3RyLCBzdHJsZW4ocmFuZF9zdHIpKTsKKwkJaWYgKE5VTEwgPT0gcmVzdWx0KSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJbWVtY3B5KG5vZGVfcHRyLT5kYXRhLCByZXN1bHQsIENBUF9OT0RFX1NJWkUpOworCQkvKiBDaGFuZ2UgdGhlIHByb2Nlc3MncyB1aWQgaWYgdGhlIGhhc2ggaXMgcHJlc2VudCBpbiB0aGUKKwkJICogbGlzdCBvZiBoYXNoZXMKKwkJICovCisJCWxpc3RfZm9yX2VhY2gocG9zLCAmKGNhcF9kZXZpY2VzLT5oZWFkLT5saXN0KSkgeworCQkJLyoKKwkJCSAqIENoYW5nZSB0aGUgdXNlciBpZCBvZiB0aGUgcHJvY2VzcyBpZiB0aGUgaGFzaGVzCisJCQkgKiBtYXRjaAorCQkJICovCisJCQlpZiAoMCA9PQorCQkJICAgIG1lbWNtcChyZXN1bHQsCisJCQkJICAgbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBjYXBfbm9kZSwKKwkJCQkJICAgICAgbGlzdCktPmRhdGEsCisJCQkJICAgQ0FQX05PREVfU0laRSkpIHsKKwkJCQl0YXJnZXRfaW50ID0gKHVuc2lnbmVkIGludCkKKwkJCQkgICAgc2ltcGxlX3N0cnRvbCh0YXJnZXRfdXNlciwgTlVMTCwgMCk7CisJCQkJc291cmNlX2ludCA9ICh1bnNpZ25lZCBpbnQpCisJCQkJICAgIHNpbXBsZV9zdHJ0b2woc291cmNlX3VzZXIsIE5VTEwsIDApOworCQkJCWZsYWcgPSAxOworCisJCQkJLyoKKwkJCQkgKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9jZXNzIHdyaXRpbmcgdG8gY2FwdXNlCisJCQkJICogaXMgYWN0dWFsbHkgb3duZWQgYnkgdGhlIHNvdXJjZSBvd25lcgorCQkJCSAqLworCQkJCWlmIChzb3VyY2VfaW50ICE9IGN1cnJlbnRfdWlkKCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fQUxFUlQKKwkJCQkJICAgICAgICJQcm9jZXNzIGlzIG5vdCBvd25lZCBieSB0aGUgc291cmNlIHVzZXIgb2YgdGhlIGNhcGFiaWxpdHkuXG4iKTsKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCS8qCisJCQkJICogV2hhdCBhbGwgaWQncyBuZWVkIHRvIGJlIGNoYW5nZWQgaGVyZT8gdWlkLAorCQkJCSAqIGV1aWQsIGZzaWQsIHNhdmVkaWRzID8/ICBDdXJyZW50bHkgSSBhbQorCQkJCSAqIGNoYW5naW5nIHRoZSBlZmZlY3RpdmUgdXNlciBpZCBzaW5jZSBtb3N0IG9mCisJCQkJICogdGhlIGF1dGhvcmlzYXRpb24gZGVjaXNpb25zIGFyZSBiYXNlZCBvbiBpdAorCQkJCSAqLworCQkJCW5ldyA9IHByZXBhcmVfY3JlZHMoKTsKKwkJCQlpZiAoIW5ldykgeworCQkJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJbmV3LT51aWQgPSAodWlkX3QpIHRhcmdldF9pbnQ7CisJCQkJbmV3LT5ldWlkID0gKHVpZF90KSB0YXJnZXRfaW50OworCQkJCXJldHZhbCA9IGNvbW1pdF9jcmVkcyhuZXcpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCWdvdG8gb3V0OworCisJCQkJLyoKKwkJCQkgKiBSZW1vdmUgdGhlIGNhcGFiaWxpdHkgZnJvbSB0aGUgbGlzdCBhbmQKKwkJCQkgKiBicmVhaworCQkJCSAqLworCQkJCXRtcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY2FwX25vZGUsIGxpc3QpOworCQkJCWxpc3RfZGVsKHBvcyk7CisJCQkJa2ZyZWUodG1wKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoMCA9PSBmbGFnKSB7CisJCQkvKgorCQkJICogVGhlIGNhcGFiaWxpdHkgaXMgbm90IHByZXNlbnQgaW4gdGhlIGxpc3Qgb2YgdGhlCisJCQkgKiBoYXNoZXMgc3RvcmVkLCBoZW5jZSByZXR1cm4gZmFpbHVyZQorCQkJICovCisJCQlwcmludGsoS0VSTl9BTEVSVAorCQkJICAgICAgICJJbnZhbGlkIGNhcGFiaWxpeSB3cml0dGVuIHRvIC9kZXYvY2FwdXNlIFxuIik7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJKmZfcG9zICs9IGNvdW50OworCXJldHZhbCA9IGNvdW50OworCS8qIHVwZGF0ZSB0aGUgc2l6ZSAqLworCWlmIChkZXYtPnNpemUgPCAqZl9wb3MpCisJCWRldi0+c2l6ZSA9ICpmX3BvczsKKworb3V0OgorCXVwKCZkZXYtPnNlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FwX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLndyaXRlID0gY2FwX3dyaXRlLAorCS5vcGVuID0gY2FwX29wZW4sCisJLnJlbGVhc2UgPSBjYXBfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGNhcF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWludCBpOworCWRldl90IGRldm5vID0gTUtERVYoY2FwX21ham9yLCBjYXBfbWlub3IpOworCWlmIChjYXBfZGV2aWNlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgY2FwX25yX2RldnM7IGkrKykgeworCQkJY2FwX3RyaW0oY2FwX2RldmljZXMgKyBpKTsKKwkJCWNkZXZfZGVsKCZjYXBfZGV2aWNlc1tpXS5jZGV2KTsKKwkJfQorCQlrZnJlZShjYXBfZGV2aWNlcyk7CisJfQorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXZubywgY2FwX25yX2RldnMpOworCit9CisKK3N0YXRpYyB2b2lkIGNhcF9zZXR1cF9jZGV2KHN0cnVjdCBjYXBfZGV2ICpkZXYsIGludCBpbmRleCkKK3sKKwlpbnQgZXJyLCBkZXZubyA9IE1LREVWKGNhcF9tYWpvciwgY2FwX21pbm9yICsgaW5kZXgpOworCWNkZXZfaW5pdCgmZGV2LT5jZGV2LCAmY2FwX2ZvcHMpOworCWRldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCWRldi0+Y2Rldi5vcHMgPSAmY2FwX2ZvcHM7CisJZXJyID0gY2Rldl9hZGQoJmRldi0+Y2RldiwgZGV2bm8sIDEpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX05PVElDRSAiRXJyb3IgJWQgYWRkaW5nIGNhcCVkIiwgZXJyLCBpbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgY2FwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJlc3VsdCwgaTsKKwlkZXZfdCBkZXYgPSAwOworCisJaWYgKGNhcF9tYWpvcikgeworCQlkZXYgPSBNS0RFVihjYXBfbWFqb3IsIGNhcF9taW5vcik7CisJCXJlc3VsdCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBjYXBfbnJfZGV2cywgImNhcCIpOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldiwgY2FwX21pbm9yLCBjYXBfbnJfZGV2cywKKwkJCQkJICAgICAiY2FwIik7CisJCWNhcF9tYWpvciA9IE1BSk9SKGRldik7CisJfQorCisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FwOiBjYW4ndCBnZXQgbWFqb3IgJWRcbiIsCisJCSAgICAgICBjYXBfbWFqb3IpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWNhcF9kZXZpY2VzID0ga3phbGxvYyhjYXBfbnJfZGV2cyAqIHNpemVvZihzdHJ1Y3QgY2FwX2RldiksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcF9kZXZpY2VzKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBJbml0aWFsaXplIGVhY2ggZGV2aWNlLiAqLworCWZvciAoaSA9IDA7IGkgPCBjYXBfbnJfZGV2czsgaSsrKSB7CisJCWNhcF9kZXZpY2VzW2ldLm5vZGVfc2l6ZSA9IGNhcF9ub2RlX3NpemU7CisJCWluaXRfTVVURVgoJmNhcF9kZXZpY2VzW2ldLnNlbSk7CisJCWNhcF9zZXR1cF9jZGV2KCZjYXBfZGV2aWNlc1tpXSwgaSk7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJY2FwX2NsZWFudXBfbW9kdWxlKCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworbW9kdWxlX2luaXQoY2FwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGNhcF9jbGVhbnVwX21vZHVsZSk7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZwppbmRleCBjNGIzMGYyLi4zYWJlN2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZwpAQCAtMTEwLDcgKzExMCw3IEBACiAJLS0taGVscC0tLQogCSAgTW9zdCBMQ0RzIHVzZSBhIHN0YW5kYXJkIGNvbnRyb2xsZXIgd2hpY2ggc3VwcG9ydHMgaGFyZHdhcmUgbGluZXMgb2YgNDAKIAkgIGNoYXJhY3RlcnMsIGFsdGhvdWdoIHNvbWV0aW1lcyBvbmx5IDE2LCAyMCBvciAyNCBvZiB0aGVtIGFyZSByZWFsbHkgd2lyZWQKLQkgIHRvIHRoZSB0ZXJtaW5hbC4gVGhpcyByZXN1bHRzIGluIHNvbWUgbm9uLXZpc2libGUgYnV0IGFkcmVzc2FibGUgY2hhcmFjdGVycywKKwkgIHRvIHRoZSB0ZXJtaW5hbC4gVGhpcyByZXN1bHRzIGluIHNvbWUgbm9uLXZpc2libGUgYnV0IGFkZHJlc3NhYmxlIGNoYXJhY3RlcnMsCiAJICBhbmQgaXMgdGhlIGNhc2UgZm9yIG1vc3QgcGFyYWxsZWwgTENEcy4gT3RoZXIgTENEcywgYW5kIHNvbWUgc2VyaWFsIG9uZXMsCiAJICBob3dldmVyLCB1c2UgdGhlIHNhbWUgbGluZSB3aWR0aCBpbnRlcm5hbGx5IGFzIHdoYXQgaXMgdmlzaWJsZS4gVGhlIEtTMDA3NAogCSAgZm9yIGV4YW1wbGUsIHVzZXMgMTYgY2hhcmFjdGVycyBwZXIgbGluZSBmb3IgMTYgdmlzaWJsZSBjaGFyYWN0ZXJzIHBlciBsaW5lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYzY1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL0tjb25maWcKQEAgLTAsMCArMSw1IEBACitjb25maWcgSURFX1BISVNPTgorCXRyaXN0YXRlICJQQ0lFIEFUQSBQUzUwMDAgSURFIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgQVRBICYmIEFUQV9TRkYKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIFBTNTAwMCBJREUgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY0MmEyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX0lERV9QSElTT04pCSs9IHBoaXNvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL3BoaXNvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzBlYmNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYwpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNgkJUmVkIEhhdCA8ZXZhbl9rb0BwaGlzb24uY29tPgorICoKKyAqICBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCisgKiAgW01vZGlmeSBIaXN0b3J5XQorICogICAjMDAwMSwgRXZhbiwgMjAwOC4xMC4yMiwgVjAuMDAsIE5ldyByZWxlYXNlLgorICogICAjMDAwMiwgRXZhbiwgMjAwOC4xMS4wMSwgVjAuOTAsIFRlc3QgV29yayBJbiBVYnVudHUgTGludXggOC4wNC4KKyAqICAgIzAwMDMsIEV2YW4sIDIwMDguMDEuMDgsIFYwLjkxLCBDaGFuZ2UgTmFtZSAiUENJRS1TU0QiIHRvICJFLUJPWCIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CisjaW5jbHVkZSA8bGludXgvYXRhLmg+CisKKyNkZWZpbmUgUEhJU09OX0RFQlVHCisKKyNkZWZpbmUgRFJWX05BTUUJCSJwaGlzb25fZS1ib3giCS8qICMwMDAzICovCisjZGVmaW5lIERSVl9WRVJTSU9OIAkJIjAuOTEiCQkvKiAjMDAwMyAqLworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUEhJU09OCTB4MTk4NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BTNTAwMAkweDUwMDAKKworc3RhdGljIGludCBwaGlzb25fcHJlX3Jlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKKworCWFwLT5jYmwgPSBBVEFfQ0JMX05PTkU7CisJcmV0ID0gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CisJZGV2X2RiZyhhcC0+ZGV2LCAicGhpc29uX3ByZV9yZXNldCgpLCByZXQgPSAleFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwaGlzb25fc2h0ID0geworCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAorfTsKKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBoaXNvbl9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLnByZXJlc2V0CQk9IHBoaXNvbl9wcmVfcmVzZXQsCit9OworCitzdGF0aWMgaW50IHBoaXNvbl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKKwkJLmZsYWdzCQk9IEFUQV9GTEFHX05PX0FUQVBJLAorCisJCS5waW9fbWFzawk9IDB4MWYsCisJCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCisKKwkJLnBvcnRfb3BzCT0gJnBoaXNvbl9vcHMsCisJfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CisKKwlyZXQgPSBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZwaGlzb25fc2h0LCBOVUxMKTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInBoaXNvbl9pbml0X29uZSgpLCByZXQgPSAleFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwaGlzb25fcGNpX3RibFtdID0geworCXsgUENJX1ZFTkRPUl9JRF9QSElTT04sIFBDSV9ERVZJQ0VfSURfUFM1MDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCSAgUENJX0NMQVNTX1NUT1JBR0VfSURFIDw8IDgsIDB4ZmZmZjAwLCAwIH0sCisJeyAwLCB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwaGlzb25fcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwaGlzb25fcGNpX2RyaXZlciA9IHsKKwkubmFtZQkJPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUJPSBwaGlzb25fcGNpX3RibCwKKwkucHJvYmUJCT0gcGhpc29uX2luaXRfb25lLAorCS5yZW1vdmUJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAorI2lmZGVmIENPTkZJR19QTQkvKiBoYXZlbid0IHRlc3RlZCBpdC4gKi8KKwkuc3VzcGVuZAk9IGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdGFfcGNpX2RldmljZV9yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgcGhpc29uX2lkZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBoaXNvbl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgcGhpc29uX2lkZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwaGlzb25fcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBoaXNvbl9pZGVfaW5pdCk7Cittb2R1bGVfZXhpdChwaGlzb25faWRlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJFdmFuIEtvIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBDSUUgZHJpdmVyIG1vZHVsZSBmb3IgUEhJU09OIFBTNTAwMCBFLUJPWCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE1OGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWcKQEAgLTAsMCArMSwyOCBAQAorY29uZmlnIFBPSE1FTEZTCisJdHJpc3RhdGUgIlBPSE1FTEZTIGZpbGVzeXN0ZW0gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVAorCXNlbGVjdCBDT05ORUNUT1IKKwlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwlzZWxlY3QgQ1JZUFRPX0hNQUMKKwloZWxwCisJICBQT0hNRUxGUyBzdGFuZHMgZm9yIFBhcmFsbGVsIE9wdGltaXplZCBIb3N0IE1lc3NhZ2UgRXhjaGFuZ2UgTGF5ZXJlZAorCSAgRmlsZSBTeXN0ZW0uICBUaGlzIGlzIGEgbmV0d29yayBmaWxlc3lzdGVtIHdoaWNoIHN1cHBvcnRzIGNvaGVyZW50CisJICBjYWNoaW5nIG9mIGRhdGEgYW5kIG1ldGFkYXRhIG9uIGNsaWVudHMuCisKK2NvbmZpZyBQT0hNRUxGU19ERUJVRworCWJvb2wgIlBPSE1FTEZTIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIFBPSE1FTEZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgVHVybnMgb24gZXhjZXNzaXZlIFBPSE1FTEZTIGRlYnVnZ2luZyBmYWNpbGl0aWVzLgorCSAgWW91IHVzdWFsbHkgZG8gbm90IHdhbnQgdG8gc2xvdyB0aGluZ3MgZG93biBub3RpY2VhYmx5IGFuZCBnZXQgcmVhbGx5CisJICBsb3RzIG9mIGtlcm5lbCBtZXNzYWdlcyBpbiBzeXNsb2cuCisKK2NvbmZpZyBQT0hNRUxGU19DUllQVE8KKwlib29sICJQT0hNRUxGUyBjcnlwdG8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBPSE1FTEZTCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHRvIGVuY3J5cHQgYW5kL29yIHByb3RlY3Qgd2l0aCBzdHJvbmcKKwkgIGNyeXB0b2dyYXBoaWMgaGFzaCBhbGwgZGF0YWZsb3cgYmV0d2VlbiBzZXJ2ZXIgYW5kIGNsaWVudHMuCisJICBFYWNoIGNvbmZpZyBncm91cCBjYW4gaGF2ZSBpdHMgb3duIGtleXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2NTYxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai0kKENPTkZJR19QT0hNRUxGUykJKz0gcG9obWVsZnMubworCitwb2htZWxmcy15IDo9IGlub2RlLm8gY29uZmlnLm8gZGlyLm8gbmV0Lm8gcGF0aF9lbnRyeS5vIHRyYW5zLm8gY3J5cHRvLm8gbG9jay5vIG1jYWNoZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvY29uZmlnLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2N2RhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jb25maWcuYwpAQCAtMCwwICsxLDQ3OCBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCisvKgorICogR2xvYmFsIGNvbmZpZ3VyYXRpb24gbGlzdC4KKyAqIEVhY2ggY2xpZW50IGNhbiBiZSBhc2tlZCB0byBnZXQgb25lIG9mIHRoZW0uCisgKgorICogQWxsb3dzIHRvIHByb3ZpZGUgcmVtb3RlIHNlcnZlciBhZGRyZXNzIChpcHY0L3Y2L3doYXRldmVyKSwgcG9ydAorICogYW5kIHNvIG9uIHZpYSBrZXJuZWwgY29ubmVjdG9yLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY2JfaWQgcG9obWVsZnNfY25faWQgPSB7LmlkeCA9IFBPSE1FTEZTX0NOX0lEWCwgLnZhbCA9IFBPSE1FTEZTX0NOX1ZBTH07CitzdGF0aWMgTElTVF9IRUFEKHBvaG1lbGZzX2NvbmZpZ19saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgocG9obWVsZnNfY29uZmlnX2xvY2spOworCitzdGF0aWMgaW5saW5lIGludCBwb2htZWxmc19jb25maWdfZXFsKHN0cnVjdCBwb2htZWxmc19jdGwgKnNjLCBzdHJ1Y3QgcG9obWVsZnNfY3RsICpjdGwpCit7CisJaWYgKHNjLT5pZHggPT0gY3RsLT5pZHggJiYgc2MtPnR5cGUgPT0gY3RsLT50eXBlICYmCisJCQlzYy0+cHJvdG8gPT0gY3RsLT5wcm90byAmJgorCQkJc2MtPmFkZHJsZW4gPT0gY3RsLT5hZGRybGVuICYmCisJCQkhbWVtY21wKCZzYy0+YWRkciwgJmN0bC0+YWRkciwgY3RsLT5hZGRybGVuKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKnBvaG1lbGZzX2ZpbmRfY29uZmlnX2dyb3VwKHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZywgKmdyb3VwID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZywgJnBvaG1lbGZzX2NvbmZpZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoZy0+aWR4ID09IGlkeCkgeworCQkJZ3JvdXAgPSBnOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZ3JvdXA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpwb2htZWxmc19maW5kX2NyZWF0ZV9jb25maWdfZ3JvdXAodW5zaWduZWQgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnOworCisJZyA9IHBvaG1lbGZzX2ZpbmRfY29uZmlnX2dyb3VwKGlkeCk7CisJaWYgKGcpCisJCXJldHVybiBnOworCisJZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWcpCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJmctPmNvbmZpZ19saXN0KTsKKwlnLT5pZHggPSBpZHg7CisJZy0+bnVtX2VudHJ5ID0gMDsKKworCWxpc3RfYWRkX3RhaWwoJmctPmdyb3VwX2VudHJ5LCAmcG9obWVsZnNfY29uZmlnX2xpc3QpOworCisJcmV0dXJuIGc7Cit9CisKK2ludCBwb2htZWxmc19jb3B5X2NvbmZpZyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnOworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmMsICpkc3Q7CisJaW50IGVyciA9IC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisKKwlnID0gcG9obWVsZnNfZmluZF9jb25maWdfZ3JvdXAocHNiLT5pZHgpOworCWlmICghZykKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyoKKwkgKiBSdW4gb3ZlciBhbGwgZW50cmllcyBpbiBnaXZlbiBjb25maWcgZ3JvdXAgYW5kIHRyeSB0byBjcmF0ZSBhbmQKKwkgKiBpbml0aWFsaXplIHRob3NlLCB3aGljaCBkbyBub3QgZXhpc3QgaW4gc3VwZXJibG9jayBsaXN0LgorCSAqIFNraXAgYWxsIGV4aXN0aW5nIGVudHJpZXMuCisJICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZnLT5jb25maWdfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCWVyciA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHN0LCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJCWlmIChwb2htZWxmc19jb25maWdfZXFsKCZkc3QtPnN0YXRlLmN0bCwgJmMtPnN0YXRlLmN0bCkpIHsKKwkJCQllcnIgPSAtRUVYSVNUOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGVycikKKwkJCWNvbnRpbnVlOworCisJCWRzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jb25maWcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkc3QpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCisJCW1lbWNweSgmZHN0LT5zdGF0ZS5jdGwsICZjLT5zdGF0ZS5jdGwsIHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY3RsKSk7CisKKwkJbGlzdF9hZGRfdGFpbCgmZHN0LT5jb25maWdfZW50cnksICZwc2ItPnN0YXRlX2xpc3QpOworCisJCWVyciA9IHBvaG1lbGZzX3N0YXRlX2luaXRfb25lKHBzYiwgZHN0KTsKKwkJaWYgKGVycikgeworCQkJbGlzdF9kZWwoJmRzdC0+Y29uZmlnX2VudHJ5KTsKKwkJCWtmcmVlKGRzdCk7CisJCX0KKworCQllcnIgPSAwOworCX0KKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19jb3B5X2NyeXB0byhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnOworCWludCBlcnIgPSAtRU5PRU5UOworCisJbXV0ZXhfbG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCWcgPSBwb2htZWxmc19maW5kX2NvbmZpZ19ncm91cChwc2ItPmlkeCk7CisJaWYgKCFnKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWlmIChnLT5oYXNoX3N0cmluZykgeworCQllcnIgPSAtRU5PTUVNOworCQlwc2ItPmhhc2hfc3RyaW5nID0ga3N0cmR1cChnLT5oYXNoX3N0cmluZywgR0ZQX0tFUk5FTCk7CisJCWlmICghcHNiLT5oYXNoX3N0cmluZykKKwkJCWdvdG8gZXJyX291dF9leGl0OworCQlwc2ItPmhhc2hfc3RybGVuID0gZy0+aGFzaF9zdHJsZW47CisJfQorCisJaWYgKGctPmNpcGhlcl9zdHJpbmcpIHsKKwkJcHNiLT5jaXBoZXJfc3RyaW5nID0ga3N0cmR1cChnLT5jaXBoZXJfc3RyaW5nLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwc2ItPmNpcGhlcl9zdHJpbmcpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9oYXNoX3N0cmluZzsKKwkJcHNiLT5jaXBoZXJfc3RybGVuID0gZy0+Y2lwaGVyX3N0cmxlbjsKKwl9CisKKwlpZiAoZy0+aGFzaF9rZXlzaXplKSB7CisJCXBzYi0+aGFzaF9rZXkgPSBrbWFsbG9jKGctPmhhc2hfa2V5c2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHNiLT5oYXNoX2tleSkKKwkJCWdvdG8gZXJyX291dF9mcmVlX2NpcGhlcl9zdHJpbmc7CisJCW1lbWNweShwc2ItPmhhc2hfa2V5LCBnLT5oYXNoX2tleSwgZy0+aGFzaF9rZXlzaXplKTsKKwkJcHNiLT5oYXNoX2tleXNpemUgPSBnLT5oYXNoX2tleXNpemU7CisJfQorCisJaWYgKGctPmNpcGhlcl9rZXlzaXplKSB7CisJCXBzYi0+Y2lwaGVyX2tleSA9IGttYWxsb2MoZy0+Y2lwaGVyX2tleXNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBzYi0+Y2lwaGVyX2tleSkKKwkJCWdvdG8gZXJyX291dF9mcmVlX2hhc2g7CisJCW1lbWNweShwc2ItPmNpcGhlcl9rZXksIGctPmNpcGhlcl9rZXksIGctPmNpcGhlcl9rZXlzaXplKTsKKwkJcHNiLT5jaXBoZXJfa2V5c2l6ZSA9IGctPmNpcGhlcl9rZXlzaXplOworCX0KKworCW11dGV4X3VubG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV9oYXNoOgorCWtmcmVlKHBzYi0+aGFzaF9rZXkpOworZXJyX291dF9mcmVlX2NpcGhlcl9zdHJpbmc6CisJa2ZyZWUocHNiLT5jaXBoZXJfc3RyaW5nKTsKK2Vycl9vdXRfZnJlZV9oYXNoX3N0cmluZzoKKwlrZnJlZShwc2ItPmhhc2hfc3RyaW5nKTsKK2Vycl9vdXRfZXhpdDoKKwltdXRleF91bmxvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3NlbmRfcmVwbHkoaW50IGVyciwgaW50IG1zZ19udW0sIGludCBhY3Rpb24sIHN0cnVjdCBjbl9tc2cgKm1zZywgc3RydWN0IHBvaG1lbGZzX2N0bCAqY3RsKQoreworCXN0cnVjdCBwb2htZWxmc19jbl9hY2sgKmFjazsKKworCWFjayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jbl9hY2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoYWNrLCAwLCBzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2NuX2FjaykpOworCW1lbWNweSgmYWNrLT5tc2csIG1zZywgc2l6ZW9mKHN0cnVjdCBjbl9tc2cpKTsKKworCWlmIChhY3Rpb24gPT0gUE9ITUVMRlNfQ1RMSU5GT19BQ0spCisJCW1lbWNweSgmYWNrLT5jdGwsIGN0bCwgc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jdGwpKTsKKworCWFjay0+bXNnLmxlbiA9IHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY25fYWNrKSAtIHNpemVvZihzdHJ1Y3QgY25fbXNnKTsKKwlhY2stPm1zZy5hY2sgPSBtc2ctPmFjayArIDE7CisJYWNrLT5lcnJvciA9IGVycjsKKwlhY2stPm1zZ19udW0gPSBtc2dfbnVtOworCisJY25fbmV0bGlua19zZW5kKCZhY2stPm1zZywgMCwgR0ZQX0tFUk5FTCk7CisJa2ZyZWUoYWNrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jbl9kaXNwKHN0cnVjdCBjbl9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnOworCXN0cnVjdCBwb2htZWxmc19jdGwgKmN0bCA9IChzdHJ1Y3QgcG9obWVsZnNfY3RsICopbXNnLT5kYXRhOworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmMsICp0bXA7CisJaW50IGVyciA9IDAsIGkgPSAxOworCisJaWYgKG1zZy0+bGVuICE9IHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY3RsKSkKKwkJcmV0dXJuIC1FQkFETVNHOworCisJbXV0ZXhfbG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCisJZyA9IHBvaG1lbGZzX2ZpbmRfY29uZmlnX2dyb3VwKGN0bC0+aWR4KTsKKwlpZiAoIWcpIHsKKwkJcG9obWVsZnNfc2VuZF9yZXBseShlcnIsIDAsIFBPSE1FTEZTX05PSU5GT19BQ0ssIG1zZywgTlVMTCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYywgdG1wLCAmZy0+Y29uZmlnX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlzdHJ1Y3QgcG9obWVsZnNfY3RsICpzYyA9ICZjLT5zdGF0ZS5jdGw7CisJCWlmIChwb2htZWxmc19zZW5kX3JlcGx5KGVyciwgZy0+bnVtX2VudHJ5IC0gaSwgUE9ITUVMRlNfQ1RMSU5GT19BQ0ssIG1zZywgc2MpKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJCWkgKz0gMTsKKwl9CisKK291dF91bmxvY2s6CisgICAgICAgIG11dGV4X3VubG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworICAgICAgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NuX2N0bChzdHJ1Y3QgY25fbXNnICptc2csIGludCBhY3Rpb24pCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZzsKKwlzdHJ1Y3QgcG9obWVsZnNfY3RsICpjdGwgPSAoc3RydWN0IHBvaG1lbGZzX2N0bCAqKW1zZy0+ZGF0YTsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjLCAqdG1wOworCWludCBlcnIgPSAwOworCisJaWYgKG1zZy0+bGVuICE9IHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY3RsKSkKKwkJcmV0dXJuIC1FQkFETVNHOworCisJbXV0ZXhfbG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCisJZyA9IHBvaG1lbGZzX2ZpbmRfY3JlYXRlX2NvbmZpZ19ncm91cChjdGwtPmlkeCk7CisJaWYgKCFnKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYywgdG1wLCAmZy0+Y29uZmlnX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlzdHJ1Y3QgcG9obWVsZnNfY3RsICpzYyA9ICZjLT5zdGF0ZS5jdGw7CisKKwkJaWYgKHBvaG1lbGZzX2NvbmZpZ19lcWwoc2MsIGN0bCkpIHsKKwkJCWlmIChhY3Rpb24gPT0gUE9ITUVMRlNfRkxBR1NfQUREKSB7CisJCQkJZXJyID0gLUVFWElTVDsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBQT0hNRUxGU19GTEFHU19ERUwpIHsKKwkJCQlsaXN0X2RlbCgmYy0+Y29uZmlnX2VudHJ5KTsKKwkJCQlnLT5udW1fZW50cnktLTsKKwkJCQlrZnJlZShjKTsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9IGVsc2UgeworCQkJCWVyciA9IC1FRVhJU1Q7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCQl9CisJfQorCWlmIChhY3Rpb24gPT0gUE9ITUVMRlNfRkxBR1NfREVMKSB7CisJCWVyciA9IC1FQkFETVNHOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwltZW1jcHkoJmMtPnN0YXRlLmN0bCwgY3RsLCBzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2N0bCkpOworCWctPm51bV9lbnRyeSsrOworCWxpc3RfYWRkX3RhaWwoJmMtPmNvbmZpZ19lbnRyeSwgJmctPmNvbmZpZ19saXN0KTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKwlpZiAocG9obWVsZnNfc2VuZF9yZXBseShlcnIsIDAsIFBPSE1FTEZTX05PSU5GT19BQ0ssIG1zZywgTlVMTCkpCisJCWVyciA9IC1FTk9NRU07CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b19oYXNoX2luaXQoc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZywgc3RydWN0IHBvaG1lbGZzX2NyeXB0byAqYykKK3sKKwljaGFyICphbGdvID0gKGNoYXIgKiljLT5kYXRhOworCXU4ICprZXkgPSAodTggKikoYWxnbyArIGMtPnN0cmxlbik7CisKKwlpZiAoZy0+aGFzaF9zdHJpbmcpCisJCXJldHVybiAtRUVYSVNUOworCisJZy0+aGFzaF9zdHJpbmcgPSBrc3RyZHVwKGFsZ28sIEdGUF9LRVJORUwpOworCWlmICghZy0+aGFzaF9zdHJpbmcpCisJCXJldHVybiAtRU5PTUVNOworCWctPmhhc2hfc3RybGVuID0gYy0+c3RybGVuOworCWctPmhhc2hfa2V5c2l6ZSA9IGMtPmtleXNpemU7CisKKwlnLT5oYXNoX2tleSA9IGttYWxsb2MoYy0+a2V5c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnLT5oYXNoX2tleSkgeworCQlrZnJlZShnLT5oYXNoX3N0cmluZyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweShnLT5oYXNoX2tleSwga2V5LCBjLT5rZXlzaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b19jaXBoZXJfaW5pdChzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnLCBzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvICpjKQoreworCWNoYXIgKmFsZ28gPSAoY2hhciAqKWMtPmRhdGE7CisJdTggKmtleSA9ICh1OCAqKShhbGdvICsgYy0+c3RybGVuKTsKKworCWlmIChnLT5jaXBoZXJfc3RyaW5nKQorCQlyZXR1cm4gLUVFWElTVDsKKworCWctPmNpcGhlcl9zdHJpbmcgPSBrc3RyZHVwKGFsZ28sIEdGUF9LRVJORUwpOworCWlmICghZy0+Y2lwaGVyX3N0cmluZykKKwkJcmV0dXJuIC1FTk9NRU07CisJZy0+Y2lwaGVyX3N0cmxlbiA9IGMtPnN0cmxlbjsKKwlnLT5jaXBoZXJfa2V5c2l6ZSA9IGMtPmtleXNpemU7CisKKwlnLT5jaXBoZXJfa2V5ID0ga21hbGxvYyhjLT5rZXlzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWctPmNpcGhlcl9rZXkpIHsKKwkJa2ZyZWUoZy0+Y2lwaGVyX3N0cmluZyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweShnLT5jaXBoZXJfa2V5LCBrZXksIGMtPmtleXNpemUpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBwb2htZWxmc19jbl9jcnlwdG8oc3RydWN0IGNuX21zZyAqbXNnKQoreworCXN0cnVjdCBwb2htZWxmc19jcnlwdG8gKmNyeXB0byA9IChzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvICopbXNnLT5kYXRhOworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmc7CisJaW50IGVyciA9IDA7CisKKwlkcHJpbnRrKCIlczogaWR4OiAldSwgc3RybGVuOiAldSwgdHlwZTogJXUsIGtleXNpemU6ICV1LCBhbGdvOiAlcy5cbiIsCisJCQlfX2Z1bmNfXywgY3J5cHRvLT5pZHgsIGNyeXB0by0+c3RybGVuLCBjcnlwdG8tPnR5cGUsCisJCQljcnlwdG8tPmtleXNpemUsIChjaGFyICopY3J5cHRvLT5kYXRhKTsKKworCW11dGV4X2xvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKwlnID0gcG9obWVsZnNfZmluZF9jcmVhdGVfY29uZmlnX2dyb3VwKGNyeXB0by0+aWR4KTsKKwlpZiAoIWcpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXN3aXRjaCAoY3J5cHRvLT50eXBlKSB7CisJCWNhc2UgUE9ITUVMRlNfQ1JZUFRPX0hBU0g6CisJCQllcnIgPSBwb2htZWxmc19jcnlwdG9faGFzaF9pbml0KGcsIGNyeXB0byk7CisJCQlicmVhazsKKwkJY2FzZSBQT0hNRUxGU19DUllQVE9fQ0lQSEVSOgorCQkJZXJyID0gcG9obWVsZnNfY3J5cHRvX2NpcGhlcl9pbml0KGcsIGNyeXB0byk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FTk9UU1VQUDsKKwkJCWJyZWFrOworCX0KKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKwlpZiAocG9obWVsZnNfc2VuZF9yZXBseShlcnIsIDAsIFBPSE1FTEZTX05PSU5GT19BQ0ssIG1zZywgTlVMTCkpCisJCWVyciA9IC1FTk9NRU07CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19jbl9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbl9tc2cgKm1zZyA9IGRhdGE7CisJaW50IGVycjsKKworCXN3aXRjaCAobXNnLT5mbGFncykgeworCQljYXNlIFBPSE1FTEZTX0ZMQUdTX0FERDoKKwkJCWVyciA9IHBvaG1lbGZzX2NuX2N0bChtc2csIFBPSE1FTEZTX0ZMQUdTX0FERCk7CisJCQlicmVhazsKKwkJY2FzZSBQT0hNRUxGU19GTEFHU19ERUw6CisJCQllcnIgPSBwb2htZWxmc19jbl9jdGwobXNnLCBQT0hNRUxGU19GTEFHU19ERUwpOworCQkJYnJlYWs7CisJCWNhc2UgUE9ITUVMRlNfRkxBR1NfU0hPVzoKKwkJCWVyciA9IHBvaG1lbGZzX2NuX2Rpc3AobXNnKTsKKwkJCWJyZWFrOworCQljYXNlIFBPSE1FTEZTX0ZMQUdTX0NSWVBUTzoKKwkJCWVyciA9IHBvaG1lbGZzX2NuX2NyeXB0byhtc2cpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRU5PU1lTOworCQkJYnJlYWs7CisJfQorfQorCitpbnQgcG9obWVsZnNfY29uZmlnX2NoZWNrKHN0cnVjdCBwb2htZWxmc19jb25maWcgKmNvbmZpZywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3RsICpjdGwgPSAmY29uZmlnLT5zdGF0ZS5jdGw7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqdG1wOworCWludCBlcnIgPSAtRU5PRU5UOworCXN0cnVjdCBwb2htZWxmc19jdGwgKnNjOworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmc7CisKKwltdXRleF9sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisKKwlnID0gcG9obWVsZnNfZmluZF9jb25maWdfZ3JvdXAoY3RsLT5pZHgpOworCWlmIChnKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmZy0+Y29uZmlnX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQkJc2MgPSAmdG1wLT5zdGF0ZS5jdGw7CisKKwkJCWlmIChwb2htZWxmc19jb25maWdfZXFsKHNjLCBjdGwpKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKworaW50IF9faW5pdCBwb2htZWxmc19jb25maWdfaW5pdCh2b2lkKQoreworCXJldHVybiBjbl9hZGRfY2FsbGJhY2soJnBvaG1lbGZzX2NuX2lkLCAicG9obWVsZnMiLCBwb2htZWxmc19jbl9jYWxsYmFjayk7Cit9CisKK3ZvaWQgcG9obWVsZnNfY29uZmlnX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjLCAqdG1wOworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmcsICpndG1wOworCisJY25fZGVsX2NhbGxiYWNrKCZwb2htZWxmc19jbl9pZCk7CisKKwltdXRleF9sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGcsIGd0bXAsICZwb2htZWxmc19jb25maWdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGMsIHRtcCwgJmctPmNvbmZpZ19saXN0LCBjb25maWdfZW50cnkpIHsKKwkJCWxpc3RfZGVsKCZjLT5jb25maWdfZW50cnkpOworCQkJa2ZyZWUoYyk7CisJCX0KKworCQlsaXN0X2RlbCgmZy0+Z3JvdXBfZW50cnkpOworCisJCWlmIChnLT5oYXNoX3N0cmluZykKKwkJCWtmcmVlKGctPmhhc2hfc3RyaW5nKTsKKworCQlpZiAoZy0+Y2lwaGVyX3N0cmluZykKKwkJCWtmcmVlKGctPmNpcGhlcl9zdHJpbmcpOworCisJCWtmcmVlKGcpOworCX0KKwltdXRleF91bmxvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jcnlwdG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jcnlwdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ3NjVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NyeXB0by5jCkBAIC0wLDAgKzEsODgwIEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworc3RhdGljIHN0cnVjdCBjcnlwdG9faGFzaCAqcG9obWVsZnNfaW5pdF9oYXNoKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCWludCBlcnI7CisJc3RydWN0IGNyeXB0b19oYXNoICpoYXNoOworCisJaGFzaCA9IGNyeXB0b19hbGxvY19oYXNoKHBzYi0+aGFzaF9zdHJpbmcsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoaGFzaCkpIHsKKwkJZXJyID0gUFRSX0VSUihoYXNoKTsKKwkJZHByaW50aygiJXM6IGlkeDogJXU6IGZhaWxlZCB0byBhbGxvY2F0ZSBoYXNoICclcycsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBwc2ItPmlkeCwgcHNiLT5oYXNoX3N0cmluZywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJcHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoaGFzaCk7CisKKwlpZiAoIXBzYi0+aGFzaF9rZXlzaXplKQorCQlyZXR1cm4gaGFzaDsKKworCWVyciA9IGNyeXB0b19oYXNoX3NldGtleShoYXNoLCBwc2ItPmhhc2hfa2V5LCBwc2ItPmhhc2hfa2V5c2l6ZSk7CisJaWYgKGVycikgeworCQlkcHJpbnRrKCIlczogaWR4OiAldTogZmFpbGVkIHRvIHNldCBrZXkgZm9yIGhhc2ggJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHBzYi0+aWR4LCBwc2ItPmhhc2hfc3RyaW5nLCBlcnIpOworCQlnb3RvIGVycl9vdXRfZnJlZTsKKwl9CisKKwlyZXR1cm4gaGFzaDsKKworZXJyX291dF9mcmVlOgorCWNyeXB0b19mcmVlX2hhc2goaGFzaCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqcG9obWVsZnNfaW5pdF9jaXBoZXIoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXI7CisKKwlpZiAoIXBzYi0+Y2lwaGVyX2tleXNpemUpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJY2lwaGVyID0gY3J5cHRvX2FsbG9jX2FibGtjaXBoZXIocHNiLT5jaXBoZXJfc3RyaW5nLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGNpcGhlcikpIHsKKwkJZXJyID0gUFRSX0VSUihjaXBoZXIpOworCQlkcHJpbnRrKCIlczogaWR4OiAldTogZmFpbGVkIHRvIGFsbG9jYXRlIGNpcGhlciAnJXMnLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgcHNiLT5pZHgsIHBzYi0+Y2lwaGVyX3N0cmluZywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJY3J5cHRvX2FibGtjaXBoZXJfY2xlYXJfZmxhZ3MoY2lwaGVyLCB+MCk7CisKKwllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkoY2lwaGVyLCBwc2ItPmNpcGhlcl9rZXksIHBzYi0+Y2lwaGVyX2tleXNpemUpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygiJXM6IGlkeDogJXU6IGZhaWxlZCB0byBzZXQga2V5IGZvciBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHBzYi0+aWR4LCBwc2ItPmNpcGhlcl9zdHJpbmcsIGVycik7CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCXJldHVybiBjaXBoZXI7CisKK2Vycl9vdXRfZnJlZToKKwljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGNpcGhlcik7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworaW50IHBvaG1lbGZzX2NyeXB0b19lbmdpbmVfaW5pdChzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJaW50IGVycjsKKworCWUtPnBhZ2VfbnVtID0gMDsKKworCWUtPnNpemUgPSBQQUdFX1NJWkU7CisJZS0+ZGF0YSA9IGttYWxsb2MoZS0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlLT5kYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlmIChwc2ItPmhhc2hfc3RyaW5nKSB7CisJCWUtPmhhc2ggPSBwb2htZWxmc19pbml0X2hhc2gocHNiKTsKKwkJaWYgKElTX0VSUihlLT5oYXNoKSkgeworCQkJZXJyID0gUFRSX0VSUihlLT5oYXNoKTsKKwkJCWUtPmhhc2ggPSBOVUxMOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwl9CisKKwlpZiAocHNiLT5jaXBoZXJfc3RyaW5nKSB7CisJCWUtPmNpcGhlciA9IHBvaG1lbGZzX2luaXRfY2lwaGVyKHBzYik7CisJCWlmIChJU19FUlIoZS0+Y2lwaGVyKSkgeworCQkJZXJyID0gUFRSX0VSUihlLT5jaXBoZXIpOworCQkJZS0+Y2lwaGVyID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dF9mcmVlX2hhc2g7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlX2hhc2g6CisJY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKK2Vycl9vdXRfZnJlZToKKwlrZnJlZShlLT5kYXRhKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHBvaG1lbGZzX2NyeXB0b19lbmdpbmVfZXhpdChzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSkKK3sKKwlpZiAoZS0+aGFzaCkKKwkJY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKKwlpZiAoZS0+Y2lwaGVyKQorCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGUtPmNpcGhlcik7CisJa2ZyZWUoZS0+ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2NyeXB0b19jb21wbGV0ZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2NvbXBsZXRpb24gKmMgPSByZXEtPmRhdGE7CisKKwlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuOworCisJZHByaW50aygiJXM6IHJlcTogJXAsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgcmVxLCBlcnIpOworCWMtPmVycm9yID0gZXJyOworCWNvbXBsZXRlKCZjLT5jb21wbGV0ZSk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3Moc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMsCisJCXZvaWQgKml2LCBpbnQgZW5jLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19jb21wbGV0aW9uIGNvbXBsZXRlOworCWludCBlcnI7CisKKwlpbml0X2NvbXBsZXRpb24oJmNvbXBsZXRlLmNvbXBsZXRlKTsKKwljb21wbGV0ZS5lcnJvciA9IC1FSU5QUk9HUkVTUzsKKworCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRywKKwkJCQkJcG9obWVsZnNfY3J5cHRvX2NvbXBsZXRlLCAmY29tcGxldGUpOworCisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnX3NyYywgc2dfZHN0LCBzZ19zcmMtPmxlbmd0aCwgaXYpOworCisJaWYgKGVuYykKKwkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdChyZXEpOworCWVsc2UKKwkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChyZXEpOworCisJc3dpdGNoIChlcnIpIHsKKwkJY2FzZSAtRUlOUFJPR1JFU1M6CisJCWNhc2UgLUVCVVNZOgorCQkJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmNvbXBsZXRlLmNvbXBsZXRlLAorCQkJCQl0aW1lb3V0KTsKKwkJCWlmICghZXJyKQorCQkJCWVyciA9IC1FVElNRURPVVQ7CisJCQllbHNlCisJCQkJZXJyID0gY29tcGxldGUuZXJyb3I7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19jcnlwdG9fcHJvY2Vzc19pbnB1dF9kYXRhKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLCB1NjQgY21kX2l2LAorCQl2b2lkICpkYXRhLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlpZiAoIWUtPmNpcGhlciAmJiAhZS0+aGFzaCkKKwkJcmV0dXJuIDA7CisKKwlkcHJpbnRrKCIlczogZW5nOiAlcCwgaXY6ICVsbHgsIGRhdGE6ICVwLCBwYWdlOiAlcC8lbHUsIHNpemU6ICV1LlxuIiwKKwkJX19mdW5jX18sIGUsIGNtZF9pdiwgZGF0YSwgcGFnZSwgKHBhZ2UpP3BhZ2UtPmluZGV4OjAsIHNpemUpOworCisJaWYgKGRhdGEpIHsKKwkJc2dfaW5pdF9vbmUoJnNnLCBkYXRhLCBzaXplKTsKKwl9IGVsc2UgeworCQlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJCXNnX3NldF9wYWdlKCZzZywgcGFnZSwgc2l6ZSwgMCk7CisJfQorCisJaWYgKGUtPmNpcGhlcikgeworCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhICsgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsKKwkJdTggaXZbMzJdOworCisJCW1lbXNldChpdiwgMCwgc2l6ZW9mKGl2KSk7CisJCW1lbWNweShpdiwgJmNtZF9pdiwgc2l6ZW9mKGNtZF9pdikpOworCisJCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKHJlcSwgZS0+Y2lwaGVyKTsKKworCQllcnIgPSBwb2htZWxmc19jcnlwdG9fcHJvY2VzcyhyZXEsICZzZywgJnNnLCBpdiwgMCwgZS0+dGltZW91dCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAoZS0+aGFzaCkgeworCQlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJCXZvaWQgKmRzdCA9IGUtPmRhdGEgKyBlLT5zaXplLzI7CisKKwkJZGVzYy50Zm0gPSBlLT5oYXNoOworCQlkZXNjLmZsYWdzID0gMDsKKworCQllcnIgPSBjcnlwdG9faGFzaF9pbml0KCZkZXNjKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWVyciA9IGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgJnNnLCBzaXplKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWVyciA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkc3QpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJZXJyID0gISFtZW1jbXAoZHN0LCBlLT5kYXRhLCBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpKTsKKworCQlpZiAoZXJyKSB7CisjaWZkZWYgQ09ORklHX1BPSE1FTEZTX0RFQlVHCisJCQl1bnNpZ25lZCBpbnQgaTsKKwkJCXVuc2lnbmVkIGNoYXIgKnJlY3YgPSBlLT5kYXRhLCAqY2FsYyA9IGRzdDsKKworCQkJZHByaW50aygiJXM6IGVuZzogJXAsIGhhc2g6ICVwLCBjaXBoZXI6ICVwOiBpdiA6ICVsbHgsIGhhc2ggbWlzbWF0Y2ggKHJlY3YvY2FsYyk6ICIsCisJCQkJCV9fZnVuY19fLCBlLCBlLT5oYXNoLCBlLT5jaXBoZXIsIGNtZF9pdik7CisJCQlmb3IgKGk9MDsgaTxjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOyArK2kpIHsKKyNpZiAwCisJCQkJZHByaW50a2EoIiUwMnggIiwgcmVjdltpXSk7CisJCQkJaWYgKHJlY3ZbaV0gIT0gY2FsY1tpXSkgeworCQkJCQlkcHJpbnRrYSgifCBjYWxjIGJ5dGU6ICUwMnguXG4iLCBjYWxjW2ldKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorI2Vsc2UKKwkJCQlkcHJpbnRrYSgiJTAyeC8lMDJ4ICIsIHJlY3ZbaV0sIGNhbGNbaV0pOworI2VuZGlmCisJCQl9CisJCQlkcHJpbnRrKCJcbiIpOworI2VuZGlmCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoIiVzOiBlbmc6ICVwLCBoYXNoOiAlcCwgY2lwaGVyOiAlcDogaGFzaGVzIG1hdGNoZWQuXG4iLAorCQkJCQlfX2Z1bmNfXywgZSwgZS0+aGFzaCwgZS0+Y2lwaGVyKTsKKwkJfQorCX0KKworCWRwcmludGsoIiVzOiBlbmc6ICVwLCBzaXplOiAldSwgaGFzaDogJXAsIGNpcGhlcjogJXA6IGNvbXBsZXRlZC5cbiIsCisJCQlfX2Z1bmNfXywgZSwgZS0+c2l6ZSwgZS0+aGFzaCwgZS0+Y2lwaGVyKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJZHByaW50aygiJXM6IGVuZzogJXAsIGhhc2g6ICVwLCBjaXBoZXI6ICVwOiBlcnI6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBlLCBlLT5oYXNoLCBlLT5jaXBoZXIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc190cmFuc19pdGVyKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsCisJCWludCAoKiBpdGVyYXRvcikgKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLAorCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYykpCit7CisJdm9pZCAqZGF0YSA9IHQtPmlvdmVjLmlvdl9iYXNlICsgc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpICsgdC0+cHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IHQtPmlvdmVjLmlvdl9sZW4gLSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkgLSB0LT5wc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9IGRhdGE7CisJdW5zaWduZWQgaW50IHN6LCBwYWdlcyA9IHQtPmF0dGFjaGVkX3BhZ2VzLCBpLCBjc2l6ZSwgY21kX2NtZCwgZHBhZ2VfaWR4OworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19zcmMsIHNnX2RzdDsKKwlpbnQgZXJyOworCisJd2hpbGUgKHNpemUpIHsKKwkJY21kID0gZGF0YTsKKwkJY21kX2NtZCA9IF9fYmUxNl90b19jcHUoY21kLT5jbWQpOworCQljc2l6ZSA9IF9fYmUzMl90b19jcHUoY21kLT5zaXplKTsKKwkJY21kLT5pdiA9IF9fY3B1X3RvX2JlNjQoZS0+aXYpOworCisJCWlmIChjbWRfY21kID09IE5FVEZTX1JFQURfUEFHRVMgfHwgY21kX2NtZCA9PSBORVRGU19SRUFEX1BBR0UpCisJCQljc2l6ZSA9IF9fYmUxNl90b19jcHUoY21kLT5leHQpOworCisJCXN6ID0gY3NpemUgKyBfX2JlMTZfdG9fY3B1KGNtZC0+Y3BhZCkgKyBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCk7CisKKwkJZHByaW50aygiJXM6IHNpemU6ICV1LCBzejogJXUsIGNtZF9zaXplOiAldSwgY21kX2NwYWQ6ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgc2l6ZSwgc3osIF9fYmUzMl90b19jcHUoY21kLT5zaXplKSwgX19iZTE2X3RvX2NwdShjbWQtPmNwYWQpKTsKKworCQlkYXRhICs9IHN6OworCQlzaXplIC09IHN6OworCisJCXNnX2luaXRfb25lKCZzZ19zcmMsIGNtZC0+ZGF0YSwgc3ogLSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkpOworCQlzZ19pbml0X29uZSgmc2dfZHN0LCBjbWQtPmRhdGEsIHN6IC0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpKTsKKworCQllcnIgPSBpdGVyYXRvcihlLCAmc2dfZHN0LCAmc2dfc3JjKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFwYWdlcykKKwkJcmV0dXJuIDA7CisKKwlkcGFnZV9pZHggPSAwOworCWZvciAoaT0wOyBpPHQtPnBhZ2VfbnVtOyArK2kpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB0LT5wYWdlc1tpXTsKKwkJc3RydWN0IHBhZ2UgKmRwYWdlID0gZS0+cGFnZXNbZHBhZ2VfaWR4XTsKKworCQlpZiAoIXBhZ2UpCisJCQljb250aW51ZTsKKworCQlzZ19pbml0X3RhYmxlKCZzZ19zcmMsIDEpOworCQlzZ19pbml0X3RhYmxlKCZzZ19kc3QsIDEpOworCQlzZ19zZXRfcGFnZSgmc2dfc3JjLCBwYWdlLCBwYWdlX3ByaXZhdGUocGFnZSksIDApOworCQlzZ19zZXRfcGFnZSgmc2dfZHN0LCBkcGFnZSwgcGFnZV9wcml2YXRlKHBhZ2UpLCAwKTsKKworCQllcnIgPSBpdGVyYXRvcihlLCAmc2dfZHN0LCAmc2dfc3JjKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJcGFnZXMtLTsKKwkJaWYgKCFwYWdlcykKKwkJCWJyZWFrOworCQlkcGFnZV9pZHgrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19lbmNyeXB0X2l0ZXJhdG9yKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCit7CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gZS0+ZGF0YTsKKwl1OCBpdlszMl07CisKKwltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOworCisJbWVtY3B5KGl2LCAmZS0+aXYsIHNpemVvZihlLT5pdikpOworCisJcmV0dXJuIHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzKHJlcSwgc2dfZHN0LCBzZ19zcmMsIGl2LCAxLCBlLT50aW1lb3V0KTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19lbmNyeXB0KHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0YykKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQgPSB0Yy0+dHJhbnM7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUgPSAmdGMtPmVuZzsKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhOworCisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QpKTsKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGUtPmNpcGhlcik7CisKKwllLT5pdiA9IHBvaG1lbGZzX2dlbl9pdih0KTsKKworCXJldHVybiBwb2htZWxmc190cmFuc19pdGVyKHQsIGUsIHBvaG1lbGZzX2VuY3J5cHRfaXRlcmF0b3IpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2hhc2hfaXRlcmF0b3Ioc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYykKK3sKKwlyZXR1cm4gY3J5cHRvX2hhc2hfdXBkYXRlKGUtPmRhdGEsIHNnX3NyYywgc2dfc3JjLT5sZW5ndGgpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2hhc2goc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnRjKQoreworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplID0gJnRjLT5lbmc7CisJc3RydWN0IGhhc2hfZGVzYyAqZGVzYyA9IGUtPmRhdGE7CisJdW5zaWduZWQgY2hhciAqZHN0ID0gdGMtPnRyYW5zLT5pb3ZlYy5pb3ZfYmFzZSArIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKTsKKwlpbnQgZXJyOworCisJZGVzYy0+dGZtID0gZS0+aGFzaDsKKwlkZXNjLT5mbGFncyA9IDA7CisKKwllcnIgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwb2htZWxmc190cmFuc19pdGVyKHRjLT50cmFucywgZSwgcG9obWVsZnNfaGFzaF9pdGVyYXRvcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGNyeXB0b19oYXNoX2ZpbmFsKGRlc2MsIGRzdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXsKKwkJdW5zaWduZWQgaW50IGk7CisJCWRwcmludGsoIiVzOiAiLCBfX2Z1bmNfXyk7CisJCWZvciAoaT0wOyBpPHRjLT5wc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplOyArK2kpCisJCQlkcHJpbnRrYSgiJTAyeCAiLCBkc3RbaV0pOworCQlkcHJpbnRrYSgiXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfY3J5cHRvX3BhZ2VzX2ZyZWUoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGk9MDsgaTxlLT5wYWdlX251bTsgKytpKQorCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7CisJa2ZyZWUoZS0+cGFnZXMpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b19wYWdlc19hbGxvYyhzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwllLT5wYWdlcyA9IGttYWxsb2MocHNiLT50cmFuc19tYXhfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICghZS0+cGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpPTA7IGk8cHNiLT50cmFuc19tYXhfcGFnZXM7ICsraSkgeworCQllLT5wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghZS0+cGFnZXNbaV0pCisJCQlicmVhazsKKwl9CisKKwllLT5wYWdlX251bSA9IGk7CisJaWYgKCFlLT5wYWdlX251bSkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCWtmcmVlKGUtPnBhZ2VzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfc3lzX2NyeXB0b19leGl0X29uZShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHQtPnBzYjsKKworCWlmICh0LT50aHJlYWQpCisJCWt0aHJlYWRfc3RvcCh0LT50aHJlYWQpOworCisJbXV0ZXhfbG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCWxpc3RfZGVsKCZ0LT50aHJlYWRfZW50cnkpOworCXBzYi0+Y3J5cHRvX3RocmVhZF9udW0tLTsKKwltdXRleF91bmxvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKworCXBvaG1lbGZzX2NyeXB0b19lbmdpbmVfZXhpdCgmdC0+ZW5nKTsKKwlwb2htZWxmc19jcnlwdG9fcGFnZXNfZnJlZSgmdC0+ZW5nKTsKKwlrZnJlZSh0KTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fZmluaXNoKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIGludCBlcnIpCit7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gdC0+aW92ZWMuaW92X2Jhc2U7CisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKworCWlmIChsaWtlbHkoIWVycikpCisJCWVyciA9IG5ldGZzX3RyYW5zX2ZpbmlzaF9zZW5kKHQsIHBzYik7CisKKwl0LT5yZXN1bHQgPSBlcnI7CisJbmV0ZnNfdHJhbnNfcHV0KHQpOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBwb2htZWxmc19jcnlwdG9fdGhyZWFkX21ha2VfcmVhZHkoc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnRoKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gdGgtPnBzYjsKKworCXRoLT5wYWdlID0gTlVMTDsKKwl0aC0+dHJhbnMgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCWxpc3RfbW92ZV90YWlsKCZ0aC0+dGhyZWFkX2VudHJ5LCAmcHNiLT5jcnlwdG9fcmVhZHlfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJd2FrZV91cCgmcHNiLT53YWl0KTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fdGhyZWFkX3RyYW5zKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0KQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdHJhbnM7CisJaW50IGVyciA9IDA7CisKKwl0cmFucyA9IHQtPnRyYW5zOworCXRyYW5zLT5lbmcgPSBOVUxMOworCisJaWYgKHQtPmVuZy5oYXNoKSB7CisJCWVyciA9IHBvaG1lbGZzX2hhc2godCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9jb21wbGV0ZTsKKwl9CisKKwlpZiAodC0+ZW5nLmNpcGhlcikgeworCQllcnIgPSBwb2htZWxmc19lbmNyeXB0KHQpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfY29tcGxldGU7CisJCXRyYW5zLT5lbmcgPSAmdC0+ZW5nOworCX0KKworb3V0X2NvbXBsZXRlOgorCXQtPnBhZ2UgPSBOVUxMOworCXQtPnRyYW5zID0gTlVMTDsKKworCWlmICghdHJhbnMtPmVuZykKKwkJcG9obWVsZnNfY3J5cHRvX3RocmVhZF9tYWtlX3JlYWR5KHQpOworCisJcG9obWVsZnNfY3J5cHRvX2ZpbmlzaCh0cmFucywgdC0+cHNiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX3RocmVhZF9wYWdlKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0KQoreworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplID0gJnQtPmVuZzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHQtPnBhZ2U7CisJaW50IGVycjsKKworCVdBUk5fT04oIVBhZ2VDaGVja2VkKHBhZ2UpKTsKKworCWVyciA9IHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzX2lucHV0X2RhdGEoZSwgZS0+aXYsIE5VTEwsIHBhZ2UsIHQtPnNpemUpOworCWlmICghZXJyKQorCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJZWxzZQorCQlTZXRQYWdlRXJyb3IocGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJcG9obWVsZnNfY3J5cHRvX3RocmVhZF9tYWtlX3JlYWR5KHQpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fdGhyZWFkX2Z1bmModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCA9IGRhdGE7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodC0+d2FpdCwga3RocmVhZF9zaG91bGRfc3RvcCgpIHx8CisJCQkJdC0+dHJhbnMgfHwgdC0+cGFnZSk7CisKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOworCisJCWlmICghdC0+dHJhbnMgJiYgIXQtPnBhZ2UpCisJCQljb250aW51ZTsKKworCQlkcHJpbnRrKCIlczogdGhyZWFkOiAlcCwgdHJhbnM6ICVwLCBwYWdlOiAlcC5cbiIsCisJCQkJX19mdW5jX18sIHQsIHQtPnRyYW5zLCB0LT5wYWdlKTsKKworCQlpZiAodC0+dHJhbnMpCisJCQlwb2htZWxmc19jcnlwdG9fdGhyZWFkX3RyYW5zKHQpOworCQllbHNlIGlmICh0LT5wYWdlKQorCQkJcG9obWVsZnNfY3J5cHRvX3RocmVhZF9wYWdlKHQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19jcnlwdG9fZmx1c2goc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0ID0gTlVMTDsKKworCQltdXRleF9sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eShoZWFkKSkgeworCQkJdCA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQsIHRocmVhZF9lbnRyeSk7CisJCQlsaXN0X2RlbF9pbml0KCZ0LT50aHJlYWRfZW50cnkpOworCQl9CisJCW11dGV4X3VubG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCisJCWlmICh0KQorCQkJcG9obWVsZnNfc3lzX2NyeXB0b19leGl0X29uZSh0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX3N5c19jcnlwdG9fZXhpdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBzYi0+Y3J5cHRvX2FjdGl2ZV9saXN0KSB8fCAhbGlzdF9lbXB0eSgmcHNiLT5jcnlwdG9fcmVhZHlfbGlzdCkpIHsKKwkJZHByaW50aygiJXM6IGNyeXB0b190aHJlYWRfbnVtOiAldS5cbiIsIF9fZnVuY19fLCBwc2ItPmNyeXB0b190aHJlYWRfbnVtKTsKKwkJcG9obWVsZnNfY3J5cHRvX2ZsdXNoKHBzYiwgJnBzYi0+Y3J5cHRvX2FjdGl2ZV9saXN0KTsKKwkJcG9obWVsZnNfY3J5cHRvX2ZsdXNoKHBzYiwgJnBzYi0+Y3J5cHRvX3JlYWR5X2xpc3QpOworCX0KK30KKworc3RhdGljIGludCBwb2htZWxmc19zeXNfY3J5cHRvX2luaXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQ7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYzsKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0OworCWludCBlcnI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlzdCA9ICZjLT5zdGF0ZTsKKworCQllcnIgPSBwb2htZWxmc19jcnlwdG9fZW5naW5lX2luaXQoJnN0LT5lbmcsIHBzYik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQlkcHJpbnRrKCIlczogc3Q6ICVwLCBlbmc6ICVwLCBoYXNoOiAlcCwgY2lwaGVyOiAlcC5cbiIsCisJCQkJX19mdW5jX18sIHN0LCAmc3QtPmVuZywgJnN0LT5lbmcuaGFzaCwgJnN0LT5lbmcuY2lwaGVyKTsKKwl9CisKKwlmb3IgKGk9MDsgaTxwc2ItPmNyeXB0b190aHJlYWRfbnVtOyArK2kpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdCkKKwkJCWdvdG8gZXJyX291dF9mcmVlX3N0YXRlX2VuZ2luZXM7CisKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmdC0+d2FpdCk7CisKKwkJdC0+cHNiID0gcHNiOworCQl0LT50cmFucyA9IE5VTEw7CisJCXQtPmVuZy50aHJlYWQgPSB0OworCisJCWVyciA9IHBvaG1lbGZzX2NyeXB0b19lbmdpbmVfaW5pdCgmdC0+ZW5nLCBwc2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2ZyZWVfc3RhdGVfZW5naW5lczsKKworCQllcnIgPSBwb2htZWxmc19jcnlwdG9fcGFnZXNfYWxsb2MoJnQtPmVuZywgcHNiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCisJCXQtPnRocmVhZCA9IGt0aHJlYWRfcnVuKHBvaG1lbGZzX2NyeXB0b190aHJlYWRfZnVuYywgdCwKKwkJCQkicG9obWVsZnMtY3J5cHRvLSVkLSVkIiwgcHNiLT5pZHgsIGkpOworCQlpZiAoSVNfRVJSKHQtPnRocmVhZCkpIHsKKwkJCWVyciA9IFBUUl9FUlIodC0+dGhyZWFkKTsKKwkJCXQtPnRocmVhZCA9IE5VTEw7CisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJfQorCisJCWlmICh0LT5lbmcuY2lwaGVyKQorCQkJcHNiLT5jcnlwdG9fYWxpZ25fc2l6ZSA9IGNyeXB0b19hYmxrY2lwaGVyX2Jsb2Nrc2l6ZSh0LT5lbmcuY2lwaGVyKTsKKworCQltdXRleF9sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJnQtPnRocmVhZF9lbnRyeSwgJnBzYi0+Y3J5cHRvX3JlYWR5X2xpc3QpOworCQltdXRleF91bmxvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwl9CisKKwlwc2ItPmNyeXB0b190aHJlYWRfbnVtID0gaTsKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCXBvaG1lbGZzX3N5c19jcnlwdG9fZXhpdF9vbmUodCk7CitlcnJfb3V0X2ZyZWVfc3RhdGVfZW5naW5lczoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlzdCA9ICZjLT5zdGF0ZTsKKwkJcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9leGl0KCZzdC0+ZW5nKTsKKwl9CitlcnJfb3V0X2V4aXQ6CisJcG9obWVsZnNfc3lzX2NyeXB0b19leGl0KHBzYik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBwb2htZWxmc19jcnlwdG9fZXhpdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlwb2htZWxmc19zeXNfY3J5cHRvX2V4aXQocHNiKTsKKworCWtmcmVlKHBzYi0+aGFzaF9zdHJpbmcpOworCWtmcmVlKHBzYi0+Y2lwaGVyX3N0cmluZyk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9udW0sCisJCXZvaWQgKnByaXZhdGUsIGludCBlcnIpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBwcml2YXRlOworCisJcHNiLT5mbGFncyA9IC1lcnI7CisJZHByaW50aygiJXM6IGVycjogJWQuXG4iLCBfX2Z1bmNfXywgZXJyKTsKKworCXdha2VfdXAoJnBzYi0+d2FpdCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b19pbml0X2hhbmRzaGFrZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJc3RydWN0IG5ldGZzX2NyeXB0b19jYXBhYmlsaXRpZXMgKmNhcDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJY2hhciAqc3RyOworCWludCBlcnIgPSAtRU5PTUVNLCBzaXplOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfY3J5cHRvX2NhcGFiaWxpdGllcykgKworCQlwc2ItPmNpcGhlcl9zdHJsZW4gKyBwc2ItPmhhc2hfc3RybGVuICsgMjsgLyogMCBieXRlcyAqLworCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgc2l6ZSwgMCwgMCk7CisJaWYgKCF0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXQtPmNvbXBsZXRlID0gcG9obWVsZnNfY3J5cHRfaW5pdF9jb21wbGV0ZTsKKwl0LT5wcml2YXRlID0gcHNiOworCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKwljYXAgPSAoc3RydWN0IG5ldGZzX2NyeXB0b19jYXBhYmlsaXRpZXMgKikoY21kICsgMSk7CisJc3RyID0gKGNoYXIgKikoY2FwICsgMSk7CisKKwljbWQtPmNtZCA9IE5FVEZTX0NBUEFCSUxJVElFUzsKKwljbWQtPmlkID0gUE9ITUVMRlNfQ1JZUFRPX0NBUEFCSUxJVElFUzsKKwljbWQtPnNpemUgPSBzaXplOworCWNtZC0+c3RhcnQgPSAwOworCWNtZC0+ZXh0ID0gMDsKKwljbWQtPmNzaXplID0gMDsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgc2l6ZSk7CisKKwljYXAtPmhhc2hfc3RybGVuID0gcHNiLT5oYXNoX3N0cmxlbjsKKwlpZiAoY2FwLT5oYXNoX3N0cmxlbikgeworCQlzcHJpbnRmKHN0ciwgIiVzIiwgcHNiLT5oYXNoX3N0cmluZyk7CisJCXN0ciArPSBjYXAtPmhhc2hfc3RybGVuOworCX0KKworCWNhcC0+Y2lwaGVyX3N0cmxlbiA9IHBzYi0+Y2lwaGVyX3N0cmxlbjsKKwljYXAtPmNpcGhlcl9rZXlzaXplID0gcHNiLT5jaXBoZXJfa2V5c2l6ZTsKKwlpZiAoY2FwLT5jaXBoZXJfc3RybGVuKQorCQlzcHJpbnRmKHN0ciwgIiVzIiwgcHNiLT5jaXBoZXJfc3RyaW5nKTsKKworCW5ldGZzX2NvbnZlcnRfY3J5cHRvX2NhcGFiaWxpdGllcyhjYXApOworCisJcHNiLT5mbGFncyA9IH4wOworCWVyciA9IG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHNiLT53YWl0LCAocHNiLT5mbGFncyAhPSB+MCksCisJCQlwc2ItPndhaXRfb25fcGFnZV90aW1lb3V0KTsKKwlpZiAoIWVycikKKwkJZXJyID0gLUVUSU1FRE9VVDsKKwllbHNlCisJCWVyciA9IC1wc2ItPmZsYWdzOworCisJaWYgKCFlcnIpCisJCXBzYi0+cGVyZm9ybV9jcnlwdG8gPSAxOworCXBzYi0+ZmxhZ3MgPSAwOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IE5FVEZTX0NBUEFCSUxJVElFUyByZXNwb25zZSBjb21tYW5kCisJICogc2hvdWxkIHNldHVwIHN1cGVyYmxvY2sgaW4gYSB3YXksIHdoaWNoIGlzIGFjY2VwdGlibGUKKwkgKiBmb3IgYm90aCBjbGllbnQgYW5kIHNlcnZlciwgc28gaWYgc2VydmVyIHJlZnVzZXMgY29ubmVjdGlvbiwKKwkgKiBpdCB3aWxsIHNlbmQgZXJyb3IgaW4gdHJhbnNhY3Rpb24gcmVzcG9uc2UuCisJICovCisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX2NyeXB0b19pbml0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCWludCBlcnI7CisKKwlpZiAoIXBzYi0+Y2lwaGVyX3N0cmluZyAmJiAhcHNiLT5oYXNoX3N0cmluZykKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBwb2htZWxmc19jcnlwdG9faW5pdF9oYW5kc2hha2UocHNiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcG9obWVsZnNfc3lzX2NyeXB0b19pbml0KHBzYik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b190aHJlYWRfZ2V0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLAorCQlpbnQgKCogYWN0aW9uKShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQgPSBOVUxMOworCWludCBlcnI7CisKKwl3aGlsZSAoIXQpIHsKKwkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHNiLT53YWl0LAorCQkJCSFsaXN0X2VtcHR5KCZwc2ItPmNyeXB0b19yZWFkeV9saXN0KSwKKwkJCQlwc2ItPndhaXRfb25fcGFnZV90aW1lb3V0KTsKKworCQl0ID0gTlVMTDsKKwkJZXJyID0gMDsKKwkJbXV0ZXhfbG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCQlpZiAoIWxpc3RfZW1wdHkoJnBzYi0+Y3J5cHRvX3JlYWR5X2xpc3QpKSB7CisJCQl0ID0gbGlzdF9lbnRyeShwc2ItPmNyeXB0b19yZWFkeV9saXN0LnByZXYsCisJCQkJCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkLAorCQkJCQl0aHJlYWRfZW50cnkpOworCisJCQlsaXN0X21vdmVfdGFpbCgmdC0+dGhyZWFkX2VudHJ5LAorCQkJCQkmcHNiLT5jcnlwdG9fYWN0aXZlX2xpc3QpOworCisJCQlhY3Rpb24odCwgZGF0YSk7CisJCQl3YWtlX3VwKCZ0LT53YWl0KTsKKworCQl9CisJCW11dGV4X3VubG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfdHJhbnNfY3J5cHRfYWN0aW9uKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdHJhbnMgPSBkYXRhOworCisJbmV0ZnNfdHJhbnNfZ2V0KHRyYW5zKTsKKwl0LT50cmFucyA9IHRyYW5zOworCisJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCB0aHJlYWQ6ICVwLlxuIiwgX19mdW5jX18sIHRyYW5zLCB0cmFucy0+Z2VuLCB0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBvaG1lbGZzX3RyYW5zX2NyeXB0KHN0cnVjdCBuZXRmc190cmFucyAqdHJhbnMsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCWlmICgoIXBzYi0+aGFzaF9zdHJpbmcgJiYgIXBzYi0+Y2lwaGVyX3N0cmluZykgfHwgIXBzYi0+cGVyZm9ybV9jcnlwdG8pIHsKKwkJbmV0ZnNfdHJhbnNfZ2V0KHRyYW5zKTsKKwkJcmV0dXJuIHBvaG1lbGZzX2NyeXB0b19maW5pc2godHJhbnMsIHBzYiwgMCk7CisJfQorCisJcmV0dXJuIHBvaG1lbGZzX2NyeXB0b190aHJlYWRfZ2V0KHBzYiwgcG9obWVsZnNfdHJhbnNfY3J5cHRfYWN0aW9uLCB0cmFucyk7Cit9CisKK3N0cnVjdCBwb2htZWxmc19jcnlwdG9faW5wdXRfYWN0aW9uX2RhdGEKK3sKKwlzdHJ1Y3QgcGFnZQkJCSpwYWdlOworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lCSplOworCXU2NAkJCQlpdjsKKwl1bnNpZ25lZCBpbnQJCQlzaXplOworfTsKKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdF9pbnB1dF9wYWdlX2FjdGlvbihzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2lucHV0X2FjdGlvbl9kYXRhICphY3QgPSBkYXRhOworCisJbWVtY3B5KHQtPmVuZy5kYXRhLCBhY3QtPmUtPmRhdGEsIHQtPnBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpOworCisJdC0+c2l6ZSA9IGFjdC0+c2l6ZTsKKwl0LT5lbmcuaXYgPSBhY3QtPml2OworCisJdC0+cGFnZSA9IGFjdC0+cGFnZTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzX2lucHV0X3BhZ2Uoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTY0IGl2KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9faW5wdXRfYWN0aW9uX2RhdGEgYWN0OworCWludCBlcnIgPSAtRU5PRU5UOworCisJYWN0LnBhZ2UgPSBwYWdlOworCWFjdC5lID0gZTsKKwlhY3Quc2l6ZSA9IHNpemU7CisJYWN0Lml2ID0gaXY7CisKKwllcnIgPSBwb2htZWxmc19jcnlwdG9fdGhyZWFkX2dldChQT0hNRUxGU19TQihpbm9kZS0+aV9zYiksCisJCQlwb2htZWxmc19jcnlwdF9pbnB1dF9wYWdlX2FjdGlvbiwgJmFjdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDExODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvZGlyLmMKQEAgLTAsMCArMSwxMDkzIEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworc3RhdGljIGludCBwb2htZWxmc19jbXBfaGFzaChzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbiwgdTMyIGhhc2gpCit7CisJaWYgKG4tPmhhc2ggPiBoYXNoKQorCQlyZXR1cm4gLTE7CisJaWYgKG4tPmhhc2ggPCBoYXNoKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBvaG1lbGZzX25hbWUgKnBvaG1lbGZzX3NlYXJjaF9oYXNoX3VucHJlY2lzZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1MzIgaGFzaCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHBpLT5oYXNoX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqdG1wID0gTlVMTDsKKwlpbnQgY21wOworCisJd2hpbGUgKG4pIHsKKwkJdG1wID0gcmJfZW50cnkobiwgc3RydWN0IHBvaG1lbGZzX25hbWUsIGhhc2hfbm9kZSk7CisKKwkJY21wID0gcG9obWVsZnNfY21wX2hhc2godG1wLCBoYXNoKTsKKwkJaWYgKGNtcCA8IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJYnJlYWs7CisKKwl9CisKKwlyZXR1cm4gdG1wOworfQorCitzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqcG9obWVsZnNfc2VhcmNoX2hhc2goc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTMyIGhhc2gpCit7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKnRtcDsKKworCXRtcCA9IHBvaG1lbGZzX3NlYXJjaF9oYXNoX3VucHJlY2lzZShwaSwgaGFzaCk7CisJaWYgKHRtcCAmJiAodG1wLT5oYXNoID09IGhhc2gpKQorCQlyZXR1cm4gdG1wOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9fcG9obWVsZnNfbmFtZV9kZWwoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19uYW1lICpub2RlKQoreworCXJiX2VyYXNlKCZub2RlLT5oYXNoX25vZGUsICZwYXJlbnQtPmhhc2hfcm9vdCk7Cit9CisKKy8qCisgKiBSZW1vdmUgbmFtZSBjYWNoZSBlbnRyeSBmcm9tIGl0cyBjYWNoZXMgYW5kIGZyZWUgaXQuCisgKi8KK3N0YXRpYyB2b2lkIHBvaG1lbGZzX25hbWVfZnJlZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHBvaG1lbGZzX25hbWUgKm5vZGUpCit7CisJX19wb2htZWxmc19uYW1lX2RlbChwYXJlbnQsIG5vZGUpOworCWxpc3RfZGVsKCZub2RlLT5zeW5jX2NyZWF0ZV9lbnRyeSk7CisJa2ZyZWUobm9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqcG9obWVsZnNfaW5zZXJ0X2hhc2goc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwKKwkJc3RydWN0IHBvaG1lbGZzX25hbWUgKm5ldykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm4gPSAmcGktPmhhc2hfcm9vdC5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqcmV0ID0gTlVMTCwgKnRtcDsKKwlpbnQgY21wOworCisJd2hpbGUgKCpuKSB7CisJCXBhcmVudCA9ICpuOworCisJCXRtcCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHBvaG1lbGZzX25hbWUsIGhhc2hfbm9kZSk7CisKKwkJY21wID0gcG9obWVsZnNfY21wX2hhc2godG1wLCBuZXctPmhhc2gpOworCQlpZiAoY21wIDwgMCkKKwkJCW4gPSAmcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCXJldCA9IHRtcDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJldCkgeworCQlwcmludGsoIiVzOiBleGlzdDogcGFyZW50OiAlbGx1LCBpbm86ICVsbHUsIGhhc2g6ICV4LCBsZW46ICV1LCBkYXRhOiAnJXMnLCAiCisJCQkJICAgICAgICAgICAibmV3OiBpbm86ICVsbHUsIGhhc2g6ICV4LCBsZW46ICV1LCBkYXRhOiAnJXMnLlxuIiwKKwkJCQlfX2Z1bmNfXywgcGktPmlubywKKwkJCQlyZXQtPmlubywgcmV0LT5oYXNoLCByZXQtPmxlbiwgcmV0LT5kYXRhLAorCQkJCW5ldy0+aW5vLCBuZXctPmhhc2gsIG5ldy0+bGVuLCBuZXctPmRhdGEpOworCQlyZXQtPmlubyA9IG5ldy0+aW5vOworCQlyZXR1cm4gcmV0OworCX0KKworCXJiX2xpbmtfbm9kZSgmbmV3LT5oYXNoX25vZGUsIHBhcmVudCwgbik7CisJcmJfaW5zZXJ0X2NvbG9yKCZuZXctPmhhc2hfbm9kZSwgJnBpLT5oYXNoX3Jvb3QpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBGcmVlIG5hbWUgY2FjaGUgZm9yIGdpdmVuIGlub2RlLgorICovCit2b2lkIHBvaG1lbGZzX2ZyZWVfbmFtZXMoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQpCit7CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisKKwlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmcGFyZW50LT5oYXNoX3Jvb3QpOyByYl9ub2RlOykgeworCQluID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IHBvaG1lbGZzX25hbWUsIGhhc2hfbm9kZSk7CisJCXJiX25vZGUgPSByYl9uZXh0KHJiX25vZGUpOworCisJCXBvaG1lbGZzX25hbWVfZnJlZShwYXJlbnQsIG4pOworCX0KK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfZml4X29mZnNldChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHBvaG1lbGZzX25hbWUgKm5vZGUpCit7CisJcGFyZW50LT50b3RhbF9sZW4gLT0gbm9kZS0+bGVuOworfQorCisvKgorICogRnJlZSBuYW1lIGNhY2hlIGVudHJ5IGhlbHBlci4KKyAqLwordm9pZCBwb2htZWxmc19uYW1lX2RlbChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHBvaG1lbGZzX25hbWUgKm5vZGUpCit7CisJcG9obWVsZnNfZml4X29mZnNldChwYXJlbnQsIG5vZGUpOworCXBvaG1lbGZzX25hbWVfZnJlZShwYXJlbnQsIG5vZGUpOworfQorCisvKgorICogSW5zZXJ0IG5ldyBuYW1lIGNhY2hlIGVudHJ5IGludG8gYWxsIGhhc2ggY2FjaGUuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfaW5zZXJ0X25hbWUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19uYW1lICpuKQoreworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuYW1lOworCisJbmFtZSA9IHBvaG1lbGZzX2luc2VydF9oYXNoKHBhcmVudCwgbik7CisJaWYgKG5hbWUpCisJCXJldHVybiAtRUVYSVNUOworCisJcGFyZW50LT50b3RhbF9sZW4gKz0gbi0+bGVuOworCWxpc3RfYWRkX3RhaWwoJm4tPnN5bmNfY3JlYXRlX2VudHJ5LCAmcGFyZW50LT5zeW5jX2NyZWF0ZV9saXN0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogQWxsb2NhdGUgbmV3IG5hbWUgY2FjaGUgZW50cnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqcG9obWVsZnNfbmFtZV9hbGxvYyh1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCisJbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19uYW1lKSArIGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZuLT5zeW5jX2NyZWF0ZV9lbnRyeSk7CisKKwluLT5kYXRhID0gKGNoYXIgKikobisxKTsKKworCXJldHVybiBuOworfQorCisvKgorICogQWRkIG5ldyBuYW1lIGVudHJ5IGludG8gZGlyZWN0b3J5J3MgY2FjaGUuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfYWRkX2RpcihzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsCisJCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqbnBpLCBzdHJ1Y3QgcXN0ciAqc3RyLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IGxpbmspCit7CisJaW50IGVyciA9IC1FTk9NRU07CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisKKwluID0gcG9obWVsZnNfbmFtZV9hbGxvYyhzdHItPmxlbiArIDEpOworCWlmICghbikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwluLT5pbm8gPSBucGktPmlubzsKKwluLT5tb2RlID0gbW9kZTsKKwluLT5sZW4gPSBzdHItPmxlbjsKKwluLT5oYXNoID0gc3RyLT5oYXNoOworCXNwcmludGYobi0+ZGF0YSwgIiVzIiwgc3RyLT5uYW1lKTsKKworCW11dGV4X2xvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCWVyciA9IHBvaG1lbGZzX2luc2VydF9uYW1lKHBhcmVudCwgbik7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKworCWlmIChlcnIpIHsKKwkJaWYgKGVyciAhPSAtRUVYSVNUKQorCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCWtmcmVlKG4pOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJa2ZyZWUobik7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENyZWF0ZSBuZXcgaW5vZGUgZm9yIGdpdmVuIHBhcmFtZXRlcnMgKG5hbWUsIGlub2RlIGluZm8sIHBhcmVudCkuCisgKiBUaGlzIGRvZXMgbm90IGNyZWF0ZSBvYmplY3Qgb24gdGhlIHNlcnZlciwgaXQgd2lsbCBiZSBzeW5jZWQgdGhlcmUgZHVyaW5nIHdyaXRlYmFjay4KKyAqLworc3RydWN0IHBvaG1lbGZzX2lub2RlICpwb2htZWxmc19uZXdfaW5vZGUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsCisJCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqc3RyLAorCQlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbywgaW50IGxpbmspCit7CisJc3RydWN0IGlub2RlICpuZXcgPSBOVUxMOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqbnBpOworCWludCBlcnIgPSAtRUVYSVNUOworCisJZHByaW50aygiJXM6IGNyZWF0aW5nIGlub2RlOiBwYXJlbnQ6ICVsbHUsIGlubzogJWxsdSwgc3RyOiAlcC5cbiIsCisJCQlfX2Z1bmNfXywgKHBhcmVudCk/cGFyZW50LT5pbm86MCwgaW5mby0+aW5vLCBzdHIpOworCisJZXJyID0gLUVOT01FTTsKKwluZXcgPSBpZ2V0X2xvY2tlZChwc2ItPnNiLCBpbmZvLT5pbm8pOworCWlmICghbmV3KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCW5waSA9IFBPSE1FTEZTX0kobmV3KTsKKwlucGktPmlubyA9IGluZm8tPmlubzsKKwllcnIgPSAwOworCisJaWYgKG5ldy0+aV9zdGF0ZSAmIElfTkVXKSB7CisJCWRwcmludGsoIiVzOiBmaWxsaW5nIFZGUyBpbm9kZTogJWx1LyVsbHUuXG4iLAorCQkJCV9fZnVuY19fLCBuZXctPmlfaW5vLCBpbmZvLT5pbm8pOworCQlwb2htZWxmc19maWxsX2lub2RlKG5ldywgaW5mbyk7CisKKwkJaWYgKFNfSVNESVIoaW5mby0+bW9kZSkpIHsKKwkJCXN0cnVjdCBxc3RyIHM7CisKKwkJCXMubmFtZSA9ICIuIjsKKwkJCXMubGVuID0gMTsKKwkJCXMuaGFzaCA9IGpoYXNoKHMubmFtZSwgcy5sZW4sIDApOworCisJCQllcnIgPSBwb2htZWxmc19hZGRfZGlyKHBzYiwgbnBpLCBucGksICZzLCBpbmZvLT5tb2RlLCAwKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0X3B1dDsKKworCQkJcy5uYW1lID0gIi4uIjsKKwkJCXMubGVuID0gMjsKKwkJCXMuaGFzaCA9IGpoYXNoKHMubmFtZSwgcy5sZW4sIDApOworCisJCQllcnIgPSBwb2htZWxmc19hZGRfZGlyKHBzYiwgbnBpLCAocGFyZW50KT9wYXJlbnQ6bnBpLCAmcywKKwkJCQkJKHBhcmVudCk/cGFyZW50LT52ZnNfaW5vZGUuaV9tb2RlOm5waS0+dmZzX2lub2RlLmlfbW9kZSwgMCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyX291dF9wdXQ7CisJCX0KKwl9CisKKwlpZiAoc3RyKSB7CisJCWlmIChwYXJlbnQpIHsKKwkJCWVyciA9IHBvaG1lbGZzX2FkZF9kaXIocHNiLCBwYXJlbnQsIG5waSwgc3RyLCBpbmZvLT5tb2RlLCBsaW5rKTsKKworCQkJZHByaW50aygiJXM6ICVzIGluc2VydGVkIG5hbWU6ICclcycsIG5ld19vZmZzZXQ6ICVsbHUsIGlubzogJWxsdSwgcGFyZW50OiAlbGx1LlxuIiwKKwkJCQkJX19mdW5jX18sIChlcnIpPyJ1bnN1Y2Nlc3NmdWxseSI6InN1Y2Nlc3NmdWxseSIsCisJCQkJCXN0ci0+bmFtZSwgcGFyZW50LT50b3RhbF9sZW4sIGluZm8tPmlubywgcGFyZW50LT5pbm8pOworCisJCQlpZiAoZXJyICYmIGVyciAhPSAtRUVYSVNUKQorCQkJCWdvdG8gZXJyX291dF9wdXQ7CisJCX0KKwl9CisKKwlpZiAobmV3LT5pX3N0YXRlICYgSV9ORVcpIHsKKwkJaWYgKHBhcmVudCkKKwkJCW1hcmtfaW5vZGVfZGlydHkoJnBhcmVudC0+dmZzX2lub2RlKTsKKwkJbWFya19pbm9kZV9kaXJ0eShuZXcpOworCX0KKworCXNldF9iaXQoTkVURlNfSU5PREVfT1dORUQsICZucGktPnN0YXRlKTsKKwlucGktPmxvY2tfdHlwZSA9IFBPSE1FTEZTX1dSSVRFX0xPQ0s7CisJdW5sb2NrX25ld19pbm9kZShuZXcpOworCisJcmV0dXJuIG5waTsKKworZXJyX291dF9wdXQ6CisJcHJpbnRrKCIlczogcHV0dGluZyBpbm9kZTogJXAsIG5waTogJXAsIGVycm9yOiAlZC5cbiIsIF9fZnVuY19fLCBuZXcsIG5waSwgZXJyKTsKKwlpcHV0KG5ldyk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19yZW1vdGVfc3luY19jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9udW0sCisJCXZvaWQgKnByaXZhdGUsIGludCBlcnIpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IHByaXZhdGU7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihwaS0+dmZzX2lub2RlLmlfc2IpOworCisJZHByaW50aygiJXM6IGlubzogJWxsdSwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBwaS0+aW5vLCBlcnIpOworCisJaWYgKGVycikKKwkJcGktPmVycm9yID0gZXJyOworCXdha2VfdXAoJnBzYi0+d2FpdCk7CisJcG9obWVsZnNfcHV0X2lub2RlKHBpKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWNlaXZlIGRpcmVjdG9yeSBjb250ZW50IGZyb20gdGhlIHNlcnZlci4KKyAqIFRoaXMgc2hvdWxkIGJlIG9ubHkgZG9uZSBmb3Igb2JqZWN0cywgd2hpY2ggd2VyZSBub3QgY3JlYXRlZCBsb2NhbGx5LAorICogYW5kIHdoaWNoIHdlcmUgbm90IHN5bmNlZCBwcmV2aW91c2x5LgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3N5bmNfcmVtb3RlX2RpcihzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmcGktPnZmc19pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKwlsb25nIHJldCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMDApOworCWludCBlcnI7CisKKwlkcHJpbnRrKCIlczogZGlyOiAlbGx1LCBzdGF0ZTogJWx4OiByZW1vdGVfc3luY2VkOiAlZC5cbiIsCisJCV9fZnVuY19fLCBwaS0+aW5vLCBwaS0+c3RhdGUsIHRlc3RfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpKTsKKworCWlmICh0ZXN0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfRElSX1NZTkNFRCwgJnBpLT5zdGF0ZSkpCisJCXJldHVybiAwOworCisJaWYgKCFpZ3JhYihpbm9kZSkpIHsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJZXJyID0gcG9obWVsZnNfbWV0YV9jb21tYW5kKHBpLCBORVRGU19SRUFERElSLCBORVRGU19UUkFOU19TSU5HTEVfRFNULAorCQkJcG9obWVsZnNfcmVtb3RlX3N5bmNfY29tcGxldGUsIHBpLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXBpLT5lcnJvciA9IDA7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHNiLT53YWl0LAorCQkJdGVzdF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX0RJUl9TWU5DRUQsICZwaS0+c3RhdGUpIHx8IHBpLT5lcnJvciwgcmV0KTsKKwlkcHJpbnRrKCIlczogYXdha2UgZGlyOiAlbGx1LCByZXQ6ICVsZCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBwaS0+aW5vLCByZXQsIHBpLT5lcnJvcik7CisJaWYgKHJldCA8PSAwKSB7CisJCWVyciA9IC1FVElNRURPVVQ7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlmIChwaS0+ZXJyb3IpCisJCXJldHVybiBwaS0+ZXJyb3I7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCWNsZWFyX2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFZGUyByZWFkZGlyIGNhbGxiYWNrLiBTeW5jcyBkaXJlY3RvcnkgY29udGVudCBmcm9tIHNlcnZlciBpZiBuZWVkZWQsCisgKiBhbmQgcHJvdmlkZXMgZGlyZW50cnkgaW5mbyB0byB0aGUgdXNlcnNwYWNlLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOworCWludCBlcnIgPSAwLCBtb2RlOworCXU2NCBsZW47CisKKwlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBmcG9zOiAlbGx1LCBoYXNoOiAlMDhseC5cbiIsCisJCQlfX2Z1bmNfXywgcGktPmlubywgKHU2NClmaWxlLT5mX3BvcywKKwkJCSh1bnNpZ25lZCBsb25nKWZpbGUtPnByaXZhdGVfZGF0YSk7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGksIDAsIH4wLCBQT0hNRUxGU19SRUFEX0xPQ0spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwb2htZWxmc19zeW5jX3JlbW90ZV9kaXIocGkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhICYmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gKHZvaWQgKikodW5zaWduZWQgbG9uZylmaWxlLT5mX3BvcykpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmcGktPm9mZnNldF9sb2NrKTsKKwluID0gcG9obWVsZnNfc2VhcmNoX2hhc2hfdW5wcmVjaXNlKHBpLCAodW5zaWduZWQgbG9uZylmaWxlLT5wcml2YXRlX2RhdGEpOworCisJd2hpbGUgKG4pIHsKKwkJbW9kZSA9IChuLT5tb2RlID4+IDEyKSAmIDE1OworCisJCWRwcmludGsoIiVzOiBvZmZzZXQ6ICVsbHUsIHBhcmVudCBpbm86ICVsbHUsIG5hbWU6ICclcycsIGxlbjogJXUsIGlubzogJWxsdSwgIgorCQkJCSJtb2RlOiAlby8lbywgZnBvczogJWxsdSwgaGFzaDogJTA4eC5cbiIsCisJCQkJX19mdW5jX18sIGZpbGUtPmZfcG9zLCBwaS0+aW5vLCBuLT5kYXRhLCBuLT5sZW4sCisJCQkJbi0+aW5vLCBuLT5tb2RlLCBtb2RlLCBmaWxlLT5mX3Bvcywgbi0+aGFzaCk7CisKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gKHZvaWQgKiluLT5oYXNoOworCisJCWxlbiA9IG4tPmxlbjsKKwkJZXJyID0gZmlsbGRpcihkaXJlbnQsIG4tPmRhdGEsIG4tPmxlbiwgZmlsZS0+Zl9wb3MsIG4tPmlubywgbW9kZSk7CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRwcmludGsoIiVzOiBlcnI6ICVkLlxuIiwgX19mdW5jX18sIGVycik7CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlmaWxlLT5mX3BvcyArPSBsZW47CisKKwkJcmJfbm9kZSA9IHJiX25leHQoJm4tPmhhc2hfbm9kZSk7CisKKwkJaWYgKCFyYl9ub2RlIHx8IChyYl9ub2RlID09ICZuLT5oYXNoX25vZGUpKSB7CisJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWZpbGUtPmZfcG9zOworCQkJYnJlYWs7CisJCX0KKworCQluID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IHBvaG1lbGZzX25hbWUsIGhhc2hfbm9kZSk7CisJfQorCW11dGV4X3VubG9jaygmcGktPm9mZnNldF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBsb2ZmX3QgcG9obWVsZnNfZGlyX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworCWZpbGUtPmZfcG9zID0gb2Zmc2V0OworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIG9mZnNldDsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb2htZWxmc19kaXJfZm9wcyA9IHsKKwkub3BlbiA9IHBvaG1lbGZzX2Rpcl9vcGVuLAorCS5yZWFkID0gZ2VuZXJpY19yZWFkX2RpciwKKwkubGxzZWVrID0gcG9obWVsZnNfZGlyX2xzZWVrLAorCS5yZWFkZGlyID0gcG9obWVsZnNfcmVhZGRpciwKK307CisKKy8qCisgKiBMb29rdXAgc2luZ2xlIG9iamVjdCBvbiBzZXJ2ZXIuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfbG9va3VwX3NpbmdsZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwKKwkJc3RydWN0IHFzdHIgKnN0ciwgdTY0IGlubykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHBhcmVudC0+dmZzX2lub2RlLmlfc2IpOworCWxvbmcgcmV0ID0gbXNlY3NfdG9famlmZmllcyg1MDAwKTsKKwlpbnQgZXJyOworCisJc2V0X2JpdChORVRGU19DT01NQU5EX1BFTkRJTkcsICZwYXJlbnQtPnN0YXRlKTsKKwllcnIgPSBwb2htZWxmc19tZXRhX2NvbW1hbmRfZGF0YShwYXJlbnQsIHBhcmVudC0+aW5vLCBORVRGU19MT09LVVAsCisJCQkoY2hhciAqKXN0ci0+bmFtZSwgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCwgTlVMTCwgTlVMTCwgaW5vKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWVyciA9IDA7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHNiLT53YWl0LAorCQkJIXRlc3RfYml0KE5FVEZTX0NPTU1BTkRfUEVORElORywgJnBhcmVudC0+c3RhdGUpLCByZXQpOworCWlmIChyZXQgPT0gMCkKKwkJZXJyID0gLUVUSU1FRE9VVDsKKwllbHNlIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJZXJyID0gLUVJTlRSOworCisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCWNsZWFyX2JpdChORVRGU19DT01NQU5EX1BFTkRJTkcsICZwYXJlbnQtPnN0YXRlKTsKKworCXByaW50aygiJXM6IGZhaWxlZDogcGFyZW50OiAlbGx1LCBpbm86ICVsbHUsIG5hbWU6ICclcycsIGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sIHBhcmVudC0+aW5vLCBpbm8sIHN0ci0+bmFtZSwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBWRlMgbG9va3VwIGNhbGxiYWNrLgorICogV2UgZmlyc3QgdHJ5IHRvIGdldCBpbm9kZSBudW1iZXIgZnJvbSBsb2NhbCBuYW1lIGNhY2hlLCBpZiB3ZSBoYXZlIG9uZSwKKyAqIHRoZW4gaW5vZGUgY2FuIGJlIGZvdW5kIGluIGlub2RlIGNhY2hlLiBJZiB0aGVyZSBpcyBubyBpbm9kZSBvciBubyBvYmplY3QgaW4KKyAqIGxvY2FsIGNhY2hlLCB0cnkgdG8gbG9va3VwIGl0IG9uIHNlcnZlci4gVGhpcyBvbmx5IHNob3VsZCBiZSBkb25lIGZvciBkaXJlY3RvcmllcywKKyAqIHdoaWNoIHdlcmUgbm90IGNyZWF0ZWQgbG9jYWxseSwgb3RoZXJ3aXNlIHJlbW90ZSBzZXJ2ZXIgZG9lcyBub3Qga25vdyBhYm91dCBkaXIgYXQgYWxsLAorICogc28gbm8gbmVlZCB0byB0cnkgdG8ga25vdyB0aGF0LgorICovCitzdHJ1Y3QgZGVudHJ5ICpwb2htZWxmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQgPSBQT0hNRUxGU19JKGRpcik7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpbm8gPSAwOworCWludCBlcnIsIGxvY2tfdHlwZSA9IFBPSE1FTEZTX1JFQURfTE9DSywgbmVlZF9sb2NrOworCXN0cnVjdCBxc3RyIHN0ciA9IGRlbnRyeS0+ZF9uYW1lOworCisJaWYgKChuZC0+aW50ZW50Lm9wZW4uZmxhZ3MgJiBPX0FDQ01PREUpID4gMSkKKwkJbG9ja190eXBlID0gUE9ITUVMRlNfV1JJVEVfTE9DSzsKKworCW5lZWRfbG9jayA9IHBvaG1lbGZzX25lZWRfbG9jayhwYXJlbnQsIGxvY2tfdHlwZSk7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGFyZW50LCAwLCB+MCwgbG9ja190eXBlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXN0ci5oYXNoID0gamhhc2goZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKworCW11dGV4X2xvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCW4gPSBwb2htZWxmc19zZWFyY2hfaGFzaChwYXJlbnQsIHN0ci5oYXNoKTsKKwlpZiAobikKKwkJaW5vID0gbi0+aW5vOworCW11dGV4X3VubG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisKKwlkcHJpbnRrKCIlczogMSBpbm86ICVsdSwgaW5vZGU6ICVwLCBuYW1lOiAnJXMnLCBoYXNoOiAleCwgcGFyZW50X3N0YXRlOiAlbHguXG4iLAorCQkJX19mdW5jX18sIGlubywgaW5vZGUsIHN0ci5uYW1lLCBzdHIuaGFzaCwgcGFyZW50LT5zdGF0ZSk7CisKKwlpZiAoaW5vKSB7CisJCWlub2RlID0gaWxvb2t1cChkaXItPmlfc2IsIGlubyk7CisJCWlmIChpbm9kZSkKKwkJCWdvdG8gb3V0OworCX0KKworCWRwcmludGsoIiVzOiBkaXI6ICVwLCBkaXJfaW5vOiAlbGx1LCBuYW1lOiAnJXMnLCBsZW46ICV1LCBkaXJfc3RhdGU6ICVseCwgaW5vOiAlbHUuXG4iLAorCQkJX19mdW5jX18sIGRpciwgcGFyZW50LT5pbm8sCisJCQlzdHIubmFtZSwgc3RyLmxlbiwgcGFyZW50LT5zdGF0ZSwgaW5vKTsKKworCWlmICghaW5vKSB7CisJCWlmICghbmVlZF9sb2NrKQorCQkJZ290byBvdXQ7CisJfQorCisJZXJyID0gcG9obWVsZnNfbG9va3VwX3NpbmdsZShwYXJlbnQsICZzdHIsIGlubyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpZiAoIWlubykgeworCQltdXRleF9sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKwkJbiA9IHBvaG1lbGZzX3NlYXJjaF9oYXNoKHBhcmVudCwgc3RyLmhhc2gpOworCQlpZiAobikKKwkJCWlubyA9IG4tPmlubzsKKwkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKwl9CisKKwlpZiAoaW5vKSB7CisJCWlub2RlID0gaWxvb2t1cChkaXItPmlfc2IsIGlubyk7CisJCXByaW50aygiJXM6IHNlY29uZCBsb29rdXAgaW5vOiAlbHUsIGlub2RlOiAlcCwgbmFtZTogJyVzJywgaGFzaDogJXguXG4iLAorCQkJCV9fZnVuY19fLCBpbm8sIGlub2RlLCBzdHIubmFtZSwgc3RyLmhhc2gpOworCQlpZiAoIWlub2RlKSB7CisJCQlwcmludGsoIiVzOiBObyBpbm9kZSBmb3IgaW5vOiAlbHUsIG5hbWU6ICclcycsIGhhc2g6ICV4LlxuIiwKKwkJCQlfX2Z1bmNfXywgaW5vLCBzdHIubmFtZSwgc3RyLmhhc2gpOworCQkJLy9yZXR1cm4gTlVMTDsKKwkJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIlczogTm8gaW5vZGUgbnVtYmVyIDogbmFtZTogJyVzJywgaGFzaDogJXguXG4iLAorCQkJX19mdW5jX18sIHN0ci5uYW1lLCBzdHIuaGFzaCk7CisJfQorb3V0OgorCXJldHVybiBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKK30KKworLyoKKyAqIENyZWF0ZSBuZXcgb2JqZWN0IGluIGxvY2FsIGNhY2hlLiBPYmplY3Qgd2lsbCBiZSBzeW5jZWQgdG8gc2VydmVyCisgKiBkdXJpbmcgd3JpdGViYWNrIGZvciBnaXZlbiBpbm9kZS4KKyAqLworc3RydWN0IHBvaG1lbGZzX2lub2RlICpwb2htZWxmc19jcmVhdGVfZW50cnlfbG9jYWwoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsCisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBxc3RyICpzdHIsIHU2NCBzdGFydCwgaW50IG1vZGUpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpucGk7CisJaW50IGVyciA9IC1FTk9NRU07CisJc3RydWN0IG5ldGZzX2lub2RlX2luZm8gaW5mbzsKKworCWRwcmludGsoIiVzOiBuYW1lOiAnJXMnLCBtb2RlOiAlbywgc3RhcnQ6ICVsbHUuXG4iLAorCQkJX19mdW5jX18sIHN0ci0+bmFtZSwgbW9kZSwgc3RhcnQpOworCisJaW5mby5tb2RlID0gbW9kZTsKKwlpbmZvLmlubyA9IHN0YXJ0OworCisJaWYgKCFzdGFydCkKKwkJaW5mby5pbm8gPSBwb2htZWxmc19uZXdfaW5vKHBzYik7CisKKwlpbmZvLm5saW5rID0gU19JU0RJUihtb2RlKT8yOjE7CisJaW5mby51aWQgPSBjdXJyZW50X2ZzdWlkKCk7CisJaW5mby5naWQgPSBjdXJyZW50X2ZzZ2lkKCk7CisJaW5mby5zaXplID0gMDsKKwlpbmZvLmJsb2Nrc2l6ZSA9IDUxMjsKKwlpbmZvLmJsb2NrcyA9IDA7CisJaW5mby5yZGV2ID0gMDsKKwlpbmZvLnZlcnNpb24gPSAwOworCisJbnBpID0gcG9obWVsZnNfbmV3X2lub2RlKHBzYiwgcGFyZW50LCBzdHIsICZpbmZvLCAhIXN0YXJ0KTsKKwlpZiAoSVNfRVJSKG5waSkpIHsKKwkJZXJyID0gUFRSX0VSUihucGkpOworCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCX0KKworCXJldHVybiBucGk7CisKK2Vycl9vdXRfdW5sb2NrOgorCWRwcmludGsoIiVzOiBlcnI6ICVkLlxuIiwgX19mdW5jX18sIGVycik7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworLyoKKyAqIENyZWF0ZSBsb2NhbCBvYmplY3QgYW5kIGJpbmQgaXQgdG8gZGVudHJ5LgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyZWF0ZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1NjQgc3RhcnQsIGludCBtb2RlKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoZGlyLT5pX3NiKTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKm5waSwgKnBhcmVudDsKKwlzdHJ1Y3QgcXN0ciBzdHIgPSBkZW50cnktPmRfbmFtZTsKKwlpbnQgZXJyOworCisJcGFyZW50ID0gUE9ITUVMRlNfSShkaXIpOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBhcmVudCwgMCwgfjAsIFBPSE1FTEZTX1dSSVRFX0xPQ0spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzdHIuaGFzaCA9IGpoYXNoKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgMCk7CisKKwlucGkgPSBwb2htZWxmc19jcmVhdGVfZW50cnlfbG9jYWwocHNiLCBwYXJlbnQsICZzdHIsIHN0YXJ0LCBtb2RlKTsKKwlpZiAoSVNfRVJSKG5waSkpCisJCXJldHVybiBQVFJfRVJSKG5waSk7CisKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgJm5waS0+dmZzX2lub2RlKTsKKworCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIGlub2RlOiAlbGx1LCBuYW1lOiAnJXMnLCBwYXJlbnRfbmxpbms6ICVkLCBubGluazogJWQuXG4iLAorCQkJX19mdW5jX18sIHBhcmVudC0+aW5vLCBucGktPmlubywgZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCShzaWduZWQpZGlyLT5pX25saW5rLCAoc2lnbmVkKW5waS0+dmZzX2lub2RlLmlfbmxpbmspOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWRlMgY3JlYXRlIGFuZCBta2RpciBjYWxsYmFja3MuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlyZXR1cm4gcG9obWVsZnNfY3JlYXRlX2VudHJ5KGRpciwgZGVudHJ5LCAwLCBtb2RlKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlpbnQgZXJyOworCisJaW5vZGVfaW5jX2xpbmtfY291bnQoZGlyKTsKKwllcnIgPSBwb2htZWxmc19jcmVhdGVfZW50cnkoZGlyLCBkZW50cnksIDAsIG1vZGUgfCBTX0lGRElSKTsKKwlpZiAoZXJyKQorCQlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19yZW1vdmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGRpci0+aV9zYik7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCA9IFBPSE1FTEZTX0koZGlyKSwgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisJaW50IGVyciA9IC1FTk9FTlQ7CisJc3RydWN0IHFzdHIgc3RyID0gZGVudHJ5LT5kX25hbWU7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGFyZW50LCAwLCB+MCwgUE9ITUVMRlNfV1JJVEVfTE9DSyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN0ci5oYXNoID0gamhhc2goZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKworCWRwcmludGsoIiVzOiBkaXJfaW5vOiAlbGx1LCBpbm9kZTogJWxsdSwgbmFtZTogJyVzJywgbmxpbms6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBwYXJlbnQtPmlubywgcGktPmlubywKKwkJCXN0ci5uYW1lLCAoc2lnbmVkKWlub2RlLT5pX25saW5rKTsKKworCUJVR19PTighaW5vZGUpOworCisJbXV0ZXhfbG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisJbiA9IHBvaG1lbGZzX3NlYXJjaF9oYXNoKHBhcmVudCwgc3RyLmhhc2gpOworCWlmIChuKSB7CisJCXBvaG1lbGZzX2ZpeF9vZmZzZXQocGFyZW50LCBuKTsKKwkJaWYgKHRlc3RfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpKSB7CisJCQlwb2htZWxmc19yZW1vdmVfY2hpbGQocGksIG4pOworCQl9CisJCXBvaG1lbGZzX25hbWVfZnJlZShwYXJlbnQsIG4pOworCQllcnIgPSAwOworCX0KKwltdXRleF91bmxvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCisJaWYgKCFlcnIpIHsKKwkJcHNiLT5hdmFpbF9zaXplICs9IGlub2RlLT5pX3NpemU7CisKKwkJcG9obWVsZnNfaW5vZGVfZGVsX2lub2RlKHBzYiwgcGkpOworCisJCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKKworCQlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZTsKKwkJaWYgKGlub2RlLT5pX25saW5rKQorCQkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOworCX0KKwlkcHJpbnRrKCIlczogaW5vZGU6ICVwLCBsb2NrOiAlbGQsIHVuaGFzaGVkOiAlZC5cbiIsCisJCV9fZnVuY19fLCBwaSwgaW5vZGUtPmlfc3RhdGUgJiBJX0xPQ0ssIGhsaXN0X3VuaGFzaGVkKCZpbm9kZS0+aV9oYXNoKSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVW5saW5rIGFuZCBybWRpciBWRlMgY2FsbGJhY2tzLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiBwb2htZWxmc19yZW1vdmVfZW50cnkoZGlyLCBkZW50cnkpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCisJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgaW5vZGU6ICVsbHUsIG5hbWU6ICclcycsIHBhcmVudF9ubGluazogJWQsIG5saW5rOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgUE9ITUVMRlNfSShkaXIpLT5pbm8sIFBPSE1FTEZTX0koaW5vZGUpLT5pbm8sCisJCQlkZW50cnktPmRfbmFtZS5uYW1lLCAoc2lnbmVkKWRpci0+aV9ubGluaywgKHNpZ25lZClpbm9kZS0+aV9ubGluayk7CisKKwllcnIgPSBwb2htZWxmc19yZW1vdmVfZW50cnkoZGlyLCBkZW50cnkpOworCWlmICghZXJyKSB7CisJCWlub2RlX2RlY19saW5rX2NvdW50KGRpcik7CisJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogTGluayBjcmVhdGlvbiBpcyBzeW5jaHJvbm91cy4KKyAqIEknbSBsYXp5LgorICogRWFydGggaXMgc29tZXdoYXQgcm91bmQuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfY3JlYXRlX2xpbmsoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBxc3RyICpvYmosCisJCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqdGFyZ2V0LCBzdHJ1Y3QgcXN0ciAqdHN0cikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcGFyZW50LT52ZnNfaW5vZGUuaV9zYjsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHNiKTsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXZvaWQgKmRhdGE7CisJaW50IGVyciwgcGFyZW50X2xlbiwgdGFyZ2V0X2xlbiA9IDAsIGN1cl9sZW4sIHBhdGhfc2l6ZSA9IDA7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGFyZW50LCAwLCB+MCwgUE9ITUVMRlNfV1JJVEVfTE9DSyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNiLT5zX29wLT53cml0ZV9pbm9kZSgmcGFyZW50LT52ZnNfaW5vZGUsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJaWYgKHRzdHIpCisJCXRhcmdldF9sZW4gPSB0c3RyLT5sZW47CisKKwlwYXJlbnRfbGVuID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGFyZW50KTsKKwlpZiAodGFyZ2V0KQorCQl0YXJnZXRfbGVuICs9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHRhcmdldCk7CisKKwlpZiAocGFyZW50X2xlbiA8IDApIHsKKwkJZXJyID0gcGFyZW50X2xlbjsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJaWYgKHRhcmdldF9sZW4gPCAwKSB7CisJCWVyciA9IHRhcmdldF9sZW47CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIHBhcmVudF9sZW4gKyB0YXJnZXRfbGVuICsgb2JqLT5sZW4gKyAyLCAwLCAwKTsKKwlpZiAoIXQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCWN1cl9sZW4gPSBuZXRmc190cmFuc19jdXJfbGVuKHQpOworCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKwlpZiAoSVNfRVJSKGNtZCkpIHsKKwkJZXJyID0gUFRSX0VSUihjbWQpOworCQlnb3RvIGVycl9vdXRfZnJlZTsKKwl9CisKKwlkYXRhID0gKHZvaWQgKikoY21kICsgMSk7CisJY3VyX2xlbiAtPSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCk7CisKKwllcnIgPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGFyZW50LCBkYXRhLCBwYXJlbnRfbGVuKTsKKwlpZiAoZXJyID4gMCkgeworCQkvKiBEbyBub3QgcGxhY2UgbnVsbC1ieXRlIGJlZm9yZSB0aGUgc2xhc2ggKi8KKwkJcGF0aF9zaXplID0gZXJyIC0gMTsKKwkJY3VyX2xlbiAtPSBwYXRoX3NpemU7CisKKwkJZXJyID0gc25wcmludGYoZGF0YSArIHBhdGhfc2l6ZSwgY3VyX2xlbiwgIi8lc3wiLCBvYmotPm5hbWUpOworCisJCXBhdGhfc2l6ZSArPSBlcnI7CisJCWN1cl9sZW4gLT0gZXJyOworCisJCWNtZC0+ZXh0ID0gcGF0aF9zaXplIC0gMTsgLyogTm8gfCBzeW1ib2wgKi8KKworCQlpZiAodGFyZ2V0KSB7CisJCQllcnIgPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcodGFyZ2V0LCBkYXRhICsgcGF0aF9zaXplLCB0YXJnZXRfbGVuKTsKKwkJCWlmIChlcnIgPiAwKSB7CisJCQkJcGF0aF9zaXplICs9IGVycjsKKwkJCQljdXJfbGVuIC09IGVycjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCWNtZC0+c3RhcnQgPSAwOworCisJaWYgKCF0YXJnZXQgJiYgdHN0cikgeworCQlpZiAodHN0ci0+bGVuID4gY3VyX2xlbiAtIDEpIHsKKwkJCWVyciA9IC1FTkFNRVRPT0xPTkc7CisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJfQorCisJCWVyciA9IHNucHJpbnRmKGRhdGEgKyBwYXRoX3NpemUsIGN1cl9sZW4sICIlcyIsIHRzdHItPm5hbWUpICsgMTsgLyogMC1ieXRlICovCisJCXBhdGhfc2l6ZSArPSBlcnI7CisJCWN1cl9sZW4gLT0gZXJyOworCQljbWQtPnN0YXJ0ID0gMTsKKwl9CisKKwlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBvYmo6ICclcycsIHRhcmdldF9pbm9kZTogJWxsdSwgdGFyZ2V0X3N0cjogJyVzJywgZnVsbDogJyVzJy5cbiIsCisJCQlfX2Z1bmNfXywgcGFyZW50LT5pbm8sIG9iai0+bmFtZSwgKHRhcmdldCk/dGFyZ2V0LT5pbm86MCwgKHRzdHIpP3RzdHItPm5hbWU6TlVMTCwKKwkJCShjaGFyICopZGF0YSk7CisKKwljbWQtPmNtZCA9IE5FVEZTX0xJTks7CisJY21kLT5zaXplID0gcGF0aF9zaXplOworCWNtZC0+aWQgPSBwYXJlbnQtPmlubzsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCBwYXRoX3NpemUpOworCisJZXJyID0gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCXQtPnJlc3VsdCA9IGVycjsKKwluZXRmc190cmFuc19wdXQodCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqICBWRlMgaGFyZCBhbmQgc29mdCBsaW5rIGNhbGxiYWNrcy4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCXN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJaW50IGVycjsKKwlzdHJ1Y3QgcXN0ciBzdHIgPSBkZW50cnktPmRfbmFtZTsKKworCXN0ci5oYXNoID0gamhhc2goZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKworCWVyciA9IGlub2RlLT5pX3NiLT5zX29wLT53cml0ZV9pbm9kZShpbm9kZSwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBvaG1lbGZzX2NyZWF0ZV9saW5rKFBPSE1FTEZTX0koZGlyKSwgJnN0ciwgcGksIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gcG9obWVsZnNfY3JlYXRlX2VudHJ5KGRpciwgZGVudHJ5LCBwaS0+aW5vLCBpbm9kZS0+aV9tb2RlKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJc3RydWN0IHFzdHIgc3ltX3N0cjsKKwlzdHJ1Y3QgcXN0ciBzdHIgPSBkZW50cnktPmRfbmFtZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnI7CisKKwlzdHIuaGFzaCA9IGpoYXNoKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgMCk7CisKKwlzeW1fc3RyLm5hbWUgPSBzeW1uYW1lOworCXN5bV9zdHIubGVuID0gc3RybGVuKHN5bW5hbWUpOworCisJZXJyID0gcG9obWVsZnNfY3JlYXRlX2xpbmsoUE9ITUVMRlNfSShkaXIpLCAmc3RyLCBOVUxMLCAmc3ltX3N0cik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllcnIgPSBwb2htZWxmc19jcmVhdGVfZW50cnkoZGlyLCBkZW50cnksIDAsIFNfSUZMTksgfCBTX0lSV1hVIHwgU19JUldYRyB8IFNfSVJXWE8pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisKKwllcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIHN5bV9zdHIubGVuICsgMSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCXJldHVybiAwOworCitlcnJfb3V0X3B1dDoKKwlpcHV0KGlub2RlKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3NlbmRfcmVuYW1lKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LAorCQlzdHJ1Y3QgcXN0ciAqc3RyKQoreworCWludCBwYXRoX2xlbiwgZXJyLCB0b3RhbF9sZW4gPSAwLCBpbm9kZV9sZW4sIHBhcmVudF9sZW47CisJY2hhciAqcGF0aDsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IocGktPnZmc19pbm9kZS5pX3NiKTsKKworCXBhcmVudF9sZW4gPSBwb2htZWxmc19wYXRoX2xlbmd0aChwYXJlbnQpOworCWlub2RlX2xlbiA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBpKTsKKworCWlmIChwYXJlbnRfbGVuIDwgMCB8fCBpbm9kZV9sZW4gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhdGhfbGVuID0gcGFyZW50X2xlbiArIGlub2RlX2xlbiArIHN0ci0+bGVuICsgMzsKKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIHBhdGhfbGVuLCAwLCAwKTsKKwlpZiAoIXQpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKwlwYXRoID0gKGNoYXIgKikoY21kICsgMSk7CisKKwllcnIgPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGksIHBhdGgsIGlub2RlX2xlbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF91bmxvY2s7CisKKwljbWQtPmV4dCA9IGVycjsKKworCXBhdGggKz0gZXJyOworCXRvdGFsX2xlbiArPSBlcnI7CisJcGF0aF9sZW4gLT0gZXJyOworCisJKnBhdGggPSAnfCc7CisJcGF0aCsrOworCXRvdGFsX2xlbisrOworCXBhdGhfbGVuLS07CisKKwllcnIgPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGFyZW50LCBwYXRoLCBwYXJlbnRfbGVuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X3VubG9jazsKKworCS8qCisJICogRG8gbm90IHBsYWNlIGEgbnVsbC1ieXRlIGJlZm9yZSB0aGUgZmluYWwgc2xhc2ggYW5kIHRoZSBuYW1lLgorCSAqLworCWVyci0tOworCXBhdGggKz0gZXJyOworCXRvdGFsX2xlbiArPSBlcnI7CisJcGF0aF9sZW4gLT0gZXJyOworCisJZXJyID0gc25wcmludGYocGF0aCwgcGF0aF9sZW4gLSAxLCAiLyVzIiwgc3RyLT5uYW1lKTsKKworCXRvdGFsX2xlbiArPSBlcnIgKyAxOyAvKiAwIHN5bWJvbCAqLworCXBhdGhfbGVuIC09IGVyciArIDE7CisKKwljbWQtPmNtZCA9IE5FVEZTX1JFTkFNRTsKKwljbWQtPmlkID0gcGktPmlubzsKKwljbWQtPnN0YXJ0ID0gcGFyZW50LT5pbm87CisJY21kLT5zaXplID0gdG90YWxfbGVuOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIHRvdGFsX2xlbik7CisKKwlyZXR1cm4gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisKK2Vycl9vdXRfdW5sb2NrOgorCW5ldGZzX3RyYW5zX2ZyZWUodCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCQkJc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqb2xkX3BhcmVudCwgKnBpLCAqbmV3X3BhcmVudDsKKwlzdHJ1Y3QgcXN0ciBzdHIgPSBuZXdfZGVudHJ5LT5kX25hbWU7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisJdW5zaWduZWQgaW50IG9sZF9oYXNoOworCWludCBlcnIgPSAtRU5PRU5UOworCisJcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlvbGRfcGFyZW50ID0gUE9ITUVMRlNfSShvbGRfZGlyKTsKKworCWlmIChuZXdfZGlyKSB7CisJCW5ld19kaXItPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKG5ld19kaXIsIDApOworCX0KKworCW9sZF9oYXNoID0gamhhc2gob2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsIG9sZF9kZW50cnktPmRfbmFtZS5sZW4sIDApOworCXN0ci5oYXNoID0gamhhc2gobmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsIG5ld19kZW50cnktPmRfbmFtZS5sZW4sIDApOworCisJc3RyLmxlbiA9IG5ld19kZW50cnktPmRfbmFtZS5sZW47CisJc3RyLm5hbWUgPSBuZXdfZGVudHJ5LT5kX25hbWUubmFtZTsKKwlzdHIuaGFzaCA9IGpoYXNoKG5ld19kZW50cnktPmRfbmFtZS5uYW1lLCBuZXdfZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKworCWlmIChuZXdfZGlyKSB7CisJCW5ld19wYXJlbnQgPSBQT0hNRUxGU19JKG5ld19kaXIpOworCQllcnIgPSAtRU5PVEVNUFRZOworCisJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmCisJCQkJbmV3X3BhcmVudC0+dG90YWxfbGVuIDw9IDMpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9IGVsc2UgeworCQluZXdfcGFyZW50ID0gb2xkX3BhcmVudDsKKwl9CisKKwlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBwYXJlbnQ6ICVsbHUsIG5hbWU6ICclcycgLT4gcGFyZW50OiAlbGx1LCBuYW1lOiAnJXMnLCBpX3NpemU6ICVsbHUuXG4iLAorCQkJX19mdW5jX18sIHBpLT5pbm8sIG9sZF9wYXJlbnQtPmlubywgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQluZXdfcGFyZW50LT5pbm8sIG5ld19kZW50cnktPmRfbmFtZS5uYW1lLCBpbm9kZS0+aV9zaXplKTsKKworCWlmICh0ZXN0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKSAmJgorCQkJdGVzdF9iaXQoTkVURlNfSU5PREVfT1dORUQsICZwaS0+c3RhdGUpKSB7CisJCWVyciA9IHBvaG1lbGZzX3NlbmRfcmVuYW1lKHBpLCBuZXdfcGFyZW50LCAmc3RyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCW4gPSBwb2htZWxmc19uYW1lX2FsbG9jKHN0ci5sZW4gKyAxKTsKKwlpZiAoIW4pCisJCWdvdG8gZXJyX291dF9leGl0OworCisJbXV0ZXhfbG9jaygmbmV3X3BhcmVudC0+b2Zmc2V0X2xvY2spOworCW4tPmlubyA9IHBpLT5pbm87CisJbi0+bW9kZSA9IGlub2RlLT5pX21vZGU7CisJbi0+bGVuID0gc3RyLmxlbjsKKwluLT5oYXNoID0gc3RyLmhhc2g7CisJc3ByaW50ZihuLT5kYXRhLCAiJXMiLCBzdHIubmFtZSk7CisKKwllcnIgPSBwb2htZWxmc19pbnNlcnRfbmFtZShuZXdfcGFyZW50LCBuKTsKKwltdXRleF91bmxvY2soJm5ld19wYXJlbnQtPm9mZnNldF9sb2NrKTsKKworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJbXV0ZXhfbG9jaygmb2xkX3BhcmVudC0+b2Zmc2V0X2xvY2spOworCW4gPSBwb2htZWxmc19zZWFyY2hfaGFzaChvbGRfcGFyZW50LCBvbGRfaGFzaCk7CisJaWYgKG4pCisJCXBvaG1lbGZzX25hbWVfZGVsKG9sZF9wYXJlbnQsIG4pOworCW11dGV4X3VubG9jaygmb2xkX3BhcmVudC0+b2Zmc2V0X2xvY2spOworCisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJbWFya19pbm9kZV9kaXJ0eSgmbmV3X3BhcmVudC0+dmZzX2lub2RlKTsKKworCVdBUk5fT05fT05DRShsaXN0X2VtcHR5KCZpbm9kZS0+aV9kZW50cnkpKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisKKwljbGVhcl9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSk7CisKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUE9ITUVMRlMgZGlyZWN0b3J5IGlub2RlIG9wZXJhdGlvbnMuCisgKi8KK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBvaG1lbGZzX2Rpcl9pbm9kZV9vcHMgPSB7CisJLmxpbmsJCT0gcG9obWVsZnNfbGluaywKKwkuc3ltbGluawk9IHBvaG1lbGZzX3N5bWxpbmssCisJLnVubGluawkJPSBwb2htZWxmc191bmxpbmssCisJLm1rZGlyCQk9IHBvaG1lbGZzX21rZGlyLAorCS5ybWRpcgkJPSBwb2htZWxmc19ybWRpciwKKwkuY3JlYXRlCQk9IHBvaG1lbGZzX2NyZWF0ZSwKKwkubG9va3VwIAk9IHBvaG1lbGZzX2xvb2t1cCwKKwkuc2V0YXR0cgk9IHBvaG1lbGZzX3NldGF0dHIsCisJLnJlbmFtZQkJPSBwb2htZWxmc19yZW5hbWUsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmYxNjUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKQEAgLTAsMCArMSwxOTc2IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworI2RlZmluZSBQT0hNRUxGU19NQUdJQ19OVU0JMHg1MDRmNDgyZQorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBvaG1lbGZzX2lub2RlX2NhY2hlOworCisvKgorICogUmVtb3ZlcyBpbm9kZSBmcm9tIGFsbCB0cmVlcywgZHJvcHMgbG9jYWwgbmFtZSBjYWNoZSBhbmQgcmVtb3ZlcyBhbGwgcXVldWVkCisgKiByZXF1ZXN0cyBmb3Igb2JqZWN0IHJlbW92YWwuCisgKi8KK3ZvaWQgcG9obWVsZnNfaW5vZGVfZGVsX2lub2RlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpKQoreworCW11dGV4X2xvY2soJnBpLT5vZmZzZXRfbG9jayk7CisJcG9obWVsZnNfZnJlZV9uYW1lcyhwaSk7CisJbXV0ZXhfdW5sb2NrKCZwaS0+b2Zmc2V0X2xvY2spOworCisJZHByaW50aygiJXM6IGRlbGV0ZWQgc3R1ZmYgaW4gaW5vOiAlbGx1LlxuIiwgX19mdW5jX18sIHBpLT5pbm8pOworfQorCisvKgorICogU3luYyBpbm9kZSB0byBzZXJ2ZXIuCisgKiBSZXR1cm5zIHplcm8gaW4gc3VjY2VzcyBhbmQgbmVnYXRpdmUgZXJyb3IgdmFsdWUgb3RoZXJ3aXNlLgorICogSXQgd2lsbCBnYXRoZXIgcGF0aCB0byByb290IGRpcmVjdG9yeSBpbnRvIHN0cnVjdHVyZXMgY29udGFpbmluZworICogY3JlYXRpb24gbW9kZSwgcGVybWlzc2lvbnMgYW5kIG5hbWVzLCBzbyB0aGF0IHRoZSB3aG9sZSBwYXRoCisgKiB0byBnaXZlbiBpbm9kZSBjb3VsZCBiZSBjcmVhdGVkIHVzaW5nIG9ubHkgc2luZ2xlIG5ldHdvcmsgY29tbWFuZC4KKyAqLworaW50IHBvaG1lbGZzX3dyaXRlX2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnRyYW5zKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlpbnQgZXJyID0gLUVOT01FTSwgc2l6ZTsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJdm9pZCAqZGF0YTsKKwlpbnQgY3VyX2xlbiA9IG5ldGZzX3RyYW5zX2N1cl9sZW4odHJhbnMpOworCisJaWYgKHVubGlrZWx5KGN1cl9sZW4gPCAwKSkKKwkJcmV0dXJuIC1FVE9PU01BTEw7CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHRyYW5zKTsKKwljdXJfbGVuIC09IHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKTsKKworCWRhdGEgPSAodm9pZCAqKShjbWQgKyAxKTsKKworCWVyciA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwaSwgZGF0YSwgY3VyX2xlbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9leGl0OworCisJc2l6ZSA9IGVycjsKKworCWNtZC0+c3RhcnQgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJY21kLT5jbWQgPSBORVRGU19DUkVBVEU7CisJY21kLT5zaXplID0gc2l6ZTsKKwljbWQtPmlkID0gcGktPmlubzsKKwljbWQtPmV4dCA9IGlub2RlLT5pX21vZGU7CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdHJhbnMsIHNpemUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlwcmludGsoIiVzOiBjb21wbGV0ZWQgaW5vOiAlbGx1LCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHBpLT5pbm8sIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc193cml0ZV90cmFuc19jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9udW0sCisJCXZvaWQgKnByaXZhdGUsIGludCBlcnIpCit7CisJdW5zaWduZWQgaTsKKworCWRwcmludGsoIiVzOiBwYWdlczogJWx1LSVsdSwgcGFnZV9udW06ICV1LCBlcnI6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBwYWdlc1swXS0+aW5kZXgsIHBhZ2VzW3BhZ2VfbnVtLTFdLT5pbmRleCwKKwkJCXBhZ2VfbnVtLCBlcnIpOworCisJZm9yIChpID0gMDsgaSA8IHBhZ2VfbnVtOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKKworCQlpZiAoIXBhZ2UpCisJCQljb250aW51ZTsKKworCQllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCQl9CisKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKworCQkvKiBkcHJpbnRrKCIlczogJTN1LyV1OiBwYWdlOiAlcC5cbiIsIF9fZnVuY19fLCBpLCBwYWdlX251bSwgcGFnZSk7ICovCisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfaW5vZGVfaGFzX2RpcnR5X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4KQoreworCWludCByZXQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmV0ID0gcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF90YWcoJm1hcHBpbmctPnBhZ2VfdHJlZSwKKwkJCQkodm9pZCAqKikmcGFnZSwgaW5kZXgsIDEsIFBBR0VDQUNIRV9UQUdfRElSVFkpOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOworCWludCBlcnIgPSAwOworCWludCBkb25lID0gMDsKKwlpbnQgbnJfcGFnZXM7CisJcGdvZmZfdCBpbmRleDsKKwlwZ29mZl90IGVuZDsJCS8qIEluY2x1c2l2ZSAqLworCWludCBzY2FubmVkID0gMDsKKwlpbnQgcmFuZ2Vfd2hvbGUgPSAwOworCisJaWYgKHdiYy0+bm9uYmxvY2tpbmcgJiYgYmRpX3dyaXRlX2Nvbmdlc3RlZChiZGkpKSB7CisJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7CisJCXJldHVybiAwOworCX0KKworCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykgeworCQlpbmRleCA9IG1hcHBpbmctPndyaXRlYmFja19pbmRleDsgLyogU3RhcnQgZnJvbSBwcmV2IG9mZnNldCAqLworCQllbmQgPSAtMTsKKwl9IGVsc2UgeworCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwkJZW5kID0gd2JjLT5yYW5nZV9lbmQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwkJaWYgKHdiYy0+cmFuZ2Vfc3RhcnQgPT0gMCAmJiB3YmMtPnJhbmdlX2VuZCA9PSBMTE9OR19NQVgpCisJCQlyYW5nZV93aG9sZSA9IDE7CisJCXNjYW5uZWQgPSAxOworCX0KK3JldHJ5OgorCXdoaWxlICghZG9uZSAmJiAoaW5kZXggPD0gZW5kKSkgeworCQl1bnNpZ25lZCBpbnQgaSA9IG1pbihlbmQgLSBpbmRleCwgKHBnb2ZmX3QpcHNiLT50cmFuc19tYXhfcGFnZXMpOworCQlpbnQgcGF0aF9sZW47CisJCXN0cnVjdCBuZXRmc190cmFucyAqdHJhbnM7CisKKwkJZXJyID0gcG9obWVsZnNfaW5vZGVfaGFzX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIGluZGV4KTsKKwkJaWYgKCFlcnIpCisJCQlicmVhazsKKworCQllcnIgPSBwb2htZWxmc19wYXRoX2xlbmd0aChwaSk7CisJCWlmIChlcnIgPCAwKQorCQkJYnJlYWs7CisKKwkJcGF0aF9sZW4gPSBlcnI7CisKKwkJaWYgKHBhdGhfbGVuIDw9IDIpIHsKKwkJCWVyciA9IC1FTk9FTlQ7CisJCQlicmVhazsKKwkJfQorCisJCXRyYW5zID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBwYXRoX2xlbiwgMCwgaSk7CisJCWlmICghdHJhbnMpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQl0cmFucy0+Y29tcGxldGUgPSAmcG9obWVsZnNfd3JpdGVfdHJhbnNfY29tcGxldGU7CisKKwkJdHJhbnMtPnBhZ2VfbnVtID0gbnJfcGFnZXMgPSBmaW5kX2dldF9wYWdlc190YWcobWFwcGluZywgJmluZGV4LAorCQkJCVBBR0VDQUNIRV9UQUdfRElSVFksIHRyYW5zLT5wYWdlX251bSwKKwkJCQl0cmFucy0+cGFnZXMpOworCisJCWRwcmludGsoIiVzOiB0OiAlcCwgbnJfcGFnZXM6ICV1LCBlbmQ6ICVsdSwgaW5kZXg6ICVsdSwgbWF4OiAldS5cbiIsCisJCQkJX19mdW5jX18sIHRyYW5zLCBucl9wYWdlcywgZW5kLCBpbmRleCwgdHJhbnMtPnBhZ2VfbnVtKTsKKworCQlpZiAoIW5yX3BhZ2VzKQorCQkJZ290byBlcnJfb3V0X3Jlc2V0OworCisJCWVyciA9IHBvaG1lbGZzX3dyaXRlX2lub2RlX2NyZWF0ZShpbm9kZSwgdHJhbnMpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3Jlc2V0OworCisJCWVyciA9IDA7CisJCXNjYW5uZWQgPSAxOworCisJCWZvciAoaSA9IDA7IGkgPCB0cmFucy0+cGFnZV9udW07IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB0cmFucy0+cGFnZXNbaV07CisKKwkJCWxvY2tfcGFnZShwYWdlKTsKKworCQkJaWYgKHVubGlrZWx5KHBhZ2UtPm1hcHBpbmcgIT0gbWFwcGluZykpCisJCQkJZ290byBvdXRfY29udGludWU7CisKKwkJCWlmICghd2JjLT5yYW5nZV9jeWNsaWMgJiYgcGFnZS0+aW5kZXggPiBlbmQpIHsKKwkJCQlkb25lID0gMTsKKwkJCQlnb3RvIG91dF9jb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHdiYy0+c3luY19tb2RlICE9IFdCX1NZTkNfTk9ORSkKKwkJCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCisJCQlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSB8fAorCQkJICAgICFjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlKSkgeworCQkJCWRwcmludGsoIiVzOiBub3QgY2xlYXIgZm9yIGlvIHBhZ2U6ICVwLCB3cml0ZWJhY2s6ICVkLlxuIiwKKwkJCQkJCV9fZnVuY19fLCBwYWdlLCBQYWdlV3JpdGViYWNrKHBhZ2UpKTsKKwkJCQlnb3RvIG91dF9jb250aW51ZTsKKwkJCX0KKworCQkJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCisJCQl0cmFucy0+YXR0YWNoZWRfc2l6ZSArPSBwYWdlX3ByaXZhdGUocGFnZSk7CisJCQl0cmFucy0+YXR0YWNoZWRfcGFnZXMrKzsKKyNpZiAwCisJCQlkcHJpbnRrKCIlczogJXUvJXUgYWRkZWQgdHJhbnM6ICVwLCBnZW46ICV1LCBwYWdlOiAlcCwgW0hpZ2g6ICVkXSwgc2l6ZTogJWx1LCBpZHg6ICVsdS5cbiIsCisJCQkJCV9fZnVuY19fLCBpLCB0cmFucy0+cGFnZV9udW0sIHRyYW5zLCB0cmFucy0+Z2VuLCBwYWdlLAorCQkJCQkhIVBhZ2VIaWdoTWVtKHBhZ2UpLCBwYWdlX3ByaXZhdGUocGFnZSksIHBhZ2UtPmluZGV4KTsKKyNlbmRpZgorCQkJd2JjLT5ucl90b193cml0ZS0tOworCisJCQlpZiAod2JjLT5ucl90b193cml0ZSA8PSAwKQorCQkJCWRvbmUgPSAxOworCQkJaWYgKHdiYy0+bm9uYmxvY2tpbmcgJiYgYmRpX3dyaXRlX2Nvbmdlc3RlZChiZGkpKSB7CisJCQkJd2JjLT5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMTsKKwkJCQlkb25lID0gMTsKKwkJCX0KKworCQkJY29udGludWU7CitvdXRfY29udGludWU6CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCXRyYW5zLT5wYWdlc1tpXSA9IE5VTEw7CisJCX0KKworCQllcnIgPSBuZXRmc190cmFuc19maW5pc2godHJhbnMsIHBzYik7CisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQljb250aW51ZTsKKworZXJyX291dF9yZXNldDoKKwkJdHJhbnMtPnJlc3VsdCA9IGVycjsKKwkJbmV0ZnNfdHJhbnNfcmVzZXQodHJhbnMpOworCQluZXRmc190cmFuc19wdXQodHJhbnMpOworCQlicmVhazsKKwl9CisKKwlpZiAoIXNjYW5uZWQgJiYgIWRvbmUpIHsKKwkJLyoKKwkJICogV2UgaGl0IHRoZSBsYXN0IHBhZ2UgYW5kIHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lOiB3cmFwCisJCSAqIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlCisJCSAqLworCQlzY2FubmVkID0gMTsKKwkJaW5kZXggPSAwOworCQlnb3RvIHJldHJ5OworCX0KKworCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgd2JjLT5ucl90b193cml0ZSA+IDApKQorCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBpbmRleDsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBJbm9kZSB3cml0ZWJhY2sgY3JlYXRpb24gY29tcGxldGlvbiBjYWxsYmFjay4KKyAqIE9ubHkgaW52b2tlZCBmb3IganVzdCBjcmVhdGVkIGlub2Rlcywgd2hpY2ggZG8gbm90IGhhdmUgcGFnZXMgYXR0YWNoZWQsCisgKiBsaWtlIGRpcnMgYW5kIGVtcHR5IGZpbGVzLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlX2lub2RlX2NvbXBsZXRlKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX251bSwKKwkJdm9pZCAqcHJpdmF0ZSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcHJpdmF0ZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisKKwlpZiAoaW5vZGUpIHsKKwkJaWYgKGVycikgeworCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJCQljbGVhcl9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSk7CisJCX0gZWxzZSB7CisJCQlzZXRfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpOworCQl9CisKKwkJcG9obWVsZnNfcHV0X2lub2RlKHBpKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfd3JpdGVfY3JlYXRlX2lub2RlKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmcGktPnZmc19pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKwlpbnQgZXJyOworCisJaWYgKHRlc3RfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpKQorCQlyZXR1cm4gMDsKKworCWRwcmludGsoIiVzOiBzdGFydGVkIGlubzogJWxsdS5cbiIsIF9fZnVuY19fLCBwaS0+aW5vKTsKKworCWVyciA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBlcnIgKyAxLCAwLCAwKTsKKwlpZiAoIXQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X3B1dDsKKwl9CisJdC0+Y29tcGxldGUgPSBwb2htZWxmc193cml0ZV9pbm9kZV9jb21wbGV0ZTsKKwl0LT5wcml2YXRlID0gaWdyYWIoaW5vZGUpOworCWlmICghdC0+cHJpdmF0ZSkgeworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9vdXRfcHV0OworCX0KKworCWVyciA9IHBvaG1lbGZzX3dyaXRlX2lub2RlX2NyZWF0ZShpbm9kZSwgdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCW5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBQT0hNRUxGU19TQihpbm9kZS0+aV9zYikpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcHV0OgorCXQtPnJlc3VsdCA9IGVycjsKKwluZXRmc190cmFuc19wdXQodCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFN5bmMgYWxsIG5vdC15ZXQtY3JlYXRlZCBjaGlsZHJlbiBpbiBnaXZlbiBkaXJlY3RvcnkgdG8gdGhlIHNlcnZlci4KKyAqLworc3RhdGljIGludCBwb2htZWxmc193cml0ZV9pbm9kZV9jcmVhdGVfY2hpbGRyZW4oc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCA9IFBPSE1FTEZTX0koaW5vZGUpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmcGFyZW50LT5zeW5jX2NyZWF0ZV9saXN0KSkgeworCQluID0gTlVMTDsKKwkJbXV0ZXhfbG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmcGFyZW50LT5zeW5jX2NyZWF0ZV9saXN0KSkgeworCQkJbiA9IGxpc3RfZmlyc3RfZW50cnkoJnBhcmVudC0+c3luY19jcmVhdGVfbGlzdCwKKwkJCQlzdHJ1Y3QgcG9obWVsZnNfbmFtZSwgc3luY19jcmVhdGVfZW50cnkpOworCQkJbGlzdF9kZWxfaW5pdCgmbi0+c3luY19jcmVhdGVfZW50cnkpOworCQl9CisJCW11dGV4X3VubG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisKKwkJaWYgKCFuKQorCQkJYnJlYWs7CisKKwkJaW5vZGUgPSBpbG9va3VwKHNiLCBuLT5pbm8pOworCisJCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIGlubzogJWxsdSwgaW5vZGU6ICVwLlxuIiwKKwkJCQlfX2Z1bmNfXywgcGFyZW50LT5pbm8sIG4tPmlubywgaW5vZGUpOworCisJCWlmIChpbm9kZSAmJiAoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSkgeworCQkJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCQkJcG9obWVsZnNfd3JpdGVfY3JlYXRlX2lub2RlKHBpKTsKKwkJCS8vcG9obWVsZnNfbWV0YV9jb21tYW5kKHBpLCBORVRGU19JTk9ERV9JTkZPLCAwLCBOVUxMLCBOVUxMLCAwKTsKKwkJCWlwdXQoaW5vZGUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZW1vdmVzIGdpdmVuIGNoaWxkIGZyb20gZ2l2ZW4gaW5vZGUgb24gc2VydmVyLgorICovCitpbnQgcG9obWVsZnNfcmVtb3ZlX2NoaWxkKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHN0cnVjdCBwb2htZWxmc19uYW1lICpuKQoreworCXJldHVybiBwb2htZWxmc19tZXRhX2NvbW1hbmRfZGF0YShwaSwgcGktPmlubywgTkVURlNfUkVNT1ZFLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTsKK30KKworLyoKKyAqIFdyaXRlYmFjayBmb3IgZ2l2ZW4gaW5vZGUuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHN5bmMpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCisJcG9obWVsZnNfd3JpdGVfY3JlYXRlX2lub2RlKHBpKTsKKwlwb2htZWxmc193cml0ZV9pbm9kZV9jcmVhdGVfY2hpbGRyZW4oaW5vZGUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJdCBpcyBub3QgZXhwb3J0ZWQsIHNvcnJ5Li4uCisgKi8KK3N0YXRpYyBpbmxpbmUgd2FpdF9xdWV1ZV9oZWFkX3QgKnBhZ2Vfd2FpdHF1ZXVlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWNvbnN0IHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOworCisJcmV0dXJuICZ6b25lLT53YWl0X3RhYmxlW2hhc2hfcHRyKHBhZ2UsIHpvbmUtPndhaXRfdGFibGVfYml0cyldOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3dhaXRfb25fcGFnZV9sb2NrZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihwYWdlLT5tYXBwaW5nLT5ob3N0LT5pX3NiKTsKKwlsb25nIHJldCA9IHBzYi0+d2FpdF9vbl9wYWdlX3RpbWVvdXQ7CisJREVGSU5FX1dBSVRfQklUKHdhaXQsICZwYWdlLT5mbGFncywgUEdfbG9ja2VkKTsKKwlpbnQgZXJyID0gMDsKKworCWlmICghUGFnZUxvY2tlZChwYWdlKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKDs7KSB7CisJCXByZXBhcmVfdG9fd2FpdChwYWdlX3dhaXRxdWV1ZShwYWdlKSwKKwkJCQkmd2FpdC53YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCWRwcmludGsoIiVzOiBwYWdlOiAlcCwgbG9ja2VkOiAlZCwgdXB0b2RhdGU6ICVkLCBlcnJvcjogJWQsIGZsYWdzOiAlbHguXG4iLAorCQkJCV9fZnVuY19fLCBwYWdlLCBQYWdlTG9ja2VkKHBhZ2UpLCBQYWdlVXB0b2RhdGUocGFnZSksCisJCQkJUGFnZUVycm9yKHBhZ2UpLCBwYWdlLT5mbGFncyk7CisKKwkJaWYgKCFQYWdlTG9ja2VkKHBhZ2UpKQorCQkJYnJlYWs7CisKKwkJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0ID0gc2NoZWR1bGVfdGltZW91dChyZXQpOworCQkJaWYgKCFyZXQpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCWJyZWFrOworCX0KKwlmaW5pc2hfd2FpdChwYWdlX3dhaXRxdWV1ZShwYWdlKSwgJndhaXQud2FpdCk7CisKKwlpZiAoIXJldCkKKwkJZXJyID0gLUVUSU1FRE9VVDsKKworCisJaWYgKCFlcnIpCisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKworCWlmIChlcnIpCisJCXByaW50aygiJXM6IHBhZ2U6ICVwLCB1cHRvZGF0ZTogJWQsIGxvY2tlZDogJWQsIGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sIHBhZ2UsIFBhZ2VVcHRvZGF0ZShwYWdlKSwgUGFnZUxvY2tlZChwYWdlKSwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVhZF9wYWdlX2NvbXBsZXRlKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX251bSwKKwkJdm9pZCAqcHJpdmF0ZSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHByaXZhdGU7CisKKwlpZiAoUGFnZUNoZWNrZWQocGFnZSkpCisJCXJldHVybiBlcnI7CisKKwlpZiAoZXJyIDwgMCkgeworCQlkcHJpbnRrKCIlczogcGFnZTogJXAsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgcGFnZSwgZXJyKTsKKwkJU2V0UGFnZUVycm9yKHBhZ2UpOworCX0KKworCXVubG9ja19wYWdlKHBhZ2UpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlYWQgYSBwYWdlIGZyb20gcmVtb3RlIHNlcnZlci4KKyAqIEZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCBwYWdlIGlzIHVubG9ja2VkLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwlpbnQgZXJyLCBwYXRoX2xlbjsKKwl2b2lkICpkYXRhOworCXU2NCBpc2l6ZTsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwaSwgcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCwKKwkJCVBBR0VfU0laRSwgUE9ITUVMRlNfUkVBRF9MT0NLKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWlmIChpc2l6ZSA8PSBwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSB7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXJldHVybiAwOworCX0KKworCXBhdGhfbGVuID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGkpOworCWlmIChwYXRoX2xlbiA8IDApIHsKKwkJZXJyID0gcGF0aF9sZW47CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIHBhdGhfbGVuLCBORVRGU19UUkFOU19TSU5HTEVfRFNULCAwKTsKKwlpZiAoIXQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJdC0+Y29tcGxldGUgPSBwb2htZWxmc19yZWFkX3BhZ2VfY29tcGxldGU7CisJdC0+cHJpdmF0ZSA9IHBhZ2U7CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCWRhdGEgPSAodm9pZCAqKShjbWQgKyAxKTsKKworCWVyciA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwaSwgZGF0YSwgcGF0aF9sZW4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXBhdGhfbGVuID0gZXJyOworCisJY21kLT5pZCA9IHBpLT5pbm87CisJY21kLT5zdGFydCA9IHBhZ2UtPmluZGV4OworCWNtZC0+c3RhcnQgPDw9IFBBR0VfQ0FDSEVfU0hJRlQ7CisJY21kLT5zaXplID0gUEFHRV9DQUNIRV9TSVpFICsgcGF0aF9sZW47CisJY21kLT5jbWQgPSBORVRGU19SRUFEX1BBR0U7CisJY21kLT5leHQgPSBwYXRoX2xlbjsKKworCWRwcmludGsoIiVzOiBwYXRoOiAnJXMnLCBwYWdlOiAlcCwgaW5vOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJWx1LlxuIiwKKwkJCV9fZnVuY19fLCAoY2hhciAqKWRhdGEsIHBhZ2UsIHBpLT5pbm8sIGNtZC0+c3RhcnQsIFBBR0VfQ0FDSEVfU0laRSk7CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIHBhdGhfbGVuKTsKKworCWVyciA9IG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9yZXR1cm47CisKKwlyZXR1cm4gcG9obWVsZnNfd2FpdF9vbl9wYWdlX2xvY2tlZChwYWdlKTsKKworZXJyX291dF9mcmVlOgorCXQtPnJlc3VsdCA9IGVycjsKKwluZXRmc190cmFuc19wdXQodCk7CitlcnJfb3V0X2V4aXQ6CisJU2V0UGFnZUVycm9yKHBhZ2UpOworCWlmIChQYWdlTG9ja2VkKHBhZ2UpKQorCQl1bmxvY2tfcGFnZShwYWdlKTsKK2Vycl9vdXRfcmV0dXJuOgorCXByaW50aygiJXM6IHBhZ2U6ICVwLCBzdGFydDogJWx1LCBzaXplOiAlbHUsIGVycjogJWQuXG4iLAorCQlfX2Z1bmNfXywgcGFnZSwgcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCwgUEFHRV9DQUNIRV9TSVpFLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFdyaXRlIGJlZ2luL2VuZCBtYWdpYy4KKyAqIEFsbG9jYXRlcyBhIHBhZ2UgYW5kIHdyaXRlcyBpbm9kZSBpZiBpdCB3YXMgbm90IHN5bmNlZCB0byBzZXJ2ZXIgYmVmb3JlLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlwZ29mZl90IGluZGV4OworCXVuc2lnbmVkIHN0YXJ0LCBlbmQ7CisJaW50IGVycjsKKworCSpwYWdlcCA9IE5VTEw7CisKKwlpbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXN0YXJ0ID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCWVuZCA9IHN0YXJ0ICsgbGVuOworCisJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCBpbmRleCk7CisjaWYgMAorCWRwcmludGsoIiVzOiBwYWdlOiAlcCBwb3M6ICVsbHUsIGxlbjogJXUsIGluZGV4OiAlbHUsIHN0YXJ0OiAldSwgZW5kOiAldSwgdXB0b2RhdGU6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBwYWdlLAlwb3MsIGxlbiwgaW5kZXgsIHN0YXJ0LCBlbmQsIFBhZ2VVcHRvZGF0ZShwYWdlKSk7CisjZW5kaWYKKwlpZiAoIXBhZ2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJd2hpbGUgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJaWYgKHN0YXJ0ICYmIHRlc3RfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZQT0hNRUxGU19JKGlub2RlKS0+c3RhdGUpKSB7CisJCQllcnIgPSBwb2htZWxmc19yZWFkcGFnZShmaWxlLCBwYWdlKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJCWxvY2tfcGFnZShwYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxlbiAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKKwkJCXZvaWQgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCisJCQltZW1zZXQoa2FkZHIgKyBzdGFydCwgMCwgUEFHRV9DQUNIRV9TSVpFIC0gc3RhcnQpOworCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCX0KKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCX0KKworCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgZW5kKTsKKworCSpwYWdlcCA9IHBhZ2U7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkqcGFnZXAgPSBOVUxMOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc193cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCisJaWYgKGNvcGllZCAhPSBsZW4pIHsKKwkJdW5zaWduZWQgZnJvbSA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwkJdm9pZCAqa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisKKwkJbWVtc2V0KGthZGRyICsgZnJvbSArIGNvcGllZCwgMCwgbGVuIC0gY29waWVkKTsKKwkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwl9CisKKwlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisjaWYgMAorCWRwcmludGsoIiVzOiBwYWdlOiAlcCBbVTogJWQsIEQ6ICVkLCBMOiAlZF0sIHBvczogJWxsdSwgbGVuOiAldSwgY29waWVkOiAldS5cbiIsCisJCQlfX2Z1bmNfXywgcGFnZSwKKwkJCVBhZ2VVcHRvZGF0ZShwYWdlKSwgUGFnZURpcnR5KHBhZ2UpLCBQYWdlTG9ja2VkKHBhZ2UpLAorCQkJcG9zLCBsZW4sIGNvcGllZCk7CisjZW5kaWYKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKworCXVubG9ja19wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKworCWlmIChwb3MgKyBjb3BpZWQgPiBpbm9kZS0+aV9zaXplKSB7CisJCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCisJCXBzYi0+YXZhaWxfc2l6ZSAtPSBwb3MgKyBjb3BpZWQgLSBpbm9kZS0+aV9zaXplOworCisJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zICsgY29waWVkKTsKKwl9CisKKwlyZXR1cm4gY29waWVkOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlYWRwYWdlc190cmFuc19jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqKl9fcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX251bSwKKwkJdm9pZCAqcHJpdmF0ZSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gcHJpdmF0ZTsKKwl1bnNpZ25lZCBpbnQgaSwgbnVtOworCXN0cnVjdCBwYWdlICoqcGFnZXMsICpwYWdlID0gKHN0cnVjdCBwYWdlICopX19wYWdlczsKKwlsb2ZmX3QgaW5kZXggPSBwYWdlLT5pbmRleDsKKworCXBhZ2VzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIHBhZ2VfbnVtLCBHRlBfTk9JTyk7CisJaWYgKCFwYWdlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwludW0gPSBmaW5kX2dldF9wYWdlc19jb250aWcocGktPnZmc19pbm9kZS5pX21hcHBpbmcsIGluZGV4LCBwYWdlX251bSwgcGFnZXMpOworCWlmIChudW0gPD0gMCkgeworCQllcnIgPSBudW07CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCWZvciAoaT0wOyBpPG51bTsgKytpKSB7CisJCXBhZ2UgPSBwYWdlc1tpXTsKKworCQlpZiAoZXJyKQorCQkJcHJpbnRrKCIlczogJXUvJXU6IHBhZ2U6ICVwLCBpbmRleDogJWx1LCB1cHRvZGF0ZTogJWQsIGxvY2tlZDogJWQsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBpLCBudW0sIHBhZ2UsIHBhZ2UtPmluZGV4LAorCQkJCVBhZ2VVcHRvZGF0ZShwYWdlKSwgUGFnZUxvY2tlZChwYWdlKSwgZXJyKTsKKworCQlpZiAoIVBhZ2VDaGVja2VkKHBhZ2UpKSB7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlTZXRQYWdlRXJyb3IocGFnZSk7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJfQorCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwl9CisKK2Vycl9vdXRfZnJlZToKKwlrZnJlZShwYWdlcyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19zZW5kX3JlYWRwYWdlcyhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCBzdHJ1Y3QgcGFnZSAqZmlyc3QsIHVuc2lnbmVkIGludCBudW0pCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHBpLT52ZnNfaW5vZGUuaV9zYik7CisJaW50IGVyciwgcGF0aF9sZW47CisJdm9pZCAqZGF0YTsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwaSwgZmlyc3QtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQsCisJCQludW0gKiBQQUdFX1NJWkUsIFBPSE1FTEZTX1JFQURfTE9DSyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlwYXRoX2xlbiA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBpKTsKKwlpZiAocGF0aF9sZW4gPCAwKSB7CisJCWVyciA9IHBhdGhfbGVuOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBwYXRoX2xlbiwgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCwgMCk7CisJaWYgKCF0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisJZGF0YSA9ICh2b2lkICopKGNtZCArIDEpOworCisJdC0+Y29tcGxldGUgPSBwb2htZWxmc19yZWFkcGFnZXNfdHJhbnNfY29tcGxldGU7CisJdC0+cHJpdmF0ZSA9IHBpOworCXQtPnBhZ2VfbnVtID0gbnVtOworCXQtPnBhZ2VzID0gKHN0cnVjdCBwYWdlICoqKWZpcnN0OworCisJZXJyID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBpLCBkYXRhLCBwYXRoX2xlbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlwYXRoX2xlbiA9IGVycjsKKworCWNtZC0+Y21kID0gTkVURlNfUkVBRF9QQUdFUzsKKwljbWQtPnN0YXJ0ID0gZmlyc3QtPmluZGV4OworCWNtZC0+c3RhcnQgPDw9IFBBR0VfQ0FDSEVfU0hJRlQ7CisJY21kLT5zaXplID0gKG51bSA8PCA4IHwgUEFHRV9DQUNIRV9TSElGVCk7CisJY21kLT5pZCA9IHBpLT5pbm87CisJY21kLT5leHQgPSBwYXRoX2xlbjsKKworCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgcGF0aDogJyVzJywgcGF0aF9sZW46ICV1LCAiCisJCQkic3RhcnQ6ICVsdSwgbnVtOiAldS5cbiIsCisJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCAoY2hhciAqKWRhdGEsIHBhdGhfbGVuLAorCQkJZmlyc3QtPmluZGV4LCBudW0pOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCBwYXRoX2xlbik7CisKKwlyZXR1cm4gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisKK2Vycl9vdXRfcHV0OgorCW5ldGZzX3RyYW5zX2ZyZWUodCk7CitlcnJfb3V0X2V4aXQ6CisJcG9obWVsZnNfcmVhZHBhZ2VzX3RyYW5zX2NvbXBsZXRlKChzdHJ1Y3QgcGFnZSAqKilmaXJzdCwgbnVtLCBwaSwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisjZGVmaW5lIGxpc3RfdG9fcGFnZShoZWFkKSAobGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpKQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlYWRwYWdlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywgdW5zaWduZWQgbnJfcGFnZXMpCit7CisJdW5zaWduZWQgaW50IHBhZ2VfaWR4LCBudW0gPSAwOworCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTCwgKmZpcnN0ID0gTlVMTDsKKworCWZvciAocGFnZV9pZHggPSAwOyBwYWdlX2lkeCA8IG5yX3BhZ2VzOyBwYWdlX2lkeCsrKSB7CisJCXBhZ2UgPSBsaXN0X3RvX3BhZ2UocGFnZXMpOworCisJCXByZWZldGNodygmcGFnZS0+ZmxhZ3MpOworCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKKworCQlpZiAoIWFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLAorCQkJCQlwYWdlLT5pbmRleCwgR0ZQX0tFUk5FTCkpIHsKKworCQkJaWYgKCFudW0pIHsKKwkJCQludW0gPSAxOworCQkJCWZpcnN0ID0gcGFnZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZHByaW50aygiJXM6IGFkZGVkIHRvIGxydSBwYWdlOiAlcCwgcGFnZV9pbmRleDogJWx1LCBmaXJzdF9pbmRleDogJWx1LlxuIiwKKwkJCQkJX19mdW5jX18sIHBhZ2UsIHBhZ2UtPmluZGV4LCBmaXJzdC0+aW5kZXgpOworCisJCQlpZiAodW5saWtlbHkoZmlyc3QtPmluZGV4ICsgbnVtICE9IHBhZ2UtPmluZGV4KSB8fCAobnVtID4gNTAwKSkgeworCQkJCXBvaG1lbGZzX3NlbmRfcmVhZHBhZ2VzKFBPSE1FTEZTX0kobWFwcGluZy0+aG9zdCksCisJCQkJCQlmaXJzdCwgbnVtKTsKKwkJCQlmaXJzdCA9IHBhZ2U7CisJCQkJbnVtID0gMDsKKwkJCX0KKworCQkJbnVtKys7CisJCX0KKwl9CisJcG9obWVsZnNfc2VuZF9yZWFkcGFnZXMoUE9ITUVMRlNfSShtYXBwaW5nLT5ob3N0KSwgZmlyc3QsIG51bSk7CisKKwkvKgorCSAqIFRoaXMgd2lsbCBiZSBzeW5jIHJlYWQsIHNvIHdoZW4gbGFzdCBwYWdlIGlzIHByb2Nlc3NlZCwKKwkgKiBhbGwgcHJldmlvdXMgYXJlIGFsZXJhZHkgdW5sb2NrZWQgYW5kIHJlYWR5IHRvIGJlIHVzZWQuCisJICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTbWFsbCBhZGRyZXMgc3BhY2Ugb3BlcmF0aW9ucyBmb3IgUE9ITUVMRlMuCisgKi8KK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcG9obWVsZnNfYW9wcyA9IHsKKwkucmVhZHBhZ2UJCT0gcG9obWVsZnNfcmVhZHBhZ2UsCisJLnJlYWRwYWdlcwkJPSBwb2htZWxmc19yZWFkcGFnZXMsCisJLndyaXRlcGFnZXMJCT0gcG9obWVsZnNfd3JpdGVwYWdlcywKKwkud3JpdGVfYmVnaW4JCT0gcG9obWVsZnNfd3JpdGVfYmVnaW4sCisJLndyaXRlX2VuZAkJPSBwb2htZWxmc193cml0ZV9lbmQsCisJLnNldF9wYWdlX2RpcnR5IAk9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLAorfTsKKworLyoKKyAqIC0+ZGV0cm95X2lub2RlKCkgY2FsbGJhY2suIERlbGV0ZXMgaW5vZGUgZnJvbSB0aGUgY2FjaGVzCisgKiAgYW5kIGZyZWVzIHByaXZhdGUgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgcG9obWVsZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHNiKTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisKKwkvL3BvaG1lbGZzX2RhdGFfdW5sb2NrKHBpLCAwLCBpbm9kZS0+aV9zaXplLCBQT0hNRUxGU19SRUFEX0xPQ0spOworCisJcG9obWVsZnNfaW5vZGVfZGVsX2lub2RlKHBzYiwgcGkpOworCisJZHByaW50aygiJXM6IHBpOiAlcCwgaW5vZGU6ICVwLCBpbm86ICVsbHUuXG4iLAorCQlfX2Z1bmNfXywgcGksICZwaS0+dmZzX2lub2RlLCBwaS0+aW5vKTsKKwlrbWVtX2NhY2hlX2ZyZWUocG9obWVsZnNfaW5vZGVfY2FjaGUsIHBpKTsKKwlhdG9taWNfbG9uZ19kZWMoJnBzYi0+dG90YWxfaW5vZGVzKTsKK30KKworLyoKKyAqIC0+YWxsb2NfaW5vZGUoKSBjYWxsYmFjay4gQWxsb2NhdGVzIGlub2RlIGFuZCBpbml0aWxpemVzIHByaXZhdGUgZGF0YS4KKyAqLworc3RhdGljIHN0cnVjdCBpbm9kZSAqcG9obWVsZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpOworCisJcGkgPSBrbWVtX2NhY2hlX2FsbG9jKHBvaG1lbGZzX2lub2RlX2NhY2hlLCBHRlBfTk9JTyk7CisJaWYgKCFwaSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwaS0+aGFzaF9yb290ID0gUkJfUk9PVDsKKwltdXRleF9pbml0KCZwaS0+b2Zmc2V0X2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnBpLT5zeW5jX2NyZWF0ZV9saXN0KTsKKworCUlOSVRfTElTVF9IRUFEKCZwaS0+aW5vZGVfZW50cnkpOworCisJcGktPmxvY2tfdHlwZSA9IDA7CisJcGktPnN0YXRlID0gMDsKKwlwaS0+dG90YWxfbGVuID0gMDsKKwlwaS0+ZHJvcF9jb3VudCA9IDA7CisKKwlkcHJpbnRrKCIlczogcGk6ICVwLCBpbm9kZTogJXAuXG4iLCBfX2Z1bmNfXywgcGksICZwaS0+dmZzX2lub2RlKTsKKworCWF0b21pY19sb25nX2luYygmUE9ITUVMRlNfU0Ioc2IpLT50b3RhbF9pbm9kZXMpOworCisJcmV0dXJuICZwaS0+dmZzX2lub2RlOworfQorCisvKgorICogV2Ugd2FudCBmc3luYygpIHRvIHdvcmsgb24gUE9ITUVMRlMuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKKwkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLAorCQkubnJfdG9fd3JpdGUgPSAwLAkvKiBzeXNfZnN5bmMgZGlkIHRoaXMgKi8KKwl9OworCisJcmV0dXJuIHN5bmNfaW5vZGUoaW5vZGUsICZ3YmMpOworfQorCitzc2l6ZV90IHBvaG1lbGZzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9ICh2b2lkIF9fdXNlciAqKWJ1ZiwgLmlvdl9sZW4gPSBsZW4gfTsKKwlzdHJ1Y3Qga2lvY2Iga2lvY2I7CisJc3NpemVfdCByZXQ7CisJbG9mZl90IHBvcyA9ICpwcG9zOworCisJaW5pdF9zeW5jX2tpb2NiKCZraW9jYiwgZmlsZSk7CisJa2lvY2Iua2lfcG9zID0gcG9zOworCWtpb2NiLmtpX2xlZnQgPSBsZW47CisKKwlkcHJpbnRrKCIlczogbGVuOiAlenUsIHBvczogJWxsdS5cbiIsIF9fZnVuY19fLCBsZW4sIHBvcyk7CisKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmV0ID0gcG9obWVsZnNfZGF0YV9sb2NrKHBpLCBwb3MsIGxlbiwgUE9ITUVMRlNfV1JJVEVfTE9DSyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfb3V0X3VubG9jazsKKworCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKCZraW9jYiwgJmlvdiwgMSwgcG9zKTsKKwkqcHBvcyA9IGtpb2NiLmtpX3BvczsKKworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCVdBUk5fT04ocmV0IDwgMCk7CisKKwlpZiAocmV0ID4gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgeworCQlzc2l6ZV90IGVycjsKKworCQllcnIgPSBzeW5jX3BhZ2VfcmFuZ2UoaW5vZGUsIG1hcHBpbmcsIHBvcywgcmV0KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXQgPSBlcnI7CisJCVdBUk5fT04ocmV0IDwgMCk7CisJfQorCisJcmV0dXJuIHJldDsKKworZXJyX291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9obWVsZnNfZmlsZV9vcHMgPSB7CisJLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCisJLmZzeW5jCQk9IHBvaG1lbGZzX2ZzeW5jLAorCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKKworCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAorCisJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAorCS5zcGxpY2Vfd3JpdGUJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlLAorCisJLndyaXRlCQk9IHBvaG1lbGZzX3dyaXRlLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAorfTsKKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcG9obWVsZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0geworCS5yZWFkbGluawk9IGdlbmVyaWNfcmVhZGxpbmssCisJLmZvbGxvd19saW5rCT0gcGFnZV9mb2xsb3dfbGlua19saWdodCwKKwkucHV0X2xpbmsJPSBwYWdlX3B1dF9saW5rLAorfTsKKworaW50IHBvaG1lbGZzX3NldGF0dHJfcmF3KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0cikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIGlub2RlIGNoYW5nZXMgYXJlIG5vdCBhbGxvd2VkLlxuIiwgX19mdW5jX18sIFBPSE1FTEZTX0koaW5vZGUpLT5pbm8pOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKKwkgICAgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpIHsKKwkJZXJyID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJZXJyID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7CisJaWYgKGVycikgeworCQlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBmYWlsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGVzLlxuIiwgX19mdW5jX18sIFBPSE1FTEZTX0koaW5vZGUpLT5pbm8pOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBtb2RlOiAlbyAtPiAlbywgdWlkOiAldSAtPiAldSwgZ2lkOiAldSAtPiAldSwgc2l6ZTogJWxsdSAtPiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCBQT0hNRUxGU19JKGlub2RlKS0+aW5vLCBpbm9kZS0+aV9tb2RlLCBhdHRyLT5pYV9tb2RlLAorCQkJaW5vZGUtPmlfdWlkLCBhdHRyLT5pYV91aWQsIGlub2RlLT5pX2dpZCwgYXR0ci0+aWFfZ2lkLCBpbm9kZS0+aV9zaXplLCBhdHRyLT5pYV9zaXplKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJaW50IGVycjsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwaSwgMCwgfjAsIFBPSE1FTEZTX1dSSVRFX0xPQ0spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0gc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihkZW50cnksIGF0dHIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0gcG9obWVsZnNfc2V0YXR0cl9yYXcoaW5vZGUsIGF0dHIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3NlbmRfeGF0dHJfcmVxKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHU2NCBpZCwgdTY0IHN0YXJ0LAorCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IGF0dHJzaXplLCBpbnQgY29tbWFuZCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHBpLT52ZnNfaW5vZGUuaV9zYik7CisJaW50IGVyciwgcGF0aF9sZW4sIG5hbWVsZW4gPSBzdHJsZW4obmFtZSkgKyAxOyAvKiAwLWJ5dGUgKi8KKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCXZvaWQgKmRhdGE7CisKKwlkcHJpbnRrKCIlczogaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBuYW1lOiAnJXMnLCBhdHRyc2l6ZTogJXp1LCBjbWQ6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBpZCwgc3RhcnQsIG5hbWUsIGF0dHJzaXplLCBjb21tYW5kKTsKKworCXBhdGhfbGVuID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGkpOworCWlmIChwYXRoX2xlbiA8IDApIHsKKwkJZXJyID0gcGF0aF9sZW47CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIG5hbWVsZW4gKyBwYXRoX2xlbiArIGF0dHJzaXplLCAwLCAwKTsKKwlpZiAoIXQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKwlkYXRhID0gY21kICsgMTsKKworCXBhdGhfbGVuID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBpLCBkYXRhLCBwYXRoX2xlbik7CisJaWYgKHBhdGhfbGVuIDwgMCkgeworCQllcnIgPSBwYXRoX2xlbjsKKwkJZ290byBlcnJfb3V0X3B1dDsKKwl9CisJZGF0YSArPSBwYXRoX2xlbjsKKworCS8qCisJICogJ25hbWUnIGlzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGFscmVhZHkgYW5kCisJICogJ25hbWVsZW4nIGluY2x1ZGVzIDAtYnl0ZS4KKwkgKi8KKwltZW1jcHkoZGF0YSwgbmFtZSwgbmFtZWxlbik7CisJZGF0YSArPSBuYW1lbGVuOworCisJbWVtY3B5KGRhdGEsIHZhbHVlLCBhdHRyc2l6ZSk7CisKKwljbWQtPmNtZCA9IGNvbW1hbmQ7CisJY21kLT5pZCA9IGlkOworCWNtZC0+c3RhcnQgPSBzdGFydDsKKwljbWQtPnNpemUgPSBhdHRyc2l6ZSArIG5hbWVsZW4gKyBwYXRoX2xlbjsKKwljbWQtPmV4dCA9IHBhdGhfbGVuOworCWNtZC0+Y3NpemUgPSAwOworCWNtZC0+Y3BhZCA9IDA7CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIG5hbWVsZW4gKyBwYXRoX2xlbiArIGF0dHJzaXplKTsKKworCXJldHVybiBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKworZXJyX291dF9wdXQ6CisJdC0+cmVzdWx0ID0gZXJyOworCW5ldGZzX3RyYW5zX3B1dCh0KTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBhdHRyc2l6ZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCisJaWYgKCEocHNiLT5zdGF0ZV9mbGFncyAmIFBPSE1FTEZTX0ZMQUdTX1hBVFRSKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIHBvaG1lbGZzX3NlbmRfeGF0dHJfcmVxKHBpLCBmbGFncywgYXR0cnNpemUsIG5hbWUsCisJCQl2YWx1ZSwgYXR0cnNpemUsIE5FVEZTX1hBVFRSX1NFVCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBvaG1lbGZzX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJdm9pZCAqdmFsdWUsIHNpemVfdCBhdHRyc2l6ZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptOworCWludCBlcnI7CisJbG9uZyB0aW1lb3V0ID0gcHNiLT5tY2FjaGVfdGltZW91dDsKKworCWlmICghKHBzYi0+c3RhdGVfZmxhZ3MgJiBQT0hNRUxGU19GTEFHU19YQVRUUikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW0gPSBwb2htZWxmc19tY2FjaGVfYWxsb2MocHNiLCAwLCBhdHRyc2l6ZSwgdmFsdWUpOworCWlmIChJU19FUlIobSkpCisJCXJldHVybiBQVFJfRVJSKG0pOworCisJZHByaW50aygiJXM6IGlubzogJWxsdSwgbmFtZTogJyVzJywgc2l6ZTogJXp1LlxuIiwKKwkJCV9fZnVuY19fLCBwaS0+aW5vLCBuYW1lLCBhdHRyc2l6ZSk7CisKKwllcnIgPSBwb2htZWxmc19zZW5kX3hhdHRyX3JlcShwaSwgbS0+Z2VuLCBhdHRyc2l6ZSwgbmFtZSwgdmFsdWUsIDAsIE5FVEZTX1hBVFRSX0dFVCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCWRvIHsKKwkJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZtLT5jb21wbGV0ZSwgdGltZW91dCk7CisJCWlmIChlcnIpIHsKKwkJCWVyciA9IG0tPmVycjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVGhpcyBsb29wIGlzIGEgYml0IHVnbHksIHNpbmNlIGl0IHdhaXRzIHVudGlsIHJlZmVyZW5jZSBjb3VudGVyCisJCSAqIGhpdHMgMSBhbmQgdGhlbiBwdXQgb2JqZWN0IGhlcmUuIE1haW4gZ29hbCBpcyB0byBwcmV2ZW50IHJhY2Ugd2l0aAorCQkgKiBuZXR3b3JrIHRocmVhZCwgd2hlbiBpdCBjYW4gc3RhcnQgcHJvY2Vzc2luZyBnaXZlbiByZXF1ZXN0LCBpLmUuCisJCSAqIGluY3JlYXNlIGl0cyByZWZlcmVuY2UgY291bnRlciBidXQgeWV0IG5vdCBjb21wbGV0ZSBpdCwgd2hpbGUKKwkJICogd2Ugd2lsbCBleGl0IGZyb20gLT5nZXR4YXR0cigpIHdpdGggdGltZW91dCwgYW5kIGFsdGhvdWdoIHJlcXVlc3QKKwkJICogd2lsbCBub3QgYmUgZnJlZWQgKGl0cyByZWZlcmVuY2UgY291bnRlciB3YXMgaW5jcmVhc2VkIGJ5IG5ldHdvcmsKKwkJICogdGhyZWFkKSwgZGF0YSBwb2ludGVyIHByb3ZpZGVkIGJ5IHVzZXIgbWF5IGJlIHJlbGVhc2VkLCBzbyB3ZSB3aWxsCisJCSAqIG92ZXJ3cml0ZSBhbHJlYWR5IGZyZWVkIGFyZWEgaW4gbmV0d29yayB0aHJlYWQuCisJCSAqCisJCSAqIE5vdyBhZnRlciB0aW1lb3V0IHdlIHJlbW92ZSByZXF1ZXN0IGZyb20gdGhlIGNhY2hlLCBzbyBpdCBjYW4gbm90IGJlCisJCSAqIGZvdW5kIGJ5IG5ldHdvcmsgdGhyZWFkLCBhbmQgd2FpdCBmb3IgaXRzIHJlZmVyZW5jZSBjb3VudGVyIHRvIGhpdCAxLAorCQkgKiBpLmUuIGlmIG5ldHdvcmsgdGhyZWFkIGFscmVhZHkgc3RhcnRlZCB0byBwcm9jZXNzIHRoaXMgcmVxdWVzdCwgd2Ugd2FpdAorCQkgKiBpdCB0byBmaW5pc2gsIGFuZCB0aGVuIGZyZWUgb2JqZWN0IGxvY2FsbHkuIElmIHJlZmVyZW5jZSBjb3VudGVyIGlzCisJCSAqIGFscmVhZHkgMSwgaS5lLiByZXF1ZXN0IGlzIG5vdCB1c2VkIGJ5IGFueW9uZSBlbHNlLCB3ZSBjYW4gZnJlZSBpdCB3aXRob3V0CisJCSAqIHByb2JsZW0uCisJCSAqLworCQllcnIgPSAtRVRJTUVET1VUOworCQl0aW1lb3V0ID0gSFo7CisKKwkJcG9obWVsZnNfbWNhY2hlX3JlbW92ZV9sb2NrZWQocHNiLCBtKTsKKwl9IHdoaWxlIChhdG9taWNfcmVhZCgmbS0+cmVmY250KSAhPSAxKTsKKworCXBvaG1lbGZzX21jYWNoZV9wdXQocHNiLCBtKTsKKworCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgcGktPmlubywgZXJyKTsKKworCXJldHVybiBlcnI7CisKK2Vycl9vdXRfcHV0OgorCXBvaG1lbGZzX21jYWNoZV9wdXQocHNiLCBtKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ICpzdGF0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCWludCBlcnI7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGksIDAsIH4wLCBQT0hNRUxGU19SRUFEX0xPQ0spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBtb2RlOiAlbywgdWlkOiAldSwgZ2lkOiAldSwgc2l6ZTogJWxsdS5cbiIsCisJCQlfX2Z1bmNfXywgcGktPmlubywgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfdWlkLAorCQkJaW5vZGUtPmlfZ2lkLCBpbm9kZS0+aV9zaXplKTsKKworCWdlbmVyaWNfZmlsbGF0dHIoaW5vZGUsIHN0YXQpOworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwb2htZWxmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLnNldGF0dHIJPSBwb2htZWxmc19zZXRhdHRyLAorCS5nZXRhdHRyCT0gcG9obWVsZnNfZ2V0YXR0ciwKKwkuc2V0eGF0dHIJPSBwb2htZWxmc19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIJPSBwb2htZWxmc19nZXR4YXR0ciwKK307CisKKy8qCisgKiBGaWxsIGlub2RlIGRhdGE6IG1vZGUsIHNpemUsIG9wZXJhdGlvbiBjYWxsYmFja3MgYW5kIHNvIG9uLi4uCisgKi8KK3ZvaWQgcG9obWVsZnNfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbykKK3sKKwlpbm9kZS0+aV9tb2RlID0gaW5mby0+bW9kZTsKKwlpbm9kZS0+aV9ubGluayA9IGluZm8tPm5saW5rOworCWlub2RlLT5pX3VpZCA9IGluZm8tPnVpZDsKKwlpbm9kZS0+aV9naWQgPSBpbmZvLT5naWQ7CisJaW5vZGUtPmlfYmxvY2tzID0gaW5mby0+YmxvY2tzOworCWlub2RlLT5pX3JkZXYgPSBpbmZvLT5yZGV2OworCWlub2RlLT5pX3NpemUgPSBpbmZvLT5zaXplOworCWlub2RlLT5pX3ZlcnNpb24gPSBpbmZvLT52ZXJzaW9uOworCWlub2RlLT5pX2Jsa2JpdHMgPSBmZnMoaW5mby0+YmxvY2tzaXplKTsKKworCWRwcmludGsoIiVzOiBpbm9kZTogJXAsIG51bTogJWx1LyVsbHUgaW5vZGUgaXMgcmVndWxhcjogJWQsIGRpcjogJWQsIGxpbms6ICVkLCBtb2RlOiAlbywgc2l6ZTogJWxsdS5cbiIsCisJCQlfX2Z1bmNfXywgaW5vZGUsIGlub2RlLT5pX2lubywgaW5mby0+aW5vLAorCQkJU19JU1JFRyhpbm9kZS0+aV9tb2RlKSwgU19JU0RJUihpbm9kZS0+aV9tb2RlKSwKKwkJCVNfSVNMTksoaW5vZGUtPmlfbW9kZSksIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX3NpemUpOworCisJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKworCS8qCisJICogaV9tYXBwaW5nIGlzIGEgcG9pbnRlciB0byBpX2RhdGEgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uLgorCSAqLworCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmcG9obWVsZnNfYW9wczsKKworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX2ZvcCA9ICZwb2htZWxmc19maWxlX29wczsKKwkJaW5vZGUtPmlfb3AgPSAmcG9obWVsZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOworCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQlpbm9kZS0+aV9mb3AgPSAmcG9obWVsZnNfZGlyX2ZvcHM7CisJCWlub2RlLT5pX29wID0gJnBvaG1lbGZzX2Rpcl9pbm9kZV9vcHM7CisJfSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX29wID0gJnBvaG1lbGZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfZm9wID0gJnBvaG1lbGZzX2ZpbGVfb3BzOworCX0gZWxzZSB7CisJCWlub2RlLT5pX2ZvcCA9ICZnZW5lcmljX3JvX2ZvcHM7CisJfQorfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCisJc3Bpbl9sb2NrKCZwc2ItPmlub19sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZwaS0+aW5vZGVfZW50cnkpOworCXNwaW5fdW5sb2NrKCZwc2ItPmlub19sb2NrKTsKKworCWdlbmVyaWNfZHJvcF9pbm9kZShpbm9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBvaG1lbGZzX2dldF9pbm9kZV9mcm9tX2xpc3Qoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsCisJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHVuc2lnbmVkIGludCAqY291bnQpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IE5VTEw7CisKKwlzcGluX2xvY2soJnBzYi0+aW5vX2xvY2spOworCWlmICghbGlzdF9lbXB0eShoZWFkKSkgeworCQlwaSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IHBvaG1lbGZzX2lub2RlLAorCQkJCQlpbm9kZV9lbnRyeSk7CisJCWxpc3RfZGVsX2luaXQoJnBpLT5pbm9kZV9lbnRyeSk7CisJCSpjb3VudCA9IHBpLT5kcm9wX2NvdW50OworCQlwaS0+ZHJvcF9jb3VudCA9IDA7CisJfQorCXNwaW5fdW5sb2NrKCZwc2ItPmlub19sb2NrKTsKKworCXJldHVybiBwaTsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfZmx1c2hfdHJhbnNhY3Rpb25zKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmM7CisKKwltdXRleF9sb2NrKCZwc2ItPnN0YXRlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCXBvaG1lbGZzX3N0YXRlX2ZsdXNoX3RyYW5zYWN0aW9ucygmYy0+c3RhdGUpOworCX0KKwltdXRleF91bmxvY2soJnBzYi0+c3RhdGVfbG9jayk7Cit9CisKKy8qCisgKiAtPnB1dF9zdXBlcigpIGNhbGxiYWNrLiBJbnZva2VkIGJlZm9yZSBzdXBlcmJsb2NrIGlzIGRlc3Ryb3llZCwKKyAqICBzbyBpdCBoYXMgdG8gY2xlYW4gYWxsIHByaXZhdGUgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgcG9obWVsZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihzYik7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaTsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IGluX2Ryb3BfbGlzdCA9IDA7CisJc3RydWN0IGlub2RlICppbm9kZSwgKnRtcDsKKworCWRwcmludGsoIiVzLlxuIiwgX19mdW5jX18pOworCisJLyoKKwkgKiBLaWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zLCB3aGljaCBjb3VsZCBhZmZlY3QgaW5vZGVzIGluLWZsaWdodC4KKwkgKi8KKwlwb2htZWxmc19mbHVzaF90cmFuc2FjdGlvbnMocHNiKTsKKworCXdoaWxlICgocGkgPSBwb2htZWxmc19nZXRfaW5vZGVfZnJvbV9saXN0KHBzYiwgJnBzYi0+ZHJvcF9saXN0LCAmY291bnQpKSkgeworCQlpbm9kZSA9ICZwaS0+dmZzX2lub2RlOworCisJCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIHBpOiAlcCwgaW5vZGU6ICVwLCBjb3VudDogJXUuXG4iLAorCQkJCV9fZnVuY19fLCBwaS0+aW5vLCBwaSwgaW5vZGUsIGNvdW50KTsKKworCQlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSAhPSBjb3VudCkgeworCQkJcHJpbnRrKCIlczogaW5vOiAlbGx1LCBwaTogJXAsIGlub2RlOiAlcCwgY291bnQ6ICV1LCBpX2NvdW50OiAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCBwaS0+aW5vLCBwaSwgaW5vZGUsIGNvdW50LAorCQkJCQlhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpKTsKKwkJCWNvdW50ID0gYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KTsKKwkJCWluX2Ryb3BfbGlzdCsrOworCQl9CisKKwkJd2hpbGUgKGNvdW50LS0pCisJCQlpcHV0KCZwaS0+dmZzX2lub2RlKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5vZGUsIHRtcCwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7CisJCXBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisKKwkJZHByaW50aygiJXM6IGlubzogJWxsdSwgcGk6ICVwLCBpbm9kZTogJXAsIGlfY291bnQ6ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgcGktPmlubywgcGksIGlub2RlLCBhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpKTsKKworCQkvKgorCQkgKiBUaGVzZSBhcmUgc3BlY2lhbCBpbm9kZXMsIHRoZXkgd2VyZSBjcmVhdGVkIGR1cmluZworCQkgKiBkaXJlY3RvcnkgcmVhZGluZyBvciBsb29rdXAsIGFuZCB3ZXJlIG5vdCBib3VuZCB0byBkZW50cnksCisJCSAqIHNvIHRoZXkgbGl2ZSBoZXJlIHdpdGggcmVmZXJlbmNlIGNvdW50ZXIgYmVpbmcgMSBhbmQgcHJldmVudAorCQkgKiB1bW91bnQgZnJvbSBzdWNjZWVkIHNpbmNlIGl0IGJlbGlldmVzIHRoYXQgdGhleSBhcmUgYnVzeS4KKwkJICovCisJCWNvdW50ID0gYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KTsKKwkJaWYgKGNvdW50KSB7CisJCQlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV9zYl9saXN0KTsKKwkJCXdoaWxlIChjb3VudC0tKQorCQkJCWlwdXQoJnBpLT52ZnNfaW5vZGUpOworCQl9CisJfQorCisJcHNiLT50cmFuc19zY2FuX3RpbWVvdXQgPSBwc2ItPmRyb3Bfc2Nhbl90aW1lb3V0ID0gMDsKKwljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZwc2ItPmR3b3JrKTsKKwljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZwc2ItPmRyb3BfZHdvcmspOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlkcHJpbnRrKCIlczogc3RvcHBlZCB3b3JrcXVldWVzLlxuIiwgX19mdW5jX18pOworCisJcG9obWVsZnNfY3J5cHRvX2V4aXQocHNiKTsKKwlwb2htZWxmc19zdGF0ZV9leGl0KHBzYik7CisKKwlrZnJlZShwc2IpOworCXNiLT5zX2ZzX2luZm8gPSBOVUxMOworCisJcG9obWVsZnNfZnRyYW5zX2V4aXQoKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCit7CisJKmZsYWdzIHw9IE1TX1JET05MWTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihzYik7CisKKwkvKgorCSAqIFRoZXJlIGFyZSBubyBmaWxlc3lzdGVtIHNpemUgbGltaXRzIHlldC4KKwkgKi8KKwltZW1zZXQoYnVmLCAwLCBzaXplb2Yoc3RydWN0IGtzdGF0ZnMpKTsKKworCWJ1Zi0+Zl90eXBlID0gUE9ITUVMRlNfTUFHSUNfTlVNOyAvKiAnUE9ILicgKi8KKwlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7CisJYnVmLT5mX2ZpbGVzID0gcHNiLT5pbm87CisJYnVmLT5mX25hbWVsZW4gPSAyNTU7CisJYnVmLT5mX2ZpbGVzID0gYXRvbWljX2xvbmdfcmVhZCgmcHNiLT50b3RhbF9pbm9kZXMpOworCWJ1Zi0+Zl9iZnJlZSA9IGJ1Zi0+Zl9iYXZhaWwgPSBwc2ItPmF2YWlsX3NpemUgPj4gUEFHRV9TSElGVDsKKwlidWYtPmZfYmxvY2tzID0gcHNiLT50b3RhbF9zaXplID4+IFBBR0VfU0hJRlQ7CisKKwlkcHJpbnRrKCIlczogdG90YWw6ICVsbHUsIGF2YWlsOiAlbGx1LCBpbm9kZXM6ICVsbHUsIGJzaXplOiAlbHUuXG4iLAorCQlfX2Z1bmNfXywgcHNiLT50b3RhbF9zaXplLCBwc2ItPmF2YWlsX3NpemUsIGJ1Zi0+Zl9maWxlcywgc2ItPnNfYmxvY2tzaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHZmc21vdW50ICp2ZnMpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQih2ZnMtPm1udF9zYik7CisKKwlzZXFfcHJpbnRmKHNlcSwgIixpZHg9JXUiLCBwc2ItPmlkeCk7CisJc2VxX3ByaW50ZihzZXEsICIsdHJhbnNfc2Nhbl90aW1lb3V0PSV1IiwgamlmZmllc190b19tc2Vjcyhwc2ItPnRyYW5zX3NjYW5fdGltZW91dCkpOworCXNlcV9wcmludGYoc2VxLCAiLGRyb3Bfc2Nhbl90aW1lb3V0PSV1IiwgamlmZmllc190b19tc2Vjcyhwc2ItPmRyb3Bfc2Nhbl90aW1lb3V0KSk7CisJc2VxX3ByaW50ZihzZXEsICIsd2FpdF9vbl9wYWdlX3RpbWVvdXQ9JXUiLCBqaWZmaWVzX3RvX21zZWNzKHBzYi0+d2FpdF9vbl9wYWdlX3RpbWVvdXQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIix0cmFuc19yZXRyaWVzPSV1IiwgcHNiLT50cmFuc19yZXRyaWVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIixjcnlwdG9fdGhyZWFkX251bT0ldSIsIHBzYi0+Y3J5cHRvX3RocmVhZF9udW0pOworCXNlcV9wcmludGYoc2VxLCAiLHRyYW5zX21heF9wYWdlcz0ldSIsIHBzYi0+dHJhbnNfbWF4X3BhZ2VzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIixtY2FjaGVfdGltZW91dD0ldSIsIGppZmZpZXNfdG9fbXNlY3MocHNiLT5tY2FjaGVfdGltZW91dCkpOworCWlmIChwc2ItPmNyeXB0b19mYWlsX3Vuc3VwcG9ydGVkKQorCQlzZXFfcHJpbnRmKHNlcSwgIixjcnlwdG9fZmFpbF91bnN1cHBvcnRlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBwb2htZWxmc19zYl9vcHMgPSB7CisJLmFsbG9jX2lub2RlCT0gcG9obWVsZnNfYWxsb2NfaW5vZGUsCisJLmRlc3Ryb3lfaW5vZGUJPSBwb2htZWxmc19kZXN0cm95X2lub2RlLAorCS5kcm9wX2lub2RlCT0gcG9obWVsZnNfZHJvcF9pbm9kZSwKKwkud3JpdGVfaW5vZGUJPSBwb2htZWxmc193cml0ZV9pbm9kZSwKKwkucHV0X3N1cGVyCT0gcG9obWVsZnNfcHV0X3N1cGVyLAorCS5yZW1vdW50X2ZzCT0gcG9obWVsZnNfcmVtb3VudCwKKwkuc3RhdGZzCQk9IHBvaG1lbGZzX3N0YXRmcywKKwkuc2hvd19vcHRpb25zCT0gcG9obWVsZnNfc2hvd19vcHRpb25zLAorfTsKKworZW51bSB7CisJcG9obWVsZnNfb3B0X2lkeCwKKwlwb2htZWxmc19vcHRfdHJhbnNfc2Nhbl90aW1lb3V0LAorCXBvaG1lbGZzX29wdF9kcm9wX3NjYW5fdGltZW91dCwKKwlwb2htZWxmc19vcHRfd2FpdF9vbl9wYWdlX3RpbWVvdXQsCisJcG9obWVsZnNfb3B0X3RyYW5zX3JldHJpZXMsCisJcG9obWVsZnNfb3B0X2NyeXB0b190aHJlYWRfbnVtLAorCXBvaG1lbGZzX29wdF90cmFuc19tYXhfcGFnZXMsCisJcG9obWVsZnNfb3B0X2NyeXB0b19mYWlsX3Vuc3VwcG9ydGVkLAorCXBvaG1lbGZzX29wdF9tY2FjaGVfdGltZW91dCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0Y2hfdG9rZW4gcG9obWVsZnNfdG9rZW5zW10gPSB7CisJe3BvaG1lbGZzX29wdF9pZHgsICJpZHg9JXUifSwKKwl7cG9obWVsZnNfb3B0X3RyYW5zX3NjYW5fdGltZW91dCwgInRyYW5zX3NjYW5fdGltZW91dD0ldSJ9LAorCXtwb2htZWxmc19vcHRfZHJvcF9zY2FuX3RpbWVvdXQsICJkcm9wX3NjYW5fdGltZW91dD0ldSJ9LAorCXtwb2htZWxmc19vcHRfd2FpdF9vbl9wYWdlX3RpbWVvdXQsICJ3YWl0X29uX3BhZ2VfdGltZW91dD0ldSJ9LAorCXtwb2htZWxmc19vcHRfdHJhbnNfcmV0cmllcywgInRyYW5zX3JldHJpZXM9JXUifSwKKwl7cG9obWVsZnNfb3B0X2NyeXB0b190aHJlYWRfbnVtLCAiY3J5cHRvX3RocmVhZF9udW09JXUifSwKKwl7cG9obWVsZnNfb3B0X3RyYW5zX21heF9wYWdlcywgInRyYW5zX21heF9wYWdlcz0ldSJ9LAorCXtwb2htZWxmc19vcHRfY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQsICJjcnlwdG9fZmFpbF91bnN1cHBvcnRlZCJ9LAorCXtwb2htZWxmc19vcHRfbWNhY2hlX3RpbWVvdXQsICJtY2FjaGVfdGltZW91dD0ldSJ9LAorfTsKKworc3RhdGljIGludCBwb2htZWxmc19wYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCWNoYXIgKnA7CisJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOworCWludCBvcHRpb24sIGVycjsKKworCWlmICghb3B0aW9ucykKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaW50IHRva2VuOworCQlpZiAoISpwKQorCQkJY29udGludWU7CisKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCBwb2htZWxmc190b2tlbnMsIGFyZ3MpOworCisJCWVyciA9IG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCXN3aXRjaCAodG9rZW4pIHsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X2lkeDoKKwkJCQlwc2ItPmlkeCA9IG9wdGlvbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X3RyYW5zX3NjYW5fdGltZW91dDoKKwkJCQlwc2ItPnRyYW5zX3NjYW5fdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMob3B0aW9uKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X2Ryb3Bfc2Nhbl90aW1lb3V0OgorCQkJCXBzYi0+ZHJvcF9zY2FuX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG9wdGlvbik7CisJCQkJYnJlYWs7CisJCQljYXNlIHBvaG1lbGZzX29wdF93YWl0X29uX3BhZ2VfdGltZW91dDoKKwkJCQlwc2ItPndhaXRfb25fcGFnZV90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhvcHRpb24pOworCQkJCWJyZWFrOworCQkJY2FzZSBwb2htZWxmc19vcHRfbWNhY2hlX3RpbWVvdXQ6CisJCQkJcHNiLT5tY2FjaGVfdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMob3B0aW9uKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X3RyYW5zX3JldHJpZXM6CisJCQkJcHNiLT50cmFuc19yZXRyaWVzID0gb3B0aW9uOworCQkJCWJyZWFrOworCQkJY2FzZSBwb2htZWxmc19vcHRfY3J5cHRvX3RocmVhZF9udW06CisJCQkJcHNiLT5jcnlwdG9fdGhyZWFkX251bSA9IG9wdGlvbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X3RyYW5zX21heF9wYWdlczoKKwkJCQlwc2ItPnRyYW5zX21heF9wYWdlcyA9IG9wdGlvbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X2NyeXB0b19mYWlsX3Vuc3VwcG9ydGVkOgorCQkJCXBzYi0+Y3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19mbHVzaF9pbm9kZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZwaS0+dmZzX2lub2RlOworCisJZHByaW50aygiJXM6ICVwOiBpbm86ICVsbHUsIG93bmVkOiAlZC5cbiIsCisJCV9fZnVuY19fLCBpbm9kZSwgcGktPmlubywgdGVzdF9iaXQoTkVURlNfSU5PREVfT1dORUQsICZwaS0+c3RhdGUpKTsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmcGktPnN0YXRlKSkgeworCQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlub2RlLT5pX3NiLT5zX29wLT53cml0ZV9pbm9kZShpbm9kZSwgMCk7CisJfQorCisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZywgMCk7CisKKwlwb2htZWxmc19kYXRhX3VubG9jayhwaSwgMCwgfjAsIFBPSE1FTEZTX1dSSVRFX0xPQ0spOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19wdXRfaW5vZGVfY291bnQoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdW5zaWduZWQgaW50IGNvdW50KQoreworCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIHBpOiAlcCwgaW5vZGU6ICVwLCBjb3VudDogJXUuXG4iLAorCQkJX19mdW5jX18sIHBpLT5pbm8sIHBpLCAmcGktPnZmc19pbm9kZSwgY291bnQpOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChORVRGU19JTk9ERV9ORUVEX0ZMVVNILCAmcGktPnN0YXRlKSkKKwkJcG9obWVsZnNfZmx1c2hfaW5vZGUocGksIGNvdW50KTsKKworCXdoaWxlIChjb3VudC0tKQorCQlpcHV0KCZwaS0+dmZzX2lub2RlKTsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfZHJvcF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcG9obWVsZnNfc2IsIGRyb3BfZHdvcmsud29yayk7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCisJd2hpbGUgKChwaSA9IHBvaG1lbGZzX2dldF9pbm9kZV9mcm9tX2xpc3QocHNiLCAmcHNiLT5kcm9wX2xpc3QsICZjb3VudCkpKSB7CisJCXBvaG1lbGZzX3B1dF9pbm9kZV9jb3VudChwaSwgY291bnQpOworCX0KKwlwb2htZWxmc19jaGVja19zdGF0ZXMocHNiKTsKKworCWlmIChwc2ItPmRyb3Bfc2Nhbl90aW1lb3V0KQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBzYi0+ZHJvcF9kd29yaywgcHNiLT5kcm9wX3NjYW5fdGltZW91dCk7Cit9CisKKy8qCisgKiBSdW4gdGhyb3VnaCBhbGwgdHJhbnNhY3Rpb25zIHN0YXJ0aW5nIGZyb20gdGhlIG9sZGVzdCwKKyAqIGRyb3AgdHJhbnNhY3Rpb24gZnJvbSBjdXJyZW50IHN0YXRlIGFuZCB0cnkgdG8gc2VuZCBpdAorICogdG8gYWxsIHJlbW90ZSBub2Rlcywgd2hpY2ggYXJlIGN1cnJlbnRseSBpbnN0YWxsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHBvaG1lbGZzX3RyYW5zX3NjYW5fc3RhdGUoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3Q7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBzdC0+cHNiOworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gcHNiLT50cmFuc19zY2FuX3RpbWVvdXQ7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZzdC0+dHJhbnNfbG9jayk7CisJZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJnN0LT50cmFuc19yb290KTsgcmJfbm9kZTsgKSB7CisJCWRzdCA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBuZXRmc190cmFuc19kc3QsIHN0YXRlX2VudHJ5KTsKKwkJdCA9IGRzdC0+dHJhbnM7CisKKwkJaWYgKHRpbWVvdXQgJiYgdGltZV9hZnRlcihkc3QtPnNlbmRfdGltZSArIHRpbWVvdXQsIGppZmZpZXMpCisJCQkJJiYgZHN0LT5yZXRyaWVzID09IDApCisJCQlicmVhazsKKworCQlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIHN0OiAlcCwgcmV0cmllczogJXUsIG1heDogJXUuXG4iLAorCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgc3QsIGRzdC0+cmV0cmllcywgcHNiLT50cmFuc19yZXRyaWVzKTsKKwkJbmV0ZnNfdHJhbnNfZ2V0KHQpOworCisJCXJiX25vZGUgPSByYl9uZXh0KHJiX25vZGUpOworCisJCWVyciA9IC1FVElNRURPVVQ7CisJCWlmICh0aW1lb3V0ICYmICgrK2RzdC0+cmV0cmllcyA8IHBzYi0+dHJhbnNfcmV0cmllcykpIHsKKwkJCWVyciA9IG5ldGZzX3RyYW5zX3Jlc2VuZCh0LCBwc2IpOworCQl9CisKKwkJaWYgKGVyciB8fCAodC0+ZmxhZ3MgJiBORVRGU19UUkFOU19TSU5HTEVfRFNUKSkgeworCQkJaWYgKG5ldGZzX3RyYW5zX3JlbW92ZV9ub2xvY2soZHN0LCBzdCkpCisJCQkJbmV0ZnNfdHJhbnNfZHJvcF9kc3Rfbm9zdGF0ZShkc3QpOworCQl9CisKKwkJdC0+cmVzdWx0ID0gZXJyOworCQluZXRmc190cmFuc19wdXQodCk7CisJfQorCW11dGV4X3VubG9jaygmc3QtPnRyYW5zX2xvY2spOworfQorCisvKgorICogV2FsayB0aHJvdWdoIGFsbCBpbnN0YWxsZWQgbmV0d29yayBzdGF0ZXMgYW5kIHJlc2VuZCBhbGwKKyAqIHRyYW5zYWN0aW9ucywgd2hpY2ggYXJlIG9sZCBlbm91Z2guCisgKi8KK3N0YXRpYyB2b2lkIHBvaG1lbGZzX3RyYW5zX3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwb2htZWxmc19zYiwgZHdvcmsud29yayk7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdDsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjOworCisJbXV0ZXhfbG9jaygmcHNiLT5zdGF0ZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlzdCA9ICZjLT5zdGF0ZTsKKworCQlwb2htZWxmc190cmFuc19zY2FuX3N0YXRlKHN0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwc2ItPnN0YXRlX2xvY2spOworCisJLyoKKwkgKiBJZiBubyB0aW1lb3V0IHNwZWNpZmllZCB0aGVuIHN5c3RlbSBpcyBpbiB0aGUgbWlkZGxlIG9mIHVtb3VudCBwcm9jZXNzLAorCSAqIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBzY2FubmluZyBwcm9jZXNzIGFnYWluLgorCSAqLworCWlmIChwc2ItPnRyYW5zX3NjYW5fdGltZW91dCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwc2ItPmR3b3JrLCBwc2ItPnRyYW5zX3NjYW5fdGltZW91dCk7Cit9CisKK2ludCBwb2htZWxmc19tZXRhX2NvbW1hbmRfZGF0YShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1NjQgaWQsIHVuc2lnbmVkIGludCBjbWRfb3AsIGNoYXIgKmFkZG9uLAorCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIG5ldGZzX3RyYW5zX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKnByaXYsIHU2NCBzdGFydCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJnBpLT52ZnNfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisJaW50IGVyciA9IDAsIHN6OworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlpbnQgcGF0aF9sZW4sIGFkZG9uX2xlbiA9IDA7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisKKwlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBjbWQ6ICV1LCBhZGRvbjogJXAuXG4iLCBfX2Z1bmNfXywgcGktPmlubywgY21kX29wLCBhZGRvbik7CisKKwlwYXRoX2xlbiA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBpKTsKKwlpZiAocGF0aF9sZW4gPCAwKSB7CisJCWVyciA9IHBhdGhfbGVuOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAoYWRkb24pCisJCWFkZG9uX2xlbiA9IHN0cmxlbihhZGRvbikgKyAxOyAvKiAwLWJ5dGUgKi8KKwlzeiA9IGFkZG9uX2xlbjsKKworCWlmIChjbWRfb3AgPT0gTkVURlNfSU5PREVfSU5GTykKKwkJc3ogKz0gc2l6ZW9mKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvKTsKKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIHN6ICsgcGF0aF9sZW4sIGZsYWdzLCAwKTsKKwlpZiAoIXQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCXQtPmNvbXBsZXRlID0gY29tcGxldGU7CisJdC0+cHJpdmF0ZSA9IHByaXY7CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCWRhdGEgPSAodm9pZCAqKShjbWQgKyAxKTsKKworCWlmIChjbWRfb3AgPT0gTkVURlNfSU5PREVfSU5GTykgeworCQlpbmZvID0gKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICopKGNtZCArIDEpOworCQlkYXRhID0gKHZvaWQgKikoaW5mbyArIDEpOworCisJCS8qCisJCSAqIFdlIGFyZSB1bmRlciBpX211dGV4LCBjYW4gcmVhZCBhbmQgY2hhbmdlIHdoYXRldmVyIHdlIHdhbnQuLi4KKwkJICovCisJCWluZm8tPm1vZGUgPSBpbm9kZS0+aV9tb2RlOworCQlpbmZvLT5ubGluayA9IGlub2RlLT5pX25saW5rOworCQlpbmZvLT51aWQgPSBpbm9kZS0+aV91aWQ7CisJCWluZm8tPmdpZCA9IGlub2RlLT5pX2dpZDsKKwkJaW5mby0+YmxvY2tzID0gaW5vZGUtPmlfYmxvY2tzOworCQlpbmZvLT5yZGV2ID0gaW5vZGUtPmlfcmRldjsKKwkJaW5mby0+c2l6ZSA9IGlub2RlLT5pX3NpemU7CisJCWluZm8tPnZlcnNpb24gPSBpbm9kZS0+aV92ZXJzaW9uOworCisJCW5ldGZzX2NvbnZlcnRfaW5vZGVfaW5mbyhpbmZvKTsKKwl9CisKKwlwYXRoX2xlbiA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwaSwgZGF0YSwgcGF0aF9sZW4pOworCWlmIChwYXRoX2xlbiA8IDApCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJZHByaW50aygiJXM6IHBhdGhfbGVuOiAlZC5cbiIsIF9fZnVuY19fLCBwYXRoX2xlbik7CisKKwlpZiAoYWRkb24pIHsKKwkJcGF0aF9sZW4tLTsgLyogRG8gbm90IHBsYWNlIG51bGwtYnl0ZSBiZWZvcmUgdGhlIGFkZG9uICovCisJCXBhdGhfbGVuICs9IHNwcmludGYoZGF0YSArIHBhdGhfbGVuLCAiLyVzIiwgYWRkb24pICsgMTsgLyogMCAtIGJ5dGUgKi8KKwl9CisKKwlzeiArPSBwYXRoX2xlbjsKKworCWNtZC0+Y21kID0gY21kX29wOworCWNtZC0+ZXh0ID0gcGF0aF9sZW47CisJY21kLT5zaXplID0gc3o7CisJY21kLT5pZCA9IGlkOworCWNtZC0+c3RhcnQgPSBzdGFydDsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgc3opOworCisJLyoKKwkgKiBOb3RlLCB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGxlYWsgZXJyb3IgaGVyZTogdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2lsbCBub3QKKwkgKiBiZSBpbnZva2VkIGZvciBhbGxvY2F0aW9uIHBhdGggZmFpbHVyZS4KKwkgKi8KKwlyZXR1cm4gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisKK2Vycl9vdXRfZnJlZToKKwluZXRmc190cmFuc19mcmVlKHQpOworZXJyX291dF9leGl0OgorCWlmIChjb21wbGV0ZSkKKwkJY29tcGxldGUoTlVMTCwgMCwgcHJpdiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfbWV0YV9jb21tYW5kKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHVuc2lnbmVkIGludCBjbWRfb3AsIHVuc2lnbmVkIGludCBmbGFncywKKwkJbmV0ZnNfdHJhbnNfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqcHJpdiwgdTY0IHN0YXJ0KQoreworCXJldHVybiBwb2htZWxmc19tZXRhX2NvbW1hbmRfZGF0YShwaSwgcGktPmlubywgY21kX29wLCBOVUxMLCBmbGFncywgY29tcGxldGUsIHByaXYsIHN0YXJ0KTsKK30KKworLyoKKyAqIFNlbmQgcmVxdWVzdCBhbmQgd2FpdCBmb3IgUE9ITUVMRlMgcm9vdCBjYXBhYmlsaXRpZXMgcmVzcG9uc2UsCisgKiB3aGljaCB3aWxsIHVwZGF0ZSBzZXJ2ZXIncyBpbmZvcm1haW9uIGFib3V0IHNpemUgb2YgdGhlIGV4cG9ydCwKKyAqIHBlcm1pc3Npb25zLCBudW1iZXIgb2Ygb2JqZWN0cywgYXZhaWxhYmxlIHNpemUgYW5kIHNvIG9uLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3Jvb3RfaGFuZHNoYWtlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCAwLCAwLCAwKTsKKwlpZiAoIXQpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKworCWNtZC0+Y21kID0gTkVURlNfQ0FQQUJJTElUSUVTOworCWNtZC0+aWQgPSBQT0hNRUxGU19ST09UX0NBUEFCSUxJVElFUzsKKwljbWQtPnNpemUgPSAwOworCWNtZC0+c3RhcnQgPSAwOworCWNtZC0+ZXh0ID0gMDsKKwljbWQtPmNzaXplID0gMDsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgMCk7CisKKwllcnIgPSBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXBzYi0+ZmxhZ3MgPSB+MDsKKwllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwc2ItPndhaXQsCisJCQkocHNiLT5mbGFncyAhPSB+MCksCisJCQlwc2ItPndhaXRfb25fcGFnZV90aW1lb3V0KTsKKwlpZiAoIWVycikgeworCQllcnIgPSAtRVRJTUVET1VUOworCX0gZWxzZSB7CisJCWVyciA9IC1wc2ItPmZsYWdzOworCX0KKworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQWxsb2NhdGUgcHJpdmF0ZSBzdXBlcmJsb2NrIGFuZCBjcmVhdGUgcm9vdCBkaXIuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiOworCWludCBlcnIgPSAtRU5PTUVNOworCXN0cnVjdCBpbm9kZSAqcm9vdDsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKm5waTsKKwlzdHJ1Y3QgcXN0ciBzdHI7CisKKwlwb2htZWxmc19mdHJhbnNfaW5pdCgpOworCisJcHNiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBvaG1lbGZzX3NiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwc2IpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJc2ItPnNfZnNfaW5mbyA9IHBzYjsKKwlzYi0+c19vcCA9ICZwb2htZWxmc19zYl9vcHM7CisJc2ItPnNfbWFnaWMgPSBQT0hNRUxGU19NQUdJQ19OVU07CisJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOworCXNiLT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfU0laRTsKKworCXBzYi0+c2IgPSBzYjsKKworCXBzYi0+aW5vID0gMjsKKwlwc2ItPmlkeCA9IDA7CisJcHNiLT5hY3RpdmVfc3RhdGUgPSBOVUxMOworCXBzYi0+dHJhbnNfcmV0cmllcyA9IDU7CisJcHNiLT50cmFuc19kYXRhX3NpemUgPSBQQUdFX1NJWkU7CisJcHNiLT5kcm9wX3NjYW5fdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJcHNiLT50cmFuc19zY2FuX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDUwMDApOworCXBzYi0+d2FpdF9vbl9wYWdlX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDUwMDApOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBzYi0+d2FpdCk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHNiLT5pbm9fbG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHNiLT5kcm9wX2xpc3QpOworCisJbXV0ZXhfaW5pdCgmcHNiLT5tY2FjaGVfbG9jayk7CisJcHNiLT5tY2FjaGVfcm9vdCA9IFJCX1JPT1Q7CisJcHNiLT5tY2FjaGVfdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwMCk7CisJYXRvbWljX2xvbmdfc2V0KCZwc2ItPm1jYWNoZV9nZW4sIDApOworCisJcHNiLT50cmFuc19tYXhfcGFnZXMgPSAxMDA7CisKKwlwc2ItPmNyeXB0b19hbGlnbl9zaXplID0gMTY7CisJcHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSA9IDA7CisJcHNiLT5oYXNoX3N0cmxlbiA9IDA7CisJcHNiLT5jaXBoZXJfc3RybGVuID0gMDsKKwlwc2ItPnBlcmZvcm1fY3J5cHRvID0gMDsKKwlwc2ItPmNyeXB0b190aHJlYWRfbnVtID0gMjsKKwlwc2ItPmNyeXB0b19mYWlsX3Vuc3VwcG9ydGVkID0gMDsKKwltdXRleF9pbml0KCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnBzYi0+Y3J5cHRvX3JlYWR5X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwc2ItPmNyeXB0b19hY3RpdmVfbGlzdCk7CisKKwlhdG9taWNfc2V0KCZwc2ItPnRyYW5zX2dlbiwgMSk7CisJYXRvbWljX3NldCgmcHNiLT50b3RhbF9pbm9kZXMsIDApOworCisJbXV0ZXhfaW5pdCgmcHNiLT5zdGF0ZV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcHNiLT5zdGF0ZV9saXN0KTsKKworCWVyciA9IHBvaG1lbGZzX3BhcnNlX29wdGlvbnMoKGNoYXIgKikgZGF0YSwgcHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9zYjsKKworCWVyciA9IHBvaG1lbGZzX2NvcHlfY3J5cHRvKHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfc2I7CisKKwllcnIgPSBwb2htZWxmc19zdGF0ZV9pbml0KHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfc3RyaW5nczsKKworCWVyciA9IHBvaG1lbGZzX2NyeXB0b19pbml0KHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3N0YXRlX2V4aXQ7CisKKwllcnIgPSBwb2htZWxmc19yb290X2hhbmRzaGFrZShwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9jcnlwdG9fZXhpdDsKKworCXN0ci5uYW1lID0gIi8iOworCXN0ci5oYXNoID0gamhhc2goIi8iLCAxLCAwKTsKKwlzdHIubGVuID0gMTsKKworCW5waSA9IHBvaG1lbGZzX2NyZWF0ZV9lbnRyeV9sb2NhbChwc2IsIE5VTEwsICZzdHIsIDAsIDA3NTV8U19JRkRJUik7CisJaWYgKElTX0VSUihucGkpKSB7CisJCWVyciA9IFBUUl9FUlIobnBpKTsKKwkJZ290byBlcnJfb3V0X2NyeXB0b19leGl0OworCX0KKworCXJvb3QgPSAmbnBpLT52ZnNfaW5vZGU7CisKKwlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3QpOworCWlmICghc2ItPnNfcm9vdCkKKwkJZ290byBlcnJfb3V0X3B1dF9yb290OworCisJSU5JVF9ERUxBWUVEX1dPUksoJnBzYi0+ZHJvcF9kd29yaywgcG9obWVsZnNfZHJvcF9zY2FuKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBzYi0+ZHJvcF9kd29yaywgcHNiLT5kcm9wX3NjYW5fdGltZW91dCk7CisKKwlJTklUX0RFTEFZRURfV09SSygmcHNiLT5kd29yaywgcG9obWVsZnNfdHJhbnNfc2Nhbik7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwc2ItPmR3b3JrLCBwc2ItPnRyYW5zX3NjYW5fdGltZW91dCk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wdXRfcm9vdDoKKwlpcHV0KHJvb3QpOworZXJyX291dF9jcnlwdG9fZXhpdDoKKwlwb2htZWxmc19jcnlwdG9fZXhpdChwc2IpOworZXJyX291dF9zdGF0ZV9leGl0OgorCXBvaG1lbGZzX3N0YXRlX2V4aXQocHNiKTsKK2Vycl9vdXRfZnJlZV9zdHJpbmdzOgorCWtmcmVlKHBzYi0+Y2lwaGVyX3N0cmluZyk7CisJa2ZyZWUocHNiLT5oYXNoX3N0cmluZyk7CitlcnJfb3V0X2ZyZWVfc2I6CisJa2ZyZWUocHNiKTsKK2Vycl9vdXRfZXhpdDoKKworCWRwcmludGsoIiVzOiBlcnI6ICVkLlxuIiwgX19mdW5jX18sIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNvbWUgVkZTIG1hZ2ljIGhlcmUuLi4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCisJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJcmV0dXJuIGdldF9zYl9ub2Rldihmc190eXBlLCBmbGFncywgZGF0YSwgcG9obWVsZnNfZmlsbF9zdXBlciwKKwkJCQltbnQpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgcG9obWVsX2ZzX3R5cGUgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJwb2htZWwiLAorCS5nZXRfc2IJCT0gcG9obWVsZnNfZ2V0X3NiLAorCS5raWxsX3NiIAk9IGtpbGxfYW5vbl9zdXBlciwKK307CisKKy8qCisgKiBDYWNoZSBhbmQgbW9kdWxlIGluaXRpYWxpemF0aW9ucyBhbmQgZnJlZWluZyByb3V0aW5ncy4KKyAqLworc3RhdGljIHZvaWQgcG9obWVsZnNfaW5pdF9vbmNlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IGRhdGE7CisKKwlpbm9kZV9pbml0X29uY2UoJnBpLT52ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwb2htZWxmc19pbml0X2lub2RlY2FjaGUodm9pZCkKK3sKKwlwb2htZWxmc19pbm9kZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwb2htZWxmc19pbm9kZV9jYWNoZSIsCisJCQkJc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19pbm9kZSksCisJCQkJMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCksCisJCQkJcG9obWVsZnNfaW5pdF9vbmNlKTsKKwlpZiAoIXBvaG1lbGZzX2lub2RlX2NhY2hlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19kZXN0cm95X2lub2RlY2FjaGUodm9pZCkKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocG9obWVsZnNfaW5vZGVfY2FjaGUpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3BvaG1lbF9mcyh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBwb2htZWxmc19jb25maWdfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0gcG9obWVsZnNfaW5pdF9pbm9kZWNhY2hlKCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2NvbmZpZ19leGl0OworCisJZXJyID0gcG9obWVsZnNfbWNhY2hlX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZGVzdHJveTsKKworCWVyciA9IG5ldGZzX3RyYW5zX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfbWNhY2hlX2V4aXQ7CisKKwllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZwb2htZWxfZnNfdHlwZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3RyYW5zOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfdHJhbnM6CisJbmV0ZnNfdHJhbnNfZXhpdCgpOworZXJyX291dF9tY2FjaGVfZXhpdDoKKwlwb2htZWxmc19tY2FjaGVfZXhpdCgpOworZXJyX291dF9kZXN0cm95OgorCXBvaG1lbGZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOworZXJyX291dF9jb25maWdfZXhpdDoKKwlwb2htZWxmc19jb25maWdfZXhpdCgpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3BvaG1lbF9mcyh2b2lkKQoreworICAgICAgICB1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnBvaG1lbF9mc190eXBlKTsKKwlwb2htZWxmc19kZXN0cm95X2lub2RlY2FjaGUoKTsKKwlwb2htZWxmc19tY2FjaGVfZXhpdCgpOworCXBvaG1lbGZzX2NvbmZpZ19leGl0KCk7CisJbmV0ZnNfdHJhbnNfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChpbml0X3BvaG1lbF9mcyk7Cittb2R1bGVfZXhpdChleGl0X3BvaG1lbF9mcyk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUG9obWVsIGZpbGVzeXN0ZW0iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9sb2NrLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNGExODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbG9jay5jCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc2VuZF9sb2NrX3RyYW5zKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksCisJCXU2NCBpZCwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSwgaW50IHR5cGUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZwaS0+dmZzX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJaW50IHBhdGhfbGVuLCBlcnI7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgbmV0ZnNfbG9jayAqbDsKKwlpbnQgaXNpemUgPSAodHlwZSAmIFBPSE1FTEZTX0xPQ0tfR1JBQikgPyAwIDogc2l6ZW9mKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvKTsKKworCWVyciA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlwYXRoX2xlbiA9IGVycjsKKworCWVyciA9IC1FTk9NRU07CisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgcGF0aF9sZW4gKyBzaXplb2Yoc3RydWN0IG5ldGZzX2xvY2spICsgaXNpemUsIDAsIDApOworCWlmICghdCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCWRhdGEgPSBjbWQgKyAxOworCisJZXJyID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBpLCBkYXRhLCBwYXRoX2xlbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9mcmVlOworCXBhdGhfbGVuID0gZXJyOworCisJbCA9IGRhdGEgKyBwYXRoX2xlbjsKKworCWwtPnN0YXJ0ID0gc3RhcnQ7CisJbC0+c2l6ZSA9IHNpemU7CisJbC0+dHlwZSA9IHR5cGU7CisJbC0+aW5vID0gcGktPmlubzsKKworCWNtZC0+Y21kID0gTkVURlNfTE9DSzsKKwljbWQtPnN0YXJ0ID0gMDsKKwljbWQtPmlkID0gaWQ7CisJY21kLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBuZXRmc19sb2NrKSArIHBhdGhfbGVuICsgaXNpemU7CisJY21kLT5leHQgPSBwYXRoX2xlbjsKKwljbWQtPmNzaXplID0gMDsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisJbmV0ZnNfY29udmVydF9sb2NrKGwpOworCisJaWYgKGlzaXplKSB7CisJCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvID0gKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICopKGwgKyAxKTsKKworCQlpbmZvLT5tb2RlID0gaW5vZGUtPmlfbW9kZTsKKwkJaW5mby0+bmxpbmsgPSBpbm9kZS0+aV9ubGluazsKKwkJaW5mby0+dWlkID0gaW5vZGUtPmlfdWlkOworCQlpbmZvLT5naWQgPSBpbm9kZS0+aV9naWQ7CisJCWluZm8tPmJsb2NrcyA9IGlub2RlLT5pX2Jsb2NrczsKKwkJaW5mby0+cmRldiA9IGlub2RlLT5pX3JkZXY7CisJCWluZm8tPnNpemUgPSBpbm9kZS0+aV9zaXplOworCQlpbmZvLT52ZXJzaW9uID0gaW5vZGUtPmlfdmVyc2lvbjsKKworCQluZXRmc19jb252ZXJ0X2lub2RlX2luZm8oaW5mbyk7CisJfQorCisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgcGF0aF9sZW4gKyBzaXplb2Yoc3RydWN0IG5ldGZzX2xvY2spICsgaXNpemUpOworCisJcmV0dXJuIG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCitlcnJfb3V0X2ZyZWU6CisJbmV0ZnNfdHJhbnNfZnJlZSh0KTsKK2Vycl9vdXRfZXhpdDoKKwlwcmludGsoIiVzOiBlcnI6ICVkLlxuIiwgX19mdW5jX18sIGVycik7CisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX2RhdGFfbG9jayhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1NjQgc3RhcnQsIHUzMiBzaXplLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHBpLT52ZnNfaW5vZGUuaV9zYik7CisJc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgaWF0dHIgaWF0dHI7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZwaS0+dmZzX2lub2RlOworCisJZHByaW50aygiJXM6ICVwOiBpbm86ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldSwgIgorCQkJInR5cGU6ICVkLCBsb2NrZWQgYXM6ICVkLCBvd25lZDogJWQuXG4iLAorCQkJX19mdW5jX18sICZwaS0+dmZzX2lub2RlLCBwaS0+aW5vLAorCQkJc3RhcnQsIHNpemUsIHR5cGUsIHBpLT5sb2NrX3R5cGUsCisJCQkhIXRlc3RfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmcGktPnN0YXRlKSk7CisKKwlpZiAoIXBvaG1lbGZzX25lZWRfbG9jayhwaSwgdHlwZSkpCisJCXJldHVybiAwOworCisJbSA9IHBvaG1lbGZzX21jYWNoZV9hbGxvYyhwc2IsIHN0YXJ0LCBzaXplLCBOVUxMKTsKKwlpZiAoSVNfRVJSKG0pKQorCQlyZXR1cm4gUFRSX0VSUihtKTsKKworCWVyciA9IHBvaG1lbGZzX3NlbmRfbG9ja190cmFucyhwaSwgbS0+Z2VuLCBzdGFydCwgc2l6ZSwKKwkJCXR5cGUgfCBQT0hNRUxGU19MT0NLX0dSQUIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm0tPmNvbXBsZXRlLCBwc2ItPm1jYWNoZV90aW1lb3V0KTsKKwlpZiAoZXJyKQorCQllcnIgPSBtLT5lcnI7CisJZWxzZQorCQllcnIgPSAtRVRJTUVET1VUOworCisJaWYgKGVycikgeworCQlwcmludGsoIiVzOiAlcDogaW5vOiAlbGx1LCBtZ2VuOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUsIGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sICZwaS0+dmZzX2lub2RlLCBwaS0+aW5vLCBtLT5nZW4sIHN0YXJ0LCBzaXplLCBlcnIpOworCX0KKworCWlmIChlcnIgJiYgKGVyciAhPSAtRU5PRU5UKSkKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCWlmICghZXJyKSB7CisJCW5ldGZzX2NvbnZlcnRfaW5vZGVfaW5mbygmbS0+aW5mbyk7CisKKwkJaWF0dHIuaWFfdmFsaWQgPSBBVFRSX01PREUgfCBBVFRSX1VJRCB8IEFUVFJfR0lEIHwgQVRUUl9TSVpFIHwgQVRUUl9BVElNRTsKKwkJaWF0dHIuaWFfbW9kZSA9IG0tPmluZm8ubW9kZTsKKwkJaWF0dHIuaWFfdWlkID0gbS0+aW5mby51aWQ7CisJCWlhdHRyLmlhX2dpZCA9IG0tPmluZm8uZ2lkOworCQlpYXR0ci5pYV9zaXplID0gbS0+aW5mby5zaXplOworCQlpYXR0ci5pYV9hdGltZSA9IENVUlJFTlRfVElNRTsKKworCQlkcHJpbnRrKCIlczogJXA6IGlubzogJWxsdSwgbWdlbjogJWxsdSwgc3RhcnQ6ICVsbHUsIGlzaXplOiAlbGx1IC0+ICVsbHUuXG4iLAorCQkJX19mdW5jX18sICZwaS0+dmZzX2lub2RlLCBwaS0+aW5vLCBtLT5nZW4sIHN0YXJ0LCBpbm9kZS0+aV9zaXplLCBtLT5pbmZvLnNpemUpOworCisJCWVyciA9IHBvaG1lbGZzX3NldGF0dHJfcmF3KGlub2RlLCAmaWF0dHIpOworCQlpZiAoIWVycikgeworCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZF9maW5kX2FsaWFzKGlub2RlKTsKKwkJCWlmIChkZW50cnkpIHsKKwkJCQlmc25vdGlmeV9jaGFuZ2UoZGVudHJ5LCBpYXR0ci5pYV92YWxpZCk7CisJCQkJZHB1dChkZW50cnkpOworCQkJfQorCQl9CisJfQorCisJcGktPmxvY2tfdHlwZSA9IHR5cGU7CisJc2V0X2JpdChORVRGU19JTk9ERV9PV05FRCwgJnBpLT5zdGF0ZSk7CisKKwlwb2htZWxmc19tY2FjaGVfcHV0KHBzYiwgbSk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wdXQ6CisJcG9obWVsZnNfbWNhY2hlX3B1dChwc2IsIG0pOworCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19kYXRhX3VubG9jayhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1NjQgc3RhcnQsIHUzMiBzaXplLCBpbnQgdHlwZSkKK3sKKwlkcHJpbnRrKCIlczogJXA6IGlubzogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LCB0eXBlOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgJnBpLT52ZnNfaW5vZGUsIHBpLT5pbm8sIHN0YXJ0LCBzaXplLCB0eXBlKTsKKwlwaS0+bG9ja190eXBlID0gMDsKKwljbGVhcl9iaXQoTkVURlNfSU5PREVfUkVNT1RFX0RJUl9TWU5DRUQsICZwaS0+c3RhdGUpOworCWNsZWFyX2JpdChORVRGU19JTk9ERV9PV05FRCwgJnBpLT5zdGF0ZSk7CisJcmV0dXJuIHBvaG1lbGZzX3NlbmRfbG9ja190cmFucyhwaSwgcGktPmlubywgc3RhcnQsIHNpemUsIHR5cGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL21jYWNoZS5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL21jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMjY2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbWNhY2hlLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwb2htZWxmc19tY2FjaGVfY2FjaGU7CitzdGF0aWMgbWVtcG9vbF90ICpwb2htZWxmc19tY2FjaGVfcG9vbDsKKworc3RhdGljIGlubGluZSBpbnQgcG9obWVsZnNfbWNhY2hlX2NtcCh1NjQgZ2VuLCB1NjQgbmV3KQoreworCWlmIChnZW4gPCBuZXcpCisJCXJldHVybiAxOworCWlmIChnZW4gPiBuZXcpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqcG9obWVsZnNfbWNhY2hlX3NlYXJjaChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgdTY0IGdlbikKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZwc2ItPm1jYWNoZV9yb290OworCXN0cnVjdCByYl9ub2RlICpuID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICp0bXAsICpyZXQgPSBOVUxMOworCWludCBjbXA7CisKKwl3aGlsZSAobikgeworCQl0bXAgPSByYl9lbnRyeShuLCBzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlLCBtY2FjaGVfZW50cnkpOworCisJCWNtcCA9IHBvaG1lbGZzX21jYWNoZV9jbXAodG1wLT5nZW4sIGdlbik7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJcmV0ID0gdG1wOworCQkJcG9obWVsZnNfbWNhY2hlX2dldChyZXQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX21jYWNoZV9pbnNlcnQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm0pCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmcHNiLT5tY2FjaGVfcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqKm4gPSAmcm9vdC0+cmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqcmV0ID0gTlVMTCwgKnRtcDsKKwlpbnQgY21wOworCisJd2hpbGUgKCpuKSB7CisJCXBhcmVudCA9ICpuOworCisJCXRtcCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHBvaG1lbGZzX21jYWNoZSwgbWNhY2hlX2VudHJ5KTsKKworCQljbXAgPSBwb2htZWxmc19tY2FjaGVfY21wKHRtcC0+Z2VuLCBtLT5nZW4pOworCQlpZiAoY21wIDwgMCkKKwkJCW4gPSAmcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCXJldCA9IHRtcDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJldCkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlyYl9saW5rX25vZGUoJm0tPm1jYWNoZV9lbnRyeSwgcGFyZW50LCBuKTsKKwlyYl9pbnNlcnRfY29sb3IoJm0tPm1jYWNoZV9lbnRyeSwgcm9vdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2htZWxmc19tY2FjaGVfcmVtb3ZlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptKQoreworCWlmIChtICYmIG0tPm1jYWNoZV9lbnRyeS5yYl9wYXJlbnRfY29sb3IpIHsKKwkJcmJfZXJhc2UoJm0tPm1jYWNoZV9lbnRyeSwgJnBzYi0+bWNhY2hlX3Jvb3QpOworCQltLT5tY2FjaGVfZW50cnkucmJfcGFyZW50X2NvbG9yID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHBvaG1lbGZzX21jYWNoZV9yZW1vdmVfbG9ja2VkKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptKQoreworCW11dGV4X2xvY2soJnBzYi0+bWNhY2hlX2xvY2spOworCXBvaG1lbGZzX21jYWNoZV9yZW1vdmUocHNiLCBtKTsKKwltdXRleF91bmxvY2soJnBzYi0+bWNhY2hlX2xvY2spOworfQorCitzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICpwb2htZWxmc19tY2FjaGVfYWxsb2Moc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHU2NCBzdGFydCwKKwkJdW5zaWduZWQgaW50IHNpemUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCW0gPSBtZW1wb29sX2FsbG9jKHBvaG1lbGZzX21jYWNoZV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW0pCisJCWdvdG8gZXJyX291dF9leGl0OworCisJaW5pdF9jb21wbGV0aW9uKCZtLT5jb21wbGV0ZSk7CisJbS0+ZXJyID0gMDsKKwlhdG9taWNfc2V0KCZtLT5yZWZjbnQsIDEpOworCW0tPmRhdGEgPSBkYXRhOworCW0tPnN0YXJ0ID0gc3RhcnQ7CisJbS0+c2l6ZSA9IHNpemU7CisJbS0+Z2VuID0gYXRvbWljX2xvbmdfaW5jX3JldHVybigmcHNiLT5tY2FjaGVfZ2VuKTsKKworCW11dGV4X2xvY2soJnBzYi0+bWNhY2hlX2xvY2spOworCWVyciA9IHBvaG1lbGZzX21jYWNoZV9pbnNlcnQocHNiLCBtKTsKKwltdXRleF91bmxvY2soJnBzYi0+bWNhY2hlX2xvY2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJcmV0dXJuIG07CisKK2Vycl9vdXRfZnJlZToKKwltZW1wb29sX2ZyZWUobSwgcG9obWVsZnNfbWNhY2hlX3Bvb2wpOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3ZvaWQgcG9obWVsZnNfbWNhY2hlX2ZyZWUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm0pCit7CisJcG9obWVsZnNfbWNhY2hlX3JlbW92ZV9sb2NrZWQocHNiLCBtKTsKKworCW1lbXBvb2xfZnJlZShtLCBwb2htZWxmc19tY2FjaGVfcG9vbCk7Cit9CisKK2ludCBfX2luaXQgcG9obWVsZnNfbWNhY2hlX2luaXQodm9pZCkKK3sKKwlwb2htZWxmc19tY2FjaGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicG9obWVsZnNfbWNhY2hlX2NhY2hlIiwKKwkJCQlzaXplb2Yoc3RydWN0IHBvaG1lbGZzX21jYWNoZSksCisJCQkJMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCksIE5VTEwpOworCWlmICghcG9obWVsZnNfbWNhY2hlX2NhY2hlKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXBvaG1lbGZzX21jYWNoZV9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKDI1NiwgcG9obWVsZnNfbWNhY2hlX2NhY2hlKTsKKwlpZiAoIXBvaG1lbGZzX21jYWNoZV9wb29sKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJa21lbV9jYWNoZV9kZXN0cm95KHBvaG1lbGZzX21jYWNoZV9jYWNoZSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgcG9obWVsZnNfbWNhY2hlX2V4aXQodm9pZCkKK3sKKwltZW1wb29sX2Rlc3Ryb3kocG9obWVsZnNfbWNhY2hlX3Bvb2wpOworCWttZW1fY2FjaGVfZGVzdHJveShwb2htZWxmc19tY2FjaGVfY2FjaGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldC5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Yjg1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0LmMKQEAgLTAsMCArMSwxMjQ3IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworc3RhdGljIGludCBwb2htZWxmc19mdHJhbnNfc2l6ZSA9IDEwMjQwOworc3RhdGljIHUzMiAqcG9obWVsZnNfZnRyYW5zOworCitpbnQgcG9obWVsZnNfZnRyYW5zX2luaXQodm9pZCkKK3sKKwlwb2htZWxmc19mdHJhbnMgPSB2bWFsbG9jKHBvaG1lbGZzX2Z0cmFuc19zaXplICogNCk7CisJaWYgKCFwb2htZWxmc19mdHJhbnMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcG9obWVsZnNfZnRyYW5zX2V4aXQodm9pZCkKK3sKKwl2ZnJlZShwb2htZWxmc19mdHJhbnMpOworfQorCit2b2lkIHBvaG1lbGZzX2Z0cmFuc19jbGVhbih1NjQgaWQpCit7CisJaWYgKHBvaG1lbGZzX2Z0cmFucykgeworCQl1MzIgaSA9IGlkICYgMHhmZmZmZmZmZjsKKwkJaW50IGlkeCA9IGkgJSBwb2htZWxmc19mdHJhbnNfc2l6ZTsKKworCQlwb2htZWxmc19mdHJhbnNbaWR4XSA9IDA7CisJfQorfQorCit2b2lkIHBvaG1lbGZzX2Z0cmFuc191cGRhdGUodTY0IGlkKQoreworCWlmIChwb2htZWxmc19mdHJhbnMpIHsKKwkJdTMyIGkgPSBpZCAmIDB4ZmZmZmZmZmY7CisJCWludCBpZHggPSBpICUgcG9obWVsZnNfZnRyYW5zX3NpemU7CisKKwkJcG9obWVsZnNfZnRyYW5zW2lkeF0gPSBpOworCX0KK30KKworaW50IHBvaG1lbGZzX2Z0cmFuc19jaGVjayh1NjQgaWQpCit7CisJaWYgKHBvaG1lbGZzX2Z0cmFucykgeworCQl1MzIgaSA9IGlkICYgMHhmZmZmZmZmZjsKKwkJaW50IGlkeCA9IGkgJSBwb2htZWxmc19mdHJhbnNfc2l6ZTsKKworCQlyZXR1cm4gKHBvaG1lbGZzX2Z0cmFuc1tpZHhdID09IGkpOworCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIEFzeW5jIG1hY2hpbmVyeSBsaXZlcyBoZXJlLgorICogQWxsIGNvbW1hbmRzIGJlaW5nIHNlbnQgdG8gc2VydmVyIGRvIF9ub3RfIHJlcXVpcmUgc3luYyByZXBseSwKKyAqIGluc3RlYWQsIGlmIGl0IGlzIHJlYWxseSBuZWVkZWQsIGxpa2UgcmVhZGRpciBvciByZWFkcGFnZSwgY2FsbGVyCisgKiBzbGVlcHMgd2FpdGluZyBmb3IgZGF0YSwgd2hpY2ggd2lsbCBiZSBwbGFjZWQgaW50byBwcm92aWRlZCBidWZmZXIKKyAqIGFuZCBjYWxsZXIgd2lsbCBiZSBhd2FrZW5lZC4KKyAqCisgKiBFdmVyeSBjb21tYW5kIHJlc3BvbnNlIGNhbiBjb21lIHdpdGhvdXQgc29tZSBsaXN0ZW5lci4gRm9yIGV4YW1wbGUKKyAqIHJlYWRkaXIgcmVzcG9uc2Ugd2lsbCBhZGQgbmV3IG9iamVjdHMgaW50byBjYWNoZSB3aXRob3V0IGFwcHJvcHJpYXRlCisgKiByZXF1ZXN0IGZyb20gdXNlcnNwYWNlLiBUaGlzIGlzIHVzZWQgaW4gY2FjaGUgY29oZXJlbmN5LgorICoKKyAqIElmIG9iamVjdCBpcyBub3QgZm91bmQgZm9yIGdpdmVuIGRhdGEsIGl0IGlzIGRpc2NhcmRlZC4KKyAqCisgKiBBbGwgcmVxdWVzdHMgYXJlIHJlY2VpdmVkIGJ5IGRlZGljYXRlZCBrZXJuZWwgdGhyZWFkLgorICovCisKKy8qCisgKiBCYXNpYyBuZXR3b3JrIHNlbmRpbmcvcmVjZWl2aW5nIGZ1bmN0aW9ucy4KKyAqIEJsb2NrZWQgbW9kZSBpcyB1c2VkLgorICovCitzdGF0aWMgaW50IG5ldGZzX2RhdGFfcmVjdihzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0LCB2b2lkICpidWYsIHU2NCBzaXplKQoreworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdjsKKwlpbnQgZXJyOworCisJQlVHX09OKCFzaXplKTsKKworCWlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKwlpb3YuaW92X2xlbiA9IHNpemU7CisKKwltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQ7CisKKwllcnIgPSBrZXJuZWxfcmVjdm1zZyhzdC0+c29ja2V0LCAmbXNnLCAmaW92LCAxLCBpb3YuaW92X2xlbiwKKwkJCW1zZy5tc2dfZmxhZ3MpOworCWlmIChlcnIgPD0gMCkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gcmVjdiBkYXRhOiBzaXplOiAlbGx1LCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHNpemUsIGVycik7CisJCWlmIChlcnIgPT0gMCkKKwkJCWVyciA9IC1FQ09OTlJFU0VUOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfZGF0YV9yZWN2KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOworCWludCBlcnIgPSAwOworCisJd2hpbGUgKHNpemUgJiYgIWVycikgeworCQlyZXZlbnRzID0gbmV0ZnNfc3RhdGVfcG9sbChzdCk7CisKKwkJaWYgKCEocmV2ZW50cyAmIG1hc2spKSB7CisJCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQkJZm9yICg7OykgeworCQkJCXByZXBhcmVfdG9fd2FpdCgmc3QtPnRocmVhZF93YWl0LCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJCQlicmVhazsKKworCQkJCXJldmVudHMgPSBuZXRmc19zdGF0ZV9wb2xsKHN0KTsKKworCQkJCWlmIChyZXZlbnRzICYgbWFzaykKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCWJyZWFrOworCisJCQkJc2NoZWR1bGUoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZpbmlzaF93YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0KTsKKwkJfQorCisJCWVyciA9IDA7CisJCW5ldGZzX3N0YXRlX2xvY2soc3QpOworCQlpZiAoc3QtPnNvY2tldCAmJiAoc3QtPnJlYWRfc29ja2V0ID09IHN0LT5zb2NrZXQpICYmIChyZXZlbnRzICYgUE9MTElOKSkgeworCQkJZXJyID0gbmV0ZnNfZGF0YV9yZWN2KHN0LCBkYXRhLCBzaXplKTsKKwkJCWlmIChlcnIgPiAwKSB7CisJCQkJZGF0YSArPSBlcnI7CisJCQkJc2l6ZSAtPSBlcnI7CisJCQkJZXJyID0gMDsKKwkJCX0gZWxzZSBpZiAoZXJyID09IDApCisJCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJCX0KKworCQlpZiAocmV2ZW50cyAmIGVycl9tYXNrKSB7CisJCQlwcmludGsoIiVzOiByZXZlbnRzOiAleCwgc29ja2V0OiAlcCwgc2l6ZTogJXUsIGVycjogJWQuXG4iLAorCQkJCQlfX2Z1bmNfXywgcmV2ZW50cywgc3QtPnNvY2tldCwgc2l6ZSwgZXJyKTsKKwkJCWVyciA9IC1FQ09OTlJFU0VUOworCQl9CisJCW5ldGZzX3N0YXRlX3VubG9jayhzdCk7CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCWlmIChuZXRmc19zdGF0ZV90cnlsb2NrX3NlbmQoc3QpKSB7CisJCQkJbmV0ZnNfc3RhdGVfZXhpdChzdCk7CisJCQkJZXJyID0gbmV0ZnNfc3RhdGVfaW5pdChzdCk7CisJCQkJaWYgKCFlcnIpCisJCQkJCWVyciA9IC1FQUdBSU47CisJCQkJbmV0ZnNfc3RhdGVfdW5sb2NrX3NlbmQoc3QpOworCQkJfSBlbHNlIHsKKwkJCQlzdC0+bmVlZF9yZXNldCA9IDE7CisJCQl9CisJCX0KKworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJZXJyID0gLUVOT0RFVjsKKworCQlpZiAoZXJyKQorCQkJcHJpbnRrKCIlczogc29ja2V0OiAlcCwgcmVhZF9zb2NrZXQ6ICVwLCByZXZlbnRzOiAleCwgcmV2X2Vycm9yOiAlZCwgIgorCQkJCQkic2hvdWxkX3N0b3A6ICVkLCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHN0LT5zb2NrZXQsIHN0LT5yZWFkX3NvY2tldCwKKwkJCQlyZXZlbnRzLCByZXZlbnRzICYgZXJyX21hc2ssIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSwgc2l6ZSwgZXJyKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfZGF0YV9yZWN2X2FuZF9jaGVjayhzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlpbnQgZXJyOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2KHN0LCBkYXRhLCBzaXplKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzX2lucHV0X2RhdGEoJnN0LT5lbmcsIGNtZC0+aXYsIGRhdGEsIE5VTEwsIHNpemUpOworfQorCisvKgorICogUG9sbGluZyBtYWNoaW5lcnkuCisgKi8KKworc3RydWN0IG5ldGZzX3BvbGxfaGVscGVyCit7CisJcG9sbF90YWJsZSAJCXB0OworCXN0cnVjdCBuZXRmc19zdGF0ZQkqc3Q7Cit9OworCitzdGF0aWMgaW50IG5ldGZzX3F1ZXVlX3dha2Uod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KQoreworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2Yod2FpdCwgc3RydWN0IG5ldGZzX3N0YXRlLCB3YWl0KTsKKworCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGZzX3F1ZXVlX2Z1bmMoc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCwKKwkJCQkgcG9sbF90YWJsZSAqcHQpCit7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihwdCwgc3RydWN0IG5ldGZzX3BvbGxfaGVscGVyLCBwdCktPnN0OworCisJc3QtPndoZWFkID0gd2hlYWQ7CisJaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmc3QtPndhaXQsIG5ldGZzX3F1ZXVlX3dha2UpOworCWFkZF93YWl0X3F1ZXVlKHdoZWFkLCAmc3QtPndhaXQpOworfQorCitzdGF0aWMgdm9pZCBuZXRmc19wb2xsX2V4aXQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlpZiAoc3QtPndoZWFkKSB7CisJCXJlbW92ZV93YWl0X3F1ZXVlKHN0LT53aGVhZCwgJnN0LT53YWl0KTsKKwkJc3QtPndoZWFkID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmV0ZnNfcG9sbF9pbml0KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX3BvbGxfaGVscGVyIHBoOworCisJcGguc3QgPSBzdDsKKwlpbml0X3BvbGxfZnVuY3B0cigmcGgucHQsICZuZXRmc19xdWV1ZV9mdW5jKTsKKworCXN0LT5zb2NrZXQtPm9wcy0+cG9sbChOVUxMLCBzdC0+c29ja2V0LCAmcGgucHQpOworCXJldHVybiAwOworfQorCisvKgorICogR2V0IHJlc3BvbnNlIGZvciByZWFkcGFnZSBjb21tYW5kLiBXZSBzZWFyY2ggaW5vZGUgYW5kIHBhZ2UgaW4gaXRzIG1hcHBpbmcKKyAqIGFuZCBjb3B5IGRhdGEgaW50by4gSWYgaXQgd2FzIGFzeW5jIHJlcXVlc3QsIHRoZW4gd2UgcXVldWUgcGFnZSBpbnRvIHNoYXJlZAorICogZGF0YSBhbmQgd2FrZXVwIGxpc3RlbmVyLCB3aG8gd2lsbCBjb3B5IGl0IHRvIHVzZXJzcGFjZS4KKyAqCisgKiBUaGVyZSBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3Mgb2YgYWxsb3dpbmcgdG8gY2FsbCBjb3B5X3RvX3VzZXIoKSBkaXJlY3RseSBmcm9tCisgKiBhc3luYyByZWNlaXZpbmcga2VybmVsIHRocmVhZC4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19yZWFkX3BhZ2VfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHN0LT5wc2I7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjbWQtPnNpemUgPiBQQUdFX0NBQ0hFX1NJWkUpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJaW5vZGUgPSBpbG9va3VwKHN0LT5wc2ItPnNiLCBjbWQtPmlkKTsKKwlpZiAoIWlub2RlKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kIGlub2RlOiBpZDogJWxsdS5cbiIsIF9fZnVuY19fLCBjbWQtPmlkKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgY21kLT5zdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKKwlpZiAoIXBhZ2UgfHwgIVBhZ2VMb2NrZWQocGFnZSkpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGZpbmQvbG9jayBwYWdlOiBwYWdlOiAlcCwgaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBpbmRleDogJWxsdS5cbiIsCisJCQkJX19mdW5jX18sIHBhZ2UsIGNtZC0+aWQsIGNtZC0+c3RhcnQsIGNtZC0+c3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisKKwkJd2hpbGUgKGNtZC0+c2l6ZSkgeworCQkJdW5zaWduZWQgaW50IHN6ID0gbWluKGNtZC0+c2l6ZSwgc3QtPnNpemUpOworCisJCQllcnIgPSBwb2htZWxmc19kYXRhX3JlY3Yoc3QsIHN0LT5kYXRhLCBzeik7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCisJCQljbWQtPnNpemUgLT0gc3o7CisJCX0KKworCQllcnIgPSAtRU5PREVWOworCQlpZiAocGFnZSkKKwkJCWdvdG8gZXJyX291dF9wYWdlX3B1dDsKKwkJZ290byBlcnJfb3V0X3B1dDsKKwl9CisKKwlpZiAoY21kLT5zaXplKSB7CisJCXZvaWQgKmFkZHI7CisKKwkJYWRkciA9IGttYXAocGFnZSk7CisJCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdihzdCwgYWRkciwgY21kLT5zaXplKTsKKwkJa3VubWFwKHBhZ2UpOworCisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfcGFnZV91bmxvY2s7CisJfQorCisJZHByaW50aygiJXM6IHBhZ2U6ICVwLCBzdGFydDogJWxsdSwgc2l6ZTogJXUsIGxvY2tlZDogJWQuXG4iLAorCQlfX2Z1bmNfXywgcGFnZSwgY21kLT5zdGFydCwgY21kLT5zaXplLCBQYWdlTG9ja2VkKHBhZ2UpKTsKKworCVNldFBhZ2VDaGVja2VkKHBhZ2UpOworCWlmICgocHNiLT5oYXNoX3N0cmluZyB8fCBwc2ItPmNpcGhlcl9zdHJpbmcpICYmIHBzYi0+cGVyZm9ybV9jcnlwdG8gJiYgY21kLT5zaXplKSB7CisJCWVyciA9IHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzX2lucHV0X3BhZ2UoJnN0LT5lbmcsIHBhZ2UsIGNtZC0+c2l6ZSwgY21kLT5pdik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfb3V0X3BhZ2VfdW5sb2NrOworCX0gZWxzZSB7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwl9CisKKwlwb2htZWxmc19wdXRfaW5vZGUoUE9ITUVMRlNfSShpbm9kZSkpOworCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcGFnZV91bmxvY2s6CisJU2V0UGFnZUVycm9yKHBhZ2UpOworCXVubG9ja19wYWdlKHBhZ2UpOworZXJyX291dF9wYWdlX3B1dDoKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CitlcnJfb3V0X3B1dDoKKwlwb2htZWxmc19wdXRfaW5vZGUoUE9ITUVMRlNfSShpbm9kZSkpOworZXJyX291dF9leGl0OgorCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY2hlY2tfbmFtZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHFzdHIgKnN0ciwKKwkJc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm8pCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKwlpbnQgZXJyID0gMDsKKwl1NjQgaW5vID0gMDsKKworCW11dGV4X2xvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCW4gPSBwb2htZWxmc19zZWFyY2hfaGFzaChwYXJlbnQsIHN0ci0+aGFzaCk7CisJaWYgKG4pCisJCWlubyA9IG4tPmlubzsKKwltdXRleF91bmxvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCisJaWYgKCFpbm8pCisJCWdvdG8gb3V0OworCisJaW5vZGUgPSBpbG9va3VwKHBhcmVudC0+dmZzX2lub2RlLmlfc2IsIGlubyk7CisJaWYgKCFpbm9kZSkKKwkJZ290byBvdXQ7CisKKwlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBpbm9kZTogJWxsdS5cbiIsIF9fZnVuY19fLCBwYXJlbnQtPmlubywgaW5vKTsKKworCXBvaG1lbGZzX2ZpbGxfaW5vZGUoaW5vZGUsIGluZm8pOworCXBvaG1lbGZzX3B1dF9pbm9kZShQT0hNRUxGU19JKGlub2RlKSk7CisJZXJyID0gLUVFWElTVDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVhZGRpciByZXNwb25zZSBmcm9tIHNlcnZlci4gSWYgc3BlY2lhbCBmaWVsZCBpcyBzZXQsIHdlIHdha2V1cAorICogbGlzdGVuZXIgKHJlYWRkaXIoKSBjYWxsKSwgd2hpY2ggd2lsbCBjb3B5IGRhdGEgdG8gdXNlcnNwYWNlLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlYWRkaXJfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50ID0gTlVMTCwgKm5waTsKKwlpbnQgZXJyID0gMCwgbGFzdCA9IGNtZC0+ZXh0OworCXN0cnVjdCBxc3RyIHN0cjsKKworCWlmIChjbWQtPnNpemUgPiBzdC0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbm9kZSA9IGlsb29rdXAoc3QtPnBzYi0+c2IsIGNtZC0+aWQpOworCWlmICghaW5vZGUpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGZpbmQgaW5vZGU6IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sIGNtZC0+aWQpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJcGFyZW50ID0gUE9ITUVMRlNfSShpbm9kZSk7CisKKwlpZiAoIWNtZC0+c2l6ZSAmJiBjbWQtPnN0YXJ0KSB7CisJCWVyciA9IC1jbWQtPnN0YXJ0OworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY21kLT5zaXplKSB7CisJCWNoYXIgKm5hbWU7CisKKwkJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2X2FuZF9jaGVjayhzdCwgc3QtPmRhdGEsIGNtZC0+c2l6ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfcHV0OworCisJCWluZm8gPSAoc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKikoc3QtPmRhdGEpOworCisJCW5hbWUgPSAoY2hhciAqKShpbmZvICsgMSk7CisJCXN0ci5sZW4gPSBjbWQtPnNpemUgLSBzaXplb2Yoc3RydWN0IG5ldGZzX2lub2RlX2luZm8pIC0gMSAtIGNtZC0+Y3BhZDsKKwkJbmFtZVtzdHIubGVuXSA9IDA7CisJCXN0ci5uYW1lID0gbmFtZTsKKwkJc3RyLmhhc2ggPSBqaGFzaChzdHIubmFtZSwgc3RyLmxlbiwgMCk7CisKKwkJbmV0ZnNfY29udmVydF9pbm9kZV9pbmZvKGluZm8pOworCisJCWlmIChwYXJlbnQpIHsKKwkJCWVyciA9IHBvaG1lbGZzX2NoZWNrX25hbWUocGFyZW50LCAmc3RyLCBpbmZvKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlpZiAoZXJyID09IC1FRVhJU1QpCisJCQkJCWVyciA9IDA7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQlpbmZvLT5pbm8gPSBjbWQtPnN0YXJ0OworCQlpZiAoIWluZm8tPmlubykKKwkJCWluZm8tPmlubyA9IHBvaG1lbGZzX25ld19pbm8oc3QtPnBzYik7CisKKwkJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgaW5vOiAlbGx1LCBuYW1lOiAnJXMnLCBoYXNoOiAleCwgbGVuOiAldSwgbW9kZTogJW8uXG4iLAorCQkJCV9fZnVuY19fLCBwYXJlbnQtPmlubywgaW5mby0+aW5vLCBzdHIubmFtZSwgc3RyLmhhc2gsIHN0ci5sZW4sCisJCQkJaW5mby0+bW9kZSk7CisKKwkJbnBpID0gcG9obWVsZnNfbmV3X2lub2RlKHN0LT5wc2IsIHBhcmVudCwgJnN0ciwgaW5mbywgMCk7CisJCWlmIChJU19FUlIobnBpKSkgeworCQkJZXJyID0gUFRSX0VSUihucGkpOworCisJCQlpZiAoZXJyICE9IC1FRVhJU1QpCisJCQkJZ290byBlcnJfb3V0X3B1dDsKKwkJfSBlbHNlIHsKKwkJCXNldF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJm5waS0+c3RhdGUpOworCQkJY2xlYXJfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmbnBpLT5zdGF0ZSk7CisJCX0KKwl9CitvdXQ6CisJaWYgKGxhc3QpIHsKKwkJc2V0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfRElSX1NZTkNFRCwgJnBhcmVudC0+c3RhdGUpOworCQlzZXRfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwYXJlbnQtPnN0YXRlKTsKKwkJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisJfQorCXBvaG1lbGZzX3B1dF9pbm9kZShwYXJlbnQpOworCisJcmV0dXJuIGVycjsKKworZXJyX291dF9wdXQ6CisJY2xlYXJfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9ESVJfU1lOQ0VELCAmcGFyZW50LT5zdGF0ZSk7CisJcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBpbm86ICVsbHUsIGNtZF9pZDogJWxsdS5cbiIsIF9fZnVuY19fLCBwYXJlbnQtPmlubywgY21kLT5zdGFydCwgY21kLT5pZCk7CisJcG9obWVsZnNfcHV0X2lub2RlKHBhcmVudCk7CisJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIExvb2t1cCBjb21tYW5kIHJlc3BvbnNlLgorICogSXQgc2VhcmNoZXMgZm9yIGlub2RlIHRvIGJlIGxvb2tlZCBhdCAoaWYgaXQgZXhpc3RzKSBhbmQgc3Vic3RpdHV0ZXMKKyAqIGl0cyBpbm9kZSBpbmZvcm1hdGlvbiAoc2l6ZSwgcGVybWlzc2lvbiwgbW9kZSBhbmQgc28gb24pLCBpZiBpbm9kZSBkb2VzCisgKiBub3QgZXhpc3QsIG5ldyBvbmUgd2lsbCBiZSBjcmVhdGVkIGFuZCBpbnNlcnRlZCBpbnRvIGNhY2hlcy4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19sb29rdXBfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCA9IE5VTEwsICpucGk7CisJaW50IGVyciA9IC1FSU5WQUw7CisJY2hhciAqbmFtZTsKKworCWlub2RlID0gaWxvb2t1cChzdC0+cHNiLT5zYiwgY21kLT5pZCk7CisJaWYgKCFpbm9kZSkgeworCQlwcmludGsoIiVzOiBsb29rdXAgcmVzcG9uc2U6IGlkOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUuXG4iLAorCQkJCV9fZnVuY19fLCBjbWQtPmlkLCBjbWQtPnN0YXJ0LCBjbWQtPnNpemUpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisJcGFyZW50ID0gUE9ITUVMRlNfSShpbm9kZSk7CisKKwlpZiAoIWNtZC0+c2l6ZSkgeworCQllcnIgPSAtY21kLT5zdGFydDsKKwkJZ290byBlcnJfb3V0X3B1dDsKKwl9CisKKwlpZiAoY21kLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvKSkgeworCQlwcmludGsoIiVzOiBicm9rZW4gbG9va3VwIHJlc3BvbnNlOiBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgY21kLT5pZCwgY21kLT5zdGFydCwgY21kLT5zaXplKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0X3B1dDsKKwl9CisKKwllcnIgPSBwb2htZWxmc19kYXRhX3JlY3ZfYW5kX2NoZWNrKHN0LCBzdC0+ZGF0YSwgY21kLT5zaXplKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJaW5mbyA9IChzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqKShzdC0+ZGF0YSk7CisJbmFtZSA9IChjaGFyICopKGluZm8gKyAxKTsKKworCW5ldGZzX2NvbnZlcnRfaW5vZGVfaW5mbyhpbmZvKTsKKworCWluZm8tPmlubyA9IGNtZC0+c3RhcnQ7CisJaWYgKCFpbmZvLT5pbm8pCisJCWluZm8tPmlubyA9IHBvaG1lbGZzX25ld19pbm8oc3QtPnBzYik7CisKKwlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBpbm86ICVsbHUsIG5hbWU6ICclcycsIHN0YXJ0OiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCBwYXJlbnQtPmlubywgaW5mby0+aW5vLCBuYW1lLCBjbWQtPnN0YXJ0KTsKKworCWlmIChjbWQtPnN0YXJ0KQorCQlucGkgPSBwb2htZWxmc19uZXdfaW5vZGUoc3QtPnBzYiwgcGFyZW50LCBOVUxMLCBpbmZvLCAwKTsKKwllbHNlIHsKKwkJc3RydWN0IHFzdHIgc3RyOworCisJCXN0ci5uYW1lID0gbmFtZTsKKwkJc3RyLmxlbiA9IGNtZC0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbykgLSAxIC0gY21kLT5jcGFkOworCQlzdHIuaGFzaCA9IGpoYXNoKG5hbWUsIHN0ci5sZW4sIDApOworCisJCW5waSA9IHBvaG1lbGZzX25ld19pbm9kZShzdC0+cHNiLCBwYXJlbnQsICZzdHIsIGluZm8sIDApOworCX0KKwlpZiAoSVNfRVJSKG5waSkpIHsKKwkJZXJyID0gUFRSX0VSUihucGkpOworCisJCWlmIChlcnIgIT0gLUVFWElTVCkKKwkJCWdvdG8gZXJyX291dF9wdXQ7CisJfSBlbHNlIHsKKwkJc2V0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmbnBpLT5zdGF0ZSk7CisJCWNsZWFyX2JpdChORVRGU19JTk9ERV9PV05FRCwgJm5waS0+c3RhdGUpOworCX0KKworCWNsZWFyX2JpdChORVRGU19DT01NQU5EX1BFTkRJTkcsICZwYXJlbnQtPnN0YXRlKTsKKwlwb2htZWxmc19wdXRfaW5vZGUocGFyZW50KTsKKworCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcHV0OgorCXBvaG1lbGZzX3B1dF9pbm9kZShwYXJlbnQpOworZXJyX291dF9leGl0OgorCWNsZWFyX2JpdChORVRGU19DT01NQU5EX1BFTkRJTkcsICZwYXJlbnQtPnN0YXRlKTsKKwl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKwlwcmludGsoIiVzOiBpbm9kZTogJXAsIGlkOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUsIGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sIGlub2RlLCBjbWQtPmlkLCBjbWQtPnN0YXJ0LCBjbWQtPnNpemUsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENyZWF0ZSByZXNwb25zZSwganVzdCBtYXJrcyBsb2NhbCBpbm9kZSBhcyAnY3JlYXRlZCcsIHNvIHRoYXQgd3JpdGViYWNrCisgKiBmb3IgYW55IG9mIGl0cyBjaGlsZHJlbiAob3Igb3duKSB3b3VsZCBub3QgdHJ5IHRvIHN5bmMgaXQgYWdhaW4uCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfY3JlYXRlX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpOworCisJaW5vZGUgPSBpbG9va3VwKHN0LT5wc2ItPnNiLCBjbWQtPmlkKTsKKwlpZiAoIWlub2RlKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kIGlub2RlOiBpZDogJWxsdSwgc3RhcnQ6ICVsbHUuXG4iLAorCQkJCV9fZnVuY19fLCBjbWQtPmlkLCBjbWQtPnN0YXJ0KTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKworCS8qCisJICogVG8gbG9jayBvciBub3QgdG8gbG9jaz8KKwkgKiBXZSBhY3R1YWxseSBkbyBub3QgY2FyZSBpZiBpdCByYWNlcy4uLgorCSAqLworCWlmIChjbWQtPnN0YXJ0KQorCQltYWtlX2JhZF9pbm9kZShpbm9kZSk7CisJc2V0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKTsKKworCXBvaG1lbGZzX3B1dF9pbm9kZShwaSk7CisKKwl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCXJldHVybiAtRU5PRU5UOworfQorCisvKgorICogT2JqZWN0IHJlbW92ZSByZXNwb25zZS4gSnVzdCBzYXlzIHRoYXQgcmVtb3ZlIHJlcXVlc3QgaGFzIGJlZW4gcmVjZWl2ZWQuCisgKiBVc2VkIGluIGNhY2hlIGNvaGVyZW5jeSBwcm90b2NvbC4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19yZW1vdmVfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlpbnQgZXJyOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2X2FuZF9jaGVjayhzdCwgc3QtPmRhdGEsIGNtZC0+c2l6ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIHBhdGg6ICclcycuXG4iLCBfX2Z1bmNfXywgY21kLT5pZCwgKGNoYXIgKilzdC0+ZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRyYW5zYWN0aW9uIHJlcGx5IHByb2Nlc3NpbmcuCisgKgorICogRmluZCB0cmFuc2FjdGlvbiBiYXNlZCBvbiBpdHMgZ2VuZXJhdGlvbiBudW1iZXIsIGJ1bXAgaXRzIHJlZmVyZW5jZSBjb3VudGVyLAorICogc28gdGhhdCBub25lIGNvdWxkIGZyZWUgaXQgdW5kZXIgdXMsIGRyb3AgZnJvbSB0aGUgdHJlZXMgYW5kIGxpc3RzIGFuZAorICogZHJvcCByZWZlcmVuY2UgY291bnRlci4gV2hlbiBpdCBoaXRzIHplcm8gKHdoZW4gYWxsIGRlc3RpbmF0aW9ucyByZXBsaWVkCisgKiBhbmQgYWxsIHRpbWVvdXQgaGFuZGxlZCBieSBhc3luYyBzY2FubmluZyBjb2RlKSwgY29tcGxldGlvbiB3aWxsIGJlIGNhbGxlZAorICogYW5kIHRyYW5zYWN0aW9uIHdpbGwgYmUgZnJlZWQuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfdHJhbnNhY3Rpb25fcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3Q7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzaG9ydCBlcnIgPSAoc2lnbmVkKWNtZC0+ZXh0OworCisJbXV0ZXhfbG9jaygmc3QtPnRyYW5zX2xvY2spOworCWRzdCA9IG5ldGZzX3RyYW5zX3NlYXJjaChzdCwgY21kLT5zdGFydCk7CisJaWYgKGRzdCkgeworCQluZXRmc190cmFuc19yZW1vdmVfbm9sb2NrKGRzdCwgc3QpOworCQl0ID0gZHN0LT50cmFuczsKKworCQlwb2htZWxmc19mdHJhbnNfdXBkYXRlKGNtZC0+c3RhcnQpOworCX0KKwltdXRleF91bmxvY2soJnN0LT50cmFuc19sb2NrKTsKKworCWlmICghdCkgeworCQlpbnQgY2hlY2sgPSBwb2htZWxmc19mdHJhbnNfY2hlY2soY21kLT5zdGFydCk7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kIHRyYW5zYWN0aW9uOiBzdGFydDogJWxsdTogaWQ6ICVsbHUsIHNpemU6ICV1LCBleHQ6ICV1LCBkb3VibGU6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgY21kLT5zdGFydCwgY21kLT5pZCwgY21kLT5zaXplLCBjbWQtPmV4dCwgY2hlY2spOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl0LT5yZXN1bHQgPSBlcnI7CisJbmV0ZnNfdHJhbnNfZHJvcF9kc3Rfbm9zdGF0ZShkc3QpOworCitvdXQ6CisJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIElub2RlIG1ldGFkYXRhIGNhY2hlIGNvaGVyZW5jeSBtZXNzYWdlLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3BhZ2VfY2FjaGVfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJZHByaW50aygiJXM6IHN0OiAlcCwgaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldS5cbiIsIF9fZnVuY19fLCBzdCwgY21kLT5pZCwgY21kLT5zdGFydCwgY21kLT5zaXplKTsKKworCWlub2RlID0gaWxvb2t1cChzdC0+cHNiLT5zYiwgY21kLT5pZCk7CisJaWYgKCFpbm9kZSkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZCBpbm9kZTogaWQ6ICVsbHUuXG4iLCBfX2Z1bmNfXywgY21kLT5pZCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXNldF9iaXQoTkVURlNfSU5PREVfTkVFRF9GTFVTSCwgJlBPSE1FTEZTX0koaW5vZGUpLT5zdGF0ZSk7CisJcG9obWVsZnNfcHV0X2lub2RlKFBPSE1FTEZTX0koaW5vZGUpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUm9vdCBjYXBhYmlsaXRpZXMgcmVzcG9uc2U6IGV4cG9ydCBzdGF0aXN0aWNzCisgKiBsaWtlIHVzZWQgYW5kIGF2YWlsYWJsZSBzaXplLCBudW1iZXIgb2YgZmlsZXMgYW5kIGRpcnMsCisgKiBwZXJtaXNzaW9ucy4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19yb290X2NhcF9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBuZXRmc19yb290X2NhcGFiaWxpdGllcyAqY2FwOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gc3QtPnBzYjsKKworCWlmIChjbWQtPnNpemUgIT0gc2l6ZW9mKHN0cnVjdCBuZXRmc19yb290X2NhcGFiaWxpdGllcykpIHsKKwkJcHNiLT5mbGFncyA9IEVQUk9UTzsKKwkJd2FrZV91cCgmcHNiLT53YWl0KTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJY2FwID0gc3QtPmRhdGE7CisKKwluZXRmc19jb252ZXJ0X3Jvb3RfY2FwYWJpbGl0aWVzKGNhcCk7CisKKwlpZiAocHNiLT50b3RhbF9zaXplIDwgY2FwLT51c2VkICsgY2FwLT5hdmFpbCkKKwkJcHNiLT50b3RhbF9zaXplID0gY2FwLT51c2VkICsgY2FwLT5hdmFpbDsKKwlpZiAoY2FwLT5hdmFpbCkKKwkJcHNiLT5hdmFpbF9zaXplID0gY2FwLT5hdmFpbDsKKwlwc2ItPnN0YXRlX2ZsYWdzID0gY2FwLT5mbGFnczsKKworCWlmIChwc2ItPnN0YXRlX2ZsYWdzICYgUE9ITUVMRlNfRkxBR1NfUk8pIHsKKwkJcHNiLT5zYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CisJCXByaW50ayhLRVJOX0lORk8gIk1vdW50aW5nIFBPSE1FTEZTICglZCkgcmVhZC1vbmx5LlxuIiwgcHNiLT5pZHgpOworCX0KKworCWlmIChwc2ItPnN0YXRlX2ZsYWdzICYgUE9ITUVMRlNfRkxBR1NfWEFUVFIpCisJCXByaW50ayhLRVJOX0lORk8gIk1vdW50aW5nIFBPSE1FTEZTICglZCkgIgorCQkJIndpdGggZXh0ZW5kZWQgYXR0cmlidXRlcyBzdXBwb3J0LlxuIiwgcHNiLT5pZHgpOworCisJaWYgKGF0b21pY19yZWFkKCZwc2ItPnRvdGFsX2lub2RlcykgPD0gMSkKKwkJYXRvbWljX2xvbmdfc2V0KCZwc2ItPnRvdGFsX2lub2RlcywgY2FwLT5ucl9maWxlcyk7CisKKwlkcHJpbnRrKCIlczogdG90YWw6ICVsbHUsIGF2YWlsOiAlbGx1LCBmbGFnczogJWxseCwgaW5vZGVzOiAlbGx1LlxuIiwKKwkJX19mdW5jX18sIHBzYi0+dG90YWxfc2l6ZSwgcHNiLT5hdmFpbF9zaXplLCBwc2ItPnN0YXRlX2ZsYWdzLCBjYXAtPm5yX2ZpbGVzKTsKKworCXBzYi0+ZmxhZ3MgPSAwOworCXdha2VfdXAoJnBzYi0+d2FpdCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDcnlwdG8gY2FwYWJpbGl0aWVzIG9mIHRoZSBzZXJ2ZXIsIHdoZXJlIGl0IHNheXMgdGhhdAorICogaXQgc3VwcG9ydHMgb3IgZG9lcyBub3QgcmVxdWVzdGVkIGhhc2gvY2lwaGVyIGFsZ29yaXRobXMuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX2NhcF9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBuZXRmc19jcnlwdG9fY2FwYWJpbGl0aWVzICpjYXA7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBzdC0+cHNiOworCWludCBlcnIgPSAwOworCisJaWYgKGNtZC0+c2l6ZSAhPSBzaXplb2Yoc3RydWN0IG5ldGZzX2NyeXB0b19jYXBhYmlsaXRpZXMpKSB7CisJCXBzYi0+ZmxhZ3MgPSBFUFJPVE87CisJCXdha2VfdXAoJnBzYi0+d2FpdCk7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCWNhcCA9IHN0LT5kYXRhOworCisJZHByaW50aygiJXM6IGNpcGhlciAnJXMnOiAlcywgaGFzaDogJyVzJzogJXMuXG4iLAorCQkJX19mdW5jX18sCisJCQlwc2ItPmNpcGhlcl9zdHJpbmcsIChjYXAtPmNpcGhlcl9zdHJsZW4pPyJTVVBQT1JURUQiOiJOT1QgU1VQUE9SVEVEIiwKKwkJCXBzYi0+aGFzaF9zdHJpbmcsIChjYXAtPmhhc2hfc3RybGVuKT8iU1VQUE9SVEVEIjoiTk9UIFNVUFBPUlRFRCIpOworCisJaWYgKCFjYXAtPmhhc2hfc3RybGVuKSB7CisJCWlmIChwc2ItPmhhc2hfc3RybGVuICYmIHBzYi0+Y3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQpCisJCQllcnIgPSAtRU5PVFNVUFA7CisJCXBzYi0+aGFzaF9zdHJsZW4gPSAwOworCQlrZnJlZShwc2ItPmhhc2hfc3RyaW5nKTsKKwkJcHNiLT5oYXNoX3N0cmluZyA9IE5VTEw7CisJfQorCisJaWYgKCFjYXAtPmNpcGhlcl9zdHJsZW4pIHsKKwkJaWYgKHBzYi0+Y2lwaGVyX3N0cmxlbiAmJiBwc2ItPmNyeXB0b19mYWlsX3Vuc3VwcG9ydGVkKQorCQkJZXJyID0gLUVOT1RTVVBQOworCQlwc2ItPmNpcGhlcl9zdHJsZW4gPSAwOworCQlrZnJlZShwc2ItPmNpcGhlcl9zdHJpbmcpOworCQlwc2ItPmNpcGhlcl9zdHJpbmcgPSBOVUxMOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDYXBhYmlsaXRpZXMgaGFuZHNoYWtlIHJlc3BvbnNlLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2NhcGFiaWxpdGllc19yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCWludCBlcnIgPSAwOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2KHN0LCBzdC0+ZGF0YSwgY21kLT5zaXplKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChjbWQtPmlkKSB7CisJCWNhc2UgUE9ITUVMRlNfQ1JZUFRPX0NBUEFCSUxJVElFUzoKKwkJCXJldHVybiBwb2htZWxmc19jcnlwdG9fY2FwX3Jlc3BvbnNlKHN0KTsKKwkJY2FzZSBQT0hNRUxGU19ST09UX0NBUEFCSUxJVElFUzoKKwkJCXJldHVybiBwb2htZWxmc19yb290X2NhcF9yZXNwb25zZShzdCk7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBSZWNlaXZpbmcgZXh0ZW5kZWQgYXR0cmlidXRlLgorICogRG9lcyBub3Qgd29yayBwcm9wZXJseSBpZiByZWNlaXZlZCBzaXplIGlzIG1vcmUgdGhhbiByZXF1ZXN0ZWQgb25lLAorICogaXQgc2hvdWxkIG5vdCBoYXBwZW4gd2l0aCBjdXJyZW50IHJlcXVlc3QvcmVwbHkgbW9kZWwgdGhvdWdoLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2dldHhhdHRyX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBzdC0+cHNiOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm07CisJc2hvcnQgZXJyb3IgPSAoc2lnbmVkIHNob3J0KWNtZC0+ZXh0LCBlcnI7CisJdW5zaWduZWQgaW50IHN6LCB0b3RhbF9zaXplOworCisJbSA9IHBvaG1lbGZzX21jYWNoZV9zZWFyY2gocHNiLCBjbWQtPmlkKTsKKworCWRwcmludGsoIiVzOiBpZDogJWxsdSwgZ2VuOiAlbGx1LCBlcnI6ICVkLlxuIiwKKwkJX19mdW5jX18sIGNtZC0+aWQsIChtKT9tLT5nZW46MCwgZXJyb3IpOworCisJaWYgKCFtKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kIGdldHhhdHRyIGNhY2hlIGVudHJ5OiBpZDogJWxsdS5cbiIsIF9fZnVuY19fLCBjbWQtPmlkKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKGNtZC0+c2l6ZSkgeworCQlzeiA9IG1pbl90KHVuc2lnbmVkIGludCwgY21kLT5zaXplLCBtLT5zaXplKTsKKwkJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2X2FuZF9jaGVjayhzdCwgbS0+ZGF0YSwgc3opOworCQlpZiAoZXJyKSB7CisJCQllcnJvciA9IGVycjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbS0+c2l6ZSA9IHN6OworCQl0b3RhbF9zaXplID0gY21kLT5zaXplIC0gc3o7CisKKwkJd2hpbGUgKHRvdGFsX3NpemUpIHsKKwkJCXN6ID0gbWluKHRvdGFsX3NpemUsIHN0LT5zaXplKTsKKworCQkJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2X2FuZF9jaGVjayhzdCwgc3QtPmRhdGEsIHN6KTsKKwkJCWlmIChlcnIpIHsKKwkJCQllcnJvciA9IGVycjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJdG90YWxfc2l6ZSAtPSBzejsKKwkJfQorCX0KKworb3V0OgorCW0tPmVyciA9IGVycm9yOworCWNvbXBsZXRlKCZtLT5jb21wbGV0ZSk7CisJcG9obWVsZnNfbWNhY2hlX3B1dChwc2IsIG0pOworCisJcmV0dXJuIGVycm9yOworfQorCitpbnQgcG9obWVsZnNfZGF0YV9sb2NrX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBzdC0+cHNiOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm07CisJc2hvcnQgZXJyID0gKHNpZ25lZCBzaG9ydCljbWQtPmV4dDsKKwl1NjQgaWQgPSBjbWQtPmlkOworCisJbSA9IHBvaG1lbGZzX21jYWNoZV9zZWFyY2gocHNiLCBpZCk7CisKKwlkcHJpbnRrKCIlczogaWQ6ICVsbHUsIGdlbjogJWxsdSwgZXJyOiAlZC5cbiIsCisJCV9fZnVuY19fLCBjbWQtPmlkLCAobSk/bS0+Z2VuOjAsIGVycik7CisKKwlpZiAoIW0pIHsKKwkJcG9obWVsZnNfZGF0YV9yZWN2KHN0LCBzdC0+ZGF0YSwgY21kLT5zaXplKTsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGZpbmQgZGF0YSBsb2NrIHJlc3BvbnNlOiBpZDogJWxsdS5cbiIsIF9fZnVuY19fLCBjbWQtPmlkKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKGNtZC0+c2l6ZSkKKwkJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2X2FuZF9jaGVjayhzdCwgJm0tPmluZm8sIGNtZC0+c2l6ZSk7CisKKwltLT5lcnIgPSBlcnI7CisJY29tcGxldGUoJm0tPmNvbXBsZXRlKTsKKwlwb2htZWxmc19tY2FjaGVfcHV0KHBzYiwgbSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2lubGluZV9fIG5ldGZzX3N0YXRlX3Jlc2V0KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJbmV0ZnNfc3RhdGVfbG9ja19zZW5kKHN0KTsKKwluZXRmc19zdGF0ZV9leGl0KHN0KTsKKwluZXRmc19zdGF0ZV9pbml0KHN0KTsKKwluZXRmc19zdGF0ZV91bmxvY2tfc2VuZChzdCk7Cit9CisKKy8qCisgKiBNYWluIHJlY2VpdmluZyBmdW5jdGlvbiwgY2FsbGVkIGZyb20gZGVkaWNhdGVkIGtlcm5lbCB0aHJlYWQuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVjdih2b2lkICpkYXRhKQoreworCWludCBlcnIgPSAtRUlOVFI7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdCA9IGRhdGE7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkvKgorCQkgKiBJZiBzb2NrZXQgd2lsbCBiZSByZXNldCBhZnRlciB0aGlzIHN0YXRlbWVudCwgdGhlbgorCQkgKiBwb2htZWxmc19kYXRhX3JlY3YoKSB3aWxsIGp1c3QgZmFpbCBhbmQgbG9vcCB3aWxsCisJCSAqIHN0YXJ0IGFnYWluLCBzbyBpdCBjYW4gYmUgZG9uZSB3aXRob3V0IGFueSBsb2Nrcy4KKwkJICoKKwkJICogc3QtPnJlYWRfc29ja2V0IGlzIG5lZWRlZCB0byBwcmV2ZW50cyBzdGF0ZSBtYWNoaW5lCisJCSAqIGJyZWFraW5nIGJldHdlZW4gdGhpcyBkYXRhIHJlYWRpbmcgYW5kIHN1YnNlcXVlbnQgb25lCisJCSAqIGluIHByb3RvY29sIHNwZWNpZmljIGZ1bmN0aW9ucyBkdXJpbmcgY29ubmVjdGlvbiByZXNldC4KKwkJICogSW4gY2FzZSBvZiByZXNldCB3ZSBoYXZlIHRvIHJlYWQgbmV4dCBjb21tYW5kIGFuZCBkbworCQkgKiBub3QgZXhwZWN0IGRhdGEgZm9yIG9sZCBjb21tYW5kIHRvIG1hZ2ljYWxseSBhcHBlYXIgaW4KKwkJICogbmV3IGNvbm5lY3Rpb24uCisJCSAqLworCQlzdC0+cmVhZF9zb2NrZXQgPSBzdC0+c29ja2V0OworCQllcnIgPSBwb2htZWxmc19kYXRhX3JlY3Yoc3QsIGNtZCwgc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpKTsKKwkJaWYgKGVycikgeworCQkJbXNsZWVwKDEwMDApOworCQkJY29udGludWU7CisJCX0KKworCQluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCisJCWRwcmludGsoIiVzOiBjbWQ6ICV1LCBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LCAiCisJCQkJImV4dDogJXUsIGNzaXplOiAldSwgY3BhZDogJXUuXG4iLAorCQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5pZCwgY21kLT5zdGFydCwKKwkJCQljbWQtPnNpemUsIGNtZC0+ZXh0LCBjbWQtPmNzaXplLCBjbWQtPmNwYWQpOworCisJCWlmIChjbWQtPmNzaXplKSB7CisJCQlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSA9ICZzdC0+ZW5nOworCisJCQlpZiAodW5saWtlbHkoY21kLT5jc2l6ZSA+IGUtPnNpemUvMikpIHsKKwkJCQluZXRmc19zdGF0ZV9yZXNldChzdCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChlLT5oYXNoICYmIHVubGlrZWx5KGNtZC0+Y3NpemUgIT0gc3QtPnBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpKSB7CisJCQkJZHByaW50aygiJXM6IGNtZDogY21kOiAldSwgaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldSwgIgorCQkJCQkJImNzaXplOiAldSAhPSBkaWdlc3Qgc2l6ZSAldS5cbiIsCisJCQkJCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+aWQsIGNtZC0+c3RhcnQsIGNtZC0+c2l6ZSwKKwkJCQkJCWNtZC0+Y3NpemUsIHN0LT5wc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplKTsKKwkJCQluZXRmc19zdGF0ZV9yZXNldChzdCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdihzdCwgZS0+ZGF0YSwgY21kLT5jc2l6ZSk7CisJCQlpZiAoZXJyKSB7CisJCQkJbmV0ZnNfc3RhdGVfcmVzZXQoc3QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisjaWZkZWYgQ09ORklHX1BPSE1FTEZTX0RFQlVHCisJCQl7CisJCQkJdW5zaWduZWQgaW50IGk7CisJCQkJdW5zaWduZWQgY2hhciAqaGFzaCA9IGUtPmRhdGE7CisKKwkJCQlkcHJpbnRrKCIlczogcmVjZWl2ZWQgaGFzaDogIiwgX19mdW5jX18pOworCQkJCWZvciAoaT0wOyBpPGNtZC0+Y3NpemU7ICsraSkgeworCQkJCQlwcmludGsoIiUwMnggIiwgaGFzaFtpXSk7CisJCQkJfQorCQkJCXByaW50aygiXG4iKTsKKwkJCX0KKyNlbmRpZgorCQkJY21kLT5zaXplIC09IGNtZC0+Y3NpemU7CisJCX0KKworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBjYXRjaCBwcm90b2NvbCBicmVha2FnZSBhbmQgcmFuZG9tIGdhcmJhZ2UgaW5zdGVhZCBvZiBjb21tYW5kcy4KKwkJICovCisJCWlmICh1bmxpa2VseSgoY21kLT5zaXplID4gc3QtPnNpemUpICYmIChjbWQtPmNtZCAhPSBORVRGU19YQVRUUl9HRVQpKSkgeworCQkJbmV0ZnNfc3RhdGVfcmVzZXQoc3QpOworCQkJY29udGludWU7CisJCX0KKworCQlzd2l0Y2ggKGNtZC0+Y21kKSB7CisJCQljYXNlIE5FVEZTX1JFQURfUEFHRToKKwkJCQllcnIgPSBwb2htZWxmc19yZWFkX3BhZ2VfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19SRUFERElSOgorCQkJCWVyciA9IHBvaG1lbGZzX3JlYWRkaXJfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19MT09LVVA6CisJCQkJZXJyID0gcG9obWVsZnNfbG9va3VwX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfQ1JFQVRFOgorCQkJCWVyciA9IHBvaG1lbGZzX2NyZWF0ZV9yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX1JFTU9WRToKKwkJCQllcnIgPSBwb2htZWxmc19yZW1vdmVfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19UUkFOUzoKKwkJCQllcnIgPSBwb2htZWxmc190cmFuc2FjdGlvbl9yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX1BBR0VfQ0FDSEU6CisJCQkJZXJyID0gcG9obWVsZnNfcGFnZV9jYWNoZV9yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX0NBUEFCSUxJVElFUzoKKwkJCQllcnIgPSBwb2htZWxmc19jYXBhYmlsaXRpZXNfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19MT0NLOgorCQkJCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9ja19yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX1hBVFRSX0dFVDoKKwkJCQllcnIgPSBwb2htZWxmc19nZXR4YXR0cl9yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50aygiJXM6IHdyb25nIGNtZDogJXUsIGlkOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUsIGV4dDogJXUuXG4iLAorCQkJCQlfX2Z1bmNfXywgY21kLT5jbWQsIGNtZC0+aWQsIGNtZC0+c3RhcnQsIGNtZC0+c2l6ZSwgY21kLT5leHQpOworCQkJCW5ldGZzX3N0YXRlX3Jlc2V0KHN0KTsKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEwKSk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbmV0ZnNfc3RhdGVfaW5pdChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCWludCBlcnI7CisJc3RydWN0IHBvaG1lbGZzX2N0bCAqY3RsID0gJnN0LT5jdGw7CisKKwllcnIgPSBzb2NrX2NyZWF0ZShjdGwtPmFkZHIuc2FfZmFtaWx5LCBjdGwtPnR5cGUsIGN0bC0+cHJvdG8sICZzdC0+c29ja2V0KTsKKwlpZiAoZXJyKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBjcmVhdGUgYSBzb2NrZXQ6IGZhbWlseTogJWQsIHR5cGU6ICVkLCBwcm90bzogJWQsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBjdGwtPmFkZHIuc2FfZmFtaWx5LCBjdGwtPnR5cGUsIGN0bC0+cHJvdG8sIGVycik7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXN0LT5zb2NrZXQtPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PSU87CisJc3QtPnNvY2tldC0+c2stPnNrX3NuZHRpbWVvID0gc3QtPnNvY2tldC0+c2stPnNrX3JjdnRpbWVvID0gbXNlY3NfdG9famlmZmllcyg2MDAwMCk7CisKKwllcnIgPSBrZXJuZWxfY29ubmVjdChzdC0+c29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJmN0bC0+YWRkciwgY3RsLT5hZGRybGVuLCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlcjogaWR4OiAldSwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHN0LT5wc2ItPmlkeCwgZXJyKTsKKwkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisJfQorCXN0LT5zb2NrZXQtPnNrLT5za19zbmR0aW1lbyA9IHN0LT5zb2NrZXQtPnNrLT5za19yY3Z0aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMoNjAwMDApOworCisJZXJyID0gbmV0ZnNfcG9sbF9pbml0KHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKworCWlmIChzdC0+c29ja2V0LT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZjdGwtPmFkZHI7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAocmUpY29ubmVjdGVkIHRvIHBlZXIgJXUuJXUuJXUuJXU6JWQuXG4iLCBfX2Z1bmNfXywKKwkJCU5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisJfSBlbHNlIGlmIChzdC0+c29ja2V0LT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUNikgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZjdGwtPmFkZHI7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAocmUpY29ubmVjdGVkIHRvIHBlZXIgIgorCQkJIiVwaTY6JWQiLAorCQkJX19mdW5jX18sICZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9yZWxlYXNlOgorCXNvY2tfcmVsZWFzZShzdC0+c29ja2V0KTsKK2Vycl9vdXRfZXhpdDoKKwlzdC0+c29ja2V0ID0gTlVMTDsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIG5ldGZzX3N0YXRlX2V4aXQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlpZiAoc3QtPnNvY2tldCkgeworCQluZXRmc19wb2xsX2V4aXQoc3QpOworCQlzdC0+c29ja2V0LT5vcHMtPnNodXRkb3duKHN0LT5zb2NrZXQsIDIpOworCisJCWlmIChzdC0+c29ja2V0LT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmc3QtPmN0bC5hZGRyOworCQkJcHJpbnRrKCIlczogZGlzY29ubmVjdGVkIGZyb20gcGVlciAldS4ldS4ldS4ldTolZC5cbiIsIF9fZnVuY19fLAorCQkJCU5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisJCX0gZWxzZSBpZiAoc3QtPnNvY2tldC0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnN0LT5jdGwuYWRkcjsKKwkJCXByaW50aygiJXM6IGRpc2Nvbm5lY3RlZCBmcm9tIHBlZXIgIgorCQkJCSIlcGk2OiVkIiwKKwkJCQlfX2Z1bmNfXywgJnNpbi0+c2luNl9hZGRyLCBudG9ocyhzaW4tPnNpbjZfcG9ydCkpOworCQl9CisKKwkJc29ja19yZWxlYXNlKHN0LT5zb2NrZXQpOworCQlzdC0+c29ja2V0ID0gTlVMTDsKKwkJc3QtPnJlYWRfc29ja2V0ID0gTlVMTDsKKwkJc3QtPm5lZWRfcmVzZXQgPSAwOworCX0KK30KKworaW50IHBvaG1lbGZzX3N0YXRlX2luaXRfb25lKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjb25mKQoreworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3QgPSAmY29uZi0+c3RhdGU7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwltdXRleF9pbml0KCZzdC0+X19zdGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZzdC0+X19zdGF0ZV9zZW5kX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0LT50aHJlYWRfd2FpdCk7CisKKwlzdC0+cHNiID0gcHNiOworCXN0LT50cmFuc19yb290ID0gUkJfUk9PVDsKKwltdXRleF9pbml0KCZzdC0+dHJhbnNfbG9jayk7CisKKwlzdC0+c2l6ZSA9IHBzYi0+dHJhbnNfZGF0YV9zaXplOworCXN0LT5kYXRhID0ga21hbGxvYyhzdC0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdC0+ZGF0YSkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlpZiAocHNiLT5wZXJmb3JtX2NyeXB0bykgeworCQllcnIgPSBwb2htZWxmc19jcnlwdG9fZW5naW5lX2luaXQoJnN0LT5lbmcsIHBzYik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9kYXRhOworCX0KKworCWVyciA9IG5ldGZzX3N0YXRlX2luaXQoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX2VuZ2luZTsKKworCXN0LT50aHJlYWQgPSBrdGhyZWFkX3J1bihwb2htZWxmc19yZWN2LCBzdCwgInBvaG1lbGZzLyV1IiwgcHNiLT5pZHgpOworCWlmIChJU19FUlIoc3QtPnRocmVhZCkpIHsKKwkJZXJyID0gUFRSX0VSUihzdC0+dGhyZWFkKTsKKwkJZ290byBlcnJfb3V0X25ldGZzX2V4aXQ7CisJfQorCisJaWYgKCFwc2ItPmFjdGl2ZV9zdGF0ZSkKKwkJcHNiLT5hY3RpdmVfc3RhdGUgPSBjb25mOworCisJZHByaW50aygiJXM6IGNvbmY6ICVwLCBzdDogJXAsIHNvY2tldDogJXAuXG4iLAorCQkJX19mdW5jX18sIGNvbmYsIHN0LCBzdC0+c29ja2V0KTsKKwlyZXR1cm4gMDsKKworZXJyX291dF9uZXRmc19leGl0OgorCW5ldGZzX3N0YXRlX2V4aXQoc3QpOworZXJyX291dF9mcmVlX2VuZ2luZToKKwlwb2htZWxmc19jcnlwdG9fZW5naW5lX2V4aXQoJnN0LT5lbmcpOworZXJyX291dF9mcmVlX2RhdGE6CisJa2ZyZWUoc3QtPmRhdGEpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7CisKK30KKwordm9pZCBwb2htZWxmc19zdGF0ZV9mbHVzaF90cmFuc2FjdGlvbnMoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3Q7CisKKwltdXRleF9sb2NrKCZzdC0+dHJhbnNfbG9jayk7CisJZm9yIChyYl9ub2RlID0gcmJfZmlyc3QoJnN0LT50cmFuc19yb290KTsgcmJfbm9kZTsgKSB7CisJCWRzdCA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBuZXRmc190cmFuc19kc3QsIHN0YXRlX2VudHJ5KTsKKwkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7CisKKwkJZHN0LT50cmFucy0+cmVzdWx0ID0gLUVJTlZBTDsKKwkJbmV0ZnNfdHJhbnNfcmVtb3ZlX25vbG9jayhkc3QsIHN0KTsKKwkJbmV0ZnNfdHJhbnNfZHJvcF9kc3Rfbm9zdGF0ZShkc3QpOworCX0KKwltdXRleF91bmxvY2soJnN0LT50cmFuc19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfc3RhdGVfZXhpdF9vbmUoc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYykKK3sKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0ID0gJmMtPnN0YXRlOworCisJZHByaW50aygiJXM6IGV4aXRpbmcsIHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7CisJaWYgKHN0LT50aHJlYWQpIHsKKwkJa3RocmVhZF9zdG9wKHN0LT50aHJlYWQpOworCQlzdC0+dGhyZWFkID0gTlVMTDsKKwl9CisKKwluZXRmc19zdGF0ZV9sb2NrX3NlbmQoc3QpOworCW5ldGZzX3N0YXRlX2V4aXQoc3QpOworCW5ldGZzX3N0YXRlX3VubG9ja19zZW5kKHN0KTsKKworCXBvaG1lbGZzX3N0YXRlX2ZsdXNoX3RyYW5zYWN0aW9ucyhzdCk7CisKKwlwb2htZWxmc19jcnlwdG9fZW5naW5lX2V4aXQoJnN0LT5lbmcpOworCWtmcmVlKHN0LT5kYXRhKTsKKworCWtmcmVlKGMpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBuZXR3b3JrIHN0YWNrLiBJdCBzZWFyY2hlcyBmb3IgZ2l2ZW4gSUQgaW4gZ2xvYmFsCisgKiBjb25maWd1cmF0aW9uIHRhYmxlLCB0aGlzIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9mIHRoZSByZW1vdGUgc2VydmVyCisgKiAoYWRkcmVzcyAoYW55IHN1cHBvcnRlZCBieSBzb2NrZXQgaW50ZXJmYWNlKSBhbmQgcG9ydCwgcHJvdG9jb2wgYW5kIHNvIG9uKS4KKyAqLworaW50IHBvaG1lbGZzX3N0YXRlX2luaXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwllcnIgPSBwb2htZWxmc19jb3B5X2NvbmZpZyhwc2IpOworCWlmIChlcnIpIHsKKwkJcG9obWVsZnNfc3RhdGVfZXhpdChwc2IpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHBvaG1lbGZzX3N0YXRlX2V4aXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYywgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjLCB0bXAsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlsaXN0X2RlbCgmYy0+Y29uZmlnX2VudHJ5KTsKKwkJcG9obWVsZnNfc3RhdGVfZXhpdF9vbmUoYyk7CisJfQorfQorCit2b2lkIHBvaG1lbGZzX3N3aXRjaF9hY3RpdmUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYyA9IHBzYi0+YWN0aXZlX3N0YXRlOworCisJaWYgKCFsaXN0X2VtcHR5KCZwc2ItPnN0YXRlX2xpc3QpKSB7CisJCWlmIChjLT5jb25maWdfZW50cnkubmV4dCAhPSAmcHNiLT5zdGF0ZV9saXN0KSB7CisJCQlwc2ItPmFjdGl2ZV9zdGF0ZSA9IGxpc3RfZW50cnkoYy0+Y29uZmlnX2VudHJ5Lm5leHQsCisJCQkJc3RydWN0IHBvaG1lbGZzX2NvbmZpZywgY29uZmlnX2VudHJ5KTsKKwkJfSBlbHNlIHsKKwkJCXBzYi0+YWN0aXZlX3N0YXRlID0gbGlzdF9lbnRyeShwc2ItPnN0YXRlX2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnLCBjb25maWdfZW50cnkpOworCQl9CisKKwkJZHByaW50aygiJXM6IGVtcHR5OiAlZCwgYWN0aXZlICVwIC0+ICVwLlxuIiwKKwkJCV9fZnVuY19fLCBsaXN0X2VtcHR5KCZwc2ItPnN0YXRlX2xpc3QpLCBjLAorCQkJcHNiLT5hY3RpdmVfc3RhdGUpOworCX0gZWxzZQorCQlwc2ItPmFjdGl2ZV9zdGF0ZSA9IE5VTEw7Cit9CisKK3ZvaWQgcG9obWVsZnNfY2hlY2tfc3RhdGVzKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmMsICp0bXA7CisJTElTVF9IRUFEKGRlbGV0ZV9saXN0KTsKKworCW11dGV4X2xvY2soJnBzYi0+c3RhdGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGMsIHRtcCwgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCWlmIChwb2htZWxmc19jb25maWdfY2hlY2soYywgcHNiLT5pZHgpKSB7CisKKwkJCWlmIChwc2ItPmFjdGl2ZV9zdGF0ZSA9PSBjKQorCQkJCXBvaG1lbGZzX3N3aXRjaF9hY3RpdmUocHNiKTsKKwkJCWxpc3RfbW92ZSgmYy0+Y29uZmlnX2VudHJ5LCAmZGVsZXRlX2xpc3QpOworCQl9CisJfQorCXBvaG1lbGZzX2NvcHlfY29uZmlnKHBzYik7CisJbXV0ZXhfdW5sb2NrKCZwc2ItPnN0YXRlX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGMsIHRtcCwgJmRlbGV0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJbGlzdF9kZWwoJmMtPmNvbmZpZ19lbnRyeSk7CisJCXBvaG1lbGZzX3N0YXRlX2V4aXRfb25lKGMpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9uZXRmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmMjFhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9uZXRmcy5oCkBAIC0wLDAgKzEsOTMyIEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fTkVURlNfSAorI2RlZmluZSBfX05FVEZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisKKyNkZWZpbmUgUE9ITUVMRlNfQ05fSURYCQkJNQorI2RlZmluZSBQT0hNRUxGU19DTl9WQUwJCQkwCisKKyNkZWZpbmUgUE9ITUVMRlNfQ1RMSU5GT19BQ0sJCTEKKyNkZWZpbmUgUE9ITUVMRlNfTk9JTkZPX0FDSwkJMgorCisKKy8qCisgKiBOZXR3b3JrIGNvbW1hbmQgc3RydWN0dXJlLgorICogV2lsbCBiZSBleHRlbmRlZC4KKyAqLworc3RydWN0IG5ldGZzX2NtZAoreworCV9fdTE2CQkJY21kOwkvKiBDb21tYW5kIG51bWJlciAqLworCV9fdTE2CQkJY3NpemU7CS8qIEF0dGFjaGVkIGNyeXB0byBpbmZvcm1hdGlvbiBzaXplICovCisJX191MTYJCQljcGFkOwkvKiBBdHRhY2hlZCBwYWRkaW5nIHNpemUgKi8KKwlfX3UxNgkJCWV4dDsJLyogRXh0ZXJuYWwgZmxhZ3MgKi8KKwlfX3UzMgkJCXNpemU7CS8qIFNpemUgb2YgdGhlIGF0dGFjaGVkIGRhdGEgKi8KKwlfX3UzMgkJCXRyYW5zOwkvKiBUcmFuc2FjdGlvbiBpZCAqLworCV9fdTY0CQkJaWQ7CS8qIE9iamVjdCBJRCB0byBvcGVyYXRlIG9uLiBVc2VkIGZvciBmZWVkYmFjay4qLworCV9fdTY0CQkJc3RhcnQ7CS8qIFN0YXJ0IG9mIHRoZSBvYmplY3QuICovCisJX191NjQJCQlpdjsJLyogSVYgc2VxdWVuY2UgKi8KKwlfX3U4CQkJZGF0YVswXTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19jb252ZXJ0X2NtZChzdHJ1Y3QgbmV0ZnNfY21kICpjbWQpCit7CisJY21kLT5pZCA9IF9fYmU2NF90b19jcHUoY21kLT5pZCk7CisJY21kLT5zdGFydCA9IF9fYmU2NF90b19jcHUoY21kLT5zdGFydCk7CisJY21kLT5pdiA9IF9fYmU2NF90b19jcHUoY21kLT5pdik7CisJY21kLT5jbWQgPSBfX2JlMTZfdG9fY3B1KGNtZC0+Y21kKTsKKwljbWQtPmV4dCA9IF9fYmUxNl90b19jcHUoY21kLT5leHQpOworCWNtZC0+Y3NpemUgPSBfX2JlMTZfdG9fY3B1KGNtZC0+Y3NpemUpOworCWNtZC0+Y3BhZCA9IF9fYmUxNl90b19jcHUoY21kLT5jcGFkKTsKKwljbWQtPnNpemUgPSBfX2JlMzJfdG9fY3B1KGNtZC0+c2l6ZSk7Cit9CisKKyNkZWZpbmUgTkVURlNfVFJBTlNfU0lOR0xFX0RTVAkJKDE8PDApCisKK2VudW0geworCU5FVEZTX1JFQURESVIJPSAxLAkvKiBSZWFkIGRpcmVjdG9yeSBmb3IgZ2l2ZW4gaW5vZGUgbnVtYmVyICovCisJTkVURlNfUkVBRF9QQUdFLAkvKiBSZWFkIGRhdGEgcGFnZSBmcm9tIHRoZSBzZXJ2ZXIgKi8KKwlORVRGU19XUklURV9QQUdFLAkvKiBXcml0ZSBkYXRhIHBhZ2UgdG8gdGhlIHNlcnZlciAqLworCU5FVEZTX0NSRUFURSwJCS8qIENyZWF0ZSBkaXJlY3RvcnkgZW50cnkgKi8KKwlORVRGU19SRU1PVkUsCQkvKiBSZW1vdmUgZGlyZWN0b3J5IGVudHJ5ICovCisKKwlORVRGU19MT09LVVAsCQkvKiBMb29rdXAgc2luZ2xlIG9iamVjdCAqLworCU5FVEZTX0xJTkssCQkvKiBDcmVhdGUgYSBsaW5rICovCisJTkVURlNfVFJBTlMsCQkvKiBUcmFuc2FjdGlvbiAqLworCU5FVEZTX09QRU4sCQkvKiBPcGVuIGludGVudCAqLworCU5FVEZTX0lOT0RFX0lORk8sCS8qIE1ldGFkYXRhIGNhY2hlIGNvaGVyZW5jeSBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSAqLworCisJTkVURlNfUEFHRV9DQUNIRSwJLyogUGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gbWVzc2FnZSAqLworCU5FVEZTX1JFQURfUEFHRVMsCS8qIFJlYWQgbXVsdGlwbGUgY29udGlndW91cyBwYWdlcyBpbiBvbmUgZ28gKi8KKwlORVRGU19SRU5BTUUsCQkvKiBSZW5hbWUgb2JqZWN0ICovCisJTkVURlNfQ0FQQUJJTElUSUVTLAkvKiBDYXBhYmlsaXRpZXMgb2YgdGhlIGNsaWVudCwgZm9yIGV4YW1wbGUgc3VwcG9ydGVkIGNyeXB0byAqLworCU5FVEZTX0xPQ0ssCQkvKiBEaXN0cmlidXRlZCBsb2NrIG1lc3NhZ2UgKi8KKworCU5FVEZTX1hBVFRSX1NFVCwJLyogU2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSAqLworCU5FVEZTX1hBVFRSX0dFVCwJLyogR2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSAqLworCU5FVEZTX0NNRF9NQVgKK307CisKK2VudW0geworCVBPSE1FTEZTX0ZMQUdTX0FERCA9IDAsIC8qIE5ldHdvcmsgc3RhdGUgY29udHJvbCBtZXNzYWdlIGZvciBBREQgKi8KKwlQT0hNRUxGU19GTEFHU19ERUwsICAgICAvKiBOZXR3b3JrIHN0YXRlIGNvbnRyb2wgbWVzc2FnZSBmb3IgREVMICovCisJUE9ITUVMRlNfRkxBR1NfU0hPVywgICAgLyogTmV0d29yayBzdGF0ZSBjb250cm9sIG1lc3NhZ2UgZm9yIFNIT1cgKi8KKwlQT0hNRUxGU19GTEFHU19DUllQVE8sCS8qIENyeXB0byBkYXRhIGNvbnRyb2wgbWVzc2FnZSAqLworfTsKKworLyoKKyAqIEFsd2F5cyB3YW50ZWQgdG8gY29weSBpdCBmcm9tIHNvY2tldCBoZWFkZXJzIGludG8gcHVibGljIG9uZSwKKyAqIHNpbmNlIHRoZXkgYXJlIF9fS0VSTkVMX18gcHJvdGVjdGVkIHRoZXJlLgorICovCisjZGVmaW5lIF9LX1NTX01BWFNJWkUJMTI4CisKK3N0cnVjdCBzYWRkcgoreworCXVuc2lnbmVkIHNob3J0CQlzYV9mYW1pbHk7CisJY2hhcgkJCWFkZHJbX0tfU1NfTUFYU0laRV07Cit9OworCitlbnVtIHsKKwlQT0hNRUxGU19DUllQVE9fSEFTSCA9IDAsCisJUE9ITUVMRlNfQ1JZUFRPX0NJUEhFUiwKK307CisKK3N0cnVjdCBwb2htZWxmc19jcnlwdG8KK3sKKwl1bnNpZ25lZCBpbnQJCWlkeDsJCS8qIENvbmZpZyBpbmRleCAqLworCXVuc2lnbmVkIHNob3J0CQlzdHJsZW47CQkvKiBTaXplIG9mIHRoZSBhdHRhY2hlZCBjcnlwdG8gc3RyaW5nIGluY2x1ZGluZyAwLWJ5dGUKKwkJCQkJCSAqICJjYmMoYWVzKSIgZm9yIGV4YW1wbGUgKi8KKwl1bnNpZ25lZCBzaG9ydAkJdHlwZTsJCS8qIEhNQUMsIGNpcGhlciwgYm90aCAqLworCXVuc2lnbmVkIGludAkJa2V5c2l6ZTsJLyogS2V5IHNpemUgKi8KKwl1bnNpZ25lZCBjaGFyCQlkYXRhWzBdOwkvKiBBbGdvcml0aG0gc3RyaW5nLCBrZXkgYW5kIElWICovCit9OworCisvKgorICogQ29uZmlndXJhdGlvbiBjb21tYW5kIHVzZWQgdG8gY3JlYXRlIHRhYmxlIG9mIGRpZmZlcmVudCByZW1vdGUgc2VydmVycy4KKyAqLworc3RydWN0IHBvaG1lbGZzX2N0bAoreworCXVuc2lnbmVkIGludAkJaWR4OwkJLyogQ29uZmlnIGluZGV4ICovCisJdW5zaWduZWQgaW50CQl0eXBlOwkJLyogU29ja2V0IHR5cGUgKi8KKwl1bnNpZ25lZCBpbnQJCXByb3RvOwkJLyogU29ja2V0IHByb3RvY29sICovCisJdW5zaWduZWQgaW50CQlhZGRybGVuOwkvKiBTaXplIG9mIHRoZSBhZGRyZXNzICovCisJdW5zaWduZWQgc2hvcnQJCXVudXNlZDsJCS8qIEFsaWduIHN0cnVjdHVyZSBieSA0IGJ5dGVzICovCisJc3RydWN0IHNhZGRyCQlhZGRyOwkJLyogUmVtb3RlIHNlcnZlciBhZGRyZXNzICovCit9OworCisvKgorICogQWNrIGZvciB1c2Vyc3BhY2UgYWJvdXQgcmVxdWVzdGVkIGNvbW1hbmQuCisgKi8KK3N0cnVjdCBwb2htZWxmc19jbl9hY2sKK3sKKwlzdHJ1Y3QgY25fbXNnCQltc2c7CisJaW50CQkJZXJyb3I7CisJaW50CQkJbXNnX251bTsKKwlpbnQJCQl1bnVzZWRbM107CisJc3RydWN0IHBvaG1lbGZzX2N0bAljdGw7Cit9OworCisvKgorICogSW5vZGUgaW5mbyBzdHJ1Y3R1cmUgdXNlZCB0byBzeW5jIHdpdGggc2VydmVyLgorICogQ2hlY2sgd2hhdCBzdGF0KCkgcmV0dXJucy4KKyAqLworc3RydWN0IG5ldGZzX2lub2RlX2luZm8KK3sKKwl1bnNpZ25lZCBpbnQJCW1vZGU7CisJdW5zaWduZWQgaW50CQlubGluazsKKwl1bnNpZ25lZCBpbnQJCXVpZDsKKwl1bnNpZ25lZCBpbnQJCWdpZDsKKwl1bnNpZ25lZCBpbnQJCWJsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCXBhZGRpbmc7CisJX191NjQJCQlpbm87CisJX191NjQJCQlibG9ja3M7CisJX191NjQJCQlyZGV2OworCV9fdTY0CQkJc2l6ZTsKKwlfX3U2NAkJCXZlcnNpb247Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfY29udmVydF9pbm9kZV9pbmZvKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvKQoreworCWluZm8tPm1vZGUgPSBfX2NwdV90b19iZTMyKGluZm8tPm1vZGUpOworCWluZm8tPm5saW5rID0gX19jcHVfdG9fYmUzMihpbmZvLT5ubGluayk7CisJaW5mby0+dWlkID0gX19jcHVfdG9fYmUzMihpbmZvLT51aWQpOworCWluZm8tPmdpZCA9IF9fY3B1X3RvX2JlMzIoaW5mby0+Z2lkKTsKKwlpbmZvLT5ibG9ja3NpemUgPSBfX2NwdV90b19iZTMyKGluZm8tPmJsb2Nrc2l6ZSk7CisJaW5mby0+YmxvY2tzID0gX19jcHVfdG9fYmU2NChpbmZvLT5ibG9ja3MpOworCWluZm8tPnJkZXYgPSBfX2NwdV90b19iZTY0KGluZm8tPnJkZXYpOworCWluZm8tPnNpemUgPSBfX2NwdV90b19iZTY0KGluZm8tPnNpemUpOworCWluZm8tPnZlcnNpb24gPSBfX2NwdV90b19iZTY0KGluZm8tPnZlcnNpb24pOworCWluZm8tPmlubyA9IF9fY3B1X3RvX2JlNjQoaW5mby0+aW5vKTsKK30KKworLyoKKyAqIENhY2hlIHN0YXRlIG1hY2hpbmUuCisgKi8KK2VudW0geworCU5FVEZTX0NPTU1BTkRfUEVORElORyA9IDAsCS8qIENvbW1hbmQgaXMgYmVpbmcgZXhlY3V0ZWQgKi8KKwlORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELAkvKiBJbm9kZSB3YXMgc3luY2VkIHRvIHNlcnZlciAqLworCU5FVEZTX0lOT0RFX1JFTU9URV9ESVJfU1lOQ0VELAkvKiBJbm9kZSAoZGlyZWN0b3J5KSB3YXMgc3luY2VkIGZyb20gdGhlIHNlcnZlciAqLworCU5FVEZTX0lOT0RFX09XTkVELAkJLyogSW5vZGUgaXMgb3duZWQgYnkgZ2l2ZW4gaG9zdCAqLworCU5FVEZTX0lOT0RFX05FRURfRkxVU0gsCQkvKiBJbm9kZSBoYXMgdG8gYmUgZmx1c2hlZCB0byB0aGUgc2VydmVyICovCit9OworCisvKgorICogUE9ITUVMRlMgY2FwYWJpbGl0aWVzOiBpbmZvcm1hdGlvbiBhYm91dCBzdXBwb3J0ZWQKKyAqIGNyeXB0byBvcGVyYXRpb25zIChoYXNoL2NpcGhlciwgbW9kZXMsIGtleSBzaXplcyBhbmQgc28gb24pLAorICogcm9vdCBpbmZvcm1haW9uICh1c2VkL2F2YWlsYWJsZSBzaXplLCBudW1iZXIgb2Ygb2JqZWN0cywgcGVybWlzc2lvbnMpCisgKi8KK2VudW0gcG9obWVsZnNfY2FwYWJpbGl0aWVzIHsKKwlQT0hNRUxGU19DUllQVE9fQ0FQQUJJTElUSUVTID0gMCwKKwlQT0hNRUxGU19ST09UX0NBUEFCSUxJVElFUywKK307CisKKy8qIFJlYWQtb25seSBtb3VudCAqLworI2RlZmluZSBQT0hNRUxGU19GTEFHU19STwkJKDE8PDApCisvKiBFeHRlbmRlZCBhdHRyaWJ1dGVzIHN1cHBvcnQgb24vb2ZmICovCisjZGVmaW5lIFBPSE1FTEZTX0ZMQUdTX1hBVFRSCQkoMTw8MSkKKworc3RydWN0IG5ldGZzX3Jvb3RfY2FwYWJpbGl0aWVzCit7CisJX191NjQJCQlucl9maWxlczsKKwlfX3U2NAkJCXVzZWQsIGF2YWlsOworCV9fdTY0CQkJZmxhZ3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfY29udmVydF9yb290X2NhcGFiaWxpdGllcyhzdHJ1Y3QgbmV0ZnNfcm9vdF9jYXBhYmlsaXRpZXMgKmNhcCkKK3sKKwljYXAtPm5yX2ZpbGVzID0gX19jcHVfdG9fYmU2NChjYXAtPm5yX2ZpbGVzKTsKKwljYXAtPnVzZWQgPSBfX2NwdV90b19iZTY0KGNhcC0+dXNlZCk7CisJY2FwLT5hdmFpbCA9IF9fY3B1X3RvX2JlNjQoY2FwLT5hdmFpbCk7CisJY2FwLT5mbGFncyA9IF9fY3B1X3RvX2JlNjQoY2FwLT5mbGFncyk7Cit9CisKK3N0cnVjdCBuZXRmc19jcnlwdG9fY2FwYWJpbGl0aWVzCit7CisJdW5zaWduZWQgc2hvcnQJCWhhc2hfc3RybGVuOwkvKiBIYXNoIHN0cmluZyBsZW5ndGgsIGxpa2UgImhtYWMoc2hhMSkgaW5jbHVkaW5nIDAgYnl0ZSAiKi8KKwl1bnNpZ25lZCBzaG9ydAkJY2lwaGVyX3N0cmxlbjsJLyogQ2lwaGVyIHN0cmluZyBsZW5ndGggd2l0aCB0aGUgc2FtZSBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQJCWNpcGhlcl9rZXlzaXplOwkvKiBDaXBoZXIga2V5IHNpemUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19jb252ZXJ0X2NyeXB0b19jYXBhYmlsaXRpZXMoc3RydWN0IG5ldGZzX2NyeXB0b19jYXBhYmlsaXRpZXMgKmNhcCkKK3sKKwljYXAtPmhhc2hfc3RybGVuID0gX19jcHVfdG9fYmUxNihjYXAtPmhhc2hfc3RybGVuKTsKKwljYXAtPmNpcGhlcl9zdHJsZW4gPSBfX2NwdV90b19iZTE2KGNhcC0+Y2lwaGVyX3N0cmxlbik7CisJY2FwLT5jaXBoZXJfa2V5c2l6ZSA9IF9fY3B1X3RvX2JlMzIoY2FwLT5jaXBoZXJfa2V5c2l6ZSk7Cit9CisKK2VudW0gcG9obWVsZnNfbG9ja190eXBlIHsKKwlQT0hNRUxGU19MT0NLX0dSQUIJPSAoMTw8MTUpLAorCisJUE9ITUVMRlNfUkVBRF9MT0NLCT0gMCwKKwlQT0hNRUxGU19XUklURV9MT0NLLAorfTsKKworc3RydWN0IG5ldGZzX2xvY2sKK3sKKwlfX3U2NAkJCXN0YXJ0OworCV9fdTY0CQkJaW5vOworCV9fdTMyCQkJc2l6ZTsKKwlfX3UzMgkJCXR5cGU7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfY29udmVydF9sb2NrKHN0cnVjdCBuZXRmc19sb2NrICpsb2NrKQoreworCWxvY2stPnN0YXJ0ID0gX19jcHVfdG9fYmU2NChsb2NrLT5zdGFydCk7CisJbG9jay0+aW5vID0gX19jcHVfdG9fYmU2NChsb2NrLT5pbm8pOworCWxvY2stPnNpemUgPSBfX2NwdV90b19iZTMyKGxvY2stPnNpemUpOworCWxvY2stPnR5cGUgPSBfX2NwdV90b19iZTMyKGxvY2stPnR5cGUpOworfQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKworLyoKKyAqIFByaXZhdGUgUE9ITUVMRlMgY2FjaGUgb2Ygb2JqZWN0cyBpbiBkaXJlY3RvcnkuCisgKi8KK3N0cnVjdCBwb2htZWxmc19uYW1lCit7CisJc3RydWN0IHJiX25vZGUJCWhhc2hfbm9kZTsKKworCXN0cnVjdCBsaXN0X2hlYWQJc3luY19jcmVhdGVfZW50cnk7CisKKwl1NjQJCQlpbm87CisKKwl1MzIJCQloYXNoOworCXUzMgkJCW1vZGU7CisJdTMyCQkJbGVuOworCisJY2hhcgkJCSpkYXRhOworfTsKKworLyoKKyAqIFBPSE1FTEZTIGlub2RlLiBNYWluIG9iamVjdC4KKyAqLworc3RydWN0IHBvaG1lbGZzX2lub2RlCit7CisJc3RydWN0IGxpc3RfaGVhZAlpbm9kZV9lbnRyeTsJCS8qIEVudHJ5IGluIHN1cGVyYmxvY2sgbGlzdC4KKwkJCQkJCQkgKiBPYmplY3RzIHdoaWNoIGFyZSBub3QgYm91bmQgdG8gZGVudHJ5IHJlcXVpcmUgdG8gYmUgZHJvcHBlZAorCQkJCQkJCSAqIGluIC0+cHV0X3N1cGVyKCkKKwkJCQkJCQkgKi8KKwlzdHJ1Y3QgcmJfcm9vdAkJaGFzaF9yb290OwkJLyogVGhlIHNhbWUsIGJ1dCBpbmRleGVkIGJ5IG5hbWUgaGFzaCBhbmQgbGVuICovCisJc3RydWN0IG11dGV4CQlvZmZzZXRfbG9jazsJCS8qIFByb3RlY3QgYm90aCBhYm92ZSB0cmVlcyAqLworCisJc3RydWN0IGxpc3RfaGVhZAlzeW5jX2NyZWF0ZV9saXN0OwkvKiBMaXN0IG9mIGNyZWF0ZWQgYnV0IG5vdCB5ZXQgc3luY2VkIHRvIHRoZSBzZXJ2ZXIgY2hpbGRyZW4gKi8KKworCXVuc2lnbmVkIGludAkJZHJvcF9jb3VudDsKKworCWludAkJCWxvY2tfdHlwZTsJCS8qIEhvdyB0aGlzIGlub2RlIGlzIGxvY2tlZDogcmVhZCBvciB3cml0ZSAqLworCisJaW50CQkJZXJyb3I7CQkJLyogVHJhbnNhY3Rpb24gZXJyb3IgZm9yIGdpdmVuIGlub2RlICovCisKKwlsb25nCQkJc3RhdGU7CQkJLyogU3RhdGUgbWFjaGluZSBhYm92ZSAqLworCisJdTY0CQkJaW5vOwkJCS8qIElub2RlIG51bWJlciAqLworCXU2NAkJCXRvdGFsX2xlbjsJCS8qIFRvdGFsIGxlbmd0aCBvZiBhbGwgY2hpbGRyZW4gbmFtZXMsIHVzZWQgdG8gY3JlYXRlIG9mZnNldHMgKi8KKworCXN0cnVjdCBpbm9kZQkJdmZzX2lub2RlOworfTsKKworc3RydWN0IG5ldGZzX3RyYW5zOwordHlwZWRlZiBpbnQgKCogbmV0ZnNfdHJhbnNfY29tcGxldGVfdCkoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2VfbnVtLAorCQl2b2lkICpwcml2YXRlLCBpbnQgZXJyKTsKKworc3RydWN0IG5ldGZzX3N0YXRlOworc3RydWN0IHBvaG1lbGZzX3NiOworCitzdHJ1Y3QgbmV0ZnNfdHJhbnMKK3sKKwkvKgorCSAqIFRyYW5zYWN0aW9uIGhlYWRlciBhbmQgYXR0YWNoZWQgY29udGlndW91cyBkYXRhIGxpdmUgaGVyZS4KKwkgKi8KKwlzdHJ1Y3QgaW92ZWMJCQlpb3ZlYzsKKworCS8qCisJICogUGFnZXMgYXR0YWNoZWQgdG8gdHJhbnNhY3Rpb24uCisJICovCisJc3RydWN0IHBhZ2UJCQkqKnBhZ2VzOworCisJLyoKKwkgKiBMaXN0IGFuZCBwcm90ZWN0aW5nIGxvY2sgZm9yIHRyYW5zYWN0aW9uIGRlc3RpbmF0aW9uCisJICogbmV0d29yayBzdGF0ZXMuCisJICovCisJc3BpbmxvY2tfdAkJCWRzdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJCWRzdF9saXN0OworCisJLyoKKwkgKiBOdW1iZXIgb2YgdXNlcnMgZm9yIGdpdmVuIHRyYW5zYWN0aW9uLgorCSAqIEZvciBleGFtcGxlIGVhY2ggbmV0d29yayBzdGF0ZSBhdHRhY2hlZCB0byB0cmFuc2FjdGlvbgorCSAqIHZpYSBkc3RfbGlzdCBpbmNyZWFzZXMgaXQuCisJICovCisJYXRvbWljX3QJCQlyZWZjbnQ7CisKKwkvKgorCSAqIE51bWJlciBvZiBwYWdlcyBhdHRhY2hlZCB0byBnaXZlbiB0cmFuc2FjdGlvbi4KKwkgKiBTb21lIHNsb3RzIGluIGFib3ZlIHBhZ2UgYXJyYXkgY2FuIGJlIE5VTEwsIHNpbmNlCisJICogZm9yIGV4YW1wbGUgcGFnZSBjYW4gYmUgdW5kZXIgd3JpdGViYWNrIGFscmVhZHksCisJICogc28gd2Ugc2tpcCBpdCBpbiB0aGlzIHRyYW5zYWN0aW9uLgorCSAqLworCXVuc2lnbmVkIGludAkJCXBhZ2VfbnVtOworCisJLyoKKwkgKiBUcmFuc2FjdGlvbiBmbGFnczogc2luZ2xlIGRzdCBvciBicm9hZGNhc3QgYW5kIHNvIG9uLgorCSAqLworCXVuc2lnbmVkIGludAkJCWZsYWdzOworCisJLyoKKwkgKiBTaXplIG9mIHRoZSBkYXRhLCB3aGljaCBjYW4gYmUgcGxhY2VkIGludG8KKwkgKiBpb3ZlYy5pb3ZfYmFzZSBhcmVhLgorCSAqLworCXVuc2lnbmVkIGludAkJCXRvdGFsX3NpemU7CisKKwkvKgorCSAqIE51bWJlciBvZiBwYWdlcyB0byBiZSBzZW50IHRvIHJlbW90ZSBzZXJ2ZXIuCisJICogVXN1YWxseSBlcXVhbCB0byBhYm92ZSBwYWdlX251bSwgYnV0IGluIGNhc2Ugb2YgcGFydGlhbAorCSAqIHdyaXRlYmFjayBpdCBjYW4gYWNjdW11bGF0ZSBvbmx5IHBhZ2VzIGFscmVhZHkgY29tcGxldGVkCisJICogcHJldmlvdXMgd3JpdGViYWNrLgorCSAqLworCXVuc2lnbmVkIGludAkJCWF0dGFjaGVkX3BhZ2VzOworCisJLyoKKwkgKiBBdHRhY2hlZCBudW1iZXIgb2YgYnl0ZXMgaW4gYWxsIGFib3ZlIHBhZ2VzLgorCSAqLworCXVuc2lnbmVkIGludAkJCWF0dGFjaGVkX3NpemU7CisKKwkvKgorCSAqIFVuaXF1ZSB0cmFuc2FjdG9uIGdlbmVyYXRpb24gbnVtYmVyLgorCSAqIFVzZWQgYXMgaWRlbnRpdHkgaW4gdGhlIG5ldHdvcmsgc3RhdGUgdHJlZSBvZiB0cmFuc2FjdGlvbnMuCisJICovCisJdW5zaWduZWQgaW50CQkJZ2VuOworCisJLyoKKwkgKiBUcmFuc2FjdGlvbiBjb21wbGV0aW9uIHN0YXR1cy4KKwkgKi8KKwlpbnQJCQkJcmVzdWx0OworCisJLyoKKwkgKiBTdXBlcmJsb2NrIHRoaXMgdHJhbnNhY3Rpb24gYmVsb25ncyB0bworCSAqLworCXN0cnVjdCBwb2htZWxmc19zYgkJKnBzYjsKKworCS8qCisJICogQ3J5cHRvIGVuZ2luZSwgd2hpY2ggcHJvY2Vzc2VkIHRoaXMgdHJhbnNhY3Rpb24uCisJICogQ2FuIGJlIG5vdCBOVUxMIG9ubHkgaWYgY3J5cHRvIGVuZ2luZSBob2xkcyBlbmNyeXB0ZWQgcGFnZXMuCisJICovCisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUJKmVuZzsKKworCS8qIFByaXZhdGUgZGF0YSAqLworCXZvaWQJCQkJKnByaXZhdGU7CisKKwkvKiBDb21wbGV0aW9uIGNhbGxiYWNrLCBpbnZva2VkIGp1c3QgYmVmb3JlIHRyYW5zYWN0aW9uIGlzIGRlc3Ryb3llZCAqLworCW5ldGZzX3RyYW5zX2NvbXBsZXRlX3QJCWNvbXBsZXRlOworfTsKKworc3RhdGljIGlubGluZSBpbnQgbmV0ZnNfdHJhbnNfY3VyX2xlbihzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQpCit7CisJcmV0dXJuIChzaWduZWQpKHQtPnRvdGFsX3NpemUgLSB0LT5pb3ZlYy5pb3ZfbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpuZXRmc190cmFuc19jdXJyZW50KHN0cnVjdCBuZXRmc190cmFucyAqdCkKK3sKKwlyZXR1cm4gdC0+aW92ZWMuaW92X2Jhc2UgKyB0LT5pb3ZlYy5pb3ZfbGVuOworfQorCitzdHJ1Y3QgbmV0ZnNfdHJhbnMgKm5ldGZzX3RyYW5zX2FsbG9jKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgbnIpOwordm9pZCBuZXRmc190cmFuc19mcmVlKHN0cnVjdCBuZXRmc190cmFucyAqdCk7CitpbnQgbmV0ZnNfdHJhbnNfZmluaXNoKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOworaW50IG5ldGZzX3RyYW5zX2ZpbmlzaF9zZW5kKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfdHJhbnNfcmVzZXQoc3RydWN0IG5ldGZzX3RyYW5zICp0KQoreworCXQtPmNvbXBsZXRlID0gTlVMTDsKK30KKworc3RydWN0IG5ldGZzX3RyYW5zX2RzdAoreworCXN0cnVjdCBsaXN0X2hlYWQJCXRyYW5zX2VudHJ5OworCXN0cnVjdCByYl9ub2RlCQkJc3RhdGVfZW50cnk7CisKKwl1bnNpZ25lZCBsb25nCQkJc2VuZF90aW1lOworCisJLyoKKwkgKiBUaW1lcyB0aGlzIHRyYW5zYWN0aW9uIHdhcyByZXNlbnQgdG8gaXRzIG9sZCBvciBuZXcsCisJICogZGVwZW5kaW5nIG9uIGZsYWdzLCBkZXN0aW5hdGlvbnMuIFdoZW4gaXQgcmVhY2hlcyBtYXhpbXVtCisJICogYWxsb3dlZCBudW1iZXIsIHNwZWNpZmllZCBpbiBzdXBlcmJsb2NrLT50cmFuc19yZXRyaWVzLAorCSAqIHRyYW5zYWN0aW9uIHdpbGwgYmUgZnJlZWQgd2l0aCBFVElNRURPVVQgZXJyb3IuCisJICovCisJdW5zaWduZWQgaW50CQkJcmV0cmllczsKKworCXN0cnVjdCBuZXRmc190cmFucwkJKnRyYW5zOworCXN0cnVjdCBuZXRmc19zdGF0ZQkJKnN0YXRlOworfTsKKworc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqbmV0ZnNfdHJhbnNfc2VhcmNoKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QsIHVuc2lnbmVkIGludCBnZW4pOwordm9pZCBuZXRmc190cmFuc19kcm9wX2RzdChzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QpOwordm9pZCBuZXRmc190cmFuc19kcm9wX2RzdF9ub3N0YXRlKHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCk7Cit2b2lkIG5ldGZzX3RyYW5zX2Ryb3BfdHJhbnMoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KTsKK3ZvaWQgbmV0ZnNfdHJhbnNfZHJvcF9sYXN0KHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCk7CitpbnQgbmV0ZnNfdHJhbnNfcmVzZW5kKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOworaW50IG5ldGZzX3RyYW5zX3JlbW92ZV9ub2xvY2soc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KTsKKworaW50IG5ldGZzX3RyYW5zX2luaXQodm9pZCk7Cit2b2lkIG5ldGZzX3RyYW5zX2V4aXQodm9pZCk7CisKK3N0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lCit7CisJdTY0CQkJCWl2OwkJLyogQ3J5cHRvIElWIGZvciBjdXJyZW50IG9wZXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJCQl0aW1lb3V0OwkvKiBDcnlwdG8gd2FpdGluZyB0aW1lb3V0ICovCisJdW5zaWduZWQgaW50CQkJc2l6ZTsJCS8qIFNpemUgb2YgY3J5cHRvIHNjcmF0Y2hwYWQgKi8KKwl2b2lkCQkJCSpkYXRhOwkJLyogVGVtcG9yYWwgY3J5cHRvIHNjcmF0Y2hwYWQgKi8KKwkvKgorCSAqIENyeXB0byBvcGVyYXRpb25zIHBlcmZvcm1lZCBvbiBvYmplY3RzLgorCSAqLworCXN0cnVjdCBjcnlwdG9faGFzaAkJKmhhc2g7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyCSpjaXBoZXI7CisKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZAkqdGhyZWFkOwkvKiBDcnlwdG8gdGhyZWFkIHdoaWNoIGhvc3RzIHRoaXMgZW5naW5lICovCisKKwlzdHJ1Y3QgcGFnZQkJCSoqcGFnZXM7CisJdW5zaWduZWQgaW50CQkJcGFnZV9udW07Cit9OworCitzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZAoreworCXN0cnVjdCBsaXN0X2hlYWQJCXRocmVhZF9lbnRyeTsKKworCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IJCSpwc2I7CisKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZQllbmc7CisKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMJCSp0cmFuczsKKworCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0OworCWludAkJCQllcnJvcjsKKworCXVuc2lnbmVkIGludAkJCXNpemU7CisJc3RydWN0IHBhZ2UJCQkqcGFnZTsKK307CisKK3ZvaWQgcG9obWVsZnNfY3J5cHRvX3RocmVhZF9tYWtlX3JlYWR5KHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0aCk7CisKKy8qCisgKiBOZXR3b3JrIHN0YXRlLCBhdHRhY2hlZCB0byBvbmUgc2VydmVyLgorICovCitzdHJ1Y3QgbmV0ZnNfc3RhdGUKK3sKKwlzdHJ1Y3QgbXV0ZXgJCV9fc3RhdGVfbG9jazsJCS8qIENhbiBub3QgYWxsb3cgdG8gdXNlIHRoZSBzYW1lIHNvY2tldCBzaW11bHRhbmVvdXNseSAqLworCXN0cnVjdCBtdXRleAkJX19zdGF0ZV9zZW5kX2xvY2s7CisJc3RydWN0IG5ldGZzX2NtZCAJY21kOwkJCS8qIENhY2hlZCBjb21tYW5kICovCisJc3RydWN0IG5ldGZzX2lub2RlX2luZm8JaW5mbzsJCQkvKiBDYWNoZWQgaW5vZGUgaW5mbyAqLworCisJdm9pZAkJCSpkYXRhOwkJCS8qIENhY2hlZCBzb21lIGRhdGEgKi8KKwl1bnNpZ25lZCBpbnQJCXNpemU7CQkJLyogU2l6ZSBvZiB0aGF0IGRhdGEgKi8KKworCXN0cnVjdCBwb2htZWxmc19zYgkqcHNiOwkJCS8qIFN1cGVyYmxvY2sgKi8KKworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkOwkJLyogQXN5bmMgcmVjZWl2aW5nIHRocmVhZCAqLworCisJLyogV2FpdGluZy9wb2xsaW5nIG1hY2hpbmVyeSAqLworCXdhaXRfcXVldWVfdCAJCXdhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgCSp3aGVhZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAJdGhyZWFkX3dhaXQ7CisKKwlzdHJ1Y3QgbXV0ZXgJCXRyYW5zX2xvY2s7CisJc3RydWN0IHJiX3Jvb3QJCXRyYW5zX3Jvb3Q7CisKKwlzdHJ1Y3QgcG9obWVsZnNfY3RsCWN0bDsJCQkvKiBSZW1vdGUgcGVlciAqLworCisJc3RydWN0IHNvY2tldAkJKnNvY2tldDsJCS8qIFNvY2tldCBvYmplY3QgKi8KKwlzdHJ1Y3Qgc29ja2V0CQkqcmVhZF9zb2NrZXQ7CQkvKiBDYWNoZWQgcG9pbnRlciB0byBzb2NrZXQgb2JqZWN0LgorCQkJCQkJCSAqIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGJldHdlZW4gbG9jayBkcm9wcyBzb2NrZXQgd2FzIGNoYW5nZWQuCisJCQkJCQkJICogTmV2ZXIgdXNlZCB0byByZWFkIGRhdGEgb3IgYW55IGtpbmQgb2YgYWNjZXNzLgorCQkJCQkJCSAqLworCS8qCisJICogQ3J5cHRvIGVuZ2luZXMgdG8gcHJvY2VzcyBpbmNvbWluZyBkYXRhLgorCSAqLworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lCWVuZzsKKworCWludAkJCW5lZWRfcmVzZXQ7Cit9OworCitpbnQgbmV0ZnNfc3RhdGVfaW5pdChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KTsKK3ZvaWQgbmV0ZnNfc3RhdGVfZXhpdChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KTsKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX3N0YXRlX2xvY2tfc2VuZChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCW11dGV4X2xvY2soJnN0LT5fX3N0YXRlX3NlbmRfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGZzX3N0YXRlX3RyeWxvY2tfc2VuZChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXJldHVybiBtdXRleF90cnlsb2NrKCZzdC0+X19zdGF0ZV9zZW5kX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfc3RhdGVfdW5sb2NrX3NlbmQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmc3QtPl9fc3RhdGVfc2VuZF9sb2NrKSk7CisKKwltdXRleF91bmxvY2soJnN0LT5fX3N0YXRlX3NlbmRfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19zdGF0ZV9sb2NrKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJbXV0ZXhfbG9jaygmc3QtPl9fc3RhdGVfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19zdGF0ZV91bmxvY2soc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmc3QtPl9fc3RhdGVfbG9jaykpOworCisJbXV0ZXhfdW5sb2NrKCZzdC0+X19zdGF0ZV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbmV0ZnNfc3RhdGVfcG9sbChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXVuc2lnbmVkIGludCByZXZlbnRzID0gUE9MTEhVUCB8IFBPTExFUlI7CisKKwluZXRmc19zdGF0ZV9sb2NrKHN0KTsKKwlpZiAoc3QtPnNvY2tldCkKKwkJcmV2ZW50cyA9IHN0LT5zb2NrZXQtPm9wcy0+cG9sbChOVUxMLCBzdC0+c29ja2V0LCBOVUxMKTsKKwluZXRmc19zdGF0ZV91bmxvY2soc3QpOworCisJcmV0dXJuIHJldmVudHM7Cit9CisKK3N0cnVjdCBwb2htZWxmc19jb25maWc7CisKK3N0cnVjdCBwb2htZWxmc19zYgoreworCXN0cnVjdCByYl9yb290CQltY2FjaGVfcm9vdDsKKwlzdHJ1Y3QgbXV0ZXgJCW1jYWNoZV9sb2NrOworCWF0b21pY19sb25nX3QJCW1jYWNoZV9nZW47CisJdW5zaWduZWQgbG9uZwkJbWNhY2hlX3RpbWVvdXQ7CisKKwl1bnNpZ25lZCBpbnQJCWlkeDsKKworCXVuc2lnbmVkIGludAkJdHJhbnNfcmV0cmllczsKKworCWF0b21pY190CQl0cmFuc19nZW47CisKKwl1bnNpZ25lZCBpbnQJCWNyeXB0b19hdHRhY2hlZF9zaXplOworCXVuc2lnbmVkIGludAkJY3J5cHRvX2FsaWduX3NpemU7CisKKwl1bnNpZ25lZCBpbnQJCWNyeXB0b19mYWlsX3Vuc3VwcG9ydGVkOworCisJdW5zaWduZWQgaW50CQljcnlwdG9fdGhyZWFkX251bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNyeXB0b19hY3RpdmVfbGlzdCwgY3J5cHRvX3JlYWR5X2xpc3Q7CisJc3RydWN0IG11dGV4CQljcnlwdG9fdGhyZWFkX2xvY2s7CisKKwl1bnNpZ25lZCBpbnQJCXRyYW5zX21heF9wYWdlczsKKwl1bnNpZ25lZCBsb25nCQl0cmFuc19kYXRhX3NpemU7CisJdW5zaWduZWQgbG9uZwkJdHJhbnNfdGltZW91dDsKKworCXVuc2lnbmVkIGxvbmcJCWRyb3Bfc2Nhbl90aW1lb3V0OworCXVuc2lnbmVkIGxvbmcJCXRyYW5zX3NjYW5fdGltZW91dDsKKworCXVuc2lnbmVkIGxvbmcJCXdhaXRfb25fcGFnZV90aW1lb3V0OworCisJc3RydWN0IGxpc3RfaGVhZAlmbHVzaF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJZHJvcF9saXN0OworCXNwaW5sb2NrX3QJCWlub19sb2NrOworCXU2NAkJCWlubzsKKworCS8qCisJICogUmVtb3RlIG5vZGVzIFBPSE1FTEZTIGNvbm5lY3RlZCB0by4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXN0YXRlX2xpc3Q7CisJc3RydWN0IG11dGV4CQlzdGF0ZV9sb2NrOworCisJLyoKKwkgKiBDdXJyZW50bHkgYWN0aXZlIHN0YXRlIHRvIHJlcXVlc3QgZGF0YSBmcm9tLgorCSAqLworCXN0cnVjdCBwb2htZWxmc19jb25maWcJKmFjdGl2ZV9zdGF0ZTsKKworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKworCS8qCisJICogVGltZWQgY2hlY2tzOiBzdGFsZSB0cmFuc2FjdGlvbnMsIGlub2RlcyB0byBiZSBmcmVlZCBhbmQgc28gb24uCisJICovCisJc3RydWN0IGRlbGF5ZWRfd29yayAJZHdvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayAJZHJvcF9kd29yazsKKworCXN0cnVjdCBzdXBlcl9ibG9jawkqc2I7CisKKwkvKgorCSAqIEFsZ29yaXRobSBzdHJpbmdzLgorCSAqLworCWNoYXIJCQkqaGFzaF9zdHJpbmc7CisJY2hhcgkJCSpjaXBoZXJfc3RyaW5nOworCisJdTgJCQkqaGFzaF9rZXk7CisJdTgJCQkqY2lwaGVyX2tleTsKKworCS8qCisJICogQWxnb3JpdGhtIHN0cmluZyBsZW5ndGhzLgorCSAqLworCXVuc2lnbmVkIGludAkJaGFzaF9zdHJsZW47CisJdW5zaWduZWQgaW50CQljaXBoZXJfc3RybGVuOworCXVuc2lnbmVkIGludAkJaGFzaF9rZXlzaXplOworCXVuc2lnbmVkIGludAkJY2lwaGVyX2tleXNpemU7CisKKwkvKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdG8gcGVyZnJvbSBjcnlwdG8gcHJvY2Vzc2luZyBvciBub3QuCisJICovCisJaW50CQkJcGVyZm9ybV9jcnlwdG87CisKKwkvKgorCSAqIFBPSE1FTEZTIHN0YXRpc3RpY3MuCisJICovCisJdTY0CQkJdG90YWxfc2l6ZTsKKwl1NjQJCQlhdmFpbF9zaXplOworCWF0b21pY19sb25nX3QJCXRvdGFsX2lub2RlczsKKworCS8qCisJICogWGF0dHIgc3VwcG9ydCwgcmVhZC1vbmx5IGFuZCBzbyBvbi4KKwkgKi8KKwl1NjQJCQlzdGF0ZV9mbGFnczsKKworCS8qCisJICogVGVtcG9yYXJ5IHN0b3JhZ2UgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gdGhlIHdhaXQgcXVldWUuCisJICovCisJbG9uZwkJCWZsYWdzOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX3RyYW5zX3VwZGF0ZShzdHJ1Y3QgbmV0ZnNfY21kICpjbWQsCisJCXN0cnVjdCBuZXRmc190cmFucyAqdCwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IHN6ID0gQUxJR04oc2l6ZSwgdC0+cHNiLT5jcnlwdG9fYWxpZ25fc2l6ZSk7CisKKwl0LT5pb3ZlYy5pb3ZfbGVuICs9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSArIHN6OworCWNtZC0+Y3BhZCA9IF9fY3B1X3RvX2JlMTYoc3ogLSBzaXplKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9obWVsZnNfc2IgKlBPSE1FTEZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm87Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvaG1lbGZzX2lub2RlICpQT0hNRUxGU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IHBvaG1lbGZzX2lub2RlLCB2ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBwb2htZWxmc19uZXdfaW5vKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXU2NCBpbm87CisKKwlzcGluX2xvY2soJnBzYi0+aW5vX2xvY2spOworCWlubyA9IHBzYi0+aW5vKys7CisJc3Bpbl91bmxvY2soJnBzYi0+aW5vX2xvY2spOworCisJcmV0dXJuIGlubzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvaG1lbGZzX3B1dF9pbm9kZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IocGktPnZmc19pbm9kZS5pX3NiKTsKKworCXNwaW5fbG9jaygmcHNiLT5pbm9fbG9jayk7CisJbGlzdF9tb3ZlX3RhaWwoJnBpLT5pbm9kZV9lbnRyeSwgJnBzYi0+ZHJvcF9saXN0KTsKKwlwaS0+ZHJvcF9jb3VudCsrOworCXNwaW5fdW5sb2NrKCZwc2ItPmlub19sb2NrKTsKK30KKworc3RydWN0IHBvaG1lbGZzX2NvbmZpZworeworCXN0cnVjdCBsaXN0X2hlYWQJY29uZmlnX2VudHJ5OworCisJc3RydWN0IG5ldGZzX3N0YXRlCXN0YXRlOworfTsKKworc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cAoreworCS8qCisJICogRW50cnkgaW4gdGhlIGdsb2JhbCBjb25maWcgZ3JvdXAgbGlzdC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWdyb3VwX2VudHJ5OworCisJLyoKKwkgKiBJbmRleCBvZiB0aGUgY3VycmVudCBncm91cC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCWlkeDsKKwkvKgorCSAqIE51bWJlciBvZiBjb25maWdfbGlzdCBlbnRyaWVzIGluIHRoaXMgZ3JvdXAgZW50cnkuCisJICovCisJdW5zaWduZWQgaW50CQludW1fZW50cnk7CisJLyoKKwkgKiBBbGdvcml0aG0gc3RyaW5ncy4KKwkgKi8KKwljaGFyCQkJKmhhc2hfc3RyaW5nOworCWNoYXIJCQkqY2lwaGVyX3N0cmluZzsKKworCS8qCisJICogQWxnb3JpdGhtIHN0cmluZyBsZW5ndGhzLgorCSAqLworCXVuc2lnbmVkIGludAkJaGFzaF9zdHJsZW47CisJdW5zaWduZWQgaW50CQljaXBoZXJfc3RybGVuOworCisJLyoKKwkgKiBLZXkgYW5kIGl0cyBzaXplLgorCSAqLworCXVuc2lnbmVkIGludAkJaGFzaF9rZXlzaXplOworCXVuc2lnbmVkIGludAkJY2lwaGVyX2tleXNpemU7CisJdTgJCQkqaGFzaF9rZXk7CisJdTgJCQkqY2lwaGVyX2tleTsKKworCS8qCisJICogTGlzdCBvZiBjb25maWcgZW50cmllcyAobmV0d29yayBzdGF0ZSBpbmZvKSBmb3IgZ2l2ZW4gaWR4LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQJY29uZmlnX2xpc3Q7Cit9OworCitpbnQgX19pbml0IHBvaG1lbGZzX2NvbmZpZ19pbml0KHZvaWQpOwordm9pZCBwb2htZWxmc19jb25maWdfZXhpdCh2b2lkKTsKK2ludCBwb2htZWxmc19jb3B5X2NvbmZpZyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7CitpbnQgcG9obWVsZnNfY29weV9jcnlwdG8oc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOworaW50IHBvaG1lbGZzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjb25maWcsIGludCBpZHgpOworaW50IHBvaG1lbGZzX3N0YXRlX2luaXRfb25lKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjb25mKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9obWVsZnNfZGlyX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcG9obWVsZnNfZGlyX2lub2RlX29wczsKKworaW50IHBvaG1lbGZzX3N0YXRlX2luaXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOwordm9pZCBwb2htZWxmc19zdGF0ZV9leGl0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK3ZvaWQgcG9obWVsZnNfc3RhdGVfZmx1c2hfdHJhbnNhY3Rpb25zKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpOworCit2b2lkIHBvaG1lbGZzX2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm8pOworCit2b2lkIHBvaG1lbGZzX25hbWVfZGVsKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbik7Cit2b2lkIHBvaG1lbGZzX2ZyZWVfbmFtZXMoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQpOworc3RydWN0IHBvaG1lbGZzX25hbWUgKnBvaG1lbGZzX3NlYXJjaF9oYXNoKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHUzMiBoYXNoKTsKKwordm9pZCBwb2htZWxmc19pbm9kZV9kZWxfaW5vZGUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpOworCitzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBvaG1lbGZzX2NyZWF0ZV9lbnRyeV9sb2NhbChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHFzdHIgKnN0ciwgdTY0IHN0YXJ0LCBpbnQgbW9kZSk7CisKK2ludCBwb2htZWxmc193cml0ZV9jcmVhdGVfaW5vZGUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSk7CisKK2ludCBwb2htZWxmc193cml0ZV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5ldGZzX3RyYW5zICp0cmFucyk7CitpbnQgcG9obWVsZnNfcmVtb3ZlX2NoaWxkKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbik7CisKK3N0cnVjdCBwb2htZWxmc19pbm9kZSAqcG9obWVsZnNfbmV3X2lub2RlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLAorCQlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHFzdHIgKnN0ciwKKwkJc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm8sIGludCBsaW5rKTsKKworaW50IHBvaG1lbGZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOworaW50IHBvaG1lbGZzX3NldGF0dHJfcmF3KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0cik7CisKK2ludCBwb2htZWxmc19tZXRhX2NvbW1hbmQoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdW5zaWduZWQgaW50IGNtZF9vcCwgdW5zaWduZWQgaW50IGZsYWdzLAorCQluZXRmc190cmFuc19jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpwcml2LCB1NjQgc3RhcnQpOworaW50IHBvaG1lbGZzX21ldGFfY29tbWFuZF9kYXRhKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHU2NCBpZCwgdW5zaWduZWQgaW50IGNtZF9vcCwgY2hhciAqYWRkb24sCisJCXVuc2lnbmVkIGludCBmbGFncywgbmV0ZnNfdHJhbnNfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqcHJpdiwgdTY0IHN0YXJ0KTsKKwordm9pZCBwb2htZWxmc19jaGVja19zdGF0ZXMoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOwordm9pZCBwb2htZWxmc19zd2l0Y2hfYWN0aXZlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKKworaW50IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKK2ludCBwb2htZWxmc19wYXRoX2xlbmd0aChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpKTsKKworc3RydWN0IHBvaG1lbGZzX2NyeXB0b19jb21wbGV0aW9uCit7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGU7CisJaW50CQkJZXJyb3I7Cit9OworCitpbnQgcG9obWVsZnNfdHJhbnNfY3J5cHQoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7Cit2b2lkIHBvaG1lbGZzX2NyeXB0b19leGl0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK2ludCBwb2htZWxmc19jcnlwdG9faW5pdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7CisKK2ludCBwb2htZWxmc19jcnlwdG9fZW5naW5lX2luaXQoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK3ZvaWQgcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9leGl0KHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplKTsKKworaW50IHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzX2lucHV0X2RhdGEoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsIHU2NCBpdiwKKwkJdm9pZCAqZGF0YSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBzaXplKTsKK2ludCBwb2htZWxmc19jcnlwdG9fcHJvY2Vzc19pbnB1dF9wYWdlKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IHNpemUsIHU2NCBpdik7CisKK3N0YXRpYyBpbmxpbmUgdTY0IHBvaG1lbGZzX2dlbl9pdihzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQpCit7CisJdTY0IGl2ID0gdC0+Z2VuOworCisJaXYgPDw9IDMyOworCWl2IHw9ICgodW5zaWduZWQgbG9uZyl0KSAmIDB4ZmZmZmZmZmY7CisKKwlyZXR1cm4gaXY7Cit9CisKK2ludCBwb2htZWxmc19kYXRhX2xvY2soc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSwgaW50IHR5cGUpOworaW50IHBvaG1lbGZzX2RhdGFfdW5sb2NrKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHU2NCBzdGFydCwgdTMyIHNpemUsIGludCB0eXBlKTsKK2ludCBwb2htZWxmc19kYXRhX2xvY2tfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvaG1lbGZzX25lZWRfbG9jayhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCBpbnQgdHlwZSkKK3sKKwlpZiAodGVzdF9iaXQoTkVURlNfSU5PREVfT1dORUQsICZwaS0+c3RhdGUpKSB7CisJCWlmICh0eXBlID09IHBpLT5sb2NrX3R5cGUpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCh0eXBlID09IFBPSE1FTEZTX1JFQURfTE9DSykgJiYgKHBpLT5sb2NrX3R5cGUgPT0gUE9ITUVMRlNfV1JJVEVfTE9DSykpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXRlc3RfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitpbnQgX19pbml0IHBvaG1lbGZzX21jYWNoZV9pbml0KHZvaWQpOwordm9pZCBwb2htZWxmc19tY2FjaGVfZXhpdCh2b2lkKTsKKworLy8jZGVmaW5lIENPTkZJR19QT0hNRUxGU19ERUJVRworCisjaWZkZWYgQ09ORklHX1BPSE1FTEZTX0RFQlVHCisjZGVmaW5lIGRwcmludGthKGYsIGEuLi4pIHByaW50ayhmLCAjI2EpCisjZGVmaW5lIGRwcmludGsoZiwgYS4uLikgcHJpbnRrKCIlZDogIiBmLCB0YXNrX3BpZF92bnIoY3VycmVudCksICMjYSkKKyNlbHNlCisjZGVmaW5lIGRwcmludGthKGYsIGEuLi4pIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkcHJpbnRrKGYsIGEuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc190cmFuc19nZXQoc3RydWN0IG5ldGZzX3RyYW5zICp0KQoreworCWF0b21pY19pbmMoJnQtPnJlZmNudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc190cmFuc19wdXQoc3RydWN0IG5ldGZzX3RyYW5zICp0KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0LT5yZWZjbnQpKSB7CisJCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCB0LT5yZXN1bHQpOworCQlpZiAodC0+Y29tcGxldGUpCisJCQl0LT5jb21wbGV0ZSh0LT5wYWdlcywgdC0+cGFnZV9udW0sCisJCQkJdC0+cHJpdmF0ZSwgdC0+cmVzdWx0KTsKKwkJbmV0ZnNfdHJhbnNfZnJlZSh0KTsKKwl9Cit9CisKK3N0cnVjdCBwb2htZWxmc19tY2FjaGUKK3sKKwlzdHJ1Y3QgcmJfbm9kZQkJCW1jYWNoZV9lbnRyeTsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJY29tcGxldGU7CisKKwlhdG9taWNfdAkJCXJlZmNudDsKKworCXU2NAkJCQlnZW47CisKKwl2b2lkCQkJCSpkYXRhOworCXU2NAkJCQlzdGFydDsKKwl1MzIJCQkJc2l6ZTsKKwlpbnQJCQkJZXJyOworCisJc3RydWN0IG5ldGZzX2lub2RlX2luZm8JCWluZm87Cit9OworCitzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICpwb2htZWxmc19tY2FjaGVfYWxsb2Moc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHU2NCBzdGFydCwKKwkJdW5zaWduZWQgaW50IHNpemUsIHZvaWQgKmRhdGEpOwordm9pZCBwb2htZWxmc19tY2FjaGVfZnJlZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbSk7CitzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICpwb2htZWxmc19tY2FjaGVfc2VhcmNoKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCB1NjQgZ2VuKTsKK3ZvaWQgcG9obWVsZnNfbWNhY2hlX3JlbW92ZV9sb2NrZWQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm0pOworCitzdGF0aWMgaW5saW5lIHZvaWQgcG9obWVsZnNfbWNhY2hlX2dldChzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptKQoreworCWF0b21pY19pbmMoJm0tPnJlZmNudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb2htZWxmc19tY2FjaGVfcHV0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLAorCQlzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtLT5yZWZjbnQpKQorCQlwb2htZWxmc19tY2FjaGVfZnJlZShwc2IsIG0pOworfQorCitpbnQgcG9obWVsZnNfZnRyYW5zX2luaXQodm9pZCk7Cit2b2lkIHBvaG1lbGZzX2Z0cmFuc19leGl0KHZvaWQpOwordm9pZCBwb2htZWxmc19mdHJhbnNfdXBkYXRlKHU2NCBpZCk7CitpbnQgcG9obWVsZnNfZnRyYW5zX2NoZWNrKHU2NCBpZCk7Cit2b2lkIHBvaG1lbGZzX2Z0cmFuc19jbGVhbih1NjQgaWQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyovCisKKyNlbmRpZiAvKiBfX05FVEZTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9wYXRoX2VudHJ5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvcGF0aF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYWQ4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvcGF0aF9lbnRyeS5jCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworI2RlZmluZSBVTkhBU0hFRF9PQlNDVVJFX1NUUklOR19TSVpFCQlzaXplb2YoIiAoZGVsZXRlZCkiKQorCisvKgorICogQ3JlYXRlIHBhdGggZnJvbSByb290IGZvciBnaXZlbiBpbm9kZS4KKyAqIFBhdGggaXMgZm9ybWVkIGFzIHNldCBvZiBzdHVjdHVyZXMsIGNvbnRhaW5pbmcgbmFtZSBvZiB0aGUgb2JqZWN0CisgKiBhbmQgaXRzIGlub2RlIGRhdGEgKG1vZGUsIHBlcm1pc3Npb25zIGFuZCBzbyBvbikuCisgKi8KK2ludCBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoOworCXN0cnVjdCBkZW50cnkgKmQ7CisJY2hhciAqcHRyOworCWludCBlcnIgPSAwLCBzdHJsZW4sIHJlZHVjZSA9IDA7CisKKwlkID0gZF9maW5kX2FsaWFzKCZwaS0+dmZzX2lub2RlKTsKKwlpZiAoIWQpIHsKKwkJcHJpbnRrKCIlczogbm8gYWxpYXMsIGxpc3RfZW1wdHk6ICVkLlxuIiwgX19mdW5jX18sIGxpc3RfZW1wdHkoJnBpLT52ZnNfaW5vZGUuaV9kZW50cnkpKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJcGF0aC5tbnQgPSBtbnRnZXQoY3VycmVudC0+ZnMtPnJvb3QubW50KTsKKwlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCisJcGF0aC5kZW50cnkgPSBkOworCisJaWYgKCFJU19ST09UKGQpICYmIGRfdW5oYXNoZWQoZCkpCisJCXJlZHVjZSA9IDE7CisKKwlwdHIgPSBkX3BhdGgoJnBhdGgsIGRhdGEsIGxlbik7CisJaWYgKElTX0VSUihwdHIpKSB7CisJCWVyciA9IFBUUl9FUlIocHRyKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJlZHVjZSAmJiBsZW4gPj0gVU5IQVNIRURfT0JTQ1VSRV9TVFJJTkdfU0laRSkgeworCQljaGFyICplbmQgPSBkYXRhICsgbGVuIC0gVU5IQVNIRURfT0JTQ1VSRV9TVFJJTkdfU0laRTsKKwkJKmVuZCA9ICdcMCc7CisJfQorCisJc3RybGVuID0gbGVuIC0gKHB0ciAtIChjaGFyICopZGF0YSk7CisJbWVtbW92ZShkYXRhLCBwdHIsIHN0cmxlbik7CisJcHRyID0gZGF0YTsKKworCWVyciA9IHN0cmxlbjsKKworCWRwcmludGsoIiVzOiBkbmFtZTogJyVzJywgbGVuOiAldSwgbWF4bGVuOiAldSwgbmFtZTogJyVzJywgc3RybGVuOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgZC0+ZF9uYW1lLm5hbWUsIGQtPmRfbmFtZS5sZW4sIGxlbiwgcHRyLCBzdHJsZW4pOworCitvdXQ6CisJZHB1dChkKTsKKwltbnRwdXQocGF0aC5tbnQpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpCit7CisJc3RydWN0IGRlbnRyeSAqZCwgKnJvb3QsICpmaXJzdDsKKwlpbnQgbGVuID0gMTsgLyogUm9vdCBzbGFzaCAqLworCisJZmlyc3QgPSBkID0gZF9maW5kX2FsaWFzKCZwaS0+dmZzX2lub2RlKTsKKwlpZiAoIWQpIHsKKwkJZHByaW50aygiJXM6IGlubzogJWxsdSwgbW9kZTogJW8uXG4iLCBfX2Z1bmNfXywgcGktPmlubywgcGktPnZmc19pbm9kZS5pX21vZGUpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwlyb290ID0gZGdldChjdXJyZW50LT5mcy0+cm9vdC5kZW50cnkpOworCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisKKwlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKworCWlmICghSVNfUk9PVChkKSAmJiBkX3VuaGFzaGVkKGQpKQorCQlsZW4gKz0gVU5IQVNIRURfT0JTQ1VSRV9TVFJJTkdfU0laRTsgLyogT2JzY3VyZSAiIChkZWxldGVkKSIgc3RyaW5nICovCisKKwl3aGlsZSAoZCAmJiBkICE9IHJvb3QgJiYgIUlTX1JPT1QoZCkpIHsKKwkJbGVuICs9IGQtPmRfbmFtZS5sZW4gKyAxOyAvKiBQbHVzIHNsYXNoICovCisJCWQgPSBkLT5kX3BhcmVudDsKKwl9CisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKworCWRwdXQocm9vdCk7CisJZHB1dChmaXJzdCk7CisKKwlyZXR1cm4gbGVuICsgMTsgLyogSW5jbHVkaW5nIHplcm8tYnl0ZSAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL3RyYW5zLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvdHJhbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2I1OTQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL3RyYW5zLmMKQEAgLTAsMCArMSw3MTUgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm5ldGZzX3RyYW5zX2RzdDsKK3N0YXRpYyBtZW1wb29sX3QgKm5ldGZzX3RyYW5zX2RzdF9wb29sOworCitzdGF0aWMgdm9pZCBuZXRmc190cmFuc19pbml0X3N0YXRpYyhzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIGludCBudW0sIGludCBzaXplKQoreworCXQtPnBhZ2VfbnVtID0gbnVtOworCXQtPnRvdGFsX3NpemUgPSBzaXplOworCWF0b21pY19zZXQoJnQtPnJlZmNudCwgMSk7CisKKwlzcGluX2xvY2tfaW5pdCgmdC0+ZHN0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZ0LT5kc3RfbGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgbmV0ZnNfdHJhbnNfc2VuZF9wYWdlcyhzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IGksIGF0dGFjaGVkX3BhZ2VzID0gdC0+YXR0YWNoZWRfcGFnZXMsIGNpOworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSAodC0+ZW5nKT90LT5lbmctPnBhZ2VzOnQtPnBhZ2VzOworCXN0cnVjdCBwYWdlICpwOworCXVuc2lnbmVkIGludCBzaXplOworCisJbXNnLm1zZ19uYW1lID0gTlVMTDsKKwltc2cubXNnX25hbWVsZW4gPSAwOworCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2cubXNnX2ZsYWdzID0gTVNHX1dBSVRBTEwgfCBNU0dfTU9SRTsKKworCWNpID0gMDsKKwlmb3IgKGk9MDsgaTx0LT5wYWdlX251bTsgKytpKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbY2ldOworCQlzdHJ1Y3QgbmV0ZnNfY21kIGNtZDsKKwkJc3RydWN0IGlvdmVjIGlvOworCisJCXAgPSB0LT5wYWdlc1tpXTsKKworCQlpZiAoIXApCisJCQljb250aW51ZTsKKworCQlzaXplID0gcGFnZV9wcml2YXRlKHApOworCisJCWlvLmlvdl9iYXNlID0gJmNtZDsKKwkJaW8uaW92X2xlbiA9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKTsKKworCQljbWQuY21kID0gTkVURlNfV1JJVEVfUEFHRTsKKwkJY21kLmV4dCA9IDA7CisJCWNtZC5pZCA9IDA7CisJCWNtZC5zaXplID0gc2l6ZTsKKwkJY21kLnN0YXJ0ID0gcC0+aW5kZXg7CisJCWNtZC5zdGFydCA8PD0gUEFHRV9DQUNIRV9TSElGVDsKKwkJY21kLmNzaXplID0gMDsKKwkJY21kLmNwYWQgPSAwOworCQljbWQuaXYgPSBwb2htZWxmc19nZW5faXYodCk7CisKKwkJbmV0ZnNfY29udmVydF9jbWQoJmNtZCk7CisKKwkJbXNnLm1zZ19pb3YgPSAmaW87CisJCW1zZy5tc2dfaW92bGVuID0gMTsKKwkJbXNnLm1zZ19mbGFncyA9IE1TR19XQUlUQUxMIHwgTVNHX01PUkU7CisKKwkJZXJyID0ga2VybmVsX3NlbmRtc2coc3QtPnNvY2tldCwgJm1zZywgKHN0cnVjdCBrdmVjICopbXNnLm1zZ19pb3YsIDEsIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSk7CisJCWlmIChlcnIgPD0gMCkgeworCQkJcHJpbnRrKCIlczogJWQvJWQgZmFpbGVkIHRvIHNlbmQgdHJhbnNhY3Rpb24gaGVhZGVyOiB0OiAlcCwgZ2VuOiAldSwgZXJyOiAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCBpLCB0LT5wYWdlX251bSwgdCwgdC0+Z2VuLCBlcnIpOworCQkJaWYgKGVyciA9PSAwKQorCQkJCWVyciA9IC1FQ09OTlJFU0VUOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJbXNnLm1zZ19mbGFncyA9IE1TR19XQUlUQUxMfChhdHRhY2hlZF9wYWdlcyA9PSAxKT8wOk1TR19NT1JFOworCisJCWVyciA9IGtlcm5lbF9zZW5kcGFnZShzdC0+c29ja2V0LCBwYWdlLCAwLCBzaXplLCBtc2cubXNnX2ZsYWdzKTsKKwkJaWYgKGVyciA8PSAwKSB7CisJCQlwcmludGsoIiVzOiAlZC8lZCBmYWlsZWQgdG8gc2VuZCB0cmFuc2FjdGlvbiBwYWdlOiB0OiAlcCwgZ2VuOiAldSwgc2l6ZTogJXUsIGVycjogJWQuXG4iLAorCQkJCQlfX2Z1bmNfXywgaSwgdC0+cGFnZV9udW0sIHQsIHQtPmdlbiwgc2l6ZSwgZXJyKTsKKwkJCWlmIChlcnIgPT0gMCkKKwkJCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCWRwcmludGsoIiVzOiAlZC8lZCBzZW50IHQ6ICVwLCBnZW46ICV1LCBwYWdlOiAlcC8lcCwgc2l6ZTogJXUuXG4iLAorCQkJX19mdW5jX18sIGksIHQtPnBhZ2VfbnVtLCB0LCB0LT5nZW4sIHBhZ2UsIHAsIHNpemUpOworCisJCWVyciA9IDA7CisJCWF0dGFjaGVkX3BhZ2VzLS07CisJCWlmICghYXR0YWNoZWRfcGFnZXMpCisJCQlicmVhazsKKwkJY2krKzsKKworCQljb250aW51ZTsKKworZXJyX291dDoKKwkJcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgdCwgdC0+Z2VuLCBlcnIpOworCQluZXRmc19zdGF0ZV9leGl0KHN0KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworaW50IG5ldGZzX3RyYW5zX3NlbmQoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCWludCBlcnI7CisJc3RydWN0IG1zZ2hkciBtc2c7CisKKwlCVUdfT04oIXQtPmlvdmVjLmlvdl9sZW4pOworCUJVR19PTih0LT5pb3ZlYy5pb3ZfbGVuID4gMTAyNCoxMDI0KjEwMjQpOworCisJbmV0ZnNfc3RhdGVfbG9ja19zZW5kKHN0KTsKKwlpZiAoIXN0LT5zb2NrZXQpIHsKKwkJZXJyID0gbmV0ZnNfc3RhdGVfaW5pdChzdCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfdW5sb2NrX3JldHVybjsKKwl9CisKKwltc2cubXNnX2lvdiA9ICZ0LT5pb3ZlYzsKKwltc2cubXNnX2lvdmxlbiA9IDE7CisJbXNnLm1zZ19uYW1lID0gTlVMTDsKKwltc2cubXNnX25hbWVsZW4gPSAwOworCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2cubXNnX2ZsYWdzID0gTVNHX1dBSVRBTEw7CisKKwlpZiAodC0+YXR0YWNoZWRfcGFnZXMpCisJCW1zZy5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7CisKKwllcnIgPSBrZXJuZWxfc2VuZG1zZyhzdC0+c29ja2V0LCAmbXNnLCAoc3RydWN0IGt2ZWMgKiltc2cubXNnX2lvdiwgMSwgdC0+aW92ZWMuaW92X2xlbik7CisJaWYgKGVyciA8PSAwKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBzZW5kIGNvbnRpZyB0cmFuc2FjdGlvbjogdDogJXAsIGdlbjogJXUsIHNpemU6ICV6dSwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgdC0+aW92ZWMuaW92X2xlbiwgZXJyKTsKKwkJaWYgKGVyciA9PSAwKQorCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJCWdvdG8gZXJyX291dF91bmxvY2tfcmV0dXJuOworCX0KKworCWRwcmludGsoIiVzOiBzZW50ICVzIHRyYW5zYWN0aW9uOiB0OiAlcCwgZ2VuOiAldSwgc2l6ZTogJXp1LCBwYWdlX251bTogJXUuXG4iLAorCQkJX19mdW5jX18sICh0LT5wYWdlX251bSk/InBhcnRpYWwiOiJmdWxsIiwKKwkJCXQsIHQtPmdlbiwgdC0+aW92ZWMuaW92X2xlbiwgdC0+cGFnZV9udW0pOworCisJZXJyID0gMDsKKwlpZiAodC0+YXR0YWNoZWRfcGFnZXMpCisJCWVyciA9IG5ldGZzX3RyYW5zX3NlbmRfcGFnZXModCwgc3QpOworCitlcnJfb3V0X3VubG9ja19yZXR1cm46CisKKwlpZiAoc3QtPm5lZWRfcmVzZXQpIHsKKwkJbmV0ZnNfc3RhdGVfZXhpdChzdCk7CisJfQorCW5ldGZzX3N0YXRlX3VubG9ja19zZW5kKHN0KTsKKworCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgZXJyOiAlZC5cbiIsCisJCV9fZnVuY19fLCB0LCB0LT5nZW4sIGVycik7CisKKwl0LT5yZXN1bHQgPSBlcnI7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmV0ZnNfdHJhbnNfY21wKHVuc2lnbmVkIGludCBnZW4sIHVuc2lnbmVkIGludCBuZXcpCit7CisJaWYgKGdlbiA8IG5ldykKKwkJcmV0dXJuIDE7CisJaWYgKGdlbiA+IG5ldykKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpuZXRmc190cmFuc19zZWFyY2goc3RydWN0IG5ldGZzX3N0YXRlICpzdCwgdW5zaWduZWQgaW50IGdlbikKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzdC0+dHJhbnNfcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJvb3QtPnJiX25vZGU7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqdG1wLCAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJaW50IGNtcDsKKworCXdoaWxlIChuKSB7CisJCXRtcCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBuZXRmc190cmFuc19kc3QsIHN0YXRlX2VudHJ5KTsKKwkJdCA9IHRtcC0+dHJhbnM7CisKKwkJY21wID0gbmV0ZnNfdHJhbnNfY21wKHQtPmdlbiwgZ2VuKTsKKwkJaWYgKGNtcCA8IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlyZXQgPSB0bXA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbmV0ZnNfdHJhbnNfaW5zZXJ0KHN0cnVjdCBuZXRmc190cmFuc19kc3QgKm5kc3QsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmc3QtPnRyYW5zX3Jvb3Q7CisJc3RydWN0IHJiX25vZGUgKipuID0gJnJvb3QtPnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKnJldCA9IE5VTEwsICp0bXA7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0ID0gTlVMTCwgKm5ldyA9IG5kc3QtPnRyYW5zOworCWludCBjbXA7CisKKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisKKwkJdG1wID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0LCBzdGF0ZV9lbnRyeSk7CisJCXQgPSB0bXAtPnRyYW5zOworCisJCWNtcCA9IG5ldGZzX3RyYW5zX2NtcCh0LT5nZW4sIG5ldy0+Z2VuKTsKKwkJaWYgKGNtcCA8IDApCisJCQluID0gJnBhcmVudC0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW4gPSAmcGFyZW50LT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlyZXQgPSB0bXA7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCIlczogZXhpc3Q6IG9sZDogZ2VuOiAldSwgZmxhZ3M6ICV4LCBzZW5kX3RpbWU6ICVsdSwgIgorCQkJCSJuZXc6IGdlbjogJXUsIGZsYWdzOiAleCwgc2VuZF90aW1lOiAlbHUuXG4iLAorCQkJX19mdW5jX18sIHQtPmdlbiwgdC0+ZmxhZ3MsIHJldC0+c2VuZF90aW1lLAorCQkJbmV3LT5nZW4sIG5ldy0+ZmxhZ3MsIG5kc3QtPnNlbmRfdGltZSk7CisJCXJldHVybiAtRUVYSVNUOworCX0KKworCXJiX2xpbmtfbm9kZSgmbmRzdC0+c3RhdGVfZW50cnksIHBhcmVudCwgbik7CisJcmJfaW5zZXJ0X2NvbG9yKCZuZHN0LT5zdGF0ZV9lbnRyeSwgcm9vdCk7CisJbmRzdC0+c2VuZF90aW1lID0gamlmZmllczsKKworCXJldHVybiAwOworfQorCitpbnQgbmV0ZnNfdHJhbnNfcmVtb3ZlX25vbG9jayhzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJaWYgKGRzdCAmJiBkc3QtPnN0YXRlX2VudHJ5LnJiX3BhcmVudF9jb2xvcikgeworCQlyYl9lcmFzZSgmZHN0LT5zdGF0ZV9lbnRyeSwgJnN0LT50cmFuc19yb290KTsKKwkJZHN0LT5zdGF0ZV9lbnRyeS5yYl9wYXJlbnRfY29sb3IgPSAwOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0ZnNfdHJhbnNfcmVtb3ZlX3N0YXRlKHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3QgPSBkc3QtPnN0YXRlOworCisJbXV0ZXhfbG9jaygmc3QtPnRyYW5zX2xvY2spOworCXJldCA9IG5ldGZzX3RyYW5zX3JlbW92ZV9ub2xvY2soZHN0LCBzdCk7CisJbXV0ZXhfdW5sb2NrKCZzdC0+dHJhbnNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ3JlYXRlIG5ldyBkZXN0aW5hdGlvbiBmb3IgZ2l2ZW4gdHJhbnNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGdpdmVuIG5ldHdvcmsgc3RhdGUuCisgKiBUcmFuc2FjdGlvbidzIHJlZmVyZW5jZSBjb3VudGVyIGlzIGJ1bXBlZCBhbmQgd2lsbCBiZSBkcm9wcGVkIHdoZW4gZWl0aGVyCisgKiByZXBseSBpcyByZWNlaXZlZCBvciB3aGVuIGFzeW5jIHRpbWVvdXQgZGV0ZWN0aW9uIHRhc2sgd2lsbCBmYWlsIHJlc2VuZGluZworICogYW5kIGRyb3AgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgbmV0ZnNfdHJhbnNfcHVzaF9kc3Qoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdDsKKwlpbnQgZXJyOworCisJZHN0ID0gbWVtcG9vbF9hbGxvYyhuZXRmc190cmFuc19kc3RfcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJZHN0LT5yZXRyaWVzID0gMDsKKwlkc3QtPnNlbmRfdGltZSA9IDA7CisJZHN0LT5zdGF0ZSA9IHN0OworCWRzdC0+dHJhbnMgPSB0OworCW5ldGZzX3RyYW5zX2dldCh0KTsKKworCW11dGV4X2xvY2soJnN0LT50cmFuc19sb2NrKTsKKwllcnIgPSBuZXRmc190cmFuc19pbnNlcnQoZHN0LCBzdCk7CisJbXV0ZXhfdW5sb2NrKCZzdC0+dHJhbnNfbG9jayk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXNwaW5fbG9jaygmdC0+ZHN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRzdC0+dHJhbnNfZW50cnksICZ0LT5kc3RfbGlzdCk7CisJc3Bpbl91bmxvY2soJnQtPmRzdF9sb2NrKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJdC0+cmVzdWx0ID0gZXJyOworCW5ldGZzX3RyYW5zX3B1dCh0KTsKKwltZW1wb29sX2ZyZWUoZHN0LCBuZXRmc190cmFuc19kc3RfcG9vbCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbmV0ZnNfdHJhbnNfZnJlZV9kc3Qoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0KQoreworCW5ldGZzX3RyYW5zX3B1dChkc3QtPnRyYW5zKTsKKwltZW1wb29sX2ZyZWUoZHN0LCBuZXRmc190cmFuc19kc3RfcG9vbCk7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGZzX3RyYW5zX3JlbW92ZV9kc3Qoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0KQoreworCWlmIChuZXRmc190cmFuc19yZW1vdmVfc3RhdGUoZHN0KSkKKwkJbmV0ZnNfdHJhbnNfZnJlZV9kc3QoZHN0KTsKK30KKworLyoKKyAqIERyb3AgZGVzdGluYXRpb24gdHJhbnNhY3Rpb24gZW50cnkgd2hlbiB3ZSBrbm93IGl0LgorICovCit2b2lkIG5ldGZzX3RyYW5zX2Ryb3BfZHN0KHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQgPSBkc3QtPnRyYW5zOworCisJc3Bpbl9sb2NrKCZ0LT5kc3RfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmZHN0LT50cmFuc19lbnRyeSk7CisJc3Bpbl91bmxvY2soJnQtPmRzdF9sb2NrKTsKKworCW5ldGZzX3RyYW5zX3JlbW92ZV9kc3QoZHN0KTsKK30KKworLyoKKyAqIERyb3AgZGVzdGluYXRpb24gdHJhbnNhY3Rpb24gZW50cnkgd2hlbiB3ZSBrbm93IGl0IGFuZCB3aGVuIHdlCisgKiBhbHJlYWR5IHJlbW92ZWQgZHN0IGZyb20gc3RhdGUgdHJlZS4KKyAqLwordm9pZCBuZXRmc190cmFuc19kcm9wX2RzdF9ub3N0YXRlKHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQgPSBkc3QtPnRyYW5zOworCisJc3Bpbl9sb2NrKCZ0LT5kc3RfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmZHN0LT50cmFuc19lbnRyeSk7CisJc3Bpbl91bmxvY2soJnQtPmRzdF9sb2NrKTsKKworCW5ldGZzX3RyYW5zX2ZyZWVfZHN0KGRzdCk7Cit9CisKKy8qCisgKiBUaGlzIGRyb3BzIGRlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIGVudHJ5IGZyb20gYXBwcm9wcmlhdGUgbmV0d29yayBzdGF0ZQorICogdHJlZSBhbmQgZHJvcHMgcmVsYXRlZCByZWZlcmVuY2UgY291bnRlci4gSXQgaXMgcG9zc2libGUgdGhhdCB0cmFuc2FjdGlvbgorICogd2lsbCBiZSBmcmVlZCBoZXJlIGlmIGl0cyByZWZlcmVuY2UgY291bnRlciBoaXRzIHplcm8uCisgKiBEZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiBlbnRyeSB3aWxsIGJlIGZyZWVkLgorICovCit2b2lkIG5ldGZzX3RyYW5zX2Ryb3BfdHJhbnMoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCwgKnRtcCwgKnJldCA9IE5VTEw7CisKKwlzcGluX2xvY2soJnQtPmRzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHN0LCB0bXAsICZ0LT5kc3RfbGlzdCwgdHJhbnNfZW50cnkpIHsKKwkJaWYgKGRzdC0+c3RhdGUgPT0gc3QpIHsKKwkJCXJldCA9IGRzdDsKKwkJCWxpc3RfZGVsKCZkc3QtPnRyYW5zX2VudHJ5KTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZ0LT5kc3RfbG9jayk7CisKKwlpZiAocmV0KQorCQluZXRmc190cmFuc19yZW1vdmVfZHN0KHJldCk7Cit9CisKKy8qCisgKiBUaGlzIGRyb3BzIGRlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIGVudHJ5IGZyb20gYXBwcm9wcmlhdGUgbmV0d29yayBzdGF0ZQorICogdHJlZSBhbmQgZHJvcHMgcmVsYXRlZCByZWZlcmVuY2UgY291bnRlci4gSXQgaXMgcG9zc2libGUgdGhhdCB0cmFuc2FjdGlvbgorICogd2lsbCBiZSBmcmVlZCBoZXJlIGlmIGl0cyByZWZlcmVuY2UgY291bnRlciBoaXRzIHplcm8uCisgKiBEZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiBlbnRyeSB3aWxsIGJlIGZyZWVkLgorICovCit2b2lkIG5ldGZzX3RyYW5zX2Ryb3BfbGFzdChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0LCAqdG1wLCAqcmV0OworCisJc3Bpbl9sb2NrKCZ0LT5kc3RfbG9jayk7CisJcmV0ID0gbGlzdF9lbnRyeSh0LT5kc3RfbGlzdC5wcmV2LCBzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0LCB0cmFuc19lbnRyeSk7CisJaWYgKHJldC0+c3RhdGUgIT0gc3QpIHsKKwkJcmV0ID0gTlVMTDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRzdCwgdG1wLCAmdC0+ZHN0X2xpc3QsIHRyYW5zX2VudHJ5KSB7CisJCQlpZiAoZHN0LT5zdGF0ZSA9PSBzdCkgeworCQkJCXJldCA9IGRzdDsKKwkJCQlsaXN0X2RlbF9pbml0KCZkc3QtPnRyYW5zX2VudHJ5KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWxpc3RfZGVsKCZyZXQtPnRyYW5zX2VudHJ5KTsKKwl9CisJc3Bpbl91bmxvY2soJnQtPmRzdF9sb2NrKTsKKworCWlmIChyZXQpCisJCW5ldGZzX3RyYW5zX3JlbW92ZV9kc3QocmV0KTsKK30KKworc3RhdGljIGludCBuZXRmc190cmFuc19wdXNoKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gbmV0ZnNfdHJhbnNfcHVzaF9kc3QodCwgc3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBuZXRmc190cmFuc19zZW5kKHQsIHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCWlmICh0LT5mbGFncyAmIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QpCisJCXBvaG1lbGZzX3N3aXRjaF9hY3RpdmUoc3QtPnBzYik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCXQtPnJlc3VsdCA9IGVycjsKKwluZXRmc190cmFuc19kcm9wX2xhc3QodCwgc3QpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IG5ldGZzX3RyYW5zX2ZpbmlzaF9zZW5kKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYzsKKwlpbnQgZXJyID0gLUVOT0RFVjsKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0OworI2lmIDAKKwlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIHNpemU6ICV1LCBwYWdlX251bTogJXUsIGFjdGl2ZTogJXAuXG4iLAorCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCB0LT5pb3ZlYy5pb3ZfbGVuLCB0LT5wYWdlX251bSwgcHNiLT5hY3RpdmVfc3RhdGUpOworI2VuZGlmCisJbXV0ZXhfbG9jaygmcHNiLT5zdGF0ZV9sb2NrKTsKKworCWlmICgodC0+ZmxhZ3MgJiBORVRGU19UUkFOU19TSU5HTEVfRFNUKSAmJiBwc2ItPmFjdGl2ZV9zdGF0ZSkgeworCQlzdCA9ICZwc2ItPmFjdGl2ZV9zdGF0ZS0+c3RhdGU7CisKKwkJZXJyID0gLUVQSVBFOworCQlpZiAobmV0ZnNfc3RhdGVfcG9sbChzdCkgJiBQT0xMT1VUKSB7CisJCQllcnIgPSBuZXRmc190cmFuc19wdXNoX2RzdCh0LCBzdCk7CisJCQlpZiAoIWVycikgeworCQkJCWVyciA9IG5ldGZzX3RyYW5zX3NlbmQodCwgc3QpOworCQkJCWlmIChlcnIpIHsKKwkJCQkJbmV0ZnNfdHJhbnNfZHJvcF9sYXN0KHQsIHN0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlwb2htZWxmc19zd2l0Y2hfYWN0aXZlKHBzYik7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJfQorCQlwb2htZWxmc19zd2l0Y2hfYWN0aXZlKHBzYik7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJc3QgPSAmYy0+c3RhdGU7CisKKwkJZXJyID0gbmV0ZnNfdHJhbnNfcHVzaCh0LCBzdCk7CisJCWlmICghZXJyICYmICh0LT5mbGFncyAmIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QpKQorCQkJYnJlYWs7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcHNiLT5zdGF0ZV9sb2NrKTsKKyNpZiAwCisJZHByaW50aygiJXM6IGZ1bGx5IHNlbnQgdDogJXAsIGdlbjogJXUsIHNpemU6ICV1LCBwYWdlX251bTogJXUsIGVycjogJWQuXG4iLAorCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCB0LT5pb3ZlYy5pb3ZfbGVuLCB0LT5wYWdlX251bSwgZXJyKTsKKyNlbmRpZgorCWlmIChlcnIpCisJCXQtPnJlc3VsdCA9IGVycjsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbmV0ZnNfdHJhbnNfZmluaXNoKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSB0LT5pb3ZlYy5pb3ZfYmFzZTsKKworCXQtPmdlbiA9IGF0b21pY19pbmNfcmV0dXJuKCZwc2ItPnRyYW5zX2dlbik7CisKKwlwb2htZWxmc19mdHJhbnNfY2xlYW4odC0+Z2VuKTsKKworCWNtZC0+c2l6ZSA9IHQtPmlvdmVjLmlvdl9sZW4gLSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkgKworCQl0LT5hdHRhY2hlZF9zaXplICsgdC0+YXR0YWNoZWRfcGFnZXMgKiBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCk7CisJY21kLT5jbWQgPSBORVRGU19UUkFOUzsKKwljbWQtPnN0YXJ0ID0gdC0+Z2VuOworCWNtZC0+aWQgPSAwOworCisJaWYgKHBzYi0+cGVyZm9ybV9jcnlwdG8pIHsKKwkJY21kLT5leHQgPSBwc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplOworCQljbWQtPmNzaXplID0gcHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZTsKKwl9CisKKwlkcHJpbnRrKCIlczogdDogJXUsIHNpemU6ICV1LCBpb3ZfbGVuOiAlenUsIGF0dGFjaGVkX3NpemU6ICV1LCBhdHRhY2hlZF9wYWdlczogJXUuXG4iLAorCQkJX19mdW5jX18sIHQtPmdlbiwgY21kLT5zaXplLCB0LT5pb3ZlYy5pb3ZfbGVuLCB0LT5hdHRhY2hlZF9zaXplLCB0LT5hdHRhY2hlZF9wYWdlcyk7CisJZXJyID0gcG9obWVsZnNfdHJhbnNfY3J5cHQodCwgcHNiKTsKKwlpZiAoZXJyKSB7CisJCXQtPnJlc3VsdCA9IGVycjsKKwkJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKwkJZHByaW50aygiJXM6IHRyYW5zOiAlbGx1LCBjcnlwdG9fYXR0YWNoZWRfc2l6ZTogJXUsIGF0dGFjaGVkX3NpemU6ICV1LCBhdHRhY2hlZF9wYWdlczogJWQsIHRyYW5zX3NpemU6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBjbWQtPnN0YXJ0LCBwc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplLCB0LT5hdHRhY2hlZF9zaXplLCB0LT5hdHRhY2hlZF9wYWdlcywgY21kLT5zaXplLCBlcnIpOworCX0KKwluZXRmc190cmFuc19wdXQodCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlc2VuZCB0cmFuc2FjdGlvbiB0byByZW1vdGUgc2VydmVyKHMpLgorICogSWYgbmV3IHNlcnZlcnMgd2VyZSBhZGRlZCBpbnRvIHN1cGVyYmxvY2ssIHdlIGNhbiB0cnkgdG8gc2VuZCBkYXRhCisgKiB0byB0aGVtIHRvby4KKyAqCisgKiBJdCBpcyBjYWxsZWQgdW5kZXIgc3VwZXJibG9jaydzIHN0YXRlX2xvY2ssIHNvIHdlIGNhbiBzYWZlbHkKKyAqIGRlcmVmZXJlbmNlIHBzYi0+c3RhdGVfbGlzdC4gQWxzbywgdHJhbnNhY3Rpb24ncyByZWZlcmVuY2UgY291bnRlciBpcworICogYnVtcGVkLCBzbyBpdCBjYW4gbm90IGdvIGF3YXkgdW5kZXIgdXMsIHRodXMgd2UgY2FuIHNhZmVseSBhY2Nlc3MgYWxsCisgKiBpdHMgbWVtYmVycy4gU3RhdGUgaXMgbG9ja2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRyYW5zYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc2VudCB0byBhdAorICogbGVhc3Qgb25lIGRlc3RpbmF0aW9uIHRhcmdldC4KKyAqLworaW50IG5ldGZzX3RyYW5zX3Jlc2VuZChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdDsKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0OworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmM7CisJaW50IGVyciwgZXhpc3QsIGVycm9yID0gLUVOT0RFVjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCXN0ID0gJmMtPnN0YXRlOworCisJCWV4aXN0ID0gMDsKKwkJc3Bpbl9sb2NrKCZ0LT5kc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHN0LCAmdC0+ZHN0X2xpc3QsIHRyYW5zX2VudHJ5KSB7CisJCQlpZiAoc3QgPT0gZHN0LT5zdGF0ZSkgeworCQkJCWV4aXN0ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9jaygmdC0+ZHN0X2xvY2spOworCisJCWlmIChleGlzdCkgeworCQkJaWYgKCEodC0+ZmxhZ3MgJiBORVRGU19UUkFOU19TSU5HTEVfRFNUKSB8fAorCQkJCQkoYy0+Y29uZmlnX2VudHJ5Lm5leHQgPT0gJnBzYi0+c3RhdGVfbGlzdCkpIHsKKwkJCQlkcHJpbnRrKCIlczogcmVzZW5kaW5nIHN0OiAlcCwgdDogJXAsIGdlbjogJXUuXG4iLAorCQkJCQkJX19mdW5jX18sIHN0LCB0LCB0LT5nZW4pOworCQkJCWVyciA9IG5ldGZzX3RyYW5zX3NlbmQodCwgc3QpOworCQkJCWlmICghZXJyKQorCQkJCQllcnJvciA9IDA7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWRwcmludGsoIiVzOiBwdXNoaW5nL3Jlc2VuZGluZyBzdDogJXAsIHQ6ICVwLCBnZW46ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgc3QsIHQsIHQtPmdlbik7CisJCWVyciA9IG5ldGZzX3RyYW5zX3B1c2godCwgc3QpOworCQlpZiAoZXJyKQorCQkJY29udGludWU7CisJCWVycm9yID0gMDsKKwkJaWYgKHQtPmZsYWdzICYgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCkKKwkJCWJyZWFrOworCX0KKworCXQtPnJlc3VsdCA9IGVycm9yOworCXJldHVybiBlcnJvcjsKK30KKwordm9pZCAqbmV0ZnNfdHJhbnNfYWRkKHN0cnVjdCBuZXRmc190cmFucyAqdCwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IGlvdmVjICppbyA9ICZ0LT5pb3ZlYzsKKwl2b2lkICpwdHI7CisKKwlpZiAoc2l6ZSA+IHQtPnRvdGFsX3NpemUpIHsKKwkJcHRyID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGlvLT5pb3ZfbGVuICsgc2l6ZSA+IHQtPnRvdGFsX3NpemUpIHsKKwkJZHByaW50aygiJXM6IHRvbyBiaWcgc2l6ZSB0OiAlcCwgZ2VuOiAldSwgaW92X2xlbjogJXp1LCBzaXplOiAldSwgdG90YWw6ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBpby0+aW92X2xlbiwgc2l6ZSwgdC0+dG90YWxfc2l6ZSk7CisJCXB0ciA9IEVSUl9QVFIoLUUyQklHKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHRyID0gaW8tPmlvdl9iYXNlICsgaW8tPmlvdl9sZW47CisJaW8tPmlvdl9sZW4gKz0gc2l6ZTsKKworb3V0OgorCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgc2l6ZTogJXUsIHRvdGFsOiAlenUuXG4iLAorCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBzaXplLCBpby0+aW92X2xlbik7CisJcmV0dXJuIHB0cjsKK30KKwordm9pZCBuZXRmc190cmFuc19mcmVlKHN0cnVjdCBuZXRmc190cmFucyAqdCkKK3sKKwlpZiAodC0+ZW5nKQorCQlwb2htZWxmc19jcnlwdG9fdGhyZWFkX21ha2VfcmVhZHkodC0+ZW5nLT50aHJlYWQpOworCWtmcmVlKHQpOworfQorCitzdHJ1Y3QgbmV0ZnNfdHJhbnMgKm5ldGZzX3RyYW5zX2FsbG9jKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgbnIpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXVuc2lnbmVkIGludCBudW0sIGNvbnQsIHBhZCwgc2l6ZV9ub190cmFuczsKKwl1bnNpZ25lZCBpbnQgY3J5cHRvX2FkZGVkID0gMDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisKKwlpZiAocHNiLT5wZXJmb3JtX2NyeXB0bykKKwkJY3J5cHRvX2FkZGVkID0gcHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZTsKKworCS8qCisJICogfHNpemVvZihzdHJ1Y3QgbmV0ZnNfdHJhbnMpfAorCSAqIHxzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCl8IC0gdHJhbnNhY3Rpb24gaGVhZGVyCisJICogfHNpemV8IC0gYnVmZmVyIHdpdGggcmVxdWVzdGVkIHNpemUKKwkgKiB8cGFkZGluZ3wgLSBjcnlwdG8gcGFkZGluZywgemVybyBieXRlcworCSAqIHxuciAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKXwgLSBhcnJheSBvZiBwYWdlIHBvaW50ZXJzCisJICoKKwkgKiBPdmVyYWxsIHNpemUgc2hvdWxkIGJlIGxlc3MgdGhhbiBQQUdFX1NJWkUgZm9yIGd1YXJhbnRlZWQgYWxsb2NhdGlvbi4KKwkgKi8KKworCWNvbnQgPSBzaXplOworCXNpemUgPSBBTElHTihzaXplLCBwc2ItPmNyeXB0b19hbGlnbl9zaXplKTsKKwlwYWQgPSBzaXplIC0gY29udDsKKworCXNpemVfbm9fdHJhbnMgPSBzaXplICsgc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpICogMiArIGNyeXB0b19hZGRlZDsKKworCWNvbnQgPSBzaXplb2Yoc3RydWN0IG5ldGZzX3RyYW5zKSArIHNpemVfbm9fdHJhbnM7CisKKwludW0gPSAoUEFHRV9TSVpFIC0gY29udCkvc2l6ZW9mKHN0cnVjdCBwYWdlICopOworCisJaWYgKG5yID4gbnVtKQorCQluciA9IG51bTsKKworCXQgPSBremFsbG9jKGNvbnQgKyBucipzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9OT0lPKTsKKwlpZiAoIXQpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJdC0+aW92ZWMuaW92X2Jhc2UgPSAodm9pZCAqKSh0ICsgMSk7CisJdC0+cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopKHQtPmlvdmVjLmlvdl9iYXNlICsgc2l6ZV9ub190cmFucyk7CisKKwkvKgorCSAqIFJlc2VydmluZyBzcGFjZSBmb3IgdHJhbnNhY3Rpb24gaGVhZGVyLgorCSAqLworCXQtPmlvdmVjLmlvdl9sZW4gPSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkgKyBjcnlwdG9fYWRkZWQ7CisKKwluZXRmc190cmFuc19pbml0X3N0YXRpYyh0LCBuciwgc2l6ZV9ub190cmFucyk7CisKKwl0LT5mbGFncyA9IGZsYWdzOworCXQtPnBzYiA9IHBzYjsKKworCWNtZCA9IChzdHJ1Y3QgbmV0ZnNfY21kICopdC0+aW92ZWMuaW92X2Jhc2U7CisKKwljbWQtPnNpemUgPSBzaXplOworCWNtZC0+Y3BhZCA9IHBhZDsKKwljbWQtPmNzaXplID0gY3J5cHRvX2FkZGVkOworCisJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCBzaXplOiAldSwgcGFkZGluZzogJXUsIGFsaWduX3NpemU6ICV1LCBmbGFnczogJXgsICIKKwkJCSJwYWdlX251bTogJXUsIGJhc2U6ICVwLCBwYWdlczogJXAuXG4iLAorCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgc2l6ZSwgcGFkLCBwc2ItPmNyeXB0b19hbGlnbl9zaXplLCBmbGFncywgbnIsCisJCQl0LT5pb3ZlYy5pb3ZfYmFzZSwgdC0+cGFnZXMpOworCisJcmV0dXJuIHQ7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IG5ldGZzX3RyYW5zX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCW5ldGZzX3RyYW5zX2RzdCA9IGttZW1fY2FjaGVfY3JlYXRlKCJuZXRmc190cmFuc19kc3QiLCBzaXplb2Yoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCksCisJCQkwLCAwLCBOVUxMKTsKKwlpZiAoIW5ldGZzX3RyYW5zX2RzdCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwluZXRmc190cmFuc19kc3RfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCgyNTYsIG5ldGZzX3RyYW5zX2RzdCk7CisJaWYgKCFuZXRmc190cmFuc19kc3RfcG9vbCkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCWttZW1fY2FjaGVfZGVzdHJveShuZXRmc190cmFuc19kc3QpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgbmV0ZnNfdHJhbnNfZXhpdCh2b2lkKQoreworCW1lbXBvb2xfZGVzdHJveShuZXRmc190cmFuc19kc3RfcG9vbCk7CisJa21lbV9jYWNoZV9kZXN0cm95KG5ldGZzX3RyYW5zX2RzdCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnNwaXVzYi9yc3BpdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnNwaXVzYi9yc3BpdXNiLmMKaW5kZXggY2EyODFkNi4uZWNhZmZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JzcGl1c2IvcnNwaXVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yc3BpdXNiL3JzcGl1c2IuYwpAQCAtNzgxLDkgKzc4MSw4IEBACiAJCQlkYmcoIkVuZHBvaW50WyVkXS0+TWF4UGFja2V0U2l6ZSA9ICVkXG4iLCBpLAogCQkJICAgIGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CiAJCX0KLQkJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCSAgICBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSB7Ci0JCQlpZiAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlbmRwb2ludCkpIHsKKwkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVuZHBvaW50KSkKIAkJCQlwZHgtPmhFUFtpXSA9CiAJCQkJICAgIHVzYl9yY3ZidWxrcGlwZShwZHgtPnVkZXYsCiAJCQkJCQkgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC8yODYwX21haW5fZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwLzI4NjBfbWFpbl9kZXYuYwppbmRleCAwOGNhODFmLi5mZjdmODMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwLzI4NjBfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwLzI4NjBfbWFpbl9kZXYuYwpAQCAtOTAsMTIgKzkwLDEwIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgcnQyODYwX2NsZWFudXBfbW9kdWxlKHZvaWQpOwogc3RhdGljIGludCBfX2luaXQgcnQyODYwX2luaXRfbW9kdWxlKHZvaWQpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBydDI4NjBfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIHN0YXRpYyBpbnQgcnQyODYwX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldik7CiAjZW5kaWYgLy8gQ09ORklHX1BNIC8vCi0jZW5kaWYKIAogCiAvLwpAQCAtMTI4LDIyICsxMjYsMTUgQEAKICAgICBuYW1lOiAgICAgICAicnQyODYwIiwKICAgICBpZF90YWJsZTogICBydDI4NjBfcGNpX3RibCwKICAgICBwcm9iZTogICAgICBydDI4NjBfaW5pdF9vbmUsCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IDB4MjA0MTIKICAgICByZW1vdmU6ICAgICBfX2RldmV4aXRfcChydDI4NjBfcmVtb3ZlX29uZSksCi0jZWxzZQotICAgIHJlbW92ZTogICAgIF9fZGV2ZXhpdChydDI4NjBfcmVtb3ZlX29uZSksCi0jZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKICNpZmRlZiBDT05GSUdfUE0KIAlzdXNwZW5kOglydDI4NjBfc3VzcGVuZCwKIAlyZXN1bWU6CQlydDI4NjBfcmVzdW1lLAogI2VuZGlmCi0jZW5kaWYKIH07CiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKICNpZmRlZiBDT05GSUdfUE0KIAogVk9JRCBSVDI4NjBSZWplY3RQZW5kaW5nUGFja2V0cygKQEAgLTI4NCwxNiArMjc1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLy8gQ09ORklHX1BNIC8vCi0jZW5kaWYKIAogCiBzdGF0aWMgSU5UIF9faW5pdCBydDI4NjBfaW5pdF9tb2R1bGUoVk9JRCkKIHsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJ0Mjg2MF9kcml2ZXIpOwotI2Vsc2UKLSAgICByZXR1cm4gcGNpX21vZHVsZV9pbml0KCZydDI4NjBfZHJpdmVyKTsKLSNlbmRpZgogfQogCiAKQEAgLTM3NCwxMSArMzYwLDcgQEAKIAl9CiAKIAkvLyBGcmVlIHByZS1hbGxvY2F0ZWQgbmV0X2RldmljZSBtZW1vcnkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJZnJlZV9uZXRkZXYobmV0X2Rldik7Ci0jZWxzZQotCWtmcmVlKG5ldF9kZXYpOwotI2VuZGlmCiB9CiAKIC8vCkBAIC03NTgsMTYgKzc0MCwxMyBAQAogaW50IHByaW50X2ludF9jb3VudDsKIAogSVJRX0hBTkRMRV9UWVBFCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTkpKQogcnQyODYwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCi0jZWxzZQotcnQyODYwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2luc3RhbmNlOwogCVBSVE1QX0FEQVBURVIgcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKIAlJTlRfU09VUkNFX0NTUl9TVFJVQwlJbnRTb3VyY2U7CiAJUE9TX0NPT0tJRSBwT2JqOworCUJPT0xFQU4JYk9sZFZhbHVlOwogCiAJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKIApAQCAtODAwLDIwICs3NzksMTkgQEAKIAkvLyBSVDI2NjEgPT4gd2hlbiBBU0lDIGlzIHNsZWVwaW5nLCBNQUMgcmVnaXN0ZXIgY2Fubm90IGJlIHJlYWQgYW5kIHdyaXR0ZW4uCiAJLy8gUlQyODYwID0+IHdoZW4gQVNJQyBpcyBzbGVlcGluZywgTUFDIHJlZ2lzdGVyIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuLgogCisJYk9sZFZhbHVlID0gcEFkLT5iUENJY2xrT2ZmOworCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwogCXsKIAkJUlRNUF9JT19SRUFEMzIocEFkLCBJTlRfU09VUkNFX0NTUiwgJkludFNvdXJjZS53b3JkKTsKIAkJUlRNUF9JT19XUklURTMyKHBBZCwgSU5UX1NPVVJDRV9DU1IsIEludFNvdXJjZS53b3JkKTsgLy8gd3JpdGUgMSB0byBjbGVhcgogCX0KKwlwQWQtPmJQQ0ljbGtPZmYgPSBiT2xkVmFsdWU7CiAKIAkvLyBEbyBub3RoaW5nIGlmIFJlc2V0IGluIHByb2dyZXNzCiAJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykgfHwKIAkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKQogCXsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgICAgIHJldHVybiAgSVJRX0hBTkRMRUQ7Ci0jZWxzZQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAogCS8vCkBAIC04MjIsOCArODAwLDYgQEAKIAkvLyBUaGUgcHJpb3JpdHkgY2FuIGJlIGFkanVzdCBieSBhbHRlcmluZyBwcm9jZXNzaW5nIGlmIHN0YXRlbWVudAogCS8vCiAKLSAgICBwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLQogCS8vIElmIHJlcXVpcmVkIHNwaW5sb2NrLCBlYWNoIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgaGFzIHRvIGFjcXVpcmUKIAkvLyBhbmQgcmVsZWFzZSBpdHNlbGYuCiAJLy8KQEAgLTgzMiwxMSArODA4LDggQEAKIAlpZiAoSW50U291cmNlLndvcmQgPT0gMHhmZmZmZmZmZikKIAl7CiAJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgfCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICAgICAgcmV0dXJuICBJUlFfSEFORExFRDsKLSNlbHNlCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgorCQlwcmludGsoInNub3dwaW4gLSBJbnRTb3VyY2Uud29yZCA9PSAweGZmZmZmZmZmXG4iKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAogCWlmIChJbnRTb3VyY2Uud29yZCAmIFR4Q29oZXJlbnQpCkBAIC05NzAsMTAgKzk0Myw3IEBACiAJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogICAgIHJldHVybiAgSVJRX0hBTkRMRUQ7Ci0jZW5kaWYKLQogfQogCiAvKgpAQCAtMTAyNiwxMSArOTk2LDcgQEAKICAgICBVTE9ORwljc3JfYWRkcjsKIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotICAgIHByaW50X25hbWUgPSBwY2lfZGV2ID8gcGNpX25hbWUocGNpX2RldikgOiAicnQyODYwIjsKLSNlbHNlCi0gICAgcHJpbnRfbmFtZSA9IHBjaV9kZXYgPyBwY2lfZGV2LT5zbG90X25hbWUgOiAicnQyODYwIjsKLSNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKwlwcmludF9uYW1lID0gcGNpX2RldiA/IHBjaV9uYW1lKHBjaV9kZXYpIDogInJ0Mjg2MCI7CiAKIAluZXRfZGV2LT5iYXNlX2FkZHIgPSAwOwogCW5ldF9kZXYtPmlycSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9NYWtlZmlsZQppbmRleCA2MTYyMjEyLi5iOTU2MzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvTWFrZWZpbGUKQEAgLTIsNyArMiw2IEBACiAKICMgVE9ETzogYWxsIG9mIHRoZXNlIHNob3VsZCBiZSByZW1vdmVkCiBFWFRSQV9DRkxBR1MgKz0gLURMSU5VWCAtREFHR1JFR0FUSU9OX1NVUFBPUlQgLURQSUdHWUJBQ0tfU1VQUE9SVCAtRFdNTV9TVVBQT1JUCi1FWFRSQV9DRkxBR1MgKz0gLURSVDI4NjAKIEVYVFJBX0NGTEFHUyArPSAtRENPTkZJR19TVEFfU1VQUE9SVAogRVhUUkFfQ0ZMQUdTICs9IC1EREJHCiBFWFRSQV9DRkxBR1MgKz0gLURET1QxMV9OX1NVUFBPUlQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvVE9ETwppbmRleCAyZjcwYjBmLi42MTU4ZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9UT0RPCkBAIC0xLDYgKzEsNiBAQAogSSdtIGhlc2l0YW50IHRvIGFkZCBhIFRPRE8gZmlsZSBoZXJlLCBhcyB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVycyB3b3VsZAogcmVhbGx5IGhhdmUgcGVvcGxlIGhlbHAgdGhlbSBvdXQgb24gdGhlICJjbGVhbiIgcnQyODYwIGRyaXZlciB0aGF0IGNhbgotYmUgZm91bmQgYXQgdGhlIHJ0Mjg2MC5zZi5uZXQgc2l0ZS4KK2JlIGZvdW5kIGF0IHRoZSBodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20vIHNpdGUuCiAKIEJ1dCwgaWYgeW91IHdpc2ggdG8gY2xlYW4gdXAgdGhpcyBkcml2ZXIgaW5zdGVhZCwgaGVyZSdzIGEgc2hvcnQgbGlzdCBvZgogdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBkb25lIHRvIGdldCBpdCBpbnRvIGEgbW9yZSBtZXJnYWJsZSBzaGFwZToKQEAgLTgsNyArOCw3IEBACiBUT0RPOgogCS0gY2hlY2twYXRjaC5wbCBjbGVhbgogCS0gc3BhcnNlIGNsZWFuCi0JLSBwb3J0IHRvIGluLWtlcm5lbCA4MDIxMSBzdGFjaworCS0gcG9ydCB0byBpbi1rZXJuZWwgODAyMTEgc3RhY2sgYW5kIGNvbW1vbiBydDJ4MDAgaW5mcmFzdHJ1Y3R1cmUKIAktIHJlbW92ZSByZWFkaW5nIGZyb20gL2V0Yy8gY29uZmlnIGZpbGVzCiAJLSByZXZpZXcgYnkgdGhlIHdpcmVsZXNzIGRldmVsb3BlciBjb21tdW5pdHkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhLmMKaW5kZXggYjY3YjllYi4uYjNmODhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YS5jCkBAIC0xMDUsOSArMTA1LDcgQEAKIAlQTkRJU19QQUNLRVQJcFBhY2tldDsKIAlORElTX1NUQVRVUyAgCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CiAJVUxPTkcJIAkJRnJlZU51bTsKLSNpZmRlZiBSVDI4NjAKIAl1bnNpZ25lZCBsb25nCUlycUZsYWdzID0gMDsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlVQ0hBUgkJCUlycVN0YXRlOwogCVVDSEFSCQkJcnRtcEh3SGRyW1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXTsgLy9SVE1QX0hXX0hEUl9MRU5dOwogCkBAIC0xMTgsMTAgKzExNiw5IEBACiAJLy8gMjg2MEMgdXNlIFR4IFJpbmcKIAogCUlycVN0YXRlID0gcEFkLT5pcnFfZGlzYWJsZWQ7Ci0jaWZkZWYgUlQyODYwCisKIAlpZiAoKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKSAmJiAoIUlycVN0YXRlKSkKIAkJUlRNUF9JUlFfTE9DSygmcEFkLT5pcnFfbG9jaywgSXJxRmxhZ3MpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJZG8KIAl7CkBAIC0xNzUsMTcgKzE3MiwxNCBAQAogCiAJfSB3aGlsZSAoRkFMU0UpOwogCi0jaWZkZWYgUlQyODYwCiAJLy8gMjg2MEMgdXNlIFR4IFJpbmcKIAlpZiAoKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKSAmJiAoIUlycVN0YXRlKSkKIAkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlyZXR1cm4gU3RhdHVzOwogfQogCiAKLSNpZmRlZiBSVDI4NjAKIE5ESVNfU1RBVFVTIE1pbmlwb3J0TU1SZXF1ZXN0VW5sb2NrKAogCUlOCVBSVE1QX0FEQVBURVIJcEFkLAogCUlOCVVDSEFSCQkJUXVlSWR4LApAQCAtMjUzLDcgKzI0Nyw2IEBACiAKIAlyZXR1cm4gU3RhdHVzOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIC8qCkBAIC0yOTAsMTcgKzI4MywxNCBAQAogCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAl9CiAKLSNpZmRlZiBSVDI4NjAKIAlpZiAoIHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwICkKIAkJcmV0dXJuIE1sbWVIYXJkVHJhbnNtaXRUeFJpbmcocEFkLFF1ZUlkeCxwUGFja2V0KTsKIAllbHNlCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCXJldHVybiBNbG1lSGFyZFRyYW5zbWl0TWdtdFJpbmcocEFkLFF1ZUlkeCxwUGFja2V0KTsKIAogfQogCiAKLSNpZmRlZiBSVDI4NjAKIE5ESVNfU1RBVFVTIE1sbWVIYXJkVHJhbnNtaXRUeFJpbmcoCiAJSU4JUFJUTVBfQURBUFRFUglwQWQsCiAJSU4JVUNIQVIJUXVlSWR4LApAQCAtMzY2LDcgKzM1Niw3IEBACiAJewogCQkvLyBvdXRnb2luZyBmcmFtZSBhbHdheXMgd2FrZXVwIFBIWSB0byBwcmV2ZW50IGZyYW1lIGxvc3QKIAkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCi0JCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwkJCUFzaWNGb3JjZVdha2V1cChwQWQsIEZST01fVFgpOwogCX0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAlwRmlyc3RUeFdJCT0oUFRYV0lfU1RSVUMpcFNyY0J1ZlZBOwpAQCAtNTA5LDcgKzQ5OSw2IEBACiAKIAlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiBORElTX1NUQVRVUyBNbG1lSGFyZFRyYW5zbWl0TWdtdFJpbmcoCkBAIC01NDEsNyArNTMwLDcgQEAKIAl7CiAJCS8vIG91dGdvaW5nIGZyYW1lIGFsd2F5cyB3YWtldXAgUEhZIHRvIHByZXZlbnQgZnJhbWUgbG9zdAogCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKLQkJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRlJPTV9UWCk7CiAJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCkBAIC0xMDc2LDcgKzEwNjUsNiBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0jaWZkZWYgUlQyODYwCiAJCQlGcmVlTnVtYmVyW1F1ZUlkeF0gPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CiAKICNpZmRlZiBEQkdfRElBR05PU0UKQEAgLTExMDEsNyArMTA4OSw2IEBACiAJCQkJUlRNUEZyZWVUWERVcG9uVHhEbWFEb25lKHBBZCwgUXVlSWR4KTsKIAkJCQlGcmVlTnVtYmVyW1F1ZUlkeF0gPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CiAJCQl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAkJCS8vIHByb2JlIHRoZSBRdWV1ZSBIZWFkCiAJCQlwUXVldWUgPSAmcEFkLT5UeFN3UXVldWVbUXVlSWR4XTsKQEAgLTExODAsMTIgKzExNjcsMTAgQEAKIAkJCQlTdGF0dXMgPSBTVEFIYXJkVHJhbnNtaXQocEFkLCBwVHhCbGssIFF1ZUlkeCk7CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKLSNpZmRlZiBSVDI4NjAKIAkJCURFUVVFVUVfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpOwogCQkJLy8gc3RhdGljIHJhdGUgYWxzbyBuZWVkIE5JQ1VwZGF0ZUZpZm9TdGFDb3VudGVycygpIGZ1bmN0aW9uLgogCQkJLy9pZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSkKIAkJCQlOSUNVcGRhdGVGaWZvU3RhQ291bnRlcnMocEFkKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJfQogCiAJCVJUMjhYWF9TVE9QX0RFUVVFVUUocEFkLCBRdWVJZHgsIElycUZsYWdzKTsKQEAgLTE3NjQsNyArMTc0OSw2IEBACiB9CiAKIAotI2lmZGVmIFJUMjg2MAogQk9PTEVBTiAgUlRNUEZyZWVUWERVcG9uVHhEbWFEb25lKAogCUlOIFBSVE1QX0FEQVBURVIJcEFkLAogCUlOIFVDSEFSCQkJUXVlSWR4KQpAQCAtMjMwOSw3ICsyMjkzLDYgQEAKIAlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCIgCVJ4U3dSZWFkSWR4IFslZF09IiwgQUMwZnJlZUlkeCkpOwogCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIglwZW5kaW5nLU5ESVM9JWxkXG4iLCBwQWQtPlJhbGlua0NvdW50ZXJzLlBlbmRpbmdOZGlzUGFja2V0Q291bnQpKTsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogLyoKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTI2MzQsOSArMjYxNyw3IEBACiAJCQkJCXBFbnRyeS0+QXV0aE1vZGUgPSBwQWQtPlN0YUNmZy5BdXRoTW9kZTsKIAkJCQkJcEVudHJ5LT5XZXBTdGF0dXMgPSBwQWQtPlN0YUNmZy5XZXBTdGF0dXM7CiAJCQkJCXBFbnRyeS0+UHJpdmFjeUZpbHRlciA9IE5kaXM4MDJfMTFQcml2RmlsdGVyQWNjZXB0QWxsOwotI2lmZGVmIFJUMjg2MAogCQkJCQlBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsIHBFbnRyeS0+YXBpZHgsIChVQ0hBUilpKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAJCQl9CkBAIC0yODIzLDkgKzI4MDQsNyBAQAogCiAJZm9yIChpPTE7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKIAl7Ci0jaWZkZWYgUlQyODYwCiAJCVJUMjhYWF9TVEFfRU5UUllfTUFDX1JFU0VUKHBBZCwgaSk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgPT0gVFJVRSkKIAkgICB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYwppbmRleCA0MTllNTBjLi5mYWU3NDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCkBAIC02MzQsNyArNjM0LDcgQEAKIAl9CiAKICAgICAvLyBPbmNlIGdvIGludG8gdGhpcyBmdW5jdGlvbiwgZGlzYWJsZSB0eCBiZWNhdXNlIGRvbid0IHdhbnQgdG9vIG1hbnkgcGFja2V0cyBpbiBxdWV1ZSB0byBwcmV2ZW50IEhXIHN0b3BzLgotCXBBZC0+YlBDSWNsa09mZkRpc2FibGVUeCA9IFRSVUU7CisJUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCk7CiAKIAlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogCXsKQEAgLTY1MSw3ICs2NTEsNyBAQAogCQkJewogCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRiVFRUaW1lID0gMHgleCAsIGdpdmUgdXAgdGhpcyBzbGVlcC4gXG4iLCBUYlRUVGltZSkpOwogCSAgICAgICAgICAgIE9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwotCSAgICAgICAgICAgIHBBZC0+YlBDSWNsa09mZkRpc2FibGVUeCA9IEZBTFNFOworCQkJCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCk7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJZWxzZQpAQCAtNjg4LDE4ICs2ODgsMjUgQEAKIAlpZiAoaSA+PSA1MCkKIAl7CiAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRNQSBrZWVwcyBidXN5LiAgcmV0dXJuIG9uIFJUMjh4eFBjaUFzaWNSYWRpb09mZiAoKVxuIikpOwotCQlwQWQtPmJQQ0ljbGtPZmZEaXNhYmxlVHggPSBGQUxTRTsKIAkJUlRNUF9JT19SRUFEMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmRG1hQ2ZnLndvcmQpOwogCQlEbWFDZmcuZmllbGQuRW5hYmxlVHhETUEgPSAxOwogCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCBEbWFDZmcud29yZCk7CisJCXBBZC0+Q2hlY2tEbWFCdXN5Q291bnQrKzsKIAkJcmV0dXJuOwogCX0KKwllbHNlCisJeworCQlwQWQtPkNoZWNrRG1hQnVzeUNvdW50ID0gMDsKKwl9CiAKICAgICBSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRik7CiAKICAgICAvLyBTZXQgdG8gMVIuCi0gICAgdGVtcEJCUF9SMyA9IChwQWQtPlN0YUNmZy5CQlBSMyAmIDB4RTcpOwotCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIHRlbXBCQlBfUjMpOworCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID4gMSkKKwl7CisJCXRlbXBCQlBfUjMgPSAocEFkLT5TdGFDZmcuQkJQUjMgJiAweEU3KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgdGVtcEJCUF9SMyk7CisJfQogCiAJLy8gSW4gUmFkaW8gT2ZmLCB3ZSB0dXJuIG9mZiBSRiBjbGssIFNvIG5vdyBuZWVkIHRvIGNhbGwgQVNJQ1N3aXRjaENoYW5uZWwgYWdhaW4uCiAJaWYgKElORlJBX09OKHBBZCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCkBAIC03MTQsOCArNzIxLDE1IEBACiAJCUFzaWNUdXJuT2ZmUkZDbGsocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKIAl9CiAKLSAgICAvLyBXaGVuIFBDSSBjbG9jayBpcyBvZmYsIGRvbid0IHdhbnQgdG8gc2VydmljZSBpbnRlcnJ1cHQuCi0JUlRNUF9JT19XUklURTMyKHBBZCwgSU5UX01BU0tfQ1NSLCBBdXRvV2FrZXVwSW50KTsKKwlpZiAoTGV2ZWwgIT0gUlRNUF9IQUxUKQorCXsKKwkJLy8gQ2hhbmdlIEludGVycnVwdCBiaXRtYXNrLgorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBJTlRfTUFTS19DU1IsIEF1dG9XYWtldXBJbnQpOworCX0KKwllbHNlCisJeworCQlOSUNEaXNhYmxlSW50ZXJydXB0KHBBZCk7CisJfQogCiAgICAgUlRNUF9JT19XUklURTMyKHBBZCwgUlhfQ1JYX0lEWCwgcEFkLT5SeFJpbmcuUnhDcHVJZHgpOwogCS8vIERpc2FibGUgTUFDIFJ4CkBAIC03MjYsNyArNzQwLDggQEAKIAkvLyAgMi4gU2VuZCBTbGVlcCBjb21tYW5kCiAJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX01BSUxCT1hfU1RBVFVTLCAweGZmZmZmZmZmKTsKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fTUFJTEJPWF9DSUQsIDB4ZmZmZmZmZmYpOwotCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgUG93ZXJTYWZlQ0lELCAweGZmLCAweDAwKTsgICAvLyBzZW5kIFBPV0VSLVNBVkUgY29tbWFuZCB0byBNQ1UuIFRpbWVvdXQgdW5pdDo0MHVzLgorCS8vIHNlbmQgUE9XRVItU0FWRSBjb21tYW5kIHRvIE1DVS4gaGlnaC1ieXRlID0gMSBzYXZlIHBvd2VyIGFzIG11Y2ggYXMgcG9zc2libGUuIGhpZ2ggYnl0ZSA9IDAgc2F2ZSBsZXNzIHBvd2VyCisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMwLCBQb3dlclNhZmVDSUQsIDB4ZmYsIDB4MSk7CiAJLy8gIDItMS4gV2FpdCBjb21tYW5kIHN1Y2Nlc3MKIAkvLyBTdGF0dXMgPSAxIDogc3VjY2VzcywgU3RhdHVzID0gMiwgYWxyZWFkeSBzbGVlcCwgU3RhdHVzID0gMywgTWF5YmUgTUFDIGlzIGJ1c3kgc28gY2FuJ3QgZmluaXNoIHRoaXMgdGFzay4KIAlicmMgPSBBc2ljQ2hlY2tDb21tYW5PayhwQWQsIFBvd2VyU2FmZUNJRCk7CkBAIC03MzQsNyArNzQ5LDcgQEAKICAgICBpZiAoYnJjID09IEZBTFNFKQogICAgIHsKICAgICAgICAgLy8gdHJ5IGFnYWluCi0gICAgCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgUG93ZXJTYWZlQ0lELCAweGZmLCAweDAwKTsgICAvLyBzZW5kIFBPV0VSLVNBVkUgY29tbWFuZCB0byBNQ1UuIFRpbWVvdXQgdW5pdDo0MHVzLgorICAgIAlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIFBvd2VyU2FmZUNJRCwgMHhmZiwgMHgwMSk7ICAgLy8gc2VuZCBQT1dFUi1TQVZFIGNvbW1hbmQgdG8gTUNVLiBUaW1lb3V0IHVuaXQ6NDB1cy4KICAgICAJLy9SVE1QdXNlY0RlbGF5KDIwMCk7CiAgICAgCWJyYyA9IEFzaWNDaGVja0NvbW1hbk9rKHBBZCwgUG93ZXJTYWZlQ0lEKTsKICAgICB9CkBAIC03NTksNyArNzc0LDcgQEAKIAlkbwogCXsKIAkJUlRNUF9JT19SRUFEMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmRG1hQ2ZnLndvcmQpOwotCQlpZiAoRG1hQ2ZnLmZpZWxkLlJ4RE1BQnVzeSA9PSAwKQorCQlpZiAoKERtYUNmZy5maWVsZC5SeERNQUJ1c3kgPT0gMCkgJiYgKERtYUNmZy5maWVsZC5UeERNQUJ1c3kgPT0gMCkpCiAJCQlicmVhazsKIAkJUlRNUHVzZWNEZWxheSgyMCk7CiAJCWkrKzsKQEAgLTc2NywxMyArNzgyLDEyIEBACiAKIAlpZiAoaSA+PSA1MCkKIAl7CisJCXBBZC0+Q2hlY2tEbWFCdXN5Q291bnQrKzsKIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRE1BIFJ4IGtlZXBzIGJ1c3kuICBvbiBSVDI4eHhQY2lBc2ljUmFkaW9PZmYgKClcbiIpKTsKIAl9Ci0JLy8gZGlzYWJsZSBETUEgUnguCisJZWxzZQogCXsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmRG1hQ2ZnLndvcmQpOwotCQlEbWFDZmcuZmllbGQuRW5hYmxlUnhETUEgPSAwOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCBEbWFDZmcud29yZCk7CisJCXBBZC0+Q2hlY2tEbWFCdXN5Q291bnQgPSAwOwogCX0KIAogCWlmIChMZXZlbCA9PSBET1QxMVBPV0VSU0FWRSkKQEAgLTc5OSw3ICs4MTMsNyBAQAogCWlmIChMZXZlbCA9PSBSVE1QX0hBTFQpCiAJewogCQlpZiAoKGJyYyA9PSBUUlVFKSAmJiAoaSA8IDUwKSkKLQkJCVJUTVBQQ0llTGlua0N0cmxTZXR0aW5nKHBBZCwgMSk7CisJCQlSVE1QUENJZUxpbmtDdHJsU2V0dGluZyhwQWQsIDApOwogCX0KIAkvLyAgNC4gU2V0IFBDSSBjb25maWd1cmF0aW9uIFNwYWNlIExpbmsgQ29tdHJvbCBmaWVsZHMuICBPbmx5IFJhZGlvIE9mZiBuZWVkcyB0byBjYWxsIHRoaXMgZnVuY3Rpb24KIAllbHNlCkBAIC04MDgsNyArODIyLDcgQEAKIAkJCVJUTVBQQ0llTGlua0N0cmxTZXR0aW5nKHBBZCwgMyk7CiAJfQogCi0gICAgcEFkLT5iUENJY2xrT2ZmRGlzYWJsZVR4ID0gRkFMU0U7CisJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKTsKIH0KIAogCkBAIC04MzUsNyArODQ5LDggQEAKIAl7CiAJICAgIHBBZC0+TWxtZS5iUHNQb2xsVGltZXJSdW5uaW5nID0gRkFMU0U7CiAJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLAkmQ2FuY2VsbGVkKTsKLQkJaWYgKChMZXZlbCA9PSBHVUlSQURJT19PRkYpIHx8IChMZXZlbCA9PSBHVUlfSURMRV9QT1dFUl9TQVZFKSkKKwkJaWYgKChMZXZlbCA9PSBHVUlSQURJT19PRkYpIHx8IChMZXZlbCA9PSBHVUlfSURMRV9QT1dFUl9TQVZFKQorCQl8fCAoUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX1NFVF9QQ0lfQ0xLX09GRl9DT01NQU5EKSkpCiAJCXsKIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUMjh4eFBjaUFzaWNSYWRpb09uICgpXG4iKSk7CiAJCQkvLyAxLiBTZXQgUENJIExpbmsgQ29udHJvbCBpbiBDb25maWd1cmF0aW9uIFNwYWNlLgpAQCAtODQ1LDE1ICs4NjAsMTQgQEAKIAl9CiAKICAgICBwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLQorCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHgzYTgwKTsKIAkvLyAyLiBTZW5kIHdha2UgdXAgY29tbWFuZC4KLQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzEsIFBvd2VyV2FrZUNJRCwgMHgwMCwgMHgwMCk7CisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMxLCBQb3dlcldha2VDSUQsIDB4MDAsIDB4MDIpOwogCiAJLy8gMi0xLiB3YWl0IGNvbW1hbmQgb2suCiAJYnJ2ID0gQXNpY0NoZWNrQ29tbWFuT2socEFkLCBQb3dlcldha2VDSUQpOwogICAgIGlmIChicnYpCiAgICAgewotICAgIAkvL1JUTVBfSU9fV1JJVEUzMihwQWQsIElOVF9NQVNLX0NTUiwgKERFTEFZSU5UTUFTS3xSeElOVCkpOwogICAgIAlOSUNFbmFibGVJbnRlcnJ1cHQocEFkKTsKIAogICAgIAkvLyAzLiBFbmFibGUgVHggRE1BLgpAQCAtODkzLDEzICs5MDcsMTAgQEAKIAogVk9JRCBSVDI4eHhQY2lTdGFBc2ljRm9yY2VXYWtldXAoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQsCi0JSU4gQk9PTEVBTiAgICAgICBiRnJvbVR4KQorCUlOIFVDSEFSICAgIAkgTGV2ZWwpCiB7CiAgICAgQVVUT19XQUtFVVBfU1RSVUMJQXV0b1dha2V1cENmZzsKIAotICAgIGlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV0FLRVVQX05PVykpCiAgICAgewogICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3YWtpbmcgdXAgbm93IVxuIikpOwpAQCAtOTA3LDM4ICs5MTgsNDggQEAKICAgICB9CiAKICAgICBPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV0FLRVVQX05PVyk7CisJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cpOwogCiAgICAgaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkKICAgICB7CiAgICAgICAgIC8vIFN1cHBvcnQgUENJZSBBZHZhbmNlIFBvd2VyIFNhdmUKLSAgICAJaWYgKGJGcm9tVHggPT0gVFJVRSkKKyAgICAJaWYgKCgoTGV2ZWwgPT0gRlJPTV9UWCkgJiYgKHBBZC0+TWxtZS5iUHNQb2xsVGltZXJSdW5uaW5nID09IFRSVUUpKSB8fAorCQkJKExldmVsID09IFJUTVBfSEFMVCkpCiAgICAgCXsKICAgICAgICAgICAgIHBBZC0+TWxtZS5iUHNQb2xsVGltZXJSdW5uaW5nID0gRkFMU0U7CiAgICAgCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZCwgUkVTVE9SRV9XQUtFVVApOwotICAgIAkJUlRNUHVzZWNEZWxheSgzMDAwKTsKKyAgICAJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CiAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PT09QXNpY0ZvcmNlV2FrZXVwPT09YkZyb21UeFxuIikpOwogICAgIAl9CiAKIAkJQXV0b1dha2V1cENmZy53b3JkID0gMDsKIAkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLCBBdXRvV2FrZXVwQ2ZnLndvcmQpOwogCi0gICAgICAgIGlmIChSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWQsIERPVDExUE9XRVJTQVZFKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSW4gUmFkaW8gT2ZmLCB3ZSB0dXJuIG9mZiBSRiBjbGssIFNvIG5vdyBuZWVkIHRvIGNhbGwgQVNJQ1N3aXRjaENoYW5uZWwgYWdhaW4uCi0gICAgICAgIAlpZiAoSU5GUkFfT04ocEFkKSAmJiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKLSAgICAgICAgCQkmJiAocEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkKLSAgICAgICAgCXsKLSAgICAgICAgCQkvLyBNdXN0IHVzaW5nIDQwTUh6LgotICAgICAgICAJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKLSAgICAgICAgCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7Ci0gICAgICAgIAl9Ci0gICAgICAgIAllbHNlCi0gICAgICAgIAl7Ci0gICAgICAgIAkJLy8gTXVzdCB1c2luZyAyME1Iei4KLSAgICAgICAgCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKLSAgICAgICAgCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKLSAgICAgICAgCX0KLSAgICAgICAgfQorCQkvLyBJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIEhhbHQuIEFMV0FZUyBmb3JjZSB3YWtldXAhISEKKwkJaWYgKExldmVsID09IFJUTVBfSEFMVCkKKwkJeworCQkJUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkLCBSVE1QX0hBTFQpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKFJUMjh4eFBjaUFzaWNSYWRpb09uKHBBZCwgRE9UMTFQT1dFUlNBVkUpKQorCQkJeworCQkJCS8vIEluIFJhZGlvIE9mZiwgd2UgdHVybiBvZmYgUkYgY2xrLCBTbyBub3cgbmVlZCB0byBjYWxsIEFTSUNTd2l0Y2hDaGFubmVsIGFnYWluLgorCQkJCWlmIChJTkZSQV9PTihwQWQpICYmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJCQkmJiAocEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkKKwkJCQl7CisJCQkJCS8vIE11c3QgdXNpbmcgNDBNSHouCisJCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBNdXN0IHVzaW5nIDIwTUh6LgorCQkJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQkJfQorCQkJfQorCQl9CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xMTIyLDYgKzExNDMsNyBAQAogICAgIHsKICAgICAJTklDUmVzZXRGcm9tRXJyb3IocEFkKTsKIAorICAgIAkvKgogICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkspOwogICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkUpOwogICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVkkpOwpAQCAtMTEyOSw2ICsxMTUxLDcgQEAKICAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0hDQ0EpOwogICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfTUdNVCk7CiAgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9SWCk7CisJCSovCiAKICAgICAJLy8gRW5hYmxlIFR4L1J4CiAgICAgCVJUTVBFbmFibGVSeFR4KHBBZCk7CkBAIC0xMTYyLDYgKzExODUsMTIgQEAKICAgICBXUERNQV9HTE9fQ0ZHX1NUUlVDCUdsb0NmZzsKIAlVSU5UMzIJaTsKIAorCWlmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiLS0+TWxtZVJhZGlvT2ZmKCkgcmV0dXJuIG9uIGJSYWRpbyA9PSBUUlVFOyBcbiIpKTsKKwkJcmV0dXJuOworCX0KKwogICAgIGlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKSkKICAgICAJcmV0dXJuOwogCkBAIC0xMTY5LDEzICsxMTk4LDEyIEBACiAKIAkvLyBTZXQgTEVECiAJUlRNUFNldExFRChwQWQsIExFRF9SQURJT19PRkYpOwotCS8vIFNldCBSYWRpbyBvZmYgZmxhZwotCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRik7CiAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKIAlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQogICAgIHsKICAgICAJQk9PTEVBTgkJQ2FuY2VsbGVkOworCiAgICAgCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQogICAgIAl7CiAJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsICZDYW5jZWxsZWQpOwpAQCAtMTE4NSw2ICsxMjEzLDE1IEBACiAJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEJPT0xFQU4gQ2FuY2VsbGVkOworCisJCQkvLyBBbHdheXMgcmFkaW8gb24gc2luY2UgdGhlIE5JQyBuZWVkcyB0byBzZXQgdGhlIE1DVSBjb21tYW5kIChMRURfUkFESU9fT0ZGKS4NCisJCQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmIA0KKwkJCSAgICAgKElETEVfT04ocEFkKSkgJiYgDQorCQkJICAgICAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSkpDQorCQkJew0KKwkJCQlSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWQsIEdVSV9JRExFX1BPV0VSX1NBVkUpOw0KKwkJCX0KKwogICAgICAgICAgICAgcEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcgPSBGQUxTRTsKICAgICAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLAkmQ2FuY2VsbGVkKTsKIAkgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlJhZGlvT25PZmZUaW1lciwJJkNhbmNlbGxlZCk7CkBAIC0xMTk3LDkgKzEyMzQsMjYgQEAKICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgLy8gQ2xlYW4gdXAgb2xkIGJzcyB0YWJsZQogICAgICAgICBCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7CisKKwkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsKKyAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JFKTsKKyAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZJKTsKKyAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZPKTsKKyAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0hDQ0EpOworICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfTUdNVCk7CisgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9SWCk7CisKKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkKKwkJeworCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUmFkaW9Pbk9mZlRpbWVyLCA1MDApOworCQkJcmV0dXJuOworCQl9CiAgICAgfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCisJLy8gU2V0IFJhZGlvIG9mZiBmbGFnCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsKKwogCS8vIERpc2FibGUgVHgvUnggRE1BCiAJUlRNUF9JT19SRUFEMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmR2xvQ2ZnLndvcmQpOwkgICAvLyBkaXNhYmxlIERNQQogCUdsb0NmZy5maWVsZC5FbmFibGVUeERNQSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwppbmRleCBkZDkyYWM2Li5jM2UxMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKQEAgLTgxNCw3ICs4MTQsNiBAQAogCUlOCVBSVE1QX0FEQVBURVIJcEFkLAogCUlOCVBVQ0hBUgkJCWFyZykKIHsKLSNpZmRlZiBSVDI4NjAKIAlJTlQgaSwgUXVlSWR4PTA7CiAJUFJUMjhYWF9SWERfU1RSVUMgcFJ4RDsKICAgICBQVFhEX1NUUlVDIHBUeEQ7CkBAIC04NDUsNyArODQ0LDYgQEAKIAkgICAgaGV4X2R1bXAoIlJ4IERlc2NyaXB0b3IiLCAoY2hhciAqKXBSeEQsIDE2KTsKIAkJcHJpbnRrKCJwUnhELT5ERE9ORSA9ICV4XG4iLCBwUnhELT5ERE9ORSk7CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJcmV0dXJuIFRSVUU7CiB9CkBAIC0xODAzLDkgKzE4MDEsNyBAQAogCX0KIAogCS8vIEZvciBrZXkgaW5kZXggYW5kIGV4dCBJViBiaXQsIHNvIG9ubHkgbmVlZCB0byB1cGRhdGUgdGhlIHBvc2l0aW9uKG9mZnNldCszKS4KLSNpZmRlZiBSVDI4NjAKIAlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCszLCBJVkVJVik7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnk6IFdDSUQgIyVkLCBLZXlJbmRleCAjJWQsIEFsZz0lc1xuIixXY2lkLCBLZXlJZHgsIENpcGhlck5hbWVbQ2lwaGVyQWxnXSkpOwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiCVdDSURBdHRyaSA9IDB4JXggXG4iLCAgV0NJREF0dHJpKSk7CkBAIC0yODI3LDkgKzI4MjMsNyBAQAogCiAJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOwogCi0jaWZkZWYgUlQyODYwCiAJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAl7CiAJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkNhbiBub3Qgc3dpdGNoIG9wZXJhdGUgbW9kZSBvbiBpbnRlcmZhY2UgdXAgISEgXG4iKSk7CiAJCXJldHVybiBGQUxTRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc3luYy5jCmluZGV4IDQwZTQxMDkuLmQyOWUwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3N5bmMuYwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAJCXsKIAkJLy8gQkJQIGFuZCBSRiBhcmUgbm90IGFjY2Vzc2libGUgaW4gUFMgbW9kZSwgd2UgaGFzIHRvIHdha2UgdGhlbSB1cCBmaXJzdAogCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKLQkJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworCQkJCUFzaWNGb3JjZVdha2V1cChwQWQsIEZST01fVFgpOwogCiAJCQkvLyBsZWF2ZSBQU00gZHVyaW5nIHNjYW5uaW5nLiBvdGhlcndpc2Ugd2UgbWF5IGxvc3QgUHJvYmVSc3AgJiBCRUFDT04KIAkJCWlmIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMKaW5kZXggODFjMzMyYS4uNjliYWY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYwpAQCAtMzksOCArMzksMTAgQEAKIC8vIFdQQSBPVUkKIFVDSEFSCQlPVUlfV1BBX05PTkVfQUtNWzRdCQk9IHsweDAwLCAweDUwLCAweEYyLCAweDAwfTsKIFVDSEFSICAgICAgIE9VSV9XUEFfVkVSU0lPTls0XSAgICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDF9OworVUNIQVIgICAgICAgT1VJX1dQQV9XRVA0MFs0XSAgICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDF9OwogVUNIQVIgICAgICAgT1VJX1dQQV9US0lQWzRdICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDAyfTsKIFVDSEFSICAgICAgIE9VSV9XUEFfQ0NNUFs0XSAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwNH07CitVQ0hBUiAgICAgICBPVUlfV1BBX1dFUDEwNFs0XSAgICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDV9OwogVUNIQVIgICAgICAgT1VJX1dQQV84MDIxWF9BS01bNF0JPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMX07CiBVQ0hBUiAgICAgICBPVUlfV1BBX1BTS19BS01bNF0gICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDAyfTsKIC8vIFdQQTIgT1VJCkBAIC00OSw2ICs1MSw3IEBACiBVQ0hBUiAgICAgICBPVUlfV1BBMl9DQ01QWzRdICAgICAgICA9IHsweDAwLCAweDBGLCAweEFDLCAweDA0fTsKIFVDSEFSICAgICAgIE9VSV9XUEEyXzgwMjFYX0FLTVs0XSAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDF9OwogVUNIQVIgICAgICAgT1VJX1dQQTJfUFNLX0FLTVs0XSAgIAk9IHsweDAwLCAweDBGLCAweEFDLCAweDAyfTsKK1VDSEFSICAgICAgIE9VSV9XUEEyX1dFUDEwNFs0XSAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDV9OwogLy8gTVNBIE9VSQogVUNIQVIgICAJT1VJX01TQV84MDIxWF9BS01bNF0gICAgPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwNX07CQkvLyBOb3QgeWV0IGZpbmFsIC0gSUVFRSA4MDIuMTFzLUQxLjA2CiBVQ0hBUiAgIAlPVUlfTVNBX1BTS19BS01bNF0gICAJPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwNn07CQkvLyBOb3QgeWV0IGZpbmFsIC0gSUVFRSA4MDIuMTFzLUQxLjA2CkBAIC0zNjcsNiArMzcwLDI0IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmCisJCQkocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgJiYKKwkJCShwQWQtPlN0YUNmZy5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSkKKwkJeworCQkJVUlOVCBHcm91cENpcGhlciA9IHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyOworCQkJc3dpdGNoKEdyb3VwQ2lwaGVyKQorCQkJeworCQkJCWNhc2UgTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkOgorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQTJfV0VQNDAsIDQpOworCQkJCQlicmVhazsKKwkJCQljYXNlIE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQ6CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBMl9XRVAxMDQsIDQpOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCiAJCS8vIHN3YXAgZm9yIGJpZy1lbmRpYW4gcGxhdGZvcm0KIAkJcFJzbmllX2NpcGhlci0+dmVyc2lvbiA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnZlcnNpb24pOwogCSAgICBwUnNuaWVfY2lwaGVyLT51Y291bnQgPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT51Y291bnQpOwpAQCAtNDI3LDExICs0NDgsMjggQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYKKwkJCShwQWQtPlN0YUNmZy5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJgorCQkJKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKQorCQl7CisJCQlVSU5UIEdyb3VwQ2lwaGVyID0gcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXI7CisJCQlzd2l0Y2goR3JvdXBDaXBoZXIpCisJCQl7CisJCQkJY2FzZSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQ6CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBX1dFUDQwLCA0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkOgorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQV9XRVAxMDQsIDQpOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCiAJCS8vIHN3YXAgZm9yIGJpZy1lbmRpYW4gcGxhdGZvcm0KIAkJcFJzbmllX2NpcGhlci0+dmVyc2lvbiA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnZlcnNpb24pOwogCSAgICBwUnNuaWVfY2lwaGVyLT51Y291bnQgPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT51Y291bnQpOwogCX0KLQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vbWxtZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vbWxtZS5jCmluZGV4IDIyOTc0NzAuLmMwMGY5YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9tbG1lLmMKQEAgLTUyNyw3ICs1MjcsNiBAQAogCiAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKLSNpZmRlZiBSVDI4NjAKIAkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKIAkJewogCSAgICAgICAgaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkKQEAgLTUzNyw3ICs1MzYsNiBAQAogCSAgICAJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lLlJhZGlvT25PZmZUaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKFJhZGlvT25FeGVjKSwgcEFkLCBGQUxTRSk7CiAJICAgICAgICB9CiAJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogCX0gd2hpbGUgKEZBTFNFKTsKQEAgLTcxMSwxMyArNzA5LDExIEBACiAJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwJCSZDYW5jZWxsZWQpOwogCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwJCSZDYW5jZWxsZWQpOwogCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsCQkmQ2FuY2VsbGVkKTsKLSNpZmRlZiBSVDI4NjAKIAkgICAgaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkKIAkgICAgewogCSAgIAkgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsCQkmQ2FuY2VsbGVkKTsKIAkJICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlJhZGlvT25PZmZUaW1lciwJCSZDYW5jZWxsZWQpOwogCQl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKICNpZmRlZiBRT1NfRExTX1NVUFBPUlQKIAkJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKQEAgLTgwOCwyMSArODA0LDM0IEBACiAJVUxPTkcJCQlUeFRvdGFsQ250OwogCVBSVE1QX0FEQVBURVIJcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKIAorCS8vQmFyb24gMjAwOC8wNy8xMAorCS8vcHJpbnRrKCJCYXJvbl9UZXN0Olx0JXMiLCBSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cykpOworCS8vSWYgdGhlIFNUQSBzZWN1cml0eSBzZXR0aW5nIGlzIE9QRU4gb3IgV0VQLCBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSAwLgorCS8vSWYgdGhlIFNUQSBzZWN1cml0eSBzZXR0aW5nIGlzIFdQQVBTSyBvciBXUEEyUFNLLCBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSAxLgorCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1czwyKQorCXsKKwkJcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gMDsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gMTsKKwl9CisKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKLSNpZmRlZiBSVDI4NjAKIAlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQogCXsKIAkgICAgLy8gSWYgSGFyZHdhcmUgY29udHJvbGxlZCBSYWRpbyBlbmFibGVkLCB3ZSBoYXZlIHRvIGNoZWNrIEdQSU8gcGluMiBldmVyeSAyIHNlY29uZC4KIAkJLy8gTW92ZSBjb2RlIHRvIGhlcmUsIGJlY2F1c2UgZm9sbG93aW5nIGNvZGUgd2lsbCByZXR1cm4gd2hlbiByYWRpbyBpcyBvZmYKLQkJaWYgKChwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCAlIChNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAqIDIpID09IDApICYmIChwQWQtPlN0YUNmZy5iSGFyZHdhcmVSYWRpbyA9PSBUUlVFKSAmJgorCQlpZiAoKHBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kICUgKE1MTUVfVEFTS19FWEVDX01VTFRJUExFICogMikgPT0gMCkgJiYKKwkJCShwQWQtPlN0YUNmZy5iSGFyZHdhcmVSYWRpbyA9PSBUUlVFKSAmJgorCQkJKFJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkgJiYKIAkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSAmJgotCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpICYmCi0JCQkocEFkLT5iUENJY2xrT2ZmID09IEZBTFNFKSkKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSkKIAkJewogCQkJVUlOVDMyCQkJCWRhdGEgPSAwOwogCiAJCQkvLyBSZWFkIEdQSU8gcGluMiBhcyBIYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvIHN0YXRlCi0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIEdQSU9fQ1RSTF9DRkcsICZkYXRhKTsKKwkJCVJUTVBfSU9fRk9SQ0VfUkVBRDMyKHBBZCwgR1BJT19DVFJMX0NGRywgJmRhdGEpOwogCQkJaWYgKGRhdGEgJiAweDA0KQogCQkJewogCQkJCXBBZC0+U3RhQ2ZnLmJId1JhZGlvID0gVFJVRTsKQEAgLTg0OSw3ICs4NTgsNiBAQAogCQkJfQogCQl9CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiAJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCkBAIC04NjAsNiArODY4LDQ1IEBACiAJCQkJCQkJCWZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpKSkpCiAJCXJldHVybjsKIAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAoKHBBZC0+UmFsaW5rQ291bnRlcnMuTGFzdFJlY2VpdmVkQnl0ZUNvdW50ID09IHBBZC0+UmFsaW5rQ291bnRlcnMuUmVjZWl2ZWRCeXRlQ291bnQpICYmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkpCisJCXsKKwkJCS8vIElmIFJlY2VpdmVCeXRlQ291bnQgZG9lc24ndCBjaGFuZ2UsICBpbmNyZWFzZSBTYW1lUnhCeXRlQ291bnQgYnkgMS4KKwkJCXBBZC0+U2FtZVJ4Qnl0ZUNvdW50Kys7CisJCX0KKwkJZWxzZQorCQkJcEFkLT5TYW1lUnhCeXRlQ291bnQgPSAwOworCisJCS8vIElmIGFmdGVyIEJCUCwgc3RpbGwgbm90IHdvcmsuLi5uZWVkIHRvIGNoZWNrIHRvIHJlc2V0IFBCRiZNQUMuCisJCWlmIChwQWQtPlNhbWVSeEJ5dGVDb3VudCA9PSA3MDIpCisJCXsKKwkJCXBBZC0+U2FtZVJ4Qnl0ZUNvdW50ID0gMDsKKwkJCUFzaWNSZXNldFBCRihwQWQpOworCQkJQXNpY1Jlc2V0TUFDKHBBZCk7CisJCX0KKworCQkvLyBJZiBTYW1lUnhCeXRlQ291bnQga2VlcHMgaGFwcGVucyBmb3IgMiBzZWNvbmQgaW4gaW5mcmEgbW9kZSwgb3IgZm9yIDYwIHNlY29uZHMgaW4gaWRsZSBtb2RlLgorCQlpZiAoKChJTkZSQV9PTihwQWQpKSAmJiAocEFkLT5TYW1lUnhCeXRlQ291bnQgPiAyMCkpIHx8ICgoSURMRV9PTihwQWQpKSAmJiAocEFkLT5TYW1lUnhCeXRlQ291bnQgPiA2MDApKSkKKwkJeworCQkJaWYgKChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkgJiYgKHBBZC0+U2FtZVJ4Qnl0ZUNvdW50IDwgNzAwKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+ICBTYW1lUnhCeXRlQ291bnQgPSAlbHUgISEhISEhISEhISEhISEhIFxuIiwgcEFkLT5TYW1lUnhCeXRlQ291bnQpKTsKKwkJCQlwQWQtPlNhbWVSeEJ5dGVDb3VudCA9IDcwMDsKKwkJCQlBc2ljUmVzZXRCQlAocEFkKTsKKwkJCX0KKwkJfQorCisJCS8vIFVwZGF0ZSBsYXN0UmVjZWl2ZUJ5dGVDb3VudC4KKwkJcEFkLT5SYWxpbmtDb3VudGVycy5MYXN0UmVjZWl2ZWRCeXRlQ291bnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLlJlY2VpdmVkQnl0ZUNvdW50OworCisJCWlmICgocEFkLT5DaGVja0RtYUJ1c3lDb3VudCA+IDMpICYmIChJRExFX09OKHBBZCkpKQorCQl7CisJCQlwQWQtPkNoZWNrRG1hQnVzeUNvdW50ID0gMDsKKwkJCUFzaWNSZXNldEZyb21ETUFCdXN5KHBBZCk7CisJCX0KKwl9CisKIAlSVDI4WFhfTUxNRV9QUkVfU0FOSVRZX0NIRUNLKHBBZCk7CiAKICNpZmRlZiBSQUxJTktfQVRFCkBAIC0xMDIyLDkgKzEwNjksNyBAQAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQogCQl7Ci0jaWZkZWYgUlQyODYwCiAJCQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSAmJiAocEFkLT5iUENJY2xrT2ZmID09IEZBTFNFKSkKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCXsKIAkJCQkvLyBXaGVuIEFkaG9jIGJlYWNvbiBpcyBlbmFibGVkIGFuZCBSVFMvQ1RTIGlzIGVuYWJsZWQsIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgaGFyZHdhcmUgTUFDIEZTTSB3aWxsIHJ1biBpbnRvIGEgZGVhZGxvY2sKIAkJCQkvLyBhbmQgc2VuZGluZyBDVFMtdG8tc2VsZiBvdmVyIGFuZCBvdmVyLgpAQCAtMTA4MSw2ICsxMTI2LDE5IEBACiAgICAgCQlwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9IEZBTFNFOwogICAgIH0KIAorCS8vQmFyb24gMjAwOC8wNy8xMAorCS8vcHJpbnRrKCJCYXJvbl9UZXN0Olx0JXMiLCBSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cykpOworCS8vSWYgdGhlIFNUQSBzZWN1cml0eSBzZXR0aW5nIGlzIE9QRU4gb3IgV0VQLCBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSAwLgorCS8vSWYgdGhlIFNUQSBzZWN1cml0eSBzZXR0aW5nIGlzIFdQQVBTSyBvciBXUEEyUFNLLCBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSAxLgorCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1czwyKQorCXsKKwkJcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gMDsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gMTsKKwl9CisKICAgICBpZiAoKHBBZC0+UHJlTWVkaWFTdGF0ZSAhPSBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSkgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KSkKIAl7CiAJCWlmIChwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9PSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZCkKQEAgLTEwOTAsNiArMTE0OCwxNSBAQAogCQlwQWQtPlByZU1lZGlhU3RhdGUgPSBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZTsKIAl9CiAKKwlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmIChJRExFX09OKHBBZCkpICYmCisgICAgICAgIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpICYmCisJCShwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID09IFNZTkNfSURMRSkgJiYKKwkJKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKSAmJgorCQkoUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApKSAmJgorCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRikpKQorCXsKKwkJUlQyOHh4UGNpQXNpY1JhZGlvT2ZmKHBBZCwgR1VJX0lETEVfUE9XRVJfU0FWRSwgMCk7CisJfQogCiAKIApAQCAtMjc4MSw3ICsyODQ4LDcgQEAKIAlpZiAoSU5GUkFfT04ocEFkKSAmJgogCQkoUG93ZXJNb2RlICE9IE5kaXM4MDJfMTFQb3dlck1vZGVDQU0pICYmCiAJCShwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX0FDVElWRSkgJiYKLQkJKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKSkKKwkJUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCkpCiAJewogCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZwQWQtPk1sbWUuTGFzdFNlbmROVUxMcHNtVGltZSk7CiAJCXBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudFNpbmNlTGFzdE5VTEwgPSAwOwpAQCAtNDA2NSw3ICs0MTMyLDkgQEAKIAkJCQkJCQljb250aW51ZTsKIAogCQkJCQkvLyBjaGVjayBncm91cCBjaXBoZXIKLQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyKQorCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyKSAmJgorCQkJCQkJKHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZCkgJiYKKwkJCQkJCShwSW5Cc3MtPldQQS5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKSkKIAkJCQkJCWNvbnRpbnVlOwogCiAJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKQEAgLTQwODQsNyArNDE1Myw5IEBACiAJCQkJCQkJY29udGludWU7CiAKIAkJCQkJLy8gY2hlY2sgZ3JvdXAgY2lwaGVyCi0JCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIpCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwgcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpICYmCisJCQkJCQkocEluQnNzLT5XUEEyLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZCkgJiYKKwkJCQkJCShwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZCkpCiAJCQkJCQljb250aW51ZTsKIAogCQkJCQkvLyBjaGVjayBwYWlyd2lzZSBjaXBoZXIsIHNraXAgaWYgbm9uZSBtYXRjaGVkCkBAIC00MzcxLDggKzQ0NDIsMTAgQEAKIAkJCQlzd2l0Y2ggKCpwVG1wKQogCQkJCXsKIAkJCQkJY2FzZSAxOgotCQkJCQljYXNlIDU6CS8vIEFsdGhvdWdoIFdFUCBpcyBub3QgYWxsb3dlZCBpbiBXUEEgcmVsYXRlZCBhdXRoIG1vZGUsIHdlIHBhcnNlIGl0IGFueXdheQotCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDU6CisJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkOwogCQkJCQkJYnJlYWs7CiAJCQkJCWNhc2UgMjoKIAkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CkBAIC00NDg5LDggKzQ1NjIsMTAgQEAKIAkJCQlzd2l0Y2ggKHBDaXBoZXItPlR5cGUpCiAJCQkJewogCQkJCQljYXNlIDE6Ci0JCQkJCWNhc2UgNToJLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5Ci0JCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQ7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA1OgorCQkJCQkJcEJzcy0+V1BBMi5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQ7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSAyOgogCQkJCQkJcEJzcy0+V1BBMi5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CkBAIC00OTUzLDE2ICs1MDI4LDEzIEBACiBWT0lECU1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lKAogCUlOCVBSVE1QX0FEQVBURVIJcEFkKQogewotI2lmZGVmIFJUMjg2MAogCU1MTUVfUVVFVUVfRUxFTQkJKkVsZW0gPSBOVUxMOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogCUJPT0xFQU4JCQkJQ2FuY2VsbGVkOwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUgXG4iKSk7CiAKLSNpZmRlZiBSVDI4NjAKIAlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwogCWlmKHBBZC0+TWxtZS5iUnVubmluZykKIAl7CkBAIC00OTkwLDcgKzUwNjIsNiBAQAogCQkJREJHUFJJTlRfRVJSKCgiTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmU6IE1sbWVRdWV1ZSBlbXB0eVxuIikpOwogCQl9CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiAJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKQEAgLTUwMzksMTIgKzUxMTAsMTAgQEAKIAl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKLSNpZmRlZiBSVDI4NjAKIAkvLyBSZW1vdmUgcnVubmluZyBzdGF0ZQogCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CiAJcEFkLT5NbG1lLmJSdW5uaW5nID0gRkFMU0U7CiAJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIH0KIAogLyohIFxicmllZgl0ZXN0IGlmIHRoZSBNTE1FIFF1ZXVlIGlzIGVtcHR5CkBAIC02MTQ5LDYgKzYyMTgsMTIgQEAKIAlVTE9ORwkJVHhQd3JbNV07CiAJQ0hBUgkJVmFsdWU7CiAKKwlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKQorCQl8fCAocEFkLT5iUENJY2xrT2ZmID09IFRSVUUpCisJCXx8IFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRikKKwkJfHwgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJcmV0dXJuOworCiAJaWYgKHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9PSBCV180MCkKIAl7CiAJCWlmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA+IDE0KQpAQCAtNjQ5MywxMCArNjU2OCwxMCBAQAogICovCiBWT0lEIEFzaWNGb3JjZVdha2V1cCgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKLQlJTiBCT09MRUFOICAgIGJGcm9tVHgpCisJSU4gVUNIQVIgICAgCSBMZXZlbCkKIHsKICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gQXNpY0ZvcmNlV2FrZXVwIFxuIikpOwotICAgIFJUMjhYWF9TVEFfRk9SQ0VfV0FLRVVQKHBBZCwgYkZyb21UeCk7CisgICAgUlQyOFhYX1NUQV9GT1JDRV9XQUtFVVAocEFkLCBMZXZlbCk7CiB9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAvKgpAQCAtNjcxMCw3ICs2Nzg1LDYgQEAKIAljc3I5LmZpZWxkLmJUc2ZUaWNraW5nID0gMDsKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBCQ05fVElNRV9DRkcsIGNzcjkud29yZCk7CiAKLSNpZmRlZiBSVDI4NjAKIAkvLyBtb3ZlIEJFQUNPTiBUWEQgYW5kIGZyYW1lIGNvbnRlbnQgdG8gb24tY2hpcCBtZW1vcnkKIAlwdHIgPSAoUFVDSEFSKSZwQWQtPkJlYWNvblR4V0k7CiAJZm9yIChpPTA7IGk8VFhXSV9TSVpFOyBpKz00KSAgLy8gMTYtYnl0ZSBUWFdJIGZpZWxkCkBAIC02NzI4LDcgKzY4MDIsNiBAQAogCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBIV19CRUFDT05fQkFTRTAgKyBUWFdJX1NJWkUgKyBpLCBsb25ncHRyKTsKIAkJcHRyICs9NDsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAkvLyBzdGFydCBzZW5kaW5nIEJFQUNPTgogCWNzcjkuZmllbGQuQmVhY29uSW50ZXJ2YWwgPSBwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPDwgNDsgLy8gQVNJQyByZWdpc3RlciBpbiB1bml0cyBvZiAxLzE2IFRVCkBAIC03MDk3LDkgKzcxNzAsNyBAQAogewogCVVMT05HIG9mZnNldDsgLy8sIGNzcjA7CiAJU0hBUkVES0VZX01PREVfU1RSVUMgY3NyMTsKLSNpZmRlZiBSVDI4NjAKIAlJTlQgICBpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNpY0FkZFNoYXJlZEtleUVudHJ5IEJzc0luZGV4PSVkLCBLZXlJZHg9JWRcbiIsIEJzc0luZGV4LEtleUlkeCkpOwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzEyMSw3ICs3MTkyLDYgQEAKIAkvLwogCS8vIGZpbGwga2V5IG1hdGVyaWFsIC0ga2V5ICsgVFggTUlDICsgUlggTUlDCiAJLy8KLSNpZmRlZiBSVDI4NjAKIAlvZmZzZXQgPSBTSEFSRURfS0VZX1RBQkxFX0JBU0UgKyAoNCpCc3NJbmRleCArIEtleUlkeCkqSFdfS0VZX0VOVFJZX1NJWkU7CiAJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9TSEFSRV9LRVk7IGkrKykKIAl7CkBAIC03MTQ1LDcgKzcyMTUsNiBAQAogCQkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyBpLCBwUnhNaWNbaV0pOwogCQl9CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAkvLwpAQCAtNzMyMCw5ICs3Mzg5LDcgQEAKIAlQVUNIQVIJCXBUeHRzYyA9IHBDaXBoZXJLZXktPlR4VHNjOwogCVVDSEFSCQlDaXBoZXJBbGcgPSBwQ2lwaGVyS2V5LT5DaXBoZXJBbGc7CiAJU0hBUkVES0VZX01PREVfU1RSVUMgY3NyMTsKLSNpZmRlZiBSVDI4NjAKIAlVQ0hBUgkJaTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBBc2ljQWRkS2V5RW50cnlcbiIpKTsKIAkvLwpAQCAtNzMzNyw3ICs3NDA0LDYgQEAKIAkvLyAyLikgU2V0IEtleSB0byBBc2ljCiAJLy8KIAkvL2ZvciAoaSA9IDA7IGkgPCBLZXlMZW47IGkrKykKLSNpZmRlZiBSVDI4NjAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9QRUVSX0tFWTsgaSsrKQogCXsKIAkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyBpLCBwS2V5W2ldKTsKQEAgLTczNjMsNyArNzQyOSw2IEBACiAJCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBSeE1pY1tpXSk7CiAJCX0KIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCS8vCkBAIC03MzcyLDcgKzc0MzcsNiBAQAogCS8vCiAJaWYgKGJUeEtleSkKIAl7Ci0jaWZkZWYgUlQyODYwCiAJCW9mZnNldCA9IE1BQ19JVkVJVl9UQUJMRV9CQVNFICsgKFdDSUQgKiBIV19JVkVJVl9FTlRSWV9TSVpFKTsKIAkJLy8KIAkJLy8gV3JpdGUgSVYKQEAgLTczOTUsNyArNzQ1OSw2IEBACiAJCXsKIAkJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0ICsgaSwgcFR4dHNjW2kgKyAyXSk7CiAJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlBc2ljVXBkYXRlV0NJREF0dHJpYnV0ZShwQWQsIFdDSUQsIEJzc0luZGV4LCBDaXBoZXJBbGcsIGJVc2VQYWlyZXdpc2VLZXlUYWJsZSk7CiAJfQpAQCAtNzQ2MSwxMiArNzUyNCwxMCBAQAogCiAJLy8gRUtFWQogCW9mZnNldCA9IFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICsgKFdDSUQgKiBIV19LRVlfRU5UUllfU0laRSk7Ci0jaWZkZWYgUlQyODYwCiAJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9QRUVSX0tFWTsgaSsrKQogCXsKIAkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyBpLCBwS2V5W2ldKTsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9QRUVSX0tFWTsgaSs9NCkKIAl7CiAJCVVJTlQzMiBWYWx1ZTsKQEAgLTc0NzgsMjIgKzc1MzksMTggQEAKIAkvLyAgTUlDIEtFWQogCWlmIChwVHhNaWMpCiAJewotI2lmZGVmIFJUMjg2MAogCQlmb3IgKGk9MDsgaTw4OyBpKyspCiAJCXsKIAkJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0K2ksIHBUeE1pY1tpXSk7CiAJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAl9CiAJb2Zmc2V0ICs9IDg7CiAJaWYgKHBSeE1pYykKIAl7Ci0jaWZkZWYgUlQyODYwCiAJCWZvciAoaT0wOyBpPDg7IGkrKykKIAkJewogCQkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQraSwgcFJ4TWljW2ldKTsKIAkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCX0KIAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnk6IFdDSUQgIyVkIEFsZz0lc1xuIixXQ0lELCBDaXBoZXJOYW1lW0NpcGhlckFsZ10pKTsKQEAgLTc1NDIsMTEgKzc1OTksOSBAQAogCUhPU1RfQ01EX0NTUl9TVFJVQwlIMk1DbWQ7CiAJSDJNX01BSUxCT1hfU1RSVUMJSDJNTWFpbGJveDsKIAlVTE9ORwkJCQlpID0gMDsKLSNpZmRlZiBSVDI4NjAKICNpZmRlZiBSQUxJTktfQVRFCiAJc3RhdGljIFVJTlQzMiBqID0gMDsKICNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJZG8KIAl7CiAJCVJUTVBfSU9fUkVBRDMyKHBBZCwgSDJNX01BSUxCT1hfQ1NSLCAmSDJNTWFpbGJveC53b3JkKTsKQEAgLTc1NTgsNyArNzYxMyw2IEBACiAKIAlpZiAoaSA+PSAxMDApCiAJewotI2lmZGVmIFJUMjg2MAogI2lmZGVmIFJBTElOS19BVEUKIAkJaWYgKHBBZC0+YXRlLmJGV0xvYWRpbmcgPT0gVFJVRSkKIAkJewpAQCAtNzU4MywxNCArNzYzNywzMyBAQAogCQl9CiAJCWVsc2UKICNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCXsKKwkJCVVJTlQzMiBEYXRhOworCisJCQkvLyBSZXNldCBETUEKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX1NZU19DVFJMLCAmRGF0YSk7CisJCQlEYXRhIHw9IDB4MjsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgRGF0YSk7CisKKwkJCS8vIEFmdGVyIFJlc2V0IERNQSwgRE1BIGluZGV4IHdpbGwgYmVjb21lIFplcm8uIFNvIERyaXZlciBuZWVkIHRvIHJlc2V0IGFsbCByaW5nIGluZGV4cyB0b28uCisJCQkvLyBSZXNldCBETUEvQ1BVIHJpbmcgaW5kZXgKKwkJCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CSyk7CisJCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkUpOworCQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZJKTsKKwkJCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19WTyk7CisJCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfSENDQSk7CisJCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfTUdNVCk7CisJCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfUlgpOworCisJCQkvLyBDbGVhciBSZXNldAorCQkJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZEYXRhKTsKKwkJCURhdGEgJj0gMHhmZmZmZmZmZDsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgRGF0YSk7CiAJCURCR1BSSU5UX0VSUigoIkgyTV9NQUlMQk9YIHN0aWxsIGhvbGQgYnkgTUNVLiBjb21tYW5kIGZhaWxcbiIpKTsKIAkJfQotCQlyZXR1cm4gRkFMU0U7CisJCS8vcmV0dXJuIEZBTFNFOwogCX0KIAotI2lmZGVmIFJUMjg2MAogI2lmZGVmIFJBTElOS19BVEUKIAllbHNlIGlmIChwQWQtPmF0ZS5iRldMb2FkaW5nID09IFRSVUUpCiAJewpAQCAtNzYwMCw3ICs3NjczLDYgQEAKIAkJaiA9IDA7CiAJfQogI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCUgyTU1haWxib3guZmllbGQuT3duZXIJICA9IDE7CSAgIC8vIHBhc3Mgb3duZXJzaGlwIHRvIE1DVQogCUgyTU1haWxib3guZmllbGQuQ21kVG9rZW4gPSBUb2tlbjsKQEAgLTc2MTksNyArNzY5MSw2IEBACiAJcmV0dXJuIFRSVUU7CiB9CiAKLSNpZmRlZiBSVDI4NjAKIEJPT0xFQU4gQXNpY0NoZWNrQ29tbWFuT2soCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQsCiAJSU4gVUNIQVIJCSBDb21tYW5kKQpAQCAtNzY4NCw3ICs3NzU1LDYgQEAKIAogCXJldHVybiBGQUxTRTsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogLyoKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTgwOTYsMTAgKzgxNjYsOCBAQAogCX0KIAlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBSMyk7CiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCi0jaWZkZWYgUlQyODYwCiAJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKICAgICAJcEFkLT5TdGFDZmcuQkJQUjMgPSBCQlBSMzsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpCiAJCSkKQEAgLTgyMTEsOSArODI3OSw3IEBACiAJCQlCQlBSMyB8PSAoMHgwKTsKIAkJfQogCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBSMyk7Ci0jaWZkZWYgUlQyODYwCi0gICAgcEFkLT5TdGFDZmcuQkJQUjMgPSBCQlBSMzsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KKwkJcEFkLT5TdGFDZmcuQkJQUjMgPSBCQlBSMzsKIAl9CiAKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KQEAgLTg0MzksMTAgKzg1MDUsNyBAQAogCQkmJiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpCiAJCQkpCiAJCSYmICEoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKLSNpZmRlZiBSVDI4NjAKLQkJJiYgKHBBZC0+YlBDSWNsa09mZiA9PSBGQUxTRSkKLSNlbmRpZiAvLyBSVDI4NjAgLy8KLQkJKQorCQkmJiAocEFkLT5iUENJY2xrT2ZmID09IEZBTFNFKSkKIAl7CiAJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICZPcmlnUjY2VmFsdWUpOwogCQlSNjYgPSBPcmlnUjY2VmFsdWU7CkBAIC04NTE4LDYgKzg1ODEsMTA2IEBACiAKIAl9CiB9CisKK1ZPSUQgQXNpY1Jlc2V0RnJvbURNQUJ1c3koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUlOVDMyCQlEYXRhOworCUJPT0xFQU4JCWJDdHJsID0gRkFMU0U7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+ICBBc2ljUmVzZXRGcm9tRE1BQnVzeSAgISEhISEhISEhISEhISEhISEhISEhISEgXG4iKSk7CisKKwkvLyBCZSBzdXJlIHJlc3RvcmUgbGluayBjb250cm9sIHZhbHVlIHNvIHdlIGNhbiB3cml0ZSByZWdpc3Rlci4KKwlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisJaWYgKFJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFzaWNSZXNldEZyb21ETUFCdXN5PT0+XG4iKSk7CisJCVJUTVBQQ0llTGlua0N0cmxWYWx1ZVJlc3RvcmUocEFkLCBSRVNUT1JFX0hBTFQpOworCQlSVE1QdXNlY0RlbGF5KDYwMDApOworCQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKKwkJYkN0cmwgPSBUUlVFOworCX0KKwkvLyBSZXNldCBETUEKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9TWVNfQ1RSTCwgJkRhdGEpOworCURhdGEgfD0gMHgyOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgRGF0YSk7CisKKwkvLyBBZnRlciBSZXNldCBETUEsIERNQSBpbmRleCB3aWxsIGJlY29tZSBaZXJvLiBTbyBEcml2ZXIgbmVlZCB0byByZXNldCBhbGwgcmluZyBpbmRleHMgdG9vLgorCS8vIFJlc2V0IERNQS9DUFUgcmluZyBpbmRleAorCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CSyk7CisJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JFKTsKKwlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVkkpOworCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19WTyk7CisJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0hDQ0EpOworCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9NR01UKTsKKwlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfUlgpOworCisJLy8gQ2xlYXIgUmVzZXQKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9TWVNfQ1RSTCwgJkRhdGEpOworCURhdGEgJj0gMHhmZmZmZmZmZDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIERhdGEpOworCisJLy8gSWYgaW4gUmFkaW8gb2ZmLCBzaG91bGQgY2FsbCBSVE1QUENJZVBvd2VyTGlua0N0cmwgYWdhaW4uCisJaWYgKChiQ3RybCA9PSBUUlVFKSAmJiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKSkKKwkJUlRNUFBDSWVMaW5rQ3RybFNldHRpbmcocEFkLCAzKTsKKworCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tICBBc2ljUmVzZXRGcm9tRE1BQnVzeSAhISEhISEhISEhISEhISEhISEhISEhISAgXG4iKSk7Cit9CisKK1ZPSUQgQXNpY1Jlc2V0QkJQKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT4gIEFzaWMgSGFyZFJlc2V0IEJCUCAgISEhISEhISEhISEhISEhISEhISEhISEgXG4iKSk7CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4MCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDIpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHhjKTsKKworCS8vIEFmdGVyIGhhcmQtcmVzZXQgQkJQLCBpbml0aWFsaXplIGFsbCBCQlAgdmFsdWVzLgorCU5JQ1Jlc3RvcmVCQlBWYWx1ZShwQWQpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0gIEFzaWMgSGFyZFJlc2V0IEJCUCAhISEhISEhISEhISEhISEhISEhISEhISAgXG4iKSk7Cit9CisKK1ZPSUQgQXNpY1Jlc2V0TUFDKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVMT05HCQlEYXRhOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPiAgQXNpY1Jlc2V0TUFDICAgISEhISBcbiIpKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9TWVNfQ1RSTCwgJkRhdGEpOworCURhdGEgfD0gMHg0OworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgRGF0YSk7CisJRGF0YSAmPSAweGZmZmZmZmZiOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgRGF0YSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tICBBc2ljUmVzZXRNQUMgICAhISEhIFxuIikpOworfQorCitWT0lEIEFzaWNSZXNldFBCRigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVTE9ORwkJVmFsdWUxLCBWYWx1ZTI7CisJVUxPTkcJCURhdGE7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYUlhRX1BDTlQsICZWYWx1ZTEpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX0RCRywgJlZhbHVlMik7CisKKwlWYWx1ZTIgJj0gMHhmZjsKKwkvLyBzdW0gc2hvdWxkIGJlIGVxdWFscyB0byAweGZmLCB3aGljaCBpcyB0aGUgdG90YWwgYnVmZmVyIHNpemUuCisJaWYgKChWYWx1ZTEgKyBWYWx1ZTIpIDwgMHhmZikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT4gIEFzaWMgSGFyZFJlc2V0IFBCRiAhISEhIFxuIikpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9TWVNfQ1RSTCwgJkRhdGEpOworCQlEYXRhIHw9IDB4ODsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCBEYXRhKTsKKwkJRGF0YSAmPSAweGZmZmZmZmY3OworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIERhdGEpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0gIEFzaWMgSGFyZFJlc2V0IFBCRiAhISEhIFxuIikpOworCX0KK30KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogVk9JRCBSVE1QU2V0QUdDSW5pdFZhbHVlKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYwppbmRleCA1NjNmMmM1Li44YTAwY2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYwpAQCAtMTQ5LDkgKzE0OSw3IEBACiAJe0dGMjBfUFJPVF9DRkcsCQkJMHgwMTc0NDAwNH0sICAgIC8vIHNldCAxOToxOCAtLT4gU2hvcnQgTkFWIGZvciBNSU1PIFBTCiAJe0dGNDBfUFJPVF9DRkcsCQkJMHgwM0Y0NDA4NH0sCiAJe01NMjBfUFJPVF9DRkcsCQkJMHgwMTc0NDAwNH0sCi0jaWZkZWYgUlQyODYwCiAJe01NNDBfUFJPVF9DRkcsCQkJMHgwM0Y1NDA4NH0sCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJe1RYT1BfQ1RSTF9DRkcsCQkJMHgwMDAwNTgzZiwgLyoweDAwMDAyNDNmKi8gLyoweDAwMDAyNGJmKi99LAkvL0V4dGVuc2lvbiBjaGFubmVsIGJhY2tvZmYuCiAJe1RYX1JUU19DRkcsCQkJMHgwMDA5MmIyMH0sCiAJe0VYUF9BQ0tfVElNRSwJCQkweDAwMjQwMGNhfSwJLy8gZGVmYXVsdCB2YWx1ZQpAQCAtMTg4LDkgKzE4Niw3IEBACiAjZGVmaW5lIEZJUk1XQVJFSU1BR0VWMV9MRU5HVEgJMHgxMDAwCiAjZGVmaW5lIEZJUk1XQVJFSU1BR0VWMl9MRU5HVEgJMHgxMDAwCiAKLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgRklSTVdBUkVfTUlOT1JfVkVSU0lPTgkyCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogLyoKQEAgLTI0OCw5ICsyNDQsNyBAQAogCiAJCS8vIEluaXQgc3BpbiBsb2NrcwogCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NZ210UmluZ0xvY2spOwotI2lmZGVmIFJUMjg2MAogCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5SeFJpbmdMb2NrKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlmb3IgKGluZGV4ID0wIDsgaW5kZXggPCBOVU1fT0ZfVFhfUklORzsgaW5kZXgrKykKIAkJewpAQCAtMTU1NSwxMCArMTU0OSw3IEBACiAJCXBBZC0+TGVkQ250bC53b3JkID0gMHgwMTsKIAkJcEFkLT5MZWQxID0gMHg1NTU1OwogCQlwQWQtPkxlZDIgPSAweDIyMjE7Ci0KLSNpZmRlZiBSVDI4NjAKIAkJcEFkLT5MZWQzID0gMHhBOUY4OwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCX0KIAogCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MiwgMHhmZiwgKFVDSEFSKXBBZC0+TGVkMSwgKFVDSEFSKShwQWQtPkxlZDEgPj4gOCkpOwpAQCAtMTU5NCwxMiArMTU4NSwxMCBAQAogCQllbHNlCiAJCXsKIAkJCVJUTVBTZXRMRUQocEFkLCBMRURfUkFESU9fT04pOwotI2lmZGVmIFJUMjg2MAogCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMwLCAweGZmLCAweGZmLCAweDAyKTsKIAkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgUG93ZXJXYWtlQ0lELCAweDAwLCAweDAwKTsKIAkJCS8vIDItMS4gd2FpdCBjb21tYW5kIG9rLgogCQkJQXNpY0NoZWNrQ29tbWFuT2socEFkLCBQb3dlcldha2VDSUQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQl9CiAJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwpAQCAtMTY3NywxMCArMTY2Niw4IEBACiB7CiAJTkRJU19TVEFUVVMgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CiAJV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7Ci0jaWZkZWYgUlQyODYwCiAJVUlOVDMyCQkJVmFsdWU7CiAJREVMQVlfSU5UX0NGR19TVFJVQwlJbnRDZmc7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJVUxPTkcJaSA9MCwgaj0wOwogCUFDX1RYT1BfQ1NSMF9TVFJVQwljc3IwOwogCkBAIC0xNzE5LDExICsxNzA2LDkgQEAKIAogCS8vIGFzaWMgc2ltdWxhdGlvbiBzZXF1ZW5jZSBwdXQgdGhpcyBhaGVhZCBiZWZvcmUgbG9hZGluZyBmaXJtd2FyZS4KIAkvLyBwYmYgaGFyZHdhcmUgcmVzZXQKLSNpZmRlZiBSVDI4NjAKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9SU1RfSURYLCAweDEwMDNmKTsJLy8gMHgxMDAwMCBmb3IgcmVzZXQgcngsIDB4M2YgcmVzZXRzIGFsbCA2IHR4IHJpbmdzLgogCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHhlMWYpOwogCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHhlMDApOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJLy8gSW5pdGlhbHplIEFTSUMgZm9yIFRYICYgUnggb3BlcmF0aW9uCiAJaWYgKE5JQ0luaXRpYWxpemVBc2ljKHBBZCAsIGJIYXJkUmVzZXQpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCkBAIC0xNzM3LDcgKzE3MjIsNiBAQAogCX0KIAogCi0jaWZkZWYgUlQyODYwCiAJLy8gV3JpdGUgQUNfQksgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyCiAJVmFsdWUgPSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhwQWQtPlR4UmluZ1tRSURfQUNfQktdLkNlbGxbMF0uQWxsb2NQYSk7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFTRV9QVFIxLCBWYWx1ZSk7CkBAIC0xODEwLDcgKzE3OTQsNiBAQAogCS8vIFdyaXRlIFJYX1JJTkdfQ1NSIHJlZ2lzdGVyCiAJVmFsdWUgPSBSWF9SSU5HX1NJWkU7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfTUFYX0NOVCwgVmFsdWUpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAkvLyBXTU0gcGFyYW1ldGVyCkBAIC0xODI5LDcgKzE4MTIsNiBAQAogCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9UWE9QMV9DRkcsIGNzcjAud29yZCk7CiAKIAotI2lmZGVmIFJUMjg2MAogCS8vIDMuIFNldCBETUEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZXhjZXB0IFRYX0RNQV9FTiBhbmQgUlhfRE1BX0VOIGJpdHM6CiAJaSA9IDA7CiAJZG8KQEAgLTE4NDgsNyArMTgzMCw2IEBACiAKIAlJbnRDZmcud29yZCA9IDA7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgREVMQVlfSU5UX0NGRywgSW50Q2ZnLndvcmQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAkvLyByZXNldCBhY3Rpb24KQEAgLTE4ODksNyArMTg3MCw2IEBACiAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDSW5pdGlhbGl6ZUFzaWNcbiIpKTsKIAotI2lmZGVmIFJUMjg2MAogCWlmIChiSGFyZFJlc2V0ID09IFRSVUUpCiAJewogCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4Myk7CkBAIC0xOTE0LDcgKzE4OTQsNiBAQAogCQl9CiAJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAkvLwpAQCAtMjA0MSw2ICsyMDIwLDEzMSBAQAogCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwogfQogCisKK1ZPSUQgTklDUmVzdG9yZUJCUFZhbHVlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSCQlpbmRleDsKKwlVQ0hBUgkJVmFsdWUgPSAwOworCVVMT05HCQlEYXRhOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPiAgTklDUmVzdG9yZUJCUFZhbHVlICEhISEhISEhISEhISEhISEhISEhISEhICBcbiIpKTsKKwkvLyBJbml0aWFsaXplIEJCUCByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlIChydG1wX2luaXQuYykKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fQkJQX1JFR19QQVJNUzsgaW5kZXgrKykKKwl7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBSZWdUYWJsZVtpbmRleF0uUmVnaXN0ZXIsIEJCUFJlZ1RhYmxlW2luZGV4XS5WYWx1ZSk7CisJfQorCS8vIGNvcHkgZnJvbSAocnRtcF9pbml0LmMpCisJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCXsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MTYpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxMik7CisJfQorCisJLy8gY29weSBmcm9tIChjb25uZWN0LmMgTGlua1VwIGZ1bmN0aW9uKQorCWlmIChJTkZSQV9PTihwQWQpKQorCXsKKwkJLy8gQ2hhbmdlIHRvIEFQIGNoYW5uZWwKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA+IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpICYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCQl7CisJCQkvLyBNdXN0IHVzaW5nIDQwTUh6LgorCQkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfNDA7CisJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7CisJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKKwkJCVZhbHVlICY9ICh+MHgxOCk7CisJCQlWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgVmFsdWUpOworCisJCQkvLyAgUlggOiBjb250cm9sIGNoYW5uZWwgYXQgbG93ZXIKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKKwkJCVZhbHVlICY9ICh+MHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisJCQkvLyBSZWNvcmQgQkJQUjMgc2V0dGluZywgQnV0IGRvbid0IGtlZXAgUiBBbnRlbm5hICMgaW5mb3JtYXRpb24uCisJCQlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOworCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmRGF0YSk7CisJCQlEYXRhICY9IDB4ZmZmZmZmZmU7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgRGF0YSk7CisKKwkJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJCXsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxQSk7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIDB4MEEpOworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDE2KTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISFydDI4NjBDICEhISBcbiIgKSk7CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhITQwTUh6IExvd2VyIExJTksgVVAgISEhIENvbnRyb2wgQ2hhbm5lbCBhdCBCZWxvdy4gQ2VudHJhbCA9ICVkIFxuIiwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgKSk7CisJCX0KKwkJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkgJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJCXsKKwkJCS8vIE11c3QgdXNpbmcgNDBNSHouCisJCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQkJVmFsdWUgJj0gKH4weDE4KTsKKwkJCVZhbHVlIHw9IDB4MTA7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7CisKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZEYXRhKTsKKwkJCURhdGEgfD0gMHgxOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOworCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJCQlWYWx1ZSB8PSAoMHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisJCQkvLyBSZWNvcmQgQkJQUjMgc2V0dGluZywgQnV0IGRvbid0IGtlZXAgUiBBbnRlbm5hICMgaW5mb3JtYXRpb24uCisJCQlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOworCisJCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCQl7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MUEpOworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAweDBBKTsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxNik7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQkJfQorCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISE0ME1IeiBVcHBlciBMSU5LIFVQICEhISBDb250cm9sIENoYW5uZWwgYXQgVXBwZXJDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOworCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQkJVmFsdWUgJj0gKH4weDE4KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIFZhbHVlKTsKKworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOworCQkJRGF0YSAmPSAweGZmZmZmZmZlOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOworCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJCQlWYWx1ZSAmPSAofjB4MjApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgVmFsdWUpOworCQkJLy8gUmVjb3JkIEJCUFIzIHNldHRpbmcsIEJ1dCBkb24ndCBrZWVwIFIgQW50ZW5uYSAjIGluZm9ybWF0aW9uLgorCQkJcEFkLT5TdGFDZmcuQkJQUjMgPSBWYWx1ZTsKKworCQkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCQkJeworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDE2KTsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgMHgwOCk7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTEpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXJ0Mjg2MEMgISEhIFxuIiApKTsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhMjBNSHogTElOSyBVUCAhISEgXG4iICkpOworCQl9CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLSAgTklDUmVzdG9yZUJCUFZhbHVlICEhISEhISEhISEhISEhISEhISEhISEhICBcbiIpKTsKK30KKwogLyoKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMzAyOCwxMSArMzEzMiwxMCBAQAogCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOwogCiAJcEFkLT5MZWRDbnRsLndvcmQgPSAwOwotI2lmZGVmIFJUMjg2MAogCXBBZC0+TGVkSW5kaWNhdG9yU3RyZWd0aCA9IDA7CiAJcEFkLT5STG5rQ3RybE9mZnNldCA9IDA7CiAJcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCA9IDA7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCisJcEFkLT5DaGVja0RtYUJ1c3lDb3VudCA9IDA7CiAKIAlwQWQtPmJBdXRvVHhBZ2NBID0gRkFMU0U7CQkJLy8gRGVmYXVsdCBpcyBPRkYKIAlwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7CQkJLy8gRGVmYXVsdCBpcyBPRkYKQEAgLTMyOTIsOSArMzM5NSw3IEBACiAJcEFkLT5hdGUuYlJ4RmVyID0gMDsKIAlwQWQtPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CiAJcEFkLT5hdGUuYlFBUnhTdGFydCA9IEZBTFNFOwotI2lmZGVmIFJUMjg2MAogCXBBZC0+YXRlLmJGV0xvYWRpbmcgPSBGQUxTRTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KICNpZmRlZiBSQUxJTktfMjh4eF9RQQogCS8vcEFkLT5hdGUuUmVwZWF0ID0gMDsKIAlwQWQtPmF0ZS5UeFN0YXR1cyA9IDA7CkBAIC0zMzA0LDExICszNDA1LDkgQEAKIAogCiAJcEFkLT5Db21tb25DZmcuYldpRmlUZXN0ID0gRkFMU0U7Ci0jaWZkZWYgUlQyODYwCi0gICAgcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCisJcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7CiAKLQorCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIFVzZXJDZmdJbml0XG4iKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9zcGVjdHJ1bS5jCmluZGV4IDAyNjVhNmQuLmIzNjUwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vc3BlY3RydW0uYwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAKIAogCWlmICgocE1lYXN1cmVSZXBvcnRJbmZvID0ga21hbGxvYyhzaXplb2YoTUVBU1VSRV9SUElfUkVQT1JUKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCiAJewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyB1bmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBtZWFzdXJlIHJlcG9ydCBidWZmZXIgKHNpemU9JWQpLlxuIiwgX19mdW5jX18sIHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpKSk7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIHVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIG1lYXN1cmUgcmVwb3J0IGJ1ZmZlciAoc2l6ZT0lenUpLlxuIiwgX19mdW5jX18sIHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpKSk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29uZmlnLm1rIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb25maWcubWsKaW5kZXggZjU3ZDdiYi4uMjViZDU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb25maWcubWsKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb25maWcubWsKQEAgLTEwOCwxMCArMTA4LDYgQEAKIFdGTEFHUyArPSAtREVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKIGVuZGlmCiAKLWlmZXEgKCQoQ0hJUFNFVCksMjg2MCkKLVdGTEFHUyArPS1EUlQyODYwCi1lbmRpZgotCiBpZmVxICgkKENISVBTRVQpLDI4NzApCiBXRkxBR1MgKz0tRFJUMjg3MAogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvb2lkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL29pZC5oCmluZGV4IGYyZjkxYjYuLjVlNmVkOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvb2lkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9vaWQuaApAQCAtNTQ0LDYgKzU0NCw4IEBACiAgICAgTmRpczgwMl8xMUVuY3J5cHRpb24zS2V5QWJzZW50LAogICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uNEVuYWJsZWQsCS8vIFRLSVAgb3IgQUVTIG1peAogICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uNEtleUFic2VudCwKKyAgICBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQsCisJTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZCwKIH0gTkRJU184MDJfMTFfV0VQX1NUQVRVUywgKlBORElTXzgwMl8xMV9XRVBfU1RBVFVTLAogICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUywgKlBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4NjAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnQyODYwLmgKaW5kZXggMDE3MjAxOS4uNGZiZWM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4NjAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0Mjg2MC5oCkBAIC00NiwxOCArNDYsMTAgQEAKIAlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjZGVmaW5lIElSUV9IQU5ETEVfVFlQRSAgaXJxcmV0dXJuX3QKLSNlbHNlCi0jZGVmaW5lIElSUV9IQU5ETEVfVFlQRSAgdm9pZAotI2VuZGlmCiAKIElSUV9IQU5ETEVfVFlQRQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDE5KSkKIHJ0Mjg2MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKLSNlbHNlCi1ydDI4NjBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tIEZyaW13YXJlIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgUlQyOFhYX1dSSVRFX0ZJUk1XQVJFKF9wQWQsIF9wRndJbWFnZSwgX0Z3TGVuKQkJCQlcCkBAIC0yMzcsOSArMjI5LDcgQEAKICNkZWZpbmUgUlRNUF9NU0lfRElTQUJMRShfcEFkKQogI2VuZGlmIC8vIFBDSV9NU0lfU1VQUE9SVCAvLwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkKICNkZWZpbmUgU0FfU0hJUlEgSVJRRl9TSEFSRUQKLSNlbmRpZgogCiAjZGVmaW5lIFJUMjhYWF9JUlFfUkVRVUVTVChuZXRfZGV2KQkJCQkJCQlcCiB7CVBSVE1QX0FEQVBURVIgX3BBZCA9IChQUlRNUF9BREFQVEVSKSgobmV0X2RldiktPm1sX3ByaXYpOwlcCkBAIC0yNTEsMjAgKzI0MSwxMiBAQAogCQlwcmludGsoIlJUMjg2MDogcmVxdWVzdF9pcnEgIEVSUk9SKCVkKVxuIiwgcmV0dmFsKTsJXAogCXJldHVybiByZXR2YWw7IH0gfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogI2RlZmluZSBSVDI4WFhfSVJRX1JFTEVBU0UobmV0X2RldikJCQkJCQkJCVwKIHsJUFJUTVBfQURBUFRFUiBfcEFkID0gKFBSVE1QX0FEQVBURVIpKChuZXRfZGV2KS0+bWxfcHJpdik7CQlcCiAJUE9TX0NPT0tJRSBfcE9iaiA9IChQT1NfQ09PS0lFKShfcEFkLT5PU19Db29raWUpOwkJCVwKIAlzeW5jaHJvbml6ZV9pcnEoX3BPYmotPnBjaV9kZXYtPmlycSk7CQkJCQkJXAogCWZyZWVfaXJxKF9wT2JqLT5wY2lfZGV2LT5pcnEsIChuZXRfZGV2KSk7CQkJCQlcCiAJUlRNUF9NU0lfRElTQUJMRShfcEFkKTsgfQotI2Vsc2UKLSNkZWZpbmUgUlQyOFhYX0lSUV9SRUxFQVNFKG5ldF9kZXYpCQkJCQkJCQlcCi17CVBSVE1QX0FEQVBURVIgX3BBZCA9IChQUlRNUF9BREFQVEVSKSgobmV0X2RldiktPnByaXYpOwkJXAotCVBPU19DT09LSUUgX3BPYmogPSAoUE9TX0NPT0tJRSkoX3BBZC0+T1NfQ29va2llKTsJCQlcCi0JZnJlZV9pcnEoX3BPYmotPnBjaV9kZXYtPmlycSwgKG5ldF9kZXYpKTsJCQkJCVwKLQlSVE1QX01TSV9ESVNBQkxFKF9wQWQpOyB9Ci0jZW5kaWYKIAogI2RlZmluZSBSVDI4WFhfSVJRX0lOSVQocEFkKQkJCQkJCQkJCQlcCiAJewlwQWQtPmludF9lbmFibGVfcmVnID0gKChERUxBWUlOVE1BU0spIHwJCQkJCQlcCkBAIC0zMzMsOCArMzE1LDggQEAKICAgICByZWcxNiA9IGNwdTJsZTE2KENvbmZpZ3VyYXRpb24pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpX2Rldiwgb2Zmc2V0LCByZWcxNik7ICAgICAgICAgIFwKIAotI2RlZmluZSBSVDI4WFhfU1RBX0ZPUkNFX1dBS0VVUChwQWQsIGJGcm9tVHgpIFwKLSAgICBSVDI4eHhQY2lTdGFBc2ljRm9yY2VXYWtldXAocEFkLCBiRnJvbVR4KTsKKyNkZWZpbmUgUlQyOFhYX1NUQV9GT1JDRV9XQUtFVVAocEFkLCBMZXZlbCkgXAorICAgIFJUMjh4eFBjaVN0YUFzaWNGb3JjZVdha2V1cChwQWQsIExldmVsKTsKIAogI2RlZmluZSBSVDI4WFhfU1RBX1NMRUVQX1RIRU5fQVVUT19XQUtFVVAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKSBcCiAgICAgUlQyOHh4UGNpU3RhQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnQyOHh4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0Mjh4eC5oCmluZGV4IGZmMjMwNDMuLmU1ZTZmMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnQyOHh4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4eHguaApAQCAtMTY3MCwxMSArMTY3MCw5IEBACiAjZGVmaW5lIEUyUFJPTV9DU1IgICAgICAgICAgMHgwMDA0CiAjZGVmaW5lIElPX0NOVExfQ1NSICAgICAgICAgMHg3N2QwCiAKLSNpZmRlZiBSVDI4NjAKIC8vIDgwNTEgZmlybXdhcmUgaW1hZ2UgZm9yIFJUMjg2MCAtIGJhc2UgYWRkcmVzcyA9IDB4NDAwMAogI2RlZmluZSBGSVJNV0FSRV9JTUFHRV9CQVNFICAgICAweDIwMDAKICNkZWZpbmUgTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUgMHgyMDAwICAgIC8vIDhrYnl0ZQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwMjksNyArMjAyNyw2IEBACiAvLwogLy8gUnggZGVzY3JpcHRvciBmb3JtYXQsIFJ4CVJpbmcKIC8vCi0jaWZkZWYgUlQyODYwCiAjaWZkZWYgUlRfQklHX0VORElBTgogdHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9SWERfU1RSVUMJewogCS8vIFdvcmQgMApAQCAtMjA5OCw3ICsyMDk1LDYgQEAKIAlVSU5UMzIJCVJzdjE6MTM7CiB9CVJYRF9TVFJVQywgKlBSWERfU1RSVUMsIFJUMjhYWF9SWERfU1RSVUMsICpQUlQyOFhYX1JYRF9TVFJVQzsKICNlbmRpZgotI2VuZGlmIC8vIFJUMjg2MCAvLwogLy8KIC8vIFJYV0kgd2lyZWxlc3MgaW5mb3JtYXRpb24gZm9ybWF0LCBpbiBQQkYuIGludmlzaWJsZSBpbiBkcml2ZXIuCiAvLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfYXRlLmMKaW5kZXggZjMzMTZlYy4uMWVkNzNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2F0ZS5jCkBAIC02OCw3ICs2OCw2IEBACiAJSU4gVUNIQVIgTW9kZSwKIAlJTiBVQ0hBUiBNY3MpOwogCi0jaWZkZWYgUlQyODYwCiBzdGF0aWMgVk9JRCBBVEVXcml0ZVR4V0koCiAJSU4JUFJUTVBfQURBUFRFUglwQWQsCiAJSU4JUFRYV0lfU1RSVUMgCXBPdXRUeFdJLApAQCAtODcsNyArODYsNiBAQAogCUlOCVVDSEFSCQkJVHhvcG1vZGUsCiAJSU4JQk9PTEVBTgkJCUNmQWNrLAogCUlOCUhUVFJBTlNNSVRfU0VUVElORwkqcFRyYW5zbWl0KTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiBzdGF0aWMgVk9JRCBTZXRKYXBhbkZpbHRlcigKQEAgLTk1LDcgKzkzLDYgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09ZW5kIG9mIHByb3RvdHlwZT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jaWZkZWYgUlQyODYwCiBzdGF0aWMgSU5UIFR4RG1hQnVzeSgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCkKIHsKQEAgLTE1Myw3ICsxNTAsNiBAQAogCiAJcmV0dXJuOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIHN0YXRpYyBWT0lEIEJicFNvZnRSZXNldCgKQEAgLTQ4OCw3ICs0ODQsNiBAQAogICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi0jaWZkZWYgUlQyODYwCiBzdGF0aWMgSU5UCUFURUNtZEhhbmRsZXIoCiAJSU4JUFJUTVBfQURBUFRFUglwQWQsCiAJSU4JUFVDSEFSCQkJYXJnKQpAQCAtMTI5Nyw3ICsxMjkyLDYgQEAKIAogCXJldHVybiBUUlVFOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT1FbmQgb2YgUlQyODYwPT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMjkwNyw3ICsyOTAxLDYgQEAKIAkJTm9uZQogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLSNpZmRlZiBSVDI4NjAKIHN0YXRpYyBWT0lEIEFURVdyaXRlVHhXSSgKIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKIAlJTglQVFhXSV9TVFJVQyAJcE91dFR4V0ksCkBAIC0yOTcyLDcgKzI5NjUsNiBAQAogCiAgICAgICAgIHJldHVybjsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogLyoKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMyNDksMTMgKzMyNDEsMTEgQEAKICAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCkKIHsKICAgICBBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gUlRNUFN0YXRpb25TdGFydFxuIikpOwotI2lmZGVmIFJUMjg2MAotCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CitlcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKIAkvLwogCS8vIFdlIGRpZCBub3QgY2FuY2VsIHRoaXMgdGltZXIgd2hlbiBlbnRlcmluZyBBVEUgbW9kZS4KIAkvLwogLy8JUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgTUxNRV9UQVNLX0VYRUNfSU5UVik7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IFJUTVBTdGF0aW9uU3RhcnRcbiIpKTsKIH0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KQEAgLTMyNjgsNyArMzI1OCw2IEBACiAJCVRoaXMgcm91dGluZSBzaG91bGQgb25seSBiZSB1c2VkIGluIEFURSBtb2RlLgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KLSNpZmRlZiBSVDI4NjAKIHN0YXRpYyBJTlQgQVRFU2V0VXBGcmFtZSgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKIAlJTiBVSU5UMzIgVHhJZHgpCkBAIC0zNDU1LDcgKzM0NDQsNiBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT1FbmQgb2YgUlQyODYwPT09PT09PT09PT09PT09PT09PT09PT0qLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIFZPSUQgcnRfZWVfcmVhZF9hbGwoUFJUTVBfQURBUFRFUiBwQWQsIFVTSE9SVCAqRGF0YSkKQEAgLTQ1NzgsOSArNDU2Niw3IEBACiAJCQkJCQl7CiAJCQkJCQkJaWYgKHBBZGFwdGVyLT5hdGUuVHhDb3VudCA9PSAwKQogCQkJCQkJCXsKLSNpZmRlZiBSVDI4NjAKIAkJCQkJCQkJcEFkYXB0ZXItPmF0ZS5UeENvdW50ID0gMHhGRkZGRkZGRjsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQkJCQl9CiAJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEFSVCBUWEZSQU1FXG4iKSk7CiAJCQkJCQkJcEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID0gVFJVRTsKQEAgLTUzNzUsNyArNTM2MSw2IEBACiAKIAkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOwogCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOwotI2lmZGVmIFJUMjg2MAogCQkJCS8qIFRYX0ZSQU1FX0NPVU5UID09IDAgbWVhbnMgdHggaW5maW5pdGVseSAqLwogCQkJCWlmICh2YWx1ZSA9PSAwKQogCQkJCXsKQEAgLTUzODcsNyArNTM3Miw2IEBACiAKIAkJCQl9CiAJCQkJZWxzZQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCXsKIAkJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CiAJCQkJCVNldF9BVEVfVFhfQ09VTlRfUHJvYyhwQWRhcHRlciwgc3RyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfYXRlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2F0ZS5oCmluZGV4IDQ4YWE3MGQuLjM4ZjVjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfYXRlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuaApAQCAtMzEsMTIgKzMxLDEwIEBACiAjaWZuZGVmIFVDT1MKICNkZWZpbmUgYXRlX3ByaW50IHByaW50awogI2RlZmluZSBBVEVEQkdQUklOVCBEQkdQUklOVAotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBFRVBST01fU0laRQkJCQkJCQkJMHgyMDAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKICNkZWZpbmUgRUVQUk9NX0JJTl9GSUxFX05BTUUgICIvZXRjL1dpcmVsZXNzL1JUMjg2MFNUQS9lMnAuYmluIgogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAjZWxzZSAvLyAhVUNPUyAvLwogI2RlZmluZSBmQVRFX0xPQURfRUVQUk9NCQkJCQkJMHgwQzQzCkBAIC02OSw3ICs2Nyw2IEBACiAjZGVmaW5lIEFURV9PTihfcCkgICAgICAgICAgICAgICgoKF9wKS0+YXRlLk1vZGUpICE9IEFURV9TVE9QKQogCiAvKiBSVDI4ODBfaU5JQyB3aWxsIGRlZmluZSAiUlQyODYwIi4gKi8KLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBCQlBfQ1NSX0NGR19TVFJVQyAgQmJwQ3NyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTMxLDEwICsxMjgsOCBAQAogICAgICAgICBBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJCQlAgd3JpdGUgUiVkIGZhaWxcbiIsIF9JKSk7ICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogLyogUlQyODgwX2lOSUMgd2lsbCBkZWZpbmUgUlQyODYwLiAqLwotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBFRVBST01fU0laRQkJCQkJCQkJMHgyMDAKIC8qIGlOSUMgaGFzIGl0cyBvd24gRUVQUk9NX0JJTl9GSUxFX05BTUUgKi8KICNpZm5kZWYgVUNPUwpAQCAtMTQyLDcgKzEzNyw2IEBACiAjZGVmaW5lIEVFUFJPTV9CSU5fRklMRV9OQU1FICAiL2V0Yy9XaXJlbGVzcy9SVDI4NjBTVEEvZTJwLmJpbiIKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KICNlbmRpZiAvLyAhVUNPUyAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9jb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfY29uZmlnLmgKaW5kZXggN2VlN2E0MC4uYTY3MDI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9jb25maWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2NvbmZpZy5oCkBAIC01Myw5ICs1Myw3IEBACiAjaW5jbHVkZSAgICAicnRtcF9kZWYuaCIKICNpbmNsdWRlICAgICJydDI4eHguaCIKIAotI2lmZGVmIFJUMjg2MAogI2luY2x1ZGUJInJ0Mjg2MC5oIgotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNpbmNsdWRlICAgICJvaWQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwppbmRleCBmMTQ1MDA5Li5mM2MxMjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCkBAIC00OCwxMCArNDgsOCBAQAogI2VuZGlmCiBCVUlMRF9USU1FUl9GVU5DVElPTihTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKTsKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKTsKLSNpZmRlZiBSVDI4NjAKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKFBzUG9sbFdha2VFeGVjKTsKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKFJhZGlvT25FeGVjKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KICNpZmRlZiBRT1NfRExTX1NVUFBPUlQKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKERsc1RpbWVvdXRBY3Rpb24pOwogI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLwpAQCAtMjkzLDkgKzI5MSw3IEBACiAKIAlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPk1nbXRSaW5nTG9jayk7CiAKLSNpZmRlZiBSVDI4NjAKIAlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPlJ4UmluZ0xvY2spOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJZm9yIChpbmRleCA9MCA7IGluZGV4IDwgTlVNX09GX1RYX1JJTkc7IGluZGV4KyspCiAJewpAQCAtODU0LDcgKzg1MCw3IEBACiAKICAgICBpZiAocFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpID4gUlhfQlVGRkVSX0FHR1JFU0laRSkKICAgICB7Ci0gICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogU2l6ZSBpcyB0b28gbGFyZ2UhICglZClcbiIsIF9fZnVuY19fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBTaXplIGlzIHRvbyBsYXJnZSEgKCV6dSlcbiIsIF9fZnVuY19fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKIAkJZ290byBlcnJfZnJlZV9za19idWZmOwogICAgIH0KIApAQCAtMTAwNSwzNSArMTAwMSwxNCBAQAogCiB2b2lkIHJ0bXBfb3NfdGhyZWFkX2luaXQoUFVDSEFSIHBUaHJlYWROYW1lLCBQVk9JRCBwTm90aWZ5KQogewotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCWRhZW1vbml6ZShwVGhyZWFkTmFtZSAvKiIlcyIscEFkLT5uZXRfZGV2LT5uYW1lKi8pOwogCiAJYWxsb3dfc2lnbmFsKFNJR1RFUk0pOwogCWFsbG93X3NpZ25hbChTSUdLSUxMKTsKIAljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKLSNlbHNlCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRhZW1vbml6ZSgpOwotCXJlcGFyZW50X3RvX2luaXQoKTsKLQlzdHJjcHkoY3VycmVudC0+Y29tbSwgcFRocmVhZE5hbWUpOwotCi0Jc2lnaW5pdHNldGludigmY3VycmVudC0+YmxvY2tlZCwgc2lnbWFzayhTSUdURVJNKSB8IHNpZ21hc2soU0lHS0lMTCkpOwotCi0JLyogQWxsb3cgaW50ZXJjZXB0aW9uIG9mIFNJR0tJTEwgb25seQotCSAqIERvbid0IGFsbG93IG90aGVyIHNpZ25hbHMgdG8gaW50ZXJydXB0IHRoZSB0cmFuc21pc3Npb24gKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDQsMjIpCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ21hc2tfbG9jaywgZmxhZ3MpOwotCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoY3VycmVudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+c2lnbWFza19sb2NrLCBmbGFncyk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgLyogc2lnbmFsIHRoYXQgd2UndmUgc3RhcnRlZCB0aGUgdGhyZWFkICovCisJLyogc2lnbmFsIHRoYXQgd2UndmUgc3RhcnRlZCB0aGUgdGhyZWFkICovCiAJY29tcGxldGUocE5vdGlmeSk7Ci0KIH0KIAogdm9pZCBSVE1QX0luZGljYXRlTWVkaWFTdGF0ZSgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguaAppbmRleCAwZmQ1OGY1Li43MDg5MjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5oCkBAIC02NSw3ICs2NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAKLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKIC8vIGxvYWQgZmlybXdhcmUKQEAgLTkwLDI4ICs4OSwyMiBAQAogLy8gYWRkIGJ5IGthdGh5CiAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgU1RBX1BST0ZJTEVfUEFUSAkJCSIvZXRjL1dpcmVsZXNzL1JUMjg2MFNUQS9SVDI4NjBTVEEuZGF0IgogI2RlZmluZSBTVEFfUlRNUF9GSVJNV0FSRV9GSUxFX05BTUUgIi9ldGMvV2lyZWxlc3MvUlQyODYwU1RBL1JUMjg2MFNUQS5iaW4iCiAjZGVmaW5lIFNUQV9OSUNfREVWSUNFX05BTUUJCQkiUlQyODYwU1RBIgotI2RlZmluZSBTVEFfRFJJVkVSX1ZFUlNJT04JCQkiMS44LjAuMCIKKyNkZWZpbmUgU1RBX0RSSVZFUl9WRVJTSU9OCQkJIjEuOC4xLjEiCiAjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCiAjZGVmaW5lIENBUkRfSU5GT19QQVRICQkJIi9ldGMvV2lyZWxlc3MvUlQyODYwU1RBL1JUMjg2MFNUQUNhcmQuZGF0IgogI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAotI2lmZGVmIFJUMjg2MAogI2lmbmRlZiBQQ0lfREVWSUNFCiAjZGVmaW5lIFBDSV9ERVZJQ0UodmVuZCxkZXYpIFwKIAkudmVuZG9yID0gKHZlbmQpLCAuZGV2aWNlID0gKGRldiksIFwKIAkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IFBDSV9BTllfSUQKICNlbmRpZiAvLyBQQ0lfREVWSUNFIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCi0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAKICNkZWZpbmUgUlRNUF9USU1FX0FGVEVSKGEsYikJCVwKIAkodHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCBsb25nKWEpICYmIFwKQEAgLTEyMywxMSArMTE2LDcgQEAKIAkgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCBsb25nKWIpICYmIFwKIAkgKChsb25nKShhKSAtIChsb25nKShiKSA+PSAwKSkKICNkZWZpbmUgUlRNUF9USU1FX0JFRk9SRShhLGIpCVJUTVBfVElNRV9BRlRFUl9FUShiLGEpCi0jZWxzZQotI2RlZmluZSBSVE1QX1RJTUVfQUZURVIoYSxiKSB0aW1lX2FmdGVyKGEsIGIpCi0jZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKICNkZWZpbmUgUlRfTU9EX0lOQ19VU0VfQ09VTlQoKSBcCiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIFwKIAl7IFwKQEAgLTEzNiwxMCArMTI1LDYgQEAKIAl9CiAKICNkZWZpbmUgUlRfTU9EX0RFQ19VU0VfQ09VTlQoKSBtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLSNlbHNlCi0jZGVmaW5lIFJUX01PRF9JTkNfVVNFX0NPVU5UKCkJTU9EX0lOQ19VU0VfQ09VTlQ7Ci0jZGVmaW5lIFJUX01PRF9ERUNfVVNFX0NPVU5UKCkgTU9EX0RFQ19VU0VfQ09VTlQ7Ci0jZW5kaWYKIAogI2RlZmluZSBPU19IWgkJCUhaCiAKQEAgLTE3MSwyMSArMTU2LDEyIEBACiAjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkzCiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogdHlwZWRlZglzdHJ1Y3QgcGlkICoJVEhSRUFEX1BJRDsKICNkZWZpbmUJVEhSRUFEX1BJRF9JTklUX1ZBTFVFCU5VTEwKICNkZWZpbmUJR0VUX1BJRChfdikJZmluZF9nZXRfcGlkKF92KQogI2RlZmluZQlHRVRfUElEX05VTUJFUihfdikJcGlkX25yKF92KQogI2RlZmluZSBDSEVDS19QSURfTEVHQUxJVFkoX3BpZCkJaWYgKHBpZF9ucihfcGlkKSA+PSAwKQogI2RlZmluZSBLSUxMX1RIUkVBRF9QSUQoX0EsIF9CLCBfQykJa2lsbF9waWQoX0EsIF9CLCBfQykKLSNlbHNlCi10eXBlZGVmCXBpZF90CVRIUkVBRF9QSUQ7Ci0jZGVmaW5lCVRIUkVBRF9QSURfSU5JVF9WQUxVRQktMQotI2RlZmluZQlHRVRfUElEKF92KQlfdgotI2RlZmluZQlHRVRfUElEX05VTUJFUihfdikJX3YKLSNkZWZpbmUgQ0hFQ0tfUElEX0xFR0FMSVRZKF9waWQpCWlmIChfcGlkID49IDApCi0jZGVmaW5lIEtJTExfVEhSRUFEX1BJRChfQSwgX0IsIF9DKQlraWxsX3Byb2MoX0EsIF9CLCBfQykKLSNlbmRpZgogCiBzdHJ1Y3Qgb3NfbG9jayAgewogCXNwaW5sb2NrX3QJCWxvY2s7CkBAIC0xOTQsMTEgKzE3MCw5IEBACiAKIAogc3RydWN0IG9zX2Nvb2tpZSB7Ci0jaWZkZWYgUlQyODYwCiAJc3RydWN0IHBjaV9kZXYgCQkJKnBjaV9kZXY7CiAJc3RydWN0IHBjaV9kZXYgCQkJKnBhcmVudF9wY2lfZGV2OwogCWRtYV9hZGRyX3QJCSAgCQlwQWRfcGE7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJcnhfZG9uZV90YXNrOwpAQCAtMjA5LDkgKzE4Myw3IEBACiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IAlhYzNfZG1hX2RvbmVfdGFzazsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCWhjY2FfZG1hX2RvbmVfdGFzazsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGJ0dF90YXNrOwotI2lmZGVmIFJUMjg2MAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlmaWZvX3N0YXRpc3RpY19mdWxsX3Rhc2s7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCXVuc2lnbmVkIGxvbmcJCQlhcGRfcGlkOyAvLzgwMi4xeCBkYWVtb24gcGlkCkBAIC0yNjYsNyArMjM4LDYgQEAKIAogI2RlZmluZSBSVDI4NjBfUENJX0RFVklDRV9JRAkJMHgwNjAxCiAKLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgUENJX01BUF9TSU5HTEUoX2hhbmRsZSwgX3B0ciwgX3NpemUsIF9zZF9pZHgsIF9kaXIpIFwKIAlsaW51eF9wY2lfbWFwX3NpbmdsZShfaGFuZGxlLCBfcHRyLCBfc2l6ZSwgX3NkX2lkeCwgX2RpcikKIApAQCAtMjgxLDcgKzI1Miw2IEBACiAKICNkZWZpbmUgREVWX0FMTE9DX1NLQihfbGVuZ3RoKSBcCiAJZGV2X2FsbG9jX3NrYihfbGVuZ3RoKQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApAQCAtNDAxLDcgKzM3MSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgoc3BpbmxvY2tfdCAqKShfX2xvY2spLCAoKHVuc2lnbmVkIGxvbmcpX19pcnFmbGFnKSk7CVwKIH0KIAotI2lmZGVmIFJUMjg2MAogI2lmIGRlZmluZWQoSU5GX1RXSU5QQVNTKSB8fCBkZWZpbmVkKElORl9EQU5VQkUpIHx8IGRlZmluZWQoSUtBTk9TX1ZYXzFYMCkKIC8vUGF0Y2ggZm9yIEFTSUMgdHVyc3QgcmVhZC93cml0ZSBidWcsIG5lZWRzIHRvIHJlbW92ZSBhZnRlciBtZXRlbCBmaXgKICNkZWZpbmUgUlRNUF9JT19SRUFEMzIoX0EsIF9SLCBfcFYpCQkJCQkJCQkJXApAQCAtNDEzLDYgKzM4MiwxMiBAQAogCSgqX3BWID0gU1dBUDMyKCooKFVJTlQzMiAqKShfcFYpKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KKyNkZWZpbmUgUlRNUF9JT19GT1JDRV9SRUFEMzIoX0EsIF9SLCBfcFYpCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJCVwKKwkoKl9wViA9IHJlYWRsKCh2b2lkICopKChfQSktPkNTUkJhc2VBZGRyZXNzICsgTUFDX0NTUjApKSk7CQlcCisJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIChfUikpKSk7CQkJXAorCSgqX3BWID0gU1dBUDMyKCooKFVJTlQzMiAqKShfcFYpKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KICNkZWZpbmUgUlRNUF9JT19SRUFEOChfQSwgX1IsIF9wVikJCQkJCQkJCQlcCiB7CQkJCQkJCQkJCQkJCQkJCQlcCiAJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSkpOwkJXApAQCAtNDUyLDYgKzQyNywxMSBAQAogICAgIGVsc2UJCQkJCQkJCQkJCQkJCQlcCiAJCSpfcFYgPSAwOwkJCQkJCQkJCQkJCQlcCiB9CisjZGVmaW5lIFJUTVBfSU9fRk9SQ0VfUkVBRDMyKF9BLCBfUiwgX3BWKQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCQlcCisJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSkpOwkJXAorCSgqX3BWID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyAoX1IpKSkpOwkJCVwKK30KICNkZWZpbmUgUlRNUF9JT19SRUFEOChfQSwgX1IsIF9wVikJCQkJCQkJCVwKIHsJCQkJCQkJCQkJCQkJCQkJXAogCSgqX3BWID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyBNQUNfQ1NSMCkpKTsJCQlcCkBAIC00OTIsNyArNDcyLDYgQEAKIAl3cml0ZXcoKF9WKSwgKFBVU0hPUlQpKChfQSktPkNTUkJhc2VBZGRyZXNzICsgKF9SKSkpOwlcCiB9CiAjZW5kaWYKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAjaWZuZGVmIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CkBAIC01NDQsNyArNTIzLDYgQEAKICNkZWZpbmUgTWxtZUFsbG9jYXRlTWVtb3J5KF9wQWQsIF9wcFZBKSBvc19hbGxvY19tZW0oX3BBZCwgX3BwVkEsIE1HTVRfRE1BX0JVRkZFUl9TSVpFKQogI2RlZmluZSBNbG1lRnJlZU1lbW9yeShfcEFkLCBfcFZBKSAgICAgb3NfZnJlZV9tZW0oX3BBZCwgX3BWQSkKIAotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBCVUlMRF9USU1FUl9GVU5DVElPTihfZnVuYykJCQkJCQkJCQkJCQlcCiB2b2lkIGxpbnV4XyMjX2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQkJCQkJCQkJCQkJXAogewkJCQkJCQkJCQkJCQkJCQkJCQkJXApAQCAtNTU0LDcgKzUzMiw2IEBACiAJaWYgKHBUaW1lci0+UmVwZWF0KQkJCQkJCQkJCQkJCQkJCVwKIAkJUlRNUF9PU19BZGRfVGltZXIoJnBUaW1lci0+VGltZXJPYmosIHBUaW1lci0+VGltZXJWYWx1ZSk7CQkJCVwKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAKQEAgLTkwNyw3ICs4ODQsNiBAQAogCiB2b2lkIHJ0bXBfb3NfdGhyZWFkX2luaXQoUFVDSEFSIHBUaHJlYWROYW1lLCBQVk9JRCBwTm90aWZ5KTsKIAotI2lmZGVmIFJUMjg2MAogI2lmICFkZWZpbmVkKFBDSV9DQVBfSURfRVhQKQogI2RlZmluZSBQQ0lfQ0FQX0lEX0VYUAkJCSAgICAweDEwCiAjZW5kaWYKQEAgLTkyMSw2ICs4OTcsNSBAQAogI2VuZGlmCiAKICNkZWZpbmUgUENJQlVTX0lOVEVMX1ZFTkRPUiAgICAgICAgIDB4ODA4NgotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYwppbmRleCAzODczYzQ3Li5jZjE3YmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCkBAIC01OCwxMSArNTgsNyBAQAogCiBjaGFyICptYWMgPSAiIjsJCSAgIC8vIGRlZmF1bHQgMDA6MDA6MDA6MDA6MDA6MDAKIGNoYXIgKmhvc3RuYW1lID0gIiI7CQkgICAvLyBkZWZhdWx0IENNUEMKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2LDEyKQotTU9EVUxFX1BBUk0gKG1hYywgInMiKTsKLSNlbHNlCiBtb2R1bGVfcGFyYW0gKG1hYywgY2hhcnAsIDApOwotI2VuZGlmCiBNT0RVTEVfUEFSTV9ERVNDIChtYWMsICJydDI4eHg6IHdpcmVsZXNzIG1hYyBhZGRyIik7CiAKIApAQCAtNzUsOSArNzEsNyBAQAogI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLwogZXh0ZXJuIE5ESVNfU1RBVFVTIE5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKElOIFBSVE1QX0FEQVBURVIgcEFkKTsKIAotI2lmZGVmIFJUMjg2MAogZXh0ZXJuIHZvaWQgaW5pdF90aHJlYWRfdGFzayhQUlRNUF9BREFQVEVSIHBBZCk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIC8vIHB1YmxpYyBmdW5jdGlvbiBwcm90b3R5cGUKIElOVCBfX2RldmluaXQgcnQyOHh4X3Byb2JlKElOIHZvaWQgKl9kZXZfcCwgSU4gdm9pZCAqX2Rldl9pZF9wLApAQCAtODcsMTMgKzgxLDYgQEAKIHN0YXRpYyBpbnQgcnQyOHh4X2luaXQoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogSU5UIHJ0Mjh4eF9zZW5kX3BhY2tldHMoSU4gc3RydWN0IHNrX2J1ZmYgKnNrYl9wLCBJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gMHgyMDQwMgkvLyBSZWQgSGF0IDcuMQotc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldigKLQlpbnQgc2l6ZW9mX3ByaXYsCi0JY29uc3QgY2hhciAqbWFzaywKLQl2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKTsKLSNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KLQogc3RhdGljIHZvaWQgQ2ZnSW5pdEhvb2soUFJUTVBfQURBUFRFUiBwQWQpOwogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCkBAIC0yMzUsMTUgKzIyMiwxMyBAQAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAJewotI2lmZGVmIFJUMjg2MAotCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZCwgUkVTVE9SRV9DTE9TRSk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCi0KIAkJLy8gSWYgZGlydmVyIGRvZXNuJ3Qgd2FrZSB1cCBmaXJtd2FyZSBoZXJlLAogCQkvLyBOSUNMb2FkRmlybXdhcmUgd2lsbCBoYW5nIGZvcmV2ZXIgd2hlbiBpbnRlcmZhY2UgaXMgdXAgYWdhaW4uCi0JCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSB8fAorCQkJUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQpIHx8CisJCQlSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpKQogICAgICAgICB7Ci0JCSAgICBBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwkJICAgIEFzaWNGb3JjZVdha2V1cChwQWQsIFJUTVBfSEFMVCk7CiAgICAgICAgIH0KIAogI2lmZGVmIFFPU19ETFNfU1VQUE9SVApAQCAtMzIzLDkgKzMwOCw3IEBACiAjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLwogCiAJCU1sbWVSYWRpb09mZihwQWQpOwotI2lmZGVmIFJUMjg2MAogCQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKQEAgLTM1OSw3ICszNDIsNiBAQAogCVRwY1JlcVRhYkV4aXQocEFkKTsKIAogCi0jaWZkZWYgUlQyODYwCiAJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFKSkKIAl7CiAJCU5JQ0Rpc2FibGVJbnRlcnJ1cHQocEFkKTsKQEAgLTM3NSw3ICszNTcsNiBAQAogCQlSVDI4WFhfSVJRX1JFTEVBU0UobmV0X2RldikKIAkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKTsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCS8vIEZyZWUgUmluZyBvciBVU0IgYnVmZmVycwpAQCAtNDM5LDEyICs0MjAsMTAgQEAKIAogCS8vIERpc2FibGUgaW50ZXJydXB0cyBoZXJlIHdoaWNoIGlzIGFzIHNvb24gYXMgcG9zc2libGUKIAkvLyBUaGlzIHN0YXRlbWVudCBzaG91bGQgbmV2ZXIgYmUgdHJ1ZS4gV2UgbWlnaHQgY29uc2lkZXIgdG8gcmVtb3ZlIGl0IGxhdGVyCi0jaWZkZWYgUlQyODYwCiAJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFKSkKIAl7CiAJCU5JQ0Rpc2FibGVJbnRlcnJ1cHQocEFkKTsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlTdGF0dXMgPSBSVE1QQWxsb2NUeFJ4UmluZ01lbW9yeShwQWQpOwogCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKQEAgLTY2NywyNiArNjQ2LDYgQEAKICNlbmRpZiAvLyBXSVJFTEVTU19FWFQgPj0gMTIgLy8KICNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLwogCi0jaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCi0jaWZkZWYgUlQyODYwCi0JSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKLQl7Ci0gICAgCS8vIElmIGRpcnZlciBkb2Vzbid0IHdha2UgdXAgZmlybXdhcmUgaGVyZSwKLSAgICAJLy8gTklDTG9hZEZpcm13YXJlIHdpbGwgaGFuZyBmb3JldmVyIHdoZW4gaW50ZXJmYWNlIGlzIHVwIGFnYWluLgotICAgIAkvLyBSVDI4NjAgUENJCi0gICAgCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpICYmCi0gICAgICAgIAlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCi0gICAgCXsKLSAgICAgICAgCUFVVE9fV0FLRVVQX1NUUlVDIEF1dG9XYWtldXBDZmc7Ci0JCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKLSAgICAgICAgCUF1dG9XYWtldXBDZmcud29yZCA9IDA7Ci0JICAgIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7Ci0gICAgICAgIAlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKLSAgICAJfQotCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KLSNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KLQogCS8vIEluaXQKICAJcE9iaiA9IChQT1NfQ09PS0lFKXBBZC0+T1NfQ29va2llOwogCkBAIC03NTMsMTAgKzcxMiw4IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCi0jaWZkZWYgUlQyODYwCiAJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKICAgICAgICAgUlRNUEluaXRQQ0llTGlua0N0cmxWYWx1ZShwQWQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiAJcmV0dXJuIChyZXR2YWwpOwpAQCAtODA4LDkgKzc2NSw3IEBACiAJZGV2LT5zdG9wID0gTWFpblZpcnR1YWxJRl9jbG9zZTsgLy9ydDI4eHhfY2xvc2U7CiAJZGV2LT5wcml2X2ZsYWdzID0gSU5UX01BSU47CiAJZGV2LT5kb19pb2N0bCA9IHJ0Mjh4eF9pb2N0bDsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQotICAgIGRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7Ci0jZW5kaWYKKwlkZXYtPnZhbGlkYXRlX2FkZHIgPSBOVUxMOwogCS8vIGZpbmQgYXZhaWxhYmxlIGRldmljZSBuYW1lCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAl7CkBAIC04MjEsMjUgKzc3NiwxMSBAQAogI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLwogCQlzcHJpbnRmKHNsb3RfbmFtZSwgInJhJWQiLCBpKTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjYpCi0gICAgICAgIGRldmljZSA9IGRldl9nZXRfYnlfbmFtZShkZXZfbmV0KGRldiksIHNsb3RfbmFtZSk7Ci0jZWxzZQotICAgICAgICBkZXZpY2UgPSBkZXZfZ2V0X2J5X25hbWUoZGV2LT5uZF9uZXQsIHNsb3RfbmFtZSk7Ci0jZW5kaWYKLSNlbHNlCi0JCWRldmljZSA9IGRldl9nZXRfYnlfbmFtZShzbG90X25hbWUpOwotI2VuZGlmCi0JCWlmIChkZXZpY2UgIT0gTlVMTCkgZGV2X3B1dChkZXZpY2UpOwotI2Vsc2UKLQkJZm9yIChkZXZpY2UgPSBkZXZfYmFzZTsgZGV2aWNlICE9IE5VTEw7IGRldmljZSA9IGRldmljZS0+bmV4dCkKLQkJewotCQkJaWYgKHN0cm5jbXAoZGV2aWNlLT5uYW1lLCBzbG90X25hbWUsIDQpID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlpZihkZXZpY2UgPT0gTlVMTCkKKwkJZGV2aWNlID0gZGV2X2dldF9ieV9uYW1lKGRldl9uZXQoZGV2KSwgc2xvdF9uYW1lKTsKKwkJaWYgKGRldmljZSAhPSBOVUxMKQorCQkJZGV2X3B1dChkZXZpY2UpOworCisJCWlmIChkZXZpY2UgPT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KIApAQCAtMTI1Miw0NyArMTE5MywyOCBAQAogICAgIFBSVE1QX0FEQVBURVIgICAgICAgcEFkID0gKFBSVE1QX0FEQVBURVIpIE5VTEw7CiAgICAgSU5UICAgICAgICAgICAgICAgICBzdGF0dXM7CiAJUFZPSUQJCQkJaGFuZGxlOwotI2lmZGVmIFJUMjg2MAogCXN0cnVjdCBwY2lfZGV2ICpkZXZfcCA9IChzdHJ1Y3QgcGNpX2RldiAqKV9kZXZfcDsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1RBIERyaXZlciB2ZXJzaW9uLSVzXG4iLCBTVEFfRFJJVkVSX1ZFUlNJT04pKTsKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAweDIwNDAyICAgICAgIC8vIFJlZCBIYXQgNy4xCi0gICAgbmV0X2RldiA9IGFsbG9jX25ldGRldihzaXplb2YoUFJUTVBfQURBUFRFUiksICJldGglZCIsIGV0aGVyX3NldHVwKTsKLSNlbHNlCiAgICAgbmV0X2RldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihQUlRNUF9BREFQVEVSKSk7Ci0jZW5kaWYKICAgICBpZiAobmV0X2RldiA9PSBOVUxMKQogICAgIHsKICAgICAgICAgcHJpbnRrKCJhbGxvY19uZXRkZXYgZmFpbGVkXG4iKTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCi0JCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotI2VuZGlmIC8vTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQotI2Vsc2UKLQkJTU9EX0RFQ19VU0VfQ09VTlQ7Ci0jZW5kaWYKICAgICAgICAgZ290byBlcnJfb3V0OwogICAgIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkKLSAgICBTRVRfTU9EVUxFX09XTkVSKG5ldF9kZXYpOwotI2VuZGlmCi0KIAluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOwogI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCiAvKiBmb3Igc3VwcG9ydGluZyBOZXR3b3JrIE1hbmFnZXIgKi8KIC8qIFNldCB0aGUgc3lzZnMgcGh5c2ljYWwgZGV2aWNlIHJlZmVyZW5jZSBmb3IgdGhlIG5ldHdvcmsgbG9naWNhbCBkZXZpY2UKICAqIGlmIHNldCBwcmlvciB0byByZWdpc3RyYXRpb24gd2lsbCBjYXVzZSBhIHN5bWxpbmsgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCiAgICAgU0VUX05FVERFVl9ERVYobmV0X2RldiwgJihkZXZfcC0+ZGV2KSk7Ci0jZW5kaWYKICNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLwogCiAJLy8gQWxsb2NhdGUgUlRNUF9BREFQVEVSIG1pbmlwb3J0IGFkYXB0ZXIgc3RydWN0dXJlCkBAIC0xMzEzLDEzICsxMjM1LDggQEAKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogCS8vIFBvc3QgY29uZmlnCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JaWYgKFJUMjhYWFByb2JlUG9zdENvbmZpZyhfZGV2X3AsIHBBZCwgYXJnYykgPT0gRkFMU0UpCi0JCWdvdG8gZXJyX291dF91bm1hcDsKLSNlbHNlCiAJaWYgKFJUMjhYWFByb2JlUG9zdENvbmZpZyhfZGV2X3AsIHBBZCwgMCkgPT0gRkFMU0UpCiAJCWdvdG8gZXJyX291dF91bm1hcDsKLSNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KIAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogCXBBZC0+T3BNb2RlID0gT1BNT0RFX1NUQTsKQEAgLTEzNjIsMjAgKzEyNzksMTIgQEAKIAlSVDI4WFhfVU5NQVAoKTsKIAogZXJyX291dF9mcmVlX25ldGRldjoKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgZnJlZV9uZXRkZXYobmV0X2Rldik7Ci0jZWxzZQotCWtmcmVlKG5ldF9kZXYpOwotI2VuZGlmCisJZnJlZV9uZXRkZXYobmV0X2Rldik7CiAKIGVycl9vdXQ6CiAJUlQyOFhYX1BVVF9ERVZJQ0UoZGV2X3ApOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JcmV0dXJuIChMT05HKU5VTEw7Ci0jZWxzZQotICAgIHJldHVybiAtRU5PREVWOyAvKiBwcm9iZSBmYWlsICovCi0jZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisJcmV0dXJuIC1FTk9ERVY7IC8qIHByb2JlIGZhaWwgKi8KIH0gLyogRW5kIG9mIHJ0Mjh4eF9wcm9iZSAqLwogCiAKQEAgLTE0OTUsNDAgKzE0MDQsNiBAQAogCiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAweDIwNDAyCS8vIFJlZCBIYXQgNy4xCi1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2KAotCWludCBzaXplb2ZfcHJpdiwKLQljb25zdCBjaGFyICptYXNrLAotCXZvaWQgKCpzZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKikpCi17Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKLSAgICBJTlQJCQkJCWFsbG9jX3NpemU7Ci0KLQotICAgIC8qIGVuc3VyZSAzMi1ieXRlIGFsaWdubWVudCBvZiB0aGUgcHJpdmF0ZSBhcmVhICovCi0gICAgYWxsb2Nfc2l6ZSA9IHNpemVvZiAoKmRldikgKyBzaXplb2ZfcHJpdiArIDMxOwotCi0gICAgZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKGRldiA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJKCJhbGxvY19uZXRkZXY6IFVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2UgbWVtb3J5LlxuIikpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBtZW1zZXQoZGV2LCAwLCBhbGxvY19zaXplKTsKLQotICAgIGlmIChzaXplb2ZfcHJpdikKLSAgICAgICAgZGV2LT5wcml2ID0gKHZvaWQgKikgKCgobG9uZykoZGV2ICsgMSkgKyAzMSkgJiB+MzEpOwotCi0gICAgc2V0dXAoZGV2KTsKLSAgICBzdHJjcHkoZGV2LT5uYW1lLCBtYXNrKTsKLQotICAgIHJldHVybiBkZXY7Ci19Ci0jZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCi0KLQogdm9pZCBDZmdJbml0SG9vayhQUlRNUF9BREFQVEVSIHBBZCkKIHsKIAlwQWQtPmJCcm9hZENvbUhUID0gVFJVRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfcHJvZmlsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wcm9maWxlLmMKaW5kZXggMzI2YTNjYi4uNjIxNDFmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wcm9maWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wcm9maWxlLmMKQEAgLTE0NTEsNyArMTQ1MSw3IEBACiAJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAJCQkJCXsKIAkJCQkJCS8vUFNNb2RlCi0JCQkJCQlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiUFNNb2RlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJQU01vZGUiLCB0bXBidWYsIDMyLCBidWZmZXIpKQogCQkJCQkJewogCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKIAkJCQkJCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCmluZGV4IDQxMTk1NDIuLmI5MDRiNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCkBAIC0yMDMsOSArMjAzLDcgQEAKIAlCT09MRUFOCWJSeEZlcjsKIAlCT09MRUFOCWJRQVR4U3RhcnQ7IC8vIEhhdmUgY29tcGlsZWQgUUEgaW4gYW5kIHVzZSBpdCB0byBBVEUgdHguCiAJQk9PTEVBTgliUUFSeFN0YXJ0OwkvLyBIYXZlIGNvbXBpbGVkIFFBIGluIGFuZCB1c2UgaXQgdG8gQVRFIHJ4LgotI2lmZGVmIFJUMjg2MAogCUJPT0xFQU4JYkZXTG9hZGluZzsJLy8gUmVsb2FkIGZpcm13YXJlIHdoZW4gQVRFIGlzIGRvbmUuCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJVUlOVDMyCVJ4VG90YWxDbnQ7CiAJVUlOVDMyCVJ4Q250UGVyU2VjOwogCkBAIC0zNjYsNiArMzY0LDEzIEBACiAjZGVmaW5lIFJUTVBfVEVTVF9GTEFHKF9NLCBfRikgICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgIT0gMCkKICNkZWZpbmUgUlRNUF9URVNUX0ZMQUdTKF9NLCBfRikgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSA9PSAoX0YpKQogCisvLyBNYWNybyBmb3IgcG93ZXIgc2F2ZSBmbGFnLgorI2RlZmluZSBSVE1QX1NFVF9QU0ZMQUcoX00sIF9GKSAgICAgICAoKF9NKS0+UFNGbGFncyB8PSAoX0YpKQorI2RlZmluZSBSVE1QX0NMRUFSX1BTRkxBRyhfTSwgX0YpICAgICAoKF9NKS0+UFNGbGFncyAmPSB+KF9GKSkKKyNkZWZpbmUgUlRNUF9DTEVBUl9QU0ZMQUdTKF9NKSAgICAgICAgKChfTSktPlBTRmxhZ3MgPSAwKQorI2RlZmluZSBSVE1QX1RFU1RfUFNGTEFHKF9NLCBfRikgICAgICAoKChfTSktPlBTRmxhZ3MgJiAoX0YpKSAhPSAwKQorI2RlZmluZSBSVE1QX1RFU1RfUFNGTEFHUyhfTSwgX0YpICAgICAoKChfTSktPlBTRmxhZ3MgJiAoX0YpKSA9PSAoX0YpKQorCiAjZGVmaW5lIE9QU1RBVFVTX1NFVF9GTEFHKF9wQWQsIF9GKSAgICAgKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgfD0gKF9GKSkKICNkZWZpbmUgT1BTVEFUVVNfQ0xFQVJfRkxBRyhfcEFkLCBfRikgICAoKF9wQWQpLT5Db21tb25DZmcuT3BTdGF0dXNGbGFncyAmPSB+KF9GKSkKICNkZWZpbmUgT1BTVEFUVVNfVEVTVF9GTEFHKF9wQWQsIF9GKSAgICAoKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgJiAoX0YpKSAhPSAwKQpAQCAtNDc4LDcgKzQ4Myw2IEBACiAvLwogI2RlZmluZSBNQVhfQlVTWV9DT1VOVCAgMTAwICAgICAgICAgLy8gTnVtYmVyIG9mIHJldHJ5IGJlZm9yZSBmYWlsaW5nIGFjY2VzcyBCQlAgJiBSRiBpbmRpcmVjdCByZWdpc3RlcgogLy8KLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgUlRNUF9SRl9JT19XUklURTMyKF9BLCBfVikgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFBIWV9DU1I0X1NUUlVDICBWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY0Miw3ICs2NDYsNiBAQAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAjZGVmaW5lICAgICBNQVBfQ0hBTk5FTF9JRF9UT19LSFooY2gsIGtoeikgIHsgICAgICAgICAgICAgICBcCkBAIC04OTQsNyArODk3LDYgQEAKIC8vIEVucXVldWUgdGhpcyBmcmFtZSB0byBNTE1FIGVuZ2luZQogLy8gV2UgbmVlZCB0byBlbnF1ZXVlIHRoZSB3aG9sZSBmcmFtZSBiZWNhdXNlIE1MTUUgbmVlZCB0byBwYXNzIGRhdGEgdHlwZQogLy8gaW5mb3JtYXRpb24gZnJvbSA4MDIuMTEgaGVhZGVyCi0jaWZkZWYgUlQyODYwCiAjZGVmaW5lIFJFUE9SVF9NR01UX0ZSQU1FX1RPX01MTUUoX3BBZCwgV2NpZCwgX3BGcmFtZSwgX0ZyYW1lU2l6ZSwgX1Jzc2kwLCBfUnNzaTEsIF9Sc3NpMiwgX1BsY3BTaWduYWwpICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFVJTlQzMiBIaWdoMzJUU0YsIExvdzMyVFNGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC05MDIsNyArOTA0LDYgQEAKICAgICBSVE1QX0lPX1JFQUQzMihfcEFkLCBUU0ZfVElNRVJfRFcwLCAmTG93MzJUU0YpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTWxtZUVucXVldWVGb3JSZWN2KF9wQWQsIFdjaWQsIEhpZ2gzMlRTRiwgTG93MzJUU0YsIChVQ0hBUilfUnNzaTAsIChVQ0hBUilfUnNzaTEsKFVDSEFSKV9Sc3NpMixfRnJhbWVTaXplLCBfcEZyYW1lLCAoVUNIQVIpX1BsY3BTaWduYWwpOyAgIFwKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogI2RlZmluZSBORElTX1FVRVJZX0JVRkZFUihfTmRpc0J1ZiwgX3BwVkEsIF9wQnVmTGVuKSAgICAgICAgICAgICAgICAgICAgXAogICAgIE5kaXNRdWVyeUJ1ZmZlcihfTmRpc0J1ZiwgX3BwVkEsIF9wQnVmTGVuKQpAQCAtOTE5LDkgKzkyMCwxMCBAQAogI2RlZmluZSBTVEFfUE9SVF9TRUNVUkVEKF9wQWQpIFwKIHsgXAogCV9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyBcCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmX3BBZC0+TWFjVGFiTG9jayk7IFwKKwlSVE1QX1NFVF9QU0ZMQUcoX3BBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsgXAorCU5kaXNBY3F1aXJlU3BpbkxvY2soJihfcEFkKS0+TWFjVGFiTG9jayk7IFwKIAlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Qb3J0U2VjdXJlZCA9IF9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZDsgXAotCU5kaXNSZWxlYXNlU3BpbkxvY2soJl9wQWQtPk1hY1RhYkxvY2spOyBcCisJTmRpc1JlbGVhc2VTcGluTG9jaygmKF9wQWQpLT5NYWNUYWJMb2NrKTsgXAogfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCkBAIC0xMDAwLDkgKzEwMDIsNyBAQAogCVVDSEFSIAkJRGF0YU9mZnNldDsKIAlVU0hPUlQgCQlEYXRhc2l6ZTsKIAlVTE9ORyAgICAgICAgICAgICAgICAgICBBbGxvY1NpemU7Ci0jaWZkZWYgUlQyODYwCiAJTkRJU19QSFlTSUNBTF9BRERSRVNTICAgQWxsb2NQYTsgICAgICAgICAgICAvLyBUeEJ1ZiBwaHlzaWNhbCBhZGRyZXNzCi0jZW5kaWYgLy8gUlQyODYwIC8vCiB9ICAgUlRNUF9SRU9SREVSQlVGLCAqUFJUTVBfUkVPUkRFUkJVRjsKIAogLy8KQEAgLTExMDEsNiArMTEwMSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9DT1VOVEVSX1JBTElOSyB7CiAJVUxPTkcgICAgICAgICAgIFRyYW5zbWl0dGVkQnl0ZUNvdW50OyAgIC8vIGJvdGggc3VjY2Vzc2Z1bCBhbmQgZmFpbHVyZSwgdXNlZCB0byBjYWxjdWxhdGUgVFggdGhyb3VnaHB1dAorCVVMT05HICAgICAgICAgICBMYXN0UmVjZWl2ZWRCeXRlQ291bnQ7CiAJVUxPTkcgICAgICAgICAgIFJlY2VpdmVkQnl0ZUNvdW50OyAgICAgIC8vIGJvdGggQ1JDIG9rYXkgYW5kIENSQyBlcnJvciwgdXNlZCB0byBjYWxjdWxhdGUgUlggdGhyb3VnaHB1dAogCVVMT05HICAgICAgICAgICBCZWVuRGlzYXNzb2NpYXRlZENvdW50OwogCVVMT05HICAgICAgICAgICBCYWRDUUlBdXRvUmVjb3ZlcnlDb3VudDsKQEAgLTE0MzYsMTEgKzE0MzcsOSBAQAogCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIEFQU0RQZXJpb2RpY1RpbWVyOwogCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIExpbmtEb3duVGltZXI7CiAJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgTGlua1VwVGltZXI7Ci0jaWZkZWYgUlQyODYwCiAgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgYlBzUG9sbFRpbWVyUnVubmluZzsKICAgICBSQUxJTktfVElNRVJfU1RSVUNUICAgICBQc1BvbGxUaW1lcjsKIAlSQUxJTktfVElNRVJfU1RSVUNUICAgICBSYWRpb09uT2ZmVGltZXI7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJVUxPTkcgICAgICAgICAgICAgICAgICAgUGVyaW9kaWNSb3VuZDsKIAlVTE9ORyAgICAgICAgICAgICAgICAgICBPbmVTZWNQZXJpb2RpY1JvdW5kOwogCkBAIC0yMjI4LDkgKzIyMjcsNyBAQAogCVJUX0hUX1BIWV9JTkZPCQkJCQlEZXNpcmVkSHRQaHlJbmZvOwogCUJPT0xFQU4JCQkJCQkJYkF1dG9UeFJhdGVTd2l0Y2g7CiAKLSNpZmRlZiBSVDI4NjAKICAgICBVQ0hBUiAgICAgICBCQlBSMzsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKIAlVQ0hBUgkJCQlJRUVFODAyMTFkQ2xpZW50TW9kZTsKQEAgLTI2NjMsNyArMjY2MCw2IEBACiAJUE5FVF9ERVYJCQkJbmV0X2RldjsKIAlVTE9ORwkJCQkJVmlydHVhbElmQ250OwogCi0jaWZkZWYgUlQyODYwCiAgICAgVVNIT1JUCQkgICAgICAgICAgICBMbmtDdHJsQml0TWFzazsKICAgICBVU0hPUlQJCSAgICAgICAgICAgIFJMbmtDdHJsQ29uZmlndXJhdGlvbjsKICAgICBVU0hPUlQgICAgICAgICAgICAgICAgICBSTG5rQ3RybE9mZnNldDsKQEAgLTI2NzEsNyArMjY2Nyw5IEBACiAgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgSG9zdExua0N0cmxPZmZzZXQ7CiAJVVNIT1JUCQkgICAgICAgICAgICBQQ0llUG93ZXJTYXZlTGV2ZWw7CiAgICAJQk9PTEVBTgkJCQkJYlBDSWNsa09mZjsJCQkJCQkvLyBmbGFnIHRoYXQgaW5kaWNhdGUgaWYgdGhlIFBJQ0UgcG93ZXIgc3RhdHVzIGluIENvbmZpZ3VyYXRpb24gU1BhY2UuLgotCUJPT0xFQU4JCQkJCWJQQ0ljbGtPZmZEaXNhYmxlVHg7CQkJLy8KKyAgIAlVTE9ORwkJCQkJQ2hlY2tEbWFCdXN5Q291bnQ7ICAvLyBDaGVjayBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIENvdW50LgorICAgCVVTSE9SVAkJCQkJVGhpc1RidHROdW1Ub05leHRXYWtlVXA7CisJVUxPTkcJCQkJCVNhbWVSeEJ5dGVDb3VudDsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNjg4LDcgKzI2ODYsNiBAQAogCVJUTVBfRE1BQlVGICAgICAgICAgICAgIFJ4RGVzY1Jpbmc7ICAgICAgICAgICAgICAgICAvLyBTaGFyZWQgbWVtb3J5IGZvciBSWCBkZXNjcmlwdG9ycwogCVJUTVBfRE1BQlVGICAgICAgICAgICAgIFR4RGVzY1JpbmdbTlVNX09GX1RYX1JJTkddOyAJLy8gU2hhcmVkIG1lbW9yeSBmb3IgVHggZGVzY3JpcHRvcnMKIAlSVE1QX1RYX1JJTkcgICAgICAgICAgICBUeFJpbmdbTlVNX09GX1RYX1JJTkddOyAgICAgCS8vIEFDMH40ICsgSENDQQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAlORElTX1NQSU5fTE9DSyAgICAgICAgICBpcnFfbG9jazsKQEAgLTI3MjEsMTAgKzI3MTgsOCBAQAogLyogICAgICBSeCByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBSVDI4NjAKIAlSVE1QX1JYX1JJTkcgICAgICAgICAgICBSeFJpbmc7CiAJTkRJU19TUElOX0xPQ0sgICAgICAgICAgUnhSaW5nTG9jazsgICAgICAgICAgICAgICAgIC8vIFJ4IFJpbmcgc3BpbmxvY2sKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAKQEAgLTI4OTUsNiArMjg5MCw3IEBACiAKIAkvLyBmbGFncywgc2VlIGZSVE1QX0FEQVBURVJfeHh4IGZsYWdzCiAJVUxPTkcgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcHJlc2VudCBjdXJyZW50IGRldmljZSBzdGF0dXMKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBQU0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgLy8gUG93ZXIgU2F2ZSBvcGVyYXRpb24gZmxhZy4KIAogCS8vIGN1cnJlbnQgVFggc2VxdWVuY2UgIwogCVVTSE9SVCAgICAgICAgICAgICAgICAgIFNlcXVlbmNlOwpAQCAtMzE4MSw3ICszMTc3LDYgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotI2lmZGVmIFJUMjg2MAogLy8KIC8vIEVuYWJsZSAmIERpc2FibGUgTklDIGludGVycnVwdCB2aWEgd3JpdGluZyBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcgogLy8gU2luY2UgaXQgdXNlIEFEQVBURVIgc3RydWN0dXJlLCBpdCBoYXZlIHRvIGJlIHB1dCBhZnRlciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KQEAgLTMyMTQsNyArMzIwOSw2IEBACiAJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfSU5UX0VOQSwgMHgwMDAwMDAzMCk7IC8vIDEgOiBlbmFibGUKIAlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFKTsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogI2lmZGVmIFJUX0JJR19FTkRJQU4KIHN0YXRpYyBpbmxpbmUgVk9JRAlXcml0ZUJhY2tUb0Rlc2NyaXB0b3IoCkBAIC0zMjkxLDcgKzMyODUsNiBAQAogCQlDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiByZWFkIG9yIHVwZGF0ZSBkZXNjcmlwdG9yCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotI2lmZGVmIFJUMjg2MAogc3RhdGljIGlubGluZSBWT0lECVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKAogCUlOCVBVQ0hBUgkJCXBEYXRhLAogCUlOCVVMT05HCQkJRGVzY3JpcHRvclR5cGUpCkBAIC0zMzAxLDcgKzMyOTQsNiBAQAogCSooKFVJTlQzMiAqKShwRGF0YSArMTIpKSA9IFNXQVAzMigqKChVSU5UMzIgKikocERhdGEgKyAxMikpKTsJLy8gQnl0ZSAxMn4xNQogCSooKFVJTlQzMiAqKShwRGF0YSArIDQpKSA9IFNXQVAzMigqKChVSU5UMzIgKikocERhdGEgKyA0KSkpOwkJCQkvLyBCeXRlIDR+NywgdGhpcyBtdXN0IGJlIHN3YXBwZWQgbGFzdAogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAvKgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzU1MCw2ICszNTQyLDkgQEAKIAlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKIAlJTiAgQk9PTEVBTgkJYkhhcmRSZXNldCk7CiAKK1ZPSUQgTklDUmVzdG9yZUJCUFZhbHVlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKwogVk9JRCBOSUNJc3N1ZVJlc2V0KAogCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKIApAQCAtNDIwOCw3ICs0MjAzLDcgQEAKIAogVk9JRCBBc2ljRm9yY2VXYWtldXAoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQsCi0JSU4gQk9PTEVBTiAgICBiRnJvbVR4KTsKKwlJTiBVQ0hBUiAgICAJIExldmVsKTsKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogVk9JRCBBc2ljU2V0QnNzaWQoCkBAIC00MzA0LDExICs0Mjk5LDkgQEAKIAlJTiBVQ0hBUiAgICAgICAgIEFyZzAsCiAJSU4gVUNIQVIgICAgICAgICBBcmcxKTsKIAotI2lmZGVmIFJUMjg2MAogQk9PTEVBTiBBc2ljQ2hlY2tDb21tYW5PaygKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKIAlJTiBVQ0hBUgkJIENvbW1hbmQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiBWT0lEIE1hY0FkZHJSYW5kb21Cc3NpZCgKIAlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKQEAgLTY5NzgsNyArNjk3MSw2IEBACiAKIHZvaWQgdGJ0dF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLSNpZmRlZiBSVDI4NjAKIC8vCiAvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gY21tX2RhdGFfMjg2MC5jCiAvLwpAQCAtNzA2OSw3ICs3MDYxLDcgQEAKIAogVk9JRCBSVDI4eHhQY2lTdGFBc2ljRm9yY2VXYWtldXAoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQsCi0JSU4gQk9PTEVBTiAgICAgICBiRnJvbVR4KTsKKwlJTiBVQ0hBUiAgICAJIExldmVsKTsKIAogVk9JRCBSVDI4eHhQY2lTdGFBc2ljU2xlZXBUaGVuQXV0b1dha2V1cCgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKQEAgLTcwOTMsNyArNzA4NSw2IEBACiAKIFZPSUQgUlQyOHh4UGNpTWxtZVJhZGlvT0ZGKAogCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogVk9JRCBBc2ljVHVybk9mZlJGQ2xrKAogCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLApAQCAtNzEzMiw2ICs3MTIzLDE4IEBACiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiBWT0lEIEFzaWNTdGFCYnBUdW5pbmcoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNSZXNldEZyb21ETUFCdXN5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljUmVzZXRCQlAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNSZXNldE1BQygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQXNpY1Jlc2V0UEJGKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogdm9pZCBSVE1QX0luZGljYXRlTWVkaWFTdGF0ZSgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9kZWYuaAppbmRleCBiZTk4MjE0Li4yNWE1M2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2RlZi5oCkBAIC0xMTEsNyArMTExLDYgQEAKIC8vIEVudHJ5IG51bWJlciBmb3IgZWFjaCBETUEgZGVzY3JpcHRvciByaW5nCiAvLwogCi0jaWZkZWYgUlQyODYwCiAjZGVmaW5lIFRYX1JJTkdfU0laRSAgICAgICAgICAgIDY0IC8vNjQKICNkZWZpbmUgTUdNVF9SSU5HX1NJWkUgICAgICAgICAgMTI4CiAjZGVmaW5lIFJYX1JJTkdfU0laRSAgICAgICAgICAgIDEyOCAvLzY0CkBAIC0xMTksNyArMTE4LDYgQEAKICNkZWZpbmUgTUFYX0RNQV9ET05FX1BST0NFU1MgICAgVFhfUklOR19TSVpFCiAjZGVmaW5lIE1BWF9UWF9ET05FX1BST0NFU1MgICAgIFRYX1JJTkdfU0laRSAvLzgKICNkZWZpbmUgTE9DQUxfVFhCVUZfU0laRSAgICAgICAgMgotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKQEAgLTIxMiw2ICsyMTAsMTkgQEAKICNkZWZpbmUgZk9QX1NUQVRVU19XQUtFVVBfTk9XICAgICAgICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSAgICAgICAweDAwMDIwMDAwCiAKKy8vCisvLyAgUlRNUF9BREFQVEVSIFBTRmxhZ3MgOiByZWxhdGVkIHRvIGFkdmFuY2VkIHBvd2VyIHNhdmUuCisvLworLy8gSW5kaWNhdGUgd2hldGhlciBkcml2ZXIgY2FuIGdvIHRvIHNsZWVwIG1vZGUgZnJvbSBub3cuIFRoaXMgZmxhZyBpcyB1c2VmdWwgQUZURVIgbGluayB1cAorI2RlZmluZSBmUlRNUF9QU19DQU5fR09fU0xFRVAgICAgICAgICAgMHgwMDAwMDAwMQorLy8gSW5kaWNhdGUgd2hldGhlciBkcml2ZXIgaGFzIGlzc3VlIGEgTGlua0NvbnRyb2wgY29tbWFuZCB0byBQQ0llIEwxCisjZGVmaW5lIGZSVE1QX1BTX1NFVF9QQ0lfQ0xLX09GRl9DT01NQU5EICAgICAgICAgIDB4MDAwMDAwMDIKKy8vIEluZGljYXRlIGRyaXZlciBzaG91bGQgZGlzYWJsZSBraWNrIG9mZiBoYXJkd2FyZSB0byBzZW5kIHBhY2tldHMgZnJvbSBub3cuCisjZGVmaW5lIGZSVE1QX1BTX0RJU0FCTEVfVFggICAgICAgICAweDAwMDAwMDA0CisvLyBJbmRpY2F0ZSBkcml2ZXIgc2hvdWxkIElNTUVESUFURUxZIGZvIHRvIHNsZWVwIGFmdGVyIHJlY2VpdmluZyBBUCdzIGJlYWNvbiBpbiB3aGljaCAgZG9lc24ndCBpbmRpY2F0ZSB1bmljYXRlIG5vciBtdWx0aWNhc3QgcGFja2V0cyBmb3IgbWUKKy8vLiBUaGlzIGZsYWcgaXMgdXNlZCBPTkxZIGluIFJUTVBIYW5kbGVSeERvbmVJbnRlcnJ1cHQgcm91dGluZS4KKyNkZWZpbmUgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XICAgICAgICAgMHgwMDAwMDAwOAorCiAjaWZkZWYgRE9UMTFOX0RSQUZUMwogI2RlZmluZSBmT1BfU1RBVFVTX1NDQU5fMjA0MCAgICAgICAgICAgICAgIAkgICAgMHgwMDA0MDAwMAogI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KQEAgLTE1MTQsMTIgKzE1MjUsMTQgQEAKICNkZWZpbmUgTUNBU1RfSFRNSVgJCTMKICNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCiAKLS8vIEZvciBBc2ljUmFkaW9PZmYvQXNpY1JhZGlvT24gZnVuY3Rpb24KLSNkZWZpbmUgRE9UMTFQT1dFUlNBVkUJCTAKLSNkZWZpbmUgR1VJUkFESU9fT0ZGCQkxCi0jZGVmaW5lIFJUTVBfSEFMVAkJICAgIDIKLSNkZWZpbmUgR1VJX0lETEVfUE9XRVJfU0FWRQkJMwotLy8gLS0KKy8vIEZvciBBc2ljUmFkaW9PZmYvQXNpY1JhZGlvT24vQXNpY0ZvcmNlV2FrZXVwIGZ1bmN0aW9uCisvLyBUaGlzIGlzIHRvIGluZGljYXRlIGZyb20gd2hlcmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgorI2RlZmluZSBET1QxMVBPV0VSU0FWRQkJMAkvLyBUTyBkbyAuMTEgcG93ZXIgc2F2ZSBzbGVlcAorI2RlZmluZSBHVUlSQURJT19PRkYJCTEJLy8gVG8gcGVyZm9ybSBSYWRpbyBPRmYgY29tbWFuZCBmcm9tIEdVSQorI2RlZmluZSBSVE1QX0hBTFQJCQkyCS8vIENhbGxlZCBmcm9tIEhhbHQgaGFuZGxlci4KKyNkZWZpbmUgR1VJX0lETEVfUE9XRVJfU0FWRQkzCS8vIENhbGwgdG8gc2xlZXAgYmVmb3JlIGxpbmsgdXAgd2l0aCBBUAorI2RlZmluZSBGUk9NX1RYCQkJCTQJLy8gRm9yY2Ugd2FrZSB1cCBmcm9tIFR4IHBhY2tldC4KKwogCiAKIC8vIGRlZmluaXRpb24gZm9yIFdwYVN1cHBvcnQgZmxhZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvYXNzb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Fzc29jLmMKaW5kZXggNDJkYjc1My4uMzRmMWMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvYXNzb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9hc3NvYy5jCkBAIC00NzMsMTIgKzQ3Myw3IEBACiAJCQkJUlNOSWUgPSBJRV9XUEEyOwogCQkJfQogCi0jaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKLSNpZmRlZiBTSU9DU0lXR0VOSUUKLQkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gMSkKLSNlbmRpZiAvLyBTSU9DU0lXR0VOSUUgLy8KLSNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLwotICAgICAgICAgICAgCVJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCBCU1MwKTsKKyAgICAgICAgICAgIFJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCBCU1MwKTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFdQQSBQTUsgY2FjaGUgbGlzdAogCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCkBAIC01MDQsMTcgKzQ5OSw2IEBACiAJCQkJfQogCQkJfQogCi0jaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKLSNpZmRlZiBTSU9DU0lXR0VOSUUKLQkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gMSkKLQkJCXsKLQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgIAkJJnRtcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgCXBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwJCQlwQWQtPlN0YUNmZy5SU05fSUUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgIAlFTkRfT0ZfQVJHUyk7Ci0JCQl9Ci0JCQllbHNlCi0jZW5kaWYKLSNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLwogCQkJewogCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgCQkmdG1wLAogCQkJCSAgICAgICAgICAgICAgCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSU05JZSwKQEAgLTUyNSwxMSArNTA5LDYgQEAKIAogCQkJRnJhbWVMZW4gKz0gdG1wOwogCi0jaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKLSNpZmRlZiBTSU9DU0lXR0VOSUUKLQkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gMSkKLSNlbmRpZgotI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCiAJCQl7CiAJICAgICAgICAgICAgLy8gQXBwZW5kIFZhcmlhYmxlIElFCiAJICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmUlNOSWUsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jCmluZGV4IDM2ZjI4ZjguLmQ4YmNjNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Nvbm5lY3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMKQEAgLTMzNyw2ICszMzcsMTAgQEAKIAlNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgICBEaXNhc3NvY1JlcTsKIAlVTE9ORwkJCQkJICAgTm93OwogCisJLy8gQkJQIGFuZCBSRiBhcmUgbm90IGFjY2Vzc2libGUgaW4gUFMgbW9kZSwgd2UgaGFzIHRvIHdha2UgdGhlbSB1cCBmaXJzdAorCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorCQlBc2ljRm9yY2VXYWtldXAocEFkLCBSVE1QX0hBTFQpOworCiAJLy8gU3RlcCAxLiByZWNvcmQgdGhlIGRlc2lyZWQgdXNlciBzZXR0aW5ncyB0byBNbG1lQXV4CiAJTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIE1BWF9MRU5fT0ZfU1NJRCk7CiAJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHBPaWRTc2lkLT5Tc2lkLCBwT2lkU3NpZC0+U3NpZExlbmd0aCk7CkBAIC0xMjQwLDYgKzEyNDQsMTMgQEAKIAlVQ0hBUglWYWx1ZSA9IDAsIGlkeDsKIAlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSA9IE5VTEwsICpwQ3VyckVudHJ5OwogCisJaWYgKFJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkpCisJeworCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZCwgUkVTVE9SRV9IQUxUKTsKKwkJUlRNUHVzZWNEZWxheSg2MDAwKTsKKwkJcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7CisJfQorCiAJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CiAKIAkvLwpAQCAtMTI2NCw3ICsxMjc1LDYgQEAKIAkvL3J0Mjg2MGIuIERvbid0IGtub3cgd2h5IG5lZWQgdGhpcwogCVN3aXRjaEJldHdlZW5XZXBBbmRDa2lwKHBBZCk7CiAKLSNpZmRlZiBSVDI4NjAKIAkvLyBCZWZvcmUgcG93ZXIgc2F2ZSBiZWZvcmUgbGluayB1cCBmdW5jdGlvbiwgV2Ugd2lsbCBmb3JjZSB1c2UgMVIuCiAJLy8gU28gYWZ0ZXIgbGluayB1cCwgY2hlY2sgUnggYW50ZW5uYSAjIGFnYWluLgogCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKQEAgLTEyODIsNyArMTI5Miw2IEBACiAJfQogCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKIAlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJaWYgKEJzc1R5cGUgPT0gQlNTX0FESE9DKQogCXsKQEAgLTEzMzAsOSArMTMzOSw3IEBACiAJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKIAkJVmFsdWUgJj0gKH4weDIwKTsKIAkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgVmFsdWUpOwotI2lmZGVmIFJUMjg2MAogICAgICAgICBwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZEYXRhKTsKIAkJRGF0YSAmPSAweGZmZmZmZmZlOwpAQCAtMTM2Nyw5ICsxMzc0LDcgQEAKIAkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmVmFsdWUpOwogCSAgICBWYWx1ZSB8PSAoMHgyMCk7CiAJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKLSNpZmRlZiBSVDI4NjAKICAgICAgICAgcEFkLT5TdGFDZmcuQkJQUjMgPSBWYWx1ZTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCiAJCXsKQEAgLTE0MDAsOSArMTQwNSw3IEBACiAJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKIAkJVmFsdWUgJj0gKH4weDIwKTsKIAkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgVmFsdWUpOwotI2lmZGVmIFJUMjg2MAogICAgICAgICBwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKIAkJewpAQCAtMTU5OCw2ICsxNjAxLDggQEAKIAkJCUlWID0gMDsKIAkJCUlWIHw9IChwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPDwgMzApOwogCQkJQXNpY1VwZGF0ZVdDSURJVkVJVihwQWQsIEJTU0lEX1dDSUQsIElWLCAwKTsKKworCQkJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOwogCQl9CiAJCS8vIE5PVEU6CiAJCS8vIHRoZSBkZWNpc2lvbiBvZiB1c2luZyAic2hvcnQgc2xvdCB0aW1lIiBvciBub3QgbWF5IGNoYW5nZSBkeW5hbWljYWxseSBkdWUgdG8KQEAgLTE5MTksNiArMTkyNCw3IEBACiAJfQogCiAJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7CisJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cpOwogCiAjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCiAjaWZkZWYgRE9UMTFOX0RSQUZUMwpAQCAtMTk2MSw2ICsxOTY3LDcgQEAKIAlJTiAgQk9PTEVBTiAgICAgIElzUmVxRnJvbUFQKQogewogCVVDSEFSCQkJICAgIGksIEJ5dGVWYWx1ZSA9IDA7CisJQk9PTEVBTgkJQ2FuY2VsbGVkOwogCiAJLy8gRG8gbm90aGluZyBpZiBtb25pdG9yIG1vZGUgaXMgb24KIAlpZiAoTU9OSVRPUl9PTihwQWQpKQpAQCAtMTk3Miw2ICsxOTc5LDEyIEBACiAJCXJldHVybjsKICNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCiAKKwlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0dPX1RPX1NMRUVQX05PVyk7CisJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsCQkmQ2FuY2VsbGVkKTsKKworCS8vIE5vdCBhbGxvdyBnbyB0byBzbGVlcCB3aXRoaW4gbGlua2Rvd24gZnVuY3Rpb24uCisJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOworCiAgICAgaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQogCXsKIAkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CkBAIC0xOTgwLDcgKzE5OTMsNiBAQAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIERPV04gISEhXG4iKSk7CiAJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKTsKIAotI2lmZGVmIFJUMjg2MAogICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAgICAgewogCSAgICBCT09MRUFOIENhbmNlbGxlZDsKQEAgLTE5ODgsMTcgKzIwMDAsMTUgQEAKICAgICAgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsCSZDYW5jZWxsZWQpOwogICAgIH0KIAotICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorICAgIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpIHx8CisJCVJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkgfHwKKwkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSkKICAgICB7Ci0gICAgICAgIEFVVE9fV0FLRVVQX1NUUlVDIEF1dG9XYWtldXBDZmc7Ci0JCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOwotICAgICAgICBBdXRvV2FrZXVwQ2ZnLndvcmQgPSAwOwotCSAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7CisJCUFzaWNGb3JjZVdha2V1cChwQWQsIFJUTVBfSEFMVCk7CiAgICAgICAgIE9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwogICAgIH0KIAogICAgIHBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCWlmIChBREhPQ19PTihwQWQpKQkJLy8gQWRob2MgbW9kZSBsaW5rIGRvd24KIAl7CiAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIERPV04gMSEhIVxuIikpOwpAQCAtMjI2Niw2ICsyMjc2LDkgQEAKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQVhfTEVOX0NGRywgMHgxZmZmKTsKIAlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKIAorCS8vIEFsbG93IGdvIHRvIHNsZWVwIGFmdGVyIGxpbmtkb3duIHN0ZXBzLgorCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCiAjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCiAJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCkgewpAQCAtMjUxMCw3ICsyNTIzLDYgQEAKIAogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KLSNpZmRlZiBSVDI4NjAKIFZPSUQgQ29tcG9zZVBzUG9sbCgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCkKIHsKQEAgLTI1MzQsNyArMjU0Niw2IEBACiAJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CiAJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvZGxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9kbHMuYwppbmRleCA3OGZiMjg5Li44NzNjZjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9kbHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9kbHMuYwpAQCAtMTQxOSw3ICsxNDE5LDYgQEAKIAkJCQkvL0FzaWNBZGRLZXlFbnRyeShwQWQsIChVU0hPUlQpKGkgKyAyKSwgQlNTMCwgMCwgJlBhaXJ3aXNlS2V5LCBUUlVFLCBUUlVFKTsJLy8gcmVzZXJ2ZSAwIGZvciBtdWx0aWNhc3QsIDEgZm9yIHVuaWNhc3QKIAkJCQkvL0FzaWNVcGRhdGVSeFdDSURUYWJsZShwQWQsIChVU0hPUlQpKGkgKyAyKSwgcEFkZHIpOwogCQkJCS8vIEFkZCBQYWlyLXdpc2Uga2V5IHRvIEFzaWMKLSNpZmRlZiBSVDI4NjAKICAgICAgICAgICAgIAlBc2ljQWRkUGFpcndpc2VLZXlFbnRyeShwQWQsCiAJCQkJCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwKIAkJCQkJCQkJCQkoVUNIQVIpcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELApAQCAtMTQzMSw3ICsxNDMwLDYgQEAKIAkJCQkJCQkJCQkgIFBhaXJ3aXNlS2V5LkNpcGhlckFsZywKIAkJCQkJCQkJCQkgIHBFbnRyeSk7CiAKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleSwgJlBhaXJ3aXNlS2V5LCBzaXplb2YoQ0lQSEVSX0tFWSkpOwogCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIChQZWVyIFNUQSBNQUMgQWRkcmVzcyBTVEFLZXkpIFxuIikpOwogCkBAIC0xNDc3LDcgKzE0NzUsNiBAQAogCQkJCS8vQXNpY0FkZEtleUVudHJ5KHBBZCwgKFVTSE9SVCkoaSArIDIpLCBCU1MwLCAwLCAmUGFpcndpc2VLZXksIFRSVUUsIFRSVUUpOwkvLyByZXNlcnZlIDAgZm9yIG11bHRpY2FzdCwgMSBmb3IgdW5pY2FzdAogCQkJCS8vQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKHBBZCwgKFVTSE9SVCkoaSArIDIpLCBwQWRkcik7CiAJCQkJLy8gQWRkIFBhaXItd2lzZSBrZXkgdG8gQXNpYwotI2lmZGVmIFJUMjg2MAogICAgICAgICAgICAgCUFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KHBBZCwKIAkJCQkJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyLAogCQkJCQkJCQkJCShVQ0hBUilwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQsCkBAIC0xNDg4LDcgKzE0ODUsNiBAQAogCQkJCQkJCQkJCSAgMCwKIAkJCQkJCQkJCQkgIFBhaXJ3aXNlS2V5LkNpcGhlckFsZywKIAkJCQkJCQkJCQkgIHBFbnRyeSk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXksICZQYWlyd2lzZUtleSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKIAkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFJlY2VpdmUgU1RBS2V5IE1lc3NhZ2UtMSAoSW5pdGlhdG9yIFNUQSBNQUMgQWRkcmVzcyBTVEFLZXkpXG4iKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3J0bXBfZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvcnRtcF9kYXRhLmMKaW5kZXggMzZhZmYyNC4uYzVlNzZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvcnRtcF9kYXRhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvcnRtcF9kYXRhLmMKQEAgLTc1LDcgKzc1LDYgQEAKIAogICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuID4gMCkKICAgICAJCQkJewotI2lmZGVmIFJUMjg2MAogCQkJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKIAogCQkJCQkJLy8gU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMKQEAgLTg5LDcgKzg4LDYgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCQkJLy8gRm9yIFByZXZlbnRpbmcgU2hhcmRLZXkgVGFibGUgaXMgY2xlYXJlZCBieSByZW1vdmUga2V5IHByb2NlZHVyZS4KICAgICAJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOwogCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW4gPSBwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbaWR4XS5LZXlMZW47CkBAIC02OTMsMTQgKzY5MSwxMiBAQAogCQkJYnJlYWs7CiAJCX0KIAotI2lmZGVmIFJUMjg2MAogCQlpZiAoUnhQcm9jZXNzZWQrKyA+IE1BWF9SWF9QUk9DRVNTX0NOVCkKIAkJewogCQkJLy8gbmVlZCB0byByZXNjaGVkdWxlIHJ4IGhhbmRsZQogCQkJYlJlc2NoZWR1bGUgPSBUUlVFOwogCQkJYnJlYWs7CiAJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlSeFByb2Nlc3NlZCArKzsgLy8gdGVzdAogCkBAIC04MTEsNiArODA3LDEzIEBACiAJCX0KIAl9CiAKKwkvLyBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cgaXMgc2V0IGlmIHJlY2VpdmluZyBiZWFjb24uCisJaWYgKFJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cpICYmIChJTkZSQV9PTihwQWQpKSkKKwl7CisJCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XKTsKKwkJQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBwQWQtPlRoaXNUYnR0TnVtVG9OZXh0V2FrZVVwKTsKKwkJYlJlc2NoZWR1bGUgPSBGQUxTRTsKKwl9CiAJcmV0dXJuIGJSZXNjaGVkdWxlOwogfQogCkBAIC04MjgsNyArODMxLDcgQEAKIFZPSUQJUlRNUEhhbmRsZVR3YWtldXBJbnRlcnJ1cHQoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQpCiB7Ci0JQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRkFMU0UpOworCUFzaWNGb3JjZVdha2V1cChwQWQsIERPVDExUE9XRVJTQVZFKTsKIH0KIAogLyoKQEAgLTEyMjAsNyArMTIyMyw2IEBACiAKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi0jaWZkZWYgUlQyODYwCiBORElTX1NUQVRVUyBSVE1QRnJlZVRYRFJlcXVlc3QoCiAJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAogCUlOCQlVQ0hBUgkJCVF1ZUlkeCwKQEAgLTEyNjQsNyArMTI2Niw2IEBACiAKIAlyZXR1cm4gKFN0YXR1cyk7CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCkBAIC0xODg5LDcgKzE4OTAsOCBAQAogCQkvLwogCQkvLyBLaWNrIG91dCBUeAogCQkvLwotCQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CisJCWlmICghUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpKQorCQkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOwogCiAJCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKIAkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOwpAQCAtMjAxOSw3ICsyMDIxLDggQEAKIAkvLwogCS8vIEtpY2sgb3V0IFR4CiAJLy8KLQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CisJaWYgKCFSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCkpCisJCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKIH0KICNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KIApAQCAtMjEzOSw3ICsyMTQyLDggQEAKIAkvLwogCS8vIEtpY2sgb3V0IFR4CiAJLy8KLQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CisJaWYgKCFSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCkpCisJCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKIH0KIAogCkBAIC0yMjQ5LDcgKzIyNTMsOCBAQAogCS8vCiAJLy8gS2ljayBvdXQgVHgKIAkvLwotCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKKwlpZiAoIVJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKSkKKwkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOwogCiB9CiAKQEAgLTI1MjYsNyArMjUzMSw3IEBACiAJaWYgKChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCiAJewogCSAgICBEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQXNpY0ZvcmNlV2FrZXVwIEF0IEhhcmRUeFxuIikpOwotCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRlJPTV9UWCk7CiAJfQogCiAJLy8gSXQgc2hvdWxkIG5vdCBjaGFuZ2UgUFNNIGJpdCwgd2hlbiBBUFNEIHR1cm4gb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9zeW5jLmMKaW5kZXggZDE5NmY4NS4uMTQ4MDM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvc3luYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3N5bmMuYwpAQCAtMjI4LDcgKzIyOCw2IEBACiAJLy8gSW5jcmVhc2UgdGhlIHNjYW4gcmV0cnkgY291bnRlcnMuCiAJcEFkLT5TdGFDZmcuU2NhbkNudCsrOwogCi0jaWZkZWYgUlQyODYwCiAgICAgaWYgKChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpICYmCiAgICAgICAgIChJRExFX09OKHBBZCkpICYmCiAJCShwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkgJiYKQEAgLTIzNiw3ICsyMzUsNiBAQAogCXsKIAkJUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkLCBHVUlfSURMRV9QT1dFUl9TQVZFKTsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAkvLyBmaXJzdCBjaGVjayB0aGUgcGFyYW1ldGVyIHNhbml0eQogCWlmIChNbG1lU2NhblJlcVNhbml0eShwQWQsCkBAIC0zNDksNyArMzQ3LDYgQEAKIAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBNbG1lSm9pblJlcUFjdGlvbihCU1MgIyVsZClcbiIsIHBJbmZvLT5Cc3NJZHgpKTsKIAotI2lmZGVmIFJUMjg2MAogICAgIGlmICgoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKSAmJgogICAgICAgICAoSURMRV9PTihwQWQpKSAmJgogCQkocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpICYmCkBAIC0zNTcsNyArMzU0LDYgQEAKIAl7CiAJCVJUMjh4eFBjaUFzaWNSYWRpb09uKHBBZCwgR1VJX0lETEVfUE9XRVJfU0FWRSk7CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJLy8gcmVzZXQgYWxsIHRoZSB0aW1lcnMKIAlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CkBAIC0xNTMyLDEzICsxNTI4LDEwIEBACiAJCQkJLy8gIDUuIG90aGVyd2lzZSwgcHV0IFBIWSBiYWNrIHRvIHNsZWVwIHRvIHNhdmUgYmF0dGVyeS4KIAkJCQlpZiAoTWVzc2FnZVRvTWUpCiAJCQkJewotI2lmZGVmIFJUMjg2MAogCQkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogCQkJCQl7CiAJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBwQWQtPlN0YUNmZy5CQlBSMyk7Ci0JCQkJCQkvLyBUdXJuIGNsayB0byA4ME1oei4KIAkJCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlICYmCiAJCQkJCQlwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFICYmIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WSSAmJiBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPKQogCQkJCQl7CkBAIC0xNTQ5LDEyICsxNTQyLDEwIEBACiAJCQkJfQogCQkJCWVsc2UgaWYgKEJjYXN0RmxhZyAmJiAoRHRpbUNvdW50ID09IDApICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKSkKIAkJCQl7Ci0jaWZkZWYgUlQyODYwCiAJCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAJCQkJCXsKIAkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIHBBZC0+U3RhQ2ZnLkJCUFIzKTsKIAkJCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCX0KIAkJCQllbHNlIGlmICgocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5OdW1iZXIgIT0gMCkJCQkJCQkJCQkJCQkJfHwKIAkJCQkJCShwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdLk51bWJlciAhPSAwKQkJCQkJCQkJCQkJCQkJfHwKQEAgLTE1NjgsMTIgKzE1NTksMTAgQEAKIAkJCQl7CiAJCQkJCS8vIFRPRE86IGNvbnNpZGVyIHNjaGVkdWxlZCBIQ0NBLiBtaWdodCBub3QgYmUgcHJvcGVyIHRvIHVzZSB0cmFkaXRpb25hbCBEVElNLWJhc2VkIHBvd2VyLXNhdmluZyBzY2hlbWUKIAkJCQkJLy8gY2FuIHdlIGNoZWF0IGhlcmUgKGkuZS4ganVzdCBjaGVjayBNR01UICYgQUNfQkUpIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2U/Ci0jaWZkZWYgUlQyODYwCiAJCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAJCQkJCXsKIAkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIHBBZC0+U3RhQ2ZnLkJCUFIzKTsKIAkJCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewpAQCAtMTU4OCw3ICsxNTc3LDEwIEBACiAKIAkJCQkJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQogCQkJCQl7Ci0JCQkJCQlBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApOworCQkJCQkJLy8gU2V0IGEgZmxhZyB0byBnbyB0byBzbGVlcCAuIFRoZW4gYWZ0ZXIgcGFyc2UgdGhpcyBSeERvbmVJbnRlcnJ1cHQsIHdpbGwgZ28gdG8gc2xlZXAgbW9kZS4KKwkJCQkJCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0dPX1RPX1NMRUVQX05PVyk7CisJCQkJCQlwQWQtPlRoaXNUYnR0TnVtVG9OZXh0V2FrZVVwID0gVGJ0dE51bVRvTmV4dFdha2VVcDsKKwkJCQkJCS8vQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvd3BhLmMKaW5kZXggNzc0YzY1Ni4uMjYwOWQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvd3BhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvd3BhLmMKQEAgLTEzODQsNiArMTM4NCwxMCBAQAogCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKIAkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKIAkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKwkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkKQorCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQpCisJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CiAKICAgICAJLy9oZXhfZHVtcCgiR3JvdXAgS2V5IDoiLCBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwgTEVOX1RLSVBfRUspOwogCX0KQEAgLTE3NjAsNyArMTc2NCw3IEBACiAJLy8gR2V0IEdUSyBsZW5ndGggLSByZWZlciB0byBJRUVFIDgwMi4xMWktMjAwNCBwLjgyCiAJR1RLTEVOID0gcEtERS0+TGVuIC02OwogCi0JaWYgKEdUS0xFTiA8IExFTl9BRVNfS0VZKQorCWlmIChHVEtMRU4gPCBNSU5fTEVOX09GX0dUSykKIAl7CiAJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGxlbmd0aCBpcyB0b28gc2hvcnQgKCVkKSBcbiIsIEdUS0xFTikpOwogICAgICAgICByZXR1cm4gRkFMU0U7CkBAIC0xNzg2LDYgKzE3OTAsMTAgQEAKIAkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKIAllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQogCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CiAKIAlyZXR1cm4gVFJVRTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMKaW5kZXggM2VhMmIyYy4uYzU0NTJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jCkBAIC00OSwxNSArNDksOSBAQAogCiAjZGVmaW5lIEdST1VQX0tFWV9OTyAgICAgICAgICAgICAgICA0CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogI2RlZmluZSBJV0VfU1RSRUFNX0FERF9FVkVOVChfQSwgX0IsIF9DLCBfRCwgX0UpCQlpd2Vfc3RyZWFtX2FkZF9ldmVudChfQSwgX0IsIF9DLCBfRCwgX0UpCiAjZGVmaW5lIElXRV9TVFJFQU1fQUREX1BPSU5UKF9BLCBfQiwgX0MsIF9ELCBfRSkJCWl3ZV9zdHJlYW1fYWRkX3BvaW50KF9BLCBfQiwgX0MsIF9ELCBfRSkKICNkZWZpbmUgSVdFX1NUUkVBTV9BRERfVkFMVUUoX0EsIF9CLCBfQywgX0QsIF9FLCBfRikJaXdlX3N0cmVhbV9hZGRfdmFsdWUoX0EsIF9CLCBfQywgX0QsIF9FLCBfRikKLSNlbHNlCi0jZGVmaW5lIElXRV9TVFJFQU1fQUREX0VWRU5UKF9BLCBfQiwgX0MsIF9ELCBfRSkJCWl3ZV9zdHJlYW1fYWRkX2V2ZW50KF9CLCBfQywgX0QsIF9FKQotI2RlZmluZSBJV0VfU1RSRUFNX0FERF9QT0lOVChfQSwgX0IsIF9DLCBfRCwgX0UpCQlpd2Vfc3RyZWFtX2FkZF9wb2ludChfQiwgX0MsIF9ELCBfRSkKLSNkZWZpbmUgSVdFX1NUUkVBTV9BRERfVkFMVUUoX0EsIF9CLCBfQywgX0QsIF9FLCBfRikJaXdlX3N0cmVhbV9hZGRfdmFsdWUoX0IsIF9DLCBfRCwgX0UsIF9GKQotI2VuZGlmCiAKIGV4dGVybiBVQ0hBUiAgICBDaXBoZXJXcGEyVGVtcGxhdGVbXTsKIGV4dGVybiBVQ0hBUiAgICBDaXBoZXJXcGFQc2tUa2lwW107CkBAIC0zNTgsNiArMzUyLDIwIEBACiAKICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QQWRkS2V5IC0tLS0tLT5cbiIpKTsKIAorCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKwlpZiAoUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX1NFVF9QQ0lfQ0xLX09GRl9DT01NQU5EKSkKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gRkFMU0UpCisJCXsKKwkJCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisJCQlyZXR1cm47CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QV1BBQWRkS2V5UHJvYzE9PT5cbiIpKTsKKwkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWQsIFJFU1RPUkVfSEFMVCk7CisJCVJUTVB1c2VjRGVsYXkoNjAwMCk7CisJCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOworCX0KKwogCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCiAJewogCQlpZiAocEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKQpAQCAtNTUxLDYgKzU1OSw4IEBACiAJCX0KIAl9CiBlbmQ6CisJUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKyAgICBEQkdQUklOVChSVF9ERUJVR19JTkZPLCAoIjwtLS0tLS0gUlRNUEFkZEtleVxuIikpOwogCXJldHVybjsKIH0KIApAQCAtNTczLDkgKzU4Myw3IEBACiB7CiAvLwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OwogCi0jaWZkZWYgUlQyODYwCiAgICAgc3RybmNweShuYW1lLCAiUlQyODYwIFdpcmVsZXNzIiwgSUZOQU1TSVopOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCXJldHVybiAwOwogfQogCkBAIC02NzAsMTEgKzY3OCw5IEBACiAJCWNhc2UgSVdfTU9ERV9JTkZSQToKIAkJCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiSW5mcmEiKTsKIAkJCWJyZWFrOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDQsMjApKQogICAgICAgICBjYXNlIElXX01PREVfTU9OSVRPUjoKIAkJCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiTW9uaXRvciIpOwogCQkJYnJlYWs7Ci0jZW5kaWYKIAkJZGVmYXVsdDoKIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT5ydF9pb2N0bF9zaXdtb2RlOjpTSU9DU0lXTU9ERSAodW5rbm93biAlZClcbiIsICptb2RlKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTcxNSwxMiArNzIxLDEwIEBACiAJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKICAgICBlbHNlIGlmIChJTkZSQV9PTihwQWRhcHRlcikpCiAJCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDIwKSkKICAgICBlbHNlIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKICAgICB7CiAgICAgICAgICptb2RlID0gSVdfTU9ERV9NT05JVE9SOwogICAgIH0KLSNlbmRpZgogICAgIGVsc2UKICAgICAgICAgKm1vZGUgPSBJV19NT0RFX0FVVE87CiAKQEAgLTEwMzgsNiArMTA0MiwxNSBAQAogICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICB9CiAKKwlpZiAoKHBBZGFwdGVyLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgKElETEVfT04ocEFkYXB0ZXIpKQorCQkmJiAocEFkYXB0ZXItPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkKKwkJJiYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSkpCisJeworCQlSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWRhcHRlciwgR1VJX0lETEVfUE9XRVJfU0FWRSk7CisJfQorCS8vIENoZWNrIGlmIHN0aWxsIHJhZGlvIG9mZi4KKwllbHNlIGlmIChwQWRhcHRlci0+YlBDSWNsa09mZiA9PSBUUlVFKQorCQlyZXR1cm4gMDsKIAogI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKIAlpZiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFKQpAQCAtMTc1Niw3ICsxNzY5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgZWxzZQogCQkJLyogRG9uJ3QgY29tcGxhaW4gaWYgb25seSBjaGFuZ2UgdGhlIG1vZGUgKi8KLQkJCWlmKCFlcnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpIHsKKwkJCWlmICghKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTU9ERSkpIHsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTIxNjEsMTIgKzIxNzQsNiBAQAogICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSQUlPX09OOgotICAgICAgICAgICAgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIlNjYW5uaW5nXG4iKTsKLSAgICAgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvID0gVFJVRTsKICAgICAgICAgICAgIC8vaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyAhPSAocEFkLT5TdGFDZmcuYkh3UmFkaW8gJiYgcEFkLT5TdGFDZmcuYlN3UmFkaW8pKQogICAgICAgICAgICAgewpAQCAtMjQ1MCw2ICsyNDU3LDIwIEBACiAgICAgSU4gIEJPT0xFQU4gICAgICAgICBiR1RLLAogICAgIElOICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0KQogeworCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZGFwdGVyLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOworCWlmIChSVE1QX1RFU1RfUFNGTEFHKHBBZGFwdGVyLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkpCisJeworCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5iUmFkaW8gPT0gRkFMU0UpCisJCXsKKwkJCVJUTVBfU0VUX1BTRkxBRyhwQWRhcHRlciwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKwkJCXJldHVybjsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBXUEFBZGRLZXlQcm9jMT09PlxuIikpOworCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZGFwdGVyLCBSRVNUT1JFX0hBTFQpOworCQlSVE1QdXNlY0RlbGF5KDYwMDApOworCQlwQWRhcHRlci0+YlBDSWNsa09mZiA9IEZBTFNFOworCX0KKwogICAgIE5kaXNaZXJvTWVtb3J5KCZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CiAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IExFTl9US0lQX0VLOwogICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksIGV4dC0+a2V5LCBMRU5fVEtJUF9FSyk7CkBAIC0yNDgwLDYgKzI1MDEsOCBAQAogICAgIAkJCQkJCQkgIGtleUlkeCwKICAgICAJCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLAogICAgIAkJCQkJCQkgICZwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0pOworCisJUlRNUF9TRVRfUFNGTEFHKHBBZGFwdGVyLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOwogfQogCiBpbnQgcnRfaW9jdGxfc2l3ZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yNTQ0LDYgKzI1NjcsMjEgQEAKIAogICAgICAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksICAxNik7CiAJCQkgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisKKwkJCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQgfHwKKwkJCQkJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKQorCQkJCXsKKwkJCQkJLy8gU2V0IEdyb3VwIGtleSBtYXRlcmlhbCB0byBBc2ljCisJCQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgQlNTMCwga2V5SWR4LCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LCBOVUxMLCBOVUxMKTsKKworCQkJCQkvLyBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGdyb3VwIGtleSB0YWJsZQorCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBrZXlJZHgsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcsIE5VTEwpOworCisJCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworCisgICAgCQkJCS8vIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJCisgICAgCQkJCXBBZGFwdGVyLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKwkJCQl9CiAgICAgCQkJYnJlYWs7CiAgICAgICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfRU5DT0RFX0FMR19US0lQIC0ga2V5SWR4ID0gJWQsIGV4dC0+a2V5X2xlbiA9ICVkXG4iLCBfX2Z1bmNfXywga2V5SWR4LCBleHQtPmtleV9sZW4pKTsKQEAgLTQyNTksNyArNDI5NywyMyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCi0gICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKQorCQkJCQlpZiAoKHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICE9IDApICYmCisJCQkJCQkocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpKQorCQkJCQl7CisJCQkJCQlLZXkgPSBwV2VwS2V5LT5LZXlNYXRlcmlhbDsKKworCQkJCQkJLy8gU2V0IEdyb3VwIGtleSBtYXRlcmlhbCB0byBBc2ljCisgICAgCQkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsIEJTUzAsIEtleUlkeCwgQ2lwaGVyQWxnLCBLZXksIE5VTEwsIE5VTEwpOworCisJCQkJCQkvLyBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGdyb3VwIGtleSB0YWJsZQorCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWRhcHRlciwgQlNTMCwgS2V5SWR4LCBDaXBoZXJBbGcsIE5VTEwpOworCisJCQkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKworICAgICAgICAJCQkJLy8gSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkKKyAgICAgICAgCQkJCXBBZGFwdGVyLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKwkJCQkJfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKQogI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgS2V5ID0gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleTsKQEAgLTUyNjUsNyArNTMxOSw2IEBACiAJCWNhc2UgUlRfT0lEXzgwMl8xMV9QUk9EVUNUSUQ6CiAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9QUk9EVUNUSUQgXG4iKSk7CiAKLSNpZmRlZiBSVDI4NjAKIAkJCXsKIAogCQkJCVVTSE9SVCAgZGV2aWNlX2lkOwpAQCAtNTI3NSw3ICs1MzI4LDYgQEAKIAkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIHBjaV9kZXYgPSBOVUxMXG4iKSk7CiAJCQkJc3ByaW50Zih0bXAsICIlMDR4ICUwNHhcbiIsIE5JQ19QQ0lfVkVORE9SX0lELCBkZXZpY2VfaWQpOwogCQkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKHRtcCk7CiAJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgdG1wLCB3cnEtPnUuZGF0YS5sZW5ndGgpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3dwYS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC93cGEuaAppbmRleCA4OGM3YzhiLi4wMTM0YWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3dwYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvd3BhLmgKQEAgLTkwLDYgKzkwLDcgQEAKICNkZWZpbmUgVEtJUF9BUF9SWE1JQ0tfT0ZGU0VUCQkoVEtJUF9BUF9UWE1JQ0tfT0ZGU0VUK0xFTl9US0lQX1RYTUlDSykKICNkZWZpbmUgVEtJUF9HVEtfTEVOR1RICQkJCSgoTEVOX1RLSVBfRUspKyhMRU5fVEtJUF9SWE1JQ0spKyhMRU5fVEtJUF9UWE1JQ0spKQogI2RlZmluZSBMRU5fUFRLCQkJCQkJKChMRU5fRUFQX0tFWSkrKExFTl9US0lQX0tFWSkpCisjZGVmaW5lIE1JTl9MRU5fT0ZfR1RLCQkJCTUKIAogLy8gUlNOIElFIExlbmd0aCBkZWZpbml0aW9uCiAjZGVmaW5lIE1BWF9MRU5fT0ZfUlNOSUUgICAgICAgICAJOTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvMjg3MF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC8yODcwX21haW5fZGV2LmMKaW5kZXggMDRjNzY0ZC4uOWQ1OWUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC8yODcwX21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC8yODcwX21haW5fZGV2LmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCSAqLwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCggIjwtLS0lc1xuIixfX2Z1bmNfXykpOwogCi0JcE9iai0+TUxNRVRocl9waWQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7CisJcE9iai0+TUxNRVRocl90YXNrID0gTlVMTDsKIAogCWNvbXBsZXRlX2FuZF9leGl0ICgmcEFkLT5tbG1lQ29tcGxldGUsIDApOwogCXJldHVybiAwOwpAQCAtMzczLDcgKzM3Myw3IEBACiAJICovCiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCAiPC0tLVJUVVNCQ21kVGhyZWFkXG4iKSk7CiAKLQlwT2JqLT5SVFVTQkNtZFRocl9waWQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7CisJcE9iai0+UlRVU0JDbWRUaHJfdGFzayA9IE5VTEw7CiAKIAljb21wbGV0ZV9hbmRfZXhpdCAoJnBBZC0+Q21kUUNvbXBsZXRlLCAwKTsKIAlyZXR1cm4gMDsKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCSAqLwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCggIjwtLS0lc1xuIixfX2Z1bmNfXykpOwogCi0JcE9iai0+VGltZXJRVGhyX3BpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKKwlwT2JqLT5UaW1lclFUaHJfdGFzayA9IE5VTEw7CiAKIAljb21wbGV0ZV9hbmRfZXhpdCgmcEFkLT5UaW1lclFDb21wbGV0ZSwgMCk7CiAJcmV0dXJuIDA7CkBAIC05NDQsNjkgKzk0NCw0NiBAQAogCVJUVVNCQ2FuY2VsUGVuZGluZ0lSUHMocEFkKTsKIAogCS8vIFRlcm1pbmF0ZSBUaHJlYWRzCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPlRpbWVyUVRocl9waWQpCisJQlVHX09OKHBPYmotPlRpbWVyUVRocl90YXNrID09IE5VTEwpOworCUNIRUNLX1BJRF9MRUdBTElUWSh0YXNrX3BpZChwT2JqLT5UaW1lclFUaHJfdGFzaykpCiAJewogCQlQT1NfQ09PS0lFIHBPYmogPSAoUE9TX0NPT0tJRSlwQWQtPk9TX0Nvb2tpZTsKIAotCQlwcmludGsoIlRlcm1pbmF0ZSB0aGUgVGltZXJRVGhyX3BpZD0lZCFcbiIsIEdFVF9QSURfTlVNQkVSKHBPYmotPlRpbWVyUVRocl9waWQpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRlcm1pbmF0ZSB0aGUgVGltZXJRVGhyIHBpZD0lZCFcbiIsCisJCQlwaWRfbnIodGFza19waWQocE9iai0+VGltZXJRVGhyX3Rhc2spKSk7CiAJCW1iKCk7CiAJCXBBZC0+VGltZXJGdW5jX2tpbGwgPSAxOwogCQltYigpOwotCQlyZXQgPSBLSUxMX1RIUkVBRF9QSUQocE9iai0+VGltZXJRVGhyX3BpZCwgU0lHVEVSTSwgMSk7Ci0JCWlmIChyZXQpCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RvcCBUaW1lclFUaHJlYWQsIHBpZD0lZCwgcmV0PSVkIVxuIiwKLQkJCQkJcEFkLT5uZXRfZGV2LT5uYW1lLCBHRVRfUElEX05VTUJFUihwT2JqLT5UaW1lclFUaHJfcGlkKSwgcmV0KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBBZC0+VGltZXJRQ29tcGxldGUpOwotCQkJcE9iai0+VGltZXJRVGhyX3BpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKLQkJfQorCQlrdGhyZWFkX3N0b3AocE9iai0+VGltZXJRVGhyX3Rhc2spOworCQlwT2JqLT5UaW1lclFUaHJfdGFzayA9IE5VTEw7CiAJfQogCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPk1MTUVUaHJfcGlkKQorCUJVR19PTihwT2JqLT5NTE1FVGhyX3Rhc2sgPT0gTlVMTCk7CisJQ0hFQ0tfUElEX0xFR0FMSVRZKHRhc2tfcGlkKHBPYmotPk1MTUVUaHJfdGFzaykpCiAJewotCQlwcmludGsoIlRlcm1pbmF0ZSB0aGUgTUxNRVRocl9waWQ9JWQhXG4iLCBHRVRfUElEX05VTUJFUihwT2JqLT5NTE1FVGhyX3BpZCkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiVGVybWluYXRlIHRoZSBNTE1FVGhyIHBpZD0lZCFcbiIsCisJCQlwaWRfbnIodGFza19waWQocE9iai0+TUxNRVRocl90YXNrKSkpOwogCQltYigpOwogCQlwQWQtPm1sbWVfa2lsbCA9IDE7CiAJCS8vUlQyOFhYX01MTUVfSEFORExFUihwQWQpOwogCQltYigpOwotCQlyZXQgPSBLSUxMX1RIUkVBRF9QSUQocE9iai0+TUxNRVRocl9waWQsIFNJR1RFUk0sIDEpOwotCQlpZiAocmV0KQotCQl7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBNbG1lIHRocmVhZCwgcGlkPSVkLCByZXQ9JWQhXG4iLAotCQkJCQlwQWQtPm5ldF9kZXYtPm5hbWUsIEdFVF9QSURfTlVNQkVSKHBPYmotPk1MTUVUaHJfcGlkKSwgcmV0KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8vd2FpdF9mb3JfY29tcGxldGlvbiAoJnBBZC0+bm90aWZ5KTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm1sbWVDb21wbGV0ZSk7Ci0JCQlwT2JqLT5NTE1FVGhyX3BpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKLQkJfQorCQlrdGhyZWFkX3N0b3AocE9iai0+TUxNRVRocl90YXNrKTsKKwkJcE9iai0+TUxNRVRocl90YXNrID0gTlVMTDsKIAl9CiAKLQlDSEVDS19QSURfTEVHQUxJVFkocE9iai0+UlRVU0JDbWRUaHJfcGlkKQorCUJVR19PTihwT2JqLT5SVFVTQkNtZFRocl90YXNrID09IE5VTEwpOworCUNIRUNLX1BJRF9MRUdBTElUWSh0YXNrX3BpZChwT2JqLT5SVFVTQkNtZFRocl90YXNrKSkKIAl7Ci0JCXByaW50aygiVGVybWluYXRlIHRoZSBSVFVTQkNtZFRocl9waWQ9JWQhXG4iLCBHRVRfUElEX05VTUJFUihwT2JqLT5SVFVTQkNtZFRocl9waWQpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRlcm1pbmF0ZSB0aGUgUlRVU0JDbWRUaHIgcGlkPSVkIVxuIiwKKwkJCXBpZF9ucih0YXNrX3BpZChwT2JqLT5SVFVTQkNtZFRocl90YXNrKSkpOwogCQltYigpOwogCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKIAkJcEFkLT5DbWRRLkNtZFFTdGF0ZSA9IFJUMjg3MF9USFJFQURfU1RPUEVEOwogCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKIAkJbWIoKTsKIAkJLy9SVFVTQkNNRFVwKHBBZCk7Ci0JCXJldCA9IEtJTExfVEhSRUFEX1BJRChwT2JqLT5SVFVTQkNtZFRocl9waWQsIFNJR1RFUk0sIDEpOwotCQlpZiAocmV0KQotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIFJUVVNCQ21kIHRocmVhZCwgcGlkPSVkLCByZXQ9JWQhXG4iLAotCQkJCQlwQWQtPm5ldF9kZXYtPm5hbWUsIEdFVF9QSURfTlVNQkVSKHBPYmotPlJUVVNCQ21kVGhyX3BpZCksIHJldCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvL3dhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm5vdGlmeSk7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkLT5DbWRRQ29tcGxldGUpOwotCQkJcE9iai0+UlRVU0JDbWRUaHJfcGlkID0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOwotCX0KKwkJa3RocmVhZF9zdG9wKHBPYmotPlJUVVNCQ21kVGhyX3Rhc2spOworCQlwT2JqLT5SVFVTQkNtZFRocl90YXNrID0gTlVMTDsKIAl9CiAKIApAQCAtMTA2Nyw3ICsxMDQ0LDcgQEAKIAkJaWYgKGRldl9wLT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IHJ0dXNiX3VzYl9pZFtpXS5pZFZlbmRvciAmJgogCQkJZGV2X3AtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IHJ0dXNiX3VzYl9pZFtpXS5pZFByb2R1Y3QpCiAJCXsKLQkJCXByaW50aygicnQyODcwOiBpZFZlbmRvciA9IDB4JXgsIGlkUHJvZHVjdCA9IDB4JXhcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAicnQyODcwOiBpZFZlbmRvciA9IDB4JXgsIGlkUHJvZHVjdCA9IDB4JXhcbiIsCiAJCQkJCWRldl9wLT5kZXNjcmlwdG9yLmlkVmVuZG9yLCBkZXZfcC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvVE9ETwppbmRleCBlYWUxYWM0Li4yZGYxYmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9UT0RPCkBAIC0xLDcgKzEsMTQgQEAKK0knbSBoZXNpdGFudCB0byBhZGQgYSBUT0RPIGZpbGUgaGVyZSwgYXMgdGhlIHdpcmVsZXNzIGRldmVsb3BlcnMgd291bGQKK3JlYWxseSBoYXZlIHBlb3BsZSBoZWxwIHRoZW0gb3V0IG9uIHRoZSAiY2xlYW4iIHJ0Mjg3MCBkcml2ZXIgdGhhdCBjYW4KK2JlIGZvdW5kIGF0IHRoZSBodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20vIHNpdGUuCisKK0J1dCwgaWYgeW91IHdpc2ggdG8gY2xlYW4gdXAgdGhpcyBkcml2ZXIgaW5zdGVhZCwgaGVyZSdzIGEgc2hvcnQgbGlzdCBvZgordGhpbmdzIHRoYXQgbmVlZCB0byBiZSBkb25lIHRvIGdldCBpdCBpbnRvIGEgbW9yZSBtZXJnYWJsZSBzaGFwZToKKwogVE9ETzoKIAktIGNoZWNrcGF0Y2gucGwgY2xlYW4KIAktIHNwYXJzZSBjbGVhbgotCS0gcG9ydCB0byBpbi1rZXJuZWwgODAyMTEgc3RhY2sKKwktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrIGFuZCBjb21tb24gcnQyeDAwIGluZnJhc3RydWN0dXJlCiAJLSByZW1vdmUgcmVhZGluZyBmcm9tIC9ldGMvIGNvbmZpZyBmaWxlcwogCS0gcmV2aWV3IGJ5IHRoZSB3aXJlbGVzcyBkZXZlbG9wZXIgY29tbXVuaXR5CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi8yODcwX3J0bXBfaW5pdC5jCmluZGV4IDlmNTE0M2IuLmNiMTZkMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vMjg3MF9ydG1wX2luaXQuYwpAQCAtNzI3LDggKzcyNyw4IEBACiAKIAl1c2JfZGV2ID0gcE9iai0+cFVzYl9EZXY7CiAKLQlwT2JqLT5NTE1FVGhyX3BpZAkJPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JcE9iai0+UlRVU0JDbWRUaHJfcGlkCT0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOworCXBPYmotPk1MTUVUaHJfdGFzawkJPSBOVUxMOworCXBPYmotPlJUVVNCQ21kVGhyX3Rhc2sJPSBOVUxMOwogCiAJKnBwQWQgPSAoUFZPSUQpdm1hbGxvYyhzaXplb2YoUlRNUF9BREFQVEVSKSk7CiAKQEAgLTc2NSw3ICs3NjUsNyBAQAogewogCVBSVE1QX0FEQVBURVIgcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKIAlQT1NfQ09PS0lFIHBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7Ci0JcGlkX3QgcGlkX251bWJlciA9IC0xOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCiAJLy9pbml0X01VVEVYKCYocEFkLT51c2JkZXZfc2VtYXBob3JlKSk7CiAKQEAgLTc3OSwzNiArNzc5LDM5IEBACiAJaW5pdF9jb21wbGV0aW9uICgmcEFkLT5UaW1lclFDb21wbGV0ZSk7CiAKIAkvLyBDcmVhdCBNTE1FIFRocmVhZAotCXBPYmotPk1MTUVUaHJfcGlkPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JcGlkX251bWJlciA9IGtlcm5lbF90aHJlYWQoTWxtZVRocmVhZCwgcEFkLCBDTE9ORV9WTSk7Ci0JaWYgKHBpZF9udW1iZXIgPCAwKQotCXsKKwlwT2JqLT5NTE1FVGhyX3Rhc2sgPSBOVUxMOworCXRzayA9IGt0aHJlYWRfcnVuKE1sbWVUaHJlYWQsIHBBZCwgcEFkLT5uZXRfZGV2LT5uYW1lKTsKKworCWlmIChJU19FUlIodHNrKSkgewogCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBNbG1lIHRocmVhZFxuIixwQWQtPm5ldF9kZXYtPm5hbWUpOwogCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAl9Ci0JcE9iai0+TUxNRVRocl9waWQgPSBHRVRfUElEKHBpZF9udW1iZXIpOworCisJcE9iai0+TUxNRVRocl90YXNrID0gdHNrOwogCS8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5tbG1lQ29tcGxldGUpKTsKIAogCS8vIENyZWF0IENvbW1hbmQgVGhyZWFkCi0JcE9iai0+UlRVU0JDbWRUaHJfcGlkPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JcGlkX251bWJlciA9IGtlcm5lbF90aHJlYWQoUlRVU0JDbWRUaHJlYWQsIHBBZCwgQ0xPTkVfVk0pOwotCWlmIChwaWRfbnVtYmVyIDwgMCkKKwlwT2JqLT5SVFVTQkNtZFRocl90YXNrID0gTlVMTDsKKwl0c2sgPSBrdGhyZWFkX3J1bihSVFVTQkNtZFRocmVhZCwgcEFkLCBwQWQtPm5ldF9kZXYtPm5hbWUpOworCisJaWYgKElTX0VSUih0c2spIDwgMCkKIAl7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IFJUVVNCQ21kIHRocmVhZFxuIixwQWQtPm5ldF9kZXYtPm5hbWUpOwogCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAl9Ci0JcE9iai0+UlRVU0JDbWRUaHJfcGlkID0gR0VUX1BJRChwaWRfbnVtYmVyKTsKKworCXBPYmotPlJUVVNCQ21kVGhyX3Rhc2sgPSB0c2s7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmKHBBZC0+Q21kUUNvbXBsZXRlKSk7CiAKLQlwT2JqLT5UaW1lclFUaHJfcGlkPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JcGlkX251bWJlciA9IGtlcm5lbF90aHJlYWQoVGltZXJRVGhyZWFkLCBwQWQsIENMT05FX1ZNKTsKLQlpZiAocGlkX251bWJlciA8IDApCisJcE9iai0+VGltZXJRVGhyX3Rhc2sgPSBOVUxMOworCXRzayA9IGt0aHJlYWRfcnVuKFRpbWVyUVRocmVhZCwgcEFkLCBwQWQtPm5ldF9kZXYtPm5hbWUpOworCWlmIChJU19FUlIodHNrKSA8IDApCiAJewogCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBUaW1lclFUaHJlYWRcbiIscEFkLT5uZXRfZGV2LT5uYW1lKTsKIAkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CiAJfQotCXBPYmotPlRpbWVyUVRocl9waWQgPSBHRVRfUElEKHBpZF9udW1iZXIpOworCXBPYmotPlRpbWVyUVRocl90YXNrID0gdHNrOwogCS8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5UaW1lclFDb21wbGV0ZSkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2RhdGEuYwppbmRleCBmZDgwOWFiLi5mOGUwZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fZGF0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9kYXRhLmMKQEAgLTcwOSw5ICs3MDksNiBAQAogCX0KIAogCXJldHVybiBUUlVFOwotCi1GaWxsVHhCbGtFcnI6Ci0JcmV0dXJuIEZBTFNFOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0bXBfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9pbml0LmMKaW5kZXggODcwYTAwZC4uMDk5YjZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9pbml0LmMKQEAgLTM2NTUsNyArMzY1NSw3IEBACiAjaWZkZWYgUkFMSU5LXzI4eHhfUUEKIAkvL3BBZC0+YXRlLlJlcGVhdCA9IDA7CiAJcEFkLT5hdGUuVHhTdGF0dXMgPSAwOwotCXBBZC0+YXRlLkF0ZVBpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKKwlwQWQtPmF0ZS5BdGVQaWQgPSBOVUxMOwogI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCiAjZW5kaWYgLy8gUkFMSU5LX0FURSAvLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfaW8uYwppbmRleCA2ZGI0NDNlLi5hZmRlMTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2lvLmMKQEAgLTk1OCw3ICs5NTgsOCBAQAogCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKIAogCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPlJUVVNCQ21kVGhyX3BpZCkKKwlCVUdfT04ocE9iai0+UlRVU0JDbWRUaHJfdGFzayA9PSBOVUxMKTsKKwlDSEVDS19QSURfTEVHQUxJVFkodGFza19waWQocE9iai0+UlRVU0JDbWRUaHJfdGFzaykpCiAJCXJldHVybiAoTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKIAogCXN0YXR1cyA9IFJUTVBBbGxvY2F0ZU1lbW9yeSgoUFZPSUQgKikmY21kcWVsbXQsIHNpemVvZihDbWRRRWxtdCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vc3BlY3RydW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3NwZWN0cnVtLmMKaW5kZXggNDM3ODJjZS4uNzQzODA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vc3BlY3RydW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9zcGVjdHJ1bS5jCkBAIC0xNTk1LDcgKzE1OTUsNyBAQAogCiAJaWYgKChwTWVhc3VyZVJlcG9ydEluZm8gPSBrbWFsbG9jKHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKIAl7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIHVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIG1lYXN1cmUgcmVwb3J0IGJ1ZmZlciAoc2l6ZT0lZCkuXG4iLCBfX2Z1bmNfXywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgdW5hYmxlIHRvIGFsbG9jIG1lbW9yeSBmb3IgbWVhc3VyZSByZXBvcnQgYnVmZmVyIChzaXplPSV6dSkuXG4iLCBfX2Z1bmNfXywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydDI4NzAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnQyODcwLmgKaW5kZXggMzBhZjRiNS4uNWRkMTVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydDI4NzAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0Mjg3MC5oCkBAIC04Niw2ICs4Niw3IEBACiAjZGVmaW5lIFJUMjg3MF9VU0JfREVWSUNFUwlcCiB7CVwKIAl7VVNCX0RFVklDRSgweDE0OEYsMHgyNzcwKX0sIC8qIFJhbGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTczNywweDAwNzEpfSwgLyogTGlua3N5cyBXVVNCNjAwTiAqLwlcCiAJe1VTQl9ERVZJQ0UoMHgxNDhGLDB4Mjg3MCl9LCAvKiBSYWxpbmsgKi8JCVwKIAl7VVNCX0RFVklDRSgweDE0OEYsMHgzMDcwKX0sIC8qIFJhbGluayAqLwkJXAogCXtVU0JfREVWSUNFKDB4MEIwNSwweDE3MzEpfSwgLyogQXN1cyAqLwkJCVwKQEAgLTU3NiwxNCArNTc3LDE2IEBACiAjZGVmaW5lIFJUVVNCTWxtZVVwKHBBZCkJICAgICAgICBcCiB7CQkJCQkJCQkgICAgXAogCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsJXAotCUNIRUNLX1BJRF9MRUdBTElUWShwT2JqLT5NTE1FVGhyX3BpZCkJCSAgICBcCisJQlVHX09OKHBPYmotPk1MTUVUaHJfdGFzayA9PSBOVUxMKTsJCSAgICBcCisJQ0hFQ0tfUElEX0xFR0FMSVRZKHRhc2tfcGlkKHBPYmotPk1MTUVUaHJfdGFzaykpCQkgICAgXAogICAgICAgICB1cCgmKHBBZC0+bWxtZV9zZW1hcGhvcmUpKTsgXAogfQogCiAjZGVmaW5lIFJUVVNCQ01EVXAocEFkKQkgICAgICAgICAgICAgICAgXAogewkJCQkJCQkJCSAgICBcCiAJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOwlcCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPlJUVVNCQ21kVGhyX3BpZCkJICAgIFwKKwlCVUdfT04ocE9iai0+UlRVU0JDbWRUaHJfdGFzayA9PSBOVUxMKTsJICAgIFwKKwlDSEVDS19QSURfTEVHQUxJVFkodGFza19waWQocE9iai0+UlRVU0JDbWRUaHJfdGFzaykpCSAgICBcCiAJICAgIHVwKCYocEFkLT5SVFVTQkNtZF9zZW1hcGhvcmUpKTsgXAogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmMKaW5kZXggOTkyZTNkMS4uZTM4NTUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbGludXguYwpAQCAtODk1LDcgKzg5NSw3IEBACiAKICAgICBpZiAocFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpID4gUlhfQlVGRkVSX0FHR1JFU0laRSkKICAgICB7Ci0gICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogU2l6ZSBpcyB0b28gbGFyZ2UhICglZClcbiIsIF9fZnVuY19fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBTaXplIGlzIHRvbyBsYXJnZSEgKCV6dSlcbiIsIF9fZnVuY19fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKIAkJZ290byBlcnJfZnJlZV9za19idWZmOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5oCmluZGV4IDg1OWY5Y2UuLjVhNmVlNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbGludXguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmgKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC02NSw3ICs2Niw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAKLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKIC8vIGxvYWQgZmlybXdhcmUKQEAgLTE2NiwxNCArMTY2LDEyIEBACiAKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogdHlwZWRlZglzdHJ1Y3QgcGlkICoJVEhSRUFEX1BJRDsKLSNkZWZpbmUJVEhSRUFEX1BJRF9JTklUX1ZBTFVFCU5VTEwKICNkZWZpbmUJR0VUX1BJRChfdikJZmluZF9nZXRfcGlkKF92KQogI2RlZmluZQlHRVRfUElEX05VTUJFUihfdikJcGlkX25yKF92KQogI2RlZmluZSBDSEVDS19QSURfTEVHQUxJVFkoX3BpZCkJaWYgKHBpZF9ucihfcGlkKSA+PSAwKQogI2RlZmluZSBLSUxMX1RIUkVBRF9QSUQoX0EsIF9CLCBfQykJa2lsbF9waWQoX0EsIF9CLCBfQykKICNlbHNlCiB0eXBlZGVmCXBpZF90CVRIUkVBRF9QSUQ7Ci0jZGVmaW5lCVRIUkVBRF9QSURfSU5JVF9WQUxVRQktMQogI2RlZmluZQlHRVRfUElEKF92KQlfdgogI2RlZmluZQlHRVRfUElEX05VTUJFUihfdikJX3YKICNkZWZpbmUgQ0hFQ0tfUElEX0xFR0FMSVRZKF9waWQpCWlmIChfcGlkID49IDApCkBAIC0xODksMTEgKzE4NywxMSBAQAogc3RydWN0IG9zX2Nvb2tpZSB7CiAKICNpZmRlZiBSVDI4NzAKLQlzdHJ1Y3QgdXNiX2RldmljZQkJKnBVc2JfRGV2OworCXN0cnVjdCB1c2JfZGV2aWNlCSpwVXNiX0RldjsKIAotCVRIUkVBRF9QSUQJCQkJTUxNRVRocl9waWQ7Ci0JVEhSRUFEX1BJRAkJCQlSVFVTQkNtZFRocl9waWQ7Ci0JVEhSRUFEX1BJRAkJCQlUaW1lclFUaHJfcGlkOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqTUxNRVRocl90YXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqUlRVU0JDbWRUaHJfdGFzazsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKlRpbWVyUVRocl90YXNrOwogI2VuZGlmIC8vIFJUMjg3MCAvLwogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IAlyeF9kb25lX3Rhc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YV9pb2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGFfaW9jdGwuYwppbmRleCA5MWYwZmFiLi40YjQzMmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhX2lvY3RsLmMKQEAgLTE3NzYsNyArMTc3Niw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIGVsc2UKIAkJCS8qIERvbid0IGNvbXBsYWluIGlmIG9ubHkgY2hhbmdlIHRoZSBtb2RlICovCi0JCQlpZighZXJxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSB7CisJCQlpZiAoIShlcnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpKSB7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwLzI4NzBfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvMjg3MF9tYWluX2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMWRkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwLzI4NzBfbWFpbl9kZXYuYwpAQCAtMCwwICsxLDE2MjcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgcnRtcF9tYWluLmMKKworICAgIEFic3RyYWN0OgorICAgIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZXMKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICAgIFdoYXQKKyAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE5hbWUgICAgICAgIERhdGUgICAgICAgICAgICBNb2RpZmljYXRpb24gbG9ncworICAgIEphbiBMZWUJCTAxLTEwLTIwMDUJICAgIG1vZGlmaWVkCisJU2FtcGxlCQlKdW4vMDEvMDcJCU1lcmdlIFJUMjg3MCBhbmQgUlQyODYwIGRyaXZlcnMuCisqLworCisjaW5jbHVkZSAicnRfY29uZmlnLmgiCisKKworLy8gRm9sbG93aW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgc2hvdyB3aGVuIHlvdSBydW4gJ21vZGluZm8nCisvLyAqKiogSWYgeW91IGhhdmUgYSBzb2x1dGlvbiBmb3IgdGhlIGJ1ZyBpbiBjdXJyZW50IHZlcnNpb24gb2YgZHJpdmVyLCBwbGVhc2UgbWFpbCB0byBtZS4KKy8vIE90aGVyd2lzZSBwb3N0IHRvIGZvcnVtIGluIHJhbGlua3RlY2gncyB3ZWIgc2l0ZSh3d3cucmFsaW5rdGVjaC5jb20pIGFuZCBsZXQgYWxsIHVzZXJzIGhlbHAgeW91LiAqKioKK01PRFVMRV9BVVRIT1IoIlBhdWwgTGluIDxwYXVsX2xpbkByYWxpbmt0ZWNoLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUlQyODcwIFdpcmVsZXNzIExhbiBMaW51eCBEcml2ZXIiKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKyNpZmRlZiBNT0RVTEVfVkVSU0lPTgorTU9EVUxFX1ZFUlNJT04oU1RBX0RSSVZFUl9WRVJTSU9OKTsKKyNlbmRpZgorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisvLyByZWNvcmQgd2hldGhlciB0aGUgY2FyZCBpbiB0aGUgY2FyZCBsaXN0IGlzIHVzZWQgaW4gdGhlIGNhcmQgZmlsZQorZXh0ZXJuIFVJTlQ4ICBNQ19DYXJkVXNlZFtdOworI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisvKiBLZXJuZWwgdGhyZWFkIGFuZCB2YXJzLCB3aGljaCBoYW5kbGVzIHBhY2tldHMgdGhhdCBhcmUgY29tcGxldGVkLiBPbmx5CisgKiBwYWNrZXRzIHRoYXQgaGF2ZSBhICJjb21wbGV0ZSIgZnVuY3Rpb24gYXJlIHNlbnQgaGVyZS4gVGhpcyB3YXksIHRoZQorICogY29tcGxldGlvbiBpcyBydW4gb3V0IG9mIGtlcm5lbCBjb250ZXh0LCBhbmQgZG9lc24ndCBibG9jayB0aGUgcmVzdCBvZgorICogdGhlIHN0YWNrLiAqLworLy9zdGF0aWMgaW50IG1sbWVfa2lsbCA9IDA7CQkvLyBNbG1lIGtlcm5lbCB0aHJlYWQKKy8vc3RhdGljIGludCBSVFVTQkNtZF9raWxsID0gMDsJLy8gQ29tbWFuZCBrZXJuZWwgdGhyZWFkCisvL3N0YXRpYyBpbnQgVGltZXJGdW5jX2tpbGwgPSAwOwkvLyBUaW1lclEga2VybmVsIHRocmVhZAorCisvL3N0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCAJdGltZXJXYWl0UTsKKy8vc3RhdGljIHdhaXRfcXVldWVfdCAJCXdhaXRROworCitleHRlcm4gSU5UIF9fZGV2aW5pdCBydDI4eHhfcHJvYmUoSU4gdm9pZCAqX2Rldl9wLCBJTiB2b2lkICpfZGV2X2lkX3AsCisJCQkJCQkJCQlJTiBVSU5UIGFyZ2MsIE9VVCBQUlRNUF9BREFQVEVSICpwcEFkKTsKKworCisvKiBtb2R1bGUgdGFibGUgKi8KK3N0cnVjdCB1c2JfZGV2aWNlX2lkICAgIHJ0dXNiX3VzYl9pZFtdID0gUlQyODcwX1VTQl9ERVZJQ0VTOworSU5UIGNvbnN0ICAgICAgICAgICAgICAgcnR1c2JfdXNiX2lkX2xlbiA9IHNpemVvZihydHVzYl91c2JfaWQpIC8gc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2lkKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBydHVzYl91c2JfaWQpOworCisjaWZuZGVmIFBGX05PRlJFRVpFCisjZGVmaW5lIFBGX05PRlJFRVpFICAwCisjZW5kaWYKKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vdGVzdGVkIGZvciBrZXJuZWwgMi40IHNlcmllcworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgKnJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIFVJTlQgaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKTsKK3N0YXRpYyB2b2lkIHJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKTsKKworc3RydWN0IHVzYl9kcml2ZXIgcnR1c2JfZHJpdmVyID0geworCQluYW1lOiJydDI4NzAiLAorCQlwcm9iZTpydHVzYl9wcm9iZSwKKwkJZGlzY29ubmVjdDpydHVzYl9kaXNjb25uZWN0LAorCQlpZF90YWJsZTpydHVzYl91c2JfaWQsCisJfTsKKworI2Vsc2UKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBydDI4NzBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgcnQyODcwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisjZW5kaWYgLy8gQ09ORklHX1BNIC8vCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vdGVzdGVkIGZvciBrZXJuZWwgMi42c2VyaWVzCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHJ0dXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCBydHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworc3RydWN0IHVzYl9kcml2ZXIgcnR1c2JfZHJpdmVyID0geworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKyNlbmRpZgorCS5uYW1lPSJydDI4NzAiLAorCS5wcm9iZT1ydHVzYl9wcm9iZSwKKwkuZGlzY29ubmVjdD1ydHVzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZT1ydHVzYl91c2JfaWQsCisKKyNpZmRlZiBDT05GSUdfUE0KKwlzdXNwZW5kOglydDI4NzBfc3VzcGVuZCwKKwlyZXN1bWU6CQlydDI4NzBfcmVzdW1lLAorI2VuZGlmCisJfTsKKworI2lmZGVmIENPTkZJR19QTQorCitWT0lEIFJUMjg2MFJlamVjdFBlbmRpbmdQYWNrZXRzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCS8vIGNsZWFyIFBTIHBhY2tldHMKKwkvLyBjbGVhciBUeFN3IHBhY2tldHMKK30KKworc3RhdGljIGludCBydDI4NzBfc3VzcGVuZCgKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwlwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7CisJUFJUTVBfQURBUFRFUiBwQWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IHJ0Mjg3MF9zdXNwZW5kKClcbiIpKTsKKwluZXRfZGV2ID0gcEFkLT5uZXRfZGV2OworCQkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRfZGV2KTsKKworCXBBZC0+UE1fRmxnU3VzcGVuZCA9IDE7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0X2RldikpIHsKKwkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKKwl9CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSBydDI4NzBfc3VzcGVuZCgpXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQyODcwX3Jlc3VtZSgKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKKwlQUlRNUF9BREFQVEVSIHBBZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gcnQyODcwX3Jlc3VtZSgpXG4iKSk7CisKKwlwQWQtPlBNX0ZsZ1N1c3BlbmQgPSAwOworCW5ldF9kZXYgPSBwQWQtPm5ldF9kZXY7CisJCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldF9kZXYpOworCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0X2Rldik7CisJCQluZXRpZl9jYXJyaWVyX29uKG5ldF9kZXYpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRfZGV2KTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT0gcnQyODcwX3Jlc3VtZSgpXG4iKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLy8gQ09ORklHX1BNIC8vCisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKworLy8gSW5pdCBkcml2ZXIgbW9kdWxlCitJTlQgX19pbml0IHJ0dXNiX2luaXQodm9pZCkKK3sKKwlwcmludGsoInJ0dXNiIGluaXQgLS0tPlxuIik7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmcnR1c2JfZHJpdmVyKTsKK30KKworLy8gRGVpbml0IGRyaXZlciBtb2R1bGUKK1ZPSUQgX19leGl0IHJ0dXNiX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmcnR1c2JfZHJpdmVyKTsKKwlwcmludGsoIjwtLS0gcnR1c2IgZXhpdFxuIik7Cit9CisKK21vZHVsZV9pbml0KHJ0dXNiX2luaXQpOworbW9kdWxlX2V4aXQocnR1c2JfZXhpdCk7CisKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCisvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMJCQkJCQkJCQkJCQkqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBNTE1FIGtlcm5lbCB0aHJlYWQuCisKK0FyZ3VtZW50czoKKwkqQ29udGV4dAkJCXRoZSBwQWQsIGRyaXZlciBjb250cm9sIGJsb2NrIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIDAJCQkJCWNsb3NlIHRoZSB0aHJlYWQKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBNbG1lVGhyZWFkKAorCUlOIHZvaWQgKkNvbnRleHQpCit7CisJUFJUTVBfQURBUFRFUglwQWQgPSAoUFJUTVBfQURBUFRFUilDb250ZXh0OworCVBPU19DT09LSUUJcE9iajsKKwlpbnQgc3RhdHVzOworCisJcE9iaiA9IChQT1NfQ09PS0lFKXBBZC0+T1NfQ29va2llOworCisJcnRtcF9vc190aHJlYWRfaW5pdCgicnQyODcwTWxtZVRocmVhZCIsIChQVk9JRCkmKHBBZC0+bWxtZUNvbXBsZXRlKSk7CisKKwl3aGlsZSAocEFkLT5tbG1lX2tpbGwgPT0gMCkKKwl7CisJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLworCQkvL2Rvd24oJihwQWQtPm1sbWVfc2VtYXBob3JlKSk7CisJCXN0YXR1cyA9IGRvd25faW50ZXJydXB0aWJsZSgmKHBBZC0+bWxtZV9zZW1hcGhvcmUpKTsKKworCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgLCBuZWVkIHRvIGNoZWNrIGlmIHJlcXVpcmVkKi8KKwkJLy9kb3duKCYocEFkLT51c2JkZXZfc2VtYXBob3JlKSk7CisKKwkJaWYgKCFwQWQtPlBNX0ZsZ1N1c3BlbmQpCisJCU1sbWVIYW5kbGVyKHBBZCk7CisKKwkJLyogdW5sb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KKwkJLy91cCgmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOworCQlpZiAoc3RhdHVzICE9IDApCisJCXsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBub3RpZnkgdGhlIGV4aXQgcm91dGluZSB0aGF0IHdlJ3JlIGFjdHVhbGx5IGV4aXRpbmcgbm93CisJICoKKwkgKiBjb21wbGV0ZSgpL3dhaXRfZm9yX2NvbXBsZXRpb24oKSBpcyBzaW1pbGFyIHRvIHVwKCkvZG93bigpLAorCSAqIGV4Y2VwdCB0aGF0IGNvbXBsZXRlKCkgaXMgc2FmZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3RydWN0dXJlCisJICogaXMgZ2V0dGluZyBkZWxldGVkIGluIGEgcGFyYWxsZWwgbW9kZSBvZiBleGVjdXRpb24gKGkuZS4ganVzdAorCSAqIGFmdGVyIHRoZSBkb3duKCkgLS0gdGhhdCdzIG5lY2Vzc2FyeSBmb3IgdGhlIHRocmVhZC1zaHV0ZG93bgorCSAqIGNhc2UuCisJICoKKwkgKiBjb21wbGV0ZV9hbmRfZXhpdCgpIGdvZXMgZXZlbiBmdXJ0aGVyIHRoYW4gdGhpcyAtLSBpdCBpcyBzYWZlIGluCisJICogdGhlIGNhc2UgdGhhdCB0aGUgdGhyZWFkIG9mIHRoZSBjYWxsZXIgaXMgZ29pbmcgYXdheSAobm90IGp1c3QKKwkgKiB0aGUgc3RydWN0dXJlKSAtLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIG1vZHVsZS1yZW1vdmUgY2FzZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBpbiBwcmVlbXB0aW9uIGtlcm5lbHMsIHdoaWNoIHRyYW5zZmVyIHRoZSBmbG93CisJICogb2YgZXhlY3V0aW9uIGltbWVkaWF0ZWx5IHVwb24gYSBjb21wbGV0ZSgpLgorCSAqLworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCggIjwtLS0lc1xuIixfX0ZVTkNUSU9OX18pKTsKKworCXBPYmotPk1MTUVUaHJfcGlkID0gTlVMTDsKKworCWNvbXBsZXRlX2FuZF9leGl0ICgmcEFkLT5tbG1lQ29tcGxldGUsIDApOworCXJldHVybiAwOworCit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBVU0IgY29tbWFuZCBrZXJuZWwgdGhyZWFkLgorCitBcmd1bWVudHM6CisJKkNvbnRleHQJCQl0aGUgcEFkLCBkcml2ZXIgY29udHJvbCBibG9jayBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICAwCQkJCQljbG9zZSB0aGUgdGhyZWFkCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgUlRVU0JDbWRUaHJlYWQoCisJSU4gdm9pZCAqIENvbnRleHQpCit7CisJUFJUTVBfQURBUFRFUglwQWQgPSAoUFJUTVBfQURBUFRFUilDb250ZXh0OworCVBPU19DT09LSUUJCXBPYmo7CisJaW50IHN0YXR1czsKKworCXBPYmogPSAoUE9TX0NPT0tJRSlwQWQtPk9TX0Nvb2tpZTsKKworCXJ0bXBfb3NfdGhyZWFkX2luaXQoInJ0Mjg3MENtZFRocmVhZCIsIChQVk9JRCkmKHBBZC0+Q21kUUNvbXBsZXRlKSk7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwlwQWQtPkNtZFEuQ21kUVN0YXRlID0gUlQyODcwX1RIUkVBRF9SVU5OSU5HOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCisJd2hpbGUgKHBBZC0+Q21kUS5DbWRRU3RhdGUgPT0gUlQyODcwX1RIUkVBRF9SVU5OSU5HKQorCXsKKwkJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICovCisJCS8vZG93bigmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7CisJCXN0YXR1cyA9IGRvd25faW50ZXJydXB0aWJsZSgmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7CisKKwkJaWYgKHBBZC0+Q21kUS5DbWRRU3RhdGUgPT0gUlQyODcwX1RIUkVBRF9TVE9QRUQpCisJCQlicmVhazsKKworCQlpZiAoc3RhdHVzICE9IDApCisJCXsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCQkJYnJlYWs7CisJCX0KKwkJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICwgbmVlZCB0byBjaGVjayBpZiByZXF1aXJlZCovCisJCS8vZG93bigmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOworCisJCWlmICghcEFkLT5QTV9GbGdTdXNwZW5kKQorCQlDTURIYW5kbGVyKHBBZCk7CisKKwkJLyogdW5sb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KKwkJLy91cCgmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOworCX0KKworCWlmICghcEFkLT5QTV9GbGdTdXNwZW5kKQorCXsJLy8gQ2xlYXIgdGhlIENtZFFFbGVtZW50cy4KKwkJQ21kUUVsbXQJKnBDbWRRRWxtdCA9IE5VTEw7CisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJCXBBZC0+Q21kUS5DbWRRU3RhdGUgPSBSVDI4NzBfVEhSRUFEX1NUT1BFRDsKKwkJd2hpbGUocEFkLT5DbWRRLnNpemUpCisJCXsKKwkJCVJUVVNCRGVxdWV1ZUNtZCgmcEFkLT5DbWRRLCAmcENtZFFFbG10KTsKKwkJCWlmIChwQ21kUUVsbXQpCisJCQl7CisJCQkJaWYgKHBDbWRRRWxtdC0+Q21kRnJvbU5kaXMgPT0gVFJVRSkKKwkJCQl7CisJCQkJCWlmIChwQ21kUUVsbXQtPmJ1ZmZlciAhPSBOVUxMKQorCQkJCQkJTmRpc0ZyZWVNZW1vcnkocENtZFFFbG10LT5idWZmZXIsIHBDbWRRRWxtdC0+YnVmZmVybGVuZ3RoLCAwKTsKKworCQkJCQlOZGlzRnJlZU1lbW9yeShwQ21kUUVsbXQsIHNpemVvZihDbWRRRWxtdCksIDApOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAoKHBDbWRRRWxtdC0+YnVmZmVyICE9IE5VTEwpICYmIChwQ21kUUVsbXQtPmJ1ZmZlcmxlbmd0aCAhPSAwKSkKKwkJCQkJCU5kaXNGcmVlTWVtb3J5KHBDbWRRRWxtdC0+YnVmZmVyLCBwQ21kUUVsbXQtPmJ1ZmZlcmxlbmd0aCwgMCk7CisJCSAgICAgICAgICAgIHsKKwkJCQkJCU5kaXNGcmVlTWVtb3J5KHBDbWRRRWxtdCwgc2l6ZW9mKENtZFFFbG10KSwgMCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwl9CisJLyogbm90aWZ5IHRoZSBleGl0IHJvdXRpbmUgdGhhdCB3ZSdyZSBhY3R1YWxseSBleGl0aW5nIG5vdworCSAqCisJICogY29tcGxldGUoKS93YWl0X2Zvcl9jb21wbGV0aW9uKCkgaXMgc2ltaWxhciB0byB1cCgpL2Rvd24oKSwKKwkgKiBleGNlcHQgdGhhdCBjb21wbGV0ZSgpIGlzIHNhZmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cnVjdHVyZQorCSAqIGlzIGdldHRpbmcgZGVsZXRlZCBpbiBhIHBhcmFsbGVsIG1vZGUgb2YgZXhlY3V0aW9uIChpLmUuIGp1c3QKKwkgKiBhZnRlciB0aGUgZG93bigpIC0tIHRoYXQncyBuZWNlc3NhcnkgZm9yIHRoZSB0aHJlYWQtc2h1dGRvd24KKwkgKiBjYXNlLgorCSAqCisJICogY29tcGxldGVfYW5kX2V4aXQoKSBnb2VzIGV2ZW4gZnVydGhlciB0aGFuIHRoaXMgLS0gaXQgaXMgc2FmZSBpbgorCSAqIHRoZSBjYXNlIHRoYXQgdGhlIHRocmVhZCBvZiB0aGUgY2FsbGVyIGlzIGdvaW5nIGF3YXkgKG5vdCBqdXN0CisJICogdGhlIHN0cnVjdHVyZSkgLS0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBtb2R1bGUtcmVtb3ZlIGNhc2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgaW4gcHJlZW1wdGlvbiBrZXJuZWxzLCB3aGljaCB0cmFuc2ZlciB0aGUgZmxvdworCSAqIG9mIGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB1cG9uIGEgY29tcGxldGUoKS4KKwkgKi8KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoICI8LS0tUlRVU0JDbWRUaHJlYWRcbiIpKTsKKworCXBPYmotPlJUVVNCQ21kVGhyX3BpZCA9IE5VTEw7CisKKwljb21wbGV0ZV9hbmRfZXhpdCAoJnBBZC0+Q21kUUNvbXBsZXRlLCAwKTsKKwlyZXR1cm4gMDsKKworfQorCisKK3N0YXRpYyB2b2lkIFJUMjg3MF9UaW1lclFfSGFuZGxlKFJUTVBfQURBUFRFUiAqcEFkKQoreworCWludCBzdGF0dXM7CisJUkFMSU5LX1RJTUVSX1NUUlVDVAkqcFRpbWVyOworCVJUMjg3MF9USU1FUl9FTlRSWQkqcEVudHJ5OworCXVuc2lnbmVkIGxvbmcJaXJxRmxhZzsKKworCXdoaWxlKCFwQWQtPlRpbWVyRnVuY19raWxsKQorCXsKKy8vCQlwcmludGsoIndhaXRpbmcgZm9yIGV2ZW50IVxuIik7CisJCXBUaW1lciA9IE5VTEw7CisKKwkJc3RhdHVzID0gZG93bl9pbnRlcnJ1cHRpYmxlKCYocEFkLT5SVFVTQlRpbWVyX3NlbWFwaG9yZSkpOworCisJCWlmIChwQWQtPlRpbWVyUS5zdGF0dXMgPT0gUlQyODcwX1RIUkVBRF9TVE9QRUQpCisJCQlicmVhazsKKworCQkvLyBldmVudCBoYXBwZW5lZC4KKwkJd2hpbGUocEFkLT5UaW1lclEucFFIZWFkKQorCQl7CisJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWcpOworCQkJcEVudHJ5ID0gcEFkLT5UaW1lclEucFFIZWFkOworCQkJaWYgKHBFbnRyeSkKKwkJCXsKKwkJCQlwVGltZXIgPSBwRW50cnktPnBSYVRpbWVyOworCisJCQkJLy8gdXBkYXRlIHBRSGVhZAorCQkJCXBBZC0+VGltZXJRLnBRSGVhZCA9IHBFbnRyeS0+cE5leHQ7CisJCQkJaWYgKHBFbnRyeSA9PSBwQWQtPlRpbWVyUS5wUVRhaWwpCisJCQkJCXBBZC0+VGltZXJRLnBRVGFpbCA9IE5VTEw7CisKKwkJCQkvLyByZXR1cm4gdGhpcyBxdWV1ZSBlbnRyeSB0byB0aW1lclFGcmVlTGlzdC4KKwkJCQlwRW50cnktPnBOZXh0ID0gcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3Q7CisJCQkJcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3QgPSBwRW50cnk7CisJCQl9CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZyk7CisKKwkJCWlmIChwVGltZXIpCisJCQl7CisJCQkJaWYgKHBUaW1lci0+aGFuZGxlICE9IE5VTEwpCisJCQkJaWYgKCFwQWQtPlBNX0ZsZ1N1c3BlbmQpCisJCQkJCXBUaW1lci0+aGFuZGxlKE5VTEwsIChQVk9JRCkgcFRpbWVyLT5jb29raWUsIE5VTEwsIHBUaW1lcik7CisJCQkJaWYgKChwVGltZXItPlJlcGVhdCkgJiYgKHBUaW1lci0+U3RhdGUgPT0gRkFMU0UpKQorCQkJCQlSVE1QX09TX0FkZF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgcFRpbWVyLT5UaW1lclZhbHVlKTsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgIT0gMCkKKwkJeworCQkJcEFkLT5UaW1lclEuc3RhdHVzID0gUlQyODcwX1RIUkVBRF9TVE9QRUQ7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisKK0lOVCBUaW1lclFUaHJlYWQoCisJSU4gT1VUIFBWT0lEIENvbnRleHQpCit7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJUE9TX0NPT0tJRQlwT2JqOworCisJcEFkID0gKFBSVE1QX0FEQVBURVIpQ29udGV4dDsKKwlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJcnRtcF9vc190aHJlYWRfaW5pdCgicnQyODcwVGltZXJRSGFuZGxlIiwgKFBWT0lEKSYocEFkLT5UaW1lclFDb21wbGV0ZSkpOworCisJUlQyODcwX1RpbWVyUV9IYW5kbGUocEFkKTsKKworCS8qIG5vdGlmeSB0aGUgZXhpdCByb3V0aW5lIHRoYXQgd2UncmUgYWN0dWFsbHkgZXhpdGluZyBub3cKKwkgKgorCSAqIGNvbXBsZXRlKCkvd2FpdF9mb3JfY29tcGxldGlvbigpIGlzIHNpbWlsYXIgdG8gdXAoKS9kb3duKCksCisJICogZXhjZXB0IHRoYXQgY29tcGxldGUoKSBpcyBzYWZlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzdHJ1Y3R1cmUKKwkgKiBpcyBnZXR0aW5nIGRlbGV0ZWQgaW4gYSBwYXJhbGxlbCBtb2RlIG9mIGV4ZWN1dGlvbiAoaS5lLiBqdXN0CisJICogYWZ0ZXIgdGhlIGRvd24oKSAtLSB0aGF0J3MgbmVjZXNzYXJ5IGZvciB0aGUgdGhyZWFkLXNodXRkb3duCisJICogY2FzZS4KKwkgKgorCSAqIGNvbXBsZXRlX2FuZF9leGl0KCkgZ29lcyBldmVuIGZ1cnRoZXIgdGhhbiB0aGlzIC0tIGl0IGlzIHNhZmUgaW4KKwkgKiB0aGUgY2FzZSB0aGF0IHRoZSB0aHJlYWQgb2YgdGhlIGNhbGxlciBpcyBnb2luZyBhd2F5IChub3QganVzdAorCSAqIHRoZSBzdHJ1Y3R1cmUpIC0tIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgbW9kdWxlLXJlbW92ZSBjYXNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGluIHByZWVtcHRpb24ga2VybmVscywgd2hpY2ggdHJhbnNmZXIgdGhlIGZsb3cKKwkgKiBvZiBleGVjdXRpb24gaW1tZWRpYXRlbHkgdXBvbiBhIGNvbXBsZXRlKCkuCisJICovCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCAiPC0tLSVzXG4iLF9fRlVOQ1RJT05fXykpOworCisJcE9iai0+VGltZXJRVGhyX3BpZCA9IE5VTEw7CisKKwljb21wbGV0ZV9hbmRfZXhpdCgmcEFkLT5UaW1lclFDb21wbGV0ZSwgMCk7CisJcmV0dXJuIDA7CisKK30KKworCitSVDI4NzBfVElNRVJfRU5UUlkgKlJUMjg3MF9UaW1lclFfSW5zZXJ0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFJBTElOS19USU1FUl9TVFJVQ1QgKnBUaW1lcikKK3sKKwlSVDI4NzBfVElNRVJfRU5UUlkgKnBRTm9kZSA9IE5VTEwsICpwUVRhaWw7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnczsKKworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisJaWYgKHBBZC0+VGltZXJRLnN0YXR1cyAmIFJUMjg3MF9USFJFQURfQ0FOX0RPX0lOU0VSVCkKKwl7CisJCWlmKHBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0KQorCQl7CisJCQlwUU5vZGUgPSBwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdDsKKwkJCXBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0ID0gcFFOb2RlLT5wTmV4dDsKKworCQkJcFFOb2RlLT5wUmFUaW1lciA9IHBUaW1lcjsKKwkJCXBRTm9kZS0+cE5leHQgPSBOVUxMOworCisJCQlwUVRhaWwgPSBwQWQtPlRpbWVyUS5wUVRhaWw7CisJCQlpZiAocEFkLT5UaW1lclEucFFUYWlsICE9IE5VTEwpCisJCQkJcFFUYWlsLT5wTmV4dCA9IHBRTm9kZTsKKwkJCXBBZC0+VGltZXJRLnBRVGFpbCA9IHBRTm9kZTsKKwkJCWlmIChwQWQtPlRpbWVyUS5wUUhlYWQgPT0gTlVMTCkKKwkJCQlwQWQtPlRpbWVyUS5wUUhlYWQgPSBwUU5vZGU7CisJCX0KKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKKworCQlpZiAocFFOb2RlKQorCQkJdXAoJnBBZC0+UlRVU0JUaW1lcl9zZW1hcGhvcmUpOworCQkJLy93YWtlX3VwKCZ0aW1lcldhaXRRKTsKKwl9CisJZWxzZQorCXsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKKwl9CisJcmV0dXJuIHBRTm9kZTsKK30KKworCitCT09MRUFOIFJUMjg3MF9UaW1lclFfUmVtb3ZlKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFJBTElOS19USU1FUl9TVFJVQ1QgKnBUaW1lcikKK3sKKwlSVDI4NzBfVElNRVJfRU5UUlkgKnBOb2RlLCAqcFByZXYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKKwlpZiAocEFkLT5UaW1lclEuc3RhdHVzID49IFJUMjg3MF9USFJFQURfSU5JVEVEKQorCXsKKwkJcE5vZGUgPSBwQWQtPlRpbWVyUS5wUUhlYWQ7CisJCXdoaWxlIChwTm9kZSkKKwkJeworCQkJaWYgKHBOb2RlLT5wUmFUaW1lciA9PSBwVGltZXIpCisJCQkJYnJlYWs7CisJCQlwUHJldiA9IHBOb2RlOworCQkJcE5vZGUgPSBwTm9kZS0+cE5leHQ7CisJCX0KKworCQkvLyBOb3cgbW92ZSBpdCB0byBmcmVlTGlzdCBxdWV1ZS4KKwkJaWYgKHBOb2RlKQorCQl7CisJCQlpZiAocE5vZGUgPT0gcEFkLT5UaW1lclEucFFIZWFkKQorCQkJCXBBZC0+VGltZXJRLnBRSGVhZCA9IHBOb2RlLT5wTmV4dDsKKwkJCWlmIChwTm9kZSA9PSBwQWQtPlRpbWVyUS5wUVRhaWwpCisJCQkJcEFkLT5UaW1lclEucFFUYWlsID0gcFByZXY7CisJCQlpZiAocFByZXYgIT0gTlVMTCkKKwkJCQlwUHJldi0+cE5leHQgPSBwTm9kZS0+cE5leHQ7CisKKwkJCS8vIHJldHVybiB0aGlzIHF1ZXVlIGVudHJ5IHRvIHRpbWVyUUZyZWVMaXN0LgorCQkJcE5vZGUtPnBOZXh0ID0gcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3Q7CisJCQlwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdCA9IHBOb2RlOworCQl9CisJfQorCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCit2b2lkIFJUMjg3MF9UaW1lclFfRXhpdChSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlSVDI4NzBfVElNRVJfRU5UUlkgKnBUaW1lclE7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnczsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOworCXdoaWxlIChwQWQtPlRpbWVyUS5wUUhlYWQpCisJeworCQlwVGltZXJRID0gcEFkLT5UaW1lclEucFFIZWFkOworCQlwQWQtPlRpbWVyUS5wUUhlYWQgPSBwVGltZXJRLT5wTmV4dDsKKwkJLy8gcmVtb3ZlIHRoZSB0aW1lUQorCX0KKwlwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdCA9IE5VTEw7CisJb3NfZnJlZV9tZW0ocEFkLCBwQWQtPlRpbWVyUS5wVGltZXJRUG9sbCk7CisJcEFkLT5UaW1lclEucFFUYWlsID0gTlVMTDsKKwlwQWQtPlRpbWVyUS5wUUhlYWQgPSBOVUxMOworCXBBZC0+VGltZXJRLnN0YXR1cyA9IFJUMjg3MF9USFJFQURfU1RPUEVEOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisKK30KKworCit2b2lkIFJUMjg3MF9UaW1lclFfSW5pdChSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlpbnQgCWk7CisJUlQyODcwX1RJTUVSX0VOVFJZICpwUU5vZGUsICpwRW50cnk7CisJdW5zaWduZWQgbG9uZyBpcnFGbGFnczsKKworCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPlRpbWVyUUxvY2spOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisJTmRpc1plcm9NZW1vcnkoJnBBZC0+VGltZXJRLCBzaXplb2YocEFkLT5UaW1lclEpKTsKKwkvL0ludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+VGltZXJRLmNvdW50LCAwKTsKKworCS8qIEluaXRpYWxpc2UgdGhlIHdhaXQgcSBoZWFkICovCisJLy9pbml0X3dhaXRxdWV1ZV9oZWFkKCZ0aW1lcldhaXRRKTsKKworCW9zX2FsbG9jX21lbShwQWQsICZwQWQtPlRpbWVyUS5wVGltZXJRUG9sbCwgc2l6ZW9mKFJUMjg3MF9USU1FUl9FTlRSWSkgKiBUSU1FUl9RVUVVRV9TSVpFX01BWCk7CisJaWYgKHBBZC0+VGltZXJRLnBUaW1lclFQb2xsKQorCXsKKwkJcEVudHJ5ID0gTlVMTDsKKwkJcFFOb2RlID0gKFJUMjg3MF9USU1FUl9FTlRSWSAqKXBBZC0+VGltZXJRLnBUaW1lclFQb2xsOworCQlmb3IgKGkgPSAwIDtpIDxUSU1FUl9RVUVVRV9TSVpFX01BWDsgaSsrKQorCQl7CisJCQlwUU5vZGUtPnBOZXh0ID0gcEVudHJ5OworCQkJcEVudHJ5ID0gcFFOb2RlOworCQkJcFFOb2RlKys7CisJCX0KKwkJcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3QgPSBwRW50cnk7CisJCXBBZC0+VGltZXJRLnBRSGVhZCA9IE5VTEw7CisJCXBBZC0+VGltZXJRLnBRVGFpbCA9IE5VTEw7CisJCXBBZC0+VGltZXJRLnN0YXR1cyA9IFJUMjg3MF9USFJFQURfSU5JVEVEOworCX0KKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOworfQorCisKK1ZPSUQgUlQyODcwX1dhdGNoRG9nKElOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJaW50IAkJCQkJaWR4OworCVVMT05HCQkJCWlycUZsYWdzOworCVBVUkIJCSAgIAkJcFVyYjsKKwlCT09MRUFOCQkJCW5lZWREdW1wU2VxID0gRkFMU0U7CisJVUlOVDMyICAgICAgICAgIAlNQUNWYWx1ZTsKKworCisJaWR4ID0gMDsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYUlhRX1BDTlQsICZNQUNWYWx1ZSk7CisJaWYgKChNQUNWYWx1ZSAmIDB4ZmYpICE9MCApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUWCBRVUVVRSAwIE5vdCBFTVBUWShWYWx1ZT0weCUweCkuICEhISEhISEhISEhISEhIVxuIiwgTUFDVmFsdWUpKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX0NGRywgMHhmNDAwMTIpOworCQl3aGlsZSgoTUFDVmFsdWUgJjB4ZmYpICE9IDAgJiYgKGlkeCsrIDwgMTApKQorCQl7CisJCSAgICAgICAgUlRNUF9JT19SRUFEMzIocEFkLCBUWFJYUV9QQ05ULCAmTUFDVmFsdWUpOworCQkgICAgICAgIE5kaXNNU2xlZXAoMSk7CisJCX0KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX0NGRywgMHhmNDAwMDYpOworCX0KKworLy9QUyBwYWNrZXRzIHVzZSBIQ0NBIHF1ZXVlIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZHggPSAwOworCQlpZiAoKE1BQ1ZhbHVlICYgMHhmZjAwKSAhPTAgKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUWCBRVUVVRSAxIE5vdCBFTVBUWShWYWx1ZT0weCUweCkuICEhISEhISEhISEhISEhIVxuIiwgTUFDVmFsdWUpKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9DRkcsIDB4ZjQwMDBhKTsKKwkJCXdoaWxlKChNQUNWYWx1ZSAmMHhmZjAwKSAhPSAwICYmIChpZHgrKyA8IDEwKSkKKwkJCXsKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYUlhRX1BDTlQsICZNQUNWYWx1ZSk7CisJCQkJTmRpc01TbGVlcCgxKTsKKwkJCX0KKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9DRkcsIDB4ZjQwMDA2KTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChwQWQtPndhdGNoRG9nUnhPdmVyRmxvd0NudCA+PSAyKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWF5YmUgdGhlIFJ4IEJ1bGstSW4gaGFuZ2VkISBDYW5jZWwgdGhlIHBlbmRpbmcgUnggYnVsa3MgcmVxdWVzdCFcbiIpKTsKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDYWxsIENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOIHRvIGNhbmNlbCB0aGUgcGVuZGluZyBSeCBCdWxrIVxuIikpOworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUKTsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU4sIE5VTEwsIDApOworCQkJbmVlZER1bXBTZXEgPSBUUlVFOworCQl9CisJCXBBZC0+d2F0Y2hEb2dSeE92ZXJGbG93Q250ID0gMDsKKwl9CisKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgTlVNX09GX1RYX1JJTkc7IGlkeCsrKQorCXsKKwkJcFVyYiA9IE5VTEw7CisKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tpZHhdLCBpcnFGbGFncyk7CisJCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1tpZHhdID09IFRSVUUpICYmIHBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnQpCisJCXsKKwkJCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbaWR4XSsrOworCisJCQlpZiAoKHBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbaWR4XSA+IDIpICYmCisJCQkJICghUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8IGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpKQorCQkJCSkKKwkJCXsKKwkJCQkvLyBGSVhNRTogRm9sbG93aW5nIGNvZGUganVzdCBzdXBwb3J0IHNpbmdsZSBidWxrIG91dC4gSWYgeW91IHdhbm5hIHN1cHBvcnQgbXVsdGlwbGUgYnVsayBvdXQuIE1vZGlmeSBpdCEKKwkJCQlwSFRUWENvbnRleHQgPSAoUEhUX1RYX0NPTlRFWFQpKCZwQWQtPlR4Q29udGV4dFtpZHhdKTsKKwkJCQlpZiAocEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nKQorCQkJCXsJLy8gQ2hlY2sgVHhDb250ZXh0LgorCQkJCQlwVXJiID0gcEhUVFhDb250ZXh0LT5wVXJiOworCQkJCX0KKwkJCQllbHNlIGlmIChpZHggPT0gTUdNVFBJUEVJRFgpCisJCQkJeworCQkJCQlQVFhfQ09OVEVYVCBwTUxNRUNvbnRleHQsIHBOVUxMQ29udGV4dCwgcFBzUG9sbENvbnRleHQ7CisKKwkJCQkJLy9DaGVjayBNZ210Q29udGV4dC4KKwkJCQkJcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKShwQWQtPk1nbXRSaW5nLkNlbGxbcEFkLT5NZ210UmluZy5UeERtYUlkeF0uQWxsb2NWYSk7CisJCQkJCXBQc1BvbGxDb250ZXh0ID0gKFBUWF9DT05URVhUKSgmcEFkLT5Qc1BvbGxDb250ZXh0KTsKKwkJCQkJcE5VTExDb250ZXh0ID0gKFBUWF9DT05URVhUKSgmcEFkLT5OdWxsQ29udGV4dCk7CisKKwkJCQkJaWYgKHBNTE1FQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQkJeworCQkJCQkJQVNTRVJUKHBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyk7CisJCQkJCQlwVXJiID0gcE1MTUVDb250ZXh0LT5wVXJiOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBOVUxMQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQkJeworCQkJCQkJQVNTRVJUKHBOVUxMQ29udGV4dC0+SVJQUGVuZGluZyk7CisJCQkJCQlwVXJiID0gcE5VTExDb250ZXh0LT5wVXJiOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nKQorCQkJCQl7CisJCQkJCQlBU1NFUlQocFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcpOworCQkJCQkJcFVyYiA9IHBQc1BvbGxDb250ZXh0LT5wVXJiOworCQkJCQl9CisJCQkJfQorCisJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW2lkeF0sIGlycUZsYWdzKTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1heWJlIHRoZSBUeCBCdWxrLU91dCBoYW5nZWQhIENhbmNlbCB0aGUgcGVuZGluZyBUeCBidWxrcyByZXF1ZXN0IG9mIGlkeCglZCkhXG4iLCBpZHgpKTsKKwkJCQlpZiAocFVyYikKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlVubGluayB0aGUgcGVuZGluZyBVUkIhXG4iKSk7CisJCQkJCS8vIHVubGluayBpdCBub3cKKwkJCQkJUlRVU0JfVU5MSU5LX1VSQihwVXJiKTsKKwkJCQkJLy8gU2xlZXAgMjAwIG1pY3Jvc2Vjb25kcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsKKwkJCQkJUlRNUHVzZWNEZWxheSgyMDApOworCQkJCQluZWVkRHVtcFNlcSA9IFRSVUU7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlVua29udyBidWxrT3V0IFVSQiBtYXliZSBoYW5nZWQhISEhISEhISEhISFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW2lkeF0sIGlycUZsYWdzKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tpZHhdLCBpcnFGbGFncyk7CisJCX0KKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBGb3IgU2lnbWEgZGVidWcsIGR1bXAgdGhlIGJhX3Jlb3JkZXJpbmcgc2VxdWVuY2UuCisJaWYoKG5lZWREdW1wU2VxID09IFRSVUUpICYmIChwQWQtPkNvbW1vbkNmZy5iRGlzYWJsZVJlb3JkZXJpbmcgPT0gMCkpCisJeworCQlVU0hPUlQJCQkJSWR4OworCQlQQkFfUkVDX0VOVFJZCQlwQkFFbnRyeSA9IE5VTEw7CisJCVVDSEFSCQkJCWNvdW50ID0gMDsKKwkJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGs7CisKKwkJSWR4ID0gcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5CQVJlY1djaWRBcnJheVswXTsKKworCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtJZHhdOworCQlpZigocEJBRW50cnktPmxpc3QucWxlbiA+IDApICYmIChwQkFFbnRyeS0+bGlzdC5uZXh0ICE9IE5VTEwpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOSUNVcGRhdGVSYXdDb3VudGVycygpOlRoZSBRdWV1ZWluZyBwa3QgaW4gcmVvcmRlcmluZyBidWZmZXI6XG4iKSk7CisJCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKKwkJCW1wZHVfYmxrID0gcEJBRW50cnktPmxpc3QubmV4dDsKKwkJCXdoaWxlIChtcGR1X2JsaykKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJcdCVkOlNlcS0lZCwgYkFNU0RVLSVkIVxuIiwgY291bnQsIG1wZHVfYmxrLT5TZXF1ZW5jZSwgbXBkdV9ibGstPmJBTVNEVSkpOworCQkJCW1wZHVfYmxrID0gbXBkdV9ibGstPm5leHQ7CisJCQkJY291bnQrKzsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiXG5wQkFFbnRyeS0+TGFzdEluZFNlcT0lZCFcbiIsIHBCQUVudHJ5LT5MYXN0SW5kU2VxKSk7CisJCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKKwkJfQorCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBSZWxlYXNlIGFsbG9jYXRlZCByZXNvdXJjZXMuCisKK0FyZ3VtZW50czoKKyAgICAqZGV2CQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZQorCXBBZAkJCQkJZHJpdmVyIGNvbnRyb2wgYmxvY2sgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgX3J0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgUFJUTVBfQURBUFRFUiBwQWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldF9kZXYgPSBOVUxMOworCisKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJydHVzYl9kaXNjb25uZWN0OiB1bnJlZ2lzdGVyIHVzYm5ldCB1c2ItJXMtJXNcbiIsCisJCQkJZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPmRldnBhdGgpKTsKKwlpZiAoIXBBZCkKKwl7CisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisJCWlmICgocEFkLT5NQ19Sb3dJRCA+PSAwKSAmJiAocEFkLT5NQ19Sb3dJRCA8PSBNQVhfTlVNX09GX01VTFRJUExFX0NBUkQpKQorCQkJTUNfQ2FyZFVzZWRbcEFkLT5NQ19Sb3dJRF0gPSAwOyAvLyBub3QgY2xlYXIgTUFDIGFkZHJlc3MKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCQl3aGlsZShNT0RfSU5fVVNFID4gMCkKKwkJeworCQkJTU9EX0RFQ19VU0VfQ09VTlQ7CisJCX0KKyNlbHNlCisJCXVzYl9wdXRfZGV2KGRldik7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKwkJcHJpbnRrKCJydHVzYl9kaXNjb25uZWN0OiBwQWQgPT0gTlVMTCFcbiIpOworCQlyZXR1cm47CisJfQorCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpOworCisKKworCS8vIGZvciBkZWJ1Zywgd2FpdCB0byBzaG93IHNvbWUgbWVzc2FnZXMgdG8gL3Byb2Mgc3lzdGVtCisJdWRlbGF5KDEpOworCisKKworCisJbmV0X2RldiA9IHBBZC0+bmV0X2RldjsKKwlpZiAocEFkLT5uZXRfZGV2ICE9IE5VTEwpCisJeworCQlwcmludGsoInJ0dXNiX2Rpc2Nvbm5lY3Q6IHVucmVnaXN0ZXJfbmV0ZGV2KCksIGRldi0+bmFtZT0lcyFcbiIsIG5ldF9kZXYtPm5hbWUpOworCQl1bnJlZ2lzdGVyX25ldGRldiAocEFkLT5uZXRfZGV2KTsKKwl9CisJdWRlbGF5KDEpOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworI2Vsc2UKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCXVkZWxheSgxKTsKKworCS8vIGZyZWUgbmV0X2RldmljZSBtZW1vcnkKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKwlrZnJlZShuZXRfZGV2KTsKKyNlbHNlCisJZnJlZV9uZXRkZXYobmV0X2Rldik7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKwkvLyBmcmVlIGFkYXB0ZXIgbWVtb3J5CisJUlRNUEZyZWVBZGFwdGVyKHBBZCk7CisKKwkvLyByZWxlYXNlIGEgdXNlIG9mIHRoZSB1c2IgZGV2aWNlIHN0cnVjdHVyZQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCXdoaWxlKE1PRF9JTl9VU0UgPiAwKQorCXsKKwkJTU9EX0RFQ19VU0VfQ09VTlQ7CisJfQorI2Vsc2UKKwl1c2JfcHV0X2RldihkZXYpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCXVkZWxheSgxKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiBSVFVTQiBkaXNjb25uZWN0IHN1Y2Nlc3NmdWxseVxuIikpOworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgUHJvYmUgUlQyOFhYIGNoaXBzZXQuCisKK0FyZ3VtZW50czoKKyAgICAqZGV2CQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZQorCWludGVyZmFjZQorCSppZF90YWJsZQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZSBJRAorCitSZXR1cm4gVmFsdWU6CisgICAgTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworc3RhdGljIHZvaWQgKnJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIFVJTlQgaW50ZXJmYWNlLAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCVBSVE1QX0FEQVBURVIgcEFkOworCXJ0Mjh4eF9wcm9iZSgodm9pZCAqKWRldiwgKHZvaWQgKilpZCwgaW50ZXJmYWNlLCAmcEFkKTsKKwlyZXR1cm4gKHZvaWQgKilwQWQ7Cit9CisKKy8vRGlzY29ubmVjdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGV4aXQgcm91dGluZQorc3RhdGljIHZvaWQgcnR1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB2b2lkICpwdHIpCit7CisJX3J0dXNiX2Rpc2Nvbm5lY3QoZGV2LCAoKFBSVE1QX0FEQVBURVIpcHRyKSk7Cit9CisKKyNlbHNlCS8qIGtlcm5lbCAyLjYgc2VyaWVzICovCitzdGF0aWMgaW50IHJ0dXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZDsKKwlyZXR1cm4gKGludClydDI4eHhfcHJvYmUoKHZvaWQgKilpbnRmLCAodm9pZCAqKWlkLCAwLCAmcEFkKTsKK30KKworCitzdGF0aWMgdm9pZCBydHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICAgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJUFJUTVBfQURBUFRFUiAgICAgICBwQWQ7CisKKworCXBBZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCV9ydHVzYl9kaXNjb25uZWN0KGRldiwgcEFkKTsKK30KKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENsb3NlIGtlcm5lbCB0aHJlYWRzLgorCitBcmd1bWVudHM6CisJKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICBOT05FCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUMjh4eFRocmVhZFRlcm1pbmF0ZSgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlQT1NfQ09PS0lFCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisJSU5UCQkJcmV0OworCisKKwkvLyBTbGVlcCA1MCBtaWxsaXNlY29uZHMgc28gcGVuZGluZyBpbyBtaWdodCBmaW5pc2ggbm9ybWFsbHkKKwlSVE1QdXNlY0RlbGF5KDUwMDAwKTsKKworCS8vIFdlIHdhbnQgdG8gd2FpdCB1bnRpbCBhbGwgcGVuZGluZyByZWNlaXZlcyBhbmQgc2VuZHMgdG8gdGhlCisJLy8gZGV2aWNlIG9iamVjdC4gV2UgY2FuY2VsIGFueQorCS8vIGlycHMuIFdhaXQgdW50aWwgc2VuZHMgYW5kIHJlY2VpdmVzIGhhdmUgc3RvcHBlZC4KKwlSVFVTQkNhbmNlbFBlbmRpbmdJUlBzKHBBZCk7CisKKwkvLyBUZXJtaW5hdGUgVGhyZWFkcworCWlmIChwT2JqLT5NTE1FVGhyX3BpZCkKKwl7CisJCXByaW50aygiVGVybWluYXRlIHRoZSBNTE1FVGhyX3BpZD0lZCFcbiIsIHBpZF9ucihwT2JqLT5NTE1FVGhyX3BpZCkpOworCQltYigpOworCQlwQWQtPm1sbWVfa2lsbCA9IDE7CisJCS8vUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCQltYigpOworCQlyZXQgPSBraWxsX3BpZChwT2JqLT5NTE1FVGhyX3BpZCwgU0lHVEVSTSwgMSk7CisJCWlmIChyZXQpCisJCXsKKwkJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIE1sbWUgdGhyZWFkLCBwaWQ9JWQsIHJldD0lZCFcbiIsCisJCQkJCXBBZC0+bmV0X2Rldi0+bmFtZSwgcGlkX25yKHBPYmotPk1MTUVUaHJfcGlkKSwgcmV0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vd2FpdF9mb3JfY29tcGxldGlvbiAoJnBBZC0+bm90aWZ5KTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm1sbWVDb21wbGV0ZSk7CisJCQlwT2JqLT5NTE1FVGhyX3BpZCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAocE9iai0+UlRVU0JDbWRUaHJfcGlkID49IDApCisJeworCQlwcmludGsoIlRlcm1pbmF0ZSB0aGUgUlRVU0JDbWRUaHJfcGlkPSVkIVxuIiwgcGlkX25yKHBPYmotPlJUVVNCQ21kVGhyX3BpZCkpOworCQltYigpOworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwkJcEFkLT5DbWRRLkNtZFFTdGF0ZSA9IFJUMjg3MF9USFJFQURfU1RPUEVEOworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwkJbWIoKTsKKwkJLy9SVFVTQkNNRFVwKHBBZCk7CisJCXJldCA9IGtpbGxfcGlkKHBPYmotPlJUVVNCQ21kVGhyX3BpZCwgU0lHVEVSTSwgMSk7CisJCWlmIChyZXQpCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gUlRVU0JDbWQgdGhyZWFkLCBwaWQ9JWQsIHJldD0lZCFcbiIsCisJCQkJCXBBZC0+bmV0X2Rldi0+bmFtZSwgcGlkX25yKHBPYmotPlJUVVNCQ21kVGhyX3BpZCksIHJldCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvL3dhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm5vdGlmeSk7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkLT5DbWRRQ29tcGxldGUpOworCQkJcE9iai0+UlRVU0JDbWRUaHJfcGlkID0gTlVMTDsKKwkJfQorCX0KKwlpZiAocE9iai0+VGltZXJRVGhyX3BpZCA+PSAwKQorCXsKKwkJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CisKKwkJcHJpbnRrKCJUZXJtaW5hdGUgdGhlIFRpbWVyUVRocl9waWQ9JWQhXG4iLCBwaWRfbnIocE9iai0+VGltZXJRVGhyX3BpZCkpOworCQltYigpOworCQlwQWQtPlRpbWVyRnVuY19raWxsID0gMTsKKwkJbWIoKTsKKwkJcmV0ID0ga2lsbF9waWQocE9iai0+VGltZXJRVGhyX3BpZCwgU0lHVEVSTSwgMSk7CisJCWlmIChyZXQpCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RvcCBUaW1lclFUaHJlYWQsIHBpZD0lZCwgcmV0PSVkIVxuIiwKKwkJCQkJcEFkLT5uZXRfZGV2LT5uYW1lLCBwaWRfbnIocE9iai0+VGltZXJRVGhyX3BpZCksIHJldCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwcmludGsoIndhaXRfZm9yX2NvbXBsZXRpb24gVGltZXJRVGhyXG4iKTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBBZC0+VGltZXJRQ29tcGxldGUpOworCQkJcE9iai0+VGltZXJRVGhyX3BpZCA9IE5VTEw7CisJCX0KKwl9CisJLy8gS2lsbCB0YXNrbGV0cworCXBBZC0+bWxtZV9raWxsID0gMDsKKwlwQWQtPkNtZFEuQ21kUVN0YXRlID0gUlQyODcwX1RIUkVBRF9VTktOT1dOOworCXBBZC0+VGltZXJGdW5jX2tpbGwgPSAwOworfQorCisKK3ZvaWQga2lsbF90aHJlYWRfdGFzayhJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQT1NfQ09PS0lFIHBPYmo7CisKKwlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJdGFza2xldF9raWxsKCZwT2JqLT5yeF9kb25lX3Rhc2spOworCXRhc2tsZXRfa2lsbCgmcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmFjMF9kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmFjMV9kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmFjMl9kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmFjM19kbWFfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPmhjY2FfZG1hX2RvbmVfdGFzayk7CisJdGFza2xldF9raWxsKCZwT2JqLT50YnR0X3Rhc2spOworCit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBDaGVjayB0aGUgY2hpcHNldCB2ZW5kb3IvcHJvZHVjdCBJRC4KKworQXJndW1lbnRzOgorICAgIF9kZXZfcAkJCQlQb2ludCB0byB0aGUgUENJIG9yIFVTQiBkZXZpY2UKKworUmV0dXJuIFZhbHVlOgorICAgIFRSVUUJCQkJQ2hlY2sgb2sKKwlGQUxTRQkJCQlDaGVjayBmYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJUMjhYWENoaXBzZXRDaGVjaygKKwlJTiB2b2lkICpfZGV2X3ApCit7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCS8qIGtlcm5lbCAyLjQgc2VyaWVzICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldl9wID0gKHN0cnVjdCB1c2JfZGV2aWNlICopX2Rldl9wOworI2Vsc2UKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKV9kZXZfcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2X3AgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCVVJTlQzMiBpOworCisKKwlmb3IoaT0wOyBpPHJ0dXNiX3VzYl9pZF9sZW47IGkrKykKKwl7CisJCWlmIChkZXZfcC0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBydHVzYl91c2JfaWRbaV0uaWRWZW5kb3IgJiYKKwkJCWRldl9wLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBydHVzYl91c2JfaWRbaV0uaWRQcm9kdWN0KQorCQl7CisJCQlwcmludGsoInJ0Mjg3MDogaWRWZW5kb3IgPSAweCV4LCBpZFByb2R1Y3QgPSAweCV4XG4iLAorCQkJCQlkZXZfcC0+ZGVzY3JpcHRvci5pZFZlbmRvciwgZGV2X3AtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gcnR1c2JfdXNiX2lkX2xlbikKKwl7CisJCXByaW50aygicnQyODcwOiBFcnJvciEgRGV2aWNlIERlc2NyaXB0b3Igbm90IG1hdGNoaW5nIVxuIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEluaXQgbmV0IGRldmljZSBzdHJ1Y3R1cmUuCisKK0FyZ3VtZW50czoKKyAgICBfZGV2X3AJCQkJUG9pbnQgdG8gdGhlIFBDSSBvciBVU0IgZGV2aWNlCisgICAgKm5ldF9kZXYJCQlQb2ludCB0byB0aGUgbmV0IGRldmljZQorCSpwQWQJCQkJdGhlIHJheHggaW50ZXJmYWNlIGRhdGEgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgVFJVRQkJCQlJbml0IG9rCisJRkFMU0UJCQkJSW5pdCBmYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJUMjhYWE5ldERldkluaXQoCisJSU4gdm9pZCAJCQkJKl9kZXZfcCwKKwlJTiBzdHJ1Y3QgIG5ldF9kZXZpY2UJKm5ldF9kZXYsCisJSU4gUlRNUF9BREFQVEVSIAkJKnBBZCkKK3sKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2X3AgPSAoc3RydWN0IHVzYl9kZXZpY2UgKilfZGV2X3A7CisjZWxzZQorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopX2Rldl9wOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZfcCA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCXBBZC0+Y29uZmlnID0gZGV2X3AtPmNvbmZpZzsKKyNlbHNlCisJcEFkLT5jb25maWcgPSAmZGV2X3AtPmNvbmZpZy0+ZGVzYzsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKwlyZXR1cm4gVFJVRTsKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEluaXQgbmV0IGRldmljZSBzdHJ1Y3R1cmUuCisKK0FyZ3VtZW50czoKKyAgICBfZGV2X3AJCQkJUG9pbnQgdG8gdGhlIFBDSSBvciBVU0IgZGV2aWNlCisJKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICBUUlVFCQkJCUNvbmZpZyBvaworCUZBTFNFCQkJCUNvbmZpZyBmYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCitCT09MRUFOIFJUMjhYWFByb2JlUG9zdENvbmZpZygKKwlJTiB2b2lkIAkJCQkqX2Rldl9wLAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQsCisJSU4gSU5UMzIJCQkJaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZfcCA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKV9kZXZfcDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJVUxPTkcgQnVsa091dElkeDsKKwlVSU5UMzIgaTsKKworCisJLyogZ2V0IHRoZSBhY3RpdmUgaW50ZXJmYWNlIGRlc2NyaXB0b3IgKi8KKwlpbnRmID0gJmRldl9wLT5hY3Rjb25maWctPmludGVyZmFjZVtpbnRlcmZhY2VdOworCWlmYWNlX2Rlc2MgPSAmaW50Zi0+YWx0c2V0dGluZ1swXTsKKworCS8qIGdldCAjIG9mIGVucG9pbnRzICovCisJcEFkLT5OdW1iZXJPZlBpcGVzID0gaWZhY2VfZGVzYy0+Yk51bUVuZHBvaW50czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOdW1FbmRwb2ludHM9JWRcbiIsIGlmYWNlX2Rlc2MtPmJOdW1FbmRwb2ludHMpKTsKKworCS8qIENvbmZpZ3VyZSBQaXBlcyAqLworCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50WzBdOworCUJ1bGtPdXRJZHggPSAwOworCisJZm9yKGk9MDsgaTxwQWQtPk51bWJlck9mUGlwZXM7IGkrKykKKwl7CisJCWlmICgoZW5kcG9pbnRbaV0uYm1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspICYmCisJCQkoKGVuZHBvaW50W2ldLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pKQorCQl7CisJCQlwQWQtPkJ1bGtJbkVwQWRkciA9IGVuZHBvaW50W2ldLmJFbmRwb2ludEFkZHJlc3M7CisJCQlwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUgPSBlbmRwb2ludFtpXS53TWF4UGFja2V0U2l6ZTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiQlVMSyBJTiBNYXhpbXVtUGFja2V0U2l6ZSA9ICVkXG4iLCBwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUpKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkVQIGFkZHJlc3MgPSAweCUyeCAgXG4iLCBlbmRwb2ludFtpXS5iRW5kcG9pbnRBZGRyZXNzKSk7CisJCX0KKwkJZWxzZSBpZiAoKGVuZHBvaW50W2ldLmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJgorCQkJCSgoZW5kcG9pbnRbaV0uYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpKQorCQl7CisJCQkvLyBUaGVyZSBhcmUgNiBidWxrIG91dCBFUC4gRVA2IGhpZ2hlc3QgcHJpb3JpdHkuCisJCQkvLyBFUDEtNCBpcyBFRENBLiAgRVA1IGlzIEhDQ0EuCisJCQlwQWQtPkJ1bGtPdXRFcEFkZHJbQnVsa091dElkeCsrXSA9IGVuZHBvaW50W2ldLmJFbmRwb2ludEFkZHJlc3M7CisJCQlwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplID0gZW5kcG9pbnRbaV0ud01heFBhY2tldFNpemU7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkJVTEsgT1VUIE1heGltdW1QYWNrZXRTaXplID0gJWRcbiIsIHBBZC0+QnVsa091dE1heFBhY2tldFNpemUpKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkVQIGFkZHJlc3MgPSAweCUyeCAgXG4iLCBlbmRwb2ludFtpXS5iRW5kcG9pbnRBZGRyZXNzKSk7CisJCX0KKwl9CisKKwlpZiAoIShwQWQtPkJ1bGtJbkVwQWRkciAmJiBwQWQtPkJ1bGtPdXRFcEFkZHJbMF0pKQorCXsKKwkJcHJpbnRrKCJDb3VsZCBub3QgZmluZCBib3RoIGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50c1xuIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworI2Vsc2UKK0JPT0xFQU4gUlQyOFhYUHJvYmVQb3N0Q29uZmlnKAorCUlOIHZvaWQgCQkJCSpfZGV2X3AsCisJSU4gUlRNUF9BREFQVEVSIAkJKnBBZCwKKwlJTiBJTlQzMgkJCQlpbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKilfZGV2X3A7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlVTE9ORyBCdWxrT3V0SWR4OworCVVJTlQzMiBpOworCisKKwkvKiBnZXQgdGhlIGFjdGl2ZSBpbnRlcmZhY2UgZGVzY3JpcHRvciAqLworCWlmYWNlX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCS8qIGdldCAjIG9mIGVucG9pbnRzICAqLworCXBBZC0+TnVtYmVyT2ZQaXBlcyA9IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCSgiTnVtRW5kcG9pbnRzPSVkXG4iLCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHMpKTsKKworCS8qIENvbmZpZ3VyZSBQaXBlcyAqLworCUJ1bGtPdXRJZHggPSAwOworCisJZm9yKGk9MDsgaTxwQWQtPk51bWJlck9mUGlwZXM7IGkrKykKKwl7CisJCWlmICgoaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5ibUF0dHJpYnV0ZXMgPT0KKwkJCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJgorCQkJKChpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJgorCQkJCVVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTikpCisJCXsKKwkJCXBBZC0+QnVsa0luRXBBZGRyID0gaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQkJcEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplID0gaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy53TWF4UGFja2V0U2l6ZTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiQlVMSyBJTiBNYXhpbXVtUGFja2V0U2l6ZSA9ICVkXG4iLCBwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUpKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkVQIGFkZHJlc3MgPSAweCUyeFxuIiwgaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzKSk7CisJCX0KKwkJZWxzZSBpZiAoKGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYm1BdHRyaWJ1dGVzID09CisJCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspICYmCisJCQkJKChpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJgorCQkJCQlVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSkKKwkJeworCQkJLy8gdGhlcmUgYXJlIDYgYnVsayBvdXQgRVAuIEVQNiBoaWdoZXN0IHByaW9yaXR5LgorCQkJLy8gRVAxLTQgaXMgRURDQS4gIEVQNSBpcyBIQ0NBLgorCQkJcEFkLT5CdWxrT3V0RXBBZGRyW0J1bGtPdXRJZHgrK10gPSBpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCQlwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplID0gaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy53TWF4UGFja2V0U2l6ZTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiQlVMSyBPVVQgTWF4aW11bVBhY2tldFNpemUgPSAlZFxuIiwgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkpOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiRVAgYWRkcmVzcyA9IDB4JTJ4ICBcbiIsIGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcykpOworCQl9CisJfQorCisJaWYgKCEocEFkLT5CdWxrSW5FcEFkZHIgJiYgcEFkLT5CdWxrT3V0RXBBZGRyWzBdKSkKKwl7CisJCXByaW50aygiJXM6IENvdWxkIG5vdCBmaW5kIGJvdGggYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBEaXNhYmxlIERNQS4KKworQXJndW1lbnRzOgorCSpwQWQJCQkJdGhlIHJheHggaW50ZXJmYWNlIGRhdGEgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisJTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVDI4WFhETUFEaXNhYmxlKAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQpCit7CisJLy8gbm8gdXNlCit9CisKKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEVuYWJsZSBETUEuCisKK0FyZ3VtZW50czoKKwkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorCU5vbmUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlQyOFhYRE1BRW5hYmxlKAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQpCit7CisJV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7CisJVVNCX0RNQV9DRkdfU1RSVUMJVXNiQ2ZnOworCWludAkJCQkJaSA9IDA7CisKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHg0KTsKKwlkbworCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmR2xvQ2ZnLndvcmQpOworCQlpZiAoKEdsb0NmZy5maWVsZC5UeERNQUJ1c3kgPT0gMCkgICYmIChHbG9DZmcuZmllbGQuUnhETUFCdXN5ID09IDApKQorCQkJYnJlYWs7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+ICBETUFCdXN5XG4iKSk7CisJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCWkrKzsKKwl9d2hpbGUgKCBpIDwyMDApOworCisKKwlSVE1QdXNlY0RlbGF5KDUwKTsKKwlHbG9DZmcuZmllbGQuRW5UWFdyaXRlQmFja0RET05FID0gMTsKKwlHbG9DZmcuZmllbGQuRW5hYmxlUnhETUEgPSAxOworCUdsb0NmZy5maWVsZC5FbmFibGVUeERNQSA9IDE7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IFdSSVRFIERNQSBvZmZzZXQgMHgyMDggPSAweCV4XG4iLCBHbG9DZmcud29yZCkpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdQRE1BX0dMT19DRkcsIEdsb0NmZy53b3JkKTsKKworCVVzYkNmZy53b3JkID0gMDsKKwlVc2JDZmcuZmllbGQucGh5Y2xlYXIgPSAwOworCS8qIHVzYiB2ZXJzaW9uIGlzIDEuMSxkbyBub3QgdXNlIGJ1bGsgaW4gYWdncmVnYXRpb24gKi8KKwlpZiAocEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplID09IDUxMikKKwkJCVVzYkNmZy5maWVsZC5SeEJ1bGtBZ2dFbiA9IDE7CisJLyogZm9yIGxhc3QgcGFja2V0LCBQQkYgbWlnaHQgdXNlIG1vcmUgdGhhbiBsaW1pdGVkLCBzbyBtaW51cyAyIHRvIHByZXZlbnQgZnJvbSBlcnJvciAqLworCVVzYkNmZy5maWVsZC5SeEJ1bGtBZ2dMbXQgPSAoTUFYX1JYQlVMS19TSVpFIC8xMDI0KS0zOworCVVzYkNmZy5maWVsZC5SeEJ1bGtBZ2dUT3V0ID0gMHg4MDsgLyogMjAwNi0xMC0xOCAqLworCVVzYkNmZy5maWVsZC5SeEJ1bGtFbiA9IDE7CisJVXNiQ2ZnLmZpZWxkLlR4QnVsa0VuID0gMTsKKworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLCBVc2JDZmcud29yZCk7CisKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBXcml0ZSBCZWFjb24gYnVmZmVyIHRvIEFzaWMuCisKK0FyZ3VtZW50czoKKwkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorCU5vbmUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlQyOHh4X1VwZGF0ZUJlYWNvblRvQXNpYygKKwlJTiBSVE1QX0FEQVBURVIJCSpwQWQsCisJSU4gSU5UCQkJCWFwaWR4LAorCUlOIFVMT05HCQkJRnJhbWVMZW4sCisJSU4gVUxPTkcJCQlVcGRhdGVQb3MpCit7CisJUFVDSEFSICAgICAgICAJcEJlYWNvbkZyYW1lID0gTlVMTDsKKwlVQ0hBUiAgCQkJKnB0cjsKKwlVSU5UICAJCQlpLCBwYWRkaW5nOworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKKwlVSU5UMzIJCQlsb25nVmFsdWU7CisvLwlVU0hPUlQJCQlzaG9ydFZhbHVlOworCUJPT0xFQU4JCQliQmNuUmVxID0gRkFMU0U7CisJVUNIQVIJCQliY25faWR4ID0gMDsKKworCisJaWYgKHBCZWFjb25GcmFtZSA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJwQmVhY29uRnJhbWUgaXMgTlVMTCFcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwQmVhY29uU3luYyA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJwQmVhY29uU3luYyBpcyBOVUxMIVxuIikpOworCQlyZXR1cm47CisJfQorCisJLy9pZiAoKHBBZC0+V2RzVGFiLk1vZGUgPT0gV0RTX0JSSURHRV9NT0RFKSB8fAorCS8vCSgocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLk1TU0lERGV2ID09IE5VTEwpIHx8ICEocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLk1TU0lERGV2LT5mbGFncyAmIElGRl9VUCkpCisJLy8JKQorCWlmIChiQmNuUmVxID09IEZBTFNFKQorCXsKKwkJLyogd2hlbiB0aGUgcmEgaW50ZXJmYWNlIGlzIGRvd24sIGRvIG5vdCBzZW5kIGl0cyBiZWFjb24gZnJhbWUgKi8KKwkJLyogY2xlYXIgYWxsIHplcm8gKi8KKwkJZm9yKGk9MDsgaTxUWFdJX1NJWkU7IGkrPTQpIHsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgaSwgMHgwMCk7CisJCX0KKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCAmPSAofihCRUFDT05fQklUTUFQX01BU0sgJiAoMSA8PCBiY25faWR4KSkpOworCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVtiY25faWR4XSwgVFhXSV9TSVpFKTsKKwl9CisJZWxzZQorCXsKKwkJcHRyID0gKFBVQ0hBUikmcEFkLT5CZWFjb25UeFdJOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJUlRNUFdJRW5kaWFuQ2hhbmdlKHB0ciwgVFlQRV9UWFdJKTsKKyNlbmRpZgorCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2Jjbl9pZHhdLCAmcEFkLT5CZWFjb25UeFdJLCBUWFdJX1NJWkUpID09IEZBTFNFKQorCQl7CS8vIElmIEJlYWNvblR4V0kgY2hhbmdlZCwgd2UgbmVlZCB0byByZXdyaXRlIHRoZSBUeFdJIGZvciB0aGUgQmVhY29uIGZyYW1lcy4KKwkJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgJj0gKH4oQkVBQ09OX0JJVE1BUF9NQVNLICYgKDEgPDwgYmNuX2lkeCkpKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2Jjbl9pZHhdLCAmcEFkLT5CZWFjb25UeFdJLCBUWFdJX1NJWkUpOworCQl9CisKKwkJaWYgKChwQmVhY29uU3luYy0+QmVhY29uQml0TWFwICYgKDEgPDwgYmNuX2lkeCkpICE9ICgxIDw8IGJjbl9pZHgpKQorCQl7CisJCQlmb3IgKGk9MDsgaTxUWFdJX1NJWkU7IGkrPTQpICAvLyAxNi1ieXRlIFRYV0kgZmllbGQKKwkJCXsKKwkJCQlsb25nVmFsdWUgPSAgKnB0ciArICgqKHB0cisxKTw8OCkgKyAoKihwdHIrMik8PDE2KSArICgqKHB0ciszKTw8MjQpOworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgaSwgbG9uZ1ZhbHVlKTsKKwkJCQlwdHIgKz0gNDsKKwkJCX0KKwkJfQorCisJCXB0ciA9IHBCZWFjb25TeW5jLT5CZWFjb25CdWZbYmNuX2lkeF07CisJCXBhZGRpbmcgPSAoRnJhbWVMZW4gJiAweDAxKTsKKwkJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikocEJlYWNvbkZyYW1lICsgRnJhbWVMZW4pLCBwYWRkaW5nKTsKKwkJRnJhbWVMZW4gKz0gcGFkZGluZzsKKwkJZm9yIChpID0gMCA7IGkgPCBGcmFtZUxlbiAvKkhXX0JFQUNPTl9PRkZTRVQqLzsgaSArPSAyKQorCQl7CisJCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHB0ciwgcEJlYWNvbkZyYW1lLCAyKSA9PSBGQUxTRSkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwdHIsIHBCZWFjb25GcmFtZSwgMik7CisJCQkJLy9zaG9ydFZhbHVlID0gKnB0ciArICgqKHB0cisxKTw8OCk7CisJCQkJLy9SVE1QX0lPX1dSSVRFOChwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgVFhXSV9TSVpFICsgaSwgc2hvcnRWYWx1ZSk7CisJCQkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgcEFkLT5CZWFjb25PZmZzZXRbYmNuX2lkeF0gKyBUWFdJX1NJWkUgKyBpLCBwdHIsIDIpOworCQkJfQorCQkJcHRyICs9MjsKKwkJCXBCZWFjb25GcmFtZSArPSAyOworCQl9CisKKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCB8PSAoMSA8PCBiY25faWR4KTsKKworCQkvLyBGb3IgQVAgaW50ZXJmYWNlLCBzZXQgdGhlIER0aW1CaXRPbiBzbyB0aGF0IHdlIGNhbiBzZW5kIEJjYXN0L01jYXN0IGZyYW1lIG91dCBhZnRlciB0aGlzIGJlYWNvbiBmcmFtZS4KKwl9CisKK30KKworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25TdG9wKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisJaW50IGksIG9mZnNldDsKKwlCT09MRUFOCUNhbmNlbGxlZCA9IFRSVUU7CisKKwlwQmVhY29uU3luYyA9IHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jOworCWlmIChwQmVhY29uU3luYyAmJiBwQmVhY29uU3luYy0+RW5hYmxlQmVhY29uKQorCXsKKwkJSU5UIE51bU9mQmNuOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJTnVtT2ZCY24gPSBNQVhfTUVTSF9OVU07CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLCAmQ2FuY2VsbGVkKTsKKworCQlmb3IoaT0wOyBpPE51bU9mQmNuOyBpKyspCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25CdWZbaV0sIEhXX0JFQUNPTl9PRkZTRVQpOworCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbaV0sIFRYV0lfU0laRSk7CisKKwkJCWZvciAob2Zmc2V0PTA7IG9mZnNldDxIV19CRUFDT05fT0ZGU0VUOyBvZmZzZXQrPTQpCisJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgcEFkLT5CZWFjb25PZmZzZXRbaV0gKyBvZmZzZXQsIDB4MDApOworCisJCQlwQmVhY29uU3luYy0+Q2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uW2ldID0gMDsKKwkJCXBCZWFjb25TeW5jLT5UaW1JRUxvY2F0aW9uSW5CZWFjb25baV0gPSAwOworCQl9CisJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgPSAwOworCQlwQmVhY29uU3luYy0+RHRpbUJpdE9uID0gMDsKKwl9Cit9CisKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uU3RhcnQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpCit7CisJaW50IGFwaWR4OworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisvLwlMQVJHRV9JTlRFR0VSIAl0c2ZUaW1lLCBkZWx0YVRpbWU7CisKKwlwQmVhY29uU3luYyA9IHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jOworCWlmIChwQmVhY29uU3luYyAmJiBwQmVhY29uU3luYy0+RW5hYmxlQmVhY29uKQorCXsKKwkJSU5UIE51bU9mQmNuOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJTnVtT2ZCY24gPSBNQVhfTUVTSF9OVU07CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlmb3IoYXBpZHg9MDsgYXBpZHg8TnVtT2ZCY247IGFwaWR4KyspCisJCXsKKwkJCVVDSEFSIENhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbiA9IDA7CisJCQlVQ0hBUiBUaW1JRUxvY2F0aW9uSW5CZWFjb24gPSAwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25CdWZbYXBpZHhdLCBIV19CRUFDT05fT0ZGU0VUKTsKKwkJCXBCZWFjb25TeW5jLT5DYXBhYmlsaXR5SW5mb0xvY2F0aW9uSW5CZWFjb25bYXBpZHhdID0gQ2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uOworCQkJcEJlYWNvblN5bmMtPlRpbUlFTG9jYXRpb25JbkJlYWNvblthcGlkeF0gPSBUaW1JRUxvY2F0aW9uSW5CZWFjb247CisJCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVthcGlkeF0sIFRYV0lfU0laRSk7CisJCX0KKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCA9IDA7CisJCXBCZWFjb25TeW5jLT5EdGltQml0T24gPSAwOworCQlwQWQtPkNvbW1vbkNmZy5CZWFjb25VcGRhdGVUaW1lci5SZXBlYXQgPSBUUlVFOworCisJCXBBZC0+Q29tbW9uQ2ZnLkJlYWNvbkFkanVzdCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkJlYWNvbkZhY3RvciA9IDB4ZmZmZmZmZmYgLyAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKTsKKwkJcEFkLT5Db21tb25DZmcuQmVhY29uUmVtYWluID0gKDB4ZmZmZmZmZmYgJSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKSkgKyAxOworCQlwcmludGsoIlJUMjg3MF9Cc3NCZWFjb25TdGFydDpCZWFjb25GYWN0b3I9JWQsIEJlYWNvblJlbWFpbj0lZCFcbiIsIHBBZC0+Q29tbW9uQ2ZnLkJlYWNvbkZhY3RvciwgcEFkLT5Db21tb25DZmcuQmVhY29uUmVtYWluKTsKKwkJUlRNUFNldFRpbWVyKCZwQWQtPkNvbW1vbkNmZy5CZWFjb25VcGRhdGVUaW1lciwgcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kKTsKKworCX0KK30KKworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25Jbml0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisJaW50IGk7CisKKwlOZGlzQWxsb2NNZW1vcnkocEFkLT5Db21tb25DZmcucEJlYWNvblN5bmMsIHNpemVvZihCRUFDT05fU1lOQ19TVFJVQ1QpLCBNRU1fQUxMT0NfRkxBRyk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jKQorCXsKKwkJcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKKwkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMsIHNpemVvZihCRUFDT05fU1lOQ19TVFJVQ1QpKTsKKwkJZm9yKGk9MDsgaSA8IEhXX0JFQUNPTl9NQVhfQ09VTlQ7IGkrKykKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvbkJ1ZltpXSwgSFdfQkVBQ09OX09GRlNFVCk7CisJCQlwQmVhY29uU3luYy0+Q2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uW2ldID0gMDsKKwkJCXBCZWFjb25TeW5jLT5UaW1JRUxvY2F0aW9uSW5CZWFjb25baV0gPSAwOworCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbaV0sIFRYV0lfU0laRSk7CisJCX0KKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCA9IDA7CisKKwkJLy9SVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQmVhY29uVXBkYXRlRXhlYyksIHBBZCwgVFJVRSk7CisJCXBCZWFjb25TeW5jLT5FbmFibGVCZWFjb24gPSBUUlVFOworCX0KK30KKworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25FeGl0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisJQk9PTEVBTglDYW5jZWxsZWQgPSBUUlVFOworCWludCBpOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jKQorCXsKKwkJcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKKwkJcEJlYWNvblN5bmMtPkVuYWJsZUJlYWNvbiA9IEZBTFNFOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLCAmQ2FuY2VsbGVkKTsKKwkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCA9IDA7CisKKwkJZm9yKGk9MDsgaTxIV19CRUFDT05fTUFYX0NPVU5UOyBpKyspCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25CdWZbaV0sIEhXX0JFQUNPTl9PRkZTRVQpOworCQkJcEJlYWNvblN5bmMtPkNhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbltpXSA9IDA7CisJCQlwQmVhY29uU3luYy0+VGltSUVMb2NhdGlvbkluQmVhY29uW2ldID0gMDsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2ldLCBUWFdJX1NJWkUpOworCQl9CisKKwkJTmRpc0ZyZWVNZW1vcnkocEFkLT5Db21tb25DZmcucEJlYWNvblN5bmMsIEhXX0JFQUNPTl9PRkZTRVQgKiBIV19CRUFDT05fTUFYX0NPVU5ULCAwKTsKKwkJcEFkLT5Db21tb25DZmcucEJlYWNvblN5bmMgPSBOVUxMOworCX0KK30KKworVk9JRCBCZWFjb25VcGRhdGVFeGVjKAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlQUlRNUF9BREFQVEVSCXBBZCA9IChQUlRNUF9BREFQVEVSKUZ1bmN0aW9uQ29udGV4dDsKKwlMQVJHRV9JTlRFR0VSCXRzZlRpbWVfYTsvLywgdHNmVGltZV9iLCBkZWx0YVRpbWVfZXhwLCBkZWx0YVRpbWVfYWI7CisJVUlOVDMyCQkJZGVsdGEsIHJlbWFpbiwgcmVtYWluX2xvdywgcmVtYWluX2hpZ2g7CisvLwlCT09MRUFOCQkJcG9zaXRpdmU7CisKKwlSZVN5bmNCZWFjb25UaW1lKHBBZCk7CisKKworCisJUlRNUF9JT19SRUFEMzIocEFkLCBUU0ZfVElNRVJfRFcwLCAmdHNmVGltZV9hLnUuTG93UGFydCk7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUU0ZfVElNRVJfRFcxLCAmdHNmVGltZV9hLnUuSGlnaFBhcnQpOworCisKKwkvL3Bvc2l0aXZlPWdldERlbHRhVGltZSh0c2ZUaW1lX2EsIGV4cGVjdGVkVGltZSwgJmRlbHRhVGltZV9leHApOworCXJlbWFpbl9oaWdoID0gcEFkLT5Db21tb25DZmcuQmVhY29uUmVtYWluICogdHNmVGltZV9hLnUuSGlnaFBhcnQ7CisJcmVtYWluX2xvdyA9IHRzZlRpbWVfYS51Lkxvd1BhcnQgJSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKTsKKwlyZW1haW4gPSAocmVtYWluX2hpZ2ggKyByZW1haW5fbG93KSUocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKTsKKwlkZWx0YSA9IChwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPDwgMTApIC0gcmVtYWluOworCisJcEFkLT5Db21tb25DZmcuQmVhY29uVXBkYXRlVGltZXIuVGltZXJWYWx1ZSA9IChkZWx0YSA+PiAxMCkgKyAxMDsKKworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3ZmI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvS2NvbmZpZwpAQCAtMCwwICsxLDYgQEAKK2NvbmZpZyBSVDMwNzAKKwl0cmlzdGF0ZSAiUmFsaW5rIDMwNzAgd2lyZWxlc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBYODYgJiYgV0xBTl84MDIxMQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayAzMDcwIHdpcmVsZXNzIGNoaXAuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTgwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL01ha2VmaWxlCkBAIC0wLDAgKzEsNDcgQEAKK29iai0kKENPTkZJR19SVDMwNzApCSs9IHJ0MzA3MHN0YS5vCisKKyMgVE9ETzogYWxsIG9mIHRoZXNlIHNob3VsZCBiZSByZW1vdmVkCitFWFRSQV9DRkxBR1MgKz0gLURMSU5VWCAtREFHR1JFR0FUSU9OX1NVUFBPUlQgLURQSUdHWUJBQ0tfU1VQUE9SVCAtRFdNTV9TVVBQT1JUCitFWFRSQV9DRkxBR1MgKz0gLURSVDI4NzAgLURSVDMweHggLURSVDMwNzAKK0VYVFJBX0NGTEFHUyArPSAtRENPTkZJR19TVEFfU1VQUE9SVAorRVhUUkFfQ0ZMQUdTICs9IC1EREJHCitFWFRSQV9DRkxBR1MgKz0gLURET1QxMV9OX1NVUFBPUlQKK0VYVFJBX0NGTEFHUyArPSAtRFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKK0VYVFJBX0NGTEFHUyArPSAtRE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisKK3J0MzA3MHN0YS1vYmpzIDo9CQlcCisJY29tbW9uL21kNS5vCQlcCisJY29tbW9uL21sbWUubwkJXAorCWNvbW1vbi9ydG1wX3dlcC5vCVwKKwljb21tb24vYWN0aW9uLm8JCVwKKwljb21tb24vY21tX2RhdGEubwlcCisJY29tbW9uL3J0bXBfaW5pdC5vCVwKKwljb21tb24vcnRtcF90a2lwLm8JXAorCWNvbW1vbi9jbW1fc3luYy5vCVwKKwljb21tb24vZWVwcm9tLm8JCVwKKwljb21tb24vY21tX3Nhbml0eS5vCVwKKwljb21tb24vY21tX2luZm8ubwlcCisJY29tbW9uL2NtbV93cGEubwlcCisJY29tbW9uL2Rmcy5vCQlcCisJY29tbW9uL3NwZWN0cnVtLm8JXAorCXN0YS9hc3NvYy5vCQlcCisJc3RhL2Fpcm9uZXQubwkJXAorCXN0YS9hdXRoLm8JCVwKKwlzdGEvYXV0aF9yc3AubwkJXAorCXN0YS9zeW5jLm8JCVwKKwlzdGEvc2FuaXR5Lm8JCVwKKwlzdGEvcnRtcF9kYXRhLm8JCVwKKwlzdGEvY29ubmVjdC5vCQlcCisJc3RhL3dwYS5vCQlcCisJcnRfbGludXgubwkJXAorCXJ0X3Byb2ZpbGUubwkJXAorCXJ0X21haW5fZGV2Lm8JCVwKKwlzdGFfaW9jdGwubwkJXAorCWNvbW1vbi9iYV9hY3Rpb24ubwlcCisJMjg3MF9tYWluX2Rldi5vCQlcCisJY29tbW9uLzI4NzBfcnRtcF9pbml0Lm8JXAorCWNvbW1vbi9ydHVzYl9pby5vCVwKKwljb21tb24vcnR1c2JfYnVsay5vCVwKKwljb21tb24vcnR1c2JfZGF0YS5vCVwKKwljb21tb24vY21tX2RhdGFfMjg3MC5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYWN0aW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMzg3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FjdGlvbi5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJYWlyb25ldC5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisJUGF1bCBMaW4JMDQtMDYtMTUJCUluaXRpYWwKKyovCisKKyNpZm5kZWYJX19BQ1RJT05fSF9fCisjZGVmaW5lCV9fQUNUSU9OX0hfXworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX19IVF9JTkZPX09DVEVUCit7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCVJlc2VydmVkOjU7CisJVUNIQVIgCVNUQV9DaGFubmVsX1dpZHRoOjE7CisJVUNIQVIJRm9ydHlfTUh6X0ludG9sZXJhbnQ6MTsKKwlVQ0hBUglSZXF1ZXN0OjE7CisjZWxzZQorCVVDSEFSCVJlcXVlc3Q6MTsKKwlVQ0hBUglGb3J0eV9NSHpfSW50b2xlcmFudDoxOworCVVDSEFSIAlTVEFfQ2hhbm5lbF9XaWR0aDoxOworCVVDSEFSCVJlc2VydmVkOjU7CisjZW5kaWYKK30gSFRfSU5GT1JNQVRJT05fT0NURVQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9fRlJBTUVfSFRfSU5GTworeworCUhFQURFUl84MDJfMTEgICAJCUhkcjsKKwlVQ0hBUgkJCQkJQ2F0ZWdvcnk7CisJVUNIQVIJCQkJCUFjdGlvbjsKKwlIVF9JTkZPUk1BVElPTl9PQ1RFVAlIVF9JbmZvOworfSAgIEZSQU1FX0hUX0lORk8sICpQRlJBTUVfSFRfSU5GTzsKKworI2VuZGlmIC8qIF9fQUNUSU9OX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYWlyb25ldC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9haXJvbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwN2IxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYWlyb25ldC5oCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWFpcm9uZXQuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworCVBhdWwgTGluCTA0LTA2LTE1CQlJbml0aWFsCisqLworCisjaWZuZGVmCV9fQUlST05FVF9IX18KKyNkZWZpbmUJX19BSVJPTkVUX0hfXworCisvLyBNZWFzdXJlbWVudCBUeXBlIGRlZmluaXRpb24KKyNkZWZpbmUJTVNSTl9UWVBFX1VOVVNFRAkJCQkwCisjZGVmaW5lCU1TUk5fVFlQRV9DSEFOTkVMX0xPQURfUkVRCQkxCisjZGVmaW5lCU1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUQkJMgorI2RlZmluZQlNU1JOX1RZUEVfQkVBQ09OX1JFUQkJCTMKKyNkZWZpbmUJTVNSTl9UWVBFX0ZSQU1FX1JFUQkJCQk0CisKKy8vIFNjYW4gTW9kZSBpbiBCZWFjb24gUmVxdWVzdAorI2RlZmluZQlNU1JOX1NDQU5fTU9ERV9QQVNTSVZFCQkJMAorI2RlZmluZQlNU1JOX1NDQU5fTU9ERV9BQ1RJVkUJCQkxCisjZGVmaW5lCU1TUk5fU0NBTl9NT0RFX0JFQUNPTl9UQUJMRQkJMgorCisvLyBQSFkgdHlwZSBkZWZpbml0aW9uIGZvciBBaXJvbmV0IGJlYWNvbiByZXBvcnQsIENDWCAyIHRhYmxlIDM2LTkKKyNkZWZpbmUJUEhZX0ZICQkJCQkJCTEKKyNkZWZpbmUJUEhZX0RTUwkJCQkJCQkyCisjZGVmaW5lCVBIWV9VTlVTRUQJCQkJCQkzCisjZGVmaW5lCVBIWV9PRkRNCQkJCQkJNAorI2RlZmluZQlQSFlfSFJfRFNTCQkJCQkJNQorI2RlZmluZQlQSFlfRVJQCQkJCQkJCTYKKworLy8gUlBJIHRhYmxlIGluIGRCbQorI2RlZmluZQlSUElfMAkJCTAJCQkvLwlQb3dlciA8PSAtODcKKyNkZWZpbmUJUlBJXzEJCQkxCQkJLy8JLTg3IDwgUG93ZXIgPD0gLTgyCisjZGVmaW5lCVJQSV8yCQkJMgkJCS8vCS04MiA8IFBvd2VyIDw9IC03NworI2RlZmluZQlSUElfMwkJCTMJCQkvLwktNzcgPCBQb3dlciA8PSAtNzIKKyNkZWZpbmUJUlBJXzQJCQk0CQkJLy8JLTcyIDwgUG93ZXIgPD0gLTY3CisjZGVmaW5lCVJQSV81CQkJNQkJCS8vCS02NyA8IFBvd2VyIDw9IC02MgorI2RlZmluZQlSUElfNgkJCTYJCQkvLwktNjIgPCBQb3dlciA8PSAtNTcKKyNkZWZpbmUJUlBJXzcJCQk3CQkJLy8JLTU3IDwgUG93ZXIKKworLy8gQ2lzY28gQWlyb25ldCBJQVBQIGRlZmluZXRpb25zCisjZGVmaW5lCUFJUk9ORVRfSUFQUF9UWVBFCQkJCQkweDMyCisjZGVmaW5lCUFJUk9ORVRfSUFQUF9TVUJUWVBFX1JFUVVFU1QJCTB4MDEKKyNkZWZpbmUJQUlST05FVF9JQVBQX1NVQlRZUEVfUkVQT1JUCQkJMHg4MQorCisvLyBNZWFzdXJlbWVudCBSZXF1ZXN0IGRldGFpbCBmb3JtYXQKK3R5cGVkZWYJc3RydWN0CV9NRUFTVVJFTUVOVF9SRVFVRVNUCXsKKwlVQ0hBUglDaGFubmVsOworCVVDSEFSCVNjYW5Nb2RlOwkJCS8vIFVzZSBvbmx5IGluIGJlYWNvbiByZXF1ZXN0LCBvdGhlciByZXF1ZXN0cyBkaWQgbm90IHVzZSB0aGlzIGZpZWxkCisJVVNIT1JUCUR1cmF0aW9uOworfQlNRUFTVVJFTUVOVF9SRVFVRVNULCAqUE1FQVNVUkVNRU5UX1JFUVVFU1Q7CisKKy8vIEJlYWNvbiBNZWFzdXJlbWVudCBSZXBvcnQKKy8vIEFsbCB0aGVzZSBmaWVsZCBtaWdodCBjaGFuZ2UgdG8gVUNIQVIsIGJlY2F1c2Ugd2UgZGlkbid0IGRvIGFueXRoaW5nIHRvIHRoZXNlIHJlcG9ydC4KKy8vIFdlIGNvcHkgYWxsIHRoZXNlIGJlYWNvbnMgYW5kIHJlcG9ydCB0byBDQ1ggMiBBUC4KK3R5cGVkZWYJc3RydWN0CV9CRUFDT05fUkVQT1JUCXsKKwlVQ0hBUglDaGFubmVsOworCVVDSEFSCVNwYXJlOworCVVTSE9SVAlEdXJhdGlvbjsKKwlVQ0hBUglQaHlUeXBlOwkJCS8vIERlZmluaWF0aW9uIGlzIGxpc3RlZCBhYm92ZSB0YWJsZSAzNi05CisJVUNIQVIJUnhQb3dlcjsKKwlVQ0hBUglCU1NJRFs2XTsKKwlVQ0hBUglQYXJlbnRUU0ZbNF07CisJVUNIQVIJVGFyZ2V0VFNGWzhdOworCVVTSE9SVAlCZWFjb25JbnRlcnZhbDsKKwlVU0hPUlQJQ2FwYWJpbGl0eUluZm87Cit9CUJFQUNPTl9SRVBPUlQsICpQQkVBQ09OX1JFUE9SVDsKKworLy8gRnJhbWUgTWVhc3VyZW1lbnQgUmVwb3J0IChPcHRpb25hbCkKK3R5cGVkZWYJc3RydWN0CV9GUkFNRV9SRVBPUlQJeworCVVDSEFSCUNoYW5uZWw7CisJVUNIQVIJU3BhcmU7CisJVVNIT1JUCUR1cmF0aW9uOworCVVDSEFSCVRBOworCVVDSEFSCUJTU0lEWzZdOworCVVDSEFSCVJTU0k7CisJVUNIQVIJQ291bnQ7Cit9CUZSQU1FX1JFUE9SVCwgKlBGUkFNRV9SRVBPUlQ7CisKKyNwcmFnbWEgcGFjaygxKQorLy8gQ2hhbm5lbCBMb2FkIFJlcG9ydAordHlwZWRlZglzdHJ1Y3QJX0NIQU5ORUxfTE9BRF9SRVBPUlQJeworCVVDSEFSCUNoYW5uZWw7CisJVUNIQVIJU3BhcmU7CisJVVNIT1JUCUR1cmF0aW9uOworCVVDSEFSCUNDQUJ1c3k7Cit9CUNIQU5ORUxfTE9BRF9SRVBPUlQsICpQQ0hBTk5FTF9MT0FEX1JFUE9SVDsKKyNwcmFnbWEgcGFjaygpCisKKy8vIE5vc2llIEhpc3RvZ3JhbSBSZXBvcnQKK3R5cGVkZWYJc3RydWN0CV9OT0lTRV9ISVNUX1JFUE9SVAl7CisJVUNIQVIJQ2hhbm5lbDsKKwlVQ0hBUglTcGFyZTsKKwlVU0hPUlQJRHVyYXRpb247CisJVUNIQVIJRGVuc2l0eVs4XTsKK30JTk9JU0VfSElTVF9SRVBPUlQsICpQTk9JU0VfSElTVF9SRVBPUlQ7CisKKy8vIFJhZGlvIE1hbmFnZW1lbnQgQ2FwYWJpbGl0eSBlbGVtZW50Cit0eXBlZGVmCXN0cnVjdAlfUkFESU9fTUFOQUdFTUVOVF9DQVBBQklMSVRZCXsKKwlVQ0hBUglFaWQ7CQkJCS8vIFRPRE86IFdoeSB0aGUgRWlkIGlzIDEgYnl0ZSwgbm90IG5vcm1hbCAyIGJ5dGVzPz8/CisJVUNIQVIJTGVuZ3RoOworCVVDSEFSCUFpcm9uZXRPdWlbM107CQkvLyBBSXJvbmV0IE9VSSAoMDAgNDAgOTYpCisJVUNIQVIJVHlwZTsJCQkJLy8gVHlwZSAvIFZlcnNpb24KKwlVU0hPUlQJU3RhdHVzOwkJCQkvLyBzd2FwMTYgcmVxdWlyZWQKK30JUkFESU9fTUFOQUdFTUVOVF9DQVBBQklMSVRZLCAqUFJBRElPX01BTkFHRU1FTlRfQ0FQQUJJTElUWTsKKworLy8gTWVhc3VyZW1lbnQgTW9kZSBCaXQgZGVmaW5pdGlvbgordHlwZWRlZglzdHJ1Y3QJX01FQVNVUkVNRU5UX01PREUJeworCVVDSEFSCVJzdmQ6NDsKKwlVQ0hBUglSZXBvcnQ6MTsKKwlVQ0hBUglOb3RVc2VkOjE7CisJVUNIQVIJRW5hYmxlOjE7CisJVUNIQVIJUGFyYWxsZWw6MTsKK30JTUVBU1VSRU1FTlRfTU9ERSwgKlBNRUFTVVJFTUVOVF9NT0RFOworCisvLyBNZWFzdXJlbWVudCBSZXF1ZXN0IGVsZW1lbnQsIFRoaXMgaXMgbGl0dGxlIGVuZGlhbiBtb2RlCit0eXBlZGVmCXN0cnVjdAlfTUVBU1VSRU1FTlRfUkVRVUVTVF9FTEVNRU5UCXsKKwlVU0hPUlQJCQkJRWlkOworCVVTSE9SVAkJCQlMZW5ndGg7CQkJCS8vIHN3YXAxNiByZXF1aXJlZAorCVVTSE9SVAkJCQlUb2tlbjsJCQkJLy8gbm9uLXplcm8gdW5pcXVlIHRva2VuCisJVUNIQVIJCQkJTW9kZTsJCQkJLy8gTWVhc3VyZW1lbnQgTW9kZQorCVVDSEFSCQkJCVR5cGU7CQkJCS8vIE1lYXN1cmVtZW50IHR5cGUKK30JTUVBU1VSRU1FTlRfUkVRVUVTVF9FTEVNRU5ULCAqUE1FQVNVUkVNRU5UX1JFUVVFU1RfRUxFTUVOVDsKKworLy8gTWVhc3VyZW1lbnQgUmVwb3J0IGVsZW1lbnQsIFRoaXMgaXMgbGl0dGxlIGVuZGlhbiBtb2RlCit0eXBlZGVmCXN0cnVjdAlfTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQJeworCVVTSE9SVAkJCQlFaWQ7CisJVVNIT1JUCQkJCUxlbmd0aDsJCQkJLy8gc3dhcDE2IHJlcXVpcmVkCisJVVNIT1JUCQkJCVRva2VuOwkJCQkvLyBub24temVybyB1bmlxdWUgdG9rZW4KKwlVQ0hBUgkJCQlNb2RlOwkJCQkvLyBNZWFzdXJlbWVudCBNb2RlCisJVUNIQVIJCQkJVHlwZTsJCQkJLy8gTWVhc3VyZW1lbnQgdHlwZQorfQlNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCwgKlBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVDsKKworLy8gQ2lzY28gQWlyb25ldCBJQVBQIEZyYW1lIEhlYWRlciwgTmV0d29yayBieXRlIG9yZGVyIHVzZWQKK3R5cGVkZWYJc3RydWN0CV9BSVJPTkVUX0lBUFBfSEVBREVSIHsKKwlVQ0hBUglDaXNjb1NuYXBIZWFkZXJbOF07CS8vIDggYnl0ZXMgQ2lzY28gc25hcCBoZWFkZXIKKwlVU0hPUlQJTGVuZ3RoOwkJCQkvLyBJQVBQIElEICYgbGVuZ3RoLCByZW1lbWJlciB0byBzd2FwMTYgaW4gTEUgc3lzdGVtCisJVUNIQVIJVHlwZTsJCQkJLy8gSUFQUCB0eXBlCisJVUNIQVIJU3ViVHlwZTsJCQkvLyBJQVBQIHN1YnR5cGUKKwlVQ0hBUglEQVs2XTsJCQkJLy8gRGVzdGluYXRpb24gTUFDIGFkZHJlc3MKKwlVQ0hBUglTQVs2XTsJCQkJLy8gU291cmNlIE1BQyBhZGRyZXNzCisJVVNIT1JUCVRva2VuOwkJCQkvLyBEaWFsb2cgdG9rZW4sIG5vIG5lZWQgdG8gc3dhcDE2IHNpbmNlIGl0IGlzIGZvciB5b2tlbiB1c2FnZSBvbmx5Cit9CUFJUk9ORVRfSUFQUF9IRUFERVIsICpQQUlST05FVF9JQVBQX0hFQURFUjsKKworLy8gUmFkaW8gTWVhc3VyZW1lbnQgUmVxdWVzdCBmcmFtZQordHlwZWRlZglzdHJ1Y3QJX0FJUk9ORVRfUk1fUkVRVUVTVF9GUkFNRQl7CisgICAgQUlST05FVF9JQVBQX0hFQURFUglJQVBQOwkJCS8vIENvbW1vbiBoZWFkZXIKKwlVQ0hBUgkJCQlEZWxheTsJCQkvLyBBY3RpdmF0aW9uIERlbGF5CisJVUNIQVIJCQkJT2Zmc2V0OwkJCS8vIE1lYXN1cmVtZW50IG9mZnNldAorfQlBSVJPTkVUX1JNX1JFUVVFU1RfRlJBTUUsICpQQUlST05FVF9STV9SRVFVRVNUX0ZSQU1FOworCisvLyBSYWRpbyBNZWFzdXJlbWVudCBSZXBvcnQgZnJhbWUKK3R5cGVkZWYJc3RydWN0CV9BSVJPTkVUX1JNX1JFUE9SVF9GUkFNRQl7CisgICAgQUlST05FVF9JQVBQX0hFQURFUglJQVBQOwkJCS8vIENvbW1vbiBoZWFkZXIKK30JQUlST05FVF9STV9SRVBPUlRfRlJBTUUsICpQQUlST05FVF9STV9SRVBPUlRfRlJBTUU7CisKKy8vIFNhdmVkIGVsZW1lbnQgcmVxdWVzdCBhY3Rpb25zIHdoaWNoIHdpbGwgc2F2ZWQgaW4gU3RhQ2ZnLgordHlwZWRlZglzdHJ1Y3QJX1JNX1JFUVVFU1RfQUNUSU9OCXsKKwlNRUFTVVJFTUVOVF9SRVFVRVNUX0VMRU1FTlQJUmVxRWxlbTsJCS8vIFNhdmVkIHJlcXVlc3QgZWxlbWVudAorCU1FQVNVUkVNRU5UX1JFUVVFU1QJCQlNZWFzdXJlbWVudDsJLy8gU2F2ZWQgbWVhc3VyZW1lbnQgd2l0aGluIHRoZSByZXF1ZXN0IGVsZW1lbnQKK30JUk1fUkVRVUVTVF9BQ1RJT04sICpQUk1fUkVRVUVTVF9BQ1RJT047CisKKy8vIENDWCBhZG1pbmlzdHJhdGlvbiBjb250cm9sCit0eXBlZGVmCXVuaW9uCV9DQ1hfQ09OVFJPTAl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlFbmFibGU6MTsJCQkvLyBFbmFibGUgQ0NYMgorCQlVSU5UMzIJCUxlYXBFbmFibGU6MTsJCS8vIEVuYWJsZSBMRUFQIGF0IENDWDIKKwkJVUlOVDMyCQlSTUVuYWJsZToxOwkJCS8vIFJhZGlvIE1lYXN1cmVtZW50IEVuYWJsZQorCQlVSU5UMzIJCURDUk1FbmFibGU6MTsJCS8vIE5vbiBzZXJ2aW5nIGNoYW5uZWwgUmFkaW8gTWVhc3VyZW1lbnQgZW5hYmxlCisJCVVJTlQzMgkJUU9TRW5hYmxlOjE7CQkvLyBFbmFibGUgUU9TIGZvciBDQ1ggMi4wIHN1cHBvcnQKKwkJVUlOVDMyCQlGYXN0Um9hbUVuYWJsZToxOwkvLyBFbmFibGUgZmFzdCByb2FtaW5nCisJCVVJTlQzMgkJUnN2ZDoyOwkJCQkvLyBOb3QgdXNlZAorCQlVSU5UMzIJCWRCbVRvUm9hbTo4OwkJLy8gdGhlIGNvbmRpdGlvbiB0byByb2FtIHdoZW4gcmVjZWl2aW5nIFJzc2kgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIEl0J3MgbmVnYXRpdmUgdmFsdWUuCisJCVVJTlQzMgkJVHVMaW1pdDoxNjsJCQkvLyBMaW1pdCBmb3IgZGlmZmVyZW50IGNoYW5uZWwgc2NhbgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQ0NYX0NPTlRST0wsICpQQ0NYX0NPTlRST0w7CisKKyNlbmRpZgkvLyBfX0FJUk9ORVRfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViYTA0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYXAuaApAQCAtMCwwICsxLDU1NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBhcC5oCisKKyAgICBBYnN0cmFjdDoKKyAgICBNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUGF1bCBMaW4gICAgMDgtMDEtMjAwMiAgICBjcmVhdGVkCisgICAgSmFtZXMgVGFuICAgMDktMDYtMjAwMiAgICBtb2RpZmllZCAoUmV2aXNlIE5UQ1JlZ1RhYmxlKQorICAgIEpvaG4gQ2hhbmcgIDEyLTIyLTIwMDQgICAgbW9kaWZpZWQgZm9yIFJUMjU2MS8yNjYxLiBtZXJnZSB3aXRoIFNUQSBkcml2ZXIKKyovCisjaWZuZGVmIF9fQVBfSF9fCisjZGVmaW5lIF9fQVBfSF9fCisKKworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IEFQIFJUTVAuaCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gICAgICBGdW5jdGlvbiBQcm90b3R5cGVzCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIGFwX2RhdGEuYworCitCT09MRUFOIEFQQnJpZGdlVG9XaXJlbGVzc1N0YSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBIZWFkZXIsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIERhdGFMZW4sCisgICAgSU4gIFVMT05HICAgICAgICAgICBmcm9td2RzaWR4KTsKKworQk9PTEVBTiBBUEhhbmRsZVJ4RG9uZUludGVycnVwdCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQJQVBTZW5kUGFja2V0cygKKwlJTglORElTX0hBTkRMRQkJTWluaXBvcnRBZGFwdGVyQ29udGV4dCwKKwlJTglQUE5ESVNfUEFDS0VUCXBwUGFja2V0QXJyYXksCisJSU4JVUlOVAkJCU51bWJlck9mUGFja2V0cyk7CisKK05ESVNfU1RBVFVTIEFQU2VuZFBhY2tldCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQpOworCisKK05ESVNfU1RBVFVTIEFQSGFyZFRyYW5zbWl0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JVUNIQVIJCQlRdWVJZHgpOworCitWT0lEIEFQUnhFQVBPTEZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworTkRJU19TVEFUVVMgQVBDaGVja1J4RXJyb3IoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFJUMjhYWF9SWERfU1RSVUMJCXBSeEQsCisJSU4JVUNIQVIJCQlXY2lkKTsKKworQk9PTEVBTiBBUENoZWNrQ2xhc3MyQ2xhc3MzRXJyb3IoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gVUxPTkcgV2NpZCwKKwlJTiAgUEhFQURFUl84MDJfMTEgIHBIZWFkZXIpOworCitWT0lEIEFQSGFuZGxlUnhQc1BvbGwoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcEFkZHIsCisJSU4JVVNIT1JUCQkJQWlkLAorICAgIElOCUJPT0xFQU4JCQlpc0FjdGl2ZSk7CisKK1ZPSUQgICAgUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgIERlc2NyaXB0b3JUeXBlKTsKKworVk9JRCAgICBSVE1QRnJhbWVFbmRpYW5DaGFuZ2UoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgIERpciwKKyAgICBJTiAgQk9PTEVBTiAgICAgICAgIEZyb21SeERvbmVJbnQpOworCisvLyBhcF9hc3NvYy5jCisKK1ZPSUQgQVBBc3NvY1N0YXRlTWFjaGluZUluaXQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCAgQVBQZWVyQXNzb2NSZXFBY3Rpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIEFQUGVlclJlYXNzb2NSZXFBY3Rpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIEFQUGVlckRpc2Fzc29jUmVxQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1ic3NLaWNrT3V0U3RhcygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBJTlQgYXBpZHgsCisJSU4gVVNIT1JUIFJlYXNvbik7CisKK1ZPSUQgQVBNbG1lS2lja091dFN0YSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcFN0YUFkZHIsCisJSU4gVUNIQVIgV2NpZCwKKwlJTiBVU0hPUlQgUmVhc29uKTsKKworVk9JRCBBUE1sbWVEaXNhc3NvY1JlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICBBUENsczNlcnJBY3Rpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gCVVMT05HIFdjaWQsCisgICAgSU4JUEhFQURFUl84MDJfMTEJcEhlYWRlcik7CisKKworVVNIT1JUIEFQQnVpbGRBc3NvY2lhdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSwKKyAgICBJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisgICAgSU4gVUNIQVIgIE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMsCisgICAgSU4gVUNIQVIgICpSU04sCisgICAgSU4gVUNIQVIgICpwUlNOTGVuLAorICAgIElOIEJPT0xFQU4gYldtbUNhcGFibGUsCisgICAgSU4gVUxPTkcgIFJhbGlua0llLAorI2lmZGVmIERPVDExTl9EUkFGVDMKKyAgICBJTiBFWFRfQ0FQX0lORk9fRUxFTUVOVCBFeHRDYXBJbmZvLAorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKwlJTiBIVF9DQVBBQklMSVRZX0lFCQkqcEh0Q2FwYWJpbGl0eSwKKwlJTiBVQ0hBUgkJIEh0Q2FwYWJpbGl0eUxlbiwKKyAgICBPVVQgVVNIT1JUICpwQWlkKTsKKworLyoKK1ZPSUQJUlRNUEFkZENsaWVudFNlYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUglCc3NJZHgsCisJSU4gVUNIQVIJCSBLZXlJZHgsCisJSU4gVUNIQVIJCSBDaXBoZXJBbGcsCisJSU4gUFVDSEFSCQkgcEtleSwKKwlJTiBQVUNIQVIJCSBwVHhNaWMsCisJSU4gUFVDSEFSCQkgcFJ4TWljLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5KTsKKyovCisKKy8vIGFwX2F1dGguYworCit2b2lkIEFQQXV0aFN0YXRlTWFjaGluZUluaXQoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gU1RBVEVfTUFDSElORSAqU20sCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBBUE1sbWVEZWF1dGhSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUENsczJlcnJBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gCVVMT05HIFdjaWQsCisgICAgSU4JUEhFQURFUl84MDJfMTEJcEhlYWRlcik7CisKKy8vIGFwX2F1dGhyc3AuYworCitWT0lEIEFQQXV0aFJzcFN0YXRlTWFjaGluZUluaXQoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gUFNUQVRFX01BQ0hJTkUgU20sCisgICAgSU4gU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIEFQUGVlckF1dGhBdEF1dGhSc3BJZGxlQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQUGVlckRlYXV0aFJlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQUGVlckF1dGhTaW1wbGVSc3BHZW5BbmRTZW5kKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisgICAgSU4gIFVTSE9SVCBBbGcsCisgICAgSU4gIFVTSE9SVCBTZXEsCisgICAgSU4gIFVTSE9SVCBTdGF0dXNDb2RlKTsKKworLy8gYXBfY29ubmVjdC5jCisKK0JPT0xFQU4gQmVhY29uVHJhbnNtaXRSZXF1aXJlZCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBJTlQJCQkJYXBpZHgpOworCitWT0lEIEFQTWFrZUJzc0JlYWNvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglJTlQJCQkJYXBpZHgpOworCitWT0lEICBBUFVwZGF0ZUJlYWNvbkZyYW1lKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCUlOVAkJCQlhcGlkeCk7CisKK1ZPSUQgQVBNYWtlQWxsQnNzQmVhY29uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCAgQVBVcGRhdGVBbGxCZWFjb25GcmFtZSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKKworLy8gYXBfc3luYy5jCisKK1ZPSUQgQVBTeW5jU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBTVEFURV9NQUNISU5FICpTbSwKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIEFQU2NhblRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBBUEludmFsaWRTdGF0ZVdoZW5TY2FuKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBTY2FuVGltZW91dEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQUGVlclByb2JlUmVxQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFBlZXJCZWFjb25BY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUE1sbWVTY2FuUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBTY2FuQ25jbEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFwU2l0ZVN1cnZleSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgU3VwcG9ydFJhdGUoCisJSU4gUFVDSEFSIFN1cFJhdGUsCisJSU4gVUNIQVIgU3VwUmF0ZUxlbiwKKwlJTiBQVUNIQVIgRXh0UmF0ZSwKKwlJTiBVQ0hBUiBFeHRSYXRlTGVuLAorCU9VVCBQVUNIQVIgKlJhdGVzLAorCU9VVCBQVUNIQVIgUmF0ZXNMZW4sCisJT1VUIFBVQ0hBUiBwTWF4U3VwcG9ydFJhdGUpOworCisKK0JPT0xFQU4gQXBTY2FuUnVubmluZygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitWT0lEIEFQT3ZlcmxhcHBpbmdCU1NTY2FuKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKy8vIGFwX3dwYS5jCisKK1ZPSUQgQVBXcGFTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBTVEFURV9NQUNISU5FICpTbSwKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCisvLyBhcF9tbG1lLmMKKworVk9JRCBBUE1sbWVQZXJpb2RpY0V4ZWMoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFQTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFVDSEFSCQkJCSpwcFRhYmxlLAorCUlOIFBVQ0hBUgkJCQlwVGFibGVTaXplLAorCUlOIFBVQ0hBUgkJCQlwSW5pdFR4UmF0ZUlkeCk7CisKK1ZPSUQgQVBNbG1lU2V0VHhSYXRlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFJUTVBfVFhfUkFURV9TV0lUQ0gJcFR4UmF0ZSk7CisKK1ZPSUQgQVBNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZygKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQVBRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK0JPT0xFQU4gQVBNc2dUeXBlU3Vic3QoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gUEZSQU1FXzgwMl8xMSBwRnJhbWUsCisgICAgT1VUIElOVCAqTWFjaGluZSwKKyAgICBPVVQgSU5UICpNc2dUeXBlKTsKKworVk9JRCBBUFF1aWNrUmVzcG9uZUZvclJhdGVVcEV4ZWMoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworI2lmZGVmIFJUMjg3MAorVk9JRCBCZWFjb25VcGRhdGVFeGVjKAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKK1ZPSUQgUlRNUFNldFBpZ2d5QmFjaygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBCT09MRUFOCQkJYlBpZ2d5QmFjayk7CisKK1ZPSUQgQVBBc2ljRXZhbHVhdGVSeEFudCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgQVBBc2ljUnhBbnRFdmFsVGltZW91dCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKKy8vIGFwLmMKKworVk9JRCBBUFN3aXRjaENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gSU5UIENoYW5uZWwpOworCitORElTX1NUQVRVUyBBUEluaXRpYWxpemUoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFQU2h1dGRvd24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQpOworCitWT0lEIEFQU3RhcnRVcCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgQVBTdG9wKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBUENsZWFudXBQc1F1ZXVlKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQUVVFVUVfSEVBREVSICAgcFF1ZXVlKTsKKworVk9JRCBNYWNUYWJsZVJlc2V0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTUFDX1RBQkxFX0VOVFJZICpNYWNUYWJsZUluc2VydEVudHJ5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcEFkZHIsCisJSU4JVUNIQVIJCQlhcGlkeCwKKwlJTiBCT09MRUFOCUNsZWFuQWxsKTsKKworQk9PTEVBTiBNYWNUYWJsZURlbGV0ZUVudHJ5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIFVTSE9SVCB3Y2lkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcEFkZHIpOworCitNQUNfVEFCTEVfRU5UUlkgKk1hY1RhYmxlTG9va3VwKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcEFkZHIpOworCitWT0lEIE1hY1RhYmxlTWFpbnRlbmFuY2UoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitVSU5UMzIgTWFjVGFibGVBc3NvY1N0YU51bUdldCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK01BQ19UQUJMRV9FTlRSWSAqQVBTc1BzSW5xdWlyeSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBBZGRyLAorICAgIE9VVCBTU1QgICAgICAgICAgICAgKlNzdCwKKyAgICBPVVQgVVNIT1JUICAgICAgICAgICpBaWQsCisgICAgT1VUIFVDSEFSICAgICAgICAgICAqUHNNb2RlLAorICAgIE9VVCBVQ0hBUiAgICAgICAgICAgKlJhdGUpOworCitCT09MRUFOIEFQUHNJbmRpY2F0ZSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBBZGRyLAorCUlOIFVMT05HIFdjaWQsCisgICAgSU4gIFVDSEFSICAgICAgICAgICBQc20pOworCitWT0lEIEFwTG9nRXZlbnQoCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gUFVDSEFSICAgICAgICAgICBwQWRkciwKKyAgICBJTiBVU0hPUlQgICAgICAgICAgIEV2ZW50KTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBBUFVwZGF0ZU9wZXJhdGlvbk1vZGUoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIEFQVXBkYXRlQ2FwYWJpbGl0eUFuZEVycEllKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBBcENoZWNrQWNjZXNzQ29udHJvbExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSICAgICAgICBwQWRkciwKKwlJTiBVQ0hBUiAgICAgICAgIEFwaWR4KTsKKworVk9JRCBBcFVwZGF0ZUFjY2Vzc0NvbnRyb2xMaXN0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFVDSEFSICAgICAgICAgQXBpZHgpOworCitWT0lEIEFwRW5xdWV1ZU51bGxGcmFtZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgICAgICAgIHBBZGRyLAorCUlOIFVDSEFSICAgICAgICAgVHhSYXRlLAorCUlOIFVDSEFSICAgICAgICAgUElELAorCUlOIFVDSEFSICAgICAgICAgYXBpZHgsCisgICAgSU4gQk9PTEVBTiAgICAgICBiUW9zTnVsbCwKKyAgICBJTiBCT09MRUFOICAgICAgIGJFT1NQLAorICAgIElOIFVDSEFSICAgICAgICAgT2xkVVApOworCitWT0lEIEFwU2VuZEZyYW1lKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVk9JRCAgICAgICAgICAgcEJ1ZmZlciwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgIExlbmd0aCwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgIFR4UmF0ZSwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgIFBJRCk7CisKK1ZPSUQgQXBFbnF1ZXVlQWNrRnJhbWUoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gUFVDSEFSICAgICAgICBwQWRkciwKKyAgICBJTiBVQ0hBUiAgICAgICAgIFR4UmF0ZSwKKwlJTiBVQ0hBUiAgICAgICAgIGFwaWR4KTsKKworVUNIQVIgQVBBdXRvU2VsZWN0Q2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOIE9wdGltYWwpOworCisvLyBhcF9zYW5pdHkuYworCisKK0JPT0xFQU4gUGVlckFzc29jUmVxQ21tU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gaXNSZXNzb2MsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMiwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcExpc3RlbkludGVydmFsLAorICAgIE9VVCBQVUNIQVIgcEFwQWRkciwKKyAgICBPVVQgVUNIQVIgKnBTc2lkTGVuLAorICAgIE9VVCBjaGFyICpTc2lkLAorICAgIE9VVCBVQ0hBUiAqcFJhdGVzTGVuLAorICAgIE9VVCBVQ0hBUiBSYXRlc1tdLAorICAgIE9VVCBVQ0hBUiAqUlNOLAorICAgIE9VVCBVQ0hBUiAqcFJTTkxlbiwKKyAgICBPVVQgQk9PTEVBTiAqcGJXbW1DYXBhYmxlLAorICAgIE9VVCBVTE9ORyAgKnBSYWxpbmtJZSwKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisgICAgT1VUIEVYVF9DQVBfSU5GT19FTEVNRU5UCSpwRXh0Q2FwSW5mbywKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisgICAgT1VUIFVDSEFSCQkgKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHkpOworCisKK0JPT0xFQU4gUGVlckRpc2Fzc29jUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqUmVhc29uKTsKKworQk9PTEVBTiBQZWVyRGVhdXRoUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqUmVhc29uKTsKKworQk9PTEVBTiBBUFBlZXJBdXRoU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisJT1VUIFBVQ0hBUiBwQWRkcjEsCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqQWxnLAorICAgIE9VVCBVU0hPUlQgKlNlcSwKKyAgICBPVVQgVVNIT1JUICpTdGF0dXMsCisgICAgQ0hBUiAqQ2hsZ1RleHQpOworCitCT09MRUFOIEFQUGVlclByb2JlUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqU3NpZExlbik7CisKK0JPT0xFQU4gQVBQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMiwKKyAgICBPVVQgUFVDSEFSIHBCc3NpZCwKKyAgICBPVVQgQ0hBUiBTc2lkW10sCisgICAgT1VUIFVDSEFSICpTc2lkTGVuLAorICAgIE9VVCBVQ0hBUiAqQnNzVHlwZSwKKyAgICBPVVQgVVNIT1JUICpCZWFjb25QZXJpb2QsCisgICAgT1VUIFVDSEFSICpDaGFubmVsLAorICAgIE9VVCBMQVJHRV9JTlRFR0VSICpUaW1lc3RhbXAsCisgICAgT1VUIFVTSE9SVCAqQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVDSEFSIFJhdGVbXSwKKyAgICBPVVQgVUNIQVIgKlJhdGVMZW4sCisgICAgT1VUIEJPT0xFQU4gKkV4dGVuZGVkUmF0ZUllRXhpc3QsCisgICAgT1VUIFVDSEFSICpFcnApOworCisKKy8vID09PT09PT09PT09PT09PT09PSBlbmQgb2YgQVAgUlRNUC5oID09PT09PT09PT09PT09PT09PT09PT09PQorCisKKyNlbmRpZiAgLy8gX19BUF9IX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jaGxpc3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY2hsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1MWU4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY2hsaXN0LmgKQEAgLTAsMCArMSwxMjUzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWNobGlzdC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRm9uY2hpIFd1ICAgMjAwNy0xMi0xOSAgICBjcmVhdGVkCisqLworCisjaWZuZGVmIF9fQ0hMSVNUX0hfXworI2RlZmluZSBfX0NITElTVF9IX18KKworI2luY2x1ZGUgInJ0bXBfdHlwZS5oIgorI2luY2x1ZGUgInJ0bXBfZGVmLmgiCisKKworI2RlZmluZSBPRE9SCQkJMAorI2RlZmluZSBJRE9SCQkJMQorI2RlZmluZSBCT1RICQkJMgorCisjZGVmaW5lIEJBTkRfNUcgICAgICAgICAwCisjZGVmaW5lIEJBTkRfMjRHICAgICAgICAxCisjZGVmaW5lIEJBTkRfQk9USCAgICAgICAyCisKK3R5cGVkZWYgc3RydWN0IF9DSF9ERVNQIHsKKwlVQ0hBUiBGaXJzdENoYW5uZWw7CisJVUNIQVIgTnVtT2ZDaDsKKwlDSEFSIE1heFR4UHdyOwkJCS8vIGRCbQorCVVDSEFSIEdlb2dyYXBoeTsJCQkvLyAwOm91dCBkb29yLCAxOmluIGRvb3IsIDI6Ym90aAorCUJPT0xFQU4gRGZzUmVxOwkJCS8vIERmcyByZXF1aXJlLCAwOiBObywgMTogeWVzLgorfSBDSF9ERVNQLCAqUENIX0RFU1A7CisKK3R5cGVkZWYgc3RydWN0IF9DSF9SRUdJT04geworCVVDSEFSIENvdW50UmVnWzNdOworCVVDSEFSIERmc1R5cGU7CQkJLy8gMDogQ0UsIDE6IEZDQywgMjogSkFQLCAzOkpBUF9XNTMsIEpBUF9XNTYKKwlDSF9ERVNQIENoRGVzcFsxMF07Cit9IENIX1JFR0lPTiwgKlBDSF9SRUdJT047CisKK3N0YXRpYyBDSF9SRUdJT04gQ2hSZWdpb25bXSA9Cit7CisJCXsJLy8gQW50aWd1YSBhbmQgQmVyYnVkYQorCQkJIkFHIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQXJnZW50aW5hCisJCQkiQVIiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDQsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQXJ1YmEKKwkJCSJBVyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEF1c3RyYWxpYQorCQkJIkFVIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDUsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQXVzdHJpYQorCQkJIkFUIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjMsIElET1IsIFRSVUV9LAkJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0sCQkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQmFoYW1hcworCQkJIkJTIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDUsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQmFyYmFkb3MKKwkJCSJCQiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJlcm11ZGEKKwkJCSJCTSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJyYXppbAorCQkJIkJSIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMTQ5LCA1LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJlbGdpdW0KKwkJCSJCRSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAxOCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDE4LCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQnVsZ2FyaWEKKwkJCSJCRyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAzMCwgT0RPUiwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDYW5hZGEKKwkJCSJDQSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCA1LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIENheW1hbiBJc0xhbmRzCisJCQkiS1kiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDaGlsZQorCQkJIkNMIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDUsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQ2hpbmEKKwkJCSJDTiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAxNDksIDQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQ29sb21iaWEKKwkJCSJDTyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAxNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDE0OSwgNSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDb3N0YSBSaWNhCisJCQkiQ1IiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMTcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgNCwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDeXBydXMKKwkJCSJDWSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBJRE9SLCBUUlVFfSwJCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9LAkJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEN6ZWNoX1JlcHVibGljCisJCQkiQ1oiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyMywgSURPUiwgVFJVRX0sCQkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIERlbm1hcmsKKwkJCSJESyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9LAkJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIERvbWluaWNhbiBSZXB1YmxpYworCQkJIkRPIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAwLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDAKKwkJCQl7IDE0OSwgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBFcXVhZG9yCisJCQkiRUMiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDEwMCwgMTEsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gRWwgU2FsdmFkb3IKKwkJCSJTViIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDQsICAgMzYsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gRmlubGFuZAorCQkJIkZJIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBGcmFuY2UKKwkJCSJGUiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBHZXJtYW55CisJCQkiREUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEdyZWVjZQorCQkJIkdSIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgT0RPUiwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBHdWFtCisJCQkiR1UiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDExLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDM2LCAgNCwgICAxNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMTQ5LCAgNSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBHdWF0ZW1hbGEKKwkJCSJHVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDE3LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCAgNCwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBIYWl0aQorCQkJIkhUIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAgMTcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksICA0LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEhvbmR1cmFzCisJCQkiSE4iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDE0OSwgIDQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSG9uZyBLb25nCisJCQkiSEsiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDQsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSHVuZ2FyeQorCQkJIkhVIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEljZWxhbmQKKwkJCSJJUyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSW5kaWEKKwkJCSJJTiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMTQ5LCAJNCwgIDI0LCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBJbmRvbmVzaWEKKwkJCSJJRCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMTQ5LCAJNCwgIDI3LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBJcmVsYW5kCisJCQkiSUUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgT0RPUiwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBJc3JhZWwKKwkJCSJJTCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgIDMsICAyMCwgSURPUiwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4zCisJCQkJeyA0LCAJNiwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCA0fjkKKwkJCQl7IDEwLCAJNCwgIDIwLCBJRE9SLCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxMH4xMworCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSXRhbHkKKwkJCSJJVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBPRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEphcGFuCisJCQkiSlAiLAorCQkJSkFQLAorCQkJeworCQkJCXsgMSwgICAxNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjE0CisJCQkJeyAzNCwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzR+NDYKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEpvcmRhbgorCQkJIkpPIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBJRE9SLCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDE0OSwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTGF0dmlhCisJCQkiTFYiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBMaWVjaHRlbnN0ZWluCisJCQkiTEkiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDUyLCAJNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTGl0aHVhbmlhCisJCQkiTFQiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBMdXhlbWJ1cmcKKwkJCSJMVSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIE1hbGF5c2lhCisJCQkiTVkiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAzNiwgCTQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCAgNSwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBNYWx0YQorCQkJIk1UIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTWFyb2NjbworCQkJIk1BIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyNCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIE1leGljbworCQkJIk1YIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCAgNSwgIDMwLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBOZXRoZXJsYW5kcworCQkJIk5MIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDI0LCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTmV3IFplYWxhbmQKKwkJCSJOWiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDQsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTm9yd2F5CisJCQkiTk8iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDI0LCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjQsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBQZXJ1CisJCQkiUEUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDE0OSwgIDQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gUG9ydHVnYWwKKwkJCSJQVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gUG9sYW5kCisJCQkiUEwiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFJvbWFuaWEKKwkJCSJSTyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gUnVzc2lhCisJCQkiUlUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDE0OSwgIDQsICAyMCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU2F1ZGkgQXJhYmlhCisJCQkiU0EiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU2VyYmlhX2FuZF9Nb250ZW5lZ3JvCisJCQkiQ1MiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNpbmdhcG9yZQorCQkJIlNHIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksICA0LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNsb3Zha2lhCisJCQkiU0siLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNsb3ZlbmlhCisJCQkiU0kiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU291dGggQWZyaWNhCisJCQkiWkEiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAxNDksICA0LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNvdXRoIEtvcmVhCisJCQkiS1IiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgIDgsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjEyOAorCQkJCXsgMTQ5LCAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBTcGFpbgorCQkJIkVTIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMTcsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBTd2VkZW4KKwkJCSJTRSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU3dpdHplcmxhbmQKKwkJCSJDSCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFRhaXdhbgorCQkJIlRXIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBUdXJrZXkKKwkJCSJUUiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgMzYsICAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVUsKKwkJCSJHQiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVWtyYWluZQorCQkJIlVBIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBVbml0ZWRfQXJhYl9FbWlyYXRlcworCQkJIkFFIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBVbml0ZWRfU3RhdGVzCisJCQkiVVMiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDExLCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDM2LCAgIDQsICAxNywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDUyLCAgIDQsICAyNCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDE0OSwgIDUsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVmVuZXp1ZWxhCisJCQkiVkUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDE0OSwgIDQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gRGVmYXVsdAorCQkJIiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTEsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgMzYsICAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgNTIsICAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAxNDksICA1LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKK307CisKK3N0YXRpYyBpbmxpbmUgUENIX1JFR0lPTiBHZXRDaFJlZ2lvbigKKwlJTiBQVUNIQVIgQ250cnlDb2RlKQoreworCUlOVCBsb29wID0gMDsKKwlQQ0hfUkVHSU9OIHBDaFJlZ2lvbiA9IE5VTEw7CisKKwl3aGlsZSAoc3RyY21wKENoUmVnaW9uW2xvb3BdLkNvdW50UmVnLCAiIikgIT0gMCkKKwl7CisJCWlmIChzdHJuY21wKENoUmVnaW9uW2xvb3BdLkNvdW50UmVnLCBDbnRyeUNvZGUsIDIpID09IDApCisJCXsKKwkJCXBDaFJlZ2lvbiA9ICZDaFJlZ2lvbltsb29wXTsKKwkJCWJyZWFrOworCQl9CisJCWxvb3ArKzsKKwl9CisKKwlpZiAocENoUmVnaW9uID09IE5VTEwpCisJCXBDaFJlZ2lvbiA9ICZDaFJlZ2lvbltsb29wXTsKKwlyZXR1cm4gcENoUmVnaW9uOworfQorCitzdGF0aWMgaW5saW5lIFZPSUQgQ2hCYW5kQ2hlY2soCisJSU4gVUNIQVIgUGh5TW9kZSwKKwlPVVQgUFVDSEFSIHBDaFR5cGUpCit7CisJc3dpdGNoKFBoeU1vZGUpCisJeworCQljYXNlIFBIWV8xMUE6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExQU5fTUlYRUQ6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkqcENoVHlwZSA9IEJBTkRfNUc7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFBQkdfTUlYRUQ6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQljYXNlIFBIWV8xMUFCR05fTUlYRUQ6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkqcENoVHlwZSA9IEJBTkRfQk9USDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkqcENoVHlwZSA9IEJBTkRfMjRHOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIFVDSEFSIEZpbGxDaExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUENIX0RFU1AgcENoRGVzcCwKKwlJTiBVQ0hBUiBPZmZzZXQsCisJSU4gVUNIQVIgaW5jcmVtZW50KQoreworCUlOVCBpLCBqLCBsOworCVVDSEFSIGNoYW5uZWw7CisKKwlqID0gT2Zmc2V0OworCWZvciAoaSA9IDA7IGkgPCBwQ2hEZXNwLT5OdW1PZkNoOyBpKyspCisJeworCQljaGFubmVsID0gcENoRGVzcC0+Rmlyc3RDaGFubmVsICsgaSAqIGluY3JlbWVudDsKKwkJZm9yIChsPTA7IGw8TUFYX05VTV9PRl9DSEFOTkVMUzsgbCsrKQorCQl7CisJCQlpZiAoY2hhbm5lbCA9PSBwQWQtPlR4UG93ZXJbbF0uQ2hhbm5lbCkKKwkJCXsKKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2pdLlBvd2VyID0gcEFkLT5UeFBvd2VyW2xdLlBvd2VyOworCQkJCXBBZC0+Q2hhbm5lbExpc3Rbal0uUG93ZXIyID0gcEFkLT5UeFBvd2VyW2xdLlBvd2VyMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAobCA9PSBNQVhfTlVNX09GX0NIQU5ORUxTKQorCQkJY29udGludWU7CisKKwkJcEFkLT5DaGFubmVsTGlzdFtqXS5DaGFubmVsID0gcENoRGVzcC0+Rmlyc3RDaGFubmVsICsgaSAqIGluY3JlbWVudDsKKwkJcEFkLT5DaGFubmVsTGlzdFtqXS5NYXhUeFB3ciA9IHBDaERlc3AtPk1heFR4UHdyOworCQlwQWQtPkNoYW5uZWxMaXN0W2pdLkRmc1JlcSA9IHBDaERlc3AtPkRmc1JlcTsKKwkJaisrOworCX0KKwlwQWQtPkNoYW5uZWxMaXN0TnVtID0gajsKKworCXJldHVybiBqOworfQorCitzdGF0aWMgaW5saW5lIFZPSUQgQ3JlYXRlQ2hMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBDSF9SRUdJT04gcENoUmVnaW9uLAorCUlOIFVDSEFSIEdlb2dyYXBoeSkKK3sKKwlJTlQgaTsKKwlVQ0hBUiBvZmZzZXQgPSAwOworCVBDSF9ERVNQIHBDaERlc3A7CisJVUNIQVIgQ2hUeXBlOworCVVDSEFSIGluY3JlbWVudDsKKworCWlmIChwQ2hSZWdpb24gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJQ2hCYW5kQ2hlY2socEFkLT5Db21tb25DZmcuUGh5TW9kZSwgJkNoVHlwZSk7CisKKwlmb3IgKGk9MDsgaTwxMDsgaSsrKQorCXsKKwkJcENoRGVzcCA9ICZwQ2hSZWdpb24tPkNoRGVzcFtpXTsKKwkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKENoVHlwZSA9PSBCQU5EXzVHKQorCQl7CisJCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsIDw9IDE0KQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKENoVHlwZSA9PSBCQU5EXzI0RykKKwkJeworCQkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA+IDE0KQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChwQ2hEZXNwLT5HZW9ncmFwaHkgPT0gQk9USCkKKwkJCXx8IChwQ2hEZXNwLT5HZW9ncmFwaHkgPT0gR2VvZ3JhcGh5KSkKKyAgICAgICAgeworCQkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA+IDE0KQorICAgICAgICAgICAgICAgIGluY3JlbWVudCA9IDQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5jcmVtZW50ID0gMTsKKwkJCW9mZnNldCA9IEZpbGxDaExpc3QocEFkLCBwQ2hEZXNwLCBvZmZzZXQsIGluY3JlbWVudCk7CisgICAgICAgIH0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgVk9JRCBCdWlsZENoYW5uZWxMaXN0RXgoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJUENIX1JFR0lPTiBwQ2hSZWc7CisKKwlwQ2hSZWcgPSBHZXRDaFJlZ2lvbihwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZSk7CisJQ3JlYXRlQ2hMaXN0KHBBZCwgcENoUmVnLCBwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkpOworfQorCitzdGF0aWMgaW5saW5lIFZPSUQgQnVpbGRCZWFjb25DaExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFBVQ0hBUiBwQnVmLAorCU9VVAlQVUxPTkcgcEJ1ZkxlbikKK3sKKwlJTlQgaTsKKwlVTE9ORyBUbXBMZW47CisJUENIX1JFR0lPTiBwQ2hSZWdpb247CisJUENIX0RFU1AgcENoRGVzcDsKKwlVQ0hBUiBDaFR5cGU7CisKKwlwQ2hSZWdpb24gPSBHZXRDaFJlZ2lvbihwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZSk7CisKKwlpZiAocENoUmVnaW9uID09IE5VTEwpCisJCXJldHVybjsKKworCUNoQmFuZENoZWNrKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUsICZDaFR5cGUpOworCSpwQnVmTGVuID0gMDsKKworCWZvciAoaT0wOyBpPDEwOyBpKyspCisJeworCQlwQ2hEZXNwID0gJnBDaFJlZ2lvbi0+Q2hEZXNwW2ldOworCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsID09IDApCisJCQlicmVhazsKKworCQlpZiAoQ2hUeXBlID09IEJBTkRfNUcpCisJCXsKKwkJCWlmIChwQ2hEZXNwLT5GaXJzdENoYW5uZWwgPD0gMTQpCisJCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoQ2hUeXBlID09IEJBTkRfMjRHKQorCQl7CisJCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsID4gMTQpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKHBDaERlc3AtPkdlb2dyYXBoeSA9PSBCT1RIKQorCQkJfHwgKHBDaERlc3AtPkdlb2dyYXBoeSA9PSBwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkpKQorCQl7CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwQnVmICsgKnBCdWZMZW4sCQkmVG1wTGVuLAorCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgCSZwQ2hEZXNwLT5GaXJzdENoYW5uZWwsCisJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAJJnBDaERlc3AtPk51bU9mQ2gsCisJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAJJnBDaERlc3AtPk1heFR4UHdyLAorCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQkqcEJ1ZkxlbiArPSBUbXBMZW47CisJCX0KKwl9Cit9CisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorc3RhdGljIGlubGluZSBCT09MRUFOIElzVmFsaWRDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIGNoYW5uZWwpCisKK3sKKwlJTlQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwQWQtPkNoYW5uZWxMaXN0TnVtOyBpKyspCisJeworCQlpZiAocEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsID09IGNoYW5uZWwpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBwQWQtPkNoYW5uZWxMaXN0TnVtKQorCQlyZXR1cm4gRkFMU0U7CisJZWxzZQorCQlyZXR1cm4gVFJVRTsKK30KKworCitzdGF0aWMgaW5saW5lIFVDSEFSIEdldEV4dENoKAorCUlOIFVDSEFSIENoYW5uZWwsCisJSU4gVUNIQVIgRGlyZWN0aW9uKQoreworCUNIQVIgRXh0Q2g7CisKKwlpZiAoRGlyZWN0aW9uID09IEVYVENIQV9BQk9WRSkKKwkJRXh0Q2ggPSBDaGFubmVsICsgNDsKKwllbHNlCisJCUV4dENoID0gKENoYW5uZWwgLSA0KSA+IDAgPyAoQ2hhbm5lbCAtIDQpIDogMDsKKworCXJldHVybiBFeHRDaDsKK30KKworCitzdGF0aWMgaW5saW5lIFZPSUQgTl9DaGFubmVsQ2hlY2soCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJLy9VQ0hBUiBDaGFubmVsTnVtID0gcEFkLT5DaGFubmVsTGlzdE51bTsKKwlVQ0hBUiBDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKworCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSAmJiAocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9PSBCV180MCkpCisJeworCQlpZiAoQ2hhbm5lbCA+IDE0KQorCQl7CisJCQlpZiAoKENoYW5uZWwgPT0gMzYpIHx8IChDaGFubmVsID09IDQ0KSB8fCAoQ2hhbm5lbCA9PSA1MikgfHwgKENoYW5uZWwgPT0gNjApIHx8IChDaGFubmVsID09IDEwMCkgfHwgKENoYW5uZWwgPT0gMTA4KSB8fAorCQkJICAgIChDaGFubmVsID09IDExNikgfHwgKENoYW5uZWwgPT0gMTI0KSB8fCAoQ2hhbm5lbCA9PSAxMzIpIHx8IChDaGFubmVsID09IDE0OSkgfHwgKENoYW5uZWwgPT0gMTU3KSkKKwkJCXsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID0gRVhUQ0hBX0FCT1ZFOworCQkJfQorCQkJZWxzZSBpZiAoKENoYW5uZWwgPT0gNDApIHx8IChDaGFubmVsID09IDQ4KSB8fCAoQ2hhbm5lbCA9PSA1NikgfHwgKENoYW5uZWwgPT0gNjQpIHx8IChDaGFubmVsID09IDEwNCkgfHwgKENoYW5uZWwgPT0gMTEyKSB8fAorCQkJCQkoQ2hhbm5lbCA9PSAxMjApIHx8IChDaGFubmVsID09IDEyOCkgfHwgKENoYW5uZWwgPT0gMTM2KSB8fCAoQ2hhbm5lbCA9PSAxNTMpIHx8IChDaGFubmVsID09IDE2MSkpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9CRUxPVzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgID0gQldfMjA7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlkbworCQkJeworCQkJCVVDSEFSIEV4dENoOworCQkJCVVDSEFSIERpciA9IHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEE7CisJCQkJRXh0Q2ggPSBHZXRFeHRDaChDaGFubmVsLCBEaXIpOworCQkJCWlmIChJc1ZhbGlkQ2hhbm5lbChwQWQsIEV4dENoKSkKKwkJCQkJYnJlYWs7CisKKwkJCQlEaXIgPSAoRGlyID09IEVYVENIQV9BQk9WRSkgPyBFWFRDSEFfQkVMT1cgOiBFWFRDSEFfQUJPVkU7CisJCQkJRXh0Q2ggPSBHZXRFeHRDaChDaGFubmVsLCBEaXIpOworCQkJCWlmIChJc1ZhbGlkQ2hhbm5lbChwQWQsIEV4dENoKSkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPSBEaXI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgID0gQldfMjA7CisJCQl9IHdoaWxlKEZBTFNFKTsKKworCQkJaWYgKENoYW5uZWwgPT0gMTQpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzIwOworCQkJCS8vcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9OT05FOwkvLyBXZSBkaWRuJ3Qgc2V0IHRoZSBFeHRDaCBhcyBOT05FIGR1ZSB0byBpdCdsbCBzZXQgaW4gUlRNUFNldEhUKCkKKwkJCX0KKwkJfQorCX0KKworCit9CisKKworc3RhdGljIGlubGluZSBWT0lEIE5fU2V0Q2VuQ2goCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCkKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID09IEVYVENIQV9BQk9WRSkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsICsgMjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID09IDE0KQorCQkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCAtIDE7CisJCQllbHNlCisJCQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsIC0gMjsKKwkJfQorCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJfQorfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKK3N0YXRpYyBpbmxpbmUgVUlOVDggR2V0Q3VudHJ5TWF4VHhQd3IoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUlOVDggY2hhbm5lbCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCA9PSBjaGFubmVsKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gcEFkLT5DaGFubmVsTGlzdE51bSkKKwkJcmV0dXJuIDB4ZmY7CisJZWxzZQorCQlyZXR1cm4gcEFkLT5DaGFubmVsTGlzdFtpXS5NYXhUeFB3cjsKK30KKyNlbmRpZiAvLyBfX0NITElTVF9IX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vMjg3MF9ydG1wX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmOGRjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMKQEAgLTAsMCArMSwxNzYyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCTI4NzBfcnRtcF9pbml0LmMKKworCUFic3RyYWN0OgorCU1pbmlwb3J0IGdlbmVyaWMgcG9ydGlvbiBoZWFkZXIgZmlsZQorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKKwktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlQYXVsIExpbiAgICAyMDAyLTA4LTAxICAgIGNyZWF0ZWQKKyAgICBKb2huIENoYW5nICAyMDA0LTA4LTIwICAgIFJUMjU2MS8yNjYxIHVzZSBzY2F0dGVyLWdhdGhlciBzY2hlbWUKKyAgICBKYW4gTGVlICAJMjAwNi0wOS0xNSAgICBSVDI4NjAuIENoYW5nZSBmb3IgODAyLjExbiAsIEVFUFJPTSwgTGVkLCBCQSwgSFQuCisJU2FtcGxlIExpbgkyMDA3LTA1LTMxICAgIE1lcmdlIFJUMjg2MCBhbmQgUlQyODcwIGRyaXZlcnMuCisqLworCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKKworc3RhdGljIHZvaWQgcnhfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfaGNjYV9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfYWMzX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzJfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgcnQyODcwX2FjMV9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfYWMwX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9tZ210X2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9udWxsX2ZyYW1lX2NvbXBsZXRlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9ydHNfZnJhbWVfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgcnQyODcwX3BzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfZGF0YW91dF9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBJbml0aWFsaXplIHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmVzLgorCitBcmd1bWVudHM6CisgICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCisJTkRJU19TVEFUVVNfUkVTT1VSQ0VTCisKK05vdGU6CisJSW5pdGlhbGl6ZSBhbGwgcmVjZWl2ZSByZWxlYXRlZCBwcml2YXRlIGJ1ZmZlciwgaW5jbHVkZSB0aG9zZSBkZWZpbmUKKwlpbiBSVE1QX0FEQVBURVIgc3RydWN0dXJlIGFuZCBhbGwgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMuIFRoZSBtYWhvcgorCXdvcmsgaXMgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBlYWNoIHBhY2tldCBhbmQgY2hhaW4gYnVmZmVyIHRvCisJTkRJUyBwYWNrZXQgZGVzY3JpcHRvci4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCU5JQ0luaXRSZWN2KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVDSEFSCQkJCWk7CisJTkRJU19TVEFUVVMJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDSW5pdFJlY3ZcbiIpKTsKKwlwT2JqID0gcE9iajsKKworCS8vSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5QZW5kaW5nUngsIDApOworCXBBZC0+UGVuZGluZ1J4ID0gMDsKKwlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCAJPSAwOwkvLyBOZXh0IFJ4IFJlYWQgaW5kZXgKKwlwQWQtPk5leHRSeEJ1bGtJbkluZGV4CQk9IDAgOyAvL1JYX1JJTkdfU0laRSAtMTsgLy8gUnggQnVsayBwb2ludGVyCisJcEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiAJPSAwOworCisJZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCisJCS8vQWxsb2NhdGUgVVJCCisJCXBSeENvbnRleHQtPnBVcmIgPSBSVFVTQl9BTExPQ19VUkIoMCk7CisJCWlmIChwUnhDb250ZXh0LT5wVXJiID09IE5VTEwpCisJCXsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKwkJCWdvdG8gb3V0MTsKKwkJfQorCisJCS8vIEFsbG9jYXRlIHRyYW5zZmVyIGJ1ZmZlcgorCQlwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IFJUVVNCX1VSQl9BTExPQ19CVUZGRVIocE9iai0+cFVzYl9EZXYsIE1BWF9SWEJVTEtfU0laRSwgJnBSeENvbnRleHQtPmRhdGFfZG1hKTsKKwkJaWYgKHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyID09IE5VTEwpCisJCXsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKwkJCWdvdG8gb3V0MTsKKwkJfQorCisJCU5kaXNaZXJvTWVtb3J5KHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLCBNQVhfUlhCVUxLX1NJWkUpOworCisJCXBSeENvbnRleHQtPnBBZAk9IHBBZDsKKwkJcFJ4Q29udGV4dC0+cElycCA9IE5VTEw7CisJCXBSeENvbnRleHQtPkluVXNlCQk9IEZBTFNFOworCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nCT0gRkFMU0U7CisJCXBSeENvbnRleHQtPlJlYWRhYmxlCT0gRkFMU0U7CisJCS8vcFJ4Q29udGV4dC0+UmVvcmRlckluVXNlID0gRkFMU0U7CisJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gRkFMU0U7CisJCXBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCA9IDA7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIE5JQ0luaXRSZWN2XG4iKSk7CisJcmV0dXJuIFN0YXR1czsKKworb3V0MToKKwlmb3IgKGkgPSAwOyBpIDwgKFJYX1JJTkdfU0laRSk7IGkrKykKKwl7CisJCVBSWF9DT05URVhUICBwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisKKwkJaWYgKE5VTEwgIT0gcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIpCisJCXsKKwkJCVJUVVNCX1VSQl9GUkVFX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgTUFYX1JYQlVMS19TSVpFLAorCQkJCQkJCQlwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgcFJ4Q29udGV4dC0+ZGF0YV9kbWEpOworCQkJcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPSBOVUxMOworCQl9CisKKwkJaWYgKE5VTEwgIT0gcFJ4Q29udGV4dC0+cFVyYikKKwkJeworCQkJUlRVU0JfVU5MSU5LX1VSQihwUnhDb250ZXh0LT5wVXJiKTsKKwkJCVJUVVNCX0ZSRUVfVVJCKHBSeENvbnRleHQtPnBVcmIpOworCQkJcFJ4Q29udGV4dC0+cFVyYiA9IE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgSW5pdGlhbGl6ZSB0cmFuc21pdCBkYXRhIHN0cnVjdHVyZXMuCisKK0FyZ3VtZW50czoKKyAgICBwQWQJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKwlORElTX1NUQVRVU19SRVNPVVJDRVMKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCU5JQ0luaXRUcmFuc21pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyNkZWZpbmUgTE1fVVNCX0FMTE9DKHBPYmosIENvbnRleHQsIFRCX1R5cGUsIEJ1ZmZlclNpemUsIFN0YXR1cywgbXNnMSwgZXJyMSwgbXNnMiwgZXJyMikJXAorCUNvbnRleHQtPnBVcmIgPSBSVFVTQl9BTExPQ19VUkIoMCk7CQlcCisJaWYgKENvbnRleHQtPnBVcmIgPT0gTlVMTCkgewkJCVwKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsIG1zZzEpOwkJXAorCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CQlcCisJCWdvdG8gZXJyMTsgfQkJCQkJCVwKKwkJCQkJCQkJCQkJXAorCUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gCQkJCVwKKwkJKFRCX1R5cGUpUlRVU0JfVVJCX0FMTE9DX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgQnVmZmVyU2l6ZSwgJkNvbnRleHQtPmRhdGFfZG1hKTsJXAorCWlmIChDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9PSBOVUxMKSB7CVwKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsIG1zZzIpOwkJXAorCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CQlcCisJCWdvdG8gZXJyMjsgfQorCisjZGVmaW5lIExNX1VSQl9GUkVFKHBPYmosIENvbnRleHQsIEJ1ZmZlclNpemUpCQkJCVwKKwlpZiAoTlVMTCAhPSBDb250ZXh0LT5wVXJiKSB7CQkJCQkJCVwKKwkJUlRVU0JfVU5MSU5LX1VSQihDb250ZXh0LT5wVXJiKTsJCQkJCVwKKwkJUlRVU0JfRlJFRV9VUkIoQ29udGV4dC0+cFVyYik7CQkJCQkJXAorCQlDb250ZXh0LT5wVXJiID0gTlVMTDsgfQkJCQkJCQkJXAorCWlmIChOVUxMICE9IENvbnRleHQtPlRyYW5zZmVyQnVmZmVyKSB7CQkJCVwKKwkJUlRVU0JfVVJCX0ZSRUVfQlVGRkVSKHBPYmotPnBVc2JfRGV2LCBCdWZmZXJTaXplLAlcCisJCQkJCQkJCUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyLAlcCisJCQkJCQkJCUNvbnRleHQtPmRhdGFfZG1hKTsJCQlcCisJCUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gTlVMTDsgfQorCisJVUNIQVIJCQlpLCBhY2lkeDsKKwlORElTX1NUQVRVUyAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlQVFhfQ09OVEVYVAkJcE51bGxDb250ZXh0ICAgPSAmKHBBZC0+TnVsbENvbnRleHQpOworCVBUWF9DT05URVhUCQlwUHNQb2xsQ29udGV4dCA9ICYocEFkLT5Qc1BvbGxDb250ZXh0KTsKKwlQVFhfQ09OVEVYVAkJcFJUU0NvbnRleHQgICAgPSAmKHBBZC0+UlRTQ29udGV4dCk7CisJUFRYX0NPTlRFWFQJCXBNTE1FQ29udGV4dCA9IE5VTEw7CisvLwlQSFRfVFhfQ09OVEVYVAlwSFRUWENvbnRleHQgPSBOVUxMOworCVBPU19DT09LSUUJCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisJUFZPSUQJCQlSaW5nQmFzZVZhOworLy8JUlRNUF9UWF9SSU5HCSpwVHhSaW5nOworCVJUTVBfTUdNVF9SSU5HICAqcE1nbXRSaW5nOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0luaXRUcmFuc21pdFxuIikpOworCXBPYmogPSBwT2JqOworCisJLy8gSW5pdCA0IHNldCBvZiBUeCBwYXJhbWV0ZXJzCisJZm9yKGFjaWR4ID0gMDsgYWNpZHggPCBOVU1fT0ZfVFhfUklORzsgYWNpZHgrKykKKwl7CisJCS8vIEluaXRpYWxpemUgYWxsIFRyYW5zbWl0IHJlbGVhdGVkIHF1ZXVlcworCQlJbml0aWFsaXplUXVldWVIZWFkZXIoJnBBZC0+VHhTd1F1ZXVlW2FjaWR4XSk7CisKKwkJLy8gTmV4dCBMb2NhbCB0eCByaW5nIHBvaW50ZXIgd2FpdGluZyBmb3IgYnVjayBvdXQKKwkJcEFkLT5OZXh0QnVsa091dEluZGV4W2FjaWR4XSA9IGFjaWR4OworCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW2FjaWR4XSA9IEZBTFNFOyAvLyBCdWNrIE91dCBjb250cm9sIGZsYWcKKwkJLy9wQWQtPkRhdGFCdWxrRG9uZUlkeFthY2lkeF0gPSAwOworCX0KKworCS8vcEFkLT5OZXh0TUxNRUluZGV4CT0gMDsKKwkvL3BBZC0+UHVzaE1nbXRJbmRleAk9IDA7CisJLy9wQWQtPlBvcE1nbXRJbmRleAk9IDA7CisJLy9JbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPk1nbXRRdWV1ZVNpemUsIDApOworCS8vSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5UeENvdW50LCAwKTsKKworCS8vcEFkLT5QcmlvUmluZ0ZpcnN0SW5kZXgJPSAwOworCS8vcEFkLT5QcmlvUmluZ1R4Q250CQk9IDA7CisKKwlkbworCXsKKwkJLy8KKwkJLy8gVFhfUklOR19TSVpFLCA0IEFDcworCQkvLworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlmb3IoYWNpZHg9MDsgYWNpZHg8NDsgYWNpZHgrKykKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJeworI2lmIDEgLy9kZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlQSFRfVFhfQ09OVEVYVAlwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W2FjaWR4XSk7CisKKwkJCU5kaXNaZXJvTWVtb3J5KHBIVFRYQ29udGV4dCwgc2l6ZW9mKEhUX1RYX0NPTlRFWFQpKTsKKwkJCS8vQWxsb2NhdGUgVVJCCisJCQlMTV9VU0JfQUxMT0MocE9iaiwgcEhUVFhDb250ZXh0LCBQSFRUWF9CVUZGRVIsIHNpemVvZihIVFRYX0JVRkZFUiksIFN0YXR1cywKKwkJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBUeENvbnRleHRbJWRdIHVyYiEhIFxuIiwgYWNpZHgpLAorCQkJCQkJCWRvbmUsCisJCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggVHhDb250ZXh0WyVkXSBIVFRYX0JVRkZFUiAhISBcbiIsIGFjaWR4KSwKKwkJCQkJCQlvdXQxKTsKKworCQkJTmRpc1plcm9NZW1vcnkocEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+QWdncmVnYXRpb24sIDQpOworCQkJcEhUVFhDb250ZXh0LT5wQWQgPSBwQWQ7CisJCQlwSFRUWENvbnRleHQtPnBJcnAgPSBOVUxMOworCQkJcEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQlwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPSAwOworCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IDA7CisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPSAwOworCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSAwOworCQkJcEhUVFhDb250ZXh0LT5CdWxrT3V0U2l6ZSA9IDA7CisJCQlwSFRUWENvbnRleHQtPkJ1bGtPdXRQaXBlSWQgPSBhY2lkeDsKKwkJCXBIVFRYQ29udGV4dC0+YlJpbmdFbXB0eSA9IFRSVUU7CisJCQlwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9IEZBTFNFOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJcEFkLT5CdWxrT3V0UGVuZGluZ1thY2lkeF0gPSBGQUxTRTsKKwkJfQorCisKKwkJLy8KKwkJLy8gTUdNVF9SSU5HX1NJWkUKKwkJLy8KKwkJLy8gQWxsb2NhdGUgTUdNVCByaW5nIGRlc2NyaXB0b3IncyBtZW1vcnkKKwkJcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplID0gTUdNVF9SSU5HX1NJWkUgKiBzaXplb2YoVFhfQ09OVEVYVCk7CisJCVJUTVBBbGxvY2F0ZU1lbW9yeSgmcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYSwgcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplKTsKKwkJaWYgKHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEgPT0gTlVMTCkKKwkJeworCQkJREJHUFJJTlRfRVJSKCgiRmFpbGVkIHRvIGFsbG9jYXRlIGEgYmlnIGJ1ZmZlciBmb3IgTWdtdERlc2NSaW5nIVxuIikpOworCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOworCQkJZ290byBvdXQxOworCQl9CisJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEsIHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jU2l6ZSk7CisJCVJpbmdCYXNlVmEgICAgID0gcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYTsKKworCQkvLyBJbml0aWFsaXplIE1HTVQgUmluZyBhbmQgYXNzb2NpYXRlZCBidWZmZXIgbWVtb3J5CisJCXBNZ210UmluZyA9ICZwQWQtPk1nbXRSaW5nOworCQlmb3IgKGkgPSAwOyBpIDwgTUdNVF9SSU5HX1NJWkU7IGkrKykKKwkJeworCQkJLy8gbGluayB0aGUgcHJlLWFsbG9jYXRlZCBNZ210IGJ1ZmZlciB0byBNZ210UmluZy5DZWxsCisJCQlwTWdtdFJpbmctPkNlbGxbaV0uQWxsb2NTaXplID0gc2l6ZW9mKFRYX0NPTlRFWFQpOworCQkJcE1nbXRSaW5nLT5DZWxsW2ldLkFsbG9jVmEgPSBSaW5nQmFzZVZhOworCQkJcE1nbXRSaW5nLT5DZWxsW2ldLnBOZGlzUGFja2V0ID0gTlVMTDsKKwkJCXBNZ210UmluZy0+Q2VsbFtpXS5wTmV4dE5kaXNQYWNrZXQgPSBOVUxMOworCisJCQkvL0FsbG9jYXRlIFVSQiBmb3IgTUxNRUNvbnRleHQKKwkJCXBNTE1FQ29udGV4dCA9IChQVFhfQ09OVEVYVCkgcEFkLT5NZ210UmluZy5DZWxsW2ldLkFsbG9jVmE7CisJCQlwTUxNRUNvbnRleHQtPnBVcmIgPSBSVFVTQl9BTExPQ19VUkIoMCk7CisJCQlpZiAocE1MTUVDb250ZXh0LT5wVXJiID09IE5VTEwpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIE1MTUVDb250ZXh0WyVkXSB1cmIhISBcbiIsIGkpKTsKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisJCQkJZ290byBvdXQyOworCQkJfQorCQkJcE1MTUVDb250ZXh0LT5wQWQgPSBwQWQ7CisJCQlwTUxNRUNvbnRleHQtPnBJcnAgPSBOVUxMOworCQkJcE1MTUVDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IE5VTEw7CisJCQlwTUxNRUNvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCQlwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJCXBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID0gRkFMU0U7CisJCQlwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplID0gMDsKKwkJCXBNTE1FQ29udGV4dC0+U2VsZklkeCA9IGk7CisKKwkJCS8vIE9mZnNldCB0byBuZXh0IHJpbmcgZGVzY3JpcHRvciBhZGRyZXNzCisJCQlSaW5nQmFzZVZhID0gKFBVQ0hBUikgUmluZ0Jhc2VWYSArIHNpemVvZihUWF9DT05URVhUKTsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNR01UIFJpbmc6IHRvdGFsICVkIGVudHJ5IGFsbG9jYXRlZFxuIiwgaSkpOworCisJCS8vcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA9IChNR01UX1JJTkdfU0laRSAtIDEpOworCQlwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ID0gTUdNVF9SSU5HX1NJWkU7CisJCXBBZC0+TWdtdFJpbmcuVHhDcHVJZHggPSAwOworCQlwQWQtPk1nbXRSaW5nLlR4RG1hSWR4ID0gMDsKKworCQkvLworCQkvLyBCRUFDT05fUklOR19TSVpFCisJCS8vCisJCWZvcihpPTA7IGk8QkVBQ09OX1JJTkdfU0laRTsgaSsrKSAvLyAyCisJCXsKKwkJCVBUWF9DT05URVhUCXBCZWFjb25Db250ZXh0ID0gJihwQWQtPkJlYWNvbkNvbnRleHRbaV0pOworCisKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25Db250ZXh0LCBzaXplb2YoVFhfQ09OVEVYVCkpOworCisJCQkvL0FsbG9jYXRlIFVSQgorCQkJTE1fVVNCX0FMTE9DKHBPYmosIHBCZWFjb25Db250ZXh0LCBQVFhfQlVGRkVSLCBzaXplb2YoVFhfQlVGRkVSKSwgU3RhdHVzLAorCQkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIEJlYWNvbkNvbnRleHRbJWRdIHVyYiEhIFxuIiwgaSksCisJCQkJCQkJb3V0MiwKKwkJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBCZWFjb25Db250ZXh0WyVkXSBUWF9CVUZGRVIgISEgXG4iLCBpKSwKKwkJCQkJCQlvdXQzKTsKKworCQkJcEJlYWNvbkNvbnRleHQtPnBBZCA9IHBBZDsKKwkJCXBCZWFjb25Db250ZXh0LT5wSXJwID0gTlVMTDsKKwkJCXBCZWFjb25Db250ZXh0LT5JblVzZSA9IEZBTFNFOworCQkJcEJlYWNvbkNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJfQorCisJCS8vCisJCS8vIE51bGxDb250ZXh0CisJCS8vCisJCU5kaXNaZXJvTWVtb3J5KHBOdWxsQ29udGV4dCwgc2l6ZW9mKFRYX0NPTlRFWFQpKTsKKworCQkvL0FsbG9jYXRlIFVSQgorCQlMTV9VU0JfQUxMT0MocE9iaiwgcE51bGxDb250ZXh0LCBQVFhfQlVGRkVSLCBzaXplb2YoVFhfQlVGRkVSKSwgU3RhdHVzLAorCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggTnVsbENvbnRleHQgdXJiISEgXG4iKSwKKwkJCQkJCW91dDMsCisJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBOdWxsQ29udGV4dCBUWF9CVUZGRVIgISEgXG4iKSwKKwkJCQkJCW91dDQpOworCisJCXBOdWxsQ29udGV4dC0+cEFkID0gcEFkOworCQlwTnVsbENvbnRleHQtPnBJcnAgPSBOVUxMOworCQlwTnVsbENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCisJCS8vCisJCS8vIFJUU0NvbnRleHQKKwkJLy8KKwkJTmRpc1plcm9NZW1vcnkocFJUU0NvbnRleHQsIHNpemVvZihUWF9DT05URVhUKSk7CisKKwkJLy9BbGxvY2F0ZSBVUkIKKwkJTE1fVVNCX0FMTE9DKHBPYmosIHBSVFNDb250ZXh0LCBQVFhfQlVGRkVSLCBzaXplb2YoVFhfQlVGRkVSKSwgU3RhdHVzLAorCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggUlRTQ29udGV4dCB1cmIhISBcbiIpLAorCQkJCQkJb3V0NCwKKwkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFJUU0NvbnRleHQgVFhfQlVGRkVSICEhIFxuIiksCisJCQkJCQlvdXQ1KTsKKworCQlwUlRTQ29udGV4dC0+cEFkID0gcEFkOworCQlwUlRTQ29udGV4dC0+cElycCA9IE5VTEw7CisJCXBSVFNDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQlwUlRTQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCisJCS8vCisJCS8vIFBzUG9sbENvbnRleHQKKwkJLy8KKwkJLy9OZGlzWmVyb01lbW9yeShwUHNQb2xsQ29udGV4dCwgc2l6ZW9mKFRYX0NPTlRFWFQpKTsKKwkJLy9BbGxvY2F0ZSBVUkIKKwkJTE1fVVNCX0FMTE9DKHBPYmosIHBQc1BvbGxDb250ZXh0LCBQVFhfQlVGRkVSLCBzaXplb2YoVFhfQlVGRkVSKSwgU3RhdHVzLAorCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggUHNQb2xsQ29udGV4dCB1cmIhISBcbiIpLAorCQkJCQkJb3V0NSwKKwkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFBzUG9sbENvbnRleHQgVFhfQlVGRkVSICEhIFxuIiksCisJCQkJCQlvdXQ2KTsKKworCQlwUHNQb2xsQ29udGV4dC0+cEFkID0gcEFkOworCQlwUHNQb2xsQ29udGV4dC0+cElycCA9IE5VTEw7CisJCXBQc1BvbGxDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQlwUHNQb2xsQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQlwUHNQb2xsQ29udGV4dC0+YkFnZ3JlZ2F0aWJsZSA9IEZBTFNFOworCQlwUHNQb2xsQ29udGV4dC0+TGFzdE9uZSA9IFRSVUU7CisKKwl9ICAgd2hpbGUgKEZBTFNFKTsKKworCitkb25lOgorCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0VHJhbnNtaXRcbiIpKTsKKworCXJldHVybiBTdGF0dXM7CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRVJST1IgSEFORExFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworb3V0NjoKKwlMTV9VUkJfRlJFRShwT2JqLCBwUHNQb2xsQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCitvdXQ1OgorCUxNX1VSQl9GUkVFKHBPYmosIHBSVFNDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisKK291dDQ6CisJTE1fVVJCX0ZSRUUocE9iaiwgcE51bGxDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisKK291dDM6CisJZm9yKGk9MDsgaTxCRUFDT05fUklOR19TSVpFOyBpKyspCisJeworCQlQVFhfQ09OVEVYVAlwQmVhY29uQ29udGV4dCA9ICYocEFkLT5CZWFjb25Db250ZXh0W2ldKTsKKwkJaWYgKHBCZWFjb25Db250ZXh0KQorCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEJlYWNvbkNvbnRleHQsIHNpemVvZihUWF9CVUZGRVIpKTsKKwl9CisKK291dDI6CisJaWYgKHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEpCisJeworCQlwTWdtdFJpbmcgPSAmcEFkLT5NZ210UmluZzsKKwlmb3IoaT0wOyBpPE1HTVRfUklOR19TSVpFOyBpKyspCisJeworCQlwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpIHBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5BbGxvY1ZhOworCQlpZiAocE1MTUVDb250ZXh0KQorCQkJTE1fVVJCX0ZSRUUocE9iaiwgcE1MTUVDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisJfQorCQlOZGlzRnJlZU1lbW9yeShwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhLCBwQWQtPk1nbXREZXNjUmluZy5BbGxvY1NpemUsIDApOworCQlwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhID0gTlVMTDsKKwl9CisKK291dDE6CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwlmb3IoYWNpZHg9MDsgYWNpZHg8NDsgYWNpZHgrKykKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl7CisJCVBIVF9UWF9DT05URVhUIHBUeENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W2FjaWR4XSk7CisJCWlmIChwVHhDb250ZXh0KQorCQkJTE1fVVJCX0ZSRUUocE9iaiwgcFR4Q29udGV4dCwgc2l6ZW9mKEhUVFhfQlVGRkVSKSk7CisJfQorCisJLy8gSGVyZSB3ZSBkaWRuJ3QgaGF2ZSBhbnkgcHJlLWFsbG9jYXRlZCBtZW1vcnkgbmVlZCB0byBmcmVlLgorCisJcmV0dXJuIFN0YXR1czsKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEFsbG9jYXRlIERNQSBtZW1vcnkgYmxvY2tzIGZvciBzZW5kLCByZWNlaXZlLgorCitBcmd1bWVudHM6CisgICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCisJTkRJU19TVEFUVVNfRkFJTFVSRQorCU5ESVNfU1RBVFVTX1JFU09VUkNFUworCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisvLwlDT1VOVEVSXzgwMl8xMQlwQ291bnRlciA9ICZwQWQtPldsYW5Db3VudGVyczsKKwlORElTX1NUQVRVUwkJU3RhdHVzOworCUlOVAkJCQludW07CisKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBSVE1QQWxsb2NUeFJ4UmluZ01lbW9yeVxuIikpOworCisKKwlkbworCXsKKwkJLy8gSW5pdCB0aGUgQ21kUSBhbmQgQ21kUUxvY2sKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwkJUlRVU0JJbml0aWFsaXplQ21kUSgmcEFkLT5DbWRRKTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisKKworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NTE1FQnVsa091dExvY2spOworCQkvL05kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1MTUVXYWl0UXVldWVMb2NrKTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbMF0pOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1sxXSk7CisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrWzJdKTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbM10pOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1s0XSk7CisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrWzVdKTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa0luTG9jayk7CisKKwkJZm9yIChudW0gPSAwOyBudW0gPCBOVU1fT0ZfVFhfUklORzsgbnVtKyspCisJCXsKKwkJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tudW1dKTsKKwkJfQorCisjaWZkZWYgUkFMSU5LX0FURQorCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisvLwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWVtTG9jayk7CS8vIE5vdCB1c2VkIGluIFJUMjhYWAorCisvLwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7IC8vIGluaXQgaXQgaW4gVXNlckNmZ0luaXQoKQorLy8JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7IC8vIGluaXQgaXQgaW4gQkFUYWJsZUluaXQoKQorCisvLwkJZm9yKG51bT0wOyBudW08TUFYX0xFTl9PRl9CQV9SRUNfVEFCTEU7IG51bSsrKQorLy8JCXsKKy8vCQkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W251bV0uUnhSZVJpbmdMb2NrKTsKKy8vCQl9CisKKwkJLy8KKwkJLy8gSW5pdCBNYWMgVGFibGUKKwkJLy8KKy8vCQlNYWNUYWJsZUluaXRpYWxpemUocEFkKTsKKworCQkvLworCQkvLyBJbml0IHNlbmQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMKKwkJLy8KKwkJU3RhdHVzID0gTklDSW5pdFRyYW5zbWl0KHBBZCk7CisJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCWJyZWFrOworCisJCS8vCisJCS8vIEluaXQgcmVjZWl2ZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlbGF0ZWQgcGFyYW1ldGVycworCQkvLworCQlTdGF0dXMgPSBOSUNJbml0UmVjdihwQWQpOworCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQlicmVhazsKKworCQlwQWQtPlBlbmRpbmdJb0NvdW50ID0gMTsKKworCX0gd2hpbGUgKEZBTFNFKTsKKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkZyYWdGcmFtZSwgc2l6ZW9mKEZSQUdNRU5UX0ZSQU1FKSk7CisJcEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQgPSAgUlRNUF9BbGxvY2F0ZUZyYWdQYWNrZXRCdWZmZXIocEFkLCBSWF9CVUZGRVJfTk9STVNJWkUpOworCisJaWYgKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0ID09IE5VTEwpCisJeworCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisJfQorCisJREJHUFJJTlRfUyhTdGF0dXMsICgiPC0tIFJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5LCBTdGF0dXM9JXhcbiIsIFN0YXR1cykpOworCXJldHVybiBTdGF0dXM7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKwlDYWxscyBVU0JfSW50ZXJmYWNlU3RvcCBhbmQgZnJlZXMgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIFVSQnMKKyAgICBjYWxscyBOZGlzTURlcmVnaXN0ZXJEZXZpY2UgYW5kIGZyZWVzIHRoZSBtZW1vcnkKKyAgICBhbGxvY2F0ZWQgaW4gVk5ldEluaXRpYWxpemUgZm9yIHRoZSBBZGFwdGVyIE9iamVjdAorCitBcmd1bWVudHM6CisJKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKwlOb25lCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBGcmVlVHhSeFJpbmdNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisjZGVmaW5lIExNX1VSQl9GUkVFKHBPYmosIENvbnRleHQsIEJ1ZmZlclNpemUpCQkJCVwKKwlpZiAoTlVMTCAhPSBDb250ZXh0LT5wVXJiKSB7CQkJCQkJCVwKKwkJUlRVU0JfVU5MSU5LX1VSQihDb250ZXh0LT5wVXJiKTsJCQkJCVwKKwkJUlRVU0JfRlJFRV9VUkIoQ29udGV4dC0+cFVyYik7CQkJCQkJXAorCQlDb250ZXh0LT5wVXJiID0gTlVMTDsgfQkJCQkJCQkJXAorCWlmIChOVUxMICE9IENvbnRleHQtPlRyYW5zZmVyQnVmZmVyKSB7CQkJCQlcCisJCVJUVVNCX1VSQl9GUkVFX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgQnVmZmVyU2l6ZSwJXAorCQkJCQkJCQlDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwJXAorCQkJCQkJCQlDb250ZXh0LT5kYXRhX2RtYSk7CQkJXAorCQlDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IE5VTEw7IH0KKworCisJVUlOVCAgICAgICAgICAgICAgICBpLCBhY2lkeDsKKwlQVFhfQ09OVEVYVAkJCXBOdWxsQ29udGV4dCAgID0gJnBBZC0+TnVsbENvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwUHNQb2xsQ29udGV4dCA9ICZwQWQtPlBzUG9sbENvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwUlRTQ29udGV4dCAgICA9ICZwQWQtPlJUU0NvbnRleHQ7CisvLwlQSFRfVFhfQ09OVEVYVCAJCXBIVFRYQ29udGV4dDsKKwkvL1BSVE1QX1JFT1JERVJCVUYJcFJlb3JkZXJCdWY7CisJUE9TX0NPT0tJRQkJCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisvLwlSVE1QX1RYX1JJTkcJCSpwVHhSaW5nOworCisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0tPiBSVE1QRnJlZVR4UnhSaW5nTWVtb3J5XG4iKSk7CisJcE9iaiA9IHBPYmo7CisKKwkvLyBGcmVlIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBSRUNFSVZFIGJ1ZmZlciBxdWV1ZS4KKwlmb3IoaT0wOyBpPChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCQlpZiAocFJ4Q29udGV4dCkKKwkJCUxNX1VSQl9GUkVFKHBPYmosIHBSeENvbnRleHQsIE1BWF9SWEJVTEtfU0laRSk7CisJfQorCisJLy8gRnJlZSBQc1BvbGwgZnJhbWUgcmVzb3VyY2UKKwlMTV9VUkJfRlJFRShwT2JqLCBwUHNQb2xsQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCisJLy8gRnJlZSBOVUxMIGZyYW1lIHJlc291cmNlCisJTE1fVVJCX0ZSRUUocE9iaiwgcE51bGxDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisKKwkvLyBGcmVlIFJUUyBmcmFtZSByZXNvdXJjZQorCUxNX1VSQl9GUkVFKHBPYmosIHBSVFNDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisKKworCS8vIEZyZWUgYmVhY29uIGZyYW1lIHJlc291cmNlCisJZm9yKGk9MDsgaTxCRUFDT05fUklOR19TSVpFOyBpKyspCisJeworCQlQVFhfQ09OVEVYVAlwQmVhY29uQ29udGV4dCA9ICYocEFkLT5CZWFjb25Db250ZXh0W2ldKTsKKwkJaWYgKHBCZWFjb25Db250ZXh0KQorCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEJlYWNvbkNvbnRleHQsIHNpemVvZihUWF9CVUZGRVIpKTsKKwl9CisKKworCS8vIEZyZWUgbWdtdCBmcmFtZSByZXNvdXJjZQorCWZvcihpID0gMDsgaSA8IE1HTVRfUklOR19TSVpFOyBpKyspCisJeworCQlQVFhfQ09OVEVYVCBwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpcEFkLT5NZ210UmluZy5DZWxsW2ldLkFsbG9jVmE7CisJCS8vTE1fVVJCX0ZSRUUocE9iaiwgcE1MTUVDb250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisJCWlmIChOVUxMICE9IHBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldCkKKwkJeworCQkJUlRNUEZyZWVOZGlzUGFja2V0KHBBZCwgcEFkLT5NZ210UmluZy5DZWxsW2ldLnBOZGlzUGFja2V0KTsKKwkJCXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldCA9IE5VTEw7CisJCQlwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gTlVMTDsKKwkJfQorCisJCWlmIChwTUxNRUNvbnRleHQpCisJCXsKKwkJCWlmIChOVUxMICE9IHBNTE1FQ29udGV4dC0+cFVyYikKKwkJCXsKKwkJCQlSVFVTQl9VTkxJTktfVVJCKHBNTE1FQ29udGV4dC0+cFVyYik7CisJCQkJUlRVU0JfRlJFRV9VUkIocE1MTUVDb250ZXh0LT5wVXJiKTsKKwkJCQlwTUxNRUNvbnRleHQtPnBVcmIgPSBOVUxMOworCQkJfQorCQl9CisJfQorCWlmIChwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhKQorCQlOZGlzRnJlZU1lbW9yeShwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhLCBwQWQtPk1nbXREZXNjUmluZy5BbGxvY1NpemUsIDApOworCisKKwkvLyBGcmVlIFR4IGZyYW1lIHJlc291cmNlCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCWZvcihhY2lkeD0wOyBhY2lkeDw0OyBhY2lkeCsrKQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQl7CisJCVBIVF9UWF9DT05URVhUIHBIVFRYQ29udGV4dCA9ICYocEFkLT5UeENvbnRleHRbYWNpZHhdKTsKKwkJCWlmIChwSFRUWENvbnRleHQpCisJCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEhUVFhDb250ZXh0LCBzaXplb2YoSFRUWF9CVUZGRVIpKTsKKwkJfQorCisJaWYgKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KQorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCisJZm9yKGk9MDsgaTw2OyBpKyspCisJeworCQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW2ldKTsKKwl9CisKKwlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkJ1bGtJbkxvY2spOworCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrKTsKKworCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworI2lmZGVmIFJBTElOS19BVEUKKwlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJLy8gQ2xlYXIgYWxsIHBlbmRpbmcgYnVsay1vdXQgcmVxdWVzdCBmbGFncy4KKwlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCAweGZmZmZmZmZmKTsKKworLy8JTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworLy8JZm9yKGk9MDsgaTxNQVhfTEVOX09GX0JBX1JFQ19UQUJMRTsgaSsrKQorLy8JeworLy8JCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W2ldLlJ4UmVSaW5nTG9jayk7CisvLwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI8LS0tIFJlbGVhc2VBZGFwdGVyXG4iKSk7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBBbGxvY2F0ZSBtZW1vcnkgZm9yIGFkYXB0ZXIgY29udHJvbCBibG9jay4KKworQXJndW1lbnRzOgorICAgIHBBZAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCitSZXR1cm4gVmFsdWU6CisJTkRJU19TVEFUVVNfU1VDQ0VTUworCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKwlORElTX1NUQVRVU19SRVNPVVJDRVMKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIEFkYXB0ZXJCbG9ja0FsbG9jYXRlTWVtb3J5KAorCUlOIFBWT0lECWhhbmRsZSwKKwlPVVQJUFZPSUQJKnBwQWQpCit7CisJUFVTQl9ERVYJdXNiX2RldjsKKwlQT1NfQ09PS0lFCXBPYmogPSAoUE9TX0NPT0tJRSkgaGFuZGxlOworCisKKwl1c2JfZGV2ID0gcE9iai0+cFVzYl9EZXY7CisKKwlwT2JqLT5NTE1FVGhyX3BpZAk9IE5VTEw7CisJcE9iai0+UlRVU0JDbWRUaHJfcGlkCT0gTlVMTDsKKworCSpwcEFkID0gKFBWT0lEKXZtYWxsb2Moc2l6ZW9mKFJUTVBfQURBUFRFUikpOworCisJaWYgKCpwcEFkKQorCXsKKwkJTmRpc1plcm9NZW1vcnkoKnBwQWQsIHNpemVvZihSVE1QX0FEQVBURVIpKTsKKwkJKChQUlRNUF9BREFQVEVSKSpwcEFkKS0+T1NfQ29va2llID0gaGFuZGxlOworCQlyZXR1cm4gKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCX0KKwllbHNlCisJeworCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCX0KK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENyZWF0ZSBrZXJuZWwgdGhyZWFkcyAmIHRhc2tsZXRzLgorCitBcmd1bWVudHM6CisgICAgKm5ldF9kZXYJCQlQb2ludGVyIHRvIHdpcmVsZXNzIG5ldCBkZXZpY2UgaW50ZXJmYWNlCisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCisJTkRJU19TVEFUVVNfRkFJTFVSRQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJIENyZWF0ZVRocmVhZHMoCisJSU4Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKwlwaWRfdCBwaWRfbnVtYmVyOworCisJLy9pbml0X01VVEVYKCYocEFkLT51c2JkZXZfc2VtYXBob3JlKSk7CisKKwlpbml0X01VVEVYX0xPQ0tFRCgmKHBBZC0+bWxtZV9zZW1hcGhvcmUpKTsKKwlpbml0X2NvbXBsZXRpb24gKCZwQWQtPm1sbWVDb21wbGV0ZSk7CisKKwlpbml0X01VVEVYX0xPQ0tFRCgmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7CisJaW5pdF9jb21wbGV0aW9uICgmcEFkLT5DbWRRQ29tcGxldGUpOworCisJaW5pdF9NVVRFWF9MT0NLRUQoJihwQWQtPlJUVVNCVGltZXJfc2VtYXBob3JlKSk7CisJaW5pdF9jb21wbGV0aW9uICgmcEFkLT5UaW1lclFDb21wbGV0ZSk7CisKKwkvLyBDcmVhdCBNTE1FIFRocmVhZAorCXBPYmotPk1MTUVUaHJfcGlkID0gTlVMTDsKKwlwaWRfbnVtYmVyID0ga2VybmVsX3RocmVhZChNbG1lVGhyZWFkLCBwQWQsIENMT05FX1ZNKTsKKwlpZiAocGlkX251bWJlciA8IDApCisJeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBNbG1lIHRocmVhZFxuIixwQWQtPm5ldF9kZXYtPm5hbWUpOworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisJcE9iai0+TUxNRVRocl9waWQgPSBmaW5kX2dldF9waWQocGlkX251bWJlcik7CisJLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdGFydAorCXdhaXRfZm9yX2NvbXBsZXRpb24oJihwQWQtPm1sbWVDb21wbGV0ZSkpOworCisJLy8gQ3JlYXQgQ29tbWFuZCBUaHJlYWQKKwlwT2JqLT5SVFVTQkNtZFRocl9waWQgPSBOVUxMOworCXBpZF9udW1iZXIgPSBrZXJuZWxfdGhyZWFkKFJUVVNCQ21kVGhyZWFkLCBwQWQsIENMT05FX1ZNKTsKKwlpZiAocGlkX251bWJlciA8IDApCisJeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBSVFVTQkNtZCB0aHJlYWRcbiIscEFkLT5uZXRfZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCXBPYmotPlJUVVNCQ21kVGhyX3BpZCA9IGZpbmRfZ2V0X3BpZChwaWRfbnVtYmVyKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5DbWRRQ29tcGxldGUpKTsKKworCXBPYmotPlRpbWVyUVRocl9waWQgPSBOVUxMOworCXBpZF9udW1iZXIgPSBrZXJuZWxfdGhyZWFkKFRpbWVyUVRocmVhZCwgcEFkLCBDTE9ORV9WTSk7CisJaWYgKHBpZF9udW1iZXIgPCAwKQorCXsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RhcnQgVGltZXJRVGhyZWFkXG4iLHBBZC0+bmV0X2Rldi0+bmFtZSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKwlwT2JqLT5UaW1lclFUaHJfcGlkID0gZmluZF9nZXRfcGlkKHBpZF9udW1iZXIpOworCS8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5UaW1lclFDb21wbGV0ZSkpOworCisJLy8gQ3JlYXRlIHJlY2VpdmUgdGFza2xldAorCXRhc2tsZXRfaW5pdCgmcE9iai0+cnhfZG9uZV90YXNrLCByeF9kb25lX3Rhc2tsZXQsIChVTE9ORylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrLCBydDI4NzBfbWdtdF9kbWFfZG9uZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+YWMwX2RtYV9kb25lX3Rhc2ssIHJ0Mjg3MF9hYzBfZG1hX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPmFjMV9kbWFfZG9uZV90YXNrLCBydDI4NzBfYWMxX2RtYV9kb25lX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7CisJdGFza2xldF9pbml0KCZwT2JqLT5hYzJfZG1hX2RvbmVfdGFzaywgcnQyODcwX2FjMl9kbWFfZG9uZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+YWMzX2RtYV9kb25lX3Rhc2ssIHJ0Mjg3MF9hYzNfZG1hX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPmhjY2FfZG1hX2RvbmVfdGFzaywgcnQyODcwX2hjY2FfZG1hX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPnRidHRfdGFzaywgdGJ0dF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+bnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrLCBydDI4NzBfbnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+cnRzX2ZyYW1lX2NvbXBsZXRlX3Rhc2ssIHJ0Mjg3MF9ydHNfZnJhbWVfY29tcGxldGVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPnBzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrLCBydDI4NzBfcHNwb2xsX2ZyYW1lX2NvbXBsZXRlX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7CisKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorIAlBcyBTVEEncyBCU1NJRCBpcyBhIFdDIHRvbywgaXQgdXNlcyBzaGFyZWQga2V5IHRhYmxlLgorIAlUaGlzIGZ1bmN0aW9uIHdyaXRlIGNvcnJlY3QgdW5pY2FzdCBUWCBrZXkgdG8gQVNJQyBXQ0lELgorIAlBbmQgd2Ugc3RpbGwgbWFrZSBhIGNvcHkgaW4gb3VyIE1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LgorCUNhbGxlciBndWFyYW50ZWUgVEtJUC9BRVMgYWx3YXlzIGhhcyBrZXlpZHggPSAwLiAocGFpcndpc2Uga2V5KQorCUNhbGxlciBndWFyYW50ZWUgV0VQIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2hlbiBzZXQgVHhrZXksICBkZWZhdWx0IGtleSBpbmRleD0wfjMuCisKK0FyZ3VtZW50czoKKwlwQWQgCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJcEtleQkJCQkJUG9pbnRlciB0byB0aGUgd2hlcmUgdGhlIGtleSBzdG9yZWQKKworUmV0dXJuIFZhbHVlOgorCU5ESVNfU1VDQ0VTUwkJCUFkZCBrZXkgc3VjY2Vzc2Z1bGx5CisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBBZGRCU1NJRENpcGhlcigKKwlJTglQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4JVUNIQVIJCQkJQWlkLAorCUlOCVBORElTXzgwMl8xMV9LRVkJcEtleSwKKwlJTiAgVUNIQVIgICAJCQlDaXBoZXJBbGcpCit7CisJUFVDSEFSCQlwVHhNaWMsIHBSeE1pYzsKKwlCT09MRUFOIAliS2V5UlNDLCBiQXV0aGVudGljYXRvcjsgLy8gaW5kaWNhdGUgdGhlIHJlY2VpdmUgU0Mgc2V0IGJ5IEtleVJTQyB2YWx1ZQorLy8JVUNIQVIJCUNpcGhlckFsZzsKKwlVQ0hBUgkJaTsKKwlVTE9ORwkJV0NJREF0dHJpOworCVVTSE9SVAkgCW9mZnNldDsKKwlVQ0hBUgkJS2V5SWR4LCBJVkVJVls4XTsKKwlVSU5UMzIJCVZhbHVlOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUEFkZEJTU0lEQ2lwaGVyPT0+IEFpZCA9ICVkXG4iLEFpZCkpOworCisJLy8gQml0IDI5IG9mIEFkZC1rZXkgS2V5UlNDCisJYktleVJTQyAJICAgPSAocEtleS0+S2V5SW5kZXggJiAweDIwMDAwMDAwKSA/IFRSVUUgOiBGQUxTRTsKKworCS8vIEJpdCAyOCBvZiBBZGQta2V5IEF1dGhlbnRpY2F0b3IKKwliQXV0aGVudGljYXRvciA9IChwS2V5LT5LZXlJbmRleCAmIDB4MTAwMDAwMDApID8gVFJVRSA6IEZBTFNFOworCUtleUlkeCA9IChVQ0hBUilwS2V5LT5LZXlJbmRleCYweGZmOworCisJaWYgKEtleUlkeCA+IDQpCisJCXJldHVybjsKKworCisJaWYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApCisJewlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJeworCQkJLy8gZm9yIFdQQS1Ob25lIFR4LCBSeCBNSUMgaXMgdGhlIHNhbWUKKwkJCXBUeE1pYyA9IChQVUNIQVIpICgmcEtleS0+S2V5TWF0ZXJpYWwpICsgMTY7CisJCQlwUnhNaWMgPSBwVHhNaWM7CisJCX0KKwkJZWxzZSBpZiAoYkF1dGhlbnRpY2F0b3IgPT0gVFJVRSkKKwkJeworCQkJcFR4TWljID0gKFBVQ0hBUikgKCZwS2V5LT5LZXlNYXRlcmlhbCkgKyAxNjsKKwkJCXBSeE1pYyA9IChQVUNIQVIpICgmcEtleS0+S2V5TWF0ZXJpYWwpICsgMjQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwUnhNaWMgPSAoUFVDSEFSKSAoJnBLZXktPktleU1hdGVyaWFsKSArIDE2OworCQkJcFR4TWljID0gKFBVQ0hBUikgKCZwS2V5LT5LZXlNYXRlcmlhbCkgKyAyNDsKKwkJfQorCisJCW9mZnNldCA9IFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICsgKEFpZCAqIEhXX0tFWV9FTlRSWV9TSVpFKSArIDB4MTA7CisJCWZvciAoaT0wOyBpPDg7ICkKKwkJeworCQkJVmFsdWUgPSAqKHBUeE1pYytpKTsKKwkJCVZhbHVlICs9ICgqKHBUeE1pYytpKzEpPDw4KTsKKwkJCVZhbHVlICs9ICgqKHBUeE1pYytpKzIpPDwxNik7CisJCQlWYWx1ZSArPSAoKihwVHhNaWMraSszKTw8MjQpOworCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0K2ksIFZhbHVlKTsKKwkJCWkrPTQ7CisJCX0KKworCQlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChBaWQgKiBIV19LRVlfRU5UUllfU0laRSkgKyAweDE4OworCQlmb3IgKGk9MDsgaTw4OyApCisJCXsKKwkJCVZhbHVlID0gKihwUnhNaWMraSk7CisJCQlWYWx1ZSArPSAoKihwUnhNaWMraSsxKTw8OCk7CisJCQlWYWx1ZSArPSAoKihwUnhNaWMraSsyKTw8MTYpOworCQkJVmFsdWUgKz0gKCoocFJ4TWljK2krMyk8PDI0KTsKKwkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCtpLCBWYWx1ZSk7CisJCQlpKz00OworCQl9CisKKwkJLy8gT25seSBLZXkgbGVudGggZXF1YWwgdG8gVEtJUCBrZXkgaGF2ZSB0aGVzZQorCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuUnhNaWMsIHBSeE1pYywgOCk7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5UeE1pYywgcFR4TWljLCA4KTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCQkoIglUeE1JQyAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggXG4iLAorCQkJCXBUeE1pY1swXSxwVHhNaWNbMV0scFR4TWljWzJdLHBUeE1pY1szXSwKKwkJCQlwVHhNaWNbNF0scFR4TWljWzVdLHBUeE1pY1s2XSxwVHhNaWNbN10pKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkJKCIJUnhNSUMgID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFxuIiwKKwkJCQlwUnhNaWNbMF0scFJ4TWljWzFdLHBSeE1pY1syXSxwUnhNaWNbM10sCisJCQkJcFJ4TWljWzRdLHBSeE1pY1s1XSxwUnhNaWNbNl0scFJ4TWljWzddKSk7CisJfQorCisJLy8gMi4gUmVjb3JkIFNlY3VyaXR5IEtleS4KKwlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LktleUxlbj0gKFVDSEFSKXBLZXktPktleUxlbmd0aDsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuS2V5LCAmcEtleS0+S2V5TWF0ZXJpYWwsIHBLZXktPktleUxlbmd0aCk7CisKKwkvLyAzLiBDaGVjayBSeFRzYy4gQW5kIHVzZWQgdG8gaW5pdCB0byBBU0lDIElWLgorCWlmIChiS2V5UlNDID09IFRSVUUpCisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5SeFRzYywgJnBLZXktPktleVJTQywgNik7CisJZWxzZQorCQlOZGlzWmVyb01lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuUnhUc2MsIDYpOworCisJLy8gNC4gSW5pdCBUeFRzYyB0byBvbmUgYmFzZWQgb24gV2lGaSBXUEEgc3BlY3MKKwlwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuVHhUc2NbMF0gPSAxOworCXBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5UeFRzY1sxXSA9IDA7CisJcEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LlR4VHNjWzJdID0gMDsKKwlwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuVHhUc2NbM10gPSAwOworCXBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5UeFRzY1s0XSA9IDA7CisJcEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LlR4VHNjWzVdID0gMDsKKworCUNpcGhlckFsZyA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5DaXBoZXJBbGc7CisKKwlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChBaWQgKiBIV19LRVlfRU5UUllfU0laRSk7CisJUlRVU0JNdWx0aVdyaXRlKHBBZCwgKFVTSE9SVCkgb2Zmc2V0LCBwS2V5LT5LZXlNYXRlcmlhbCwKKwkJCQkoKHBLZXktPktleUxlbmd0aCA9PSBMRU5fVEtJUF9LRVkpID8gMTYgOiAoVVNIT1JUKXBLZXktPktleUxlbmd0aCkpOworCisJb2Zmc2V0ID0gU0hBUkVEX0tFWV9UQUJMRV9CQVNFICsgKEtleUlkeCAqIEhXX0tFWV9FTlRSWV9TSVpFKTsKKwlSVFVTQk11bHRpV3JpdGUocEFkLCAoVVNIT1JUKSBvZmZzZXQsIHBLZXktPktleU1hdGVyaWFsLCAoVVNIT1JUKXBLZXktPktleUxlbmd0aCk7CisKKwlvZmZzZXQgPSBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFICsgKEFpZCAqIEhXX0lWRUlWX0VOVFJZX1NJWkUpOworCU5kaXNaZXJvTWVtb3J5KElWRUlWLCA4KTsKKworCS8vIElWL0VJVgorCWlmICgoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQKSB8fAorCQkoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykgfHwKKwkJKENpcGhlckFsZyA9PSBDSVBIRVJfQUVTKSkKKwl7CisJCUlWRUlWWzNdID0gMHgyMDsgLy8gRWl2IGJpdCBvbi4ga2V5aWQgYWx3YXlzIDAgZm9yIHBhaXJ3aXNlIGtleQorCX0KKwkvLyBkZWZhdWx0IGtleSBpZHggbmVlZHMgdG8gc2V0LgorCS8vIGluIFRLSVAvQUVTIEtleUlkeCA9IDAgLCBXRVAgS2V5SWR4IGlzIGRlZmF1bHQgdHgga2V5LgorCWVsc2UKKwl7CisJCUlWRUlWWzNdIHw9IChLZXlJZHg8PCA2KTsKKwl9CisJUlRVU0JNdWx0aVdyaXRlKHBBZCwgKFVTSE9SVCkgb2Zmc2V0LCBJVkVJViwgOCk7CisKKwkvLyBXQ0lEIEF0dHJpYnV0ZSBVREY6MywgQlNTSWR4OjMsIEFsZzozLCBLZXl0YWJsZToxPVBBSVJXSVNFIEtFWSwgQlNTSWR4IGlzIDAKKwlpZiAoKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkgfHwKKwkJKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUF9OT19NSUMpIHx8CisJCShDaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykpCisJeworCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKXxTSEFSRURLRVlUQUJMRTsKKwl9CisJZWxzZQorCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKXxTSEFSRURLRVlUQUJMRTsKKworCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKEFpZCogSFdfV0NJRF9BVFRSSV9TSVpFKTsKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7CisJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsICZWYWx1ZSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCU1NJRF9XQ0lEIDogb2Zmc2V0ID0gJXgsIFdDSURBdHRyaSA9ICVseFxuIiwKKwkJCW9mZnNldCwgV0NJREF0dHJpKSk7CisKKwkvLyBwQWRkcgorCS8vIEFkZCBCc3NpZCBtYWMgYWRkcmVzcyBhdCBsaW5rdXAuIG5vdCBoZXJlLiAgY2hlY2shCisJLypvZmZzZXQgPSBNQUNfV0NJRF9CQVNFICsgKEJTU0lEX1dDSUQgKiBIV19XQ0lEX0VOVFJZX1NJWkUpOworCSpmb3IgKGk9MDsgaTxNQUNfQUREUl9MRU47IGkrKykKKwl7CisJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0K2ksIHBLZXktPkJTU0lEW2ldKTsKKwl9CisJKi8KKworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFkZEJTU0lEYXNXQ0lERW50cnk6IEFsZz0lcywgS2V5TGVuZ3RoID0gJWRcbiIsCisJCQlDaXBoZXJOYW1lW0NpcGhlckFsZ10sIHBLZXktPktleUxlbmd0aCkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIktleSBbaWR4PSV4XSBbS2V5TGVuID0gJWRdXG4iLAorCQkJcEtleS0+S2V5SW5kZXgsIHBLZXktPktleUxlbmd0aCkpOworCWZvcihpPTA7IGk8cEtleS0+S2V5TGVuZ3RoOyBpKyspCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIiAleDoiLCBwS2V5LT5LZXlNYXRlcmlhbFtpXSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiCSBcbiIpKTsKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBHZXQgYSByZWNlaXZlZCBwYWNrZXQuCisKK0FyZ3VtZW50czoKKwlwQWQJCQkJCWRldmljZSBjb250cm9sIGJsb2NrCisJcFNhdmVSeEQJCQlyZWNlaXZlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24KKwkqcGJSZXNjaGVkdWxlCQluZWVkIHJlc2NoZWR1bGUgZmxhZworCSpwUnhQZW5kaW5nCQkJcGVuZGluZyByZWNlaXZlZCBwYWNrZXQgZmxhZworCitSZXR1cm4gVmFsdWU6CisgICAgdGhlIHJlY2lldmVkIHBhY2tldAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2RlZmluZSBSVDI4NzBfUlhETUFMRU5fRklFTERfU0laRQkJCTQKK1BORElTX1BBQ0tFVCBHZXRQYWNrZXRGcm9tUnhSaW5nKAorCUlOCQlQUlRNUF9BREFQVEVSCQlwQWQsCisJT1VUCQlQUlQyOFhYX1JYRF9TVFJVQwlwU2F2ZVJ4RCwKKwlPVVQJCUJPT0xFQU4JCQkJKnBiUmVzY2hlZHVsZSwKKwlJTiBPVVQJVUlOVDMyCQkJCSpwUnhQZW5kaW5nKQoreworCVBSWF9DT05URVhUCQlwUnhDb250ZXh0OworCVBORElTX1BBQ0tFVAlwU2tiOworCVBVQ0hBUgkJCXBEYXRhOworCVVMT05HCQkJVGhpc0ZyYW1lTGVuOworCVVMT05HCQkJUnhCdWZmZXJMZW5ndGg7CisJUFJYV0lfU1RSVUMJCXBSeFdJOworCisJcFJ4Q29udGV4dCA9ICZwQWQtPlJ4Q29udGV4dFtwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleF07CisJaWYgKChwUnhDb250ZXh0LT5SZWFkYWJsZSA9PSBGQUxTRSkgfHwgKHBSeENvbnRleHQtPkluVXNlID09IFRSVUUpKQorCQlyZXR1cm4gTlVMTDsKKworCVJ4QnVmZmVyTGVuZ3RoID0gcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0IC0gcEFkLT5SZWFkUG9zaXRpb247CisJaWYgKFJ4QnVmZmVyTGVuZ3RoIDwgKFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFICsgc2l6ZW9mKFJYV0lfU1RSVUMpICsgc2l6ZW9mKFJYSU5GT19TVFJVQykpKQorCXsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKworCXBEYXRhID0gJnBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyW3BBZC0+UmVhZFBvc2l0aW9uXTsgLyogNEtCICovCisJLy8gVGhlIFJYRE1BIGZpZWxkIGlzIDQgYnl0ZXMsIG5vdyBqdXN0IHVzZSB0aGUgZmlyc3QgMiBieXRlcy4gVGhlIExlbmd0aCBpbmNsdWRpbmcgdGhlIChSWFdJICsgTVNEVSArIFBhZGRpbmcpCisJVGhpc0ZyYW1lTGVuID0gKnBEYXRhICsgKCoocERhdGErMSk8PDgpOworICAgIGlmIChUaGlzRnJhbWVMZW4gPT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJJUklkeCglZCk6IFJYRE1BTGVuIGlzIHplcm8uWyVsZF0sIEJ1bGtJbkJ1ZkxlbiA9ICVsZClcbiIsCisJCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBUaGlzRnJhbWVMZW4sIHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCkpOworCQlnb3RvIGxhYmVsX251bGw7CisJfQorCWlmICgoVGhpc0ZyYW1lTGVuJjB4MykgIT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkJJUklkeCglZCk6IFJYRE1BTGVuIG5vdCBtdWx0aXBsZSBvZiA0LlslbGRdLCBCdWxrSW5CdWZMZW4gPSAlbGQpXG4iLAorCQkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCwgVGhpc0ZyYW1lTGVuLCBwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQpKTsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKworCWlmICgoVGhpc0ZyYW1lTGVuICsgOCk+IFJ4QnVmZmVyTGVuZ3RoKQkvLyA4IGZvciAoUlQyODcwX1JYRE1BTEVOX0ZJRUxEX1NJWkUgKyBzaXplb2YoUlhJTkZPX1NUUlVDKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQklSSWR4KCVkKTpGcmFtZUxlbigweCVseCkgb3V0cmFuZ2VzLiBCdWxrSW5MZW49MHglbHgsIHJlbWFpbmluZyBSeEJ1Zkxlbj0weCVseCwgUmVhZFBvcz0weCVseFxuIiwKKwkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBUaGlzRnJhbWVMZW4sIHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCwgUnhCdWZmZXJMZW5ndGgsIHBBZC0+UmVhZFBvc2l0aW9uKSk7CisKKwkJLy8gZXJyb3IgZnJhbWUuIGZpbmlzaCB0aGlzIGxvb3AKKwkJZ290byBsYWJlbF9udWxsOworCX0KKworCS8vIHNraXAgVVNCIGZyYW1lIGxlbmd0aCBmaWVsZAorCXBEYXRhICs9IFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFOworCXBSeFdJID0gKFBSWFdJX1NUUlVDKXBEYXRhOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QV0lFbmRpYW5DaGFuZ2UocERhdGEsIFRZUEVfUlhXSSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCWlmIChwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID4gVGhpc0ZyYW1lTGVuKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMoKTpwUnhXSU1QRFV0b3RhbEJ5dGVDb3VudCglZCkgbGFyZ2UgdGhhbiBSeERNQUxlbiglbGQpXG4iLAorCQkJCQkJCQkJX19GVU5DVElPTl9fLCBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50LCBUaGlzRnJhbWVMZW4pKTsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUFdJRW5kaWFuQ2hhbmdlKHBEYXRhLCBUWVBFX1JYV0kpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCS8vIGFsbG9jYXRlIGEgcnggcGFja2V0CisJcFNrYiA9IGRldl9hbGxvY19za2IoVGhpc0ZyYW1lTGVuKTsKKwlpZiAocFNrYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCIlcygpOkNhbm5vdCBBbGxvY2F0ZSBzayBidWZmZXIgZm9yIHRoaXMgQnVsay1JbiBidWZmZXIhXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKworCS8vIGNvcHkgdGhlIHJ4IHBhY2tldAorCW1lbWNweShza2JfcHV0KHBTa2IsIFRoaXNGcmFtZUxlbiksIHBEYXRhLCBUaGlzRnJhbWVMZW4pOworCVJUUEtUX1RPX09TUEtUKHBTa2IpLT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBCU1MwKTsKKwlSVE1QX1NFVF9QQUNLRVRfU09VUkNFKE9TUEtUX1RPX1JUUEtUKHBTa2IpLCBQS1RTUkNfTkRJUyk7CisKKwkvLyBjb3B5IFJ4RAorCSpwU2F2ZVJ4RCA9ICooUFJYSU5GT19TVFJVQykocERhdGEgKyBUaGlzRnJhbWVMZW4pOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBTYXZlUnhELCBUWVBFX1JYSU5GTyk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJLy8gdXBkYXRlIG5leHQgcGFja2V0IHJlYWQgcG9zaXRpb24uCisJcEFkLT5SZWFkUG9zaXRpb24gKz0gKFRoaXNGcmFtZUxlbiArIFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFICsgUlhJTkZPX1NJWkUpOwkvLyA4IGZvciAoUlQyODcwX1JYRE1BTEVOX0ZJRUxEX1NJWkUgKyBzaXplb2YoUlhJTkZPX1NUUlVDKSkKKworCXJldHVybiBwU2tiOworCitsYWJlbF9udWxsOgorCisJcmV0dXJuIE5VTEw7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBIYW5kbGUgcmVjZWl2ZWQgcGFja2V0cy4KKworQXJndW1lbnRzOgorCWRhdGEJCQkJLSBVUkIgaW5mb3JtYXRpb24gcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgcnhfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlwdXJiYl90IAkJCXBVcmI7CisJUFJYX0NPTlRFWFQJCQlwUnhDb250ZXh0OworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlOVFNUQVRVUwkJCVN0YXR1czsKKwl1bnNpZ25lZCBpbnQJCUlycUZsYWdzOworCisJcFVyYgkJPSAocHVyYmJfdClkYXRhOworCXBSeENvbnRleHQJPSAoUFJYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgCQk9IHBSeENvbnRleHQtPnBBZDsKKwlTdGF0dXMgPSBwVXJiLT5zdGF0dXM7CisKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCXBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCArPSBwVXJiLT5hY3R1YWxfbGVuZ3RoOworCS8vTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7CisJcEFkLT5QZW5kaW5nUngtLTsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworCQlwQWQtPkJ1bGtJbkNvbXBsZXRlKys7CisJCXBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb24gPSAwOworCQlpZiAocFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0KQkvLyBBcyBqYW4ncyBjb21tZW50LCBpdCBtYXkgYnVsay1pbiBzdWNjZXNzIGJ1dCBzaXplIGlzIHplcm8uCisJCXsKKwkJCXBSeENvbnRleHQtPlJlYWRhYmxlID0gVFJVRTsKKwkJCUlOQ19SSU5HX0lOREVYKHBBZC0+TmV4dFJ4QnVsa0luSW5kZXgsIFJYX1JJTkdfU0laRSk7CisJCX0KKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwl9CisJZWxzZQkgLy8gU1RBVFVTX09USEVSCisJeworCQlwQWQtPkJ1bGtJbkNvbXBsZXRlRmFpbCsrOworCQkvLyBTdGlsbCByZWFkIHRoaXMgcGFja2V0IGFsdGhvdWdoIGl0IG1heSBjb210YWluIHdyb25nIGJ5dGVzLgorCQlwUnhDb250ZXh0LT5SZWFkYWJsZSA9IEZBTFNFOworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCisJCS8vIFBhcnNpbmcgYWxsIHBhY2tldHMuIGJlY2F1c2UgYWZ0ZXIgcmVzZXQsIHRoZSBpbmRleCB3aWxsIHJlc2V0IHRvIGFsbCB6ZXJvLgorCQlpZiAoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJCWZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUIHwKKwkJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpCisJCXsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGsgSW4gRmFpbGVkLiBTdGF0dXM9JWQsIEJJSWR4PTB4JXgsIEJJUklkeD0weCV4LCBhY3R1YWxfbGVuZ3RoPSAweCV4XG4iLAorCQkJCQkJCVN0YXR1cywgcEFkLT5OZXh0UnhCdWxrSW5JbmRleCwgcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXgsIHBSeENvbnRleHQtPnBVcmItPmFjdHVhbF9sZW5ndGgpKTsKKworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUKTsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU4sIE5VTEwsIDApOworCQl9CisJfQorCisJQVNTRVJUKChwUnhDb250ZXh0LT5JblVzZSA9PSBwUnhDb250ZXh0LT5JUlBQZW5kaW5nKSk7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYgKEFURV9PTihwQWQpKQorICAgIHsKKwkJLy8gSWYgdGhlIGRyaXZlciBpcyBpbiBBVEUgbW9kZSBhbmQgUnggZnJhbWUgaXMgc2V0IGludG8gaGVyZS4KKwkJaWYgKHBBZC0+Q29udGluQnVsa0luID09IFRSVUUpCisJCXsKKwkJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwkJfQorCX0KKwllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKworCXJldHVybjsKKworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9tZ210X2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCVBSVE1QX0FEQVBURVIgCXBBZDsKKwlQVFhfQ09OVEVYVAkJcE1MTUVDb250ZXh0OworCWludAkJCQlpbmRleDsKKwlQTkRJU19QQUNLRVQJcFBhY2tldDsKKwlwdXJiYl90CQkJcFVyYjsKKwlOVFNUQVRVUwkJU3RhdHVzOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisKKworCXBVcmIJCQk9IChwdXJiYl90KWRhdGE7CisJcE1MTUVDb250ZXh0CT0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJCT0gcE1MTUVDb250ZXh0LT5wQWQ7CisJU3RhdHVzCQkJPSBwVXJiLT5zdGF0dXM7CisJaW5kZXggCQkJPSBwTUxNRUNvbnRleHQtPlNlbGZJZHg7CisKKwlBU1NFUlQoKHBBZC0+TWdtdFJpbmcuVHhEbWFJZHggPT0gaW5kZXgpKTsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7CisKKworCWlmIChTdGF0dXMgIT0gVVNCX1NUX05PRVJST1IpCisJeworCQkvL0J1bGstT3V0IGZhaWwgc3RhdHVzIGhhbmRsZQorCQlpZiAoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKSkKKwkJeworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGsgT3V0IE1MTUUgRmFpbGVkLCBTdGF0dXM9JWQhXG4iLCBTdGF0dXMpKTsKKwkJCS8vIFRPRE86IEhvdyB0byBoYW5kbGUgYWJvdXQgdGhlIE1MTUVCdWxrT3V0IGZhaWxlZCBpc3N1ZS4gTmVlZCB0byByZXNlbmQgdGhlIG1nbXQgcGt0PworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9IChNR01UUElQRUlEWCB8IEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKTsKKwkJfQorCX0KKworCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gRkFMU0U7CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW01HTVRQSVBFSURYXSwgSXJxRmxhZ3MpOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5NTE1FQnVsa091dExvY2ssIElycUZsYWdzKTsKKwkvLyBSZXNldCBNTE1FIGNvbnRleHQgZmxhZ3MKKwlwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwlwTUxNRUNvbnRleHQtPkluVXNlID0gRkFMU0U7CisJcE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPSBGQUxTRTsKKwlwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplID0gMDsKKworCXBQYWNrZXQgPSBwQWQtPk1nbXRSaW5nLkNlbGxbaW5kZXhdLnBOZGlzUGFja2V0OworCXBBZC0+TWdtdFJpbmcuQ2VsbFtpbmRleF0ucE5kaXNQYWNrZXQgPSBOVUxMOworCisJLy8gSW5jcmVhc2UgTWdtdFJpbmcgSW5kZXgKKwlJTkNfUklOR19JTkRFWChwQWQtPk1nbXRSaW5nLlR4RG1hSWR4LCBNR01UX1JJTkdfU0laRSk7CisJcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCsrOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5NTE1FQnVsa091dExvY2ssIElycUZsYWdzKTsKKworCS8vIE5vLW1hdHRlciBzdWNjZXNzIG9yIGZhaWwsIHdlIGZyZWUgdGhlIG1nbXQgcGFja2V0LgorCWlmIChwUGFja2V0KQorCQlSVE1QRnJlZU5kaXNQYWNrZXQocEFkLCBwUGFja2V0KTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSAmJgorCQkJKChwQWQtPmJ1bGtSZXNldFBpcGVpZCAmIEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKSA9PSBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRykpCisJCXsJLy8gRm9yIE1nbXQgQnVsay1PdXQgZmFpbGVkLCBpZ25vcmUgaXQgbm93LgorCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJeworCisJCQkvLyBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4KKwkJCS8vIFRoZSBwcm90ZWN0aW9vbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZQorCQkJaWYgKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPCBNR01UX1JJTkdfU0laRSAvKiBwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9PSBUUlVFICovKQorCQkJeworCQkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfTUxNRSk7CisJCQl9CisJCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCQkJfQorCQl9CisKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfaGNjYV9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJUEhUX1RYX0NPTlRFWFQJCXBIVFRYQ29udGV4dDsKKwlVQ0hBUgkJCQlCdWxrT3V0UGlwZUlkID0gNDsKKwlwdXJiYl90CQkJCXBVcmI7CisKKworCXBVcmIJCQk9IChwdXJiYl90KWRhdGE7CisJcEhUVFhDb250ZXh0CT0gKFBIVF9UWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkCQkJCT0gcEhUVFhDb250ZXh0LT5wQWQ7CisKKwlydDI4NzBfZGF0YW91dF9jb21wbGV0ZV90YXNrbGV0KCh1bnNpZ25lZCBsb25nKXBVcmIpOworCisJaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKQorCXsKKwkJLy8gZG8gbm90aGluZyBhbmQgcmV0dXJuIGRpcmVjdGx5LgorCX0KKwllbHNlCisJeworCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKQorCQl7CisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCwgTlVMTCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CXBIVFRYQ29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXTsKKwkJCWlmICgocEFkLT5UeFN3UXVldWVbQnVsa091dFBpcGVJZF0uTnVtYmVyID4gMCkgJiYKKwkJCQkvKigocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiArIDB4NjAwMCkpIHx8IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyAweDYwMDApKSAmJiAqLworCQkJCShwQWQtPkRlUXVldWVSdW5uaW5nW0J1bGtPdXRQaXBlSWRdID09IEZBTFNFKSAmJgorCQkJCShwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IEZBTFNFKSkKKwkJCXsKKwkJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBCdWxrT3V0UGlwZUlkLCBNQVhfVFhfUFJPQ0VTUyk7CisJCQl9CisKKwkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUw8PDQpOworCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCQl9CisJfQorCisKKwkJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzNfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZCA9IDM7CisJcHVyYmJfdAkJCQlwVXJiOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBIVFRYQ29udGV4dAk9IChQSFRfVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCQk9IHBIVFRYQ29udGV4dC0+cEFkOworCisJcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCgodW5zaWduZWQgbG9uZylwVXJiKTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkKKwkJeworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJewlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCisJCQkJLyooKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gKyAweDYwMDApKSB8fCAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMHg2MDAwKSkgJiYgKi8KKwkJCQkocEFkLT5EZVF1ZXVlUnVubmluZ1tCdWxrT3V0UGlwZUlkXSA9PSBGQUxTRSkgJiYKKwkJCQkocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBGQUxTRSkpCisJCQl7CisJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgQnVsa091dFBpcGVJZCwgTUFYX1RYX1BST0NFU1MpOworCQkJfQorCisJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMPDwzKTsKKwkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKwkJfQorCX0KKworCisJCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfYWMyX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCVVDSEFSCQkJCUJ1bGtPdXRQaXBlSWQgPSAyOworCXB1cmJiX3QJCQkJcFVyYjsKKworCisJcFVyYgkJCT0gKHB1cmJiX3QpZGF0YTsKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKworCXJ0Mjg3MF9kYXRhb3V0X2NvbXBsZXRlX3Rhc2tsZXQoKHVuc2lnbmVkIGxvbmcpcFVyYik7CisKKwlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpCisJeworCQkvLyBkbyBub3RoaW5nIGFuZCByZXR1cm4gZGlyZWN0bHkuCisJfQorCWVsc2UKKwl7CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpCisJCXsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCQllbHNlCisJCXsJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCQkJaWYgKChwQWQtPlR4U3dRdWV1ZVtCdWxrT3V0UGlwZUlkXS5OdW1iZXIgPiAwKSAmJgorCQkJCS8qKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uICsgMHg2MDAwKSkgfHwgKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA+IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIDB4NjAwMCkpICYmICovCisJCQkJKHBBZC0+RGVRdWV1ZVJ1bm5pbmdbQnVsa091dFBpcGVJZF0gPT0gRkFMU0UpICYmCisJCQkJKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0gRkFMU0UpKQorCQkJeworCQkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIEJ1bGtPdXRQaXBlSWQsIE1BWF9UWF9QUk9DRVNTKTsKKwkJCX0KKworCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTDw8Mik7CisJCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisJCX0KKwl9CisKKwkJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzFfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZCA9IDE7CisJcHVyYmJfdAkJCQlwVXJiOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBIVFRYQ29udGV4dAk9IChQSFRfVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCQk9IHBIVFRYQ29udGV4dC0+cEFkOworCisJcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCgodW5zaWduZWQgbG9uZylwVXJiKTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkKKwkJeworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJewlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCisJCQkJLyooKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gKyAweDYwMDApKSB8fCAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMHg2MDAwKSkgJiYgKi8KKwkJCQkocEFkLT5EZVF1ZXVlUnVubmluZ1tCdWxrT3V0UGlwZUlkXSA9PSBGQUxTRSkgJiYKKwkJCQkocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBGQUxTRSkpCisJCQl7CisJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgQnVsa091dFBpcGVJZCwgTUFYX1RYX1BST0NFU1MpOworCQkJfQorCisJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMPDwxKTsKKwkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKwkJfQorCX0KKworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzBfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZCA9IDA7CisJcHVyYmJfdAkJCQlwVXJiOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBIVFRYQ29udGV4dAk9IChQSFRfVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCQk9IHBIVFRYQ29udGV4dC0+cEFkOworCisJcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCgodW5zaWduZWQgbG9uZylwVXJiKTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkKKwkJeworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJewlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCisJCQkJLyogICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiArIDB4NjAwMCkpIHx8IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyAweDYwMDApKSAmJiAqLworCQkJCShwQWQtPkRlUXVldWVSdW5uaW5nW0J1bGtPdXRQaXBlSWRdID09IEZBTFNFKSAmJgorCQkJCShwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IEZBTFNFKSkKKwkJCXsKKwkJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBCdWxrT3V0UGlwZUlkLCBNQVhfVFhfUFJPQ0VTUyk7CisJCQl9CisKKwkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwpOworCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCQl9CisJfQorCisKKwlyZXR1cm47CisKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfbnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCXBBZDsKKwlQVFhfQ09OVEVYVAkJcE51bGxDb250ZXh0OworCXB1cmJiX3QJCQlwVXJiOworCU5UU1RBVFVTCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwlpcnFGbGFnOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBOdWxsQ29udGV4dAk9IChQVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZCAJCQk9IHBOdWxsQ29udGV4dC0+cEFkOworCVN0YXR1cyAJCQk9IHBVcmItPnN0YXR1czsKKworCS8vIFJlc2V0IE51bGwgZnJhbWUgY29udGV4dCBmbGFncworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOworCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyAJPSBGQUxTRTsKKwlwTnVsbENvbnRleHQtPkluVXNlIAkJPSBGQUxTRTsKKwlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gRkFMU0U7CisJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFswXSA9IDA7CisKKwlpZiAoU3RhdHVzID09IFVTQl9TVF9OT0VSUk9SKQorCXsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKworCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCX0KKwllbHNlCS8vIFNUQVRVU19PVEhFUgorCXsKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrIE91dCBOdWxsIEZyYW1lIEZhaWxlZCwgUmVhc29uQ29kZT0lZCFcbiIsIFN0YXR1cykpOworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9IChNR01UUElQRUlEWCB8IEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKTsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgaXJxRmxhZyk7CisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCwgTlVMTCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOworCQl9CisJfQorCisJLy8gQWx3YXlzIGNhbGwgQnVsayByb3V0aW5lLCBldmVuIHJlc2V0IGJ1bGsuCisJLy8gVGhlIHByb3RlY3Rpb29uIG9mIHJlc3QgYnVsayBzaG91bGQgYmUgaW4gQnVsa091dCByb3V0aW5lCisJUlRVU0JLaWNrQnVsa091dChwQWQpOworCit9CisKKworc3RhdGljIHZvaWQgcnQyODcwX3J0c19mcmFtZV9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCXBBZDsKKwlQVFhfQ09OVEVYVAkJcFJUU0NvbnRleHQ7CisJcHVyYmJfdAkJCXBVcmI7CisJTlRTVEFUVVMJCVN0YXR1czsKKwl1bnNpZ25lZCBsb25nCWlycUZsYWc7CisKKworCXBVcmIJCT0gKHB1cmJiX3QpZGF0YTsKKwlwUlRTQ29udGV4dAk9IChQVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCT0gcFJUU0NvbnRleHQtPnBBZDsKKwlTdGF0dXMJCT0gcFVyYi0+c3RhdHVzOworCisJLy8gUmVzZXQgUlRTIGZyYW1lIGNvbnRleHQgZmxhZ3MKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKwlwUlRTQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCXBSVFNDb250ZXh0LT5JblVzZQkJPSBGQUxTRTsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOworCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCX0KKwllbHNlCS8vIFNUQVRVU19PVEhFUgorCXsKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrIE91dCBSVFMgRnJhbWUgRmFpbGVkXG4iKSk7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCXBBZC0+YnVsa1Jlc2V0UGlwZWlkID0gKE1HTVRQSVBFSURYIHwgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpOworCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgaXJxRmxhZyk7CisJCX0KKwl9CisKKwlSVE1QX1NFTV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BSVFNDb250ZXh0LT5CdWxrT3V0UGlwZUlkXSk7CisJcEFkLT5CdWxrT3V0UGVuZGluZ1twUlRTQ29udGV4dC0+QnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcFJUU0NvbnRleHQtPkJ1bGtPdXRQaXBlSWRdKTsKKworCS8vIEFsd2F5cyBjYWxsIEJ1bGsgcm91dGluZSwgZXZlbiByZXNldCBidWxrLgorCS8vIFRoZSBwcm90ZWN0aW9vbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZQorCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJUFRYX0NPTlRFWFQJCXBQc1BvbGxDb250ZXh0OworCXB1cmJiX3QJCQlwVXJiOworCU5UU1RBVFVTCQlTdGF0dXM7CisKKworCXBVcmIJCQk9IChwdXJiYl90KWRhdGE7CisJcFBzUG9sbENvbnRleHQJPSAoUFRYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwUHNQb2xsQ29udGV4dC0+cEFkOworCVN0YXR1cwkJCT0gcFVyYi0+c3RhdHVzOworCisJLy8gUmVzZXQgUHNQb2xsIGNvbnRleHQgZmxhZ3MKKwlwUHNQb2xsQ29udGV4dC0+SVJQUGVuZGluZwk9IEZBTFNFOworCXBQc1BvbGxDb250ZXh0LT5JblVzZQkJPSBGQUxTRTsKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMDsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCX0KKwllbHNlIC8vIFNUQVRVU19PVEhFUgorCXsKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrIE91dCBQU1BvbGwgRmFpbGVkXG4iKSk7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCXBBZC0+YnVsa1Jlc2V0UGlwZWlkID0gKE1HTVRQSVBFSURYIHwgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpOworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJfQorCisJUlRNUF9TRU1fTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSk7CisJcEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9IEZBTFNFOworCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSk7CisKKwkvLyBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4KKwkvLyBUaGUgcHJvdGVjdGlvb24gb2YgcmVzdCBidWxrIHNob3VsZCBiZSBpbiBCdWxrT3V0IHJvdXRpbmUKKwlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfZGF0YW91dF9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJcHVyYmJfdAkJCQlwVXJiOworCVBPU19DT09LSUUJCQlwT2JqOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZDsKKwlOVFNUQVRVUwkJCVN0YXR1czsKKwl1bnNpZ25lZCBsb25nCQlJcnFGbGFnczsKKworCisJcFVyYgkJCT0gKHB1cmJiX3QpZGF0YTsKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKwlwT2JqIAkJCT0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCVN0YXR1cwkJCT0gcFVyYi0+c3RhdHVzOworCisJLy8gU3RvcmUgQnVsa091dCBQaXBlSWQKKwlCdWxrT3V0UGlwZUlkID0gcEhUVFhDb250ZXh0LT5CdWxrT3V0UGlwZUlkOworCXBBZC0+QnVsa091dERhdGFPbmVTZWNDb3VudCsrOworCisJLy9EQkdQUklOVChSVF9ERUJVR19MT1VELCAoIkRvbmUtQiglZCk6ST0weCVseCwgQ1dQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkIVxuIiwgQnVsa091dFBpcGVJZCwgaW5faW50ZXJydXB0KCksIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwKKwkvLwkJcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCkpOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMDsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworCQlwQWQtPkJ1bGtPdXRDb21wbGV0ZSsrOworCisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJCXBBZC0+Q291bnRlcnM4MDIzLkdvb2RUcmFuc21pdHMrKzsKKwkJLy9SVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQlGUkVFX0hUVFhfUklORyhwQWQsIEJ1bGtPdXRQaXBlSWQsIHBIVFRYQ29udGV4dCk7CisJCS8vUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisKKwl9CisJZWxzZQkvLyBTVEFUVVNfT1RIRVIKKwl7CisJCVBVQ0hBUglwQnVmOworCisJCXBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIrKzsKKworCQlwQnVmID0gJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W3BIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbl07CisKKwkJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgfAorCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpOworCQkJcEFkLT5idWxrUmVzZXRQaXBlaWQgPSBCdWxrT3V0UGlwZUlkOworCQkJcEFkLT5idWxrUmVzZXRSZXFbQnVsa091dFBpcGVJZF0gPSBwQWQtPkJ1bGtPdXRSZXE7CisJCX0KKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGtPdXREYXRhUGFja2V0IGZhaWxlZDogUmVhc29uQ29kZT0lZCFcbiIsIFN0YXR1cykpOworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiXHQ+PkJ1bGtPdXQgUmVxPTB4JWx4LCBDb21wbGV0ZT0weCVseCwgT3RoZXI9MHglbHhcbiIsIHBBZC0+QnVsa091dFJlcSwgcEFkLT5CdWxrT3V0Q29tcGxldGUsIHBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIpKTsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlx0Pj5CdWxrT3V0IEhlYWRlcjoleCAleCAleCAleCAleCAleCAleCAleFxuIiwgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSwgcEJ1ZlszXSwgcEJ1Zls0XSwgcEJ1Zls1XSwgcEJ1Zls2XSwgcEJ1Zls3XSkpOworCQkvL0RCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCI+PkJ1bGtPdXRDb21wbGV0ZUNhbmNlbD0weCV4LCBCdWxrT3V0Q29tcGxldGVPdGhlcj0weCV4XG4iLCBwQWQtPkJ1bGtPdXRDb21wbGV0ZUNhbmNlbCwgcEFkLT5CdWxrT3V0Q29tcGxldGVPdGhlcikpOworCisJfQorCisJLy8KKwkvLyBiSW5Vc2UgPSBUUlVFLCBtZWFucyBzb21lIHByb2Nlc3MgYXJlIGZpbGxpbmcgVFggZGF0YSwgYWZ0ZXIgdGhhdCBtdXN0IHR1cm4gb24gYldhaXRpbmdCdWxrT3V0CisJLy8gYldhaXRpbmdCdWxrT3V0ID0gVFJVRSwgbWVhbnMgdGhlIFRYIGRhdGEgYXJlIHdhaXRpbmcgZm9yIGJ1bGsgb3V0LgorCS8vCisJLy9SVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCWlmICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiAhPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pICYmCisJCShwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uICE9IChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24rOCkpICYmCisJCSFSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHIDw8IEJ1bGtPdXRQaXBlSWQpKSkKKwl7CisJCS8vIEluZGljYXRlIFRoZXJlIGlzIGRhdGEgYXZhbGlhYmxlCisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IEJ1bGtPdXRQaXBlSWQpKTsKKwl9CisJLy9SVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwkvLyBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4KKwkvLyBUaGUgcHJvdGVjdGlvbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZQorCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKK30KKworLyogRW5kIG9mIDI4NzBfcnRtcF9pbml0LmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2FjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vYWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhZTUzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2FjdGlvbi5jCkBAIC0wLDAgKzEsMTAzOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKwlhY3Rpb24uYworCisgICAgQWJzdHJhY3Q6CisgICAgSGFuZGxlIGFzc29jaWF0aW9uIHJlbGF0ZWQgcmVxdWVzdHMgZWl0aGVyIGZyb20gV1NUQSBvciBmcm9tIGxvY2FsIE1MTUUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSmFuIExlZQkJMjAwNgkgIAljcmVhdGVkIGZvciBydDI4NjAKKyAqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vYWN0aW9uLmgiCisKKworc3RhdGljIFZPSUQgUmVzZXJ2ZWRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBhc3NvY2lhdGlvbiBzdGF0ZSBtYWNoaW5lIGluaXQsIGluY2x1ZGluZyBzdGF0ZSB0cmFuc2l0aW9uIGFuZCB0aW1lciBpbml0CisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgUyAtIHBvaW50ZXIgdG8gdGhlIGFzc29jaWF0aW9uIHN0YXRlIG1hY2hpbmUKKyAgICBOb3RlOgorICAgICAgICBUaGUgc3RhdGUgbWFjaGluZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTT0NfSURMRQorICAgICAgICBNVDJfTUxNRV9ESVNBU1NPQ19SRVEgICAgbWxtZV9kaXNhc3NvY19yZXFfYWN0aW9uCisgICAgICAgIE1UMl9QRUVSX0RJU0FTU09DX1JFUSAgICBwZWVyX2Rpc2Fzc29jX2FjdGlvbgorICAgICAgICBNVDJfUEVFUl9BU1NPQ19SRVEgICAgICAgZHJvcAorICAgICAgICBNVDJfUEVFUl9SRUFTU09DX1JFUSAgICAgZHJvcAorICAgICAgICBNVDJfQ0xTM0VSUiAgICAgICAgICAgICAgY2xzM2Vycl9hY3Rpb24KKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFjdGlvblN0YXRlTWFjaGluZUluaXQoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKQoreworCVN0YXRlTWFjaGluZUluaXQoUywgKFNUQVRFX01BQ0hJTkVfRlVOQyAqKVRyYW5zLCBNQVhfQUNUX1NUQVRFLCBNQVhfQUNUX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBBQ1RfSURMRSwgQUNUX01BQ0hJTkVfQkFTRSk7CisKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX1NQRUNUUlVNX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlclNwZWN0cnVtQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX1FPU19DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJRT1NBY3Rpb24pOworCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9ETFNfQ0FURSwgKFNUQVRFX01BQ0hJTkVfRlVOQylSZXNlcnZlZEFjdGlvbik7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfRExTX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRMU0FjdGlvbik7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX0JBX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckJBQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX0hUX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckhUQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX0FERF9CQV9DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVBRERCQUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfTUxNRV9PUklfREVMQkFfQ0FURSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lREVMQkFBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX01MTUVfUkVDX0RFTEJBX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZURFTEJBQWN0aW9uKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfUFVCTElDX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlclB1YmxpY0FjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9STV9DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJSTUFjdGlvbik7CisKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX1FPU19DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVRT1NBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX01MTUVfRExTX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZURMU0FjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfQUNUX0lOVkFMSUQsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZUludmFsaWRBY3Rpb24pOworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIE1sbWVBRERCQUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCisKK3sKKwlNTE1FX0FEREJBX1JFUV9TVFJVQ1QgKnBJbmZvOworCVVDSEFSICAgICAgICAgICBBZGRyWzZdOworCVBVQ0hBUiAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTICAgICBOU3RhdHVzOworCVVMT05HCQlJZHg7CisJRlJBTUVfQUREQkFfUkVRICBGcmFtZTsKKwlVTE9ORwkJRnJhbWVMZW47CisJQkFfT1JJX0VOVFJZCQkJKnBCQUVudHJ5ID0gTlVMTDsKKworCXBJbmZvID0gKE1MTUVfQUREQkFfUkVRX1NUUlVDVCAqKUVsZW0tPk1zZzsKKwlOZGlzWmVyb01lbW9yeSgmRnJhbWUsIHNpemVvZihGUkFNRV9BRERCQV9SRVEpKTsKKworCWlmKE1sbWVBZGRCQVJlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyKSkKKwl7CisJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKwkJLy8gMS4gZmluZCBlbnRyeQorCQlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W3BJbmZvLT5XY2lkXS5CQU9yaVdjaWRBcnJheVtwSW5mby0+VElEXTsKKwkJaWYgKElkeCA9PSAwKQorCQl7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGNhbid0IGZpbmQgQkFPcmlFbnRyeSBcbiIpKTsKKwkJCXJldHVybjsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbSWR4XTsKKwkJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCWlmIChBREhPQ19PTihwQWQpKQorCQkJCUFjdEhlYWRlckluaXQocEFkLCAmRnJhbWUuSGRyLCBwSW5mby0+cEFkZHIsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCWVsc2UKKwkJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBJbmZvLT5wQWRkcik7CisKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCUZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfQkE7CisJCUZyYW1lLkFjdGlvbiA9IEFEREJBX1JFUTsKKwkJRnJhbWUuQmFQYXJtLkFNU0RVU3VwcG9ydGVkID0gMDsKKwkJRnJhbWUuQmFQYXJtLkJBUG9saWN5ID0gSU1NRURfQkE7CisJCUZyYW1lLkJhUGFybS5USUQgPSBwSW5mby0+VElEOworCQlGcmFtZS5CYVBhcm0uQnVmU2l6ZSA9IHBJbmZvLT5CYUJ1ZlNpemU7CisJCUZyYW1lLlRva2VuID0gcEluZm8tPlRva2VuOworCQlGcmFtZS5UaW1lT3V0VmFsdWUgPSBwSW5mby0+VGltZU91dFZhbHVlOworCQlGcmFtZS5CYVN0YXJ0U2VxLmZpZWxkLkZyYWdOdW0gPSAwOworCQlGcmFtZS5CYVN0YXJ0U2VxLmZpZWxkLlN0YXJ0U2VxID0gcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uVHhTZXFbcEluZm8tPlRJRF07CisKKwkJKihVU0hPUlQgKikoJkZyYW1lLkJhUGFybSkgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmRnJhbWUuQmFQYXJtKSk7CisJCUZyYW1lLlRpbWVPdXRWYWx1ZSA9IGNwdTJsZTE2KEZyYW1lLlRpbWVPdXRWYWx1ZSk7CisJCUZyYW1lLkJhU3RhcnRTZXEud29yZCA9IGNwdTJsZTE2KEZyYW1lLkJhU3RhcnRTZXEud29yZCk7CisKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCSAgICZGcmFtZUxlbiwKKwkJICAgICAgICAgICAgICBzaXplb2YoRlJBTUVfQUREQkFfUkVRKSwgJkZyYW1lLAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJLy9NaW5pcG9ydERhdGFNTVJlcXVlc3QocEFkLCBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5W3BJbmZvLT5USURdLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQkEgLSBTZW5kIEFEREJBIHJlcXVlc3QuIFN0YXJ0U2VxID0gJXgsICBGcmFtZUxlbiA9ICVsZC4gQnVmU2l6ZSA9ICVkXG4iLCBGcmFtZS5CYVN0YXJ0U2VxLmZpZWxkLlN0YXJ0U2VxLCBGcmFtZUxlbiwgRnJhbWUuQmFQYXJtLkJ1ZlNpemUpKTsKKyAgICB9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgc2VuZCBERUxCQSBhbmQgZGVsZXRlIEJhRW50cnkgaWYgYW55CisgICAgUGFyYW1ldHJzOgorICAgICAgICBFbGVtIC0gTUxNRSBtZXNzYWdlIE1MTUVfREVMQkFfUkVRX1NUUlVDVAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVERUxCQUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJTUxNRV9ERUxCQV9SRVFfU1RSVUNUICpwSW5mbzsKKwlQVUNIQVIgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlQVUNIQVIJCSAgIHBPdXRCdWZmZXIyID0gTlVMTDsKKwlORElTX1NUQVRVUyAgICAgTlN0YXR1czsKKwlVTE9ORwkJSWR4OworCUZSQU1FX0RFTEJBX1JFUSAgRnJhbWU7CisJVUxPTkcJCUZyYW1lTGVuOworCUZSQU1FX0JBUglGcmFtZUJhcjsKKworCXBJbmZvID0gKE1MTUVfREVMQkFfUkVRX1NUUlVDVCAqKUVsZW0tPk1zZzsKKwkvLyBtdXN0IHNlbmQgYmFjayBERUxCQQorCU5kaXNaZXJvTWVtb3J5KCZGcmFtZSwgc2l6ZW9mKEZSQU1FX0RFTEJBX1JFUSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBNbG1lREVMQkFBY3Rpb24oKSwgSW5pdGlhdG9yKCVkKSBcbiIsIHBJbmZvLT5Jbml0aWF0b3IpKTsKKworCWlmKE1sbWVEZWxCQVJlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKSkKKwl7CisJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJCQSAtIE1sbWVERUxCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgMS4gXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKworCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwkJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQkEgLSBNbG1lREVMQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIDIuIFxuIikpOworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gU0VORCBCQVIgKFNlbmQgQkFSIHRvIHJlZnJlc2ggcGVlciByZW9yZGVyaW5nIGJ1ZmZlci4pCisJCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLkJBT3JpV2NpZEFycmF5W3BJbmZvLT5USURdOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlCYXJIZWFkZXJJbml0KHBBZCwgJkZyYW1lQmFyLCBwQWQtPk1hY1RhYi5Db250ZW50W3BJbmZvLT5XY2lkXS5BZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5GcmFnTnVtID0gMDsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID0gcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uVHhTZXFbcEluZm8tPlRJRF07IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQlGcmFtZUJhci5CYXJDb250cm9sLlRJRCA9IHBJbmZvLT5USUQ7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQlGcmFtZUJhci5CYXJDb250cm9sLkFDS1BvbGljeSA9IElNTUVEX0JBOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4KKwkJRnJhbWVCYXIuQmFyQ29udHJvbC5Db21wcmVzc2VkID0gMTsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCUZyYW1lQmFyLkJhckNvbnRyb2wuTVRJRCA9IDA7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIyLAkJCQkmRnJhbWVMZW4sCisJCQkJCSAgc2l6ZW9mKEZSQU1FX0JBUiksCSAgJkZyYW1lQmFyLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcjIpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJBIC0gTWxtZURFTEJBQWN0aW9uKCkgLiBTZW5kIEJBUiB0byByZWZyZXNoIHBlZXIgcmVvcmRlcmluZyBidWZmZXIgXG4iKSk7CisKKwkJLy8gU0VORCBERUxCQSBGUkFNRQorCQlGcmFtZUxlbiA9IDA7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCWlmIChBREhPQ19PTihwQWQpKQorCQkJCUFjdEhlYWRlckluaXQocEFkLCAmRnJhbWUuSGRyLCBwQWQtPk1hY1RhYi5Db250ZW50W3BJbmZvLT5XY2lkXS5BZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQllbHNlCisJCQkJQWN0SGVhZGVySW5pdChwQWQsICZGcmFtZS5IZHIsICBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uQWRkcik7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJRnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9CQTsKKwkJRnJhbWUuQWN0aW9uID0gREVMQkE7CisJCUZyYW1lLkRlbGJhUGFybS5Jbml0aWF0b3IgPSBwSW5mby0+SW5pdGlhdG9yOworCQlGcmFtZS5EZWxiYVBhcm0uVElEID0gcEluZm8tPlRJRDsKKwkJRnJhbWUuUmVhc29uQ29kZSA9IDM5OyAvLyBUaW1lIE91dAorCQkqKFVTSE9SVCAqKSgmRnJhbWUuRGVsYmFQYXJtKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZGcmFtZS5EZWxiYVBhcm0pKTsKKwkJRnJhbWUuUmVhc29uQ29kZSA9IGNwdTJsZTE2KEZyYW1lLlJlYXNvbkNvZGUpOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkgICAgICAgICAgICAgIHNpemVvZihGUkFNRV9ERUxCQV9SRVEpLCAgICAmRnJhbWUsCisJCSAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCQSAtIE1sbWVERUxCQUFjdGlvbigpIC4gMyBERUxCQSBzZW50LiBJbml0aWF0b3IoJWQpXG4iLCBwSW5mby0+SW5pdGlhdG9yKSk7CisgICAgCX0KK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBNbG1lUU9TQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKK30KKworVk9JRCBNbG1lRExTQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKK30KKworVk9JRCBNbG1lSW52YWxpZEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJLy9QVUNIQVIJCSAgIHBPdXRCdWZmZXIgPSBOVUxMOworCS8vUmV0dXJuIHRoZSByZWNlaXZpbmcgZnJhbWUgZXhjZXB0IHRoZSBNU0Igb2YgY2F0ZWdvcnkgZmlsZWQgc2V0IHRvIDEuICA3LjMuMS4xMQorfQorCitWT0lEIFBlZXJRT1NBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworfQorCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitWT0lEIFBlZXJETFNBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSCUFjdGlvbiA9IEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzFdOworCisJc3dpdGNoKEFjdGlvbikKKwl7CisJCWNhc2UgQUNUSU9OX0RMU19SRVFVRVNUOgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCVBlZXJEbHNSZXFBY3Rpb24ocEFkLCBFbGVtKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCWJyZWFrOworCisJCWNhc2UgQUNUSU9OX0RMU19SRVNQT05TRToKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlQZWVyRGxzUnNwQWN0aW9uKHBBZCwgRWxlbSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlicmVhazsKKworCQljYXNlIEFDVElPTl9ETFNfVEVBUkRPV046CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJUGVlckRsc1RlYXJEb3duQWN0aW9uKHBBZCwgRWxlbSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlicmVhazsKKwl9Cit9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgUGVlckJBQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUglBY3Rpb24gPSBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsxXTsKKworCXN3aXRjaChBY3Rpb24pCisJeworCQljYXNlIEFEREJBX1JFUToKKwkJCVBlZXJBZGRCQVJlcUFjdGlvbihwQWQsRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBBRERCQV9SRVNQOgorCQkJUGVlckFkZEJBUnNwQWN0aW9uKHBBZCxFbGVtKTsKKwkJCWJyZWFrOworCQljYXNlIERFTEJBOgorCQkJUGVlckRlbEJBQWN0aW9uKHBBZCxFbGVtKTsKKwkJCWJyZWFrOworCX0KK30KKworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEIFN0YVB1YmxpY0FjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBCc3MyMDQwQ29leGlzdCkKK3sKKwlCU1NfMjA0MF9DT0VYSVNUX0lFCQlCc3NDb2V4aXN0OworCU1MTUVfU0NBTl9SRVFfU1RSVUNUCQkJU2NhblJlcTsKKworCUJzc0NvZXhpc3Qud29yZCA9IEJzczIwNDBDb2V4aXN0OworCS8vIEFQIGFza3MgU3RhdGlvbiB0byByZXR1cm4gYSAyMC80MCBCU1MgQ29leGlzdGVuY2UgbWdtdCBmcmFtZS4gIFNvIHdlIGZpcnN0IHN0YXJ0cyBhIHNjYW4sIHRoZW4gc2VuZCBiYWNrIDIwLzQwIEJTUyBDb2V4aXN0ZW5jZSBtZ210IGZyYW1lCisJaWYgKChCc3NDb2V4aXN0LmZpZWxkLkluZm9SZXEgPT0gMSkgJiYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0NBTl8yMDQwKSkpCisJeworCQkvLyBDbGVhciByZWNvcmQgZmlyc3QuICBBZnRlciBzY2FuICwgd2lsbCB1cGRhdGUgdGhvc2UgYml0IGFuZCBzZW5kIGJhY2sgdG8gdHJhbnNtaXRlci4KKwkJcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAuZmllbGQuSW5mb1JlcSA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkludG9sZXJhbnQ0MCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkJTUzIwV2lkdGhSZXEgPSAwOworCQkvLyBGaWxsIG91dCBzdHVmZiBmb3Igc2NhbiByZXF1ZXN0CisJCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBaZXJvU3NpZCwgMCwgQlNTX0FOWSwgU0NBTl8yMDQwX0JTU19DT0VYSVNUKTsKKwkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLCBzaXplb2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKKwl9Cit9CisKKworLyoKK0Rlc2NyaXB0aW9uIDogQnVpbGQgSW50b2xlcmFudCBDaGFubmVsIFJlcnBvdCBmcm9tIFRyaWdnZXIgZXZlbnQgdGFibGUuCityZXR1cm4gOiBob3cgbWFueSBieXRlcyBjb3BpZWQuCisqLworVUxPTkcgQnVpbGRJbnRvbGVyYW50Q2hhbm5lbFJlcCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBQVUNIQVIgIHBEZXN0KQoreworCVVMT05HCQkJRnJhbWVMZW4gPSAwOworCVVMT05HCQkJUmVhZE9mZnNldCA9IDA7CisJVUNIQVIJCQlpOworCVVDSEFSCQkJTGFzdFJlZ0NsYXNzID0gMHhmZjsKKwlQVUNIQVIJCQlwTGVuOworCisJZm9yICggaSA9IDA7aSA8IE1BWF9UUklHR0VSX0VWRU5UO2krKykKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLmJWYWxpZCA9PSBUUlVFKQorCQl7CisJCQlpZiAocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5SZWdDbGFzcyA9PSBMYXN0UmVnQ2xhc3MpCisJCQl7CisJCQkJKihwRGVzdCArIFJlYWRPZmZzZXQpID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uQ2hhbm5lbDsKKwkJCQkqcExlbisrOworCQkJCVJlYWRPZmZzZXQrKzsKKwkJCQlGcmFtZUxlbisrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSoocERlc3QgKyBSZWFkT2Zmc2V0KSA9IElFXzIwNDBfQlNTX0lOVE9MRVJBTlRfUkVQT1JUOyAgLy8gSUUKKwkJCQkqKHBEZXN0ICsgUmVhZE9mZnNldCArIDEpID0gMjsJLy8gTGVuID0gUmVnQ2xhc3MgYnl0ZSArIGNoYW5uZWwgYnl0ZS4KKwkJCQlwTGVuID0gcERlc3QgKyBSZWFkT2Zmc2V0ICsgMTsKKwkJCQlMYXN0UmVnQ2xhc3MgPSBwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLlJlZ0NsYXNzOworCQkJCSoocERlc3QgKyBSZWFkT2Zmc2V0ICsgMikgPSBMYXN0UmVnQ2xhc3M7CS8vIExlbiA9IFJlZ0NsYXNzIGJ5dGUgKyBjaGFubmVsIGJ5dGUuCisJCQkJKihwRGVzdCArIFJlYWRPZmZzZXQgKyAzKSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLkNoYW5uZWw7CisJCQkJRnJhbWVMZW4gKz0gNDsKKwkJCQlSZWFkT2Zmc2V0ICs9IDQ7CisJCQl9CisKKwkJfQorCX0KKwlyZXR1cm4gRnJhbWVMZW47Cit9CisKKworLyoKK0Rlc2NyaXB0aW9uIDogU2VuZCAyMC80MCBCU1MgQ29leGlzdGVuY2UgQWN0aW9uIGZyYW1lIElmIG9uZSB0cmlnZ2VyIGV2ZW50IGlzIHRyaWdnZXJlZC4KKyovCitWT0lEIFNlbmQyMDQwQ29leGlzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTglCT09MRUFOCWJBZGRJbnRvbGVyYW50Q2hhKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTIAlOU3RhdHVzOworCUZSQU1FX0FDVElPTl9IRFIJRnJhbWU7CisJVUxPTkcJCQlGcmFtZUxlbjsKKwlVTE9ORwkJCUludG9sZXJhbnRDaGFSZXBMZW47CisKKwlJbnRvbGVyYW50Q2hhUmVwTGVuID0gMDsKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQUNUIC0gU2VuZDIwNDBDb2V4aXN0QWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJcmV0dXJuOworCX0KKwlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5BZGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJRnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9QVUJMSUM7CisJRnJhbWUuQWN0aW9uID0gQUNUSU9OX0JTU18yMDQwX0NPRVhJU1Q7CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJICBzaXplb2YoRlJBTUVfQUNUSU9OX0hEUiksCSAgJkZyYW1lLAorCQkJCSAgRU5EX09GX0FSR1MpOworCisJKihwT3V0QnVmZmVyICsgRnJhbWVMZW4pID0gcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAud29yZDsKKwlGcmFtZUxlbisrOworCisJaWYgKGJBZGRJbnRvbGVyYW50Q2hhID09IFRSVUUpCisJCUludG9sZXJhbnRDaGFSZXBMZW4gPSBCdWlsZEludG9sZXJhbnRDaGFubmVsUmVwKHBBZCwgcE91dEJ1ZmZlciArIEZyYW1lTGVuKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbiArIEludG9sZXJhbnRDaGFSZXBMZW4pOworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQUNUIC0gU2VuZDIwNDBDb2V4aXN0QWN0aW9uKCBCU1NDb2V4aXN0MjA0MCA9IDB4JXggKSAgXG4iLCBwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC53b3JkKSk7CisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJQWZ0ZXIgc2NhbiwgVXBkYXRlIDIwLzQwIEJTUyBDb2V4aXN0ZW5jZSBJRSBhbmQgc2VuZCBvdXQuCisJQWNjb3JkaW5nIHRvIDgwMi4xMW4gRDMuMDMgMTEuMTQuMTAKKworCVBhcmFtZXRlcnM6CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBVcGRhdGUyMDQwQ29leGlzdEZyYW1lQW5kTm90aWZ5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOCUJPT0xFQU4JYkFkZEludG9sZXJhbnRDaGEpCit7CisJQlNTXzIwNDBfQ09FWElTVF9JRQlPbGRWYWx1ZTsKKworCU9sZFZhbHVlLndvcmQgPSBwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC53b3JkOworCWlmICgocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QU5vID4gMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEJDb3VudERvd24gPiAwKSkKKwkJcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAuZmllbGQuQlNTMjBXaWR0aFJlcSA9IDE7CisKKwkvLyBOZWVkIHRvIGNoZWNrICEhISEKKwkvLyBIb3cgU1RBIHdpbGwgc2V0IEludG9sZXJhbnQ0MCBpZiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuIE5vdyB3ZSBkb24ndCBzZXQgdGhpcyBiaXQgZmlyc3QuISEhISEKKwkvLyBTbyBPbmx5IGNoZWNrIEJTUzIwV2lkdGhSZXEgY2hhbmdlLgorCWlmIChPbGRWYWx1ZS5maWVsZC5CU1MyMFdpZHRoUmVxICE9IHBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkJTUzIwV2lkdGhSZXEpCisJeworCQlTZW5kMjA0MENvZXhpc3RBY3Rpb24ocEFkLCBXY2lkLCBiQWRkSW50b2xlcmFudENoYSk7CisJfQorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK0JPT0xFQU4gQ2hhbm5lbFN3aXRjaFNhbml0eUNoZWNrKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOICAgIFVDSEFSICBOZXdDaGFubmVsLAorCUlOICAgIFVDSEFSICBTZWNvbmRhcnkpCit7CisJVUNIQVIJCWk7CisKKwlpZiAoV2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKChOZXdDaGFubmVsID4gNykgJiYgKFNlY29uZGFyeSA9PSAxKSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKChOZXdDaGFubmVsIDwgNSkgJiYgKFNlY29uZGFyeSA9PSAzKSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gMC4gQ2hlY2sgaWYgbmV3IGNoYW5uZWwgaXMgaW4gdGhlIGNoYW5uZWxsaXN0LgorCWZvciAoaSA9IDA7aSA8IHBBZC0+Q2hhbm5lbExpc3ROdW07aSsrKQorCXsKKwkJaWYgKHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCA9PSBOZXdDaGFubmVsKQorCQl7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IHBBZC0+Q2hhbm5lbExpc3ROdW0pCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCisKK1ZPSUQgQ2hhbm5lbFN3aXRjaEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTiAgICBVQ0hBUiAgTmV3Q2hhbm5lbCwKKwlJTiAgICBVQ0hBUiAgU2Vjb25kYXJ5KQoreworCVVDSEFSCQlCQlBWYWx1ZSA9IDA7CisJVUxPTkcJCU1BQ1ZhbHVlOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTUEVDVFJVTSAtIENoYW5uZWxTd2l0Y2hBY3Rpb24oTmV3Q2hhbm5lbCA9ICVkICwgU2Vjb25kYXJ5ID0gJWQpICBcbiIsIE5ld0NoYW5uZWwsIFNlY29uZGFyeSkpOworCisJaWYgKENoYW5uZWxTd2l0Y2hTYW5pdHlDaGVjayhwQWQsIFdjaWQsIE5ld0NoYW5uZWwsIFNlY29uZGFyeSkgPT0gRkFMU0UpCisJCXJldHVybjsKKworCS8vIDEuICBTd2l0Y2hlcyB0byBCVyA9IDIwLgorCWlmIChTZWNvbmRhcnkgPT0gMCkKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJQkJQVmFsdWUmPSAofjB4MTgpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJeworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MTYpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIDB4MDgpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTEpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQl9CisJCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOworCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gTmV3Q2hhbm5lbDsKKwkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5IVFBoeU1vZGUuZmllbGQuQlcgPSAwOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEyME1IeiAgICEhISBcbiIgKSk7CisJfQorCS8vIDEuICBTd2l0Y2hlcyB0byBCVyA9IDQwIEFuZCBTdGF0aW9uIHN1cHBvcnRzIEJXID0gNDAuCisJZWxzZSBpZiAoKChTZWNvbmRhcnkgPT0gMSkgfHwgKFNlY29uZGFyeSA9PSAzKSkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IDEpKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisKKwkJaWYgKFNlY29uZGFyeSA9PSAxKQorCQl7CisJCQkvLyBTZWNvbmRhcnkgYWJvdmUuCisJCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgKyAyOworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJk1BQ1ZhbHVlKTsKKwkJCU1BQ1ZhbHVlICY9IDB4ZmU7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgTUFDVmFsdWUpOworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOworCQkJQkJQVmFsdWUmPSAofjB4MTgpOworCQkJQkJQVmFsdWV8PSAoMHgxMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCQlBWYWx1ZSk7CisJCQlCQlBWYWx1ZSY9ICh+MHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBWYWx1ZSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISE0ME1IeiBMb3dlciBMSU5LIFVQICEhISBDb250cm9sIENoYW5uZWwgYXQgQmVsb3cuIENlbnRyYWwgPSAlZCBcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gU2Vjb25kYXJ5IGJlbG93LgorCQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsIC0gMjsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZNQUNWYWx1ZSk7CisJCQlNQUNWYWx1ZSAmPSAweGZlOworCQkJTUFDVmFsdWUgfD0gMHgxOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIE1BQ1ZhbHVlKTsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlJj0gKH4weDE4KTsKKwkJCUJCUFZhbHVlfD0gKDB4MTApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQkJQVmFsdWUpOworCQkJQkJQVmFsdWUmPSAofjB4MjApOworCQkJQkJQVmFsdWV8PSAoMHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBWYWx1ZSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISE0ME1IeiBVcHBlciBMSU5LIFVQICEhISBDb250cm9sIENoYW5uZWwgYXQgVXBwZXJDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKwkJfQorCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uSFRQaHlNb2RlLmZpZWxkLkJXID0gMTsKKwl9Cit9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIFBlZXJQdWJsaWNBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworI2lmZGVmIERPVDExTl9EUkFGVDMKKwlVQ0hBUglBY3Rpb24gPSBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsxXTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKwlpZiAoRWxlbS0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuOworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCXN3aXRjaChBY3Rpb24pCisJeworCQljYXNlIEFDVElPTl9CU1NfMjA0MF9DT0VYSVNUOgkvLyBGb3JtYXQgZGVmaW5lZCBpbiBJRUVFIDcuNC43YS4xIGluIDExbiBEcmFmMy4wMworCQkJeworCQkJCS8vVUNIQVIJQnNzQ29leGlzdDsKKwkJCQlCU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQJCSpwQ29leGlzdEluZm87CisJCQkJQlNTXzIwNDBfQ09FWElTVF9JRSAJCQkqcEJzc0NvZXhpc3RJZTsKKwkJCQlCU1NfMjA0MF9JTlRPTEVSQU5UX0NIX1JFUE9SVAkqcEludG9sZXJhbnRSZXBvcnQgPSBOVUxMOworCisJCQkJaWYgKEVsZW0tPk1zZ0xlbiA8PSAoTEVOR1RIXzgwMl8xMSArIHNpemVvZihCU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQpKSApCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBQ1RJT04gLSAyMC80MCBCU1MgQ29leGlzdGVuY2UgTWFuYWdlbWVudCBGcmFtZSBsZW5ndGggdG9vIHNob3J0ISBsZW4gPSAlbGQhXG4iLCBFbGVtLT5Nc2dMZW4pKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFDVElPTiAtIDIwLzQwIEJTUyBDb2V4aXN0ZW5jZSBNYW5hZ2VtZW50IGFjdGlvbi0tLS0+IFxuIikpOworCQkJCWhleF9kdW1wKCJDb2V4aXN0ZW5jZU1nbXRGcmFtZSIsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKTsKKworCisJCQkJcENvZXhpc3RJbmZvID0gKEJTU18yMDQwX0NPRVhJU1RfRUxFTUVOVCAqKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl07CisJCQkJLy9oZXhfZHVtcCgiQ29leGlzdEluZm8iLCAoUFVDSEFSKXBDb2V4aXN0SW5mbywgc2l6ZW9mKEJTU18yMDQwX0NPRVhJU1RfRUxFTUVOVCkpOworCQkJCWlmIChFbGVtLT5Nc2dMZW4gPj0gKExFTkdUSF84MDJfMTEgKyBzaXplb2YoQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UKSArIHNpemVvZihCU1NfMjA0MF9JTlRPTEVSQU5UX0NIX1JFUE9SVCkpKQorCQkJCXsKKwkJCQkJcEludG9sZXJhbnRSZXBvcnQgPSAoQlNTXzIwNDBfSU5UT0xFUkFOVF9DSF9SRVBPUlQgKikoKFBVQ0hBUilwQ29leGlzdEluZm8gKyBzaXplb2YoQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UKSk7CisJCQkJfQorCQkJCS8vaGV4X2R1bXAoIkludG9sZXJhbnRSZXBvcnQgIiwgKFBVQ0hBUilwSW50b2xlcmFudFJlcG9ydCwgc2l6ZW9mKEJTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JUKSk7CisKKwkJCQlwQnNzQ29leGlzdEllID0gKEJTU18yMDQwX0NPRVhJU1RfSUUgKikoJnBDb2V4aXN0SW5mby0+QnNzQ29leGlzdEllKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJeworCQkJCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJCQkJeworCQkJCQkJU3RhUHVibGljQWN0aW9uKHBBZCwgcENvZXhpc3RJbmZvKTsKKwkJCQkJfQorCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJfQorCQkJYnJlYWs7CisJfQorCisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCit9CisKKworc3RhdGljIFZPSUQgUmVzZXJ2ZWRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSIENhdGVnb3J5OworCisJaWYgKEVsZW0tPk1zZ0xlbiA8PSBMRU5HVEhfODAyXzExKQorCXsKKwkJcmV0dXJuOworCX0KKworCUNhdGVnb3J5ID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTFdOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUmN2IHJlc2VydmVkIGNhdGVnb3J5KCVkKSBBY3Rpb24gRnJhbWVcbiIsIENhdGVnb3J5KSk7CisJaGV4X2R1bXAoIlJlc2VydmVkIEFjdGlvbiBGcmFtZSIsICZFbGVtLT5Nc2dbMF0sIEVsZW0tPk1zZ0xlbik7Cit9CisKK1ZPSUQgUGVlclJNQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKKworeworCXJldHVybjsKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorc3RhdGljIFZPSUQgcmVzcG9uZF9odF9pbmZvcm1hdGlvbl9leGNoYW5nZV9hY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTCQlOU3RhdHVzOworCVVMT05HCQkJRnJhbWVMZW47CisJRlJBTUVfSFRfSU5GTwlIVElORk9mcmFtZSwgKnBGcmFtZTsKKwlVQ0hBUiAgIAkJKnBBZGRyOworCisKKwkvLyAyLiBBbHdheXMgc2VuZCBiYWNrIEFEREJBIFJlc3BvbnNlCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKworCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtIHJlc3BvbmRfaHRfaW5mb3JtYXRpb25fZXhjaGFuZ2VfYWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCS8vIGdldCBSQQorCXBGcmFtZSA9IChGUkFNRV9IVF9JTkZPICopICZFbGVtLT5Nc2dbMF07CisJcEFkZHIgPSBwRnJhbWUtPkhkci5BZGRyMjsKKworCU5kaXNaZXJvTWVtb3J5KCZIVElORk9mcmFtZSwgc2l6ZW9mKEZSQU1FX0hUX0lORk8pKTsKKwkvLyAyLTEuIFByZXBhcmUgQUREQkEgUmVzcG9uc2UgZnJhbWUuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChBREhPQ19PTihwQWQpKQorCQkJQWN0SGVhZGVySW5pdChwQWQsICZIVElORk9mcmFtZS5IZHIsIHBBZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCWVsc2UKKwkJCUFjdEhlYWRlckluaXQocEFkLCAmSFRJTkZPZnJhbWUuSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkZHIpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCUhUSU5GT2ZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfSFQ7CisJSFRJTkZPZnJhbWUuQWN0aW9uID0gSFRfSU5GT19FWENIQU5HRTsKKwlIVElORk9mcmFtZS5IVF9JbmZvLlJlcXVlc3QgPSAwOworCUhUSU5GT2ZyYW1lLkhUX0luZm8uRm9ydHlfTUh6X0ludG9sZXJhbnQgPSBwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkZvcnR5X01oel9JbnRvbGVyYW50OworCUhUSU5GT2ZyYW1lLkhUX0luZm8uU1RBX0NoYW5uZWxfV2lkdGgJID0gcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoOworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJCSZGcmFtZUxlbiwKKwkJCQkJICBzaXplb2YoRlJBTUVfSFRfSU5GTyksCSZIVElORk9mcmFtZSwKKwkJCQkJICBFTkRfT0ZfQVJHUyk7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Cit9CisKKworI2lmZGVmIERPVDExTl9EUkFGVDMKK1ZPSUQgU2VuZE5vdGlmeUJXQWN0aW9uRnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgIFdjaWQsCisJSU4gVUNIQVIgYXBpZHgpCit7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgCU5TdGF0dXM7CisJRlJBTUVfQUNUSU9OX0hEUglGcmFtZTsKKwlVTE9ORwkJCUZyYW1lTGVuOworCVBVQ0hBUgkJCXBBZGRyMTsKKworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkFDVCAtIFNlbmROb3RpZnlCV0FjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoV2NpZCA9PSBNQ0FTVF9XQ0lEKQorCQlwQWRkcjEgPSAmQlJPQURDQVNUX0FERFJbMF07CisJZWxzZQorCQlwQWRkcjEgPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHI7CisJQWN0SGVhZGVySW5pdChwQWQsICZGcmFtZS5IZHIsIHBBZGRyMSwgcEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLkJzc2lkLCBwQWQtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uQnNzaWQpOworCisJRnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9IVDsKKwlGcmFtZS5BY3Rpb24gPSBOT1RJRllfQldfQUNUSU9OOworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCSAgc2l6ZW9mKEZSQU1FX0FDVElPTl9IRFIpLAkgICZGcmFtZSwKKwkJCQkgIEVORF9PRl9BUkdTKTsKKworCSoocE91dEJ1ZmZlciArIEZyYW1lTGVuKSA9IHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uUmVjb21XaWR0aDsKKwlGcmFtZUxlbisrOworCisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQUNUIC0gU2VuZE5vdGlmeUJXQWN0aW9uKE5vdGlmeUJXPSAlZCkhXG4iLCBwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGgpKTsKKworfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworCitWT0lEIFBlZXJIVEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIJQWN0aW9uID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMV07CisKKwlpZiAoRWxlbS0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuOworCisJc3dpdGNoKEFjdGlvbikKKwl7CisJCWNhc2UgTk9USUZZX0JXX0FDVElPTjoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQUNUSU9OIC0gSFQgTm90aWZ5IENoYW5uZWwgYmFuZHdpZHRoIGFjdGlvbi0tLS0+IFxuIikpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJaWYocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUgPT0gRkFMU0UpCisJCQl7CisJCQkJLy8gTm90ZSwgdGhpcyBpcyB0byBwYXRjaCBESVItMTM1MyBBUC4gV2hlbiB0aGUgQVAgc2V0IHRvIFdlcCwgaXQgd2lsbCB1c2UgbGVnYWN5IG1vZGUuIEJ1dCBBUCBzdGlsbCBrZWVwcworCQkJCS8vIHNlbmRpbmcgQldfTm90aWZ5IEFjdGlvbiBmcmFtZSwgYW5kIGNhdXNlIHVzIHRvIGxpbmt1cCBhbmQgbGlua2Rvd24uCisJCQkJLy8gSW4gbGVnYWN5IG1vZGUsIGRvbid0IG5lZWQgdG8gcGFyc2UgSFQgYWN0aW9uIGZyYW1lLgorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQUNUSU9OIC1JZ25vcmUgSFQgTm90aWZ5IENoYW5uZWwgQlcgd2hlbiBsaW5rIGFzIGxlZ2FjeSBtb2RlLiBCVyA9ICVkLS0tPiBcbiIsCisJCQkJCQkJCUVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzJdICkpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQlpZiAoRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl0gPT0gMCkJLy8gNy40LjguMi4gaWYgdmFsdWUgaXMgMSwga2VlcCB0aGUgc2FtZSBhcyBzdXBwb3J0ZWQgY2hhbm5lbCBiYW5kd2lkdGguCisJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5IVFBoeU1vZGUuZmllbGQuQlcgPSAwOworCisJCQlicmVhazsKKworCQljYXNlIFNNUFNfQUNUSU9OOgorCQkJLy8gNy4zLjEuMjUKKyAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtIFNNUFMgYWN0aW9uLS0tLT4gXG4iKSk7CisJCQlpZiAoKChFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsyXSYweDEpID09IDApKQorCQkJeworCQkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0uTW1wc01vZGUgPSBNTVBTX0VOQUJMRTsKKwkJCX0KKwkJCWVsc2UgaWYgKCgoRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl0mMHgyKSA9PSAwKSkKKwkJCXsKKwkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLk1tcHNNb2RlID0gTU1QU19TVEFUSUM7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5NbXBzTW9kZSA9IE1NUFNfRFlOQU1JQzsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBaWQoJWQpIE1JTU8gUFMgPSAlZFxuIiwgRWxlbS0+V2NpZCwgcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5NbXBzTW9kZSkpOworCQkJLy8gcnQyODYwYyA6IGFkZCBzb21ldGhpbmcgZm9yIHNtcHMgY2hhbmdlLgorCQkJYnJlYWs7CisKKwkJY2FzZSBTRVRQQ09fQUNUSU9OOgorCQkJYnJlYWs7CisKKwkJY2FzZSBNSU1PX0NIQV9NRUFTVVJFX0FDVElPTjoKKwkJCWJyZWFrOworCisJCWNhc2UgSFRfSU5GT19FWENIQU5HRToKKwkJCXsKKwkJCQlIVF9JTkZPUk1BVElPTl9PQ1RFVAkqcEhUX2luZm87CisKKwkJCQlwSFRfaW5mbyA9IChIVF9JTkZPUk1BVElPTl9PQ1RFVCAqKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl07CisgICAgCQkJCS8vIDcuNC44LjEwCisgICAgCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQUNUSU9OIC0gSFQgSW5mb3JtYXRpb24gRXhjaGFuZ2UgYWN0aW9uLS0tLT4gXG4iKSk7CisgICAgCQkJCWlmIChwSFRfaW5mby0+UmVxdWVzdCkKKyAgICAJCQkJeworICAgIAkJCQkJcmVzcG9uZF9odF9pbmZvcm1hdGlvbl9leGNoYW5nZV9hY3Rpb24ocEFkLCBFbGVtKTsKKyAgICAJCQkJfQorCQkJfQorICAgIAkJCWJyZWFrOworCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVJldHJ5IHNlbmRpbmcgQUREQkEgUmVxZXN0LgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlQYXJhbWV0cnM6CisJcDgwMjNIZWFkZXI6IGlmIHRoaXMgaXMgYWxyZWFkeSA4MDIuMyBmb3JtYXQsIHA4MDIzSGVhZGVyIGlzIE5VTEwKKworCVJldHVybgk6IFRSVUUgaWYgcHV0IGludG8gcnggcmVvcmRlcmluZyBidWZmZXIsIHNob3VsZG4ndCBpbmRpY2F0ZXJ4aGVyZS4KKwkJCQlGQUxTRSAsIHRoZW4gY29udGludWUgaW5kaWNhdGVyeCBhdCB0aGlzIG1vbWVudC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE9SSUJBVGltZXJUaW1lb3V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5OworCUlOVAkJCWksIHRvdGFsOworLy8JRlJBTUVfQkFSCQkJRnJhbWVCYXI7CisvLwlVTE9ORwkJCUZyYW1lTGVuOworLy8JTkRJU19TVEFUVVMgCU5TdGF0dXM7CisvLwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKy8vCVVTSE9SVAkJCVNlcXVlbmNlOworCVVDSEFSCQkJVElEOworCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCXRvdGFsID0gcEFkLT5NYWNUYWIuU2l6ZSAqIE5VTV9PRl9USUQ7CisKKwlmb3IgKGkgPSAxOyAoKGkgPE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFKSAmJiAodG90YWwgPiAwKSkgOyBpKyspCisJeworCQlpZiAgKHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldLk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKQorCQl7CisJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtpXS5XY2lkXTsKKwkJCVRJRCA9IHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldLlRJRDsKKworCQkJQVNTRVJUKHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldLldjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSk7CisJCX0KKwkJdG90YWwgLS07CisJfQorfQorCisKK1ZPSUQgU2VuZFJlZnJlc2hCQVIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnkpCit7CisJRlJBTUVfQkFSCQlGcmFtZUJhcjsKKwlVTE9ORwkJCUZyYW1lTGVuOworCU5ESVNfU1RBVFVTIAlOU3RhdHVzOworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVVTSE9SVAkJCVNlcXVlbmNlOworCVVDSEFSCQkJaSwgVElEOworCVVTSE9SVAkJCWlkeDsKKwlCQV9PUklfRU5UUlkJKnBCQUVudHJ5OworCisJZm9yIChpID0gMDsgaSA8TlVNX09GX1RJRDsgaSsrKQorCXsKKwkJaWR4ID0gcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtpXTsKKwkJaWYgKGlkeCA9PSAwKQorCQl7CisJCQljb250aW51ZTsKKwkJfQorCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtpZHhdOworCisJCWlmICAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKQorCQl7CisJCQlUSUQgPSBwQkFFbnRyeS0+VElEOworCisJCQlBU1NFUlQocEJBRW50cnktPldjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSk7CisKKwkJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCQlpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlTZXF1ZW5jZSA9IHBFbnRyeS0+VHhTZXFbVElEXTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCUJhckhlYWRlckluaXQocEFkLCAmRnJhbWVCYXIsIHBFbnRyeS0+QWRkciwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLkZyYWdOdW0gPSAwOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jdGlvbi4KKwkJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID0gU2VxdWVuY2U7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQkJRnJhbWVCYXIuQmFyQ29udHJvbC5USUQgPSBUSUQ7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJCQkJICBzaXplb2YoRlJBTUVfQkFSKSwJICAmRnJhbWVCYXIsCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkvL2lmICghKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpKSkKKwkJCWlmICgxKQkvLyBOb3cgd2UgYWx3YXlzIHNlbmQgQkFSLgorCQkJeworCQkJCS8vTWluaXBvcnRNTVJlcXVlc3RVbmxvY2socEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCQkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJCQkvL01pbmlwb3J0RGF0YU1NUmVxdWVzdChwQWQsIE1hcFVzZXJQcmlvcml0eVRvQWNjZXNzQ2F0ZWdvcnlbVElEXSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQkJfQorCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJfQorCX0KK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBBY3RIZWFkZXJJbml0KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE9VVCBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisgICAgSU4gUFVDSEFSIEFkZHIxLAorICAgIElOIFBVQ0hBUiBBZGRyMiwKKyAgICBJTiBQVUNIQVIgQWRkcjMpCit7CisgICAgTmRpc1plcm9NZW1vcnkocEhkcjgwMjExLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworICAgIHBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX01HTVQ7CisgICAgcEhkcjgwMjExLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9BQ1RJT047CisKKyAgICBDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjEsIEFkZHIxKTsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjIsIEFkZHIyKTsKKyAgICBDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjMsIEFkZHIzKTsKK30KKworVk9JRCBCYXJIZWFkZXJJbml0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE9VVCBQRlJBTUVfQkFSIHBDbnRsQmFyLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gUFVDSEFSIHBTQSkKK3sKKy8vCVVTSE9SVAlEdXJhdGlvbjsKKworCU5kaXNaZXJvTWVtb3J5KHBDbnRsQmFyLCBzaXplb2YoRlJBTUVfQkFSKSk7CisJcENudGxCYXItPkZDLlR5cGUgPSBCVFlQRV9DTlRMOworCXBDbnRsQmFyLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9CTE9DS19BQ0tfUkVROworICAgCXBDbnRsQmFyLT5CYXJDb250cm9sLk1USUQgPSAwOworCXBDbnRsQmFyLT5CYXJDb250cm9sLkNvbXByZXNzZWQgPSAxOworCXBDbnRsQmFyLT5CYXJDb250cm9sLkFDS1BvbGljeSA9IDA7CisKKworCXBDbnRsQmFyLT5EdXJhdGlvbiA9IDE2ICsgUlRNUENhbGNEdXJhdGlvbihwQWQsIFJBVEVfMSwgc2l6ZW9mKEZSQU1FX0JBKSk7CisKKwlDT1BZX01BQ19BRERSKHBDbnRsQmFyLT5BZGRyMSwgcERBKTsKKwlDT1BZX01BQ19BRERSKHBDbnRsQmFyLT5BZGRyMiwgcFNBKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUluc2VydCBDYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUgaW50byB0aGUgYWN0aW9uIGZyYW1lLgorCisJUGFyYW1ldHJzOgorCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KKwkJMi4gZnJhbWUgbGVuZ3RoLgorCQkzLiBjYXRlZ29yeSBjb2RlIG9mIHRoZSBmcmFtZS4KKwkJNC4gYWN0aW9uIGNvZGUgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEluc2VydEFjdEZpZWxkKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEZyYW1lQnVmLAorCU9VVCBQVUxPTkcgcEZyYW1lTGVuLAorCUlOIFVJTlQ4IENhdGVnb3J5LAorCUlOIFVJTlQ4IEFjdENvZGUpCit7CisJVUxPTkcgVGVtcExlbjsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKAlwRnJhbWVCdWYsCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCSZDYXRlZ29yeSwKKwkJCQkJCTEsCQkJCSZBY3RDb2RlLAorCQkJCQkJRU5EX09GX0FSR1MpOworCisJKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vYmFfYWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9iYV9hY3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2UxZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vYmFfYWN0aW9uLmMKQEAgLTAsMCArMSwxODEwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisKKworI2RlZmluZSBCQV9PUklfSU5JVF9TRVEJCShwRW50cnktPlR4U2VxW1RJRF0pIC8vMQkJCS8vIGluaXRhbCBzZXF1ZW5jZSBudW1iZXIgb2YgQkEgc2Vzc2lvbgorCisjZGVmaW5lIE9SSV9TRVNTSU9OX01BWF9SRVRSWQk4CisjZGVmaW5lIE9SSV9CQV9TRVNTSU9OX1RJTUVPVVQJKDIwMDApCS8vIG1zCisjZGVmaW5lIFJFQ19CQV9TRVNTSU9OX0lETEVfVElNRU9VVAkoMTAwMCkJLy8gbXMKKworI2RlZmluZSBSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUCQkoKDEwMCAqIEhaKS8xMDAwKQkvLyBzeXN0ZW0gdGlja3MgLS0gMTAwIG1zCisjZGVmaW5lIE1BWF9SRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUCSgoMzAwMCAqIEhaKS8xMDAwKQkvLyBzeXN0ZW0gdGlja3MgLS0gMTAwIG1zCisKKyNkZWZpbmUgUkVTRVRfUkNWX1NFUQkJKDB4RkZGRikKKworc3RhdGljIHZvaWQgYmFfbXBkdV9ibGtfZnJlZShQUlRNUF9BREFQVEVSIHBBZCwgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGspOworCisKK0JBX09SSV9FTlRSWSAqQkFUYWJsZUFsbG9jT3JpRW50cnkoCisJCQkJCQkJCSAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQkJCSAgT1VUIFVTSE9SVCAgICAgICAgICAqSWR4KTsKKworQkFfUkVDX0VOVFJZICpCQVRhYmxlQWxsb2NSZWNFbnRyeSgKKwkJCQkJCQkJICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkJCQkJCQkJICBPVVQgVVNIT1JUICAgICAgICAgICpJZHgpOworCitWT0lEIEJBT3JpU2Vzc2lvblNldHVwVGltZW91dCgKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIEJBUmVjU2Vzc2lvbklkbGVUaW1lb3V0KAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKKworQlVJTERfVElNRVJfRlVOQ1RJT04oQkFPcmlTZXNzaW9uU2V0dXBUaW1lb3V0KTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKEJBUmVjU2Vzc2lvbklkbGVUaW1lb3V0KTsKKworI2RlZmluZSBBTk5PVU5DRV9SRU9SREVSSU5HX1BBQ0tFVChfcEFkLCBfbXBkdV9ibGspCVwKKwkJCUFubm91bmNlX1Jlb3JkZXJpbmdfUGFja2V0KF9wQWQsIF9tcGR1X2Jsayk7CisKK1ZPSUQgQkFfTWF4V2luU2l6ZVJlYXNpZ24oCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5UGVlciwKKwlPVVQgVUNIQVIJCQkqcFdpblNpemUpCit7CisJVUNIQVIgTWF4U2l6ZTsKKworCisJaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMjg4M19WRVJTSU9OKSAvLyAzKjMKKwl7CisJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPj0gUkFMSU5LXzMwNzBfVkVSU0lPTikKKwkJeworCQkJaWYgKHBFbnRyeVBlZXItPldlcFN0YXR1cyAhPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKQorCQkJCU1heFNpemUgPSA3OyAvLyBmb3Igbm9uLW9wZW4gbW9kZQorCQkJZWxzZQorCQkJCU1heFNpemUgPSAxMzsKKwkJfQorCQllbHNlCisJCQlNYXhTaXplID0gMzE7CisJfQorCWVsc2UgaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMjg4MEVfVkVSU0lPTikgLy8gMjg4MCBlCisJeworCQlpZiAocEVudHJ5UGVlci0+V2VwU3RhdHVzICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpCisJCQlNYXhTaXplID0gNzsgLy8gZm9yIG5vbi1vcGVuIG1vZGUKKwkJZWxzZQorCQkJTWF4U2l6ZSA9IDEzOworCX0KKwllbHNlCisJCU1heFNpemUgPSA3OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYmE+IFdpbiBTaXplID0gJWQsIE1heCBTaXplID0gJWRcbiIsCisJCQkqcFdpblNpemUsIE1heFNpemUpKTsKKworCWlmICgoKnBXaW5TaXplKSA+IE1heFNpemUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJiYT4gcmVhc3NpZ24gbWF4IHdpbiBzaXplIGZyb20gJWQgdG8gJWRcbiIsCisJCQkJKnBXaW5TaXplLCBNYXhTaXplKSk7CisKKwkJKnBXaW5TaXplID0gTWF4U2l6ZTsKKwl9Cit9CisKK3ZvaWQgQW5ub3VuY2VfUmVvcmRlcmluZ19QYWNrZXQoSU4gUFJUTVBfQURBUFRFUgkJCXBBZCwKKwkJCQkJCQkJSU4gc3RydWN0IHJlb3JkZXJpbmdfbXBkdQkqbXBkdSkKK3sKKwlQTkRJU19QQUNLRVQgICAgcFBhY2tldDsKKworCXBQYWNrZXQgPSBtcGR1LT5wUGFja2V0OworCisJaWYgKG1wZHUtPmJBTVNEVSkKKwl7CisJCUFTU0VSVCgwKTsKKwkJQkFfUmVvcmRlcl9BTVNEVV9Bbm5ub3VuY2UocEFkLCBwUGFja2V0KTsKKwl9CisJZWxzZQorCXsKKwkJLy8KKwkJLy8gcGFzcyB0aGlzIDgwMi4zIHBhY2tldCB0byB1cHBlciBsYXllciBvciBmb3J3YXJkIHRoaXMgcGFja2V0IHRvIFdNIGRpcmVjdGx5CisJCS8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCUFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKHBBZCwgcFBhY2tldCwgUlRNUF9HRVRfUEFDS0VUX0lGKHBQYWNrZXQpKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9Cit9CisKKy8qCisgKiBJbnNlcnQgYSByZW9yZGVyaW5nIG1wZHUgaW50byBzb3J0ZWQgbGlua2VkIGxpc3QgYnkgc2VxdWVuY2Ugbm8uCisgKi8KK0JPT0xFQU4gYmFfcmVvcmRlcmluZ19tcGR1X2luc2VydHNvcnRlZChzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpsaXN0LCBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1KQoreworCisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqKnBwU2NhbiA9ICZsaXN0LT5uZXh0OworCisJd2hpbGUgKCpwcFNjYW4gIT0gTlVMTCkKKwl7CisJCWlmIChTRVFfU01BTExFUigoKnBwU2NhbiktPlNlcXVlbmNlLCBtcGR1LT5TZXF1ZW5jZSwgTUFYU0VRKSkKKwkJeworCQkJcHBTY2FuID0gJigqcHBTY2FuKS0+bmV4dDsKKwkJfQorCQllbHNlIGlmICgoKnBwU2NhbiktPlNlcXVlbmNlID09IG1wZHUtPlNlcXVlbmNlKQorCQl7CisJCQkvKiBnaXZlIHVwIHRoaXMgZHVwbGljYXRlZCBmcmFtZSAqLworCQkJcmV0dXJuKEZBTFNFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGZpbmQgcG9zaXRpb24gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJbXBkdS0+bmV4dCA9ICpwcFNjYW47CisJKnBwU2NhbiA9IG1wZHU7CisJbGlzdC0+cWxlbisrOworCXJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBjYWxsZXIgbG9jayBjcml0aWNhbCBzZWN0aW9uIGlmIG5lY2Vzc2FyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYmFfZW5xdWV1ZShzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpsaXN0LCBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsaykKK3sKKwlsaXN0LT5xbGVuKys7CisJbXBkdV9ibGstPm5leHQgPSBsaXN0LT5uZXh0OworCWxpc3QtPm5leHQgPSBtcGR1X2JsazsKK30KKworLyoKKyAqIGNhbGxlciBsb2NrIGNyaXRpY2FsIHNlY3Rpb24gaWYgbmVjZXNzYXJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqIGJhX2RlcXVldWUoc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsayA9IE5VTEw7CisKKwlBU1NFUlQobGlzdCk7CisKKwkJaWYgKGxpc3QtPnFsZW4pCisJCXsKKwkJCWxpc3QtPnFsZW4tLTsKKwkJCW1wZHVfYmxrID0gbGlzdC0+bmV4dDsKKwkJCWlmIChtcGR1X2JsaykKKwkJCXsKKwkJCQlsaXN0LT5uZXh0ID0gbXBkdV9ibGstPm5leHQ7CisJCQkJbXBkdV9ibGstPm5leHQgPSBOVUxMOworCQkJfQorCQl9CisJcmV0dXJuIG1wZHVfYmxrOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAgKmJhX3Jlb3JkZXJpbmdfbXBkdV9kZXF1ZXVlKHN0cnVjdCByZW9yZGVyaW5nX2xpc3QgKmxpc3QpCit7CisJcmV0dXJuKGJhX2RlcXVldWUobGlzdCkpOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAgKmJhX3Jlb3JkZXJpbmdfbXBkdV9wcm9iZShzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpsaXN0KQorCXsKKwlBU1NFUlQobGlzdCk7CisKKwkJcmV0dXJuKGxpc3QtPm5leHQpOworCX0KKworCisvKgorICogZnJlZSBhbGwgcmVzb3VyY2UgZm9yIHJlb3JkZXJpbmcgbWVjaGFuaXNtCisgKi8KK3ZvaWQgYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKFBSVE1QX0FEQVBURVIgcEFkKQoreworCUJBX1RBQkxFICAgICAgICAqVGFiOworCVBCQV9SRUNfRU5UUlkgICBwQkFFbnRyeTsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKwlpbnQgaTsKKworCVRhYiA9ICZwQWQtPkJBVGFibGU7CisKKwkvKiBJLiAgcmVsZWFzZSBhbGwgcGVuZGluZyByZW9yZGVyaW5nIHBhY2tldCAqLworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEU7IGkrKykKKwl7CisJCXBCQUVudHJ5ID0gJlRhYi0+QkFSZWNFbnRyeVtpXTsKKwkJaWYgKHBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzICE9IFJlY2lwaWVudF9OT05FKQorCQl7CisJCQl3aGlsZSAoKG1wZHVfYmxrID0gYmFfcmVvcmRlcmluZ19tcGR1X2RlcXVldWUoJnBCQUVudHJ5LT5saXN0KSkpCisJCQl7CisJCQkJQVNTRVJUKG1wZHVfYmxrLT5wUGFja2V0KTsKKwkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgbXBkdV9ibGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCWJhX21wZHVfYmxrX2ZyZWUocEFkLCBtcGR1X2Jsayk7CisJCQl9CisJCX0KKwl9CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCisJQVNTRVJUKHBCQUVudHJ5LT5saXN0LnFsZW4gPT0gMCk7CisJLyogSUkuIGZyZWUgbWVtb3J5IG9mIHJlb3JkZXJpbmcgbXBkdSB0YWJsZSAqLworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKKwlvc19mcmVlX21lbShwQWQsIHBBZC0+bXBkdV9ibGtfcG9vbC5tZW0pOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKK30KKworCisKKy8qCisgKiBBbGxvY2F0ZSBhbGwgcmVzb3VyY2UgZm9yIHJlb3JkZXJpbmcgbWVjaGFuaXNtCisgKi8KK0JPT0xFQU4gYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9pbml0KFBSVE1QX0FEQVBURVIgcEFkLCBpbnQgbnVtKQoreworCWludCAgICAgaTsKKwlQVUNIQVIgIG1lbTsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpmcmVlbGlzdDsKKworCS8qIGFsbG9jYXRlIHNwaW5sb2NrICovCisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKKworCS8qIGluaXRpYWxpemUgZnJlZWxpc3QgKi8KKwlmcmVlbGlzdCA9ICZwQWQtPm1wZHVfYmxrX3Bvb2wuZnJlZWxpc3Q7CisJZnJlZWxpc3QtPm5leHQgPSBOVUxMOworCWZyZWVsaXN0LT5xbGVuID0gMDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFsbG9jYXRlICVkIG1lbW9yeSBmb3IgQkEgcmVvcmRlcmluZ1xuIiwgKFVJTlQzMikobnVtKnNpemVvZihzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1KSkpKTsKKworCS8qIGFsbG9jYXRlIG51bWJlciBvZiBtcGR1X2JsayBtZW1vcnkgKi8KKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJm1lbSwgKG51bSpzaXplb2Yoc3RydWN0IHJlb3JkZXJpbmdfbXBkdSkpKTsKKworCXBBZC0+bXBkdV9ibGtfcG9vbC5tZW0gPSBtZW07CisKKwlpZiAobWVtID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJDYW4ndCBBbGxvY2F0ZSBNZW1vcnkgZm9yIEJBIFJlb3JkZXJpbmdcbiIpKTsKKwkJcmV0dXJuKEZBTFNFKTsKKwl9CisKKwkvKiBidWlsZCBtcGR1X2JsayBmcmVlIGxpc3QgKi8KKwlmb3IgKGk9MDsgaTxudW07IGkrKykKKwl7CisJCS8qIGdldCBtcGR1X2JsayAqLworCQltcGR1X2JsayA9IChzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICopIG1lbTsKKwkJLyogaW5pdGlhbCBtcGR1X2JsayAqLworCQlOZGlzWmVyb01lbW9yeShtcGR1X2Jsaywgc2l6ZW9mKHN0cnVjdCByZW9yZGVyaW5nX21wZHUpKTsKKwkJLyogbmV4dCBtcGR1X2JsayAqLworCQltZW0gKz0gc2l6ZW9mKHN0cnVjdCByZW9yZGVyaW5nX21wZHUpOworCQkvKiBpbnNlcnQgbXBkdV9ibGsgaW50byBmcmVlbGlzdCAqLworCQliYV9lbnF1ZXVlKGZyZWVsaXN0LCBtcGR1X2Jsayk7CisJfQorCisJcmV0dXJuKFRSVUUpOworfQorCisvL3N0YXRpYyBpbnQgYmxrX2NvdW50PTA7IC8vIHNhbXBsZSB0YWtlIG9mZiwgbm8gdXNlCisKK3N0YXRpYyBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICpiYV9tcGR1X2Jsa19hbGxvYyhQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKKwltcGR1X2JsayA9IGJhX2RlcXVldWUoJnBBZC0+bXBkdV9ibGtfcG9vbC5mcmVlbGlzdCk7CisJaWYgKG1wZHVfYmxrKQorCXsKKy8vCQlibGtfY291bnQrKzsKKwkJLyogcmVzZXQgbXBkdV9ibGsgKi8KKwkJTmRpc1plcm9NZW1vcnkobXBkdV9ibGssIHNpemVvZihzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1KSk7CisJfQorCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKKwlyZXR1cm4gbXBkdV9ibGs7Cit9CisKK3N0YXRpYyB2b2lkIGJhX21wZHVfYmxrX2ZyZWUoUFJUTVBfQURBUFRFUiBwQWQsIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrKQoreworCUFTU0VSVChtcGR1X2Jsayk7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7CisvLwlibGtfY291bnQtLTsKKwliYV9lbnF1ZXVlKCZwQWQtPm1wZHVfYmxrX3Bvb2wuZnJlZWxpc3QsIG1wZHVfYmxrKTsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7Cit9CisKKworc3RhdGljIFVTSE9SVCBiYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2luX29yZGVyKAorCQkJCQkJCQkJCQkJICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJCQkJCQkJCQkJCQkgICBJTiBQQkFfUkVDX0VOVFJZICAgIHBCQUVudHJ5LAorCQkJCQkJCQkJCQkJICAgSU4gVVNIT1JUICAgICAgICAgICBTdGFydFNlcSkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKwlVU0hPUlQgIExhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisKKwl3aGlsZSAoKG1wZHVfYmxrID0gYmFfcmVvcmRlcmluZ19tcGR1X3Byb2JlKCZwQkFFbnRyeS0+bGlzdCkpKQorCQl7CisJCQkvKiBmaW5kIGluLW9yZGVyIGZyYW1lICovCisJCWlmICghU0VRX1NURVBPTkUobXBkdV9ibGstPlNlcXVlbmNlLCBTdGFydFNlcSwgTUFYU0VRKSkKKwkJCXsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGRlcXVldWUgaW4tb3JkZXIgZnJhbWUgZnJvbSByZW9kZXJpbmcgbGlzdCAqLworCQkJbXBkdV9ibGsgPSBiYV9yZW9yZGVyaW5nX21wZHVfZGVxdWV1ZSgmcEJBRW50cnktPmxpc3QpOworCQkJLyogcGFzcyB0aGlzIGZyYW1lIHVwICovCisJCUFOTk9VTkNFX1JFT1JERVJJTkdfUEFDS0VUKHBBZCwgbXBkdV9ibGspOworCQkvKiBtb3ZlIHRvIG5leHQgc2VxdWVuY2UgKi8KKwkJCVN0YXJ0U2VxID0gbXBkdV9ibGstPlNlcXVlbmNlOworCQlMYXN0SW5kU2VxID0gU3RhcnRTZXE7CisJCS8qIGZyZWUgbXBkdV9ibGsgKi8KKwkJCWJhX21wZHVfYmxrX2ZyZWUocEFkLCBtcGR1X2Jsayk7CisJfQorCisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisKKwkvKiB1cGRhdGUgbGFzdCBpbmRpY2F0ZWQgc2VxdWVuY2UgKi8KKwlyZXR1cm4gTGFzdEluZFNlcTsKK30KKworc3RhdGljIHZvaWQgYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19sZV9zZXEoCisJCQkJCQkJCQkJCSAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkJCQkJCQkgICBJTiBQQkFfUkVDX0VOVFJZICAgIHBCQUVudHJ5LAorCQkJCQkJCQkJCQkgICBJTiBVU0hPUlQgICAgICAgICAgIFNlcXVlbmNlKQoreworCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisJd2hpbGUgKChtcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9wcm9iZSgmcEJBRW50cnktPmxpc3QpKSkKKwkJeworCQkJLyogZmluZCBpbi1vcmRlciBmcmFtZSAqLworCQlpZiAoKG1wZHVfYmxrLT5TZXF1ZW5jZSA9PSBTZXF1ZW5jZSkgfHwgU0VRX1NNQUxMRVIobXBkdV9ibGstPlNlcXVlbmNlLCBTZXF1ZW5jZSwgTUFYU0VRKSkKKwkJeworCQkJLyogZGVxdWV1ZSBpbi1vcmRlciBmcmFtZSBmcm9tIHJlb2RlcmluZyBsaXN0ICovCisJCQltcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9kZXF1ZXVlKCZwQkFFbnRyeS0+bGlzdCk7CisJCQkvKiBwYXNzIHRoaXMgZnJhbWUgdXAgKi8KKwkJCUFOTk9VTkNFX1JFT1JERVJJTkdfUEFDS0VUKHBBZCwgbXBkdV9ibGspOworCQkJLyogZnJlZSBtcGR1X2JsayAqLworCQkJYmFfbXBkdV9ibGtfZnJlZShwQWQsIG1wZHVfYmxrKTsKKwkJfQorCQllbHNlCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworfQorCisKK3N0YXRpYyB2b2lkIGJhX3JlZnJlc2hfcmVvcmRlcmluZ19tcGR1cygKKwkJCQkJCQkJCSAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkJCQkJICAgUEJBX1JFQ19FTlRSWSAgICAgICBwQkFFbnRyeSkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworCisJCQkvKiBkZXF1ZXVlIGluLW9yZGVyIGZyYW1lIGZyb20gcmVvZGVyaW5nIGxpc3QgKi8KKwl3aGlsZSAoKG1wZHVfYmxrID0gYmFfcmVvcmRlcmluZ19tcGR1X2RlcXVldWUoJnBCQUVudHJ5LT5saXN0KSkpCisJeworCQkJLyogcGFzcyB0aGlzIGZyYW1lIHVwICovCisJCUFOTk9VTkNFX1JFT1JERVJJTkdfUEFDS0VUKHBBZCwgbXBkdV9ibGspOworCisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gbXBkdV9ibGstPlNlcXVlbmNlOworCQkJYmFfbXBkdV9ibGtfZnJlZShwQWQsIG1wZHVfYmxrKTsKKworCQkvKiB1cGRhdGUgbGFzdCBpbmRpY2F0ZWQgc2VxdWVuY2UgKi8KKwl9CisJQVNTRVJUKHBCQUVudHJ5LT5saXN0LnFsZW4gPT0gMCk7CisJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworfQorCisKKy8vc3RhdGljCit2b2lkIGJhX2ZsdXNoX3Jlb3JkZXJpbmdfdGltZW91dF9tcGR1cygKKwkJCQkJCQkJCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkJCQkJSU4gUEJBX1JFQ19FTlRSWSAgICBwQkFFbnRyeSwKKwkJCQkJCQkJCUlOIFVMT05HICAgICAgICAgICAgTm93MzIpCisKK3sKKwlVU0hPUlQgU2VxdWVuY2U7CisKKy8vCWlmICgoUlRNUF9USU1FX0FGVEVSKCh1bnNpZ25lZCBsb25nKU5vdzMyLCAodW5zaWduZWQgbG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyK1JFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQpKSAmJgorLy8JCSAocEJBRW50cnktPmxpc3QucWxlbiA+ICgocEJBRW50cnktPkJBV2luU2l6ZSo3KS84KSkpIC8vfHwKKy8vCQkoUlRNUF9USU1FX0FGVEVSKCh1bnNpZ25lZCBsb25nKU5vdzMyLCAodW5zaWduZWQgbG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKygxMCpSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUKSkpICYmCisvLwkJIChwQkFFbnRyeS0+bGlzdC5xbGVuID4gKHBCQUVudHJ5LT5CQVdpblNpemUvOCkpKQorCWlmIChSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93MzIsICh1bnNpZ25lZCBsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIrKE1BWF9SRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VULzYpKSkKKwkJICYmKHBCQUVudHJ5LT5saXN0LnFsZW4gPiAxKQorCQkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoInRpbWVvdXRbJWRdICglMDhseC0lMDhseCA9ICVkID4gJWQpOiAleCwgZmx1c2ggYWxsIVxuICIsIHBCQUVudHJ5LT5saXN0LnFsZW4sIE5vdzMyLCAocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKSwKKwkJCSAgIChpbnQpKChsb25nKSBOb3czMiAtIChsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIpKSwgTUFYX1JFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQsCisJCQkgICBwQkFFbnRyeS0+TGFzdEluZFNlcSkpOworCQliYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7CisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciA9IE5vdzMyOworCX0KKwllbHNlCisJaWYgKFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lcisoUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVCkpKQorCQkmJiAocEJBRW50cnktPmxpc3QucWxlbiA+IDApCisJICAgKQorCQl7CisvLwkJcHJpbnRrKCJ0aW1lb3V0WyVkXSAoJWx4LSVseCA9ICVkID4gJWQpOiAleCwgIiwgcEJBRW50cnktPmxpc3QucWxlbiwgTm93MzIsIChwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIpLAorLy8JCQkgICAoaW50KSgobG9uZykgTm93MzIgLSAobG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKSksIFJFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQsCisvLwkJCSAgIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKyAgICAJCS8vCisJCS8vIGZvcmNlIExhc3RJbmRTZXEgdG8gc2hpZnQgdG8gTGFzdEluZFNlcSsxCisgICAgCQkvLworICAgIAkJU2VxdWVuY2UgPSAocEJBRW50cnktPkxhc3RJbmRTZXErMSkgJiBNQVhTRVE7CisgICAgCQliYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2xlX3NlcShwQWQsIHBCQUVudHJ5LCBTZXF1ZW5jZSk7CisgICAgCQlwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIgPSBOb3czMjsKKwkJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7CisgICAgCQkvLworICAgIAkJLy8gaW5kaWNhdGUgaW4tb3JkZXIgbXBkdXMKKyAgICAJCS8vCisgICAgCQlTZXF1ZW5jZSA9IGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfaW5fb3JkZXIocEFkLCBwQkFFbnRyeSwgU2VxdWVuY2UpOworICAgIAkJaWYgKFNlcXVlbmNlICE9IFJFU0VUX1JDVl9TRVEpCisgICAgCQl7CisgICAgCQkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBTZXF1ZW5jZTsKKyAgICAJCX0KKworCQkvL3ByaW50aygiJXgsIGZsdXNoIG9uZSFcbiIsIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKworCX0KK30KKworCisvKgorICogZ2VuZXJhdGUgQUREQkEgcmVxdWVzdCB0bworICogc2V0IHVwIEJBIGFncmVlbWVudAorICovCitWT0lEIEJBT3JpU2Vzc2lvblNldFVwKAorCQkJCQkgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkgIElOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSwKKwkJCQkJICBJTiBVQ0hBUiAgICAgICAgICAgIFRJRCwKKwkJCQkJICBJTiBVU0hPUlQgICAgICAgICAgIFRpbWVPdXQsCisJCQkJCSAgSU4gVUxPTkcgICAgICAgICAgICBEZWxheVRpbWUsCisJCQkJCSAgSU4gQk9PTEVBTiAgICAgICAgICBpc0ZvcmNlZCkKKworeworCS8vTUxNRV9BRERCQV9SRVFfU1RSVUNUCUFkZGJhUmVxOworCUJBX09SSV9FTlRSWSAgICAgICAgICAgICpwQkFFbnRyeSA9IE5VTEw7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgSWR4OworCUJPT0xFQU4gICAgICAgICAgICAgICAgIENhbmNlbGxlZDsKKworCWlmICgocEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSAhPSBUUlVFKSAgJiYgIChpc0ZvcmNlZCA9PSBGQUxTRSkpCisJCXJldHVybjsKKworCS8vIGlmIHRoaXMgZW50cnkgaXMgbGltaXRlZCB0byB1c2UgbGVnYWN5IHR4IG1vZGUsIGl0IGRvZXNuJ3QgZ2VuZXJhdGUgQkEuCisJaWYgKFJUTVBTdGFGaXhlZFR4TW9kZShwQWQsIHBFbnRyeSkgIT0gRklYRURfVFhNT0RFX0hUKQorCQlyZXR1cm47CisKKwlpZiAoKHBFbnRyeS0+QkFEZWNsaW5lQml0bWFwICYgKDE8PFRJRCkpICYmIChpc0ZvcmNlZCA9PSBGQUxTRSkpCisJeworCQkvLyB0cnkgYWdhaW4gYWZ0ZXIgMyBzZWNzCisJCURlbGF5VGltZSA9IDMwMDA7CisvLwkJcHJpbnRrKCJEZUNsaW5lIEJBIGZyb20gUGVlclxuIik7CisvLwkJcmV0dXJuOworCX0KKworCisJSWR4ID0gcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtUSURdOworCWlmIChJZHggPT0gMCkKKwl7CisJCS8vIGFsbG9jYXRlIGEgQkEgc2Vzc2lvbgorCQlwQkFFbnRyeSA9IEJBVGFibGVBbGxvY09yaUVudHJ5KHBBZCwgJklkeCk7CisJCWlmIChwQkFFbnRyeSA9PSBOVUxMKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFEREJBIC0gTWxtZUFEREJBQWN0aW9uKCkgYWxsb2NhdGUgQkEgc2Vzc2lvbiBmYWlsZWQgXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEJBRW50cnkgPSZwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtJZHhdOworCX0KKworCWlmIChwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyA+PSBPcmlnaW5hdG9yX1dhaXRSZXMpCisJeworCQlyZXR1cm47CisJfQorCisJcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtUSURdID0gSWR4OworCisJLy8gSW5pdGlhbGl6ZSBCQSBzZXNzaW9uCisJcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX1dhaXRSZXM7CisJcEJBRW50cnktPldjaWQgPSBwRW50cnktPkFpZDsKKwlwQkFFbnRyeS0+QkFXaW5TaXplID0gcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdDsKKwlwQkFFbnRyeS0+U2VxdWVuY2UgPSBCQV9PUklfSU5JVF9TRVE7CisJcEJBRW50cnktPlRva2VuID0gMTsJLy8gKDIwMDgtMDEtMjEpIEphbiBMZWUgcmVjb21tZW5kcyBpdCAtIHRoaXMgdG9rZW4gY2FuJ3QgYmUgMAorCXBCQUVudHJ5LT5USUQgPSBUSUQ7CisJcEJBRW50cnktPlRpbWVPdXRWYWx1ZSA9IFRpbWVPdXQ7CisJcEJBRW50cnktPnBBZGFwdGVyID0gcEFkOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZW5kIEFkZEJBIHRvICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFRpZDolZCBpc0ZvcmNlZDolZCBXY2lkOiVkXG4iCisJCSxwRW50cnktPkFkZHJbMF0scEVudHJ5LT5BZGRyWzFdLHBFbnRyeS0+QWRkclsyXQorCQkscEVudHJ5LT5BZGRyWzNdLHBFbnRyeS0+QWRkcls0XSxwRW50cnktPkFkZHJbNV0KKwkJLFRJRCxpc0ZvcmNlZCxwRW50cnktPkFpZCkpOworCisJaWYgKCEocEVudHJ5LT5UWEJBYml0bWFwICYgKDE8PFRJRCkpKQorCXsKKwkJUlRNUEluaXRUaW1lcihwQWQsICZwQkFFbnRyeS0+T1JJQkFUaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKEJBT3JpU2Vzc2lvblNldHVwVGltZW91dCksIHBCQUVudHJ5LCBGQUxTRSk7CisJfQorCWVsc2UKKwkJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgJkNhbmNlbGxlZCk7CisKKwkvLyBzZXQgdGltZXIgdG8gc2VuZCBBRERCQSByZXF1ZXN0CisJUlRNUFNldFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgRGVsYXlUaW1lKTsKK30KKworVk9JRCBCQU9yaVNlc3Npb25BZGQoCisJCQlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwkJCQkJSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5LAorCQkJSU4gUEZSQU1FX0FEREJBX1JTUCBwRnJhbWUpCit7CisJQkFfT1JJX0VOVFJZICAqcEJBRW50cnkgPSBOVUxMOworCUJPT0xFQU4gICAgICAgQ2FuY2VsbGVkOworCVVDSEFSICAgICAgICAgVElEOworCVVTSE9SVCAgICAgICAgSWR4OworCVBVQ0hBUiAgICAgICAgICBwT3V0QnVmZmVyMiA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgIE5TdGF0dXM7CisJVUxPTkcgICAgICAgICAgIEZyYW1lTGVuOworCUZSQU1FX0JBUiAgICAgICBGcmFtZUJhcjsKKworCVRJRCA9IHBGcmFtZS0+QmFQYXJtLlRJRDsKKwlJZHggPSBwRW50cnktPkJBT3JpV2NpZEFycmF5W1RJRF07CisJcEJBRW50cnkgPSZwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtJZHhdOworCisJLy8gU3RhcnQgZmlsbCBpbiBwYXJhbWV0ZXJzLgorCWlmICgoSWR4ICE9MCkgJiYgKHBCQUVudHJ5LT5USUQgPT0gVElEKSAmJiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9XYWl0UmVzKSkKKwl7CisJCXBCQUVudHJ5LT5CQVdpblNpemUgPSBtaW4ocEJBRW50cnktPkJBV2luU2l6ZSwgKChVQ0hBUilwRnJhbWUtPkJhUGFybS5CdWZTaXplKSk7CisJCUJBX01heFdpblNpemVSZWFzaWduKHBBZCwgcEVudHJ5LCAmcEJBRW50cnktPkJBV2luU2l6ZSk7CisKKwkJcEJBRW50cnktPlRpbWVPdXRWYWx1ZSA9IHBGcmFtZS0+VGltZU91dFZhbHVlOworCQlwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyA9IE9yaWdpbmF0b3JfRG9uZTsKKwkJLy8gcmVzZXQgc2VxdWVuY2UgbnVtYmVyCisJCXBCQUVudHJ5LT5TZXF1ZW5jZSA9IEJBX09SSV9JTklUX1NFUTsKKwkJLy8gU2V0IEJpdG1hcCBmbGFnLgorCQlwRW50cnktPlRYQkFiaXRtYXAgfD0gKDE8PFRJRCk7CisJCQkJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgJkNhbmNlbGxlZCk7CisKKwkJcEJBRW50cnktPk9SSUJBVGltZXIuVGltZXJWYWx1ZSA9IDA7CS8vcEZyYW1lLT5UaW1lT3V0VmFsdWU7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIlcyA6IFRYQkFiaXRtYXAgPSAleCwgQkFXaW5TaXplID0gJWQsIFRpbWVPdXQgPSAlbGRcbiIsIF9fRlVOQ1RJT05fXywgcEVudHJ5LT5UWEJBYml0bWFwLAorCQkJCQkJCQkgcEJBRW50cnktPkJBV2luU2l6ZSwgcEJBRW50cnktPk9SSUJBVGltZXIuVGltZXJWYWx1ZSkpOworCisJCS8vIFNFTkQgQkFSIDsKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyMik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgLSBCQU9yaVNlc3Npb25BZGQoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQkJcmV0dXJuOworCQl9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQmFySGVhZGVySW5pdChwQWQsICZGcmFtZUJhciwgcEFkLT5NYWNUYWIuQ29udGVudFtwQkFFbnRyeS0+V2NpZF0uQWRkciwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJRnJhbWVCYXIuU3RhcnRpbmdTZXEuZmllbGQuRnJhZ051bSA9IDA7CS8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmN0aW9uLgorCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSA9IHBCQUVudHJ5LT5TZXF1ZW5jZTsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCUZyYW1lQmFyLkJhckNvbnRyb2wuVElEID0gcEJBRW50cnktPlRJRDsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIyLCAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkJICBzaXplb2YoRlJBTUVfQkFSKSwgICAgICAmRnJhbWVCYXIsCisJCQkJCSAgRU5EX09GX0FSR1MpOworCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlcjIsIEZyYW1lTGVuKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyMik7CisKKworCQlpZiAocEJBRW50cnktPk9SSUJBVGltZXIuVGltZXJWYWx1ZSkKKwkJCVJUTVBTZXRUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsIHBCQUVudHJ5LT5PUklCQVRpbWVyLlRpbWVyVmFsdWUpOyAvLyBpbiBtU2VjCisJfQorfQorCitCT09MRUFOIEJBUmVjU2Vzc2lvbkFkZCgKKwkJCQkJICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJCQkJCSAgIElOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSwKKwkJCQkJICAgSU4gUEZSQU1FX0FEREJBX1JFUSBwRnJhbWUpCit7CisJQkFfUkVDX0VOVFJZICAgICAgICAgICAgKnBCQUVudHJ5ID0gTlVMTDsKKwlCT09MRUFOICAgICAgICAgICAgICAgICBTdGF0dXMgPSBUUlVFOworCUJPT0xFQU4gICAgICAgICAgICAgICAgIENhbmNlbGxlZDsKKwlVU0hPUlQgICAgICAgICAgICAgICAgICBJZHg7CisJVUNIQVIgICAgICAgICAgICAgICAgICAgVElEOworCVVDSEFSICAgICAgICAgICAgICAgICAgIEJBV2luU2l6ZTsKKwkvL1VJTlQzMiAgICAgICAgICAgICAgICAgIFZhbHVlOworCS8vVUlOVCAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OworCisKKwlBU1NFUlQocEVudHJ5KTsKKworCS8vIGZpbmQgVElECisJVElEID0gcEZyYW1lLT5CYVBhcm0uVElEOworCisJQkFXaW5TaXplID0gbWluKCgoVUNIQVIpcEZyYW1lLT5CYVBhcm0uQnVmU2l6ZSksIChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0KTsKKworCS8vIEludGVsIHBhdGNoCisJaWYgKEJBV2luU2l6ZSA9PSAwKQorCXsKKwkJQkFXaW5TaXplID0gNjQ7CisJfQorCisJSWR4ID0gcEVudHJ5LT5CQVJlY1djaWRBcnJheVtUSURdOworCisKKwlpZiAoSWR4ID09IDApCisJeworCQlwQkFFbnRyeSA9IEJBVGFibGVBbGxvY1JlY0VudHJ5KHBBZCwgJklkeCk7CisJfQorCWVsc2UKKwl7CisJCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07CisJCS8vIGZsdXNoIGFsbCBwZW5kaW5nIHJlb3JkZXJpbmcgbXBkdXMKKwkJYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiJXMoJWxkKTogSWR4ID0gJWQsIEJBV2luU2l6ZShyZXEgJWQpID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50LCBJZHgsCisJCQkJCQkJIHBGcmFtZS0+QmFQYXJtLkJ1ZlNpemUsIEJBV2luU2l6ZSkpOworCisJLy8gU3RhcnQgZmlsbCBpbiBwYXJhbWV0ZXJzLgorCWlmIChwQkFFbnRyeSAhPSBOVUxMKQorCXsKKwkJQVNTRVJUKHBCQUVudHJ5LT5saXN0LnFsZW4gPT0gMCk7CisKKwkJcEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPSBSZWNpcGllbnRfSGFuZGxlUmVzOworCQlwQkFFbnRyeS0+QkFXaW5TaXplID0gQkFXaW5TaXplOworCQlwQkFFbnRyeS0+V2NpZCA9IHBFbnRyeS0+QWlkOworCQlwQkFFbnRyeS0+VElEID0gVElEOworCQlwQkFFbnRyeS0+VGltZU91dFZhbHVlID0gcEZyYW1lLT5UaW1lT3V0VmFsdWU7CisJCXBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID0gUmVjaXBpZW50X0FjY2VwdDsKKwkJLy8gaW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIKKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROyAvL3BGcmFtZS0+QmFTdGFydFNlcS5maWVsZC5TdGFydFNlcTsKKworCQlwcmludGsoIlN0YXJ0IFNlcSA9ICUwOHhcbiIsICBwRnJhbWUtPkJhU3RhcnRTZXEuZmllbGQuU3RhcnRTZXEpOworCisJCWlmIChwRW50cnktPlJYQkFiaXRtYXAgJiAoMTw8VElEKSkKKwkJeworCQkJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+UkVDQkFUaW1lciwgJkNhbmNlbGxlZCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBCQUVudHJ5LT5SRUNCQVRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQkFSZWNTZXNzaW9uSWRsZVRpbWVvdXQpLCBwQkFFbnRyeSwgVFJVRSk7CisJCX0KKworCQkvLyBTZXQgQml0bWFwIGZsYWcuCisJCXBFbnRyeS0+UlhCQWJpdG1hcCB8PSAoMTw8VElEKTsKKwkJcEVudHJ5LT5CQVJlY1djaWRBcnJheVtUSURdID0gSWR4OworCisJCXBFbnRyeS0+QkFEZWNsaW5lQml0bWFwICY9IH4oMTw8VElEKTsKKworCQkvLyBTZXQgQkEgc2Vzc2lvbiBtYXNrIGluIFdDSUQgdGFibGUuCisJCVJUMjhYWF9BRERfQkFfU0VTU0lPTl9UT19BU0lDKHBBZCwgcEVudHJ5LT5BaWQsIFRJRCk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJNQUNFbnRyeVslZF1SWEJBYml0bWFwID0gMHgleC4gQkFSZWNXY2lkQXJyYXk9JWRcbiIsCisJCQkJcEVudHJ5LT5BaWQsIHBFbnRyeS0+UlhCQWJpdG1hcCwgcEVudHJ5LT5CQVJlY1djaWRBcnJheVtUSURdKSk7CisJfQorCWVsc2UKKwl7CisJCVN0YXR1cyA9IEZBTFNFOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNhbid0IEFjY2VwdCBBRERCQSBmb3IgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggVElEID0gJWRcbiIsCisJCQkJUFJJTlRfTUFDKHBFbnRyeS0+QWRkciksIFRJRCkpOworCX0KKwlyZXR1cm4oU3RhdHVzKTsKK30KKworCitCQV9SRUNfRU5UUlkgKkJBVGFibGVBbGxvY1JlY0VudHJ5KAorCQkJCQkJCQkgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCQkJCQkJCQkgIE9VVCBVU0hPUlQgICAgICAgICAgKklkeCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlCQV9SRUNfRU5UUlkgICAgKnBCQUVudHJ5ID0gTlVMTDsKKworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCisJaWYgKHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCA+PSBNQVhfQkFSRUNJX1NFU1NJT04pCisJeworCQlwcmludGsoIkJBIFJlY2lwZWludCBTZXNzaW9uICglbGQpID4gJWRcbiIsIHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCwKKwkJCU1BWF9CQVJFQ0lfU0VTU0lPTik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvLyByZXNlcnZlIGlkeCAwIHRvIGlkZW50aWZ5IEJBV2NpZEFycmF5W1RJRF0gYXMgZW1wdHkKKwlmb3IgKGk9MTsgaSA8IE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFOyBpKyspCisJeworCQlwQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W2ldOworCQlpZiAoKHBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID09IFJlY2lwaWVudF9OT05FKSkKKwkJeworCQkJLy8gZ2V0IG9uZQorCQkJcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50Kys7CisJCQlwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyA9IFJlY2lwaWVudF9VU0VEOworCQkJKklkeCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworZG9uZToKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJcmV0dXJuIHBCQUVudHJ5OworfQorCitCQV9PUklfRU5UUlkgKkJBVGFibGVBbGxvY09yaUVudHJ5KAorCQkJCQkJCQkgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCQkJCQkJCQkgIE9VVCBVU0hPUlQgICAgICAgICAgKklkeCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlCQV9PUklfRU5UUlkgICAgKnBCQUVudHJ5ID0gTlVMTDsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCWlmIChwQWQtPkJBVGFibGUubnVtQXNPcmlnaW5hdG9yID49IChNQVhfTEVOX09GX0JBX09SSV9UQUJMRSkpCisJeworCQlnb3RvIGRvbmU7CisJfQorCisJLy8gcmVzZXJ2ZSBpZHggMCB0byBpZGVudGlmeSBCQVdjaWRBcnJheVtUSURdIGFzIGVtcHR5CisJZm9yIChpPTE7IGk8TUFYX0xFTl9PRl9CQV9PUklfVEFCTEU7IGkrKykKKwl7CisJCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbaV07CisJCWlmICgocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9OT05FKSkKKwkJeworCQkJLy8gZ2V0IG9uZQorCQkJcEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvcisrOworCQkJcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX1VTRUQ7CisJCQlwQkFFbnRyeS0+cEFkYXB0ZXIgPSBwQWQ7CisJCQkqSWR4ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCitkb25lOgorCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwlyZXR1cm4gcEJBRW50cnk7Cit9CisKKworVk9JRCBCQVRhYmxlRnJlZU9yaUVudHJ5KAorCQkJCQkJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQlJTiAgVUxPTkcgICAgICAgICAgIElkeCkKK3sKKwlCQV9PUklfRU5UUlkgICAgKnBCQUVudHJ5ID0gTlVMTDsKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworCisJaWYgKChJZHggPT0gMCkgfHwgKElkeCA+PSBNQVhfTEVOX09GX0JBX09SSV9UQUJMRSkpCisJCXJldHVybjsKKworCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbSWR4XTsKKworCWlmIChwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyAhPSBPcmlnaW5hdG9yX05PTkUpCisJeworCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwQkFFbnRyeS0+V2NpZF07CisJCXBFbnRyeS0+QkFPcmlXY2lkQXJyYXlbcEJBRW50cnktPlRJRF0gPSAwOworCisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCQlpZiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKQorCQl7CisJCSAJcEVudHJ5LT5UWEJBYml0bWFwICY9ICh+KDE8PChwQkFFbnRyeS0+VElEKSApKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJBVGFibGVGcmVlT3JpRW50cnkgbnVtQXNPcmlnaW5hdG9yPSAlbGRcbiIsIHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCkpOworCQkJLy8gRXJhc2UgQml0bWFwIGZsYWcuCisJCX0KKworCQlBU1NFUlQocEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvciAhPSAwKTsKKworCQlwQWQtPkJBVGFibGUubnVtQXNPcmlnaW5hdG9yIC09IDE7CisKKwkJcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX05PTkU7CisJCXBCQUVudHJ5LT5Ub2tlbiA9IDA7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwl9Cit9CisKKworVk9JRCBCQVRhYmxlRnJlZVJlY0VudHJ5KAorCQkJCQkJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQlJTiAgVUxPTkcgICAgICAgICAgIElkeCkKK3sKKwlCQV9SRUNfRU5UUlkgICAgKnBCQUVudHJ5ID0gTlVMTDsKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworCisJaWYgKChJZHggPT0gMCkgfHwgKElkeCA+PSBNQVhfTEVOX09GX0JBX1JFQ19UQUJMRSkpCisJCXJldHVybjsKKworCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKworCWlmIChwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyAhPSBSZWNpcGllbnRfTk9ORSkKKwl7CisJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BCQUVudHJ5LT5XY2lkXTsKKwkJcEVudHJ5LT5CQVJlY1djaWRBcnJheVtwQkFFbnRyeS0+VElEXSA9IDA7CisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCisJCUFTU0VSVChwQWQtPkJBVGFibGUubnVtQXNSZWNpcGllbnQgIT0gMCk7CisKKwkJcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50IC09IDE7CisKKwkJcEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPSBSZWNpcGllbnRfTk9ORTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCX0KK30KKworCitWT0lEIEJBT3JpU2Vzc2lvblRlYXJEb3duKAorCQkJCQkJIElOIE9VVCAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkJCQkJCSBJTiAgICAgIFVDSEFSICAgICAgICAgICBXY2lkLAorCQkJCQkJIElOICAgICAgVUNIQVIgICAgICAgICAgIFRJRCwKKwkJCQkJCSBJTiAgICAgIEJPT0xFQU4gICAgICAgICBiUGFzc2l2ZSwKKwkJCQkJCSBJTiAgICAgIEJPT0xFQU4gICAgICAgICBiRm9yY2VTZW5kKQoreworCVVMT05HICAgICAgICAgICBJZHggPSAwOworCUJBX09SSV9FTlRSWSAgICAqcEJBRW50cnk7CisJQk9PTEVBTiAgICAgICAgIENhbmNlbGxlZDsKKworCWlmIChXY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vCisJLy8gTG9jYXRlIGNvcnJlc3BvbmRpbmcgQkEgT3JpZ2luYXRvciBFbnRyeSBpbiBCQSBUYWJsZSB3aXRoIHRoZSAocEFkZHIsVElEKS4KKwkvLworCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFPcmlXY2lkQXJyYXlbVElEXTsKKwlpZiAoKElkeCA9PSAwKSB8fCAoSWR4ID49IE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFKSkKKwl7CisJCWlmIChiRm9yY2VTZW5kID09IFRSVUUpCisJCXsKKwkJCS8vIGZvcmNlIHNlbmQgc3BlY2lmaWVkIFRJRCBEZWxCQQorCQkJTUxNRV9ERUxCQV9SRVFfU1RSVUNUICAgRGVsYmFSZXE7CisJCQlNTE1FX1FVRVVFX0VMRU0gKkVsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKworCQkJTmRpc1plcm9NZW1vcnkoJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKKwkJCU5kaXNaZXJvTWVtb3J5KEVsZW0sIHNpemVvZihNTE1FX1FVRVVFX0VMRU0pKTsKKworCQkJQ09QWV9NQUNfQUREUihEZWxiYVJlcS5BZGRyLCBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHIpOworCQkJRGVsYmFSZXEuV2NpZCA9IFdjaWQ7CisJCQlEZWxiYVJlcS5USUQgPSBUSUQ7CisJCQlEZWxiYVJlcS5Jbml0aWF0b3IgPSBPUklHSU5BVE9SOworI2lmIDEKKwkJCUVsZW0tPk1zZ0xlbiAgPSBzaXplb2YoRGVsYmFSZXEpOworCQkJTmRpc01vdmVNZW1vcnkoRWxlbS0+TXNnLCAmRGVsYmFSZXEsIHNpemVvZihEZWxiYVJlcSkpOworCQkJTWxtZURFTEJBQWN0aW9uKHBBZCwgRWxlbSk7CisJCQlrZnJlZShFbGVtKTsKKyNlbHNlCisJCQlNbG1lRW5xdWV1ZShwQWQsIEFDVElPTl9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9PUklfREVMQkFfQ0FURSwgc2l6ZW9mKE1MTUVfREVMQkFfUkVRX1NUUlVDVCksIChQVk9JRCkmRGVsYmFSZXEpOworCQkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworI2VuZGlmCisJCX0KKworCQlyZXR1cm47CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIlcz09PT5XY2lkPSVkLlRJRD0lZCBcbiIsIF9fRlVOQ1RJT05fXywgV2NpZCwgVElEKSk7CisKKwlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtJZHhdOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiXHQ9PT0+SWR4ID0gJWxkLCBXY2lkPSVkLlRJRD0lZCwgT1JJX0JBX1N0YXR1cyA9ICVkIFxuIiwgSWR4LCBXY2lkLCBUSUQsIHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzKSk7CisJLy8KKwkvLyBQcmVwYXJlIERlbEJBIGFjdGlvbiBmcmFtZSBhbmQgc2VuZCB0byB0aGUgcGVlci4KKwkvLworCWlmICgoYlBhc3NpdmUgPT0gRkFMU0UpICYmIChUSUQgPT0gcEJBRW50cnktPlRJRCkgJiYgKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfRG9uZSkpCisJeworCQlNTE1FX0RFTEJBX1JFUV9TVFJVQ1QgICBEZWxiYVJlcTsKKwkJTUxNRV9RVUVVRV9FTEVNICpFbGVtID0gKE1MTUVfUVVFVUVfRUxFTSAqKSBrbWFsbG9jKHNpemVvZihNTE1FX1FVRVVFX0VMRU0pLCBNRU1fQUxMT0NfRkxBRyk7CisKKwkJTmRpc1plcm9NZW1vcnkoJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKKwkJTmRpc1plcm9NZW1vcnkoRWxlbSwgc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSkpOworCisJCUNPUFlfTUFDX0FERFIoRGVsYmFSZXEuQWRkciwgcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5BZGRyKTsKKwkJRGVsYmFSZXEuV2NpZCA9IFdjaWQ7CisJCURlbGJhUmVxLlRJRCA9IHBCQUVudHJ5LT5USUQ7CisJCURlbGJhUmVxLkluaXRpYXRvciA9IE9SSUdJTkFUT1I7CisjaWYgMQorCQlFbGVtLT5Nc2dMZW4gID0gc2l6ZW9mKERlbGJhUmVxKTsKKwkJTmRpc01vdmVNZW1vcnkoRWxlbS0+TXNnLCAmRGVsYmFSZXEsIHNpemVvZihEZWxiYVJlcSkpOworCQlNbG1lREVMQkFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJa2ZyZWUoRWxlbSk7CisjZWxzZQorCQlNbG1lRW5xdWV1ZShwQWQsIEFDVElPTl9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9PUklfREVMQkFfQ0FURSwgc2l6ZW9mKE1MTUVfREVMQkFfUkVRX1NUUlVDVCksIChQVk9JRCkmRGVsYmFSZXEpOworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisjZW5kaWYKKwl9CisJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgJkNhbmNlbGxlZCk7CisJQkFUYWJsZUZyZWVPcmlFbnRyeShwQWQsIElkeCk7CisKKwlpZiAoYlBhc3NpdmUpCisJeworCQkvL0JBT3JpU2Vzc2lvblNldFVwKHBBZCwgJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIFRJRCwgMCwgMTAwMDAsIFRSVUUpOworCX0KK30KKworVk9JRCBCQVJlY1Nlc3Npb25UZWFyRG93bigKKwkJCQkJCSBJTiBPVVQgIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQkgSU4gICAgICBVQ0hBUiAgICAgICAgICAgV2NpZCwKKwkJCQkJCSBJTiAgICAgIFVDSEFSICAgICAgICAgICBUSUQsCisJCQkJCQkgSU4gICAgICBCT09MRUFOICAgICAgICAgYlBhc3NpdmUpCit7CisJVUxPTkcgICAgICAgICAgIElkeCA9IDA7CisJQkFfUkVDX0VOVFJZICAgICpwQkFFbnRyeTsKKworCWlmIChXY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vCisJLy8gIExvY2F0ZSBjb3JyZXNwb25kaW5nIEJBIE9yaWdpbmF0b3IgRW50cnkgaW4gQkEgVGFibGUgd2l0aCB0aGUgKHBBZGRyLFRJRCkuCisJLy8KKwlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBUmVjV2NpZEFycmF5W1RJRF07CisJaWYgKElkeCA9PSAwKQorCQlyZXR1cm47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiVzPT09PldjaWQ9JWQuVElEPSVkIFxuIiwgX19GVU5DVElPTl9fLCBXY2lkLCBUSUQpKTsKKworCisJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlx0PT09PklkeCA9ICVsZCwgV2NpZD0lZC5USUQ9JWQsIFJFQ19CQV9TdGF0dXMgPSAlZCBcbiIsIElkeCwgV2NpZCwgVElELCBwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cykpOworCS8vCisJLy8gUHJlcGFyZSBEZWxCQSBhY3Rpb24gZnJhbWUgYW5kIHNlbmQgdG8gdGhlIHBlZXIuCisJLy8KKwlpZiAoKFRJRCA9PSBwQkFFbnRyeS0+VElEKSAmJiAocEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPT0gUmVjaXBpZW50X0FjY2VwdCkpCisJeworCQlNTE1FX0RFTEJBX1JFUV9TVFJVQ1QgICBEZWxiYVJlcTsKKwkJQk9PTEVBTiAJCQkJQ2FuY2VsbGVkOworCQlNTE1FX1FVRVVFX0VMRU0gKkVsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKwkJLy9VTE9ORyAgIG9mZnNldDsKKwkJLy9VSU5UMzIgIFZBTFVFOworCisJCVJUTVBDYW5jZWxUaW1lcigmcEJBRW50cnktPlJFQ0JBVGltZXIsICZDYW5jZWxsZWQpOworCisJCS8vCisJCS8vIDEuIFNlbmQgREVMQkEgQWN0aW9uIEZyYW1lCisJCS8vCisJCWlmIChiUGFzc2l2ZSA9PSBGQUxTRSkKKwkJeworCQkJTmRpc1plcm9NZW1vcnkoJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKKwkJCU5kaXNaZXJvTWVtb3J5KEVsZW0sIHNpemVvZihNTE1FX1FVRVVFX0VMRU0pKTsKKworCQkJQ09QWV9NQUNfQUREUihEZWxiYVJlcS5BZGRyLCBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHIpOworCQkJRGVsYmFSZXEuV2NpZCA9IFdjaWQ7CisJCQlEZWxiYVJlcS5USUQgPSBUSUQ7CisJCQlEZWxiYVJlcS5Jbml0aWF0b3IgPSBSRUNJUElFTlQ7CisjaWYgMQorCQkJRWxlbS0+TXNnTGVuICA9IHNpemVvZihEZWxiYVJlcSk7CisJCQlOZGlzTW92ZU1lbW9yeShFbGVtLT5Nc2csICZEZWxiYVJlcSwgc2l6ZW9mKERlbGJhUmVxKSk7CisJCQlNbG1lREVMQkFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCWtmcmVlKEVsZW0pOworI2Vsc2UKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgQUNUSU9OX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX09SSV9ERUxCQV9DQVRFLCBzaXplb2YoTUxNRV9ERUxCQV9SRVFfU1RSVUNUKSwgKFBWT0lEKSZEZWxiYVJlcSk7CisJCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisjZW5kaWYKKwkJfQorCisKKwkJLy8KKwkJLy8gMi4gRnJlZSByZXNvdXJjZSBvZiBCQSBzZXNzaW9uCisJCS8vCisJCS8vIGZsdXNoIGFsbCBwZW5kaW5nIHJlb3JkZXJpbmcgbXBkdXMKKwkJYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCQkvLyBFcmFzZSBCaXRtYXAgZmxhZy4KKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROworCQlwQkFFbnRyeS0+QkFXaW5TaXplID0gMDsKKwkJLy8gRXJhc2UgQml0bWFwIGZsYWcgYXQgc29mdHdhcmUgbWFjdGFibGUKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5SWEJBYml0bWFwICY9ICh+KDE8PChwQkFFbnRyeS0+VElEKSkpOworCQlwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBUmVjV2NpZEFycmF5W1RJRF0gPSAwOworCisJCVJUMjhYWF9ERUxfQkFfU0VTU0lPTl9GUk9NX0FTSUMocEFkLCBXY2lkLCBUSUQpOworCisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCX0KKworCUJBVGFibGVGcmVlUmVjRW50cnkocEFkLCBJZHgpOworfQorCitWT0lEIEJBU2Vzc2lvblRlYXJEb3duQUxMKAorCQkJCQkJIElOIE9VVCAgUFJUTVBfQURBUFRFUiBwQWQsCisJCQkJCQkgSU4gICAgICBVQ0hBUiBXY2lkKQoreworCWludCBpOworCisJZm9yIChpPTA7IGk8TlVNX09GX1RJRDsgaSsrKQorCXsKKwkJQkFPcmlTZXNzaW9uVGVhckRvd24ocEFkLCBXY2lkLCBpLCBGQUxTRSwgRkFMU0UpOworCQlCQVJlY1Nlc3Npb25UZWFyRG93bihwQWQsIFdjaWQsIGksIEZBTFNFKTsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlSZXRyeSBzZW5kaW5nIEFEREJBIFJlcWVzdC4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJUGFyYW1ldHJzOgorCXA4MDIzSGVhZGVyOiBpZiB0aGlzIGlzIGFscmVhZHkgODAyLjMgZm9ybWF0LCBwODAyM0hlYWRlciBpcyBOVUxMCisKKwlSZXR1cm4JOiBUUlVFIGlmIHB1dCBpbnRvIHJ4IHJlb3JkZXJpbmcgYnVmZmVyLCBzaG91bGRuJ3QgaW5kaWNhdGVyeGhlcmUuCisJCQkJRkFMU0UgLCB0aGVuIGNvbnRpbnVlIGluZGljYXRlcnggYXQgdGhpcyBtb21lbnQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBCQU9yaVNlc3Npb25TZXR1cFRpbWVvdXQoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCUJBX09SSV9FTlRSWSAgICAqcEJBRW50cnkgPSAoQkFfT1JJX0VOVFJZICopRnVuY3Rpb25Db250ZXh0OworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5OworCVBSVE1QX0FEQVBURVIgICBwQWQ7CisKKwlpZiAocEJBRW50cnkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcEFkID0gcEJBRW50cnktPnBBZGFwdGVyOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIERvIG5vdGhpbmcgaWYgbW9uaXRvciBtb2RlIGlzIG9uCisJCWlmIChNT05JVE9SX09OKHBBZCkpCisJCQlyZXR1cm47CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgUkFMSU5LX0FURQorCS8vIE5vdGhpbmcgdG8gZG8gaW4gQVRFIG1vZGUuCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBRW50cnktPldjaWRdOworCisJaWYgKChwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyA9PSBPcmlnaW5hdG9yX1dhaXRSZXMpICYmIChwQkFFbnRyeS0+VG9rZW4gPCBPUklfU0VTU0lPTl9NQVhfUkVUUlkpKQorCXsKKwkJTUxNRV9BRERCQV9SRVFfU1RSVUNUICAgIEFkZGJhUmVxOworCisJCU5kaXNaZXJvTWVtb3J5KCZBZGRiYVJlcSwgc2l6ZW9mKEFkZGJhUmVxKSk7CisJCUNPUFlfTUFDX0FERFIoQWRkYmFSZXEucEFkZHIsIHBFbnRyeS0+QWRkcik7CisJCUFkZGJhUmVxLldjaWQgPSAoVUNIQVIpKHBFbnRyeS0+QWlkKTsKKwkJQWRkYmFSZXEuVElEID0gcEJBRW50cnktPlRJRDsKKwkJQWRkYmFSZXEuQmFCdWZTaXplID0gcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdDsKKwkJQWRkYmFSZXEuVGltZU91dFZhbHVlID0gMDsKKwkJQWRkYmFSZXEuVG9rZW4gPSBwQkFFbnRyeS0+VG9rZW47CisJCU1sbWVFbnF1ZXVlKHBBZCwgQUNUSU9OX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FERF9CQV9DQVRFLCBzaXplb2YoTUxNRV9BRERCQV9SRVFfU1RSVUNUKSwgKFBWT0lEKSZBZGRiYVJlcSk7CisJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwkJLy9EQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJBIE9yaSBTZXNzaW9uIFRpbWVvdXQoJWQpIDogU2VuZCBBREQgQkEgYWdhaW5cbiIsIHBCQUVudHJ5LT5Ub2tlbikpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgT3JpIFNlc3Npb24gVGltZW91dCglZCkgdG8gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggVGlkOiVkIFdjaWQ6JWRcbiIKKwkJLHBCQUVudHJ5LT5Ub2tlbgorCQkscEVudHJ5LT5BZGRyWzBdLHBFbnRyeS0+QWRkclsxXSxwRW50cnktPkFkZHJbMl0KKwkJLHBFbnRyeS0+QWRkclszXSxwRW50cnktPkFkZHJbNF0scEVudHJ5LT5BZGRyWzVdCisJCSxwQkFFbnRyeS0+VElELHBFbnRyeS0+QWlkKSk7CisKKwkJcEJBRW50cnktPlRva2VuKys7CisJCVJUTVBTZXRUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsIE9SSV9CQV9TRVNTSU9OX1RJTUVPVVQpOworCX0KKwllbHNlCisJeworCQlCQVRhYmxlRnJlZU9yaUVudHJ5KHBBZCwgcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtwQkFFbnRyeS0+VElEXSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVJldHJ5IHNlbmRpbmcgQUREQkEgUmVxZXN0LgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlQYXJhbWV0cnM6CisJcDgwMjNIZWFkZXI6IGlmIHRoaXMgaXMgYWxyZWFkeSA4MDIuMyBmb3JtYXQsIHA4MDIzSGVhZGVyIGlzIE5VTEwKKworCVJldHVybgk6IFRSVUUgaWYgcHV0IGludG8gcnggcmVvcmRlcmluZyBidWZmZXIsIHNob3VsZG4ndCBpbmRpY2F0ZXJ4aGVyZS4KKwkJCQlGQUxTRSAsIHRoZW4gY29udGludWUgaW5kaWNhdGVyeCBhdCB0aGlzIG1vbWVudC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEJBUmVjU2Vzc2lvbklkbGVUaW1lb3V0KAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKworCUJBX1JFQ19FTlRSWSAgICAqcEJBRW50cnkgPSAoQkFfUkVDX0VOVFJZICopRnVuY3Rpb25Db250ZXh0OworCVBSVE1QX0FEQVBURVIgICBwQWQ7CisJVUxPTkcgICAgICAgICAgIE5vdzMyOworCisJaWYgKHBCQUVudHJ5ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICgocEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPT0gUmVjaXBpZW50X0FjY2VwdCkpCisJeworCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3czMik7CisKKwkJaWYgKFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciArIFJFQ19CQV9TRVNTSU9OX0lETEVfVElNRU9VVCkpKQorCQl7CisJCQlwQWQgPSBwQkFFbnRyeS0+cEFkYXB0ZXI7CisJCQkvLyBmbHVzaCBhbGwgcGVuZGluZyByZW9yZGVyaW5nIG1wZHVzCisJCQliYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7CisJCQlwcmludGsoIiVsZDogUkVDIEJBIHNlc3Npb24gVGltZW91dFxuIiwgTm93MzIpOworCQl9CisJfQorfQorCisKK1ZPSUQgUGVlckFkZEJBUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKKworeworCS8vCTcuNC40LjEKKwkvL1VMT05HCUlkeDsKKwlVQ0hBUiAgIFN0YXR1cyA9IDE7CisJVUNIQVIgICBwQWRkcls2XTsKKwlGUkFNRV9BRERCQV9SU1AgQUREZnJhbWU7CisJUFVDSEFSICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgIE5TdGF0dXM7CisJUEZSQU1FX0FEREJBX1JFUSAgcEFkZHJlcUZyYW1lID0gTlVMTDsKKwkvL1VDSEFSCQlCdWZTaXplOworCVVMT05HICAgICAgIEZyYW1lTGVuOworCVBVTE9ORyAgICAgIHB0ZW1wOworCVBNQUNfVEFCTEVfRU5UUlkJcE1hY0VudHJ5OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgPT0+IChXY2lkID0gJWQpXG4iLCBfX0ZVTkNUSU9OX18sIEVsZW0tPldjaWQpKTsKKworCS8vaGV4X2R1bXAoIkFkZEJBUmVxIiwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4pOworCisJLy9BRERCQSBSZXF1ZXN0IGZyb20gdW5rbm93biBwZWVyLCBpZ25vcmUgdGhpcy4KKwlpZiAoRWxlbS0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuOworCisJcE1hY0VudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF07CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQSAtIFBlZXJBZGRCQVJlcUFjdGlvbi0tLS0+IFxuIikpOworCXB0ZW1wID0gKFBVTE9ORylFbGVtLT5Nc2c7CisJLy9EQkdQUklOVF9SQVcoUlRfREVCVUdfRU1VLCAoIiUwOHg6OiAlMDh4OjogJTA4eDo6ICUwOHg6OiAlMDh4OjogJTA4eDo6ICUwOHg6OiAlMDh4OjogJTA4eFxuIiwgKihwdGVtcCksICoocHRlbXArMSksICoocHRlbXArMiksICoocHRlbXArMyksICoocHRlbXArNCksICoocHRlbXArNSksICoocHRlbXArNiksICoocHRlbXArNyksICoocHRlbXArOCkpKTsKKworCWlmIChQZWVyQWRkQkFSZXFBY3Rpb25TYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgcEFkZHIpKQorCXsKKworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJCQURlY2xpbmUgPT0gRkFMU0UpICYmIElTX0hUX1NUQShwTWFjRW50cnkpKQorCQl7CisJCQlwQWRkcmVxRnJhbWUgPSAoUEZSQU1FX0FEREJBX1JFUSkoJkVsZW0tPk1zZ1swXSk7CisJCQlwcmludGsoIlJjdiBXY2lkKCVkKSBBZGRCQVJlcVxuIiwgRWxlbS0+V2NpZCk7CisJCQlpZiAoQkFSZWNTZXNzaW9uQWRkKHBBZCwgJnBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0sIHBBZGRyZXFGcmFtZSkpCisJCQkJU3RhdHVzID0gMDsKKwkJCWVsc2UKKwkJCQlTdGF0dXMgPSAzODsgLy8gbW9yZSBwYXJhbWV0ZXJzIGhhdmUgaW52YWxpZCB2YWx1ZXMKKwkJfQorCQllbHNlCisJCXsKKwkJCVN0YXR1cyA9IDM3OyAvLyB0aGUgcmVxdWVzdCBoYXMgYmVlbiBkZWNsaW5lZC4KKwkJfQorCX0KKworCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLlZhbGlkQXNDTEkpCisJCUFTU0VSVChwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLlNzdCA9PSBTU1RfQVNTT0MpOworCisJcEFkZHJlcUZyYW1lID0gKFBGUkFNRV9BRERCQV9SRVEpKCZFbGVtLT5Nc2dbMF0pOworCS8vIDIuIEFsd2F5cyBzZW5kIGJhY2sgQUREQkEgUmVzcG9uc2UKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtIFBlZXJCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlOZGlzWmVyb01lbW9yeSgmQUREZnJhbWUsIHNpemVvZihGUkFNRV9BRERCQV9SU1ApKTsKKwkvLyAyLTEuIFByZXBhcmUgQUREQkEgUmVzcG9uc2UgZnJhbWUuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChBREhPQ19PTihwQWQpKQorCQkJQWN0SGVhZGVySW5pdChwQWQsICZBRERmcmFtZS5IZHIsIHBBZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCWVsc2UKKwkJCUFjdEhlYWRlckluaXQocEFkLCAmQUREZnJhbWUuSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkZHIpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlBRERmcmFtZS5DYXRlZ29yeSA9IENBVEVHT1JZX0JBOworCUFERGZyYW1lLkFjdGlvbiA9IEFEREJBX1JFU1A7CisJQUREZnJhbWUuVG9rZW4gPSBwQWRkcmVxRnJhbWUtPlRva2VuOworCS8vIFdoYXQgaXMgdGhlIFN0YXR1cyBjb2RlPz8gIG5lZWQgdG8gY2hlY2suCisJQUREZnJhbWUuU3RhdHVzQ29kZSA9IFN0YXR1czsKKwlBRERmcmFtZS5CYVBhcm0uQkFQb2xpY3kgPSBJTU1FRF9CQTsKKwlBRERmcmFtZS5CYVBhcm0uQU1TRFVTdXBwb3J0ZWQgPSAwOworCUFERGZyYW1lLkJhUGFybS5USUQgPSBwQWRkcmVxRnJhbWUtPkJhUGFybS5USUQ7CisJQUREZnJhbWUuQmFQYXJtLkJ1ZlNpemUgPSBtaW4oKChVQ0hBUilwQWRkcmVxRnJhbWUtPkJhUGFybS5CdWZTaXplKSwgKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQpOworCWlmIChBRERmcmFtZS5CYVBhcm0uQnVmU2l6ZSA9PSAwKQorCXsKKwkJQUREZnJhbWUuQmFQYXJtLkJ1ZlNpemUgPSA2NDsKKwl9CisJQUREZnJhbWUuVGltZU91dFZhbHVlID0gMDsgLy9wQWRkcmVxRnJhbWUtPlRpbWVPdXRWYWx1ZTsKKworCSooVVNIT1JUICopKCZBRERmcmFtZS5CYVBhcm0pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJkFERGZyYW1lLkJhUGFybSkpOworCUFERGZyYW1lLlN0YXR1c0NvZGUgPSBjcHUybGUxNihBRERmcmFtZS5TdGF0dXNDb2RlKTsKKwlBRERmcmFtZS5UaW1lT3V0VmFsdWUgPSBjcHUybGUxNihBRERmcmFtZS5UaW1lT3V0VmFsdWUpOworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCSAgc2l6ZW9mKEZSQU1FX0FEREJBX1JTUCksICAmQUREZnJhbWUsCisJCQkgIEVORF9PRl9BUkdTKTsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyglZCk6IFRJRCglZCksIEJ1ZlNpemUoJWQpIDw9PSBcbiIsIF9fRlVOQ1RJT05fXywgRWxlbS0+V2NpZCwgQUREZnJhbWUuQmFQYXJtLlRJRCwKKwkJCQkJCQkgIEFERGZyYW1lLkJhUGFybS5CdWZTaXplKSk7Cit9CisKKworVk9JRCBQZWVyQWRkQkFSc3BBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQorCit7CisJLy9VQ0hBUgkJSWR4LCBpOworCS8vUFVDSEFSCQkgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlQRlJBTUVfQUREQkFfUlNQICAgIHBGcmFtZSA9IE5VTEw7CisJLy9QQkFfT1JJX0VOVFJZCQlwQkFFbnRyeTsKKworCS8vQUREQkEgUmVzcG9uc2UgZnJvbSB1bmtub3duIHBlZXIsIGlnbm9yZSB0aGlzLgorCWlmIChFbGVtLT5XY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQlyZXR1cm47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyA9PT4gV2NpZCglZClcbiIsIF9fRlVOQ1RJT05fXywgRWxlbS0+V2NpZCkpOworCisJLy9oZXhfZHVtcCgiUGVlckFkZEJBUnNwQWN0aW9uKCkiLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbik7CisKKwlpZiAoUGVlckFkZEJBUnNwQWN0aW9uU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4pKQorCXsKKwkJcEZyYW1lID0gKFBGUkFNRV9BRERCQV9SU1ApKCZFbGVtLT5Nc2dbMF0pOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlx0XHQgU3RhdHVzQ29kZSA9ICVkXG4iLCBwRnJhbWUtPlN0YXR1c0NvZGUpKTsKKwkJc3dpdGNoIChwRnJhbWUtPlN0YXR1c0NvZGUpCisJCXsKKwkJCWNhc2UgMDoKKwkJCQkvLyBJIHdhbnQgYSBCQXNlc3Npb24gd2l0aCB0aGlzIHBlZXIgYXMgYW4gb3JpZ2luYXRvci4KKwkJCQlCQU9yaVNlc3Npb25BZGQocEFkLCAmcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXSwgcEZyYW1lKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLy8gY2hlY2sgc3RhdHVzID09IFVTRUQgPz8/CisJCQkJQkFPcmlTZXNzaW9uVGVhckRvd24ocEFkLCBFbGVtLT5XY2lkLCBwRnJhbWUtPkJhUGFybS5USUQsIFRSVUUsIEZBTFNFKTsKKwkJCQlicmVhazsKKwkJfQorCQkvLyBSY3YgRGVjbGluZSBTdGF0dXNDb2RlCisJCWlmICgocEZyYW1lLT5TdGF0dXNDb2RlID09IDM3KQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgICAgICAgICAgfHwgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiBTVEFfVEdOX1dJRklfT04ocEFkKSAmJiAocEZyYW1lLT5TdGF0dXNDb2RlICE9IDApKQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworICAgICAgICAgICAgKQorCQl7CisJCQlwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLkJBRGVjbGluZUJpdG1hcCB8PSAxPDxwRnJhbWUtPkJhUGFybS5USUQ7CisJCX0KKwl9Cit9CisKK1ZPSUQgUGVlckRlbEJBQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKKworeworCS8vVUNIQVIJCQkJSWR4OworCS8vUFVDSEFSCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVBGUkFNRV9ERUxCQV9SRVEgICAgcERlbEZyYW1lID0gTlVMTDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiJXMgPT0+XG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkvL0RFTEJBIFJlcXVlc3QgZnJvbSB1bmtub3duIHBlZXIsIGlnbm9yZSB0aGlzLgorCWlmIChQZWVyRGVsQkFBY3Rpb25TYW5pdHkocEFkLCBFbGVtLT5XY2lkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbikpCisJeworCQlwRGVsRnJhbWUgPSAoUEZSQU1FX0RFTEJBX1JFUSkoJkVsZW0tPk1zZ1swXSk7CisJCWlmIChwRGVsRnJhbWUtPkRlbGJhUGFybS5Jbml0aWF0b3IgPT0gT1JJR0lOQVRPUikKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQSAtIFBlZXJEZWxCQUFjdGlvbi0tLS0+IE9SSUdJTkFUT1JcbiIpKTsKKwkJCUJBUmVjU2Vzc2lvblRlYXJEb3duKHBBZCwgRWxlbS0+V2NpZCwgcERlbEZyYW1lLT5EZWxiYVBhcm0uVElELCBUUlVFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgLSBQZWVyRGVsQkFBY3Rpb24tLS0tPiBSRUNJUElFTlQsIFJlYXNvbiA9ICVkXG4iLCAgcERlbEZyYW1lLT5SZWFzb25Db2RlKSk7CisJCQkvL2hleF9kdW1wKCJEZWxCQSBGcmFtZSIsIHBEZWxGcmFtZSwgRWxlbS0+TXNnTGVuKTsKKwkJCUJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZCwgRWxlbS0+V2NpZCwgcERlbEZyYW1lLT5EZWxiYVBhcm0uVElELCBUUlVFLCBGQUxTRSk7CisJCX0KKwl9Cit9CisKKworQk9PTEVBTiBDbnRsRW5xdWV1ZUZvclJlY3YoCisJCQkJCQkgIElOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwkJCQkJCSAgSU4gVUxPTkcJCQkJV2NpZCwKKwkJCQkJCSAgSU4gVUxPTkcJCQkJTXNnTGVuLAorCQkJCQkJICBJTiBQRlJBTUVfQkFfUkVRCQlwTXNnKQoreworCVBGUkFNRV9CQV9SRVEgICBwRnJhbWUgPSBwTXNnOworCS8vUFJUTVBfUkVPUkRFUkJVRglwQnVmZmVyOworCS8vUFJUTVBfUkVPUkRFUkJVRglwRG1hQnVmOworCVBCQV9SRUNfRU5UUlkgcEJBRW50cnk7CisJLy9CT09MRUFOIAlSZXN1bHQ7CisJVUxPTkcgICBJZHg7CisJLy9VQ0hBUglOdW1SeFBrdDsKKwlVQ0hBUglUSUQ7Ly8sIGk7CisKKwlUSUQgPSAoVUNIQVIpcEZyYW1lLT5CQVJDb250cm9sLlRJRDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzKCk6IEJBUi1XY2lkKCVsZCksIFRpZCAoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIFdjaWQsIFRJRCkpOworCS8vaGV4X2R1bXAoIkJBUiIsIChQQ0hBUikgcEZyYW1lLCBNc2dMZW4pOworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJCXJldHVybiBGQUxTRTsKKworCS8vIEZpcnN0IGNoZWNrIHRoZSBzaXplLCBpdCBNVVNUIG5vdCBleGNlZWQgdGhlIG1sbWUgcXVldWUgc2l6ZQorCWlmIChNc2dMZW4gPiBNR01UX0RNQV9CVUZGRVJfU0laRSkKKwl7CisJCURCR1BSSU5UX0VSUigoIkNudGxFbnF1ZXVlRm9yUmVjdjogZnJhbWUgdG9vIGxhcmdlLCBzaXplID0gJWxkIFxuIiwgTXNnTGVuKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZWxzZSBpZiAoTXNnTGVuICE9IHNpemVvZihGUkFNRV9CQV9SRVEpKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQ250bEVucXVldWVGb3JSZWN2OiBCbG9ja0FjayBSZXF1ZXN0IGZyYW1lIGxlbmd0aCBzaXplID0gJWxkIGluY29ycmVjdFxuIiwgTXNnTGVuKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZWxzZSBpZiAoTXNnTGVuICE9IHNpemVvZihGUkFNRV9CQV9SRVEpKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQ250bEVucXVldWVGb3JSZWN2OiBCbG9ja0FjayBSZXF1ZXN0IGZyYW1lIGxlbmd0aCBzaXplID0gJWxkIGluY29ycmVjdFxuIiwgTXNnTGVuKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoKFdjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSkgJiYgKFRJRCA8IDgpKQorCQl7CisJCS8vIGlmIHRoaXMgcmVjZWl2aW5nIHBhY2tldCBpcyBmcm9tIFNBIHRoYXQgaXMgaW4gb3VyIE9yaUVudHJ5LiBTaW5jZSBXQ0lEIDw5IGhhcyBkaXJlY3QgbWFwcGluZy4gbm8gbmVlZCBzZWFyY2guCisJCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFSZWNXY2lkQXJyYXlbVElEXTsKKwkJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKwkJfQorCQllbHNlCisJCXsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJBUiglbGQpIDogVGlkICglZCkgLSAlMDR4OiUwNHhcbiIsIFdjaWQsIFRJRCwgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxLCBwQkFFbnRyeS0+TGFzdEluZFNlcSApKTsKKworCWlmIChTRVFfU01BTExFUihwQkFFbnRyeS0+TGFzdEluZFNlcSwgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxLCBNQVhTRVEpKQorCXsKKwkJLy9wcmludGsoIkJBUiBTZXEgPSAleCwgTGFzdEluZFNlcSA9ICV4XG4iLCBwRnJhbWUtPkJBU3RhcnRpbmdTZXEuZmllbGQuU3RhcnRTZXEsIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKwkJYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19sZV9zZXEocEFkLCBwQkFFbnRyeSwgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxKTsKKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSAocEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID09IDApID8gTUFYU0VRIDoocEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxIC0xKTsKKwl9CisJLy9iYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7CisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCitEZXNjcmlwdGlvbiA6IFNlbmQgUFNNUCBBY3Rpb24gZnJhbWUgSWYgUFNNUCBtb2RlIHN3aXRjaGVzLgorKi8KK1ZPSUQgU2VuZFBTTVBBY3Rpb24oCisJCQkJICAgSU4gUFJUTVBfQURBUFRFUgkJcEFkLAorCQkJCSAgIElOIFVDSEFSCQkJCVdjaWQsCisJCQkJICAgSU4gVUNIQVIJCQkJUHNtcCkKK3sKKwlQVUNIQVIgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgIE5TdGF0dXM7CisJLy9VTE9ORyAgICAgICAgICAgSWR4OworCUZSQU1FX1BTTVBfQUNUSU9OICAgRnJhbWU7CisJVUxPTkcgICAgICAgICAgIEZyYW1lTGVuOworI2lmZGVmIFJUMzB4eAorCVVDSEFSCQkJYmJwZGF0YT0wOworCVVJTlQzMgkJCW1hY2RhdGE7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkJBIC0gTWxtZUFEREJBQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQWRkcik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlGcmFtZS5DYXRlZ29yeSA9IENBVEVHT1JZX0hUOworCUZyYW1lLkFjdGlvbiA9IFNNUFNfQUNUSU9OOworCXN3aXRjaCAoUHNtcCkKKwl7CisJCWNhc2UgTU1QU19FTkFCTEU6CisjaWZkZWYgUlQzMHh4CisJCQlpZiAoSVNfUlQzMDkwKHBBZCkpCisJCQl7CisJCQkJLy8gZGlzYWJsZSBNTVBTIEJCUCBjb250cm9sIHJlZ2lzdGVyCisJCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmYmJwZGF0YSk7CisJCQkJYmJwZGF0YSAmPSB+KDB4MDQpOwkvL2JpdCAyCisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgYmJwZGF0YSk7CisKKwkJCQkvLyBkaXNhYmxlIE1NUFMgTUFDIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIDB4MTIxMCwgJm1hY2RhdGEpOworCQkJCW1hY2RhdGEgJj0gfigweDA5KTsJLy9iaXQgMCwgMworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTIxMCwgbWFjZGF0YSk7CisJCQl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJCQlGcmFtZS5Qc21wID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE1NUFNfRFlOQU1JQzoKKyNpZmRlZiBSVDMweHgKKwkJCWlmIChJU19SVDMwOTAocEFkKSkKKwkJCXsKKwkJCQkvLyBlbmFibGUgTU1QUyBCQlAgY29udHJvbCByZWdpc3RlcgorCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJmJicGRhdGEpOworCQkJCWJicGRhdGEgfD0gMHgwNDsJLy9iaXQgMgorCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIGJicGRhdGEpOworCisJCQkJLy8gZW5hYmxlIE1NUFMgTUFDIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIDB4MTIxMCwgJm1hY2RhdGEpOworCQkJCW1hY2RhdGEgfD0gMHgwOTsJLy9iaXQgMCwgMworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTIxMCwgbWFjZGF0YSk7CisJCQl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJCQlGcmFtZS5Qc21wID0gMzsKKwkJCWJyZWFrOworCQljYXNlIE1NUFNfU1RBVElDOgorI2lmZGVmIFJUMzB4eAorCQkJaWYgKElTX1JUMzA5MChwQWQpKQorCQkJeworCQkJCS8vIGVuYWJsZSBNTVBTIEJCUCBjb250cm9sIHJlZ2lzdGVyCisJCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmYmJwZGF0YSk7CisJCQkJYmJwZGF0YSB8PSAweDA0OwkvL2JpdCAyCisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgYmJwZGF0YSk7CisKKwkJCQkvLyBlbmFibGUgTU1QUyBNQUMgY29udHJvbCByZWdpc3RlcgorCQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgMHgxMjEwLCAmbWFjZGF0YSk7CisJCQkJbWFjZGF0YSB8PSAweDA5OwkvL2JpdCAwLCAzCisJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgMHgxMjEwLCBtYWNkYXRhKTsKKwkJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCUZyYW1lLlBzbXAgPSAxOworCQkJYnJlYWs7CisJfQorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkgIHNpemVvZihGUkFNRV9QU01QX0FDVElPTiksICAgICAgJkZyYW1lLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJIVCAtIFNlbmRQU01QQWN0aW9uKCAlZCApICBcbiIsIEZyYW1lLlBzbXApKTsKK30KKworCisjZGVmaW5lIFJBRElPX01FQVNVUkVNRU5UX1JFUVVFU1RfQUNUSU9OCTAKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VECit7CisJVUNIQVIJUmVndWxhdG9yeUNsYXNzOworCVVDSEFSCUNoYW5uZWxOdW1iZXI7CisJVVNIT1JUCVJhbmRvbUludGVydmFsOworCVVTSE9SVAlNZWFzdXJlbWVudER1cmF0aW9uOworCVVDSEFSCU1lYXN1cmVtZW50TW9kZTsKKwlVQ0hBUiAgIEJTU0lEW01BQ19BRERSX0xFTl07CisJVUNIQVIJUmVwb3J0aW5nQ29uZGl0aW9uOworCVVDSEFSCVRocmVzaG9sZDsKKwlVQ0hBUiAgIFNTSURJRVsyXTsJCQkvLyAyIGJ5dGUKK30gQkVBQ09OX1JFUVVFU1Q7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRAoreworCVVDSEFSCUlEOworCVVDSEFSCUxlbmd0aDsKKwlVQ0hBUglUb2tlbjsKKwlVQ0hBUglSZXF1ZXN0TW9kZTsKKwlVQ0hBUglUeXBlOworfSBNRUFTVVJFTUVOVF9SRVE7CisKKworCisKK3ZvaWQgY29udmVydF9yZW9yZGVyaW5nX3BhY2tldF90b19wcmVBTVNEVV9vcl84MDJfM19wYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTiAgVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlQTkRJU19QQUNLRVQJcFJ4UGt0OworCVVDSEFSCQkJSGVhZGVyODAyXzNbTEVOR1RIXzgwMl8zXTsKKworCS8vIDEuIGdldCA4MDIuMyBIZWFkZXIKKwkvLyAyLiByZW1vdmUgTExDCisJLy8gCQlhLiBwb2ludGVyIHBSeEJsay0+cERhdGEgdG8gcGF5bG9hZAorCS8vICAgICAgYi4gbW9kaWZ5IHBSeEJsay0+RGF0YVNpemUKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCVJUTVBfODAyXzExX1JFTU9WRV9MTENfQU5EX0NPTlZFUlRfVE9fODAyXzMocFJ4QmxrLCBIZWFkZXI4MDJfMyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworCXBSeFBrdCA9IFJUUEtUX1RPX09TUEtUKHBSeEJsay0+cFJ4UGFja2V0KTsKKworCVJUUEtUX1RPX09TUEtUKHBSeFBrdCktPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKKwlSVFBLVF9UT19PU1BLVChwUnhQa3QpLT5kYXRhID0gcFJ4QmxrLT5wRGF0YTsKKwlSVFBLVF9UT19PU1BLVChwUnhQa3QpLT5sZW4gPSBwUnhCbGstPkRhdGFTaXplOworCVJUUEtUX1RPX09TUEtUKHBSeFBrdCktPnRhaWwgPSBSVFBLVF9UT19PU1BLVChwUnhQa3QpLT5kYXRhICsgUlRQS1RfVE9fT1NQS1QocFJ4UGt0KS0+bGVuOworCisJLy8KKwkvLyBjb3B5IDgwMi4zIGhlYWRlciwgaWYgbmVjZXNzYXJ5CisJLy8KKwlpZiAoIVJYX0JMS19URVNUX0ZMQUcocFJ4QmxrLCBmUlhfQU1TRFUpKQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisjaWZkZWYgTElOVVgKKwkJCU5kaXNNb3ZlTWVtb3J5KHNrYl9wdXNoKHBSeFBrdCwgTEVOR1RIXzgwMl8zKSwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMyk7CisjZW5kaWYKKyNpZmRlZiBVQ09TCisJCQlOZGlzTW92ZU1lbW9yeShuZXRfcGt0X3B1c2gocFJ4UGt0LCBMRU5HVEhfODAyXzMpLCBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zKTsKKyNlbmRpZgorCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorfQorCisKKyNkZWZpbmUgSU5ESUNBVEVfTEVHQUNZX09SX0FNU0RVKF9wQWQsIF9wUnhCbGssIF9mcm9tV2hpY2hCU1NJRCkJCVwKKwlkbwkJCQkJCQkJCQkJCQkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCVwKKyAgICAJaWYgKFJYX0JMS19URVNUX0ZMQUcoX3BSeEJsaywgZlJYX0FNU0RVKSkJCQkJCQlcCisgICAgCXsJCQkJCQkJCQkJCQkJCQkJXAorICAgIAkJSW5kaWNhdGVfQU1TRFVfUGFja2V0KF9wQWQsIF9wUnhCbGssIF9mcm9tV2hpY2hCU1NJRCk7CQlcCisgICAgCX0JCQkJCQkJCQkJCQkJCQkJXAorCQllbHNlIGlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9FQVApKQkJCQkJXAorCQl7CQkJCQkJCQkJCQkJCQkJCVwKKwkJCUluZGljYXRlX0VBUE9MX1BhY2tldChfcEFkLCBfcFJ4QmxrLCBfZnJvbVdoaWNoQlNTSUQpOwkJXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKyAgICAJZWxzZQkJCQkJCQkJCQkJCQkJCVwKKyAgICAJewkJCQkJCQkJCQkJCQkJCQlcCisgICAgCQlJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KF9wQWQsIF9wUnhCbGssIF9mcm9tV2hpY2hCU1NJRCk7CQlcCisgICAgCX0JCQkJCQkJCQkJCQkJCQkJXAorCX0gd2hpbGUgKDApOworCisKKworc3RhdGljIFZPSUQgYmFfZW5xdWV1ZV9yZW9yZGVyaW5nX3BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQQkFfUkVDX0VOVFJZCXBCQUVudHJ5LAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKwlVSU5UMTYJU2VxdWVuY2UgPSAoVUlOVDE2KSBwUnhCbGstPnBIZWFkZXItPlNlcXVlbmNlOworCisJbXBkdV9ibGsgPSBiYV9tcGR1X2Jsa19hbGxvYyhwQWQpOworCWlmIChtcGR1X2JsayAhPSBOVUxMKQorCXsKKwkJLy8gV3JpdGUgUnhEIGJ1ZmZlciBhZGRyZXNzICYgYWxsb2NhdGVkIGJ1ZmZlciBsZW5ndGgKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisKKwkJbXBkdV9ibGstPlNlcXVlbmNlID0gU2VxdWVuY2U7CisKKwkJbXBkdV9ibGstPmJBTVNEVSA9IFJYX0JMS19URVNUX0ZMQUcocFJ4QmxrLCBmUlhfQU1TRFUpOworCisJCWNvbnZlcnRfcmVvcmRlcmluZ19wYWNrZXRfdG9fcHJlQU1TRFVfb3JfODAyXzNfcGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisKKwkJU1RBVFNfSU5DX1JYX1BBQ0tFVFMocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisKKyAgICAgICAgLy8KKwkJLy8gaXQgaXMgbmVjZXNzYXJ5IGZvciByZW9yZGVyaW5nIHBhY2tldCB0byByZWNvcmQKKwkJLy8gd2hpY2ggQlNTIGl0IGNvbWUgZnJvbQorCQkvLworCQlSVE1QX1NFVF9QQUNLRVRfSUYocFJ4QmxrLT5wUnhQYWNrZXQsIEZyb21XaGljaEJTU0lEKTsKKworCQltcGR1X2Jsay0+cFBhY2tldCA9IHBSeEJsay0+cFJ4UGFja2V0OworCisJCWlmIChiYV9yZW9yZGVyaW5nX21wZHVfaW5zZXJ0c29ydGVkKCZwQkFFbnRyeS0+bGlzdCwgbXBkdV9ibGspID09IEZBTFNFKQorCQl7CisJCQkvLyBoYWQgYmVlbiBhbHJlYWR5IHdpdGhpbiByZW9yZGVyaW5nIGxpc3QKKwkJCS8vIGRvbid0IGluZGljYXRlCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQkJYmFfbXBkdV9ibGtfZnJlZShwQWQsIG1wZHVfYmxrKTsKKwkJfQorCisJCUFTU0VSVCgoMDw9IHBCQUVudHJ5LT5saXN0LnFsZW4pICAmJiAocEJBRW50cnktPmxpc3QucWxlbiA8PSBwQkFFbnRyeS0+QkFXaW5TaXplKSk7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgICgiISEhICglZCkgQ2FuJ3QgYWxsb2NhdGUgcmVvcmRlcmluZyBtcGR1IGJsa1xuIiwKKwkJCQkJCQkJICAgcEJBRW50cnktPmxpc3QucWxlbikpOworCQkvKgorCQkgKiBmbHVzaCBhbGwgcGVuZGluZyByZW9yZGVyaW5nIG1wZHVzCisJCSAqIGFuZCByZWNldmluZyBtcGR1IHRvIHVwcGVyIGxheWVyCisJCSAqIG1ha2UgdGNwL2lwIHRvIHRha2UgY2FyZSByZW9yZGVyaW5nIG1lY2hhbmlzbQorCQkgKi8KKwkJLy9iYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7CisJCWJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKHBBZCwgcEJBRW50cnksIFNlcXVlbmNlKTsKKworCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFNlcXVlbmNlOworCQlJTkRJQ0FURV9MRUdBQ1lfT1JfQU1TRFUocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbmRpY2F0ZSB0aGlzIHBhY2tldCB0byB1cHBlciBsYXllciBvciBwdXQgaXQgaW50byByZW9yZGVyaW5nIGJ1ZmZlcgorCisJUGFyYW1ldHJzOgorCQlwUnhCbGsgICAgICAgICA6IGNhcnJ5IG5lY2Vzc2FyeSBwYWNrZXQgaW5mbyA4MDIuMTEgZm9ybWF0CisJCUZyb21XaGljaEJTU0lEIDogdGhlIHBhY2tldCByZWNlaXZlZCBmcm9tIHdoaWNoIEJTUworCisJUmV0dXJuCToKKwkJCSAgbm9uZQorCisJTm90ZSAgICA6CisJICAgICAgICAgIHRoZSBwYWNrZXQgcXVldWVkIGludG8gcmVvcmRlcmluZyBidWZmZXIgbmVlZCB0byBjb3ZlciB0byA4MDIuMyBmb3JtYXQKKwkJCSAgb3IgcHJlX0FNU0RVIGZvcm1hdAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworVk9JRCBJbmRpY2F0ZV9BTVBEVV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCVVTSE9SVAkJCQlJZHg7CisJUEJBX1JFQ19FTlRSWQkJcEJBRW50cnkgPSBOVUxMOworCVVJTlQxNgkJCQlTZXF1ZW5jZSA9IHBSeEJsay0+cEhlYWRlci0+U2VxdWVuY2U7CisJVUxPTkcJCQkJTm93MzI7CisJVUNIQVIJCQkJV2NpZCA9IHBSeEJsay0+cFJ4V0ktPldpcmVsZXNzQ2xpSUQ7CisJVUNIQVIJCQkJVElEID0gcFJ4QmxrLT5wUnhXSS0+VElEOworCisKKwlpZiAoIVJYX0JMS19URVNUX0ZMQUcocFJ4QmxrLCBmUlhfQU1TRFUpICYmICAocFJ4QmxrLT5EYXRhU2l6ZSA+IE1BWF9SWF9QS1RfTEVOKSkKKwl7CisJCS8vIHJlbGVhc2UgcGFja2V0CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoV2NpZCA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCXsKKwkJSWR4ID0gcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5CQVJlY1djaWRBcnJheVtUSURdOworCQlpZiAoSWR4ID09IDApCisJCXsKKwkJCS8qIFJlYyBCQSBTZXNzaW9uIGhhZCBiZWVuIHRvcm4gZG93biAqLworCQkJSU5ESUNBVEVfTEVHQUNZX09SX0FNU0RVKHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCQlyZXR1cm47CisJCX0KKwkJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKwl9CisJZWxzZQorCXsKKwkJLy8gaW1wb3NzaWJsZSAhISEKKwkJQVNTRVJUKDApOworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJQVNTRVJUKHBCQUVudHJ5KTsKKworCS8vIHVwZGF0ZSBsYXN0IHJ4IHRpbWUKKwlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3czMik7CisKKwlwQkFFbnRyeS0+cmN2U2VxID0gU2VxdWVuY2U7CisKKworCWJhX2ZsdXNoX3Jlb3JkZXJpbmdfdGltZW91dF9tcGR1cyhwQWQsIHBCQUVudHJ5LCBOb3czMik7CisJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7CisKKwkvLworCS8vIFJlc2V0IExhc3QgSW5kaWNhdGUgU2VxdWVuY2UKKwkvLworCWlmIChwQkFFbnRyeS0+TGFzdEluZFNlcSA9PSBSRVNFVF9SQ1ZfU0VRKQorCXsKKwkJQVNTRVJUKChwQkFFbnRyeS0+bGlzdC5xbGVuID09IDApICYmIChwQkFFbnRyeS0+bGlzdC5uZXh0ID09IE5VTEwpKTsKKworCQkvLyByZXNldCByY3Ygc2VxdWVuY2Ugb2YgQkEgc2Vzc2lvbgorCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFNlcXVlbmNlOworCQlwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIgPSBOb3czMjsKKwkJSU5ESUNBVEVfTEVHQUNZX09SX0FNU0RVKHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCXJldHVybjsKKwl9CisKKworCS8vCisJLy8gSS4gQ2hlY2sgaWYgaW4gb3JkZXIuCisJLy8KKwlpZiAoU0VRX1NURVBPTkUoU2VxdWVuY2UsIHBCQUVudHJ5LT5MYXN0SW5kU2VxLCBNQVhTRVEpKQorCXsKKwkJVVNIT1JUICBMYXN0SW5kU2VxOworCisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7CisJCUlORElDQVRFX0xFR0FDWV9PUl9BTVNEVShwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworIAkJTGFzdEluZFNlcSA9IGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfaW5fb3JkZXIocEFkLCBwQkFFbnRyeSwgcEJBRW50cnktPkxhc3RJbmRTZXEpOworCQlpZiAoTGFzdEluZFNlcSAhPSBSRVNFVF9SQ1ZfU0VRKQorCQl7CisJCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IExhc3RJbmRTZXE7CisJCX0KKwkJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7CisJfQorCS8vCisJLy8gSUkuIERyb3AgRHVwbGljYXRlZCBQYWNrZXQKKwkvLworCWVsc2UgaWYgKFNlcXVlbmNlID09IHBCQUVudHJ5LT5MYXN0SW5kU2VxKQorCXsKKworCQkvLyBkcm9wIGFuZCByZWxlYXNlIHBhY2tldAorCQlwQkFFbnRyeS0+bkRyb3BQYWNrZXQrKzsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisJLy8KKwkvLyBJSUkuIERyb3AgT2xkIFJlY2VpdmVkIFBhY2tldAorCS8vCisJZWxzZSBpZiAoU0VRX1NNQUxMRVIoU2VxdWVuY2UsIHBCQUVudHJ5LT5MYXN0SW5kU2VxLCBNQVhTRVEpKQorCXsKKworCQkvLyBkcm9wIGFuZCByZWxlYXNlIHBhY2tldAorCQlwQkFFbnRyeS0+bkRyb3BQYWNrZXQrKzsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisJLy8KKwkvLyBJVi4gUmVjZWl2ZSBTZXF1ZW5jZSB3aXRoaW4gV2luZG93IFNpemUKKwkvLworCWVsc2UgaWYgKFNFUV9TTUFMTEVSKFNlcXVlbmNlLCAoKChwQkFFbnRyeS0+TGFzdEluZFNlcStwQkFFbnRyeS0+QkFXaW5TaXplKzEpKSAmIE1BWFNFUSksIE1BWFNFUSkpCisJeworCQliYV9lbnF1ZXVlX3Jlb3JkZXJpbmdfcGFja2V0KHBBZCwgcEJBRW50cnksIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCX0KKwkvLworCS8vIFYuIFJlY2VpdmUgc2VxIHN1cnBhc3NlcyBXaW4obGFzdHNlcSArIG5NU0RVKS4gU28gcmVmcmVzaCBhbGwgcmVvcmRlciBidWZmZXIKKwkvLworCWVsc2UKKwl7CisJCUxPTkcgV2luU3RhcnRTZXEsIFRtcFNlcTsKKworCisJCVRtcFNlcSA9IFNlcXVlbmNlIC0gKHBCQUVudHJ5LT5CQVdpblNpemUpIC0xOworCQlpZiAoVG1wU2VxIDwgMCkKKwkJeworCQkJVG1wU2VxID0gKE1BWFNFUSsxKSArIFRtcFNlcTsKKwkJfQorCQlXaW5TdGFydFNlcSA9IChUbXBTZXErMSkgJiBNQVhTRVE7CisJCWJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKHBBZCwgcEJBRW50cnksIFdpblN0YXJ0U2VxKTsKKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBXaW5TdGFydFNlcTsgLy9UbXBTZXE7CisKKwkJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7CisKKwkJYmFfZW5xdWV1ZV9yZW9yZGVyaW5nX3BhY2tldChwQWQsIHBCQUVudHJ5LCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKworCQlUbXBTZXEgPSBiYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2luX29yZGVyKHBBZCwgcEJBRW50cnksIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKwkJaWYgKFRtcFNlcSAhPSBSRVNFVF9SQ1ZfU0VRKQorCQl7CisJCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFRtcFNlcTsKKwkJfQorCX0KK30KKworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWY5MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2RhdGEuYwpAQCAtMCwwICsxLDI4MjcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisjZGVmaW5lIE1BWF9UWF9JTl9UQlRUCQkoMTYpCisKKworVUNIQVIJU05BUF84MDJfMUhbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKK1VDSEFSCVNOQVBfQlJJREdFX1RVTk5FTFtdID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4Zjh9OworLy8gQWRkIENpc2NvIEFpcm9uZXQgU05BUCBoZWFkZSBmb3IgQ0NYMiBzdXBwb3J0CitVQ0hBUglTTkFQX0FJUk9ORVRbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAwfTsKK1VDSEFSCUNLSVBfTExDX1NOQVBbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAyfTsKK1VDSEFSCUVBUE9MX0xMQ19TTkFQW109IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDhlfTsKK1VDSEFSCUVBUE9MW10gPSB7MHg4OCwgMHg4ZX07CitVQ0hBUiAgIFRQSURbXSA9IHsweDgxLCAweDAwfTsgLyogVkxBTiByZWxhdGVkICovCisKK1VDSEFSCUlQWFtdID0gezB4ODEsIDB4Mzd9OworVUNIQVIJQVBQTEVfVEFMS1tdID0gezB4ODAsIDB4ZjN9OworVUNIQVIJUmF0ZUlkVG9QbGNwU2lnbmFsWzEyXSA9IHsKKwkgMCwgLyogUkFURV8xICovCTEsIC8qIFJBVEVfMiAqLyAJMiwgLyogUkFURV81XzUgKi8JMywgLyogUkFURV8xMSAqLwkvLyBzZWUgQkJQIHNwZWMKKwkxMSwgLyogUkFURV82ICovICAgMTUsIC8qIFJBVEVfOSAqLyAgICAxMCwgLyogUkFURV8xMiAqLyAgIDE0LCAvKiBSQVRFXzE4ICovCS8vIHNlZSBJRUVFODAyLjExYS0xOTk5IHAuMTQKKwkgOSwgLyogUkFURV8yNCAqLyAgMTMsIC8qIFJBVEVfMzYgKi8JOCwgLyogUkFURV80OCAqLyAgIDEyICAvKiBSQVRFXzU0ICovIH07IC8vIHNlZSBJRUVFODAyLjExYS0xOTk5IHAuMTQKKworVUNIQVIJIE9mZG1TaWduYWxUb1JhdGVJZFsxNl0gPSB7CisJUkFURV81NCwgIFJBVEVfNTQsCVJBVEVfNTQsICBSQVRFXzU0LAkvLyBPRkRNIFBMQ1AgU2lnbmFsID0gMCwgIDEsICAyLCAgMyByZXNwZWN0aXZlbHkKKwlSQVRFXzU0LCAgUkFURV81NCwJUkFURV81NCwgIFJBVEVfNTQsCS8vIE9GRE0gUExDUCBTaWduYWwgPSA0LCAgNSwgIDYsICA3IHJlc3BlY3RpdmVseQorCVJBVEVfNDgsICBSQVRFXzI0LAlSQVRFXzEyLCAgUkFURV82LAkvLyBPRkRNIFBMQ1AgU2lnbmFsID0gOCwgIDksICAxMCwgMTEgcmVzcGVjdGl2ZWx5CisJUkFURV81NCwgIFJBVEVfMzYsCVJBVEVfMTgsICBSQVRFXzksCS8vIE9GRE0gUExDUCBTaWduYWwgPSAxMiwgMTMsIDE0LCAxNSByZXNwZWN0aXZlbHkKK307CisKK1VDSEFSCSBPZmRtUmF0ZVRvUnh3aU1DU1sxMl0gPSB7CisJMCwgIDAsCTAsICAwLAorCTAsICAxLAkyLCAgMywJLy8gT0ZETSByYXRlIDYsOSwxMiwxOCA9IHJ4d2kgbWNzIDAsMSwyLDMKKwk0LCAgNSwJNiwgIDcsCS8vIE9GRE0gcmF0ZSAyNCwzNiw0OCw1NCA9IHJ4d2kgbWNzIDQsNSw2LDcKK307CitVQ0hBUgkgUnh3aU1DU1RvT2ZkbVJhdGVbMTJdID0geworCVJBVEVfNiwgIFJBVEVfOSwJUkFURV8xMiwgIFJBVEVfMTgsCisJUkFURV8yNCwgIFJBVEVfMzYsCVJBVEVfNDgsICBSQVRFXzU0LAkvLyBPRkRNIHJhdGUgNiw5LDEyLDE4ID0gcnh3aSBtY3MgMCwxLDIsMworCTQsICA1LAk2LCAgNywJLy8gT0ZETSByYXRlIDI0LDM2LDQ4LDU0ID0gcnh3aSBtY3MgNCw1LDYsNworfTsKKworY2hhciogICBNQ1NUb01icHNbXSA9IHsiMU1icHMiLCIyTWJwcyIsIjUuNU1icHMiLCIxMU1icHMiLCIwNk1icHMiLCIwOU1icHMiLCIxMk1icHMiLCIxOE1icHMiLCIyNE1icHMiLCIzNk1icHMiLCI0OE1icHMiLCI1NE1icHMiLCJNTS0wIiwiTU0tMSIsIk1NLTIiLCJNTS0zIiwiTU0tNCIsIk1NLTUiLCJNTS02IiwiTU0tNyIsIk1NLTgiLCJNTS05IiwiTU0tMTAiLCJNTS0xMSIsIk1NLTEyIiwiTU0tMTMiLCJNTS0xNCIsIk1NLTE1IiwiTU0tMzIiLCJlZTEiLCJlZTIiLCJlZTMifTsKKworVUNIQVIgZGVmYXVsdF9jd21pbltdPXtDV19NSU5fSU5fQklUUywgQ1dfTUlOX0lOX0JJVFMsIENXX01JTl9JTl9CSVRTLTEsIENXX01JTl9JTl9CSVRTLTJ9OworLy9VQ0hBUiBkZWZhdWx0X2N3bWF4W109e0NXX01BWF9JTl9CSVRTLCBDV19NQVhfSU5fQklUUywgQ1dfTUlOX0lOX0JJVFMsIENXX01JTl9JTl9CSVRTLTF9OworVUNIQVIgZGVmYXVsdF9zdGFfYWlmc25bXT17Myw3LDIsMn07CisKK1VDSEFSIE1hcFVzZXJQcmlvcml0eVRvQWNjZXNzQ2F0ZWdvcnlbOF0gPSB7UUlEX0FDX0JFLCBRSURfQUNfQkssIFFJRF9BQ19CSywgUUlEX0FDX0JFLCBRSURfQUNfVkksIFFJRF9BQ19WSSwgUUlEX0FDX1ZPLCBRSURfQUNfVk99OworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlBUEkgZm9yIE1MTUUgdG8gdHJhbnNtaXQgbWFuYWdlbWVudCBmcmFtZSB0byBBUCAoQlNTIE1vZGUpCisJb3Igc3RhdGlvbiAoSUJTUyBNb2RlKQorCisJQXJndW1lbnRzOgorCQlwQWQgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJUG9pbnRlciB0byB0aGUgb3V0Z29pbmcgODAyLjExIGZyYW1lCisJCUxlbmd0aAkJU2l6ZSBvZiBvdXRnb2luZyBtYW5hZ2VtZW50IGZyYW1lCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKwkJTkRJU19TVEFUVVNfUEVORElORworCQlORElTX1NUQVRVU19TVUNDRVNTCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIE1pbmlwb3J0TU1SZXF1ZXN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVJTlQJCQlMZW5ndGgpCit7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQ7CisJTkRJU19TVEFUVVMgIAlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVVMT05HCSAJCUZyZWVOdW07CisJVUNIQVIJCQlJcnFTdGF0ZTsKKwlVQ0hBUgkJCXJ0bXBId0hkcltUWElORk9fU0laRSArIFRYV0lfU0laRV07IC8vUlRNUF9IV19IRFJfTEVOXTsKKworCUFTU0VSVChMZW5ndGggPD0gTUdNVF9ETUFfQlVGRkVSX1NJWkUpOworCisJUXVlSWR4PTM7CisKKwkvLyAyODYwQyB1c2UgVHggUmluZworCisJSXJxU3RhdGUgPSBwQWQtPmlycV9kaXNhYmxlZDsKKworCWRvCisJeworCQkvLyBSZXNldCBpcyBpbiBwcm9ncmVzcywgc3RvcCBpbW1lZGlhdGVseQorCQlpZiAoIFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykgfHwKKwkJCSBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCl8fAorCQkJICFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApKQorCQl7CisJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQkJYnJlYWs7CisJCX0KKworCQkvLyBDaGVjayBGcmVlIHByaW9yaXR5IHF1ZXVlCisJCS8vIFNpbmNlIHdlIHVzZSBQQkYgUXVldWUyIGZvciBtYW5hZ2VtZW50IGZyYW1lLiAgSXRzIGNvcnJlc3BvbmRpbmcgRE1BIHJpbmcgc2hvdWxkIGJlIHVzaW5nIFR4UmluZy4KKworCQkvLyAyODYwQyB1c2UgVHggUmluZworCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCXsKKwkJCUZyZWVOdW0gPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGcmVlTnVtID0gR0VUX01HTVRSSU5HX0ZSRUVOTyhwQWQpOworCQl9CisKKwkJaWYgKChGcmVlTnVtID4gMCkpCisJCXsKKwkJCS8vIFdlIG5lZWQgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgcnRtcCBoYXJkd2FyZSBoZWFkZXIuIGkuZS4sIFR4V0kgZm9yIFJUMjg2MCBhbmQgVHhJbmZvK1R4V0kgZm9yIFJUMjg3MAorCQkJTmRpc1plcm9NZW1vcnkoJnJ0bXBId0hkciwgKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKSk7CisJCQlTdGF0dXMgPSBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBQYWNrZXQsIChQVUNIQVIpJnJ0bXBId0hkciwgKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKSwgcERhdGEsIExlbmd0aCk7CisJCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJNaW5pcG9ydE1NUmVxdWVzdCAoZXJyb3I6OiBjYW4ndCBhbGxvY2F0ZSBORElTIFBBQ0tFVClcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLy9wQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJLy9wQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfMjsKKworCisJCQlTdGF0dXMgPSBNbG1lSGFyZFRyYW5zbWl0KHBBZCwgUXVlSWR4LCBwUGFja2V0KTsKKwkJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQlSVE1QRnJlZU5kaXNQYWNrZXQocEFkLCBwUGFja2V0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuTWdtdFJpbmdGdWxsQ291bnQrKzsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlFpZHgoJWQpLCBub3QgZW5vdWdoIHNwYWNlIGluIE1nbXRSaW5nLCBNZ210UmluZ0Z1bGxDb3VudD0lbGQhXG4iLAorCQkJCQkJCQkJCVF1ZUlkeCwgcEFkLT5SYWxpbmtDb3VudGVycy5NZ210UmluZ0Z1bGxDb3VudCkpOworCQl9CisKKwl9IHdoaWxlIChGQUxTRSk7CisKKworCXJldHVybiBTdGF0dXM7Cit9CisKKworCitORElTX1NUQVRVUyBNbG1lRGF0YUhhcmRUcmFuc21pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUglRdWVJZHgsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpOworCisjZGVmaW5lIE1BWF9EQVRBTU1fUkVUUlkJMworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUFQSSBmb3IgTUxNRSB0byB0cmFuc21pdCBtYW5hZ2VtZW50IGZyYW1lIHRvIEFQIChCU1MgTW9kZSkKKwlvciBzdGF0aW9uIChJQlNTIE1vZGUpCisKKwlBcmd1bWVudHM6CisJCXBBZCBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQlQb2ludGVyIHRvIHRoZSBvdXRnb2luZyA4MDIuMTEgZnJhbWUKKwkJTGVuZ3RoCQlTaXplIG9mIG91dGdvaW5nIG1hbmFnZW1lbnQgZnJhbWUKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfRkFJTFVSRQorCQlORElTX1NUQVRVU19QRU5ESU5HCisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgTWluaXBvcnREYXRhTU1SZXF1ZXN0KAorCQkJCQkJCSBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkJCQkJCQkgSU4gIFVDSEFSICAgICAgICAgICBRdWVJZHgsCisJCQkJCQkJIElOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJCQkJCQkJIElOICBVSU5UICAgICAgICAgICAgTGVuZ3RoKQoreworCVBORElTX1BBQ0tFVCAgICBwUGFja2V0OworCU5ESVNfU1RBVFVTICBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVVMT05HICAgIEZyZWVOdW07CisJaW50IAlyZXRyeSA9IDA7CisJVUNIQVIgICAgICAgICAgIElycVN0YXRlOworCVVDSEFSCQkJcnRtcEh3SGRyW1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXTsgLy9SVE1QX0hXX0hEUl9MRU5dOworCisJQVNTRVJUKExlbmd0aCA8PSBNR01UX0RNQV9CVUZGRVJfU0laRSk7CisKKwkvLyAyODYwQyB1c2UgVHggUmluZworCUlycVN0YXRlID0gcEFkLT5pcnFfZGlzYWJsZWQ7CisKKwlkbworCXsKKwkJLy8gUmVzZXQgaXMgaW4gcHJvZ3Jlc3MsIHN0b3AgaW1tZWRpYXRlbHkKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykgfHwKKwkJCSBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCl8fAorCQkJIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkpCisJCXsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCQlicmVhazsKKwkJfQorCisJCS8vIENoZWNrIEZyZWUgcHJpb3JpdHkgcXVldWUKKwkJLy8gU2luY2Ugd2UgdXNlIFBCRiBRdWV1ZTIgZm9yIG1hbmFnZW1lbnQgZnJhbWUuICBJdHMgY29ycmVzcG9uZGluZyBETUEgcmluZyBzaG91bGQgYmUgdXNpbmcgVHhSaW5nLgorCisJCS8vIDI4NjBDIHVzZSBUeCBSaW5nCisKKwkJLy8gZnJlZSBUeChRdWVJZHgpIHJlc291cmNlcworCQlGcmVlTnVtID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOworCisJCWlmICgoRnJlZU51bSA+IDApKQorCQl7CisJCQkvLyBXZSBuZWVkIHRvIHJlc2VydmUgc3BhY2UgZm9yIHJ0bXAgaGFyZHdhcmUgaGVhZGVyLiBpLmUuLCBUeFdJIGZvciBSVDI4NjAgYW5kIFR4SW5mbytUeFdJIGZvciBSVDI4NzAKKwkJCU5kaXNaZXJvTWVtb3J5KCZydG1wSHdIZHIsIChUWElORk9fU0laRSArIFRYV0lfU0laRSkpOworCQkJU3RhdHVzID0gUlRNUEFsbG9jYXRlTmRpc1BhY2tldChwQWQsICZwUGFja2V0LCAoUFVDSEFSKSZydG1wSHdIZHIsIChUWElORk9fU0laRSArIFRYV0lfU0laRSksIHBEYXRhLCBMZW5ndGgpOworCQkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiTWluaXBvcnRNTVJlcXVlc3QgKGVycm9yOjogY2FuJ3QgYWxsb2NhdGUgTkRJUyBQQUNLRVQpXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCS8vcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzI7CisKKworCQkJU3RhdHVzID0gTWxtZURhdGFIYXJkVHJhbnNtaXQocEFkLCBRdWVJZHgsIHBQYWNrZXQpOworCQkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCVJUTVBGcmVlTmRpc1BhY2tldChwQWQsIHBQYWNrZXQpOworCQkJcmV0cnkgPSBNQVhfREFUQU1NX1JFVFJZOworCQl9CisJCWVsc2UKKwkJeworCQkJcmV0cnkgKys7CisKKwkJCXByaW50aygicmV0cnkgJWRcbiIsIHJldHJ5KTsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuTWdtdFJpbmdGdWxsQ291bnQrKzsKKworCQkJaWYgKHJldHJ5ID49IE1BWF9EQVRBTU1fUkVUUlkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUWlkeCglZCksIG5vdCBlbm91Z2ggc3BhY2UgaW4gRGF0YVJpbmcsIE1nbXRSaW5nRnVsbENvdW50PSVsZCFcbiIsCisJCQkJCQkJCQkJCVF1ZUlkeCwgcEFkLT5SYWxpbmtDb3VudGVycy5NZ210UmluZ0Z1bGxDb3VudCkpOworCQkJfQorCQl9CisKKwl9IHdoaWxlIChyZXRyeSA8IE1BWF9EQVRBTU1fUkVUUlkpOworCisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKworCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAorCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSB0cmFuc21pdCBmdW5jdGlvbgorCisJQXJndW1lbnRzOgorCQlwQWQgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwQnVmZmVyIAlQb2ludGVyIHRvCW1lbW9yeSBvZiBvdXRnb2luZyBmcmFtZQorCQlMZW5ndGgJCVNpemUgb2Ygb3V0Z29pbmcgbWFuYWdlbWVudCBmcmFtZQorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19GQUlMVVJFCisJCU5ESVNfU1RBVFVTX1BFTkRJTkcKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUworCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUyBNbG1lSGFyZFRyYW5zbWl0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCWlmICgocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKQorI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisJCSkKKwl7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCQlyZXR1cm4gTWxtZUhhcmRUcmFuc21pdE1nbXRSaW5nKHBBZCxRdWVJZHgscFBhY2tldCk7CisKK30KKworTkRJU19TVEFUVVMgTWxtZURhdGFIYXJkVHJhbnNtaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJUXVlSWR4LAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCWlmICgocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKQorI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisJCSkKKwl7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworI2lmZGVmIFJUMjg3MAorCXJldHVybiBNbG1lSGFyZFRyYW5zbWl0TWdtdFJpbmcocEFkLFF1ZUlkeCxwUGFja2V0KTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KK30KKworCisKKworCitORElTX1NUQVRVUyBNbG1lSGFyZFRyYW5zbWl0TWdtdFJpbmcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJUXVlSWR4LAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCVBBQ0tFVF9JTkZPIAlQYWNrZXRJbmZvOworCVBVQ0hBUgkJCXBTcmNCdWZWQTsKKwlVSU5UCQkJU3JjQnVmTGVuOworCVBIRUFERVJfODAyXzExCXBIZWFkZXJfODAyXzExOworCUJPT0xFQU4gCQliQWNrUmVxdWlyZWQsIGJJbnNlcnRUaW1lc3RhbXA7CisJVUNIQVIJCQlNbG1lUmF0ZTsKKwlQVFhXSV9TVFJVQyAJcEZpcnN0VHhXSTsKKwlNQUNfVEFCTEVfRU5UUlkJKnBNYWNFbnRyeSA9IE5VTEw7CisKKwlSVE1QX1F1ZXJ5UGFja2V0SW5mbyhwUGFja2V0LCAmUGFja2V0SW5mbywgJnBTcmNCdWZWQSwgJlNyY0J1Zkxlbik7CisKKwkvLyBNYWtlIHN1cmUgTUdNVCByaW5nIHJlc291cmNlIHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgdGhyZWFkcworLy8gc2FtcGxlLCBmb3IgSVJRIExPQ0sgLT4gU0VNIExPQ0sKKy8vCUlycVN0YXRlID0gcEFkLT5pcnFfZGlzYWJsZWQ7CisvLwlpZiAoIUlycVN0YXRlKQorCQlSVE1QX1NFTV9MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7CisKKworCWlmIChwU3JjQnVmVkEgPT0gTlVMTCkKKwl7CisJCS8vIFRoZSBidWZmZXIgc2hvdWxkbid0IGJlIE5VTEwKKy8vCQlpZiAoIUlycVN0YXRlKQorCQkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBvdXRnb2luZyBmcmFtZSBhbHdheXMgd2FrZXVwIFBIWSB0byBwcmV2ZW50IGZyYW1lIGxvc3QKKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlwRmlyc3RUeFdJID0gKFBUWFdJX1NUUlVDKShwU3JjQnVmVkEgKyAgVFhJTkZPX1NJWkUpOworCXBIZWFkZXJfODAyXzExID0gKFBIRUFERVJfODAyXzExKSAocFNyY0J1ZlZBICsgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUpOyAvL1RYV0lfU0laRSk7CisKKwlpZiAocEhlYWRlcl84MDJfMTEtPkFkZHIxWzBdICYgMHgwMSkKKwl7CisJCU1sbWVSYXRlID0gcEFkLT5Db21tb25DZmcuQmFzaWNNbG1lUmF0ZTsKKwl9CisJZWxzZQorCXsKKwkJTWxtZVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKKwl9CisKKwkvLyBWZXJpZnkgTWxtZSByYXRlIGZvciBhIC8gZyBiYW5kcy4KKwlpZiAoKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA+IDE0KSAmJiAoTWxtZVJhdGUgPCBSQVRFXzYpKSAvLyAxMUEgYmFuZAorCQlNbG1lUmF0ZSA9IFJBVEVfNjsKKworCWlmICgocEhlYWRlcl84MDJfMTEtPkZDLlR5cGUgPT0gQlRZUEVfREFUQSkgJiYKKwkJKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfUU9TX05VTEwpKQorCXsKKwkJcE1hY0VudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwSGVhZGVyXzgwMl8xMS0+QWRkcjEpOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBGaXhlZCBXNTIgd2l0aCBBY3Rpdml0eSBzY2FuIGlzc3VlIGluIEFCR19NSVhFRCBhbmQgQUJHTl9NSVhFRCBtb2RlLgorCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdfTUlYRUQKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCXx8IHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHTl9NSVhFRAorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkpCisJCXsKKwkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IDE7CisJCQllbHNlCisJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSAwOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8KKwkvLyBTaG91bGQgbm90IGJlIGhhcmQgY29kZSB0byBzZXQgUHdyTWdtdCB0byAwIChQV1JfQUNUSVZFKQorCS8vIFNuaWNlIGl0J3MgYmVlbiBzZXQgdG8gMCB3aGlsZSBvbiBNZ3RNYWNIZWFkZXJJbml0CisJLy8gQnkgdGhlIHdheSB0aGlzIHdpbGwgY2F1c2UgZnJhbWUgdG8gYmUgc2VuZCBvbiBQV1JfU0FWRSBmYWlsZWQuCisJLy8KKwkvLyBwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IDA7IC8vIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpOworCS8vCisJLy8gSW4gV01NLVVBUFNELCBtbG1lIGZyYW1lIHNob3VsZCBiZSBzZXQgcHNtIGFzIHBvd2VyIHNhdmluZyBidXQgcHJvYmUgcmVxdWVzdCBmcmFtZQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgIC8vIERhdGEtTnVsbCBwYWNrZXRzIGFsc2UgcGFzcyB0aHJvdWdoIE1NUmVxdWVzdCBpbiBSVDI4NjAsIGhvd2V2ZXIsIHdlIGhvcGUgY29udHJvbCB0aGUgcHNtIGJpdCB0byBwYXNzIEFQU0QKKwlpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlICE9IEJUWVBFX0RBVEEpICYmIChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSAhPSBCVFlQRV9DTlRMKSkKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSAmJgorCQkJKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQUNUSU9OKSkKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Qd3JNZ210ID0gUFdSX1NBVkU7CisJCWVsc2UKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Qd3JNZ210ID0gUFdSX0FDVElWRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwliSW5zZXJ0VGltZXN0YW1wID0gRkFMU0U7CisJaWYgKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlID09IEJUWVBFX0NOVEwpIC8vIG11c3QgYmUgUFMtUE9MTAorCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJLy9TZXQgUE0gYml0IGluIHBzLXBvbGwsIHRvIGZpeCBXTEsgMS4yICBQb3dlclNhdmVNb2RlX2V4dCBmYWlsdXJlIGlzc3VlLgorCQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmIChwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX1BTX1BPTEwpKQorCQl7CisJCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCWJBY2tSZXF1aXJlZCA9IEZBTFNFOworCX0KKwllbHNlIC8vIEJUWVBFX01HTVQgb3IgQlRZUEVfREFUQShtdXN0IGJlIE5VTEwgZnJhbWUpCisJeworCQkvL3BBZC0+U2VxdWVuY2UrKzsKKwkJLy9wSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwQWQtPlNlcXVlbmNlOworCisJCWlmIChwSGVhZGVyXzgwMl8xMS0+QWRkcjFbMF0gJiAweDAxKSAvLyBNVUxUSUNBU1QsIEJST0FEQ0FTVAorCQl7CisJCQliQWNrUmVxdWlyZWQgPSBGQUxTRTsKKwkJCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9IDA7CisJCX0KKwkJZWxzZQorCQl7CisJCQliQWNrUmVxdWlyZWQgPSBUUlVFOworCQkJcEhlYWRlcl84MDJfMTEtPkR1cmF0aW9uID0gUlRNUENhbGNEdXJhdGlvbihwQWQsIE1sbWVSYXRlLCAxNCk7CisJCQlpZiAocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9QUk9CRV9SU1ApCisJCQl7CisJCQkJYkluc2VydFRpbWVzdGFtcCA9IFRSVUU7CisJCQl9CisJCX0KKwl9CisKKwlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwQWQtPlNlcXVlbmNlKys7CisJaWYgKHBBZC0+U2VxdWVuY2UgPjB4ZmZmKQorCQlwQWQtPlNlcXVlbmNlID0gMDsKKworCS8vIEJlZm9yZSByYWRhciBkZXRlY3Rpb24gZG9uZSwgbWdtdCBmcmFtZSBjYW4gbm90IGJlIHNlbnQgYnV0IHByb2JlIHJlcQorCS8vIEJlY2F1c2Ugd2UgbmVlZCB0byB1c2UgcHJvYmUgcmVxIHRvIHRyaWdnZXIgZHJpdmVyIHRvIHNlbmQgcHJvYmUgcmVxIGluIHBhc3NpdmUgc2NhbgorCWlmICgocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgIT0gU1VCVFlQRV9QUk9CRV9SRVEpCisJCSYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQorCQkmJiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiTWxtZUhhcmRUcmFuc21pdCAtLT4gcmFkYXIgZGV0ZWN0IG5vdCBpbiBub3JtYWwgbW9kZSAhISFcbiIpKTsKKy8vCQlpZiAoIUlycVN0YXRlKQorCQkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7CisJCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpcEhlYWRlcl84MDJfMTEsIERJUl9XUklURSwgRkFMU0UpOworI2VuZGlmCisKKwkvLworCS8vIGZpbGwgc2NhdHRlci1hbmQtZ2F0aGVyIGJ1ZmZlciBsaXN0IGludG8gVFhELiBJbnRlcm5hbGx5IGNyZWF0ZWQgTkRJUyBQQUNLRVQKKwkvLyBzaG91bGQgYWx3YXlzIGhhcyBvbmx5IG9uZSBvaHlzaWNhbCBidWZmZXIsIGFuZCB0aGUgd2hvbGUgZnJhbWUgc2l6ZSBlcXVhbHMKKwkvLyB0byB0aGUgZmlyc3Qgc2NhdHRlciBidWZmZXIgc2l6ZQorCS8vCisKKwkvLyBJbml0aWFsaXplIFRYIERlc2NyaXB0b3IKKwkvLyBGb3IgaW50ZXItZnJhbWUgZ2FwLCB0aGUgbnVtYmVyIGlzIGZvciB0aGlzIGZyYW1lIGFuZCBuZXh0IGZyYW1lCisJLy8gRm9yIE1MTUUgcmF0ZSwgd2Ugd2lsbCBmaXggYXMgMk1iIHRvIG1hdGNoIG90aGVyIHZlbmRvcidzIGltcGxlbWVudAorLy8JcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSAxOworCisvLyBtYW5hZ2VtZW50IGZyYW1lIGRvZXNuJ3QgbmVlZCBlbmNyeXB0aW9uLiBzbyB1c2UgUkVTRVJWRURfV0NJRCBubyBtYXR0ZXIgdSBhcmUgc2VuZGluZyB0byBzcGVjaWZpYyB3Y2lkIG9yIG5vdC4KKwlpZiAocE1hY0VudHJ5ID09IE5VTEwpCisJeworCQlSVE1QV3JpdGVUeFdJKHBBZCwgcEZpcnN0VHhXSSwgRkFMU0UsIEZBTFNFLCBiSW5zZXJ0VGltZXN0YW1wLCBGQUxTRSwgYkFja1JlcXVpcmVkLCBGQUxTRSwKKwkJMCwgUkVTRVJWRURfV0NJRCwgKFNyY0J1ZkxlbiAtIFRYSU5GT19TSVpFIC0gVFhXSV9TSVpFKSwgUElEX01HTVQsIDAsICAoVUNIQVIpcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUywgSUZTX0JBQ0tPRkYsIEZBTFNFLCAmcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0KTsKKwl9CisJZWxzZQorCXsKKwkJUlRNUFdyaXRlVHhXSShwQWQsIHBGaXJzdFR4V0ksIEZBTFNFLCBGQUxTRSwKKwkJCQkJYkluc2VydFRpbWVzdGFtcCwgRkFMU0UsIGJBY2tSZXF1aXJlZCwgRkFMU0UsCisJCQkJCTAsIHBNYWNFbnRyeS0+QWlkLCAoU3JjQnVmTGVuIC0gVFhJTkZPX1NJWkUgLSBUWFdJX1NJWkUpLAorCQkJCQlwTWFjRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MsIDAsCisJCQkJCShVQ0hBUilwTWFjRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MsCisJCQkJCUlGU19CQUNLT0ZGLCBGQUxTRSwgJnBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlKTsKKwl9CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcEZpcnN0VHhXSSwgVFlQRV9UWFdJKTsKKyNlbmRpZgorCisJLy8gTm93IGRvIGhhcmR3YXJlLWRlcGVuZWQga2ljayBvdXQuCisJSEFMX0tpY2tPdXRNZ210VHgocEFkLCBRdWVJZHgsIHBQYWNrZXQsIHBTcmNCdWZWQSwgU3JjQnVmTGVuKTsKKworCS8vIE1ha2Ugc3VyZSB0byByZWxlYXNlIE1HTVQgcmluZyByZXNvdXJjZQorLy8JaWYgKCFJcnFTdGF0ZSkKKwkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7CisJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlOZXcgRGVRdWV1ZSBQcm9jZWR1cmVzLgorCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgREVRVUVVRV9MT0NLKGxvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncykgCQkJCVwKKwkJCWRvewkJCQkJCQkJCQkJCQlcCisJCQkJaWYgKGJJbnRDb250ZXh0ID09IEZBTFNFKQkJCQkJCVwKKwkJCQlSVE1QX0lSUV9MT0NLKChsb2NrKSwgSXJxRmxhZ3MpOwkJXAorCQkJfXdoaWxlKDApCisKKyNkZWZpbmUgREVRVUVVRV9VTkxPQ0sobG9jaywgYkludENvbnRleHQsIElycUZsYWdzKQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJXAorCQkJCWlmIChiSW50Q29udGV4dCA9PSBGQUxTRSkJCQkJCQlcCisJCQkJCVJUTVBfSVJRX1VOTE9DSygobG9jayksIElycUZsYWdzKTsJXAorCQkJfXdoaWxlKDApCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlUeCBQYXRoIGRlc2lnbiBhbGdvcml0aG06CisJCUJhc2ljYWxseSwgd2UgZGl2aWRlIHRoZSBwYWNrZXRzIGludG8gZm91ciB0eXBlcywgQnJvYWRjYXN0L011bHRpY2FzdCwgMTFOIFJhdGUoQU1QRFUsIEFNU0RVLCBOb3JtYWwpLCBCL0cgUmF0ZShBUkFMSU5LLCBOb3JtYWwpLAorCQlTcGVjaWZpYyBQYWNrZXQgVHlwZS4gRm9sbG93aW5nIHNob3cgdGhlIGNsYXNzaWZpY2F0aW9uIHJ1bGUgYW5kIHBvbGljeSBmb3IgZWFjaCBraW5kcyBvZiBwYWNrZXRzLgorCQkJCUNsYXNzaWZpY2F0aW9uIFJ1bGU9PgorCQkJCQlNdWx0aWNhc3Q6ICgqYWRkcjEgJiAweDAxKSA9PSAweDAxCisJCQkJCVNwZWNpZmljIDogYkRIQ1BGcmFtZSwgYkFSUEZyYW1lLCBiRUFQT0xGcmFtZSwgZXRjLgorCQkJCQkxMU4gUmF0ZSA6IElmIHBlZXIgc3VwcG9ydCBIVAorCQkJCQkJCQkoMSkuQU1QRFUgIC0tIElmIFRYQkEgaXMgbmVnb3RpYXRlZC4KKwkJCQkJCQkJKDIpLkFNU0RVICAtLSBJZiBBTVNEVSBpcyBjYXBhYmxlIGZvciBib3RoIHBlZXIgYW5kIG91cnNlbGYuCisJCQkJCQkJCQkJCSopLiBBTVNEVSBjYW4gZW1iZWRkZWQgaW4gYSBBTVBEVSwgYnV0IG5vdyB3ZSBkaWRuJ3Qgc3VwcG9ydCBpdC4KKwkJCQkJCQkJKDMpLk5vcm1hbCAtLSBPdGhlciBwYWNrZXRzIHdoaWNoIHNlbmQgYXMgMTFuIHJhdGUuCisKKwkJCQkJQi9HIFJhdGUgOiBJZiBwZWVyIGlzIGIvZyBvbmx5LgorCQkJCQkJCQkoMSkuQVJBTElOSy0tIElmIGJvdGggb2YgcGVlci91cyBzdXBwcm90IFJhbGluayBwcm9wcmlldGFyeSBBZ2dyZWdhdGlvbiBhbmQgdGhlIFR4UmF0ZSBpcyBsYXJnZSB0aGFuIFJBVEVfNgorCQkJCQkJCQkoMikuTm9ybWFsIC0tIE90aGVyIHBhY2tldHMgd2hpY2ggc2VuZCBhcyBiL2cgcmF0ZS4KKwkJCQkJRnJhZ21lbnQ6CisJCQkJCQkJCVRoZSBwYWNrZXQgbXVzdCBiZSB1bmljYXN0LCBOT1QgQS1SQUxJTkssIE5PVCBBLU1TRFUsIE5PVCAxMW4sIHRoZW4gY2FuIGNvbnNpZGVyIGFib3V0IGZyYWdtZW50LgorCisJCQkJQ2xhc3NpZmllZCBQYWNrZXQgSGFuZGxlIFJ1bGU9PgorCQkJCQlNdWx0aWNhc3Q6CisJCQkJCQkJCU5vIEFDSywgCQkvL3BUeEJsay0+YkFja1JlcXVpcmVkID0gRkFMU0U7CisJCQkJCQkJCU5vIFdNTSwgCQkvL3BUeEJsay0+YldNTSA9IEZBTFNFOworCQkJCQkJCQlObyBwaWdneWJhY2ssICAgLy9wVHhCbGstPmJQaWdneUJhY2sgPSBGQUxTRTsKKwkJCQkJCQkJRm9yY2UgTG93UmF0ZSwgIC8vcFR4QmxrLT5iRm9yY2VMb3dSYXRlID0gVFJVRTsKKwkJCQkJU3BlY2lmaWMgOglCYXNpY2FsbHksIGZvciBzcGVjaWZpYyBwYWNrZXQsIHdlIHNob3VsZCBoYW5kbGUgaXQgc3BlY2lmaWNhbGx5LCBidXQgbm93IGFsbCBzcGVjaWZpYyBwYWNrZXRzIGFyZSB1c2UKKwkJCQkJCQkJCXRoZSBzYW1lIHBvbGljeSB0byBoYW5kbGUgaXQuCisJCQkJCQkJCUZvcmNlIExvd1JhdGUsICAvL3BUeEJsay0+YkZvcmNlTG93UmF0ZSA9IFRSVUU7CisKKwkJCQkJMTFOIFJhdGUgOgorCQkJCQkJCQlObyBwaWdneWJhY2ssCS8vcFR4QmxrLT5iUGlnZ3lCYWNrID0gRkFMU0U7CisKKwkJCQkJCQkJKDEpLkFNU0RVCisJCQkJCQkJCQlwVHhCbGstPmJXTU0gPSBUUlVFOworCQkJCQkJCQkoMikuQU1QRFUKKwkJCQkJCQkJCXBUeEJsay0+YldNTSA9IFRSVUU7CisJCQkJCQkJCSgzKS5Ob3JtYWwKKworCQkJCQlCL0cgUmF0ZSA6CisJCQkJCQkJCSgxKS5BUkFMSU5LCisKKwkJCQkJCQkJKDIpLk5vcm1hbAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBVQ0hBUiBUeFBrdENsYXNzaWZpY2F0aW9uKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFBORElTX1BBQ0tFVCAgcFBhY2tldCkKK3sKKwlVQ0hBUgkJCVR4RnJhbWVUeXBlID0gVFhfVU5LT1dOX0ZSQU1FOworCVVDSEFSCQkJV2NpZDsKKwlNQUNfVEFCTEVfRU5UUlkJKnBNYWNFbnRyeSA9IE5VTEw7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJQk9PTEVBTgkJCWJIVFJhdGUgPSBGQUxTRTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCVdjaWQgPSBSVE1QX0dFVF9QQUNLRVRfV0NJRChwUGFja2V0KTsKKwlpZiAoV2NpZCA9PSBNQ0FTVF9XQ0lEKQorCXsJLy8gSGFuZGxlIGZvciBSQSBpcyBCcm9hZGNhc3QvTXVsdGljYXN0IEFkZHJlc3MuCisJCXJldHVybiBUWF9NQ0FTVF9GUkFNRTsKKwl9CisKKwkvLyBIYW5kbGUgZm9yIHVuaWNhc3QgcGFja2V0cworCXBNYWNFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdOworCWlmIChSVE1QX0dFVF9QQUNLRVRfTE9XUkFURShwUGFja2V0KSkKKwl7CS8vIEl0J3MgYSBzcGVjaWZpYyBwYWNrZXQgbmVlZCB0byBmb3JjZSBsb3cgcmF0ZSwgaS5lLiwgYkRIQ1BGcmFtZSwgYkVBUE9MRnJhbWUsIGJXQUlGcmFtZQorCQlUeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKKwl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJZWxzZSBpZiAoSVNfSFRfUkFURShwTWFjRW50cnkpKQorCXsJLy8gaXQncyBhIDExbiBjYXBhYmxlIHBhY2tldAorCisJCS8vIERlcGVuZHMgb24gSFRQaHlNb2RlIHRvIGNoZWNrIGlmIHRoZSBwZWVyIHN1cHBvcnQgdGhlIEhUUmF0ZSB0cmFuc21pc3Npb24uCisJCS8vIAlDdXJyZW50bHkgZGlkbid0IHN1cHBvcnQgQS1NU0RVIGVtYmVkZGVkIGluIEEtTVBEVQorCQliSFRSYXRlID0gVFJVRTsKKwkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9NT1JFREFUQShwUGFja2V0KSB8fCAocE1hY0VudHJ5LT5Qc01vZGUgPT0gUFdSX1NBVkUpKQorCQkJVHhGcmFtZVR5cGUgPSBUWF9MRUdBQ1lfRlJBTUU7CisjaWZkZWYgVUFQU0RfQVBfU1VQUE9SVAorCQllbHNlIGlmIChSVE1QX0dFVF9QQUNLRVRfRU9TUChwUGFja2V0KSkKKwkJCVR4RnJhbWVUeXBlID0gVFhfTEVHQUNZX0ZSQU1FOworI2VuZGlmIC8vIFVBUFNEX0FQX1NVUFBPUlQgLy8KKwkJZWxzZSBpZigocE1hY0VudHJ5LT5UWEJBYml0bWFwICYgKDE8PChSVE1QX0dFVF9QQUNLRVRfVVAocFBhY2tldCkpKSkgIT0gMCkKKwkJCXJldHVybiBUWF9BTVBEVV9GUkFNRTsKKwkJZWxzZSBpZihDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCkpCisJCQlyZXR1cm4gVFhfQU1TRFVfRlJBTUU7CisJCWVsc2UKKwkJCVR4RnJhbWVUeXBlID0gVFhfTEVHQUNZX0ZSQU1FOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwllbHNlCisJewkvLyBpdCdzIGEgbGVnYWN5IGIvZyBwYWNrZXQuCisJCWlmICgoQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19BR0dSRUdBVElPTl9DQVBBQkxFKSAmJiBwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlKSAmJgorCQkJKFJUTVBfR0VUX1BBQ0tFVF9UWFJBVEUocFBhY2tldCkgPj0gUkFURV82KSAmJgorCQkJKCEoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSAmJiBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKSkpKQorCQl7CS8vIGlmIHBlZXIgc3VwcG9ydCBSYWxpbmsgQWdncmVnYXRpb24sIHdlIHVzZSBpdC4KKwkJCVR4RnJhbWVUeXBlID0gVFhfUkFMSU5LX0ZSQU1FOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhGcmFtZVR5cGUgPSBUWF9MRUdBQ1lfRlJBTUU7CisJCX0KKwl9CisKKwkvLyBDdXJyZW50bHksIG91ciBmcmFnbWVudCBvbmx5IHN1cHBvcnQgd2hlbiBhIHVuaWNhc3QgcGFja2V0IHNlbmQgYXMgTk9ULUFSQUxJTkssIE5PVC1BTVNEVSBhbmQgTk9ULUFNUERVLgorCWlmICgoUlRNUF9HRVRfUEFDS0VUX0ZSQUdNRU5UUyhwUGFja2V0KSA+IDEpICYmIChUeEZyYW1lVHlwZSA9PSBUWF9MRUdBQ1lfRlJBTUUpKQorCQlUeEZyYW1lVHlwZSA9IFRYX0ZSQUdfRlJBTUU7CisKKwlyZXR1cm4gVHhGcmFtZVR5cGU7Cit9CisKKworQk9PTEVBTiBSVE1QX0ZpbGxUeEJsa0luZm8oCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVFhfQkxLICpwVHhCbGspCit7CisJUEFDS0VUX0lORk8JCQlQYWNrZXRJbmZvOworCVBORElTX1BBQ0tFVAkJcFBhY2tldDsKKwlQTUFDX1RBQkxFX0VOVFJZCXBNYWNFbnRyeSA9IE5VTEw7CisKKwlwUGFja2V0ID0gcFR4QmxrLT5wUGFja2V0OworCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFR4QmxrLT5wU3JjQnVmSGVhZGVyLCAmcFR4QmxrLT5TcmNCdWZMZW4pOworCisJcFR4QmxrLT5XY2lkCSAJIAkJPSBSVE1QX0dFVF9QQUNLRVRfV0NJRChwUGFja2V0KTsKKwlwVHhCbGstPmFwaWR4CQkgCQk9IFJUTVBfR0VUX1BBQ0tFVF9JRihwUGFja2V0KTsKKwlwVHhCbGstPlVzZXJQcmlvcml0eSAJCT0gUlRNUF9HRVRfUEFDS0VUX1VQKHBQYWNrZXQpOworCXBUeEJsay0+RnJhbWVHYXAgPSBJRlNfSFRUWE9QOwkJLy8gQVNJQyBkZXRlcm1pbmUgRnJhbWUgR2FwCisKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX0NMRUFSX0VBUF9GUkFNRShwVHhCbGstPnBQYWNrZXQpKQorCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkNsZWFyRUFQRnJhbWUpOworCWVsc2UKKwkJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYkNsZWFyRUFQRnJhbWUpOworCisJLy8gRGVmYXVsdCB0byBjbGVhciB0aGlzIGZsYWcKKwlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iRm9yY2VOb25Rb1MpOworCisKKwlpZiAocFR4QmxrLT5XY2lkID09IE1DQVNUX1dDSUQpCisJeworCQlwVHhCbGstPnBNYWNFbnRyeSA9IE5VTEw7CisJCXsKKyNpZmRlZiBNQ0FTVF9SQVRFX1NQRUNJRklDCisJCQlQVUNIQVIgcERBID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCQkJaWYgKCgoKnBEQSAmIDB4MDEpID09IDB4MDEpICYmICgqcERBICE9IDB4ZmYpKQorCQkJCXBUeEJsay0+cFRyYW5zbWl0ID0gJnBBZC0+Q29tbW9uQ2ZnLk1DYXN0UGh5TW9kZTsKKwkJCWVsc2UKKyNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCisJCQkJcFR4QmxrLT5wVHJhbnNtaXQgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXS5IVFBoeU1vZGU7CisJCX0KKworCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iQWNrUmVxdWlyZWQpOwkvLyBBY2tSZXF1aXJlZCA9IEZBTFNFLCB3aGVuIGJyb2FkY2FzdCBwYWNrZXQgaW4gQWRob2MgbW9kZS4KKwkJLy9UWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkZvcmNlTG93UmF0ZSk7CisJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JBbGxvd0ZyYWcpOworCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iV01NKTsKKwkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9NT1JFREFUQShwUGFja2V0KSkKKwkJeworCQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7CisJCX0KKworCX0KKwllbHNlCisJeworCQlwVHhCbGstPnBNYWNFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BUeEJsay0+V2NpZF07CisJCXBUeEJsay0+cFRyYW5zbWl0ID0gJnBUeEJsay0+cE1hY0VudHJ5LT5IVFBoeU1vZGU7CisKKwkJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7CisKKworCQkvLyBGb3IgYWxsIHVuaWNhc3QgcGFja2V0cywgbmVlZCBBY2sgdW5sZXNzIHRoZSBBY2sgUG9saWN5IGlzIG5vdCBzZXQgYXMgTk9STUFMX0FDSy4KKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkFja1BvbGljeVtwVHhCbGstPlF1ZUlkeF0gIT0gTk9STUFMX0FDSykKKwkJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JBY2tSZXF1aXJlZCk7CisJCWVsc2UKKwkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iQWNrUmVxdWlyZWQpOworCisJCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCXsKKworCQkJCS8vIElmIHN1cHBvcnQgV01NLCBlbmFibGUgaXQuCisJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCkgJiYKKwkJCQkJQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSkpCisJCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iV01NKTsKKworLy8JCQkJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoKQorLy8JCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9BdXRvUmF0ZVN3aXRjaCk7CisJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKworCQlpZiAocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9MRUdBQ1lfRlJBTUUpCisJCXsKKwkJCWlmICggKFJUTVBfR0VUX1BBQ0tFVF9MT1dSQVRFKHBQYWNrZXQpKSB8fAorICAgICAgICAgICAgICAgICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKSAmJiAocE1hY0VudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9PSBNT0RFX0NDSykgJiYgKHBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9PSBSQVRFXzEpKSkKKwkJCXsJLy8gU3BlY2lmaWMgcGFja2V0LCBpLmUuLCBiREhDUEZyYW1lLCBiRUFQT0xGcmFtZSwgYldBSUZyYW1lLCBuZWVkIGZvcmNlIGxvdyByYXRlLgorCQkJCXBUeEJsay0+cFRyYW5zbWl0ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF0uSFRQaHlNb2RlOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCS8vIE1vZGlmeSB0aGUgV01NIGJpdCBmb3IgSUNWIGlzc3VlLiBJZiB3ZSBoYXZlIGEgcGFja2V0IHdpdGggRU9TUCBmaWVsZCBuZWVkIHRvIHNldCBhcyAxLCBob3cgdG8gaGFuZGxlIGl0Pz8/CisJCQkJaWYgKElTX0hUX1NUQShwVHhCbGstPnBNYWNFbnRyeSkgJiYKKwkJCQkJKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpKSAmJgorCQkJCQkoKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgPT0gVFJVRSkgJiYgQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSkpKQorCQkJCXsKKwkJCQkJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYldNTSk7CisJCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iRm9yY2VOb25Rb1MpOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKCAoSVNfSFRfUkFURShwTWFjRW50cnkpID09IEZBTFNFKSAmJgorCQkJCShDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX1BJR0dZQkFDS19DQVBBQkxFKSkpCisJCQl7CS8vIEN1cnJlbnRseSBwaWdneS1iYWNrIG9ubHkgc3VwcG9ydCB3aGVuIHBlZXIgaXMgb3BlcmF0ZSBpbiBiL2cgbW9kZS4KKwkJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYlBpZ2d5QmFjayk7CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCWlmIChSVE1QX0dFVF9QQUNLRVRfTU9SRURBVEEocFBhY2tldCkpCisJCQl7CisJCQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7CisJCQl9CisjaWZkZWYgVUFQU0RfQVBfU1VQUE9SVAorCQkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9FT1NQKHBQYWNrZXQpKQorCQkJeworCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iV01NX1VBUFNEX0VPU1ApOworCQkJfQorI2VuZGlmIC8vIFVBUFNEX0FQX1NVUFBPUlQgLy8KKwkJfQorCQllbHNlIGlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0ZSQUdfRlJBTUUpCisJCXsKKwkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iQWxsb3dGcmFnKTsKKwkJfQorCisJCXBNYWNFbnRyeS0+RGVidWdUeENvdW50Kys7CisJfQorCisJcmV0dXJuIFRSVUU7CisKK0ZpbGxUeEJsa0VycjoKKwlyZXR1cm4gRkFMU0U7Cit9CisKKworQk9PTEVBTiBDYW5Eb0FnZ3JlZ2F0ZVRyYW5zbWl0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIE5ESVNfUEFDS0VUICpwUGFja2V0LAorCUlOIFRYX0JMSwkJKnBUeEJsaykKK3sKKworCS8vcHJpbnRrKCJDaGVjayBpZiBjYW4gZG8gYWdncmVnYXRpb24hIFR4RnJhbWVUeXBlPSVkIVxuIiwgcFR4QmxrLT5UeEZyYW1lVHlwZSk7CisKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX1dDSUQocFBhY2tldCkgPT0gTUNBU1RfV0NJRCkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKFJUTVBfR0VUX1BBQ0tFVF9ESENQKHBQYWNrZXQpIHx8CisJCVJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwUGFja2V0KSB8fAorCQlSVE1QX0dFVF9QQUNLRVRfV0FJKHBQYWNrZXQpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlpZiAoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpICYmCisJCSgocFR4QmxrLT5Ub3RhbEZyYW1lTGVuICsgR0VUX09TX1BLVF9MRU4ocFBhY2tldCkpPiAoUlhfQlVGRkVSX0FHR1JFU0laRSAtIDEwMCkpKQorCXsJLy8gRm9yIEFNU0RVLCBhbGxvdyB0aGUgcGFja2V0cyB3aXRoIHRvdGFsIGxlbmd0aCA8IG1heC1hbXNkdSBzaXplCisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfUkFMSU5LX0ZSQU1FKSAmJgorCQkocFR4QmxrLT5UeFBhY2tldExpc3QuTnVtYmVyID09IDIpKQorCXsJLy8gRm9yIFJBTElOSy1BZ2dyZWdhdGlvbiwgYWxsb3cgdHdvIGZyYW1lcyBpbiBvbmUgYmF0Y2guCisJCXJldHVybiBGQUxTRTsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAoKElORlJBX09OKHBBZCkpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkgLy8gbXVzdCBiZSB1bmljYXN0IHRvIEFQCisJCXJldHVybiBUUlVFOworCWVsc2UKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJcmV0dXJuIEZBTFNFOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRvIGRvIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBhbmQgZXh0cmFjdCB0aGUgZmlyc3QgaXRlbSBvZiB3YWl0aW5nCisJCWxpc3QuIElmIGEgbnVtYmVyIG9mIGF2YWlsYWJsZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGNvdWxkIG1lZXQKKwkJdGhlIHJlcXVlc3Qgb2YgZXh0cmFjdGVkIGl0ZW0sIHRoZSBleHRyYWN0ZWQgaXRlbSB3aWxsIGJlIGZyYWdtZW50ZWQKKwkJaW50byBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLgorCisJQXJndW1lbnRzOgorCQlwQWQgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwUXVldWUJCVBvaW50ZXIgdG8gV2FpdGluZyBRdWV1ZQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBEZVF1ZXVlUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBCT09MRUFOICAgICAgICAgYkludENvbnRleHQsCisJSU4gIFVDSEFSCQkJUUlkeCwgLyogQnVsa091dFBpcGVJZCAqLworCUlOICBVQ0hBUiAgICAgICAgICAgTWF4X1R4X1BhY2tldHMpCit7CisJUFFVRVVFX0VOVFJZICAgIHBFbnRyeSA9IE5VTEw7CisJUE5ESVNfUEFDS0VUIAlwUGFja2V0OworCU5ESVNfU1RBVFVTICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVVDSEFSICAgICAgICAgICBDb3VudD0wOworCVBRVUVVRV9IRUFERVIgICBwUXVldWU7CisJVUxPTkcgICAgICAgICAgIEZyZWVOdW1iZXJbTlVNX09GX1RYX1JJTkddOworCVVDSEFSCQkJUXVlSWR4LCBzUUlkeCwgZVFJZHg7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFncyA9IDA7CisJQk9PTEVBTgkJCWhhc1R4RGVzYyA9IEZBTFNFOworCVRYX0JMSwkJCVR4QmxrOworCVRYX0JMSwkJCSpwVHhCbGs7CisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwlCT09MRUFOCQkJZmlyc3RSb3VuZDsKKwlSdG1wRGlhZ1N0cnVjdAkqcERpYWdTdHJ1Y3QgPSAmcEFkLT5EaWFnU3RydWN0OworI2VuZGlmCisKKworCWlmIChRSWR4ID09IE5VTV9PRl9UWF9SSU5HKQorCXsKKwkJc1FJZHggPSAwOworLy9QUyBwYWNrZXRzIHVzZSBIQ0NBIHF1ZXVlIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQllUUlkeCA9IDM7CS8vIDQgQUNzLCBzdGFydCBmcm9tIDAuCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCWVsc2UKKwl7CisJCXNRSWR4ID0gZVFJZHggPSBRSWR4OworCX0KKworCWZvciAoUXVlSWR4PXNRSWR4OyBRdWVJZHggPD0gZVFJZHg7IFF1ZUlkeCsrKQorCXsKKwkJQ291bnQ9MDsKKworCQlSVDI4WFhfU1RBUlRfREVRVUVVRShwQWQsIFF1ZUlkeCwgSXJxRmxhZ3MpOworCisjaWZkZWYgREJHX0RJQUdOT1NFCisJCWZpcnN0Um91bmQgPSAoKFF1ZUlkeCA9PSAwKSA/IFRSVUUgOiBGQUxTRSk7CisjZW5kaWYgLy8gREJHX0RJQUdOT1NFIC8vCisKKwkJd2hpbGUgKDEpCisJCXsKKwkJCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfAorCQkJCQkJCQkJCWZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKQorCQkJeworCQkJCVJUMjhYWF9TVE9QX0RFUVVFVUUocEFkLCBRdWVJZHgsIElycUZsYWdzKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWlmIChDb3VudCA+PSBNYXhfVHhfUGFja2V0cykKKwkJCQlicmVhazsKKworCQkJREVRVUVVRV9MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpOworCQkJaWYgKCZwQWQtPlR4U3dRdWV1ZVtRdWVJZHhdID09IE5VTEwpCisJCQl7CisjaWZkZWYgREJHX0RJQUdOT1NFCisJCQkJaWYgKGZpcnN0Um91bmQgPT0gVFJVRSkKKwkJCQkJcERpYWdTdHJ1Y3QtPlR4U1dRdWVDbnRbcERpYWdTdHJ1Y3QtPkFycmF5Q3VySWR4XVswXSsrOworI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCQkJCURFUVVFVUVfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpOworCQkJCWJyZWFrOworCQkJfQorCisKKwkJCS8vIHByb2JlIHRoZSBRdWV1ZSBIZWFkCisJCQlwUXVldWUgPSAmcEFkLT5UeFN3UXVldWVbUXVlSWR4XTsKKwkJCWlmICgocEVudHJ5ID0gcFF1ZXVlLT5IZWFkKSA9PSBOVUxMKQorCQkJeworCQkJCURFUVVFVUVfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlwVHhCbGsgPSAmVHhCbGs7CisJCQlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKXBUeEJsaywgc2l6ZW9mKFRYX0JMSykpOworCQkJLy9Jbml0aWFsaXplUXVldWVIZWFkZXIoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsJCS8vIERpZG4ndCBuZWVkIGl0IGJlY2F1c2Ugd2UgYWxyZWFkeSBtZW16ZXJvIGl0LgorCQkJcFR4QmxrLT5RdWVJZHggPSBRdWVJZHg7CisKKwkJCXBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QS1QocEVudHJ5KTsKKworCQkJLy8gRWFybHkgY2hlY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vZ3VoIFR4IFJlc291cmNlLgorCQkJaGFzVHhEZXNjID0gUlQyOFhYX0hBU19FTk9VR0hfRlJFRV9ERVNDKHBBZCwgcFR4QmxrLCBGcmVlTnVtYmVyW1F1ZUlkeF0sIHBQYWNrZXQpOworCQkJaWYgKCFoYXNUeERlc2MpCisJCQl7CisJCQkJcEFkLT5Qcml2YXRlSW5mby5UeFJpbmdGdWxsQ250Kys7CisKKwkJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKKworCQkJCWJyZWFrOworCQkJfQorCisJCQlwVHhCbGstPlR4RnJhbWVUeXBlID0gVHhQa3RDbGFzc2lmaWNhdGlvbihwQWQsIHBQYWNrZXQpOworCQkJcEVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKHBRdWV1ZSk7CisJCQlwVHhCbGstPlRvdGFsRnJhbWVOdW0rKzsKKwkJCXBUeEJsay0+VG90YWxGcmFnTnVtICs9IFJUTVBfR0VUX1BBQ0tFVF9GUkFHTUVOVFMocFBhY2tldCk7CS8vIFRoZSByZWFsIGZyYWdtZW50IG51bWJlciBtYXliZSB2YXJ5CisJCQlwVHhCbGstPlRvdGFsRnJhbWVMZW4gKz0gR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisJCQlwVHhCbGstPnBQYWNrZXQgPSBwUGFja2V0OworCQkJSW5zZXJ0VGFpbFF1ZXVlKCZwVHhCbGstPlR4UGFja2V0TGlzdCwgUEFDS0VUX1RPX1FVRVVFX0VOVFJZKHBQYWNrZXQpKTsKKworCQkJaWYgKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfUkFMSU5LX0ZSQU1FIHx8IHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpCisJCQl7CisJCQkJLy8gRW5oYW5jZSBTVyBBZ2dyZWdhdGlvbiBNZWNoYW5pc20KKwkJCQlpZiAoTkVFRF9RVUVVRV9CQUNLX0ZPUl9BR0cocEFkLCBRdWVJZHgsIEZyZWVOdW1iZXJbUXVlSWR4XSwgcFR4QmxrLT5UeEZyYW1lVHlwZSkpCisJCQkJeworCQkJCQlJbnNlcnRIZWFkUXVldWUocFF1ZXVlLCBQQUNLRVRfVE9fUVVFVUVfRU5UUlkocFBhY2tldCkpOworCQkJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZG97CisJCQkJCWlmKChwRW50cnkgPSBwUXVldWUtPkhlYWQpID09IE5VTEwpCisJCQkJCQlicmVhazsKKworCQkJCQkvLyBGb3IgVFhfQU1TRFVfRlJBTUUvVFhfUkFMSU5LX0ZSQU1FLCBOZWVkIHRvIGNoZWNrIGlmIG5leHQgcGFrY2V0IGNhbiBkbyBhZ2dyZWdhdGlvbi4KKwkJCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BLVChwRW50cnkpOworCQkJCQlGcmVlTnVtYmVyW1F1ZUlkeF0gPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisJCQkJCWhhc1R4RGVzYyA9IFJUMjhYWF9IQVNfRU5PVUdIX0ZSRUVfREVTQyhwQWQsIHBUeEJsaywgRnJlZU51bWJlcltRdWVJZHhdLCBwUGFja2V0KTsKKwkJCQkJaWYgKChoYXNUeERlc2MgPT0gRkFMU0UpIHx8IChDYW5Eb0FnZ3JlZ2F0ZVRyYW5zbWl0KHBBZCwgcFBhY2tldCwgcFR4QmxrKSA9PSBGQUxTRSkpCisJCQkJCQlicmVhazsKKworCQkJCQkvL1JlbW92ZSB0aGUgcGFja2V0IGZyb20gdGhlIFR4U3dRdWV1ZSBhbmQgaW5zZXJ0IGludG8gcFR4QmxrCisJCQkJCXBFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZShwUXVldWUpOworCQkJCQlBU1NFUlQocEVudHJ5KTsKKwkJCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BLVChwRW50cnkpOworCQkJCQlwVHhCbGstPlRvdGFsRnJhbWVOdW0rKzsKKwkJCQkJcFR4QmxrLT5Ub3RhbEZyYWdOdW0gKz0gUlRNUF9HRVRfUEFDS0VUX0ZSQUdNRU5UUyhwUGFja2V0KTsJLy8gVGhlIHJlYWwgZnJhZ21lbnQgbnVtYmVyIG1heWJlIHZhcnkKKwkJCQkJcFR4QmxrLT5Ub3RhbEZyYW1lTGVuICs9IEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCQkJCQlJbnNlcnRUYWlsUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0LCBQQUNLRVRfVE9fUVVFVUVfRU5UUlkocFBhY2tldCkpOworCQkJCX13aGlsZSgxKTsKKworCQkJCWlmIChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIgPT0gMSkKKwkJCQkJcFR4QmxrLT5UeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKKwkJCX0KKworI2lmZGVmIFJUMjg3MAorCQkJREVRVUVVRV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkJCUNvdW50ICs9IHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcjsKKworCQkJCS8vIERvIEhhcmRUcmFuc21pdCBub3cuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCVN0YXR1cyA9IFNUQUhhcmRUcmFuc21pdChwQWQsIHBUeEJsaywgUXVlSWR4KTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJfQorCisJCVJUMjhYWF9TVE9QX0RFUVVFVUUocEFkLCBRdWVJZHgsIElycUZsYWdzKTsKKworI2lmZGVmIFJUMjg3MAorCQlpZiAoIWhhc1R4RGVzYykKKwkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIEJMT0NLX05FVF9JRgorCQlpZiAoKHBBZC0+YmxvY2tRdWV1ZVRhYltRdWVJZHhdLlN3VHhRdWV1ZUJsb2NrRmxhZyA9PSBUUlVFKQorCQkJJiYgKHBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF0uTnVtYmVyIDwgMSkpCisJCXsKKwkJCXJlbGVhc2VOZXRJZigmcEFkLT5ibG9ja1F1ZXVlVGFiW1F1ZUlkeF0pOworCQl9CisjZW5kaWYgLy8gQkxPQ0tfTkVUX0lGIC8vCisKKwl9CisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FsY3VsYXRlcyB0aGUgZHVyYXRpb24gd2hpY2ggaXMgcmVxdWlyZWQgdG8gdHJhbnNtaXQgb3V0IGZyYW1lcworCXdpdGggZ2l2ZW4gc2l6ZSBhbmQgc3BlY2lmaWVkIHJhdGUuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlSYXRlCQkJVHJhbnNtaXQgcmF0ZQorCQlTaXplCQkJRnJhbWUgc2l6ZSBpbiB1bml0cyBvZiBieXRlCisKKwlSZXR1cm4gVmFsdWU6CisJCUR1cmF0aW9uIG51bWJlciBpbiB1bml0cyBvZiB1c2VjCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VTSE9SVAlSVE1QQ2FsY0R1cmF0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUmF0ZSwKKwlJTglVTE9ORwkJCVNpemUpCit7CisJVUxPTkcJRHVyYXRpb24gPSAwOworCisJaWYgKFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkgLy8gQ0NLCisJeworCQlpZiAoKFJhdGUgPiBSQVRFXzEpICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfUFJFQU1CTEVfSU5VU0VEKSkKKwkJCUR1cmF0aW9uID0gOTY7CS8vIDcyKzI0IHByZWFtYmxlK3BsY3AKKwkJZWxzZQorCQkJRHVyYXRpb24gPSAxOTI7IC8vIDE0NCs0OCBwcmVhbWJsZStwbGNwCisKKwkJRHVyYXRpb24gKz0gKFVTSE9SVCkoKFNpemUgPDwgNCkgLyBSYXRlSWRUbzUwMEticHNbUmF0ZV0pOworCQlpZiAoKFNpemUgPDwgNCkgJSBSYXRlSWRUbzUwMEticHNbUmF0ZV0pCisJCQlEdXJhdGlvbiArKzsKKwl9CisJZWxzZSBpZiAoUmF0ZSA8PSBSQVRFX0xBU1RfT0ZETV9SQVRFKS8vIE9GRE0gcmF0ZXMKKwl7CisJCUR1cmF0aW9uID0gMjAgKyA2OwkJLy8gMTYrNCBwcmVhbWJsZStwbGNwICsgU2lnbmFsIEV4dGVuc2lvbgorCQlEdXJhdGlvbiArPSA0ICogKFVTSE9SVCkoKDExICsgU2l6ZSAqIDQpIC8gUmF0ZUlkVG81MDBLYnBzW1JhdGVdKTsKKwkJaWYgKCgxMSArIFNpemUgKiA0KSAlIFJhdGVJZFRvNTAwS2Jwc1tSYXRlXSkKKwkJCUR1cmF0aW9uICs9IDQ7CisJfQorCWVsc2UJLy9taW1vIHJhdGUKKwl7CisJCUR1cmF0aW9uID0gMjAgKyA2OwkJLy8gMTYrNCBwcmVhbWJsZStwbGNwICsgU2lnbmFsIEV4dGVuc2lvbgorCX0KKworCXJldHVybiAoVVNIT1JUKUR1cmF0aW9uOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDYWxjdWxhdGVzIHRoZSBkdXJhdGlvbiB3aGljaCBpcyByZXF1aXJlZCB0byB0cmFuc21pdCBvdXQgZnJhbWVzCisJd2l0aCBnaXZlbiBzaXplIGFuZCBzcGVjaWZpZWQgcmF0ZS4KKworCUFyZ3VtZW50czoKKwkJcFR4V0kJCVBvaW50ZXIgdG8gaGVhZCBvZiBlYWNoIE1QRFUgdG8gSFcuCisJCUFjayAJCVNldHRpbmcgZm9yIEFjayByZXF1aXJlbWVudCBiaXQKKwkJRnJhZ21lbnQJU2V0dGluZyBmb3IgRnJhZ21lbnQgYml0CisJCVJldHJ5TW9kZQlTZXR0aW5nIGZvciByZXRyeSBtb2RlCisJCUlmcyAJCVNldHRpbmcgZm9yIElGUyBnYXAKKwkJUmF0ZQkJU2V0dGluZyBmb3IgdHJhbnNtaXQgcmF0ZQorCQlTZXJ2aWNlIAlTZXR0aW5nIGZvciBzZXJ2aWNlCisJCUxlbmd0aAkJRnJhbWUgbGVuZ3RoCisJCVR4UHJlYW1ibGUJU2hvcnQgb3IgTG9uZyBwcmVhbWJsZSB3aGVuIHVzaW5nIENDSyByYXRlcworCQlRdWVJZHggLSAwLTMsIGFjY29yZGluZyB0byA4MDIuMTFlL2Q0LjQgSnVuZS8yMDAzCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICBTZWUgYWxzbyA6IEJBU21hcnRIYXJkVHJhbnNtaXQoKSAgICAhISEKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFdyaXRlVHhXSSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhXSV9TVFJVQyAJcE91dFR4V0ksCisJSU4JQk9PTEVBTgkJCUZSQUcsCisJSU4JQk9PTEVBTgkJCUNGQUNLLAorCUlOCUJPT0xFQU4JCQlJbnNUaW1lc3RhbXAsCisJSU4JQk9PTEVBTiAJCUFNUERVLAorCUlOCUJPT0xFQU4gCQlBY2ssCisJSU4JQk9PTEVBTiAJCU5TZXEsCQkvLyBIVyBuZXcgYSBzZXF1ZW5jZS4KKwlJTglVQ0hBUgkJCUJBU2l6ZSwKKwlJTglVQ0hBUgkJCVdDSUQsCisJSU4JVUxPTkcJCQlMZW5ndGgsCisJSU4JVUNIQVIgCQkJUElELAorCUlOCVVDSEFSCQkJVElELAorCUlOCVVDSEFSCQkJVHhSYXRlLAorCUlOCVVDSEFSCQkJVHhvcG1vZGUsCisJSU4JQk9PTEVBTgkJCUNmQWNrLAorCUlOCUhUVFJBTlNNSVRfU0VUVElORwkqcFRyYW5zbWl0KQoreworCVBNQUNfVEFCTEVfRU5UUlkJcE1hYyA9IE5VTEw7CisJVFhXSV9TVFJVQyAJCVR4V0k7CisJUFRYV0lfU1RSVUMgCXBUeFdJOworCisJaWYgKFdDSUQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcE1hYyA9ICZwQWQtPk1hY1RhYi5Db250ZW50W1dDSURdOworCisJLy8KKwkvLyBBbHdheXMgdXNlIExvbmcgcHJlYW1ibGUgYmVmb3JlIHZlcmlmaWF0aW9uIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3Mgd2VsbC4KKwkvLyBUb2RvOiByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3MKKwkvLworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisJTmRpc1plcm9NZW1vcnkoJlR4V0ksIFRYV0lfU0laRSk7CisJcFR4V0kgPSAmVHhXSTsKKworCXBUeFdJLT5GUkFHPSBGUkFHOworCisJcFR4V0ktPkNGQUNLID0gQ0ZBQ0s7CisJcFR4V0ktPlRTPSBJbnNUaW1lc3RhbXA7CisJcFR4V0ktPkFNUERVID0gQU1QRFU7CisJcFR4V0ktPkFDSyA9IEFjazsKKwlwVHhXSS0+dHhvcD0gVHhvcG1vZGU7CisKKwlwVHhXSS0+TlNFUSA9IE5TZXE7CisJLy8gSm9obiB0dW5lIHRoZSBwZXJmb3JtYWNlIHdpdGggSW50ZWwgQ2xpZW50IGluIDIwIE1IeiBwZXJmb3JtYW5jZQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJBU2l6ZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4QkFTaXplOworCisJaWYoIEJBU2l6ZSA+NyApCisJCUJBU2l6ZSA9NzsKKwlwVHhXSS0+QkFXaW5TaXplID0gQkFTaXplOworCXBUeFdJLT5TaG9ydEdJID0gcFRyYW5zbWl0LT5maWVsZC5TaG9ydEdJOworCXBUeFdJLT5TVEJDID0gcFRyYW5zbWl0LT5maWVsZC5TVEJDOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcFR4V0ktPldpcmVsZXNzQ2xpSUQgPSBXQ0lEOworCXBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPSBMZW5ndGg7CisJcFR4V0ktPlBhY2tldElkID0gUElEOworCisJLy8gSWYgQ0NLIG9yIE9GRE0sIEJXIG11c3QgYmUgMjAKKwlwVHhXSS0+QlcgPSAocFRyYW5zbWl0LT5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkgPyAoQldfMjApIDogKHBUcmFuc21pdC0+ZmllbGQuQlcpOworI2lmZGVmIERPVDExTl9EUkFGVDMKKwlpZiAocFR4V0ktPkJXKQorCQlwVHhXSS0+QlcgPSAocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID09IDApID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKwlwVHhXSS0+TUNTID0gcFRyYW5zbWl0LT5maWVsZC5NQ1M7CisJcFR4V0ktPlBIWU1PREUgPSBwVHJhbnNtaXQtPmZpZWxkLk1PREU7CisJcFR4V0ktPkNGQUNLID0gQ2ZBY2s7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAocE1hYykKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlKQorCQl7CisJCQlpZiAoKHBNYWMtPk1tcHNNb2RlID09IE1NUFNfRFlOQU1JQykgJiYgKHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykpCisJCQl7CisJCQkJLy8gRHluYW1pYyBNSU1PIFBvd2VyIFNhdmUgTW9kZQorCQkJCXBUeFdJLT5NSU1PcHMgPSAxOworCQkJfQorCQkJZWxzZSBpZiAocE1hYy0+TW1wc01vZGUgPT0gTU1QU19TVEFUSUMpCisJCQl7CisJCQkJLy8gU3RhdGljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlCisJCQkJaWYgKHBUcmFuc21pdC0+ZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYICYmIHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykKKwkJCQl7CisJCQkJCXBUeFdJLT5NQ1MgPSA3OworCQkJCQlwVHhXSS0+TUlNT3BzID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwkJLy9wVHhXSS0+TUlNT3BzID0gKHBNYWMtPlBzTW9kZSA9PSBQV1JfTU1QUyk/IDE6MDsKKwkJaWYgKHBNYWMtPmJJQW1CYWRBdGhlcm9zICYmIChwTWFjLT5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMVdFUERpc2FibGVkKSkKKwkJeworCQkJcFR4V0ktPk1wZHVEZW5zaXR5ID0gNzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBUeFdJLT5NcGR1RGVuc2l0eSA9IHBNYWMtPk1wZHVEZW5zaXR5OworCQl9CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcFR4V0ktPlBhY2tldElkID0gcFR4V0ktPk1DUzsKKwlOZGlzTW92ZU1lbW9yeShwT3V0VHhXSSwgJlR4V0ksIHNpemVvZihUWFdJX1NUUlVDKSk7Cit9CisKKworVk9JRCBSVE1QV3JpdGVUeFdJX0RhdGEoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCU9VVCBQVFhXSV9TVFJVQwkJcFR4V0ksCisJSU4JVFhfQkxLCQkJCSpwVHhCbGspCit7CisJSFRUUkFOU01JVF9TRVRUSU5HCSpwVHJhbnNtaXQ7CisJUE1BQ19UQUJMRV9FTlRSWQlwTWFjRW50cnk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJVUNIQVIJCQkJQkFTaXplOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKKwlBU1NFUlQocFR4V0kpOworCisJcFRyYW5zbWl0ID0gcFR4QmxrLT5wVHJhbnNtaXQ7CisJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7CisKKworCS8vCisJLy8gQWx3YXlzIHVzZSBMb25nIHByZWFtYmxlIGJlZm9yZSB2ZXJpZmlhdGlvbiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzIHdlbGwuCisJLy8gVG9kbzogcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzCisJLy8KKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOworCU5kaXNaZXJvTWVtb3J5KHBUeFdJLCBUWFdJX1NJWkUpOworCisJcFR4V0ktPkZSQUcJCT0gVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iQWxsb3dGcmFnKTsKKwlwVHhXSS0+QUNLCQk9IFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkFja1JlcXVpcmVkKTsKKwlwVHhXSS0+dHhvcAkJPSBwVHhCbGstPkZyYW1lR2FwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJaWYgKHBNYWNFbnRyeSAmJgorCQkocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfSU5GUkEpICYmCisJCShwTWFjRW50cnktPlZhbGlkQXNEbHMgPT0gVFJVRSkpCisJCXBUeFdJLT5XaXJlbGVzc0NsaUlEID0gQlNTSURfV0NJRDsKKwllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCXBUeFdJLT5XaXJlbGVzc0NsaUlECQk9IHBUeEJsay0+V2NpZDsKKworCXBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQJPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKwlwVHhXSS0+Q0ZBQ0sJCQkJPSBUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JQaWdneUJhY2spOworCisJLy8gSWYgQ0NLIG9yIE9GRE0sIEJXIG11c3QgYmUgMjAKKwlwVHhXSS0+QlcgPSAocFRyYW5zbWl0LT5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkgPyAoQldfMjApIDogKHBUcmFuc21pdC0+ZmllbGQuQlcpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2lmZGVmIERPVDExTl9EUkFGVDMKKwlpZiAocFR4V0ktPkJXKQorCQlwVHhXSS0+QlcgPSAocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID09IDApID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisJcFR4V0ktPkFNUERVCT0gKChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0FNUERVX0ZSQU1FKSA/IFRSVUUgOiBGQUxTRSk7CisKKwkvLyBKb2huIHR1bmUgdGhlIHBlcmZvcm1hY2Ugd2l0aCBJbnRlbCBDbGllbnQgaW4gMjAgTUh6IHBlcmZvcm1hbmNlCisJQkFTaXplID0gcEFkLT5Db21tb25DZmcuVHhCQVNpemU7CisJaWYoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1QRFVfRlJBTUUpICYmIChwTWFjRW50cnkpKQorCXsKKwkJVUNIQVIJCVJBQkFPcmlJZHggPSAwOwkvL1RoZSBSQSdzIEJBIE9yaWdpbmF0b3IgdGFibGUgaW5kZXguCisKKwkJUkFCQU9yaUlkeCA9IHBUeEJsay0+cE1hY0VudHJ5LT5CQU9yaVdjaWRBcnJheVtwVHhCbGstPlVzZXJQcmlvcml0eV07CisJCUJBU2l6ZSA9IHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W1JBQkFPcmlJZHhdLkJBV2luU2l6ZTsKKwl9CisKKwlwVHhXSS0+VHhCRiA9IHBUcmFuc21pdC0+ZmllbGQuVHhCRjsKKwlwVHhXSS0+QkFXaW5TaXplID0gQkFTaXplOworCXBUeFdJLT5TaG9ydEdJID0gcFRyYW5zbWl0LT5maWVsZC5TaG9ydEdJOworCXBUeFdJLT5TVEJDID0gcFRyYW5zbWl0LT5maWVsZC5TVEJDOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcFR4V0ktPk1DUyA9IHBUcmFuc21pdC0+ZmllbGQuTUNTOworCXBUeFdJLT5QSFlNT0RFID0gcFRyYW5zbWl0LT5maWVsZC5NT0RFOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKHBNYWNFbnRyeSkKKwl7CisJCWlmICgocE1hY0VudHJ5LT5NbXBzTW9kZSA9PSBNTVBTX0RZTkFNSUMpICYmIChwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpKQorCQl7CisJCQkvLyBEeW5hbWljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlCisJCQlwVHhXSS0+TUlNT3BzID0gMTsKKwkJfQorCQllbHNlIGlmIChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfU1RBVElDKQorCQl7CisJCQkvLyBTdGF0aWMgTUlNTyBQb3dlciBTYXZlIE1vZGUKKwkJCWlmIChwVHJhbnNtaXQtPmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCAmJiBwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpCisJCQl7CisJCQkJcFR4V0ktPk1DUyA9IDc7CisJCQkJcFR4V0ktPk1JTU9wcyA9IDA7CisJCQl9CisJCX0KKworCQlpZiAocE1hY0VudHJ5LT5iSUFtQmFkQXRoZXJvcyAmJiAocE1hY0VudHJ5LT5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMVdFUERpc2FibGVkKSkKKwkJeworCQkJcFR4V0ktPk1wZHVEZW5zaXR5ID0gNzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBUeFdJLT5NcGR1RGVuc2l0eSA9IHBNYWNFbnRyeS0+TXBkdURlbnNpdHk7CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwkJaWYgKHBUeEJsay0+UXVlSWR4PT0gMCkKKwkJeworCQkJcEFkLT5EaWFnU3RydWN0LlR4RGF0YUNudFtwQWQtPkRpYWdTdHJ1Y3QuQXJyYXlDdXJJZHhdKys7CisJCQlwQWQtPkRpYWdTdHJ1Y3QuVHhNY3NDbnRbcEFkLT5EaWFnU3RydWN0LkFycmF5Q3VySWR4XVtwVHhXSS0+TUNTXSsrOworCQl9CisjZW5kaWYgLy8gREJHX0RJQUdOT1NFIC8vCisKKwkvLyBmb3IgcmF0ZSBhZGFwYXRpb24KKwlwVHhXSS0+UGFja2V0SWQgPSBwVHhXSS0+TUNTOworI2lmZGVmIElORl9BTUFaT05fU0UKKy8qSXZlcnNvbiBwYXRjaCBmb3IgV01NIEE1LVQwNyAsV2lyZWxlc3NTdGFUb1dpcmVsZXNzU3RhIGRvIG5vdCBidWxrIG91dCBhZ2dyZWdhdGUgKi8KKwlpZiggUlRNUF9HRVRfUEFDS0VUX05PQlVMS09VVChwVHhCbGstPnBQYWNrZXQpKQorCXsKKwkJaWYocFR4V0ktPlBIWU1PREUgPT0gTU9ERV9DQ0spCisJCXsKKwkJCXBUeFdJLT5QYWNrZXRJZCA9IDY7CisJCX0KKwl9CisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworfQorCisKK1ZPSUQgUlRNUFdyaXRlVHhXSV9DYWNoZSgKKwlJTglQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4JT1VUIFBUWFdJX1NUUlVDCQlwVHhXSSwKKwlJTglUWF9CTEsJCQkJKnBUeEJsaykKK3sKKwlQSFRUUkFOU01JVF9TRVRUSU5HCS8qcFR4SFRQaHlNb2RlLCovIHBUcmFuc21pdDsKKwlQTUFDX1RBQkxFX0VOVFJZCXBNYWNFbnRyeTsKKworCS8vCisJLy8gdXBkYXRlIFRYV0kKKwkvLworCXBNYWNFbnRyeSA9IHBUeEJsay0+cE1hY0VudHJ5OworCXBUcmFuc21pdCA9IHBUeEJsay0+cFRyYW5zbWl0OworCisJLy9pZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSkKKwkvL2lmIChSVE1QQ2hlY2tFbnRyeUVuYWJsZUF1dG9SYXRlU3dpdGNoKHBBZCwgcE1hY0VudHJ5KSkKKwkvL2lmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX0F1dG9SYXRlU3dpdGNoKSkKKwlpZiAocE1hY0VudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCkKKwl7CisJCXBUeFdJLT50eG9wID0gSUZTX0hUVFhPUDsKKworCQkvLyBJZiBDQ0sgb3IgT0ZETSwgQlcgbXVzdCBiZSAyMAorCQlwVHhXSS0+QlcgPSAocFRyYW5zbWl0LT5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkgPyAoQldfMjApIDogKHBUcmFuc21pdC0+ZmllbGQuQlcpOworCQlwVHhXSS0+U2hvcnRHSSA9IHBUcmFuc21pdC0+ZmllbGQuU2hvcnRHSTsKKwkJcFR4V0ktPlNUQkMgPSBwVHJhbnNtaXQtPmZpZWxkLlNUQkM7CisKKwkJcFR4V0ktPk1DUyA9IHBUcmFuc21pdC0+ZmllbGQuTUNTOworCQlwVHhXSS0+UEhZTU9ERSA9IHBUcmFuc21pdC0+ZmllbGQuTU9ERTsKKworCQkvLyBzZXQgUElEIGZvciBUeFJhdGVTd2l0Y2hpbmcKKwkJcFR4V0ktPlBhY2tldElkID0gcFRyYW5zbWl0LT5maWVsZC5NQ1M7CisJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJcFR4V0ktPkFNUERVID0gKChwTWFjRW50cnktPk5vQkFEYXRhQ291bnREb3duID09IDApID8gVFJVRTogRkFMU0UpOworCXBUeFdJLT5NSU1PcHMgPSAwOworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCWlmIChwVHhXSS0+QlcpCisJCXBUeFdJLT5CVyA9IChwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGggPT0gMCkgPyAoQldfMjApIDogKHBUcmFuc21pdC0+ZmllbGQuQlcpOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworCWlmIChwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlKQorCXsKKwkJLy8gTUlNTyBQb3dlciBTYXZlIE1vZGUKKwkJaWYgKChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfRFlOQU1JQykgJiYgKHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykpCisJCXsKKwkJCS8vIER5bmFtaWMgTUlNTyBQb3dlciBTYXZlIE1vZGUKKwkJCXBUeFdJLT5NSU1PcHMgPSAxOworCQl9CisJCWVsc2UgaWYgKHBNYWNFbnRyeS0+TW1wc01vZGUgPT0gTU1QU19TVEFUSUMpCisJCXsKKwkJCS8vIFN0YXRpYyBNSU1PIFBvd2VyIFNhdmUgTW9kZQorCQkJaWYgKChwVHJhbnNtaXQtPmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkgJiYgKHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykpCisJCQl7CisJCQkJcFR4V0ktPk1DUyA9IDc7CisJCQkJcFR4V0ktPk1JTU9wcyA9IDA7CisJCQl9CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwlpZiAocFR4QmxrLT5RdWVJZHg9PSAwKQorCXsKKwkJcEFkLT5EaWFnU3RydWN0LlR4RGF0YUNudFtwQWQtPkRpYWdTdHJ1Y3QuQXJyYXlDdXJJZHhdKys7CisJCXBBZC0+RGlhZ1N0cnVjdC5UeE1jc0NudFtwQWQtPkRpYWdTdHJ1Y3QuQXJyYXlDdXJJZHhdW3BUeFdJLT5NQ1NdKys7CisJfQorI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisJcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+U3JjQnVmTGVuOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNhbGN1bGF0ZXMgdGhlIGR1cmF0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyYW5zbWl0IG91dCBmcmFtZXMKKwl3aXRoIGdpdmVuIHNpemUgYW5kIHNwZWNpZmllZCByYXRlLgorCisJQXJndW1lbnRzOgorCQlwVHhECQlQb2ludGVyIHRvIHRyYW5zbWl0IGRlc2NyaXB0b3IKKwkJQWNrIAkJU2V0dGluZyBmb3IgQWNrIHJlcXVpcmVtZW50IGJpdAorCQlGcmFnbWVudAlTZXR0aW5nIGZvciBGcmFnbWVudCBiaXQKKwkJUmV0cnlNb2RlCVNldHRpbmcgZm9yIHJldHJ5IG1vZGUKKwkJSWZzIAkJU2V0dGluZyBmb3IgSUZTIGdhcAorCQlSYXRlCQlTZXR0aW5nIGZvciB0cmFuc21pdCByYXRlCisJCVNlcnZpY2UgCVNldHRpbmcgZm9yIHNlcnZpY2UKKwkJTGVuZ3RoCQlGcmFtZSBsZW5ndGgKKwkJVHhQcmVhbWJsZQlTaG9ydCBvciBMb25nIHByZWFtYmxlIHdoZW4gdXNpbmcgQ0NLIHJhdGVzCisJCVF1ZUlkeCAtIDAtMywgYWNjb3JkaW5nIHRvIDgwMi4xMWUvZDQuNCBKdW5lLzIwMDMKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFdyaXRlVHhEZXNjcmlwdG9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWERfU1RSVUMJCXBUeEQsCisJSU4JQk9PTEVBTiAJCWJXSVYsCisJSU4JVUNIQVIJCQlRdWV1ZVNFTCkKK3sKKwkvLworCS8vIEFsd2F5cyB1c2UgTG9uZyBwcmVhbWJsZSBiZWZvcmUgdmVyaWZpYXRpb24gc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcyB3ZWxsLgorCS8vIFRvZG86IHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgaWYgc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcworCS8vCisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfUFJFQU1CTEVfSU5VU0VEKTsKKworCXBUeEQtPldJVgk9IChiV0lWKSA/IDE6IDA7CisJcFR4RC0+UVNFTD0gKFF1ZXVlU0VMKTsKKwlpZiAocEFkLT5iR2VuT25lSENDQSA9PSBUUlVFKQorCQlwVHhELT5RU0VMPSBGSUZPX0hDQ0E7CisJcFR4RC0+RE1BRE9ORSA9IDA7Cit9CisKKworLy8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gLQorLy8gMS4gTUVBRElBX0NPTk5FQ1RFRAorLy8gMi4gQUdHUkVHQVRJT05fSU5fVVNFRAorLy8gMy4gRnJhZ21lbnRhdGlvbiBub3QgaW4gdXNlZAorLy8gNC4gZWl0aGVyIG5vIHByZXZpb3VzIGZyYW1lIChwUHJldkFkZHIxPU5VTEwpIC5PUi4gcHJldmlvdWQgZnJhbWUgaXMgYWdncmVnYXRpYmxlCitCT09MRUFOIFR4RnJhbWVJc0FnZ3JlZ2F0aWJsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwUHJldkFkZHIxLAorCUlOCVBVQ0hBUgkJCXA4MDIzaGRyKQoreworCisJLy8gY2FuJ3QgYWdncmVnYXRlIEVBUE9MICg4MDIuMXgpIGZyYW1lCisJaWYgKChwODAyM2hkclsxMl0gPT0gMHg4OCkgJiYgKHA4MDIzaGRyWzEzXSA9PSAweDhlKSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gY2FuJ3QgYWdncmVnYXRlIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWUKKwlpZiAocDgwMjNoZHJbMF0gJiAweDAxKQorCQlyZXR1cm4gRkFMU0U7CisKKwlpZiAoSU5GUkFfT04ocEFkKSkgLy8gbXVzdCBiZSB1bmljYXN0IHRvIEFQCisJCXJldHVybiBUUlVFOworCWVsc2UgaWYgKChwUHJldkFkZHIxID09IE5VTEwpIHx8IE1BQ19BRERSX0VRVUFMKHBQcmV2QWRkcjEsIHA4MDIzaGRyKSkgLy8gdW5pY2FzdCB0byBzYW1lIFNUQQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkgICBDaGVjayB0aGUgTVNEVSBBZ2dyZWdhdGlvbiBwb2xpY3kKKwkxLkhUIGFnZ3JlZ2F0aW9uIGlzIEEtTVNEVQorCTIubGVnYWFjeSByYXRlIGFnZ3JlZ2F0aW9uIGlzIHNvZnR3YXJlIGFnZ3JlZ2F0aW9uIGJ5IFJhbGluay4KKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFBlZXJJc0FnZ3JlT24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUxPTkcJCSAgIFR4UmF0ZSwKKwlJTglQTUFDX1RBQkxFX0VOVFJZIHBNYWNFbnRyeSkKK3sKKwlVTE9ORwlBRmxhZ3MgPSAoZkNMSUVOVF9TVEFUVVNfQU1TRFVfSU5VU0VEIHwgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSk7CisKKwlpZiAocE1hY0VudHJ5ICE9IE5VTEwgJiYgQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBBRmxhZ3MpKQorCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKHBNYWNFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkKKwkJeworCQkJcmV0dXJuIFRSVUU7CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKKwkJaWYgKFR4UmF0ZSA+PSBSQVRFXzYgJiYgcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSAmJiAoIShPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpKSkpCisJCXsJLy8gbGVnYWN5ICBSYWxpbmsgQWdncmVnYXRpb24gc3VwcG9ydAorCQkJcmV0dXJuIFRSVUU7CisJCX0KKyNlbmRpZiAvLyBBR0dSRUdBVElPTl9TVVBQT1JUIC8vCisJfQorCisJcmV0dXJuIEZBTFNFOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNoZWNrIGFuZCBmaW5lIHRoZSBwYWNrZXQgd2FpdGluZyBpbiBTVyBxdWV1ZSB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkKKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJcFF1ZXVlCQlQb2ludGVyIHRvIFdhaXRpbmcgUXVldWUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1BRVUVVRV9IRUFERVIJUlRNUENoZWNrVHhTd1F1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVCBQVUNIQVIJCQlwUXVlSWR4KQoreworCisJVUxPTkcJTnVtYmVyOworCS8vIDIwMDQtMTEtMTUgdG8gYmUgcmVtb3ZlZC4gdGVzdCBhZ2dyZWdhdGlvbiBvbmx5CisvLwlpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKSkgJiYgKCpwTnVtYmVyIDwgMikpCisvLwkJIHJldHVybiBOVUxMOworCisJTnVtYmVyID0gcEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5OdW1iZXIKKwkJCSArIHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CRV0uTnVtYmVyCisJCQkgKyBwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVkldLk51bWJlcgorCQkJICsgcEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZPXS5OdW1iZXIKKwkJCSArIHBBZC0+VHhTd1F1ZXVlW1FJRF9IQ0NBXS5OdW1iZXI7CisKKwlpZiAocEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZPXS5IZWFkICE9IE5VTEwpCisJeworCQkqcFF1ZUlkeCA9IFFJRF9BQ19WTzsKKwkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZPXSk7CisJfQorCWVsc2UgaWYgKHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19WSV0uSGVhZCAhPSBOVUxMKQorCXsKKwkJKnBRdWVJZHggPSBRSURfQUNfVkk7CisJCXJldHVybiAoJnBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19WSV0pOworCX0KKwllbHNlIGlmIChwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdLkhlYWQgIT0gTlVMTCkKKwl7CisJCSpwUXVlSWR4ID0gUUlEX0FDX0JFOworCQlyZXR1cm4gKCZwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdKTsKKwl9CisJZWxzZSBpZiAocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5IZWFkICE9IE5VTEwpCisJeworCQkqcFF1ZUlkeCA9IFFJRF9BQ19CSzsKKwkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXSk7CisJfQorCWVsc2UgaWYgKHBBZC0+VHhTd1F1ZXVlW1FJRF9IQ0NBXS5IZWFkICE9IE5VTEwpCisJeworCQkqcFF1ZUlkeCA9IFFJRF9IQ0NBOworCQlyZXR1cm4gKCZwQWQtPlR4U3dRdWV1ZVtRSURfSENDQV0pOworCX0KKworCS8vIE5vIHBhY2tldCBwZW5kaW5nIGluIFR4IFN3IHF1ZXVlCisJKnBRdWVJZHggPSBRSURfQUNfQks7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVN1c3BlbmQgTVNEVSB0cmFuc21pc3Npb24KKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTdXNwZW5kTXNkdVRyYW5zbWlzc2lvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNDQU5OSU5HLCBzdXNwZW5kIE1TRFUgdHJhbnNtaXNzaW9uIC4uLlxuIikpOworCisKKwkvLworCS8vIEJlZm9yZSBCU1NfU0NBTl9JTl9QUk9HUkVTUywgd2UgbmVlZCB0byBrZWVwIEN1cnJlbnQgUjY2IHZhbHVlIGFuZAorCS8vIHVzZSBMb3dib3VuZCBhcyBSNjYgdmFsdWUgb24gU2Nhbk5leHRDaGFubmVsKC4uLikKKwkvLworCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICZwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUpOworCisJLy8gc2V0IEJCUF9SNjYgdG8gMHgzMC8weDQwIHdoZW4gc2Nhbm5pbmcgKEFzaWNTd2l0Y2hDaGFubmVsIHdpbGwgc2V0IFI2NiBhY2NvcmRpbmcgdG8gY2hhbm5lbCB3aGVuIHNjYW5uaW5nKQorCS8vUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICgweDI2ICsgR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgQldfMjApOworCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOworCS8vUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQ05UTF9DU1IsIDB4MDAwZjAwMDApOwkJLy8gYWJvcnQgYWxsIFRYIHJpbmdzCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlc3VtZSBNU0RVIHRyYW5zbWlzc2lvbgorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QUmVzdW1lTXNkdVRyYW5zbWlzc2lvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKy8vICAgIFVDSEFSCQkJSXJxU3RhdGU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNDQU4gZG9uZSwgcmVzdW1lIE1TRFUgdHJhbnNtaXNzaW9uIC4uLlxuIikpOworCisKKwkvLyBBZnRlciBmaW5pc2ggQlNTX1NDQU5fSU5fUFJPR1JFU1MsIHdlIG5lZWQgdG8gcmVzdG9yZSBDdXJyZW50IFI2NiB2YWx1ZQorCS8vIFI2NiBzaG91bGQgbm90IGJlIDAKKwlpZiAocEFkLT5CYnBUdW5pbmcuUjY2Q3VycmVudFZhbHVlID09IDApCisJeworCQlwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUgPSAweDM4OworCQlEQkdQUklOVF9FUlIoKCJSVE1QUmVzdW1lTXNkdVRyYW5zbWlzc2lvbiwgUjY2Q3VycmVudFZhbHVlPTAuLi5cbiIpKTsKKwl9CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIHBBZC0+QmJwVHVuaW5nLlI2NkN1cnJlbnRWYWx1ZSk7CisKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKKy8vIHNhbXBsZSwgZm9yIElSUSBMT0NLIHRvIFNFTSBMT0NLCisvLyAgICBJcnFTdGF0ZSA9IHBBZC0+aXJxX2Rpc2FibGVkOworLy8JaWYgKElycVN0YXRlKQorLy8JCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgVFJVRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKy8vICAgIGVsc2UKKwlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworfQorCisKK1VJTlQgZGVhZ2dyZWdhdGVfQU1TRFVfYW5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUpCit7CisJVVNIT1JUIAkJCVBheWxvYWRTaXplOworCVVTSE9SVCAJCQlTdWJGcmFtZVNpemU7CisJUEhFQURFUl84MDJfMyAJcEFNU0RVc3ViaGVhZGVyOworCVVJTlQJCQluTVNEVTsKKyAgICBVQ0hBUgkJCUhlYWRlcjgwMl8zWzE0XTsKKworCVBVQ0hBUgkJCXBQYXlsb2FkLCBwREEsIHBTQSwgcFJlbW92ZWRMTENTTkFQOworCVBORElTX1BBQ0tFVAlwQ2xvbmVQYWNrZXQ7CisKKworCisJbk1TRFUgPSAwOworCisJd2hpbGUgKERhdGFTaXplID4gTEVOR1RIXzgwMl8zKQorCXsKKworCQluTVNEVSsrOworCisJCS8vaGV4X2R1bXAoInN1YmhlYWRlciIsIHBEYXRhLCA2NCk7CisJCXBBTVNEVXN1YmhlYWRlciA9IChQSEVBREVSXzgwMl8zKXBEYXRhOworCQkvL3BEYXRhICs9IExFTkdUSF84MDJfMzsKKwkJUGF5bG9hZFNpemUgPSBwQU1TRFVzdWJoZWFkZXItPk9jdGV0WzFdICsgKHBBTVNEVXN1YmhlYWRlci0+T2N0ZXRbMF08PDgpOworCQlTdWJGcmFtZVNpemUgPSBQYXlsb2FkU2l6ZSArIExFTkdUSF84MDJfMzsKKworCisJCWlmICgoRGF0YVNpemUgPCBTdWJGcmFtZVNpemUpIHx8IChQYXlsb2FkU2l6ZSA+IDE1MTggKSkKKwkJeworCQkJYnJlYWs7CisJCX0KKworCQkvL3ByaW50aygiJWQgc3ViZnJhbWU6IFNpemUgPSAlZFxuIiwgIG5NU0RVLCBQYXlsb2FkU2l6ZSk7CisKKwkJcFBheWxvYWQgPSBwRGF0YSArIExFTkdUSF84MDJfMzsKKwkJcERBID0gcERhdGE7CisJCXBTQSA9IHBEYXRhICsgTUFDX0FERFJfTEVOOworCisJCS8vIGNvbnZlcnQgdG8gODAyLjMgaGVhZGVyCisgICAgICAgIENPTlZFUlRfVE9fODAyXzMoSGVhZGVyODAyXzMsIHBEQSwgcFNBLCBwUGF5bG9hZCwgUGF5bG9hZFNpemUsIHBSZW1vdmVkTExDU05BUCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJaWYgKChIZWFkZXI4MDJfM1sxMl0gPT0gMHg4OCkgJiYgKEhlYWRlcjgwMl8zWzEzXSA9PSAweDhFKSApCisJCXsKKwkJICAgIC8vIGF2b2lkIGxvY2FsIGhlYXAgb3ZlcmZsb3csIHVzZSBkeWFuYW1pYyBhbGxvY2F0aW9uCisJCSAgIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSA9IChNTE1FX1FVRVVFX0VMRU0gKikga21hbGxvYyhzaXplb2YoTUxNRV9RVUVVRV9FTEVNKSwgTUVNX0FMTE9DX0ZMQUcpOworCQkgICBtZW1tb3ZlKEVsZW0tPk1zZysoTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IKSwgcFBheWxvYWQsIFBheWxvYWRTaXplKTsKKwkJICAgRWxlbS0+TXNnTGVuID0gTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IICsgUGF5bG9hZFNpemU7CisJCSAgIFdwYUVBUE9MS2V5QWN0aW9uKHBBZCwgRWxlbSk7CisJCSAgIGtmcmVlKEVsZW0pOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCSAgICAgICAgCWlmIChwUmVtb3ZlZExMQ1NOQVApCisJICAgICAgICAJeworCSAgICAJCQlwUGF5bG9hZCAtPSBMRU5HVEhfODAyXzM7CisJICAgIAkJCVBheWxvYWRTaXplICs9IExFTkdUSF84MDJfMzsKKwkgICAgCQkJTmRpc01vdmVNZW1vcnkocFBheWxvYWQsICZIZWFkZXI4MDJfM1swXSwgTEVOR1RIXzgwMl8zKTsKKwkgICAgICAgIAl9CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlwQ2xvbmVQYWNrZXQgPSBDbG9uZVBhY2tldChwQWQsIHBQYWNrZXQsIHBQYXlsb2FkLCBQYXlsb2FkU2l6ZSk7CisJCWlmIChwQ2xvbmVQYWNrZXQpCisJCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJQU5OT1VOQ0VfT1JfRk9SV0FSRF84MDJfM19QQUNLRVQocEFkLCBwQ2xvbmVQYWNrZXQsIFJUTVBfR0VUX1BBQ0tFVF9JRihwUGFja2V0KSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKworCisJCS8vIEEtTVNEVSBoYXMgcGFkZGluZyB0byBtdWx0aXBsZSBvZiA0IGluY2x1ZGluZyBzdWJmcmFtZSBoZWFkZXIuCisJCS8vIGFsaWduIFN1YkZyYW1lU2l6ZSB1cCB0byBtdWx0aXBsZSBvZiA0CisJCVN1YkZyYW1lU2l6ZSA9IChTdWJGcmFtZVNpemUrMykmKH4weDMpOworCisKKwkJaWYgKFN1YkZyYW1lU2l6ZSA+IDE1MjggfHwgU3ViRnJhbWVTaXplIDwgMzIpCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKERhdGFTaXplID4gU3ViRnJhbWVTaXplKQorCQl7CisJCQlwRGF0YSArPSBTdWJGcmFtZVNpemU7CisJCQlEYXRhU2l6ZSAtPSBTdWJGcmFtZVNpemU7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBlbmQgb2YgQS1NU0RVCisJCQlEYXRhU2l6ZSA9IDA7CisJCX0KKwl9CisKKwkvLyBmaW5hbGx5IHJlbGVhc2Ugb3JpZ2luYWwgcnggcGFja2V0CisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCisJcmV0dXJuIG5NU0RVOworfQorCisKK1VJTlQgQkFfUmVvcmRlcl9BTVNEVV9Bbm5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJUFVDSEFSCQkJcERhdGE7CisJVVNIT1JUCQkJRGF0YVNpemU7CisJVUlOVAkJCW5NU0RVID0gMDsKKworCXBEYXRhID0gKFBVQ0hBUikgR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCURhdGFTaXplID0gKFVTSE9SVCkgR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisKKwluTVNEVSA9IGRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKHBBZCwgcFBhY2tldCwgcERhdGEsIERhdGFTaXplKTsKKworCXJldHVybiBuTVNEVTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUxvb2sgdXAgdGhlIE1BQyBhZGRyZXNzIGluIHRoZSBNQUMgdGFibGUuIFJldHVybiBOVUxMIGlmIG5vdCBmb3VuZC4KKwlSZXR1cm46CisJCXBFbnRyeSAtIHBvaW50ZXIgdG8gdGhlIE1BQyBlbnRyeTsgTlVMTCBpcyBub3QgZm91bmQKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK01BQ19UQUJMRV9FTlRSWSAqTWFjVGFibGVMb29rdXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJUFVDSEFSIHBBZGRyKQoreworCVVMT05HIEhhc2hJZHg7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMOworCisJSGFzaElkeCA9IE1BQ19BRERSX0hBU0hfSU5ERVgocEFkZHIpOworCXBFbnRyeSA9IHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF07CisKKwl3aGlsZSAocEVudHJ5ICYmIChwRW50cnktPlZhbGlkQXNDTEkgfHwgcEVudHJ5LT5WYWxpZEFzV0RTIHx8IHBFbnRyeS0+VmFsaWRBc0FwQ2xpIHx8IHBFbnRyeS0+VmFsaWRBc01lc2gpKQorCXsKKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBFbnRyeS0+QWRkciwgcEFkZHIpKQorCQl7CisJCQlicmVhazsKKwkJfQorCQllbHNlCisJCQlwRW50cnkgPSBwRW50cnktPnBOZXh0OworCX0KKworCXJldHVybiBwRW50cnk7Cit9CisKK01BQ19UQUJMRV9FTlRSWSAqTWFjVGFibGVJbnNlcnRFbnRyeSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSCQkJcEFkZHIsCisJSU4JVUNIQVIJCQlhcGlkeCwKKwlJTiBCT09MRUFOCUNsZWFuQWxsKQoreworCVVDSEFSIEhhc2hJZHg7CisJaW50IGksIEZpcnN0V2NpZDsKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSA9IE5VTEwsICpwQ3VyckVudHJ5OworLy8JVVNIT1JUCW9mZnNldDsKKy8vCVVMT05HCWFkZHI7CisKKwkvLyBpZiBGVUxMLCByZXR1cm4KKwlpZiAocEFkLT5NYWNUYWIuU2l6ZSA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlGaXJzdFdjaWQgPSAxOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJaWYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0lORlJBKQorCQlGaXJzdFdjaWQgPSAyOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gYWxsb2NhdGUgb25lIE1BQyBlbnRyeQorCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisJZm9yIChpID0gRmlyc3RXY2lkOyBpPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKSAgIC8vIHNraXAgZW50cnkjMCBzbyB0aGF0ICJlbnRyeSBpbmRleCA9PSBBSUQiIGZvciBmYXN0IGxvb2t1cAorCXsKKwkJLy8gcGljayB1cCB0aGUgZmlyc3QgYXZhaWxhYmxlIHZhY2FuY3kKKwkJaWYgKChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgPT0gRkFMU0UpICYmCisJCQkocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzV0RTID09IEZBTFNFKSAmJgorCQkJKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0FwQ2xpPT0gRkFMU0UpICYmCisJCQkocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzTWVzaCA9PSBGQUxTRSkKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCSYmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNEbHMgPT0gRkFMU0UpCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkpCisJCXsKKwkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W2ldOworCQkJaWYgKENsZWFuQWxsID09IFRSVUUpCisJCQl7CisJCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKKwkJCQlwRW50cnktPkN1cnJUeFJhdGUgPSBSQVRFXzExOworCQkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworCQkJCXBFbnRyeS0+UGFpcndpc2VLZXkuS2V5TGVuID0gMDsKKwkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQkJfQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJaWYgKGFwaWR4ID49IE1JTl9ORVRfREVWSUNFX0ZPUl9ETFMpCisJCQl7CisJCQkJcEVudHJ5LT5WYWxpZEFzQ0xJID0gRkFMU0U7CisJCQkJcEVudHJ5LT5WYWxpZEFzV0RTID0gRkFMU0U7CisJCQkJcEVudHJ5LT5WYWxpZEFzQXBDbGkgPSBGQUxTRTsKKwkJCQlwRW50cnktPlZhbGlkQXNNZXNoID0gRkFMU0U7CisJCQkJcEVudHJ5LT5WYWxpZEFzRGxzID0gVFJVRTsKKwkJCQlwRW50cnktPmlzQ2FjaGVkID0gRkFMU0U7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCXsKKwkJCQkJcEVudHJ5LT5WYWxpZEFzQ0xJID0gVFJVRTsKKwkJCQkJcEVudHJ5LT5WYWxpZEFzV0RTID0gRkFMU0U7CisJCQkJCXBFbnRyeS0+VmFsaWRBc0FwQ2xpID0gRkFMU0U7CisJCQkJCXBFbnRyeS0+VmFsaWRBc01lc2ggPSBGQUxTRTsKKwkJCQkJcEVudHJ5LT5WYWxpZEFzRGxzID0gRkFMU0U7CisJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJfQorCisJCQlwRW50cnktPmJJQW1CYWRBdGhlcm9zID0gRkFMU0U7CisJCQlwRW50cnktPnBBZCA9IHBBZDsKKwkJCXBFbnRyeS0+Q01UaW1lclJ1bm5pbmcgPSBGQUxTRTsKKwkJCXBFbnRyeS0+RW5xdWV1ZUVhcG9sU3RhcnRUaW1lclJ1bm5pbmcgPSBFQVBPTF9TVEFSVF9ESVNBQkxFOworCQkJcEVudHJ5LT5SU05JRV9MZW4gPSAwOworCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5SX0NvdW50ZXIsIHNpemVvZihwRW50cnktPlJfQ291bnRlcikpOworCQkJcEVudHJ5LT5SZVRyeUNvdW50ZXIgPSBQRUVSX01TRzFfUkVUUllfVElNRVJfQ1RSOworCisJCQlpZiAocEVudHJ5LT5WYWxpZEFzTWVzaCkKKwkJCQlwRW50cnktPmFwaWR4ID0gKGFwaWR4IC0gTUlOX05FVF9ERVZJQ0VfRk9SX01FU0gpOworCQkJZWxzZSBpZiAocEVudHJ5LT5WYWxpZEFzQXBDbGkpCisJCQkJcEVudHJ5LT5hcGlkeCA9IChhcGlkeCAtIE1JTl9ORVRfREVWSUNFX0ZPUl9BUENMSSk7CisJCQllbHNlIGlmIChwRW50cnktPlZhbGlkQXNXRFMpCisJCQkJcEVudHJ5LT5hcGlkeCA9IChhcGlkeCAtIE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJZWxzZSBpZiAocEVudHJ5LT5WYWxpZEFzRGxzKQorCQkJCXBFbnRyeS0+YXBpZHggPSAoYXBpZHggLSBNSU5fTkVUX0RFVklDRV9GT1JfRExTKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCWVsc2UKKwkJCQlwRW50cnktPmFwaWR4ID0gYXBpZHg7CisKKwkJCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJeworCQkJCQlwRW50cnktPkF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7CisJCQkJCXBFbnRyeS0+V2VwU3RhdHVzID0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCQkJCQlwRW50cnktPlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbDsKKwkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQl9CisKKwkJCXBFbnRyeS0+R1RLU3RhdGUgPSBSRUtFWV9ORUdPVElBVElORzsKKwkJCXBFbnRyeS0+UGFpcndpc2VLZXkuS2V5TGVuID0gMDsKKwkJCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQlpZiAocEVudHJ5LT5WYWxpZEFzRGxzID09IFRSVUUpCisJCQkJcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQkJZWxzZQorI2VuZGlmIC8vUU9TX0RMU19TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlwRW50cnktPlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJcEVudHJ5LT5QTUtJRF9DYWNoZUlkeCA9IEVOVFJZX05PVF9GT1VORDsKKwkJCUNPUFlfTUFDX0FERFIocEVudHJ5LT5BZGRyLCBwQWRkcik7CisJCQlwRW50cnktPlNzdCA9IFNTVF9OT1RfQVVUSDsKKwkJCXBFbnRyeS0+QXV0aFN0YXRlID0gQVNfTk9UX0FVVEg7CisJCQlwRW50cnktPkFpZCA9IChVU0hPUlQpaTsgIC8vMDsKKwkJCXBFbnRyeS0+Q2FwYWJpbGl0eUluZm8gPSAwOworCQkJcEVudHJ5LT5Qc01vZGUgPSBQV1JfQUNUSVZFOworCQkJcEVudHJ5LT5Qc1FJZGxlQ291bnQgPSAwOworCQkJcEVudHJ5LT5Ob0RhdGFJZGxlQ291bnQgPSAwOworCQkJcEVudHJ5LT5Db250aW51ZVR4RmFpbENudCA9IDA7CisJCQlJbml0aWFsaXplUXVldWVIZWFkZXIoJnBFbnRyeS0+UHNRdWV1ZSk7CisKKworCQkJcEFkLT5NYWNUYWIuU2l6ZSArKzsKKworCQkJLy8gQWRkIHRoaXMgZW50cnkgaW50byBBU0lDIFJYIFdDSUQgc2VhcmNoIHRhYmxlCisJCQlSVDI4WFhfU1RBX0VOVFJZX0FERChwQWQsIHBFbnRyeSk7CisKKworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNUYWJsZUluc2VydEVudHJ5IC0gYWxsb2NhdGUgZW50cnkgIyVkLCBUb3RhbD0gJWRcbiIsaSwgcEFkLT5NYWNUYWIuU2l6ZSkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLyBhZGQgdGhpcyBNQUMgZW50cnkgaW50byBIQVNIIHRhYmxlCisJaWYgKHBFbnRyeSkKKwl7CisJCUhhc2hJZHggPSBNQUNfQUREUl9IQVNIX0lOREVYKHBBZGRyKTsKKwkJaWYgKHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPT0gTlVMTCkKKwkJeworCQkJcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XSA9IHBFbnRyeTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBDdXJyRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOworCQkJd2hpbGUgKHBDdXJyRW50cnktPnBOZXh0ICE9IE5VTEwpCisJCQkJcEN1cnJFbnRyeSA9IHBDdXJyRW50cnktPnBOZXh0OworCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7CisJCX0KKwl9CisKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCXJldHVybiBwRW50cnk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJRGVsZXRlIGEgc3BlY2lmaWVkIGNsaWVudCBmcm9tIE1BQyB0YWJsZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWFjVGFibGVEZWxldGVFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgd2NpZCwKKwlJTiBQVUNIQVIgcEFkZHIpCit7CisJVVNIT1JUIEhhc2hJZHg7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnksICpwUHJldkVudHJ5LCAqcFByb2JlRW50cnk7CisJQk9PTEVBTiBDYW5jZWxsZWQ7CisJLy9VU0hPUlQJb2Zmc2V0OwkvLyB1bnVzZWQgdmFyaWFibGUKKwkvL1VDSEFSCWo7CQkJLy8gdW51c2VkIHZhcmlhYmxlCisKKwlpZiAod2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuIEZBTFNFOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCUhhc2hJZHggPSBNQUNfQUREUl9IQVNIX0lOREVYKHBBZGRyKTsKKwkvL3BFbnRyeSA9IHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF07CisJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbd2NpZF07CisKKwlpZiAocEVudHJ5ICYmIChwRW50cnktPlZhbGlkQXNDTEkgfHwgcEVudHJ5LT5WYWxpZEFzQXBDbGkgfHwgcEVudHJ5LT5WYWxpZEFzV0RTIHx8IHBFbnRyeS0+VmFsaWRBc01lc2gKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKyAJCXx8IHBFbnRyeS0+VmFsaWRBc0RscworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkpKQorCXsKKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBFbnRyeS0+QWRkciwgcEFkZHIpKQorCQl7CisKKwkJCS8vIERlbGV0ZSB0aGlzIGVudHJ5IGZyb20gQVNJQyBvbi1jaGlwIFdDSUQgVGFibGUKKwkJCVJUMjhYWF9TVEFfRU5UUllfTUFDX1JFU0VUKHBBZCwgd2NpZCk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIGZyZWUgcmVzb3VyY2VzIG9mIEJBCisJCQlCQVNlc3Npb25UZWFyRG93bkFMTChwQWQsIHBFbnRyeS0+QWlkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisJCQlwUHJldkVudHJ5ID0gTlVMTDsKKwkJCXBQcm9iZUVudHJ5ID0gcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XTsKKwkJCUFTU0VSVChwUHJvYmVFbnRyeSk7CisKKwkJCS8vIHVwZGF0ZSBIYXNoIGxpc3QKKwkJCWRvCisJCQl7CisJCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkKKwkJCQl7CisJCQkJCWlmIChwUHJldkVudHJ5ID09IE5VTEwpCisJCQkJCXsKKwkJCQkJCXBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPSBwRW50cnktPnBOZXh0OworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcFByZXZFbnRyeS0+cE5leHQgPSBwRW50cnktPnBOZXh0OworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKKwkJCQlwUHJvYmVFbnRyeSA9IHBQcm9iZUVudHJ5LT5wTmV4dDsKKwkJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKKworCQkJLy8gbm90IGZvdW5kICEhIQorCQkJQVNTRVJUKHBQcm9iZUVudHJ5ICE9IE5VTEwpOworCisJCQlSVDI4WFhfU1RBX0VOVFJZX0tFWV9ERUwocEFkLCBCU1MwLCB3Y2lkKTsKKworCisJCWlmIChwRW50cnktPkVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nICE9IEVBUE9MX1NUQVJUX0RJU0FCTEUpCisJCXsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEVudHJ5LT5FbnF1ZXVlU3RhcnRGb3JQU0tUaW1lciwgJkNhbmNlbGxlZCk7CisJCQlwRW50cnktPkVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nID0gRUFQT0xfU1RBUlRfRElTQUJMRTsKKwkJfQorCisKKyAgIAkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworCQkJcEFkLT5NYWNUYWIuU2l6ZSAtLTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1hY1RhYmxlRGVsZXRlRW50cnkxIC0gVG90YWw9ICVkXG4iLCBwQWQtPk1hY1RhYi5TaXplKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwcmludGsoIlxuJXM6IEltcG9zc2libGUgV2NpZCA9ICVkICEhISEhXG4iLCBfX0ZVTkNUSU9OX18sIHdjaWQpOworCQl9CisJfQorCisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCS8vUmVzZXQgb3BlcmF0aW5nIG1vZGUgd2hlbiBubyBTdGEuCisJaWYgKHBBZC0+TWFjVGFiLlNpemUgPT0gMCkKKwl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSA9IDA7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCS8vQXNpY1VwZGF0ZVByb3RlY3QocEFkLCAwIC8qcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlKi8sIChBTExOX1NFVFBST1RFQ1QpLCBUUlVFLCAwIC8qcEFkLT5NYWNUYWIuZkFueVN0YXRpb25Ob25HRiovKTsKKwkJUlQyOFhYX1VQREFURV9QUk9URUNUKHBBZCk7ICAvLyBlZGl0IGJ5IGpvaG5saSwgZml4ICJpbl9pbnRlcnJ1cHQiIGVycm9yIHdoZW4gY2FsbCAiTWFjVGFibGVEZWxldGVFbnRyeSIgaW4gUnggdGFza2xldAorCX0KKworCXJldHVybiBUUlVFOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyByb3V0aW5lIHJlc2V0IHRoZSBlbnRpcmUgTUFDIHRhYmxlLiBBbGwgcGFja2V0cyBwZW5kaW5nIGluCisJCXRoZSBwb3dlci1zYXZpbmcgcXVldWVzIGFyZSBmcmVlZCBoZXJlLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWFjVGFibGVSZXNldCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgcEFkKQoreworCWludCAgICAgICAgIGk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNUYWJsZVJlc2V0XG4iKSk7CisJLy9OZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisJZm9yIChpPTE7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgPT0gVFJVRSkKKwkgICB7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIGZyZWUgcmVzb3VyY2VzIG9mIEJBCisJCQlCQVNlc3Npb25UZWFyRG93bkFMTChwQWQsIGkpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQlwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgPSBGQUxTRTsKKworCisKKyNpZmRlZiBSVDI4NzAKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uQWRkciwgNik7CisJCQlSVDI4WFhfU1RBX0VOVFJZX01BQ19SRVNFVChwQWQsIGkpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJCQkvL0FzaWNEZWxXY2lkVGFiKHBBZCwgaSk7CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzc29jUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfQVNTT0NfUkVRX1NUUlVDVCAqQXNzb2NSZXEsCisJSU4gUFVDSEFSICAgICAgICAgICAgICAgICAgICAgcEFkZHIsCisJSU4gVVNIT1JUICAgICAgICAgICAgICAgICAgICAgQ2FwYWJpbGl0eUluZm8sCisJSU4gVUxPTkcgICAgICAgICAgICAgICAgICAgICAgVGltZW91dCwKKwlJTiBVU0hPUlQgICAgICAgICAgICAgICAgICAgICBMaXN0ZW5JbnR2KQoreworCUNPUFlfTUFDX0FERFIoQXNzb2NSZXEtPkFkZHIsIHBBZGRyKTsKKwkvLyBBZGQgbWFzayB0byBzdXBwb3J0IDgwMi4xMWIgbW9kZSBvbmx5CisJQXNzb2NSZXEtPkNhcGFiaWxpdHlJbmZvID0gQ2FwYWJpbGl0eUluZm8gJiBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPOyAvLyBub3QgY2YtcG9sbGFibGUsIG5vdCBjZi1wb2xsLXJlcXVlc3QKKwlBc3NvY1JlcS0+VGltZW91dCA9IFRpbWVvdXQ7CisJQXNzb2NSZXEtPkxpc3RlbkludHYgPSBMaXN0ZW5JbnR2OworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIERpc2Fzc29jUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCAqRGlzYXNzb2NSZXEsCisJSU4gUFVDSEFSIHBBZGRyLAorCUlOIFVTSE9SVCBSZWFzb24pCit7CisJQ09QWV9NQUNfQUREUihEaXNhc3NvY1JlcS0+QWRkciwgcEFkZHIpOworCURpc2Fzc29jUmVxLT5SZWFzb24gPSBSZWFzb247Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNoZWNrIHRoZSBvdXQgZ29pbmcgZnJhbWUsIGlmIHRoaXMgaXMgYW4gREhDUCBvciBBUlAgZGF0YWdyYW0KKwl3aWxsIGJlIGR1cGxpY2F0ZSBhbm90aGVyIGZyYW1lIGF0IGxvdyBkYXRhIHJhdGUgdHJhbnNtaXQuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFBhY2tldCAJUG9pbnRlciB0byBvdXRnb2luZyBOZGlzIGZyYW1lCisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUJCVRvIGJlIGR1cGxpY2F0ZSBhdCBMb3cgZGF0YSByYXRlIHRyYW5zbWl0LiAoMW1iKQorCQlGQUxTRQkJRG8gbm90aGluZy4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCQlNQUMgaGVhZGVyICsgSVAgSGVhZGVyICsgVURQIEhlYWRlcgorCQkgIDE0IEJ5dGVzCSAgMjAgQnl0ZXMKKworCQlVRFAgSGVhZGVyCisJCTAwfDAxfDAyfDAzfDA0fDA1fDA2fDA3fDA4fDA5fDEwfDExfDEyfDEzfDE0fDE1fAorCQkJCQkJU291cmNlIFBvcnQKKwkJMTZ8MTd8MTh8MTl8MjB8MjF8MjJ8MjN8MjR8MjV8MjZ8Mjd8Mjh8Mjl8MzB8MzF8CisJCQkJCURlc3RpbmF0aW9uIFBvcnQKKworCQlwb3J0IDB4NDMgbWVhbnMgQm9vdHN0cmFwIFByb3RvY29sLCBzZXJ2ZXIuCisJCVBvcnQgMHg0NCBtZWFucyBCb290c3RyYXAgUHJvdG9jb2wsIGNsaWVudC4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworQk9PTEVBTiBSVE1QQ2hlY2tESENQRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJUEFDS0VUX0lORk8gCVBhY2tldEluZm87CisJVUxPTkcJCQlOdW1iZXJPZkJ5dGVzUmVhZCA9IDA7CisJVUxPTkcJCQlDdXJyZW50T2Zmc2V0ID0gMDsKKwlQVk9JRAkJCXBWaXJ0dWFsQWRkcmVzcyA9IE5VTEw7CisJVUlOVAkJCU5kaXNCdWZmZXJMZW5ndGg7CisJUFVDSEFSCQkJcFNyYzsKKwlVU0hPUlQJCQlQcm90b2NvbDsKKwlVQ0hBUgkJCUJ5dGVPZmZzZXQzNiA9IDA7CisJVUNIQVIJCQlCeXRlT2Zmc2V0MzggPSAwOworCUJPT0xFQU4gCQlSZWFkRmlyc3RQYXJtID0gVFJVRTsKKworCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAoUFVDSEFSICopJnBWaXJ0dWFsQWRkcmVzcywgJk5kaXNCdWZmZXJMZW5ndGgpOworCisJTnVtYmVyT2ZCeXRlc1JlYWQgKz0gTmRpc0J1ZmZlckxlbmd0aDsKKwlwU3JjID0gKFBVQ0hBUikgcFZpcnR1YWxBZGRyZXNzOworCVByb3RvY29sID0gKihwU3JjICsgMTIpICogMjU2ICsgKihwU3JjICsgMTMpOworCisJLy8KKwkvLyBDaGVjayBESENQICYgQk9PVFAgcHJvdG9jb2wKKwkvLworCXdoaWxlIChOdW1iZXJPZkJ5dGVzUmVhZCA8PSBQYWNrZXRJbmZvLlRvdGFsUGFja2V0TGVuZ3RoKQorCXsKKwkJaWYgKChOdW1iZXJPZkJ5dGVzUmVhZCA+PSAzNSkgJiYgKFJlYWRGaXJzdFBhcm0gPT0gVFJVRSkpCisJCXsKKwkJCUN1cnJlbnRPZmZzZXQgPSAzNSAtIChOdW1iZXJPZkJ5dGVzUmVhZCAtIE5kaXNCdWZmZXJMZW5ndGgpOworCQkJQnl0ZU9mZnNldDM2ID0gKihwU3JjICsgQ3VycmVudE9mZnNldCk7CisJCQlSZWFkRmlyc3RQYXJtID0gRkFMU0U7CisJCX0KKworCQlpZiAoTnVtYmVyT2ZCeXRlc1JlYWQgPj0gMzcpCisJCXsKKwkJCUN1cnJlbnRPZmZzZXQgPSAzNyAtIChOdW1iZXJPZkJ5dGVzUmVhZCAtIE5kaXNCdWZmZXJMZW5ndGgpOworCQkJQnl0ZU9mZnNldDM4ID0gKihwU3JjICsgQ3VycmVudE9mZnNldCk7CisJCQkvL0VuZCBvZiBSZWFkCisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gRkFMU0U7CisJfQorCisJLy8gQ2hlY2sgZm9yIERIQ1AgJiBCT09UUCBwcm90b2NvbAorCWlmICgoQnl0ZU9mZnNldDM2ICE9IDB4NDQpIHx8IChCeXRlT2Zmc2V0MzggIT0gMHg0MykpCisJCXsKKwkJLy8KKwkJLy8gMjA1NCAoaGV4IDA4MDYpIGZvciBBUlAgZGF0YWdyYW1zCisJCS8vIGlmIHRoaXMgcGFja2V0IGlzIG5vdCBBUlAgZGF0YWdyYW1zLCB0aGVuIGRvIG5vdGhpbmcKKwkJLy8gQVJQIGRhdGFncmFtcyB3aWxsIGFsc28gYmUgZHVwbGljYXRlIGF0IDFtYiBicm9hZGNhc3QgZnJhbWVzCisJCS8vCisJCWlmIChQcm90b2NvbCAhPSAweDA4MDYgKQorCQkJcmV0dXJuIEZBTFNFOworCQl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitCT09MRUFOIFJUTVBDaGVja0V0aGVyVHlwZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCkKK3sKKwlVU0hPUlQJVHlwZUxlbjsKKwlVQ0hBUglCeXRlMCwgQnl0ZTE7CisJUFVDSEFSCXBTcmNCdWY7CisJVUlOVDMyCXBrdExlbjsKKwlVSU5UMTYgCXNyY1BvcnQsIGRzdFBvcnQ7CisJQk9PTEVBTglzdGF0dXMgPSBUUlVFOworCisKKwlwU3JjQnVmID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCXBrdExlbiA9IEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCisJQVNTRVJUKHBTcmNCdWYpOworCisJUlRNUF9TRVRfUEFDS0VUX1NQRUNJRklDKHBQYWNrZXQsIDApOworCisJLy8gZ2V0IEV0aGVybmV0IHByb3RvY29sIGZpZWxkCisJVHlwZUxlbiA9IChwU3JjQnVmWzEyXSA8PCA4KSArIHBTcmNCdWZbMTNdOworCisJcFNyY0J1ZiArPSBMRU5HVEhfODAyXzM7CS8vIFNraXAgdGhlIEV0aGVybmV0IEhlYWRlci4KKworCWlmIChUeXBlTGVuIDw9IDE1MDApCisJewkvLyA4MDIuMywgODAyLjMgTExDCisJCS8qCisJCQlEZXN0TUFDKDYpICsgU3JjTUFDKDYpICsgTGVuZ2h0KDIpICsKKwkJCURTQVAoMSkgKyBTU0FQKDEpICsgQ29udHJvbCgxKSArCisJCQlpZiB0aGUgRFNBUCA9IDB4QUEsIFNTQVA9MHhBQSwgQ29udG9ybCA9IDB4MDMsIGl0IGhhcyBhIDUtYnl0ZXMgU05BUCBoZWFkZXIuCisJCQkJPT4gKyBTTkFQICg1LCBPcmlnaW5hdGlvbklEKDMpICsgZXRoZXJUeXBlKDIpKQorCQkqLworCQlpZiAocFNyY0J1ZlswXSA9PSAweEFBICYmIHBTcmNCdWZbMV0gPT0gMHhBQSAmJiBwU3JjQnVmWzJdID09IDB4MDMpCisJCXsKKwkJCVNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIocFNyY0J1ZiwgNiwgJkJ5dGUwLCAmQnl0ZTEpOworCQkJUlRNUF9TRVRfUEFDS0VUX0xMQ1NOQVAocFBhY2tldCwgMSk7CisJCQlUeXBlTGVuID0gKFVTSE9SVCkoKEJ5dGUwIDw8IDgpICsgQnl0ZTEpOworCQkJcFNyY0J1ZiArPSA4OyAvLyBTa2lwIHRoaXMgTExDL1NOQVAgaGVhZGVyCisJCX0KKwkJZWxzZQorCQl7CisJCQkvL0l0IGp1c3QgaGFzIDMtYnl0ZSBMTEMgaGVhZGVyLCBtYXliZSBhIGxlZ2FjeSBldGhlciB0eXBlIGZyYW1lLiB3ZSBkaWRuJ3QgaGFuZGxlIGl0LgorCQl9CisJfQorCisJLy8gSWYgaXQncyBhIFZMQU4gcGFja2V0LCBnZXQgdGhlIHJlYWwgVHlwZS9MZW5ndGggZmllbGQuCisJaWYgKFR5cGVMZW4gPT0gMHg4MTAwKQorCXsKKwkJLyogMHg4MTAwIG1lYW5zIFZMQU4gcGFja2V0cyAqLworCisJCS8qIERlc3QuIE1BQyBBZGRyZXNzICg2LWJ5dGVzKSArCisJCSAgIFNvdXJjZSBNQUMgQWRkcmVzcyAoNi1ieXRlcykgKworCQkgICBMZW5ndGgvVHlwZSA9IDgwMi4xUSBUYWcgVHlwZSAoMi1ieXRlKSArCisJCSAgIFRhZyBDb250cm9sIEluZm9ybWF0aW9uICgyLWJ5dGVzKSArCisJCSAgIExlbmd0aCAvIFR5cGUgKDItYnl0ZXMpICsKKwkJICAgZGF0YSBwYXlsb2FkICgwLW4gYnl0ZXMpICsKKwkJICAgUGFkICgwLXAgYnl0ZXMpICsKKwkJICAgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgKDQtYnl0ZXMpICovCisKKwkJUlRNUF9TRVRfUEFDS0VUX1ZMQU4ocFBhY2tldCwgMSk7CisJCVNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIocFNyY0J1ZiwgMiwgJkJ5dGUwLCAmQnl0ZTEpOworCQlUeXBlTGVuID0gKFVTSE9SVCkoKEJ5dGUwIDw8IDgpICsgQnl0ZTEpOworCisJCXBTcmNCdWYgKz0gNDsgLy8gU2tpcCB0aGUgVkxBTiBIZWFkZXIuCisJfQorCisJc3dpdGNoIChUeXBlTGVuKQorCXsKKwkJY2FzZSAweDA4MDA6CisJCQl7CisJCQkJQVNTRVJUKChwa3RMZW4gPiAzNCkpOworCQkJCWlmICgqKHBTcmNCdWYgKyA5KSA9PSAweDExKQorCQkJCXsJLy8gdWRwIHBhY2tldAorCQkJCQlBU1NFUlQoKHBrdExlbiA+IDM0KSk7CS8vIDE0IGZvciBldGhlcm5ldCBoZWFkZXIsIDIwIGZvciBJUCBoZWFkZXIKKworCQkJCQlwU3JjQnVmICs9IDIwOwkvLyBTa2lwIHRoZSBJUCBoZWFkZXIKKwkJCQkJc3JjUG9ydCA9IE9TX05UT0hTKCooKFVJTlQxNiAqKXBTcmNCdWYpKTsKKwkJCQkJZHN0UG9ydCA9IE9TX05UT0hTKCooKFVJTlQxNiAqKShwU3JjQnVmICsyKSkpOworCisJCQkJCWlmICgoc3JjUG9ydD09MHg0NCAmJiBkc3RQb3J0PT0weDQzKSB8fCAoc3JjUG9ydD09MHg0MyAmJiBkc3RQb3J0PT0weDQ0KSkKKwkJCQkJewkvL0l0J3MgYSBCT09UUC9ESENQIHBhY2tldAorCQkJCQkJUlRNUF9TRVRfUEFDS0VUX0RIQ1AocFBhY2tldCwgMSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAweDA4MDY6CisJCQl7CisJCQkJLy9BUlAgUGFja2V0LgorCQkJCVJUTVBfU0VUX1BBQ0tFVF9ESENQKHBQYWNrZXQsIDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMHg4ODhlOgorCQkJeworCQkJCS8vIEVBUE9MIFBhY2tldC4KKwkJCQlSVE1QX1NFVF9QQUNLRVRfRUFQT0wocFBhY2tldCwgMSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXN0YXR1cyA9IEZBTFNFOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKKworfQorCisKKworVk9JRCBVcGRhdGVfUnNzaV9TYW1wbGUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUlNTSV9TQU1QTEUJCSpwUnNzaSwKKwlJTiBQUlhXSV9TVFJVQwkJcFJ4V0kpCisJCXsKKwlDSEFSCXJzc2kwID0gcFJ4V0ktPlJTU0kwOworCUNIQVIJcnNzaTEgPSBwUnhXSS0+UlNTSTE7CisJQ0hBUglyc3NpMiA9IHBSeFdJLT5SU1NJMjsKKworCWlmIChyc3NpMCAhPSAwKQorCXsKKwkJcFJzc2ktPkxhc3RSc3NpMAk9IENvbnZlcnRUb1Jzc2kocEFkLCAoQ0hBUilyc3NpMCwgUlNTSV8wKTsKKwkJcFJzc2ktPkF2Z1Jzc2kwWDgJPSAocFJzc2ktPkF2Z1Jzc2kwWDggLSBwUnNzaS0+QXZnUnNzaTApICsgcFJzc2ktPkxhc3RSc3NpMDsKKwkJcFJzc2ktPkF2Z1Jzc2kwCT0gcFJzc2ktPkF2Z1Jzc2kwWDggPj4gMzsKKwl9CisKKwlpZiAocnNzaTEgIT0gMCkKKwl7CisJCXBSc3NpLT5MYXN0UnNzaTEJPSBDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpcnNzaTEsIFJTU0lfMSk7CisJCXBSc3NpLT5BdmdSc3NpMVg4CT0gKHBSc3NpLT5BdmdSc3NpMVg4IC0gcFJzc2ktPkF2Z1Jzc2kxKSArIHBSc3NpLT5MYXN0UnNzaTE7CisJCXBSc3NpLT5BdmdSc3NpMQk9IHBSc3NpLT5BdmdSc3NpMVg4ID4+IDM7CisJfQorCisJaWYgKHJzc2kyICE9IDApCisJeworCQlwUnNzaS0+TGFzdFJzc2kyCT0gQ29udmVydFRvUnNzaShwQWQsIChDSEFSKXJzc2kyLCBSU1NJXzIpOworCQlwUnNzaS0+QXZnUnNzaTJYOCAgPSAocFJzc2ktPkF2Z1Jzc2kyWDggLSBwUnNzaS0+QXZnUnNzaTIpICsgcFJzc2ktPkxhc3RSc3NpMjsKKwkJcFJzc2ktPkF2Z1Jzc2kyID0gcFJzc2ktPkF2Z1Jzc2kyWDggPj4gMzsKKwl9Cit9CisKKworCisvLyBOb3JtYWwgbGVnYWN5IFJ4IHBhY2tldCBpbmRpY2F0aW9uCitWT0lEIEluZGljYXRlX0xlZ2FjeV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCVBORElTX1BBQ0tFVAlwUnhQYWNrZXQgPSBwUnhCbGstPnBSeFBhY2tldDsKKwlVQ0hBUgkJCUhlYWRlcjgwMl8zW0xFTkdUSF84MDJfM107CisKKwkvLyAxLiBnZXQgODAyLjMgSGVhZGVyCisJLy8gMi4gcmVtb3ZlIExMQworCS8vIAkJYS4gcG9pbnRlciBwUnhCbGstPnBEYXRhIHRvIHBheWxvYWQKKwkvLyAgICAgIGIuIG1vZGlmeSBwUnhCbGstPkRhdGFTaXplCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJUlRNUF84MDJfMTFfUkVNT1ZFX0xMQ19BTkRfQ09OVkVSVF9UT184MDJfMyhwUnhCbGssIEhlYWRlcjgwMl8zKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChwUnhCbGstPkRhdGFTaXplID4gTUFYX1JYX1BLVF9MRU4pCisJeworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuOworCX0KKworCisJU1RBVFNfSU5DX1JYX1BBQ0tFVFMocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisKKyNpZmRlZiBSVDI4NzAKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAocEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID09IDApCisJeworCQlQQkFfUkVDX0VOVFJZCQlwQkFFbnRyeTsKKwkJVUxPTkcJCQkJTm93MzI7CisJCVVDSEFSCQkJCVdjaWQgPSBwUnhCbGstPnBSeFdJLT5XaXJlbGVzc0NsaUlEOworCQlVQ0hBUgkJCQlUSUQgPSBwUnhCbGstPnBSeFdJLT5USUQ7CisJCVVTSE9SVAkJCQlJZHg7CisKKyNkZWZpbmUgUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVAkJKCgxMDAgKiBIWikvMTAwMCkJLy8gc3lzdGVtIHRpY2tzIC0tIDEwMCBtcworCisJCWlmIChXY2lkIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXsKKwkJCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFSZWNXY2lkQXJyYXlbVElEXTsKKwkJCWlmIChJZHggIT0gMCkKKwkJCXsKKwkJCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtJZHhdOworCQkJCS8vIHVwZGF0ZSBsYXN0IHJ4IHRpbWUKKwkJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3czMik7CisJCQkJaWYgKChwQkFFbnRyeS0+bGlzdC5xbGVuID4gMCkgJiYKKwkJCQkJIFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lcisoUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVCkpKQorCSAgIAkJCQkpCisJCQkJeworCQkJCQlwcmludGsoIkluZGljYXRlX0xlZ2FjeV9QYWNrZXQoKTpmbHVzaCByZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMhIFJ4V0ktPkZsYWdzPSVkLCBwUnhXSS5USUQ9JWQsIFJ4RC0+QU1QRFU9JWQhXG4iLCBwUnhCbGstPkZsYWdzLCBwUnhCbGstPnBSeFdJLT5USUQsIHBSeEJsay0+UnhELkFNUERVKTsKKwkJCQkJaGV4X2R1bXAoIkR1bXAgdGhlIGxlZ2FjeSBQYWNrZXQ6IiwgR0VUX09TX1BLVF9EQVRBUFRSKHBSeEJsay0+cFJ4UGFja2V0KSwgNjQpOworCQkJCQliYV9mbHVzaF9yZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMocEFkLCBwQkFFbnRyeSwgTm93MzIpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCXdsYW5fODAyXzExX3RvXzgwMl8zX3BhY2tldChwQWQsIHBSeEJsaywgSGVhZGVyODAyXzMsIEZyb21XaGljaEJTU0lEKTsKKworCS8vCisJLy8gcGFzcyB0aGlzIDgwMi4zIHBhY2tldCB0byB1cHBlciBsYXllciBvciBmb3J3YXJkIHRoaXMgcGFja2V0IHRvIFdNIGRpcmVjdGx5CisJLy8KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlBTk5PVU5DRV9PUl9GT1JXQVJEXzgwMl8zX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgRnJvbVdoaWNoQlNTSUQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit9CisKKworLy8gTm9ybWFsLCBBTVBEVSBvciBBTVNEVQorVk9JRCBDbW1SeG5vblJhbGlua0ZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNUERVKSAmJiAocEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID09IDApKQorCXsKKwkJSW5kaWNhdGVfQU1QRFVfUGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNU0RVKSkKKwkJeworCQkJLy8gaGFuZGxlIEEtTVNEVQorCQkJSW5kaWNhdGVfQU1TRFVfUGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl7CisJCQlJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCX0KKwl9Cit9CisKKworVk9JRCBDbW1SeFJhbGlua0ZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCVVDSEFSCQkJSGVhZGVyODAyXzNbTEVOR1RIXzgwMl8zXTsKKwlVSU5UMTYJCQlNc2R1MlNpemU7CisJVUlOVDE2IAkJCVBheWxvYWQxU2l6ZSwgUGF5bG9hZDJTaXplOworCVBVQ0hBUiAJCQlwRGF0YTI7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQyID0gTlVMTDsKKworCisKKwlNc2R1MlNpemUgPSAqKHBSeEJsay0+cERhdGEpICsgKCoocFJ4QmxrLT5wRGF0YSsxKSA8PCA4KTsKKworCWlmICgoTXNkdTJTaXplIDw9IDE1MzYpICYmIChNc2R1MlNpemUgPCBwUnhCbGstPkRhdGFTaXplKSkKKwl7CisJCS8qIHNraXAgdHdvIGJ5dGUgTVNEVTIgbGVuICovCisJCXBSeEJsay0+cERhdGEgKz0gMjsKKwkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSAyOworCX0KKwllbHNlCisJeworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJLy8gZ2V0IDgwMi4zIEhlYWRlciBhbmQgIHJlbW92ZSBMTEMKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlSVE1QXzgwMl8xMV9SRU1PVkVfTExDX0FORF9DT05WRVJUX1RPXzgwMl8zKHBSeEJsaywgSGVhZGVyODAyXzMpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKwlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworCisJLy8gUmFsaW5rIEFnZ3JlZ2F0aW9uIGZyYW1lCisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQgKys7CisJUGF5bG9hZDFTaXplID0gcFJ4QmxrLT5EYXRhU2l6ZSAtIE1zZHUyU2l6ZTsKKwlQYXlsb2FkMlNpemUgPSBNc2R1MlNpemUgLSBMRU5HVEhfODAyXzM7CisKKwlwRGF0YTIgPSBwUnhCbGstPnBEYXRhICsgUGF5bG9hZDFTaXplICsgTEVOR1RIXzgwMl8zOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXBQYWNrZXQyID0gZHVwbGljYXRlX3BrdChwQWQsIChwRGF0YTItTEVOR1RIXzgwMl8zKSwgTEVOR1RIXzgwMl8zLCBwRGF0YTIsIFBheWxvYWQyU2l6ZSwgRnJvbVdoaWNoQlNTSUQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJaWYgKCFwUGFja2V0MikKKwl7CisJCS8vIHJlbGVhc2UgcGFja2V0CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybjsKKwl9CisKKwkvLyB1cGRhdGUgcGF5bG9hZCBzaXplIG9mIDFzdCBwYWNrZXQKKwlwUnhCbGstPkRhdGFTaXplID0gUGF5bG9hZDFTaXplOworCXdsYW5fODAyXzExX3RvXzgwMl8zX3BhY2tldChwQWQsIHBSeEJsaywgSGVhZGVyODAyXzMsIEZyb21XaGljaEJTU0lEKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCUFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIEZyb21XaGljaEJTU0lEKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChwUGFja2V0MikKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlBTk5PVU5DRV9PUl9GT1JXQVJEXzgwMl8zX1BBQ0tFVChwQWQsIHBQYWNrZXQyLCBGcm9tV2hpY2hCU1NJRCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorfQorCisKKyNkZWZpbmUgUkVTRVRfRlJBR0ZSQU1FKF9mcmFnRnJhbWUpIFwKKwl7CQkJCQkJCQlcCisJCV9mcmFnRnJhbWUuUnhTaXplID0gMDsJCVwKKwkJX2ZyYWdGcmFtZS5TZXF1ZW5jZSA9IDA7CVwKKwkJX2ZyYWdGcmFtZS5MYXN0RnJhZyA9IDA7CVwKKwkJX2ZyYWdGcmFtZS5GbGFncyA9IDA7CQlcCisJfQorCisKK1BORElTX1BBQ0tFVCBSVE1QRGVGcmFnbWVudERhdGFGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrKQoreworCVBIRUFERVJfODAyXzExCXBIZWFkZXIgPSBwUnhCbGstPnBIZWFkZXI7CisJUE5ESVNfUEFDS0VUCXBSeFBhY2tldCA9IHBSeEJsay0+cFJ4UGFja2V0OworCVVDSEFSCQkJKnBEYXRhID0gcFJ4QmxrLT5wRGF0YTsKKwlVU0hPUlQJCQlEYXRhU2l6ZSA9IHBSeEJsay0+RGF0YVNpemU7CisJUE5ESVNfUEFDS0VUCXBSZXRQYWNrZXQgPSBOVUxMOworCVVDSEFSCQkJKnBGcmFnQnVmZmVyID0gTlVMTDsKKwlCT09MRUFOIAkJYlJlYXNzRG9uZSA9IEZBTFNFOworCVVDSEFSCQkJSGVhZGVyUm9vbSA9IDA7CisKKworCUFTU0VSVChwSGVhZGVyKTsKKworCUhlYWRlclJvb20gPSBwRGF0YSAtIChVQ0hBUiAqKXBIZWFkZXI7CisKKwkvLyBSZS1hc3NlbWJsZSB0aGUgZnJhZ21lbnRlZCBwYWNrZXRzCisJaWYgKHBIZWFkZXItPkZyYWcgPT0gMCkJCS8vIEZyYWcuIE51bWJlciBpcyAwIDogRmlyc3QgZnJhZyBvciBvbmx5IG9uZSBwa3QKKwl7CisJCS8vIHRoZSBmaXJzdCBwa3Qgb2YgZnJhZ21lbnQsIHJlY29yZCBpdC4KKwkJaWYgKHBIZWFkZXItPkZDLk1vcmVGcmFnKQorCQl7CisJCQlBU1NFUlQocEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQpOworCQkJcEZyYWdCdWZmZXIgPSBHRVRfT1NfUEtUX0RBVEFQVFIocEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQpOworCQkJcEFkLT5GcmFnRnJhbWUuUnhTaXplICAgPSBEYXRhU2l6ZSArIEhlYWRlclJvb207CisJCQlOZGlzTW92ZU1lbW9yeShwRnJhZ0J1ZmZlciwJIHBIZWFkZXIsIHBBZC0+RnJhZ0ZyYW1lLlJ4U2l6ZSk7CisJCQlwQWQtPkZyYWdGcmFtZS5TZXF1ZW5jZSA9IHBIZWFkZXItPlNlcXVlbmNlOworCQkJcEFkLT5GcmFnRnJhbWUuTGFzdEZyYWcgPSBwSGVhZGVyLT5GcmFnOwkgICAvLyBTaG91bGQgYmUgMAorCQkJQVNTRVJUKHBBZC0+RnJhZ0ZyYW1lLkxhc3RGcmFnID09IDApOworCQkJZ290byBkb25lOwkvLyBlbmQgb2YgcHJvY2Vzc2luZyB0aGlzIGZyYW1lCisJCX0KKwl9CisJZWxzZQkvL01pZGRsZSAmIEVuZCBvZiBmcmFnbWVudAorCXsKKwkJaWYgKChwSGVhZGVyLT5TZXF1ZW5jZSAhPSBwQWQtPkZyYWdGcmFtZS5TZXF1ZW5jZSkgfHwKKwkJCShwSGVhZGVyLT5GcmFnICE9IChwQWQtPkZyYWdGcmFtZS5MYXN0RnJhZyArIDEpKSkKKwkJeworCQkJLy8gRnJhZ21lbnQgaXMgbm90IHRoZSBzYW1lIHNlcXVlbmNlIG9yIG91dCBvZiBmcmFnbWVudCBudW1iZXIgb3JkZXIKKwkJCS8vIFJlc2V0IEZyYWdtZW50IGNvbnRyb2wgYmxrCisJCQlSRVNFVF9GUkFHRlJBTUUocEFkLT5GcmFnRnJhbWUpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRnJhZ21lbnQgaXMgbm90IHRoZSBzYW1lIHNlcXVlbmNlIG9yIG91dCBvZiBmcmFnbWVudCBudW1iZXIgb3JkZXIuXG4iKSk7CisJCQlnb3RvIGRvbmU7IC8vIGdpdmUgdXAgdGhpcyBmcmFtZQorCQl9CisJCWVsc2UgaWYgKChwQWQtPkZyYWdGcmFtZS5SeFNpemUgKyBEYXRhU2l6ZSkgPiBNQVhfRlJBTUVfU0laRSkKKwkJeworCQkJLy8gRnJhZ21lbnQgZnJhbWUgaXMgdG9vIGxhcmdlLCBpdCBleGVlZHMgdGhlIG1heGltdW0gZnJhbWUgc2l6ZS4KKwkJCS8vIFJlc2V0IEZyYWdtZW50IGNvbnRyb2wgYmxrCisJCQlSRVNFVF9GUkFHRlJBTUUocEFkLT5GcmFnRnJhbWUpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRnJhZ21lbnQgZnJhbWUgaXMgdG9vIGxhcmdlLCBpdCBleGVlZHMgdGhlIG1heGltdW0gZnJhbWUgc2l6ZS5cbiIpKTsKKwkJCWdvdG8gZG9uZTsgLy8gZ2l2ZSB1cCB0aGlzIGZyYW1lCisJCX0KKworICAgICAgICAvLworCQkvLyBCcm9hZGNvbSBBUChCQ005NDcwNEFHUikgd2lsbCBzZW5kIG91dCBMTEMgaW4gZnJhZ21lbnQncyBwYWNrZXQsIExMQyBvbmx5IGNhbiBhY2NwZXQgYXQgZmlyc3QgZnJhZ21lbnQuCisJCS8vIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCBkcm9wdCBpdC4KKwkJLy8KKwkJaWYgKE5kaXNFcXVhbE1lbW9yeShwRGF0YSwgU05BUF84MDJfMUgsIHNpemVvZihTTkFQXzgwMl8xSCkpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJGaW5kIGFub3RoZXIgTExDIGF0IE1pZGRsZSBvciBFbmQgZnJhZ21lbnQoU049JWQsIEZyYWc9JWQpXG4iLCBwSGVhZGVyLT5TZXF1ZW5jZSwgcEhlYWRlci0+RnJhZykpOworCQkJZ290byBkb25lOyAvLyBnaXZlIHVwIHRoaXMgZnJhbWUKKwkJfQorCisJCXBGcmFnQnVmZmVyID0gR0VUX09TX1BLVF9EQVRBUFRSKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KTsKKworCQkvLyBjb25jYXRlbmF0ZSB0aGlzIGZyYWdtZW50IGludG8gdGhlIHJlLWFzc2VtYmx5IGJ1ZmZlcgorCQlOZGlzTW92ZU1lbW9yeSgocEZyYWdCdWZmZXIgKyBwQWQtPkZyYWdGcmFtZS5SeFNpemUpLCBwRGF0YSwgRGF0YVNpemUpOworCQlwQWQtPkZyYWdGcmFtZS5SeFNpemUgICs9IERhdGFTaXplOworCQlwQWQtPkZyYWdGcmFtZS5MYXN0RnJhZyA9IHBIZWFkZXItPkZyYWc7CSAgIC8vIFVwZGF0ZSBmcmFnbWVudCBudW1iZXIKKworCQkvLyBMYXN0IGZyYWdtZW50CisJCWlmIChwSGVhZGVyLT5GQy5Nb3JlRnJhZyA9PSBGQUxTRSkKKwkJeworCQkJYlJlYXNzRG9uZSA9IFRSVUU7CisJCX0KKwl9CisKK2RvbmU6CisJLy8gYWx3YXlzIHJlbGVhc2UgcnggZnJhZ21lbnRlZCBwYWNrZXQKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKworCS8vIHJldHVybiBkZWZyYWdtZW50ZWQgcGFja2V0IGlmIHBhY2tldCBpcyByZWFzc2VtYmxlZCBjb21wbGV0ZWx5CisJLy8gb3RoZXJ3aXNlIHJldHVybiBOVUxMCisJaWYgKGJSZWFzc0RvbmUpCisJeworCQlQTkRJU19QQUNLRVQgcE5ld0ZyYWdQYWNrZXQ7CisKKwkJLy8gYWxsb2NhdGUgYSBuZXcgcGFja2V0IGJ1ZmZlciBmb3IgZnJhZ21lbnQKKwkJcE5ld0ZyYWdQYWNrZXQgPSBSVE1QX0FsbG9jYXRlRnJhZ1BhY2tldEJ1ZmZlcihwQWQsIFJYX0JVRkZFUl9OT1JNU0laRSk7CisJCWlmIChwTmV3RnJhZ1BhY2tldCkKKwkJeworCQkJLy8gdXBkYXRlIFJ4QmxrCisJCQlwUmV0UGFja2V0ID0gcEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQ7CisJCQlwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCA9IHBOZXdGcmFnUGFja2V0OworCQkJcFJ4QmxrLT5wSGVhZGVyID0gKFBIRUFERVJfODAyXzExKSBHRVRfT1NfUEtUX0RBVEFQVFIocFJldFBhY2tldCk7CisJCQlwUnhCbGstPnBEYXRhID0gKFVDSEFSICopcFJ4QmxrLT5wSGVhZGVyICsgSGVhZGVyUm9vbTsKKwkJCXBSeEJsay0+RGF0YVNpemUgPSBwQWQtPkZyYWdGcmFtZS5SeFNpemUgLSBIZWFkZXJSb29tOworCQkJcFJ4QmxrLT5wUnhQYWNrZXQgPSBwUmV0UGFja2V0OworCQl9CisJCWVsc2UKKwkJeworCQkJUkVTRVRfRlJBR0ZSQU1FKHBBZC0+RnJhZ0ZyYW1lKTsKKwkJfQorCX0KKworCXJldHVybiBwUmV0UGFja2V0OworfQorCisKK1ZPSUQgSW5kaWNhdGVfQU1TRFVfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlVSU5UCQkJbk1TRFU7CisKKwl1cGRhdGVfb3NfcGFja2V0X2luZm8ocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwlSVE1QX1NFVF9QQUNLRVRfSUYocFJ4QmxrLT5wUnhQYWNrZXQsIEZyb21XaGljaEJTU0lEKTsKKwluTVNEVSA9IGRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIHBSeEJsay0+cERhdGEsIHBSeEJsay0+RGF0YVNpemUpOworfQorCitWT0lEIEluZGljYXRlX0VBUE9MX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJCVNUQVJ4RUFQT0xGcmFtZUluZGljYXRlKHBBZCwgcEVudHJ5LCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChwRW50cnkgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiSW5kaWNhdGVfRUFQT0xfUGFja2V0OiBkcm9wIGFuZCByZWxlYXNlIHRoZSBpbnZhbGlkIHBhY2tldC5cbiIpKTsKKwkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuOworCX0KK30KKworI2RlZmluZSBCQ05fVEJUVF9PRkZTRVQJCTY0CS8vZGVmZXIgNjQgdXMKK1ZPSUQgUmVTeW5jQmVhY29uVGltZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCkKK3sKKworCVVJTlQzMiAgT2Zmc2V0OworCisKKwlPZmZzZXQgPSAocEFkLT5UYnR0VGlja0NvdW50KSAlIChCQ05fVEJUVF9PRkZTRVQpOworCisJcEFkLT5UYnR0VGlja0NvdW50Kys7CisKKwkvLworCS8vIFRoZSB1cGRhdGVkIEJlYWNvbkludGVydmFsIFZhbHVlIHdpbGwgYWZmZWN0IEJlYWNvbiBJbnRlcnZhbCBhZnRlciB0d28gVEJUVAorCS8vIGJlYWNhc3VlIHRoZSBvcmlnaW5hbCBCZWFjb25JbnRlcnZhbCBoYWQgYmVlbiBsb2FkZWQgaW50byBuZXh0IFRCVFRfVElNRVIKKwkvLworCWlmIChPZmZzZXQgPT0gKEJDTl9UQlRUX09GRlNFVC0yKSkKKwl7CisJCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCAmY3NyLndvcmQpOworCQljc3IuZmllbGQuQmVhY29uSW50ZXJ2YWwgPSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDQpIC0gMSA7CS8vIEFTSUMgcmVnaXN0ZXIgaW4gdW5pdHMgb2YgMS8xNiBUVSA9IDY0dXMKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7CisJfQorCWVsc2UKKwl7CisJCWlmIChPZmZzZXQgPT0gKEJDTl9UQlRUX09GRlNFVC0xKSkKKwkJeworCQkJQkNOX1RJTUVfQ0ZHX1NUUlVDIGNzcjsKKworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBCQ05fVElNRV9DRkcsICZjc3Iud29yZCk7CisJCQljc3IuZmllbGQuQmVhY29uSW50ZXJ2YWwgPSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kKSA8PCA0OyAvLyBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyLndvcmQpOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fZGF0YV8yODcwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fZGF0YV8yODcwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwNjZhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9kYXRhXzI4NzAuYwpAQCAtMCwwICsxLDk4MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKKyAgIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIG11c3QgYmUgVVNCLWRlcGVuZGVkLCBvciB5b3Ugc2hvdWxkIG91dCB5b3VyIGZ1bmN0aW9uCisJaW4gb3RoZXIgZmlsZXMuCisKKyovCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKKworLyoKKwlXZSBjYW4gZG8gY29weSB0aGUgZnJhbWUgaW50byBwVHhDb250ZXh0IHdoZW4gbWF0Y2ggZm9sbG93aW5nIGNvbmRpdGlvbnMuCisJCT0+CisJCT0+CisJCT0+CisqLworc3RhdGljIGlubGluZSBORElTX1NUQVRVUyBSdG1wVVNCQ2FuRG9Xcml0ZSgKKwlJTiBSVE1QX0FEQVBURVIJCSpwQWQsCisJSU4gVUNIQVIJCQlRdWVJZHgsCisJSU4gSFRfVFhfQ09OVEVYVCAJKnBIVFRYQ29udGV4dCkKK3sKKwlORElTX1NUQVRVUwljYW5Xcml0ZSA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKworCWlmICgoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikgPCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pICYmIChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyBMT0NBTF9UWEJVRl9TSVpFKSA+IHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUnRtcFVTQkNhbkRvV3JpdGUgYzEhXG4iKSk7CisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IFF1ZUlkeCkpOworCX0KKwllbHNlIGlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID09IDgpICYmIChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPCBMT0NBTF9UWEJVRl9TSVpFKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUnRtcFVTQkNhbkRvV3JpdGUgYzIhXG4iKSk7CisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IFF1ZUlkeCkpOworCX0KKwllbHNlIGlmIChwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IFRSVUUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlJ0bXBVU0JDYW5Eb1dyaXRlIGMzIVxuIikpOworCX0KKwllbHNlCisJeworCQljYW5Xcml0ZSA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJfQorCisKKwlyZXR1cm4gY2FuV3JpdGU7Cit9CisKKworVVNIT1JUIFJ0bXBVU0JfV3JpdGVTdWJUeFJlc291cmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JQk9PTEVBTgkJCWJJc0xhc3QsCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKQoreworCisJLy8gRHVtbXkgZnVuY3Rpb24uIFNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCisJcmV0dXJuIDA7CisKK30KKworVVNIT1JUCVJ0bXBVU0JfV3JpdGVGcmFnVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJZnJhZ051bSwKKwlPVVQJVVNIT1JUCQkJKkZyZWVOdW1iZXIpCit7CisJSFRfVFhfQ09OVEVYVAkqcEhUVFhDb250ZXh0OworCVVTSE9SVAkJCWh3SGRyTGVuOwkvLyBUaGUgaHdIZHJMZW4gY29uc2lzdCBvZiA4MDIuMTEgaGVhZGVyIGxlbmd0aCBwbHVzIHRoZSBoZWFkZXIgcGFkZGluZyBsZW5ndGguCisJVUlOVDMyCQkJZmlsbE9mZnNldDsKKwlUWElORk9fU1RSVUMJKnBUeEluZm87CisJVFhXSV9TVFJVQwkJKnBUeFdJOworCVBVQ0hBUgkJCXBXaXJlbGVzc1BhY2tldCA9IE5VTEw7CisJVUNIQVIJCQlRdWVJZHg7CisJTkRJU19TVEFUVVMJCVN0YXR1czsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCVVJTlQzMgkJCVVTQkRNQXBrdExlbiA9IDAsIERNQUhkckxlbiwgcGFkZGluZzsKKwlCT09MRUFOCQkJVHhRTGFzdFJvdW5kID0gRkFMU0U7CisKKwkvLworCS8vIGdldCBUeCBSaW5nIFJlc291cmNlICYgRG1hIEJ1ZmZlciBhZGRyZXNzCisJLy8KKwlRdWVJZHggPSBwVHhCbGstPlF1ZUlkeDsKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCWlmKGZyYWdOdW0gPT0gMCkKKwl7CisJCS8vIENoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGZvciB0aGlzIGJ1bGstb3V0IGJhdGNoLgorCQlTdGF0dXMgPSBSdG1wVVNCQ2FuRG9Xcml0ZShwQWQsIFF1ZUlkeCwgcEhUVFhDb250ZXh0KTsKKwkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gVFJVRTsKKworCQkJLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgOCBieXRlcyBwYWRkaW5nLgorCQkJaWYgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikpCisJCQl7CisJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiArPSA4OworCQkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSA4OworCQkJCWZpbGxPZmZzZXQgKz0gODsKKwkJCX0KKwkJCXBUeEJsay0+UHJpdiA9IDA7CisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCXJldHVybihTdGF0dXMpOworCQl9CisJfQorCWVsc2UKKwl7CisJCS8vIEZvciBzdWItc2VxdWVudCBmcmFtZXMgb2YgdGhpcyBidWxrLW91dCBiYXRjaC4gSnVzdCBjb3B5IGl0IHRvIG91ciBidWxrLW91dCBidWZmZXIuCisJCVN0YXR1cyA9ICgocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKSA/IE5ESVNfU1RBVFVTX1NVQ0NFU1MgOiBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlmaWxsT2Zmc2V0ICs9IHBUeEJsay0+UHJpdjsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCXJldHVybihTdGF0dXMpOworCQl9CisJfQorCisJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikoJnBUeEJsay0+SGVhZGVyQnVmWzBdKSwgVFhJTkZPX1NJWkUpOworCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmWzBdKTsKKwlwVHhXST0gKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKTsKKworCXBXaXJlbGVzc1BhY2tldCA9ICZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtmaWxsT2Zmc2V0XTsKKworCS8vIGNvcHkgVFhXSSArIFdMQU4gSGVhZGVyICsgTExDIGludG8gRE1BIEhlYWRlciBCdWZmZXIKKwkvL2h3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLCA0KTsKKwlod0hkckxlbiA9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+SGRyUGFkTGVuOworCisJLy8gQnVpbGQgb3VyIFVSQiBmb3IgVVNCRAorCURNQUhkckxlbiA9IFRYV0lfU0laRSArIGh3SGRyTGVuOworCVVTQkRNQXBrdExlbiA9IERNQUhkckxlbiArIHBUeEJsay0+U3JjQnVmTGVuOworCXBhZGRpbmcgPSAoNCAtIChVU0JETUFwa3RMZW4gJSA0KSkgJiAweDAzOwkvLyByb3VuZCB1cCB0byA0IGJ5dGUgYWxpZ25tZW50CisJVVNCRE1BcGt0TGVuICs9IHBhZGRpbmc7CisKKwlwVHhCbGstPlByaXYgKz0gKFRYSU5GT19TSVpFICsgVVNCRE1BcGt0TGVuKTsKKworCS8vIEZvciBUeEluZm8sIHRoZSBsZW5ndGggb2YgVVNCRE1BcGt0TGVuID0gVFhXSV9TSVpFICsgODAyLjExIGhlYWRlciArIHBheWxvYWQKKwlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShVU0JETUFwa3RMZW4pLCBGQUxTRSwgRklGT19FRENBLCBGQUxTRSAvKk5leHRWYWxpZCovLCAgRkFMU0UpOworCisJaWYgKGZyYWdOdW0gPT0gcFR4QmxrLT5Ub3RhbEZyYWdOdW0pCisJeworCQlwVHhJbmZvLT5VU0JETUFUeGJ1cnN0ID0gMDsKKwkJaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyBwVHhCbGstPlByaXYgKyAzOTA2KT4gTUFYX1RYQlVMS19MSU1JVCkKKwkJeworCQkJcFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPSAxOworCQkJVHhRTGFzdFJvdW5kID0gVFJVRTsKKwkJfQorCX0KKwllbHNlCisJeworCQlwVHhJbmZvLT5VU0JETUFUeGJ1cnN0ID0gMTsKKwl9CisKKwlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+SGVhZGVyQnVmLCBUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKFBVQ0hBUikocFdpcmVsZXNzUGFja2V0ICsgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUpLCBESVJfV1JJVEUsIEZBTFNFKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJcFdpcmVsZXNzUGFja2V0ICs9IChUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKwlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyArPSAoVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hkckxlbik7CisKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCU5kaXNNb3ZlTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcFR4QmxrLT5wU3JjQnVmRGF0YSwgcFR4QmxrLT5TcmNCdWZMZW4pOworCisJLy8JWmVybyB0aGUgbGFzdCBwYWRkaW5nLgorCXBXaXJlbGVzc1BhY2tldCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKKwlOZGlzWmVyb01lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBhZGRpbmcgKyA4KTsKKworCWlmIChmcmFnTnVtID09IHBUeEJsay0+VG90YWxGcmFnTnVtKQorCXsKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCS8vIFVwZGF0ZSB0aGUgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLiAzOTA2IHVzZWQgdG8gcHJldmVudCB0aGUgTmV4dEJ1bGtPdXQgaXMgYSBBLVJBTElOSy9BLU1TRFUgRnJhbWUuCisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSBwVHhCbGstPlByaXY7CisJCWlmIChUeFFMYXN0Um91bmQgPT0gVFJVRSkKKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9IDg7CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOworCisKKwkJLy8gRmluYWxseSwgc2V0IGJDdXJXcml0aW5nIGFzIEZBTFNFCisJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOworCisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCS8vIHN1Y2NlZWQgYW5kIHJlbGVhc2UgdGhlIHNrYiBidWZmZXIKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJfQorCisKKwlyZXR1cm4oU3RhdHVzKTsKKworfQorCisKK1VTSE9SVCBSdG1wVVNCX1dyaXRlU2luZ2xlVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCUJPT0xFQU4JCQliSXNMYXN0LAorCU9VVAlVU0hPUlQJCQkqRnJlZU51bWJlcikKK3sKKwlIVF9UWF9DT05URVhUCSpwSFRUWENvbnRleHQ7CisJVVNIT1JUCQkJaHdIZHJMZW47CisJVUlOVDMyCQkJZmlsbE9mZnNldDsKKwlUWElORk9fU1RSVUMJKnBUeEluZm87CisJVFhXSV9TVFJVQwkJKnBUeFdJOworCVBVQ0hBUgkJCXBXaXJlbGVzc1BhY2tldDsKKwlVQ0hBUgkJCVF1ZUlkeDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCU5ESVNfU1RBVFVTCQlTdGF0dXM7CisJVUlOVDMyCQkJVVNCRE1BcGt0TGVuID0gMCwgRE1BSGRyTGVuLCBwYWRkaW5nOworCUJPT0xFQU4JCQliVHhRTGFzdFJvdW5kID0gRkFMU0U7CisKKwkvLyBGb3IgVVNCLCBkaWRuJ3QgbmVlZCBQQ0lfTUFQX1NJTkdMRSgpCisJLy9TcmNCdWZQQSA9IFBDSV9NQVBfU0lOR0xFKHBBZCwgKGNoYXIgKikgcFR4QmxrLT5wU3JjQnVmRGF0YSwgcFR4QmxrLT5TcmNCdWZMZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCisKKwkvLworCS8vIGdldCBUeCBSaW5nIFJlc291cmNlICYgRG1hIEJ1ZmZlciBhZGRyZXNzCisJLy8KKwlRdWVJZHggPSBwVHhCbGstPlF1ZUlkeDsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCisKKwkvLyBDaGVjayByaW5nIGZ1bGwuCisJU3RhdHVzID0gUnRtcFVTQkNhbkRvV3JpdGUocEFkLCBRdWVJZHgsIHBIVFRYQ29udGV4dCk7CisJaWYoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gVFJVRTsKKworCQlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZlswXSk7CisJCXBUeFdJPSAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pOworCisJCS8vIFJlc2VydmUgc3BhY2UgZm9yIDggYnl0ZXMgcGFkZGluZy4KKwkJaWYgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikpCisJCXsKKwkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gKz0gODsKKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSA4OworCQkJZmlsbE9mZnNldCArPSA4OworCQl9CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOworCisJCXBXaXJlbGVzc1BhY2tldCA9ICZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtmaWxsT2Zmc2V0XTsKKworCQkvLyBjb3B5IFRYV0kgKyBXTEFOIEhlYWRlciArIExMQyBpbnRvIERNQSBIZWFkZXIgQnVmZmVyCisJCS8vaHdIZHJMZW4gPSBST1VORF9VUChwVHhCbGstPk1wZHVIZWFkZXJMZW4sIDQpOworCQlod0hkckxlbiA9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+SGRyUGFkTGVuOworCisJCS8vIEJ1aWxkIG91ciBVUkIgZm9yIFVTQkQKKwkJRE1BSGRyTGVuID0gVFhXSV9TSVpFICsgaHdIZHJMZW47CisJCVVTQkRNQXBrdExlbiA9IERNQUhkckxlbiArIHBUeEJsay0+U3JjQnVmTGVuOworCQlwYWRkaW5nID0gKDQgLSAoVVNCRE1BcGt0TGVuICUgNCkpICYgMHgwMzsJLy8gcm91bmQgdXAgdG8gNCBieXRlIGFsaWdubWVudAorCQlVU0JETUFwa3RMZW4gKz0gcGFkZGluZzsKKworCQlwVHhCbGstPlByaXYgPSAoVFhJTkZPX1NJWkUgKyBVU0JETUFwa3RMZW4pOworCisJCS8vIEZvciBUeEluZm8sIHRoZSBsZW5ndGggb2YgVVNCRE1BcGt0TGVuID0gVFhXSV9TSVpFICsgODAyLjExIGhlYWRlciArIHBheWxvYWQKKwkJLy9QUyBwYWNrZXRzIHVzZSBIQ0NBIHF1ZXVlIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShVU0JETUFwa3RMZW4pLCBGQUxTRSwgRklGT19FRENBLCBGQUxTRSAvKk5leHRWYWxpZCovLCAgRkFMU0UpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMzkwNiArIHBUeEJsay0+UHJpdikgPiBNQVhfVFhCVUxLX0xJTUlUKQorCQl7CisJCQlwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9IDE7CisJCQliVHhRTGFzdFJvdW5kID0gVFJVRTsKKwkJfQorCQlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+SGVhZGVyQnVmLCBUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpKHBXaXJlbGVzc1BhY2tldCArIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKSwgRElSX1dSSVRFLCBGQUxTRSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCQlwV2lyZWxlc3NQYWNrZXQgKz0gKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZHJMZW4pOworCisJCS8vIFdlIHVubG9jayBpdCBoZXJlIHRvIHByZXZlbnQgdGhlIGZpcnN0IDggYnl0ZXMgbWF5YmUgb3Zlci13cml0ZWQgaXNzdWUuCisJCS8vCTEuIEZpcnN0IHdlIGdvdCBDdXJXcml0ZVBvc2l0aW9uIGJ1dCB0aGUgZmlyc3QgOCBieXRlcyBzdGlsbCBub3Qgd3JpdGUgdG8gdGhlIHBUeGNvbnRleHQuCisJCS8vCTIuIEFuIGludGVycnVwdCBicmVhayBvdXIgcm91dGluZSBhbmQgaGFuZGxlIGJ1bGstb3V0IGNvbXBsZXRlLgorCQkvLwkzLiBJbiB0aGUgYnVsay1vdXQgY29tcGxsZXRlLCBpdCBuZWVkIHRvIGRvIGFub3RoZXIgYnVsay1vdXQsCisJCS8vCQkJaWYgdGhlIEVOZXh0QnVsa091dFBvc2l0aW9uIGlzIGp1c3QgdGhlIHNhbWUgYXMgQ3VyV3JpdGVQb3NpdGlvbiwgaXQgd2lsbCBzYXZlIHRoZSBmaXJzdCA4IGJ5dGVzIGZyb20gQ3VyV3JpdGVQb3NpdGlvbiwKKwkJLy8JCQlidXQgdGhlIHBheWxvYWQgc3RpbGwgbm90IGNvcHllZC4gdGhlIHBUeENvbnRleHQtPlNhdmVkUGFkW10gd2lsbCBzYXZlIGFzIGFsbHplcm8uIGFuZCBzZXQgdGhlIGJDb3B5UGFkID0gVFJVRS4KKwkJLy8JNC4gSW50ZXJydXB0IGNvbXBsZXRlLgorCQkvLyAgNS4gT3VyIGludGVycnVwdGVkIHJvdXRpbmUgZ28gYmFjayBhbmQgZmlsbCB0aGUgZmlyc3QgOCBieXRlcyB0byBwVHhDb250ZXh0LgorCQkvLwk2LiBOZXh0IHRpbWUgd2hlbiBkbyBidWxrLW91dCwgaXQgZm91bmQgdGhlIGJDb3B5UGFkPT1UUlVFIGFuZCB3aWxsIGNvcHkgdGhlIFNhdmVkUGFkW10gdG8gcFR4Q29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbi4KKwkJLy8JCWFuZCB0aGUgcGFja2V0IHdpbGwgd3JvbmcuCisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zICs9IChUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKwkJTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPnBTcmNCdWZEYXRhLCBwVHhCbGstPlNyY0J1Zkxlbik7CisJCXBXaXJlbGVzc1BhY2tldCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKKwkJTmRpc1plcm9NZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwYWRkaW5nICsgOCk7CisKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSBwVHhCbGstPlByaXY7CisJCWlmIChiVHhRTGFzdFJvdW5kKQorCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID0gODsKKwkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247CisKKwlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gRkFMU0U7CisJfQorCisKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCisJLy8gc3VjY2VlZCBhbmQgcmVsZWFzZSB0aGUgc2tiIGJ1ZmZlcgorCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCisJcmV0dXJuKFN0YXR1cyk7CisKK30KKworCitVU0hPUlQgUnRtcFVTQl9Xcml0ZU11bHRpVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJZnJhbWVOdW0sCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKQoreworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKwlVU0hPUlQJCQlod0hkckxlbjsJLy8gVGhlIGh3SGRyTGVuIGNvbnNpc3Qgb2YgODAyLjExIGhlYWRlciBsZW5ndGggcGx1cyB0aGUgaGVhZGVyIHBhZGRpbmcgbGVuZ3RoLgorCVVJTlQzMgkJCWZpbGxPZmZzZXQ7CisJVFhJTkZPX1NUUlVDCSpwVHhJbmZvOworCVRYV0lfU1RSVUMJCSpwVHhXSTsKKwlQVUNIQVIJCQlwV2lyZWxlc3NQYWNrZXQgPSBOVUxMOworCVVDSEFSCQkJUXVlSWR4OworCU5ESVNfU1RBVFVTCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKwkvL1VJTlQzMgkJCVVTQkRNQXBrdExlbiA9IDAsIERNQUhkckxlbiwgcGFkZGluZzsKKworCS8vCisJLy8gZ2V0IFR4IFJpbmcgUmVzb3VyY2UgJiBEbWEgQnVmZmVyIGFkZHJlc3MKKwkvLworCVF1ZUlkeCA9IHBUeEJsay0+UXVlSWR4OworCXBIVFRYQ29udGV4dCAgPSAmcEFkLT5UeENvbnRleHRbUXVlSWR4XTsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCWlmKGZyYW1lTnVtID09IDApCisJeworCQkvLyBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhpcyBidWxrLW91dCBiYXRjaC4KKwkJU3RhdHVzID0gUnRtcFVTQkNhbkRvV3JpdGUocEFkLCBRdWVJZHgsIHBIVFRYQ29udGV4dCk7CisJCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IFRSVUU7CisKKwkJCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmWzBdKTsKKwkJCXBUeFdJPSAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pOworCisKKwkJCS8vIFJlc2VydmUgc3BhY2UgZm9yIDggYnl0ZXMgcGFkZGluZy4KKwkJCWlmICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQkJeworCisJCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICs9IDg7CisJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiArPSA4OworCQkJfQorCQkJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOworCisJCQlwV2lyZWxlc3NQYWNrZXQgPSAmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF07CisKKwkJCS8vCisJCQkvLyBDb3B5IFRYSU5GTyArIFRYV0kgKyBXTEFOIEhlYWRlciArIExMQyBpbnRvIERNQSBIZWFkZXIgQnVmZmVyCisJCQkvLworCQkJaWYgKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpCisJCQkJLy9od0hkckxlbiA9IFJPVU5EX1VQKHBUeEJsay0+TXBkdUhlYWRlckxlbi1MRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFELCA0KStMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEOworCQkJCWh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuLUxFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQgKyBwVHhCbGstPkhkclBhZExlbiArIExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQ7CisJCQllbHNlIGlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX1JBTElOS19GUkFNRSkKKwkJCQkvL2h3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLUxFTkdUSF9BUkFMSU5LX0hFQURFUl9GSUVMRCwgNCkrTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxEOworCQkJCWh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuLUxFTkdUSF9BUkFMSU5LX0hFQURFUl9GSUVMRCArIHBUeEJsay0+SGRyUGFkTGVuICsgTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxEOworCQkJZWxzZQorCQkJCS8vaHdIZHJMZW4gPSBST1VORF9VUChwVHhCbGstPk1wZHVIZWFkZXJMZW4sIDQpOworCQkJCWh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuICsgcFR4QmxrLT5IZHJQYWRMZW47CisKKwkJCS8vIFVwZGF0ZSB0aGUgcFR4QmxrLT5Qcml2LgorCQkJcFR4QmxrLT5Qcml2ID0gVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hkckxlbjsKKworCQkJLy8JcFR4SW5mby0+VVNCRE1BcGt0TGVuIG5vdyBqdXN0IGEgdGVtcCB2YWx1ZSBhbmQgd2lsbCB0byBjb3JyZWN0IGxhdHRlci4KKwkJCVJUTVBXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKHBUeEJsay0+UHJpdiksIEZBTFNFLCBGSUZPX0VEQ0EsIEZBTFNFIC8qTmV4dFZhbGlkKi8sICBGQUxTRSk7CisKKwkJCS8vIENvcHkgaXQuCisJCQlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+SGVhZGVyQnVmLCBwVHhCbGstPlByaXYpOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpKHBXaXJlbGVzc1BhY2tldCsgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUpLCBESVJfV1JJVEUsIEZBTFNFKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyArPSBwVHhCbGstPlByaXY7CisJCQlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5Qcml2OworCQl9CisJfQorCWVsc2UKKwl7CS8vIEZvciBzdWItc2VxdWVudCBmcmFtZXMgb2YgdGhpcyBidWxrLW91dCBiYXRjaC4gSnVzdCBjb3B5IGl0IHRvIG91ciBidWxrLW91dCBidWZmZXIuCisKKwkJU3RhdHVzID0gKChwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IFRSVUUpID8gTkRJU19TVEFUVVNfU1VDQ0VTUyA6IE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCWZpbGxPZmZzZXQgPSAgKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIHBUeEJsay0+UHJpdik7CisJCQlwV2lyZWxlc3NQYWNrZXQgPSAmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF07CisKKwkJCS8vaHdIZHJMZW4gPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisJCQlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+SGVhZGVyQnVmLCBwVHhCbGstPk1wZHVIZWFkZXJMZW4pOworCQkJcFdpcmVsZXNzUGFja2V0ICs9IChwVHhCbGstPk1wZHVIZWFkZXJMZW4pOworCQkJcFR4QmxrLT5Qcml2ICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKwkJfQorCQllbHNlCisJCXsJLy8gSXQgc2hvdWxkIG5vdCBoYXBwZW5lZCBub3cgdW5sZXNzIHdlIGFyZSBnb2luZyB0byBzaHV0ZG93bi4KKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIldyaXRlTXVsdGlUeFJlc291cmNlKCk6YkN1cldyaXRpbmcgaXMgRkFMU0Ugd2hlbiBoYW5kbGUgc3ViLXNlcXVlbnQgZnJhbWVzLlxuIikpOworCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJfQorCX0KKworCisJLy8gV2UgdW5sb2NrIGl0IGhlcmUgdG8gcHJldmVudCB0aGUgZmlyc3QgOCBieXRlcyBtYXliZSBvdmVyLXdyaXRlIGlzc3VlLgorCS8vCTEuIEZpcnN0IHdlIGdvdCBDdXJXcml0ZVBvc2l0aW9uIGJ1dCB0aGUgZmlyc3QgOCBieXRlcyBzdGlsbCBub3Qgd3JpdGUgdG8gdGhlIHBUeENvbnRleHQuCisJLy8JMi4gQW4gaW50ZXJydXB0IGJyZWFrIG91ciByb3V0aW5lIGFuZCBoYW5kbGUgYnVsay1vdXQgY29tcGxldGUuCisJLy8JMy4gSW4gdGhlIGJ1bGstb3V0IGNvbXBsbGV0ZSwgaXQgbmVlZCB0byBkbyBhbm90aGVyIGJ1bGstb3V0LAorCS8vCQkJaWYgdGhlIEVOZXh0QnVsa091dFBvc2l0aW9uIGlzIGp1c3QgdGhlIHNhbWUgYXMgQ3VyV3JpdGVQb3NpdGlvbiwgaXQgd2lsbCBzYXZlIHRoZSBmaXJzdCA4IGJ5dGVzIGZyb20gQ3VyV3JpdGVQb3NpdGlvbiwKKwkvLwkJCWJ1dCB0aGUgcGF5bG9hZCBzdGlsbCBub3QgY29weWVkLiB0aGUgcFR4Q29udGV4dC0+U2F2ZWRQYWRbXSB3aWxsIHNhdmUgYXMgYWxsemVyby4gYW5kIHNldCB0aGUgYkNvcHlQYWQgPSBUUlVFLgorCS8vCTQuIEludGVycnVwdCBjb21wbGV0ZS4KKwkvLyAgNS4gT3VyIGludGVycnVwdGVkIHJvdXRpbmUgZ28gYmFjayBhbmQgZmlsbCB0aGUgZmlyc3QgOCBieXRlcyB0byBwVHhDb250ZXh0LgorCS8vCTYuIE5leHQgdGltZSB3aGVuIGRvIGJ1bGstb3V0LCBpdCBmb3VuZCB0aGUgYkNvcHlQYWQ9PVRSVUUgYW5kIHdpbGwgY29weSB0aGUgU2F2ZWRQYWRbXSB0byBwVHhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLgorCS8vCQlhbmQgdGhlIHBhY2tldCB3aWxsIHdyb25nLgorCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJXcml0ZU11bHRpVHhSZXNvdXJjZTogQ1dQb3MgPSAlbGQsIE5CT3V0UG9zID0gJWxkLlxuIiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pKTsKKwkJZ290byBkb25lOworCX0KKworCS8vIENvcHkgdGhlIGZyYW1lIGNvbnRlbnQgaW50byBETUEgYnVmZmVyIGFuZCB1cGRhdGUgdGhlIHBUeEJsay0+UHJpdgorCU5kaXNNb3ZlTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcFR4QmxrLT5wU3JjQnVmRGF0YSwgcFR4QmxrLT5TcmNCdWZMZW4pOworCXBXaXJlbGVzc1BhY2tldCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKKwlwVHhCbGstPlByaXYgKz0gcFR4QmxrLT5TcmNCdWZMZW47CisKK2RvbmU6CisJLy8gUmVsZWFzZSB0aGUgc2tiIGJ1ZmZlciBoZXJlCisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisKKwlyZXR1cm4oU3RhdHVzKTsKKworfQorCisKK1ZPSUQgUnRtcFVTQl9GaW5hbFdyaXRlVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVTSE9SVAkJCXRvdGFsTVBEVVNpemUsCisJSU4JVVNIT1JUCQkJVHhJZHgpCit7CisJVUNIQVIJCQlRdWVJZHg7CisJSFRfVFhfQ09OVEVYVAkqcEhUVFhDb250ZXh0OworCVVJTlQzMgkJCWZpbGxPZmZzZXQ7CisJVFhJTkZPX1NUUlVDCSpwVHhJbmZvOworCVRYV0lfU1RSVUMJCSpwVHhXSTsKKwlVSU5UMzIJCQlVU0JETUFwa3RMZW4sIHBhZGRpbmc7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKwlQVUNIQVIJCQlwV2lyZWxlc3NQYWNrZXQ7CisKKwlRdWVJZHggPSBwVHhCbGstPlF1ZUlkeDsKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKwlpZiAocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKQorCXsKKwkJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKwkJaWYgKCgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pIHx8ICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbi04KSA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQkJJiYgKHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkID09IFRSVUUpKQorCQkJcFdpcmVsZXNzUGFja2V0ID0gKFBVQ0hBUikoJnBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbMF0pOworCQllbHNlCisJCQlwV2lyZWxlc3NQYWNrZXQgPSAoUFVDSEFSKSgmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF0pOworCisJCS8vCisJCS8vIFVwZGF0ZSBUeEluZm8tPlVTQkRNQXBrdExlbiAsCisJCS8vCQl0aGUgbGVuZ3RoID0gVFhXSV9TSVpFICsgODAyLjExX2hkciArIDgwMi4xMV9oZHJfcGFkICsgcGF5bG9hZF9vZl9hbGxfYmF0Y2hfZnJhbWVzICsgQnVsay1PdXQtcGFkZGluZworCQkvLworCQlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpKHBXaXJlbGVzc1BhY2tldCk7CisKKwkJLy8gQ2FsY3VsYXRlIHRoZSBidWxrLW91dCBwYWRkaW5nCisJCVVTQkRNQXBrdExlbiA9IHBUeEJsay0+UHJpdiAtIFRYSU5GT19TSVpFOworCQlwYWRkaW5nID0gKDQgLSAoVVNCRE1BcGt0TGVuICUgNCkpICYgMHgwMzsJLy8gcm91bmQgdXAgdG8gNCBieXRlIGFsaWdubWVudAorCQlVU0JETUFwa3RMZW4gKz0gcGFkZGluZzsKKworCQlwVHhJbmZvLT5VU0JETUFUeFBrdExlbiA9IFVTQkRNQXBrdExlbjsKKworCQkvLworCQkvLyBVcGRhdGUgVFhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ICwKKwkJLy8JCXRoZSBsZW5ndGggPSA4MDIuMTEgaGVhZGVyICsgcGF5bG9hZF9vZl9hbGxfYmF0Y2hfZnJhbWVzCisJCXBUeFdJPSAoUFRYV0lfU1RSVUMpKHBXaXJlbGVzc1BhY2tldCArIFRYSU5GT19TSVpFKTsKKwkJcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA9IHRvdGFsTVBEVVNpemU7CisKKwkJLy8KKwkJLy8gVXBkYXRlIHRoZSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24KKwkJLy8KKwkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICs9IChUWElORk9fU0laRSArIFVTQkRNQXBrdExlbik7CisJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMzkwNik+IE1BWF9UWEJVTEtfTElNSVQpCisJCXsJLy8gQWRkIDM5MDYgZm9yIHByZXZlbnQgdGhlIE5leHRCdWxrT3V0IHBhY2tldCBzaXplIGlzIGEgQS1SQUxJTksvQS1NU0RVIEZyYW1lLgorCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID0gODsKKwkJCXBUeEluZm8tPlN3VXNlTGFzdFJvdW5kID0gMTsKKwkJfQorCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCisJCS8vCisJCS8vCVplcm8gdGhlIGxhc3QgcGFkZGluZy4KKwkJLy8KKwkJcFdpcmVsZXNzUGFja2V0ID0gKCZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtmaWxsT2Zmc2V0ICsgcFR4QmxrLT5Qcml2XSk7CisJCU5kaXNaZXJvTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcGFkZGluZyArIDgpOworCisJCS8vIEZpbmFsbHksIHNldCBiQ3VyV3JpdGluZyBhcyBGQUxTRQorCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gRkFMU0U7CisKKwl9CisJZWxzZQorCXsJLy8gSXQgc2hvdWxkIG5vdCBoYXBwZW5lZCBub3cgdW5sZXNzIHdlIGFyZSBnb2luZyB0byBzaHV0ZG93bi4KKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRmluYWxXcml0ZVR4UmVzb3VyY2UoKTpiQ3VyV3JpdGluZyBpcyBGQUxTRSB3aGVuIGhhbmRsZSBsYXN0IGZyYW1lcy5cbiIpKTsKKwl9CisKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworfQorCisKK1ZPSUQgUnRtcFVTQkRhdGFMYXN0VHhJZHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlRdWVJZHgsCisJSU4JVVNIT1JUCQkJVHhJZHgpCit7CisJLy8gRE8gbm90aGluZyBmb3IgVVNCLgorfQorCisKKy8qCisJV2hlbiBjYW4gZG8gYnVsay1vdXQ6CisJCTEuIFR4U3dGcmVlSWR4IDwgVFhfUklOR19TSVpFOworCQkJSXQgbWVhbnMgaGFzIGF0IGxlYXN0IG9uZSBSaW5nIGVudGl0eSBpcyByZWFkeSBmb3IgYnVsay1vdXQsIGtpY2sgaXQgb3V0LgorCQkyLiBJZiBUeFN3RnJlZUlkeCA9PSBUWF9SSU5HX1NJWkUKKwkJCUNoZWNrIGlmIHRoZSBDdXJXcml0aW5nIGZsYWcgaXMgRkFMU0UsIGlmIGl0J3MgRkFMU0UsIHdlIGNhbiBkbyBraWNrIG91dC4KKworKi8KK1ZPSUQgUnRtcFVTQkRhdGFLaWNrT3V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JVUNIQVIJCQlRdWVJZHgpCit7CisJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgUXVlSWR4KSk7CisJUlRVU0JLaWNrQnVsa091dChwQWQpOworCit9CisKKworLyoKKwlNdXN0IGJlIHJ1biBpbiBJbnRlcnJ1cHQgY29udGV4dAorCVRoaXMgZnVuY3Rpb24gaGFuZGxlIFJUMjg3MCBzcGVjaWZpYyBUeERlc2MgYW5kIGNwdSBpbmRleCB1cGRhdGUgYW5kIGtpY2sgdGhlIHBhY2tldCBvdXQuCisgKi8KK2ludCBSdG1wVVNCTWdtdEtpY2tPdXQoCisJSU4gUlRNUF9BREFQVEVSIAkqcEFkLAorCUlOIFVDSEFSIAkJCVF1ZUlkeCwKKwlJTiBQTkRJU19QQUNLRVQJCXBQYWNrZXQsCisJSU4gUFVDSEFSCQkJcFNyY0J1ZlZBLAorCUlOIFVJTlQgCQkJU3JjQnVmTGVuKQoreworCVBUWElORk9fU1RSVUMJcFR4SW5mbzsKKwlVTE9ORwkJCUJ1bGtPdXRTaXplOworCVVDSEFSCQkJcGFkTGVuOworCVBVQ0hBUgkJCXBEZXN0OworCVVMT05HCQkJU3dJZHggPSBwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4OworCVBUWF9DT05URVhUCQlwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpcEFkLT5NZ210UmluZy5DZWxsW1N3SWR4XS5BbGxvY1ZhOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisKKworCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykocFNyY0J1ZlZBKTsKKworCS8vIEJ1aWxkIG91ciBVUkIgZm9yIFVTQkQKKwlCdWxrT3V0U2l6ZSA9IFNyY0J1ZkxlbjsKKwlCdWxrT3V0U2l6ZSA9IChCdWxrT3V0U2l6ZSArIDMpICYgKH4zKTsKKwlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShCdWxrT3V0U2l6ZSAtIFRYSU5GT19TSVpFKSwgVFJVRSwgRXBUb1F1ZXVlW01HTVRQSVBFSURYXSwgRkFMU0UsICBGQUxTRSk7CisKKwlCdWxrT3V0U2l6ZSArPSA0OyAvLyBBbHdheXMgYWRkIDQgZXh0cmEgYnl0ZXMgYXQgZXZlcnkgcGFja2V0LgorCisJLy8gSWYgQnVsa091dFNpemUgaXMgbXVsdGlwbGUgb2YgQnVsa091dE1heFBhY2tldFNpemUsIGFkZCBleHRyYSA0IGJ5dGVzIGFnYWluLgorCWlmICgoQnVsa091dFNpemUgJSBwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplKSA9PSAwKQorCQlCdWxrT3V0U2l6ZSArPSA0OworCisJcGFkTGVuID0gQnVsa091dFNpemUgLSBTcmNCdWZMZW47CisJQVNTRVJUKChwYWRMZW4gPD0gUlRNUF9QS1RfVEFJTF9QQURESU5HKSk7CisKKwkvLyBOb3cgbWVtemVybyBhbGwgZXh0cmEgcGFkZGluZyBieXRlcy4KKwlwRGVzdCA9IChQVUNIQVIpKHBTcmNCdWZWQSArIFNyY0J1Zkxlbik7CisJc2tiX3B1dChHRVRfT1NfUEtUX1RZUEUocFBhY2tldCksIHBhZExlbik7CisJTmRpc1plcm9NZW1vcnkocERlc3QsIHBhZExlbik7CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPk1MTUVCdWxrT3V0TG9jaywgSXJxRmxhZ3MpOworCisJcEFkLT5NZ210UmluZy5DZWxsW3BBZC0+TWdtdFJpbmcuVHhDcHVJZHhdLnBOZGlzUGFja2V0ID0gcFBhY2tldDsKKwlwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gKFBUWF9CVUZGRVIpKEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KSk7CisKKwkvLyBMZW5ndGggaW4gVHhJbmZvIHNob3VsZCBiZSA4IGxlc3MgdGhhbiBidWxrb3V0IHNpemUuCisJcE1MTUVDb250ZXh0LT5CdWxrT3V0U2l6ZSA9IEJ1bGtPdXRTaXplOworCXBNTE1FQ29udGV4dC0+SW5Vc2UgPSBUUlVFOworCXBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID0gVFJVRTsKKworCisJLy9mb3IgZGVidWcKKwkvL2hleF9kdW1wKCJSdG1wVVNCTWdtdEtpY2tPdXQiLCAmcE1MTUVDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF0sIChwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplID4gMTYgPyAxNiA6IHBNTE1FQ29udGV4dC0+QnVsa091dFNpemUpKTsKKworCS8vcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCS8vcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOworCisJLy9pZiAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA9PSBNR01UX1JJTkdfU0laRSkKKwkvLwluZWVkS2lja091dCA9IFRSVUU7CisKKwkvLyBEZWNyZWFzZSB0aGUgVHhTd0ZyZWVJZHggYW5kIEluY3JlYXNlIHRoZSBUWF9DVFhfSURYCisJcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeC0tOworCUlOQ19SSU5HX0lOREVYKHBBZC0+TWdtdFJpbmcuVHhDcHVJZHgsIE1HTVRfUklOR19TSVpFKTsKKworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5NTE1FQnVsa091dExvY2ssIElycUZsYWdzKTsKKworCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfTUxNRSk7CisJLy9pZiAobmVlZEtpY2tPdXQpCisJUlRVU0JLaWNrQnVsa091dChwQWQpOworCisJcmV0dXJuIDA7Cit9CisKKworVk9JRCBSdG1wVVNCTnVsbEZyYW1lS2lja091dCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBVQ0hBUgkJUXVlSWR4LAorCUlOIFVDSEFSCQkqcE51bGxGcmFtZSwKKwlJTiBVSU5UMzIJCWZyYW1lTGVuKQoreworCWlmIChwQWQtPk51bGxDb250ZXh0LkluVXNlID09IEZBTFNFKQorCXsKKwkJUFRYX0NPTlRFWFQJCXBOdWxsQ29udGV4dDsKKwkJUFRYSU5GT19TVFJVQwlwVHhJbmZvOworCQlQVFhXSV9TVFJVQwkJcFR4V0k7CisJCVBVQ0hBUgkJCXBXaXJlbGVzc1BrdDsKKworCQlwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOworCisJCS8vIFNldCB0aGUgaW4gdXNlIGJpdAorCQlwTnVsbENvbnRleHQtPkluVXNlID0gVFJVRTsKKwkJcFdpcmVsZXNzUGt0ID0gKFBVQ0hBUikmcE51bGxDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF07CisKKwkJUlRNUFplcm9NZW1vcnkoJnBXaXJlbGVzc1BrdFswXSwgMTAwKTsKKwkJcFR4SW5mbyA9IChQVFhJTkZPX1NUUlVDKSZwV2lyZWxlc3NQa3RbMF07CisJCVJUTVBXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKHNpemVvZihIRUFERVJfODAyXzExKStUWFdJX1NJWkUpLCBUUlVFLCBFcFRvUXVldWVbTUdNVFBJUEVJRFhdLCBGQUxTRSwgIEZBTFNFKTsKKwkJcFR4SW5mby0+UVNFTCA9IEZJRk9fRURDQTsKKwkJcFR4V0kgPSAoUFRYV0lfU1RSVUMpJnBXaXJlbGVzc1BrdFtUWElORk9fU0laRV07CisJCVJUTVBXcml0ZVR4V0kocEFkLCBwVHhXSSwgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBUUlVFLCBGQUxTRSwgMCwgQlNTSURfV0NJRCwgKHNpemVvZihIRUFERVJfODAyXzExKSksCisJCQkwLCAwLCAoVUNIQVIpcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUywgSUZTX0hUVFhPUCwgRkFMU0UsICZwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQpOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4V0ksIFRZUEVfVFhXSSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJCVJUTVBNb3ZlTWVtb3J5KCZwV2lyZWxlc3NQa3RbVFhXSV9TSVpFK1RYSU5GT19TSVpFXSwgJnBBZC0+TnVsbEZyYW1lLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKFBVQ0hBUikmcFdpcmVsZXNzUGt0W1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXSwgRElSX1dSSVRFLCBGQUxTRSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCQlwQWQtPk51bGxDb250ZXh0LkJ1bGtPdXRTaXplID0gIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgc2l6ZW9mKHBBZC0+TnVsbEZyYW1lKSArIDQ7CisKKwkJLy8gRmlsbCBvdXQgZnJhbWUgbGVuZ3RoIGluZm9ybWF0aW9uIGZvciBnbG9iYWwgQnVsayBvdXQgYXJiaXRvcgorCQkvL3BOdWxsQ29udGV4dC0+QnVsa091dFNpemUgPSBUcmFuc2ZlckJ1ZmZlckxlbmd0aDsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIHNlbmQgTlVMTCBGcmFtZSBAJWQgTWJwcy4uLlxuIiwgUmF0ZUlkVG9NYnBzW3BBZC0+Q29tbW9uQ2ZnLlR4UmF0ZV0pKTsKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05VTEwpOworCisJCS8vIEtpY2sgYnVsayBvdXQKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCX0KKworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ2hlY2sgUnggZGVzY3JpcHRvciwgcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkUgaWYgYW55IGVycm9yIGRvdW5kCisKKwlBcmd1bWVudHM6CisJCXBSeEQJCVBvaW50ZXIJdG8gdGhlIFJ4IGRlc2NyaXB0b3IKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUwkJTm8gZXJyCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUJCUVycm9yCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJUlRNUENoZWNrUnhFcnJvcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQSEVBREVSXzgwMl8xMQlwSGVhZGVyLAorCUlOCVBSWFdJX1NUUlVDCXBSeFdJLAorCUlOCVBSVDI4WFhfUlhEX1NUUlVDCXBSeElORk8pCit7CisJUENJUEhFUl9LRVkgcFdwYUtleTsKKwlJTlQJZEJtOworCisJaWYgKHBBZC0+YlByb21pc2N1b3VzID09IFRSVUUpCisJCXJldHVybihORElTX1NUQVRVU19TVUNDRVNTKTsKKwlpZihwUnhJTkZPID09IE5VTEwpCisJCXJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsKKworCS8vIFBoeSBlcnJvcnMgJiBDUkMgZXJyb3JzCisJaWYgKHBSeElORk8tPkNyYykKKwl7CisJCS8vIENoZWNrIFJTU0kgZm9yIE5vaXNlIEhpc3Qgc3RhdGlzdGljIGNvbGxlY3Rpb24uCisJCWRCbSA9IChJTlQpIChwUnhXSS0+UlNTSTApIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YTsKKwkJaWYgKGRCbSA8PSAtODcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzBdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtODIpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzFdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNzcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzJdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNzIpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzNdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNjcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzRdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNjIpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzVdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA8PSAtNTcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzZdICs9IDE7CisJCWVsc2UgaWYgKGRCbSA+IC01NykKKwkJCXBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbN10gKz0gMTsKKworCQlyZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisJLy8gQWRkIFJ4IHNpemUgdG8gY2hhbm5lbCBsb2FkIGNvdW50ZXIsIHdlIHNob3VsZCBpZ25vcmUgZXJyb3IgY291bnRzCisJcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgKz0gKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQrIDE0KTsKKworCS8vIERyb3AgVG9EcyBwcm9taXNjb3VzIGZyYW1lLCBpdCBpcyBvcGVuZWQgZHVlIHRvIENDWCAyIGNoYW5uZWwgbG9hZCBzdGF0aXN0aWNzCisJaWYgKHBIZWFkZXItPkZDLlRvRHMpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiRXJyO0ZDLlRvRHNcbiIpKTsKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJLy8gUGF1bCAwNC0wMyBmb3IgT0ZETSBSeCBsZW5ndGggaXNzdWUKKwlpZiAocFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA+IE1BWF9BR0dSRUdBVElPTl9TSVpFKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZ1xuIikpOworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwkvLyBEcm9wIG5vdCBVMk0gZnJhbWVzLCBjYW50J3MgZHJvcCBoZXJlIGJlY2F1c2Ugd2Ugd2lsbCBkcm9wIGJlYWNvbiBpbiB0aGlzIGNhc2UKKwkvLyBJIGFtIGtpbmQgb2YgZG91YnRpbmcgdGhlIFUyTSBiaXQgb3BlcmF0aW9uCisJLy8gaWYgKHBSeEQtPlUyTSA9PSAwKQorCS8vCXJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsKKworCS8vIGRyb3AgZGVjeXB0aW9uIGZhaWwgZnJhbWUKKwlpZiAocFJ4SU5GTy0+RGVjcnlwdGVkICYmIHBSeElORk8tPkNpcGhlckVycikKKwl7CisKKwkJLy8KKwkJLy8gTUlDIEVycm9yCisJCS8vCisJCWlmICgocFJ4SU5GTy0+Q2lwaGVyRXJyID09IDIpICYmIHBSeElORk8tPk15QnNzKQorCQl7CisJCQlwV3BhS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeFdJLT5LZXlJbmRleF07CisJCQlSVE1QUmVwb3J0TWljRXJyb3IocEFkLCBwV3BhS2V5KTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIlJ4IE1JQyBWYWx1ZSBlcnJvclxuIikpOworCQl9CisKKwkJaWYgKHBSeElORk8tPkRlY3J5cHRlZCAmJgorCQkJKHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeFdJLT5LZXlJbmRleF0uQ2lwaGVyQWxnID09IENJUEhFUl9BRVMpICYmCisJCQkocEhlYWRlci0+U2VxdWVuY2UgPT0gcEFkLT5GcmFnRnJhbWUuU2VxdWVuY2UpKQorCQl7CisJCQkvLworCQkJLy8gQWNjZXB0YWJsZSBzaW5jZSB0aGUgRmlyc3QgRnJhZ0ZyYW1lIG5vIENpcGhlckVyciBwcm9ibGVtLgorCQkJLy8KKwkJCXJldHVybihORElTX1NUQVRVU19TVUNDRVNTKTsKKwkJfQorCisJCXJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisKKwlyZXR1cm4oTkRJU19TVEFUVVNfU1VDQ0VTUyk7Cit9CisKK1ZPSUQgUlQyOHh4VXNiU3RhQXNpY0ZvcmNlV2FrZXVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gICAgICAgYkZyb21UeCkKK3sKKyAgICBBVVRPX1dBS0VVUF9TVFJVQwlBdXRvV2FrZXVwQ2ZnOworCisJQXV0b1dha2V1cENmZy53b3JkID0gMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7CisKKwlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzEsIDB4ZmYsIDB4MDAsIDB4MDIpOworCisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7Cit9CisKK1ZPSUQgUlQyOHh4VXNiU3RhQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIFRidHROdW1Ub05leHRXYWtlVXApCit7CisJQVVUT19XQUtFVVBfU1RSVUMJQXV0b1dha2V1cENmZzsKKworCS8vIHdlIGhhdmUgZGVjaWRlZCB0byBTTEVFUCwgc28gYXQgbGVhc3QgZG8gaXQgZm9yIGEgQkVBQ09OIHBlcmlvZC4KKwlpZiAoVGJ0dE51bVRvTmV4dFdha2VVcCA9PSAwKQorCQlUYnR0TnVtVG9OZXh0V2FrZVVwID0gMTsKKworCUF1dG9XYWtldXBDZmcud29yZCA9IDA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLCBBdXRvV2FrZXVwQ2ZnLndvcmQpOworCisJQXV0b1dha2V1cENmZy5maWVsZC5OdW1vZlNsZWVwaW5nVGJ0dCA9IFRidHROdW1Ub05leHRXYWtlVXAgLSAxOworCUF1dG9XYWtldXBDZmcuZmllbGQuRW5hYmxlQXV0b1dha2V1cCA9IDE7CisJQXV0b1dha2V1cENmZy5maWVsZC5BdXRvTGVhZFRpbWUgPSA1OworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fV0FLRVVQX0NGRywgQXV0b1dha2V1cENmZy53b3JkKTsKKworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgMHhmZiwgMHhmZiwgMHgwMik7ICAgLy8gc2VuZCBQT1dFUi1TQVZFIGNvbW1hbmQgdG8gTUNVLiBUaW1lb3V0IDQwdXMuCisKKwlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7CisKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworVk9JRCBSVDI4eHhVc2JNbG1lUmFkaW9PbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUMjh4eFVzYk1sbWVSYWRpb09uKClcbiIpKTsKKworCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCisJCXJldHVybjsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworICAgIAlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzEsIDB4ZmYsIDB4MDAsIDB4MDIpOworCQlSVE1QdXNlY0RlbGF5KDEwMDAwKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJTklDUmVzZXRGcm9tRXJyb3IocEFkKTsKKworCS8vIEVuYWJsZSBUeC9SeAorCVJUTVBFbmFibGVSeFR4KHBBZCk7CisKKyNpZmRlZiBSVDMwNzAKKwlpZiAoSVNfUlQzMDcxKHBBZCkpCisJeworCQlSVDMweHhSZXZlcnNlUkZTbGVlcE1vZGVTZXR1cChwQWQpOworCX0KKyNlbmRpZiAvLyBSVDMwNzAgLy8KKworCS8vIENsZWFyIFJhZGlvIG9mZiBmbGFnCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJUlRVU0JCdWxrUmVjZWl2ZShwQWQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gU2V0IExFRAorCVJUTVBTZXRMRUQocEFkLCBMRURfUkFESU9fT04pOworfQorCitWT0lEIFJUMjh4eFVzYk1sbWVSYWRpb09GRigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlXUERNQV9HTE9fQ0ZHX1NUUlVDCUdsb0NmZzsKKwlVSU5UMzIJVmFsdWUsIGk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUMjh4eFVzYk1sbWVSYWRpb09GRigpXG4iKSk7CisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCisJCXJldHVybjsKKworCS8vIFNldCBMRUQKKwlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09GRik7CisJLy8gU2V0IFJhZGlvIG9mZiBmbGFnCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBMaW5rIGRvd24gZmlyc3QgaWYgYW55IGFzc29jaWF0aW9uIGV4aXN0cworCQlpZiAoSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpKQorCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCVJUTVB1c2VjRGVsYXkoMTAwMDApOworCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vIENsZWFuIHVwIG9sZCBic3MgdGFibGUKKwkJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9PSBCV180MCkKKwl7CisJCS8vIE11c3QgdXNpbmcgNDBNSHouCisJCUFzaWNUdXJuT2ZmUkZDbGsocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisJfQorCWVsc2UKKwl7CisJCS8vIE11c3QgdXNpbmcgMjBNSHouCisJCUFzaWNUdXJuT2ZmUkZDbGsocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwl9CisKKwkvLyBEaXNhYmxlIFR4L1J4IERNQQorCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsJICAgLy8gZGlzYWJsZSBETUEKKwlHbG9DZmcuZmllbGQuRW5hYmxlVHhETUEgPSAwOworCUdsb0NmZy5maWVsZC5FbmFibGVSeERNQSA9IDA7CisJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgV1BETUFfR0xPX0NGRywgR2xvQ2ZnLndvcmQpOwkgICAvLyBhYm9ydCBhbGwgVFggcmluZ3MKKworCS8vIFdhaXRpbmcgZm9yIERNQSBpZGxlCisJaSA9IDA7CisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsKKwkJaWYgKChHbG9DZmcuZmllbGQuVHhETUFCdXN5ID09IDApICYmIChHbG9DZmcuZmllbGQuUnhETUFCdXN5ID09IDApKQorCQkJYnJlYWs7CisKKwkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKwl9d2hpbGUgKGkrKyA8IDEwMCk7CisKKwkvLyBEaXNhYmxlIE1BQyBUeC9SeAorCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCVZhbHVlICY9ICgweGZmZmZmZmYzKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCS8vIE1BQ19TWVNfQ1RSTCA9PiB2YWx1ZSA9IDB4MCA9PiA0MG1BCisJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDApOworCisJLy8gUFdSX1BJTl9DRkcgPT4gdmFsdWUgPSAweDAgPT4gNDBtQQorCS8vUlRNUF9JT19XUklURTMyKHBBZCwgUFdSX1BJTl9DRkcsIDApOworCisJLy8gVFhfUElOX0NGRyA9PiB2YWx1ZSA9IDB4MCA9PiAyMG1BCisJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QSU5fQ0ZHLCAwKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgMHhmZiwgMHhmZiwgMHgwMik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9pbmZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1faW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Y2IxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1faW5mby5jCkBAIC0wLDAgKzEsMzM5NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKK0lOVAlTaG93X1NTSURfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X1dpcmVsZXNzTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfVHhCdXJzdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfVHhQcmVhbWJsZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfVHhQb3dlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfQ2hhbm5lbF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfQkdQcm90ZWN0aW9uX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19SVFNUaHJlc2hvbGRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0ZyYWdUaHJlc2hvbGRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK0lOVAlTaG93X0h0QndfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0TWNzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdEdpX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdE9wTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRFeHRjaGFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0TXBkdURlbnNpdHlfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0QmFXaW5TaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdFJkZ19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRBbXNkdV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRBdXRvQmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK0lOVAlTaG93X0NvdW50cnlSZWdpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfQ291bnRyeUNvZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCitJTlQJU2hvd19Qa3RBZ2dyZWdhdGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisjZW5kaWYgLy8gQUdHUkVHQVRJT05fU1VQUE9SVCAvLworCisjaWZkZWYgV01NX1NVUFBPUlQKK0lOVAlTaG93X1dtbUNhcGFibGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisjZW5kaWYgLy8gV01NX1NVUFBPUlQgLy8KKworSU5UCVNob3dfSUVFRTgwMjExSF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorSU5UCVNob3dfTmV0d29ya1R5cGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK0lOVAlTaG93X0F1dGhNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19FbmNyeXBUeXBlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19EZWZhdWx0S2V5SURfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0tleTFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0tleTJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0tleTNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0tleTRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X1dQQVBTS19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworc3RhdGljIHN0cnVjdCB7CisJQ0hBUiAqbmFtZTsKKwlJTlQgKCpzaG93X3Byb2MpKFBSVE1QX0FEQVBURVIgcEFkYXB0ZXIsIFBVQ0hBUiBhcmcpOworfSAqUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQywgUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DW10gPSB7CisJeyJTU0lEIiwJCQkJCVNob3dfU1NJRF9Qcm9jfSwKKwl7IldpcmVsZXNzTW9kZSIsCQkJU2hvd19XaXJlbGVzc01vZGVfUHJvY30sCisJeyJUeEJ1cnN0IiwJCQkJCVNob3dfVHhCdXJzdF9Qcm9jfSwKKwl7IlR4UHJlYW1ibGUiLAkJCQlTaG93X1R4UHJlYW1ibGVfUHJvY30sCisJeyJUeFBvd2VyIiwJCQkJCVNob3dfVHhQb3dlcl9Qcm9jfSwKKwl7IkNoYW5uZWwiLAkJCQkJU2hvd19DaGFubmVsX1Byb2N9LAorCXsiQkdQcm90ZWN0aW9uIiwJCQlTaG93X0JHUHJvdGVjdGlvbl9Qcm9jfSwKKwl7IlJUU1RocmVzaG9sZCIsCQkJU2hvd19SVFNUaHJlc2hvbGRfUHJvY30sCisJeyJGcmFnVGhyZXNob2xkIiwJCQlTaG93X0ZyYWdUaHJlc2hvbGRfUHJvY30sCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJeyJIdEJ3IiwJCQkJCVNob3dfSHRCd19Qcm9jfSwKKwl7Ikh0TWNzIiwJCQkJCVNob3dfSHRNY3NfUHJvY30sCisJeyJIdEdpIiwJCQkJCVNob3dfSHRHaV9Qcm9jfSwKKwl7Ikh0T3BNb2RlIiwJCQkJU2hvd19IdE9wTW9kZV9Qcm9jfSwKKwl7Ikh0RXh0Y2hhIiwJCQkJU2hvd19IdEV4dGNoYV9Qcm9jfSwKKwl7Ikh0TXBkdURlbnNpdHkiLAkJCVNob3dfSHRNcGR1RGVuc2l0eV9Qcm9jfSwKKwl7Ikh0QmFXaW5TaXplIiwJCSAgICAgICAgU2hvd19IdEJhV2luU2l6ZV9Qcm9jfSwKKwl7Ikh0UmRnIiwJCSAgICAgICAgCVNob3dfSHRSZGdfUHJvY30sCisJeyJIdEFtc2R1IiwJCSAgICAgICAgCVNob3dfSHRBbXNkdV9Qcm9jfSwKKwl7Ikh0QXV0b0JhIiwJCSAgICAgICAgU2hvd19IdEF1dG9CYV9Qcm9jfSwKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl7IkNvdW50cnlSZWdpb24iLAkJCVNob3dfQ291bnRyeVJlZ2lvbl9Qcm9jfSwKKwl7IkNvdW50cnlSZWdpb25BQmFuZCIsCQlTaG93X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jfSwKKwl7IkNvdW50cnlDb2RlIiwJCQkJU2hvd19Db3VudHJ5Q29kZV9Qcm9jfSwKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisJeyJQa3RBZ2dyZWdhdGUiLAkJCVNob3dfUGt0QWdncmVnYXRlX1Byb2N9LAorI2VuZGlmCisKKyNpZmRlZiBXTU1fU1VQUE9SVAorCXsiV21tQ2FwYWJsZSIsCQkJCVNob3dfV21tQ2FwYWJsZV9Qcm9jfSwKKyNlbmRpZgorCXsiSUVFRTgwMjExSCIsCQkJCVNob3dfSUVFRTgwMjExSF9Qcm9jfSwKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICB7Ik5ldHdvcmtUeXBlIiwJCQkJU2hvd19OZXR3b3JrVHlwZV9Qcm9jfSwKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl7IkF1dGhNb2RlIiwJCQkJU2hvd19BdXRoTW9kZV9Qcm9jfSwKKwl7IkVuY3J5cFR5cGUiLAkJCQlTaG93X0VuY3J5cFR5cGVfUHJvY30sCisJeyJEZWZhdWx0S2V5SUQiLAkJCVNob3dfRGVmYXVsdEtleUlEX1Byb2N9LAorCXsiS2V5MSIsCQkJCQlTaG93X0tleTFfUHJvY30sCisJeyJLZXkyIiwJCQkJCVNob3dfS2V5Ml9Qcm9jfSwKKwl7IktleTMiLAkJCQkJU2hvd19LZXkzX1Byb2N9LAorCXsiS2V5NCIsCQkJCQlTaG93X0tleTRfUHJvY30sCisJeyJXUEFQU0siLAkJCQkJU2hvd19XUEFQU0tfUHJvY30sCisJe05VTEwsIE5VTEx9Cit9OworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIEdldCBEcml2ZXIgdmVyc2lvbi4KKworICAgIFJldHVybjoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfRHJpdmVyVmVyc2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRyaXZlciB2ZXJzaW9uLSVzXG4iLCBTVEFfRFJJVkVSX1ZFUlNJT04pKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBDb3VudHJ5IFJlZ2lvbi4KKyAgICAgICAgVGhpcyBjb21tYW5kIHdpbGwgbm90IHdvcmssIGlmIHRoZSBmaWVsZCBvZiBDb3VudHJ5UmVnaW9uIGluIGVlcHJvbSBpcyBwcm9ncmFtbWVkLgorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9Db3VudHJ5UmVnaW9uX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIHJlZ2lvbjsKKworCXJlZ2lvbiA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJcmV0dXJuIC1FT1BOT1RTVVBQOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKworCS8vIENvdW50cnkgY2FuIGJlIHNldCBvbmx5IHdoZW4gRUVQUk9NIG5vdCBwcm9ncmFtbWVkCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gJiAweDgwKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0NvdW50cnlSZWdpb25fUHJvYzo6cGFyYW1ldGVyIG9mIENvdW50cnlSZWdpb24gaW4gZWVwcm9tIGlzIHByb2dyYW1tZWQgXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZigocmVnaW9uID49IDApICYmIChyZWdpb24gPD0gUkVHSU9OX01BWElNVU1fQkdfQkFORCkpCisJeworCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uID0gKFVDSEFSKSByZWdpb247CisJfQorCWVsc2UgaWYgKHJlZ2lvbiA9PSBSRUdJT05fMzFfQkdfQkFORCkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gPSAoVUNIQVIpIHJlZ2lvbjsKKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0NvdW50cnlSZWdpb25fUHJvYzo6cGFyYW1ldGVycyBvdXQgb2YgcmFuZ2VcbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIGlmIHNldCBjb3VudHJ5IHJlZ2lvbiwgZHJpdmVyIG5lZWRzIHRvIGJlIHJlc2V0CisJQnVpbGRDaGFubmVsTGlzdChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0NvdW50cnlSZWdpb25fUHJvYzo6KENvdW50cnlSZWdpb249JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQ291bnRyeSBSZWdpb24gZm9yIEEgYmFuZC4KKyAgICAgICAgVGhpcyBjb21tYW5kIHdpbGwgbm90IHdvcmssIGlmIHRoZSBmaWVsZCBvZiBDb3VudHJ5UmVnaW9uIGluIGVlcHJvbSBpcyBwcm9ncmFtbWVkLgorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9Db3VudHJ5UmVnaW9uQUJhbmRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgcmVnaW9uOworCisJcmVnaW9uID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworCisJLy8gQ291bnRyeSBjYW4gYmUgc2V0IG9ubHkgd2hlbiBFRVBST00gbm90IHByb2dyYW1tZWQKKwlpZiAocEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kICYgMHg4MCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9Db3VudHJ5UmVnaW9uQUJhbmRfUHJvYzo6cGFyYW1ldGVyIG9mIENvdW50cnlSZWdpb24gaW4gZWVwcm9tIGlzIHByb2dyYW1tZWQgXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZigocmVnaW9uID49IDApICYmIChyZWdpb24gPD0gUkVHSU9OX01BWElNVU1fQV9CQU5EKSkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCA9IChVQ0hBUikgcmVnaW9uOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2M6OnBhcmFtZXRlcnMgb3V0IG9mIHJhbmdlXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvLyBpZiBzZXQgY291bnRyeSByZWdpb24sIGRyaXZlciBuZWVkcyB0byBiZSByZXNldAorCUJ1aWxkQ2hhbm5lbExpc3QocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9Db3VudHJ5UmVnaW9uQUJhbmRfUHJvYzo6KENvdW50cnlSZWdpb249JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXaXJlbGVzcyBNb2RlCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X1dpcmVsZXNzTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORwlXaXJlbGVzc01vZGU7CisJSU5UCQlzdWNjZXNzID0gVFJVRTsKKworCVdpcmVsZXNzTW9kZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlJTlQgTWF4UGh5TW9kZSA9IFBIWV8xMUc7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJTWF4UGh5TW9kZSA9IFBIWV8xMU5fNUc7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJaWYgKFdpcmVsZXNzTW9kZSA8PSBNYXhQaHlNb2RlKQorCQl7CisJCQlSVE1QU2V0UGh5TW9kZShwQWQsIFdpcmVsZXNzTW9kZSk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAoV2lyZWxlc3NNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IFRSVUU7CisJCQkJcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IFRSVUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IEZBTFNFOworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBGQUxTRTsKKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCS8vIFNldCBBZGhvY01vZGUgcmF0ZXMKKwkJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCXsKKwkJCQlNbG1lVXBkYXRlVHhSYXRlcyhwQWQsIEZBTFNFLCAwKTsKKwkJCQlNYWtlSWJzc0JlYWNvbihwQWQpOyAgICAgICAgICAgLy8gcmUtYnVpbGQgQkVBQ09OIGZyYW1lCisJCQkJQXNpY0VuYWJsZUlic3NTeW5jKHBBZCk7ICAgICAgIC8vIGNvcHkgdG8gb24tY2hpcCBtZW1vcnkKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCXN1Y2Nlc3MgPSBGQUxTRTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIGl0IGlzIG5lZWRlZCB0byBzZXQgU1NJRCB0byB0YWtlIGVmZmVjdAorCWlmIChzdWNjZXNzID09IFRSVUUpCisJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlTZXRDb21tb25IVChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfV2lyZWxlc3NNb2RlX1Byb2M6Oig9JWxkKVxuIiwgV2lyZWxlc3NNb2RlKSk7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9XaXJlbGVzc01vZGVfUHJvYzo6cGFyYW1ldGVycyBvdXQgb2YgcmFuZ2VcbiIpKTsKKwl9CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQ2hhbm5lbAorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9DaGFubmVsX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworIAlJTlQJCXN1Y2Nlc3MgPSBUUlVFOworCVVDSEFSCUNoYW5uZWw7CisKKwlDaGFubmVsID0gKFVDSEFSKSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJLy8gY2hlY2sgaWYgdGhpcyBjaGFubmVsIGlzIHZhbGlkCisJaWYgKENoYW5uZWxTYW5pdHkocEFkLCBDaGFubmVsKSA9PSBUUlVFKQorCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IENoYW5uZWw7CisKKwkJCWlmIChNT05JVE9SX09OKHBBZCkpCisJCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJTl9DaGFubmVsQ2hlY2socEFkKTsKKwkJCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEICYmCisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCkKKwkJCQl7CisJCQkJCU5fU2V0Q2VuQ2gocEFkKTsKKwkJCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJXXzQwLCBjb250cm9sX2NoYW5uZWwoJWQpLCBDZW50cmFsQ2hhbm5lbCglZCkgXG4iLAorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCkpOworCQkJCX0KKwkJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJeworCQkJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJXXzIwLCBDaGFubmVsKCVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCX0KKwkJCX0KKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlzdWNjZXNzID0gVFJVRTsKKwl9CisJZWxzZQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJc3VjY2VzcyA9IEZBTFNFOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCisJaWYgKHN1Y2Nlc3MgPT0gVFJVRSkKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0NoYW5uZWxfUHJvYzo6KENoYW5uZWw9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgU2hvcnQgU2xvdCBUaW1lIEVuYWJsZSBvciBEaXNhYmxlCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X1Nob3J0U2xvdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBTaG9ydFNsb3Q7CisKKwlTaG9ydFNsb3QgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKFNob3J0U2xvdCA9PSAxKQorCQlwQWQtPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSA9IFRSVUU7CisJZWxzZSBpZiAoU2hvcnRTbG90ID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lID0gRkFMU0U7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQgYXJndW1lbnQKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9TaG9ydFNsb3RfUHJvYzo6KFNob3J0U2xvdD0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgVHggcG93ZXIKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfVHhQb3dlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBUeFBvd2VyOworCUlOVCAgIHN1Y2Nlc3MgPSBGQUxTRTsKKworCVR4UG93ZXIgPSAoVUxPTkcpIHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFR4UG93ZXIgPD0gMTAwKQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdCA9IFR4UG93ZXI7CisJCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0OworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCXN1Y2Nlc3MgPSBUUlVFOworCX0KKwllbHNlCisJCXN1Y2Nlc3MgPSBGQUxTRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9UeFBvd2VyX1Byb2M6OihUeFBvd2VyUGVyY2VudGFnZT0lbGQpXG4iLCBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSkpOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IDExQi8xMUcgUHJvdGVjdGlvbgorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9CR1Byb3RlY3Rpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJc3dpdGNoIChzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApKQorCXsKKwkJY2FzZSAwOiAvL0FVVE8KKwkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvL0Fsd2F5cyBPbgorCQkJcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8vQWx3YXlzIE9GRgorCQkJcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAgLy9JbnZhbGlkIGFyZ3VtZW50CisJCQlyZXR1cm4gRkFMU0U7CisJfQorCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQkdQcm90ZWN0aW9uX1Byb2M6OihCR1Byb3RlY3Rpb249JWxkKVxuIiwgcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgVHhQcmVhbWJsZQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9UeFByZWFtYmxlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVJUXzgwMl8xMV9QUkVBTUJMRQlQcmVhbWJsZTsKKworCVByZWFtYmxlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCisJc3dpdGNoIChQcmVhbWJsZSkKKwl7CisJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZVNob3J0OgorCQkJcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFByZWFtYmxlOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQlNbG1lU2V0VHhQcmVhbWJsZShwQWQsIFJ0ODAyXzExUHJlYW1ibGVTaG9ydCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlicmVhazsKKwkJY2FzZSBSdDgwMl8xMVByZWFtYmxlTG9uZzoKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJY2FzZSBSdDgwMl8xMVByZWFtYmxlQXV0bzoKKwkJCS8vIGlmIHVzZXIgd2FudHMgQVVUTywgaW5pdGlhbGl6ZSB0byBMT05HIGhlcmUsIHRoZW4gY2hhbmdlIGFjY29yZGluZyB0byBBUCdzCisJCQkvLyBjYXBhYmlsaXR5IHVwb24gYXNzb2NpYXRpb24uCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlID0gUHJlYW1ibGU7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCU1sbWVTZXRUeFByZWFtYmxlKHBBZCwgUnQ4MDJfMTFQcmVhbWJsZUxvbmcpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IC8vSW52YWxpZCBhcmd1bWVudAorCQkJcmV0dXJuIEZBTFNFOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9UeFByZWFtYmxlX1Byb2M6OihUeFByZWFtYmxlPSVsZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBSVFMgVGhyZXNob2xkCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X1JUU1RocmVzaG9sZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwkgTkRJU184MDJfMTFfUlRTX1RIUkVTSE9MRCAgICAgICAgICAgUnRzVGhyZXNoOworCisJUnRzVGhyZXNoID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmKChSdHNUaHJlc2ggPiAwKSAmJiAoUnRzVGhyZXNoIDw9IE1BWF9SVFNfVEhSRVNIT0xEKSkKKwkJcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkICA9IChVU0hPUlQpUnRzVGhyZXNoOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWVsc2UgaWYgKFJ0c1RocmVzaCA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgPSBNQVhfUlRTX1RIUkVTSE9MRDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfUlRTVGhyZXNob2xkX1Byb2M6OihSVFNUaHJlc2hvbGQ9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBGcmFnbWVudCBUaHJlc2hvbGQKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfRnJhZ1RocmVzaG9sZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwkgTkRJU184MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQgICAgIEZyYWdUaHJlc2g7CisKKwlGcmFnVGhyZXNoID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChGcmFnVGhyZXNoID4gTUFYX0ZSQUdfVEhSRVNIT0xEIHx8IEZyYWdUaHJlc2ggPCBNSU5fRlJBR19USFJFU0hPTEQpCisJeworCQkvL0lsbGVnYWwgRnJhZ1RocmVzaCBzbyB3ZSBzZXQgaXQgdG8gZGVmYXVsdAorCQlwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKwl9CisJZWxzZSBpZiAoRnJhZ1RocmVzaCAlIDIgPT0gMSkKKwl7CisJCS8vIFRoZSBsZW5ndGggb2YgZWFjaCBmcmFnbWVudCBzaGFsbCBhbHdheXMgYmUgYW4gZXZlbiBudW1iZXIgb2Ygb2N0ZXRzLCBleGNlcHQgZm9yIHRoZSBsYXN0IGZyYWdtZW50CisJCS8vIG9mIGFuIE1TRFUgb3IgTU1QRFUsIHdoaWNoIG1heSBiZSBlaXRoZXIgYW4gZXZlbiBvciBhbiBvZGQgbnVtYmVyIG9mIG9jdGV0cy4KKwkJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAoVVNIT1JUKShGcmFnVGhyZXNoIC0gMSk7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gKFVTSE9SVClGcmFnVGhyZXNoOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAocEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPT0gTUFYX0ZSQUdfVEhSRVNIT0xEKQorCQkJcEFkLT5Db21tb25DZmcuYlVzZVplcm9Ub0Rpc2FibGVGcmFnbWVudCA9IFRSVUU7CisJCWVsc2UKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQgPSBGQUxTRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfRnJhZ1RocmVzaG9sZF9Qcm9jOjooRnJhZ1RocmVzaG9sZD0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgVHhCdXJzdAorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9UeEJ1cnN0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFR4QnVyc3Q7CisKKwlUeEJ1cnN0ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoVHhCdXJzdCA9PSAxKQorCQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IFRSVUU7CisJZWxzZSBpZiAoVHhCdXJzdCA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IEZBTFNFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfVHhCdXJzdF9Qcm9jOjooVHhCdXJzdD0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFR4QnVyc3QKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfUGt0QWdncmVnYXRlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIGFnZ3JlOworCisJYWdncmUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKGFnZ3JlID09IDEpCisJCXBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPSBUUlVFOworCWVsc2UgaWYgKGFnZ3JlID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPSBGQUxTRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfUGt0QWdncmVnYXRlX1Byb2M6OihBR0dSRT0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IElFRUU4MDIxMUguCisgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIDEgd2hlbiBuZWVkcyByYWRhciBkZXRlY3Rpb24sIG90aGVyd2lzZSAwCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0lFRUU4MDIxMUhfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisgICAgVUxPTkcgaWVlZTgwMjExaDsKKworCWllZWU4MDIxMWggPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKGllZWU4MDIxMWggPT0gMSkKKwkJcEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPSBUUlVFOworCWVsc2UgaWYgKGllZWU4MDIxMWggPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPSBGQUxTRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0lFRUU4MDIxMUhfUHJvYzo6KElFRUU4MDIxMUg9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworI2lmZGVmIERCRworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBGb3IgRGVidWcgaW5mb3JtYXRpb24KKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfRGVidWdfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+IFNldF9EZWJ1Z19Qcm9jICoqKioqKioqKioqKioqKioqKipcbiIpKTsKKworICAgIGlmKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPD0gUlRfREVCVUdfTE9VRCkKKyAgICAgICAgUlREZWJ1Z0xldmVsID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBTZXRfRGVidWdfUHJvYyhSVERlYnVnTGV2ZWwgPSAlbGQpXG4iLCBSVERlYnVnTGV2ZWwpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmCisKK0lOVAlTaG93X0Rlc2NJbmZvX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmVzZXQgc3RhdGlzdGljcyBjb3VudGVyCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZGFwdGVyICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgICAgICBhcmcKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9SZXNldFN0YXRDb3VudGVyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCS8vVUNIQVIgICAgICAgICAgIGk7CisJLy9NQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PlNldF9SZXNldFN0YXRDb3VudGVyX1Byb2NcbiIpKTsKKworCS8vIGFkZCB0aGUgbW9zdCB1cC10by1kYXRlIGgvdyByYXcgY291bnRlcnMgaW50byBzb2Z0d2FyZSBjb3VudGVycworCU5JQ1VwZGF0ZVJhd0NvdW50ZXJzKHBBZCk7CisKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5XbGFuQ291bnRlcnMsIHNpemVvZihDT1VOVEVSXzgwMl8xMSkpOworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkNvdW50ZXJzODAyMywgc2l6ZW9mKENPVU5URVJfODAyXzMpKTsKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5SYWxpbmtDb3VudGVycywgc2l6ZW9mKENPVU5URVJfUkFMSU5LKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworQk9PTEVBTiBSVE1QQ2hlY2tTdHJQcmludEFibGUoCisgICAgSU4gIENIQVIgKnBJblB1dFN0ciwKKyAgICBJTiAgVUNIQVIgc3RyTGVuKQoreworICAgIFVDSEFSIGk9MDsKKworICAgIGZvciAoaT0wOyBpPHN0ckxlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChwSW5QdXRTdHJbaV0gPCAweDIxKSB8fAorICAgICAgICAgICAgKHBJblB1dFN0cltpXSA+IDB4N0UpKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVtb3ZlIFdQQSBLZXkgcHJvY2VzcworCisJQXJndW1lbnRzOgorCQlwQWQgCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBCdWYJCQkJCQkJUG9pbnRlciB0byB0aGUgd2hlcmUgdGhlIGtleSBzdG9yZWQKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVUNDRVNTCQkJCQlBZGQga2V5IHN1Y2Nlc3NmdWxseQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCAgICBSVE1QU2V0RGVzaXJlZFJhdGVzKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIExPTkcgICAgICAgICAgICBSYXRlcykKK3sKKyAgICBORElTXzgwMl8xMV9SQVRFUyBhcnlSYXRlczsKKworICAgIG1lbXNldCgmYXJ5UmF0ZXMsIDB4MDAsIHNpemVvZihORElTXzgwMl8xMV9SQVRFUykpOworICAgIHN3aXRjaCAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBQSFlfMTFBOiAvLyBBIG9ubHkKKyAgICAgICAgICAgIHN3aXRjaCAoUmF0ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSA2MDAwMDAwOiAvLzZNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwYzsgLy8gNk0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDkwMDAwMDA6IC8vOU0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDEyOyAvLyA5TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTIwMDAwMDA6IC8vMTJNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxODsgLy8gMTJNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxODAwMDAwMDogLy8xOE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDI0OyAvLyAxOE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18zOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI0MDAwMDAwOiAvLzI0TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MzA7IC8vIDI0TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzYwMDAwMDA6IC8vMzZNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg0ODsgLy8gMzZNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfNTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0ODAwMDAwMDogLy80OE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDYwOyAvLyA0OE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU182OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU0MDAwMDAwOiAvLzU0TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4NmM7IC8vIDU0TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgLTE6IC8vQXV0bworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg2YzsgLy8gNTRNYnBzCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzFdID0gMHg2MDsgLy8gNDhNYnBzCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzJdID0gMHg0ODsgLy8gMzZNYnBzCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzNdID0gMHgzMDsgLy8gMjRNYnBzCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzRdID0gMHgyNDsgLy8gMThNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzVdID0gMHgxODsgLy8gMTJNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzZdID0gMHgxMjsgLy8gOU0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbN10gPSAweDBjOyAvLyA2TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTX0FVVE87CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUEhZXzExQkdfTUlYRUQ6IC8vIEIvRyBNaXhlZAorICAgICAgICBjYXNlIFBIWV8xMUI6IC8vIEIgb25seQorICAgICAgICBjYXNlIFBIWV8xMUFCR19NSVhFRDogLy8gQS9CL0cgTWl4ZWQKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN3aXRjaCAoUmF0ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxMDAwMDAwOiAvLzFNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwMjsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDIwMDAwMDA6IC8vMk0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDA0OworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNTAwMDAwMDogLy81LjVNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwYjsgLy8gNS41TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTEwMDAwMDA6IC8vMTFNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxNjsgLy8gMTFNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA2MDAwMDAwOiAvLzZNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwYzsgLy8gNk0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDkwMDAwMDA6IC8vOU0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDEyOyAvLyA5TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTIwMDAwMDA6IC8vMTJNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxODsgLy8gMTJNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxODAwMDAwMDogLy8xOE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDI0OyAvLyAxOE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18zOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI0MDAwMDAwOiAvLzI0TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MzA7IC8vIDI0TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzYwMDAwMDA6IC8vMzZNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg0ODsgLy8gMzZNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfNTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0ODAwMDAwMDogLy80OE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDYwOyAvLyA0OE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU182OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU0MDAwMDAwOiAvLzU0TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4NmM7IC8vIDU0TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgLTE6IC8vQXV0bworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKKyAgICAgICAgICAgICAgICAgICAgeyAvL0IgT25seQorICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDE2OyAvLyAxMU1icHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzFdID0gMHgwYjsgLy8gNS41TWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMl0gPSAweDA0OyAvLyAyTWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbM10gPSAweDAyOyAvLyAxTWJwcworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeyAvLyhCL0cpIE1peGVkIG9yIChBL0IvRykgTWl4ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg2YzsgLy8gNTRNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1sxXSA9IDB4NjA7IC8vIDQ4TWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMl0gPSAweDQ4OyAvLyAzNk1icHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzNdID0gMHgzMDsgLy8gMjRNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s0XSA9IDB4MTY7IC8vIDExTWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbNV0gPSAweDBiOyAvLyA1LjVNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s2XSA9IDB4MDQ7IC8vIDJNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s3XSA9IDB4MDI7IC8vIDFNYnBzCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU19BVVRPOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIE5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZSwgJmFyeVJhdGVzLCBzaXplb2YoTkRJU184MDJfMTFfUkFURVMpKTsKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgUlRNUFNldERlc2lyZWRSYXRlcyAoJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4KVxuIiwKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzBdLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsxXSwKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzJdLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVszXSwKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzRdLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs1XSwKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzZdLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs3XSApKTsKKyAgICAvLyBDaGFuZ2luZyBEZXNpcmVkUmF0ZSBtYXkgYWZmZWN0IHRoZSBNQVggVFggcmF0ZSB3ZSB1c2VkIHRvIFRYIGZyYW1lcyBvdXQKKyAgICBNbG1lVXBkYXRlVHhSYXRlcyhwQWRhcHRlciwgRkFMU0UsIDApOworfQorCitORElTX1NUQVRVUyBSVE1QV1BBUmVtb3ZlS2V5UHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVk9JRAkJCXBCdWYpCit7CisJUE5ESVNfODAyXzExX1JFTU9WRV9LRVkgcEtleTsKKwlVTE9ORwkJCQkJS2V5SWR4OworCU5ESVNfU1RBVFVTIAkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJQk9PTEVBTiAJYlR4S2V5OyAJCS8vIFNldCB0aGUga2V5IGFzIHRyYW5zbWl0IGtleQorCUJPT0xFQU4gCWJQYWlyd2lzZTsJCS8vIEluZGljYXRlIHRoZSBrZXkgaXMgcGFpcndpc2Uga2V5CisJQk9PTEVBTiAJYktleVJTQzsJCS8vIGluZGljYXRlIHRoZSByZWNlaXZlICBTQyBzZXQgYnkgS2V5UlNDIHZhbHVlLgorCQkJCQkJCQkvLyBPdGhlcndpc2UsIGl0IHdpbGwgc2V0IGJ5IHRoZSBOSUMuCisJQk9PTEVBTiAJYkF1dGhlbnRpY2F0b3I7IC8vIGluZGljYXRlIGtleSBpcyBzZXQgYnkgYXV0aGVudGljYXRvci4KKwlJTlQgCQlpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCItLS0+IFJUTVBXUEFSZW1vdmVLZXlQcm9jXG4iKSk7CisKKwlwS2V5ID0gKFBORElTXzgwMl8xMV9SRU1PVkVfS0VZKSBwQnVmOworCUtleUlkeCA9IHBLZXktPktleUluZGV4ICYgMHhmZjsKKwkvLyBCaXQgMzEgb2YgQWRkLWtleSwgVHggS2V5CisJYlR4S2V5CQkgICA9IChwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApID8gVFJVRSA6IEZBTFNFOworCS8vIEJpdCAzMCBvZiBBZGQta2V5IFBhaXJ3aXNlS2V5CisJYlBhaXJ3aXNlCSAgID0gKHBLZXktPktleUluZGV4ICYgMHg0MDAwMDAwMCkgPyBUUlVFIDogRkFMU0U7CisJLy8gQml0IDI5IG9mIEFkZC1rZXkgS2V5UlNDCisJYktleVJTQyAJICAgPSAocEtleS0+S2V5SW5kZXggJiAweDIwMDAwMDAwKSA/IFRSVUUgOiBGQUxTRTsKKwkvLyBCaXQgMjggb2YgQWRkLWtleSBBdXRoZW50aWNhdG9yCisJYkF1dGhlbnRpY2F0b3IgPSAocEtleS0+S2V5SW5kZXggJiAweDEwMDAwMDAwKSA/IFRSVUUgOiBGQUxTRTsKKworCS8vIDEuIElmIGJUeCBpcyBUUlVFLCByZXR1cm4gZmFpbHVyZSBpbmZvcm1hdGlvbgorCWlmIChiVHhLZXkgPT0gVFJVRSkKKwkJcmV0dXJuKE5ESVNfU1RBVFVTX0lOVkFMSURfREFUQSk7CisKKwkvLyAyLiBDaGVjayBQYWlyd2lzZSBLZXkKKwlpZiAoYlBhaXJ3aXNlKQorCXsKKwkJLy8gYS4gSWYgQlNTSUQgaXMgYnJvYWRjYXN0LCByZW1vdmUgYWxsIHBhaXJ3aXNlIGtleXMuCisJCS8vIGIuIElmIG5vdCBicm9hZGNhc3QsIHJlbW92ZSB0aGUgcGFpcndpc2Ugc3BlY2lmaWVkIGJ5IEJTU0lECisJCWZvciAoaSA9IDA7IGkgPCBTSEFSRV9LRVlfTlVNOyBpKyspCisJCXsKKwkJCWlmIChNQUNfQUREUl9FUVVBTChwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5Cc3NJZCwgcEtleS0+QlNTSUQpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUFdQQVJlbW92ZUtleVByb2MoS2V5SWR4PSVkKVxuIiwgaSkpOworCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLktleUxlbiA9IDA7CisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJCQkJQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgKFVDSEFSKWkpOworCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJLy8gMy4gR3JvdXAgS2V5CisJZWxzZQorCXsKKwkJLy8gYS4gSWYgQlNTSUQgaXMgYnJvYWRjYXN0LCByZW1vdmUgYWxsIGdyb3VwIGtleXMgaW5kZXhlZAorCQkvLyBiLiBJZiBCU1NJRCBtYXRjaGVkLCBkZWxldGUgdGhlIGdyb3VwIGtleSBpbmRleGVkLgorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBXUEFSZW1vdmVLZXlQcm9jKEtleUlkeD0lbGQpXG4iLCBLZXlJZHgpKTsKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXlMZW4gPSAwOworCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQlBc2ljUmVtb3ZlU2hhcmVkS2V5RW50cnkocEFkLCBCU1MwLCAoVUNIQVIpS2V5SWR4KTsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwl9CisKKwlyZXR1cm4gKFN0YXR1cyk7Cit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlbW92ZSBBbGwgV1BBIEtleXMKKworCUFyZ3VtZW50czoKKwkJcEFkIAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBXUEFSZW1vdmVBbGxLZXlzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCisJVUNIQVIgCWk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBXUEFSZW1vdmVBbGxLZXlzKEF1dGhNb2RlPSVkLCBXZXBTdGF0dXM9JWQpXG4iLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzKSk7CisKKwkvLyBGb3IgV0VQL0NLSVAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVtb3ZlIGl0LCBzaW5jZSBXaW5YUCB3b24ndCBzZXQgaXQgYWdhaW4gYWZ0ZXIKKwkvLyBMaW5rIHVwLiBBbmQgaXQgd2lsbCBiZSByZXBsYWNlZCBpZiB1c2VyIGNoYW5nZWQgaXQuCisJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorCQlyZXR1cm47CisKKwkvLyBGb3IgV1BBLU5vbmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVtb3ZlIGl0LCBzaW5jZSBXaW5YUCB3b24ndCBzZXQgaXQgYWdhaW4gYWZ0ZXIKKwkvLyBMaW5rIHVwLiBBbmQgaXQgd2lsbCBiZSByZXBsYWNlZCBpZiB1c2VyIGNoYW5nZWQgaXQuCisJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCXJldHVybjsKKworCS8vIHNldCBCU1NJRCB3Y2lkIGVudHJ5IG9mIHRoZSBQYWlyLXdpc2UgS2V5IHRhYmxlIGFzIG5vLXNlY3VyaXR5IG1vZGUKKwlBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsIEJTUzAsIEJTU0lEX1dDSUQpOworCisJLy8gc2V0IGFsbCBzaGFyZWQga2V5IG1vZGUgYXMgbm8tc2VjdXJpdHkuCisJZm9yIChpID0gMDsgaSA8IFNIQVJFX0tFWV9OVU07IGkrKykKKyAgICB7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgicmVtb3ZlICVzIGtleSAjJWRcbiIsIENpcGhlck5hbWVbcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnXSwgaSkpOworCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisKKwkJQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgaSk7CisJfQorCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2hhbmdlIE5JQyBQSFkgbW9kZS4gUmUtYXNzb2NpYXRpb24gbWF5IGJlIG5lY2Vzc2FyeS4gcG9zc2libGUgc2V0dGluZ3MKKwkJaW5jbHVkZSAtIFBIWV8xMUIsIFBIWV8xMUJHX01JWEVELCBQSFlfMTFBLCBhbmQgUEhZXzExQUJHX01JWEVECisKKwlBcmd1bWVudHM6CisJCXBBZCAtIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcGh5bW9kZSAgLQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFNldFBoeU1vZGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUxPTkcgcGh5bW9kZSkKK3sKKwlJTlQgaTsKKwkvLyB0aGUgc2VsZWN0ZWQgcGh5bW9kZSBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgUkYgSUMgZW5jb2RlZCBpbiBFMlBST00KKworCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSAoVUNIQVIpcGh5bW9kZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUFNldFBoeU1vZGUgOiBQaHlNb2RlPSVkLCBjaGFubmVsPSVkIFxuIiwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlCdWlsZENoYW5uZWxMaXN0RXgocEFkKTsKKyNlbHNlCisJQnVpbGRDaGFubmVsTGlzdChwQWQpOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKworCS8vIHNhbml0eSBjaGVjayB1c2VyIHNldHRpbmcKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gcEFkLT5DaGFubmVsTGlzdE51bSkKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gRmlyc3RDaGFubmVsKHBBZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBTZXRQaHlNb2RlOiBjaGFubmVsIGlzIG91dCBvZiByYW5nZSwgdXNlIGZpcnN0IGNoYW5uZWw9JWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJfQorCisJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcuU3VwUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKwlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisJc3dpdGNoIChwaHltb2RlKSB7CisJCWNhc2UgUEhZXzExQjoKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMF0gID0gMHg4MjsJICAvLyAxIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzFdICA9IDB4ODQ7CSAgLy8gMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsyXSAgPSAweDhCOwkgIC8vIDUuNSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVszXSAgPSAweDk2OwkgIC8vIDExIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlTGVuICA9IDQ7CisJCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuICA9IDA7CisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzBdICA9IDI7CSAgIC8vIDEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMV0gID0gNDsJICAgLy8gMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsyXSAgPSAxMTsgICAgLy8gNS41IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzNdICA9IDIyOyAgICAvLyAxMSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJLy9wQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOyAvLyBUaGlzIE1PREUgaXMgb25seSBGWUkuIG5vdCB1c2UKKwkJCWJyZWFrOworCisJCWNhc2UgUEhZXzExRzoKKwkJY2FzZSBQSFlfMTFCR19NSVhFRDoKKwkJY2FzZSBQSFlfMTFBQkdfTUlYRUQ6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExTl8yXzRHOgorCQljYXNlIFBIWV8xMUFCR05fTUlYRUQ6CisJCWNhc2UgUEhZXzExQkdOX01JWEVEOgorCQljYXNlIFBIWV8xMUdOX01JWEVEOgorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVswXSAgPSAweDgyOwkgIC8vIDEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMV0gID0gMHg4NDsJICAvLyAyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzJdICA9IDB4OEI7CSAgLy8gNS41IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzNdICA9IDB4OTY7CSAgLy8gMTEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNF0gID0gMHgxMjsJICAvLyA5IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzVdICA9IDB4MjQ7CSAgLy8gMTggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNl0gID0gMHg0ODsJICAvLyAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs3XSAgPSAweDZjOwkgIC8vIDU0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlTGVuICA9IDg7CisJCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlWzBdICA9IDB4MEM7CSAgLy8gNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZVsxXSAgPSAweDE4OwkgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlWzJdICA9IDB4MzA7CSAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVbM10gID0gMHg2MDsJICAvLyA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiAgPSA0OworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSAgPSAyOwkgICAvLyAxIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzFdICA9IDQ7CSAgIC8vIDIgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMl0gID0gMTE7ICAgIC8vIDUuNSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVszXSAgPSAyMjsgICAgLy8gMTEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNF0gID0gMTI7ICAgIC8vIDYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNV0gID0gMTg7ICAgIC8vIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNl0gID0gMjQ7ICAgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzddICA9IDM2OyAgICAvLyAxOCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs4XSAgPSA0ODsgICAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbOV0gID0gNzI7ICAgIC8vIDM2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzEwXSA9IDk2OyAgICAvLyA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsxMV0gPSAxMDg7ICAgLy8gNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCWJyZWFrOworCisJCWNhc2UgUEhZXzExQToKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBQSFlfMTFBTl9NSVhFRDoKKwkJY2FzZSBQSFlfMTFBR05fTUlYRUQ6CisJCWNhc2UgUEhZXzExTl81RzoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMF0gID0gMHg4QzsJICAvLyA2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzFdICA9IDB4MTI7CSAgLy8gOSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsyXSAgPSAweDk4OwkgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzNdICA9IDB4MjQ7CSAgLy8gMTggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNF0gID0gMHhiMDsJICAvLyAyNCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs1XSAgPSAweDQ4OwkgIC8vIDM2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzZdICA9IDB4NjA7CSAgLy8gNDggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbN10gID0gMHg2YzsJICAvLyA1NCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbiAgPSA4OworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiAgPSAwOworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSAgPSAxMjsgICAgLy8gNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsxXSAgPSAxODsgICAgLy8gOSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsyXSAgPSAyNDsgICAgLy8gMTIgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10gID0gMzY7ICAgIC8vIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzRdICA9IDQ4OyAgICAvLyAyNCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs1XSAgPSA3MjsgICAgLy8gMzYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNl0gID0gOTY7ICAgIC8vIDQ4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzddICA9IDEwODsgICAvLyA1NCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJLy9wQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsgLy8gVGhpcyBNT0RFIGlzIG9ubHkgRllJLiBub3QgdXNlCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisKKwlwQWQtPkNvbW1vbkNmZy5CYW5kU3RhdGUgPSBVTktOT1dOX0JBTkQ7Cit9CisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDYWxsZXIgZW5zdXJlcyB3ZSBoYXMgODAyLjExbiBzdXBwb3J0LgorCQlDYWxscyBhdCBzZXR0aW5nIEhUIGZyb20gQVAvU1RBU2V0aW5mb3JtYXRpb24KKworCUFyZ3VtZW50czoKKwkJcEFkIC0gUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwaHltb2RlICAtCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTZXRIVCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglPSURfU0VUX0hUX1BIWU1PREUgKnBIVFBoeU1vZGUpCit7CisJLy9VTE9ORwkqcG1jczsKKwlVSU5UMzIJVmFsdWUgPSAwOworCVVDSEFSCUJCUFZhbHVlID0gMDsKKwlVQ0hBUglCQlAzVmFsdWUgPSAwOworCVVDSEFSCVJ4U3RyZWFtID0gcEFkLT5Db21tb25DZmcuUnhTdHJlYW07CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU2V0SFQgOiBIVF9tb2RlKCVkKSwgRXh0T2Zmc2V0KCVkKSwgTUNTKCVkKSwgQlcoJWQpLCBTVEJDKCVkKSwgU0hPUlRHSSglZClcbiIsCisJCQkJCQkJCQkJcEhUUGh5TW9kZS0+SHRNb2RlLCBwSFRQaHlNb2RlLT5FeHRPZmZzZXQsCisJCQkJCQkJCQkJcEhUUGh5TW9kZS0+TUNTLCBwSFRQaHlNb2RlLT5CVywKKwkJCQkJCQkJCQlwSFRQaHlNb2RlLT5TVEJDLCBwSFRQaHlNb2RlLT5TSE9SVEdJKSk7CisKKwkvLyBEb24ndCB6ZXJvIHN1cHBvcnRlZEh5UGh5IHN0cnVjdHVyZS4KKwlSVE1QWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBzaXplb2YocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5KSk7CisJUlRNUFplcm9NZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbywgc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbykpOworCVJUTVBaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5OZXdFeHRDaGFuT2Zmc2V0LCBzaXplb2YocEFkLT5Db21tb25DZmcuTmV3RXh0Q2hhbk9mZnNldCkpOworCVJUTVBaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHksIHNpemVvZihwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkpKTsKKworICAgCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnKQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5QbHVzSFRDID0gMTsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0ID0gMTsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5QbHVzSFRDID0gMDsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0ID0gMDsKKwl9CisKKwlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1heFJBbXBkdUZhY3RvciA9IDM7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1heFJBbXBkdUZhY3RvciA9IDM7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU2V0SFQgOiBSeEJBV2luTGltaXQgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCkpOworCisJLy8gTWltbyBwb3dlciBzYXZlLCBBLU1TRFUgc2l6ZSwKKwlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUgPSAoVVNIT1JUKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZTsKKwlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdVNpemU7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QcyA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGU7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1wZHVEZW5zaXR5ID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eTsKKworCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVTaXplOworCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGU7CisJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU2V0SFQgOiBBTXNkdVNpemUgPSAlZCwgTWltb1BzID0gJWQsIE1wZHVEZW5zaXR5ID0gJWQsIE1heFJBbXBkdUZhY3RvciA9ICVkXG4iLAorCQkJCQkJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemUsCisJCQkJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QcywKKwkJCQkJCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHksCisJCQkJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1heFJBbXBkdUZhY3RvcikpOworCisJaWYocEhUUGh5TW9kZS0+SHRNb2RlID09IEhUTU9ERV9HRikKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uR0YgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0YgPSAxOworCX0KKwllbHNlCisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRiA9IDA7CisKKwkvLyBEZWNpZGUgUnggTUNTU2V0CisJc3dpdGNoIChSeFN0cmVhbSkKKwl7CisJCWNhc2UgMToKKwkJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAgMHhmZjsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAgMHgwMDsKKwkJCWJyZWFrOworCisJCWNhc2UgMjoKKwkJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAgMHhmZjsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAgMHhmZjsKKwkJCWJyZWFrOworCisJCWNhc2UgMzogLy8gMyozCisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gIDB4ZmY7CisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gIDB4ZmY7CisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzJdID0gIDB4ZmY7CisJCQlicmVhazsKKwl9CisKKwlpZiAocEFkLT5Db21tb25DZmcuYkZvcnR5X01oel9JbnRvbGVyYW50ICYmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsIDw9IDE0KSAmJiAocEhUUGh5TW9kZS0+QlcgPT0gQldfNDApICkKKwl7CisJCXBIVFBoeU1vZGUtPkJXID0gQldfMjA7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uRm9ydHlfTWh6X0ludG9sZXJhbnQgPSAxOworCX0KKworCWlmKHBIVFBoeU1vZGUtPkJXID09IEJXXzQwKQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFs0XSA9IDB4MTsgLy8gTUNTIDMyCisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID0gMTsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpCisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNDS21vZGVpbjQwID0gMTsKKworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoID0gMTsKKwkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID0gMTsKKwkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID0gKHBIVFBoeU1vZGUtPkV4dE9mZnNldCA9PSBFWFRDSEFfQkVMT1cpPyAoRVhUQ0hBX0JFTE9XKTogRVhUQ0hBX0FCT1ZFOworCQkvLyBTZXQgUmVnc2l0ZXIgZm9yIGV4dGVuc2lvbiBjaGFubmVsIHBvc2l0aW9uLgorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCQlAzVmFsdWUpOworCQlpZiAoKHBIVFBoeU1vZGUtPkV4dE9mZnNldCA9PSBFWFRDSEFfQkVMT1cpKQorCQl7CisJCQlWYWx1ZSB8PSAweDE7CisJCQlCQlAzVmFsdWUgfD0gKDB4MjApOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKwkJfQorCQllbHNlIGlmICgocEhUUGh5TW9kZS0+RXh0T2Zmc2V0ID09IEVYVENIQV9BQk9WRSkpCisJCXsKKwkJCVZhbHVlICY9IDB4ZmU7CisJCQlCQlAzVmFsdWUgJj0gKH4weDIwKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBWYWx1ZSk7CisJCX0KKworCQkvLyBUdXJuIG9uIEJCUCA0ME1IeiBtb2RlIG5vdyBvbmx5IGFzIEFQIC4KKwkJLy8gU3RhIGNhbiB0dXJuIG9uIEJCUCA0ME1IeiBhZnRlciBjb25uZWN0aW9uIHdpdGggNDBNSHogQVAuIFN0YSBvbmx5IGJyb2FkY2FzdCA0ME1IeiBjYXBhYmlsaXR5IGJlZm9yZSBjb25uZWN0aW9uLgorCQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkgfHwgSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpCisJCQkpCisJCXsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJCQlCQlBWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlAzVmFsdWUpOworCQkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfNDA7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPSAwOworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID0gRVhUQ0hBX05PTkU7CisJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKwkJLy8gVHVybiBvbiBCQlAgMjBNSHogbW9kZSBieSByZXF1ZXN0IGhlcmUuCisJCXsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJfQorCX0KKworCWlmKHBIVFBoeU1vZGUtPlNUQkMgPT0gU1RCQ19VU0UpCisJeworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlR4U1RCQyA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlJ4U1RCQyA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5SeFNUQkMgPSAxOworCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDID0gMDsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlJ4U1RCQyA9IDA7CisJfQorCisJaWYocEhUUGh5TW9kZS0+U0hPUlRHSSA9PSBHSV80MDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0gMTsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDAgPSAxOworCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0gMDsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDAgPSAwOworCX0KKworCS8vIFdlIHN1cHBvcnQgbGluayBhZGFwdGF0aW9uIGZvciB1bnNvbGljaXQgTUNTIGZlZWRiYWNrLCBzZXQgdG8gMi4KKwlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLk1DU0ZlZWRiYWNrID0gTUNTRkJLX05PTkU7IC8vTUNTRkJLX1VOU09MSUNJVDsKKwlwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQ29udHJvbENoYW4gPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCS8vIDEsIHRoZSBleHRlbnNpb24gY2hhbm5lbCBhYm92ZSB0aGUgY29udHJvbCBjaGFubmVsLgorCisJLy8gRURDQSBwYXJhbWV0ZXJzIHVzZWQgZm9yIEFQJ3Mgb3duIHRyYW5zbWlzc2lvbgorCWlmIChwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJWYWxpZCA9PSBGQUxTRSkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYlZhbGlkID0gVFJVRTsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblswXSA9IDM7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bMV0gPSA3OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzJdID0gMTsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblszXSA9IDE7CisKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblswXSA9IDQ7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bMV0gPSA0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzJdID0gMzsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblszXSA9IDI7CisKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFswXSA9IDY7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMV0gPSAxMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFsyXSA9IDQ7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbM10gPSAzOworCisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFswXSAgPSAwOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbMV0gID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzJdICA9IDk0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbM10gID0gNDc7CisJfQorCUFzaWNTZXRFZGNhUGFybShwQWQsICZwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCVJUTVBTZXRJbmRpdmlkdWFsSFQocEFkLCAwKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDYWxsZXIgZW5zdXJlcyB3ZSBoYXMgODAyLjExbiBzdXBwb3J0LgorCQlDYWxscyBhdCBzZXR0aW5nIEhUIGZyb20gQVAvU1RBU2V0aW5mb3JtYXRpb24KKworCUFyZ3VtZW50czoKKwkJcEFkIC0gUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwaHltb2RlICAtCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTZXRJbmRpdmlkdWFsSFQoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVVDSEFSCQkJCWFwaWR4KQoreworCVBSVF9IVF9QSFlfSU5GTwkJcERlc2lyZWRfaHRfcGh5ID0gTlVMTDsKKwlVQ0hBUglUeFN0cmVhbSA9IHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtOworCVVDSEFSCURlc2lyZWRNY3MJPSBNQ1NfQVVUTzsKKworCWRvCisJeworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCXBEZXNpcmVkX2h0X3BoeSA9ICZwQWQtPlN0YUNmZy5EZXNpcmVkSHRQaHlJbmZvOworCQkJRGVzaXJlZE1jcyA9IHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTOworCQkJLy9wQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9IChEZXNpcmVkTWNzID09IE1DU19BVVRPKSA/IFRSVUUgOiBGQUxTRTsKKwkJCQlicmVhazsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0gd2hpbGUgKEZBTFNFKTsKKworCWlmIChwRGVzaXJlZF9odF9waHkgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBTZXRJbmRpdmlkdWFsSFQ6IGludmFsaWQgYXBpZHgoJWQpXG4iLCBhcGlkeCkpOworCQlyZXR1cm47CisJfQorCVJUTVBaZXJvTWVtb3J5KHBEZXNpcmVkX2h0X3BoeSwgc2l6ZW9mKFJUX0hUX1BIWV9JTkZPKSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU2V0SW5kaXZpZHVhbEhUIDogRGVzaXJlZCBNQ1MgPSAlZFxuIiwgRGVzaXJlZE1jcykpOworCS8vIENoZWNrIHRoZSB2YWxpZGl0eSBvZiBNQ1MKKwlpZiAoKFR4U3RyZWFtID09IDEpICYmICgoRGVzaXJlZE1jcyA+PSBNQ1NfOCkgJiYgKERlc2lyZWRNY3MgPD0gTUNTXzE1KSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlJUTVBTZXRJbmRpdmlkdWFsSFQ6IE1DUyglZCkgaXMgaW52YWxpZCBpbiAxUywgcmVzZXQgaXQgYXMgTUNTXzdcbiIsIERlc2lyZWRNY3MpKTsKKwkJRGVzaXJlZE1jcyA9IE1DU183OworCX0KKworCWlmICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCA9PSBCV18yMCkgJiYgKERlc2lyZWRNY3MgPT0gTUNTXzMyKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUlRNUFNldEluZGl2aWR1YWxIVDogTUNTXzMyIGlzIG9ubHkgc3VwcG9ydGVkIGluIDQwLU1IeiwgcmVzZXQgaXQgYXMgTUNTXzBcbiIpKTsKKwkJRGVzaXJlZE1jcyA9IE1DU18wOworCX0KKworCXBEZXNpcmVkX2h0X3BoeS0+Ykh0RW5hYmxlID0gVFJVRTsKKworCS8vIERlY2lkZSBkZXNpcmVkIFR4IE1DUworCXN3aXRjaCAoVHhTdHJlYW0pCisJeworCQljYXNlIDE6CisJCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykKKwkJCXsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFswXT0gMHhmZjsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsxXT0gMHgwMDsKKwkJCX0KKwkJCWVsc2UgaWYgKERlc2lyZWRNY3MgPD0gTUNTXzcpCisJCQl7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMF09IDE8PERlc2lyZWRNY3M7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMV09IDB4MDA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIDI6CisJCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykKKwkJCXsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFswXT0gMHhmZjsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsxXT0gMHhmZjsKKwkJCX0KKwkJCWVsc2UgaWYgKERlc2lyZWRNY3MgPD0gTUNTXzE1KQorCQkJeworCQkJCVVMT05HIG1vZGU7CisKKwkJCQltb2RlID0gRGVzaXJlZE1jcyAvIDg7CisJCQkJaWYgKG1vZGUgPCAyKQorCQkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFttb2RlXSA9ICgxIDw8IChEZXNpcmVkTWNzIC0gbW9kZSAqIDgpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgMzogLy8gMyozCisJCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykKKwkJCXsKKwkJCQkvKiBNQ1MwIH4gTUNTMjMsIDMgYnl0ZXMgKi8KKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFswXT0gMHhmZjsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsxXT0gMHhmZjsKKwkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsyXT0gMHhmZjsKKwkJCX0KKwkJCWVsc2UgaWYgKERlc2lyZWRNY3MgPD0gTUNTXzIzKQorCQkJeworCQkJCVVMT05HIG1vZGU7CisKKwkJCQltb2RlID0gRGVzaXJlZE1jcyAvIDg7CisJCQkJaWYgKG1vZGUgPCAzKQorCQkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFttb2RlXSA9ICgxIDw8IChEZXNpcmVkTWNzIC0gbW9kZSAqIDgpKTsKKwkJCX0KKwkJCWJyZWFrOworCX0KKworCWlmKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGggPT0gQldfNDApCisJeworCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTyB8fCBEZXNpcmVkTWNzID09IE1DU18zMikKKwkJCXBEZXNpcmVkX2h0X3BoeS0+TUNTU2V0WzRdID0gMHgxOworCX0KKworCS8vIHVwZGF0ZSBIVCBSYXRlIHNldHRpbmcKKyAgICBpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKyAgICAgICAgTWxtZVVwZGF0ZUh0VHhSYXRlcyhwQWQsIEJTUzApOworICAgIGVsc2UKKwkgICAgTWxtZVVwZGF0ZUh0VHhSYXRlcyhwQWQsIGFwaWR4KTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVVwZGF0ZSBIVCBJRSBmcm9tIG91ciBjYXBhYmlsaXR5LgorCisJQXJndW1lbnRzOgorCQlTZW5kIGFsbCBIVCBJRSBpbiBiZWFjb24vcHJvYmUgcnNwL2Fzc29jIHJzcC9hY3Rpb24gZnJhbWUuCisKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFVwZGF0ZUhUSUUoCisJSU4JUlRfSFRfQ0FQQUJJTElUWQkqcFJ0SHQsCisJSU4JCVVDSEFSCQkJCSpwTWNzU2V0LAorCU9VVAkJSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlPVVQJCUFERF9IVF9JTkZPX0lFCQkqcEFkZEh0SW5mbykKK3sKKwlSVE1QWmVyb01lbW9yeShwSHRDYXBhYmlsaXR5LCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCVJUTVBaZXJvTWVtb3J5KHBBZGRIdEluZm8sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworCisJCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPSBwUnRIdC0+Q2hhbm5lbFdpZHRoOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uTWltb1BzID0gcFJ0SHQtPk1pbW9QczsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkdGID0gcFJ0SHQtPkdGOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjIwID0gcFJ0SHQtPlNob3J0R0lmb3IyMDsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3I0MCA9IHBSdEh0LT5TaG9ydEdJZm9yNDA7CisJCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5UeFNUQkMgPSBwUnRIdC0+VHhTVEJDOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDID0gcFJ0SHQtPlJ4U1RCQzsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkFNc2R1U2l6ZSA9IHBSdEh0LT5BbXNkdVNpemU7CisJCXBIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3IgPSBwUnRIdC0+TWF4UkFtcGR1RmFjdG9yOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTXBkdURlbnNpdHkgPSBwUnRIdC0+TXBkdURlbnNpdHk7CisKKwkJcEFkZEh0SW5mby0+QWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPSBwUnRIdC0+RXh0Q2hhbk9mZnNldCA7CisJCXBBZGRIdEluZm8tPkFkZEh0SW5mby5SZWNvbVdpZHRoID0gcFJ0SHQtPlJlY29tV2lkdGg7CisJCXBBZGRIdEluZm8tPkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlID0gcFJ0SHQtPk9wZXJhaW9uTW9kZTsKKwkJcEFkZEh0SW5mby0+QWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPSBwUnRIdC0+Tm9uR2ZQcmVzZW50OworCQlSVE1QTW92ZU1lbW9yeShwQWRkSHRJbmZvLT5NQ1NTZXQsIC8qcFJ0SHQtPk1DU1NldCovcE1jc1NldCwgNCk7IC8vIHJ0Mjg2MCBvbmx5IHN1cHBvcnQgTUNTIG1heD0zMiwgbm8gbmVlZCB0byBjb3B5IGFsbCAxNiB1Y2hhci4KKworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBVcGRhdGVIVElFIDw9PSBcbiIpKTsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQWRkIENsaWVudCBzZWN1cml0eSBpbmZvcm1hdGlvbiBpbnRvIEFTSUMgV0NJRCB0YWJsZSBhbmQgSVZFSVYgdGFibGUuCisgICAgUmV0dXJuOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJzc0lkeCwKKwlJTiAJVUNIQVIJCSAJS2V5SWR4LAorCUlOIAlVQ0hBUgkJIAlDaXBoZXJBbGcsCisJSU4gCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5KQoreworCVVJTlQzMgkJV0NJREF0dHJpID0gMDsKKwlVU0hPUlQJCW9mZnNldDsKKwlVQ0hBUgkJSVZFSVYgPSAwOworCVVTSE9SVAkJV2NpZCA9IDA7CisKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCWlmIChCc3NJZHggPiBCU1MwKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnk6IFRoZSBCU1MtaW5kZXgoJWQpIGlzIG91dCBvZiByYW5nZSBmb3IgSW5mcmEgbGluay4gXG4iLCBCc3NJZHgpKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIDEuCUluIEFESE9DIG1vZGUsIHRoZSBBSUQgaXMgd2NpZCBudW1iZXIuIEFuZCBOTyBtZXNoIGxpbmsgZXhpc3RzLgorCQkJLy8gMi4JSW4gSW5mcmEgbW9kZSwgdGhlIEFJRDoxIE1VU1QgYmUgd2NpZCBvZiBpbmZyYSBTVEEuCisJCQkvLwkJCQkJICAgdGhlIEFJRDoyfiBhc3NpZ24gdG8gbWVzaCBsaW5rIGVudHJ5LgorCQkJaWYgKHBFbnRyeSAmJiBBREhPQ19PTihwQWQpKQorCQkJCVdjaWQgPSBwRW50cnktPkFpZDsKKwkJCWVsc2UgaWYgKHBFbnRyeSAmJiBJTkZSQV9PTihwQWQpKQorCQkJeworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJCWlmIChwRW50cnktPlZhbGlkQXNEbHMgPT0gVFJVRSkKKwkJCQkJV2NpZCA9IHBFbnRyeS0+QWlkOworCQkJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJCQlXY2lkID0gQlNTSURfV0NJRDsKKwkJCX0KKwkJCWVsc2UKKwkJCQlXY2lkID0gTUNBU1RfV0NJRDsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCS8vIFVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZSB0YWJsZQorCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKFdjaWQgKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChwRW50cnkgJiYgcEVudHJ5LT5WYWxpZEFzTWVzaCkKKwkJCVdDSURBdHRyaSA9IChDaXBoZXJBbGc8PDEpIHwgUEFJUldJU0VLRVlUQUJMRTsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJZWxzZSBpZiAoKHBFbnRyeSkgJiYgKHBFbnRyeS0+VmFsaWRBc0RscykgJiYKKwkJCQkJKChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApIHx8CisJCQkJIAkoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykgfHwKKwkJCQkJKENpcGhlckFsZyA9PSBDSVBIRVJfQUVTKSB8fAorCQkJCSAJKENpcGhlckFsZyA9PSBDSVBIRVJfTk9ORSkpKQorCQkJV0NJREF0dHJpID0gKENpcGhlckFsZzw8MSkgfCBQQUlSV0lTRUtFWVRBQkxFOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQllbHNlCisJCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKSB8IFNIQVJFREtFWVRBQkxFOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgV0NJREF0dHJpKTsKKworCisJLy8gVXBkYXRlIElWL0VJViB0YWJsZQorCW9mZnNldCA9IE1BQ19JVkVJVl9UQUJMRV9CQVNFICsgKFdjaWQgKiBIV19JVkVJVl9FTlRSWV9TSVpFKTsKKworCS8vIFdQQSBtb2RlCisJaWYgKChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApIHx8IChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVBfTk9fTUlDKSB8fCAoQ2lwaGVyQWxnID09IENJUEhFUl9BRVMpKQorCXsKKwkJLy8gRWl2IGJpdCBvbi4ga2V5aWQgYWx3YXlzIGlzIDAgZm9yIHBhaXJ3aXNlIGtleQorCQlJVkVJViA9IChLZXlJZHggPDw2KSB8IDB4MjA7CisJfQorCWVsc2UKKwl7CisJCS8vIFdFUCBLZXlJZHggaXMgZGVmYXVsdCB0eCBrZXkuCisJCUlWRUlWID0gKEtleUlkeCA8PCA2KTsKKwl9CisKKwkvLyBGb3Iga2V5IGluZGV4IGFuZCBleHQgSVYgYml0LCBzbyBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSBwb3NpdGlvbihvZmZzZXQrMykuCisjaWZkZWYgUlQyODcwCisJUlRVU0JNdWx0aVdyaXRlX09uZUJ5dGUocEFkLCBvZmZzZXQrMywgJklWRUlWKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeTogV0NJRCAjJWQsIEtleUluZGV4ICMlZCwgQWxnPSVzXG4iLFdjaWQsIEtleUlkeCwgQ2lwaGVyTmFtZVtDaXBoZXJBbGddKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIJV0NJREF0dHJpID0gMHgleCBcbiIsICBXQ0lEQXR0cmkpKTsKKworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFBhcnNlIGVuY3J5cHRpb24gdHlwZQorQXJndW1lbnRzOgorICAgIHBBZGFwdGVyICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgd3JxICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgIE5vdGU6CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitDSEFSICpHZXRFbmNyeXB0VHlwZShDSEFSIGVuYykKK3sKKyAgICBpZihlbmMgPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQorICAgICAgICByZXR1cm4gIk5PTkUiOworICAgIGlmKGVuYyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkKKyAgICAJcmV0dXJuICJXRVAiOworICAgIGlmKGVuYyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorICAgIAlyZXR1cm4gIlRLSVAiOworICAgIGlmKGVuYyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorICAgIAlyZXR1cm4gIkFFUyI7CisJaWYoZW5jID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uNEVuYWJsZWQpCisgICAgCXJldHVybiAiVEtJUEFFUyI7CisgICAgZWxzZQorICAgIAlyZXR1cm4gIlVOS05PVyI7Cit9CisKK0NIQVIgKkdldEF1dGhNb2RlKENIQVIgYXV0aCkKK3sKKyAgICBpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisgICAgCXJldHVybiAiT1BFTiI7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpCisgICAgCXJldHVybiAiU0hBUkVEIjsKKwlpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpCisgICAgCXJldHVybiAiQVVUT1dFUCI7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgCXJldHVybiAiV1BBIjsKKyAgICBpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykKKyAgICAJcmV0dXJuICJXUEFQU0siOworICAgIGlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKyAgICAJcmV0dXJuICJXUEFOT05FIjsKKyAgICBpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCisgICAgCXJldHVybiAiV1BBMiI7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQorICAgIAlyZXR1cm4gIldQQTJQU0siOworCWlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTIpCisgICAgCXJldHVybiAiV1BBMVdQQTIiOworCWlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0spCisgICAgCXJldHVybiAiV1BBMVBTS1dQQTJQU0siOworCisgICAgCXJldHVybiAiVU5LTk9XIjsKK30KKworI2lmIDEgLy8jaWZuZGVmIFVDT1MKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgR2V0IHNpdGUgc3VydmV5IHJlc3VsdHMKKwlBcmd1bWVudHM6CisJICAgIHBBZGFwdGVyICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJICAgIHdycSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBpb2N0bCBhcmd1bWVudAorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOb25lCisKKyAgICBOb3RlOgorICAgICAgICBVc2FnZToKKyAgICAgICAgCQkxLikgVUkgbmVlZHMgdG8gd2FpdCA0IHNlY29uZHMgYWZ0ZXIgaXNzdWUgYSBzaXRlIHN1cnZleSBjb21tYW5kCisgICAgICAgIAkJMi4pIGl3cHJpdiByYTAgZ2V0X3NpdGVfc3VydmV5CisgICAgICAgIAkJMy4pIFVJIG5lZWRzIHRvIHByZXBhcmUgYXQgbGVhc3QgNDA5NmJ5dGVzIHRvIGdldCB0aGUgcmVzdWx0cworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2RlZmluZQlMSU5FX0xFTgkoNCszMysyMCs4KzEwKzkrNyszKQkvLyBDaGFubmVsK1NTSUQrQnNzaWQrV2VwU3RhdHVzK0F1dGhNb2RlK1NpZ25hbCtXaXJlc3NNb2RlK05ldHdvcmtUeXBlCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCitWT0lEIFJUTVBJb2N0bEdldFNpdGVTdXJ2ZXkoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSkKK3sKKwlDSEFSCQkqbXNnOworCUlOVCAJCWk9MDsKKwlJTlQJCQlXYWl0Q250OworCUlOVCAJCVN0YXR1cz0wOworCUNIQVIJCVNzaWRbTUFYX0xFTl9PRl9TU0lEICsxXTsKKyAgICBJTlQgICAgICAgICBSc3NpID0gMCwgbWF4X2xlbiA9IExJTkVfTEVOOworCVVJTlQgICAgICAgIFJzc2lfUXVhbGl0eSA9IDA7CisJTkRJU184MDJfMTFfTkVUV09SS19UWVBFICAgIHdpcmVsZXNzX21vZGU7CisKKwlvc19hbGxvY19tZW0oTlVMTCwgKFBVQ0hBUiAqKSZtc2csIHNpemVvZihDSEFSKSooKE1BWF9MRU5fT0ZfQlNTX1RBQkxFKSptYXhfbGVuKSk7CisKKwlpZiAobXNnID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QSW9jdGxHZXRTaXRlU3VydmV5IC0gbXNnIG1lbW9yeSBhbGxvYyBmYWlsLlxuIikpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KG1zZywgMCAsKE1BWF9MRU5fT0ZfQlNTX1RBQkxFKSptYXhfbGVuICk7CisJbWVtc2V0KFNzaWQsIDAgLChNQVhfTEVOX09GX1NTSUQgKzEpKTsKKwlzcHJpbnRmKG1zZywiJXMiLCJcbiIpOworCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTRzJS0zM3MlLTIwcyUtOHMlLTEwcyUtOXMlLTdzJS0zc1xuIiwKKwkgICAgIkNoIiwgIlNTSUQiLCAiQlNTSUQiLCAiRW5jIiwgIkF1dGgiLCAiU2lnYW5sKCUpIiwgIlctTW9kZSIsICIgTlQiKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJV2FpdENudCA9IDA7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gVFJVRTsKKwl3aGlsZSAoKFNjYW5SdW5uaW5nKHBBZGFwdGVyKSA9PSBUUlVFKSAmJiAoV2FpdENudCsrIDwgMjAwKSkKKwkJT1NfV0FJVCg1MDApOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJZm9yKGk9MDsgaTxwQWRhcHRlci0+U2NhblRhYi5Cc3NOciA7aSsrKQorCXsKKwkJaWYoIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkNoYW5uZWw9PTApCisJCQlicmVhazsKKworCQlpZigoc3RybGVuKG1zZykrbWF4X2xlbiApID49IElXX1NDQU5fTUFYX0RBVEEpCisJCQlicmVhazsKKworCQkvL0NoYW5uZWwKKwkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtNGQiLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsKTsKKwkJLy9TU0lECisJCW1lbWNweShTc2lkLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkTGVuKTsKKwkJU3NpZFtwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkTGVuXSA9ICdcMCc7CisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTMzcyIsIFNzaWQpOworCQkvL0JTU0lECisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAgICIsCisJCQlwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZFswXSwKKwkJCXBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkWzFdLAorCQkJcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWRbMl0sCisJCQlwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZFszXSwKKwkJCXBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkWzRdLAorCQkJcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWRbNV0pOworCQkvL0VuY3J5cHRpb24gVHlwZQorCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS04cyIsR2V0RW5jcnlwdFR5cGUocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV2VwU3RhdHVzKSk7CisJCS8vQXV0aGVudGljYXRpb24gTW9kZQorCQlpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTBzIiwgIlVOS05PVyIpOworCQllbHNlCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS0xMHMiLEdldEF1dGhNb2RlKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkF1dGhNb2RlKSk7CisJCS8vIFJzc2kKKwkJUnNzaSA9IChJTlQpcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNzaTsKKwkJaWYgKFJzc2kgPj0gLTUwKQorCQkJUnNzaV9RdWFsaXR5ID0gMTAwOworCQllbHNlIGlmIChSc3NpID49IC04MCkgICAgLy8gYmV0d2VlbiAtNTAgfiAtODBkYm0KKwkJCVJzc2lfUXVhbGl0eSA9IChVSU5UKSgyNCArICgoUnNzaSArIDgwKSAqIDI2KS8xMCk7CisJCWVsc2UgaWYgKFJzc2kgPj0gLTkwKSAgIC8vIGJldHdlZW4gLTgwIH4gLTkwZGJtCisJCQlSc3NpX1F1YWxpdHkgPSAoVUlOVCkoKChSc3NpICsgOTApICogMjYpLzEwKTsKKwkJZWxzZSAgICAvLyA8IC04NCBkYm0KKwkJCVJzc2lfUXVhbGl0eSA9IDA7CisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTlkIiwgUnNzaV9RdWFsaXR5KTsKKwkJLy8gV2lyZWxlc3MgTW9kZQorCQl3aXJlbGVzc19tb2RlID0gTmV0d29ya1R5cGVJblVzZVNhbml0eSgmcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0pOworCQlpZiAod2lyZWxlc3NfbW9kZSA9PSBOZGlzODAyXzExRkggfHwKKwkJCXdpcmVsZXNzX21vZGUgPT0gTmRpczgwMl8xMURTKQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtN3MiLCAiMTFiIik7CisJCWVsc2UgaWYgKHdpcmVsZXNzX21vZGUgPT0gTmRpczgwMl8xMU9GRE01KQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtN3MiLCAiMTFhIik7CisJCWVsc2UgaWYgKHdpcmVsZXNzX21vZGUgPT0gTmRpczgwMl8xMU9GRE01X04pCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS03cyIsICIxMWEvbiIpOworCQllbHNlIGlmICh3aXJlbGVzc19tb2RlID09IE5kaXM4MDJfMTFPRkRNMjQpCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS03cyIsICIxMWIvZyIpOworCQllbHNlIGlmICh3aXJlbGVzc19tb2RlID09IE5kaXM4MDJfMTFPRkRNMjRfTikKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTdzIiwgIjExYi9nL24iKTsKKwkJZWxzZQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtN3MiLCAidW5rbm93Iik7CisJCS8vTmV0d29yayBUeXBlCisJCWlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTNzIiwgIiBBZCIpOworCQllbHNlCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS0zcyIsICIgSW4iKTsKKworICAgICAgICBzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiXG4iKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKKwlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgbXNnLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUElvY3RsR2V0U2l0ZVN1cnZleSAtIHdycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKwlvc19mcmVlX21lbShOVUxMLCAoUFVDSEFSKW1zZyk7Cit9CisKKworI2RlZmluZQlNQUNfTElORV9MRU4JKDE0KzQrNCsxMCsxMCsxMCs2KzYpCS8vIEFkZHIrYWlkK3BzbStkYXRhdGltZStyeGJ5dGUrdHhieXRlK2N1cnJlbnQgdHggcmF0ZStsYXN0IHR4IHJhdGUKK1ZPSUQgUlRNUElvY3RsR2V0TWFjVGFibGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gc3RydWN0IGl3cmVxICp3cnEpCit7CisJSU5UIGk7CisJUlRfODAyXzExX01BQ19UQUJMRSBNYWNUYWI7CisJY2hhciAqbXNnOworCisJTWFjVGFiLk51bSA9IDA7CisJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgJiYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uU3N0ID09IFNTVF9BU1NPQykpCisJCXsKKwkJCUNPUFlfTUFDX0FERFIoTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLkFkZHIsICZwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFkZHIpOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLkFpZCA9IChVQ0hBUilwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFpZDsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5Qc20gPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlBzTW9kZTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5NaW1vUHMgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLk1tcHNNb2RlOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkvLyBGaWxsIGluIFJTU0kgcGVyIGVudHJ5CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uQXZnUnNzaTAgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlJzc2lTYW1wbGUuQXZnUnNzaTA7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uQXZnUnNzaTEgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlJzc2lTYW1wbGUuQXZnUnNzaTE7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uQXZnUnNzaTIgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlJzc2lTYW1wbGUuQXZnUnNzaTI7CisKKwkJCS8vIHRoZSBjb25uZWN0ZWQgdGltZSBwZXIgZW50cnkKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5Db25uZWN0ZWRUaW1lID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5TdGFDb25uZWN0VGltZTsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5UeFJhdGUuZmllbGQuTUNTID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLlR4UmF0ZS5maWVsZC5CVyA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLkJXOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLlR4UmF0ZS5maWVsZC5TaG9ydEdJID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSTsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5UeFJhdGUuZmllbGQuU1RCQyA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLlNUQkM7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uVHhSYXRlLmZpZWxkLnJzdiA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLnJzdjsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5UeFJhdGUuZmllbGQuTU9ERSA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLk1PREU7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uVHhSYXRlLndvcmQgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhUUGh5TW9kZS53b3JkOworCisJCQlNYWNUYWIuTnVtICs9IDE7CisJCX0KKwl9CisJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJUXzgwMl8xMV9NQUNfVEFCTEUpOworCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJk1hY1RhYiwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOiBjb3B5X3RvX3VzZXIoKSBmYWlsXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwl9CisKKwltc2cgPSAoQ0hBUiAqKSBrbWFsbG9jKHNpemVvZihDSEFSKSooTUFYX0xFTl9PRl9NQUNfVEFCTEUqTUFDX0xJTkVfTEVOKSwgTUVNX0FMTE9DX0ZMQUcpOworCW1lbXNldChtc2csIDAgLE1BWF9MRU5fT0ZfTUFDX1RBQkxFKk1BQ19MSU5FX0xFTiApOworCXNwcmludGYobXNnLCIlcyIsIlxuIik7CisJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTRzJS00cyUtNHMlLTEwcyUtMTBzJS0xMHMlLTZzJS02c1xuIiwKKwkJIk1BQyIsICJBSUQiLCAiUFNNIiwgIkxEVCIsICJSeEIiLCAiVHhCIiwiQ1R4UiIsICJMVHhSIik7CisKKwlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQorCXsKKwkJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtpXTsKKwkJaWYgKHBFbnRyeS0+VmFsaWRBc0NMSSAmJiAocEVudHJ5LT5Tc3QgPT0gU1NUX0FTU09DKSkKKwkJeworCQkJaWYoKHN0cmxlbihtc2cpK01BQ19MSU5FX0xFTiApID49IChNQVhfTEVOX09GX01BQ19UQUJMRSpNQUNfTElORV9MRU4pICkKKwkJCQlicmVhazsKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggICIsCisJCQkJcEVudHJ5LT5BZGRyWzBdLCBwRW50cnktPkFkZHJbMV0sIHBFbnRyeS0+QWRkclsyXSwKKwkJCQlwRW50cnktPkFkZHJbM10sIHBFbnRyeS0+QWRkcls0XSwgcEVudHJ5LT5BZGRyWzVdKTsKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTRkIiwgKGludClwRW50cnktPkFpZCk7CisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS00ZCIsIChpbnQpcEVudHJ5LT5Qc01vZGUpOworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTBkIiwwLypwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhTQ291bnRlci5MYXN0RGF0YVBhY2tldFRpbWUqLyk7IC8vIFRvRG8KKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTEwZCIsMC8qcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IU0NvdW50ZXIuVG90YWxSeEJ5dGVDb3VudCovKTsgLy8gVG9EbworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTBkIiwwLypwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhTQ291bnRlci5Ub3RhbFR4Qnl0ZUNvdW50Ki8pOyAvLyBUb0RvCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS02ZCIsUmF0ZUlkVG9NYnBzW3BBZC0+TWFjVGFiLkNvbnRlbnRbaV0uQ3VyclR4UmF0ZV0pOworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtNmRcbiIsMC8qUmF0ZUlkVG9NYnBzW3BBZC0+TWFjVGFiLkNvbnRlbnRbaV0uTGFzdFR4UmF0ZV0qLyk7IC8vIFRvRG8KKwkJfQorCX0KKwkvLyBmb3IgY29tcGF0aWJsZSB3aXRoIG9sZCBBUEkganVzdCBkbyB0aGUgcHJpbnRrIHRvIGNvbnNvbGUKKwkvL3dycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihtc2cpOworCS8vaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyIsIG1zZykpOworCX0KKworCWtmcmVlKG1zZyk7Cit9CisjZW5kaWYgLy8gVUNPUyAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitJTlQJU2V0X0JBU2V0dXBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisgICAgVUNIQVIgbWFjWzZdLCB0aWQ7CisJY2hhciAqdG9rZW4sIHNlcFZhbHVlW10gPSAiOiIsIERBU0ggPSAnLSc7CisJSU5UIGk7CisgICAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKy8qCisJVGhlIEJBU2V0dXAgaW51cHQgc3RyaW5nIGZvcm1hdCBzaG91bGQgYmUgeHg6eHg6eHg6eHg6eHg6eHgtZCwKKwkJPT5UaGUgc2l4IDIgZGlnaXQgaGV4LWRlY2ltYWwgbnVtYmVyIHByZXZpb3VzIGFyZSB0aGUgTWFjIGFkZHJlc3MsCisJCT0+VGhlIHNldmVudGggZGVjaW1hbCBudW1iZXIgaXMgdGhlIHRpZCB2YWx1ZS4KKyovCisJLy9wcmludGsoIlxuJXNcbiIsIGFyZyk7CisKKwlpZihzdHJsZW4oYXJnKSA8IDE5KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcgcGx1cyB0aGUgIi0iIGFuZCB0aWQgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCXRpZCA9IHNpbXBsZV9zdHJ0b2woKHRva2VuKzEpLCAwLCAxMCk7CisJCWlmICh0aWQgPiAxNSkKKwkJCXJldHVybiBGQUxTRTsKKworCQkqdG9rZW4gPSAnXDAnOworCQlmb3IgKGkgPSAwLCB0b2tlbiA9IHJzdHJ0b2soYXJnLCAmc2VwVmFsdWVbMF0pOyB0b2tlbjsgdG9rZW4gPSByc3RydG9rKE5VTEwsICZzZXBWYWx1ZVswXSksIGkrKykKKwkJeworCQkJaWYoKHN0cmxlbih0b2tlbikgIT0gMikgfHwgKCFpc3hkaWdpdCgqdG9rZW4pKSB8fCAoIWlzeGRpZ2l0KCoodG9rZW4rMSkpKSkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQlBdG9IKHRva2VuLCAoUFVDSEFSKSgmbWFjW2ldKSwgMSk7CisJCX0KKwkJaWYoaSAhPSA2KQorCQkJcmV0dXJuIEZBTFNFOworCisJCXByaW50aygiXG4lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC0lMDJ4XG4iLCBtYWNbMF0sIG1hY1sxXSwKKwkJCQltYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sIHRpZCk7CisKKwkgICAgcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBtYWMpOworCisgICAgCWlmIChwRW50cnkpIHsKKyAgICAgICAgCXByaW50aygiXG5TZXR1cCBCQSBTZXNzaW9uOiBUaWQgPSAlZFxuIiwgdGlkKTsKKwkgICAgICAgIEJBT3JpU2Vzc2lvblNldFVwKHBBZCwgcEVudHJ5LCB0aWQsIDAsIDEwMCwgVFJVRSk7CisgICAgCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7CisKK30KKworSU5UCVNldF9CQURlY2xpbmVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgYkJBRGVjbGluZTsKKworCWJCQURlY2xpbmUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKGJCQURlY2xpbmUgPT0gMCkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLmJCQURlY2xpbmUgPSBGQUxTRTsKKwl9CisJZWxzZSBpZiAoYkJBRGVjbGluZSA9PSAxKQorCXsKKwkJcEFkLT5Db21tb25DZmcuYkJBRGVjbGluZSA9IFRSVUU7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0JBRGVjbGluZV9Qcm9jOjooQkFEZWNsaW5lPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuYkJBRGVjbGluZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfQkFPcmlUZWFyRG93bl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAgICBVQ0hBUiBtYWNbNl0sIHRpZDsKKwljaGFyICp0b2tlbiwgc2VwVmFsdWVbXSA9ICI6IiwgREFTSCA9ICctJzsKKwlJTlQgaTsKKyAgICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworICAgIC8vcHJpbnRrKCJcbiVzXG4iLCBhcmcpOworLyoKKwlUaGUgQkFPcmlUZWFyRG93biBpbnVwdCBzdHJpbmcgZm9ybWF0IHNob3VsZCBiZSB4eDp4eDp4eDp4eDp4eDp4eC1kLAorCQk9PlRoZSBzaXggMiBkaWdpdCBoZXgtZGVjaW1hbCBudW1iZXIgcHJldmlvdXMgYXJlIHRoZSBNYWMgYWRkcmVzcywKKwkJPT5UaGUgc2V2ZW50aCBkZWNpbWFsIG51bWJlciBpcyB0aGUgdGlkIHZhbHVlLgorKi8KKyAgICBpZihzdHJsZW4oYXJnKSA8IDE5KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcgcGx1cyB0aGUgIi0iIGFuZCB0aWQgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCXRpZCA9IHNpbXBsZV9zdHJ0b2woKHRva2VuKzEpLCAwLCAxMCk7CisJCWlmICh0aWQgPiBOVU1fT0ZfVElEKQorCQkJcmV0dXJuIEZBTFNFOworCisJCSp0b2tlbiA9ICdcMCc7CisJCWZvciAoaSA9IDAsIHRva2VuID0gcnN0cnRvayhhcmcsICZzZXBWYWx1ZVswXSk7IHRva2VuOyB0b2tlbiA9IHJzdHJ0b2soTlVMTCwgJnNlcFZhbHVlWzBdKSwgaSsrKQorCQl7CisJCQlpZigoc3RybGVuKHRva2VuKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp0b2tlbikpIHx8ICghaXN4ZGlnaXQoKih0b2tlbisxKSkpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCUF0b0godG9rZW4sIChQVUNIQVIpKCZtYWNbaV0pLCAxKTsKKwkJfQorCQlpZihpICE9IDYpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkgICAgcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LSUwMngiLCBtYWNbMF0sIG1hY1sxXSwKKwkgICAgICAgICAgIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSwgdGlkKTsKKworCSAgICBwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIG1hYyk7CisKKwkgICAgaWYgKHBFbnRyeSkgeworCSAgICAgICAgcHJpbnRrKCJcblRlYXIgZG93biBPcmkgQkEgU2Vzc2lvbjogVGlkID0gJWRcbiIsIHRpZCk7CisgICAgICAgIEJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZCwgcEVudHJ5LT5BaWQsIHRpZCwgRkFMU0UsIFRSVUUpOworCSAgICB9CisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworCit9CisKK0lOVAlTZXRfQkFSZWNUZWFyRG93bl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAgICBVQ0hBUiBtYWNbNl0sIHRpZDsKKwljaGFyICp0b2tlbiwgc2VwVmFsdWVbXSA9ICI6IiwgREFTSCA9ICctJzsKKwlJTlQgaTsKKyAgICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworICAgIC8vcHJpbnRrKCJcbiVzXG4iLCBhcmcpOworLyoKKwlUaGUgQkFSZWNUZWFyRG93biBpbnVwdCBzdHJpbmcgZm9ybWF0IHNob3VsZCBiZSB4eDp4eDp4eDp4eDp4eDp4eC1kLAorCQk9PlRoZSBzaXggMiBkaWdpdCBoZXgtZGVjaW1hbCBudW1iZXIgcHJldmlvdXMgYXJlIHRoZSBNYWMgYWRkcmVzcywKKwkJPT5UaGUgc2V2ZW50aCBkZWNpbWFsIG51bWJlciBpcyB0aGUgdGlkIHZhbHVlLgorKi8KKyAgICBpZihzdHJsZW4oYXJnKSA8IDE5KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcgcGx1cyB0aGUgIi0iIGFuZCB0aWQgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCXRpZCA9IHNpbXBsZV9zdHJ0b2woKHRva2VuKzEpLCAwLCAxMCk7CisJCWlmICh0aWQgPiBOVU1fT0ZfVElEKQorCQkJcmV0dXJuIEZBTFNFOworCisJCSp0b2tlbiA9ICdcMCc7CisJCWZvciAoaSA9IDAsIHRva2VuID0gcnN0cnRvayhhcmcsICZzZXBWYWx1ZVswXSk7IHRva2VuOyB0b2tlbiA9IHJzdHJ0b2soTlVMTCwgJnNlcFZhbHVlWzBdKSwgaSsrKQorCQl7CisJCQlpZigoc3RybGVuKHRva2VuKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp0b2tlbikpIHx8ICghaXN4ZGlnaXQoKih0b2tlbisxKSkpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCUF0b0godG9rZW4sIChQVUNIQVIpKCZtYWNbaV0pLCAxKTsKKwkJfQorCQlpZihpICE9IDYpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LSUwMngiLCBtYWNbMF0sIG1hY1sxXSwKKwkJICAgICAgIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSwgdGlkKTsKKworCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIG1hYyk7CisKKwkJaWYgKHBFbnRyeSkgeworCQkgICAgcHJpbnRrKCJcblRlYXIgZG93biBSZWMgQkEgU2Vzc2lvbjogVGlkID0gJWRcbiIsIHRpZCk7CisJCSAgICBCQVJlY1Nlc3Npb25UZWFyRG93bihwQWQsIHBFbnRyeS0+QWlkLCB0aWQsIEZBTFNFKTsKKwkJfQorCisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKKworfQorCitJTlQJU2V0X0h0QndfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgSHRCdzsKKworCUh0QncgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChIdEJ3ID09IEJXXzQwKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgID0gQldfNDA7CisJZWxzZSBpZiAoSHRCdyA9PSBCV18yMCkKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzIwOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0QndfUHJvYzo6KEh0Qnc9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0TWNzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIEh0TWNzLCBNY3NfdG1wOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgIEJPT0xFQU4gYkF1dG9SYXRlID0gRkFMU0U7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlNY3NfdG1wID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChNY3NfdG1wIDw9IDE1IHx8IE1jc190bXAgPT0gMzIpCisJCUh0TWNzID0gTWNzX3RtcDsKKwllbHNlCisJCUh0TWNzID0gTUNTX0FVVE87CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBIdE1jczsKKwkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSAoSHRNY3MgPT0gTUNTX0FVVE8pID8gVFJVRTpGQUxTRTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0TWNzX1Byb2M6OihIdE1jcz0lZCwgYkF1dG9UeFJhdGVTd2l0Y2ggPSAlZClcbiIsCisJCQkJCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUywgcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2gpKTsKKworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPCBQSFlfMTFBQkdOX01JWEVEKSB8fAorCQkJKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPCBNT0RFX0hUTUlYKSkKKwkJeworCSAgICAgICAgaWYgKChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyAhPSBNQ1NfQVVUTykgJiYKKwkJCQkoSHRNY3MgPj0gMCAmJiBIdE1jcyA8PSAzKSAmJgorCSAgICAgICAgICAgIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlID09IEZJWEVEX1RYTU9ERV9DQ0spKQorCQkJeworCQkJCVJUTVBTZXREZXNpcmVkUmF0ZXMocEFkLCAoTE9ORykgKFJhdGVJZFRvTWJwc1tIdE1jc10gKiAxMDAwMDAwKSk7CisJCQl9CisJICAgICAgICBlbHNlIGlmICgocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgIT0gTUNTX0FVVE8pICYmCisJCQkJCShIdE1jcyA+PSAwICYmIEh0TWNzIDw9IDcpICYmCisJICAgICAgICAgICAgCShwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlID09IEZJWEVEX1RYTU9ERV9PRkRNKSkKKwkJCXsKKwkJCQlSVE1QU2V0RGVzaXJlZFJhdGVzKHBBZCwgKExPTkcpIChSYXRlSWRUb01icHNbSHRNY3MrNF0gKiAxMDAwMDAwKSk7CisJCQl9CisJCQllbHNlCisJCQkJYkF1dG9SYXRlID0gVFJVRTsKKworCQkJaWYgKGJBdXRvUmF0ZSkKKwkJCXsKKwkgICAgICAgICAgICBwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU19BVVRPOworCQkJCVJUTVBTZXREZXNpcmVkUmF0ZXMocEFkLCAtMSk7CisJCQl9CisJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRNY3NfUHJvYzo6KEZpeGVkVHhNb2RlPSVkKVxuIixwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlKSk7CisJCX0KKyAgICAgICAgaWYgKEFESE9DX09OKHBBZCkpCisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlTZXRDb21tb25IVChwQWQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRHaV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBIdEdpOworCisJSHRHaSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoIEh0R2kgPT0gR0lfNDAwKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSA9IEdJXzQwMDsKKwllbHNlIGlmICggSHRHaSA9PSBHSV84MDAgKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0R2lfUHJvYzo6KFNob3J0R0k9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitJTlQJU2V0X0h0VHhCQVNpemVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUNIQVIgU2l6ZTsKKworCVNpemUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKFNpemUgPD0wIHx8IFNpemUgPj02NCkKKwl7CisJCVNpemUgPSA4OworCX0KKwlwQWQtPkNvbW1vbkNmZy5UeEJBU2l6ZSA9IFNpemUtMTsKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfSHRUeEJBU2l6ZSA6OihUeEJBU2l6ZT0gJWQpXG4iLCBTaXplKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitJTlQJU2V0X0h0T3BNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoVmFsdWUgPT0gSFRNT0RFX0dGKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuSFRNT0RFICA9IEhUTU9ERV9HRjsKKwllbHNlIGlmICggVmFsdWUgPT0gSFRNT0RFX01NICkKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSAgPSBIVE1PREVfTU07CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdE9wTW9kZV9Qcm9jOjooSHRPcE1vZGU9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1PREUpKTsKKworCXJldHVybiBUUlVFOworCit9CisKK0lOVAlTZXRfSHRTdGJjX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoVmFsdWUgPT0gU1RCQ19VU0UpCisJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TVEJDID0gU1RCQ19VU0U7CisJZWxzZSBpZiAoIFZhbHVlID09IFNUQkNfTk9ORSApCisJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAvL0ludmFsaWQgYXJndW1lbnQKKworCVNldENvbW1vbkhUKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfU3RiY19Qcm9jOjooSHRTdGJjPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQykpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRIdGNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoVmFsdWUgPT0gMCkKKwkJcEFkLT5IVENFbmFibGUgPSBGQUxTRTsKKwllbHNlIGlmICggVmFsdWUgPT0xICkKKyAgICAgICAgCXBBZC0+SFRDRW5hYmxlID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRIdGNfUHJvYzo6KEh0SHRjPSVkKVxuIixwQWQtPkhUQ0VuYWJsZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRFeHRjaGFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBICA9IEVYVENIQV9CRUxPVzsKKwllbHNlIGlmICggVmFsdWUgPT0xICkKKyAgICAgICAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9BQk9WRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0RXh0Y2hhX1Byb2M6OihIdEV4dGNoYT0lZClcbiIscEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRNcGR1RGVuc2l0eV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChWYWx1ZSA8PTcgJiYgVmFsdWUgPj0gMCkKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gVmFsdWU7CisJZWxzZQorCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkgPSA0OworCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdE1wZHVEZW5zaXR5X1Byb2M6OihIdE1wZHVEZW5zaXR5PSVkKVxuIixwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0QmFXaW5TaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisKKwlpZiAoVmFsdWUgPj0xICYmIFZhbHVlIDw9IDY0KQorCXsKKwkJcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IFZhbHVlOworCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gVmFsdWU7CisJfQorCWVsc2UKKwl7CisgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSA2NDsKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDY0OworCX0KKworCVNldENvbW1vbkhUKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRCYVdpblNpemVfUHJvYzo6KEh0QmFXaW5TaXplPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0KSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9IdFJkZ19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5iUmRnID0gRkFMU0U7CisJZWxzZSBpZiAoIFZhbHVlID09MSApCisJeworCQlwQWQtPkhUQ0VuYWJsZSA9IFRSVUU7CisgICAgICAgIAlwQWQtPkNvbW1vbkNmZy5iUmRnID0gVFJVRTsKKwl9CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdFJkZ19Qcm9jOjooSHRSZGc9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLmJSZGcpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0TGlua0FkYXB0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPmJMaW5rQWRhcHQgPSBGQUxTRTsKKwllbHNlIGlmICggVmFsdWUgPT0xICkKKwl7CisJCQlwQWQtPkhUQ0VuYWJsZSA9IFRSVUU7CisJCQlwQWQtPmJMaW5rQWRhcHQgPSBUUlVFOworCX0KKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRMaW5rQWRhcHRfUHJvYzo6KEh0TGlua0FkYXB0PSVkKVxuIixwQWQtPmJMaW5rQWRhcHQpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0QW1zZHVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSA9IEZBTFNFOworCWVsc2UgaWYgKCBWYWx1ZSA9PSAxICkKKyAgICAgICAgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0QW1zZHVfUHJvYzo6KEh0QW1zZHU9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRBdXRvQmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gRkFMU0U7CisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBCQV9OT1RVU0U7CisJfQorICAgICAgICBlbHNlIGlmIChWYWx1ZSA9PSAxKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IFRSVUU7CisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBJTU1FRF9CQTsKKwl9CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisgICAgcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkE7CisgICAgcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSA9IHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3k7CisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdEF1dG9CYV9Qcm9jOjooSHRBdXRvQmE9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEpKTsKKworCXJldHVybiBUUlVFOworCit9CisKK0lOVAlTZXRfSHRQcm90ZWN0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0ID0gRkFMU0U7CisgICAgZWxzZSBpZiAoVmFsdWUgPT0gMSkKKwkJcEFkLT5Db21tb25DZmcuYkhUUHJvdGVjdCA9IFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0UHJvdGVjdF9Qcm9jOjooSHRQcm90ZWN0PSVkKVxuIixwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0KSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9TZW5kUFNNUEFjdGlvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAgICBVQ0hBUiBtYWNbNl0sIG1vZGU7CisJY2hhciAqdG9rZW4sIHNlcFZhbHVlW10gPSAiOiIsIERBU0ggPSAnLSc7CisJSU5UIGk7CisgICAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKyAgICAvL3ByaW50aygiXG4lc1xuIiwgYXJnKTsKKy8qCisJVGhlIEJBUmVjVGVhckRvd24gaW51cHQgc3RyaW5nIGZvcm1hdCBzaG91bGQgYmUgeHg6eHg6eHg6eHg6eHg6eHgtZCwKKwkJPT5UaGUgc2l4IDIgZGlnaXQgaGV4LWRlY2ltYWwgbnVtYmVyIHByZXZpb3VzIGFyZSB0aGUgTWFjIGFkZHJlc3MsCisJCT0+VGhlIHNldmVudGggZGVjaW1hbCBudW1iZXIgaXMgdGhlIG1vZGUgdmFsdWUuCisqLworICAgIGlmKHN0cmxlbihhcmcpIDwgMTkpICAvL01hYyBhZGRyZXNzIGFjY2VwdGFibGUgZm9ybWF0IDAxOjAyOjAzOjA0OjA1OjA2IGxlbmd0aCAxNyBwbHVzIHRoZSAiLSIgYW5kIG1vZGUgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworICAgCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCW1vZGUgPSBzaW1wbGVfc3RydG9sKCh0b2tlbisxKSwgMCwgMTApOworCQlpZiAobW9kZSA+IE1NUFNfRU5BQkxFKQorCQkJcmV0dXJuIEZBTFNFOworCisJCSp0b2tlbiA9ICdcMCc7CisJCWZvciAoaSA9IDAsIHRva2VuID0gcnN0cnRvayhhcmcsICZzZXBWYWx1ZVswXSk7IHRva2VuOyB0b2tlbiA9IHJzdHJ0b2soTlVMTCwgJnNlcFZhbHVlWzBdKSwgaSsrKQorCQl7CisJCQlpZigoc3RybGVuKHRva2VuKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp0b2tlbikpIHx8ICghaXN4ZGlnaXQoKih0b2tlbisxKSkpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCUF0b0godG9rZW4sIChQVUNIQVIpKCZtYWNbaV0pLCAxKTsKKwkJfQorCQlpZihpICE9IDYpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LSUwMngiLCBtYWNbMF0sIG1hY1sxXSwKKwkJICAgICAgIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSwgbW9kZSk7CisKKwkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBtYWMpOworCisJCWlmIChwRW50cnkpIHsKKwkJICAgIHByaW50aygiXG5TZW5kUFNNUEFjdGlvbiBNSVBTIG1vZGUgPSAlZFxuIiwgbW9kZSk7CisJCSAgICBTZW5kUFNNUEFjdGlvbihwQWQsIHBFbnRyeS0+QWlkLCBtb2RlKTsKKwkJfQorCisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKKworCit9CisKK0lOVAlTZXRfSHRNSU1PUFNtb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKFZhbHVlIDw9MyAmJiBWYWx1ZSA+PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUgPSBWYWx1ZTsKKwllbHNlCisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSA9IDM7CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0TUlNT1BTbW9kZV9Qcm9jOjooTUlNT1BTIG1vZGU9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworSU5UCVNldF9Gb3JjZVNob3J0R0lfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+V0lGSXRlc3RiZWQuYlNob3J0R0kgPSBGQUxTRTsKKwllbHNlIGlmIChWYWx1ZSA9PSAxKQorCQlwQWQtPldJRkl0ZXN0YmVkLmJTaG9ydEdJID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0ZvcmNlU2hvcnRHSV9Qcm9jOjooRm9yY2VTaG9ydEdJPSVkKVxuIiwgcEFkLT5XSUZJdGVzdGJlZC5iU2hvcnRHSSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworCitJTlQJU2V0X0ZvcmNlR0ZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+V0lGSXRlc3RiZWQuYkdyZWVuRmllbGQgPSBGQUxTRTsKKwllbHNlIGlmIChWYWx1ZSA9PSAxKQorCQlwQWQtPldJRkl0ZXN0YmVkLmJHcmVlbkZpZWxkID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0ZvcmNlR0ZfUHJvYzo6KEZvcmNlR0Y9JWQpXG4iLCBwQWQtPldJRkl0ZXN0YmVkLmJHcmVlbkZpZWxkKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9IdE1pbW9Qc19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoVmFsdWUgPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYk1JTU9QU0VuYWJsZSA9IEZBTFNFOworCWVsc2UgaWYgKFZhbHVlID09IDEpCisJCXBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUgPSBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAvL0ludmFsaWQgYXJndW1lbnQKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdE1pbW9Qc19Qcm9jOjooSHRNaW1vUHM9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK0lOVAlTZXRDb21tb25IVCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlPSURfU0VUX0hUX1BIWU1PREUJCVNldEhUOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPCBQSFlfMTFBQkdOX01JWEVEKQorCQlyZXR1cm4gRkFMU0U7CisKKwlTZXRIVC5QaHlNb2RlID0gcEFkLT5Db21tb25DZmcuUGh5TW9kZTsKKwlTZXRIVC5UcmFuc21pdE5vID0gKChVQ0hBUilwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoKTsKKwlTZXRIVC5IdE1vZGUgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERTsKKwlTZXRIVC5FeHRPZmZzZXQgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQTsKKwlTZXRIVC5NQ1MgPSBNQ1NfQVVUTzsKKwlTZXRIVC5CVyA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlc7CisJU2V0SFQuU1RCQyA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQzsKKwlTZXRIVC5TSE9SVEdJID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJOworCisJUlRNUFNldEhUKHBBZCwgJlNldEhUKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitJTlQJU2V0X0ZpeGVkVHhNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVDSEFSCWZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0hUOworCisJaWYgKHN0cmNtcChhcmcsICJPRkRNIikgPT0gMCB8fCBzdHJjbXAoYXJnLCAib2ZkbSIpID09IDApCisJeworCQlmaXhfdHhfbW9kZSA9IEZJWEVEX1RYTU9ERV9PRkRNOworCX0KKwllbHNlIGlmIChzdHJjbXAoYXJnLCAiQ0NLIikgPT0gMCB8fCBzdHJjbXAoYXJnLCAiY2NrIikgPT0gMCkKKwl7CisgICAgICAgIGZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0NDSzsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlID0gZml4X3R4X21vZGU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfRml4ZWRUeE1vZGVfUHJvYzo6KEZpeGVkVHhNb2RlPSVkKVxuIiwgZml4X3R4X21vZGUpKTsKKworCXJldHVybiBUUlVFOworfQorCisjaWZkZWYgQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQKK0lOVAlTZXRfT3BNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisjaWZkZWYgUlQyODcwCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkpCisjZW5kaWYgLy8gUlQyODcwIC8vCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJDYW4gbm90IHN3aXRjaCBvcGVyYXRlIG1vZGUgb24gaW50ZXJmYWNlIHVwICEhIFxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+T3BNb2RlID0gT1BNT0RFX1NUQTsKKwllbHNlIGlmIChWYWx1ZSA9PSAxKQorCQlwQWQtPk9wTW9kZSA9IE9QTU9ERV9BUDsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfT3BNb2RlX1Byb2M6OihPcE1vZGU9JXMpXG4iLCBwQWQtPk9wTW9kZSA9PSAxID8gIkFQIE1vZGUiIDogIlNUQSBNb2RlIikpOworCisJcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitQQ0hBUiAgIFJUTVBHZXRSYWxpbmtBdXRoTW9kZVN0cigKKyAgICBJTiAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSBhdXRoTW9kZSkKK3sKKwlzd2l0Y2goYXV0aE1vZGUpCisJeworCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZU9wZW46CisJCQlyZXR1cm4gIk9QRU4iOworICAgICAgICBkZWZhdWx0OgorCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSzoKKwkJCXJldHVybiAiV1BBUFNLIjsKKwkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQ6CisJCQlyZXR1cm4gIlNIQVJFRCI7CisJCWNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBOgorCQkJcmV0dXJuICJXUEEiOworCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI6CisJCQlyZXR1cm4gIldQQTIiOworCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s6CisJCQlyZXR1cm4gIldQQTJQU0siOworICAgICAgICBjYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFQU0tXUEEyUFNLOgorCQkJcmV0dXJuICJXUEFQU0tXUEEyUFNLIjsKKyAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExV1BBMjoKKwkJCXJldHVybiAiV1BBMVdQQTIiOworCX0KK30KKworUENIQVIgICBSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKAorICAgIElOICBVU0hPUlQgZW5jcnlNb2RlKQoreworCXN3aXRjaChlbmNyeU1vZGUpCisJeworCSAgICBkZWZhdWx0OgorCQljYXNlIE5kaXM4MDJfMTFXRVBEaXNhYmxlZDoKKwkJCXJldHVybiAiTk9ORSI7CisJCWNhc2UgTmRpczgwMl8xMVdFUEVuYWJsZWQ6CisJCQlyZXR1cm4gIldFUCI7CisJCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDoKKwkJCXJldHVybiAiVEtJUCI7CisJCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDoKKwkJCXJldHVybiAiQUVTIjsKKyAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjRFbmFibGVkOgorCQkJcmV0dXJuICJUS0lQQUVTIjsKKwl9Cit9CisKK0lOVCBSVE1QU2hvd0NmZ1ZhbHVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBOYW1lLAorCUlOCVBVQ0hBUgkJCXBCdWYpCit7CisJSU5UCVN0YXR1cyA9IDA7CisKKwlmb3IgKFBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MgPSBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0M7IFBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MtPm5hbWU7IFBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MrKykKKwl7CisJCWlmICghc3RyY21wKHBOYW1lLCBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DLT5uYW1lKSkKKwkJeworCQkJaWYoUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQy0+c2hvd19wcm9jKHBBZCwgcEJ1ZikpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWJyZWFrOyAgLy9FeGl0IGZvciBsb29wLgorCQl9CisJfQorCisJaWYoUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQy0+bmFtZSA9PSBOVUxMKQorCXsKKwkJc3ByaW50ZihwQnVmLCAiXG4iKTsKKwkJZm9yIChQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DID0gUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DOyBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DLT5uYW1lOyBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DKyspCisJCQlzcHJpbnRmKHBCdWYsICIlcyVzXG4iLCBwQnVmLCBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DLT5uYW1lKTsKKwl9CisKKwlyZXR1cm4gU3RhdHVzOworfQorCitJTlQJU2hvd19TU0lEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuU3NpZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X1dpcmVsZXNzTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXN3aXRjaChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKQorCXsKKwkJY2FzZSBQSFlfMTFCR19NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFCL0ciKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUI6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQiIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQToKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFBIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFBQkdfTUlYRUQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQS9CL0ciKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUc6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExRyIpOworCQkJYnJlYWs7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExQUJHTl9NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFBL0IvRy9OIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFOXzJfNEc6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExTiBvbmx5IHdpdGggMi40RyIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExR05fTUlYRUQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExRy9OIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFBTl9NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFBL04iKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUJHTl9NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFCL0cvTiIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMUEvRy9OIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFOXzVHOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMU4gb25seSB3aXRoIDVHIik7CisJCQlicmVhazsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCVkKSIsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpOworCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisKK0lOVAlTaG93X1R4QnVyc3RfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgPyAiVFJVRSI6IkZBTFNFIik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X1R4UHJlYW1ibGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSkKKwl7CisJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZVNob3J0OgorCQkJc3ByaW50ZihwQnVmLCAiXHRTaG9ydCIpOworCQkJYnJlYWs7CisJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZUxvbmc6CisJCQlzcHJpbnRmKHBCdWYsICJcdExvbmciKTsKKwkJCWJyZWFrOworCQljYXNlIFJ0ODAyXzExUHJlYW1ibGVBdXRvOgorCQkJc3ByaW50ZihwQnVmLCAiXHRBdXRvIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCVsdSkiLCBwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitJTlQJU2hvd19UeFBvd2VyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlbHUiLCBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0NoYW5uZWxfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVkIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0JHUHJvdGVjdGlvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXN3aXRjaChwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24pCisJeworCQljYXNlIDE6IC8vQWx3YXlzIE9uCisJCQlzcHJpbnRmKHBCdWYsICJcdE9OIik7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvL0Fsd2F5cyBPRkYKKwkJCXNwcmludGYocEJ1ZiwgIlx0T0ZGIik7CisJCQlicmVhazsKKwkJY2FzZSAwOiAvL0FVVE8KKwkJCXNwcmludGYocEJ1ZiwgIlx0QXV0byIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSglbHUpIiwgcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfUlRTVGhyZXNob2xkX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0ZyYWdUaHJlc2hvbGRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCV1IiwgcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQpOworCXJldHVybiAwOworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitJTlQJU2hvd19IdEJ3X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCkKKwl7CisJCXNwcmludGYocEJ1ZiwgIlx0NDAgTUh6Iik7CisJfQorCWVsc2UKKwl7CisgICAgICAgIHNwcmludGYocEJ1ZiwgIlx0MjAgTUh6Iik7CisJfQorCXJldHVybiAwOworfQorCitJTlQJU2hvd19IdE1jc19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRHaV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXN3aXRjaChwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSkKKwl7CisJCWNhc2UgR0lfNDAwOgorCQkJc3ByaW50ZihwQnVmLCAiXHRHSV80MDAiKTsKKwkJCWJyZWFrOworCQljYXNlIEdJXzgwMDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0R0lfODAwIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCV1KSIsIHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRPcE1vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSkKKwl7CisJCWNhc2UgSFRNT0RFX0dGOgorCQkJc3ByaW50ZihwQnVmLCAiXHRHRiIpOworCQkJYnJlYWs7CisJCWNhc2UgSFRNT0RFX01NOgorCQkJc3ByaW50ZihwQnVmLCAiXHRNTSIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSgldSkiLCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuSFRNT0RFKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRFeHRjaGFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSkKKwl7CisJCWNhc2UgRVhUQ0hBX0JFTE9XOgorCQkJc3ByaW50ZihwQnVmLCAiXHRCZWxvdyIpOworCQkJYnJlYWs7CisJCWNhc2UgRVhUQ0hBX0FCT1ZFOgorCQkJc3ByaW50ZihwQnVmLCAiXHRBYm92ZSIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSgldSkiLCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworCitJTlQJU2hvd19IdE1wZHVEZW5zaXR5X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eSk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0h0QmFXaW5TaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19IdFJkZ19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBwQWQtPkNvbW1vbkNmZy5iUmRnID8gIlRSVUUiOiJGQUxTRSIpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19IdEFtc2R1X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSA/ICJUUlVFIjoiRkFMU0UiKTsKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRBdXRvQmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA/ICJUUlVFIjoiRkFMU0UiKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworSU5UCVNob3dfQ291bnRyeVJlZ2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JWQiLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uKTsKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlZCIsIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCk7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0NvdW50cnlDb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKK0lOVAlTaG93X1BrdEFnZ3JlZ2F0ZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlID8gIlRSVUUiOiJGQUxTRSIpOworCXJldHVybiAwOworfQorI2VuZGlmIC8vIEFHR1JFR0FUSU9OX1NVUFBPUlQgLy8KKworI2lmZGVmIFdNTV9TVVBQT1JUCitJTlQJU2hvd19XbW1DYXBhYmxlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPyAiVFJVRSI6IkZBTFNFIik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBXTU1fU1VQUE9SVCAvLworCitJTlQJU2hvd19JRUVFODAyMTFIX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID8gIlRSVUUiOiJGQUxTRSIpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitJTlQJU2hvd19OZXR3b3JrVHlwZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXN3aXRjaChwQWQtPlN0YUNmZy5Cc3NUeXBlKQorCXsKKwkJY2FzZSBCU1NfQURIT0M6CisJCQlzcHJpbnRmKHBCdWYsICJcdEFkaG9jIik7CisJCQlicmVhazsKKwkJY2FzZSBCU1NfSU5GUkE6CisJCQlzcHJpbnRmKHBCdWYsICJcdEluZnJhIik7CisJCQlicmVhazsKKwkJY2FzZSBCU1NfQU5ZOgorCQkJc3ByaW50ZihwQnVmLCAiXHRBbnkiKTsKKwkJCWJyZWFrOworCQljYXNlIEJTU19NT05JVE9SOgorCQkJc3ByaW50ZihwQnVmLCAiXHRNb25pdG9yIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCVkKSIsIHBBZC0+U3RhQ2ZnLkJzc1R5cGUpOworCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitJTlQJU2hvd19BdXRoTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJQXV0aE1vZGUgPSBwQWQtPlN0YUNmZy5BdXRoTW9kZTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmICgoQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbikgJiYKKwkJKEF1dGhNb2RlIDw9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFQU0tXUEEyUFNLKSkKKwkJc3ByaW50ZihwQnVmLCAiXHQlcyIsIFJUTVBHZXRSYWxpbmtBdXRoTW9kZVN0cihBdXRoTW9kZSkpOworCWVsc2UKKwkJc3ByaW50ZihwQnVmLCAiXHRVbmtub3cgVmFsdWUoJWQpIiwgQXV0aE1vZGUpOworCisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0VuY3J5cFR5cGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlORElTXzgwMl8xMV9XRVBfU1RBVFVTCVdlcFN0YXR1cyA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCVdlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmICgoV2VwU3RhdHVzID49IE5kaXM4MDJfMTFXRVBFbmFibGVkKSAmJgorCQkoV2VwU3RhdHVzIDw9IE5kaXM4MDJfMTFFbmNyeXB0aW9uNEtleUFic2VudCkpCisJCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKFdlcFN0YXR1cykpOworCWVsc2UKKwkJc3ByaW50ZihwQnVmLCAiXHRVbmtub3cgVmFsdWUoJWQpIiwgV2VwU3RhdHVzKTsKKworCXJldHVybiAwOworfQorCitJTlQJU2hvd19EZWZhdWx0S2V5SURfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlVQ0hBUiBEZWZhdWx0S2V5SWQgPSAwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJRGVmYXVsdEtleUlkID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJc3ByaW50ZihwQnVmLCAiXHQlZCIsIERlZmF1bHRLZXlJZCk7CisKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfV2VwS2V5X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIElOVAkJCQlLZXlJZHgsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJVUNIQVIgICBLZXlbMTZdID0gezB9LCBLZXlMZW5ndGggPSAwOworCUlOVAkJaW5kZXggPSBCU1MwOworCisJS2V5TGVuZ3RoID0gcEFkLT5TaGFyZWRLZXlbaW5kZXhdW0tleUlkeF0uS2V5TGVuOworCU5kaXNNb3ZlTWVtb3J5KEtleSwgcEFkLT5TaGFyZWRLZXlbaW5kZXhdW0tleUlkeF0uS2V5LCBLZXlMZW5ndGgpOworCisJLy9jaGVjayBrZXkgc3RyaW5nIGlzIEFTQ0lJIG9yIG5vdAorICAgIGlmIChSVE1QQ2hlY2tTdHJQcmludEFibGUoS2V5LCBLZXlMZW5ndGgpKQorICAgICAgICBzcHJpbnRmKHBCdWYsICJcdCVzIiwgS2V5KTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgaWR4OworICAgICAgICBzcHJpbnRmKHBCdWYsICJcdCIpOworICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IEtleUxlbmd0aDsgaWR4KyspCisgICAgICAgICAgICBzcHJpbnRmKHBCdWYrc3RybGVuKHBCdWYpLCAiJTAyWCIsIEtleVtpZHhdKTsKKyAgICB9CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0tleTFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlTaG93X1dlcEtleV9Qcm9jKHBBZCwgMCwgcEJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0tleTJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlTaG93X1dlcEtleV9Qcm9jKHBBZCwgMSwgcEJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0tleTNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlTaG93X1dlcEtleV9Qcm9jKHBBZCwgMiwgcEJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0tleTRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlTaG93X1dlcEtleV9Qcm9jKHBBZCwgMywgcEJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X1dQQVBTS19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCUlOVCAJaWR4OworCVVDSEFSCVBNS1szMl0gPSB7MH07CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCU5kaXNNb3ZlTWVtb3J5KFBNSywgcEFkLT5TdGFDZmcuUE1LLCAzMik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyAgICBzcHJpbnRmKHBCdWYsICJcdFBNSyA9ICIpOworICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgMzI7IGlkeCsrKQorICAgICAgICBzcHJpbnRmKHBCdWYrc3RybGVuKHBCdWYpLCAiJTAyWCIsIFBNS1tpZHhdKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fc2FuaXR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fc2FuaXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExOGRmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9zYW5pdHkuYwpAQCAtMCwwICsxLDE2NjkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJc2FuaXR5LmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huIENoYW5nICAyMDA0LTA5LTAxICAgICAgYWRkIFdNTSBzdXBwb3J0CisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisKK2V4dGVybiBVQ0hBUglDSVNDT19PVUlbXTsKKworZXh0ZXJuIFVDSEFSCVdQQV9PVUlbXTsKK2V4dGVybiBVQ0hBUglSU05fT1VJW107CitleHRlcm4gVUNIQVIJV01FX0lORk9fRUxFTVtdOworZXh0ZXJuIFVDSEFSCVdNRV9QQVJNX0VMRU1bXTsKK2V4dGVybiBVQ0hBUglDY3gyUW9zSW5mb1tdOworZXh0ZXJuIFVDSEFSCVJBTElOS19PVUlbXTsKK2V4dGVybiBVQ0hBUglCUk9BRENPTV9PVUlbXTsKK2V4dGVybiBVQ0hBUiAgICBXUFNfT1VJW107CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1sbWVBZGRCQVJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyKQoreworICAgIFBNTE1FX0FEREJBX1JFUV9TVFJVQ1QgICBwSW5mbzsKKworICAgIHBJbmZvID0gKE1MTUVfQUREQkFfUkVRX1NUUlVDVCAqKU1zZzsKKworICAgIGlmICgoTXNnTGVuICE9IHNpemVvZihNTE1FX0FEREJBX1JFUV9TVFJVQ1QpKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVBZGRCQVJlcVNhbml0eSBmYWlsIC0gbWVzc2FnZSBsZW5naHQgbm90IGNvcnJlY3QuXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoKHBJbmZvLT5XY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVBZGRCQVJlcVNhbml0eSBmYWlsIC0gVGhlIHBlZXIgTWFjIGlzIG5vdCBhc3NvY2lhdGVkIHlldC5cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCS8qCisgICAgaWYgKChwSW5mby0+QmFCdWZTaXplID4gTUFYX1JYX1JFT1JERVJCVUYpIHx8IChwSW5mby0+QmFCdWZTaXplIDwgMikpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lQWRkQkFSZXFTYW5pdHkgZmFpbCAtIFJ4IFJlb3JkZXJpbmcgYnVmZmVyIHRvbyBiaWcgb3IgdG9vIHNtYWxsXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisJKi8KKworICAgIGlmICgocEluZm8tPnBBZGRyWzBdJjB4MDEpID09IDB4MDEpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lQWRkQkFSZXFTYW5pdHkgZmFpbCAtIGJyb2FkY2FzdCBhZGRyZXNzIG5vdCBzdXBwb3J0IEJBXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWxtZURlbEJBUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4pCit7CisJTUxNRV9ERUxCQV9SRVFfU1RSVUNUICpwSW5mbzsKKwlwSW5mbyA9IChNTE1FX0RFTEJBX1JFUV9TVFJVQ1QgKilNc2c7CisKKyAgICBpZiAoKE1zZ0xlbiAhPSBzaXplb2YoTUxNRV9ERUxCQV9SRVFfU1RSVUNUKSkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJNbG1lRGVsQkFSZXFTYW5pdHkgZmFpbCAtIG1lc3NhZ2UgbGVuZ2h0IG5vdCBjb3JyZWN0LlxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKChwSW5mby0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJNbG1lRGVsQkFSZXFTYW5pdHkgZmFpbCAtIFRoZSBwZWVyIE1hYyBpcyBub3QgYXNzb2NpYXRlZCB5ZXQuXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoKHBJbmZvLT5USUQgJiAweGYwKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1sbWVEZWxCQVJlcVNhbml0eSBmYWlsIC0gVGhlIHBlZXIgVElEIGlzIGluY29ycmVjdC5cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCWlmIChOZGlzRXF1YWxNZW1vcnkocEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uQWRkciwgcEluZm8tPkFkZHIsIE1BQ19BRERSX0xFTikgPT0gMCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1sbWVEZWxCQVJlcVNhbml0eSBmYWlsIC0gdGhlIHBlZXIgYWRkciBkb3Nlbid0IGV4aXN0LlxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0JPT0xFQU4gUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKnBNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyKQoreworCVBGUkFNRV84MDJfMTEgcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKwlQRlJBTUVfQUREQkFfUkVRIHBBZGRGcmFtZTsKKwlwQWRkRnJhbWUgPSAoUEZSQU1FX0FEREJBX1JFUSkocE1zZyk7CisJaWYgKE1zZ0xlbiA8IChzaXplb2YoRlJBTUVfQUREQkFfUkVRKSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlBlZXJBZGRCQVJlcUFjdGlvblNhbml0eTogQUREQkEgUmVxdWVzdCBmcmFtZSBsZW5ndGggc2l6ZSA9ICVsZCBpbmNvcnJlY3RcbiIsIE1zZ0xlbikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCS8vIHdlIHN1cHBvcnQgaW1tZWRpYXRlIEJBLgorCSooVVNIT1JUICopKCZwQWRkRnJhbWUtPkJhUGFybSkgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEFkZEZyYW1lLT5CYVBhcm0pKTsKKwlwQWRkRnJhbWUtPlRpbWVPdXRWYWx1ZSA9IGNwdTJsZTE2KHBBZGRGcmFtZS0+VGltZU91dFZhbHVlKTsKKwlwQWRkRnJhbWUtPkJhU3RhcnRTZXEud29yZCA9IGNwdTJsZTE2KHBBZGRGcmFtZS0+QmFTdGFydFNlcS53b3JkKTsKKworCWlmIChwQWRkRnJhbWUtPkJhUGFybS5CQVBvbGljeSAhPSBJTU1FRF9CQSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5OiBBRERCQSBSZXF1ZXN0IEJhIFBvbGljeVslZF0gbm90IHN1cHBvcnRcbiIsIHBBZGRGcmFtZS0+QmFQYXJtLkJBUG9saWN5KSk7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQUREQkEgUmVxdWVzdC4gdGlkPSV4LCBCdWZzaXplPSV4LCBBTVNEVVN1cHBvcnRlZD0leCBcbiIsIHBBZGRGcmFtZS0+QmFQYXJtLlRJRCwgcEFkZEZyYW1lLT5CYVBhcm0uQnVmU2l6ZSwgcEFkZEZyYW1lLT5CYVBhcm0uQU1TRFVTdXBwb3J0ZWQpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIHdlIHN1cHBvcnQgaW1tZWRpYXRlIEJBLgorCWlmIChwQWRkRnJhbWUtPkJhUGFybS5USUQgJjB4ZmZmMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5OiBBRERCQSBSZXF1ZXN0IGluY29ycmVjdCBUSUQgPSAlZFxuIiwgcEFkZEZyYW1lLT5CYVBhcm0uVElEKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJQ09QWV9NQUNfQUREUihwQWRkcjIsIHBGcmFtZS0+SGRyLkFkZHIyKTsKKwlyZXR1cm4gVFJVRTsKK30KKworQk9PTEVBTiBQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqcE1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4pCit7CisJLy9QRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKXBNc2c7CisJUEZSQU1FX0FEREJBX1JTUCBwQWRkRnJhbWU7CisKKwlwQWRkRnJhbWUgPSAoUEZSQU1FX0FEREJBX1JTUCkocE1zZyk7CisJaWYgKE1zZ0xlbiA8IChzaXplb2YoRlJBTUVfQUREQkFfUlNQKSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlBlZXJBZGRCQVJzcEFjdGlvblNhbml0eTogQUREQkEgUmVzcG9uc2UgZnJhbWUgbGVuZ3RoIHNpemUgPSAlbGQgaW5jb3JyZWN0XG4iLCBNc2dMZW4pKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkvLyB3ZSBzdXBwb3J0IGltbWVkaWF0ZSBCQS4KKwkqKFVTSE9SVCAqKSgmcEFkZEZyYW1lLT5CYVBhcm0pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBBZGRGcmFtZS0+QmFQYXJtKSk7CisJcEFkZEZyYW1lLT5TdGF0dXNDb2RlID0gY3B1MmxlMTYocEFkZEZyYW1lLT5TdGF0dXNDb2RlKTsKKwlwQWRkRnJhbWUtPlRpbWVPdXRWYWx1ZSA9IGNwdTJsZTE2KHBBZGRGcmFtZS0+VGltZU91dFZhbHVlKTsKKworCWlmIChwQWRkRnJhbWUtPkJhUGFybS5CQVBvbGljeSAhPSBJTU1FRF9CQSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5OiBBRERCQSBSZXNwb25zZSBCYSBQb2xpY3lbJWRdIG5vdCBzdXBwb3J0XG4iLCBwQWRkRnJhbWUtPkJhUGFybS5CQVBvbGljeSkpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJLy8gd2Ugc3VwcG9ydCBpbW1lZGlhdGUgQkEuCisJaWYgKHBBZGRGcmFtZS0+QmFQYXJtLlRJRCAmMHhmZmYwKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHk6IEFEREJBIFJlc3BvbnNlIGluY29ycmVjdCBUSUQgPSAlZFxuIiwgcEFkZEZyYW1lLT5CYVBhcm0uVElEKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJcmV0dXJuIFRSVUU7CisKK30KKworQk9PTEVBTiBQZWVyRGVsQkFBY3Rpb25TYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVUNIQVIgV2NpZCwKKyAgICBJTiBWT0lEICpwTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiApCit7CisJLy9QRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKXBNc2c7CisJUEZSQU1FX0RFTEJBX1JFUSAgcERlbEZyYW1lOworCWlmIChNc2dMZW4gIT0gKHNpemVvZihGUkFNRV9ERUxCQV9SRVEpKSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKFdjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXJldHVybiBGQUxTRTsKKworCXBEZWxGcmFtZSA9IChQRlJBTUVfREVMQkFfUkVRKShwTXNnKTsKKworCSooVVNIT1JUICopKCZwRGVsRnJhbWUtPkRlbGJhUGFybSkgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcERlbEZyYW1lLT5EZWxiYVBhcm0pKTsKKwlwRGVsRnJhbWUtPlJlYXNvbkNvZGUgPSBjcHUybGUxNihwRGVsRnJhbWUtPlJlYXNvbkNvZGUpOworCisJaWYgKHBEZWxGcmFtZS0+RGVsYmFQYXJtLlRJRCAmMHhmZmYwKQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgSU4gVUNIQVIgIE1zZ0NoYW5uZWwsCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFBVQ0hBUiBwQnNzaWQsCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqcFNzaWRMZW4sCisgICAgT1VUIFVDSEFSICpwQnNzVHlwZSwKKyAgICBPVVQgVVNIT1JUICpwQmVhY29uUGVyaW9kLAorICAgIE9VVCBVQ0hBUiAqcENoYW5uZWwsCisgICAgT1VUIFVDSEFSICpwTmV3Q2hhbm5lbCwKKyAgICBPVVQgTEFSR0VfSU5URUdFUiAqcFRpbWVzdGFtcCwKKyAgICBPVVQgQ0ZfUEFSTSAqcENmUGFybSwKKyAgICBPVVQgVVNIT1JUICpwQXRpbVdpbiwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVDSEFSICpwRXJwLAorICAgIE9VVCBVQ0hBUiAqcER0aW1Db3VudCwKKyAgICBPVVQgVUNIQVIgKnBEdGltUGVyaW9kLAorICAgIE9VVCBVQ0hBUiAqcEJjYXN0RmxhZywKKyAgICBPVVQgVUNIQVIgKnBNZXNzYWdlVG9NZSwKKyAgICBPVVQgVUNIQVIgU3VwUmF0ZVtdLAorICAgIE9VVCBVQ0hBUiAqcFN1cFJhdGVMZW4sCisgICAgT1VUIFVDSEFSIEV4dFJhdGVbXSwKKyAgICBPVVQgVUNIQVIgKnBFeHRSYXRlTGVuLAorICAgIE9VVAlVQ0hBUiAqcENraXBGbGFnLAorICAgIE9VVAlVQ0hBUiAqcEFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKKyAgICBPVVQgUEVEQ0FfUEFSTSAgICAgICBwRWRjYVBhcm0sCisgICAgT1VUIFBRQlNTX0xPQURfUEFSTSAgcFFic3NMb2FkLAorICAgIE9VVCBQUU9TX0NBUEFCSUxJVFlfUEFSTSBwUW9zQ2FwYWJpbGl0eSwKKyAgICBPVVQgVUxPTkcgKnBSYWxpbmtJZSwKKyAgICBPVVQgVUNIQVIJCSAqcEh0Q2FwYWJpbGl0eUxlbiwKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICBPVVQgVUNIQVIJCSAqcFByZU5IdENhcGFiaWxpdHlMZW4sCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJT1VUIFVDSEFSCQkgKkFkZEh0SW5mb0xlbiwKKwlPVVQgQUREX0hUX0lORk9fSUUgKkFkZEh0SW5mbywKKwlPVVQgVUNIQVIgKk5ld0V4dENoYW5uZWxPZmZzZXQsCQkvLyBIdCBleHRlbnNpb24gY2hhbm5lbCBvZmZzZXQoYWJvdmUgb3IgYmVsb3cpCisgICAgT1VUIFVTSE9SVCAqTGVuZ3RoVklFLAorICAgIE9VVAlQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpCit7CisgICAgQ0hBUgkJCQkqUHRyOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUNIQVIgCQkJCVRpbUxlbjsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICBQRlJBTUVfODAyXzExCQlwRnJhbWU7CisgICAgUEVJRF9TVFJVQ1QgICAgICAgICBwRWlkOworICAgIFVDSEFSCQkJCVN1YlR5cGU7CisgICAgVUNIQVIJCQkJU2FuaXR5OworICAgIC8vVUNIQVIJCQkJRUNXTWluLCBFQ1dNYXg7CisgICAgLy9NQUNfQ1NSOV9TVFJVQwkJQ3NyOTsKKyAgICBVTE9ORwkJCQlMZW5ndGggPSAwOworCisJLy8gRm9yIHNvbWUgMTFhIEFQIHdoaWNoIGRpZG4ndCBoYXZlIERTX0lFLCB3ZSB1c2UgdHdvIGNvbmRpdGlvbnMgdG8gZGVjaWRlIHRoZSBjaGFubmVsCisJLy8JMS4gSWYgdGhlIEFQIGlzIDExbiBlbmFibGVkLCB0aGVuIGNoZWNrIHRoZSBjb250cm9sIGNoYW5uZWwuCisJLy8JMi4gSWYgdGhlIEFQIGRpZG4ndCBoYXZlIGFueSBpbmZvIGFib3V0IGNoYW5uZWwsIHVzZSB0aGUgY2hhbm5lbCB3ZSByZWNlaXZlZCB0aGlzIGZyYW1lIGFzIHRoZSBjaGFubmVsLiAoTWF5IGluYWNjdXJhY3khISkKKwlVQ0hBUgkJCUN0cmxDaGFubmVsID0gMDsKKworICAgIC8vIEFkZCBmb3IgMyBuZWNlc3NhcnkgRUlEIGZpZWxkIGNoZWNrCisgICAgU2FuaXR5ID0gMDsKKworICAgICpwQXRpbVdpbiA9IDA7CisgICAgKnBFcnAgPSAwOworICAgICpwRHRpbUNvdW50ID0gMDsKKyAgICAqcER0aW1QZXJpb2QgPSAwOworICAgICpwQmNhc3RGbGFnID0gMDsKKyAgICAqcE1lc3NhZ2VUb01lID0gMDsKKyAgICAqcEV4dFJhdGVMZW4gPSAwOworICAgICpwQ2tpcEZsYWcgPSAwOwkJCSAgICAgICAgLy8gRGVmYXVsdCBvZiBDa2lwRmxhZyBpcyAwCisgICAgKnBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPSAweEZGOyAgLy8gRGVmYXVsdCBvZiBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgaXMgMHhGRgorICAgICpMZW5ndGhWSUUgPSAwOwkJCQkJLy8gU2V0IHRoZSBsZW5ndGggb2YgVklFIHRvIGluaXQgdmFsdWUgMAorICAgICpwSHRDYXBhYmlsaXR5TGVuID0gMDsJCQkJCS8vIFNldCB0aGUgbGVuZ3RoIG9mIFZJRSB0byBpbml0IHZhbHVlIDAKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwkJKnBQcmVOSHRDYXBhYmlsaXR5TGVuID0gMDsJCQkJCS8vIFNldCB0aGUgbGVuZ3RoIG9mIFZJRSB0byBpbml0IHZhbHVlIDAKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAqQWRkSHRJbmZvTGVuID0gMDsJCQkJCS8vIFNldCB0aGUgbGVuZ3RoIG9mIFZJRSB0byBpbml0IHZhbHVlIDAKKyAgICAqcFJhbGlua0llID0gMDsKKyAgICAqcE5ld0NoYW5uZWwgPSAwOworICAgICpOZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsJLy9EZWZhdWx0IDB4ZmYgbWVhbnMgbm8gc3VjaCBJRQorICAgIHBDZlBhcm0tPmJWYWxpZCA9IEZBTFNFOyAgICAgICAgLy8gZGVmYXVsdDogbm8gSUVfQ0YgZm91bmQKKyAgICBwUWJzc0xvYWQtPmJWYWxpZCA9IEZBTFNFOyAgICAgIC8vIGRlZmF1bHQ6IG5vIElFX1FCU1NfTE9BRCBmb3VuZAorICAgIHBFZGNhUGFybS0+YlZhbGlkID0gRkFMU0U7ICAgICAgLy8gZGVmYXVsdDogbm8gSUVfRURDQV9QQVJBTUVURVIgZm91bmQKKyAgICBwUW9zQ2FwYWJpbGl0eS0+YlZhbGlkID0gRkFMU0U7IC8vIGRlZmF1bHQ6IG5vIElFX1FPU19DQVBBQklMSVRZIGZvdW5kCisKKyAgICBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisKKyAgICAvLyBnZXQgc3VidHlwZSBmcm9tIGhlYWRlcgorICAgIFN1YlR5cGUgPSAoVUNIQVIpcEZyYW1lLT5IZHIuRkMuU3ViVHlwZTsKKworICAgIC8vIGdldCBBZGRyMiBhbmQgQlNTSUQgZnJvbSBoZWFkZXIKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyMiwgcEZyYW1lLT5IZHIuQWRkcjIpOworICAgIENPUFlfTUFDX0FERFIocEJzc2lkLCBwRnJhbWUtPkhkci5BZGRyMyk7CisKKy8vCWhleF9kdW1wKCJCZWFjb24iLCBNc2csIE1zZ0xlbik7CisKKyAgICBQdHIgPSBwRnJhbWUtPk9jdGV0OworICAgIExlbmd0aCArPSBMRU5HVEhfODAyXzExOworCisgICAgLy8gZ2V0IHRpbWVzdGFtcCBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwVGltZXN0YW1wLCBQdHIsIFRJTUVTVEFNUF9MRU4pOworCisJcFRpbWVzdGFtcC0+dS5Mb3dQYXJ0ID0gY3B1MmxlMzIocFRpbWVzdGFtcC0+dS5Mb3dQYXJ0KTsKKwlwVGltZXN0YW1wLT51LkhpZ2hQYXJ0ID0gY3B1MmxlMzIocFRpbWVzdGFtcC0+dS5IaWdoUGFydCk7CisKKyAgICBQdHIgKz0gVElNRVNUQU1QX0xFTjsKKyAgICBMZW5ndGggKz0gVElNRVNUQU1QX0xFTjsKKworICAgIC8vIGdldCBiZWFjb24gaW50ZXJ2YWwgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocEJlYWNvblBlcmlvZCwgUHRyLCAyKTsKKyAgICBQdHIgKz0gMjsKKyAgICBMZW5ndGggKz0gMjsKKworICAgIC8vIGdldCBjYXBhYmlsaXR5IGluZm8gZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocENhcGFiaWxpdHlJbmZvLCBQdHIsIDIpOworICAgIFB0ciArPSAyOworICAgIExlbmd0aCArPSAyOworCisgICAgaWYgKENBUF9JU19FU1NfT04oKnBDYXBhYmlsaXR5SW5mbykpCisgICAgICAgICpwQnNzVHlwZSA9IEJTU19JTkZSQTsKKyAgICBlbHNlCisgICAgICAgICpwQnNzVHlwZSA9IEJTU19BREhPQzsKKworICAgIHBFaWQgPSAoUEVJRF9TVFJVQ1QpIFB0cjsKKworICAgIC8vIGdldCB2YXJpYWJsZSBmaWVsZHMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgd2hpbGUgKChMZW5ndGggKyAyICsgcEVpZC0+TGVuKSA8PSBNc2dMZW4pCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBTZWN1cmUgY29weSBWSUUgdG8gVmFySUVbTUFYX1ZJRV9MRU5dIGRpZG4ndCBvdmVyZmxvdy4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCgqTGVuZ3RoVklFICsgcEVpZC0+TGVuICsgMikgPj0gTUFYX1ZJRV9MRU4pCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gVmFyaWFibGUgSUVzIG91dCBvZiByZXNvdXJjZSBbbGVuKD0lZCkgPiBNQVhfVklFX0xFTig9JWQpXVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKCpMZW5ndGhWSUUgKyBwRWlkLT5MZW4gKyAyKSwgTUFYX1ZJRV9MRU4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKHBFaWQtPkVpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBJRV9TU0lEOgorICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFzIG9uZSBTU0lEIEVJRCBpbiB0aGlzIGJlYWNvbiwgaWdub3JlIHRoZSBzZWNvbmQgb25lCisgICAgICAgICAgICAgICAgaWYgKFNhbml0eSAmIDB4MSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYocEVpZC0+TGVuIDw9IE1BWF9MRU5fT0ZfU1NJRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFNzaWQsIHBFaWQtPk9jdGV0LCBwRWlkLT5MZW4pOworICAgICAgICAgICAgICAgICAgICAqcFNzaWRMZW4gPSBwRWlkLT5MZW47CisgICAgICAgICAgICAgICAgICAgIFNhbml0eSB8PSAweDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX1NTSUQgKGxlbj0lZClcbiIscEVpZC0+TGVuKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZihwRWlkLT5MZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTYW5pdHkgfD0gMHgyOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShTdXBSYXRlLCBwRWlkLT5PY3RldCwgcEVpZC0+TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgKnBTdXBSYXRlTGVuID0gcEVpZC0+TGVuOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IDIwMDQtMDktMTQgbm90IGEgZ29vZCBkZXNpZ24gaGVyZSwgY2F1c2UgaXQgZXhjbHVkZSBleHRyYSByYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIFNjYW5UYWIuIFdlIHNob3VsZCByZXBvcnQgYXMgaXMuIEFuZCBmaWx0ZXIgb3V0IHVuc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgIC8vIHJhdGVzIGluIE1sbWVBdXguCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIHN1cHBvcnRlZCByYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBSVE1QQ2hlY2tSYXRlcyhwQWQsIFN1cFJhdGUsIHBTdXBSYXRlTGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfU1VQUF9SQVRFUyAobGVuPSVkKVxuIixwRWlkLT5MZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9IVF9DQVA6CisJCQlpZiAocEVpZC0+TGVuID49IFNJWkVfSFRfQ0FQX0lFKSAgLy9Ob3RlOiBhbGxvdyBleHRlbnNpb24uISEKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCBwRWlkLT5PY3RldCwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKwkJCQkqcEh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOwkvLyBObm93IHdlIG9ubHkgc3VwcG9ydCAyNiBieXRlcy4KKworCQkJCSooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykpOworCQkJCSooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQl7CisJCQkJCSpwUHJlTkh0Q2FwYWJpbGl0eUxlbiA9IDA7CS8vIE5ub3cgd2Ugb25seSBzdXBwb3J0IDI2IGJ5dGVzLgorCisJCQkJCVB0ciA9IChQVUNIQVIpIHBWSUU7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KFB0ciArICpMZW5ndGhWSUUsICZwRWlkLT5FaWQsIHBFaWQtPkxlbiArIDIpOworCQkJCQkqTGVuZ3RoVklFICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkgLSB3cm9uZyBJRV9IVF9DQVAuIHBFaWQtPkxlbiA9ICVkXG4iLCBwRWlkLT5MZW4pKTsKKwkJCX0KKworCQlicmVhazsKKyAgICAgICAgICAgIGNhc2UgSUVfQUREX0hUOgorCQkJaWYgKHBFaWQtPkxlbiA+PSBzaXplb2YoQUREX0hUX0lORk9fSUUpKQorCQkJeworCQkJCS8vIFRoaXMgSUUgYWxsb3dzIGV4dGVuc2lvbiwgYnV0IHdlIGNhbiBpZ25vcmUgZXh0cmEgYnl0ZXMgYmV5b25kIG91ciBrbm93bGVkZ2UgLCBzbyBvbmx5CisJCQkJLy8gY29weSBmaXJzdCBzaXplb2YoQUREX0hUX0lORk9fSUUpCisJCQkJTmRpc01vdmVNZW1vcnkoQWRkSHRJbmZvLCBwRWlkLT5PY3RldCwgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSk7CisJCQkJKkFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7CisKKwkJCQlDdHJsQ2hhbm5lbCA9IEFkZEh0SW5mby0+Q29udHJvbENoYW47CisKKwkJCQkqKFVTSE9SVCAqKSgmQWRkSHRJbmZvLT5BZGRIdEluZm8yKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZBZGRIdEluZm8tPkFkZEh0SW5mbzIpKTsKKwkJCQkqKFVTSE9SVCAqKSgmQWRkSHRJbmZvLT5BZGRIdEluZm8zKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZBZGRIdEluZm8tPkFkZEh0SW5mbzMpKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJeworCQkJICAgICAgICAgICAgICAgIFB0ciA9IChQVUNIQVIpIHBWSUU7CisJCQkgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoUHRyICsgKkxlbmd0aFZJRSwgJnBFaWQtPkVpZCwgcEVpZC0+TGVuICsgMik7CisJCQkgICAgICAgICAgICAgICAgKkxlbmd0aFZJRSArPSAocEVpZC0+TGVuICsgMik7CisJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfQUREX0hULiBcbiIpKTsKKwkJCX0KKworCQlicmVhazsKKyAgICAgICAgICAgIGNhc2UgSUVfU0VDT05EQVJZX0NIX09GRlNFVDoKKwkJCWlmIChwRWlkLT5MZW4gPT0gMSkKKwkJCXsKKwkJCQkqTmV3RXh0Q2hhbm5lbE9mZnNldCA9IHBFaWQtPk9jdGV0WzBdOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfU0VDT05EQVJZX0NIX09GRlNFVC4gXG4iKSk7CisJCQl9CisKKwkJYnJlYWs7CisgICAgICAgICAgICBjYXNlIElFX0ZIX1BBUk06CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5KElFX0ZIX1BBUk0pIFxuIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0RTX1BBUk06CisgICAgICAgICAgICAgICAgaWYocEVpZC0+TGVuID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcENoYW5uZWwgPSAqcEVpZC0+T2N0ZXQ7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCXsKKwkJCQkJCWlmIChDaGFubmVsU2FuaXR5KHBBZCwgKnBDaGFubmVsKSA9PSAwKQorCQkJCQkJeworCisJCQkJCQkJcmV0dXJuIEZBTFNFOworCQkJCQkJfQorCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgICAgIFNhbml0eSB8PSAweDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0RTX1BBUk0gKGxlbj0lZClcbiIscEVpZC0+TGVuKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfQ0ZfUEFSTToKKyAgICAgICAgICAgICAgICBpZihwRWlkLT5MZW4gPT0gNikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBDZlBhcm0tPmJWYWxpZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIHBDZlBhcm0tPkNmcENvdW50ID0gcEVpZC0+T2N0ZXRbMF07CisgICAgICAgICAgICAgICAgICAgIHBDZlBhcm0tPkNmcFBlcmlvZCA9IHBFaWQtPk9jdGV0WzFdOworICAgICAgICAgICAgICAgICAgICBwQ2ZQYXJtLT5DZnBNYXhEdXJhdGlvbiA9IHBFaWQtPk9jdGV0WzJdICsgMjU2ICogcEVpZC0+T2N0ZXRbM107CisgICAgICAgICAgICAgICAgICAgIHBDZlBhcm0tPkNmcER1clJlbWFpbmluZyA9IHBFaWQtPk9jdGV0WzRdICsgMjU2ICogcEVpZC0+T2N0ZXRbNV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0NGX1BBUk1cbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9JQlNTX1BBUk06CisgICAgICAgICAgICAgICAgaWYocEVpZC0+TGVuID09IDIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQXRpbVdpbiwgcEVpZC0+T2N0ZXQsIHBFaWQtPkxlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0lCU1NfUEFSTVxuIikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgICAgICAgICBjYXNlIElFX1RJTToKKyAgICAgICAgICAgICAgICBpZihJTkZSQV9PTihwQWQpICYmIFN1YlR5cGUgPT0gU1VCVFlQRV9CRUFDT04pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHZXRUaW1CaXQoKFBVQ0hBUilwRWlkLCBwQWQtPlN0YUFjdGl2ZS5BaWQsICZUaW1MZW4sIHBCY2FzdEZsYWcsIHBEdGltQ291bnQsIHBEdGltUGVyaW9kLCBwTWVzc2FnZVRvTWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIGNhc2UgSUVfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UOgorICAgICAgICAgICAgICAgIGlmKHBFaWQtPkxlbiA9PSAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAJKnBOZXdDaGFubmVsID0gcEVpZC0+T2N0ZXRbMV07CS8vZXh0cmFjdCBuZXcgY2hhbm5lbCBudW1iZXIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIE5ldyBmb3IgV1BBCisgICAgICAgICAgICAvLyBDQ1ggdjIgaGFzIHRoZSBzYW1lIElFLCB3ZSBuZWVkIHRvIHBhcnNlIHRoYXQgdG9vCisgICAgICAgICAgICAvLyBXaWZpIFdNTSB1c2UgdGhlIHNhbWUgSUUgdmFsZSwgbmVlZCB0byBwYXJzZSB0aGF0IHRvbworICAgICAgICAgICAgLy8gY2FzZSBJRV9XUEE6CisgICAgICAgICAgICBjYXNlIElFX1ZFTkRPUl9TUEVDSUZJQzoKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBCcm9hZGNvbS9BdGhlcm9zIDgwMi4xMW4gT1VJIHZlcnNpb24sIGZvciBIVCBDYXBhYmlsaXR5IElFLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgSFQgSUUgaXMgYmVmb3JlIElFRUUgZHJhZnQgc2V0IEhUIElFIHZhbHVlLjIwMDYtMDktMjggYnkgSmFuLgorICAgICAgICAgICAgICAgIC8qaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgQlJPQURDT01fT1VJLCAzKSAmJiAocEVpZC0+TGVuID49IDQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAJaWYgKChwRWlkLT5PY3RldFszXSA9PSBPVUlfQlJPQURDT01fSFQpICYmIChwRWlkLT5MZW4gPj0gMzApKQorICAgICAgICAgICAgCQl7CisJCQkJeworCQkJCQlOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCAmcEVpZC0+T2N0ZXRbNF0sIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisJCQkJCSpwSHRDYXBhYmlsaXR5TGVuID0gU0laRV9IVF9DQVBfSUU7CS8vIE5ub3cgd2Ugb25seSBzdXBwb3J0IDI2IGJ5dGVzLgorCQkJCX0KKyAgICAgICAgIAkJfQorICAgICAgICAgICAgICAgIAlpZiAoKHBFaWQtPk9jdGV0WzNdID09IE9VSV9CUk9BRENPTV9IVCkgJiYgKHBFaWQtPkxlbiA+PSAyNikpCisgICAgICAgICAgICAJCXsKKwkJCQl7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KEFkZEh0SW5mbywgJnBFaWQtPk9jdGV0WzRdLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKwkJCQkJKkFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7CS8vIE5ub3cgd2Ugb25seSBzdXBwb3J0IDI2IGJ5dGVzLgorCQkJCX0KKyAgICAgICAgIAkJfQorICAgICAgICAgICAgICAgIH0KKwkJCQkqLworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBPVUkgdmVyc2lvbiwgZmlsdGVyIG91dCBub24tc3RhbmRhcmQgdXNhZ2UKKyAgICAgICAgICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBSQUxJTktfT1VJLCAzKSAmJiAocEVpZC0+TGVuID09IDcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8qcFJhbGlua0llID0gcEVpZC0+T2N0ZXRbM107CisgICAgICAgICAgICAgICAgICAgIGlmIChwRWlkLT5PY3RldFszXSAhPSAwKQorICAgICAgICAJCQkJKnBSYWxpbmtJZSA9IHBFaWQtPk9jdGV0WzNdOworICAgICAgICAJCQllbHNlCisgICAgICAgIAkJCQkqcFJhbGlua0llID0gMHhmMDAwMDAwMDsgLy8gU2V0IHRvIG5vbi16ZXJvIHZhbHVlIChjYW4ndCBzZXQgYml0MC0yKSB0byByZXByZXNlbnQgdGhpcyBpcyBSYWxpbmsgQ2hpcC4gU28gYXQgbGlua3VwLCB3ZSB3aWxsIHNldCByYWxpbmtjaGlwIGZsYWcuCisgICAgICAgICAgICAgICAgfQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkvLyBUaGlzIEhUIElFIGlzIGJlZm9yZSBJRUVFIGRyYWZ0IHNldCBIVCBJRSB2YWx1ZS4yMDA2LTA5LTI4IGJ5IEphbi4KKworICAgICAgICAgICAgICAgIC8vIE90aGVyIHZlbmRvcnMgaGFkIHByb2R1Y3Rpb24gYmVmb3JlIElFX0hUX0NBUCB2YWx1ZSBpcyBhc3NpZ25lZC4gVG8gYmFja3dhcmQgc3VwcG9ydCB0aG9zZSBvbGQtZmlybXdhcmUgQVAsCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYnJvYWRjb20tZGVmaWVuZCBwcmUtODAyLjExbkQxLjAgT1VJIGZvciBIVCByZWxhdGVkIElFLCBpbmNsdWRpbmcgSFQgQ2FwYXRpbGl0aWVzIElFIGFuZCBIVCBJbmZvcm1hdGlvbiBJRQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgqcEh0Q2FwYWJpbGl0eUxlbiA9PSAwKSAmJiBOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFBSRV9OX0hUX09VSSwgMykgJiYgKHBFaWQtPkxlbiA+PSA0KSAmJiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHBFaWQtPk9jdGV0WzNdID09IE9VSV9QUkVOX0hUX0NBUCkgJiYgKHBFaWQtPkxlbiA+PSAzMCkgJiYgKCpwSHRDYXBhYmlsaXR5TGVuID09IDApKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCAmcEVpZC0+T2N0ZXRbNF0sIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqcFByZU5IdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICgocEVpZC0+T2N0ZXRbM10gPT0gT1VJX1BSRU5fQUREX0hUKSAmJiAocEVpZC0+TGVuID49IDI2KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoQWRkSHRJbmZvLCAmcEVpZC0+T2N0ZXRbNF0sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworICAgICAgICAgICAgICAgICAgICAgICAgKkFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBXUEFfT1VJLCA0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvcHkgdG8gcFZJRSB3aGljaCB3aWxsIHJlcG9ydCB0byBtaWNyb3NvZnQgYnNzaWQgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgUHRyID0gKFBVQ0hBUikgcFZJRTsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoUHRyICsgKkxlbmd0aFZJRSwgJnBFaWQtPkVpZCwgcEVpZC0+TGVuICsgMik7CisgICAgICAgICAgICAgICAgICAgICpMZW5ndGhWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdNRV9QQVJNX0VMRU0sIDYpICYmIChwRWlkLT5MZW4gPT0gMjQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUFVDSEFSIHB0cjsKKyAgICAgICAgICAgICAgICAgICAgaW50IGk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2luZyBFRENBIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iVmFsaWQgICAgICAgICAgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJRQWNrICAgICAgICAgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4MTA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlF1ZXVlUmVxdWVzdCAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHgyMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iVHhvcFJlcXVlc3QgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDQwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkVkY2FVcGRhdGVDb3VudCA9IHBFaWQtPk9jdGV0WzZdICYgMHgwZjsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQVBTRENhcGFibGUgICAgPSAocEVpZC0+T2N0ZXRbNl0gJiAweDgwKSA/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcEVpZC0+T2N0ZXRbOF07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVIgYWNpID0gKCpwdHIgJiAweDYwKSA+PiA1OyAvLyBiNX42IGlzIEFDIElOREVYCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bYWNpXSAgPSAoKCgqcHRyKSAmIDB4MTApID09IDB4MTApOyAgIC8vIGI1IGlzIEFDTQorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5BaWZzblthY2ldID0gKCpwdHIpICYgMHgwZjsgICAgICAgICAgICAgICAvLyBiMH4zIGlzIEFJRlNOCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW2FjaV0gPSAqKHB0cisxKSAmIDB4MGY7ICAgICAgICAgICAgIC8vIGIwfjQgaXMgQ3dtaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbYWNpXSA9ICoocHRyKzEpID4+IDQ7ICAgICAgICAgICAgICAgLy8gYjV+OCBpcyBDd21heAorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5UeG9wW2FjaV0gID0gKihwdHIrMikgKyAyNTYgKiAoKihwdHIrMykpOyAvLyBpbiB1bml0IG9mIDMyLXVzCisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgKz0gNDsgLy8gcG9pbnQgdG8gbmV4dCBBQworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV01FX0lORk9fRUxFTSwgNikgJiYgKHBFaWQtPkxlbiA9PSA3KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNpbmcgRURDQSBwYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlZhbGlkICAgICAgICAgID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iUUFjayAgICAgICAgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDEwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJRdWV1ZVJlcXVlc3QgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4MjA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlR4b3BSZXF1ZXN0ICAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHg0MDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5FZGNhVXBkYXRlQ291bnQgPSBwRWlkLT5PY3RldFs2XSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YkFQU0RDYXBhYmxlICAgID0gKHBFaWQtPk9jdGV0WzZdICYgMHg4MCkgPyAxIDogMDsKKworICAgICAgICAgICAgICAgICAgICAvLyB1c2UgZGVmYXVsdCBFRENBIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bUUlEX0FDX0JFXSAgPSAwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CRV0gPSAzOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19CRV0gPSBDV19NSU5fSU5fQklUUzsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQkVdID0gQ1dfTUFYX0lOX0JJVFM7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQkVdICA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQUNNW1FJRF9BQ19CS10gID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQktdID0gNzsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfQktdID0gQ1dfTUlOX0lOX0JJVFM7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX0JLXSA9IENXX01BWF9JTl9CSVRTOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX0JLXSAgPSAwOworCisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YkFDTVtRSURfQUNfVkldICA9IDA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXSA9IDI7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX1ZJXSA9IENXX01JTl9JTl9CSVRTLTE7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZJXSA9IENXX01BWF9JTl9CSVRTOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZJXSAgPSA5NjsgICAvLyBBQ19WSTogOTYqMzJ1cyB+PSAzbXMKKworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bUUlEX0FDX1ZPXSAgPSAwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WT10gPSAyOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19WT10gPSBDV19NSU5fSU5fQklUUy0yOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19WT10gPSBDV19NQVhfSU5fQklUUy0xOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZPXSAgPSA0ODsgICAvLyBBQ19WTzogNDgqMzJ1cyB+PSAxLjVtcworICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0VYVF9TVVBQX1JBVEVTOgorICAgICAgICAgICAgICAgIGlmIChwRWlkLT5MZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShFeHRSYXRlLCBwRWlkLT5PY3RldCwgcEVpZC0+TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgKnBFeHRSYXRlTGVuID0gcEVpZC0+TGVuOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IDIwMDQtMDktMTQgbm90IGEgZ29vZCBkZXNpZ24gaGVyZSwgY2F1c2UgaXQgZXhjbHVkZSBleHRyYSByYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIFNjYW5UYWIuIFdlIHNob3VsZCByZXBvcnQgYXMgaXMuIEFuZCBmaWx0ZXIgb3V0IHVuc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgIC8vIHJhdGVzIGluIE1sbWVBdXguCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIHN1cHBvcnRlZCByYXRlcworICAgICAgICAgICAgICAgICAgICAvLyBSVE1QQ2hlY2tSYXRlcyhwQWQsIEV4dFJhdGUsIHBFeHRSYXRlTGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfRVJQOgorICAgICAgICAgICAgICAgIGlmIChwRWlkLT5MZW4gPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwRXJwID0gKFVDSEFSKXBFaWQtPk9jdGV0WzBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9BSVJPTkVUX0NLSVA6CisgICAgICAgICAgICAgICAgLy8gMC4gQ2hlY2sgQWlyb25ldCBJRSBsZW5ndGgsIGl0IG11c3QgYmUgbGFyZ2VyIG9yIGVxdWFsIHRvIDI4CisgICAgICAgICAgICAgICAgLy8gQ2lzY28gQVAzNTAgdXNlZCBsZW5ndGggYXMgMjgKKyAgICAgICAgICAgICAgICAvLyBDaXNjbyBBUDEyWFggdXNlZCBsZW5ndGggYXMgMzAKKyAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuIDwgKENLSVBfTkVHT1RJQVRJT05fTEVOR1RIIC0gMikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gMS4gQ29weSBDS0lQIGZsYWcgYnl0ZSB0byBidWZmZXIgZm9yIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAqcENraXBGbGFnID0gKihwRWlkLT5PY3RldCArIDgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0FQX1RYX1BPV0VSOgorICAgICAgICAgICAgICAgIC8vIEFQIENvbnRyb2wgb2YgQ2xpZW50IFRyYW5zbWl0IFBvd2VyCisgICAgICAgICAgICAgICAgLy8wLiBDaGVjayBBaXJvbmV0IElFIGxlbmd0aCwgaXQgbXVzdCBiZSA2CisgICAgICAgICAgICAgICAgaWYgKHBFaWQtPkxlbiAhPSAweDA2KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIEdldCBjZWxsIHBvd2VyIGxpbWl0IGluIGRCbQorICAgICAgICAgICAgICAgIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIENJU0NPX09VSSwgMykgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgKnBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPSAqKHBFaWQtPk9jdGV0ICsgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIFdQQTIgJiA4MDIuMTFpIFJTTgorICAgICAgICAgICAgY2FzZSBJRV9SU046CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gT1VJIGZvciB2ZXJzaW9uIGFueW1vcmUsIGNoZWNrIHRoZSBncm91cCBjaXBoZXIgT1VJIGJlZm9yZSBjb3B5aW5nCisgICAgICAgICAgICAgICAgaWYgKFJUTVBFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29weSB0byBwVklFIHdoaWNoIHdpbGwgcmVwb3J0IHRvIG1pY3Jvc29mdCBic3NpZCBsaXN0LgorICAgICAgICAgICAgICAgICAgICBQdHIgPSAoUFVDSEFSKSBwVklFOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShQdHIgKyAqTGVuZ3RoVklFLCAmcEVpZC0+RWlkLCBwRWlkLT5MZW4gKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgKkxlbmd0aFZJRSArPSAocEVpZC0+TGVuICsgMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJCWNhc2UgSUVfQ09VTlRSWToKKwkJCQlQdHIgPSAoUFVDSEFSKSBwVklFOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFB0ciArICpMZW5ndGhWSUUsICZwRWlkLT5FaWQsIHBFaWQtPkxlbiArIDIpOworICAgICAgICAgICAgICAgICpMZW5ndGhWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCWJyZWFrOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBMZW5ndGggPSBMZW5ndGggKyAyICsgcEVpZC0+TGVuOyAgLy8gRWlkWzFdICsgTGVuWzFdKyBjb250ZW50W0xlbl0KKyAgICAgICAgcEVpZCA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKilwRWlkICsgMiArIHBFaWQtPkxlbik7CisgICAgfQorCisgICAgLy8gRm9yIHNvbWUgMTFhIEFQLiBpdCBkaWQgbm90IGhhdmUgdGhlIGNoYW5uZWwgRUlELCBwYXRjaCBoZXJlCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCVVDSEFSIExhdGNoUmZDaGFubmVsID0gTXNnQ2hhbm5lbDsKKwkJaWYgKChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkgJiYgKChTYW5pdHkgJiAweDQpID09IDApKQorCQl7CisJCQlpZiAoQ3RybENoYW5uZWwgIT0gMCkKKwkJCQkqcENoYW5uZWwgPSBDdHJsQ2hhbm5lbDsKKwkJCWVsc2UKKwkJCQkqcENoYW5uZWwgPSBMYXRjaFJmQ2hhbm5lbDsKKwkJCVNhbml0eSB8PSAweDQ7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAoU2FuaXR5ICE9IDB4NykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gbWlzc2luZyBmaWVsZCwgU2FuaXR5PTB4JTAyeFxuIiwgU2FuaXR5KSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIFRSVUU7CisJfQorCit9CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCU1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sgZm9yIHNvbWUgSUUgYWRkcmVzc2VkICBpbiA4MDIuMTFuIGQzLjAzLgorCVJldHVybjoKKwkJVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eTIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVk9JRCAqTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgVUNIQVIgCSpSZWdDbGFzcykKK3sKKwlDSEFSCQkJCSpQdHI7CisJUEZSQU1FXzgwMl8xMQkJcEZyYW1lOworCVBFSURfU1RSVUNUCQkJcEVpZDsKKwlVTE9ORwkJCQlMZW5ndGggPSAwOworCisJcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpTXNnOworCisJKlJlZ0NsYXNzID0gMDsKKwlQdHIgPSBwRnJhbWUtPk9jdGV0OworCUxlbmd0aCArPSBMRU5HVEhfODAyXzExOworCisJLy8gZ2V0IHRpbWVzdGFtcCBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKwlQdHIgKz0gVElNRVNUQU1QX0xFTjsKKwlMZW5ndGggKz0gVElNRVNUQU1QX0xFTjsKKworCS8vIGdldCBiZWFjb24gaW50ZXJ2YWwgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisJUHRyICs9IDI7CisJTGVuZ3RoICs9IDI7CisKKwkvLyBnZXQgY2FwYWJpbGl0eSBpbmZvIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorCVB0ciArPSAyOworCUxlbmd0aCArPSAyOworCisJcEVpZCA9IChQRUlEX1NUUlVDVCkgUHRyOworCisJLy8gZ2V0IHZhcmlhYmxlIGZpZWxkcyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKwl3aGlsZSAoKExlbmd0aCArIDIgKyBwRWlkLT5MZW4pIDw9IE1zZ0xlbikKKwl7CisJCXN3aXRjaChwRWlkLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfU1VQUF9SRUdfQ0xBU1M6CisJCQkJaWYocEVpZC0+TGVuID4gMCkKKwkJCQl7CisJCQkJCSpSZWdDbGFzcyA9ICpwRWlkLT5PY3RldDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfU1NJRCAobGVuPSVkKVxuIixwRWlkLT5MZW4pKTsKKwkJCQkJcmV0dXJuIEZBTFNFOworCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCisJCUxlbmd0aCA9IExlbmd0aCArIDIgKyBwRWlkLT5MZW47ICAvLyBFaWRbMV0gKyBMZW5bMV0rIGNvbnRlbnRbTGVuXQorCQlwRWlkID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKXBFaWQgKyAyICsgcEVpZC0+TGVuKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKKworfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBNbG1lU2NhblJlcVNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpNc2csCisJSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBVQ0hBUiAqcEJzc1R5cGUsCisJT1VUIENIQVIgU3NpZFtdLAorCU9VVCBVQ0hBUiAqcFNzaWRMZW4sCisJT1VUIFVDSEFSICpwU2NhblR5cGUpCit7CisJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QgKkluZm87CisKKwlJbmZvID0gKE1MTUVfU0NBTl9SRVFfU1RSVUNUICopKE1zZyk7CisJKnBCc3NUeXBlID0gSW5mby0+QnNzVHlwZTsKKwkqcFNzaWRMZW4gPSBJbmZvLT5Tc2lkTGVuOworCU5kaXNNb3ZlTWVtb3J5KFNzaWQsIEluZm8tPlNzaWQsICpwU3NpZExlbik7CisJKnBTY2FuVHlwZSA9IEluZm8tPlNjYW5UeXBlOworCisJaWYgKCgqcEJzc1R5cGUgPT0gQlNTX0lORlJBIHx8ICpwQnNzVHlwZSA9PSBCU1NfQURIT0MgfHwgKnBCc3NUeXBlID09IEJTU19BTlkpCisJCSYmICgqcFNjYW5UeXBlID09IFNDQU5fQUNUSVZFIHx8ICpwU2NhblR5cGUgPT0gU0NBTl9QQVNTSVZFCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCXx8ICpwU2NhblR5cGUgPT0gU0NBTl9DSVNDT19QQVNTSVZFIHx8ICpwU2NhblR5cGUgPT0gU0NBTl9DSVNDT19BQ1RJVkUKKwkJfHwgKnBTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0NIQU5ORUxfTE9BRCB8fCAqcFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fTk9JU0UKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJKSkKKwl7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU2NhblJlcVNhbml0eSBmYWlsIC0gd3JvbmcgQnNzVHlwZSBvciBTY2FuVHlwZVxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1VDSEFSIENoYW5uZWxTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVUNIQVIgY2hhbm5lbCkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBwQWQtPkNoYW5uZWxMaXN0TnVtOyBpICsrKQorICAgIHsKKyAgICAgICAgaWYgKGNoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBQZWVyRGVhdXRoU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqcFJlYXNvbikKK3sKKyAgICBQRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKU1zZzsKKworICAgIENPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7CisgICAgTmRpc01vdmVNZW1vcnkocFJlYXNvbiwgJnBGcmFtZS0+T2N0ZXRbMF0sIDIpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJBdXRoU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkciwKKyAgICBPVVQgVVNIT1JUICpwQWxnLAorICAgIE9VVCBVU0hPUlQgKnBTZXEsCisgICAgT1VUIFVTSE9SVCAqcFN0YXR1cywKKyAgICBDSEFSICpwQ2hsZ1RleHQpCit7CisgICAgUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyLCAgIHBGcmFtZS0+SGRyLkFkZHIyKTsKKyAgICBOZGlzTW92ZU1lbW9yeShwQWxnLCAgICAmcEZyYW1lLT5PY3RldFswXSwgMik7CisgICAgTmRpc01vdmVNZW1vcnkocFNlcSwgICAgJnBGcmFtZS0+T2N0ZXRbMl0sIDIpOworICAgIE5kaXNNb3ZlTWVtb3J5KHBTdGF0dXMsICZwRnJhbWUtPk9jdGV0WzRdLCAyKTsKKworICAgIGlmICgoKnBBbGcgPT0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbikKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKyAgICAgIHx8ICgqcEFsZyA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisgICAgICApCisgICAgeworICAgICAgICBpZiAoKnBTZXEgPT0gMSB8fCAqcFNlcSA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBdXRoU2FuaXR5IGZhaWwgLSB3cm9uZyBTZWcjXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoKnBBbGcgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQorICAgIHsKKyAgICAgICAgaWYgKCpwU2VxID09IDEgfHwgKnBTZXEgPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKnBTZXEgPT0gMiB8fCAqcFNlcSA9PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQ2hsZ1RleHQsICZwRnJhbWUtPk9jdGV0WzhdLCBDSVBIRVJfVEVYVF9MRU4pOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQXV0aFNhbml0eSBmYWlsIC0gd3JvbmcgU2VnI1xuIikpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBdXRoU2FuaXR5IGZhaWwgLSB3cm9uZyBhbGdvcml0aG1cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBNbG1lQXV0aFJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIsCisgICAgT1VUIFVMT05HICpwVGltZW91dCwKKyAgICBPVVQgVVNIT1JUICpwQWxnKQoreworICAgIE1MTUVfQVVUSF9SRVFfU1RSVUNUICpwSW5mbzsKKworICAgIHBJbmZvICA9IChNTE1FX0FVVEhfUkVRX1NUUlVDVCAqKU1zZzsKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyLCBwSW5mby0+QWRkcik7CisgICAgKnBUaW1lb3V0ID0gcEluZm8tPlRpbWVvdXQ7CisgICAgKnBBbGcgPSBwSW5mby0+QWxnOworCisgICAgaWYgKCgoKnBBbGcgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKSB8fCgqcEFsZyA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQorI2lmZGVmIExFQVBfU1VQUE9SVAorICAgICB8fCAoKnBBbGcgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworICAgICAJKSAmJgorICAgICAgICAoKCpwQWRkciAmIDB4MDEpID09IDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVBdXRoUmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBhbGdvcml0aG1cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWxtZUFzc29jUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQXBBZGRyLAorICAgIE9VVCBVU0hPUlQgKnBDYXBhYmlsaXR5SW5mbywKKyAgICBPVVQgVUxPTkcgKnBUaW1lb3V0LAorICAgIE9VVCBVU0hPUlQgKnBMaXN0ZW5JbnR2KQoreworICAgIE1MTUVfQVNTT0NfUkVRX1NUUlVDVCAqcEluZm87CisKKyAgICBwSW5mbyA9IChNTE1FX0FTU09DX1JFUV9TVFJVQ1QgKilNc2c7CisgICAgKnBUaW1lb3V0ID0gcEluZm8tPlRpbWVvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aW1lb3V0CisgICAgQ09QWV9NQUNfQUREUihwQXBBZGRyLCBwSW5mby0+QWRkcik7ICAgICAgICAgICAgICAgICAgIC8vIEFQIGFkZHJlc3MKKyAgICAqcENhcGFiaWxpdHlJbmZvID0gcEluZm8tPkNhcGFiaWxpdHlJbmZvOyAgICAgICAgICAgICAgIC8vIGNhcGFiaWxpdHkgaW5mbworICAgICpwTGlzdGVuSW50diA9IHBJbmZvLT5MaXN0ZW5JbnR2OworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJEaXNhc3NvY1Nhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBVU0hPUlQgKnBSZWFzb24pCit7CisgICAgUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyMiwgcEZyYW1lLT5IZHIuQWRkcjIpOworICAgIE5kaXNNb3ZlTWVtb3J5KHBSZWFzb24sICZwRnJhbWUtPk9jdGV0WzBdLCAyKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNhbml0eSBjaGVjayBOZXR3b3JrVHlwZSAoMTFiLCAxMWcgb3IgMTFhKQorCisJQXJndW1lbnRzOgorCQlwQnNzIC0gUG9pbnRlciB0byBCU1MgdGFibGUuCisKKwlSZXR1cm4gVmFsdWU6CisgICAgICAgIE5kaXM4MDJfMTFEUyAuLi4uLi4uKDExYikKKyAgICAgICAgTmRpczgwMl8xMU9GRE0yNC4uLi4oMTFnKQorICAgICAgICBOZGlzODAyXzExT0ZETTUuLi4uLigxMWEpCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfODAyXzExX05FVFdPUktfVFlQRSBOZXR3b3JrVHlwZUluVXNlU2FuaXR5KAorICAgIElOIFBCU1NfRU5UUlkgcEJzcykKK3sKKwlORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUJTmV0V29ya1R5cGU7CisJVUNIQVIJCQkJCQlyYXRlLCBpOworCisJTmV0V29ya1R5cGUgPSBOZGlzODAyXzExRFM7CisKKwlpZiAocEJzcy0+Q2hhbm5lbCA8PSAxNCkKKwl7CisJCS8vCisJCS8vIEZpcnN0IGNoZWNrIHN1cHBvcnQgUmF0ZS4KKwkJLy8KKwkJZm9yIChpID0gMDsgaSA8IHBCc3MtPlN1cFJhdGVMZW47IGkrKykKKwkJeworCQkJcmF0ZSA9IHBCc3MtPlN1cFJhdGVbaV0gJiAweDdmOyAvLyBNYXNrIG91dCBiYXNpYyByYXRlIHNldCBiaXQKKwkJCWlmICgocmF0ZSA9PSAyKSB8fCAocmF0ZSA9PSA0KSB8fCAocmF0ZSA9PSAxMSkgfHwgKHJhdGUgPT0gMjIpKQorCQkJeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vCisJCQkJLy8gT3RoZXJ3aXNlIChldmVuIHJhdGUgPiAxMDgpIG1lYW5zIE5kaXM4MDJfMTFPRkRNMjQKKwkJCQkvLworCQkJCU5ldFdvcmtUeXBlID0gTmRpczgwMl8xMU9GRE0yNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8vCisJCS8vIFNlY29uZCBjaGVjayBFeHRlbmQgUmF0ZS4KKwkJLy8KKwkJaWYgKE5ldFdvcmtUeXBlICE9IE5kaXM4MDJfMTFPRkRNMjQpCisJCXsKKwkJCWZvciAoaSA9IDA7IGkgPCBwQnNzLT5FeHRSYXRlTGVuOyBpKyspCisJCQl7CisJCQkJcmF0ZSA9IHBCc3MtPlN1cFJhdGVbaV0gJiAweDdmOyAvLyBNYXNrIG91dCBiYXNpYyByYXRlIHNldCBiaXQKKwkJCQlpZiAoKHJhdGUgPT0gMikgfHwgKHJhdGUgPT0gNCkgfHwgKHJhdGUgPT0gMTEpIHx8IChyYXRlID09IDIyKSkKKwkJCQl7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLworCQkJCQkvLyBPdGhlcndpc2UgKGV2ZW4gcmF0ZSA+IDEwOCkgbWVhbnMgTmRpczgwMl8xMU9GRE0yNAorCQkJCQkvLworCQkJCQlOZXRXb3JrVHlwZSA9IE5kaXM4MDJfMTFPRkRNMjQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlOZXRXb3JrVHlwZSA9IE5kaXM4MDJfMTFPRkRNNTsKKwl9CisKKyAgICBpZiAocEJzcy0+SHRDYXBhYmlsaXR5TGVuICE9IDApCisgICAgeworICAgICAgICBpZiAoTmV0V29ya1R5cGUgPT0gTmRpczgwMl8xMU9GRE01KQorICAgICAgICAgICAgTmV0V29ya1R5cGUgPSBOZGlzODAyXzExT0ZETTVfTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTmV0V29ya1R5cGUgPSBOZGlzODAyXzExT0ZETTI0X047CisgICAgfQorCisJcmV0dXJuIE5ldFdvcmtUeXBlOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFdQQSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gUGVlcldwYU1lc3NhZ2VTYW5pdHkoCisgICAgSU4gCVBSVE1QX0FEQVBURVIgCQlwQWQsCisgICAgSU4gCVBFQVBPTF9QQUNLRVQgCQlwTXNnLAorICAgIElOIAlVTE9ORyAJCQkJTXNnTGVuLAorICAgIElOIAlVQ0hBUgkJCQlNc2dUeXBlLAorICAgIElOIAlNQUNfVEFCTEVfRU5UUlkgIAkqcEVudHJ5KQoreworCVVDSEFSCQkJbWljW0xFTl9LRVlfREVTQ19NSUNdLCBkaWdlc3RbODBdLCBLRVlEQVRBW01BWF9MRU5fT0ZfUlNOSUVdOworCUJPT0xFQU4JCQliUmVwbGF5RGlmZiA9IEZBTFNFOworCUJPT0xFQU4JCQliV1BBMiA9IEZBTFNFOworCUtFWV9JTkZPCQlFYXBvbEtleUluZm87CisJVUNIQVIJCQlHcm91cEtleUluZGV4ID0gMDsKKworCisJTmRpc1plcm9NZW1vcnkobWljLCBzaXplb2YobWljKSk7CisJTmRpc1plcm9NZW1vcnkoZGlnZXN0LCBzaXplb2YoZGlnZXN0KSk7CisJTmRpc1plcm9NZW1vcnkoS0VZREFUQSwgc2l6ZW9mKEtFWURBVEEpKTsKKwlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKSZFYXBvbEtleUluZm8sIHNpemVvZihFYXBvbEtleUluZm8pKTsKKworCU5kaXNNb3ZlTWVtb3J5KChQVUNIQVIpJkVhcG9sS2V5SW5mbywgKFBVQ0hBUikmcE1zZy0+S2V5RGVzYy5LZXlJbmZvLCBzaXplb2YoS0VZX0lORk8pKTsKKworCSooKFVTSE9SVCAqKSZFYXBvbEtleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJkVhcG9sS2V5SW5mbykpOworCisJLy8gQ2hvb3NlIFdQQTIgb3Igbm90CisJaWYgKChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8IChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorCQliV1BBMiA9IFRSVUU7CisKKwkvLyAwLiBDaGVjayBNc2dUeXBlCisJaWYgKChNc2dUeXBlID4gRUFQT0xfR1JPVVBfTVNHXzIpIHx8IChNc2dUeXBlIDwgRUFQT0xfUEFJUl9NU0dfMSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQoJWQpISBcbiIsIE1zZ1R5cGUpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIDEuIFJlcGxheSBjb3VudGVyIGNoZWNrCisgCWlmIChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzEgfHwgTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zIHx8IE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpCS8vIEZvciBzdXBwbGljYW50CisgICAgeworICAgIAkvLyBGaXJzdCB2YWxpZGF0ZSByZXBsYXkgY291bnRlciwgb25seSBhY2NlcHQgbWVzc2FnZSB3aXRoIGxhcmdlciByZXBsYXkgY291bnRlci4KKwkJLy8gTGV0IGVxdWFsIHBhc3MsIHNvbWUgQVAgc3RhcnQgd2l0aCBhbGwgemVybyByZXBsYXkgY291bnRlcgorCQlVQ0hBUglaZXJvUmVwbGF5W0xFTl9LRVlfREVTQ19SRVBMQVldOworCisgICAgICAgIE5kaXNaZXJvTWVtb3J5KFplcm9SZXBsYXksIExFTl9LRVlfREVTQ19SRVBMQVkpOworCQlpZiAoKFJUTVBDb21wYXJlTWVtb3J5KHBNc2ctPktleURlc2MuUmVwbGF5Q291bnRlciwgcEVudHJ5LT5SX0NvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDEpICYmCisJCQkoUlRNUENvbXBhcmVNZW1vcnkocE1zZy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAwKSkKKyAgICAJeworCQkJYlJlcGxheURpZmYgPSBUUlVFOworICAgIAl9CisgCX0KKwllbHNlIGlmIChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzIgfHwgTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR180IHx8IE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzIpCS8vIEZvciBhdXRoZW50aWNhdG9yCisJeworCQkvLyBjaGVjayBSZXBsYXkgQ291bnRlciBjb3Jlc3BvbmRzIHRvIE1TRyBmcm9tIGF1dGhlbnRpY2F0b3IsIG90aGVyd2lzZSBkaXNjYXJkCisgICAgCWlmICghTmRpc0VxdWFsTWVtb3J5KHBNc2ctPktleURlc2MuUmVwbGF5Q291bnRlciwgcEVudHJ5LT5SX0NvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpKQorICAgIAl7CisJCQliUmVwbGF5RGlmZiA9IFRSVUU7CisgICAgCX0KKwl9CisKKwkvLyBSZXBsYXkgQ291bnRlciBkaWZmZXJlbnQgY29uZGl0aW9uCisJaWYgKGJSZXBsYXlEaWZmKQorCXsKKwkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciByZXBsYXkgY291bnRlciBkaWZmZXJlbnQKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfUkVQTEFZX0NPVU5URVJfRElGRl9FVkVOVF9GTEFHLCBwRW50cnktPkFkZHIsIHBFbnRyeS0+YXBpZHgsIDApOworCisJCWlmIChNc2dUeXBlIDwgRUFQT0xfR1JPVVBfTVNHXzEpCisJCXsKKyAgICAgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJlcGxheSBDb3VudGVyIERpZmZlcmVudCBpbiBwYWlyd2lzZSBtc2cgJWQgb2YgNC13YXkgaGFuZHNoYWtlIVxuIiwgTXNnVHlwZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUmVwbGF5IENvdW50ZXIgRGlmZmVyZW50IGluIGdyb3VwIG1zZyAlZCBvZiAyLXdheSBoYW5kc2hha2UhXG4iLCAoTXNnVHlwZSAtIEVBUE9MX1BBSVJfTVNHXzQpKSk7CisJCX0KKworCQloZXhfZHVtcCgiUmVjZWl2ZSByZXBsYXkgY291bnRlciAiLCBwTXNnLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCQloZXhfZHVtcCgiQ3VycmVudCByZXBsYXkgY291bnRlciAiLCBwRW50cnktPlJfQ291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKwl9CisKKwkvLyAyLiBWZXJpZnkgTUlDIGV4Y2VwdCBQYWlyd2lzZSBNc2cxCisJaWYgKE1zZ1R5cGUgIT0gRUFQT0xfUEFJUl9NU0dfMSkKKwl7CisJCVVDSEFSCQkJcmN2ZF9taWNbTEVOX0tFWV9ERVNDX01JQ107CisKKwkJLy8gUmVjb3JkIHRoZSByZWNlaXZlZCBNSUMgZm9yIGNoZWNrIGxhdGVyCisJCU5kaXNNb3ZlTWVtb3J5KHJjdmRfbWljLCBwTXNnLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJCU5kaXNaZXJvTWVtb3J5KHBNc2ctPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworICAgICAgICBpZiAocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkJLy8gVEtJUAorICAgICAgICB7CisgICAgICAgICAgICBobWFjX21kNShwRW50cnktPlBUSywgTEVOX0VBUF9NSUNLLCAoUFVDSEFSKXBNc2csIE1zZ0xlbiwgbWljKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQkvLyBBRVMKKyAgICAgICAgeworICAgICAgICAgICAgSE1BQ19TSEExKChQVUNIQVIpcE1zZywgTXNnTGVuLCBwRW50cnktPlBUSywgTEVOX0VBUF9NSUNLLCBkaWdlc3QpOworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkobWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFOZGlzRXF1YWxNZW1vcnkocmN2ZF9taWMsIG1pYywgTEVOX0tFWV9ERVNDX01JQykpCisgICAgICAgIHsKKwkJCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgTUlDIGRpZmZlcmVudAorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX01JQ19ESUZGX0VWRU5UX0ZMQUcsIHBFbnRyeS0+QWRkciwgcEVudHJ5LT5hcGlkeCwgMCk7CisKKwkJCWlmIChNc2dUeXBlIDwgRUFQT0xfR1JPVVBfTVNHXzEpCisJCQl7CisgICAgICAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiTUlDIERpZmZlcmVudCBpbiBwYWlyd2lzZSBtc2cgJWQgb2YgNC13YXkgaGFuZHNoYWtlIVxuIiwgTXNnVHlwZSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1JQyBEaWZmZXJlbnQgaW4gZ3JvdXAgbXNnICVkIG9mIDItd2F5IGhhbmRzaGFrZSFcbiIsIChNc2dUeXBlIC0gRUFQT0xfUEFJUl9NU0dfNCkpKTsKKwkJCX0KKworCQkJaGV4X2R1bXAoIlJlY2VpdmVkIE1JQyIsIHJjdmRfbWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwkJCWhleF9kdW1wKCJEZXNpcmVkICBNSUMiLCBtaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJCQlyZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKwl9CisKKwkvLyBFeHRyYWN0IHRoZSBjb250ZXh0IG9mIHRoZSBLZXkgRGF0YSBmaWVsZCBpZiBpdCBleGlzdAorCS8vIFRoZSBmaWVsZCBpbiBwYWlyd2lzZV9tc2dfMl9XUEExKFdQQTIpICYgcGFpcndpc2VfbXNnXzNfV1BBMSBpcyB1bi1lbmNyeXB0ZWQuCisJLy8gVGhlIGZpZWxkIGluIGdyb3VwX21zZ18xX1dQQTEoV1BBMikgJiBwYWlyd2lzZV9tc2dfM19XUEEyIGlzIGVuY3J5cHRlZC4KKwlpZiAocE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdID4gMCkKKwl7CisJCS8vIERlY3J5cHQgdGhpcyBmaWVsZAorCQlpZiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyAmJiBiV1BBMikgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCQl7CisJCQlpZihwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJeworCQkJCS8vIEFFUworCQkJCUFFU19HVEtfS0VZX1VOV1JBUCgmcEVudHJ5LT5QVEtbMTZdLCBLRVlEQVRBLCBwTXNnLT5LZXlEZXNjLktleURhdGFMZW5bMV0scE1zZy0+S2V5RGVzYy5LZXlEYXRhKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlJTlQgCWk7CisJCQkJVUNIQVIgICBLZXlbMzJdOworCQkJCS8vIERlY3J5cHQgVEtJUCBHVEsKKwkJCQkvLyBDb25zdHJ1Y3QgMzIgYnl0ZXMgUkM0IEtleQorCQkJCU5kaXNNb3ZlTWVtb3J5KEtleSwgcE1zZy0+S2V5RGVzYy5LZXlJdiwgMTYpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZLZXlbMTZdLCAmcEVudHJ5LT5QVEtbMTZdLCAxNik7CisJCQkJQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIEtleSwgMzIpOworCQkJCS8vZGlzY2FyZCBmaXJzdCAyNTYgYnl0ZXMKKwkJCQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJCQkJQVJDRk9VUl9CWVRFKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQpOworCQkJCS8vIERlY3J5cHQgR1RLLiBCZWNhcmVmdWwsIHRoZXJlIGlzIG5vIElDViB0byBjaGVjayB0aGUgcmVzdWx0IGlzIGNvcnJlY3Qgb3Igbm90CisJCQkJQVJDRk9VUl9ERUNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIEtFWURBVEEsIHBNc2ctPktleURlc2MuS2V5RGF0YSwgcE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdKTsKKwkJCX0KKworCQkJaWYgKCFiV1BBMiAmJiAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpCisJCQkJR3JvdXBLZXlJbmRleCA9IEVhcG9sS2V5SW5mby5LZXlJbmRleDsKKworCQl9CisJCWVsc2UgaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzIpIHx8IChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgIWJXUEEyKSkKKwkJeworCQkJTmRpc01vdmVNZW1vcnkoS0VZREFUQSwgcE1zZy0+S2V5RGVzYy5LZXlEYXRhLCBwTXNnLT5LZXlEZXNjLktleURhdGFMZW5bMV0pOworCQl9CisJCWVsc2UKKwkJeworCisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCisJCS8vIFBhcnNlIEtleSBEYXRhIGZpZWxkIHRvCisJCS8vIDEuIHZlcmlmeSBSU04gSUUgZm9yIHBhaXJ3aXNlX21zZ18yX1dQQTEoV1BBMikgLHBhaXJ3aXNlX21zZ18zX1dQQTEoV1BBMikKKwkJLy8gMi4gdmVyaWZ5IEtERSBmb3JtYXQgZm9yIHBhaXJ3aXNlX21zZ18zX1dQQTIsIGdyb3VwX21zZ18xX1dQQTIKKwkJLy8gMy4gdXBkYXRlIHNoYXJlZCBrZXkgZm9yIHBhaXJ3aXNlX21zZ18zX1dQQTIsIGdyb3VwX21zZ18xX1dQQTEoV1BBMikKKwkJaWYgKCFSVE1QUGFyc2VFYXBvbEtleURhdGEocEFkLCBLRVlEQVRBLCBwTXNnLT5LZXlEZXNjLktleURhdGFMZW5bMV0sIEdyb3VwS2V5SW5kZXgsIE1zZ1R5cGUsIGJXUEEyLCBwRW50cnkpKQorCQl7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwl9CisKKwlyZXR1cm4gVFJVRTsKKworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitCT09MRUFOIE1sbWVEbHNSZXFTYW5pdHkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFJUXzgwMl8xMV9ETFMgKnBETFMsCisgICAgT1VUIFBVU0hPUlQgcFJlYXNvbikKK3sKKwlNTE1FX0RMU19SRVFfU1RSVUNUICpwSW5mbzsKKworICAgIHBJbmZvID0gKE1MTUVfRExTX1JFUV9TVFJVQ1QgKilNc2c7CisKKwkqcERMUyA9IHBJbmZvLT5wRExTOworCSpwUmVhc29uID0gcEluZm8tPlJlYXNvbjsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitCT09MRUFOIFBlZXJEbHNSZXFTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBEQSwKKyAgICBPVVQgUFVDSEFSIHBTQSwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcERsc1RpbWVvdXQsCisgICAgT1VUIFVDSEFSICpwUmF0ZXNMZW4sCisgICAgT1VUIFVDSEFSIFJhdGVzW10sCisJT1VUIFVDSEFSICpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5KQoreworCUNIQVIgICAgICAgICAgICAqUHRyOworICAgIFBGUkFNRV84MDJfMTEJRnIgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisJUEVJRF9TVFJVQ1QgIGVpZF9wdHI7CisKKyAgICAvLyB0byBwcmV2ZW50IGNhbGxlciBmcm9tIHVzaW5nIGdhcmJhZ2Ugb3V0cHV0IHZhbHVlCisgICAgKnBDYXBhYmlsaXR5SW5mbwk9IDA7CisgICAgKnBEbHNUaW1lb3V0CT0gMDsKKwkqcEh0Q2FwYWJpbGl0eUxlbiA9IDA7CisKKyAgICBQdHIgPSBGci0+T2N0ZXQ7CisKKwkvLyBvZmZzZXQgdG8gZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgKENhdGVnb3J5IGFuZCBBY3Rpb24gZmllbGQpCisgICAgUHRyICs9IDI7CisKKyAgICAvLyBnZXQgREEgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocERBLCBQdHIsIE1BQ19BRERSX0xFTik7CisgICAgUHRyICs9IE1BQ19BRERSX0xFTjsKKworICAgIC8vIGdldCBTQSBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwU0EsIFB0ciwgTUFDX0FERFJfTEVOKTsKKyAgICBQdHIgKz0gTUFDX0FERFJfTEVOOworCisgICAgLy8gZ2V0IGNhcGFiaWxpdHkgaW5mbyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwQ2FwYWJpbGl0eUluZm8sIFB0ciwgMik7CisgICAgUHRyICs9IDI7CisKKyAgICAvLyBnZXQgY2FwYWJpbGl0eSBpbmZvIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBEbHNUaW1lb3V0LCBQdHIsIDIpOworICAgIFB0ciArPSAyOworCisJLy8gQ2F0ZWdvcnkgYW5kIEFjdGlvbiBmaWVsZCArIERBICsgU0EgKyBjYXBhYmlsaXR5ICsgVGltZW91dAorCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpICZGci0+T2N0ZXRbMThdOworCisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoVUNIQVIqKUZyICsgTXNnTGVuKSkKKwl7CisJCXN3aXRjaChlaWRfcHRyLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZiAoKGVpZF9wdHItPkxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykgJiYgKGVpZF9wdHItPkxlbiA+IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoUmF0ZXMsIGVpZF9wdHItPk9jdGV0LCBlaWRfcHRyLT5MZW4pOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUmVxU2FuaXR5IC0gSUVfU1VQUF9SQVRFUy4sIExlbj0lZC4gUmF0ZXNbMF09JXhcbiIsZWlkX3B0ci0+TGVuLCBSYXRlc1swXSkpOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYXRlc1sxXT0leCAleCAleCAleCAleCAleCAleFxuIiwgUmF0ZXNbMV0sIFJhdGVzWzJdLCBSYXRlc1szXSwgUmF0ZXNbNF0sIFJhdGVzWzVdLCBSYXRlc1s2XSwgUmF0ZXNbN10pKTsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9IGVpZF9wdHItPkxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9IDg7CisJCQkJCVJhdGVzWzBdID0gMHg4MjsKKwkJCQkJUmF0ZXNbMV0gPSAweDg0OworCQkJCQlSYXRlc1syXSA9IDB4OGI7CisJCQkJCVJhdGVzWzNdID0gMHg5NjsKKwkJCQkJUmF0ZXNbNF0gPSAweDEyOworCQkJCQlSYXRlc1s1XSA9IDB4MjQ7CisJCQkJCVJhdGVzWzZdID0gMHg0ODsKKwkJCQkJUmF0ZXNbN10gPSAweDZjOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUmVxU2FuaXR5IC0gd3JvbmcgSUVfU1VQUF9SQVRFUy4sIExlbj0lZFxuIixlaWRfcHRyLT5MZW4pKTsKKyAgICAgICAgICAgICAgICB9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfRVhUX1NVUFBfUkFURVM6CisgICAgICAgICAgICAgICAgaWYgKGVpZF9wdHItPkxlbiArICpwUmF0ZXNMZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmUmF0ZXNbKnBSYXRlc0xlbl0sIGVpZF9wdHItPk9jdGV0LCBlaWRfcHRyLT5MZW4pOworICAgICAgICAgICAgICAgICAgICAqcFJhdGVzTGVuID0gKCpwUmF0ZXNMZW4pICsgZWlkX3B0ci0+TGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmUmF0ZXNbKnBSYXRlc0xlbl0sIGVpZF9wdHItPk9jdGV0LCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyAtICgqcFJhdGVzTGVuKSk7CisgICAgICAgICAgICAgICAgICAgICpwUmF0ZXNMZW4gPSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsKKyAgICAgICAgICAgICAgICB9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfSFRfQ0FQOgorCQkJCWlmIChlaWRfcHRyLT5MZW4gPj0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKQorCQkJCXsKKwkJCQkJTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwgZWlkX3B0ci0+T2N0ZXQsIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisKKwkJCQkJKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSk7CisJCQkJCSooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykpOworCQkJCQkqcEh0Q2FwYWJpbGl0eUxlbiA9IHNpemVvZihIVF9DQVBBQklMSVRZX0lFKTsKKworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUmVxU2FuaXR5IC0gSUVfSFRfQ0FQXG4iKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSZXFTYW5pdHkgLSB3cm9uZyBJRV9IVF9DQVAuZWlkX3B0ci0+TGVuID0gJWRcbiIsIGVpZF9wdHItPkxlbikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCisJCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOworCX0KKworICAgIHJldHVybiBUUlVFOworfQorCitCT09MRUFOIFBlZXJEbHNSc3BTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBEQSwKKyAgICBPVVQgUFVDSEFSIHBTQSwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcFN0YXR1cywKKyAgICBPVVQgVUNIQVIgKnBSYXRlc0xlbiwKKyAgICBPVVQgVUNIQVIgUmF0ZXNbXSwKKyAgICBPVVQgVUNIQVIgKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHkpCit7CisgICAgQ0hBUiAgICAgICAgICAgICpQdHI7CisgICAgUEZSQU1FXzgwMl8xMQlGciA9IChQRlJBTUVfODAyXzExKU1zZzsKKwlQRUlEX1NUUlVDVCAgZWlkX3B0cjsKKworICAgIC8vIHRvIHByZXZlbnQgY2FsbGVyIGZyb20gdXNpbmcgZ2FyYmFnZSBvdXRwdXQgdmFsdWUKKyAgICAqcFN0YXR1cwkJPSAwOworICAgICpwQ2FwYWJpbGl0eUluZm8JPSAwOworCSpwSHRDYXBhYmlsaXR5TGVuID0gMDsKKworICAgIFB0ciA9IEZyLT5PY3RldDsKKworCS8vIG9mZnNldCB0byBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyAoQ2F0ZWdvcnkgYW5kIEFjdGlvbiBmaWVsZCkKKyAgICBQdHIgKz0gMjsKKworCS8vIGdldCBzdGF0dXMgY29kZSBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwU3RhdHVzLCBQdHIsIDIpOworICAgIFB0ciArPSAyOworCisgICAgLy8gZ2V0IERBIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBEQSwgUHRyLCBNQUNfQUREUl9MRU4pOworICAgIFB0ciArPSBNQUNfQUREUl9MRU47CisKKyAgICAvLyBnZXQgU0EgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocFNBLCBQdHIsIE1BQ19BRERSX0xFTik7CisgICAgUHRyICs9IE1BQ19BRERSX0xFTjsKKworCWlmIChwU3RhdHVzID09IDApCisJeworCSAgICAvLyBnZXQgY2FwYWJpbGl0eSBpbmZvIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorCSAgICBOZGlzTW92ZU1lbW9yeShwQ2FwYWJpbGl0eUluZm8sIFB0ciwgMik7CisJICAgIFB0ciArPSAyOworCX0KKworCS8vIENhdGVnb3J5IGFuZCBBY3Rpb24gZmllbGQgKyBzdGF0dXMgY29kZSArIERBICsgU0EgKyBjYXBhYmlsaXR5CisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVCkgJkZyLT5PY3RldFsxOF07CisKKwl3aGlsZSAoKChVQ0hBUiopZWlkX3B0ciArIGVpZF9wdHItPkxlbiArIDEpIDwgKChVQ0hBUiopRnIgKyBNc2dMZW4pKQorCXsKKwkJc3dpdGNoKGVpZF9wdHItPkVpZCkKKwkJeworCQkJY2FzZSBJRV9TVVBQX1JBVEVTOgorICAgICAgICAgICAgICAgIGlmICgoZWlkX3B0ci0+TGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKSAmJiAoZWlkX3B0ci0+TGVuID4gMCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShSYXRlcywgZWlkX3B0ci0+T2N0ZXQsIGVpZF9wdHItPkxlbik7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSc3BTYW5pdHkgLSBJRV9TVVBQX1JBVEVTLiwgTGVuPSVkLiBSYXRlc1swXT0leFxuIixlaWRfcHRyLT5MZW4sIFJhdGVzWzBdKSk7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhdGVzWzFdPSV4ICV4ICV4ICV4ICV4ICV4ICV4XG4iLCBSYXRlc1sxXSwgUmF0ZXNbMl0sIFJhdGVzWzNdLCBSYXRlc1s0XSwgUmF0ZXNbNV0sIFJhdGVzWzZdLCBSYXRlc1s3XSkpOworICAgICAgICAgICAgICAgICAgICAqcFJhdGVzTGVuID0gZWlkX3B0ci0+TGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcFJhdGVzTGVuID0gODsKKwkJCQkJUmF0ZXNbMF0gPSAweDgyOworCQkJCQlSYXRlc1sxXSA9IDB4ODQ7CisJCQkJCVJhdGVzWzJdID0gMHg4YjsKKwkJCQkJUmF0ZXNbM10gPSAweDk2OworCQkJCQlSYXRlc1s0XSA9IDB4MTI7CisJCQkJCVJhdGVzWzVdID0gMHgyNDsKKwkJCQkJUmF0ZXNbNl0gPSAweDQ4OworCQkJCQlSYXRlc1s3XSA9IDB4NmM7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSc3BTYW5pdHkgLSB3cm9uZyBJRV9TVVBQX1JBVEVTLiwgTGVuPSVkXG4iLGVpZF9wdHItPkxlbikpOworICAgICAgICAgICAgICAgIH0KKwkJCQlicmVhazsKKworCQkJY2FzZSBJRV9FWFRfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZiAoZWlkX3B0ci0+TGVuICsgKnBSYXRlc0xlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZSYXRlc1sqcFJhdGVzTGVuXSwgZWlkX3B0ci0+T2N0ZXQsIGVpZF9wdHItPkxlbik7CisgICAgICAgICAgICAgICAgICAgICpwUmF0ZXNMZW4gPSAoKnBSYXRlc0xlbikgKyBlaWRfcHRyLT5MZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZSYXRlc1sqcFJhdGVzTGVuXSwgZWlkX3B0ci0+T2N0ZXQsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTIC0gKCpwUmF0ZXNMZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOworICAgICAgICAgICAgICAgIH0KKwkJCQlicmVhazsKKworCQkJY2FzZSBJRV9IVF9DQVA6CisJCQkJaWYgKGVpZF9wdHItPkxlbiA+PSBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpCisJCQkJeworCQkJCQlOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCBlaWRfcHRyLT5PY3RldCwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKworCQkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pKTsKKwkJCQkJKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvKSk7CisJCQkJCSpwSHRDYXBhYmlsaXR5TGVuID0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpOworCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSc3BTYW5pdHkgLSBJRV9IVF9DQVBcbiIpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckRsc1JzcFNhbml0eSAtIHdyb25nIElFX0hUX0NBUC5laWRfcHRyLT5MZW4gPSAlZFxuIiwgZWlkX3B0ci0+TGVuKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisKKwkJZWlkX3B0ciA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKillaWRfcHRyICsgMiArIGVpZF9wdHItPkxlbik7CisJfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0JPT0xFQU4gUGVlckRsc1RlYXJEb3duU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwREEsCisgICAgT1VUIFBVQ0hBUiBwU0EsCisgICAgT1VUIFVTSE9SVCAqcFJlYXNvbikKK3sKKyAgICBDSEFSICAgICAgICAgICAgKlB0cjsKKyAgICBQRlJBTUVfODAyXzExCUZyID0gKFBGUkFNRV84MDJfMTEpTXNnOworCisgICAgLy8gdG8gcHJldmVudCBjYWxsZXIgZnJvbSB1c2luZyBnYXJiYWdlIG91dHB1dCB2YWx1ZQorICAgICpwUmVhc29uCT0gMDsKKworICAgIFB0ciA9IEZyLT5PY3RldDsKKworCS8vIG9mZnNldCB0byBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyAoQ2F0ZWdvcnkgYW5kIEFjdGlvbiBmaWVsZCkKKyAgICBQdHIgKz0gMjsKKworICAgIC8vIGdldCBEQSBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwREEsIFB0ciwgTUFDX0FERFJfTEVOKTsKKyAgICBQdHIgKz0gTUFDX0FERFJfTEVOOworCisgICAgLy8gZ2V0IFNBIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBTQSwgUHRyLCBNQUNfQUREUl9MRU4pOworICAgIFB0ciArPSBNQUNfQUREUl9MRU47CisKKwkvLyBnZXQgcmVhc29uIGNvZGUgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocFJlYXNvbiwgUHRyLCAyKTsKKyAgICBQdHIgKz0gMjsKKworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fc3luYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3N5bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmU3Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3N5bmMuYwpAQCAtMCwwICsxLDcxMSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlzeW5jLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huIENoYW5nCTIwMDQtMDktMDEgICAgICBtb2RpZmllZCBmb3IgcnQyNTYxLzI2NjEKKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKy8vIDIuNCBHaHogY2hhbm5lbCBwbGFuIGluZGV4IGluIHRoZSBUeFBvd2VyIGFycmF5cy4KKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fMF9TVEFSVAkwCQkJLy8gMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fMF9TSVpFCTExCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzFfU1RBUlQJMAkJCS8vIDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzFfU0laRQkxMworI2RlZmluZQlCR19CQU5EX1JFR0lPTl8yX1NUQVJUCTkJCQkvLyAxMCwxMQorI2RlZmluZQlCR19CQU5EX1JFR0lPTl8yX1NJWkUJMgorI2RlZmluZQlCR19CQU5EX1JFR0lPTl8zX1NUQVJUCTkJCQkvLyAxMCwxMSwxMiwxMworI2RlZmluZQlCR19CQU5EX1JFR0lPTl8zX1NJWkUJNAorI2RlZmluZQlCR19CQU5EX1JFR0lPTl80X1NUQVJUCTEzCQkJLy8gMTQKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNF9TSVpFCTEKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNV9TVEFSVAkwCQkJLy8gMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNV9TSVpFCTE0CisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzZfU1RBUlQJMgkJCS8vIDMsNCw1LDYsNyw4LDkKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNl9TSVpFCTcKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fN19TVEFSVAk0CQkJLy8gNSw2LDcsOCw5LDEwLDExLDEyLDEzCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzdfU0laRQk5CisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzMxX1NUQVJUCTAJCQkvLyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNAorI2RlZmluZQlCR19CQU5EX1JFR0lPTl8zMV9TSVpFCTE0CisKKy8vIDUgR2h6IGNoYW5uZWwgcGxhbiBpbmRleCBpbiB0aGUgVHhQb3dlciBhcnJheXMuCitVQ0hBUiBBX0JBTkRfUkVHSU9OXzBfQ0hBTk5FTF9MSVNUW109ezM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjV9OworVUNIQVIgQV9CQU5EX1JFR0lPTl8xX0NIQU5ORUxfTElTVFtdPXszNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwfTsKK1VDSEFSIEFfQkFORF9SRUdJT05fMl9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fM19DSEFOTkVMX0xJU1RbXT17NTIsIDU2LCA2MCwgNjQsIDE0OSwgMTUzLCAxNTcsIDE2MX07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzRfQ0hBTk5FTF9MSVNUW109ezE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fNV9DSEFOTkVMX0xJU1RbXT17MTQ5LCAxNTMsIDE1NywgMTYxfTsKK1VDSEFSIEFfQkFORF9SRUdJT05fNl9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDh9OworVUNIQVIgQV9CQU5EX1JFR0lPTl83X0NIQU5ORUxfTElTVFtdPXszNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwLCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NX07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzhfQ0hBTk5FTF9MSVNUW109ezUyLCA1NiwgNjAsIDY0fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fOV9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTMyLCAxMzYsIDE0MCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjV9OworVUNIQVIgQV9CQU5EX1JFR0lPTl8xMF9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDgsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fMTFfQ0hBTk5FTF9MSVNUW109ezM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTQ5LCAxNTMsIDE1NywgMTYxfTsKKworLy9CYVNpemVBcnJheSBmb2xsb3dzIHRoZSA4MDIuMTFuIGRlZmluaXRpb24gYXMgTWF4UnhGYWN0b3IuICAyXigxMytmYWN0b3IpIGJ5dGVzLiBXaGVuIGZhY3RvciA9MCwgaXQncyBhYm91dCBCYSBidWZmZXIgc2l6ZSA9OC4KK1VDSEFSIEJhU2l6ZUFycmF5WzRdID0gezgsMTYsMzIsNjR9OworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVVwZGF0ZSBTdGFDZmctPkNoYW5uZWxMaXN0W10gYWNjb3JkaW5nIHRvIDEpIENvdW50cnkgUmVnaW9uIDIpIFJGIElDIHR5cGUsCisJCWFuZCAzKSBQSFktbW9kZSB1c2VyIHNlbGVjdGVkLgorCQlUaGUgb3V0Y29tZSBpcyB1c2VkIGJ5IGRyaXZlciB3aGVuIGRvaW5nIHNpdGUgc3VydmV5LgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQnVpbGRDaGFubmVsTGlzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVQ0hBUiBpLCBqLCBpbmRleD0wLCBudW09MDsKKwlQVUNIQVIJcENoYW5uZWxMaXN0ID0gTlVMTDsKKworCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q2hhbm5lbExpc3QsIE1BWF9OVU1fT0ZfQ0hBTk5FTFMgKiBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikpOworCisJLy8gaWYgbm90IDExYS1vbmx5IG1vZGUsIGNoYW5uZWwgbGlzdCBzdGFydHMgZnJvbSAyLjRHaHogYmFuZAorCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSAhPSBQSFlfMTFBKQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSAhPSBQSFlfMTFBTl9NSVhFRCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgIT0gUEhZXzExTl81RykKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkpCisJeworCQlzd2l0Y2ggKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gICYgMHg3ZikKKwkJeworCQkJY2FzZSBSRUdJT05fMF9CR19CQU5EOgkvLyAxIC0xMQorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl8wX1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fMF9TSVpFKTsKKwkJCQlpbmRleCArPSBCR19CQU5EX1JFR0lPTl8wX1NJWkU7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl8xX0JHX0JBTkQ6CS8vIDEgLSAxMworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl8xX1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fMV9TSVpFKTsKKwkJCQlpbmRleCArPSBCR19CQU5EX1JFR0lPTl8xX1NJWkU7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl8yX0JHX0JBTkQ6CS8vIDEwIC0gMTEKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fMl9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzJfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMl9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fM19CR19CQU5EOgkvLyAxMCAtIDEzCisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLCAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzNfU1RBUlRdLCBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikgKiBCR19CQU5EX1JFR0lPTl8zX1NJWkUpOworCQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzNfU0laRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzRfQkdfQkFORDoJLy8gMTQKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fNF9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzRfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fNF9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fNV9CR19CQU5EOgkvLyAxIC0gMTQKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fNV9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzVfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fNV9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fNl9CR19CQU5EOgkvLyAzIC0gOQorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl82X1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fNl9TSVpFKTsKKwkJCQlpbmRleCArPSBCR19CQU5EX1JFR0lPTl82X1NJWkU7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl83X0JHX0JBTkQ6ICAvLyA1IC0gMTMKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fN19TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzdfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fN19TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fMzFfQkdfQkFORDoJLy8gMSAtIDE0CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLCAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzMxX1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fMzFfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMzFfU0laRTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6ICAgICAgICAgICAgLy8gRXJyb3IuIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJCQlicmVhazsKKwkJfQorCQlmb3IgKGk9MDsgaTxpbmRleDsgaSsrKQorCQkJcEFkLT5DaGFubmVsTGlzdFtpXS5NYXhUeFB3ciA9IDIwOworCX0KKworCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBKSB8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdfTUlYRUQpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCXx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFOX01JWEVEKQorCQl8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBR05fTUlYRUQpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fNUcpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJKQorCXsKKwkJc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQgJiAweDdmKQorCQl7CisJCQljYXNlIFJFR0lPTl8wX0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl8wX0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzBfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fMV9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fMV9DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8xX0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzJfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzJfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fMl9DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl8zX0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl8zX0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzNfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fNF9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fNF9DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl80X0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzVfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzVfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fNV9DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl82X0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl82X0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzZfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fN19BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fN19DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl83X0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzhfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzhfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fOF9DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl85X0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl85X0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzlfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFR0lPTl8xMF9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fMTBfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fMTBfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFR0lPTl8xMV9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fMTFfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fMTFfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OiAgICAgICAgICAgIC8vIEVycm9yLiBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwoImNvdW50cnlyZWdpb249JWQgbm90IHN1cHBvcnQiLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQpKTsKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChudW0gIT0gMCkKKwkJeworCQkJVUNIQVIgUmFkYXJDaFsxNV09ezUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MH07CisJCQlmb3IgKGk9MDsgaTxudW07IGkrKykKKwkJCXsKKwkJCQlmb3IgKGo9MDsgajxNQVhfTlVNX09GX0NIQU5ORUxTOyBqKyspCisJCQkJeworCQkJCQlpZiAocENoYW5uZWxMaXN0W2ldID09IHBBZC0+VHhQb3dlcltqXS5DaGFubmVsKQorCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXgraV0sICZwQWQtPlR4UG93ZXJbal0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSk7CisJCQkJCX0KKwkJCQlmb3IgKGo9MDsgajwxNTsgaisrKQorCQkJCXsKKwkJCQkJaWYgKHBDaGFubmVsTGlzdFtpXSA9PSBSYWRhckNoW2pdKQorCQkJCQkJcEFkLT5DaGFubmVsTGlzdFtpbmRleCtpXS5EZnNSZXEgPSBUUlVFOworCQkJCX0KKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2luZGV4K2ldLk1heFR4UHdyID0gMjA7CisJCQl9CisJCQlpbmRleCArPSBudW07CisJCX0KKwl9CisKKwlwQWQtPkNoYW5uZWxMaXN0TnVtID0gaW5kZXg7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJjb3VudHJ5IGNvZGU9JWQvJWQsIFJGSUM9JWQsIFBIWSBtb2RlPSVkLCBzdXBwb3J0ICVkIGNoYW5uZWxzXG4iLAorCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQsIHBBZC0+UmZJY1R5cGUsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUsIHBBZC0+Q2hhbm5lbExpc3ROdW0pKTsKKyNpZmRlZiBEQkcKKwlmb3IgKGk9MDtpPHBBZC0+Q2hhbm5lbExpc3ROdW07aSsrKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiQnVpbGRDaGFubmVsICMgJWQgOjogUHdyMCA9ICVkLCBQd3IxID0lZCwgXG4gIiwgcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsLCBwQWQtPkNoYW5uZWxMaXN0W2ldLlBvd2VyLCBwQWQtPkNoYW5uZWxMaXN0W2ldLlBvd2VyMikpOworCX0KKyNlbmRpZgorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSByZXR1cm4gdGhlIGZpcnN0IGNoYW5uZWwgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgY291bnRyeQorCQljb2RlIHNlbGVjdGlvbiBhbmQgUkYgSUMgc2VsZWN0aW9uIChzaWduYWwgYmFuZCBvciBkdWFsIGJhbmQpLiBJdCBpcyBjYWxsZWQKKwkJd2hlbmV2ZXIgZHJpdmVyIG5lZWQgdG8gc3RhcnQgYSBzaXRlIHN1cnZleSBvZiBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzLgorCVJldHVybjoKKwkJY2ggLSB0aGUgZmlyc3QgY2hhbm5lbCBudW1iZXIgb2YgY3VycmVudCBjb3VudHJ5IGNvZGUgc2V0dGluZworCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1VDSEFSIEZpcnN0Q2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlyZXR1cm4gcEFkLT5DaGFubmVsTGlzdFswXS5DaGFubmVsOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBuZXh0IGNoYW5uZWwgbnVtYmVyLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkCisJCWR1cmluZyBkcml2ZXIgbmVlZCB0byBzdGFydCBhIHNpdGUgc3VydmV5IG9mIGFsbCBzdXBwb3J0ZWQgY2hhbm5lbHMuCisJUmV0dXJuOgorCQluZXh0X2NoYW5uZWwgLSB0aGUgbmV4dCBjaGFubmVsIG51bWJlciB2YWxpZCBpbiBjdXJyZW50IGNvdW50cnkgY29kZSBzZXR0aW5nLgorCU5vdGU6CisJCXJldHVybiAwIGlmIG5vIG1vcmUgbmV4dCBjaGFubmVsCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVUNIQVIgTmV4dENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgY2hhbm5lbCkKK3sKKwlpbnQgaTsKKwlVQ0hBUiBuZXh0X2NoYW5uZWwgPSAwOworCisJZm9yIChpID0gMDsgaSA8IChwQWQtPkNoYW5uZWxMaXN0TnVtIC0gMSk7IGkrKykKKwkJaWYgKGNoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQorCQl7CisJCQluZXh0X2NoYW5uZWwgPSBwQWQtPkNoYW5uZWxMaXN0W2krMV0uQ2hhbm5lbDsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbmV4dF9jaGFubmVsOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBpcyBmb3IgQ2lzY28gQ29tcGF0aWJsZSBFeHRlbnNpb25zIDIuWAorCQlTcGVjMzEuIEFQIENvbnRyb2wgb2YgQ2xpZW50IFRyYW5zbWl0IFBvd2VyCisJUmV0dXJuOgorCQlOb25lCisJTm90ZToKKwkgICBSZXF1aXJlZCBieSBBaXJvbmV0IGRCbShtVykKKwkJICAgMGRCbSgxbVcpLCAgIDFkQm0oNW1XKSwgMTNkQm0oMjBtVyksIDE1ZEJtKDMwbVcpLAorCQkgIDE3ZEJtKDUwbXcpLCAyMGRCbSgxMDBtVykKKworCSAgIFdlIHN1cHBvcnRlZAorCQkgICAzZEJtKExvd2VzdCksIDZkQm0oMTAlKSwgOWRCbSgyNSUpLCAxMmRCbSg1MCUpLAorCQkgIDE0ZEJtKDc1JSksICAgMTVkQm0oMTAwJSkKKworCQlUaGUgY2xpZW50IHN0YXRpb24ncyBhY3R1YWwgdHJhbnNtaXQgcG93ZXIgc2hhbGwgYmUgd2l0aGluICsvLSA1ZEIgb2YKKwkJdGhlIG1pbmltdW0gdmFsdWUgb3IgbmV4dCBsb3dlciB2YWx1ZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIENoYW5nZVRvQ2VsbFBvd2VyTGltaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgICAgICAgICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQpCit7CisJLy92YWx1ZCAweEZGIG1lYW5zIHRoYXQgaGFzbid0IGZvdW5kIHBvd2VyIGxpbWl0IGluZm9ybWF0aW9uCisJLy9mcm9tIHRoZSBBUCdzIEJlYWNvbi9Qcm9iZSByZXNwb25zZS4KKwlpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0ID09IDB4RkYpCisJCXJldHVybjsKKworCWlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPCA2KSAvL1VzZWQgTG93ZXN0IFBvd2VyIFBlcmNlbnRhZ2UuCisJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gNjsKKwllbHNlIGlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPCA5KQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDEwOworCWVsc2UgaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA8IDEyKQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDI1OworCWVsc2UgaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA8IDE0KQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDUwOworCWVsc2UgaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA8IDE1KQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDc1OworCWVsc2UKKwkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSAxMDA7IC8vZWxzZSB1c2VkIG1heGltdW0KKworCWlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0KQorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0OworCit9CisKK0NIQVIJQ29udmVydFRvUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglDSEFSCQkJUnNzaSwKKwlJTiAgVUNIQVIgICBSc3NpTnVtYmVyKQoreworCVVDSEFSCVJzc2lPZmZzZXQsIExOQUdhaW47CisKKwkvLyBSc3NpIGVxdWFscyB0byB6ZXJvIHNob3VsZCBiZSBhbiBpbnZhbGlkIHZhbHVlCisJaWYgKFJzc2kgPT0gMCkKKwkJcmV0dXJuIC05OTsKKworCUxOQUdhaW4gPSBHRVRfTE5BX0dBSU4ocEFkKTsKKyAgICBpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID4gMTQpCisgICAgeworICAgICAgICBpZiAoUnNzaU51bWJlciA9PSAwKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDE7CisJCWVsc2UKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKFJzc2lOdW1iZXIgPT0gMCkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkJHUnNzaU9mZnNldDA7CisJCWVsc2UgaWYgKFJzc2lOdW1iZXIgPT0gMSkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkJHUnNzaU9mZnNldDE7CisJCWVsc2UKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkJHUnNzaU9mZnNldDI7CisgICAgfQorCisgICAgcmV0dXJuICgtMTIgLSBSc3NpT2Zmc2V0IC0gTE5BR2FpbiAtIFJzc2kpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVNjYW4gbmV4dCBjaGFubmVsCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBTY2FuTmV4dENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJSEVBREVSXzgwMl8xMSAgIEhkcjgwMjExOworCVBVQ0hBUiAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUyAgICAgTlN0YXR1czsKKwlVTE9ORyAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCVVDSEFSICAgICAgICAgICBTc2lkTGVuID0gMCwgU2NhblR5cGUgPSBwQWQtPk1sbWVBdXguU2NhblR5cGUsIEJCUFZhbHVlID0gMDsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlVU0hPUlQgICAgICAgICAgU3RhdHVzOworCVBIRUFERVJfODAyXzExICBwSGRyODAyMTE7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJVUlOVAkJCVNjYW5UaW1lSW41Z0NoYW5uZWwgPSBTSE9SVF9DSEFOTkVMX1RJTUU7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJCXJldHVybjsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBSQUxJTktfQVRFCisJLy8gTm90aGluZyB0byBkbyBpbiBBVEUgbW9kZS4KKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwlpZiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPT0gMCkKKwl7CisJCWlmICgocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJJiYgKElORlJBX09OKHBBZCkKKwkJCQl8fCAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKSkKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCSkKKwkJeworCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOworCQkJQkJQVmFsdWUgJj0gKH4weDE4KTsKKwkJCUJCUFZhbHVlIHw9IDB4MTA7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gRW5kIG9mIFNDQU4sIHJlc3RvcmUgdG8gNDBNSHogY2hhbm5lbCAlZCwgVG90YWwgQlNTWyUwMmRdXG4iLHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBwQWQtPlNjYW5UYWIuQnNzTnIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gRW5kIG9mIFNDQU4sIHJlc3RvcmUgdG8gY2hhbm5lbCAlZCwgVG90YWwgQlNTWyUwMmRdXG4iLHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHBBZC0+U2NhblRhYi5Cc3NOcikpOworCQl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJLy8KKwkJCS8vIFRvIHByZXZlbnQgZGF0YSBsb3N0LgorCQkJLy8gU2VuZCBhbiBOVUxMIGRhdGEgd2l0aCB0dXJuZWQgUFNNIGJpdCBvbiB0byBjdXJyZW50IGFzc29jaWF0ZWQgQVAgYmVmb3JlIFNDQU4gcHJvZ3Jlc3MuCisJCQkvLyBOb3csIHdlIG5lZWQgdG8gc2VuZCBhbiBOVUxMIGRhdGEgd2l0aCB0dXJuZWQgUFNNIGJpdCBvZmYgdG8gQVAsIHdoZW4gc2NhbiBwcm9ncmVzcyBkb25lCisJCQkvLworCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSAmJiAoSU5GUkFfT04ocEFkKSkpCisJCQl7CisJCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7CisJCQkJaWYgKE5TdGF0dXMJPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQl7CisJCQkJCXBIZHI4MDIxMSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJCQkJTWd0TWFjSGVhZGVySW5pdChwQWQsIHBIZHI4MDIxMSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQkJCXBIZHI4MDIxMS0+RHVyYXRpb24gPSAwOworCQkJCQlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9EQVRBOworCQkJCQlwSGRyODAyMTEtPkZDLlB3ck1nbXQgPSAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKTsKKworCQkJCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCQkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVNjYW5SZXFBY3Rpb24gLS0gU2VuZCBQU00gRGF0YSBmcmFtZVxuIikpOworCQkJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQkJCX0KKwkJCX0KKworCQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJCVN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX0NPTkYsIDIsICZTdGF0dXMpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKKwl9CisjaWZkZWYgUlQyODcwCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJZWxzZSBpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKwl7CisJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCU1sbWVDbnRsQ29uZmlybShwQWQsIE1UMl9TQ0FOX0NPTkYsIE1MTUVfRkFJTF9OT19SRVNPVVJDRSk7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCWVsc2UKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJLy8gQkJQIGFuZCBSRiBhcmUgbm90IGFjY2Vzc2libGUgaW4gUFMgbW9kZSwgd2UgaGFzIHRvIHdha2UgdGhlbSB1cCBmaXJzdAorCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwkJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworCisJCQkvLyBsZWF2ZSBQU00gZHVyaW5nIHNjYW5uaW5nLiBvdGhlcndpc2Ugd2UgbWF5IGxvc3QgUHJvYmVSc3AgJiBCRUFDT04KKwkJCWlmIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpCisJCQkJTWxtZVNldFBzbUJpdChwQWQsIFBXUl9BQ1RJVkUpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCwgVFJVRSk7CisJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlpZiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPiAxNCkKKwkJCXsKKwkJCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpKQorCQkJCXsKKwkJCQkJU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CisJCQkJCVNjYW5UaW1lSW41Z0NoYW5uZWwgPSBNSU5fQ0hBTk5FTF9USU1FOworCQkJCX0KKwkJCX0KKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8gUm9nZXIgc3luYyBDYXJyaWVyCisJCQkvLyBjYXJyaWVyIGRldGVjdGlvbgorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID09IFRSVUUpCisJCQl7CisJCQkJU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CisJCQkJU2NhblRpbWVJbjVnQ2hhbm5lbCA9IE1JTl9DSEFOTkVMX1RJTUU7CisJCQl9CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCQl9CisKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkvL0dsb2JhbCBjb3VudHJ5IGRvbWFpbihjaDEtMTE6YWN0aXZlIHNjYW4sIGNoMTItMTQgcGFzc2l2ZSBzY2FuKQorCQlpZiAoKHBBZC0+TWxtZUF1eC5DaGFubmVsIDw9IDE0KSAmJiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPj0gMTIpICYmICgocEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiAmIDB4N2YpID09IFJFR0lPTl8zMV9CR19CQU5EKSkKKwkJeworCQkJU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7CisJCX0KKworCQkvLyBXZSBuZWVkIHRvIHNob3J0ZW4gYWN0aXZlIHNjYW4gdGltZSBpbiBvcmRlciBmb3IgV1pDIGNvbm5lY3QgaXNzdWUKKwkJLy8gQ2huYWdlIHRoZSBjaGFubmVsIHNjYW4gdGltZSBmb3IgQ0lTQ08gc3R1ZmYgYmFzZWQgb24gaXRzIElBUFAgYW5ub3VuY2VtZW50CisJCWlmIChTY2FuVHlwZSA9PSBGQVNUX1NDQU5fQUNUSVZFKQorCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBGQVNUX0FDVElWRV9TQ0FOX1RJTUUpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQllbHNlIGlmICgoKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQUNUSVZFKSB8fAorCQkJCShTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX1BBU1NJVkUpIHx8CisJCQkJKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKSB8fAorCQkJCShTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX05PSVNFKSkgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuQ0NYU2NhblRpbWUgPCAyNSkKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsIHBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lICogMik7CisJCQllbHNlCisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSk7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJZWxzZSAvLyBtdXN0IGJlIFNDQU5fUEFTU0lWRSBvciBTQ0FOX0FDVElWRQorCQl7CisJCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVEKQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCXx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFHTl9NSVhFRCkKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCSkKKwkJCXsKKwkJCQlpZiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPiAxNCkKKwkJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBTY2FuVGltZUluNWdDaGFubmVsKTsKKwkJCQllbHNlCisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBNSU5fQ0hBTk5FTF9USU1FKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsIE1BWF9DSEFOTkVMX1RJTUUpOworCQl9CisKKwkJaWYgKChTY2FuVHlwZSA9PSBTQ0FOX0FDVElWRSkgfHwgKFNjYW5UeXBlID09IEZBU1RfU0NBTl9BQ1RJVkUpIHx8CisJCQkoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19BQ1RJVkUpKQorCQl7CisJCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQkJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gU2Nhbk5leHRDaGFubmVsKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxcbiIpKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCXsKKwkJCQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJCQkJU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworCQkJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU0NBTl9DT05GLCAyLCAmU3RhdHVzKTsKKwkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCBicm9hZGNhc3QgcHJvYmUgcmVxdWVzdCBpZiBhY3RpdmUgc2NhbiBpcyBpbiBlZmZlY3QuCisJCQlpZiAoKFNjYW5UeXBlID09IFNDQU5fQUNUSVZFKSB8fCAoU2NhblR5cGUgPT0gRkFTVF9TQ0FOX0FDVElWRSkKKwkJCQkpCisJCQkJU3NpZExlbiA9IHBBZC0+TWxtZUF1eC5Tc2lkTGVuOworCQkJZWxzZQorCQkJCVNzaWRMZW4gPSAwOworCisJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkhkcjgwMjExLCBTVUJUWVBFX1BST0JFX1JFUSwgMCwgQlJPQURDQVNUX0FERFIsIEJST0FEQ0FTVF9BRERSKTsKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkJCSAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCAgICAmSGRyODAyMTEsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkTGVuLAorCQkJCQkJCSAgU3NpZExlbiwJCQkgICAgICAgIHBBZC0+TWxtZUF1eC5Tc2lkLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbiwKKwkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW4sICBwQWQtPkNvbW1vbkNmZy5TdXBSYXRlLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCisJCQlpZiAocEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbikKKwkJCXsKKwkJCQlVTE9ORyBUbXA7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXAsCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlSWUsCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuLAorCQkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW4sICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcDsKKwkJCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkKKwkJCXsKKwkJCQlVTE9ORwlUbXA7CisJCQkJVUNIQVIJSHRMZW47CisJCQkJVUNIQVIJQlJPQURDT01bNF0gPSB7MHgwLCAweDkwLCAweDRjLCAweDMzfTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQkJSFRfQ0FQQUJJTElUWV9JRSBIdENhcGFiaWxpdHlUbXA7CisjZW5kaWYKKwkJCQlpZiAocEFkLT5iQnJvYWRDb21IVCA9PSBUUlVFKQorCQkJCXsKKwkJCQkJSHRMZW4gPSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuICsgNDsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZIdENhcGFiaWxpdHlUbXAsICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LCBTSVpFX0hUX0NBUF9JRSk7CisJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykpOworCQkJCQkqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykgPSBTV0FQMTYoKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pKTsKKworCQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICZUbXAsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJldwYUllLAorCQkJCQkJCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdExlbiwKKwkJCQkJCQkJCTQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQlJPQURDT01bMF0sCisJCQkJCQkJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgJkh0Q2FwYWJpbGl0eVRtcCwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbHNlCisJCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgJlRtcCwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmV3BhSWUsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0TGVuLAorCQkJCQkJCQkJNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCUk9BRENPTVswXSwKKwkJCQkJCQkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4sICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUh0TGVuID0gcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbjsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZIdENhcGFiaWxpdHlUbXAsICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksIFNJWkVfSFRfQ0FQX0lFKTsKKwkJCQkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSk7CisJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykpOworCisJCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgJlRtcCwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRDYXBJZSwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRMZW4sCisJCQkJCQkJCQlIdExlbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0Q2FwYWJpbGl0eVRtcCwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbHNlCisJCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgJlRtcCwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRDYXBJZSwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRMZW4sCisJCQkJCQkJCQlIdExlbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJCQkJfQorCQkJCUZyYW1lTGVuICs9IFRtcDsKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKwkJCQlpZiAocEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLmIyMDQwQ29leGlzdFNjYW5TdXAgPT0gMSkKKwkJCQl7CisJCQkJCVVMT05HCQlUbXA7CisJCQkJCUh0TGVuID0gMTsKKwkJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXAsCisJCQkJCQkJCQkgIDEsCQkJCQkmRXh0SHRDYXBJZSwKKwkJCQkJCQkJCSAgMSwJCQkJCSZIdExlbiwKKwkJCQkJCQkJCSAgMSwgICAgICAgICAgCQkJJnBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLndvcmQsCisJCQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQkJCQlGcmFtZUxlbiArPSBUbXA7CisJCQkJfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCX0KKworCQkvLyBGb3IgU0NBTl9DSVNDT19QQVNTSVZFLCBkbyBub3RoaW5nIGFuZCBzaWxlbnRseSB3YWl0IGZvciBiZWFjb24gb3Igb3RoZXIgcHJvYmUgcmVwb25zZQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU0NBTl9MSVNURU47CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwl9Cit9CisKK1ZPSUQgTWd0UHJvYlJlcU1hY0hlYWRlckluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUIFBIRUFERVJfODAyXzExIHBIZHI4MDIxMSwKKwlJTiBVQ0hBUiBTdWJUeXBlLAorCUlOIFVDSEFSIFRvRHMsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBQVUNIQVIgcEJzc2lkKQoreworCU5kaXNaZXJvTWVtb3J5KHBIZHI4MDIxMSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX01HTVQ7CisJcEhkcjgwMjExLT5GQy5TdWJUeXBlID0gU3ViVHlwZTsKKwlpZiAoU3ViVHlwZSA9PSBTVUJUWVBFX0FDSykKKwkJcEhkcjgwMjExLT5GQy5UeXBlID0gQlRZUEVfQ05UTDsKKwlwSGRyODAyMTEtPkZDLlRvRHMgPSBUb0RzOworCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMSwgcERBKTsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMywgcEJzc2lkKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fd3BhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fd3BhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMzMyYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV93cGEuYwpAQCAtMCwwICsxLDE2MDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJd3BhLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKYW4JTGVlCQkwMy0wNy0yMgkJSW5pdGlhbAorCVBhdWwgTGluCTAzLTExLTI4CQlNb2RpZnkgZm9yIHN1cHBsaWNhbnQKKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisvLyBXUEEgT1VJCitVQ0hBUgkJT1VJX1dQQV9OT05FX0FLTVs0XQkJPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMH07CitVQ0hBUiAgICAgICBPVUlfV1BBX1ZFUlNJT05bNF0gICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDAxfTsKK1VDSEFSICAgICAgIE9VSV9XUEFfVEtJUFs0XSAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMn07CitVQ0hBUiAgICAgICBPVUlfV1BBX0NDTVBbNF0gICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDR9OworVUNIQVIgICAgICAgT1VJX1dQQV84MDIxWF9BS01bNF0JPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMX07CitVQ0hBUiAgICAgICBPVUlfV1BBX1BTS19BS01bNF0gICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDAyfTsKKy8vIFdQQTIgT1VJCitVQ0hBUiAgICAgICBPVUlfV1BBMl9XRVA0MFs0XSAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDF9OworVUNIQVIgICAgICAgT1VJX1dQQTJfVEtJUFs0XSAgICAgICAgPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwMn07CitVQ0hBUiAgICAgICBPVUlfV1BBMl9DQ01QWzRdICAgICAgICA9IHsweDAwLCAweDBGLCAweEFDLCAweDA0fTsKK1VDSEFSICAgICAgIE9VSV9XUEEyXzgwMjFYX0FLTVs0XSAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDF9OworVUNIQVIgICAgICAgT1VJX1dQQTJfUFNLX0FLTVs0XSAgIAk9IHsweDAwLCAweDBGLCAweEFDLCAweDAyfTsKKy8vIE1TQSBPVUkKK1VDSEFSICAgCU9VSV9NU0FfODAyMVhfQUtNWzRdICAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDV9OwkJLy8gTm90IHlldCBmaW5hbCAtIElFRUUgODAyLjExcy1EMS4wNgorVUNIQVIgICAJT1VJX01TQV9QU0tfQUtNWzRdICAgCT0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDZ9OwkJLy8gTm90IHlldCBmaW5hbCAtIElFRUUgODAyLjExcy1EMS4wNgorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJVGhlIHBzZXVkby1yYW5kb20gZnVuY3Rpb24oUFJGKSB0aGF0IGhhc2hlcyB2YXJpb3VzIGlucHV0cyB0bworCQlkZXJpdmUgYSBwc2V1ZG8tcmFuZG9tIHZhbHVlLiBUbyBhZGQgbGl2ZW5lc3MgdG8gdGhlIHBzZXVkby1yYW5kb20KKwkJdmFsdWUsIGEgbm9uY2Ugc2hvdWxkIGJlIG9uZSBvZiB0aGUgaW5wdXRzLgorCisJCUl0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgUFRLLCBHVEsgb3Igc29tZSBzcGVjaWZpYyByYW5kb20gdmFsdWUuCisKKwlBcmd1bWVudHM6CisJCVVDSEFSCSprZXksCQktCXRoZSBrZXkgbWF0ZXJpYWwgZm9yIEhNQUNfU0hBMSB1c2UKKwkJSU5UCQlrZXlfbGVuCQktCXRoZSBsZW5ndGggb2Yga2V5CisJCVVDSEFSCSpwcmVmaXgJCS0JYSBwcmVmaXggbGFiZWwKKwkJSU5UCQlwcmVmaXhfbGVuCS0JdGhlIGxlbmd0aCBvZiB0aGUgbGFiZWwKKwkJVUNIQVIJKmRhdGEJCS0JYSBzcGVjaWZpYyBkYXRhIHdpdGggdmFyaWFibGUgbGVuZ3RoCisJCUlOVAkJZGF0YV9sZW4JLQl0aGUgbGVuZ3RoIG9mIGEgc3BlY2lmaWMgZGF0YQorCQlJTlQJCWxlbgkJCS0JdGhlIG91dHB1dCBsZW5naHQKKworCVJldHVybiBWYWx1ZToKKwkJVUNIQVIJKm91dHB1dAkJLQl0aGUgY2FsY3VsYXRlZCByZXN1bHQKKworCU5vdGU6CisJCTgwMi4xMWktMjAwNAlBbm5leCBILjMKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUFJGKAorCUlOCVVDSEFSCSprZXksCisJSU4JSU5UCQlrZXlfbGVuLAorCUlOCVVDSEFSCSpwcmVmaXgsCisJSU4JSU5UCQlwcmVmaXhfbGVuLAorCUlOCVVDSEFSCSpkYXRhLAorCUlOCUlOVAkJZGF0YV9sZW4sCisJT1VUCVVDSEFSCSpvdXRwdXQsCisJSU4JSU5UCQlsZW4pCit7CisJSU5UCQlpOworICAgIFVDSEFSICAgKmlucHV0OworCUlOVAkJY3VycmVudGluZGV4ID0gMDsKKwlJTlQJCXRvdGFsX2xlbjsKKworCS8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW5wdXQKKwlvc19hbGxvY19tZW0oTlVMTCwgKFBVQ0hBUiAqKSZpbnB1dCwgMTAyNCk7CisKKyAgICBpZiAoaW5wdXQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiEhIVBSRjogbm8gbWVtb3J5ISEhXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKwkvLyBHZW5lcmF0ZSBjb25jYXRlbmF0aW9uIGlucHV0CisJTmRpc01vdmVNZW1vcnkoaW5wdXQsIHByZWZpeCwgcHJlZml4X2xlbik7CisKKwkvLyBDb25jYXRlbmF0ZSBhIHNpbmdsZSBvY3RldCBjb250YWluaW5nIDAKKwlpbnB1dFtwcmVmaXhfbGVuXSA9CTA7CisKKwkvLyBDb25jYXRlbmF0ZSBzcGVjaWZpYyBkYXRhCisJTmRpc01vdmVNZW1vcnkoJmlucHV0W3ByZWZpeF9sZW4gKyAxXSwgZGF0YSwgZGF0YV9sZW4pOworCXRvdGFsX2xlbiA9CXByZWZpeF9sZW4gKyAxICsgZGF0YV9sZW47CisKKwkvLyBDb25jYXRlbmF0ZSBhIHNpbmdsZSBvY3RldCBjb250YWluaW5nIDAKKwkvLyBUaGlzIG9jdGV0IHNoYWxsIGJlIHVwZGF0ZSBsYXRlcgorCWlucHV0W3RvdGFsX2xlbl0gPSAwOworCXRvdGFsX2xlbisrOworCisJLy8gSXRlcmF0ZSB0byBjYWxjdWxhdGUgdGhlIHJlc3VsdCBieSBobWFjLXNoYS0xCisJLy8gVGhlbiBjb25jYXRlbmF0ZSB0byBsYXN0IHJlc3VsdAorCWZvcgkoaSA9IDA7CWkgPAkobGVuICsgMTkpIC8gMjA7IGkrKykKKwl7CisJCUhNQUNfU0hBMShpbnB1dCwgdG90YWxfbGVuLAlrZXksIGtleV9sZW4sICZvdXRwdXRbY3VycmVudGluZGV4XSk7CisJCWN1cnJlbnRpbmRleCArPQkyMDsKKworCQkvLyB1cGRhdGUgdGhlIGxhc3Qgb2N0ZXQKKwkJaW5wdXRbdG90YWxfbGVuIC0gMV0rKzsKKwl9CisgICAgb3NfZnJlZV9tZW0oTlVMTCwgaW5wdXQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSXQgdXRpbGl6ZXMgUFJGLTM4NCBvciBQUkYtNTEyIHRvIGRlcml2ZSBzZXNzaW9uLXNwZWNpZmljIGtleXMgZnJvbSBhIFBNSy4KKwkJSXQgc2hhbGwgYmUgY2FsbGVkIGJ5IDQtd2F5IGhhbmRzaGFrZSBwcm9jZXNzaW5nLgorCisJQXJndW1lbnRzOgorCQlwQWQgCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorCQlQTUsJCS0JcG9pbnRlciB0byBQTUsKKwkJQU5vbmNlCS0JcG9pbnRlciB0byBBTm9uY2UKKwkJQUEJCS0JcG9pbnRlciB0byBBdXRoZW50aWNhdG9yIEFkZHJlc3MKKwkJU05vbmNlCS0JcG9pbnRlciB0byBTTm9uY2UKKwkJU0EJCS0JcG9pbnRlciB0byBTdXBwbGljYW50IEFkZHJlc3MKKwkJbGVuCQktCWluZGljYXRlIHRoZSBsZW5ndGggb2YgUFRLIChvY3RldCkKKworCVJldHVybiBWYWx1ZToKKwkJT3V0cHV0CQlwb2ludGVyIHRvIHRoZSBQVEsKKworCU5vdGU6CisJCVJlZmVyIHRvIElFRUUgODAyLjExaS0yMDA0IDguNS4xLjIKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgV3BhQ291bnRQVEsoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJKlBNSywKKwlJTglVQ0hBUgkqQU5vbmNlLAorCUlOCVVDSEFSCSpBQSwKKwlJTglVQ0hBUgkqU05vbmNlLAorCUlOCVVDSEFSCSpTQSwKKwlPVVQJVUNIQVIJKm91dHB1dCwKKwlJTglVSU5UCWxlbikKK3sKKwlVQ0hBUgljb25jYXRlbmF0aW9uWzc2XTsKKwlVSU5UCUN1cnJQb3MgPSAwOworCVVDSEFSCXRlbXBbMzJdOworCVVDSEFSCVByZWZpeFtdID0geydQJywgJ2EnLCAnaScsICdyJywgJ3cnLCAnaScsICdzJywgJ2UnLCAnICcsICdrJywgJ2UnLCAneScsICcgJywKKwkJCQkJCSdlJywgJ3gnLCAncCcsICdhJywgJ24nLCAncycsICdpJywgJ28nLCAnbid9OworCisJLy8gaW5pdGlhdGUgdGhlIGNvbmNhdGVuYXRpb24gaW5wdXQKKwlOZGlzWmVyb01lbW9yeSh0ZW1wLCBzaXplb2YodGVtcCkpOworCU5kaXNaZXJvTWVtb3J5KGNvbmNhdGVuYXRpb24sIDc2KTsKKworCS8vIEdldCBzbWFsbGVyIGFkZHJlc3MKKwlpZiAoUlRNUENvbXBhcmVNZW1vcnkoU0EsIEFBLCA2KSA9PSAxKQorCQlOZGlzTW92ZU1lbW9yeShjb25jYXRlbmF0aW9uLCBBQSwgNik7CisJZWxzZQorCQlOZGlzTW92ZU1lbW9yeShjb25jYXRlbmF0aW9uLCBTQSwgNik7CisJQ3VyclBvcyArPSA2OworCisJLy8gR2V0IGxhcmdlciBhZGRyZXNzCisJaWYgKFJUTVBDb21wYXJlTWVtb3J5KFNBLCBBQSwgNikgPT0gMSkKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIFNBLCA2KTsKKwllbHNlCisJCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCBBQSwgNik7CisKKwkvLyBzdG9yZSB0aGUgbGFyZ2VyIG1hYyBhZGRyZXNzIGZvciBiYWNrd2FyZCBjb21wYXRpYmxlIG9mCisJLy8gcmFsaW5rIHByb3ByaWV0YXJ5IFNUQS1rZXkgaXNzdWUKKwlOZGlzTW92ZU1lbW9yeSh0ZW1wLCAmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgTUFDX0FERFJfTEVOKTsKKwlDdXJyUG9zICs9IDY7CisKKwkvLyBHZXQgc21hbGxlciBOb25jZQorCWlmIChSVE1QQ29tcGFyZU1lbW9yeShBTm9uY2UsIFNOb25jZSwgMzIpID09IDApCisJCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCB0ZW1wLCAzMik7CS8vIHBhdGNoIGZvciByYWxpbmsgcHJvcHJpZXRhcnkgU1RBLWtleSBpc3N1ZQorCWVsc2UgaWYgKFJUTVBDb21wYXJlTWVtb3J5KEFOb25jZSwgU05vbmNlLCAzMikgPT0gMSkKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIFNOb25jZSwgMzIpOworCWVsc2UKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIEFOb25jZSwgMzIpOworCUN1cnJQb3MgKz0gMzI7CisKKwkvLyBHZXQgbGFyZ2VyIE5vbmNlCisJaWYgKFJUTVBDb21wYXJlTWVtb3J5KEFOb25jZSwgU05vbmNlLCAzMikgPT0gMCkKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIHRlbXAsIDMyKTsJLy8gcGF0Y2ggZm9yIHJhbGluayBwcm9wcmlldGFyeSBTVEEta2V5IGlzc3VlCisJZWxzZSBpZiAoUlRNUENvbXBhcmVNZW1vcnkoQU5vbmNlLCBTTm9uY2UsIDMyKSA9PSAxKQorCQlOZGlzTW92ZU1lbW9yeSgmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgQU5vbmNlLCAzMik7CisJZWxzZQorCQlOZGlzTW92ZU1lbW9yeSgmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgU05vbmNlLCAzMik7CisJQ3VyclBvcyArPSAzMjsKKworCWhleF9kdW1wKCJjb25jYXRlbmF0aW9uPSIsIGNvbmNhdGVuYXRpb24sIDc2KTsKKworCS8vIFVzZSBQUkYgdG8gZ2VuZXJhdGUgUFRLCisJUFJGKFBNSywgTEVOX01BU1RFUl9LRVksIFByZWZpeCwgMjIsIGNvbmNhdGVuYXRpb24sIDc2LCBvdXRwdXQsIGxlbik7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUdlbmVyYXRlIHJhbmRvbSBudW1iZXIgYnkgc29mdHdhcmUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0CisJCW1hY0FkZHIJLQlwb2ludGVyIHRvIGxvY2FsIE1BQyBhZGRyZXNzCisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCQk4MDIuMWlpLTIwMDQgIEFubmV4IEguNQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlHZW5SYW5kb20oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQkqbWFjQWRkciwKKwlPVVQJVUNIQVIJCQkqcmFuZG9tKQoreworCUlOVAkJaSwgY3VycjsKKwlVQ0hBUglsb2NhbFs4MF0sIEtleUNvdW50ZXJbMzJdOworCVVDSEFSCXJlc3VsdFs4MF07CisJVUxPTkcJQ3VycmVudFRpbWU7CisJVUNIQVIJcHJlZml4W10gPSB7J0knLCAnbicsICdpJywgJ3QnLCAnICcsICdDJywgJ28nLCAndScsICduJywgJ3QnLCAnZScsICdyJ307CisKKwkvLyBaZXJvIHRoZSByZWxhdGVkIGluZm9ybWF0aW9uCisJTmRpc1plcm9NZW1vcnkocmVzdWx0LCA4MCk7CisJTmRpc1plcm9NZW1vcnkobG9jYWwsIDgwKTsKKwlOZGlzWmVyb01lbW9yeShLZXlDb3VudGVyLCAzMik7CisKKwlmb3IJKGkgPSAwOwlpIDwJMzI7CWkrKykKKwl7CisJCS8vIGNvcHkgdGhlIGxvY2FsIE1BQyBhZGRyZXNzCisJCUNPUFlfTUFDX0FERFIobG9jYWwsIG1hY0FkZHIpOworCQljdXJyID0JTUFDX0FERFJfTEVOOworCisJCS8vIGNvbmNhdGVuYXRlIHRoZSBjdXJyZW50IHRpbWUKKwkJTmRpc0dldFN5c3RlbVVwVGltZSgmQ3VycmVudFRpbWUpOworCQlOZGlzTW92ZU1lbW9yeSgmbG9jYWxbY3Vycl0sICAmQ3VycmVudFRpbWUsCXNpemVvZihDdXJyZW50VGltZSkpOworCQljdXJyICs9CXNpemVvZihDdXJyZW50VGltZSk7CisKKwkJLy8gY29uY2F0ZW5hdGUgdGhlIGxhc3QgcmVzdWx0CisJCU5kaXNNb3ZlTWVtb3J5KCZsb2NhbFtjdXJyXSwgIHJlc3VsdCwgMzIpOworCQljdXJyICs9CTMyOworCisJCS8vIGNvbmNhdGVuYXRlIGEgdmFyaWFibGUKKwkJTmRpc01vdmVNZW1vcnkoJmxvY2FsW2N1cnJdLCAgJmksICAyKTsKKwkJY3VyciArPQkyOworCisJCS8vIGNhbGN1bGF0ZSB0aGUgcmVzdWx0CisJCVBSRihLZXlDb3VudGVyLCAzMiwgcHJlZml4LDEyLCBsb2NhbCwgY3VyciwgcmVzdWx0LCAzMik7CisJfQorCisJTmRpc01vdmVNZW1vcnkocmFuZG9tLCByZXN1bHQsCTMyKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUJ1aWxkIGNpcGhlciBzdWl0ZSBpbiBSU04tSUUuCisJCUl0IG9ubHkgc2hhbGwgYmUgY2FsbGVkIGJ5IFJUTVBNYWtlUlNOSUUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorICAgIAlFbGVtZW50SUQJLQlpbmRpY2F0ZSB0aGUgV1BBMSBvciBXUEEyCisgICAgCVdlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKKwkJYk1peENpcGhlcgktCWEgYm9vbGVhbiB0byBpbmRpY2F0ZSB0aGUgcGFpcndpc2UgY2lwaGVyIGFuZCBncm91cAorCQkJCQkJY2lwaGVyIGFyZSB0aGUgc2FtZSBvciBub3QKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgVk9JRCBSVE1QSW5zZXJ0UnNuSWVDaXBoZXIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQlFbGVtZW50SUQsCisJSU4JVUlOVAkJCVdlcFN0YXR1cywKKwlJTglCT09MRUFOCQkJYk1peENpcGhlciwKKwlJTglVQ0hBUgkJCUZsZXhpYmxlQ2lwaGVyLAorCU9VVAlQVUNIQVIJCQlwUnNuSWUsCisJT1VUCVVDSEFSCQkJKnJzbl9sZW4pCit7CisJVUNIQVIJUGFpcndpc2VDbnQ7CisKKwkqcnNuX2xlbiA9IDA7CisKKwkvLyBkZWNpZGUgV1BBMiBvciBXUEExCisJaWYgKEVsZW1lbnRJRCA9PSBXcGEySWUpCisJeworCQlSU05JRTIJKnBSc25pZV9jaXBoZXIgPSAoUlNOSUUyKilwUnNuSWU7CisKKwkJLy8gQXNzaWduIHRoZSB2ZXJzb24gYXMgMQorCQlwUnNuaWVfY2lwaGVyLT52ZXJzaW9uID0gMTsKKworICAgICAgICBzd2l0Y2ggKFdlcFN0YXR1cykKKyAgICAgICAgeworICAgICAgICAJLy8gVEtJUCBtb2RlCisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ6CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX1RLSVAsIDQpOworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBMl9US0lQLCA0KTsKKyAgICAgICAgICAgICAgICAqcnNuX2xlbiA9IHNpemVvZihSU05JRTIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkvLyBBRVMgbW9kZQorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOgorCQkJCWlmIChiTWl4Q2lwaGVyKQorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQTJfVEtJUCwgNCk7CisJCQkJZWxzZQorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQTJfQ0NNUCwgNCk7CisgICAgICAgICAgICAgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEEyX0NDTVAsIDQpOworICAgICAgICAgICAgICAgICpyc25fbGVuID0gc2l6ZW9mKFJTTklFMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCS8vIFRLSVAtQUVTIG1peCBtb2RlCisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uNEVuYWJsZWQ6CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX1RLSVAsIDQpOworCisJCQkJUGFpcndpc2VDbnQgPSAxOworCQkJCS8vIEluc2VydCBXUEEyIFRLSVAgYXMgdGhlIGZpcnN0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCWlmIChNSVhfQ0lQSEVSX1dQQTJfVEtJUF9PTihGbGV4aWJsZUNpcGhlcikpCisJCQkJeworICAgICAgICAgICAgICAgIAlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEEyX1RLSVAsIDQpOworCQkJCQkvLyBJbnNlcnQgV1BBMiBBRVMgYXMgdGhlIHNlY29uZGFyeSBwYWlyd2lzZSBjaXBoZXIKKwkJCQkJaWYgKE1JWF9DSVBIRVJfV1BBMl9BRVNfT04oRmxleGlibGVDaXBoZXIpKQorCQkJCQl7CisgICAgICAgICAgICAgICAgCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWkgKyA0LCBPVUlfV1BBMl9DQ01QLCA0KTsKKwkJCQkJCVBhaXJ3aXNlQ250ID0gMjsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBJbnNlcnQgV1BBMiBBRVMgYXMgdGhlIGZpcnN0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEEyX0NDTVAsIDQpOworCQkJCX0KKworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IFBhaXJ3aXNlQ250OworICAgICAgICAgICAgICAgICpyc25fbGVuID0gc2l6ZW9mKFJTTklFMikgKyAoNCAqIChQYWlyd2lzZUNudCAtIDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisJCS8vIHN3YXAgZm9yIGJpZy1lbmRpYW4gcGxhdGZvcm0KKwkJcFJzbmllX2NpcGhlci0+dmVyc2lvbiA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnZlcnNpb24pOworCSAgICBwUnNuaWVfY2lwaGVyLT51Y291bnQgPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT51Y291bnQpOworCX0KKwllbHNlCisJeworCQlSU05JRQkqcFJzbmllX2NpcGhlciA9IChSU05JRSopcFJzbkllOworCisJCS8vIEFzc2lnbiBPVUkgYW5kIHZlcnNpb24KKwkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+b3VpLCBPVUlfV1BBX1ZFUlNJT04sIDQpOworICAgICAgICBwUnNuaWVfY2lwaGVyLT52ZXJzaW9uID0gMTsKKworCQlzd2l0Y2ggKFdlcFN0YXR1cykKKwkJeworCQkJLy8gVEtJUCBtb2RlCisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ6CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEFfVEtJUCwgNCk7CisgICAgICAgICAgICAgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEFfVEtJUCwgNCk7CisgICAgICAgICAgICAgICAgKnJzbl9sZW4gPSBzaXplb2YoUlNOSUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkvLyBBRVMgbW9kZQorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOgorCQkJCWlmIChiTWl4Q2lwaGVyKQorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQV9US0lQLCA0KTsKKwkJCQllbHNlCisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBX0NDTVAsIDQpOworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBX0NDTVAsIDQpOworICAgICAgICAgICAgICAgICpyc25fbGVuID0gc2l6ZW9mKFJTTklFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJLy8gVEtJUC1BRVMgbWl4IG1vZGUKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb240RW5hYmxlZDoKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQV9US0lQLCA0KTsKKworCQkJCVBhaXJ3aXNlQ250ID0gMTsKKwkJCQkvLyBJbnNlcnQgV1BBIFRLSVAgYXMgdGhlIGZpcnN0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCWlmIChNSVhfQ0lQSEVSX1dQQV9US0lQX09OKEZsZXhpYmxlQ2lwaGVyKSkKKwkJCQl7CisgICAgICAgICAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLm91aSwgT1VJX1dQQV9US0lQLCA0KTsKKwkJCQkJLy8gSW5zZXJ0IFdQQSBBRVMgYXMgdGhlIHNlY29uZGFyeSBwYWlyd2lzZSBjaXBoZXIKKwkJCQkJaWYgKE1JWF9DSVBIRVJfV1BBX0FFU19PTihGbGV4aWJsZUNpcGhlcikpCisJCQkJCXsKKyAgICAgICAgICAgICAgICAJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLm91aSArIDQsIE9VSV9XUEFfQ0NNUCwgNCk7CisJCQkJCQlQYWlyd2lzZUNudCA9IDI7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gSW5zZXJ0IFdQQSBBRVMgYXMgdGhlIGZpcnN0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEFfQ0NNUCwgNCk7CisJCQkJfQorCisgICAgICAgICAgICAgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gUGFpcndpc2VDbnQ7CisgICAgICAgICAgICAgICAgKnJzbl9sZW4gPSBzaXplb2YoUlNOSUUpICsgKDQgKiAoUGFpcndpc2VDbnQgLSAxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCQkvLyBzd2FwIGZvciBiaWctZW5kaWFuIHBsYXRmb3JtCisJCXBSc25pZV9jaXBoZXItPnZlcnNpb24gPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT52ZXJzaW9uKTsKKwkgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dWNvdW50KTsKKwl9CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUJ1aWxkIEFLTSBzdWl0ZSBpbiBSU04tSUUuCisJCUl0IG9ubHkgc2hhbGwgYmUgY2FsbGVkIGJ5IFJUTVBNYWtlUlNOSUUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorICAgIAlFbGVtZW50SUQJLQlpbmRpY2F0ZSB0aGUgV1BBMSBvciBXUEEyCisgICAgCUF1dGhNb2RlCS0JaW5kaWNhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZGUKKwkJYXBpZHgJCS0JaW5kaWNhdGUgdGhlIGludGVyZmFjZSBpbmRleAorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBWT0lEIFJUTVBJbnNlcnRSc25JZUFLTSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglVQ0hBUgkJCUVsZW1lbnRJRCwKKwlJTglVSU5UCQkJQXV0aE1vZGUsCisJSU4JVUNIQVIJCQlhcGlkeCwKKwlPVVQJUFVDSEFSCQkJcFJzbkllLAorCU9VVAlVQ0hBUgkJCSpyc25fbGVuKQoreworCVJTTklFX0FVVEgJCSpwUnNuaWVfYXV0aDsKKworCXBSc25pZV9hdXRoID0gKFJTTklFX0FVVEgqKShwUnNuSWUgKyAoKnJzbl9sZW4pKTsKKworCS8vIGRlY2lkZSBXUEEyIG9yIFdQQTEKKwlpZiAoRWxlbWVudElEID09IFdwYTJJZSkKKwl7CisJCXN3aXRjaCAoQXV0aE1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMjoKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTI6CisgICAgICAgICAgICAgICAgcFJzbmllX2F1dGgtPmFjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9hdXRoLT5hdXRoWzBdLm91aSwgT1VJX1dQQTJfODAyMVhfQUtNLCA0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOgorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSzoKKyAgICAgICAgICAgICAgICBwUnNuaWVfYXV0aC0+YWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAJTmRpc01vdmVNZW1vcnkocFJzbmllX2F1dGgtPmF1dGhbMF0ub3VpLCBPVUlfV1BBMl9QU0tfQUtNLCA0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCX0KKwllbHNlCisJeworCQlzd2l0Y2ggKEF1dGhNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQToKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTI6CisgICAgICAgICAgICAgICAgcFJzbmllX2F1dGgtPmFjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2F1dGgtPmF1dGhbMF0ub3VpLCBPVUlfV1BBXzgwMjFYX0FLTSwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOgorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSzoKKyAgICAgICAgICAgICAgICBwUnNuaWVfYXV0aC0+YWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfYXV0aC0+YXV0aFswXS5vdWksIE9VSV9XUEFfUFNLX0FLTSwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCWNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZToKKyAgICAgICAgICAgICAgICBwUnNuaWVfYXV0aC0+YWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwUnNuaWVfYXV0aC0+YXV0aFswXS5vdWksIE9VSV9XUEFfTk9ORV9BS00sIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisJfQorCisJcFJzbmllX2F1dGgtPmFjb3VudCA9IGNwdTJsZTE2KHBSc25pZV9hdXRoLT5hY291bnQpOworCisJKCpyc25fbGVuKSArPSBzaXplb2YoUlNOSUVfQVVUSCk7CS8vIHVwZGF0ZSBjdXJyZW50IFJTTklFIGxlbmd0aAorCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlCdWlsZCBjYXBhYmlsaXR5IGluIFJTTi1JRS4KKwkJSXQgb25seSBzaGFsbCBiZSBjYWxsZWQgYnkgUlRNUE1ha2VSU05JRS4KKworCUFyZ3VtZW50czoKKwkJcEFkCQkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0CisgICAgCUVsZW1lbnRJRAktCWluZGljYXRlIHRoZSBXUEExIG9yIFdQQTIKKwkJYXBpZHgJCS0JaW5kaWNhdGUgdGhlIGludGVyZmFjZSBpbmRleAorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBWT0lEIFJUTVBJbnNlcnRSc25JZUNhcCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglVQ0hBUgkJCUVsZW1lbnRJRCwKKwlJTglVQ0hBUgkJCWFwaWR4LAorCU9VVAlQVUNIQVIJCQlwUnNuSWUsCisJT1VUCVVDSEFSCQkJKnJzbl9sZW4pCit7CisJUlNOX0NBUEFCSUxJVElFUyAgICAqcFJTTl9DYXA7CisKKwkvLyBpdCBjb3VsZCBiZSBpZ25vcmVkIGluIFdQQTEgbW9kZQorCWlmIChFbGVtZW50SUQgPT0gV3BhSWUpCisJCXJldHVybjsKKworCXBSU05fQ2FwID0gKFJTTl9DQVBBQklMSVRJRVMqKShwUnNuSWUgKyAoKnJzbl9sZW4pKTsKKworCisJcFJTTl9DYXAtPndvcmQgPSBjcHUybGUxNihwUlNOX0NhcC0+d29yZCk7CisKKwkoKnJzbl9sZW4pICs9IHNpemVvZihSU05fQ0FQQUJJTElUSUVTKTsJLy8gdXBkYXRlIGN1cnJlbnQgUlNOSUUgbGVuZ3RoCisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQnVpbGQgUlNOIElFIGNvbnRleHQuIEl0IGlzIG5vdCBpbmNsdWRlZCBlbGVtZW50LUlEIGFuZCBsZW5ndGguCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorICAgIAlBdXRoTW9kZQktCWluZGljYXRlIHRoZSBhdXRoZW50aWNhdGlvbiBtb2RlCisgICAgCVdlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKKwkJYXBpZHgJCS0JaW5kaWNhdGUgdGhlIGludGVyZmFjZSBpbmRleAorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUE1ha2VSU05JRSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEF1dGhNb2RlLAorICAgIElOICBVSU5UICAgICAgICAgICAgV2VwU3RhdHVzLAorCUlOCVVDSEFSCQkJYXBpZHgpCit7CisJUFVDSEFSCQlwUnNuSWUgPSBOVUxMOwkJCS8vIHByaW1hcnkgUlNOSUUKKwlVQ0hBUiAJCSpyc25pZWxlbl9jdXJfcCA9IDA7CS8vIHRoZSBsZW5ndGggb2YgdGhlIHByaW1hcnkgUlNOSUUKKwlVQ0hBUgkJKnJzbmllbGVuX2V4X2N1cl9wID0gMDsJLy8gdGhlIGxlbmd0aCBvZiB0aGUgc2Vjb25kYXJ5IFJTTklFCisJVUNIQVIJCVByaW1hcnlSc25pZTsKKwlCT09MRUFOCQliTWl4Q2lwaGVyID0gRkFMU0U7CS8vIGluZGljYXRlIHRoZSBwYWlyd2lzZSBhbmQgZ3JvdXAgY2lwaGVyIGFyZSBkaWZmZXJlbnQKKwlVQ0hBUgkJcF9vZmZzZXQ7CisJV1BBX01JWF9QQUlSX0NJUEhFUgkJRmxleGlibGVDaXBoZXIgPSBNSVhfQ0lQSEVSX05PVFVTRTsJLy8gaXQgcHJvdmlkZSB0aGUgbW9yZSBmbGV4aWJsZSBjaXBoZXIgY29tYmluYXRpb24gaW4gV1BBLVdQQTIgYW5kIFRLSVBBRVMgbW9kZQorCisJcnNuaWVsZW5fY3VyX3AgPSBOVUxMOworCXJzbmllbGVuX2V4X2N1cl9wID0gTlVMTDsKKworCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKKwkJCXsKKwkJCQlpZiAoQXV0aE1vZGUgPCBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCQkJCXJldHVybjsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJCQl7CisJCQkJLy8gU3VwcG9ydCBXUEFQU0sgb3IgV1BBMlBTSyBpbiBTVEEtSW5mcmEgbW9kZQorCQkJCS8vIFN1cHBvcnQgV1BBTm9uZSBpbiBTVEEtQWRob2MgbW9kZQorCQkJCWlmICgoQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSAmJgorCQkJCQkoQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgJiYKKwkJCQkJKEF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCQkJCSkKKwkJCQkJcmV0dXJuOworCQkJfQorCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIj09PiBSVE1QTWFrZVJTTklFKFNUQSlcbiIpKTsKKworCQkJLy8gWmVybyBSU05JRSBjb250ZXh0CisJCQlwQWQtPlN0YUNmZy5SU05JRV9MZW4gPSAwOworCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUlNOX0lFLCBNQVhfTEVOX09GX1JTTklFKTsKKworCQkJLy8gUG9pbnRlciB0byBSU05JRQorCQkJcnNuaWVsZW5fY3VyX3AgPSAmcEFkLT5TdGFDZmcuUlNOSUVfTGVuOworCQkJcFJzbkllID0gcEFkLT5TdGFDZmcuUlNOX0lFOworCisJCQliTWl4Q2lwaGVyID0gcEFkLT5TdGFDZmcuYk1peENpcGhlcjsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCS8vIGluZGljYXRlIHByaW1hcnkgUlNOSUUgYXMgV1BBIG9yIFdQQTIKKwlpZiAoKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwKKwkJKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgfHwKKwkJKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpIHx8CisJCShBdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEExV1BBMikgfHwKKwkJKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFQU0tXUEEyUFNLKSkKKwkJUHJpbWFyeVJzbmllID0gV3BhSWU7CisJZWxzZQorCQlQcmltYXJ5UnNuaWUgPSBXcGEySWU7CisKKwl7CisJCS8vIEJ1aWxkIHRoZSBwcmltYXJ5IFJTTklFCisJCS8vIDEuIGluc2VydCBjaXBoZXIgc3VpdGUKKwkJUlRNUEluc2VydFJzbkllQ2lwaGVyKHBBZCwgUHJpbWFyeVJzbmllLCBXZXBTdGF0dXMsIGJNaXhDaXBoZXIsIEZsZXhpYmxlQ2lwaGVyLCBwUnNuSWUsICZwX29mZnNldCk7CisKKwkJLy8gMi4gaW5zZXJ0IEFLTQorCQlSVE1QSW5zZXJ0UnNuSWVBS00ocEFkLCBQcmltYXJ5UnNuaWUsIEF1dGhNb2RlLCBhcGlkeCwgcFJzbkllLCAmcF9vZmZzZXQpOworCisJCS8vIDMuIGluc2VydCBjYXBhYmlsaXR5CisJCVJUTVBJbnNlcnRSc25JZUNhcChwQWQsIFByaW1hcnlSc25pZSwgYXBpZHgsIHBSc25JZSwgJnBfb2Zmc2V0KTsKKwl9CisKKwkvLyA0LiB1cGRhdGUgdGhlIFJTTklFIGxlbmd0aAorCSpyc25pZWxlbl9jdXJfcCA9IHBfb2Zmc2V0OworCisJaGV4X2R1bXAoIlRoZSBwcmltYXJ5IFJTTklFIiwgcFJzbkllLCAoKnJzbmllbGVuX2N1cl9wKSk7CisKKworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisJCUNoZWNrIHdoZXRoZXIgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIEVBUCBmcmFtZS4KKworCUFyZ3VtZW50czoKKwkJcEFkCQkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorCQlwRW50cnkJCQktCXBvaW50ZXIgdG8gYWN0aXZlIGVudHJ5CisJCXBEYXRhCQkJLQl0aGUgcmVjZWl2ZWQgZnJhbWUKKwkJRGF0YUJ5dGVDb3VudCAJLQl0aGUgcmVjZWl2ZWQgZnJhbWUncyBsZW5ndGgKKwkJRnJvbVdoaWNoQlNTSUQJLQlpbmRpY2F0ZSB0aGUgaW50ZXJmYWNlIGluZGV4CisKKyAgICBSZXR1cm46CisgICAgICAgICBUUlVFIAkJCS0JVGhpcyBmcmFtZSBpcyBFQVAgZnJhbWUKKyAgICAgICAgIEZBTFNFIAkJCS0Jb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJUTVBDaGVja1dQQWZyYW1lKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIFBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5LAorICAgIElOIFBVQ0hBUiAgICAgICAgICAgcERhdGEsCisgICAgSU4gVUxPTkcgICAgICAgICAgICBEYXRhQnl0ZUNvdW50LAorCUlOIFVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJVUxPTkcJQm9keV9sZW47CisJQk9PTEVBTiBDYW5jZWxsZWQ7CisKKworICAgIGlmKERhdGFCeXRlQ291bnQgPCAoTEVOR1RIXzgwMl8xX0ggKyBMRU5HVEhfRUFQT0xfSCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworCisJLy8gU2tpcCBMTEMgaGVhZGVyCisgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShTTkFQXzgwMl8xSCwgcERhdGEsIDYpIHx8CisgICAgICAgIC8vIENpc2NvIDEyMDAgQVAgbWF5IHNlbmQgcGFja2V0IHdpdGggU05BUF9CUklER0VfVFVOTkVMCisgICAgICAgIE5kaXNFcXVhbE1lbW9yeShTTkFQX0JSSURHRV9UVU5ORUwsIHBEYXRhLCA2KSkKKyAgICB7CisgICAgICAgIHBEYXRhICs9IDY7CisgICAgfQorCS8vIFNraXAgMi1ieXRlcyBFQVBvTCB0eXBlCisgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShFQVBPTCwgcERhdGEsIDIpKQorICAgIHsKKyAgICAgICAgcERhdGEgKz0gMjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBzd2l0Y2ggKCoocERhdGErMSkpCisgICAgeworICAgICAgICBjYXNlIEVBUFBhY2tldDoKKwkJCUJvZHlfbGVuID0gKCoocERhdGErMik8PDgpIHwgKCoocERhdGErMykpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmVjZWl2ZSBFQVAtUGFja2V0IGZyYW1lLCBUWVBFID0gMCwgTGVuZ3RoID0gJWxkXG4iLCBCb2R5X2xlbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRUFQT0xTdGFydDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wtU3RhcnQgZnJhbWUsIFRZUEUgPSAxIFxuIikpOworCQkJaWYgKHBFbnRyeS0+RW5xdWV1ZUVhcG9sU3RhcnRUaW1lclJ1bm5pbmcgIT0gRUFQT0xfU1RBUlRfRElTQUJMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDYW5jZWwgdGhlIEVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nIFxuIikpOworICAgICAgICAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEVudHJ5LT5FbnF1ZXVlU3RhcnRGb3JQU0tUaW1lciwgJkNhbmNlbGxlZCk7CisgICAgICAgICAgICAgICAgcEVudHJ5LT5FbnF1ZXVlRWFwb2xTdGFydFRpbWVyUnVubmluZyA9IEVBUE9MX1NUQVJUX0RJU0FCTEU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFQVBPTExvZ29mZjoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0xMb2dvZmYgZnJhbWUsIFRZUEUgPSAyIFxuIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRUFQT0xLZXk6CisJCQlCb2R5X2xlbiA9ICgqKHBEYXRhKzIpPDw4KSB8ICgqKHBEYXRhKzMpKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wtS2V5IGZyYW1lLCBUWVBFID0gMywgTGVuZ3RoID0gJWxkXG4iLCBCb2R5X2xlbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRUFQT0xBU0ZBbGVydDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0xBU0ZBbGVydCBmcmFtZSwgVFlQRSA9IDQgXG4iKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIEVOQ1JZUFQgQUVTIEdUSyBiZWZvcmUgc2VuZGluZyBpbiBFQVBPTCBmcmFtZS4KKyAgICAgICAgQUVTIEdUSyBsZW5ndGggPSAxMjggYml0LCAgc28gZml4IGJsb2NrcyBmb3IgYWVzLWtleS13cmFwIGFzIDIgaW4gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiByZWZlcmVuY2VzIHRvIFJGQyAzMzk0IGZvciBhZXMga2V5IHdyYXAgYWxnb3JpdGhtLgorICAgIFJldHVybjoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQUVTX0dUS19LRVlfV1JBUCgKKyAgICBJTiBVQ0hBUiAgICAqa2V5LAorICAgIElOIFVDSEFSICAgICpwbGFpbnRleHQsCisgICAgSU4gVUNIQVIgICAgcF9sZW4sCisgICAgT1VUIFVDSEFSICAgKmNpcGhlcnRleHQpCit7CisgICAgVUNIQVIgICAgICAgQVs4XSwgQklOWzE2XSwgQk9VVFsxNl07CisgICAgVUNIQVIgICAgICAgUls1MTJdOworICAgIElOVCAgICAgICAgIG51bV9ibG9ja3MgPSBwX2xlbi84OyAgIC8vIHVuaXQ6NjRiaXRzCisgICAgSU5UICAgICAgICAgaSwgajsKKyAgICBhZXNfY29udGV4dCBhZXNjdHg7CisgICAgVUNIQVIgICAgICAgeG9yOworCisgICAgcnRtcF9hZXNfc2V0X2tleSgmYWVzY3R4LCBrZXksIDEyOCk7CisKKyAgICAvLyBJbml0IElBCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAgQVtpXSA9IDB4YTY7CisKKyAgICAvL0lucHV0IHBsYWludGV4dAorICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYmxvY2tzOyBpKyspCisgICAgeworICAgICAgICBmb3IgKGogPSAwIDsgaiA8IDg7IGorKykKKyAgICAgICAgICAgIFJbOCAqIChpICsgMSkgKyBqXSA9IHBsYWludGV4dFs4ICogaSArIGpdOworICAgIH0KKworICAgIC8vIEtleSBNaXgKKyAgICBmb3IgKGogPSAwOyBqIDwgNjsgaisrKQorICAgIHsKKyAgICAgICAgZm9yKGkgPSAxOyBpIDw9IG51bV9ibG9ja3M7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgLy9waGFzZSAxCisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShCSU4sIEEsIDgpOworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJkJJTls4XSwgJlJbOCAqIGldLCA4KTsKKyAgICAgICAgICAgIHJ0bXBfYWVzX2VuY3J5cHQoJmFlc2N0eCwgQklOLCBCT1VUKTsKKworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoQSwgJkJPVVRbMF0sIDgpOworICAgICAgICAgICAgeG9yID0gbnVtX2Jsb2NrcyAqIGogKyBpOworICAgICAgICAgICAgQVs3XSA9IEJPVVRbN10gXiB4b3I7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmUls4ICogaV0sICZCT1VUWzhdLCA4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE91dHB1dCBjaXBoZXJ0ZXh0CisgICAgTmRpc01vdmVNZW1vcnkoY2lwaGVydGV4dCwgQSwgOCk7CisKKyAgICBmb3IgKGkgPSAxOyBpIDw9IG51bV9ibG9ja3M7IGkrKykKKyAgICB7CisgICAgICAgIGZvciAoaiA9IDAgOyBqIDwgODsgaisrKQorICAgICAgICAgICAgY2lwaGVydGV4dFs4ICogaSArIGpdID0gUls4ICogaSArIGpdOworICAgIH0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJTWlzYyBmdW5jdGlvbiB0byBkZWNyeXB0IEFFUyBib2R5CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCQlUaGlzIGZ1bmN0aW9uIHJlZmVyZW5jZXMgdG8JUkZDCTMzOTQgZm9yIGFlcyBrZXkgdW53cmFwIGFsZ29yaXRobS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQUVTX0dUS19LRVlfVU5XUkFQKAorCUlOCVVDSEFSCSprZXksCisJT1VUCVVDSEFSCSpwbGFpbnRleHQsCisJSU4JVUNIQVIgICAgY19sZW4sCisJSU4JVUNIQVIJKmNpcGhlcnRleHQpCisKK3sKKwlVQ0hBUiAgICAgICBBWzhdLCBCSU5bMTZdLCBCT1VUWzE2XTsKKwlVQ0hBUiAgICAgICB4b3I7CisJSU5UICAgICAgICAgaSwgajsKKwlhZXNfY29udGV4dCBhZXNjdHg7CisJVUNIQVIgICAgICAgKlI7CisJSU5UICAgICAgICAgbnVtX2Jsb2NrcyA9IGNfbGVuLzg7CS8vIHVuaXQ6NjRiaXRzCisKKworCW9zX2FsbG9jX21lbShOVUxMLCAoUFVDSEFSICopJlIsIDUxMik7CisKKwlpZiAoUiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiISEhQUVTX0dUS19LRVlfVU5XUkFQOiBubyBtZW1vcnkhISFcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gLyogRW5kIG9mIGlmICovCisKKwkvLyBJbml0aWFsaXplCisJTmRpc01vdmVNZW1vcnkoQSwgY2lwaGVydGV4dCwgOCk7CisJLy9JbnB1dCBwbGFpbnRleHQKKwlmb3IoaSA9IDA7IGkgPCAoY19sZW4tOCk7IGkrKykKKwl7CisJCVJbIGldID0gY2lwaGVydGV4dFtpICsgOF07CisJfQorCisJcnRtcF9hZXNfc2V0X2tleSgmYWVzY3R4LCBrZXksIDEyOCk7CisKKwlmb3IoaiA9IDU7IGogPj0gMDsgai0tKQorCXsKKwkJZm9yKGkgPSAobnVtX2Jsb2Nrcy0xKTsgaSA+IDA7IGktLSkKKwkJeworCQkJeG9yID0gKG51bV9ibG9ja3MgLTEgKSogaiArIGk7CisJCQlOZGlzTW92ZU1lbW9yeShCSU4sIEEsIDgpOworCQkJQklOWzddID0gQVs3XSBeIHhvcjsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZCSU5bOF0sICZSWyhpLTEpKjhdLCA4KTsKKwkJCXJ0bXBfYWVzX2RlY3J5cHQoJmFlc2N0eCwgQklOLCBCT1VUKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KEEsICZCT1VUWzBdLCA4KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZSWyhpLTEpKjhdLCAmQk9VVFs4XSwgOCk7CisJCX0KKwl9CisKKwkvLyBPVVRQVVQKKwlmb3IoaSA9IDA7IGkgPCBjX2xlbjsgaSsrKQorCXsKKwkJcGxhaW50ZXh0W2ldID0gUltpXTsKKwl9CisKKworCW9zX2ZyZWVfbWVtKE5VTEwsIFIpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisJCVJlcG9ydCB0aGUgRUFQIG1lc3NhZ2UgdHlwZQorCisJQXJndW1lbnRzOgorCQltc2cJCS0JRUFQT0xfUEFJUl9NU0dfMQorCQkJCQlFQVBPTF9QQUlSX01TR18yCisJCQkJCUVBUE9MX1BBSVJfTVNHXzMKKwkJCQkJRUFQT0xfUEFJUl9NU0dfNAorCQkJCQlFQVBPTF9HUk9VUF9NU0dfMQorCQkJCQlFQVBPTF9HUk9VUF9NU0dfMgorCisgICAgUmV0dXJuOgorICAgICAgICAgbWVzc2FnZSB0eXBlIHN0cmluZworCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitDSEFSICpHZXRFYXBvbE1zZ1R5cGUoQ0hBUiBtc2cpCit7CisgICAgaWYobXNnID09IEVBUE9MX1BBSVJfTVNHXzEpCisgICAgICAgIHJldHVybiAiUGFpcndpc2UgTWVzc2FnZSAxIjsKKyAgICBlbHNlIGlmKG1zZyA9PSBFQVBPTF9QQUlSX01TR18yKQorICAgICAgICByZXR1cm4gIlBhaXJ3aXNlIE1lc3NhZ2UgMiI7CisJZWxzZSBpZihtc2cgPT0gRUFQT0xfUEFJUl9NU0dfMykKKyAgICAgICAgcmV0dXJuICJQYWlyd2lzZSBNZXNzYWdlIDMiOworCWVsc2UgaWYobXNnID09IEVBUE9MX1BBSVJfTVNHXzQpCisgICAgICAgIHJldHVybiAiUGFpcndpc2UgTWVzc2FnZSA0IjsKKwllbHNlIGlmKG1zZyA9PSBFQVBPTF9HUk9VUF9NU0dfMSkKKyAgICAgICAgcmV0dXJuICJHcm91cCBNZXNzYWdlIDEiOworCWVsc2UgaWYobXNnID09IEVBUE9MX0dST1VQX01TR18yKQorICAgICAgICByZXR1cm4gIkdyb3VwIE1lc3NhZ2UgMiI7CisgICAgZWxzZQorICAgIAlyZXR1cm4gIkludmFsaWQgTWVzc2FnZSI7Cit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgQ2hlY2sgU2FuaXR5IFJTTiBJRSBvZiBFQVBvTCBtZXNzYWdlCisKKyAgICBBcmd1bWVudHM6CisKKyAgICBSZXR1cm4gVmFsdWU6CisKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4gUlRNUENoZWNrUlNOSUUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIERhdGFMZW4sCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LAorCU9VVAlVQ0hBUgkJCSpPZmZzZXQpCit7CisJUFVDSEFSICAgICAgICAgICAgICBwVklFOworCVVDSEFSICAgICAgICAgICAgICAgbGVuOworCVBFSURfU1RSVUNUICAgICAgICAgcEVpZDsKKwlCT09MRUFOCQkJCXJlc3VsdCA9IEZBTFNFOworCisJcFZJRSA9IHBEYXRhOworCWxlbgkgPSBEYXRhTGVuOworCSpPZmZzZXQgPSAwOworCisJd2hpbGUgKGxlbiA+IHNpemVvZihSU05JRTIpKQorCXsKKwkJcEVpZCA9IChQRUlEX1NUUlVDVCkgcFZJRTsKKwkJLy8gV1BBIFJTTiBJRQorCQlpZiAoKHBFaWQtPkVpZCA9PSBJRV9XUEEpICYmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdQQV9PVUksIDQpKSkKKwkJeworCQkJaWYgKChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSB8fCBwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgJiYKKwkJCQkoTmRpc0VxdWFsTWVtb3J5KHBWSUUsIHBFbnRyeS0+UlNOX0lFLCBwRW50cnktPlJTTklFX0xlbikpICYmCisJCQkJKHBFbnRyeS0+UlNOSUVfTGVuID09IChwRWlkLT5MZW4gKyAyKSkpCisJCQl7CisJCQkJCXJlc3VsdCA9IFRSVUU7CisJCQl9CisKKwkJCSpPZmZzZXQgKz0gKHBFaWQtPkxlbiArIDIpOworCQl9CisJCS8vIFdQQTIgUlNOIElFCisJCWVsc2UgaWYgKChwRWlkLT5FaWQgPT0gSUVfUlNOKSAmJiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0ICsgMiwgUlNOX09VSSwgMykpKQorCQl7CisJCQlpZiAoKHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMiB8fCBwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spICYmCisJCQkJKE5kaXNFcXVhbE1lbW9yeShwVklFLCBwRW50cnktPlJTTl9JRSwgcEVudHJ5LT5SU05JRV9MZW4pKSAmJgorCQkJCShwRW50cnktPlJTTklFX0xlbiA9PSAocEVpZC0+TGVuICsgMikpLyogVG9Eby1BbGJlcnRZIGZvciBtZXNoKi8pCisJCQl7CisJCQkJCXJlc3VsdCA9IFRSVUU7CisJCQl9CisKKwkJCSpPZmZzZXQgKz0gKHBFaWQtPkxlbiArIDIpOworCQl9CisJCWVsc2UKKwkJeworCQkJYnJlYWs7CisJCX0KKworCQlwVklFICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJbGVuICAtPSAocEVpZC0+TGVuICsgMik7CisJfQorCisKKwlyZXR1cm4gcmVzdWx0OworCit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgUGFyc2UgS0VZREFUQSBmaWVsZC4gIEtFWURBVEFbXSBNYXkgY29udGFpbiAyIFJTTiBJRSBhbmQgb3B0aW9uYWxseSBHVEsuCisgICAgR1RLICBpcyBlbmNhcHR1bGF0ZWQgaW4gS0RFIGZvcm1hdCBhdCAgcC44MyA4MDIuMTFpIEQxMAorCisgICAgQXJndW1lbnRzOgorCisgICAgUmV0dXJuIFZhbHVlOgorCisgICAgTm90ZToKKyAgICAgICAgODAyLjExaSBEMTAKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4gUlRNUFBhcnNlRWFwb2xLZXlEYXRhKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcEtleURhdGEsCisJSU4gIFVDSEFSICAgICAgICAgICBLZXlEYXRhTGVuLAorCUlOCVVDSEFSCQkJR3JvdXBLZXlJbmRleCwKKwlJTglVQ0hBUgkJCU1zZ1R5cGUsCisJSU4JQk9PTEVBTgkJCWJXUEEyLAorCUlOICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSkKK3sKKyAgICBQS0RFX0VOQ0FQICAgICAgICAgIHBLREUgPSBOVUxMOworICAgIFBVQ0hBUiAgICAgICAgICAgICAgcE15S2V5RGF0YSA9IHBLZXlEYXRhOworICAgIFVDSEFSICAgICAgICAgICAgICAgS2V5RGF0YUxlbmd0aCA9IEtleURhdGFMZW47CisgICAgVUNIQVIgICAgICAgICAgICAgICBHVEtMRU4gPSAwOworCVVDSEFSCQkJCURlZmF1bHRJZHggPSAwOworCVVDSEFSCQkJCXNraXBfb2Zmc2V0OworCisJLy8gVmVyaWZ5IFRoZSBSU04gSUUgY29udGFpbmVkIGluIHBhaXJld2lzZV9tc2dfMiAmJiBwYWlyZXdpc2VfbXNnXzMgYW5kIHNraXAgaXQKKwlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18yIHx8IE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKKyAgICB7CisJCS8vIENoZWNrIFJTTiBJRSB3aGV0aGVyIGl0IGlzIFdQQTIvV1BBMlBTSworCQlpZiAoIVJUTVBDaGVja1JTTklFKHBBZCwgcEtleURhdGEsIEtleURhdGFMZW4sIHBFbnRyeSwgJnNraXBfb2Zmc2V0KSkKKwkJeworCQkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBSU04gSUUgZGlmZmVyZW50CisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfUlNOSUVfRElGRl9FVkVOVF9GTEFHLCBwRW50cnktPkFkZHIsIHBFbnRyeS0+YXBpZHgsIDApOworCisgICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSU05fSUUgRGlmZmVyZW50IGluIG1zZyAlZCBvZiA0LXdheSBoYW5kc2hha2UhXG4iLCBNc2dUeXBlKSk7CisJCQloZXhfZHVtcCgiUmVjZWl2ZSBSU05fSUUgIiwgcEtleURhdGEsIEtleURhdGFMZW4pOworCQkJaGV4X2R1bXAoIkRlc2lyZWQgUlNOX0lFICIsIHBFbnRyeS0+UlNOX0lFLCBwRW50cnktPlJTTklFX0xlbik7CisKKwkJCXJldHVybiBGQUxTRTsKKyAgICAJfQorICAgIAllbHNlCisJCXsKKwkJCWlmIChiV1BBMiAmJiBNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpCisJCQl7CisJCQkJLy8gc2tpcCBSU04gSUUKKwkJCQlwTXlLZXlEYXRhICs9IHNraXBfb2Zmc2V0OworCQkJCUtleURhdGFMZW5ndGggLT0gc2tpcF9vZmZzZXQ7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFBhcnNlRWFwb2xLZXlEYXRhID09PiBXUEEyL1dQQTJQU0sgUlNOIElFIG1hdGNoZWQgaW4gTXNnIDMsIExlbmd0aCglZCkgXG4iLCBza2lwX29mZnNldCkpOworCQkJfQorCQkJZWxzZQorCQkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QUGFyc2VFYXBvbEtleURhdGEgPT0+IEtleURhdGFMZW5ndGggJWQgd2l0aG91dCBSU05fSUUgXG4iLCBLZXlEYXRhTGVuZ3RoKSk7CisKKwkvLyBQYXJzZSBFS0QgZm9ybWF0IGluIHBhaXJ3aXNlX21zZ18zX1dQQTIgJiYgZ3JvdXBfbXNnXzFfV1BBMgorCWlmIChiV1BBMiAmJiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zIHx8IE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCXsKKwkJaWYgKEtleURhdGFMZW5ndGggPj0gOCkJLy8gS0RFIGZvcm1hdCBleGNsdWRlIEdUSyBsZW5ndGgKKyAgICAJeworICAgICAgICAJcEtERSA9IChQS0RFX0VOQ0FQKSBwTXlLZXlEYXRhOworCisKKwkJCURlZmF1bHRJZHggPSBwS0RFLT5HVEtFbmNhcC5LaWQ7CisKKwkJCS8vIFNhbml0eSBjaGVjayAtIEtFRCBsZW5ndGgKKwkJCWlmIChLZXlEYXRhTGVuZ3RoIDwgKHBLREUtPkxlbiArIDIpKQorICAgIAkJeworICAgICAgICAJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBUaGUgbGVuIGZyb20gS0RFIGlzIHRvbyBzaG9ydCBcbiIpKTsKKyAgICAgICAgCQlyZXR1cm4gRkFMU0U7CisgICAgCQl9CisKKwkJCS8vIEdldCBHVEsgbGVuZ3RoIC0gcmVmZXIgdG8gSUVFRSA4MDIuMTFpLTIwMDQgcC44MgorCQkJR1RLTEVOID0gcEtERS0+TGVuIC02OworCQkJaWYgKEdUS0xFTiA8IExFTl9BRVNfS0VZKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGxlbmd0aCBpcyB0b28gc2hvcnQgKCVkKSBcbiIsIEdUS0xFTikpOworICAgICAgICAJCXJldHVybiBGQUxTRTsKKwkJCX0KKworICAgIAl9CisJCWVsc2UKKyAgICAJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRVJST1I6IEtERSBmb3JtYXQgbGVuZ3RoIGlzIHRvbyBzaG9ydCBcbiIpKTsKKwkgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkdUSyBpbiBLREUgZm9ybWF0ICxEZWZhdWx0S2V5SUQ9JWQsIEtleUxlbj0lZCBcbiIsIERlZmF1bHRJZHgsIEdUS0xFTikpOworCQkvLyBza2lwIGl0CisJCXBNeUtleURhdGEgKz0gODsKKwkJS2V5RGF0YUxlbmd0aCAtPSA4OworCisJfQorCWVsc2UgaWYgKCFiV1BBMiAmJiBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKQorCXsKKwkJRGVmYXVsdElkeCA9IEdyb3VwS2V5SW5kZXg7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkdUSyBEZWZhdWx0S2V5SUQ9JWQgXG4iLCBEZWZhdWx0SWR4KSk7CisJfQorCisJLy8gU2FuaXR5IGNoZWNrIC0gc2hhcmVkIGtleSBpbmRleCBtdXN0IGJlIDEgfiAzCisJaWYgKERlZmF1bHRJZHggPCAxIHx8IERlZmF1bHRJZHggPiAzKQorICAgIHsKKyAgICAgCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGluZGV4KCVkKSBpcyBpbnZhbGlkIGluICVzICVzIFxuIiwgRGVmYXVsdElkeCwgKChiV1BBMikgPyAiV1BBMiIgOiAiV1BBIiksIEdldEVhcG9sTXNnVHlwZShNc2dUeXBlKSkpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkvLyBUb2RvCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlyZXR1cm4gVFJVRTsKKworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDb25zdHJ1Y3QgRUFQb0wgbWVzc2FnZSBmb3IgV1BBIGhhbmRzaGFraW5nCisJCUl0cyBmb3JtYXQgaXMgYmVsb3csCisKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IFByb3RvY29sIFZlcnNpb24JIHwgIDEgb2N0ZXQKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IFByb3RvY29sIFR5cGUJCSB8CTEgb2N0ZXQKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IEJvZHkgTGVuZ3RoCQkgfCAgMiBvY3RldHMKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IERlc2NyaXB0b3IgVHlwZQkgfAkxIG9jdGV0CisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgSW5mb3JtYXRpb24gICAgfAkyIG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IExlbmd0aAkgICAgIHwgIDEgb2N0ZXQKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IEtleSBSZXBhbHkgQ291bnRlciB8CTggb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgTm9uY2UJCSAgICAgfCAgMzIgb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgSVYJCQkgfCAgMTYgb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgUlNDCQkJIHwgIDggb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgSUQgb3IgUmVzZXJ2ZWQgfAk4IG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IE1JQwkJCSB8CTE2IG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IERhdGEgTGVuZ3RoCSB8CTIgb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgRGF0YQkJCSB8CW4gb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisJQXJndW1lbnRzOgorCQlwQWQJCQlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUNvbnN0cnVjdEVhcG9sTXNnKAorCUlOIAlQUlRNUF9BREFQVEVSICAgIAlwQWQsCisgICAgSU4gCVVDSEFSCQkJCUF1dGhNb2RlLAorICAgIElOIAlVQ0hBUgkJCQlXZXBTdGF0dXMsCisgICAgSU4gCVVDSEFSCQkJCUdyb3VwS2V5V2VwU3RhdHVzLAorICAgIElOIAlVQ0hBUgkJCQlNc2dUeXBlLAorICAgIElOCVVDSEFSCQkJCURlZmF1bHRLZXlJZHgsCisgICAgSU4gCVVDSEFSCQkJCSpSZXBsYXlDb3VudGVyLAorCUlOIAlVQ0hBUgkJCQkqS2V5Tm9uY2UsCisJSU4JVUNIQVIJCQkJKlR4UlNDLAorCUlOCVVDSEFSCQkJCSpQVEssCisJSU4JVUNIQVIJCQkJKkdUSywKKwlJTglVQ0hBUgkJCQkqUlNOSUUsCisJSU4JVUNIQVIJCQkJUlNOSUVfTGVuLAorICAgIE9VVCBQRUFQT0xfUEFDS0VUICAgICAgIHBNc2cpCit7CisJQk9PTEVBTgliV1BBMiA9IEZBTFNFOworCisJLy8gQ2hvb3NlIFdQQTIgb3Igbm90CisJaWYgKChBdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAoQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCWJXUEEyID0gVFJVRTsKKworICAgIC8vIEluaXQgUGFja2V0IGFuZCBGaWxsIGhlYWRlcgorICAgIHBNc2ctPlByb1ZlciA9IEVBUE9MX1ZFUjsKKyAgICBwTXNnLT5Qcm9UeXBlID0gRUFQT0xLZXk7CisKKwkvLyBEZWZhdWx0IDk1IGJ5dGVzLCB0aGUgRUFQb0wtS2V5IGRlc2NyaXB0b3IgZXhjbHVkZSBLZXktZGF0YSBmaWVsZAorCXBNc2ctPkJvZHlfTGVuWzFdID0gTEVOX0VBUE9MX0tFWV9NU0c7CisKKwkvLyBGaWxsIGluIEVBUG9MIGRlc2NyaXB0b3IKKwlpZiAoYldQQTIpCisJCXBNc2ctPktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisJZWxzZQorCQlwTXNnLT5LZXlEZXNjLlR5cGUgPSBXUEExX0tFWV9ERVNDOworCisJLy8gRmlsbCBpbiBLZXkgaW5mb3JtYXRpb24sIHJlZmVyIHRvIElFRUUgU3RkIDgwMi4xMWktMjAwNCBwYWdlIDc4CisJLy8gV2hlbiBlaXRoZXIgdGhlIHBhaXJ3aXNlIG9yIHRoZSBncm91cCBjaXBoZXIgaXMgQUVTLCB0aGUgREVTQ19UWVBFX0FFUygyKSBzaGFsbCBiZSB1c2VkLgorCXBNc2ctPktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0KKyAgICAgICAgCSgoKFdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB8fCAoR3JvdXBLZXlXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpID8gKERFU0NfVFlQRV9BRVMpIDogKERFU0NfVFlQRV9US0lQKSk7CisKKwkvLyBTcGVjaWZ5IEtleSBUeXBlIGFzIEdyb3VwKDApIG9yIFBhaXJ3aXNlKDEpCisJaWYgKE1zZ1R5cGUgPj0gRUFQT0xfR1JPVVBfTVNHXzEpCisJCXBNc2ctPktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gR1JPVVBLRVk7CisJZWxzZQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IFBBSVJXSVNFS0VZOworCisJLy8gU3BlY2lmeSBLZXkgSW5kZXgsIG9ubHkgZ3JvdXBfbXNnMV9XUEExCisJaWYgKCFiV1BBMiAmJiAoTXNnVHlwZSA+PSBFQVBPTF9HUk9VUF9NU0dfMSkpCisJCXBNc2ctPktleURlc2MuS2V5SW5mby5LZXlJbmRleCA9IERlZmF1bHRLZXlJZHg7CisKKwlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uSW5zdGFsbCA9IDE7CisKKwlpZiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5QWNrID0gMTsKKworCWlmIChNc2dUeXBlICE9IEVBUE9MX1BBSVJfTVNHXzEpCisJCXBNc2ctPktleURlc2MuS2V5SW5mby5LZXlNaWMgPSAxOworCisJaWYgKChiV1BBMiAmJiAoTXNnVHlwZSA+PSBFQVBPTF9QQUlSX01TR18zKSkgfHwgKCFiV1BBMiAmJiAoTXNnVHlwZSA+PSBFQVBPTF9HUk9VUF9NU0dfMSkpKQorICAgIHsKKyAgICAgICAJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLlNlY3VyZSA9IDE7CisgICAgfQorCisJaWYgKGJXUEEyICYmICgoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKSB8fCAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpKQorICAgIHsKKyAgICAgICAgcE1zZy0+S2V5RGVzYy5LZXlJbmZvLkVLRF9ETCA9IDE7CisgICAgfQorCisJLy8ga2V5IEluZm9ybWF0aW9uIGVsZW1lbnQgaGFzIGRvbmUuCisJKihVU0hPUlQgKikoJnBNc2ctPktleURlc2MuS2V5SW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcE1zZy0+S2V5RGVzYy5LZXlJbmZvKSk7CisKKwkvLyBGaWxsIGluIEtleSBMZW5ndGgKKwl7CisJCWlmIChNc2dUeXBlID49IEVBUE9MX0dST1VQX01TR18xKQorCQl7CisJCQkvLyB0aGUgbGVuZ3RoIG9mIGdyb3VwIGtleSBjaXBoZXIKKwkJCXBNc2ctPktleURlc2MuS2V5TGVuZ3RoWzFdID0gKChHcm91cEtleVdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSA/IFRLSVBfR1RLX0xFTkdUSCA6IExFTl9BRVNfS0VZKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIHRoZSBsZW5ndGggb2YgcGFpcndpc2Uga2V5IGNpcGhlcgorCQkJcE1zZy0+S2V5RGVzYy5LZXlMZW5ndGhbMV0gPSAoKFdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSA/IExFTl9US0lQX0tFWSA6IExFTl9BRVNfS0VZKTsKKwkJfQorCX0KKworIAkvLyBGaWxsIGluIHJlcGxheSBjb3VudGVyCisgICAgTmRpc01vdmVNZW1vcnkocE1zZy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBSZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIEZpbGwgS2V5IE5vbmNlIGZpZWxkCisJLy8gQU5vbmNlIDogcGFpcndpc2VfbXNnMSAmIHBhaXJ3aXNlX21zZzMKKwkvLyBTTm9uY2UgOiBwYWlyd2lzZV9tc2cyCisJLy8gR05vbmNlIDogZ3JvdXBfbXNnMV93cGExCisJaWYgKChNc2dUeXBlIDw9IEVBUE9MX1BBSVJfTVNHXzMpIHx8ICgoIWJXUEEyICYmIChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkpKQorICAgIAlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleU5vbmNlLCBLZXlOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIEZpbGwga2V5IElWIC0gV1BBMiBhcyAwLCBXUEExIGFzIHJhbmRvbQorCWlmICghYldQQTIgJiYgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCXsKKwkJLy8gU3VnZ2VzdCBJViBiZSByYW5kb20gbnVtYmVyIHBsdXMgc29tZSBudW1iZXIsCisJCU5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5SXYsICZLZXlOb25jZVsxNl0sIExFTl9LRVlfREVTQ19JVik7CisgICAgICAgIHBNc2ctPktleURlc2MuS2V5SXZbMTVdICs9IDI7CisJfQorCisgICAgLy8gRmlsbCBLZXkgUlNDIGZpZWxkCisgICAgLy8gSXQgY29udGFpbnMgdGhlIFJTQyBmb3IgdGhlIEdUSyBiZWluZyBpbnN0YWxsZWQuCisJaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgYldQQTIpIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKKwl7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5UnNjLCBUeFJTQywgNik7CisJfQorCisJLy8gQ2xlYXIgS2V5IE1JQyBmaWVsZCBmb3IgTUlDIGNhbGN1bGF0aW9uIGxhdGVyCisgICAgTmRpc1plcm9NZW1vcnkocE1zZy0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJQ29uc3RydWN0RWFwb2xLZXlEYXRhKHBBZCwKKwkJCQkJCSAgQXV0aE1vZGUsCisJCQkJCQkgIFdlcFN0YXR1cywKKwkJCQkJCSAgR3JvdXBLZXlXZXBTdGF0dXMsCisJCQkJCQkgIE1zZ1R5cGUsCisJCQkJCQkgIERlZmF1bHRLZXlJZHgsCisJCQkJCQkgIGJXUEEyLAorCQkJCQkJICBQVEssCisJCQkJCQkgIEdUSywKKwkJCQkJCSAgUlNOSUUsCisJCQkJCQkgIFJTTklFX0xlbiwKKwkJCQkJCSAgcE1zZyk7CisKKwkvLyBDYWxjdWxhdGUgTUlDIGFuZCBmaWxsIGluIEtleU1pYyBGaWVsZCBleGNlcHQgUGFpcndpc2UgTXNnIDEuCisJaWYgKE1zZ1R5cGUgIT0gRUFQT0xfUEFJUl9NU0dfMSkKKwl7CisJCUNhbGN1bGF0ZU1JQyhwQWQsIFdlcFN0YXR1cywgUFRLLCBwTXNnKTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IENvbnN0cnVjdEVhcG9sTXNnIGZvciAlcyAlc1xuIiwgKChiV1BBMikgPyAiV1BBMiIgOiAiV1BBIiksIEdldEVhcG9sTXNnVHlwZShNc2dUeXBlKSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIgkgICAgIEJvZHkgbGVuZ3RoID0gJWQgXG4iLCBwTXNnLT5Cb2R5X0xlblsxXSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIgkgICAgIEtleSBsZW5ndGggID0gJWQgXG4iLCBwTXNnLT5LZXlEZXNjLktleUxlbmd0aFsxXSkpOworCisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNvbnN0cnVjdCB0aGUgS2V5IERhdGEgZmllbGQgb2YgRUFQb0wgbWVzc2FnZQorCisJQXJndW1lbnRzOgorCQlwQWQJCQlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCUVsZW0JCU1lc3NhZ2UgYm9keQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlDb25zdHJ1Y3RFYXBvbEtleURhdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlBdXRoTW9kZSwKKwlJTglVQ0hBUgkJCVdlcFN0YXR1cywKKwlJTglVQ0hBUgkJCUdyb3VwS2V5V2VwU3RhdHVzLAorCUlOIAlVQ0hBUgkJCU1zZ1R5cGUsCisJSU4JVUNIQVIJCQlEZWZhdWx0S2V5SWR4LAorCUlOCUJPT0xFQU4JCQliV1BBMkNhcGFibGUsCisJSU4JVUNIQVIJCQkqUFRLLAorCUlOCVVDSEFSCQkJKkdUSywKKwlJTglVQ0hBUgkJCSpSU05JRSwKKwlJTglVQ0hBUgkJCVJTTklFX0xFTiwKKwlPVVQgUEVBUE9MX1BBQ0tFVCAgIHBNc2cpCit7CisJVUNIQVIJCSptcG9vbCwgKktleV9EYXRhLCAqUmM0R1RLOworCVVDSEFSICAgICAgIGVrZXlbKExFTl9LRVlfREVTQ19JVitMRU5fRUFQX0VLKV07CisJVUNIQVIJCWRhdGFfb2Zmc2V0OworCisKKwlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xIHx8IE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfNCB8fCBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18yKQorCQlyZXR1cm47CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkgcG9vbAorCW9zX2FsbG9jX21lbShwQWQsIChQVUNIQVIgKikmbXBvb2wsIDE1MDApOworCisgICAgaWYgKG1wb29sID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFJjNEdUSyBMZW4gPSA1MTIgKi8KKwlSYzRHVEsgPSAoVUNIQVIgKikgUk9VTkRfVVAobXBvb2wsIDQpOworCS8qIEtleV9EYXRhIExlbiA9IDUxMiAqLworCUtleV9EYXRhID0gKFVDSEFSICopIFJPVU5EX1VQKFJjNEdUSyArIDUxMiwgNCk7CisKKwlOZGlzWmVyb01lbW9yeShLZXlfRGF0YSwgNTEyKTsKKwlwTXNnLT5LZXlEZXNjLktleURhdGFMZW5bMV0gPSAwOworCWRhdGFfb2Zmc2V0ID0gMDsKKworCS8vIEVuY2Fwc3VsYXRlIFJTTklFIGluIHBhaXJ3aXNlX21zZzIgJiBwYWlyd2lzZV9tc2czCisJaWYgKFJTTklFX0xFTiAmJiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMikgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykpKQorCXsKKwkJaWYgKGJXUEEyQ2FwYWJsZSkKKwkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMF0gPSBJRV9XUEEyOworCQllbHNlCisJCQlLZXlfRGF0YVtkYXRhX29mZnNldCArIDBdID0gSUVfV1BBOworCisgICAgICAgIEtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSBSU05JRV9MRU47CisJCU5kaXNNb3ZlTWVtb3J5KCZLZXlfRGF0YVtkYXRhX29mZnNldCArIDJdLCBSU05JRSwgUlNOSUVfTEVOKTsKKwkJZGF0YV9vZmZzZXQgKz0gKDIgKyBSU05JRV9MRU4pOworCX0KKworCS8vIEVuY2Fwc3VsYXRlIEtERSBmb3JtYXQgaW4gcGFpcndpc2VfbXNnM19XUEEyICYgZ3JvdXBfbXNnMV9XUEEyCisJaWYgKGJXUEEyQ2FwYWJsZSAmJiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKSkKKwl7CisJCS8vIEtleSBEYXRhIEVuY2Fwc3VsYXRpb24gKEtERSkgZm9ybWF0IC0gODAyLjExaS0yMDA0ICBGaWd1cmUtNDN3IGFuZCBUYWJsZS0yMGgKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAwXSA9IDB4REQ7CisKKwkJaWYgKEdyb3VwS2V5V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJCXsKKwkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSAweDE2Oy8vIDQrMisxNihPVUkrRGF0YVR5cGUrRGF0YUZpZWxkKQorCQl9CisJCWVsc2UKKwkJeworCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAxXSA9IDB4MjY7Ly8gNCsyKzMyKE9VSStEYXRhVHlwZStEYXRhRmllbGQpCisJCX0KKworICAgICAgICBLZXlfRGF0YVtkYXRhX29mZnNldCArIDJdID0gMHgwMDsKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAzXSA9IDB4MEY7CisgICAgICAgIEtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgNF0gPSAweEFDOworICAgICAgICBLZXlfRGF0YVtkYXRhX29mZnNldCArIDVdID0gMHgwMTsKKworCQkvLyBHVEsgS0RFIGZvcm1hdCAtIDgwMi4xMWktMjAwNCAgRmlndXJlLTQzeAorICAgICAgICBLZXlfRGF0YVtkYXRhX29mZnNldCArIDZdID0gKERlZmF1bHRLZXlJZHggJiAweDAzKTsKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA3XSA9IDB4MDA7CS8vIFJlc2VydmVkIEJ5dGUKKworCQlkYXRhX29mZnNldCArPSA4OworCX0KKworCisJLy8gRW5jYXBzdWxhdGUgR1RLIGFuZCBlbmNyeXB0IHRoZSBrZXktZGF0YSBmaWVsZCB3aXRoIEtFSy4KKwkvLyBPbmx5IGZvciBwYWlyd2lzZV9tc2czX1dQQTIgYW5kIGdyb3VwX21zZzEKKwlpZiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyAmJiBiV1BBMkNhcGFibGUpIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKKwl7CisJCS8vIEZpbGwgaW4gR1RLCisJCWlmIChHcm91cEtleVdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQl7CisJCQlOZGlzTW92ZU1lbW9yeSgmS2V5X0RhdGFbZGF0YV9vZmZzZXRdLCBHVEssIExFTl9BRVNfS0VZKTsKKwkJCWRhdGFfb2Zmc2V0ICs9IExFTl9BRVNfS0VZOworCQl9CisJCWVsc2UKKwkJeworCQkJTmRpc01vdmVNZW1vcnkoJktleV9EYXRhW2RhdGFfb2Zmc2V0XSwgR1RLLCBUS0lQX0dUS19MRU5HVEgpOworCQkJZGF0YV9vZmZzZXQgKz0gVEtJUF9HVEtfTEVOR1RIOworCQl9CisKKwkJLy8gU3RpbGwgZG9udCBrbm93IHdoeSwgYnV0IGlmIG5vdCBhcHBlbmQgd2lsbCBvY2N1ciAiR1RLIG5vdCBpbmNsdWRlIGluIE1TRzMiCisJCS8vIFBhdGNoIGZvciBjb21wYXRpYmlsaXR5IGJldHdlZW4gemVybyBjb25maWcgYW5kIGZ1bmsKKwkJaWYgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyAmJiBiV1BBMkNhcGFibGUpCisJCXsKKwkJCWlmIChHcm91cEtleVdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJeworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMF0gPSAweEREOworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSAwOworCQkJCWRhdGFfb2Zmc2V0ICs9IDI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAwXSA9IDB4REQ7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAxXSA9IDA7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAyXSA9IDA7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAzXSA9IDA7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA0XSA9IDA7CisJCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA1XSA9IDA7CisJCQkJZGF0YV9vZmZzZXQgKz0gNjsKKwkJCX0KKwkJfQorCisJCS8vIEVuY3J5cHQgdGhlIGRhdGEgbWF0ZXJpYWwgaW4ga2V5IGRhdGEgZmllbGQKKwkJaWYgKFdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQl7CisJCQlBRVNfR1RLX0tFWV9XUkFQKCZQVEtbMTZdLCBLZXlfRGF0YSwgZGF0YV9vZmZzZXQsIFJjNEdUSyk7CisgICAgICAgICAgICAvLyBBRVMgd3JhcCBmdW5jdGlvbiB3aWxsIGdyb3cgOCBieXRlcyBpbiBsZW5ndGgKKyAgICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IDg7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBQUkVQQVJFIEVuY3J5cHRlZCAgIktleSBEQVRBIiBmaWVsZC4gIChFbmNyeXB0IEdUSyB3aXRoIFJDNCwgdXNpbmYgUFRLWzE2XS0+WzMxXSBhcyBLZXksIElWLWZpZWxkIGFzIElWKQorCQkJLy8gcHV0IFR4VHNjIGluIEtleSBSU0MgZmllbGQKKwkJCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPSBQUFBJTklURkNTMzI7ICAgLy9Jbml0IGNyYzMyLgorCisJCQkvLyBla2V5IGlzIHRoZSBjb250YW5ldGlvbiBvZiBJVi1maWVsZCwgYW5kIFBUS1sxNl0tPlBUS1szMV0KKwkJCU5kaXNNb3ZlTWVtb3J5KGVrZXksIHBNc2ctPktleURlc2MuS2V5SXYsIExFTl9LRVlfREVTQ19JVik7CisJCQlOZGlzTW92ZU1lbW9yeSgmZWtleVtMRU5fS0VZX0RFU0NfSVZdLCAmUFRLWzE2XSwgTEVOX0VBUF9FSyk7CisJCQlBUkNGT1VSX0lOSVQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgZWtleSwgc2l6ZW9mKGVrZXkpKTsgIC8vSU5JVCBTQk9YLCBLRVlMRU4rMyhJVikKKwkJCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPSBSVE1QX0NBTENfRkNTMzIocEFkLT5Qcml2YXRlSW5mby5GQ1NDUkMzMiwgS2V5X0RhdGEsIGRhdGFfb2Zmc2V0KTsKKwkJCVdQQUFSQ0ZPVVJfRU5DUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBSYzRHVEssIEtleV9EYXRhLCBkYXRhX29mZnNldCk7CisJCX0KKworCQlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleURhdGEsIFJjNEdUSywgZGF0YV9vZmZzZXQpOworCX0KKwllbHNlCisJeworCQlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleURhdGEsIEtleV9EYXRhLCBkYXRhX29mZnNldCk7CisJfQorCisJLy8gc2V0IGtleSBkYXRhIGxlbmd0aCBmaWVsZCBhbmQgdG90YWwgbGVuZ3RoCisJcE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdID0gZGF0YV9vZmZzZXQ7CisgICAgcE1zZy0+Qm9keV9MZW5bMV0gKz0gZGF0YV9vZmZzZXQ7CisKKwlvc19mcmVlX21lbShwQWQsIG1wb29sKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FsY2F1bGF0ZSBNSUMuIEl0IGlzIHVzZWQgZHVyaW5nIDQtd2F5cyBoYW5kc2hhcmtpbmcuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKyAgICAJUGVlcldlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUNhbGN1bGF0ZU1JQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVBlZXJXZXBTdGF0dXMsCisJSU4JVUNIQVIJCQkqUFRLLAorCU9VVCBQRUFQT0xfUEFDS0VUICAgcE1zZykKK3sKKyAgICBVQ0hBUiAgICpPdXRCdWZmZXI7CisJVUxPTkcJRnJhbWVMZW4gPSAwOworCVVDSEFSCW1pY1tMRU5fS0VZX0RFU0NfTUlDXTsKKwlVQ0hBUglkaWdlc3RbODBdOworCisJLy8gYWxsb2NhdGUgbWVtb3J5IGZvciBNSUMgY2FsY3VsYXRpb24KKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJk91dEJ1ZmZlciwgNTEyKTsKKworICAgIGlmIChPdXRCdWZmZXIgPT0gTlVMTCkKKyAgICB7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiEhIUNhbGN1bGF0ZU1JQzogbm8gbWVtb3J5ISEhXG4iKSk7CisJCXJldHVybjsKKyAgICB9CisKKwkvLyBtYWtlIGEgZnJhbWUgZm9yIGNhbGN1bGF0aW5nIE1JQy4KKyAgICBNYWtlT3V0Z29pbmdGcmFtZShPdXRCdWZmZXIsICAgICAgICAgICAgCSZGcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBwTXNnLT5Cb2R5X0xlblsxXSArIDQsICAJcE1zZywKKyAgICAgICAgICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwlOZGlzWmVyb01lbW9yeShtaWMsIHNpemVvZihtaWMpKTsKKworCS8vIENhbGN1bGF0ZSBNSUMKKyAgICBpZiAoUGVlcldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorIAl7CisJCUhNQUNfU0hBMShPdXRCdWZmZXIsICBGcmFtZUxlbiwgUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KG1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJaG1hY19tZDUoUFRLLCAgTEVOX0VBUF9NSUNLLCBPdXRCdWZmZXIsIEZyYW1lTGVuLCBtaWMpOworCX0KKworCS8vIHN0b3JlIHRoZSBjYWxjdWxhdGVkIE1JQworCU5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5TWljLCBtaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJb3NfZnJlZV9tZW0ocEFkLCBPdXRCdWZmZXIpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU29tZSByZWNlaXZlZCBmcmFtZXMgY2FuJ3QgZGVjcnlwdCBieSBBc2ljLCBzbyBkZWNyeXB0IHRoZW0gYnkgc29mdHdhcmUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKyAgICAJUGVlcldlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUwkJLQlkZWNyeXB0aW9uIHN1Y2Nlc3NmdWwKKwkJTkRJU19TVEFUVVNfRkFJTFVSRQkJLQlkZWNyeXB0aW9uIGZhaWx1cmUKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCVJUTVBTb2Z0RGVjcnlwdEJyb2FkQ2FzdERhdGEoCisJSU4JUFJUTVBfQURBUFRFUgkJCQkJcEFkLAorCUlOCVJYX0JMSwkJCQkJCQkqcFJ4QmxrLAorCUlOICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyAJR3JvdXBDaXBoZXIsCisJSU4gIFBDSVBIRVJfS0VZCQkJCQkJcFNoYXJkX2tleSkKK3sKKwlQUlhXSV9TVFJVQwkJCXBSeFdJID0gcFJ4QmxrLT5wUnhXSTsKKworCisKKwkvLyBoYW5kbGUgV0VQIGRlY3J5cHRpb24KKwlpZiAoR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkKKyAgICB7CisJCWlmIChSVE1QU29mdERlY3J5cHRXRVAocEFkLCBwUnhCbGstPnBEYXRhLCBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50LCBwU2hhcmRfa2V5KSkKKwkJeworCisJCQkvL01pbnVzIElWWzRdICYgSUNWWzRdCisJCQlwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IC09IDg7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUiA6IFNvZnR3YXJlIGRlY3J5cHQgV0VQIGRhdGEgZmFpbHMuXG4iKSk7CisJCQkvLyBnaXZlIHVwIHRoaXMgZnJhbWUKKwkJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCQl9CisJfQorCS8vIGhhbmRsZSBUS0lQIGRlY3J5cHRpb24KKwllbHNlIGlmIChHcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCXsKKwkJaWYgKFJUTVBTb2Z0RGVjcnlwdFRLSVAocEFkLCBwUnhCbGstPnBEYXRhLCBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50LCAwLCBwU2hhcmRfa2V5KSkKKwkJeworCisJCQkvL01pbnVzIDggYnl0ZXMgTUlDLCA4IGJ5dGVzIElWL0VJViwgNCBieXRlcyBJQ1YKKwkJCXBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgLT0gMjA7CisJCX0KKyAgICAgICAgZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUiA6IFJUTVBTb2Z0RGVjcnlwdFRLSVAgRmFpbGVkXG4iKSk7CisJCQkvLyBnaXZlIHVwIHRoaXMgZnJhbWUKKwkJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworICAgICAgICB9CisJfQorCS8vIGhhbmRsZSBBRVMgZGVjcnlwdGlvbgorCWVsc2UgaWYgKEdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQlpZiAoUlRNUFNvZnREZWNyeXB0QUVTKHBBZCwgcFJ4QmxrLT5wRGF0YSwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCAsIHBTaGFyZF9rZXkpKQorCQl7CisKKwkJCS8vOCBieXRlcyBNSUMsIDggYnl0ZXMgSVYvRUlWIChDQ01QIEhlYWRlcikKKwkJCXBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgLT0gMTY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUiA6IFJUTVBTb2Z0RGVjcnlwdEFFUyBGYWlsZWRcbiIpKTsKKwkJCS8vIGdpdmUgdXAgdGhpcyBmcmFtZQorCQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLy8gZ2l2ZSB1cCB0aGlzIGZyYW1lCisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2Rmcy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vZGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkNjAxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2Rmcy5jCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIGFwX2Rmcy5jCisKKyAgICBBYnN0cmFjdDoKKyAgICBTdXBwb3J0IERGUyBmdW5jdGlvbi4KKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgRm9uY2hpICAgIDAzLTEyLTIwMDcgICAgICBjcmVhdGVkCisqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKK3R5cGVkZWYgc3RydWN0IF9SQURBUl9EVVJBVElPTl9UQUJMRQoreworCVVMT05HIFJERHVyUmVnaW9uOworCVVMT05HIFJhZGFyU2lnbmFsRHVyYXRpb247CisJVUxPTkcgVG9sZXJhbmNlOworfSBSQURBUl9EVVJBVElPTl9UQUJMRSwgKlBSQURBUl9EVVJBVElPTl9UQUJMRTsKKworCitzdGF0aWMgVUNIQVIgUmRJZGxlVGltZVRhYmxlW01BWF9SRF9SRUdJT05dWzRdID0KK3sKKwl7OSwgMjUwLCAyNTAsIDI1MH0sCQkvLyBDRQorCXs0LCAyNTAsIDI1MCwgMjUwfSwJCS8vIEZDQworCXs0LCAyNTAsIDI1MCwgMjUwfSwJCS8vIEpBUAorCXsxNSwgMjUwLCAyNTAsIDI1MH0sCS8vIEpBUF9XNTMKKwl7NCwgMjUwLCAyNTAsIDI1MH0JCS8vIEpBUF9XNTYKK307CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlCYnAgUmFkYXIgZGV0ZWN0aW9uIHJvdXRpbmUKKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEJicFJhZGFyRGV0ZWN0aW9uU3RhcnQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUlOVDggUmFkYXJQZXJpb2Q7CisKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTE0LCAweDAyKTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTIxLCAweDIwKTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTIyLCAweDAwKTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTIzLCAweDA4LyoweDgwKi8pOworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCAxMjQsIDB4MjgpOworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCAxMjUsIDB4ZmYpOworCisJUmFkYXJQZXJpb2QgPSAoKFVJTlQpUmRJZGxlVGltZVRhYmxlW3BBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uXVswXSArIChVSU5UKXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lKSA8IDI1MCA/CisJCQkoUmRJZGxlVGltZVRhYmxlW3BBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uXVswXSArIHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lKSA6IDI1MDsKKworCVJUTVBfSU9fV1JJVEU4KHBBZCwgMHg3MDIwLCAweDFkKTsKKwlSVE1QX0lPX1dSSVRFOChwQWQsIDB4NzAyMSwgMHg0MCk7CisKKwlSYWRhckRldGVjdGlvblN0YXJ0KHBBZCwgMCwgUmFkYXJQZXJpb2QpOworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUJicCBSYWRhciBkZXRlY3Rpb24gcm91dGluZQorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQmJwUmFkYXJEZXRlY3Rpb25TdG9wKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVJUTVBfSU9fV1JJVEU4KHBBZCwgMHg3MDIwLCAweDFkKTsKKwlSVE1QX0lPX1dSSVRFOChwQWQsIDB4NzAyMSwgMHg2MCk7CisKKwlSYWRhckRldGVjdGlvblN0b3AocEFkKTsKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSYWRhciBkZXRlY3Rpb24gcm91dGluZQorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUmFkYXJEZXRlY3Rpb25TdGFydCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOIENUU1Byb3RlY3QsCisJSU4gVUlOVDggQ1RTUGVyaW9kKQoreworCVVJTlQ4IERmc0FjdGl2ZVRpbWUgPSAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgJiAweDFmKTsKKwlVSU5UOCBDdHNQcm90ZWN0ID0gKENUU1Byb3RlY3QgPT0gMSkgPyAweDAyIDogMHgwMTsgLy8gQ1RTIHByb3RlY3QuCisKKwlpZiAoQ1RTUHJvdGVjdCAhPSAwKQorCXsKKwkJc3dpdGNoKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uKQorCQl7CisJCWNhc2UgRkNDOgorCQljYXNlIEpBUF9XNTY6CisJCQlDdHNQcm90ZWN0ID0gMHgwMzsKKwkJCWJyZWFrOworCisJCWNhc2UgQ0U6CisJCWNhc2UgSkFQX1c1MzoKKwkJZGVmYXVsdDoKKwkJCUN0c1Byb3RlY3QgPSAweDAyOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZQorCQlDdHNQcm90ZWN0ID0gMHgwMTsKKworCisJLy8gc2VuZCBzdGFydC1SRCB3aXRoIENUUyBwcm90ZWN0aW9uIGNvbW1hbmQgdG8gTUNVCisJLy8gaGlnaGJ5dGUgWzddCQlyZXNlcnZlCisJLy8gaGlnaGJ5dGUgWzY6NV0JMHg6IHN0b3AgQ2Fycmllci9SYWRhciBkZXRlY3Rpb24KKwkvLyBoaWdoYnl0ZSBbMTBdOglTdGFydCBDYXJyaWVyL1JhZGFyIGRldGVjdGlvbiB3aXRob3V0IENUUyBwcm90ZWN0aW9uLCAxMTogU3RhcnQgQ2Fycmllci9SYWRhciBkZXRlY3Rpb24gd2l0aCBDVFMgcHJvdGVjdGlvbgorCS8vIGhpZ2hieXRlIFs0OjBdCVJhZGFyL2NhcnJpZXIgZGV0ZWN0aW9uIGR1cmF0aW9uLiBJbiAxbXMuCisKKwkvLyBsb3dieXRlIFs3OjBdCVJhZGFyL2NhcnJpZXIgZGV0ZWN0aW9uIHBlcmlvZCwgaW4gMW1zLgorCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg2MCwgMHhmZiwgQ1RTUGVyaW9kLCBEZnNBY3RpdmVUaW1lIHwgKEN0c1Byb3RlY3QgPDwgNSkpOworCS8vQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDYzLCAweGZmLCAxMCwgMCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSYWRhciBkZXRlY3Rpb24gcm91dGluZQorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJVFJVRQlGb3VuZCByYWRhciBzaWduYWwKKwkJRkFMU0UJTm90IGZvdW5kIHJhZGFyIHNpZ25hbAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSYWRhckRldGVjdGlvblN0b3AoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSYWRhckRldGVjdGlvblN0b3AuXG4iKSk7CisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDYwLCAweGZmLCAweDAwLCAweDAwKTsJLy8gc2VuZCBzdGFydC1SRCB3aXRoIENUUyBwcm90ZWN0aW9uIGNvbW1hbmQgdG8gTUNVCisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSYWRhciBjaGFubmVsIGNoZWNrIHJvdXRpbmUKKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUJbmVlZCB0byBkbyByYWRhciBkZXRlY3QKKwkJRkFMU0UJbmVlZCBub3QgdG8gZG8gcmFkYXIgZGV0ZWN0CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJhZGFyQ2hhbm5lbENoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVDSEFSCQkJQ2gpCit7CisjaWYgMQorCUlOVAkJaTsKKwlCT09MRUFOIHJlc3VsdCA9IEZBTFNFOworCisJZm9yIChpPTA7IGk8cEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCXsKKwkJaWYgKENoID09IHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCkKKwkJeworCQkJcmVzdWx0ID0gcEFkLT5DaGFubmVsTGlzdFtpXS5EZnNSZXE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7CisjZWxzZQorCUlOVAkJaTsKKwlVQ0hBUglDaGFubmVsWzE1XT17NTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwfTsKKworCWZvciAoaT0wOyBpPDE1OyBpKyspCisJeworCQlpZiAoQ2ggPT0gQ2hhbm5lbFtpXSkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSAhPSAxNSkKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7CisjZW5kaWYKK30KKworVUxPTkcgSmFwUmFkYXJUeXBlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVMT05HCQlpOworCWNvbnN0IFVDSEFSCUNoYW5uZWxbMTVdPXs1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDB9OworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uICE9IEpBUCkKKwl7CisJCXJldHVybiBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbjsKKwl9CisKKwlmb3IgKGk9MDsgaTwxNTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPT0gQ2hhbm5lbFtpXSkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA8IDQpCisJCXJldHVybiBKQVBfVzUzOworCWVsc2UgaWYgKGkgPCAxNSkKKwkJcmV0dXJuIEpBUF9XNTY7CisJZWxzZQorCQlyZXR1cm4gSkFQOyAvLyBXNTIKKworfQorCitVTE9ORyBSVE1QQmJwUmVhZFJhZGFyRHVyYXRpb24oCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUlOVDggYnl0ZVZhbHVlID0gMDsKKwlVTE9ORyByZXN1bHQ7CisKKwlCQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxMTUsICZieXRlVmFsdWUpOworCisJcmVzdWx0ID0gMDsKKwlzd2l0Y2ggKGJ5dGVWYWx1ZSkKKwl7CisJY2FzZSAxOiAvLyByYWRhciBzaWduYWwgZGV0ZWN0ZWQgYnkgcHVsc2UgbW9kZS4KKwljYXNlIDI6IC8vIHJhZGFyIHNpZ25hbCBkZXRlY3RlZCBieSB3aWR0aCBtb2RlLgorCQlyZXN1bHQgPSBSVE1QUmVhZFJhZGFyRHVyYXRpb24ocEFkKTsKKwkJYnJlYWs7CisKKwljYXNlIDA6IC8vIE5vIHJhZGFyIHNpZ25hbC4KKwlkZWZhdWx0OgorCisJCXJlc3VsdCA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK1VMT05HIFJUTVBSZWFkUmFkYXJEdXJhdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVTE9ORyByZXN1bHQgPSAwOworCisjaWZkZWYgREZTX1NVUFBPUlQKKwlVSU5UOCBkdXJhdGlvbjEgPSAwLCBkdXJhdGlvbjIgPSAwLCBkdXJhdGlvbjMgPSAwOworCisJQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMTE2LCAmZHVyYXRpb24xKTsKKwlCQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxMTcsICZkdXJhdGlvbjIpOworCUJCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjExOCwgJmR1cmF0aW9uMyk7CisJcmVzdWx0ID0gKGR1cmF0aW9uMSA8PCAxNikgKyAoZHVyYXRpb24yIDw8IDgpICsgZHVyYXRpb24zOworI2VuZGlmIC8vIERGU19TVVBQT1JUIC8vCisKKwlyZXR1cm4gcmVzdWx0OworCit9CisKK1ZPSUQgUlRNUENsZWFuUmFkYXJEdXJhdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlyZXR1cm47Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmFkYXIgd2F2ZSBkZXRlY3Rpb24uIFRoZSBBUEkgc2hvdWxkIGJlIGludm9rZSBlYWNoIHNlY29uZC4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgcEFkICAgICAgICAgLSBBZGFwdGVyIHBvaW50ZXIKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBcFJhZGFyRGV0ZWN0UGVyaW9kaWMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJSU5UCWk7CisKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5JblNlcnZpY2VNb25pdG9yQ291bnQrKzsKKworCWZvciAoaT0wOyBpPHBBZC0+Q2hhbm5lbExpc3ROdW07IGkrKykKKwl7CisJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2ldLlJlbWFpbmluZ1RpbWVGb3JVc2UgPiAwKQorCQl7CisJCQlwQWQtPkNoYW5uZWxMaXN0W2ldLlJlbWFpbmluZ1RpbWVGb3JVc2UgLS07CisJCQlpZiAoKHBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kJTUpID09IDApCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFkYXJEZXRlY3RQZXJpb2RpYyAtIGNoPSVkLCBSZW1haW5pbmdUaW1lRm9yVXNlPSVkXG4iLCBwQWQtPkNoYW5uZWxMaXN0W2ldLkNoYW5uZWwsIHBBZC0+Q2hhbm5lbExpc3RbaV0uUmVtYWluaW5nVGltZUZvclVzZSkpOworCQkJfQorCQl9CisJfQorCisJLy9yYWRhciBkZXRlY3QKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJJiYgKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpCisJCSYmIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpCisJeworCQlSYWRhckRldGVjdFBlcmlvZGljKHBBZCk7CisJfQorCisJcmV0dXJuOworfQorCisvLyBQZXJpb2RpYyBSYWRhciBkZXRlY3Rpb24sIHN3aXRjaCBjaGFubmVsIHdpbGwgb2NjdXIgaW4gUlRNUEhhbmRsZVRCVFRJbnRlcnJ1cHQoKQorLy8gQmVmb3JlIHN3aXRjaCBjaGFubmVsLCBkcml2ZXIgbmVlZHMgZG9pbmcgY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50LgorVk9JRCBSYWRhckRldGVjdFBlcmlvZGljKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworCS8vIG5lZWQgdG8gY2hlY2sgY2hhbm5lbCBhdmFpbGFiaWxpdHksIGFmdGVyIHN3aXRjaCBjaGFubmVsCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSAhPSBSRF9TSUxFTkNFX01PREUpCisJCQlyZXR1cm47CisKKwkvLyBjaGFubmVsIGF2YWlsYWJpbGl0eSBjaGVjayB0aW1lIGlzIDYwc2VjLCB1c2UgNjUgZm9yIGFzc3VyYW5jZQorCWlmIChwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRENvdW50KysgPiBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DaE1vdmluZ1RpbWUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOb3QgZm91bmQgcmFkYXIgc2lnbmFsLCBzdGFydCBzZW5kIGJlYWNvbiBhbmQgcmFkYXIgZGV0ZWN0aW9uIGluIHNlcnZpY2UgbW9uaXRvclxuXG4iKSk7CisJCQlCYnBSYWRhckRldGVjdGlvblN0b3AocEFkKTsKKwkJQXNpY0VuYWJsZUJzc1N5bmMocEFkKTsKKwkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID0gUkRfTk9STUFMX01PREU7CisKKworCQlyZXR1cm47CisJfQorCisJcmV0dXJuOworfQorCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKwkJY2hhbmdlIGNoYW5uZWwgbW92aW5nIHRpbWUgZm9yIERGUyB0ZXN0aW5nLgorCisJQXJndW1lbnRzOgorCSAgICBwQWRhcHRlciAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCSAgICB3cnEgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW9jdGwgYXJndW1lbnQKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICAgICAxLikgaXdwcml2IHJhMCBzZXQgQ2hNb3ZUaW1lPVt2YWx1ZV0KKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfQ2hNb3ZpbmdUaW1lX1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIGFyZykKK3sKKwlVSU5UOCBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNoTW92aW5nVGltZSA9IFZhbHVlOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OiAlZFxuIiwgX19GVU5DVElPTl9fLAorCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DaE1vdmluZ1RpbWUpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQgU2V0X0xvbmdQdWxzZVJhZGFyVGhfUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgYXJnKQoreworCVVJTlQ4IFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID4gMTAgPyAxMCA6IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5Mb25nUHVsc2VSYWRhclRoID0gVmFsdWU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6ICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkxvbmdQdWxzZVJhZGFyVGgpKTsKKworCXJldHVybiBUUlVFOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2VlcHJvbS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlMWRjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2VlcHJvbS5jCkBAIC0wLDAgKzEsMTQ5OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwllZXByb20uYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworKi8KKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKworLy8gSVJRTCA9IFBBU1NJVkVfTEVWRUwKK1ZPSUQgUmFpc2VDbG9jaygKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgVUlOVDMyICp4KQoreworICAgICp4ID0gKnggfCBFRVNLOworICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsICp4KTsKKyAgICBSVE1QdXNlY0RlbGF5KDEpOwkJCQkvLyBNYXggZnJlcXVlbmN5ID0gMU1IeiBpbiBTcGVjLiBkZWZpbml0aW9uCit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitWT0lEIExvd2VyQ2xvY2soCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFVJTlQzMiAqeCkKK3sKKyAgICAqeCA9ICp4ICYgfkVFU0s7CisgICAgUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgKngpOworICAgIFJUTVB1c2VjRGVsYXkoMSk7Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitVU0hPUlQgU2hpZnRJbkJpdHMoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisgICAgVUlOVDMyCQl4LGk7CisJVVNIT1JUICAgICAgZGF0YT0wOworCisgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisKKyAgICB4ICY9IH4oIEVFRE8gfCBFRURJKTsKKworICAgIGZvcihpPTA7IGk8MTY7IGkrKykKKyAgICB7CisgICAgICAgIGRhdGEgPSBkYXRhIDw8IDE7CisgICAgICAgIFJhaXNlQ2xvY2socEFkLCAmeCk7CisKKyAgICAgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisJCUxvd2VyQ2xvY2socEFkLCAmeCk7IC8vcHJldmVudCByZWFkIGZhaWxlZAorCisgICAgICAgIHggJj0gfihFRURJKTsKKyAgICAgICAgaWYoeCAmIEVFRE8pCisgICAgICAgICAgICBkYXRhIHw9IDE7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGE7Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitWT0lEIFNoaWZ0T3V0Qml0cygKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgVVNIT1JUIGRhdGEsCisgICAgSU4gIFVTSE9SVCBjb3VudCkKK3sKKyAgICBVSU5UMzIgICAgICAgeCxtYXNrOworCisgICAgbWFzayA9IDB4MDEgPDwgKGNvdW50IC0gMSk7CisgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisKKyAgICB4ICY9IH4oRUVETyB8IEVFREkpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHggJj0gfkVFREk7CisgICAgICAgIGlmKGRhdGEgJiBtYXNrKQkJeCB8PSBFRURJOworCisgICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsIHgpOworCisgICAgICAgIFJhaXNlQ2xvY2socEFkLCAmeCk7CisgICAgICAgIExvd2VyQ2xvY2socEFkLCAmeCk7CisKKyAgICAgICAgbWFzayA9IG1hc2sgPj4gMTsKKyAgICB9IHdoaWxlKG1hc2spOworCisgICAgeCAmPSB+RUVESTsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKK30KKworLy8gSVJRTCA9IFBBU1NJVkVfTEVWRUwKK1ZPSUQgRUVwcm9tQ2xlYW51cCgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyAgICBVSU5UMzIgeDsKKworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCisgICAgeCAmPSB+KEVFQ1MgfCBFRURJKTsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworICAgIFJhaXNlQ2xvY2socEFkLCAmeCk7CisgICAgTG93ZXJDbG9jayhwQWQsICZ4KTsKK30KKworVk9JRCBFV0VOKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworICAgIFVJTlQzMgl4OworCisgICAgLy8gcmVzZXQgYml0cyBhbmQgc2V0IEVFQ1MKKyAgICBSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKyAgICB4ICY9IH4oRUVESSB8IEVFRE8gfCBFRVNLKTsKKyAgICB4IHw9IEVFQ1M7CisgICAgUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7CisKKwkvLyBraWNrIGEgcHVsc2UKKwlSYWlzZUNsb2NrKHBBZCwgJngpOworCUxvd2VyQ2xvY2socEFkLCAmeCk7CisKKyAgICAvLyBvdXRwdXQgdGhlIHJlYWRfb3Bjb2RlIGFuZCBzaXggcHVsc2UgaW4gdGhhdCBvcmRlcgorICAgIFNoaWZ0T3V0Qml0cyhwQWQsIEVFUFJPTV9FV0VOX09QQ09ERSwgNSk7CisgICAgU2hpZnRPdXRCaXRzKHBBZCwgMCwgNik7CisKKyAgICBFRXByb21DbGVhbnVwKHBBZCk7Cit9CisKK1ZPSUQgRVdEUygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyAgICBVSU5UMzIJeDsKKworICAgIC8vIHJlc2V0IGJpdHMgYW5kIHNldCBFRUNTCisgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisgICAgeCAmPSB+KEVFREkgfCBFRURPIHwgRUVTSyk7CisgICAgeCB8PSBFRUNTOworICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsIHgpOworCisJLy8ga2ljayBhIHB1bHNlCisJUmFpc2VDbG9jayhwQWQsICZ4KTsKKwlMb3dlckNsb2NrKHBBZCwgJngpOworCisgICAgLy8gb3V0cHV0IHRoZSByZWFkX29wY29kZSBhbmQgc2l4IHB1bHNlIGluIHRoYXQgb3JkZXIKKyAgICBTaGlmdE91dEJpdHMocEFkLCBFRVBST01fRVdEU19PUENPREUsIDUpOworICAgIFNoaWZ0T3V0Qml0cyhwQWQsIDAsIDYpOworCisgICAgRUVwcm9tQ2xlYW51cChwQWQpOworfQorCisvLyBJUlFMID0gUEFTU0lWRV9MRVZFTAorVVNIT1JUIFJUTVBfRUVQUk9NX1JFQUQxNigKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgVVNIT1JUIE9mZnNldCkKK3sKKyAgICBVSU5UMzIJCXg7CisgICAgVVNIT1JUCQlkYXRhOworCisJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5BbnREaXZlcnNpdHkpCisgICAgeworICAgIAlwQWQtPkVlcHJvbUFjY2VzcyA9IFRSVUU7CisgICAgfQorLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlPC0tCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2UtLT4KK3sKKyAgICBPZmZzZXQgLz0gMjsKKyAgICAvLyByZXNldCBiaXRzIGFuZCBzZXQgRUVDUworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworICAgIHggJj0gfihFRURJIHwgRUVETyB8IEVFU0spOworICAgIHggfD0gRUVDUzsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworCS8vIHBhdGNoIGNhbiBub3QgYWNjZXNzIGUtRnVzZSBpc3N1ZQorICAgIGlmICghSVNfUlQzMDkwKHBBZCkpCisgICAgeworCS8vIGtpY2sgYSBwdWxzZQorCVJhaXNlQ2xvY2socEFkLCAmeCk7CisJTG93ZXJDbG9jayhwQWQsICZ4KTsKKyAgICB9CisKKyAgICAvLyBvdXRwdXQgdGhlIHJlYWRfb3Bjb2RlIGFuZCByZWdpc3RlciBudW1iZXIgaW4gdGhhdCBvcmRlcgorICAgIFNoaWZ0T3V0Qml0cyhwQWQsIEVFUFJPTV9SRUFEX09QQ09ERSwgMyk7CisgICAgU2hpZnRPdXRCaXRzKHBBZCwgT2Zmc2V0LCBwQWQtPkVFUFJPTUFkZHJlc3NOdW0pOworCisgICAgLy8gTm93IHJlYWQgdGhlIGRhdGEgKDE2IGJpdHMpIGluIGZyb20gdGhlIHNlbGVjdGVkIEVFUFJPTSB3b3JkCisgICAgZGF0YSA9IFNoaWZ0SW5CaXRzKHBBZCk7CisKKyAgICBFRXByb21DbGVhbnVwKHBBZCk7CisKKwkvLyBBbnRlbm5hIGFuZCBFRVBST00gYWNjZXNzIGFyZSBib3RoIHVzaW5nIEVFU0sgcGluLAorICAgIC8vIFRoZXJlZm9yIHdlIHNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgRUVTSyBhdCB0aGUgc2FtZSB0aW1lCisgICAgLy8gVGhlbiByZXN0b3JlIGFudGVubmEgYWZ0ZXIgRUVQUk9NIGFjY2VzcworCWlmICgocEFkLT5OaWNDb25maWcyLmZpZWxkLkFudERpdmVyc2l0eSkgfHwgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwKSkKKyAgICB7CisJICAgIHBBZC0+RWVwcm9tQWNjZXNzID0gRkFMU0U7CisJICAgIEFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOworICAgIH0KK30KKyAgICByZXR1cm4gZGF0YTsKK30JLy9SZWFkRUVwcm9tCisKK1ZPSUQgUlRNUF9FRVBST01fV1JJVEUxNigKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgVVNIT1JUIE9mZnNldCwKKyAgICBJTiAgVVNIT1JUIERhdGEpCit7CisgICAgVUlOVDMyIHg7CisKKwlpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkFudERpdmVyc2l0eSkKKyAgICB7CisgICAgCXBBZC0+RWVwcm9tQWNjZXNzID0gVFJVRTsKKyAgICB9CisJLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlPC0tCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2UtLT4KKwl7CisJT2Zmc2V0IC89IDI7CisKKwlFV0VOKHBBZCk7CisKKyAgICAvLyByZXNldCBiaXRzIGFuZCBzZXQgRUVDUworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworICAgIHggJj0gfihFRURJIHwgRUVETyB8IEVFU0spOworICAgIHggfD0gRUVDUzsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworCS8vIHBhdGNoIGNhbiBub3QgYWNjZXNzIGUtRnVzZSBpc3N1ZQorICAgIGlmICghSVNfUlQzMDkwKHBBZCkpCisgICAgeworCS8vIGtpY2sgYSBwdWxzZQorCVJhaXNlQ2xvY2socEFkLCAmeCk7CisJTG93ZXJDbG9jayhwQWQsICZ4KTsKKyAgICB9CisKKyAgICAvLyBvdXRwdXQgdGhlIHJlYWRfb3Bjb2RlICxyZWdpc3RlciBudW1iZXIgYW5kIGRhdGEgaW4gdGhhdCBvcmRlcgorICAgIFNoaWZ0T3V0Qml0cyhwQWQsIEVFUFJPTV9XUklURV9PUENPREUsIDMpOworICAgIFNoaWZ0T3V0Qml0cyhwQWQsIE9mZnNldCwgcEFkLT5FRVBST01BZGRyZXNzTnVtKTsKKwlTaGlmdE91dEJpdHMocEFkLCBEYXRhLCAxNik7CQkvLyAxNi1iaXQgYWNjZXNzCisKKyAgICAvLyByZWFkIERPIHN0YXR1cworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCisJRUVwcm9tQ2xlYW51cChwQWQpOworCisJUlRNUHVzZWNEZWxheSgxMDAwMCk7CS8vZGVsYXkgZm9yIHR3cChNQVgpPTEwbXMKKworCUVXRFMocEFkKTsKKworICAgIEVFcHJvbUNsZWFudXAocEFkKTsKKworCS8vIEFudGVubmEgYW5kIEVFUFJPTSBhY2Nlc3MgYXJlIGJvdGggdXNpbmcgRUVTSyBwaW4sCisgICAgLy8gVGhlcmVmb3Igd2Ugc2hvdWxkIGF2b2lkIGFjY2Vzc2luZyBFRVNLIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAvLyBUaGVuIHJlc3RvcmUgYW50ZW5uYSBhZnRlciBFRVBST00gYWNjZXNzCisJaWYgKChwQWQtPk5pY0NvbmZpZzIuZmllbGQuQW50RGl2ZXJzaXR5KSB8fCAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApKQorICAgIHsKKwkgICAgcEFkLT5FZXByb21BY2Nlc3MgPSBGQUxTRTsKKwkgICAgQXNpY1NldFJ4QW50KHBBZCwgcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCk7CisgICAgfQorfQorfQorCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2U8LS0KKyNpZmRlZiBSVDMweHgKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVUNIQVIgZUZ1c2VSZWFkUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlPVVQJVVNIT1JUKiBwRGF0YSkKK3sKKwlFRlVTRV9DVFJMX1NUUlVDCQllRnVzZUN0cmxTdHJ1YzsKKwlpbnQJaTsKKwlVU0hPUlQJZWZ1c2VEYXRhT2Zmc2V0OworCVVJTlQzMglkYXRhOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAoUFVJTlQzMikgJmVGdXNlQ3RybFN0cnVjKTsKKworCS8vU3RlcDAuIFdyaXRlIDEwLWJpdCBvZiBhZGRyZXNzIHRvIEVGU1JPTV9BSU4gKDB4NTgwLCBiaXQyNTpiaXQxNikuIFRoZSBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbm1lbnQuCisJLy9Vc2UgdGhlIGVlcHJvbSBsb2dpY2FsIGFkZHJlc3MgYW5kIGNvdmVydCB0byBhZGRyZXNzIHRvIGJsb2NrIG51bWJlcgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BSU4gPSBPZmZzZXQgJiAweGZmZjA7CisKKwkvL1N0ZXAxLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMC4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fTU9ERSA9IDA7CisKKwkvL1N0ZXAyLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHJlYWQgcHJvY2VkdXJlLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJLy9TdGVwMy4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLgorCWkgPSAwOworCXdoaWxlKGkgPCAxMDApCisJeworCQkvL3J0bXAuSHdNZW1vcnlSZWFkRHdvcmQoRUZVU0VfQ1RSTCwgKERXT1JEICopICZlRnVzZUN0cmxTdHJ1YywgNCk7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCXsKKwkJCWJyZWFrOworCQl9CisJCVJUTVB1c2VjRGVsYXkoMik7CisJCWkrKzsKKwl9CisKKwkvL2lmIEVGU1JPTV9BT1VUIGlzIG5vdCBmb3VuZCBpbiBwaHlzaWNhbCBhZGRyZXNzLCB3cml0ZSAweGZmZmYKKwlpZiAoZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0FPVVQgPT0gMHgzZikKKwl7CisJCWZvcihpPTA7IGk8TGVuZ3RoLzI7IGkrKykKKwkJCSoocERhdGErMippKSA9IDB4ZmZmZjsKKwl9CisJZWxzZQorCXsKKwkJLy9TdGVwNC4gUmVhZCAxNi1ieXRlIG9mIGRhdGEgZnJvbSBFRlVTRV9EQVRBMC0zICgweDU5MC0weDU5QykKKwkJZWZ1c2VEYXRhT2Zmc2V0ID0gIEVGVVNFX0RBVEEzIC0gKE9mZnNldCAmIDB4QykgIDsKKwkJLy9kYXRhIGhvbGQgNCBieXRlcyBkYXRhLgorCQkvL0luIFJUTVBfSU9fUkVBRDMyIHdpbGwgYXV0b21hdGljYWxseSBleGVjdXRlIDMyLWJ5dGVzIHN3YXBwaW5nCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCAmZGF0YSk7CisJCS8vRGVjaWRlIHRoZSB1cHBlciAyIGJ5dGVzIG9yIHRoZSBib3R0b20gMiBieXRlcy4KKwkJLy8gTGl0dGxlLWVuZGlhbgkJUwl8CVMJQmlnLWVuZGlhbgorCQkvLyBhZGRyCTMJMgkxCTAJfAkwCTEJMgkzCisJCS8vIE9yaS1WCUQJQwlCCUEJfAlBCUIJQwlECisJCS8vQWZ0ZXIgc3dhcHBpbmcKKwkJLy8JCUQJQwlCCUEJfAlECUMJQglBCisJCS8vUmV0dXJuIDItYnl0ZXMKKwkJLy9UaGUgcmV0dXJuIGJ5dGUgc3RhdHJzIGZyb20gUy4gVGhlcmVmb3JlLCB0aGUgbGl0dGxlLWVuZGlhbiB3aWxsIHJldHVybiBCQSwgdGhlIEJpZy1lbmRpYW4gd2lsbCByZXR1cm4gREMuCisJCS8vRm9yIHJldHVybmluZyB0aGUgYm90dG9tIDIgYnl0ZXMsIHRoZSBCaWctZW5kaWFuIHNob3VsZCBzaGlmdCByaWdodCAyLWJ5dGVzLgorI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJZGF0YSA9IGRhdGEgPDwgKDgqKChPZmZzZXQgJiAweDMpXjB4MikpOworI2Vsc2UKKwkJZGF0YSA9IGRhdGEgPj4gKDgqKE9mZnNldCAmIDB4MykpOworI2VuZGlmCisKKwkJTmRpc01vdmVNZW1vcnkocERhdGEsICZkYXRhLCBMZW5ndGgpOworCX0KKworCXJldHVybiAoVUNIQVIpIGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BT1VUOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBlRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJT1VUCVVTSE9SVCogcERhdGEpCit7CisJRUZVU0VfQ1RSTF9TVFJVQwkJZUZ1c2VDdHJsU3RydWM7CisJaW50CWk7CisJVVNIT1JUCWVmdXNlRGF0YU9mZnNldDsKKwlVSU5UMzIJZGF0YTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisKKwkvL1N0ZXAwLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BSU4gPSBPZmZzZXQgJiAweGZmZjA7CisKKwkvL1N0ZXAxLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMS4KKwkvL1JlYWQgaW4gcGh5c2ljYWwgdmlldworCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9NT0RFID0gMTsKKworCS8vU3RlcDIuIFdyaXRlIEVGU1JPTV9LSUNLICgweDU4MCwgYml0MzApIHRvIDEgdG8ga2ljay1vZmYgcGh5c2ljYWwgcmVhZCBwcm9jZWR1cmUuCisJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0tJQ0sgPSAxOworCisJTmRpc01vdmVNZW1vcnkoJmRhdGEsICZlRnVzZUN0cmxTdHJ1YywgNCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgRUZVU0VfQ1RSTCwgZGF0YSk7CisKKwkvL1N0ZXAzLiBQb2xsaW5nIEVGU1JPTV9LSUNLKDB4NTgwLCBiaXQzMCkgdW50aWwgaXQgYmVjb21lIDAgYWdhaW4uCisJaSA9IDA7CisJd2hpbGUoaSA8IDEwMCkKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCQlicmVhazsKKwkJUlRNUHVzZWNEZWxheSgyKTsKKwkJaSsrOworCX0KKworCS8vU3RlcDQuIFJlYWQgMTYtYnl0ZSBvZiBkYXRhIGZyb20gRUZVU0VfREFUQTAtMyAoMHg1OUMtMHg1OTApCisJLy9CZWNhdXNlIHRoZSBzaXplIG9mIGVhY2ggRUZVU0VfREFUQSBpcyA0IEJ5dGVzLCB0aGUgc2l6ZSBvZiBhZGRyZXNzIG9mIGVhY2ggaXMgMiBiaXRzLgorCS8vVGhlIHByZXZpb3VzIDIgYml0cyBpcyB0aGUgRUZVU0VfREFUQSBudW1iZXIsIHRoZSBsYXN0IDIgYml0cyBpcyB1c2VkIHRvIGRlY2lkZSB3aGljaCBieXRlcworCS8vRGVjaWRlIHdoaWNoIEVGVVNFX0RBVEEgdG8gcmVhZAorCS8vNTkwOkYgRSBEIEMKKwkvLzU5NDpCIEEgOSA4CisJLy81OTg6NyA2IDUgNAorCS8vNTlDOjMgMiAxIDAKKwllZnVzZURhdGFPZmZzZXQgPSAgRUZVU0VfREFUQTMgLSAoT2Zmc2V0ICYgMHhDKSAgOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBlZnVzZURhdGFPZmZzZXQsICZkYXRhKTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJZGF0YSA9IGRhdGEgPDwgKDgqKChPZmZzZXQgJiAweDMpXjB4MikpOworI2Vsc2UKKwlkYXRhID0gZGF0YSA+PiAoOCooT2Zmc2V0ICYgMHgzKSk7CisjZW5kaWYKKworCU5kaXNNb3ZlTWVtb3J5KHBEYXRhLCAmZGF0YSwgTGVuZ3RoKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgZUZ1c2VSZWFkUGh5c2ljYWwoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisgIAlJTglQVVNIT1JUIGxwSW5CdWZmZXIsCisgIAlJTglVTE9ORyBuSW5CdWZmZXJTaXplLAorICAJT1VUCVBVU0hPUlQgbHBPdXRCdWZmZXIsCisgIAlJTglVTE9ORyBuT3V0QnVmZmVyU2l6ZQorKQoreworCVVTSE9SVCogcEluQnVmID0gKFVTSE9SVCopbHBJbkJ1ZmZlcjsKKwlVU0hPUlQqIHBPdXRCdWYgPSAoVVNIT1JUKilscE91dEJ1ZmZlcjsKKworCVVTSE9SVCBPZmZzZXQgPSBwSW5CdWZbMF07CQkJCQkvL2FkZHIKKwlVU0hPUlQgTGVuZ3RoID0gcEluQnVmWzFdOwkJCQkJLy9sZW5ndGgKKwlpbnQgCQlpOworCisJZm9yKGk9MDsgaTxMZW5ndGg7IGkrPTIpCisJeworCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsT2Zmc2V0K2ksIDIsICZwT3V0QnVmW2kvMl0pOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUyBlRnVzZVJlYWQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCU9VVAlQVUNIQVIJCQlwRGF0YSwKKwlJTglVU0hPUlQJCQlMZW5ndGgpCit7CisJVVNIT1JUKiBwT3V0QnVmID0gKFVTSE9SVCopcERhdGE7CisJTlRTVEFUVVMJU3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJVUNIQVIJRUZTUk9NX0FPVVQ7CisJaW50CWk7CisKKwlmb3IoaT0wOyBpPExlbmd0aDsgaSs9MikKKwl7CisJCUVGU1JPTV9BT1VUID0gZUZ1c2VSZWFkUmVnaXN0ZXJzKHBBZCwgT2Zmc2V0K2ksIDIsICZwT3V0QnVmW2kvMl0pOworCX0KKwlyZXR1cm4gU3RhdHVzOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgZUZ1c2VQaHlzaWNhbFdyaXRlUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlPVVQJVVNIT1JUKiBwRGF0YSkKK3sKKwlFRlVTRV9DVFJMX1NUUlVDCQllRnVzZUN0cmxTdHJ1YzsKKwlpbnQJaTsKKwlVU0hPUlQJZWZ1c2VEYXRhT2Zmc2V0OworCVVJTlQzMglkYXRhLCBlRnVzZURhdGFCdWZmZXJbNF07CisKKwkvL1N0ZXAwLiBXcml0ZSAxNi1ieXRlIG9mIGRhdGEgdG8gRUZVU0VfREFUQTAtMyAoMHg1OTAtMHg1OUMpLCB3aGVyZSBFRlVTRV9EQVRBMCBpcyB0aGUgTFNCIERXLCBFRlVTRV9EQVRBMyBpcyB0aGUgTVNCIERXLgorCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkvL3JlYWQgY3VycmVudCB2YWx1ZXMgb2YgMTYtYnl0ZSBibG9jaworCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisKKwkvL1N0ZXAwLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BSU4gPSBPZmZzZXQgJiAweGZmZjA7CisKKwkvL1N0ZXAxLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMS4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fTU9ERSA9IDE7CisKKwkvL1N0ZXAyLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHJlYWQgcHJvY2VkdXJlLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJLy9TdGVwMy4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLgorCWkgPSAwOworCXdoaWxlKGkgPCAxMDApCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCQlicmVhazsKKwkJUlRNUHVzZWNEZWxheSgyKTsKKwkJaSsrOworCX0KKworCS8vU3RlcDQuIFJlYWQgMTYtYnl0ZSBvZiBkYXRhIGZyb20gRUZVU0VfREFUQTAtMyAoMHg1OUMtMHg1OTApCisJZWZ1c2VEYXRhT2Zmc2V0ID0gIEVGVVNFX0RBVEEzOworCWZvcihpPTA7IGk8IDQ7IGkrKykKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCAoUFVJTlQzMikgJmVGdXNlRGF0YUJ1ZmZlcltpXSk7CisJCWVmdXNlRGF0YU9mZnNldCAtPSAgNDsKKwl9CisKKwkvL1VwZGF0ZSB0aGUgdmFsdWUsIHRoZSBvZmZzZXQgaXMgbXVsdGlwbGUgb2YgMiwgbGVuZ3RoIGlzIDIKKwllZnVzZURhdGFPZmZzZXQgPSAoT2Zmc2V0ICYgMHhjKSA+PiAyOworCWRhdGEgPSBwRGF0YVswXSAmIDB4ZmZmZjsKKwkvL1RoZSBvZmZzZXQgc2hvdWxkIGJlIDB4KioqMTAgb3IgMHgqKiowMAorCWlmKChPZmZzZXQgJSA0KSAhPSAwKQorCXsKKwkJZUZ1c2VEYXRhQnVmZmVyW2VmdXNlRGF0YU9mZnNldF0gPSAoZUZ1c2VEYXRhQnVmZmVyW2VmdXNlRGF0YU9mZnNldF0gJiAweGZmZmYpIHwgKGRhdGEgPDwgMTYpOworCX0KKwllbHNlCisJeworCQllRnVzZURhdGFCdWZmZXJbZWZ1c2VEYXRhT2Zmc2V0XSA9IChlRnVzZURhdGFCdWZmZXJbZWZ1c2VEYXRhT2Zmc2V0XSAmIDB4ZmZmZjAwMDApIHwgZGF0YTsKKwl9CisKKwllZnVzZURhdGFPZmZzZXQgPSAgRUZVU0VfREFUQTM7CisJZm9yKGk9MDsgaTwgNDsgaSsrKQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCBlRnVzZURhdGFCdWZmZXJbaV0pOworCQllZnVzZURhdGFPZmZzZXQgLT0gNDsKKwl9CisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCS8vU3RlcDEuIFdyaXRlIDEwLWJpdCBvZiBhZGRyZXNzIHRvIEVGU1JPTV9BSU4gKDB4NTgwLCBiaXQyNTpiaXQxNikuIFRoZSBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbm1lbnQuCisJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0FJTiA9IE9mZnNldCAmIDB4ZmZmMDsKKworCS8vU3RlcDIuIFdyaXRlIEVGU1JPTV9NT0RFICgweDU4MCwgYml0NzpiaXQ2KSB0byAzLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9NT0RFID0gMzsKKworCS8vU3RlcDMuIFdyaXRlIEVGU1JPTV9LSUNLICgweDU4MCwgYml0MzApIHRvIDEgdG8ga2ljay1vZmYgcGh5c2ljYWwgd3JpdGUgcHJvY2VkdXJlLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJLy9TdGVwNC4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLiBJdKGmcyBkb25lLgorCWkgPSAwOworCXdoaWxlKGkgPCAxMDApCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDIpOworCQlpKys7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIGVGdXNlV3JpdGVSZWdpc3RlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCUlOCVVTSE9SVCogcERhdGEpCit7CisJVVNIT1JUCWk7CisJVVNIT1JUCWVGdXNlRGF0YTsKKwlVU0hPUlQJTG9naWNhbEFkZHJlc3MsIEJsa051bSA9IDB4ZmZmZjsKKwlVQ0hBUglFRlNST01fQU9VVDsKKworCVVTSE9SVCBhZGRyLHRtcGFkZHIsIEluQnVmWzNdLCB0bXBPZmZzZXQ7CisJVVNIT1JUIGJ1ZmZlcls4XTsKKwlCT09MRUFOCQliV3JpdGVTdWNjZXNzID0gVFJVRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnMgT2Zmc2V0PSV4LCBwRGF0YT0leFxuIiwgT2Zmc2V0LCAqcERhdGEpKTsKKworCS8vU3RlcCAwLiBmaW5kIHRoZSBlbnRyeSBpbiB0aGUgbWFwcGluZyB0YWJsZQorCS8vVGhlIGFkZHJlc3Mgb2YgRUVQUk9NIGlzIDItYnl0ZXMgYWxpZ25tZW50LgorCS8vVGhlIGxhc3QgYml0IGlzIHVzZWQgZm9yIGFsaWdubWVudCwgc28gaXQgbXVzdCBiZSAwLgorCXRtcE9mZnNldCA9IE9mZnNldCAmIDB4ZmZmZTsKKwlFRlNST01fQU9VVCA9IGVGdXNlUmVhZFJlZ2lzdGVycyhwQWQsIHRtcE9mZnNldCwgMiwgJmVGdXNlRGF0YSk7CisKKwlpZiggRUZTUk9NX0FPVVQgPT0gMHgzZikKKwl7CS8vZmluZCBhdmFpbGFibGUgbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIKKwkJLy90aGUgbG9naWNhbCBhZGRyZXNzIGRvZXMgbm90IGV4aXN0LCBmaW5kIGFuIGVtcHR5IG9uZQorCQkvL2Zyb20gdGhlIGZpcnN0IGFkZHJlc3Mgb2YgYmxvY2sgNDU9MTYqNDU9MHgyZDAgdG8gdGhlIGxhc3QgYWRkcmVzcyBvZiBibG9jayA0NworCQkvLz09PjQ4KjE2LTMocmVzZXJ2ZWQpPTJGQworCQlmb3IgKGk9RUZVU0VfVVNBR0VfTUFQX1NUQVJUOyBpPD1FRlVTRV9VU0FHRV9NQVBfRU5EOyBpKz0yKQorCQl7CisJCQkvL1JldHJpdmUgdGhlIGxvZ2ljYWwgYmxvY2sgbnVibWVyIGZvcm0gZWFjaCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJLy9JdCB3aWxsIGFjY2VzcyB0d28gbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIgZWFjaCB0aW1lLgorCQkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLCBpLCAyLCAmTG9naWNhbEFkZHJlc3MpOworCQkJaWYoIChMb2dpY2FsQWRkcmVzcyAmIDB4ZmYpID09IDApCisJCQl7Ly9Ob3QgdXNlZCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJCUJsa051bSA9IGktRUZVU0VfVVNBR0VfTUFQX1NUQVJUOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZigoIChMb2dpY2FsQWRkcmVzcyA+PiA4KSAmIDB4ZmYpID09IDApCisJCQl7Ly9Ob3QgdXNlZCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJCWlmIChpICE9IEVGVVNFX1VTQUdFX01BUF9FTkQpCisJCQkJeworCQkJCQlCbGtOdW0gPSBpLUVGVVNFX1VTQUdFX01BUF9TVEFSVCsxOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlCbGtOdW0gPSBFRlNST01fQU9VVDsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJlRnVzZVdyaXRlUmVnaXN0ZXJzIEJsa051bSA9ICVkIFxuIiwgQmxrTnVtKSk7CisKKwlpZihCbGtOdW0gPT0gMHhmZmZmKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVyczogb3V0IG9mIGZyZWUgRS1mdXNlIHNwYWNlISEhXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvL1N0ZXAgMS4gU2F2ZSBkYXRhIG9mIHRoaXMgYmxvY2sJd2hpY2ggaXMgcG9pbnRlZCBieSB0aGUgYXZhaWJsZSBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCS8vIHJlYWQgYW5kIHNhdmUgdGhlIG9yaWdpbmFsIGJsb2NrIGRhdGEKKwlmb3IoaSA9MDsgaTw4OyBpKyspCisJeworCQlhZGRyID0gQmxrTnVtICogMHgxMCA7CisKKwkJSW5CdWZbMF0gPSBhZGRyKzIqaTsKKwkJSW5CdWZbMV0gPSAyOworCQlJbkJ1ZlsyXSA9IDB4MDsKKworCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKworCQlidWZmZXJbaV0gPSBJbkJ1ZlsyXTsKKwl9CisKKwkvL1N0ZXAgMi4gVXBkYXRlIHRoZSBkYXRhIGluIGJ1ZmZlciwgYW5kIHdyaXRlIHRoZSBkYXRhIHRvIEVmdXNlCisJYnVmZmVyWyAoT2Zmc2V0ID4+IDEpICUgOF0gPSBwRGF0YVswXTsKKworCWRvCisJeworCQkvL1N0ZXAgMy4gV3JpdGUgdGhlIGRhdGEgdG8gRWZ1c2UKKwkJaWYoIWJXcml0ZVN1Y2Nlc3MpCisJCXsKKwkJCWZvcihpID0wOyBpPDg7IGkrKykKKwkJCXsKKwkJCQlhZGRyID0gQmxrTnVtICogMHgxMCA7CisKKwkJCQlJbkJ1ZlswXSA9IGFkZHIrMippOworCQkJCUluQnVmWzFdID0gMjsKKwkJCQlJbkJ1ZlsyXSA9IGJ1ZmZlcltpXTsKKworCQkJCWVGdXNlV3JpdGVQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNiwgTlVMTCwgMik7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQkJSW5CdWZbMF0gPSBhZGRyKyhPZmZzZXQgJSAxNik7CisJCQkJSW5CdWZbMV0gPSAyOworCQkJCUluQnVmWzJdID0gcERhdGFbMF07CisKKwkJCQllRnVzZVdyaXRlUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDYsIE5VTEwsIDIpOworCQl9CisKKwkJLy9TdGVwIDQuIFdyaXRlIG1hcHBpbmcgdGFibGUKKwkJYWRkciA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVCtCbGtOdW07CisKKwkJdG1wYWRkciA9IGFkZHI7CisKKwkJaWYoYWRkciAlIDIgIT0gMCkKKwkJCWFkZHIgPSBhZGRyIC0xOworCQlJbkJ1ZlswXSA9IGFkZHI7CisJCUluQnVmWzFdID0gMjsKKworCQkvL2NvbnZlcnQgdGhlIGFkZHJlc3MgZnJvbSAxMCB0byA4IGJpdCAoIGJpdDcsIDYgPSBwYXJpdHkgYW5kIGJpdDUgfiAwID0gYml0OX40KSwgYW5kIHdyaXRlIHRvIGxvZ2ljYWwgbWFwIGVudHJ5CisJCXRtcE9mZnNldCA9IE9mZnNldDsKKwkJdG1wT2Zmc2V0ID4+PSA0OworCQl0bXBPZmZzZXQgfD0gKCh+KCh0bXBPZmZzZXQgJiAweDAxKSBeICggdG1wT2Zmc2V0ID4+IDEgJiAweDAxKSBeICAodG1wT2Zmc2V0ID4+IDIgJiAweDAxKSBeICAodG1wT2Zmc2V0ID4+IDMgJiAweDAxKSkpIDw8IDYpICYgMHg0MDsKKwkJdG1wT2Zmc2V0IHw9ICgofiggKHRtcE9mZnNldCA+PiAyICYgMHgwMSkgXiAodG1wT2Zmc2V0ID4+IDMgJiAweDAxKSBeICh0bXBPZmZzZXQgPj4gNCAmIDB4MDEpIF4gKCB0bXBPZmZzZXQgPj4gNSAmIDB4MDEpKSkgPDwgNykgJiAweDgwOworCisJCS8vIHdyaXRlIHRoZSBsb2dpY2FsIGFkZHJlc3MKKwkJaWYodG1wYWRkciUyICE9IDApCisJCQlJbkJ1ZlsyXSA9IHRtcE9mZnNldDw8ODsKKwkJZWxzZQorCQkJSW5CdWZbMl0gPSB0bXBPZmZzZXQ7CisKKwkJZUZ1c2VXcml0ZVBoeXNpY2FsKHBBZCwmSW5CdWZbMF0sIDYsIE5VTEwsIDApOworCisJCS8vU3RlcCA1LiBDb21wYXJlIGRhdGEgaWYgbm90IHRoZSBzYW1lLCBpbnZhbGlkYXRlIHRoZSBtYXBwaW5nIGVudHJ5LCB0aGVuIHJlLXdyaXRlIHRoZSBkYXRhIHVudGlsIEUtZnVzZSBpcyBleGhhdXN0ZWQKKwkJYldyaXRlU3VjY2VzcyA9IFRSVUU7CisJCWZvcihpID0wOyBpPDg7IGkrKykKKwkJeworCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQlJbkJ1ZlswXSA9IGFkZHIrMippOworCQkJSW5CdWZbMV0gPSAyOworCQkJSW5CdWZbMl0gPSAweDA7CisKKwkJCWVGdXNlUmVhZFBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA0LCAmSW5CdWZbMl0sIDIpOworCisJCQlpZihidWZmZXJbaV0gIT0gSW5CdWZbMl0pCisJCQl7CisJCQkJYldyaXRlU3VjY2VzcyA9IEZBTFNFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLy9TdGVwIDYuIGludmxpZGF0ZSBtYXBwaW5nIGVudHJ5IGFuZCBmaW5kIGEgZnJlZSBtYXBwaW5nIGVudHJ5IGlmIG5vdCBzdWNjZWVkCisJCWlmICghYldyaXRlU3VjY2VzcykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTm90IGJXcml0ZVN1Y2Nlc3MgQmxrTnVtID0gJWRcbiIsIEJsa051bSkpOworCisJCQkvLyB0aGUgb2Zmc2V0IG9mIGN1cnJlbnQgbWFwcGluZyBlbnRyeQorCQkJYWRkciA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVCtCbGtOdW07CisKKwkJCS8vZmluZCBhIG5ldyBtYXBwaW5nIGVudHJ5CisJCQlCbGtOdW0gPSAweGZmZmY7CisJCQlmb3IgKGk9RUZVU0VfVVNBR0VfTUFQX1NUQVJUOyBpPD1FRlVTRV9VU0FHRV9NQVBfRU5EOyBpKz0yKQorCQkJeworCQkJCWVGdXNlUGh5c2ljYWxSZWFkUmVnaXN0ZXJzKHBBZCwgaSwgMiwgJkxvZ2ljYWxBZGRyZXNzKTsKKwkJCQlpZiggKExvZ2ljYWxBZGRyZXNzICYgMHhmZikgPT0gMCkKKwkJCQl7CisJCQkJCUJsa051bSA9IGktRUZVU0VfVVNBR0VfTUFQX1NUQVJUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZigoIChMb2dpY2FsQWRkcmVzcyA+PiA4KSAmIDB4ZmYpID09IDApCisJCQkJeworCQkJCQlpZiAoaSAhPSBFRlVTRV9VU0FHRV9NQVBfRU5EKQorCQkJCQl7CisJCQkJCQlCbGtOdW0gPSBpKzEtRUZVU0VfVVNBR0VfTUFQX1NUQVJUOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5vdCBiV3JpdGVTdWNjZXNzIG5ldyBCbGtOdW0gPSAlZFxuIiwgQmxrTnVtKSk7CisJCQlpZihCbGtOdW0gPT0gMHhmZmZmKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnM6IG91dCBvZiBmcmVlIEUtZnVzZSBzcGFjZSEhIVxuIikpOworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKworCQkJLy9pbnZhbGlkYXRlIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudHJ5IGlmIG5ldyBlbnRyeSBpcyBub3QgZm91bmQKKwkJCXRtcGFkZHIgPSBhZGRyOworCisJCQlpZihhZGRyICUgMiAhPSAwKQorCQkJCWFkZHIgPSBhZGRyIC0xOworCQkJSW5CdWZbMF0gPSBhZGRyOworCQkJSW5CdWZbMV0gPSAyOworCisJCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKworCQkJLy8gd3JpdGUgdGhlIGxvZ2ljYWwgYWRkcmVzcworCQkJaWYodG1wYWRkciUyICE9IDApCisJCQl7CisJCQkJLy8gSW52YWxpZGF0ZSB0aGUgaGlnaCBieXRlCisJCQkJZm9yIChpPTg7IGk8MTU7IGkrKykKKwkJCQl7CisJCQkJCWlmKCAoIChJbkJ1ZlsyXSA+PiBpKSAmIDB4MDEpID09IDApCisJCQkJCXsKKwkJCQkJCUluQnVmWzJdIHw9ICgweDEgPDxpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIGludmFsaWRhdGUgdGhlIGxvdyBieXRlCisJCQkJZm9yIChpPTA7IGk8ODsgaSsrKQorCQkJCXsKKwkJCQkJaWYoICggKEluQnVmWzJdID4+IGkpICYgMHgwMSkgPT0gMCkKKwkJCQkJeworCQkJCQkJSW5CdWZbMl0gfD0gKDB4MSA8PGkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllRnVzZVdyaXRlUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDYsIE5VTEwsIDApOworCQl9CisJfQorCXdoaWxlKCFiV3JpdGVTdWNjZXNzKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgZUZ1c2VXcml0ZVBoeXNpY2FsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorICAJUFVTSE9SVCBscEluQnVmZmVyLAorCVVMT05HIG5JbkJ1ZmZlclNpemUsCisgIAlQVUNIQVIgbHBPdXRCdWZmZXIsCisgIAlVTE9ORyBuT3V0QnVmZmVyU2l6ZQorKQoreworCVVTSE9SVCogcEluQnVmID0gKFVTSE9SVCopbHBJbkJ1ZmZlcjsKKwlpbnQgCQlpOworCS8vVVNIT1JUKiBwT3V0QnVmID0gKFVTSE9SVCopaW9CdWZmZXI7CisKKwlVU0hPUlQgT2Zmc2V0ID0gcEluQnVmWzBdOwkJCQkJLy9hZGRyCisJVVNIT1JUIExlbmd0aCA9IHBJbkJ1ZlsxXTsJCQkJCS8vbGVuZ3RoCisJVVNIT1JUKiBwVmFsdWVYID0gJnBJbkJ1ZlsyXTsJCQkJLy92YWx1ZSAuLi4KKwkJLy8gTGl0dGxlLWVuZGlhbgkJUwl8CVMJQmlnLWVuZGlhbgorCQkvLyBhZGRyCTMJMgkxCTAJfAkwCTEJMgkzCisJCS8vIE9yaS1WCUQJQwlCCUEJfAlBCUIJQwlECisJCS8vQWZ0ZXIgc3dhcHBpbmcKKwkJLy8JCUQJQwlCCUEJfAlECUMJQglBCisJCS8vQm90aCB0aGUgbGl0dGxlIGFuZCBiaWctZW5kaWFuIHVzZSB0aGUgc2FtZSBzZXF1ZW5jZSB0byB3cml0ZSAgZGF0YS4KKwkJLy9UaGVyZWZvcmUsIHdlIG9ubHkgbmVlZCBzd2FwIGRhdGEgd2hlbiByZWFkIHRoZSBkYXRhLgorCWZvcihpPTA7IGk8TGVuZ3RoOyBpKz0yKQorCXsKKwkJZUZ1c2VQaHlzaWNhbFdyaXRlUmVnaXN0ZXJzKHBBZCwgT2Zmc2V0K2ksIDIsICZwVmFsdWVYW2kvMl0pOworCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIGVGdXNlV3JpdGUoCisgICAJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCkKK3sKKwlpbnQgaTsKKworCVVTSE9SVCogcFZhbHVlWCA9IChQVVNIT1JUKSBwRGF0YTsJCQkJLy92YWx1ZSAuLi4KKwkJLy9UaGUgaW5wdXQgdmFsdWU9MzA3MCB3aWxsIGJlIHN0b3JlZCBhcyBmb2xsb3dpbmcKKyAJCS8vIExpdHRsZS1lbmRpYW4JCVMJfAlTCUJpZy1lbmRpYW4KKwkJLy8gYWRkcgkJCTEJMAl8CTAJMQorCQkvLyBPcmktVgkJCTMwCTcwCXwJMzAJNzAKKwkJLy9BZnRlciBzd2FwcGluZworCQkvLwkJCQkzMAk3MAl8CTcwCTMwCisJCS8vQ2FzdGluZworCQkvLwkJCQkzMDcwCXwJNzAzMCAoeCkKKwkJLy9UaGUgc3dhcHBpbmcgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIGJpZy1lbmRpYW4KKwlmb3IoaT0wOyBpPGxlbmd0aDsgaSs9MikKKwl7CisJCWVGdXNlV3JpdGVSZWdpc3RlcnMocEFkLCBPZmZzZXQraSwgMiwgJnBWYWx1ZVhbaS8yXSk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIHNldF9lRnVzZUdldEZyZWVCbG9ja0NvdW50X1Byb2MoCisgICAJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVTSE9SVCBpOworCVVTSE9SVAlMb2dpY2FsQWRkcmVzczsKKwlVU0hPUlQgZWZ1c2VmcmVlbnVtPTA7CisJaWYoIXBBZC0+YlVzZUVmdXNlKQorCQlyZXR1cm4gRkFMU0U7CisJZm9yIChpID0gRUZVU0VfVVNBR0VfTUFQX1NUQVJUOyBpIDw9IEVGVVNFX1VTQUdFX01BUF9FTkQ7IGkrPTIpCisJeworCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsIGksIDIsICZMb2dpY2FsQWRkcmVzcyk7CisJCWlmKCAoTG9naWNhbEFkZHJlc3MgJiAweGZmKSA9PSAwKQorCQl7CisJCQllZnVzZWZyZWVudW09IChVQ0hBUikgKEVGVVNFX1VTQUdFX01BUF9FTkQtaSsxKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYoKCAoTG9naWNhbEFkZHJlc3MgPj4gOCkgJiAweGZmKSA9PSAwKQorCQl7CisJCQllZnVzZWZyZWVudW0gPSAoVUNIQVIpIChFRlVTRV9VU0FHRV9NQVBfRU5ELWkpOworCQkJYnJlYWs7CisJCX0KKworCQlpZihpID09IEVGVVNFX1VTQUdFX01BUF9FTkQpCisJCQllZnVzZWZyZWVudW0gPSAwOworCX0KKwlwcmludGsoImVmdXNlRnJlZU51bWJlciBpcyAlZFxuIixlZnVzZWZyZWVudW0pOworCXJldHVybiBUUlVFOworfQorSU5UIHNldF9lRnVzZWR1bXBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CitVU0hPUlQgSW5CdWZbM107CisJSU5UIGk9MDsKKwlpZighcEFkLT5iVXNlRWZ1c2UpCisJCXJldHVybiBGQUxTRTsKKwlmb3IoaSA9MDsgaTxFRlVTRV9VU0FHRV9NQVBfRU5ELzI7IGkrKykKKwl7CisJCUluQnVmWzBdID0gMippOworCQlJbkJ1ZlsxXSA9IDI7CisJCUluQnVmWzJdID0gMHgwOworCisJCWVGdXNlUmVhZFBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA0LCAmSW5CdWZbMl0sIDIpOworCQlpZihpJTQ9PTApCisJCXByaW50aygiXG5CbG9jayAleDoiLGkvOCk7CisJCXByaW50aygiJTA0eCAiLEluQnVmWzJdKTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CitJTlQJc2V0X2VGdXNlTG9hZEZyb21CaW5fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUgkJCQkJKnNyYzsKKwlzdHJ1Y3QgZmlsZQkJCQkqc3JjZjsKKwlJTlQgCQkJCQlyZXR2YWwsIG9yZ2ZzdWlkLCBvcmdmc2dpZDsKKyAgIAltbV9zZWdtZW50X3QJCQlvcmdmczsKKwlVQ0hBUgkJCQkJKmJ1ZmZlcjsKKwlVQ0hBUgkJCQkJQmluRmlsZVNpemU9MDsKKwlJTlQJCQkJCQlpID0gMCxqPTAsaz0xOworCVVTSE9SVAkJCQkJKlBEQVRBOworCVVTSE9SVAkJCQkJREFUQTsKKwlCaW5GaWxlU2l6ZT1zdHJsZW4oIlJUMzB4eEVFUFJPTS5iaW4iKTsKKwlzcmMgPSBrbWFsbG9jKDEyOCwgTUVNX0FMTE9DX0ZMQUcpOworCU5kaXNaZXJvTWVtb3J5KHNyYywgMTI4KTsKKworIAlpZihzdHJsZW4oYXJnKT4wKQorCXsKKworCQlOZGlzTW92ZU1lbW9yeShzcmMsIGFyZywgc3RybGVuKGFyZykpOworIAl9CisKKwllbHNlCisJeworCisJCU5kaXNNb3ZlTWVtb3J5KHNyYywgIlJUMzB4eEVFUFJPTS5iaW4iLCBCaW5GaWxlU2l6ZSk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRmlsZU5hbWU9JXNcbiIsc3JjKSk7CisJYnVmZmVyID0ga21hbGxvYyhNQVhfRUVQUk9NX0JJTl9GSUxFX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKworCWlmKGJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJa2ZyZWUoc3JjKTsKKwkJIHJldHVybiBGQUxTRTsKK30KKwlQREFUQT1rbWFsbG9jKHNpemVvZihVU0hPUlQpKjgsTUVNX0FMTE9DX0ZMQUcpOworCisJaWYoUERBVEE9PU5VTEwpCisJeworCQlrZnJlZShzcmMpOworCisJCWtmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBGQUxTRTsKKwl9CisJLyogRG9uJ3QgY2hhbmdlIHRvIHVpZCAwLCBsZXQgdGhlIGZpbGUgYmUgb3BlbmVkIGFzIHRoZSAibm9ybWFsIiB1c2VyICovCisjaWYgMAorCW9yZ2ZzdWlkID0gY3VycmVudC0+ZnN1aWQ7CisJb3JnZnNnaWQgPSBjdXJyZW50LT5mc2dpZDsKKwljdXJyZW50LT5mc3VpZD1jdXJyZW50LT5mc2dpZCA9IDA7CisjZW5kaWYKKyAgICAJb3JnZnMgPSBnZXRfZnMoKTsKKyAgIAkgc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwlpZiAoc3JjICYmICpzcmMpCisJeworCQlzcmNmID0gZmlscF9vcGVuKHNyYywgT19SRE9OTFksIDApOworCQlpZiAoSVNfRVJSKHNyY2YpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsIC1QVFJfRVJSKHNyY2YpLHNyYykpOworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gVGhlIG9iamVjdCBtdXN0IGhhdmUgYSByZWFkIG1ldGhvZAorCQkJaWYgKHNyY2YtPmZfb3AgJiYgc3JjZi0+Zl9vcC0+cmVhZCkKKwkJCXsKKwkJCQltZW1zZXQoYnVmZmVyLCAweDAwLCBNQVhfRUVQUk9NX0JJTl9GSUxFX1NJWkUpOworCQkJCXdoaWxlKHNyY2YtPmZfb3AtPnJlYWQoc3JjZiwgJmJ1ZmZlcltpXSwgMSwgJnNyY2YtPmZfcG9zKT09MSkKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiUwMlggIixidWZmZXJbaV0pKTsKKwkJCQkJaWYoKGkrMSklOD09MCkKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlxuIikpOworICAgICAgICAgICAgICAJCQlpKys7CisJCQkJCQlpZihpPj1NQVhfRUVQUk9NX0JJTl9GSUxFX1NJWkUpCisJCQkJCQkJeworCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IgJWxkIHJlYWRpbmcgJXMsIFRoZSBmaWxlIGlzIHRvbyBsYXJnZVsxMDI0XVxuIiwgLVBUUl9FUlIoc3JjZiksc3JjKSk7CisJCQkJCQkJCWtmcmVlKFBEQVRBKTsKKwkJCQkJCQkJa2ZyZWUoYnVmZmVyKTsKKwkJCQkJCQkJa2ZyZWUoc3JjKTsKKwkJCQkJCQkJcmV0dXJuIEZBTFNFOworCQkJCQkJCX0KKwkJCSAgICAgICB9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IhISBTeXN0ZW0gZG9lc3Qgbm90IHN1cHBvcnQgcmVhZCBmdW5jdGlvblxuIikpOworCQkJCQkJa2ZyZWUoUERBVEEpOworCQkJCQkJa2ZyZWUoYnVmZmVyKTsKKwkJCQkJCWtmcmVlKHNyYyk7CisJCQkJCQlyZXR1cm4gRkFMU0U7CisJCQl9CisgICAgICAJCX0KKworCisJfQorCWVsc2UKKwkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3Igc3JjICBvciBzcmNmIGlzIG51bGxcbiIpKTsKKwkJCQkJa2ZyZWUoUERBVEEpOworCQkJCQlrZnJlZShidWZmZXIpOworCQkJCQlyZXR1cm4gRkFMU0U7CisKKwkJfQorCisKKwlyZXR2YWw9ZmlscF9jbG9zZShzcmNmLE5VTEwpOworCisJaWYgKHJldHZhbCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBFcnJvciAlZCBjbG9zaW5nICVzXG4iLCAtcmV0dmFsLCBzcmMpKTsKKwl9CisJc2V0X2ZzKG9yZ2ZzKTsKKyNpZiAwCisJY3VycmVudC0+ZnN1aWQgPSBvcmdmc3VpZDsKKwljdXJyZW50LT5mc2dpZCA9IG9yZ2ZzZ2lkOworI2VuZGlmCisJZm9yKGo9MDtqPGk7aisrKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJTAyWCAiLGJ1ZmZlcltqXSkpOworCQlpZigoaisxKSUyPT0wKQorCQkJUERBVEFbai8yJThdPSgoYnVmZmVyW2pdPDw4KSYweGZmMDApfChidWZmZXJbai0xXSYweGZmKTsKKwkJaWYoaiUxNj09MCkKKwkJeworCQkJaz1idWZmZXJbal07CisJCX0KKwkJZWxzZQorCQl7CisJCQlrJj1idWZmZXJbal07CisJCQlpZigoaisxKSUxNj09MCkKKwkJCXsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiByZXN1bHQ9JTAyWCxibGs9JTAyeFxuIixrLGovMTYpKTsKKworCQkJCWlmKGshPTB4ZmYpCisJCQkJCWVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluKHBBZCwoVVNIT1JUKWotMTUsIDE2LCBQREFUQSk7CisJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlpZihlRnVzZVJlYWRSZWdpc3RlcnMocEFkLGosIDIsKFBVU0hPUlQpJkRBVEEpIT0weDNmKQorCQkJCQkJCWVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluKHBBZCwoVVNIT1JUKWotMTUsIDE2LCBQREFUQSk7CisJCQkJCX0KKwkJCQkvKgorCQkJCWZvcihsPTA7bDw4O2wrKykKKwkJCQkJcHJpbnRrKCIlMDR4ICIsUERBVEFbbF0pOworCQkJCXByaW50aygiXG4iKTsKKwkJCQkqLworCQkJCU5kaXNaZXJvTWVtb3J5KFBEQVRBLDE2KTsKKworCisJCQl9CisJCX0KKworCisJfQorCisKKwlrZnJlZShQREFUQSk7CisJa2ZyZWUoYnVmZmVyKTsKKwlrZnJlZShzcmMpOworCXJldHVybiBUUlVFOworfQorTlRTVEFUVVMgZUZ1c2VXcml0ZVJlZ2lzdGVyc0Zyb21CaW4oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCUlOCVVTSE9SVCogcERhdGEpCit7CisJVVNIT1JUCWk7CisJVVNIT1JUCWVGdXNlRGF0YTsKKwlVU0hPUlQJTG9naWNhbEFkZHJlc3MsIEJsa051bSA9IDB4ZmZmZjsKKwlVQ0hBUglFRlNST01fQU9VVCxMb29wPTA7CisJRUZVU0VfQ1RSTF9TVFJVQwkJZUZ1c2VDdHJsU3RydWM7CisJVVNIT1JUCWVmdXNlRGF0YU9mZnNldDsKKwlVSU5UMzIJZGF0YSx0ZW1wYnVmZmVyOworCVVTSE9SVCBhZGRyLHRtcGFkZHIsIEluQnVmWzNdLCB0bXBPZmZzZXQ7CisJVUlOVDMyIGJ1ZmZlcls0XTsKKwlCT09MRUFOCQliV3JpdGVTdWNjZXNzID0gVFJVRTsKKwlCT09MRUFOCQliTm90V3JpdGU9VFJVRTsKKwlCT09MRUFOCQliQWxsb2NhdGVOZXdCbGs9VFJVRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluIE9mZnNldD0leCwgcERhdGE9JTA0eDolMDR4OiUwNHg6JTA0eFxuIiwgT2Zmc2V0LCAqcERhdGEsKihwRGF0YSsxKSwqKHBEYXRhKzIpLCoocERhdGErMykpKTsKKworCWRvCisJeworCS8vU3RlcCAwLiBmaW5kIHRoZSBlbnRyeSBpbiB0aGUgbWFwcGluZyB0YWJsZQorCS8vVGhlIGFkZHJlc3Mgb2YgRUVQUk9NIGlzIDItYnl0ZXMgYWxpZ25tZW50LgorCS8vVGhlIGxhc3QgYml0IGlzIHVzZWQgZm9yIGFsaWdubWVudCwgc28gaXQgbXVzdCBiZSAwLgorCUxvb3ArKzsKKwl0bXBPZmZzZXQgPSBPZmZzZXQgJiAweGZmZmU7CisJRUZTUk9NX0FPVVQgPSBlRnVzZVJlYWRSZWdpc3RlcnMocEFkLCB0bXBPZmZzZXQsIDIsICZlRnVzZURhdGEpOworCisJaWYoIEVGU1JPTV9BT1VUID09IDB4M2YpCisJewkvL2ZpbmQgYXZhaWxhYmxlIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCS8vdGhlIGxvZ2ljYWwgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCwgZmluZCBhbiBlbXB0eSBvbmUKKwkJLy9mcm9tIHRoZSBmaXJzdCBhZGRyZXNzIG9mIGJsb2NrIDQ1PTE2KjQ1PTB4MmQwIHRvIHRoZSBsYXN0IGFkZHJlc3Mgb2YgYmxvY2sgNDcKKwkJLy89PT40OCoxNi0zKHJlc2VydmVkKT0yRkMKKwkJYkFsbG9jYXRlTmV3QmxrPVRSVUU7CisJCWZvciAoaT1FRlVTRV9VU0FHRV9NQVBfU1RBUlQ7IGk8PUVGVVNFX1VTQUdFX01BUF9FTkQ7IGkrPTIpCisJCXsKKwkJCS8vUmV0cml2ZSB0aGUgbG9naWNhbCBibG9jayBudWJtZXIgZm9ybSBlYWNoIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCQkvL0l0IHdpbGwgYWNjZXNzIHR3byBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlciBlYWNoIHRpbWUuCisJCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsIGksIDIsICZMb2dpY2FsQWRkcmVzcyk7CisJCQlpZiggKExvZ2ljYWxBZGRyZXNzICYgMHhmZikgPT0gMCkKKwkJCXsvL05vdCB1c2VkIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCQkJQmxrTnVtID0gaS1FRlVTRV9VU0FHRV9NQVBfU1RBUlQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlIGlmKCggKExvZ2ljYWxBZGRyZXNzID4+IDgpICYgMHhmZikgPT0gMCkKKwkJCXsvL05vdCB1c2VkIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCQkJaWYgKGkgIT0gRUZVU0VfVVNBR0VfTUFQX0VORCkKKwkJCQl7CisJCQkJCUJsa051bSA9IGktRUZVU0VfVVNBR0VfTUFQX1NUQVJUKzE7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCWJBbGxvY2F0ZU5ld0Jsaz1GQUxTRTsKKwkJQmxrTnVtID0gRUZTUk9NX0FPVVQ7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVycyBCbGtOdW0gPSAlZCBcbiIsIEJsa051bSkpOworCisJaWYoQmxrTnVtID09IDB4ZmZmZikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnM6IG91dCBvZiBmcmVlIEUtZnVzZSBzcGFjZSEhIVxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCS8vU3RlcCAxLjEuMAorCS8vSWYgdGhlIGJsb2NrIGlzIG5vdCBleGlzdGluZyBpbiBtYXBwaW5nIHRhYmxlLCBjcmVhdGUgb25lCisJLy9hbmQgd3JpdGUgZG93biB0aGUgMTYtYnl0ZXMgZGF0YSB0byB0aGUgbmV3IGJsb2NrCisJaWYoYkFsbG9jYXRlTmV3QmxrKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWxsb2NhdGUgTmV3IEJsa1xuIikpOworCQllZnVzZURhdGFPZmZzZXQgPSAgRUZVU0VfREFUQTM7CisJCWZvcihpPTA7IGk8IDQ7IGkrKykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWxsb2NhdGUgTmV3IEJsaywgRGF0YSVkPSUwNHglMDR4XG4iLDMtaSxwRGF0YVsyKmkrMV0scERhdGFbMippXSkpOworCQkJdGVtcGJ1ZmZlcj0oKHBEYXRhWzIqaSsxXTw8MTYpJjB4ZmZmZjAwMDApfHBEYXRhWzIqaV07CisKKworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LHRlbXBidWZmZXIpOworCQkJZWZ1c2VEYXRhT2Zmc2V0IC09IDQ7CisKKwkJfQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisJCS8vU3RlcDEuMS4xLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQUlOID0gQmxrTnVtKiAweDEwIDsKKworCQkvL1N0ZXAxLjEuMi4gV3JpdGUgRUZTUk9NX01PREUgKDB4NTgwLCBiaXQ3OmJpdDYpIHRvIDMuCisJCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9NT0RFID0gMzsKKworCQkvL1N0ZXAxLjEuMy4gV3JpdGUgRUZTUk9NX0tJQ0sgKDB4NTgwLCBiaXQzMCkgdG8gMSB0byBraWNrLW9mZiBwaHlzaWNhbCB3cml0ZSBwcm9jZWR1cmUuCisJCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCQlOZGlzTW92ZU1lbW9yeSgmZGF0YSwgJmVGdXNlQ3RybFN0cnVjLCA0KTsKKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRlVTRV9DVFJMLCBkYXRhKTsKKworCQkvL1N0ZXAxLjEuNC4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLiBJdKGmcyBkb25lLgorCQlpID0gMDsKKwkJd2hpbGUoaSA8IDEwMCkKKwkJeworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAoUFVJTlQzMikgJmVGdXNlQ3RybFN0cnVjKTsKKworCQkJaWYoZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0tJQ0sgPT0gMCkKKwkJCQlicmVhazsKKworCQkJUlRNUHVzZWNEZWxheSgyKTsKKwkJCWkrKzsKKwkJfQorCisJfQorCWVsc2UKKwl7CS8vU3RlcDEuMi4KKwkJLy9JZiB0aGUgc2FtZSBsb2dpY2FsIG51bWJlciBpcyBleGlzdGluZywgY2hlY2sgaWYgdGhlIHdyaXR0aW5nIGRhdGEgYW5kIHRoZSBkYXRhCisJCS8vc2F2aW5nIGluIHRoaXMgYmxvY2sgYXJlIHRoZSBzYW1lLgorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvL3JlYWQgY3VycmVudCB2YWx1ZXMgb2YgMTYtYnl0ZSBibG9jaworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJCS8vU3RlcDEuMi4wLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQUlOID0gT2Zmc2V0ICYgMHhmZmYwOworCisJCS8vU3RlcDEuMi4xLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMS4KKwkJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX01PREUgPSAwOworCisJCS8vU3RlcDEuMi4yLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHJlYWQgcHJvY2VkdXJlLgorCQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9IDE7CisKKwkJTmRpc01vdmVNZW1vcnkoJmRhdGEsICZlRnVzZUN0cmxTdHJ1YywgNCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJCS8vU3RlcDEuMi4zLiBQb2xsaW5nIEVGU1JPTV9LSUNLKDB4NTgwLCBiaXQzMCkgdW50aWwgaXQgYmVjb21lIDAgYWdhaW4uCisJCWkgPSAwOworCQl3aGlsZShpIDwgMTAwKQorCQl7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJCQlpZihlRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9PSAwKQorCQkJCWJyZWFrOworCQkJUlRNUHVzZWNEZWxheSgyKTsKKwkJCWkrKzsKKwkJfQorCisJCS8vU3RlcDEuMi40LiBSZWFkIDE2LWJ5dGUgb2YgZGF0YSBmcm9tIEVGVVNFX0RBVEEwLTMgKDB4NTlDLTB4NTkwKQorCQllZnVzZURhdGFPZmZzZXQgPSAgRUZVU0VfREFUQTM7CisJCWZvcihpPTA7IGk8IDQ7IGkrKykKKwkJeworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBlZnVzZURhdGFPZmZzZXQsIChQVUlOVDMyKSAmYnVmZmVyW2ldKTsKKwkJCWVmdXNlRGF0YU9mZnNldCAtPSAgNDsKKwkJfQorCQkvL1N0ZXAxLjIuNS4gQ2hlY2sgaWYgdGhlIGRhdGEgb2YgZWZ1c2UgYW5kIHRoZSB3cml0aW5nIGRhdGEgYXJlIHRoZSBzYW1lLgorCQlmb3IoaSA9MDsgaTw0OyBpKyspCisJCXsKKwkJCXRlbXBidWZmZXI9KChwRGF0YVsyKmkrMV08PDE2KSYweGZmZmYwMDAwKXxwRGF0YVsyKmldOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYnVmZmVyWyVkXT0leCxwRGF0YVslZF09JXgscERhdGFbJWRdPSV4LHRlbXBidWZmZXI9JXhcbiIsaSxidWZmZXJbaV0sMippLHBEYXRhWzIqaV0sMippKzEscERhdGFbMippKzFdLHRlbXBidWZmZXIpKTsKKworCQkJaWYoKChidWZmZXJbaV0mMHhmZmZmMDAwMCk9PShwRGF0YVsyKmkrMV08PDE2KSkmJigoYnVmZmVyW2ldJjB4ZmZmZik9PXBEYXRhWzIqaV0pKQorCQkJCWJOb3RXcml0ZSY9VFJVRTsKKwkJCWVsc2UKKwkJCXsKKwkJCQliTm90V3JpdGUmPUZBTFNFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmKCFiTm90V3JpdGUpCisJCXsKKwkJcHJpbnRrKCJUaGUgZGF0YSBpcyBub3QgdGhlIHNhbWVcbiIpOworCisJCQlmb3IoaSA9MDsgaTw4OyBpKyspCisJCQl7CisJCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQkJSW5CdWZbMF0gPSBhZGRyKzIqaTsKKwkJCQlJbkJ1ZlsxXSA9IDI7CisJCQkJSW5CdWZbMl0gPSBwRGF0YVtpXTsKKworCQkJCWVGdXNlV3JpdGVQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNiwgTlVMTCwgMik7CisJCQl9CisKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gVFJVRTsKKwkgICAgIH0KKworCisKKwkJLy9TdGVwIDIuIFdyaXRlIG1hcHBpbmcgdGFibGUKKwkJYWRkciA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVCtCbGtOdW07CisKKwkJdG1wYWRkciA9IGFkZHI7CisKKwkJaWYoYWRkciAlIDIgIT0gMCkKKwkJCWFkZHIgPSBhZGRyIC0xOworCQlJbkJ1ZlswXSA9IGFkZHI7CisJCUluQnVmWzFdID0gMjsKKworCQkvL2NvbnZlcnQgdGhlIGFkZHJlc3MgZnJvbSAxMCB0byA4IGJpdCAoIGJpdDcsIDYgPSBwYXJpdHkgYW5kIGJpdDUgfiAwID0gYml0OX40KSwgYW5kIHdyaXRlIHRvIGxvZ2ljYWwgbWFwIGVudHJ5CisJCXRtcE9mZnNldCA9IE9mZnNldDsKKwkJdG1wT2Zmc2V0ID4+PSA0OworCQl0bXBPZmZzZXQgfD0gKCh+KCh0bXBPZmZzZXQgJiAweDAxKSBeICggdG1wT2Zmc2V0ID4+IDEgJiAweDAxKSBeICAodG1wT2Zmc2V0ID4+IDIgJiAweDAxKSBeICAodG1wT2Zmc2V0ID4+IDMgJiAweDAxKSkpIDw8IDYpICYgMHg0MDsKKwkJdG1wT2Zmc2V0IHw9ICgofiggKHRtcE9mZnNldCA+PiAyICYgMHgwMSkgXiAodG1wT2Zmc2V0ID4+IDMgJiAweDAxKSBeICh0bXBPZmZzZXQgPj4gNCAmIDB4MDEpIF4gKCB0bXBPZmZzZXQgPj4gNSAmIDB4MDEpKSkgPDwgNykgJiAweDgwOworCisJCS8vIHdyaXRlIHRoZSBsb2dpY2FsIGFkZHJlc3MKKwkJaWYodG1wYWRkciUyICE9IDApCisJCQlJbkJ1ZlsyXSA9IHRtcE9mZnNldDw8ODsKKwkJZWxzZQorCQkJSW5CdWZbMl0gPSB0bXBPZmZzZXQ7CisKKwkJZUZ1c2VXcml0ZVBoeXNpY2FsKHBBZCwmSW5CdWZbMF0sIDYsIE5VTEwsIDApOworCisJCS8vU3RlcCAzLiBDb21wYXJlIGRhdGEgaWYgbm90IHRoZSBzYW1lLCBpbnZhbGlkYXRlIHRoZSBtYXBwaW5nIGVudHJ5LCB0aGVuIHJlLXdyaXRlIHRoZSBkYXRhIHVudGlsIEUtZnVzZSBpcyBleGhhdXN0ZWQKKwkJYldyaXRlU3VjY2VzcyA9IFRSVUU7CisJCWZvcihpID0wOyBpPDg7IGkrKykKKwkJeworCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQlJbkJ1ZlswXSA9IGFkZHIrMippOworCQkJSW5CdWZbMV0gPSAyOworCQkJSW5CdWZbMl0gPSAweDA7CisKKwkJCWVGdXNlUmVhZFBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA0LCAmSW5CdWZbMl0sIDIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYWRkcj0leCwgYnVmZmVyW2ldPSV4LEluQnVmWzJdPSV4XG4iLEluQnVmWzBdLHBEYXRhW2ldLEluQnVmWzJdKSk7CisJCQlpZihwRGF0YVtpXSAhPSBJbkJ1ZlsyXSkKKwkJCXsKKwkJCQliV3JpdGVTdWNjZXNzID0gRkFMU0U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvL1N0ZXAgNC4gaW52bGlkYXRlIG1hcHBpbmcgZW50cnkgYW5kIGZpbmQgYSBmcmVlIG1hcHBpbmcgZW50cnkgaWYgbm90IHN1Y2NlZWQKKworCQlpZiAoIWJXcml0ZVN1Y2Nlc3MmJkxvb3A8MikKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVyc0Zyb21CaW46Ok5vdCBiV3JpdGVTdWNjZXNzIEJsa051bSA9ICVkXG4iLCBCbGtOdW0pKTsKKworCQkJLy8gdGhlIG9mZnNldCBvZiBjdXJyZW50IG1hcHBpbmcgZW50cnkKKwkJCWFkZHIgPSBFRlVTRV9VU0FHRV9NQVBfU1RBUlQrQmxrTnVtOworCisJCQkvL2ZpbmQgYSBuZXcgbWFwcGluZyBlbnRyeQorCQkJQmxrTnVtID0gMHhmZmZmOworCQkJZm9yIChpPUVGVVNFX1VTQUdFX01BUF9TVEFSVDsgaTw9RUZVU0VfVVNBR0VfTUFQX0VORDsgaSs9MikKKwkJCXsKKwkJCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsIGksIDIsICZMb2dpY2FsQWRkcmVzcyk7CisJCQkJaWYoIChMb2dpY2FsQWRkcmVzcyAmIDB4ZmYpID09IDApCisJCQkJeworCQkJCQlCbGtOdW0gPSBpLUVGVVNFX1VTQUdFX01BUF9TVEFSVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYoKCAoTG9naWNhbEFkZHJlc3MgPj4gOCkgJiAweGZmKSA9PSAwKQorCQkJCXsKKwkJCQkJaWYgKGkgIT0gRUZVU0VfVVNBR0VfTUFQX0VORCkKKwkJCQkJeworCQkJCQkJQmxrTnVtID0gaSsxLUVGVVNFX1VTQUdFX01BUF9TVEFSVDsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJlRnVzZVdyaXRlUmVnaXN0ZXJzRnJvbUJpbjo6Tm90IGJXcml0ZVN1Y2Nlc3MgbmV3IEJsa051bSA9ICVkXG4iLCBCbGtOdW0pKTsKKwkJCWlmKEJsa051bSA9PSAweGZmZmYpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVyc0Zyb21CaW46IG91dCBvZiBmcmVlIEUtZnVzZSBzcGFjZSEhIVxuIikpOworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKworCQkJLy9pbnZhbGlkYXRlIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudHJ5IGlmIG5ldyBlbnRyeSBpcyBub3QgZm91bmQKKwkJCXRtcGFkZHIgPSBhZGRyOworCisJCQlpZihhZGRyICUgMiAhPSAwKQorCQkJCWFkZHIgPSBhZGRyIC0xOworCQkJSW5CdWZbMF0gPSBhZGRyOworCQkJSW5CdWZbMV0gPSAyOworCisJCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKworCQkJLy8gd3JpdGUgdGhlIGxvZ2ljYWwgYWRkcmVzcworCQkJaWYodG1wYWRkciUyICE9IDApCisJCQl7CisJCQkJLy8gSW52YWxpZGF0ZSB0aGUgaGlnaCBieXRlCisJCQkJZm9yIChpPTg7IGk8MTU7IGkrKykKKwkJCQl7CisJCQkJCWlmKCAoIChJbkJ1ZlsyXSA+PiBpKSAmIDB4MDEpID09IDApCisJCQkJCXsKKwkJCQkJCUluQnVmWzJdIHw9ICgweDEgPDxpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIGludmFsaWRhdGUgdGhlIGxvdyBieXRlCisJCQkJZm9yIChpPTA7IGk8ODsgaSsrKQorCQkJCXsKKwkJCQkJaWYoICggKEluQnVmWzJdID4+IGkpICYgMHgwMSkgPT0gMCkKKwkJCQkJeworCQkJCQkJSW5CdWZbMl0gfD0gKDB4MSA8PGkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllRnVzZVdyaXRlUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDYsIE5VTEwsIDApOworCQl9CisKKwl9CisJd2hpbGUoIWJXcml0ZVN1Y2Nlc3MmJkxvb3A8Mik7CisKKwlyZXR1cm4gVFJVRTsKK30KKworI2VuZGlmIC8vIFJUMzB4eCAvLworLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlLS0+CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL21kNS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbWQ1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0Nzc2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL21kNS5jCkBAIC0wLDAgKzEsMTQyNyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBtZDUuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworCWphbgkJCTEwLTI4LTAzCQlJbml0aWFsCisJUml0YSAgICAJMTEtMjMtMDQJCU1vZGlmeSBNRDUgYW5kIFNIQS0xCisJUml0YQkJMTAtMTQtMDUJCU1vZGlmeSBTSEEtMSBpbiBiaWctZW5kaWFuIHBsYXRmb3JtCisgKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworLyoqCisgKiBtZDVfbWFjOgorICogQGtleTogcG9pbnRlciB0bwl0aGUJa2V5CXVzZWQgZm9yIE1BQyBnZW5lcmF0aW9uCisgKiBAa2V5X2xlbjogbGVuZ3RoCW9mIHRoZSBrZXkgaW4gYnl0ZXMKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgZm9yIHdoaWNoIHRoZSBNQUMgaXMJZ2VuZXJhdGVkCisgKiBAZGF0YV9sZW46IGxlbmd0aCBvZgl0aGUJZGF0YSBpbglieXRlcworICogQG1hYzogcG9pbnRlciB0bwl0aGUJYnVmZmVyIGhvbGRpbmcgc3BhY2UgZm9yIHRoZSBNQUM7IHRoZSBidWZmZXIgc2hvdWxkCisgKiBoYXZlCXNwYWNlIGZvciAxMjgtYml0ICgxNiBieXRlcykgTUQ1IGhhc2ggdmFsdWUKKyAqCisgKiBtZDVfbWFjKCkgZGV0ZXJtaW5lcwl0aGUJbWVzc2FnZQlhdXRoZW50aWNhdGlvbiBjb2RlCWJ5IHVzaW5nIHNlY3VyZQloYXNoCisgKiBNRDUoa2V5IHwgZGF0YSB8CWtleSkuCisgKi8KK3ZvaWQgbWQ1X21hYyh1OCAqa2V5LCBzaXplX3Qga2V5X2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1hYykKK3sKKwlNRDVfQ1RYCWNvbnRleHQ7CisKKwlNRDVJbml0KCZjb250ZXh0KTsKKwlNRDVVcGRhdGUoJmNvbnRleHQsCWtleSwga2V5X2xlbik7CisJTUQ1VXBkYXRlKCZjb250ZXh0LAlkYXRhLCBkYXRhX2xlbik7CisJTUQ1VXBkYXRlKCZjb250ZXh0LAlrZXksIGtleV9sZW4pOworCU1ENUZpbmFsKG1hYywgJmNvbnRleHQpOworfQorCisvKioKKyAqIGhtYWNfbWQ1OgorICogQGtleTogcG9pbnRlciB0bwl0aGUJa2V5CXVzZWQgZm9yIE1BQyBnZW5lcmF0aW9uCisgKiBAa2V5X2xlbjogbGVuZ3RoCW9mIHRoZSBrZXkgaW4gYnl0ZXMKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgZm9yIHdoaWNoIHRoZSBNQUMgaXMJZ2VuZXJhdGVkCisgKiBAZGF0YV9sZW46IGxlbmd0aCBvZgl0aGUJZGF0YSBpbglieXRlcworICogQG1hYzogcG9pbnRlciB0bwl0aGUJYnVmZmVyIGhvbGRpbmcgc3BhY2UgZm9yIHRoZSBNQUM7IHRoZSBidWZmZXIgc2hvdWxkCisgKiBoYXZlCXNwYWNlIGZvciAxMjgtYml0ICgxNiBieXRlcykgTUQ1IGhhc2ggdmFsdWUKKyAqCisgKiBobWFjX21kNSgpIGRldGVybWluZXMgdGhlIG1lc3NhZ2UgYXV0aGVudGljYXRpb24JY29kZSB1c2luZyBITUFDLU1ENS4KKyAqIFRoaXMJaW1wbGVtZW50YXRpb24gaXMgYmFzZWQJb24gdGhlIHNhbXBsZSBjb2RlIHByZXNlbnRlZCBpbglSRkMJMjEwNC4KKyAqLwordm9pZCBobWFjX21kNSh1OCAqa2V5LCBzaXplX3Qga2V5X2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1hYykKK3sKKwlNRDVfQ1RYCWNvbnRleHQ7CisgICAgdTgga19pcGFkWzY1XTsgLyogaW5uZXIgcGFkZGluZyAtIGtleSBYT1JkIHdpdGggaXBhZCAqLworICAgIHU4IGtfb3BhZFs2NV07IC8qIG91dGVyIHBhZGRpbmcgLSBrZXkgWE9SZCB3aXRoIG9wYWQgKi8KKyAgICB1OCB0a1sxNl07CisJaW50CWk7CisKKwkvL2Fzc2VydChrZXkgIT0gTlVMTCAmJiBkYXRhICE9IE5VTEwgJiYgbWFjICE9IE5VTEwpOworCisJLyogaWYga2V5IGlzIGxvbmdlcgl0aGFuIDY0CWJ5dGVzIHJlc2V0CWl0IHRvIGtleSA9CU1ENShrZXkpICovCisJaWYgKGtleV9sZW4JPiA2NCkgeworCQlNRDVfQ1RYCXR0Y29udGV4dDsKKworCQlNRDVJbml0KCZ0dGNvbnRleHQpOworCQlNRDVVcGRhdGUoJnR0Y29udGV4dCwga2V5LCBrZXlfbGVuKTsKKwkJTUQ1RmluYWwodGssICZ0dGNvbnRleHQpOworCQkvL2tleT0oUFVDSEFSKXR0Y29udGV4dC5idWY7CisJCWtleQk9IHRrOworCQlrZXlfbGVuCT0gMTY7CisJfQorCisJLyogdGhlIEhNQUNfTUQ1CXRyYW5zZm9ybSBsb29rcwlsaWtlOgorCSAqCisJICogTUQ1KEsgWE9SIG9wYWQsIE1ENShLIFhPUiBpcGFkLCB0ZXh0KSkKKwkgKgorCSAqIHdoZXJlIEsgaXMgYW4gbiBieXRlCWtleQorCSAqIGlwYWQJaXMgdGhlIGJ5dGUJMHgzNiByZXBlYXRlZCA2NCB0aW1lcworCSAqIG9wYWQJaXMgdGhlIGJ5dGUJMHg1YyByZXBlYXRlZCA2NCB0aW1lcworCSAqIGFuZCB0ZXh0CWlzIHRoZSBkYXRhCWJlaW5nIHByb3RlY3RlZAkqLworCisJLyogc3RhcnQgb3V0IGJ5CXN0b3JpbmcJa2V5CWluIHBhZHMJKi8KKwlOZGlzWmVyb01lbW9yeShrX2lwYWQsIHNpemVvZihrX2lwYWQpKTsKKwlOZGlzWmVyb01lbW9yeShrX29wYWQsCXNpemVvZihrX29wYWQpKTsKKwkvL2Fzc2VydChrZXlfbGVuIDwgc2l6ZW9mKGtfaXBhZCkpOworCU5kaXNNb3ZlTWVtb3J5KGtfaXBhZCwga2V5LAlrZXlfbGVuKTsKKwlOZGlzTW92ZU1lbW9yeShrX29wYWQsIGtleSwJa2V5X2xlbik7CisKKwkvKiBYT1Iga2V5IHdpdGgJaXBhZCBhbmQgb3BhZCB2YWx1ZXMgKi8KKwlmb3IJKGkgPSAwOwlpIDwJNjQ7CWkrKykgeworCQlrX2lwYWRbaV0gXj0gMHgzNjsKKwkJa19vcGFkW2ldIF49IDB4NWM7CisJfQorCisJLyogcGVyZm9ybSBpbm5lciBNRDUgKi8KKwlNRDVJbml0KCZjb250ZXh0KTsJCQkJCSAvKglpbml0IGNvbnRleHQgZm9yIDFzdCBwYXNzICovCisJTUQ1VXBkYXRlKCZjb250ZXh0LAlrX2lwYWQsCTY0KTsJIC8qCXN0YXJ0IHdpdGggaW5uZXIgcGFkICovCisJTUQ1VXBkYXRlKCZjb250ZXh0LAlkYXRhLCBkYXRhX2xlbik7IC8qCXRoZW4gdGV4dCBvZiBkYXRhZ3JhbSAqLworCU1ENUZpbmFsKG1hYywgJmNvbnRleHQpOwkJCSAvKglmaW5pc2ggdXAgMXN0IHBhc3MgKi8KKworCS8qIHBlcmZvcm0gb3V0ZXIgTUQ1ICovCisJTUQ1SW5pdCgmY29udGV4dCk7CQkJCQkgLyoJaW5pdCBjb250ZXh0IGZvciAybmQgcGFzcyAqLworCU1ENVVwZGF0ZSgmY29udGV4dCwJa19vcGFkLAk2NCk7CSAvKglzdGFydCB3aXRoIG91dGVyIHBhZCAqLworCU1ENVVwZGF0ZSgmY29udGV4dCwJbWFjLCAxNik7CQkgLyoJdGhlbiByZXN1bHRzIG9mCTFzdAloYXNoICovCisJTUQ1RmluYWwobWFjLCAmY29udGV4dCk7CQkJIC8qCWZpbmlzaCB1cCAybmQgcGFzcyAqLworfQorCisjaWZuZGVmIFJUX0JJR19FTkRJQU4KKyNkZWZpbmUgYnl0ZVJldmVyc2UoYnVmLCBsZW4pICAgLyogTm90aGluZyAqLworI2Vsc2UKK3ZvaWQgYnl0ZVJldmVyc2UodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25ncyk7Cit2b2lkIGJ5dGVSZXZlcnNlKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZ3MpCit7CisgICAgZG8geworICAgICAgICAqKFVJTlQzMiAqKWJ1ZiA9IFNXQVAzMigqKFVJTlQzMiAqKWJ1Zik7CisgICAgICAgIGJ1ZiArPSA0OworICAgIH0gd2hpbGUgKC0tbG9uZ3MpOworfQorI2VuZGlmCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT0gIE1ENSBpbXBsZW1lbnRhdGlvbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8vIGZvdXIgYmFzZSBmdW5jdGlvbnMgZm9yIE1ENQorI2RlZmluZSBNRDVfRjEoeCwgeSwgeikgKCgoeCkgJiAoeSkpIHwgKCh+eCkgJiAoeikpKQorI2RlZmluZSBNRDVfRjIoeCwgeSwgeikgKCgoeCkgJiAoeikpIHwgKCh5KSAmICh+eikpKQorI2RlZmluZSBNRDVfRjMoeCwgeSwgeikgKCh4KSBeICh5KSBeICh6KSkKKyNkZWZpbmUgTUQ1X0Y0KHgsIHksIHopICgoeSkgXiAoKHgpIHwgKH56KSkpCisjZGVmaW5lIENZQ0xJQ19MRUZUX1NISUZUKHcsIHMpICgoKHcpIDw8IChzKSkgfCAoKHcpID4+ICgzMi0ocykpKSkKKworI2RlZmluZQlNRDVTdGVwKGYsIHcsIHgsIHksCXosIGRhdGEsIHQsIHMpCVwKKwkoIHcJKz0gZih4LAl5LCB6KSArCWRhdGEgKyB0LCAgdyA9IChDWUNMSUNfTEVGVF9TSElGVCh3LCBzKSkgJiAweGZmZmZmZmZmLCB3ICs9CXggKQorCisKKy8qCisgKiAgRnVuY3Rpb24gRGVzY3JpcHRpb246CisgKiAgICAgIEluaXRpYXRlIE1ENSBDb250ZXh0IHNhdGlzZmllZCBpbiBSRkMgMTMyMQorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIHBDdHggICAgICAgIFBvaW50ZXIJdG8gTUQ1IGNvbnRleHQKKyAqCisgKiAgUmV0dXJuIFZhbHVlOgorICogICAgICBOb25lCisgKi8KK1ZPSUQgTUQ1SW5pdChNRDVfQ1RYICpwQ3R4KQoreworICAgIHBDdHgtPkJ1ZlswXT0weDY3NDUyMzAxOworICAgIHBDdHgtPkJ1ZlsxXT0weGVmY2RhYjg5OworICAgIHBDdHgtPkJ1ZlsyXT0weDk4YmFkY2ZlOworICAgIHBDdHgtPkJ1ZlszXT0weDEwMzI1NDc2OworCisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFswXT0wOworICAgIHBDdHgtPkxlbkluQml0Q291bnRbMV09MDsKK30KKworCisvKgorICogIEZ1bmN0aW9uIERlc2NyaXB0aW9uOgorICogICAgICBVcGRhdGUgTUQ1IENvbnRleHQsIGFsbG93IG9mIGFuIGFycmFyeSBvZiBvY3RldHMgYXMgdGhlIG5leHQgcG9ydGlvbgorICogICAgICBvZiB0aGUgbWVzc2FnZQorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIHBDdHgJCVBvaW50ZXIJdG8gTUQ1IGNvbnRleHQKKyAqIAkgICAgcERhdGEgICAgICAgUG9pbnRlciB0byBpbnB1dCBkYXRhCisgKiAgICAgIExlbkluQnl0ZXMgIFRoZSBsZW5ndGggb2YgaW5wdXQgZGF0YSAodW5pdDogYnl0ZSkKKyAqCisgKiAgUmV0dXJuIFZhbHVlOgorICogICAgICBOb25lCisgKgorICogIE5vdGU6CisgKiAgICAgIENhbGxlZCBhZnRlciBNRDVJbml0IG9yIE1ENVVwZGF0ZShpdHNlbGYpCisgKi8KK1ZPSUQgTUQ1VXBkYXRlKE1ENV9DVFggKnBDdHgsIFVDSEFSICpwRGF0YSwgVUlOVDMyIExlbkluQnl0ZXMpCit7CisKKyAgICBVSU5UMzIgVGZUaW1lczsKKyAgICBVSU5UMzIgdGVtcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworICAgIHRlbXAgPSBwQ3R4LT5MZW5JbkJpdENvdW50WzBdOworCisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFswXSA9IChVSU5UMzIpIChwQ3R4LT5MZW5JbkJpdENvdW50WzBdICsgKExlbkluQnl0ZXMgPDwgMykpOworCisgICAgaWYgKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPCB0ZW1wKQorICAgICAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzFdKys7ICAgLy9jYXJyeSBpbgorCisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXSArPSBMZW5JbkJ5dGVzID4+IDI5OworCisgICAgLy8gbW9kIDY0IGJ5dGVzCisgICAgdGVtcCA9ICh0ZW1wID4+IDMpICYgMHgzZjsKKworICAgIC8vIHByb2Nlc3MgbGFja3Mgb2YgNjQtYnl0ZSBkYXRhCisgICAgaWYgKHRlbXApCisgICAgeworICAgICAgICBVQ0hBUiAqcEFkcyA9IChVQ0hBUiAqKSBwQ3R4LT5JbnB1dCArIHRlbXA7CisKKyAgICAgICAgaWYgKCh0ZW1wK0xlbkluQnl0ZXMpIDwgNjQpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZHMsIChVQ0hBUiAqKXBEYXRhLCBMZW5JbkJ5dGVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZHMsIChVQ0hBUiAqKXBEYXRhLCA2NC10ZW1wKTsKKyAgICAgICAgYnl0ZVJldmVyc2UocEN0eC0+SW5wdXQsIDE2KTsKKyAgICAgICAgTUQ1VHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKworICAgICAgICBwRGF0YSArPSA2NC10ZW1wOworICAgICAgICBMZW5JbkJ5dGVzIC09IDY0LXRlbXA7CisgICAgfSAvLyBlbmQgb2YgaWYgKHRlbXApCisKKworICAgIFRmVGltZXMgPSAoTGVuSW5CeXRlcyA+PiA2KTsKKworICAgIGZvciAoaT1UZlRpbWVzOyBpPjA7IGktLSkKKyAgICB7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBDdHgtPklucHV0LCAoVUNIQVIgKilwRGF0YSwgNjQpOworICAgICAgICBieXRlUmV2ZXJzZShwQ3R4LT5JbnB1dCwgMTYpOworICAgICAgICBNRDVUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworICAgICAgICBwRGF0YSArPSA2NDsKKyAgICAgICAgTGVuSW5CeXRlcyAtPSA2NDsKKyAgICB9IC8vIGVuZCBvZiBmb3IKKworICAgIC8vIGJ1ZmZlcmluZyBsYWNrcyBvZiA2NC1ieXRlIGRhdGEKKyAgICBpZihMZW5JbkJ5dGVzKQorICAgICAgICBOZGlzTW92ZU1lbW9yeShwQ3R4LT5JbnB1dCwgKFVDSEFSICopcERhdGEsIExlbkluQnl0ZXMpOworCit9CisKKworLyoKKyAqICBGdW5jdGlvbiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQXBwZW5kIHBhZGRpbmcgYml0cyBhbmQgbGVuZ3RoIG9mIG9yaWdpbmFsIG1lc3NhZ2UgaW4gdGhlIHRhaWwKKyAqICAgICAgVGhlIG1lc3NhZ2UgZGlnZXN0IGhhcyB0byBiZSBjb21wbGV0ZWQgaW4gdGhlIGVuZAorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIERpZ2VzdAkJT3V0cHV0IG9mIERpZ2VzdC1NZXNzYWdlIGZvciBNRDUKKyAqICAJcEN0eCAgICAgICAgUG9pbnRlcgl0byBNRDUgY29udGV4dAorICoKKyAqICBSZXR1cm4gVmFsdWU6CisgKiAgICAgIE5vbmUKKyAqCisgKiAgTm90ZToKKyAqICAgICAgQ2FsbGVkIGFmdGVyIE1ENVVwZGF0ZQorICovCitWT0lEIE1ENUZpbmFsKFVDSEFSIERpZ2VzdFsxNl0sIE1ENV9DVFggKnBDdHgpCit7CisgICAgVUNIQVIgUmVtYWluZGVyOworICAgIFVDSEFSIFBhZExlbkluQnl0ZXM7CisgICAgVUNIQVIgKnBBcHBlbmQ9MDsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIFJlbWFpbmRlciA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gMykgJiAweDNmKTsKKworICAgIFBhZExlbkluQnl0ZXMgPSAoUmVtYWluZGVyIDwgNTYpID8gKDU2LVJlbWFpbmRlcikgOiAoMTIwLVJlbWFpbmRlcik7CisKKyAgICBwQXBwZW5kID0gKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXI7CisKKyAgICAvLyBwYWRkaW5nIGJpdHMgd2l0aG91dCBjcm9zc2luZyBibG9jayg2NC1ieXRlIGJhc2VkKSBib3VuZGFyeQorICAgIGlmIChSZW1haW5kZXIgPCA1NikKKyAgICB7CisgICAgICAgICpwQXBwZW5kID0gMHg4MDsKKyAgICAgICAgUGFkTGVuSW5CeXRlcyAtLTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIFJlbWFpbmRlcisxLCBQYWRMZW5JbkJ5dGVzKTsKKworCQkvLyBhZGQgZGF0YS1sZW5ndGggZmllbGQsIGZyb20gbG93IHRvIGhpZ2gKKyAgICAgICAJZm9yIChpPTA7IGk8NDsgaSsrKQorICAgICAgICB7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs1NitpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gKGkgPDwgMykpICYgMHhmZik7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs2MCtpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMV0gPj4gKGkgPDwgMykpICYgMHhmZik7CisgICAgICAJfQorCisgICAgICAgIGJ5dGVSZXZlcnNlKHBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisgICAgfSAvLyBlbmQgb2YgaWYKKworICAgIC8vIHBhZGRpbmcgYml0cyB3aXRoIGNyb3NzaW5nIGJsb2NrKDY0LWJ5dGUgYmFzZWQpIGJvdW5kYXJ5CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gdGhlIGZpcnN0IGJsb2NrID09PQorICAgICAgICAqcEFwcGVuZCA9IDB4ODA7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLS07CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXIrMSwgKDY0LVJlbWFpbmRlci0xKSk7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLT0gKDY0IC0gUmVtYWluZGVyIC0gMSk7CisKKyAgICAgICAgYnl0ZVJldmVyc2UocEN0eC0+SW5wdXQsIDE2KTsKKyAgICAgICAgTUQ1VHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKworCisgICAgICAgIC8vIHRoZSBzZWNvbmQgYmxvY2sgPT09CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0LCBQYWRMZW5JbkJ5dGVzKTsKKworICAgICAgICAvLyBhZGQgZGF0YS1sZW5ndGggZmllbGQKKyAgICAgICAgZm9yIChpPTA7IGk8NDsgaSsrKQorICAgICAgICB7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs1NitpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gKGkgPDwgMykpICYgMHhmZik7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs2MCtpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMV0gPj4gKGkgPDwgMykpICYgMHhmZik7CisgICAgICAJfQorCisgICAgICAgIGJ5dGVSZXZlcnNlKHBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisgICAgfSAvLyBlbmQgb2YgZWxzZQorCisKKyAgICBOZGlzTW92ZU1lbW9yeSgoVUNIQVIgKilEaWdlc3QsIChVSU5UMzIgKilwQ3R4LT5CdWYsIDE2KTsgLy8gb3V0cHV0CisgICAgYnl0ZVJldmVyc2UoKFVDSEFSICopRGlnZXN0LCA0KTsKKyAgICBOZGlzWmVyb01lbW9yeShwQ3R4LCBzaXplb2YocEN0eCkpOyAvLyBtZW1vcnkgZnJlZQorfQorCisKKy8qCisgKiAgRnVuY3Rpb24gRGVzY3JpcHRpb246CisgKiAgICAgIFRoZSBjZW50cmFsIGFsZ29yaXRobSBvZiBNRDUsIGNvbnNpc3RzIG9mIGZvdXIgcm91bmRzIGFuZCBzaXh0ZWVuCisgKiAgCXN0ZXBzIHBlciByb3VuZAorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIEJ1ZiAgICAgQnVmZmVycyBvZiBmb3VyIHN0YXRlcyAob3V0cHV0OiAxNiBieXRlcykKKyAqIAkgICAgTWVzICAgICBJbnB1dCBkYXRhIChpbnB1dDogNjQgYnl0ZXMpCisgKgorICogIFJldHVybiBWYWx1ZToKKyAqICAgICAgTm9uZQorICoKKyAqICBOb3RlOgorICogICAgICBDYWxsZWQgYnkgTUQ1VXBkYXRlIG9yIE1ENUZpbmFsCisgKi8KK1ZPSUQgTUQ1VHJhbnNmb3JtKFVJTlQzMiBCdWZbNF0sIFVJTlQzMiBNZXNbMTZdKQoreworICAgIFVJTlQzMiBSZWdbNF0sIFRlbXA7CisJdW5zaWduZWQgaW50IGk7CisKKyAgICBzdGF0aWMgVUNIQVIgTFNoaWZ0VmFsWzE2XSA9CisgICAgeworICAgICAgICA3LCAxMiwgMTcsIDIyLAorCQk1LCA5ICwgMTQsIDIwLAorCQk0LCAxMSwgMTYsIDIzLAorIAkJNiwgMTAsIDE1LCAyMSwKKyAJfTsKKworCisJLy8gW2VxdWFsIHRvIDQyOTQ5NjcyOTYqYWJzKHNpbihpbmRleCkpXQorICAgIHN0YXRpYyBVSU5UMzIgTUQ1VGFibGVbNjRdID0KKwl7CisJCTB4ZDc2YWE0NzgsCTB4ZThjN2I3NTYsCTB4MjQyMDcwZGIsCTB4YzFiZGNlZWUsCisJCTB4ZjU3YzBmYWYsCTB4NDc4N2M2MmEsCTB4YTgzMDQ2MTMsIDB4ZmQ0Njk1MDEsCisJCTB4Njk4MDk4ZDgsCTB4OGI0NGY3YWYsCTB4ZmZmZjViYjEsCTB4ODk1Y2Q3YmUsCisgICAgCTB4NmI5MDExMjIsCTB4ZmQ5ODcxOTMsCTB4YTY3OTQzOGUsCTB4NDliNDA4MjEsCisKKyAgICAJMHhmNjFlMjU2MiwJMHhjMDQwYjM0MCwJMHgyNjVlNWE1MSwJMHhlOWI2YzdhYSwKKyAgICAJMHhkNjJmMTA1ZCwJMHgwMjQ0MTQ1MywJMHhkOGExZTY4MSwJMHhlN2QzZmJjOCwKKyAgICAJMHgyMWUxY2RlNiwJMHhjMzM3MDdkNiwJMHhmNGQ1MGQ4NywJMHg0NTVhMTRlZCwKKyAgICAJMHhhOWUzZTkwNSwJMHhmY2VmYTNmOCwJMHg2NzZmMDJkOSwJMHg4ZDJhNGM4YSwKKworICAgIAkweGZmZmEzOTQyLAkweDg3NzFmNjgxLAkweDZkOWQ2MTIyLAkweGZkZTUzODBjLAorICAgIAkweGE0YmVlYTQ0LAkweDRiZGVjZmE5LAkweGY2YmI0YjYwLAkweGJlYmZiYzcwLAorICAgIAkweDI4OWI3ZWM2LAkweGVhYTEyN2ZhLAkweGQ0ZWYzMDg1LAkweDA0ODgxZDA1LAorICAgIAkweGQ5ZDRkMDM5LAkweGU2ZGI5OWU1LAkweDFmYTI3Y2Y4LAkweGM0YWM1NjY1LAorCisgICAgCTB4ZjQyOTIyNDQsCTB4NDMyYWZmOTcsCTB4YWI5NDIzYTcsCTB4ZmM5M2EwMzksCisgICAJCTB4NjU1YjU5YzMsCTB4OGYwY2NjOTIsCTB4ZmZlZmY0N2QsCTB4ODU4NDVkZDEsCisgICAgCTB4NmZhODdlNGYsCTB4ZmUyY2U2ZTAsCTB4YTMwMTQzMTQsCTB4NGUwODExYTEsCisgICAgCTB4Zjc1MzdlODIsCTB4YmQzYWYyMzUsCTB4MmFkN2QyYmIsCTB4ZWI4NmQzOTEKKwl9OworCisKKyAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIFJlZ1tpXT1CdWZbaV07CisKKworICAgIC8vIDY0IHN0ZXBzIGluIE1ENSBhbGdvcml0aG0KKyAgICBmb3IgKGk9MDsgaTwxNjsgaSsrKQorICAgIHsKKyAgICAgICAgTUQ1U3RlcChNRDVfRjEsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgTWVzW2ldLAorICAgICAgICAgICAgICAgIE1ENVRhYmxlW2ldLCBMU2hpZnRWYWxbaSAmIDB4M10pOworCisgICAgICAgIC8vIG9uZS13b3JkIHJpZ2h0IHNoaWZ0CisgICAgICAgIFRlbXAgICA9IFJlZ1szXTsKKyAgICAgICAgUmVnWzNdID0gUmVnWzJdOworICAgICAgICBSZWdbMl0gPSBSZWdbMV07CisgICAgICAgIFJlZ1sxXSA9IFJlZ1swXTsKKyAgICAgICAgUmVnWzBdID0gVGVtcDsKKyAgICB9CisgICAgZm9yIChpPTE2OyBpPDMyOyBpKyspCisgICAgeworICAgICAgICBNRDVTdGVwKE1ENV9GMiwgUmVnWzBdLCBSZWdbMV0sIFJlZ1syXSwgUmVnWzNdLCBNZXNbKDUqKGkgJiAweGYpKzEpICYgMHhmXSwKKyAgICAgICAgICAgICAgICBNRDVUYWJsZVtpXSwgTFNoaWZ0VmFsWygweDEgPDwgMikrKGkgJiAweDMpXSk7CisKKyAgICAgICAgLy8gb25lLXdvcmQgcmlnaHQgc2hpZnQKKyAgICAgICAgVGVtcCAgID0gUmVnWzNdOworICAgICAgICBSZWdbM10gPSBSZWdbMl07CisgICAgICAgIFJlZ1syXSA9IFJlZ1sxXTsKKyAgICAgICAgUmVnWzFdID0gUmVnWzBdOworICAgICAgICBSZWdbMF0gPSBUZW1wOworICAgIH0KKyAgICBmb3IgKGk9MzI7IGk8NDg7IGkrKykKKyAgICB7CisgICAgICAgIE1ENVN0ZXAoTUQ1X0YzLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIE1lc1soMyooaSAmIDB4ZikrNSkgJiAweGZdLAorICAgICAgICAgICAgICAgIE1ENVRhYmxlW2ldLCBMU2hpZnRWYWxbKDB4MSA8PCAzKSsoaSAmIDB4MyldKTsKKworICAgICAgICAvLyBvbmUtd29yZCByaWdodCBzaGlmdAorICAgICAgICBUZW1wICAgPSBSZWdbM107CisgICAgICAgIFJlZ1szXSA9IFJlZ1syXTsKKyAgICAgICAgUmVnWzJdID0gUmVnWzFdOworICAgICAgICBSZWdbMV0gPSBSZWdbMF07CisgICAgICAgIFJlZ1swXSA9IFRlbXA7CisgICAgfQorICAgIGZvciAoaT00ODsgaTw2NDsgaSsrKQorICAgIHsKKyAgICAgICAgTUQ1U3RlcChNRDVfRjQsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgTWVzWyg3KihpICYgMHhmKSkgJiAweGZdLAorICAgICAgICAgICAgICAgIE1ENVRhYmxlW2ldLCBMU2hpZnRWYWxbKDB4MyA8PCAyKSsoaSAmIDB4MyldKTsKKworICAgICAgICAvLyBvbmUtd29yZCByaWdodCBzaGlmdAorICAgICAgICBUZW1wICAgPSBSZWdbM107CisgICAgICAgIFJlZ1szXSA9IFJlZ1syXTsKKyAgICAgICAgUmVnWzJdID0gUmVnWzFdOworICAgICAgICBSZWdbMV0gPSBSZWdbMF07CisgICAgICAgIFJlZ1swXSA9IFRlbXA7CisgICAgfQorCisKKyAgICAvLyAodGVtcG9yYXJ5KW91dHB1dAorICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgQnVmW2ldICs9IFJlZ1tpXTsKKworfQorCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PSAgU0hBLTEgaW1wbGVtZW50YXRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8vIGZvdXIgYmFzZSBmdW5jdGlvbnMgZm9yIFNIQS0xCisjZGVmaW5lIFNIQTFfRjEoYiwgYywgZCkgICAgKCgoYikgJiAoYykpIHwgKCh+YikgJiAoZCkpKQorI2RlZmluZSBTSEExX0YyKGIsIGMsIGQpICAgICgoYikgXiAoYykgXiAoZCkpCisjZGVmaW5lIFNIQTFfRjMoYiwgYywgZCkgICAgKCgoYikgJiAoYykpIHwgKChiKSAmIChkKSkgfCAoKGMpICYgKGQpKSkKKworCisjZGVmaW5lIFNIQTFTdGVwKGYsIGEsIGIsIGMsIGQsIGUsIHcsIGspICAgIFwKKyAgICAoIGUJKz0gKCBmKGIsIGMsIGQpICsgdyArIGsgKyBDWUNMSUNfTEVGVF9TSElGVChhLCA1KSkgJiAweGZmZmZmZmZmLCBcCisgICAgICBiID0gQ1lDTElDX0xFRlRfU0hJRlQoYiwgMzApICkKKworLy9Jbml0aWF0ZSBTSEEtMSBDb250ZXh0IHNhdGlzZmllZCBpbiBSRkMgMzE3NAorVk9JRCBTSEFJbml0KFNIQV9DVFggKnBDdHgpCit7CisgICAgcEN0eC0+QnVmWzBdPTB4Njc0NTIzMDE7CisgICAgcEN0eC0+QnVmWzFdPTB4ZWZjZGFiODk7CisgICAgcEN0eC0+QnVmWzJdPTB4OThiYWRjZmU7CisgICAgcEN0eC0+QnVmWzNdPTB4MTAzMjU0NzY7CisgICAgcEN0eC0+QnVmWzRdPTB4YzNkMmUxZjA7CisKKyAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzBdPTA7CisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXT0wOworfQorCisvKgorICogIEZ1bmN0aW9uIERlc2NyaXB0aW9uOgorICogICAgICBVcGRhdGUgU0hBLTEgQ29udGV4dCwgYWxsb3cgb2YgYW4gYXJyYXJ5IG9mIG9jdGV0cyBhcyB0aGUgbmV4dAorICogICAgICBwb3J0aW9uIG9mIHRoZSBtZXNzYWdlCisgKgorICogIEFyZ3VtZW50czoKKyAqICAgICAgcEN0eAkJUG9pbnRlcgl0byBTSEEtMSBjb250ZXh0CisgKiAJICAgIHBEYXRhICAgICAgIFBvaW50ZXIgdG8gaW5wdXQgZGF0YQorICogICAgICBMZW5JbkJ5dGVzICBUaGUgbGVuZ3RoIG9mIGlucHV0IGRhdGEgKHVuaXQ6IGJ5dGUpCisgKgorICogIFJldHVybiBWYWx1ZToKKyAqICAgICAgZXJyb3IgICAgICAgaW5kaWNhdGUgbW9yZSB0aGFuIHBvdygyLDY0KSBiaXRzIG9mIGRhdGEKKyAqCisgKiAgTm90ZToKKyAqICAgICAgQ2FsbGVkIGFmdGVyIFNIQUluaXQgb3IgU0hBVXBkYXRlKGl0c2VsZikKKyAqLworVUNIQVIgU0hBVXBkYXRlKFNIQV9DVFggKnBDdHgsIFVDSEFSICpwRGF0YSwgVUlOVDMyIExlbkluQnl0ZXMpCit7CisgICAgVUlOVDMyIFRmVGltZXM7CisgICAgVUlOVDMyIHRlbXAxLHRlbXAyOworCXVuc2lnbmVkIGludCBpOworCVVDSEFSIGVycj0xOworCisgICAgdGVtcDEgPSBwQ3R4LT5MZW5JbkJpdENvdW50WzBdOworICAgIHRlbXAyID0gcEN0eC0+TGVuSW5CaXRDb3VudFsxXTsKKworICAgIHBDdHgtPkxlbkluQml0Q291bnRbMF0gPSAoVUlOVDMyKSAocEN0eC0+TGVuSW5CaXRDb3VudFswXSArIChMZW5JbkJ5dGVzIDw8IDMpKTsKKyAgICBpZiAocEN0eC0+TGVuSW5CaXRDb3VudFswXSA8IHRlbXAxKQorICAgICAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzFdKys7ICAgLy9jYXJyeSBpbgorCisKKyAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzFdID0gKFVJTlQzMikgKHBDdHgtPkxlbkluQml0Q291bnRbMV0gKyhMZW5JbkJ5dGVzID4+IDI5KSk7CisgICAgaWYgKHBDdHgtPkxlbkluQml0Q291bnRbMV0gPCB0ZW1wMikKKyAgICAgICAgcmV0dXJuIChlcnIpOyAgIC8vY2hlY2sgdG90YWwgbGVuZ3RoIG9mIG9yaWdpbmFsIGRhdGEKKworCisgICAgLy8gbW9kIDY0IGJ5dGVzCisgICAgdGVtcDEgPSAodGVtcDEgPj4gMykgJiAweDNmOworCisgICAgLy8gcHJvY2VzcyBsYWNrcyBvZiA2NC1ieXRlIGRhdGEKKyAgICBpZiAodGVtcDEpCisgICAgeworICAgICAgICBVQ0hBUiAqcEFkcyA9IChVQ0hBUiAqKSBwQ3R4LT5JbnB1dCArIHRlbXAxOworCisgICAgICAgIGlmICgodGVtcDErTGVuSW5CeXRlcykgPCA2NCkKKyAgICAgICAgeworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkcywgKFVDSEFSICopcERhdGEsIExlbkluQnl0ZXMpOworICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgfQorCisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZHMsIChVQ0hBUiAqKXBEYXRhLCA2NC10ZW1wMSk7CisgICAgICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKXBDdHgtPklucHV0LCAxNik7CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyA2NCwgMTYpOworICAgICAgICBTSEFUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworCisgICAgICAgIHBEYXRhICs9IDY0LXRlbXAxOworICAgICAgICBMZW5JbkJ5dGVzIC09IDY0LXRlbXAxOworICAgIH0gLy8gZW5kIG9mIGlmICh0ZW1wMSkKKworCisgICAgVGZUaW1lcyA9IChMZW5JbkJ5dGVzID4+IDYpOworCisgICAgZm9yIChpPVRmVGltZXM7IGk+MDsgaS0tKQorICAgIHsKKyAgICAgICAgTmRpc01vdmVNZW1vcnkocEN0eC0+SW5wdXQsIChVQ0hBUiAqKXBEYXRhLCA2NCk7CisgICAgICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKXBDdHgtPklucHV0LCAxNik7CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyA2NCwgMTYpOworICAgICAgICBTSEFUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworICAgICAgICBwRGF0YSArPSA2NDsKKyAgICAgICAgTGVuSW5CeXRlcyAtPSA2NDsKKyAgICB9IC8vIGVuZCBvZiBmb3IKKworICAgIC8vIGJ1ZmZlcmluZyBsYWNrcyBvZiA2NC1ieXRlIGRhdGEKKyAgICBpZihMZW5JbkJ5dGVzKQorICAgICAgICBOZGlzTW92ZU1lbW9yeShwQ3R4LT5JbnB1dCwgKFVDSEFSICopcERhdGEsIExlbkluQnl0ZXMpOworCisJcmV0dXJuICgwKTsKKworfQorCisvLyBBcHBlbmQgcGFkZGluZyBiaXRzIGFuZCBsZW5ndGggb2Ygb3JpZ2luYWwgbWVzc2FnZSBpbiB0aGUgdGFpbAorLy8gVGhlIG1lc3NhZ2UgZGlnZXN0IGhhcyB0byBiZSBjb21wbGV0ZWQgaW4gdGhlIGVuZAorVk9JRCBTSEFGaW5hbChTSEFfQ1RYICpwQ3R4LCBVQ0hBUiBEaWdlc3RbMjBdKQoreworICAgIFVDSEFSIFJlbWFpbmRlcjsKKyAgICBVQ0hBUiBQYWRMZW5JbkJ5dGVzOworICAgIFVDSEFSICpwQXBwZW5kPTA7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBSZW1haW5kZXIgPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzBdID4+IDMpICYgMHgzZik7CisKKyAgICBwQXBwZW5kID0gKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXI7CisKKyAgICBQYWRMZW5JbkJ5dGVzID0gKFJlbWFpbmRlciA8IDU2KSA/ICg1Ni1SZW1haW5kZXIpIDogKDEyMC1SZW1haW5kZXIpOworCisgICAgLy8gcGFkZGluZyBiaXRzIHdpdGhvdXQgY3Jvc3NpbmcgYmxvY2soNjQtYnl0ZSBiYXNlZCkgYm91bmRhcnkKKyAgICBpZiAoUmVtYWluZGVyIDwgNTYpCisgICAgeworICAgICAgICAqcEFwcGVuZCA9IDB4ODA7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLS07CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXIrMSwgUGFkTGVuSW5CeXRlcyk7CisKKwkJLy8gYWRkIGRhdGEtbGVuZ3RoIGZpZWxkLCBmcm9tIGhpZ2ggdG8gbG93CisgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAJcEN0eC0+SW5wdXRbNTYraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzFdID4+ICgoMy1pKSA8PCAzKSkgJiAweGZmKTsKKyAgICAgICAgCXBDdHgtPklucHV0WzYwK2ldID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFswXSA+PiAoKDMtaSkgPDwgMykpICYgMHhmZik7CisgICAgICAJfQorCisgICAgICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKXBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgNjQsIDE0KTsKKyAgICAgICAgU0hBVHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKyAgICB9IC8vIGVuZCBvZiBpZgorCisgICAgLy8gcGFkZGluZyBiaXRzIHdpdGggY3Jvc3NpbmcgYmxvY2soNjQtYnl0ZSBiYXNlZCkgYm91bmRhcnkKKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyB0aGUgZmlyc3QgYmxvY2sgPT09CisgICAgICAgICpwQXBwZW5kID0gMHg4MDsKKyAgICAgICAgUGFkTGVuSW5CeXRlcyAtLTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIFJlbWFpbmRlcisxLCAoNjQtUmVtYWluZGVyLTEpKTsKKyAgICAgICAgUGFkTGVuSW5CeXRlcyAtPSAoNjQgLSBSZW1haW5kZXIgLSAxKTsKKworICAgICAgICBieXRlUmV2ZXJzZSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgMTYpOworICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIDY0LCAxNik7CisgICAgICAgIFNIQVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisKKworICAgICAgICAvLyB0aGUgc2Vjb25kIGJsb2NrID09PQorICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgUGFkTGVuSW5CeXRlcyk7CisKKwkJLy8gYWRkIGRhdGEtbGVuZ3RoIGZpZWxkCisJCWZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAJcEN0eC0+SW5wdXRbNTYraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzFdID4+ICgoMy1pKSA8PCAzKSkgJiAweGZmKTsKKyAgICAgICAgCXBDdHgtPklucHV0WzYwK2ldID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFswXSA+PiAoKDMtaSkgPDwgMykpICYgMHhmZik7CisgICAgICAJfQorCisgICAgICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKXBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgNjQsIDE2KTsKKyAgICAgICAgU0hBVHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKyAgICB9IC8vIGVuZCBvZiBlbHNlCisKKworICAgIC8vT3V0cHV0LCBieXRlcmV2ZXJzZQorICAgIGZvciAoaT0wOyBpPDIwOyBpKyspCisgICAgeworICAgICAgICBEaWdlc3QgW2ldID0gKFVDSEFSKShwQ3R4LT5CdWZbaT4+Ml0gPj4gOCooMy0oaSAmIDB4MykpKTsKKyAgICB9CisKKyAgICBOZGlzWmVyb01lbW9yeShwQ3R4LCBzaXplb2YocEN0eCkpOyAvLyBtZW1vcnkgZnJlZQorfQorCisKKy8vIFRoZSBjZW50cmFsIGFsZ29yaXRobSBvZiBTSEEtMSwgY29uc2lzdHMgb2YgZm91ciByb3VuZHMgYW5kCisvLyB0d2VudHkgc3RlcHMgcGVyIHJvdW5kCitWT0lEIFNIQVRyYW5zZm9ybShVSU5UMzIgQnVmWzVdLCBVSU5UMzIgTWVzWzIwXSkKK3sKKyAgICBVSU5UMzIgUmVnWzVdLFRlbXA7CisJdW5zaWduZWQgaW50IGk7CisgICAgVUlOVDMyIFdbODBdOworCisgICAgc3RhdGljIFVJTlQzMiBTSEExVGFibGVbNF0gPSB7IDB4NWE4Mjc5OTksIDB4NmVkOWViYTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNiB9OworCisgICAgUmVnWzBdPUJ1ZlswXTsKKwlSZWdbMV09QnVmWzFdOworCVJlZ1syXT1CdWZbMl07CisJUmVnWzNdPUJ1ZlszXTsKKwlSZWdbNF09QnVmWzRdOworCisgICAgLy90aGUgZmlyc3Qgb2N0ZXQgb2YgYSB3b3JkIGlzIHN0b3JlZCBpbiB0aGUgMHRoIGVsZW1lbnQsIGJ5dGVyZXZlcnNlCisJZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICB7CisgICAgCVdbaV0gID0gKE1lc1tpXSA+PiAyNCkgJiAweGZmOworICAgICAgICBXW2ldIHw9IChNZXNbaV0gPj4gOCApICYgMHhmZjAwOworICAgICAgICBXW2ldIHw9IChNZXNbaV0gPDwgOCApICYgMHhmZjAwMDA7CisgICAgICAgIFdbaV0gfD0gKE1lc1tpXSA8PCAyNCkgJiAweGZmMDAwMDAwOworICAgIH0KKworCisgICAgZm9yCShpID0gMDsgaSA8IDY0OyBpKyspCisJICAgIFdbMTYraV0gPSBDWUNMSUNfTEVGVF9TSElGVChXW2ldIF4gV1syK2ldIF4gV1s4K2ldIF4gV1sxMytpXSwgMSk7CisKKworICAgIC8vIDgwIHN0ZXBzIGluIFNIQS0xIGFsZ29yaXRobQorICAgIGZvciAoaT0wOyBpPDgwOyBpKyspCisgICAgeworICAgICAgICBpZiAoaTwyMCkKKyAgICAgICAgICAgIFNIQTFTdGVwKFNIQTFfRjEsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgUmVnWzRdLAorICAgICAgICAgICAgICAgICAgICAgV1tpXSwgU0hBMVRhYmxlWzBdKTsKKworICAgICAgICBlbHNlIGlmIChpPj0yMCAmJiBpPDQwKQorICAgICAgICAgICAgU0hBMVN0ZXAoU0hBMV9GMiwgUmVnWzBdLCBSZWdbMV0sIFJlZ1syXSwgUmVnWzNdLCBSZWdbNF0sCisgICAgICAgICAgICAgICAgICAgICBXW2ldLCBTSEExVGFibGVbMV0pOworCisJCWVsc2UgaWYgKGk+PTQwICYmIGk8NjApCisgICAgICAgICAgICBTSEExU3RlcChTSEExX0YzLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIFJlZ1s0XSwKKyAgICAgICAgICAgICAgICAgICAgICBXW2ldLCBTSEExVGFibGVbMl0pOworCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFNIQTFTdGVwKFNIQTFfRjIsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgUmVnWzRdLAorICAgICAgICAgICAgICAgICAgICAgV1tpXSwgU0hBMVRhYmxlWzNdKTsKKworCisgICAgICAgLy8gb25lLXdvcmQgcmlnaHQgc2hpZnQKKwkJVGVtcCAgID0gUmVnWzRdOworICAgICAgICBSZWdbNF0gPSBSZWdbM107CisgICAgICAgIFJlZ1szXSA9IFJlZ1syXTsKKyAgICAgICAgUmVnWzJdID0gUmVnWzFdOworICAgICAgICBSZWdbMV0gPSBSZWdbMF07CisgICAgICAgIFJlZ1swXSA9IFRlbXA7CisKKyAgICB9IC8vIGVuZCBvZiBmb3ItbG9vcAorCisKKyAgICAvLyAodGVtcG9yYXJ5KW91dHB1dAorICAgIGZvciAoaT0wOyBpPDU7IGkrKykKKyAgICAgICAgQnVmW2ldICs9IFJlZ1tpXTsKKworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT0gIEFFUyBFbi9EZWNyeXB0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIGZvcndhcmQgUy1ib3ggKi8KK3N0YXRpYyB1aW50MzIgRlNiWzI1Nl0gPQoreworCTB4NjMsIDB4N0MsCTB4NzcsIDB4N0IsCTB4RjIsIDB4NkIsCTB4NkYsIDB4QzUsCisJMHgzMCwgMHgwMSwJMHg2NywgMHgyQiwJMHhGRSwgMHhENywJMHhBQiwgMHg3NiwKKwkweENBLCAweDgyLAkweEM5LCAweDdELAkweEZBLCAweDU5LAkweDQ3LCAweEYwLAorCTB4QUQsIDB4RDQsCTB4QTIsIDB4QUYsCTB4OUMsIDB4QTQsCTB4NzIsIDB4QzAsCisJMHhCNywgMHhGRCwJMHg5MywgMHgyNiwJMHgzNiwgMHgzRiwJMHhGNywgMHhDQywKKwkweDM0LCAweEE1LAkweEU1LCAweEYxLAkweDcxLCAweEQ4LAkweDMxLCAweDE1LAorCTB4MDQsIDB4QzcsCTB4MjMsIDB4QzMsCTB4MTgsIDB4OTYsCTB4MDUsIDB4OUEsCisJMHgwNywgMHgxMiwJMHg4MCwgMHhFMiwJMHhFQiwgMHgyNywJMHhCMiwgMHg3NSwKKwkweDA5LCAweDgzLAkweDJDLCAweDFBLAkweDFCLCAweDZFLAkweDVBLCAweEEwLAorCTB4NTIsIDB4M0IsCTB4RDYsIDB4QjMsCTB4MjksIDB4RTMsCTB4MkYsIDB4ODQsCisJMHg1MywgMHhEMSwJMHgwMCwgMHhFRCwJMHgyMCwgMHhGQywJMHhCMSwgMHg1QiwKKwkweDZBLCAweENCLAkweEJFLCAweDM5LAkweDRBLCAweDRDLAkweDU4LCAweENGLAorCTB4RDAsIDB4RUYsCTB4QUEsIDB4RkIsCTB4NDMsIDB4NEQsCTB4MzMsIDB4ODUsCisJMHg0NSwgMHhGOSwJMHgwMiwgMHg3RiwJMHg1MCwgMHgzQywJMHg5RiwgMHhBOCwKKwkweDUxLCAweEEzLAkweDQwLCAweDhGLAkweDkyLCAweDlELAkweDM4LCAweEY1LAorCTB4QkMsIDB4QjYsCTB4REEsIDB4MjEsCTB4MTAsIDB4RkYsCTB4RjMsIDB4RDIsCisJMHhDRCwgMHgwQywJMHgxMywgMHhFQywJMHg1RiwgMHg5NywJMHg0NCwgMHgxNywKKwkweEM0LCAweEE3LAkweDdFLCAweDNELAkweDY0LCAweDVELAkweDE5LCAweDczLAorCTB4NjAsIDB4ODEsCTB4NEYsIDB4REMsCTB4MjIsIDB4MkEsCTB4OTAsIDB4ODgsCisJMHg0NiwgMHhFRSwJMHhCOCwgMHgxNCwJMHhERSwgMHg1RSwJMHgwQiwgMHhEQiwKKwkweEUwLCAweDMyLAkweDNBLCAweDBBLAkweDQ5LCAweDA2LAkweDI0LCAweDVDLAorCTB4QzIsIDB4RDMsCTB4QUMsIDB4NjIsCTB4OTEsIDB4OTUsCTB4RTQsIDB4NzksCisJMHhFNywgMHhDOCwJMHgzNywgMHg2RCwJMHg4RCwgMHhENSwJMHg0RSwgMHhBOSwKKwkweDZDLCAweDU2LAkweEY0LCAweEVBLAkweDY1LCAweDdBLAkweEFFLCAweDA4LAorCTB4QkEsIDB4NzgsCTB4MjUsIDB4MkUsCTB4MUMsIDB4QTYsCTB4QjQsIDB4QzYsCisJMHhFOCwgMHhERCwJMHg3NCwgMHgxRiwJMHg0QiwgMHhCRCwJMHg4QiwgMHg4QSwKKwkweDcwLCAweDNFLAkweEI1LCAweDY2LAkweDQ4LCAweDAzLAkweEY2LCAweDBFLAorCTB4NjEsIDB4MzUsCTB4NTcsIDB4QjksCTB4ODYsIDB4QzEsCTB4MUQsIDB4OUUsCisJMHhFMSwgMHhGOCwJMHg5OCwgMHgxMSwJMHg2OSwgMHhEOSwJMHg4RSwgMHg5NCwKKwkweDlCLCAweDFFLAkweDg3LCAweEU5LAkweENFLCAweDU1LAkweDI4LCAweERGLAorCTB4OEMsIDB4QTEsCTB4ODksIDB4MEQsCTB4QkYsIDB4RTYsCTB4NDIsIDB4NjgsCisJMHg0MSwgMHg5OSwJMHgyRCwgMHgwRiwJMHhCMCwgMHg1NCwJMHhCQiwgMHgxNgorfTsKKworLyogZm9yd2FyZCB0YWJsZSAqLworI2RlZmluZQlGVCBcCitcCisJVihDNiw2Myw2MyxBNSksCVYoRjgsN0MsN0MsODQpLAlWKEVFLDc3LDc3LDk5KSwJVihGNiw3Qiw3Qiw4RCksCVwKKwlWKEZGLEYyLEYyLDBEKSwJVihENiw2Qiw2QixCRCksCVYoREUsNkYsNkYsQjEpLAlWKDkxLEM1LEM1LDU0KSwJXAorCVYoNjAsMzAsMzAsNTApLAlWKDAyLDAxLDAxLDAzKSwJVihDRSw2Nyw2NyxBOSksCVYoNTYsMkIsMkIsN0QpLAlcCisJVihFNyxGRSxGRSwxOSksCVYoQjUsRDcsRDcsNjIpLAlWKDRELEFCLEFCLEU2KSwJVihFQyw3Niw3Niw5QSksCVwKKwlWKDhGLENBLENBLDQ1KSwJVigxRiw4Miw4Miw5RCksCVYoODksQzksQzksNDApLAlWKEZBLDdELDdELDg3KSwJXAorCVYoRUYsRkEsRkEsMTUpLAlWKEIyLDU5LDU5LEVCKSwJVig4RSw0Nyw0NyxDOSksCVYoRkIsRjAsRjAsMEIpLAlcCisJVig0MSxBRCxBRCxFQyksCVYoQjMsRDQsRDQsNjcpLAlWKDVGLEEyLEEyLEZEKSwJVig0NSxBRixBRixFQSksCVwKKwlWKDIzLDlDLDlDLEJGKSwJVig1MyxBNCxBNCxGNyksCVYoRTQsNzIsNzIsOTYpLAlWKDlCLEMwLEMwLDVCKSwJXAorCVYoNzUsQjcsQjcsQzIpLAlWKEUxLEZELEZELDFDKSwJVigzRCw5Myw5MyxBRSksCVYoNEMsMjYsMjYsNkEpLAlcCisJVig2QywzNiwzNiw1QSksCVYoN0UsM0YsM0YsNDEpLAlWKEY1LEY3LEY3LDAyKSwJVig4MyxDQyxDQyw0RiksCVwKKwlWKDY4LDM0LDM0LDVDKSwJVig1MSxBNSxBNSxGNCksCVYoRDEsRTUsRTUsMzQpLAlWKEY5LEYxLEYxLDA4KSwJXAorCVYoRTIsNzEsNzEsOTMpLAlWKEFCLEQ4LEQ4LDczKSwJVig2MiwzMSwzMSw1MyksCVYoMkEsMTUsMTUsM0YpLAlcCisJVigwOCwwNCwwNCwwQyksCVYoOTUsQzcsQzcsNTIpLAlWKDQ2LDIzLDIzLDY1KSwJVig5RCxDMyxDMyw1RSksCVwKKwlWKDMwLDE4LDE4LDI4KSwJVigzNyw5Niw5NixBMSksCVYoMEEsMDUsMDUsMEYpLAlWKDJGLDlBLDlBLEI1KSwJXAorCVYoMEUsMDcsMDcsMDkpLAlWKDI0LDEyLDEyLDM2KSwJVigxQiw4MCw4MCw5QiksCVYoREYsRTIsRTIsM0QpLAlcCisJVihDRCxFQixFQiwyNiksCVYoNEUsMjcsMjcsNjkpLAlWKDdGLEIyLEIyLENEKSwJVihFQSw3NSw3NSw5RiksCVwKKwlWKDEyLDA5LDA5LDFCKSwJVigxRCw4Myw4Myw5RSksCVYoNTgsMkMsMkMsNzQpLAlWKDM0LDFBLDFBLDJFKSwJXAorCVYoMzYsMUIsMUIsMkQpLAlWKERDLDZFLDZFLEIyKSwJVihCNCw1QSw1QSxFRSksCVYoNUIsQTAsQTAsRkIpLAlcCisJVihBNCw1Miw1MixGNiksCVYoNzYsM0IsM0IsNEQpLAlWKEI3LEQ2LEQ2LDYxKSwJVig3RCxCMyxCMyxDRSksCVwKKwlWKDUyLDI5LDI5LDdCKSwJVihERCxFMyxFMywzRSksCVYoNUUsMkYsMkYsNzEpLAlWKDEzLDg0LDg0LDk3KSwJXAorCVYoQTYsNTMsNTMsRjUpLAlWKEI5LEQxLEQxLDY4KSwJVigwMCwwMCwwMCwwMCksCVYoQzEsRUQsRUQsMkMpLAlcCisJVig0MCwyMCwyMCw2MCksCVYoRTMsRkMsRkMsMUYpLAlWKDc5LEIxLEIxLEM4KSwJVihCNiw1Qiw1QixFRCksCVwKKwlWKEQ0LDZBLDZBLEJFKSwJVig4RCxDQixDQiw0NiksCVYoNjcsQkUsQkUsRDkpLAlWKDcyLDM5LDM5LDRCKSwJXAorCVYoOTQsNEEsNEEsREUpLAlWKDk4LDRDLDRDLEQ0KSwJVihCMCw1OCw1OCxFOCksCVYoODUsQ0YsQ0YsNEEpLAlcCisJVihCQixEMCxEMCw2QiksCVYoQzUsRUYsRUYsMkEpLAlWKDRGLEFBLEFBLEU1KSwJVihFRCxGQixGQiwxNiksCVwKKwlWKDg2LDQzLDQzLEM1KSwJVig5QSw0RCw0RCxENyksCVYoNjYsMzMsMzMsNTUpLAlWKDExLDg1LDg1LDk0KSwJXAorCVYoOEEsNDUsNDUsQ0YpLAlWKEU5LEY5LEY5LDEwKSwJVigwNCwwMiwwMiwwNiksCVYoRkUsN0YsN0YsODEpLAlcCisJVihBMCw1MCw1MCxGMCksCVYoNzgsM0MsM0MsNDQpLAlWKDI1LDlGLDlGLEJBKSwJVig0QixBOCxBOCxFMyksCVwKKwlWKEEyLDUxLDUxLEYzKSwJVig1RCxBMyxBMyxGRSksCVYoODAsNDAsNDAsQzApLAlWKDA1LDhGLDhGLDhBKSwJXAorCVYoM0YsOTIsOTIsQUQpLAlWKDIxLDlELDlELEJDKSwJVig3MCwzOCwzOCw0OCksCVYoRjEsRjUsRjUsMDQpLAlcCisJVig2MyxCQyxCQyxERiksCVYoNzcsQjYsQjYsQzEpLAlWKEFGLERBLERBLDc1KSwJVig0MiwyMSwyMSw2MyksCVwKKwlWKDIwLDEwLDEwLDMwKSwJVihFNSxGRixGRiwxQSksCVYoRkQsRjMsRjMsMEUpLAlWKEJGLEQyLEQyLDZEKSwJXAorCVYoODEsQ0QsQ0QsNEMpLAlWKDE4LDBDLDBDLDE0KSwJVigyNiwxMywxMywzNSksCVYoQzMsRUMsRUMsMkYpLAlcCisJVihCRSw1Riw1RixFMSksCVYoMzUsOTcsOTcsQTIpLAlWKDg4LDQ0LDQ0LENDKSwJVigyRSwxNywxNywzOSksCVwKKwlWKDkzLEM0LEM0LDU3KSwJVig1NSxBNyxBNyxGMiksCVYoRkMsN0UsN0UsODIpLAlWKDdBLDNELDNELDQ3KSwJXAorCVYoQzgsNjQsNjQsQUMpLAlWKEJBLDVELDVELEU3KSwJVigzMiwxOSwxOSwyQiksCVYoRTYsNzMsNzMsOTUpLAlcCisJVihDMCw2MCw2MCxBMCksCVYoMTksODEsODEsOTgpLAlWKDlFLDRGLDRGLEQxKSwJVihBMyxEQyxEQyw3RiksCVwKKwlWKDQ0LDIyLDIyLDY2KSwJVig1NCwyQSwyQSw3RSksCVYoM0IsOTAsOTAsQUIpLAlWKDBCLDg4LDg4LDgzKSwJXAorCVYoOEMsNDYsNDYsQ0EpLAlWKEM3LEVFLEVFLDI5KSwJVig2QixCOCxCOCxEMyksCVYoMjgsMTQsMTQsM0MpLAlcCisJVihBNyxERSxERSw3OSksCVYoQkMsNUUsNUUsRTIpLAlWKDE2LDBCLDBCLDFEKSwJVihBRCxEQixEQiw3NiksCVwKKwlWKERCLEUwLEUwLDNCKSwJVig2NCwzMiwzMiw1NiksCVYoNzQsM0EsM0EsNEUpLAlWKDE0LDBBLDBBLDFFKSwJXAorCVYoOTIsNDksNDksREIpLAlWKDBDLDA2LDA2LDBBKSwJVig0OCwyNCwyNCw2QyksCVYoQjgsNUMsNUMsRTQpLAlcCisJVig5RixDMixDMiw1RCksCVYoQkQsRDMsRDMsNkUpLAlWKDQzLEFDLEFDLEVGKSwJVihDNCw2Miw2MixBNiksCVwKKwlWKDM5LDkxLDkxLEE4KSwJVigzMSw5NSw5NSxBNCksCVYoRDMsRTQsRTQsMzcpLAlWKEYyLDc5LDc5LDhCKSwJXAorCVYoRDUsRTcsRTcsMzIpLAlWKDhCLEM4LEM4LDQzKSwJVig2RSwzNywzNyw1OSksCVYoREEsNkQsNkQsQjcpLAlcCisJVigwMSw4RCw4RCw4QyksCVYoQjEsRDUsRDUsNjQpLAlWKDlDLDRFLDRFLEQyKSwJVig0OSxBOSxBOSxFMCksCVwKKwlWKEQ4LDZDLDZDLEI0KSwJVihBQyw1Niw1NixGQSksCVYoRjMsRjQsRjQsMDcpLAlWKENGLEVBLEVBLDI1KSwJXAorCVYoQ0EsNjUsNjUsQUYpLAlWKEY0LDdBLDdBLDhFKSwJVig0NyxBRSxBRSxFOSksCVYoMTAsMDgsMDgsMTgpLAlcCisJVig2RixCQSxCQSxENSksCVYoRjAsNzgsNzgsODgpLAlWKDRBLDI1LDI1LDZGKSwJVig1QywyRSwyRSw3MiksCVwKKwlWKDM4LDFDLDFDLDI0KSwJVig1NyxBNixBNixGMSksCVYoNzMsQjQsQjQsQzcpLAlWKDk3LEM2LEM2LDUxKSwJXAorCVYoQ0IsRTgsRTgsMjMpLAlWKEExLERELERELDdDKSwJVihFOCw3NCw3NCw5QyksCVYoM0UsMUYsMUYsMjEpLAlcCisJVig5Niw0Qiw0QixERCksCVYoNjEsQkQsQkQsREMpLAlWKDBELDhCLDhCLDg2KSwJVigwRiw4QSw4QSw4NSksCVwKKwlWKEUwLDcwLDcwLDkwKSwJVig3QywzRSwzRSw0MiksCVYoNzEsQjUsQjUsQzQpLAlWKENDLDY2LDY2LEFBKSwJXAorCVYoOTAsNDgsNDgsRDgpLAlWKDA2LDAzLDAzLDA1KSwJVihGNyxGNixGNiwwMSksCVYoMUMsMEUsMEUsMTIpLAlcCisJVihDMiw2MSw2MSxBMyksCVYoNkEsMzUsMzUsNUYpLAlWKEFFLDU3LDU3LEY5KSwJVig2OSxCOSxCOSxEMCksCVwKKwlWKDE3LDg2LDg2LDkxKSwJVig5OSxDMSxDMSw1OCksCVYoM0EsMUQsMUQsMjcpLAlWKDI3LDlFLDlFLEI5KSwJXAorCVYoRDksRTEsRTEsMzgpLAlWKEVCLEY4LEY4LDEzKSwJVigyQiw5OCw5OCxCMyksCVYoMjIsMTEsMTEsMzMpLAlcCisJVihEMiw2OSw2OSxCQiksCVYoQTksRDksRDksNzApLAlWKDA3LDhFLDhFLDg5KSwJVigzMyw5NCw5NCxBNyksCVwKKwlWKDJELDlCLDlCLEI2KSwJVigzQywxRSwxRSwyMiksCVYoMTUsODcsODcsOTIpLAlWKEM5LEU5LEU5LDIwKSwJXAorCVYoODcsQ0UsQ0UsNDkpLAlWKEFBLDU1LDU1LEZGKSwJVig1MCwyOCwyOCw3OCksCVYoQTUsREYsREYsN0EpLAlcCisJVigwMyw4Qyw4Qyw4RiksCVYoNTksQTEsQTEsRjgpLAlWKDA5LDg5LDg5LDgwKSwJVigxQSwwRCwwRCwxNyksCVwKKwlWKDY1LEJGLEJGLERBKSwJVihENyxFNixFNiwzMSksCVYoODQsNDIsNDIsQzYpLAlWKEQwLDY4LDY4LEI4KSwJXAorCVYoODIsNDEsNDEsQzMpLAlWKDI5LDk5LDk5LEIwKSwJVig1QSwyRCwyRCw3NyksCVYoMUUsMEYsMEYsMTEpLAlcCisJVig3QixCMCxCMCxDQiksCVYoQTgsNTQsNTQsRkMpLAlWKDZELEJCLEJCLEQ2KSwJVigyQywxNiwxNiwzQSkKKworI2RlZmluZQlWKGEsYixjLGQpIDB4IyNhIyNiIyNjIyNkCitzdGF0aWMgdWludDMyIEZUMFsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZQlWKGEsYixjLGQpIDB4IyNkIyNhIyNiIyNjCitzdGF0aWMgdWludDMyIEZUMVsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZQlWKGEsYixjLGQpIDB4IyNjIyNkIyNhIyNiCitzdGF0aWMgdWludDMyIEZUMlsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZQlWKGEsYixjLGQpIDB4IyNiIyNjIyNkIyNhCitzdGF0aWMgdWludDMyIEZUM1syNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI3VuZGVmIEZUCisKKy8qIHJldmVyc2UgUy1ib3ggKi8KKworc3RhdGljIHVpbnQzMiBSU2JbMjU2XSA9Cit7CisJMHg1MiwgMHgwOSwJMHg2QSwgMHhENSwJMHgzMCwgMHgzNiwJMHhBNSwgMHgzOCwKKwkweEJGLCAweDQwLAkweEEzLCAweDlFLAkweDgxLCAweEYzLAkweEQ3LCAweEZCLAorCTB4N0MsIDB4RTMsCTB4MzksIDB4ODIsCTB4OUIsIDB4MkYsCTB4RkYsIDB4ODcsCisJMHgzNCwgMHg4RSwJMHg0MywgMHg0NCwJMHhDNCwgMHhERSwJMHhFOSwgMHhDQiwKKwkweDU0LCAweDdCLAkweDk0LCAweDMyLAkweEE2LCAweEMyLAkweDIzLCAweDNELAorCTB4RUUsIDB4NEMsCTB4OTUsIDB4MEIsCTB4NDIsIDB4RkEsCTB4QzMsIDB4NEUsCisJMHgwOCwgMHgyRSwJMHhBMSwgMHg2NiwJMHgyOCwgMHhEOSwJMHgyNCwgMHhCMiwKKwkweDc2LCAweDVCLAkweEEyLCAweDQ5LAkweDZELCAweDhCLAkweEQxLCAweDI1LAorCTB4NzIsIDB4RjgsCTB4RjYsIDB4NjQsCTB4ODYsIDB4NjgsCTB4OTgsIDB4MTYsCisJMHhENCwgMHhBNCwJMHg1QywgMHhDQywJMHg1RCwgMHg2NSwJMHhCNiwgMHg5MiwKKwkweDZDLCAweDcwLAkweDQ4LCAweDUwLAkweEZELCAweEVELAkweEI5LCAweERBLAorCTB4NUUsIDB4MTUsCTB4NDYsIDB4NTcsCTB4QTcsIDB4OEQsCTB4OUQsIDB4ODQsCisJMHg5MCwgMHhEOCwJMHhBQiwgMHgwMCwJMHg4QywgMHhCQywJMHhEMywgMHgwQSwKKwkweEY3LCAweEU0LAkweDU4LCAweDA1LAkweEI4LCAweEIzLAkweDQ1LCAweDA2LAorCTB4RDAsIDB4MkMsCTB4MUUsIDB4OEYsCTB4Q0EsIDB4M0YsCTB4MEYsIDB4MDIsCisJMHhDMSwgMHhBRiwJMHhCRCwgMHgwMywJMHgwMSwgMHgxMywJMHg4QSwgMHg2QiwKKwkweDNBLCAweDkxLAkweDExLCAweDQxLAkweDRGLCAweDY3LAkweERDLCAweEVBLAorCTB4OTcsIDB4RjIsCTB4Q0YsIDB4Q0UsCTB4RjAsIDB4QjQsCTB4RTYsIDB4NzMsCisJMHg5NiwgMHhBQywJMHg3NCwgMHgyMiwJMHhFNywgMHhBRCwJMHgzNSwgMHg4NSwKKwkweEUyLCAweEY5LAkweDM3LCAweEU4LAkweDFDLCAweDc1LAkweERGLCAweDZFLAorCTB4NDcsIDB4RjEsCTB4MUEsIDB4NzEsCTB4MUQsIDB4MjksCTB4QzUsIDB4ODksCisJMHg2RiwgMHhCNywJMHg2MiwgMHgwRSwJMHhBQSwgMHgxOCwJMHhCRSwgMHgxQiwKKwkweEZDLCAweDU2LAkweDNFLCAweDRCLAkweEM2LCAweEQyLAkweDc5LCAweDIwLAorCTB4OUEsIDB4REIsCTB4QzAsIDB4RkUsCTB4NzgsIDB4Q0QsCTB4NUEsIDB4RjQsCisJMHgxRiwgMHhERCwJMHhBOCwgMHgzMywJMHg4OCwgMHgwNywJMHhDNywgMHgzMSwKKwkweEIxLCAweDEyLAkweDEwLCAweDU5LAkweDI3LCAweDgwLAkweEVDLCAweDVGLAorCTB4NjAsIDB4NTEsCTB4N0YsIDB4QTksCTB4MTksIDB4QjUsCTB4NEEsIDB4MEQsCisJMHgyRCwgMHhFNSwJMHg3QSwgMHg5RiwJMHg5MywgMHhDOSwJMHg5QywgMHhFRiwKKwkweEEwLCAweEUwLAkweDNCLCAweDRELAkweEFFLCAweDJBLAkweEY1LCAweEIwLAorCTB4QzgsIDB4RUIsCTB4QkIsIDB4M0MsCTB4ODMsIDB4NTMsCTB4OTksIDB4NjEsCisJMHgxNywgMHgyQiwJMHgwNCwgMHg3RSwJMHhCQSwgMHg3NywJMHhENiwgMHgyNiwKKwkweEUxLCAweDY5LAkweDE0LCAweDYzLAkweDU1LCAweDIxLAkweDBDLCAweDdECit9OworCisvKiByZXZlcnNlIHRhYmxlICovCisKKyNkZWZpbmUJUlQgXAorXAorCVYoNTEsRjQsQTcsNTApLAlWKDdFLDQxLDY1LDUzKSwJVigxQSwxNyxBNCxDMyksCVYoM0EsMjcsNUUsOTYpLAlcCisJVigzQixBQiw2QixDQiksCVYoMUYsOUQsNDUsRjEpLAlWKEFDLEZBLDU4LEFCKSwJVig0QixFMywwMyw5MyksCVwKKwlWKDIwLDMwLEZBLDU1KSwJVihBRCw3Niw2RCxGNiksCVYoODgsQ0MsNzYsOTEpLAlWKEY1LDAyLDRDLDI1KSwJXAorCVYoNEYsRTUsRDcsRkMpLAlWKEM1LDJBLENCLEQ3KSwJVigyNiwzNSw0NCw4MCksCVYoQjUsNjIsQTMsOEYpLAlcCisJVihERSxCMSw1QSw0OSksCVYoMjUsQkEsMUIsNjcpLAlWKDQ1LEVBLDBFLDk4KSwJVig1RCxGRSxDMCxFMSksCVwKKwlWKEMzLDJGLDc1LDAyKSwJVig4MSw0QyxGMCwxMiksCVYoOEQsNDYsOTcsQTMpLAlWKDZCLEQzLEY5LEM2KSwJXAorCVYoMDMsOEYsNUYsRTcpLAlWKDE1LDkyLDlDLDk1KSwJVihCRiw2RCw3QSxFQiksCVYoOTUsNTIsNTksREEpLAlcCisJVihENCxCRSw4MywyRCksCVYoNTgsNzQsMjEsRDMpLAlWKDQ5LEUwLDY5LDI5KSwJVig4RSxDOSxDOCw0NCksCVwKKwlWKDc1LEMyLDg5LDZBKSwJVihGNCw4RSw3OSw3OCksCVYoOTksNTgsM0UsNkIpLAlWKDI3LEI5LDcxLEREKSwJXAorCVYoQkUsRTEsNEYsQjYpLAlWKEYwLDg4LEFELDE3KSwJVihDOSwyMCxBQyw2NiksCVYoN0QsQ0UsM0EsQjQpLAlcCisJVig2MyxERiw0QSwxOCksCVYoRTUsMUEsMzEsODIpLAlWKDk3LDUxLDMzLDYwKSwJVig2Miw1Myw3Riw0NSksCVwKKwlWKEIxLDY0LDc3LEUwKSwJVihCQiw2QixBRSw4NCksCVYoRkUsODEsQTAsMUMpLAlWKEY5LDA4LDJCLDk0KSwJXAorCVYoNzAsNDgsNjgsNTgpLAlWKDhGLDQ1LEZELDE5KSwJVig5NCxERSw2Qyw4NyksCVYoNTIsN0IsRjgsQjcpLAlcCisJVihBQiw3MyxEMywyMyksCVYoNzIsNEIsMDIsRTIpLAlWKEUzLDFGLDhGLDU3KSwJVig2Niw1NSxBQiwyQSksCVwKKwlWKEIyLEVCLDI4LDA3KSwJVigyRixCNSxDMiwwMyksCVYoODYsQzUsN0IsOUEpLAlWKEQzLDM3LDA4LEE1KSwJXAorCVYoMzAsMjgsODcsRjIpLAlWKDIzLEJGLEE1LEIyKSwJVigwMiwwMyw2QSxCQSksCVYoRUQsMTYsODIsNUMpLAlcCisJVig4QSxDRiwxQywyQiksCVYoQTcsNzksQjQsOTIpLAlWKEYzLDA3LEYyLEYwKSwJVig0RSw2OSxFMixBMSksCVwKKwlWKDY1LERBLEY0LENEKSwJVigwNiwwNSxCRSxENSksCVYoRDEsMzQsNjIsMUYpLAlWKEM0LEE2LEZFLDhBKSwJXAorCVYoMzQsMkUsNTMsOUQpLAlWKEEyLEYzLDU1LEEwKSwJVigwNSw4QSxFMSwzMiksCVYoQTQsRjYsRUIsNzUpLAlcCisJVigwQiw4MyxFQywzOSksCVYoNDAsNjAsRUYsQUEpLAlWKDVFLDcxLDlGLDA2KSwJVihCRCw2RSwxMCw1MSksCVwKKwlWKDNFLDIxLDhBLEY5KSwJVig5NixERCwwNiwzRCksCVYoREQsM0UsMDUsQUUpLAlWKDRELEU2LEJELDQ2KSwJXAorCVYoOTEsNTQsOEQsQjUpLAlWKDcxLEM0LDVELDA1KSwJVigwNCwwNixENCw2RiksCVYoNjAsNTAsMTUsRkYpLAlcCisJVigxOSw5OCxGQiwyNCksCVYoRDYsQkQsRTksOTcpLAlWKDg5LDQwLDQzLENDKSwJVig2NyxEOSw5RSw3NyksCVwKKwlWKEIwLEU4LDQyLEJEKSwJVigwNyw4OSw4Qiw4OCksCVYoRTcsMTksNUIsMzgpLAlWKDc5LEM4LEVFLERCKSwJXAorCVYoQTEsN0MsMEEsNDcpLAlWKDdDLDQyLDBGLEU5KSwJVihGOCw4NCwxRSxDOSksCVYoMDAsMDAsMDAsMDApLAlcCisJVigwOSw4MCw4Niw4MyksCVYoMzIsMkIsRUQsNDgpLAlWKDFFLDExLDcwLEFDKSwJVig2Qyw1QSw3Miw0RSksCVwKKwlWKEZELDBFLEZGLEZCKSwJVigwRiw4NSwzOCw1NiksCVYoM0QsQUUsRDUsMUUpLAlWKDM2LDJELDM5LDI3KSwJXAorCVYoMEEsMEYsRDksNjQpLAlWKDY4LDVDLEE2LDIxKSwJVig5Qiw1Qiw1NCxEMSksCVYoMjQsMzYsMkUsM0EpLAlcCisJVigwQywwQSw2NyxCMSksCVYoOTMsNTcsRTcsMEYpLAlWKEI0LEVFLDk2LEQyKSwJVigxQiw5Qiw5MSw5RSksCVwKKwlWKDgwLEMwLEM1LDRGKSwJVig2MSxEQywyMCxBMiksCVYoNUEsNzcsNEIsNjkpLAlWKDFDLDEyLDFBLDE2KSwJXAorCVYoRTIsOTMsQkEsMEEpLAlWKEMwLEEwLDJBLEU1KSwJVigzQywyMixFMCw0MyksCVYoMTIsMUIsMTcsMUQpLAlcCisJVigwRSwwOSwwRCwwQiksCVYoRjIsOEIsQzcsQUQpLAlWKDJELEI2LEE4LEI5KSwJVigxNCwxRSxBOSxDOCksCVwKKwlWKDU3LEYxLDE5LDg1KSwJVihBRiw3NSwwNyw0QyksCVYoRUUsOTksREQsQkIpLAlWKEEzLDdGLDYwLEZEKSwJXAorCVYoRjcsMDEsMjYsOUYpLAlWKDVDLDcyLEY1LEJDKSwJVig0NCw2NiwzQixDNSksCVYoNUIsRkIsN0UsMzQpLAlcCisJVig4Qiw0MywyOSw3NiksCVYoQ0IsMjMsQzYsREMpLAlWKEI2LEVELEZDLDY4KSwJVihCOCxFNCxGMSw2MyksCVwKKwlWKEQ3LDMxLERDLENBKSwJVig0Miw2Myw4NSwxMCksCVYoMTMsOTcsMjIsNDApLAlWKDg0LEM2LDExLDIwKSwJXAorCVYoODUsNEEsMjQsN0QpLAlWKEQyLEJCLDNELEY4KSwJVihBRSxGOSwzMiwxMSksCVYoQzcsMjksQTEsNkQpLAlcCisJVigxRCw5RSwyRiw0QiksCVYoREMsQjIsMzAsRjMpLAlWKDBELDg2LDUyLEVDKSwJVig3NyxDMSxFMyxEMCksCVwKKwlWKDJCLEIzLDE2LDZDKSwJVihBOSw3MCxCOSw5OSksCVYoMTEsOTQsNDgsRkEpLAlWKDQ3LEU5LDY0LDIyKSwJXAorCVYoQTgsRkMsOEMsQzQpLAlWKEEwLEYwLDNGLDFBKSwJVig1Niw3RCwyQyxEOCksCVYoMjIsMzMsOTAsRUYpLAlcCisJVig4Nyw0OSw0RSxDNyksCVYoRDksMzgsRDEsQzEpLAlWKDhDLENBLEEyLEZFKSwJVig5OCxENCwwQiwzNiksCVwKKwlWKEE2LEY1LDgxLENGKSwJVihBNSw3QSxERSwyOCksCVYoREEsQjcsOEUsMjYpLAlWKDNGLEFELEJGLEE0KSwJXAorCVYoMkMsM0EsOUQsRTQpLAlWKDUwLDc4LDkyLDBEKSwJVig2QSw1RixDQyw5QiksCVYoNTQsN0UsNDYsNjIpLAlcCisJVihGNiw4RCwxMyxDMiksCVYoOTAsRDgsQjgsRTgpLAlWKDJFLDM5LEY3LDVFKSwJVig4MixDMyxBRixGNSksCVwKKwlWKDlGLDVELDgwLEJFKSwJVig2OSxEMCw5Myw3QyksCVYoNkYsRDUsMkQsQTkpLAlWKENGLDI1LDEyLEIzKSwJXAorCVYoQzgsQUMsOTksM0IpLAlWKDEwLDE4LDdELEE3KSwJVihFOCw5Qyw2Myw2RSksCVYoREIsM0IsQkIsN0IpLAlcCisJVihDRCwyNiw3OCwwOSksCVYoNkUsNTksMTgsRjQpLAlWKEVDLDlBLEI3LDAxKSwJVig4Myw0Riw5QSxBOCksCVwKKwlWKEU2LDk1LDZFLDY1KSwJVihBQSxGRixFNiw3RSksCVYoMjEsQkMsQ0YsMDgpLAlWKEVGLDE1LEU4LEU2KSwJXAorCVYoQkEsRTcsOUIsRDkpLAlWKDRBLDZGLDM2LENFKSwJVihFQSw5RiwwOSxENCksCVYoMjksQjAsN0MsRDYpLAlcCisJVigzMSxBNCxCMixBRiksCVYoMkEsM0YsMjMsMzEpLAlWKEM2LEE1LDk0LDMwKSwJVigzNSxBMiw2NixDMCksCVwKKwlWKDc0LDRFLEJDLDM3KSwJVihGQyw4MixDQSxBNiksCVYoRTAsOTAsRDAsQjApLAlWKDMzLEE3LEQ4LDE1KSwJXAorCVYoRjEsMDQsOTgsNEEpLAlWKDQxLEVDLERBLEY3KSwJVig3RixDRCw1MCwwRSksCVYoMTcsOTEsRjYsMkYpLAlcCisJVig3Niw0RCxENiw4RCksCVYoNDMsRUYsQjAsNEQpLAlWKENDLEFBLDRELDU0KSwJVihFNCw5NiwwNCxERiksCVwKKwlWKDlFLEQxLEI1LEUzKSwJVig0Qyw2QSw4OCwxQiksCVYoQzEsMkMsMUYsQjgpLAlWKDQ2LDY1LDUxLDdGKSwJXAorCVYoOUQsNUUsRUEsMDQpLAlWKDAxLDhDLDM1LDVEKSwJVihGQSw4Nyw3NCw3MyksCVYoRkIsMEIsNDEsMkUpLAlcCisJVihCMyw2NywxRCw1QSksCVYoOTIsREIsRDIsNTIpLAlWKEU5LDEwLDU2LDMzKSwJVig2RCxENiw0NywxMyksCVwKKwlWKDlBLEQ3LDYxLDhDKSwJVigzNyxBMSwwQyw3QSksCVYoNTksRjgsMTQsOEUpLAlWKEVCLDEzLDNDLDg5KSwJXAorCVYoQ0UsQTksMjcsRUUpLAlWKEI3LDYxLEM5LDM1KSwJVihFMSwxQyxFNSxFRCksCVYoN0EsNDcsQjEsM0MpLAlcCisJVig5QyxEMixERiw1OSksCVYoNTUsRjIsNzMsM0YpLAlWKDE4LDE0LENFLDc5KSwJVig3MyxDNywzNyxCRiksCVwKKwlWKDUzLEY3LENELEVBKSwJVig1RixGRCxBQSw1QiksCVYoREYsM0QsNkYsMTQpLAlWKDc4LDQ0LERCLDg2KSwJXAorCVYoQ0EsQUYsRjMsODEpLAlWKEI5LDY4LEM0LDNFKSwJVigzOCwyNCwzNCwyQyksCVYoQzIsQTMsNDAsNUYpLAlcCisJVigxNiwxRCxDMyw3MiksCVYoQkMsRTIsMjUsMEMpLAlWKDI4LDNDLDQ5LDhCKSwJVihGRiwwRCw5NSw0MSksCVwKKwlWKDM5LEE4LDAxLDcxKSwJVigwOCwwQyxCMyxERSksCVYoRDgsQjQsRTQsOUMpLAlWKDY0LDU2LEMxLDkwKSwJXAorCVYoN0IsQ0IsODQsNjEpLAlWKEQ1LDMyLEI2LDcwKSwJVig0OCw2Qyw1Qyw3NCksCVYoRDAsQjgsNTcsNDIpCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYSMjYiMjYyMjZAorc3RhdGljIHVpbnQzMiBSVDBbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjZCMjYSMjYiMjYworc3RhdGljIHVpbnQzMiBSVDFbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYyMjZCMjYSMjYgorc3RhdGljIHVpbnQzMiBSVDJbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYiMjYyMjZCMjYQorc3RhdGljIHVpbnQzMiBSVDNbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyN1bmRlZiBSVAorCisvKiByb3VuZCBjb25zdGFudHMgKi8KKworc3RhdGljIHVpbnQzMiBSQ09OWzEwXSA9Cit7CisJMHgwMTAwMDAwMCwJMHgwMjAwMDAwMCwJMHgwNDAwMDAwMCwJMHgwODAwMDAwMCwKKwkweDEwMDAwMDAwLAkweDIwMDAwMDAwLAkweDQwMDAwMDAwLAkweDgwMDAwMDAwLAorCTB4MUIwMDAwMDAsCTB4MzYwMDAwMDAKK307CisKKy8qIGtleSBzY2hlZHVsZQl0YWJsZXMgKi8KKworc3RhdGljIGludCBLVF9pbml0ID0gMTsKKworc3RhdGljIHVpbnQzMiBLVDBbMjU2XTsKK3N0YXRpYyB1aW50MzIgS1QxWzI1Nl07CitzdGF0aWMgdWludDMyIEtUMlsyNTZdOworc3RhdGljIHVpbnQzMiBLVDNbMjU2XTsKKworLyogcGxhdGZvcm0taW5kZXBlbmRhbnQJMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uCW1hY3JvcyAqLworCisjZGVmaW5lCUdFVF9VSU5UMzIobixiLGkpCQkJCQkJXAorewkJCQkJCQkJCQkJCVwKKwkobikJPSAoCSh1aW50MzIpIChiKVsoaSkJXSA8PCAyNAkpCQlcCisJCXwgKAkodWludDMyKSAoYilbKGkpICsgMV0gPDwgMTYJKQkJXAorCQl8ICgJKHVpbnQzMikgKGIpWyhpKSArIDJdIDw8ICA4CSkJCVwKKwkJfCAoCSh1aW50MzIpIChiKVsoaSkgKyAzXQkJKTsJCVwKK30KKworI2RlZmluZQlQVVRfVUlOVDMyKG4sYixpKQkJCQkJCVwKK3sJCQkJCQkJCQkJCQlcCisJKGIpWyhpKQkgICBdID0gKHVpbnQ4KSAoIChuKSA+PgkyNCApOwkJXAorCShiKVsoaSkJKyAxXSA9ICh1aW50OCkgKCAobikgPj4JMTYgKTsJCVwKKwkoYilbKGkpCSsgMl0gPSAodWludDgpICggKG4pID4+CSA4ICk7CQlcCisJKGIpWyhpKQkrIDNdID0gKHVpbnQ4KSAoIChuKQkgICApOwkJXAorfQorCisvKiBBRVMga2V5IHNjaGVkdWxpbmcgcm91dGluZSAqLworCitpbnQJcnRtcF9hZXNfc2V0X2tleSggYWVzX2NvbnRleHQgKmN0eCwgdWludDggKmtleSwgaW50IG5iaXRzICkKK3sKKwlpbnQJaTsKKwl1aW50MzIgKlJLLAkqU0s7CisKKwlzd2l0Y2goCW5iaXRzICkKKwl7CisJCWNhc2UgMTI4OiBjdHgtPm5yID0JMTA7CWJyZWFrOworCQljYXNlIDE5MjogY3R4LT5uciA9CTEyOwlicmVhazsKKwkJY2FzZSAyNTY6IGN0eC0+bnIgPQkxNDsJYnJlYWs7CisJCWRlZmF1bHQJOiByZXR1cm4oIDEJKTsKKwl9CisKKwlSSyA9IGN0eC0+ZXJrOworCisJZm9yKCBpID0gMDsJaSA8CShuYml0cyA+PiA1KTsgaSsrICkKKwl7CisJCUdFVF9VSU5UMzIoCVJLW2ldLCBrZXksCWkgKgk0ICk7CisJfQorCisJLyogc2V0dXAgZW5jcnlwdGlvbglyb3VuZCBrZXlzICovCisKKwlzd2l0Y2goCW5iaXRzICkKKwl7CisJY2FzZSAxMjg6CisKKwkJZm9yKCBpID0gMDsJaSA8CTEwOwlpKyssIFJLCSs9IDQgKQorCQl7CisJCQlSS1s0XSAgPSBSS1swXSBeIFJDT05baV0gXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1szXSA+PiAxNiApIF0gPDwJMjQgKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzNdID4+ICA4ICkgXSA8PAkxNiApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbM10JCSApIF0gPDwJIDggKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzNdID4+IDI0ICkgXQkgICApOworCisJCQlSS1s1XSAgPSBSS1sxXSBeIFJLWzRdOworCQkJUktbNl0gID0gUktbMl0gXiBSS1s1XTsKKwkJCVJLWzddICA9IFJLWzNdIF4gUktbNl07CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDE5MjoKKworCQlmb3IoIGkgPSAwOwlpIDwJODsgaSsrLAlSSyArPSA2CSkKKwkJeworCQkJUktbNl0gID0gUktbMF0gXiBSQ09OW2ldIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbNV0gPj4gMTYgKSBdIDw8CTI0ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1s1XSA+PiAgOCApIF0gPDwJMTYgKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzVdCQkgKSBdIDw8CSA4ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1s1XSA+PiAyNCApIF0JICAgKTsKKworCQkJUktbN10gID0gUktbMV0gXiBSS1s2XTsKKwkJCVJLWzhdICA9IFJLWzJdIF4gUktbN107CisJCQlSS1s5XSAgPSBSS1szXSBeIFJLWzhdOworCQkJUktbMTBdID0gUktbNF0gXiBSS1s5XTsKKwkJCVJLWzExXSA9IFJLWzVdIF4gUktbMTBdOworCQl9CisJCWJyZWFrOworCisJY2FzZSAyNTY6CisKKwkJZm9yKCBpID0gMDsJaSA8CTc7IGkrKywJUksgKz0gOAkpCisJCXsKKwkJCVJLWzhdICA9IFJLWzBdIF4gUkNPTltpXSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzddID4+IDE2ICkgXSA8PAkyNCApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbN10gPj4gIDggKSBdIDw8CTE2ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1s3XQkJICkgXSA8PAkgOCApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbN10gPj4gMjQgKSBdCSAgICk7CisKKwkJCVJLWzldICA9IFJLWzFdIF4gUktbOF07CisJCQlSS1sxMF0gPSBSS1syXSBeIFJLWzldOworCQkJUktbMTFdID0gUktbM10gXiBSS1sxMF07CisKKwkJCVJLWzEyXSA9IFJLWzRdIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbMTFdCT4+IDI0ICkJXSA8PCAyNAkpIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbMTFdCT4+IDE2ICkJXSA8PCAxNgkpIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbMTFdCT4+CTggKQldIDw8ICA4CSkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1sxMV0JCSAgKQldCQkpOworCisJCQlSS1sxM10gPSBSS1s1XSBeIFJLWzEyXTsKKwkJCVJLWzE0XSA9IFJLWzZdIF4gUktbMTNdOworCQkJUktbMTVdID0gUktbN10gXiBSS1sxNF07CisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogc2V0dXAgZGVjcnlwdGlvbglyb3VuZCBrZXlzICovCisKKwlpZigJS1RfaW5pdAkpCisJeworCQlmb3IoIGkgPSAwOwlpIDwJMjU2OyBpKysgKQorCQl7CisJCQlLVDBbaV0gPSBSVDBbIEZTYltpXSBdOworCQkJS1QxW2ldID0gUlQxWyBGU2JbaV0gXTsKKwkJCUtUMltpXSA9IFJUMlsgRlNiW2ldIF07CisJCQlLVDNbaV0gPSBSVDNbIEZTYltpXSBdOworCQl9CisKKwkJS1RfaW5pdAk9IDA7CisJfQorCisJU0sgPSBjdHgtPmRyazsKKworCSpTSysrID0JKlJLKys7CisJKlNLKysgPQkqUksrKzsKKwkqU0srKyA9CSpSSysrOworCSpTSysrID0JKlJLKys7CisKKwlmb3IoIGkgPSAxOwlpIDwJY3R4LT5ucjsgaSsrICkKKwl7CisJCVJLIC09IDg7CisKKwkJKlNLKysgPQlLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKwkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKwkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKwkJCQlLVDNbICh1aW50OCkgKCAqUksJCSApIF07IFJLKys7CisKKwkJKlNLKysgPQlLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKwkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKwkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKwkJCQlLVDNbICh1aW50OCkgKCAqUksJCSApIF07IFJLKys7CisKKwkJKlNLKysgPQlLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKwkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKwkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKwkJCQlLVDNbICh1aW50OCkgKCAqUksJCSApIF07IFJLKys7CisKKwkJKlNLKysgPQlLVDBbICh1aW50OCkgKCAqUksgPj4gMjQgKSBdIF4KKwkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4KKwkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4KKwkJCQlLVDNbICh1aW50OCkgKCAqUksJCSApIF07IFJLKys7CisJfQorCisJUksgLT0gODsKKworCSpTSysrID0JKlJLKys7CisJKlNLKysgPQkqUksrKzsKKwkqU0srKyA9CSpSSysrOworCSpTSysrID0JKlJLKys7CisKKwlyZXR1cm4oCTAgKTsKK30KKworLyogQUVTIDEyOC1iaXQgYmxvY2sgZW5jcnlwdGlvbglyb3V0aW5lCSovCisKK3ZvaWQgcnRtcF9hZXNfZW5jcnlwdChhZXNfY29udGV4dCAqY3R4LCB1aW50OCBpbnB1dFsxNl0sCXVpbnQ4IG91dHB1dFsxNl0gKQoreworCXVpbnQzMiAqUkssCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMzsKKworCVJLID0gY3R4LT5lcms7CisJR0VUX1VJTlQzMigJWDAsCWlucHV0LAkwICk7IFgwCV49IFJLWzBdOworCUdFVF9VSU5UMzIoCVgxLAlpbnB1dCwJNCApOyBYMQlePSBSS1sxXTsKKwlHRVRfVUlOVDMyKAlYMiwJaW5wdXQsCTggKTsgWDIJXj0gUktbMl07CisJR0VUX1VJTlQzMigJWDMsCWlucHV0LCAxMiApOyBYMwlePSBSS1szXTsKKworI2RlZmluZQlBRVNfRlJPVU5EKFgwLFgxLFgyLFgzLFkwLFkxLFkyLFkzKQkJXAorewkJCQkJCQkJCQkJCVwKKwlSSyArPSA0OwkJCQkJCQkJCVwKKwkJCQkJCQkJCQkJCVwKKwlYMCA9IFJLWzBdIF4gRlQwWyAodWludDgpICgJWTAgPj4gMjQgKSBdIF4JXAorCQkJCSBGVDFbICh1aW50OCkgKAlZMSA+PiAxNiApIF0gXglcCisJCQkJIEZUMlsgKHVpbnQ4KSAoCVkyID4+ICA4ICkgXSBeCVwKKwkJCQkgRlQzWyAodWludDgpICgJWTMJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMSA9IFJLWzFdIF4gRlQwWyAodWludDgpICgJWTEgPj4gMjQgKSBdIF4JXAorCQkJCSBGVDFbICh1aW50OCkgKAlZMiA+PiAxNiApIF0gXglcCisJCQkJIEZUMlsgKHVpbnQ4KSAoCVkzID4+ICA4ICkgXSBeCVwKKwkJCQkgRlQzWyAodWludDgpICgJWTAJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMiA9IFJLWzJdIF4gRlQwWyAodWludDgpICgJWTIgPj4gMjQgKSBdIF4JXAorCQkJCSBGVDFbICh1aW50OCkgKAlZMyA+PiAxNiApIF0gXglcCisJCQkJIEZUMlsgKHVpbnQ4KSAoCVkwID4+ICA4ICkgXSBeCVwKKwkJCQkgRlQzWyAodWludDgpICgJWTEJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMyA9IFJLWzNdIF4gRlQwWyAodWludDgpICgJWTMgPj4gMjQgKSBdIF4JXAorCQkJCSBGVDFbICh1aW50OCkgKAlZMCA+PiAxNiApIF0gXglcCisJCQkJIEZUMlsgKHVpbnQ4KSAoCVkxID4+ICA4ICkgXSBeCVwKKwkJCQkgRlQzWyAodWludDgpICgJWTIJCSApIF07CVwKK30KKworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgMSAqLworCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgMiAqLworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgMyAqLworCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgNCAqLworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgNSAqLworCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgNiAqLworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgNyAqLworCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgOCAqLworCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgOSAqLworCisJaWYoCWN0eC0+bnIJPiAxMCApCisJeworCQlBRVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJLyogcm91bmQgMTAJKi8KKwkJQUVTX0ZST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CS8qIHJvdW5kIDExCSovCisJfQorCisJaWYoCWN0eC0+bnIJPiAxMiApCisJeworCQlBRVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJLyogcm91bmQgMTIJKi8KKwkJQUVTX0ZST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CS8qIHJvdW5kIDEzCSovCisJfQorCisJLyogbGFzdAlyb3VuZCAqLworCisJUksgKz0gNDsKKworCVgwID0gUktbMF0gXiAoIEZTYlsJKHVpbnQ4KQkoIFkwID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMSA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTIgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkzCSAgICkgXQkJICk7CisKKwlYMSA9IFJLWzFdIF4gKCBGU2JbCSh1aW50OCkJKCBZMSA+PgkyNCApIF0gPDwgMjQgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTIgPj4JMTYgKSBdIDw8IDE2ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkzID4+CSA4ICkgXSA8PCAgOCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMAkgICApIF0JCSApOworCisJWDIgPSBSS1syXSBeICggRlNiWwkodWludDgpCSggWTIgPj4JMjQgKSBdIDw8IDI0ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkzID4+CTE2ICkgXSA8PCAxNiApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMCA+PgkgOCApIF0gPDwgIDggKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTEJICAgKSBdCQkgKTsKKworCVgzID0gUktbM10gXiAoIEZTYlsJKHVpbnQ4KQkoIFkzID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMCA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTEgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkyCSAgICkgXQkJICk7CisKKwlQVVRfVUlOVDMyKAlYMCwJb3V0cHV0LAkgMCApOworCVBVVF9VSU5UMzIoCVgxLAlvdXRwdXQsCSA0ICk7CisJUFVUX1VJTlQzMigJWDIsCW91dHB1dCwJIDggKTsKKwlQVVRfVUlOVDMyKAlYMywJb3V0cHV0LAkxMiApOworfQorCisvKiBBRVMgMTI4LWJpdCBibG9jayBkZWNyeXB0aW9uCXJvdXRpbmUJKi8KKwordm9pZCBydG1wX2Flc19kZWNyeXB0KCBhZXNfY29udGV4dCAqY3R4LAl1aW50OCBpbnB1dFsxNl0sIHVpbnQ4IG91dHB1dFsxNl0gKQoreworCXVpbnQzMiAqUkssCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMzsKKworCVJLID0gY3R4LT5kcms7CisKKwlHRVRfVUlOVDMyKAlYMCwJaW5wdXQsCTAgKTsgWDAJXj0gUktbMF07CisJR0VUX1VJTlQzMigJWDEsCWlucHV0LAk0ICk7IFgxCV49IFJLWzFdOworCUdFVF9VSU5UMzIoCVgyLAlpbnB1dCwJOCApOyBYMglePSBSS1syXTsKKwlHRVRfVUlOVDMyKAlYMywJaW5wdXQsIDEyICk7IFgzCV49IFJLWzNdOworCisjZGVmaW5lCUFFU19SUk9VTkQoWDAsWDEsWDIsWDMsWTAsWTEsWTIsWTMpCQlcCit7CQkJCQkJCQkJCQkJXAorCVJLICs9IDQ7CQkJCQkJCQkJXAorCQkJCQkJCQkJCQkJXAorCVgwID0gUktbMF0gXiBSVDBbICh1aW50OCkgKAlZMCA+PiAyNCApIF0gXglcCisJCQkJIFJUMVsgKHVpbnQ4KSAoCVkzID4+IDE2ICkgXSBeCVwKKwkJCQkgUlQyWyAodWludDgpICgJWTIgPj4gIDggKSBdIF4JXAorCQkJCSBSVDNbICh1aW50OCkgKAlZMQkJICkgXTsJXAorCQkJCQkJCQkJCQkJXAorCVgxID0gUktbMV0gXiBSVDBbICh1aW50OCkgKAlZMSA+PiAyNCApIF0gXglcCisJCQkJIFJUMVsgKHVpbnQ4KSAoCVkwID4+IDE2ICkgXSBeCVwKKwkJCQkgUlQyWyAodWludDgpICgJWTMgPj4gIDggKSBdIF4JXAorCQkJCSBSVDNbICh1aW50OCkgKAlZMgkJICkgXTsJXAorCQkJCQkJCQkJCQkJXAorCVgyID0gUktbMl0gXiBSVDBbICh1aW50OCkgKAlZMiA+PiAyNCApIF0gXglcCisJCQkJIFJUMVsgKHVpbnQ4KSAoCVkxID4+IDE2ICkgXSBeCVwKKwkJCQkgUlQyWyAodWludDgpICgJWTAgPj4gIDggKSBdIF4JXAorCQkJCSBSVDNbICh1aW50OCkgKAlZMwkJICkgXTsJXAorCQkJCQkJCQkJCQkJXAorCVgzID0gUktbM10gXiBSVDBbICh1aW50OCkgKAlZMyA+PiAyNCApIF0gXglcCisJCQkJIFJUMVsgKHVpbnQ4KSAoCVkyID4+IDE2ICkgXSBeCVwKKwkJCQkgUlQyWyAodWludDgpICgJWTEgPj4gIDggKSBdIF4JXAorCQkJCSBSVDNbICh1aW50OCkgKAlZMAkJICkgXTsJXAorfQorCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCAxICovCisJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCAyICovCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCAzICovCisJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCA0ICovCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCA1ICovCisJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCA2ICovCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCA3ICovCisJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCA4ICovCisJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiByb3VuZCA5ICovCisKKwlpZigJY3R4LT5ucgk+IDEwICkKKwl7CisJCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkvKiByb3VuZCAxMAkqLworCQlBRVNfUlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJLyogcm91bmQgMTEJKi8KKwl9CisKKwlpZigJY3R4LT5ucgk+IDEyICkKKwl7CisJCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkvKiByb3VuZCAxMgkqLworCQlBRVNfUlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJLyogcm91bmQgMTMJKi8KKwl9CisKKwkvKiBsYXN0CXJvdW5kICovCisKKwlSSyArPSA0OworCisJWDAgPSBSS1swXSBeICggUlNiWwkodWludDgpCSggWTAgPj4JMjQgKSBdIDw8IDI0ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkzID4+CTE2ICkgXSA8PCAxNiApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMiA+PgkgOCApIF0gPDwgIDggKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTEJICAgKSBdCQkgKTsKKworCVgxID0gUktbMV0gXiAoIFJTYlsJKHVpbnQ4KQkoIFkxID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMCA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTMgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkyCSAgICkgXQkJICk7CisKKwlYMiA9IFJLWzJdIF4gKCBSU2JbCSh1aW50OCkJKCBZMiA+PgkyNCApIF0gPDwgMjQgKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTEgPj4JMTYgKSBdIDw8IDE2ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkwID4+CSA4ICkgXSA8PCAgOCApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMwkgICApIF0JCSApOworCisJWDMgPSBSS1szXSBeICggUlNiWwkodWludDgpCSggWTMgPj4JMjQgKSBdIDw8IDI0ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkyID4+CTE2ICkgXSA8PCAxNiApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMSA+PgkgOCApIF0gPDwgIDggKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTAJICAgKSBdCQkgKTsKKworCVBVVF9VSU5UMzIoCVgwLAlvdXRwdXQsCSAwICk7CisJUFVUX1VJTlQzMigJWDEsCW91dHB1dCwJIDQgKTsKKwlQVVRfVUlOVDMyKAlYMiwJb3V0cHV0LAkgOCApOworCVBVVF9VSU5UMzIoCVgzLAlvdXRwdXQsCTEyICk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTSEExIGZ1bmN0aW9uCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlITUFDX1NIQTEoCisJSU4JVUNIQVIJKnRleHQsCisJSU4JVUlOVAl0ZXh0X2xlbiwKKwlJTglVQ0hBUgkqa2V5LAorCUlOCVVJTlQJa2V5X2xlbiwKKwlJTglVQ0hBUgkqZGlnZXN0KQoreworCVNIQV9DVFgJY29udGV4dDsKKwlVQ0hBUglrX2lwYWRbNjVdOyAvKiBpbm5lciBwYWRkaW5nIC0ga2V5IFhPUmQgd2l0aCBpcGFkCSovCisJVUNIQVIJa19vcGFkWzY1XTsgLyogb3V0ZXIgcGFkZGluZyAtIGtleSBYT1JkIHdpdGggb3BhZAkqLworCUlOVAkJaTsKKworCS8vIGlmIGtleSBpcyBsb25nZXIJdGhhbiA2NAlieXRlcyByZXNldAlpdCB0byBrZXk9U0hBMShrZXkpCisJaWYgKGtleV9sZW4JPiA2NCkKKwl7CisJCVNIQV9DVFgJCSB0Y3R4OworCQlTSEFJbml0KCZ0Y3R4KTsKKwkJU0hBVXBkYXRlKCZ0Y3R4LCBrZXksIGtleV9sZW4pOworCQlTSEFGaW5hbCgmdGN0eCwJa2V5KTsKKwkJa2V5X2xlbgk9IDIwOworCX0KKwlOZGlzWmVyb01lbW9yeShrX2lwYWQsIHNpemVvZihrX2lwYWQpKTsKKwlOZGlzWmVyb01lbW9yeShrX29wYWQsIHNpemVvZihrX29wYWQpKTsKKwlOZGlzTW92ZU1lbW9yeShrX2lwYWQsIGtleSwJa2V5X2xlbik7CisJTmRpc01vdmVNZW1vcnkoa19vcGFkLCBrZXksCWtleV9sZW4pOworCisJLy8gWE9SIGtleSB3aXRoCWlwYWQgYW5kIG9wYWQgdmFsdWVzCisJZm9yCShpID0gMDsJaSA8CTY0OwlpKyspCisJeworCQlrX2lwYWRbaV0gXj0gMHgzNjsKKwkJa19vcGFkW2ldIF49IDB4NWM7CisJfQorCisJLy8gcGVyZm9ybSBpbm5lciBTSEExCisJU0hBSW5pdCgmY29udGV4dCk7IAkJCQkJCS8qIGluaXQgY29udGV4dCBmb3IgMXN0IHBhc3MgKi8KKwlTSEFVcGRhdGUoJmNvbnRleHQsCWtfaXBhZCwJNjQpOwkJLyoJc3RhcnQgd2l0aCBpbm5lciBwYWQgKi8KKwlTSEFVcGRhdGUoJmNvbnRleHQsCXRleHQsIHRleHRfbGVuKTsJLyoJdGhlbiB0ZXh0IG9mIGRhdGFncmFtICovCisJU0hBRmluYWwoJmNvbnRleHQsIGRpZ2VzdCk7CQkJCS8qIGZpbmlzaCB1cCAxc3QgcGFzcyAqLworCisJLy9wZXJmb3JtIG91dGVyCVNIQTEKKwlTSEFJbml0KCZjb250ZXh0KTsJCQkJCS8qIGluaXQgY29udGV4dCBmb3IgMm5kIHBhc3MgKi8KKwlTSEFVcGRhdGUoJmNvbnRleHQsCWtfb3BhZCwJNjQpOwkvKglzdGFydCB3aXRoIG91dGVyIHBhZCAqLworCVNIQVVwZGF0ZSgmY29udGV4dCwJZGlnZXN0LAkyMCk7CS8qCXRoZW4gcmVzdWx0cyBvZgkxc3QJaGFzaCAqLworCVNIQUZpbmFsKCZjb250ZXh0LCBkaWdlc3QpOwkJCS8qIGZpbmlzaCB1cCAybmQgcGFzcyAqLworCit9CisKKy8qCisqIEYoUCwgUywgYywgaSkgPSBVMSB4b3IgVTIgeG9yIC4uLiBVYworKiBVMSA9IFBSRihQLCBTIHx8IEludChpKSkKKyogVTIgPSBQUkYoUCwgVTEpCisqIFVjID0gUFJGKFAsIFVjLTEpCisqLworCit2b2lkIEYoY2hhciAqcGFzc3dvcmQsIHVuc2lnbmVkIGNoYXIgKnNzaWQsIGludCBzc2lkbGVuZ3RoLCBpbnQgaXRlcmF0aW9ucywgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpCit7CisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbMzZdLCBkaWdlc3QxW1NIQV9ESUdFU1RfTEVOXTsKKyAgICBpbnQgaSwgajsKKworICAgIC8qIFUxID0gUFJGKFAsIFMgfHwgaW50KGkpKSAqLworICAgIG1lbWNweShkaWdlc3QsIHNzaWQsIHNzaWRsZW5ndGgpOworICAgIGRpZ2VzdFtzc2lkbGVuZ3RoXSA9ICh1bnNpZ25lZCBjaGFyKSgoY291bnQ+PjI0KSAmIDB4ZmYpOworICAgIGRpZ2VzdFtzc2lkbGVuZ3RoKzFdID0gKHVuc2lnbmVkIGNoYXIpKChjb3VudD4+MTYpICYgMHhmZik7CisgICAgZGlnZXN0W3NzaWRsZW5ndGgrMl0gPSAodW5zaWduZWQgY2hhcikoKGNvdW50Pj44KSAmIDB4ZmYpOworICAgIGRpZ2VzdFtzc2lkbGVuZ3RoKzNdID0gKHVuc2lnbmVkIGNoYXIpKGNvdW50ICYgMHhmZik7CisgICAgSE1BQ19TSEExKGRpZ2VzdCwgc3NpZGxlbmd0aCs0LCAodW5zaWduZWQgY2hhciopIHBhc3N3b3JkLCAoaW50KSBzdHJsZW4ocGFzc3dvcmQpLCBkaWdlc3QxKTsgLy8gZm9yIFdQQSB1cGRhdGUKKworICAgIC8qIG91dHB1dCA9IFUxICovCisgICAgbWVtY3B5KG91dHB1dCwgZGlnZXN0MSwgU0hBX0RJR0VTVF9MRU4pOworCisgICAgZm9yIChpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykKKyAgICB7CisgICAgICAgIC8qIFVuID0gUFJGKFAsIFVuLTEpICovCisgICAgICAgIEhNQUNfU0hBMShkaWdlc3QxLCBTSEFfRElHRVNUX0xFTiwgKHVuc2lnbmVkIGNoYXIqKSBwYXNzd29yZCwgKGludCkgc3RybGVuKHBhc3N3b3JkKSwgZGlnZXN0KTsgLy8gZm9yIFdQQSB1cGRhdGUKKyAgICAgICAgbWVtY3B5KGRpZ2VzdDEsIGRpZ2VzdCwgU0hBX0RJR0VTVF9MRU4pOworCisgICAgICAgIC8qIG91dHB1dCA9IG91dHB1dCB4b3IgVW4gKi8KKyAgICAgICAgZm9yIChqID0gMDsgaiA8IFNIQV9ESUdFU1RfTEVOOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dFtqXSBePSBkaWdlc3Rbal07CisgICAgICAgIH0KKyAgICB9Cit9CisvKgorKiBwYXNzd29yZCAtIGFzY2lpIHN0cmluZyB1cCB0byA2MyBjaGFyYWN0ZXJzIGluIGxlbmd0aAorKiBzc2lkIC0gb2N0ZXQgc3RyaW5nIHVwIHRvIDMyIG9jdGV0cworKiBzc2lkbGVuZ3RoIC0gbGVuZ3RoIG9mIHNzaWQgaW4gb2N0ZXRzCisqIG91dHB1dCBtdXN0IGJlIDQwIG9jdGV0cyBpbiBsZW5ndGggYW5kIG91dHB1dHMgMjU2IGJpdHMgb2Yga2V5CisqLworaW50IFBhc3N3b3JkSGFzaChjaGFyICpwYXNzd29yZCwgdW5zaWduZWQgY2hhciAqc3NpZCwgaW50IHNzaWRsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCkKK3sKKyAgICBpZiAoKHN0cmxlbihwYXNzd29yZCkgPiA2MykgfHwgKHNzaWRsZW5ndGggPiAzMikpCisgICAgICAgIHJldHVybiAwOworCisgICAgRihwYXNzd29yZCwgc3NpZCwgc3NpZGxlbmd0aCwgNDA5NiwgMSwgb3V0cHV0KTsKKyAgICBGKHBhc3N3b3JkLCBzc2lkLCBzc2lkbGVuZ3RoLCA0MDk2LCAyLCAmb3V0cHV0W1NIQV9ESUdFU1RfTEVOXSk7CisgICAgcmV0dXJuIDE7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbWxtZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbWxtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmJmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9tbG1lLmMKQEAgLTAsMCArMSw5MTM2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCW1sbWUuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4gQ2hhbmcJMjAwNC0wOC0yNQkJTW9kaWZ5IGZyb20gUlQyNTAwIGNvZGUgYmFzZQorCUpvaG4gQ2hhbmcJMjAwNC0wOS0wNgkJbW9kaWZpZWQgZm9yIFJUMjYwMAorKi8KKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitVQ0hBUglDSVNDT19PVUlbXSA9IHsweDAwLCAweDQwLCAweDk2fTsKKworVUNIQVIJV1BBX09VSVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDF9OworVUNIQVIJUlNOX09VSVtdID0gezB4MDAsIDB4MGYsIDB4YWN9OworVUNIQVIJV0FQSV9PVUlbXSA9IHsweDAwLCAweDE0LCAweDcyfTsKK1VDSEFSICAgV01FX0lORk9fRUxFTVtdICA9IHsweDAwLCAweDUwLCAweGYyLCAweDAyLCAweDAwLCAweDAxfTsKK1VDSEFSICAgV01FX1BBUk1fRUxFTVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDEsIDB4MDF9OworVUNIQVIJQ2N4MlFvc0luZm9bXSA9IHsweDAwLCAweDQwLCAweDk2LCAweDA0fTsKK1VDSEFSICAgUkFMSU5LX09VSVtdICA9IHsweDAwLCAweDBjLCAweDQzfTsKK1VDSEFSICAgQlJPQURDT01fT1VJW10gID0gezB4MDAsIDB4OTAsIDB4NGN9OworVUNIQVIgICBXUFNfT1VJW10gPSB7MHgwMCwgMHg1MCwgMHhmMiwgMHgwNH07CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitVQ0hBUglQUkVfTl9IVF9PVUlbXQk9IHsweDAwLCAweDkwLCAweDRjfTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlW10gPSB7CisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgxMSwgMHgwMCwgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MDAsICAwLCA0MCwgMTAxLAorICAgIDB4MDEsIDB4MDAsICAxLCA0MCwgNTAsCisgICAgMHgwMiwgMHgwMCwgIDIsIDM1LCA0NSwKKyAgICAweDAzLCAweDAwLCAgMywgMjAsIDQ1LAorICAgIDB4MDQsIDB4MjEsICAwLCAzMCwgNTAsCisgICAgMHgwNSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDA2LCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDcsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwOCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA5LCAweDIxLCAgNSwgMTAsIDI1LAorICAgIDB4MGEsIDB4MjEsICA2LCAgOCwgMjUsCisgICAgMHgwYiwgMHgyMSwgIDcsICA4LCAyNSwKKyAgICAweDBjLCAweDIwLCAxMiwgIDE1LCAzMCwKKyAgICAweDBkLCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MGUsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwZiwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDEwLCAweDIyLCAxNSwgIDgsIDI1LAorICAgIDB4MTEsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxMiwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDEzLCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MTQsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxNSwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDE2LCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MTcsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxOCwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDE5LCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MWEsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxYiwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDFjLCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MWQsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxZSwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDFmLCAweDAwLCAgMCwgIDAsICAwLAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCW10gPSB7CisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwNCwgMHgwMywgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MDAsICAwLCA0MCwgMTAxLAorICAgIDB4MDEsIDB4MDAsICAxLCA0MCwgNTAsCisgICAgMHgwMiwgMHgwMCwgIDIsIDM1LCA0NSwKKyAgICAweDAzLCAweDAwLCAgMywgMjAsIDQ1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR1tdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGEsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDAwLCAgMCwgNDAsIDEwMSwKKyAgICAweDAxLCAweDAwLCAgMSwgNDAsIDUwLAorICAgIDB4MDIsIDB4MDAsICAyLCAzNSwgNDUsCisgICAgMHgwMywgMHgwMCwgIDMsIDIwLCA0NSwKKyAgICAweDA0LCAweDEwLCAgMiwgMjAsIDM1LAorICAgIDB4MDUsIDB4MTAsICAzLCAxNiwgMzUsCisgICAgMHgwNiwgMHgxMCwgIDQsIDEwLCAyNSwKKyAgICAweDA3LCAweDEwLCAgNSwgMTYsIDI1LAorICAgIDB4MDgsIDB4MTAsICA2LCAxMCwgMjUsCisgICAgMHgwOSwgMHgxMCwgIDcsIDEwLCAxMywKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExR1tdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MDgsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDEwLCAgMCwgMjAsIDEwMSwKKyAgICAweDAxLCAweDEwLCAgMSwgMjAsIDM1LAorICAgIDB4MDIsIDB4MTAsICAyLCAyMCwgMzUsCisgICAgMHgwMywgMHgxMCwgIDMsIDE2LCAzNSwKKyAgICAweDA0LCAweDEwLCAgNCwgMTAsIDI1LAorICAgIDB4MDUsIDB4MTAsICA1LCAxNiwgMjUsCisgICAgMHgwNiwgMHgxMCwgIDYsIDEwLCAyNSwKKyAgICAweDA3LCAweDEwLCAgNywgMTAsIDEzLAorfTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFOMVNbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDA5LCAweDAwLCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLCAxMDEsCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIxLCAgNSwgMTAsIDI1LAorICAgIDB4MDYsIDB4MjEsICA2LCAgOCwgMTQsCisgICAgMHgwNywgMHgyMSwgIDcsICA4LCAxNCwKKyAgICAweDA4LCAweDIzLCAgNywgIDgsIDE0LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFOMlNbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBhLCAweDAwLCAgMCwgIDAsICAwLCAgICAgIC8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLCAxMDEsCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIwLCAxMiwgIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDcsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOCwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDA5LCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFOM1NbXSA9IHsKKy8vIEl0ZW0gTm8uCU1vZGUJQ3Vyci1NQ1MJVHJhaW5VcAlUcmFpbkRvd24JLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBhLCAweDAwLCAgMCwgIDAsICAwLCAgICAgIC8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLCAxMDEsCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIwLCAxMiwgIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDcsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOCwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDA5LCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFtdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGIsIDB4MDksICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsIDEwMSwKKyAgICAweDAxLCAweDIxLCAgMSwgMjAsIDUwLAorICAgIDB4MDIsIDB4MjEsICAyLCAyMCwgNTAsCisgICAgMHgwMywgMHgyMSwgIDMsIDE1LCA1MCwKKyAgICAweDA0LCAweDIxLCAgNCwgMTUsIDMwLAorICAgIDB4MDUsIDB4MjEsICA1LCAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTIsICAxNSwgMzAsCisgICAgMHgwNywgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDA4LCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MDksIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgwYSwgMHgyMiwgMTUsICA4LCAyNSwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExTjNTRm9yQUJhbmRbXSA9IHsgLy8gMyozCisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwYiwgMHgwOSwgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MjEsICAwLCAzMCwgMTAxLAorICAgIDB4MDEsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwMiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDAzLCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDQsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwNSwgMHgyMSwgIDUsIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAxMiwgIDE1LCAzMCwKKyAgICAweDA3LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOSwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDBhLCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04xU1tdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGQsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDAwLCAgMCwgNDAsIDEwMSwKKyAgICAweDAxLCAweDAwLCAgMSwgNDAsIDUwLAorICAgIDB4MDIsIDB4MDAsICAyLCAzNSwgNDUsCisgICAgMHgwMywgMHgwMCwgIDMsIDIwLCA0NSwKKyAgICAweDA0LCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwNSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDA2LCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDcsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwOCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA5LCAweDIxLCAgNSwgMTAsIDI1LAorICAgIDB4MGEsIDB4MjEsICA2LCAgOCwgMTQsCisgICAgMHgwYiwgMHgyMSwgIDcsICA4LCAxNCwKKwkweDBjLCAweDIzLCAgNywgIDgsIDE0LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04yU1tdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGEsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIwLCAxMiwgMTUsIDMwLAorICAgIDB4MDYsIDB4MjAsIDEzLCAgOCwgMjAsCisgICAgMHgwNywgMHgyMCwgMTQsICA4LCAyMCwKKyAgICAweDA4LCAweDIwLCAxNSwgIDgsIDI1LAorICAgIDB4MDksIDB4MjIsIDE1LCAgOCwgMjUsCit9OworCitVQ0hBUiBSYXRlU3dpdGNoVGFibGUxMUJHTjNTW10gPSB7IC8vIDMqMworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGEsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAyMCwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCA1MCwKKyNpZiAxCisgICAgMHgwNSwgMHgyMCwgMjAsIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAyMSwgIDgsIDIwLAorICAgIDB4MDcsIDB4MjAsIDIyLCAgOCwgMjAsCisgICAgMHgwOCwgMHgyMCwgMjMsICA4LCAyNSwKKyAgICAweDA5LCAweDIyLCAyMywgIDgsIDI1LAorI2Vsc2UgLy8gZm9yIFJUMjg2MCAyKjMgdGVzdAorICAgIDB4MDUsIDB4MjAsIDEyLCAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDA3LCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgwOSwgMHgyMiwgMTUsICA4LCAyNSwKKyNlbmRpZgorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kW10gPSB7CisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwYiwgMHgwOSwgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MjEsICAwLCAzMCwxMDEsCS8vNTAKKyAgICAweDAxLCAweDIxLCAgMSwgMjAsIDUwLAorICAgIDB4MDIsIDB4MjEsICAyLCAyMCwgNTAsCisgICAgMHgwMywgMHgyMSwgIDMsIDE1LCA1MCwKKyAgICAweDA0LCAweDIxLCAgNCwgMTUsIDMwLAorICAgIDB4MDUsIDB4MjEsICA1LCAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTIsIDE1LCAzMCwKKyAgICAweDA3LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOSwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDBhLCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04zU0ZvckFCYW5kW10gPSB7IC8vIDMqMworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGMsIDB4MDksICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIxLCAgNSwgMTUsIDMwLAorICAgIDB4MDYsIDB4MjEsIDEyLCAxNSwgMzAsCisgICAgMHgwNywgMHgyMCwgMjAsIDE1LCAzMCwKKyAgICAweDA4LCAweDIwLCAyMSwgIDgsIDIwLAorICAgIDB4MDksIDB4MjAsIDIyLCAgOCwgMjAsCisgICAgMHgwYSwgMHgyMCwgMjMsICA4LCAyNSwKKyAgICAweDBiLCAweDIyLCAyMywgIDgsIDI1LAorfTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworUFVDSEFSIFJlYXNvblN0cmluZ1tdID0geworCS8qIDAgICovCSAiUmVzZXJ2ZWQiLAorCS8qIDEgICovCSAiVW5zcGVjaWZpZWQgUmVhc29uIiwKKwkvKiAyICAqLwkgIlByZXZpb3VzIEF1dGggbm8gbG9uZ2VyIHZhbGlkIiwKKwkvKiAzICAqLwkgIlNUQSBpcyBsZWF2aW5nIC8gaGFzIGxlZnQiLAorCS8qIDQgICovCSAiRElTLUFTU09DIGR1ZSB0byBpbmFjdGl2aXR5IiwKKwkvKiA1ICAqLwkgIkFQIHVuYWJsZSB0byBoYW5sZSBhbGwgYXNzb2NpYXRpb25zIiwKKwkvKiA2ICAqLwkgImNsYXNzIDIgZXJyb3IiLAorCS8qIDcgICovCSAiY2xhc3MgMyBlcnJvciIsCisJLyogOCAgKi8JICJTVEEgaXMgbGVhdmluZyAvIGhhcyBsZWZ0IiwKKwkvKiA5ICAqLwkgInJlcXVpcmUgYXV0aCBiZWZvcmUgYXNzb2MvcmUtYXNzb2MiLAorCS8qIDEwICovCSAiUmVzZXJ2ZWQiLAorCS8qIDExICovCSAiUmVzZXJ2ZWQiLAorCS8qIDEyICovCSAiUmVzZXJ2ZWQiLAorCS8qIDEzICovCSAiaW52YWxpZCBJRSIsCisJLyogMTQgKi8JICJNSUMgZXJyb3IiLAorCS8qIDE1ICovCSAiNC13YXkgaGFuZHNoYWtlIHRpbWVvdXQiLAorCS8qIDE2ICovCSAiMi13YXkgKGdyb3VwIGtleSkgaGFuZHNoYWtlIHRpbWVvdXQiLAorCS8qIDE3ICovCSAiNC13YXkgaGFuZHNoYWtlIElFIGRpZmYgYW1vbmcgQXNzb3NSZXEvUnNwL0JlYWNvbiIsCisJLyogMTggKi8KK307CisKK2V4dGVybiBVQ0hBUgkgT2ZkbVJhdGVUb1J4d2lNQ1NbXTsKKy8vIHNpbmNlIFJUNjEgaGFzIGJldHRlciBSWCBzZW5zaWJpbGl0eSwgd2UgaGF2ZSB0byBsaW1pdCBUWCBBQ0sgcmF0ZSBub3QgdG8gZXhjZWVkIG91ciBub3JtYWwgZGF0YSBUWCByYXRlLgorLy8gb3RoZXJ3aXNlIHRoZSBXTEFOIHBlZXIgbWF5IG5vdCBiZSBhYmxlIHRvIHJlY2VpdmUgdGhlIEFDSyB0aHVzIGRvd25ncmFkZSBpdHMgZGF0YSBUWCByYXRlCitVTE9ORyBCYXNpY1JhdGVNYXNrWzEyXQkJCQk9IHsweGZmZmZmMDAxIC8qIDEtTWJwcyAqLywgMHhmZmZmZjAwMyAvKiAyIE1icHMgKi8sIDB4ZmZmZmYwMDcgLyogNS41ICovLCAweGZmZmZmMDBmIC8qIDExICovLAorCQkJCQkJCQkJICAweGZmZmZmMDFmIC8qIDYgKi8JICwgMHhmZmZmZjAzZiAvKiA5ICovCSAgLCAweGZmZmZmMDdmIC8qIDEyICovICwgMHhmZmZmZjBmZiAvKiAxOCAqLywKKwkJCQkJCQkJCSAgMHhmZmZmZjFmZiAvKiAyNCAqLwkgLCAweGZmZmZmM2ZmIC8qIDM2ICovCSAgLCAweGZmZmZmN2ZmIC8qIDQ4ICovICwgMHhmZmZmZmZmZiAvKiA1NCAqL307CisKK1VDSEFSIE1VTFRJQ0FTVF9BRERSW01BQ19BRERSX0xFTl0gPSB7MHgxLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CitVQ0hBUiBCUk9BRENBU1RfQUREUltNQUNfQUREUl9MRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworVUNIQVIgWkVST19NQUNfQUREUltNQUNfQUREUl9MRU5dICA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKworLy8gZS5nLiBSc3NpU2FmZUxldmVsRm9yVHhSYXRlW1JBVEVfMzZdIiBtZWFucyBpZiB0aGUgY3VycmVudCBSU1NJIGlzIGdyZWF0ZXIgdGhhbgorLy8JCXRoaXMgdmFsdWUsIHRoZW4gaXQncyBxdWFyYW50ZWVkIGNhcGFibGUgb2Ygb3BlcmF0aW5nIGluIDM2IG1icHMgVFggcmF0ZSBpbgorLy8JCWNsZWFuIGVudmlyb25tZW50LgorLy8JCQkJCQkJCSAgVHhSYXRlOiAxICAgMiAgIDUuNQkxMQkgNgkgIDkgICAgMTIJMTgJIDI0ICAgMzYgICA0OAk1NAkgNzIgIDEwMAorQ0hBUiBSc3NpU2FmZUxldmVsRm9yVHhSYXRlW10gPXsgIC05MiwgLTkxLCAtOTAsIC04NywgLTg4LCAtODYsIC04NSwgLTgzLCAtODEsIC03OCwgLTcyLCAtNzEsIC00MCwgLTQwIH07CisKK1VDSEFSICBSYXRlSWRUb01icHNbXQkgPSB7IDEsIDIsIDUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0LCA3MiwgMTAwfTsKK1VTSE9SVCBSYXRlSWRUbzUwMEticHNbXSA9IHsgMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4LCAxNDQsIDIwMH07CisKK1VDSEFSICBTc2lkSWUJID0gSUVfU1NJRDsKK1VDSEFSICBTdXBSYXRlSWUgPSBJRV9TVVBQX1JBVEVTOworVUNIQVIgIEV4dFJhdGVJZSA9IElFX0VYVF9TVVBQX1JBVEVTOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVUNIQVIgIEh0Q2FwSWUgPSBJRV9IVF9DQVA7CitVQ0hBUiAgQWRkSHRJbmZvSWUgPSBJRV9BRERfSFQ7CitVQ0hBUiAgTmV3RXh0Q2hhbkllID0gSUVfU0VDT05EQVJZX0NIX09GRlNFVDsKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitVQ0hBUiAgRXh0SHRDYXBJZSA9IElFX0VYVF9DQVBBQklMSVRZOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KK1VDSEFSICBFcnBJZQkgPSBJRV9FUlA7CitVQ0hBUiAgRHNJZSAJID0gSUVfRFNfUEFSTTsKK1VDSEFSICBUaW1JZQkgPSBJRV9USU07CitVQ0hBUiAgV3BhSWUJID0gSUVfV1BBOworVUNIQVIgIFdwYTJJZQkgPSBJRV9XUEEyOworVUNIQVIgIElic3NJZQkgPSBJRV9JQlNTX1BBUk07CitVQ0hBUiAgQ2N4MkllCSA9IElFX0NDWF9WMjsKK1VDSEFSICBXYXBpSWUJID0gSUVfV0FQSTsKKworZXh0ZXJuIFVDSEFSCVdQQV9PVUlbXTsKKworVUNIQVIJU0VTX09VSVtdID0gezB4MDAsIDB4OTAsIDB4NGN9OworCitVQ0hBUglaZXJvU3NpZFszMl0gPSB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfTsKKworLy8gUmVzZXQgdGhlIFJGSUMgc2V0dGluZyB0byBuZXcgc2VyaWVzCitSVE1QX1JGX1JFR1MgUkYyODUwUmVnVGFibGVbXSA9IHsKKy8vCQljaAkgUjEgCQkgUjIgCQkgUjMoVFgwfjQ9MCkgUjQKKwkJezEsICAweDk4NDAyZWNjLCAweDk4NGMwNzg2LCAweDk4MTZiNDU1LCAweDk4MDA1MTBifSwKKwkJezIsICAweDk4NDAyZWNjLCAweDk4NGMwNzg2LCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezMsICAweDk4NDAyZWNjLCAweDk4NGMwNzhhLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezQsICAweDk4NDAyZWNjLCAweDk4NGMwNzhhLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezUsICAweDk4NDAyZWNjLCAweDk4NGMwNzhlLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezYsICAweDk4NDAyZWNjLCAweDk4NGMwNzhlLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezcsICAweDk4NDAyZWNjLCAweDk4NGMwNzkyLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezgsICAweDk4NDAyZWNjLCAweDk4NGMwNzkyLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezksICAweDk4NDAyZWNjLCAweDk4NGMwNzk2LCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezEwLCAweDk4NDAyZWNjLCAweDk4NGMwNzk2LCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezExLCAweDk4NDAyZWNjLCAweDk4NGMwNzlhLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezEyLCAweDk4NDAyZWNjLCAweDk4NGMwNzlhLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfSwKKwkJezEzLCAweDk4NDAyZWNjLCAweDk4NGMwNzllLCAweDk4MTY4YTU1LCAweDk4MDA1MThifSwKKwkJezE0LCAweDk4NDAyZWNjLCAweDk4NGMwN2EyLCAweDk4MTY4YTU1LCAweDk4MDA1MTkzfSwKKworCQkvLyA4MDIuMTEgVU5JIC8gSHlwZXJMYW4gMgorCQl7MzYsIDB4OTg0MDJlY2MsIDB4OTg0YzA5OWEsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9LAorCQl7MzgsIDB4OTg0MDJlY2MsIDB4OTg0YzA5OWUsIDB4OTgxNThhNTUsIDB4OTgwZWQxOTN9LAorCQl7NDAsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODIsIDB4OTgxNThhNTUsIDB4OTgwZWQxODN9LAorCQl7NDQsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODIsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9LAorCQl7NDYsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODYsIDB4OTgxNThhNTUsIDB4OTgwZWQxOGJ9LAorCQl7NDgsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODYsIDB4OTgxNThhNTUsIDB4OTgwZWQxOWJ9LAorCQl7NTIsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OGEsIDB4OTgxNThhNTUsIDB4OTgwZWQxOTN9LAorCQl7NTQsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OGEsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9LAorCQl7NTYsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OGUsIDB4OTgxNThhNTUsIDB4OTgwZWQxOGJ9LAorCQl7NjAsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OTIsIDB4OTgxNThhNTUsIDB4OTgwZWQxODN9LAorCQl7NjIsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OTIsIDB4OTgxNThhNTUsIDB4OTgwZWQxOTN9LAorCQl7NjQsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OTIsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9LCAvLyBQbHVnZmVzdCM0LCBEYXk0LCBjaGFuZ2UgUkZSMyBsZWZ0NHRoIDktPjUuCisKKwkJLy8gODAyLjExIEh5cGVyTGFuIDIKKwkJezEwMCwgMHg5ODQwMmVjOCwgMHg5ODRjMDZiMiwgMHg5ODE3OGE1NSwgMHg5ODBlZDc4M30sCisKKwkJLy8gMjAwOC4wNC4zMCBtb2RpZmllZAorCQkvLyBUaGUgc3lzdGVtIHRlYW0gaGFzIEFOIHRvIGltcHJvdmUgdGhlIEVWTSB2YWx1ZQorCQkvLyBmb3IgY2hhbm5lbCAxMDIgdG8gMTA4IGZvciB0aGUgUlQyODUwL1JUMjc1MCBkdWFsIGJhbmQgc29sdXRpb24uCisJCXsxMDIsIDB4OTg0MDJlYzgsIDB4OTg1YzA2YjIsIDB4OTg1NzhhNTUsIDB4OTgwZWQ3OTN9LAorCQl7MTA0LCAweDk4NDAyZWM4LCAweDk4NWMwNmIyLCAweDk4NTc4YTU1LCAweDk4MGVkMWEzfSwKKwkJezEwOCwgMHg5ODQwMmVjYywgMHg5ODVjMGEzMiwgMHg5ODU3OGE1NSwgMHg5ODBlZDE5M30sCisKKwkJezExMCwgMHg5ODQwMmVjYywgMHg5ODRjMGEzNiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4M30sCisJCXsxMTIsIDB4OTg0MDJlY2MsIDB4OTg0YzBhMzYsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOWJ9LAorCQl7MTE2LCAweDk4NDAyZWNjLCAweDk4NGMwYTNhLCAweDk4MTc4YTU1LCAweDk4MGVkMWEzfSwKKwkJezExOCwgMHg5ODQwMmVjYywgMHg5ODRjMGEzZSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5M30sCisJCXsxMjAsIDB4OTg0MDJlYzQsIDB4OTg0YzAzODIsIDB4OTgxNzhhNTUsIDB4OTgwZWQxODN9LAorCQl7MTI0LCAweDk4NDAyZWM0LCAweDk4NGMwMzgyLCAweDk4MTc4YTU1LCAweDk4MGVkMTkzfSwKKwkJezEyNiwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE1Yn0sIC8vIDB4OTgwZWQxYmItPjB4OTgwZWQxNWIgcmVxdWlyZWQgYnkgUm9yeSAyMDA3MDkyNworCQl7MTI4LCAweDk4NDAyZWM0LCAweDk4NGMwMzgyLCAweDk4MTc4YTU1LCAweDk4MGVkMWEzfSwKKwkJezEzMiwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4NiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4Yn0sCisJCXsxMzQsIDB4OTg0MDJlYzQsIDB4OTg0YzAzODYsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOTN9LAorCQl7MTM2LCAweDk4NDAyZWM0LCAweDk4NGMwMzg2LCAweDk4MTc4YTU1LCAweDk4MGVkMTlifSwKKwkJezE0MCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4YSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4M30sCisKKwkJLy8gODAyLjExIFVOSUkKKwkJezE0OSwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4YSwgMHg5ODE3OGE1NSwgMHg5ODBlZDFhN30sCisJCXsxNTEsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxODd9LAorCQl7MTUzLCAweDk4NDAyZWM0LCAweDk4NGMwMzhlLCAweDk4MTc4YTU1LCAweDk4MGVkMThmfSwKKwkJezE1NywgMHg5ODQwMmVjNCwgMHg5ODRjMDM4ZSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5Zn0sCisJCXsxNTksIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxYTd9LAorCQl7MTYxLCAweDk4NDAyZWM0LCAweDk4NGMwMzkyLCAweDk4MTc4YTU1LCAweDk4MGVkMTg3fSwKKwkJezE2NSwgMHg5ODQwMmVjNCwgMHg5ODRjMDM5MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5N30sCisKKwkJLy8gSmFwYW4KKwkJezE4NCwgMHg5NTAwMmNjYywgMHg5NTAwNDkxZSwgMHg5NTA5YmU1NSwgMHg5NTBjMGEwYn0sCisJCXsxODgsIDB4OTUwMDJjY2MsIDB4OTUwMDQ5MjIsIDB4OTUwOWJlNTUsIDB4OTUwYzBhMTN9LAorCQl7MTkyLCAweDk1MDAyY2NjLCAweDk1MDA0OTI2LCAweDk1MDliZTU1LCAweDk1MGMwYTFifSwKKwkJezE5NiwgMHg5NTAwMmNjYywgMHg5NTAwNDkyYSwgMHg5NTA5YmU1NSwgMHg5NTBjMGEyM30sCisJCXsyMDgsIDB4OTUwMDJjY2MsIDB4OTUwMDQ5M2EsIDB4OTUwOWJlNTUsIDB4OTUwYzBhMTN9LAorCQl7MjEyLCAweDk1MDAyY2NjLCAweDk1MDA0OTNlLCAweDk1MDliZTU1LCAweDk1MGMwYTFifSwKKwkJezIxNiwgMHg5NTAwMmNjYywgMHg5NTAwNDk4MiwgMHg5NTA5YmU1NSwgMHg5NTBjMGEyM30sCisKKwkJLy8gc3RpbGwgbGFjayBvZiBNTUFDKEphcGFuKSBjaCAzNCwzOCw0Miw0NgorfTsKK1VDSEFSCU5VTV9PRl8yODUwX0NITkwgPSAoc2l6ZW9mKFJGMjg1MFJlZ1RhYmxlKSAvIHNpemVvZihSVE1QX1JGX1JFR1MpKTsKKworRlJFUVVFTkNZX0lURU0gRnJlcUl0ZW1zMzAyMFtdID0KK3sKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy8gSVNNIDogMi40IHRvIDIuNDgzIEdIeiAgICAgICAgICAgICAgICAgICAgICAgICAvLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvLyAxMWcKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy8tQ0gtLS1OLS0tLS0tLVItLS1LLS0tLS0tLS0tLS0KKwl7MSwgICAgMjQxLCAgMiwgIDJ9LAorCXsyLCAgICAyNDEsCSAyLCAgN30sCisJezMsICAgIDI0MiwJIDIsICAyfSwKKwl7NCwgICAgMjQyLAkgMiwgIDd9LAorCXs1LCAgICAyNDMsCSAyLCAgMn0sCisJezYsICAgIDI0MywJIDIsICA3fSwKKwl7NywgICAgMjQ0LAkgMiwgIDJ9LAorCXs4LCAgICAyNDQsCSAyLCAgN30sCisJezksICAgIDI0NSwJIDIsICAyfSwKKwl7MTAsICAgMjQ1LAkgMiwgIDd9LAorCXsxMSwgICAyNDYsCSAyLCAgMn0sCisJezEyLCAgIDI0NiwJIDIsICA3fSwKKwl7MTMsICAgMjQ3LAkgMiwgIDJ9LAorCXsxNCwgICAyNDgsCSAyLCAgNH0sCit9OworLy8yMDA4LzA3LzEwOktIIE1vZGlmaWVkIHRvIHNoYXJlIHRoaXMgdmFyaWFibGUKK1VDSEFSCU5VTV9PRl8zMDIwX0NITkw9KHNpemVvZihGcmVxSXRlbXMzMDIwKSAvIHNpemVvZihGUkVRVUVOQ1lfSVRFTSkpOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWluaXRpYWxpemUgdGhlIE1MTUUgdGFzayBhbmQgaXRzIGRhdGEgc3RydWN0dXJlIChxdWV1ZSwgc3BpbmxvY2ssCisJCXRpbWVyLCBzdGF0ZSBtYWNoaW5lcykuCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJUmV0dXJuOgorCQlhbHdheXMgcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1MKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgTWxtZUluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTkRJU19TVEFUVVMgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBNTE1FIEluaXRpYWxpemVcbiIpKTsKKworCWRvCisJeworCQlTdGF0dXMgPSBNbG1lUXVldWVJbml0KCZwQWQtPk1sbWUuUXVldWUpOworCQlpZihTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCWJyZWFrOworCisJCXBBZC0+TWxtZS5iUnVubmluZyA9IEZBTFNFOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7CisKKwkJCS8vIGluaXQgU1RBIHN0YXRlIG1hY2hpbmVzCisJCQlBc3NvY1N0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkFzc29jTWFjaGluZSwgcEFkLT5NbG1lLkFzc29jRnVuYyk7CisJCQlBdXRoU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQXV0aE1hY2hpbmUsIHBBZC0+TWxtZS5BdXRoRnVuYyk7CisJCQlBdXRoUnNwU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUsIHBBZC0+TWxtZS5BdXRoUnNwRnVuYyk7CisJCQlTeW5jU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuU3luY01hY2hpbmUsIHBBZC0+TWxtZS5TeW5jRnVuYyk7CisJCQlXcGFQc2tTdGF0ZU1hY2hpbmVJbml0KHBBZCwgJnBBZC0+TWxtZS5XcGFQc2tNYWNoaW5lLCBwQWQtPk1sbWUuV3BhUHNrRnVuYyk7CisJCQlBaXJvbmV0U3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUsIHBBZC0+TWxtZS5BaXJvbmV0RnVuYyk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCURsc1N0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkRsc01hY2hpbmUsIHBBZC0+TWxtZS5EbHNGdW5jKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCisJCQkvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgc3dpdGNoL2Nhc2UgdG8gaW1wbGVtZW50IGl0LCB0aGUgaW5pdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYWJvdmUKKwkJCS8vIHN0YXRlIG1hY2hpbmUgaW5pdAorCQkJTWxtZUNudGxJbml0KHBBZCwgJnBBZC0+TWxtZS5DbnRsTWFjaGluZSwgTlVMTCk7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisKKwkJQWN0aW9uU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQWN0TWFjaGluZSwgcEFkLT5NbG1lLkFjdEZ1bmMpOworCisJCS8vIEluaXQgbWxtZSBwZXJpb2RpYyB0aW1lcgorCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5QZXJpb2RpY1RpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oTWxtZVBlcmlvZGljRXhlYyksIHBBZCwgVFJVRSk7CisKKwkJLy8gU2V0IG1sbWUgcGVyaW9kaWMgdGltZXIKKwkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgTUxNRV9UQVNLX0VYRUNfSU5UVik7CisKKwkJLy8gc29mdHdhcmUtYmFzZWQgUlggQW50ZW5uYSBkaXZlcnNpdHkKKwkJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWUuUnhBbnRFdmFsVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihBc2ljUnhBbnRFdmFsVGltZW91dCksIHBBZCwgRkFMU0UpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCX0gd2hpbGUgKEZBTFNFKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBNTE1FIEluaXRpYWxpemVcbiIpKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJbWFpbiBsb29wIG9mIHRoZSBNTE1FCisJUHJlOgorCQlNbG1lIGhhcyB0byBiZSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGFyZSBzb21ldGhpbmcgaW5zaWRlIHRoZSBxdWV1ZQorCU5vdGU6CisJCVRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIE1QU2V0SW5mb3JtYXRpb24gYW5kIE1QUmVjZWl2ZTsKKwkJVGhpcyB0YXNrIGd1YXJhbnRlZSBvbmx5IG9uZSBNbG1lSGFuZGxlciB3aWxsIHJ1bi4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lSGFuZGxlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlNTE1FX1FVRVVFX0VMRU0gCSAgICpFbGVtID0gTlVMTDsKKworCS8vIE9ubHkgYWNjZXB0IE1MTUUgYW5kIEZyYW1lIGZyb20gcGVlciBzaWRlLCBubyBvdGhlciAoY29udHJvbC9kYXRhKSBmcmFtZSBzaG91bGQKKwkvLyBnZXQgaW50byB0aGlzIHN0YXRlIG1hY2hpbmUKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CisJaWYocEFkLT5NbG1lLmJSdW5uaW5nKQorCXsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJeworCQlwQWQtPk1sbWUuYlJ1bm5pbmcgPSBUUlVFOworCX0KKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOworCisJd2hpbGUgKCFNbG1lUXVldWVFbXB0eSgmcEFkLT5NbG1lLlF1ZXVlKSkKKwl7CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTUxNRV9SRVNFVF9JTl9QUk9HUkVTUykgfHwKKwkJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSB8fAorCQkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEZXZpY2UgSGFsdGVkIG9yIFJlbW92ZWQgb3IgTWxtZVJlc3QsIGV4aXQgTWxtZUhhbmRsZXIhIChxdWV1ZSBudW0gPSAlbGQpXG4iLCBwQWQtPk1sbWUuUXVldWUuTnVtKSk7CisJCQlicmVhazsKKwkJfQorCisjaWZkZWYgUkFMSU5LX0FURQorCQlpZihBVEVfT04ocEFkKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVGhlIGRyaXZlciBpcyBpbiBBVEUgbW9kZSBub3cgaW4gTWxtZUhhbmRsZXJcbiIpKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJCS8vRnJvbSBtZXNzYWdlIHR5cGUsIGRldGVybWluZSB3aGljaCBzdGF0ZSBtYWNoaW5lIEkgc2hvdWxkIGRyaXZlCisJCWlmIChNbG1lRGVxdWV1ZSgmcEFkLT5NbG1lLlF1ZXVlLCAmRWxlbSkpCisJCXsKKyNpZmRlZiBSVDI4NzAKKwkJCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9SRVNFVF9DT05GKQorCQkJeworCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIhISEgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworCQkJCU1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lKHBBZCk7CisJCQkJRWxlbS0+T2NjdXBpZWQgPSBGQUxTRTsKKwkJCQlFbGVtLT5Nc2dMZW4gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisJCQkvLyBpZiBkZXF1ZXVlIHN1Y2Nlc3MKKwkJCXN3aXRjaCAoRWxlbS0+TWFjaGluZSkKKwkJCXsKKwkJCQkvLyBTVEEgc3RhdGUgbWFjaGluZXMKKyNpZmRlZglDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQljYXNlIEFTU09DX1NUQVRFX01BQ0hJTkU6CisJCQkJCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLCAmcEFkLT5NbG1lLkFzc29jTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQVVUSF9TVEFURV9NQUNISU5FOgorCQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5BdXRoTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQVVUSF9SU1BfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNZTkNfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuU3luY01hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKwkJCQljYXNlIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FOgorCQkJCQlNbG1lQ250bE1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5DbnRsTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgV1BBX1BTS19TVEFURV9NQUNISU5FOgorCQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5XcGFQc2tNYWNoaW5lLCBFbGVtKTsKKwkJCQkJYnJlYWs7CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkJY2FzZSBMRUFQX1NUQVRFX01BQ0hJTkU6CisJCQkJCUxlYXBNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuTGVhcE1hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWNhc2UgQUlST05FVF9TVEFURV9NQUNISU5FOgorCQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQkJY2FzZSBETFNfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuRGxzTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQkJY2FzZSBBQ1RJT05fU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuQWN0TWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworCisKKworCisJCQkJZGVmYXVsdDoKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRVJST1I6IElsbGVnYWwgbWFjaGluZSAlbGQgaW4gTWxtZUhhbmRsZXIoKVxuIiwgRWxlbS0+TWFjaGluZSkpOworCQkJCQlicmVhazsKKwkJCX0gLy8gZW5kIG9mIHN3aXRjaAorCisJCQkvLyBmcmVlIE1MTUUgZWxlbWVudAorCQkJRWxlbS0+T2NjdXBpZWQgPSBGQUxTRTsKKwkJCUVsZW0tPk1zZ0xlbiA9IDA7CisKKwkJfQorCQllbHNlIHsKKwkJCURCR1BSSU5UX0VSUigoIk1sbWVIYW5kbGVyOiBNbG1lUXVldWUgZW1wdHlcbiIpKTsKKwkJfQorCX0KKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CisJcEFkLT5NbG1lLmJSdW5uaW5nID0gRkFMU0U7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlEZXN0cnVjdG9yIG9mIE1MTUUgKERlc3Ryb3kgcXVldWUsIHN0YXRlIG1hY2hpbmUsIHNwaW4gbG9jayBhbmQgdGltZXIpCisJUGFyYW1ldGVyczoKKwkJQWRhcHRlciAtIE5JQyBBZGFwdGVyIHBvaW50ZXIKKwlQb3N0OgorCQlUaGUgTUxNRSB0YXNrIHdpbGwgbm8gbG9uZ2VyIHdvcmsgcHJvcGVybHkKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVIYWx0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUJPT0xFQU4JCUNhbmNlbGxlZDsKKyNpZmRlZiBSVDMwNzAKKwlVSU5UMzIJCVR4UGluQ2ZnID0gMHgwMDA1MEYwRjsKKyNlbmRpZiAvLyBSVDMwNzAgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBNbG1lSGFsdFxuIikpOworCisJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJeworCQkvLyBkaXNhYmxlIEJFQUNPTiBnZW5lcmF0aW9uIGFuZCBvdGhlciBCRUFDT04gcmVsYXRlZCBoYXJkd2FyZSB0aW1lcnMKKwkJQXNpY0Rpc2FibGVTeW5jKHBBZCk7CisJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCVVDSEFSCQlpOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkvLyBDYW5jZWwgcGVuZGluZyB0aW1lcnMKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXNzb2NUaW1lciwJCSZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsCQkmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwJJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwJCSZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwJCSZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsCQkmQ2FuY2VsbGVkKTsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQl7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmQ2FuY2VsbGVkKTsKKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsCQkmQ2FuY2VsbGVkKTsKKwlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwJCSZDYW5jZWxsZWQpOworCisKKworCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCXsKKwkJLy8gU2V0IExFRAorCQlSVE1QU2V0TEVEKHBBZCwgTEVEX0hBTFQpOworICAgICAgICBSVE1QU2V0U2lnbmFsTEVEKHBBZCwgLTEwMCk7CS8vIEZvcmNlIHNpZ25hbCBzdHJlbmd0aCBMZWQgdG8gYmUgdHVybmVkIG9mZiwgZmlybXdhcmUgaXMgbm90IGRvbmUgaXQuCisjaWZkZWYgUlQyODcwCisgICAgICAgIHsKKyAgICAgICAgICAgIExFRF9DRkdfU1RSVUMgTGVkQ2ZnOworICAgICAgICAgICAgUlRNUF9JT19SRUFEMzIocEFkLCBMRURfQ0ZHLCAmTGVkQ2ZnLndvcmQpOworICAgICAgICAgICAgTGVkQ2ZnLmZpZWxkLkxlZFBvbGFyID0gMDsKKyAgICAgICAgICAgIExlZENmZy5maWVsZC5STGVkTW9kZSA9IDA7CisgICAgICAgICAgICBMZWRDZmcuZmllbGQuR0xlZE1vZGUgPSAwOworICAgICAgICAgICAgTGVkQ2ZnLmZpZWxkLllMZWRNb2RlID0gMDsKKyAgICAgICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIExFRF9DRkcsIExlZENmZy53b3JkKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIFJUMjg3MCAvLworI2lmZGVmIFJUMzA3MAorCQkvLworCQkvLyBUdXJuIG9mZiBMTkFfUEUKKwkJLy8KKwkJaWYgKElTX1JUMzA3MChwQWQpIHx8IElTX1JUMzA3MShwQWQpKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGMEYwOworCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhfUElOX0NGRywgVHhQaW5DZmcpOworCQl9CisjZW5kaWYgLy8gUlQzMDcwIC8vCisJfQorCisJUlRNUHVzZWNEZWxheSg1MDAwKTsgICAgLy8gIDUgbXNlYyB0byBndXJhbnRlZSBBbnQgRGl2ZXJzaXR5IHRpbWVyIGNhbmNlbGVkCisKKwlNbG1lUXVldWVEZXN0cm95KCZwQWQtPk1sbWUuUXVldWUpOworCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gTWxtZUhhbHRcbiIpKTsKK30KKworVk9JRCBNbG1lUmVzZXRSYWxpbmtDb3VudGVycygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCkKK3sKKwlwQWQtPlJhbGlua0NvdW50ZXJzLkxhc3RPbmVTZWNSeE9rRGF0YUNudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0RhdGFDbnQ7CisJLy8gY2xlYXIgYWxsIE9uZVNlY3h4eCBjb3VudGVycy4KKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0JlYWNvblNlbnRDbnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRmFsc2VDQ0FDbnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhGY3NFcnJDbnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0NudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tEYXRhQ250ID0gMDsKKworCS8vIFRPRE86IGZvciBkZWJ1ZyBvbmx5LiB0byBiZSByZW1vdmVkCisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX0JFXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX0JLXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX1ZJXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX1ZPXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX0JFXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX0JLXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX1ZJXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX1ZPXSA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeENvdW50ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4QWdncmVnYXRpb25Db3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQgPSAwOworCisJcmV0dXJuOworfQorCit1bnNpZ25lZCBsb25nIHJ4X0FNU0RVOwordW5zaWduZWQgbG9uZyByeF9Ub3RhbDsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgaXMgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IHRvIC0KKwkJMS4gRGVjaWRlIGlmIGl0J3MgYSByaWdodCB0aW1lIHRvIHR1cm4gb24gUHdyTWdtdCBiaXQgb2YgYWxsCisJCSAgIG91dGdvaWluZyBmcmFtZXMKKwkJMi4gQ2FsY3VsYXRlIENoYW5uZWxRdWFsaXR5IGJhc2VkIG9uIHN0YXRpc3RpY3Mgb2YgdGhlIGxhc3QKKwkJICAgcGVyaW9kLCBzbyB0aGF0IFRYIHJhdGUgd29uJ3QgdG9nZ2xpbmcgdmVyeSBmcmVxdWVudGx5IGJldHdlZW4gYQorCQkgICBzdWNjZXNzZnVsIFRYIGFuZCBhIGZhaWxlZCBUWC4KKwkJMy4gSWYgdGhlIGNhbGN1bGF0ZWQgQ2hhbm5lbFF1YWxpdHkgaW5kaWNhdGVkIGN1cnJlbnQgY29ubmVjdGlvbiBub3QKKwkJICAgaGVhbHRoeSwgdGhlbiBhIFJPQU1pbmcgYXR0ZW1wdCBpcyB0cmllZCBoZXJlLgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisjZGVmaW5lIEFESE9DX0JFQUNPTl9MT1NUX1RJTUUJCSg4Kk9TX0haKSAgLy8gOCBzZWMKK1ZPSUQgTWxtZVBlcmlvZGljRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJVUxPTkcJCQlUeFRvdGFsQ250OworCVBSVE1QX0FEQVBURVIJcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JBRElPX09GRiB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkpKQorCQlyZXR1cm47CisKKwlSVDI4WFhfTUxNRV9QUkVfU0FOSVRZX0NIRUNLKHBBZCk7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJLyogRG8gbm90IHNob3cgUlNTSSB1bnRpbCAiTm9ybWFsIDEgc2Vjb25kIE1sbWUgUGVyaW9kaWNFeGVjIi4gKi8KKwlpZiAoQVRFX09OKHBBZCkpCisJeworCQlpZiAocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJSBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAhPSAoTUxNRV9UQVNLX0VYRUNfTVVMVElQTEUgLSAxKSkKKwl7CisJCQlwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCArKzsKKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gRG8gbm90aGluZyBpZiBtb25pdG9yIG1vZGUgaXMgb24KKwkJaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJCXJldHVybjsKKworCQlpZiAocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJiAweDEpCisJCXsKKwkJCS8vIFRoaXMgaXMgdGhlIGZpeCBmb3Igd2lmaSAxMW4gZXh0ZW5zaW9uIGNoYW5uZWwgb3ZlcmxhcHBpbmcgdGVzdCBjYXNlLiAgZm9yIDI4NjBECisJCQlpZiAoKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID09IDB4MDEwMSkgJiYKKwkJCQkoU1RBX1RHTl9XSUZJX09OKHBBZCkpICYmCisJCQkJKHBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlRvZ2dsZSA9PSBGQUxTRSkpCisKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYT1BfQ1RSTF9DRkcsIDB4MjRCZik7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlRvZ2dsZSA9IFRSVUU7CisJCQkJfQorCQkJCWVsc2UgaWYgKChTVEFfVEdOX1dJRklfT04ocEFkKSkgJiYKKwkJCQkJCSgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA9PSAweDAxMDEpKQorCQkJCXsKKwkJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhPUF9DVFJMX0NGRywgMHgyNDNmKTsKKwkJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iVG9nZ2xlID0gRkFMU0U7CisJCQkJfQorCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcEFkLT5iVXBkYXRlQmNuQ250RG9uZSA9IEZBTFNFOworCisvLwlSRUNCQVRpbWVyVGltZW91dChTeXN0ZW1TcGVjaWZpYzEsRnVuY3Rpb25Db250ZXh0LFN5c3RlbVNwZWNpZmljMixTeXN0ZW1TcGVjaWZpYzMpOworCXBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kICsrOworCisjaWZkZWYgUlQyODcwCisJLy8gZXhlY3V0ZSBldmVyeSAxMDBtcywgdXBkYXRlIHRoZSBUeCBGSUZPIENudCBmb3IgdXBkYXRlIFR4IFJhdGUuCisJTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKHBBZCk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJLy8gZXhlY3V0ZSBldmVyeSA1MDBtcworCWlmICgocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJSA1ID09IDApICYmIFJUTVBBdXRvUmF0ZVN3aXRjaENoZWNrKHBBZCkvKihPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpKSovKQorCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJLy8gcGVyZm9ybSBkeW5hbWljIHR4IHJhdGUgc3dpdGNoaW5nIGJhc2VkIG9uIHBhc3QgVFggaGlzdG9yeQorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKQorCQkJCQkpCisJCQkJJiYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKSkKKwkJCQlNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZyhwQWQpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisJLy8gTm9ybWFsIDEgc2Vjb25kIE1sbWUgUGVyaW9kaWNFeGVjLgorCWlmIChwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCAlTUxNRV9UQVNLX0VYRUNfTVVMVElQTEUgPT0gMCkKKwl7CisgICAgICAgICAgICAgICAgcEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgKys7CisKKyNpZmRlZiBSQUxJTktfQVRFCisgICAgCWlmIChBVEVfT04ocEFkKSkKKyAgICAJeworCQkJLyogcmVxdWVzdCBmcm9tIEJhcm9uIDogbW92ZSB0aGlzIHJvdXRpbmUgZnJvbSBsYXRlciB0byBoZXJlICovCisJCQkvKiBmb3Igc2hvd2luZyBSeCBlcnJvciBjb3VudCBpbiBBVEUgUlhGUkFNRSAqLworICAgICAgICAgICAgTklDVXBkYXRlUmF3Q291bnRlcnMocEFkKTsKKwkJCWlmIChwQWQtPmF0ZS5iUnhGZXIgPT0gMSkKKwkJCXsKKwkJCQlwQWQtPmF0ZS5SeFRvdGFsQ250ICs9IHBBZC0+YXRlLlJ4Q250UGVyU2VjOworCQkJICAgIGF0ZV9wcmludChLRVJOX0VNRVJHICJNbG1lUGVyaW9kaWNFeGVjOiBSeCBwYWNrZXQgY250ID0gJWQvJWRcbiIsIHBBZC0+YXRlLlJ4Q250UGVyU2VjLCBwQWQtPmF0ZS5SeFRvdGFsQ250KTsKKwkJCQlwQWQtPmF0ZS5SeENudFBlclNlYyA9IDA7CisKKwkJCQlpZiAocEFkLT5hdGUuUnhBbnRlbm5hU2VsID09IDApCisJCQkJCWF0ZV9wcmludChLRVJOX0VNRVJHICJNbG1lUGVyaW9kaWNFeGVjOiBSeCBBdmdSc3NpMD0lZCwgQXZnUnNzaTE9JWQsIEF2Z1Jzc2kyPSVkXG5cbiIsCisJCQkJCQlwQWQtPmF0ZS5BdmdSc3NpMCwgcEFkLT5hdGUuQXZnUnNzaTEsIHBBZC0+YXRlLkF2Z1Jzc2kyKTsKKwkJCQllbHNlCisJCQkJCWF0ZV9wcmludChLRVJOX0VNRVJHICJNbG1lUGVyaW9kaWNFeGVjOiBSeCBBdmdSc3NpPSVkXG5cbiIsIHBBZC0+YXRlLkF2Z1Jzc2kwKTsKKwkJCX0KKwkJCU1sbWVSZXNldFJhbGlua0NvdW50ZXJzKHBBZCk7CisJCQlyZXR1cm47CisgICAgCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKworCQlpZiAocnhfVG90YWwpCisJCXsKKworCQkJLy8gcmVzZXQgY291bnRlcnMKKwkJCXJ4X0FNU0RVID0gMDsKKwkJCXJ4X1RvdGFsID0gMDsKKwkJfQorCisJCS8vT1JJQkFUaW1lclRpbWVvdXQocEFkKTsKKworCQkvLyBNZWRpYSBzdGF0dXMgY2hhbmdlZCwgcmVwb3J0IHRvIE5ESVMKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9NRURJQV9TVEFURV9DSEFOR0UpKQorCQl7CisJCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX01FRElBX1NUQVRFX0NIQU5HRSk7CisJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCQkJeworCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKwkJCX0KKwkJfQorCisJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJnBBZC0+TWxtZS5Ob3czMik7CisKKwkJLy8gYWRkIHRoZSBtb3N0IHVwLXRvLWRhdGUgaC93IHJhdyBjb3VudGVycyBpbnRvIHNvZnR3YXJlIHZhcmlhYmxlLCBzbyB0aGF0CisJCS8vIHRoZSBkeW5hbWljIHR1bmluZyBtZWNoYW5pc20gYmVsb3cgYXJlIGJhc2VkIG9uIG1vc3QgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbgorCQlOSUNVcGRhdGVSYXdDb3VudGVycyhwQWQpOworCisjaWZkZWYgUlQyODcwCisJCVJUMjg3MF9XYXRjaERvZyhwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAJCS8vIE5lZWQgc3RhdGlzdGljcyBhZnRlciByZWFkIGNvdW50ZXIuIFNvIHB1dCBhZnRlciBOSUNVcGRhdGVSYXdDb3VudGVycworCQlPUklCQVRpbWVyVGltZW91dChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCS8vIFRoZSB0aW1lIHBlcmlvZCBmb3IgY2hlY2tpbmcgYW50ZW5uYSBpcyBhY2NvcmRpbmcgdG8gdHJhZmZpYworCQl7CisJCQlpZiAocEFkLT5NbG1lLmJFbmFibGVBdXRvQW50ZW5uYUNoZWNrKQorCQkJeworCQkJCVR4VG90YWxDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKworCQkJCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJCQkJCSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50OworCisJCQkJCS8vIGR5bmFtaWMgYWRqdXN0IGFudGVubmEgZXZhbHVhdGlvbiBwZXJpb2QgYWNjb3JkaW5nIHRvIHRoZSB0cmFmZmljCisJCQkJaWYgKFR4VG90YWxDbnQgPiA1MCkKKwkJCQl7CisJCQkJCWlmIChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDEwID09IDApCisJCQkJCXsKKwkJCQkJCUFzaWNFdmFsdWF0ZVJ4QW50KHBBZCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgMyA9PSAwKQorCQkJCQl7CisJCQkJCQlBc2ljRXZhbHVhdGVSeEFudChwQWQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCVNUQU1sbWVQZXJpb2RpY0V4ZWMocEFkKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlNbG1lUmVzZXRSYWxpbmtDb3VudGVycyhwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCXsKKwkJCQkvLyBXaGVuIEFkaG9jIGJlYWNvbiBpcyBlbmFibGVkIGFuZCBSVFMvQ1RTIGlzIGVuYWJsZWQsIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgaGFyZHdhcmUgTUFDIEZTTSB3aWxsIHJ1biBpbnRvIGEgZGVhZGxvY2sKKwkJCQkvLyBhbmQgc2VuZGluZyBDVFMtdG8tc2VsZiBvdmVyIGFuZCBvdmVyLgorCQkJCS8vIFNvZnR3YXJlIFBhdGNoIFNvbHV0aW9uOgorCQkJCS8vIDEuIFBvbGxpbmcgZGVidWcgc3RhdGUgcmVnaXN0ZXIgMHgxMEY0IGV2ZXJ5IG9uZSBzZWNvbmQuCisJCQkJLy8gMi4gSWYgaW4gMHgxMEY0IHRoZSAoKGJpdDI5PT0xKSAmJiAoYml0Nz09MSkpIE9SICgoYml0Mjk9PTEpICYmIChiaXQ1PT0xKSksIGl0IG1lYW5zIHRoZSBkZWFkbG9jayBoYXMgb2NjdXJyZWQuCisJCQkJLy8gMy4gSWYgdGhlIGRlYWRsb2NrIG9jY3VycmVkLCByZXNldCBNQUMvQkJQIGJ5IHNldHRpbmcgMHgxMDA0IHRvIDB4MDAwMSBmb3IgYSB3aGlsZSB0aGVuIHNldHRpbmcgaXQgYmFjayB0byAweDAwMEMgYWdhaW4uCisKKwkJCQlVSU5UMzIJTWFjUmVnID0gMDsKKworCQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgMHgxMEY0LCAmTWFjUmVnKTsKKwkJCQlpZiAoKChNYWNSZWcgJiAweDIwMDAwMDAwKSAmJiAoTWFjUmVnICYgMHg4MCkpIHx8ICgoTWFjUmVnICYgMHgyMDAwMDAwMCkgJiYgKE1hY1JlZyAmIDB4MjApKSkKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgxKTsKKwkJCQkJUlRNUHVzZWNEZWxheSgxKTsKKwkJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweEMpOworCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sKCJXYXJuaW5nLCBNQUMgc3BlY2lmaWMgY29uZGl0aW9uIG9jY3VycyBcbiIpKTsKKwkJCQl9CisJCQl9CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJfQorCisKKwlwQWQtPmJVcGRhdGVCY25DbnREb25lID0gRkFMU0U7Cit9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgU1RBTWxtZVBlcmlvZGljRXhlYygKKwlQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVTE9ORwkJCSAgICBUeFRvdGFsQ250OworCWludCAJaTsKKworLy8KKy8vIFdlIHJldHVybiBoZXJlIGluIEFURSBtb2RlLCBiZWNhdXNlIHRoZSBzdGF0aXN0aWNzCisvLyB0aGF0IEFURSBuZWVkcyBhcmUgbm90IGNvbGxlY3RlZCB2aWEgdGhpcyByb3V0aW5lLgorLy8KKyNpZmRlZiBSQUxJTktfQVRFCisJLy8gSXQgaXMgc3VwcG9zZWQgdGhhdCB3ZSB3aWxsIG5ldmVyIHJlYWNoIGhlcmUgaW4gQVRFIG1vZGUuCisJQVNTRVJUKCEoQVRFX09OKHBBZCkpKTsKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICB7CisgICAgCS8vIFdQQSBNSUMgZXJyb3Igc2hvdWxkIGJsb2NrIGFzc29jaWF0aW9uIGF0dGVtcHQgZm9yIDYwIHNlY29uZHMKKyAgICAJaWYgKHBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jICYmIChwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lICsgKDYwICogT1NfSFopIDwgcEFkLT5NbG1lLk5vdzMyKSkKKyAgICAJCXBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jID0gRkFMU0U7CisgICAgfQorCisgICAgaWYgKChwQWQtPlByZU1lZGlhU3RhdGUgIT0gcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUpICYmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkpCisJeworCQlpZiAocEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCisJCXsKKwkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NUQV9MSU5LVVBfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKwkJfQorCQlwQWQtPlByZU1lZGlhU3RhdGUgPSBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZTsKKwl9CisKKworCisKKyAgIAlBc2ljU3RhQmJwVHVuaW5nKHBBZCk7CisKKwlUeFRvdGFsQ250ID0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsKKwkJCQkJIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgKworCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudDsKKworCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJeworCQkvLyB1cGRhdGUgY2hhbm5lbCBxdWFsaXR5IGZvciBSb2FtaW5nIGFuZCBVSSBMaW5rUXVhbGl0eSBkaXNwbGF5CisJCU1sbWVDYWxjdWxhdGVDaGFubmVsUXVhbGl0eShwQWQsIHBBZC0+TWxtZS5Ob3czMik7CisJfQorCisJLy8gbXVzdCBiZSBBRlRFUiBNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZygpIGJlY2F1c2UgaXQgbmVlZHMgdG8ga25vdyBpZgorCS8vIFJhZGlvIGlzIGN1cnJlbnRseSBpbiBub2lzeSBlbnZpcm9ubWVudAorCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJQXNpY0FkanVzdFR4UG93ZXIocEFkKTsKKworCWlmIChJTkZSQV9PTihwQWQpKQorCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJLy8gQ2hlY2sgRExTIHRpbWUgb3V0LCB0aGVuIHRlYXIgZG93biB0aG9zZSBzZXNzaW9uCisJCVJUTVBDaGVja0RMU1RpbWVPdXQocEFkKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCQkvLyBJcyBQU00gYml0IGNvbnNpc3RlbnQgd2l0aCB1c2VyIHBvd2VyIG1hbmFnZW1lbnQgcG9saWN5PworCQkvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQgd2lsbCBzZXQgUFNNIGJpdCBPTi4KKwkJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorCQlNbG1lQ2hlY2tQc21DaGFuZ2UocEFkLCBwQWQtPk1sbWUuTm93MzIpOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuTGFzdE9uZVNlY1RvdGFsVHhDb3VudCA9IFR4VG90YWxDbnQ7CisKKwkJaWYgKChwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lICsgMSpPU19IWiA8IHBBZC0+TWxtZS5Ob3czMikgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgJiYKKwkJCSgoVHhUb3RhbENudCArIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0NudCA8IDYwMCkpKQorCQl7CisJCQlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgQldfMjApOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBObyBCRUFDT04uIHJlc3RvcmUgUjY2IHRvIHRoZSBsb3cgYm91bmQoJWQpIFxuIiwgKDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKSkpKTsKKwkJfQorCisgICAgICAgIC8vaWYgKChwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgPT0gMCkgJiYKKyAgICAgICAgLy8gICAgKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgPT0gMCkpCisgICAgICAgIHsKKyAgICAJCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUpCisgICAgCQl7CisgICAgCQkgICAgLy8gV2hlbiBBUFNEIGlzIGVuYWJsZWQsIHRoZSBwZXJpb2QgY2hhbmdlcyBhcyAyMCBzZWMKKyAgICAJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgMjApID09IDgpCisgICAgCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwgcEFkLT5Db21tb25DZmcuVHhSYXRlLCBUUlVFKTsKKyAgICAJCX0KKyAgICAJCWVsc2UKKyAgICAJCXsKKyAgICAJCSAgICAvLyBTZW5kIG91dCBhIE5VTEwgZnJhbWUgZXZlcnkgMTAgc2VjIHRvIGluZm9ybSBBUCB0aGF0IFNUQSBpcyBzdGlsbCBhbGl2ZSAoQXZvaWQgYmVpbmcgYWdlIG91dCkKKyAgICAJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgMTApID09IDgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpCisgICAgCQkJCQlSVE1QU2VuZE51bGxGcmFtZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwgcEFkLT5Db21tb25DZmcuVHhSYXRlLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgfQorICAgIAkJfQorICAgICAgICB9CisKKwkJaWYgKENRSV9JU19ERUFEKHBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSkpCisJCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNTUNISyAtIE5vIEJFQUNPTi4gRGVhZCBDUUkuIEF1dG8gUmVjb3ZlcnkgYXR0ZW1wdCAjJWxkXG4iLCBwQWQtPlJhbGlua0NvdW50ZXJzLkJhZENRSUF1dG9SZWNvdmVyeUNvdW50KSk7CisJCQlwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQUmVwb3J0RmxhZyA9IFRSVUU7CisJCQlwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQTGlua0Rvd25UaW1lID0gcEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZTsKKworCQkJLy8gTG9zdCBBUCwgc2VuZCBkaXNjb25uZWN0ICYgbGluayBkb3duIGV2ZW50CisJCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApCisJCQl7CisgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAgICAgICAgIC8vc2VuZCBkaXNhc3NvY2lhdGUgZXZlbnQgdG8gd3BhX3N1cHBsaWNhbnQKKyAgICAgICAgICAgICAgICBtZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisgICAgICAgICAgICAgICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfRElTQVNTT0NfRVZFTlRfRkxBRzsKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgICAgICAgICAgICAgbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBNQUNfQUREUl9MRU4pOworICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJCQkvLyBSVE1QUGF0Y2hNYWNCYnBCdWcocEFkKTsKKwkJCU1sbWVBdXRvUmVjb25uZWN0TGFzdFNTSUQocEFkKTsKKwkJfQorCQllbHNlIGlmIChDUUlfSVNfQkFEKHBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSkpCisJCXsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuQmFkQ1FJQXV0b1JlY292ZXJ5Q291bnQgKys7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNTUNISyAtIEJhZCBDUUkuIEF1dG8gUmVjb3ZlcnkgYXR0ZW1wdCAjJWxkXG4iLCBwQWQtPlJhbGlua0NvdW50ZXJzLkJhZENRSUF1dG9SZWNvdmVyeUNvdW50KSk7CisJCQlNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKHBBZCk7CisJCX0KKworCQkvLyBBZGQgYXV0byBzZWFtbGVzcyByb2FtaW5nCisJCWlmIChwQWQtPlN0YUNmZy5iRmFzdFJvYW1pbmcpCisJCXsKKwkJCVNIT1JUCWRCbVRvUm9hbSA9IChTSE9SVClwQWQtPlN0YUNmZy5kQm1Ub1JvYW07CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJzc2k9JWQsIGRCbVRvUm9hbT0lZFxuIiwgUlRNUE1heFJzc2kocEFkLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyKSwgKENIQVIpZEJtVG9Sb2FtKSk7CisKKwkJCWlmIChSVE1QTWF4UnNzaShwQWQsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMSwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTIpIDw9IChDSEFSKWRCbVRvUm9hbSkKKwkJCXsKKwkJCQlNbG1lQ2hlY2tGb3JGYXN0Um9hbWluZyhwQWQsIHBBZC0+TWxtZS5Ob3czMik7CisJCQl9CisJCX0KKwl9CisJZWxzZSBpZiAoQURIT0NfT04ocEFkKSkKKwl7CisJCS8vcmFkYXIgZGV0ZWN0CisJCWlmICgocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQorCQkJJiYgKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpCisJCQkmJiBSYWRhckNoYW5uZWxDaGVjayhwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKQorCQl7CisJCQlSYWRhckRldGVjdFBlcmlvZGljKHBBZCk7CisJCX0KKworCQkvLyBJZiBhbGwgcGVlcnMgbGVhdmUsIGFuZCB0aGlzIFNUQSBiZWNvbWVzIHRoZSBsYXN0IG9uZSBpbiB0aGlzIElCU1MsIHRoZW4gY2hhbmdlIE1lZGlhU3RhdGUKKwkJLy8gdG8gRElTQ09OTkVDVEVELiBCdXQgc3RpbGwgaG9sZGluZyB0aGlzIElCU1MgKGkuZS4gc2VuZGluZyBCRUFDT04pIHNvIHRoYXQgb3RoZXIgU1RBcyBjYW4KKwkJLy8gam9pbiBsYXRlci4KKwkJaWYgKChwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lICsgQURIT0NfQkVBQ09OX0xPU1RfVElNRSA8IHBBZC0+TWxtZS5Ob3czMikgJiYKKwkJCU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJeworCQkJTUxNRV9TVEFSVF9SRVFfU1RSVUNUICAgICBTdGFydFJlcTsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBleGNlc3NpdmUgQkVBQ09OIGxvc3QsIGxhc3QgU1RBIGluIHRoaXMgSUJTUywgTWVkaWFTdGF0ZT1EaXNjb25uZWN0ZWRcbiIpKTsKKwkJCUxpbmtEb3duKHBBZCwgRkFMU0UpOworCisJCQlTdGFydFBhcm1GaWxsKHBBZCwgJlN0YXJ0UmVxLCBwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRMZW4pOworCQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NUQVJUX1JFUSwgc2l6ZW9mKE1MTUVfU1RBUlRfUkVRX1NUUlVDVCksICZTdGFydFJlcSk7CisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX1NUQVJUOworCQl9CisKKwkJZm9yIChpID0gMTsgaSA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCisJCXsKKwkJCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV07CisKKwkJCWlmIChwRW50cnktPlZhbGlkQXNDTEkgPT0gRkFMU0UpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwRW50cnktPkxhc3RCZWFjb25SeFRpbWUgKyBBREhPQ19CRUFDT05fTE9TVF9USU1FIDwgcEFkLT5NbG1lLk5vdzMyKQorCQkJCU1hY1RhYmxlRGVsZXRlRW50cnkocEFkLCBwRW50cnktPkFpZCwgcEVudHJ5LT5BZGRyKTsKKwkJfQorCX0KKwllbHNlIC8vIG5vIElORlJBIG5vciBBREhPQyBjb25uZWN0aW9uCisJeworCisJCWlmIChwQWQtPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJICYmCisgICAgICAgICAgICAoKHBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSArIDMwICogT1NfSFopID4gcEFkLT5NbG1lLk5vdzMyKSkKKwkJCWdvdG8gU0tJUF9BVVRPX1NDQU5fQ09OTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcEFkLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IEZBTFNFOworCisJCWlmICgocEFkLT5TdGFDZmcuYkF1dG9SZWNvbm5lY3QgPT0gVFJVRSkKKwkJCSYmIFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkKKwkJCSYmIChNbG1lVmFsaWRhdGVTU0lEKHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKSA9PSBUUlVFKSkKKwkJeworCQkJaWYgKChwQWQtPlNjYW5UYWIuQnNzTnI9PTApICYmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkpCisJCQl7CisJCQkJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QJICAgU2NhblJlcTsKKworCQkJCWlmICgocEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lICsgMTAgKiBPU19IWikgPCBwQWQtPk1sbWUuTm93MzIpCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTVEFNbG1lUGVyaW9kaWNFeGVjKCk6Q05UTCAtIFNjYW5UYWIuQnNzTnI9PTAsIHN0YXJ0IGEgbmV3IEFDVElWRSBzY2FuIFNTSURbJXNdXG4iLCBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQpKTsKKwkJCQkJU2NhblBhcm1GaWxsKHBBZCwgJlNjYW5SZXEsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuLCBCU1NfQU5ZLCBTQ0FOX0FDVElWRSk7CisJCQkJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TQ0FOX1JFUSwgc2l6ZW9mKE1MTUVfU0NBTl9SRVFfU1RSVUNUKSwgJlNjYW5SZXEpOworCQkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47CisJCQkJCS8vIFJlc2V0IE1pc3NlZCBzY2FuIG51bWJlcgorCQkJCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBwQWQtPk1sbWUuTm93MzI7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKQkvLyBRdWl0IHRoZSBmb3JldmVyIHNjYW4gd2hlbiBpbiBhIHZlcnkgY2xlYW4gcm9vbQorCQkJCQlNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKHBBZCk7CisJCQl9CisJCQllbHNlIGlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkKKwkJCXsKKwkJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgNykgPT0gMCkKKwkJCQl7CisJCQkJCU1sbWVBdXRvU2NhbihwQWQpOworCQkJCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBwQWQtPk1sbWUuTm93MzI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLyBSb2dlciBzeW5jIENhcnJpZXIKKwkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID09IFRSVUUpCisJCQkJCXsKKwkJCQkJCWlmICgocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSA1KSA9PSAxKQorCQkJCQkJCU1sbWVBdXRvUmVjb25uZWN0TGFzdFNTSUQocEFkKTsKKwkJCQkJfQorCQkJCQllbHNlCisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCQkJCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworU0tJUF9BVVRPX1NDQU5fQ09OTjoKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgIGlmICgocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5UWEJBYml0bWFwICE9MCkgJiYgKHBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24gPT0gRkFMU0UpKQorCXsKKwkJcEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbiA9IFRSVUU7CisJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgSFRfRk9SQ0VSVFNDVFMsICBBTExOX1NFVFBST1RFQ1QsIEZBTFNFLCBGQUxTRSk7CisJfQorCWVsc2UgaWYgKChwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlRYQkFiaXRtYXAgPT0wKSAmJiAocEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbiA9PSBUUlVFKSkKKwl7CisJCXBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24gPSBGQUxTRTsKKwkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCAgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgRkFMU0UpOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NDQU5fMjA0MCkpCisJCVRyaUV2ZW50Q291bnRlck1haW50ZW5hbmNlKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcmV0dXJuOworfQorCisvLyBMaW5rIGRvd24gcmVwb3J0CitWT0lEIExpbmtEb3duRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisKKwlSVE1QX0FEQVBURVIgKnBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisKKwlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOworCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisgICAgcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKK30KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIE1sbWVBdXRvU2NhbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gRHJpdmVyIGF1dG8gc2NhblxuIikpOworCQlNbG1lRW5xdWV1ZShwQWQsCisJCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCQlPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwKKwkJCQkJMCwKKwkJCQkJTlVMTCk7CisJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwl9Cit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCisKKwkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCWlmICgocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpICYmCisJCShNbG1lVmFsaWRhdGVTU0lEKHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKSA9PSBUUlVFKSkKKwl7CisJCU5ESVNfODAyXzExX1NTSUQgT2lkU3NpZDsKKwkJT2lkU3NpZC5Tc2lkTGVuZ3RoID0gcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuOworCQlOZGlzTW92ZU1lbW9yeShPaWRTc2lkLlNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEcml2ZXIgYXV0byByZWNvbm5lY3QgdG8gbGFzdCBPSURfODAyXzExX1NTSUQgc2V0dGluZyAtICVzLCBsZW4gLSAlZFxuIiwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4pKTsKKwkJTWxtZUVucXVldWUocEFkLAorCQkJCQlNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKwkJCQkJT0lEXzgwMl8xMV9TU0lELAorCQkJCQlzaXplb2YoTkRJU184MDJfMTFfU1NJRCksCisJCQkJCSZPaWRTc2lkKTsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVZhbGlkYXRlIFNTSUQgZm9yIGNvbm5lY3Rpb24gdHJ5IGFuZCByZXNjYW4gcHVycG9zZQorCVZhbGlkIFNTSUQgd2lsbCBoYXZlIHZpc2libGUgY2hhcnMgb25seS4KKwlUaGUgdmFsaWQgbGVuZ3RoIGlzIGZyb20gMCB0byAzMi4KKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1sbWVWYWxpZGF0ZVNTSUQoCisJSU4gUFVDSEFSCXBTc2lkLAorCUlOIFVDSEFSCVNzaWRMZW4pCit7CisJaW50CWluZGV4OworCisJaWYgKFNzaWRMZW4gPiBNQVhfTEVOX09GX1NTSUQpCisJCXJldHVybiAoRkFMU0UpOworCisJLy8gQ2hlY2sgZWFjaCBjaGFyYWN0ZXIgdmFsdWUKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBTc2lkTGVuOyBpbmRleCsrKQorCXsKKwkJaWYgKHBTc2lkW2luZGV4XSA8IDB4MjApCisJCQlyZXR1cm4gKEZBTFNFKTsKKwl9CisKKwkvLyBBbGwgY2hlY2tlZAorCXJldHVybiAoVFJVRSk7Cit9CisKK1ZPSUQgTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFVDSEFSCQkJCSpwcFRhYmxlLAorCUlOIFBVQ0hBUgkJCQlwVGFibGVTaXplLAorCUlOIFBVQ0hBUgkJCQlwSW5pdFR4UmF0ZUlkeCkKK3sKKwlkbworCXsKKwkJLy8gZGVjaWRlIHRoZSByYXRlIHRhYmxlIGZvciB0dW5pbmcKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZVRhYmxlU2l6ZSA+IDApCisJCXsKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlOworCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGVbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGVbMV07CisKKwkJCWJyZWFrOworCQl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiBBREhPQ19PTihwQWQpKQorCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkgJiYKKwkJCQkocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmCisJCQkJKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHgwMCkgfHwgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkpKQorCQkJey8vIDExTiAxUyBBZGhvYworCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVM7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4xU1swXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4xU1sxXTsKKworCQkJfQorCQkJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkgJiYKKwkJCQkJKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAweGZmKSAmJgorCQkJCQkocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDB4ZmYpICYmCisJCQkJCShwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQorCQkJey8vIDExTiAyUyBBZGhvYworCQkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTWzBdOworCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMF07CisJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMV07CisJCQkJfQorCisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJaWYgKChwRW50cnktPlJhdGVMZW4gPT0gNCkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkJJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAwKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDApCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJCSkKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQjsKKwkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQlswXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJbMV07CisKKwkJCX0KKwkJCWVsc2UgaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxNCkKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkc7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJHWzBdOworCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdbMV07CisKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExRzsKKwkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExR1swXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUdbMV07CisKKwkJCX0KKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJLy9pZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gKyBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID09IDEyKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gPT0gMHhmZikgJiYKKwkJLy8JKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAweDAwKSB8fCAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKSkpCisJCWlmICgocEVudHJ5LT5SYXRlTGVuID09IDEyKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmCisJCQkoKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAweDAwKSB8fCAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMSkpKQorCQl7Ly8gMTFCR04gMVMgQVAKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04xUzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04xU1swXTsKKwkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMVNbMV07CisKKwkJCWJyZWFrOworCQl9CisKKwkJLy9lbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gMTIpICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAweGZmKSAmJgorCQkvLwkocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMHhmZikgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikpCisJCWlmICgocEVudHJ5LT5SYXRlTGVuID09IDEyKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmCisJCQkocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDB4ZmYpICYmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAyKSkKKwkJey8vIDExQkdOIDJTIEFQCisJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yUzsKKwkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNbMF07CisJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU1sxXTsKKworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kOworCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kWzBdOworCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNGb3JBQmFuZFsxXTsKKworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQkvL2Vsc2UgaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAweGZmKSAmJiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdID09IDB4MDApIHx8IChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpKSkKKwkJaWYgKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHgwMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDEpKSkKKwkJey8vIDExTiAxUyBBUAorCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4xUzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4xU1sxXTsKKworCQkJYnJlYWs7CisJCX0KKworCQkvL2Vsc2UgaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAweGZmKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMHhmZikgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikpCisJCWlmICgocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHhmZikgJiYgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDIpKQorCQl7Ly8gMTFOIDJTIEFQCisJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yUzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQ7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzBdOworCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMV07CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCS8vZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gPT0gNCkgJiYgKHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gMCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkKKwkJaWYgKChwRW50cnktPlJhdGVMZW4gPT0gNCkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vSXZlcnNvbiBtYXJrIGZvciBBZGhvYyBiIG1vZGUsc3RhIHdpbGwgdXNlIHJhdGUgNTQgIE1icHMgd2hlbiBjb25uZWN0IHdpdGggc3RhIGIvZy9uIG1vZGUKKy8vCQkJJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAwKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDApCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkpCisJCXsvLyBCIG9ubHkgQVAKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCOworCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJbMV07CisKKwkJCWJyZWFrOworCQl9CisKKwkJLy9lbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPiA4KSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gPT0gMCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdID09IDApKQorCQlpZiAoKHBFbnRyeS0+UmF0ZUxlbiA+IDgpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDApICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCSkKKwkJey8vIEIvRyAgbWl4ZWQgQVAKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCRzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1swXTsKKwkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdbMV07CisKKwkJCWJyZWFrOworCQl9CisKKwkJLy9lbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gOCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkKKwkJaWYgKChwRW50cnktPlJhdGVMZW4gPT0gOCkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCSYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMCkgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAwKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJKQorCQl7Ly8gRyBvbmx5IEFQCisJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExRzsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzBdOworCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzFdOworCisJCQlicmVhazsKKwkJfQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkKKwkJCWlmICgocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDApICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQl7CS8vIExlZ2FjeSBtb2RlCisJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSA8PSBSQVRFXzExKQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUI7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzBdOworCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJbMV07CisJCQkJfQorCQkJCWVsc2UgaWYgKChwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgPiBSQVRFXzExKSAmJiAocEFkLT5Db21tb25DZmcuTWluVHhSYXRlID4gUkFURV8xMSkpCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExRzsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUdbMF07CisJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExR1sxXTsKKworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkc7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1swXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1sxXTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAxKQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4xUzsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4xU1swXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIkRSUzogdW5rb3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDFTIEFQIFxuIikpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTWzBdOworCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiRFJTOiB1bmtvd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMlMgQVAgXG4iKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAxKQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4xUzsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4xU1swXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIkRSUzogdW5rb3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDFTIEFQIFxuIikpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQ7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFswXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFsxXTsKKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiRFJTOiB1bmtvd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMlMgQVAgXG4iKSk7CisJCQkJfQorCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiRFJTOiB1bmtvd24gbW9kZSAoU3VwUmF0ZUxlbj0lZCwgRXh0UmF0ZUxlbj0lZCwgTUNTU2V0WzBdPTB4JXgsIE1DU1NldFsxXT0weCV4KVxuIiwKKwkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuLCBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuLCBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSwgcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0pKTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0gd2hpbGUoRkFMU0UpOworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBjaGVja3MgaWYgdGhlcmUncmUgb3RoZXIgQVBzIG91dCB0aGVyZSBjYXBhYmxlIGZvcgorCQlyb2FtaW5nLiBDYWxsZXIgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIG9ubHkgd2hlbiBMaW5rIHVwIGluIElORlJBIG1vZGUKKwkJYW5kIGNoYW5uZWwgcXVhbGl0eSBpcyBiZWxvdyBDUUlfR09PRF9USFJFU0hPTEQuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU91dHB1dDoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVDaGVja0ZvclJvYW1pbmcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUxPTkcJTm93MzIpCit7CisJVVNIT1JUCSAgIGk7CisJQlNTX1RBQkxFICAqcFJvYW1UYWIgPSAmcEFkLT5NbG1lQXV4LlJvYW1UYWI7CisJQlNTX0VOVFJZICAqcEJzczsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBNbG1lQ2hlY2tGb3JSb2FtaW5nXG4iKSk7CisJLy8gcHV0IGFsbCByb2FtaW5nIGNhbmRpZGF0ZXMgaW50byBSb2FtVGFiLCBhbmQgc29ydCBpbiBSU1NJIG9yZGVyCisJQnNzVGFibGVJbml0KHBSb2FtVGFiKTsKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5TY2FuVGFiLkJzc05yOyBpKyspCisJeworCQlwQnNzID0gJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtpXTsKKworCQlpZiAoKHBCc3MtPkxhc3RCZWFjb25SeFRpbWUgKyBCRUFDT05fTE9TVF9USU1FKSA8IE5vdzMyKQorCQkJY29udGludWU7CSAvLyBBUCBkaXNhcHBlYXIKKwkJaWYgKHBCc3MtPlJzc2kgPD0gUlNTSV9USFJFU0hPTERfRk9SX1JPQU1JTkcpCisJCQljb250aW51ZTsJIC8vIFJTU0kgdG9vIHdlYWsuIGZvcmdldCBpdC4KKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBCc3MtPkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCkpCisJCQljb250aW51ZTsJIC8vIHNraXAgY3VycmVudCBBUAorCQlpZiAocEJzcy0+UnNzaSA8IChwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCArIFJTU0lfREVMVEEpKQorCQkJY29udGludWU7CSAvLyBvbmx5IEFQIHdpdGggc3Ryb25nZXIgUlNTSSBpcyBlbGlnaWJsZSBmb3Igcm9hbWluZworCisJCS8vIEFQIHBhc3NpbmcgYWxsIGFib3ZlIHJ1bGVzIGlzIHB1dCBpbnRvIHJvYW1pbmcgY2FuZGlkYXRlIHRhYmxlCisJCU5kaXNNb3ZlTWVtb3J5KCZwUm9hbVRhYi0+QnNzRW50cnlbcFJvYW1UYWItPkJzc05yXSwgcEJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOworCQlwUm9hbVRhYi0+QnNzTnIgKz0gMTsKKwl9CisKKwlpZiAocFJvYW1UYWItPkJzc05yID4gMCkKKwl7CisJCS8vIGNoZWNrIENudGxNYWNoaW5lLkN1cnJTdGF0ZSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBORElTIFNldE9JRCByZXF1ZXN0CisJCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkKKwkJeworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5Qb29yQ1FJUm9hbWluZ0NvdW50ICsrOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBSb2FtaW5nIGF0dGVtcHQgIyVsZFxuIiwgcEFkLT5SYWxpbmtDb3VudGVycy5Qb29yQ1FJUm9hbWluZ0NvdW50KSk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ST0FNSU5HX1JFUSwgMCwgTlVMTCk7CisJCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJCX0KKwl9CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IE1sbWVDaGVja0ZvclJvYW1pbmcoIyBvZiBjYW5kaWRhdGU9ICVkKVxuIixwUm9hbVRhYi0+QnNzTnIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIHRoZXJlJ3JlIG90aGVyIEFQcyBvdXQgdGhlcmUgY2FwYWJsZSBmb3IKKwkJcm9hbWluZy4gQ2FsbGVyIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBvbmx5IHdoZW4gbGluayB1cCBpbiBJTkZSQSBtb2RlCisJCWFuZCBjaGFubmVsIHF1YWxpdHkgaXMgYmVsb3cgQ1FJX0dPT0RfVEhSRVNIT0xELgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlPdXRwdXQ6CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lQ2hlY2tGb3JGYXN0Um9hbWluZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVTE9ORwkJCU5vdykKK3sKKwlVU0hPUlQJCWk7CisJQlNTX1RBQkxFCSpwUm9hbVRhYiA9ICZwQWQtPk1sbWVBdXguUm9hbVRhYjsKKwlCU1NfRU5UUlkJKnBCc3M7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gTWxtZUNoZWNrRm9yRmFzdFJvYW1pbmdcbiIpKTsKKwkvLyBwdXQgYWxsIHJvYW1pbmcgY2FuZGlkYXRlcyBpbnRvIFJvYW1UYWIsIGFuZCBzb3J0IGluIFJTU0kgb3JkZXIKKwlCc3NUYWJsZUluaXQocFJvYW1UYWIpOworCWZvciAoaSA9IDA7IGkgPCBwQWQtPlNjYW5UYWIuQnNzTnI7IGkrKykKKwl7CisJCXBCc3MgPSAmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W2ldOworCisgICAgICAgIGlmICgocEJzcy0+UnNzaSA8PSAtNTApICYmIChwQnNzLT5DaGFubmVsID09IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKQorCQkJY29udGludWU7CSAvLyBSU1NJIHRvbyB3ZWFrLiBmb3JnZXQgaXQuCisJCWlmIChNQUNfQUREUl9FUVVBTChwQnNzLT5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpKQorCQkJY29udGludWU7CSAvLyBza2lwIGN1cnJlbnQgQVAKKwkJaWYgKCFTU0lEX0VRVUFMKHBCc3MtPlNzaWQsIHBCc3MtPlNzaWRMZW4sIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pKQorCQkJY29udGludWU7CSAvLyBza2lwIGRpZmZlcmVudCBTU0lECisgICAgICAgIGlmIChwQnNzLT5Sc3NpIDwgKFJUTVBNYXhSc3NpKHBBZCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMikgKyBSU1NJX0RFTFRBKSkKKwkJCWNvbnRpbnVlOwkgLy8gc2tpcCBBUCB3aXRob3V0IGJldHRlciBSU1NJCisKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTGFzdFJzc2kwID0gJWQsIHBCc3MtPlJzc2kgPSAlZFxuIiwgUlRNUE1heFJzc2kocEFkLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyKSwgcEJzcy0+UnNzaSkpOworCQkvLyBBUCBwYXNzaW5nIGFsbCBhYm92ZSBydWxlcyBpcyBwdXQgaW50byByb2FtaW5nIGNhbmRpZGF0ZSB0YWJsZQorCQlOZGlzTW92ZU1lbW9yeSgmcFJvYW1UYWItPkJzc0VudHJ5W3BSb2FtVGFiLT5Cc3NOcl0sIHBCc3MsIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJcFJvYW1UYWItPkJzc05yICs9IDE7CisJfQorCisJaWYgKHBSb2FtVGFiLT5Cc3NOciA+IDApCisJeworCQkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCQlpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpCisJCXsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuUG9vckNRSVJvYW1pbmdDb3VudCArKzsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gUm9hbWluZyBhdHRlbXB0ICMlbGRcbiIsIHBBZC0+UmFsaW5rQ291bnRlcnMuUG9vckNRSVJvYW1pbmdDb3VudCkpOworCQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfUk9BTUlOR19SRVEsIDAsIE5VTEwpOworCQkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCQl9CisJfQorCS8vIE1heWJlIHNpdGUgc3VydmV5IHJlcXVpcmVkCisJZWxzZQorCXsKKwkJaWYgKChwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgKyAxMCAqIDEwMDApIDwgTm93KQorCQl7CisJCQkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBSb2FtaW5nLCBObyBlbGlnYWJsZSBlbnRyeSwgdHJ5IG5ldyBzY2FuIVxuIikpOworCQkJcEFkLT5TdGFDZmcuU2NhbkNudCA9IDI7CisJCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBOb3c7CisJCQlNbG1lQXV0b1NjYW4ocEFkKTsKKwkJfQorCX0KKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBNbG1lQ2hlY2tGb3JGYXN0Um9hbWluZyAoQnNzTnI9JWQpXG4iLCBwUm9hbVRhYi0+QnNzTnIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgY2FsY3VsYXRlcyBUeFBFUiwgUnhQRVIgb2YgdGhlIHBhc3QgTi1zZWMgcGVyaW9kLiBBbmQKKwkJYWNjb3JkaW5nIHRvIHRoZSBjYWxjdWxhdGlvbiByZXN1bHQsIENoYW5uZWxRdWFsaXR5IGlzIGNhbGN1bGF0ZWQgaGVyZQorCQl0byBkZWNpZGUgaWYgY3VycmVudCBBUCBpcyBzdGlsbCBkb2luZyB0aGUgam9iLgorCisJCUlmIENoYW5uZWxRdWFsaXR5IGlzIG5vdCBnb29kLCBhIFJPQU1pbmcgYXR0ZW1wdCBtYXkgYmUgdHJpZWQgbGF0ZXIuCisJT3V0cHV0OgorCQlTdGFDZmcuQ2hhbm5lbFF1YWxpdHkgLSAwLi4xMDAKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTk9URTogVGhpcyByb3V0aW5lIGRlY2lkZSBjaGFubmxlIHF1YWxpdHkgYmFzZWQgb24gUlggQ1JDIGVycm9yIHJhdGlvLgorCQlDYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSBhIGZ1bmN0aW9uIGNhbGwgdG8gTklDVXBkYXRlUmF3Q291bnRlcnMocEFkKQorCQlpcyBwZXJmb3JtZWQgcmlnaHQgYmVmb3JlIHRoaXMgcm91dGluZSwgc28gdGhhdCB0aGlzIHJvdXRpbmUgY2FuIGRlY2lkZQorCQljaGFubmVsIHF1YWxpdHkgYmFzZWQgb24gdGhlIG1vc3QgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUNhbGN1bGF0ZUNoYW5uZWxRdWFsaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HIE5vdzMyKQoreworCVVMT05HIFR4T2tDbnQsIFR4Q250LCBUeFBFUiwgVHhQUlI7CisJVUxPTkcgUnhDbnQsIFJ4UEVSOworCVVDSEFSIE5vclJzc2k7CisJQ0hBUiAgTWF4UnNzaTsKKwlVTE9ORyBCZWFjb25Mb3N0VGltZSA9IEJFQUNPTl9MT1NUX1RJTUU7CisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vIFJvZ2VyIHN5bmMgQ2FycmllcgorCS8vIGxvbmdlciBiZWFjb24gbG9zdCB0aW1lIHdoZW4gY2FycmllciBkZXRlY3Rpb24gZW5hYmxlZAorCWlmIChwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9PSBUUlVFKQorCXsKKwkJQmVhY29uTG9zdFRpbWUgPSBCRUFDT05fTE9TVF9USU1FICsgQkVBQ09OX0xPU1RfVElNRS8yOworCX0KKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKKwlNYXhSc3NpID0gUlRNUE1heFJzc2kocEFkLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyKTsKKworCS8vCisJLy8gY2FsY3VsYXRlIFRYIHBhY2tldCBlcnJvciByYXRpbyBhbmQgVFggcmV0cnkgcmF0aW8gLSBpZiB0b28gZmV3IFRYIHNhbXBsZXMsIHNraXAgVFggcmVsYXRlZCBzdGF0aXN0aWNzCisJLy8KKwlUeE9rQ250ID0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudDsKKwlUeENudCA9IFR4T2tDbnQgKyBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50OworCWlmIChUeENudCA8IDUpCisJeworCQlUeFBFUiA9IDA7CisJCVR4UFJSID0gMDsKKwl9CisJZWxzZQorCXsKKwkJVHhQRVIgPSAocEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudCAqIDEwMCkgLyBUeENudDsKKwkJVHhQUlIgPSAoKFR4Q250IC0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50KSAqIDEwMCkgLyBUeENudDsKKwl9CisKKwkvLworCS8vIGNhbGN1bGF0ZSBSWCBQRVIgLSBkb24ndCB0YWtlIFJ4UEVSIGludG8gY29uc2lkZXJhdGlvbiBpZiB0b28gZmV3IHNhbXBsZQorCS8vCisJUnhDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tDbnQgKyBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4RmNzRXJyQ250OworCWlmIChSeENudCA8IDUpCisJCVJ4UEVSID0gMDsKKwllbHNlCisJCVJ4UEVSID0gKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhGY3NFcnJDbnQgKiAxMDApIC8gUnhDbnQ7CisKKwkvLworCS8vIGRlY2lkZSBDaGFubmVsUXVhbGl0eSBiYXNlZCBvbjogMSlsYXN0IEJFQUNPTiByZWNlaXZlZCB0aW1lLCAyKWxhc3QgUlNTSSwgMylUeFBFUiwgYW5kIDQpUnhQRVIKKwkvLworCWlmIChJTkZSQV9PTihwQWQpICYmCisJCShwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgPCAyKSAmJiAvLyBubyBoZWF2eSB0cmFmZmljCisJCShwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lICsgQmVhY29uTG9zdFRpbWUgPCBOb3czMikpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCRUFDT04gbG9zdCA+ICVsZCBtc2VjIHdpdGggVHhPa0NudD0lbGQgLT4gQ1FJPTBcbiIsIEJlYWNvbkxvc3RUaW1lLCBUeE9rQ250KSk7CisJCXBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSA9IDA7CisJfQorCWVsc2UKKwl7CisJCS8vIE5vcm1hbGl6ZSBSc3NpCisJCWlmIChNYXhSc3NpID4gLTQwKQorCQkJTm9yUnNzaSA9IDEwMDsKKwkJZWxzZSBpZiAoTWF4UnNzaSA8IC05MCkKKwkJCU5vclJzc2kgPSAwOworCQllbHNlCisJCQlOb3JSc3NpID0gKE1heFJzc2kgKyA5MCkgKiAyOworCisJCS8vIENoYW5uZWxRdWFsaXR5ID0gVzEqUlNTSSArIFcyKlR4UFJSICsgVzMqUnhQRVIJIChSU1NJIDAuLjEwMCksIChUeFBFUiAxMDAuLjApLCAoUnhQRVIgMTAwLi4wKQorCQlwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkgPSAoUlNTSV9XRUlHSFRJTkcgKiBOb3JSc3NpICsKKwkJCQkJCQkJICAgVFhfV0VJR0hUSU5HICogKDEwMCAtIFR4UFJSKSArCisJCQkJCQkJCSAgIFJYX1dFSUdIVElORyogKDEwMCAtIFJ4UEVSKSkgLyAxMDA7CisJCWlmIChwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkgPj0gMTAwKQorCQkJcEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ID0gMTAwOworCX0KKworfQorCitWT0lEIE1sbWVTZXRUeFJhdGUoCisJSU4gUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOIFBNQUNfVEFCTEVfRU5UUlkJCXBFbnRyeSwKKwlJTiBQUlRNUF9UWF9SQVRFX1NXSVRDSAlwVHhSYXRlKQoreworCVVDSEFSCU1heE1vZGUgPSBNT0RFX09GRE07CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlNYXhNb2RlID0gTU9ERV9IVEdSRUVORklFTEQ7CisKKwlpZiAocFR4UmF0ZS0+U1RCQyAmJiAocEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlLmZpZWxkLlNUQkMpICYmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQorCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU1RCQyA9IFNUQkNfVVNFOworCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisKKwlpZiAocFR4UmF0ZS0+Q3Vyck1DUyA8IE1DU19BVVRPKQorCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID0gcFR4UmF0ZS0+Q3Vyck1DUzsKKworCWlmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID4gNykKKwkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisKKyAgIAlpZiAoQURIT0NfT04ocEFkKSkKKwl7CisJCS8vIElmIHBlZXIgYWRob2MgaXMgYi1vbmx5IG1vZGUsIHdlIGNhbid0IHNlbmQgMTFnIHJhdGUuCisJCXBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfODAwOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5TVEJDCT0gU1RCQ19OT05FOworCisJCS8vCisJCS8vIEZvciBBZGhvYyBNT0RFX0NDSywgZHJpdmVyIHdpbGwgdXNlIEFkaG9jQk9ubHlKb2luZWQgZmxhZyB0byByb2xsIGJhY2sgdG8gQiBvbmx5IGlmIG5lY2Vzc2FyeQorCQkvLworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFCT0gcFR4UmF0ZS0+TW9kZTsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MJCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKworCQkvLyBQYXRjaCBzcGVlZCBlcnJvciBpbiBzdGF0dXMgcGFnZQorCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREU7CisJfQorCWVsc2UKKwl7CisJCWlmIChwVHhSYXRlLT5Nb2RlIDw9IE1heE1vZGUpCisJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IHBUeFJhdGUtPk1vZGU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKHBUeFJhdGUtPlNob3J0R0kgJiYgKHBBZC0+U3RhQ2ZnLk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJKSkKKwkJCXBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfNDAwOworCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkvLyBSZWV4YW0gZWFjaCBiYW5kd2lkdGgncyBTR0kgc3VwcG9ydC4KKwkJaWYgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID09IEdJXzQwMCkKKwkJeworCQkJaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5CVyA9PSBCV18yMCkgJiYgKCFDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUpKSkKKwkJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKwkJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuQlcgPT0gQldfNDApICYmICghQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFKSkpCisJCQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7CisJCX0KKworCQkvLyBUdXJuIFJUUy9DVFMgcmF0ZSB0byA2TWJwcy4KKwkJaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gMCkgJiYgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgIT0gMCkpCisJCXsKKwkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwkJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJaWYgKHBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24pCisJCQl7CisJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBIVF9GT1JDRVJUU0NUUywgQUxMTl9TRVRQUk9URUNULCBUUlVFLCAoQk9PTEVBTilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUsIEFMTE5fU0VUUFJPVEVDVCwgVFJVRSwgKEJPT0xFQU4pcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9PSA4KSAmJiAocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyAhPSA4KSkKKwkJeworCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTCQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQlpZiAocEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbikKKwkJCXsKKwkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIEhUX0ZPUkNFUlRTQ1RTLCBBTExOX1NFVFBST1RFQ1QsIFRSVUUsIChCT09MRUFOKXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgQUxMTl9TRVRQUk9URUNULCBUUlVFLCAoQk9PTEVBTilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTICE9IDApICYmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID09IDApKQorCQl7CisJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIEhUX1JUU0NUU182TSwgQUxMTl9TRVRQUk9URUNULCBUUlVFLCAoQk9PTEVBTilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKKworCQl9CisJCWVsc2UgaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgIT0gOCkgJiYgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gOCkpCisJCXsKKwkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgSFRfUlRTQ1RTXzZNLCBBTExOX1NFVFBST1RFQ1QsIFRSVUUsIChCT09MRUFOKXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQpOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU1RCQwk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TVEJDOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0k7CisJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwkJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREU7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmICgocEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPT0gTU9ERV9IVEdSRUVORklFTEQpICYmCisJCSAgICBwQWQtPldJRkl0ZXN0YmVkLmJHcmVlbkZpZWxkKQorCQkgICAgcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCX0KKworCXBBZC0+TGFzdFR4UmF0ZSA9IChVU0hPUlQpKHBFbnRyeS0+SFRQaHlNb2RlLndvcmQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBjYWxjdWxhdGVzIHRoZSBhY3VtdWxhdGVkIFR4UEVSIG9mIGVheGggVHhSYXRlLiBBbmQKKwkJYWNjb3JkaW5nIHRvIHRoZSBjYWxjdWxhdGlvbiByZXN1bHQsIGNoYW5nZSBDb21tb25DZmcuVHhSYXRlIHdoaWNoCisJCWlzIHRoZSBzdGFibGUgVFggUmF0ZSB3ZSBleHBlY3QgdGhlIFJhZGlvIHNpdHVhdGlvbiBjb3VsZCBzdXN0YWluZWQuCisKKwkJQ29tbW9uQ2ZnLlR4UmF0ZSB3aWxsIGNoYW5nZSBkeW5hbWljYWxseSB3aXRoaW4ge1JBVEVfMS9SQVRFXzYsIE1heFR4UmF0ZX0KKwlPdXRwdXQ6CisJCUNvbW1vbkNmZy5UeFJhdGUgLQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOT1RFOgorCQljYWxsIHRoaXMgcm91dGluZSBldmVyeSBzZWNvbmQKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVEeW5hbWljVHhSYXRlU3dpdGNoaW5nKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSCQkJCQlVcFJhdGVJZHggPSAwLCBEb3duUmF0ZUlkeCA9IDAsIEN1cnJSYXRlSWR4OworCVVMT05HCQkJCQlpLCBBY2N1VHhUb3RhbENudCA9IDAsIFR4VG90YWxDbnQ7CisJVUxPTkcJCQkJCVR4RXJyb3JSYXRpbyA9IDA7CisJQk9PTEVBTgkJCQkJYlR4UmF0ZUNoYW5nZWQsIGJVcGdyYWRlUXVhbGl0eSA9IEZBTFNFOworCVBSVE1QX1RYX1JBVEVfU1dJVENICXBDdXJyVHhSYXRlLCBwTmV4dFR4UmF0ZSA9IE5VTEw7CisJUFVDSEFSCQkJCQlwVGFibGU7CisJVUNIQVIJCQkJCVRhYmxlU2l6ZSA9IDA7CisJVUNIQVIJCQkJCUluaXRUeFJhdGVJZHggPSAwLCBUcmFpblVwLCBUcmFpbkRvd247CisJQ0hBUgkJCQkJUnNzaSwgUnNzaU9mZnNldCA9IDA7CisJVFhfU1RBX0NOVDFfU1RSVUMJCVN0YVR4MTsKKwlUWF9TVEFfQ05UMF9TVFJVQwkJVHhTdGFDbnQwOworCVVMT05HCQkJCQlUeFJldHJhbnNtaXQgPSAwLCBUeFN1Y2Nlc3MgPSAwLCBUeEZhaWxDb3VudCA9IDA7CisJTUFDX1RBQkxFX0VOVFJZCQkJKnBFbnRyeTsKKworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJeworCQlyZXR1cm47CisJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCS8vCisJLy8gd2FsayB0aHJvdWdoIE1BQyB0YWJsZSwgc2VlIGlmIG5lZWQgdG8gY2hhbmdlIEFQJ3MgVFggcmF0ZSB0b3dhcmQgZWFjaCBlbnRyeQorCS8vCisgICAJZm9yIChpID0gMTsgaSA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCisJeworCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtpXTsKKworCQkvLyBjaGVjayBpZiB0aGlzIGVudHJ5IG5lZWQgdG8gc3dpdGNoIHJhdGUgYXV0b21hdGljYWxseQorCQlpZiAoUlRNUENoZWNrRW50cnlFbmFibGVBdXRvUmF0ZVN3aXRjaChwQWQsIHBFbnRyeSkgPT0gRkFMU0UpCisJCQljb250aW51ZTsKKworCQlpZiAoKHBBZC0+TWFjVGFiLlNpemUgPT0gMSkgfHwgKHBFbnRyeS0+VmFsaWRBc0RscykpCisJCXsKKwkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCwKKwkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxLAorCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCisJCQkvLyBVcGRhdGUgc3RhdGlzdGljIGNvdW50ZXIKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDAsICZUeFN0YUNudDAud29yZCk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQxLCAmU3RhVHgxLndvcmQpOworCQkJcEFkLT5iVXBkYXRlQmNuQ250RG9uZSA9IFRSVUU7CisJCQlUeFJldHJhbnNtaXQgPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCQkJVHhTdWNjZXNzID0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCVR4RmFpbENvdW50ID0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJVHhUb3RhbENudCA9IFR4UmV0cmFuc21pdCArIFR4U3VjY2VzcyArIFR4RmFpbENvdW50OworCisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICs9IFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnUuTG93UGFydCArPSBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOworCQkJcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKKwkJCXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnUuTG93UGFydCArPSBUeFN0YUNudDAuZmllbGQuVHhGYWlsQ291bnQ7CisKKwkJCS8vIGlmIG5vIHRyYWZmaWMgaW4gdGhlIHBhc3QgMS1zZWMgcGVyaW9kLCBkb24ndCBjaGFuZ2UgVFggcmF0ZSwKKwkJCS8vIGJ1dCBjbGVhciBhbGwgYmFkIGhpc3RvcnkuIGJlY2F1c2UgdGhlIGJhZCBoaXN0b3J5IG1heSBhZmZlY3QgdGhlIG5leHQKKwkJCS8vIENoYXJpb3QgdGhyb3VnaHB1dCB0ZXN0CisJCQlBY2N1VHhUb3RhbENudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArCisJCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudDsKKworCQkJaWYgKFR4VG90YWxDbnQpCisJCQkJVHhFcnJvclJhdGlvID0gKChUeFJldHJhbnNtaXQgKyBUeEZhaWxDb3VudCkgKiAxMDApIC8gVHhUb3RhbENudDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChJTkZSQV9PTihwQWQpICYmIChpID09IDEpKQorCQkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAsCisJCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTEsCisJCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCQkJZWxzZQorCQkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMCwKKwkJCQkJCQkJICAgcEVudHJ5LT5Sc3NpU2FtcGxlLkF2Z1Jzc2kxLAorCQkJCQkJCQkgICBwRW50cnktPlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCisJCQlUeFRvdGFsQ250ID0gcEVudHJ5LT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsKKwkJCQkgcEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQ7CisKKwkJCWlmIChUeFRvdGFsQ250KQorCQkJCVR4RXJyb3JSYXRpbyA9ICgocEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQpICogMTAwKSAvIFR4VG90YWxDbnQ7CisJCX0KKworCQlDdXJyUmF0ZUlkeCA9IHBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4OworCisJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsIHBFbnRyeSwgJnBUYWJsZSwgJlRhYmxlU2l6ZSwgJkluaXRUeFJhdGVJZHgpOworCisJCWlmIChDdXJyUmF0ZUlkeCA+PSBUYWJsZVNpemUpCisJCXsKKwkJCUN1cnJSYXRlSWR4ID0gVGFibGVTaXplIC0gMTsKKwkJfQorCisJCS8vIFdoZW4gc3dpdGNoIGZyb20gRml4ZWQgcmF0ZSAtPiBhdXRvIHJhdGUsIHRoZSBSRUFMIFRYIHJhdGUgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXguCisJCS8vIFNvIG5lZWQgdG8gc3luYyBoZXJlLgorCQlwQ3VyclR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsoQ3VyclJhdGVJZHgrMSkqNV07CisJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTICE9IHBDdXJyVHhSYXRlLT5DdXJyTUNTKQorCQkJLy8mJiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gVFJVRSkKKwkJCSkKKwkJeworCisJCQkvLyBOZWVkIHRvIHN5bmMgUmVhbCBUeCByYXRlIGFuZCBvdXIgcmVjb3JkLgorCQkJLy8gVGhlbiByZXR1cm4gZm9yIG5leHQgRFJTLgorCQkJcEN1cnJUeFJhdGUgPSAoUFJUTVBfVFhfUkFURV9TV0lUQ0gpICZwVGFibGVbKEluaXRUeFJhdGVJZHgrMSkqNV07CisJCQlwRW50cnktPkN1cnJUeFJhdGVJbmRleCA9IEluaXRUeFJhdGVJZHg7CisJCQlNbG1lU2V0VHhSYXRlKHBBZCwgcEVudHJ5LCBwQ3VyclR4UmF0ZSk7CisKKwkJCS8vIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycworCQkJUkVTRVRfT05FX1NFQ19UWF9DTlQocEVudHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLy8gZGVjaWRlIHRoZSBuZXh0IHVwZ3JhZGUgcmF0ZSBhbmQgZG93bmdyYWRlIHJhdGUsIGlmIGFueQorCQlpZiAoKEN1cnJSYXRlSWR4ID4gMCkgJiYgKEN1cnJSYXRlSWR4IDwgKFRhYmxlU2l6ZSAtIDEpKSkKKwkJeworCQkJVXBSYXRlSWR4ID0gQ3VyclJhdGVJZHggKyAxOworCQkJRG93blJhdGVJZHggPSBDdXJyUmF0ZUlkeCAtMTsKKwkJfQorCQllbHNlIGlmIChDdXJyUmF0ZUlkeCA9PSAwKQorCQl7CisJCQlVcFJhdGVJZHggPSBDdXJyUmF0ZUlkeCArIDE7CisJCQlEb3duUmF0ZUlkeCA9IEN1cnJSYXRlSWR4OworCQl9CisJCWVsc2UgaWYgKEN1cnJSYXRlSWR4ID09IChUYWJsZVNpemUgLSAxKSkKKwkJeworCQkJVXBSYXRlSWR4ID0gQ3VyclJhdGVJZHg7CisJCQlEb3duUmF0ZUlkeCA9IEN1cnJSYXRlSWR4IC0gMTsKKwkJfQorCisJCXBDdXJyVHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKSAmcFRhYmxlWyhDdXJyUmF0ZUlkeCsxKSo1XTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAoKFJzc2kgPiAtNjUpICYmIChwQ3VyclR4UmF0ZS0+TW9kZSA+PSBNT0RFX0hUTUlYKSkKKwkJeworCQkJVHJhaW5VcAkJPSAocEN1cnJUeFJhdGUtPlRyYWluVXAgKyAocEN1cnJUeFJhdGUtPlRyYWluVXAgPj4gMSkpOworCQkJVHJhaW5Eb3duCT0gKHBDdXJyVHhSYXRlLT5UcmFpbkRvd24gKyAocEN1cnJUeFJhdGUtPlRyYWluRG93biA+PiAxKSk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl7CisJCQlUcmFpblVwCQk9IHBDdXJyVHhSYXRlLT5UcmFpblVwOworCQkJVHJhaW5Eb3duCT0gcEN1cnJUeFJhdGUtPlRyYWluRG93bjsKKwkJfQorCisJCS8vcEFkLT5EcnNDb3VudGVycy5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9IHBBZC0+RHJzQ291bnRlcnMuTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbjsKKworCQkvLworCQkvLyBLZWVwIHRoZSBsYXN0IHRpbWUgVHhSYXRlQ2hhbmdlQWN0aW9uIHN0YXR1cy4KKwkJLy8KKwkJcEVudHJ5LT5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9IHBFbnRyeS0+TGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbjsKKworCisKKwkJLy8KKwkJLy8gQ0FTRSAxLiB3aGVuIFRYIHNhbXBsZXMgYXJlIGZld2VyIHRoYW4gMTUsIHRoZW4gZGVjaWRlIFRYIHJhdGUgc29sZWx5IG9uIFJTU0kKKwkJLy8gICAgICAgICAoY3JpdGVyaWEgY29waWVkIGZyb20gUlQyNTAwIGZvciBOZXRvcGlhIGNhc2UpCisJCS8vCisJCWlmIChUeFRvdGFsQ250IDw9IDE1KQorCQl7CisJCQlDSEFSCWlkeCA9IDA7CisJCQlVQ0hBUglUeFJhdGVJZHg7CisJCQkvL1VDSEFSCU1DUzAgPSAwLCBNQ1MxID0gMCwgTUNTMiA9IDAsIE1DUzMgPSAwLCBNQ1M0ID0gMCwgTUNTNyA9IDAsIE1DUzEyID0gMCwgTUNTMTMgPSAwLCBNQ1MxNCA9IDAsIE1DUzE1ID0gMDsKKwkJCVVDSEFSCU1DUzAgPSAwLCBNQ1MxID0gMCwgTUNTMiA9IDAsIE1DUzMgPSAwLCBNQ1M0ID0gMCwgIE1DUzUgPTAsIE1DUzYgPSAwLCBNQ1M3ID0gMDsKKwkgICAgICAgIFVDSEFSCU1DUzEyID0gMCwgTUNTMTMgPSAwLCBNQ1MxNCA9IDAsIE1DUzE1ID0gMDsKKwkJCVVDSEFSCU1DUzIwID0gMCwgTUNTMjEgPSAwLCBNQ1MyMiA9IDAsIE1DUzIzID0gMDsgLy8gMyozCisKKwkJCS8vIGNoZWNrIHRoZSBleGlzdGVuY2UgYW5kIGluZGV4IG9mIGVhY2ggbmVlZGVkIE1DUworCQkJd2hpbGUgKGlkeCA8IHBUYWJsZVswXSkKKwkJCXsKKwkJCQlwQ3VyclR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsoaWR4KzEpKjVdOworCisJCQkJaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18wKQorCQkJCXsKKwkJCQkJTUNTMCA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzEpCisJCQkJeworCQkJCQlNQ1MxID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMikKKwkJCQl7CisJCQkJCU1DUzIgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18zKQorCQkJCXsKKwkJCQkJTUNTMyA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzQpCisJCQkJeworCQkJCQlNQ1M0ID0gaWR4OworCQkJCX0KKwkgICAgICAgICAgICBlbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfNSkKKwkgICAgICAgICAgICB7CisJICAgICAgICAgICAgICAgIE1DUzUgPSBpZHg7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU182KQorCSAgICAgICAgICAgIHsKKwkgICAgICAgICAgICAgICAgTUNTNiA9IGlkeDsKKwkgICAgICAgICAgICB9CisJCQkJLy9lbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfNykKKwkJCQllbHNlIGlmICgocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzcpICYmIChwQ3VyclR4UmF0ZS0+U2hvcnRHSSA9PSBHSV84MDApKQkvLyBwcmV2ZW50IHRoZSBoaWdoZXN0IE1DUyB1c2luZyBzaG9ydCBHSSB3aGVuIDFUIGFuZCBsb3cgdGhyb3VnaHB1dAorCQkJCXsKKwkJCQkJTUNTNyA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzEyKQorCQkJCXsKKwkJCQkJTUNTMTIgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18xMykKKwkJCQl7CisJCQkJCU1DUzEzID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMTQpCisJCQkJeworCQkJCQlNQ1MxNCA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18xNSkgJiYgKHBDdXJyVHhSYXRlLT5TaG9ydEdJID09IEdJXzgwMCkpCisJCQkJeworCQkJCQlNQ1MxNSA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzIwKSAvLyAzKjMKKwkJCQl7CisJCQkJCU1DUzIwID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMjEpCisJCQkJeworCQkJCQlNQ1MyMSA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzIyKQorCQkJCXsKKwkJCQkJTUNTMjIgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yMykKKwkJCQl7CisJCQkJCU1DUzIzID0gaWR4OworCQkJCX0KKwkJCQlpZHggKys7CisJCQl9CisKKwkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpCisJCQl7CisJCQkJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckcpCisJCQkJeworCQkJCQlSc3NpT2Zmc2V0ID0gMjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUnNzaU9mZnNldCA9IDU7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JBKQorCQkJCXsKKwkJCQkJUnNzaU9mZnNldCA9IDU7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJzc2lPZmZzZXQgPSA4OworCQkJCX0KKwkJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8qaWYgKE1DUzE1KSovCisJCQlpZiAoKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjNTKSB8fAorCQkJCShwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOM1MpIHx8CisJCQkJKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUpKQorCQkJey8vIE4gbW9kZSB3aXRoIDMgc3RyZWFtIC8vIDMqMworCQkJCWlmIChNQ1MyMyAmJiAoUnNzaSA+PSAtNzApKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxNTsKKwkJCQllbHNlIGlmIChNQ1MyMiAmJiAoUnNzaSA+PSAtNzIpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxNDsKKyAgICAgICAgCSAgICBlbHNlIGlmIChNQ1MyMSAmJiAoUnNzaSA+PSAtNzYpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxMzsKKwkJCQllbHNlIGlmIChNQ1MyMCAmJiAoUnNzaSA+PSAtNzgpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxMjsKKwkJCWVsc2UgaWYgKE1DUzQgJiYgKFJzc2kgPj0gLTgyKSkKKwkJCQlUeFJhdGVJZHggPSBNQ1M0OworCQkJZWxzZSBpZiAoTUNTMyAmJiAoUnNzaSA+PSAtODQpKQorCQkJCVR4UmF0ZUlkeCA9IE1DUzM7CisJCQllbHNlIGlmIChNQ1MyICYmIChSc3NpID49IC04NikpCisJCQkJVHhSYXRlSWR4ID0gTUNTMjsKKwkJCWVsc2UgaWYgKE1DUzEgJiYgKFJzc2kgPj0gLTg4KSkKKwkJCQlUeFJhdGVJZHggPSBNQ1MxOworCQkJZWxzZQorCQkJCVR4UmF0ZUlkeCA9IE1DUzA7CisJCX0KKy8vCQllbHNlIGlmICgocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlMpIHx8IChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kKSB8fChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOMlMpIHx8KHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kKSB8fCAocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZSkpCisJCWVsc2UgaWYgKChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yUykgfHwgKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTRm9yQUJhbmQpIHx8KHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMU4yUykgfHwocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQpKSAvLyAzKjMKKwkJCXsvLyBOIG1vZGUgd2l0aCAyIHN0cmVhbQorCQkJCWlmIChNQ1MxNSAmJiAoUnNzaSA+PSAoLTcwK1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTU7CisJCQkJZWxzZSBpZiAoTUNTMTQgJiYgKFJzc2kgPj0gKC03MitSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzE0OworCQkJCWVsc2UgaWYgKE1DUzEzICYmIChSc3NpID49ICgtNzYrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxMzsKKwkJCQllbHNlIGlmIChNQ1MxMiAmJiAoUnNzaSA+PSAoLTc4K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTI7CisJCQkJZWxzZSBpZiAoTUNTNCAmJiAoUnNzaSA+PSAoLTgyK1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTNDsKKwkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID49ICgtODQrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MzOworCQkJCWVsc2UgaWYgKE1DUzIgJiYgKFJzc2kgPj0gKC04NitSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzI7CisJCQkJZWxzZSBpZiAoTUNTMSAmJiAoUnNzaSA+PSAoLTg4K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKKwkJCQllbHNlCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzA7CisJCQl9CisJCQllbHNlIGlmICgocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExQkdOMVMpIHx8IChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOMVMpKQorCQkJey8vIE4gbW9kZSB3aXRoIDEgc3RyZWFtCisJCQkJaWYgKE1DUzcgJiYgKFJzc2kgPiAoLTcyK1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTNzsKKwkJCQllbHNlIGlmIChNQ1M2ICYmIChSc3NpID4gKC03NCtSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzY7CisJCQkJZWxzZSBpZiAoTUNTNSAmJiAoUnNzaSA+ICgtNzcrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1M1OworCQkJCWVsc2UgaWYgKE1DUzQgJiYgKFJzc2kgPiAoLTc5K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTNDsKKwkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID4gKC04MStSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzM7CisJCQkJZWxzZSBpZiAoTUNTMiAmJiAoUnNzaSA+ICgtODMrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MyOworCQkJCWVsc2UgaWYgKE1DUzEgJiYgKFJzc2kgPiAoLTg2K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKKwkJCQllbHNlCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzA7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQl7Ly8gTGVnYWN5IG1vZGUKKwkJCQlpZiAoTUNTNyAmJiAoUnNzaSA+IC03MCkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzc7CisJCQkJZWxzZSBpZiAoTUNTNiAmJiAoUnNzaSA+IC03NCkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzY7CisJCQkJZWxzZSBpZiAoTUNTNSAmJiAoUnNzaSA+IC03OCkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzU7CisJCQkJZWxzZSBpZiAoTUNTNCAmJiAoUnNzaSA+IC04MikpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzQ7CisJCQkJZWxzZSBpZiAoTUNTNCA9PSAwKQkvLyBmb3IgQi1vbmx5IG1vZGUKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMzsKKwkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID4gLTg1KSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMzsKKwkJCQllbHNlIGlmIChNQ1MyICYmIChSc3NpID4gLTg3KSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMjsKKwkJCQllbHNlIGlmIChNQ1MxICYmIChSc3NpID4gLTkwKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKKwkJCQllbHNlCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzA7CisJCQl9CisKKwkvLwkJaWYgKFR4UmF0ZUlkeCAhPSBwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCkKKwkJCXsKKwkJCQlwRW50cnktPkN1cnJUeFJhdGVJbmRleCA9IFR4UmF0ZUlkeDsKKwkJCQlwTmV4dFR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsocEVudHJ5LT5DdXJyVHhSYXRlSW5kZXgrMSkqNV07CisJCQkJTWxtZVNldFR4UmF0ZShwQWQsIHBFbnRyeSwgcE5leHRUeFJhdGUpOworCQkJfQorCisJCQlOZGlzWmVyb01lbW9yeShwRW50cnktPlR4UXVhbGl0eSwgc2l6ZW9mKFVTSE9SVCkgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisJCQlOZGlzWmVyb01lbW9yeShwRW50cnktPlBFUiwgc2l6ZW9mKFVDSEFSKSAqIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIKTsKKwkJCXBFbnRyeS0+Zkxhc3RTZWNBY2NvcmRpbmdSU1NJID0gVFJVRTsKKwkJCS8vIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycworCQkJUkVTRVRfT05FX1NFQ19UWF9DTlQocEVudHJ5KTsKKworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocEVudHJ5LT5mTGFzdFNlY0FjY29yZGluZ1JTU0kgPT0gVFJVRSkKKwkJeworCQkJcEVudHJ5LT5mTGFzdFNlY0FjY29yZGluZ1JTU0kgPSBGQUxTRTsKKwkJCXBFbnRyeS0+TGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9IDA7CisJCQkvLyByZXNldCBhbGwgT25lU2VjVHggY291bnRlcnMKKwkJCVJFU0VUX09ORV9TRUNfVFhfQ05UKHBFbnRyeSk7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZG8KKwkJeworCQkJQk9PTEVBTgliVHJhaW5VcERvd24gPSBGQUxTRTsKKworCQkJcEVudHJ5LT5DdXJyVHhSYXRlU3RhYmxlVGltZSArKzsKKworCQkJLy8gZG93bmdyYWRlIFRYIHF1YWxpdHkgaWYgUEVSID49IFJhdGUtRG93biB0aHJlc2hvbGQKKwkJCWlmIChUeEVycm9yUmF0aW8gPj0gVHJhaW5Eb3duKQorCQkJeworCQkJCWJUcmFpblVwRG93biA9IFRSVUU7CisJCQkJcEVudHJ5LT5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdID0gRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQ7CisJCQl9CisJCQkvLyB1cGdyYWRlIFRYIHF1YWxpdHkgaWYgUEVSIDw9IFJhdGUtVXAgdGhyZXNob2xkCisJCQllbHNlIGlmIChUeEVycm9yUmF0aW8gPD0gVHJhaW5VcCkKKwkJCXsKKwkJCQliVHJhaW5VcERvd24gPSBUUlVFOworCQkJCWJVcGdyYWRlUXVhbGl0eSA9IFRSVUU7CisJCQkJaWYgKHBFbnRyeS0+VHhRdWFsaXR5W0N1cnJSYXRlSWR4XSkKKwkJCQkJcEVudHJ5LT5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdIC0tOyAgLy8gcXVhbGl0eSB2ZXJ5IGdvb2QgaW4gQ3VyclJhdGUKKworCQkJCWlmIChwRW50cnktPlR4UmF0ZVVwUGVuYWx0eSkKKwkJCQkJcEVudHJ5LT5UeFJhdGVVcFBlbmFsdHkgLS07CisJCQkJZWxzZSBpZiAocEVudHJ5LT5UeFF1YWxpdHlbVXBSYXRlSWR4XSkKKwkJCQkJcEVudHJ5LT5UeFF1YWxpdHlbVXBSYXRlSWR4XSAtLTsgICAgLy8gbWF5IGltcHJvdmUgbmV4dCBVUCByYXRlJ3MgcXVhbGl0eQorCQkJfQorCisJCQlwRW50cnktPlBFUltDdXJyUmF0ZUlkeF0gPSAoVUNIQVIpVHhFcnJvclJhdGlvOworCisJCQlpZiAoYlRyYWluVXBEb3duKQorCQkJeworCQkJCS8vIHBlcmZvcm0gRFJTIC0gY29uc2lkZXIgVHhSYXRlIERvd24gZmlyc3QsIHRoZW4gcmF0ZSB1cC4KKwkJCQlpZiAoKEN1cnJSYXRlSWR4ICE9IERvd25SYXRlSWR4KSAmJiAocEVudHJ5LT5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdID49IERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EKSkKKwkJCQl7CisJCQkJCXBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4ID0gRG93blJhdGVJZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKChDdXJyUmF0ZUlkeCAhPSBVcFJhdGVJZHgpICYmIChwRW50cnktPlR4UXVhbGl0eVtVcFJhdGVJZHhdIDw9IDApKQorCQkJCXsKKwkJCQkJcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXggPSBVcFJhdGVJZHg7CisJCQkJfQorCQkJfQorCQl9IHdoaWxlIChGQUxTRSk7CisKKwkJLy8gaWYgcmF0ZS11cCBoYXBwZW4sIGNsZWFyIGFsbCBiYWQgaGlzdG9yeSBvZiBhbGwgVFggcmF0ZXMKKwkJaWYgKHBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4ID4gQ3VyclJhdGVJZHgpCisJCXsKKwkJCXBFbnRyeS0+Q3VyclR4UmF0ZVN0YWJsZVRpbWUgPSAwOworCQkJcEVudHJ5LT5UeFJhdGVVcFBlbmFsdHkgPSAwOworCQkJcEVudHJ5LT5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID0gMTsgLy8gcmF0ZSBVUAorCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5UeFF1YWxpdHksIHNpemVvZihVU0hPUlQpICogTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOworCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5QRVIsIHNpemVvZihVQ0hBUikgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisKKwkJCS8vCisJCQkvLyBGb3IgVHhSYXRlIGZhc3QgdHJhaW4gdXAKKwkJCS8vCisJCQlpZiAoIXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZykKKwkJCXsKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyLCAxMDApOworCisJCQkJcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nID0gVFJVRTsKKwkJCX0KKwkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKKwkJfQorCQkvLyBpZiByYXRlLWRvd24gaGFwcGVuLCBvbmx5IGNsZWFyIERvd25SYXRlJ3MgYmFkIGhpc3RvcnkKKwkJZWxzZSBpZiAocEVudHJ5LT5DdXJyVHhSYXRlSW5kZXggPCBDdXJyUmF0ZUlkeCkKKwkJeworCQkJcEVudHJ5LT5DdXJyVHhSYXRlU3RhYmxlVGltZSA9IDA7CisJCQlwRW50cnktPlR4UmF0ZVVwUGVuYWx0eSA9IDA7ICAgICAgICAgICAvLyBubyBwZW5hbHR5CisJCQlwRW50cnktPkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPSAyOyAvLyByYXRlIERPV04KKwkJCXBFbnRyeS0+VHhRdWFsaXR5W3BFbnRyeS0+Q3VyclR4UmF0ZUluZGV4XSA9IDA7CisJCQlwRW50cnktPlBFUltwRW50cnktPkN1cnJUeFJhdGVJbmRleF0gPSAwOworCisJCQkvLworCQkJLy8gRm9yIFR4UmF0ZSBmYXN0IHRyYWluIGRvd24KKwkJCS8vCisJCQlpZiAoIXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZykKKwkJCXsKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyLCAxMDApOworCisJCQkJcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nID0gVFJVRTsKKwkJCX0KKwkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBFbnRyeS0+TGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9IDA7IC8vIHJhdGUgbm8gY2hhbmdlCisJCQliVHhSYXRlQ2hhbmdlZCA9IEZBTFNFOworCQl9CisKKwkJcEVudHJ5LT5MYXN0VHhPa0NvdW50ID0gVHhTdWNjZXNzOworCisJCS8vIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycworCQlSRVNFVF9PTkVfU0VDX1RYX0NOVChwRW50cnkpOworCisJCXBOZXh0VHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKSAmcFRhYmxlWyhwRW50cnktPkN1cnJUeFJhdGVJbmRleCsxKSo1XTsKKwkJaWYgKGJUeFJhdGVDaGFuZ2VkICYmIHBOZXh0VHhSYXRlKQorCQl7CisJCQlNbG1lU2V0VHhSYXRlKHBBZCwgcEVudHJ5LCBwTmV4dFR4UmF0ZSk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU3RhdGlvbiBzaWRlLCBBdXRvIFR4UmF0ZSBmYXN0ZXIgdHJhaW4gdXAgdGltZXIgY2FsbCBiYWNrIGZ1bmN0aW9uLgorCisJQXJndW1lbnRzOgorCQlTeXN0ZW1TcGVjaWZpYzEJCQktIE5vdCB1c2VkLgorCQlGdW5jdGlvbkNvbnRleHQJCQktIFBvaW50ZXIgdG8gb3VyIEFkYXB0ZXIgY29udGV4dC4KKwkJU3lzdGVtU3BlY2lmaWMyCQkJLSBOb3QgdXNlZC4KKwkJU3lzdGVtU3BlY2lmaWMzCQkJLSBOb3QgdXNlZC4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlQUlRNUF9BREFQVEVSCQkJcEFkID0gKFBSVE1QX0FEQVBURVIpRnVuY3Rpb25Db250ZXh0OworCVVDSEFSCQkJCQlVcFJhdGVJZHggPSAwLCBEb3duUmF0ZUlkeCA9IDAsIEN1cnJSYXRlSWR4ID0gMDsKKwlVTE9ORwkJCQkJVHhUb3RhbENudDsKKwlVTE9ORwkJCQkJVHhFcnJvclJhdGlvID0gMDsKKwlCT09MRUFOCQkJCQliVHhSYXRlQ2hhbmdlZDsgLy8sIGJVcGdyYWRlUXVhbGl0eSA9IEZBTFNFOworCVBSVE1QX1RYX1JBVEVfU1dJVENICXBDdXJyVHhSYXRlLCBwTmV4dFR4UmF0ZSA9IE5VTEw7CisJUFVDSEFSCQkJCQlwVGFibGU7CisJVUNIQVIJCQkJCVRhYmxlU2l6ZSA9IDA7CisJVUNIQVIJCQkJCUluaXRUeFJhdGVJZHggPSAwLCBUcmFpblVwLCBUcmFpbkRvd247CisJVFhfU1RBX0NOVDFfU1RSVUMJCVN0YVR4MTsKKwlUWF9TVEFfQ05UMF9TVFJVQwkJVHhTdGFDbnQwOworCUNIQVIJCQkJCVJzc2ksIHJhdGlvOworCVVMT05HCQkJCQlUeFJldHJhbnNtaXQgPSAwLCBUeFN1Y2Nlc3MgPSAwLCBUeEZhaWxDb3VudCA9IDA7CisJTUFDX1RBQkxFX0VOVFJZCQkJKnBFbnRyeTsKKwlVTE9ORwkJCQkJaTsKKworCXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZyA9IEZBTFNFOworCisgICAgLy8KKyAgICAvLyB3YWxrIHRocm91Z2ggTUFDIHRhYmxlLCBzZWUgaWYgbmVlZCB0byBjaGFuZ2UgQVAncyBUWCByYXRlIHRvd2FyZCBlYWNoIGVudHJ5CisgICAgLy8KKwlmb3IgKGkgPSAxOyBpIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W2ldOworCisJCS8vIGNoZWNrIGlmIHRoaXMgZW50cnkgbmVlZCB0byBzd2l0Y2ggcmF0ZSBhdXRvbWF0aWNhbGx5CisJCWlmIChSVE1QQ2hlY2tFbnRyeUVuYWJsZUF1dG9SYXRlU3dpdGNoKHBBZCwgcEVudHJ5KSA9PSBGQUxTRSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChJTkZSQV9PTihwQWQpICYmIChpID09IDEpKQorCQkJUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwKKwkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kwLAorCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTEsCisJCQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMik7CisJCWVsc2UKKwkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJICAgcEVudHJ5LT5Sc3NpU2FtcGxlLkF2Z1Jzc2kwLAorCQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMSwKKwkJCQkJCQkgICBwRW50cnktPlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCisJCUN1cnJSYXRlSWR4ID0gcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXg7CisKKwkJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsIHBFbnRyeSwgJnBUYWJsZSwgJlRhYmxlU2l6ZSwgJkluaXRUeFJhdGVJZHgpOworCisJCS8vIGRlY2lkZSB0aGUgbmV4dCB1cGdyYWRlIHJhdGUgYW5kIGRvd25ncmFkZSByYXRlLCBpZiBhbnkKKwkJaWYgKChDdXJyUmF0ZUlkeCA+IDApICYmIChDdXJyUmF0ZUlkeCA8IChUYWJsZVNpemUgLSAxKSkpCisJCXsKKwkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4ICsgMTsKKwkJCURvd25SYXRlSWR4ID0gQ3VyclJhdGVJZHggLTE7CisJCX0KKwkJZWxzZSBpZiAoQ3VyclJhdGVJZHggPT0gMCkKKwkJeworCQkJVXBSYXRlSWR4ID0gQ3VyclJhdGVJZHggKyAxOworCQkJRG93blJhdGVJZHggPSBDdXJyUmF0ZUlkeDsKKwkJfQorCQllbHNlIGlmIChDdXJyUmF0ZUlkeCA9PSAoVGFibGVTaXplIC0gMSkpCisJCXsKKwkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4OworCQkJRG93blJhdGVJZHggPSBDdXJyUmF0ZUlkeCAtIDE7CisJCX0KKworCQlwQ3VyclR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsoQ3VyclJhdGVJZHgrMSkqNV07CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKChSc3NpID4gLTY1KSAmJiAocEN1cnJUeFJhdGUtPk1vZGUgPj0gTU9ERV9IVE1JWCkpCisJCXsKKwkJCVRyYWluVXAJCT0gKHBDdXJyVHhSYXRlLT5UcmFpblVwICsgKHBDdXJyVHhSYXRlLT5UcmFpblVwID4+IDEpKTsKKwkJCVRyYWluRG93bgk9IChwQ3VyclR4UmF0ZS0+VHJhaW5Eb3duICsgKHBDdXJyVHhSYXRlLT5UcmFpbkRvd24gPj4gMSkpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJeworCQkJVHJhaW5VcAkJPSBwQ3VyclR4UmF0ZS0+VHJhaW5VcDsKKwkJCVRyYWluRG93bgk9IHBDdXJyVHhSYXRlLT5UcmFpbkRvd247CisJCX0KKworCQlpZiAocEFkLT5NYWNUYWIuU2l6ZSA9PSAxKQorCQl7CisJCQkvLyBVcGRhdGUgc3RhdGlzdGljIGNvdW50ZXIKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDAsICZUeFN0YUNudDAud29yZCk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQxLCAmU3RhVHgxLndvcmQpOworCisJCQlUeFJldHJhbnNtaXQgPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCQkJVHhTdWNjZXNzID0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCVR4RmFpbENvdW50ID0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJVHhUb3RhbENudCA9IFR4UmV0cmFuc21pdCArIFR4U3VjY2VzcyArIFR4RmFpbENvdW50OworCisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICs9IFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnUuTG93UGFydCArPSBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOworCQkJcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKKwkJCXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnUuTG93UGFydCArPSBUeFN0YUNudDAuZmllbGQuVHhGYWlsQ291bnQ7CisKKwkJCWlmIChUeFRvdGFsQ250KQorCQkJCVR4RXJyb3JSYXRpbyA9ICgoVHhSZXRyYW5zbWl0ICsgVHhGYWlsQ291bnQpICogMTAwKSAvIFR4VG90YWxDbnQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlUeFRvdGFsQ250ID0gcEVudHJ5LT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsKKwkJCQkgcEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQ7CisKKwkJCWlmIChUeFRvdGFsQ250KQorCQkJCVR4RXJyb3JSYXRpbyA9ICgocEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQpICogMTAwKSAvIFR4VG90YWxDbnQ7CisJCX0KKworCisJCS8vCisJCS8vIENBU0UgMS4gd2hlbiBUWCBzYW1wbGVzIGFyZSBmZXdlciB0aGFuIDE1LCB0aGVuIGRlY2lkZSBUWCByYXRlIHNvbGVseSBvbiBSU1NJCisJCS8vICAgICAgICAgKGNyaXRlcmlhIGNvcGllZCBmcm9tIFJUMjUwMCBmb3IgTmV0b3BpYSBjYXNlKQorCQkvLworCQlpZiAoVHhUb3RhbENudCA8PSAxMikKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHksIHNpemVvZihVU0hPUlQpICogTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOworCQkJTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5QRVIsIHNpemVvZihVQ0hBUikgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisKKwkJCWlmICgocEFkLT5EcnNDb3VudGVycy5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID09IDEpICYmIChDdXJyUmF0ZUlkeCAhPSBEb3duUmF0ZUlkeCkpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSBEb3duUmF0ZUlkeDsKKwkJCQlwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0eVtDdXJyUmF0ZUlkeF0gPSBEUlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORDsKKwkJCX0KKwkJCWVsc2UgaWYgKChwQWQtPkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPT0gMikgJiYgKEN1cnJSYXRlSWR4ICE9IFVwUmF0ZUlkeCkpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSBVcFJhdGVJZHg7CisJCQl9CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIlF1aWNrRFJTOiBUeFRvdGFsQ250IDw9IDE1LCB0cmFpbiBiYWNrIHRvIG9yaWdpbmFsIHJhdGUgXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKworCQlkbworCQl7CisJCQlVTE9ORyBPbmVTZWNUeE5vUmV0cnlPS1JhdGlvbkNvdW50OworCisJCQlpZiAocEFkLT5EcnNDb3VudGVycy5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9PSAwKQorCQkJCXJhdGlvID0gNTsKKwkJCWVsc2UKKwkJCQlyYXRpbyA9IDQ7CisKKwkJCS8vIGRvd25ncmFkZSBUWCBxdWFsaXR5IGlmIFBFUiA+PSBSYXRlLURvd24gdGhyZXNob2xkCisJCQlpZiAoVHhFcnJvclJhdGlvID49IFRyYWluRG93bikKKwkJCXsKKwkJCQlwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0eVtDdXJyUmF0ZUlkeF0gPSBEUlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORDsKKwkJCX0KKworCQkJcEFkLT5EcnNDb3VudGVycy5QRVJbQ3VyclJhdGVJZHhdID0gKFVDSEFSKVR4RXJyb3JSYXRpbzsKKworCQkJT25lU2VjVHhOb1JldHJ5T0tSYXRpb25Db3VudCA9IChUeFN1Y2Nlc3MgKiByYXRpbyk7CisKKwkJCS8vIHBlcmZvcm0gRFJTIC0gY29uc2lkZXIgVHhSYXRlIERvd24gZmlyc3QsIHRoZW4gcmF0ZSB1cC4KKwkJCWlmICgocEFkLT5EcnNDb3VudGVycy5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID09IDEpICYmIChDdXJyUmF0ZUlkeCAhPSBEb3duUmF0ZUlkeCkpCisJCQl7CisJCQkJaWYgKChwQWQtPkRyc0NvdW50ZXJzLkxhc3RUeE9rQ291bnQgKyAyKSA+PSBPbmVTZWNUeE5vUmV0cnlPS1JhdGlvbkNvdW50KQorCQkJCXsKKwkJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSBEb3duUmF0ZUlkeDsKKwkJCQkJcEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdID0gRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQ7CisKKwkJCQl9CisKKwkJCX0KKwkJCWVsc2UgaWYgKChwQWQtPkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPT0gMikgJiYgKEN1cnJSYXRlSWR4ICE9IFVwUmF0ZUlkeCkpCisJCQl7CisJCQkJaWYgKChUeEVycm9yUmF0aW8gPj0gNTApIHx8IChUeEVycm9yUmF0aW8gPj0gVHJhaW5Eb3duKSkKKwkJCQl7CisKKwkJCQl9CisJCQkJZWxzZSBpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFR4T2tDb3VudCArIDIpID49IE9uZVNlY1R4Tm9SZXRyeU9LUmF0aW9uQ291bnQpCisJCQkJeworCQkJCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA9IFVwUmF0ZUlkeDsKKwkJCQl9CisJCQl9CisJCX13aGlsZSAoRkFMU0UpOworCisJCS8vIGlmIHJhdGUtdXAgaGFwcGVuLCBjbGVhciBhbGwgYmFkIGhpc3Rvcnkgb2YgYWxsIFRYIHJhdGVzCisJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA+IEN1cnJSYXRlSWR4KQorCQl7CisJCQlwQWQtPkRyc0NvdW50ZXJzLlR4UmF0ZVVwUGVuYWx0eSA9IDA7CisJCQlOZGlzWmVyb01lbW9yeShwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0eSwgc2l6ZW9mKFVTSE9SVCkgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisJCQlOZGlzWmVyb01lbW9yeShwQWQtPkRyc0NvdW50ZXJzLlBFUiwgc2l6ZW9mKFVDSEFSKSAqIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIKTsKKwkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKKwkJfQorCQkvLyBpZiByYXRlLWRvd24gaGFwcGVuLCBvbmx5IGNsZWFyIERvd25SYXRlJ3MgYmFkIGhpc3RvcnkKKwkJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPCBDdXJyUmF0ZUlkeCkKKwkJeworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiUXVpY2tEUlM6IC0tVFggcmF0ZSBmcm9tICVkIHRvICVkIFxuIiwgQ3VyclJhdGVJZHgsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4KSk7CisKKwkJCXBBZC0+RHJzQ291bnRlcnMuVHhSYXRlVXBQZW5hbHR5ID0gMDsgICAgICAgICAgIC8vIG5vIHBlbmFsdHkKKwkJCXBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5W3BBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4XSA9IDA7CisJCQlwQWQtPkRyc0NvdW50ZXJzLlBFUltwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleF0gPSAwOworCQkJYlR4UmF0ZUNoYW5nZWQgPSBUUlVFOworCQl9CisJCWVsc2UKKwkJeworCQkJYlR4UmF0ZUNoYW5nZWQgPSBGQUxTRTsKKwkJfQorCisJCXBOZXh0VHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKSAmcFRhYmxlWyhwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCsxKSo1XTsKKwkJaWYgKGJUeFJhdGVDaGFuZ2VkICYmIHBOZXh0VHhSYXRlKQorCQl7CisJCQlNbG1lU2V0VHhSYXRlKHBBZCwgcEVudHJ5LCBwTmV4dFR4UmF0ZSk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyByb3V0aW5lIGlzIGV4ZWN1dGVkIHBlcmlvZGljYWxseSBpbnNpZGUgTWxtZVBlcmlvZGljRXhlYygpIGFmdGVyCisJCWFzc29jaWF0aW9uIHdpdGggYW4gQVAuCisJCUl0IGNoZWNrcyBpZiBTdGFDZmcuUHNtIGlzIGNvbnNpc3RlbnQgd2l0aCB1c2VyIHBvbGljeSAocmVjb3JkZWQgaW4KKwkJU3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUpLiBJZiBub3QsIGVuZm9yY2UgdXNlciBwb2xpY3kuIEhvd2V2ZXIsCisJCXRoZXJlJ3JlIHNvbWUgY29uZGl0aW9ucyB0byBjb25zaWRlcjoKKwkJMS4gd2UgZG9uJ3Qgc3VwcG9ydCBwb3dlci1zYXZpbmcgaW4gQURIT0MgbW9kZSwgc28gUHNtPVBXUl9BQ1RJVkUgYWxsCisJCSAgIHRoZSB0aW1lIHdoZW4gTWlic3M9PVRSVUUKKwkJMi4gV2hlbiBsaW5rIHVwIGluIElORlJBIG1vZGUsIFBzbSBzaG91bGQgbm90IGJlIHN3aXRjaCB0byBQV1JfU0FWRQorCQkgICBpZiBvdXRnb2luZyB0cmFmZmljIGF2YWlsYWJsZSBpbiBUeFJpbmcgb3IgTWdtdFJpbmcuCisJT3V0cHV0OgorCQkxLiBjaGFuZ2UgcEFkLT5TdGFDZmcuUHNtIHRvIFBXUl9TQVZFIG9yIGxlYXZlIGl0IHVudG91Y2hlZAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVDaGVja1BzbUNoYW5nZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORwlOb3czMikKK3sKKwlVTE9ORwlQb3dlck1vZGU7CisKKwkvLyBjb25kaXRpb24gLQorCS8vIDEuIFBzbSBtYXliZSBPTiBvbmx5IGhhcHBlbiBpbiBJTkZSQVNUUlVDVFVSRSBtb2RlCisJLy8gMi4gdXNlciB3YW50cyBlaXRoZXIgTUFYX1BTUCBvciBGQVNUX1BTUAorCS8vIDMuIGJ1dCBjdXJyZW50IHBzbSBpcyBub3QgaW4gUFdSX1NBVkUKKwkvLyA0LiBDTlRMIHN0YXRlIG1hY2hpbmUgaXMgbm90IGRvaW5nIFNDQU5uaW5nCisJLy8gNS4gbm8gVFggU1VDQ0VTUyBldmVudCBmb3IgdGhlIHBhc3QgMS1zZWMgcGVyaW9kCisjaWZkZWYgTkRJUzUxX01JTklQT1JUCisJaWYgKHBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlclByb2ZpbGUgPT0gTmRpc1Bvd2VyUHJvZmlsZUJhdHRlcnkpCisJCVBvd2VyTW9kZSA9IHBBZC0+U3RhQ2ZnLldpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlOworCWVsc2UKKyNlbmRpZgorCQlQb3dlck1vZGUgPSBwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlOworCisJaWYgKElORlJBX09OKHBBZCkgJiYKKwkJKFBvd2VyTW9kZSAhPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNKSAmJgorCQkocEFkLT5TdGFDZmcuUHNtID09IFBXUl9BQ1RJVkUpICYmCisvLwkJKCEgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKSAvKiYmCisJCShwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgPT0gMCkgJiYKKwkJKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgPT0gMCkqLykKKwl7CisJCS8vIGFkZCBieSBqb2hubGksIHVzZSBSeCBPSyBkYXRhIGNvdW50IHBlciBzZWNvbmQgdG8gY2FsY3VsYXRlIHRocm91Z2hwdXQKKwkJLy8gSWYgVHRyYWZmaWMgaXMgdG9vIGhpZ2ggKCA+IDQwMCBSeCBwZXIgc2Vjb25kKSwgZG9uJ3QgZ28gdG8gc2xlZXAgbW9kZS4gSWYgdHggcmF0ZSBpcyBsb3csIHVzZSBsb3cgY3JpdGVyaWEKKwkJLy8gTW9kZT1DQ0svTUNTPTMgPT4gMTEgTWJwcywgTW9kZT1PRkRNL01DUz0zID0+IDE4IE1icHMKKwkJaWYgKCgocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyA8PSAzKSAmJgorLyogSXZlcnNvbiBtYXJrCisJCQkJKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkgJiYKKyovCisJCQkJKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0RhdGFDbnQgPCAoVUxPTkcpMTAwKSkgfHwKKwkJCSgocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyA+IDMpICYmCisvKiBJdmVyc29uIG1hcmsKKwkJCShwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA+IE1PREVfT0ZETSkgJiYKKyovCisJCQkocEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeE9rRGF0YUNudCA8IChVTE9ORyk0MDApKSkKKwkJeworCQkJCS8vIEdldCB0aGlzIHRpbWUKKwkJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJnBBZC0+TWxtZS5MYXN0U2VuZE5VTExwc21UaW1lKTsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudFNpbmNlTGFzdE5VTEwgPSAwOworCQkJTWxtZVNldFBzbUJpdChwQWQsIFBXUl9TQVZFKTsKKwkJCWlmICghKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSAmJiBwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZSkpCisJCQl7CisJCQkJUlRNUFNlbmROdWxsRnJhbWUocEFkLCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUsIEZBTFNFKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlSVE1QU2VuZE51bGxGcmFtZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwgVFJVRSk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgTWxtZVNldFBzbUJpdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgcHNtKQoreworCUFVVE9fUlNQX0NGR19TVFJVQyBjc3I0OworCisJcEFkLT5TdGFDZmcuUHNtID0gcHNtOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgQVVUT19SU1BfQ0ZHLCAmY3NyNC53b3JkKTsKKwljc3I0LmZpZWxkLkFja0N0c1BzbUJpdCA9IChwc20gPT0gUFdSX1NBVkUpPyAxOjA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19SU1BfQ0ZHLCBjc3I0LndvcmQpOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBNbG1lU2V0VHhQcmVhbWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgVHhQcmVhbWJsZSkKK3sKKwlBVVRPX1JTUF9DRkdfU1RSVUMgY3NyNDsKKworCS8vCisJLy8gQWx3YXlzIHVzZSBMb25nIHByZWFtYmxlIGJlZm9yZSB2ZXJpZmlhdGlvbiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzIHdlbGwuCisJLy8gVG9kbzogcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzCisJLy8KKwkvL1R4UHJlYW1ibGUgPSBSdDgwMl8xMVByZWFtYmxlTG9uZzsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgQVVUT19SU1BfQ0ZHLCAmY3NyNC53b3JkKTsKKwlpZiAoVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlTG9uZykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVTZXRUeFByZWFtYmxlICg9IExPTkcgUFJFQU1CTEUpXG4iKSk7CisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisJCWNzcjQuZmllbGQuQXV0b1Jlc3BvbmRlclByZWFtYmxlID0gMDsKKwl9CisJZWxzZQorCXsKKwkJLy8gTk9URTogMU1icHMgc2hvdWxkIGFsd2F5cyB1c2UgbG9uZyBwcmVhbWJsZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU2V0VHhQcmVhbWJsZSAoPSBTSE9SVCBQUkVBTUJMRSlcbiIpKTsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisJCWNzcjQuZmllbGQuQXV0b1Jlc3BvbmRlclByZWFtYmxlID0gMTsKKwl9CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1JTUF9DRkcsIGNzcjQud29yZCk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgVXBkYXRlIGJhc2ljIHJhdGUgYml0bWFwCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCitWT0lEIFVwZGF0ZUJhc2ljUmF0ZUJpdG1hcCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyKQoreworICAgIElOVCAgaSwgajsKKyAgICAgICAgICAgICAgICAgIC8qIDEgIDIgIDUuNSwgMTEsICA2LCAgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCAgNTQgKi8KKyAgICBVQ0hBUiByYXRlW10gPSB7IDIsIDQsICAxMSwgMjIsIDEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDggfTsKKyAgICBVQ0hBUiAqc3VwX3AgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlN1cFJhdGU7CisgICAgVUNIQVIgKmV4dF9wID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5FeHRSYXRlOworICAgIFVMT05HIGJpdG1hcCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwOworCisKKyAgICAvKiBpZiBBIG1vZGUsIGFsd2F5cyB1c2UgZml4IEJhc2ljUmF0ZUJpdE1hcCAqLworICAgIC8vaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCA9PSBQSFlfMTFBKQorCWlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKyAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5CYXNpY1JhdGVCaXRtYXAgPSAweDE1MDsgLyogNiwgMTIsIDI0TSAqLworICAgIC8qIEVuZCBvZiBpZiAqLworCisgICAgaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwID4gNDA5NSkKKyAgICB7CisgICAgICAgIC8qICgyIF4gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpIC0xICovCisgICAgICAgIHJldHVybjsKKyAgICB9IC8qIEVuZCBvZiBpZiAqLworCisgICAgZm9yKGk9MDsgaTxNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsgaSsrKQorICAgIHsKKyAgICAgICAgc3VwX3BbaV0gJj0gMHg3ZjsKKyAgICAgICAgZXh0X3BbaV0gJj0gMHg3ZjsKKyAgICB9IC8qIEVuZCBvZiBmb3IgKi8KKworICAgIGZvcihpPTA7IGk8TUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChiaXRtYXAgJiAoMSA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKGo9MDsgajxNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChzdXBfcFtqXSA9PSByYXRlW2ldKQorICAgICAgICAgICAgICAgICAgICBzdXBfcFtqXSB8PSAweDgwOworICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBpZiAqLworICAgICAgICAgICAgfSAvKiBFbmQgb2YgZm9yICovCisKKyAgICAgICAgICAgIGZvcihqPTA7IGo8TUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0X3Bbal0gPT0gcmF0ZVtpXSkKKyAgICAgICAgICAgICAgICAgICAgZXh0X3Bbal0gfD0gMHg4MDsKKyAgICAgICAgICAgICAgICAvKiBFbmQgb2YgaWYgKi8KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIGZvciAqLworICAgICAgICB9IC8qIEVuZCBvZiBpZiAqLworICAgIH0gLyogRW5kIG9mIGZvciAqLworfSAvKiBFbmQgb2YgVXBkYXRlQmFzaWNSYXRlQml0bWFwICovCisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKy8vIGJMaW5rVXAgaXMgdG8gaWRlbnRpZnkgdGhlIGluaXRhbCBsaW5rIHNwZWVkLgorLy8gVFJVRSBpbmRpY2F0ZXMgdGhlIHJhdGUgdXBkYXRlIGF0IGxpbmt1cCwgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gc2V0IHRoZSByYXRlIGF0IDU0TWJwcy4KK1ZPSUQgTWxtZVVwZGF0ZVR4UmF0ZXMoCisJSU4gUFJUTVBfQURBUFRFUiAJCXBBZCwKKwlJTiAJQk9PTEVBTgkJIAkJYkxpbmtVcCwKKwlJTglVQ0hBUgkJCQlhcGlkeCkKK3sKKwlpbnQgaSwgbnVtOworCVVDSEFSIFJhdGUgPSBSQVRFXzYsIE1heERlc2lyZSA9IFJBVEVfMSwgTWF4U3VwcG9ydCA9IFJBVEVfMTsKKwlVQ0hBUiBNaW5TdXBwb3J0ID0gUkFURV81NDsKKwlVTE9ORyBCYXNpY1JhdGVCaXRtYXAgPSAwOworCVVDSEFSIEN1cnJCYXNpY1JhdGUgPSBSQVRFXzE7CisJVUNIQVIgKnBTdXBSYXRlLCBTdXBSYXRlTGVuLCAqcEV4dFJhdGUsIEV4dFJhdGVMZW47CisJUEhUVFJBTlNNSVRfU0VUVElORwkJcEh0UGh5ID0gTlVMTDsKKwlQSFRUUkFOU01JVF9TRVRUSU5HCQlwTWF4SHRQaHkgPSBOVUxMOworCVBIVFRSQU5TTUlUX1NFVFRJTkcJCXBNaW5IdFBoeSA9IE5VTEw7CisJQk9PTEVBTiAJCQkJKmF1dG9fcmF0ZV9jdXJfcDsKKwlVQ0hBUgkJCQkJSHRNY3MgPSBNQ1NfQVVUTzsKKworCS8vIGZpbmQgbWF4IGRlc2lyZWQgcmF0ZQorCVVwZGF0ZUJhc2ljUmF0ZUJpdG1hcChwQWQpOworCisJbnVtID0gMDsKKwlhdXRvX3JhdGVfY3VyX3AgPSBOVUxMOworCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOyBpKyspCisJeworCQlzd2l0Y2ggKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbaV0gJiAweDdmKQorCQl7CisJCQljYXNlIDI6ICBSYXRlID0gUkFURV8xOyAgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSA0OiAgUmF0ZSA9IFJBVEVfMjsgICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgMTE6IFJhdGUgPSBSQVRFXzVfNTsgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDIyOiBSYXRlID0gUkFURV8xMTsgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSAxMjogUmF0ZSA9IFJBVEVfNjsgICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgMTg6IFJhdGUgPSBSQVRFXzk7ICAgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDI0OiBSYXRlID0gUkFURV8xMjsgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSAzNjogUmF0ZSA9IFJBVEVfMTg7ICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgNDg6IFJhdGUgPSBSQVRFXzI0OyAgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDcyOiBSYXRlID0gUkFURV8zNjsgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSA5NjogUmF0ZSA9IFJBVEVfNDg7ICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgMTA4OiBSYXRlID0gUkFURV81NDsgbnVtKys7ICAgYnJlYWs7CisJCQkvL2RlZmF1bHQ6IFJhdGUgPSBSQVRFXzE7ICAgYnJlYWs7CisJCX0KKwkJaWYgKE1heERlc2lyZSA8IFJhdGUpICBNYXhEZXNpcmUgPSBSYXRlOworCX0KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJcEh0UGh5IAkJPSAmcEFkLT5TdGFDZmcuSFRQaHlNb2RlOworCQlwTWF4SHRQaHkJPSAmcEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlOworCQlwTWluSHRQaHkJPSAmcEFkLT5TdGFDZmcuTWluSFRQaHlNb2RlOworCisJCWF1dG9fcmF0ZV9jdXJfcCA9ICZwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaDsKKwkJSHRNY3MgCQk9IHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTOworCisJCWlmICgocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpICYmCisJCQkocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKSAmJgorCQkJKE1heERlc2lyZSA+IFJBVEVfMTEpKQorCQl7CisJCQlNYXhEZXNpcmUgPSBSQVRFXzExOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcEFkLT5Db21tb25DZmcuTWF4RGVzaXJlZFJhdGUgPSBNYXhEZXNpcmU7CisJcE1pbkh0UGh5LT53b3JkID0gMDsKKwlwTWF4SHRQaHktPndvcmQgPSAwOworCXBIdFBoeS0+d29yZCA9IDA7CisKKwkvLyBBdXRvIHJhdGUgc3dpdGNoaW5nIGlzIGVuYWJsZWQgb25seSBpZiBtb3JlIHRoYW4gb25lIERFU0lSRUQgUkFURVMgYXJlCisJLy8gc3BlY2lmaWVkOyBvdGhlcndpc2UgZGlzYWJsZWQKKwlpZiAobnVtIDw9IDEpCisJeworCQkvL09QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpOworCQkvL3BBZC0+Q29tbW9uQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoCT0gRkFMU0U7CisJCSphdXRvX3JhdGVfY3VyX3AgPSBGQUxTRTsKKwl9CisJZWxzZQorCXsKKwkJLy9PUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCk7CisJCS8vcEFkLT5Db21tb25DZmcuYkF1dG9UeFJhdGVTd2l0Y2gJPSBUUlVFOworCQkqYXV0b19yYXRlX2N1cl9wID0gVFJVRTsKKwl9CisKKyNpZiAxCisJaWYgKEh0TWNzICE9IE1DU19BVVRPKQorCXsKKwkJLy9PUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKTsKKwkJLy9wQWQtPkNvbW1vbkNmZy5iQXV0b1R4UmF0ZVN3aXRjaAk9IEZBTFNFOworCQkqYXV0b19yYXRlX2N1cl9wID0gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJCS8vT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpOworCQkvL3BBZC0+Q29tbW9uQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoCT0gVFJVRTsKKwkJKmF1dG9fcmF0ZV9jdXJfcCA9IFRSVUU7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAoKEFESE9DX09OKHBBZCkgfHwgSU5GUkFfT04ocEFkKSkgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKQorCXsKKwkJcFN1cFJhdGUgPSAmcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZVswXTsKKwkJcEV4dFJhdGUgPSAmcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZVswXTsKKwkJU3VwUmF0ZUxlbiA9IHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW47CisJCUV4dFJhdGVMZW4gPSBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuOworCX0KKwllbHNlCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJeworCQlwU3VwUmF0ZSA9ICZwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzBdOworCQlwRXh0UmF0ZSA9ICZwQWQtPkNvbW1vbkNmZy5FeHRSYXRlWzBdOworCQlTdXBSYXRlTGVuID0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbjsKKwkJRXh0UmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW47CisJfQorCisJLy8gZmluZCBtYXggc3VwcG9ydGVkIHJhdGUKKwlmb3IgKGk9MDsgaTxTdXBSYXRlTGVuOyBpKyspCisJeworCQlzd2l0Y2ggKHBTdXBSYXRlW2ldICYgMHg3ZikKKwkJeworCQkJY2FzZSAyOiAgIFJhdGUgPSBSQVRFXzE7CWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDE7CSBicmVhazsKKwkJCWNhc2UgNDogICBSYXRlID0gUkFURV8yOwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDAyOwkgYnJlYWs7CisJCQljYXNlIDExOiAgUmF0ZSA9IFJBVEVfNV81OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDA0OwkgYnJlYWs7CisJCQljYXNlIDIyOiAgUmF0ZSA9IFJBVEVfMTE7CWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDg7CSBicmVhazsKKwkJCWNhc2UgMTI6ICBSYXRlID0gUkFURV82OwkvKmlmIChwU3VwUmF0ZVtpXSAmIDB4ODApKi8gIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMTA7ICBicmVhazsKKwkJCWNhc2UgMTg6ICBSYXRlID0gUkFURV85OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDIwOwkgYnJlYWs7CisJCQljYXNlIDI0OiAgUmF0ZSA9IFJBVEVfMTI7CS8qaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkqLyAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDA0MDsgIGJyZWFrOworCQkJY2FzZSAzNjogIFJhdGUgPSBSQVRFXzE4OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDgwOwkgYnJlYWs7CisJCQljYXNlIDQ4OiAgUmF0ZSA9IFJBVEVfMjQ7CS8qaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkqLyAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDEwMDsgIGJyZWFrOworCQkJY2FzZSA3MjogIFJhdGUgPSBSQVRFXzM2OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMjAwOwkgYnJlYWs7CisJCQljYXNlIDk2OiAgUmF0ZSA9IFJBVEVfNDg7CWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDA0MDA7CSBicmVhazsKKwkJCWNhc2UgMTA4OiBSYXRlID0gUkFURV81NDsJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDgwMDsJIGJyZWFrOworCQkJZGVmYXVsdDogIFJhdGUgPSBSQVRFXzE7CWJyZWFrOworCQl9CisJCWlmIChNYXhTdXBwb3J0IDwgUmF0ZSkJTWF4U3VwcG9ydCA9IFJhdGU7CisKKwkJaWYgKE1pblN1cHBvcnQgPiBSYXRlKSBNaW5TdXBwb3J0ID0gUmF0ZTsKKwl9CisKKwlmb3IgKGk9MDsgaTxFeHRSYXRlTGVuOyBpKyspCisJeworCQlzd2l0Y2ggKHBFeHRSYXRlW2ldICYgMHg3ZikKKwkJeworCQkJY2FzZSAyOiAgIFJhdGUgPSBSQVRFXzE7CWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDE7CSBicmVhazsKKwkJCWNhc2UgNDogICBSYXRlID0gUkFURV8yOwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDAyOwkgYnJlYWs7CisJCQljYXNlIDExOiAgUmF0ZSA9IFJBVEVfNV81OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDA0OwkgYnJlYWs7CisJCQljYXNlIDIyOiAgUmF0ZSA9IFJBVEVfMTE7CWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDg7CSBicmVhazsKKwkJCWNhc2UgMTI6ICBSYXRlID0gUkFURV82OwkvKmlmIChwRXh0UmF0ZVtpXSAmIDB4ODApKi8gIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMTA7ICBicmVhazsKKwkJCWNhc2UgMTg6ICBSYXRlID0gUkFURV85OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDIwOwkgYnJlYWs7CisJCQljYXNlIDI0OiAgUmF0ZSA9IFJBVEVfMTI7CS8qaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkqLyAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDA0MDsgIGJyZWFrOworCQkJY2FzZSAzNjogIFJhdGUgPSBSQVRFXzE4OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDgwOwkgYnJlYWs7CisJCQljYXNlIDQ4OiAgUmF0ZSA9IFJBVEVfMjQ7CS8qaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkqLyAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDEwMDsgIGJyZWFrOworCQkJY2FzZSA3MjogIFJhdGUgPSBSQVRFXzM2OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMjAwOwkgYnJlYWs7CisJCQljYXNlIDk2OiAgUmF0ZSA9IFJBVEVfNDg7CWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDA0MDA7CSBicmVhazsKKwkJCWNhc2UgMTA4OiBSYXRlID0gUkFURV81NDsJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDgwMDsJIGJyZWFrOworCQkJZGVmYXVsdDogIFJhdGUgPSBSQVRFXzE7CWJyZWFrOworCQl9CisJCWlmIChNYXhTdXBwb3J0IDwgUmF0ZSkJTWF4U3VwcG9ydCA9IFJhdGU7CisKKwkJaWYgKE1pblN1cHBvcnQgPiBSYXRlKSBNaW5TdXBwb3J0ID0gUmF0ZTsKKwl9CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBMRUdBQ1lfQkFTSUNfUkFURSwgQmFzaWNSYXRlQml0bWFwKTsKKworCS8vIGNhbGN1bGF0ZSB0aGUgZXhwdGVjdGVkIEFDSyByYXRlIGZvciBlYWNoIFRYIHJhdGUuIFRoaXMgaW5mbyBpcyB1c2VkIHRvIGNhY3VsYXRlCisJLy8gdGhlIERVUkFUSU9OIGZpZWxkIG9mIG91dGdvaW5nIHVuaWljYXN0IERBVEEvTUdNVCBmcmFtZQorCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOyBpKyspCisJeworCQlpZiAoQmFzaWNSYXRlQml0bWFwICYgKDB4MDEgPDwgaSkpCisJCQlDdXJyQmFzaWNSYXRlID0gKFVDSEFSKWk7CisJCXBBZC0+Q29tbW9uQ2ZnLkV4cGVjdGVkQUNLUmF0ZVtpXSA9IEN1cnJCYXNpY1JhdGU7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJNbG1lVXBkYXRlVHhSYXRlc1tNYXhTdXBwb3J0ID0gJWRdID0gTWF4RGVzaXJlICVkIE1icHNcbiIsIFJhdGVJZFRvTWJwc1tNYXhTdXBwb3J0XSwgUmF0ZUlkVG9NYnBzW01heERlc2lyZV0pKTsKKwkvLyBtYXggdHggcmF0ZSA9IG1pbiB7bWF4IGRlc2lyZSByYXRlLCBtYXggc3VwcG9ydGVkIHJhdGV9CisJaWYgKE1heFN1cHBvcnQgPCBNYXhEZXNpcmUpCisJCXBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSA9IE1heFN1cHBvcnQ7CisJZWxzZQorCQlwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgPSBNYXhEZXNpcmU7CisKKwlwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGUgPSBNaW5TdXBwb3J0OworCS8vIDIwMDMtMDctMzEgam9obiAtIDI1MDAgZG9lc24ndCBoYXZlIGdvb2Qgc2Vuc2l0aXZpdHkgYXQgaGlnaCBPRkRNIHJhdGVzLiB0byBpbmNyZWFzZSB0aGUgc3VjY2VzcworCS8vIHJhdGlvIG9mIGluaXRpYWwgREhDUCBwYWNrZXQgZXhjaGFuZ2UsIFRYIHJhdGUgc3RhcnRzIGZyb20gYSBsb3dlciByYXRlIGRlcGVuZGluZworCS8vIG9uIGF2ZXJhZ2UgUlNTSQorCS8vCSAxLiBSU1NJID49IC03MGRiLCBzdGFydCBhdCA1NCBNYnBzIChzaG9ydCBkaXN0YW5jZSkKKwkvLwkgMi4gLTcwID4gUlNTSSA+PSAtNzUsIHN0YXJ0IGF0IDI0IE1icHMgKG1pZCBkaXN0YW5jZSkKKwkvLwkgMy4gLTc1ID4gUlNTSSwgc3RhcnQgYXQgMTEgTWJwcyAobG9uZyBkaXN0YW5jZSkKKwkvL2lmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpLyogJiYKKwkvLwlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkqLykKKwlpZiAoKmF1dG9fcmF0ZV9jdXJfcCkKKwl7CisJCXNob3J0IGRibSA9IDA7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlkYm0gPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kwIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJaWYgKGJMaW5rVXAgPT0gVFJVRSkKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IFJBVEVfMjQ7CisJCWVsc2UKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZTsKKworCQlpZiAoZGJtIDwgLTc1KQorCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gUkFURV8xMTsKKwkJZWxzZSBpZiAoZGJtIDwgLTcwKQorCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gUkFURV8yNDsKKworCQkvLyBzaG91bGQgbmV2ZXIgZXhjZWVkIE1heFR4UmF0ZSAoY29uc2lkZXIgMTFCLW9ubHkgbW9kZSkKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA+IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSkKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZTsKKworCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA9IDA7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZTsKKwkJcEh0UGh5LT5maWVsZC5NQ1MJPSAocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID4gMykgPyAocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlIC0gNCkgOiBwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGU7CisJCXBIdFBoeS0+ZmllbGQuTU9ERQk9IChwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgPiAzKSA/IE1PREVfT0ZETSA6IE1PREVfQ0NLOworCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLlNUQkMJPSBwSHRQaHktPmZpZWxkLlNUQkM7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLlNob3J0R0kJPSBwSHRQaHktPmZpZWxkLlNob3J0R0k7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUwkJPSBwSHRQaHktPmZpZWxkLk1DUzsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBIdFBoeS0+ZmllbGQuTU9ERTsKKwl9CisKKwlpZiAocEFkLT5Db21tb25DZmcuVHhSYXRlIDw9IFJBVEVfMTEpCisJeworCQlwTWF4SHRQaHktPmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJcE1heEh0UGh5LT5maWVsZC5NQ1MgPSBwQWQtPkNvbW1vbkNmZy5UeFJhdGU7CisJCXBNaW5IdFBoeS0+ZmllbGQuTUNTID0gcEFkLT5Db21tb25DZmcuTWluVHhSYXRlOworCX0KKwllbHNlCisJeworCQlwTWF4SHRQaHktPmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCXBNYXhIdFBoeS0+ZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuVHhSYXRlXTsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSA+PSBSQVRFXzYgJiYgKHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSA8PSBSQVRFXzU0KSkKKwkJCXtwTWluSHRQaHktPmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZV07fQorCQllbHNlCisJCQl7cE1pbkh0UGh5LT5maWVsZC5NQ1MgPSBwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGU7fQorCX0KKworCXBIdFBoeS0+d29yZCA9IChwTWF4SHRQaHktPndvcmQpOworCWlmIChiTGlua1VwICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKwl7CisJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS53b3JkID0gcEh0UGh5LT53b3JkOworCQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NYXhIVFBoeU1vZGUud29yZCA9IHBNYXhIdFBoeS0+d29yZDsKKwkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uTWluSFRQaHlNb2RlLndvcmQgPSBwTWluSHRQaHktPndvcmQ7CisJfQorCWVsc2UKKwl7CisJCXN3aXRjaCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSkKKwkJeworCQkJY2FzZSBQSFlfMTFCR19NSVhFRDoKKwkJCWNhc2UgUEhZXzExQjoKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWNhc2UgUEhZXzExQkdOX01JWEVEOgorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gUkFURV8xOworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IFJBVEVfMTsKKworLy8jaWZkZWYJV0lGSV9URVNUCisJCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfMTE7CisvLyNlbHNlCisvLwkJCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV8xOworLy8jZW5kaWYKKwkJCQlicmVhazsKKwkJCWNhc2UgUEhZXzExRzoKKwkJCWNhc2UgUEhZXzExQToKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQkJY2FzZSBQSFlfMTFHTl9NSVhFRDoKKwkJCWNhc2UgUEhZXzExTl8yXzRHOgorCQkJY2FzZSBQSFlfMTFBTl9NSVhFRDoKKwkJCWNhc2UgUEhZXzExTl81RzoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV82OworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJCQkJYnJlYWs7CisJCQljYXNlIFBIWV8xMUFCR19NSVhFRDoKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWNhc2UgUEhZXzExQUJHTl9NSVhFRDoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA8PSAxNCkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gUkFURV8xOworCQkJCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV8xOworCQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gUkFURV8xOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKKwkJCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfNjsKKwkJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDogLy8gZXJyb3IKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBSQVRFXzE7CisJCQkJYnJlYWs7CisJCX0KKwkJLy8KKwkJLy8gS2VlcCBCYXNpYyBNbG1lIFJhdGUuCisJCS8vCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF0uSFRQaHlNb2RlLndvcmQgPSBwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQud29yZDsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID09IE1PREVfT0ZETSkKKwkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW1JBVEVfMjRdOworCQllbHNlCisJCQlwQWQtPk1hY1RhYi5Db250ZW50W01DQVNUX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBSQVRFXzE7CisJCXBBZC0+Q29tbW9uQ2ZnLkJhc2ljTWxtZVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgTWxtZVVwZGF0ZVR4UmF0ZXMgKE1heERlc2lyZT0lZCwgTWF4U3VwcG9ydD0lZCwgTWF4VHhSYXRlPSVkLCBNaW5SYXRlPSVkLCBSYXRlIFN3aXRjaGluZyA9JWQpXG4iLAorCQkJIFJhdGVJZFRvTWJwc1tNYXhEZXNpcmVdLCBSYXRlSWRUb01icHNbTWF4U3VwcG9ydF0sIFJhdGVJZFRvTWJwc1twQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGVdLCBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuTWluVHhSYXRlXSwKKwkJCSAvKk9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkqLyphdXRvX3JhdGVfY3VyX3ApKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgTWxtZVVwZGF0ZVR4UmF0ZXMgKFR4UmF0ZT0lZCwgUnRzUmF0ZT0lZCwgQmFzaWNSYXRlQml0bWFwPTB4JTA0bHgpXG4iLAorCQkJIFJhdGVJZFRvTWJwc1twQWQtPkNvbW1vbkNmZy5UeFJhdGVdLCBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuUnRzUmF0ZV0sIEJhc2ljUmF0ZUJpdG1hcCkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVVcGRhdGVUeFJhdGVzIChNbG1lVHJhbnNtaXQ9MHgleCwgTWluSFRQaHlNb2RlPSV4LCBNYXhIVFBoeU1vZGU9MHgleCwgSFRQaHlNb2RlPTB4JXgpXG4iLAorCQkJIHBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC53b3JkLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1pbkhUUGh5TW9kZS53b3JkICxwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1heEhUUGh5TW9kZS53b3JkICxwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS53b3JkICkpOworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgZnVuY3Rpb24gdXBkYXRlIEhUIFJhdGUgc2V0dGluZy4KKwkJSW5wdXQgV2NpZCB2YWx1ZSBpcyB2YWxpZCBmb3IgMiBjYXNlIDoKKwkJMS4gaXQncyB1c2VkIGZvciBTdGF0aW9uIGluIGluZnJhIG1vZGUgdGhhdCBjb3B5IEFQIHJhdGUgdG8gTWFjdGFibGUuCisJCTIuIE9SIFN0YXRpb24gCWluIGFkaG9jIG1vZGUgdG8gY29weSBwZWVyJ3MgSFQgcmF0ZSB0byBNYWN0YWJsZS4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lVXBkYXRlSHRUeFJhdGVzKAorCUlOIFBSVE1QX0FEQVBURVIgCQlwQWQsCisJSU4JVUNIQVIJCQkJYXBpZHgpCit7CisJVUNIQVIJU3RiY01jczsgLy9qLCBTdGJjTWNzLCBiaXRtYXNrOworCUNIQVIgCWk7IC8vIDMqMworCVJUX0hUX0NBUEFCSUxJVFkgCSpwUnRIdENhcCA9IE5VTEw7CisJUlRfSFRfUEhZX0lORk8JCSpwQWN0aXZlSHRQaHkgPSBOVUxMOworCVVMT05HCQlCYXNpY01DUzsKKwlVQ0hBUiBqLCBiaXRtYXNrOworCVBSVF9IVF9QSFlfSU5GTwkJCXBEZXNpcmVIdFBoeSA9IE5VTEw7CisJUEhUVFJBTlNNSVRfU0VUVElORwkJcEh0UGh5ID0gTlVMTDsKKwlQSFRUUkFOU01JVF9TRVRUSU5HCQlwTWF4SHRQaHkgPSBOVUxMOworCVBIVFRSQU5TTUlUX1NFVFRJTkcJCXBNaW5IdFBoeSA9IE5VTEw7CisJQk9PTEVBTiAJCQkJKmF1dG9fcmF0ZV9jdXJfcDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiTWxtZVVwZGF0ZUh0VHhSYXRlcz09PT4gXG4iKSk7CisKKwlhdXRvX3JhdGVfY3VyX3AgPSBOVUxMOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCXBEZXNpcmVIdFBoeQk9ICZwQWQtPlN0YUNmZy5EZXNpcmVkSHRQaHlJbmZvOworCQlwQWN0aXZlSHRQaHkJPSAmcEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mbzsKKwkJcEh0UGh5IAkJPSAmcEFkLT5TdGFDZmcuSFRQaHlNb2RlOworCQlwTWF4SHRQaHkJPSAmcEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlOworCQlwTWluSHRQaHkJPSAmcEFkLT5TdGFDZmcuTWluSFRQaHlNb2RlOworCisJCWF1dG9fcmF0ZV9jdXJfcCA9ICZwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaDsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAoKEFESE9DX09OKHBBZCkgfHwgSU5GUkFfT04ocEFkKSkgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKQorCXsKKwkJaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IEZBTFNFKQorCQkJcmV0dXJuOworCisJCXBSdEh0Q2FwID0gJnBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5OworCQlwQWN0aXZlSHRQaHkgPSAmcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mbzsKKwkJU3RiY01jcyA9IChVQ0hBUilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzMuU3RiY01jczsKKwkJQmFzaWNNQ1MgPXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uTUNTU2V0WzBdKyhwQWQtPk1sbWVBdXguQWRkSHRJbmZvLk1DU1NldFsxXTw8OCkrKFN0YmNNY3M8PDE2KTsKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSAmJiAocFJ0SHRDYXAtPlJ4U1RCQykgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikpCisJCQlwTWF4SHRQaHktPmZpZWxkLlNUQkMgPSBTVEJDX1VTRTsKKwkJZWxzZQorCQkJcE1heEh0UGh5LT5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCX0KKwllbHNlCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJeworCQlpZiAocERlc2lyZUh0UGh5LT5iSHRFbmFibGUgPT0gRkFMU0UpCisJCQlyZXR1cm47CisKKwkJcFJ0SHRDYXAgPSAmcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5OworCQlTdGJjTWNzID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8zLlN0YmNNY3M7CisJCUJhc2ljTUNTID0gcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLk1DU1NldFswXSsocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLk1DU1NldFsxXTw8OCkrKFN0YmNNY3M8PDE2KTsKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSAmJiAocFJ0SHRDYXAtPlJ4U1RCQykgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikpCisJCQlwTWF4SHRQaHktPmZpZWxkLlNUQkMgPSBTVEJDX1VTRTsKKwkJZWxzZQorCQkJcE1heEh0UGh5LT5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCX0KKworCS8vIERlY2lkZSBNQVggaHQgcmF0ZS4KKwlpZiAoKHBSdEh0Q2FwLT5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCXBNYXhIdFBoeS0+ZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworCWVsc2UKKwkJcE1heEh0UGh5LT5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKworICAgIGlmICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCkgJiYgKHBSdEh0Q2FwLT5DaGFubmVsV2lkdGgpKQorCQlwTWF4SHRQaHktPmZpZWxkLkJXID0gQldfNDA7CisJZWxzZQorCQlwTWF4SHRQaHktPmZpZWxkLkJXID0gQldfMjA7CisKKyAgICBpZiAocE1heEh0UGh5LT5maWVsZC5CVyA9PSBCV18yMCkKKwkJcE1heEh0UGh5LT5maWVsZC5TaG9ydEdJID0gKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjAgJiBwUnRIdENhcC0+U2hvcnRHSWZvcjIwKTsKKwllbHNlCisJCXBNYXhIdFBoeS0+ZmllbGQuU2hvcnRHSSA9IChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjQwICYgcFJ0SHRDYXAtPlNob3J0R0lmb3I0MCk7CisKKwlmb3IgKGk9MjM7IGk+PTA7IGktLSkgLy8gMyozCisJeworCQlqID0gaS84OworCQliaXRtYXNrID0gKDE8PChpLShqKjgpKSk7CisKKwkJaWYgKChwQWN0aXZlSHRQaHktPk1DU1NldFtqXSAmIGJpdG1hc2spICYmIChwRGVzaXJlSHRQaHktPk1DU1NldFtqXSAmIGJpdG1hc2spKQorCQl7CisJCQlwTWF4SHRQaHktPmZpZWxkLk1DUyA9IGk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpPT0wKQorCQkJYnJlYWs7CisJfQorCisJLy8gQ29weSBNSU4gaHQgcmF0ZS4gIHJ0Mjg2MD8/PworCXBNaW5IdFBoeS0+ZmllbGQuQlcgPSBCV18yMDsKKwlwTWluSHRQaHktPmZpZWxkLk1DUyA9IDA7CisJcE1pbkh0UGh5LT5maWVsZC5TVEJDID0gMDsKKwlwTWluSHRQaHktPmZpZWxkLlNob3J0R0kgPSAwOworCS8vSWYgU1RBIGFzc2lnbnMgZml4ZWQgcmF0ZS4gdXBkYXRlIHRvIGZpeGVkIGhlcmUuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJaWYgKCAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgKHBEZXNpcmVIdFBoeS0+TUNTU2V0WzBdICE9IDB4ZmYpKQorCXsKKwkJaWYgKHBEZXNpcmVIdFBoeS0+TUNTU2V0WzRdICE9IDApCisJCXsKKwkJCXBNYXhIdFBoeS0+ZmllbGQuTUNTID0gMzI7CisJCQlwTWluSHRQaHktPmZpZWxkLk1DUyA9IDMyOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJNbG1lVXBkYXRlSHRUeFJhdGVzPD09PSBVc2UgRml4ZWQgTUNTID0gJWRcbiIscE1pbkh0UGh5LT5maWVsZC5NQ1MpKTsKKwkJfQorCisJCWZvciAoaT0yMzsgKENIQVIpaSA+PSAwOyBpLS0pIC8vIDMqMworCQl7CisJCQlqID0gaS84OworCQkJYml0bWFzayA9ICgxPDwoaS0oaio4KSkpOworCQkJaWYgKCAocERlc2lyZUh0UGh5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKSAmJiAocEFjdGl2ZUh0UGh5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKSkKKwkJCXsKKwkJCQlwTWF4SHRQaHktPmZpZWxkLk1DUyA9IGk7CisJCQkJcE1pbkh0UGh5LT5maWVsZC5NQ1MgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGk9PTApCisJCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCS8vIERlY2lkZSBodCByYXRlCisJcEh0UGh5LT5maWVsZC5TVEJDID0gcE1heEh0UGh5LT5maWVsZC5TVEJDOworCXBIdFBoeS0+ZmllbGQuQlcgPSBwTWF4SHRQaHktPmZpZWxkLkJXOworCXBIdFBoeS0+ZmllbGQuTU9ERSA9IHBNYXhIdFBoeS0+ZmllbGQuTU9ERTsKKwlwSHRQaHktPmZpZWxkLk1DUyA9IHBNYXhIdFBoeS0+ZmllbGQuTUNTOworCXBIdFBoeS0+ZmllbGQuU2hvcnRHSSA9IHBNYXhIdFBoeS0+ZmllbGQuU2hvcnRHSTsKKworCS8vIHVzZSBkZWZhdWx0IG5vdy4gcnQyODYwCisJaWYgKHBEZXNpcmVIdFBoeS0+TUNTU2V0WzBdICE9IDB4ZmYpCisJCSphdXRvX3JhdGVfY3VyX3AgPSBGQUxTRTsKKwllbHNlCisJCSphdXRvX3JhdGVfY3VyX3AgPSBUUlVFOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIE1sbWVVcGRhdGVIdFR4UmF0ZXM8LS0tLkFNc2R1U2l6ZSA9ICVkICBcbiIsIHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemUgKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJUWDogTUNTWzBdID0gJXggKGNob29zZSAlZCksIEJXID0gJWQsIFNob3J0R0kgPSAlZCwgTU9ERSA9ICVkLCAgXG4iLCBwQWN0aXZlSHRQaHktPk1DU1NldFswXSxwSHRQaHktPmZpZWxkLk1DUywKKwkJcEh0UGh5LT5maWVsZC5CVywgcEh0UGh5LT5maWVsZC5TaG9ydEdJLCBwSHRQaHktPmZpZWxkLk1PREUpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIk1sbWVVcGRhdGVIdFR4UmF0ZXM8PT09IFxuIikpOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgTWxtZVJhZGlvT2ZmKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVJUMjhYWF9NTE1FX1JBRElPX09GRihwQWQpOworfQorCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgTWxtZVJhZGlvT24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJUlQyOFhYX01MTUVfUkFESU9fT04ocEFkKTsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gYnNzX3RhYmxlLmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisvKiEgXGJyaWVmIGluaXRpYWxpemUgQlNTIHRhYmxlCisgKglccGFyYW0gcF90YWIgcG9pbnRlciB0byB0aGUgdGFibGUKKyAqCVxyZXR1cm4gbm9uZQorICoJXHByZQorICoJXHBvc3QKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworVk9JRCBCc3NUYWJsZUluaXQoCisJSU4gQlNTX1RBQkxFICpUYWIpCit7CisJaW50IGk7CisKKwlUYWItPkJzc05yID0gMDsKKyAgICBUYWItPkJzc092ZXJsYXBOciA9IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfQlNTX1RBQkxFOyBpKyspCisJeworCQlOZGlzWmVyb01lbW9yeSgmVGFiLT5Cc3NFbnRyeVtpXSwgc2l6ZW9mKEJTU19FTlRSWSkpOworCQlUYWItPkJzc0VudHJ5W2ldLlJzc2kgPSAtMTI3OwkvLyBpbml0aWFsIHRoZSByc3NpIGFzIGEgbWluaW11bSB2YWx1ZQorCX0KK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBCQVRhYmxlSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBCQV9UQUJMRSAqVGFiKQoreworCWludCBpOworCisJVGFiLT5udW1Bc09yaWdpbmF0b3IgPSAwOworCVRhYi0+bnVtQXNSZWNpcGllbnQgPSAwOworCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFOyBpKyspCisJeworCQlUYWItPkJBUmVjRW50cnlbaV0uUkVDX0JBX1N0YXR1cyA9IFJlY2lwaWVudF9OT05FOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmKFRhYi0+QkFSZWNFbnRyeVtpXS5SeFJlUmluZ0xvY2spKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFOyBpKyspCisJeworCQlUYWItPkJBT3JpRW50cnlbaV0uT1JJX0JBX1N0YXR1cyA9IE9yaWdpbmF0b3JfTk9ORTsKKwl9Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKy8qISBcYnJpZWYgc2VhcmNoIHRoZSBCU1MgdGFibGUgYnkgU1NJRAorICoJXHBhcmFtIHBfdGFiIHBvaW50ZXIgdG8gdGhlIGJzcyB0YWJsZQorICoJXHBhcmFtIHNzaWQgU1NJRCBzdHJpbmcKKyAqCVxyZXR1cm4gaW5kZXggb2YgdGhlIHRhYmxlLCBCU1NfTk9UX0ZPVU5EIGlmIG5vdCBpbiB0aGUgdGFibGUKKyAqCVxwcmUKKyAqCVxwb3N0CisgKglcbm90ZSBzZWFyY2ggYnkgc2VxdWVudGlhbCBzZWFyY2gKKworIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgKi8KK1VMT05HIEJzc1RhYmxlU2VhcmNoKAorCUlOIEJTU19UQUJMRSAqVGFiLAorCUlOIFBVQ0hBUgkgcEJzc2lkLAorCUlOIFVDSEFSCSBDaGFubmVsKQoreworCVVDSEFSIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKQorCXsKKwkJLy8KKwkJLy8gU29tZSBBUCB0aGF0IHN1cHBvcnQgQS9CL0cgbW9kZSB0aGF0IG1heSB1c2VkIHRoZSBzYW1lIEJTU0lEIG9uIDExQSBhbmQgMTFCL0cuCisJCS8vIFdlIHNob3VsZCBkaXN0aW5ndWlzaCB0aGlzIGNhc2UuCisJCS8vCisJCWlmICgoKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPD0gMTQpICYmIChDaGFubmVsIDw9IDE0KSkgfHwKKwkJCSAoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA+IDE0KSAmJiAoQ2hhbm5lbCA+IDE0KSkpICYmCisJCQlNQUNfQUREUl9FUVVBTChUYWItPkJzc0VudHJ5W2ldLkJzc2lkLCBwQnNzaWQpKQorCQl7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gKFVMT05HKUJTU19OT1RfRk9VTkQ7Cit9CisKK1VMT05HIEJzc1NzaWRUYWJsZVNlYXJjaCgKKwlJTiBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIJIHBCc3NpZCwKKwlJTiBQVUNIQVIJIHBTc2lkLAorCUlOIFVDSEFSCSBTc2lkTGVuLAorCUlOIFVDSEFSCSBDaGFubmVsKQoreworCVVDSEFSIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKQorCXsKKwkJLy8KKwkJLy8gU29tZSBBUCB0aGF0IHN1cHBvcnQgQS9CL0cgbW9kZSB0aGF0IG1heSB1c2VkIHRoZSBzYW1lIEJTU0lEIG9uIDExQSBhbmQgMTFCL0cuCisJCS8vIFdlIHNob3VsZCBkaXN0aW5ndWlzaCB0aGlzIGNhc2UuCisJCS8vCisJCWlmICgoKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPD0gMTQpICYmIChDaGFubmVsIDw9IDE0KSkgfHwKKwkJCSAoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA+IDE0KSAmJiAoQ2hhbm5lbCA+IDE0KSkpICYmCisJCQlNQUNfQUREUl9FUVVBTChUYWItPkJzc0VudHJ5W2ldLkJzc2lkLCBwQnNzaWQpICYmCisJCQlTU0lEX0VRVUFMKHBTc2lkLCBTc2lkTGVuLCBUYWItPkJzc0VudHJ5W2ldLlNzaWQsIFRhYi0+QnNzRW50cnlbaV0uU3NpZExlbikpCisJCXsKKwkJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAoVUxPTkcpQlNTX05PVF9GT1VORDsKK30KKworVUxPTkcgQnNzVGFibGVTZWFyY2hXaXRoU1NJRCgKKwlJTiBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIJIEJzc2lkLAorCUlOIFBVQ0hBUgkgcFNzaWQsCisJSU4gVUNIQVIJIFNzaWRMZW4sCisJSU4gVUNIQVIJIENoYW5uZWwpCit7CisJVUNIQVIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBUYWItPkJzc05yOyBpKyspCisJeworCQlpZiAoKCgoVGFiLT5Cc3NFbnRyeVtpXS5DaGFubmVsIDw9IDE0KSAmJiAoQ2hhbm5lbCA8PSAxNCkpIHx8CisJCQkoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA+IDE0KSAmJiAoQ2hhbm5lbCA+IDE0KSkpICYmCisJCQlNQUNfQUREUl9FUVVBTCgmKFRhYi0+QnNzRW50cnlbaV0uQnNzaWQpLCBCc3NpZCkgJiYKKwkJCShTU0lEX0VRVUFMKHBTc2lkLCBTc2lkTGVuLCBUYWItPkJzc0VudHJ5W2ldLlNzaWQsIFRhYi0+QnNzRW50cnlbaV0uU3NpZExlbikgfHwKKwkJCShOZGlzRXF1YWxNZW1vcnkocFNzaWQsIFplcm9Tc2lkLCBTc2lkTGVuKSkgfHwKKwkJCShOZGlzRXF1YWxNZW1vcnkoVGFiLT5Cc3NFbnRyeVtpXS5Tc2lkLCBaZXJvU3NpZCwgVGFiLT5Cc3NFbnRyeVtpXS5Tc2lkTGVuKSkpKQorCQl7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gKFVMT05HKUJTU19OT1RfRk9VTkQ7Cit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBCc3NUYWJsZURlbGV0ZUVudHJ5KAorCUlOIE9VVAlCU1NfVEFCTEUgKlRhYiwKKwlJTgkJUFVDSEFSCSAgcEJzc2lkLAorCUlOCQlVQ0hBUgkgIENoYW5uZWwpCit7CisJVUNIQVIgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBUYWItPkJzc05yOyBpKyspCisJeworCQlpZiAoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA9PSBDaGFubmVsKSAmJgorCQkJKE1BQ19BRERSX0VRVUFMKFRhYi0+QnNzRW50cnlbaV0uQnNzaWQsIHBCc3NpZCkpKQorCQl7CisJCQlmb3IgKGogPSBpOyBqIDwgVGFiLT5Cc3NOciAtIDE7IGorKykKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmKFRhYi0+QnNzRW50cnlbal0pLCAmKFRhYi0+QnNzRW50cnlbaiArIDFdKSwgc2l6ZW9mKEJTU19FTlRSWSkpOworCQkJfQorCQkJTmRpc1plcm9NZW1vcnkoJihUYWItPkJzc0VudHJ5W1RhYi0+QnNzTnIgLSAxXSksIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJCVRhYi0+QnNzTnIgLT0gMTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlEZWxldGUgdGhlIE9yaWdpbmF0b3IgRW50cnkgaW4gQkF0YWJsZS4gT3IgZGVjcmVhc2UgbnVtQXMgT3JpZ2luYXRvciBieSAxIGlmIG5lZWRlZC4KKworCUFyZ3VtZW50czoKKwkvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEJBVGFibGVEZWxldGVPUklFbnRyeSgKKwlJTiBPVVQJUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JCUJBX09SSV9FTlRSWQkqcEJBT1JJRW50cnkpCit7CisKKwlpZiAocEJBT1JJRW50cnktPk9SSV9CQV9TdGF0dXMgIT0gT3JpZ2luYXRvcl9OT05FKQorCXsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCQlpZiAocEJBT1JJRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKQorCQl7CisJCQlwQWQtPkJBVGFibGUubnVtQXNPcmlnaW5hdG9yIC09IDE7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCQVRhYmxlRGVsZXRlT1JJRW50cnkgbnVtQXNPcmlnaW5hdG9yPSAlbGRcbiIsIHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCkpOworCQkJLy8gRXJhc2UgQml0bWFwIGZsYWcuCisJCX0KKwkJcEFkLT5NYWNUYWIuQ29udGVudFtwQkFPUklFbnRyeS0+V2NpZF0uVFhCQWJpdG1hcCAmPSAofigxPDwocEJBT1JJRW50cnktPlRJRCkgKSk7CS8vIElmIFNUQSBtb2RlLCAgZXJhc2UgZmxhZyBoZXJlCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBT1JJRW50cnktPldjaWRdLkJBT3JpV2NpZEFycmF5W3BCQU9SSUVudHJ5LT5USURdID0gMDsJLy8gSWYgU1RBIG1vZGUsICBlcmFzZSBmbGFnIGhlcmUKKwkJcEJBT1JJRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX05PTkU7CisJCXBCQU9SSUVudHJ5LT5Ub2tlbiA9IDE7CisJCS8vIE5vdCBjbGVhciBTZXF1ZW5jZSBoZXJlLgorCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJfQorfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvKiEgXGJyaWVmCisgKglccGFyYW0KKyAqCVxyZXR1cm4KKyAqCVxwcmUKKyAqCVxwb3N0CisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitWT0lEIEJzc0VudHJ5U2V0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCU9VVCBCU1NfRU5UUlkgKnBCc3MsCisJSU4gUFVDSEFSIHBCc3NpZCwKKwlJTiBDSEFSIFNzaWRbXSwKKwlJTiBVQ0hBUiBTc2lkTGVuLAorCUlOIFVDSEFSIEJzc1R5cGUsCisJSU4gVVNIT1JUIEJlYWNvblBlcmlvZCwKKwlJTiBQQ0ZfUEFSTSBwQ2ZQYXJtLAorCUlOIFVTSE9SVCBBdGltV2luLAorCUlOIFVTSE9SVCBDYXBhYmlsaXR5SW5mbywKKwlJTiBVQ0hBUiBTdXBSYXRlW10sCisJSU4gVUNIQVIgU3VwUmF0ZUxlbiwKKwlJTiBVQ0hBUiBFeHRSYXRlW10sCisJSU4gVUNIQVIgRXh0UmF0ZUxlbiwKKwlJTiBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCUlOIEFERF9IVF9JTkZPX0lFICpwQWRkSHRJbmZvLAkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlJTiBVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbiwKKwlJTiBVQ0hBUgkJCUFkZEh0SW5mb0xlbiwKKwlJTiBVQ0hBUgkJCU5ld0V4dENoYW5PZmZzZXQsCisJSU4gVUNIQVIgQ2hhbm5lbCwKKwlJTiBDSEFSIFJzc2ksCisJSU4gTEFSR0VfSU5URUdFUiBUaW1lU3RhbXAsCisJSU4gVUNIQVIgQ2tpcEZsYWcsCisJSU4gUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJSU4gUFFPU19DQVBBQklMSVRZX1BBUk0gcFFvc0NhcGFiaWxpdHksCisJSU4gUFFCU1NfTE9BRF9QQVJNIHBRYnNzTG9hZCwKKwlJTiBVU0hPUlQgTGVuZ3RoVklFLAorCUlOIFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgcFZJRSkKK3sKKwlDT1BZX01BQ19BRERSKHBCc3MtPkJzc2lkLCBwQnNzaWQpOworCS8vIERlZmF1bHQgSGlkZGVuIFNTSUQgdG8gYmUgVFJVRSwgaXQgd2lsbCBiZSB0dXJuZWQgdG8gRkFMU0UgYWZ0ZXIgY29waW5nIFNTSUQKKwlwQnNzLT5IaWRkZW4gPSAxOworCWlmIChTc2lkTGVuID4gMCkKKwl7CisJCS8vIEZvciBoaWRkZW4gU1NJRCBBUCwgaXQgbWlnaHQgc2VuZCBiZWFjb24gd2l0aCBTU0lEIGxlbiBlcXVhbCB0byAwCisJCS8vIE9yIHNlbmQgYmVhY29uIC9wcm9iZSByZXNwb25zZSB3aXRoIFNTSUQgbGVuIG1hdGNoaW5nIHJlYWwgU1NJRCBsZW5ndGgsCisJCS8vIGJ1dCBTU0lEIGlzIGFsbCB6ZXJvLiBzdWNoIGFzICIwMC0wMC0wMC0wMCIgd2l0aCBsZW5ndGggNC4KKwkJLy8gV2UgaGF2ZSB0byBwcmV2ZW50IHRoaXMgY2FzZSBvdmVyd3JpdGUgY29ycmVjdCB0YWJsZQorCQlpZiAoTmRpc0VxdWFsTWVtb3J5KFNzaWQsIFplcm9Tc2lkLCBTc2lkTGVuKSA9PSAwKQorCQl7CisJCSAgICBOZGlzWmVyb01lbW9yeShwQnNzLT5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCQkJTmRpc01vdmVNZW1vcnkocEJzcy0+U3NpZCwgU3NpZCwgU3NpZExlbik7CisJCQlwQnNzLT5Tc2lkTGVuID0gU3NpZExlbjsKKwkJCXBCc3MtPkhpZGRlbiA9IDA7CisJCX0KKwl9CisJZWxzZQorCQlwQnNzLT5Tc2lkTGVuID0gMDsKKwlwQnNzLT5Cc3NUeXBlID0gQnNzVHlwZTsKKwlwQnNzLT5CZWFjb25QZXJpb2QgPSBCZWFjb25QZXJpb2Q7CisJaWYgKEJzc1R5cGUgPT0gQlNTX0lORlJBKQorCXsKKwkJaWYgKHBDZlBhcm0tPmJWYWxpZCkKKwkJeworCQkJcEJzcy0+Q2ZwQ291bnQgPSBwQ2ZQYXJtLT5DZnBDb3VudDsKKwkJCXBCc3MtPkNmcFBlcmlvZCA9IHBDZlBhcm0tPkNmcFBlcmlvZDsKKwkJCXBCc3MtPkNmcE1heER1cmF0aW9uID0gcENmUGFybS0+Q2ZwTWF4RHVyYXRpb247CisJCQlwQnNzLT5DZnBEdXJSZW1haW5pbmcgPSBwQ2ZQYXJtLT5DZnBEdXJSZW1haW5pbmc7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEJzcy0+QXRpbVdpbiA9IEF0aW1XaW47CisJfQorCisJcEJzcy0+Q2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbzsKKwkvLyBUaGUgcHJpdmFjeSBiaXQgaW5kaWNhdGUgc2VjdXJpdHkgaXMgT04sIGl0IG1haWdodCBiZSBXRVAsIFRLSVAgb3IgQUVTCisJLy8gQ29tYmluZSB3aXRoIEF1dGhNb2RlLCB0aGV5IHdpbGwgZGVjaWRlIHRoZSBjb25uZWN0aW9uIG1ldGhvZHMuCisJcEJzcy0+UHJpdmFjeSA9IENBUF9JU19QUklWQUNZX09OKHBCc3MtPkNhcGFiaWxpdHlJbmZvKTsKKwlBU1NFUlQoU3VwUmF0ZUxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisJaWYgKFN1cFJhdGVMZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPlN1cFJhdGUsIFN1cFJhdGUsIFN1cFJhdGVMZW4pOworCWVsc2UKKwkJTmRpc01vdmVNZW1vcnkocEJzcy0+U3VwUmF0ZSwgU3VwUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCXBCc3MtPlN1cFJhdGVMZW4gPSBTdXBSYXRlTGVuOworCUFTU0VSVChFeHRSYXRlTGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKwlOZGlzTW92ZU1lbW9yeShwQnNzLT5FeHRSYXRlLCBFeHRSYXRlLCBFeHRSYXRlTGVuKTsKKwlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+SHRDYXBhYmlsaXR5LCBwSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4pOworCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5BZGRIdEluZm8sIHBBZGRIdEluZm8sIEFkZEh0SW5mb0xlbik7CisJcEJzcy0+TmV3RXh0Q2hhbk9mZnNldCA9IE5ld0V4dENoYW5PZmZzZXQ7CisJcEJzcy0+RXh0UmF0ZUxlbiA9IEV4dFJhdGVMZW47CisJcEJzcy0+Q2hhbm5lbCA9IENoYW5uZWw7CisJcEJzcy0+Q2VudHJhbENoYW5uZWwgPSBDaGFubmVsOworCXBCc3MtPlJzc2kgPSBSc3NpOworCS8vIFVwZGF0ZSBDa2lwRmxhZy4gaWYgbm90IGV4aXN0cywgdGhlIHZhbHVlIGlzIDB4MAorCXBCc3MtPkNraXBGbGFnID0gQ2tpcEZsYWc7CisKKwkvLyBOZXcgZm9yIG1pY3Jvc29mdCBGaXhlZCBJRXMKKwlOZGlzTW92ZU1lbW9yeShwQnNzLT5GaXhJRXMuVGltZXN0YW1wLCAmVGltZVN0YW1wLCA4KTsKKwlwQnNzLT5GaXhJRXMuQmVhY29uSW50ZXJ2YWwgPSBCZWFjb25QZXJpb2Q7CisJcEJzcy0+Rml4SUVzLkNhcGFiaWxpdGllcyA9IENhcGFiaWxpdHlJbmZvOworCisJLy8gTmV3IGZvciBtaWNyb3NvZnQgVmFyaWFibGUgSUVzCisJaWYgKExlbmd0aFZJRSAhPSAwKQorCXsKKwkJcEJzcy0+VmFySUVMZW4gPSBMZW5ndGhWSUU7CisJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPlZhcklFcywgcFZJRSwgcEJzcy0+VmFySUVMZW4pOworCX0KKwllbHNlCisJeworCQlwQnNzLT5WYXJJRUxlbiA9IDA7CisJfQorCisJcEJzcy0+QWRkSHRJbmZvTGVuID0gMDsKKwlwQnNzLT5IdENhcGFiaWxpdHlMZW4gPSAwOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChIdENhcGFiaWxpdHlMZW4+IDApCisJeworCQlwQnNzLT5IdENhcGFiaWxpdHlMZW4gPSBIdENhcGFiaWxpdHlMZW47CisJCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5IdENhcGFiaWxpdHksIHBIdENhcGFiaWxpdHksIEh0Q2FwYWJpbGl0eUxlbik7CisJCWlmIChBZGRIdEluZm9MZW4gPiAwKQorCQl7CisJCQlwQnNzLT5BZGRIdEluZm9MZW4gPSBBZGRIdEluZm9MZW47CisJCQlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+QWRkSHRJbmZvLCBwQWRkSHRJbmZvLCBBZGRIdEluZm9MZW4pOworCisJIAkJCWlmICgocEFkZEh0SW5mby0+Q29udHJvbENoYW4gPiAyKSYmIChwQWRkSHRJbmZvLT5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQkVMT1cpICYmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkKKwkgCQkJeworCSAJCQkJcEJzcy0+Q2VudHJhbENoYW5uZWwgPSBwQWRkSHRJbmZvLT5Db250cm9sQ2hhbiAtIDI7CisJIAkJCX0KKwkgCQkJZWxzZSBpZiAoKHBBZGRIdEluZm8tPkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9BQk9WRSkgJiYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCQkJCXsKKwkJIAkJCQlwQnNzLT5DZW50cmFsQ2hhbm5lbCA9IHBBZGRIdEluZm8tPkNvbnRyb2xDaGFuICsgMjsKKwkJCQl9CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlCc3NDaXBoZXJQYXJzZShwQnNzKTsKKworCS8vIG5ldyBmb3IgUU9TCisJaWYgKHBFZGNhUGFybSkKKwkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPkVkY2FQYXJtLCBwRWRjYVBhcm0sIHNpemVvZihFRENBX1BBUk0pKTsKKwllbHNlCisJCXBCc3MtPkVkY2FQYXJtLmJWYWxpZCA9IEZBTFNFOworCWlmIChwUW9zQ2FwYWJpbGl0eSkKKwkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPlFvc0NhcGFiaWxpdHksIHBRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpOworCWVsc2UKKwkJcEJzcy0+UW9zQ2FwYWJpbGl0eS5iVmFsaWQgPSBGQUxTRTsKKwlpZiAocFFic3NMb2FkKQorCQlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+UWJzc0xvYWQsIHBRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJZWxzZQorCQlwQnNzLT5RYnNzTG9hZC5iVmFsaWQgPSBGQUxTRTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlQRUlEX1NUUlVDVCAgICAgcEVpZDsKKwkJVVNIT1JUICAgICAgICAgIExlbmd0aCA9IDA7CisKKworCQlOZGlzWmVyb01lbW9yeSgmcEJzcy0+V3BhSUUuSUVbMF0sIE1BWF9DVVNUT01fTEVOKTsKKwkJTmRpc1plcm9NZW1vcnkoJnBCc3MtPlJzbklFLklFWzBdLCBNQVhfQ1VTVE9NX0xFTik7CisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCQlOZGlzWmVyb01lbW9yeSgmcEJzcy0+Q291bnRyeVN0cmluZ1swXSwgMyk7CisJCXBCc3MtPmJIYXNDb3VudHJ5SUUgPSBGQUxTRTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBWSUU7CisJCXdoaWxlICgoTGVuZ3RoICsgMiArIChVU0hPUlQpcEVpZC0+TGVuKSA8PSBMZW5ndGhWSUUpCisJCXsKKwkJCXN3aXRjaChwRWlkLT5FaWQpCisJCQl7CisJCQkJY2FzZSBJRV9XUEE6CisJCQkJCWlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdQQV9PVUksIDQpKQorCQkJCQl7CisJCQkJCQlpZiAoKHBFaWQtPkxlbiArIDIpID4gTUFYX0NVU1RPTV9MRU4pCisJCQkJCQl7CisJCQkJCQkJcEJzcy0+V3BhSUUuSUVMZW4gPSAwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJcEJzcy0+V3BhSUUuSUVMZW4gPSBwRWlkLT5MZW4gKyAyOworCQkJCQkJTmRpc01vdmVNZW1vcnkocEJzcy0+V3BhSUUuSUUsIHBFaWQsIHBCc3MtPldwYUlFLklFTGVuKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElFX1JTTjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKQorCQkJCQl7CisJCQkJCQlpZiAoKHBFaWQtPkxlbiArIDIpID4gTUFYX0NVU1RPTV9MRU4pCisJCQkJCQl7CisJCQkJCQkJcEJzcy0+UnNuSUUuSUVMZW4gPSAwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJcEJzcy0+UnNuSUUuSUVMZW4gPSBwRWlkLT5MZW4gKyAyOworCQkJCQkJTmRpc01vdmVNZW1vcnkocEJzcy0+UnNuSUUuSUUsIHBFaWQsIHBCc3MtPlJzbklFLklFTGVuKTsKKwkJCX0KKwkJCQlicmVhazsKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJCQkJY2FzZSBJRV9DT1VOVFJZOgorCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+Q291bnRyeVN0cmluZ1swXSwgcEVpZC0+T2N0ZXQsIDMpOworCQkJCQlwQnNzLT5iSGFzQ291bnRyeUlFID0gVFJVRTsKKwkJCQkJYnJlYWs7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworICAgICAgICAgICAgfQorCQkJTGVuZ3RoID0gTGVuZ3RoICsgMiArIChVU0hPUlQpcEVpZC0+TGVuOyAgLy8gRWlkWzFdICsgTGVuWzFdKyBjb250ZW50W0xlbl0KKwkJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopcEVpZCArIDIgKyBwRWlkLT5MZW4pOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworfQorCisvKiEKKyAqCVxicmllZiBpbnNlcnQgYW4gZW50cnkgaW50byB0aGUgYnNzIHRhYmxlCisgKglccGFyYW0gcF90YWIgVGhlIEJTUyB0YWJsZQorICoJXHBhcmFtIEJzc2lkIEJTU0lECisgKglccGFyYW0gc3NpZCBTU0lECisgKglccGFyYW0gc3NpZF9sZW4gTGVuZ3RoIG9mIFNTSUQKKyAqCVxwYXJhbSBic3NfdHlwZQorICoJXHBhcmFtIGJlYWNvbl9wZXJpb2QKKyAqCVxwYXJhbSB0aW1lc3RhbXAKKyAqCVxwYXJhbSBwX2NmCisgKglccGFyYW0gYXRpbV93aW4KKyAqCVxwYXJhbSBjYXAKKyAqCVxwYXJhbSByYXRlcworICoJXHBhcmFtIHJhdGVzX2xlbgorICoJXHBhcmFtIGNoYW5uZWxfaWR4CisgKglccmV0dXJuIG5vbmUKKyAqCVxwcmUKKyAqCVxwb3N0CisgKglcbm90ZSBJZiBTU0lEIGlzIGlkZW50aWNhbCwgdGhlIG9sZCBlbnRyeSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lCisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitVTE9ORyBCc3NUYWJsZVNldEVudHJ5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVCBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4sCisJSU4gVUNIQVIgQnNzVHlwZSwKKwlJTiBVU0hPUlQgQmVhY29uUGVyaW9kLAorCUlOIENGX1BBUk0gKkNmUGFybSwKKwlJTiBVU0hPUlQgQXRpbVdpbiwKKwlJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gVUNIQVIgU3VwUmF0ZVtdLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gVUNIQVIgRXh0UmF0ZVtdLAorCUlOIFVDSEFSIEV4dFJhdGVMZW4sCisJSU4gSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlJTiBBRERfSFRfSU5GT19JRSAqcEFkZEh0SW5mbywJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlBZGRIdEluZm9MZW4sCisJSU4gVUNIQVIJCQlOZXdFeHRDaGFuT2Zmc2V0LAorCUlOIFVDSEFSIENoYW5uZWxObywKKwlJTiBDSEFSIFJzc2ksCisJSU4gTEFSR0VfSU5URUdFUiBUaW1lU3RhbXAsCisJSU4gVUNIQVIgQ2tpcEZsYWcsCisJSU4gUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJSU4gUFFPU19DQVBBQklMSVRZX1BBUk0gcFFvc0NhcGFiaWxpdHksCisJSU4gUFFCU1NfTE9BRF9QQVJNIHBRYnNzTG9hZCwKKwlJTiBVU0hPUlQgTGVuZ3RoVklFLAorCUlOIFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgcFZJRSkKK3sKKwlVTE9ORwlJZHg7CisKKwlJZHggPSBCc3NUYWJsZVNlYXJjaFdpdGhTU0lEKFRhYiwgcEJzc2lkLCAgU3NpZCwgU3NpZExlbiwgQ2hhbm5lbE5vKTsKKwlpZiAoSWR4ID09IEJTU19OT1RfRk9VTkQpCisJeworCQlpZiAoVGFiLT5Cc3NOciA+PSBNQVhfTEVOX09GX0JTU19UQUJMRSkKKwkgICAgeworCQkJLy8KKwkJCS8vIEl0IG1heSBoYXBwZW4gd2hlbiBCU1MgVGFibGUgd2FzIGZ1bGwuCisJCQkvLyBUaGUgZGVzaXJlZCBBUCB3aWxsIG5vdCBiZSBhZGRlZCBpbnRvIEJTUyBUYWJsZQorCQkJLy8gSW4gdGhpcyBjYXNlLCBpZiB3ZSBmb3VuZCB0aGUgZGVzaXJlZCBBUCB0aGVuIG92ZXJ3cml0ZSBCU1MgVGFibGUuCisJCQkvLworCQkJaWYoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCXsKKwkJCQlpZiAoTUFDX0FERFJfRVFVQUwocEFkLT5NbG1lQXV4LkJzc2lkLCBwQnNzaWQpIHx8CisJCQkJCVNTSURfRVFVQUwocEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCBTc2lkLCBTc2lkTGVuKSkKKwkJCQl7CisJCQkJCUlkeCA9IFRhYi0+QnNzT3ZlcmxhcE5yOworCQkJCQlCc3NFbnRyeVNldChwQWQsICZUYWItPkJzc0VudHJ5W0lkeF0sIHBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLCBDZlBhcm0sIEF0aW1XaW4sCisJCQkJCQlDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbixwSHRDYXBhYmlsaXR5LCBwQWRkSHRJbmZvLEh0Q2FwYWJpbGl0eUxlbiwgQWRkSHRJbmZvTGVuLAorCQkJCQkJTmV3RXh0Q2hhbk9mZnNldCwgQ2hhbm5lbE5vLCBSc3NpLCBUaW1lU3RhbXAsIENraXBGbGFnLCBwRWRjYVBhcm0sIHBRb3NDYXBhYmlsaXR5LCBwUWJzc0xvYWQsIExlbmd0aFZJRSwgcFZJRSk7CisgICAgICAgICAgICAgICAgICAgIFRhYi0+QnNzT3ZlcmxhcE5yID0gKFRhYi0+QnNzT3ZlcmxhcE5yKyspICUgTUFYX0xFTl9PRl9CU1NfVEFCTEU7CisJCQkJfQorCQkJCXJldHVybiBJZHg7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQlyZXR1cm4gQlNTX05PVF9GT1VORDsKKwkJCX0KKwkJfQorCQlJZHggPSBUYWItPkJzc05yOworCQlCc3NFbnRyeVNldChwQWQsICZUYWItPkJzc0VudHJ5W0lkeF0sIHBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLCBDZlBhcm0sIEF0aW1XaW4sCisJCQkJCUNhcGFiaWxpdHlJbmZvLCBTdXBSYXRlLCBTdXBSYXRlTGVuLCBFeHRSYXRlLCBFeHRSYXRlTGVuLHBIdENhcGFiaWxpdHksIHBBZGRIdEluZm8sSHRDYXBhYmlsaXR5TGVuLCBBZGRIdEluZm9MZW4sCisJCQkJCU5ld0V4dENoYW5PZmZzZXQsIENoYW5uZWxObywgUnNzaSwgVGltZVN0YW1wLCBDa2lwRmxhZywgcEVkY2FQYXJtLCBwUW9zQ2FwYWJpbGl0eSwgcFFic3NMb2FkLCBMZW5ndGhWSUUsIHBWSUUpOworCQlUYWItPkJzc05yKys7CisJfQorCWVsc2UKKwl7CisJCS8qIGF2b2lkICBIaWRkZW4gU1NJRCBmb3JtIGJlYWNvbiB0byBvdmVyd2lyaXRlIGNvcnJlY3QgU1NJRCBmcm9tIHByb2JlIHJlc3BvbnNlICovCisJCWlmICgoU1NJRF9FUVVBTChTc2lkLCBTc2lkTGVuLCBUYWItPkJzc0VudHJ5W0lkeF0uU3NpZCwgVGFiLT5Cc3NFbnRyeVtJZHhdLlNzaWRMZW4pKSB8fAorCQkJKE5kaXNFcXVhbE1lbW9yeShUYWItPkJzc0VudHJ5W0lkeF0uU3NpZCwgWmVyb1NzaWQsIFRhYi0+QnNzRW50cnlbSWR4XS5Tc2lkTGVuKSkpCisJCXsKKwkJCUJzc0VudHJ5U2V0KHBBZCwgJlRhYi0+QnNzRW50cnlbSWR4XSwgcEJzc2lkLCBTc2lkLCBTc2lkTGVuLCBCc3NUeXBlLCBCZWFjb25QZXJpb2QsQ2ZQYXJtLCBBdGltV2luLAorCQkJCQkJQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4scEh0Q2FwYWJpbGl0eSwgcEFkZEh0SW5mbyxIdENhcGFiaWxpdHlMZW4sIEFkZEh0SW5mb0xlbiwKKwkJCQkJCU5ld0V4dENoYW5PZmZzZXQsIENoYW5uZWxObywgUnNzaSwgVGltZVN0YW1wLCBDa2lwRmxhZywgcEVkY2FQYXJtLCBwUW9zQ2FwYWJpbGl0eSwgcFFic3NMb2FkLCBMZW5ndGhWSUUsIHBWSUUpOworCQl9CisJfQorCisJcmV0dXJuIElkeDsKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2lmZGVmIERPVDExTl9EUkFGVDMKK1ZPSUQgIFRyaUV2ZW50SW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJaTsKKworCWZvciAoaSA9IDA7aSA8IE1BWF9UUklHR0VSX0VWRU5UO2krKykKKwkJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5iVmFsaWQgPSBGQUxTRTsKKworCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFObyA9IDA7CisJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QkNvdW50RG93biA9IDA7Cit9CisKK1VMT05HIFRyaUV2ZW50VGFibGVTZXRFbnRyeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgVFJJR0dFUl9FVkVOVF9UQUIgKlRhYiwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlSZWdDbGFzcywKKwlJTiBVQ0hBUiBDaGFubmVsTm8pCit7CisJLy8gRXZlbnQgQQorCWlmIChIdENhcGFiaWxpdHlMZW4gPT0gMCkKKwl7CisJCWlmIChUYWItPkV2ZW50QU5vIDwgTUFYX1RSSUdHRVJfRVZFTlQpCisJCXsKKwkJCVJUTVBNb3ZlTWVtb3J5KFRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLkJTU0lELCBwQnNzaWQsIDYpOworCQkJVGFiLT5FdmVudEFbVGFiLT5FdmVudEFOb10uYlZhbGlkID0gVFJVRTsKKwkJCVRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLkNoYW5uZWwgPSBDaGFubmVsTm87CisJCQlUYWItPkV2ZW50QVtUYWItPkV2ZW50QU5vXS5DRENvdW50ZXIgPSBwQWQtPkNvbW1vbkNmZy5Eb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheTsKKwkJCWlmIChSZWdDbGFzcyAhPSAwKQorCQkJeworCQkJCS8vIEJlYWNvbiBoYXMgUmVndWxhdG9yeSBjbGFzcyBJRS4gU28gdXNlIGJlYWNvbidzCisJCQkJVGFiLT5FdmVudEFbVGFiLT5FdmVudEFOb10uUmVnQ2xhc3MgPSBSZWdDbGFzczsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBVc2UgU3RhdGlvbidzIFJlZ3VsYXRvcnkgY2xhc3MgaW5zdGVhZC4KKwkJCQlpZiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuYkh0RW5hYmxlID09IFRSVUUpCisJCQkJeworCQkJCQlpZiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPiBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJCQl7CisJCQkJCQlUYWItPkV2ZW50QVtUYWItPkV2ZW50QU5vXS5SZWdDbGFzcyA9IDMyOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCQkJCVRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLlJlZ0NsYXNzID0gMzM7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJVGFiLT5FdmVudEFbVGFiLT5FdmVudEFOb10uUmVnQ2xhc3MgPSA/PzsKKworCQkJfQorCisJCQlUYWItPkV2ZW50QU5vICsrOworCQl9CisJfQorCWVsc2UgaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5JbnRvbGVyYW50NDApCisJeworCQlUYWItPkV2ZW50QkNvdW50RG93biA9IHBBZC0+Q29tbW9uQ2ZnLkRvdDExQnNzV2lkdGhDaGFuVHJhbkRlbGF5OworCX0KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRyaWdnZXIgRXZlbnQgdGFibGUgTWFpbnRhaW5lbmNlIGNhbGxlZCBvbmNlIGV2ZXJ5IHNlY29uZC4KKworCUFyZ3VtZW50czoKKwkvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFRyaUV2ZW50Q291bnRlck1haW50ZW5hbmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVDSEFSCQlpOworCUJPT0xFQU4JCQliTm90aWZ5ID0gRkFMU0U7CisJZm9yIChpID0gMDtpIDwgTUFYX1RSSUdHRVJfRVZFTlQ7aSsrKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uYlZhbGlkICYmIChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLkNEQ291bnRlciA+IDApKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLkNEQ291bnRlci0tOworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uQ0RDb3VudGVyID09IDApCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5iVmFsaWQgPSBGQUxTRTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBTm8gLS07CisJCQkJLy8gTmVlZCB0byBzZW5kIDIwLzQwIENvZXhpc3RlbmNlIE5vdGlmeSBmcmFtZSBpZiBoYXMgc3RhdHVzIGNoYW5nZS4KKwkJCQliTm90aWZ5ID0gVFJVRTsKKwkJCX0KKwkJfQorCX0KKwlpZiAocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QkNvdW50RG93biA+IDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRCQ291bnREb3duLS07CisJCWlmIChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRCQ291bnREb3duID09IDApCisJCQliTm90aWZ5ID0gVFJVRTsKKwl9CisKKwlpZiAoYk5vdGlmeSA9PSBUUlVFKQorCQlVcGRhdGUyMDQwQ29leGlzdEZyYW1lQW5kTm90aWZ5KHBBZCwgQlNTSURfV0NJRCwgVFJVRSk7Cit9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgQnNzVGFibGVTc2lkU29ydCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgQlNTX1RBQkxFICpPdXRUYWIsCisJSU4JQ0hBUiBTc2lkW10sCisJSU4JVUNIQVIgU3NpZExlbikKK3sKKwlJTlQgaTsKKwlCc3NUYWJsZUluaXQoT3V0VGFiKTsKKworCWZvciAoaSA9IDA7IGkgPCBwQWQtPlNjYW5UYWIuQnNzTnI7IGkrKykKKwl7CisJCUJTU19FTlRSWSAqcEluQnNzID0gJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtpXTsKKwkJQk9PTEVBTgliSXNIaWRkZW5BcEluY2x1ZGVkID0gRkFMU0U7CisKKwkJaWYgKCgocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkgJiYKKyAgICAgICAgICAgIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA+IDE0KSAmJgorICAgICAgICAgICAgIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEluQnNzLT5DaGFubmVsKSkKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vIFJvZ2VyIHN5bmMgQ2FycmllcgorICAgICAgICAgICAgIHx8IChwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9PSBUUlVFKQorI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICkKKwkJeworCQkJaWYgKHBJbkJzcy0+SGlkZGVuKQorCQkJCWJJc0hpZGRlbkFwSW5jbHVkZWQgPSBUUlVFOworCQl9CisKKwkJaWYgKChwSW5Cc3MtPkJzc1R5cGUgPT0gcEFkLT5TdGFDZmcuQnNzVHlwZSkgJiYKKwkJCShTU0lEX0VRVUFMKFNzaWQsIFNzaWRMZW4sIHBJbkJzcy0+U3NpZCwgcEluQnNzLT5Tc2lkTGVuKSB8fCBiSXNIaWRkZW5BcEluY2x1ZGVkKSkKKwkJeworCQkJQlNTX0VOVFJZICpwT3V0QnNzID0gJk91dFRhYi0+QnNzRW50cnlbT3V0VGFiLT5Cc3NOcl07CisKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJCS8vIElmIG5vIENvdW50cnkgSUUgZXhpc3RzIG5vIENvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZCB3aGVuIElFRUU4MDIxMWRDbGllbnRNb2RlIGlzIHN0cmljdC4KKwkJCWlmICgocEFkLT5TdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUgPT0gUnQ4MDJfMTFfRF9TdHJpY3QpICYmCisJCQkJKHBJbkJzcy0+Ykhhc0NvdW50cnlJRSA9PSBGQUxTRSkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUgPT0gUnQ4MDJfMTFfRF9TdHJpY3QsIGJ1dCB0aGlzIEFQIGRvZXNuJ3QgaGF2ZSBjb3VudHJ5IElFLlxuIikpOworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJLy8gMi40Ry81RyBOIG9ubHkgbW9kZQorCQkJaWYgKChwSW5Cc3MtPkh0Q2FwYWJpbGl0eUxlbiA9PSAwKSAmJgorCQkJCSgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzJfNEcpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fNUcpKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQSBpcyBpbiBOLW9ubHkgTW9kZSwgdGhpcyBBUCBkb24ndCBoYXZlIEh0IGNhcGFiaWxpdHkgaW4gQmVhY29uLlxuIikpOworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkvLyBOZXcgZm9yIFdQQTIKKwkJCS8vIENoZWNrIHRoZSBBdXRobW9kZSBmaXJzdAorCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCXsKKwkJCQkvLyBDaGVjayBBdXRoTW9kZSBhbmQgQXV0aE1vZGVBdXggZm9yIG1hdGNoaW5nLCBpbiBjYXNlIEFQIHN1cHBvcnQgZHVhbC1tb2RlCisJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBwSW5Cc3MtPkF1dGhNb2RlKSAmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgIT0gcEluQnNzLT5BdXRoTW9kZUF1eCkpCisJCQkJCS8vIE5vbmUgbWF0Y2hlZAorCQkJCQljb250aW51ZTsKKworCQkJCS8vIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBoZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcKKwkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCisJCQkJeworCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9uCisJCQkJCWlmIChwSW5Cc3MtPldQQS5iTWl4TW9kZSA9PSBGQUxTRSkKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCisJCQkJCQkJY29udGludWU7CisKKwkJCQkJLy8gY2hlY2sgZ3JvdXAgY2lwaGVyCisJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgorCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXIpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXJBdXgpKQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCQkJeworCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9uCisJCQkJCWlmIChwSW5Cc3MtPldQQTIuYk1peE1vZGUgPT0gRkFMU0UpCisJCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkvLyBjaGVjayBncm91cCBjaXBoZXIKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgorCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5QYWlyQ2lwaGVyKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuUGFpckNpcGhlckF1eCkpCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQkvLyBCc3MgVHlwZSBtYXRjaGVkLCBTU0lEIG1hdGNoZWQuCisJCQkvLyBXZSB3aWxsIGNoZWNrIHdlcHN0YXR1cyBmb3IgcXVhbGlmaWNhdGlvbiBCc3MKKwkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldlcFN0YXR1cykKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlN0YUNmZy5XZXBTdGF0dXM9JWQsIHdoaWxlIHBJbkJzcy0+V2VwU3RhdHVzPSVkXG4iLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIHBJbkJzcy0+V2VwU3RhdHVzKSk7CisJCQkJLy8KKwkJCQkvLyBGb3IgdGhlIFNFU3YyIGNhc2UsIHdlIHdpbGwgbm90IHF1YWxpZnkgV2VwU3RhdHVzLgorCQkJCS8vCisJCQkJaWYgKCFwSW5Cc3MtPmJTRVMpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvLyBTaW5jZSB0aGUgQVAgaXMgdXNpbmcgaGlkZGVuIFNTSUQsIGFuZCB3ZSBhcmUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gQU5ZCisJCQkvLyBJdCBkZWZpbml0ZWx5IHdpbGwgZmFpbC4gU28sIHNraXAgaXQuCisJCQkvLyBDQ1ggYWxzbyByZXF1aXJlIG5vdCBldmVuIHRyeSB0byBjb25uZWN0IGl0ISEKKwkJCWlmIChTc2lkTGVuID09IDApCisJCQkJY29udGludWU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIElmIGJvdGggc3RhdGlvbiBhbmQgQVAgdXNlIDQwTUh6LCBzdGlsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSA0ME1IWiBiYW5kJ3MgbGVnYWxpdHkgaW4gbXkgY291bnRyeSByZWdpb24KKwkJCS8vIElmIHRoaXMgNDBNSHogd2lkZWJhbmQgaXMgbm90IGFsbG93ZWQgaW4gbXkgY291bnRyeSBsaXN0LCB1c2UgYmFuZHdpZHRoIDIwTUhaIGluc3RlYWQsCisJCQlpZiAoKHBJbkJzcy0+Q2VudHJhbENoYW5uZWwgIT0gcEluQnNzLT5DaGFubmVsKSAmJgorCQkJCShwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDApKQorCQkJeworCQkJCWlmIChSVE1QQ2hlY2tDaGFubmVsKHBBZCwgcEluQnNzLT5DZW50cmFsQ2hhbm5lbCwgcEluQnNzLT5DaGFubmVsKSA9PSBGQUxTRSkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9IEJXXzIwOworCQkJCQlTZXRDb21tb25IVChwQWQpOworCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPSBCV180MDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGggPT0gQkFORF9XSURUSF8yMCkKKwkJCQkJeworCQkJCQkJU2V0Q29tbW9uSFQocEFkKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJLy8gY29weSBtYXRjaGluZyBCU1MgZnJvbSBJblRhYiB0byBPdXRUYWIKKwkJCU5kaXNNb3ZlTWVtb3J5KHBPdXRCc3MsIHBJbkJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOworCisJCQlPdXRUYWItPkJzc05yKys7CisJCX0KKwkJZWxzZSBpZiAoKHBJbkJzcy0+QnNzVHlwZSA9PSBwQWQtPlN0YUNmZy5Cc3NUeXBlKSAmJiAoU3NpZExlbiA9PSAwKSkKKwkJeworCQkJQlNTX0VOVFJZICpwT3V0QnNzID0gJk91dFRhYi0+QnNzRW50cnlbT3V0VGFiLT5Cc3NOcl07CisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJLy8gMi40Ry81RyBOIG9ubHkgbW9kZQorCQkJaWYgKChwSW5Cc3MtPkh0Q2FwYWJpbGl0eUxlbiA9PSAwKSAmJgorCQkJCSgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzJfNEcpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fNUcpKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQSBpcyBpbiBOLW9ubHkgTW9kZSwgdGhpcyBBUCBkb24ndCBoYXZlIEh0IGNhcGFiaWxpdHkgaW4gQmVhY29uLlxuIikpOworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkvLyBOZXcgZm9yIFdQQTIKKwkJCS8vIENoZWNrIHRoZSBBdXRobW9kZSBmaXJzdAorCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCXsKKwkJCQkvLyBDaGVjayBBdXRoTW9kZSBhbmQgQXV0aE1vZGVBdXggZm9yIG1hdGNoaW5nLCBpbiBjYXNlIEFQIHN1cHBvcnQgZHVhbC1tb2RlCisJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBwSW5Cc3MtPkF1dGhNb2RlKSAmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgIT0gcEluQnNzLT5BdXRoTW9kZUF1eCkpCisJCQkJCS8vIE5vbmUgbWF0Y2hlZAorCQkJCQljb250aW51ZTsKKworCQkJCS8vIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBoZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcKKwkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCisJCQkJeworCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9uCisJCQkJCWlmIChwSW5Cc3MtPldQQS5iTWl4TW9kZSA9PSBGQUxTRSkKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCisJCQkJCQkJY29udGludWU7CisKKwkJCQkJLy8gY2hlY2sgZ3JvdXAgY2lwaGVyCisJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgorCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXIpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXJBdXgpKQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCQkJeworCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9uCisJCQkJCWlmIChwSW5Cc3MtPldQQTIuYk1peE1vZGUgPT0gRkFMU0UpCisJCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkvLyBjaGVjayBncm91cCBjaXBoZXIKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgorCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5QYWlyQ2lwaGVyKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuUGFpckNpcGhlckF1eCkpCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQkvLyBCc3MgVHlwZSBtYXRjaGVkLCBTU0lEIG1hdGNoZWQuCisJCQkvLyBXZSB3aWxsIGNoZWNrIHdlcHN0YXR1cyBmb3IgcXVhbGlmaWNhdGlvbiBCc3MKKwkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldlcFN0YXR1cykKKwkJCQkJY29udGludWU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIElmIGJvdGggc3RhdGlvbiBhbmQgQVAgdXNlIDQwTUh6LCBzdGlsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSA0ME1IWiBiYW5kJ3MgbGVnYWxpdHkgaW4gbXkgY291bnRyeSByZWdpb24KKwkJCS8vIElmIHRoaXMgNDBNSHogd2lkZWJhbmQgaXMgbm90IGFsbG93ZWQgaW4gbXkgY291bnRyeSBsaXN0LCB1c2UgYmFuZHdpZHRoIDIwTUhaIGluc3RlYWQsCisJCQlpZiAoKHBJbkJzcy0+Q2VudHJhbENoYW5uZWwgIT0gcEluQnNzLT5DaGFubmVsKSAmJgorCQkJCShwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDApKQorCQkJeworCQkJCWlmIChSVE1QQ2hlY2tDaGFubmVsKHBBZCwgcEluQnNzLT5DZW50cmFsQ2hhbm5lbCwgcEluQnNzLT5DaGFubmVsKSA9PSBGQUxTRSkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9IEJXXzIwOworCQkJCQlTZXRDb21tb25IVChwQWQpOworCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPSBCV180MDsKKwkJCQl9CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCS8vIGNvcHkgbWF0Y2hpbmcgQlNTIGZyb20gSW5UYWIgdG8gT3V0VGFiCisJCQlOZGlzTW92ZU1lbW9yeShwT3V0QnNzLCBwSW5Cc3MsIHNpemVvZihCU1NfRU5UUlkpKTsKKworCQkJT3V0VGFiLT5Cc3NOcisrOworCQl9CisKKwkJaWYgKE91dFRhYi0+QnNzTnIgPj0gTUFYX0xFTl9PRl9CU1NfVEFCTEUpCisJCQlicmVhazsKKwl9CisKKwlCc3NUYWJsZVNvcnRCeVJzc2koT3V0VGFiKTsKK30KKworCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgQnNzVGFibGVTb3J0QnlSc3NpKAorCUlOIE9VVCBCU1NfVEFCTEUgKk91dFRhYikKK3sKKwlJTlQgCSAgaSwgajsKKwlCU1NfRU5UUlkgVG1wQnNzOworCisJZm9yIChpID0gMDsgaSA8IE91dFRhYi0+QnNzTnIgLSAxOyBpKyspCisJeworCQlmb3IgKGogPSBpKzE7IGogPCBPdXRUYWItPkJzc05yOyBqKyspCisJCXsKKwkJCWlmIChPdXRUYWItPkJzc0VudHJ5W2pdLlJzc2kgPiBPdXRUYWItPkJzc0VudHJ5W2ldLlJzc2kpCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkoJlRtcEJzcywgJk91dFRhYi0+QnNzRW50cnlbal0sIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmT3V0VGFiLT5Cc3NFbnRyeVtqXSwgJk91dFRhYi0+QnNzRW50cnlbaV0sIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmT3V0VGFiLT5Cc3NFbnRyeVtpXSwgJlRtcEJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOworCQkJfQorCQl9CisJfQorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK1ZPSUQgQnNzQ2lwaGVyUGFyc2UoCisJSU4gT1VUCVBCU1NfRU5UUlkJcEJzcykKK3sKKwlQRUlEX1NUUlVDVCAJCSBwRWlkOworCVBVQ0hBUgkJCQlwVG1wOworCVBSU05fSUVfSEVBREVSX1NUUlVDVAkJCXBSc25IZWFkZXI7CisJUENJUEhFUl9TVUlURV9TVFJVQ1QJCQlwQ2lwaGVyOworCVBBS01fU1VJVEVfU1RSVUNUCQkJCXBBS007CisJVVNIT1JUCQkJCQkJCUNvdW50OworCUlOVAkJCQkJCQkJTGVuZ3RoOworCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCVRtcENpcGhlcjsKKworCS8vCisJLy8gV2VwU3RhdHVzIHdpbGwgYmUgcmVzZXQgbGF0ZXIsIGlmIEFQIGFubm91bmNlIFRLSVAgb3IgQUVTIG9uIHRoZSBiZWFjb24gZnJhbWUuCisJLy8KKwlpZiAocEJzcy0+UHJpdmFjeSkKKwl7CisJCXBCc3MtPldlcFN0YXR1cyAJPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwl9CisJZWxzZQorCXsKKwkJcEJzcy0+V2VwU3RhdHVzIAk9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwl9CisJLy8gU2V0IGRlZmF1bHQgdG8gZGlzYWJsZSAmIG9wZW4gYXV0aGVudGljYXRpb24gYmVmb3JlIHBhcnNpbmcgdmFyaWFibGUgSUUKKwlwQnNzLT5BdXRoTW9kZQkJPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCXBCc3MtPkF1dGhNb2RlQXV4CT0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKworCS8vIEluaXQgV1BBIHNldHRpbmcKKwlwQnNzLT5XUEEuUGFpckNpcGhlcgk9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwlwQnNzLT5XUEEuUGFpckNpcGhlckF1eCA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwlwQnNzLT5XUEEuR3JvdXBDaXBoZXIJPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBLlJzbkNhcGFiaWxpdHkgPSAwOworCXBCc3MtPldQQS5iTWl4TW9kZQkJPSBGQUxTRTsKKworCS8vIEluaXQgV1BBMiBzZXR0aW5nCisJcEJzcy0+V1BBMi5QYWlyQ2lwaGVyCSA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwlwQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXggPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBMi5Hcm91cENpcGhlcgkgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBMi5Sc25DYXBhYmlsaXR5ID0gMDsKKwlwQnNzLT5XUEEyLmJNaXhNb2RlIAkgPSBGQUxTRTsKKworCisJTGVuZ3RoID0gKElOVCkgcEJzcy0+VmFySUVMZW47CisKKwl3aGlsZSAoTGVuZ3RoID4gMCkKKwl7CisJCS8vIFBhcnNlIGNpcGhlciBzdWl0ZSBiYXNlIG9uIFdQQTEgJiBXUEEyLCB0aGV5IHNob3VsZCBiZSBwYXJzZWQgZGlmZmVyZW50bHkKKwkJcFRtcCA9ICgoUFVDSEFSKSBwQnNzLT5WYXJJRXMpICsgcEJzcy0+VmFySUVMZW4gLSBMZW5ndGg7CisJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBUbXA7CisJCXN3aXRjaCAocEVpZC0+RWlkKQorCQl7CisJCQljYXNlIElFX1dQQToKKwkJCQkvL1BhcnNlIENpc2NvIElFX1dQQSAoTEVBUCwgQ0NLTSwgZXRjLikKKwkJCQlpZiAoIE5kaXNFcXVhbE1lbW9yeSgocFRtcCs4KSwgQ0lTQ09fT1VJLCAzKSkKKwkJCQl7CisJCQkJCXBUbXAgICArPSAxMTsKKwkJCQkJc3dpdGNoICgqcFRtcCkKKwkJCQkJeworCQkJCQkJY2FzZSAxOgorCQkJCQkJY2FzZSA1OgkvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKKwkJCQkJCQlwQnNzLT5XZXBTdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAyOgorCQkJCQkJCXBCc3MtPldlcFN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDQ6CisJCQkJCQkJcEJzcy0+V2VwU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkJCQkJCQlwQnNzLT5XUEEuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQkvLyBpZiBDaXNjbyBJRV9XUEEsIGJyZWFrCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFNFU19PVUksIDMpICYmIChwRWlkLT5MZW4gPT0gNykpCisJCQkJeworCQkJCQlwQnNzLT5iU0VTID0gVFJVRTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkgIT0gMSkKKwkJCQl7CisJCQkJCS8vIGlmIHVuc3VwcG9ydGVkIHZlbmRvciBzcGVjaWZpYyBJRQorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gU2tpcCBPVUksIHZlcnNpb24sIGFuZCBtdWx0aWNhc3Qgc3VpdGUKKwkJCQkvLyBUaGlzIHBhcnQgc2hvdWxkIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUgd2hlbiBBUCBzdXBwb3J0ZWQgbXVsdGlwbGUgY2lwaGVyIHN1aXRlLgorCQkJCS8vIEZvciBub3csIGl0J3MgT0sgc2luY2UgYWxtb3N0IGFsbCBBUHMgaGF2ZSBmaXhlZCBjaXBoZXIgc3VpdGUgc3VwcG9ydGVkLgorCQkJCS8vIHBUbXAgPSAoUFVDSEFSKSBwRWlkLT5PY3RldDsKKwkJCQlwVG1wICAgKz0gMTE7CisKKwkJCQkvLyBDaXBoZXIgU3VpdGUgU2VsZWN0b3JzIGZyb20gU3BlYyBQODAyLjExaS9EMy4yIFAyNi4KKwkJCQkvLwlWYWx1ZQkgICBNZWFuaW5nCisJCQkJLy8JMAkJCU5vbmUKKwkJCQkvLwkxCQkJV0VQLTQwCisJCQkJLy8JMgkJCVRraXAKKwkJCQkvLwkzCQkJV1JBUAorCQkJCS8vCTQJCQlBRVMKKwkJCQkvLwk1CQkJV0VQLTEwNAorCQkJCS8vIFBhcnNlIGdyb3VwIGNpcGhlcgorCQkJCXN3aXRjaCAoKnBUbXApCisJCQkJeworCQkJCQljYXNlIDE6CisJCQkJCWNhc2UgNToJLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5CisJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjoKKwkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA0OgorCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIG51bWJlciBvZiB1bmljYXN0IHN1aXRlCisJCQkJcFRtcCAgICs9IDE7CisKKwkJCQkvLyBza2lwIGFsbCB1bmljYXN0IGNpcGhlciBzdWl0ZXMKKwkJCQkvL0NvdW50ID0gKihQVVNIT1JUKSBwVG1wOworCQkJCUNvdW50ID0gKHBUbXBbMV08PDgpICsgcFRtcFswXTsKKwkJCQlwVG1wICAgKz0gc2l6ZW9mKFVTSE9SVCk7CisKKwkJCQkvLyBQYXJzaW5nIGFsbCB1bmljYXN0IGNpcGhlciBzdWl0ZQorCQkJCXdoaWxlIChDb3VudCA+IDApCisJCQkJeworCQkJCQkvLyBTa2lwIE9VSQorCQkJCQlwVG1wICs9IDM7CisJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkJCQkJc3dpdGNoICgqcFRtcCkKKwkJCQkJeworCQkJCQkJY2FzZSAxOgorCQkJCQkJY2FzZSA1OiAvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKKwkJCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAyOgorCQkJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDQ6CisJCQkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKFRtcENpcGhlciA+IHBCc3MtPldQQS5QYWlyQ2lwaGVyKQorCQkJCQl7CisJCQkJCQkvLyBNb3ZlIHRoZSBsb3dlciBjaXBoZXIgc3VpdGUgdG8gUGFpckNpcGhlckF1eAorCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEuUGFpckNpcGhlcjsKKwkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyCT0gVG1wQ2lwaGVyOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBUbXBDaXBoZXI7CisJCQkJCX0KKwkJCQkJcFRtcCsrOworCQkJCQlDb3VudC0tOworCQkJCX0KKworCQkJCS8vIDQuIGdldCBBS00gc3VpdGUgY291bnRzCisJCQkJLy9Db3VudAk9ICooUFVTSE9SVCkgcFRtcDsKKwkJCQlDb3VudCA9IChwVG1wWzFdPDw4KSArIHBUbXBbMF07CisJCQkJcFRtcCAgICs9IHNpemVvZihVU0hPUlQpOworCQkJCXBUbXAgICArPSAzOworCisJCQkJc3dpdGNoICgqcFRtcCkKKwkJCQl7CisJCQkJCWNhc2UgMToKKwkJCQkJCS8vIFNldCBBUCBzdXBwb3J0IFdQQSBtb2RlCisJCQkJCQlpZiAocEJzcy0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbikKKwkJCQkJCQlwQnNzLT5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDI6CisJCQkJCQkvLyBTZXQgQVAgc3VwcG9ydCBXUEEgbW9kZQorCQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisJCQkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7CisJCQkJCQllbHNlCisJCQkJCQkJcEJzcy0+QXV0aE1vZGVBdXggPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwVG1wICAgKz0gMTsKKworCQkJCS8vIEZpeGVkIGZvciBXUEEtTm9uZQorCQkJCWlmIChwQnNzLT5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCQl7CisJCQkJCXBCc3MtPkF1dGhNb2RlCSAgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7CisJCQkJCXBCc3MtPldlcFN0YXR1cyAgID0gcEJzcy0+V1BBLkdyb3VwQ2lwaGVyOworCQkJCQlpZiAocEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQorCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEuR3JvdXBDaXBoZXI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJcEJzcy0+V2VwU3RhdHVzICAgPSBwQnNzLT5XUEEuUGFpckNpcGhlcjsKKworCQkJCS8vIENoZWNrIHRoZSBQYWlyICYgR3JvdXAsIGlmIGRpZmZlcmVudCwgdHVybiBvbiBtaXhlZCBtb2RlIGZsYWcKKwkJCQlpZiAocEJzcy0+V1BBLkdyb3VwQ2lwaGVyICE9IHBCc3MtPldQQS5QYWlyQ2lwaGVyKQorCQkJCQlwQnNzLT5XUEEuYk1peE1vZGUgPSBUUlVFOworCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfUlNOOgorCQkJCXBSc25IZWFkZXIgPSAoUFJTTl9JRV9IRUFERVJfU1RSVUNUKSBwVG1wOworCisJCQkJLy8gMC4gVmVyc2lvbiBtdXN0IGJlIDEKKwkJCQlpZiAobGUyY3B1MTYocFJzbkhlYWRlci0+VmVyc2lvbikgIT0gMSkKKwkJCQkJYnJlYWs7CisJCQkJcFRtcCAgICs9IHNpemVvZihSU05fSUVfSEVBREVSX1NUUlVDVCk7CisKKwkJCQkvLyAxLiBDaGVjayBncm91cCBjaXBoZXIKKwkJCQlwQ2lwaGVyID0gKFBDSVBIRVJfU1VJVEVfU1RSVUNUKSBwVG1wOworCQkJCWlmICghUlRNUEVxdWFsTWVtb3J5KHBUbXAsIFJTTl9PVUksIDMpKQorCQkJCQlicmVhazsKKworCQkJCS8vIFBhcnNlIGdyb3VwIGNpcGhlcgorCQkJCXN3aXRjaCAocENpcGhlci0+VHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgMToKKwkJCQkJY2FzZSA1OgkvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKKwkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjoKKwkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNDoKKwkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gc2V0IHRvIGNvcnJlY3Qgb2Zmc2V0IGZvciBuZXh0IHBhcnNpbmcKKwkJCQlwVG1wICAgKz0gc2l6ZW9mKENJUEhFUl9TVUlURV9TVFJVQ1QpOworCisJCQkJLy8gMi4gR2V0IHBhaXJ3aXNlIGNpcGhlciBjb3VudHMKKwkJCQkvL0NvdW50ID0gKihQVVNIT1JUKSBwVG1wOworCQkJCUNvdW50ID0gKHBUbXBbMV08PDgpICsgcFRtcFswXTsKKwkJCQlwVG1wICAgKz0gc2l6ZW9mKFVTSE9SVCk7CisKKwkJCQkvLyAzLiBHZXQgcGFpcndpc2UgY2lwaGVyCisJCQkJLy8gUGFyc2luZyBhbGwgdW5pY2FzdCBjaXBoZXIgc3VpdGUKKwkJCQl3aGlsZSAoQ291bnQgPiAwKQorCQkJCXsKKwkJCQkJLy8gU2tpcCBPVUkKKwkJCQkJcENpcGhlciA9IChQQ0lQSEVSX1NVSVRFX1NUUlVDVCkgcFRtcDsKKwkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworCQkJCQlzd2l0Y2ggKHBDaXBoZXItPlR5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2UgMToKKwkJCQkJCWNhc2UgNTogLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5CisJCQkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMjoKKwkJCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSA0OgorCQkJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmIChUbXBDaXBoZXIgPiBwQnNzLT5XUEEyLlBhaXJDaXBoZXIpCisJCQkJCXsKKwkJCQkJCS8vIE1vdmUgdGhlIGxvd2VyIGNpcGhlciBzdWl0ZSB0byBQYWlyQ2lwaGVyQXV4CisJCQkJCQlwQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEyLlBhaXJDaXBoZXI7CisJCQkJCQlwQnNzLT5XUEEyLlBhaXJDaXBoZXIJID0gVG1wQ2lwaGVyOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4ID0gVG1wQ2lwaGVyOworCQkJCQl9CisJCQkJCXBUbXAgKz0gc2l6ZW9mKENJUEhFUl9TVUlURV9TVFJVQ1QpOworCQkJCQlDb3VudC0tOworCQkJCX0KKworCQkJCS8vIDQuIGdldCBBS00gc3VpdGUgY291bnRzCisJCQkJLy9Db3VudAk9ICooUFVTSE9SVCkgcFRtcDsKKwkJCQlDb3VudCA9IChwVG1wWzFdPDw4KSArIHBUbXBbMF07CisJCQkJcFRtcCAgICs9IHNpemVvZihVU0hPUlQpOworCisJCQkJLy8gNS4gR2V0IEFLTSBjaXBoZXJzCisJCQkJcEFLTSA9IChQQUtNX1NVSVRFX1NUUlVDVCkgcFRtcDsKKwkJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeShwVG1wLCBSU05fT1VJLCAzKSkKKwkJCQkJYnJlYWs7CisKKwkJCQlzd2l0Y2ggKHBBS00tPlR5cGUpCisJCQkJeworCQkJCQljYXNlIDE6CisJCQkJCQkvLyBTZXQgQVAgc3VwcG9ydCBXUEEgbW9kZQorCQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisJCQkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyOworCQkJCQkJZWxzZQorCQkJCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMjsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDI6CisJCQkJCQkvLyBTZXQgQVAgc3VwcG9ydCBXUEEgbW9kZQorCQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisJCQkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOworCQkJCQkJZWxzZQorCQkJCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXBUbXAgICArPSAoQ291bnQgKiBzaXplb2YoQUtNX1NVSVRFX1NUUlVDVCkpOworCisJCQkJLy8gRml4ZWQgZm9yIFdQQS1Ob25lCisJCQkJaWYgKHBCc3MtPkJzc1R5cGUgPT0gQlNTX0FESE9DKQorCQkJCXsKKwkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7CisJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0gcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4OworCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIJPSBwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyOworCQkJCQlwQnNzLT5XZXBTdGF0dXMgCQk9IHBCc3MtPldQQS5Hcm91cENpcGhlcjsKKwkJCQkJaWYgKHBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID09IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKwkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0gcEJzcy0+V1BBLkdyb3VwQ2lwaGVyOworCQkJCX0KKwkJCQlwQnNzLT5XZXBTdGF0dXMgICA9IHBCc3MtPldQQTIuUGFpckNpcGhlcjsKKworCQkJCS8vIDYuIEdldCBSU04gY2FwYWJpbGl0eQorCQkJCS8vcEJzcy0+V1BBMi5Sc25DYXBhYmlsaXR5ID0gKihQVVNIT1JUKSBwVG1wOworCQkJCXBCc3MtPldQQTIuUnNuQ2FwYWJpbGl0eSA9IChwVG1wWzFdPDw4KSArIHBUbXBbMF07CisJCQkJcFRtcCArPSBzaXplb2YoVVNIT1JUKTsKKworCQkJCS8vIENoZWNrIHRoZSBQYWlyICYgR3JvdXAsIGlmIGRpZmZlcmVudCwgdHVybiBvbiBtaXhlZCBtb2RlIGZsYWcKKwkJCQlpZiAocEJzcy0+V1BBMi5Hcm91cENpcGhlciAhPSBwQnNzLT5XUEEyLlBhaXJDaXBoZXIpCisJCQkJCXBCc3MtPldQQTIuYk1peE1vZGUgPSBUUlVFOworCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisJCUxlbmd0aCAtPSAocEVpZC0+TGVuICsgMik7CisJfQorfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtYWNfdGFibGUuYworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiEgXGJyaWVmIGdlbmVyYXRlcyBhIHJhbmRvbSBtYWMgYWRkcmVzcyB2YWx1ZSBmb3IgSUJTUyBCU1NJRAorICoJXHBhcmFtIEFkZHIgdGhlIGJzc2lkIGxvY2F0aW9uCisgKglccmV0dXJuIG5vbmUKKyAqCVxwcmUKKyAqCVxwb3N0CisgKi8KK1ZPSUQgTWFjQWRkclJhbmRvbUJzc2lkKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEFkZHIpCit7CisJSU5UIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFDX0FERFJfTEVOOyBpKyspCisJeworCQlwQWRkcltpXSA9IFJhbmRvbUJ5dGUocEFkKTsKKwl9CisKKwlwQWRkclswXSA9IChwQWRkclswXSAmIDB4ZmUpIHwgMHgwMjsgIC8vIHRoZSBmaXJzdCAyIGJpdHMgbXVzdCBiZSAwMXh4eHh4eHh4Cit9CisKKy8qISBcYnJpZWYgaW5pdCB0aGUgbWFuYWdlbWVudCBtYWMgZnJhbWUgaGVhZGVyCisgKglccGFyYW0gcF9oZHIgbWFjIGhlYWRlcgorICoJXHBhcmFtIHN1YnR5cGUgc3VidHlwZSBvZiB0aGUgZnJhbWUKKyAqCVxwYXJhbSBwX2RzIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGRvbid0IGNhcmUgaWYgaXQgaXMgYSBicm9hZGNhc3QgYWRkcmVzcworICoJXHJldHVybiBub25lCisgKglccHJlIHRoZSBzdGF0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGluIHRoZSBwQWQtPlN0YUNmZworICoJIC0gYnNzaWQKKyAqCSAtIHN0YXRpb24gYWRkcmVzcworICoJXHBvc3QKKyAqCVxub3RlIHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGZvbGxvd2luZyBmaWVsZAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitWT0lEIE1ndE1hY0hlYWRlckluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUIFBIRUFERVJfODAyXzExIHBIZHI4MDIxMSwKKwlJTiBVQ0hBUiBTdWJUeXBlLAorCUlOIFVDSEFSIFRvRHMsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBQVUNIQVIgcEJzc2lkKQoreworCU5kaXNaZXJvTWVtb3J5KHBIZHI4MDIxMSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX01HTVQ7CisJcEhkcjgwMjExLT5GQy5TdWJUeXBlID0gU3ViVHlwZTsKKy8vCWlmIChTdWJUeXBlID09IFNVQlRZUEVfQUNLKQkvLyBzYW1wbGUsIG5vIHVzZSwgaXQgd2lsbCBjb25mbGljdCB3aXRoIEFDVElPTiBmcmFtZSBzdWIgdHlwZQorLy8JCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX0NOVEw7CisJcEhkcjgwMjExLT5GQy5Ub0RzID0gVG9EczsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjEsIHBEQSk7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjMsIHBCc3NpZCk7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG1lbV9tZ210LmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHJvdXRpbmUgYnVpbGQgYW4gb3V0Z29pbmcgZnJhbWUsIGFuZCBmaWxsIGFsbCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQKKyAqIGluIGFyZ3VtZW50IGxpc3QgdG8gdGhlIGZyYW1lIGJvZHkuIFRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBpcyB0aGUgc3VtbWF0aW9uCisgKiBvZiBhbGwgYXJndW1lbnRzLgorICogaW5wdXQgcGFyYW1zOgorICoJCUJ1ZmZlciAtIHBvaW50ZXIgdG8gYSBwcmUtYWxsb2NhdGVkIG1lbW9yeSBzZWdtZW50CisgKgkJYXJncyAtIGEgbGlzdCBvZiA8aW50IGFyZ19zaXplLCBhcmc+IHBhaXJzLgorICoJCU5PVEUgTk9URSBOT1RFISEhISB0aGUgbGFzdCBhcmd1bWVudCBtdXN0IGJlIE5VTEwsIG90aGVyd2lzZSB0aGlzCisgKgkJCQkJCSAgIGZ1bmN0aW9uIHdpbGwgRkFJTCEhIQorICogcmV0dXJuOgorICoJCVNpemUgb2YgdGhlIGJ1ZmZlcgorICogdXNhZ2U6CisgKgkJTWFrZU91dGdvaW5nRnJhbWUoQnVmZmVyLCBvdXRwdXRfbGVuZ3RoLCAyLCAmZmMsIDIsICZkdXIsIDYsIHBfYWRkcjEsIDYscF9hZGRyMiwgRU5EX09GX0FSR1MpOworCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitVTE9ORyBNYWtlT3V0Z29pbmdGcmFtZSgKKwlPVVQgQ0hBUiAqQnVmZmVyLAorCU9VVCBVTE9ORyAqRnJhbWVMZW4sIC4uLikKK3sKKwlDSEFSICAgKnA7CisJaW50IAlsZW5nOworCVVMT05HCVRvdExlbmc7CisJdmFfbGlzdCBBcmdzOworCisJLy8gY2FsY3VsYXRlcyB0aGUgdG90YWwgbGVuZ3RoCisJVG90TGVuZyA9IDA7CisJdmFfc3RhcnQoQXJncywgRnJhbWVMZW4pOworCWRvCisJeworCQlsZW5nID0gdmFfYXJnKEFyZ3MsIGludCk7CisJCWlmIChsZW5nID09IEVORF9PRl9BUkdTKQorCQl7CisJCQlicmVhazsKKwkJfQorCQlwID0gdmFfYXJnKEFyZ3MsIFBWT0lEKTsKKwkJTmRpc01vdmVNZW1vcnkoJkJ1ZmZlcltUb3RMZW5nXSwgcCwgbGVuZyk7CisJCVRvdExlbmcgPSBUb3RMZW5nICsgbGVuZzsKKwl9IHdoaWxlKFRSVUUpOworCisJdmFfZW5kKEFyZ3MpOyAvKiBjbGVhbiB1cCAqLworCSpGcmFtZUxlbiA9IFRvdExlbmc7CisJcmV0dXJuIFRvdExlbmc7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG1sbWVfcXVldWUuYworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiEgXGJyaWVmCUluaXRpYWxpemUgVGhlIE1MTUUgUXVldWUsIHVzZWQgYnkgTUxNRSBGdW5jdGlvbnMKKyAqCVxwYXJhbQkqUXVldWUJICAgVGhlIE1MTUUgUXVldWUKKyAqCVxyZXR1cm4gQWx3YXlzCSAgIFJldHVybiBORElTX1NUQVRFX1NVQ0NFU1MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorICoJXHByZQorICoJXHBvc3QKKyAqCVxub3RlCUJlY2F1c2UgdGhpcyBpcyBkb25lIG9ubHkgb25jZSAoYXQgdGhlIGluaXQgc3RhZ2UpLCBubyBuZWVkIHRvIGJlIGxvY2tlZAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICovCitORElTX1NUQVRVUyBNbG1lUXVldWVJbml0KAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKQoreworCUlOVCBpOworCisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJlF1ZXVlLT5Mb2NrKTsKKworCVF1ZXVlLT5OdW0JPSAwOworCVF1ZXVlLT5IZWFkID0gMDsKKwlRdWV1ZS0+VGFpbCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9NTE1FX1FVRVVFOyBpKyspCisJeworCQlRdWV1ZS0+RW50cnlbaV0uT2NjdXBpZWQgPSBGQUxTRTsKKwkJUXVldWUtPkVudHJ5W2ldLk1zZ0xlbiA9IDA7CisJCU5kaXNaZXJvTWVtb3J5KFF1ZXVlLT5FbnRyeVtpXS5Nc2csIE1HTVRfRE1BX0JVRkZFUl9TSVpFKTsKKwl9CisKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworLyohIFxicmllZgkgRW5xdWV1ZSBhIG1lc3NhZ2UgZm9yIG90aGVyIHRocmVhZHMsIGlmIHRoZXkgd2FudCB0byBzZW5kIG1lc3NhZ2VzIHRvIE1MTUUgdGhyZWFkCisgKglccGFyYW0JKlF1ZXVlCSAgVGhlIE1MTUUgUXVldWUKKyAqCVxwYXJhbQkgTWFjaGluZSAgVGhlIFN0YXRlIE1hY2hpbmUgSWQKKyAqCVxwYXJhbQkgTXNnVHlwZSAgVGhlIE1lc3NhZ2UgVHlwZQorICoJXHBhcmFtCSBNc2dMZW4gICBUaGUgTWVzc2FnZSBsZW5ndGgKKyAqCVxwYXJhbQkqTXNnCSAgVGhlIG1lc3NhZ2UgcG9pbnRlcgorICoJXHJldHVybiAgVFJVRSBpZiBlbnF1ZXVlIGlzIHN1Y2Nlc3NmdWwsIEZBTFNFIGlmIHRoZSBxdWV1ZSBpcyBmdWxsCisgKglccHJlCisgKglccG9zdAorICoJXG5vdGUJIFRoZSBtZXNzYWdlIGhhcyB0byBiZSBpbml0aWFsaXplZAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitCT09MRUFOIE1sbWVFbnF1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVMT05HIE1hY2hpbmUsCisJSU4gVUxPTkcgTXNnVHlwZSwKKwlJTiBVTE9ORyBNc2dMZW4sCisJSU4gVk9JRCAqTXNnKQoreworCUlOVCBUYWlsOworCU1MTUVfUVVFVUUJKlF1ZXVlID0gKE1MTUVfUVVFVUUgKikmcEFkLT5NbG1lLlF1ZXVlOworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gRmlyc3QgY2hlY2sgdGhlIHNpemUsIGl0IE1VU1Qgbm90IGV4Y2VlZCB0aGUgbWxtZSBxdWV1ZSBzaXplCisJaWYgKE1zZ0xlbiA+IE1HTVRfRE1BX0JVRkZFUl9TSVpFKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTWxtZUVucXVldWU6IG1zZyB0b28gbGFyZ2UsIHNpemUgPSAlbGQgXG4iLCBNc2dMZW4pKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWlmIChNbG1lUXVldWVGdWxsKFF1ZXVlKSkKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwlUYWlsID0gUXVldWUtPlRhaWw7CisJUXVldWUtPlRhaWwrKzsKKwlRdWV1ZS0+TnVtKys7CisJaWYgKFF1ZXVlLT5UYWlsID09IE1BWF9MRU5fT0ZfTUxNRV9RVUVVRSkKKwl7CisJCVF1ZXVlLT5UYWlsID0gMDsKKwl9CisKKwlRdWV1ZS0+RW50cnlbVGFpbF0uV2NpZCA9IFJFU0VSVkVEX1dDSUQ7CisJUXVldWUtPkVudHJ5W1RhaWxdLk9jY3VwaWVkID0gVFJVRTsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uTWFjaGluZSA9IE1hY2hpbmU7CisJUXVldWUtPkVudHJ5W1RhaWxdLk1zZ1R5cGUgPSBNc2dUeXBlOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2dMZW4gID0gTXNnTGVuOworCisJaWYgKE1zZyAhPSBOVUxMKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoUXVldWUtPkVudHJ5W1RhaWxdLk1zZywgTXNnLCBNc2dMZW4pOworCX0KKworCU5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCXJldHVybiBUUlVFOworfQorCisvKiEgXGJyaWVmCSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBSZWN2IGdldHMgYSBNTE1FIG1lc3NhZ2UKKyAqCVxwYXJhbQkqUXVldWUJCQkgVGhlIE1MTUUgUXVldWUKKyAqCVxwYXJhbQkgVGltZVN0YW1wSGlnaAkgVGhlIHVwcGVyIDMyIGJpdCBvZiB0aW1lc3RhbXAKKyAqCVxwYXJhbQkgVGltZVN0YW1wTG93CSBUaGUgbG93ZXIgMzIgYml0IG9mIHRpbWVzdGFtcAorICoJXHBhcmFtCSBSc3NpCQkJIFRoZSByZWNlaXZpbmcgUlNTSSBzdHJlbmd0aAorICoJXHBhcmFtCSBNc2dMZW4gCQkgVGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZQorICoJXHBhcmFtCSpNc2cJCQkgVGhlIG1lc3NhZ2UgcG9pbnRlcgorICoJXHJldHVybiAgVFJVRSBpZiBldmVyeXRoaW5nIG9rLCBGQUxTRSBvdGhlcndpc2UgKGxpa2UgUXVldWUgRnVsbCkKKyAqCVxwcmUKKyAqCVxwb3N0CisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitCT09MRUFOIE1sbWVFbnF1ZXVlRm9yUmVjdigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVTE9ORyBXY2lkLAorCUlOIFVMT05HIFRpbWVTdGFtcEhpZ2gsCisJSU4gVUxPTkcgVGltZVN0YW1wTG93LAorCUlOIFVDSEFSIFJzc2kwLAorCUlOIFVDSEFSIFJzc2kxLAorCUlOIFVDSEFSIFJzc2kyLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlJTiBWT0lEICpNc2csCisJSU4gVUNIQVIgU2lnbmFsKQoreworCUlOVCAJCSBUYWlsLCBNYWNoaW5lOworCVBGUkFNRV84MDJfMTEgcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpTXNnOworCUlOVAkJIE1zZ1R5cGU7CisJTUxNRV9RVUVVRQkqUXVldWUgPSAoTUxNRV9RVUVVRSAqKSZwQWQtPk1sbWUuUXVldWU7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJLyogTm90aGluZyB0byBkbyBpbiBBVEUgbW9kZSAqLworCWlmKEFURV9PTihwQWQpKQorCQlyZXR1cm4gRkFMU0U7CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKKwl7CisJCURCR1BSSU5UX0VSUigoIk1sbWVFbnF1ZXVlRm9yUmVjdjogZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvLyBGaXJzdCBjaGVjayB0aGUgc2l6ZSwgaXQgTVVTVCBub3QgZXhjZWVkIHRoZSBtbG1lIHF1ZXVlIHNpemUKKwlpZiAoTXNnTGVuID4gTUdNVF9ETUFfQlVGRkVSX1NJWkUpCisJeworCQlEQkdQUklOVF9FUlIoKCJNbG1lRW5xdWV1ZUZvclJlY3Y6IGZyYW1lIHRvbyBsYXJnZSwgc2l6ZSA9ICVsZCBcbiIsIE1zZ0xlbikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKE1sbWVRdWV1ZUZ1bGwoUXVldWUpKQorCXsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAoIU1zZ1R5cGVTdWJzdChwQWQsIHBGcmFtZSwgJk1hY2hpbmUsICZNc2dUeXBlKSkKKwkJeworCQkJREJHUFJJTlRfRVJSKCgiTWxtZUVucXVldWVGb3JSZWN2OiB1bi1yZWNvbmduaXplZCBtZ210LT5zdWJ0eXBlPSVkXG4iLHBGcmFtZS0+SGRyLkZDLlN1YlR5cGUpKTsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIE9LLCB3ZSBnb3QgYWxsIHRoZSBpbmZvcm1hdGlvbnMsIGl0IGlzIHRpbWUgdG8gcHV0IHRoaW5ncyBpbnRvIHF1ZXVlCisJTmRpc0FjcXVpcmVTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7CisJVGFpbCA9IFF1ZXVlLT5UYWlsOworCVF1ZXVlLT5UYWlsKys7CisJUXVldWUtPk51bSsrOworCWlmIChRdWV1ZS0+VGFpbCA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUpCisJeworCQlRdWV1ZS0+VGFpbCA9IDA7CisJfQorCVF1ZXVlLT5FbnRyeVtUYWlsXS5PY2N1cGllZCA9IFRSVUU7CisJUXVldWUtPkVudHJ5W1RhaWxdLk1hY2hpbmUgPSBNYWNoaW5lOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2dUeXBlID0gTXNnVHlwZTsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uTXNnTGVuICA9IE1zZ0xlbjsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uVGltZVN0YW1wLnUuTG93UGFydCA9IFRpbWVTdGFtcExvdzsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uVGltZVN0YW1wLnUuSGlnaFBhcnQgPSBUaW1lU3RhbXBIaWdoOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Sc3NpMCA9IFJzc2kwOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Sc3NpMSA9IFJzc2kxOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Sc3NpMiA9IFJzc2kyOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5TaWduYWwgPSBTaWduYWw7CisJUXVldWUtPkVudHJ5W1RhaWxdLldjaWQgPSAoVUNIQVIpV2NpZDsKKworCVF1ZXVlLT5FbnRyeVtUYWlsXS5DaGFubmVsID0gcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsOworCisJaWYgKE1zZyAhPSBOVUxMKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoUXVldWUtPkVudHJ5W1RhaWxdLk1zZywgTXNnLCBNc2dMZW4pOworCX0KKworCU5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworLyohIFxicmllZgkgRGVxdWV1ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgTUxNRSBRdWV1ZQorICoJXHBhcmFtCSpRdWV1ZQkgIFRoZSBNTE1FIFF1ZXVlCisgKglccGFyYW0JKkVsZW0JICBUaGUgbWVzc2FnZSBkZXF1ZXVlZCBmcm9tIE1MTUUgUXVldWUKKyAqCVxyZXR1cm4gIFRSVUUgaWYgdGhlIEVsZW0gY29udGFpbnMgc29tZXRoaW5nLCBGQUxTRSBvdGhlcndpc2UKKyAqCVxwcmUKKyAqCVxwb3N0CisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitCT09MRUFOIE1sbWVEZXF1ZXVlKAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlLAorCU9VVCBNTE1FX1FVRVVFX0VMRU0gKipFbGVtKQoreworCU5kaXNBY3F1aXJlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCSpFbGVtID0gJihRdWV1ZS0+RW50cnlbUXVldWUtPkhlYWRdKTsKKwlRdWV1ZS0+TnVtLS07CisJUXVldWUtPkhlYWQrKzsKKwlpZiAoUXVldWUtPkhlYWQgPT0gTUFYX0xFTl9PRl9NTE1FX1FVRVVFKQorCXsKKwkJUXVldWUtPkhlYWQgPSAwOworCX0KKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lECU1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUJPT0xFQU4JCQkJQ2FuY2VsbGVkOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUgXG4iKSk7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlVQ0hBUiBpOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkvLyBDYW5jZWwgYWxsIHRpbWVyIGV2ZW50cworCQkvLyBCZSBjYXJlZnVsIHRvIGNhbmNlbCBuZXcgYWRkZWQgdGltZXIKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXNzb2NUaW1lciwJICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCAgICZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5EaXNhc3NvY1RpbWVyLCAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwJICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLAkgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLAkgICAmQ2FuY2VsbGVkKTsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQl7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmQ2FuY2VsbGVkKTsKKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIENoYW5nZSBiYWNrIHRvIG9yaWdpbmFsIGNoYW5uZWwgaW4gY2FzZSBvZiBkb2luZyBzY2FuCisJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKwkvLyBSZXN1bWUgTVNEVSB3aGljaCBpcyB0dXJuZWQgb2ZmIGR1cm5pbmcgc2NhbgorCVJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKHBBZCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gU2V0IGFsbCBzdGF0ZSBtYWNoaW5lcyBiYWNrIElETEUKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IENOVExfSURMRTsKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgICA9IEFTU09DX0lETEU7CisJCXBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgICAgPSBBVVRIX1JFUV9JRExFOworCQlwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SU1BfSURMRTsKKwkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IFNZTkNfSURMRTsKKwkJcEFkLT5NbG1lLkFjdE1hY2hpbmUuQ3VyclN0YXRlICAgID0gQUNUX0lETEU7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCXBBZC0+TWxtZS5EbHNNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IERMU19JRExFOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworfQorCisvKiEgXGJyaWVmCXRlc3QgaWYgdGhlIE1MTUUgUXVldWUgaXMgZW1wdHkKKyAqCVxwYXJhbQkqUXVldWUJICBUaGUgTUxNRSBRdWV1ZQorICoJXHJldHVybiBUUlVFIGlmIHRoZSBRdWV1ZSBpcyBlbXB0eSwgRkFMU0Ugb3RoZXJ3aXNlCisgKglccHJlCisgKglccG9zdAorCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworQk9PTEVBTiBNbG1lUXVldWVFbXB0eSgKKwlJTiBNTE1FX1FVRVVFICpRdWV1ZSkKK3sKKwlCT09MRUFOIEFuczsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCUFucyA9IChRdWV1ZS0+TnVtID09IDApOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCisJcmV0dXJuIEFuczsKK30KKworLyohIFxicmllZgkgdGVzdCBpZiB0aGUgTUxNRSBRdWV1ZSBpcyBmdWxsCisgKglccGFyYW0JICpRdWV1ZSAJIFRoZSBNTE1FIFF1ZXVlCisgKglccmV0dXJuICBUUlVFIGlmIHRoZSBRdWV1ZSBpcyBlbXB0eSwgRkFMU0Ugb3RoZXJ3aXNlCisgKglccHJlCisgKglccG9zdAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitCT09MRUFOIE1sbWVRdWV1ZUZ1bGwoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUpCit7CisJQk9PTEVBTiBBbnM7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwlBbnMgPSAoUXVldWUtPk51bSA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUgfHwgUXVldWUtPkVudHJ5W1F1ZXVlLT5UYWlsXS5PY2N1cGllZCk7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7CisKKwlyZXR1cm4gQW5zOworfQorCisvKiEgXGJyaWVmCSBUaGUgZGVzdHJ1Y3RvciBvZiBNTE1FIFF1ZXVlCisgKglccGFyYW0KKyAqCVxyZXR1cm4KKyAqCVxwcmUKKyAqCVxwb3N0CisgKglcbm90ZQlDbGVhciBNbG1lIFF1ZXVlLCBTZXQgUXVldWUtPk51bSB0byBaZXJvLgorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICovCitWT0lEIE1sbWVRdWV1ZURlc3Ryb3koCisJSU4gTUxNRV9RVUVVRSAqcFF1ZXVlKQoreworCU5kaXNBY3F1aXJlU3BpbkxvY2soJihwUXVldWUtPkxvY2spKTsKKwlwUXVldWUtPk51bSAgPSAwOworCXBRdWV1ZS0+SGVhZCA9IDA7CisJcFF1ZXVlLT5UYWlsID0gMDsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYocFF1ZXVlLT5Mb2NrKSk7CisJTmRpc0ZyZWVTcGluTG9jaygmKHBRdWV1ZS0+TG9jaykpOworfQorCisvKiEgXGJyaWVmCSBUbyBzdWJzdGl0dXRlIHRoZSBtZXNzYWdlIHR5cGUgaWYgdGhlIG1lc3NhZ2UgaXMgY29taW5nIGZyb20gZXh0ZXJuYWwKKyAqCVxwYXJhbQlwRnJhbWUJCSAgIFRoZSBmcmFtZSByZWNlaXZlZAorICoJXHBhcmFtCSpNYWNoaW5lCSAgIFRoZSBzdGF0ZSBtYWNoaW5lCisgKglccGFyYW0JKk1zZ1R5cGUJICAgdGhlIG1lc3NhZ2UgdHlwZSBmb3IgdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxyZXR1cm4gVFJVRSBpZiB0aGUgc3Vic3RpdHV0aW9uIGlzIHN1Y2Nlc3NmdWwsIEZBTFNFIG90aGVyd2lzZQorICoJXHByZQorICoJXHBvc3QKKworIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgKi8KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0JPT0xFQU4gTXNnVHlwZVN1YnN0KAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCwKKwlJTiBQRlJBTUVfODAyXzExIHBGcmFtZSwKKwlPVVQgSU5UICpNYWNoaW5lLAorCU9VVCBJTlQgKk1zZ1R5cGUpCit7CisJVVNIT1JUCVNlcTsKKwlVQ0hBUglFQVBUeXBlOworCVBVQ0hBUglwRGF0YTsKKworCS8vIFBvaW50ZXIgdG8gc3RhcnQgb2YgZGF0YSBmcmFtZXMgaW5jbHVkaW5nIFNOQVAgaGVhZGVyCisJcERhdGEgPSAoUFVDSEFSKSBwRnJhbWUgKyBMRU5HVEhfODAyXzExOworCisJLy8gVGhlIG9ubHkgZGF0YSB0eXBlIHdpbGwgcGFzcyB0byB0aGlzIGZ1bmN0aW9uIGlzIEVBUE9MIGZyYW1lCisJaWYgKHBGcmFtZS0+SGRyLkZDLlR5cGUgPT0gQlRZUEVfREFUQSkKKwl7CisJCWlmIChOZGlzRXF1YWxNZW1vcnkoU05BUF9BSVJPTkVULCBwRGF0YSwgTEVOR1RIXzgwMl8xX0gpKQorCQl7CisJCQkvLyBDaXNjbyBBaXJvbmV0IFNOQVAgaGVhZGVyCisJCQkqTWFjaGluZSA9IEFJUk9ORVRfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX0FJUk9ORVRfTVNHOworCQkJcmV0dXJuIChUUlVFKTsKKwkJfQorI2lmZGVmIExFQVBfU1VQUE9SVAorCQlpZiAoIHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVAgKSAvL0xFQVAKKwkJeworCQkJLy8gTEVBUCBmcmFtZXMKKwkJCSpNYWNoaW5lID0gTEVBUF9TVEFURV9NQUNISU5FOworCQkJRUFQVHlwZSA9ICooKFVDSEFSKilwRnJhbWUgKyBMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0ggKyAxKTsKKwkJCXJldHVybiAoTGVhcE1zZ1R5cGVTdWJzdChFQVBUeXBlLCBNc2dUeXBlKSk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQl7CisJCQkqTWFjaGluZSA9IFdQQV9QU0tfU1RBVEVfTUFDSElORTsKKwkJCUVBUFR5cGUgPSAqKChVQ0hBUiopcEZyYW1lICsgTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IICsgMSk7CisJCQlyZXR1cm4oV3BhTXNnVHlwZVN1YnN0KEVBUFR5cGUsIE1zZ1R5cGUpKTsKKwkJfQorCX0KKworCXN3aXRjaCAocEZyYW1lLT5IZHIuRkMuU3ViVHlwZSkKKwl7CisJCWNhc2UgU1VCVFlQRV9BU1NPQ19SRVE6CisJCQkqTWFjaGluZSA9IEFTU09DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0FTU09DX1JFUTsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfQVNTT0NfUlNQOgorCQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BU1NPQ19SU1A7CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX1JFQVNTT0NfUkVROgorCQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9SRUFTU09DX1JFUTsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfUkVBU1NPQ19SU1A6CisJCQkqTWFjaGluZSA9IEFTU09DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX1JFQVNTT0NfUlNQOworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9QUk9CRV9SRVE6CisJCQkqTWFjaGluZSA9IFNZTkNfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfUFJPQkVfUkVROworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9QUk9CRV9SU1A6CisJCQkqTWFjaGluZSA9IFNZTkNfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfUFJPQkVfUlNQOworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9CRUFDT046CisJCQkqTWFjaGluZSA9IFNZTkNfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfQkVBQ09OOworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9BVElNOgorCQkJKk1hY2hpbmUgPSBTWU5DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0FUSU07CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX0RJU0FTU09DOgorCQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9ESVNBU1NPQ19SRVE7CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX0FVVEg6CisJCQkvLyBnZXQgdGhlIHNlcXVlbmNlIG51bWJlciBmcm9tIHBheWxvYWQgMjQgTWFjIEhlYWRlciArIDIgYnl0ZXMgYWxnb3JpdGhtCisJCQlOZGlzTW92ZU1lbW9yeSgmU2VxLCAmcEZyYW1lLT5PY3RldFsyXSwgc2l6ZW9mKFVTSE9SVCkpOworCQkJaWYgKFNlcSA9PSAxIHx8IFNlcSA9PSAzKQorCQkJeworCQkJCSpNYWNoaW5lID0gQVVUSF9SU1BfU1RBVEVfTUFDSElORTsKKwkJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0FVVEhfT0REOworCQkJfQorCQkJZWxzZSBpZiAoU2VxID09IDIgfHwgU2VxID09IDQpCisJCQl7CisJCQkJKk1hY2hpbmUgPSBBVVRIX1NUQVRFX01BQ0hJTkU7CisJCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BVVRIX0VWRU47CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcmV0dXJuIEZBTFNFOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9ERUFVVEg6CisJCQkqTWFjaGluZSA9IEFVVEhfUlNQX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0RFQVVUSDsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfQUNUSU9OOgorCQkJKk1hY2hpbmUgPSBBQ1RJT05fU1RBVEVfTUFDSElORTsKKwkJCS8vICBTb21ldGltZXMgU3RhIHdpbGwgcmV0dXJuIHdpdGggY2F0ZWdvcnkgYnl0ZXMgd2l0aCBNU0IgPSAxLCBpZiB0aGV5IHJlY2VpdmUgY2F0b2dvcnkgb3V0IG9mIHRoZWlyIHN1cHBvcnQKKwkJCWlmICgocEZyYW1lLT5PY3RldFswXSYweDdGKSA+IE1BWF9QRUVSX0NBVEVfTVNHKQorCQkJeworCQkJCSpNc2dUeXBlID0gTVQyX0FDVF9JTlZBTElEOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSpNc2dUeXBlID0gKHBGcmFtZS0+T2N0ZXRbMF0mMHg3Rik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBGQUxTRTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBzdGF0ZV9tYWNoaW5lLmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyohIFxicmllZiBJbml0aWFsaXplIHRoZSBzdGF0ZSBtYWNoaW5lLgorICoJXHBhcmFtICpTCQkJcG9pbnRlciB0byB0aGUgc3RhdGUgbWFjaGluZQorICoJXHBhcmFtCVRyYW5zCQlTdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb24gZnVuY3Rpb24KKyAqCVxwYXJhbQlTdE5yCQludW1iZXIgb2Ygc3RhdGVzCisgKglccGFyYW0JTXNnTnIJCW51bWJlciBvZiBtZXNzYWdlcworICoJXHBhcmFtCURlZkZ1bmMgCWRlZmF1bHQgZnVuY3Rpb24sIHdoZW4gdGhlcmUgaXMgaW52YWxpZCBzdGF0ZS9tZXNzYWdlIGNvbWJpbmF0aW9uCisgKglccGFyYW0JSW5pdFN0YXRlCWluaXRpYWwgc3RhdGUgb2YgdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwYXJhbQlCYXNlCQlTdGF0ZU1hY2hpbmUgYmFzZSwgaW50ZXJuYWwgdXNlIG9ubHkKKyAqCVxwcmUgcF9zbSBzaG91bGQgYmUgYSBsZWdhbCBwb2ludGVyCisgKglccG9zdAorCisgSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICovCitWT0lEIFN0YXRlTWFjaGluZUluaXQoCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSwKKwlJTiBVTE9ORyBTdE5yLAorCUlOIFVMT05HIE1zZ05yLAorCUlOIFNUQVRFX01BQ0hJTkVfRlVOQyBEZWZGdW5jLAorCUlOIFVMT05HIEluaXRTdGF0ZSwKKwlJTiBVTE9ORyBCYXNlKQoreworCVVMT05HIGksIGo7CisKKwkvLyBzZXQgbnVtYmVyIG9mIHN0YXRlcyBhbmQgbWVzc2FnZXMKKwlTLT5OclN0YXRlID0gU3ROcjsKKwlTLT5Ock1zZyAgID0gTXNnTnI7CisJUy0+QmFzZSAgICA9IEJhc2U7CisKKwlTLT5UcmFuc0Z1bmMgID0gVHJhbnM7CisKKwkvLyBpbml0IGFsbCBzdGF0ZSB0cmFuc2l0aW9uIHRvIGRlZmF1bHQgZnVuY3Rpb24KKwlmb3IgKGkgPSAwOyBpIDwgU3ROcjsgaSsrKQorCXsKKwkJZm9yIChqID0gMDsgaiA8IE1zZ05yOyBqKyspCisJCXsKKwkJCVMtPlRyYW5zRnVuY1tpICogTXNnTnIgKyBqXSA9IERlZkZ1bmM7CisJCX0KKwl9CisKKwkvLyBzZXQgdGhlIHN0YXJ0aW5nIHN0YXRlCisJUy0+Q3VyclN0YXRlID0gSW5pdFN0YXRlOworfQorCisvKiEgXGJyaWVmIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaW50byB0aGUgY2VsbCBpbiB0aGUgc3RhdGUgbWFjaGluZQorICoJXHBhcmFtICpTCXBvaW50ZXIgdG8gdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwYXJhbSBTdAlzdGF0ZQorICoJXHBhcmFtIE1zZwlpbmNvbWluZyBtZXNzYWdlCisgKglccGFyYW0gZgl0aGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiAoc3RhdGUsIG1lc3NhZ2UpIGNvbWJpbmF0aW9uIG9jY3VycyBhdCB0aGUgc3RhdGUgbWFjaGluZQorICoJXHByZSAqUyBzaG91bGQgYmUgYSBsZWdhbCBwb2ludGVyIHRvIHRoZSBzdGF0ZSBtYWNoaW5lLCBzdCwgbXNnLCBzaG91bGQgYmUgYWxsIHdpdGhpbiB0aGUgcmFuZ2UsIEJhc2Ugc2hvdWxkIGJlIHNldCBpbiB0aGUgaW5pdGlhbCBzdGF0ZQorICoJXHBvc3QKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisKKyAqLworVk9JRCBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBVTE9ORyBTdCwKKwlJTiBVTE9ORyBNc2csCisJSU4gU1RBVEVfTUFDSElORV9GVU5DIEZ1bmMpCit7CisJVUxPTkcgTXNnSWR4OworCisJTXNnSWR4ID0gTXNnIC0gUy0+QmFzZTsKKworCWlmIChTdCA8IFMtPk5yU3RhdGUgJiYgTXNnSWR4IDwgUy0+TnJNc2cpCisJeworCQkvLyBib3VuZGFyeSBjaGVja2luZyBiZWZvcmUgc2V0dGluZyB0aGUgYWN0aW9uCisJCVMtPlRyYW5zRnVuY1tTdCAqIFMtPk5yTXNnICsgTXNnSWR4XSA9IEZ1bmM7CisJfQorfQorCisvKiEgXGJyaWVmCSBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHN0YXRlIHRyYW5zaXRpb24KKyAqCVxwYXJhbQkgKkFkYXB0ZXIgdGhlIE5JQyBhZGFwdGVyIHBvaW50ZXIKKyAqCVxwYXJhbQkgKlMgCSAgdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwYXJhbQkgKkVsZW0JICB0aGUgbWVzc2FnZSB0byBiZSBleGVjdXRlZAorICoJXHJldHVybiAgIE5vbmUKKworIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgKi8KK1ZPSUQgU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBTVEFURV9NQUNISU5FICpTLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwkoKihTLT5UcmFuc0Z1bmNbUy0+Q3VyclN0YXRlICogUy0+TnJNc2cgKyBFbGVtLT5Nc2dUeXBlIC0gUy0+QmFzZV0pKShwQWQsIEVsZW0pOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoZSBkcm9wIGZ1bmN0aW9uLCB3aGVuIG1hY2hpbmUgZXhlY3V0ZXMgdGhpcywgdGhlIG1lc3NhZ2UgaXMgc2ltcGx5CisJCWlnbm9yZWQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLCB0aGUgbWVzc2FnZSBpcyBmcmVlZCBpbgorCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKCkKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIERyb3AoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBsZnNyLmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTGZzckluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUxPTkcgU2VlZCkKK3sKKwlpZiAoU2VlZCA9PSAwKQorCQlwQWQtPk1sbWUuU2hpZnRSZWcgPSAxOworCWVsc2UKKwkJcEFkLT5NbG1lLlNoaWZ0UmVnID0gU2VlZDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1VDSEFSIFJhbmRvbUJ5dGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUxPTkcgaTsKKwlVQ0hBUiBSLCBSZXN1bHQ7CisKKwlSID0gMDsKKworCWlmIChwQWQtPk1sbWUuU2hpZnRSZWcgPT0gMCkKKwlOZGlzR2V0U3lzdGVtVXBUaW1lKChVTE9ORyAqKSZwQWQtPk1sbWUuU2hpZnRSZWcpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwl7CisJCWlmIChwQWQtPk1sbWUuU2hpZnRSZWcgJiAweDAwMDAwMDAxKQorCQl7CisJCQlwQWQtPk1sbWUuU2hpZnRSZWcgPSAoKHBBZC0+TWxtZS5TaGlmdFJlZyBeIExGU1JfTUFTSykgPj4gMSkgfCAweDgwMDAwMDAwOworCQkJUmVzdWx0ID0gMTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+TWxtZS5TaGlmdFJlZyA9IHBBZC0+TWxtZS5TaGlmdFJlZyA+PiAxOworCQkJUmVzdWx0ID0gMDsKKwkJfQorCQlSID0gKFIgPDwgMSkgfCBSZXN1bHQ7CisJfQorCisJcmV0dXJuIFI7Cit9CisKK1ZPSUQgQXNpY1VwZGF0ZUF1dG9GYWxsQmFja1RhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBSYXRlVGFibGUpCit7CisJVUNIQVIJCQkJCWk7CisJSFRfRkJLX0NGRzBfU1RSVUMJCUh0Q2ZnMDsKKwlIVF9GQktfQ0ZHMV9TVFJVQwkJSHRDZmcxOworCUxHX0ZCS19DRkcwX1NUUlVDCQlMZ0NmZzA7CisJTEdfRkJLX0NGRzFfU1RSVUMJCUxnQ2ZnMTsKKwlQUlRNUF9UWF9SQVRFX1NXSVRDSAlwQ3VyclR4UmF0ZSwgcE5leHRUeFJhdGU7CisKKwkvLyBzZXQgdG8gaW5pdGlhbCB2YWx1ZQorCUh0Q2ZnMC53b3JkID0gMHg2NTQzMjEwMDsKKwlIdENmZzEud29yZCA9IDB4ZWRjYmE5ODg7CisJTGdDZmcwLndvcmQgPSAweGVkY2JhOTg4OworCUxnQ2ZnMS53b3JkID0gMHgwMDAwMjEwMDsKKworCXBOZXh0VHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKXBSYXRlVGFibGUrMTsKKwlmb3IgKGkgPSAxOyBpIDwgKigoUFVDSEFSKSBwUmF0ZVRhYmxlKTsgaSsrKQorCXsKKwkJcEN1cnJUeFJhdGUgPSAoUFJUTVBfVFhfUkFURV9TV0lUQ0gpcFJhdGVUYWJsZSsxK2k7CisJCXN3aXRjaCAocEN1cnJUeFJhdGUtPk1vZGUpCisJCXsKKwkJCWNhc2UgMDoJCS8vQ0NLCisJCQkJYnJlYWs7CisJCQljYXNlIDE6CQkvL09GRE0KKwkJCQl7CisJCQkJCXN3aXRjaChwQ3VyclR4UmF0ZS0+Q3Vyck1DUykKKwkJCQkJeworCQkJCQkJY2FzZSAwOgorCQkJCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTMEZCSyA9IChwTmV4dFR4UmF0ZS0+TW9kZSA9PSBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT5DdXJyTUNTKzgpOiBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMToKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzFGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDI6CisJCQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1MyRkJLID0gKHBOZXh0VHhSYXRlLT5Nb2RlID09IE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPkN1cnJNQ1MrOCk6IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAzOgorCQkJCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTM0ZCSyA9IChwTmV4dFR4UmF0ZS0+TW9kZSA9PSBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT5DdXJyTUNTKzgpOiBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgNDoKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzRGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDU6CisJCQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1M1RkJLID0gKHBOZXh0VHhSYXRlLT5Nb2RlID09IE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPkN1cnJNQ1MrOCk6IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSA2OgorCQkJCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTNkZCSyA9IChwTmV4dFR4UmF0ZS0+TW9kZSA9PSBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT5DdXJyTUNTKzgpOiBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgNzoKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzdGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQljYXNlIDI6CQkvL0hULU1JWAorCQkJY2FzZSAzOgkJLy9IVC1HRgorCQkJCXsKKwkJCQkJaWYgKChwTmV4dFR4UmF0ZS0+TW9kZSA+PSBNT0RFX0hUTUlYKSAmJiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgIT0gcE5leHRUeFJhdGUtPkN1cnJNQ1MpKQorCQkJCQl7CisJCQkJCQlzd2l0Y2gocEN1cnJUeFJhdGUtPkN1cnJNQ1MpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAwOgorCQkJCQkJCQlIdENmZzAuZmllbGQuSFRNQ1MwRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMToKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTMUZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDI6CisJCQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzJGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAzOgorCQkJCQkJCQlIdENmZzAuZmllbGQuSFRNQ1MzRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgNDoKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTNEZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDU6CisJCQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzVGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSA2OgorCQkJCQkJCQlIdENmZzAuZmllbGQuSFRNQ1M2RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgNzoKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTN0ZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDg6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzhGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSA5OgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1M5RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTA6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzEwRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTE6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzExRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTI6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzEyRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTM6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzEzRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTQ6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzE0RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTU6CisJCQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzE1RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFzaWNVcGRhdGVBdXRvRmFsbEJhY2tUYWJsZTogbm90IHN1cHBvcnQgQ3Vyck1DUz0lZFxuIiwgcEN1cnJUeFJhdGUtPkN1cnJNQ1MpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJfQorCisJCXBOZXh0VHhSYXRlID0gcEN1cnJUeFJhdGU7CisJfQorCisJUlRNUF9JT19XUklURTMyKHBBZCwgSFRfRkJLX0NGRzAsIEh0Q2ZnMC53b3JkKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBIVF9GQktfQ0ZHMSwgSHRDZmcxLndvcmQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIExHX0ZCS19DRkcwLCBMZ0NmZzAud29yZCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTEdfRkJLX0NGRzEsIExnQ2ZnMS53b3JkKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNldCBNQUMgcmVnaXN0ZXIgdmFsdWUgYWNjb3JkaW5nIG9wZXJhdGlvbiBtb2RlLgorCQlPcGVyYXRpb25Nb2RlIEFORCBiTm9uR0ZFeGlzdCBhcmUgZm9yIE1NIGFuZCBHRiBQcm90ZWNpdG9uLgorCQlJZiBNTSBvciBHRiBtYXNrIGlzIG5vdCBzZXQsIHRob3NlIHBhc3NpbmcgYXJndW1lbnQgZG9lc24ndCBub3QgdGFrZSBlZmZlY3QuCisKKwkJT3BlcmF0aW9uIG1vZGUgbWVhbmluZzoKKwkJPSAwIDogUHVyZSBIVCwgbm8gcHJlb3RlY3Rpb24uCisJCT0gMHgwMTsgdGhlcmUgbWF5IGJlIG5vbi1IVCBkZXZpY2VzIGluIGJvdGggdGhlIGNvbnRyb2wgYW5kIGV4dGVuc2lvbiBjaGFubmVsLCBwcm90ZWN0aW9uIGlzIG9wdGlvbmFsIGluIEJTUy4KKwkJPSAweDEwOiBObyBUcmFuc21pc3Npb24gaW4gNDBNIGlzIHByb3RlY3RlZC4KKwkJPSAweDExOiBUcmFuc21pc3Npb24gaW4gYm90aCA0ME0gYW5kIDIwTSBzaGFsbCBiZSBwcm90ZWN0ZWQKKwkJaWYgKGJOb25HRkV4aXN0KQorCQkJd2Ugc2hvdWxkIGNob29zZSBub3QgdG8gdXNlIEdGLiBCdXQgc3RpbGwgc2V0IGNvcnJlY3QgQVNJQyByZWdpc3RlcnMuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCAJQXNpY1VwZGF0ZVByb3RlY3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIAkJVVNIT1JUCQkJT3BlcmF0aW9uTW9kZSwKKwlJTiAJCVVDSEFSCQkJU2V0TWFzaywKKwlJTgkJQk9PTEVBTgkJCWJEaXNhYmxlQkdQcm90ZWN0LAorCUlOCQlCT09MRUFOCQkJYk5vbkdGRXhpc3QpCit7CisJUFJPVF9DRkdfU1RSVUMJUHJvdENmZywgUHJvdENmZzQ7CisJVUlOVDMyIFByb3RlY3RbNl07CisJVVNIT1JUCQkJb2Zmc2V0OworCVVDSEFSCQkJaTsKKwlVSU5UMzIgTWFjUmVnID0gMDsKKworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoIShwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0KSAmJiAoT3BlcmF0aW9uTW9kZSAhPSA4KSkKKwl7CisJCXJldHVybjsKKwl9CisKKwlpZiAocEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvcikKKwl7CisJCS8vCisJCS8vIGVuYWJsZSB0aGUgUlRTL0NUUyB0byBhdm9pZCBjaGFubmVsIGNvbGxpc2lvbgorCQkvLworCQlTZXRNYXNrID0gQUxMTl9TRVRQUk9URUNUOworCQlPcGVyYXRpb25Nb2RlID0gODsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBDb25maWcgQVNJQyBSVFMgdGhyZXNob2xkIHJlZ2lzdGVyCisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9SVFNfQ0ZHLCAmTWFjUmVnKTsKKwlNYWNSZWcgJj0gMHhGRjAwMDBGRjsKKworCS8vIElmIHRoZSB1c2VyIHdhbnQgZGlzYWJsZSBSdHNUaHJlc2hvbGQgYW5kIGVuYmFsZSBBbXNkdS9SYWxpbmstQWdncmVnYXRpb24sIHNldCB0aGUgUnRzVGhyZXNob2xkIGFzIDQwOTYKKyAgICBpZiAoKAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkocEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlKSB8fAorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkocEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSA9PSBUUlVFKSkKKyAgICAgICAgJiYgcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID09IE1BWF9SVFNfVEhSRVNIT0xEKQorICAgIHsKKwkJTWFjUmVnIHw9ICgweDEwMDAgPDwgOCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJCU1hY1JlZyB8PSAocEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkIDw8IDgpOworICAgIH0KKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1JUU19DRkcsIE1hY1JlZyk7CisKKwkvLyBJbml0aWFsIGNvbW1vbiBwcm90ZWN0aW9uIHNldHRpbmdzCisJUlRNUFplcm9NZW1vcnkoUHJvdGVjdCwgc2l6ZW9mKFByb3RlY3QpKTsKKwlQcm90Q2ZnNC53b3JkID0gMDsKKwlQcm90Q2ZnLndvcmQgPSAwOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93R0Y0MCA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dHRjIwID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd01NNDAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93TU0yMCA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dPZmRtID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd0NjayA9IDE7CisJUHJvdENmZy5maWVsZC5SVFNUaEVuID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOworCisJLy8gdXBkYXRlIFBIWSBtb2RlIGFuZCByYXRlCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSA9IDB4NDAwMDsKKwlQcm90Q2ZnLmZpZWxkLlByb3RlY3RSYXRlIHw9IHBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGU7CisKKwkvLyBIYW5kbGUgbGVnYWN5KEIvRykgcHJvdGVjdGlvbgorCWlmIChiRGlzYWJsZUJHUHJvdGVjdCkKKwl7CisJCS8vUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGU7CisJCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSAwOworCQlQcm90ZWN0WzBdID0gUHJvdENmZy53b3JkOworCQlQcm90ZWN0WzFdID0gUHJvdENmZy53b3JkOworCX0KKwllbHNlCisJeworCQkvL1Byb3RDZmcuZmllbGQuUHJvdGVjdFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5SdHNSYXRlOworCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3RDdHJsID0gMDsJCQkvLyBDQ0sgZG8gbm90IG5lZWQgdG8gYmUgcHJvdGVjdGVkCisJCVByb3RlY3RbMF0gPSBQcm90Q2ZnLndvcmQ7CisJCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX0NUUzsJLy8gT0ZETSBuZWVkcyB1c2luZyBDQ0sgdG8gcHJvdGVjdAorCQlQcm90ZWN0WzFdID0gUHJvdENmZy53b3JkOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIERlY2lkZSBIVCBmcmFtZSBwcm90ZWN0aW9uLgorCWlmICgoU2V0TWFzayAmIEFMTE5fU0VUUFJPVEVDVCkgIT0gMCkKKwl7CisJCXN3aXRjaChPcGVyYXRpb25Nb2RlKQorCQl7CisJCQljYXNlIDB4MDoKKwkJCQkvLyBOTyBQUk9URUNUCisJCQkJLy8gMS5BbGwgU1RBcyBpbiB0aGUgQlNTIGFyZSAyMC80MCBNSHogSFQKKwkJCQkvLyAyLiBpbiBhaSAyMC80ME1IeiBCU1MKKwkJCQkvLyAzLiBhbGwgU1RBcyBhcmUgMjBNSHogaW4gYSAyME1IeiBCU1MKKwkJCQkvLyBQdXJlIEhULiBubyBwcm90ZWN0aW9uLgorCisJCQkJLy8gTU0yMF9QUk9UX0NGRworCQkJCS8vCVJlc2VydmVkICgzMToyNykKKwkJCQkvLyAJUFJPVF9UWE9QKDI1OjIwKSAtLSAwMTAxMTEKKwkJCQkvLwlQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlvbikKKwkJCQkvLyAgUFJPVF9DVFJMKDE3OjE2KSAtLSAwMCAoTm9uZSkKKwkJCQkvLyAJUFJPVF9SQVRFKDE1OjApICAtLSAweDQwMDQgKE9GRE0gMjRNKQorCQkJCVByb3RlY3RbMl0gPSAweDAxNzQ0MDA0OworCisJCQkJLy8gTU00MF9QUk9UX0NGRworCQkJCS8vCVJlc2VydmVkICgzMToyNykKKwkJCQkvLyAJUFJPVF9UWE9QKDI1OjIwKSAtLSAxMTExMTEKKwkJCQkvLwlQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlvbikKKwkJCQkvLyAgUFJPVF9DVFJMKDE3OjE2KSAtLSAwMCAoTm9uZSkKKwkJCQkvLyAJUFJPVF9SQVRFKDE1OjApICAtLSAweDQwODQgKGR1cGxpY2F0ZSBPRkRNIDI0TSkKKwkJCQlQcm90ZWN0WzNdID0gMHgwM2Y0NDA4NDsKKworCQkJCS8vIENGMjBfUFJPVF9DRkcKKwkJCQkvLwlSZXNlcnZlZCAoMzE6MjcpCisJCQkJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMDEwMTExCisJCQkJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJCQkJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJCQkJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDA0IChPRkRNIDI0TSkKKwkJCQlQcm90ZWN0WzRdID0gMHgwMTc0NDAwNDsKKworCQkJCS8vIENGNDBfUFJPVF9DRkcKKwkJCQkvLwlSZXNlcnZlZCAoMzE6MjcpCisJCQkJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMTExMTExCisJCQkJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJCQkJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJCQkJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDg0IChkdXBsaWNhdGUgT0ZETSAyNE0pCisJCQkJUHJvdGVjdFs1XSA9IDB4MDNmNDQwODQ7CisKKwkJCQlpZiAoYk5vbkdGRXhpc3QpCisJCQkJeworCQkJCQkvLyBQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlpb24pCisJCQkJCS8vIFBST1RfQ1RSTCgxNzoxNikgLS0gMDEgKFJUUy9DVFMpCisJCQkJCVByb3RlY3RbNF0gPSAweDAxNzU0MDA0OworCQkJCQlQcm90ZWN0WzVdID0gMHgwM2Y1NDA4NDsKKwkJCQl9CisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IEZBTFNFOworCQkJCWJyZWFrOworCisgCQkJY2FzZSAxOgorCQkJCS8vIFRoaXMgaXMgIkhUIG5vbi1tZW1iZXIgcHJvdGVjdGlvbiBtb2RlLiIKKwkJCQkvLyBJZiB0aGVyZSBtYXkgYmUgbm9uLUhUIFNUQXMgbXkgQlNTCisJCQkJUHJvdENmZy53b3JkID0gMHgwMTc0NDAwNDsJLy8gUFJPVF9DVFJMKDE3OjE2KSA6IDAgKE5vbmUpCisJCQkJUHJvdENmZzQud29yZCA9IDB4MDNmNDQwODQ7IC8vIGR1cGxpY2FldCBsZWdhY3kgMjRNLiBCVyBzZXQgMS4KKwkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCkpCisJCQkJeworCQkJCQlQcm90Q2ZnLndvcmQgPSAweDAxNzQwMDAzOwkvL0VSUCB1c2UgUHJvdGVjdGlvbiBiaXQgaXMgc2V0LCB1c2UgcHJvdGVjdGlvbiByYXRlIGF0IENsYXVzZSAxOC4uCisJCQkJCVByb3RDZmc0LndvcmQgPSAweDAzZjQwMDAzOyAvLyBEb24ndCBkdXBsaWNhdGUgUlRTL0NUUyBpbiBDQ0sgbW9kZS4gMHgwM2Y0MDA4MzsKKwkJCQl9CisJCQkJLy9Bc3NpZ24gUHJvdGVjdGlvbiBtZXRob2QgZm9yIDIwJjQwIE1IeiBwYWNrZXRzCisJCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOworCQkJCVByb3RDZmcuZmllbGQuUHJvdGVjdE5hdiA9IEFTSUNfU0hPUlROQVY7CisJCQkJUHJvdENmZzQuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKKwkJCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKwkJCQlQcm90ZWN0WzJdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbM10gPSBQcm90Q2ZnNC53b3JkOworCQkJCVByb3RlY3RbNF0gPSBQcm90Q2ZnLndvcmQ7CisJCQkJUHJvdGVjdFs1XSA9IFByb3RDZmc0LndvcmQ7CisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IFRSVUU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjoKKwkJCQkvLyBJZiBvbmx5IEhUIFNUQXMgYXJlIGluIEJTUy4gYXQgbGVhc3Qgb25lIGlzIDIwTUh6LiBPbmx5IHByb3RlY3QgNDBNSHogcGFja2V0cworCQkJCVByb3RDZmcud29yZCA9IDB4MDE3NDQwMDQ7ICAvLyBQUk9UX0NUUkwoMTc6MTYpIDogMCAoTm9uZSkKKwkJCQlQcm90Q2ZnNC53b3JkID0gMHgwM2Y0NDA4NDsgLy8gZHVwbGljYWV0IGxlZ2FjeSAyNE0uIEJXIHNldCAxLgorCisJCQkJLy9Bc3NpZ24gUHJvdGVjdGlvbiBtZXRob2QgZm9yIDQwTUh6IHBhY2tldHMKKwkJCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOworCQkJCVByb3RDZmc0LmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOworCQkJCVByb3RlY3RbMl0gPSBQcm90Q2ZnLndvcmQ7CisJCQkJUHJvdGVjdFszXSA9IFByb3RDZmc0LndvcmQ7CisJCQkJaWYgKGJOb25HRkV4aXN0KQorCQkJCXsKKwkJCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOworCQkJCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOworCQkJCX0KKwkJCQlQcm90ZWN0WzRdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbNV0gPSBQcm90Q2ZnNC53b3JkOworCisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IEZBTFNFOworCQkJCWJyZWFrOworCisJCQljYXNlIDM6CisJCQkJLy8gSFQgbWl4ZWQgbW9kZS4JIFBST1RFQ1QgQUxMIQorCQkJCS8vIEFzc2lnbiBSYXRlCisJCQkJUHJvdENmZy53b3JkID0gMHgwMTc0NDAwNDsJLy9kdXBsaWNhZXQgbGVnYWN5IDI0TS4gQlcgc2V0IDEuCisJCQkJUHJvdENmZzQud29yZCA9IDB4MDNmNDQwODQ7CisJCQkJLy8gYm90aCAyME1IeiBhbmQgNDBNSHogYXJlIHByb3RlY3RlZC4gV2hldGhlciB1c2UgUlRTIG9yIENUUy10by1zZWxmIGRlcGVuZHMgb24gdGhlCisJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpKQorCQkJCXsKKwkJCQkJUHJvdENmZy53b3JkID0gMHgwMTc0MDAwMzsJLy9FUlAgdXNlIFByb3RlY3Rpb24gYml0IGlzIHNldCwgdXNlIHByb3RlY3Rpb24gcmF0ZSBhdCBDbGF1c2UgMTguLgorCQkJCQlQcm90Q2ZnNC53b3JkID0gMHgwM2Y0MDAwMzsgLy8gRG9uJ3QgZHVwbGljYXRlIFJUUy9DVFMgaW4gQ0NLIG1vZGUuIDB4MDNmNDAwODMKKwkJCQl9CisJCQkJLy9Bc3NpZ24gUHJvdGVjdGlvbiBtZXRob2QgZm9yIDIwJjQwIE1IeiBwYWNrZXRzCisJCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOworCQkJCVByb3RDZmcuZmllbGQuUHJvdGVjdE5hdiA9IEFTSUNfU0hPUlROQVY7CisJCQkJUHJvdENmZzQuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKKwkJCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKwkJCQlQcm90ZWN0WzJdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbM10gPSBQcm90Q2ZnNC53b3JkOworCQkJCVByb3RlY3RbNF0gPSBQcm90Q2ZnLndvcmQ7CisJCQkJUHJvdGVjdFs1XSA9IFByb3RDZmc0LndvcmQ7CisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IFRSVUU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgODoKKwkJCQlQcm90ZWN0WzJdID0gMHgwMTc1NDAwNDsKKwkJCQlQcm90ZWN0WzNdID0gMHgwM2Y1NDA4NDsKKwkJCQlQcm90ZWN0WzRdID0gMHgwMTc1NDAwNDsKKwkJCQlQcm90ZWN0WzVdID0gMHgwM2Y1NDA4NDsKKwkJCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJSVFNMb25nUHJvdE9uID0gVFJVRTsKKwkJCQlicmVhazsKKwkJfQorCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCW9mZnNldCA9IENDS19QUk9UX0NGRzsKKwlmb3IgKGkgPSAwO2kgPCA2O2krKykKKwl7CisJCWlmICgoU2V0TWFzayAmICgxPDwgaSkpKQorCQl7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyBpKjQsIFByb3RlY3RbaV0pOworCQl9CisJfQorfQorCisKKyNpZmRlZiBSVDMweHgKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBXcml0ZSBSVDMweHggUkYgcmVnaXN0ZXIgdGhyb3VnaCBNQUMKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIFJUMzB4eFdyaXRlUkZSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVJlZ0lELAorCUlOCVVDSEFSCQkJVmFsdWUpCit7CisJUkZfQ1NSX0NGR19TVFJVQwlyZmNzcjsKKwlVSU5UCQkJCWkgPSAwOworCisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUkZfQ1NSX0NGRywgJnJmY3NyLndvcmQpOworCisJCWlmICghcmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0spCisJCQlicmVhazsKKwkJaSsrOworCX0KKwl3aGlsZSAoKGkgPCBSRVRSWV9MSU1JVCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKTsKKworCWlmICgoaSA9PSBSRVRSWV9MSU1JVCkgfHwgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiUmV0cnkgY291bnQgZXhoYXVzdGVkIG9yIGRldmljZSByZW1vdmVkISEhXG4iKSk7CisJCXJldHVybiBTVEFUVVNfVU5TVUNDRVNTRlVMOworCX0KKworCXJmY3NyLmZpZWxkLlJGX0NTUl9XUiA9IDE7CisJcmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPSAxOworCXJmY3NyLmZpZWxkLlRFU1RDU1JfUkZBQ0NfUkVHTlVNID0gUmVnSUQ7CisJcmZjc3IuZmllbGQuUkZfQ1NSX0RBVEEgPSBWYWx1ZTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJGX0NTUl9DRkcsIHJmY3NyLndvcmQpOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBSZWFkIFJUMzB4eCBSRiByZWdpc3RlciB0aHJvdWdoIE1BQworCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMgUlQzMHh4UmVhZFJGUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlSZWdJRCwKKwlJTglQVUNIQVIJCQlwVmFsdWUpCit7CisJUkZfQ1NSX0NGR19TVFJVQwlyZmNzcjsKKwlVSU5UCQkJCWk9MCwgaz0wOworCisJZm9yIChpPTA7IGk8TUFYX0JVU1lfQ09VTlQ7IGkrKykKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUkZfQ1NSX0NGRywgJnJmY3NyLndvcmQpOworCisJCWlmIChyZmNzci5maWVsZC5SRl9DU1JfS0lDSyA9PSBCVVNZKQorCQl7CisJCQljb250aW51ZTsKKwkJfQorCQlyZmNzci53b3JkID0gMDsKKwkJcmZjc3IuZmllbGQuUkZfQ1NSX1dSID0gMDsKKwkJcmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPSAxOworCQlyZmNzci5maWVsZC5URVNUQ1NSX1JGQUNDX1JFR05VTSA9IFJlZ0lEOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSRl9DU1JfQ0ZHLCByZmNzci53b3JkKTsKKwkJZm9yIChrPTA7IGs8TUFYX0JVU1lfQ09VTlQ7IGsrKykKKwkJeworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBSRl9DU1JfQ0ZHLCAmcmZjc3Iud29yZCk7CisKKwkJCWlmIChyZmNzci5maWVsZC5SRl9DU1JfS0lDSyA9PSBJRExFKQorCQkJCWJyZWFrOworCQl9CisJCWlmICgocmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPT0gSURMRSkgJiYKKwkJCShyZmNzci5maWVsZC5URVNUQ1NSX1JGQUNDX1JFR05VTSA9PSBSZWdJRCkpCisJCXsKKwkJCSpwVmFsdWUgPSAoVUNIQVIpcmZjc3IuZmllbGQuUkZfQ1NSX0RBVEE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPT0gQlVTWSkKKwl7CisJCURCR1BSSU5UX0VSUigoIlJGIHJlYWQgUiVkPTB4JXggZmFpbCwgaVslZF0sIGtbJWRdXG4iLCBSZWdJRCwgcmZjc3Iud29yZCxpLGspKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisjaWZkZWYgUlQzMHh4CisvLyBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJTG9hZCBSRiBub3JtYWwgb3BlcmF0aW9uLW1vZGUgc2V0dXAKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUlQzMHh4TG9hZFJGTm9ybWFsTW9kZVNldHVwKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCkKK3sKKwlVQ0hBUiBSRlZhbHVlOworCisJLy8gUlgwX1BEICYgVFgwX1BELCBSRiBSMSByZWdpc3RlciBCaXQgMiAmIEJpdCAzIHRvIDAgYW5kIFJGX0JMT0NLX2VuLFJYMV9QRCAmIFRYMV9QRCwgQml0MCwgQml0IDQgJiBCaXQ1IHRvIDEKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHgwQykpIHwgMHgzMTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsIFJGVmFsdWUpOworCisJLy8gVFhfTE8yX2VuLCBSRiBSMTUgcmVnaXN0ZXIgQml0IDMgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjE1LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MDgpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxNSwgUkZWYWx1ZSk7CisKKwkvLyBUWF9MTzFfZW4sIFJGIFIxNyByZWdpc3RlciBCaXQgMyB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTcsICZSRlZhbHVlKTsKKwlSRlZhbHVlICY9ICh+MHgwOCk7CisJLy8gdG8gZml4IHJ4IGxvbmcgcmFuZ2UgaXNzdWUKKwlpZiAoKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID49IDB4MDIxMSkgJiYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckcgPT0gMCkpCisJeworCQlSRlZhbHVlIHw9IDB4MjA7CisJfQorCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxNywgUkZWYWx1ZSk7CisKKwkvLyBSWF9MTzFfZW4sIFJGIFIyMCByZWdpc3RlciBCaXQgMyB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjAsICZSRlZhbHVlKTsKKwlSRlZhbHVlICY9ICh+MHgwOCk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIwLCBSRlZhbHVlKTsKKworCS8vIFJYX0xPMl9lbiwgUkYgUjIxIHJlZ2lzdGVyIEJpdCAzIHRvIDAKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgJj0gKH4weDA4KTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjEsIFJGVmFsdWUpOworCisJLy8gTERPUkZfVkMsIFJGIFIyNyByZWdpc3RlciBCaXQgMiB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjcsICZSRlZhbHVlKTsKKwlpZiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpCisJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHg3NykpIHwgMHgzOworCWVsc2UKKwkJUkZWYWx1ZSA9IChSRlZhbHVlICYgKH4weDc3KSk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCBSRlZhbHVlKTsKKwkvKiBlbmQgam9obmxpICovCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUxvYWQgUkYgc2xlZXAtbW9kZSBzZXR1cAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBSVDMweHhMb2FkUkZTbGVlcE1vZGVTZXR1cCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQpCit7CisJVUNIQVIgUkZWYWx1ZTsKKwlVSU5UMzIgTUFDVmFsdWU7CisKKwkvLyBSRl9CTE9DS19lbi4gUkYgUjEgcmVnaXN0ZXIgQml0IDAgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjAxLCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MDEpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgUkZWYWx1ZSk7CisKKwkvLyBWQ09fSUMsIFJGIFI3IHJlZ2lzdGVyIEJpdCA0ICYgQml0IDUgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MzApOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgUkZWYWx1ZSk7CisKKwkvLyBJZG9oLCBSRiBSOSByZWdpc3RlciBCaXQgMSwgQml0IDIgJiBCaXQgMyB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDksICZSRlZhbHVlKTsKKwlSRlZhbHVlICY9ICh+MHgwRSk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA5LCBSRlZhbHVlKTsKKworCS8vIFJYX0NUQl9lbiwgUkYgUjIxIHJlZ2lzdGVyIEJpdCA3IHRvIDAKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgJj0gKH4weDgwKTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjEsIFJGVmFsdWUpOworCisJLy8gTERPUkZfVkMsIFJGIFIyNyByZWdpc3RlciBCaXQgMCwgQml0IDEgJiBCaXQgMiB0byAxCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjcsICZSRlZhbHVlKTsKKwlSRlZhbHVlIHw9IDB4Nzc7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCBSRlZhbHVlKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZNQUNWYWx1ZSk7CisJTUFDVmFsdWUgfD0gMHgxRDAwMDAwMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBMRE9fQ0ZHMCwgTUFDVmFsdWUpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlSZXZlcnNlIFJGIHNsZWVwLW1vZGUgc2V0dXAKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUlQzMHh4UmV2ZXJzZVJGU2xlZXBNb2RlU2V0dXAoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkKQoreworCVVDSEFSIFJGVmFsdWU7CisJVUlOVDMyIE1BQ1ZhbHVlOworCisJLy8gUkZfQkxPQ0tfZW4sIFJGIFIxIHJlZ2lzdGVyIEJpdCAwIHRvIDEKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgfD0gMHgwMTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsIFJGVmFsdWUpOworCisJLy8gVkNPX0lDLCBSRiBSNyByZWdpc3RlciBCaXQgNCAmIEJpdCA1IHRvIDEKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgJlJGVmFsdWUpOworCVJGVmFsdWUgfD0gMHgzMDsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDcsIFJGVmFsdWUpOworCisJLy8gSWRvaCwgUkYgUjkgcmVnaXN0ZXIgQml0IDEsIEJpdCAyICYgQml0IDMgdG8gMQorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA5LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSB8PSAweDBFOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwOSwgUkZWYWx1ZSk7CisKKwkvLyBSWF9DVEJfZW4sIFJGIFIyMSByZWdpc3RlciBCaXQgNyB0byAxCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjEsICZSRlZhbHVlKTsKKwlSRlZhbHVlIHw9IDB4ODA7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIxLCBSRlZhbHVlKTsKKworCS8vIExET1JGX1ZDLCBSRiBSMjcgcmVnaXN0ZXIgQml0IDIgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAmUkZWYWx1ZSk7CisJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjExKQorCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAofjB4NzcpKSB8IDB4MzsKKwllbHNlCisJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHg3NykpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgUkZWYWx1ZSk7CisKKwkvLyBSVDMwNzEgdmVyc2lvbiBFIGhhcyBmaXhlZCB0aGlzIGlzc3VlCisJaWYgKChwQWQtPk5pY0NvbmZpZzIuZmllbGQuREFDVGVzdEJpdCA9PSAxKSAmJiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpKQorCXsKKwkJLy8gcGF0Y2ggdHggRVZNIGlzc3VlIHRlbXBvcmFyaWx5CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZNQUNWYWx1ZSk7CisJCU1BQ1ZhbHVlID0gKChNQUNWYWx1ZSAmIDB4RTBGRkZGRkYpIHwgMHgwRDAwMDAwMCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIExET19DRkcwLCBNQUNWYWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZNQUNWYWx1ZSk7CisJCU1BQ1ZhbHVlID0gKChNQUNWYWx1ZSAmIDB4RTBGRkZGRkYpIHwgMHgwMTAwMDAwMCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIExET19DRkcwLCBNQUNWYWx1ZSk7CisJfQorfQorLy8gZW5kIGpvaG5saQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljU3dpdGNoQ2hhbm5lbCgKKwkJCQkJICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVQ0hBUgkJCUNoYW5uZWwsCisJSU4JQk9PTEVBTgkJCWJTY2FuKQoreworCVVMT05HCQkJUjIgPSAwLCBSMyA9IERFRkFVTFRfUkZfVFhfUE9XRVIsIFI0ID0gMDsKKwlDSEFSICAgIFR4UHdlciA9IDAsIFR4UHdlcjIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOyAvL0JicDk0ID0gQkJQUjk0X0RFRkFVTFQsIFR4UHdlcjIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCVVDSEFSCWluZGV4OworCVVJTlQzMiAJVmFsdWUgPSAwOyAvL0JicFJlZywgVmFsdWU7CisJUlRNUF9SRl9SRUdTICpSRlJlZ1RhYmxlOworCisJLy8gU2VhcmNoIFR4IHBvd2VyIHZhbHVlCisjaWYgMQorCS8vIFdlIGNhbid0IHVzZSBDaGFubmVsTGlzdCB0byBzZWFyY2ggY2hhbm5lbCwgc2luY2Ugc29tZSBjZW50cmFsIGNoYW5ubCdzIHR4cG93ciBkb2Vzbid0IGxpc3QKKwkvLyBpbiBDaGFubmVsTGlzdCwgc28gdXNlIFR4UG93ZXIgYXJyYXkgaW5zdGVhZC4KKwkvLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9OVU1fT0ZfQ0hBTk5FTFM7IGluZGV4KyspCisJeworCQlpZiAoQ2hhbm5lbCA9PSBwQWQtPlR4UG93ZXJbaW5kZXhdLkNoYW5uZWwpCisJCXsKKwkJCVR4UHdlciA9IHBBZC0+VHhQb3dlcltpbmRleF0uUG93ZXI7CisJCQlUeFB3ZXIyID0gcEFkLT5UeFBvd2VyW2luZGV4XS5Qb3dlcjI7CisJCQlicmVhazsKKwkJfQorCX0KKyNlbHNlCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaW5kZXgrKykKKwl7CisJCWlmIChDaGFubmVsID09IHBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLkNoYW5uZWwpCisJCXsKKwkJCVR4UHdlciA9IHBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLlBvd2VyOworCQkJVHhQd2VyMiA9IHBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLlBvd2VyMjsKKwkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmCisKKwlpZiAoaW5kZXggPT0gTUFYX05VTV9PRl9DSEFOTkVMUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFzaWNTd2l0Y2hDaGFubmVsOiBDYW4ndCBmaW5kIHRoZSBDaGFubmVsIyVkIFxuIiwgQ2hhbm5lbCkpOworCX0KKworI2lmZGVmIFJUMzB4eAorCS8vIFRoZSBSRiBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBkaWZmZXJlbmNlIGJldHdlZW4gM3h4eCBhbmQgMnh4eAorCWlmICgoSVNfUlQzMDcwKHBBZCkgfHwgSVNfUlQzMDkwKHBBZCkpICYmICgocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApIHx8IChwQWQtPlJmSWNUeXBlID09IFJGSUNfMjAyMCkgfHwKKwkJKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIxKSB8fCAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjIpKSkKKwl7CisJCS8qIG1vZGlmeSBieSBXWSBmb3IgUmVhZCBSRiBSZWcuIGVycm9yICovCisJCVVDSEFSIFJGVmFsdWU7CisKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX09GXzMwMjBfQ0hOTDsgaW5kZXgrKykKKwkJeworCQkJaWYgKENoYW5uZWwgPT0gRnJlcUl0ZW1zMzAyMFtpbmRleF0uQ2hhbm5lbCkKKwkJCXsKKwkJCQkvLyBQcm9ncmFtbWluZyBjaGFubmVsIHBhcmFtZXRlcnMKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDIsIEZyZXFJdGVtczMwMjBbaW5kZXhdLk4pOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwMywgRnJlcUl0ZW1zMzAyMFtpbmRleF0uSyk7CisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDYsICZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEZDKSB8IEZyZXFJdGVtczMwMjBbaW5kZXhdLlI7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCBSRlZhbHVlKTsKKworCQkJCS8vIFNldCBUeDAgUG93ZXIKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IxMiwgJlJGVmFsdWUpOworCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmIDB4RTApIHwgVHhQd2VyOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxMiwgUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgVHgxIFBvd2VyCisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTMsICZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEUwKSB8IFR4UHdlcjI7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjEzLCBSRlZhbHVlKTsKKworCQkJCS8vIFR4L1J4IFN0cmVhbSBzZXR0aW5nCisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsICZSRlZhbHVlKTsKKwkJCQkvL2lmIChJU19SVDMwOTAocEFkKSkKKwkJCQkvLwlSRlZhbHVlIHw9IDB4MDE7IC8vIEVuYWJsZSBSRiBibG9jay4KKwkJCQlSRlZhbHVlICY9IDB4MDM7CS8vY2xlYXIgYml0Wzd+Ml0KKwkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQkJCQlSRlZhbHVlIHw9IDB4QTA7CisJCQkJZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKQorCQkJCQlSRlZhbHVlIHw9IDB4ODA7CisJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJCQkJUkZWYWx1ZSB8PSAweDUwOworCQkJCWVsc2UgaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwkJCQkJUkZWYWx1ZSB8PSAweDQwOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgUkYgb2Zmc2V0CisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsICZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweDgwKSB8IHBBZC0+UmZGcmVxT2Zmc2V0OworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMywgUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgQlcKKwkJCQlpZiAoIWJTY2FuICYmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApKQorCQkJCXsKKwkJCQkJUkZWYWx1ZSA9IHBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0OworCQkJCQkvL0RJU0FCTEVfMTFOX0NIRUNLKHBBZCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJGVmFsdWUgPSBwQWQtPk1sbWUuQ2FsaUJXMjBSZlIyNDsKKwkJCQl9CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRlZhbHVlKTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMzEsIFJGVmFsdWUpOworCisJCQkJLy8gRW5hYmxlIFJGIHR1bmluZworCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCAmUkZWYWx1ZSk7CisJCQkJUkZWYWx1ZSA9IFJGVmFsdWUgfCAweDE7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCBSRlZhbHVlKTsKKworCQkJCS8vIGxhdGNoIGNoYW5uZWwgZm9yIGZ1dHVyZSB1c2FnZS4KKwkJCQlwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBDaGFubmVsOworCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQ2hhbm5lbCMlZChSRj0lZCwgUHdyMD0lZCwgUHdyMT0lZCwgJWRUKSwgTj0weCUwMlgsIEs9MHglMDJYLCBSPTB4JTAyWFxuIiwKKwkJCQkJQ2hhbm5lbCwKKwkJCQkJcEFkLT5SZkljVHlwZSwKKwkJCQkJVHhQd2VyLAorCQkJCQlUeFB3ZXIyLAorCQkJCQlwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLAorCQkJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5OLAorCQkJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5LLAorCQkJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5SKSk7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwl7CisJCVJGUmVnVGFibGUgPSBSRjI4NTBSZWdUYWJsZTsKKworCQlzd2l0Y2ggKHBBZC0+UmZJY1R5cGUpCisJCXsKKwkJCWNhc2UgUkZJQ18yODIwOgorCQkJY2FzZSBSRklDXzI4NTA6CisJCQljYXNlIFJGSUNfMjcyMDoKKwkJCWNhc2UgUkZJQ18yNzUwOgorCisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfMjg1MF9DSE5MOyBpbmRleCsrKQorCQkJeworCQkJCWlmIChDaGFubmVsID09IFJGUmVnVGFibGVbaW5kZXhdLkNoYW5uZWwpCisJCQkJeworCQkJCQlSMiA9IFJGUmVnVGFibGVbaW5kZXhdLlIyOworCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQkJCQl7CisJCQkJCQlSMiB8PSAweDQwMDA7CS8vIElmIFRYcGF0aCBpcyAxLCBiaXQgMTQgPSAxOworCQkJCQl9CisKKwkJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwkJCQkJeworCQkJCQkJUjIgfD0gMHg0MDsJLy8gd3JpdGUgMSB0byBvZmYgUnhwYXRoLgorCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJCQkJeworCQkJCQkJUjIgfD0gMHgyMDA0MDsJLy8gd3JpdGUgMSB0byBvZmYgUnhQYXRoCisJCQkJCX0KKworCQkJCQlpZiAoQ2hhbm5lbCA+IDE0KQorCQkJCQl7CisJCQkJCQkvLyBpbml0aWFsaXplIFIzLCBSNAorCQkJCQkJUjMgPSAoUkZSZWdUYWJsZVtpbmRleF0uUjMgJiAweGZmZmZjMWZmKTsKKwkJCQkJCVI0ID0gKFJGUmVnVGFibGVbaW5kZXhdLlI0ICYgKH4weDAwMWY4N2MwKSkgfCAocEFkLT5SZkZyZXFPZmZzZXQgPDwgMTUpOworCisJCQkJCQkvLyA1RyBiYW5kIHBvd2VyIHJhbmdlOiAweEY5fjBYMEYsIFRYMCBSZWczIGJpdDkvVFgxIFJlZzQgYml0Nj0iMCIgbWVhbnMgdGhlIFRYIHBvd2VyIHJlZHVjZSA3ZEIKKwkJCQkJCS8vIFIzCisJCQkJCQlpZiAoKFR4UHdlciA+PSAtNykgJiYgKFR4UHdlciA8IDApKQorCQkJCQkJeworCQkJCQkJCVR4UHdlciA9ICg3K1R4UHdlcik7CisJCQkJCQkJVHhQd2VyID0gKFR4UHdlciA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIpOworCQkJCQkJCVIzIHw9IChUeFB3ZXIgPDwgMTApOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFzaWNTd2l0Y2hDaGFubmVsOiBUeFB3ZXI9JWQgXG4iLCBUeFB3ZXIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIgPSAoVHhQd2VyID4gMHhGKSA/ICgweEYpIDogKFR4UHdlcik7CisJCQkJCQkJUjMgfD0gKFR4UHdlciA8PCAxMCkgfCAoMSA8PCA5KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gUjQKKwkJCQkJCWlmICgoVHhQd2VyMiA+PSAtNykgJiYgKFR4UHdlcjIgPCAwKSkKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIyID0gKDcrVHhQd2VyMik7CisJCQkJCQkJVHhQd2VyMiA9IChUeFB3ZXIyID4gMHhGKSA/ICgweEYpIDogKFR4UHdlcjIpOworCQkJCQkJCVI0IHw9IChUeFB3ZXIyIDw8IDcpOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFzaWNTd2l0Y2hDaGFubmVsOiBUeFB3ZXIyPSVkIFxuIiwgVHhQd2VyMikpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCVR4UHdlcjIgPSAoVHhQd2VyMiA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIyKTsKKwkJCQkJCQlSNCB8PSAoVHhQd2VyMiA8PCA3KSB8ICgxIDw8IDYpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJUjMgPSAoUkZSZWdUYWJsZVtpbmRleF0uUjMgJiAweGZmZmZjMWZmKSB8IChUeFB3ZXIgPDwgOSk7IC8vIHNldCBUWCBwb3dlcjAKKwkJCQkJUjQgPSAoUkZSZWdUYWJsZVtpbmRleF0uUjQgJiAofjB4MDAxZjg3YzApKSB8IChwQWQtPlJmRnJlcU9mZnNldCA8PCAxNSkgfCAoVHhQd2VyMiA8PDYpOy8vIFNldCBmcmVxIE9mZnNldCAmIFR4UHdyMQorCQkJCQl9CisKKwkJCQkJLy8gQmFzZWQgb24gQkJQIGN1cnJlbnQgbW9kZSBiZWZvcmUgY2hhbmdpbmcgUkYgY2hhbm5lbC4KKwkJCQkJaWYgKCFiU2NhbiAmJiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKSkKKwkJCQkJeworCQkJCQkJUjQgfD0weDIwMDAwMDsKKwkJCQkJfQorCisJCQkJCS8vIFVwZGF0ZSB2YXJpYWJsZXMKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID0gQ2hhbm5lbDsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SMSA9IFJGUmVnVGFibGVbaW5kZXhdLlIxOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIyID0gUjI7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSBSMzsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IFI0OworCisJCQkJCS8vIFNldCBSRiB2YWx1ZSAxJ3Mgc2V0IFIzW2JpdDJdID0gWzBdCisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjEpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAofjB4MDQpKSk7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpOworCisJCQkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKKworCQkJCQkvLyBTZXQgUkYgdmFsdWUgMidzIHNldCBSM1tiaXQyXSA9IFsxXQorCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMik7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIChwQWQtPkxhdGNoUmZSZWdzLlIzIHwgMHgwNCkpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKKworCQkJCQlSVE1QdXNlY0RlbGF5KDIwMCk7CisKKwkJCQkJLy8gU2V0IFJGIHZhbHVlIDMncyBzZXQgUjNbYml0Ml0gPSBbMF0KKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMSk7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjIpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCAocEFkLT5MYXRjaFJmUmVncy5SMyAmICh+MHgwNCkpKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SNCk7CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8vIENoYW5nZSBCQlAgc2V0dGluZyBkdXJpbmcgc2l3dGNoIGZyb20gYS0+ZywgZy0+YQorCWlmIChDaGFubmVsIDw9IDE0KQorCXsKKwkgICAgVUxPTkcJVHhQaW5DZmcgPSAweDAwMDUwRjBBOy8vR2FyeSAyMDA3LzA4LzA5IDB4MDUwQTBBCisKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjIsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjMsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjQsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODYsIDApOy8vKDB4NDQgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOwkvLyBBY2NvcmRpbmcgdGhlIFJvcnkncyBzdWdnZXN0aW9uIHRvIHNvbHZlIHRoZSBtaWRkbGUgcmFuZ2UgaXNzdWUuCisJCS8vUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODIsIDB4NjIpOworCisJCS8vIFJ4IEhpZ2ggcG93ZXIgVkdBIG9mZnNldCBmb3IgTE5BIHNlbGVjdAorCSAgICBpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkV4dGVybmFsTE5BRm9yRykKKwkgICAgeworCSAgICAgICAgUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODIsIDB4NjIpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzUsIDB4NDYpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCSAgICAgICAgUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODIsIDB4ODQpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzUsIDB4NTApOworCSAgICB9CisKKwkJLy8gNUcgYmFuZCBzZWxlY3Rpb24gUElOLCBiaXQxIGFuZCBiaXQyIGFyZSBjb21wbGVtZW50CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHg2KTsKKwkJVmFsdWUgfD0gKDB4MDQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgVmFsdWUpOworCisgICAgICAgIC8vIFR1cm4gb2ZmIHVudXNlZCBQQSBvciBMTkEgd2hlbiBvbmx5IDFUIG9yIDFSCisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpCisJCXsKKwkJCVR4UGluQ2ZnICY9IDB4RkZGRkZGRjM7CisJCX0KKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRjNGRjsKKwkJfQorCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BJTl9DRkcsIFR4UGluQ2ZnKTsKKwl9CisJZWxzZQorCXsKKwkgICAgVUxPTkcJVHhQaW5DZmcgPSAweDAwMDUwRjA1Oy8vR2FyeSAyMDA3LzgvOSAweDA1MDUwNQorCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYyLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYzLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY0LCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAwKTsvLygweDQ0IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsgICAvLyBBY2NvcmRpbmcgdGhlIFJvcnkncyBzdWdnZXN0aW9uIHRvIHNvbHZlIHRoZSBtaWRkbGUgcmFuZ2UgaXNzdWUuCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweEYyKTsKKworCQkvLyBSeCBIaWdoIHBvd2VyIFZHQSBvZmZzZXQgZm9yIExOQSBzZWxlY3QKKwkJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckEpCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc1LCAweDQ2KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc1LCAweDUwKTsKKwkJfQorCisJCS8vIDVHIGJhbmQgc2VsZWN0aW9uIFBJTiwgYml0MSBhbmQgYml0MiBhcmUgY29tcGxlbWVudAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4Nik7CisJCVZhbHVlIHw9ICgweDAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKworICAgICAgICAvLyBUdXJuIG9mZiB1bnVzZWQgUEEgb3IgTE5BIHdoZW4gb25seSAxVCBvciAxUgorCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGRkYzOworCX0KKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRjNGRjsKKwl9CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUElOX0NGRywgVHhQaW5DZmcpOworCX0KKworICAgIC8vIFI2NiBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byBDaGFubmVsIGFuZCB1c2UgMjBNSHogd2hlbiBzY2FubmluZworCS8vUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICgweDJFICsgR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwlpZiAoYlNjYW4pCisJCVJUTVBTZXRBR0NJbml0VmFsdWUocEFkLCBCV18yMCk7CisJZWxzZQorCQlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXKTsKKworCS8vCisJLy8gT24gMTFBLCBXZSBzaG91bGQgZGVsYXkgYW5kIHdhaXQgUkYvQkJQIHRvIGJlIHN0YWJsZQorCS8vIGFuZCB0aGUgYXBwcm9wcmlhdGUgdGltZSBzaG91bGQgYmUgMTAwMCBtaWNybyBzZWNvbmRzCisJLy8gMjAwNS8wNi8wNSAtIE9uIDExRywgV2UgYWxzbyBuZWVkIHRoaXMgZGVsYXkgdGltZS4gT3RoZXJ3aXNlIGl0J3MgZGlmZmljdWx0IHRvIHBhc3MgdGhlIFdIUUwuCisJLy8KKwlSVE1QdXNlY0RlbGF5KDEwMDApOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQ2hhbm5lbCMlZChSRj0lZCwgUHdyMD0lbHUsIFB3cjE9JWx1LCAlZFQpIHRvICwgUjE9MHglMDhseCwgUjI9MHglMDhseCwgUjM9MHglMDhseCwgUjQ9MHglMDhseFxuIiwKKwkJCQkJCQkgIENoYW5uZWwsCisJCQkJCQkJICBwQWQtPlJmSWNUeXBlLAorCQkJCQkJCSAgKFIzICYgMHgwMDAwM2UwMCkgPj4gOSwKKwkJCQkJCQkgIChSNCAmIDB4MDAwMDA3YzApID4+IDYsCisJCQkJCQkJICBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLAorCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMSwKKwkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjIsCisJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIzLAorCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SNCkpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIDI0MjEgb25seSwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBkdXJpbmcKKwkJc2l0ZSBzdXJ2ZXkuIEl0J3Mgb25seSByZXF1aXJlZCBhZnRlciBOSUMgZGVjaWRlZCB0byBzdGF5IGF0IGEgY2hhbm5lbAorCQlmb3IgYSBsb25nZXIgcGVyaW9kLgorCQlXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCdzIGFsd2F5cyBhZnRlciBBc2ljU3dpdGNoQ2hhbm5lbCgpLgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY0xvY2tDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIENoYW5uZWwpCit7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lECUFzaWNBbnRlbm5hU2VsZWN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQ2hhbm5lbCkKK3sKKwkJCWlmIChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDIgPT0gMSkKKwkJCXsKKwkJCQkvLyBwYXRjaCBmb3IgQXNpY1NldFJ4QW50IGZhaWxlZAorCQkJCXBBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPSAwOworCisJCQkJLy8gY2hlY2sgZXZlcnkgMiBzZWNvbmQuIElmIHJjdi1iZWFjb24gbGVzcyB0aGFuIDUgaW4gdGhlIHBhc3QgMiBzZWNvbmQsIHRoZW4gQXZnUlNTSSBpcyBubyBsb25nZXIgYQorCQkJCS8vIHZhbGlkIGluZGljYXRpb24gb2YgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBBUCBhbmQgaXRzIGNsaWVudHMuCisJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQl7CisJCQkJCVNIT1JUCXJlYWxhdmdyc3NpMTsKKworCQkJCQkvLyBpZiBubyB0cmFmZmljIHRoZW4gcmVzZXQgYXZlcmFnZSByc3NpIHRvIHRyaWdnZXIgZXZhbHVhdGlvbgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQlpZiAocEFkLT5TdGFDZmcuTnVtT2ZBdmdSc3NpU2FtcGxlIDwgNSkKKwkJCQkJeworCQkJCQkJcEFkLT5SeEFudC5QYWlyMUxhc3RBdmdSc3NpID0gKC05OSk7CisJCQkJCQlwQWQtPlJ4QW50LlBhaXIyTGFzdEF2Z1Jzc2kgPSAoLTk5KTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVQZXJpb2RpY0V4ZWM6IG5vIHRyYWZmaWMvYmVhY29uLCByZXNldCBSU1NJXG4iKSk7CisJCQkJCX0KKworCQkJCQlwQWQtPlN0YUNmZy5OdW1PZkF2Z1Jzc2lTYW1wbGUgPSAwOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQlyZWFsYXZncnNzaTEgPSAocEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudF0gPj4gMyk7CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBbnQtcmVhbHJzc2kwKCVkKSwgTGFzdHJzc2kwKCVkKSwgRXZhbHVhdGVTdGFibGVDbnQ9JWRcbiIsIHJlYWxhdmdyc3NpMSwgcEFkLT5SeEFudC5QYWlyMUxhc3RBdmdSc3NpLCBwQWQtPlJ4QW50LkV2YWx1YXRlU3RhYmxlQ250KSk7CisKKwkJCQkJLy8gaWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcnNzaSBpcyBsYXJnZXIgb3IgbGVzcyB0aGFuIDUsIHRoZW4gZXZhbHVhdGUgdGhlIG90aGVyIGFudGVubmEKKwkJCQkJaWYgKChwQWQtPlJ4QW50LkV2YWx1YXRlU3RhYmxlQ250IDwgMikgfHwgKHJlYWxhdmdyc3NpMSA+IChwQWQtPlJ4QW50LlBhaXIxTGFzdEF2Z1Jzc2kgKyA1KSkgfHwgKHJlYWxhdmdyc3NpMSA8IChwQWQtPlJ4QW50LlBhaXIxTGFzdEF2Z1Jzc2kgLSA1KSkpCisJCQkJCXsKKwkJCQkJCXBBZC0+UnhBbnQuUGFpcjFMYXN0QXZnUnNzaSA9IHJlYWxhdmdyc3NpMTsKKwkJCQkJCUFzaWNFdmFsdWF0ZVJ4QW50KHBBZCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gaWYgbm90IGNvbm5lY3RlZCwgYWx3YXlzIHN3aXRjaCBhbnRlbm5hIHRvIHRyeSB0byBjb25uZWN0CisJCQkJCVVDSEFSCXRlbXA7CisKKwkJCQkJdGVtcCA9IHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQ7CisJCQkJCXBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQgPSBwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQ7CisJCQkJCXBBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudCA9IHRlbXA7CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVBlcmlvZGljRXhlYzogbm8gY29ubmVjdCwgc3dpdGNoIHRvIGFub3RoZXIgb25lIHRvIHRyeSBjb25uZWN0aW9uXG4iKSk7CisKKwkJCQkJQXNpY1NldFJ4QW50KHBBZCwgcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCk7CisJCQkJfQorCQkJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQW50ZW5uYSBtaXNjZWxsYW5lb3VzIHNldHRpbmcuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJQmFuZFN0YXRlCQkJCUluZGljYXRlIGN1cnJlbnQgQmFuZCBTdGF0ZS4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA8PSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKwkJMS4pIEZyYW1lIEVuZCB0eXBlIGNvbnRyb2wKKwkJCW9ubHkgdmFsaWQgZm9yIEcgb25seSAoUkZfMjUyNyAmIFJGXzI1MjkpCisJCQkwOiBtZWFucyBEUERULCBzZXQgQkJQIFI0IGJpdCA1IHRvIDEKKwkJCTE6IG1lYW5zIFNQRFQsIHNldCBCQlAgUjQgYml0IDUgdG8gMAorCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFzaWNBbnRlbm5hU2V0dGluZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglBQkdCQU5EX1NUQVRFCUJhbmRTdGF0ZSkKK3sKK30KKworVk9JRCBBc2ljUmZUdW5pbmdFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlHaXZlcyBDQ0sgVFggcmF0ZSAyIG1vcmUgZEIgVFggcG93ZXIuCisJCVRoaXMgcm91dGluZSB3b3JrcyBvbmx5IGluIExJTksgVVAgaW4gSU5GUkFTVFJVQ1RVUkUgbW9kZS4KKworCQljYWxjdWxhdGUgZGVzaXJlZCBUeCBwb3dlciBpbiBSRiBSMy5UeDB+NSwJc2hvdWxkIGNvbnNpZGVyIC0KKwkJMC4gaWYgY3VycmVudCByYWRpbyBpcyBhIG5vaXN5IGVudmlyb25tZW50IChwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50KQorCQkxLiBUeFBvd2VyUGVyY2VudGFnZQorCQkyLiBhdXRvIGNhbGlicmF0aW9uIGJhc2VkIG9uIFRTU0kgZmVlZGJhY2sKKwkJMy4gZXh0cmEgMiBkYiBmb3IgQ0NLCisJCTQuIC0xMCBkYiB1cG9uIHZlcnktc2hvcnQgZGlzdGFuY2UgKEF2Z1JTU0kgPj0gLTQwZGIpIHRvIEFQCisKKwlOT1RFOiBTaW5jZSB0aGlzIHJvdXRpbmUgcmVxdWlyZXMgdGhlIHZhbHVlIG9mIChwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50KSwKKwkJaXQgc2hvdWxkIGJlIGNhbGxlZCBBRlRFUiBNbG1lRHluYW1pY1R4UmF0U3dpdGNoaW5nKCkKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNBZGp1c3RUeFBvd2VyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUlOVAkJCWksIGo7CisJQ0hBUgkJRGVsdGFQd3IgPSAwOworCUJPT0xFQU4JCWJBdXRvVHhBZ2MgPSBGQUxTRTsKKwlVQ0hBUgkJVHNzaVJlZiwgKnBUc3NpTWludXNCb3VuZGFyeSwgKnBUc3NpUGx1c0JvdW5kYXJ5LCBUeEFnY1N0ZXA7CisJVUNIQVIJCUJicFIxID0gMCwgQmJwUjQ5ID0gMCwgaWR4OworCVBDSEFSCQlwVHhBZ2NDb21wZW5zYXRlOworCVVMT05HCQlUeFB3cls1XTsKKwlDSEFSCQlWYWx1ZTsKKworCisKKwlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID4gMTQpCisJCXsKKwkJCVR4UHdyWzBdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzBdOworCQkJVHhQd3JbMV0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbMV07CisJCQlUeFB3clsyXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFsyXTsKKwkJCVR4UHdyWzNdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzNdOworCQkJVHhQd3JbNF0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbNF07CisJCX0KKwkJZWxzZQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzRdOworCQl9CisJfQorCWVsc2UKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCisJCXsKKwkJCVR4UHdyWzBdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzBdOworCQkJVHhQd3JbMV0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbMV07CisJCQlUeFB3clsyXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFsyXTsKKwkJCVR4UHdyWzNdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzNdOworCQkJVHhQd3JbNF0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbNF07CisJCX0KKwkJZWxzZQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzRdOworCQl9CisJfQorCisJLy8gVFggcG93ZXIgY29tcGVuc2F0aW9uIGZvciB0ZW1wZXJhdHVyZSB2YXJpYXRpb24gYmFzZWQgb24gVFNTSS4gdHJ5IGV2ZXJ5IDQgc2Vjb25kCisJaWYgKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgNCA9PSAwKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCS8qIGJnIGNoYW5uZWwgKi8KKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0c7CisJCQlUc3NpUmVmICAgICAgICAgICAgPSBwQWQtPlRzc2lSZWZHOworCQkJcFRzc2lNaW51c0JvdW5kYXJ5ID0gJnBBZC0+VHNzaU1pbnVzQm91bmRhcnlHWzBdOworCQkJcFRzc2lQbHVzQm91bmRhcnkgID0gJnBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbMF07CisJCQlUeEFnY1N0ZXAgICAgICAgICAgPSBwQWQtPlR4QWdjU3RlcEc7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVHOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogYSBjaGFubmVsICovCisJCQliQXV0b1R4QWdjICAgICAgICAgPSBwQWQtPmJBdXRvVHhBZ2NBOworCQkJVHNzaVJlZiAgICAgICAgICAgID0gcEFkLT5Uc3NpUmVmQTsKKwkJCXBUc3NpTWludXNCb3VuZGFyeSA9ICZwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVswXTsKKwkJCXBUc3NpUGx1c0JvdW5kYXJ5ICA9ICZwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzBdOworCQkJVHhBZ2NTdGVwICAgICAgICAgID0gcEFkLT5UeEFnY1N0ZXBBOworCQkJcFR4QWdjQ29tcGVuc2F0ZSAgID0gJnBBZC0+VHhBZ2NDb21wZW5zYXRlQTsKKwkJfQorCisJCWlmIChiQXV0b1R4QWdjKQorCQl7CisJCQkvKiBCYnBSMSBpcyB1bnNpZ25lZCBjaGFyICovCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQ5LCAmQmJwUjQ5KTsKKworCQkJLyogKHApIFRzc2lQbHVzQm91bmRhcnlHWzBdID0gMCA9IChtKSBUc3NpTWludXNCb3VuZGFyeUdbMF0gKi8KKwkJCS8qIGNvbXBlbnNhdGU6ICs0ICAgICArMyAgICsyICAgKzEgICAgMCAgIC0xICAgLTIgICAtMyAgIC00ICogc3RlcHMgKi8KKwkJCS8qIHN0ZXAgdmFsdWUgaXMgZGVmaW5lZCBpbiBwQWQtPlR4QWdjU3RlcEcgZm9yIHR4IHBvd2VyIHZhbHVlICovCisKKwkJCS8qIFs0XSsxK1s0XSAgIHA0ICAgICBwMyAgIHAyICAgcDEgICBvMSAgIG0xICAgbTIgICBtMyAgIG00ICovCisJCQkvKiBleDogICAgICAgICAweDAwIDB4MTUgMHgyNSAweDQ1IDB4ODggMHhBMCAweEI1IDB4RDAgMHhGMAorCQkJICAgYWJvdmUgdmFsdWUgYXJlIGV4YW1pbmVkIGluIG1hc3MgZmFjdG9yeSBwcm9kdWN0aW9uICovCisJCQkvKiAgICAgICAgICAgICBbNF0gICAgWzNdICBbMl0gIFsxXSAgWzBdICBbMV0gIFsyXSAgWzNdICBbNF0gKi8KKworCQkJLyogcGx1cyAoKykgaXMgMHgwMCB+IDB4NDUsIG1pbnVzICgtKSBpcyAweGEwIH4gMHhmMCAqLworCQkJLyogaWYgdmFsdWUgaXMgYmV0d2VlbiBwMSB+IG8xIG9yIG8xIH4gczEsIG5vIG5lZWQgdG8gYWRqdXN0IHR4IHBvd2VyICovCisJCQkvKiBpZiB2YWx1ZSBpcyAweGE1LCB0eCBwb3dlciB3aWxsIGJlIC09IFR4QWdjU3RlcCooMi0xKSAqLworCisJCQlpZiAoQmJwUjQ5ID4gcFRzc2lNaW51c0JvdW5kYXJ5WzFdKQorCQkJeworCQkJCS8vIFJlYWRpbmcgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZQorCQkJCS8vIGNoZWNrIGZvciBob3cgbGFyZ2Ugd2UgbmVlZCB0byBkZWNyZWFzZSB0aGUgVHggcG93ZXIKKwkJCQlmb3IgKGlkeCA9IDE7IGlkeCA8IDU7IGlkeCsrKQorCQkJCXsKKwkJCQkJaWYgKEJicFI0OSA8PSBwVHNzaU1pbnVzQm91bmRhcnlbaWR4XSkgIC8vIEZvdW5kIHRoZSByYW5nZQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIFRoZSBpbmRleCBpcyB0aGUgc3RlcCB3ZSBzaG91bGQgZGVjcmVhc2UsIGlkeCA9IDAgbWVhbnMgdGhlcmUgaXMgbm90aGluZyB0byBjb21wZW5zYXRlCisvLwkJCQlpZiAoUjMgPiAoVUxPTkcpIChUeEFnY1N0ZXAgKiAoaWR4LTEpKSkKKwkJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSAtKFR4QWdjU3RlcCAqIChpZHgtMSkpOworLy8JCQkJZWxzZQorLy8JCQkJCSpwVHhBZ2NDb21wZW5zYXRlID0gLSgoVUNIQVIpUjMpOworCisJCQkJRGVsdGFQd3IgKz0gKCpwVHhBZ2NDb21wZW5zYXRlKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLSBUeCBQb3dlciwgQkJQIFIxPSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSAtJWRcbiIsCisJCQkJCUJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCBpZHgtMSkpOworCQkJfQorCQkJZWxzZSBpZiAoQmJwUjQ5IDwgcFRzc2lQbHVzQm91bmRhcnlbMV0pCisJCQl7CisJCQkJLy8gUmVhZGluZyBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZQorCQkJCS8vIGNoZWNrIGZvciBob3cgbGFyZ2Ugd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgVHggcG93ZXIKKwkJCQlmb3IgKGlkeCA9IDE7IGlkeCA8IDU7IGlkeCsrKQorCQkJCXsKKwkJCQkJaWYgKEJicFI0OSA+PSBwVHNzaVBsdXNCb3VuZGFyeVtpZHhdKSAgIC8vIEZvdW5kIHRoZSByYW5nZQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIFRoZSBpbmRleCBpcyB0aGUgc3RlcCB3ZSBzaG91bGQgaW5jcmVhc2UsIGlkeCA9IDAgbWVhbnMgdGhlcmUgaXMgbm90aGluZyB0byBjb21wZW5zYXRlCisJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSBUeEFnY1N0ZXAgKiAoaWR4LTEpOworCQkJCURlbHRhUHdyICs9ICgqcFR4QWdjQ29tcGVuc2F0ZSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiKysgVHggUG93ZXIsIEJCUCBSMT0leCwgVHNzaVJlZj0leCwgVHhBZ2NTdGVwPSV4LCBzdGVwID0gKyVkXG4iLAorCQkJCQlCYnBSNDksIFRzc2lSZWYsIFR4QWdjU3RlcCwgaWR4LTEpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IDA7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiICAgVHggUG93ZXIsIEJCUCBSNDk9JXgsIFRzc2lSZWY9JXgsIFR4QWdjU3RlcD0leCwgc3RlcCA9ICslZFxuIiwKKwkJCQkJQmJwUjQ5LCBUc3NpUmVmLCBUeEFnY1N0ZXAsIDApKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA8PSAxNCkKKwkJeworCQkJYkF1dG9UeEFnYyAgICAgICAgID0gcEFkLT5iQXV0b1R4QWdjRzsKKwkJCXBUeEFnY0NvbXBlbnNhdGUgICA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUc7CisJCX0KKwkJZWxzZQorCQl7CisJCQliQXV0b1R4QWdjICAgICAgICAgPSBwQWQtPmJBdXRvVHhBZ2NBOworCQkJcFR4QWdjQ29tcGVuc2F0ZSAgID0gJnBBZC0+VHhBZ2NDb21wZW5zYXRlQTsKKwkJfQorCisJCWlmIChiQXV0b1R4QWdjKQorCQkJRGVsdGFQd3IgKz0gKCpwVHhBZ2NDb21wZW5zYXRlKTsKKwl9CisKKwlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZCYnBSMSk7CisJQmJwUjEgJj0gMHhGQzsKKworI2lmZGVmIFNJTkdMRV9TS1UKKwkvLyBIYW5kbGUgcmVndWxhdG9yeSBtYXggdHggcG93ZXIgY29uc3RyYWluCisJZG8KKwl7CisJCVVDSEFSICAgIFR4UHdySW5FRVBST00gPSAweEZGLCBDb3VudHJ5VHhQd3IgPSAweEZGLCBjcml0ZXJpb247CisJCVVDSEFSICAgIEFkanVzdE1heFR4UHdyWzQwXTsKKworCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KSAvLyA1RyBiYW5kCisJCQlUeFB3ckluRUVQUk9NID0gKChwQWQtPkNvbW1vbkNmZy5EZWZpbmVNYXhUeFB3ciAmIDB4RkYwMCkgPj4gOCk7CisJCWVsc2UgLy8gMi40RyBiYW5kCisJCQlUeFB3ckluRUVQUk9NID0gKHBBZC0+Q29tbW9uQ2ZnLkRlZmluZU1heFR4UHdyICYgMHgwMEZGKTsKKwkJQ291bnRyeVR4UHdyID0gR2V0Q3VudHJ5TWF4VHhQd3IocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKworCQkvLyBlcnJvciBoYW5kbGluZywgcmFuZ2UgY2hlY2sKKwkJaWYgKChUeFB3ckluRUVQUk9NID4gMHg1MCkgfHwgKENvdW50cnlUeFB3ciA+IDB4NTApKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkFzaWNBZGp1c3RUeFBvd2VyIC0gSW52YWxpZCBtYXggdHggcG93ZXIgKD0weCUwMngpLCBDb3VudHJ5VHhQd3I9JWRcbiIsIFR4UHdySW5FRVBST00sIENvdW50cnlUeFB3cikpOworCQkJYnJlYWs7CisJCX0KKworCQljcml0ZXJpb24gPSAqKChQVUNIQVIpVHhQd3IgKyAyKSAmIDB4RjsgICAgICAgIC8vIEZBRSB1c2UgT0ZETSA2TSBhcyBjcml0ZXJpb24KKworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJBc2ljQWRqdXN0VHhQb3dlciAoY3JpdGVyaW9uPSVkLCBUeFB3ckluRUVQUk9NPSVkLCBDb3VudHJ5VHhQd3I9JWQpXG4iLCBjcml0ZXJpb24sIFR4UHdySW5FRVBST00sIENvdW50cnlUeFB3cikpOworCisJCS8vIEFkanVzdCBtYXggdHggcG93ZXIgYWNjb3JkaW5nIHRvIHRoZSByZWxhdGlvbnNoaXAgb2YgdHggcG93ZXIgaW4gRTJQUk9NCisJCWZvciAoaT0wOyBpPDU7IGkrKykKKwkJeworCQkJLy8gQ0NLIHdpbGwgaGF2ZSA0ZEJtIGxhcmdlciB0aGFuIE9GRE0KKwkJCS8vIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIHNlcGFyYXRlIHRvIHBhcnNlIHRoZSB0eCBwb3dlciBmaWVsZAorCQkJaWYgKGkgPT0gMCkKKwkJCXsKKwkJCQlmb3IgKGo9MDsgajw4OyBqKyspCisJCQkJeworCQkJCQlWYWx1ZSA9IChDSEFSKSgoVHhQd3JbaV0gPj4gaio0KSAmIDB4MEYpOworCisJCQkJCWlmIChqIDwgNCkKKwkJCQkJeworCQkJCQkJLy8gQ0NLIHdpbGwgaGF2ZSA0ZEJtIGxhcmdlciB0aGFuIE9GRE0KKwkJCQkJCUFkanVzdE1heFR4UHdyW2kqOCtqXSA9IFR4UHdySW5FRVBST00gKyAoVmFsdWUgLSBjcml0ZXJpb24pICsgNDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCUFkanVzdE1heFR4UHdyW2kqOCtqXSA9IFR4UHdySW5FRVBST00gKyAoVmFsdWUgLSBjcml0ZXJpb24pOworCQkJCQl9CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIkFzaWNBZGp1c3RUeFBvd2VyIChpL2o9JWQvJWQsIFZhbHVlPSVkLCAlZClcbiIsIGksIGosIFZhbHVlLCBBZGp1c3RNYXhUeFB3cltpKjgral0pKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZm9yIChqPTA7IGo8ODsgaisrKQorCQkJCXsKKwkJCQkJVmFsdWUgPSAoQ0hBUikoKFR4UHdyW2ldID4+IGoqNCkgJiAweDBGKTsKKworCQkJCQlBZGp1c3RNYXhUeFB3cltpKjgral0gPSBUeFB3ckluRUVQUk9NICsgKFZhbHVlIC0gY3JpdGVyaW9uKTsKKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkanVzdFR4UG93ZXIgKGkvaj0lZC8lZCwgVmFsdWU9JWQsICVkKVxuIiwgaSwgaiwgVmFsdWUsIEFkanVzdE1heFR4UHdyW2kqOCtqXSkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIEFkanVzdCB0eCBwb3dlciBhY2NvcmRpbmcgdG8gdGhlIHJlbGF0aW9uc2hpcAorCQlmb3IgKGk9MDsgaTw1OyBpKyspCisJCXsKKwkJCWlmIChUeFB3cltpXSAhPSAweGZmZmZmZmZmKQorCQkJeworCQkJCWZvciAoaj0wOyBqPDg7IGorKykKKwkJCQl7CisJCQkJCVZhbHVlID0gKENIQVIpKChUeFB3cltpXSA+PiBqKjQpICYgMHgwRik7CisKKwkJCQkJLy8gVGhlIHN5c3RlbSB0eCBwb3dlciBpcyBsYXJnZXIgdGhhbiB0aGUgcmVndWxhdG9yeSwgdGhlIHBvd2VyIHNob3VsZCBiZSByZXN0cmFpbgorCQkJCQlpZiAoQWRqdXN0TWF4VHhQd3JbaSo4K2pdID4gQ291bnRyeVR4UHdyKQorCQkJCQl7CisJCQkJCQkvLyBkZWNyZWFzZSB0byB6ZXJvIGFuZCBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBCQlBSMQorCQkJCQkJaWYgKChWYWx1ZSAtIChBZGp1c3RNYXhUeFB3cltpKjgral0gLSBDb3VudHJ5VHhQd3IpKSA+IDApCisJCQkJCQkJVmFsdWUgLT0gKEFkanVzdE1heFR4UHdyW2kqOCtqXSAtIENvdW50cnlUeFB3cik7CisJCQkJCQllbHNlCisJCQkJCQkJVmFsdWUgPSAwOworCisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJBc2ljQWRqdXN0VHhQb3dlciAoaS9qPSVkLyVkLCBWYWx1ZT0lZCwgJWQpXG4iLCBpLCBqLCBWYWx1ZSwgQWRqdXN0TWF4VHhQd3JbaSo4K2pdKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkanVzdFR4UG93ZXIgKGkvaj0lZC8lZCwgVmFsdWU9JWQsICVkLCBubyBjaGFuZ2UpXG4iLCBpLCBqLCBWYWx1ZSwgQWRqdXN0TWF4VHhQd3JbaSo4K2pdKSk7CisKKwkJCQkJCVR4UHdyW2ldID0gKFR4UHdyW2ldICYgfigweDAwMDAwMDBGIDw8IGoqNCkpIHwgKFZhbHVlIDw8IGoqNCk7CisJCQkJfQorCQkJfQorCQl9CisJfSB3aGlsZSAoRkFMU0UpOworI2VuZGlmIC8vIFNJTkdMRV9TS1UgLy8KKworCS8qIGNhbGN1bGF0ZSBkZWx0YSBwb3dlciBiYXNlZCBvbiB0aGUgcGVyY2VudGFnZSBzcGVjaWZpZWQgZnJvbSBVSSAqLworCS8vIEUyUFJPTSBzZXR0aW5nIGlzIGNhbGlicmF0ZWQgZm9yIG1heGltdW0gVFggcG93ZXIgKGkuZS4gMTAwJSkKKwkvLyBXZSBsb3dlciBUWCBwb3dlciBoZXJlIGFjY29yZGluZyB0byB0aGUgcGVyY2VudGFnZSBzcGVjaWZpZWQgZnJvbSBVSQorCWlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9PSAweGZmZmZmZmZmKSAgICAgICAvLyBBVVRPIFRYIFBPV0VSIGNvbnRyb2wKKwkJOworCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gOTApICAvLyA5MSB+IDEwMCUgJiBBVVRPLCB0cmVhdCBhcyAxMDAlIGluIHRlcm1zIG9mIG1XCisJCTsKKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDYwKSAgLy8gNjEgfiA5MCUsIHRyZWF0IGFzIDc1JSBpbiB0ZXJtcyBvZiBtVwkJLy8gRGVsdGFQd3IgLT0gMTsKKwl7CisJCURlbHRhUHdyIC09IDE7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gMzApICAvLyAzMSB+IDYwJSwgdHJlYXQgYXMgNTAlIGluIHRlcm1zIG9mIG1XCQkvLyBEZWx0YVB3ciAtPSAzOworCXsKKwkJRGVsdGFQd3IgLT0gMzsKKwl9CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiAxNSkgIC8vIDE2IH4gMzAlLCB0cmVhdCBhcyAyNSUgaW4gdGVybXMgb2YgbVcJCS8vIERlbHRhUHdyIC09IDY7CisJeworCQlCYnBSMSB8PSAweDAxOworCX0KKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDkpICAgLy8gMTAgfiAxNSUsIHRyZWF0IGFzIDEyLjUlIGluIHRlcm1zIG9mIG1XCQkvLyBEZWx0YVB3ciAtPSA5OworCXsKKwkJQmJwUjEgfD0gMHgwMTsKKwkJRGVsdGFQd3IgLT0gMzsKKwl9CisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIH4gOSAlLCB0cmVhdCBhcyBNSU4ofjMlKSBpbiB0ZXJtcyBvZiBtVwkJLy8gRGVsdGFQd3IgLT0gMTI7CisJeworCQlCYnBSMSB8PSAweDAyOworCX0KKworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsIEJicFIxKTsKKworCS8qIHJlc2V0IGRpZmZlcmVudCBuZXcgdHggcG93ZXIgZm9yIGRpZmZlcmVudCBUWCByYXRlICovCisJZm9yKGk9MDsgaTw1OyBpKyspCisJeworCQlpZiAoVHhQd3JbaV0gIT0gMHhmZmZmZmZmZikKKwkJeworCQkJZm9yIChqPTA7IGo8ODsgaisrKQorCQkJeworCQkJCVZhbHVlID0gKENIQVIpKChUeFB3cltpXSA+PiBqKjQpICYgMHgwRik7IC8qIDAgfiAxNSAqLworCisJCQkJaWYgKChWYWx1ZSArIERlbHRhUHdyKSA8IDApCisJCQkJeworCQkJCQlWYWx1ZSA9IDA7IC8qIG1pbiAqLworCQkJCX0KKwkJCQllbHNlIGlmICgoVmFsdWUgKyBEZWx0YVB3cikgPiAweEYpCisJCQkJeworCQkJCQlWYWx1ZSA9IDB4RjsgLyogbWF4ICovCisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVZhbHVlICs9IERlbHRhUHdyOyAvKiB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gKi8KKwkJCQl9CisKKwkJCQkvKiBmaWxsIG5ldyB2YWx1ZSB0byBDU1Igb2Zmc2V0ICovCisJCQkJVHhQd3JbaV0gPSAoVHhQd3JbaV0gJiB+KDB4MDAwMDAwMEYgPDwgaio0KSkgfCAoVmFsdWUgPDwgaio0KTsKKwkJCX0KKworCQkJLyogd3JpdGUgdHggcG93ZXIgdmFsdWUgdG8gQ1NSICovCisJCQkvKiBUWF9QV1JfQ0ZHXzAgKDggdHggcmF0ZSkgZm9yCVRYIHBvd2VyIGZvciBPRkRNIDEyTS8xOE0KKwkJCQkJCQkJCQkJVFggcG93ZXIgZm9yIE9GRE0gNk0vOU0KKwkJCQkJCQkJCQkJVFggcG93ZXIgZm9yIENDSzUuNU0vMTFNCisJCQkJCQkJCQkJCVRYIHBvd2VyIGZvciBDQ0sxTS8yTSAqLworCQkJLyogVFhfUFdSX0NGR18xIH4gVFhfUFdSX0NGR180ICovCisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QV1JfQ0ZHXzAgKyBpKjQsIFR4UHdyW2ldKTsKKwkJfQorCX0KKworCit9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJcHV0IFBIWSB0byBzbGVlcCBoZXJlLCBhbmQgc2V0IG5leHQgd2FrZXVwIHRpbWVyLiBQSFkgZG9lc24ndCBub3Qgd2FrZXVwCisJCWF1dG9tYXRpY2FsbHkuIEluc3RlYWQsIE1DVSB3aWxsIGlzc3VlIGEgVHdha2VVcEludGVycnVwdCB0byBob3N0IGFmdGVyCisJCXRoZSB3YWtldXAgdGltZXIgdGltZW91dC4gRHJpdmVyIGhhcyB0byBpc3N1ZSBhIHNlcGFyYXRlIGNvbW1hbmQgdG8gd2FrZQorCQlQSFkgdXAuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIFRidHROdW1Ub05leHRXYWtlVXApCit7CisgICAgUlQyOFhYX1NUQV9TTEVFUF9USEVOX0FVVE9fV0FLRVVQKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQXNpY0ZvcmNlV2FrZXVwKCkgaXMgdXNlZCB3aGVuZXZlciBtYW51YWwgd2FrZXVwIGlzIHJlcXVpcmVkCisJCUFzaWNGb3JjZVNsZWVwKCkgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIG5vdCBpbiBJTkZSQSBCU1MuIFdoZW4KKwkJaW4gSU5GUkEgQlNTLCB3ZSBzaG91bGQgdXNlIEFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKCkgaW5zdGVhZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNGb3JjZVNsZWVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQXNpY0ZvcmNlV2FrZXVwKCkgaXMgdXNlZCB3aGVuZXZlciBUd2FrZXVwIHRpbWVyIChzZXQgdmlhIEFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKQorCQlleHBpcmVkLgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNGb3JjZVdha2V1cCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOICAgIGJGcm9tVHgpCit7CisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IEFzaWNGb3JjZVdha2V1cCBcbiIpKTsKKyAgICBSVDI4WFhfU1RBX0ZPUkNFX1dBS0VVUChwQWQsIGJGcm9tVHgpOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTZXQgTXkgQlNTSUQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljU2V0QnNzaWQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBCc3NpZCkKK3sKKwlVTE9ORwkJICBBZGRyNDsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PT09PT09PT09PT4gQXNpY1NldEJzc2lkICV4OiV4OiV4OiV4OiV4OiV4XG4iLAorCQlwQnNzaWRbMF0scEJzc2lkWzFdLHBCc3NpZFsyXSxwQnNzaWRbM10sIHBCc3NpZFs0XSxwQnNzaWRbNV0pKTsKKworCUFkZHI0ID0gKFVMT05HKShwQnNzaWRbMF0pCQkgfAorCQkJKFVMT05HKShwQnNzaWRbMV0gPDwgOCkgIHwKKwkJCShVTE9ORykocEJzc2lkWzJdIDw8IDE2KSB8CisJCQkoVUxPTkcpKHBCc3NpZFszXSA8PCAyNCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0JTU0lEX0RXMCwgQWRkcjQpOworCisJQWRkcjQgPSAwOworCS8vIGFsd2F5cyBvbmUgQlNTSUQgaW4gU1RBIG1vZGUKKwlBZGRyNCA9IChVTE9ORykocEJzc2lkWzRdKSB8IChVTE9ORykocEJzc2lkWzVdIDw8IDgpOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0JTU0lEX0RXMSwgQWRkcjQpOworfQorCitWT0lEIEFzaWNTZXRNY2FzdFdDKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF07CisJVVNIT1JUCQlvZmZzZXQ7CisKKwlwRW50cnktPlNzdCAgICAgICAgPSBTU1RfQVNTT0M7CisJcEVudHJ5LT5BaWQgICAgICAgID0gTUNBU1RfV0NJRDsJLy8gU29mdGFwIHN1cHBvcnRzIDEgQlNTSUQgYW5kIHVzZSBXQ0lEPTAgYXMgbXVsdGljYXN0IFdjaWQgaW5kZXgKKwlwRW50cnktPlBzTW9kZSAgICAgPSBQV1JfQUNUSVZFOworCXBFbnRyeS0+Q3VyclR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlOworCW9mZnNldCA9IE1BQ19XQ0lEX0JBU0UgKyBCU1MwTWNhc3RfV0NJRCAqIEhXX1dDSURfRU5UUllfU0laRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNEZWxXY2lkVGFiKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCVdjaWQpCit7CisJVUxPTkcJCSAgQWRkcjAgPSAweDAsIEFkZHIxID0gMHgwOworCVVMT05HIAkJb2Zmc2V0OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNpY0RlbFdjaWRUYWI9PT5XY2lkID0gMHgleFxuIixXY2lkKSk7CisJb2Zmc2V0ID0gTUFDX1dDSURfQkFTRSArIFdjaWQgKiBIV19XQ0lEX0VOVFJZX1NJWkU7CisJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCBBZGRyMCk7CisJb2Zmc2V0ICs9IDQ7CisJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCBBZGRyMSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRW5hYmxlUkRHKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVRYX0xJTktfQ0ZHX1NUUlVDCVR4TGlua0NmZzsKKwlVSU5UMzIJCQkJRGF0YSA9IDA7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0xJTktfQ0ZHLCAmVHhMaW5rQ2ZnLndvcmQpOworCVR4TGlua0NmZy5maWVsZC5UeFJER0VuID0gMTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9MSU5LX0NGRywgVHhMaW5rQ2ZnLndvcmQpOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBFRENBX0FDMF9DRkcsICZEYXRhKTsKKwlEYXRhICAmPSAweEZGRkZGRjAwOworCURhdGEgIHw9IDB4ODA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBEYXRhKTsKKworCS8vT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNEaXNhYmxlUkRHKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVRYX0xJTktfQ0ZHX1NUUlVDCVR4TGlua0NmZzsKKwlVSU5UMzIJCQkJRGF0YSA9IDA7CisKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfTElOS19DRkcsICZUeExpbmtDZmcud29yZCk7CisJVHhMaW5rQ2ZnLmZpZWxkLlR4UkRHRW4gPSAwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0xJTktfQ0ZHLCBUeExpbmtDZmcud29yZCk7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEVEQ0FfQUMwX0NGRywgJkRhdGEpOworCisJRGF0YSAgJj0gMHhGRkZGRkYwMDsKKwkvL0RhdGEgIHw9IDB4MjA7CisjaWZuZGVmIFdJRklfVEVTVAorCS8vaWYgKCBwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCApCisJLy8JRGF0YSB8PSAweDYwOyAvLyBmb3IgcGVyZm9ybWFuY2UgaXNzdWUgbm90IHNldCB0aGUgVFhPUCB0byAwCisjZW5kaWYKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0RZTkFNSUNfQkVfVFhPUF9BQ1RJVkUpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCSYmIChwQWQtPk1hY1RhYi5mQW55U3RhdGlvbk1JTU9QU0R5bmFtaWMgPT0gRkFMU0UpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJKQorCXsKKwkJLy8gRm9yIENXQyB0ZXN0LCBjaGFuZ2UgdHhvcCBmcm9tIDB4MzAgdG8gMHgyMCBpbiBUeEJ1cnN0IG1vZGUKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KQorCQkJRGF0YSB8PSAweDIwOworCX0KKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRGlzYWJsZVN5bmMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJQkNOX1RJTUVfQ0ZHX1NUUlVDIGNzcjsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5EaXNhYmxlIFRTRiBzeW5jaHJvbml6YXRpb25cbiIpKTsKKworCS8vIDIwMDMtMTItMjAgZGlzYWJsZSBUU0YgYW5kIFRCVFQgd2hpbGUgTklDIGluIHBvd2VyLXNhdmluZyBoYXZlIHNpZGUgZWZmZWN0CisJLy8JCQkgIHRoYXQgTklDIHdpbGwgbmV2ZXIgd2FrZXMgdXAgYmVjYXVzZSBUU0Ygc3RvcHMgYW5kIG5vIG1vcmUKKwkvLwkJCSAgVEJUVCBpbnRlcnJ1cHRzCisJcEFkLT5UYnR0VGlja0NvdW50ID0gMDsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEJDTl9USU1FX0NGRywgJmNzci53b3JkKTsKKwljc3IuZmllbGQuYkJlYWNvbkdlbiA9IDA7CisJY3NyLmZpZWxkLmJUQlRURW5hYmxlID0gMDsKKwljc3IuZmllbGQuVHNmU3luY01vZGUgPSAwOworCWNzci5maWVsZC5iVHNmVGlja2luZyA9IDA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNFbmFibGVCc3NTeW5jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+QXNpY0VuYWJsZUJzc1N5bmMoSU5GUkEgbW9kZSlcbiIpKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCAmY3NyLndvcmQpOworLy8JUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCAweDAwMDAwMDAwKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJY3NyLmZpZWxkLkJlYWNvbkludGVydmFsID0gcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDQ7IC8vIEFTSUMgcmVnaXN0ZXIgaW4gdW5pdHMgb2YgMS8xNiBUVQorCQljc3IuZmllbGQuYlRzZlRpY2tpbmcgPSAxOworCQljc3IuZmllbGQuVHNmU3luY01vZGUgPSAxOyAvLyBzeW5jIFRTRiBpbiBJTkZSQVNUUlVDVFVSRSBtb2RlCisJCWNzci5maWVsZC5iQmVhY29uR2VuICA9IDA7IC8vIGRvIE5PVCBnZW5lcmF0ZSBCRUFDT04KKwkJY3NyLmZpZWxkLmJUQlRURW5hYmxlID0gMTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwlOb3RlOgorCQlCRUFDT04gZnJhbWUgaW4gc2hhcmVkIG1lbW9yeSBzaG91bGQgYmUgYnVpbHQgb2sgYmVmb3JlIHRoaXMgcm91dGluZQorCQljYW4gYmUgY2FsbGVkLiBPdGhlcndpc2UsIGEgZ2FyYmFnZSBmcmFtZSBtYXliZSB0cmFuc21pdHRlZCBvdXQgZXZlcnkKKwkJQmVhY29uIHBlcmlvZC4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRW5hYmxlSWJzc1N5bmMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJQkNOX1RJTUVfQ0ZHX1NUUlVDIGNzcjk7CisJUFVDSEFSCQkJcHRyOworCVVJTlQgaTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5Bc2ljRW5hYmxlSWJzc1N5bmMoQURIT0MgbW9kZS4gTVBEVXRvdGFsQnl0ZUNvdW50ID0gJWQpXG4iLCBwQWQtPkJlYWNvblR4V0kuTVBEVXRvdGFsQnl0ZUNvdW50KSk7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEJDTl9USU1FX0NGRywgJmNzcjkud29yZCk7CisJY3NyOS5maWVsZC5iQmVhY29uR2VuID0gMDsKKwljc3I5LmZpZWxkLmJUQlRURW5hYmxlID0gMDsKKwljc3I5LmZpZWxkLmJUc2ZUaWNraW5nID0gMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBCQ05fVElNRV9DRkcsIGNzcjkud29yZCk7CisKKworI2lmZGVmIFJUMjg3MAorCS8vIG1vdmUgQkVBQ09OIFRYRCBhbmQgZnJhbWUgY29udGVudCB0byBvbi1jaGlwIG1lbW9yeQorCXB0ciA9IChQVUNIQVIpJnBBZC0+QmVhY29uVHhXSTsKKwlmb3IgKGk9MDsgaTxUWFdJX1NJWkU7IGkrPTIpICAvLyAxNi1ieXRlIFRYV0kgZmllbGQKKwl7CisJCS8vVUlOVDMyIGxvbmdwdHIgPSAgKnB0ciArICgqKHB0cisxKTw8OCkgKyAoKihwdHIrMik8PDE2KSArICgqKHB0ciszKTw8MjQpOworCQkvL1JUTVBfSU9fV1JJVEUzMihwQWQsIEhXX0JFQUNPTl9CQVNFMCArIGksIGxvbmdwdHIpOworCQlSVFVTQk11bHRpV3JpdGUocEFkLCBIV19CRUFDT05fQkFTRTAgKyBpLCBwdHIsIDIpOworCQlwdHIgKz0gMjsKKwl9CisKKwkvLyBzdGFydCByaWdodCBhZnRlciB0aGUgMTYtYnl0ZSBUWFdJIGZpZWxkCisJcHRyID0gcEFkLT5CZWFjb25CdWY7CisJZm9yIChpPTA7IGk8IHBBZC0+QmVhY29uVHhXSS5NUERVdG90YWxCeXRlQ291bnQ7IGkrPTIpCisJeworCQkvL1VJTlQzMiBsb25ncHRyID0gICpwdHIgKyAoKihwdHIrMSk8PDgpICsgKCoocHRyKzIpPDwxNikgKyAoKihwdHIrMyk8PDI0KTsKKwkJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBIV19CRUFDT05fQkFTRTAgKyBUWFdJX1NJWkUgKyBpLCBsb25ncHRyKTsKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgSFdfQkVBQ09OX0JBU0UwICsgVFhXSV9TSVpFICsgaSwgcHRyLCAyKTsKKwkJcHRyICs9MjsKKwl9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkvLworCS8vIEZvciBXaS1GaSBmYWlseSBnZW5lcmF0ZWQgYmVhY29ucyBiZXR3ZWVuIHBhcnRpY2lwYXRpbmcgc3RhdGlvbnMuCisJLy8gU2V0IFRCVFQgcGhhc2UgYWRhcHRpdmUgYWRqdXN0bWVudCBzdGVwIHRvIDh1cyAoZGVmYXVsdCAxNnVzKQorCS8vIGRvbid0IGNoYW5nZSBzZXR0aW5ncyAyMDA2LTUtIGJ5IEplcnJ5CisJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBUQlRUX1NZTkNfQ0ZHLCAweDAwMDAxMDEwKTsKKworCS8vIHN0YXJ0IHNlbmRpbmcgQkVBQ09OCisJY3NyOS5maWVsZC5CZWFjb25JbnRlcnZhbCA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCA0OyAvLyBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUKKwljc3I5LmZpZWxkLmJUc2ZUaWNraW5nID0gMTsKKwljc3I5LmZpZWxkLlRzZlN5bmNNb2RlID0gMjsgLy8gc3luYyBUU0YgaW4gSUJTUyBtb2RlCisJY3NyOS5maWVsZC5iVEJUVEVuYWJsZSA9IDE7CisJY3NyOS5maWVsZC5iQmVhY29uR2VuID0gMTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBCQ05fVElNRV9DRkcsIGNzcjkud29yZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNTZXRFZGNhUGFybSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQRURDQV9QQVJNCSBwRWRjYVBhcm0pCit7CisJRURDQV9BQ19DRkdfU1RSVUMgICBBYzBDZmcsIEFjMUNmZywgQWMyQ2ZnLCBBYzNDZmc7CisJQUNfVFhPUF9DU1IwX1NUUlVDIGNzcjA7CisJQUNfVFhPUF9DU1IxX1NUUlVDIGNzcjE7CisJQUlGU05fQ1NSX1NUUlVDICAgIEFpZnNuQ3NyOworCUNXTUlOX0NTUl9TVFJVQyAgICBDd21pbkNzcjsKKwlDV01BWF9DU1JfU1RSVUMgICAgQ3dtYXhDc3I7CisJaW50IGk7CisKKwlBYzBDZmcud29yZCA9IDA7CisJQWMxQ2ZnLndvcmQgPSAwOworCUFjMkNmZy53b3JkID0gMDsKKwlBYzNDZmcud29yZCA9IDA7CisJaWYgKChwRWRjYVBhcm0gPT0gTlVMTCkgfHwgKHBFZGNhUGFybS0+YlZhbGlkID09IEZBTFNFKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXNpY1NldEVkY2FQYXJtXG4iKSk7CisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpOworCQlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQorCQl7CisJCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJIHx8IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0FwQ2xpKQorCQkJCUNMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtpXSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOworCQl9CisKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyAgICAgIE1BQyBSZWdpc3RlciBoYXMgYSBjb3B5IC4KKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8jaWZuZGVmIFdJRklfVEVTVAorCQlpZiggcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgKQorCQl7CisJCQkvLyBGb3IgQ1dDIHRlc3QsIGNoYW5nZSB0eG9wIGZyb20gMHgzMCB0byAweDIwIGluIFR4QnVyc3QgbW9kZQorCQkJQWMwQ2ZnLmZpZWxkLkFjVHhvcCA9IDB4MjA7IC8vIFN1Z2dlc3QgYnkgSm9obiBmb3IgVHhCdXJzdCBpbiBIVCBNb2RlCisJCX0KKwkJZWxzZQorCQkJQWMwQ2ZnLmZpZWxkLkFjVHhvcCA9IDA7CS8vIFFJRF9BQ19CRQorLy8jZWxzZQorLy8JCUFjMENmZy5maWVsZC5BY1R4b3AgPSAwOwkvLyBRSURfQUNfQkUKKy8vI2VuZGlmCisJCUFjMENmZy5maWVsZC5Dd21pbiA9IENXX01JTl9JTl9CSVRTOworCQlBYzBDZmcuZmllbGQuQ3dtYXggPSBDV19NQVhfSU5fQklUUzsKKwkJQWMwQ2ZnLmZpZWxkLkFpZnNuID0gMjsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBBYzBDZmcud29yZCk7CisKKwkJQWMxQ2ZnLmZpZWxkLkFjVHhvcCA9IDA7CS8vIFFJRF9BQ19CSworCQlBYzFDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKKwkJQWMxQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7CisJCUFjMUNmZy5maWVsZC5BaWZzbiA9IDI7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMxX0NGRywgQWMxQ2ZnLndvcmQpOworCisJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpCisJCXsKKwkJCUFjMkNmZy5maWVsZC5BY1R4b3AgPSAxOTI7CS8vIEFDX1ZJOiAxOTIqMzJ1cyB+PSA2bXMKKwkJCUFjM0NmZy5maWVsZC5BY1R4b3AgPSA5NjsJLy8gQUNfVk86IDk2KjMydXMgIH49IDNtcworCQl9CisJCWVsc2UKKwkJeworCQkJQWMyQ2ZnLmZpZWxkLkFjVHhvcCA9IDk2OwkvLyBBQ19WSTogOTYqMzJ1cyB+PSAzbXMKKwkJCUFjM0NmZy5maWVsZC5BY1R4b3AgPSA0ODsJLy8gQUNfVk86IDQ4KjMydXMgfj0gMS41bXMKKwkJfQorCQlBYzJDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKKwkJQWMyQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7CisJCUFjMkNmZy5maWVsZC5BaWZzbiA9IDI7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMyX0NGRywgQWMyQ2ZnLndvcmQpOworCQlBYzNDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKKwkJQWMzQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7CisJCUFjM0NmZy5maWVsZC5BaWZzbiA9IDI7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMzX0NGRywgQWMzQ2ZnLndvcmQpOworCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gICAgICBETUEgUmVnaXN0ZXIgaGFzIGEgY29weSB0b28uCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJY3NyMC5maWVsZC5BYzBUeG9wID0gMDsJCS8vIFFJRF9BQ19CRQorCQljc3IwLmZpZWxkLkFjMVR4b3AgPSAwOwkJLy8gUUlEX0FDX0JLCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9UWE9QMF9DRkcsIGNzcjAud29yZCk7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpCisJCXsKKwkJCWNzcjEuZmllbGQuQWMyVHhvcCA9IDE5MjsJCS8vIEFDX1ZJOiAxOTIqMzJ1cyB+PSA2bXMKKwkJCWNzcjEuZmllbGQuQWMzVHhvcCA9IDk2OwkJLy8gQUNfVk86IDk2KjMydXMgIH49IDNtcworCQl9CisJCWVsc2UKKwkJeworCQkJY3NyMS5maWVsZC5BYzJUeG9wID0gOTY7CQkvLyBBQ19WSTogOTYqMzJ1cyB+PSAzbXMKKwkJCWNzcjEuZmllbGQuQWMzVHhvcCA9IDQ4OwkJLy8gQUNfVk86IDQ4KjMydXMgfj0gMS41bXMKKwkJfQorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IxLndvcmQpOworCisJCUN3bWluQ3NyLndvcmQgPSAwOworCQlDd21pbkNzci5maWVsZC5Dd21pbjAgPSBDV19NSU5fSU5fQklUUzsKKwkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4xID0gQ1dfTUlOX0lOX0JJVFM7CisJCUN3bWluQ3NyLmZpZWxkLkN3bWluMiA9IENXX01JTl9JTl9CSVRTOworCQlDd21pbkNzci5maWVsZC5Dd21pbjMgPSBDV19NSU5fSU5fQklUUzsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0NXTUlOX0NGRywgQ3dtaW5Dc3Iud29yZCk7CisKKwkJQ3dtYXhDc3Iud29yZCA9IDA7CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MCA9IENXX01BWF9JTl9CSVRTOworCQlDd21heENzci5maWVsZC5Dd21heDEgPSBDV19NQVhfSU5fQklUUzsKKwkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgyID0gQ1dfTUFYX0lOX0JJVFM7CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MyA9IENXX01BWF9JTl9CSVRTOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQ1dNQVhfQ0ZHLCBDd21heENzci53b3JkKTsKKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQUlGU05fQ0ZHLCAweDAwMDAyMjIyKTsKKworCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpOworCX0KKwllbHNlCisJeworCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCk7CisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gICAgICBNQUMgUmVnaXN0ZXIgaGFzIGEgY29weS4KKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLworCQkvLyBNb2RpZnkgQ3dtaW4vQ3dtYXgvVHhvcCBvbiBxdWV1ZVtRSURfQUNfVkldLCBSZWNvbW1lbmQgYnkgSmVycnkgMjAwNS8wNy8yNworCQkvLyBUbyBkZWdyYWRlIG91ciBWSURPIFF1ZXVlJ3MgdGhyb3VnaHB1dCBmb3IgV2lGaSBXTU0gUzNUMDcgSXNzdWUuCisJCS8vCisJCS8vcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WSV0gPSBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZJXSAqIDcgLyAxMDsgLy8gcnQyODYwYyBuZWVkIHRoaXMKKworCQlBYzBDZmcuZmllbGQuQWNUeG9wID0gIHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQkVdOworCQlBYzBDZmcuZmllbGQuQ3dtaW49IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX0JFXTsKKwkJQWMwQ2ZnLmZpZWxkLkN3bWF4ID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQkVdOworCQlBYzBDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CRV07IC8vKzE7CisKKwkJQWMxQ2ZnLmZpZWxkLkFjVHhvcCA9ICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX0JLXTsKKwkJQWMxQ2ZnLmZpZWxkLkN3bWluID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfQktdOyAvLysyOworCQlBYzFDZmcuZmllbGQuQ3dtYXggPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19CS107CisJCUFjMUNmZy5maWVsZC5BaWZzbiA9IHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JLXTsgLy8rMTsKKworCQlBYzJDZmcuZmllbGQuQWNUeG9wID0gKHBFZGNhUGFybS0+VHhvcFtRSURfQUNfVkldICogNikgLyAxMDsKKwkJQWMyQ2ZnLmZpZWxkLkN3bWluID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVkldOworCQlBYzJDZmcuZmllbGQuQ3dtYXggPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19WSV07CisJCUFjMkNmZy5maWVsZC5BaWZzbiA9IHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXTsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJLy8gVHVuaW5nIGZvciBXaS1GaSBXTU0gUzA2CisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpRmlUZXN0ICYmCisJCQkJcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldID09IDEwKQorCQkJCUFjMkNmZy5maWVsZC5BaWZzbiAtPSAxOworCisJCQkvLyBUdW5pbmcgZm9yIFRHbiBXaS1GaSA1LjIuMzIKKwkJCS8vIFNUQSBUZXN0QmVkIGNoYW5nZXMgaW4gdGhpcyBpdGVtOiBjb25leGFudCBsZWdhY3kgc3RhID09PiBicm9hZGNvbSAxMW4gc3RhCisJCQlpZiAoU1RBX1RHTl9XSUZJX09OKHBBZCkgJiYKKwkJCQlwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV0gPT0gMTApCisJCQl7CisJCQkJQWMwQ2ZnLmZpZWxkLkFpZnNuID0gMzsKKwkJCQlBYzJDZmcuZmllbGQuQWNUeG9wID0gNTsKKwkJCX0KKworI2lmZGVmIFJUMzB4eAorCQkJaWYgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwIHx8IHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18yMDIwKQorCQkJeworCQkJCS8vIFR1bmluZyBmb3IgV2lGaSBXTU0gUzMtVDA3OiBjb25uZXhhbnQgbGVnYWN5IHN0YSA9PT4gYnJvYWRjb20gMTFuIHN0YS4KKwkJCQlBYzJDZmcuZmllbGQuQWlmc24gPSA1OworCQkJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJQWMzQ2ZnLmZpZWxkLkFjVHhvcCA9IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfVk9dOworCQlBYzNDZmcuZmllbGQuQ3dtaW4gPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19WT107CisJCUFjM0NmZy5maWVsZC5Dd21heCA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZPXTsKKwkJQWMzQ2ZnLmZpZWxkLkFpZnNuID0gcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVk9dOworCisvLyNpZmRlZiBXSUZJX1RFU1QKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCkKKwkJeworCQkJaWYgKEFjM0NmZy5maWVsZC5BY1R4b3AgPT0gMTAyKQorCQkJeworCQkJQWMwQ2ZnLmZpZWxkLkFjVHhvcCA9IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQkVdID8gcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CRV0gOiAxMDsKKwkJCQlBYzBDZmcuZmllbGQuQWlmc24gID0gcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQkVdLTE7IC8qIEFJRlNOIG11c3QgPj0gMSAqLworCQkJQWMxQ2ZnLmZpZWxkLkFjVHhvcCA9IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQktdOworCQkJCUFjMUNmZy5maWVsZC5BaWZzbiAgPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CS107CisJCQlBYzJDZmcuZmllbGQuQWNUeG9wID0gcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WSV07CisJCQl9IC8qIEVuZCBvZiBpZiAqLworCQl9CisvLyNlbmRpZiAvLyBXSUZJX1RFU1QgLy8KKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIEFjMENmZy53b3JkKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzFfQ0ZHLCBBYzFDZmcud29yZCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMyX0NGRywgQWMyQ2ZnLndvcmQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDM19DRkcsIEFjM0NmZy53b3JkKTsKKworCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gICAgICBETUEgUmVnaXN0ZXIgaGFzIGEgY29weSB0b28uCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJY3NyMC5maWVsZC5BYzBUeG9wID0gQWMwQ2ZnLmZpZWxkLkFjVHhvcDsKKwkJY3NyMC5maWVsZC5BYzFUeG9wID0gQWMxQ2ZnLmZpZWxkLkFjVHhvcDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX1RYT1AwX0NGRywgY3NyMC53b3JkKTsKKworCQljc3IxLmZpZWxkLkFjMlR4b3AgPSBBYzJDZmcuZmllbGQuQWNUeG9wOworCQljc3IxLmZpZWxkLkFjM1R4b3AgPSBBYzNDZmcuZmllbGQuQWNUeG9wOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IxLndvcmQpOworCisJCUN3bWluQ3NyLndvcmQgPSAwOworCQlDd21pbkNzci5maWVsZC5Dd21pbjAgPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19CRV07CisJCUN3bWluQ3NyLmZpZWxkLkN3bWluMSA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX0JLXTsKKwkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4yID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVkldOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4zID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVk9dIC0gMTsgLy9mb3IgVEduIHdpZmkgdGVzdAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQ1dNSU5fQ0ZHLCBDd21pbkNzci53b3JkKTsKKworCQlDd21heENzci53b3JkID0gMDsKKwkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgwID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQkVdOworCQlDd21heENzci5maWVsZC5Dd21heDEgPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19CS107CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MiA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZJXTsKKwkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgzID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfVk9dOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQ1dNQVhfQ0ZHLCBDd21heENzci53b3JkKTsKKworCQlBaWZzbkNzci53b3JkID0gMDsKKwkJQWlmc25Dc3IuZmllbGQuQWlmc24wID0gQWMwQ2ZnLmZpZWxkLkFpZnNuOyAvL3BFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JFXTsKKwkJQWlmc25Dc3IuZmllbGQuQWlmc24xID0gQWMxQ2ZnLmZpZWxkLkFpZnNuOyAvL3BFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JLXTsKKwkJQWlmc25Dc3IuZmllbGQuQWlmc24yID0gQWMyQ2ZnLmZpZWxkLkFpZnNuOyAvL3BFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXTsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJLy8gVHVuaW5nIGZvciBXaS1GaSBXTU0gUzA2CisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpRmlUZXN0ICYmCisJCQkJcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldID09IDEwKQorCQkJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMiA9IEFjMkNmZy5maWVsZC5BaWZzbiAtIDQ7CisKKwkJCS8vIFR1bmluZyBmb3IgVEduIFdpLUZpIDUuMi4zMgorCQkJLy8gU1RBIFRlc3RCZWQgY2hhbmdlcyBpbiB0aGlzIGl0ZW06IGNvbm5leGFudCBsZWdhY3kgc3RhID09PiBicm9hZGNvbSAxMW4gc3RhCisJCQlpZiAoU1RBX1RHTl9XSUZJX09OKHBBZCkgJiYKKwkJCQlwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV0gPT0gMTApCisJCQl7CisJCQkJQWlmc25Dc3IuZmllbGQuQWlmc24wID0gMzsKKwkJCQlBaWZzbkNzci5maWVsZC5BaWZzbjIgPSA3OworCQkJfQorCisJCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSk7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQWlmc25Dc3IuZmllbGQuQWlmc24zID0gQWMzQ2ZnLmZpZWxkLkFpZnNuIC0gMTsgLy9wRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WT107IC8vZm9yIFRHbiB3aWZpIHRlc3QKKyNpZmRlZiBSVDMweHgKKwkJaWYgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwIHx8IHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18yMDIwKQorCQl7CisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlBaWZzbkNzci5maWVsZC5BaWZzbjIgPSAweDI7IC8vcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldOyAvL2ZvciBXaUZpIFdNTSBTNC1UMDQuCisJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0FJRlNOX0NGRywgQWlmc25Dc3Iud29yZCk7CisKKwkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0sIHBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpOworCQlpZiAoIUFESE9DX09OKHBBZCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRURDQSBbIyVkXTogQUlGU04gQ1dtaW4gQ1dtYXggIFRYT1AodXMpICBBQ01cbiIsIHBFZGNhUGFybS0+RWRjYVVwZGF0ZUNvdW50KSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiAgICAgQUNfQkUgICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkFpZnNuWzBdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtaW5bMF0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5Dd21heFswXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPlR4b3BbMF08PDUsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5iQUNNWzBdKSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiAgICAgQUNfQksgICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkFpZnNuWzFdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtaW5bMV0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5Dd21heFsxXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPlR4b3BbMV08PDUsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5iQUNNWzFdKSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiAgICAgQUNfVkkgICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkFpZnNuWzJdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtaW5bMl0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5Dd21heFsyXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPlR4b3BbMl08PDUsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5iQUNNWzJdKSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiAgICAgQUNfVk8gICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkFpZnNuWzNdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtaW5bM10sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5Dd21heFszXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPlR4b3BbM108PDUsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5iQUNNWzNdKSk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIAlBc2ljU2V0U2xvdFRpbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gQk9PTEVBTiBiVXNlU2hvcnRTbG90VGltZSkKK3sKKwlVTE9ORwlTbG90VGltZTsKKwlVSU5UMzIJUmVnVmFsdWUgPSAwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJYlVzZVNob3J0U2xvdFRpbWUgPSBUUlVFOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJaWYgKGJVc2VTaG9ydFNsb3RUaW1lKQorCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfU0xPVF9JTlVTRUQpOworCWVsc2UKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfU0xPVF9JTlVTRUQpOworCisJU2xvdFRpbWUgPSAoYlVzZVNob3J0U2xvdFRpbWUpPyA5IDogMjA7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gZm9yY2UgdXNpbmcgc2hvcnQgU0xPVCB0aW1lIGZvciBGQUUgdG8gZGVtbyBwZXJmb3JtYW5jZSB3aGVuIFR4QnVyc3QgaXMgT04KKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KQorCQkJU2xvdFRpbWUgPSA5OworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vCisJLy8gRm9yIHNvbWUgcmVhc29ucywgYWx3YXlzIHNldCBpdCB0byBzaG9ydCBzbG90IHRpbWUuCisJLy8KKwkvLyBUb0RvOiBTaG91bGQgY29uc2lkZXIgY2FwYWJpbGl0eSB3aXRoIDExQgorCS8vCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCVNsb3RUaW1lID0gMjA7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJUlRNUF9JT19SRUFEMzIocEFkLCBCS09GRl9TTE9UX0NGRywgJlJlZ1ZhbHVlKTsKKwlSZWdWYWx1ZSA9IFJlZ1ZhbHVlICYgMHhGRkZGRkYwMDsKKworCVJlZ1ZhbHVlIHw9IFNsb3RUaW1lOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgQktPRkZfU0xPVF9DRkcsIFJlZ1ZhbHVlKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQWRkIFNoYXJlZCBrZXkgaW5mb3JtYXRpb24gaW50byBBU0lDLgorCQlVcGRhdGUgc2hhcmVkIGtleSwgVHhNaWMgYW5kIFJ4TWljIHRvIEFzaWMgU2hhcmVkIGtleSB0YWJsZQorCQlVcGRhdGUgaXRzIGNpcGhlckFsZyB0byBBc2ljIFNoYXJlZCBrZXkgTW9kZS4KKworICAgIFJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzaWNBZGRTaGFyZWRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUgkJIEJzc0luZGV4LAorCUlOIFVDSEFSCQkgS2V5SWR4LAorCUlOIFVDSEFSCQkgQ2lwaGVyQWxnLAorCUlOIFBVQ0hBUgkJIHBLZXksCisJSU4gUFVDSEFSCQkgcFR4TWljLAorCUlOIFBVQ0hBUgkJIHBSeE1pYykKK3sKKwlVTE9ORyBvZmZzZXQ7IC8vLCBjc3IwOworCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc2ljQWRkU2hhcmVkS2V5RW50cnkgQnNzSW5kZXg9JWQsIEtleUlkeD0lZFxuIiwgQnNzSW5kZXgsS2V5SWR4KSk7CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFzaWNBZGRTaGFyZWRLZXlFbnRyeTogJXMga2V5ICMlZFxuIiwgQ2lwaGVyTmFtZVtDaXBoZXJBbGddLCBCc3NJbmRleCo0ICsgS2V5SWR4KSk7CisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIiAJS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEtleVswXSxwS2V5WzFdLHBLZXlbMl0scEtleVszXSxwS2V5WzRdLHBLZXlbNV0scEtleVs2XSxwS2V5WzddLHBLZXlbOF0scEtleVs5XSxwS2V5WzEwXSxwS2V5WzExXSxwS2V5WzEyXSxwS2V5WzEzXSxwS2V5WzE0XSxwS2V5WzE1XSkpOworCWlmIChwUnhNaWMpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiIAlSeCBNSUMgS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJcFJ4TWljWzBdLHBSeE1pY1sxXSxwUnhNaWNbMl0scFJ4TWljWzNdLHBSeE1pY1s0XSxwUnhNaWNbNV0scFJ4TWljWzZdLHBSeE1pY1s3XSkpOworCX0KKwlpZiAocFR4TWljKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIiAJVHggTUlDIEtleSA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCXBUeE1pY1swXSxwVHhNaWNbMV0scFR4TWljWzJdLHBUeE1pY1szXSxwVHhNaWNbNF0scFR4TWljWzVdLHBUeE1pY1s2XSxwVHhNaWNbN10pKTsKKwl9CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8KKwkvLyBmaWxsIGtleSBtYXRlcmlhbCAtIGtleSArIFRYIE1JQyArIFJYIE1JQworCS8vCisKKyNpZmRlZiBSVDI4NzAKK3sKKwlvZmZzZXQgPSBTSEFSRURfS0VZX1RBQkxFX0JBU0UgKyAoNCpCc3NJbmRleCArIEtleUlkeCkqSFdfS0VZX0VOVFJZX1NJWkU7CisJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwS2V5LCBNQVhfTEVOX09GX1NIQVJFX0tFWSk7CisKKwlvZmZzZXQgKz0gTUFYX0xFTl9PRl9TSEFSRV9LRVk7CisJaWYgKHBUeE1pYykKKwl7CisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcFR4TWljLCA4KTsKKwl9CisKKwlvZmZzZXQgKz0gODsKKwlpZiAocFJ4TWljKQorCXsKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwUnhNaWMsIDgpOworCX0KK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vCisJLy8gVXBkYXRlIGNpcGhlciBhbGdvcml0aG0uIFdTVEEgYWx3YXlzIHVzZSBCU1MwCisJLy8KKwlSVE1QX0lPX1JFQUQzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFKzQqKEJzc0luZGV4LzIpLCAmY3NyMS53b3JkKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJlYWQ6IFNIQVJFRF9LRVlfTU9ERV9CQVNFIGF0IHRoaXMgQnNzWyVkXSBLZXlJZHhbJWRdPSAweCV4IFxuIiwgQnNzSW5kZXgsS2V5SWR4LCBjc3IxLndvcmQpKTsKKwlpZiAoKEJzc0luZGV4JTIpID09IDApCisJeworCQlpZiAoS2V5SWR4ID09IDApCisJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCWVsc2UgaWYgKEtleUlkeCA9PSAyKQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJZWxzZQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENpcGhlckFsZzsKKwl9CisJZWxzZQorCXsKKwkJaWYgKEtleUlkeCA9PSAwKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MENpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCisJCQljc3IxLmZpZWxkLkJzczFLZXkxQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQllbHNlIGlmIChLZXlJZHggPT0gMikKKwkJCWNzcjEuZmllbGQuQnNzMUtleTJDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCWVsc2UKKwkJCWNzcjEuZmllbGQuQnNzMUtleTNDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJfQorCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiV3JpdGU6IFNIQVJFRF9LRVlfTU9ERV9CQVNFIGF0IHRoaXMgQnNzWyVkXSA9IDB4JXggXG4iLCBCc3NJbmRleCwgY3NyMS53b3JkKSk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UrNCooQnNzSW5kZXgvMiksIGNzcjEud29yZCk7CisKK30KKworLy8JSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIEFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUgkJIEJzc0luZGV4LAorCUlOIFVDSEFSCQkgS2V5SWR4KQoreworCS8vVUxPTkcgU2VjQ3NyMDsKKwlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBc2ljUmVtb3ZlU2hhcmVkS2V5RW50cnk6ICMlZCBcbiIsIEJzc0luZGV4KjQgKyBLZXlJZHgpKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UrNCooQnNzSW5kZXgvMiksICZjc3IxLndvcmQpOworCWlmICgoQnNzSW5kZXglMikgPT0gMCkKKwl7CisJCWlmIChLZXlJZHggPT0gMCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSAwOworCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSAwOworCQllbHNlIGlmIChLZXlJZHggPT0gMikKKwkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSAwOworCQllbHNlCisJCQljc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID0gMDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKEtleUlkeCA9PSAwKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MENpcGhlckFsZyA9IDA7CisJCWVsc2UgaWYgKEtleUlkeCA9PSAxKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MUNpcGhlckFsZyA9IDA7CisJCWVsc2UgaWYgKEtleUlkeCA9PSAyKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MkNpcGhlckFsZyA9IDA7CisJCWVsc2UKKwkJCWNzcjEuZmllbGQuQnNzMUtleTNDaXBoZXJBbGcgPSAwOworCX0KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIldyaXRlOiBTSEFSRURfS0VZX01PREVfQkFTRSBhdCB0aGlzIEJzc1slZF0gPSAweCV4IFxuIiwgQnNzSW5kZXgsIGNzcjEud29yZCkpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFKzQqKEJzc0luZGV4LzIpLCBjc3IxLndvcmQpOworCUFTU0VSVChCc3NJbmRleCA8IDQpOworCUFTU0VSVChLZXlJZHggPCA0KTsKKworfQorCisKK1ZPSUQgQXNpY1VwZGF0ZVdDSURBdHRyaWJ1dGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUCQlXQ0lELAorCUlOIFVDSEFSCQlCc3NJbmRleCwKKwlJTiBVQ0hBUiAgICAgICAgQ2lwaGVyQWxnLAorCUlOIEJPT0xFQU4JCWJVc2VQYWlyZXdpc2VLZXlUYWJsZSkKK3sKKwlVTE9ORyAgIFdDSURBdHRyaSA9IDAsIG9mZnNldDsKKworCS8vCisJLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlLgorCS8vIE9ubHkgVHhLZXkgY291bGQgdXBkYXRlIFdDSUQgYXR0cmlidXRlLgorCS8vCisJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoV0NJRCAqIEhXX1dDSURfQVRUUklfU0laRSk7CisJV0NJREF0dHJpID0gKEJzc0luZGV4IDw8IDQpIHwgKENpcGhlckFsZyA8PCAxKSB8IChiVXNlUGFpcmV3aXNlS2V5VGFibGUpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgV0NJREF0dHJpKTsKK30KKworVk9JRCBBc2ljVXBkYXRlV0NJRElWRUlWKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVTE9ORyAgICAgICAgdUlWLAorCUlOIFVMT05HICAgICAgICB1RUlWKQoreworCVVMT05HCW9mZnNldDsKKworCW9mZnNldCA9IE1BQ19JVkVJVl9UQUJMRV9CQVNFICsgKFdDSUQgKiBIV19JVkVJVl9FTlRSWV9TSVpFKTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgdUlWKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyA0LCB1RUlWKTsKK30KKworVk9JRCBBc2ljVXBkYXRlUnhXQ0lEVGFibGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUCQlXQ0lELAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIpCit7CisJVUxPTkcgb2Zmc2V0OworCVVMT05HIEFkZHI7CisKKwlvZmZzZXQgPSBNQUNfV0NJRF9CQVNFICsgKFdDSUQgKiBIV19XQ0lEX0VOVFJZX1NJWkUpOworCUFkZHIgPSBwQWRkclswXSArIChwQWRkclsxXSA8PCA4KSArKHBBZGRyWzJdIDw8IDE2KSArKHBBZGRyWzNdIDw8IDI0KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIEFkZHIpOworCUFkZHIgPSBwQWRkcls0XSArIChwQWRkcls1XSA8PCA4KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyA0LCBBZGRyKTsKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IENpcGhlciBLZXksIENpcGhlciBhbGdvcml0aG0sIElWL0VJViB0byBBc2ljCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICAgICAgV0NJRCAgICAgICAgICAgICAgICAgICAgV0NJRCBFbnRyeSBudW1iZXIuCisgICAgICAgIEJzc0luZGV4ICAgICAgICAgICAgICAgIEJTU0lEIGluZGV4LCBzdGF0aW9uIG9yIG5vbmUgbXVsdGlwbGUgQlNTSUQgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHZhbHVlIHNob3VsZCBiZSAwLgorICAgICAgICBLZXlJZHggICAgICAgICAgICAgICAgICBUaGlzIEtleUlkeCB3aWxsIHNldCB0byBJVidzIEtleUlEIGlmIGJUeEtleSBlbmFibGVkCisgICAgICAgIHBDaXBoZXJLZXkgICAgICAgICAgICAgIFBvaW50ZXIgdG8gQ2lwaGVyIEtleS4KKyAgICAgICAgYlVzZVBhaXJld2lzZUtleVRhYmxlICAgVFJVRSBtZWFucyBzYXZlZCB0aGUga2V5IGluIFNoYXJlZEtleSB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIFBhaXJld2lzZUtleSB0YWJsZQorICAgICAgICBiVHhLZXkgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSB0cmFuc21pdCBrZXkgaWYgZW5hYmxlZC4KKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVGhpcyByb3V0aW5lIHdpbGwgc2V0IHRoZSByZWxhdGl2ZSBrZXkgc3R1ZmYgdG8gQXNpYyBpbmNsdWRpbmcgV0NJRCBhdHRyaWJ1dGUsCisgICAgICAgIENpcGhlciBLZXksIENpcGhlciBhbGdvcml0aG0gYW5kIElWL0VJVi4KKworICAgICAgICBJVi9FSVYgd2lsbCBiZSB1cGRhdGUgaWYgdGhpcyBDaXBoZXJLZXkgaXMgdGhlIHRyYW5zbWlzc2lvbiBrZXkgYmVjYXVzZQorICAgICAgICBBU0lDIHdpbGwgYmFzZSBvbiBJVidzIEtleUlEIHZhbHVlIHRvIHNlbGVjdCBDaXBoZXIgS2V5LgorCisgICAgICAgIElmIGJUeEtleSBzZXRzIHRvIEZBTFNFLCB0aGlzIGlzIG5vdCB0aGUgVFgga2V5LCBidXQgaXQgY291bGQgYmUKKyAgICAgICAgUlgga2V5CisKKyAgICAJRm9yIEFQIG1vZGUgYlR4S2V5IG11c3QgYmUgYWx3YXlzIHNldCB0byBUUlVFLgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXNpY0FkZEtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVQ0hBUgkJQnNzSW5kZXgsCisJSU4gVUNIQVIJCUtleUlkeCwKKwlJTiBQQ0lQSEVSX0tFWQlwQ2lwaGVyS2V5LAorCUlOIEJPT0xFQU4JCWJVc2VQYWlyZXdpc2VLZXlUYWJsZSwKKwlJTiBCT09MRUFOCQliVHhLZXkpCit7CisJVUxPTkcJb2Zmc2V0OworLy8JVUxPTkcgICBXQ0lEQXR0cmkgPSAwOworCVVDSEFSCUlWNCA9IDA7CisJUFVDSEFSCQlwS2V5ID0gcENpcGhlcktleS0+S2V5OworLy8JVUxPTkcJCUtleUxlbiA9IHBDaXBoZXJLZXktPktleUxlbjsKKwlQVUNIQVIJCXBUeE1pYyA9IHBDaXBoZXJLZXktPlR4TWljOworCVBVQ0hBUgkJcFJ4TWljID0gcENpcGhlcktleS0+UnhNaWM7CisJUFVDSEFSCQlwVHh0c2MgPSBwQ2lwaGVyS2V5LT5UeFRzYzsKKwlVQ0hBUgkJQ2lwaGVyQWxnID0gcENpcGhlcktleS0+Q2lwaGVyQWxnOworCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7CisKKy8vCUFTU0VSVChLZXlMZW4gPD0gTUFYX0xFTl9PRl9QRUVSX0tFWSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gQXNpY0FkZEtleUVudHJ5XG4iKSk7CisJLy8KKwkvLyAxLikgZGVjaWRlIGtleSB0YWJsZSBvZmZzZXQKKwkvLworCWlmIChiVXNlUGFpcmV3aXNlS2V5VGFibGUpCisJCW9mZnNldCA9IFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICsgKFdDSUQgKiBIV19LRVlfRU5UUllfU0laRSk7CisJZWxzZQorCQlvZmZzZXQgPSBTSEFSRURfS0VZX1RBQkxFX0JBU0UgKyAoNCAqIEJzc0luZGV4ICsgS2V5SWR4KSAqIEhXX0tFWV9FTlRSWV9TSVpFOworCisJLy8KKwkvLyAyLikgU2V0IEtleSB0byBBc2ljCisJLy8KKwkvL2ZvciAoaSA9IDA7IGkgPCBLZXlMZW47IGkrKykKKworI2lmZGVmIFJUMjg3MAorCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcEtleSwgTUFYX0xFTl9PRl9QRUVSX0tFWSk7CisJb2Zmc2V0ICs9IE1BWF9MRU5fT0ZfUEVFUl9LRVk7CisKKwkvLworCS8vIDMuKSBTZXQgTUlDIGtleSBpZiBhdmFpbGFibGUKKwkvLworCWlmIChwVHhNaWMpCisJeworCQlSVFVTQk11bHRpV3JpdGUocEFkLCBvZmZzZXQsIHBUeE1pYywgOCk7CisJfQorCW9mZnNldCArPSBMRU5fVEtJUF9UWE1JQ0s7CisKKwlpZiAocFJ4TWljKQorCXsKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwUnhNaWMsIDgpOworCX0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vCisJLy8gNC4pIE1vZGlmeSBJVi9FSVYgaWYgbmVlZHMKKwkvLyAgICAgVGhpcyB3aWxsIGZvcmNlIEFzaWMgdG8gdXNlIHRoaXMga2V5IElEIGJ5IHNldHRpbmcgSVYuCisJLy8KKwlpZiAoYlR4S2V5KQorCXsKKworI2lmZGVmIFJUMjg3MAorCQlVSU5UMzIgdG1wVmFsOworCisJCS8vCisJCS8vIFdyaXRlIElWCisJCS8vCisJCUlWNCA9IChLZXlJZHggPDwgNik7CisJCWlmICgoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQKSB8fCAoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykgfHwoQ2lwaGVyQWxnID09IENJUEhFUl9BRVMpKQorCQkJSVY0IHw9IDB4MjA7ICAvLyB0dXJuIG9uIGV4dGVuc2lvbiBiaXQgbWVhbnMgRUlWIGV4aXN0ZW5jZQorCisJCXRtcFZhbCA9IHBUeHRzY1sxXSArICgoKHBUeHRzY1sxXSB8IDB4MjApICYgMHg3ZikgPDwgOCkgKyAocFR4dHNjWzBdIDw8IDE2KSArIChJVjQgPDwgMjQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIHRtcFZhbCk7CisKKwkJLy8KKwkJLy8gV3JpdGUgRUlWCisJCS8vCisJCW9mZnNldCArPSA0OworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsICooUFVJTlQzMikmcENpcGhlcktleS0+VHhUc2NbMl0pOworI2VuZGlmIC8vIFJUMjg3MCAvLworCQlBc2ljVXBkYXRlV0NJREF0dHJpYnV0ZShwQWQsIFdDSUQsIEJzc0luZGV4LCBDaXBoZXJBbGcsIGJVc2VQYWlyZXdpc2VLZXlUYWJsZSk7CisJfQorCisJaWYgKCFiVXNlUGFpcmV3aXNlS2V5VGFibGUpCisJeworCQkvLworCQkvLyBPbmx5IHVwZGF0ZSB0aGUgc2hhcmVkIGtleSBzZWN1cml0eSBtb2RlCisJCS8vCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UgKyA0ICogKEJzc0luZGV4IC8gMiksICZjc3IxLndvcmQpOworCQlpZiAoKEJzc0luZGV4ICUgMikgPT0gMCkKKwkJeworCQkJaWYgKEtleUlkeCA9PSAwKQorCQkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQkJZWxzZSBpZiAoS2V5SWR4ID09IDIpCisJCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJCWVsc2UKKwkJCQljc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKEtleUlkeCA9PSAwKQorCQkJCWNzcjEuZmllbGQuQnNzMUtleTBDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCQljc3IxLmZpZWxkLkJzczFLZXkxQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQkJZWxzZSBpZiAoS2V5SWR4ID09IDIpCisJCQkJY3NyMS5maWVsZC5Cc3MxS2V5MkNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJCWVsc2UKKwkJCQljc3IxLmZpZWxkLkJzczFLZXkzQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQl9CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFICsgNCAqIChCc3NJbmRleCAvIDIpLCBjc3IxLndvcmQpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBBc2ljQWRkS2V5RW50cnlcbiIpKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlBZGQgUGFpci13aXNlIGtleSBtYXRlcmlhbCBpbnRvIEFTSUMuCisJCVVwZGF0ZSBwYWlyd2lzZSBrZXksIFR4TWljIGFuZCBSeE1pYyB0byBBc2ljIFBhaXItd2lzZSBrZXkgdGFibGUKKworICAgIFJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIsCisJSU4gVUNIQVIJCVdDSUQsCisJSU4gQ0lQSEVSX0tFWQkJICpwQ2lwaGVyS2V5KQoreworCUlOVCBpOworCVVMT05HIAkJb2Zmc2V0OworCVBVQ0hBUgkJIHBLZXkgPSBwQ2lwaGVyS2V5LT5LZXk7CisJUFVDSEFSCQkgcFR4TWljID0gcENpcGhlcktleS0+VHhNaWM7CisJUFVDSEFSCQkgcFJ4TWljID0gcENpcGhlcktleS0+UnhNaWM7CisjaWZkZWYgREJHCisJVUNIQVIJCUNpcGhlckFsZyA9IHBDaXBoZXJLZXktPkNpcGhlckFsZzsKKyNlbmRpZiAvLyBEQkcgLy8KKworCS8vIEVLRVkKKwlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChXQ0lEICogSFdfS0VZX0VOVFJZX1NJWkUpOworI2lmZGVmIFJUMjg3MAorCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgJnBDaXBoZXJLZXktPktleVswXSwgTUFYX0xFTl9PRl9QRUVSX0tFWSk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9QRUVSX0tFWTsgaSs9NCkKKwl7CisJCVVJTlQzMiBWYWx1ZTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBvZmZzZXQgKyBpLCAmVmFsdWUpOworCX0KKworCW9mZnNldCArPSBNQVhfTEVOX09GX1BFRVJfS0VZOworCisJLy8gIE1JQyBLRVkKKwlpZiAocFR4TWljKQorCXsKKyNpZmRlZiBSVDI4NzAKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCAmcENpcGhlcktleS0+VHhNaWNbMF0sIDgpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKwlvZmZzZXQgKz0gODsKKwlpZiAocFJ4TWljKQorCXsKKyNpZmRlZiBSVDI4NzAKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCAmcENpcGhlcktleS0+UnhNaWNbMF0sIDgpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnk6IFdDSUQgIyVkIEFsZz0lc1xuIixXQ0lELCBDaXBoZXJOYW1lW0NpcGhlckFsZ10pKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIglLZXkgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQlwS2V5WzBdLHBLZXlbMV0scEtleVsyXSxwS2V5WzNdLHBLZXlbNF0scEtleVs1XSxwS2V5WzZdLHBLZXlbN10scEtleVs4XSxwS2V5WzldLHBLZXlbMTBdLHBLZXlbMTFdLHBLZXlbMTJdLHBLZXlbMTNdLHBLZXlbMTRdLHBLZXlbMTVdKSk7CisJaWYgKHBSeE1pYykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIglSeCBNSUMgS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJcFJ4TWljWzBdLHBSeE1pY1sxXSxwUnhNaWNbMl0scFJ4TWljWzNdLHBSeE1pY1s0XSxwUnhNaWNbNV0scFJ4TWljWzZdLHBSeE1pY1s3XSkpOworCX0KKwlpZiAocFR4TWljKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiCVR4IE1JQyBLZXkgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQlwVHhNaWNbMF0scFR4TWljWzFdLHBUeE1pY1syXSxwVHhNaWNbM10scFR4TWljWzRdLHBUeE1pY1s1XSxwVHhNaWNbNl0scFR4TWljWzddKSk7CisJfQorfQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUmVtb3ZlIFBhaXItd2lzZSBrZXkgbWF0ZXJpYWwgZnJvbSBBU0lDLgorCisgICAgUmV0dXJuOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJCSBCc3NJZHgsCisJSU4gVUNIQVIJCSBXY2lkKQoreworCVVMT05HCQlXQ0lEQXR0cmk7CisJVVNIT1JUCQlvZmZzZXQ7CisKKwkvLyByZS1zZXQgdGhlIGVudHJ5J3MgV0NJRCBhdHRyaWJ1dGUgYXMgT1BFTi1OT05FLgorCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKFdjaWQgKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCVdDSURBdHRyaSA9IChCc3NJZHg8PDQpIHwgUEFJUldJU0VLRVlUQUJMRTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7Cit9CisKK0JPT0xFQU4gQXNpY1NlbmRDb21tYW5kVG9NY3UoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJCSBDb21tYW5kLAorCUlOIFVDSEFSCQkgVG9rZW4sCisJSU4gVUNIQVIJCSBBcmcwLAorCUlOIFVDSEFSCQkgQXJnMSkKK3sKKwlIT1NUX0NNRF9DU1JfU1RSVUMJSDJNQ21kOworCUgyTV9NQUlMQk9YX1NUUlVDCUgyTU1haWxib3g7CisJVUxPTkcJCQkJaSA9IDA7CisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgSDJNX01BSUxCT1hfQ1NSLCAmSDJNTWFpbGJveC53b3JkKTsKKwkJaWYgKEgyTU1haWxib3guZmllbGQuT3duZXIgPT0gMCkKKwkJCWJyZWFrOworCisJCVJUTVB1c2VjRGVsYXkoMik7CisJfSB3aGlsZShpKysgPCAxMDApOworCisJaWYgKGkgPj0gMTAwKQorCXsKKwkJeworCQlEQkdQUklOVF9FUlIoKCJIMk1fTUFJTEJPWCBzdGlsbCBob2xkIGJ5IE1DVS4gY29tbWFuZCBmYWlsXG4iKSk7CisJCX0KKwkJcmV0dXJuIEZBTFNFOworCX0KKworCisJSDJNTWFpbGJveC5maWVsZC5Pd25lcgkgID0gMTsJICAgLy8gcGFzcyBvd25lcnNoaXAgdG8gTUNVCisJSDJNTWFpbGJveC5maWVsZC5DbWRUb2tlbiA9IFRva2VuOworCUgyTU1haWxib3guZmllbGQuSGlnaEJ5dGUgPSBBcmcxOworCUgyTU1haWxib3guZmllbGQuTG93Qnl0ZSAgPSBBcmcwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX0NTUiwgSDJNTWFpbGJveC53b3JkKTsKKworCUgyTUNtZC53b3JkIAkJCSAgPSAwOworCUgyTUNtZC5maWVsZC5Ib3N0Q29tbWFuZCAgPSBDb21tYW5kOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEhPU1RfQ01EX0NTUiwgSDJNQ21kLndvcmQpOworCisJaWYgKENvbW1hbmQgIT0gMHg4MCkKKwl7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVZlcmlmeSB0aGUgc3VwcG9ydCByYXRlIGZvciBkaWZmZXJlbnQgUEhZIHR5cGUKKworCUFyZ3VtZW50czoKKwkJcEFkIAkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBDaGVja1JhdGVzKAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBPVVQJVUNIQVIJCQlTdXBSYXRlW10sCisJSU4gT1VUCVVDSEFSCQkJKlN1cFJhdGVMZW4pCit7CisJVUNIQVIJUmF0ZUlkeCwgaSwgajsKKwlVQ0hBUglOZXdSYXRlWzEyXSwgTmV3UmF0ZUxlbjsKKworCU5ld1JhdGVMZW4gPSAwOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKKwkJUmF0ZUlkeCA9IDQ7CisJZWxzZQorCQlSYXRlSWR4ID0gMTI7CisKKwkvLyBDaGVjayBmb3Igc3VwcG9ydCByYXRlcyBleGNsdWRlIGJhc2ljIHJhdGUgYml0CisJZm9yIChpID0gMDsgaSA8ICpTdXBSYXRlTGVuOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBSYXRlSWR4OyBqKyspCisJCQlpZiAoKFN1cFJhdGVbaV0gJiAweDdmKSA9PSBSYXRlSWRUbzUwMEticHNbal0pCisJCQkJTmV3UmF0ZVtOZXdSYXRlTGVuKytdID0gU3VwUmF0ZVtpXTsKKworCSpTdXBSYXRlTGVuID0gTmV3UmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShTdXBSYXRlLCBOZXdSYXRlLCBOZXdSYXRlTGVuKTsKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorQk9PTEVBTiBSVE1QQ2hlY2tDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCQlDZW50cmFsQ2hhbm5lbCwKKwlJTiBVQ0hBUgkJQ2hhbm5lbCkKK3sKKwlVQ0hBUgkJazsKKwlVQ0hBUgkJVXBwZXJDaGFubmVsID0gMCwgTG93ZXJDaGFubmVsID0gMDsKKwlVQ0hBUgkJTm9FZmZlY3RDaGFubmVsaW5MaXN0ID0gMDsKKworCS8vIEZpbmQgdXBwZXIgYW5kIGxvd2VyIGNoYW5uZWwgYWNjb3JkaW5nIHRvIDQwTUh6IGN1cnJlbnQgb3BlcmF0aW9uLgorCWlmIChDZW50cmFsQ2hhbm5lbCA8IENoYW5uZWwpCisJeworCQlVcHBlckNoYW5uZWwgPSBDaGFubmVsOworCQlpZiAoQ2VudHJhbENoYW5uZWwgPiAyKQorCQkJTG93ZXJDaGFubmVsID0gQ2VudHJhbENoYW5uZWwgLSAyOworCQllbHNlCisJCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UgaWYgKENlbnRyYWxDaGFubmVsID4gQ2hhbm5lbCkKKwl7CisJCVVwcGVyQ2hhbm5lbCA9IENlbnRyYWxDaGFubmVsICsgMjsKKwkJTG93ZXJDaGFubmVsID0gQ2hhbm5lbDsKKwl9CisKKwlmb3IgKGsgPSAwO2sgPCBwQWQtPkNoYW5uZWxMaXN0TnVtO2srKykKKwl7CisJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2tdLkNoYW5uZWwgPT0gVXBwZXJDaGFubmVsKQorCQl7CisJCQlOb0VmZmVjdENoYW5uZWxpbkxpc3QgKys7CisJCX0KKwkJaWYgKHBBZC0+Q2hhbm5lbExpc3Rba10uQ2hhbm5lbCA9PSBMb3dlckNoYW5uZWwpCisJCXsKKwkJCU5vRWZmZWN0Q2hhbm5lbGluTGlzdCArKzsKKwkJfQorCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiVG90YWwgQ2hhbm5lbCBpbiBDaGFubmVsIExpc3QgPSBbJWRdXG4iLCBOb0VmZmVjdENoYW5uZWxpbkxpc3QpKTsKKwlpZiAoTm9FZmZlY3RDaGFubmVsaW5MaXN0ID09IDIpCisJCXJldHVybiBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJVmVyaWZ5IHRoZSBzdXBwb3J0IHJhdGUgZm9yIEhUIHBoeSB0eXBlCisKKwlBcmd1bWVudHM6CisJCXBBZCAJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlGQUxTRSBpZiBwQWQtPkNvbW1vbkNmZy5TdXBwb3J0ZWRIdFBoeSBkb2Vzbid0IGFjY2VwdCB0aGUgcEh0Q2FwYWJpbGl0eS4gIChBUCBNb2RlKQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4gCVJUTVBDaGVja0h0KAorCUlOCVBSVE1QX0FEQVBURVIJCQlwQWQsCisJSU4JVUNIQVIJCQkJCVdjaWQsCisJSU4gCUhUX0NBUEFCSUxJVFlfSUUJCSpwSHRDYXBhYmlsaXR5LAorCUlOIAlBRERfSFRfSU5GT19JRQkJCSpwQWRkSHRJbmZvKQoreworCWlmIChXY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvLyBJZiB1c2UgQU1TRFUsIHNldCBmbGFnLgorCWlmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUpCisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCk7CisJLy8gU2F2ZSBQZWVyIENhcGFiaWxpdHkKKwlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3IyMCkKKwkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yNDApCisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpOworCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uVHhTVEJDKQorCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLCBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRSk7CisJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5SeFNUQkMpCisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwlpZiAocEFkLT5Db21tb25DZmcuYlJkZyAmJiBwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCkKKwl7CisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFKTsKKwl9CisKKwlpZiAoV2NpZCA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCXsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5NcGR1RGVuc2l0eSA9IHBIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NcGR1RGVuc2l0eTsKKwl9CisKKwkvLyBXaWxsIGNoZWNrIENoYW5uZWxXaWR0aCBmb3IgTUNTU2V0WzRdIGJlbG93CisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbNF0gPSAweDE7CisgICAgc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSkKKwl7CisJCWNhc2UgMToKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gMHhmZjsKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gMHgwMDsKKyAgICAgICAgICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzJdID0gMHgwMDsKKyAgICAgICAgICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzNdID0gMHgwMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDB4ZmY7CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDB4ZmY7CisgICAgICAgICAgICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFsyXSA9IDB4MDA7CisgICAgICAgICAgICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFszXSA9IDB4MDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAweGZmOworCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAweGZmOworICAgICAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMl0gPSAweGZmOworICAgICAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbM10gPSAweDAwOworCQkJYnJlYWs7CisJfQorCisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID0gcEFkZEh0SW5mby0+QWRkSHRJbmZvLlJlY29tV2lkdGggJiBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUENoZWNrSHQ6OiBIdENhcEluZm8uQ2hhbm5lbFdpZHRoPSVkLCBSZWNvbVdpZHRoPSVkLCBEZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoPSVkLCBCVzQwTUF2YWlsRm9yQS9HPSVkLyVkLCBQaHlNb2RlPSVkIFxuIiwKKwkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoLCBwQWRkSHRJbmZvLT5BZGRIdEluZm8uUmVjb21XaWR0aCwgcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCwKKwkJcEFkLT5OaWNDb25maWcyLmZpZWxkLkJXNDBNQXZhaWxGb3JBLCBwQWQtPk5pY0NvbmZpZzIuZmllbGQuQlc0ME1BdmFpbEZvckcsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpKTsKKworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkdGID0gIHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5HRiAmcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkdGOworCisJLy8gU2VuZCBBc3NvYyBSZXEgd2l0aCBteSBIVCBjYXBhYmlsaXR5LgorCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZSA9ICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplOworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QcyA9ICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWltb1BzOworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9ICAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCkgJiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3IyMCk7CisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0gIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjQwKSAmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwKTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5UeFNUQkMgPSAgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMpJihwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDKTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMgPSAgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5SeFNUQkMpJihwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uVHhTVEJDKTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3IgPSBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWF4UkFtcGR1RmFjdG9yOworICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1wZHVEZW5zaXR5ID0gcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5QbHVzSFRDID0gcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlBsdXNIVEM7CisJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5IVENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMgPSBwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uUGx1c0hUQzsKKwlpZiAocEFkLT5Db21tb25DZmcuYlJkZykKKwl7CisJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlJER1N1cHBvcnQgPSBwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uUkRHU3VwcG9ydDsKKyAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQyA9IDE7CisJfQorCisgICAgaWYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV18yMCkKKyAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbNF0gPSAweDA7ICAvLyBCVzIwIGNhbid0IHRyYW5zbWl0IE1DUzMyCisKKwlDT1BZX0FQX0hUU0VUVElOR1NfRlJPTV9CRUFDT04ocEFkLCBwSHRDYXBhYmlsaXR5KTsKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVZlcmlmeSB0aGUgc3VwcG9ydCByYXRlIGZvciBkaWZmZXJlbnQgUEhZIHR5cGUKKworCUFyZ3VtZW50czoKKwkJcEFkIAkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBVcGRhdGVNbG1lUmF0ZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUglNaW5pbXVtUmF0ZTsKKwlVQ0hBUglQcm9wZXJNbG1lUmF0ZTsgLy89IFJBVEVfNTQ7CisJVUNIQVIJaSwgaiwgUmF0ZUlkeCA9IDEyOyAvLzEsIDIsIDUuNSwgMTEsIDYsIDksIDEyLCAxOCwgMjQsIDM2LCA0OCwgNTQKKwlCT09MRUFOCWJNYXRjaCA9IEZBTFNFOworCisJc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKQorCXsKKwkJY2FzZSBQSFlfMTFCOgorCQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzExOworCQkJTWluaW11bVJhdGUgPSBSQVRFXzE7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFCR19NSVhFRDoKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBQSFlfMTFBQkdOX01JWEVEOgorCQljYXNlIFBIWV8xMUJHTl9NSVhFRDoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCWlmICgocEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4gPT0gNCkgJiYKKwkJCQkocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gPT0gMCkpCisJCQkJLy8gQiBvbmx5IEFQCisJCQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzExOworCQkJZWxzZQorCQkJCVByb3Blck1sbWVSYXRlID0gUkFURV8yNDsKKworCQkJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsIDw9IDE0KQorCQkJCU1pbmltdW1SYXRlID0gUkFURV8xOworCQkJZWxzZQorCQkJCU1pbmltdW1SYXRlID0gUkFURV82OworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQToKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBQSFlfMTFOXzJfNEc6CS8vIHJ0Mjg2MCBuZWVkIHRvIGNoZWNrIG1sbWVyYXRlIGZvciA4MDIuMTFuCisJCWNhc2UgUEhZXzExR05fTUlYRUQ6CisJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQljYXNlIFBIWV8xMUFOX01JWEVEOgorCQljYXNlIFBIWV8xMU5fNUc6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQlQcm9wZXJNbG1lUmF0ZSA9IFJBVEVfMjQ7CisJCQlNaW5pbXVtUmF0ZSA9IFJBVEVfNjsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUFCR19NSVhFRDoKKwkJCVByb3Blck1sbWVSYXRlID0gUkFURV8yNDsKKwkJCWlmIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA8PSAxNCkKKwkJCSAgIE1pbmltdW1SYXRlID0gUkFURV8xOworCQkJZWxzZQorCQkJCU1pbmltdW1SYXRlID0gUkFURV82OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IC8vIGVycm9yCisJCQlQcm9wZXJNbG1lUmF0ZSA9IFJBVEVfMTsKKwkJCU1pbmltdW1SYXRlID0gUkFURV8xOworCQkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuOyBpKyspCisJeworCQlmb3IgKGogPSAwOyBqIDwgUmF0ZUlkeDsgaisrKQorCQl7CisJCQlpZiAoKHBBZC0+TWxtZUF1eC5TdXBSYXRlW2ldICYgMHg3ZikgPT0gUmF0ZUlkVG81MDBLYnBzW2pdKQorCQkJeworCQkJCWlmIChqID09IFByb3Blck1sbWVSYXRlKQorCQkJCXsKKwkJCQkJYk1hdGNoID0gVFJVRTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGJNYXRjaCkKKwkJCWJyZWFrOworCX0KKworCWlmIChiTWF0Y2ggPT0gRkFMU0UpCisJeworCQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW47IGkrKykKKwkJeworCQkJZm9yIChqID0gMDsgaiA8IFJhdGVJZHg7IGorKykKKwkJCXsKKwkJCQlpZiAoKHBBZC0+TWxtZUF1eC5FeHRSYXRlW2ldICYgMHg3ZikgPT0gUmF0ZUlkVG81MDBLYnBzW2pdKQorCQkJCXsKKwkJCQkJaWYgKGogPT0gUHJvcGVyTWxtZVJhdGUpCisJCQkJCXsKKwkJCQkJCWJNYXRjaCA9IFRSVUU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKGJNYXRjaCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChiTWF0Y2ggPT0gRkFMU0UpCisJeworCQlQcm9wZXJNbG1lUmF0ZSA9IE1pbmltdW1SYXRlOworCX0KKworCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gTWluaW11bVJhdGU7CisJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFByb3Blck1sbWVSYXRlOworCWlmIChwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA+PSBSQVRFXzYpCisJeworCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTME1jYXN0X1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBVcGRhdGVNbG1lUmF0ZSA9PT4gICBNbG1lVHJhbnNtaXQgPSAweCV4ICBcbiIgLCBwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQud29yZCkpOworfQorCitDSEFSIFJUTVBNYXhSc3NpKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIENIQVIJCQkJUnNzaTAsCisJSU4gQ0hBUgkJCQlSc3NpMSwKKwlJTiBDSEFSCQkJCVJzc2kyKQoreworCUNIQVIJbGFyZ2VyID0gLTEyNzsKKworCWlmICgocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKSAmJiAoUnNzaTAgIT0gMCkpCisJeworCQlsYXJnZXIgPSBSc3NpMDsKKwl9CisKKwlpZiAoKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPj0gMikgJiYgKFJzc2kxICE9IDApKQorCXsKKwkJbGFyZ2VyID0gbWF4KFJzc2kwLCBSc3NpMSk7CisJfQorCisJaWYgKChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDMpICYmIChSc3NpMiAhPSAwKSkKKwl7CisJCWxhcmdlciA9IG1heChsYXJnZXIsIFJzc2kyKTsKKwl9CisKKwlpZiAobGFyZ2VyID09IC0xMjcpCisJCWxhcmdlciA9IDA7CisKKwlyZXR1cm4gbGFyZ2VyOworfQorCisKKy8vIEFudGVubmEgZGl2ZXNpdHkgdXNlIEdQSU8zIGFuZCBFRVNLIHBpbiBmb3IgY29udHJvbAorLy8gQW50ZW5uYSBhbmQgRUVQUk9NIGFjY2VzcyBhcmUgYm90aCB1c2luZyBFRVNLIHBpbiwKKy8vIFRoZXJlZm9yIHdlIHNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgRUVTSyBhdCB0aGUgc2FtZSB0aW1lCisvLyBUaGVuIHJlc3RvcmUgYW50ZW5uYSBhZnRlciBFRVBST00gYWNjZXNzCitWT0lEIEFzaWNTZXRSeEFudCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCUFudCkKK3sKKyNpZmRlZiBSVDMweHgKKwlVSU5UMzIJVmFsdWU7CisJVUlOVDMyCXg7CisKKwlpZiAoKHBBZC0+RWVwcm9tQWNjZXNzKQkJCQkJCQkJCQl8fAorCQkoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkJfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkJfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpKQkJCXx8CisJCShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vIHRoZSBhbnRlbm5hIHNlbGVjdGlvbiBpcyB0aHJvdWdoIGZpcm13YXJlIGFuZCBNQUMgcmVnaXN0ZXIoR1BJTzMpCisJaWYgKEFudCA9PSAwKQorCXsKKwkJLy8gTWFpbiBhbnRlbm5hCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCQl4IHw9IChFRVNLKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDB4MDgwOCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEdQSU9fQ1RSTF9DRkcsIFZhbHVlKTsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNTZXRSeEFudCwgc3dpdGNoIHRvIG1haW4gYW50ZW5uYVxuIikpOworCX0KKwllbHNlCisJeworCQkvLyBBdXggYW50ZW5uYQorCQlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKwkJeCAmPSB+KEVFU0spOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEdQSU9fQ1RSTF9DRkcsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMHgwODA4KTsKKwkJVmFsdWUgfD0gMHgwODsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgR1BJT19DVFJMX0NGRywgVmFsdWUpOworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQXNpY1NldFJ4QW50LCBzd2l0Y2ggdG8gYXV4IGFudGVubmFcbiIpKTsKKwl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBQZXJpb2RpYyBldmFsdWF0ZSBhbnRlbm5hIGxpbmsgc3RhdHVzCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgIC0gQWRhcHRlciBwb2ludGVyCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXNpY0V2YWx1YXRlUnhBbnQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUNIQVIJQkJQUjMgPSAwOworCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUwl8CisJCQkJCQkJZlJUTVBfQURBUFRFUl9SQURJT19PRkYJCQl8CisJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUCQl8CisJCQkJCQkJZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykgfHwKKwkJCQkJCQlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpCisjaWZkZWYgUlQzMHh4CisJCQkJCQkJfHwgKHBBZC0+RWVwcm9tQWNjZXNzKQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJCQkJCSkKKwkJcmV0dXJuOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy9pZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkvLwlyZXR1cm47CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gdHdvIGFudGVubmEgc2VsZWN0aW9uIG1lY2hhbmlzbS0gb25lIGlzIGFudGVubmEgZGl2ZXJzaXR5LCB0aGUgb3RoZXIgaXMgZmFpbGVkIGFudGVubmEgcmVtb3ZlCisJLy8gb25lIGlzIGFudGVubmEgZGl2ZXJzaXR5OnRoZXJlIGlzIG9ubHkgb25lIGFudGVubmEgY2FuIHJ4IGFuZCB0eAorCS8vIHRoZSBvdGhlciBpcyBmYWlsZWQgYW50ZW5uYSByZW1vdmU6dHdvIHBoeXNpY2FsIGFudGVubmEgY2FuIHJ4IGFuZCB0eAorCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuQW50RGl2ZXJzaXR5KQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBbnREaXYgLSBiZWZvcmUgZXZhbHVhdGUgUGFpcjEtQW50ICglZCwlZClcbiIsCisJCQlwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50LCBwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQpKTsKKworCQlBc2ljU2V0UnhBbnQocEFkLCBwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQpOworCisJCXBBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPSAxOyAvLyAxOk1lYW5zIHN3aXRjaCB0byBTZWNvbmRhcnlSeEFudCwgMDpNZWFucyBzd2l0Y2ggdG8gUGFpcjFQcmltYXJ5UnhBbnQKKwkJcEFkLT5SeEFudC5GaXJzdFBrdEFycml2ZWRXaGVuRXZhbHVhdGUgPSBGQUxTRTsKKwkJcEFkLT5SeEFudC5SY3ZQa3ROdW1XaGVuRXZhbHVhdGUgPSAwOworCisJCS8vIGEgb25lLXNob3QgdGltZXIgdG8gZW5kIHRoZSBldmFsdXRpb24KKwkJLy8gZHluYW1pYyBhZGp1c3QgYW50ZW5uYSBldmFsdWF0aW9uIHBlcmlvZCBhY2NvcmRpbmcgdG8gdGhlIHRyYWZmaWMKKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lLlJ4QW50RXZhbFRpbWVyLCAxMDApOworCQllbHNlCisJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwgMzAwKTsKKwl9CisJZWxzZQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlpZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkJcmV0dXJuOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJCUFIzKTsKKwkJQkJQUjMgJj0gKH4weDE4KTsKKwkJaWYocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAzKQorCQl7CisJCQlCQlBSMyB8PSAoMHgxMCk7CisJCX0KKwkJZWxzZSBpZihwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCisJCXsKKwkJCUJCUFIzIHw9ICgweDgpOworCQl9CisJCWVsc2UgaWYocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKQorCQl7CisJCQlCQlBSMyB8PSAoMHgwKTsKKwkJfQorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBSMyk7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKKwkJCSkKKwkJeworCQkJVUxPTkcJVHhUb3RhbENudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArCisJCQkJCQkJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICsKKwkJCQkJCQkJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQ7CisKKwkJCS8vIGR5bmFtaWMgYWRqdXN0IGFudGVubmEgZXZhbHVhdGlvbiBwZXJpb2QgYWNjb3JkaW5nIHRvIHRoZSB0cmFmZmljCisJCQlpZiAoVHhUb3RhbENudCA+IDUwKQorCQkJeworCQkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lLlJ4QW50RXZhbFRpbWVyLCAyMCk7CisJCQkJcEFkLT5NbG1lLmJMb3dUaHJvdWdocHV0ID0gRkFMU0U7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUnhBbnRFdmFsVGltZXIsIDMwMCk7CisJCQkJcEFkLT5NbG1lLmJMb3dUaHJvdWdocHV0ID0gVFJVRTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBBZnRlciBldmFsdWF0aW9uLCBjaGVjayBhbnRlbm5hIGxpbmsgc3RhdHVzCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgIC0gQWRhcHRlciBwb2ludGVyCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXNpY1J4QW50RXZhbFRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCVJUTVBfQURBUFRFUgkqcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlVQ0hBUgkJCUJCUFIzID0gMDsKKwlDSEFSCQkJbGFyZ2VyID0gLTEyNywgcnNzaTAsIHJzc2kxLCByc3NpMjsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTCXwKKwkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfUkFESU9fT0ZGCQkJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkgfHwKKwkJCQkJCQlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpCisjaWZkZWYgUlQzMHh4CisJCQkJCQkJfHwgKHBBZC0+RWVwcm9tQWNjZXNzKQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJCQkJCSkKKwkJcmV0dXJuOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy9pZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkvLwlyZXR1cm47CisKKwkJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5BbnREaXZlcnNpdHkpCisJCXsKKwkJCWlmICgocEFkLT5SeEFudC5SY3ZQa3ROdW1XaGVuRXZhbHVhdGUgIT0gMCkgJiYgKHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW3BBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudF0gPj0gcEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudF0pKQorCQkJeworCQkJCVVDSEFSCQkJdGVtcDsKKworCQkJCS8vCisJCQkJLy8gc2VsZWN0IFByaW1hcnlSeEFudFBhaXIKKwkJCQkvLyAgICBSb2xlIGNoYW5nZSwgVXNlZCBQYWlyMVNlY29uZGFyeVJ4QW50IGFzIFByaW1hcnlSeEFudFBhaXIuCisJCQkJLy8gICAgU2luY2UgUGFpcjFTZWNvbmRhcnlSeEFudCBRdWFsaXR5IGdvb2QgdGhhbiBQYWlyMVByaW1hcnlSeEFudAorCQkJCS8vCisJCQkJdGVtcCA9IHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQ7CisJCQkJcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCA9IHBBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudDsKKwkJCQlwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQgPSB0ZW1wOworCisJCQkJcEFkLT5SeEFudC5QYWlyMUxhc3RBdmdSc3NpID0gKHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW3BBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudF0gPj4gMyk7CisJCQkJcEFkLT5SeEFudC5FdmFsdWF0ZVN0YWJsZUNudCA9IDA7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gaWYgdGhlIGV2YWx1YXRlZCBhbnRlbm5hIGlzIG5vdCBiZXR0ZXIgdGhhbiBvcmlnaW5hbCwgc3dpdGNoIGJhY2sgdG8gb3JpZ2luYWwgYW50ZW5uYQorCQkJCUFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOworCQkJCXBBZC0+UnhBbnQuRXZhbHVhdGVTdGFibGVDbnQgKys7CisJCQl9CisKKwkJCXBBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPSAwOyAvLyAxOk1lYW5zIHN3aXRjaCB0byBTZWNvbmRhcnlSeEFudCwgMDpNZWFucyBzd2l0Y2ggdG8gUGFpcjFQcmltYXJ5UnhBbnQKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBc2ljUnhBbnRFdmFsQWN0aW9uOjpBZnRlciBFdmFsKGZpeCBpbiAjJWQpLCA8JWQsICVkPiwgUmN2UGt0TnVtV2hlbkV2YWx1YXRlPSVsZFxuIiwKKwkJCQkJcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCwgKHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpWzBdID4+IDMpLCAocEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbMV0gPj4gMyksIHBBZC0+UnhBbnQuUmN2UGt0TnVtV2hlbkV2YWx1YXRlKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkJCXJldHVybjsKKworCQkJLy8gaWYgdGhlIHRyYWZmaWMgaXMgbG93LCB1c2UgYXZlcmFnZSByc3NpIGFzIHRoZSBjcml0ZXJpYQorCQkJaWYgKHBBZC0+TWxtZS5iTG93VGhyb3VnaHB1dCA9PSBUUlVFKQorCQkJeworCQkJCXJzc2kwID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTA7CisJCQkJcnNzaTEgPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMTsKKwkJCQlyc3NpMiA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJzc2kwID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMDsKKwkJCQlyc3NpMSA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTE7CisJCQkJcnNzaTIgPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyOworCQkJfQorCisJCQlpZihwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDMpCisJCQl7CisJCQkJbGFyZ2VyID0gbWF4KHJzc2kwLCByc3NpMSk7CisKKwkJCQlpZiAobGFyZ2VyID4gKHJzc2kyICsgMjApKQorCQkJCQlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IDI7CisJCQkJZWxzZQorCQkJCQlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IDM7CisJCQl9CisJCQllbHNlIGlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwkJCXsKKwkJCQlpZiAocnNzaTAgPiAocnNzaTEgKyAyMCkpCisJCQkJCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gMTsKKwkJCQllbHNlCisJCQkJCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gMjsKKwkJCX0KKworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQkJQUjMpOworCQkJQkJQUjMgJj0gKH4weDE4KTsKKwkJCWlmKHBBZC0+TWxtZS5SZWFsUnhQYXRoID09IDMpCisJCQl7CisJCQkJQkJQUjMgfD0gKDB4MTApOworCQkJfQorCQkJZWxzZSBpZihwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9PSAyKQorCQkJeworCQkJCUJCUFIzIHw9ICgweDgpOworCQkJfQorCQkJZWxzZSBpZihwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9PSAxKQorCQkJeworCQkJCUJCUFIzIHw9ICgweDApOworCQkJfQorCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQUjMpOworCQl9CisJfQorCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK30KKworCisKK1ZPSUQgQVBTRFBlcmlvZGljRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCXJldHVybjsKKworCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJUaW1lckNvdW50Kys7CisKKy8vIERyaXZlciBzaG91bGQgbm90IHNlbmQgdHJpZ2dlciBmcmFtZSwgaXQgc2hvdWxkIGJlIHNlbmQgYnkgYXBwbGljYXRpb24gbGF5ZXIKKy8qCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSAmJiBwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZQorCQkmJiAocEFkLT5Db21tb25DZmcuYk5lZWRTZW5kVHJpZ2dlckZyYW1lIHx8CisJCSgoKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJUaW1lckNvdW50JTIwKSA9PSAxOSkgJiYgKCFwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFIHx8ICFwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JLIHx8ICFwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJIHx8ICFwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPKSkpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZW5kaW5nIHRyaWdnZXIgZnJhbWUgYW5kIGVudGVyIHNlcnZpY2UgcGVyaW9kIHdoZW4gc3VwcG9ydCBBUFNEXG4iKSk7CisJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwgcEFkLT5Db21tb25DZmcuVHhSYXRlLCBUUlVFKTsKKwkJcEFkLT5Db21tb25DZmcuYk5lZWRTZW5kVHJpZ2dlckZyYW1lID0gRkFMU0U7CisJCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJUaW1lckNvdW50ID0gMDsKKwkJcEFkLT5Db21tb25DZmcuYkluU2VydmljZVBlcmlvZCA9IFRSVUU7CisJfSovCit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0L3Jlc2V0IE1BQyByZWdpc3RlcnMgYWNjb3JkaW5nIHRvIGJQaWdneUJhY2sgcGFyYW1ldGVyCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgIC0gQWRhcHRlciBwb2ludGVyCisgICAgICAgIGJQaWdneUJhY2sgIC0gRW5hYmxlIC8gRGlzYWJsZSBQaWdneS1CYWNrCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFNldFBpZ2d5QmFjaygKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBCT09MRUFOICAgICAgICAgIGJQaWdneUJhY2spCit7CisJVFhfTElOS19DRkdfU1RSVUMgIFR4TGlua0NmZzsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfTElOS19DRkcsICZUeExpbmtDZmcud29yZCk7CisKKwlUeExpbmtDZmcuZmllbGQuVHhDRkFja0VuID0gYlBpZ2d5QmFjazsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9MSU5LX0NGRywgVHhMaW5rQ2ZnLndvcmQpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIGNoZWNrIGlmIHRoaXMgZW50cnkgbmVlZCB0byBzd2l0Y2ggcmF0ZSBhdXRvbWF0aWNhbGx5CisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZAorICAgICAgICBwRW50cnkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFVSRQorICAgICAgICBGQUxTRQorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBSVE1QQ2hlY2tFbnRyeUVuYWJsZUF1dG9SYXRlU3dpdGNoKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOIFBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5KQoreworCUJPT0xFQU4JCXJlc3VsdCA9IFRSVUU7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBvbmx5IGFzc29jaWF0ZWQgU1RBIGNvdW50cworCQlpZiAocEVudHJ5ICYmIChwRW50cnktPlZhbGlkQXNDTEkpICYmIChwRW50cnktPlNzdCA9PSBTU1RfQVNTT0MpKQorCQl7CisJCQlyZXN1bHQgPSBwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaDsKKwkJfQorCQllbHNlCisJCQlyZXN1bHQgPSBGQUxTRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitCT09MRUFOIFJUTVBBdXRvUmF0ZVN3aXRjaENoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkKQoreworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCkKKwkJCXJldHVybiBUUlVFOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlyZXR1cm4gRkFMU0U7Cit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBjaGVjayBpZiB0aGlzIGVudHJ5IG5lZWQgdG8gZml4IHR4IGxlZ2FjeSByYXRlCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZAorICAgICAgICBwRW50cnkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFVSRQorICAgICAgICBGQUxTRQorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVUNIQVIgUlRNUFN0YUZpeGVkVHhNb2RlKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOIFBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5KQoreworCVVDSEFSCXR4X21vZGUgPSBGSVhFRF9UWE1PREVfSFQ7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQl0eF9tb2RlID0gKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGU7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcmV0dXJuIHR4X21vZGU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgT3ZlcndyaXRlIEhUIFR4IE1vZGUgYnkgRml4ZWQgTGVnZW5jeSBUeCBNb2RlLCBpZiBzcGVjaWZpZWQuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZAorICAgICAgICBwRW50cnkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFVSRQorICAgICAgICBGQUxTRQorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nKAorCQlVQ0hBUgkJCQlmaXhlZF90eF9tb2RlLAorCQlQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSkKK3sKKwlIVFRSQU5TTUlUX1NFVFRJTkcgVHJhbnNtaXRTZXR0aW5nOworCisJaWYgKGZpeGVkX3R4X21vZGUgPT0gRklYRURfVFhNT0RFX0hUKQorCQlyZXR1cm47CisKKwlUcmFuc21pdFNldHRpbmcud29yZCA9IDA7CisKKwlUcmFuc21pdFNldHRpbmcuZmllbGQuTU9ERSA9IHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREU7CisJVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUzsKKworCWlmIChmaXhlZF90eF9tb2RlID09IEZJWEVEX1RYTU9ERV9DQ0spCisJeworCQlUcmFuc21pdFNldHRpbmcuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkvLyBDQ0sgbW9kZSBhbGxvdyBNQ1MgMH4zCisJCWlmIChUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID4gTUNTXzMpCisJCQlUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzM7CisJfQorCWVsc2UKKwl7CisJCVRyYW5zbWl0U2V0dGluZy5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkvLyBPRkRNIG1vZGUgYWxsb3cgTUNTIDB+NworCQlpZiAoVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA+IE1DU183KQorCQkJVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU183OworCX0KKworCWlmIChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID49IFRyYW5zbWl0U2V0dGluZy5maWVsZC5NT0RFKQorCXsKKwkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IFRyYW5zbWl0U2V0dGluZy53b3JkOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nIDogd2NpZC0lZCwgTU9ERT0lcywgTUNTPSVkIFxuIiwKKwkJCQlwRW50cnktPkFpZCwgR2V0UGh5TW9kZShwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFKSwgcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTKSk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWR5bmFtaWMgdHVuZSBCQlAgUjY2IHRvIGZpbmQgYSBiYWxhbmNlIGJldHdlZW4gc2Vuc2liaWxpdHkgYW5kCisJCW5vaXNlIGlzb2xhdGlvbgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNTdGFCYnBUdW5pbmcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUNIQVIJT3JpZ1I2NlZhbHVlID0gMCwgUjY2Oy8vLCBSNjZVcHBlckJvdW5kID0gMHgzMCwgUjY2TG93ZXJCb3VuZCA9IDB4MzA7CisJQ0hBUglSc3NpOworCisJLy8gMjg2MEMgZGlkIG5vdCBzdXBwb3J0IEZhc2UgQ0NBLCB0aGVyZWZvcmUgY2FuJ3QgdHVuZQorCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJcmV0dXJuOworCisJLy8KKwkvLyB3b3JrIGFzIGEgU1RBCisJLy8KKwlpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpICAvLyBubyBSNjYgdHVuaW5nIHdoZW4gU0NBTk5JTkcKKwkJcmV0dXJuOworCisJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQorCQkmJiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpCisJCQkpCisJCSYmICEoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwkJKQorCXsKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgJk9yaWdSNjZWYWx1ZSk7CisJCVI2NiA9IE9yaWdSNjZWYWx1ZTsKKworCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+IDEpCisJCQlSc3NpID0gKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAgKyBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxKSA+PiAxOworCQllbHNlCisJCQlSc3NpID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMDsKKworCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQl7CS8vQkcgYmFuZAorI2lmZGVmIFJUMzB4eAorCQkJLy8gUlQzMDcwIGlzIGEgbm8gTE5BIHNvbHV0aW9uLCBpdCBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgY29udHJvbCByZWdhcmRpbmcgdG8gQUdDIGdhaW4gY29udHJvbAorCQkJLy8gT3RoZXJ3aXNlLCBpdCB3aWxsIGhhdmUgc29tZSB0aHJvdWdocHV0IHNpZGUgZWZmZWN0IHdoZW4gbG93IFJTU0kKKwkJCWlmIChJU19SVDMweHgocEFkKSkKKwkJCXsKKwkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpCisJCQkJeworCQkJCQlSNjYgPSAweDFDICsgMipHRVRfTE5BX0dBSU4ocEFkKSArIDB4MjA7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSNjYgPSAweDFDICsgMipHRVRfTE5BX0dBSU4ocEFkKTsKKwkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpCisJCQkJCXsKKwkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJeworCQkJCWlmIChSc3NpID4gUlNTSV9GT1JfTUlEX0xPV19TRU5TSUJJTElUWSkKKwkJCQl7CisJCQkJCVI2NiA9ICgweDJFICsgR0VUX0xOQV9HQUlOKHBBZCkpICsgMHgxMDsKKwkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpCisJCQkJCXsKKwkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVI2NiA9IDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKTsKKwkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpCisJCQkJCXsKKwkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0KKwkJZWxzZQorCQl7CS8vQSBiYW5kCisJCQlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzIwKQorCQkJeworCQkJCWlmIChSc3NpID4gUlNTSV9GT1JfTUlEX0xPV19TRU5TSUJJTElUWSkKKwkJCQl7CisJCQkJCVI2NiA9IDB4MzIgKyAoR0VUX0xOQV9HQUlOKHBBZCkqNSkvMyArIDB4MTA7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSNjYgPSAweDMyICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzM7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpCisJCQkJeworCQkJCQlSNjYgPSAweDNBICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzMgKyAweDEwOworCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikKKwkJCQkJeworCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUjY2ID0gMHgzQSArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zOworCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikKKwkJCQkJeworCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCisJfQorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitWT0lEIFJUTVBTZXRBR0NJbml0VmFsdWUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUNIQVIJCQlCYW5kV2lkdGgpCit7CisJVUNIQVIJUjY2ID0gMHgzMDsKKworCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpCisJewkvLyBCRyBiYW5kCisJCVI2NiA9IDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJfQorCWVsc2UKKwl7CS8vQSBiYW5kCisJCWlmIChCYW5kV2lkdGggPT0gQldfMjApCisJCXsKKwkJCVI2NiA9IChVQ0hBUikoMHgzMiArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWVsc2UKKwkJeworCQkJUjY2ID0gKFVDSEFSKSgweDNBICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzMpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl9CisKK30KKworVk9JRCBBc2ljVHVybk9mZlJGQ2xrKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVDSEFSCQlDaGFubmVsKQoreworCS8vIFJGIFIyIGJpdCAxOCA9IDAKKwlVSU5UMzIJCQlSMSA9IDAsIFIyID0gMCwgUjMgPSAwOworCVVDSEFSCQkJaW5kZXg7CisJUlRNUF9SRl9SRUdTCSpSRlJlZ1RhYmxlOworCisjaWZkZWYgUlQzMHh4CisJLy8gVGhlIFJGIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGRpZmZlcmVuY2UgYmV0d2VlbiAzeHh4IGFuZCAyeHh4CisJaWYgKElTX1JUMzA5MChwQWQpKQorCXsKKwkJUlQzMHh4TG9hZFJGU2xlZXBNb2RlU2V0dXAocEFkKTsgIC8vIGFkZCBieSBqb2hubGksICBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgbG9hZCBSRiBzbGVlcC1tb2RlIHNldHVwCisJfQorCWVsc2UKKwl7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJUkZSZWdUYWJsZSA9IFJGMjg1MFJlZ1RhYmxlOworCisJc3dpdGNoIChwQWQtPlJmSWNUeXBlKQorCXsKKwkJY2FzZSBSRklDXzI4MjA6CisJCWNhc2UgUkZJQ18yODUwOgorCQljYXNlIFJGSUNfMjcyMDoKKwkJY2FzZSBSRklDXzI3NTA6CisKKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8yODUwX0NITkw7IGluZGV4KyspCisJCQl7CisJCQkJaWYgKENoYW5uZWwgPT0gUkZSZWdUYWJsZVtpbmRleF0uQ2hhbm5lbCkKKwkJCQl7CisJCQkJCVIxID0gUkZSZWdUYWJsZVtpbmRleF0uUjEgJiAweGZmZmZkZmZmOworCQkJCQlSMiA9IFJGUmVnVGFibGVbaW5kZXhdLlIyICYgMHhmZmZiZmZmZjsKKwkJCQkJUjMgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMyAmIDB4ZmZmM2ZmZmY7CisKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgUjEpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMik7CisKKwkJCQkJLy8gUHJvZ3JhbSBSMWIxMyB0byAxLCBSMy9iMTgsMTkgdG8gMCwgUjJiMTggdG8gMC4KKwkJCQkJLy8gU2V0IFJGIFIyIGJpdDE4PTAsIFIzIGJpdFsxODoxOV09MAorCQkJCQkvL2lmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gRkFMU0UpCisJCQkJCWlmICgxKQorCQkJCQl7CisJCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMyk7CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNUdXJuT2ZmUkZDbGsjJWQoUkY9JWQsICkgLCBSMj0weCUwOHgsICBSMyA9IDB4JTA4eCBcbiIsCisJCQkJCQkJQ2hhbm5lbCwgcEFkLT5SZkljVHlwZSwgUjIsIFIzKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNpY1R1cm5PZmZSRkNsayMlZChSRj0lZCwgKSAsIFIyPTB4JTA4eCBcbiIsCisJCQkJCQkJQ2hhbm5lbCwgcEFkLT5SZkljVHlwZSwgUjIpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKyNpZmRlZiBSVDMweHgKKwl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKK30KKworCitWT0lEIEFzaWNUdXJuT25SRkNsaygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVQ0hBUgkJCUNoYW5uZWwpCit7CisJLy8gUkYgUjIgYml0IDE4ID0gMAorCVVJTlQzMgkJCVIxID0gMCwgUjIgPSAwLCBSMyA9IDA7CisJVUNIQVIJCQlpbmRleDsKKwlSVE1QX1JGX1JFR1MJKlJGUmVnVGFibGU7CisKKyNpZmRlZiBSVDMweHgKKwkvLyBUaGUgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIDN4eHggYW5kIDJ4eHgKKwlpZiAoSVNfUlQzMDkwKHBBZCkpCisJeworCX0KKwllbHNlCisJeworI2VuZGlmIC8vIFJUMzB4eCAvLworCVJGUmVnVGFibGUgPSBSRjI4NTBSZWdUYWJsZTsKKworCXN3aXRjaCAocEFkLT5SZkljVHlwZSkKKwl7CisJCWNhc2UgUkZJQ18yODIwOgorCQljYXNlIFJGSUNfMjg1MDoKKwkJY2FzZSBSRklDXzI3MjA6CisJCWNhc2UgUkZJQ18yNzUwOgorCisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfMjg1MF9DSE5MOyBpbmRleCsrKQorCQkJeworCQkJCWlmIChDaGFubmVsID09IFJGUmVnVGFibGVbaW5kZXhdLkNoYW5uZWwpCisJCQkJeworCQkJCQlSMyA9IHBBZC0+TGF0Y2hSZlJlZ3MuUjM7CisJCQkJCVIzICY9IDB4ZmZmM2ZmZmY7CisJCQkJCVIzIHw9IDB4MDAwODAwMDA7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIFIzKTsKKworCQkJCQlSMSA9IFJGUmVnVGFibGVbaW5kZXhdLlIxOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMSk7CisKKwkJCQkJUjIgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMjsKKwkJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJCQkJeworCQkJCQkJUjIgfD0gMHg0MDAwOwkvLyBJZiBUWHBhdGggaXMgMSwgYml0IDE0ID0gMTsKKwkJCQkJfQorCisJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4NDA7CS8vIHdyaXRlIDEgdG8gb2ZmIFJ4cGF0aC4KKwkJCQkJfQorCQkJCQllbHNlIGlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4MjAwNDA7CS8vIHdyaXRlIDEgdG8gb2ZmIFJ4UGF0aAorCQkJCQl9CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIFIyKTsKKworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisjaWZkZWYgUlQzMHh4CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL25ldGlmX2Jsb2NrLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9uZXRpZl9ibG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzNjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9uZXRpZl9ibG9jay5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisjaW5jbHVkZSAibmV0aWZfYmxvY2suaCIKKworc3RhdGljIE5FVElGX0VOVFJZIGZyZWVOZXRJZkVudHJ5UG9vbFtGUkVFX05FVElGX1BPT0xfU0laRV07CitzdGF0aWMgTElTVF9IRUFERVIgZnJlZU5ldElmRW50cnlMaXN0OworCit2b2lkIGluaXRibG9ja1F1ZXVlVGFiKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCWludCBpOworCisJaW5pdExpc3QoJmZyZWVOZXRJZkVudHJ5TGlzdCk7CisJZm9yIChpID0gMDsgaSA8IEZSRUVfTkVUSUZfUE9PTF9TSVpFOyBpKyspCisJCWluc2VydFRhaWxMaXN0KCZmcmVlTmV0SWZFbnRyeUxpc3QsIChQTElTVF9FTlRSWSkmZnJlZU5ldElmRW50cnlQb29sW2ldKTsKKworCWZvciAoaT0wOyBpIDwgTlVNX09GX1RYX1JJTkc7IGkrKykKKwkJaW5pdExpc3QoJnBBZC0+YmxvY2tRdWV1ZVRhYltpXS5OZXRJZkxpc3QpOworCisJcmV0dXJuOworfQorCitCT09MRUFOIGJsb2NrTmV0SWYoCisJSU4gUEJMT0NLX1FVRVVFX0VOVFJZIHBCbG9ja1F1ZXVlRW50cnksCisJSU4gUE5FVF9ERVYgcE5ldERldikKK3sKKwlQTkVUSUZfRU5UUlkgcE5ldElmRW50cnkgPSBOVUxMOworCisJaWYgKChwTmV0SWZFbnRyeSA9IChQTkVUSUZfRU5UUlkpcmVtb3ZlSGVhZExpc3QoJmZyZWVOZXRJZkVudHJ5TGlzdCkpICE9IE5VTEwpCisJeworCQluZXRpZl9zdG9wX3F1ZXVlKHBOZXREZXYpOworCQlwTmV0SWZFbnRyeS0+cE5ldERldiA9IHBOZXREZXY7CisJCWluc2VydFRhaWxMaXN0KCZwQmxvY2tRdWV1ZUVudHJ5LT5OZXRJZkxpc3QsIChQTElTVF9FTlRSWSlwTmV0SWZFbnRyeSk7CisKKwkJcEJsb2NrUXVldWVFbnRyeS0+U3dUeFF1ZXVlQmxvY2tGbGFnID0gVFJVRTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgibmV0aWZfc3RvcF9xdWV1ZSglcylcbiIsIHBOZXREZXYtPm5hbWUpKTsKKwl9CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKworVk9JRCByZWxlYXNlTmV0SWYoCisJSU4gUEJMT0NLX1FVRVVFX0VOVFJZIHBCbG9ja1F1ZXVlRW50cnkpCit7CisJUE5FVElGX0VOVFJZIHBOZXRJZkVudHJ5ID0gTlVMTDsKKwlQTElTVF9IRUFERVIgcE5ldElmTGlzdCA9ICZwQmxvY2tRdWV1ZUVudHJ5LT5OZXRJZkxpc3Q7CisKKwl3aGlsZSgocE5ldElmRW50cnkgPSAoUE5FVElGX0VOVFJZKXJlbW92ZUhlYWRMaXN0KHBOZXRJZkxpc3QpKSAhPSAgTlVMTCkKKwl7CisJCVBORVRfREVWIHBOZXREZXYgPSBwTmV0SWZFbnRyeS0+cE5ldERldjsKKwkJbmV0aWZfd2FrZV9xdWV1ZShwTmV0RGV2KTsKKwkJaW5zZXJ0VGFpbExpc3QoJmZyZWVOZXRJZkVudHJ5TGlzdCwgKFBMSVNUX0VOVFJZKXBOZXRJZkVudHJ5KTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJuZXRpZl93YWtlX3F1ZXVlKCVzKVxuIiwgcE5ldERldi0+bmFtZSkpOworCX0KKwlwQmxvY2tRdWV1ZUVudHJ5LT5Td1R4UXVldWVCbG9ja0ZsYWcgPSBGQUxTRTsKKwlyZXR1cm47Cit9CisKKworVk9JRCBTdG9wTmV0SWZRdWV1ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBRdWVJZHgsCisJSU4gUE5ESVNfUEFDS0VUIHBQYWNrZXQpCit7CisJUE5FVF9ERVYgTmV0RGV2ID0gTlVMTDsKKwlVQ0hBUiBJZklkeCA9IDA7CisJQk9PTEVBTiB2YWxpZCA9IEZBTFNFOworCisjaWZkZWYgV0RTX1NVUFBPUlQKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX05FVF9ERVZJQ0UocFBhY2tldCkgPj0gTUlOX05FVF9ERVZJQ0VfRk9SX1dEUykKKwl7CisJCUlmSWR4ID0gKFJUTVBfR0VUX1BBQ0tFVF9ORVRfREVWSUNFKHBQYWNrZXQpIC0gTUlOX05FVF9ERVZJQ0VfRk9SX1dEUykgJSBNQVhfV0RTX0VOVFJZOworCQlOZXREZXYgPSBwQWQtPldkc1RhYi5XZHNFbnRyeVtJZklkeF0uZGV2OworCX0KKwllbHNlCisjZW5kaWYgLy8gV0RTX1NVUFBPUlQgLy8KKwl7CisjaWZkZWYgTUJTU19TVVBQT1JUCisJCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfQVApCisJCXsKKwkJCUlmSWR4ID0gKFJUTVBfR0VUX1BBQ0tFVF9ORVRfREVWSUNFKHBQYWNrZXQpIC0gTUlOX05FVF9ERVZJQ0VfRk9SX01CU1NJRCkgJSBNQVhfTUJTU0lEX05VTTsKKwkJCU5ldERldiA9IHBBZC0+QXBDZmcuTUJTU0lEW0lmSWR4XS5NU1NJRERldjsKKwkJfQorCQllbHNlCisJCXsKKwkJCUlmSWR4ID0gTUFJTl9NQlNTSUQ7CisJCQlOZXREZXYgPSBwQWQtPm5ldF9kZXY7CisJCX0KKyNlbHNlCisJCUlmSWR4ID0gTUFJTl9NQlNTSUQ7CisJCU5ldERldiA9IHBBZC0+bmV0X2RldjsKKyNlbmRpZgorCX0KKworCS8vIFdNTSBzdXBwb3J0IDQgc29mdHdhcmUgcXVldWVzLgorCS8vIE9uZSBzb2Z0d2FyZSBxdWV1ZSBmdWxsIGRvZXNuJ3QgbWVhbiBkZXZpY2UgaGF2ZSBubyBjYXBiaWxpdHkgdG8gdHJhbnNtaXQgcGFja2V0LgorCS8vIFNvIGRpc2FibGUgYmxvY2sgTmV0LUlmIHF1ZXVlIGZ1bmN0aW9uIHdoaWxlIFdNTSBlbmFibGUuCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJdmFsaWQgPSAocEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPT0gVFJVRSkgPyBGQUxTRSA6IFRSVUU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAodmFsaWQpCisJCWJsb2NrTmV0SWYoJnBBZC0+YmxvY2tRdWV1ZVRhYltRdWVJZHhdLCBOZXREZXYpOworCXJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTAzZjZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF9pbml0LmMKQEAgLTAsMCArMSw0MTk3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfaW5pdC5jCisKKwlBYnN0cmFjdDoKKwlNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUGF1bCBMaW4gICAgMjAwMi0wOC0wMSAgICBjcmVhdGVkCisgICAgSm9obiBDaGFuZyAgMjAwNC0wOC0yMCAgICBSVDI1NjEvMjY2MSB1c2Ugc2NhdHRlci1nYXRoZXIgc2NoZW1lCisgICAgSmFuIExlZSAgMjAwNi0wOS0xNSAgICBSVDI4NjAuIENoYW5nZSBmb3IgODAyLjExbiAsIEVFUFJPTSwgTGVkLCBCQSwgSFQuCisqLworI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgorI2luY2x1ZGUgCSIuLi9maXJtd2FyZS5oIgorCisvLyNkZWZpbmUgQklOX0lOX0ZJTEUgLyogdXNlICouYmluIGZpcm13YXJlICovCisKK1VDSEFSICAgIEJJVDhbXSA9IHsweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKK1VMT05HICAgIEJJVDMyW10gPSB7MHgwMDAwMDAwMSwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwOCwKKwkJCQkJMHgwMDAwMDAxMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA4MCwKKwkJCQkJMHgwMDAwMDEwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDQwMCwgMHgwMDAwMDgwMCwKKwkJCQkJMHgwMDAwMTAwMCwgMHgwMDAwMjAwMCwgMHgwMDAwNDAwMCwgMHgwMDAwODAwMCwKKwkJCQkJMHgwMDAxMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDA0MDAwMCwgMHgwMDA4MDAwMCwKKwkJCQkJMHgwMDEwMDAwMCwgMHgwMDIwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDgwMDAwMCwKKwkJCQkJMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwODAwMDAwMCwKKwkJCQkJMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDAwMDAwMH07CisKK2NoYXIqICAgQ2lwaGVyTmFtZVtdID0geyJub25lIiwid2VwNjQiLCJ3ZXAxMjgiLCJUS0lQIiwiQUVTIiwiQ0tJUDY0IiwiQ0tJUDEyOCJ9OworCitjb25zdCB1bnNpZ25lZCBzaG9ydCBjY2l0dF8xNlRhYmxlW10gPSB7CisJMHgwMDAwLCAweDEwMjEsIDB4MjA0MiwgMHgzMDYzLCAweDQwODQsIDB4NTBBNSwgMHg2MEM2LCAweDcwRTcsCisJMHg4MTA4LCAweDkxMjksIDB4QTE0QSwgMHhCMTZCLCAweEMxOEMsIDB4RDFBRCwgMHhFMUNFLCAweEYxRUYsCisJMHgxMjMxLCAweDAyMTAsIDB4MzI3MywgMHgyMjUyLCAweDUyQjUsIDB4NDI5NCwgMHg3MkY3LCAweDYyRDYsCisJMHg5MzM5LCAweDgzMTgsIDB4QjM3QiwgMHhBMzVBLCAweEQzQkQsIDB4QzM5QywgMHhGM0ZGLCAweEUzREUsCisJMHgyNDYyLCAweDM0NDMsIDB4MDQyMCwgMHgxNDAxLCAweDY0RTYsIDB4NzRDNywgMHg0NEE0LCAweDU0ODUsCisJMHhBNTZBLCAweEI1NEIsIDB4ODUyOCwgMHg5NTA5LCAweEU1RUUsIDB4RjVDRiwgMHhDNUFDLCAweEQ1OEQsCisJMHgzNjUzLCAweDI2NzIsIDB4MTYxMSwgMHgwNjMwLCAweDc2RDcsIDB4NjZGNiwgMHg1Njk1LCAweDQ2QjQsCisJMHhCNzVCLCAweEE3N0EsIDB4OTcxOSwgMHg4NzM4LCAweEY3REYsIDB4RTdGRSwgMHhENzlELCAweEM3QkMsCisJMHg0OEM0LCAweDU4RTUsIDB4Njg4NiwgMHg3OEE3LCAweDA4NDAsIDB4MTg2MSwgMHgyODAyLCAweDM4MjMsCisJMHhDOUNDLCAweEQ5RUQsIDB4RTk4RSwgMHhGOUFGLCAweDg5NDgsIDB4OTk2OSwgMHhBOTBBLCAweEI5MkIsCisJMHg1QUY1LCAweDRBRDQsIDB4N0FCNywgMHg2QTk2LCAweDFBNzEsIDB4MEE1MCwgMHgzQTMzLCAweDJBMTIsCisJMHhEQkZELCAweENCREMsIDB4RkJCRiwgMHhFQjlFLCAweDlCNzksIDB4OEI1OCwgMHhCQjNCLCAweEFCMUEsCisJMHg2Q0E2LCAweDdDODcsIDB4NENFNCwgMHg1Q0M1LCAweDJDMjIsIDB4M0MwMywgMHgwQzYwLCAweDFDNDEsCisJMHhFREFFLCAweEZEOEYsIDB4Q0RFQywgMHhERENELCAweEFEMkEsIDB4QkQwQiwgMHg4RDY4LCAweDlENDksCisJMHg3RTk3LCAweDZFQjYsIDB4NUVENSwgMHg0RUY0LCAweDNFMTMsIDB4MkUzMiwgMHgxRTUxLCAweDBFNzAsCisJMHhGRjlGLCAweEVGQkUsIDB4REZERCwgMHhDRkZDLCAweEJGMUIsIDB4QUYzQSwgMHg5RjU5LCAweDhGNzgsCisJMHg5MTg4LCAweDgxQTksIDB4QjFDQSwgMHhBMUVCLCAweEQxMEMsIDB4QzEyRCwgMHhGMTRFLCAweEUxNkYsCisJMHgxMDgwLCAweDAwQTEsIDB4MzBDMiwgMHgyMEUzLCAweDUwMDQsIDB4NDAyNSwgMHg3MDQ2LCAweDYwNjcsCisJMHg4M0I5LCAweDkzOTgsIDB4QTNGQiwgMHhCM0RBLCAweEMzM0QsIDB4RDMxQywgMHhFMzdGLCAweEYzNUUsCisJMHgwMkIxLCAweDEyOTAsIDB4MjJGMywgMHgzMkQyLCAweDQyMzUsIDB4NTIxNCwgMHg2Mjc3LCAweDcyNTYsCisJMHhCNUVBLCAweEE1Q0IsIDB4OTVBOCwgMHg4NTg5LCAweEY1NkUsIDB4RTU0RiwgMHhENTJDLCAweEM1MEQsCisJMHgzNEUyLCAweDI0QzMsIDB4MTRBMCwgMHgwNDgxLCAweDc0NjYsIDB4NjQ0NywgMHg1NDI0LCAweDQ0MDUsCisJMHhBN0RCLCAweEI3RkEsIDB4ODc5OSwgMHg5N0I4LCAweEU3NUYsIDB4Rjc3RSwgMHhDNzFELCAweEQ3M0MsCisJMHgyNkQzLCAweDM2RjIsIDB4MDY5MSwgMHgxNkIwLCAweDY2NTcsIDB4NzY3NiwgMHg0NjE1LCAweDU2MzQsCisJMHhEOTRDLCAweEM5NkQsIDB4RjkwRSwgMHhFOTJGLCAweDk5QzgsIDB4ODlFOSwgMHhCOThBLCAweEE5QUIsCisJMHg1ODQ0LCAweDQ4NjUsIDB4NzgwNiwgMHg2ODI3LCAweDE4QzAsIDB4MDhFMSwgMHgzODgyLCAweDI4QTMsCisJMHhDQjdELCAweERCNUMsIDB4RUIzRiwgMHhGQjFFLCAweDhCRjksIDB4OUJEOCwgMHhBQkJCLCAweEJCOUEsCisJMHg0QTc1LCAweDVBNTQsIDB4NkEzNywgMHg3QTE2LCAweDBBRjEsIDB4MUFEMCwgMHgyQUIzLCAweDNBOTIsCisJMHhGRDJFLCAweEVEMEYsIDB4REQ2QywgMHhDRDRELCAweEJEQUEsIDB4QUQ4QiwgMHg5REU4LCAweDhEQzksCisJMHg3QzI2LCAweDZDMDcsIDB4NUM2NCwgMHg0QzQ1LCAweDNDQTIsIDB4MkM4MywgMHgxQ0UwLCAweDBDQzEsCisJMHhFRjFGLCAweEZGM0UsIDB4Q0Y1RCwgMHhERjdDLCAweEFGOUIsIDB4QkZCQSwgMHg4RkQ5LCAweDlGRjgsCisJMHg2RTE3LCAweDdFMzYsIDB4NEU1NSwgMHg1RTc0LCAweDJFOTMsIDB4M0VCMiwgMHgwRUQxLCAweDFFRjAKK307CisjZGVmaW5lIEJ5dGVDUkMxNih2LCBjcmMpIFwKKwkodW5zaWduZWQgc2hvcnQpKChjcmMgPDwgOCkgXiAgY2NpdHRfMTZUYWJsZVsoKGNyYyA+PiA4KSBeICh2KSkgJiAyNTVdKQorCit1bnNpZ25lZCBjaGFyIEJpdFJldmVyc2UodW5zaWduZWQgY2hhciB4KQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgVGVtcD0wOworCWZvcihpPTA7IDsgaSsrKQorCXsKKwkJaWYoeCAmIDB4ODApCVRlbXAgfD0gMHg4MDsKKwkJaWYoaT09NykJCWJyZWFrOworCQl4CTw8PSAxOworCQlUZW1wID4+PSAxOworCX0KKwlyZXR1cm4gVGVtcDsKK30KKworLy8KKy8vIEJCUCByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXQKKy8vCitSRUdfUEFJUiAgIEJCUFJlZ1RhYmxlW10gPSB7CisJe0JCUF9SNjUsCQkweDJDfSwJCS8vIGZpeCByc3NpIGlzc3VlCisJe0JCUF9SNjYsCQkweDM4fSwJLy8gQWxzbyBzZXQgdGhpcyBkZWZhdWx0IHZhbHVlIHRvIHBBZC0+QmJwVHVuaW5nLlI2NkN1cnJlbnRWYWx1ZSBhdCBpbml0aWFsCisJe0JCUF9SNjksCQkweDEyfSwKKwl7QkJQX1I3MCwJCTB4YX0sCS8vIEJCUF9SNzAgd2lsbCBjaGFuZ2UgdG8gMHg4IGluIEFwU3RhcnRVcCBhbmQgTGlua1VwIGZvciBydDI4NjBDLCBvdGhlcndpc2UgdmFsdWUgaXMgMHhhCisJe0JCUF9SNzMsCQkweDEwfSwKKwl7QkJQX1I4MSwJCTB4Mzd9LAorCXtCQlBfUjgyLAkJMHg2Mn0sCisJe0JCUF9SODMsCQkweDZBfSwKKwl7QkJQX1I4NCwJCTB4OTl9LAkvLyAweDE5IGlzIGZvciBydDI4NjBFIGFuZCBhZnRlci4gVGhpcyBpcyBmb3IgZXh0ZW5zaW9uIGNoYW5uZWwgb3ZlcmxhcHBpbmcgSU9ULiAweDk5IGlzIGZvciBydDI4NjBEIGFuZCBiZWZvcmUKKwl7QkJQX1I4NiwJCTB4MDB9LAkvLyBtaWRkbGUgcmFuZ2UgaXNzdWUsIFJvcnkgQDIwMDgtMDEtMjgKKwl7QkJQX1I5MSwJCTB4MDR9LAkvLyBtaWRkbGUgcmFuZ2UgaXNzdWUsIFJvcnkgQDIwMDgtMDEtMjgKKwl7QkJQX1I5MiwJCTB4MDB9LAkvLyBtaWRkbGUgcmFuZ2UgaXNzdWUsIFJvcnkgQDIwMDgtMDEtMjgKKwl7QkJQX1IxMDMsICAJMHgwMH0sIAkvLyBuZWFyIHJhbmdlIGhpZ2gtcG93ZXIgaXNzdWUsIHJlcXVlc3RlZCBmcm9tIEdhcnkgQDIwMDgtMDUyOAorCXtCQlBfUjEwNSwJCTB4MDV9LAkvLyAweDA1IGlzIGZvciBydDI4NjBFIHRvIHR1cm4gb24gRkVRIGNvbnRyb2wuIEl0IGlzIHNhZmUgZm9yIHJ0Mjg2MEQgYW5kIGJlZm9yZSwgYmVjYXVzZSBCaXQgNzoyIGFyZSByZXNlcnZlZCBpbiBydDI4NjBEIGFuZCBiZWZvcmUuCit9OworI2RlZmluZQlOVU1fQkJQX1JFR19QQVJNUwkoc2l6ZW9mKEJCUFJlZ1RhYmxlKSAvIHNpemVvZihSRUdfUEFJUikpCisKKy8vCisvLyBSRiByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXQKKy8vCisjaWZkZWYgUlQzMHh4CitSRUdfUEFJUiAgIFJUMzB4eF9SRlJlZ1RhYmxlW10gPSB7CisgICAgICAgIHtSRl9SMDQsICAgICAgICAgIDB4NDB9LAorICAgICAgICB7UkZfUjA1LCAgICAgICAgICAweDAzfSwKKyAgICAgICAge1JGX1IwNiwgICAgICAgICAgMHgwMn0sCisgICAgICAgIHtSRl9SMDcsICAgICAgICAgIDB4NzB9LAorICAgICAgICB7UkZfUjA5LCAgICAgICAgICAweDBGfSwKKyAgICAgICAge1JGX1IxMCwgICAgICAgICAgMHg0MX0sCisgICAgICAgIHtSRl9SMTEsICAgICAgICAgIDB4MjF9LAorICAgICAgICB7UkZfUjEyLCAgICAgICAgICAweDdCfSwKKyAgICAgICAge1JGX1IxNCwgICAgICAgICAgMHg5MH0sCisgICAgICAgIHtSRl9SMTUsICAgICAgICAgIDB4NTh9LAorICAgICAgICB7UkZfUjE2LCAgICAgICAgICAweEIzfSwKKyAgICAgICAge1JGX1IxNywgICAgICAgICAgMHg5Mn0sCisgICAgICAgIHtSRl9SMTgsICAgICAgICAgIDB4MkN9LAorICAgICAgICB7UkZfUjE5LCAgICAgICAgICAweDAyfSwKKyAgICAgICAge1JGX1IyMCwgICAgICAgICAgMHhCQX0sCisgICAgICAgIHtSRl9SMjEsICAgICAgICAgIDB4REJ9LAorICAgICAgICB7UkZfUjI0LCAgICAgICAgICAweDE2fSwKKyAgICAgICAge1JGX1IyNSwgICAgICAgICAgMHgwMX0sCisgICAgICAgIHtSRl9SMjksICAgICAgICAgIDB4MUZ9LAorfTsKKyNkZWZpbmUJTlVNX1JGX1JFR19QQVJNUwkoc2l6ZW9mKFJUMzB4eF9SRlJlZ1RhYmxlKSAvIHNpemVvZihSRUdfUEFJUikpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKy8vCisvLyBBU0lDIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIHNldHMKKy8vCisKK1JUTVBfUkVHX1BBSVIJTUFDUmVnVGFibGVbXSA9CXsKKyNpZiBkZWZpbmVkKEhXX0JFQUNPTl9PRkZTRVQpICYmIChIV19CRUFDT05fT0ZGU0VUID09IDB4MjAwKQorCXtCQ05fT0ZGU0VUMCwJCQkweGY4ZjBlOGUwfSwgLyogMHgzODAwKGUwKSwgMHgzQTAwKGU4KSwgMHgzQzAwKGYwKSwgMHgzRTAwKGY4KSwgNTEyQiBmb3IgZWFjaCBiZWFjb24gKi8KKwl7QkNOX09GRlNFVDEsCQkJMHg2Zjc3ZDBjOH0sIC8qIDB4MzIwMChjOCksIDB4MzQwMChkMCksIDB4MURDMCg3NyksIDB4MUJDMCg2ZiksIDUxMkIgZm9yIGVhY2ggYmVhY29uICovCisjZWxpZiBkZWZpbmVkKEhXX0JFQUNPTl9PRkZTRVQpICYmIChIV19CRUFDT05fT0ZGU0VUID09IDB4MTAwKQorCXtCQ05fT0ZGU0VUMCwJCQkweGVjZThlNGUwfSwgLyogMHgzODAwLCAweDNBMDAsIDB4M0MwMCwgMHgzRTAwLCA1MTJCIGZvciBlYWNoIGJlYWNvbiAqLworCXtCQ05fT0ZGU0VUMSwJCQkweGZjZjhmNGYwfSwgLyogMHgzODAwLCAweDNBMDAsIDB4M0MwMCwgMHgzRTAwLCA1MTJCIGZvciBlYWNoIGJlYWNvbiAqLworI2Vsc2UKKyAgICAjZXJyb3IgWW91IG11c3QgcmUtY2FsY3VsYXRlIG5ldyB2YWx1ZSBmb3IgQkNOX09GRlNFVDAgJiBCQ05fT0ZGU0VUMSBpbiBNQUNSZWdUYWJsZVtdISEhCisjZW5kaWYgLy8gSFdfQkVBQ09OX09GRlNFVCAvLworCisJe0xFR0FDWV9CQVNJQ19SQVRFLAkJMHgwMDAwMDEzZn0sIC8vICBCYXNpYyByYXRlIHNldCBiaXRtYXAKKwl7SFRfQkFTSUNfUkFURSwJCTB4MDAwMDgwMDN9LCAvLyBCYXNpYyBIVCByYXRlIHNldCAsIDIwTSwgTUNTPTMsIE1NLiBGb3JtYXQgaXMgdGhlIHNhbWUgYXMgaW4gVFhXSS4KKwl7TUFDX1NZU19DVFJMLAkJMHgwMH0sIC8vIDB4MTAwNCwgLCBkZWZhdWx0IERpc2FibGUgUlgKKwl7UlhfRklMVFJfQ0ZHLAkJMHgxN2Y5N30sIC8vMHgxNDAwICAsIFJYIGZpbHRlciBjb250cm9sLAorCXtCS09GRl9TTE9UX0NGRywJMHgyMDl9LCAvLyBkZWZhdWx0IHNldCBzaG9ydCBzbG90IHRpbWUsIENDX0RFTEFZX1RJTUUgc2hvdWxkIGJlIDIKKwkvL3tUWF9TV19DRkcwLAkJMHg0MGEwNn0sIC8vIEdhcnksMjAwNi0wOC0yMworCXtUWF9TV19DRkcwLAkJMHgwfSwgCQkvLyBHYXJ5LDIwMDgtMDUtMjEgZm9yIENXQyB0ZXN0CisJe1RYX1NXX0NGRzEsCQkweDgwNjA2fSwgLy8gR2FyeSwyMDA2LTA4LTIzCisJe1RYX0xJTktfQ0ZHLAkJMHgxMDIwfSwJCS8vIEdhcnksMjAwNi0wOC0yMworCXtUWF9USU1FT1VUX0NGRywJMHgwMDBhMjA5MH0sCisJe01BWF9MRU5fQ0ZHLAkJTUFYX0FHR1JFR0FUSU9OX1NJWkUgfCAweDAwMDAxMDAwfSwJLy8gMHgzMDE4LCBNQVggZnJhbWUgbGVuZ3RoLiBNYXggUFNEVSA9IDE2a2J5dGVzLgorCXtMRURfQ0ZHLAkJMHg3ZjAzMWU0Nn0sIC8vIEdhcnksIDIwMDYtMDgtMjMKKworLy8jaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvLwl7V01NX0FJRlNOX0NGRywJCTB4MDAwMDIyNzN9LAorLy8Je1dNTV9DV01JTl9DRkcsCQkweDAwMDAyMzQ0fSwKKy8vCXtXTU1fQ1dNQVhfQ0ZHLAkJMHgwMDAwMzRhYX0sCisvLyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisJe1BCRl9NQVhfUENOVCwJCQkweDFGM0Y2RjZGfSwgCS8vaXZlcnNvbiBtb2RpZnkgZm9yIHVzYiBpc3N1ZSwgMjAwOC8wOS8xOQorCQkJCQkJCQkJCQkvLyA2RiArIDZGIDwgdG90YWwgcGFnZSBjb3VudCBGRQorCQkJCQkJCQkJCQkvLyBzbyB0aGF0IFJYIGRvZXNuJ3Qgb2NjdXB5IFRYJ3MgYnVmZmVyIHNwYWNlIHdoZW4gV01NIGNvbmdlc3Rpb24uCisjZWxzZQorCXtQQkZfTUFYX1BDTlQsCQkJMHgxRjNGQkY5Rn0sIAkvLzB4MUYzZjdmOWZ9LAkJLy9KYW4sIDIwMDYvMDQvMjAKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisJLy97VFhfUlRZX0NGRywJCQkweDZiYjgwNDA4fSwJLy8gSmFuLCAyMDA2LzExLzE2CisJe1RYX1JUWV9DRkcsCQkJMHg0N2QwMWYwZn0sCS8vIEphbiwgMjAwNi8xMS8xNiwgU2V0IFR4V0ktPkFDSyA9MCBpbiBQcm9iZSBSc3AgTW9kaWZ5IGZvciAyODYwRSAsMjAwNy0wOC0wMworCXtBVVRPX1JTUF9DRkcsCQkJMHgwMDAwMDAxM30sCS8vIEluaXRpYWwgQXV0b19SZXNwb25kZXIsIGJlY2F1c2UgUUEgd2lsbCB0dXJuIG9mZiBBdXRvLVJlc3BvbmRlcgorCXtDQ0tfUFJPVF9DRkcsCQkJMHgwNTc0MDAwMyAvKjB4MDE3NDAwMDMqL30sCS8vIEluaXRpYWwgQXV0b19SZXNwb25kZXIsIGJlY2F1c2UgUUEgd2lsbCB0dXJuIG9mZiBBdXRvLVJlc3BvbmRlci4gQW5kIFJUUyB0aHJlc2hvbGQgaXMgZW5hYmxlZC4KKwl7T0ZETV9QUk9UX0NGRywJCQkweDA1NzQwMDAzIC8qMHgwMTc0MDAwMyovfSwJLy8gSW5pdGlhbCBBdXRvX1Jlc3BvbmRlciwgYmVjYXVzZSBRQSB3aWxsIHR1cm4gb2ZmIEF1dG8tUmVzcG9uZGVyLiBBbmQgUlRTIHRocmVzaG9sZCBpcyBlbmFibGVkLgorLy9QUyBwYWNrZXRzIHVzZSBUeDFRIChmb3IgSENDQSkgd2hlbiBkZXF1ZXVlIGZyb20gUFMgdW5pY2FzdCBxdWV1ZSAoV2lGaSBXUEEyIE1BOV9EVDEgZm9yIE1hcnZlbGwgQiBTVEEpCisjaWZkZWYgUlQyODcwCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJe1BCRl9DRkcsIAkJCQkweGY0MDAwNn0sIAkJLy8gT25seSBlbmFibGUgUXVldWUgMgorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCXtNTTQwX1BST1RfQ0ZHLAkJCTB4M0Y0NDA4NH0sCQkvLyBJbml0aWFsIEF1dG9fUmVzcG9uZGVyLCBiZWNhdXNlIFFBIHdpbGwgdHVybiBvZmYgQXV0by1SZXNwb25kZXIKKwl7V1BETUFfR0xPX0NGRywJCQkweDAwMDAwMDMwfSwKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwl7R0YyMF9QUk9UX0NGRywJCQkweDAxNzQ0MDA0fSwgICAgLy8gc2V0IDE5OjE4IC0tPiBTaG9ydCBOQVYgZm9yIE1JTU8gUFMKKwl7R0Y0MF9QUk9UX0NGRywJCQkweDAzRjQ0MDg0fSwKKwl7TU0yMF9QUk9UX0NGRywJCQkweDAxNzQ0MDA0fSwKKwl7VFhPUF9DVFJMX0NGRywJCQkweDAwMDA1ODNmLCAvKjB4MDAwMDI0M2YqLyAvKjB4MDAwMDI0YmYqL30sCS8vRXh0ZW5zaW9uIGNoYW5uZWwgYmFja29mZi4KKwl7VFhfUlRTX0NGRywJCQkweDAwMDkyYjIwfSwKKy8vI2lmZGVmIFdJRklfVEVTVAorCXtFWFBfQUNLX1RJTUUsCQkJMHgwMDI0MDBjYX0sCS8vIGRlZmF1bHQgdmFsdWUKKy8vI2Vsc2UKKy8vCXtFWFBfQUNLX1RJTUUsCQkJMHgwMDU0MDBjYX0sCS8vIHN1Z2dlc3RlZCBieSBHcmF5IEAgMjAwNzAzMjMgZm9yIDExbiBpbnRlbC1zdGEgdGhyb3VnaHB1dAorLy8jZW5kaWYgLy8gZW5kIC0gV0lGSV9URVNUIC8vCisJe1RYT1BfSExEUl9FVCwgCQkJMHgwMDAwMDAwMn0sCisKKwkvKiBKZXJyeSBjb21tZW50cyAyMDA4LzAxLzE2OiB3ZSB1c2UgU0lGUyA9IDEwdXMgaW4gQ0NLIGRlZmF1bHRseSwgYnV0IGl0IHNlZW1zIHRoYXQgMTB1cworCQlpcyB0b28gc21hbGwgZm9yIElOVEVMIDIyMDBiZyBjYXJkLCBzbyBpbiBNQlNTIG1vZGUsIHRoZSBkZWx0YSB0aW1lIGJldHdlZW4gYmVhY29uMAorCQlhbmQgYmVhY29uMSBpcyBTSUZTICgxMHVzKSwgc28gaWYgSU5URUwgMjIwMGJnIGNhcmQgY29ubmVjdHMgdG8gQlNTMCwgdGhlIHBpbmcKKwkJd2lsbCBhbHdheXMgbG9zdC4gU28gd2UgY2hhbmdlIHRoZSBTSUZTIG9mIENDSyBmcm9tIDEwdXMgdG8gMTZ1cy4gKi8KKwl7WElGU19USU1FX0NGRywJCQkweDMzYTQxMDEwfSwKKwl7UFdSX1BJTl9DRkcsCQkJMHgwMDAwMDAwM30sCS8vIHBhdGNoIGZvciAyODgwLUUKK307CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorUlRNUF9SRUdfUEFJUglTVEFNQUNSZWdUYWJsZVtdID0JeworCXtXTU1fQUlGU05fQ0ZHLAkJMHgwMDAwMjI3M30sCisJe1dNTV9DV01JTl9DRkcsCTB4MDAwMDIzNDR9LAorCXtXTU1fQ1dNQVhfQ0ZHLAkweDAwMDAzNGFhfSwKK307CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNkZWZpbmUJTlVNX01BQ19SRUdfUEFSTVMJCShzaXplb2YoTUFDUmVnVGFibGUpIC8gc2l6ZW9mKFJUTVBfUkVHX1BBSVIpKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZQlOVU1fU1RBX01BQ19SRUdfUEFSTVMJKHNpemVvZihTVEFNQUNSZWdUYWJsZSkgLyBzaXplb2YoUlRNUF9SRUdfUEFJUikpCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBSVDI4NzAKKy8vCisvLyBSVDI4NzAgRmlybXdhcmUgU3BlYyBvbmx5IHVzZWQgMSBvY3QgZm9yIHZlcnNpb24gZXhwcmVzc2lvbgorLy8KKyNkZWZpbmUgRklSTVdBUkVfTUlOT1JfVkVSU0lPTgk3CisKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworLy8gTmV3IDhrIGJ5dGUgZmlybXdhcmUgc2l6ZSBmb3IgUlQzMDcxL1JUMzA3MgorI2RlZmluZSBGSVJNV0FSRUlNQUdFX01BWF9MRU5HVEgJMHgyMDAwCisjZGVmaW5lIEZJUk1XQVJFSU1BR0VfTEVOR1RICQkoc2l6ZW9mIChGaXJtd2FyZUltYWdlKSAvIHNpemVvZihVQ0hBUikpCisjZGVmaW5lIEZJUk1XQVJFX01BSk9SX1ZFUlNJT04JMAorCisjZGVmaW5lIEZJUk1XQVJFSU1BR0VWMV9MRU5HVEgJMHgxMDAwCisjZGVmaW5lIEZJUk1XQVJFSU1BR0VWMl9MRU5HVEgJMHgxMDAwCisKKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQWxsb2NhdGUgUlRNUF9BREFQVEVSIGRhdGEgYmxvY2sgYW5kIGRvIHNvbWUgaW5pdGlhbGl6YXRpb24KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19TVUNDRVNTCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJUlRNUEFsbG9jQWRhcHRlckJsb2NrKAorCUlOICBQVk9JRAloYW5kbGUsCisJT1VUCVBSVE1QX0FEQVBURVIJKnBwQWRhcHRlcikKK3sKKwlQUlRNUF9BREFQVEVSCXBBZDsKKwlORElTX1NUQVRVUwkJU3RhdHVzOworCUlOVCAJCQlpbmRleDsKKwlVQ0hBUgkJCSpwQmVhY29uQnVmID0gTlVMTDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBSVE1QQWxsb2NBZGFwdGVyQmxvY2tcbiIpKTsKKworCSpwcEFkYXB0ZXIgPSBOVUxMOworCisJZG8KKwl7CisJCS8vIEFsbG9jYXRlIFJUTVBfQURBUFRFUiBtZW1vcnkgYmxvY2sKKwkJcEJlYWNvbkJ1ZiA9IGttYWxsb2MoTUFYX0JFQUNPTl9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7CisJCWlmIChwQmVhY29uQnVmID09IE5VTEwpCisJCXsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCQlEQkdQUklOVF9FUlIoKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IC0gQmVhY29uQnVmIVxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQlTdGF0dXMgPSBBZGFwdGVyQmxvY2tBbGxvY2F0ZU1lbW9yeShoYW5kbGUsIChQVk9JRCAqKSZwQWQpOworCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCURCR1BSSU5UX0VSUigoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgLSBBREFQVEVSXG4iKSk7CisJCQlicmVhazsKKwkJfQorCQlwQWQtPkJlYWNvbkJ1ZiA9IHBCZWFjb25CdWY7CisJCXByaW50aygiXG5cbj09PSBwQWQgPSAlcCwgc2l6ZSA9ICVkID09PVxuXG4iLCBwQWQsIChVSU5UMzIpc2l6ZW9mKFJUTVBfQURBUFRFUikpOworCisKKwkJLy8gSW5pdCBzcGluIGxvY2tzCisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1nbXRSaW5nTG9jayk7CisKKwkJZm9yIChpbmRleCA9MCA7IGluZGV4IDwgTlVNX09GX1RYX1JJTkc7IGluZGV4KyspCisJCXsKKwkJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPlR4U3dRdWV1ZUxvY2tbaW5kZXhdKTsKKwkJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkRlUXVldWVMb2NrW2luZGV4XSk7CisJCQlwQWQtPkRlUXVldWVSdW5uaW5nW2luZGV4XSA9IEZBTFNFOworCQl9CisKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+aXJxX2xvY2spOworCisJfSB3aGlsZSAoRkFMU0UpOworCisJaWYgKChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgJiYgKHBCZWFjb25CdWYpKQorCQlrZnJlZShwQmVhY29uQnVmKTsKKworCSpwcEFkYXB0ZXIgPSBwQWQ7CisKKwlEQkdQUklOVF9TKFN0YXR1cywgKCI8LS0gUlRNUEFsbG9jQWRhcHRlckJsb2NrLCBTdGF0dXM9JXhcbiIsIFN0YXR1cykpOworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSZWFkIGluaXRpYWwgVHggcG93ZXIgcGVyIE1DUyBhbmQgQlcgZnJvbSBFRVBST00KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBSZWFkVHhQd3JQZXJSYXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVMT05HCQlkYXRhLCBBZGF0YSwgR2RhdGE7CisJVVNIT1JUCQlpLCB2YWx1ZSwgdmFsdWUyOworCUlOVAkJCUFwd3JkZWx0YSwgR3B3cmRlbHRhOworCVVDSEFSCQl0MSx0Mix0Myx0NDsKKwlCT09MRUFOCQliVmFsaWQsIGJBcHdyZGVsdGFNaW51cyA9IFRSVUUsIGJHcHdyZGVsdGFNaW51cyA9IFRSVUU7CisKKwkvLworCS8vIEdldCBwb3dlciBkZWx0YSBmb3IgMjBNSHogYW5kIDQwTUh6LgorCS8vCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhwb3dlciBwZXIgUmF0ZVxuIikpOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfREVMVEEsIHZhbHVlMik7CisJQXB3cmRlbHRhID0gMDsKKwlHcHdyZGVsdGEgPSAwOworCisJaWYgKCh2YWx1ZTIgJiAweGZmKSAhPSAweGZmKQorCXsKKwkJaWYgKCh2YWx1ZTIgJiAweDgwKSkKKwkJCUdwd3JkZWx0YSA9ICh2YWx1ZTImMHhmKTsKKworCQlpZiAoKHZhbHVlMiAmIDB4NDApKQorCQkJYkdwd3JkZWx0YU1pbnVzID0gRkFMU0U7CisJCWVsc2UKKwkJCWJHcHdyZGVsdGFNaW51cyA9IFRSVUU7CisJfQorCWlmICgodmFsdWUyICYgMHhmZjAwKSAhPSAweGZmMDApCisJeworCQlpZiAoKHZhbHVlMiAmIDB4ODAwMCkpCisJCQlBcHdyZGVsdGEgPSAoKHZhbHVlMiYweGYwMCk+PjgpOworCisJCWlmICgodmFsdWUyICYgMHg0MDAwKSkKKwkJCWJBcHdyZGVsdGFNaW51cyA9IEZBTFNFOworCQllbHNlCisJCQliQXB3cmRlbHRhTWludXMgPSBUUlVFOworCX0KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJHcHdyZGVsdGEgPSAleCwgQXB3cmRlbHRhID0gJXggLlxuIiwgR3B3cmRlbHRhLCBBcHdyZGVsdGEpKTsKKworCS8vCisJLy8gR2V0IFR4cG93ZXIgcGVyIE1DUyBmb3IgMjBNSHogaW4gMi40Ry4KKwkvLworCWZvciAoaT0wOyBpPDU7IGkrKykKKwl7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzJfNEcgKyBpKjQsIHZhbHVlKTsKKwkJZGF0YSA9IHZhbHVlOworCQlpZiAoYkFwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQl7CisJCQl0MSA9ICh2YWx1ZSYweGYpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQxID4gMHhmKQorCQkJCXQxID0gMHhmOworCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoQXB3cmRlbHRhKTsKKwkJCWlmICh0MiA+IDB4ZikKKwkJCQl0MiA9IDB4ZjsKKwkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQzID4gMHhmKQorCQkJCXQzID0gMHhmOworCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoQXB3cmRlbHRhKTsKKwkJCWlmICh0NCA+IDB4ZikKKwkJCQl0NCA9IDB4ZjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmICgodmFsdWUmMHhmKSA+IEFwd3JkZWx0YSkKKwkJCQl0MSA9ICh2YWx1ZSYweGYpLShBcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQxID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEFwd3JkZWx0YSkKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQyID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDMgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gQXB3cmRlbHRhKQorCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDQgPSAwOworCQl9CisJCUFkYXRhID0gdDEgKyAodDI8PDQpICsgKHQzPDw4KSArICh0NDw8MTIpOworCQlpZiAoYkdwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQl7CisJCQl0MSA9ICh2YWx1ZSYweGYpKyhHcHdyZGVsdGEpOworCQkJaWYgKHQxID4gMHhmKQorCQkJCXQxID0gMHhmOworCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0MiA+IDB4ZikKKwkJCQl0MiA9IDB4ZjsKKwkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhHcHdyZGVsdGEpOworCQkJaWYgKHQzID4gMHhmKQorCQkJCXQzID0gMHhmOworCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0NCA+IDB4ZikKKwkJCQl0NCA9IDB4ZjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmICgodmFsdWUmMHhmKSA+IEdwd3JkZWx0YSkKKwkJCQl0MSA9ICh2YWx1ZSYweGYpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQxID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEdwd3JkZWx0YSkKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQyID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBHcHdyZGVsdGEpCisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEdwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDMgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gR3B3cmRlbHRhKQorCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEdwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDQgPSAwOworCQl9CisJCUdkYXRhID0gdDEgKyAodDI8PDQpICsgKHQzPDw4KSArICh0NDw8MTIpOworCisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzJfNEcgKyBpKjQgKyAyLCB2YWx1ZSk7CisJCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCXsKKwkJCXQxID0gKHZhbHVlJjB4ZikrKEFwd3JkZWx0YSk7CisJCQlpZiAodDEgPiAweGYpCisJCQkJdDEgPSAweGY7CisJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQyID4gMHhmKQorCQkJCXQyID0gMHhmOworCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCkrKEFwd3JkZWx0YSk7CisJCQlpZiAodDMgPiAweGYpCisJCQkJdDMgPSAweGY7CisJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQ0ID4gMHhmKQorCQkJCXQ0ID0gMHhmOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKCh2YWx1ZSYweGYpID4gQXB3cmRlbHRhKQorCQkJCXQxID0gKHZhbHVlJjB4ZiktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDEgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gQXB3cmRlbHRhKQorCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDIgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEFwd3JkZWx0YSkKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KS0oQXB3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MyA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwMDApPj4xMikgPiBBcHdyZGVsdGEpCisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oQXB3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0NCA9IDA7CisJCX0KKwkJQWRhdGEgfD0gKCh0MTw8MTYpICsgKHQyPDwyMCkgKyAodDM8PDI0KSArICh0NDw8MjgpKTsKKwkJaWYgKGJHcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJeworCQkJdDEgPSAodmFsdWUmMHhmKSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0MSA+IDB4ZikKKwkJCQl0MSA9IDB4ZjsKKwkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEdwd3JkZWx0YSk7CisJCQlpZiAodDIgPiAweGYpCisJCQkJdDIgPSAweGY7CisJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0MyA+IDB4ZikKKwkJCQl0MyA9IDB4ZjsKKwkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEdwd3JkZWx0YSk7CisJCQlpZiAodDQgPiAweGYpCisJCQkJdDQgPSAweGY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoKHZhbHVlJjB4ZikgPiBHcHdyZGVsdGEpCisJCQkJdDEgPSAodmFsdWUmMHhmKS0oR3B3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MSA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBHcHdyZGVsdGEpCisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KS0oR3B3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MiA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwMCk+PjgpID4gR3B3cmRlbHRhKQorCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQzID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEdwd3JkZWx0YSkKKwkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQ0ID0gMDsKKwkJfQorCQlHZGF0YSB8PSAoKHQxPDwxNikgKyAodDI8PDIwKSArICh0Mzw8MjQpICsgKHQ0PDwyOCkpOworCQlkYXRhIHw9ICh2YWx1ZTw8MTYpOworCisJCXBBZC0+VHgyME1Qd3JDZmdBQmFuZFtpXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFtpXSA9IEFkYXRhOworCQlwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbaV0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbaV0gPSBHZGF0YTsKKworCQlpZiAoZGF0YSAhPSAweGZmZmZmZmZmKQorCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUFdSX0NGR18wICsgaSo0LCBkYXRhKTsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjIwTUh6IEJXLCAyLjRHIGJhbmQtJWx4LCAgQWRhdGEgPSAlbHgsICBHZGF0YSA9ICVseCBcbiIsIGRhdGEsIEFkYXRhLCBHZGF0YSkpOworCX0KKworCS8vCisJLy8gQ2hlY2sgdGhpcyBibG9jayBpcyB2YWxpZCBmb3IgNDBNSHogaW4gMi40Ry4gSWYgaW52YWxpZCwgdXNlIHBhcmFtZXRlciBmb3IgMjBNSHogaW4gMi40RworCS8vCisJYlZhbGlkID0gVFJVRTsKKwlmb3IgKGk9MDsgaTw2OyBpKyspCisJeworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV80ME1IWl8yXzRHICsgMiArIGkqMiwgdmFsdWUpOworCQlpZiAoKCh2YWx1ZSAmIDB4MDBGRikgPT0gMHgwMEZGKSB8fCAoKHZhbHVlICYgMHhGRjAwKSA9PSAweEZGMDApKQorCQl7CisJCQliVmFsaWQgPSBGQUxTRTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLy8KKwkvLyBHZXQgVHhwb3dlciBwZXIgTUNTIGZvciA0ME1IeiBpbiAyLjRHLgorCS8vCisJaWYgKGJWYWxpZCkKKwl7CisJCWZvciAoaT0wOyBpPDQ7IGkrKykKKwkJeworCQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfMl80RyArIGkqNCwgdmFsdWUpOworCQkJaWYgKGJHcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJCXsKKwkJCQl0MSA9ICh2YWx1ZSYweGYpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0MSA+IDB4ZikKKwkJCQkJdDEgPSAweGY7CisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoR3B3cmRlbHRhKTsKKwkJCQlpZiAodDIgPiAweGYpCisJCQkJCXQyID0gMHhmOworCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0MyA+IDB4ZikKKwkJCQkJdDMgPSAweGY7CisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoR3B3cmRlbHRhKTsKKwkJCQlpZiAodDQgPiAweGYpCisJCQkJCXQ0ID0gMHhmOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgodmFsdWUmMHhmKSA+IEdwd3JkZWx0YSkKKwkJCQkJdDEgPSAodmFsdWUmMHhmKS0oR3B3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQxID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBHcHdyZGVsdGEpCisJCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MiA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEdwd3JkZWx0YSkKKwkJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MyA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gR3B3cmRlbHRhKQorCQkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShHcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDQgPSAwOworCQkJfQorCQkJR2RhdGEgPSB0MSArICh0Mjw8NCkgKyAodDM8PDgpICsgKHQ0PDwxMik7CisKKwkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzQwTUhaXzJfNEcgKyBpKjQgKyAyLCB2YWx1ZSk7CisJCQlpZiAoYkdwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQkJeworCQkJCXQxID0gKHZhbHVlJjB4ZikrKEdwd3JkZWx0YSk7CisJCQkJaWYgKHQxID4gMHhmKQorCQkJCQl0MSA9IDB4ZjsKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0MiA+IDB4ZikKKwkJCQkJdDIgPSAweGY7CisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCkrKEdwd3JkZWx0YSk7CisJCQkJaWYgKHQzID4gMHhmKQorCQkJCQl0MyA9IDB4ZjsKKwkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0NCA+IDB4ZikKKwkJCQkJdDQgPSAweGY7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKCh2YWx1ZSYweGYpID4gR3B3cmRlbHRhKQorCQkJCQl0MSA9ICh2YWx1ZSYweGYpLShHcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDEgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEdwd3JkZWx0YSkKKwkJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KS0oR3B3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQyID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwMCk+PjgpID4gR3B3cmRlbHRhKQorCQkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KS0oR3B3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQzID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwMDApPj4xMikgPiBHcHdyZGVsdGEpCisJCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0NCA9IDA7CisJCQl9CisJCQlHZGF0YSB8PSAoKHQxPDwxNikgKyAodDI8PDIwKSArICh0Mzw8MjQpICsgKHQ0PDwyOCkpOworCisJCQlpZiAoaSA9PSAwKQorCQkJCXBBZC0+VHg0ME1Qd3JDZmdHQmFuZFtpKzFdID0gKHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFtpKzFdICYgMHgwMDAwRkZGRikgfCAoR2RhdGEgJiAweEZGRkYwMDAwKTsKKwkJCWVsc2UKKwkJCQlwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbaSsxXSA9IEdkYXRhOworCisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiNDBNSHogQlcsIDIuNEcgYmFuZCwgR2RhdGEgPSAlbHggXG4iLCBHZGF0YSkpOworCQl9CisJfQorCisJLy8KKwkvLyBDaGVjayB0aGlzIGJsb2NrIGlzIHZhbGlkIGZvciAyME1IeiBpbiA1Ry4gSWYgaW52YWxpZCwgdXNlIHBhcmFtZXRlciBmb3IgMjBNSHogaW4gMi40RworCS8vCisJYlZhbGlkID0gVFJVRTsKKwlmb3IgKGk9MDsgaTw4OyBpKyspCisJeworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl81RyArIDIgKyBpKjIsIHZhbHVlKTsKKwkJaWYgKCgodmFsdWUgJiAweDAwRkYpID09IDB4MDBGRikgfHwgKCh2YWx1ZSAmIDB4RkYwMCkgPT0gMHhGRjAwKSkKKwkJeworCQkJYlZhbGlkID0gRkFMU0U7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8vCisJLy8gR2V0IFR4cG93ZXIgcGVyIE1DUyBmb3IgMjBNSHogaW4gNUcuCisJLy8KKwlpZiAoYlZhbGlkKQorCXsKKwkJZm9yIChpPTA7IGk8NTsgaSsrKQorCQl7CisJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl81RyArIGkqNCwgdmFsdWUpOworCQkJaWYgKGJBcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJCXsKKwkJCQl0MSA9ICh2YWx1ZSYweGYpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MSA+IDB4ZikKKwkJCQkJdDEgPSAweGY7CisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDIgPiAweGYpCisJCQkJCXQyID0gMHhmOworCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MyA+IDB4ZikKKwkJCQkJdDMgPSAweGY7CisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDQgPiAweGYpCisJCQkJCXQ0ID0gMHhmOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgodmFsdWUmMHhmKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDEgPSAodmFsdWUmMHhmKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQxID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBBcHdyZGVsdGEpCisJCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MiA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEFwd3JkZWx0YSkKKwkJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MyA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gQXB3cmRlbHRhKQorCQkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDQgPSAwOworCQkJfQorCQkJQWRhdGEgPSB0MSArICh0Mjw8NCkgKyAodDM8PDgpICsgKHQ0PDwxMik7CisKKwkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzVHICsgaSo0ICsgMiwgdmFsdWUpOworCQkJaWYgKGJBcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJCXsKKwkJCQl0MSA9ICh2YWx1ZSYweGYpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MSA+IDB4ZikKKwkJCQkJdDEgPSAweGY7CisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDIgPiAweGYpCisJCQkJCXQyID0gMHhmOworCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MyA+IDB4ZikKKwkJCQkJdDMgPSAweGY7CisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDQgPiAweGYpCisJCQkJCXQ0ID0gMHhmOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgodmFsdWUmMHhmKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDEgPSAodmFsdWUmMHhmKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQxID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBBcHdyZGVsdGEpCisJCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MiA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEFwd3JkZWx0YSkKKwkJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MyA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gQXB3cmRlbHRhKQorCQkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDQgPSAwOworCQkJfQorCQkJQWRhdGEgfD0gKCh0MTw8MTYpICsgKHQyPDwyMCkgKyAodDM8PDI0KSArICh0NDw8MjgpKTsKKworCQkJaWYgKGkgPT0gMCkKKwkJCQlwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0gPSAocEFkLT5UeDIwTVB3ckNmZ0FCYW5kW2ldICYgMHgwMDAwRkZGRikgfCAoQWRhdGEgJiAweEZGRkYwMDAwKTsKKwkJCWVsc2UKKwkJCQlwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0gPSBBZGF0YTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjIwTUh6IEJXLCA1R0h6IGJhbmQsIEFkYXRhID0gJWx4IFxuIiwgQWRhdGEpKTsKKwkJfQorCX0KKworCS8vCisJLy8gQ2hlY2sgdGhpcyBibG9jayBpcyB2YWxpZCBmb3IgNDBNSHogaW4gNUcuIElmIGludmFsaWQsIHVzZSBwYXJhbWV0ZXIgZm9yIDIwTUh6IGluIDIuNEcKKwkvLworCWJWYWxpZCA9IFRSVUU7CisJZm9yIChpPTA7IGk8NjsgaSsrKQorCXsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfNUcgKyAyICsgaSoyLCB2YWx1ZSk7CisJCWlmICgoKHZhbHVlICYgMHgwMEZGKSA9PSAweDAwRkYpIHx8ICgodmFsdWUgJiAweEZGMDApID09IDB4RkYwMCkpCisJCXsKKwkJCWJWYWxpZCA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLworCS8vIEdldCBUeHBvd2VyIHBlciBNQ1MgZm9yIDQwTUh6IGluIDVHLgorCS8vCisJaWYgKGJWYWxpZCkKKwl7CisJCWZvciAoaT0wOyBpPDQ7IGkrKykKKwkJeworCQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfNUcgKyBpKjQsIHZhbHVlKTsKKwkJCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCQl7CisJCQkJdDEgPSAodmFsdWUmMHhmKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDEgPiAweGYpCisJCQkJCXQxID0gMHhmOworCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQyID4gMHhmKQorCQkJCQl0MiA9IDB4ZjsKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDMgPiAweGYpCisJCQkJCXQzID0gMHhmOworCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQ0ID4gMHhmKQorCQkJCQl0NCA9IDB4ZjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKHZhbHVlJjB4ZikgPiBBcHdyZGVsdGEpCisJCQkJCXQxID0gKHZhbHVlJjB4ZiktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MSA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gQXB3cmRlbHRhKQorCQkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDIgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDMgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQ0ID0gMDsKKwkJCX0KKwkJCUFkYXRhID0gdDEgKyAodDI8PDQpICsgKHQzPDw4KSArICh0NDw8MTIpOworCisJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV80ME1IWl81RyArIGkqNCArIDIsIHZhbHVlKTsKKwkJCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCQl7CisJCQkJdDEgPSAodmFsdWUmMHhmKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDEgPiAweGYpCisJCQkJCXQxID0gMHhmOworCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQyID4gMHhmKQorCQkJCQl0MiA9IDB4ZjsKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDMgPiAweGYpCisJCQkJCXQzID0gMHhmOworCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQ0ID4gMHhmKQorCQkJCQl0NCA9IDB4ZjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKHZhbHVlJjB4ZikgPiBBcHdyZGVsdGEpCisJCQkJCXQxID0gKHZhbHVlJjB4ZiktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MSA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gQXB3cmRlbHRhKQorCQkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDIgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDMgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQ0ID0gMDsKKwkJCX0KKwkJCUFkYXRhIHw9ICgodDE8PDE2KSArICh0Mjw8MjApICsgKHQzPDwyNCkgKyAodDQ8PDI4KSk7CisKKwkJCWlmIChpID09IDApCisJCQkJcEFkLT5UeDQwTVB3ckNmZ0FCYW5kW2krMV0gPSAocEFkLT5UeDQwTVB3ckNmZ0FCYW5kW2krMV0gJiAweDAwMDBGRkZGKSB8IChBZGF0YSAmIDB4RkZGRjAwMDApOworCQkJZWxzZQorCQkJCXBBZC0+VHg0ME1Qd3JDZmdBQmFuZFtpKzFdID0gQWRhdGE7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCI0ME1IeiBCVywgNUdIeiBiYW5kLCBBZGF0YSA9ICVseCBcbiIsIEFkYXRhKSk7CisJCX0KKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlYWQgaW5pdGlhbCBjaGFubmVsIHBvd2VyIHBhcmFtZXRlcnMgZnJvbSBFRVBST00KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBSZWFkQ2hhbm5lbFB3cigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJCQlpLCBjaG9mZnNldDsKKwlFRVBST01fVFhfUFdSX1NUUlVDCSAgICBQb3dlcjsKKwlFRVBST01fVFhfUFdSX1NUUlVDCSAgICBQb3dlcjI7CisKKwkvLyBSZWFkIFR4IHBvd2VyIHZhbHVlIGZvciBhbGwgY2hhbm5lbHMKKwkvLyBWYWx1ZSBmcm9tIDEgLSAweDdmLiBEZWZhdWx0IHZhbHVlIGlzIDI0LgorCS8vIFBvd2VyIHZhbHVlIDogMi40RyAweDAwICgwKSB+IDB4MUYgKDMxKQorCS8vICAgICAgICAgICAgIDogNS41RyAweEY5ICgtNykgfiAweDBGICgxNSkKKworCS8vIDAuIDExYi9nLCBjaDEgLSBjaCAxNAorCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJeworLy8JCVBvd2VyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fR19UWF9QV1JfT0ZGU0VUICsgaSAqIDIpOworLy8JCVBvd2VyMi53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0dfVFgyX1BXUl9PRkZTRVQgKyBpICogMik7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0dfVFhfUFdSX09GRlNFVCArIGkgKiAyLCBQb3dlci53b3JkKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fR19UWDJfUFdSX09GRlNFVCArIGkgKiAyLCBQb3dlcjIud29yZCk7CisJCXBBZC0+VHhQb3dlcltpICogMl0uQ2hhbm5lbCA9IGkgKiAyICsgMTsKKwkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uQ2hhbm5lbCA9IGkgKiAyICsgMjsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwID4gMzEpIHx8IChQb3dlci5maWVsZC5CeXRlMCA8IDApKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCWVsc2UKKwkJCXBBZC0+VHhQb3dlcltpICogMl0uUG93ZXIgPSBQb3dlci5maWVsZC5CeXRlMDsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUxID4gMzEpIHx8IChQb3dlci5maWVsZC5CeXRlMSA8IDApKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQllbHNlCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyAxXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUwID4gMzEpIHx8IChQb3dlcjIuZmllbGQuQnl0ZTAgPCAwKSkKKwkJCXBBZC0+VHhQb3dlcltpICogMl0uUG93ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJZWxzZQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPiAzMSkgfHwgKFBvd2VyMi5maWVsZC5CeXRlMSA8IDApKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uUG93ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJZWxzZQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uUG93ZXIyID0gUG93ZXIyLmZpZWxkLkJ5dGUxOworCX0KKworCS8vIDEuIFUtTklJIGxvd2VyL21pZGRsZSBiYW5kOiAzNiwgMzgsIDQwOyA0NCwgNDYsIDQ4OyA1MiwgNTQsIDU2OyA2MCwgNjIsIDY0IChpbmNsdWRpbmcgY2VudHJhbCBmcmVxdWVuY3kgaW4gQlcgNDBNSHopCisJLy8gMS4xIEZpbGwgdXAgY2hhbm5lbAorCWNob2Zmc2V0ID0gMTQ7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwl7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uQ2hhbm5lbAk9IDM2ICsgaSAqIDggKyAwOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uQ2hhbm5lbAk9IDM2ICsgaSAqIDggKyAyOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uQ2hhbm5lbAk9IDM2ICsgaSAqIDggKyA0OworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCX0KKworCS8vIDEuMiBGaWxsIHVwIHBvd2VyCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwl7CisvLwkJUG93ZXIud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYX1BXUl9PRkZTRVQgKyBpICogMik7CisvLwkJUG93ZXIyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWDJfUFdSX09GRlNFVCArIGkgKiAyKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICsgaSAqIDIsIFBvd2VyLndvcmQpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYMl9QV1JfT0ZGU0VUICsgaSAqIDIsIFBvd2VyMi53b3JkKTsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMCA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMSA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTEgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlcjIuZmllbGQuQnl0ZTAgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMSA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMTsKKwl9CisKKwkvLyAyLiBIaXBwZXJMQU4gMiAxMDAsIDEwMiAsMTA0OyAxMDgsIDExMCwgMTEyOyAxMTYsIDExOCwgMTIwOyAxMjQsIDEyNiwgMTI4OyAxMzIsIDEzNCwgMTM2OyAxNDAgKGluY2x1ZGluZyBjZW50cmFsIGZyZXF1ZW5jeSBpbiBCVyA0ME1IeikKKwkvLyAyLjEgRmlsbCB1cCBjaGFubmVsCisJY2hvZmZzZXQgPSAxNCArIDEyOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJeworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLkNoYW5uZWwJPSAxMDAgKyBpICogOCArIDA7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLlBvd2VyMgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5DaGFubmVsCT0gMTAwICsgaSAqIDggKyAyOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uQ2hhbm5lbAk9IDEwMCArIGkgKiA4ICsgNDsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwl9CisJcEFkLT5UeFBvd2VyWzMgKiA1ICsgY2hvZmZzZXQgKyAwXS5DaGFubmVsCQk9IDE0MDsKKwlwQWQtPlR4UG93ZXJbMyAqIDUgKyBjaG9mZnNldCArIDBdLlBvd2VyCQk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJcEFkLT5UeFBvd2VyWzMgKiA1ICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIJCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCS8vIDIuMiBGaWxsIHVwIHBvd2VyCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwl7CisvLwkJUG93ZXIud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKyBpICogMik7CisvLwkJUG93ZXIyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWDJfUFdSX09GRlNFVCArIChjaG9mZnNldCAtIDE0KSArIGkgKiAyKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIsIFBvd2VyLndvcmQpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYMl9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIsIFBvd2VyMi53b3JkKTsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMCA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMSA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTEgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlcjIuZmllbGQuQnl0ZTAgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMSA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMTsKKwl9CisKKwkvLyAzLiBVLU5JSSB1cHBlciBiYW5kOiAxNDksIDE1MSwgMTUzOyAxNTcsIDE1OSwgMTYxOyAxNjUgKGluY2x1ZGluZyBjZW50cmFsIGZyZXF1ZW5jeSBpbiBCVyA0ME1IeikKKwkvLyAzLjEgRmlsbCB1cCBjaGFubmVsCisJY2hvZmZzZXQgPSAxNCArIDEyICsgMTY7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwl7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uQ2hhbm5lbAk9IDE0OSArIGkgKiA4ICsgMDsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLkNoYW5uZWwJPSAxNDkgKyBpICogOCArIDI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uUG93ZXIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyMgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5DaGFubmVsCT0gMTQ5ICsgaSAqIDggKyA0OworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCX0KKwlwQWQtPlR4UG93ZXJbMyAqIDIgKyBjaG9mZnNldCArIDBdLkNoYW5uZWwJCT0gMTY1OworCXBBZC0+VHhQb3dlclszICogMiArIGNob2Zmc2V0ICsgMF0uUG93ZXIJCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwlwQWQtPlR4UG93ZXJbMyAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyMgkJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJLy8gMy4yIEZpbGwgdXAgcG93ZXIKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCXsKKy8vCQlQb3dlci53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFhfUFdSX09GRlNFVCArIChjaG9mZnNldCAtIDE0KSArIGkgKiAyKTsKKy8vCQlQb3dlcjIud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYMl9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKyBpICogMiwgUG93ZXIud29yZCk7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFgyX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKyBpICogMiwgUG93ZXIyLndvcmQpOworCisJCWlmICgoUG93ZXIuZmllbGQuQnl0ZTAgPCAxNikgJiYgKFBvd2VyLmZpZWxkLkJ5dGUwID49IC03KSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMF0uUG93ZXIgPSBQb3dlci5maWVsZC5CeXRlMDsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUxIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMSA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTE7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTAgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMCA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMDsKKworCQlpZiAoKFBvd2VyMi5maWVsZC5CeXRlMSA8IDE2KSAmJiAoUG93ZXIyLmZpZWxkLkJ5dGUxID49IC03KSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMV0uUG93ZXIyID0gUG93ZXIyLmZpZWxkLkJ5dGUxOworCX0KKworCS8vIDQuIFByaW50IGFuZCBEZWJ1ZworCWNob2Zmc2V0ID0gMTQgKyAxMiArIDE2ICsgNzsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVhZCB0aGUgZm9sbG93aW5nIGZyb20gdGhlIHJlZ2lzdHJ5CisJCTEuIEFsbCB0aGUgcGFyYW1ldGVycworCQkyLiBOZXR3b3JrQWRkcmVzCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCVdyYXBwZXJDb25maWd1cmF0aW9uQ29udGV4dAlGb3IgdXNlIGJ5IE5kaXNPcGVuQ29uZmlndXJhdGlvbgorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19TVUNDRVNTCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKwkJTkRJU19TVEFUVVNfUkVTT1VSQ0VTCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCU5JQ1JlYWRSZWdQYXJhbWV0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTglORElTX0hBTkRMRQkJCVdyYXBwZXJDb25maWd1cmF0aW9uQ29udGV4dAorCSkKK3sKKwlORElTX1NUQVRVUwkJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJREJHUFJJTlRfUyhTdGF0dXMsICgiPC0tIE5JQ1JlYWRSZWdQYXJhbWV0ZXJzLCBTdGF0dXM9JXhcbiIsIFN0YXR1cykpOworCXJldHVybiBTdGF0dXM7Cit9CisKKworI2lmZGVmIFJUMzB4eAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUZvciBSRiBmaWx0ZXIgY2FsaWJyYXRpb24gcHVycG9zZQorCisJQXJndW1lbnRzOgorCQlwQWQgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUEZpbHRlckNhbGlicmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSCVI1NXggPSAwLCB2YWx1ZSwgRmlsdGVyVGFyZ2V0ID0gMHgxRSwgQkJQVmFsdWU9MDsKKwlVSU5UCWxvb3AgPSAwLCBjb3VudCA9IDAsIGxvb3BjbnQgPSAwLCBSZVRyeSA9IDA7CisJVUNIQVIJUkZfUjI0X1ZhbHVlID0gMDsKKworCS8vIEdpdmUgYmJwIGZpbHRlciBpbml0aWFsIHZhbHVlCisJcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQgPSAweDFGOworCXBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0ID0gMHgyRjsgLy9CaXRbNV0gbXVzdCBiZSAxIGZvciBCVyA0MAorCisJZG8KKwl7CisJCWlmIChsb29wID09IDEpCS8vQmFuZFdpZHRoID0gNDAgTUh6CisJCXsKKwkJCS8vIFdyaXRlIDB4MjcgdG8gUkZfUjI0IHRvIHByb2dyYW0gZmlsdGVyCisJCQlSRl9SMjRfVmFsdWUgPSAweDI3OworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRl9SMjRfVmFsdWUpOworCQkJaWYgKElTX1JUMzA5MChwQWQpKQorCQkJCUZpbHRlclRhcmdldCA9IDB4MTU7CisJCQllbHNlCisJCQkJRmlsdGVyVGFyZ2V0ID0gMHgxOTsKKworCQkJLy8gd2hlbiBjYWxpYnJhdGUgQlc0MCwgQkJQIG1hc2sgbXVzdCBzZXQgdG8gQlc0MC4KKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlJj0gKH4weDE4KTsKKwkJCUJCUFZhbHVlfD0gKDB4MTApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCisJCQkvLyBzZXQgdG8gQlc0MAorCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMzEsICZ2YWx1ZSk7CisJCQl2YWx1ZSB8PSAweDIwOworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCB2YWx1ZSk7CisJCX0KKwkJZWxzZQkJCS8vQmFuZFdpZHRoID0gMjAgTUh6CisJCXsKKwkJCS8vIFdyaXRlIDB4MDcgdG8gUkZfUjI0IHRvIHByb2dyYW0gZmlsdGVyCisJCQlSRl9SMjRfVmFsdWUgPSAweDA3OworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRl9SMjRfVmFsdWUpOworCQkJaWYgKElTX1JUMzA5MChwQWQpKQorCQkJCUZpbHRlclRhcmdldCA9IDB4MTM7CisJCQllbHNlCisJCQkJRmlsdGVyVGFyZ2V0ID0gMHgxNjsKKworCQkJLy8gc2V0IHRvIEJXMjAKKwkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCAmdmFsdWUpOworCQkJdmFsdWUgJj0gKH4weDIwKTsKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMSwgdmFsdWUpOworCQl9CisKKwkJLy8gV3JpdGUgMHgwMSB0byBSRl9SMjIgdG8gZW5hYmxlIGJhc2ViYW5kIGxvb3BiYWNrIG1vZGUKKwkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjIsICZ2YWx1ZSk7CisJCXZhbHVlIHw9IDB4MDE7CisJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMiwgdmFsdWUpOworCisJCS8vIFdyaXRlIDB4MDAgdG8gQkJQX1IyNCB0byBzZXQgcG93ZXIgJiBmcmVxdWVuY3kgb2YgcGFzc2JhbmQgdGVzdCB0b25lCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCAwKTsKKworCQlkbworCQl7CisJCQkvLyBXcml0ZSAweDkwIHRvIEJCUF9SMjUgdG8gdHJhbnNtaXQgdGVzdCB0b25lCisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNSwgMHg5MCk7CisKKwkJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCQkvLyBSZWFkIEJCUF9SNTVbNjowXSBmb3IgcmVjZWl2ZWQgcG93ZXIsIHNldCBSNTV4ID0gQkJQX1I1NVs2OjBdCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjU1LCAmdmFsdWUpOworCQkJUjU1eCA9IHZhbHVlICYgMHhGRjsKKworCQl9IHdoaWxlICgoUmVUcnkrKyA8IDEwMCkgJiYgKFI1NXggPT0gMCkpOworCisJCS8vIFdyaXRlIDB4MDYgdG8gQkJQX1IyNCB0byBzZXQgcG93ZXIgJiBmcmVxdWVuY3kgb2Ygc3RvcGJhbmQgdGVzdCB0b25lCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCAweDA2KTsKKworCQl3aGlsZShUUlVFKQorCQl7CisJCQkvLyBXcml0ZSAweDkwIHRvIEJCUF9SMjUgdG8gdHJhbnNtaXQgdGVzdCB0b25lCisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNSwgMHg5MCk7CisKKwkJCS8vV2UgbmVlZCB0byB3YWl0IGZvciBjYWxpYnJhdGlvbgorCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNTUsICZ2YWx1ZSk7CisJCQl2YWx1ZSAmPSAweEZGOworCQkJaWYgKChSNTV4IC0gdmFsdWUpIDwgRmlsdGVyVGFyZ2V0KQorCQkJeworCQkJCVJGX1IyNF9WYWx1ZSArKzsKKwkJCX0KKwkJCWVsc2UgaWYgKChSNTV4IC0gdmFsdWUpID09IEZpbHRlclRhcmdldCkKKwkJCXsKKwkJCQlSRl9SMjRfVmFsdWUgKys7CisJCQkJY291bnQgKys7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBjYXVzZSBkcml2ZXIgaGFuZy4KKwkJCWlmIChsb29wY250KysgPiAxMDApCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRNUEZpbHRlckNhbGlicmF0aW9uIC0gY2FuJ3QgZmluZCBhIHZhbGlkIHZhbHVlLCBsb29wY250PSVkIHN0b3AgY2FsaWJyYXRpbmciLCBsb29wY250KSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vIFdyaXRlIFJGX1IyNCB0byBwcm9ncmFtIGZpbHRlcgorCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRl9SMjRfVmFsdWUpOworCQl9CisKKwkJaWYgKGNvdW50ID4gMCkKKwkJeworCQkJUkZfUjI0X1ZhbHVlID0gUkZfUjI0X1ZhbHVlIC0gKChjb3VudCkgPyAoMSkgOiAoMCkpOworCQl9CisKKwkJLy8gU3RvcmUgZm9yIGZ1dHVyZSB1c2FnZQorCQlpZiAobG9vcGNudCA8IDEwMCkKKwkJeworCQkJaWYgKGxvb3ArKyA9PSAwKQorCQkJeworCQkJCS8vQmFuZFdpZHRoID0gMjAgTUh6CisJCQkJcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQgPSAoVUNIQVIpUkZfUjI0X1ZhbHVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vQmFuZFdpZHRoID0gNDAgTUh6CisJCQkJcEFkLT5NbG1lLkNhbGlCVzQwUmZSMjQgPSAoVUNIQVIpUkZfUjI0X1ZhbHVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWJyZWFrOworCisJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgUkZfUjI0X1ZhbHVlKTsKKworCQkvLyByZXNldCBjb3VudAorCQljb3VudCA9IDA7CisJfSB3aGlsZShUUlVFKTsKKworCS8vCisJLy8gU2V0IGJhY2sgdG8gaW5pdGlhbCBzdGF0ZQorCS8vCisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsIDApOworCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjIsICZ2YWx1ZSk7CisJdmFsdWUgJj0gfigweDAxKTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjIsIHZhbHVlKTsKKworCS8vIHNldCBCQlAgYmFjayB0byBCVzIwCisJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOworCUJCUFZhbHVlJj0gKH4weDE4KTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QRmlsdGVyQ2FsaWJyYXRpb24gLSBDYWxpQlcyMFJmUjI0PTB4JXgsIENhbGlCVzQwUmZSMjQ9MHgleFxuIiwgcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQsIHBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0KSk7Cit9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKworI2lmZGVmIFJUMzA3MAorVk9JRCBOSUNJbml0UlQzMHh4UkZSZWdpc3RlcnMoSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJSU5UIGk7CisJLy8gRHJpdmVyIG11c3QgcmVhZCBFRVBST00gdG8gZ2V0IFJmSWNUeXBlIGJlZm9yZSBpbml0aWFsIFJGIHJlZ2lzdGVycworCS8vIEluaXRpYWxpemUgUkYgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCWlmIChJU19SVDMwNzAocEFkKSB8fCBJU19SVDMwNzEocEFkKSkKKwl7CisJCS8vIEluaXQgUkYgY2FsaWJyYXRpb24KKwkJLy8gRHJpdmVyIHNob3VsZCB0b2dnbGUgUkYgUjMwIGJpdDcgYmVmb3JlIGluaXQgUkYgcmVnaXN0ZXJzCisJCVVJTlQzMiBSZlJlZyA9IDA7CisJCVVJTlQzMiBkYXRhOworCisJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjMwLCAoUFVDSEFSKSZSZlJlZyk7CisJCVJmUmVnIHw9IDB4ODA7CisJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMCwgKFVDSEFSKVJmUmVnKTsKKwkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKwkJUmZSZWcgJj0gMHg3RjsKKwkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMwLCAoVUNIQVIpUmZSZWcpOworCisJCS8vIEluaXRpYWxpemUgUkYgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JGX1JFR19QQVJNUzsgaSsrKQorCQl7CisJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSVDMweHhfUkZSZWdUYWJsZVtpXS5SZWdpc3RlciwgUlQzMHh4X1JGUmVnVGFibGVbaV0uVmFsdWUpOworCQl9CisKKwkJLy8gYWRkIGJ5IGpvaG5saQorCQlpZiAoSVNfUlQzMDcwKHBBZCkpCisJCXsKKwkJCS8vICBVcGRhdGUgTUFDIDB4MDVENCBmcm9tIDAxeHh4eHh4IHRvIDBEeHh4eHh4ICh2b2x0YWdlIDEuMlYgdG8gMS4zNVYpIGZvciBSVDMwNzAgdG8gaW1wcm92ZSB5aWVsZCByYXRlCisJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIExET19DRkcwLCAmZGF0YSk7CisJCQlkYXRhID0gKChkYXRhICYgMHhGMEZGRkZGRikgfCAweDBEMDAwMDAwKTsKKwkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIExET19DRkcwLCBkYXRhKTsKKwkJfQorCQllbHNlIGlmIChJU19SVDMwNzEocEFkKSkKKwkJeworCQkJLy8gRHJpdmVyIHNob3VsZCBzZXQgUkYgUjYgYml0NiBvbiBiZWZvcmUgaW5pdCBSRiByZWdpc3RlcnMKKwkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCAoUFVDSEFSKSZSZlJlZyk7CisJCQlSZlJlZyB8PSAweDQwOworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCAoVUNIQVIpUmZSZWcpOworCisJCQkvLyBpbml0IFIzMQorCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCAweDE0KTsKKworCQkJLy8gUlQzMDcxIHZlcnNpb24gRSBoYXMgZml4ZWQgdGhpcyBpc3N1ZQorCQkJaWYgKChwQWQtPk5pY0NvbmZpZzIuZmllbGQuREFDVGVzdEJpdCA9PSAxKSAmJiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpKQorCQkJeworCQkJCS8vIHBhdGNoIHR4IEVWTSBpc3N1ZSB0ZW1wb3JhcmlseQorCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgTERPX0NGRzAsICZkYXRhKTsKKwkJCQlkYXRhID0gKChkYXRhICYgMHhFMEZGRkZGRikgfCAweDBEMDAwMDAwKTsKKwkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBMRE9fQ0ZHMCwgZGF0YSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUF9JT19SRUFEMzIocEFkLCBMRE9fQ0ZHMCwgJmRhdGEpOworCQkJCWRhdGEgPSAoKGRhdGEgJiAweEUwRkZGRkZGKSB8IDB4MDEwMDAwMDApOworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIExET19DRkcwLCBkYXRhKTsKKwkJCX0KKworCQkJLy8gcGF0Y2ggTE5BX1BFX0cxIGZhaWxlZCBpc3N1ZQorCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBHUElPX1NXSVRDSCwgJmRhdGEpOworCQkJZGF0YSAmPSB+KDB4MjApOworCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgR1BJT19TV0lUQ0gsIGRhdGEpOworCQl9CisKKwkJLy9Gb3IgUkYgZmlsdGVyIENhbGlicmF0aW9uCisJCVJUTVBGaWx0ZXJDYWxpYnJhdGlvbihwQWQpOworCisJCS8vIEluaXRpYWxpemUgUkYgUjI3IHJlZ2lzdGVyLCBzZXQgUkYgUjI3IG11c3QgYmUgYmVoaW5kIFJUTVBGaWx0ZXJDYWxpYnJhdGlvbigpCisJCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIxMSkKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgMHgzKTsKKworCQkvLyBzZXQgbGVkIG9wZW4gZHJhaW4gZW5hYmxlCisJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgT1BUXzE0LCAmZGF0YSk7CisJCWRhdGEgfD0gMHgwMTsKKwkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgT1BUXzE0LCBkYXRhKTsKKworCQlpZiAoSVNfUlQzMDcxKHBBZCkpCisJCXsKKwkJCS8vIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwLCBsb2FkIFJGIG5vcm1hbCBvcGVyYXRpb24tbW9kZSBzZXR1cAorCQkJUlQzMHh4TG9hZFJGTm9ybWFsTW9kZVNldHVwKHBBZCk7CisJCX0KKwl9CisKK30KKyNlbmRpZiAvLyBSVDMwNzAgLy8KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVhZCBpbml0aWFsIHBhcmFtZXRlcnMgZnJvbSBFRVBST00KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECU5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCW1hY19hZGRyKQoreworCVVJTlQzMgkJCWRhdGEgPSAwOworCVVTSE9SVAkJCWksIHZhbHVlLCB2YWx1ZTI7CisJVUNIQVIJCQlUbXBQaHk7CisJRUVQUk9NX1RYX1BXUl9TVFJVQwkgICAgUG93ZXI7CisJRUVQUk9NX1ZFUlNJT05fU1RSVUMgICAgVmVyc2lvbjsKKwlFRVBST01fQU5URU5OQV9TVFJVQwlBbnRlbm5hOworCUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQyAgICBOaWNDb25maWcyOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzXG4iKSk7CisKKwkvLyBJbml0IEVFUFJPTSBBZGRyZXNzIE51bWJlciwgYmVmb3JlIGFjY2VzcyBFRVBST007IGlmIDkzYzQ2LCBFRVBST01BZGRyZXNzTnVtPTYsIGVsc2UgaWYgOTNjNjYsIEVFUFJPTUFkZHJlc3NOdW09OAorCVJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJmRhdGEpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBFMlBST01fQ1NSID0gMHgleFxuIiwgZGF0YSkpOworCisJaWYoKGRhdGEgJiAweDMwKSA9PSAwKQorCQlwQWQtPkVFUFJPTUFkZHJlc3NOdW0gPSA2OwkJLy8gOTNDNDYKKwllbHNlIGlmKChkYXRhICYgMHgzMCkgPT0gMHgxMCkKKwkJcEFkLT5FRVBST01BZGRyZXNzTnVtID0gODsgICAgIC8vIDkzQzY2CisJZWxzZQorCQlwQWQtPkVFUFJPTUFkZHJlc3NOdW0gPSA4OyAgICAgLy8gOTNDODYKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gRUVQUk9NQWRkcmVzc051bSA9ICVkXG4iLCBwQWQtPkVFUFJPTUFkZHJlc3NOdW0gKSk7CisKKwkvLyBSVDI4NjAgTUFDIG5vIGxvbmdlciBhdXRvIGxvYWQgTUFDIGFkZHJlc3MgZnJvbSBFMlBST00uIERyaXZlciBoYXMgdG8gaW50aWFsaXplCisJLy8gTUFDIGFkZHJlc3MgcmVnaXN0ZXJzIGFjY29yZGluZyB0byBFMlBST00gc2V0dGluZworCWlmIChtYWNfYWRkciA9PSBOVUxMIHx8CisJCXN0cmxlbihtYWNfYWRkcikgIT0gMTcgfHwKKwkJbWFjX2FkZHJbMl0gIT0gJzonICB8fCBtYWNfYWRkcls1XSAhPSAnOicgIHx8IG1hY19hZGRyWzhdICE9ICc6JyB8fAorCQltYWNfYWRkclsxMV0gIT0gJzonIHx8IG1hY19hZGRyWzE0XSAhPSAnOicpCisJeworCQlVU0hPUlQgIEFkZHIwMSxBZGRyMjMsQWRkcjQ1IDsKKworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDQsIEFkZHIwMSk7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgwNiwgQWRkcjIzKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDA4LCBBZGRyNDUpOworCisJCXBBZC0+UGVybWFuZW50QWRkcmVzc1swXSA9IChVQ0hBUikoQWRkcjAxICYgMHhmZik7CisJCXBBZC0+UGVybWFuZW50QWRkcmVzc1sxXSA9IChVQ0hBUikoQWRkcjAxID4+IDgpOworCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMl0gPSAoVUNIQVIpKEFkZHIyMyAmIDB4ZmYpOworCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbM10gPSAoVUNIQVIpKEFkZHIyMyA+PiA4KTsKKwkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzRdID0gKFVDSEFSKShBZGRyNDUgJiAweGZmKTsKKwkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzVdID0gKFVDSEFSKShBZGRyNDUgPj4gOCk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSW5pdGlhbGl6ZSBNQUMgQWRkcmVzcyBmcm9tIEUyUFJPTSBcbiIpKTsKKwl9CisJZWxzZQorCXsKKwkJSU5UCQlqOworCQlQVUNIQVIJbWFjcHRyOworCisJCW1hY3B0ciA9IG1hY19hZGRyOworCisJCWZvciAoaj0wOyBqPE1BQ19BRERSX0xFTjsgaisrKQorCQl7CisJCQlBdG9IKG1hY3B0ciwgJnBBZC0+UGVybWFuZW50QWRkcmVzc1tqXSwgMSk7CisJCQltYWNwdHI9bWFjcHRyKzM7CisJCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJbml0aWFsaXplIE1BQyBBZGRyZXNzIGZyb20gbW9kdWxlIHBhcmFtZXRlciBcbiIpKTsKKwl9CisKKworCXsKKwkJLy9tb3JlIGNvbnZlbmluZXQgdG8gdGVzdCBtYnNzaWQsIHNvIGFwJ3MgYnNzaWQgJjB4ZjEKKwkJaWYgKHBBZC0+UGVybWFuZW50QWRkcmVzc1swXSA9PSAweGZmKQorCQkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzBdID0gUmFuZG9tQnl0ZShwQWQpJjB4Zjg7CisKKwkJLy9pZiAocEFkLT5QZXJtYW5lbnRBZGRyZXNzWzVdID09IDB4ZmYpCisJCS8vCXBBZC0+UGVybWFuZW50QWRkcmVzc1s1XSA9IFJhbmRvbUJ5dGUocEFkKSYweGY4OworCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIkUyUFJPTSBNQUM6ID0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1swXSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzFdLAorCQkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzJdLCBwQWQtPlBlcm1hbmVudEFkZHJlc3NbM10sCisJCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbNF0sIHBBZC0+UGVybWFuZW50QWRkcmVzc1s1XSkpOworCQlpZiAocEFkLT5iTG9jYWxBZG1pbk1BQyA9PSBGQUxTRSkKKwkJeworCQkJTUFDX0RXMF9TVFJVQyBjc3IyOworCQkJTUFDX0RXMV9TVFJVQyBjc3IzOworCQkJQ09QWV9NQUNfQUREUihwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPlBlcm1hbmVudEFkZHJlc3MpOworCQkJY3NyMi5maWVsZC5CeXRlMCA9IHBBZC0+Q3VycmVudEFkZHJlc3NbMF07CisJCQljc3IyLmZpZWxkLkJ5dGUxID0gcEFkLT5DdXJyZW50QWRkcmVzc1sxXTsKKwkJCWNzcjIuZmllbGQuQnl0ZTIgPSBwQWQtPkN1cnJlbnRBZGRyZXNzWzJdOworCQkJY3NyMi5maWVsZC5CeXRlMyA9IHBBZC0+Q3VycmVudEFkZHJlc3NbM107CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQUREUl9EVzAsIGNzcjIud29yZCk7CisJCQljc3IzLndvcmQgPSAwOworCQkJY3NyMy5maWVsZC5CeXRlNCA9IHBBZC0+Q3VycmVudEFkZHJlc3NbNF07CisJCQljc3IzLmZpZWxkLkJ5dGU1ID0gcEFkLT5DdXJyZW50QWRkcmVzc1s1XTsKKwkJCWNzcjMuZmllbGQuVTJNZU1hc2sgPSAweGZmOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0FERFJfRFcxLCBjc3IzLndvcmQpOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiRTJQUk9NIE1BQzogPSUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1swXSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzFdLAorCQkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1syXSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzNdLAorCQkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1s0XSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzVdKSk7CisJCX0KKwl9CisKKwkvLyBpZiBub3QgcmV0dXJuIGVhcmx5LiBjYXVzZSBmYWlsIGF0IGVtdWxhdGlvbi4KKwkvLyBJbml0IHRoZSBjaGFubmVsIG51bWJlciBmb3IgVFggY2hhbm5lbCBwb3dlcgorCVJUTVBSZWFkQ2hhbm5lbFB3cihwQWQpOworCisJLy8gaWYgRTJQUk9NIHZlcnNpb24gbWlzbWF0Y2ggd2l0aCBkcml2ZXIncyBleHBlY3RhdGlvbiwgdGhlbiBza2lwCisJLy8gYWxsIHN1YnNlcXVlbnQgRTJSUE9NIHJldGlldmFsIGFuZCBzZXQgYSBzeXN0ZW0gZXJyb3IgYml0IHRvIG5vdGlmeSBHVUkKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9WRVJTSU9OX09GRlNFVCwgVmVyc2lvbi53b3JkKTsKKwlwQWQtPkVlcHJvbVZlcnNpb24gPSBWZXJzaW9uLmZpZWxkLlZlcnNpb24gKyBWZXJzaW9uLmZpZWxkLkZhZVJlbGVhc2VOdW1iZXIgKiAyNTY7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRTJQUk9NOiBWZXJzaW9uID0gJWQsIEZBRSByZWxlYXNlICMlZFxuIiwgVmVyc2lvbi5maWVsZC5WZXJzaW9uLCBWZXJzaW9uLmZpZWxkLkZhZVJlbGVhc2VOdW1iZXIpKTsKKworCWlmIChWZXJzaW9uLmZpZWxkLlZlcnNpb24gPiBWQUxJRF9FRVBST01fVkVSU0lPTikKKwl7CisJCURCR1BSSU5UX0VSUigoIkUyUFJPTTogV1JPTkcgVkVSU0lPTiAweCV4LCBzaG91bGQgYmUgJWRcbiIsVmVyc2lvbi5maWVsZC5WZXJzaW9uLCBWQUxJRF9FRVBST01fVkVSU0lPTikpOworCQkvKnBBZC0+U3lzdGVtRXJyb3JCaXRtYXAgfD0gMHgwMDAwMDAwMTsKKworCQkvLyBoYXJkLWNvZGUgZGVmYXVsdCB2YWx1ZSB3aGVuIG5vIHByb3BlciBFMlBST00gaW5zdGFsbGVkCisJCXBBZC0+YkF1dG9UeEFnY0EgPSBGQUxTRTsKKwkJcEFkLT5iQXV0b1R4QWdjRyA9IEZBTFNFOworCisJCS8vIERlZmF1bHQgdGhlIGNoYW5uZWwgcG93ZXIKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfQ0hBTk5FTFM7IGkrKykKKwkJCXBBZC0+VHhQb3dlcltpXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkJLy8gRGVmYXVsdCB0aGUgY2hhbm5lbCBwb3dlcgorCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl8xMUpDSEFOTkVMUzsgaSsrKQorCQkJcEFkLT5UeFBvd2VyMTFKW2ldLlBvd2VyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCQlmb3IoaSA9IDA7IGkgPCBOVU1fRUVQUk9NX0JCUF9QQVJNUzsgaSsrKQorCQkJcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbaV0gPSAweGZmZmY7CisJCXJldHVybjsgICovCisJfQorCisJLy8gUmVhZCBCQlAgZGVmYXVsdCB2YWx1ZSBmcm9tIEVFUFJPTSBhbmQgc3RvcmUgdG8gYXJyYXkoRUVQUk9NRGVmYXVsdFZhbHVlKSBpbiBwQWQKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9OSUMxX09GRlNFVCwgdmFsdWUpOworCXBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzBdID0gdmFsdWU7CisKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9OSUMyX09GRlNFVCwgdmFsdWUpOworCXBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzFdID0gdmFsdWU7CisKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MzgsIHZhbHVlKTsJLy8gQ291bnRyeSBSZWdpb24KKwlwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVsyXSA9IHZhbHVlOworCisJZm9yKGkgPSAwOyBpIDwgODsgaSsrKQorCXsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQkJQX0JBU0VfT0ZGU0VUICsgaSoyLCB2YWx1ZSk7CisJCXBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2krM10gPSB2YWx1ZTsKKwl9CisKKwkvLyBXZSBoYXZlIHRvIHBhcnNlIE5JQyBjb25maWd1cmF0aW9uIDAgYXQgaGVyZS4KKwkvLyBJZiBUU1NJIGRpZCBub3QgaGF2ZSBwcmVsb2FkZWQgdmFsdWUsIGl0IHNob3VsZCByZXNldCB0aGUgVHhBdXRvQWdjIHRvIGZhbHNlCisJLy8gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIHJlYWQgVHhBdXRvQWdjIGNvbnRyb2wgYmVmb3JlaGFuZC4KKwkvLyBSZWFkIFR4IEFHQyBjb250cm9sIGJpdAorCUFudGVubmEud29yZCA9IHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzBdOworCWlmIChBbnRlbm5hLndvcmQgPT0gMHhGRkZGKQorCXsKKyNpZmRlZiBSVDMweHgKKwkJaWYoSVNfUlQzMDkwKHBBZCkpCisJCXsKKwkJCUFudGVubmEud29yZCA9IDA7CisJCQlBbnRlbm5hLmZpZWxkLlJmSWNUeXBlID0gUkZJQ18zMDIwOworCQkJQW50ZW5uYS5maWVsZC5UeFBhdGggPSAxOworCQkJQW50ZW5uYS5maWVsZC5SeFBhdGggPSAxOworCQl9CisJCWVsc2UKKwkJeworI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJQW50ZW5uYS53b3JkID0gMDsKKwkJCUFudGVubmEuZmllbGQuUmZJY1R5cGUgPSBSRklDXzI4MjA7CisJCQlBbnRlbm5hLmZpZWxkLlR4UGF0aCA9IDE7CisJCQlBbnRlbm5hLmZpZWxkLlJ4UGF0aCA9IDI7CisJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIkUyUFJPTSBlcnJvciwgaGFyZCBjb2RlIGFzIDB4JTA0eFxuIiwgQW50ZW5uYS53b3JkKSk7CisjaWZkZWYgUlQzMHh4CisJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKwl9CisKKwkvLyBDaG9vc2UgdGhlIGRlc2lyZWQgVHgmUnggc3RyZWFtLgorCWlmICgocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID4gQW50ZW5uYS5maWVsZC5UeFBhdGgpKQorCQlwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9IEFudGVubmEuZmllbGQuVHhQYXRoOworCisJaWYgKChwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9PSAwKSB8fCAocEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPiBBbnRlbm5hLmZpZWxkLlJ4UGF0aCkpCisJeworCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IEFudGVubmEuZmllbGQuUnhQYXRoOworCisJCWlmICgocEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzI4ODNfVkVSU0lPTikgJiYKKwkJCShwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA+IDIpKQorCQl7CisJCQkvLyBvbmx5IDIgUnggc3RyZWFtcyBmb3IgUlQyODYwIHNlcmllcworCQkJcEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPSAyOworCQl9CisJfQorCisJLy8gMyozCisJLy8gcmVhZCB2YWx1ZSBmcm9tIEVFUFJPTSBhbmQgc2V0IHRoZW0gdG8gQ1NSMTc0IH4gMTc3IGluIGNoYWluMCB+IGNoYWluMgorCS8vIHlldCBpbXBsZW1lbnQKKwlmb3IoaT0wOyBpPDM7IGkrKykKKwl7CisJfQorCisJTmljQ29uZmlnMi53b3JkID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMV07CisKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmICgoTmljQ29uZmlnMi53b3JkICYgMHgwMGZmKSA9PSAweGZmKQorCQl7CisJCQlOaWNDb25maWcyLndvcmQgJj0gMHhmZjAwOworCQl9CisKKwkJaWYgKChOaWNDb25maWcyLndvcmQgPj4gOCkgPT0gMHhmZikKKwkJeworCQkJTmljQ29uZmlnMi53b3JkICY9IDB4MDBmZjsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChOaWNDb25maWcyLmZpZWxkLkR5bmFtaWNUeEFnY0NvbnRyb2wgPT0gMSkKKwkJcEFkLT5iQXV0b1R4QWdjQSA9IHBBZC0+YkF1dG9UeEFnY0cgPSBUUlVFOworCWVsc2UKKwkJcEFkLT5iQXV0b1R4QWdjQSA9IHBBZC0+YkF1dG9UeEFnY0cgPSBGQUxTRTsKKworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJOSUNSZWFkRUVQUk9NUGFyYW1ldGVyczogUnhQYXRoID0gJWQsIFR4UGF0aCA9ICVkXG4iLCBBbnRlbm5hLmZpZWxkLlJ4UGF0aCwgQW50ZW5uYS5maWVsZC5UeFBhdGgpKTsKKworCS8vIFNhdmUgdGhlIGFudGVubmEgZm9yIGZ1dHVyZSB1c2UKKwlwQWQtPkFudGVubmEud29yZCA9IEFudGVubmEud29yZDsKKworCS8vCisJLy8gUmVzZXQgUGh5TW9kZSBpZiB3ZSBkb24ndCBzdXBwb3J0IDgwMi4xMWEKKwkvLyBPbmx5IFJGSUNfMjg1MCAmIFJGSUNfMjc1MCBzdXBwb3J0IDgwMi4xMWEKKwkvLworCWlmICgoQW50ZW5uYS5maWVsZC5SZkljVHlwZSAhPSBSRklDXzI4NTApICYmIChBbnRlbm5hLmZpZWxkLlJmSWNUeXBlICE9IFJGSUNfMjc1MCkpCisJeworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVEKSB8fAorCQkJKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQSkpCisJCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gUEhZXzExQkdfTUlYRUQ7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWVsc2UgaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQpCXx8CisJCQkJIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFOX01JWEVEKSAJfHwKKwkJCQkgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUdOX01JWEVEKSAJfHwKKwkJCQkgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl81RykpCisJCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gUEhZXzExQkdOX01JWEVEOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCX0KKworCS8vIFJlYWQgVFNTSSByZWZlcmVuY2UgYW5kIFRTU0kgYm91bmRhcnkgZm9yIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbi4gVGhpcyBpcyB1Z2x5CisJLy8gMC4gMTFiL2cKKwl7CisJCS8qIHRoZXNlIGFyZSB0ZW1wYXR1cmUgcmVmZXJlbmNlIHZhbHVlICgweDAwIH4gMHhGRSkKKwkJICAgZXg6IDB4MDAgMHgxNSAweDI1IDB4NDUgMHg4OCAweEEwIDB4QjUgMHhEMCAweEYwCisJCSAgIFRzc2lQbHVzQm91bmRhcnlHIFs0XSBbM10gWzJdIFsxXSBbMF0gKHNtYWxsZXIpICsKKwkJICAgVHNzaU1pbnVzQm91bmRhcnlHWzBdIFsxXSBbMl0gWzNdIFs0XSAobGFyZ2VyKSAqLworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NkUsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1s0XSA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1szXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NzAsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1syXSA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1sxXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NzIsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lSZWZHICAgPSBQb3dlci5maWVsZC5CeXRlMDsgLyogcmVmZXJlbmNlIHZhbHVlIFswXSAqLworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzFdID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHg3NCwgUG93ZXIud29yZCk7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1szXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NzYsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzRdID0gUG93ZXIuZmllbGQuQnl0ZTA7CisJCXBBZC0+VHhBZ2NTdGVwRyA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlwQWQtPlR4QWdjQ29tcGVuc2F0ZUcgPSAwOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1swXSA9IHBBZC0+VHNzaVJlZkc7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbMF0gID0gcEFkLT5Uc3NpUmVmRzsKKworCQkvLyBEaXNhYmxlIFR4QWdjIGlmIHRoZSBiYXNlZCB2YWx1ZSBpcyBub3QgcmlnaHQKKwkJaWYgKHBBZC0+VHNzaVJlZkcgPT0gMHhmZikKKwkJCXBBZC0+YkF1dG9UeEFnY0cgPSBGQUxTRTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkUyUFJPTTogRyBUc3NpWy00IC4uICs0XSA9ICVkICVkICVkICVkIC0gJWQgLSVkICVkICVkICVkLCBzdGVwPSVkLCB0dW5pbmc9JWRcbiIsCisJCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1s0XSwgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbM10sIHBBZC0+VHNzaU1pbnVzQm91bmRhcnlHWzJdLCBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1sxXSwKKwkJCXBBZC0+VHNzaVJlZkcsCisJCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzFdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzJdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzNdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzRdLAorCQkJcEFkLT5UeEFnY1N0ZXBHLCBwQWQtPmJBdXRvVHhBZ2NHKSk7CisJfQorCS8vIDEuIDExYQorCXsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ0LCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbNF0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbM10gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ2LCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMV0gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ4LCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpUmVmQSAgID0gUG93ZXIuZmllbGQuQnl0ZTA7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMV0gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweERBLCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5QVsyXSA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzNdID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHhEQywgUG93ZXIud29yZCk7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbNF0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5UeEFnY1N0ZXBBID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCXBBZC0+VHhBZ2NDb21wZW5zYXRlQSA9IDA7CisJCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzBdID0gcEFkLT5Uc3NpUmVmQTsKKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5QVswXSAgPSBwQWQtPlRzc2lSZWZBOworCisJCS8vIERpc2FibGUgVHhBZ2MgaWYgdGhlIGJhc2VkIHZhbHVlIGlzIG5vdCByaWdodAorCQlpZiAocEFkLT5Uc3NpUmVmQSA9PSAweGZmKQorCQkJcEFkLT5iQXV0b1R4QWdjQSA9IEZBTFNFOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRTJQUk9NOiBBIFRzc2lbLTQgLi4gKzRdID0gJWQgJWQgJWQgJWQgLSAlZCAtJWQgJWQgJWQgJWQsIHN0ZXA9JWQsIHR1bmluZz0lZFxuIiwKKwkJCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzRdLCBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVszXSwgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMl0sIHBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzFdLAorCQkJcEFkLT5Uc3NpUmVmQSwKKwkJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMV0sIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMl0sIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbM10sIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbNF0sCisJCQlwQWQtPlR4QWdjU3RlcEEsIHBBZC0+YkF1dG9UeEFnY0EpKTsKKwl9CisJcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSA9IDB4MDsKKworCS8vIFJlYWQgZnJlcXVlbmN5IG9mZnNldCBzZXR0aW5nIGZvciBSRgorCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0ZSRVFfT0ZGU0VULCB2YWx1ZSk7CisJaWYgKCh2YWx1ZSAmIDB4MDBGRikgIT0gMHgwMEZGKQorCQlwQWQtPlJmRnJlcU9mZnNldCA9IChVTE9ORykgKHZhbHVlICYgMHgwMEZGKTsKKwllbHNlCisJCXBBZC0+UmZGcmVxT2Zmc2V0ID0gMDsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJFMlBST006IFJGIEZyZXFPZmZzZXQ9MHglbHggXG4iLCBwQWQtPlJmRnJlcU9mZnNldCkpOworCisJLy9Db3VudHJ5UmVnaW9uIGJ5dGUgb2Zmc2V0ICgzOGgpCisJdmFsdWUgPSBwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVsyXSA+PiA4OwkJLy8gMi40RyBiYW5kCisJdmFsdWUyID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMl0gJiAweDAwRkY7CS8vIDVHIGJhbmQKKworCWlmICgodmFsdWUgPD0gUkVHSU9OX01BWElNVU1fQkdfQkFORCkgJiYgKHZhbHVlMiA8PSBSRUdJT05fTUFYSU1VTV9BX0JBTkQpKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiA9ICgoVUNIQVIpIHZhbHVlKSB8IDB4ODA7CisJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCA9ICgoVUNIQVIpIHZhbHVlMikgfCAweDgwOworCQlUbXBQaHkgPSBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlOworCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gMHhmZjsKKwkJUlRNUFNldFBoeU1vZGUocEFkLCBUbXBQaHkpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlTZXRDb21tb25IVChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCX0KKworCS8vCisJLy8gR2V0IFJTU0kgT2Zmc2V0IG9uIEVFUFJPTSAweDlBaCAmIDB4OUNoLgorCS8vIFRoZSB2YWxpZCB2YWx1ZSBhcmUgKC0xMCB+IDEwKQorCS8vCisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9CR19PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkJHUnNzaU9mZnNldDAgPSB2YWx1ZSAmIDB4MDBmZjsKKwlwQWQtPkJHUnNzaU9mZnNldDEgPSAodmFsdWUgPj4gOCk7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9CR19PRkZTRVQrMiwgdmFsdWUpOworCXBBZC0+QkdSc3NpT2Zmc2V0MiA9IHZhbHVlICYgMHgwMGZmOworCXBBZC0+QUxOQUdhaW4xID0gKHZhbHVlID4+IDgpOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0xOQV9PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkJMTkFHYWluID0gdmFsdWUgJiAweDAwZmY7CisJcEFkLT5BTE5BR2FpbjAgPSAodmFsdWUgPj4gOCk7CisKKwkvLyBWYWxpZGF0ZSAxMWIvZyBSU1NJXzAgb2Zmc2V0LgorCWlmICgocEFkLT5CR1Jzc2lPZmZzZXQwIDwgLTEwKSB8fCAocEFkLT5CR1Jzc2lPZmZzZXQwID4gMTApKQorCQlwQWQtPkJHUnNzaU9mZnNldDAgPSAwOworCisJLy8gVmFsaWRhdGUgMTFiL2cgUlNTSV8xIG9mZnNldC4KKwlpZiAoKHBBZC0+QkdSc3NpT2Zmc2V0MSA8IC0xMCkgfHwgKHBBZC0+QkdSc3NpT2Zmc2V0MSA+IDEwKSkKKwkJcEFkLT5CR1Jzc2lPZmZzZXQxID0gMDsKKworCS8vIFZhbGlkYXRlIDExYi9nIFJTU0lfMiBvZmZzZXQuCisJaWYgKChwQWQtPkJHUnNzaU9mZnNldDIgPCAtMTApIHx8IChwQWQtPkJHUnNzaU9mZnNldDIgPiAxMCkpCisJCXBBZC0+QkdSc3NpT2Zmc2V0MiA9IDA7CisKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9SU1NJX0FfT0ZGU0VULCB2YWx1ZSk7CisJcEFkLT5BUnNzaU9mZnNldDAgPSB2YWx1ZSAmIDB4MDBmZjsKKwlwQWQtPkFSc3NpT2Zmc2V0MSA9ICh2YWx1ZSA+PiA4KTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIChFRVBST01fUlNTSV9BX09GRlNFVCsyKSwgdmFsdWUpOworCXBBZC0+QVJzc2lPZmZzZXQyID0gdmFsdWUgJiAweDAwZmY7CisJcEFkLT5BTE5BR2FpbjIgPSAodmFsdWUgPj4gOCk7CisKKwlpZiAoKChVQ0hBUilwQWQtPkFMTkFHYWluMSA9PSAweEZGKSB8fCAocEFkLT5BTE5BR2FpbjEgPT0gMHgwMCkpCisJCXBBZC0+QUxOQUdhaW4xID0gcEFkLT5BTE5BR2FpbjA7CisJaWYgKCgoVUNIQVIpcEFkLT5BTE5BR2FpbjIgPT0gMHhGRikgfHwgKHBBZC0+QUxOQUdhaW4yID09IDB4MDApKQorCQlwQWQtPkFMTkFHYWluMiA9IHBBZC0+QUxOQUdhaW4wOworCisJLy8gVmFsaWRhdGUgMTFhIFJTU0lfMCBvZmZzZXQuCisJaWYgKChwQWQtPkFSc3NpT2Zmc2V0MCA8IC0xMCkgfHwgKHBBZC0+QVJzc2lPZmZzZXQwID4gMTApKQorCQlwQWQtPkFSc3NpT2Zmc2V0MCA9IDA7CisKKwkvLyBWYWxpZGF0ZSAxMWEgUlNTSV8xIG9mZnNldC4KKwlpZiAoKHBBZC0+QVJzc2lPZmZzZXQxIDwgLTEwKSB8fCAocEFkLT5BUnNzaU9mZnNldDEgPiAxMCkpCisJCXBBZC0+QVJzc2lPZmZzZXQxID0gMDsKKworCS8vVmFsaWRhdGUgMTFhIFJTU0lfMiBvZmZzZXQuCisJaWYgKChwQWQtPkFSc3NpT2Zmc2V0MiA8IC0xMCkgfHwgKHBBZC0+QVJzc2lPZmZzZXQyID4gMTApKQorCQlwQWQtPkFSc3NpT2Zmc2V0MiA9IDA7CisKKwkvLworCS8vIEdldCBMRUQgU2V0dGluZy4KKwkvLworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgzYSwgdmFsdWUpOworCXBBZC0+TGVkQ250bC53b3JkID0gKHZhbHVlJjB4ZmYwMCkgPj4gODsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9MRUQxX09GRlNFVCwgdmFsdWUpOworCXBBZC0+TGVkMSA9IHZhbHVlOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0xFRDJfT0ZGU0VULCB2YWx1ZSk7CisJcEFkLT5MZWQyID0gdmFsdWU7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTEVEM19PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkxlZDMgPSB2YWx1ZTsKKworCVJUTVBSZWFkVHhQd3JQZXJSYXRlKHBBZCk7CisKKyNpZmRlZiBTSU5HTEVfU0tVCisJLy9wQWQtPkNvbW1vbkNmZy5EZWZpbmVNYXhUeFB3ciA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9ERUZJTkVfTUFYX1RYUFdSKTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9ERUZJTkVfTUFYX1RYUFdSLCBwQWQtPkNvbW1vbkNmZy5EZWZpbmVNYXhUeFB3cik7CisjZW5kaWYgLy8gU0lOR0xFX1NLVSAvLworI2lmZGVmIFJUMzB4eAorCWlmIChJU19SVDMweHgocEFkKSkKKwl7CisJCWVGdXNlUGh5c2ljYWxSZWFkUmVnaXN0ZXJzKHBBZCwgRUZVU0VfVEFHLCAyLCAmdmFsdWUpOworCQlwQWQtPkVGdXNlVGFnID0gKHZhbHVlICYgMHhmZik7CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIE5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTZXQgZGVmYXVsdCB2YWx1ZSBmcm9tIEVFUFJPTQorCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJTklDSW5pdEFzaWNGcm9tRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCVVJTlQzMgkJCQkJZGF0YSA9IDA7CisJVUNIQVIJQkJQUjEgPSAwOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCVVTSE9SVAkJCQkJaTsKKwlFRVBST01fQU5URU5OQV9TVFJVQwlBbnRlbm5hOworCUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQyAgICBOaWNDb25maWcyOworCVVDSEFSCUJCUFIzID0gMDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJbml0QXNpY0Zyb21FRVBST01cbiIpKTsKKwlmb3IoaSA9IDM7IGkgPCBOVU1fRUVQUk9NX0JCUF9QQVJNUzsgaSsrKQorCXsKKwkJVUNIQVIgQmJwUmVnSWR4LCBCYnBWYWx1ZTsKKworCQlpZiAoKHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2ldICE9IDB4RkZGRikgJiYgKHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2ldICE9IDApKQorCQl7CisJCQlCYnBSZWdJZHggPSAoVUNIQVIpKHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2ldID4+IDgpOworCQkJQmJwVmFsdWUgID0gKFVDSEFSKShwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVtpXSAmIDB4ZmYpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJicFJlZ0lkeCwgQmJwVmFsdWUpOworCQl9CisJfQorCisJQW50ZW5uYS53b3JkID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMF07CisJaWYgKEFudGVubmEud29yZCA9PSAweEZGRkYpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFMlBST00gZXJyb3IsIGhhcmQgY29kZSBhcyAweCUwNHhcbiIsIEFudGVubmEud29yZCkpOworCQlCVUdfT04oQW50ZW5uYS53b3JkID09IDB4RkZGRik7CisJfQorCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gKFVDSEFSKSBBbnRlbm5hLmZpZWxkLlJ4UGF0aDsKKwlwQWQtPlJmSWNUeXBlID0gKFVDSEFSKSBBbnRlbm5hLmZpZWxkLlJmSWNUeXBlOworCisJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJwQWQtPlJmSWNUeXBlID0gJWQsIFJlYWxSeFBhdGg9JWQsIFR4UGF0aCA9ICVkXG4iLCBwQWQtPlJmSWNUeXBlLCBwQWQtPk1sbWUuUmVhbFJ4UGF0aCxBbnRlbm5hLmZpZWxkLlR4UGF0aCkpOworCisJLy8gU2F2ZSB0aGUgYW50ZW5uYSBmb3IgZnV0dXJlIHVzZQorCXBBZC0+QW50ZW5uYS53b3JkID0gQW50ZW5uYS53b3JkOworCisJTmljQ29uZmlnMi53b3JkID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMV07CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAoKE5pY0NvbmZpZzIud29yZCAmIDB4MDBmZikgPT0gMHhmZikKKwkJeworCQkJTmljQ29uZmlnMi53b3JkICY9IDB4ZmYwMDsKKwkJfQorCisJCWlmICgoTmljQ29uZmlnMi53b3JkID4+IDgpID09IDB4ZmYpCisJCXsKKwkJCU5pY0NvbmZpZzIud29yZCAmPSAweDAwZmY7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBTYXZlIHRoZSBhbnRlbm5hIGZvciBmdXR1cmUgdXNlCisJcEFkLT5OaWNDb25maWcyLndvcmQgPSBOaWNDb25maWcyLndvcmQ7CisKKwkvLyBzZXQgZGVmYXVsdCBhbnRlbm5hIGFzIG1haW4KKwlpZiAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApCisJCUFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOworCisJLy8KKwkvLyBTZW5kIExFRCBTZXR0aW5nIHRvIE1DVS4KKwkvLworCWlmIChwQWQtPkxlZENudGwud29yZCA9PSAweEZGKQorCXsKKwkJcEFkLT5MZWRDbnRsLndvcmQgPSAweDAxOworCQlwQWQtPkxlZDEgPSAweDU1NTU7CisJCXBBZC0+TGVkMiA9IDB4MjIyMTsKKworI2lmZGVmIFJUMjg3MAorCQlwQWQtPkxlZDMgPSAweDU2Mjc7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJfQorCisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUyLCAweGZmLCAoVUNIQVIpcEFkLT5MZWQxLCAoVUNIQVIpKHBBZC0+TGVkMSA+PiA4KSk7CisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUzLCAweGZmLCAoVUNIQVIpcEFkLT5MZWQyLCAoVUNIQVIpKHBBZC0+TGVkMiA+PiA4KSk7CisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDU0LCAweGZmLCAoVUNIQVIpcEFkLT5MZWQzLCAoVUNIQVIpKHBBZC0+TGVkMyA+PiA4KSk7CisgICAgcEFkLT5MZWRJbmRpY2F0b3JTdHJlZ3RoID0gMHhGRjsKKyAgICBSVE1QU2V0U2lnbmFsTEVEKHBBZCwgLTEwMCk7CS8vIEZvcmNlIHNpZ25hbCBzdHJlbmd0aCBMZWQgdG8gYmUgdHVybmVkIG9mZiwgYmVmb3JlIGxpbmsgdXAKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBSZWFkIEhhcmR3YXJlIGNvbnRyb2xsZWQgUmFkaW8gc3RhdGUgZW5hYmxlIGJpdAorCQlpZiAoTmljQ29uZmlnMi5maWVsZC5IYXJkd2FyZVJhZGlvQ29udHJvbCA9PSAxKQorCQl7CisJCQlwQWQtPlN0YUNmZy5iSGFyZHdhcmVSYWRpbyA9IFRSVUU7CisKKwkJCS8vIFJlYWQgR1BJTyBwaW4yIGFzIEhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8gc3RhdGUKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgR1BJT19DVFJMX0NGRywgJmRhdGEpOworCQkJaWYgKChkYXRhICYgMHgwNCkgPT0gMCkKKwkJCXsKKwkJCQlwQWQtPlN0YUNmZy5iSHdSYWRpbyA9IEZBTFNFOworCQkJCXBBZC0+U3RhQ2ZnLmJSYWRpbyA9IEZBTFNFOworLy8JCQkJUlRNUF9JT19XUklURTMyKHBBZCwgUFdSX1BJTl9DRkcsIDB4MDAwMDE4MTgpOworCQkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRik7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJcEFkLT5TdGFDZmcuYkhhcmR3YXJlUmFkaW8gPSBGQUxTRTsKKworCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorCQl7CisJCQlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09GRik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09OKTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIFR1cm4gb2ZmIHBhdGNoaW5nIGZvciBjYXJkYnVzIGNvbnRyb2xsZXIKKwlpZiAoTmljQ29uZmlnMi5maWVsZC5DYXJkYnVzQWNjZWxlcmF0aW9uID09IDEpCisJeworLy8JCXBBZC0+YlRlc3QxID0gVFJVRTsKKwl9CisKKwlpZiAoTmljQ29uZmlnMi5maWVsZC5EeW5hbWljVHhBZ2NDb250cm9sID09IDEpCisJCXBBZC0+YkF1dG9UeEFnY0EgPSBwQWQtPmJBdXRvVHhBZ2NHID0gVFJVRTsKKwllbHNlCisJCXBBZC0+YkF1dG9UeEFnY0EgPSBwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7CisJLy8KKwkvLyBTaW5jZSBCQlAgaGFzIGJlZW4gcHJvZ2FtZWQsIHRvIG1ha2Ugc3VyZSBCQlAgc2V0dGluZyB3aWxsIGJlCisJLy8gdXBhdGUgaW5zaWRlIG9mIEFzaWNBbnRlbm5hU2VsZWN0LCBzbyByZXNldCB0byBVTktOT1dOX0JBTkQhIQorCS8vCisJcEFkLT5Db21tb25DZmcuQmFuZFN0YXRlID0gVU5LTk9XTl9CQU5EOworCisJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQkJQUjMpOworCUJCUFIzICY9ICh+MHgxOCk7CisJaWYocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAzKQorCXsKKwkJQkJQUjMgfD0gKDB4MTApOworCX0KKwllbHNlIGlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwl7CisJCUJCUFIzIHw9ICgweDgpOworCX0KKwllbHNlIGlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwl7CisJCUJCUFIzIHw9ICgweDApOworCX0KKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBSMyk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gSGFuZGxlIHRoZSBkaWZmZXJlbmNlIHdoZW4gMVQKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQkJQUjEpOworCQlpZihwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpCisJCXsKKwkJQkJQUjEgJj0gKH4weDE4KTsKKwkJfQorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCQlBSMSk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVXNlIEh3IFJhZGlvIENvbnRyb2wgUGluPSVkOyBpZiB1c2VkIFBpbj0lZDtcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJIYXJkd2FyZVJhZGlvLCBwQWQtPkNvbW1vbkNmZy5iSGFyZHdhcmVSYWRpbykpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUeFBhdGggPSAlZCwgUnhQYXRoID0gJWQsIFJGSUM9JWQsIFBvbGFyK0xFRCBtb2RlPSV4XG4iLCBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLCBwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoLCBwQWQtPlJmSWNUeXBlLCBwQWQtPkxlZENudGwud29yZCkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0QXNpY0Zyb21FRVBST01cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUluaXRpYWxpemUgTklDIGhhcmR3YXJlCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJTklDSW5pdGlhbGl6ZUFkYXB0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICBCT09MRUFOICAgIGJIYXJkUmVzZXQpCit7CisJTkRJU19TVEFUVVMgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7CisvLwlJTlRfTUFTS19DU1JfU1RSVUMJCUludE1hc2s7CisJVUxPTkcJaSA9MCwgaj0wOworCUFDX1RYT1BfQ1NSMF9TVFJVQwljc3IwOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0luaXRpYWxpemVBZGFwdGVyXG4iKSk7CisKKwkvLyAzLiBTZXQgRE1BIGdsb2JhbCBjb25maWd1cmF0aW9uIGV4Y2VwdCBUWF9ETUFfRU4gYW5kIFJYX0RNQV9FTiBiaXRzOgorcmV0cnk6CisJaSA9IDA7CisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsKKwkJaWYgKChHbG9DZmcuZmllbGQuVHhETUFCdXN5ID09IDApICAmJiAoR2xvQ2ZnLmZpZWxkLlJ4RE1BQnVzeSA9PSAwKSkKKwkJCWJyZWFrOworCisJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCWkrKzsKKwl9d2hpbGUgKCBpPDEwMCk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IERNQSBvZmZzZXQgMHgyMDggPSAweCV4XG4iLCBHbG9DZmcud29yZCkpOworCUdsb0NmZy53b3JkICY9IDB4ZmYwOworCUdsb0NmZy5maWVsZC5FblRYV3JpdGVCYWNrRERPTkUgPTE7CisJUlRNUF9JT19XUklURTMyKHBBZCwgV1BETUFfR0xPX0NGRywgR2xvQ2ZnLndvcmQpOworCisJLy8gUmVjb3JkIEhXIEJlYWNvbiBvZmZzZXQKKwlwQWQtPkJlYWNvbk9mZnNldFswXSA9IEhXX0JFQUNPTl9CQVNFMDsKKwlwQWQtPkJlYWNvbk9mZnNldFsxXSA9IEhXX0JFQUNPTl9CQVNFMTsKKwlwQWQtPkJlYWNvbk9mZnNldFsyXSA9IEhXX0JFQUNPTl9CQVNFMjsKKwlwQWQtPkJlYWNvbk9mZnNldFszXSA9IEhXX0JFQUNPTl9CQVNFMzsKKwlwQWQtPkJlYWNvbk9mZnNldFs0XSA9IEhXX0JFQUNPTl9CQVNFNDsKKwlwQWQtPkJlYWNvbk9mZnNldFs1XSA9IEhXX0JFQUNPTl9CQVNFNTsKKwlwQWQtPkJlYWNvbk9mZnNldFs2XSA9IEhXX0JFQUNPTl9CQVNFNjsKKwlwQWQtPkJlYWNvbk9mZnNldFs3XSA9IEhXX0JFQUNPTl9CQVNFNzsKKworCS8vCisJLy8gd3JpdGUgYWxsIHNoYXJlZCBSaW5nJ3MgYmFzZSBhZGRyZXNzIGludG8gQVNJQworCS8vCisKKwkvLyBhc2ljIHNpbXVsYXRpb24gc2VxdWVuY2UgcHV0IHRoaXMgYWhlYWQgYmVmb3JlIGxvYWRpbmcgZmlybXdhcmUuCisJLy8gcGJmIGhhcmR3YXJlIHJlc2V0CisKKwkvLyBJbml0aWFsemUgQVNJQyBmb3IgVFggJiBSeCBvcGVyYXRpb24KKwlpZiAoTklDSW5pdGlhbGl6ZUFzaWMocEFkICwgYkhhcmRSZXNldCkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCWlmIChqKysgPT0gMCkKKwkJeworCQkJTklDTG9hZEZpcm13YXJlKHBBZCk7CisJCQlnb3RvIHJldHJ5OworCQl9CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCisKKworCS8vIFdNTSBwYXJhbWV0ZXIKKwljc3IwLndvcmQgPSAwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9UWE9QMF9DRkcsIGNzcjAud29yZCk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKKwl7CisJCWNzcjAuZmllbGQuQWMwVHhvcCA9IDE5MjsJLy8gQUNfVkk6IDE5MiozMnVzIH49IDZtcworCQljc3IwLmZpZWxkLkFjMVR4b3AgPSA5NjsJLy8gQUNfVk86IDk2KjMydXMgIH49IDNtcworCX0KKwllbHNlCisJeworCQljc3IwLmZpZWxkLkFjMFR4b3AgPSA5NjsJLy8gQUNfVkk6IDk2KjMydXMgfj0gM21zCisJCWNzcjAuZmllbGQuQWMxVHhvcCA9IDQ4OwkvLyBBQ19WTzogNDgqMzJ1cyB+PSAxLjVtcworCX0KKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IwLndvcmQpOworCisKKworCisJLy8gcmVzZXQgYWN0aW9uCisJLy8gTG9hZCBmaXJtd2FyZQorCS8vICBTdGF0dXMgPSBOSUNMb2FkRmlybXdhcmUocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0aWFsaXplQWRhcHRlclxuIikpOworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlJbml0aWFsaXplIEFTSUMKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUwlOSUNJbml0aWFsaXplQXNpYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgQk9PTEVBTgkJYkhhcmRSZXNldCkKK3sKKwlVTE9ORwkJCUluZGV4ID0gMDsKKwlVQ0hBUgkJCVIwID0gMHhmZjsKKwlVSU5UMzIJCQlNYWNDc3IxMiA9IDAsIENvdW50ZXIgPSAwOworI2lmZGVmIFJUMjg3MAorCVVJTlQzMgkJCU1hY0NzcjAgPSAwOworCU5UU1RBVFVTCQlTdGF0dXM7CisJVUNIQVIJCQlWYWx1ZSA9IDB4ZmY7CisjZW5kaWYgLy8gUlQyODcwIC8vCisjaWZkZWYgUlQzMHh4CisJVUlOVDMyCQkJZUZ1c2VDdHJsOworI2VuZGlmIC8vIFJUMzB4eCAvLworCVVTSE9SVAkJCUtleUlkeDsKKwlJTlQJCQkJaSxhcGlkeDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJbml0aWFsaXplQXNpY1xuIikpOworCisKKyNpZmRlZiBSVDI4NzAKKwkvLworCS8vIE1ha2Ugc3VyZSBNQUMgZ2V0cyByZWFkeSBhZnRlciBOSUNMb2FkRmlybXdhcmUoKS4KKwkvLworCUluZGV4ID0gMDsKKworCS8vVG8gYXZvaWQgaGFuZy1vbiBpc3N1ZSB3aGVuIGludGVyZmFjZSB1cCBpbiBrZXJuZWwgMi40LAorCS8vd2UgdXNlIGEgbG9jYWwgdmFyaWFibGUgIk1hY0NzcjAiIGluc3RlYWQgb2YgdXNpbmcgInBBZC0+TUFDVmVyc2lvbiIgZGlyZWN0bHkuCisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX0NTUjAsICZNYWNDc3IwKTsKKworCQlpZiAoKE1hY0NzcjAgIT0gMHgwMCkgJiYgKE1hY0NzcjAgIT0gMHhGRkZGRkZGRikpCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDEwKTsKKwl9IHdoaWxlIChJbmRleCsrIDwgMTAwKTsKKworCXBBZC0+TUFDVmVyc2lvbiA9IE1hY0NzcjA7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTUFDX0NTUjAgIFsgVmVyOlJldj0weCUwOHhdXG4iLCBwQWQtPk1BQ1ZlcnNpb24pKTsKKwkvLyB0dXJuIG9uIGJpdDEzIChzZXQgdG8gemVybykgYWZ0ZXIgcnQyODYwRC4gVGhpcyBpcyB0byBzb2x2ZSBoaWdoLWN1cnJlbnQgaXNzdWUuCisJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZNYWNDc3IxMik7CisJTWFjQ3NyMTIgJj0gKH4weDIwMDApOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgTWFjQ3NyMTIpOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDMpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFVTQl9ETUFfQ0ZHLCAweDApOworCVN0YXR1cyA9IFJUVVNCVmVuZGVyUmVzZXQocEFkKTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgwKTsKKworCS8vIEluaXRpYWxpemUgTUFDIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUKKwlmb3IoSW5kZXg9MDsgSW5kZXg8TlVNX01BQ19SRUdfUEFSTVM7IEluZGV4KyspCisJeworI2lmZGVmIFJUMzA3MAorCQlpZiAoKE1BQ1JlZ1RhYmxlW0luZGV4XS5SZWdpc3RlciA9PSBUWF9TV19DRkcwKSAmJiAoSVNfUlQzMDcwKHBBZCkgfHwgSVNfUlQzMDcxKHBBZCkpKQorCQl7CisJCQlNQUNSZWdUYWJsZVtJbmRleF0uVmFsdWUgPSAweDAwMDAwNDAwOworCQl9CisjZW5kaWYgLy8gUlQzMDcwIC8vCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIChVU0hPUlQpTUFDUmVnVGFibGVbSW5kZXhdLlJlZ2lzdGVyLCBNQUNSZWdUYWJsZVtJbmRleF0uVmFsdWUpOworCX0KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5VTV9TVEFfTUFDX1JFR19QQVJNUzsgSW5kZXgrKykKKwkJeworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgKFVTSE9SVClTVEFNQUNSZWdUYWJsZVtJbmRleF0uUmVnaXN0ZXIsIFNUQU1BQ1JlZ1RhYmxlW0luZGV4XS5WYWx1ZSk7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBSVDMweHgKKwkvLyBJbml0aWFsaXplIFJUMzA3MCBzZXJpYWwgTUFjIHJlZ2lzdGVycyB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBSVDI4NzAgc2VyaWFsCisJaWYgKElTX1JUMzA5MChwQWQpKQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMSwgMCk7CisKKwkJLy8gUlQzMDcxIHZlcnNpb24gRSBoYXMgZml4ZWQgdGhpcyBpc3N1ZQorCQlpZiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpCisJCXsKKwkJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuREFDVGVzdEJpdCA9PSAxKQorCQkJeworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzIsIDB4MUYpOwkvLyBUbyBmaXggdGhyb3VnaHB1dCBkcm9wIGRyYXN0aWNhbGx5CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMiwgMHgwRik7CS8vIFRvIGZpeCB0aHJvdWdocHV0IGRyb3AgZHJhc3RpY2FsbHkKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzIsIDB4MCk7CisJCX0KKwl9CisJZWxzZSBpZiAoSVNfUlQzMDcwKHBBZCkpCisJeworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9TV19DRkcxLCAwKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMiwgMHgxRik7CS8vIFRvIGZpeCB0aHJvdWdocHV0IGRyb3AgZHJhc3RpY2FsbHkKKwl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwkvLworCS8vIEJlZm9yZSBwcm9ncmFtIEJCUCwgd2UgbmVlZCB0byB3YWl0IEJCUC9SRiBnZXQgd2FrZSB1cC4KKwkvLworCUluZGV4ID0gMDsKKwlkbworCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1RBVFVTX0NGRywgJk1hY0NzcjEyKTsKKworCQlpZiAoKE1hY0NzcjEyICYgMHgwMykgPT0gMCkJLy8gaWYgQkIuUkYgaXMgc3RhYmxlCisJCQlicmVhazsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGVjayBNQUNfU1RBVFVTX0NGRyAgPSBCdXN5ID0gJXhcbiIsIE1hY0NzcjEyKSk7CisJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJfSB3aGlsZSAoSW5kZXgrKyA8IDEwMCk7CisKKyAgICAvLyBUaGUgY29tbWFuZHMgdG8gZmlybXdhcmUgc2hvdWxkIGJlIGFmdGVyIHRoZXNlIGNvbW1hbmRzLCB0aGVzZSBjb21tYW5kcyB3aWxsIGluaXQgZmlybXdhcmUKKwkvLyBQQ0kgYW5kIFVTQiBhcmUgbm90IHRoZSBzYW1lIGJlY2F1c2UgUENJIGRyaXZlciBuZWVkcyB0byB3YWl0IGZvciBQQ0kgYnVzIHJlYWR5CisJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX0JCUF9BR0VOVCwgMCk7CS8vIGluaXRpYWxpemUgQkJQIFIvVyBhY2Nlc3MgYWdlbnQKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fTUFJTEJPWF9DU1IsIDApOworCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisKKwkvLyBSZWFkIEJCUCByZWdpc3RlciwgbWFrZSBzdXJlIEJCUCBpcyB1cCBhbmQgcnVubmluZyBiZWZvcmUgd3JpdGUgbmV3IGRhdGEKKwlJbmRleCA9IDA7CisJZG8KKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMCwgJlIwKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQkJQIHZlcnNpb24gPSAleFxuIiwgUjApKTsKKwl9IHdoaWxlICgoKytJbmRleCA8IDIwKSAmJiAoKFIwID09IDB4ZmYpIHx8IChSMCA9PSAweDAwKSkpOworCS8vQVNTRVJUKEluZGV4IDwgMjApOyAvL3RoaXMgd2lsbCBjYXVzZSBCU09EIG9uIENoZWNrLWJ1aWxkIGRyaXZlcgorCisJaWYgKChSMCA9PSAweGZmKSB8fCAoUjAgPT0gMHgwMCkpCisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCisJLy8gSW5pdGlhbGl6ZSBCQlAgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5VTV9CQlBfUkVHX1BBUk1TOyBJbmRleCsrKQorCXsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUFJlZ1RhYmxlW0luZGV4XS5SZWdpc3RlciwgQkJQUmVnVGFibGVbSW5kZXhdLlZhbHVlKTsKKwl9CisKKwkvLyBmb3IgcnQyODYwRSBhbmQgYWZ0ZXIsIGluaXQgQkJQX1I4NCB3aXRoIDB4MTkuIFRoaXMgaXMgZm9yIGV4dGVuc2lvbiBjaGFubmVsIG92ZXJsYXBwaW5nIElPVC4KKwkvLyBSVDMwOTAgc2hvdWxkIG5vdCBwcm9ncmFtIEJCUCBSODQgdG8gMHgxOSwgb3RoZXJ3aXNlIFRYIHdpbGwgYmxvY2suCisJaWYgKCgocEFkLT5NQUNWZXJzaW9uJjB4ZmZmZikgIT0gMHgwMTAxKSAmJiAoIUlTX1JUMzB4eChwQWQpKSkKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODQsIDB4MTkpOworCisvLyBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cAorI2lmZGVmIFJUMzB4eAorCWlmIChJU19SVDMweHgocEFkKSkKKwl7CS8vdXBkYXRlIGZvciBSVDMwNzAvNzEvNzIvOTAvOTEvOTIuCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc5LCAweDEzKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODAsIDB4MDUpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MSwgMHgzMyk7CisJfQorCisJaWYgKElTX1JUMzA5MChwQWQpKQorCXsKKwkJVUNIQVIJCWJicHJlZz0wOworCisJCS8vIGVuYWJsZSBEQyBmaWx0ZXIKKwkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID49IDB4MDIxMSkKKwkJeworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMTAzLCAweGMwKTsKKwkJfQorCisJCS8vIGltcHJvdmUgcG93ZXIgY29uc3VtcHRpb24KKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxMzgsICZiYnByZWcpOworCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQl7CisJCQkvLyB0dXJuIG9mZiB0eCBEQUNfMQorCQkJYmJwcmVnID0gKGJicHJlZyB8IDB4MjApOworCQl9CisKKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJeworCQkJLy8gdHVybiBvZmYgdHggQURDXzEKKwkJCWJicHJlZyAmPSAofjB4Mik7CisJCX0KKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMTM4LCBiYnByZWcpOworCisJCS8vIGltcHJvdmUgcG93ZXIgY29uc3VtcHRpb24gaW4gUlQzMDcxIFZlci5FCisJCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA+PSAweDAyMTEpCisJCXsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMzEsICZiYnByZWcpOworCQkJYmJwcmVnICY9ICh+MHgzKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMxLCBiYnByZWcpOworCQl9CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworLy8gZW5kIGpvaG5saQorCisJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCXsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MTYpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxMik7CisgICAgfQorCisJaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMjg4MEVfVkVSU0lPTiAmJiBwQWQtPk1BQ1ZlcnNpb24gPCBSQUxJTktfMzA3MF9WRVJTSU9OKSAvLyAzKjMKKwl7CisJCS8vIGVubGFyZ2UgTUFYX0xFTl9DRkcKKwkJVUlOVDMyIGNzcjsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQVhfTEVOX0NGRywgJmNzcik7CisJCWNzciAmPSAweEZGRjsKKwkJY3NyIHw9IDB4MjAwMDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFYX0xFTl9DRkcsIGNzcik7CisJfQorCisjaWZkZWYgUlQyODcwCit7CisJVUNIQVIJTUFDX1ZhbHVlW109ezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMCwwfTsKKworCS8vSW5pdGlhbGl6ZSBXQ0lEIHRhYmxlCisJVmFsdWUgPSAweGZmOworCWZvcihJbmRleCA9MCA7SW5kZXggPCAyNTQ7SW5kZXgrKykKKwl7CisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIChVU0hPUlQpKE1BQ19XQ0lEX0JBU0UgKyBJbmRleCAqIDgpLCBNQUNfVmFsdWUsIDgpOworCX0KK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vIEFkZCByYWRpbyBvZmYgY29udHJvbAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorCQl7CisvLwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBXUl9QSU5fQ0ZHLCAweDAwMDAxODE4KTsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRik7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgUmFkaW8gT2ZmXG4iKSk7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBDbGVhciByYXcgY291bnRlcnMKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQwLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMSwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDIsICZDb3VudGVyKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMSwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDIsICZDb3VudGVyKTsKKworCS8vIEFTSUMgd2lsbCBrZWVwIGdhcmJhZ2UgdmFsdWUgYWZ0ZXIgYm9vdAorCS8vIENsZWFyIGFsbCBzZWFyZWQga2V5IHRhYmxlIHdoZW4gaW5pdGlhbAorCS8vIFRoaXMgcm91dGluZSBjYW4gYmUgaWdub3JlZCBpbiByYWRpby1PTi9PRkYgb3BlcmF0aW9uLgorCWlmIChiSGFyZFJlc2V0KQorCXsKKwkJZm9yIChLZXlJZHggPSAwOyBLZXlJZHggPCA0OyBLZXlJZHgrKykKKwkJeworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UgKyA0KktleUlkeCwgMCk7CisJCX0KKworCS8vIENsZWFyIGFsbCBwYWlyd2lzZSBrZXkgdGFibGUgd2hlbiBpbml0aWFsCisJZm9yIChLZXlJZHggPSAwOyBLZXlJZHggPCAyNTY7IEtleUlkeCsrKQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoS2V5SWR4ICogSFdfV0NJRF9BVFRSSV9TSVpFKSwgMSk7CisJfQorCX0KKworCS8vIGFzc2VydCBIT1NUIHJlYWR5IGJpdAorLy8gIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxLCAweDApOyAvLyAyMDA0LTA5LTE0IGFza2VkIGJ5IE1hcmsKKy8vICBSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQ1NSMSwgMHg0KTsKKworCS8vIEl0IGlzbid0IG5lY2Vzc2FyeSB0byBjbGVhciB0aGlzIHNwYWNlIHdoZW4gbm90IGhhcmQgcmVzZXQuCisJaWYgKGJIYXJkUmVzZXQgPT0gVFJVRSkKKwl7CisJCS8vIGNsZWFyIGFsbCBvbi1jaGlwIEJFQUNPTiBmcmFtZSBzcGFjZQorCQlmb3IgKGFwaWR4ID0gMDsgYXBpZHggPCBIV19CRUFDT05fTUFYX0NPVU5UOyBhcGlkeCsrKQorCQl7CisJCQlmb3IgKGkgPSAwOyBpIDwgSFdfQkVBQ09OX09GRlNFVD4+MjsgaSs9NCkKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBwQWQtPkJlYWNvbk9mZnNldFthcGlkeF0gKyBpLCAweDAwKTsKKwkJfQorCX0KKyNpZmRlZiBSVDI4NzAKKwlBc2ljRGlzYWJsZVN5bmMocEFkKTsKKwkvLyBDbGVhciByYXcgY291bnRlcnMKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQwLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMSwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDIsICZDb3VudGVyKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMSwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDIsICZDb3VudGVyKTsKKwkvLyBEZWZhdWx0IFBDSSBjbG9jayBjeWNsZSBwZXIgbXMgaXMgZGlmZmVyZW50IGFzIGRlZmF1bHQgc2V0dGluZywgd2hpY2ggaXMgYmFzZWQgb24gUENJLgorCVJUTVBfSU9fUkVBRDMyKHBBZCwgVVNCX0NZQ19DRkcsICZDb3VudGVyKTsKKwlDb3VudGVyJj0weGZmZmZmZjAwOworCUNvdW50ZXJ8PTB4MDAwMDAxZTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBVU0JfQ1lDX0NGRywgQ291bnRlcik7CisjZW5kaWYgLy8gUlQyODcwIC8vCisjaWZkZWYgUlQzMHh4CisJcEFkLT5iVXNlRWZ1c2U9RkFMU0U7CisJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAmZUZ1c2VDdHJsKTsKKwlwQWQtPmJVc2VFZnVzZSA9ICggKGVGdXNlQ3RybCAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApID8gMSA6IDA7CisJaWYocEFkLT5iVXNlRWZ1c2UpCisJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTlZNIGlzIEVmdXNlXG4iKSk7CisJfQorCWVsc2UKKwl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOVk0gaXMgRUVQUk9NXG4iKSk7CisKKwl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gZm9yIHJ0Mjg2MEUgYW5kIGFmdGVyLCBpbml0IFRYT1BfQ1RSTF9DRkcgd2l0aCAweDU4M2YuIFRoaXMgaXMgZm9yIGV4dGVuc2lvbiBjaGFubmVsIG92ZXJsYXBwaW5nIElPVC4KKwkJaWYgKChwQWQtPk1BQ1ZlcnNpb24mMHhmZmZmKSAhPSAweDAxMDEpCisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWE9QX0NUUkxfQ0ZHLCAweDU4M2YpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0aWFsaXplQXNpY1xuIikpOworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVzZXQgTklDIEFzaWNzCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCQlSZXNldCBOSUMgdG8gaW5pdGlhbCBzdGF0ZSBBUyBJUyBzeXN0ZW0gYm9vdCB1cCB0aW1lLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlOSUNJc3N1ZVJlc2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVJTlQzMglWYWx1ZSA9IDA7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0lzc3VlUmVzZXRcbiIpKTsKKworCS8vIEFib3J0IFR4LCBwcmV2ZW50IEFTSUMgZnJvbSB3cml0aW5nIHRvIEhvc3QgbWVtb3J5CisJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9DTlRMX0NTUiwgMHgwMDFmMDAwMCk7CisKKwkvLyBEaXNhYmxlIFJ4LCByZWdpc3RlciB2YWx1ZSBzdXBwb3NlZCB3aWxsIHJlbWFpbiBhZnRlciByZXNldAorCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCVZhbHVlICY9ICgweGZmZmZmZmYzKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCS8vIElzc3VlIHJlc2V0IGFuZCBjbGVhciBmcm9tIHJlc2V0IHN0YXRlCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDAzKTsgLy8gMjAwNC0wOS0xNyBjaGFuZ2UgZnJvbSAweDAxCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDAwKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJc3N1ZVJlc2V0XG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDaGVjayBBU0lDIHJlZ2lzdGVycyBhbmQgZmluZCBhbnkgcmVhc29uIHRoZSBzeXN0ZW0gbWlnaHQgaGFuZworCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4JTklDQ2hlY2tGb3JIYW5nKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCXJldHVybiAoRkFMU0UpOworfQorCitWT0lEIE5JQ1VwZGF0ZUZpZm9TdGFDb3VudGVycygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlUWF9TVEFfRklGT19TVFJVQwlTdGFGaWZvOworCU1BQ19UQUJMRV9FTlRSWQkJKnBFbnRyeTsKKwlVQ0hBUgkJCQlpID0gMDsKKwlVQ0hBUgkJCXBpZCA9IDAsIHdjaWQgPSAwOworCUNIQVIJCQkJcmVUcnk7CisJVUNIQVIJCQkJc3VjY01DUzsKKworI2lmZGVmIFJBTElOS19BVEUKKwkvKiBOb3RoaW5nIHRvIGRvIGluIEFURSBtb2RlICovCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJCWRvCisJCXsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0ZJRk8sICZTdGFGaWZvLndvcmQpOworCisJCQlpZiAoU3RhRmlmby5maWVsZC5iVmFsaWQgPT0gMCkKKwkJCQlicmVhazsKKworCQkJd2NpZCA9IChVQ0hBUilTdGFGaWZvLmZpZWxkLndjaWQ7CisKKworCQkvKiBpZ25vcmUgTm9BQ0sgYW5kIE1HTVQgZnJhbWUgdXNlIDB4RkYgYXMgV0NJRCAqLworCQkJaWYgKChTdGFGaWZvLmZpZWxkLlR4QWNrUmVxdWlyZWQgPT0gMCkgfHwgKHdjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpKQorCQkJeworCQkJCWkrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogUElEIHN0b3JlIFR4IE1DUyBSYXRlICovCisJCQlwaWQgPSAoVUNIQVIpU3RhRmlmby5maWVsZC5QaWRUeXBlOworCisJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFt3Y2lkXTsKKworCQkJcEVudHJ5LT5EZWJ1Z0ZJRk9Db3VudCsrOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAoU3RhRmlmby5maWVsZC5UeEJGKSAvLyAzKjMKKwkJCQlwRW50cnktPlR4QkZDb3VudCsrOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgVUFQU0RfQVBfU1VQUE9SVAorCQkJVUFQU0RfU1BfQVVFX0hhbmRsZShwQWQsIHBFbnRyeSwgU3RhRmlmby5maWVsZC5UeFN1Y2Nlc3MpOworI2VuZGlmIC8vIFVBUFNEX0FQX1NVUFBPUlQgLy8KKworCQkJaWYgKCFTdGFGaWZvLmZpZWxkLlR4U3VjY2VzcykKKwkJCXsKKwkJCQlwRW50cnktPkZJRk9Db3VudCsrOworCQkJCXBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQrKzsKKworCQkJCWlmIChwRW50cnktPkZJRk9Db3VudCA+PSAxKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIyIpKTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkJcEVudHJ5LT5Ob0JBRGF0YUNvdW50RG93biA9IDY0OworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkJCWlmKHBFbnRyeS0+UHNNb2RlID09IFBXUl9BQ1RJVkUpCisJCQkJCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkJCWludCB0aWQ7CisJCQkJCQlmb3IgKHRpZD0wOyB0aWQ8TlVNX09GX1RJRDsgdGlkKyspCisJCQkJCQl7CisJCQkJCQkJQkFPcmlTZXNzaW9uVGVhckRvd24ocEFkLCBwRW50cnktPkFpZCwgIHRpZCwgRkFMU0UsIEZBTFNFKTsKKwkJCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJCQkJLy8gVXBkYXRlIHRoZSBjb250aW51b3VzIHRyYW5zbWlzc2lvbiBjb3VudGVyIGV4Y2VwdCBQUyBtb2RlCisJCQkJCQlwRW50cnktPkNvbnRpbnVlVHhGYWlsQ250Kys7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvLyBDbGVhciB0aGUgRklGT0NvdW50IHdoZW4gc3RhIGluIFBvd2VyIFNhdmUgbW9kZS4gQmFzaWNhbGx5IHdlIGFzc3VtZQorCQkJCQkJLy8gICAgIHRoaXMgdHggZXJyb3IgaGFwcGVuZWQgZHVlIHRvIHN0YSBqdXN0IGdvIHRvIHNsZWVwLgorCQkJCQkJcEVudHJ5LT5GSUZPQ291bnQgPSAwOworCQkJCQkJcEVudHJ5LT5Db250aW51ZVR4RmFpbENudCA9IDA7CisJCQkJCX0KKwkJCQkJLy9wRW50cnktPkZJRk9Db3VudCA9IDA7CisJCQkJfQorCQkJCS8vcEVudHJ5LT5iU2VuZEJBUiA9IFRSVUU7CisJCQl9CisJCQllbHNlCisJCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJaWYgKChwRW50cnktPlBzTW9kZSAhPSBQV1JfU0FWRSkgJiYgKHBFbnRyeS0+Tm9CQURhdGFDb3VudERvd24gPiAwKSkKKwkJCQl7CisJCQkJCXBFbnRyeS0+Tm9CQURhdGFDb3VudERvd24tLTsKKwkJCQkJaWYgKHBFbnRyeS0+Tm9CQURhdGFDb3VudERvd249PTApCisJCQkJCXsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkBcbiIpKTsKKwkJCQkJfQorCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlwRW50cnktPkZJRk9Db3VudCA9IDA7CisJCQkJcEVudHJ5LT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50Kys7CisJCQkJLy8gdXBkYXRlIE5vRGF0YUlkbGVDb3VudCB3aGVuIHN1Y2Vzc2Z1bCBzZW5kIHBhY2tldCB0byBTVEEuCisJCQkJcEVudHJ5LT5Ob0RhdGFJZGxlQ291bnQgPSAwOworCQkJCXBFbnRyeS0+Q29udGludWVUeEZhaWxDbnQgPSAwOworCQkJfQorCisJCQlzdWNjTUNTID0gU3RhRmlmby5maWVsZC5TdWNjZXNzUmF0ZSAmIDB4N0Y7CisKKwkJCXJlVHJ5ID0gcGlkIC0gc3VjY01DUzsKKworCQkJaWYgKFN0YUZpZm8uZmllbGQuVHhTdWNjZXNzKQorCQkJeworCQkJCXBFbnRyeS0+VFhNQ1NFeHBlY3RlZFtwaWRdKys7CisJCQkJaWYgKHBpZCA9PSBzdWNjTUNTKQorCQkJCXsKKwkJCQkJcEVudHJ5LT5UWE1DU1N1Y2Nlc3NmdWxbcGlkXSsrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwRW50cnktPlRYTUNTQXV0b0ZhbGxCYWNrW3BpZF1bc3VjY01DU10rKzsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEVudHJ5LT5UWE1DU0ZhaWxlZFtwaWRdKys7CisJCQl9CisKKwkJCWlmIChyZVRyeSA+IDApCisJCQl7CisJCQkJaWYgKChwaWQgPj0gMTIpICYmIHN1Y2NNQ1MgPD03KQorCQkJCXsKKwkJCQkJcmVUcnkgLT0gNDsKKwkJCQl9CisJCQkJcEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArPSByZVRyeTsKKwkJCX0KKworCQkJaSsrOworCQkJLy8gQVNJQyBzdG9yZSAxNiBzdGFjaworCQl9IHdoaWxlICggaSA8ICgyKlRYX1JJTkdfU0laRSkgKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVhZCBzdGF0aXN0aWNhbCBjb3VudGVycyBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgcmVjb3JkIHRoZW0KKwkJaW4gc29mdHdhcmUgdmFyaWFibGVzIGZvciBsYXRlciBvbiBxdWVyeQorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIE5JQ1VwZGF0ZVJhd0NvdW50ZXJzKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVJTlQzMglPbGRWYWx1ZTsvLywgVmFsdWUyOworCS8vVUxPTkcJUGFnZVN1bSwgT25lU2VjVHJhbnNtaXRDb3VudDsKKwkvL1VMT05HCVR4RXJyb3JSYXRpbywgUmV0cnksIEZhaWw7CisJUlhfU1RBX0NOVDBfU1RSVUMJIFJ4U3RhQ250MDsKKwlSWF9TVEFfQ05UMV9TVFJVQyAgIFJ4U3RhQ250MTsKKwlSWF9TVEFfQ05UMl9TVFJVQyAgIFJ4U3RhQ250MjsKKwlUWF9TVEFfQ05UMF9TVFJVQyAJIFR4U3RhQ250MDsKKwlUWF9TVEFfQ05UMV9TVFJVQwkgU3RhVHgxOworCVRYX1NUQV9DTlQyX1NUUlVDCSBTdGFUeDI7CisJVFhfQUdHX0NOVF9TVFJVQwlUeEFnZ0NudDsKKwlUWF9BR0dfQ05UMF9TVFJVQwlUeEFnZ0NudDA7CisJVFhfQUdHX0NOVDFfU1RSVUMJVHhBZ2dDbnQxOworCVRYX0FHR19DTlQyX1NUUlVDCVR4QWdnQ250MjsKKwlUWF9BR0dfQ05UM19TVFJVQwlUeEFnZ0NudDM7CisJVFhfQUdHX0NOVDRfU1RSVUMJVHhBZ2dDbnQ0OworCVRYX0FHR19DTlQ1X1NUUlVDCVR4QWdnQ250NTsKKwlUWF9BR0dfQ05UNl9TVFJVQwlUeEFnZ0NudDY7CisJVFhfQUdHX0NOVDdfU1RSVUMJVHhBZ2dDbnQ3OworCisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMCwgJlJ4U3RhQ250MC53b3JkKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQyLCAmUnhTdGFDbnQyLndvcmQpOworCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQxLCAmUnhTdGFDbnQxLndvcmQpOworCSAgICAvLyBVcGRhdGUgUlggUExDUCBlcnJvciBjb3VudGVyCisJICAgIHBBZC0+UHJpdmF0ZUluZm8uUGh5UnhFcnJDbnQgKz0gUnhTdGFDbnQxLmZpZWxkLlBsY3BFcnI7CisJCS8vIFVwZGF0ZSBGYWxzZSBDQ0EgY291bnRlcgorCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0ZhbHNlQ0NBQ250ICs9IFJ4U3RhQ250MS5maWVsZC5GYWxzZUNjYTsKKwl9CisKKwkvLyBVcGRhdGUgRkNTIGNvdW50ZXJzCisJT2xkVmFsdWU9IHBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5Mb3dQYXJ0OworCXBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5Mb3dQYXJ0ICs9IChSeFN0YUNudDAuZmllbGQuQ3JjRXJyKTsgLy8gPj4gNyk7CisJaWYgKHBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5Mb3dQYXJ0IDwgT2xkVmFsdWUpCisJCXBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5IaWdoUGFydCsrOworCisJLy8gQWRkIEZDUyBlcnJvciBjb3VudCB0byBwcml2YXRlIGNvdW50ZXJzCisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEZjc0VyckNudCArPSBSeFN0YUNudDAuZmllbGQuQ3JjRXJyOworCU9sZFZhbHVlID0gcEFkLT5SYWxpbmtDb3VudGVycy5SZWFsRmNzRXJyQ291bnQudS5Mb3dQYXJ0OworCXBBZC0+UmFsaW5rQ291bnRlcnMuUmVhbEZjc0VyckNvdW50LnUuTG93UGFydCArPSBSeFN0YUNudDAuZmllbGQuQ3JjRXJyOworCWlmIChwQWQtPlJhbGlua0NvdW50ZXJzLlJlYWxGY3NFcnJDb3VudC51Lkxvd1BhcnQgPCBPbGRWYWx1ZSkKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5SZWFsRmNzRXJyQ291bnQudS5IaWdoUGFydCsrOworCisJLy8gVXBkYXRlIER1cGxpY2F0ZSBSY3YgY2hlY2sKKwlwQWQtPlJhbGlua0NvdW50ZXJzLkR1cGxpY2F0ZVJjdiArPSBSeFN0YUNudDIuZmllbGQuUnhEdXBsaUNvdW50OworCXBBZC0+V2xhbkNvdW50ZXJzLkZyYW1lRHVwbGljYXRlQ291bnQudS5Mb3dQYXJ0ICs9IFJ4U3RhQ250Mi5maWVsZC5SeER1cGxpQ291bnQ7CisJLy8gVXBkYXRlIFJYIE92ZXJmbG93IGNvdW50ZXIKKwlwQWQtPkNvdW50ZXJzODAyMy5SeE5vQnVmZmVyICs9IChSeFN0YUNudDIuZmllbGQuUnhGaWZvT3ZlcmZsb3dDb3VudCk7CisKKwkvL3BBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudCA9IDA7CisjaWZkZWYgUlQyODcwCisJaWYgKHBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudCAhPSBwQWQtPndhdGNoRG9nUnhDbnQpCisJeworCQlwQWQtPndhdGNoRG9nUnhDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnQ7CisJCXBBZC0+d2F0Y2hEb2dSeE92ZXJGbG93Q250ID0gMDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKFJ4U3RhQ250Mi5maWVsZC5SeEZpZm9PdmVyZmxvd0NvdW50KQorCQkJcEFkLT53YXRjaERvZ1J4T3ZlckZsb3dDbnQrKzsKKwkJZWxzZQorCQkJcEFkLT53YXRjaERvZ1J4T3ZlckZsb3dDbnQgPSAwOworCX0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisJLy9pZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkgfHwKKwkvLwkoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSAmJiAocEFkLT5NYWNUYWIuU2l6ZSAhPSAxKSkpCisJaWYgKCFwQWQtPmJVcGRhdGVCY25DbnREb25lKQorCXsKKwkvLyBVcGRhdGUgQkVBQ09OIHNlbnQgY291bnQKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmVHhTdGFDbnQwLndvcmQpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDEsICZTdGFUeDEud29yZCk7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMiwgJlN0YVR4Mi53b3JkKTsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0JlYWNvblNlbnRDbnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4QmVhY29uQ291bnQ7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArPSBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwlwQWQtPldsYW5Db3VudGVycy5SZXRyeUNvdW50LnUuTG93UGFydCArPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnUuTG93UGFydCArPSBUeFN0YUNudDAuZmllbGQuVHhGYWlsQ291bnQ7CisJfQorCisJLy9pZiAocEFkLT5iU3RhRmlmb1Rlc3QgPT0gVFJVRSkKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQUdHX0NOVCwgJlR4QWdnQ250LndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQwLCAmVHhBZ2dDbnQwLndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQxLCAmVHhBZ2dDbnQxLndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQyLCAmVHhBZ2dDbnQyLndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQzLCAmVHhBZ2dDbnQzLndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ0LCAmVHhBZ2dDbnQ0LndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ1LCAmVHhBZ2dDbnQ1LndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ2LCAmVHhBZ2dDbnQ2LndvcmQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ3LCAmVHhBZ2dDbnQ3LndvcmQpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnQ291bnQgKz0gVHhBZ2dDbnQuZmllbGQuQWdnVHhDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeE5vbkFnZ0NvdW50ICs9IFR4QWdnQ250LmZpZWxkLk5vbkFnZ1R4Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxTVBEVUNvdW50ICs9IFR4QWdnQ250MC5maWVsZC5BZ2dTaXplMUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMk1QRFVDb3VudCArPSBUeEFnZ0NudDAuZmllbGQuQWdnU2l6ZTJDb3VudDsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnM01QRFVDb3VudCArPSBUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTNDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzRNUERVQ291bnQgKz0gVHhBZ2dDbnQxLmZpZWxkLkFnZ1NpemU0Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2c1TVBEVUNvdW50ICs9IFR4QWdnQ250Mi5maWVsZC5BZ2dTaXplNUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnNk1QRFVDb3VudCArPSBUeEFnZ0NudDIuZmllbGQuQWdnU2l6ZTZDb3VudDsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnN01QRFVDb3VudCArPSBUeEFnZ0NudDMuZmllbGQuQWdnU2l6ZTdDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzhNUERVQ291bnQgKz0gVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU4Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2c5TVBEVUNvdW50ICs9IFR4QWdnQ250NC5maWVsZC5BZ2dTaXplOUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMTBNUERVQ291bnQgKz0gVHhBZ2dDbnQ0LmZpZWxkLkFnZ1NpemUxMENvdW50OworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxMU1QRFVDb3VudCArPSBUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTExQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxMk1QRFVDb3VudCArPSBUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTEyQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxM01QRFVDb3VudCArPSBUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTEzQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxNE1QRFVDb3VudCArPSBUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTE0Q291bnQ7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzE1TVBEVUNvdW50ICs9IFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTVDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzE2TVBEVUNvdW50ICs9IFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTZDb3VudDsKKworCQkvLyBDYWxjdWxhdGUgdGhlIHRyYW5zbWl0dGVkIEEtTVBEVSBjb3VudAorCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gVHhBZ2dDbnQwLmZpZWxkLkFnZ1NpemUxQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQwLmZpZWxkLkFnZ1NpemUyQ291bnQgLyAyKTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250MS5maWVsZC5BZ2dTaXplM0NvdW50IC8gMyk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQxLmZpZWxkLkFnZ1NpemU0Q291bnQgLyA0KTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250Mi5maWVsZC5BZ2dTaXplNUNvdW50IC8gNSk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQyLmZpZWxkLkFnZ1NpemU2Q291bnQgLyA2KTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250My5maWVsZC5BZ2dTaXplN0NvdW50IC8gNyk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU4Q291bnQgLyA4KTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250NC5maWVsZC5BZ2dTaXplOUNvdW50IC8gOSk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQ0LmZpZWxkLkFnZ1NpemUxMENvdW50IC8gMTApOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQ1LmZpZWxkLkFnZ1NpemUxMUNvdW50IC8gMTEpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250NS5maWVsZC5BZ2dTaXplMTJDb3VudCAvIDEyKTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250Ni5maWVsZC5BZ2dTaXplMTNDb3VudCAvIDEzKTsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTE0Q291bnQgLyAxNCk7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDcuZmllbGQuQWdnU2l6ZTE1Q291bnQgLyAxNSk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQ3LmZpZWxkLkFnZ1NpemUxNkNvdW50IC8gMTYpOworCX0KKworI2lmZGVmIERCR19ESUFHTk9TRQorCXsKKwkJUnRtcERpYWdTdHJ1Y3QJKnBEaWFnOworCQlDT1VOVEVSX1JBTElOSwkqcFJhbGlua0NvdW50ZXJzOworCQlVQ0hBUgkJCUFycmF5Q3VySWR4LCBpOworCisJCXBEaWFnID0gJnBBZC0+RGlhZ1N0cnVjdDsKKwkJcFJhbGlua0NvdW50ZXJzID0gJnBBZC0+UmFsaW5rQ291bnRlcnM7CisJCUFycmF5Q3VySWR4ID0gcERpYWctPkFycmF5Q3VySWR4OworCisJCWlmIChwRGlhZy0+aW5pdGVkID09IDApCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBEaWFnLCBzaXplb2Yoc3RydWN0IF9SdG1wRGlhZ1N0cmN1dF8pKTsKKwkJCXBEaWFnLT5BcnJheVN0YXJ0SWR4ID0gcERpYWctPkFycmF5Q3VySWR4ID0gMDsKKwkJCXBEaWFnLT5pbml0ZWQgPSAxOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gVHgKKwkJCXBEaWFnLT5UeEZhaWxDbnRbQXJyYXlDdXJJZHhdID0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCQkJcERpYWctPlR4QWdnQ250W0FycmF5Q3VySWR4XSA9IFR4QWdnQ250LmZpZWxkLkFnZ1R4Q291bnQ7CisJCQlwRGlhZy0+VHhOb25BZ2dDbnRbQXJyYXlDdXJJZHhdID0gVHhBZ2dDbnQuZmllbGQuTm9uQWdnVHhDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVswXSA9IFR4QWdnQ250MC5maWVsZC5BZ2dTaXplMUNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzFdID0gVHhBZ2dDbnQwLmZpZWxkLkFnZ1NpemUyQ291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMl0gPSBUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTNDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVszXSA9IFR4QWdnQ250MS5maWVsZC5BZ2dTaXplNENvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzRdID0gVHhBZ2dDbnQyLmZpZWxkLkFnZ1NpemU1Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bNV0gPSBUeEFnZ0NudDIuZmllbGQuQWdnU2l6ZTZDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVs2XSA9IFR4QWdnQ250My5maWVsZC5BZ2dTaXplN0NvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzddID0gVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU4Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bOF0gPSBUeEFnZ0NudDQuZmllbGQuQWdnU2l6ZTlDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVs5XSA9IFR4QWdnQ250NC5maWVsZC5BZ2dTaXplMTBDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVsxMF0gPSBUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTExQ291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMTFdID0gVHhBZ2dDbnQ1LmZpZWxkLkFnZ1NpemUxMkNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzEyXSA9IFR4QWdnQ250Ni5maWVsZC5BZ2dTaXplMTNDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVsxM10gPSBUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTE0Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMTRdID0gVHhBZ2dDbnQ3LmZpZWxkLkFnZ1NpemUxNUNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzE1XSA9IFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTZDb3VudDsKKworCQkJcERpYWctPlJ4Q3JjRXJyQ250W0FycmF5Q3VySWR4XSA9IFJ4U3RhQ250MC5maWVsZC5DcmNFcnI7CisKKwkJCUlOQ19SSU5HX0lOREVYKHBEaWFnLT5BcnJheUN1cklkeCwgIERJQUdOT1NFX1RJTUUpOworCQkJQXJyYXlDdXJJZHggPSBwRGlhZy0+QXJyYXlDdXJJZHg7CisJCQlmb3IgKGkgPTA7IGkgPCA5OyBpKyspCisJCQl7CisJCQkJcERpYWctPlR4RGVzY0NudFtBcnJheUN1cklkeF1baV09IDA7CisJCQkJcERpYWctPlR4U1dRdWVDbnRbQXJyYXlDdXJJZHhdW2ldID0wOworCQkJCXBEaWFnLT5UeE1jc0NudFtBcnJheUN1cklkeF1baV0gPSAwOworCQkJCXBEaWFnLT5SeE1jc0NudFtBcnJheUN1cklkeF1baV0gPSAwOworCQkJfQorCQkJcERpYWctPlR4RGF0YUNudFtBcnJheUN1cklkeF0gPSAwOworCQkJcERpYWctPlR4RmFpbENudFtBcnJheUN1cklkeF0gPSAwOworCQkJcERpYWctPlJ4RGF0YUNudFtBcnJheUN1cklkeF0gPSAwOworCQkJcERpYWctPlJ4Q3JjRXJyQ250W0FycmF5Q3VySWR4XSAgPSAwOworLy8JCQlmb3IgKGkgPSA5OyBpIDwgMTY7IGkrKykKKwkJCWZvciAoaSA9IDk7IGkgPCAyNDsgaSsrKSAvLyAzKjMKKwkJCXsKKwkJCQlwRGlhZy0+VHhEZXNjQ250W0FycmF5Q3VySWR4XVtpXSA9IDA7CisJCQkJcERpYWctPlR4TWNzQ250W0FycmF5Q3VySWR4XVtpXSA9IDA7CisJCQkJcERpYWctPlJ4TWNzQ250W0FycmF5Q3VySWR4XVtpXSA9IDA7Cit9CisKKwkJCWlmIChwRGlhZy0+QXJyYXlDdXJJZHggPT0gcERpYWctPkFycmF5U3RhcnRJZHgpCisJCQkJSU5DX1JJTkdfSU5ERVgocERpYWctPkFycmF5U3RhcnRJZHgsICBESUFHTk9TRV9USU1FKTsKKwkJfQorCisJfQorI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVzZXQgTklDIGZyb20gZXJyb3IKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisJCVJlc2V0IE5JQyBmcm9tIGVycm9yIHN0YXRlCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECU5JQ1Jlc2V0RnJvbUVycm9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCS8vIFJlc2V0IEJCUCAoYWNjb3JkaW5nIHRvIGFsZXgsIHJlc2V0IEFTSUMgd2lsbCBmb3JjZSByZXNldCBCQlAKKwkvLyBUaGVyZWZvcmUsIHNraXAgdGhlIHJlc2V0IEJCUAorCS8vIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxLCAweDIpOworCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDEpOworCS8vIFJlbW92ZSBBU0lDIGZyb20gcmVzZXQgc3RhdGUKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4MCk7CisKKwlOSUNJbml0aWFsaXplQWRhcHRlcihwQWQsIEZBTFNFKTsKKwlOSUNJbml0QXNpY0Zyb21FRVBST00ocEFkKTsKKworCS8vIFN3aXRjaCB0byBjdXJyZW50IGNoYW5uZWwsIHNpbmNlIGR1cmluZyByZXNldCBwcm9jZXNzLCB0aGUgY29ubmVjdGlvbiBzaG91bGQgcmVtYWlucyBvbi4KKwlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7CisJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJZXJhc2UgODA1MSBmaXJtd2FyZSBpbWFnZSBpbiBNQUMgQVNJQworCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgTklDRXJhc2VGaXJtd2FyZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVTE9ORyBpOworCisJZm9yKGk9MDsgaTxNQVhfRklSTVdBUkVfSU1BR0VfU0laRTsgaSs9NCkKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRklSTVdBUkVfSU1BR0VfQkFTRSArIGksIDApOworCit9LyogRW5kIG9mIE5JQ0VyYXNlRmlybXdhcmUgKi8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUxvYWQgODA1MSBmaXJtd2FyZSBSVDI1NjEuQklOIGZpbGUgaW50byBNQUMgQVNJQworCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19TVUNDRVNTICAgICAgICAgZmlybXdhcmUgaW1hZ2UgbG9hZCBvaworCQlORElTX1NUQVRVU19GQUlMVVJFICAgICAgICAgaW1hZ2Ugbm90IGZvdW5kCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgTklDTG9hZEZpcm13YXJlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworI2lmZGVmIEJJTl9JTl9GSUxFCisjZGVmaW5lIE5JQ0xGX0RFRkFVTFRfVVNFKCkJXAorCWZsZ19kZWZhdWx0X2Zpcm1fdXNlID0gVFJVRTsgXAorCXByaW50aygiJXMgLSBVc2UgZGVmYXVsdCBmaXJtd2FyZSFcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlORElTX1NUQVRVUwkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlQVUNIQVIJCQlzcmM7CisJc3RydWN0IGZpbGUJCSpzcmNmOworCUlOVCAJCQlyZXR2YWwsIG9yZ2ZzdWlkLCBvcmdmc2dpZCwgaTsKKyAgIAltbV9zZWdtZW50X3QJb3JnZnM7CisJUFVDSEFSCQkJcEZpcm13YXJlSW1hZ2U7CisJVUlOVAkJCUZpbGVMZW5ndGggPSAwOworCVVJTlQzMgkJCU1hY1JlZzsKKwlVTE9ORwkJCUluZGV4OworCVVMT05HCQkJZmlybTsKKwlCT09MRUFOCQkJZmxnX2RlZmF1bHRfZmlybV91c2UgPSBGQUxTRTsKKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiAlc1xuIiwgX19GVU5DVElPTl9fKSk7CisKKwkvKiBpbml0ICovCisJcEZpcm13YXJlSW1hZ2UgPSBOVUxMOworCXNyYyA9IFJUTVBfRklSTVdBUkVfRklMRV9OQU1FOworCisJLyogc2F2ZSB1aWQgYW5kIGdpZCB1c2VkIGZvciBmaWxlc3lzdGVtIGFjY2Vzcy4KKwkgICBzZXQgdXNlciBhbmQgZ3JvdXAgdG8gMCAocm9vdCkgKi8KKwlvcmdmc3VpZCA9IGN1cnJlbnQtPmZzdWlkOworCW9yZ2ZzZ2lkID0gY3VycmVudC0+ZnNnaWQ7CisJY3VycmVudC0+ZnN1aWQgPSBjdXJyZW50LT5mc2dpZCA9IDA7CisgICAgb3JnZnMgPSBnZXRfZnMoKTsKKyAgICBzZXRfZnMoS0VSTkVMX0RTKTsKKworCXBBZC0+RmlybXdhcmVWZXJzaW9uID0gKEZJUk1XQVJFX01BSk9SX1ZFUlNJT04gPDwgOCkgKyBcCisJCQkJCQkgICBGSVJNV0FSRV9NSU5PUl9WRVJTSU9OOworCisKKwkvKiBhbGxvY2F0ZSBmaXJtd2FyZSBidWZmZXIgKi8KKyAgICBwRmlybXdhcmVJbWFnZSA9IGttYWxsb2MoTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKyAgICBpZiAocEZpcm13YXJlSW1hZ2UgPT0gTlVMTCkKKwl7CisJCS8qIGFsbG9jYXRlIGZhaWwsIHVzZSBkZWZhdWx0IGZpcm13YXJlIGFycmF5IGluIGZpcm13YXJlLmggKi8KKwkJcHJpbnRrKCIlcyAtIEFsbG9jYXRlIG1lbW9yeSBmYWlsIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJTklDTEZfREVGQVVMVF9VU0UoKTsKKyAgICB9CisJZWxzZQorCXsKKwkJLyogYWxsb2NhdGUgb2shIHplcm8gdGhlIGZpcm13YXJlIGJ1ZmZlciAqLworCQltZW1zZXQocEZpcm13YXJlSW1hZ2UsIDB4MDAsIE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFKTsKKwl9IC8qIEVuZCBvZiBpZiAqLworCisKKwkvKiBpZiBvaywgcmVhZCBmaXJtd2FyZSBmaWxlIGZyb20gKi5iaW4gZmlsZSAqLworCWlmIChmbGdfZGVmYXVsdF9maXJtX3VzZSA9PSBGQUxTRSkKKwl7CisJCWRvCisJCXsKKwkJCS8qIG9wZW4gdGhlIGJpbiBmaWxlICovCisJCQlzcmNmID0gZmlscF9vcGVuKHNyYywgT19SRE9OTFksIDApOworCisJCQlpZiAoSVNfRVJSKHNyY2YpKQorCQkJeworCQkJCXByaW50aygiJXMgLSBFcnJvciAlbGQgb3BlbmluZyAlc1xuIiwKKwkJCQkJICAgX19GVU5DVElPTl9fLCAtUFRSX0VSUihzcmNmKSwgc3JjKTsKKwkJCQlOSUNMRl9ERUZBVUxUX1VTRSgpOworCQkJCWJyZWFrOworCQkJfSAvKiBFbmQgb2YgaWYgKi8KKworCQkJLyogdGhlIG9iamVjdCBtdXN0IGhhdmUgYSByZWFkIG1ldGhvZCAqLworCQkJaWYgKChzcmNmLT5mX29wID09IE5VTEwpIHx8IChzcmNmLT5mX29wLT5yZWFkID09IE5VTEwpKQorCQkJeworCQkJCXByaW50aygiJXMgLSAlcyBkb2VzIG5vdCBoYXZlIGEgd3JpdGUgbWV0aG9kXG4iLCBfX0ZVTkNUSU9OX18sIHNyYyk7CisJCQkJTklDTEZfREVGQVVMVF9VU0UoKTsKKwkJCQlicmVhazsKKwkJCX0gLyogRW5kIG9mIGlmICovCisKKwkJCS8qIHJlYWQgdGhlIGZpcm13YXJlIGZyb20gdGhlIGZpbGUgKi5iaW4gKi8KKwkJCUZpbGVMZW5ndGggPSBzcmNmLT5mX29wLT5yZWFkKHNyY2YsCisJCQkJCQkJCQkJICBwRmlybXdhcmVJbWFnZSwKKwkJCQkJCQkJCQkgIE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFLAorCQkJCQkJCQkJCSAgJnNyY2YtPmZfcG9zKTsKKworCQkJaWYgKEZpbGVMZW5ndGggIT0gTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUpCisJCQl7CisJCQkJcHJpbnRrKCIlczogZXJyb3IgZmlsZSBsZW5ndGggKD0lZCkgaW4gUlQyODYwQVAuQklOXG4iLAorCQkJCQkgICBfX0ZVTkNUSU9OX18sIEZpbGVMZW5ndGgpOworCQkJCU5JQ0xGX0RFRkFVTFRfVVNFKCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUFVDSEFSIHB0ciA9IHBGaXJtd2FyZUltYWdlOworCQkJCVVTSE9SVCBjcmMgPSAweGZmZmY7CisKKworCQkJCS8qIGNhbGN1bGF0ZSBmaXJtd2FyZSBDUkMgKi8KKwkJCQlmb3IoaT0wOyBpPChNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0yKTsgaSsrLCBwdHIrKykKKwkJCQkJY3JjID0gQnl0ZUNSQzE2KEJpdFJldmVyc2UoKnB0ciksIGNyYyk7CisJCQkJLyogRW5kIG9mIGZvciAqLworCisJCQkJaWYgKChwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0yXSAhPSBcCisJCQkJCQkJCShVQ0hBUilCaXRSZXZlcnNlKChVQ0hBUikoY3JjPj44KSkpIHx8CisJCQkJCShwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0xXSAhPSBcCisJCQkJCQkJCShVQ0hBUilCaXRSZXZlcnNlKChVQ0hBUiljcmMpKSkKKwkJCQl7CisJCQkJCS8qIENSQyBmYWlsICovCisJCQkJCXByaW50aygiJXM6IENSQyA9IDB4JTAyeCAweCUwMnggIgorCQkJCQkJICAgImVycm9yLCBzaG91bGQgYmUgMHglMDJ4IDB4JTAyeFxuIiwKKwkJCQkJCSAgIF9fRlVOQ1RJT05fXywKKwkJCQkJCSAgIHBGaXJtd2FyZUltYWdlW01BWF9GSVJNV0FSRV9JTUFHRV9TSVpFLTJdLAorCQkJCQkJICAgcEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtMV0sCisJCQkJCQkgICAoVUNIQVIpKGNyYz4+OCksIChVQ0hBUikoY3JjKSk7CisJCQkJCU5JQ0xGX0RFRkFVTFRfVVNFKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBmaXJtd2FyZSBpcyBvayAqLworCQkJCQlwQWQtPkZpcm13YXJlVmVyc2lvbiA9IFwKKwkJCQkJCShwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS00XSA8PCA4KSArCisJCQkJCQlwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0zXTsKKworCQkJCQkvKiBjaGVjayBpZiBmaXJtd2FyZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIHRvbyBvbGQgKi8KKwkJCQkJaWYgKChwQWQtPkZpcm13YXJlVmVyc2lvbikgPCBcCisJCQkJCQkJCQkJCSgoRklSTVdBUkVfTUFKT1JfVkVSU0lPTiA8PCA4KSArCisJCQkJCQkJCQkgIAkgCSBGSVJNV0FSRV9NSU5PUl9WRVJTSU9OKSkKKwkJCQkJeworCQkJCQkJcHJpbnRrKCIlczogZmlybXdhcmUgdmVyc2lvbiB0b28gb2xkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJCU5JQ0xGX0RFRkFVTFRfVVNFKCk7CisJCQkJCQlicmVhazsKKwkJCQkJfSAvKiBFbmQgb2YgaWYgKi8KKwkJCQl9IC8qIEVuZCBvZiBpZiAqLworCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkJCQkgKCJOSUNMb2FkRmlybXdhcmU6IENSQyBvaywgdmVyPSVkLiVkXG4iLAorCQkJCQkJICBwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS00XSwKKwkJCQkJCSAgcEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtM10pKTsKKwkJCX0gLyogRW5kIG9mIGlmIChGaWxlTGVuZ3RoID09IE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFKSAqLworCQkJYnJlYWs7CisJCX0gd2hpbGUoVFJVRSk7CisKKwkJLyogY2xvc2UgZmlybXdhcmUgZmlsZSAqLworCQlpZiAoSVNfRVJSKHNyY2YpKQorCQkJOworCQllbHNlCisJCXsKKwkJCXJldHZhbCA9IGZpbHBfY2xvc2Uoc3JjZiwgTlVMTCk7CisJCQlpZiAocmV0dmFsKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAorCQkJCQkJICgiLS0+IEVycm9yICVkIGNsb3NpbmcgJXNcbiIsIC1yZXR2YWwsIHNyYykpOworCQkJfSAvKiBFbmQgb2YgaWYgKi8KKwkJfSAvKiBFbmQgb2YgaWYgKi8KKwl9IC8qIEVuZCBvZiBpZiAqLworCisKKwkvKiB3cml0ZSBmaXJtd2FyZSB0byBBU0lDICovCisJaWYgKGZsZ19kZWZhdWx0X2Zpcm1fdXNlID09IFRSVUUpCisJeworCQkvKiB1c2UgZGVmYXVsdCBmaW1ld2FyZSwgZnJlZSBhbGxvY2F0ZWQgYnVmZmVyICovCisJCWlmIChwRmlybXdhcmVJbWFnZSAhPSBOVUxMKQorCQkJa2ZyZWUocEZpcm13YXJlSW1hZ2UpOworCQkvKiBFbmQgb2YgaWYgKi8KKworCQkvKiB1c2UgZGVmYXVsdCAqLmJpbiBhcnJheSAqLworCQlwRmlybXdhcmVJbWFnZSA9IEZpcm13YXJlSW1hZ2U7CisJCUZpbGVMZW5ndGggPSBzaXplb2YoRmlybXdhcmVJbWFnZSk7CisJfSAvKiBFbmQgb2YgaWYgKi8KKworCS8qIGVuYWJsZSBIb3N0IHByb2dyYW0gcmFtIHdyaXRlIHNlbGVjdGlvbiAqLworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHgxMDAwMCk7CisKKwlmb3IoaT0wOyBpPEZpbGVMZW5ndGg7IGkrPTQpCisJeworCQlmaXJtID0gcEZpcm13YXJlSW1hZ2VbaV0gKworCQkJICAgKHBGaXJtd2FyZUltYWdlW2krM10gPDwgMjQpICsKKwkJCSAgIChwRmlybXdhcmVJbWFnZVtpKzJdIDw8IDE2KSArCisJCQkgICAocEZpcm13YXJlSW1hZ2VbaSsxXSA8PCA4KTsKKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBGSVJNV0FSRV9JTUFHRV9CQVNFICsgaSwgZmlybSk7CisJfSAvKiBFbmQgb2YgZm9yICovCisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIDB4MDAwMDApOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMSk7CisKKwkvKiBpbml0aWFsaXplIEJCUCBSL1cgYWNjZXNzIGFnZW50ICovCisJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX0JCUF9BR0VOVCwgMCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX01BSUxCT1hfQ1NSLCAwKTsKKworCWlmIChmbGdfZGVmYXVsdF9maXJtX3VzZSA9PSBGQUxTRSkKKwl7CisJCS8qIHVzZSBmaWxlIGZpcm13YXJlLCBmcmVlIGFsbG9jYXRlZCBidWZmZXIgKi8KKwkJaWYgKHBGaXJtd2FyZUltYWdlICE9IE5VTEwpCisJCQlrZnJlZShwRmlybXdhcmVJbWFnZSk7CisJCS8qIEVuZCBvZiBpZiAqLworCX0gLyogRW5kIG9mIGlmICovCisKKwlzZXRfZnMob3JnZnMpOworCWN1cnJlbnQtPmZzdWlkID0gb3JnZnN1aWQ7CisJY3VycmVudC0+ZnNnaWQgPSBvcmdmc2dpZDsKKyNlbHNlCisKKwlORElTX1NUQVRVUwkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlQVUNIQVIJCQlwRmlybXdhcmVJbWFnZTsKKwlVTE9ORwkJCUZpbGVMZW5ndGgsIEluZGV4OworCS8vVUxPTkcJCQlmaXJtOworCVVJTlQzMgkJCU1hY1JlZyA9IDA7CisJVUlOVDMyCQkJVmVyc2lvbiA9IChwQWQtPk1BQ1ZlcnNpb24gPj4gMTYpOworCisJcEZpcm13YXJlSW1hZ2UgPSBGaXJtd2FyZUltYWdlOworCUZpbGVMZW5ndGggPSBzaXplb2YoRmlybXdhcmVJbWFnZSk7CisKKwkvLyBOZXcgOGsgYnl0ZSBmaXJtd2FyZSBzaXplIGZvciBSVDMwNzEvUlQzMDcyCisJLy9wcmludGsoIlVzYiBDaGlwXG4iKTsKKwlpZiAoRklSTVdBUkVJTUFHRV9MRU5HVEggPT0gRklSTVdBUkVJTUFHRV9NQVhfTEVOR1RIKQorCS8vVGhlIGZpcm13YXJlIGltYWdlIGNvbnNpc3RzIG9mIHR3byBwYXJ0cy4gT25lIGlzIHRoZSBvcmlnaWFubCBhbmQgdGhlIG90aGVyIGlzIHRoZSBuZXcuCisJLy9Vc2UgU2Vjb25kIFBhcnQKKwl7CisjaWZkZWYgUlQyODcwCisJCWlmICgoVmVyc2lvbiAhPSAweDI4NjApICYmIChWZXJzaW9uICE9IDB4Mjg3MikgJiYgKFZlcnNpb24gIT0gMHgzMDcwKSkKKwkJewkvLyBVc2UgRmlybXdhcmUgVjIuCisJCQkvL3ByaW50aygiS0g6VXNlIE5ldyBWZXJzaW9uLHBhcnQyXG4iKTsKKwkJCXBGaXJtd2FyZUltYWdlID0gKFBVQ0hBUikmRmlybXdhcmVJbWFnZVtGSVJNV0FSRUlNQUdFVjFfTEVOR1RIXTsKKwkJCUZpbGVMZW5ndGggPSBGSVJNV0FSRUlNQUdFVjJfTEVOR1RIOworCQl9CisJCWVsc2UKKwkJeworCQkJLy9wcmludGsoIktIOlVzZSBOZXcgVmVyc2lvbixwYXJ0MVxuIik7CisJCQlwRmlybXdhcmVJbWFnZSA9IEZpcm13YXJlSW1hZ2U7CisJCQlGaWxlTGVuZ3RoID0gRklSTVdBUkVJTUFHRVYxX0xFTkdUSDsKKwkJfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJLSDogYmluIGZpbGUgc2hvdWxkIGJlIDhLQi5cbiIpKTsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwlSVDI4WFhfV1JJVEVfRklSTVdBUkUocEFkLCBwRmlybXdhcmVJbWFnZSwgRmlsZUxlbmd0aCk7CisKKyNlbmRpZgorCisJLyogY2hlY2sgaWYgTUNVIGlzIHJlYWR5ICovCisJSW5kZXggPSAwOworCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9TWVNfQ1RSTCwgJk1hY1JlZyk7CisKKwkJaWYgKE1hY1JlZyAmIDB4ODApCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCX0gd2hpbGUgKEluZGV4KysgPCAxMDAwKTsKKworICAgIGlmIChJbmRleCA+PSAxMDAwKQorCXsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiTklDTG9hZEZpcm13YXJlOiBNQ1UgaXMgbm90IHJlYWR5XG5cblxuIikpOworCX0gLyogRW5kIG9mIGlmICovCisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCSAoIjw9PT0gJXMgKHN0YXR1cz0lZClcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7CisgICAgcmV0dXJuIFN0YXR1czsKK30gLyogRW5kIG9mIE5JQ0xvYWRGaXJtd2FyZSAqLworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlMb2FkIFR4IHJhdGUgc3dpdGNoaW5nIHBhcmFtZXRlcnMKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUyAgICAgICAgIGZpcm13YXJlIGltYWdlIGxvYWQgb2sKKwkJTkRJU19TVEFUVVNfRkFJTFVSRSAgICAgICAgIGltYWdlIG5vdCBmb3VuZAorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCVJhdGUgVGFibGUgRm9ybWF0OgorCQkxLiAoQjA6IFZhbGlkIEl0ZW0gbnVtYmVyKSAoQjE6SW5pdGlhbCBpdGVtIGZyb20gemVybykKKwkJMi4gSXRlbSBOdW1iZXIoRGVjKSAgICAgIE1vZGUoSGV4KSAgICAgQ3VycmVudCBNQ1MoRGVjKSAgICBUcmFpblVwKERlYykgICAgVHJhaW5Eb3duKERlYykKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIE5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJaWYgIHBTcmMxIGFsbCB6ZXJvIHdpdGggbGVuZ3RoIExlbmd0aCwgcmV0dXJuIDAuCisJCUlmIG5vdCBhbGwgemVybywgcmV0dXJuIDEKKworCUFyZ3VtZW50czoKKwkJcFNyYzEKKworCVJldHVybiBWYWx1ZToKKwkJMToJCQlub3QgYWxsIHplcm8KKwkJMDoJCQlhbGwgemVybworCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVUxPTkcJUlRNUE5vdEFsbFplcm8oCisJSU4JUFZPSUQJcFNyYzEsCisJSU4JVUxPTkcJTGVuZ3RoKQoreworCVBVQ0hBUglwTWVtMTsKKwlVTE9ORwlJbmRleCA9IDA7CisKKwlwTWVtMSA9IChQVUNIQVIpIHBTcmMxOworCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGVuZ3RoOyBJbmRleCsrKQorCXsKKwkJaWYgKHBNZW0xW0luZGV4XSAhPSAweDApCisJCXsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKEluZGV4ID09IExlbmd0aCkKKwl7CisJCXJldHVybiAoMCk7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiAoMSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ29tcGFyZSB0d28gbWVtb3J5IGJsb2NrCisKKwlBcmd1bWVudHM6CisJCXBTcmMxCQlQb2ludGVyIHRvIGZpcnN0IG1lbW9yeSBhZGRyZXNzCisJCXBTcmMyCQlQb2ludGVyIHRvIHNlY29uZCBtZW1vcnkgYWRkcmVzcworCisJUmV0dXJuIFZhbHVlOgorCQkwOgkJCW1lbW9yeSBpcyBlcXVhbAorCQkxOgkJCXBTcmMxIG1lbW9yeSBpcyBsYXJnZXIKKwkJMjoJCQlwU3JjMiBtZW1vcnkgaXMgbGFyZ2VyCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitVTE9ORwlSVE1QQ29tcGFyZU1lbW9yeSgKKwlJTglQVk9JRAlwU3JjMSwKKwlJTglQVk9JRAlwU3JjMiwKKwlJTglVTE9ORwlMZW5ndGgpCit7CisJUFVDSEFSCXBNZW0xOworCVBVQ0hBUglwTWVtMjsKKwlVTE9ORwlJbmRleCA9IDA7CisKKwlwTWVtMSA9IChQVUNIQVIpIHBTcmMxOworCXBNZW0yID0gKFBVQ0hBUikgcFNyYzI7CisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBMZW5ndGg7IEluZGV4KyspCisJeworCQlpZiAocE1lbTFbSW5kZXhdID4gcE1lbTJbSW5kZXhdKQorCQkJcmV0dXJuICgxKTsKKwkJZWxzZSBpZiAocE1lbTFbSW5kZXhdIDwgcE1lbTJbSW5kZXhdKQorCQkJcmV0dXJuICgyKTsKKwl9CisKKwkvLyBFcXVhbAorCXJldHVybiAoMCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlaZXJvIG91dCBtZW1vcnkgYmxvY2sKKworCUFyZ3VtZW50czoKKwkJcFNyYzEJCVBvaW50ZXIgdG8gbWVtb3J5IGFkZHJlc3MKKwkJTGVuZ3RoCQlTaXplCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QWmVyb01lbW9yeSgKKwlJTglQVk9JRAlwU3JjLAorCUlOCVVMT05HCUxlbmd0aCkKK3sKKwlQVUNIQVIJcE1lbTsKKwlVTE9ORwlJbmRleCA9IDA7CisKKwlwTWVtID0gKFBVQ0hBUikgcFNyYzsKKworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IExlbmd0aDsgSW5kZXgrKykKKwl7CisJCXBNZW1bSW5kZXhdID0gMHgwMDsKKwl9Cit9CisKK1ZPSUQJUlRNUEZpbGxNZW1vcnkoCisJSU4JUFZPSUQJcFNyYywKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JVUNIQVIJRmlsbCkKK3sKKwlQVUNIQVIJcE1lbTsKKwlVTE9ORwlJbmRleCA9IDA7CisKKwlwTWVtID0gKFBVQ0hBUikgcFNyYzsKKworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IExlbmd0aDsgSW5kZXgrKykKKwl7CisJCXBNZW1bSW5kZXhdID0gRmlsbDsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDb3B5IGRhdGEgZnJvbSBtZW1vcnkgYmxvY2sgMSB0byBtZW1vcnkgYmxvY2sgMgorCisJQXJndW1lbnRzOgorCQlwRGVzdAkJUG9pbnRlciB0byBkZXN0aW5hdGlvbiBtZW1vcnkgYWRkcmVzcworCQlwU3JjCQlQb2ludGVyIHRvIHNvdXJjZSBtZW1vcnkgYWRkcmVzcworCQlMZW5ndGgJCUNvcHkgc2l6ZQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUE1vdmVNZW1vcnkoCisJT1VUCVBWT0lECXBEZXN0LAorCUlOCVBWT0lECXBTcmMsCisJSU4JVUxPTkcJTGVuZ3RoKQoreworCVBVQ0hBUglwTWVtMTsKKwlQVUNIQVIJcE1lbTI7CisJVUlOVAlJbmRleDsKKworCUFTU0VSVCgoTGVuZ3RoPT0wKSB8fCAocERlc3QgJiYgcFNyYykpOworCisJcE1lbTEgPSAoUFVDSEFSKSBwRGVzdDsKKwlwTWVtMiA9IChQVUNIQVIpIHBTcmM7CisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBMZW5ndGg7IEluZGV4KyspCisJeworCQlwTWVtMVtJbmRleF0gPSBwTWVtMltJbmRleF07CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSW5pdGlhbGl6ZSBwb3J0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlVc2VyQ2ZnSW5pdCgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCkKK3sKKy8vCUVEQ0FfUEFSTSBEZWZhdWx0RWRjYVBhcm07CisgICAgVUlOVCBrZXlfaW5kZXgsIGJzc19pbmRleDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBVc2VyQ2ZnSW5pdFxuIikpOworCisJLy8KKwkvLyAgcGFydCBJLiBpbnRpYWxpemUgY29tbW9uIGNvbmZpZ3VyYXRpb24KKwkvLworI2lmZGVmIFJUMjg3MAorCXBBZC0+QnVsa091dFJlcSA9IDA7CisKKwlwQWQtPkJ1bGtPdXRDb21wbGV0ZSA9IDA7CisJcEFkLT5CdWxrT3V0Q29tcGxldGVPdGhlciA9IDA7CisJcEFkLT5CdWxrT3V0Q29tcGxldGVDYW5jZWwgPSAwOworCXBBZC0+QnVsa0luUmVxID0gMDsKKwlwQWQtPkJ1bGtJbkNvbXBsZXRlID0gMDsKKwlwQWQtPkJ1bGtJbkNvbXBsZXRlRmFpbCA9IDA7CisKKwkvL3BBZC0+UXVpY2tUaW1lclAgPSAxMDA7CisJLy9wQWQtPlR1cm5BZ2dyQnVsa0luQ291bnQgPSAwOworCXBBZC0+YlVzYlR4QnVsa0FnZ3JlID0gMDsKKworCS8vIGluaXQgYXMgdW5zZWQgdmFsdWUgdG8gZW5zdXJlIGRyaXZlciB3aWxsIHNldCB0byBNQ1Ugb25jZS4KKwlwQWQtPkxlZEluZGljYXRvclN0cmVndGggPSAweEZGOworCisJcEFkLT5Db21tb25DZmcuTWF4UGt0T25lVHhCdWxrID0gMjsKKwlwQWQtPkNvbW1vbkNmZy5UeEJ1bGtGYWN0b3IgPSAxOworCXBBZC0+Q29tbW9uQ2ZnLlJ4QnVsa0ZhY3RvciA9MTsKKworCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXIgPSAxMDA7IC8vbVcKKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLCBzaXplb2YocEFkLT5Db21tb25DZmcuSU9UZXN0UGFybSkpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJZm9yKGtleV9pbmRleD0wOyBrZXlfaW5kZXg8U0hBUkVfS0VZX05VTTsga2V5X2luZGV4KyspCisJeworCQlmb3IoYnNzX2luZGV4ID0gMDsgYnNzX2luZGV4IDwgTUFYX01CU1NJRF9OVU07IGJzc19pbmRleCsrKQorCQl7CisJCQlwQWQtPlNoYXJlZEtleVtic3NfaW5kZXhdW2tleV9pbmRleF0uS2V5TGVuID0gMDsKKwkJCXBBZC0+U2hhcmVkS2V5W2Jzc19pbmRleF1ba2V5X2luZGV4XS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKyAgICAgICAgfSAvKiBFbmQgb2YgZm9yICovCisgICAgfSAvKiBFbmQgb2YgZm9yICovCisKKwlwQWQtPkVlcHJvbUFjY2VzcyA9IEZBTFNFOworCisJcEFkLT5BbnRlbm5hLndvcmQgPSAwOworCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOworCisJcEFkLT5MZWRDbnRsLndvcmQgPSAwOworCisJcEFkLT5iQXV0b1R4QWdjQSA9IEZBTFNFOwkJCS8vIERlZmF1bHQgaXMgT0ZGCisJcEFkLT5iQXV0b1R4QWdjRyA9IEZBTFNFOwkJCS8vIERlZmF1bHQgaXMgT0ZGCisJcEFkLT5SZkljVHlwZSA9IFJGSUNfMjgyMDsKKworCS8vIEluaXQgdGltZXIgZm9yIHJlc2V0IGNvbXBsZXRlIGV2ZW50CisJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSAxOworCXBBZC0+YkZvcmNlUHJpbnRUWCA9IEZBTFNFOworCXBBZC0+YkZvcmNlUHJpbnRSWCA9IEZBTFNFOworCXBBZC0+YlN0YUZpZm9UZXN0ID0gRkFMU0U7CisJcEFkLT5iUHJvdGVjdGlvblRlc3QgPSBGQUxTRTsKKwlwQWQtPmJIQ0NBVGVzdCA9IEZBTFNFOworCXBBZC0+Ykdlbk9uZUhDQ0EgPSBGQUxTRTsKKwlwQWQtPkNvbW1vbkNmZy5Ec2lmcyA9IDEwOyAgICAgIC8vIGluIHVuaXRzIG9mIHVzZWMKKwlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyID0gMTAwOyAvL21XCisJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSAweGZmZmZmZmZmOyAvLyBBVVRPCisJcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQgPSAweGZmZmZmZmZmOyAvLyBBVVRPCisJcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFJ0ODAyXzExUHJlYW1ibGVBdXRvOyAvLyB1c2UgTG9uZyBwcmVhbWJsZSBvbiBUWCBieSBkZWZhdXQKKwlwQWQtPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID0gMjM0NzsKKwlwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA9IDIzNDY7CisJcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gMDsgICAgLy8gMDogQVVUTworCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gVFJVRTsgLy8wOworCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSAweGZmOyAgICAgLy8gdW5rbm93bgorCXBBZC0+Q29tbW9uQ2ZnLkJhbmRTdGF0ZSA9IFVOS05PV05fQkFORDsKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU1BlcmlvZCA9IDEwOworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNTQ291bnQgPSAwOworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSA9IFJEX05PUk1BTF9NT0RFOworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNoTW92aW5nVGltZSA9IDY1OworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkxvbmdQdWxzZVJhZGFyVGggPSAzOworCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLmJOZWVkU2VuZFRyaWdnZXJGcmFtZSA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJUaW1lckNvdW50ID0gMDsKKwlwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuYkNvdW50cnlGbGFnID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPSAwOworCXBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID0gMDsKKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkJlYWNvblR4V0ksIHNpemVvZihwQWQtPkJlYWNvblR4V0kpKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksIHNpemVvZihwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkpKTsKKwlwQWQtPkhUQ0VuYWJsZSA9IEZBTFNFOworCXBBZC0+YkJyb2FkQ29tSFQgPSBGQUxTRTsKKwlwQWQtPkNvbW1vbkNmZy5iUmRnID0gRkFMU0U7CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJcEFkLT5Db21tb25DZmcuRG90MTFPQnNzU2NhblBhc3NpdmVEd2VsbCA9IGRvdDExT0JTU1NjYW5QYXNzaXZlRHdlbGw7CS8vIFVuaXQgOiBUVS4gNX4xMDAwCisJcEFkLT5Db21tb25DZmcuRG90MTFPQnNzU2NhbkFjdGl2ZUR3ZWxsID0gZG90MTFPQlNTU2NhbkFjdGl2ZUR3ZWxsOwkvLyBVbml0IDogVFUuIDEwfjEwMDAKKwlwQWQtPkNvbW1vbkNmZy5Eb3QxMUJzc1dpZHRoVHJpZ2dlclNjYW5JbnQgPSBkb3QxMUJTU1dpZHRoVHJpZ2dlclNjYW5JbnRlcnZhbDsJLy8gVW5pdCA6IFNlY29uZAorCXBBZC0+Q29tbW9uQ2ZnLkRvdDExT0Jzc1NjYW5QYXNzaXZlVG90YWxQZXJDaGFubmVsID0gZG90MTFPQlNTU2NhblBhc3NpdmVUb3RhbFBlckNoYW5uZWw7CS8vIFVuaXQgOiBUVS4gMjAwfjEwMDAwCisJcEFkLT5Db21tb25DZmcuRG90MTFPQnNzU2NhbkFjdGl2ZVRvdGFsUGVyQ2hhbm5lbCA9IGRvdDExT0JTU1NjYW5BY3RpdmVUb3RhbFBlckNoYW5uZWw7CS8vIFVuaXQgOiBUVS4gMjB+MTAwMDAKKwlwQWQtPkNvbW1vbkNmZy5Eb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheUZhY3RvciA9IGRvdDExQlNTV2lkdGhDaGFubmVsVHJhbnNhY3Rpb25EZWxheUZhY3RvcjsKKwlwQWQtPkNvbW1vbkNmZy5Eb3QxMU9Cc3NTY2FuQWN0aXZpdHlUaHJlID0gZG90MTFCU1NTY2FuQWN0aXZpdHlUaHJlc2hvbGQ7CS8vIFVuaXQgOiBwZXJjZW50YWdlCisJcEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXkgPSAocEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aFRyaWdnZXJTY2FuSW50ICogcEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXlGYWN0b3IpOworI2VuZGlmICAvLyBET1QxMU5fRFJBRlQzIC8vCisKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLCBzaXplb2YocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvKSk7CisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gTU1QU19FTkFCTEU7CisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gMDsKKwlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gSU1NRURfQkE7CisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDY0OyAvLzMyOworCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5UeEJBV2luTGltaXQgPSA2NDsgLy8zMjsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gVXNlckNmZ0luaXQuIEJBQ2FwYWJpbGl0eSA9IDB4JXhcbiIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS53b3JkKSk7CisKKwlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gRkFMU0U7CisJQkFUYWJsZUluaXQocEFkLCAmcEFkLT5CQVRhYmxlKTsKKworCXBBZC0+Q29tbW9uQ2ZnLmJFeHRDaGFubmVsU3dpdGNoQW5ub3VuY2VtZW50ID0gMTsKKwlwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0ID0gMTsKKwlwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlID0gVFJVRTsKKwlwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID0gRkFMU0U7CisKKwlwQWQtPkNvbW1vbkNmZy5UeEJBU2l6ZSA9IDc7CisKKwlwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkud29yZCA9IHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS53b3JkOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy9wQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkvL3BBZC0+Q29tbW9uQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKKwkvL3BBZC0+Q29tbW9uQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfODAwOworCS8vcEFkLT5Db21tb25DZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gUkFURV82OworCisJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IE1DU19SQVRFXzY7CisJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLkJXID0gQldfMjA7CisJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisKKwlwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPSAxMDA7ICAgICAvLyBpbiBtU2VjCisKKwkvLworCS8vIHBhcnQgSUkuIGludGlhbGl6ZSBTVEEgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorCS8vCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCVJYX0ZJTFRFUl9TRVRfRkxBRyhwQWQsIGZSWF9GSUxURVJfQUNDRVBUX0RJUkVDVCk7CisJCVJYX0ZJTFRFUl9DTEVBUl9GTEFHKHBBZCwgZlJYX0ZJTFRFUl9BQ0NFUFRfTVVMVElDQVNUKTsKKwkJUlhfRklMVEVSX1NFVF9GTEFHKHBBZCwgZlJYX0ZJTFRFUl9BQ0NFUFRfQlJPQURDQVNUKTsKKwkJUlhfRklMVEVSX1NFVF9GTEFHKHBBZCwgZlJYX0ZJTFRFUl9BQ0NFUFRfQUxMX01VTFRJQ0FTVCk7CisKKwkJcEFkLT5TdGFDZmcuUHNtID0gUFdSX0FDVElWRTsKKworCQlwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKKwkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CisJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKKwkJcEFkLT5TdGFDZmcuYk1peENpcGhlciA9IEZBTFNFOworCQlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAwOworCisJCS8vIDgwMi4xeCBwb3J0IGNvbnRyb2wKKwkJcEFkLT5TdGFDZmcuUHJpdmFjeUZpbHRlciA9IE5kaXM4MDJfMTFQcml2RmlsdGVyODAyMXhXRVA7CisJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQlwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lID0gMDsKKwkJcEFkLT5TdGFDZmcuTWljRXJyQ250ICAgICAgICA9IDA7CisJCXBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jICAgICAgPSBGQUxTRTsKKwkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgICAgICAgICA9IFNTX05PVFVTRTsKKworCQlwQWQtPkNvbW1vbkNmZy5OZGlzUmFkaW9TdGF0ZU9mZiA9IEZBTFNFOwkJLy8gTmV3IHRvIHN1cHBvcnQgbWljcm9zb2Z0IGRpc2FibGUgcmFkaW8gd2l0aCBPSUQgY29tbWFuZAorCisJCXBBZC0+U3RhQ2ZnLlJzc2lUcmlnZ2VyID0gMDsKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUsIHNpemVvZihSU1NJX1NBTVBMRSkpOworCQlwQWQtPlN0YUNmZy5Sc3NpVHJpZ2dlck1vZGUgPSBSU1NJX1RSSUdHRVJFRF9VUE9OX0JFTE9XX1RIUkVTSE9MRDsKKwkJcEFkLT5TdGFDZmcuQXRpbVdpbiA9IDA7CisJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCA9IDM7Ly9kZWZhdWx0IGxpc3RlbiBjb3VudDsKKwkJcEFkLT5TdGFDZmcuQnNzVHlwZSA9IEJTU19JTkZSQTsgIC8vIEJTU19JTkZSQSBvciBCU1NfQURIT0Mgb3IgQlNTX01PTklUT1IKKwkJcEFkLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IEZBTFNFOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV0FLRVVQX05PVyk7CisKKwkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU19BVVRPOworCX0KKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlwQWQtPlN0YUNmZy5JRUVFODAyMTFkQ2xpZW50TW9kZSA9IFJ0ODAyXzExX0RfTm9uZTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBnbG9iYWwgdmFyaWFibGVzIG1YWFhYIHVzZWQgaW4gTUFDIHByb3RvY29sIHN0YXRlIG1hY2hpbmVzCisJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0lORlJBX09OKTsKKworCS8vIFBIWSBzcGVjaWZpY2F0aW9uCisJcEFkLT5Db21tb25DZmcuUGh5TW9kZSA9IFBIWV8xMUJHX01JWEVEOwkJLy8gZGVmYXVsdCBQSFkgbW9kZQorCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7ICAvLyBDQ0sgdXNlIExPTkcgcHJlYW1ibGUKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyB1c2VyIGRlc2lyZWQgcG93ZXIgbW9kZQorCQlwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTTsKKwkJcEFkLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOworCQlwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID0gRkFMU0U7CisKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJLy8gQ0NYIHYxLjAgcmVsZWF0ZWQgaW5pdCB2YWx1ZQorCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+U3RhQ2ZnLkxlYXBBdXRoVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihMZWFwQXV0aFRpbWVvdXQpLCBwQWQsIEZBTFNFKTsKKwkJcEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID0gQ0lTQ09fQXV0aE1vZGVMRUFQTm9uZTsKKwkJcEFkLT5TdGFDZmcuYkNraXBPbiA9IEZBTFNFOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCisJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKSwgcEFkLCBGQUxTRSk7CisJCXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZyA9IEZBTFNFOworCisJCS8vIFBhdGNoIGZvciBOZHRlc3QKKwkJcEFkLT5TdGFDZmcuU2NhbkNudCA9IDA7CisKKwkJLy8gQ0NYIDIuMCBjb250cm9sIGZsYWcgaW5pdAorCQlwQWQtPlN0YUNmZy5DQ1hFbmFibGUgPSBGQUxTRTsKKwkJcEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSA9IE1TUk5fVFlQRV9VTlVTRUQ7CisJCXBBZC0+U3RhQ2ZnLkNDWFFvc0VDV01pbgk9IDQ7CisJCXBBZC0+U3RhQ2ZnLkNDWFFvc0VDV01heAk9IDEwOworCisJCXBBZC0+U3RhQ2ZnLmJId1JhZGlvICA9IFRSVUU7IC8vIERlZmF1bHQgSGFyZHdhcmUgUmFkaW8gc3RhdHVzIGlzIE9uCisJCXBBZC0+U3RhQ2ZnLmJTd1JhZGlvICA9IFRSVUU7IC8vIERlZmF1bHQgU29mdHdhcmUgUmFkaW8gc3RhdHVzIGlzIE9uCisJCXBBZC0+U3RhQ2ZnLmJSYWRpbyAgICA9IFRSVUU7IC8vIGJId1JhZGlvICYmIGJTd1JhZGlvCisJCXBBZC0+U3RhQ2ZnLmJIYXJkd2FyZVJhZGlvID0gRkFMU0U7CQkvLyBEZWZhdWx0IGlzIE9GRgorCQlwQWQtPlN0YUNmZy5iU2hvd0hpZGRlblNTSUQgPSBGQUxTRTsJCS8vIERlZmF1bHQgbm8gc2hvdworCisJCS8vIE5pdHJvIG1vZGUgY29udHJvbAorCQlwQWQtPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9IFRSVUU7CisKKwkJLy8gU2F2ZSB0aGUgaW5pdCB0aW1lIGFzIGxhc3Qgc2NhbiB0aW1lLCB0aGUgc3lzdGVtIHNob3VsZCBkbyBzY2FuIGFmdGVyIDIgc2Vjb25kcy4KKwkJLy8gVGhpcyBwYXRjaCBpcyBmb3IgZHJpdmVyIHdha2UgdXAgZnJvbSBzdGFuZGJ5IG1vZGUsIHN5c3RlbSB3aWxsIGRvIHNjYW4gcmlnaHQgYXdheS4KKwkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gMDsKKwkJTmRpc1plcm9NZW1vcnkocEFkLT5uaWNrbmFtZSwgSVdfRVNTSURfTUFYX1NJWkUrMSk7CisJCXNwcmludGYocEFkLT5uaWNrbmFtZSwgIiVzIiwgU1RBX05JQ19ERVZJQ0VfTkFNRSk7CisJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5TdGFDZmcuV3BhRGlzYXNzb2NBbmRCbG9ja0Fzc29jVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYyksIHBBZCwgRkFMU0UpOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJcEFkLT5TdGFDZmcuSUVFRTgwMjFYID0gRkFMU0U7CisJCXBBZC0+U3RhQ2ZnLklFRUU4MDIxeF9yZXF1aXJlZF9rZXlzID0gRkFMU0U7CisJCXBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEU7CisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFOworI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gRGVmYXVsdCBmb3IgZXh0cmEgaW5mb3JtYXRpb24gaXMgbm90IHZhbGlkCisJcEFkLT5FeHRyYUluZm8gPSBFWFRSQV9JTkZPX0NMRUFSOworCisJLy8gRGVmYXVsdCBDb25maWcgY2hhbmdlIGZsYWcKKwlwQWQtPmJDb25maWdDaGFuZ2VkID0gRkFMU0U7CisKKwkvLworCS8vIHBhcnQgSUlJLiBBUCBjb25maWd1cmF0aW9ucworCS8vCisKKworCS8vCisJLy8gcGFydCBJVi4gb3RoZXJzCisJLy8KKwkvLyBkeW5hbWljIEJCUCBSNjY6c2Vuc2liaXR5IHR1bmluZyB0byBvdmVyY29tZSBiYWNrZ3JvdW5kIG5vaXNlCisJcEFkLT5CYnBUdW5pbmcuYkVuYWJsZSAgICAgICAgICAgICAgICA9IFRSVUU7CisJcEFkLT5CYnBUdW5pbmcuRmFsc2VDY2FMb3dlclRocmVzaG9sZCA9IDEwMDsKKwlwQWQtPkJicFR1bmluZy5GYWxzZUNjYVVwcGVyVGhyZXNob2xkID0gNTEyOworCXBBZC0+QmJwVHVuaW5nLlI2NkRlbHRhICAgICAgICAgICAgICAgPSA0OworCXBBZC0+TWxtZS5iRW5hYmxlQXV0b0FudGVubmFDaGVjayA9IFRSVUU7CisKKwkvLworCS8vIEFsc28gaW5pdGlhbCBSNjZDdXJyZW50VmFsdWUsIFJUVVNCUmVzdW1lTXNkdVRyYW5zbWlzc2lvbiBtaWdodCB1c2UgdGhpcyB2YWx1ZS4KKwkvLyBpZiBub3QgaW5pdGlhbCB0aGlzIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIDAuCisJLy8KKwlwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUgPSAweDM4OworCisJcEFkLT5CYnA5NCA9IEJCUFI5NF9ERUZBVUxUOworCXBBZC0+QmJwRm9yQ0NLID0gRkFMU0U7CisKKwkvLyBEZWZhdWx0IGlzIEZBTFNFIGZvciB0ZXN0IGJpdCAxCisJLy9wQWQtPmJUZXN0MSA9IEZBTFNFOworCisJLy8gaW5pdGlhbGl6ZSBNQUMgdGFibGUgYW5kIGFsbG9jYXRlIHNwaW4gbG9jaworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1hY1RhYiwgc2l6ZW9mKE1BQ19UQUJMRSkpOworCUluaXRpYWxpemVRdWV1ZUhlYWRlcigmcEFkLT5NYWNUYWIuTWNhc3RQc1F1ZXVlKTsKKwlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCS8vUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPlJFQ0JBVGltZXIsIFJFQ0JBVGltZXJUaW1lb3V0LCBwQWQsIFRSVUUpOworCS8vUlRNUFNldFRpbWVyKCZwQWQtPlJFQ0JBVGltZXIsIFJFT1JERVJfRVhFQ19JTlRWKTsKKworI2lmZGVmIFJBTElOS19BVEUKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5hdGUsIHNpemVvZihBVEVfSU5GTykpOworCXBBZC0+YXRlLk1vZGUgPSBBVEVfU1RPUDsKKwlwQWQtPmF0ZS5UeENvdW50ID0gMjAwOy8qIHRvIGV4Y2VlZCBUWF9SSU5HX1NJWkUgLi4uICovCisJcEFkLT5hdGUuVHhMZW5ndGggPSAxMDI0OworCXBBZC0+YXRlLlR4V0kuU2hvcnRHSSA9IDA7Ly8gTE9ORyBHSSA6IDgwMCBucworCXBBZC0+YXRlLlR4V0kuUEhZTU9ERSA9IE1PREVfQ0NLOworCXBBZC0+YXRlLlR4V0kuTUNTID0gMzsKKwlwQWQtPmF0ZS5UeFdJLkJXID0gQldfMjA7CisJcEFkLT5hdGUuQ2hhbm5lbCA9IDE7CisJcEFkLT5hdGUuUUlEID0gUUlEX0FDX0JFOworCXBBZC0+YXRlLkFkZHIxWzBdID0gMHgwMDsKKwlwQWQtPmF0ZS5BZGRyMVsxXSA9IDB4MTE7CisJcEFkLT5hdGUuQWRkcjFbMl0gPSAweDIyOworCXBBZC0+YXRlLkFkZHIxWzNdID0gMHhBQTsKKwlwQWQtPmF0ZS5BZGRyMVs0XSA9IDB4QkI7CisJcEFkLT5hdGUuQWRkcjFbNV0gPSAweENDOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+YXRlLkFkZHIyLCBwQWQtPmF0ZS5BZGRyMSwgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPmF0ZS5BZGRyMywgcEFkLT5hdGUuQWRkcjEsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisJcEFkLT5hdGUuYlJ4RmVyID0gMDsKKwlwQWQtPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CisJcEFkLT5hdGUuYlFBUnhTdGFydCA9IEZBTFNFOworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOworCXBBZC0+YXRlLlR4U3RhdHVzID0gMDsKKwlwQWQtPmF0ZS5BdGVQaWQgPSAwOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisKKwlwQWQtPkNvbW1vbkNmZy5iV2lGaVRlc3QgPSBGQUxTRTsKKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIFVzZXJDZmdJbml0XG4iKSk7Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitVQ0hBUiBCdG9IKGNoYXIgY2gpCit7CisJaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHJldHVybiAoY2ggLSAnMCcpOyAgICAgICAgLy8gSGFuZGxlIG51bWVyYWxzCisJaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHJldHVybiAoY2ggLSAnQScgKyAweEEpOyAgLy8gSGFuZGxlIGNhcGl0b2wgaGV4IGRpZ2l0cworCWlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSByZXR1cm4gKGNoIC0gJ2EnICsgMHhBKTsgIC8vIEhhbmRsZSBzbWFsbCBoZXggZGlnaXRzCisJcmV0dXJuKDI1NSk7Cit9CisKKy8vCisvLyAgRlVOQ1RJT046IEF0b0goY2hhciAqLCBVQ0hBUiAqLCBpbnQpCisvLworLy8gIFBVUlBPU0U6ICBDb252ZXJ0cyBhc2NpaSBzdHJpbmcgdG8gbmV0d29yayBvcmRlciBoZXgKKy8vCisvLyAgUEFSQU1FVEVSUzoKKy8vICAgIHNyYyAgICAtIHBvaW50ZXIgdG8gaW5wdXQgYXNjaWkgc3RyaW5nCisvLyAgICBkZXN0ICAgLSBwb2ludGVyIHRvIG91dHB1dCBoZXgKKy8vICAgIGRlc3RsZW4gLSBzaXplIG9mIGRlc3QKKy8vCisvLyAgQ09NTUVOVFM6CisvLworLy8gICAgMiBhc2NpaSBieXRlcyBtYWtlIGEgaGV4IGJ5dGUgc28gbXVzdCBwdXQgMXN0IGFzY2lpIGJ5dGUgb2YgcGFpcgorLy8gICAgaW50byB1cHBlciBuaWJibGUgYW5kIDJuZCBhc2NpaSBieXRlIG9mIHBhaXIgaW50byBsb3dlciBuaWJibGUuCisvLworLy8gSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwordm9pZCBBdG9IKGNoYXIgKiBzcmMsIFVDSEFSICogZGVzdCwgaW50IGRlc3RsZW4pCit7CisJY2hhciAqIHNyY3B0cjsKKwlQVUNIQVIgZGVzdFRlbXA7CisKKwlzcmNwdHIgPSBzcmM7CisJZGVzdFRlbXAgPSAoUFVDSEFSKSBkZXN0OworCisJd2hpbGUoZGVzdGxlbi0tKQorCXsKKwkJKmRlc3RUZW1wID0gQnRvSCgqc3JjcHRyKyspIDw8IDQ7ICAgIC8vIFB1dCAxc3QgYXNjaWkgYnl0ZSBpbiB1cHBlciBuaWJibGUuCisJCSpkZXN0VGVtcCArPSBCdG9IKCpzcmNwdHIrKyk7ICAgICAgLy8gQWRkIDJuZCBhc2NpaSBieXRlIHRvIGFib3ZlLgorCQlkZXN0VGVtcCsrOworCX0KK30KKworVk9JRAlSVE1QUGF0Y2hNYWNCYnBCdWcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUxPTkcJSW5kZXg7CisKKwkvLyBJbml0aWFsaXplIEJCUCByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTlVNX0JCUF9SRUdfUEFSTVM7IEluZGV4KyspCisJeworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQUmVnVGFibGVbSW5kZXhdLlJlZ2lzdGVyLCAoVUNIQVIpQkJQUmVnVGFibGVbSW5kZXhdLlZhbHVlKTsKKwl9CisKKwkvLyBJbml0aWFsaXplIFJGIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUKKwlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKworCS8vIFJlLWluaXQgQkJQIHJlZ2lzdGVyIGZyb20gRUVQUk9NIHZhbHVlCisJTklDSW5pdEFzaWNGcm9tRUVQUk9NKHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlJbml0IHRpbWVyIG9iamVjdHMKKworCUFyZ3VtZW50czoKKwkJcEFkCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwVGltZXIJCQkJVGltZXIgc3RydWN0dXJlCisJCXBUaW1lckZ1bmMJCQlGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGltZXIgZXhwaXJlZAorCQlSZXBlYXQJCQkJVHVyZSBmb3IgcGVyaW9kIHRpbWVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBJbml0VGltZXIoCisJSU4JUFJUTVBfQURBUFRFUgkJCXBBZCwKKwlJTglQUkFMSU5LX1RJTUVSX1NUUlVDVAlwVGltZXIsCisJSU4JUFZPSUQJCQkJCXBUaW1lckZ1bmMsCisJSU4JUFZPSUQJCQkJCXBEYXRhLAorCUlOCUJPT0xFQU4JCQkJCVJlcGVhdCkKK3sKKwkvLworCS8vIFNldCBWYWxpZCB0byBUUlVFIGZvciBsYXRlciB1c2VkLgorCS8vIEl0IHdpbGwgY3Jhc2ggaWYgd2UgY2FuY2VsIGEgdGltZXIgb3Igc2V0IGEgdGltZXIKKwkvLyB0aGF0IHdlIGhhdmVuJ3QgaW5pdGlhbGl6ZSBiZWZvcmUuCisJLy8KKwlwVGltZXItPlZhbGlkICAgICAgPSBUUlVFOworCisJcFRpbWVyLT5QZXJpb2RpY1R5cGUgPSBSZXBlYXQ7CisJcFRpbWVyLT5TdGF0ZSAgICAgID0gRkFMU0U7CisJcFRpbWVyLT5jb29raWUgPSAoVUxPTkcpIHBEYXRhOworCisjaWZkZWYgUlQyODcwCisJcFRpbWVyLT5wQWQgPSBwQWQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlSVE1QX09TX0luaXRfVGltZXIocEFkLAkmcFRpbWVyLT5UaW1lck9iaiwJcFRpbWVyRnVuYywgKFBWT0lEKSBwVGltZXIpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSW5pdCB0aW1lciBvYmplY3RzCisKKwlBcmd1bWVudHM6CisJCXBUaW1lcgkJCQlUaW1lciBzdHJ1Y3R1cmUKKwkJVmFsdWUJCQkJVGltZXIgdmFsdWUgaW4gbWlsbGlzZWNvbmRzCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCVRvIHVzZSB0aGlzIHJvdXRpbmUsIG11c3QgY2FsbCBSVE1QSW5pdFRpbWVyIGJlZm9yZS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFNldFRpbWVyKAorCUlOCVBSQUxJTktfVElNRVJfU1RSVUNUCXBUaW1lciwKKwlJTglVTE9ORwkJCQkJVmFsdWUpCit7CisJaWYgKHBUaW1lci0+VmFsaWQpCisJeworCQlwVGltZXItPlRpbWVyVmFsdWUgPSBWYWx1ZTsKKwkJcFRpbWVyLT5TdGF0ZSAgICAgID0gRkFMU0U7CisJCWlmIChwVGltZXItPlBlcmlvZGljVHlwZSA9PSBUUlVFKQorCQl7CisJCQlwVGltZXItPlJlcGVhdCA9IFRSVUU7CisJCQlSVE1QX1NldFBlcmlvZGljVGltZXIoJnBUaW1lci0+VGltZXJPYmosIFZhbHVlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBUaW1lci0+UmVwZWF0ID0gRkFMU0U7CisJCQlSVE1QX09TX0FkZF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgVmFsdWUpOworCQl9CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UX0VSUigoIlJUTVBTZXRUaW1lciBmYWlsZWQsIFRpbWVyIGhhc24ndCBiZWVuIGluaXRpYWxpemUhXG4iKSk7CisJfQorfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlJbml0IHRpbWVyIG9iamVjdHMKKworCUFyZ3VtZW50czoKKwkJcFRpbWVyCQkJCVRpbWVyIHN0cnVjdHVyZQorCQlWYWx1ZQkJCQlUaW1lciB2YWx1ZSBpbiBtaWxsaXNlY29uZHMKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKwkJVG8gdXNlIHRoaXMgcm91dGluZSwgbXVzdCBjYWxsIFJUTVBJbml0VGltZXIgYmVmb3JlLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QTW9kVGltZXIoCisJSU4JUFJBTElOS19USU1FUl9TVFJVQ1QJcFRpbWVyLAorCUlOCVVMT05HCQkJCQlWYWx1ZSkKK3sKKwlCT09MRUFOCUNhbmNlbDsKKworCWlmIChwVGltZXItPlZhbGlkKQorCXsKKwkJcFRpbWVyLT5UaW1lclZhbHVlID0gVmFsdWU7CisJCXBUaW1lci0+U3RhdGUgICAgICA9IEZBTFNFOworCQlpZiAocFRpbWVyLT5QZXJpb2RpY1R5cGUgPT0gVFJVRSkKKwkJeworCQkJUlRNUENhbmNlbFRpbWVyKHBUaW1lciwgJkNhbmNlbCk7CisJCQlSVE1QU2V0VGltZXIocFRpbWVyLCBWYWx1ZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX09TX01vZF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgVmFsdWUpOworCQl9CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UX0VSUigoIlJUTVBNb2RUaW1lciBmYWlsZWQsIFRpbWVyIGhhc24ndCBiZWVuIGluaXRpYWxpemUhXG4iKSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FuY2VsIHRpbWVyIG9iamVjdHMKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCTEuKSBUbyB1c2UgdGhpcyByb3V0aW5lLCBtdXN0IGNhbGwgUlRNUEluaXRUaW1lciBiZWZvcmUuCisJCTIuKSBSZXNldCBOSUMgdG8gaW5pdGlhbCBzdGF0ZSBBUyBJUyBzeXN0ZW0gYm9vdCB1cCB0aW1lLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QQ2FuY2VsVGltZXIoCisJSU4JUFJBTElOS19USU1FUl9TVFJVQ1QJcFRpbWVyLAorCU9VVAlCT09MRUFOCQkJCQkqcENhbmNlbGxlZCkKK3sKKwlpZiAocFRpbWVyLT5WYWxpZCkKKwl7CisJCWlmIChwVGltZXItPlN0YXRlID09IEZBTFNFKQorCQkJcFRpbWVyLT5SZXBlYXQgPSBGQUxTRTsKKwkJCVJUTVBfT1NfRGVsX1RpbWVyKCZwVGltZXItPlRpbWVyT2JqLCBwQ2FuY2VsbGVkKTsKKworCQlpZiAoKnBDYW5jZWxsZWQgPT0gVFJVRSkKKwkJCXBUaW1lci0+U3RhdGUgPSBUUlVFOworCisjaWZkZWYgUlQyODcwCisJCS8vIFdlIG5lZWQgdG8gZ28tdGhyb3VnaCB0aGUgVGltZXJRIHRvIGZpbmRvdXQgdGhpcyB0aW1lciBoYW5kbGVyIGFuZCByZW1vdmUgaXQgaWYKKwkJLy8JCWl0J3Mgc3RpbGwgd2FpdGluZyBmb3IgZXhlY3V0aW9uLgorCisJCVJUMjg3MF9UaW1lclFfUmVtb3ZlKHBUaW1lci0+cEFkLCBwVGltZXIpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKwllbHNlCisJeworCQkvLworCQkvLyBOZGlzTUNhbmNlbFRpbWVyIGp1c3QgY2FuY2VkIHRoZSB0aW1lciBhbmQgbm90IG1lYW4gcmVsZWFzZSB0aGUgdGltZXIuCisJCS8vIEFuZCBkb24ndCBzZXQgdGhlICJWYWxpZCIgdG8gRmFsc2UuIFNvIHRoYXQgd2UgY2FuIHVzZSB0aGlzIHRpbWVyIGFnYWluLgorCQkvLworCQlEQkdQUklOVF9FUlIoKCJSVE1QQ2FuY2VsVGltZXIgZmFpbGVkLCBUaW1lciBoYXNuJ3QgYmVlbiBpbml0aWFsaXplIVxuIikpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNldCBMRUQgU3RhdHVzCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJU3RhdHVzCQkJCQlMRUQgU3RhdHVzCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QU2V0TEVEKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiBVQ0hBUgkJCVN0YXR1cykKK3sKKwkvL1VMT05HCQkJZGF0YTsKKwlVQ0hBUgkJCUhpZ2hCeXRlID0gMDsKKwlVQ0hBUgkJCUxvd0J5dGU7CisKKy8vIEluIEFURSBtb2RlIG9mIFJUMjg2MCBBUC9TVEEsIHdlIGhhdmUgZXJhc2VkIDgwNTEgZmlybXdhcmUuCisvLyBTbyBMRUQgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gQVRFIGlzIHJ1bm5pbmcuCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCUxvd0J5dGUgPSBwQWQtPkxlZENudGwuZmllbGQuTGVkTW9kZSYweDdmOworCXN3aXRjaCAoU3RhdHVzKQorCXsKKwkJY2FzZSBMRURfTElOS19ET1dOOgorCQkJSGlnaEJ5dGUgPSAweDIwOworCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUwLCAweGZmLCBMb3dCeXRlLCBIaWdoQnl0ZSk7CisJCQlwQWQtPkxlZEluZGljYXRvclN0cmVndGggPSAwOworCQkJYnJlYWs7CisJCWNhc2UgTEVEX0xJTktfVVA6CisJCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQorCQkJCUhpZ2hCeXRlID0gMHhhMDsKKwkJCWVsc2UKKwkJCQlIaWdoQnl0ZSA9IDB4NjA7CisJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKKwkJCWJyZWFrOworCQljYXNlIExFRF9SQURJT19PTjoKKwkJCUhpZ2hCeXRlID0gMHgyMDsKKwkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOworCQkJYnJlYWs7CisJCWNhc2UgTEVEX0hBTFQ6CisJCQlMb3dCeXRlID0gMDsgLy8gRHJpdmVyIHNldHMgTUFDIHJlZ2lzdGVyIGFuZCBNQUMgY29udHJvbHMgTEVECisJCWNhc2UgTEVEX1JBRElPX09GRjoKKwkJCUhpZ2hCeXRlID0gMDsKKwkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOworCQkJYnJlYWs7CisgICAgICAgIGNhc2UgTEVEX1dQUzoKKwkJCUhpZ2hCeXRlID0gMHgxMDsKKwkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOworCQkJYnJlYWs7CisJCWNhc2UgTEVEX09OX1NJVEVfU1VSVkVZOgorCQkJSGlnaEJ5dGUgPSAweDA4OworCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUwLCAweGZmLCBMb3dCeXRlLCBIaWdoQnl0ZSk7CisJCQlicmVhazsKKwkJY2FzZSBMRURfUE9XRVJfVVA6CisJCQlIaWdoQnl0ZSA9IDB4MDQ7CisJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJSVE1QU2V0TEVEOjpVbmtub3duIFN0YXR1cyAlZFxuIiwgU3RhdHVzKSk7CisJCQlicmVhazsKKwl9CisKKyAgICAvLworCS8vIEtlZXAgTEVEIHN0YXR1cyBmb3IgTEVEIFNpdGVTdXJ2ZXkgbW9kZS4KKwkvLyBBZnRlciBTaXRlU3VydmV5LCB3ZSB3aWxsIHNldCB0aGUgTEVEIG1vZGUgdG8gcHJldmlvdXMgc3RhdHVzLgorCS8vCisJaWYgKChTdGF0dXMgIT0gTEVEX09OX1NJVEVfU1VSVkVZKSAmJiAoU3RhdHVzICE9IExFRF9QT1dFUl9VUCkpCisJCXBBZC0+TGVkU3RhdHVzID0gU3RhdHVzOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNldExFRDo6TW9kZT0lZCxIaWdoQnl0ZT0weCUwMngsTG93Qnl0ZT0weCUwMnhcbiIsIHBBZC0+TGVkQ250bC5maWVsZC5MZWRNb2RlLCBIaWdoQnl0ZSwgTG93Qnl0ZSkpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU2V0IExFRCBTaWduYWwgU3RyZWd0aAorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCURibQkJCQkJCVNpZ25hbCBTdHJlZ3RoCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCQlDYW4gYmUgcnVuIG9uIGFueSBJUlFMIGxldmVsLgorCisJCUFjY29yZGluZyB0byBNaWNyb3NvZnQgWmVybyBDb25maWcgV2lyZWxlc3MgU2lnbmFsIFN0cmVndGggZGVmaW5pdGlvbiBhcyBiZWxvd3MuCisJCTw9IC05MCAgTm8gU2lnbmFsCisJCTw9IC04MSAgVmVyeSBMb3cKKwkJPD0gLTcxICBMb3cKKwkJPD0gLTY3ICBHb29kCisJCTw9IC01NyAgVmVyeSBHb29kCisJCSA+IC01NyAgRXhjZWxsZW50CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QU2V0U2lnbmFsTEVEKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiBORElTXzgwMl8xMV9SU1NJIERibSkKK3sKKwlVQ0hBUgkJbkxlZCA9IDA7CisKKwkvLworCS8vIGlmIG5vdCBTaWduYWwgU3RyZWd0aCwgdGhlbiBkbyBub3RoaW5nLgorCS8vCisJaWYgKHBBZC0+TGVkQ250bC5maWVsZC5MZWRNb2RlICE9IExFRF9NT0RFX1NJR05BTF9TVFJFR1RIKQorCXsKKwkJcmV0dXJuOworCX0KKworCWlmIChEYm0gPD0gLTkwKQorCQluTGVkID0gMDsKKwllbHNlIGlmIChEYm0gPD0gLTgxKQorCQluTGVkID0gMTsKKwllbHNlIGlmIChEYm0gPD0gLTcxKQorCQluTGVkID0gMzsKKwllbHNlIGlmIChEYm0gPD0gLTY3KQorCQluTGVkID0gNzsKKwllbHNlIGlmIChEYm0gPD0gLTU3KQorCQluTGVkID0gMTU7CisJZWxzZQorCQluTGVkID0gMzE7CisKKwkvLworCS8vIFVwZGF0ZSBTaWduYWwgU3RyZWd0aCB0byBmaXJtd2FyZSBpZiBjaGFuZ2VkLgorCS8vCisJaWYgKHBBZC0+TGVkSW5kaWNhdG9yU3RyZWd0aCAhPSBuTGVkKQorCXsKKwkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUxLCAweGZmLCBuTGVkLCBwQWQtPkxlZENudGwuZmllbGQuUG9sYXJpdHkpOworCQlwQWQtPkxlZEluZGljYXRvclN0cmVndGggPSBuTGVkOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUVuYWJsZSBSWAorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPD0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCUJlZm9yZSBFbmFibGUgUlgsIG1ha2Ugc3VyZSB5b3UgaGF2ZSBlbmFibGVkIEludGVycnVwdC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBFbmFibGVSeFR4KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworLy8JV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7CisvLwlVTE9ORwlpID0gMDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QRW5hYmxlUnhUeFxuIikpOworCisJLy8gRW5hYmxlIFJ4IERNQS4KKwlSVDI4WFhETUFFbmFibGUocEFkKTsKKworCS8vIGVuYWJsZSBSWCBvZiBNQUMgYmxvY2sKKwlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKQorCXsKKwkJVUlOVDMyIHJ4X2ZpbHRlcl9mbGFnID0gQVBOT1JNQUw7CisKKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9GSUxUUl9DRkcsIHJ4X2ZpbHRlcl9mbGFnKTsgICAgIC8vIGVuYWJsZSBSWCBvZiBETUEgYmxvY2sKKwl9CisJZWxzZQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfRklMVFJfQ0ZHLCBTVEFOT1JNQUwpOyAgICAgLy8gU3RhaW9uIG5vdCBkcm9wIGNvbnRyb2wgZnJhbWUgd2lsbCBmYWlsIFdpRmkgQ2VydGlmaWNhdGlvbi4KKwl9CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4Yyk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IFJUTVBFbmFibGVSeFR4XG4iKSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX3RraXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjg5ODZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF90a2lwLmMKQEAgLTAsMCArMSwxNjEzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfdGtpcC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUGF1bCBXdQkJMDItMjUtMDIJCUluaXRpYWwKKyovCisKKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKworLy8gUm90YXRpb24gZnVuY3Rpb25zIG9uIDMyIGJpdCB2YWx1ZXMKKyNkZWZpbmUgUk9MMzIoIEEsIG4gKSBcCisJKCAoKEEpIDw8IChuKSkgfCAoICgoQSk+PigzMi0obikpKSAmICggKDFVTCA8PCAobikpIC0gMSApICkgKQorI2RlZmluZSBST1IzMiggQSwgbiApIFJPTDMyKCAoQSksIDMyLShuKSApCisKK1VJTlQgVGtpcF9TYm94X0xvd2VyWzI1Nl0gPQoreworCTB4QTUsMHg4NCwweDk5LDB4OEQsMHgwRCwweEJELDB4QjEsMHg1NCwKKwkweDUwLDB4MDMsMHhBOSwweDdELDB4MTksMHg2MiwweEU2LDB4OUEsCisJMHg0NSwweDlELDB4NDAsMHg4NywweDE1LDB4RUIsMHhDOSwweDBCLAorCTB4RUMsMHg2NywweEZELDB4RUEsMHhCRiwweEY3LDB4OTYsMHg1QiwKKwkweEMyLDB4MUMsMHhBRSwweDZBLDB4NUEsMHg0MSwweDAyLDB4NEYsCisJMHg1QywweEY0LDB4MzQsMHgwOCwweDkzLDB4NzMsMHg1MywweDNGLAorCTB4MEMsMHg1MiwweDY1LDB4NUUsMHgyOCwweEExLDB4MEYsMHhCNSwKKwkweDA5LDB4MzYsMHg5QiwweDNELDB4MjYsMHg2OSwweENELDB4OUYsCisJMHgxQiwweDlFLDB4NzQsMHgyRSwweDJELDB4QjIsMHhFRSwweEZCLAorCTB4RjYsMHg0RCwweDYxLDB4Q0UsMHg3QiwweDNFLDB4NzEsMHg5NywKKwkweEY1LDB4NjgsMHgwMCwweDJDLDB4NjAsMHgxRiwweEM4LDB4RUQsCisJMHhCRSwweDQ2LDB4RDksMHg0QiwweERFLDB4RDQsMHhFOCwweDRBLAorCTB4NkIsMHgyQSwweEU1LDB4MTYsMHhDNSwweEQ3LDB4NTUsMHg5NCwKKwkweENGLDB4MTAsMHgwNiwweDgxLDB4RjAsMHg0NCwweEJBLDB4RTMsCisJMHhGMywweEZFLDB4QzAsMHg4QSwweEFELDB4QkMsMHg0OCwweDA0LAorCTB4REYsMHhDMSwweDc1LDB4NjMsMHgzMCwweDFBLDB4MEUsMHg2RCwKKwkweDRDLDB4MTQsMHgzNSwweDJGLDB4RTEsMHhBMiwweENDLDB4MzksCisJMHg1NywweEYyLDB4ODIsMHg0NywweEFDLDB4RTcsMHgyQiwweDk1LAorCTB4QTAsMHg5OCwweEQxLDB4N0YsMHg2NiwweDdFLDB4QUIsMHg4MywKKwkweENBLDB4MjksMHhEMywweDNDLDB4NzksMHhFMiwweDFELDB4NzYsCisJMHgzQiwweDU2LDB4NEUsMHgxRSwweERCLDB4MEEsMHg2QywweEU0LAorCTB4NUQsMHg2RSwweEVGLDB4QTYsMHhBOCwweEE0LDB4MzcsMHg4QiwKKwkweDMyLDB4NDMsMHg1OSwweEI3LDB4OEMsMHg2NCwweEQyLDB4RTAsCisJMHhCNCwweEZBLDB4MDcsMHgyNSwweEFGLDB4OEUsMHhFOSwweDE4LAorCTB4RDUsMHg4OCwweDZGLDB4NzIsMHgyNCwweEYxLDB4QzcsMHg1MSwKKwkweDIzLDB4N0MsMHg5QywweDIxLDB4REQsMHhEQywweDg2LDB4ODUsCisJMHg5MCwweDQyLDB4QzQsMHhBQSwweEQ4LDB4MDUsMHgwMSwweDEyLAorCTB4QTMsMHg1RiwweEY5LDB4RDAsMHg5MSwweDU4LDB4MjcsMHhCOSwKKwkweDM4LDB4MTMsMHhCMywweDMzLDB4QkIsMHg3MCwweDg5LDB4QTcsCisJMHhCNiwweDIyLDB4OTIsMHgyMCwweDQ5LDB4RkYsMHg3OCwweDdBLAorCTB4OEYsMHhGOCwweDgwLDB4MTcsMHhEQSwweDMxLDB4QzYsMHhCOCwKKwkweEMzLDB4QjAsMHg3NywweDExLDB4Q0IsMHhGQywweEQ2LDB4M0EKK307CisKK1VJTlQgVGtpcF9TYm94X1VwcGVyWzI1Nl0gPQoreworCTB4QzYsMHhGOCwweEVFLDB4RjYsMHhGRiwweEQ2LDB4REUsMHg5MSwKKwkweDYwLDB4MDIsMHhDRSwweDU2LDB4RTcsMHhCNSwweDRELDB4RUMsCisJMHg4RiwweDFGLDB4ODksMHhGQSwweEVGLDB4QjIsMHg4RSwweEZCLAorCTB4NDEsMHhCMywweDVGLDB4NDUsMHgyMywweDUzLDB4RTQsMHg5QiwKKwkweDc1LDB4RTEsMHgzRCwweDRDLDB4NkMsMHg3RSwweEY1LDB4ODMsCisJMHg2OCwweDUxLDB4RDEsMHhGOSwweEUyLDB4QUIsMHg2MiwweDJBLAorCTB4MDgsMHg5NSwweDQ2LDB4OUQsMHgzMCwweDM3LDB4MEEsMHgyRiwKKwkweDBFLDB4MjQsMHgxQiwweERGLDB4Q0QsMHg0RSwweDdGLDB4RUEsCisJMHgxMiwweDFELDB4NTgsMHgzNCwweDM2LDB4REMsMHhCNCwweDVCLAorCTB4QTQsMHg3NiwweEI3LDB4N0QsMHg1MiwweERELDB4NUUsMHgxMywKKwkweEE2LDB4QjksMHgwMCwweEMxLDB4NDAsMHhFMywweDc5LDB4QjYsCisJMHhENCwweDhELDB4NjcsMHg3MiwweDk0LDB4OTgsMHhCMCwweDg1LAorCTB4QkIsMHhDNSwweDRGLDB4RUQsMHg4NiwweDlBLDB4NjYsMHgxMSwKKwkweDhBLDB4RTksMHgwNCwweEZFLDB4QTAsMHg3OCwweDI1LDB4NEIsCisJMHhBMiwweDVELDB4ODAsMHgwNSwweDNGLDB4MjEsMHg3MCwweEYxLAorCTB4NjMsMHg3NywweEFGLDB4NDIsMHgyMCwweEU1LDB4RkQsMHhCRiwKKwkweDgxLDB4MTgsMHgyNiwweEMzLDB4QkUsMHgzNSwweDg4LDB4MkUsCisJMHg5MywweDU1LDB4RkMsMHg3QSwweEM4LDB4QkEsMHgzMiwweEU2LAorCTB4QzAsMHgxOSwweDlFLDB4QTMsMHg0NCwweDU0LDB4M0IsMHgwQiwKKwkweDhDLDB4QzcsMHg2QiwweDI4LDB4QTcsMHhCQywweDE2LDB4QUQsCisJMHhEQiwweDY0LDB4NzQsMHgxNCwweDkyLDB4MEMsMHg0OCwweEI4LAorCTB4OUYsMHhCRCwweDQzLDB4QzQsMHgzOSwweDMxLDB4RDMsMHhGMiwKKwkweEQ1LDB4OEIsMHg2RSwweERBLDB4MDEsMHhCMSwweDlDLDB4NDksCisJMHhEOCwweEFDLDB4RjMsMHhDRiwweENBLDB4RjQsMHg0NywweDEwLAorCTB4NkYsMHhGMCwweDRBLDB4NUMsMHgzOCwweDU3LDB4NzMsMHg5NywKKwkweENCLDB4QTEsMHhFOCwweDNFLDB4OTYsMHg2MSwweDBELDB4MEYsCisJMHhFMCwweDdDLDB4NzEsMHhDQywweDkwLDB4MDYsMHhGNywweDFDLAorCTB4QzIsMHg2QSwweEFFLDB4NjksMHgxNywweDk5LDB4M0EsMHgyNywKKwkweEQ5LDB4RUIsMHgyQiwweDIyLDB4RDIsMHhBOSwweDA3LDB4MzMsCisJMHgyRCwweDNDLDB4MTUsMHhDOSwweDg3LDB4QUEsMHg1MCwweEE1LAorCTB4MDMsMHg1OSwweDA5LDB4MUEsMHg2NSwweEQ3LDB4ODQsMHhEMCwKKwkweDgyLDB4MjksMHg1QSwweDFFLDB4N0IsMHhBOCwweDZELDB4MkMKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKiBTQk9YIFRhYmxlICoqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworVUNIQVIgU2JveFRhYmxlWzI1Nl0gPQoreworCTB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUsCisJMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NiwKKwkweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwLAorCTB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsCisJMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYywKKwkweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1LAorCTB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEsCisJMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NSwKKwkweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwLAorCTB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQsCisJMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1YiwKKwkweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmLAorCTB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUsCisJMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOCwKKwkweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1LAorCTB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIsCisJMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNywKKwkweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczLAorCTB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgsCisJMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYiwKKwkweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjLAorCTB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzksCisJMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOSwKKwkweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4LAorCTB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYsCisJMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YSwKKwkweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlLAorCTB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUsCisJMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NCwKKwkweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmLAorCTB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgsCisJMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNgorfTsKKworVk9JRCB4b3JfMzIoCisJSU4gIFBVQ0hBUiAgICAgICAgICAgICAgYSwKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBiLAorCU9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgeG9yXzEyOCgKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBhLAorCUlOICBQVUNIQVIgICAgICAgICAgICAgIGIsCisJT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVk9JRCBuZXh0X2tleSgKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBrZXksCisJSU4gIElOVCAgICAgICAgICAgICAgICAgcm91bmQpOworCitWT0lEIGJ5dGVfc3ViKAorCUlOICBQVUNIQVIgICAgICAgICAgICAgIGluLAorCU9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgc2hpZnRfcm93KAorCUlOICBQVUNIQVIgICAgICAgICAgICAgIGluLAorCU9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgbWl4X2NvbHVtbigKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBpbiwKKwlPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitVQ0hBUiBSVE1QQ2tpcFNib3goCisJSU4gIFVDSEFSICAgICAgICAgICAgICAgYSk7CisvLworLy8gRXhwYW5kZWQgSVYgZm9yIFRLSVAgZnVuY3Rpb24uCisvLwordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9JVl9DT05UUk9MXworeworCXVuaW9uIFBBQ0tFRAorCXsKKwkJc3RydWN0IFBBQ0tFRAorCQl7CisJCQlVQ0hBUgkJcmMwOworCQkJVUNIQVIJCXJjMTsKKwkJCVVDSEFSCQlyYzI7CisKKwkJCXVuaW9uIFBBQ0tFRAorCQkJeworCQkJCXN0cnVjdCBQQUNLRUQKKwkJCQl7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJCQlVQ0hBUglLZXlJRDoyOworCQkJCQlVQ0hBUglFeHRJVjoxOworCQkJCQlVQ0hBUglSc3ZkOjU7CisjZWxzZQorCQkJCQlVQ0hBUglSc3ZkOjU7CisJCQkJCVVDSEFSCUV4dElWOjE7CisJCQkJCVVDSEFSCUtleUlEOjI7CisjZW5kaWYKKwkJCQl9CWZpZWxkOworCQkJCVVDSEFSCQlCeXRlOworCQkJfQlDT05UUk9MOworCQl9CWZpZWxkOworCisJCVVMT05HCXdvcmQ7CisJfQlJVjE2OworCisJVUxPTkcJSVYzMjsKK30JVEtJUF9JViwgKlBUS0lQX0lWOworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDb252ZXJ0IGZyb20gVUNIQVJbXSB0byBVTE9ORyBpbiBhIHBvcnRhYmxlIHdheQorCisJQXJndW1lbnRzOgorICAgICAgcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitVTE9ORwlSVE1QVGtpcEdldFVJbnQzMigKKwlJTglQVUNIQVIJcE1JQ0tleSkKK3sKKwlVTE9ORwlyZXMgPSAwOworCUlOVAkJaTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJeworCQlyZXMgfD0gKCpwTUlDS2V5KyspIDw8ICg4ICogaSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvbnZlcnQgZnJvbSBVTE9ORyB0byBVQ0hBUltdIGluIGEgcG9ydGFibGUgd2F5CisKKwlBcmd1bWVudHM6CisgICAgICBwRHN0CQkJcG9pbnRlciB0byBkZXN0aW5hdGlvbiBmb3IgY29udmVydCBVTE9ORyB0byBVQ0hBUltdCisgICAgICB2YWwJCQl0aGUgdmFsdWUgZm9yIGNvbnZlcnQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QVGtpcFB1dFVJbnQzMigKKwlJTiBPVVQJUFVDSEFSCQlwRHN0LAorCUlOCQlVTE9ORwkJdmFsKQoreworCUlOVCBpOworCisJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKQorCXsKKwkJKnBEc3QrKyA9IChVQ0hBUikgKHZhbCAmIDB4ZmYpOworCQl2YWwgPj49IDg7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJU2V0IHRoZSBNSUMgS2V5LgorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICBwTUlDS2V5CQlwb2ludGVyIHRvIE1JQyBLZXkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QVGtpcFNldE1JQ0tleSgKKwlJTglQVEtJUF9LRVlfSU5GTwlwVGtpcCwKKwlJTglQVUNIQVIJCQlwTUlDS2V5KQoreworCS8vIFNldCB0aGUga2V5CisJcFRraXAtPkswID0gUlRNUFRraXBHZXRVSW50MzIocE1JQ0tleSk7CisJcFRraXAtPksxID0gUlRNUFRraXBHZXRVSW50MzIocE1JQ0tleSArIDQpOworCS8vIGFuZCByZXNldCB0aGUgbWVzc2FnZQorCXBUa2lwLT5MID0gcFRraXAtPkswOworCXBUa2lwLT5SID0gcFRraXAtPksxOworCXBUa2lwLT5uQnl0ZXNJbk0gPSAwOworCXBUa2lwLT5NID0gMDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNhbGN1bGF0ZSB0aGUgTUlDIFZhbHVlLgorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICB1Q2hhcgkJCUFwcGVuZCB0aGlzIHVDaGFyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFRraXBBcHBlbmRCeXRlKAorCUlOCVBUS0lQX0tFWV9JTkZPCXBUa2lwLAorCUlOCVVDSEFSIAkJCXVDaGFyKQoreworCS8vIEFwcGVuZCB0aGUgYnl0ZSB0byBvdXIgd29yZC1zaXplZCBidWZmZXIKKwlwVGtpcC0+TSB8PSAodUNoYXIgPDwgKDgqIHBUa2lwLT5uQnl0ZXNJbk0pKTsKKwlwVGtpcC0+bkJ5dGVzSW5NKys7CisJLy8gUHJvY2VzcyB0aGUgd29yZCBpZiBpdCBpcyBmdWxsLgorCWlmKCBwVGtpcC0+bkJ5dGVzSW5NID49IDQgKQorCXsKKwkJcFRraXAtPkwgXj0gcFRraXAtPk07CisJCXBUa2lwLT5SIF49IFJPTDMyKCBwVGtpcC0+TCwgMTcgKTsKKwkJcFRraXAtPkwgKz0gcFRraXAtPlI7CisJCXBUa2lwLT5SIF49ICgocFRraXAtPkwgJiAweGZmMDBmZjAwKSA+PiA4KSB8ICgocFRraXAtPkwgJiAweDAwZmYwMGZmKSA8PCA4KTsKKwkJcFRraXAtPkwgKz0gcFRraXAtPlI7CisJCXBUa2lwLT5SIF49IFJPTDMyKCBwVGtpcC0+TCwgMyApOworCQlwVGtpcC0+TCArPSBwVGtpcC0+UjsKKwkJcFRraXAtPlIgXj0gUk9SMzIoIHBUa2lwLT5MLCAyICk7CisJCXBUa2lwLT5MICs9IHBUa2lwLT5SOworCQkvLyBDbGVhciB0aGUgYnVmZmVyCisJCXBUa2lwLT5NID0gMDsKKwkJcFRraXAtPm5CeXRlc0luTSA9IDA7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ2FsY3VsYXRlIHRoZSBNSUMgVmFsdWUuCisKKwlBcmd1bWVudHM6CisgICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICAgIHBTcmMJCQlQb2ludGVyIHRvIHNvdXJjZSBkYXRhIGZvciBDYWxjdWxhdGUgTUlDIFZhbHVlCisgICAgICBMZW4JCQlJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgZGF0YQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBUa2lwQXBwZW5kKAorCUlOCVBUS0lQX0tFWV9JTkZPCXBUa2lwLAorCUlOCVBVQ0hBUgkJCXBTcmMsCisJSU4JVUlOVAkJCW5CeXRlcykKK3sKKwkvLyBUaGlzIGlzIHNpbXBsZQorCXdoaWxlKG5CeXRlcyA+IDApCisJeworCQlSVE1QVGtpcEFwcGVuZEJ5dGUocFRraXAsICpwU3JjKyspOworCQluQnl0ZXMtLTsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlHZXQgdGhlIE1JQyBWYWx1ZS4KKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCXRoZSBNSUMgVmFsdWUgaXMgc3RvcmUgaW4gcEFkLT5Qcml2YXRlSW5mby5NSUMKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBUa2lwR2V0TUlDKAorCUlOCVBUS0lQX0tFWV9JTkZPCXBUa2lwKQoreworCS8vIEFwcGVuZCB0aGUgbWluaW11bSBwYWRkaW5nCisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAweDVhICk7CisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJLy8gYW5kIHRoZW4gemVyb2VzIHVudGlsIHRoZSBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0CisJd2hpbGUoIHBUa2lwLT5uQnl0ZXNJbk0gIT0gMCApCisJeworCQlSVE1QVGtpcEFwcGVuZEJ5dGUocFRraXAsIDAgKTsKKwl9CisJLy8gVGhlIGFwcGVuZEJ5dGUgZnVuY3Rpb24gaGFzIGFscmVhZHkgY29tcHV0ZWQgdGhlIHJlc3VsdC4KKwlSVE1QVGtpcFB1dFVJbnQzMihwVGtpcC0+TUlDLCBwVGtpcC0+TCk7CisJUlRNUFRraXBQdXRVSW50MzIocFRraXAtPk1JQyArIDQsIHBUa2lwLT5SKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUluaXQgVGtpcCBmdW5jdGlvbi4KKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwVEtleSAgICAgICBQb2ludGVyIHRvIHRoZSBUZW1wb3JhbCBLZXkgKFRLKSwgVEsgc2hhbGwgYmUgMTI4Yml0cy4KKwkJS2V5SWQJCVRLIEtleSBJRAorCQlwVEEJCQlQb2ludGVyIHRvIHRyYW5zbWl0dGVyIGFkZHJlc3MKKwkJcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEluaXRUa2lwRW5naW5lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBLZXksCisJSU4JVUNIQVIJCQlLZXlJZCwKKwlJTglQVUNIQVIJCQlwVEEsCisJSU4JUFVDSEFSCQkJcE1JQ0tleSwKKwlJTglQVUNIQVIJCQlwVFNDLAorCU9VVAlQVUxPTkcJCQlwSVYxNiwKKwlPVVQJUFVMT05HCQkJcElWMzIpCit7CisJVEtJUF9JVgl0a2lwSXY7CisKKwkvLyBQcmVwYXJlIDggYnl0ZXMgVEtJUCBlbmNhcHN1bGF0aW9uIGZvciBNUERVCisJTmRpc1plcm9NZW1vcnkoJnRraXBJdiwgc2l6ZW9mKFRLSVBfSVYpKTsKKwl0a2lwSXYuSVYxNi5maWVsZC5yYzAgPSAqKHBUU0MgKyAxKTsKKwl0a2lwSXYuSVYxNi5maWVsZC5yYzEgPSAodGtpcEl2LklWMTYuZmllbGQucmMwIHwgMHgyMCkgJiAweDdmOworCXRraXBJdi5JVjE2LmZpZWxkLnJjMiA9ICpwVFNDOworCXRraXBJdi5JVjE2LmZpZWxkLkNPTlRST0wuZmllbGQuRXh0SVYgPSAxOyAgLy8gMDogbm9uLWV4dGVuZGVkIElWLCAxOiBhbiBleHRlbmRlZCBJVgorCXRraXBJdi5JVjE2LmZpZWxkLkNPTlRST0wuZmllbGQuS2V5SUQgPSBLZXlJZDsKKy8vCXRraXBJdi5JVjMyID0gKihQVUxPTkcpKHBUU0MgKyAyKTsKKwlOZGlzTW92ZU1lbW9yeSgmdGtpcEl2LklWMzIsIChwVFNDICsgMiksIDQpOyAgIC8vIENvcHkgSVYKKworCSpwSVYxNiA9IHRraXBJdi5JVjE2LndvcmQ7CisJKnBJVjMyID0gdGtpcEl2LklWMzI7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlJbml0IE1JQyBWYWx1ZSBjYWxjdWxhdGlvbiBmdW5jdGlvbiB3aGljaCBpbmNsdWRlIHNldCBNSUMga2V5ICYKKwkJY2FsY3VsYXRlIGZpcnN0IDE2IGJ5dGVzIChEQSArIFNBICsgcHJpb3JpdHkgKyAgMCkKKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwVEtleSAgICAgICBQb2ludGVyIHRvIHRoZSBUZW1wb3JhbCBLZXkgKFRLKSwgVEsgc2hhbGwgYmUgMTI4Yml0cy4KKwkJcERBCQkJUG9pbnRlciB0byBEQSBhZGRyZXNzCisJCXBTQQkJCVBvaW50ZXIgdG8gU0EgYWRkcmVzcworCQlwTUlDS2V5CQlwb2ludGVyIHRvIE1JQyBLZXkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEluaXRNSUNFbmdpbmUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcEtleSwKKwlJTglQVUNIQVIJCQlwREEsCisJSU4JUFVDSEFSCQkJcFNBLAorCUlOICBVQ0hBUiAgICAgICAgICAgVXNlclByaW9yaXR5LAorCUlOCVBVQ0hBUgkJCXBNSUNLZXkpCit7CisJVUxPTkcgUHJpb3JpdHkgPSBVc2VyUHJpb3JpdHk7CisKKwkvLyBJbml0IE1JQyB2YWx1ZSBjYWxjdWxhdGlvbgorCVJUTVBUa2lwU2V0TUlDS2V5KCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwTUlDS2V5KTsKKwkvLyBEQQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwREEsIE1BQ19BRERSX0xFTik7CisJLy8gU0EKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcFNBLCBNQUNfQUREUl9MRU4pOworCS8vIFByaW9yaXR5ICsgMyBieXRlcyBvZiAwCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIChQVUNIQVIpJlByaW9yaXR5LCA0KTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvbXBhcmUgTUlDIHZhbHVlIG9mIHJlY2VpdmVkIE1TRFUKKworCUFyZ3VtZW50czoKKwkJcEFkCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFNyYyAgICAgICAgUG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgUGxhaW4gdGV4dCBkYXRhCisJCXBEQQkJCVBvaW50ZXIgdG8gREEgYWRkcmVzcworCQlwU0EJCQlQb2ludGVyIHRvIFNBIGFkZHJlc3MKKwkJcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5CisJCUxlbiAgICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIHBsYWluIHRleHQgZGF0YSBleGNsdWRlIE1JQyB2YWx1ZQorCisJUmV0dXJuIFZhbHVlOgorCQlUUlVFICAgICAgICBNSUMgdmFsdWUgbWF0Y2hlZAorCQlGQUxTRSAgICAgICBNSUMgdmFsdWUgbWlzbWF0Y2hlZAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTglSVE1QVGtpcENvbXBhcmVNSUNWYWx1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVBVQ0hBUgkJCXBEQSwKKwlJTglQVUNIQVIJCQlwU0EsCisJSU4JUFVDSEFSCQkJcE1JQ0tleSwKKwlJTglVQ0hBUgkJCVVzZXJQcmlvcml0eSwKKwlJTglVSU5UCQkJTGVuKQoreworCVVDSEFSCU9sZE1pY1s4XTsKKwlVTE9ORwlQcmlvcml0eSA9IFVzZXJQcmlvcml0eTsKKworCS8vIEluaXQgTUlDIHZhbHVlIGNhbGN1bGF0aW9uCisJUlRNUFRraXBTZXRNSUNLZXkoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBNSUNLZXkpOworCS8vIERBCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBEQSwgTUFDX0FERFJfTEVOKTsKKwkvLyBTQQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwU0EsIE1BQ19BRERSX0xFTik7CisJLy8gUHJpb3JpdHkgKyAzIGJ5dGVzIG9mIDAKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgKFBVQ0hBUikmUHJpb3JpdHksIDQpOworCisJLy8gQ2FsY3VsYXRlIE1JQyB2YWx1ZSBmcm9tIHBsYWluIHRleHQgZGF0YQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwU3JjLCBMZW4pOworCisJLy8gR2V0IE1JQyB2YWx1ZGUgZnJvbSByZWNlaXZlZCBmcmFtZQorCU5kaXNNb3ZlTWVtb3J5KE9sZE1pYywgcFNyYyArIExlbiwgOCk7CisKKwkvLyBHZXQgTUlDIHZhbHVlIGZyb20gZGVjcnlwdGVkIHBsYWluIGRhdGEKKwlSVE1QVGtpcEdldE1JQygmcEFkLT5Qcml2YXRlSW5mby5SeCk7CisKKwkvLyBNb3ZlIE1JQyB2YWx1ZSBmcm9tIE1TRFUsIHRoaXMgc3RlcHMgc2hvdWxkIG1vdmUgdG8gZGF0YSBwYXRoLgorCS8vIFNpbmNlIHRoZSBNSUMgdmFsdWUgbWlnaHQgY3Jvc3MgTVBEVXMuCisJaWYoIU5kaXNFcXVhbE1lbW9yeShwQWQtPlByaXZhdGVJbmZvLlJ4Lk1JQywgT2xkTWljLCA4KSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSVE1QVGtpcENvbXBhcmVNSUNWYWx1ZSgpOiBUS0lQIE1JQyBFcnJvciAhXG4iKSk7ICAvL01JQyBlcnJvci4KKworCisJCXJldHVybiAoRkFMU0UpOworCX0KKwlyZXR1cm4gKFRSVUUpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ29tcGFyZSBNSUMgdmFsdWUgb2YgcmVjZWl2ZWQgTVNEVQorCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwTExDCQlMTEMgaGVhZGVyCisJCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIFBsYWluIHRleHQgZGF0YQorCQlwREEJCQlQb2ludGVyIHRvIERBIGFkZHJlc3MKKwkJcFNBCQkJUG9pbnRlciB0byBTQSBhZGRyZXNzCisJCXBNSUNLZXkJCXBvaW50ZXIgdG8gTUlDIEtleQorCQlMZW4gICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBwbGFpbiB0ZXh0IGRhdGEgZXhjbHVkZSBNSUMgdmFsdWUKKworCVJldHVybiBWYWx1ZToKKwkJVFJVRSAgICAgICAgTUlDIHZhbHVlIG1hdGNoZWQKKwkJRkFMU0UgICAgICAgTUlDIHZhbHVlIG1pc21hdGNoZWQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4JUlRNUFRraXBDb21wYXJlTUlDVmFsdWVXaXRoTExDKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBMTEMsCisJSU4JUFVDSEFSCQkJcFNyYywKKwlJTglQVUNIQVIJCQlwREEsCisJSU4JUFVDSEFSCQkJcFNBLAorCUlOCVBVQ0hBUgkJCXBNSUNLZXksCisJSU4JVUlOVAkJCUxlbikKK3sKKwlVQ0hBUglPbGRNaWNbOF07CisJVUxPTkcJUHJpb3JpdHkgPSAwOworCisJLy8gSW5pdCBNSUMgdmFsdWUgY2FsY3VsYXRpb24KKwlSVE1QVGtpcFNldE1JQ0tleSgmcEFkLT5Qcml2YXRlSW5mby5SeCwgcE1JQ0tleSk7CisJLy8gREEKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgcERBLCBNQUNfQUREUl9MRU4pOworCS8vIFNBCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBTQSwgTUFDX0FERFJfTEVOKTsKKwkvLyBQcmlvcml0eSArIDMgYnl0ZXMgb2YgMAorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCAoUFVDSEFSKSZQcmlvcml0eSwgNCk7CisKKwkvLyBTdGFydCB3aXRoIExMQyBoZWFkZXIKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgcExMQywgOCk7CisKKwkvLyBDYWxjdWxhdGUgTUlDIHZhbHVlIGZyb20gcGxhaW4gdGV4dCBkYXRhCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBTcmMsIExlbik7CisKKwkvLyBHZXQgTUlDIHZhbHVkZSBmcm9tIHJlY2VpdmVkIGZyYW1lCisJTmRpc01vdmVNZW1vcnkoT2xkTWljLCBwU3JjICsgTGVuLCA4KTsKKworCS8vIEdldCBNSUMgdmFsdWUgZnJvbSBkZWNyeXB0ZWQgcGxhaW4gZGF0YQorCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlJ4KTsKKworCS8vIE1vdmUgTUlDIHZhbHVlIGZyb20gTVNEVSwgdGhpcyBzdGVwcyBzaG91bGQgbW92ZSB0byBkYXRhIHBhdGguCisJLy8gU2luY2UgdGhlIE1JQyB2YWx1ZSBtaWdodCBjcm9zcyBNUERVcy4KKwlpZighTmRpc0VxdWFsTWVtb3J5KHBBZC0+UHJpdmF0ZUluZm8uUnguTUlDLCBPbGRNaWMsIDgpKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBUa2lwQ29tcGFyZU1JQ1ZhbHVlV2l0aExMQygpOiBUS0lQIE1JQyBFcnJvciAhXG4iKSk7ICAvL01JQyBlcnJvci4KKworCisJCXJldHVybiAoRkFMU0UpOworCX0KKwlyZXR1cm4gKFRSVUUpOworfQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAorCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSB0cmFuc21pdCBmdW5jdGlvbgorCisJQXJndW1lbnRzOgorCQlwQWQJCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKKwkJUE5ESVNfUEFDS0VUCVBvaW50ZXIgdG8gTmRpcyBQYWNrZXQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCQlwRW5jYXAJCQlQb2ludGVyIHRvIExMQyBlbmNhcCBkYXRhCisJCUxlbkVuY2FwCQlUb3RhbCBlbmNhcCBsZW5ndGgsIG1pZ2h0IGJlIDAgd2hpY2ggaW5kaWNhdGVzIG5vIGVuY2FwCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUENhbGN1bGF0ZU1JQ1ZhbHVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXBFbmNhcCwKKwlJTglQQ0lQSEVSX0tFWQkJcEtleSwKKwlJTglVQ0hBUgkJCWFwaWR4KQoreworCVBBQ0tFVF9JTkZPCQlQYWNrZXRJbmZvOworCVBVQ0hBUgkJCXBTcmNCdWZWQTsKKwlVSU5UCQkJU3JjQnVmTGVuOworCVBVQ0hBUgkJCXBTcmM7CisgICAgVUNIQVIgICAgICAgICAgIFVzZXJQcmlvcml0eTsKKwlVQ0hBUgkJCXZsYW5fb2Zmc2V0ID0gMDsKKworCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFNyY0J1ZlZBLCAmU3JjQnVmTGVuKTsKKworCVVzZXJQcmlvcml0eSA9IFJUTVBfR0VUX1BBQ0tFVF9VUChwUGFja2V0KTsKKwlwU3JjID0gcFNyY0J1ZlZBOworCisJLy8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSB2bGFuIHBhY2tldAorCWlmICgoKCoocFNyYyArIDEyKSA8PCA4KSArICoocFNyYyArIDEzKSkgPT0gMHg4MTAwKQorCQl2bGFuX29mZnNldCA9IDQ7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl7CisJCVJUTVBJbml0TUlDRW5naW5lKAorCQkJcEFkLAorCQkJcEtleS0+S2V5LAorCQkJcFNyYywKKwkJCXBTcmMgKyA2LAorCQkJVXNlclByaW9yaXR5LAorCQkJcEtleS0+VHhNaWMpOworCX0KKworCisJaWYgKHBFbmNhcCAhPSBOVUxMKQorCXsKKwkJLy8gTExDIGVuY2Fwc3VsYXRpb24KKwkJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIHBFbmNhcCwgNik7CisJCS8vIFByb3RvY29sIFR5cGUKKwkJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIHBTcmMgKyAxMiArIHZsYW5fb2Zmc2V0LCAyKTsKKwl9CisJU3JjQnVmTGVuIC09ICgxNCArIHZsYW5fb2Zmc2V0KTsKKwlwU3JjICs9ICgxNCArIHZsYW5fb2Zmc2V0KTsKKwlkbworCXsKKwkJaWYgKFNyY0J1ZkxlbiA+IDApCisJCXsKKwkJCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwU3JjLCBTcmNCdWZMZW4pOworCQl9CisKKwkJYnJlYWs7CS8vIE5vIG5lZWQgaGFuZGxlIG5leHQgcGFja2V0CisKKwl9CXdoaWxlIChUUlVFKTsJCS8vIEVuZCBvZiBjb3B5aW5nIHBheWxvYWQKKworCS8vIENvbXB1dGUgdGhlIGZpbmFsIE1JQyBWYWx1ZQorCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlR4KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogdGtpcF9zYm94KCkJCQkJCQkJCQkJCQkJCQkJKi8KKy8qIFJldHVybnMgYSAxNiBiaXQgdmFsdWUgZnJvbSBhIDY0SyBlbnRyeSB0YWJsZS4gVGhlIFRhYmxlICovCisvKiBpcyBzeW50aGVzaXplZCBmcm9tIHR3byAyNTYgZW50cnkgYnl0ZSB3aWRlIHRhYmxlcy4JCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitVSU5UIHRraXBfc2JveChVSU5UIGluZGV4KQoreworCVVJTlQgaW5kZXhfbG93OworCVVJTlQgaW5kZXhfaGlnaDsKKwlVSU5UIGxlZnQsIHJpZ2h0OworCisJaW5kZXhfbG93ID0gKGluZGV4ICUgMjU2KTsKKwlpbmRleF9oaWdoID0gKChpbmRleCA+PiA4KSAlIDI1Nik7CisKKwlsZWZ0ID0gVGtpcF9TYm94X0xvd2VyW2luZGV4X2xvd10gKyAoVGtpcF9TYm94X1VwcGVyW2luZGV4X2xvd10gKiAyNTYpOworCXJpZ2h0ID0gVGtpcF9TYm94X1VwcGVyW2luZGV4X2hpZ2hdICsgKFRraXBfU2JveF9Mb3dlcltpbmRleF9oaWdoXSAqIDI1Nik7CisKKwlyZXR1cm4gKGxlZnQgXiByaWdodCk7Cit9CisKK1VJTlQgcm90cjEoVUlOVCBhKQoreworCXVuc2lnbmVkIGludCBiOworCisJaWYgKChhICYgMHgwMSkgPT0gMHgwMSkKKwl7CisJCWIgPSAoYSA+PiAxKSB8IDB4ODAwMDsKKwl9CisJZWxzZQorCXsKKwkJYiA9IChhID4+IDEpICYgMHg3ZmZmOworCX0KKwliID0gYiAlIDY1NTM2OworCXJldHVybiBiOworfQorCitWT0lEIFJUTVBUa2lwTWl4S2V5KAorCVVDSEFSICprZXksCisJVUNIQVIgKnRhLAorCVVMT05HIHBubCwgLyogTGVhc3Qgc2lnbmlmaWNhbnQgMTYgYml0cyBvZiBQTiAqLworCVVMT05HIHBuaCwgLyogTW9zdCBzaWduaWZpY2FudCAzMiBiaXRzIG9mIFBOICovCisJVUNIQVIgKnJjNGtleSwKKwlVSU5UICpwMWspCit7CisKKwlVSU5UIHRzYzA7CisJVUlOVCB0c2MxOworCVVJTlQgdHNjMjsKKworCVVJTlQgcHBrMDsKKwlVSU5UIHBwazE7CisJVUlOVCBwcGsyOworCVVJTlQgcHBrMzsKKwlVSU5UIHBwazQ7CisJVUlOVCBwcGs1OworCisJSU5UIGk7CisJSU5UIGo7CisKKwl0c2MwID0gKHVuc2lnbmVkIGludCkoKHBuaCA+PiAxNikgJSA2NTUzNik7IC8qIG1zYiAqLworCXRzYzEgPSAodW5zaWduZWQgaW50KShwbmggJSA2NTUzNik7CisJdHNjMiA9ICh1bnNpZ25lZCBpbnQpKHBubCAlIDY1NTM2KTsgLyogbHNiICovCisKKwkvKiBQaGFzZSAxLCBzdGVwIDEgKi8KKwlwMWtbMF0gPSB0c2MxOworCXAxa1sxXSA9IHRzYzA7CisJcDFrWzJdID0gKFVJTlQpKHRhWzBdICsgKHRhWzFdKjI1NikpOworCXAxa1szXSA9IChVSU5UKSh0YVsyXSArICh0YVszXSoyNTYpKTsKKwlwMWtbNF0gPSAoVUlOVCkodGFbNF0gKyAodGFbNV0qMjU2KSk7CisKKwkvKiBQaGFzZSAxLCBzdGVwIDIgKi8KKwlmb3IgKGk9MDsgaTw4OyBpKyspCisJeworCQlqID0gMiooaSAmIDEpOworCQlwMWtbMF0gPSAocDFrWzBdICsgdGtpcF9zYm94KCAocDFrWzRdIF4gKCgyNTYqa2V5WzEral0pICsga2V5W2pdKSkgJSA2NTUzNiApKSAlIDY1NTM2OworCQlwMWtbMV0gPSAocDFrWzFdICsgdGtpcF9zYm94KCAocDFrWzBdIF4gKCgyNTYqa2V5WzUral0pICsga2V5WzQral0pKSAlIDY1NTM2ICkpICUgNjU1MzY7CisJCXAxa1syXSA9IChwMWtbMl0gKyB0a2lwX3Nib3goIChwMWtbMV0gXiAoKDI1NiprZXlbOStqXSkgKyBrZXlbOCtqXSkpICUgNjU1MzYgKSkgJSA2NTUzNjsKKwkJcDFrWzNdID0gKHAxa1szXSArIHRraXBfc2JveCggKHAxa1syXSBeICgoMjU2KmtleVsxMytqXSkgKyBrZXlbMTIral0pKSAlIDY1NTM2ICkpICUgNjU1MzY7CisJCXAxa1s0XSA9IChwMWtbNF0gKyB0a2lwX3Nib3goIChwMWtbM10gXiAoKCgyNTYqa2V5WzEral0pICsga2V5W2pdKSkpICUgNjU1MzYgKSkgJSA2NTUzNjsKKwkJcDFrWzRdID0gKHAxa1s0XSArIGkpICUgNjU1MzY7CisJfQorCisJLyogUGhhc2UgMiwgU3RlcCAxICovCisJcHBrMCA9IHAxa1swXTsKKwlwcGsxID0gcDFrWzFdOworCXBwazIgPSBwMWtbMl07CisJcHBrMyA9IHAxa1szXTsKKwlwcGs0ID0gcDFrWzRdOworCXBwazUgPSAocDFrWzRdICsgdHNjMikgJSA2NTUzNjsKKworCS8qIFBoYXNlMiwgU3RlcCAyICovCisJcHBrMCA9IHBwazAgKyB0a2lwX3Nib3goIChwcGs1IF4gKCgyNTYqa2V5WzFdKSArIGtleVswXSkpICUgNjU1MzYpOworCXBwazEgPSBwcGsxICsgdGtpcF9zYm94KCAocHBrMCBeICgoMjU2KmtleVszXSkgKyBrZXlbMl0pKSAlIDY1NTM2KTsKKwlwcGsyID0gcHBrMiArIHRraXBfc2JveCggKHBwazEgXiAoKDI1NiprZXlbNV0pICsga2V5WzRdKSkgJSA2NTUzNik7CisJcHBrMyA9IHBwazMgKyB0a2lwX3Nib3goIChwcGsyIF4gKCgyNTYqa2V5WzddKSArIGtleVs2XSkpICUgNjU1MzYpOworCXBwazQgPSBwcGs0ICsgdGtpcF9zYm94KCAocHBrMyBeICgoMjU2KmtleVs5XSkgKyBrZXlbOF0pKSAlIDY1NTM2KTsKKwlwcGs1ID0gcHBrNSArIHRraXBfc2JveCggKHBwazQgXiAoKDI1NiprZXlbMTFdKSArIGtleVsxMF0pKSAlIDY1NTM2KTsKKworCXBwazAgPSBwcGswICsgcm90cjEocHBrNSBeICgoMjU2KmtleVsxM10pICsga2V5WzEyXSkpOworCXBwazEgPSBwcGsxICsgcm90cjEocHBrMCBeICgoMjU2KmtleVsxNV0pICsga2V5WzE0XSkpOworCXBwazIgPSBwcGsyICsgcm90cjEocHBrMSk7CisJcHBrMyA9IHBwazMgKyByb3RyMShwcGsyKTsKKwlwcGs0ID0gcHBrNCArIHJvdHIxKHBwazMpOworCXBwazUgPSBwcGs1ICsgcm90cjEocHBrNCk7CisKKwkvKiBQaGFzZSAyLCBTdGVwIDMgKi8KKyAgICAvKiBQaGFzZSAyLCBTdGVwIDMgKi8KKworCXRzYzAgPSAodW5zaWduZWQgaW50KSgocG5oID4+IDE2KSAlIDY1NTM2KTsgLyogbXNiICovCisJdHNjMSA9ICh1bnNpZ25lZCBpbnQpKHBuaCAlIDY1NTM2KTsKKwl0c2MyID0gKHVuc2lnbmVkIGludCkocG5sICUgNjU1MzYpOyAvKiBsc2IgKi8KKworCXJjNGtleVswXSA9ICh0c2MyID4+IDgpICUgMjU2OworCXJjNGtleVsxXSA9ICgoKHRzYzIgPj4gOCkgJSAyNTYpIHwgMHgyMCkgJiAweDdmOworCXJjNGtleVsyXSA9IHRzYzIgJSAyNTY7CisJcmM0a2V5WzNdID0gKChwcGs1IF4gKCgyNTYqa2V5WzFdKSArIGtleVswXSkpID4+IDEpICUgMjU2OworCisJcmM0a2V5WzRdID0gcHBrMCAlIDI1NjsKKwlyYzRrZXlbNV0gPSAocHBrMCA+PiA4KSAlIDI1NjsKKworCXJjNGtleVs2XSA9IHBwazEgJSAyNTY7CisJcmM0a2V5WzddID0gKHBwazEgPj4gOCkgJSAyNTY7CisKKwlyYzRrZXlbOF0gPSBwcGsyICUgMjU2OworCXJjNGtleVs5XSA9IChwcGsyID4+IDgpICUgMjU2OworCisJcmM0a2V5WzEwXSA9IHBwazMgJSAyNTY7CisJcmM0a2V5WzExXSA9IChwcGszID4+IDgpICUgMjU2OworCisJcmM0a2V5WzEyXSA9IHBwazQgJSAyNTY7CisJcmM0a2V5WzEzXSA9IChwcGs0ID4+IDgpICUgMjU2OworCisJcmM0a2V5WzE0XSA9IHBwazUgJSAyNTY7CisJcmM0a2V5WzE1XSA9IChwcGs1ID4+IDgpICUgMjU2OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBjb25zdHJ1Y3RfbWljX2hlYWRlcjEoKSAgICAgICAgICAgICAgICAgICAgICAqLworLyogQnVpbGRzIHRoZSBmaXJzdCBNSUMgaGVhZGVyIGJsb2NrIGZyb20gICAgICAgKi8KKy8qIGhlYWRlciBmaWVsZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGNvbnN0cnVjdF9taWNfaGVhZGVyMSgKKwl1bnNpZ25lZCBjaGFyICptaWNfaGVhZGVyMSwKKwlpbnQgaGVhZGVyX2xlbmd0aCwKKwl1bnNpZ25lZCBjaGFyICptcGR1KQoreworCW1pY19oZWFkZXIxWzBdID0gKHVuc2lnbmVkIGNoYXIpKChoZWFkZXJfbGVuZ3RoIC0gMikgLyAyNTYpOworCW1pY19oZWFkZXIxWzFdID0gKHVuc2lnbmVkIGNoYXIpKChoZWFkZXJfbGVuZ3RoIC0gMikgJSAyNTYpOworCW1pY19oZWFkZXIxWzJdID0gbXBkdVswXSAmIDB4Y2Y7ICAgIC8qIE11dGUgQ0YgcG9sbCAmIENGIGFjayBiaXRzICovCisJbWljX2hlYWRlcjFbM10gPSBtcGR1WzFdICYgMHhjNzsgICAgLyogTXV0ZSByZXRyeSwgbW9yZSBkYXRhIGFuZCBwd3IgbWd0IGJpdHMgKi8KKwltaWNfaGVhZGVyMVs0XSA9IG1wZHVbNF07ICAgICAgIC8qIEExICovCisJbWljX2hlYWRlcjFbNV0gPSBtcGR1WzVdOworCW1pY19oZWFkZXIxWzZdID0gbXBkdVs2XTsKKwltaWNfaGVhZGVyMVs3XSA9IG1wZHVbN107CisJbWljX2hlYWRlcjFbOF0gPSBtcGR1WzhdOworCW1pY19oZWFkZXIxWzldID0gbXBkdVs5XTsKKwltaWNfaGVhZGVyMVsxMF0gPSBtcGR1WzEwXTsgICAgIC8qIEEyICovCisJbWljX2hlYWRlcjFbMTFdID0gbXBkdVsxMV07CisJbWljX2hlYWRlcjFbMTJdID0gbXBkdVsxMl07CisJbWljX2hlYWRlcjFbMTNdID0gbXBkdVsxM107CisJbWljX2hlYWRlcjFbMTRdID0gbXBkdVsxNF07CisJbWljX2hlYWRlcjFbMTVdID0gbXBkdVsxNV07Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBjb25zdHJ1Y3RfbWljX2hlYWRlcjIoKSAgICAgICAgICAgICAgICAgICAgICAqLworLyogQnVpbGRzIHRoZSBsYXN0IE1JQyBoZWFkZXIgYmxvY2sgZnJvbSAgICAgICAgKi8KKy8qIGhlYWRlciBmaWVsZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGNvbnN0cnVjdF9taWNfaGVhZGVyMigKKwl1bnNpZ25lZCBjaGFyICptaWNfaGVhZGVyMiwKKwl1bnNpZ25lZCBjaGFyICptcGR1LAorCWludCBhNF9leGlzdHMsCisJaW50IHFjX2V4aXN0cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGk8MTY7IGkrKykgbWljX2hlYWRlcjJbaV09MHgwMDsKKworCW1pY19oZWFkZXIyWzBdID0gbXBkdVsxNl07ICAgIC8qIEEzICovCisJbWljX2hlYWRlcjJbMV0gPSBtcGR1WzE3XTsKKwltaWNfaGVhZGVyMlsyXSA9IG1wZHVbMThdOworCW1pY19oZWFkZXIyWzNdID0gbXBkdVsxOV07CisJbWljX2hlYWRlcjJbNF0gPSBtcGR1WzIwXTsKKwltaWNfaGVhZGVyMls1XSA9IG1wZHVbMjFdOworCisJLy8gSW4gU2VxdWVuY2UgQ29udHJvbCBmaWVsZCwgbXV0ZSBzZXF1ZW5jZSBudW1lciBiaXRzICgxMi1iaXQpCisJbWljX2hlYWRlcjJbNl0gPSBtcGR1WzIyXSAmIDB4MGY7ICAgLyogU0MgKi8KKwltaWNfaGVhZGVyMls3XSA9IDB4MDA7IC8qIG1wZHVbMjNdOyAqLworCisJaWYgKCghcWNfZXhpc3RzKSAmIGE0X2V4aXN0cykKKwl7CisJCWZvciAoaT0wO2k8NjtpKyspIG1pY19oZWFkZXIyWzgraV0gPSBtcGR1WzI0K2ldOyAgIC8qIEE0ICovCisKKwl9CisKKwlpZiAocWNfZXhpc3RzICYmICghYTRfZXhpc3RzKSkKKwl7CisJCW1pY19oZWFkZXIyWzhdID0gbXBkdVsyNF0gJiAweDBmOyAvKiBtdXRlIGJpdHMgMTUgLSA0ICovCisJCW1pY19oZWFkZXIyWzldID0gbXBkdVsyNV0gJiAweDAwOworCX0KKworCWlmIChxY19leGlzdHMgJiYgYTRfZXhpc3RzKQorCXsKKwkJZm9yIChpPTA7aTw2O2krKykgbWljX2hlYWRlcjJbOCtpXSA9IG1wZHVbMjQraV07ICAgLyogQTQgKi8KKworCQltaWNfaGVhZGVyMlsxNF0gPSBtcGR1WzMwXSAmIDB4MGY7CisJCW1pY19oZWFkZXIyWzE1XSA9IG1wZHVbMzFdICYgMHgwMDsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGNvbnN0cnVjdF9taWNfaXYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBCdWlsZHMgdGhlIE1JQyBJViBmcm9tIGhlYWRlciBmaWVsZHMgYW5kIFBOICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBjb25zdHJ1Y3RfbWljX2l2KAorCXVuc2lnbmVkIGNoYXIgKm1pY19pdiwKKwlpbnQgcWNfZXhpc3RzLAorCWludCBhNF9leGlzdHMsCisJdW5zaWduZWQgY2hhciAqbXBkdSwKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW5ndGgsCisJdW5zaWduZWQgY2hhciAqcG5fdmVjdG9yKQoreworCWludCBpOworCisJbWljX2l2WzBdID0gMHg1OTsKKwlpZiAocWNfZXhpc3RzICYmIGE0X2V4aXN0cykKKwkJbWljX2l2WzFdID0gbXBkdVszMF0gJiAweDBmOyAgICAvKiBRb1NfVEMgICAgICAgICAgICovCisJaWYgKHFjX2V4aXN0cyAmJiAhYTRfZXhpc3RzKQorCQltaWNfaXZbMV0gPSBtcGR1WzI0XSAmIDB4MGY7ICAgLyogbXV0ZSBiaXRzIDctNCAgICAqLworCWlmICghcWNfZXhpc3RzKQorCQltaWNfaXZbMV0gPSAweDAwOworCWZvciAoaSA9IDI7IGkgPCA4OyBpKyspCisJCW1pY19pdltpXSA9IG1wZHVbaSArIDhdOyAgICAgICAgICAgICAgICAgICAgLyogbWljX2l2WzI6N10gPSBBMlswOjVdID0gbXBkdVsxMDoxNV0gKi8KKyNpZmRlZiBDT05TSVNURU5UX1BOX09SREVSCisJCWZvciAoaSA9IDg7IGkgPCAxNDsgaSsrKQorCQkJbWljX2l2W2ldID0gcG5fdmVjdG9yW2kgLSA4XTsgICAgICAgICAgIC8qIG1pY19pdls4OjEzXSA9IFBOWzA6NV0gKi8KKyNlbHNlCisJCWZvciAoaSA9IDg7IGkgPCAxNDsgaSsrKQorCQkJbWljX2l2W2ldID0gcG5fdmVjdG9yWzEzIC0gaV07ICAgICAgICAgIC8qIG1pY19pdls4OjEzXSA9IFBOWzU6MF0gKi8KKyNlbmRpZgorCWkgPSAocGF5bG9hZF9sZW5ndGggLyAyNTYpOworCWkgPSAocGF5bG9hZF9sZW5ndGggJSAyNTYpOworCW1pY19pdlsxNF0gPSAodW5zaWduZWQgY2hhcikgKHBheWxvYWRfbGVuZ3RoIC8gMjU2KTsKKwltaWNfaXZbMTVdID0gKHVuc2lnbmVkIGNoYXIpIChwYXlsb2FkX2xlbmd0aCAlIDI1Nik7CisKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBiaXR3aXNlX3hvcigpICAgICAgICAgICAgICAgICAgICAqLworLyogQSAxMjggYml0LCBiaXR3aXNlIGV4Y2x1c2l2ZSBvciAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYml0d2lzZV94b3IodW5zaWduZWQgY2hhciAqaW5hLCB1bnNpZ25lZCBjaGFyICppbmIsIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKwlpbnQgaTsKKwlmb3IgKGk9MDsgaTwxNjsgaSsrKQorCXsKKwkJb3V0W2ldID0gaW5hW2ldIF4gaW5iW2ldOworCX0KK30KKworCit2b2lkIGFlczEyOGsxMjhkKHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCkKK3sKKwlpbnQgcm91bmQ7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBpbnRlcm1lZGlhdGVhWzE2XTsKKwl1bnNpZ25lZCBjaGFyIGludGVybWVkaWF0ZWJbMTZdOworCXVuc2lnbmVkIGNoYXIgcm91bmRfa2V5WzE2XTsKKworCWZvcihpPTA7IGk8MTY7IGkrKykgcm91bmRfa2V5W2ldID0ga2V5W2ldOworCisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgMTE7IHJvdW5kKyspCisJeworCQlpZiAocm91bmQgPT0gMCkKKwkJeworCQkJeG9yXzEyOChyb3VuZF9rZXksIGRhdGEsIGNpcGhlcnRleHQpOworCQkJbmV4dF9rZXkocm91bmRfa2V5LCByb3VuZCk7CisJCX0KKwkJZWxzZSBpZiAocm91bmQgPT0gMTApCisJCXsKKwkJCWJ5dGVfc3ViKGNpcGhlcnRleHQsIGludGVybWVkaWF0ZWEpOworCQkJc2hpZnRfcm93KGludGVybWVkaWF0ZWEsIGludGVybWVkaWF0ZWIpOworCQkJeG9yXzEyOChpbnRlcm1lZGlhdGViLCByb3VuZF9rZXksIGNpcGhlcnRleHQpOworCQl9CisJCWVsc2UgICAgLyogMSAtIDkgKi8KKwkJeworCQkJYnl0ZV9zdWIoY2lwaGVydGV4dCwgaW50ZXJtZWRpYXRlYSk7CisJCQlzaGlmdF9yb3coaW50ZXJtZWRpYXRlYSwgaW50ZXJtZWRpYXRlYik7CisJCQltaXhfY29sdW1uKCZpbnRlcm1lZGlhdGViWzBdLCAmaW50ZXJtZWRpYXRlYVswXSk7CisJCQltaXhfY29sdW1uKCZpbnRlcm1lZGlhdGViWzRdLCAmaW50ZXJtZWRpYXRlYVs0XSk7CisJCQltaXhfY29sdW1uKCZpbnRlcm1lZGlhdGViWzhdLCAmaW50ZXJtZWRpYXRlYVs4XSk7CisJCQltaXhfY29sdW1uKCZpbnRlcm1lZGlhdGViWzEyXSwgJmludGVybWVkaWF0ZWFbMTJdKTsKKwkJCXhvcl8xMjgoaW50ZXJtZWRpYXRlYSwgcm91bmRfa2V5LCBjaXBoZXJ0ZXh0KTsKKwkJCW5leHRfa2V5KHJvdW5kX2tleSwgcm91bmQpOworCQl9CisJfQorCit9CisKK3ZvaWQgY29uc3RydWN0X2N0cl9wcmVsb2FkKAorCXVuc2lnbmVkIGNoYXIgKmN0cl9wcmVsb2FkLAorCWludCBhNF9leGlzdHMsCisJaW50IHFjX2V4aXN0cywKKwl1bnNpZ25lZCBjaGFyICptcGR1LAorCXVuc2lnbmVkIGNoYXIgKnBuX3ZlY3RvciwKKwlpbnQgYykKK3sKKworCWludCBpID0gMDsKKwlmb3IgKGk9MDsgaTwxNjsgaSsrKSBjdHJfcHJlbG9hZFtpXSA9IDB4MDA7CisJaSA9IDA7CisKKwljdHJfcHJlbG9hZFswXSA9IDB4MDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWcgKi8KKwlpZiAocWNfZXhpc3RzICYmIGE0X2V4aXN0cykgY3RyX3ByZWxvYWRbMV0gPSBtcGR1WzMwXSAmIDB4MGY7ICAgLyogUW9DX0NvbnRyb2wgICovCisJaWYgKHFjX2V4aXN0cyAmJiAhYTRfZXhpc3RzKSBjdHJfcHJlbG9hZFsxXSA9IG1wZHVbMjRdICYgMHgwZjsKKworCWZvciAoaSA9IDI7IGkgPCA4OyBpKyspCisJCWN0cl9wcmVsb2FkW2ldID0gbXBkdVtpICsgOF07ICAgICAgICAgICAgICAgICAgICAgICAvKiBjdHJfcHJlbG9hZFsyOjddID0gQTJbMDo1XSA9IG1wZHVbMTA6MTVdICovCisjaWZkZWYgQ09OU0lTVEVOVF9QTl9PUkRFUgorCSAgZm9yIChpID0gODsgaSA8IDE0OyBpKyspCisJCQljdHJfcHJlbG9hZFtpXSA9ICAgIHBuX3ZlY3RvcltpIC0gOF07ICAgICAgICAgICAvKiBjdHJfcHJlbG9hZFs4OjEzXSA9IFBOWzA6NV0gKi8KKyNlbHNlCisJICBmb3IgKGkgPSA4OyBpIDwgMTQ7IGkrKykKKwkJCWN0cl9wcmVsb2FkW2ldID0gICAgcG5fdmVjdG9yWzEzIC0gaV07ICAgICAgICAgIC8qIGN0cl9wcmVsb2FkWzg6MTNdID0gUE5bNTowXSAqLworI2VuZGlmCisJY3RyX3ByZWxvYWRbMTRdID0gICh1bnNpZ25lZCBjaGFyKSAoYyAvIDI1Nik7IC8vIEN0cgorCWN0cl9wcmVsb2FkWzE1XSA9ICAodW5zaWduZWQgY2hhcikgKGMgJSAyNTYpOworCit9CisKKworLy8KKy8vIFRSVUU6IFN1Y2Nlc3MhCisvLyBGQUxTRTogRGVjcnlwdCBFcnJvciEKKy8vCitCT09MRUFOIFJUTVBTb2Z0RGVjcnlwdFRLSVAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCXBEYXRhLAorCUlOIFVMT05HCURhdGFCeXRlQ250LAorCUlOIFVDSEFSICAgIFVzZXJQcmlvcml0eSwKKwlJTiBQQ0lQSEVSX0tFWQlwV3BhS2V5KQoreworCVVDSEFSCQkJS2V5SUQ7CisJVUlOVAkJCUhlYWRlckxlbjsKKyAgICBVQ0hBUgkJCWZjMDsKKwlVQ0hBUgkJCWZjMTsKKwlVU0hPUlQJCQlmYzsKKwlVSU5UCQkJZnJhbWVfdHlwZTsKKwlVSU5UCQkJZnJhbWVfc3VidHlwZTsKKyAgICBVSU5UCQkJZnJvbV9kczsKKyAgICBVSU5UCQkJdG9fZHM7CisJSU5UCQkJCWE0X2V4aXN0czsKKwlJTlQJCQkJcWNfZXhpc3RzOworCVVTSE9SVAkJCWR1cmF0aW9uOworCVVTSE9SVAkJCXNlcV9jb250cm9sOworCVVTSE9SVAkJCXFvc19jb250cm9sOworCVVDSEFSCQkJVEFbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUgkJCURBW01BQ19BRERSX0xFTl07CisJVUNIQVIJCQlTQVtNQUNfQUREUl9MRU5dOworCVVDSEFSCQkJUkM0S2V5WzE2XTsKKwlVSU5UCQkJcDFrWzVdOyAvL2ZvciBtaXhfa2V5OworCVVMT05HCQkJcG5sOy8qIExlYXN0IHNpZ25pZmljYW50IDE2IGJpdHMgb2YgUE4gKi8KKwlVTE9ORwkJCXBuaDsvKiBNb3N0IHNpZ25pZmljYW50IDMyIGJpdHMgb2YgUE4gKi8KKwlVSU5UCQkJbnVtX2Jsb2NrczsKKwlVSU5UCQkJcGF5bG9hZF9yZW1haW5kZXI7CisJQVJDRk9VUkNPTlRFWFQgCUFyY0ZvdXJDb250ZXh0OworCVVJTlQJCQljcmMzMiA9IDA7CisJVUlOVAkJCXRyYWlsZmNzID0gMDsKKwlVQ0hBUgkJCU1JQ1s4XTsKKwlVQ0hBUgkJCVRyYWlsTUlDWzhdOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpcERhdGEsIERJUl9SRUFELCBGQUxTRSk7CisjZW5kaWYKKworCWZjMCA9ICpwRGF0YTsKKwlmYzEgPSAqKHBEYXRhICsgMSk7CisKKwlmYyA9ICooKFBVU0hPUlQpcERhdGEpOworCisJZnJhbWVfdHlwZSA9ICgoZmMwID4+IDIpICYgMHgwMyk7CisJZnJhbWVfc3VidHlwZSA9ICgoZmMwID4+IDQpICYgMHgwZik7CisKKyAgICBmcm9tX2RzID0gKGZjMSAmIDB4MikgPj4gMTsKKyAgICB0b19kcyA9IChmYzEgJiAweDEpOworCisgICAgYTRfZXhpc3RzID0gKGZyb21fZHMgJiB0b19kcyk7CisgICAgcWNfZXhpc3RzID0gKChmcmFtZV9zdWJ0eXBlID09IDB4MDgpIHx8ICAgIC8qIEFzc3VtZWQgUW9TIHN1YnR5cGVzICovCisgICAgICAgICAgICAgICAgICAoZnJhbWVfc3VidHlwZSA9PSAweDA5KSB8fCAgIC8qIExpa2VseSB0byBjaGFuZ2UuICAgICovCisgICAgICAgICAgICAgICAgICAoZnJhbWVfc3VidHlwZSA9PSAweDBhKSB8fAorICAgICAgICAgICAgICAgICAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwYikKKyAgICAgICAgICAgICAgICAgKTsKKworCUhlYWRlckxlbiA9IDI0OworCWlmIChhNF9leGlzdHMpCisJCUhlYWRlckxlbiArPSA2OworCisJS2V5SUQgPSAqKChQVUNIQVIpKHBEYXRhKyBIZWFkZXJMZW4gKyAzKSk7CisJS2V5SUQgPSBLZXlJRCA+PiA2OworCisJaWYgKHBXcGFLZXlbS2V5SURdLktleUxlbiA9PSAwKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNvZnREZWNyeXB0VEtJUCBmYWlsZWQhKEtleUlEWyVkXSBMZW5ndGggY2FuIG5vdCBiZSAwKVxuIiwgS2V5SUQpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWR1cmF0aW9uID0gKigoUFVTSE9SVCkocERhdGErMikpOworCisJc2VxX2NvbnRyb2wgPSAqKChQVVNIT1JUKShwRGF0YSsyMikpOworCisJaWYgKHFjX2V4aXN0cykKKwl7CisJCWlmIChhNF9leGlzdHMpCisJCXsKKwkJCXFvc19jb250cm9sID0gKigoUFVTSE9SVCkocERhdGErMzApKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXFvc19jb250cm9sID0gKigoUFVTSE9SVCkocERhdGErMjQpKTsKKwkJfQorCX0KKworCWlmICh0b19kcyA9PSAwICYmIGZyb21fZHMgPT0gMSkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KERBLCBwRGF0YSs0LCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShTQSwgcERhdGErMTYsIE1BQ19BRERSX0xFTik7CisJCU5kaXNNb3ZlTWVtb3J5KFRBLCBwRGF0YSsxMCwgTUFDX0FERFJfTEVOKTsgIC8vQlNTSUQKKwl9CisJZWxzZSBpZiAodG9fZHMgPT0gMCAmJiBmcm9tX2RzID09IDAgKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoVEEsIHBEYXRhKzEwLCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGErNCwgTUFDX0FERFJfTEVOKTsKKwkJTmRpc01vdmVNZW1vcnkoU0EsIHBEYXRhKzEwLCBNQUNfQUREUl9MRU4pOworCX0KKwllbHNlIGlmICh0b19kcyA9PSAxICYmIGZyb21fZHMgPT0gMCkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KFNBLCBwRGF0YSsxMCwgTUFDX0FERFJfTEVOKTsKKwkJTmRpc01vdmVNZW1vcnkoVEEsIHBEYXRhKzEwLCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGErMTYsIE1BQ19BRERSX0xFTik7CisJfQorCWVsc2UgaWYgKHRvX2RzID09IDEgJiYgZnJvbV9kcyA9PSAxKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoVEEsIHBEYXRhKzEwLCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGErMTYsIE1BQ19BRERSX0xFTik7CisJCU5kaXNNb3ZlTWVtb3J5KFNBLCBwRGF0YSsyMiwgTUFDX0FERFJfTEVOKTsKKwl9CisKKwludW1fYmxvY2tzID0gKERhdGFCeXRlQ250IC0gMTYpIC8gMTY7CisJcGF5bG9hZF9yZW1haW5kZXIgPSAoRGF0YUJ5dGVDbnQgLSAxNikgJSAxNjsKKworCXBubCA9ICgqKHBEYXRhICsgSGVhZGVyTGVuKSkgKiAyNTYgKyAqKHBEYXRhICsgSGVhZGVyTGVuICsgMik7CisJcG5oID0gKigoUFVMT05HKShwRGF0YSArIEhlYWRlckxlbiArIDQpKTsKKwlwbmggPSBjcHUybGUzMihwbmgpOworCVJUTVBUa2lwTWl4S2V5KHBXcGFLZXlbS2V5SURdLktleSwgVEEsIHBubCwgcG5oLCBSQzRLZXksIHAxayk7CisKKwlBUkNGT1VSX0lOSVQoJkFyY0ZvdXJDb250ZXh0LCBSQzRLZXksIDE2KTsKKworCUFSQ0ZPVVJfREVDUllQVCgmQXJjRm91ckNvbnRleHQsIHBEYXRhICsgSGVhZGVyTGVuLCBwRGF0YSArIEhlYWRlckxlbiArIDgsIERhdGFCeXRlQ250IC0gSGVhZGVyTGVuIC0gOCk7CisJTmRpc01vdmVNZW1vcnkoJnRyYWlsZmNzLCBwRGF0YSArIERhdGFCeXRlQ250IC0gOCAtIDQsIDQpOworCWNyYzMyID0gUlRNUF9DQUxDX0ZDUzMyKFBQUElOSVRGQ1MzMiwgcERhdGEgKyBIZWFkZXJMZW4sIERhdGFCeXRlQ250IC0gSGVhZGVyTGVuIC0gOCAtIDQpOyAgLy9Ta2lwIElWK0VJViA4IGJ5dGVzICYgU2tpcCBsYXN0IDQgYnl0ZXMoRkNTKS4KKwljcmMzMiBePSAweGZmZmZmZmZmOyAgICAgICAgICAgICAvKiBjb21wbGVtZW50ICovCisKKyAgICBpZihjcmMzMiAhPSBjcHUybGUzMih0cmFpbGZjcykpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU29mdERlY3J5cHRUS0lQLCBXRVAgRGF0YSBJQ1YgRXJyb3IgIVxuIikpOwkgLy9JQ1YgZXJyb3IuCisKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCisJTmRpc01vdmVNZW1vcnkoVHJhaWxNSUMsIHBEYXRhICsgRGF0YUJ5dGVDbnQgLSA4IC0gOCAtIDQsIDgpOworCVJUTVBJbml0TUlDRW5naW5lKHBBZCwgcFdwYUtleVtLZXlJRF0uS2V5LCBEQSwgU0EsIFVzZXJQcmlvcml0eSwgcFdwYUtleVtLZXlJRF0uUnhNaWMpOworCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwRGF0YSArIEhlYWRlckxlbiwgRGF0YUJ5dGVDbnQgLSBIZWFkZXJMZW4gLSA4IC0gMTIpOworCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlR4KTsKKwlOZGlzTW92ZU1lbW9yeShNSUMsIHBBZC0+UHJpdmF0ZUluZm8uVHguTUlDLCA4KTsKKworCWlmICghTmRpc0VxdWFsTWVtb3J5KE1JQywgVHJhaWxNSUMsIDgpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRNUFNvZnREZWNyeXB0VEtJUCwgV0VQIERhdGEgTUlDIEVycm9yICFcbiIpKTsJIC8vTUlDIGVycm9yLgorCQkvL1JUTVBSZXBvcnRNaWNFcnJvcihwQWQsICZwV3BhS2V5W0tleUlEXSk7CS8vIG1hcmtlZCBieSBBbGJlcnRZIEAgMjAwNjA2MzAKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpcERhdGEsIERJUl9SRUFELCBGQUxTRSk7CisjZW5kaWYKKwkvL0RCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiUlRNUFNvZnREZWNyeXB0VEtJUCBEZWNyaXB0IGRvbmUhIVxuIik7CisJcmV0dXJuIFRSVUU7Cit9CisKKworCisKK0JPT0xFQU4gUlRNUFNvZnREZWNyeXB0QUVTKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUglwRGF0YSwKKwlJTiBVTE9ORwlEYXRhQnl0ZUNudCwKKwlJTiBQQ0lQSEVSX0tFWQlwV3BhS2V5KQoreworCVVDSEFSCQkJS2V5SUQ7CisJVUlOVAkJCUhlYWRlckxlbjsKKwlVQ0hBUgkJCVBOWzZdOworCVVJTlQJCQlwYXlsb2FkX2xlbjsKKwlVSU5UCQkJbnVtX2Jsb2NrczsKKwlVSU5UCQkJcGF5bG9hZF9yZW1haW5kZXI7CisJVVNIT1JUCQkJZmM7CisJVUNIQVIJCQlmYzA7CisJVUNIQVIJCQlmYzE7CisJVUlOVAkJCWZyYW1lX3R5cGU7CisJVUlOVAkJCWZyYW1lX3N1YnR5cGU7CisJVUlOVAkJCWZyb21fZHM7CisJVUlOVAkJCXRvX2RzOworCUlOVAkJCQlhNF9leGlzdHM7CisJSU5UCQkJCXFjX2V4aXN0czsKKwlVQ0hBUgkJCWFlc19vdXRbMTZdOworCWludCAJCQlwYXlsb2FkX2luZGV4OworCVVJTlQgCQkJaTsKKwlVQ0hBUiAJCQljdHJfcHJlbG9hZFsxNl07CisJVUNIQVIgCQkJY2hhaW5fYnVmZmVyWzE2XTsKKwlVQ0hBUiAJCQlwYWRkZWRfYnVmZmVyWzE2XTsKKwlVQ0hBUiAJCQltaWNfaXZbMTZdOworCVVDSEFSIAkJCW1pY19oZWFkZXIxWzE2XTsKKwlVQ0hBUiAJCQltaWNfaGVhZGVyMlsxNl07CisJVUNIQVIJCQlNSUNbOF07CisJVUNIQVIJCQlUcmFpbE1JQ1s4XTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKXBEYXRhLCBESVJfUkVBRCwgRkFMU0UpOworI2VuZGlmCisKKwlmYzAgPSAqcERhdGE7CisJZmMxID0gKihwRGF0YSArIDEpOworCisJZmMgPSAqKChQVVNIT1JUKXBEYXRhKTsKKworCWZyYW1lX3R5cGUgPSAoKGZjMCA+PiAyKSAmIDB4MDMpOworCWZyYW1lX3N1YnR5cGUgPSAoKGZjMCA+PiA0KSAmIDB4MGYpOworCisJZnJvbV9kcyA9IChmYzEgJiAweDIpID4+IDE7CisJdG9fZHMgPSAoZmMxICYgMHgxKTsKKworCWE0X2V4aXN0cyA9IChmcm9tX2RzICYgdG9fZHMpOworCXFjX2V4aXN0cyA9ICgoZnJhbWVfc3VidHlwZSA9PSAweDA4KSB8fCAgICAvKiBBc3N1bWVkIFFvUyBzdWJ0eXBlcyAqLworCQkJCSAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwOSkgfHwgICAvKiBMaWtlbHkgdG8gY2hhbmdlLiAgICAqLworCQkJCSAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwYSkgfHwKKwkJCQkgIChmcmFtZV9zdWJ0eXBlID09IDB4MGIpCisJCQkJICk7CisKKwlIZWFkZXJMZW4gPSAyNDsKKwlpZiAoYTRfZXhpc3RzKQorCQlIZWFkZXJMZW4gKz0gNjsKKworCUtleUlEID0gKigoUFVDSEFSKShwRGF0YSsgSGVhZGVyTGVuICsgMykpOworCUtleUlEID0gS2V5SUQgPj4gNjsKKworCWlmIChwV3BhS2V5W0tleUlEXS5LZXlMZW4gPT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBTb2Z0RGVjcnlwdEFFUyBmYWlsZWQhKEtleUlEWyVkXSBMZW5ndGggY2FuIG5vdCBiZSAwKVxuIiwgS2V5SUQpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCVBOWzBdID0gKihwRGF0YSsgSGVhZGVyTGVuKTsKKwlQTlsxXSA9ICoocERhdGErIEhlYWRlckxlbiArIDEpOworCVBOWzJdID0gKihwRGF0YSsgSGVhZGVyTGVuICsgNCk7CisJUE5bM10gPSAqKHBEYXRhKyBIZWFkZXJMZW4gKyA1KTsKKwlQTls0XSA9ICoocERhdGErIEhlYWRlckxlbiArIDYpOworCVBOWzVdID0gKihwRGF0YSsgSGVhZGVyTGVuICsgNyk7CisKKwlwYXlsb2FkX2xlbiA9IERhdGFCeXRlQ250IC0gSGVhZGVyTGVuIC0gOCAtIDg7CS8vIDggYnl0ZXMgZm9yIENDTVAgaGVhZGVyICwgOCBieXRlcyBmb3IgTUlDCisJcGF5bG9hZF9yZW1haW5kZXIgPSAocGF5bG9hZF9sZW4pICUgMTY7CisJbnVtX2Jsb2NrcyA9IChwYXlsb2FkX2xlbikgLyAxNjsKKworCisKKwkvLyBGaW5kIHN0YXJ0IG9mIHBheWxvYWQKKwlwYXlsb2FkX2luZGV4ID0gSGVhZGVyTGVuICsgODsgLy9JVitFSVYKKworCWZvciAoaT0wOyBpPCBudW1fYmxvY2tzOyBpKyspCisJeworCQljb25zdHJ1Y3RfY3RyX3ByZWxvYWQoY3RyX3ByZWxvYWQsCisJCQkJCQkJCWE0X2V4aXN0cywKKwkJCQkJCQkJcWNfZXhpc3RzLAorCQkJCQkJCQlwRGF0YSwKKwkJCQkJCQkJUE4sCisJCQkJCQkJCWkrMSApOworCisJCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY3RyX3ByZWxvYWQsIGFlc19vdXQpOworCisJCWJpdHdpc2VfeG9yKGFlc19vdXQsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwgY2hhaW5fYnVmZmVyKTsKKwkJTmRpc01vdmVNZW1vcnkocERhdGEgKyBwYXlsb2FkX2luZGV4IC0gOCwgY2hhaW5fYnVmZmVyLCAxNik7CisJCXBheWxvYWRfaW5kZXggKz0gMTY7CisJfQorCisJLy8KKwkvLyBJZiB0aGVyZSBpcyBhIHNob3J0IGZpbmFsIGJsb2NrLCB0aGVuIHBhZCBpdAorCS8vIGVuY3J5cHQgaXQgYW5kIGNvcHkgdGhlIHVucGFkZGVkIHBhcnQgYmFjaworCS8vCisJaWYgKHBheWxvYWRfcmVtYWluZGVyID4gMCkKKwl7CisJCWNvbnN0cnVjdF9jdHJfcHJlbG9hZChjdHJfcHJlbG9hZCwKKwkJCQkJCQkJYTRfZXhpc3RzLAorCQkJCQkJCQlxY19leGlzdHMsCisJCQkJCQkJCXBEYXRhLAorCQkJCQkJCQlQTiwKKwkJCQkJCQkJbnVtX2Jsb2NrcyArIDEpOworCisJCU5kaXNaZXJvTWVtb3J5KHBhZGRlZF9idWZmZXIsIDE2KTsKKwkJTmRpc01vdmVNZW1vcnkocGFkZGVkX2J1ZmZlciwgcERhdGEgKyBwYXlsb2FkX2luZGV4LCBwYXlsb2FkX3JlbWFpbmRlcik7CisKKwkJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjdHJfcHJlbG9hZCwgYWVzX291dCk7CisKKwkJYml0d2lzZV94b3IoYWVzX291dCwgcGFkZGVkX2J1ZmZlciwgY2hhaW5fYnVmZmVyKTsKKwkJTmRpc01vdmVNZW1vcnkocERhdGEgKyBwYXlsb2FkX2luZGV4IC0gOCwgY2hhaW5fYnVmZmVyLCBwYXlsb2FkX3JlbWFpbmRlcik7CisJCXBheWxvYWRfaW5kZXggKz0gcGF5bG9hZF9yZW1haW5kZXI7CisJfQorCisJLy8KKwkvLyBEZXNjcnlwdCB0aGUgTUlDCisJLy8KKwljb25zdHJ1Y3RfY3RyX3ByZWxvYWQoY3RyX3ByZWxvYWQsCisJCQkJCQkJYTRfZXhpc3RzLAorCQkJCQkJCXFjX2V4aXN0cywKKwkJCQkJCQlwRGF0YSwKKwkJCQkJCQlQTiwKKwkJCQkJCQkwKTsKKwlOZGlzWmVyb01lbW9yeShwYWRkZWRfYnVmZmVyLCAxNik7CisJTmRpc01vdmVNZW1vcnkocGFkZGVkX2J1ZmZlciwgcERhdGEgKyBwYXlsb2FkX2luZGV4LCA4KTsKKworCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY3RyX3ByZWxvYWQsIGFlc19vdXQpOworCisJYml0d2lzZV94b3IoYWVzX291dCwgcGFkZGVkX2J1ZmZlciwgY2hhaW5fYnVmZmVyKTsKKworCU5kaXNNb3ZlTWVtb3J5KFRyYWlsTUlDLCBjaGFpbl9idWZmZXIsIDgpOworCisJLy8KKwkvLyBDYWxjdWxhdGUgTUlDCisJLy8KKworCS8vRm9yY2UgdGhlIHByb3RlY3RlZCBmcmFtZSBiaXQgb24KKwkqKHBEYXRhICsgMSkgPSAqKHBEYXRhICsgMSkgfCAweDQwOworCisJLy8gRmluZCBzdGFydCBvZiBwYXlsb2FkCisJLy8gQmVjYXVzZSB0aGUgQ0NNUCBoZWFkZXIgaGFzIGJlZW4gcmVtb3ZlZAorCXBheWxvYWRfaW5kZXggPSBIZWFkZXJMZW47CisKKwljb25zdHJ1Y3RfbWljX2l2KAorCQkJCQltaWNfaXYsCisJCQkJCXFjX2V4aXN0cywKKwkJCQkJYTRfZXhpc3RzLAorCQkJCQlwRGF0YSwKKwkJCQkJcGF5bG9hZF9sZW4sCisJCQkJCVBOKTsKKworCWNvbnN0cnVjdF9taWNfaGVhZGVyMSgKKwkJCQkJCW1pY19oZWFkZXIxLAorCQkJCQkJSGVhZGVyTGVuLAorCQkJCQkJcERhdGEpOworCisJY29uc3RydWN0X21pY19oZWFkZXIyKAorCQkJCQkJbWljX2hlYWRlcjIsCisJCQkJCQlwRGF0YSwKKwkJCQkJCWE0X2V4aXN0cywKKwkJCQkJCXFjX2V4aXN0cyk7CisKKwlhZXMxMjhrMTI4ZChwV3BhS2V5W0tleUlEXS5LZXksIG1pY19pdiwgYWVzX291dCk7CisJYml0d2lzZV94b3IoYWVzX291dCwgbWljX2hlYWRlcjEsIGNoYWluX2J1ZmZlcik7CisJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjaGFpbl9idWZmZXIsIGFlc19vdXQpOworCWJpdHdpc2VfeG9yKGFlc19vdXQsIG1pY19oZWFkZXIyLCBjaGFpbl9idWZmZXIpOworCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY2hhaW5fYnVmZmVyLCBhZXNfb3V0KTsKKworCS8vIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIDE2IGJ5dGUgcGF5bG9hZCBibG9jaworCWZvciAoaSA9IDA7IGkgPCBudW1fYmxvY2tzOyBpKyspCisJeworCQliaXR3aXNlX3hvcihhZXNfb3V0LCBwRGF0YSArIHBheWxvYWRfaW5kZXgsIGNoYWluX2J1ZmZlcik7CisJCXBheWxvYWRfaW5kZXggKz0gMTY7CisJCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY2hhaW5fYnVmZmVyLCBhZXNfb3V0KTsKKwl9CisKKwkvLyBBZGQgb24gdGhlIGZpbmFsIHBheWxvYWQgYmxvY2sgaWYgaXQgbmVlZHMgcGFkZGluZworCWlmIChwYXlsb2FkX3JlbWFpbmRlciA+IDApCisJeworCQlOZGlzWmVyb01lbW9yeShwYWRkZWRfYnVmZmVyLCAxNik7CisJCU5kaXNNb3ZlTWVtb3J5KHBhZGRlZF9idWZmZXIsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwgcGF5bG9hZF9yZW1haW5kZXIpOworCisJCWJpdHdpc2VfeG9yKGFlc19vdXQsIHBhZGRlZF9idWZmZXIsIGNoYWluX2J1ZmZlcik7CisJCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY2hhaW5fYnVmZmVyLCBhZXNfb3V0KTsKKwl9CisKKwkvLyBhZXNfb3V0IGNvbnRhaW5zIHBhZGRlZCBtaWMsIGRpc2NhcmQgbW9zdCBzaWduaWZpY2FudAorCS8vIDggYnl0ZXMgdG8gZ2VuZXJhdGUgNjQgYml0IE1JQworCWZvciAoaSA9IDAgOyBpIDwgODsgaSsrKSBNSUNbaV0gPSBhZXNfb3V0W2ldOworCisJaWYgKCFOZGlzRXF1YWxNZW1vcnkoTUlDLCBUcmFpbE1JQywgOCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVE1QU29mdERlY3J5cHRBRVMsIE1JQyBFcnJvciAhXG4iKSk7CSAvL01JQyBlcnJvci4KKwkJcmV0dXJuIEZBTFNFOworCX0KKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKXBEYXRhLCBESVJfUkVBRCwgRkFMU0UpOworI2VuZGlmCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBhZXMxMjhrMTI4ZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFBlcmZvcm1zIGEgMTI4IGJpdCBBRVMgZW5jcnlwdCB3aXRoICAqLworLyogMTI4IGJpdCBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1ZPSUQgeG9yXzEyOCgKKwlJTiAgUFVDSEFSICBhLAorCUlOICBQVUNIQVIgIGIsCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCUlOVCBpOworCisJZm9yIChpPTA7aTwxNjsgaSsrKQorCXsKKwkJb3V0W2ldID0gYVtpXSBeIGJbaV07CisJfQorfQorCitWT0lEIG5leHRfa2V5KAorCUlOICBQVUNIQVIgIGtleSwKKwlJTiAgSU5UICAgICByb3VuZCkKK3sKKwlVQ0hBUiAgICAgICByY29uOworCVVDSEFSICAgICAgIHNib3hfa2V5WzRdOworCVVDSEFSICAgICAgIHJjb25fdGFibGVbMTJdID0KKwl7CisJCTB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisJCTB4MWIsIDB4MzYsIDB4MzYsIDB4MzYKKwl9OworCisJc2JveF9rZXlbMF0gPSBSVE1QQ2tpcFNib3goa2V5WzEzXSk7CisJc2JveF9rZXlbMV0gPSBSVE1QQ2tpcFNib3goa2V5WzE0XSk7CisJc2JveF9rZXlbMl0gPSBSVE1QQ2tpcFNib3goa2V5WzE1XSk7CisJc2JveF9rZXlbM10gPSBSVE1QQ2tpcFNib3goa2V5WzEyXSk7CisKKwlyY29uID0gcmNvbl90YWJsZVtyb3VuZF07CisKKwl4b3JfMzIoJmtleVswXSwgc2JveF9rZXksICZrZXlbMF0pOworCWtleVswXSA9IGtleVswXSBeIHJjb247CisKKwl4b3JfMzIoJmtleVs0XSwgJmtleVswXSwgJmtleVs0XSk7CisJeG9yXzMyKCZrZXlbOF0sICZrZXlbNF0sICZrZXlbOF0pOworCXhvcl8zMigma2V5WzEyXSwgJmtleVs4XSwgJmtleVsxMl0pOworfQorCitWT0lEIHhvcl8zMigKKwlJTiAgUFVDSEFSICBhLAorCUlOICBQVUNIQVIgIGIsCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCUlOVCBpOworCisJZm9yIChpPTA7aTw0OyBpKyspCisJeworCQlvdXRbaV0gPSBhW2ldIF4gYltpXTsKKwl9Cit9CisKK1ZPSUQgYnl0ZV9zdWIoCisJSU4gIFBVQ0hBUiAgaW4sCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCUlOVCBpOworCisJZm9yIChpPTA7IGk8IDE2OyBpKyspCisJeworCQlvdXRbaV0gPSBSVE1QQ2tpcFNib3goaW5baV0pOworCX0KK30KKworVUNIQVIgUlRNUENraXBTYm94KAorCUlOICBVQ0hBUiAgIGEpCit7CisJcmV0dXJuIFNib3hUYWJsZVsoaW50KWFdOworfQorCitWT0lEIHNoaWZ0X3JvdygKKwlJTiAgUFVDSEFSICBpbiwKKwlPVVQgUFVDSEFSICBvdXQpCit7CisJb3V0WzBdID0gIGluWzBdOworCW91dFsxXSA9ICBpbls1XTsKKwlvdXRbMl0gPSAgaW5bMTBdOworCW91dFszXSA9ICBpblsxNV07CisJb3V0WzRdID0gIGluWzRdOworCW91dFs1XSA9ICBpbls5XTsKKwlvdXRbNl0gPSAgaW5bMTRdOworCW91dFs3XSA9ICBpblszXTsKKwlvdXRbOF0gPSAgaW5bOF07CisJb3V0WzldID0gIGluWzEzXTsKKwlvdXRbMTBdID0gaW5bMl07CisJb3V0WzExXSA9IGluWzddOworCW91dFsxMl0gPSBpblsxMl07CisJb3V0WzEzXSA9IGluWzFdOworCW91dFsxNF0gPSBpbls2XTsKKwlvdXRbMTVdID0gaW5bMTFdOworfQorCitWT0lEIG1peF9jb2x1bW4oCisJSU4gIFBVQ0hBUiAgaW4sCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCUlOVCAgICAgICAgIGk7CisJVUNIQVIgICAgICAgYWRkMWJbNF07CisJVUNIQVIgICAgICAgYWRkMWJmN1s0XTsKKwlVQ0hBUiAgICAgICByb3RsWzRdOworCVVDSEFSICAgICAgIHN3YXBfaGFsZnNbNF07CisJVUNIQVIgICAgICAgYW5kZjdbNF07CisJVUNIQVIgICAgICAgcm90cls0XTsKKwlVQ0hBUiAgICAgICB0ZW1wWzRdOworCVVDSEFSICAgICAgIHRlbXBiWzRdOworCisJZm9yIChpPTAgOyBpPDQ7IGkrKykKKwl7CisJCWlmICgoaW5baV0gJiAweDgwKT09IDB4ODApCisJCQlhZGQxYltpXSA9IDB4MWI7CisJCWVsc2UKKwkJCWFkZDFiW2ldID0gMHgwMDsKKwl9CisKKwlzd2FwX2hhbGZzWzBdID0gaW5bMl07ICAgIC8qIFN3YXAgaGFsZnMgKi8KKwlzd2FwX2hhbGZzWzFdID0gaW5bM107CisJc3dhcF9oYWxmc1syXSA9IGluWzBdOworCXN3YXBfaGFsZnNbM10gPSBpblsxXTsKKworCXJvdGxbMF0gPSBpblszXTsgICAgICAgIC8qIFJvdGF0ZSBsZWZ0IDggYml0cyAqLworCXJvdGxbMV0gPSBpblswXTsKKwlyb3RsWzJdID0gaW5bMV07CisJcm90bFszXSA9IGluWzJdOworCisJYW5kZjdbMF0gPSBpblswXSAmIDB4N2Y7CisJYW5kZjdbMV0gPSBpblsxXSAmIDB4N2Y7CisJYW5kZjdbMl0gPSBpblsyXSAmIDB4N2Y7CisJYW5kZjdbM10gPSBpblszXSAmIDB4N2Y7CisKKwlmb3IgKGkgPSAzOyBpPjA7IGktLSkgICAgLyogbG9naWNhbCBzaGlmdCBsZWZ0IDEgYml0ICovCisJeworCQlhbmRmN1tpXSA9IGFuZGY3W2ldIDw8IDE7CisJCWlmICgoYW5kZjdbaS0xXSAmIDB4ODApID09IDB4ODApCisJCXsKKwkJCWFuZGY3W2ldID0gKGFuZGY3W2ldIHwgMHgwMSk7CisJCX0KKwl9CisJYW5kZjdbMF0gPSBhbmRmN1swXSA8PCAxOworCWFuZGY3WzBdID0gYW5kZjdbMF0gJiAweGZlOworCisJeG9yXzMyKGFkZDFiLCBhbmRmNywgYWRkMWJmNyk7CisKKwl4b3JfMzIoaW4sIGFkZDFiZjcsIHJvdHIpOworCisJdGVtcFswXSA9IHJvdHJbMF07ICAgICAgICAgLyogUm90YXRlIHJpZ2h0IDggYml0cyAqLworCXJvdHJbMF0gPSByb3RyWzFdOworCXJvdHJbMV0gPSByb3RyWzJdOworCXJvdHJbMl0gPSByb3RyWzNdOworCXJvdHJbM10gPSB0ZW1wWzBdOworCisJeG9yXzMyKGFkZDFiZjcsIHJvdHIsIHRlbXApOworCXhvcl8zMihzd2FwX2hhbGZzLCByb3RsLHRlbXBiKTsKKwl4b3JfMzIodGVtcCwgdGVtcGIsIG91dCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0bXBfd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX3dlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjBhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX3dlcC5jCkBAIC0wLDAgKzEsNTA4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfd2VwLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlQYXVsIFd1CQkxMC0yOC0wMgkJSW5pdGlhbAorKi8KKworI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgorCitVSU5UIEZDU1RBQl8zMlsyNTZdID0KK3sKKwkweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweGVlMGU2MTJjLCAweDk5MDk1MWJhLAorCTB4MDc2ZGM0MTksIDB4NzA2YWY0OGYsIDB4ZTk2M2E1MzUsIDB4OWU2NDk1YTMsCisJMHgwZWRiODgzMiwgMHg3OWRjYjhhNCwgMHhlMGQ1ZTkxZSwgMHg5N2QyZDk4OCwKKwkweDA5YjY0YzJiLCAweDdlYjE3Y2JkLCAweGU3YjgyZDA3LCAweDkwYmYxZDkxLAorCTB4MWRiNzEwNjQsIDB4NmFiMDIwZjIsIDB4ZjNiOTcxNDgsIDB4ODRiZTQxZGUsCisJMHgxYWRhZDQ3ZCwgMHg2ZGRkZTRlYiwgMHhmNGQ0YjU1MSwgMHg4M2QzODVjNywKKwkweDEzNmM5ODU2LCAweDY0NmJhOGMwLCAweGZkNjJmOTdhLCAweDhhNjVjOWVjLAorCTB4MTQwMTVjNGYsIDB4NjMwNjZjZDksIDB4ZmEwZjNkNjMsIDB4OGQwODBkZjUsCisJMHgzYjZlMjBjOCwgMHg0YzY5MTA1ZSwgMHhkNTYwNDFlNCwgMHhhMjY3NzE3MiwKKwkweDNjMDNlNGQxLCAweDRiMDRkNDQ3LCAweGQyMGQ4NWZkLCAweGE1MGFiNTZiLAorCTB4MzViNWE4ZmEsIDB4NDJiMjk4NmMsIDB4ZGJiYmM5ZDYsIDB4YWNiY2Y5NDAsCisJMHgzMmQ4NmNlMywgMHg0NWRmNWM3NSwgMHhkY2Q2MGRjZiwgMHhhYmQxM2Q1OSwKKwkweDI2ZDkzMGFjLCAweDUxZGUwMDNhLCAweGM4ZDc1MTgwLCAweGJmZDA2MTE2LAorCTB4MjFiNGY0YjUsIDB4NTZiM2M0MjMsIDB4Y2ZiYTk1OTksIDB4YjhiZGE1MGYsCisJMHgyODAyYjg5ZSwgMHg1ZjA1ODgwOCwgMHhjNjBjZDliMiwgMHhiMTBiZTkyNCwKKwkweDJmNmY3Yzg3LCAweDU4Njg0YzExLCAweGMxNjExZGFiLCAweGI2NjYyZDNkLAorCTB4NzZkYzQxOTAsIDB4MDFkYjcxMDYsIDB4OThkMjIwYmMsIDB4ZWZkNTEwMmEsCisJMHg3MWIxODU4OSwgMHgwNmI2YjUxZiwgMHg5ZmJmZTRhNSwgMHhlOGI4ZDQzMywKKwkweDc4MDdjOWEyLCAweDBmMDBmOTM0LCAweDk2MDlhODhlLCAweGUxMGU5ODE4LAorCTB4N2Y2YTBkYmIsIDB4MDg2ZDNkMmQsIDB4OTE2NDZjOTcsIDB4ZTY2MzVjMDEsCisJMHg2YjZiNTFmNCwgMHgxYzZjNjE2MiwgMHg4NTY1MzBkOCwgMHhmMjYyMDA0ZSwKKwkweDZjMDY5NWVkLCAweDFiMDFhNTdiLCAweDgyMDhmNGMxLCAweGY1MGZjNDU3LAorCTB4NjViMGQ5YzYsIDB4MTJiN2U5NTAsIDB4OGJiZWI4ZWEsIDB4ZmNiOTg4N2MsCisJMHg2MmRkMWRkZiwgMHgxNWRhMmQ0OSwgMHg4Y2QzN2NmMywgMHhmYmQ0NGM2NSwKKwkweDRkYjI2MTU4LCAweDNhYjU1MWNlLCAweGEzYmMwMDc0LCAweGQ0YmIzMGUyLAorCTB4NGFkZmE1NDEsIDB4M2RkODk1ZDcsIDB4YTRkMWM0NmQsIDB4ZDNkNmY0ZmIsCisJMHg0MzY5ZTk2YSwgMHgzNDZlZDlmYywgMHhhZDY3ODg0NiwgMHhkYTYwYjhkMCwKKwkweDQ0MDQyZDczLCAweDMzMDMxZGU1LCAweGFhMGE0YzVmLCAweGRkMGQ3Y2M5LAorCTB4NTAwNTcxM2MsIDB4MjcwMjQxYWEsIDB4YmUwYjEwMTAsIDB4YzkwYzIwODYsCisJMHg1NzY4YjUyNSwgMHgyMDZmODViMywgMHhiOTY2ZDQwOSwgMHhjZTYxZTQ5ZiwKKwkweDVlZGVmOTBlLCAweDI5ZDljOTk4LCAweGIwZDA5ODIyLCAweGM3ZDdhOGI0LAorCTB4NTliMzNkMTcsIDB4MmViNDBkODEsIDB4YjdiZDVjM2IsIDB4YzBiYTZjYWQsCisJMHhlZGI4ODMyMCwgMHg5YWJmYjNiNiwgMHgwM2I2ZTIwYywgMHg3NGIxZDI5YSwKKwkweGVhZDU0NzM5LCAweDlkZDI3N2FmLCAweDA0ZGIyNjE1LCAweDczZGMxNjgzLAorCTB4ZTM2MzBiMTIsIDB4OTQ2NDNiODQsIDB4MGQ2ZDZhM2UsIDB4N2E2YTVhYTgsCisJMHhlNDBlY2YwYiwgMHg5MzA5ZmY5ZCwgMHgwYTAwYWUyNywgMHg3ZDA3OWViMSwKKwkweGYwMGY5MzQ0LCAweDg3MDhhM2QyLCAweDFlMDFmMjY4LCAweDY5MDZjMmZlLAorCTB4Zjc2MjU3NWQsIDB4ODA2NTY3Y2IsIDB4MTk2YzM2NzEsIDB4NmU2YjA2ZTcsCisJMHhmZWQ0MWI3NiwgMHg4OWQzMmJlMCwgMHgxMGRhN2E1YSwgMHg2N2RkNGFjYywKKwkweGY5YjlkZjZmLCAweDhlYmVlZmY5LCAweDE3YjdiZTQzLCAweDYwYjA4ZWQ1LAorCTB4ZDZkNmEzZTgsIDB4YTFkMTkzN2UsIDB4MzhkOGMyYzQsIDB4NGZkZmYyNTIsCisJMHhkMWJiNjdmMSwgMHhhNmJjNTc2NywgMHgzZmI1MDZkZCwgMHg0OGIyMzY0YiwKKwkweGQ4MGQyYmRhLCAweGFmMGExYjRjLCAweDM2MDM0YWY2LCAweDQxMDQ3YTYwLAorCTB4ZGY2MGVmYzMsIDB4YTg2N2RmNTUsIDB4MzE2ZThlZWYsIDB4NDY2OWJlNzksCisJMHhjYjYxYjM4YywgMHhiYzY2ODMxYSwgMHgyNTZmZDJhMCwgMHg1MjY4ZTIzNiwKKwkweGNjMGM3Nzk1LCAweGJiMGI0NzAzLCAweDIyMDIxNmI5LCAweDU1MDUyNjJmLAorCTB4YzViYTNiYmUsIDB4YjJiZDBiMjgsIDB4MmJiNDVhOTIsIDB4NWNiMzZhMDQsCisJMHhjMmQ3ZmZhNywgMHhiNWQwY2YzMSwgMHgyY2Q5OWU4YiwgMHg1YmRlYWUxZCwKKwkweDliNjRjMmIwLCAweGVjNjNmMjI2LCAweDc1NmFhMzljLCAweDAyNmQ5MzBhLAorCTB4OWMwOTA2YTksIDB4ZWIwZTM2M2YsIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsCisJMHg5NWJmNGE4MiwgMHhlMmI4N2ExNCwgMHg3YmIxMmJhZSwgMHgwY2I2MWIzOCwKKwkweDkyZDI4ZTliLCAweGU1ZDViZTBkLCAweDdjZGNlZmI3LCAweDBiZGJkZjIxLAorCTB4ODZkM2QyZDQsIDB4ZjFkNGUyNDIsIDB4NjhkZGIzZjgsIDB4MWZkYTgzNmUsCisJMHg4MWJlMTZjZCwgMHhmNmI5MjY1YiwgMHg2ZmIwNzdlMSwgMHgxOGI3NDc3NywKKwkweDg4MDg1YWU2LCAweGZmMGY2YTcwLCAweDY2MDYzYmNhLCAweDExMDEwYjVjLAorCTB4OGY2NTllZmYsIDB4Zjg2MmFlNjksIDB4NjE2YmZmZDMsIDB4MTY2Y2NmNDUsCisJMHhhMDBhZTI3OCwgMHhkNzBkZDJlZSwgMHg0ZTA0ODM1NCwgMHgzOTAzYjNjMiwKKwkweGE3NjcyNjYxLCAweGQwNjAxNmY3LCAweDQ5Njk0NzRkLCAweDNlNmU3N2RiLAorCTB4YWVkMTZhNGEsIDB4ZDlkNjVhZGMsIDB4NDBkZjBiNjYsIDB4MzdkODNiZjAsCisJMHhhOWJjYWU1MywgMHhkZWJiOWVjNSwgMHg0N2IyY2Y3ZiwgMHgzMGI1ZmZlOSwKKwkweGJkYmRmMjFjLCAweGNhYmFjMjhhLCAweDUzYjM5MzMwLCAweDI0YjRhM2E2LAorCTB4YmFkMDM2MDUsIDB4Y2RkNzA2OTMsIDB4NTRkZTU3MjksIDB4MjNkOTY3YmYsCisJMHhiMzY2N2EyZSwgMHhjNDYxNGFiOCwgMHg1ZDY4MWIwMiwgMHgyYTZmMmI5NCwKKwkweGI0MGJiZTM3LCAweGMzMGM4ZWExLCAweDVhMDVkZjFiLCAweDJkMDJlZjhkCit9OworCisvKgorVUNIQVIgICBXRVBLRVlbXSA9IHsKKwkJLy9JVgorCQkweDAwLCAweDExLCAweDIyLAorCQkvL1dFUCBLRVkKKwkJMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwgMHhDQworCX07CisgKi8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUluaXQgV0VQIGZ1bmN0aW9uLgorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBLZXkgICAgICAgIFBvaW50ZXIgdG8gdGhlIFdFUCBLRVkKKwkJS2V5SWQJCSAgIFdFUCBLZXkgSUQKKwkJS2V5TGVuICAgICAgdGhlIGxlbmd0aCBvZiBXRVAgS0VZCisJCXBEZXN0ICAgICAgIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHdoaWNoIEVuY3J5cHRpb24gZGF0YSB3aWxsIHN0b3JlIGluLgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBJbml0V2VwRW5naW5lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBLZXksCisJSU4JVUNIQVIJCQlLZXlJZCwKKwlJTglVQ0hBUgkJCUtleUxlbiwKKwlJTiBPVVQJUFVDSEFSCQlwRGVzdCkKK3sKKwlVSU5UIGk7CisJVUNIQVIgICBXRVBLRVlbXSA9IHsKKwkJLy9JVgorCQkweDAwLCAweDExLCAweDIyLAorCQkvL1dFUCBLRVkKKwkJMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwgMHhDQworCX07CisKKwlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyID0gUFBQSU5JVEZDUzMyOyAgIC8vSW5pdCBjcmMzMi4KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgIGlmIChwQWQtPlN0YUNmZy5iQ2tpcE9uICYmIChwQWQtPlN0YUNmZy5Da2lwRmxhZyAmIDB4MTApICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKyAgICB7CisgICAgICAgIEFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBwS2V5LCBLZXlMZW4pOyAgLy9JTklUIFNCT1gsIEtFWUxFTiszKElWKQorICAgICAgICBOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEtleSwgMyk7ICAvL0FwcGVuZCBJbml0IFZlY3RvcgorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgeworCQlOZGlzTW92ZU1lbW9yeShXRVBLRVkgKyAzLCBwS2V5LCBLZXlMZW4pOworCisgICAgICAgIGZvcihpID0gMDsgaSA8IDM7IGkrKykKKwkJCVdFUEtFWVtpXSA9IFJhbmRvbUJ5dGUocEFkKTsgICAvL0NhbGwgbWxtZSBSYW5kb21CeXRlKCkgZnVuY3Rpb24uCisJCUFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBXRVBLRVksIEtleUxlbiArIDMpOyAgLy9JTklUIFNCT1gsIEtFWUxFTiszKElWKQorCisJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBXRVBLRVksIDMpOyAgLy9BcHBlbmQgSW5pdCBWZWN0b3IKKyAgICB9CisJKihwRGVzdCszKSA9IChLZXlJZCA8PCA2KTsgICAgICAgLy9BcHBlbmQgS0VZSUQKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJRW5jcnlwdCB0cmFuc2ltaXR0ZWQgZGF0YQorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICBwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSB0cmFuc2ltaXR0ZWQgc291cmNlIGRhdGEgdGhhdCB3aWxsIGJlIGVuY3J5cHQKKyAgICAgIHBEZXN0ICAgICAgIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHdoZXJlIGVudHJ5cHRpb24gZGF0YSB3aWxsIGJlIHN0b3JlIGluLgorICAgICAgTGVuCQkJSW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGRhdGEKKworCVJldHVybiBWYWx1ZToKKyAgICAgIE5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEVuY3J5cHREYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBTcmMsCisJSU4JUFVDSEFSCQkJcERlc3QsCisJSU4JVUlOVAkJCUxlbikKK3sKKwlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyID0gUlRNUF9DQUxDX0ZDUzMyKHBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIsIHBTcmMsIExlbik7CisJQVJDRk9VUl9FTkNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIHBEZXN0LCBwU3JjLCBMZW4pOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlEZWNyeXB0IHJlY2VpdmVkIFdFUCBkYXRhCisKKwlBcmd1bWVudHM6CisJCXBBZGFwdGVyCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIGRhdGEKKwkJTGVuICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZGF0YQorCisJUmV0dXJuIFZhbHVlOgorCQlUUlVFICAgICAgICBEZWNyeXB0IFdFUCBkYXRhIHN1Y2Nlc3MKKwkJRkFMU0UgICAgICAgRGVjcnlwdCBXRVAgZGF0YSBmYWlsZWQKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOCVJUTVBTb2Z0RGVjcnlwdFdFUCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gUFVDSEFSCQkJcERhdGEsCisJSU4gVUxPTkcJCQlEYXRhQnl0ZUNudCwKKwlJTiBQQ0lQSEVSX0tFWQkJcEdyb3VwS2V5KQoreworCVVJTlQJdHJhaWxmY3M7CisJVUlOVCAgICBjcmMzMjsKKwlVQ0hBUglLZXlJZHg7CisJVUNIQVIgICBXRVBLRVlbXSA9IHsKKwkJLy9JVgorCQkweDAwLCAweDExLCAweDIyLAorCQkvL1dFUCBLRVkKKwkJMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwgMHhDQworCX07CisJVUNIQVIgCSpwUGF5bG9hZCA9IChVQ0hBUiAqKXBEYXRhICsgTEVOR1RIXzgwMl8xMTsKKwlVTE9ORwlwYXlsb2FkX2xlbiA9IERhdGFCeXRlQ250IC0gTEVOR1RIXzgwMl8xMTsKKworCU5kaXNNb3ZlTWVtb3J5KFdFUEtFWSwgcFBheWxvYWQsIDMpOyAgICAvL0dldCBXRVAgSVYKKworCUtleUlkeCA9ICgqKHBQYXlsb2FkICsgMykgJiAweGMwKSA+PiA2OworCWlmIChwR3JvdXBLZXlbS2V5SWR4XS5LZXlMZW4gPT0gMCkKKwkJcmV0dXJuIChGQUxTRSk7CisKKwlOZGlzTW92ZU1lbW9yeShXRVBLRVkgKyAzLCBwR3JvdXBLZXlbS2V5SWR4XS5LZXksIHBHcm91cEtleVtLZXlJZHhdLktleUxlbik7CisJQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIFdFUEtFWSwgcEdyb3VwS2V5W0tleUlkeF0uS2V5TGVuICsgMyk7CisJQVJDRk9VUl9ERUNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIHBQYXlsb2FkLCBwUGF5bG9hZCArIDQsIHBheWxvYWRfbGVuIC0gNCk7CisJTmRpc01vdmVNZW1vcnkoJnRyYWlsZmNzLCBwUGF5bG9hZCArIHBheWxvYWRfbGVuIC0gOCwgNCk7CisJY3JjMzIgPSBSVE1QX0NBTENfRkNTMzIoUFBQSU5JVEZDUzMyLCBwUGF5bG9hZCwgcGF5bG9hZF9sZW4gLSA4KTsgIC8vU2tpcCBsYXN0IDQgYnl0ZXMoRkNTKS4KKwljcmMzMiBePSAweGZmZmZmZmZmOyAgICAgICAgICAgICAvKiBjb21wbGVtZW50ICovCisKKyAgICBpZihjcmMzMiAhPSBjcHUybGUzMih0cmFpbGZjcykpCisgICAgeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhIFdFUCBEYXRhIENSQyBFcnJvciAhXG4iKSk7CSAvL0NSQyBlcnJvci4KKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCXJldHVybiAoVFJVRSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlUaGUgU3RyZWFtIENpcGhlciBFbmNyeXB0aW9uIEFsZ29yaXRobSAiQVJDRk9VUiIgaW5pdGlhbGl6ZQorCisJQXJndW1lbnRzOgorCSAgIEN0eCAgICAgICAgIFBvaW50ZXIgdG8gQVJDRk9VUiBDT05URVhUIChTQk9YKQorCQlwS2V5ICAgICAgICBQb2ludGVyIHRvIHRoZSBXRVAgS0VZCisJCUtleUxlbiAgICAgIEluZGljYXRlIHRoZSBsZW5ndGggZm8gdGhlIFdFUCBLRVkKKworCVJldHVybiBWYWx1ZToKKwkgICBOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFSQ0ZPVVJfSU5JVCgKKwlJTglQQVJDRk9VUkNPTlRFWFQJQ3R4LAorCUlOCVBVQ0hBUgkJCXBLZXksCisJSU4JVUlOVAkJCUtleUxlbikKK3sKKwlVQ0hBUgl0LCB1OworCVVJTlQJa2V5aW5kZXg7CisJVUlOVAlzdGF0ZWluZGV4OworCVBVQ0hBUglzdGF0ZTsKKwlVSU5UCWNvdW50ZXI7CisKKwlzdGF0ZSA9IEN0eC0+U1RBVEU7CisJQ3R4LT5YID0gMDsKKwlDdHgtPlkgPSAwOworCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCAyNTY7IGNvdW50ZXIrKykKKwkJc3RhdGVbY291bnRlcl0gPSAoVUNIQVIpY291bnRlcjsKKwlrZXlpbmRleCA9IDA7CisJc3RhdGVpbmRleCA9IDA7CisJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IDI1NjsgY291bnRlcisrKQorCXsKKwkJdCA9IHN0YXRlW2NvdW50ZXJdOworCQlzdGF0ZWluZGV4ID0gKHN0YXRlaW5kZXggKyBwS2V5W2tleWluZGV4XSArIHQpICYgMHhmZjsKKwkJdSA9IHN0YXRlW3N0YXRlaW5kZXhdOworCQlzdGF0ZVtzdGF0ZWluZGV4XSA9IHQ7CisJCXN0YXRlW2NvdW50ZXJdID0gdTsKKwkJaWYgKCsra2V5aW5kZXggPj0gS2V5TGVuKQorCQkJa2V5aW5kZXggPSAwOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUdldCBieXRlcyBmcm9tIEFSQ0ZPVVIgQ09OVEVYVCAoUy1CT1gpCisKKwlBcmd1bWVudHM6CisJICAgQ3R4ICAgICAgICAgUG9pbnRlciB0byBBUkNGT1VSIENPTlRFWFQgKFNCT1gpCisKKwlSZXR1cm4gVmFsdWU6CisJICAgVUNIQVIgIC0gdGhlIHZhbHVlIG9mIHRoZSBBUkNGT1VSIENPTlRFWFQgKFMtQk9YKQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VDSEFSCUFSQ0ZPVVJfQllURSgKKwlJTglQQVJDRk9VUkNPTlRFWFQJCUN0eCkKK3sKKyAgVUlOVCB4OworICBVSU5UIHk7CisgIFVDSEFSIHN4LCBzeTsKKyAgUFVDSEFSIHN0YXRlOworCisgIHN0YXRlID0gQ3R4LT5TVEFURTsKKyAgeCA9IChDdHgtPlggKyAxKSAmIDB4ZmY7CisgIHN4ID0gc3RhdGVbeF07CisgIHkgPSAoc3ggKyBDdHgtPlkpICYgMHhmZjsKKyAgc3kgPSBzdGF0ZVt5XTsKKyAgQ3R4LT5YID0geDsKKyAgQ3R4LT5ZID0geTsKKyAgc3RhdGVbeV0gPSBzeDsKKyAgc3RhdGVbeF0gPSBzeTsKKworICByZXR1cm4oc3RhdGVbKHN4ICsgc3kpICYgMHhmZl0pOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlUaGUgU3RyZWFtIENpcGhlciBEZWNyeXB0aW9uIEFsZ29yaXRobQorCisJQXJndW1lbnRzOgorCQlDdHggICAgICAgICBQb2ludGVyIHRvIEFSQ0ZPVVIgQ09OVEVYVCAoU0JPWCkKKwkJcERlc3QJCQlQb2ludGVyIHRvIHRoZSBEZXN0aW5hdGlvbgorCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSBTb3VyY2UgZGF0YQorCQlMZW4gICAgICAgICBJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBTb3VyY2UgZGF0YQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBUkNGT1VSX0RFQ1JZUFQoCisJSU4JUEFSQ0ZPVVJDT05URVhUCUN0eCwKKwlJTglQVUNIQVIJCQlwRGVzdCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQlMZW4pCit7CisJVUlOVCBpOworCisJZm9yIChpID0gMDsgaSA8IExlbjsgaSsrKQorCQlwRGVzdFtpXSA9IHBTcmNbaV0gXiBBUkNGT1VSX0JZVEUoQ3R4KTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCVRoZSBTdHJlYW0gQ2lwaGVyIEVuY3J5cHRpb24gQWxnb3JpdGhtCisKKwlBcmd1bWVudHM6CisJCUN0eCAgICAgICAgIFBvaW50ZXIgdG8gQVJDRk9VUiBDT05URVhUIChTQk9YKQorCQlwRGVzdAkJCVBvaW50ZXIgdG8gdGhlIERlc3RpbmF0aW9uCisJCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIFNvdXJjZSBkYXRhCisJCUxlbiAgICAgICAgIEluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIFNvdXJjZSBkdGEKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBUkNGT1VSX0VOQ1JZUFQoCisJSU4JUEFSQ0ZPVVJDT05URVhUCUN0eCwKKwlJTglQVUNIQVIJCQlwRGVzdCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQlMZW4pCit7CisJVUlOVCBpOworCisJZm9yIChpID0gMDsgaSA8IExlbjsgaSsrKQorCQlwRGVzdFtpXSA9IHBTcmNbaV0gXiBBUkNGT1VSX0JZVEUoQ3R4KTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCVRoZSBTdHJlYW0gQ2lwaGVyIEVuY3J5cHRpb24gQWxnb3JpdGhtIHdoaWNoIGNvbmZvcm0gdG8gdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnQgdG8gZW5jcnlwdCAgR1RLLgorCisJQXJndW1lbnRzOgorCQlDdHggICAgICAgICBQb2ludGVyIHRvIEFSQ0ZPVVIgQ09OVEVYVCAoU0JPWCkKKwkJcERlc3QJCQlQb2ludGVyIHRvIHRoZSBEZXN0aW5hdGlvbgorCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSBTb3VyY2UgZGF0YQorCQlMZW4gICAgICAgICBJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBTb3VyY2UgZHRhCisKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworVk9JRAlXUEFBUkNGT1VSX0VOQ1JZUFQoCisJSU4JUEFSQ0ZPVVJDT05URVhUCUN0eCwKKwlJTglQVUNIQVIJCQlwRGVzdCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQlMZW4pCit7CisJVUlOVCBpOworICAgICAgICAvL2Rpc2NhcmQgZmlyc3QgMjU2IGJ5dGVzCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAgICAgICAgQVJDRk9VUl9CWVRFKEN0eCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTGVuOyBpKyspCisJCXBEZXN0W2ldID0gcFNyY1tpXSBeIEFSQ0ZPVVJfQllURShDdHgpOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDYWxjdWxhdGUgYSBuZXcgRkNTIGdpdmVuIHRoZSBjdXJyZW50IEZDUyBhbmQgdGhlIG5ldyBkYXRhLgorCisJQXJndW1lbnRzOgorCQlGY3MJICAgICAgdGhlIG9yaWdpbmFsIEZDUyB2YWx1ZQorCQlDcCAgICAgICAgICBwb2ludGVyIHRvIHRoZSBkYXRhIHdoaWNoIHdpbGwgYmUgY2FsY3VsYXRlIHRoZSBGQ1MKKwkJTGVuICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YQorCisJUmV0dXJuIFZhbHVlOgorCQlVSU5UIC0gRkNTIDMyIGJpdHMKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VJTlQJUlRNUF9DQUxDX0ZDUzMyKAorCUlOCVVJTlQJRmNzLAorCUlOCVBVQ0hBUglDcCwKKwlJTglJTlQJCUxlbikKK3sKKwl3aGlsZSAoTGVuLS0pCisJICAgRmNzID0gKCgoRmNzKSA+PiA4KSBeIEZDU1RBQl8zMlsoKEZjcykgXiAoKkNwKyspKSAmIDB4ZmZdKTsKKworCXJldHVybiAoRmNzKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJR2V0IGxhc3QgRkNTIGFuZCBlbmNyeXB0IGl0IHRvIHRoZSBkZXN0aW5hdGlvbgorCisJQXJndW1lbnRzOgorCQlwRGVzdAkJCVBvaW50ZXIgdG8gdGhlIERlc3RpbmF0aW9uCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTZXRJQ1YoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCXBEZXN0KQoreworCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgXj0gMHhmZmZmZmZmZjsgICAgICAgICAgICAgLyogY29tcGxlbWVudCAqLworCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPSBjcHUybGUzMihwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyKTsKKworCUFSQ0ZPVVJfRU5DUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBwRGVzdCwgKFBVQ0hBUikgJnBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIsIDQpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9idWxrLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9idWxrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwNTcwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2J1bGsuYwpAQCAtMCwwICsxLDEzODIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJcnR1c2JfYnVsay5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCU1vZGlmaWNhdGlvbiBsb2dzCisJUGF1bCBMaW4JMDYtMjUtMjAwNAljcmVhdGVkCisKKyovCisKKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKy8vIE1hdGNoIHRvdGFsIDYgYnVsa291dCBlbmRwb2ludCB0byBjb3JyZXNwb25kaW5nIHF1ZXVlLgorVUNIQVIJRXBUb1F1ZXVlWzZdPXtGSUZPX0VEQ0EsIEZJRk9fRURDQSwgRklGT19FRENBLCBGSUZPX0VEQ0EsIEZJRk9fRURDQSwgRklGT19NR01UfTsKKworLy9zdGF0aWMgQk9PTEVBTiBTaW5nbGVCdWxrT3V0ID0gRkFMU0U7CisKK3ZvaWQgUlRVU0JfRklMTF9CVUxLX1VSQiAoc3RydWN0IHVyYiAqcFVyYiwKKwlzdHJ1Y3QgdXNiX2RldmljZSAqcFVzYl9EZXYsCisJdW5zaWduZWQgaW50IGJ1bGtwaXBlLAorCXZvaWQgKnBUcmFuc2ZlckJ1ZiwKKwlpbnQgQnVmU2l6ZSwKKwl1c2JfY29tcGxldGVfdCBDb21wbGV0ZSwKKwl2b2lkICpwQ29udGV4dCkKK3sKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwl1c2JfZmlsbF9idWxrX3VyYihwVXJiLCBwVXNiX0RldiwgYnVsa3BpcGUsIHBUcmFuc2ZlckJ1ZiwgQnVmU2l6ZSwgKHVzYl9jb21wbGV0ZV90KUNvbXBsZXRlLCBwQ29udGV4dCk7CisjZWxzZQorCUZJTExfQlVMS19VUkIocFVyYiwgcFVzYl9EZXYsIGJ1bGtwaXBlLCBwVHJhbnNmZXJCdWYsIEJ1ZlNpemUsIENvbXBsZXRlLCBwQ29udGV4dCk7CisjZW5kaWYKKworfQorCitWT0lECVJUVVNCSW5pdFR4RGVzYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhfQ09OVEVYVAkJcFR4Q29udGV4dCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQsCisJSU4JdXNiX2NvbXBsZXRlX3QJRnVuYykKK3sKKwlQVVJCCQkJCXBVcmI7CisJUFVDSEFSCQkJCXBTcmMgPSBOVUxMOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJcFVyYiA9IHBUeENvbnRleHQtPnBVcmI7CisJQVNTRVJUKHBVcmIpOworCisJLy8gU3RvcmUgQnVsa091dCBQaXBlSWQKKwlwVHhDb250ZXh0LT5CdWxrT3V0UGlwZUlkID0gQnVsa091dFBpcGVJZDsKKworCWlmIChwVHhDb250ZXh0LT5iQWdncmVnYXRpYmxlKQorCXsKKwkJcFNyYyA9ICZwVHhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+QWdncmVnYXRpb25bMl07CisJfQorCWVsc2UKKwl7CisJCXBTcmMgPSAoUFVDSEFSKSBwVHhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXQ7CisJfQorCisKKwkvL0luaXRpYWxpemUgYSB0eCBidWxrIHVyYgorCVJUVVNCX0ZJTExfQlVMS19VUkIocFVyYiwKKwkJCQkJCXBPYmotPnBVc2JfRGV2LAorCQkJCQkJdXNiX3NuZGJ1bGtwaXBlKHBPYmotPnBVc2JfRGV2LCBwQWQtPkJ1bGtPdXRFcEFkZHJbQnVsa091dFBpcGVJZF0pLAorCQkJCQkJcFNyYywKKwkJCQkJCXBUeENvbnRleHQtPkJ1bGtPdXRTaXplLAorCQkJCQkJRnVuYywKKwkJCQkJCXBUeENvbnRleHQpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCWlmIChwVHhDb250ZXh0LT5iQWdncmVnYXRpYmxlKQorCQlwVXJiLT50cmFuc2Zlcl9kbWEJPSAocFR4Q29udGV4dC0+ZGF0YV9kbWEgKyBUWF9CVUZGRVJfTk9STVNJWkUgKyAyKTsKKwllbHNlCisJCXBVcmItPnRyYW5zZmVyX2RtYQk9IHBUeENvbnRleHQtPmRhdGFfZG1hOworCisJcFVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisjZW5kaWYKKworfQorCitWT0lECVJUVVNCSW5pdEhUVHhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBIVF9UWF9DT05URVhUCXBUeENvbnRleHQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCVVMT05HCQkJQnVsa091dFNpemUsCisJSU4JdXNiX2NvbXBsZXRlX3QJRnVuYykKK3sKKwlQVVJCCQkJCXBVcmI7CisJUFVDSEFSCQkJCXBTcmMgPSBOVUxMOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJcFVyYiA9IHBUeENvbnRleHQtPnBVcmI7CisJQVNTRVJUKHBVcmIpOworCisJLy8gU3RvcmUgQnVsa091dCBQaXBlSWQKKwlwVHhDb250ZXh0LT5CdWxrT3V0UGlwZUlkID0gQnVsa091dFBpcGVJZDsKKworCXBTcmMgPSAmcFR4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W3BUeENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb25dOworCisKKwkvL0luaXRpYWxpemUgYSB0eCBidWxrIHVyYgorCVJUVVNCX0ZJTExfQlVMS19VUkIocFVyYiwKKwkJCQkJCXBPYmotPnBVc2JfRGV2LAorCQkJCQkJdXNiX3NuZGJ1bGtwaXBlKHBPYmotPnBVc2JfRGV2LCBwQWQtPkJ1bGtPdXRFcEFkZHJbQnVsa091dFBpcGVJZF0pLAorCQkJCQkJcFNyYywKKwkJCQkJCUJ1bGtPdXRTaXplLAorCQkJCQkJRnVuYywKKwkJCQkJCXBUeENvbnRleHQpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCXBVcmItPnRyYW5zZmVyX2RtYQk9IChwVHhDb250ZXh0LT5kYXRhX2RtYSArIHBUeENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pOworCXBVcmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworI2VuZGlmCisKK30KKworVk9JRAlSVFVTQkluaXRSeERlc2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFJYX0NPTlRFWFQJCXBSeENvbnRleHQpCit7CisJUFVSQgkJCQlwVXJiOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCVVMT05HCQkJCVJYX2J1bGtfc2l6ZTsKKworCisJcFVyYiA9IHBSeENvbnRleHQtPnBVcmI7CisJQVNTRVJUKHBVcmIpOworCisJaWYgKCBwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUgPT0gNjQpCisJCVJYX2J1bGtfc2l6ZSA9IDQwOTY7CisJZWxzZQorCQlSWF9idWxrX3NpemUgPSBNQVhfUlhCVUxLX1NJWkU7CisKKwkvL0luaXRpYWxpemUgYSByeCBidWxrIHVyYgorCVJUVVNCX0ZJTExfQlVMS19VUkIocFVyYiwKKwkJCQkJCXBPYmotPnBVc2JfRGV2LAorCQkJCQkJdXNiX3JjdmJ1bGtwaXBlKHBPYmotPnBVc2JfRGV2LCBwQWQtPkJ1bGtJbkVwQWRkciksCisJCQkJCQkmKHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyW3BBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb25dKSwKKwkJCQkJCVJYX2J1bGtfc2l6ZSAtIChwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uKSwKKwkJCQkJCSh1c2JfY29tcGxldGVfdClSVFVTQkJ1bGtSeENvbXBsZXRlLAorCQkJCQkJKHZvaWQgKilwUnhDb250ZXh0KTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwlwVXJiLT50cmFuc2Zlcl9kbWEJPSBwUnhDb250ZXh0LT5kYXRhX2RtYSArIHBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb247CisJcFVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisjZW5kaWYKKworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworI2RlZmluZSBCVUxLX09VVF9MT0NLKHBMb2NrLCBJcnFGbGFncykJXAorCQlpZigxIC8qIShpbl9pbnRlcnJ1cHQoKSAmIDB4ZmZmZjAwMDApKi8pCVwKKwkJCVJUTVBfSVJRX0xPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOworCisjZGVmaW5lIEJVTEtfT1VUX1VOTE9DSyhwTG9jaywgSXJxRmxhZ3MpCVwKKwkJaWYoMSAvKiEoaW5faW50ZXJydXB0KCkgJiAweGZmZmYwMDAwKSovKQlcCisJCQlSVE1QX0lSUV9VTkxPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOworCisKK1ZPSUQJUlRVU0JCdWxrT3V0RGF0YVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKworCVBIVF9UWF9DT05URVhUCXBIVFRYQ29udGV4dDsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwlQVFhJTkZPX1NUUlVDCXBUeEluZm8sIHBMYXN0VHhJbmZvID0gTlVMTDsKKwlQVFhXSV9TVFJVQyAgICAgICAgICAgICBwVHhXSTsKKwlVTE9ORwkJCVRtcEJ1bGtFbmRQb3MsIFRoaXNCdWxrU2l6ZTsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzID0gMCwgSXJxRmxhZ3MyID0gMDsKKwlQVUNIQVIJCQlwV2lyZWxlc3NQa3QsIHBBcHBlbmRhbnQ7CisJQk9PTEVBTgkJCWJUeFFMYXN0Um91bmQgPSBGQUxTRTsKKwlVQ0hBUgkJCWFsbHplcm9bNF09IHsweDAsMHgwLDB4MCwweDB9OworCisJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9PSBUUlVFKSB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkKKwl7CisJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQlyZXR1cm47CisJfQorCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBUUlVFOworCisJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKKwkJKQorCXsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9IEZBTFNFOworCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCisJcEhUVFhDb250ZXh0ID0gJihwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXSk7CisKKwlCVUxLX09VVF9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MyKTsKKwlpZiAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKQorCQl8fCAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24tOCkgPT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkKKwl7CisJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzMik7CisKKwkJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gRkFMU0U7CisKKwkJLy8gQ2xlYXIgRGF0YSBmbGFnCisJCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHIDw8IEJ1bGtPdXRQaXBlSWQpKTsKKwkJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBCdWxrT3V0UGlwZUlkKSk7CisKKwkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvLyBDbGVhciBEYXRhIGZsYWcKKwlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBRyA8PCBCdWxrT3V0UGlwZUlkKSk7CisJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBCdWxrT3V0UGlwZUlkKSk7CisKKwkvL0RCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQnVsa091dC1COkk9MHglbHgsIENXUG9zPSVsZCwgQ1dSUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCFcbiIsIGluX2ludGVycnVwdCgpLAorCS8vCQkJCQkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MsIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwKKwkvLwkJCQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCkpOworCXBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA9IHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb247CisJVGhpc0J1bGtTaXplID0gMDsKKwlUbXBCdWxrRW5kUG9zID0gcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uOworCXBXaXJlbGVzc1BrdCA9ICZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXTsKKworCWlmICgocEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQgPT0gVFJVRSkpCisJeworCQlpZiAoUlRNUEVxdWFsTWVtb3J5KHBIVFRYQ29udGV4dC0+U2F2ZWRQYWQsIGFsbHplcm8sNCkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoImUxLCBhbGx6ZXJvIDogJXggICV4ICAleCAgJXggICV4ICAleCAgJXggICV4IFxuIiwKKwkJCQlwSFRUWENvbnRleHQtPlNhdmVkUGFkWzBdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzFdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzJdLHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbM10KKwkJCQkscEhUVFhDb250ZXh0LT5TYXZlZFBhZFs0XSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs1XSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs2XSxwSFRUWENvbnRleHQtPlNhdmVkUGFkWzddKSk7CisJCX0KKwkJTmRpc01vdmVNZW1vcnkoJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zXSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZCwgOCk7CisJCXBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkID0gRkFMU0U7CisJCWlmIChwQWQtPmJGb3JjZVByaW50VFggPT0gVFJVRSkKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRVU0JCdWxrT3V0RGF0YVBhY2tldCAtLT4gQ09QWSBQQUQuIEN1cldyaXRlID0gJWxkLCBOZXh0QnVsayA9ICVsZC4gICBFTmV4dEJ1bGsgPSAlbGQuXG4iLCAgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uKSk7CisJfQorCisJZG8KKwl7CisJCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykmcFdpcmVsZXNzUGt0W1RtcEJ1bGtFbmRQb3NdOworCQlwVHhXSSA9IChQVFhXSV9TVFJVQykmcFdpcmVsZXNzUGt0W1RtcEJ1bGtFbmRQb3MgKyBUWElORk9fU0laRV07CisKKwkJaWYgKHBBZC0+YkZvcmNlUHJpbnRUWCA9PSBUUlVFKQorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRVU0JCdWxrT3V0RGF0YVBhY2tldCBBTVBEVSA9ICVkLlxuIiwgICBwVHhXSS0+QU1QRFUpKTsKKworCQkvLyBhZGQgYnkgSXZlcnNvbiwgbGltaXQgQnVsa091dCBzaXplIHRvIDRrIHRvIHBhc3MgV01NIGIgbW9kZSAyVDFSIHRlc3QgaXRlbXMKKwkJLy9pZiAoKFRoaXNCdWxrU2l6ZSAhPSAwKSAgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkKKwkJaWYgKChUaGlzQnVsa1NpemUgIT0gMCkgJiYgKHBUeFdJLT5QSFlNT0RFID09IE1PREVfQ0NLKSkKKwkJeworI2lmZGVmIElORl9BTUFaT05fU0UKKwkJCS8qSXZlcnNvbiBBZGQgZm9yIEFNQVpPTiBVU0IgKFJUMjA3MCAmJiAgUlQzMDcwKSB0byBwYXNzIFdNTSBBMi1UNCB+IEEyLVQxMCovCisJCQlpZihPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpKQorCQkJeworCQkJCS8qSXZlcnNvbiBwYXRjaCBmb3IgV01NIEE1LVQwNyAsV2lyZWxlc3NTdGFUb1dpcmVsZXNzU3RhIGRvIG5vdCBidWxrIG91dCBhZ2dyZWdhdGUqLworCQkJCWlmKHBUeFdJLT5QYWNrZXRJZCA9PSA2KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisgICAgICAgICAgICAgICAgCWJyZWFrOworICAgICAgICAgICAgICAgIH0KKwkJCQllbHNlIGlmIChCdWxrT3V0UGlwZUlkID09IDEpCisJCQkJeworCQkJCQkvKkJLICBObyBMaW1pdCBCdWxrT3V0IHNpemUgLiovCisJCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKCgoVGhpc0J1bGtTaXplJjB4MTAwMCkgPT0gMHgxMDAwKSAmJiAgKEJ1bGtPdXRQaXBlSWQgPT0gMCkgICkpCisJCQkJeworCQkJCQkvKkJFICBMaW1pdCBCdWxrT3V0IHNpemUgdG8gYWJvdXQgNGsgYnl0ZXMuKi8KKwkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmICgoKFRoaXNCdWxrU2l6ZSYweGZmZmY4MDAwKSAhPSAwKSB8fCAoKChUaGlzQnVsa1NpemUmMHgxYzAwKSA9PSAweDFjMDApICYmICAoQnVsa091dFBpcGVJZCA9PSAyKSAgKSkKKwkJCQl7CisJCQkJCS8qVkkgTGltaXQgQnVsa091dCBzaXplIHRvIGFib3V0IDdrIGJ5dGVzLiovCisJCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKCgoVGhpc0J1bGtTaXplJjB4MjUwMCkgPT0gMHgyNTAwKSAmJiAgKEJ1bGtPdXRQaXBlSWQgPT0gMykgICkpCisJCQkJeworCQkJCQkvKlZPIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCA5ayBieXRlcy4qLworCQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHgxMDAwKSA9PSAweDEwMDApKQorCQkJeworCQkJCS8qIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCA0ayBieXRlcy4qLworCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCWJyZWFrOworCQkJfQorI2Vsc2UKKwkJCWlmICgoKFRoaXNCdWxrU2l6ZSYweGZmZmY4MDAwKSAhPSAwKSB8fCAoKFRoaXNCdWxrU2l6ZSYweDEwMDApID09IDB4MTAwMCkpCisJCQl7CisJCQkJLy8gTGltaXQgQnVsa091dCBzaXplIHRvIGFib3V0IDRrIGJ5dGVzLgorCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKworCQkJZWxzZSBpZiAoKChwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplIDwgNTEyKSAmJiAoKFRoaXNCdWxrU2l6ZSYweGZmZmZmODAwKSAhPSAwKSApIC8qfHwgKCAoVGhpc0J1bGtTaXplICE9IDApICAmJiAocFR4V0ktPkFNUERVID09IDApKSovKQorCQkJeworCQkJCS8vIEZvciBVU0IgMS4xIG9yIHBlZXIgd2hpY2ggZGlkbid0IHN1cHBvcnQgQU1QRFUsIGxpbWl0IHRoZSBCdWxrT3V0IHNpemUuCisJCQkJLy8gRm9yIHBlcmZvcm1lbmNlIGluIGIvZyBtb2RlLCBub3cganVzdCBjaGVjayBmb3IgVVNCIDEuMSBhbmQgZGlkbid0IGNhcmUgYWJvdXQgdGhlIEFQTURVIG9yIG5vdCEgMjAwOC8wNi8wNC4KKwkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvLyBlbmQgSXZlcnNvbgorCQllbHNlCisJCXsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisvLyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vCQkJaWYoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHg2MDAwKSA9PSAweDYwMDApIHx8ICggKFRoaXNCdWxrU2l6ZSAhPSAwKSAgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkpCisvLwkJCXsKKy8vCQkJCS8qIEFNQVpPTl9TRTogQkcgbW9kZSBEaXNhYmxlIEJ1bGtPdXQgQWdncmVnYXRlLCBOIG1vZGUgQnVsa091dCBBZ2dyZWdhZXQgc2l6ZSAyNEsgKi8KKy8vCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworLy8gICAgICAgICAgICAgICBicmVhazsKKy8vCQkJfQorLy8JCQllbHNlCisvLyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKy8vCQkJeworCQkJCWlmKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCkgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkKKwkJCQl7CisJCQkJCWlmICgoKHBBZC0+QnVsa091dE1heFBhY2tldFNpemUgPCA1MTIpICYmICgoVGhpc0J1bGtTaXplJjB4ZmZmZmY4MDApICE9IDApKSB8fAorCQkJCQkJKFRoaXNCdWxrU2l6ZSAhPSAwKSkKKwkJCQkJeworCQkJCQkJLyogQU1BWk9OX1NFOiBSVDIwNzAgIERpc2FibGUgQnVsa091dCBBZ2dyZWdhdGUgd2hlbiBXTU0gZm9yIFVTQiBpc3N1ZSAqLworCQkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKy8qCisJCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHg2MDAwKSA9PSAweDYwMDApKQorCQkJCXsKKwkJCQkJLy8gTGltaXQgQnVsa091dCBzaXplIHRvIGFib3V0IDI0ayBieXRlcy4KKwkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKyovCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisJCQlpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHg2MDAwKSA9PSAweDYwMDApKQorCQkJewkvLyBMaW1pdCBCdWxrT3V0IHNpemUgdG8gYWJvdXQgMjRrIGJ5dGVzLgorCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCWJyZWFrOworCQkJfQorCisJCQllbHNlIGlmICgoKHBBZC0+QnVsa091dE1heFBhY2tldFNpemUgPCA1MTIpICYmICgoVGhpc0J1bGtTaXplJjB4ZmZmZmY4MDApICE9IDApICkgLyp8fCAoIChUaGlzQnVsa1NpemUgIT0gMCkgICYmIChwVHhXSS0+QU1QRFUgPT0gMCkpKi8pCisJCQl7CS8vIEZvciBVU0IgMS4xIG9yIHBlZXIgd2hpY2ggZGlkbid0IHN1cHBvcnQgQU1QRFUsIGxpbWl0IHRoZSBCdWxrT3V0IHNpemUuCisJCQkJLy8gRm9yIHBlcmZvcm1lbmNlIGluIGIvZyBtb2RlLCBub3cganVzdCBjaGVjayBmb3IgVVNCIDEuMSBhbmQgZGlkbid0IGNhcmUgYWJvdXQgdGhlIEFQTURVIG9yIG5vdCEgMjAwOC8wNi8wNC4KKwkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChUbXBCdWxrRW5kUG9zID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikKKwkJeworCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQlicmVhazsKKwkJfQorCQkvL1BTIHBhY2tldHMgdXNlIEhDQ0EgcXVldWUgd2hlbiBkZXF1ZXVlIGZyb20gUFMgdW5pY2FzdCBxdWV1ZSAoV2lGaSBXUEEyIE1BOV9EVDEgZm9yIE1hcnZlbGwgQiBTVEEpCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJaWYgKHBUeEluZm8tPlFTRUwgIT0gRklGT19FRENBKQorCQl7CisJCQlwcmludGsoIiVzKCk6ID09PT0+IHBUeEluZm8tPlF1ZXVlU2VsKCVkKSE9IEZJRk9fRURDQSEhISFcbiIsIF9fRlVOQ1RJT05fXywgcFR4SW5mby0+UVNFTCk7CisJCQlwcmludGsoIlx0Q1dQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkIVxuIiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkKTsKKwkJCWhleF9kdW1wKCJXcm9uZyBRU2VsIFBrdDoiLCAoUFVDSEFSKSZwV2lyZWxlc3NQa3RbVG1wQnVsa0VuZFBvc10sIChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gLSBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pKTsKKwkJfQorCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJaWYgKHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuIDw9IDgpCisJCXsKKwkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzMik7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiAvKlJUX0RFQlVHX1RSQUNFKi8sKCJlMiwgVVNCRE1BVHhQa3RMZW49PTAsIFNpemU9JWxkLCBiQ1NQYWQ9JWQsIENXUG9zPSVsZCwgTkJQb3M9JWxkLCBDV1JQb3M9JWxkIVxuIiwKKwkJCQkJcEhUVFhDb250ZXh0LT5CdWxrT3V0U2l6ZSwgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcykpOworCQkJeworCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiAvKlJUX0RFQlVHX1RSQUNFKi8sKCIleCAgJXggICV4ICAleCAgJXggICV4ICAleCAgJXggXG4iLAorCQkJCQlwSFRUWENvbnRleHQtPlNhdmVkUGFkWzBdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzFdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzJdLHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbM10KKwkJCQkJLHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNF0sIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNV0sIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNl0scEhUVFhDb250ZXh0LT5TYXZlZFBhZFs3XSkpOworCQkJfQorCQkJcEFkLT5iRm9yY2VQcmludFRYID0gVFJVRTsKKwkJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQkJLy9EQkdQUklOVChSVF9ERUJVR19MT1VELCgiT3V0OnBUeEluZm8tPlVTQkRNQVR4UGt0TGVuPSVkIVxuIiwgcFR4SW5mby0+VVNCRE1BVHhQa3RMZW4pKTsKKwkJCXJldHVybjsKKwkJfQorCisJCQkvLyBJbmNyZWFzZSBUb3RhbCB0cmFuc21pdCBieXRlIGNvdW50ZXIKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUcmFuc21pdHRlZEJ5dGVDb3VudCArPSAgcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEJ5dGVDb3VudCArPSAgcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudDsKKworCQlwTGFzdFR4SW5mbyA9IHBUeEluZm87CisKKwkJLy8gTWFrZSBzdXJlIHdlIHVzZSBFRENBIFFVRVVFLgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlwVHhJbmZvLT5RU0VMID0gRklGT19FRENBOyAvL1BTIHBhY2tldHMgdXNlIEhDQ0EgcXVldWUgd2hlbiBkZXF1ZXVlIGZyb20gUFMgdW5pY2FzdCBxdWV1ZSAoV2lGaSBXUEEyIE1BOV9EVDEgZm9yIE1hcnZlbGwgQiBTVEEpCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCVRoaXNCdWxrU2l6ZSArPSAocFR4SW5mby0+VVNCRE1BVHhQa3RMZW4rNCk7CisJCVRtcEJ1bGtFbmRQb3MgKz0gKHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuKzQpOworCisJCWlmIChUbXBCdWxrRW5kUG9zICE9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikKKwkJCXBUeEluZm8tPlVTQkRNQU5leHRWTEQgPSAxOworCisJCWlmIChwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9PSAxKQorCQl7CisJCQlpZiAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID09IDgpCisJCQkJcFR4SW5mby0+VVNCRE1BTmV4dFZMRCA9IDA7CisJCQlwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9IDA7CisKKwkJCWJUeFFMYXN0Um91bmQgPSBUUlVFOworCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IDg7CisKKwkjaWZkZWYgUlRfQklHX0VORElBTgorCQkJUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwVHhJbmZvLCBUWVBFX1RYSU5GTyk7CisJCQlSVE1QV0lFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwVHhXSSwgVFlQRV9UWFdJKTsKKwkjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJCQlicmVhazsKKwkJfQorCisjaWZkZWYgUlRfQklHX0VORElBTgorCQlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBUeEluZm8sIFRZUEVfVFhJTkZPKTsKKwkJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4V0ksIFRZUEVfVFhXSSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJfXdoaWxlIChUUlVFKTsKKworCS8vIGFkanVzdCB0aGUgcFR4SW5mby0+VVNCRE1BTmV4dFZMRCB2YWx1ZSBvZiBsYXN0IHBUeEluZm8uCisJaWYgKHBMYXN0VHhJbmZvKQorCXsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcExhc3RUeEluZm8sIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJCXBMYXN0VHhJbmZvLT5VU0JETUFOZXh0VkxEID0gMDsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcExhc3RUeEluZm8sIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJfQorCisJLyoKKwkJV2UgbmVlZCB0byBjb3B5IFNhdmVkUGFkIHdoZW4gZm9sbG93aW5nIGNvbmRpdGlvbiBtYXRjaGVkIQorCQkJMS4gTm90IHRoZSBsYXN0IHJvdW5kIG9mIHRoZSBUeFF1ZXVlIGFuZAorCQkJMi4gYW55IG1hdGNoIG9mIGZvbGxvd2luZyBjYXNlczoKKwkJCQkoMSkuIFRoZSBFbmQgUG9zaXRpb24gb2YgdGhpcyBidWxrIG91dCBpcyByZWFjaCB0byB0aGUgQ3VycmVuY3QgV3JpdGUgcG9zaXRpb24gYW5kCisJCQkJCQl0aGUgVHhJbmZvIGFuZCByZWxhdGVkIGhlYWRlciBhbHJlYWR5IHdyaXRlIHRvIHRoZSBDdXJXcml0ZVBvc2l0aW9uLgorCQkJICAgCQk9PihFTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBDdXJXcml0ZVBvc2l0aW9uKSAmJiAoQ3VyV3JpdGVSZWFsUG9zID4gQ3VyV3JpdGVQb3NpdGlvbikKKworCQkJCSgyKS4gVGhlIEVuZFBvc2l0aW9uIG9mIHRoZSBidWxrIG91dCBpcyBub3QgcmVhY2ggdG8gdGhlIEN1cnJlbnQgV3JpdGUgUG9zaXRpb24uCisJCQkJCT0+KEVOZXh0QnVsa091dFBvc2l0aW9uICE9IEN1cldyaXRlUG9zaXRpb24pCisJKi8KKwlpZiAoKGJUeFFMYXN0Um91bmQgPT0gRkFMU0UpICYmCisJCSAoKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikgJiYgKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkgfHwKKwkJICAocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiAhPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQkpCisJeworCQlOZGlzTW92ZU1lbW9yeShwSFRUWENvbnRleHQtPlNhdmVkUGFkLCAmcFdpcmVsZXNzUGt0W3BIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb25dLCA4KTsKKwkJcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQgPSBUUlVFOworCQlpZiAoUlRNUEVxdWFsTWVtb3J5KHBIVFRYQ29udGV4dC0+U2F2ZWRQYWQsIGFsbHplcm8sNCkpCisJCXsKKwkJCVBVQ0hBUglwQnVmID0gJnBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbMF07CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsKCJXQVJOSU5HLVplcm8tMzolMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCxDV1Bvcz0lbGQsIENXUlBvcz0lbGQsIGJDVz0lZCwgTkJQb3M9JWxkLCBUQlBvcz0lbGQsIFRCU2l6ZT0lbGRcbiIsCisJCQkJcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSxwQnVmWzNdLHBCdWZbNF0sIHBCdWZbNV0sIHBCdWZbNl0scEJ1Zls3XSwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcywKKwkJCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sIFRtcEJ1bGtFbmRQb3MsIFRoaXNCdWxrU2l6ZSkpOworCisJCQlwQnVmID0gJnBXaXJlbGVzc1BrdFtwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb25dOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiXHRDV1Bvcz0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSxwQnVmWzNdLHBCdWZbNF0sIHBCdWZbNV0sIHBCdWZbNl0scEJ1Zls3XSkpOworCQl9CisJCS8vREJHUFJJTlQoUlRfREVCVUdfTE9VRCwoIkVOUG9zPT1DV1Bvcz0lbGQsIENXUlBvcz0lbGQsIGJDU1BhZD0lZCFcbiIsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MsIHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkKSk7CisJfQorCisJaWYgKHBBZC0+YkZvcmNlUHJpbnRUWCA9PSBUUlVFKQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJ1bGtPdXQtQTpTaXplPSVsZCwgQ1dQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkIVxuIiwgVGhpc0J1bGtTaXplLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQpKTsKKwkvL0RCR1BSSU5UKFJUX0RFQlVHX0xPVUQsKCJCdWxrT3V0LUE6U2l6ZT0lbGQsIENXUG9zPSVsZCwgQ1dSUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCwgYkxSb3VuZD0lZCFcbiIsIFRoaXNCdWxrU2l6ZSwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcywgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCwgYlR4UUxhc3RSb3VuZCkpOworCisJCS8vIFVTQiBETUEgZW5naW5lIHJlcXVpcmVzIHRvIHBhZCBleHRyYSA0IGJ5dGVzLiBUaGlzIHBhZCBkb2Vzbid0IGNvdW50IGludG8gcmVhbCBidWxrb3V0c2l6ZS4KKwlwQXBwZW5kYW50ID0gJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zXTsKKwlOZGlzWmVyb01lbW9yeShwQXBwZW5kYW50LCA4KTsKKwkJVGhpc0J1bGtTaXplICs9IDQ7CisJCXBIVFRYQ29udGV4dC0+TGFzdE9uZSA9IFRSVUU7CisJCWlmICgoVGhpc0J1bGtTaXplICUgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkgPT0gMCkKKwkJCVRoaXNCdWxrU2l6ZSArPSA0OworCXBIVFRYQ29udGV4dC0+QnVsa091dFNpemUgPSBUaGlzQnVsa1NpemU7CisKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMTsKKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFnczIpOworCisJLy8gSW5pdCBUeCBjb250ZXh0IGRlc2NyaXB0b3IKKwlSVFVTQkluaXRIVFR4RGVzYyhwQWQsIHBIVFRYQ29udGV4dCwgQnVsa091dFBpcGVJZCwgVGhpc0J1bGtTaXplLCAodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKTsKKworCXBVcmIgPSBwSFRUWENvbnRleHQtPnBVcmI7CisJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYikpIT0wKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRVU0JCdWxrT3V0RGF0YVBhY2tldDogU3VibWl0IFR4IFVSQiBmYWlsZWQgJWRcbiIsIHJldCkpOworCisJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9IEZBTFNFOworCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMDsKKwkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwkJcmV0dXJuOworCX0KKworCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOworCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCXBBZC0+QnVsa091dFJlcSsrOworCit9CisKKworVk9JRCBSVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlQSFRfVFhfQ09OVEVYVAlwSFRUWENvbnRleHQ7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJUE9TX0NPT0tJRSAJCXBPYmo7CisJVUNIQVIJCQlCdWxrT3V0UGlwZUlkOworCisKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKwlwT2JqIAkJCT0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJLy8gU3RvcmUgQnVsa091dCBQaXBlSWQKKwlCdWxrT3V0UGlwZUlkCT0gcEhUVFhDb250ZXh0LT5CdWxrT3V0UGlwZUlkOworCXBBZC0+QnVsa091dERhdGFPbmVTZWNDb3VudCsrOworCisJc3dpdGNoIChCdWxrT3V0UGlwZUlkKQorCXsKKwkJY2FzZSAwOgorCQkJCXBPYmotPmFjMF9kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMF9kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJCXBPYmotPmFjMV9kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMV9kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJCXBPYmotPmFjMl9kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMl9kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJCXBPYmotPmFjM19kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjM19kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJCXBPYmotPmhjY2FfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwkJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5oY2NhX2RtYV9kb25lX3Rhc2spOworCQkJCWJyZWFrOworCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6IE5VTEwgZnJhbWUgdXNlIEJ1bGtPdXRQaXBlSWQgPSAwCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQnVsa091dE51bGxGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQVFhfQ09OVEVYVAkJcE51bGxDb250ZXh0ID0gJihwQWQtPk51bGxDb250ZXh0KTsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKSB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCQlyZXR1cm47CisJfQorCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBUUlVFOworCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbMF0gPSAxOworCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisKKwkvLyBJbmNyZWFzZSBUb3RhbCB0cmFuc21pdCBieXRlIGNvdW50ZXIKKwlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQnl0ZUNvdW50ICs9ICBwTnVsbENvbnRleHQtPkJ1bGtPdXRTaXplOworCisKKwkvLyBDbGVhciBOdWxsIGZyYW1lIGJ1bGsgZmxhZworCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05VTEwpOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcE51bGxDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgVFlQRV9UWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCS8vIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yCisJUlRVU0JJbml0VHhEZXNjKHBBZCwgcE51bGxDb250ZXh0LCAwLCAodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrT3V0TnVsbEZyYW1lQ29tcGxldGUpOworCisJcFVyYiA9IHBOdWxsQ29udGV4dC0+cFVyYjsKKwlpZigocmV0ID0gUlRVU0JfU1VCTUlUX1VSQihwVXJiKSkhPTApCisJeworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBGQUxTRTsKKwkJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFswXSA9IDA7CisJCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVFVTQkJ1bGtPdXROdWxsRnJhbWU6IFN1Ym1pdCBUeCBVUkIgZmFpbGVkICVkXG4iLCByZXQpKTsKKwkJcmV0dXJuOworCX0KKworfQorCisvLyBOVUxMIGZyYW1lIHVzZSBCdWxrT3V0UGlwZUlkID0gMAorVk9JRCBSVFVTQkJ1bGtPdXROdWxsRnJhbWVDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQVFhfQ09OVEVYVAkJCXBOdWxsQ29udGV4dDsKKwlOVFNUQVRVUwkJCVN0YXR1czsKKwlQT1NfQ09PS0lFCQkJcE9iajsKKworCisJcE51bGxDb250ZXh0CT0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJCT0gcE51bGxDb250ZXh0LT5wQWQ7CisJU3RhdHVzIAkJCT0gcFVyYi0+c3RhdHVzOworCisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKwlwT2JqLT5udWxsX2ZyYW1lX2NvbXBsZXRlX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBVcmI7CisJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+bnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6IE1MTUUgdXNlIEJ1bGtPdXRQaXBlSWQgPSAwCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQnVsa091dE1MTUVQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKwlQVFhfQ09OVEVYVAkJcE1MTUVDb250ZXh0OworCVBVUkIJCQlwVXJiOworCWludAkJCQlyZXQgPSAwOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisKKwlwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpcEFkLT5NZ210UmluZy5DZWxsW3BBZC0+TWdtdFJpbmcuVHhEbWFJZHhdLkFsbG9jVmE7CisJcFVyYiA9IHBNTE1FQ29udGV4dC0+cFVyYjsKKworCWlmICgocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA+PSBNR01UX1JJTkdfU0laRSkgfHwKKwkJKHBNTE1FQ29udGV4dC0+SW5Vc2UgPT0gRkFMU0UpIHx8CisJCShwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9PSBGQUxTRSkpCisJeworCisKKwkJLy8gQ2xlYXIgTUxNRSBidWxrIGZsYWcKKwkJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpOworCisJCXJldHVybjsKKwl9CisKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7CisJaWYgKChwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXSA9PSBUUlVFKSB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gVFJVRTsKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W01HTVRQSVBFSURYXSA9IDE7CisJcE1MTUVDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwlwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9IEZBTFNFOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKKworCS8vIEluY3JlYXNlIFRvdGFsIHRyYW5zbWl0IGJ5dGUgY291bnRlcgorCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQgKz0gIHBNTE1FQ29udGV4dC0+QnVsa091dFNpemU7CisKKwkvLyBDbGVhciBNTE1FIGJ1bGsgZmxhZworCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9NTE1FKTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBNTE1FQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIsIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKwkvLyBJbml0IFR4IGNvbnRleHQgZGVzY3JpcHRvcgorCVJUVVNCSW5pdFR4RGVzYyhwQWQsIHBNTE1FQ29udGV4dCwgTUdNVFBJUEVJRFgsICh1c2JfY29tcGxldGVfdClSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCS8vRm9yIG1nbXQgdXJiIGJ1ZmZlciwgYmVjYXVzZSB3ZSB1c2Ugc2tfYnVmZiwgc28gd2UgbmVlZCB0byBub3RpZnkgdGhlIFVTQiBjb250cm9sbGVyIGRvIGRtYSBtYXBwaW5nLgorCXBVcmItPnRyYW5zZmVyX2RtYQk9IDA7CisJcFVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gKH5VUkJfTk9fVFJBTlNGRVJfRE1BX01BUCk7CisjZW5kaWYKKworCXBVcmIgPSBwTUxNRUNvbnRleHQtPnBVcmI7CisJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYikpIT0wKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRVU0JCdWxrT3V0TUxNRVBhY2tldDogU3VibWl0IE1MTUUgVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gRkFMU0U7CisJCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbTUdNVFBJUEVJRFhdID0gMDsKKwkJcE1MTUVDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCXBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID0gVFJVRTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW01HTVRQSVBFSURYXSwgSXJxRmxhZ3MpOworCisJCXJldHVybjsKKwl9CisKKwkvL0RCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAoIjwtLS1SVFVTQkJ1bGtPdXRNTE1FUGFja2V0IFxuIikpOworLy8JcHJpbnRrKCI8LS0tUlRVU0JCdWxrT3V0TUxNRVBhY2tldCxDcHU9JWQhLCBEbWE9JWQsIFN3SWR4PSVkIVxuIiwgcEFkLT5NZ210UmluZy5UeENwdUlkeCwgcEFkLT5NZ210UmluZy5UeERtYUlkeCwgcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCk7Cit9CisKKworVk9JRCBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlQVFhfQ09OVEVYVAkJCXBNTE1FQ29udGV4dDsKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJTlRTVEFUVVMJCQlTdGF0dXM7CisJUE9TX0NPT0tJRSAJCQlwT2JqOworCWludAkJCQkJaW5kZXg7CisKKwkvL0RCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAoIi0tLT5SVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGVcbiIpKTsKKwlwTUxNRUNvbnRleHQJPSAoUFRYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgCQkJPSBwTUxNRUNvbnRleHQtPnBBZDsKKwlwT2JqIAkJCT0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CisJU3RhdHVzCQkJPSBwVXJiLT5zdGF0dXM7CisJaW5kZXggCQkJPSBwTUxNRUNvbnRleHQtPlNlbGZJZHg7CisKKwlwT2JqLT5tZ210X2RtYV9kb25lX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBVcmI7CisJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6IFBzUG9sbCB1c2UgQnVsa091dFBpcGVJZCA9IDAKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JCdWxrT3V0UHNQb2xsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVBUWF9DT05URVhUCQlwUHNQb2xsQ29udGV4dCA9ICYocEFkLT5Qc1BvbGxDb250ZXh0KTsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKSB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCQlyZXR1cm47CisJfQorCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBUUlVFOworCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbMF0gPSAxOworCXBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKworCisJLy8gQ2xlYXIgUFMtUG9sbCBidWxrIGZsYWcKKwlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfUFNQT0xMKTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBQc1BvbGxDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgVFlQRV9UWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCS8vIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yCisJUlRVU0JJbml0VHhEZXNjKHBBZCwgcFBzUG9sbENvbnRleHQsIE1HTVRQSVBFSURYLCAodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUpOworCisJcFVyYiA9IHBQc1BvbGxDb250ZXh0LT5wVXJiOworCWlmKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpKSE9MCkKKwl7CisJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9IEZBTFNFOworCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMDsKKwkJcFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRVU0JCdWxrT3V0UHNQb2xsOiBTdWJtaXQgVHggVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJCXJldHVybjsKKwl9CisKK30KKworLy8gUFMtUG9sbCBmcmFtZSB1c2UgQnVsa091dFBpcGVJZCA9IDAKK1ZPSUQgUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUocHVyYmJfdCBwVXJiLHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQVFhfQ09OVEVYVAkJCXBQc1BvbGxDb250ZXh0OworCU5UU1RBVFVTCQkJU3RhdHVzOworCVBPU19DT09LSUUJCQlwT2JqOworCisKKwlwUHNQb2xsQ29udGV4dD0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkID0gcFBzUG9sbENvbnRleHQtPnBBZDsKKwlTdGF0dXMgPSBwVXJiLT5zdGF0dXM7CisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKwlwT2JqLT5wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFzayk7CisKK30KKworVk9JRCBEb0J1bGtJbihJTiBSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dDsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5JbmRleF0pOworCWlmICgocEFkLT5QZW5kaW5nUnggPiAwKSB8fCAocFJ4Q29udGV4dC0+UmVhZGFibGUgPT0gVFJVRSkgfHwgKHBSeENvbnRleHQtPkluVXNlID09IFRSVUUpKQorCXsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlwUnhDb250ZXh0LT5JblVzZSA9IFRSVUU7CisJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJcEFkLT5QZW5kaW5nUngrKzsKKwlwQWQtPkJ1bGtJblJlcSsrOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisKKwkvLyBJbml0IFJ4IGNvbnRleHQgZGVzY3JpcHRvcgorCU5kaXNaZXJvTWVtb3J5KHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLCBwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQpOworCVJUVVNCSW5pdFJ4RGVzYyhwQWQsIHBSeENvbnRleHQpOworCisJcFVyYiA9IHBSeENvbnRleHQtPnBVcmI7CisJaWYgKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpKSE9MCkKKwl7CS8vIGZhaWwKKworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJcFJ4Q29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKKwkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQlwQWQtPlBlbmRpbmdSeC0tOworCQlwQWQtPkJ1bGtJblJlcS0tOworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVFVTQkJ1bGtSZWNlaXZlOiBTdWJtaXQgUnggVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJfQorCWVsc2UKKwl7CS8vIHN1Y2Nlc3MKKwkJQVNTRVJUKChwUnhDb250ZXh0LT5JblVzZSA9PSBwUnhDb250ZXh0LT5JUlBQZW5kaW5nKSk7CisJCS8vcHJpbnRrKCJCSURvbmUsIFBlbmQ9JWQsQklJZHg9JWQsQklSSWR4PSVkIVxuIiwgcEFkLT5QZW5kaW5nUngsIHBBZC0+TmV4dFJ4QnVsa0luSW5kZXgsIHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4KTsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJVVNCX1J4UGFja2V0IGluaXRpYWxpemVzIGEgVVJCIGFuZCB1c2VzIHRoZSBSeCBJUlAgdG8gc3VibWl0IGl0CisJdG8gVVNCLiBJdCBjaGVja3MgaWYgYW4gUnggRGVzY3JpcHRvciBpcyBhdmFpbGFibGUgYW5kIHBhc3NlcyB0aGUKKwl0aGUgY29yZXNwb25kaW5nIGJ1ZmZlciB0byBiZSBmaWxsZWQuIElmIG5vIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlCisJZmFpbHMgdGhlIHJlcXVlc3QuIFdoZW4gc2V0dGluZyB0aGUgY29tcGxldGlvbiByb3V0aW5lIHdlIHBhc3Mgb3VyCisJQWRhcHRlciBPYmplY3QgYXMgQ29udGV4dC4KKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKwkJVFJVRQkJCWZvdW5kIG1hdGNoZWQgdHVwbGUgY2FjaGUKKwkJRkFMU0UJCQlubyBtYXRjaGVkIGZvdW5kCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2RlZmluZSBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9SWAkJXAorCQkoZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwJXAorCQkgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwgXAorCQkgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCkKKworI2RlZmluZSBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9IQU5ETEVfUlgJXAorCQkoZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwJXAorCQkgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwgXAorCQkgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpCisKK1ZPSUQJUlRVU0JCdWxrUmVjZWl2ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9IQU5ETEVfUlgpKQorCQlyZXR1cm47CisKKwl3aGlsZSgxKQorCXsKKworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXhdKTsKKwkJaWYgKCgocFJ4Q29udGV4dC0+SW5Vc2UgPT0gRkFMU0UpICYmIChwUnhDb250ZXh0LT5SZWFkYWJsZSA9PSBUUlVFKSkgJiYKKwkJCShwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9PSBGQUxTRSkpCisJCXsKKwkJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gVFJVRTsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisKKwkJCS8vIHJlYWQgUnhDb250ZXh0LCBTaW5jZSBub3QKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJU1RBUnhEb25lSW50ZXJydXB0SGFuZGxlKHBBZCwgVFJVRSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCS8vIEZpbmlzaCB0byBoYW5kbGUgdGhpcyBidWxrSW4gYnVmZmVyLgorCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCQlwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQgPSAwOworCQkJcFJ4Q29udGV4dC0+UmVhZGFibGUgPSBGQUxTRTsKKwkJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gRkFMU0U7CisJCQlwQWQtPlJlYWRQb3NpdGlvbiA9IDA7CisJCQlwQWQtPlRyYW5zZmVyQnVmZmVyTGVuZ3RoID0gMDsKKwkJCUlOQ19SSU5HX0lOREVYKHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBSWF9SSU5HX1NJWkUpOworCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCEoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9SWCkpKQorCQlEb0J1bGtJbihwQWQpOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBwcm9jZXNzIFJ4IElycCBhbmQgY2FsbCByeCBjb21wbGV0ZSBmdW5jdGlvbi4KKworCUFyZ3VtZW50czoKKwkJRGV2aWNlT2JqZWN0CVBvaW50ZXIgdG8gdGhlIGRldmljZSBvYmplY3QgZm9yIG5leHQgbG93ZXIKKwkJCQkJCWRldmljZS4gRGV2aWNlT2JqZWN0IHBhc3NlZCBpbiBoZXJlIGJlbG9uZ3MgdG8KKwkJCQkJCXRoZSBuZXh0IGxvd2VyIGRyaXZlciBpbiB0aGUgc3RhY2sgYmVjYXVzZSB3ZQorCQkJCQkJd2VyZSBpbnZva2VkIHZpYSBJb0NhbGxEcml2ZXIgaW4gVVNCX1J4UGFja2V0CisJCQkJCQlBTkQgaXQgaXMgbm90IE9VUiBkZXZpY2Ugb2JqZWN0CisJICBJcnAJCQkJUHRyIHRvIGNvbXBsZXRlZCBJUlAKKwkgIENvbnRleHQJCQlQdHIgdG8gb3VyIEFkYXB0ZXIgb2JqZWN0IChjb250ZXh0IHNwZWNpZmllZAorCQkJCQkJaW4gSW9TZXRDb21wbGV0aW9uUm91dGluZQorCisJUmV0dXJuIFZhbHVlOgorCQlBbHdheXMgcmV0dXJucyBTVEFUVVNfTU9SRV9QUk9DRVNTSU5HX1JFUVVJUkVECisKKwlOb3RlOgorCQlBbHdheXMgcmV0dXJucyBTVEFUVVNfTU9SRV9QUk9DRVNTSU5HX1JFUVVJUkVECisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVFVTQkJ1bGtSeENvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJLy8gdXNlIGEgcmVjZWl2ZSB0YXNrbGV0IHRvIGhhbmRsZSByZWNlaXZlZCBwYWNrZXRzOworCS8vIG9yIHNvbWV0aW1lcyBoYXJkd2FyZSBJUlEgd2lsbCBiZSBkaXNhYmxlZCBoZXJlLCBzbyB3ZSBjYW4gbm90CisJLy8gdXNlIHNwaW5fbG9ja19iaCgpL3NwaW5fdW5sb2NrX2JoKCkgYWZ0ZXIgSVJRIGlzIGRpc2FibGVkLiA6PAorCVBSWF9DT05URVhUCQlwUnhDb250ZXh0OworCVBSVE1QX0FEQVBURVIJcEFkOworCVBPU19DT09LSUUgCQlwT2JqOworCisKKwlwUnhDb250ZXh0CT0gKFBSWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJPSBwUnhDb250ZXh0LT5wQWQ7CisJcE9iaiAJCT0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJcE9iai0+cnhfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPnJ4X2RvbmVfdGFzayk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQktpY2tCdWxrT3V0KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkKQoreworCS8vIEJ1bGtJbiBSZXNldCB3aWxsIHJlc2V0IHdob2xlIFVTQiBQSFkuIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUIG5vdCBmbGFnZWQuCisJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQgLGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKQorI2lmZGVmIFJBTElOS19BVEUKKwkJJiYgIShBVEVfT04ocEFkKSkKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCSkKKwl7CisJCS8vIDIuIFBTLVBvbGwgZnJhbWUgaXMgbmV4dAorCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfUFNQT0xMKSkKKwkJeworCQkJUlRVU0JCdWxrT3V0UHNQb2xsKHBBZCk7CisJCX0KKworCQkvLyA1LiBNbG1lIGZyYW1lIGlzIG5leHQKKwkJZWxzZSBpZiAoKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpKSAmJgorCQkJCSAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA8IE1HTVRfUklOR19TSVpFKSkKKwkJeworCQkJUlRVU0JCdWxrT3V0TUxNRVBhY2tldChwQWQsIHBBZC0+TWdtdFJpbmcuVHhEbWFJZHgpOworCQl9CisKKwkJLy8gNi4gRGF0YSBmcmFtZSBub3JtYWwgaXMgbmV4dAorCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwpKQorCQl7CisJCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgfHwKKwkJCQkoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQkpKQorCQkJeworCQkJCVJUVVNCQnVsa091dERhdGFQYWNrZXQocEFkLCAwLCBwQWQtPk5leHRCdWxrT3V0SW5kZXhbMF0pOworCQkJfQorCQl9CisJCWlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF8yKSkKKwkJeworCQkJaWYgKCgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpIHx8CisJCQkJKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQkJKSkKKwkJCXsKKwkJCQlSVFVTQkJ1bGtPdXREYXRhUGFja2V0KHBBZCwgMSwgcEFkLT5OZXh0QnVsa091dEluZGV4WzFdKTsKKwkJCX0KKwkJfQorCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfMykpCisJCXsKKwkJCWlmICgoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKSB8fAorCQkJCSghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCQkJCSkpCisJCQl7CisJCQkJUlRVU0JCdWxrT3V0RGF0YVBhY2tldChwQWQsIDIsIHBBZC0+TmV4dEJ1bGtPdXRJbmRleFsyXSk7CisJCQl9CisJCX0KKwkJaWYgKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzQpKQorCQl7CisJCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgfHwKKwkJCQkoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQkpKQorCQkJeworCQkJCVJUVVNCQnVsa091dERhdGFQYWNrZXQocEFkLCAzLCBwQWQtPk5leHRCdWxrT3V0SW5kZXhbM10pOworCQkJfQorCQl9CisJCS8vUFMgcGFja2V0cyB1c2UgSENDQSBxdWV1ZSB3aGVuIGRlcXVldWUgZnJvbSBQUyB1bmljYXN0IHF1ZXVlIChXaUZpIFdQQTIgTUE5X0RUMSBmb3IgTWFydmVsbCBCIFNUQSkKKwkJaWYgKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzUpKQorCQl7CisJCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgfHwKKwkJCQkoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQkpKQorCQkJeworCQkJfQorCQl9CisKKwkJLy8gNy4gTnVsbCBmcmFtZSBpcyB0aGUgbGFzdAorCQllbHNlIGlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05VTEwpKQorCQl7CisJCQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisJCQl7CisJCQkJUlRVU0JCdWxrT3V0TnVsbEZyYW1lKHBBZCk7CisJCQl9CisJCX0KKworCQkvLyA4LiBObyBkYXRhIGF2YWxpYWJsZQorCQllbHNlCisJCXsKKworCQl9CisJfQorI2lmZGVmIFJBTElOS19BVEUKKwkvKiBJZiB0aGUgbW9kZSBpcyBpbiBBVEUgbW9kZS4gKi8KKwllbHNlIGlmKChBVEVfT04ocEFkKSkgJiYKKwkJIVJUTVBfVEVTVF9GTEFHKHBBZCAsZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfVFgpKS8vIFBFVEVSIDogd2F0Y2ggb3V0ICEKKwl7CisJCWlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSkpCisJCXsKKwkJCUFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0KHBBZCwgMCk7CisJCX0KKwl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCUNhbGwgZnJvbSBSZXNldCBhY3Rpb24gYWZ0ZXIgQnVsa091dCBmYWlsZWQuCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JDbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJCUlkeDsKKwlQSFRfVFhfQ09OVEVYVAlwVHhDb250ZXh0OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlXG4iKSk7CisKKwlmb3IgKElkeCA9IDA7IElkeCA8IDQ7IElkeCsrKQorCXsKKwkJcFR4Q29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtJZHhdOworCisJCXBUeENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPSBwVHhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uOworCQlwVHhDb250ZXh0LT5MYXN0T25lID0gRkFMU0U7CisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbSWR4XSk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbSWR4XSA9IEZBTFNFOworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW0lkeF0pOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS1DbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQ2xlYW5VcE1MTUVCdWxrT3V0UXVldWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlXG4iKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLUNsZWFuVXBNTE1FQnVsa091dFF1ZXVlXG4iKSk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQ2FuY2VsUGVuZGluZ0lSUHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dDsKKwlVSU5UCQkJaTsKKworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCItLS0+UlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQXG4iKSk7CisJZm9yICggaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQorCXsKKwkJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCQlpZihwUnhDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCisJCXsKKwkJCVJUVVNCX1VOTElOS19VUkIocFJ4Q29udGV4dC0+cFVyYik7CisJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQkJLy9OZGlzSW50ZXJsb2NrZWREZWNyZW1lbnQoJnBBZC0+UGVuZGluZ1J4KTsKKwkJCS8vcEFkLT5QZW5kaW5nUngtLTsKKwkJfQorCX0KKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiPC0tLVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUFxuIikpOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCVBUWF9DT05URVhUCQkJcE1MTUVDb250ZXh0OworCVBUWF9DT05URVhUCQkJcEJlYWNvbkNvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwTnVsbENvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwUHNQb2xsQ29udGV4dDsKKwlQVFhfQ09OVEVYVAkJCXBSVFNDb250ZXh0OworCVVJTlQJCQkJaSwgSWR4OworLy8JdW5zaWduZWQgaW50IAkJSXJxRmxhZ3M7CisvLwlORElTX1NQSU5fTE9DSwkJKnBMb2NrOworLy8JQk9PTEVBTgkJCQkqcFBlbmRpbmc7CisKKworLy8JcExvY2sgPSAmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF07CisvLwlwUGVuZGluZyA9ICZwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXTsKKworCWZvciAoSWR4ID0gMDsgSWR4IDwgNDsgSWR4KyspCisJeworCQlwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W0lkeF0pOworCisJCWlmIChwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJeworCisJCQkvLyBHZXQgdGhlIFVTQl9DT05URVhUIGFuZCBjYW5jZWwgaXQncyBJUlA7IHRoZSBjb21wbGV0aW9uIHJvdXRpbmUgd2lsbCBpdHNlbGYKKwkJCS8vIHJlbW92ZSBpdCBmcm9tIHRoZSBIZWFkUGVuZGluZ1NlbmRMaXN0IGFuZCBOVUxMIG91dCBIZWFkUGVuZGluZ1NlbmRMaXN0CisJCQkvLwl3aGVuIHRoZSBsYXN0IElSUCBvbiB0aGUgbGlzdCBoYXMgYmVlbgljYW5jZWxsZWQ7IHRoYXQncyBob3cgd2UgZXhpdCB0aGlzIGxvb3AKKwkJCS8vCisKKwkJCVJUVVNCX1VOTElOS19VUkIocEhUVFhDb250ZXh0LT5wVXJiKTsKKworCQkJLy8gU2xlZXAgMjAwIG1pY3Jvc2Vjb25kcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsKKwkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKKwkJfQorCisjaWZkZWYgUkFMSU5LX0FURQorCQlwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9IDA7CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9IDA7CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gMDsKKwkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOworCQlwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPSAwOworCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gMDsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCXBBZC0+QnVsa091dFBlbmRpbmdbSWR4XSA9IEZBTFNFOworCX0KKworCS8vUlRNUF9JUlFfTE9DSyhwTG9jaywgSXJxRmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBNR01UX1JJTkdfU0laRTsgaSsrKQorCXsKKwkJcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5BbGxvY1ZhOworCQlpZihwTUxNRUNvbnRleHQgJiYgKHBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKSkKKwkJeworCisJCQkvLyBHZXQgdGhlIFVTQl9DT05URVhUIGFuZCBjYW5jZWwgaXQncyBJUlA7IHRoZSBjb21wbGV0aW9uIHJvdXRpbmUgd2lsbCBpdHNlbGYKKwkJCS8vIHJlbW92ZSBpdCBmcm9tIHRoZSBIZWFkUGVuZGluZ1NlbmRMaXN0IGFuZCBOVUxMIG91dCBIZWFkUGVuZGluZ1NlbmRMaXN0CisJCQkvLwl3aGVuIHRoZSBsYXN0IElSUCBvbiB0aGUgbGlzdCBoYXMgYmVlbgljYW5jZWxsZWQ7IHRoYXQncyBob3cgd2UgZXhpdCB0aGlzIGxvb3AKKwkJCS8vCisKKwkJCVJUVVNCX1VOTElOS19VUkIocE1MTUVDb250ZXh0LT5wVXJiKTsKKwkJCXBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCisJCQkvLyBTbGVlcCAyMDAgbWljcm9zZWNzIHRvIGdpdmUgY2FuY2VsbGF0aW9uIHRpbWUgdG8gd29yaworCQkJUlRNUHVzZWNEZWxheSgyMDApOworCQl9CisJfQorCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gRkFMU0U7CisJLy9SVE1QX0lSUV9VTkxPQ0socExvY2ssIElycUZsYWdzKTsKKworCisJZm9yIChpID0gMDsgaSA8IEJFQUNPTl9SSU5HX1NJWkU7IGkrKykKKwl7CisJCXBCZWFjb25Db250ZXh0ID0gJihwQWQtPkJlYWNvbkNvbnRleHRbaV0pOworCisJCWlmKHBCZWFjb25Db250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCisJCXsKKworCQkJLy8gR2V0IHRoZSBVU0JfQ09OVEVYVCBhbmQgY2FuY2VsIGl0J3MgSVJQOyB0aGUgY29tcGxldGlvbiByb3V0aW5lIHdpbGwgaXRzZWxmCisJCQkvLyByZW1vdmUgaXQgZnJvbSB0aGUgSGVhZFBlbmRpbmdTZW5kTGlzdCBhbmQgTlVMTCBvdXQgSGVhZFBlbmRpbmdTZW5kTGlzdAorCQkJLy8Jd2hlbiB0aGUgbGFzdCBJUlAgb24gdGhlIGxpc3QgaGFzIGJlZW4JY2FuY2VsbGVkOyB0aGF0J3MgaG93IHdlIGV4aXQgdGhpcyBsb29wCisJCQkvLworCisJCQlSVFVTQl9VTkxJTktfVVJCKHBCZWFjb25Db250ZXh0LT5wVXJiKTsKKworCQkJLy8gU2xlZXAgMjAwIG1pY3Jvc2VjcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsKKwkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKKwkJfQorCX0KKworCXBOdWxsQ29udGV4dCA9ICYocEFkLT5OdWxsQ29udGV4dCk7CisJaWYgKHBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKQorCQlSVFVTQl9VTkxJTktfVVJCKHBOdWxsQ29udGV4dC0+cFVyYik7CisKKwlwUlRTQ29udGV4dCA9ICYocEFkLT5SVFNDb250ZXh0KTsKKwlpZiAocFJUU0NvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJUlRVU0JfVU5MSU5LX1VSQihwUlRTQ29udGV4dC0+cFVyYik7CisKKwlwUHNQb2xsQ29udGV4dCA9ICYocEFkLT5Qc1BvbGxDb250ZXh0KTsKKwlpZiAocFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJUlRVU0JfVU5MSU5LX1VSQihwUHNQb2xsQ29udGV4dC0+cFVyYik7CisKKwlmb3IgKElkeCA9IDA7IElkeCA8IDQ7IElkeCsrKQorCXsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1tJZHhdKTsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1tJZHhdID0gRkFMU0U7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbSWR4XSk7CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9kYXRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxMzA5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2RhdGEuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlydHVzYl9kYXRhLmMKKworCUFic3RyYWN0OgorCVJhbGluayBVU0IgZHJpdmVyIFR4L1J4IGZ1bmN0aW9ucy4KKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSmFuICAgICAgICAgICAgMDMtMjUtMjAwNiAgICBjcmVhdGVkCisKKyovCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKK2V4dGVybiAgVUNIQVIgUGh5MTFCR05leHRSYXRlVXB3YXJkW107IC8vIGRlZmluZWQgaW4gbWxtZS5jCitleHRlcm4gVUNIQVIJRXBUb1F1ZXVlW107CisKKworVk9JRCBSRVBPUlRfQU1TRFVfRlJBTUVTX1RPX0xMQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplKQoreworCVBORElTX1BBQ0tFVAlwUGFja2V0OworCVVJTlQJCQluTVNEVTsKKwlzdHJ1Y3QJCQlza19idWZmICpwU2tiOworCisJbk1TRFUgPSAwOworCS8qIGFsbG9jYXRlIGEgcnggcGFja2V0ICovCisJcFNrYiA9IGRldl9hbGxvY19za2IoUlhfQlVGRkVSX0FHR1JFU0laRSk7CisJcFBhY2tldCA9IChQTkRJU19QQUNLRVQpT1NQS1RfVE9fUlRQS1QocFNrYik7CisJaWYgKHBTa2IpCisJeworCisJCS8qIGNvbnZlcnQgODAyLjExIHRvIDgwMi4zIHBhY2tldCAqLworCQlwU2tiLT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBCU1MwKTsKKwkJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShwUGFja2V0LCBQS1RTUkNfTkRJUyk7CisJCWRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKHBBZCwgcFBhY2tldCwgcERhdGEsIERhdGFTaXplKTsKKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJDYW4ndCBhbGxvY2F0ZSBza2JcbiIpKTsKKwl9Cit9CisKK05ESVNfU1RBVFVTCVJUVVNCRnJlZURlc2NyaXB0b3JSZXF1ZXN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQnVsa091dFBpcGVJZCwKKwlJTglVSU5UMzIJCQlOdW1iZXJSZXF1aXJlZCkKK3sKKy8vCVVDSEFSCQkJRnJlZU51bWJlciA9IDA7CisvLwlVSU5UCQkJSW5kZXg7CisJTkRJU19TVEFUVVMJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJdW5zaWduZWQgbG9uZyAgIElycUZsYWdzOworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKworCisJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pICYmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgTnVtYmVyUmVxdWlyZWQgKyBMT0NBTF9UWEJVRl9TSVpFKSA+IHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikpCisJeworCisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IEJ1bGtPdXRQaXBlSWQpKTsKKwl9CisJZWxzZSBpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9PSA4KSAmJiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uIDwgKE51bWJlclJlcXVpcmVkICsgTE9DQUxfVFhCVUZfU0laRSkpKQorCXsKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgQnVsa091dFBpcGVJZCkpOworCX0KKwllbHNlIGlmIChwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IFRSVUUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUVVNCRnJlZUQgYzMgLS0+IFF1ZUlkeD0lZCwgQ1dQb3M9JWxkLCBOQk91dFBvcz0lbGQhXG4iLCBCdWxrT3V0UGlwZUlkLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikpOworCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBCdWxrT3V0UGlwZUlkKSk7CisJfQorCWVsc2UKKwl7CisJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJfQorCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCisJcmV0dXJuIChTdGF0dXMpOworfQorCisKK05ESVNfU1RBVFVTIFJUVVNCRnJlZURlc2NyaXB0b3JSZWxlYXNlKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFVDSEFSCQlCdWxrT3V0UGlwZUlkKQoreworCXVuc2lnbmVkIGxvbmcgICBJcnFGbGFnczsKKwlIVF9UWF9DT05URVhUCSpwSFRUWENvbnRleHQ7CisKKwlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gRkFMU0U7CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJcmV0dXJuIChORElTX1NUQVRVU19TVUNDRVNTKTsKK30KKworCitCT09MRUFOCVJUVVNCTmVlZFF1ZXVlQmFja0ZvckFnZygKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBVQ0hBUgkJQnVsa091dFBpcGVJZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgSXJxRmxhZ3M7CisJSFRfVFhfQ09OVEVYVAkqcEhUVFhDb250ZXh0OworCUJPT0xFQU4JCQluZWVkUXVlQmFjayA9IEZBTFNFOworCisJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlpZiAoKHBIVFRYQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKSAgLyomJiAocEFkLT5UeFN3UXVldWVbQnVsa091dFBpcGVJZF0uTnVtYmVyID09IDApICovKQorCXsKKwkJaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uKSAmJgorCQkJKCgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbitNQVhfQUdHUkVHQVRJT05fU0laRSkgPCBNQVhfVFhCVUxLX0xJTUlUKSB8fCAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gTUFYX0FHR1JFR0FUSU9OX1NJWkUpKSkKKwkJeworCQkJbmVlZFF1ZUJhY2sgPSBUUlVFOworCQl9CisJCWVsc2UgaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uKSAmJgorCQkJCSAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gKyBNQVhfQUdHUkVHQVRJT05fU0laRSkgPCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQl7CisJCQluZWVkUXVlQmFjayA9IFRSVUU7CisJCX0KKwl9CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJcmV0dXJuIG5lZWRRdWVCYWNrOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUNIQVIJCQlJbmRleDsKKwlQUVVFVUVfRU5UUlkJcEVudHJ5OworCVBORElTX1BBQ0tFVAlwUGFja2V0OworCVBRVUVVRV9IRUFERVIJcFF1ZXVlOworCisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCA0OyBJbmRleCsrKQorCXsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5UeFN3UXVldWVMb2NrW0luZGV4XSk7CisJCXdoaWxlIChwQWQtPlR4U3dRdWV1ZVtJbmRleF0uSGVhZCAhPSBOVUxMKQorCQl7CisJCQlwUXVldWUgPSAoUFFVRVVFX0hFQURFUikgJihwQWQtPlR4U3dRdWV1ZVtJbmRleF0pOworCQkJcEVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKHBRdWV1ZSk7CisJCQlwUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBFbnRyeSk7CisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCX0KKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5UeFN3UXVldWVMb2NrW0luZGV4XSk7CisKKwl9CisKK30KKworVk9JRCBSVE1QV3JpdGVUeEluZm8oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYSU5GT19TVFJVQyAJcFR4SW5mbywKKwlJTgkgIFVTSE9SVAkJVVNCRE1BcGt0TGVuLAorCUlOCSAgQk9PTEVBTgkJYldpdiwKKwlJTgkgIFVDSEFSCQkJUXVldWVTZWwsCisJSU4JICBVQ0hBUgkJCU5leHRWYWxpZCwKKwlJTgkgIFVDSEFSCQkJVHhCdXJzdCkKK3sKKwlwVHhJbmZvLT5VU0JETUFUeFBrdExlbiA9IFVTQkRNQXBrdExlbjsKKwlwVHhJbmZvLT5RU0VMID0gUXVldWVTZWw7CisJaWYgKFF1ZXVlU2VsICE9IEZJRk9fRURDQSkKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gUXVldWVTZWwgIT0gRklGT19FRENBPD09PT09PT09PT09PVxuIikpOworCXBUeEluZm8tPlVTQkRNQU5leHRWTEQgPSBGQUxTRTsgLy9OZXh0VmFsaWQ7ICAvLyBOZWVkIHRvIGNoZWNrIHdpdGggSmFuIGFib3V0IHRoaXMuCisJcFR4SW5mby0+VVNCRE1BVHhidXJzdCA9IFR4QnVyc3Q7CisJcFR4SW5mby0+V0lWID0gYldpdjsKKwlwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9IDA7CisJcFR4SW5mby0+cnN2ID0gMDsKKwlwVHhJbmZvLT5yc3YyID0gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnR1c2JfaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNTJlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2lvLmMKQEAgLTAsMCArMSwxOTA4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIAlNb2R1bGUgTmFtZToKKwlydHVzYl9pby5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkgICAgV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCSAgICBNb2RpZmljYXRpb24gbG9ncworCVBhdWwgTGluICAgIDA2LTI1LTIwMDQgIGNyZWF0ZWQKKyovCisKKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogTklDIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKK05UU1RBVFVTCVJUVVNCRmlybXdhcmVSdW4oCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQlVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQsCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQsCisJCTB4MDEsCisJCTB4OCwKKwkJMCwKKwkJTlVMTCwKKwkJMCk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIEZpcm13YXJlIHRvIE5JQy4KKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIFJUVVNCRmlybXdhcmVXcml0ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIJCXBGd0ltYWdlLAorCUlOIFVMT05HCQlGd0xlbikKK3sKKwlVSU5UMzIJCU1hY1JlZzsKKwlOVFNUQVRVUyAJU3RhdHVzOworLy8JVUxPTkcgCQlpOworCVVTSE9SVAkJd3JpdGVMZW47CisKKwlTdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IwLCAmTWFjUmVnKTsKKworCisJd3JpdGVMZW4gPSBGd0xlbjsKKwlSVFVTQk11bHRpV3JpdGUocEFkLCBGSVJNV0FSRV9JTUFHRV9CQVNFLCBwRndJbWFnZSwgd3JpdGVMZW4pOworCisJU3RhdHVzID0gUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgMHg3MDE0LCAweGZmZmZmZmZmKTsKKwlTdGF0dXMgPSBSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCAweDcwMWMsIDB4ZmZmZmZmZmYpOworCVN0YXR1cyA9IFJUVVNCRmlybXdhcmVSdW4ocEFkKTsKKworCVJUTVB1c2VjRGVsYXkoMTAwMDApOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsSDJNX01BSUxCT1hfQ1NSLDApOworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMCk7Ly9yZXNldCByZiBieSBNQ1Ugc3VwcG9ydGVkIGJ5IG5ldyBmaXJtd2FyZQorCisJcmV0dXJuIFN0YXR1czsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogR2V0IGN1cnJlbnQgZmlybXdhcmUgb3BlcmF0aW9uIG1vZGUgKFJldHVybiBWYWx1ZSkKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKwkJMCBvciAxID0gRG93bmxvYWRlZCBieSBob3N0IGRyaXZlcgorCQlvdGhlcnMgPSBEcml2ZXIgZG9lc24ndCBkb3dubG9hZCBmaXJtd2FyZQorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JGaXJtd2FyZU9wbW9kZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVJTlQzMgkJCXBWYWx1ZSkKK3sKKwlOVFNUQVRVUwlTdGF0dXM7CisKKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCShVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9JTiB8IFVTQkRfU0hPUlRfVFJBTlNGRVJfT0spLAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4sCisJCTB4MSwKKwkJMHgxMSwKKwkJMCwKKwkJcFZhbHVlLAorCQk0KTsKKwlyZXR1cm4gU3RhdHVzOworfQorTlRTVEFUVVMJUlRVU0JWZW5kZXJSZXNldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlOVFNUQVRVUwlTdGF0dXM7CisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIi0tPlJUVVNCVmVuZGVyUmVzZXRcbiIpKTsKKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCVVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVCwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKKwkJMHgwMSwKKwkJMHgxLAorCQkwLAorCQlOVUxMLAorCQkwKTsKKworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCI8LS1SVFVTQlZlbmRlclJlc2V0XG4iKSk7CisJcmV0dXJuIFN0YXR1czsKK30KKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBSZWFkIHZhcmlvdXMgbGVuZ3RoIGRhdGEgZnJvbSBSVDI1NzMKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCTXVsdGlSZWFkKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJKFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOIHwgVVNCRF9TSE9SVF9UUkFOU0ZFUl9PSyksCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9JTiwKKwkJMHg3LAorCQkwLAorCQlPZmZzZXQsCisJCXBEYXRhLAorCQlsZW5ndGgpOworCisJcmV0dXJuIFN0YXR1czsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIHZhcmlvdXMgbGVuZ3RoIGRhdGEgdG8gUlQyNTczCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQk11bHRpV3JpdGVfT25lQnl0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCisJLy8gVE9ETzogSW4gMjg3MCwgdXNlIHRoaXMgZnVuY2l0b24gY2FyZWZ1bGx5IGNhdXNlIGl0J3Mgbm90IHN0YWJsZS4KKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCVVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVCwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKKwkJMHg2LAorCQkwLAorCQlPZmZzZXQsCisJCXBEYXRhLAorCQkxKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKK05UU1RBVFVTCVJUVVNCTXVsdGlXcml0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCisgICAgICAgIFVTSE9SVCAgICAgICAgICBpbmRleCA9IDAsVmFsdWU7CisgICAgICAgIFBVQ0hBUiAgICAgICAgICBwU3JjID0gcERhdGE7CisgICAgICAgIFVTSE9SVCAgICAgICAgICByZXN1ZGUgPSAwOworCisgICAgICAgIHJlc3VkZSA9IGxlbmd0aCAlIDI7CisJCWxlbmd0aCAgKz0gcmVzdWRlOworCQlkbworCQl7CisJCQlWYWx1ZSA9KFVTSE9SVCkoICpwU3JjICB8ICgqKHBTcmMgKyAxKSA8PCA4KSk7CisJCVN0YXR1cyA9IFJUVVNCU2luZ2xlV3JpdGUocEFkLE9mZnNldCArIGluZGV4LFZhbHVlKTsKKyAgICAgICAgICAgIGluZGV4ICs9MjsKKyAgICAgICAgICAgIGxlbmd0aCAtPSAyOworICAgICAgICAgICAgcFNyYyA9IHBTcmMgKyAyOworICAgICAgICB9d2hpbGUobGVuZ3RoID4gMCk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKK05UU1RBVFVTIFJUVVNCU2luZ2xlV3JpdGUoCisJSU4gCVJUTVBfQURBUFRFUiAJKnBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JVVNIT1JUCQkJVmFsdWUpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQlVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQsCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQsCisJCTB4MiwKKwkJVmFsdWUsCisJCU9mZnNldCwKKwkJTlVMTCwKKwkJMCk7CisKKwlyZXR1cm4gU3RhdHVzOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFJlYWQgMzItYml0IE1BQyByZWdpc3RlcgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JSZWFkTUFDUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCU9VVAlQVUlOVDMyCQkJcFZhbHVlKQoreworCU5UU1RBVFVTCVN0YXR1czsKKwlVSU5UMzIJCWxvY2FsVmFsOworCisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQkoVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4gfCBVU0JEX1NIT1JUX1RSQU5TRkVSX09LKSwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX0lOLAorCQkweDcsCisJCTAsCisJCU9mZnNldCwKKwkJJmxvY2FsVmFsLAorCQk0KTsKKworCSpwVmFsdWUgPSBsZTJjcHUzMihsb2NhbFZhbCk7CisKKworCWlmIChTdGF0dXMgPCAwKQorCQkqcFZhbHVlID0gMHhmZmZmZmZmZjsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIDMyLWJpdCBNQUMgcmVnaXN0ZXIKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCV3JpdGVNQUNSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JVUlOVDMyCQkJVmFsdWUpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCVVJTlQzMgkJbG9jYWxWYWw7CisKKwlsb2NhbFZhbCA9IFZhbHVlOworCisJU3RhdHVzID0gUlRVU0JTaW5nbGVXcml0ZShwQWQsIE9mZnNldCwgKFVTSE9SVCkobG9jYWxWYWwgJiAweGZmZmYpKTsKKwlTdGF0dXMgPSBSVFVTQlNpbmdsZVdyaXRlKHBBZCwgT2Zmc2V0ICsgMiwgKFVTSE9SVCkoKGxvY2FsVmFsICYgMHhmZmZmMDAwMCkgPj4gMTYpKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKworCisjaWYgMQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFJlYWQgOC1iaXQgQkJQIHJlZ2lzdGVyCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQlJlYWRCQlBSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUlkLAorCUlOCVBVQ0hBUgkJCXBWYWx1ZSkKK3sKKwlCQlBfQ1NSX0NGR19TVFJVQwlCYnBDc3I7CisJVUlOVAkJCWkgPSAwOworCU5UU1RBVFVTCQlzdGF0dXM7CisKKwkvLyBWZXJpZnkgdGhlIGJ1c3kgY29uZGl0aW9uCisJZG8KKwl7CisJCXN0YXR1cyA9IFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgQkJQX0NTUl9DRkcsICZCYnBDc3Iud29yZCk7CisJCWlmKHN0YXR1cyA+PSAwKQorCQl7CisJCWlmICghKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpKQorCQkJYnJlYWs7CisJCX0KKwkJcHJpbnRrKCJSVFVTQlJlYWRCQlBSZWdpc3RlcihCQlBfQ1NSX0NGR18xKTpyZXRyeSBjb3VudD0lZCFcbiIsIGkpOworCQlpKys7CisJfQorCXdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpOworCisJaWYgKChpID09IFJFVFJZX0xJTUlUKSB8fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkKKwl7CisJCS8vCisJCS8vIFJlYWQgZmFpbGVkIHRoZW4gUmV0dXJuIERlZmF1bHQgdmFsdWUuCisJCS8vCisJCSpwVmFsdWUgPSBwQWQtPkJicFdyaXRlTGF0Y2hbSWRdOworCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSZXRyeSBjb3VudCBleGhhdXN0ZWQgb3IgZGV2aWNlIHJlbW92ZWQhISFcbiIpKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCisJLy8gUHJlcGFyZSBmb3Igd3JpdGUgbWF0ZXJpYWwKKwlCYnBDc3Iud29yZCAJCQkJPSAwOworCUJicENzci5maWVsZC5mUmVhZAkJCT0gMTsKKwlCYnBDc3IuZmllbGQuQnVzeQkJCT0gMTsKKwlCYnBDc3IuZmllbGQuUmVnTnVtIAkJPSBJZDsKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBCQlBfQ1NSX0NGRywgQmJwQ3NyLndvcmQpOworCisJaSA9IDA7CisJLy8gVmVyaWZ5IHRoZSBidXN5IGNvbmRpdGlvbgorCWRvCisJeworCQlzdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIEJCUF9DU1JfQ0ZHLCAmQmJwQ3NyLndvcmQpOworCQlpZiAoc3RhdHVzID49IDApCisJCXsKKwkJaWYgKCEoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gQlVTWSkpCisJCXsKKwkJCSpwVmFsdWUgPSAoVUNIQVIpQmJwQ3NyLmZpZWxkLlZhbHVlOworCQkJYnJlYWs7CisJCX0KKwkJfQorCQlwcmludGsoIlJUVVNCUmVhZEJCUFJlZ2lzdGVyKEJCUF9DU1JfQ0ZHXzIpOnJldHJ5IGNvdW50PSVkIVxuIiwgaSk7CisJCWkrKzsKKwl9CisJd2hpbGUgKChpIDwgUkVUUllfTElNSVQpICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSk7CisKKwlpZiAoKGkgPT0gUkVUUllfTElNSVQpIHx8IChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCXsKKwkJLy8KKwkJLy8gUmVhZCBmYWlsZWQgdGhlbiBSZXR1cm4gRGVmYXVsdCB2YWx1ZS4KKwkJLy8KKwkJKnBWYWx1ZSA9IHBBZC0+QmJwV3JpdGVMYXRjaFtJZF07CisKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJldHJ5IGNvdW50IGV4aGF1c3RlZCBvciBkZXZpY2UgcmVtb3ZlZCEhIVxuIikpOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisjZWxzZQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFJlYWQgOC1iaXQgQkJQIHJlZ2lzdGVyIHZpYSBmaXJtd2FyZQorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JSZWFkQkJQUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJZCwKKwlJTglQVUNIQVIJCQlwVmFsdWUpCit7CisJQkJQX0NTUl9DRkdfU1RSVUMJQmJwQ3NyOworCWludAkJCQkJaSwgazsKKwlmb3IgKGk9MDsgaTxNQVhfQlVTWV9DT1VOVDsgaSsrKQorCXsKKwkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBIMk1fQkJQX0FHRU5ULCAmQmJwQ3NyLndvcmQpOworCQlpZiAoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gQlVTWSkKKwkJeworCQkJY29udGludWU7CisJCX0KKwkJQmJwQ3NyLndvcmQgPSAwOworCQlCYnBDc3IuZmllbGQuZlJlYWQgPSAxOworCQlCYnBDc3IuZmllbGQuQkJQX1JXX01PREUgPSAxOworCQlCYnBDc3IuZmllbGQuQnVzeSA9IDE7CisJCUJicENzci5maWVsZC5SZWdOdW0gPSBJZDsKKwkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgSDJNX0JCUF9BR0VOVCwgQmJwQ3NyLndvcmQpOworCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4ODAsIDB4ZmYsIDB4MCwgMHgwKTsKKwkJZm9yIChrPTA7IGs8TUFYX0JVU1lfQ09VTlQ7IGsrKykKKwkJeworCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBIMk1fQkJQX0FHRU5ULCAmQmJwQ3NyLndvcmQpOworCQkJaWYgKEJicENzci5maWVsZC5CdXN5ID09IElETEUpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKChCYnBDc3IuZmllbGQuQnVzeSA9PSBJRExFKSAmJgorCQkJKEJicENzci5maWVsZC5SZWdOdW0gPT0gSWQpKQorCQl7CisJCQkqcFZhbHVlID0gKFVDSEFSKUJicENzci5maWVsZC5WYWx1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQkJQIHJlYWQgUiVkPTB4JXggZmFpbFxuIiwgSWQsIEJicENzci53b3JkKSk7CisJCSpwVmFsdWUgPSBwQWQtPkJicFdyaXRlTGF0Y2hbSWRdOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorI2VuZGlmCisKKyNpZiAxCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogV3JpdGUgOC1iaXQgQkJQIHJlZ2lzdGVyCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQldyaXRlQkJQUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJZCwKKwlJTglVQ0hBUgkJCVZhbHVlKQoreworCUJCUF9DU1JfQ0ZHX1NUUlVDCUJicENzcjsKKwlVSU5UCQkJaSA9IDA7CisJTlRTVEFUVVMJCXN0YXR1czsKKwkvLyBWZXJpZnkgdGhlIGJ1c3kgY29uZGl0aW9uCisJZG8KKwl7CisJCXN0YXR1cyA9IFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgQkJQX0NTUl9DRkcsICZCYnBDc3Iud29yZCk7CisJCWlmIChzdGF0dXMgPj0gMCkKKwkJeworCQlpZiAoIShCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSkKKwkJCWJyZWFrOworCQl9CisJCXByaW50aygiUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKEJCUF9DU1JfQ0ZHKTpyZXRyeSBjb3VudD0lZCFcbiIsIGkpOworCQlpKys7CisJfQorCXdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpOworCisJaWYgKChpID09IFJFVFJZX0xJTUlUKSB8fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSZXRyeSBjb3VudCBleGhhdXN0ZWQgb3IgZGV2aWNlIHJlbW92ZWQhISFcbiIpKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCisJLy8gUHJlcGFyZSBmb3Igd3JpdGUgbWF0ZXJpYWwKKwlCYnBDc3Iud29yZCAJCQkJPSAwOworCUJicENzci5maWVsZC5mUmVhZAkJCT0gMDsKKwlCYnBDc3IuZmllbGQuVmFsdWUJCQk9IFZhbHVlOworCUJicENzci5maWVsZC5CdXN5CQkJPSAxOworCUJicENzci5maWVsZC5SZWdOdW0gCQk9IElkOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIEJCUF9DU1JfQ0ZHLCBCYnBDc3Iud29yZCk7CisKKwlwQWQtPkJicFdyaXRlTGF0Y2hbSWRdID0gVmFsdWU7CisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisjZWxzZQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIDgtYml0IEJCUCByZWdpc3RlciB2aWEgZmlybXdhcmUKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworTlRTVEFUVVMJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSWQsCisJSU4JVUNIQVIJCQlWYWx1ZSkKKworeworCUJCUF9DU1JfQ0ZHX1NUUlVDCUJicENzcjsKKwlpbnQJCQkJCUJ1c3lDbnQ7CisJZm9yIChCdXN5Q250PTA7IEJ1c3lDbnQ8TUFYX0JVU1lfQ09VTlQ7IEJ1c3lDbnQrKykKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgSDJNX0JCUF9BR0VOVCwgJkJicENzci53b3JkKTsKKwkJaWYgKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpCisJCQljb250aW51ZTsKKwkJQmJwQ3NyLndvcmQgPSAwOworCQlCYnBDc3IuZmllbGQuZlJlYWQgPSAwOworCQlCYnBDc3IuZmllbGQuQkJQX1JXX01PREUgPSAxOworCQlCYnBDc3IuZmllbGQuQnVzeSA9IDE7CisJCUJicENzci5maWVsZC5WYWx1ZSA9IFZhbHVlOworCQlCYnBDc3IuZmllbGQuUmVnTnVtID0gSWQ7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9CQlBfQUdFTlQsIEJicENzci53b3JkKTsKKwkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDgwLCAweGZmLCAweDAsIDB4MCk7CisJCXBBZC0+QmJwV3JpdGVMYXRjaFtJZF0gPSBWYWx1ZTsKKwkJYnJlYWs7CisJfQorCWlmIChCdXN5Q250ID09IE1BWF9CVVNZX0NPVU5UKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQkJQIHdyaXRlIFIlZD0weCV4IGZhaWxcbiIsIElkLCBCYnBDc3Iud29yZCkpOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorI2VuZGlmCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogV3JpdGUgUkYgcmVnaXN0ZXIgdGhyb3VnaCBNQUMKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVJTlQzMgkJCVZhbHVlKQoreworCVBIWV9DU1I0X1NUUlVDCVBoeUNzcjQ7CisJVUlOVAkJCWkgPSAwOworCU5UU1RBVFVTCQlzdGF0dXM7CisKKwlOZGlzWmVyb01lbW9yeSgmUGh5Q3NyNCwgc2l6ZW9mKFBIWV9DU1I0X1NUUlVDKSk7CisJZG8KKwl7CisJCXN0YXR1cyA9IFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgUkZfQ1NSX0NGRzAsICZQaHlDc3I0LndvcmQpOworCQlpZiAoc3RhdHVzID49IDApCisJCXsKKwkJaWYgKCEoUGh5Q3NyNC5maWVsZC5CdXN5KSkKKwkJCWJyZWFrOworCQl9CisJCXByaW50aygiUlRVU0JXcml0ZVJGUmVnaXN0ZXIoUkZfQ1NSX0NGRzApOnJldHJ5IGNvdW50PSVkIVxuIiwgaSk7CisJCWkrKzsKKwl9CisJd2hpbGUgKChpIDwgUkVUUllfTElNSVQpICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSk7CisKKwlpZiAoKGkgPT0gUkVUUllfTElNSVQpIHx8IChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJldHJ5IGNvdW50IGV4aGF1c3RlZCBvciBkZXZpY2UgcmVtb3ZlZCEhIVxuIikpOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBSRl9DU1JfQ0ZHMCwgVmFsdWUpOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JSZWFkRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKQoreworCU5UU1RBVFVTCVN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisjaWZkZWYgUlQzMHh4CisJaWYocEFkLT5iVXNlRWZ1c2UpCisJeworCQlTdGF0dXMgPWVGdXNlUmVhZChwQWQsIE9mZnNldCwgcERhdGEsIGxlbmd0aCk7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBSVDMweHggLy8KKwl7CisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQkoVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4gfCBVU0JEX1NIT1JUX1RSQU5TRkVSX09LKSwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX0lOLAorCQkweDksCisJCTAsCisJCU9mZnNldCwKKwkJcERhdGEsCisJCWxlbmd0aCk7CisJfQorCisJcmV0dXJuIFN0YXR1czsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQldyaXRlRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVU0hPUlQJCQlsZW5ndGgpCit7CisJTlRTVEFUVVMJU3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyNpZmRlZiBSVDMweHgKKwlpZihwQWQtPmJVc2VFZnVzZSkKKwl7CisJCVN0YXR1cyA9IGVGdXNlV3JpdGUocEFkLCBPZmZzZXQsIHBEYXRhLCBsZW5ndGgpOworCX0KKwllbHNlCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VULAorCQkweDgsCisJCTAsCisJCU9mZnNldCwKKwkJcERhdGEsCisJCWxlbmd0aCk7CisJfQorCisJcmV0dXJuIFN0YXR1czsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUVVNCUHV0VG9TbGVlcCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVSU5UMzIJCXZhbHVlOworCisJLy8gVGltZW91dCAweDQwIHggNTB1cworCXZhbHVlID0gKFNMRUVQQ0lEPDwxNikrKE9XTkVSTUNVPDwyNCkrICgweDQwPDw4KSsxOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIDB4NzAxMCwgdmFsdWUpOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIDB4NDA0LCAweDMwKTsKKwkvL1JUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJTbGVlcCBNYWlsYm94IHRlc3R2YWx1ZSAleFxuIiwgdmFsdWUpKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIFJUVVNCV2FrZVVwKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VULAorCQkweDAxLAorCQkweDA5LAorCQkwLAorCQlOVUxMLAorCQkwKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQkluaXRpYWxpemVDbWRRKAorCUlOCVBDbWRRCWNtZHEpCit7CisJY21kcS0+aGVhZCA9IE5VTEw7CisJY21kcS0+dGFpbCA9IE5VTEw7CisJY21kcS0+c2l6ZSA9IDA7CisJY21kcS0+Q21kUVN0YXRlID0gUlQyODcwX1RIUkVBRF9JTklURUQ7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJUlRVU0JFbnF1ZXVlQ21kRnJvbU5kaXMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTkRJU19PSUQJCU9pZCwKKwlJTglCT09MRUFOCQkJU2V0SW5mb3JtYXRpb24sCisJSU4JUFZPSUQJCQlwSW5mb3JtYXRpb25CdWZmZXIsCisJSU4JVUlOVDMyCQkJSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpCit7CisJTkRJU19TVEFUVVMJc3RhdHVzOworCVBDbWRRRWxtdAljbWRxZWxtdCA9IE5VTEw7CisJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisKKwlpZiAocE9iai0+UlRVU0JDbWRUaHJfcGlkIDwgMCkKKwkJcmV0dXJuIChORElTX1NUQVRVU19SRVNPVVJDRVMpOworCisJc3RhdHVzID0gUlRNUEFsbG9jYXRlTWVtb3J5KChQVk9JRCAqKSZjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSk7CisJaWYgKChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgfHwgKGNtZHFlbG10ID09IE5VTEwpKQorCQlyZXR1cm4gKE5ESVNfU1RBVFVTX1JFU09VUkNFUyk7CisKKwkJY21kcWVsbXQtPmJ1ZmZlciA9IE5VTEw7CisJCWlmIChwSW5mb3JtYXRpb25CdWZmZXIgIT0gTlVMTCkKKwkJeworCQkJc3RhdHVzID0gUlRNUEFsbG9jYXRlTWVtb3J5KChQVk9JRCAqKSZjbWRxZWxtdC0+YnVmZmVyLCBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCk7CisJCQlpZiAoKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB8fCAoY21kcWVsbXQtPmJ1ZmZlciA9PSBOVUxMKSkKKwkJCXsKKwkJCQlrZnJlZShjbWRxZWxtdCk7CisJCQkJcmV0dXJuIChORElTX1NUQVRVU19SRVNPVVJDRVMpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KGNtZHFlbG10LT5idWZmZXIsIHBJbmZvcm1hdGlvbkJ1ZmZlciwgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCQkJCWNtZHFlbG10LT5idWZmZXJsZW5ndGggPSBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKKwkJCX0KKwkJfQorCQllbHNlCisJCQljbWRxZWxtdC0+YnVmZmVybGVuZ3RoID0gMDsKKworCWNtZHFlbG10LT5jb21tYW5kID0gT2lkOworCWNtZHFlbG10LT5DbWRGcm9tTmRpcyA9IFRSVUU7CisJaWYgKFNldEluZm9ybWF0aW9uID09IFRSVUUpCisJCWNtZHFlbG10LT5TZXRPcGVyYXRpb24gPSBUUlVFOworCWVsc2UKKwkJY21kcWVsbXQtPlNldE9wZXJhdGlvbiA9IEZBTFNFOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJaWYgKHBBZC0+Q21kUS5DbWRRU3RhdGUgJiBSVDI4NzBfVEhSRUFEX0NBTl9ET19JTlNFUlQpCisJeworCQlFbnF1ZXVlQ21kKCgmcEFkLT5DbWRRKSwgY21kcWVsbXQpOworCQlzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCX0KKwllbHNlCisJeworCQlzdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKworCWlmIChzdGF0dXMgPT0gTkRJU19TVEFUVVNfRkFJTFVSRSkKKwl7CisJCWlmIChjbWRxZWxtdC0+YnVmZmVyKQorCQkJTmRpc0ZyZWVNZW1vcnkoY21kcWVsbXQtPmJ1ZmZlciwgY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCwgMCk7CisJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpLCAwKTsKKwl9CisJZWxzZQorCVJUVVNCQ01EVXAocEFkKTsKKworCisgICAgcmV0dXJuKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIFJUVVNCRW5xdWV1ZUludGVybmFsQ21kKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE5ESVNfT0lECQkJT2lkLAorCUlOIFBWT0lECQkJcEluZm9ybWF0aW9uQnVmZmVyLAorCUlOIFVJTlQzMgkJCUluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKQoreworCU5ESVNfU1RBVFVTCXN0YXR1czsKKwlQQ21kUUVsbXQJY21kcWVsbXQgPSBOVUxMOworCisKKwlzdGF0dXMgPSBSVE1QQWxsb2NhdGVNZW1vcnkoKFBWT0lEICopJmNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpKTsKKwlpZiAoKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB8fCAoY21kcWVsbXQgPT0gTlVMTCkpCisJCXJldHVybiAoTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKKwlOZGlzWmVyb01lbW9yeShjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSk7CisKKwlpZihJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCA+IDApCisJeworCQlzdGF0dXMgPSBSVE1QQWxsb2NhdGVNZW1vcnkoKFBWT0lEICopJmNtZHFlbG10LT5idWZmZXIsIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKKwkJaWYgKChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgfHwgKGNtZHFlbG10LT5idWZmZXIgPT0gTlVMTCkpCisJCXsKKwkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpLCAwKTsKKwkJCXJldHVybiAoTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU5kaXNNb3ZlTWVtb3J5KGNtZHFlbG10LT5idWZmZXIsIHBJbmZvcm1hdGlvbkJ1ZmZlciwgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCQkJY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCA9IEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOworCQl9CisJfQorCWVsc2UKKwl7CisJCWNtZHFlbG10LT5idWZmZXIgPSBOVUxMOworCQljbWRxZWxtdC0+YnVmZmVybGVuZ3RoID0gMDsKKwl9CisKKwljbWRxZWxtdC0+Y29tbWFuZCA9IE9pZDsKKwljbWRxZWxtdC0+Q21kRnJvbU5kaXMgPSBGQUxTRTsKKworCWlmIChjbWRxZWxtdCAhPSBOVUxMKQorCXsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJCWlmIChwQWQtPkNtZFEuQ21kUVN0YXRlICYgUlQyODcwX1RIUkVBRF9DQU5fRE9fSU5TRVJUKQorCQl7CisJCQlFbnF1ZXVlQ21kKCgmcEFkLT5DbWRRKSwgY21kcWVsbXQpOworCQkJc3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCX0KKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisKKwkJaWYgKHN0YXR1cyA9PSBORElTX1NUQVRVU19GQUlMVVJFKQorCQl7CisJCQlpZiAoY21kcWVsbXQtPmJ1ZmZlcikKKwkJCQlOZGlzRnJlZU1lbW9yeShjbWRxZWxtdC0+YnVmZmVyLCBjbWRxZWxtdC0+YnVmZmVybGVuZ3RoLCAwKTsKKwkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpLCAwKTsKKwkJfQorCQllbHNlCisJCVJUVVNCQ01EVXAocEFkKTsKKwl9CisJcmV0dXJuKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JEZXF1ZXVlQ21kKAorCUlOCVBDbWRRCQljbWRxLAorCU9VVAlQQ21kUUVsbXQJKnBjbWRxZWxtdCkKK3sKKwkqcGNtZHFlbG10ID0gY21kcS0+aGVhZDsKKworCWlmICgqcGNtZHFlbG10ICE9IE5VTEwpCisJeworCQljbWRxLT5oZWFkID0gY21kcS0+aGVhZC0+bmV4dDsKKwkJY21kcS0+c2l6ZS0tOworCQlpZiAoY21kcS0+c2l6ZSA9PSAwKQorCQkJY21kcS0+dGFpbCA9IE5VTEw7CisJfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgdXNiX2NvbnRyb2xfbXNnIC0gQnVpbGRzIGEgY29udHJvbCB1cmIsIHNlbmRzIGl0IG9mZiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24KKwkgIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworCSAgQHBpcGU6IGVuZHBvaW50ICJwaXBlIiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCisJICBAcmVxdWVzdDogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZQorCSAgQHJlcXVlc3R0eXBlOiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUKKwkgIEB2YWx1ZTogVVNCIG1lc3NhZ2UgdmFsdWUKKwkgIEBpbmRleDogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWUKKwkgIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQKKwkgIEBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZAorCSAgQHRpbWVvdXQ6IHRpbWUgaW4gamlmZmllcyB0byB3YWl0IGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSBiZWZvcmUKKwkJCSAgdGltaW5nIG91dCAoaWYgMCB0aGUgd2FpdCBpcyBmb3JldmVyKQorCSAgQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorCisJICBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2ltcGxlIGNvbnRyb2wgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBlbmRwb2ludAorCSAgYW5kIHdhaXRzIGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSwgb3IgdGltZW91dC4KKwkgIElmIHN1Y2Nlc3NmdWwsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCwgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorCisJIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LCBsaWtlIGEKKwkgIGJvdHRvbSBoYWxmIGhhbmRsZXIuCUlmIHlvdSBuZWVkIGFuIGFzeW5jaHJvbm91cyBtZXNzYWdlLCBvciBuZWVkIHRvIHNlbmQKKwkgIGEgbWVzc2FnZSBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dCwgdXNlIHVzYl9zdWJtaXRfdXJiKCkKKwkgIElmIGEgdGhyZWFkIGluIHlvdXIgZHJpdmVyIHVzZXMgdGhpcyBjYWxsLCBtYWtlIHN1cmUgeW91ciBkaXNjb25uZWN0KCkKKwkgIG1ldGhvZCBjYW4gd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuICBTaW5jZSB5b3UgZG9uJ3QgaGF2ZSBhIGhhbmRsZSBvbgorCSAgdGhlIFVSQiB1c2VkLCB5b3UgY2FuJ3QgY2FuY2VsIHRoZSByZXF1ZXN0LgorCisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTICAgIFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUlOVDMyCQkJVHJhbnNmZXJGbGFncywKKwlJTglVQ0hBUgkJCVJlcXVlc3RUeXBlLAorCUlOCVVDSEFSCQkJUmVxdWVzdCwKKwlJTglVU0hPUlQJCQlWYWx1ZSwKKwlJTglVU0hPUlQJCQlJbmRleCwKKwlJTglQVk9JRAkJCVRyYW5zZmVyQnVmZmVyLAorCUlOCVVJTlQzMgkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoKQoreworCWludAkJCQlyZXQ7CisJUE9TX0NPT0tJRQkJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJkZXZpY2UgZGlzY29ubmVjdGVkXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisJZWxzZSBpZiAoaW5faW50ZXJydXB0KCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJpbl9pbnRlcnJ1cHQsIFJUVVNCX1ZlbmRvclJlcXVlc3QgUmVxdWVzdCUwMnggVmFsdWUlMDR4IE9mZnNldCUwNHhcbiIsUmVxdWVzdCxWYWx1ZSxJbmRleCkpOworCisJCXJldHVybiAtMTsKKwl9CisJZWxzZQorCXsKKyNkZWZpbmUgTUFYX1JFVFJZX0NPVU5UICAxMAorCisJCWludCByZXRyeUNvdW50ID0gMDsKKwkJdm9pZAkqdG1wQnVmID0gVHJhbnNmZXJCdWZmZXI7CisKKwkJLy8gQWNxdWlyZSBDb250cm9sIHRva2VuCisjaWZkZWYgSU5GX0FNQVpPTl9TRQorCQlyZXQgPSBkb3duX2ludGVycnVwdGlibGUoJihwQWQtPlVzYlZlbmRvclJlcV9zZW1hcGhvcmUpKTsKKwkJaWYgKHBBZC0+VXNiVmVuZG9yUmVxQnVmKQorCQl7CisJCQlBU1NFUlQoVHJhbnNmZXJCdWZmZXJMZW5ndGggPE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7CisKKwkJICAgCXRtcEJ1ZiA9ICh2b2lkICopcEFkLT5Vc2JWZW5kb3JSZXFCdWY7CisJCSAgIAlOZGlzWmVyb01lbW9yeShwQWQtPlVzYlZlbmRvclJlcUJ1ZiwgVHJhbnNmZXJCdWZmZXJMZW5ndGgpOworCisJCSAgIAlpZiAoUmVxdWVzdFR5cGUgPT0gREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCkKKwkJICAgCSBOZGlzTW92ZU1lbW9yeSh0bXBCdWYsIFRyYW5zZmVyQnVmZmVyLCBUcmFuc2ZlckJ1ZmZlckxlbmd0aCk7CisJCX0KKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisJCWRvIHsKKwkJaWYoIFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQpCisJCQlyZXQ9dXNiX2NvbnRyb2xfbXNnKHBPYmotPnBVc2JfRGV2LCB1c2Jfc25kY3RybHBpcGUoIHBPYmotPnBVc2JfRGV2LCAwICksIFJlcXVlc3QsIFJlcXVlc3RUeXBlLCBWYWx1ZSxJbmRleCwgdG1wQnVmLCBUcmFuc2ZlckJ1ZmZlckxlbmd0aCwgQ09OVFJPTF9USU1FT1VUX0pJRkZJRVMpOworCQllbHNlIGlmKFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9JTikKKwkJCXJldD11c2JfY29udHJvbF9tc2cocE9iai0+cFVzYl9EZXYsIHVzYl9yY3ZjdHJscGlwZSggcE9iai0+cFVzYl9EZXYsIDAgKSwgUmVxdWVzdCwgUmVxdWVzdFR5cGUsIFZhbHVlLEluZGV4LCB0bXBCdWYsIFRyYW5zZmVyQnVmZmVyTGVuZ3RoLCBDT05UUk9MX1RJTUVPVVRfSklGRklFUyk7CisJCWVsc2UKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgidmVuZG9yIHJlcXVlc3QgZGlyZWN0aW9uIGlzIGZhaWxlZFxuIikpOworCQkJcmV0ID0gLTE7CisJCX0KKworCQkJcmV0cnlDb3VudCsrOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlwcmludGsoIiNcbiIpOworCQkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCQl9CisJCX0gd2hpbGUoKHJldCA8IDApICYmIChyZXRyeUNvdW50IDwgTUFYX1JFVFJZX0NPVU5UKSk7CisKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisJICAJaWYgKChwQWQtPlVzYlZlbmRvclJlcUJ1ZikgJiYgKFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9JTikpCisJCQlOZGlzTW92ZU1lbW9yeShUcmFuc2ZlckJ1ZmZlciwgdG1wQnVmLCBUcmFuc2ZlckJ1ZmZlckxlbmd0aCk7CisJICAJdXAoJihwQWQtPlVzYlZlbmRvclJlcV9zZW1hcGhvcmUpKTsKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKy8vCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiVVNCVmVuZG9yUmVxdWVzdCBmYWlsZWQgcmV0PSVkIFxuIixyZXQpKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUVVNCX1ZlbmRvclJlcXVlc3QgZmFpbGVkKCVkKSxUeEZsYWdzPTB4JXgsIFJlcVR5cGU9JXMsIFJlcT0weCV4LCBJbmRleD0weCV4XG4iLAorCQkJCQkJcmV0LCBUcmFuc2ZlckZsYWdzLCAoUmVxdWVzdFR5cGUgPT0gREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCA/ICJPVVQiIDogIklOIiksIFJlcXVlc3QsIEluZGV4KSk7CisJCQlpZiAoUmVxdWVzdCA9PSAweDIpCisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiXHRSZXF1ZXN0IFZhbHVlPTB4JTA0eCFcbiIsIFZhbHVlKSk7CisKKwkJCWlmICgoVHJhbnNmZXJCdWZmZXIhPSBOVUxMKSAmJiAoVHJhbnNmZXJCdWZmZXJMZW5ndGggPiAwKSkKKwkJCQloZXhfZHVtcCgiRmFpbGVkIFRyYW5zZmVyQnVmZmVyIHZhbHVlIiwgVHJhbnNmZXJCdWZmZXIsIFRyYW5zZmVyQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkgIENyZWF0ZXMgYW4gSVJQIHRvIHN1Ym1pdGUgYW4gSU9DVExfSU5URVJOQUxfVVNCX1JFU0VUX1BPUlQKKwkgIHN5bmNocm9ub3VzbHkuIENhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJ1bm5pbmcgYXQKKwkgIFBBU1NJVkUgTEVWRUwuCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JfUmVzZXREZXZpY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJTlRTVEFUVVMJCVN0YXR1cyA9IFRSVUU7CisKKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiLS0tPlVTQl9SZXNldERldmljZVxuIikpOworCS8vUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpOworCXJldHVybiBTdGF0dXM7Cit9CisKK1ZPSUQgQ01ESGFuZGxlcigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQQ21kUUVsbXQJCWNtZHFlbG10OworCVBVQ0hBUgkJCXBEYXRhOworCU5ESVNfU1RBVFVTCQlOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKy8vCVVMT05HCQkJTm93ID0gMDsKKwlOVFNUQVRVUwkJbnRTdGF0dXM7CisvLwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJd2hpbGUgKHBBZC0+Q21kUS5zaXplID4gMCkKKwl7CisJCU5kaXNTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCQlSVFVTQkRlcXVldWVDbWQoJnBBZC0+Q21kUSwgJmNtZHFlbG10KTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisKKwkJaWYgKGNtZHFlbG10ID09IE5VTEwpCisJCQlicmVhazsKKworCQlwRGF0YSA9IGNtZHFlbG10LT5idWZmZXI7CisKKwkJaWYoIShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkgfHwgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSkKKwkJeworCQkJc3dpdGNoIChjbWRxZWxtdC0+Y29tbWFuZCkKKwkJCXsKKwkJCQljYXNlIENNRFRIUkVBRF9DSEVDS19HUElPOgorCQkJCQl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCQlVSU5UMzIgZGF0YTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNpZmRlZiBSQUxJTktfQVRFCisgICAgICAgCQkJCQlpZihBVEVfT04ocEFkKSkKKwkJCQkJCXsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCisKKwkJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQl7CisJCQkJCQkJLy8gUmVhZCBHUElPIHBpbjIgYXMgSGFyZHdhcmUgY29udHJvbGxlZCByYWRpbyBzdGF0ZQorCisJCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIoIHBBZCwgR1BJT19DVFJMX0NGRywgJmRhdGEpOworCisJCQkJCQkJaWYgKGRhdGEgJiAweDA0KQorCQkJCQkJCXsKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPSBUUlVFOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlwQWQtPlN0YUNmZy5iSHdSYWRpbyA9IEZBTFNFOworCQkJCQkJCX0KKworCQkJCQkJCWlmKHBBZC0+U3RhQ2ZnLmJSYWRpbyAhPSAocEFkLT5TdGFDZmcuYkh3UmFkaW8gJiYgcEFkLT5TdGFDZmcuYlN3UmFkaW8pKQorCQkJCQkJCXsKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYlJhZGlvID0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKTsKKwkJCQkJCQkJaWYocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpCisJCQkJCQkJCXsKKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCIhISEgUmFkaW8gT24gISEhXG4iKSk7CisKKwkJCQkJCQkJCU1sbWVSYWRpb09uKHBBZCk7CisJCQkJCQkJCQkvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24KKwkJCQkJCQkJCXBBZC0+RXh0cmFJbmZvID0gRVhUUkFfSU5GT19DTEVBUjsKKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlCisJCQkJCQkJCXsKKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCIhISEgUmFkaW8gT2ZmICEhIVxuIikpOworCisJCQkJCQkJCQlNbG1lUmFkaW9PZmYocEFkKTsKKwkJCQkJCQkJCS8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQkJCQkJcEFkLT5FeHRyYUluZm8gPSBIV19SQURJT19PRkY7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQljYXNlIENNRFRIUkVBRF9RS0VSSU9ESUNfRVhFQ1VUOgorCQkJCQl7CisJCQkJCQlTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKE5VTEwsIHBBZCwgTlVMTCwgTlVMTCk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCQljYXNlIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVDoKKwkJCQkJeworCQkJCQkJVUlOVDMyCQlNQUNWYWx1ZTsKKwkJCQkJCVVDSEFSCQlJbmRleDsKKwkJCQkJCWludAkJCXJldD0wOworCQkJCQkJUEhUX1RYX0NPTlRFWFQJcEhUVFhDb250ZXh0OworLy8JCQkJCQlSVE1QX1RYX1JJTkcgKnBUeFJpbmc7CisJCQkJCQl1bnNpZ25lZCBsb25nIElycUZsYWdzOworI2lmZGVmIFJBTElOS19BVEUKKwkJCQkJCVBUWF9DT05URVhUCQlwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQoUmVzZXRQaXBlaWQ9MHglMHgpPT09PlxuIiwgcEFkLT5idWxrUmVzZXRQaXBlaWQpKTsKKwkJCQkJCS8vIEFsbCB0cmFuc2ZlcnMgbXVzdCBiZSBhYm9ydGVkIG9yIGNhbmNlbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZXNldCB0aGUgcGlwZS4KKwkJCQkJCS8vUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworCQkJCQkJLy8gV2FpdCAxMG1zIHRvIGxldCBwcmV2aW91cyBwYWNrZXQgdGhhdCBhcmUgYWxyZWFkeSBpbiBIVyBGSUZPIHRvIGNsZWFyLiBieSBNQVhMRUUgMTItMjUtMjAwNworCQkJCQkJSW5kZXggPSAwOworCQkJCQkJZG8KKwkJCQkJCXsKKwkJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFRYUlhRX1BDTlQsICZNQUNWYWx1ZSk7CisJCQkJCQkJaWYgKChNQUNWYWx1ZSAmIDB4ZjAwMDAwLyoweDgwMDAwMCovKSA9PSAwKQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQlJbmRleCsrOworCQkJCQkJCVJUTVB1c2VjRGVsYXkoMTAwMDApOworCQkJCQkJfXdoaWxlKEluZGV4IDwgMTAwKTsKKwkJCQkJCU1BQ1ZhbHVlID0gMDsKKwkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgVVNCX0RNQV9DRkcsICZNQUNWYWx1ZSk7CisJCQkJCQkvLyBUbyBwcmV2ZW50IFJlYWQgUmVnaXN0ZXIgZXJyb3IsIHdlIDJuZCBjaGVjayB0aGUgdmFsaWRpdHkuCisJCQkJCQlpZiAoKE1BQ1ZhbHVlICYgMHhjMDAwMDApID09IDApCisJCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBVU0JfRE1BX0NGRywgJk1BQ1ZhbHVlKTsKKwkJCQkJCS8vIFRvIHByZXZlbnQgUmVhZCBSZWdpc3RlciBlcnJvciwgd2UgM3JkIGNoZWNrIHRoZSB2YWxpZGl0eS4KKwkJCQkJCWlmICgoTUFDVmFsdWUgJiAweGMwMDAwMCkgPT0gMCkKKwkJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLCAmTUFDVmFsdWUpOworCQkJCQkJTUFDVmFsdWUgfD0gMHg4MDAwMDsKKwkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLCBNQUNWYWx1ZSk7CisKKwkJCQkJCS8vIFdhaXQgMW1zIHRvIHByZXZlbnQgbmV4dCBVUkIgdG8gYnVsa291dCBiZWZvcmUgSFcgcmVzZXQuIGJ5IE1BWExFRSAxMi0yNS0yMDA3CisJCQkJCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCisJCQkJCQlNQUNWYWx1ZSAmPSAofjB4ODAwMDApOworCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVVNCX0RNQV9DRkcsIE1BQ1ZhbHVlKTsKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJcdFNldCAweDJhMCBiaXQxOS4gQ2xlYXIgVVNCIERNQSBUWCBwYXRoXG4iKSk7CisKKwkJCQkJCS8vIFdhaXQgNW1zIHRvIHByZXZlbnQgbmV4dCBVUkIgdG8gYnVsa291dCBiZWZvcmUgSFcgcmVzZXQuIGJ5IE1BWExFRSAxMi0yNS0yMDA3CisJCQkJCQkvL1JUTVB1c2VjRGVsYXkoNTAwMCk7CisKKwkJCQkJCWlmICgocEFkLT5idWxrUmVzZXRQaXBlaWQgJiBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRykgPT0gQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpCisJCQkJCQl7CisJCQkJCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCQkJCQlpZiAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA8IE1HTVRfUklOR19TSVpFIC8qIHBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID09IFRSVUUgKi8pCisJCQkJCQkJeworCQkJCQkJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpOworCQkJCQkJCX0KKwkJCQkJCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisKKwkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiXHRUWCBNR01UIFJFQ09WRVIgRG9uZSFcbiIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSk7CisJCQkJCQkJLy9OZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSk7CisJCQkJCQkJUlRNUF9JTlRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0sIElycUZsYWdzKTsKKwkJCQkJCQlpZiAoIHBBZC0+QnVsa091dFBlbmRpbmdbcEFkLT5idWxrUmVzZXRQaXBlaWRdID09IEZBTFNFKQorCQkJCQkJCXsKKwkJCQkJCQkJcEFkLT5CdWxrT3V0UGVuZGluZ1twQWQtPmJ1bGtSZXNldFBpcGVpZF0gPSBUUlVFOworCQkJCQkJCQlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOworCQkJCQkJCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSA9IDE7CisKKwkJCQkJCQkJLy8gbm8gbWF0dGVyIHdoYXQsIGNsZWFuIHRoZSBmbGFnCisJCQkJCQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisKKwkJCQkJCQkJLy9OZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSk7CisJCQkJCQkJCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0sIElycUZsYWdzKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFJBTElOS19BVEUKKwkJCQkJCQkJaWYoQVRFX09OKHBBZCkpCisJCQkJCQkJICAgIHsKKwkJCQkJCQkJCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJCQkJCQkJCQkvLworCQkJCQkJCQkJLy8gSWYgZHJpdmVyIGlzIHN0aWxsIGluIEFURSBUWEZSQU1FIG1vZGUsCisJCQkJCQkJCQkvLyBrZWVwIG9uIHRyYW5zbWl0dGluZyBBVEUgZnJhbWVzLgorCQkJCQkJCQkJLy8KKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJwQWQtPmF0ZS5Nb2RlID09ICVkXG5wQWQtPkNvbnRpbkJ1bGtPdXQgPT0gJWRcbnBBZC0+QnVsa091dFJlbWFpbmVkID09ICVkXG4iLCBwQWQtPmF0ZS5Nb2RlLCBwQWQtPkNvbnRpbkJ1bGtPdXQsIGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkpKTsKKwkJCQkJCQkJCWlmKChwQWQtPmF0ZS5Nb2RlID09IEFURV9UWEZSQU1FKSAmJiAoKHBBZC0+Q29udGluQnVsa091dCA9PSBUUlVFKSB8fCAoYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSA+IDApKSkKKwkJCQkJCQkJICAgIHsKKwkJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQWZ0ZXIgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBjb250aW51ZSB0byBidWxrIG91dCBmcmFtZXMgIVxuIikpOworCisJCQkJCQkJCQkJLy8gSW5pdCBUeCBjb250ZXh0IGRlc2NyaXB0b3IKKwkJCQkJCQkJCQlSVFVTQkluaXRUeERlc2MocEFkLCBwTnVsbENvbnRleHQsIDAvKiBwQWQtPmJ1bGtSZXNldFBpcGVpZCAqLywgKHVzYl9jb21wbGV0ZV90KUFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUpOworCisJCQkJCQkJCQkJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocE51bGxDb250ZXh0LT5wVXJiKSkhPTApCisJCQkJCQkJCQkJeworCQkJCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldDogU3VibWl0IFR4IFVSQiBmYWlsZWQgJWRcbiIsIHJldCkpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXBBZC0+QnVsa091dFJlcSsrOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCQkJCQkJeworCQkJCQkJCQlSVFVTQkluaXRIVFR4RGVzYyhwQWQsIHBIVFRYQ29udGV4dCwgcEFkLT5idWxrUmVzZXRQaXBlaWQsIHBIVFRYQ29udGV4dC0+QnVsa091dFNpemUsICh1c2JfY29tcGxldGVfdClSVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUpOworCisJCQkJCQkJCWlmKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBIVFRYQ29udGV4dC0+cFVyYikpIT0wKQorCQkJCQkJCQl7CisJCQkJCQkJCQkJUlRNUF9JTlRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0sIElycUZsYWdzKTsKKwkJCQkJCQkJCXBBZC0+QnVsa091dFBlbmRpbmdbcEFkLT5idWxrUmVzZXRQaXBlaWRdID0gRkFMU0U7CisJCQkJCQkJCQlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJCQkJCQkJCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSA9IDA7CisJCQkJCQkJCQkJUlRNUF9JTlRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgSXJxRmxhZ3MpOworCisJCQkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOiBTdWJtaXQgVHggVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgSXJxRmxhZ3MpOworCQkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIlx0Q01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOiBUeENvbnRleHRbJWRdOkNXUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCwgcGVuZGluZz0lZCFcbiIsCisJCQkJCQkJCQkJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sCisJCQkJCQkJCQkJCQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCwgcEFkLT5CdWxrT3V0UGVuZGluZ1twQWQtPmJ1bGtSZXNldFBpcGVpZF0pKTsKKwkJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJcdFx0QnVsa091dCBSZXE9MHglbHgsIENvbXBsZXRlPTB4JWx4LCBPdGhlcj0weCVseFxuIiwKKwkJCQkJCQkJCQkJCQkJCXBBZC0+QnVsa091dFJlcSwgcEFkLT5CdWxrT3V0Q29tcGxldGUsIHBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIpKTsKKwkJCQkJCQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisJCQkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIlx0Q01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOiBTdWJtaXQgVHggREFUQSBVUkIgZm9yIGZhaWxlZCBCdWxrUmVxKDB4JWx4KSBEb25lLCBzdGF0dXM9JWQhXG4iLCBwQWQtPmJ1bGtSZXNldFJlcVtwQWQtPmJ1bGtSZXNldFBpcGVpZF0sIHBIVFRYQ29udGV4dC0+cFVyYi0+c3RhdHVzKSk7CisKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQkvL05kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdKTsKKwkJCQkJCQkJLy9SVE1QX0lOVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisKKwkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkNtZFRocmVhZCA6IFRYIERBVEEgUkVDT1ZFUiBGQUlMIGZvciBCdWxrUmVxKDB4JWx4KSBiZWNhdXNlIEJ1bGtPdXRQZW5kaW5nWyVkXSBpcyBUUlVFIVxuIiwgcEFkLT5idWxrUmVzZXRSZXFbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBwQWQtPmJ1bGtSZXNldFBpcGVpZCkpOworCQkJCQkJCQlpZiAocEFkLT5idWxrUmVzZXRQaXBlaWQgPT0gMCkKKwkJCQkJCQkJeworCQkJCQkJCQkJVUNIQVIJcGVuZGluZ0NvbnRleHQgPSAwOworCQkJCQkJCQkJUEhUX1RYX0NPTlRFWFQgcEhUVFhDb250ZXh0ID0gKFBIVF9UWF9DT05URVhUKSgmcEFkLT5UeENvbnRleHRbcEFkLT5idWxrUmVzZXRQaXBlaWQgXSk7CisJCQkJCQkJCQlQVFhfQ09OVEVYVCBwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpKHBBZC0+TWdtdFJpbmcuQ2VsbFtwQWQtPk1nbXRSaW5nLlR4RG1hSWR4XS5BbGxvY1ZhKTsKKwkJCQkJCQkJCVBUWF9DT05URVhUIHBOVUxMQ29udGV4dCA9IChQVFhfQ09OVEVYVCkoJnBBZC0+UHNQb2xsQ29udGV4dCk7CisJCQkJCQkJCQlQVFhfQ09OVEVYVCBwUHNQb2xsQ29udGV4dCA9IChQVFhfQ09OVEVYVCkoJnBBZC0+TnVsbENvbnRleHQpOworCisJCQkJCQkJCQlpZiAocEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nKQorCQkJCQkJCQkJCXBlbmRpbmdDb250ZXh0IHw9IDE7CisJCQkJCQkJCQllbHNlIGlmIChwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcpCisJCQkJCQkJCQkJcGVuZGluZ0NvbnRleHQgfD0gMjsKKwkJCQkJCQkJCWVsc2UgaWYgKHBOVUxMQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQkJCQkJCQlwZW5kaW5nQ29udGV4dCB8PSA0OworCQkJCQkJCQkJZWxzZSBpZiAocFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcpCisJCQkJCQkJCQkJcGVuZGluZ0NvbnRleHQgfD0gODsKKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCQlwZW5kaW5nQ29udGV4dCA9IDA7CisKKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJcdFRYIE9jY3VwaWVkIGJ5ICVkIVxuIiwgcGVuZGluZ0NvbnRleHQpKTsKKwkJCQkJCQkJfQorCisJCQkJCQkJLy8gbm8gbWF0dGVyIHdoYXQsIGNsZWFuIHRoZSBmbGFnCisJCQkJCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKworCQkJCQkJCQlSVE1QX0lOVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisKKwkJCQkJCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgcEFkLT5idWxrUmVzZXRQaXBlaWQpKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCQkJCQkJCS8vUlRVU0JLaWNrQnVsa091dChwQWQpOworCQkJCQkJfQorCisJCQkJCX0KKwkJCQkJLyoKKwkJCQkJCS8vIERvbid0IGNhbmNlbCBCVUxLSU4uCisJCQkJCQl3aGlsZSAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKSAmJgorCQkJCQkJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQl7CisJCQkJCQkJaWYgKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKQorCQkJCQkJCXsKKwkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGtJbiBJUlAgUGVuZGluZyEhY2FuY2VsIGl0IVxuIikpOworCQkJCQkJCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAocEFkKTsKKwkJCQkJCQl9CisJCQkJCQkJUlRNUHVzZWNEZWxheSgxMDAwMDApOworCQkJCQkJfQorCisJCQkJCQlpZiAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPT0gMCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpKQorCQkJCQkJeworCQkJCQkJCVVDSEFSCWk7CisJCQkJCQkJUlRVU0JSeFBhY2tldChwQWQpOworCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4ID0gMDsJLy8gTmV4dCBSeCBSZWFkIGluZGV4CisJCQkJCQkJcEFkLT5OZXh0UnhCdWxrSW5JbmRleAkJPSAwOwkvLyBSeCBCdWxrIHBvaW50ZXIKKwkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgKFJYX1JJTkdfU0laRSk7IGkrKykKKwkJCQkJCQl7CisJCQkJCQkJCVBSWF9DT05URVhUICBwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisKKwkJCQkJCQkJcFJ4Q29udGV4dC0+cEFkCT0gcEFkOworCQkJCQkJCQlwUnhDb250ZXh0LT5JblVzZQkJPSBGQUxTRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZwk9IEZBTFNFOworCQkJCQkJCQlwUnhDb250ZXh0LT5SZWFkYWJsZQk9IEZBTFNFOworCQkJCQkJCQlwUnhDb250ZXh0LT5SZW9yZGVySW5Vc2UgPSBGQUxTRTsKKworCQkJCQkJCX0KKwkJCQkJCQlSVFVTQkJ1bGtSZWNlaXZlKHBBZCk7CisJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJUVVNCQnVsa1JlY2VpdmVcbiIpKTsKKwkJCQkJCX0qLworCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUPD09PVxuIikpOworICAgIAkgICAJCQlicmVhazsKKworCQkJCWNhc2UgQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU46CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfUkVTRVRfQlVMS19JTiA9PT0gPlxuIikpOworCisJCQkJCS8vIEFsbCB0cmFuc2ZlcnMgbXVzdCBiZSBhYm9ydGVkIG9yIGNhbmNlbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZXNldCB0aGUgcGlwZS4KKwkJCQkJeworCQkJCQkJVUlOVDMyCQlNQUNWYWx1ZTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFJBTElOS19BVEUKKwkJCQkJCWlmIChBVEVfT04ocEFkKSkKKwkJCQkJCXsKKwkJCQkJCQlpZigocEFkLT5QZW5kaW5nUnggPiAwKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQkJeworCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiQVRFIDogQnVsa0luIElSUCBQZW5kaW5nISEhXG4iKSk7CisJCQkJCQkJCUFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAocEFkKTsKKwkJCQkJCQkJUlRNUHVzZWNEZWxheSgxMDAwMDApOworCQkJCQkJCQlwQWQtPlBlbmRpbmdSeCA9IDA7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJZWxzZQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJCQkJeworCQkJCQkJLy93aGlsZSAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQlpZigocEFkLT5QZW5kaW5nUnggPiAwKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQl7CisJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGtJbiBJUlAgUGVuZGluZyEhIVxuIikpOworCQkJCQkJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOworCQkJCQkJCVJUTVB1c2VjRGVsYXkoMTAwMDAwKTsKKwkJCQkJCQlwQWQtPlBlbmRpbmdSeCA9IDA7CisJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFdhaXQgMTBtcyBiZWZvcmUgcmVhZGluZyByZWdpc3Rlci4KKwkJCQkJCVJUTVB1c2VjRGVsYXkoMTAwMDApOworCQkJCQkJbnRTdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IwLCAmTUFDVmFsdWUpOworCisJCQkJCQlpZiAoKE5UX1NVQ0NFU1MobnRTdGF0dXMpID09IFRSVUUpICYmCisJCQkJCQkJKCEoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKKwkJCQkJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpKQorCQkJCQkJeworCQkJCQkJCVVDSEFSCWk7CisKKwkJCQkJCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKKwkJCQkJCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb24gPSBwQWQtPlJ4Q29udGV4dFtwQWQtPk5leHRSeEJ1bGtJbkluZGV4XS5CdWxrSW5PZmZzZXQ7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQlVMS19JTl9SRVNFVDogTkJJSWR4PTB4JXgsTkJJUklkeD0weCV4LCBCSVJQb3M9MHglbHguIEJJUmVxPXglbHgsIEJJQ29tcGxldGU9MHglbHgsIEJJQ0ZhaWwweCVseFxuIiwKKwkJCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXgsICBwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCwgcEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiwgcEFkLT5CdWxrSW5SZXEsIHBBZC0+QnVsa0luQ29tcGxldGUsIHBBZC0+QnVsa0luQ29tcGxldGVGYWlsKSk7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKQorCQkJCQkJCXsKKyAJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlx0UnhDb250ZXh0WyVkXTogSVJQUGVuZGluZz0lZCwgSW5Vc2U9JWQsIFJlYWRhYmxlPSVkIVxuIgorCQkJCQkJCQkJLCBpLCBwQWQtPlJ4Q29udGV4dFtpXS5JUlBQZW5kaW5nLCBwQWQtPlJ4Q29udGV4dFtpXS5JblVzZSwgcEFkLT5SeENvbnRleHRbaV0uUmVhZGFibGUpKTsKKwkJCQkJCQl9CisgCQkJCQkJCS8qCisKKwkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKSk7CisKKwkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCA9IDA7CS8vIE5leHQgUnggUmVhZCBpbmRleAorCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXgJCT0gMDsJLy8gUnggQnVsayBwb2ludGVyCisJCQkJCQkJZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJCQkJCQkJeworCQkJCQkJCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCisJCQkJCQkJCXBSeENvbnRleHQtPnBBZAk9IHBBZDsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+SW5Vc2UJCT0gRkFMU0U7CisJCQkJCQkJCXBSeENvbnRleHQtPklSUFBlbmRpbmcJPSBGQUxTRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+UmVhZGFibGUJPSBGQUxTRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+UmVvcmRlckluVXNlID0gRkFMU0U7CisKKwkJCQkJCQl9Ki8KKwkJCQkJCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCk7CisJCQkJCQkJZm9yIChpID0gMDsgaSA8IHBBZC0+Q29tbW9uQ2ZnLk51bU9mQnVsa0luSVJQOyBpKyspCisJCQkJCQkJeworCQkJCQkJCQkvL1JUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwkJCQkJCQkJUFJYX0NPTlRFWFQJCXBSeENvbnRleHQ7CisJCQkJCQkJCVBVUkIJCQlwVXJiOworCQkJCQkJCQlpbnQJCQkJcmV0ID0gMDsKKwkJCQkJCQkJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCisJCQkJCQkJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQkJCQkJCQlwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtwQWQtPk5leHRSeEJ1bGtJbkluZGV4XSk7CisJCQkJCQkJCWlmICgocEFkLT5QZW5kaW5nUnggPiAwKSB8fCAocFJ4Q29udGV4dC0+UmVhZGFibGUgPT0gVFJVRSkgfHwgKHBSeENvbnRleHQtPkluVXNlID09IFRSVUUpKQorCQkJCQkJCQl7CisJCQkJCQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQkJcFJ4Q29udGV4dC0+SW5Vc2UgPSBUUlVFOworCQkJCQkJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwkJCQkJCQkJcEFkLT5QZW5kaW5nUngrKzsKKwkJCQkJCQkJcEFkLT5CdWxrSW5SZXErKzsKKwkJCQkJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKworCQkJCQkJCQkvLyBJbml0IFJ4IGNvbnRleHQgZGVzY3JpcHRvcgorCQkJCQkJCQlSVFVTQkluaXRSeERlc2MocEFkLCBwUnhDb250ZXh0KTsKKwkJCQkJCQkJcFVyYiA9IHBSeENvbnRleHQtPnBVcmI7CisJCQkJCQkJCWlmICgocmV0ID0gUlRVU0JfU1VCTUlUX1VSQihwVXJiKSkhPTApCisJCQkJCQkJCXsJLy8gZmFpbAorCisJCQkJCQkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJCQkJCQkJCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCQkJCQkJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQkJCQkJCQlwQWQtPlBlbmRpbmdSeC0tOworCQkJCQkJCQkJcEFkLT5CdWxrSW5SZXEtLTsKKwkJCQkJCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJDTURUSFJFQURfUkVTRVRfQlVMS19JTjogU3VibWl0IFJ4IFVSQiBmYWlsZWQoJWQpLCBzdGF0dXM9JWRcbiIsIHJldCwgcFVyYi0+c3RhdHVzKSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZQorCQkJCQkJCQl7CS8vIHN1Y2Nlc3MKKwkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDTURUSFJFQURfUkVTRVRfQlVMS19JTjogU3VibWl0IFJ4IFVSQiBEb25lLCBzdGF0dXM9JWQhXG4iLCBwVXJiLT5zdGF0dXMpKTsKKwkJCQkJCQkJCUFTU0VSVCgocFJ4Q29udGV4dC0+SW5Vc2UgPT0gcFJ4Q29udGV4dC0+SVJQUGVuZGluZykpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJLy8gQ2FyZCBtdXN0IGJlIHJlbW92ZWQKKwkJCQkJCQlpZiAoTlRfU1VDQ0VTUyhudFN0YXR1cykgIT0gVFJVRSkKKwkJCQkJCQl7CisJCQkJCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCk7CisJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJDTURUSFJFQURfUkVTRVRfQlVMS19JTjogUmVhZCBSZWdpc3RlciBGYWlsZWQhQ2FyZCBtdXN0IGJlIHJlbW92ZWQhIVxuXG4iKSk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJDTURUSFJFQURfUkVTRVRfQlVMS19JTjogQ2Fubm90IGRvIGJ1bGsgaW4gYmVjYXVzZSBmbGFncygweCVseCkgb24gIVxuIiwgcEFkLT5GbGFncykpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCX0KKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkNtZFRocmVhZCA6IENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOIDw9PT1cbiIpKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEOgorCQkJCQl7CisJCQkJCQlSVF9TRVRfQVNJQ19XQ0lECVNldEFzaWNXY2lkOworCQkJCQkJVVNIT1JUCQlvZmZzZXQ7CisJCQkJCQlVSU5UMzIJCU1BQ1ZhbHVlLCBNQUNSVmFsdWUgPSAwOworCQkJCQkJU2V0QXNpY1djaWQgPSAqKChQUlRfU0VUX0FTSUNfV0NJRCkocERhdGEpKTsKKworCQkJCQkJaWYgKFNldEFzaWNXY2lkLldDSUQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCQkJCQkJcmV0dXJuOworCisJCQkJCQlvZmZzZXQgPSBNQUNfV0NJRF9CQVNFICsgKChVQ0hBUilTZXRBc2ljV2NpZC5XQ0lEKSpIV19XQ0lEX0VOVFJZX1NJWkU7CisKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfU0VUX0FTSUNfV0NJRCA6IFdDSUQgPSAlbGQsIFNldFRpZCAgPSAlbHgsIERlbGV0ZVRpZCA9ICVseC5cbiIsIFNldEFzaWNXY2lkLldDSUQsIFNldEFzaWNXY2lkLlNldFRpZCwgU2V0QXNpY1djaWQuRGVsZXRlVGlkKSk7CisJCQkJCQlNQUNWYWx1ZSA9IChwQWQtPk1hY1RhYi5Db250ZW50W1NldEFzaWNXY2lkLldDSURdLkFkZHJbM108PDI0KSsocEFkLT5NYWNUYWIuQ29udGVudFtTZXRBc2ljV2NpZC5XQ0lEXS5BZGRyWzJdPDwxNikrKHBBZC0+TWFjVGFiLkNvbnRlbnRbU2V0QXNpY1djaWQuV0NJRF0uQWRkclsxXTw8OCkrKHBBZC0+TWFjVGFiLkNvbnRlbnRbU2V0QXNpY1djaWQuV0NJRF0uQWRkclswXSk7CisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiMS1NQUNWYWx1ZT0gJXgsXG4iLCBNQUNWYWx1ZSkpOworCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBNQUNWYWx1ZSk7CisJCQkJCQkvLyBSZWFkIGJpdG1hc2sKKwkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0KzQsICZNQUNSVmFsdWUpOworCQkJCQkJaWYgKCBTZXRBc2ljV2NpZC5EZWxldGVUaWQgIT0gMHhmZmZmZmZmZikKKwkJCQkJCQlNQUNSVmFsdWUgJj0gKH5TZXRBc2ljV2NpZC5EZWxldGVUaWQpOworCQkJCQkJaWYgKFNldEFzaWNXY2lkLlNldFRpZCAhPSAweGZmZmZmZmZmKQorCQkJCQkJCU1BQ1JWYWx1ZSB8PSAoU2V0QXNpY1djaWQuU2V0VGlkKTsKKwkJCQkJCU1BQ1JWYWx1ZSAmPSAweGZmZmYwMDAwOworCisJCQkJCQlNQUNWYWx1ZSA9IChwQWQtPk1hY1RhYi5Db250ZW50W1NldEFzaWNXY2lkLldDSURdLkFkZHJbNV08PDgpK3BBZC0+TWFjVGFiLkNvbnRlbnRbU2V0QXNpY1djaWQuV0NJRF0uQWRkcls0XTsKKwkJCQkJCU1BQ1ZhbHVlIHw9IE1BQ1JWYWx1ZTsKKwkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCs0LCBNQUNWYWx1ZSk7CisKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIyLU1BQ1ZhbHVlPSAleCxcbiIsIE1BQ1ZhbHVlKSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEX0NJUEhFUjoKKwkJCQkJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJUlRfU0VUX0FTSUNfV0NJRF9BVFRSSQlTZXRBc2ljV2NpZEF0dHJpOworCQkJCQkJVVNIT1JUCQlvZmZzZXQ7CisJCQkJCQlVSU5UMzIJCU1BQ1JWYWx1ZSA9IDA7CisJCQkJCQlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOworCQkJCQkJU2V0QXNpY1djaWRBdHRyaSA9ICooKFBSVF9TRVRfQVNJQ19XQ0lEX0FUVFJJKShwRGF0YSkpOworCisJCQkJCQlpZiAoU2V0QXNpY1djaWRBdHRyaS5XQ0lEID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQkJCQkJCXJldHVybjsKKworCQkJCQkJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoKFVDSEFSKVNldEFzaWNXY2lkQXR0cmkuV0NJRCkqSFdfV0NJRF9BVFRSSV9TSVpFOworCisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQ21kIDogQ01EVEhSRUFEX1NFVF9BU0lDX1dDSURfQ0lQSEVSIDogV0NJRCA9ICVsZCwgQ2lwaGVyID0gJWx4LlxuIiwgU2V0QXNpY1djaWRBdHRyaS5XQ0lELCBTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcikpOworCQkJCQkJLy8gUmVhZCBiaXRtYXNrCisJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwgJk1BQ1JWYWx1ZSk7CisJCQkJCQlNQUNSVmFsdWUgPSAwOworCQkJCQkJTUFDUlZhbHVlIHw9ICgoKFVDSEFSKVNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyKSA8PCAxKTsKKworCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBNQUNSVmFsdWUpOworCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjItb2Zmc2V0ID0gJXggLCBNQUNWYWx1ZT0gJXgsXG4iLCBvZmZzZXQsIE1BQ1JWYWx1ZSkpOworCisJCQkJCQlvZmZzZXQgPSBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFICsgKChVQ0hBUilTZXRBc2ljV2NpZEF0dHJpLldDSUQpKkhXX0lWRUlWX0VOVFJZX1NJWkU7CisJCQkJCQlNQUNSVmFsdWUgPSAwOworCQkJCQkJaWYgKCAoU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIgPD0gQ0lQSEVSX1dFUDEyOCkpCisJCQkJCQkJTUFDUlZhbHVlIHw9ICggcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkIDw8IDMwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlNQUNSVmFsdWUgfD0gKDB4MjAwMDAwMDApOworCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBNQUNSVmFsdWUpOworCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjItb2Zmc2V0ID0gJXggLCBNQUNWYWx1ZT0gJXgsXG4iLCBvZmZzZXQsIE1BQ1JWYWx1ZSkpOworCisJCQkJCQkvLworCQkJCQkJLy8gVXBkYXRlIGNpcGhlciBhbGdvcml0aG0uIFdTVEEgYWx3YXlzIHVzZSBCU1MwCisJCQkJCQkvLworCQkJCQkJLy8gZm9yIGFkaG9jIG1vZGUgb25seSAsYmVjYXVzZSB3ZXAgc3RhdHVzIHNsb3cgdGhhbiBhZGQga2V5LCB3aGVuIHVzZSB6ZXJvIGNvbmZpZworCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DICkKKwkJCQkJCXsKKwkJCQkJCQlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRTsKKworCQkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCAmTUFDUlZhbHVlKTsKKwkJCQkJCQlNQUNSVmFsdWUgJj0gKH4weGUpOworCQkJCQkJCU1BQ1JWYWx1ZSB8PSAoKChVQ0hBUilTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcikgPDwgMSk7CisKKwkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsIE1BQ1JWYWx1ZSk7CisKKwkJCQkJCQkvL1VwZGF0ZSBncm91cCBrZXkgY2lwaGVyLCxiZWNhdXNlIHdlcCBzdGF0dXMgc2xvdyB0aGFuIGFkZCBrZXksIHdoZW4gdXNlIHplcm8gY29uZmlnCisJCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSs0KigwLzIpLCAmY3NyMS53b3JkKTsKKworCQkJCQkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcjsKKwkJCQkJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gU2V0QXNpY1djaWRBdHRyaS5DaXBoZXI7CisKKwkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSs0KigwLzIpLCBjc3IxLndvcmQpOworCQkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQl9CisJCQkJCWJyZWFrOworCisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCAtLT4KKwkJCQljYXNlIFJUX0NNRF9TRVRfS0VZX1RBQkxFOiAvL0dlbmVyYWwgY2FsbCBmb3IgQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnkoKQorCQkJCXsKKwkJCQkJUlRfQUREX1BBSVJXSVNFX0tFWV9FTlRSWSBLZXlJbmZvOworCQkJCQlLZXlJbmZvID0gKigoUFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlkpKHBEYXRhKSk7CisJCQkJCUFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KHBBZCwKKwkJCQkJCQkJCQkJS2V5SW5mby5NYWNBZGRyLAorCQkJCQkJCQkJCQkoVUNIQVIpS2V5SW5mby5NYWNUYWJNYXRjaFdDSUQsCisJCQkJCQkJCQkJCSZLZXlJbmZvLkNpcGhlcktleSk7CisJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIFJUX0NNRF9TRVRfUlhfV0NJRF9UQUJMRTogLy9HZW5lcmFsIGNhbGwgZm9yIFJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkoKQorCQkJCXsKKwkJCQkJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnk7CisJCQkJCVVDSEFSIEtleUlkeDsKKwkJCQkJVUNIQVIgQ2lwaGVyQWxnOworCQkJCQlVQ0hBUiBBcElkeDsKKworCQkJCQlwRW50cnkgPSAoUE1BQ19UQUJMRV9FTlRSWSkocERhdGEpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQkJCUtleUlkeCA9IDA7CisJCQkJCUNpcGhlckFsZyA9IHBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnOworCQkJCQlBcElkeCA9IEJTUzA7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeSgKKwkJCQkJCQkJCQkgIHBBZCwKKwkJCQkJCQkJCQkgIEFwSWR4LAorCQkJCQkJCQkJCSAgS2V5SWR4LAorCQkJCQkJCQkJCSAgQ2lwaGVyQWxnLAorCQkJCQkJCQkJCSAgcEVudHJ5KTsKKwkJCQkJfQorCQkJCQkJYnJlYWs7CisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCA8LS0KKworCQkJCWNhc2UgQ01EVEhSRUFEX1NFVF9DTElFTlRfTUFDX0VOVFJZOgorCQkJCQl7CisJCQkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQkJCXBFbnRyeSA9IChNQUNfVEFCTEVfRU5UUlkgKilwRGF0YTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJeworCQkJCQkJCUFzaWNSZW1vdmVQYWlyd2lzZUtleUVudHJ5KHBBZCwgcEVudHJ5LT5hcGlkeCwgKFVDSEFSKXBFbnRyeS0+QWlkKTsKKwkJCQkJCQlpZiAoKHBFbnRyeS0+QXV0aE1vZGUgPD0gTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCkgJiYgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpKQorCQkJCQkJCXsKKwkJCQkJCQkJVUlOVDMyIHVJViA9IDA7CisJCQkJCQkJCVBVQ0hBUiAgcHRyOworCisJCQkJCQkJCXB0ciA9IChQVUNIQVIpICZ1SVY7CisJCQkJCQkJCSoocHRyICsgMykgPSAocEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkIDw8IDYpOworCQkJCQkJCQlBc2ljVXBkYXRlV0NJRElWRUlWKHBBZCwgcEVudHJ5LT5BaWQsIHVJViwgMCk7CisJCQkJCQkJCUFzaWNVcGRhdGVXQ0lEQXR0cmlidXRlKHBBZCwgcEVudHJ5LT5BaWQsIEJTUzAsIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnLCBGQUxTRSk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgaWYgKHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJCQkJCQl7CisJCQkJCQkJCVVJTlQzMiB1SVYgPSAwOworCQkJCQkJCQlQVUNIQVIgIHB0cjsKKworCQkJCQkJCQlwdHIgPSAoUFVDSEFSKSAmdUlWOworCQkJCQkJCQkqKHB0ciArIDMpID0gKHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA8PCA2KTsKKwkJCQkJCQkJQXNpY1VwZGF0ZVdDSURJVkVJVihwQWQsIHBFbnRyeS0+QWlkLCB1SVYsIDApOworCQkJCQkJCQlBc2ljVXBkYXRlV0NJREF0dHJpYnV0ZShwQWQsIHBFbnRyeS0+QWlkLCBCU1MwLCBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywgRkFMU0UpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQkvLworCQkJCQkJCQkvLyBPdGhlciBjYXNlLCBkaXNhYmxlIGVuZ2luZS4KKwkJCQkJCQkJLy8gRG9uJ3Qgd29ycnkgV1BBIGtleSwgd2Ugd2lsbCBhZGQgV1BBIEtleSBhZnRlciA0LVdheSBoYW5kc2hha2luZy4KKwkJCQkJCQkJLy8KKwkJCQkJCQkJVVNIT1JUICAgb2Zmc2V0OworCQkJCQkJCQlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArIChwRW50cnktPkFpZCAqIEhXX1dDSURfQVRUUklfU0laRSk7CisJCQkJCQkJCS8vIFJYX1BLRVlfTU9ERTowIGZvciBubyBzZWN1cml0eTsgUlhfS0VZX1RBQjowIGZvciBzaGFyZWQga2V5IHRhYmxlOyBCU1NfSURYOjAKKwkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCAwKTsKKwkJCQkJCQl9CisJCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCQkJCUFzaWNVcGRhdGVSeFdDSURUYWJsZShwQWQsIHBFbnRyeS0+QWlkLCBwRW50cnktPkFkZHIpOworCQkJCQkJcHJpbnRrKCJVcGRhdGVSeFdDSURUYWJsZSgpOiBBaWQ9JWQsIEFkZHI9JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnghXG4iLCBwRW50cnktPkFpZCwKKwkJCQkJCQkJcEVudHJ5LT5BZGRyWzBdLCBwRW50cnktPkFkZHJbMV0sIHBFbnRyeS0+QWRkclsyXSwgcEVudHJ5LT5BZGRyWzNdLCBwRW50cnktPkFkZHJbNF0sIHBFbnRyeS0+QWRkcls1XSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKy8vIGFkZCBieSBqb2hubGksIGZpeCAiaW5faW50ZXJydXB0IiBlcnJvciB3aGVuIGNhbGwgIk1hY1RhYmxlRGVsZXRlRW50cnkiIGluIFJ4IHRhc2tsZXQKKwkJCQljYXNlIENNRFRIUkVBRF9VUERBVEVfUFJPVEVDVDoKKwkJCQkJeworCQkJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCAwLCAoQUxMTl9TRVRQUk9URUNUKSwgVFJVRSwgMCk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisvLyBlbmQgam9obmxpCisKKwkJCQljYXNlIE9JRF84MDJfMTFfQUREX1dFUDoKKwkJCQkJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJVUlOVAlpOworCQkJCQkJVUlOVDMyCUtleUlkeDsKKwkJCQkJCVBORElTXzgwMl8xMV9XRVAJcFdlcEtleTsKKworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ21kVGhyZWFkOjpPSURfODAyXzExX0FERF9XRVAgIFxuIikpOworCisJCQkJCQlwV2VwS2V5ID0gKFBORElTXzgwMl8xMV9XRVApcERhdGE7CisJCQkJCQlLZXlJZHggPSBwV2VwS2V5LT5LZXlJbmRleCAmIDB4MGZmZmZmZmY7CisKKwkJCQkJCS8vIGl0IGlzIGEgc2hhcmVkIGtleQorCQkJCQkJaWYgKChLZXlJZHggPj0gNCkgfHwgKChwV2VwS2V5LT5LZXlMZW5ndGggIT0gNSkgJiYgKHBXZXBLZXktPktleUxlbmd0aCAhPSAxMykpKQorCQkJCQkJeworCQkJCQkJCU5kaXNTdGF0dXMgPSBORElTX1NUQVRVU19JTlZBTElEX0RBVEE7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQ21kVGhyZWFkOjpPSURfODAyXzExX0FERF9XRVAsIElOVkFMSURfREFUQSEhXG4iKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJVUNIQVIgQ2lwaGVyQWxnOworCQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gKFVDSEFSKSBwV2VwS2V5LT5LZXlMZW5ndGg7CisJCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXksICZwV2VwS2V5LT5LZXlNYXRlcmlhbCwgcFdlcEtleS0+S2V5TGVuZ3RoKTsKKwkJCQkJCQlDaXBoZXJBbGcgPSAocEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXlMZW4gPT0gNSk/IENJUEhFUl9XRVA2NCA6IENJUEhFUl9XRVAxMjg7CisKKwkJCQkJCQkvLworCQkJCQkJCS8vIENoYW5nZSB0aGUgV0VQIGNpcGhlciB0byBDS0lQIGNpcGhlciBpZiBDS0lQIEtQIG9uLgorCQkJCQkJCS8vIEZ1bmsgVUkgb3IgTWVldGluZ2hvdXNlIFVJIHdpbGwgYWRkIGNraXAga2V5IGZyb20gdGhpcyBwYXRoLgorCQkJCQkJCS8vCisKKwkJCQkJCQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwkJCQkJCSAJeworCQkJCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnOworCQkJCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LktleUxlbiA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuOworCQkJCQkJIAl9CisJCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQkJCQkJaWYgKHBXZXBLZXktPktleUluZGV4ICYgMHg4MDAwMDAwMCkKKwkJCQkJCQl7CisJCQkJCQkJCS8vIERlZmF1bHQga2V5IGZvciB0eCAoc2hhcmVkIGtleSkKKwkJCQkJCQkJVUNIQVIJSVZFSVZbOF07CisJCQkJCQkJCVVJTlQzMglXQ0lEQXR0cmksIFZhbHVlOworCQkJCQkJCQlVU0hPUlQJb2Zmc2V0LCBvZmZzZXQyOworCQkJCQkJCQlOZGlzWmVyb01lbW9yeShJVkVJViwgOCk7CisJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgS2V5SWR4OworCQkJCQkJCQkvLyBBZGQgQlNTSUQgdG8gV0NUYWJsZS4gYmVjYXVzZSB0aGlzIGlzIFR4IHdlcCBrZXkuCisJCQkJCQkJCS8vIFdDSUQgQXR0cmlidXRlIFVERjozLCBCU1NJZHg6MywgQWxnOjMsIEtleXRhYmxlOjE9UEFJUldJU0UgS0VZLCBCU1NJZHggaXMgMAorCQkJCQkJCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKXxTSEFSRURLRVlUQUJMRTsKKworCQkJCQkJCQlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArIChCU1NJRF9XQ0lEKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCQkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7CisJCQkJCQkJCS8vIDEuIElWL0VJVgorCQkJCQkJCQkvLyBTcGVjaWZ5IGtleSBpbmRleCB0byBmaW5kIHNoYXJlZCBrZXkuCisJCQkJCQkJCUlWRUlWWzNdID0gKFVDSEFSKShLZXlJZHg8PCA2KTsJLy9XRVAgRWl2IGJpdCBvZmYuIGdyb3Vwa2V5IGluZGV4IGlzIG5vdCAwCisJCQkJCQkJCW9mZnNldCA9IFBBSVJXSVNFX0lWRUlWX1RBQkxFX0JBU0UgKyAoQlNTME1jYXN0X1dDSUQgKiBIV19JVkVJVl9FTlRSWV9TSVpFKTsKKwkJCQkJCQkJb2Zmc2V0MiA9IFBBSVJXSVNFX0lWRUlWX1RBQkxFX0JBU0UgKyAoQlNTSURfV0NJRCogSFdfSVZFSVZfRU5UUllfU0laRSk7CisJCQkJCQkJCWZvciAoaT0wOyBpPDg7KQorCQkJCQkJCQl7CisJCQkJCQkJCQlWYWx1ZSA9IElWRUlWW2ldOworCQkJCQkJCQkJVmFsdWUgKz0gKElWRUlWW2krMV08PDgpOworCQkJCQkJCQkJVmFsdWUgKz0gKElWRUlWW2krMl08PDE2KTsKKwkJCQkJCQkJCVZhbHVlICs9IChJVkVJVltpKzNdPDwyNCk7CisJCQkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQraSwgVmFsdWUpOworCQkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0MitpLCBWYWx1ZSk7CisJCQkJCQkJCQlpKz00OworCQkJCQkJCQl9CisKKwkJCQkJCQkJLy8gMi4gV0NJRCBBdHRyaWJ1dGUgVURGOjMsIEJTU0lkeDozLCBBbGc6MywgS2V5dGFibGU6dXNlIHNoYXJlIGtleSwgQlNTSWR4IGlzIDAKKwkJCQkJCQkJV0NJREF0dHJpID0gKHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnPDwxKXxTSEFSRURLRVlUQUJMRTsKKwkJCQkJCQkJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoQlNTME1jYXN0X1dDSUQqIEhXX1dDSURfQVRUUklfU0laRSk7CisJCQkJCQkJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCU1MwTWNhc3RfV0NJRCA6IG9mZnNldCA9ICV4LCBXQ0lEQXR0cmkgPSAleFxuIiwgb2Zmc2V0LCBXQ0lEQXR0cmkpKTsKKwkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBXQ0lEQXR0cmkpOworCisJCQkJCQkJfQorCQkJCQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsIEJTUzAsIChVQ0hBUilLZXlJZHgsIENpcGhlckFsZywgcFdlcEtleS0+S2V5TWF0ZXJpYWwsIE5VTEwsIE5VTEwpOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNtZFRocmVhZDo6T0lEXzgwMl8xMV9BRERfV0VQIChLZXlJZHg9JWQsIExlbj0lZC1ieXRlKVxuIiwgS2V5SWR4LCBwV2VwS2V5LT5LZXlMZW5ndGgpKTsKKwkJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgQ01EVEhSRUFEXzgwMl8xMV9DT1VOVEVSX01FQVNVUkU6CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0+IENvbnRyb2wgVGhyZWFkICEhIEVSUk9SICEhIFVua25vd24oY21kcWVsbXQtPmNvbW1hbmQ9MHgleCkgISEgXG4iLCBjbWRxZWxtdC0+Y29tbWFuZCkpOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjbWRxZWxtdC0+Q21kRnJvbU5kaXMgPT0gVFJVRSkKKwkJeworCQkJCWlmIChjbWRxZWxtdC0+YnVmZmVyICE9IE5VTEwpCisJCQkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LT5idWZmZXIsIGNtZHFlbG10LT5idWZmZXJsZW5ndGgsIDApOworCisJCQlOZGlzRnJlZU1lbW9yeShjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoKGNtZHFlbG10LT5idWZmZXIgIT0gTlVMTCkgJiYgKGNtZHFlbG10LT5idWZmZXJsZW5ndGggIT0gMCkpCisJCQkJTmRpc0ZyZWVNZW1vcnkoY21kcWVsbXQtPmJ1ZmZlciwgY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCwgMCk7CisgICAgICAgICAgICB7CisJCQkJTmRpc0ZyZWVNZW1vcnkoY21kcWVsbXQsIHNpemVvZihDbWRRRWxtdCksIDApOworCQkJfQorCQl9CisJfQkvKiBlbmQgb2Ygd2hpbGUgKi8KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vc3BlY3RydW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3NwZWN0cnVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1N2IxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3NwZWN0cnVtLmMKQEAgLTAsMCArMSwxODc2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorCWFjdGlvbi5jCisKKyAgICBBYnN0cmFjdDoKKyAgICBIYW5kbGUgYXNzb2NpYXRpb24gcmVsYXRlZCByZXF1ZXN0cyBlaXRoZXIgZnJvbSBXU1RBIG9yIGZyb20gbG9jYWwgTUxNRQorCisgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICBXaG8gICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUZvbmNoaSBXdSAgICAyMDA4CSAgCSAgIGNyZWF0ZWQgZm9yIDgwMi4xMWgKKyAqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vYWN0aW9uLmgiCisKK1ZPSUQgTWVhc3VyZVJlcVRhYkluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKworCXBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiID0ga21hbGxvYyhzaXplb2YoTUVBU1VSRV9SRVFfVEFCKSwgR0ZQX0FUT01JQyk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiKQorCQlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYiwgc2l6ZW9mKE1FQVNVUkVfUkVRX1RBQikpOworCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgRmFpbCB0byBhbGxvYyBtZW1vcnkgZm9yIHBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiLlxuIiwgX19GVU5DVElPTl9fKSk7CisKKwlyZXR1cm47Cit9CisKK1ZPSUQgTWVhc3VyZVJlcVRhYkV4aXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTmRpc0ZyZWVTcGluTG9jayhwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7CisKKwlpZiAocEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWIpCisJCWtmcmVlKHBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiKTsKKwlwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYiA9IE5VTEw7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBQTUVBU1VSRV9SRVFfRU5UUlkgTWVhc3VyZVJlcUxvb2tVcCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVSU5UOAkJCURpYWxvZ1Rva2VuKQoreworCVVJTlQgSGFzaElkeDsKKwlQTUVBU1VSRV9SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYjsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisKKwlpZiAocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBNZWFzdXJlUmVxVGFiIGRvZXNuJ3QgZXhpc3QuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOworCisJSGFzaElkeCA9IE1RX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoRGlhbG9nVG9rZW4pOworCXBFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07CisKKwl3aGlsZSAocEVudHJ5KQorCXsKKwkJaWYgKHBFbnRyeS0+RGlhbG9nVG9rZW4gPT0gRGlhbG9nVG9rZW4pCisJCQlicmVhazsKKwkJZWxzZQorCQl7CisJCQlwUHJldkVudHJ5ID0gcEVudHJ5OworCQkJcEVudHJ5ID0gcEVudHJ5LT5wTmV4dDsKKwkJfQorCX0KKworCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOworCisJcmV0dXJuIHBFbnRyeTsKK30KKworc3RhdGljIFBNRUFTVVJFX1JFUV9FTlRSWSBNZWFzdXJlUmVxSW5zZXJ0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVJTlQ4CQkJRGlhbG9nVG9rZW4pCit7CisJSU5UIGk7CisJVUxPTkcgSGFzaElkeDsKKwlQTUVBU1VSRV9SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYjsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTCwgcEN1cnJFbnRyeTsKKwlVTE9ORyBOb3c7CisKKwlpZihwVGFiID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogcE1lYXN1cmVSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwRW50cnkgPSBNZWFzdXJlUmVxTG9va1VwKHBBZCwgRGlhbG9nVG9rZW4pOworCWlmIChwRW50cnkgPT0gTlVMTCkKKwl7CisJCVJUTVBfU0VNX0xPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9NRUFTVVJFX1JFUV9UQUJfU0laRTsgaSsrKQorCQl7CisJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQkJcEVudHJ5ID0gJnBUYWItPkNvbnRlbnRbaV07CisKKwkJCWlmICgocEVudHJ5LT5WYWxpZCA9PSBUUlVFKQorCQkJCSYmIFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3csICh1bnNpZ25lZCBsb25nKShwRW50cnktPmxhc3RUaW1lICsgTVFfUkVRX0FHRV9PVVQpKSkKKwkJCXsKKwkJCQlQTUVBU1VSRV9SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisJCQkJVUxPTkcgSGFzaElkeCA9IE1RX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgocEVudHJ5LT5EaWFsb2dUb2tlbik7CisJCQkJUE1FQVNVUkVfUkVRX0VOVFJZIHBQcm9iZUVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCQkJCS8vIHVwZGF0ZSBIYXNoIGxpc3QKKwkJCQlkbworCQkJCXsKKwkJCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkKKwkJCQkJeworCQkJCQkJaWYgKHBQcmV2RW50cnkgPT0gTlVMTCkKKwkJCQkJCXsKKwkJCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwUHJldkVudHJ5LT5wTmV4dCA9IHBFbnRyeS0+cE5leHQ7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKKwkJCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCQkJfSB3aGlsZSAocFByb2JlRW50cnkpOworCisJCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LCBzaXplb2YoTUVBU1VSRV9SRVFfRU5UUlkpKTsKKwkJCQlwVGFiLT5TaXplLS07CisKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHBFbnRyeS0+VmFsaWQgPT0gRkFMU0UpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA8IE1BWF9NRUFTVVJFX1JFUV9UQUJfU0laRSkKKwkJeworCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKKwkJCXBFbnRyeS0+bGFzdFRpbWUgPSBOb3c7CisJCQlwRW50cnktPlZhbGlkID0gVFJVRTsKKwkJCXBFbnRyeS0+RGlhbG9nVG9rZW4gPSBEaWFsb2dUb2tlbjsKKwkJCXBUYWItPlNpemUrKzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBFbnRyeSA9IE5VTEw7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogcE1lYXN1cmVSZXFUYWIgdGFiIGZ1bGwuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJfQorCisJCS8vIGFkZCB0aGlzIE5laWdoYm9yIGVudHJ5IGludG8gSEFTSCB0YWJsZQorCQlpZiAocEVudHJ5KQorCQl7CisJCQlIYXNoSWR4ID0gTVFfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChEaWFsb2dUb2tlbik7CisJCQlpZiAocFRhYi0+SGFzaFtIYXNoSWR4XSA9PSBOVUxMKQorCQkJeworCQkJCXBUYWItPkhhc2hbSGFzaElkeF0gPSBwRW50cnk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEN1cnJFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07CisJCQkJd2hpbGUgKHBDdXJyRW50cnktPnBOZXh0ICE9IE5VTEwpCisJCQkJCXBDdXJyRW50cnkgPSBwQ3VyckVudHJ5LT5wTmV4dDsKKwkJCQlwQ3VyckVudHJ5LT5wTmV4dCA9IHBFbnRyeTsKKwkJCX0KKwkJfQorCisJCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOworCX0KKworCXJldHVybiBwRW50cnk7Cit9CisKK3N0YXRpYyBWT0lEIE1lYXN1cmVSZXFEZWxldGUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUlOVDgJCQlEaWFsb2dUb2tlbikKK3sKKwlQTUVBU1VSRV9SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYjsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCWlmKHBUYWIgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBwTWVhc3VyZVJlcVRhYiBkb2Vzbid0IGV4aXN0LlxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisKKwkvLyBpZiBlbXB0eSwgcmV0dXJuCisJaWYgKHBUYWItPlNpemUgPT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoInBNZWFzdXJlUmVxVGFiIGVtcHR5LlxuIikpOworCQlyZXR1cm47CisJfQorCisJcEVudHJ5ID0gTWVhc3VyZVJlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKTsKKwlpZiAocEVudHJ5ICE9IE5VTEwpCisJeworCQlQTUVBU1VSRV9SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisJCVVMT05HIEhhc2hJZHggPSBNUV9ESUFMT0dUT0tFTl9IQVNIX0lOREVYKHBFbnRyeS0+RGlhbG9nVG9rZW4pOworCQlQTUVBU1VSRV9SRVFfRU5UUlkgcFByb2JlRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOworCisJCVJUTVBfU0VNX0xPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKwkJLy8gdXBkYXRlIEhhc2ggbGlzdAorCQlkbworCQl7CisJCQlpZiAocFByb2JlRW50cnkgPT0gcEVudHJ5KQorCQkJeworCQkJCWlmIChwUHJldkVudHJ5ID09IE5VTEwpCisJCQkJeworCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcFByZXZFbnRyeS0+cE5leHQgPSBwRW50cnktPnBOZXh0OworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJcFByZXZFbnRyeSA9IHBQcm9iZUVudHJ5OworCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKKworCQlOZGlzWmVyb01lbW9yeShwRW50cnksIHNpemVvZihNRUFTVVJFX1JFUV9FTlRSWSkpOworCQlwVGFiLT5TaXplLS07CisKKwkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7CisJfQorCisJcmV0dXJuOworfQorCitWT0lEIFRwY1JlcVRhYkluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOworCisJcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYiA9IGttYWxsb2Moc2l6ZW9mKFRQQ19SRVFfVEFCKSwgR0ZQX0FUT01JQyk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIpCisJCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIsIHNpemVvZihUUENfUkVRX1RBQikpOworCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgRmFpbCB0byBhbGxvYyBtZW1vcnkgZm9yIHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKworCXJldHVybjsKK30KKworVk9JRCBUcGNSZXFUYWJFeGl0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5kaXNGcmVlU3BpbkxvY2socEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7CisKKwlpZiAocEFkLT5Db21tb25DZmcucFRwY1JlcVRhYikKKwkJa2ZyZWUocEFkLT5Db21tb25DZmcucFRwY1JlcVRhYik7CisJcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYiA9IE5VTEw7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBQVFBDX1JFUV9FTlRSWSBUcGNSZXFMb29rVXAoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUlOVDgJCQlEaWFsb2dUb2tlbikKK3sKKwlVSU5UIEhhc2hJZHg7CisJUFRQQ19SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiOworCVBUUENfUkVRX0VOVFJZIHBFbnRyeSA9IE5VTEw7CisJUFRQQ19SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisKKwlpZiAocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBUcGNSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlSVE1QX1NFTV9MT0NLKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKworCUhhc2hJZHggPSBUUENfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChEaWFsb2dUb2tlbik7CisJcEVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCXdoaWxlIChwRW50cnkpCisJeworCQlpZiAocEVudHJ5LT5EaWFsb2dUb2tlbiA9PSBEaWFsb2dUb2tlbikKKwkJCWJyZWFrOworCQllbHNlCisJCXsKKwkJCXBQcmV2RW50cnkgPSBwRW50cnk7CisJCQlwRW50cnkgPSBwRW50cnktPnBOZXh0OworCQl9CisJfQorCisJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKworCXJldHVybiBwRW50cnk7Cit9CisKKworc3RhdGljIFBUUENfUkVRX0VOVFJZIFRwY1JlcUluc2VydCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVSU5UOAkJCURpYWxvZ1Rva2VuKQoreworCUlOVCBpOworCVVMT05HIEhhc2hJZHg7CisJUFRQQ19SRVFfVEFCIHBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiOworCVBUUENfUkVRX0VOVFJZIHBFbnRyeSA9IE5VTEwsIHBDdXJyRW50cnk7CisJVUxPTkcgTm93OworCisJaWYocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBUcGNSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwRW50cnkgPSBUcGNSZXFMb29rVXAocEFkLCBEaWFsb2dUb2tlbik7CisJaWYgKHBFbnRyeSA9PSBOVUxMKQorCXsKKwkJUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfVFBDX1JFUV9UQUJfU0laRTsgaSsrKQorCQl7CisJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQkJcEVudHJ5ID0gJnBUYWItPkNvbnRlbnRbaV07CisKKwkJCWlmICgocEVudHJ5LT5WYWxpZCA9PSBUUlVFKQorCQkJCSYmIFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3csICh1bnNpZ25lZCBsb25nKShwRW50cnktPmxhc3RUaW1lICsgVFBDX1JFUV9BR0VfT1VUKSkpCisJCQl7CisJCQkJUFRQQ19SRVFfRU5UUlkgcFByZXZFbnRyeSA9IE5VTEw7CisJCQkJVUxPTkcgSGFzaElkeCA9IFRQQ19ESUFMT0dUT0tFTl9IQVNIX0lOREVYKHBFbnRyeS0+RGlhbG9nVG9rZW4pOworCQkJCVBUUENfUkVRX0VOVFJZIHBQcm9iZUVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCQkJCS8vIHVwZGF0ZSBIYXNoIGxpc3QKKwkJCQlkbworCQkJCXsKKwkJCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkKKwkJCQkJeworCQkJCQkJaWYgKHBQcmV2RW50cnkgPT0gTlVMTCkKKwkJCQkJCXsKKwkJCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwUHJldkVudHJ5LT5wTmV4dCA9IHBFbnRyeS0+cE5leHQ7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKKwkJCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCQkJfSB3aGlsZSAocFByb2JlRW50cnkpOworCisJCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LCBzaXplb2YoVFBDX1JFUV9FTlRSWSkpOworCQkJCXBUYWItPlNpemUtLTsKKworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAocEVudHJ5LT5WYWxpZCA9PSBGQUxTRSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpIDwgTUFYX1RQQ19SRVFfVEFCX1NJWkUpCisJCXsKKwkJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7CisJCQlwRW50cnktPmxhc3RUaW1lID0gTm93OworCQkJcEVudHJ5LT5WYWxpZCA9IFRSVUU7CisJCQlwRW50cnktPkRpYWxvZ1Rva2VuID0gRGlhbG9nVG9rZW47CisJCQlwVGFiLT5TaXplKys7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwRW50cnkgPSBOVUxMOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBUcGNSZXFUYWIgdGFiIGZ1bGwuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJfQorCisJCS8vIGFkZCB0aGlzIE5laWdoYm9yIGVudHJ5IGludG8gSEFTSCB0YWJsZQorCQlpZiAocEVudHJ5KQorCQl7CisJCQlIYXNoSWR4ID0gVFBDX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoRGlhbG9nVG9rZW4pOworCQkJaWYgKHBUYWItPkhhc2hbSGFzaElkeF0gPT0gTlVMTCkKKwkJCXsKKwkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBDdXJyRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOworCQkJCXdoaWxlIChwQ3VyckVudHJ5LT5wTmV4dCAhPSBOVUxMKQorCQkJCQlwQ3VyckVudHJ5ID0gcEN1cnJFbnRyeS0+cE5leHQ7CisJCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7CisJCQl9CisJCX0KKworCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOworCX0KKworCXJldHVybiBwRW50cnk7Cit9CisKK3N0YXRpYyBWT0lEIFRwY1JlcURlbGV0ZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVSU5UOAkJCURpYWxvZ1Rva2VuKQoreworCVBUUENfUkVRX1RBQiBwVGFiID0gcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYjsKKwlQVFBDX1JFUV9FTlRSWSBwRW50cnkgPSBOVUxMOworCisJaWYocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBUcGNSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm47CisJfQorCisJLy8gaWYgZW1wdHksIHJldHVybgorCWlmIChwVGFiLT5TaXplID09IDApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJwVHBjUmVxVGFiIGVtcHR5LlxuIikpOworCQlyZXR1cm47CisJfQorCisJcEVudHJ5ID0gVHBjUmVxTG9va1VwKHBBZCwgRGlhbG9nVG9rZW4pOworCWlmIChwRW50cnkgIT0gTlVMTCkKKwl7CisJCVBUUENfUkVRX0VOVFJZIHBQcmV2RW50cnkgPSBOVUxMOworCQlVTE9ORyBIYXNoSWR4ID0gVFBDX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgocEVudHJ5LT5EaWFsb2dUb2tlbik7CisJCVBUUENfUkVRX0VOVFJZIHBQcm9iZUVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCQlSVE1QX1NFTV9MT0NLKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKwkJLy8gdXBkYXRlIEhhc2ggbGlzdAorCQlkbworCQl7CisJCQlpZiAocFByb2JlRW50cnkgPT0gcEVudHJ5KQorCQkJeworCQkJCWlmIChwUHJldkVudHJ5ID09IE5VTEwpCisJCQkJeworCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcFByZXZFbnRyeS0+cE5leHQgPSBwRW50cnktPnBOZXh0OworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJcFByZXZFbnRyeSA9IHBQcm9iZUVudHJ5OworCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKKworCQlOZGlzWmVyb01lbW9yeShwRW50cnksIHNpemVvZihUUENfUkVRX0VOVFJZKSk7CisJCXBUYWItPlNpemUtLTsKKworCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOworCX0KKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlHZXQgQ3VycmVudCBUaW1lUyB0YW1wLgorCisJUGFyYW1ldHJzOgorCisJUmV0dXJuCTogQ3VycmVudCBUaW1lIFN0YW1wLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBVSU5UNjQgR2V0Q3VycmVudFRpbWVTdGFtcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwkvLyBnZXQgY3VycmVudCB0aW1lIHN0YW1wLgorCXJldHVybiAwOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUdldCBDdXJyZW50IFRyYW5zbWl0IFBvd2VyLgorCisJUGFyYW1ldHJzOgorCisJUmV0dXJuCTogQ3VycmVudCBUaW1lIFN0YW1wLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBVSU5UOCBHZXRDdXJUeFB3cigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVSU5UOCBXY2lkKQoreworCXJldHVybiAxNjsgLyogMTYgZEJtICovCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJSW5zZXJ0IERpYWxvZyBUb2tlbiBpbnRvIGZyYW1lLgorCisJUGFyYW1ldHJzOgorCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KKwkJMi4gZnJhbWUgbGVuZ3RoLgorCQkzLiBEaWFsb2cgdG9rZW4uCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIEluc2VydERpYWxvZ1Rva2VuKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEZyYW1lQnVmLAorCU9VVCBQVUxPTkcgcEZyYW1lTGVuLAorCUlOIFVJTlQ4IERpYWxvZ1Rva2VuKQoreworCVVMT05HIFRlbXBMZW47CisJTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLAkmVGVtcExlbiwKKwkJCQkJMSwJCQkJJkRpYWxvZ1Rva2VuLAorCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJSW5zZXJ0IFRQQyBSZXF1ZXN0IElFIGludG8gZnJhbWUuCisKKwlQYXJhbWV0cnM6CisJCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgorCQkyLiBmcmFtZSBsZW5ndGguCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKyBzdGF0aWMgVk9JRCBJbnNlcnRUcGNSZXFJRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbikKK3sKKwlVTE9ORyBUZW1wTGVuOworCVVMT05HIExlbiA9IDA7CisJVUlOVDggRWxlbWVudElEID0gSUVfVFBDX1JFUVVFU1Q7CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYsCQkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJCSZFbGVtZW50SUQsCisJCQkJCQkxLAkJCQkJCQkmTGVuLAorCQkJCQkJRU5EX09GX0FSR1MpOworCisJKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUluc2VydCBUUEMgUmVwb3J0IElFIGludG8gZnJhbWUuCisKKwlQYXJhbWV0cnM6CisJCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgorCQkyLiBmcmFtZSBsZW5ndGguCisJCTMuIFRyYW5zbWl0IFBvd2VyLgorCQk0LiBMaW5rIE1hcmdpbi4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworIHN0YXRpYyBWT0lEIEluc2VydFRwY1JlcG9ydElFKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEZyYW1lQnVmLAorCU9VVCBQVUxPTkcgcEZyYW1lTGVuLAorCUlOIFVJTlQ4IFR4UHdyLAorCUlOIFVJTlQ4IExpbmtNYXJnaW4pCit7CisJVUxPTkcgVGVtcExlbjsKKwlVTE9ORyBMZW4gPSBzaXplb2YoVFBDX1JFUE9SVF9JTkZPKTsKKwlVSU5UOCBFbGVtZW50SUQgPSBJRV9UUENfUkVQT1JUOworCVRQQ19SRVBPUlRfSU5GTyBUcGNSZXBvcnRJRTsKKworCVRwY1JlcG9ydElFLlR4UHdyID0gVHhQd3I7CisJVHBjUmVwb3J0SUUuTGlua01hcmdpbiA9IExpbmtNYXJnaW47CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYsCQkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJCSZFbGVtZW50SUQsCisJCQkJCQkxLAkJCQkJCQkmTGVuLAorCQkJCQkJTGVuLAkJCQkJCSZUcGNSZXBvcnRJRSwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKKworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUluc2VydCBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgSUUgaW50byBmcmFtZS4KKworCVBhcmFtZXRyczoKKwkJMS4gZnJhbWUgYnVmZmVyIHBvaW50ZXIuCisJCTIuIGZyYW1lIGxlbmd0aC4KKwkJMy4gY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IG1vZGUuCisJCTQuIG5ldyBzZWxlY3RlZCBjaGFubmVsLgorCQk1LiBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgY291bnQuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIEluc2VydENoU3dBbm5JRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBVSU5UOCBDaFN3TW9kZSwKKwlJTiBVSU5UOCBOZXdDaGFubmVsLAorCUlOIFVJTlQ4IENoU3dDbnQpCit7CisJVUxPTkcgVGVtcExlbjsKKwlVTE9ORyBMZW4gPSBzaXplb2YoQ0hfU1dfQU5OX0lORk8pOworCVVJTlQ4IEVsZW1lbnRJRCA9IElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVDsKKwlDSF9TV19BTk5fSU5GTyBDaFN3QW5uSUU7CisKKwlDaFN3QW5uSUUuQ2hTd01vZGUgPSBDaFN3TW9kZTsKKwlDaFN3QW5uSUUuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisJQ2hTd0FubklFLkNoU3dDbnQgPSBDaFN3Q250OworCisJTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLAkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJJkVsZW1lbnRJRCwKKwkJCQkJCTEsCQkJCQkJJkxlbiwKKwkJCQkJCUxlbiwJCQkJCSZDaFN3QW5uSUUsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbnNlcnQgTWVhc3VyZSBSZXF1ZXN0IElFIGludG8gZnJhbWUuCisKKwlQYXJhbWV0cnM6CisJCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgorCQkyLiBmcmFtZSBsZW5ndGguCisJCTMuIE1lYXN1cmUgVG9rZW4uCisJCTQuIE1lYXN1cmUgUmVxdWVzdCBNb2RlLgorCQk1LiBNZWFzdXJlIFJlcXVlc3QgVHlwZS4KKwkJNi4gTWVhc3VyZSBDaGFubmVsLgorCQk3LiBNZWFzdXJlIFN0YXJ0IHRpbWUuCisJCTguIE1lYXN1cmUgRHVyYXRpb24uCisKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIFZPSUQgSW5zZXJ0TWVhc3VyZVJlcUlFKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEZyYW1lQnVmLAorCU9VVCBQVUxPTkcgcEZyYW1lTGVuLAorCUlOIFBNRUFTVVJFX1JFUV9JTkZPIHBNZWFzdXJlUmVxSUUpCit7CisJVUxPTkcgVGVtcExlbjsKKwlVSU5UOCBMZW4gPSBzaXplb2YoTUVBU1VSRV9SRVFfSU5GTyk7CisJVUlOVDggRWxlbWVudElEID0gSUVfTUVBU1VSRU1FTlRfUkVRVUVTVDsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBGcmFtZUJ1ZiwJCQkJCSZUZW1wTGVuLAorCQkJCQkJMSwJCQkJCQkJJkVsZW1lbnRJRCwKKwkJCQkJCTEsCQkJCQkJCSZMZW4sCisJCQkJCQlMZW4sCQkJCQkJcE1lYXN1cmVSZXFJRSwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbnNlcnQgTWVhc3VyZSBSZXBvcnQgSUUgaW50byBmcmFtZS4KKworCVBhcmFtZXRyczoKKwkJMS4gZnJhbWUgYnVmZmVyIHBvaW50ZXIuCisJCTIuIGZyYW1lIGxlbmd0aC4KKwkJMy4gTWVhc3VyZSBUb2tlbi4KKwkJNC4gTWVhc3VyZSBSZXF1ZXN0IE1vZGUuCisJCTUuIE1lYXN1cmUgUmVxdWVzdCBUeXBlLgorCQk2LiBMZW5ndGggb2YgUmVwb3J0IEluZm9tYXRpb24KKwkJNy4gUG9pbnRlciBvZiBSZXBvcnQgSW5mb21hdGlvbiBCdWZmZXIuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIEluc2VydE1lYXN1cmVSZXBvcnRJRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBQTUVBU1VSRV9SRVBPUlRfSU5GTyBwTWVhc3VyZVJlcG9ydElFLAorCUlOIFVJTlQ4IFJlcG9ydExuZm9MZW4sCisJSU4gUFVJTlQ4IHBSZXBvcnRJbmZvKQoreworCVVMT05HIFRlbXBMZW47CisJVUxPTkcgTGVuOworCVVJTlQ4IEVsZW1lbnRJRCA9IElFX01FQVNVUkVNRU5UX1JFUE9SVDsKKworCUxlbiA9IHNpemVvZihNRUFTVVJFX1JFUE9SVF9JTkZPKSArIFJlcG9ydExuZm9MZW47CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYsCQkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJCSZFbGVtZW50SUQsCisJCQkJCQkxLAkJCQkJCQkmTGVuLAorCQkJCQkJTGVuLAkJCQkJCXBNZWFzdXJlUmVwb3J0SUUsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisKKwlpZiAoKFJlcG9ydExuZm9MZW4gPiAwKSAmJiAocFJlcG9ydEluZm8gIT0gTlVMTCkpCisJeworCQlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYgKyAqcEZyYW1lTGVuLAkJJlRlbXBMZW4sCisJCQkJCQkJUmVwb3J0TG5mb0xlbiwJCQkJcFJlcG9ydEluZm8sCisJCQkJCQkJRU5EX09GX0FSR1MpOworCisJCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKKwl9CisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgTWVhc3VyZW1lbnQgcmVxdWVzdCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVNZWFzdXJlbWVudFJlcSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVJTlQ4IE1lYXN1cmVUb2tlbiwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxTW9kZSwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxVHlwZSwKKwlJTiBVSU5UOCBNZWFzdXJlQ2gsCisJSU4gVUlOVDE2IE1lYXN1cmVEdXJhdGlvbikKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKwlIRUFERVJfODAyXzExIEFjdEhkcjsKKwlNRUFTVVJFX1JFUV9JTkZPIE1lYXN1cmVSZXFJRTsKKwlVSU5UOCBSbVJlcURhaWxvZ1Rva2VuID0gUmFuZG9tQnl0ZShwQWQpOworCVVJTlQ2NCBNZWFzdXJlU3RhcnRUaW1lID0gR2V0Q3VycmVudFRpbWVTdGFtcChwQWQpOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX01SUSk7CisKKwkvLyBmaWxsIERpYWxvZyBUb2tlbgorCUluc2VydERpYWxvZ1Rva2VuKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgTWVhc3VyZVRva2VuKTsKKworCS8vIHByZXBhcmUgTWVhc3VyZW1lbnQgSUUuCisJTmRpc1plcm9NZW1vcnkoJk1lYXN1cmVSZXFJRSwgc2l6ZW9mKE1FQVNVUkVfUkVRX0lORk8pKTsKKwlNZWFzdXJlUmVxSUUuVG9rZW4gPSBSbVJlcURhaWxvZ1Rva2VuOworCU1lYXN1cmVSZXFJRS5SZXFNb2RlLndvcmQgPSBNZWFzdXJlUmVxTW9kZTsKKwlNZWFzdXJlUmVxSUUuUmVxVHlwZSA9IE1lYXN1cmVSZXFUeXBlOworCU1lYXN1cmVSZXFJRS5NZWFzdXJlUmVxLkNoTnVtID0gTWVhc3VyZUNoOworCU1lYXN1cmVSZXFJRS5NZWFzdXJlUmVxLk1lYXN1cmVTdGFydFRpbWUgPSBjcHUybGU2NChNZWFzdXJlU3RhcnRUaW1lKTsKKwlNZWFzdXJlUmVxSUUuTWVhc3VyZVJlcS5NZWFzdXJlRHVyYXRpb24gPSBjcHUybGUxNihNZWFzdXJlRHVyYXRpb24pOworCUluc2VydE1lYXN1cmVSZXFJRShwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sICZNZWFzdXJlUmVxSUUpOworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgTWVhc3VyZW1lbnQgcmVwb3J0IGFjdGlvbiBmcmFtZSBhbmQgZW5xdWV1ZSBpdCBpbnRvCisJCW1hbmFnZW1lbnQgcXVldWUgd2FpdGluZyBmb3IgdHJhbnNtaXRpb24uCisKKwlQYXJhbWV0cnM6CisJCTEuIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcyBvZiB0aGUgZnJhbWUuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZU1lYXN1cmVtZW50UmVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUlOVDggRGlhbG9nVG9rZW4sCisJSU4gVUlOVDggTWVhc3VyZVRva2VuLAorCUlOIFVJTlQ4IE1lYXN1cmVSZXFNb2RlLAorCUlOIFVJTlQ4IE1lYXN1cmVSZXFUeXBlLAorCUlOIFVJTlQ4IFJlcG9ydEluZm9MZW4sCisJSU4gUFVJTlQ4IHBSZXBvcnRJbmZvKQoreworCVBVQ0hBUiBwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUyBOU3RhdHVzOworCVVMT05HIEZyYW1lTGVuOworCUhFQURFUl84MDJfMTEgQWN0SGRyOworCU1FQVNVUkVfUkVQT1JUX0lORk8gTWVhc3VyZVJlcElFOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX01SUCk7CisKKwkvLyBmaWxsIERpYWxvZyBUb2tlbgorCUluc2VydERpYWxvZ1Rva2VuKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgRGlhbG9nVG9rZW4pOworCisJLy8gcHJlcGFyZSBNZWFzdXJlbWVudCBJRS4KKwlOZGlzWmVyb01lbW9yeSgmTWVhc3VyZVJlcElFLCBzaXplb2YoTUVBU1VSRV9SRVBPUlRfSU5GTykpOworCU1lYXN1cmVSZXBJRS5Ub2tlbiA9IE1lYXN1cmVUb2tlbjsKKwlNZWFzdXJlUmVwSUUuUmVwb3J0TW9kZS53b3JkID0gTWVhc3VyZVJlcU1vZGU7CisJTWVhc3VyZVJlcElFLlJlcG9ydFR5cGUgPSBNZWFzdXJlUmVxVHlwZTsKKwlJbnNlcnRNZWFzdXJlUmVwb3J0SUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCAmTWVhc3VyZVJlcElFLCBSZXBvcnRJbmZvTGVuLCBwUmVwb3J0SW5mbyk7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBUUEMgUmVxdWVzdCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVUUENSZXEoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVQ0hBUiBEaWFsb2dUb2tlbikKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKworCUhFQURFUl84MDJfMTEgQWN0SGRyOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX1RQQ1JRKTsKKworCS8vIGZpbGwgRGlhbG9nIFRva2VuCisJSW5zZXJ0RGlhbG9nVG9rZW4ocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBEaWFsb2dUb2tlbik7CisKKwkvLyBJbnNlcnQgVFBDIFJlcXVlc3QgSUUuCisJSW5zZXJ0VHBjUmVxSUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIFRQQyBSZXBvcnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlVFBDUmVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUlOVDggRGlhbG9nVG9rZW4sCisJSU4gVUlOVDggVHhQd3IsCisJSU4gVUlOVDggTGlua01hcmdpbikKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKworCUhFQURFUl84MDJfMTEgQWN0SGRyOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX1RQQ1JQKTsKKworCS8vIGZpbGwgRGlhbG9nIFRva2VuCisJSW5zZXJ0RGlhbG9nVG9rZW4ocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBEaWFsb2dUb2tlbik7CisKKwkvLyBJbnNlcnQgVFBDIFJlcXVlc3QgSUUuCisJSW5zZXJ0VHBjUmVwb3J0SUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBUeFB3ciwgTGlua01hcmdpbik7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKwkJMi4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IG1vZGUuCisJCTIuIGEgTmV3IHNlbGVjdGVkIGNoYW5uZWwuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZUNoU3dBbm4oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBDaFN3TW9kZSwKKwlJTiBVSU5UOCBOZXdDaCkKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKworCUhFQURFUl84MDJfMTEgQWN0SGRyOworCisJLy8gYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4KKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKKwkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybjsKKwl9CisJTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKFBDSEFSKSZBY3RIZHIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJRnJhbWVMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX0NIQU5ORUxfU1dJVENIKTsKKworCUluc2VydENoU3dBbm5JRShwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIENoU3dNb2RlLCBOZXdDaCwgMCk7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBCT09MRUFOIERmc1JlcXVpcmVtZW50Q2hlY2soCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUlOVDggQ2hhbm5lbCkKK3sKKwlCT09MRUFOIFJlc3VsdCA9IEZBTFNFOworCUlOVCBpOworCisJZG8KKwl7CisJCS8vIGNoZWNrIERGUyBwcm9jZWR1cmUgaXMgcnVubmluZy4KKwkJLy8gbWFrZSBzdXJlIERGUyBwcm9jZWR1cmUgd29uJ3Qgc3RhcnQgdHdpY2UuCisJCWlmIChwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRE1vZGUgIT0gUkRfTk9STUFMX01PREUpCisJCXsKKwkJCVJlc3VsdCA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKworCQkvLyBjaGVjayB0aGUgbmV3IGNoYW5uZWwgY2FycmllZCBmcm9tIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbW5ldCBpcyB2YWxpZC4KKwkJZm9yIChpPTA7IGk8cEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCQl7CisJCQlpZiAoKENoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQorCQkJCSYmKHBBZC0+Q2hhbm5lbExpc3RbaV0uUmVtYWluaW5nVGltZUZvclVzZSA9PSAwKSkKKwkJCXsKKwkJCQkvLyBmb3VuZCByYWRhciBzaWduYWwgaW4gdGhlIGNoYW5uZWwuIHRoZSBjaGFubmVsIGNhbid0IHVzZSBhdCBsZWFzdCBmb3IgMzAgbWludXRlcy4KKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2ldLlJlbWFpbmluZ1RpbWVGb3JVc2UgPSAxODAwOy8vMzAgbWluID0gMTgwMCBzZWMKKwkJCQlSZXN1bHQgPSBUUlVFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSB3aGlsZShGQUxTRSk7CisKKwlyZXR1cm4gUmVzdWx0OworfQorCitWT0lEIE5vdGlmeUNoU3dBbm5Ub1BlZXJBUHMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBSQSwKKwlJTiBQVUNIQVIgcFRBLAorCUlOIFVJTlQ4IENoU3dNb2RlLAorCUlOIFVJTlQ4IENoYW5uZWwpCit7CisjaWZkZWYgV0RTX1NVUFBPUlQKKwlpZiAoISgocFJBWzBdICYgMHhmZikgPT0gMHhmZikpIC8vIGlzIHBSQSBhIGJyb2FkY2FzZSBhZGRyZXNzLgorCXsKKwkJSU5UIGk7CisJCS8vIGluZm8gbmVpZ2hib3IgQVBzIHRoYXQgUmFkYXIgc2lnbmFsIGZvdW5kIHRocm9naCBXRFMgbGluay4KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9XRFNfRU5UUlk7IGkrKykKKwkJeworCQkJaWYgKFZhbGlkV2RzRW50cnkocEFkLCBpKSkKKwkJCXsKKwkJCQlQVUNIQVIgcERBID0gcEFkLT5XZHNUYWIuV2RzRW50cnlbaV0uUGVlcldkc0FkZHI7CisKKwkJCQkvLyBEQSBlcXVhbCB0byBTQS4gaGF2ZSBubyBuZWNlc3Nhcnkgb3JpZ25hbCBBUCB3aGljaCBmb3VuZCBSYWRhciBzaWduYWwuCisJCQkJaWYgKE1BQ19BRERSX0VRVUFMKHBUQSwgcERBKSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvLyBzZW5kIENoYW5uZWwgU3dpdGNoIEFjdGlvbiBmcmFtZSB0byBpbmZvIE5laWdoYnJvIEFQcy4KKwkJCQlFbnF1ZXVlQ2hTd0FubihwQWQsIHBEQSwgQ2hTd01vZGUsIENoYW5uZWwpOworCQkJfQorCQl9CisJfQorI2VuZGlmIC8vIFdEU19TVVBQT1JUIC8vCit9CisKK3N0YXRpYyBWT0lEIFN0YXJ0REZTUHJvY2VkdXJlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIENoYW5uZWwsCisJSU4gVUlOVDggQ2hTd01vZGUpCit7CisJLy8gc3RhcnQgREZTIHByb2NlZHVyZQorCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBDaGFubmVsOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCU5fQ2hhbm5lbENoZWNrKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID0gUkRfU1dJVENISU5HX01PREU7CisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuQ1NDb3VudCA9IDA7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IGluZm9tYXRpb24gYnVmZmVyLgorCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAgQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IElFLgorICArLS0tLSstLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rCisgIHwgSUQgfCBMZW4gfENoIFN3IE1vZGUgfCBOZXcgQ2ggTnVtIHwgQ2ggU3cgQ250IHwKKyAgKy0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworICAgIDEgICAgMSAgICAgICAgMSAgICAgICAgICAgMSAgICAgICAgICAgIDEKKyovCitzdGF0aWMgQk9PTEVBTiBQZWVyQ2hTd0FublNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpwTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUENIX1NXX0FOTl9JTkZPIHBDaFN3QW5uSW5mbykKK3sKKwlQRlJBTUVfODAyXzExIEZyID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKwlQVUNIQVIgcEZyYW1lUHRyID0gRnItPk9jdGV0OworCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7CisJUEVJRF9TVFJVQ1QgZWlkX3B0cjsKKworCS8vIHNraXAgODAyLjExIGhlYWRlci4KKwlNc2dMZW4gLT0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJLy8gc2tpcCBjYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUuCisJcEZyYW1lUHRyICs9IDI7CisJTXNnTGVuIC09IDI7CisKKwlpZiAocENoU3dBbm5JbmZvID09IE5VTEwpCisJCXJldHVybiByZXN1bHQ7CisKKwllaWRfcHRyID0gKFBFSURfU1RSVUNUKXBGcmFtZVB0cjsKKwl3aGlsZSAoKChVQ0hBUiopZWlkX3B0ciArIGVpZF9wdHItPkxlbiArIDEpIDwgKChQVUNIQVIpcEZyYW1lUHRyICsgTXNnTGVuKSkKKwl7CisJCXN3aXRjaChlaWRfcHRyLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UOgorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQ2hTd0FubkluZm8tPkNoU3dNb2RlLCBlaWRfcHRyLT5PY3RldCwgMSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBDaFN3QW5uSW5mby0+Q2hhbm5lbCwgZWlkX3B0ci0+T2N0ZXQgKyAxLCAxKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcENoU3dBbm5JbmZvLT5DaFN3Q250LCBlaWRfcHRyLT5PY3RldCArIDIsIDEpOworCisJCQkJcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQllaWRfcHRyID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKWVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCU1lYXN1cmVtZW50IHJlcXVlc3QgYWN0aW9uIGZyYW1lIHNhbml0eSBjaGVjay4KKworCVBhcmFtZXRyczoKKwkJMS4gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisJCTIuIG1lc3NhZ2UgbGVuZ3RoLgorCQkzLiBNZWFzdXJlbWVudCByZXF1ZXN0IGluZm9tYXRpb24gYnVmZmVyLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgQk9PTEVBTiBQZWVyTWVhc3VyZVJlcVNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpwTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVJTlQ4IHBEaWFsb2dUb2tlbiwKKwlPVVQgUE1FQVNVUkVfUkVRX0lORk8gcE1lYXN1cmVSZXFJbmZvKQoreworCVBGUkFNRV84MDJfMTEgRnIgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKwlQRUlEX1NUUlVDVCBlaWRfcHRyOworCVBVQ0hBUiBwdHI7CisJVUlOVDY0IE1lYXN1cmVTdGFydFRpbWU7CisJVUlOVDE2IE1lYXN1cmVEdXJhdGlvbjsKKworCS8vIHNraXAgODAyLjExIGhlYWRlci4KKwlNc2dMZW4gLT0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJLy8gc2tpcCBjYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUuCisJcEZyYW1lUHRyICs9IDI7CisJTXNnTGVuIC09IDI7CisKKwlpZiAocE1lYXN1cmVSZXFJbmZvID09IE5VTEwpCisJCXJldHVybiByZXN1bHQ7CisKKwlOZGlzTW92ZU1lbW9yeShwRGlhbG9nVG9rZW4sIHBGcmFtZVB0ciwgMSk7CisJcEZyYW1lUHRyICs9IDE7CisJTXNnTGVuIC09IDE7CisKKwllaWRfcHRyID0gKFBFSURfU1RSVUNUKXBGcmFtZVB0cjsKKwl3aGlsZSAoKChVQ0hBUiopZWlkX3B0ciArIGVpZF9wdHItPkxlbiArIDEpIDwgKChQVUNIQVIpcEZyYW1lUHRyICsgTXNnTGVuKSkKKwl7CisJCXN3aXRjaChlaWRfcHRyLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfTUVBU1VSRU1FTlRfUkVRVUVTVDoKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5Ub2tlbiwgZWlkX3B0ci0+T2N0ZXQsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwTWVhc3VyZVJlcUluZm8tPlJlcU1vZGUud29yZCwgZWlkX3B0ci0+T2N0ZXQgKyAxLCAxKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5SZXFUeXBlLCBlaWRfcHRyLT5PY3RldCArIDIsIDEpOworCQkJCXB0ciA9IGVpZF9wdHItPk9jdGV0ICsgMzsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5NZWFzdXJlUmVxLkNoTnVtLCBwdHIsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZNZWFzdXJlU3RhcnRUaW1lLCBwdHIgKyAxLCA4KTsKKwkJCQlwTWVhc3VyZVJlcUluZm8tPk1lYXN1cmVSZXEuTWVhc3VyZVN0YXJ0VGltZSA9IFNXQVA2NChNZWFzdXJlU3RhcnRUaW1lKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmTWVhc3VyZUR1cmF0aW9uLCBwdHIgKyA5LCAyKTsKKwkJCQlwTWVhc3VyZVJlcUluZm8tPk1lYXN1cmVSZXEuTWVhc3VyZUR1cmF0aW9uID0gU1dBUDE2KE1lYXN1cmVEdXJhdGlvbik7CisKKwkJCQlyZXN1bHQgPSBUUlVFOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisJCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTWVhc3VyZW1lbnQgcmVwb3J0IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gTWVhc3VyZW1lbnQgcmVwb3J0IGluZm9tYXRpb24gYnVmZmVyLgorCQk0LiBiYXNpYyByZXBvcnQgaW5mb21hdGlvbiBidWZmZXIuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAgTWVhc3VyZW1lbnQgUmVwb3J0IElFLgorICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJRCB8IExlbiB8IFRva2VuIHwgUmVwb3J0IE1vZGUgfCBNZWFzdXJlIFR5cGUgfCBNZWFzdXJlIFJlcG9ydCB8CisgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgIDEgICAgIDEgICAgICAxICAgICAgICAgIDEgICAgICAgICAgICAgMSAgICAgICAgICAgIHZhcmlhYmxlCisKKyAgQmFzaWMgUmVwb3J0LgorICArLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rCisgIHwgQ2ggTnVtIHwgU3RhcnQgVGltZSB8IER1cmF0aW9uIHwgTWFwIHwKKyAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKworICAgICAgMSAgICAgICAgICA4ICAgICAgICAgICAyICAgICAgICAxCisKKyAgTWFwIEZpZWxkIEJpdCBGb3JtYXQuCisgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgIHwgQnNzIHwgT0ZETSBQcmVhbWJsZSB8IFVuaWRlbnRpZmllZCBzaWduYWwgfCBSYWRhciB8IFVubWVhc3VyZWQgfCBSZXNlcnZlZCB8CisgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgIDMgICAgICAgICA0ICAgICAgICAgIDUtNworKi8KK3N0YXRpYyBCT09MRUFOIFBlZXJNZWFzdXJlUmVwb3J0U2FuaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFZPSUQgKnBNc2csCisJSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUlOVDggcERpYWxvZ1Rva2VuLAorCU9VVCBQTUVBU1VSRV9SRVBPUlRfSU5GTyBwTWVhc3VyZVJlcG9ydEluZm8sCisJT1VUIFBVSU5UOCBwUmVwb3J0QnVmKQoreworCVBGUkFNRV84MDJfMTEgRnIgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKwlQRUlEX1NUUlVDVCBlaWRfcHRyOworCVBVQ0hBUiBwdHI7CisKKwkvLyBza2lwIDgwMi4xMSBoZWFkZXIuCisJTXNnTGVuIC09IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCS8vIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCU1zZ0xlbiAtPSAyOworCisJaWYgKHBNZWFzdXJlUmVwb3J0SW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdWx0OworCisJTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOworCXBGcmFtZVB0ciArPSAxOworCU1zZ0xlbiAtPSAxOworCisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVClwRnJhbWVQdHI7CisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoUFVDSEFSKXBGcmFtZVB0ciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX01FQVNVUkVNRU5UX1JFUE9SVDoKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXBvcnRJbmZvLT5Ub2tlbiwgZWlkX3B0ci0+T2N0ZXQsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwTWVhc3VyZVJlcG9ydEluZm8tPlJlcG9ydE1vZGUsIGVpZF9wdHItPk9jdGV0ICsgMSwgMSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBNZWFzdXJlUmVwb3J0SW5mby0+UmVwb3J0VHlwZSwgZWlkX3B0ci0+T2N0ZXQgKyAyLCAxKTsKKwkJCQlpZiAocE1lYXN1cmVSZXBvcnRJbmZvLT5SZXBvcnRUeXBlID09IFJNX0JBU0lDKQorCQkJCXsKKwkJCQkJUE1FQVNVUkVfQkFTSUNfUkVQT1JUIHBSZXBvcnQgPSAoUE1FQVNVUkVfQkFTSUNfUkVQT1JUKXBSZXBvcnRCdWY7CisJCQkJCXB0ciA9IGVpZF9wdHItPk9jdGV0ICsgMzsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNoTnVtLCBwdHIsIDEpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZVN0YXJ0VGltZSwgcHRyICsgMSwgOCk7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5NZWFzdXJlRHVyYXRpb24sIHB0ciArIDksIDIpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWFwLCBwdHIgKyAxMSwgMSk7CisKKwkJCQl9CisJCQkJZWxzZSBpZiAocE1lYXN1cmVSZXBvcnRJbmZvLT5SZXBvcnRUeXBlID09IFJNX0NDQSkKKwkJCQl7CisJCQkJCVBNRUFTVVJFX0NDQV9SRVBPUlQgcFJlcG9ydCA9IChQTUVBU1VSRV9DQ0FfUkVQT1JUKXBSZXBvcnRCdWY7CisJCQkJCXB0ciA9IGVpZF9wdHItPk9jdGV0ICsgMzsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNoTnVtLCBwdHIsIDEpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZVN0YXJ0VGltZSwgcHRyICsgMSwgOCk7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5NZWFzdXJlRHVyYXRpb24sIHB0ciArIDksIDIpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+Q0NBX0J1c3lfRnJhY3Rpb24sIHB0ciArIDExLCAxKTsKKworCQkJCX0KKwkJCQllbHNlIGlmIChwTWVhc3VyZVJlcG9ydEluZm8tPlJlcG9ydFR5cGUgPT0gUk1fUlBJX0hJU1RPR1JBTSkKKwkJCQl7CisJCQkJCVBNRUFTVVJFX1JQSV9SRVBPUlQgcFJlcG9ydCA9IChQTUVBU1VSRV9SUElfUkVQT1JUKXBSZXBvcnRCdWY7CisJCQkJCXB0ciA9IGVpZF9wdHItPk9jdGV0ICsgMzsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNoTnVtLCBwdHIsIDEpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZVN0YXJ0VGltZSwgcHRyICsgMSwgOCk7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5NZWFzdXJlRHVyYXRpb24sIHB0ciArIDksIDIpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+UlBJX0RlbnNpdHksIHB0ciArIDExLCA4KTsKKwkJCQl9CisJCQkJcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQllaWRfcHRyID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKWVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRQQyBSZXF1ZXN0IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gRGlhbG9nIFRva2VuLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgQk9PTEVBTiBQZWVyVHBjUmVxU2FuaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFZPSUQgKnBNc2csCisJSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUlOVDggcERpYWxvZ1Rva2VuKQoreworCVBGUkFNRV84MDJfMTEgRnIgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKwlQRUlEX1NUUlVDVCBlaWRfcHRyOworCisJTXNnTGVuIC09IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCS8vIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCU1zZ0xlbiAtPSAyOworCisJaWYgKHBEaWFsb2dUb2tlbiA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdWx0OworCisJTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOworCXBGcmFtZVB0ciArPSAxOworCU1zZ0xlbiAtPSAxOworCisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVClwRnJhbWVQdHI7CisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoUFVDSEFSKXBGcmFtZVB0ciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX1RQQ19SRVFVRVNUOgorCQkJCXJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJZWlkX3B0ciA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKillaWRfcHRyICsgMiArIGVpZF9wdHItPkxlbik7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUUEMgUmVwb3J0IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gRGlhbG9nIFRva2VuLgorCQk0LiBUUEMgUmVwb3J0IElFLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgQk9PTEVBTiBQZWVyVHBjUmVwU2FuaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFZPSUQgKnBNc2csCisJSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUlOVDggcERpYWxvZ1Rva2VuLAorCU9VVCBQVFBDX1JFUE9SVF9JTkZPIHBUcGNSZXBJbmZvKQoreworCVBGUkFNRV84MDJfMTEgRnIgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKwlQRUlEX1NUUlVDVCBlaWRfcHRyOworCisJTXNnTGVuIC09IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCS8vIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCU1zZ0xlbiAtPSAyOworCisJaWYgKHBEaWFsb2dUb2tlbiA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdWx0OworCisJTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOworCXBGcmFtZVB0ciArPSAxOworCU1zZ0xlbiAtPSAxOworCisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVClwRnJhbWVQdHI7CisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoUFVDSEFSKXBGcmFtZVB0ciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX1RQQ19SRVBPUlQ6CisJCQkJTmRpc01vdmVNZW1vcnkoJnBUcGNSZXBJbmZvLT5UeFB3ciwgZWlkX3B0ci0+T2N0ZXQsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwVHBjUmVwSW5mby0+TGlua01hcmdpbiwgZWlkX3B0ci0+T2N0ZXQgKyAxLCAxKTsKKwkJCQlyZXN1bHQgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisJCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIFBlZXJDaFN3QW5uQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlDSF9TV19BTk5fSU5GTyBDaFN3QW5uSW5mbzsKKwlQRlJBTUVfODAyXzExIHBGciA9IChQRlJBTUVfODAyXzExKUVsZW0tPk1zZzsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlVQ0hBUiBpbmRleCA9IDAsIENoYW5uZWwgPSAwLCBOZXdDaGFubmVsID0gMDsKKwlVTE9ORyBCc3NpZHggPSAwOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJTmRpc1plcm9NZW1vcnkoJkNoU3dBbm5JbmZvLCBzaXplb2YoQ0hfU1dfQU5OX0lORk8pKTsKKwlpZiAoISBQZWVyQ2hTd0FublNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmQ2hTd0FubkluZm8pKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSW52YWxpZCBDaGFubmVsIFN3aXRjaCBBY3Rpb24gRnJhbWUuXG4iKSk7CisJCXJldHVybjsKKwl9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQorCXsKKwkJQnNzaWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcEZyLT5IZHIuQWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQlpZiAoQnNzaWR4ID09IEJTU19OT1RfRk9VTkQpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJDaFN3QW5uQWN0aW9uIC0gQnNzaWR4IGlzIG5vdCBmb3VuZFxuIikpOworCQkJcmV0dXJuOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiXG4qKioqQnNzaWR4IGlzICVkLCBDaGFubmVsID0gJWRcbiIsIGluZGV4LCBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5DaGFubmVsKSk7CisJCWhleF9kdW1wKCJTU0lEIixwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5Cc3NpZCAsNik7CisKKwkJQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJCU5ld0NoYW5uZWwgPSBDaFN3QW5uSW5mby5DaGFubmVsOworCisJCWlmICgocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkgJiYgKE5ld0NoYW5uZWwgIT0gMCkgJiYgKENoYW5uZWwgIT0gTmV3Q2hhbm5lbCkpCisJCXsKKwkJCS8vIFN3aXRjaGluZyB0byBjaGFubmVsIDEgY2FuIHByZXZlbnQgZnJvbSByZXNjYW5uaW5nIHRoZSBjdXJyZW50IGNoYW5uZWwgaW1tZWRpYXRlbHkgKGJ5IGF1dG8gcmVjb25uZWN0aW9uKS4KKwkJCS8vIEluIGFkZGl0aW9uLCBjbGVhciB0aGUgTUxNRSBxdWV1ZSBhbmQgdGhlIHNjYW4gdGFibGUgdG8gZGlzY2FyZCB0aGUgUlggcGFja2V0cyBhbmQgcHJldmlvdXMgc2Nhbm5pbmcgcmVzdWx0cy4KKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgMSwgRkFMU0UpOworCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgMSk7CisJCSAgICBMaW5rRG93bihwQWQsIEZBTFNFKTsKKwkJCU1sbWVRdWV1ZUluaXQoJnBBZC0+TWxtZS5RdWV1ZSk7CisJCQlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7CisJCSAgICBSVE1QdXNlY0RlbGF5KDEwMDAwMDApOwkJLy8gdXNlIGRlbGF5IHRvIHByZXZlbnQgU1RBIGRvIHJlYXNzb2MKKworCQkJLy8gY2hhbm5lbCBzYW5pdHkgY2hlY2sKKwkJCWZvciAoaW5kZXggPSAwIDsgaW5kZXggPCBwQWQtPkNoYW5uZWxMaXN0TnVtOyBpbmRleCsrKQorCQkJeworCQkJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2luZGV4XS5DaGFubmVsID09IE5ld0NoYW5uZWwpCisJCQkJeworCQkJCQlwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5DaGFubmVsID0gTmV3Q2hhbm5lbDsKKwkJCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisJCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJiYmJiYmJiYmJiYmJiYmJlBlZXJDaFN3QW5uQWN0aW9uIC0gU1RBIHJlY2VpdmUgY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IElFIChOZXcgQ2hhbm5lbCA9JWQpXG4iLCBOZXdDaGFubmVsKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGluZGV4ID49IHBBZC0+Q2hhbm5lbExpc3ROdW0pCisJCQl7CisJCQkJREJHUFJJTlRfRVJSKCgiJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiZQZWVyQ2hTd0FubkFjdGlvbihjYW4gbm90IGZpbmQgTmV3IENoYW5uZWw9JWQgaW4gQ2hhbm5lbExpc3RbJWRdXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPkNoYW5uZWxMaXN0TnVtKSk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlyZXR1cm47Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlNZWFzdXJlbWVudCBSZXF1ZXN0IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIFBlZXJNZWFzdXJlUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlQRlJBTUVfODAyXzExIHBGciA9IChQRlJBTUVfODAyXzExKUVsZW0tPk1zZzsKKwlVSU5UOCBEaWFsb2dUb2tlbjsKKwlNRUFTVVJFX1JFUV9JTkZPIE1lYXN1cmVSZXFJbmZvOworCU1FQVNVUkVfUkVQT1JUX01PREUgUmVwb3J0TW9kZTsKKworCWlmKFBlZXJNZWFzdXJlUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZEaWFsb2dUb2tlbiwgJk1lYXN1cmVSZXFJbmZvKSkKKwl7CisJCVJlcG9ydE1vZGUud29yZCA9IDA7CisJCVJlcG9ydE1vZGUuZmllbGQuSW5jYXBhYmxlID0gMTsKKwkJRW5xdWV1ZU1lYXN1cmVtZW50UmVwKHBBZCwgcEZyLT5IZHIuQWRkcjIsIERpYWxvZ1Rva2VuLCBNZWFzdXJlUmVxSW5mby5Ub2tlbiwgUmVwb3J0TW9kZS53b3JkLCBNZWFzdXJlUmVxSW5mby5SZXFUeXBlLCAwLCBOVUxMKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTWVhc3VyZW1lbnQgUmVwb3J0IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIFBlZXJNZWFzdXJlUmVwb3J0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlNRUFTVVJFX1JFUE9SVF9JTkZPIE1lYXN1cmVSZXBvcnRJbmZvOworCVBGUkFNRV84MDJfMTEgcEZyID0gKFBGUkFNRV84MDJfMTEpRWxlbS0+TXNnOworCVVJTlQ4IERpYWxvZ1Rva2VuOworCVBVSU5UOCBwTWVhc3VyZVJlcG9ydEluZm87CisKKy8vCWlmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCAhPSBUUlVFKQorLy8JCXJldHVybjsKKworCWlmICgocE1lYXN1cmVSZXBvcnRJbmZvID0ga21hbGxvYyhzaXplb2YoTUVBU1VSRV9SUElfUkVQT1JUKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyB1bmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBtZWFzdXJlIHJlcG9ydCBidWZmZXIgKHNpemU9JWQpLlxuIiwgX19GVU5DVElPTl9fLCBzaXplb2YoTUVBU1VSRV9SUElfUkVQT1JUKSkpOworCQlyZXR1cm47CisJfQorCisJTmRpc1plcm9NZW1vcnkoJk1lYXN1cmVSZXBvcnRJbmZvLCBzaXplb2YoTUVBU1VSRV9SRVBPUlRfSU5GTykpOworCU5kaXNaZXJvTWVtb3J5KHBNZWFzdXJlUmVwb3J0SW5mbywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpOworCWlmIChQZWVyTWVhc3VyZVJlcG9ydFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmRGlhbG9nVG9rZW4sICZNZWFzdXJlUmVwb3J0SW5mbywgcE1lYXN1cmVSZXBvcnRJbmZvKSkKKwl7CisJCWRvIHsKKwkJCVBNRUFTVVJFX1JFUV9FTlRSWSBwRW50cnkgPSBOVUxMOworCisJCQkvLyBOb3QgYSBhdXRvbm9tb3VzIG1lYXN1cmUgcmVwb3J0LgorCQkJLy8gY2hlY2sgdGhlIGRpYWxvZyB0b2tlbiBmaWVsZC4gZHJvcCBpdCBpZiB0aGUgZGlhbG9nIHRva2VuIGRvZXNuJ3QgbWF0Y2guCisJCQlpZiAoKERpYWxvZ1Rva2VuICE9IDApCisJCQkJJiYgKChwRW50cnkgPSBNZWFzdXJlUmVxTG9va1VwKHBBZCwgRGlhbG9nVG9rZW4pKSA9PSBOVUxMKSkKKwkJCQlicmVhazsKKworCQkJaWYgKHBFbnRyeSAhPSBOVUxMKQorCQkJCU1lYXN1cmVSZXFEZWxldGUocEFkLCBwRW50cnktPkRpYWxvZ1Rva2VuKTsKKworCQkJaWYgKE1lYXN1cmVSZXBvcnRJbmZvLlJlcG9ydFR5cGUgPT0gUk1fQkFTSUMpCisJCQl7CisJCQkJUE1FQVNVUkVfQkFTSUNfUkVQT1JUIHBCYXNpY1JlcG9ydCA9IChQTUVBU1VSRV9CQVNJQ19SRVBPUlQpcE1lYXN1cmVSZXBvcnRJbmZvOworCQkJCWlmICgocEJhc2ljUmVwb3J0LT5NYXAuZmllbGQuUmFkYXIpCisJCQkJCSYmIChEZnNSZXF1aXJlbWVudENoZWNrKHBBZCwgcEJhc2ljUmVwb3J0LT5DaE51bSkgPT0gVFJVRSkpCisJCQkJeworCQkJCQlOb3RpZnlDaFN3QW5uVG9QZWVyQVBzKHBBZCwgcEZyLT5IZHIuQWRkcjEsIHBGci0+SGRyLkFkZHIyLCAxLCBwQmFzaWNSZXBvcnQtPkNoTnVtKTsKKwkJCQkJU3RhcnRERlNQcm9jZWR1cmUocEFkLCBwQmFzaWNSZXBvcnQtPkNoTnVtLCAxKTsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKEZBTFNFKTsKKwl9CisJZWxzZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJbnZhbGlkIE1lYXN1cmVtZW50IFJlcG9ydCBGcmFtZS5cbiIpKTsKKworCWtmcmVlKHBNZWFzdXJlUmVwb3J0SW5mbyk7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVFBDIFJlcXVlc3QgYWN0aW9uIGZyYW1lIGhhbmRsZXIuCisKKwlQYXJhbWV0cnM6CisJCUVsbWUgLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIFZPSUQgUGVlclRwY1JlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUEZSQU1FXzgwMl8xMSBwRnIgPSAoUEZSQU1FXzgwMl8xMSlFbGVtLT5Nc2c7CisJUFVDSEFSIHBGcmFtZVB0ciA9IHBGci0+T2N0ZXQ7CisJVUlOVDggRGlhbG9nVG9rZW47CisJVUlOVDggVHhQd3IgPSBHZXRDdXJUeFB3cihwQWQsIEVsZW0tPldjaWQpOworCVVJTlQ4IExpbmtNYXJnaW4gPSAwOworCUNIQVIgUmVhbFJzc2k7CisKKwkvLyBsaW5rIG1hcmdpbjogUmF0aW8gb2YgdGhlIHJlY2VpdmVkIHNpZ25hbCBwb3dlciB0byB0aGUgbWluaW11bSBkZXNpcmVkIGJ5IHRoZSBzdGF0aW9uIChTVEEpLiBUaGUKKwkvLwkJCQlTVEEgbWF5IGluY29ycG9yYXRlIHJhdGUgaW5mb3JtYXRpb24gYW5kIGNoYW5uZWwgY29uZGl0aW9ucywgaW5jbHVkaW5nIGludGVyZmVyZW5jZSwgaW50byBpdHMgY29tcHV0YXRpb24KKwkvLwkJCQlvZiBsaW5rIG1hcmdpbi4KKworCVJlYWxSc3NpID0gUlRNUE1heFJzc2kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCksCisJCQkJCQkJCUNvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKSwKKwkJCQkJCQkJQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpKTsKKworCS8vIHNraXAgQ2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCisJLy8gRGlhbG9nIHRva2VuLgorCU5kaXNNb3ZlTWVtb3J5KCZEaWFsb2dUb2tlbiwgcEZyYW1lUHRyLCAxKTsKKworCUxpbmtNYXJnaW4gPSAoUmVhbFJzc2kgLyBNSU5fUkNWX1BXUik7CisJaWYgKFBlZXJUcGNSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJkRpYWxvZ1Rva2VuKSkKKwkJRW5xdWV1ZVRQQ1JlcChwQWQsIHBGci0+SGRyLkFkZHIyLCBEaWFsb2dUb2tlbiwgVHhQd3IsIExpbmtNYXJnaW4pOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRQQyBSZXBvcnQgYWN0aW9uIGZyYW1lIGhhbmRsZXIuCisKKwlQYXJhbWV0cnM6CisJCUVsbWUgLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIFZPSUQgUGVlclRwY1JlcEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUlOVDggRGlhbG9nVG9rZW47CisJVFBDX1JFUE9SVF9JTkZPIFRwY1JlcEluZm87CisJUFRQQ19SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCU5kaXNaZXJvTWVtb3J5KCZUcGNSZXBJbmZvLCBzaXplb2YoVFBDX1JFUE9SVF9JTkZPKSk7CisJaWYgKFBlZXJUcGNSZXBTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJkRpYWxvZ1Rva2VuLCAmVHBjUmVwSW5mbykpCisJeworCQlpZiAoKHBFbnRyeSA9IFRwY1JlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKSkgIT0gTlVMTCkKKwkJeworCQkJVHBjUmVxRGVsZXRlKHBBZCwgcEVudHJ5LT5EaWFsb2dUb2tlbik7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczogRGlhbG9nVG9rZW49JXgsIFR4UHdyPSVkLCBMaW5rTWFyZ2luPSVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgRGlhbG9nVG9rZW4sIFRwY1JlcEluZm8uVHhQd3IsIFRwY1JlcEluZm8uTGlua01hcmdpbikpOworCQl9CisJfQorCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVNwZWN0cnVuIGFjdGlvbiBmcmFtZXMgSGFuZGxlciBzdWNoIGFzIGNoYW5uZWwgc3dpdGNoIGFubm91Y2VtZW50LAorCQltZWFzdXJlbWVudCByZXBvcnQsIG1lYXN1cmVtZW50IHJlcXVlc3QgYWN0aW9ucyBmcmFtZXMuCisKKwlQYXJhbWV0cnM6CisJCUVsbWUgLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyU3BlY3RydW1BY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCisJVUNIQVIJQWN0aW9uID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMV07CisKKwlpZiAocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggIT0gVFJVRSkKKwkJcmV0dXJuOworCisJc3dpdGNoKEFjdGlvbikKKwl7CisJCWNhc2UgU1BFQ19NUlE6CisJCQkvLyBjdXJyZW50IHJ0Mjg2MCB1bmFibGUgZG8gc3VjaCBtZWFzdXJlIHNwZWNpZmllZCBpbiBNZWFzdXJlbWVudCBSZXF1ZXN0LgorCQkJLy8gcmVqZWN0IGFsbCBtZWFzdXJlbWVudCByZXF1ZXN0LgorCQkJUGVlck1lYXN1cmVSZXFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFQ19NUlA6CisJCQlQZWVyTWVhc3VyZVJlcG9ydEFjdGlvbihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVDX1RQQ1JROgorCQkJUGVlclRwY1JlcUFjdGlvbihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVDX1RQQ1JQOgorCQkJUGVlclRwY1JlcEFjdGlvbihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVDX0NIQU5ORUxfU1dJVENIOgoreworI2lmZGVmIERPVDExTl9EUkFGVDMKKwkJCQlTRUNfQ0hBX09GRlNFVF9JRQlTZWNvbmRhcnk7CisJCQkJQ0hBX1NXSVRDSF9BTk5PVU5DRV9JRQlDaGFubmVsU3dpdGNoOworCisJCQkJLy8gODAyLjExaCBvbmx5IGhhcyBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgSUUuCisJCQkJUlRNUE1vdmVNZW1vcnkoJkNoYW5uZWxTd2l0Y2gsICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSs0XSwgc2l6ZW9mIChDSEFfU1dJVENIX0FOTk9VTkNFX0lFKSk7CisKKwkJCQkvLyA4MDIuMTFuIEQzLjAzIGFkZHMgc2Vjb25kYXJ5IGNoYW5uZWwgb2Zmc2V0IGVsZW1lbnQgaW4gdGhlIGVuZC4KKwkJCQlpZiAoRWxlbS0+TXNnTGVuID09ICAoTEVOR1RIXzgwMl8xMSArIDIgKyBzaXplb2YgKENIQV9TV0lUQ0hfQU5OT1VOQ0VfSUUpICsgc2l6ZW9mIChTRUNfQ0hBX09GRlNFVF9JRSkpKQorCQkJCXsKKwkJCQkJUlRNUE1vdmVNZW1vcnkoJlNlY29uZGFyeSwgJkVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzldLCBzaXplb2YgKFNFQ19DSEFfT0ZGU0VUX0lFKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVNlY29uZGFyeS5TZWNvbmRhcnlDaGFubmVsT2Zmc2V0ID0gMDsKKwkJCQl9CisKKwkJCQlpZiAoKEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzJdID09IElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVCkgJiYgKEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzNdID09IDMpKQorCQkJCXsKKwkJCQkJQ2hhbm5lbFN3aXRjaEFjdGlvbihwQWQsIEVsZW0tPldjaWQsIENoYW5uZWxTd2l0Y2guTmV3Q2hhbm5lbCwgU2Vjb25kYXJ5LlNlY29uZGFyeUNoYW5uZWxPZmZzZXQpOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCit9CisJCQlQZWVyQ2hTd0FubkFjdGlvbihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlQYXJhbWV0cnM6CisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0lOVCBTZXRfTWVhc3VyZVJlcV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVSU5UIEFpZCA9IDE7CisJVUlOVCBBcmdJZHg7CisJUFVDSEFSIHRoaXNDaGFyOworCisJTUVBU1VSRV9SRVFfTU9ERSBNZWFzdXJlUmVxTW9kZTsKKwlVSU5UOCBNZWFzdXJlUmVxVG9rZW4gPSBSYW5kb21CeXRlKHBBZCk7CisJVUlOVDggTWVhc3VyZVJlcVR5cGUgPSBSTV9CQVNJQzsKKwlVSU5UOCBNZWFzdXJlQ2ggPSAxOworCisJQXJnSWR4ID0gMTsKKwl3aGlsZSAoKHRoaXNDaGFyID0gc3Ryc2VwKChjaGFyICoqKSZhcmcsICItIikpICE9IE5VTEwpCisJeworCQlzd2l0Y2goQXJnSWR4KQorCQl7CisJCQljYXNlIDE6CS8vIEFpZC4KKwkJCQlBaWQgPSBzaW1wbGVfc3RydG9sKHRoaXNDaGFyLCAwLCAxNik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjogLy8gTWVhc3VyZW1lbnQgUmVxdWVzdCBUeXBlLgorCQkJCU1lYXN1cmVSZXFUeXBlID0gc2ltcGxlX3N0cnRvbCh0aGlzQ2hhciwgMCwgMTYpOworCQkJCWlmIChNZWFzdXJlUmVxVHlwZSA+IDMpCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogdW5rbm93IE1lYXN1cmVSZXFUeXBlKCVkKVxuIiwgX19GVU5DVElPTl9fLCBNZWFzdXJlUmVxVHlwZSkpOworCQkJCQlyZXR1cm4gVFJVRTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzogLy8gTWVhc3VyZW1lbnQgY2hhbm5lbC4KKwkJCQlNZWFzdXJlQ2ggPSBzaW1wbGVfc3RydG9sKHRoaXNDaGFyLCAwLCAxNik7CisJCQkJYnJlYWs7CisJCX0KKwkJQXJnSWR4Kys7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OkFpZCA9ICVkLCBNZWFzdXJlUmVxVHlwZT0lZCBNZWFzdXJlQ2g9JWRcbiIsIF9fRlVOQ1RJT05fXywgQWlkLCBNZWFzdXJlUmVxVHlwZSwgTWVhc3VyZUNoKSk7CisJaWYgKCFWQUxJRF9XQ0lEKEFpZCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogdW5rbm93IHN0YSBvZiBBaWQoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIEFpZCkpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlNZWFzdXJlUmVxTW9kZS53b3JkID0gMDsKKwlNZWFzdXJlUmVxTW9kZS5maWVsZC5FbmFibGUgPSAxOworCisJTWVhc3VyZVJlcUluc2VydChwQWQsIE1lYXN1cmVSZXFUb2tlbik7CisKKwlFbnF1ZXVlTWVhc3VyZW1lbnRSZXEocEFkLCBwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uQWRkciwKKwkJTWVhc3VyZVJlcVRva2VuLCBNZWFzdXJlUmVxTW9kZS53b3JkLCBNZWFzdXJlUmVxVHlwZSwgTWVhc3VyZUNoLCAyMDAwKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQgU2V0X1RwY1JlcV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVSU5UIEFpZDsKKworCVVJTlQ4IFRwY1JlcVRva2VuID0gUmFuZG9tQnl0ZShwQWQpOworCisJQWlkID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDE2KTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpBaWQgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBBaWQpKTsKKwlpZiAoIVZBTElEX1dDSUQoQWlkKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiB1bmtub3cgc3RhIG9mIEFpZCglZClcbiIsIF9fRlVOQ1RJT05fXywgQWlkKSk7CisJCXJldHVybiBUUlVFOworCX0KKworCVRwY1JlcUluc2VydChwQWQsIFRwY1JlcVRva2VuKTsKKworCUVucXVldWVUUENSZXEocEFkLCBwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uQWRkciwgVHBjUmVxVG9rZW4pOworCisJcmV0dXJuIFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZGZzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Rmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MmE2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Rmcy5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIGRmcy5oCisKKyAgICBBYnN0cmFjdDoKKyAgICBTdXBwb3J0IERGUyBmdW5jdGlvbi4KKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgRm9uY2hpICAgIDAzLTEyLTIwMDcgICAgICBjcmVhdGVkCisqLworCisjZGVmaW5lIFJBREFSX1BVTFNFIDEKKyNkZWZpbmUgUkFEQVJfV0lEVEggMgorCisjZGVmaW5lIFdJRFRIX1JEX0lETEUgMAorI2RlZmluZSBXSURUSF9SRF9DSEVDSyAxCisKKworVk9JRCBCYnBSYWRhckRldGVjdGlvblN0YXJ0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBCYnBSYWRhckRldGVjdGlvblN0b3AoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIFJhZGFyRGV0ZWN0aW9uU3RhcnQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gQk9PTEVBTiBDVFNfUHJvdGVjdCwKKwlJTiBVSU5UOCBDVFNQZXJpb2QpOworCitWT0lEIFJhZGFyRGV0ZWN0aW9uU3RvcCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUmFkYXJEZXRlY3RQZXJpb2RpYygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKKworQk9PTEVBTiBSYWRhckNoYW5uZWxDaGVjaygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCUNoKTsKKworVUxPTkcgSmFwUmFkYXJUeXBlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVUxPTkcgUlRNUEJicFJlYWRSYWRhckR1cmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworVUxPTkcgUlRNUFJlYWRSYWRhckR1cmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVE1QQ2xlYW5SYWRhckR1cmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVE1QUHJlcGFyZVJEQ1RTRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBLAorCUlOCVVMT05HCQkJRHVyYXRpb24sCisJSU4gIFVDSEFSICAgICAgICAgICBSVFNSYXRlLAorCUlOICBVTE9ORyAgICAgICAgICAgQ1RTQmFzZUFkZHIsCisJSU4gIFVDSEFSCQkJRnJhbWVHYXApOworCitWT0lEIFJUTVBQcmVwYXJlUmFkYXJEZXRlY3RQYXJhbXMoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCisKK0lOVCBTZXRfQ2hNb3ZpbmdUaW1lX1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIGFyZyk7CisKK0lOVCBTZXRfTG9uZ1B1bHNlUmFkYXJUaF9Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBhcmcpOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZmlybXdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDc3ODNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9maXJtd2FyZS5oCkBAIC0wLDAgKzEsNTU4IEBACisvKgorIENvcHlyaWdodCAoYykgMjAwNywgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgUmVkaXN0cmlidXRpb24uICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0CisgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIG1ldDoKKworIAkqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlCisgCWZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAJcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIAkqIE5laXRoZXIgdGhlIG5hbWUgb2YgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAJc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworIAlzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAJKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlCisgCWlzIHBlcm1pdHRlZC4KKworIExpbWl0ZWQgcGF0ZW50IGxpY2Vuc2UuIFJhbGluayBUZWNobm9sb2d5IENvcnBvcmF0aW9uIGdyYW50cyBhIHdvcmxkLXdpZGUsCisgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdW5kZXIgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyCisgb3ducyBvciBjb250cm9scyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LCBvZmZlciB0byBzZWxsIGFuZAorIHNlbGwgKCJVdGlsaXplIikgdGhpcyBzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55Cisgc3VjaCBwYXRlbnQgaXMgbmVjZXNzYXJ5IHRvIFV0aWxpemUgdGhlIHNvZnR3YXJlIGFsb25lLCBvciBpbgorIGNvbWJpbmF0aW9uIHdpdGggYW4gb3BlcmF0aW5nIHN5c3RlbSBsaWNlbnNlZCB1bmRlciBhbiBhcHByb3ZlZCBPcGVuCisgU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIGF0CisgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzLiAgVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiAgTm8gaGFyZHdhcmUgcGVyCisgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCisgRElTQ0xBSU1FUi4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywKKyBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyBEQU1BR0UuCisqLworLyogQVVUTyBHRU4gUExFQVNFIERPIE5PVCBNT0RJRlkgSVQgKi8KKy8qIEFVVE8gR0VOIFBMRUFTRSBETyBOT1QgTU9ESUZZIElUICovCisKKworVUNIQVIgRmlybXdhcmVJbWFnZSBbXSA9IHsKKzB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTAsIDB4MjgsIDB4MDIsIDB4MTAsIDB4MzIsIDB4MDIsIDB4MTAsIDB4NzgsIDB4MDIsIDB4MTIsIDB4NjcsIDB4MDIsCisweDEyLCAweDY4LCAweDAyLCAweDEyLCAweDg3LCAweDAyLCAweDEyLCAweDhjLCAweDEyLCAweDEyLCAweDg4LCAweDIyLCAweDAyLCAweDE2LCAweDQ5LCAweDAyLAorMHgxNywgMHgxZiwgMHgwMiwgMHgxMywgMHg3NywgMHgwMiwgMHgxMiwgMHg4ZCwgMHgzMCwgMHgwNSwgMHgwNiwgMHgyMCwgMHgwZCwgMHgwMywgMHgxMiwgMHgxNywKKzB4YzEsIDB4MjIsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MWIsIDB4ZTUsIDB4NGMsIDB4MzAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4NDAsCisweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDEwLCAweDJmLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweDc0LCAweDA4LCAweGYwLCAweGU0LAorMHg5MCwgMHgwMSwgMHhhNywgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxYywgMHg5MCwgMHgwMSwgMHg4MCwgMHhlMCwgMHhiNCwKKzB4MDIsIDB4MTUsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MTAsIDB4OTAsIDB4MDEsIDB4ODQsIDB4ZTAsIDB4YjQsIDB4ODEsIDB4MDksIDB4OTAsIDB4MDEsCisweDhjLCAweDc0LCAweDAxLCAweGYwLCAweDEyLCAweDBkLCAweGM4LCAweDIyLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDIwLCAweGU3LCAweDAzLCAweDAyLAorMHgxMiwgMHg2NiwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHg1NiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgxMiwgMHgwYSwgMHg5ZCwgMHgxMCwKKzB4YjcsIDB4MzEsIDB4MTAsIDB4ZTAsIDB4NTAsIDB4MTEsIDB4MDQsIDB4NTEsIDB4MTEsIDB4MGQsIDB4NTIsIDB4MTEsIDB4MGQsIDB4NTMsIDB4MTEsIDB4MGQsCisweDU0LCAweDExLCAweDRlLCAweDU1LCAweDExLCAweDdlLCAweDcwLCAweDExLCAweGE5LCAweDcxLCAweDExLCAweGQ3LCAweDcyLCAweDEyLCAweDFkLCAweDczLAorMHgxMiwgMHgzZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2NiwgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMywgMHgxZCwgMHg3ZCwgMHgwMiwgMHhhZiwKKzB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsCisweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDg1LCAweDU2LCAweDQxLCAweGQyLCAweDAyLCAweDIyLAorMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHg5MCwgMHg3MCwgMHgxMSwKKzB4ZTAsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4NjQsIDB4MjAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4NzUsIDB4NGUsIDB4MDMsCisweDc1LCAweDRmLCAweDIwLCAweDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDQ3LCAweDIyLCAweDkwLCAweDA0LCAweDA0LAorMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0NywgMHgyNSwgMHg1NywKKzB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDgsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsCisweGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLAorMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHhlNSwgMHg0NywKKzB4NjQsIDB4MDcsIDB4NjAsIDB4MGIsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDUsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4OTAsCisweDcwLCAweDExLCAweGUwLCAweDU0LCAweDBmLCAweGY1LCAweDNhLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDA4LCAweGU1LCAweDNhLCAweGI0LCAweDAzLAorMHgwMywgMHhlNCwgMHhmNSwgMHg0NiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHhkMiwgMHgwNCwgMHgyMiwgMHg5MCwgMHg3MCwKKzB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjgsIDB4ZTYsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsCisweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LAorMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwKKzB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsCisweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLAorMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg5MCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhiNCwgMHg3MCwgMHgxZSwgMHhhMywgMHhlMCwKKzB4YjQsIDB4MzAsIDB4MTksIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZmQsIDB4OTAsIDB4MDUsIDB4MDUsIDB4ZTAsIDB4NTQsCisweGZiLCAweGYwLCAweDQ0LCAweDA0LCAweGYwLCAweGVkLCAweDU0LCAweGZlLCAweDkwLCAweDA1LCAweDA4LCAweGYwLCAweGU0LCAweGY1LCAweDRlLCAweGY1LAorMHg0ZiwgMHg3NSwgMHgzYSwgMHhmZiwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwKKzB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4NGIsIDB4ODAsIDB4NDIsIDB4OTAsIDB4NzAsIDB4MTAsCisweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDkzLCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LAorMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgyYSwgMHg4MCwgMHgyMSwgMHg5MCwgMHg3MCwKKzB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NGEsIDB4ZDIsIDB4MDUsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsCisweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDA3LCAweDkwLAorMHg3MCwgMHgyNSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgyMiwgMHgyMiwgMHhlNSwgMHg1MywgMHg3MCwgMHgxYSwgMHgzMCwgMHg2MCwgMHgwOSwgMHhiMiwKKzB4NGQsIDB4MzAsIDB4NGQsIDB4MDQsIDB4MDUsIDB4NDYsIDB4YzIsIDB4MDQsIDB4ZTUsIDB4NGYsIDB4NDUsIDB4NGUsIDB4NjAsIDB4MDgsIDB4ZTUsIDB4NGYsCisweDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLCAweDIyLCAweDIyLCAweGMyLCAweDQyLCAweGQzLCAweDIyLCAweDIyLCAweGMyLCAweDRiLCAweGMyLAorMHg0YywgMHhlNSwgMHg0NCwgMHgxMiwgMHgwYSwgMHg5ZCwgMHgxMiwgMHhhZiwgMHgwMCwgMHgxMywgMHg0MiwgMHgwNCwgMHgxMywgMHgzZSwgMHgwOCwgMHgxMywKKzB4MTksIDB4MTAsIDB4MTIsIDB4YzMsIDB4MjAsIDB4MTIsIDB4ZTMsIDB4NjAsIDB4MTIsIDB4ZjQsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDQsIDB4ODUsCisweDQ4LCAweDQzLCAweDg1LCAweDRhLCAweDQyLCAweDg1LCAweDRjLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDYwLCAweDAzLCAweDAyLCAweDEzLAorMHg0NCwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwKKzB4NDIsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NjYsIDB4NTMsIDB4NDMsCisweDBmLCAweDgwLCAweDYxLCAweDg1LCAweDQ5LCAweDQzLCAweDg1LCAweDRiLCAweDQyLCAweDg1LCAweDRkLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LAorMHg3MCwgMHg1MiwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YiwgMHhjNCwgMHg1NCwgMHgwZiwKKzB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGQsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4MzUsIDB4ZTUsCisweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDEwLCAweGY1LCAweDQzLCAweDgwLCAweDJiLCAweGU1LCAweDQ3LCAweGI0LCAweDA0LCAweDA2LCAweDUzLCAweDVlLAorMHhmYiwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNSwgMHgwNiwgMHg0MywgMHg1ZSwgMHgwNCwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwKKzB4NDcsIDB4YjQsIDB4MDYsIDB4MTAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MzAsIDB4ZjUsIDB4NDMsIDB4ODAsIDB4MDYsIDB4ZDIsIDB4NGIsCisweDgwLCAweDAyLCAweGQyLCAweDRjLCAweGU0LCAweGY1LCAweDI1LCAweGU1LCAweDQyLCAweGM0LCAweDU0LCAweGYwLCAweGZmLCAweGU1LCAweDQzLCAweDU0LAorMHgwZiwgMHg0ZiwgMHhmNSwgMHg1ZiwgMHg5MCwgMHg3MCwgMHg0NCwgMHhmMCwgMHhhMywgMHhlNSwgMHg1ZSwgMHhmMCwgMHhhMywgMHhlNSwgMHg0YSwgMHhmMCwKKzB4YTMsIDB4ZTUsIDB4NDgsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NGMsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NDIsIDB4ZjAsCisweGEzLCAweGU1LCAweDQzLCAweGYwLCAweGQyLCAweDYwLCAweDIyLCAweGU1LCAweDQ3LCAweDYwLCAweDEwLCAweDI0LCAweGMwLCAweDcwLCAweDAzLCAweDEyLAorMHgxNiwgMHgyOSwgMHgxMiwgMHgxMywgMHg4YywgMHhjMiwgMHhhZiwgMHhjMiwgMHgwNCwgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwgMHhhZiwgMHg5MCwgMHgwNCwKKzB4MTQsIDB4ZTAsIDB4NTQsIDB4MGUsIDB4NjAsIDB4MDQsIDB4ZDIsIDB4MTgsIDB4ODAsIDB4MDgsIDB4ZTUsIDB4NGUsIDB4NDUsIDB4NGYsIDB4MjQsIDB4ZmYsCisweDkyLCAweDE4LCAweGQyLCAweGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweGEyLCAweGU0LCAweDkyLCAweDE5LCAweDc0LCAweDFlLCAweGYwLCAweGU1LAorMHg1ZiwgMHg1NCwgMHgwZiwgMHhmNSwgMHgyZCwgMHhlNSwgMHgyNSwgMHg3MCwgMHgxMywgMHgzMCwgMHgxOCwgMHgwNSwgMHhlNSwgMHg1ZiwgMHgyMCwgMHhlNSwKKzB4MGIsIDB4MzAsIDB4MTksIDB4MTksIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MzAsIDB4ZmYsIDB4YmYsIDB4MzAsIDB4MTEsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsCisweDc1LCAweDI1LCAweDBjLCAweDgwLCAweDAyLCAweDE1LCAweDI1LCAweGQyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDBmLCAweGU1LCAweDVmLCAweDMwLAorMHhlNiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwNCwgMHhkMiwgMHg2YywgMHhjMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwMywKKzB4NzAsIDB4MjEsIDB4MzAsIDB4NGIsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MTgsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDMsIDB4MzAsCisweDRjLCAweDExLCAweGMyLCAweDRjLCAweGU1LCAweDI1LCAweDcwLCAweDA1LCAweDc1LCAweDI1LCAweDA3LCAweDgwLCAweDAyLCAweDE1LCAweDI1LCAweGQyLAorMHg2YywgMHhkMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgxNCwgMHhlNSwgMHg0NCwgMHgyMCwgMHhlMywgMHgwYiwgMHhlNSwgMHgzYSwgMHg2NCwKKzB4MDIsIDB4NjAsIDB4MDUsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDQsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4OTAsIDB4NzAsIDB4NDYsIDB4ZTUsCisweDJkLCAweGYwLCAweDIwLCAweDY5LCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDAyLCAweGIyLCAweDY4LCAweDIwLCAweDZiLCAweDA3LCAweGU1LAorMHg1ZSwgMHgyMCwgMHhlMSwgMHgwMiwgMHhiMiwgMHg2YSwgMHgyMCwgMHg2ZCwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwMiwgMHhiMiwgMHg2YywKKzB4OTAsIDB4NzAsIDB4NDcsIDB4ZTUsIDB4MmQsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4NDAsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTIsIDB4NjgsIDB4ODAsIDB4MjYsCisweDMwLCAweDY4LCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLAorMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwKKzB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzMsIDB4OTIsIDB4NzIsIDB4MjAsIDB4NmIsIDB4MDQsIDB4YTIsIDB4NmEsIDB4ODAsCisweDI2LCAweDMwLCAweDZhLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDA0LCAweDdmLAorMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwKKzB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzUsIDB4OTIsIDB4NzQsIDB4MjAsIDB4NmQsIDB4MDQsIDB4YTIsIDB4NmMsCisweDgwLCAweDI2LCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDA0LAorMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwKKzB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzEsIDB4OTIsIDB4NzAsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZTAsCisweDkwLCAweDEwLCAweDJmLCAweGYwLCAweDkwLCAweDEwLCAweDAzLCAweGUwLCAweGMzLCAweDk0LCAweDMwLCAweDQwLCAweDE0LCAweGEyLCAweDcxLCAweDkyLAorMHg3NywgMHhhMiwgMHg3MCwgMHg5MiwgMHg3NiwgMHhlNSwgMHgyZSwgMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHhmNSwgMHgyZSwgMHhjMiwgMHg3NywgMHhkMiwKKzB4NzYsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZTUsIDB4MmUsIDB4ZjAsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NGMsIDB4OTAsIDB4MDIsIDB4MjksCisweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDQzLCAweGM0LCAweDU0LCAweDBmLCAweDE0LCAweDYwLCAweDE0LCAweDI0LCAweGZlLCAweDYwLCAweDIzLAorMHgyNCwgMHgwMywgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgxOCwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgzMCwgMHg0NywgMHgwZiwgMHg4MCwgMHgwNywKKzB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MjAsIDB4NDcsIDB4MDYsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDIsIDB4MTYsIDB4MTgsIDB4NDQsIDB4MDEsIDB4ZjAsCisweDAyLCAweDE2LCAweDE4LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDAyLAorMHgyOCwgMHhlMCwgMHg1NCwgMHhmZSwgMHg0ZiwgMHhmMCwgMHgwMiwgMHgxNiwgMHgxOCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNywgMHg2MCwgMHgwZiwgMHhlNSwKKzB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDksIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4MTgsIDB4ZTQsIDB4ZjUsCisweDI3LCAweDkwLCAweDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDNhLCAweDE0LCAweDYwLCAweDJkLCAweDE0LCAweDYwLCAweDJlLAorMHgxNCwgMHg2MCwgMHgzNiwgMHgyNCwgMHhmYywgMHg2MCwgMHg1ZiwgMHgyNCwgMHhmOSwgMHg2MCwgMHgxZiwgMHgyNCwgMHgwZSwgMHg3MCwgMHg2OSwgMHhlNSwKKzB4NDYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4ODQsIDB4YWYsIDB4ZjAsIDB4MjAsIDB4NDcsIDB4MDQsIDB4N2UsIDB4MDEsCisweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVmLCAweDZlLCAweDI0LCAweGZmLCAweDgwLCAweDQ1LCAweGEyLCAweDQ3LCAweDgwLCAweDQxLCAweGU1LCAweDQ2LAorMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgyNywgMHhjMywgMHg4MCwgMHgyNCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwZCwgMHg1NCwgMHgzOCwKKzB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MjAsCisweDQ3LCAweDA0LCAweDdkLCAweDAxLCAweDgwLCAweDAyLCAweDdkLCAweDAwLCAweGVmLCAweDZkLCAweDRlLCAweDI0LCAweGZmLCAweDkyLCAweDM4LCAweGEyLAorMHg0NywgMHhiMywgMHg5MiwgMHgzOSwgMHg4MCwgMHgxOSwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwKKzB4MzksIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4ODAsIDB4MDcsIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4OTIsIDB4MzksIDB4OTAsCisweDAyLCAweDI4LCAweGUwLCAweDU0LCAweGZjLCAweDQ1LCAweDI3LCAweGYwLCAweDkwLCAweDcwLCAweDljLCAweGU1LCAweDNhLCAweGYwLCAweGEzLCAweGU1LAorMHg0NywgMHhmMCwgMHg5MCwgMHg3MCwgMHg0MSwgMHhlNSwgMHgzYSwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHgwMiwgMHgyOSwgMHhmMCwgMHgzMCwgMHg0NywKKzB4MDQsIDB4YWYsIDB4NDUsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4NDUsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OGYsCisweDUwLCAweGQyLCAweDU5LCAweDIyLCAweDhmLCAweDU0LCAweGQyLCAweDU4LCAweDIyLCAweGU0LCAweGY1LCAweDYyLCAweGMyLCAweGFmLCAweGU1LCAweDUxLAorMHgxNCwgMHg2MCwgMHg0NiwgMHgxNCwgMHg2MCwgMHg2MiwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNywgMHgwMywgMHhkMiwgMHg1OSwgMHg3NSwKKzB4NTUsIDB4MDEsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MjIsIDB4OTAsIDB4MDQsCisweDM0LCAweGUwLCAweGI0LCAweDAyLCAweDFiLCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDE2LCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDExLCAweDdmLAorMHgyMCwgMHgxMiwgMHgxNiwgMHgzZiwgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmMywgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMSwgMHg4MCwgMHg3MywKKzB4ZTUsIDB4NTAsIDB4NzAsIDB4MDUsIDB4NzUsIDB4NjIsIDB4MDMsIDB4ODAsIDB4NmEsIDB4OTAsIDB4MTIsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MDMsIDB4NzAsCisweDExLCAweDdmLCAweDIwLCAweDEyLCAweDE2LCAweDNmLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDc1LCAweDUxLCAweDAyLAorMHg4MCwgMHg1MSwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwMiwgMHg4MCwgMHg0NiwgMHg5MCwgMHgwMiwgMHhhMywgMHhlMCwgMHgyMCwgMHhlNiwgMHgzYiwgMHg5MCwKKzB4MDQsIDB4MzcsIDB4ZTAsIDB4NjQsIDB4MjIsIDB4NzAsIDB4MzMsIDB4OTAsIDB4MDEsIDB4OGEsIDB4NzQsIDB4N2UsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OTYsCisweGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LCAweDBhLCAweGYwLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDU0LCAweGYwLCAweGYwLCAweGEzLCAweGUwLAorMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg1NCwgMHhmOSwgMHhmMCwgMHg3NSwKKzB4NjIsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4ODAsIDB4MDksIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDUsIDB4NzUsIDB4NjIsCisweDAzLCAweGY1LCAweDUxLCAweGU1LCAweDYyLCAweDYwLCAweDE1LCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGFkLCAweDYyLAorMHhhZiwgMHg0MCwgMHgxMiwgMHgxNywgMHg4ZCwgMHhlNSwgMHg2MiwgMHhiNCwgMHgwMywgMHgwMiwgMHhkMiwgMHgwMywgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwKKzB4YWYsIDB4MzAsIDB4MDEsIDB4MTIsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksIDB4YzIsIDB4MDEsIDB4N2QsCisweDAyLCAweGFmLCAweDQwLCAweDEyLCAweDE3LCAweDhkLCAweGU1LCAweDUyLCAweDE0LCAweDYwLCAweDA5LCAweDA0LCAweDcwLCAweDRjLCAweDc1LCAweDUyLAorMHgwMSwgMHg3NSwgMHg1NSwgMHgwMywgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg0NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg0NCwKKzB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsCisweDAzLCAweGYwLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDQ0LCAweDBjLCAweGYwLAorMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwYiwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwgMHg0MSwgMHgxMiwgMHgxNywKKzB4OGQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsCisweDJkLCAweGU0LCAweGZlLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGUwLCAweGI0LCAweGZmLAorMHgxOSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwKKzB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsCisweDIyLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDMwLCAweGUxLCAweDRkLCAweGMyLCAweGFmLCAweDkwLCAweDcwLCAweDI4LCAweGUwLCAweDkwLCAweDEwLAorMHgxYywgMHhmMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhmMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHg5MCwgMHgxMCwKKzB4MWUsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4ZjUsIDB4NjIsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4ZjMsIDB4OTAsCisweDEwLCAweDFjLCAweGUwLCAweDkwLCAweDcwLCAweDI4LCAweGYwLCAweDkwLCAweDEwLCAweDFkLCAweGUwLCAweDkwLCAweDcwLCAweDI5LCAweGYwLCAweDkwLAorMHgxMCwgMHgxZSwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhmMCwgMHgzMCwgMHg0YSwgMHgwNywgMHg5MCwgMHg3MCwgMHgyNCwgMHhlMCwgMHg0NCwgMHgwMSwKKzB4ZjAsIDB4YzIsIDB4MDUsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTQsIDB4M2YsCisweGZmLCAweGZmLCAweGZmLCAweDAyLCAweDEwLCAweDI4LCAweDAyLCAweDEwLCAweDMyLCAweDAyLCAweDEwLCAweDc4LCAweDAyLCAweDEyLCAweDY3LCAweDAyLAorMHgxMiwgMHg2OCwgMHgwMiwgMHgxMiwgMHg4NywgMHgwMiwgMHgxMiwgMHg4YywgMHgxMiwgMHgxMiwgMHg4OCwgMHgyMiwgMHgwMiwgMHgxNiwgMHg0OSwgMHgwMiwKKzB4MTcsIDB4MWYsIDB4MDIsIDB4MTMsIDB4NzcsIDB4MDIsIDB4MTIsIDB4OGQsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MjAsIDB4MGQsIDB4MDMsIDB4MTIsIDB4MTcsCisweGMxLCAweDIyLCAweDkwLCAweDAxLCAweDhjLCAweGUwLCAweDMwLCAweGUzLCAweDFiLCAweGU1LCAweDRjLCAweDMwLCAweGUwLCAweDA0LCAweDdmLCAweDQwLAorMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHg3NCwgMHgwOCwgMHhmMCwgMHhlNCwKKzB4OTAsIDB4MDEsIDB4YTcsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MWMsIDB4OTAsIDB4MDEsIDB4ODAsIDB4ZTAsIDB4YjQsCisweDAyLCAweDE1LCAweGEzLCAweGUwLCAweGI0LCAweDAxLCAweDEwLCAweDkwLCAweDAxLCAweDg0LCAweGUwLCAweGI0LCAweDgxLCAweDA5LCAweDkwLCAweDAxLAorMHg4YywgMHg3NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgwZCwgMHhkZCwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwKKzB4MTIsIDB4NjYsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MTIsIDB4MGEsIDB4YjYsIDB4MTAsCisweGI3LCAweDMxLCAweDEwLCAweGUwLCAweDUwLCAweDExLCAweDA0LCAweDUxLCAweDExLCAweDBkLCAweDUyLCAweDExLCAweDBkLCAweDUzLCAweDExLCAweDBkLAorMHg1NCwgMHgxMSwgMHg0ZSwgMHg1NSwgMHgxMSwgMHg3ZSwgMHg3MCwgMHgxMSwgMHhhOSwgMHg3MSwgMHgxMSwgMHhkNywgMHg3MiwgMHgxMiwgMHgxZCwgMHg3MywKKzB4MTIsIDB4M2UsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjYsIDB4MjAsIDB4MDIsIDB4MDMsIDB4MzAsIDB4MDMsIDB4MWQsIDB4N2QsIDB4MDIsIDB4YWYsCisweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LAorMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg4NSwgMHg1NiwgMHg0MSwgMHhkMiwgMHgwMiwgMHgyMiwKKzB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4OTAsIDB4NzAsIDB4MTEsCisweGUwLCAweDY0LCAweDA4LCAweDYwLCAweDA4LCAweGUwLCAweDY0LCAweDIwLCAweDYwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDc1LCAweDRlLCAweDAzLAorMHg3NSwgMHg0ZiwgMHgyMCwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg0NywgMHgyMiwgMHg5MCwgMHgwNCwgMHgwNCwKKzB4ZTAsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4NWQsIDB4ZjUsIDB4NTcsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDcsIDB4MjUsIDB4NTcsCisweGY4LCAweGM2LCAweGVmLCAweGM2LCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZmLCAweDc0LCAweDQ4LCAweDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLAorMHhjNiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwKKzB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4ZTUsIDB4NDcsCisweDY0LCAweDA3LCAweDYwLCAweDBiLCAweGU1LCAweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDA1LCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDA4LCAweDkwLAorMHg3MCwgMHgxMSwgMHhlMCwgMHg1NCwgMHgwZiwgMHhmNSwgMHgzYSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgwOCwgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMywKKzB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDYsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4ZDIsIDB4MDQsIDB4MjIsIDB4OTAsIDB4NzAsCisweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZkLCAweGVkLCAweGY4LCAweGU2LCAweGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LAorMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwKKzB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsCisweDExLCAweGUwLCAweGZkLCAweGVkLCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLAorMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwKKzB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4OTAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YjQsIDB4NzAsIDB4MWUsIDB4YTMsIDB4ZTAsCisweGI0LCAweDMwLCAweDE5LCAweDkwLCAweDA1LCAweDA4LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGZkLCAweDkwLCAweDA1LCAweDA1LCAweGUwLCAweDU0LAorMHhmYiwgMHhmMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlZCwgMHg1NCwgMHhmZSwgMHg5MCwgMHgwNSwgMHgwOCwgMHhmMCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhmNSwKKzB4NGYsIDB4NzUsIDB4M2EsIDB4ZmYsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsCisweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDRiLCAweDgwLCAweDQyLCAweDkwLCAweDcwLCAweDEwLAorMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg5MywgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwKKzB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4MmEsIDB4ODAsIDB4MjEsIDB4OTAsIDB4NzAsCisweDEwLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDRhLCAweGQyLCAweDA1LCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLAorMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgwNywgMHg5MCwKKzB4NzAsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MjIsIDB4MjIsIDB4ZTUsIDB4NTMsIDB4NzAsIDB4MWEsIDB4MzAsIDB4NjAsIDB4MDksIDB4YjIsCisweDRkLCAweDMwLCAweDRkLCAweDA0LCAweDA1LCAweDQ2LCAweGMyLCAweDA0LCAweGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLAorMHgxNSwgMHg0ZiwgMHg3MCwgMHgwMiwgMHgxNSwgMHg0ZSwgMHgyMiwgMHgyMiwgMHhjMiwgMHg0MiwgMHhkMywgMHgyMiwgMHgyMiwgMHhjMiwgMHg0YiwgMHhjMiwKKzB4NGMsIDB4ZTUsIDB4NDQsIDB4MTIsIDB4MGEsIDB4YjYsIDB4MTIsIDB4YWYsIDB4MDAsIDB4MTMsIDB4NDIsIDB4MDQsIDB4MTMsIDB4M2UsIDB4MDgsIDB4MTMsCisweDE5LCAweDEwLCAweDEyLCAweGMzLCAweDIwLCAweDEyLCAweGUzLCAweDYwLCAweDEyLCAweGY0LCAweGEwLCAweDAwLCAweDAwLCAweDEzLCAweDQ0LCAweDg1LAorMHg0OCwgMHg0MywgMHg4NSwgMHg0YSwgMHg0MiwgMHg4NSwgMHg0YywgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywKKzB4NDQsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDgsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGEsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsCisweDQyLCAweGU1LCAweDRjLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDY2LCAweDUzLCAweDQzLAorMHgwZiwgMHg4MCwgMHg2MSwgMHg4NSwgMHg0OSwgMHg0MywgMHg4NSwgMHg0YiwgMHg0MiwgMHg4NSwgMHg0ZCwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwKKzB4NzAsIDB4NTIsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDksIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGIsIDB4YzQsIDB4NTQsIDB4MGYsCisweGY1LCAweDQyLCAweGU1LCAweDRkLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDM1LCAweGU1LAorMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgxMCwgMHhmNSwgMHg0MywgMHg4MCwgMHgyYiwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNCwgMHgwNiwgMHg1MywgMHg1ZSwKKzB4ZmIsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDUsIDB4MDYsIDB4NDMsIDB4NWUsIDB4MDQsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsCisweDQ3LCAweGI0LCAweDA2LCAweDEwLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDMwLCAweGY1LCAweDQzLCAweDgwLCAweDA2LCAweGQyLCAweDRiLAorMHg4MCwgMHgwMiwgMHhkMiwgMHg0YywgMHhlNCwgMHhmNSwgMHgyNSwgMHhlNSwgMHg0MiwgMHhjNCwgMHg1NCwgMHhmMCwgMHhmZiwgMHhlNSwgMHg0MywgMHg1NCwKKzB4MGYsIDB4NGYsIDB4ZjUsIDB4NWYsIDB4OTAsIDB4NzAsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NWUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NGEsIDB4ZjAsCisweGEzLCAweGU1LCAweDQ4LCAweGYwLCAweGEzLCAweGU1LCAweDRjLCAweGYwLCAweGEzLCAweGU1LCAweDQ0LCAweGYwLCAweGEzLCAweGU1LCAweDQyLCAweGYwLAorMHhhMywgMHhlNSwgMHg0MywgMHhmMCwgMHhkMiwgMHg2MCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2MCwgMHgxMCwgMHgyNCwgMHhjMCwgMHg3MCwgMHgwMywgMHgxMiwKKzB4MTYsIDB4MjksIDB4MTIsIDB4MTMsIDB4OGMsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDQsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4OTAsIDB4MDQsCisweDE0LCAweGUwLCAweDU0LCAweDBlLCAweDYwLCAweDA0LCAweGQyLCAweDE4LCAweDgwLCAweDA4LCAweGU1LCAweDRlLCAweDQ1LCAweDRmLCAweDI0LCAweGZmLAorMHg5MiwgMHgxOCwgMHhkMiwgMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHhhMiwgMHhlNCwgMHg5MiwgMHgxOSwgMHg3NCwgMHgxZSwgMHhmMCwgMHhlNSwKKzB4NWYsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4MmQsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MTMsIDB4MzAsIDB4MTgsIDB4MDUsIDB4ZTUsIDB4NWYsIDB4MjAsIDB4ZTUsCisweDBiLCAweDMwLCAweDE5LCAweDE5LCAweGU1LCAweDVmLCAweDU0LCAweDMwLCAweGZmLCAweGJmLCAweDMwLCAweDExLCAweGU1LCAweDI1LCAweDcwLCAweDA1LAorMHg3NSwgMHgyNSwgMHgwYywgMHg4MCwgMHgwMiwgMHgxNSwgMHgyNSwgMHhkMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwZiwgMHhlNSwgMHg1ZiwgMHgzMCwKKzB4ZTYsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDMsCisweDcwLCAweDIxLCAweDMwLCAweDRiLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDE4LCAweGU1LCAweDI1LCAweDcwLCAweDAzLCAweDMwLAorMHg0YywgMHgxMSwgMHhjMiwgMHg0YywgMHhlNSwgMHgyNSwgMHg3MCwgMHgwNSwgMHg3NSwgMHgyNSwgMHgwNywgMHg4MCwgMHgwMiwgMHgxNSwgMHgyNSwgMHhkMiwKKzB4NmMsIDB4ZDIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MTQsIDB4ZTUsIDB4NDQsIDB4MjAsIDB4ZTMsIDB4MGIsIDB4ZTUsIDB4M2EsIDB4NjQsCisweDAyLCAweDYwLCAweDA1LCAweGU1LCAweDNhLCAweGI0LCAweDAzLCAweDA0LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDkwLCAweDcwLCAweDQ2LCAweGU1LAorMHgyZCwgMHhmMCwgMHgyMCwgMHg2OSwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMCwgMHgwMiwgMHhiMiwgMHg2OCwgMHgyMCwgMHg2YiwgMHgwNywgMHhlNSwKKzB4NWUsIDB4MjAsIDB4ZTEsIDB4MDIsIDB4YjIsIDB4NmEsIDB4MjAsIDB4NmQsIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDIsIDB4YjIsIDB4NmMsCisweDkwLCAweDcwLCAweDQ3LCAweGU1LCAweDJkLCAweGYwLCAweDc1LCAweDJlLCAweDQwLCAweDIwLCAweDY5LCAweDA0LCAweGEyLCAweDY4LCAweDgwLCAweDI2LAorMHgzMCwgMHg2OCwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMSwKKzB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsCisweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDczLCAweDkyLCAweDcyLCAweDIwLCAweDZiLCAweDA0LCAweGEyLCAweDZhLCAweDgwLAorMHgyNiwgMHgzMCwgMHg2YSwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMCwgMHgwNCwgMHg3ZiwKKzB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsCisweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDc1LCAweDkyLCAweDc0LCAweDIwLCAweDZkLCAweDA0LCAweGEyLCAweDZjLAorMHg4MCwgMHgyNiwgMHgzMCwgMHg2YywgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMSwgMHgwNCwKKzB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsCisweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDcxLCAweDkyLCAweDcwLCAweDkwLCAweDEwLCAweDAwLCAweGUwLAorMHg5MCwgMHgxMCwgMHgyZiwgMHhmMCwgMHg5MCwgMHgxMCwgMHgwMywgMHhlMCwgMHhjMywgMHg5NCwgMHgzMCwgMHg0MCwgMHgxNCwgMHhhMiwgMHg3MSwgMHg5MiwKKzB4NzcsIDB4YTIsIDB4NzAsIDB4OTIsIDB4NzYsIDB4ZTUsIDB4MmUsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4MmUsIDB4YzIsIDB4NzcsIDB4ZDIsCisweDc2LCAweDkwLCAweDEwLCAweDJmLCAweGU1LCAweDJlLCAweGYwLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDRjLCAweDkwLCAweDAyLCAweDI5LAorMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg0MywgMHhjNCwgMHg1NCwgMHgwZiwgMHgxNCwgMHg2MCwgMHgxNCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgyMywKKzB4MjQsIDB4MDMsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4MTgsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MzAsIDB4NDcsIDB4MGYsIDB4ODAsIDB4MDcsCisweDkwLCAweDAyLCAweDI4LCAweGUwLCAweDIwLCAweDQ3LCAweDA2LCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDE2LCAweDE4LCAweDQ0LCAweDAxLCAweGYwLAorMHgwMiwgMHgxNiwgMHgxOCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHgwMiwKKzB4MjgsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4NGYsIDB4ZjAsIDB4MDIsIDB4MTYsIDB4MTgsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDcsIDB4NjAsIDB4MGYsIDB4ZTUsCisweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDA5LCAweGU1LCAweDQ3LCAweDY0LCAweDA5LCAweDYwLCAweDAzLCAweDAyLCAweDE2LCAweDE4LCAweGU0LCAweGY1LAorMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhmYywgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyZCwgMHgxNCwgMHg2MCwgMHgyZSwKKzB4MTQsIDB4NjAsIDB4MzYsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4NWYsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MWYsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NjksIDB4ZTUsCisweDQ2LCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGFmLCAweGYwLCAweDIwLCAweDQ3LCAweDA0LCAweDdlLCAweDAxLAorMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZiwgMHg2ZSwgMHgyNCwgMHhmZiwgMHg4MCwgMHg0NSwgMHhhMiwgMHg0NywgMHg4MCwgMHg0MSwgMHhlNSwgMHg0NiwKKzB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MjcsIDB4YzMsIDB4ODAsIDB4MjQsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsIDB4NTQsIDB4MzgsCisweGMzLCAweDk0LCAweDMwLCAweDUwLCAweDA2LCAweDdlLCAweDAwLCAweDdmLCAweDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDAwLCAweDIwLAorMHg0NywgMHgwNCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZCwgMHgwMCwgMHhlZiwgMHg2ZCwgMHg0ZSwgMHgyNCwgMHhmZiwgMHg5MiwgMHgzOCwgMHhhMiwKKzB4NDcsIDB4YjMsIDB4OTIsIDB4MzksIDB4ODAsIDB4MTksIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsCisweDM5LCAweGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDM4LCAweDgwLCAweDA3LCAweGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDM4LCAweDkyLCAweDM5LCAweDkwLAorMHgwMiwgMHgyOCwgMHhlMCwgMHg1NCwgMHhmYywgMHg0NSwgMHgyNywgMHhmMCwgMHg5MCwgMHg3MCwgMHg5YywgMHhlNSwgMHgzYSwgMHhmMCwgMHhhMywgMHhlNSwKKzB4NDcsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4NDEsIDB4ZTUsIDB4M2EsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZjAsIDB4MzAsIDB4NDcsCisweDA0LCAweGFmLCAweDQ1LCAweDgwLCAweDA0LCAweGU1LCAweDQ1LCAweGY0LCAweGZmLCAweDkwLCAweDAyLCAweDI4LCAweGVmLCAweGYwLCAweDIyLCAweDhmLAorMHg1MCwgMHhkMiwgMHg1OSwgMHgyMiwgMHg4ZiwgMHg1NCwgMHhkMiwgMHg1OCwgMHgyMiwgMHhlNCwgMHhmNSwgMHg2MiwgMHhjMiwgMHhhZiwgMHhlNSwgMHg1MSwKKzB4MTQsIDB4NjAsIDB4NDYsIDB4MTQsIDB4NjAsIDB4NjIsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTcsIDB4MDMsIDB4ZDIsIDB4NTksIDB4NzUsCisweDU1LCAweDAxLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGEzLCAweGUwLCAweDIwLCAweGU3LCAweDIyLCAweDkwLCAweDA0LAorMHgzNCwgMHhlMCwgMHhiNCwgMHgwMiwgMHgxYiwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMiwgMHgxNiwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMiwgMHgxMSwgMHg3ZiwKKzB4MjAsIDB4MTIsIDB4MTYsIDB4M2YsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZjMsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDEsIDB4ODAsIDB4NzMsCisweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDYyLCAweDAzLCAweDgwLCAweDZhLCAweDkwLCAweDEyLCAweDAwLCAweGUwLCAweDU0LCAweDAzLCAweDcwLAorMHgxMSwgMHg3ZiwgMHgyMCwgMHgxMiwgMHgxNiwgMHgzZiwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMiwKKzB4ODAsIDB4NTEsIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDIsIDB4ODAsIDB4NDYsIDB4OTAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4MjAsIDB4ZTYsIDB4M2IsIDB4OTAsCisweDA0LCAweDM3LCAweGUwLCAweDY0LCAweDIyLCAweDcwLCAweDMzLCAweDkwLCAweDAxLCAweDhhLCAweDc0LCAweDdlLCAweGYwLCAweDkwLCAweDAxLCAweDk2LAorMHhmMCwgMHg5MCwgMHgxMiwgMHgwNCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwKKzB4NTQsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZmEsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NTQsIDB4ZjksIDB4ZjAsIDB4NzUsCisweDYyLCAweDAxLCAweDc1LCAweDU1LCAweDAyLCAweGU0LCAweGY1LCAweDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDYyLAorMHgwMywgMHhmNSwgMHg1MSwgMHhlNSwgMHg2MiwgMHg2MCwgMHgxNSwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHhhZCwgMHg2MiwKKzB4YWYsIDB4NDAsIDB4MTIsIDB4MTcsIDB4OGQsIDB4ZTUsIDB4NjIsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsCisweGFmLCAweDMwLCAweDAxLCAweDEyLCAweGU0LCAweDkwLCAweDAxLCAweDk2LCAweGYwLCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGMyLCAweDAxLCAweDdkLAorMHgwMiwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxNywgMHg4ZCwgMHhlNSwgMHg1MiwgMHgxNCwgMHg2MCwgMHgwOSwgMHgwNCwgMHg3MCwgMHg0YywgMHg3NSwgMHg1MiwKKzB4MDEsIDB4NzUsIDB4NTUsIDB4MDMsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NDQsCisweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LAorMHgwMywgMHhmMCwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwYywgMHhmMCwKKzB4ZTQsIDB4ZjUsIDB4NTIsIDB4ZjUsIDB4NTUsIDB4MzAsIDB4MDIsIDB4MGIsIDB4YzIsIDB4MDIsIDB4N2QsIDB4MDEsIDB4YWYsIDB4NDEsIDB4MTIsIDB4MTcsCisweDhkLCAweDgwLCAweDAyLCAweGMyLCAweDAzLCAweGU0LCAweDkwLCAweDAxLCAweDk2LCAweGYwLCAweGQyLCAweGFmLCAweDIyLCAweGVmLCAweGY0LCAweDYwLAorMHgyZCwgMHhlNCwgMHhmZSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlMCwgMHhiNCwgMHhmZiwKKzB4MTksIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4NzQsIDB4MWMsIDB4MmUsCisweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVkLCAweGYwLCAweDIyLCAweDBlLCAweGJlLCAweDA0LCAweGQ1LCAweDIyLCAweDIyLAorMHgyMiwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHg0ZCwgMHhjMiwgMHhhZiwgMHg5MCwgMHg3MCwgMHgyOCwgMHhlMCwgMHg5MCwgMHgxMCwKKzB4MWMsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4OTAsIDB4MTAsCisweDFlLCAweGYwLCAweDkwLCAweDEwLCAweDFjLCAweGUwLCAweGY1LCAweDYyLCAweDkwLCAweDEwLCAweDFlLCAweGUwLCAweDIwLCAweGUxLCAweGYzLCAweDkwLAorMHgxMCwgMHgxYywgMHhlMCwgMHg5MCwgMHg3MCwgMHgyOCwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhmMCwgMHg5MCwKKzB4MTAsIDB4MWUsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZjAsIDB4MzAsIDB4NGEsIDB4MDcsIDB4OTAsIDB4NzAsIDB4MjQsIDB4ZTAsIDB4NDQsIDB4MDEsCisweGYwLCAweGMyLCAweDA1LCAweGQyLCAweGFmLCAweDIyLCAweDIyLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDliLCAweGMwLCB9IDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbGVhcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9sZWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxOGMxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbGVhcC5oCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWxlYXAuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworKi8KKyNpZm5kZWYgX19MRUFQX0hfXworI2RlZmluZSBfX0xFQVBfSF9fCisKKy8vIE1lc3NhZ2VzIGZvciBBc3NvY2lhdGUgc3RhdGUgbWFjaGluZQorI2RlZmluZSBMRUFQX01BQ0hJTkVfQkFTRSAgICAgICAgICAgICAgICAgICAzMAorCisjZGVmaW5lIExFQVBfTVNHX1JFUVVFU1RfSURFTlRJVFkgICAgICAgICAgIDMxCisjZGVmaW5lIExFQVBfTVNHX1JFUVVFU1RfTEVBUCAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIExFQVBfTVNHX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgIDMzCisjZGVmaW5lIExFQVBfTVNHX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIExFQVBfTVNHX1JFU1BPTlNFX0xFQVAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIExFQVBfTVNHX0VBUE9MS0VZICAgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIExFQVBfTVNHX1VOS05PV04gICAgICAgICAgICAgICAgICAgIDM3CisjZGVmaW5lIExFQVBfTVNHICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4CisvLyEgYXNzb2Mgc3RhdGUtbWFjaGluZSBzdGF0ZXMKKyNkZWZpbmUgTEVBUF9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBMRUFQX1dBSVRfSURFTlRJVFlfUkVRVUVTVCAgICAgICAgICAxCisjZGVmaW5lIExFQVBfV0FJVF9DSEFOTExFTkdFX1JFUVVFU1QgICAgICAgIDIKKyNkZWZpbmUgTEVBUF9XQUlUX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBMRUFQX1dBSVRfQ0hBTkxMRU5HRV9SRVNQT05TRSAgICAgICA0CisjZGVmaW5lIExFQVBfV0FJVF9FQVBPTEtFWSAgICAgICAgICAgICAgICAgIDUKKworI2RlZmluZSBMRUFQX1JFQVNPTl9JTlZBTElEX0FVVEggICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTEVBUF9SRUFTT05fQVVUSF9USU1FT1VUICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIExFQVBfUkVBU09OX0NIQUxMRU5HRV9GUk9NX0FQX0ZBSUxFRCAgICAgICAgMHgwMworI2RlZmluZSBMRUFQX1JFQVNPTl9DSEFMTEVOR0VfVE9fQVBfRkFJTEVEICAgICAgICAgIDB4MDQKKworI2RlZmluZSBDSVNDT19BdXRoTW9kZUxFQVAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQ0lTQ09fQXV0aE1vZGVMRUFQTm9uZSAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIExFQVBfQVVUSF9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAwMDAKKyNkZWZpbmUgTEVBUF9DSEFMTEVOR0VfUkVTUE9OU0VfTEVOR1RIICAgICAgICAgICAgICAyNAorI2RlZmluZSBMRUFQX0NIQUxMRU5HRV9SRVFVRVNUX0xFTkdUSCAgICAgICAgICAgICAgIDgKKwordHlwZWRlZiBzdHJ1Y3QgX0xFQVBfRUFQT0xfSEVBREVSXyB7CisgICAgVUNIQVIgICAgICAgVmVyc2lvbjsKKyAgICBVQ0hBUiAgICAgICBUeXBlOworICAgIFVDSEFSICAgICAgIExlbmd0aFsyXTsKK30gTEVBUF9FQVBPTF9IRUFERVIsICpQTEVBUF9FQVBPTF9IRUFERVI7CisKK3R5cGVkZWYgc3RydWN0IF9MRUFQX0VBUE9MX1BBQ0tFVF8geworICAgIFVDSEFSICAgICAgIENvZGU7CisgICAgVUNIQVIgICAgICAgSWRlbnRpZmllcjsKKyAgICBVQ0hBUiAgICAgICBMZW5ndGhbMl07CisgICAgVUNIQVIgICAgICAgVHlwZTsKK30gTEVBUF9FQVBPTF9QQUNLRVQsICpQTEVBUF9FQVBPTF9QQUNLRVQ7CisKK3R5cGVkZWYgc3RydWN0IF9MRUFQX0VBUF9DT05URU5UU18geworICAgIFVDSEFSICAgICAgIFZlcnNpb247CisgICAgVUNIQVIgICAgICAgUmVzZXJ2ZWQ7CisgICAgVUNIQVIgICAgICAgTGVuZ3RoOworfSBMRUFQX0VBUF9DT05URU5UUywgKlBMRUFQX0VBUF9DT05URU5UUzsKKworLyoqKiBFQVBPTCBrZXkgKioqLwordHlwZWRlZiBzdHJ1Y3QgX0VBUE9MX0tFWV9IRUFERVJfIHsKKyAgICBVQ0hBUiAgICAgICBUeXBlOworICAgIFVDSEFSICAgICAgIExlbmd0aFsyXTsKKyAgICBVQ0hBUiAgICAgICBDb3VudGVyWzhdOworICAgIFVDSEFSICAgICAgIElWWzE2XTsKKyAgICBVQ0hBUiAgICAgICBJbmRleDsKKyAgICBVQ0hBUiAgICAgICBTaWduYXR1cmVbMTZdOworfSBFQVBPTF9LRVlfSEVBREVSLCAqUEVBUE9MX0tFWV9IRUFERVI7CisKK0JPT0xFQU4gTGVhcE1zZ1R5cGVTdWJzdCgKKyAgICBJTiAgVUNIQVIgICBFQVBUeXBlLAorICAgIE9VVCBVTE9ORyAgICpNc2dUeXBlKTsKKworVk9JRCBMZWFwTWFjaGluZVBlcmZvcm1BY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gU1RBVEVfTUFDSElORSAgICAqUywKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBMZWFwTWFjSGVhZGVySW5pdCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisgICAgSU4gIE9VVCBQSEVBREVSXzgwMl8xMSAgcEhkcjgwMjExLAorICAgIElOICBVQ0hBUiAgICAgICAgICAgICAgIHdlcCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgICAgICBwQWRkcjMpOworCitWT0lEIExlYXBTdGFydEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBMZWFwSWRlbnRpdHlBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICAqRWxlbSk7CisKK1ZPSUQgTGVhcFBlZXJDaGFsbGVuZ2VBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICAqRWxlbSk7CisKK1ZPSUQgSGFzaFB3ZCgKKyAgICBJTiAgUFVDSEFSICBwd2QsCisgICAgSU4gIElOVCAgICAgcHdkbGVuLAorICAgIE9VVCBQVUNIQVIgIGhhc2gpOworCitWT0lEIFBlZXJDaGFsbGVuZ2VSZXNwb25zZSgKKyAgICBJTiAgUFVDSEFSICBzekNoYWxsZW5nZSwKKyAgICBJTiAgUFVDSEFSICBzbWJQYXNzd2QsCisgICAgT1VUIFBVQ0hBUiAgc3pSZXNwb25zZSk7CisKK1ZPSUQgUGFyaXR5S2V5KAorICAgIE9VVCBQVUNIQVIgIHN6T3V0LAorICAgIElOICBQVUNIQVIgIHN6SW4pOworCitWT0lEIERlc0tleSgKKyAgICBPVVQgVUxPTkcgICBrWzE2XVsyXSwKKyAgICBJTiAgUFVDSEFSICBrZXksCisgICAgSU4gIElOVCAgICAgZGVjcnlwdCk7CisKK1ZPSUQgRGVzKAorICAgIElOICBVTE9ORyAgIGtzWzE2XVsyXSwKKyAgICBPVVQgVUNIQVIgICBibG9ja1s4XSk7CisKK1ZPSUQgRGVzRW5jcnlwdCgKKyAgICBJTiAgUFVDSEFSICBzekNsZWFyLAorICAgIElOICBQVUNIQVIgIHN6S2V5LAorICAgIE9VVCBQVUNIQVIgIHN6T3V0KTsKKworVk9JRCBMZWFwTmV0d29ya0NoYWxsZW5nZUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBMZWFwTmV0d29ya0NoYWxsZW5nZVJlc3BvbnNlKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIEhhc2hwd2RIYXNoKAorICAgIElOICBQVUNIQVIgIGhhc2gsCisgICAgSU4gIFBVQ0hBUiAgaGFzaGhhc2gpOworCitWT0lEIFByb2Nlc3NTZXNzaW9uS2V5KAorICAgIE9VVCBQVUNIQVIgIFNlc3Npb25LZXksCisgICAgSU4gIFBVQ0hBUiAgaGFzaDIsCisgICAgSU4gIFBVQ0hBUiAgQ2hhbGxlbmdlVG9SYWRpdXMsCisgICAgSU4gIFBVQ0hBUiAgQ2hhbGxlbmdlUmVzcG9uc2VGcm9tUmFkaXVzLAorICAgIElOICBQVUNIQVIgIENoYWxsZW5nZUZyb21SYWRpdXMsCisgICAgSU4gIFBVQ0hBUiAgQ2hhbGxlbmdlUmVzcG9uc2VUb1JhZGl1cyk7CisKK1ZPSUQgTGVhcEVhcG9sS2V5QWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIFJvZ3VlQXBUYWJsZUluaXQoCisgICAgSU4gUk9HVUVBUF9UQUJMRSAgICAqVGFiKTsKKworVUxPTkcgUm9ndWVBcFRhYmxlU2VhcmNoKAorICAgIElOIFJPR1VFQVBfVEFCTEUgICAgKlRhYiwKKyAgICBJTiBQVUNIQVIgICAgICAgICAgIHBBZGRyKTsKKworVk9JRCBSb2d1ZUFwRW50cnlTZXQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgT1VUIFJPR1VFQVBfRU5UUlkgICAqcFJvZ3VlQXAsCisgICAgSU4gUFVDSEFSICAgICAgICAgICBwQWRkciwKKyAgICBJTiBVQ0hBUiAgICAgICAgICAgIEZhaWxlQ29kZSk7CisKK1VMT05HIFJvZ3VlQXBUYWJsZVNldEVudHJ5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIE9VVCBST0dVRUFQX1RBQkxFICAqVGFiLAorICAgIElOIFBVQ0hBUiAgICAgICAgICAgcEFkZHIsCisgICAgSU4gVUNIQVIgICAgICAgICAgICBGYWlsZUNvZGUpOworCitWT0lEIFJvZ3VlQXBUYWJsZURlbGV0ZUVudHJ5KAorICAgIElOIE9VVCBST0dVRUFQX1RBQkxFICpUYWIsCisgICAgSU4gUFVDSEFSICAgICAgICAgIHBBZGRyKTsKKworVk9JRCBMZWFwQXV0aFRpbWVvdXQoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBMZWFwU2VuZFJvZ3VlQVBSZXBvcnQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitCT09MRUFOIENDS01Bc3NvY1JzcFNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBWT0lEICAgICAgICAgICAgICpNc2csCisgICAgSU4gVUxPTkcgICAgICAgICAgICBNc2dMZW4pOworCisjZW5kaWYgIC8vIF9fTEVBUF9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbGlua19saXN0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2xpbmtfbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NTIxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2xpbmtfbGlzdC5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fTElOS19MSVNUX0hfXworI2RlZmluZSBfX0xJTktfTElTVF9IX18KKwordHlwZWRlZiBzdHJ1Y3QgX0xJU1RfRU5UUlkKK3sKKwlzdHJ1Y3QgX0xJU1RfRU5UUlkgKnBOZXh0OworfSBMSVNUX0VOVFJZLCAqUExJU1RfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0IF9MSVNUX0hFQURSCit7CisJUExJU1RfRU5UUlkgcEhlYWQ7CisJUExJU1RfRU5UUlkgcFRhaWw7CisJVUNIQVIgc2l6ZTsKK30gTElTVF9IRUFERVIsICpQTElTVF9IRUFERVI7CisKK3N0YXRpYyBpbmxpbmUgVk9JRCBpbml0TGlzdCgKKwlJTiBQTElTVF9IRUFERVIgcExpc3QpCit7CisJcExpc3QtPnBIZWFkID0gcExpc3QtPnBUYWlsID0gTlVMTDsKKwlwTGlzdC0+c2l6ZSA9IDA7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIFZPSUQgaW5zZXJ0VGFpbExpc3QoCisJSU4gUExJU1RfSEVBREVSIHBMaXN0LAorCUlOIFBMSVNUX0VOVFJZIHBFbnRyeSkKK3sKKwlwRW50cnktPnBOZXh0ID0gTlVMTDsKKwlpZiAocExpc3QtPnBUYWlsKQorCQlwTGlzdC0+cFRhaWwtPnBOZXh0ID0gcEVudHJ5OworCWVsc2UKKwkJcExpc3QtPnBIZWFkID0gcEVudHJ5OworCXBMaXN0LT5wVGFpbCA9IHBFbnRyeTsKKwlwTGlzdC0+c2l6ZSsrOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIFBMSVNUX0VOVFJZIHJlbW92ZUhlYWRMaXN0KAorCUlOIFBMSVNUX0hFQURFUiBwTGlzdCkKK3sKKwlQTElTVF9FTlRSWSBwTmV4dDsKKwlQTElTVF9FTlRSWSBwRW50cnk7CisKKwlwRW50cnkgPSBwTGlzdC0+cEhlYWQ7CisJaWYgKHBMaXN0LT5wSGVhZCAhPSBOVUxMKQorCXsKKwkJcE5leHQgPSBwTGlzdC0+cEhlYWQtPnBOZXh0OworCQlwTGlzdC0+cEhlYWQgPSBwTmV4dDsKKwkJaWYgKHBOZXh0ID09IE5VTEwpCisJCQlwTGlzdC0+cFRhaWwgPSBOVUxMOworCQlwTGlzdC0+c2l6ZS0tOworCX0KKwlyZXR1cm4gcEVudHJ5OworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRMaXN0U2l6ZSgKKwlJTiBQTElTVF9IRUFERVIgcExpc3QpCit7CisJcmV0dXJuIHBMaXN0LT5zaXplOworfQorCitzdGF0aWMgaW5saW5lIFBMSVNUX0VOVFJZIGRlbEVudHJ5TGlzdCgKKwlJTiBQTElTVF9IRUFERVIgcExpc3QsCisJSU4gUExJU1RfRU5UUlkgcEVudHJ5KQoreworCVBMSVNUX0VOVFJZIHBDdXJFbnRyeTsKKwlQTElTVF9FTlRSWSBwUHJ2RW50cnk7CisKKwlpZihwTGlzdC0+cEhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZihwRW50cnkgPT0gcExpc3QtPnBIZWFkKQorCXsKKwkJcEN1ckVudHJ5ID0gcExpc3QtPnBIZWFkOworCQlwTGlzdC0+cEhlYWQgPSBwQ3VyRW50cnktPnBOZXh0OworCisJCWlmKHBMaXN0LT5wSGVhZCA9PSBOVUxMKQorCQkJcExpc3QtPnBUYWlsID0gTlVMTDsKKworCQlwTGlzdC0+c2l6ZS0tOworCQlyZXR1cm4gcEN1ckVudHJ5OworCX0KKworCXBQcnZFbnRyeSA9IHBMaXN0LT5wSGVhZDsKKwlwQ3VyRW50cnkgPSBwUHJ2RW50cnktPnBOZXh0OworCXdoaWxlKHBDdXJFbnRyeSAhPSBOVUxMKQorCXsKKwkJaWYgKHBFbnRyeSA9PSBwQ3VyRW50cnkpCisJCXsKKwkJCXBQcnZFbnRyeS0+cE5leHQgPSBwQ3VyRW50cnktPnBOZXh0OworCisJCQlpZihwRW50cnkgPT0gcExpc3QtPnBUYWlsKQorCQkJCXBMaXN0LT5wVGFpbCA9IHBQcnZFbnRyeTsKKworCQkJcExpc3QtPnNpemUtLTsKKwkJCWJyZWFrOworCQl9CisJCXBQcnZFbnRyeSA9IHBDdXJFbnRyeTsKKwkJcEN1ckVudHJ5ID0gcFBydkVudHJ5LT5wTmV4dDsKKwl9CisKKwlyZXR1cm4gcEN1ckVudHJ5OworfQorCisjZW5kaWYgLy8gX19fTElOS19MSVNUX0hfXyAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWU1YjUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaApAQCAtMCwwICsxLDQyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fTUQ0X0hfXworI2RlZmluZSBfX01ENF9IX18KKworLyogTUQ0IGNvbnRleHQuICovCit0eXBlZGVmCXN0cnVjdAlfTUQ0X0NUWF8JeworCVVMT05HCXN0YXRlWzRdOyAgICAgICAgLyogc3RhdGUgKEFCQ0QpICovCisJVUxPTkcJY291bnRbMl07ICAgICAgICAvKiBudW1iZXIgb2YgYml0cywgbW9kdWxvIDJeNjQgKGxzYiBmaXJzdCkgKi8KKwlVQ0hBUglidWZmZXJbNjRdOyAgICAgIC8qIGlucHV0IGJ1ZmZlciAqLworfQlNRDRfQ1RYOworCitWT0lEIE1ENEluaXQgKE1ENF9DVFggKik7CitWT0lEIE1ENFVwZGF0ZSAoTUQ0X0NUWCAqLCBQVUNIQVIsIFVJTlQpOworVk9JRCBNRDRGaW5hbCAoVUNIQVIgWzE2XSwgTUQ0X0NUWCAqKTsKKworI2VuZGlmIC8vX19NRDRfSF9fClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1ZGIxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ1LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJbWQ1LmgKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCQkJTW9kaWZpY2F0aW9uIGxvZ3MKKwlqYW4JCQkxMC0yOC0wMwkJSW5pdGlhbAorCVJpdGEgICAgCTExLTIzLTA0CQlNb2RpZnkgTUQ1IGFuZCBTSEEtMQorKi8KKworI2lmbmRlZgl1aW50OAorI2RlZmluZQl1aW50OCAgdW5zaWduZWQJY2hhcgorI2VuZGlmCisKKyNpZm5kZWYJdWludDMyCisjZGVmaW5lCXVpbnQzMiB1bnNpZ25lZAlsb25nIGludAorI2VuZGlmCisKKworI2lmbmRlZglfX01ENV9IX18KKyNkZWZpbmUJX19NRDVfSF9fCisKKyNkZWZpbmUgTUQ1X01BQ19MRU4gMTYKKwordHlwZWRlZiBzdHJ1Y3QgX01ENV9DVFggeworICAgIFVJTlQzMiAgIEJ1Zls0XTsgICAgICAgICAgICAgLy8gYnVmZmVycyBvZiBmb3VyIHN0YXRlcworCVVDSEFSICAgSW5wdXRbNjRdOyAgICAgICAgICAvLyBpbnB1dCBtZXNzYWdlCisJVUlOVDMyICAgTGVuSW5CaXRDb3VudFsyXTsgICAvLyBsZW5ndGggY291bnRlciBmb3IgaW5wdXQgbWVzc2FnZSwgMCB1cCB0byA2NCBiaXRzCit9ICAgTUQ1X0NUWDsKKworVk9JRCBNRDVJbml0KE1ENV9DVFggKnBDdHgpOworVk9JRCBNRDVVcGRhdGUoTUQ1X0NUWCAqcEN0eCwgVUNIQVIgKnBEYXRhLCBVSU5UMzIgTGVuSW5CeXRlcyk7CitWT0lEIE1ENUZpbmFsKFVDSEFSIERpZ2VzdFsxNl0sIE1ENV9DVFggKnBDdHgpOworVk9JRCBNRDVUcmFuc2Zvcm0oVUlOVDMyIEJ1Zls0XSwgVUlOVDMyIE1lc1sxNl0pOworCit2b2lkIG1kNV9tYWModTggKmtleSwgc2l6ZV90IGtleV9sZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptYWMpOwordm9pZCBobWFjX21kNSh1OCAqa2V5LCBzaXplX3Qga2V5X2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1hYyk7CisKKy8vCisvLyBTSEEgY29udGV4dAorLy8KK3R5cGVkZWYJc3RydWN0IF9TSEFfQ1RYCit7CisJVUlOVDMyICAgQnVmWzVdOyAgICAgICAgICAgICAvLyBidWZmZXJzIG9mIGZpdmUgc3RhdGVzCisJVUNIQVIgICBJbnB1dFs4MF07ICAgICAgICAgIC8vIGlucHV0IG1lc3NhZ2UKKwlVSU5UMzIgICBMZW5JbkJpdENvdW50WzJdOyAgIC8vIGxlbmd0aCBjb3VudGVyIGZvciBpbnB1dCBtZXNzYWdlLCAwIHVwIHRvIDY0IGJpdHMKKworfQlTSEFfQ1RYOworCitWT0lEIFNIQUluaXQoU0hBX0NUWCAqcEN0eCk7CitVQ0hBUiBTSEFVcGRhdGUoU0hBX0NUWCAqcEN0eCwgVUNIQVIgKnBEYXRhLCBVSU5UMzIgTGVuSW5CeXRlcyk7CitWT0lEIFNIQUZpbmFsKFNIQV9DVFggKnBDdHgsIFVDSEFSIERpZ2VzdFsyMF0pOworVk9JRCBTSEFUcmFuc2Zvcm0oVUlOVDMyIEJ1Zls1XSwgVUlOVDMyIE1lc1syMF0pOworCisjZGVmaW5lIFNIQV9ESUdFU1RfTEVOIDIwCisjZW5kaWYgLy8gX19NRDVfSF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9BRVNfSAorI2RlZmluZQlfQUVTX0gKKwordHlwZWRlZglzdHJ1Y3QKK3sKKwl1aW50MzIgZXJrWzY0XTsJCS8qIGVuY3J5cHRpb24gcm91bmQJa2V5cyAqLworCXVpbnQzMiBkcmtbNjRdOwkJLyogZGVjcnlwdGlvbiByb3VuZAlrZXlzICovCisJaW50CW5yOwkJCQkvKiBudW1iZXIgb2Ygcm91bmRzCSovCit9CithZXNfY29udGV4dDsKKworaW50CSBydG1wX2Flc19zZXRfa2V5KCBhZXNfY29udGV4dCAqY3R4LAl1aW50OCAqa2V5LAlpbnQJbmJpdHMgKTsKK3ZvaWQgcnRtcF9hZXNfZW5jcnlwdCggYWVzX2NvbnRleHQgKmN0eCwJdWludDggaW5wdXRbMTZdLCB1aW50OCBvdXRwdXRbMTZdICk7Cit2b2lkIHJ0bXBfYWVzX2RlY3J5cHQoIGFlc19jb250ZXh0ICpjdHgsCXVpbnQ4IGlucHV0WzE2XSwgdWludDggb3V0cHV0WzE2XSApOworCit2b2lkIEYoY2hhciAqcGFzc3dvcmQsIHVuc2lnbmVkIGNoYXIgKnNzaWQsIGludCBzc2lkbGVuZ3RoLCBpbnQgaXRlcmF0aW9ucywgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpOworaW50IFBhc3N3b3JkSGFzaChjaGFyICpwYXNzd29yZCwgdW5zaWduZWQgY2hhciAqc3NpZCwgaW50IHNzaWRsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCk7CisKKyNlbmRpZiAvKiBhZXMuaAkqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21sbWUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWxtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDM1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21sbWUuaApAQCAtMCwwICsxLDE0NjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJbWxtZS5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obiBDaGFuZwkyMDAzLTA4LTI4CQlDcmVhdGVkCisJSm9obiBDaGFuZyAgMjAwNC0wOS0wNiAgICAgIG1vZGlmaWVkIGZvciBSVDI2MDAKKworKi8KKyNpZm5kZWYgX19NTE1FX0hfXworI2RlZmluZSBfX01MTUVfSF9fCisKKy8vZXh0ZXJuIFVDSEFSIEJST0FEQ0FTVF9BRERSW107CisKKy8vIG1heGltdW0gc3VwcG9ydGVkIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gLQorLy8gRVNTLCBJQlNTLCBQcml2YWN5LCBTaG9ydCBQcmVhbWJsZSwgU3BlY3RydW0gbWdtdCwgU2hvcnQgU2xvdAorI2RlZmluZSBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPICAgMHgwNTMzCisKKyNkZWZpbmUgRU5EX09GX0FSR1MgICAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIExGU1JfTUFTSyAgICAgICAgICAgICAgICAgICAweDgwMDAwMDU3CisjZGVmaW5lIE1MTUVfVEFTS19FWEVDX0lOVFYgICAgICAgICAxMDAvKjIwMCovICAgICAgIC8vCisjZGVmaW5lIExFQURfVElNRSAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1MTUVfVEFTS19FWEVDX01VTFRJUExFICAgICAgIDEwICAvKjUqLyAgICAgICAvLyBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAqIE1MTUVfVEFTS19FWEVDX0lOVFYgPSAxIHNlYworI2RlZmluZSBSRU9SREVSX0VYRUNfSU5UViAgICAgICAgIAkxMDAgICAgICAgLy8gMC4xIHNlYworLy8jZGVmaW5lIFRCVFRfUFJFTE9BRF9USU1FICAgICAgICAgMzg0ICAgICAgICAvLyB1c2VjLiBMb21nUHJlYW1ibGUgKyAyNC1ieXRlIGF0IDFNYnBzCisKKy8vIFRoZSBkZWZpbml0aW9uIG9mIFJhZGFyIGRldGVjdGlvbiBkdXJhdGlvbiByZWdpb24KKyNkZWZpbmUgQ0UJCTAKKyNkZWZpbmUgRkNDCQkxCisjZGVmaW5lIEpBUAkJMgorI2RlZmluZSBKQVBfVzUzCTMKKyNkZWZpbmUgSkFQX1c1Ngk0CisjZGVmaW5lIE1BWF9SRF9SRUdJT04gNQorCisjaWZkZWYJTkRJUzUxX01JTklQT1JUCisjZGVmaW5lIEJFQUNPTl9MT1NUX1RJTUUgICAgICAgICAgICA0MDAwICAgICAgIC8vIDIwNDggbXNlYyA9IDIgc2VjCisjZWxzZQorI2RlZmluZSBCRUFDT05fTE9TVF9USU1FICAgICAgICAgICAgNCAqIE9TX0haICAgIC8vIDIwNDggbXNlYyA9IDIgc2VjCisjZW5kaWYKKworI2RlZmluZSBETFNfVElNRU9VVCAgICAgICAgICAgICAgICAgMTIwMCAgICAgIC8vIHVuaXQ6IG1zZWMKKyNkZWZpbmUgQVVUSF9USU1FT1VUICAgICAgICAgICAgICAgIDMwMCAgICAgICAvLyB1bml0OiBtc2VjCisjZGVmaW5lIEFTU09DX1RJTUVPVVQgICAgICAgICAgICAgICAzMDAgICAgICAgLy8gdW5pdDogbXNlYworI2RlZmluZSBKT0lOX1RJTUVPVVQgICAgICAgICAgICAgICAgMiAqIE9TX0haICAgICAgLy8gdW5pdDogbXNlYworI2RlZmluZSBTSE9SVF9DSEFOTkVMX1RJTUUgICAgICAgICAgOTAgICAgICAgIC8vIHVuaXQ6IG1zZWMKKyNkZWZpbmUgTUlOX0NIQU5ORUxfVElNRSAgICAgICAgICAgIDExMCAgICAgICAgLy8gdW5pdDogbXNlYywgZm9yIGR1YWwgYmFuZCBzY2FuCisjZGVmaW5lIE1BWF9DSEFOTkVMX1RJTUUgICAgICAgICAgICAxNDAgICAgICAgLy8gdW5pdDogbXNlYywgZm9yIHNpbmdsZSBiYW5kIHNjYW4KKyNkZWZpbmUJRkFTVF9BQ1RJVkVfU0NBTl9USU1FCSAgICAzMCAJCSAgLy8gQWN0aXZlIHNjYW4gd2FpdGluZyBmb3IgcHJvYmUgcmVzcG9uc2UgdGltZQorI2RlZmluZSBDV19NSU5fSU5fQklUUyAgICAgICAgICAgICAgNCAgICAgICAgIC8vIGFjdHVhbCBDd01pbiA9IDJeQ1dfTUlOX0lOX0JJVFMgLSAxCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmbmRlZiBDT05GSUdfQVBfU1VQUE9SVAorI2RlZmluZSBDV19NQVhfSU5fQklUUyAgICAgICAgICAgICAgMTAgICAgICAgIC8vIGFjdHVhbCBDd01heCA9IDJeQ1dfTUFYX0lOX0JJVFMgLSAxCisjZW5kaWYKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitleHRlcm4gVUlOVDMyIENXX01BWF9JTl9CSVRTOworI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisKKy8vIE5vdGU6IFJTU0lfVE9fREJNX09GRlNFVCBoYXMgYmVlbiBjaGFuZ2VkIHRvIHZhcmlhYmxlIGZvciBuZXcgUkYgKDIwMDQtMDcyMCkuCisvLyBTSG91bGQgbm90IHJlZmVyIHRvIHRoaXMgY29uc3RhbnQgYW55bW9yZQorLy8jZGVmaW5lIFJTU0lfVE9fREJNX09GRlNFVCAgICAgICAgICAxMjAgLy8gZm9yIFJUMjUzMCBSU1NJLTExNSA9IGRCbQorI2RlZmluZSBSU1NJX0ZPUl9NSURfVFhfUE9XRVIgICAgICAgLTU1ICAvLyAtNTUgZGIgaXMgY29uc2lkZXJlZCBtaWQtZGlzdGFuY2UKKyNkZWZpbmUgUlNTSV9GT1JfTE9XX1RYX1BPV0VSICAgICAgIC00NSAgLy8gLTQ1IGRiIGlzIGNvbnNpZGVyZWQgdmVyeSBzaG9ydCBkaXN0YW5jZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGlnaWJsZSB0byB1c2UgYSBsb3dlciBUWCBwb3dlcgorI2RlZmluZSBSU1NJX0ZPUl9MT1dFU1RfVFhfUE9XRVIgICAgLTMwCisvLyNkZWZpbmUgTUlEX1RYX1BPV0VSX0RFTFRBICAgICAgICAgIDAgICAvLyAwIGRiIGZyb20gZnVsbCBUWCBwb3dlciB1cG9uIG1pZC1kaXN0YW5jZSB0byBBUAorI2RlZmluZSBMT1dfVFhfUE9XRVJfREVMVEEgICAgICAgICAgNiAgICAvLyAtMyBkYiBmcm9tIGZ1bGwgVFggcG93ZXIgdXBvbiB2ZXJ5IHNob3J0IGRpc3RhbmNlLiAxIGdyYWRlIGlzIDAuNSBkYgorI2RlZmluZSBMT1dFU1RfVFhfUE9XRVJfREVMVEEgICAgICAgMTYgICAvLyAtOCBkYiBmcm9tIGZ1bGwgVFggcG93ZXIgdXBvbiBzaG9ydGVzdCBkaXN0YW5jZS4gMSBncmFkZSBpcyAwLjUgZGIKKworI2RlZmluZSBSU1NJX1RSSUdHRVJFRF9VUE9OX0JFTE9XX1RIUkVTSE9MRCAgICAgMAorI2RlZmluZSBSU1NJX1RSSUdHRVJFRF9VUE9OX0VYQ0NFRURfVEhSRVNIT0xEICAgMQorI2RlZmluZSBSU1NJX1RIUkVTSE9MRF9GT1JfUk9BTUlORyAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgUlNTSV9ERUxUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gQ2hhbm5lbCBRdWFsaXR5IEluZGljYXRpb24KKyNkZWZpbmUgQ1FJX0lTX0dPT0QoY3FpKSAgICAgICAgICAgICgoY3FpKSA+PSA1MCkKKy8vI2RlZmluZSBDUUlfSVNfRkFJUihjcWkpICAgICAgICAgICgoKGNxaSkgPj0gMjApICYmICgoY3FpKSA8IDUwKSkKKyNkZWZpbmUgQ1FJX0lTX1BPT1IoY3FpKSAgICAgICAgICAgIChjcWkgPCA1MCkgIC8vKCgoY3FpKSA+PSA1KSAmJiAoKGNxaSkgPCAyMCkpCisjZGVmaW5lIENRSV9JU19CQUQoY3FpKSAgICAgICAgICAgICAoY3FpIDwgNSkKKyNkZWZpbmUgQ1FJX0lTX0RFQUQoY3FpKSAgICAgICAgICAgIChjcWkgPT0gMCkKKworLy8gd2VpZ2h0aW5nIGZhY3RvciB0byBjYWxjdWxhdGUgQ2hhbm5lbCBxdWFsaXR5LCB0b3RhbCBzaG91bGQgYmUgMTAwJQorI2RlZmluZSBSU1NJX1dFSUdIVElORyAgICAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBUWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBSWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyNkZWZpbmUgUEVFUl9LRVlfTk9UX1VTRUQgICAgICAgICAgICAgICAgMAorLy8jZGVmaW5lIFBFRVJfS0VZXzY0X0JJVCAgICAgICAgICAgICAgICAgIDY0CisvLyNkZWZpbmUgUEVFUl9LRVlfMTI4X0JJVCAgICAgICAgICAgICAgICAgMTI4CisKKy8vI2RlZmluZSBQRUVSX0tFWV82NEJJVF9MRU4gICAgICAgICAgICAgICA4CisvLyNkZWZpbmUgUEVFUl9LRVlfMTI4QklUX0xFTiAgICAgICAgICAgICAgMTYKKworI2RlZmluZSBCU1NfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBNQVhfTEVOX09GX01MTUVfUVVFVUUgICAgICAgICAgICA0MCAvLzEwCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNkZWZpbmUgU0NBTl9QQVNTSVZFICAgICAgICAgICAgICAgICAgICAgMTgJCS8vIHNjYW4gd2l0aCBubyBwcm9iZSByZXF1ZXN0LCBvbmx5IHdhaXQgYmVhY29uIGFuZCBwcm9iZSByZXNwb25zZQorI2RlZmluZSBTQ0FOX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAxOQkJLy8gc2NhbiB3aXRoIHByb2JlIHJlcXVlc3QsIGFuZCB3YWl0IGJlYWNvbiBhbmQgcHJvYmUgcmVzcG9uc2UKKyNkZWZpbmUJU0NBTl9DSVNDT19QQVNTSVZFCQkJCSAyMAkJLy8gU2luZ2xlIGNoYW5uZWwgcGFzc2l2ZSBzY2FuCisjZGVmaW5lCVNDQU5fQ0lTQ09fQUNUSVZFCQkJCSAyMQkJLy8gU2luZ2xlIGNoYW5uZWwgYWN0aXZlIHNjYW4KKyNkZWZpbmUJU0NBTl9DSVNDT19OT0lTRQkJCQkgMjIJCS8vIFNpbmdsZSBjaGFubmVsIHBhc3NpdmUgc2NhbiBmb3Igbm9pc2UgaGlzdG9ncmFtIGNvbGxlY3Rpb24KKyNkZWZpbmUJU0NBTl9DSVNDT19DSEFOTkVMX0xPQUQJCQkgMjMJCS8vIFNpbmdsZSBjaGFubmVsIHBhc3NpdmUgc2NhbiBmb3IgY2hhbm5lbCBsb2FkIGNvbGxlY3Rpb24KKyNkZWZpbmUgRkFTVF9TQ0FOX0FDVElWRSAgICAgICAgICAgICAgICAgMjQJCS8vIHNjYW4gd2l0aCBwcm9iZSByZXF1ZXN0LCBhbmQgd2FpdCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlCisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisjZGVmaW5lIFNDQU5fMjA0MF9CU1NfQ09FWElTVCAgICAgICAgICAgICAgICAgIDI2CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCisvLyNkZWZpbmUgQlNTX1RBQkxFX0VNUFRZKHgpICAgICAgICAgICAgICgoeCkuQnNzTnIgPT0gMCkKKyNkZWZpbmUgTUFDX0FERFJfSVNfR1JPVVAoQWRkcikgICAgICAgKCgoQWRkclswXSkgJiAweDAxKSkKKyNkZWZpbmUgTUFDX0FERFJfSEFTSChBZGRyKSAgICAgICAgICAgIChBZGRyWzBdIF4gQWRkclsxXSBeIEFkZHJbMl0gXiBBZGRyWzNdIF4gQWRkcls0XSBeIEFkZHJbNV0pCisjZGVmaW5lIE1BQ19BRERSX0hBU0hfSU5ERVgoQWRkcikgICAgICAoTUFDX0FERFJfSEFTSChBZGRyKSAlIEhBU0hfVEFCTEVfU0laRSkKKyNkZWZpbmUgVElEX01BQ19IQVNIKEFkZHIsVElEKSAgICAgICAgICAgIChUSUReQWRkclswXSBeIEFkZHJbMV0gXiBBZGRyWzJdIF4gQWRkclszXSBeIEFkZHJbNF0gXiBBZGRyWzVdKQorI2RlZmluZSBUSURfTUFDX0hBU0hfSU5ERVgoQWRkcixUSUQpICAgICAgKFRJRF9NQUNfSEFTSChBZGRyLFRJRCkgJSBIQVNIX1RBQkxFX1NJWkUpCisKKy8vIExFRCBDb250cm9sCisvLyBhc3NvaWF0aW9uIE9OLiBvbmUgTEVEIE9OLiBhbm90aGVyIGJsaW5raW5nIHdoZW4gVFgsIE9GRiB3aGVuIGlkbGUKKy8vIG5vIGFzc29jaWF0aW9uLCBib3RoIExFRCBvZmYKKyNkZWZpbmUgQVNJQ19MRURfQUNUX09OKHBBZCkgICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxNCwgMHgwMDAzMWU0NikKKyNkZWZpbmUgQVNJQ19MRURfQUNUX09GRihwQWQpICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxNCwgMHgwMDAwMWU0NikKKworLy8gYml0IGRlZmluaXRpb24gb2YgdGhlIDItYnl0ZSBwQkVBQ09OLT5DYXBhYmlsaXR5IGZpZWxkCisjZGVmaW5lIENBUF9JU19FU1NfT04oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxKSAhPSAwKQorI2RlZmluZSBDQVBfSVNfSUJTU19PTih4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMikgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX0NGX1BPTExBQkxFX09OKHgpICAgICAgICAgKCgoeCkgJiAweDAwMDQpICE9IDApCisjZGVmaW5lIENBUF9JU19DRl9QT0xMX1JFUV9PTih4KSAgICAgICAgICgoKHgpICYgMHgwMDA4KSAhPSAwKQorI2RlZmluZSBDQVBfSVNfUFJJVkFDWV9PTih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX1NIT1JUX1BSRUFNQkxFX09OKHgpICAgICAgKCgoeCkgJiAweDAwMjApICE9IDApCisjZGVmaW5lIENBUF9JU19QQkNDX09OKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwKSAhPSAwKQorI2RlZmluZSBDQVBfSVNfQUdJTElUWV9PTih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX1NQRUNUUlVNX01HTVQoeCkgICAgICAgICAgKCgoeCkgJiAweDAxMDApICE9IDApICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIENBUF9JU19RT1MoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMjAwKSAhPSAwKSAgLy8gODAyLjExZSBkOQorI2RlZmluZSBDQVBfSVNfU0hPUlRfU0xPVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDQwMCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX0FQU0QoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDApICE9IDApICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIENBUF9JU19JTU1FRF9CQSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwKSAhPSAwKSAgLy8gODAyLjExZSBkOQorI2RlZmluZSBDQVBfSVNfRFNTU19PRkRNKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX0RFTEFZX0JBKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDApICE9IDApICAvLyA4MDIuMTFlIGQ5CisKKyNkZWZpbmUgQ0FQX0dFTkVSQVRFKGVzcyxpYnNzLHByaXYsc19wcmUsc19zbG90LHNwZWN0cnVtKSAgKCgoZXNzKSA/IDB4MDAwMSA6IDB4MDAwMCkgfCAoKGlic3MpID8gMHgwMDAyIDogMHgwMDAwKSB8ICgocHJpdikgPyAweDAwMTAgOiAweDAwMDApIHwgKChzX3ByZSkgPyAweDAwMjAgOiAweDAwMDApIHwgKChzX3Nsb3QpID8gMHgwNDAwIDogMHgwMDAwKSB8ICgoc3BlY3RydW0pID8gMHgwMTAwIDogMHgwMDAwKSkKKworLy8jZGVmaW5lIFNUQV9RT1NfQ0FQQUJJTElUWSAgICAgICAgICAgICAgIDAgLy8gMS1ieXRlLiBzZWUgODAyLjExZSBkOS4wIGZvciBiaXQgZGVmaW5pdGlvbgorCisjZGVmaW5lIEVSUF9JU19OT05fRVJQX1BSRVNFTlQoeCkgICAgICAgICgoKHgpICYgMHgwMSkgIT0gMCkgICAgLy8gODAyLjExZworI2RlZmluZSBFUlBfSVNfVVNFX1BST1RFQ1RJT04oeCkgICAgICAgICAoKCh4KSAmIDB4MDIpICE9IDApICAgIC8vIDgwMi4xMWcKKyNkZWZpbmUgRVJQX0lTX1VTRV9CQVJLRVJfUFJFQU1CTEUoeCkgICAgKCgoeCkgJiAweDA0KSAhPSAwKSAgICAvLyA4MDIuMTFnCisKKyNkZWZpbmUgRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQgICAgICAgOC8vIDMgIC8vIGp1c3QgdGVzdCBieSBnYXJ5CisjZGVmaW5lIERSU19QRU5BTFRZICAgICAgICAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBCQV9OT1RVU0UgCTIKKy8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lCisjZGVmaW5lIElNTUVEX0JBIAkxCisjZGVmaW5lIERFTEFZX0JBCTAKKworLy8gQkEgSW5pdGlhdG9yIHN1YmZpZWxkIGluIERFTEJBIGZyYW1lCisjZGVmaW5lIE9SSUdJTkFUT1IJMQorI2RlZmluZSBSRUNJUElFTlQJMAorCisvLyBBRERCQSBTdGF0dXMgQ29kZQorI2RlZmluZSBBRERCQV9SRVNVTFRDT0RFX1NVQ0NFU1MJCQkJCTAKKyNkZWZpbmUgQUREQkFfUkVTVUxUQ09ERV9SRUZVU0VECQkJCQkzNworI2RlZmluZSBBRERCQV9SRVNVTFRDT0RFX0lOVkFMSURfUEFSQU1FVEVSUwkJCTM4CisKKy8vIERFTEJBIFJlYXNvbiBDb2RlCisjZGVmaW5lIERFTEJBX1JFQVNPTkNPREVfUVNUQV9MRUFWSU5HCQkJCTM2CisjZGVmaW5lIERFTEJBX1JFQVNPTkNPREVfRU5EX0JBCQkJCQkJMzcKKyNkZWZpbmUgREVMQkFfUkVBU09OQ09ERV9VTktOT1dOX0JBCQkJCQkzOAorI2RlZmluZSBERUxCQV9SRUFTT05DT0RFX1RJTUVPVVQJCQkJCTM5CisKKy8vIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycworI2RlZmluZSBSRVNFVF9PTkVfU0VDX1RYX0NOVChfX3BFbnRyeSkgXAoraWYgKCgoX19wRW50cnkpKSAhPSBOVUxMKSBcCit7IFwKKwkoX19wRW50cnkpLT5PbmVTZWNUeFJldHJ5T2tDb3VudCA9IDA7IFwKKwkoX19wRW50cnkpLT5PbmVTZWNUeEZhaWxDb3VudCA9IDA7IFwKKwkoX19wRW50cnkpLT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID0gMDsgXAorfQorCisvLworLy8gODAyLjExIGZyYW1lIGZvcm1hdHMKKy8vCisvLyAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJTFNJR1R4b3BQcm9TdXA6MTsKKwlVU0hPUlQJRm9ydHlfTWh6X0ludG9sZXJhbnQ6MTsKKwlVU0hPUlQJUFNNUDoxOworCVVTSE9SVAlDQ0ttb2RlaW40MDoxOworCVVTSE9SVAlBTXNkdVNpemU6MTsKKwlVU0hPUlQJRGVsYXllZEJBOjE7CS8vcnQyODYwYyBub3Qgc3VwcG9ydAorCVVTSE9SVAlSeFNUQkM6MjsKKwlVU0hPUlQJVHhTVEJDOjE7CisJVVNIT1JUCVNob3J0R0lmb3I0MDoxOwkvL2ZvcjQwTUh6CisJVVNIT1JUCVNob3J0R0lmb3IyMDoxOworCVVTSE9SVAlHRjoxOwkvL2dyZWVuIGZpZWxkCisJVVNIT1JUCU1pbW9QczoyOy8vbW9taSBwb3dlciBzYWZlCisJVVNIT1JUCUNoYW5uZWxXaWR0aDoxOworCVVTSE9SVAlBZHZDb2Rpbmc6MTsKKyNlbHNlCisJVVNIT1JUCUFkdkNvZGluZzoxOworCVVTSE9SVAlDaGFubmVsV2lkdGg6MTsKKwlVU0hPUlQJTWltb1BzOjI7Ly9tb21pIHBvd2VyIHNhZmUKKwlVU0hPUlQJR0Y6MTsJLy9ncmVlbiBmaWVsZAorCVVTSE9SVAlTaG9ydEdJZm9yMjA6MTsKKwlVU0hPUlQJU2hvcnRHSWZvcjQwOjE7CS8vZm9yNDBNSHoKKwlVU0hPUlQJVHhTVEJDOjE7CisJVVNIT1JUCVJ4U1RCQzoyOworCVVTSE9SVAlEZWxheWVkQkE6MTsJLy9ydDI4NjBjIG5vdCBzdXBwb3J0CisJVVNIT1JUCUFNc2R1U2l6ZToxOwkvLyBvbmx5IHN1cHBvcnQgYXMgemVybworCVVTSE9SVAlDQ0ttb2RlaW40MDoxOworCVVTSE9SVAlQU01QOjE7CisJVVNIT1JUCUZvcnR5X01oel9JbnRvbGVyYW50OjE7CisJVVNIT1JUCUxTSUdUeG9wUHJvU3VwOjE7CisjZW5kaWYJLyogIVJUX0JJR19FTkRJQU4gKi8KK30gSFRfQ0FQX0lORk8sICpQSFRfQ0FQX0lORk87CisKKy8vICBIVCBDYXBhYmlsaXR5IElORk8gZmllbGQgaW4gSFQgQ2FwIElFIC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCXJzdjozOy8vbW9taSBwb3dlciBzYWZlCisJVUNIQVIJTXBkdURlbnNpdHk6MzsKKwlVQ0hBUglNYXhSQW1wZHVGYWN0b3I6MjsKKyNlbHNlCisJVUNIQVIJTWF4UkFtcGR1RmFjdG9yOjI7CisJVUNIQVIJTXBkdURlbnNpdHk6MzsKKwlVQ0hBUglyc3Y6MzsvL21vbWkgcG93ZXIgc2FmZQorI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEhUX0NBUF9QQVJNLCAqUEhUX0NBUF9QQVJNOworCisvLyAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworCVVDSEFSCU1DU1NldFsxMF07CisJVUNIQVIJU3VwUmF0ZVsyXTsgIC8vIHVuaXQgOiAxTWJwcworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglyc3Y6MzsKKwlVQ0hBUglNcGR1RGVuc2l0eToxOworCVVDSEFSCVR4U3RyZWFtOjI7CisJVUNIQVIJVHhSeE5vdEVxdWFsOjE7CisJVUNIQVIJVHhNQ1NTZXREZWZpbmVkOjE7CisjZWxzZQorCVVDSEFSCVR4TUNTU2V0RGVmaW5lZDoxOworCVVDSEFSCVR4UnhOb3RFcXVhbDoxOworCVVDSEFSCVR4U3RyZWFtOjI7CisJVUNIQVIJTXBkdURlbnNpdHk6MTsKKwlVQ0hBUglyc3Y6MzsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJVUNIQVIJcnN2M1szXTsKK30gSFRfTUNTX1NFVCwgKlBIVF9NQ1NfU0VUOworCisvLyAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJcnN2Mjo0OworCVVTSE9SVAlSREdTdXBwb3J0OjE7CS8vcmV2ZXJzZSBEaXJlY3Rpb24gR3JhbnQgIHN1cHBvcnQKKwlVU0hPUlQJUGx1c0hUQzoxOwkvLytIVEMgY29udHJvbCBmaWVsZCBzdXBwb3J0CisJVVNIT1JUCU1DU0ZlZWRiYWNrOjI7CS8vMDpubyBNQ1MgZmVlZGJhY2ssIDI6dW5zb2xpY2l0ZWQgTUNTIGZlZWRiYWNrLCAzOkZ1bGwgTUNTIGZlZWRiYWNrLCAgMTpyc3YuCisJVVNIT1JUCXJzdjo1Oy8vbW9taSBwb3dlciBzYWZlCisJVVNIT1JUCVRyYW5UaW1lOjI7CisJVVNIT1JUCVBjbzoxOworI2Vsc2UKKwlVU0hPUlQJUGNvOjE7CisJVVNIT1JUCVRyYW5UaW1lOjI7CisJVVNIT1JUCXJzdjo1Oy8vbW9taSBwb3dlciBzYWZlCisJVVNIT1JUCU1DU0ZlZWRiYWNrOjI7CS8vMDpubyBNQ1MgZmVlZGJhY2ssIDI6dW5zb2xpY2l0ZWQgTUNTIGZlZWRiYWNrLCAzOkZ1bGwgTUNTIGZlZWRiYWNrLCAgMTpyc3YuCisJVVNIT1JUCVBsdXNIVEM6MTsJLy8rSFRDIGNvbnRyb2wgZmllbGQgc3VwcG9ydAorCVVTSE9SVAlSREdTdXBwb3J0OjE7CS8vcmV2ZXJzZSBEaXJlY3Rpb24gR3JhbnQgIHN1cHBvcnQKKwlVU0hPUlQJcnN2Mjo0OworI2VuZGlmIC8qIFJUX0JJR19FTkRJQU4gKi8KK30gRVhUX0hUX0NBUF9JTkZPLCAqUEVYVF9IVF9DQVBfSU5GTzsKKworLy8gIEhUIEJlYW1mb3JtaW5nIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0hUX0JGX0NBUHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUxPTkcJcnN2OjM7CisJVUxPTkcJQ2hhbkVzdGltYXRpb246MjsKKwlVTE9ORwlDU0lSb3dCRlN1cDoyOworCVVMT05HCUNvbVN0ZWVyQkZBbnRTdXA6MjsKKwlVTE9ORwlOb0NvbVN0ZWVyQkZBbnRTdXA6MjsKKwlVTE9ORwlDU0lCRkFudFN1cDoyOworCVVMT05HCU1pbkdyb3VwaW5nOjI7CisJVUxPTkcJRXhwQ29tQkY6MjsKKwlVTE9ORwlFeHBOb0NvbUJGOjI7CisJVUxPTkcJRXhwQ1NJRmJrOjI7CisJVUxPTkcJRXhwQ29tU3RlZXJDYXBhYmxlOjE7CisJVUxPTkcJRXhwTm9Db21TdGVlckNhcGFibGU6MTsKKwlVTE9ORwlFeHBDU0lDYXBhYmxlOjE7CisJVUxPTkcJQ2FsaWJyYXRpb246MjsKKwlVTE9ORwlJbXBUeEJGQ2FwYWJsZToxOworCVVMT05HCVR4TkRQQ2FwYWJsZToxOworCVVMT05HCVJ4TkRQQ2FwYWJsZToxOworCVVMT05HCVR4U291bmRDYXBhYmxlOjE7CisJVUxPTkcJUnhTb3VuZENhcGFibGU6MTsKKwlVTE9ORwlUeEJGUmVjQ2FwYWJsZToxOworI2Vsc2UKKwlVTE9ORwlUeEJGUmVjQ2FwYWJsZToxOworCVVMT05HCVJ4U291bmRDYXBhYmxlOjE7CisJVUxPTkcJVHhTb3VuZENhcGFibGU6MTsKKwlVTE9ORwlSeE5EUENhcGFibGU6MTsKKwlVTE9ORwlUeE5EUENhcGFibGU6MTsKKwlVTE9ORwlJbXBUeEJGQ2FwYWJsZToxOworCVVMT05HCUNhbGlicmF0aW9uOjI7CisJVUxPTkcJRXhwQ1NJQ2FwYWJsZToxOworCVVMT05HCUV4cE5vQ29tU3RlZXJDYXBhYmxlOjE7CisJVUxPTkcJRXhwQ29tU3RlZXJDYXBhYmxlOjE7CisJVUxPTkcJRXhwQ1NJRmJrOjI7CisJVUxPTkcJRXhwTm9Db21CRjoyOworCVVMT05HCUV4cENvbUJGOjI7CisJVUxPTkcJTWluR3JvdXBpbmc6MjsKKwlVTE9ORwlDU0lCRkFudFN1cDoyOworCVVMT05HCU5vQ29tU3RlZXJCRkFudFN1cDoyOworCVVMT05HCUNvbVN0ZWVyQkZBbnRTdXA6MjsKKwlVTE9ORwlDU0lSb3dCRlN1cDoyOworCVVMT05HCUNoYW5Fc3RpbWF0aW9uOjI7CisJVUxPTkcJcnN2OjM7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworfSBIVF9CRl9DQVAsICpQSFRfQkZfQ0FQOworCisvLyAgSFQgYW50ZW5uYSBzZWxlY3Rpb24gZmllbGQgaW4gSFQgQ2FwIElFIC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfSFRfQVNfQ0FQeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglyc3Y6MTsKKwlVQ0hBUglUeFNvdW5kUFBEVToxOworCVVDSEFSCVJ4QVNlbDoxOworCVVDSEFSCUFudEluZEZiazoxOworCVVDSEFSCUV4cENTSUZiazoxOworCVVDSEFSCUFudEluZEZia1R4QVNFTDoxOworCVVDSEFSCUV4cENTSUZia1R4QVNFTDoxOworCVVDSEFSCUFudFNlbGVjdDoxOworI2Vsc2UKKwlVQ0hBUglBbnRTZWxlY3Q6MTsKKwlVQ0hBUglFeHBDU0lGYmtUeEFTRUw6MTsKKwlVQ0hBUglBbnRJbmRGYmtUeEFTRUw6MTsKKwlVQ0hBUglFeHBDU0lGYms6MTsKKwlVQ0hBUglBbnRJbmRGYms6MTsKKwlVQ0hBUglSeEFTZWw6MTsKKwlVQ0hBUglUeFNvdW5kUFBEVToxOworCVVDSEFSCXJzdjoxOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KK30gSFRfQVNfQ0FQLCAqUEhUX0FTX0NBUDsKKworLy8gRHJhZnQgMS4wIHNldCBJRSBsZW5ndGggMjYsIGJ1dCBpcyBleHRlbnNpYmxlLi4KKyNkZWZpbmUgU0laRV9IVF9DQVBfSUUJCTI2CisvLyBUaGUgc3RydWN0dXJlIGZvciBIVCBDYXBhYmlsaXR5IElFLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9IVF9DQVBBQklMSVRZX0lFeworCUhUX0NBUF9JTkZPCQlIdENhcEluZm87CisJSFRfQ0FQX1BBUk0JCUh0Q2FwUGFybTsKKy8vCUhUX01DU19TRVQJCUh0TUNTU2V0OworCVVDSEFSCQkJTUNTU2V0WzE2XTsKKwlFWFRfSFRfQ0FQX0lORk8JRXh0SHRDYXBJbmZvOworCUhUX0JGX0NBUAkJVHhCRkNhcDsJLy8gYmVhbWZvcm1pbmcgY2FwLiBydDI4NjBjIG5vdCBzdXBwb3J0IGJlYW1mb3JtaW5nLgorCUhUX0FTX0NBUAkJQVNDYXA7CS8vYW50ZW5uYSBzZWxlY3Rpb24uCit9IEhUX0NBUEFCSUxJVFlfSUUsICpQSFRfQ0FQQUJJTElUWV9JRTsKKworCisvLyA4MDIuMTFuIGRyYWZ0MyByZWxhdGVkIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KKy8vIDcuMy4yLjYwCisjZGVmaW5lIGRvdDExT0JTU1NjYW5QYXNzaXZlRHdlbGwJCQkJCQkJMjAJLy8gaW4gVFUuIG1pbiBhbW91bnQgb2YgdGltZSB0aGF0IHRoZSBTVEEgY29udGlub3VzbHkgc2NhbnMgZWFjaCBjaGFubmVsIHdoZW4gcGVyZm9ybWluZyBhbiBhY3RpdmUgT0JTUyBzY2FuLgorI2RlZmluZSBkb3QxMU9CU1NTY2FuQWN0aXZlRHdlbGwJCQkJCQkJMTAJLy8gaW4gVFUubWluIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIFNUQSBjb250aW5vdXNseSBzY2FucyBlYWNoIGNoYW5uZWwgd2hlbiBwZXJmb3JtaW5nIGFuIHBhc3NpdmUgT0JTUyBzY2FuLgorI2RlZmluZSBkb3QxMUJTU1dpZHRoVHJpZ2dlclNjYW5JbnRlcnZhbAkJCQkJMzAwICAvLyBpbiBzZWMuIG1heCBpbnRlcnZhbCBiZXR3ZWVuIHNjYW4gb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgdG8gZGV0ZWN0IEJTUyBjaGFubmVsIHdpZHRoIHRyaWdnZXIgZXZlbnRzLgorI2RlZmluZSBkb3QxMU9CU1NTY2FuUGFzc2l2ZVRvdGFsUGVyQ2hhbm5lbAkJCQkJMjAwCS8vIGluIFRVLiBtaW4gdG90YWwgYW1vdW50IG9mIHRpbWUgdGhhdCB0aGUgU1RBIHNjYW5zIGVhY2ggY2hhbm5lbCB3aGVuIHBlcmZvcm1pbmcgYSBwYXNzaXZlIE9CU1Mgc2Nhbi4KKyNkZWZpbmUgZG90MTFPQlNTU2NhbkFjdGl2ZVRvdGFsUGVyQ2hhbm5lbAkJCQkJMjAJLy9pbiBUVS4gbWluIHRvdGFsIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIFNUQSBzY2FucyBlYWNoIGNoYW5uZWwgd2hlbiBwZXJmb3JtaW5nIGEgYWN0aXZlIE9CU1Mgc2NhbgorI2RlZmluZSBkb3QxMUJTU1dpZHRoQ2hhbm5lbFRyYW5zYWN0aW9uRGVsYXlGYWN0b3IJCQk1CS8vIG1pbiByYXRpbyBiZXR3ZWVuIHRoZSBkZWxheSB0aW1lIGluIHBlcmZvcm1pbmcgYSBzd2l0Y2ggZnJvbSAyME1IeiBCU1MgdG8gMjAvNDAgQlNTIG9wZXJhdGlvbiBhbmQgdGhlIG1heGltYQorCQkJCQkJCQkJCQkJCQkJCS8vCWludGVydmFsIGJldHdlZW4gb3ZlcmxhcHBpbmcgQlNTIHNjYW4gb3BlcmF0aW9ucy4KKyNkZWZpbmUgZG90MTFCU1NTY2FuQWN0aXZpdHlUaHJlc2hvbGQJCQkJCQkyNQkvLyBpbiAlJSwgbWF4IHRvdGFsIHRpbWUgdGhhdCBhIFNUQSBtYXkgYmUgYWN0aXZlIG9uIHRoZSBtZWRpdW0gZHVyaW5nIGEgcGVyaW9kIG9mCisJCQkJCQkJCQkJCQkJCQkJLy8JKGRvdDExQlNTV2lkdGhDaGFubmVsVHJhbnNhY3Rpb25EZWxheUZhY3RvciAqIGRvdDExQlNTV2lkdGhUcmlnZ2VyU2NhbkludGVydmFsKSBzZWNvbmRzIHdpdGhvdXQKKwkJCQkJCQkJCQkJCQkJCQkvLwliZWluZyBvYmxpZ2F0ZWQgdG8gcGVyZm9ybSBPQlNTIFNjYW4gb3BlcmF0aW9ucy4gZGVmYXVsdCBpcyAyNSg9PSAwLjI1JSkKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9PVkVSTEFQX0JTU19TQ0FOX0lFeworCVVTSE9SVAkJU2NhblBhc3NpdmVEd2VsbDsKKwlVU0hPUlQJCVNjYW5BY3RpdmVEd2VsbDsKKwlVU0hPUlQJCVRyaWdnZXJTY2FuSW50OwkJCQkvLyBUcmlnZ2VyIHNjYW4gaW50ZXJ2YWwKKwlVU0hPUlQJCVBhc3NpdmVUYWxQZXJDaGFubmVsOwkJLy8gcGFzc2l2ZSB0b3RhbCBwZXIgY2hhbm5lbAorCVVTSE9SVAkJQWN0aXZlVGFsUGVyQ2hhbm5lbDsJCS8vIGFjdGl2ZSB0b3RhbCBwZXIgY2hhbm5lbAorCVVTSE9SVAkJRGVsYXlGYWN0b3I7CQkJCS8vIEJTUyB3aWR0aCBjaGFubmVsIHRyYW5zaXRpb24gZGVsYXkgZmFjdG9yCisJVVNIT1JUCQlTY2FuQWN0VGhyZTsJCQkJLy8gU2NhbiBBY3Rpdml0eSB0aHJlc2hvbGQKK31PVkVSTEFQX0JTU19TQ0FOX0lFLCAqUE9WRVJMQVBfQlNTX1NDQU5fSUU7CisKKworLy8gIDcuMy4yLjU2LiAyMC80MCBDb2V4aXN0ZW5jZSBlbGVtZW50IHVzZWQgaW4gIEVsZW1lbnQgSUQgPSA3MiA9IElFXzIwNDBfQlNTX0NPRVhJU1QKK3R5cGVkZWYgdW5pb24gUEFDS0VEIF9CU1NfMjA0MF9DT0VYSVNUX0lFeworIHN0cnVjdCBQQUNLRUQgeworICNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUNIQVIJcnN2OjU7CisJVUNIQVIJQlNTMjBXaWR0aFJlcToxOworCVVDSEFSCUludG9sZXJhbnQ0MDoxOworCVVDSEFSCUluZm9SZXE6MTsKKyAjZWxzZQorCVVDSEFSCUluZm9SZXE6MTsKKwlVQ0hBUglJbnRvbGVyYW50NDA6MTsJCQkvLyBJbnRlci1CU1MuIHNldCAxIHdoZW4gcHJvaGliaXRzIGEgcmVjZWl2aW5nIEJTUyBmcm9tIG9wZXJhdGluZyBhcyBhIDIwLzQwIE1oeiBCU1MuCisJVUNIQVIJQlNTMjBXaWR0aFJlcToxOwkJLy8gSW50cmEtQlNTIHNldCAxIHdoZW4gcHJvaGliaXRzIGEgcmVjZWl2aW5nIEFQIGZyb20gb3BlcmF0aW5nIGl0cyBCU1MgYXMgYSAyMC80ME1IeiBCU1MuCisJVUNIQVIJcnN2OjU7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworICAgIH0gZmllbGQ7CisgVUNIQVIgICB3b3JkOworfSBCU1NfMjA0MF9DT0VYSVNUX0lFLCAqUEJTU18yMDQwX0NPRVhJU1RfSUU7CisKKwordHlwZWRlZiBzdHJ1Y3QgIF9UUklHR0VSX0VWRU5UQXsKKwlCT09MRUFOCQkJYlZhbGlkOworCVVDSEFSCUJTU0lEWzZdOworCVVDSEFSCVJlZ0NsYXNzOwkvLyBSZWd1bGF0b3J5IENsYXNzCisJVVNIT1JUCUNoYW5uZWw7CisJVUxPTkcJQ0RDb3VudGVyOyAgIC8vIE1haW50YWluIGEgc2VwZXJhdGUgY291bnQgZG93biBjb3VudGVyIGZvciBlYWNoIEV2ZW50IEEuCit9IFRSSUdHRVJfRVZFTlRBLCAqUFRSSUdHRVJfRVZFTlRBOworCisvLyAyMC80MCB0cmlnZ2VyIGV2ZW50IHRhYmxlCisvLyBJZiBvbmUgRXZlbnQgQSBkZWxldGUgb3IgY3JlYXRlZCwgb3IgaWYgRXZlbnQgQiBpcyBkZXRlY3RlZCBvciBub3QgZGV0ZWN0ZWQsIFNUQSBzaG91bGQgc2VuZCAyMDQwQlNTQ29leGlzdGVuY2UgdG8gQVAuCisjZGVmaW5lIE1BWF9UUklHR0VSX0VWRU5UCQk2NAordHlwZWRlZiBzdHJ1Y3QgIF9UUklHR0VSX0VWRU5UX1RBQnsKKwlVQ0hBUglFdmVudEFObzsKKwlUUklHR0VSX0VWRU5UQQlFdmVudEFbTUFYX1RSSUdHRVJfRVZFTlRdOworCVVMT05HCQkJRXZlbnRCQ291bnREb3duOwkvLyBDb3VudCBkb3duIGNvdW50ZXIgZm9yIEV2ZW50IEIuCit9IFRSSUdHRVJfRVZFTlRfVEFCLCAqUFRSSUdHRVJfRVZFTlRfVEFCOworCisvLyA3LjMuMjcgMjAvNDAgQnNzIENvZXhpc3RlbmNlIE1nbXQgY2FwYWJpbGl0eSB1c2VkIGluIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBpbmZvcm1hdGlvbiBJRSggSUQgPSAxMjcgPSBJRV9FWFRfQ0FQQUJJTElUWSkuCisvLwlUaGlzIGlzIHRoZSBmaXJzdCBvY3RldCBhbmQgd2FzIGRlZmluZWQgaW4gODAyLjExbiBEMy4wMyBhbmQgODAyLjExeUQ5LjAKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRVhUX0NBUF9JTkZPX0VMRU1FTlR7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCXJzdjI6NTsKKwlVQ0hBUglFeHRlbmRDaGFubmVsU3dpdGNoOjE7CisJVUNIQVIJcnN2OjE7CisJVUNIQVIJQnNzQ29leGlzdE1nbXRTdXBwb3J0OjE7CisjZWxzZQorCVVDSEFSCUJzc0NvZXhpc3RNZ210U3VwcG9ydDoxOworCVVDSEFSCXJzdjoxOworCVVDSEFSCUV4dGVuZENoYW5uZWxTd2l0Y2g6MTsKKwlVQ0hBUglyc3YyOjU7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworfUVYVF9DQVBfSU5GT19FTEVNRU5ULCAqUEVYVF9DQVBfSU5GT19FTEVNRU5UOworCisKKy8vIDgwMi4xMW4gNy4zLjIuNjEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UeworCVVDSEFSCQkJCQlFbGVtZW50SUQ7CQkvLyBJRCA9IElFXzIwNDBfQlNTX0NPRVhJU1QgPSA3MgorCVVDSEFSCQkJCQlMZW47CisJQlNTXzIwNDBfQ09FWElTVF9JRQkJQnNzQ29leGlzdEllOworfUJTU18yMDQwX0NPRVhJU1RfRUxFTUVOVCwgKlBCU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQ7CisKKworLy84MDIuMTFuIDcuMy4yLjU5Cit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0JTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JUeworCVVDSEFSCQkJCUVsZW1lbnRJRDsJCS8vIElEID0gSUVfMjA0MF9CU1NfSU5UT0xFUkFOVF9SRVBPUlQgPSA3MworCVVDSEFSCQkJCUxlbjsKKwlVQ0hBUgkJCQlSZWd1bGF0b3J5Q2xhc3M7CisJVUNIQVIJCQkJQ2hMaXN0WzBdOworfUJTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JULCAqUEJTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JUOworCisKKy8vIFRoZSBzdHJ1Y3R1cmUgZm9yIGNoYW5uZWwgc3dpdGNoIGFubm91Y2VtZW50IElFLiBUaGlzIGlzIGluIDgwMi4xMW4gRDMuMDMKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfQ0hBX1NXSVRDSF9BTk5PVU5DRV9JRXsKKwlVQ0hBUgkJCVN3aXRjaE1vZGU7CS8vY2hhbm5lbCBzd2l0Y2ggbW9kZQorCVVDSEFSCQkJTmV3Q2hhbm5lbDsJLy8KKwlVQ0hBUgkJCVN3aXRjaENvdW50OwkvLworfSBDSEFfU1dJVENIX0FOTk9VTkNFX0lFLCAqUENIQV9TV0lUQ0hfQU5OT1VOQ0VfSUU7CisKKworLy8gVGhlIHN0cnVjdHVyZSBmb3IgY2hhbm5lbCBzd2l0Y2ggYW5ub3VjZW1lbnQgSUUuIFRoaXMgaXMgaW4gODAyLjExbiBEMy4wMwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9TRUNfQ0hBX09GRlNFVF9JRXsKKwlVQ0hBUgkJCVNlY29uZGFyeUNoYW5uZWxPZmZzZXQ7CSAvLyAxOiBTZWNvbmRhcnkgYWJvdmUsIDM6IFNlY29uZGFyeSBiZWxvdywgMDogbm8gU2Vjb25kYXJ5Cit9IFNFQ19DSEFfT0ZGU0VUX0lFLCAqUFNFQ19DSEFfT0ZGU0VUX0lFOworCisKKy8vIFRoaXMgc3RydWN0dXJlIGlzIGV4dHJhY3RlZCBmcm9tIHN0cnVjdCBSVF9IVF9DQVBBQklMSVRZCit0eXBlZGVmIHN0cnVjdCB7CisJQk9PTEVBTgkJCWJIdEVuYWJsZTsJIC8vIElmIHdlIHNob3VsZCB1c2UgaHQgcmF0ZS4KKwlCT09MRUFOCQkJYlByZU5IdDsJIC8vIElmIHdlIHNob3VsZCB1c2UgaHQgcmF0ZS4KKwkvL1N1YnN0cmFjdCBmcm9tIEhUIENhcGFiaWxpdHkgSUUKKwlVQ0hBUgkJCU1DU1NldFsxNl07CS8vb25seSBzdXBvb3J0IE1DUz0wLTE1LDMyICwKK30gUlRfSFRfUEhZX0lORk8sICpQUlRfSFRfUEhZX0lORk87CisKKy8vVGhpcyBzdHJ1Y3R1cmUgc3Vic3RyYWN0cyByYWxpbmsgc3VwcG9ydHMgZnJvbSBhbGwgODAyLjExbi1yZWxhdGVkIGZlYXR1cmVzLgorLy9GZWF0dXJlcyBub3QgbGlzdGVkIGhlcmUgYnV0IGNvbnRhaW5lZCBpbiA4MDIuMTFuIHNwZWMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gcnQyODYwLgordHlwZWRlZiBzdHJ1Y3QgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJcnN2OjU7CisJVVNIT1JUCUFtc2R1U2l6ZToxOwkvLyBNYXggcmVjZWl2aW5nIEEtTVNEVSBzaXplCisJVVNIT1JUCUFtc2R1RW5hYmxlOjE7CS8vIEVuYWJsZSB0byB0cmFuc21pdCBBLU1TRFUuIFN1Z2dlc3QgZGlzYWJsZS4gV2Ugc2hvdWxkIHVzZSBBLU1QRFUgdG8gZ2FpbiBiZXN0IGJlbmlmaXQgb2YgODAyLjExbgorCVVTSE9SVAlSeFNUQkM6MjsJLy8gMiBiaXRzCisJVVNIT1JUCVR4U1RCQzoxOworCVVTSE9SVAlTaG9ydEdJZm9yNDA6MTsJLy9mb3I0ME1IegorCVVTSE9SVAlTaG9ydEdJZm9yMjA6MTsKKwlVU0hPUlQJR0Y6MTsJLy9ncmVlbiBmaWVsZAorCVVTSE9SVAlNaW1vUHM6MjsvL21pbW8gcG93ZXIgc2FmZSBNTVBTXworCVVTSE9SVAlDaGFubmVsV2lkdGg6MTsKKyNlbHNlCisJVVNIT1JUCUNoYW5uZWxXaWR0aDoxOworCVVTSE9SVAlNaW1vUHM6MjsvL21pbW8gcG93ZXIgc2FmZSBNTVBTXworCVVTSE9SVAlHRjoxOwkvL2dyZWVuIGZpZWxkCisJVVNIT1JUCVNob3J0R0lmb3IyMDoxOworCVVTSE9SVAlTaG9ydEdJZm9yNDA6MTsJLy9mb3I0ME1IegorCVVTSE9SVAlUeFNUQkM6MTsKKwlVU0hPUlQJUnhTVEJDOjI7CS8vIDIgYml0cworCVVTSE9SVAlBbXNkdUVuYWJsZToxOwkvLyBFbmFibGUgdG8gdHJhbnNtaXQgQS1NU0RVLiBTdWdnZXN0IGRpc2FibGUuIFdlIHNob3VsZCB1c2UgQS1NUERVIHRvIGdhaW4gYmVzdCBiZW5pZml0IG9mIDgwMi4xMW4KKwlVU0hPUlQJQW1zZHVTaXplOjE7CS8vIE1heCByZWNlaXZpbmcgQS1NU0RVIHNpemUKKwlVU0hPUlQJcnN2OjU7CisjZW5kaWYKKworCS8vU3Vic3RyYWN0IGZyb20gQWRkaW9udCBIVCBJTkZPIElFCisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCVJlY29tV2lkdGg6MTsKKwlVQ0hBUglFeHRDaGFuT2Zmc2V0OjI7CS8vIFBsZWFzZSBub3QgdGhlIGRpZmZlcmVuY2Ugd2l0aCBmb2xsb3dpbmcgCVVDSEFSCU5ld0V4dENoYW5uZWxPZmZzZXQ7IGZyb20gODAyLjExbgorCVVDSEFSCU1wZHVEZW5zaXR5OjM7CisJVUNIQVIJTWF4UkFtcGR1RmFjdG9yOjI7CisjZWxzZQorCVVDSEFSCU1heFJBbXBkdUZhY3RvcjoyOworCVVDSEFSCU1wZHVEZW5zaXR5OjM7CisJVUNIQVIJRXh0Q2hhbk9mZnNldDoyOwkvLyBQbGVhc2Ugbm90IHRoZSBkaWZmZXJlbmNlIHdpdGggZm9sbG93aW5nIAlVQ0hBUglOZXdFeHRDaGFubmVsT2Zmc2V0OyBmcm9tIDgwMi4xMW4KKwlVQ0hBUglSZWNvbVdpZHRoOjE7CisjZW5kaWYKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJcnN2MjoxMTsKKwlVU0hPUlQJT0JTU19Ob25IVEV4aXN0OjE7CisJVVNIT1JUCXJzdjM6MTsKKwlVU0hPUlQJTm9uR2ZQcmVzZW50OjE7CisJVVNIT1JUCU9wZXJhaW9uTW9kZToyOworI2Vsc2UKKwlVU0hPUlQJT3BlcmFpb25Nb2RlOjI7CisJVVNIT1JUCU5vbkdmUHJlc2VudDoxOworCVVTSE9SVAlyc3YzOjE7CisJVVNIT1JUCU9CU1NfTm9uSFRFeGlzdDoxOworCVVTSE9SVAlyc3YyOjExOworI2VuZGlmCisKKwkvLyBOZXcgRXh0ZW5zaW9uIENoYW5uZWwgT2Zmc2V0IElFCisJVUNIQVIJTmV3RXh0Q2hhbm5lbE9mZnNldDsKKwkvLyBFeHRlbnNpb24gQ2FwYWJpbGl0eSBJRSA9IDEyNworCVVDSEFSCUJTU0NvZXhpc3QyMDQwOworfSBSVF9IVF9DQVBBQklMSVRZLCAqUFJUX0hUX0NBUEFCSUxJVFk7CisKKy8vICAgZmllbGQgaW4gQWRkdGlvbmFsIEhUIEluZm9ybWF0aW9uIElFIC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCVNlckludGVyR3JhbnU6MzsKKwlVQ0hBUglTX1BTTVBTdXA6MTsKKwlVQ0hBUglSaWZzTW9kZToxOworCVVDSEFSCVJlY29tV2lkdGg6MTsKKwlVQ0hBUglFeHRDaGFuT2Zmc2V0OjI7CisjZWxzZQorCVVDSEFSCUV4dENoYW5PZmZzZXQ6MjsKKwlVQ0hBUglSZWNvbVdpZHRoOjE7CisJVUNIQVIJUmlmc01vZGU6MTsKKwlVQ0hBUglTX1BTTVBTdXA6MTsJIC8vSW5kaWNhdGUgc3VwcG9ydCBmb3Igc2NoZWR1bGVkIFBTTVAKKwlVQ0hBUglTZXJJbnRlckdyYW51OjM7CSAvL3NlcnZpY2UgaW50ZXJ2YWwgZ3JhbnVsYXJpdHkKKyNlbmRpZgorfSBBRERfSFRJTkZPLCAqUEFERF9IVElORk87CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVVNIT1JUCXJzdjI6MTE7CisJVVNIT1JUCU9CU1NfTm9uSFRFeGlzdDoxOworCVVTSE9SVAlyc3Y6MTsKKwlVU0hPUlQJTm9uR2ZQcmVzZW50OjE7CisJVVNIT1JUCU9wZXJhaW9uTW9kZToyOworI2Vsc2UKKwlVU0hPUlQJT3BlcmFpb25Nb2RlOjI7CisJVVNIT1JUCU5vbkdmUHJlc2VudDoxOworCVVTSE9SVAlyc3Y6MTsKKwlVU0hPUlQJT0JTU19Ob25IVEV4aXN0OjE7CisJVVNIT1JUCXJzdjI6MTE7CisjZW5kaWYKK30gQUREX0hUSU5GTzIsICpQQUREX0hUSU5GTzI7CisKKworLy8gVE9ETzogTmVlZCBzeW5jIHdpdGggc3BlYyBhYm91dCB0aGUgZGVmaW5pdGlvbiBvZiBTdGJjTWNzLiBJbiBEcmFmdCAzLjAzLCBpdCdzIHJlc2VydmVkLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJcnN2OjQ7CisJVVNIT1JUCVBjb1BoYXNlOjE7CisJVVNIT1JUCVBjb0FjdGl2ZToxOworCVVTSE9SVAlMc2lnVHhvcFByb3Q6MTsKKwlVU0hPUlQJU1RCQ0JlYWNvbjoxOworCVVTSE9SVAlEdWFsQ1RTUHJvdGVjdDoxOworCVVTSE9SVAlEdWFsQmVhY29uOjE7CisJVVNIT1JUCVN0YmNNY3M6NjsKKyNlbHNlCisJVVNIT1JUCVN0YmNNY3M6NjsKKwlVU0hPUlQJRHVhbEJlYWNvbjoxOworCVVTSE9SVAlEdWFsQ1RTUHJvdGVjdDoxOworCVVTSE9SVAlTVEJDQmVhY29uOjE7CisJVVNIT1JUCUxzaWdUeG9wUHJvdDoxOwkvLyBMLVNJRyBUWE9QIHByb3RlY3Rpb24gZnVsbCBzdXBwb3J0CisJVVNIT1JUCVBjb0FjdGl2ZToxOworCVVTSE9SVAlQY29QaGFzZToxOworCVVTSE9SVAlyc3Y6NDsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCit9IEFERF9IVElORk8zLCAqUEFERF9IVElORk8zOworCisjZGVmaW5lIFNJWkVfQUREX0hUX0lORk9fSUUJCTIyCit0eXBlZGVmIHN0cnVjdCAgUEFDS0VEeworCVVDSEFSCQkJCUNvbnRyb2xDaGFuOworCUFERF9IVElORk8JCQlBZGRIdEluZm87CisJQUREX0hUSU5GTzIJCQlBZGRIdEluZm8yOworCUFERF9IVElORk8zCQkJQWRkSHRJbmZvMzsKKwlVQ0hBUgkJCQlNQ1NTZXRbMTZdOwkJLy8gQmFzaWMgTUNTIHNldAorfSBBRERfSFRfSU5GT19JRSwgKlBBRERfSFRfSU5GT19JRTsKKwordHlwZWRlZiBzdHJ1Y3QgIFBBQ0tFRHsKKwlVQ0hBUgkJCQlOZXdFeHRDaGFuT2Zmc2V0OworfSBORVdfRVhUX0NIQU5fSUUsICpQTkVXX0VYVF9DSEFOX0lFOworCisKKy8vIDQtYnl0ZSBIVEMgZmllbGQuICBtYXliZSBpbmNsdWRlZCBpbiBhbnkgZnJhbWUgZXhjZXB0IG5vbi1RT1MgZGF0YSBmcmFtZS4gIFRoZSBPcmRlciBiaXQgbXVzdCBzZXQgMS4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVJTlQzMgkJUkRHOjE7CS8vUkRHIC8gTW9yZSBQUERVCisgICAgVUlOVDMyCQlBQ0NvbnN0cmFpbnQ6MTsJLy9mZWVkYmFjayByZXF1ZXN0CisgICAgVUlOVDMyCQlyc3Y6NTsgIC8vY2FsaWJyYXRpb24gc2VxdWVuY2UKKyAgICBVSU5UMzIJCVpMRkFubm91Y2U6MTsJLy8gWkxGIGFubm91bmNlbWVudAorICAgIFVJTlQzMgkJQ1NJU1RFRVJJTkc6MjsJLy9DU0kvIFNURUVSSU5HCisgICAgVUlOVDMyCQlGQktSZXE6MjsJLy9mZWVkYmFjayByZXF1ZXN0CisgICAgVUlOVDMyCQlDYWxTZXE6MjsgIC8vY2FsaWJyYXRpb24gc2VxdWVuY2UKKyAgICBVSU5UMzIJCUNhbFBvczoyOwkvLyBjYWxpYnJhdGlvbiBwb3NpdGlvbgorICAgIFVJTlQzMgkJTUZCb3JBU0M6NzsJLy9MaW5rIGFkYXB0YXRpb24gZmVlZGJhY2sgY29udGFpbmluZyByZWNvbW1lbmRlZCBNQ1MuIDB4N2YgZm9yIG5vIGZlZWRiYWNrIG9yIG5vdCBhdmFpbGFibGUKKyAgICBVSU5UMzIJCU1GUzozOwkvL1NFVCB0byB0aGUgcmVjZWl2ZWQgdmFsdWUgb2YgTVJTLiAweDExMSBmb3IgdW5zb2xpY2l0ZWQgTUZCLgorICAgIFVJTlQzMgkJTVJTb3JBU0k6MzsJLy8gTVJRIFNlcXVlbmNlIGlkZW50aWZpZXIuIHVuY2hhbmdlZCBkdXJpbmcgZW50aXJlIHByb2NlZHVyZS4gMHgwMDAtMHgxMTAuCisgICAgVUlOVDMyCQlNUlE6MTsJLy9NQ1MgZmVlZGJhY2suIFJlcXVlc3QgZm9yIGEgTUNTIGZlZWRiYWNrCisgICAgVUlOVDMyCQlUUlE6MTsJLy9zb3VuZGluZyByZXF1ZXN0CisgICAgVUlOVDMyCQlNQToxOwkvL21hbmFnZW1lbnQgYWN0aW9uIHBheWxvYWQgZXhpc3QgaW4gKFFvUyBOdWxsK0hUQykKKyNlbHNlCisgICAgVUlOVDMyCQlNQToxOwkvL21hbmFnZW1lbnQgYWN0aW9uIHBheWxvYWQgZXhpc3QgaW4gKFFvUyBOdWxsK0hUQykKKyAgICBVSU5UMzIJCVRSUToxOwkvL3NvdW5kaW5nIHJlcXVlc3QKKyAgICBVSU5UMzIJCU1SUToxOwkvL01DUyBmZWVkYmFjay4gUmVxdWVzdCBmb3IgYSBNQ1MgZmVlZGJhY2sKKyAgICBVSU5UMzIJCU1SU29yQVNJOjM7CS8vIE1SUSBTZXF1ZW5jZSBpZGVudGlmaWVyLiB1bmNoYW5nZWQgZHVyaW5nIGVudGlyZSBwcm9jZWR1cmUuIDB4MDAwLTB4MTEwLgorICAgIFVJTlQzMgkJTUZTOjM7CS8vU0VUIHRvIHRoZSByZWNlaXZlZCB2YWx1ZSBvZiBNUlMuIDB4MTExIGZvciB1bnNvbGljaXRlZCBNRkIuCisgICAgVUlOVDMyCQlNRkJvckFTQzo3OwkvL0xpbmsgYWRhcHRhdGlvbiBmZWVkYmFjayBjb250YWluaW5nIHJlY29tbWVuZGVkIE1DUy4gMHg3ZiBmb3Igbm8gZmVlZGJhY2sgb3Igbm90IGF2YWlsYWJsZQorICAgIFVJTlQzMgkJQ2FsUG9zOjI7CS8vIGNhbGlicmF0aW9uIHBvc2l0aW9uCisgICAgVUlOVDMyCQlDYWxTZXE6MjsgIC8vY2FsaWJyYXRpb24gc2VxdWVuY2UKKyAgICBVSU5UMzIJCUZCS1JlcToyOwkvL2ZlZWRiYWNrIHJlcXVlc3QKKyAgICBVSU5UMzIJCUNTSVNURUVSSU5HOjI7CS8vQ1NJLyBTVEVFUklORworICAgIFVJTlQzMgkJWkxGQW5ub3VjZToxOwkvLyBaTEYgYW5ub3VuY2VtZW50CisgICAgVUlOVDMyCQlyc3Y6NTsgIC8vY2FsaWJyYXRpb24gc2VxdWVuY2UKKyAgICBVSU5UMzIJCUFDQ29uc3RyYWludDoxOwkvL2ZlZWRiYWNrIHJlcXVlc3QKKyAgICBVSU5UMzIJCVJERzoxOwkvL1JERyAvIE1vcmUgUFBEVQorI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEhUX0NPTlRST0wsICpQSFRfQ09OVFJPTDsKKworLy8gMi1ieXRlIFFPUyBDT05UUk9MIGZpZWxkCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBUeG9wX1F1ZXVlU2l6ZTo4OworICAgIFVTSE9SVCAgICAgIEFNc2R1UHJlc2VudDoxOworICAgIFVTSE9SVCAgICAgIEFja1BvbGljeToyOyAgLy8wOiBub3JtYWwgQUNLIDE6Tm8gQUNLIDI6c2NoZWR1bGVkIHVuZGVyIE1UQkEvUFNNUCAgMzogQkEKKyAgICBVU0hPUlQgICAgICBFT1NQOjE7CisgICAgVVNIT1JUICAgICAgVElEOjQ7CisjZWxzZQorICAgIFVTSE9SVCAgICAgIFRJRDo0OworICAgIFVTSE9SVCAgICAgIEVPU1A6MTsKKyAgICBVU0hPUlQgICAgICBBY2tQb2xpY3k6MjsgIC8vMDogbm9ybWFsIEFDSyAxOk5vIEFDSyAyOnNjaGVkdWxlZCB1bmRlciBNVEJBL1BTTVAgIDM6IEJBCisgICAgVVNIT1JUICAgICAgQU1zZHVQcmVzZW50OjE7CisgICAgVVNIT1JUICAgICAgVHhvcF9RdWV1ZVNpemU6ODsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBRT1NfQ09OVFJPTCwgKlBRT1NfQ09OVFJPTDsKKworLy8gMi1ieXRlIEZyYW1lIGNvbnRyb2wgZmllbGQKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVTSE9SVAkJT3JkZXI6MTsJCQkvLyBTdHJpY3Qgb3JkZXIgZXhwZWN0ZWQKKwlVU0hPUlQJCVdlcDoxOwkJCQkvLyBXZXAgZGF0YQorCVVTSE9SVAkJTW9yZURhdGE6MTsJCQkvLyBNb3JlIGRhdGEgYml0CisJVVNIT1JUCQlQd3JNZ210OjE7CQkJLy8gUG93ZXIgbWFuYWdlbWVudCBiaXQKKwlVU0hPUlQJCVJldHJ5OjE7CQkJLy8gUmV0cnkgc3RhdHVzIGJpdAorCVVTSE9SVAkJTW9yZUZyYWc6MTsJCQkvLyBNb3JlIGZyYWdtZW50IGJpdAorCVVTSE9SVAkJRnJEczoxOwkJCQkvLyBGcm9tIERTIGluZGljYXRpb24KKwlVU0hPUlQJCVRvRHM6MTsJCQkJLy8gVG8gRFMgaW5kaWNhdGlvbgorCVVTSE9SVAkJU3ViVHlwZTo0OwkJCS8vIE1TRFUgc3VidHlwZQorCVVTSE9SVAkJVHlwZToyOwkJCQkvLyBNU0RVIHR5cGUKKwlVU0hPUlQJCVZlcjoyOwkJCQkvLyBQcm90b2NvbCB2ZXJzaW9uCisjZWxzZQorCVVTSE9SVAkJVmVyOjI7CQkJCS8vIFByb3RvY29sIHZlcnNpb24KKwlVU0hPUlQJCVR5cGU6MjsJCQkJLy8gTVNEVSB0eXBlCisJVVNIT1JUCQlTdWJUeXBlOjQ7CQkJLy8gTVNEVSBzdWJ0eXBlCisJVVNIT1JUCQlUb0RzOjE7CQkJCS8vIFRvIERTIGluZGljYXRpb24KKwlVU0hPUlQJCUZyRHM6MTsJCQkJLy8gRnJvbSBEUyBpbmRpY2F0aW9uCisJVVNIT1JUCQlNb3JlRnJhZzoxOwkJCS8vIE1vcmUgZnJhZ21lbnQgYml0CisJVVNIT1JUCQlSZXRyeToxOwkJCS8vIFJldHJ5IHN0YXR1cyBiaXQKKwlVU0hPUlQJCVB3ck1nbXQ6MTsJCQkvLyBQb3dlciBtYW5hZ2VtZW50IGJpdAorCVVTSE9SVAkJTW9yZURhdGE6MTsJCQkvLyBNb3JlIGRhdGEgYml0CisJVVNIT1JUCQlXZXA6MTsJCQkJLy8gV2VwIGRhdGEKKwlVU0hPUlQJCU9yZGVyOjE7CQkJLy8gU3RyaWN0IG9yZGVyIGV4cGVjdGVkCisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gRlJBTUVfQ09OVFJPTCwgKlBGUkFNRV9DT05UUk9MOworCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX0hFQURFUl84MDJfMTEJeworICAgIEZSQU1FX0NPTlRST0wgICBGQzsKKyAgICBVU0hPUlQgICAgICAgICAgRHVyYXRpb247CisgICAgVUNIQVIgICAgICAgICAgIEFkZHIxW01BQ19BRERSX0xFTl07CisgICAgVUNIQVIgICAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJVUNIQVIJCQlBZGRyM1tNQUNfQUREUl9MRU5dOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJCQlTZXF1ZW5jZToxMjsKKwlVU0hPUlQJCQlGcmFnOjQ7CisjZWxzZQorCVVTSE9SVAkJCUZyYWc6NDsKKwlVU0hPUlQJCQlTZXF1ZW5jZToxMjsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworCVVDSEFSCQkJT2N0ZXRbMF07Cit9CUhFQURFUl84MDJfMTEsICpQSEVBREVSXzgwMl8xMTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV84MDJfMTEgeworICAgIEhFQURFUl84MDJfMTEgICBIZHI7CisgICAgVUNIQVIgICAgICAgICAgICBPY3RldFsxXTsKK30gICBGUkFNRV84MDJfMTEsICpQRlJBTUVfODAyXzExOworCisvLyBRb1NOdWxsIGVtYmVkZGluZyBvZiBtYW5hZ2VtZW50IGFjdGlvbi4gV2hlbiBIVCBDb250cm9sIE1BIGZpZWxkIHNldCB0byAxLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9NQV9CT0RZIHsKKyAgICBVQ0hBUiAgICAgICAgICAgIENhdGVnb3J5OworICAgIFVDSEFSICAgICAgICAgICAgQWN0aW9uOworICAgIFVDSEFSICAgICAgICAgICAgT2N0ZXRbMV07Cit9ICAgTUFfQk9EWSwgKlBNQV9CT0RZOworCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX0hFQURFUl84MDJfMwl7CisgICAgVUNIQVIgICAgICAgICAgIERBQWRkcjFbTUFDX0FERFJfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgICAgU0FBZGRyMltNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgICAgICAgICBPY3RldFsyXTsKK30JSEVBREVSXzgwMl8zLCAqUEhFQURFUl84MDJfMzsKKy8vLy9CbG9jayBBQ0sgcmVsYXRlZCBmb3JtYXQKKy8vIDItYnl0ZSBCQSBQYXJhbWV0ZXIgIGZpZWxkICBpbiAJREVMQkEgZnJhbWVzIHRvIHRlcm1pbmF0ZSBhbiBhbHJlYWR5IHNldCB1cCBiQQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBUSUQ6NDsJLy8gdmFsdWUgb2YgVEMgb3MgVFMKKyAgICBVU0hPUlQgICAgICBJbml0aWF0b3I6MTsJLy8gMTogb3JpZ2luYXRvciAgICAwOnJlY2lwaWVudAorICAgIFVTSE9SVCAgICAgIFJzdjoxMTsJLy8gYWx3YXlzIHNldCB0byAwCisjZWxzZQorICAgIFVTSE9SVCAgICAgIFJzdjoxMTsJLy8gYWx3YXlzIHNldCB0byAwCisgICAgVVNIT1JUICAgICAgSW5pdGlhdG9yOjE7CS8vIDE6IG9yaWdpbmF0b3IgICAgMDpyZWNpcGllbnQKKyAgICBVU0hPUlQgICAgICBUSUQ6NDsJLy8gdmFsdWUgb2YgVEMgb3MgVFMKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBERUxCQV9QQVJNLCAqUERFTEJBX1BBUk07CisKKy8vIDItYnl0ZSBCQSBQYXJhbWV0ZXIgU2V0IGZpZWxkICBpbiBBRERCQSBmcmFtZXMgdG8gc2lnbmFsIHBhcm0gZm9yIHNldHRpbmcgdXAgYSBCQQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgVVNIT1JUICAgICAgQnVmU2l6ZToxMDsJLy8gbnVtYmVyIG9mIGJ1ZmZlIG9mIHNpemUgMjMwNCBvY3RldHNyCisgICAgVVNIT1JUICAgICAgVElEOjQ7CS8vIHZhbHVlIG9mIFRDIG9zIFRTCisgICAgVVNIT1JUICAgICAgQkFQb2xpY3k6MTsJLy8gMTogaW1tZWRpYXRlbHkgQkEgICAgMDpkZWxheWVkIEJBCisgICAgVVNIT1JUICAgICAgQU1TRFVTdXBwb3J0ZWQ6MTsJLy8gMDogbm90IHBlcm1pdHRlZAkJMTogcGVybWl0dGVkCisjZWxzZQorICAgIFVTSE9SVCAgICAgIEFNU0RVU3VwcG9ydGVkOjE7CS8vIDA6IG5vdCBwZXJtaXR0ZWQJCTE6IHBlcm1pdHRlZAorICAgIFVTSE9SVCAgICAgIEJBUG9saWN5OjE7CS8vIDE6IGltbWVkaWF0ZWx5IEJBICAgIDA6ZGVsYXllZCBCQQorICAgIFVTSE9SVCAgICAgIFRJRDo0OwkvLyB2YWx1ZSBvZiBUQyBvcyBUUworICAgIFVTSE9SVCAgICAgIEJ1ZlNpemU6MTA7CS8vIG51bWJlciBvZiBidWZmZSBvZiBzaXplIDIzMDQgb2N0ZXRzcgorI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEJBX1BBUk0sICpQQkFfUEFSTTsKKworLy8gMi1ieXRlIEJBIFN0YXJ0aW5nIFNlcSBDT05UUk9MIGZpZWxkCit0eXBlZGVmIHVuaW9uIFBBQ0tFRCB7CisgICAgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVTSE9SVCAgICAgIFN0YXJ0U2VxOjEyOyAgIC8vIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgMXN0IE1TRFUgZm9yIHdoaWNoIHRoaXMgQkFSIGlzIHNlbnQKKwlVU0hPUlQgICAgICBGcmFnTnVtOjQ7CS8vIGFsd2F5cyBzZXQgdG8gMAorI2Vsc2UKKyAgICBVU0hPUlQgICAgICBGcmFnTnVtOjQ7CS8vIGFsd2F5cyBzZXQgdG8gMAorCVVTSE9SVCAgICAgIFN0YXJ0U2VxOjEyOyAgIC8vIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgMXN0IE1TRFUgZm9yIHdoaWNoIHRoaXMgQkFSIGlzIHNlbnQKKyNlbmRpZiAvKiBSVF9CSUdfRU5ESUFOICovCisgICAgfSAgIGZpZWxkOworICAgIFVTSE9SVCAgICAgICAgICAgd29yZDsKK30gQkFTRVFfQ09OVFJPTCwgKlBCQVNFUV9DT05UUk9MOworCisvL0JBQ29udHJvbCBhbmQgQkFSQ29udHJvbCBhcmUgdGhlIHNhbWUKKy8vIDItYnl0ZSBCQSBDT05UUk9MIGZpZWxkIGluIEJBIGZyYW1lCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBUSUQ6NDsKKyAgICBVU0hPUlQgICAgICBSc3Y6OTsKKyAgICBVU0hPUlQgICAgICBDb21wcmVzc2VkOjE7CisgICAgVVNIT1JUICAgICAgTVRJRDoxOwkJLy9FV0MgVjEuMjQKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsgLy8gb25seSByZWxhdGVkIHRvIE4tRGVsYXllZCBCQS4gQnV0IG5vdCBzdXBwb3J0IGluIFJUMjg2MGIuIDA6Tm9ybWFsQUNLICAxOk5vIEFDSworI2Vsc2UKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsgLy8gb25seSByZWxhdGVkIHRvIE4tRGVsYXllZCBCQS4gQnV0IG5vdCBzdXBwb3J0IGluIFJUMjg2MGIuIDA6Tm9ybWFsQUNLICAxOk5vIEFDSworICAgIFVTSE9SVCAgICAgIE1USUQ6MTsJCS8vRVdDIFYxLjI0CisgICAgVVNIT1JUICAgICAgQ29tcHJlc3NlZDoxOworICAgIFVTSE9SVCAgICAgIFJzdjo5OworICAgIFVTSE9SVCAgICAgIFRJRDo0OworI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEJBX0NPTlRST0wsICpQQkFfQ09OVFJPTDsKKworLy8gMi1ieXRlIEJBUiBDT05UUk9MIGZpZWxkIGluIEJBUiBmcmFtZQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgVVNIT1JUICAgICAgVElEOjQ7CisgICAgVVNIT1JUICAgICAgUnN2MTo5OworICAgIFVTSE9SVCAgICAgIENvbXByZXNzZWQ6MTsKKyAgICBVU0hPUlQgICAgICBNVElEOjE7CQkvL2lmIHRoaXMgYml0MSwgdXNlICBGUkFNRV9NVEJBX1JFUSwgIGlmIDAsIHVzZSBGUkFNRV9CQV9SRVEKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsKKyNlbHNlCisgICAgVVNIT1JUICAgICAgQUNLUG9saWN5OjE7IC8vIDA6bm9ybWFsIGFjaywgIDE6bm8gYWNrLgorICAgIFVTSE9SVCAgICAgIE1USUQ6MTsJCS8vaWYgdGhpcyBiaXQxLCB1c2UgIEZSQU1FX01UQkFfUkVRLCAgaWYgMCwgdXNlIEZSQU1FX0JBX1JFUQorICAgIFVTSE9SVCAgICAgIENvbXByZXNzZWQ6MTsKKyAgICBVU0hPUlQgICAgICBSc3YxOjk7CisgICAgVVNIT1JUICAgICAgVElEOjQ7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gQkFSX0NPTlRST0wsICpQQkFSX0NPTlRST0w7CisKKy8vIEJBUkNvbnRyb2wgaW4gTVRCQVIgZnJhbWUKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVTSE9SVCAgICAgIE51bVRJRDo0OworICAgIFVTSE9SVCAgICAgIFJzdjE6OTsKKyAgICBVU0hPUlQgICAgICBDb21wcmVzc2VkOjE7CisgICAgVVNIT1JUICAgICAgTVRJRDoxOworICAgIFVTSE9SVCAgICAgIEFDS1BvbGljeToxOworI2Vsc2UKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsKKyAgICBVU0hPUlQgICAgICBNVElEOjE7CisgICAgVVNIT1JUICAgICAgQ29tcHJlc3NlZDoxOworICAgIFVTSE9SVCAgICAgIFJzdjE6OTsKKyAgICBVU0hPUlQgICAgICBOdW1USUQ6NDsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBNVEJBUl9DT05UUk9MLCAqUE1UQkFSX0NPTlRST0w7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVTSE9SVCAgICAgIFRJRDo0OworICAgIFVTSE9SVCAgICAgIFJzdjE6MTI7CisjZWxzZQorICAgIFVTSE9SVCAgICAgIFJzdjE6MTI7CisgICAgVVNIT1JUICAgICAgVElEOjQ7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gUEVSX1RJRF9JTkZPLCAqUFBFUl9USURfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVBFUl9USURfSU5GTyAgICAgIFBlclRJRDsKKwlCQVNFUV9DT05UUk9MIAkgQkFTdGFydGluZ1NlcTsKK30gRUFDSF9USUQsICpQRUFDSF9USUQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9QU1BPTExfRlJBTUUgeworICAgIEZSQU1FX0NPTlRST0wgICBGQzsKKyAgICBVU0hPUlQgICAgICAgICAgQWlkOworICAgIFVDSEFSICAgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgICAgICAgICBUYVtNQUNfQUREUl9MRU5dOworfSAgIFBTUE9MTF9GUkFNRSwgKlBQU1BPTExfRlJBTUU7CisKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfUlRTX0ZSQU1FCXsKKyAgICBGUkFNRV9DT05UUk9MICAgRkM7CisgICAgVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworICAgIFVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworfVJUU19GUkFNRSwgKlBSVFNfRlJBTUU7CisKKy8vIEJBUkVRIEFORCBNVEJBUkVRIGhhdmUgdGhlIHNhbWUgc3VidHlwZSBCQVIsIDgwMi4xMW4gQkFSIHVzZSBjb21wcmVzc2VkIGJpdG1hcC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfQkFfUkVRIHsKKwlGUkFNRV9DT05UUk9MICAgRkM7CisJVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworCVVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUJBUl9DT05UUk9MICBCQVJDb250cm9sOworCUJBU0VRX0NPTlRST0wgCSBCQVN0YXJ0aW5nU2VxOworfSAgIEZSQU1FX0JBX1JFUSwgKlBGUkFNRV9CQV9SRVE7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfTVRCQV9SRVEgeworCUZSQU1FX0NPTlRST0wgICBGQzsKKwlVU0hPUlQgICAgICAgICAgRHVyYXRpb247CisJVUNIQVIgICAgICAgICAgIEFkZHIxW01BQ19BRERSX0xFTl07CisJVUNIQVIgICAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJTVRCQVJfQ09OVFJPTCAgTVRCQVJDb250cm9sOworCVBFUl9USURfSU5GTwlQZXJUSURJbmZvOworCUJBU0VRX0NPTlRST0wgCSBCQVN0YXJ0aW5nU2VxOworfSAgIEZSQU1FX01UQkFfUkVRLCAqUEZSQU1FX01UQkFfUkVROworCisvLyBDb21wcmVzc2VkIGZvcm1hdCBpcyBtYW5kYW50b3J5IGluIEhUIFNUQQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9NVEJBIHsKKwlGUkFNRV9DT05UUk9MICAgRkM7CisJVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworCVVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUJBX0NPTlRST0wgIEJBQ29udHJvbDsKKwlCQVNFUV9DT05UUk9MIAkgQkFTdGFydGluZ1NlcTsKKwlVQ0hBUgkJQml0TWFwWzhdOworfSAgIEZSQU1FX01UQkEsICpQRlJBTUVfTVRCQTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9QU01QX0FDVElPTiB7CisJSEVBREVSXzgwMl8xMSAgIEhkcjsKKwlVQ0hBUglDYXRlZ29yeTsKKwlVQ0hBUglBY3Rpb247CisJVUNIQVIJUHNtcDsJLy8gNy4zLjEuMjUKK30gICBGUkFNRV9QU01QX0FDVElPTiwgKlBGUkFNRV9QU01QX0FDVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9BQ1RJT05fSERSIHsKKwlIRUFERVJfODAyXzExICAgSGRyOworCVVDSEFSCUNhdGVnb3J5OworCVVDSEFSCUFjdGlvbjsKK30gICBGUkFNRV9BQ1RJT05fSERSLCAqUEZSQU1FX0FDVElPTl9IRFI7CisKKy8vQWN0aW9uIEZyYW1lCisvL0FjdGlvbiBGcmFtZSAgQ2F0ZWdvcnk6U3BlY3RydW0sICBBY3Rpb246Q2hhbm5lbCBTd2l0Y2guIDcuMy4yLjIwCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0NIQU5fU1dJVENIX0FOTk9VTkNFIHsKKwlVQ0hBUgkJCQkJRWxlbWVudElEOwkvLyBJRCA9IElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVCA9IDM3CisJVUNIQVIJCQkJCUxlbjsKKwlDSEFfU1dJVENIX0FOTk9VTkNFX0lFCUNTQW5ub3VuY2VJZTsKK30gICBDSEFOX1NXSVRDSF9BTk5PVU5DRSwgKlBDSEFOX1NXSVRDSF9BTk5PVU5DRTsKKworCisvLzgwMi4xMW4gOiA3LjMuMi4yMGEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfU0VDT05EX0NIQU5fT0ZGU0VUIHsKKwlVQ0hBUgkJCQlFbGVtZW50SUQ7CQkvLyBJRCA9IElFX1NFQ09OREFSWV9DSF9PRkZTRVQgPSA2MgorCVVDSEFSCQkJCUxlbjsKKwlTRUNfQ0hBX09GRlNFVF9JRQlTZWNDaE9mZnNldEllOworfSAgIFNFQ09ORF9DSEFOX09GRlNFVCwgKlBTRUNPTkRfQ0hBTl9PRkZTRVQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9TUEVUUlVNX0NTIHsKKwlIRUFERVJfODAyXzExICAgSGRyOworCVVDSEFSCUNhdGVnb3J5OworCVVDSEFSCUFjdGlvbjsKKwlDSEFOX1NXSVRDSF9BTk5PVU5DRQlDU0Fubm91bmNlOworCVNFQ09ORF9DSEFOX09GRlNFVAkJU2Vjb25kQ2hhbm5lbDsKK30gICBGUkFNRV9TUEVUUlVNX0NTLCAqUEZSQU1FX1NQRVRSVU1fQ1M7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9BRERCQV9SRVEgeworCUhFQURFUl84MDJfMTEgICBIZHI7CisJVUNIQVIJQ2F0ZWdvcnk7CisJVUNIQVIJQWN0aW9uOworCVVDSEFSCVRva2VuOwkvLyAxCisJQkFfUEFSTQkJQmFQYXJtOwkgICAgICAvLyAgMiAtIDEwCisJVVNIT1JUCQlUaW1lT3V0VmFsdWU7CS8vIDAgLSAwCisJQkFTRVFfQ09OVFJPTAlCYVN0YXJ0U2VxOyAvLyAwLTAKK30gICBGUkFNRV9BRERCQV9SRVEsICpQRlJBTUVfQUREQkFfUkVROworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0ZSQU1FX0FEREJBX1JTUCB7CisJSEVBREVSXzgwMl8xMSAgIEhkcjsKKwlVQ0hBUglDYXRlZ29yeTsKKwlVQ0hBUglBY3Rpb247CisJVUNIQVIJVG9rZW47CisJVVNIT1JUCVN0YXR1c0NvZGU7CisJQkFfUEFSTQkJQmFQYXJtOyAvLzAgLSAyCisJVVNIT1JUCQlUaW1lT3V0VmFsdWU7Cit9ICAgRlJBTUVfQUREQkFfUlNQLCAqUEZSQU1FX0FEREJBX1JTUDsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9ERUxCQV9SRVEgeworCUhFQURFUl84MDJfMTEgICBIZHI7CisJVUNIQVIJQ2F0ZWdvcnk7CisJVUNIQVIJQWN0aW9uOworCURFTEJBX1BBUk0JCURlbGJhUGFybTsKKwlVU0hPUlQJUmVhc29uQ29kZTsKK30gICBGUkFNRV9ERUxCQV9SRVEsICpQRlJBTUVfREVMQkFfUkVROworCisKKy8vNy4yLjEuNwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9CQVIgeworCUZSQU1FX0NPTlRST0wgICBGQzsKKwlVU0hPUlQgICAgICAgICAgRHVyYXRpb247CisJVUNIQVIgICAgICAgICAgIEFkZHIxW01BQ19BRERSX0xFTl07CisJVUNIQVIgICAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJQkFSX0NPTlRST0wJCUJhckNvbnRyb2w7CisJQkFTRVFfQ09OVFJPTAlTdGFydGluZ1NlcTsKK30gICBGUkFNRV9CQVIsICpQRlJBTUVfQkFSOworCisvLzcuMi4xLjcKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfQkEgeworCUZSQU1FX0NPTlRST0wgICBGQzsKKwlVU0hPUlQgICAgICAgICAgRHVyYXRpb247CisJVUNIQVIgICAgICAgICAgIEFkZHIxW01BQ19BRERSX0xFTl07CisJVUNIQVIgICAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJQkFSX0NPTlRST0wJCUJhckNvbnRyb2w7CisJQkFTRVFfQ09OVFJPTAlTdGFydGluZ1NlcTsKKwlVQ0hBUgkJYml0bWFza1s4XTsKK30gICBGUkFNRV9CQSwgKlBGUkFNRV9CQTsKKworCisvLyBSYWRpbyBNZWFzdWVtZW50IFJlcXVlc3QgRnJhbWUgRm9ybWF0Cit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0ZSQU1FX1JNX1JFUV9BQ1RJT04geworCUhFQURFUl84MDJfMTEgICBIZHI7CisJVUNIQVIJQ2F0ZWdvcnk7CisJVUNIQVIJQWN0aW9uOworCVVDSEFSCVRva2VuOworCVVTSE9SVAlSZXBldGl0aW9uOworCVVDSEFSICAgZGF0YVswXTsKK30gICBGUkFNRV9STV9SRVFfQUNUSU9OLCAqUEZSQU1FX1JNX1JFUV9BQ1RJT047CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisJVUNIQVIJCUlEOworCVVDSEFSCQlMZW5ndGg7CisJVUNIQVIJCUNoYW5uZWxTd2l0Y2hNb2RlOworCVVDSEFSCQlOZXdSZWdDbGFzczsKKwlVQ0hBUgkJTmV3Q2hhbm5lbE51bTsKKwlVQ0hBUgkJQ2hhbm5lbFN3aXRjaENvdW50OworfSBIVF9FWFRfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UX0lFLCAqUEhUX0VYVF9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlRfSUU7CisKKworLy8KKy8vIF9MaW1pdCBtdXN0IGJlIHRoZSAyKipuIC0gMQorLy8gX1NFUTEgLCBfU0VRMiBtdXN0IGJlIHdpdGhpbiAwIH4gX0xpbWl0CisvLworI2RlZmluZSBTRVFfU1RFUE9ORShfU0VRMSwgX1NFUTIsIF9MaW1pdCkJKChfU0VRMSA9PSAoKF9TRVEyKzEpICYgX0xpbWl0KSkpCisjZGVmaW5lIFNFUV9TTUFMTEVSKF9TRVExLCBfU0VRMiwgX0xpbWl0KQkoKChfU0VRMS1fU0VRMikgJiAoKF9MaW1pdCsxKT4+MSkpKQorI2RlZmluZSBTRVFfTEFSR0VSKF9TRVExLCBfU0VRMiwgX0xpbWl0KQkoKF9TRVExICE9IF9TRVEyKSAmJiAhKCgoX1NFUTEtX1NFUTIpICYgKChfTGltaXQrMSk+PjEpKSkpCisjZGVmaW5lIFNFUV9XSVRISU5fV0lOKF9TRVExLCBfU0VRMiwgX1dJTiwgX0xpbWl0KSAoU0VRX0xBUkdFUihfU0VRMSwgX1NFUTIsIF9MaW1pdCkgJiYgIFwKKwkJCQkJCQkJCQkJCVNFUV9TTUFMTEVSKF9TRVExLCAoKF9TRVEyK19XSU4rMSkmX0xpbWl0KSwgX0xpbWl0KSkKKworLy8KKy8vIENvbnRlbnRpb24tZnJlZSBwYXJhbWV0ZXIgKHdpdGhvdXQgSUQgYW5kIExlbmd0aCkKKy8vCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworICAgIEJPT0xFQU4gICAgIGJWYWxpZDsgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIFVDSEFSICAgICAgIENmcENvdW50OworICAgIFVDSEFSICAgICAgIENmcFBlcmlvZDsKKyAgICBVU0hPUlQgICAgICBDZnBNYXhEdXJhdGlvbjsKKyAgICBVU0hPUlQgICAgICBDZnBEdXJSZW1haW5pbmc7Cit9IENGX1BBUk0sICpQQ0ZfUEFSTTsKKwordHlwZWRlZglzdHJ1Y3QJX0NJUEhFUl9TVUlURQl7CisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJUGFpckNpcGhlcjsJCS8vIFVuaWNhc3QgY2lwaGVyIDEsIHRoaXMgb25lIGhhcyBtb3JlIHNlY3VyZWQgY2lwaGVyIHN1aXRlCisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJUGFpckNpcGhlckF1eDsJLy8gVW5pY2FzdCBjaXBoZXIgMiBpZiBBUCBhbm5vdW5jZSB0d28gdW5pY2FzdCBjaXBoZXIgc3VpdGUKKwlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwlHcm91cENpcGhlcjsJLy8gR3JvdXAgY2lwaGVyCisJVVNIT1JUCQkJCQkJCVJzbkNhcGFiaWxpdHk7CS8vIFJTTiBjYXBhYmlsaXR5IGZyb20gYmVhY29uCisJQk9PTEVBTgkJCQkJCQliTWl4TW9kZTsJCS8vIEluZGljYXRlIFBhaXIgJiBHcm91cCBjaXBoZXIgbWlnaHQgYmUgZGlmZmVyZW50Cit9CUNJUEhFUl9TVUlURSwgKlBDSVBIRVJfU1VJVEU7CisKKy8vIEVEQ0EgY29uZmlndXJhdGlvbiBmcm9tIEFQJ3MgQkVBQ09OL1Byb2JlUnNwCit0eXBlZGVmIHN0cnVjdCB7CisgICAgQk9PTEVBTiAgICAgYlZhbGlkOyAgICAgICAgIC8vIDE6IHZhcmlhYmxlIGNvbnRhaW5zIHZhbGlkIHZhbHVlCisgICAgQk9PTEVBTiAgICAgYkFkZDsgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIEJPT0xFQU4gICAgIGJRQWNrOworICAgIEJPT0xFQU4gICAgIGJRdWV1ZVJlcXVlc3Q7CisgICAgQk9PTEVBTiAgICAgYlR4b3BSZXF1ZXN0OworICAgIEJPT0xFQU4gICAgIGJBUFNEQ2FwYWJsZTsKKy8vICBCT09MRUFOICAgICBiTW9yZURhdGFBY2s7CisgICAgVUNIQVIgICAgICAgRWRjYVVwZGF0ZUNvdW50OworICAgIFVDSEFSICAgICAgIEFpZnNuWzRdOyAgICAgICAvLyAwOkFDX0JLLCAxOkFDX0JFLCAyOkFDX1ZJLCAzOkFDX1ZPCisgICAgVUNIQVIgICAgICAgQ3dtaW5bNF07CisgICAgVUNIQVIgICAgICAgQ3dtYXhbNF07CisgICAgVVNIT1JUICAgICAgVHhvcFs0XTsgICAgICAvLyBpbiB1bml0IG9mIDMyLXVzCisgICAgQk9PTEVBTiAgICAgYkFDTVs0XTsgICAgICAvLyAxOiBBZG1pc3Npb24gQ29udHJvbCBvZiBBQ19CSyBpcyBtYW5kYXR0b3J5Cit9IEVEQ0FfUEFSTSwgKlBFRENBX1BBUk07CisKKy8vIFFCU1MgTE9BRCBpbmZvcm1hdGlvbiBmcm9tIFFBUCdzIEJFQUNPTi9Qcm9iZVJzcAordHlwZWRlZiBzdHJ1Y3QgeworICAgIEJPT0xFQU4gICAgIGJWYWxpZDsgICAgICAgICAgICAgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIFVTSE9SVCAgICAgIFN0YU51bTsKKyAgICBVQ0hBUiAgICAgICBDaGFubmVsVXRpbGl6YXRpb247CisgICAgVVNIT1JUICAgICAgUmVtYWluaW5nQWRtaXNzaW9uQ29udHJvbDsgIC8vIGluIHVuaXQgb2YgMzItdXMKK30gUUJTU19MT0FEX1BBUk0sICpQUUJTU19MT0FEX1BBUk07CisKKy8vIFFCU1MgSW5mbyBmaWVsZCBpbiBRU1RBJ3MgYXNzb2MgcmVxCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUgkJUnN2MjoxOworCVVDSEFSCQlNYXhTUExlbmd0aDoyOworCVVDSEFSCQlSc3YxOjE7CisJVUNIQVIJCVVBUFNEX0FDX0JFOjE7CisJVUNIQVIJCVVBUFNEX0FDX0JLOjE7CisJVUNIQVIJCVVBUFNEX0FDX1ZJOjE7CisJVUNIQVIJCVVBUFNEX0FDX1ZPOjE7CisjZWxzZQorICAgIFVDSEFSCQlVQVBTRF9BQ19WTzoxOworCVVDSEFSCQlVQVBTRF9BQ19WSToxOworCVVDSEFSCQlVQVBTRF9BQ19CSzoxOworCVVDSEFSCQlVQVBTRF9BQ19CRToxOworCVVDSEFSCQlSc3YxOjE7CisJVUNIQVIJCU1heFNQTGVuZ3RoOjI7CisJVUNIQVIJCVJzdjI6MTsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBRQlNTX1NUQV9JTkZPX1BBUk0sICpQUUJTU19TVEFfSU5GT19QQVJNOworCisvLyBRQlNTIEluZm8gZmllbGQgaW4gUUFQJ3MgQmVhY29uL1Byb2JlUnNwCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUgkJVUFQU0Q6MTsKKwlVQ0hBUgkJUnN2OjM7CisgICAgVUNIQVIJCVBhcmFtU2V0Q291bnQ6NDsKKyNlbHNlCisgICAgVUNIQVIJCVBhcmFtU2V0Q291bnQ6NDsKKwlVQ0hBUgkJUnN2OjM7CisJVUNIQVIJCVVBUFNEOjE7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gUUJTU19BUF9JTkZPX1BBUk0sICpQUUJTU19BUF9JTkZPX1BBUk07CisKKy8vIFFPUyBDYXBhYmlsaXR5IHJlcG9ydGVkIGluIFFBUCdzIEJFQUNPTi9Qcm9iZVJzcAorLy8gUU9TIENhcGFiaWxpdHkgc2VudCBvdXQgaW4gUVNUQSdzIEFzc29jaWF0ZVJlcS9SZUFzc29jaWF0ZVJlcQordHlwZWRlZiBzdHJ1Y3QgeworICAgIEJPT0xFQU4gICAgIGJWYWxpZDsgICAgICAgICAgICAgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIEJPT0xFQU4gICAgIGJRQWNrOworICAgIEJPT0xFQU4gICAgIGJRdWV1ZVJlcXVlc3Q7CisgICAgQk9PTEVBTiAgICAgYlR4b3BSZXF1ZXN0OworLy8gIEJPT0xFQU4gICAgIGJNb3JlRGF0YUFjazsKKyAgICBVQ0hBUiAgICAgICBFZGNhVXBkYXRlQ291bnQ7Cit9IFFPU19DQVBBQklMSVRZX1BBUk0sICpQUU9TX0NBUEFCSUxJVFlfUEFSTTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QgeworICAgIFVDSEFSICAgICAgIElFTGVuOworICAgIFVDSEFSICAgICAgIElFW01BWF9DVVNUT01fTEVOXTsKK30gV1BBX0lFXzsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgVUNIQVIgICBCc3NpZFtNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgQ2hhbm5lbDsKKwlVQ0hBUiAgIENlbnRyYWxDaGFubmVsOwkvL1N0b3JlIHRoZSB3aWRlLWJhbmQgY2VudHJhbCBjaGFubmVsIGZvciA0ME1Iei4gIC51c2VkIGluIDQwTUh6IEFQLiBPciB0aGlzIGlzIHRoZSBzYW1lIGFzIENoYW5uZWwuCisgICAgVUNIQVIgICBCc3NUeXBlOworICAgIFVTSE9SVCAgQXRpbVdpbjsKKyAgICBVU0hPUlQgIEJlYWNvblBlcmlvZDsKKworICAgIFVDSEFSICAgU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisgICAgVUNIQVIgICBTdXBSYXRlTGVuOworICAgIFVDSEFSICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisgICAgVUNIQVIgICBFeHRSYXRlTGVuOworCUhUX0NBUEFCSUxJVFlfSUUgSHRDYXBhYmlsaXR5OworCVVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuOworCUFERF9IVF9JTkZPX0lFIEFkZEh0SW5mbzsJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJVUNIQVIJCQlBZGRIdEluZm9MZW47CisJVUNIQVIJCQlOZXdFeHRDaGFuT2Zmc2V0OworCUNIQVIgICAgUnNzaTsKKyAgICBVQ0hBUiAgIFByaXZhY3k7CQkJLy8gSW5kaWNhdGUgc2VjdXJpdHkgZnVuY3Rpb24gT04vT0ZGLiBEb24ndCBtZXNzIHVwIHdpdGggYXV0aCBtb2RlLgorCVVDSEFSCUhpZGRlbjsKKworICAgIFVTSE9SVCAgRHRpbVBlcmlvZDsKKyAgICBVU0hPUlQgIENhcGFiaWxpdHlJbmZvOworCisgICAgVVNIT1JUICBDZnBDb3VudDsKKyAgICBVU0hPUlQgIENmcFBlcmlvZDsKKyAgICBVU0hPUlQgIENmcE1heER1cmF0aW9uOworICAgIFVTSE9SVCAgQ2ZwRHVyUmVtYWluaW5nOworICAgIFVDSEFSICAgU3NpZExlbjsKKyAgICBDSEFSICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKworICAgIFVMT05HICAgTGFzdEJlYWNvblJ4VGltZTsgLy8gT1MncyB0aW1lc3RhbXAKKworCUJPT0xFQU4JYlNFUzsKKworCS8vIE5ldyBmb3IgV1BBMgorCUNJUEhFUl9TVUlURQkJCQkJV1BBOwkJCS8vIEFQIGFubm91bmNlZCBXUEEgY2lwaGVyIHN1aXRlCisJQ0lQSEVSX1NVSVRFCQkJCQlXUEEyOwkJCS8vIEFQIGFubm91bmNlZCBXUEEyIGNpcGhlciBzdWl0ZQorCisJLy8gTmV3IGZvciBtaWNyb3NvZnQgV1BBIHN1cHBvcnQKKwlORElTXzgwMl8xMV9GSVhFRF9JRXMJRml4SUVzOworCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJQXV0aE1vZGVBdXg7CS8vIEFkZGl0aW9uIG1vZGUgZm9yIFdQQTIgLyBXUEEgY2FwYWJsZSBBUAorCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJQXV0aE1vZGU7CisJTkRJU184MDJfMTFfV0VQX1NUQVRVUwlXZXBTdGF0dXM7CQkJCS8vIFVuaWNhc3QgRW5jcnlwdGlvbiBBbGdvcml0aG0gZXh0cmFjdCBmcm9tIFZBUl9JRQorCVVTSE9SVAkJCQkJVmFySUVMZW47CQkJCS8vIExlbmd0aCBvZiBuZXh0IFZJRSBpbmNsdWRlIEVJRCAmIExlbmd0aAorCVVDSEFSCQkJCQlWYXJJRXNbTUFYX1ZJRV9MRU5dOworCisJLy8gQ0NYIENraXAgaW5mb3JtYXRpb24KKyAgICBVQ0hBUiAgIENraXBGbGFnOworCisJLy8gQ0NYIDIgVFNGCisJVUNIQVIJUFRTRls0XTsJCS8vIFBhcmVudCBUU0YKKwlVQ0hBUglUVFNGWzhdOwkJLy8gVGFyZ2V0IFRTRgorCisgICAgLy8gODAyLjExZSBkOSwgYW5kIFdNTQorCUVEQ0FfUEFSTSAgICAgICAgICAgRWRjYVBhcm07CisJUU9TX0NBUEFCSUxJVFlfUEFSTSBRb3NDYXBhYmlsaXR5OworCVFCU1NfTE9BRF9QQVJNICAgICAgUWJzc0xvYWQ7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgV1BBX0lFXyAgICAgV3BhSUU7CisgICAgV1BBX0lFXyAgICAgUnNuSUU7CisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCVVDSEFSCQlDb3VudHJ5U3RyaW5nWzNdOworCUJPT0xFQU4JCWJIYXNDb3VudHJ5SUU7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworfSBCU1NfRU5UUlksICpQQlNTX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgVUNIQVIgICAgICAgICAgIEJzc05yOworICAgIFVDSEFSICAgICAgICAgICBCc3NPdmVybGFwTnI7CisgICAgQlNTX0VOVFJZICAgICAgIEJzc0VudHJ5W01BWF9MRU5fT0ZfQlNTX1RBQkxFXTsKK30gQlNTX1RBQkxFLCAqUEJTU19UQUJMRTsKKworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9RVUVVRV9FTEVNIHsKKyAgICBVTE9ORyAgICAgICAgICAgICBNYWNoaW5lOworICAgIFVMT05HICAgICAgICAgICAgIE1zZ1R5cGU7CisgICAgVUxPTkcgICAgICAgICAgICAgTXNnTGVuOworICAgIFVDSEFSICAgICAgICAgICAgIE1zZ1tNR01UX0RNQV9CVUZGRVJfU0laRV07CisgICAgTEFSR0VfSU5URUdFUiAgICAgVGltZVN0YW1wOworICAgIFVDSEFSICAgICAgICAgICAgIFJzc2kwOworICAgIFVDSEFSICAgICAgICAgICAgIFJzc2kxOworICAgIFVDSEFSICAgICAgICAgICAgIFJzc2kyOworICAgIFVDSEFSICAgICAgICAgICAgIFNpZ25hbDsKKyAgICBVQ0hBUiAgICAgICAgICAgICBDaGFubmVsOworICAgIFVDSEFSICAgICAgICAgICAgIFdjaWQ7CisgICAgQk9PTEVBTiAgICAgICAgICAgT2NjdXBpZWQ7CisjaWZkZWYgTUxNRV9FWAorCVVTSE9SVCAgICAgICAgICAgIElkeDsKKyNlbmRpZiAvLyBNTE1FX0VYIC8vCit9IE1MTUVfUVVFVUVfRUxFTSwgKlBNTE1FX1FVRVVFX0VMRU07CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX1FVRVVFIHsKKyAgICBVTE9ORyAgICAgICAgICAgICBOdW07CisgICAgVUxPTkcgICAgICAgICAgICAgSGVhZDsKKyAgICBVTE9ORyAgICAgICAgICAgICBUYWlsOworICAgIE5ESVNfU1BJTl9MT0NLICAgTG9jazsKKyAgICBNTE1FX1FVRVVFX0VMRU0gIEVudHJ5W01BWF9MRU5fT0ZfTUxNRV9RVUVVRV07Cit9IE1MTUVfUVVFVUUsICpQTUxNRV9RVUVVRTsKKwordHlwZWRlZiBWT0lEICgqU1RBVEVfTUFDSElORV9GVU5DKShWT0lEICpBZGFwdG9yLCBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCit0eXBlZGVmIHN0cnVjdCBfU1RBVEVfTUFDSElORSB7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgTnJTdGF0ZTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5yTXNnOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VyclN0YXRlOworICAgIFNUQVRFX01BQ0hJTkVfRlVOQyAgICAgICAgICAgICAqVHJhbnNGdW5jOworfSBTVEFURV9NQUNISU5FLCAqUFNUQVRFX01BQ0hJTkU7CisKKworLy8gTUxNRSBBVVggZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkIHRlbXBvcmFybGl5IHNldHRpbmdzIGR1cmluZyBhIGNvbm5lY3Rpb24gYXR0ZW1wdC4KKy8vIE9uY2UgdGhpcyBhdHRlbXAgc3VjY2VlZHMsIGFsbCBzZXR0aW5ncyB3aWxsIGJlIGNvcHkgdG8gcEFkLT5TdGFBY3RpdmUuCisvLyBBIGNvbm5lY3Rpb24gYXR0ZW1wdCAodXNlciBzZXQgT0lELCByb2FtaW5nLCBDQ1ggZmFzdCByb2FtaW5nLC4uKSBjb25zaXN0cyBvZgorLy8gc2V2ZXJhbCBzdGVwcyAoSk9JTiwgQVVUSCwgQVNTT0Mgb3IgUkVBU1NPQykgYW5kIG1heSBmYWlsIGF0IGFueSBzdGVwLiBXZSBwdXJwb3NlbHkKKy8vIHNlcGFyYXRlIHRoaXMgdW5kZXItdHJpYWwgc2V0dGluZ3MgYXdheSBmcm9tIHBBZC0+U3RhQWN0aXZlIHNvIHRoYXQgb25jZQorLy8gdGhpcyBuZXcgYXR0ZW1wdCBmYWlsZWQsIGRyaXZlciBjYW4gYXV0by1yZWNvdmVyIGJhY2sgdG8gdGhlIGFjdGl2ZSBzZXR0aW5ncy4KK3R5cGVkZWYgc3RydWN0IF9NTE1FX0FVWCB7CisgICAgVUNIQVIgICAgICAgICAgICAgICBCc3NUeXBlOworICAgIFVDSEFSICAgICAgICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworICAgIFVDSEFSICAgICAgICAgICAgICAgU3NpZExlbjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEJzc2lkW01BQ19BRERSX0xFTl07CisJVUNIQVIJCQkJQXV0b1JlY29ubmVjdFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKwlVQ0hBUgkJCQlBdXRvUmVjb25uZWN0U3NpZExlbjsKKyAgICBVU0hPUlQgICAgICAgICAgICAgIEFsZzsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIFNjYW5UeXBlOworICAgIFVDSEFSICAgICAgICAgICAgICAgQ2hhbm5lbDsKKwlVQ0hBUiAgICAgICAgICAgICAgIENlbnRyYWxDaGFubmVsOworICAgIFVTSE9SVCAgICAgICAgICAgICAgQWlkOworICAgIFVTSE9SVCAgICAgICAgICAgICAgQ2FwYWJpbGl0eUluZm87CisgICAgVVNIT1JUICAgICAgICAgICAgICBCZWFjb25QZXJpb2Q7CisgICAgVVNIT1JUICAgICAgICAgICAgICBDZnBNYXhEdXJhdGlvbjsKKyAgICBVU0hPUlQgICAgICAgICAgICAgIENmcFBlcmlvZDsKKyAgICBVU0hPUlQgICAgICAgICAgICAgIEF0aW1XaW47CisKKwkvLyBDb3B5IHN1cHBvcnRlZCByYXRlIGZyb20gZGVzaXJlZCBBUCdzIGJlYWNvbi4gV2UgYXJlIHRyeWluZyB0byBtYXRjaAorCS8vIEFQJ3Mgc3VwcG9ydGVkIGFuZCBleHRlbmRlZCByYXRlIHNldHRpbmdzLgorCVVDSEFSCQkgICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSCQkgICAgICAgIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSCQkgICAgICAgIFN1cFJhdGVMZW47CisJVUNIQVIJCSAgICAgICAgRXh0UmF0ZUxlbjsKKwlIVF9DQVBBQklMSVRZX0lFCQlIdENhcGFiaWxpdHk7CisJVUNIQVIJCSAgICAgICAgCUh0Q2FwYWJpbGl0eUxlbjsKKwlBRERfSFRfSU5GT19JRQkJQWRkSHRJbmZvOwkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQ7CisJLy9SVF9IVF9DQVBBQklMSVRZCVN1cHBvcnRlZEh0UGh5OworCisgICAgLy8gbmV3IGZvciBRT1MKKyAgICBRT1NfQ0FQQUJJTElUWV9QQVJNIEFQUW9zQ2FwYWJpbGl0eTsgICAgLy8gUU9TIGNhcGFiaWxpdHkgb2YgdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUAorICAgIEVEQ0FfUEFSTSAgICAgICAgICAgQVBFZGNhUGFybTsgICAgICAgICAvLyBFRENBIHBhcmFtZXRlcnMgb2YgdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUAorICAgIFFCU1NfTE9BRF9QQVJNICAgICAgQVBRYnNzTG9hZDsgICAgICAgICAvLyBRQlNTIGxvYWQgb2YgdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUAorCisgICAgLy8gbmV3IHRvIGtlZXAgUmFsaW5rIHNwZWNpZmljIGZlYXR1cmUKKyAgICBVTE9ORyAgICAgICAgICAgICAgIEFQUmFsaW5rSWU7CisKKyAgICBCU1NfVEFCTEUgICAgICAgICAgIFNzaWRCc3NUYWI7ICAgICAvLyBBUCBsaXN0IGZvciB0aGUgc2FtZSBTU0lECisgICAgQlNTX1RBQkxFICAgICAgICAgICBSb2FtVGFiOyAgICAgICAgLy8gQVAgbGlzdCBlbGlnaWJsZSBmb3Igcm9hbWluZworICAgIFVMT05HICAgICAgICAgICAgICAgQnNzSWR4OworICAgIFVMT05HICAgICAgICAgICAgICAgUm9hbUlkeDsKKworCUJPT0xFQU4JCQkJQ3VyclJlcUlzRnJvbU5kaXM7CisKKyAgICBSQUxJTktfVElNRVJfU1RSVUNUIEJlYWNvblRpbWVyLCBTY2FuVGltZXI7CisgICAgUkFMSU5LX1RJTUVSX1NUUlVDVCBBdXRoVGltZXI7CisgICAgUkFMSU5LX1RJTUVSX1NUUlVDVCBBc3NvY1RpbWVyLCBSZWFzc29jVGltZXIsIERpc2Fzc29jVGltZXI7Cit9IE1MTUVfQVVYLCAqUE1MTUVfQVVYOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9BRERCQV9SRVFfU1RSVUNUeworCVVDSEFSICAgV2NpZDsJLy8KKwlVQ0hBUiAgIHBBZGRyW01BQ19BRERSX0xFTl07CisJVUNIQVIgICBCYUJ1ZlNpemU7CisJVVNIT1JUCVRpbWVPdXRWYWx1ZTsKKwlVQ0hBUiAgIFRJRDsKKwlVQ0hBUiAgIFRva2VuOworCVVTSE9SVAlCYVN0YXJ0U2VxOworfSBNTE1FX0FEREJBX1JFUV9TVFJVQ1QsICpQTUxNRV9BRERCQV9SRVFfU1RSVUNUOworCisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0RFTEJBX1JFUV9TVFJVQ1R7CisJVUNIQVIgICBXY2lkOwkvLworCVVDSEFSICAgICBBZGRyW01BQ19BRERSX0xFTl07CisJVUNIQVIgICBUSUQ7CisJVUNIQVIJSW5pdGlhdG9yOworfSBNTE1FX0RFTEJBX1JFUV9TVFJVQ1QsICpQTUxNRV9ERUxCQV9SRVFfU1RSVUNUOworCisvLyBhc3NvYyBzdHJ1Y3QgaXMgZXF1YWwgdG8gcmVhc3NvYwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfQVNTT0NfUkVRX1NUUlVDVHsKKyAgICBVQ0hBUiAgICAgQWRkcltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICBDYXBhYmlsaXR5SW5mbzsKKyAgICBVU0hPUlQgICAgTGlzdGVuSW50djsKKyAgICBVTE9ORyAgICAgVGltZW91dDsKK30gTUxNRV9BU1NPQ19SRVFfU1RSVUNULCAqUE1MTUVfQVNTT0NfUkVRX1NUUlVDVCwgTUxNRV9SRUFTU09DX1JFUV9TVFJVQ1QsICpQTUxNRV9SRUFTU09DX1JFUV9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1R7CisgICAgVUNIQVIgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKyAgICBVU0hPUlQgICAgUmVhc29uOworfSBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QsICpQTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9BVVRIX1JFUV9TVFJVQ1QgeworICAgIFVDSEFSICAgICAgICBBZGRyW01BQ19BRERSX0xFTl07CisgICAgVVNIT1JUICAgICAgIEFsZzsKKyAgICBVTE9ORyAgICAgICAgVGltZW91dDsKK30gTUxNRV9BVVRIX1JFUV9TVFJVQ1QsICpQTUxNRV9BVVRIX1JFUV9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0RFQVVUSF9SRVFfU1RSVUNUIHsKKyAgICBVQ0hBUiAgICAgICAgQWRkcltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgICBSZWFzb247Cit9IE1MTUVfREVBVVRIX1JFUV9TVFJVQ1QsICpQTUxNRV9ERUFVVEhfUkVRX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFVMT05HICAgICAgQnNzSWR4OworfSBNTE1FX0pPSU5fUkVRX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfU0NBTl9SRVFfU1RSVUNUIHsKKyAgICBVQ0hBUiAgICAgIEJzc2lkW01BQ19BRERSX0xFTl07CisgICAgVUNIQVIgICAgICBCc3NUeXBlOworICAgIFVDSEFSICAgICAgU2NhblR5cGU7CisgICAgVUNIQVIgICAgICBTc2lkTGVuOworICAgIENIQVIgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworfSBNTE1FX1NDQU5fUkVRX1NUUlVDVCwgKlBNTE1FX1NDQU5fUkVRX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfU1RBUlRfUkVRX1NUUlVDVCB7CisgICAgQ0hBUiAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworICAgIFVDSEFSICAgICAgIFNzaWRMZW47Cit9IE1MTUVfU1RBUlRfUkVRX1NUUlVDVCwgKlBNTE1FX1NUQVJUX1JFUV9TVFJVQ1Q7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKy8vIHN0cnVjdHVyZSBmb3IgRExTCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0RMUyB7CisJVVNIT1JUCQkJCQkJVGltZU91dDsJCS8vIFVzZSB0byB0aW1lIG91dCB3aGlsZSBzbGllbmNlLCB1bml0OiBzZWNvbmQgLCBzZXQgYnkgVUkKKwlVU0hPUlQJCQkJCQlDb3VudERvd25UaW1lcjsJLy8gVXNlIHRvIHRpbWUgb3V0IHdoaWxlIHNsaWVuY2UsdW5pdDogc2Vjb25kICwgdXNlZCBieSBkcml2ZXIgb25seQorCU5ESVNfODAyXzExX01BQ19BRERSRVNTCQlNYWNBZGRyOwkJLy8gc2V0IGJ5IFVJCisJVUNIQVIJCQkJCQlTdGF0dXM7CQkJLy8gMDogbm9uZSAsIDE6IHdhaXQgU1RBa2V5LCAyOiBmaW5pc2ggRExTIHNldHVwICwgc2V0IGJ5IGRyaXZlciBvbmx5CisJQk9PTEVBTgkJCQkJCVZhbGlkOwkJCS8vIDE6IHZhbGlkICwgMDogaW52YWxpZCAsIHNldCBieSBVSSwgdXNlIHRvIHNldHVwIG9yIHRlYXIgZG93biBETFMgbGluaworCVJBTElOS19USU1FUl9TVFJVQ1QJCQlUaW1lcjsJCQkvLyBVc2UgdG8gdGltZSBvdXQgd2hpbGUgaGFuZHNoYWtlCisJVVNIT1JUCQkJCQkJU2VxdWVuY2U7CisJVVNIT1JUCQkJCQkJTWFjVGFiTWF0Y2hXQ0lEOwkvLyBBU0lDCisJQk9PTEVBTgkJCQkJCWJIVENhcDsKKwlQVk9JRAkJCQkJCXBBZDsKK30gUlRfODAyXzExX0RMUywgKlBSVF84MDJfMTFfRExTOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9ETFNfUkVRX1NUUlVDVCB7CisgICAgUFJUXzgwMl8xMV9ETFMJcERMUzsKKyAgICBVU0hPUlQJCQlSZWFzb247Cit9IE1MTUVfRExTX1JFUV9TVFJVQ1QsICpQTUxNRV9ETFNfUkVRX1NUUlVDVDsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyAgICBVQ0hBUiAgIEVpZDsKKyAgICBVQ0hBUiAgIExlbjsKKyAgICBDSEFSICAgT2N0ZXRbMV07Cit9IEVJRF9TVFJVQ1QsKlBFSURfU1RSVUNULCBCRUFDT05fRUlEX1NUUlVDVCwgKlBCRUFDT05fRUlEX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SVE1QX1RYX1JBVEVfU1dJVENICit7CisJVUNIQVIgICBJdGVtTm87CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCVJzdjI6MjsKKwlVQ0hBUglNb2RlOjI7CisJVUNIQVIJUnN2MToxOworCVVDSEFSCUJXOjE7CisJVUNIQVIJU2hvcnRHSToxOworCVVDSEFSCVNUQkM6MTsKKyNlbHNlCisJVUNIQVIJU1RCQzoxOworCVVDSEFSCVNob3J0R0k6MTsKKwlVQ0hBUglCVzoxOworCVVDSEFSCVJzdjE6MTsKKwlVQ0hBUglNb2RlOjI7CisJVUNIQVIJUnN2MjoyOworI2VuZGlmCisJVUNIQVIgICBDdXJyTUNTOworCVVDSEFSICAgVHJhaW5VcDsKKwlVQ0hBUiAgIFRyYWluRG93bjsKK30gUlJUTVBfVFhfUkFURV9TV0lUQ0gsICpQUlRNUF9UWF9SQVRFX1NXSVRDSDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gQVAgbWxtZS5oID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgVEJUVF9QUkVMT0FEX1RJTUUgICAgICAgMzg0ICAgICAgICAvLyB1c2VjLiBMb21nUHJlYW1ibGUgKyAyNC1ieXRlIGF0IDFNYnBzCisjZGVmaW5lIERFRkFVTFRfRFRJTV9QRVJJT0QgICAgIDEKKworLy8gd2VpZ2h0aW5nIGZhY3RvciB0byBjYWxjdWxhdGUgQ2hhbm5lbCBxdWFsaXR5LCB0b3RhbCBzaG91bGQgYmUgMTAwJQorLy8jZGVmaW5lIFJTU0lfV0VJR0hUSU5HICAgICAgICAgICAgICAgICAgIDAKKy8vI2RlZmluZSBUWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICA0MAorLy8jZGVmaW5lIFJYX1dFSUdIVElORyAgICAgICAgICAgICAgICAgICAgIDYwCisKKyNkZWZpbmUgTUFDX1RBQkxFX0FHRU9VVF9USU1FCQkJMzAwCQkJLy8gdW5pdDogc2VjCisjZGVmaW5lIE1BQ19UQUJMRV9BU1NPQ19USU1FT1VUCQkJNQkJCS8vIHVuaXQ6IHNlYworI2RlZmluZSBNQUNfVEFCTEVfRlVMTChUYWIpCQkJCSgoVGFiKS5zaXplID09IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCisvLyBBUCBzaGFsbCBkcm9wIHRoZSBzdGEgaWYgY29udGluZSBUeCBmYWlsIGNvdW50IHJlYWNoIGl0LgorI2RlZmluZSBNQUNfRU5UUllfTElGRV9DSEVDS19DTlQJCTIwCQkJLy8gcGFja2V0IGNudC4KKworLy8gVmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+U3N0Cit0eXBlZGVmIGVudW0gX1NzdCB7CisgICAgU1NUX05PVF9BVVRILCAgIC8vIDA6IGVxdWl2YWxlbnQgdG8gSUVFRSA4MDIuMTEvMTk5OSBzdGF0ZSAxCisgICAgU1NUX0FVVEgsICAgICAgIC8vIDE6IGVxdWl2YWxlbnQgdG8gSUVFRSA4MDIuMTEvMTk5OSBzdGF0ZSAyCisgICAgU1NUX0FTU09DICAgICAgIC8vIDI6IGVxdWl2YWxlbnQgdG8gSUVFRSA4MDIuMTEvMTk5OSBzdGF0ZSAzCit9IFNTVDsKKworLy8gdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+QXV0aFN0YXRlCit0eXBlZGVmIGVudW0gX0F1dGhTdGF0ZSB7CisgICAgQVNfTk9UX0FVVEgsCisgICAgQVNfQVVUSF9PUEVOLCAgICAgICAvLyBTVEEgaGFzIGJlZW4gYXV0aGVudGljYXRlZCB1c2luZyBPUEVOIFNZU1RFTQorICAgIEFTX0FVVEhfS0VZLCAgICAgICAgLy8gU1RBIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQgdXNpbmcgU0hBUkVEIEtFWQorICAgIEFTX0FVVEhFTlRJQ0FUSU5HICAgLy8gU1RBIGlzIHdhaXRpbmcgZm9yIEFVVEggc2VxIzMgdXNpbmcgU0hBUkVEIEtFWQorfSBBVVRIX1NUQVRFOworCisvL2Zvci13cGEgdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+V3BhU3RhdGUgIDgwMi4xaSBEMyAgIHAuMTE0Cit0eXBlZGVmIGVudW0gX0FwV3BhU3RhdGUgeworICAgIEFTX05PVFVTRSwgICAgICAgICAgICAgIC8vIDAKKyAgICBBU19ESVNDT05ORUNULCAgICAgICAgICAvLyAxCisgICAgQVNfRElTQ09OTkVDVEVELCAgICAgICAgLy8gMgorICAgIEFTX0lOSVRJQUxJWkUsICAgICAgICAgIC8vIDMKKyAgICBBU19BVVRIRU5USUNBVElPTiwgICAgICAvLyA0CisgICAgQVNfQVVUSEVOVElDQVRJT04yLCAgICAgLy8gNQorICAgIEFTX0lOSVRQTUssICAgICAgICAgICAgIC8vIDYKKyAgICBBU19JTklUUFNLLCAgICAgICAgICAgICAvLyA3CisgICAgQVNfUFRLU1RBUlQsICAgICAgICAgICAgLy8gOAorICAgIEFTX1BUS0lOSVRfTkVHT1RJQVRJTkcsIC8vIDkKKyAgICBBU19QVEtJTklURE9ORSwgICAgICAgICAvLyAxMAorICAgIEFTX1VQREFURUtFWVMsICAgICAgICAgIC8vIDExCisgICAgQVNfSU5URUdSSVRZX0ZBSUxVUkUsICAgLy8gMTIKKyAgICBBU19LRVlVUERBVEUsICAgICAgICAgICAvLyAxMworfSBBUF9XUEFfU1RBVEU7CisKKy8vIGZvci13cGEgdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+V3BhU3RhdGUgIDgwMi4xaSBEMyAgIHAuMTE0Cit0eXBlZGVmIGVudW0gX0dUS1N0YXRlIHsKKyAgICBSRUtFWV9ORUdPVElBVElORywKKyAgICBSRUtFWV9FU1RBQkxJU0hFRCwKKyAgICBLRVlFUlJPUiwKK30gR1RLX1NUQVRFOworCisvLyAgZm9yLXdwYSAgdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+V3BhU3RhdGUgIDgwMi4xaSBEMyAgIHAuMTE0Cit0eXBlZGVmIGVudW0gX1dwYUdUS1N0YXRlIHsKKyAgICBTRVRLRVlTLAorICAgIFNFVEtFWVNfRE9ORSwKK30gV1BBX0dUS19TVEFURTsKKy8vID09PT09PT09PT09PT09PT09PT09PT0gZW5kIG9mIEFQIG1sbWUuaCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworI2VuZGlmCS8vIE1MTUVfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL25ldGlmX2Jsb2NrLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL25ldGlmX2Jsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1MTUxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbmV0aWZfYmxvY2suaApAQCAtMCwwICsxLDU4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fTkVUX0lGX0JMT0NLX0hfXworI2RlZmluZSBfX05FVF9JRl9CTE9DS19IX18KKworLy8jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSAibGlua19saXN0LmgiCisjaW5jbHVkZSAicnRtcC5oIgorCisjZGVmaW5lIEZSRUVfTkVUSUZfUE9PTF9TSVpFIDMyCisKK3R5cGVkZWYgc3RydWN0IF9ORVRJRl9FTlRSWQoreworCXN0cnVjdCBfTkVUSUZfRU5UUlkgKnBOZXh0OworCVBORVRfREVWIHBOZXREZXY7Cit9IE5FVElGX0VOVFJZLCAqUE5FVElGX0VOVFJZOworCit2b2lkIGluaXRibG9ja1F1ZXVlVGFiKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBibG9ja05ldElmKAorCUlOIFBCTE9DS19RVUVVRV9FTlRSWSBwQmxvY2tRdWV1ZUVudHJ5LAorCUlOIFBORVRfREVWIHBOZXREZXYpOworCitWT0lEIHJlbGVhc2VOZXRJZigKKwlJTiBQQkxPQ0tfUVVFVUVfRU5UUlkgcEJsb2NrUXVldWVFbnRyeSk7CisKK1ZPSUQgU3RvcE5ldElmUXVldWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgUXVlSWR4LAorCUlOIFBORElTX1BBQ0tFVCBwUGFja2V0KTsKKyNlbmRpZiAvLyBfX05FVF9JRl9CTE9DS19IX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9vaWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvb2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4YmYwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvb2lkLmgKQEAgLTAsMCArMSwxMTQyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCW9pZC5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisqLworI2lmbmRlZiBfT0lEX0hfCisjZGVmaW5lIF9PSURfSF8KKworLy8jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKworCisjZGVmaW5lIFRSVUUJCQkJMQorI2RlZmluZSBGQUxTRQkJCQkwCisvLworLy8gSUVFRSA4MDIuMTEgU3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKKy8vCisjZGVmaW5lIE1BWF9UWF9QT1dFUl9MRVZFTCAgICAgICAgICAgICAgMTAwICAgLyogbVcgKi8KKyNkZWZpbmUgTUFYX1JTU0lfVFJJR0dFUiAgICAgICAgICAgICAgICAtMTAgICAgLyogZEJtICovCisjZGVmaW5lIE1JTl9SU1NJX1RSSUdHRVIgICAgICAgICAgICAgICAgLTIwMCAgIC8qIGRCbSAqLworI2RlZmluZSBNQVhfRlJBR19USFJFU0hPTEQgICAgICAgICAgICAgIDIzNDYgIC8qIGJ5dGUgY291bnQgKi8KKyNkZWZpbmUgTUlOX0ZSQUdfVEhSRVNIT0xEICAgICAgICAgICAgICAyNTYgICAvKiBieXRlIGNvdW50ICovCisjZGVmaW5lIE1BWF9SVFNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjM0NyAgLyogYnl0ZSBjb3VudCAqLworCisvLyBuZXcgdHlwZXMgZm9yIE1lZGlhIFNwZWNpZmljIEluZGljYXRpb25zCisvLyBFeHRlbnNpb24gY2hhbm5lbCBvZmZzZXQKKyNkZWZpbmUgRVhUQ0hBX05PTkUJCQkwCisjZGVmaW5lIEVYVENIQV9BQk9WRQkJMHgxCisjZGVmaW5lIEVYVENIQV9CRUxPVwkJMHgzCisKKy8vIEJXCisjZGVmaW5lIEJBTkRfV0lEVEhfMjAJCTAKKyNkZWZpbmUgQkFORF9XSURUSF80MAkJMQorI2RlZmluZSBCQU5EX1dJRFRIX0JPVEgJCTIKKyNkZWZpbmUgQkFORF9XSURUSF8xMAkJMwkvLyA4MDIuMTFqIGhhcyAxME1Iei4gVGhpcyBkZWZpbml0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2FnZS4gZG9lc24ndCBmaWxsIGluIHRoZSBJRSBvciBvdGhlciBmaWVsZC4KKy8vIFNIT1JUR0kKKyNkZWZpbmUgR0FQX0lOVEVSVkFMXzQwMAkxCS8vIG9ubHkgc3VwcG9ydCBpbiBIVCBtb2RlCisjZGVmaW5lIEdBUF9JTlRFUlZBTF84MDAJMAorI2RlZmluZSBHQVBfSU5URVJWQUxfQk9USAkyCisKKyNkZWZpbmUgTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQJCQkxCisjZGVmaW5lIE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkCQkwCisKKyNkZWZpbmUgTkRJU184MDJfMTFfTEVOR1RIX1NTSUQgICAgICAgICAzMgorI2RlZmluZSBORElTXzgwMl8xMV9MRU5HVEhfUkFURVMgICAgICAgIDgKKyNkZWZpbmUgTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTX0VYICAgICAxNgorI2RlZmluZSBNQUNfQUREUl9MRU5HVEggICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgTUFYX05VTV9PRl9DSFMJCQkJCTQ5IC8vIDE0IGNoYW5uZWxzIEAyLjRHICsgIDEyQFVOSUkgKyA0IEBNTUFDICsgMTEgQEhpcGVyTEFOMiArIDcgQEphcGFuICsgMSBhcyBOVUxMIHRlcm1pbmF0aW9uYworI2RlZmluZSBNQVhfTlVNQkVSX09GX0VWRU5UCQkJCTEwICAvLyBlbnRyeSAjIGluIEVWRU5UIHRhYmxlCisjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfTUFDCQkJCTMyIC8vIGlmIE1BWF9NQlNTSURfTlVNIGlzIDgsIHRoaXMgdmFsdWUgY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gMjExCisjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfQUNMCQkJCTY0CisjZGVmaW5lIE1BWF9MRU5HVEhfT0ZfU1VQUE9SVF9SQVRFUwkJMTIgICAgLy8gMSwgMiwgNS41LCAxMSwgNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NAorI2RlZmluZSBNQVhfTlVNQkVSX09GX0RMU19FTlRSWQkJCTQKKworCisKKyNpZm5kZWYgVU5ERVJfQ0UKKy8vIE9JRCBkZWZpbml0aW9uLCBzaW5jZSBORElTIDUuMCBkaWRuJ3QgZGVmaW5lIHRoZXNlLCB3ZSBuZWVkIHRvIGRlZmluZSBmb3Igb3VyIG93bgorLy8jaWYgX1dJTjMyX1dJTk5UPD0weDA1MDAKKworI2RlZmluZSBPSURfR0VOX01BQ0hJTkVfTkFNRSAgICAgICAgICAgICAgIDB4MDAwMTAyMUEKKworI2lmZGVmIFJBTElOS19BVEUKKyNkZWZpbmUgUlRfUVVFUllfQVRFX1RYRE9ORV9DT1VOVAkJCTB4MDQwMQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKyNkZWZpbmUgUlRfUVVFUllfU0lHTkFMX0NPTlRFWFQJCQkJMHgwNDAyCisjZGVmaW5lIFJUX1NFVF9JQVBQX1BJRCAgICAgICAgICAgICAgICAgCTB4MDQwNAorI2RlZmluZSBSVF9TRVRfQVBEX1BJRAkJCQkJCTB4MDQwNQorI2RlZmluZSBSVF9TRVRfREVMX01BQ19FTlRSWQkJCQkweDA0MDYKKworLy8KKy8vIElFRUUgODAyLjExIE9JRHMKKy8vCisjZGVmaW5lCU9JRF9HRVRfU0VUX1RPR0dMRQkJCTB4ODAwMAorCisjZGVmaW5lCU9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQJCQkweDAxMDMKKyNkZWZpbmUJT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCQkJCTB4MDEwNAorI2RlZmluZQlPSURfODAyXzExX1JTU0lfVFJJR0dFUgkJCQkJCTB4MDEwNworI2RlZmluZQlSVF9PSURfODAyXzExX1JTU0kJCQkJCQkJMHgwMTA4IC8vcnQyODYwCW9ubHkgLCBrYXRoeQorI2RlZmluZQlSVF9PSURfODAyXzExX1JTU0lfMQkJCQkJCTB4MDEwOSAvL3J0Mjg2MAlvbmx5ICwga2F0aHkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SU1NJXzIJCQkJCQkweDAxMEEgLy9ydDI4NjAJb25seSAsIGthdGh5CisjZGVmaW5lCU9JRF84MDJfMTFfTlVNQkVSX09GX0FOVEVOTkFTCQkJCTB4MDEwQgorI2RlZmluZQlPSURfODAyXzExX1JYX0FOVEVOTkFfU0VMRUNURUQJCQkJMHgwMTBDCisjZGVmaW5lCU9JRF84MDJfMTFfVFhfQU5URU5OQV9TRUxFQ1RFRAkJCQkweDAxMEQKKyNkZWZpbmUJT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMJCQkJCTB4MDEwRQorI2RlZmluZQlPSURfODAyXzExX0FERF9XRVAJCQkJCQkJMHgwMTEyCisjZGVmaW5lCU9JRF84MDJfMTFfUkVNT1ZFX1dFUAkJCQkJCTB4MDExMworI2RlZmluZQlPSURfODAyXzExX0RJU0FTU09DSUFURQkJCQkJCTB4MDExNAorI2RlZmluZQlPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCQkJCQkweDAxMTgKKyNkZWZpbmUJT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgkJCTB4MDExRQorI2RlZmluZQlPSURfODAyXzExX1RFU1QJCQkJCQkJCTB4MDExRgorI2RlZmluZQlSVF9PSURfODAyXzExX0NPVU5UUllfUkVHSU9OCQkJCTB4MDUwNworI2RlZmluZQlPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgkJCQkJMHgwNTA4CisjZGVmaW5lCU9JRF84MDJfMTFfU1NJRAkJCQkJCQkJMHgwNTA5CisjZGVmaW5lCU9JRF84MDJfMTFfQlNTSUQJCQkJCQkJMHgwNTBBCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUkFESU8JCQkJCQkJMHgwNTBCCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUEhZX01PREUJCQkJCQkweDA1MEMKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TVEFfQ09ORklHCQkJCQkweDA1MEQKKyNkZWZpbmUJT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTCQkJCQkweDA1MEUKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9QUkVBTUJMRQkJCQkJCTB4MDUwRgorI2RlZmluZQlPSURfODAyXzExX1dFUF9TVEFUVVMJCQkJCQkweDA1MTAKKyNkZWZpbmUJT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCQkJCTB4MDUxMQorI2RlZmluZQlPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUJCQkJMHgwNTEyCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUkVTRVRfQ09VTlRFUlMJCQkJMHgwNTEzCisjZGVmaW5lCU9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRAkJCQkJMHgwNTE0CisjZGVmaW5lCU9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQJCQkweDA1MTUKKyNkZWZpbmUJT0lEXzgwMl8xMV9QT1dFUl9NT0RFCQkJCQkJMHgwNTE2CisjZGVmaW5lCU9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwJCQkJCTB4MDUxNworI2RlZmluZQlSVF9PSURfODAyXzExX0FERF9XUEEJCQkJCQkweDA1MTgKKyNkZWZpbmUJT0lEXzgwMl8xMV9SRU1PVkVfS0VZCQkJCQkJMHgwNTE5CisjZGVmaW5lCU9JRF84MDJfMTFfQUREX0tFWQkJCQkJCQkweDA1MjAKKyNkZWZpbmUJT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OCQkJCQkweDA1MjEKKyNkZWZpbmUJT0lEXzgwMl8xMV9UWF9QQUNLRVRfQlVSU1QJCQkJCTB4MDUyMgorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX05PSVNFX0xFVkVMCQkJCTB4MDUyMworI2RlZmluZQlSVF9PSURfODAyXzExX0VYVFJBX0lORk8JCQkJCTB4MDUyNAorI2lmZGVmCURCRworI2RlZmluZQlSVF9PSURfODAyXzExX0hBUkRXQVJFX1JFR0lTVEVSCQkJCTB4MDUyNQorI2VuZGlmCisjZGVmaW5lIE9JRF84MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgICAgICAgICAgICBPSURfODAyXzExX1dFUF9TVEFUVVMKKyNkZWZpbmUgT0lEXzgwMl8xMV9ERUFVVEhFTlRJQ0FUSU9OICAgICAgICAgICAgICAgICAweDA1MjYKKyNkZWZpbmUgT0lEXzgwMl8xMV9EUk9QX1VORU5DUllQVEVEICAgICAgICAgICAgICAgICAweDA1MjcKKyNkZWZpbmUgT0lEXzgwMl8xMV9NSUNfRkFJTFVSRV9SRVBPUlRfRlJBTUUgICAgICAgICAweDA1MjgKKworLy8gRm9yIDgwMi4xeCBkYWVtaW4gdXNpbmcgdG8gcmVxdWlyZSBjdXJyZW50IGRyaXZlciBjb25maWd1cmF0aW9uCisjZGVmaW5lIE9JRF84MDJfMTFfUkFESVVTX1FVRVJZX1NFVFRJTkcJCQkJMHgwNTQwCisKKyNkZWZpbmUJUlRfT0lEX0RFVklDRV9OQU1FCQkJCQkJCTB4MDYwNworI2RlZmluZQlSVF9PSURfVkVSU0lPTl9JTkZPCQkJCQkJCTB4MDYwOAorI2RlZmluZQlPSURfODAyXzExX0JTU0lEX0xJU1QJCQkJCQkweDA2MDkKKyNkZWZpbmUJT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUwkJCQkJMHgwNjBBCisjZGVmaW5lCU9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVMJCQkJMHgwNjBCCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfTElOS19TVEFUVVMJCQkJMHgwNjBDCisjZGVmaW5lCU9JRF84MDJfMTFfUlNTSQkJCQkJCQkJMHgwNjBECisjZGVmaW5lCU9JRF84MDJfMTFfU1RBVElTVElDUwkJCQkJCTB4MDYwRQorI2RlZmluZQlPSURfR0VOX1JDVl9PSwkJCQkJCQkJMHgwNjBGCisjZGVmaW5lCU9JRF9HRU5fUkNWX05PX0JVRkZFUgkJCQkJCTB4MDYxMAorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX0VFUFJPTV9WRVJTSU9OCQkJMHgwNjExCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfRklSTVdBUkVfVkVSU0lPTgkJMHgwNjEyCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfTEFTVF9SWF9SQVRFCQkJMHgwNjEzCisjZGVmaW5lCVJUX09JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUxfMQkJCQkweDA2MTQKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9QSURWSUQJCQkJCTB4MDYxNQorLy9mb3IgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2RlZmluZSBPSURfU0VUX0NPVU5URVJNRUFTVVJFUyAgICAgICAgICAgICAgICAgICAgIDB4MDYxNgorI2RlZmluZSBPSURfODAyXzExX1NFVF9JRUVFODAyMVggICAgICAgICAgICAgICAgICAgIDB4MDYxNworI2RlZmluZSBPSURfODAyXzExX1NFVF9JRUVFODAyMVhfUkVRVUlSRV9LRVkgICAgICAgIDB4MDYxOAorI2RlZmluZSBPSURfODAyXzExX1BNS0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYyMAorI2RlZmluZSBSVF9PSURfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAgICAgICAgICAgICAgIDB4MDYyMQorI2RlZmluZSBSVF9PSURfV0VfVkVSU0lPTl9DT01QSUxFRCAgICAgICAgICAgICAgICAgIDB4MDYyMgorI2RlZmluZSBSVF9PSURfTkVXX0RSSVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYyMworCisKKy8vcnQyODYwICwga2F0aHkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TTlJfMAkJCQkJCQkweDA2MzAKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TTlJfMQkJCQkJCQkweDA2MzEKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9MQVNUX1RYX1JBVEUJCQkweDA2MzIKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9IVF9QSFlNT0RFCQkJCTB4MDYzMworI2RlZmluZQlSVF9PSURfODAyXzExX1NFVF9IVF9QSFlNT0RFCQkJCTB4MDYzNAorI2RlZmluZQlPSURfODAyXzExX1JFTE9BRF9ERUZBVUxUUwkJCQkJMHgwNjM1CisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfQVBTRF9TRVRUSU5HCQkJMHgwNjM2CisjZGVmaW5lCVJUX09JRF84MDJfMTFfU0VUX0FQU0RfU0VUVElORwkJCQkweDA2MzcKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9BUFNEX1BTTQkJCQkweDA2MzgKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9QU00JCQkJCTB4MDYzOQorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX0RMUwkJCQkJCTB4MDYzQQorI2RlZmluZQlSVF9PSURfODAyXzExX1NFVF9ETFMJCQkJCQkweDA2M0IKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9ETFNfUEFSQU0JCQkJMHgwNjNDCisjZGVmaW5lCVJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTQkJCQkJMHgwNjNECisjZGVmaW5lIFJUX09JRF84MDJfMTFfUVVFUllfV01NICAgICAgICAgICAgICAJCTB4MDYzRQorI2RlZmluZSBSVF9PSURfODAyXzExX1NFVF9XTU0gICAgICAJCQkJCTB4MDYzRgorI2RlZmluZSBSVF9PSURfODAyXzExX1FVRVJZX0lNTUVfQkFfQ0FQCQkJCTB4MDY0MAorI2RlZmluZSBSVF9PSURfODAyXzExX1NFVF9JTU1FX0JBX0NBUAkJCQkweDA2NDEKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9RVUVSWV9CQVRBQkxFCQkJCQkweDA2NDIKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9BRERfSU1NRV9CQQkJCQkJMHgwNjQzCisjZGVmaW5lIFJUX09JRF84MDJfMTFfVEVBUl9JTU1FX0JBCQkJCQkweDA2NDQKKyNkZWZpbmUgUlRfT0lEX0RSSVZFUl9ERVZJQ0VfTkFNRSAgICAgICAgICAgICAgICAgICAweDA2NDUKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9RVUVSWV9EQVRfSFRfUEhZTU9ERSAgICAgICAgICAweDA2NDYKKyNkZWZpbmUgUlRfT0lEX1FVRVJZX01VTFRJUExFX0NBUkRfU1VQUE9SVCAgICAgICAgICAweDA2NDcKKworLy8gUmFsaW5rIGRlZmluZWQgT0lEcworLy8gRGVubmlzIExlZSBtb3ZlIHRvIHBsYXRmb3JtIHNwZWNpZmljCisKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9CU1NJRAkJCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9CU1NJRCkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TU0lECQkJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1NTSUQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfQUREX1dFUAkJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0FERF9XRVApCisjZGVmaW5lCVJUX09JRF84MDJfMTFfQUREX0tFWQkJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0FERF9LRVkpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUkVNT1ZFX1dFUAkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUkVNT1ZFX1dFUCkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SRU1PVkVfS0VZCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9SRU1PVkVfS0VZKQorI2RlZmluZQlSVF9PSURfODAyXzExX0RJU0FTU09DSUFURQkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfRElTQVNTT0NJQVRFKQorI2RlZmluZQlSVF9PSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFKQorI2RlZmluZQlSVF9PSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSKQorI2RlZmluZQlSVF9PSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4pCisjZGVmaW5lCVJUX09JRF84MDJfMTFfV0VQX1NUQVRVUwkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfV0VQX1NUQVRVUykKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SRUxPQURfREVGQVVMVFMJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUkVMT0FEX0RFRkFVTFRTKQorI2RlZmluZQlSVF9PSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFKQorI2RlZmluZQlSVF9PSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMKQorI2RlZmluZQlSVF9PSURfODAyXzExX1JTU0lfVFJJR0dFUgkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUlNTSV9UUklHR0VSKQorI2RlZmluZQlSVF9PSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEKQorI2RlZmluZQlSVF9PSURfODAyXzExX1JUU19USFJFU0hPTEQJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1JUU19USFJFU0hPTEQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUlhfQU5URU5OQV9TRUxFQ1RFRAkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1JYX0FOVEVOTkFfU0VMRUNURUQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfVFhfQU5URU5OQV9TRUxFQ1RFRAkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1RYX0FOVEVOTkFfU0VMRUNURUQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfU1VQUE9SVEVEX1JBVEVTCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUykKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTKQorI2RlZmluZQlSVF9PSURfODAyXzExX0NPTkZJR1VSQVRJT04JCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0NPTkZJR1VSQVRJT04pCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUE9XRVJfTU9ERQkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUE9XRVJfTU9ERSkKKworCisKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfU1RBVFVTX1RZUEUKK3sKKyAgICBOZGlzODAyXzExU3RhdHVzVHlwZV9BdXRoZW50aWNhdGlvbiwKKyAgICBOZGlzODAyXzExU3RhdHVzVHlwZV9NZWRpYVN0cmVhbU1vZGUsCisgICAgTmRpczgwMl8xMVN0YXR1c1R5cGVfUE1LSURfQ2FuZGlkYXRlTGlzdCwKKyAgICBOZGlzODAyXzExU3RhdHVzVHlwZU1heCAgICAvLyBub3QgYSByZWFsIHR5cGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKK30gTkRJU184MDJfMTFfU1RBVFVTX1RZUEUsICpQTkRJU184MDJfMTFfU1RBVFVTX1RZUEU7CisKK3R5cGVkZWYgVUNIQVIgICBORElTXzgwMl8xMV9NQUNfQUREUkVTU1s2XTsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1NUQVRVU19JTkRJQ0FUSU9OCit7CisgICAgTkRJU184MDJfMTFfU1RBVFVTX1RZUEUgU3RhdHVzVHlwZTsKK30gTkRJU184MDJfMTFfU1RBVFVTX0lORElDQVRJT04sICpQTkRJU184MDJfMTFfU1RBVFVTX0lORElDQVRJT047CisKKy8vIG1hc2sgZm9yIGF1dGhlbnRpY2F0aW9uL2ludGVncml0eSBmaWVsZHMKKyNkZWZpbmUgTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX0FVVEhfRklFTERTICAgICAgICAweDBmCisKKyNkZWZpbmUgTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX1JFQVVUSCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9LRVlVUERBVEUgICAgICAgICAgMHgwMgorI2RlZmluZSBORElTXzgwMl8xMV9BVVRIX1JFUVVFU1RfUEFJUldJU0VfRVJST1IgICAgIDB4MDYKKyNkZWZpbmUgTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SICAgICAgICAweDBFCisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9SRVFVRVNUCit7CisgICAgVUxPTkcgTGVuZ3RoOyAgICAgICAgICAgIC8vIExlbmd0aCBvZiBzdHJ1Y3R1cmUKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCc3NpZDsKKyAgICBVTE9ORyBGbGFnczsKK30gTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwgKlBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9SRVFVRVNUOworCisvL0FkZGVkIG5ldyB0eXBlcyBmb3IgUE1LSUQgQ2FuZGlkYXRlIGxpc3RzLgordHlwZWRlZiBzdHJ1Y3QgX1BNS0lEX0NBTkRJREFURSB7CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQlNTSUQ7CisgICAgVUxPTkcgRmxhZ3M7Cit9IFBNS0lEX0NBTkRJREFURSwgKlBQTUtJRF9DQU5ESURBVEU7CisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfTElTVAoreworICAgIFVMT05HIFZlcnNpb247ICAgICAgIC8vIFZlcnNpb24gb2YgdGhlIHN0cnVjdHVyZQorICAgIFVMT05HIE51bUNhbmRpZGF0ZXM7IC8vIE5vLiBvZiBwbWtpZCBjYW5kaWRhdGVzCisgICAgUE1LSURfQ0FORElEQVRFIENhbmRpZGF0ZUxpc3RbMV07Cit9IE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9MSVNULCAqUE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9MSVNUOworCisvL0ZsYWdzIGZvciBQTUtJRCBDYW5kaWRhdGUgbGlzdCBzdHJ1Y3R1cmUKKyNkZWZpbmUgTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRAkweDAxCisKKy8vIEFkZGVkIG5ldyB0eXBlcyBmb3IgT0ZETSA1RyBhbmQgMi40RwordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUKK3sKKyAgIE5kaXM4MDJfMTFGSCwKKyAgIE5kaXM4MDJfMTFEUywKKyAgICBOZGlzODAyXzExT0ZETTUsCisgICAgTmRpczgwMl8xMU9GRE01X04sCisgICAgTmRpczgwMl8xMU9GRE0yNCwKKyAgICBOZGlzODAyXzExT0ZETTI0X04sCisgICBOZGlzODAyXzExQXV0b21vZGUsCisgICAgTmRpczgwMl8xMU5ldHdvcmtUeXBlTWF4ICAgIC8vIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZAorfSBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUsICpQTkRJU184MDJfMTFfTkVUV09SS19UWVBFOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfTkVUV09SS19UWVBFX0xJU1QKK3sKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkl0ZW1zOyAgLy8gaW4gbGlzdCBiZWxvdywgYXQgbGVhc3QgMQorICAgTkRJU184MDJfMTFfTkVUV09SS19UWVBFICAgIE5ldHdvcmtUeXBlIFsxXTsKK30gTkRJU184MDJfMTFfTkVUV09SS19UWVBFX0xJU1QsICpQTkRJU184MDJfMTFfTkVUV09SS19UWVBFX0xJU1Q7CisKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfUE9XRVJfTU9ERQoreworICAgIE5kaXM4MDJfMTFQb3dlck1vZGVDQU0sCisgICAgTmRpczgwMl8xMVBvd2VyTW9kZU1BWF9QU1AsCisgICAgTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQLAorICAgIE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQLAorICAgIE5kaXM4MDJfMTFQb3dlck1vZGVNYXggICAgICAvLyBub3QgYSByZWFsIG1vZGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKK30gTkRJU184MDJfMTFfUE9XRVJfTU9ERSwgKlBORElTXzgwMl8xMV9QT1dFUl9NT0RFOworCit0eXBlZGVmIFVMT05HICAgTkRJU184MDJfMTFfVFhfUE9XRVJfTEVWRUw7IC8vIGluIG1pbGxpd2F0dHMKKworLy8KKy8vIFJlY2VpdmVkIFNpZ25hbCBTdHJlbmd0aCBJbmRpY2F0aW9uCisvLwordHlwZWRlZiBMT05HICAgIE5ESVNfODAyXzExX1JTU0k7ICAgICAgICAgICAvLyBpbiBkQm0KKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0NPTkZJR1VSQVRJT05fRkgKK3sKKyAgIFVMT05HICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHN0cnVjdHVyZQorICAgVUxPTkcgICAgICAgICAgIEhvcFBhdHRlcm47ICAgICAgICAvLyBBcyBkZWZpbmVkIGJ5IDgwMi4xMSwgTVNCIHNldAorICAgVUxPTkcgICAgICAgICAgIEhvcFNldDsgICAgICAgICAgICAvLyB0byBvbmUgaWYgbm9uLTgwMi4xMQorICAgVUxPTkcgICAgICAgICAgIER3ZWxsVGltZTsgICAgICAgICAvLyB1bml0cyBhcmUgS3VzZWMKK30gTkRJU184MDJfMTFfQ09ORklHVVJBVElPTl9GSCwgKlBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OX0ZIOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQ09ORklHVVJBVElPTgoreworICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgIC8vIExlbmd0aCBvZiBzdHJ1Y3R1cmUKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVhY29uUGVyaW9kOyAgICAgICAvLyB1bml0cyBhcmUgS3VzZWMKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRJTVdpbmRvdzsgICAgICAgICAvLyB1bml0cyBhcmUgS3VzZWMKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNDb25maWc7ICAgICAgICAgICAvLyBGcmVxdWVuY3ksIHVuaXRzIGFyZSBrSHoKKyAgIE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT05fRkggICAgRkhDb25maWc7Cit9IE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04sICpQTkRJU184MDJfMTFfQ09ORklHVVJBVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1NUQVRJU1RJQ1MKK3sKKyAgIFVMT05HICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgIC8vIExlbmd0aCBvZiBzdHJ1Y3R1cmUKKyAgIExBUkdFX0lOVEVHRVIgICBUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIEZhaWxlZENvdW50OworICAgTEFSR0VfSU5URUdFUiAgIFJldHJ5Q291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgTXVsdGlwbGVSZXRyeUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIFJUU1N1Y2Nlc3NDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBSVFNGYWlsdXJlQ291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgQUNLRmFpbHVyZUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIEZyYW1lRHVwbGljYXRlQ291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgUmVjZWl2ZWRGcmFnbWVudENvdW50OworICAgTEFSR0VfSU5URUdFUiAgIE11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBGQ1NFcnJvckNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIFRLSVBMb2NhbE1JQ0ZhaWx1cmVzOworICAgTEFSR0VfSU5URUdFUiAgIFRLSVBSZW1vdGVNSUNFcnJvcnM7CisgICBMQVJHRV9JTlRFR0VSICAgVEtJUElDVkVycm9yczsKKyAgIExBUkdFX0lOVEVHRVIgICBUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZDsKKyAgIExBUkdFX0lOVEVHRVIgICBUS0lQUmVwbGF5czsKKyAgIExBUkdFX0lOVEVHRVIgICBDQ01QRm9ybWF0RXJyb3JzOworICAgTEFSR0VfSU5URUdFUiAgIENDTVBSZXBsYXlzOworICAgTEFSR0VfSU5URUdFUiAgIENDTVBEZWNyeXB0RXJyb3JzOworICAgTEFSR0VfSU5URUdFUiAgIEZvdXJXYXlIYW5kc2hha2VGYWlsdXJlczsKK30gTkRJU184MDJfMTFfU1RBVElTVElDUywgKlBORElTXzgwMl8xMV9TVEFUSVNUSUNTOworCit0eXBlZGVmICBVTE9ORyAgTkRJU184MDJfMTFfS0VZX0lOREVYOwordHlwZWRlZiBVTE9OR0xPTkcgICBORElTXzgwMl8xMV9LRVlfUlNDOworCisjZGVmaW5lIE1BWF9SQURJVVNfU1JWX05VTQkJCTIJICAvLyA4MDIuMXggZmFpbG92ZXIgbnVtYmVyCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUkFESVVTX1NSVl9JTkZPIHsKKwlVSU5UMzIJCQlyYWRpdXNfaXA7CisJVUlOVDMyCQkJcmFkaXVzX3BvcnQ7CisJVUNIQVIJCQlyYWRpdXNfa2V5WzY0XTsKKwlVQ0hBUgkJCXJhZGl1c19rZXlfbGVuOworfSBSQURJVVNfU1JWX0lORk8sICpQUkFESVVTX1NSVl9JTkZPOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JBRElVU19LRVlfSU5GTworeworCVVDSEFSCQkJcmFkaXVzX3Nydl9udW07CisJUkFESVVTX1NSVl9JTkZPCXJhZGl1c19zcnZfaW5mb1tNQVhfUkFESVVTX1NSVl9OVU1dOworCVVDSEFSCQkJaWVlZTgwMjF4V0VQOwkJIC8vIGR5bmFtaWMgV0VQCisgICAgVUNIQVIgICAgICAgICAgIGtleV9pbmRleDsKKyAgICBVQ0hBUiAgICAgICAgICAga2V5X2xlbmd0aDsgICAgICAgICAgLy8gbGVuZ3RoIG9mIGtleSBpbiBieXRlcworICAgIFVDSEFSICAgICAgICAgICBrZXlfbWF0ZXJpYWxbMTNdOworfSBSQURJVVNfS0VZX0lORk8sICpQUkFESVVTX0tFWV9JTkZPOworCisvLyBJdCdzIHVzZWQgYnkgODAyLjF4IGRhZW1vbiB0byByZXF1aXJlIHJlbGF0aXZlIGNvbmZpZ3VyYXRpb24KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUkFESVVTX0NPTkYKK3sKKyAgICBVSU5UMzIgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBVQ0hBUgkJCW1ic3NfbnVtOwkJCS8vIGluZGljYXRlIG11bHRpcGxlIEJTUyBudW1iZXIKKwlVSU5UMzIJCQlvd25faXBfYWRkcjsKKwlVSU5UMzIJCQlyZXRyeV9pbnRlcnZhbDsKKwlVSU5UMzIJCQlzZXNzaW9uX3RpbWVvdXRfaW50ZXJ2YWw7CisJVUNIQVIJCQlFQVBpZm5hbWVbSUZOQU1TSVpdOworCVVDSEFSCQkJRUFQaWZuYW1lX2xlbjsKKwlVQ0hBUiAJCQlQcmVBdXRoaWZuYW1lW0lGTkFNU0laXTsKKwlVQ0hBUgkJCVByZUF1dGhpZm5hbWVfbGVuOworCVJBRElVU19LRVlfSU5GTwlSYWRpdXNJbmZvWzgvKk1BWF9NQlNTSURfTlVNKi9dOworfSBSQURJVVNfQ09ORiwgKlBSQURJVVNfQ09ORjsKKworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8vIEtleSBtYXBwaW5nIGtleXMgcmVxdWlyZSBhIEJTU0lECit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfS0VZCit7CisgICAgVUlOVCAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBVSU5UICAgICAgICAgICBLZXlJbmRleDsKKyAgICBVSU5UICAgICAgICAgICBLZXlMZW5ndGg7ICAgICAgICAgIC8vIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCU1NJRDsKKyAgICBORElTXzgwMl8xMV9LRVlfUlNDIEtleVJTQzsKKyAgICBVQ0hBUiAgICAgICAgICAgS2V5TWF0ZXJpYWxbMV07ICAgICAvLyB2YXJpYWJsZSBsZW5ndGggZGVwZW5kaW5nIG9uIGFib3ZlIGZpZWxkCit9IE5ESVNfODAyXzExX0tFWSwgKlBORElTXzgwMl8xMV9LRVk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9SRU1PVkVfS0VZCit7CisgICAgVUlOVCAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBVSU5UICAgICAgICAgICBLZXlJbmRleDsKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCU1NJRDsKK30gTkRJU184MDJfMTFfUkVNT1ZFX0tFWSwgKlBORElTXzgwMl8xMV9SRU1PVkVfS0VZOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfV0VQCit7CisgICBVSU5UICAgICBMZW5ndGg7ICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgIFVJTlQgICAgIEtleUluZGV4OyAgICAgICAgICAgLy8gMCBpcyB0aGUgcGVyLWNsaWVudCBrZXksIDEtTiBhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xvYmFsIGtleXMKKyAgIFVJTlQgICAgIEtleUxlbmd0aDsgICAgIC8vIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMKKyAgIFVDSEFSICAgICBLZXlNYXRlcmlhbFsxXTsvLyB2YXJpYWJsZSBsZW5ndGggZGVwZW5kaW5nIG9uIGFib3ZlIGZpZWxkCit9IE5ESVNfODAyXzExX1dFUCwgKlBORElTXzgwMl8xMV9XRVA7CisKKwordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFCit7CisgICBOZGlzODAyXzExSUJTUywKKyAgIE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSwKKyAgIE5kaXM4MDJfMTFBdXRvVW5rbm93biwKKyAgIE5kaXM4MDJfMTFNb25pdG9yLAorICAgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlTWF4ICAgICAvLyBOb3QgYSByZWFsIHZhbHVlLCBkZWZpbmVkIGFzIHVwcGVyIGJvdW5kCit9IE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUsICpQTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRTsKKworLy8gQWRkIG5ldyBhdXRoZW50aWNhdGlvbiBtb2RlcwordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCit7CisgICBOZGlzODAyXzExQXV0aE1vZGVPcGVuLAorICAgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkLAorICAgTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCwKKyAgICBOZGlzODAyXzExQXV0aE1vZGVXUEEsCisgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLLAorICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUsCisgICBOZGlzODAyXzExQXV0aE1vZGVXUEEyLAorICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSywKKyAgIAlOZGlzODAyXzExQXV0aE1vZGVXUEExV1BBMiwKKwlOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSywKKyAgIE5kaXM4MDJfMTFBdXRoTW9kZU1heCAgICAgICAgICAgLy8gTm90IGEgcmVhbCBtb2RlLCBkZWZpbmVkIGFzIHVwcGVyIGJvdW5kCit9IE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUsICpQTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERTsKKwordHlwZWRlZiBVQ0hBUiAgIE5ESVNfODAyXzExX1JBVEVTW05ESVNfODAyXzExX0xFTkdUSF9SQVRFU107ICAgICAgICAvLyBTZXQgb2YgOCBkYXRhIHJhdGVzCit0eXBlZGVmIFVDSEFSICAgTkRJU184MDJfMTFfUkFURVNfRVhbTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTX0VYXTsgIC8vIFNldCBvZiAxNiBkYXRhIHJhdGVzCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTkRJU184MDJfMTFfU1NJRAoreworICAgIFVJTlQgICBTc2lkTGVuZ3RoOyAgICAgICAgIC8vIGxlbmd0aCBvZiBTU0lEIGZpZWxkIGJlbG93LCBpbiBieXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBjYW4gYmUgemVyby4KKyAgICBVQ0hBUiAgIFNzaWRbTkRJU184MDJfMTFfTEVOR1RIX1NTSURdOyAgICAgICAgICAgLy8gU1NJRCBpbmZvcm1hdGlvbiBmaWVsZAorfSBORElTXzgwMl8xMV9TU0lELCAqUE5ESVNfODAyXzExX1NTSUQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9ORElTX1dMQU5fQlNTSUQKK3sKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsgICAgIC8vIExlbmd0aCBvZiB0aGlzIHN0cnVjdHVyZQorICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgICAgICAgICAgICAgTWFjQWRkcmVzczsgLy8gQlNTSUQKKyAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkWzJdOworICAgTkRJU184MDJfMTFfU1NJRCAgICAgICAgICAgICAgICAgICAgU3NpZDsgICAgICAgLy8gU1NJRAorICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmFjeTsgICAgLy8gV0VQIGVuY3J5cHRpb24gcmVxdWlyZW1lbnQKKyAgIE5ESVNfODAyXzExX1JTU0kgICAgICAgICAgICAgICAgICAgIFJzc2k7ICAgICAgIC8vIHJlY2VpdmUgc2lnbmFsIHN0cmVuZ3RoIGluIGRCbQorICAgTkRJU184MDJfMTFfTkVUV09SS19UWVBFICAgICAgICAgICAgTmV0d29ya1R5cGVJblVzZTsKKyAgIE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04gICAgICAgICAgIENvbmZpZ3VyYXRpb247CisgICBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICBJbmZyYXN0cnVjdHVyZU1vZGU7CisgICBORElTXzgwMl8xMV9SQVRFUyAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRSYXRlczsKK30gTkRJU19XTEFOX0JTU0lELCAqUE5ESVNfV0xBTl9CU1NJRDsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9ORElTXzgwMl8xMV9CU1NJRF9MSVNUCit7CisgICBVSU5UICAgICAgICAgICBOdW1iZXJPZkl0ZW1zOyAgICAgIC8vIGluIGxpc3QgYmVsb3csIGF0IGxlYXN0IDEKKyAgIE5ESVNfV0xBTl9CU1NJRCBCc3NpZFsxXTsKK30gTkRJU184MDJfMTFfQlNTSURfTElTVCwgKlBORElTXzgwMl8xMV9CU1NJRF9MSVNUOworCisvLyBBZGRlZCBDYXBhYmlsaXRpZXMsIElFTGVuZ3RoIGFuZCBJRXMgZm9yIGVhY2ggQlNTSUQKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTkRJU19XTEFOX0JTU0lEX0VYCit7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyAgICAgICAgICAgICBNYWNBZGRyZXNzOyAgICAgICAgIC8vIEJTU0lECisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRbMl07CisgICAgTkRJU184MDJfMTFfU1NJRCAgICAgICAgICAgICAgICAgICAgU3NpZDsgICAgICAgICAgICAgICAvLyBTU0lECisgICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmFjeTsgICAgICAgICAgICAvLyBXRVAgZW5jcnlwdGlvbiByZXF1aXJlbWVudAorICAgIE5ESVNfODAyXzExX1JTU0kgICAgICAgICAgICAgICAgICAgIFJzc2k7ICAgICAgICAgICAgICAgLy8gcmVjZWl2ZSBzaWduYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmVuZ3RoIGluIGRCbQorICAgIE5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgICAgICAgICAgIE5ldHdvcmtUeXBlSW5Vc2U7CisgICAgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiAgICAgICAgICAgQ29uZmlndXJhdGlvbjsKKyAgICBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICBJbmZyYXN0cnVjdHVyZU1vZGU7CisgICAgTkRJU184MDJfMTFfUkFURVNfRVggICAgICAgICAgICAgICAgU3VwcG9ydGVkUmF0ZXM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVMZW5ndGg7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVzWzFdOworfSBORElTX1dMQU5fQlNTSURfRVgsICpQTkRJU19XTEFOX0JTU0lEX0VYOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX05ESVNfODAyXzExX0JTU0lEX0xJU1RfRVgKK3sKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgIE51bWJlck9mSXRlbXM7ICAgICAgLy8gaW4gbGlzdCBiZWxvdywgYXQgbGVhc3QgMQorICAgIE5ESVNfV0xBTl9CU1NJRF9FWCAgICAgIEJzc2lkWzFdOworfSBORElTXzgwMl8xMV9CU1NJRF9MSVNUX0VYLCAqUE5ESVNfODAyXzExX0JTU0lEX0xJU1RfRVg7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTkRJU184MDJfMTFfRklYRURfSUVzCit7CisgICAgVUNIQVIgVGltZXN0YW1wWzhdOworICAgIFVTSE9SVCBCZWFjb25JbnRlcnZhbDsKKyAgICBVU0hPUlQgQ2FwYWJpbGl0aWVzOworfSBORElTXzgwMl8xMV9GSVhFRF9JRXMsICpQTkRJU184MDJfMTFfRklYRURfSUVzOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzCit7CisgICAgVUNIQVIgRWxlbWVudElEOworICAgIFVDSEFSIExlbmd0aDsgICAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIGRhdGEgZmllbGQKKyAgICBVQ0hBUiBkYXRhWzFdOworfSBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMsICpQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzOworCit0eXBlZGVmICBVTE9ORyAgIE5ESVNfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEOworCit0eXBlZGVmICBVTE9ORyAgIE5ESVNfODAyXzExX1JUU19USFJFU0hPTEQ7CisKK3R5cGVkZWYgIFVMT05HICAgTkRJU184MDJfMTFfQU5URU5OQTsKKwordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgoreworICAgTmRpczgwMl8xMVByaXZGaWx0ZXJBY2NlcHRBbGwsCisgICBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQCit9IE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSLCAqUE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSOworCisvLyBBZGRlZCBuZXcgZW5jcnlwdGlvbiB0eXBlcworLy8gQWxzbyBhbGlhc2VkIHR5cGVkZWYgdG8gbmV3IG5hbWUKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfV0VQX1NUQVRVUworeworICAgTmRpczgwMl8xMVdFUEVuYWJsZWQsCisgICAgTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCA9IE5kaXM4MDJfMTFXRVBFbmFibGVkLAorICAgTmRpczgwMl8xMVdFUERpc2FibGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQsCisgICBOZGlzODAyXzExV0VQS2V5QWJzZW50LAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMUtleUFic2VudCA9IE5kaXM4MDJfMTFXRVBLZXlBYnNlbnQsCisgICBOZGlzODAyXzExV0VQTm90U3VwcG9ydGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uTm90U3VwcG9ydGVkID0gTmRpczgwMl8xMVdFUE5vdFN1cHBvcnRlZCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMktleUFic2VudCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0tleUFic2VudCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjRFbmFibGVkLAkvLyBUS0lQIG9yIEFFUyBtaXgKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjRLZXlBYnNlbnQsCit9IE5ESVNfODAyXzExX1dFUF9TVEFUVVMsICpQTkRJU184MDJfMTFfV0VQX1NUQVRVUywKKyAgTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMsICpQTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVM7CisKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfUkVMT0FEX0RFRkFVTFRTCit7CisgICBOZGlzODAyXzExUmVsb2FkV0VQS2V5cworfSBORElTXzgwMl8xMV9SRUxPQURfREVGQVVMVFMsICpQTkRJU184MDJfMTFfUkVMT0FEX0RFRkFVTFRTOworCisjZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFUUZJX0NBUEFCSUxJVElFUyAgICAgIDEKKyNkZWZpbmUgTkRJU184MDJfMTFfQUlfUkVRRklfTElTVEVOSU5URVJWQUwgICAgMgorI2RlZmluZSBORElTXzgwMl8xMV9BSV9SRVFGSV9DVVJSRU5UQVBBRERSRVNTICA0CisKKyNkZWZpbmUgTkRJU184MDJfMTFfQUlfUkVTRklfQ0FQQUJJTElUSUVTICAgICAgMQorI2RlZmluZSBORElTXzgwMl8xMV9BSV9SRVNGSV9TVEFUVVNDT0RFICAgICAgICAyCisjZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFU0ZJX0FTU09DSUFUSU9OSUQgICAgIDQKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FJX1JFUUZJCit7CisgICAgVVNIT1JUIENhcGFiaWxpdGllczsKKyAgICBVU0hPUlQgTGlzdGVuSW50ZXJ2YWw7CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgIEN1cnJlbnRBUEFkZHJlc3M7Cit9IE5ESVNfODAyXzExX0FJX1JFUUZJLCAqUE5ESVNfODAyXzExX0FJX1JFUUZJOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQUlfUkVTRkkKK3sKKyAgICBVU0hPUlQgQ2FwYWJpbGl0aWVzOworICAgIFVTSE9SVCBTdGF0dXNDb2RlOworICAgIFVTSE9SVCBBc3NvY2lhdGlvbklkOworfSBORElTXzgwMl8xMV9BSV9SRVNGSSwgKlBORElTXzgwMl8xMV9BSV9SRVNGSTsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OCit7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTGVuZ3RoOworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgIEF2YWlsYWJsZVJlcXVlc3RGaXhlZElFczsKKyAgICBORElTXzgwMl8xMV9BSV9SRVFGSSAgICBSZXF1ZXN0Rml4ZWRJRXM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgUmVxdWVzdElFTGVuZ3RoOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIE9mZnNldFJlcXVlc3RJRXM7CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlUmVzcG9uc2VGaXhlZElFczsKKyAgICBORElTXzgwMl8xMV9BSV9SRVNGSSAgICBSZXNwb25zZUZpeGVkSUVzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlSUVMZW5ndGg7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgT2Zmc2V0UmVzcG9uc2VJRXM7Cit9IE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OLCAqUE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRVZFTlQKK3sKKyAgICBORElTXzgwMl8xMV9TVEFUVVNfSU5ESUNBVElPTiAgICAgICBTdGF0dXM7CisgICAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fUkVRVUVTVCAgUmVxdWVzdFsxXTsKK30gTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRVZFTlQsICpQTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRVZFTlQ7CisKKy8qCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfVEVTVAoreworICAgIFVMT05HIExlbmd0aDsKKyAgICBVTE9ORyBUeXBlOworICAgIHVuaW9uCisgICAgeworICAgICAgICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9FVkVOVCBBdXRoZW50aWNhdGlvbkV2ZW50OworICAgICAgICBORElTXzgwMl8xMV9SU1NJIFJzc2lUcmlnZ2VyOworICAgIH07Cit9IE5ESVNfODAyXzExX1RFU1QsICpQTkRJU184MDJfMTFfVEVTVDsKKyAqLworCisvLyA4MDIuMTEgTWVkaWEgc3RyZWFtIGNvbnN0cmFpbnRzLCBhc3NvY2lhdGVkIHdpdGggT0lEXzgwMl8xMV9NRURJQV9TVFJFQU1fTU9ERQordHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9NRURJQV9TVFJFQU1fTU9ERQoreworICAgIE5kaXM4MDJfMTFNZWRpYVN0cmVhbU9mZiwKKyAgICBOZGlzODAyXzExTWVkaWFTdHJlYW1PbiwKK30gTkRJU184MDJfMTFfTUVESUFfU1RSRUFNX01PREUsICpQTkRJU184MDJfMTFfTUVESUFfU1RSRUFNX01PREU7CisKKy8vIFBNS0lEIFN0cnVjdHVyZXMKK3R5cGVkZWYgVUNIQVIgICBORElTXzgwMl8xMV9QTUtJRF9WQUxVRVsxNl07CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK3R5cGVkZWYgc3RydWN0IF9CU1NJRF9JTkZPCit7CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQlNTSUQ7CisgICAgTkRJU184MDJfMTFfUE1LSURfVkFMVUUgUE1LSUQ7Cit9IEJTU0lEX0lORk8sICpQQlNTSURfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1BNS0lECit7CisgICAgVUlOVCAgICBMZW5ndGg7CisgICAgVUlOVCAgICBCU1NJREluZm9Db3VudDsKKyAgICBCU1NJRF9JTkZPIEJTU0lESW5mb1sxXTsKK30gTkRJU184MDJfMTFfUE1LSUQsICpQTkRJU184MDJfMTFfUE1LSUQ7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VOQ1JZUFRJT04KK3sKKyAgICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFIEF1dGhNb2RlU3VwcG9ydGVkOworICAgIE5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTIEVuY3J5cHRTdGF0dXNTdXBwb3J0ZWQ7Cit9IE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VOQ1JZUFRJT04sICpQTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRU5DUllQVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0NBUEFCSUxJVFkKK3sKKyAgICAgVUxPTkcgTGVuZ3RoOworICAgICBVTE9ORyBWZXJzaW9uOworICAgICBVTE9ORyBOb09mUE1LSURzOworICAgICBVTE9ORyBOb09mQXV0aEVuY3J5cHRQYWlyc1N1cHBvcnRlZDsKKyAgICAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRU5DUllQVElPTiBBdXRoZW50aWNhdGlvbkVuY3J5cHRpb25TdXBwb3J0ZWRbMV07Cit9IE5ESVNfODAyXzExX0NBUEFCSUxJVFksICpQTkRJU184MDJfMTFfQ0FQQUJJTElUWTsKKworLy8jZW5kaWYgLy9vZiBXSU4gMmsKKyNlbmRpZiAvL1VOREVSX0NFCisKKyNpZiBXSVJFTEVTU19FWFQgPD0gMTEKKyNpZm5kZWYgU0lPQ0RFVlBSSVZBVEUKKyNkZWZpbmUgU0lPQ0RFVlBSSVZBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRTAKKyNlbmRpZgorI2RlZmluZSBTSU9DSVdGSVJTVFBSSVYJCQkJCQkJCVNJT0NERVZQUklWQVRFCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBSVF9QUklWX0lPQ1RMX0VYVAkJCQkJCQkoU0lPQ0lXRklSU1RQUklWICsgMHgwMSkgLy8gU3luYy4gd2l0aCBBUCBmb3Igd3NjIHVwbnAgZGFlbW9uCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9TRVQJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MDIpCisKKyNpZmRlZiBEQkcKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0JCUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwMykKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwNSkKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1JGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgxMykKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0UyUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwNykKKyNlbmRpZgorCisjaWZkZWYgUkFMSU5LX0FURQorI2lmZGVmIFJBTElOS18yOHh4X1FBCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9BVEUJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MDgpCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1NUQVRJU1RJQ1MgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwOSkKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0FERF9QTUtJRF9DQUNIRSAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwQSkKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1JBRElVU19EQVRBICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMHgwQykKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0dTSVRFU1VSVkVZCQkJCQkoU0lPQ0lXRklSU1RQUklWICsgMHgwRCkKKyNkZWZpbmUgUlRfUFJJVl9JT0NUTAkJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MEUpIC8vIFN5bmMuIHdpdGggUlQ2MSAoZm9yIHdwYV9zdXBwbGljYW50KQorI2RlZmluZSBSVFBSSVZfSU9DVExfR0VUX01BQ19UQUJMRQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MEYpCisKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1NIT1cJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MTEpCitlbnVtIHsKKyAgICBTSE9XX0NPTk5fU1RBVFVTID0gNCwKKyAgICBTSE9XX0RSVklFUl9WRVJJT04gPSA1LAorICAgIFNIT1dfQkFfSU5GTyA9IDYsCisJU0hPV19ERVNDX0lORk8gPSA3LAorI2lmZGVmIFJUMjg3MAorCVNIT1dfUlhCVUxLX0lORk8gPSA4LAorCVNIT1dfVFhCVUxLX0lORk8gPSA5LAorI2VuZGlmIC8vIFJUMjg3MCAvLworICAgIFJBSU9fT0ZGID0gMTAsCisgICAgUkFJT19PTiA9IDExLAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCVNIT1dfRExTX0VOVFJZX0lORk8gPSAxOSwKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwlTSE9XX0NGR19WQUxVRSA9IDIwLAorfTsKKworCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCisjaWZkZWYgU05NUF9TVVBQT1JUCisvL1NOTVAgaWVlZSA4MDJkb3QxMSwga2F0aHkgLCAyMDA4XzAyMjAKKy8vIGRvdDExcmVzKDMpCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVST1VJCQkJMHgwNzAwCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVSTkFNRQkJCTB4MDcwMQorI2RlZmluZSBSVF9PSURfODAyXzExX1JFU09VUkNFVFlQRUlETkFNRQkJMHgwNzAyCisKKy8vIGRvdDExc210KDEpCisjZGVmaW5lIFJUX09JRF84MDJfMTFfUFJJVkFDWU9QVElPTklNUExFTUVOVEVECTB4MDcwMworI2RlZmluZSBSVF9PSURfODAyXzExX1BPV0VSTUFOQUdFTUVOVE1PREUJCTB4MDcwNAorI2RlZmluZSBPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRQkJCTB4MDcwNSAvLyByZWFkICwgd3JpdGUKKyNkZWZpbmUgT0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZSUQJCQkJMHgwNzA2CisjZGVmaW5lIFJUX09JRF84MDJfMTFfV0VQS0VZTUFQUElOR0xFTkdUSAkJMHgwNzA3CisjZGVmaW5lIE9JRF84MDJfMTFfU0hPUlRSRVRSWUxJTUlUCQkJCTB4MDcwOAorI2RlZmluZSBPSURfODAyXzExX0xPTkdSRVRSWUxJTUlUCQkJCTB4MDcwOQorI2RlZmluZSBSVF9PSURfODAyXzExX1BST0RVQ1RJRAkJCQkJMHgwNzEwCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVJRAkJCQkweDA3MTEKKworLy8gLy9kb3QxMVBoeSg0KQorI2RlZmluZSBPSURfODAyXzExX0NVUlJFTlRDSEFOTkVMCQkJCTB4MDcxMgorCisvL2RvdDExbWFjCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTUFDX0FERFJFU1MJCQkJMHgwNzEzCisjZW5kaWYgLy8gU05NUF9TVVBQT1JUIC8vCisKKyNkZWZpbmUgT0lEXzgwMl8xMV9CVUlMRF9DSEFOTkVMX0VYCQkJCTB4MDcxNAorI2RlZmluZSBPSURfODAyXzExX0dFVF9DSF9MSVNUCQkJCQkweDA3MTUKKyNkZWZpbmUgT0lEXzgwMl8xMV9HRVRfQ09VTlRSWV9DT0RFCQkJCTB4MDcxNgorI2RlZmluZSBPSURfODAyXzExX0dFVF9DSEFOTkVMX0dFT0dSQVBIWQkJMHgwNzE3CisKKy8vI2RlZmluZSBSVF9PSURfODAyXzExX1NUQVRJU1RJQ1MgICAgICAgICAgICAgIChPSURfR0VUX1NFVF9UT0dHTEUgfCBPSURfODAyXzExX1NUQVRJU1RJQ1MpCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfUEFTU1BIUkFTRSAgICAgICAgICAgICAgICAgICAweDA3NDAgLy8gcGFzc3BocmFzZSBmb3Igd3BhKDIpLXBzaworI2RlZmluZSBSVF9PSURfV1NDX0RSSVZFUl9BVVRPX0NPTk5FQ1QgICAgICAgICAgICAgIDB4MDc0MQorI2RlZmluZSBSVF9PSURfV1NDX1FVRVJZX0RFRkFVTFRfUFJPRklMRSAgICAgICAgICAgIDB4MDc0MgorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9DT05OX0JZX1BST0ZJTEVfSU5ERVggICAgICAgIDB4MDc0MworI2RlZmluZSBSVF9PSURfV1NDX1NFVF9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgIDB4MDc0NAorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9TU0lEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc0NQorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9QSU5fQ09ERSAgICAgICAgICAgICAgICAgICAgIDB4MDc0NgorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc0NyAvLyBQSU4gb3IgUEJDCisjZGVmaW5lIFJUX09JRF9XU0NfU0VUX0NPTkZfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwNzQ4IC8vIEVucm9sbGVlIG9yIFJlZ2lzdHJhcgorI2RlZmluZSBSVF9PSURfV1NDX1NFVF9QUk9GSUxFICAgICAgICAgICAgICAgICAgICAgIDB4MDc0OQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2RlZmluZSBSVF9PSURfODAyXzExX1dTQ19RVUVSWV9QUk9GSUxFCQkJCTB4MDc1MAorLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggUlQ2MQorI2RlZmluZSBSVF9PSURfV1NDX1FVRVJZX1NUQVRVUwkJCQkJCTB4MDc1MQorI2RlZmluZSBSVF9PSURfV1NDX1BJTl9DT0RFCQkJCQkJCTB4MDc1MgorI2RlZmluZSBSVF9PSURfV1NDX1VVSUQJCQkJCQkJCTB4MDc1MworI2RlZmluZSBSVF9PSURfV1NDX1NFVF9TRUxFQ1RFRF9SRUdJU1RSQVIJCQkweDA3NTQKKyNkZWZpbmUgUlRfT0lEX1dTQ19FQVBNU0cJCQkJCQkJMHgwNzU1CisjZGVmaW5lIFJUX09JRF9XU0NfTUFOVUZBQ1RVUkVSCQkJCQkJMHgwNzU2CisjZGVmaW5lIFJUX09JRF9XU0NfTU9ERUxfTkFNRQkJCQkJCTB4MDc1NworI2RlZmluZSBSVF9PSURfV1NDX01PREVMX05PCQkJCQkJCTB4MDc1OAorI2RlZmluZSBSVF9PSURfV1NDX1NFUklBTF9OTwkJCQkJCTB4MDc1OQorI2RlZmluZSBSVF9PSURfV1NDX01BQ19BRERSRVNTCQkJCQkJMHgwNzYwCisKKyNpZmRlZiBMTFREX1NVUFBPUlQKKy8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIFJUNjEKKyNkZWZpbmUgUlRfT0lEX0dFVF9QSFlfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAweDc2MQorI2VuZGlmIC8vIExMVERfU1VQUE9SVCAvLworCisjaWZkZWYgTklOVEVORE9fQVAKKy8vI2RlZmluZSBSVF9PSURfTklOVEVORE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMTA3NzAKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9OSU5URU5ET19HRVRfVEFCTEUJCQkweDA3NzEgLy8oKFJUX09JRF9OSU5URU5ETyArIDB4MDEpICYgMHhmZmZmKQorI2RlZmluZSBSVF9PSURfODAyXzExX05JTlRFTkRPX1NFVF9UQUJMRQkJCTB4MDc3MiAvLygoUlRfT0lEX05JTlRFTkRPICsgMHgwMikgJiAweGZmZmYpCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTklOVEVORE9fQ0FQQUJMRQkJCQkweDA3NzMgLy8oKFJUX09JRF9OSU5URU5ETyArIDB4MDMpICYgMHhmZmZmKQorI2VuZGlmIC8vIE5JTlRFTkRPX0FQIC8vCisKKy8vQWRkIFBhdWwgQ2hlbiBmb3IgQWNjdG9uCisvLyNkZWZpbmUgUlRfT0lEX1RYX1BPV0VSX0xFVkVMICAgICAgICAgICAgICAgICAweEZGMDIwMDEwCisvLyNkZWZpbmUgUlRfT0lEX1NFVF9UWF9QT1dFUl9MRVZFTAkgICAgICAgICAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8IFJUX09JRF9UWF9QT1dFUl9MRVZFTCkKKworLy8gTmV3IGZvciBNZWV0aW5nSG91c2UgQXBpIHN1cHBvcnQKKyNkZWZpbmUgT0lEX01IXzgwMl8xWF9TVVBQT1JURUQgICAgICAgICAgICAgICAweEZGRURDMTAwCisKKy8vIE1JTU8gVHggcGFyYW1ldGVyLCBTaG9ydEdJLCBNQ1MsIFNUQkMsIGV0Yy4gIHRoZXNlIGFyZSBmaWVsZHMgaW4gVFhXSS4gRG9uJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbiEhIQordHlwZWRlZiB1bmlvbiAgX0hUVFJBTlNNSVRfU0VUVElORyB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCXN0cnVjdAl7CisJVVNIT1JUCQlNT0RFOjI7CS8vIFVzZSBkZWZpbml0aW9uIE1PREVfeHh4LgorLy8JVVNIT1JUCQlyc3Y6MzsKKwlVU0hPUlQJCVR4QkY6MTsKKwlVU0hPUlQJCXJzdjoyOworCVVTSE9SVAkJU1RCQzoyOwkvL1NQQUNFCisJVVNIT1JUCQlTaG9ydEdJOjE7CisJVVNIT1JUCQlCVzoxOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVTSE9SVCAgIAlNQ1M6NzsgICAgICAgICAgICAgICAgIC8vIE1DUworCX0JZmllbGQ7CisjZWxzZQorCXN0cnVjdAl7CisJVVNIT1JUICAgCU1DUzo3OyAgICAgICAgICAgICAgICAgLy8gTUNTCisJVVNIT1JUCQlCVzoxOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVTSE9SVAkJU2hvcnRHSToxOworCVVTSE9SVAkJU1RCQzoyOwkvL1NQQUNFCisvLwlVU0hPUlQJCXJzdjozOworCVVTSE9SVAkJcnN2OjI7CisJVVNIT1JUCQlUeEJGOjE7CisJVVNIT1JUCQlNT0RFOjI7CS8vIFVzZSBkZWZpbml0aW9uIE1PREVfeHh4LgorCX0JZmllbGQ7CisjZW5kaWYKKwlVU0hPUlQJCXdvcmQ7CisgfSBIVFRSQU5TTUlUX1NFVFRJTkcsICpQSFRUUkFOU01JVF9TRVRUSU5HOworCit0eXBlZGVmIGVudW0gX1JUXzgwMl8xMV9QUkVBTUJMRSB7CisgICAgUnQ4MDJfMTFQcmVhbWJsZUxvbmcsCisgICAgUnQ4MDJfMTFQcmVhbWJsZVNob3J0LAorICAgIFJ0ODAyXzExUHJlYW1ibGVBdXRvCit9IFJUXzgwMl8xMV9QUkVBTUJMRSwgKlBSVF84MDJfMTFfUFJFQU1CTEU7CisKKy8vIE9ubHkgZm9yIFNUQSwgbmVlZCB0byBzeW5jIHdpdGggQVAKKy8vIDIwMDUtMDMtMDggbWF0Y2ggY3VycmVudCBSYUNvbmZpZy4KK3R5cGVkZWYgZW51bSBfUlRfODAyXzExX1BIWV9NT0RFIHsKKwlQSFlfMTFCR19NSVhFRCA9IDAsCisJUEhZXzExQiwKKwlQSFlfMTFBLAorCVBIWV8xMUFCR19NSVhFRCwKKwlQSFlfMTFHLAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCVBIWV8xMUFCR05fTUlYRUQsCS8vIGJvdGggYmFuZCAgIDUKKwlQSFlfMTFOXzJfNEcsCQkvLyAxMW4tb25seSB3aXRoIDIuNEcgYmFuZCAgIAk2CisJUEhZXzExR05fTUlYRUQsCS8vIDIuNEcgYmFuZCAgICAgIDcKKwlQSFlfMTFBTl9NSVhFRCwJLy8gNUcgIGJhbmQgICAgICAgOAorCVBIWV8xMUJHTl9NSVhFRCwJLy8gaWYgY2hlY2sgODAyLjExYi4gICAgICA5CisJUEhZXzExQUdOX01JWEVELAkvLyBpZiBjaGVjayA4MDIuMTFiLiAgICAgIDEwCisJUEhZXzExTl81RywJCQkvLyAxMW4tb25seSB3aXRoIDVHIGJhbmQJCTExCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCit9IFJUXzgwMl8xMV9QSFlfTU9ERTsKKworLy8gcHV0IGFsbCBwcm9wcmlldGVyeSBmb3ItcXVlcnkgb2JqZWN0cyBoZXJlIHRvIHJlZHVjZSAjIG9mIFF1ZXJ5X09JRAordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9MSU5LX1NUQVRVUyB7CisgICAgVUxPTkcgICBDdXJyVHhSYXRlOyAgICAgICAgIC8vIGluIHVuaXRzIG9mIDAuNU1icHMKKyAgICBVTE9ORyAgIENoYW5uZWxRdWFsaXR5OyAgICAgLy8gMC4uMTAwICUKKyAgICBVTE9ORyAgIFR4Qnl0ZUNvdW50OyAgICAgICAgLy8gYm90aCBvayBhbmQgZmFpbAorICAgIFVMT05HICAgUnhCeXRlQ291bnQ7ICAgICAgICAvLyBib3RoIG9rIGFuZCBmYWlsCisgICAgVUxPTkcJQ2VudHJhbENoYW5uZWw7CQkvLyA0ME1IeiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyCit9IFJUXzgwMl8xMV9MSU5LX1NUQVRVUywgKlBSVF84MDJfMTFfTElOS19TVEFUVVM7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfRVZFTlRfTE9HIHsKKyAgICBMQVJHRV9JTlRFR0VSICAgU3lzdGVtVGltZTsgIC8vIHRpbWVzdGFtbXAgdmlhIE5kaXNHZXRDdXJyZW50U3lzdGVtVGltZSgpCisgICAgVUNIQVIgICAgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOR1RIXTsKKyAgICBVU0hPUlQgICAgICAgICAgRXZlbnQ7ICAgICAgIC8vIEVWRU5UX3h4eAorfSBSVF84MDJfMTFfRVZFTlRfTE9HLCAqUFJUXzgwMl8xMV9FVkVOVF9MT0c7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfRVZFTlRfVEFCTEUgeworICAgIFVMT05HICAgICAgIE51bTsKKyAgICBVTE9ORyAgICAgICBSc3Y7ICAgICAvLyB0byBhbGlnbiBMb2dbXSBhdCBMQVJHRV9JTkVHRVIgYm91bmRhcnkKKyAgICBSVF84MDJfMTFfRVZFTlRfTE9HICAgTG9nW01BWF9OVU1CRVJfT0ZfRVZFTlRdOworfSBSVF84MDJfMTFfRVZFTlRfVEFCTEUsIFBSVF84MDJfMTFfRVZFTlRfVEFCTEU7CisKKy8vIE1JTU8gVHggcGFyYW1ldGVyLCBTaG9ydEdJLCBNQ1MsIFNUQkMsIGV0Yy4gIHRoZXNlIGFyZSBmaWVsZHMgaW4gVFhXSS4gRG9uJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbiEhIQordHlwZWRlZiB1bmlvbiAgX01BQ0hUVFJBTlNNSVRfU0VUVElORyB7CisJc3RydWN0CXsKKwlVU0hPUlQgICAJTUNTOjc7ICAgICAgICAgICAgICAgICAvLyBNQ1MKKwlVU0hPUlQJCUJXOjE7CS8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisJVVNIT1JUCQlTaG9ydEdJOjE7CisJVVNIT1JUCQlTVEJDOjI7CS8vU1BBQ0UKKwlVU0hPUlQJCXJzdjozOworCVVTSE9SVAkJTU9ERToyOwkvLyBVc2UgZGVmaW5pdGlvbiBNT0RFX3h4eC4KKwl9CWZpZWxkOworCVVTSE9SVAkJd29yZDsKKyB9IE1BQ0hUVFJBTlNNSVRfU0VUVElORywgKlBNQUNIVFRSQU5TTUlUX1NFVFRJTkc7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfTUFDX0VOVFJZIHsKKyAgICBVQ0hBUiAgICAgICBBZGRyW01BQ19BRERSX0xFTkdUSF07CisgICAgVUNIQVIgICAgICAgQWlkOworICAgIFVDSEFSICAgICAgIFBzbTsgICAgIC8vIDA6UFdSX0FDVElWRSwgMTpQV1JfU0FWRQorICAgIFVDSEFSCQlNaW1vUHM7ICAvLyAwOk1NUFNfU1RBVElDLCAxOk1NUFNfRFlOQU1JQywgMzpNTVBTX0VuYWJsZWQKKyAgICBDSEFSCQlBdmdSc3NpMDsKKwlDSEFSCQlBdmdSc3NpMTsKKwlDSEFSCQlBdmdSc3NpMjsKKwlVSU5UMzIJCUNvbm5lY3RlZFRpbWU7CisgICAgTUFDSFRUUkFOU01JVF9TRVRUSU5HCVR4UmF0ZTsKK30gUlRfODAyXzExX01BQ19FTlRSWSwgKlBSVF84MDJfMTFfTUFDX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX01BQ19UQUJMRSB7CisgICAgVUxPTkcgICAgICAgTnVtOworICAgIFJUXzgwMl8xMV9NQUNfRU5UUlkgRW50cnlbTUFYX05VTUJFUl9PRl9NQUNdOworfSBSVF84MDJfMTFfTUFDX1RBQkxFLCAqUFJUXzgwMl8xMV9NQUNfVEFCTEU7CisKKy8vIHN0cnVjdHVyZSBmb3IgcXVlcnkvc2V0IGhhcmR3YXJlIHJlZ2lzdGVyIC0gTUFDLCBCQlAsIFJGIHJlZ2lzdGVyCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0hBUkRXQVJFX1JFR0lTVEVSIHsKKyAgICBVTE9ORyAgIEhhcmR3YXJlVHlwZTsgICAgICAgLy8gMDpNQUMsIDE6QkJQLCAyOlJGIHJlZ2lzdGVyLCAzOkVFUFJPTQorICAgIFVMT05HICAgT2Zmc2V0OyAgICAgICAgICAgICAvLyBRL1MgcmVnaXN0ZXIgb2Zmc2V0IGFkZHIKKyAgICBVTE9ORyAgIERhdGE7ICAgICAgICAgICAgICAgLy8gUi9XIGRhdGEgYnVmZmVyCit9IFJUXzgwMl8xMV9IQVJEV0FSRV9SRUdJU1RFUiwgKlBSVF84MDJfMTFfSEFSRFdBUkVfUkVHSVNURVI7CisKKy8vIHN0cnVjdHVyZSB0byB0dW5lIEJCUCBSMTcgIlJYIEFHQyBWR0MgaW5pdCIKKy8vdHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9SWF9BR0NfVkdDX1RVTklORyB7CisvLyAgICBVQ0hBUiAgIEZhbHNlQ2NhTG93ZXJUaHJlc2hvbGQ7ICAvLyAwLTI1NSwgZGVmIDEwCisvLyAgICBVQ0hBUiAgIEZhbHNlQ2NhVXBwZXJUaHJlc2hvbGQ7ICAvLyAwLTI1NSwgZGVmIDEwMAorLy8gICAgVUNIQVIgICBWZ2NEZWx0YTsgICAgICAgICAgICAgICAgLy8gUjE3ICstPSBWZ2NEZWx0YSB3aGVuZXZlciBmbGFzZSBDQ0Egb3ZlciBVcHByVGhyZXNob2xkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBsb3dlciB0aGFuIExvd2VyVGhyZXNob2xkdXBwZXIgdGhyZXNob2xkCisvLyAgICBVQ0hBUiAgIFZnY1VwcGVyQm91bmQ7ICAgICAgICAgICAvLyBtYXggdmFsdWUgb2YgUjE3CisvL30gUlRfODAyXzExX1JYX0FHQ19WR0NfVFVOSU5HLCAqUFJUXzgwMl8xMV9SWF9BR0NfVkdDX1RVTklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9BUF9DT05GSUcgeworICAgIFVMT05HICAgRW5hYmxlVHhCdXJzdDsgICAgICAvLyAwLWRpc2FibGUsIDEtZW5hYmxlCisgICAgVUxPTkcgICBFbmFibGVUdXJib1JhdGU7ICAgIC8vIDAtZGlzYWJsZSwgMS1lbmFibGUgNzIvMTAwbWJwcyB0dXJibyByYXRlCisgICAgVUxPTkcgICBJc29sYXRlSW50ZXJTdGFUcmFmZmljOyAgICAgLy8gMC1kaXNhYmxlLCAxLWVuYWJsZSBpc29sYXRpb24KKyAgICBVTE9ORyAgIEhpZGVTc2lkOyAgICAgICAgICAgLy8gMC1kaXNhYmxlLCAxLWVuYWJsZSBoaWRpbmcKKyAgICBVTE9ORyAgIFVzZUJHUHJvdGVjdGlvbjsgICAgLy8gMC1BVVRPLCAxLWFsd2F5cyBPTiwgMi1hbHdheXMgT0ZGCisgICAgVUxPTkcgICBVc2VTaG9ydFNsb3RUaW1lOyAgIC8vIDAtbm8gdXNlLCAxLXVzZSA5LXVzIHNob3J0IHNsb3QgdGltZQorICAgIFVMT05HICAgUnN2MTsgICAgICAgICAgICAgICAvLyBtdXN0IGJlIDAKKyAgICBVTE9ORyAgIFN5c3RlbUVycm9yQml0bWFwOyAgLy8gaWdub3JlIHVwb24gU0VULCByZXR1cm4gc3lzdGVtIGVycm9yIHVwb24gUVVFUlkKK30gUlRfODAyXzExX0FQX0NPTkZJRywgKlBSVF84MDJfMTFfQVBfQ09ORklHOworCisvLyBzdHJ1Y3R1cmUgdG8gcXVlcnkvc2V0IFNUQV9DT05GSUcKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfU1RBX0NPTkZJRyB7CisgICAgVUxPTkcgICBFbmFibGVUeEJ1cnN0OyAgICAgIC8vIDAtZGlzYWJsZSwgMS1lbmFibGUKKyAgICBVTE9ORyAgIEVuYWJsZVR1cmJvUmF0ZTsgICAgLy8gMC1kaXNhYmxlLCAxLWVuYWJsZSA3Mi8xMDBtYnBzIHR1cmJvIHJhdGUKKyAgICBVTE9ORyAgIFVzZUJHUHJvdGVjdGlvbjsgICAgLy8gMC1BVVRPLCAxLWFsd2F5cyBPTiwgMi1hbHdheXMgT0ZGCisgICAgVUxPTkcgICBVc2VTaG9ydFNsb3RUaW1lOyAgIC8vIDAtbm8gdXNlLCAxLXVzZSA5LXVzIHNob3J0IHNsb3QgdGltZSB3aGVuIGFwcGxpY2FibGUKKyAgICBVTE9ORyAgIEFkaG9jTW9kZTsgCQkJLy8gMC0xMWIgcmF0ZXMgb25seSAoV0lGSSBzcGVjKSwgMSAtIGIvZyBtaXhlZCwgMiAtIGcgb25seQorICAgIFVMT05HICAgSHdSYWRpb1N0YXR1czsgICAgICAvLyAwLU9GRiwgMS1PTiwgZGVmYXVsdCBpcyAxLCBSZWFkLU9ubHkKKyAgICBVTE9ORyAgIFJzdjE7ICAgICAgICAgICAgICAgLy8gbXVzdCBiZSAwCisgICAgVUxPTkcgICBTeXN0ZW1FcnJvckJpdG1hcDsgIC8vIGlnbm9yZSB1cG9uIFNFVCwgcmV0dXJuIHN5c3RlbSBlcnJvciB1cG9uIFFVRVJZCit9IFJUXzgwMl8xMV9TVEFfQ09ORklHLCAqUFJUXzgwMl8xMV9TVEFfQ09ORklHOworCisvLworLy8gIEZvciBPSUQgUXVlcnkgb3IgU2V0IGFib3V0IEJBIHN0cnVjdHVyZQorLy8KK3R5cGVkZWYJc3RydWN0CV9PSURfQkFDQVBfU1RSVUMJeworCQlVQ0hBUgkJUnhCQVdpbkxpbWl0OworCQlVQ0hBUgkJVHhCQVdpbkxpbWl0OworCQlVQ0hBUgkJUG9saWN5OwkvLyAwOiBERUxBWV9CQSAxOklNTUVEX0JBICAoLy9CQSBQb2xpY3kgc3ViZmlsZWQgdmFsdWUgaW4gQUREQkEgZnJhbWUpICAgMjpCQS1ub3QgdXNlLiBvdGhlciB2YWx1ZSBpbnZhbGlkCisJCVVDSEFSCQlNcGR1RGVuc2l0eTsJLy8gMDogREVMQVlfQkEgMTpJTU1FRF9CQSAgKC8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lKSAgIDI6QkEtbm90IHVzZS4gb3RoZXIgdmFsdWUgaW52YWxpZAorCQlVQ0hBUiAgICAgICAJQW1zZHVFbmFibGU7CS8vRW5hYmxlIEFNU0RVIHRyYW5zbWlzc3Rpb24KKwkJVUNIQVIgICAgICAgCUFtc2R1U2l6ZTsJLy8gMDozODM5LCAxOjc5MzUgYnl0ZXMuIFVJTlQgIE1TRFVTaXplVG9CeXRlc1tdCT0geyAzODM5LCA3OTM1fTsKKwkJVUNIQVIgICAgICAgCU1NUFNtb2RlOwkvLyBNSU1PIHBvd2VyIHNhdmUgbW9yZSwgMDpzdGF0aWMsIDE6ZHluYW1pYywgMjpyc3YsIDM6bWltbyBlbmFibGUKKwkJQk9PTEVBTgkJQXV0b0JBOwkvLyBBdXRvIEJBIHdpbGwgYXV0b21hdGljYWxseQorfSBPSURfQkFDQVBfU1RSVUMsICpQT0lEX0JBQ0FQX1NUUlVDOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0FDTF9FTlRSWSB7CisgICAgVUNIQVIgICBBZGRyW01BQ19BRERSX0xFTkdUSF07CisgICAgVVNIT1JUICBSc3Y7Cit9IFJUXzgwMl8xMV9BQ0xfRU5UUlksICpQUlRfODAyXzExX0FDTF9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SVF84MDJfMTFfQUNMIHsKKyAgICBVTE9ORyAgIFBvbGljeTsgICAgICAgICAgICAgLy8gMC1kaXNhYmxlLCAxLXBvc2l0aXZlIGxpc3QsIDItbmVnYXRpdmUgbGlzdAorICAgIFVMT05HICAgTnVtOworICAgIFJUXzgwMl8xMV9BQ0xfRU5UUlkgRW50cnlbTUFYX05VTUJFUl9PRl9BQ0xdOworfSBSVF84MDJfMTFfQUNMLCAqUFJUXzgwMl8xMV9BQ0w7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfV0RTIHsKKyAgICBVTE9ORwkJCQkJCU51bTsKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUwkJRW50cnlbMjQvKk1BWF9OVU1fT0ZfV0RTX0xJTksqL107CisJVUxPTkcJCQkJCQlLZXlMZW5ndGg7CisJVUNIQVIJCQkJCQlLZXlNYXRlcmlhbFszMl07Cit9IFJUXzgwMl8xMV9XRFMsICpQUlRfODAyXzExX1dEUzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9UWF9SQVRFU18geworICAgIFVDSEFSICAgICAgIFN1cFJhdGVMZW47CisgICAgVUNIQVIgICAgICAgU3VwUmF0ZVtNQVhfTEVOR1RIX09GX1NVUFBPUlRfUkFURVNdOworICAgIFVDSEFSICAgICAgIEV4dFJhdGVMZW47CisgICAgVUNIQVIgICAgICAgRXh0UmF0ZVtNQVhfTEVOR1RIX09GX1NVUFBPUlRfUkFURVNdOworfSBSVF84MDJfMTFfVFhfUkFURVMsICpQUlRfODAyXzExX1RYX1JBVEVTOworCisKKy8vIERlZmluaXRpb24gb2YgZXh0cmEgaW5mb3JtYXRpb24gY29kZQorI2RlZmluZQlHRU5FUkFMX0xJTktfVVAJCQkweDAJCQkvLyBMaW5rIGlzIFVwCisjZGVmaW5lCUdFTkVSQUxfTElOS19ET1dOCQkweDEJCQkvLyBMaW5rIGlzIERvd24KKyNkZWZpbmUJSFdfUkFESU9fT0ZGCQkJMHgyCQkJLy8gSGFyZHdhcmUgcmFkaW8gb2ZmCisjZGVmaW5lCVNXX1JBRElPX09GRgkJCTB4MwkJCS8vIFNvZnR3YXJlIHJhZGlvIG9mZgorI2RlZmluZQlBVVRIX0ZBSUwJCQkJMHg0CQkJLy8gT3BlbiBhdXRoZW50aWNhdGlvbiBmYWlsCisjZGVmaW5lCUFVVEhfRkFJTF9LRVlTCQkJMHg1CQkJLy8gU2hhcmVkIGF1dGhlbnRpY2F0aW9uIGZhaWwKKyNkZWZpbmUJQVNTT0NfRkFJTAkJCQkweDYJCQkvLyBBc3NvY2lhdGlvbiBmYWlsZWQKKyNkZWZpbmUJRUFQX01JQ19GQUlMVVJFCQkJMHg3CQkJLy8gRGVhdXRoZW5jYXRpb24gYmVjYXVzZSBNSUMgZmFpbHVyZQorI2RlZmluZQlFQVBfNFdBWV9USU1FT1VUCQkweDgJCQkvLyBEZWF1dGhlbmNhdGlvbiBvbiA0LXdheSBoYW5kc2hha2UgdGltZW91dAorI2RlZmluZQlFQVBfR1JPVVBfS0VZX1RJTUVPVVQJMHg5CQkJLy8gRGVhdXRoZW5jYXRpb24gb24gZ3JvdXAga2V5IGhhbmRzaGFrZSB0aW1lb3V0CisjZGVmaW5lCUVBUF9TVUNDRVNTCQkJCTB4YQkJCS8vIEVBUCBzdWNjZWVkCisjZGVmaW5lCURFVEVDVF9SQURBUl9TSUdOQUwJCTB4YiAgICAgICAgIC8vIFJhZGFyIHNpZ25hbCBvY2N1ciBpbiBjdXJyZW50IGNoYW5uZWwKKyNkZWZpbmUgRVhUUkFfSU5GT19NQVgJCQkweGIJCQkvLyBJbmRpY2F0ZSBMYXN0IE9JRAorCisjZGVmaW5lIEVYVFJBX0lORk9fQ0xFQVIJCTB4ZmZmZmZmZmYKKworLy8gVGhpcyBpcyBPSUQgc2V0dGluZyBzdHJ1Y3R1cmUuIFNvIG9ubHkgR0Ygb3IgTU0gYXMgTW9kZS4gVGhpcyBpcyB2YWxpZCB3aGVuIG91ciB3aXJlbHNzIG1vZGUgaGFzIDgwMi4xMW4gaW4gdXNlLgordHlwZWRlZiBzdHJ1Y3QgeworCVJUXzgwMl8xMV9QSFlfTU9ERQkJUGh5TW9kZTsgCS8vCisJVUNIQVIJCVRyYW5zbWl0Tm87CisJVUNIQVIJCUh0TW9kZTsgCS8vSFRNT0RFX0dGIG9yIEhUTU9ERV9NTQorCVVDSEFSCQlFeHRPZmZzZXQ7CS8vZXh0ZW5zaW9uIGNoYW5uZWwgYWJvdmUgb3IgYmVsb3cKKwlVQ0hBUgkJTUNTOworCVVDSEFSICAgCUJXOworCVVDSEFSCQlTVEJDOworCVVDSEFSCQlTSE9SVEdJOworCVVDSEFSCQlyc3Y7Cit9IE9JRF9TRVRfSFRfUEhZTU9ERSwgKlBPSURfU0VUX0hUX1BIWU1PREU7CisKKyNpZmRlZiBOSU5URU5ET19BUAorI2RlZmluZSBOSU5URU5ET19NQVhfRU5UUlkgMTYKKyNkZWZpbmUgTklOVEVORE9fU1NJRF9OQU1FX0xOIDgKKyNkZWZpbmUgTklOVEVORE9fU1NJRF9OQU1FICJOV0NVU0JBUCIKKyNkZWZpbmUgTklOVEVORE9fUFJPQkVfUkVRX0ZMQUdfTUFTSyAweDAzCisjZGVmaW5lIE5JTlRFTkRPX1BST0JFX1JFUV9PTiAweDAxCisjZGVmaW5lIE5JTlRFTkRPX1BST0JFX1JFUV9TSUdOQUwgMHgwMgorI2RlZmluZSBOSU5URU5ET19QUk9CRV9SU1BfT04gMHgwMQorI2RlZmluZSBOSU5URU5ET19TU0lEX05JQ0tOQU1FX0xOIDIwCisKKyNkZWZpbmUgTklOVEVORE9fV0VQS0VZX0xOIDEzCisKK3R5cGVkZWYgc3RydWN0IF9OSU5URU5ET19TU0lECit7CisJVUNIQVIJTklOVEVORE9GaXhDaGFyW05JTlRFTkRPX1NTSURfTkFNRV9MTl07CisJVUNIQVIJemVybzE7CisJVUNIQVIJcmVnaXN0ZTsKKwlVQ0hBUglJRDsKKwlVQ0hBUgl6ZXJvMjsKKwlVQ0hBUglOSUNLbmFtZVtOSU5URU5ET19TU0lEX05JQ0tOQU1FX0xOXTsKK30gUlRfTklOVEVORE9fU1NJRCwgKlBSVF9OSU5URU5ET19TU0lEOworCit0eXBlZGVmIHN0cnVjdCBfTklOVEVORE9fRU5UUlkKK3sKKwlVQ0hBUglOSUNLbmFtZVtOSU5URU5ET19TU0lEX05JQ0tOQU1FX0xOXTsKKyAgICBVQ0hBUiAgIERTX0FkZHJbRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKKwlVQ0hBUglyZWdpc3RlOworCVVDSEFSCVVzZXJTcGFjZUFjazsKK30gUlRfTklOVEVORE9fRU5UUlksICpQUlRfTklOVEVORE9fRU5UUlk7CisKKy8vUlRQUklWX0lPQ1RMX05JTlRFTkRPX0dFVF9UQUJMRQorLy9SVFBSSVZfSU9DVExfTklOVEVORE9fU0VUX1RBQkxFCit0eXBlZGVmIHN0cnVjdCBfTklOVEVORE9fVEFCTEUKK3sKKwlVSU5UCQkJCW51bWJlcjsKKwlSVF9OSU5URU5ET19FTlRSWQllbnRyeVtOSU5URU5ET19NQVhfRU5UUlldOworfSBSVF9OSU5URU5ET19UQUJMRSwgKlBSVF9OSU5URU5ET19UQUJMRTsKKworLy9SVFBSSVZfSU9DVExfTklOVEVORE9fU0VFRF9XRVBLRVkKK3R5cGVkZWYgc3RydWN0IF9OSU5URU5ET19TRUVEX1dFUEtFWQoreworCVVDSEFSCXNlZWRbTklOVEVORE9fU1NJRF9OSUNLTkFNRV9MTl07CisJVUNIQVIJd2Vwa2V5WzE2XTsvL3VzZSAxMyBmb3IgMTA0IGJpdHMgd2VwIGtleQorfSBSVF9OSU5URU5ET19TRUVEX1dFUEtFWSwgKlBSVF9OSU5URU5ET19TRUVEX1dFUEtFWTsKKyNlbmRpZiAvLyBOSU5URU5ET19BUCAvLworCisjaWZkZWYgTExURF9TVVBQT1JUCit0eXBlZGVmIHN0cnVjdCBfUlRfTExURF9BU1NPSUNBVElPTl9FTlRSWSB7CisgICAgVUNIQVIgICAgICAgICAgIEFkZHJbRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKKyAgICB1bnNpZ25lZCBzaG9ydCAgTU9SOyAgICAgICAgLy8gbWF4aW11bSBvcGVyYXRpb25hbCByYXRlCisgICAgVUNIQVIgICAgICAgICAgIHBoeU1vZGU7Cit9IFJUX0xMVERfQVNTT0lDQVRJT05fRU5UUlksICpQUlRfTExURF9BU1NPSUNBVElPTl9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUX0xMVERfQVNTT0lDQVRJT05fVEFCTEUgeworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBOdW07CisgICAgUlRfTExURF9BU1NPSUNBVElPTl9FTlRSWSAgIEVudHJ5W01BWF9OVU1CRVJfT0ZfTUFDXTsKK30gUlRfTExURF9BU1NPSUNBVElPTl9UQUJMRSwgKlBSVF9MTFREX0FTU09JQ0FUSU9OX1RBQkxFOworI2VuZGlmIC8vIExMVERfU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisvL3J0Mjg2MCwga2F0aHkgMjAwNy0wMTE4CisvLyBzdHJ1Y3R1cmUgZm9yIERMUwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9ETFNfVUkgeworCVVTSE9SVAkJCQkJCVRpbWVPdXQ7CQkvLyB1bml0OiBzZWNvbmQgLCBzZXQgYnkgVUkKKwlVU0hPUlQJCQkJCQlDb3VudERvd25UaW1lcjsJLy8gdW5pdDogc2Vjb25kICwgdXNlZCBieSBkcml2ZXIgb25seQorCU5ESVNfODAyXzExX01BQ19BRERSRVNTCQlNYWNBZGRyOwkJLy8gc2V0IGJ5IFVJCisJVUNIQVIJCQkJCQlTdGF0dXM7CQkJLy8gMDogbm9uZSAsIDE6IHdhaXQgU1RBa2V5LCAyOiBmaW5pc2ggRExTIHNldHVwICwgc2V0IGJ5IGRyaXZlciBvbmx5CisJQk9PTEVBTgkJCQkJCVZhbGlkOwkJCS8vIDE6IHZhbGlkICwgMDogaW52YWxpZCAsIHNldCBieSBVSSwgdXNlIHRvIHNldHVwIG9yIHRlYXIgZG93biBETFMgbGluaworfSBSVF84MDJfMTFfRExTX1VJLCAqUFJUXzgwMl8xMV9ETFNfVUk7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfRExTX0lORk8geworCVJUXzgwMl8xMV9ETFNfVUkJRW50cnlbTUFYX05VTUJFUl9PRl9ETFNfRU5UUlldOworCVVDSEFSCQkJCW51bTsKK30gUlRfODAyXzExX0RMU19JTkZPLCAqUFJUXzgwMl8xMV9ETFNfSU5GTzsKKwordHlwZWRlZiBlbnVtIF9SVF84MDJfMTFfRExTX01PREUgeworICAgIERMU19OT05FLAorICAgIERMU19XQUlUX0tFWSwKKyAgICBETFNfRklOSVNICit9IFJUXzgwMl8xMV9ETFNfTU9ERTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNkZWZpbmUJUlRfQVNTT0NfRVZFTlRfRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDEKKyNkZWZpbmUJUlRfRElTQVNTT0NfRVZFTlRfRkxBRyAgICAgICAgICAgICAgICAgICAgICAweDAxMDIKKyNkZWZpbmUJUlRfUkVRSUVfRVZFTlRfRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDMKKyNkZWZpbmUJUlRfUkVTUElFX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDQKKyNkZWZpbmUJUlRfQVNTT0NJTkZPX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAweDAxMDUKKyNkZWZpbmUgUlRfUE1LSURDQU5EX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDYKKyNkZWZpbmUgUlRfSU5URVJGQUNFX0RPV04gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDcKKyNkZWZpbmUgUlRfSU5URVJGQUNFX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDgKKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjZGVmaW5lIE1BWF9DVVNUT01fTEVOIDEyOAorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCit0eXBlZGVmIGVudW0gX1JUXzgwMl8xMV9EX0NMSUVOVF9NT0RFCit7CisgICBSdDgwMl8xMV9EX05vbmUsCisgICBSdDgwMl8xMV9EX0ZsZXhpYmxlLAorICAgUnQ4MDJfMTFfRF9TdHJpY3QsCit9IFJUXzgwMl8xMV9EX0NMSUVOVF9NT0RFLCAqUFJUXzgwMl8xMV9EX0NMSUVOVF9NT0RFOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit0eXBlZGVmIHN0cnVjdCBfUlRfQ0hBTk5FTF9MSVNUX0lORk8KK3sKKwlVQ0hBUiBDaGFubmVsTGlzdFtNQVhfTlVNX09GX0NIU107ICAgLy8gbGlzdCBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzIGZvciBzaXRlIHN1cnZleQorCVVDSEFSIENoYW5uZWxMaXN0TnVtOyAvLyBudW1iZXIgb2YgY2hhbm5lbCBpbiBDaGFubmVsTGlzdFtdCit9IFJUX0NIQU5ORUxfTElTVF9JTkZPLCAqUFJUX0NIQU5ORUxfTElTVF9JTkZPOworCisvLyBXU0MgY29uZmlndXJlZCBjcmVkZW50aWFsCit0eXBlZGVmCXN0cnVjdAlfV1NDX0NSRURFTlRJQUwKK3sKKwlORElTXzgwMl8xMV9TU0lECVNTSUQ7CQkJCS8vIG1hbmRhdG9yeQorCVVTSE9SVAkJCQlBdXRoVHlwZTsJCQkvLyBtYW5kYXRvcnksIDE6IG9wZW4sIDI6IHdwYS1wc2ssIDQ6IHNoYXJlZCwgODp3cGEsIDB4MTA6IHdwYTIsIDB4MjA6IHdwYTItcHNrCisJVVNIT1JUCQkJCUVuY3JUeXBlOwkJCS8vIG1hbmRhdG9yeSwgMTogbm9uZSwgMjogd2VwLCA0OiB0a2lwLCA4OiBhZXMKKwlVQ0hBUgkJCQlLZXlbNjRdOwkJCS8vIG1hbmRhdG9yeSwgTWF4aW11bSA2NCBieXRlCisJVVNIT1JUCQkJCUtleUxlbmd0aDsKKwlVQ0hBUgkJCQlNYWNBZGRyWzZdOwkJCS8vIG1hbmRhdG9yeSwgQVAgTUFDIGFkZHJlc3MKKwlVQ0hBUgkJCQlLZXlJbmRleDsJCQkvLyBvcHRpb25hbCwgZGVmYXVsdCBpcyAxCisJVUNIQVIJCQkJUnN2ZFszXTsJCQkvLyBNYWtlIGFsaWdubWVudAorfQlXU0NfQ1JFREVOVElBTCwgKlBXU0NfQ1JFREVOVElBTDsKKworLy8gV1NDIGNvbmZpZ3VyZWQgcHJvZmlsZXMKK3R5cGVkZWYJc3RydWN0CV9XU0NfUFJPRklMRQoreworCVVJTlQJCQlQcm9maWxlQ250OworCVdTQ19DUkVERU5USUFMCVByb2ZpbGVbOF07CQkJCS8vIFN1cHBvcnQgdXAgdG8gOCBwcm9maWxlcworfQlXU0NfUFJPRklMRSwgKlBXU0NfUFJPRklMRTsKKworCisKKyNlbmRpZiAvLyBfT0lEX0hfCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnQyODcwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0Mjg3MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmEyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0Mjg3MC5oCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fUlQyODcwX0hfXworI2RlZmluZSBfX1JUMjg3MF9IX18KKworLy91c2IgaGVhZGVyIGZpbGVzCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qIHJ0bXBfZGVmLmggKi8KKy8vCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorI2RlZmluZSBCVUxLQUdHUkVfWklTRSAgICAgICAgICAxMDAKKyNkZWZpbmUgUlQyOFhYX0RSVkRBVEFfU0VUKF9hKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoX2EsIHBBZCk7CisjZGVmaW5lIFJUMjhYWF9QVVRfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcHV0X2RldgorI2RlZmluZSBSVFVTQl9BTExPQ19VUkIoaXNvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2FsbG9jX3VyYihpc28sIEdGUF9BVE9NSUMpCisjZGVmaW5lIFJUVVNCX1NVQk1JVF9VUkIocFVyYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jfc3VibWl0X3VyYihwVXJiLCBHRlBfQVRPTUlDKQorI2RlZmluZQlSVFVTQl9VUkJfQUxMT0NfQlVGRkVSKHBVc2JfRGV2LCBCdWZTaXplLCBwRG1hX2FkZHIpICAgICAgICAgICAgICAgdXNiX2J1ZmZlcl9hbGxvYyhwVXNiX0RldiwgQnVmU2l6ZSwgR0ZQX0FUT01JQywgcERtYV9hZGRyKQorI2RlZmluZQlSVFVTQl9VUkJfRlJFRV9CVUZGRVIocFVzYl9EZXYsIEJ1ZlNpemUsIHBUcmFuc2ZlckJ1ZiwgRG1hX2FkZHIpICAgdXNiX2J1ZmZlcl9mcmVlKHBVc2JfRGV2LCBCdWZTaXplLCBwVHJhbnNmZXJCdWYsIERtYV9hZGRyKQorI2Vsc2UKKyNkZWZpbmUgQlVMS0FHR1JFX1pJU0UgICAgICAgICAgNjAKKyNkZWZpbmUgUlQyOFhYX0RSVkRBVEFfU0VUKF9hKQorI2RlZmluZSBSVDI4WFhfUFVUX0RFVklDRShkZXZfcCkKKyNkZWZpbmUgUlRVU0JfQUxMT0NfVVJCKGlzbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9hbGxvY191cmIoaXNvKQorI2RlZmluZSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3N1Ym1pdF91cmIocFVyYikKKyNkZWZpbmUgUlRVU0JfVVJCX0FMTE9DX0JVRkZFUihwVXNiX0RldiwgQnVmU2l6ZSwgcERtYV9hZGRyKSAgICAgICAgICAgICAgIGttYWxsb2MoQnVmU2l6ZSwgR0ZQX0FUT01JQykKKyNkZWZpbmUJUlRVU0JfVVJCX0ZSRUVfQlVGRkVSKHBVc2JfRGV2LCBCdWZTaXplLCBwVHJhbnNmZXJCdWYsIERtYV9hZGRyKSAgIGtmcmVlKHBUcmFuc2ZlckJ1ZikKKyNlbmRpZgorCisjZGVmaW5lIFJYQlVMS0FHR1JFX1pJU0UgICAgICAgIDEyCisjZGVmaW5lIE1BWF9UWEJVTEtfTElNSVQgICAgICAgIChMT0NBTF9UWEJVRl9TSVpFKihCVUxLQUdHUkVfWklTRS0xKSkKKyNkZWZpbmUgTUFYX1RYQlVMS19TSVpFICAgICAgICAgKExPQ0FMX1RYQlVGX1NJWkUqQlVMS0FHR1JFX1pJU0UpCisjZGVmaW5lIE1BWF9SWEJVTEtfU0laRSAgICAgICAgIChMT0NBTF9UWEJVRl9TSVpFKlJYQlVMS0FHR1JFX1pJU0UpCisjZGVmaW5lIE1BWF9NTE1FX0hBTkRMRVJfTUVNT1JZIDIwCisjZGVmaW5lIEJVRkZFUl9TSVpFCQkJCTI0MDAJLy8yMDQ4CisjZGVmaW5lCVRYX1JJTkcJCQkJCTB4YQorI2RlZmluZQlQUklPX1JJTkcJCQkJMHhjCisKKworLy8gRmxhZ3MgZm9yIEJ1bGtmbGFncyBjb250cm9sIGZvciBidWxrIG91dCBkYXRhCisvLworI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OVUxMCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgZlJUVVNCX0JVTEtfT1VUX1JUUwkJCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX01MTUUJCQkJCTB4MDAwMDAwMDQKKworI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwJCQkJMHgwMDAxMDAwMAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfMgkJCTB4MDAwMjAwMDAKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzMJCQkweDAwMDQwMDAwCisjZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF80CQkJMHgwMDA4MDAwMAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfNQkJCTB4MDAxMDAwMDAKKworI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfUFNQT0xMCQkJCQkweDAwMDAwMDIwCisjZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9EQVRBX0ZSQUcJCQkJMHgwMDAwMDA0MAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHXzIJCQkJMHgwMDAwMDA4MAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHXzMJCQkJMHgwMDAwMDEwMAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHXzQJCQkJMHgwMDAwMDIwMAorCisjaWZkZWYgUkFMSU5LX0FURQorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUJCQkJMHgwMDEwMDAwMAorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworI2RlZmluZSBSVDI4NzBfVVNCX0RFVklDRVMJXAorewlcCisJe1VTQl9ERVZJQ0UoMHgxNDhGLDB4Mjc3MCl9LCAvKiBSYWxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE0OEYsMHgyODcwKX0sIC8qIFJhbGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTQ4RiwweDMwNzApfSwgLyogUmFsaW5rIDMwNzAgKi8JXAorCXtVU0JfREVWSUNFKDB4MTQ4RiwweDMwNzEpfSwgLyogUmFsaW5rIDMwNzEgKi8JXAorCXtVU0JfREVWSUNFKDB4MTQ4RiwweDMwNzIpfSwgLyogUmFsaW5rIDMwNzIgKi8JXAorCXtVU0JfREVWSUNFKDB4MEIwNSwweDE3MzEpfSwgLyogQXN1cyAqLwkJCVwKKwl7VVNCX0RFVklDRSgweDBCMDUsMHgxNzMyKX0sIC8qIEFzdXMgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwQjA1LDB4MTc0Mil9LCAvKiBBc3VzICovCQkJXAorCXtVU0JfREVWSUNFKDB4MERGNiwweDAwMTcpfSwgLyogU2l0ZWNvbSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MERGNiwweDAwMkIpfSwgLyogU2l0ZWNvbSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MERGNiwweDAwMkMpfSwgLyogU2l0ZWNvbSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MERGNiwweDAwM0UpfSwgLyogU2l0ZWNvbSAzMDcwICovCVwKKwl7VVNCX0RFVklDRSgweDBERjYsMHgwMDJEKX0sIC8qIFNpdGVjb20gKi8JCVwKKwl7VVNCX0RFVklDRSgweDBERjYsMHgwMDM5KX0sIC8qIFNpdGVjb20gMjc3MCAqLwlcCisJe1VTQl9ERVZJQ0UoMHgxNEIyLDB4M0MwNil9LCAvKiBDb25jZXB0cm9uaWMgKi8JXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMjgpfSwgLyogQ29uY2VwdHJvbmljICovCVwKKwl7VVNCX0RFVklDRSgweDIwMTksMHhFRDA2KX0sIC8qIFBsYW5leCBDb21tdW5pY2F0aW9ucywgSW5jLiAqLwkJXAorCXtVU0JfREVWSUNFKDB4MjAxOSwweEFCMjUpfSwgLyogUGxhbmV4IENvbW11bmljYXRpb25zLCBJbmMuIFJUMzA3MCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDdEMSwweDNDMDkpfSwgLyogRC1MaW5rICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwN0QxLDB4M0MxMSl9LCAvKiBELUxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDIwMDEsMHgzQzA5KX0sIC8qIEQtTGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MjAwMSwweDNDMEEpfSwgLyogRC1MaW5rIDMwNzIqLwlcCisJe1VTQl9ERVZJQ0UoMHgxNEIyLDB4M0MwNyl9LCAvKiBBTCAqLwkJCVwKKwl7VVNCX0RFVklDRSgweDE0QjIsMHgzQzEyKX0sIC8qIEFMIDMwNzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA1MEQsMHg4MDUzKX0sIC8qIEJlbGtpbiAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMjMpfSwgLyogQWlybGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMjcpfSwgLyogQWlybGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDdBQSwweDAwMkYpfSwgLyogQ29yZWdhICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwN0FBLDB4MDAzQyl9LCAvKiBDb3JlZ2EgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA3QUEsMHgwMDNGKX0sIC8qIENvcmVnYSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MThDNSwweDAwMTIpfSwgLyogQ29yZWdhIDMwNzAgKi8JXAorCXtVU0JfREVWSUNFKDB4MTA0NCwweDgwMEIpfSwgLyogR2lnYWJ5dGUgKi8JCVwKKwl7VVNCX0RFVklDRSgweDEwNDQsMHg4MDBEKX0sIC8qIEdpZ2FieXRlIEdOLVdCMzJMIDMwNzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE1QTksMHgwMDA2KX0sIC8qIFNwYXJrbGFuICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4QjUyMil9LCAvKiBTTUMgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4QTYxOCl9LCAvKiBTTUMgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4ODUyMil9LCAvKiBBcmNhZHlhbiAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDgzQSwweDc1MTIpfSwgLyogQXJjYWR5YW4gMjc3MCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDgzQSwweDc1MjIpfSwgLyogQXJjYWR5YW4gKi8JCVwKKwl7VVNCX0RFVklDRSgweDA4M0EsMHg3NTExKX0sIC8qIEFyY2FkeWFuIDMwNzAgKi8gXAorCXtVU0JfREVWSUNFKDB4MENERSwweDAwMjIpfSwgLyogWkNPTSAqLwkJCVwKKwl7VVNCX0RFVklDRSgweDA1ODYsMHgzNDE2KX0sIC8qIFp5eGVsICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwQ0RFLDB4MDAyNSl9LCAvKiBaeXhlbCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTc0MCwweDk3MDEpfSwgLyogRW5HZW5pdXMgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE3NDAsMHg5NzAyKX0sIC8qIEVuR2VuaXVzICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNzQwLDB4OTcwMyl9LCAvKiBFbkdlbml1cyAzMDcwICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNDcxLDB4MjAwZil9LCAvKiBQaGlsaXBzICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNEIyLDB4M0MyNSl9LCAvKiBEcmF5dGVrICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxM0QzLDB4MzI0Nyl9LCAvKiBBenVyZVdhdmUgKi8JXAorCXtVU0JfREVWSUNFKDB4MTNEMywweDMyNzMpfSwgLyogQXp1cmVXYXZlIDMwNzAqLwlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4NjYxOCl9LCAvKiBBY2N0b24gKi8JCVwKKwl7VVNCX0RFVklDRSgweDE1YzUsMHgwMDA4KX0sIC8qIEFtaXQgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwRTY2LDB4MDAwMSl9LCAvKiBIYXdraW5nICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwRTY2LDB4MDAwMyl9LCAvKiBIYXdraW5nICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxMjlCLDB4MTgyOCl9LCAvKiBTaWVtZW5zICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNTdFLDB4MzAwRSl9LCAvKiBVLU1lZGlhICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNTBkLDB4ODA1Yyl9LAkJCQkJXAorCXtVU0JfREVWSUNFKDB4MTQ4MiwweDNDMDkpfSwgLyogQWJvY29tKi8JCVwKKwl7VVNCX0RFVklDRSgweDE0QjIsMHgzQzA5KX0sIC8qIEFscGhhICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNEU4LDB4MjAxOCl9LCAvKiBzYW1zdW5nICovICAJXAorCXtVU0JfREVWSUNFKDB4MDdCOCwweDMwNzApfSwgLyogQWJvQ29tIDMwNzAgKi8JXAorCXtVU0JfREVWSUNFKDB4MDdCOCwweDMwNzEpfSwgLyogQWJvQ29tIDMwNzEgKi8JXAorCXtVU0JfREVWSUNFKDB4MDdCOCwweDMwNzIpfSwgLyogQWJvY29tIDMwNzIgKi8JXAorCXtVU0JfREVWSUNFKDB4NzM5MiwweDc3MTEpfSwgLyogRWRpbWF4IDMwNzAgKi8JXAorCXtVU0JfREVWSUNFKDB4NUE1NywweDAyODApfSwgLyogWmlud2VsbCAqLwkJXAorCXtVU0JfREVWSUNFKDB4NUE1NywweDAyODIpfSwgLyogWmlud2VsbCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MUEzMiwweDAzMDQpfSwgLyogUXVhbnRhIDMwNzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA3ODksMHgwMTYyKX0sIC8qIExvZ2l0ZWMgMjg3MCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDc4OSwweDAxNjMpfSwgLyogTG9naXRlYyAyODcwICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNzg5LDB4MDE2NCl9LCAvKiBMb2dpdGVjIDI4NzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDFFREEsMHgyMzEwKX0sIC8qIEFpclRpZXMgMzA3MCAqLwkJXAorCXsgfS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZQlGUkVFX0hUVFhfUklORyhfcCwgX2IsIF90KQkJCVwKK3sJCQkJCQkJCQkJXAorCWlmICgoX3QpLT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSAoX3QpLT5DdXJXcml0ZVBvc2l0aW9uKQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQkoX3QpLT5iUmluZ0VtcHR5ID0gVFJVRTsJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCS8qTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCYoX3ApLT5UeENvdW50KTsgKi9cCit9CisKKy8vCisvLyBSWElORk8gYXBwZW5kcyBhdCB0aGUgZW5kIG9mIGVhY2ggcnggcGFja2V0LgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1JYSU5GT19TVFJVQyB7CisJVUlOVDMyCQlQbGNwU2lnbmFsOjEyOworCVVJTlQzMgkJTGFzdEFNU0RVOjE7CisJVUlOVDMyCQlDaXBoZXJBbGc6MTsKKwlVSU5UMzIJCVBsY3BSc3NpbDoxOworCVVJTlQzMgkJRGVjcnlwdGVkOjE7CisJVUlOVDMyCQlBTVBEVToxOwkJLy8gVG8gYmUgbW92ZWQKKwlVSU5UMzIJCUwyUEFEOjE7CisJVUlOVDMyCQlSU1NJOjE7CisJVUlOVDMyCQlIVEM6MTsKKwlVSU5UMzIJCUFNU0RVOjE7CQkvLyByeCB3aXRoIDgwMi4zIGhlYWRlciwgbm90IDgwMi4xMSBoZWFkZXIuCisJVUlOVDMyCQlDaXBoZXJFcnI6MjsgICAgICAgIC8vIDA6IGRlY3J5cHRpb24gb2theSwgMTpJQ1YgZXJyb3IsIDI6TUlDIGVycm9yLCAzOktFWSBub3QgdmFsaWQKKwlVSU5UMzIJCUNyYzoxOyAgICAgICAgICAgICAgLy8gMTogQ1JDIGVycm9yCisJVUlOVDMyCQlNeUJzczoxOyAgCS8vIDE6IHRoaXMgZnJhbWUgYmVsb25ncyB0byB0aGUgc2FtZSBCU1NJRAorCVVJTlQzMgkJQmNhc3Q6MTsgICAgICAgICAgICAvLyAxOiB0aGlzIGlzIGEgYnJvYWRjYXN0IGZyYW1lCisJVUlOVDMyCQlNY2FzdDoxOyAgICAgICAgICAgIC8vIDE6IHRoaXMgaXMgYSBtdWx0aWNhc3QgZnJhbWUKKwlVSU5UMzIJCVUyTToxOyAgICAgICAgICAgICAgLy8gMTogdGhpcyBSWCBmcmFtZSBpcyB1bmljYXN0IHRvIG1lCisJVUlOVDMyCQlGUkFHOjE7CisJVUlOVDMyCQlOVUxMREFUQToxOworCVVJTlQzMgkJREFUQToxOworCVVJTlQzMgkJQkE6MTsKK30JUlhJTkZPX1NUUlVDLCAqUFJYSU5GT19TVFJVQywgUlQyOFhYX1JYRF9TVFJVQywgKlBSVDI4WFhfUlhEX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfUlhJTkZPX1NUUlVDIHsKKwlVSU5UMzIJCUJBOjE7CisJVUlOVDMyCQlEQVRBOjE7CisJVUlOVDMyCQlOVUxMREFUQToxOworCVVJTlQzMgkJRlJBRzoxOworCVVJTlQzMgkJVTJNOjE7ICAgICAgICAgICAgICAvLyAxOiB0aGlzIFJYIGZyYW1lIGlzIHVuaWNhc3QgdG8gbWUKKwlVSU5UMzIJCU1jYXN0OjE7ICAgICAgICAgICAgLy8gMTogdGhpcyBpcyBhIG11bHRpY2FzdCBmcmFtZQorCVVJTlQzMgkJQmNhc3Q6MTsgICAgICAgICAgICAvLyAxOiB0aGlzIGlzIGEgYnJvYWRjYXN0IGZyYW1lCisJVUlOVDMyCQlNeUJzczoxOyAgCS8vIDE6IHRoaXMgZnJhbWUgYmVsb25ncyB0byB0aGUgc2FtZSBCU1NJRAorCVVJTlQzMgkJQ3JjOjE7ICAgICAgICAgICAgICAvLyAxOiBDUkMgZXJyb3IKKwlVSU5UMzIJCUNpcGhlckVycjoyOyAgICAgICAgLy8gMDogZGVjcnlwdGlvbiBva2F5LCAxOklDViBlcnJvciwgMjpNSUMgZXJyb3IsIDM6S0VZIG5vdCB2YWxpZAorCVVJTlQzMgkJQU1TRFU6MTsJCS8vIHJ4IHdpdGggODAyLjMgaGVhZGVyLCBub3QgODAyLjExIGhlYWRlci4KKwlVSU5UMzIJCUhUQzoxOworCVVJTlQzMgkJUlNTSToxOworCVVJTlQzMgkJTDJQQUQ6MTsKKwlVSU5UMzIJCUFNUERVOjE7CQkvLyBUbyBiZSBtb3ZlZAorCVVJTlQzMgkJRGVjcnlwdGVkOjE7CisJVUlOVDMyCQlQbGNwUnNzaWw6MTsKKwlVSU5UMzIJCUNpcGhlckFsZzoxOworCVVJTlQzMgkJTGFzdEFNU0RVOjE7CisJVUlOVDMyCQlQbGNwU2lnbmFsOjEyOworfQlSWElORk9fU1RSVUMsICpQUlhJTkZPX1NUUlVDLCBSVDI4WFhfUlhEX1NUUlVDLCAqUFJUMjhYWF9SWERfU1RSVUM7CisjZW5kaWYKKworCisvLworLy8gVFhJTkZPCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJc3RydWN0CV9UWElORk9fU1RSVUMgeworCS8vIFdvcmQJMAorCVVJTlQzMgkJVVNCRE1BVHhidXJzdDoxOy8vdXNlZCBPTkxZIGluIFVTQiBidWxrIEFnZ3JlLiBGb3JjZSBVU0IgRE1BIHRyYW5zbWl0IGZyYW1lIGZyb20gY3VycmVudCBzZWxlY3RlZCBlbmRwb2ludAorCVVJTlQzMgkJVVNCRE1BTmV4dFZMRDoxOwkvL3VzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZWdhdGlvbiwgTmV4dFZhbGlkCisJVUlOVDMyCQlyc3YyOjI7ICAvLyBTb2Z0d2FyZSB1c2UuCisJVUlOVDMyCQlTd1VzZUxhc3RSb3VuZDoxOyAvLyBTb2Z0d2FyZSB1c2UuCisJVUlOVDMyCQlRU0VMOjI7CS8vIHNlbGVjdCBvbi1jaGlwIEZJRk8gSUQgZm9yIDJuZC1zdGFnZSBvdXRwdXQgc2NoZWR1bGVyLjA6TUdNVCwgMTpIQ0NBIDI6RURDQQorCVVJTlQzMgkJV0lWOjE7CS8vIFdpcmVsZXNzIEluZm8gVmFsaWQuIDEgaWYgRHJpdmVyIGFscmVhZHkgZmlsbCBXSSwgIG8gaWYgRE1BIG5lZWRzIHRvIGNvcHkgV0kgdG8gY29ycmVjdHBvc2l0aW9uCisJVUlOVDMyCQlyc3Y6ODsKKwlVSU5UMzIJCVVTQkRNQVR4UGt0TGVuOjE2OwkvL3VzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZWdhdGlvbiwgIFRvdGFsIGJ5dGUgY291bnRzIG9mIGFsbCBzdWItZnJhbWUuCit9CVRYSU5GT19TVFJVQywgKlBUWElORk9fU1RSVUM7CisjZWxzZQordHlwZWRlZglzdHJ1Y3QJX1RYSU5GT19TVFJVQyB7CisJLy8gV29yZAkwCisJVUlOVDMyCQlVU0JETUFUeFBrdExlbjoxNjsJLy91c2VkIE9OTFkgaW4gVVNCIGJ1bGsgQWdncmVnYXRpb24sICBUb3RhbCBieXRlIGNvdW50cyBvZiBhbGwgc3ViLWZyYW1lLgorCVVJTlQzMgkJcnN2Ojg7CisJVUlOVDMyCQlXSVY6MTsJLy8gV2lyZWxlc3MgSW5mbyBWYWxpZC4gMSBpZiBEcml2ZXIgYWxyZWFkeSBmaWxsIFdJLCAgbyBpZiBETUEgbmVlZHMgdG8gY29weSBXSSB0byBjb3JyZWN0cG9zaXRpb24KKwlVSU5UMzIJCVFTRUw6MjsJLy8gc2VsZWN0IG9uLWNoaXAgRklGTyBJRCBmb3IgMm5kLXN0YWdlIG91dHB1dCBzY2hlZHVsZXIuMDpNR01ULCAxOkhDQ0EgMjpFRENBCisJVUlOVDMyCQlTd1VzZUxhc3RSb3VuZDoxOyAvLyBTb2Z0d2FyZSB1c2UuCisJVUlOVDMyCQlyc3YyOjI7ICAvLyBTb2Z0d2FyZSB1c2UuCisJVUlOVDMyCQlVU0JETUFOZXh0VkxEOjE7CS8vdXNlZCBPTkxZIGluIFVTQiBidWxrIEFnZ3JlZ2F0aW9uLCBOZXh0VmFsaWQKKwlVSU5UMzIJCVVTQkRNQVR4YnVyc3Q6MTsvL3VzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZS4gRm9yY2UgVVNCIERNQSB0cmFuc21pdCBmcmFtZSBmcm9tIGN1cnJlbnQgc2VsZWN0ZWQgZW5kcG9pbnQKK30JVFhJTkZPX1NUUlVDLCAqUFRYSU5GT19TVFJVQzsKKyNlbmRpZgorCisjZGVmaW5lIFRYSU5GT19TSVpFCQkJCTQKKyNkZWZpbmUgUlhJTkZPX1NJWkUJCQkJNAorI2RlZmluZSBUWFBBRERJTkdfU0laRQkJCTExCisKKy8vCisvLyBNYW5hZ2VtZW50IHJpbmcgYnVmZmVyIGZvcm1hdAorLy8KK3R5cGVkZWYJc3RydWN0CV9NR01UX1NUUlVDCXsKKwlCT09MRUFOCQlWYWxpZDsKKwlQVUNIQVIJCXBCdWZmZXI7CisJVUxPTkcJCUxlbmd0aDsKK30JTUdNVF9TVFJVQywgKlBNR01UX1NUUlVDOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIEVFUFJPTSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjaWZkZWYgUlQzMHh4CisjZGVmaW5lIFJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgb2Zmc2V0LCB2YXIpCQkJCQlcCisJZG8gewkJCQkJCQkJCQkJCQkJXAorCQlSVFVTQlJlYWRFRVBST00ocEFkLCBvZmZzZXQsIChQVUNIQVIpJih2YXIpLCAyKTsJCVwKKwkJaWYoIXBBZC0+YlVzZUVmdXNlKQkJCQkJCQkJCQlcCisJCQl2YXIgPSBsZTJjcHUxNih2YXIpOwkJCQkJCQkJXAorCX13aGlsZSgwKQorCisjZGVmaW5lIFJUMjh4eF9FRVBST01fV1JJVEUxNihwQWQsIG9mZnNldCwgdmFyKQkJCQkJXAorCWRvewkJCQkJCQkJCQkJCQkJCVwKKwkJVVNIT1JUIF90bXBWYXI9dmFyOwkJCQkJCQkJCQlcCisJCWlmKCFwQWQtPmJVc2VFZnVzZSkJCQkJCQkJCQlcCisJCV90bXBWYXIgPSBjcHUybGUxNih2YXIpOwkJCQkJCQkJXAorCQlSVFVTQldyaXRlRUVQUk9NKHBBZCwgb2Zmc2V0LCAoUFVDSEFSKSYoX3RtcFZhciksIDIpOwlcCisJfXdoaWxlKDApCisjZW5kaWYgLy8gUlQzMHh4IC8vCisjaWZuZGVmIFJUMzB4eAorI2RlZmluZSBSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIG9mZnNldCwgdmFyKQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJCQkJCVwKKwkJUlRVU0JSZWFkRUVQUk9NKHBBZCwgb2Zmc2V0LCAoUFVDSEFSKSYodmFyKSwgMik7CQlcCisJCQl2YXIgPSBsZTJjcHUxNih2YXIpOwkJCQkJCQkJXAorCX13aGlsZSgwKQorCisjZGVmaW5lIFJUMjh4eF9FRVBST01fV1JJVEUxNihwQWQsIG9mZnNldCwgdmFyKQkJCQkJXAorCWRvewkJCQkJCQkJCQkJCQkJCVwKKwkJVVNIT1JUIF90bXBWYXI9dmFyOwkJCQkJCQkJCQlcCisJCV90bXBWYXIgPSBjcHUybGUxNih2YXIpOwkJCQkJCQkJXAorCQlSVFVTQldyaXRlRUVQUk9NKHBBZCwgb2Zmc2V0LCAoUFVDSEFSKSYoX3RtcFZhciksIDIpOwlcCisJfXdoaWxlKDApCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFRBU0svVEhSRUFEIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUlQyOFhYX1RBU0tfVEhSRUFEX0lOSVQocEFkLCBTdGF0dXMpCQlcCisJU3RhdHVzID0gQ3JlYXRlVGhyZWFkcyhuZXRfZGV2KTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBGcmltd2FyZSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJUMjhYWF9XUklURV9GSVJNV0FSRShfcEFkLCBfcEZ3SW1hZ2UsIF9Gd0xlbikJCVwKKwlSVFVTQkZpcm13YXJlV3JpdGUoX3BBZCwgX3BGd0ltYWdlLCBfRndMZW4pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFRYIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUlQyOFhYX1NUQVJUX0RFUVVFVUUocEFkLCBRdWVJZHgsIGlycUZsYWdzKQkJCQlcCisJCQl7CQkJCQkJCQkJCQkJCVwKKwkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkRlUXVldWVMb2NrW1F1ZUlkeF0sIGlycUZsYWdzKTsJCVwKKwkJCQlpZiAocEFkLT5EZVF1ZXVlUnVubmluZ1tRdWVJZHhdKQkJCQkJCVwKKwkJCQl7CQkJCQkJCQkJCQkJCQlcCisJCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5EZVF1ZXVlTG9ja1tRdWVJZHhdLCBpcnFGbGFncyk7XAorCQkJCQlwcmludGsoIkRlUXVldWVSdW5uaW5nWyVkXT0gVFJVRSFcbiIsIFF1ZUlkeCk7CQlcCisJCQkJCWNvbnRpbnVlOwkJCQkJCQkJCQkJXAorCQkJCX0JCQkJCQkJCQkJCQkJCVwKKwkJCQllbHNlCQkJCQkJCQkJCQkJCVwKKwkJCQl7CQkJCQkJCQkJCQkJCQlcCisJCQkJCXBBZC0+RGVRdWV1ZVJ1bm5pbmdbUXVlSWR4XSA9IFRSVUU7CQkJCQlcCisJCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5EZVF1ZXVlTG9ja1tRdWVJZHhdLCBpcnFGbGFncyk7XAorCQkJCX0JCQkJCQkJCQkJCQkJCVwKKwkJCX0KKyNkZWZpbmUgUlQyOFhYX1NUT1BfREVRVUVVRShwQWQsIFF1ZUlkeCwgaXJxRmxhZ3MpCQkJCQkJXAorCQkJZG97CQkJCQkJCQkJCQkJCQkJXAorCQkJCVJUTVBfSVJRX0xPQ0soJnBBZC0+RGVRdWV1ZUxvY2tbUXVlSWR4XSwgaXJxRmxhZ3MpOwkJXAorCQkJCXBBZC0+RGVRdWV1ZVJ1bm5pbmdbUXVlSWR4XSA9IEZBTFNFOwkJCQkJXAorCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5EZVF1ZXVlTG9ja1tRdWVJZHhdLCBpcnFGbGFncyk7CVwKKwkJCX13aGlsZSgwKQorCisKKyNkZWZpbmUJUlQyOFhYX0hBU19FTk9VR0hfRlJFRV9ERVNDKHBBZCwgcFR4QmxrLCBmcmVlTnVtLCBwUGFja2V0KSBcCisJCShSVFVTQkZyZWVEZXNjcmlwdG9yUmVxdWVzdChwQWQsIHBUeEJsay0+UXVlSWR4LCAocFR4QmxrLT5Ub3RhbEZyYW1lTGVuICsgR0VUX09TX1BLVF9MRU4ocFBhY2tldCkpKSA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCisjZGVmaW5lIFJUMjhYWF9SRUxFQVNFX0RFU0NfUkVTT1VSQ0UocEFkLCBRdWVJZHgpCQkJXAorCQlkb3t9d2hpbGUoMCkKKworI2RlZmluZSBORUVEX1FVRVVFX0JBQ0tfRk9SX0FHRyhfcEFkLCBfUXVlSWR4LCBfZnJlZU51bSwgX1R4RnJhbWVUeXBlKSAJCVwKKwkJKChfVHhGcmFtZVR5cGUgPT0gVFhfUkFMSU5LX0ZSQU1FKSAmJiAoUlRVU0JOZWVkUXVldWVCYWNrRm9yQWdnKF9wQWQsIF9RdWVJZHgpKSkKKworCisKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfVFgJCVwKKwkJKGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CVwKKwkJIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQgfCBcCisJCSBmUlRNUF9BREFQVEVSX1JBRElPX09GRiB8IGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTKQorCisKKyNkZWZpbmUgSEFMX1dyaXRlU3ViVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgYklzTGFzdCwgcEZyZWVOdW1iZXIpCVwKKwkJCVJ0bXBVU0JfV3JpdGVTdWJUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBiSXNMYXN0LCBwRnJlZU51bWJlcikKKworI2RlZmluZSBIQUxfV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLGJJc0xhc3QsIHBGcmVlTnVtYmVyKQlcCisJCQlSdG1wVVNCX1dyaXRlU2luZ2xlVHhSZXNvdXJjZShwQWQsIHBUeEJsayxiSXNMYXN0LCBwRnJlZU51bWJlcikKKworI2RlZmluZSBIQUxfV3JpdGVGcmFnVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhZ051bSwgcEZyZWVOdW1iZXIpIFwKKwkJCVJ0bXBVU0JfV3JpdGVGcmFnVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhZ051bSwgcEZyZWVOdW1iZXIpCisKKyNkZWZpbmUgSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLGZyYW1lTnVtLCBwRnJlZU51bWJlcikJXAorCQkJUnRtcFVTQl9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsayxmcmFtZU51bSwgcEZyZWVOdW1iZXIpCisKKyNkZWZpbmUgSEFMX0ZpbmFsV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCB0b3RhbE1QRFVTaXplLCBUeElkeCkJXAorCQkJUnRtcFVTQl9GaW5hbFdyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgdG90YWxNUERVU2l6ZSwgVHhJZHgpCisKKyNkZWZpbmUgSEFMX0xhc3RUeElkeChwQWQsIFF1ZUlkeCxUeElkeCkgXAorCQkJLypSdG1wVVNCRGF0YUxhc3RUeElkeChwQWQsIFF1ZUlkeCxUeElkeCkqLworCisjZGVmaW5lIEhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIFF1ZUlkeCkJXAorCQkJUnRtcFVTQkRhdGFLaWNrT3V0KHBBZCwgcFR4QmxrLCBRdWVJZHgpCisKKworI2RlZmluZSBIQUxfS2lja091dE1nbXRUeChwQWQsIFF1ZUlkeCwgcFBhY2tldCwgcFNyY0J1ZlZBLCBTcmNCdWZMZW4pCVwKKwkJCVJ0bXBVU0JNZ210S2lja091dChwQWQsIFF1ZUlkeCwgcFBhY2tldCwgcFNyY0J1ZlZBLCBTcmNCdWZMZW4pCisKKyNkZWZpbmUgSEFMX0tpY2tPdXROdWxsRnJhbWVUeChfcEFkLCBfUXVlSWR4LCBfcE51bGxGcmFtZSwgX2ZyYW1lTGVuKQlcCisJCQlSdG1wVVNCTnVsbEZyYW1lS2lja091dChfcEFkLCBfUXVlSWR4LCBfcE51bGxGcmFtZSwgX2ZyYW1lTGVuKQorCisjZGVmaW5lIFJUTVBfUEtUX1RBSUxfUEFERElORyAJMTEgLy8gMyhtYXggNCBieXRlIHBhZGRpbmcpICsgNCAobGFzdCBwYWNrZXQgcGFkZGluZykgKyA0IChNYXhCdWxrT3V0c2l6ZSBhbGlnbiBwYWRkaW5nKQorCitleHRlcm4gVUNIQVIgRXBUb1F1ZXVlWzZdOworCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgR0VUX1RYUklOR19GUkVFTk8oX3BBZCwgX1F1ZUlkeCkgCShfUXVlSWR4KSAvLyhfcEFkLT5UeFJpbmdbX1F1ZUlkeF0uVHhTd0ZyZWVJZHgpCisjZGVmaW5lIEdFVF9NR01UUklOR19GUkVFTk8oX3BBZCkgCQkJKF9wQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4KQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFJYIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8vI2RlZmluZSBSVDI4WFhfUlhfRVJST1JfQ0hFQ0sJCQkJUlRNUENoZWNrUnhXSQorCisjZGVmaW5lIFJUMjhYWF9SVl9BTExfQlVGX0VORChiQnVsa1JlY2VpdmUpCQlcCisJLyogV2UgcmV0dXJuIFNUQVRVU19NT1JFX1BST0NFU1NJTkdfUkVRVUlSRUQgc28gdGhhdCB0aGUgY29tcGxldGlvbiAqLwlcCisJLyogcm91dGluZSAoSW9mQ29tcGxldGVSZXF1ZXN0KSB3aWxsIHN0b3Agd29ya2luZyBvbiB0aGUgaXJwLiAqLwkJXAorCWlmIChiQnVsa1JlY2VpdmUgPT0gVFJVRSkJUlRVU0JCdWxrUmVjZWl2ZShwQWQpOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIEFTSUMgUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLworLy8gcmVzZXQgTUFDIG9mIGEgc3RhdGlvbiBlbnRyeSB0byAweEZGRkZGRkZGRkZGRgorI2RlZmluZSBSVDI4WFhfU1RBX0VOVFJZX01BQ19SRVNFVChwQWQsIFdjaWQpCQkJCQlcCisJewlSVF9TRVRfQVNJQ19XQ0lECVNldEFzaWNXY2lkOwkJCQkJCVwKKwkJU2V0QXNpY1djaWQuV0NJRCA9IFdjaWQ7CQkJCQkJCQlcCisJCVNldEFzaWNXY2lkLlNldFRpZCA9IDB4ZmZmZmZmZmY7CQkJCQkJXAorCQlTZXRBc2ljV2NpZC5EZWxldGVUaWQgPSAweGZmZmZmZmZmOwkJCQkJCVwKKwkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfU0VUX0FTSUNfV0NJRCwgCVwKKwkJCQkmU2V0QXNpY1djaWQsIHNpemVvZihSVF9TRVRfQVNJQ19XQ0lEKSk7CX0KKworLy8gYWRkIHRoaXMgZW50cnkgaW50byBBU0lDIFJYIFdDSUQgc2VhcmNoIHRhYmxlCisjZGVmaW5lIFJUMjhYWF9TVEFfRU5UUllfQUREKHBBZCwgcEVudHJ5KQkJCQkJCQlcCisJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfU0VUX0NMSUVOVF9NQUNfRU5UUlksIAlcCisJCQkJCQkJcEVudHJ5LCBzaXplb2YoTUFDX1RBQkxFX0VOVFJZKSk7CisKKy8vIGFkZCBieSBqb2hubGksIGZpeCAiaW5faW50ZXJydXB0IiBlcnJvciB3aGVuIGNhbGwgIk1hY1RhYmxlRGVsZXRlRW50cnkiIGluIFJ4IHRhc2tsZXQKKy8vIFNldCBNQUMgcmVnaXN0ZXIgdmFsdWUgYWNjb3JkaW5nIG9wZXJhdGlvbiBtb2RlCisjZGVmaW5lIFJUMjhYWF9VUERBVEVfUFJPVEVDVChwQWQpCVwKKyAJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfVVBEQVRFX1BST1RFQ1QsIE5VTEwsIDApOworLy8gZW5kIGpvaG5saQorCisvLyByZW1vdmUgUGFpci13aXNlIGtleSBtYXRlcmlhbCBmcm9tIEFTSUMKKy8vIHlldCBpbXBsZW1lbnQKKyNkZWZpbmUgUlQyOFhYX1NUQV9FTlRSWV9LRVlfREVMKHBBZCwgQnNzSWR4LCBXY2lkKQorCisvLyBhZGQgQ2xpZW50IHNlY3VyaXR5IGluZm9ybWF0aW9uIGludG8gQVNJQyBXQ0lEIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorI2RlZmluZSBSVDI4WFhfU1RBX1NFQ1VSSVRZX0lORk9fQUREKHBBZCwgYXBpZHgsIEtleUlELCBwRW50cnkpCQkJCQkJXAorCXsJUlQyOFhYX1NUQV9FTlRSWV9NQUNfUkVTRVQocEFkLCBwRW50cnktPkFpZCk7CQkJCQkJCQlcCisJCWlmIChwRW50cnktPkFpZCA+PSAxKSB7CQkJCQkJCQkJCQkJCQlcCisJCQlSVF9TRVRfQVNJQ19XQ0lEX0FUVFJJCVNldEFzaWNXY2lkQXR0cmk7CQkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZEF0dHJpLldDSUQgPSBwRW50cnktPkFpZDsJCQkJCQkJCQlcCisJCQlpZiAoKHBFbnRyeS0+QXV0aE1vZGUgPD0gTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCkgJiYJCQkJXAorCQkJCShwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSkJCQkJXAorCQkJewkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlTZXRBc2ljV2NpZEF0dHJpLkNpcGhlciA9IHBBZC0+U2hhcmVkS2V5W2FwaWR4XVtLZXlJRF0uQ2lwaGVyQWxnOwlcCisJCQl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJZWxzZSBpZiAocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQkJCQkJXAorCQkJewkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlTZXRBc2ljV2NpZEF0dHJpLkNpcGhlciA9IHBBZC0+U2hhcmVkS2V5W2FwaWR4XVtLZXlJRF0uQ2lwaGVyQWxnOwlcCisJCQl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJZWxzZSBTZXRBc2ljV2NpZEF0dHJpLkNpcGhlciA9IDA7CQkJCQkJCQkJCVwKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImFpZCBjaXBoZXIgPSAlbGRcbiIsU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIpKTsgICAgICAgXAorCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfU0VUX0FTSUNfV0NJRF9DSVBIRVIsIAkJCVwKKwkJCQkJCQkmU2V0QXNpY1djaWRBdHRyaSwgc2l6ZW9mKFJUX1NFVF9BU0lDX1dDSURfQVRUUkkpKTsgfSB9CisKKy8vIEluc2VydCB0aGUgQkEgYml0bWFwIHRvIEFTSUMgZm9yIHRoZSBXY2lkIGVudHJ5CisjZGVmaW5lIFJUMjhYWF9BRERfQkFfU0VTU0lPTl9UT19BU0lDKF9wQWQsIF9BaWQsIF9USUQpCQkJCQlcCisJCWRvewkJCQkJCQkJCQkJCQkJCQlcCisJCQlSVF9TRVRfQVNJQ19XQ0lECVNldEFzaWNXY2lkOwkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5XQ0lEID0gKF9BaWQpOwkJCQkJCQkJCVwKKwkJCVNldEFzaWNXY2lkLlNldFRpZCA9ICgweDEwMDAwPDwoX1RJRCkpOwkJCQkJCVwKKwkJCVNldEFzaWNXY2lkLkRlbGV0ZVRpZCA9IDB4ZmZmZmZmZmY7CQkJCQkJCVwKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKChfcEFkKSwgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSUQsICZTZXRBc2ljV2NpZCwgc2l6ZW9mKFJUX1NFVF9BU0lDX1dDSUQpKTsJXAorCQl9d2hpbGUoMCkKKworLy8gUmVtb3ZlIHRoZSBCQSBiaXRtYXAgZnJvbSBBU0lDIGZvciB0aGUgV2NpZCBlbnRyeQorI2RlZmluZSBSVDI4WFhfREVMX0JBX1NFU1NJT05fRlJPTV9BU0lDKF9wQWQsIF9XY2lkLCBfVElEKQkJCQlcCisJCWRvewkJCQkJCQkJCQkJCQkJCQlcCisJCQlSVF9TRVRfQVNJQ19XQ0lECVNldEFzaWNXY2lkOwkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5XQ0lEID0gKF9XY2lkKTsJCQkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5TZXRUaWQgPSAoMHhmZmZmZmZmZik7CQkJCQkJCVwKKwkJCVNldEFzaWNXY2lkLkRlbGV0ZVRpZCA9ICgweDEwMDAwPDwoX1RJRCkgKTsJCQkJCVwKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKChfcEFkKSwgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSUQsICZTZXRBc2ljV2NpZCwgc2l6ZW9mKFJUX1NFVF9BU0lDX1dDSUQpKTsJXAorCQl9d2hpbGUoMCkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBQQ0kvVVNCIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUlQyOFhYX0hBTkRMRV9ERVZfQVNTSUdOKGhhbmRsZSwgZGV2X3ApCQkJXAorCSgoUE9TX0NPT0tJRSloYW5kbGUpLT5wVXNiX0RldiA9IGRldl9wOworCisvLyBubyB1c2UKKyNkZWZpbmUgUlQyOFhYX1VOTUFQKCkKKyNkZWZpbmUgUlQyOFhYX0lSUV9SRVFVRVNUKG5ldF9kZXYpCisjZGVmaW5lIFJUMjhYWF9JUlFfUkVMRUFTRShuZXRfZGV2KQorI2RlZmluZSBSVDI4WFhfSVJRX0lOSVQocEFkKQorI2RlZmluZSBSVDI4WFhfSVJRX0VOQUJMRShwQWQpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0gTUxNRSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKQkJCVJUVVNCTWxtZVVwKHBBZCkKKworI2RlZmluZSBSVDI4WFhfTUxNRV9QUkVfU0FOSVRZX0NIRUNLKHBBZCkJCQkJCQkJCVwKKwl7CWlmICgocEFkLT5Db21tb25DZmcuYkhhcmR3YXJlUmFkaW8gPT0gVFJVRSkgJiYgCQkJCQlcCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkgJiYJCVwKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSkgewlcCisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9DSEVDS19HUElPLCBOVUxMLCAwKTsgfSB9CisKKyNkZWZpbmUgUlQyOFhYX01MTUVfU1RBX1FVSUNLX1JTUF9XQUtFX1VQKHBBZCkJXAorCXsJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUUtFUklPRElDX0VYRUNVVCwgTlVMTCwgMCk7CVwKKwkJUlRVU0JNbG1lVXAocEFkKTsgfQorCisjZGVmaW5lIFJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkKQlcCisJCSAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFU0VUX0NPTkYsIDAsIE5VTEwpOwlcCisJCSAgICAgICAgUlRVU0JNbG1lVXAocEFkKTsKKworI2RlZmluZSBSVDI4WFhfSEFORExFX0NPVU5URVJfTUVBU1VSRShfcEFkLCBfcEVudHJ5KQkJXAorCXsJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQoX3BBZCwgQ01EVEhSRUFEXzgwMl8xMV9DT1VOVEVSX01FQVNVUkUsIF9wRW50cnksIHNpemVvZihNQUNfVEFCTEVfRU5UUlkpKTsJXAorCQlSVFVTQk1sbWVVcChfcEFkKTsJCQkJCQkJCQlcCisJfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFBvd2VyIFNhdmUgUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSVDI4WFhfUFNfUE9MTF9FTlFVRVVFKHBBZCkJCQkJCQlcCisJewlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX1BTUE9MTCk7CVwKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOyB9CisKKyNkZWZpbmUgUlQyOHh4X0NISVBfTkFNRSAgICAgICAgICAgICJSVDI4NzAiCisjZGVmaW5lIFVTQl9DWUNfQ0ZHICAgICAgICAgICAgICAgICAweDAyYTQKKyNkZWZpbmUgTlRfU1VDQ0VTUyhzdGF0dXMpCQkJKCgoc3RhdHVzKSA+IDApID8gKDEpOigwKSkKKyNkZWZpbmUgSW50ZXJsb2NrZWRJbmNyZW1lbnQgCSAJYXRvbWljX2luYworI2RlZmluZSBOZGlzSW50ZXJsb2NrZWRJbmNyZW1lbnQgCWF0b21pY19pbmMKKyNkZWZpbmUgSW50ZXJsb2NrZWREZWNyZW1lbnQJCWF0b21pY19kZWMKKyNkZWZpbmUgTmRpc0ludGVybG9ja2VkRGVjcmVtZW50IAlhdG9taWNfZGVjCisjZGVmaW5lIEludGVybG9ja2VkRXhjaGFuZ2UJCQlhdG9taWNfc2V0CisvLyNkZWZpbmUgTmRpc01TZW5kQ29tcGxldGUJCQlSVE1QX1NlbmRDb21wbGV0ZQorI2RlZmluZSBOZGlzTUNhbmNlbFRpbWVyCQkJUlRNUENhbmNlbFRpbWVyCisjZGVmaW5lIE5kaXNBbGxvY01lbW9yeShfcHRyLCBfc2l6ZSwgX2ZsYWcpCVwKKwkJCQkJCQkJCWRve19wdHIgPSBrbWFsbG9jKChfc2l6ZSksKF9mbGFnKSk7fXdoaWxlKDApCisjZGVmaW5lIE5kaXNGcmVlTWVtb3J5KGEsIGIsIGMpIAlrZnJlZSgoYSkpCisjZGVmaW5lIE5kaXNNU2xlZXAJCQkJCVJUTVB1c2VjRGVsYXkJCS8qIHVuaXQ6IG1pY3Jvc2Vjb25kICovCisKKworI2RlZmluZSBVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQJCTAKKyNkZWZpbmUgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4JCTAKKyNkZWZpbmUgVVNCRF9TSE9SVF9UUkFOU0ZFUl9PSwkJCTAKKyNkZWZpbmUgUFVSQgkJCXB1cmJiX3QKKworI2RlZmluZSBSVFVTQl9GUkVFX1VSQihwVXJiKQl1c2JfZnJlZV91cmIocFVyYikKKworLy8jdW5kZWYgTWxtZUFsbG9jYXRlTWVtb3J5CisvLyN1bmRlZiBNbG1lRnJlZU1lbW9yeQorCit0eXBlZGVmIHN0cnVjdCB1c2JfZGV2aWNlCSogUFVTQl9ERVY7CisKKy8qIE1BQ1JPIGZvciBsaW51eCB1c2IgKi8KK3R5cGVkZWYgc3RydWN0IHVyYiAqcHVyYmJfdDsKK3R5cGVkZWYgc3RydWN0IHVzYl9jdHJscmVxdWVzdCBkZXZjdHJscmVxdWVzdDsKKyNkZWZpbmUgUElSUAkJUFZPSUQKKyNkZWZpbmUgUE1ETAkJUFZPSUQKKyNkZWZpbmUgTkRJU19PSUQJVUlOVAorI2lmbmRlZiBVU0JfU1RfTk9FUlJPUgorI2RlZmluZSBVU0JfU1RfTk9FUlJPUiAgICAgMAorI2VuZGlmCisKKy8vIHZlbmRvci1zcGVjaWZpYyBjb250cm9sIG9wZXJhdGlvbnMKKyNkZWZpbmUgQ09OVFJPTF9USU1FT1VUX0pJRkZJRVMgKCAoMTAwICogSFopIC8gMTAwMCkKKyNkZWZpbmUgVU5MSU5LX1RJTUVPVVRfTVMJCTMKKworLyogdW5saW5rIHVyYgkqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsNykKKyNkZWZpbmUgUlRVU0JfVU5MSU5LX1VSQihwVXJiKQkJdXNiX2tpbGxfdXJiKHBVcmIpCisjZWxzZQorI2RlZmluZSBSVFVTQl9VTkxJTktfVVJCKHBVcmIpCQl1c2JfdW5saW5rX3VyYihwVXJiKQorI2VuZGlmCisKKy8vIFByb3RvdHlwZXMgb2YgY29tcGxldGlvbiBmdW51Yy4KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyNkZWZpbmUgUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHB1cmIsIHB0X3JlZ3MpICAgIFJUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZShwdXJiKQorI2RlZmluZSBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUocFVyYiwgcHRfcmVncykgICAgUlRVU0JCdWxrT3V0TUxNRVBhY2tldENvbXBsZXRlKHBVcmIpCisjZGVmaW5lIFJUVVNCQnVsa091dE51bGxGcmFtZUNvbXBsZXRlKHBVcmIsIHB0X3JlZ3MpICAgICBSVFVTQkJ1bGtPdXROdWxsRnJhbWVDb21wbGV0ZShwVXJiKQorI2RlZmluZSBSVFVTQkJ1bGtPdXRSVFNGcmFtZUNvbXBsZXRlKHBVcmIsIHB0X3JlZ3MpICAgICAgUlRVU0JCdWxrT3V0UlRTRnJhbWVDb21wbGV0ZShwVXJiKQorI2RlZmluZSBSVFVTQkJ1bGtPdXRQc1BvbGxDb21wbGV0ZShwVXJiLCBwdF9yZWdzKSAgICAgICAgUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUocFVyYikKKyNkZWZpbmUgUlRVU0JCdWxrUnhDb21wbGV0ZShwVXJiLCBwdF9yZWdzKSAgICAgICAgICAgICAgIFJUVVNCQnVsa1J4Q29tcGxldGUocFVyYikKKyNlbmRpZgorCisKK1ZPSUQgUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHB1cmJiX3QgcHVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOworVk9JRCBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7CitWT0lEIFJUVVNCQnVsa091dE51bGxGcmFtZUNvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOworVk9JRCBSVFVTQkJ1bGtPdXRSVFNGcmFtZUNvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOworVk9JRCBSVFVTQkJ1bGtPdXRQc1BvbGxDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKK1ZPSUQgUlRVU0JCdWxrUnhDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKKworCisjZGVmaW5lIFJUVVNCTWxtZVVwKHBBZCkJICAgICAgICBcCit7CQkJCQkJCQkgICAgXAorCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsJXAorCWlmKHBPYmotPk1MTUVUaHJfcGlkPjApCQkgICAgXAorICAgICAgICB1cCgmKHBBZC0+bWxtZV9zZW1hcGhvcmUpKTsgXAorfQorCisjZGVmaW5lIFJUVVNCQ01EVXAocEFkKQkgICAgICAgICAgICAgICAgXAorewkJCQkJCQkJCSAgICBcCisJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOwlcCisJaWYocE9iai0+UlRVU0JDbWRUaHJfcGlkPjApCQkgICAgXAorCSAgICB1cCgmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7IFwKK30KKworCitzdGF0aWMgaW5saW5lIE5ESVNfU1RBVFVTIFJUTVBBbGxvY2F0ZU1lbW9yeSgKKwlPVVQgUFZPSUQgKnB0ciwKKwlJTiBzaXplX3Qgc2l6ZSkKK3sKKwkqcHRyID0ga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKwlpZigqcHRyKQorCQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwllbHNlCisJCXJldHVybiBORElTX1NUQVRVU19SRVNPVVJDRVM7Cit9CisKKy8qIHJ0bXAuaCAqLworI2RlZmluZQlCRUFDT05fUklOR19TSVpFICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCAgICAgICAweDQwCisjZGVmaW5lIERFVklDRV9WRU5ET1JfUkVRVUVTVF9JTiAgICAgICAgMHhjMAorI2RlZmluZSBJTlRFUkZBQ0VfVkVORE9SX1JFUVVFU1RfT1VUICAgIDB4NDEKKyNkZWZpbmUgSU5URVJGQUNFX1ZFTkRPUl9SRVFVRVNUX0lOICAgICAweGMxCisjZGVmaW5lIE1HTVRQSVBFSURYCQkJCQkJMAkvLyBFUDYgaXMgaGlnaGVzdCBwcmlvcml0eQorCisjZGVmaW5lIEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHCQkJCTB4ODAKKworI2RlZmluZSBSVFVTQl9TRVRfQlVMS19GTEFHKF9NLCBfRikJCQkJKChfTSktPkJ1bGtGbGFncyB8PSAoX0YpKQorI2RlZmluZSBSVFVTQl9DTEVBUl9CVUxLX0ZMQUcoX00sIF9GKQkJCSgoX00pLT5CdWxrRmxhZ3MgJj0gfihfRikpCisjZGVmaW5lIFJUVVNCX1RFU1RfQlVMS19GTEFHKF9NLCBfRikJCQkoKChfTSktPkJ1bGtGbGFncyAmIChfRikpICE9IDApCisKKyNkZWZpbmUgRW5xdWV1ZUNtZChjbWRxLCBjbWRxZWxtdCkJCVwKK3sJCQkJCQkJCQkJXAorCWlmIChjbWRxLT5zaXplID09IDApCQkJCVwKKwkJY21kcS0+aGVhZCA9IGNtZHFlbG10OwkJCVwKKwllbHNlCQkJCQkJCQlcCisJCWNtZHEtPnRhaWwtPm5leHQgPSBjbWRxZWxtdDsJXAorCWNtZHEtPnRhaWwgPSBjbWRxZWxtdDsJCQkJXAorCWNtZHFlbG10LT5uZXh0ID0gTlVMTDsJCQkJXAorCWNtZHEtPnNpemUrKzsJCQkJCQlcCit9CisKK3R5cGVkZWYgc3RydWN0ICAgX1JUX1NFVF9BU0lDX1dDSUQgeworCVVMT05HIFdDSUQ7ICAgICAgICAgIC8vIG1lY2hhbmlzbSBmb3IgcmVrZXlpbmc6IDA6ZGlzYWJsZSwgMTogdGltZS1iYXNlZCwgMjogcGFja2V0LWJhc2VkCisJVUxPTkcgU2V0VGlkOyAgICAgICAgLy8gdGltZS1iYXNlZDogc2Vjb25kcywgcGFja2V0LWJhc2VkOiBraWxvLXBhY2tldHMKKwlVTE9ORyBEZWxldGVUaWQ7ICAgICAgICAvLyB0aW1lLWJhc2VkOiBzZWNvbmRzLCBwYWNrZXQtYmFzZWQ6IGtpbG8tcGFja2V0cworfSBSVF9TRVRfQVNJQ19XQ0lELCpQUlRfU0VUX0FTSUNfV0NJRDsKKwordHlwZWRlZiBzdHJ1Y3QgICBfUlRfU0VUX0FTSUNfV0NJRF9BVFRSSSB7CisJVUxPTkcJV0NJRDsgICAgICAgICAgLy8gbWVjaGFuaXNtIGZvciByZWtleWluZzogMDpkaXNhYmxlLCAxOiB0aW1lLWJhc2VkLCAyOiBwYWNrZXQtYmFzZWQKKwlVTE9ORwlDaXBoZXI7ICAgICAgICAvLyBBU0lDIENpcGhlciBkZWZpbml0aW9uCisJVUNIQVIJQWRkcltFVEhfTEVOR1RIX09GX0FERFJFU1NdOworfSBSVF9TRVRfQVNJQ19XQ0lEX0FUVFJJLCpQUlRfU0VUX0FTSUNfV0NJRF9BVFRSSTsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfTUVNT1JZX1NUUlVDVCB7CisJUFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY1ZhOyAgICAvL1BvaW50ZXIgdG8gdGhlIGJhc2UgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5CisJc3RydWN0IF9NTE1FX01FTU9SWV9TVFJVQ1QgICAgICAqTmV4dDsgICAgICAvL1BvaW50ZXIgdG8gdGhlIG5leHQgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5Cit9ICAgTUxNRV9NRU1PUllfU1RSVUNULCAqUE1MTUVfTUVNT1JZX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgIF9NTE1FX01FTU9SWV9IQU5ETEVSIHsKKwlCT09MRUFOICAgICAgICAgICAgICAgICBNZW1SdW5uaW5nOyAgICAgICAgIC8vVGhlIGZsYWcgb2YgdGhlIE1sbWUgbWVtb3J5IGhhbmRsZXIncyBzdGF0dXMKKwlVSU5UICAgICAgICAgICAgICAgICAgICBNZW1vcnlDb3VudDsgICAgICAgIC8vVG90YWwgbm9ucGFnZWQgc3lzdGVtLXNwYWNlIG1lbW9yeSBub3Qgc2l6ZQorCVVJTlQgICAgICAgICAgICAgICAgICAgIEluVXNlQ291bnQ7ICAgICAgICAgLy9Ob25wYWdlZCBzeXN0ZW0tc3BhY2UgbWVtb3J5IGluIHVzZWQgY291bnRzCisJVUlOVCAgICAgICAgICAgICAgICAgICAgVW5Vc2VDb3VudDsgICAgICAgICAvL05vbnBhZ2VkIHN5c3RlbS1zcGFjZSBtZW1vcnkgYXZhaWxhYmxlIGNvdW50cworCUlOVCAgICAgICAgICAgICAgICAgICAgUGVuZGluZ0NvdW50OyAgICAgICAvL05vbnBhZ2VkIHN5c3RlbS1zcGFjZSBtZW1vcnkgZm9yIGZyZWUgY291bnRzCisJUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgcEluVXNlSGVhZDsgICAgICAgICAvL1BvaW50ZXIgdG8gdGhlIGZpcnN0IG5vbnBhZWQgbWVtb3J5IG5vdCB1c2VkCisJUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgcEluVXNlVGFpbDsgICAgICAgICAvL1BvaW50ZXIgdG8gdGhlIGxhc3Qgbm9ucGFnZWQgbWVtb3J5IG5vdCB1c2VkCisJUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgcFVuVXNlSGVhZDsgICAgICAgICAvL1BvaW50ZXIgdG8gdGhlIGZpcnN0IG5vbnBhZ2VkIG1lbW9yeSBpbiB1c2VkCisJUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgcFVuVXNlVGFpbDsgICAgICAgICAvL1BvaW50ZXIgdG8gdGhlIGxhc3Qgbm9ucGFnZWQgbWVtb3J5IGluIHVzZWQKKwlQVUxPTkcgICAgICAgICAgICAgICAgICBNZW1GcmVlUGVuZGluZ1tNQVhfTUxNRV9IQU5ETEVSX01FTU9SWV07ICAgLy9hbiBhcnJheSB0byBrZWVwIHBlbmRpbmcgZnJlZS1tZW1vcnkncyBwb2ludGVyICgzMmJpdHMpCit9ICAgTUxNRV9NRU1PUllfSEFORExFUiwgKlBNTE1FX01FTU9SWV9IQU5ETEVSOworCit0eXBlZGVmCXN0cnVjdCBfQ21kUUVsbXQJeworCVVJTlQJCQkJY29tbWFuZDsKKwlQVk9JRAkJCQlidWZmZXI7CisJVUxPTkcJCQkJYnVmZmVybGVuZ3RoOworCUJPT0xFQU4JCQkJQ21kRnJvbU5kaXM7CisJQk9PTEVBTgkJCQlTZXRPcGVyYXRpb247CisJc3RydWN0IF9DbWRRRWxtdAkqbmV4dDsKK30JQ21kUUVsbXQsICpQQ21kUUVsbXQ7CisKK3R5cGVkZWYJc3RydWN0CV9DbWRRCXsKKwlVSU5UCQlzaXplOworCUNtZFFFbG10CSpoZWFkOworCUNtZFFFbG10CSp0YWlsOworCVVJTlQzMgkJQ21kUVN0YXRlOworfUNtZFEsICpQQ21kUTsKKworLy8KKy8vIEZvciBXUEEgU1VQUExJQ0FOVDogV0lSRUxFU1MgRVhUIHN1cHBvcnQgd2lyZWxlc3MgZXZlbnRzOiB2MTQgb3IgbmV3ZXIKKy8vCisjaWYgV0lSRUxFU1NfRVhUID49IDE0CisvLyNkZWZpbmUgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAgMQorI2VuZGlmCisKKy8qIG9pZC5oICovCisvLyBDaXBoZXIgc3VpdGUgdHlwZSBmb3IgbWl4ZWQgbW9kZSBncm91cCBjaXBoZXIsIFA4MDIuMTFpLTIwMDQKK3R5cGVkZWYgZW51bSBfUlRfODAyXzExX0NJUEhFUl9TVUlURV9UWVBFIHsKKwlDaXBoZXJfVHlwZV9OT05FLAorCUNpcGhlcl9UeXBlX1dFUDQwLAorCUNpcGhlcl9UeXBlX1RLSVAsCisJQ2lwaGVyX1R5cGVfUlNWRCwKKwlDaXBoZXJfVHlwZV9DQ01QLAorCUNpcGhlcl9UeXBlX1dFUDEwNAorfSBSVF84MDJfMTFfQ0lQSEVSX1NVSVRFX1RZUEUsICpQUlRfODAyXzExX0NJUEhFUl9TVUlURV9UWVBFOworCisvL0NNRFRIUkVBRF9NVUxUSV9SRUFEX01BQworLy9DTURUSFJFQURfTVVMVElfV1JJVEVfTUFDCisvL0NNRFRIUkVBRF9WRU5ET1JfRUVQUk9NX1JFQUQKKy8vQ01EVEhSRUFEX1ZFTkRPUl9FRVBST01fV1JJVEUKK3R5cGVkZWYJc3RydWN0CV9DTURIYW5kbGVyX1RMVgl7CisJVVNIT1JUCQlPZmZzZXQ7CisJVVNIT1JUCQlMZW5ndGg7CisJVUNIQVIJCURhdGFGaXJzdDsKK30JQ01ESGFuZGxlcl9UTFYsICpQQ01ESGFuZGxlcl9UTFY7CisKKy8vIE5ldyBmb3IgTWVldGluZ0hvdXNlIEFwaSBzdXBwb3J0CisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDEwMQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9VTlBMVUcgICAgICAgICAgICAgICAgICAgICAweDBENzMwMTAyCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX1NXSVRDSF9GVU5DVElPTiAgICAgICAgICAgIDB4MEQ3MzAxMDMJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9NVUxUSV9XUklURV9NQUMgICAgICAgICAgICAgICAgICAgMHgwRDczMDEwNwkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX01VTFRJX1JFQURfTUFDICAgICAgICAgICAgICAgICAgICAweDBENzMwMTA4CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX0VFUFJPTV9XUklURSAgICAgICAgICAgICAgIDB4MEQ3MzAxMEEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfRUVQUk9NX1JFQUQgICAgICAgICAgICAgICAgMHgwRDczMDEwQgkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9FTlRFUl9URVNUTU9ERSAgICAgICAgICAgICAweDBENzMwMTBDCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX0VYSVRfVEVTVE1PREUgICAgICAgICAgICAgIDB4MEQ3MzAxMEQJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfV1JJVEVfQkJQICAgICAgICAgICAgICAgICAgMHgwRDczMDExOQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9SRUFEX0JCUCAgICAgICAgICAgICAgICAgICAweDBENzMwMTE4CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX1dSSVRFX1JGICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMUEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfRkxJUF9JUSAgICAgICAgICAgICAgICAgICAgMHgwRDczMDExRAkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUICAgICAgICAgICAgICAgICAgICAweDBENzMwMjEwCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfUkVTRVRfQlVMS19JTiAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMTEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9TRVRfUFNNX0JJVF9TQVZFICAgICAgICAgICAgICAgICAgMHgwRDczMDIxMgkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1NFVF9SQURJTyAgICAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjE0CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVVBEQVRFX1RYX1JBVEUgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMTYJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF84MDJfMTFfQUREX0tFWV9XRVAgICAgICAgICAgICAgICAgMHgwRDczMDIxOAkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1JFU0VUX0ZST01fRVJST1IgICAgICAgICAgICAgICAgICAweDBENzMwMjFBCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfTElOS19ET1dOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMUIJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9SRVNFVF9GUk9NX05ESVMgICAgICAgICAgICAgICAgICAgMHgwRDczMDIxQwkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX0NIRUNLX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjE1CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfRk9SQ0VfV0FLRV9VUCAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMjIJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9TRVRfQlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIyNQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSUQgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjI2CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfU0VUX0FTSUNfV0NJRF9DSVBIRVIgICAgICAgICAgICAgIDB4MEQ3MzAyMjcJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9RS0VSSU9ESUNfRVhFQ1VUICAgICAgICAgICAgICAgICAgMHgwRDczMDIzRAkvLyBjbWQKKyNkZWZpbmUgUlRfQ01EX1NFVF9LRVlfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjI4ICAvLyBjbWQKKyNkZWZpbmUgUlRfQ01EX1NFVF9SWF9XQ0lEX1RBQkxFICAgICAgICAgICAgICAgICAgICAweDBENzMwMjI5ICAvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1NFVF9DTElFTlRfTUFDX0VOVFJZICAgICAgICAgICAgICAweDBENzMwMjNFCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfODAyXzExX1FVRVJZX0hBUkRXQVJFX1JFR0lTVEVSICAgIDB4MEQ3MTAxMDUJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF84MDJfMTFfU0VUX1BIWV9NT0RFICAgICAgICAgICAgICAgMHgwRDc5MDEwQwkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEXzgwMl8xMV9TRVRfU1RBX0NPTkZJRyAgICAgICAgICAgICAweDBENzkwMTExCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfODAyXzExX1NFVF9QUkVBTUJMRSAgICAgICAgICAgICAgIDB4MEQ3OTAxMDEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF84MDJfMTFfQ09VTlRFUl9NRUFTVVJFCQkJMHgwRDc5MDEwMgkvLyBjbWQKKy8vIGFkZCBieSBqb2hubGksIGZpeCAiaW5faW50ZXJydXB0IiBlcnJvciB3aGVuIGNhbGwgIk1hY1RhYmxlRGVsZXRlRW50cnkiIGluIFJ4IHRhc2tsZXQKKyNkZWZpbmUgQ01EVEhSRUFEX1VQREFURV9QUk9URUNUCQkJCQkweDBENzkwMTAzCS8vIGNtZAorLy8gZW5kIGpvaG5saQorCisjZGVmaW5lIFdQQTFBS01CSVQJICAgIDB4MDEKKyNkZWZpbmUgV1BBMkFLTUJJVAkgICAgMHgwMgorI2RlZmluZSBXUEExUFNLQUtNQklUICAgMHgwNAorI2RlZmluZSBXUEEyUFNLQUtNQklUICAgMHgwOAorI2RlZmluZSBUS0lQQklUICAgICAgICAgMHgwMQorI2RlZmluZSBDQ01QQklUICAgICAgICAgMHgwMgorCisKKyNkZWZpbmUgUlQyOFhYX1NUQV9GT1JDRV9XQUtFVVAocEFkLCBiRnJvbVR4KSBcCisgICAgUlQyOHh4VXNiU3RhQXNpY0ZvcmNlV2FrZXVwKHBBZCwgYkZyb21UeCk7CisKKyNkZWZpbmUgUlQyOFhYX1NUQV9TTEVFUF9USEVOX0FVVE9fV0FLRVVQKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCkgXAorICAgIFJUMjh4eFVzYlN0YUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCk7CisKKyNkZWZpbmUgUlQyOFhYX01MTUVfUkFESU9fT04ocEFkKSBcCisgICAgUlQyOHh4VXNiTWxtZVJhZGlvT24ocEFkKTsKKworI2RlZmluZSBSVDI4WFhfTUxNRV9SQURJT19PRkYocEFkKSBcCisgICAgUlQyOHh4VXNiTWxtZVJhZGlvT0ZGKHBBZCk7CisKKyNlbmRpZiAvL19fUlQyODcwX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydDI4eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnQyOHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzN2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnQyOHh4LmgKQEAgLTAsMCArMSwyNzI1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0Mjh4eC5oCisKKwlBYnN0cmFjdDoKKwlSVDI4eHggQVNJQyByZWxhdGVkIGRlZmluaXRpb24gJiBzdHJ1Y3R1cmVzCisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCSAgV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgSmFuIExlZSAgICAgICAgICAgSmFuLTMtMjAwNiAgICAgY3JlYXRlZCBmb3IgUlQyODYwYworKi8KKworI2lmbmRlZglfX1JUMjhYWF9IX18KKyNkZWZpbmUJX19SVDI4WFhfSF9fCisKKworLy8KKy8vIFBDSSByZWdpc3RlcnMgLSBiYXNlIGFkZHJlc3MgMHgwMDAwCisvLworI2RlZmluZSBQQ0lfQ0ZHCQkJMHgwMDAwCisjZGVmaW5lIFBDSV9FRUNUUkwJCQkweDAwMDQKKyNkZWZpbmUgUENJX01DVUNUUkwJCQkweDAwMDgKKworI2RlZmluZQlPUFRfMTQJCQkweDExNAorCit0eXBlZGVmIGludAkJCQlOVFNUQVRVUzsKKyNkZWZpbmUJUkVUUllfTElNSVQgICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MJCQkJMHgwMAorI2RlZmluZSBTVEFUVVNfVU5TVUNDRVNTRlVMIAkJMHgwMQorCisvLworLy8gU0NIL0RNQSByZWdpc3RlcnMgLSBiYXNlIGFkZHJlc3MgMHgwMjAwCisvLworLy8gSU5UX1NPVVJDRV9DU1I6IEludGVycnVwdCBzb3VyY2UgcmVnaXN0ZXIuIFdyaXRlIG9uZSB0byBjbGVhciBjb3JyZXNwb25kaW5nIGJpdAorLy8KKyNkZWZpbmUgRE1BX0NTUjAgICAgICAweDIwMAorI2RlZmluZSBJTlRfU09VUkNFX0NTUiAgICAgIDB4MjAwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSU5UX1NPVVJDRV9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAJOjE0OworCQlVSU5UMzIgICAgICAgCVR4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlSeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJR1BUaW1lcjoxOworCQlVSU5UMzIgICAgICAgCUF1dG9XYWtldXA6MTsvL2JpdDE0CisJCVVJTlQzMiAgICAgICAJVFhGaWZvU3RhdHVzSW50OjE7Ly9GSUZPIFN0YXRpc3RpY3MgaXMgZnVsbCwgc3cgc2hvdWxkIHJlYWQgMHgxNzFjCisJCVVJTlQzMiAgICAgICAJUHJlVEJUVDoxOworCQlVSU5UMzIgICAgICAgCVRCVFRJbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlSeFR4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlNQ1VDb21tYW5kSU5UOjE7CisJCVVJTlQzMiAgICAgICAJTWdtdERtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlIY2NhRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjM0RtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzJEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMxRG1hRG9uZToxOworCQlVSU5UMzIJCUFjMERtYURvbmU6MTsKKwkJVUlOVDMyCQlSeERvbmU6MTsKKwkJVUlOVDMyCQlUeERlbGF5SU5UOjE7CS8vZGVsYXllZCBpbnRlcnJ1cHQsIG5vdCBpbnRlcnJ1cHQgdW50aWwgc2V2ZXJhbCBpbnQgb3IgdGltZSBsaW1pdCBoaXQKKwkJVUlOVDMyCQlSeERlbGF5SU5UOjE7IC8vZGVhbHllZCBpbnRlcnJ1cHQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUlOVF9TT1VSQ0VfQ1NSX1NUUlVDLCAqUElOVF9TT1VSQ0VfQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0lOVF9TT1VSQ0VfQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJ4RGVsYXlJTlQ6MTsKKwkJVUlOVDMyCQlUeERlbGF5SU5UOjE7CisJCVVJTlQzMgkJUnhEb25lOjE7CisJCVVJTlQzMgkJQWMwRG1hRG9uZToxOy8vNAorCQlVSU5UMzIgICAgICAgCUFjMURtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzJEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMzRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUhjY2FEbWFEb25lOjE7IC8vIGJpdDcKKwkJVUlOVDMyICAgICAgIAlNZ210RG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCU1DVUNvbW1hbmRJTlQ6MTsvL2JpdCA5CisJCVVJTlQzMiAgICAgICAJUnhUeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJVEJUVEludDoxOworCQlVSU5UMzIgICAgICAgCVByZVRCVFQ6MTsKKwkJVUlOVDMyICAgICAgIAlUWEZpZm9TdGF0dXNJbnQ6MTsvL0ZJRk8gU3RhdGlzdGljcyBpcyBmdWxsLCBzdyBzaG91bGQgcmVhZCAweDE3MWMKKwkJVUlOVDMyICAgICAgIAlBdXRvV2FrZXVwOjE7Ly9iaXQxNAorCQlVSU5UMzIgICAgICAgCUdQVGltZXI6MTsKKwkJVUlOVDMyICAgICAgIAlSeENvaGVyZW50OjE7Ly9iaXQxNgorCQlVSU5UMzIgICAgICAgCVR4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAk6MTQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfSBJTlRfU09VUkNFX0NTUl9TVFJVQywgKlBJTlRfU09VUkNFX0NTUl9TVFJVQzsKKyNlbmRpZgorCisvLworLy8gSU5UX01BU0tfQ1NSOiAgIEludGVycnVwdCBNQVNLIHJlZ2lzdGVyLiAgIDE6IHRoZSBpbnRlcnJ1cHQgaXMgbWFzayBPRkYKKy8vCisjZGVmaW5lIElOVF9NQVNLX0NTUiAgICAgICAgMHgyMDQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9JTlRfTUFTS19DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAJVHhDb2hlcmVudDoxOworCQlVSU5UMzIgICAgICAgCVJ4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAk6MjA7CisJCVVJTlQzMiAgICAgICAJTUNVQ29tbWFuZElOVDoxOworCQlVSU5UMzIgICAgICAgCU1nbXREbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJSGNjYURtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzNEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMyRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjMURtYURvbmU6MTsKKwkJVUlOVDMyCQlBYzBEbWFEb25lOjE7CisJCVVJTlQzMgkJUnhEb25lOjE7CisJCVVJTlQzMgkJVHhEZWxheToxOworCQlVSU5UMzIJCVJYRGVsYXlfSU5UX01TSzoxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK31JTlRfTUFTS19DU1JfU1RSVUMsICpQSU5UX01BU0tfQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0lOVF9NQVNLX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSWERlbGF5X0lOVF9NU0s6MTsKKwkJVUlOVDMyCQlUeERlbGF5OjE7CisJCVVJTlQzMgkJUnhEb25lOjE7CisJCVVJTlQzMgkJQWMwRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjMURtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzJEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMzRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUhjY2FEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJTWdtdERtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlNQ1VDb21tYW5kSU5UOjE7CisJCVVJTlQzMiAgICAgICAJOjIwOworCQlVSU5UMzIgICAgICAgCVJ4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlUeENvaGVyZW50OjE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfSBJTlRfTUFTS19DU1JfU1RSVUMsICpQSU5UX01BU0tfQ1NSX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFdQRE1BX0dMT19DRkcgCTB4MjA4CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfV1BETUFfR0xPX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIAlIRFJfU0VHX0xFTjoxNjsKKwkJVUlOVDMyICAgICAgIAlSWEhkclNjYXRlcjo4OworCQlVSU5UMzIgICAgICAgCUJpZ0VuZGlhbjoxOworCQlVSU5UMzIgICAgICAgCUVuVFhXcml0ZUJhY2tERE9ORToxOworCQlVSU5UMzIgICAgICAgCVdQRE1BQnVyc3RTSVpFOjI7CisJCVVJTlQzMgkJUnhETUFCdXN5OjE7CisJCVVJTlQzMgkJRW5hYmxlUnhETUE6MTsKKwkJVUlOVDMyCQlUeERNQUJ1c3k6MTsKKwkJVUlOVDMyCQlFbmFibGVUeERNQToxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK31XUERNQV9HTE9fQ0ZHX1NUUlVDLCAqUFdQRE1BX0dMT19DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfV1BETUFfR0xPX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlFbmFibGVUeERNQToxOworCQlVSU5UMzIJCVR4RE1BQnVzeToxOworCQlVSU5UMzIJCUVuYWJsZVJ4RE1BOjE7CisJCVVJTlQzMgkJUnhETUFCdXN5OjE7CisJCVVJTlQzMiAgICAgICAJV1BETUFCdXJzdFNJWkU6MjsKKwkJVUlOVDMyICAgICAgIAlFblRYV3JpdGVCYWNrRERPTkU6MTsKKwkJVUlOVDMyICAgICAgIAlCaWdFbmRpYW46MTsKKwkJVUlOVDMyICAgICAgIAlSWEhkclNjYXRlcjo4OworCQlVSU5UMzIgICAgICAgCUhEUl9TRUdfTEVOOjE2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30gV1BETUFfR0xPX0NGR19TVFJVQywgKlBXUERNQV9HTE9fQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFdQRE1BX1JTVF9JRFggCTB4MjBjCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfV1BETUFfUlNUX0lEWF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIAk6MTU7CisJCVVJTlQzMiAgICAgICAJUlNUX0RSWF9JRFgwOjE7CisJCVVJTlQzMiAgICAgICAJcnN2OjEwOworCQlVSU5UMzIgICAgICAgCVJTVF9EVFhfSURYNToxOworCQlVSU5UMzIgICAgICAgCVJTVF9EVFhfSURYNDoxOworCQlVSU5UMzIJCVJTVF9EVFhfSURYMzoxOworCQlVSU5UMzIJCVJTVF9EVFhfSURYMjoxOworCQlVSU5UMzIJCVJTVF9EVFhfSURYMToxOworCQlVSU5UMzIJCVJTVF9EVFhfSURYMDoxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK31XUERNQV9SU1RfSURYX1NUUlVDLCAqUFdQRE1BX1JTVF9JRFhfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfV1BETUFfUlNUX0lEWF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDA6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDE6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDI6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDM6MTsKKwkJVUlOVDMyICAgICAgIAlSU1RfRFRYX0lEWDQ6MTsKKwkJVUlOVDMyICAgICAgIAlSU1RfRFRYX0lEWDU6MTsKKwkJVUlOVDMyICAgICAgIAlyc3Y6MTA7CisJCVVJTlQzMiAgICAgICAJUlNUX0RSWF9JRFgwOjE7CisJCVVJTlQzMiAgICAgICAJOjE1OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30gV1BETUFfUlNUX0lEWF9TVFJVQywgKlBXUERNQV9SU1RfSURYX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIERFTEFZX0lOVF9DRkcgIDB4MDIxMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0RFTEFZX0lOVF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAJVFhETFlfSU5UX0VOOjE7CisJCVVJTlQzMiAgICAgICAJVFhNQVhfUElOVDo3OworCQlVSU5UMzIgICAgICAgCVRYTUFYX1BUSU1FOjg7CisJCVVJTlQzMiAgICAgICAJUlhETFlfSU5UX0VOOjE7CisJCVVJTlQzMiAgICAgICAJUlhNQVhfUElOVDo3OworCQlVSU5UMzIJCVJYTUFYX1BUSU1FOjg7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfURFTEFZX0lOVF9DRkdfU1RSVUMsICpQREVMQVlfSU5UX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9ERUxBWV9JTlRfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJYTUFYX1BUSU1FOjg7CisJCVVJTlQzMiAgICAgICAJUlhNQVhfUElOVDo3OworCQlVSU5UMzIgICAgICAgCVJYRExZX0lOVF9FTjoxOworCQlVSU5UMzIgICAgICAgCVRYTUFYX1BUSU1FOjg7CisJCVVJTlQzMiAgICAgICAJVFhNQVhfUElOVDo3OworCQlVSU5UMzIgICAgICAgCVRYRExZX0lOVF9FTjoxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30gREVMQVlfSU5UX0NGR19TVFJVQywgKlBERUxBWV9JTlRfQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFdNTV9BSUZTTl9DRkcgICAweDAyMTQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9BSUZTTl9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIFJzdjoxNjsKKwkgICAgVUlOVDMyICAgQWlmc24zOjQ7ICAgICAgIC8vIGZvciBBQ19WTworCSAgICBVSU5UMzIgICBBaWZzbjI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEFpZnNuMTo0OyAgICAgICAvLyBmb3IgQUNfQksKKwkgICAgVUlOVDMyICAgQWlmc24wOjQ7ICAgICAgIC8vIGZvciBBQ19CRQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUlGU05fQ1NSX1NUUlVDLCAqUEFJRlNOX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9BSUZTTl9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIEFpZnNuMDo0OyAgICAgICAvLyBmb3IgQUNfQkUKKwkgICAgVUlOVDMyICAgQWlmc24xOjQ7ICAgICAgIC8vIGZvciBBQ19CSworCSAgICBVSU5UMzIgICBBaWZzbjI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEFpZnNuMzo0OyAgICAgICAvLyBmb3IgQUNfVk8KKwkgICAgVUlOVDMyICAgUnN2OjE2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUlGU05fQ1NSX1NUUlVDLCAqUEFJRlNOX0NTUl9TVFJVQzsKKyNlbmRpZgorLy8KKy8vIENXTUlOX0NTUjogQ1dtaW4gZm9yIGVhY2ggRURDQSBBQworLy8KKyNkZWZpbmUgV01NX0NXTUlOX0NGRyAgIDB4MDIxOAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0NXTUlOX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgUnN2OjE2OworCSAgICBVSU5UMzIgICBDd21pbjM6NDsgICAgICAgLy8gZm9yIEFDX1ZPCisJICAgIFVJTlQzMiAgIEN3bWluMjo0OyAgICAgICAvLyBmb3IgQUNfVkkKKwkgICAgVUlOVDMyICAgQ3dtaW4xOjQ7ICAgICAgIC8vIGZvciBBQ19CSworCSAgICBVSU5UMzIgICBDd21pbjA6NDsgICAgICAgLy8gZm9yIEFDX0JFCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlDV01JTl9DU1JfU1RSVUMsICpQQ1dNSU5fQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0NXTUlOX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgQ3dtaW4wOjQ7ICAgICAgIC8vIGZvciBBQ19CRQorCSAgICBVSU5UMzIgICBDd21pbjE6NDsgICAgICAgLy8gZm9yIEFDX0JLCisJICAgIFVJTlQzMiAgIEN3bWluMjo0OyAgICAgICAvLyBmb3IgQUNfVkkKKwkgICAgVUlOVDMyICAgQ3dtaW4zOjQ7ICAgICAgIC8vIGZvciBBQ19WTworCSAgICBVSU5UMzIgICBSc3Y6MTY7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlDV01JTl9DU1JfU1RSVUMsICpQQ1dNSU5fQ1NSX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBDV01BWF9DU1I6IENXbWluIGZvciBlYWNoIEVEQ0EgQUMKKy8vCisjZGVmaW5lIFdNTV9DV01BWF9DRkcgICAweDAyMWMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9DV01BWF9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIFJzdjoxNjsKKwkgICAgVUlOVDMyICAgQ3dtYXgzOjQ7ICAgICAgIC8vIGZvciBBQ19WTworCSAgICBVSU5UMzIgICBDd21heDI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEN3bWF4MTo0OyAgICAgICAvLyBmb3IgQUNfQksKKwkgICAgVUlOVDMyICAgQ3dtYXgwOjQ7ICAgICAgIC8vIGZvciBBQ19CRQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQ1dNQVhfQ1NSX1NUUlVDLCAqUENXTUFYX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9DV01BWF9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIEN3bWF4MDo0OyAgICAgICAvLyBmb3IgQUNfQkUKKwkgICAgVUlOVDMyICAgQ3dtYXgxOjQ7ICAgICAgIC8vIGZvciBBQ19CSworCSAgICBVSU5UMzIgICBDd21heDI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEN3bWF4Mzo0OyAgICAgICAvLyBmb3IgQUNfVk8KKwkgICAgVUlOVDMyICAgUnN2OjE2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQ1dNQVhfQ1NSX1NUUlVDLCAqUENXTUFYX0NTUl9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBBQ19UWE9QX0NTUjA6IEFDX0JLL0FDX0JFIFRYT1AgcmVnaXN0ZXIKKy8vCisjZGVmaW5lIFdNTV9UWE9QMF9DRkcgICAgMHgwMjIwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfQUNfVFhPUF9DU1IwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFjMVR4b3A7ICAgICAgICAvLyBmb3IgQUNfQkUsIGluIHVuaXQgb2YgMzJ1cworCSAgICBVU0hPUlQgIEFjMFR4b3A7ICAgICAgICAvLyBmb3IgQUNfQkssIGluIHVuaXQgb2YgMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUNfVFhPUF9DU1IwX1NUUlVDLCAqUEFDX1RYT1BfQ1NSMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9BQ19UWE9QX0NTUjBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWMwVHhvcDsgICAgICAgIC8vIGZvciBBQ19CSywgaW4gdW5pdCBvZiAzMnVzCisJICAgIFVTSE9SVCAgQWMxVHhvcDsgICAgICAgIC8vIGZvciBBQ19CRSwgaW4gdW5pdCBvZiAzMnVzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBQ19UWE9QX0NTUjBfU1RSVUMsICpQQUNfVFhPUF9DU1IwX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBBQ19UWE9QX0NTUjE6IEFDX1ZPL0FDX1ZJIFRYT1AgcmVnaXN0ZXIKKy8vCisjZGVmaW5lIFdNTV9UWE9QMV9DRkcgICAgMHgwMjI0CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfQUNfVFhPUF9DU1IxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFjM1R4b3A7ICAgICAgICAvLyBmb3IgQUNfVk8sIGluIHVuaXQgb2YgMzJ1cworCSAgICBVU0hPUlQgIEFjMlR4b3A7ICAgICAgICAvLyBmb3IgQUNfVkksIGluIHVuaXQgb2YgMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUNfVFhPUF9DU1IxX1NUUlVDLCAqUEFDX1RYT1BfQ1NSMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9BQ19UWE9QX0NTUjFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWMyVHhvcDsgICAgICAgIC8vIGZvciBBQ19WSSwgaW4gdW5pdCBvZiAzMnVzCisJICAgIFVTSE9SVCAgQWMzVHhvcDsgICAgICAgIC8vIGZvciBBQ19WTywgaW4gdW5pdCBvZiAzMnVzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBQ19UWE9QX0NTUjFfU1RSVUMsICpQQUNfVFhPUF9DU1IxX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFJJTkdSRUdfRElGRgkJCTB4MTAKKyNkZWZpbmUgR1BJT19DVFJMX0NGRyAgICAweDAyMjgJLy9NQUNfQ1NSMTMKKyNkZWZpbmUgTUNVX0NNRF9DRkcgICAgMHgwMjJjCisjZGVmaW5lIFRYX0JBU0VfUFRSMCAgICAgMHgwMjMwCS8vQUNfQksgYmFzZSBhZGRyZXNzCisjZGVmaW5lIFRYX01BWF9DTlQwICAgICAgMHgwMjM0CisjZGVmaW5lIFRYX0NUWF9JRFgwICAgICAgIDB4MDIzOAorI2RlZmluZSBUWF9EVFhfSURYMCAgICAgIDB4MDIzYworI2RlZmluZSBUWF9CQVNFX1BUUjEgICAgIDB4MDI0MCAJLy9BQ19CRSBiYXNlIGFkZHJlc3MKKyNkZWZpbmUgVFhfTUFYX0NOVDEgICAgICAweDAyNDQKKyNkZWZpbmUgVFhfQ1RYX0lEWDEgICAgICAgMHgwMjQ4CisjZGVmaW5lIFRYX0RUWF9JRFgxICAgICAgMHgwMjRjCisjZGVmaW5lIFRYX0JBU0VfUFRSMiAgICAgMHgwMjUwIAkvL0FDX1ZJIGJhc2UgYWRkcmVzcworI2RlZmluZSBUWF9NQVhfQ05UMiAgICAgIDB4MDI1NAorI2RlZmluZSBUWF9DVFhfSURYMiAgICAgICAweDAyNTgKKyNkZWZpbmUgVFhfRFRYX0lEWDIgICAgICAweDAyNWMKKyNkZWZpbmUgVFhfQkFTRV9QVFIzICAgICAweDAyNjAgCS8vQUNfVk8gYmFzZSBhZGRyZXNzCisjZGVmaW5lIFRYX01BWF9DTlQzICAgICAgMHgwMjY0CisjZGVmaW5lIFRYX0NUWF9JRFgzICAgICAgIDB4MDI2OAorI2RlZmluZSBUWF9EVFhfSURYMyAgICAgIDB4MDI2YworI2RlZmluZSBUWF9CQVNFX1BUUjQgICAgIDB4MDI3MCAJLy9IQ0NBIGJhc2UgYWRkcmVzcworI2RlZmluZSBUWF9NQVhfQ05UNCAgICAgIDB4MDI3NAorI2RlZmluZSBUWF9DVFhfSURYNCAgICAgICAweDAyNzgKKyNkZWZpbmUgVFhfRFRYX0lEWDQgICAgICAweDAyN2MKKyNkZWZpbmUgVFhfQkFTRV9QVFI1ICAgICAweDAyODAgCS8vTUdNVCBiYXNlIGFkZHJlc3MKKyNkZWZpbmUgIFRYX01BWF9DTlQ1ICAgICAweDAyODQKKyNkZWZpbmUgVFhfQ1RYX0lEWDUgICAgICAgMHgwMjg4CisjZGVmaW5lIFRYX0RUWF9JRFg1ICAgICAgMHgwMjhjCisjZGVmaW5lIFRYX01HTVRNQVhfQ05UICAgICAgVFhfTUFYX0NOVDUKKyNkZWZpbmUgVFhfTUdNVENUWF9JRFggICAgICAgVFhfQ1RYX0lEWDUKKyNkZWZpbmUgVFhfTUdNVERUWF9JRFggICAgICBUWF9EVFhfSURYNQorI2RlZmluZSBSWF9CQVNFX1BUUiAgICAgMHgwMjkwIAkvL1JYIGJhc2UgYWRkcmVzcworI2RlZmluZSBSWF9NQVhfQ05UICAgICAgMHgwMjk0CisjZGVmaW5lIFJYX0NSWF9JRFggICAgICAgMHgwMjk4CisjZGVmaW5lIFJYX0RSWF9JRFggICAgICAweDAyOWMKKyNkZWZpbmUgVVNCX0RNQV9DRkcgICAgICAweDAyYTAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9VU0JfRE1BX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICBUeEJ1c3k6MTsgICAJLy9VU0IgRE1BIFRYIEZTTSBidXN5IC4gZGVidWcgb25seQorCSAgICBVSU5UMzIgIFJ4QnVzeToxOyAgICAgICAgLy9VU0IgRE1BIFJYIEZTTSBidXN5IC4gZGVidWcgb25seQorCSAgICBVSU5UMzIgIEVwb3V0VmFsaWQ6NjsgICAgICAgIC8vT1VUIGVuZHBvaW50IGRhdGEgdmFsaWQuIGRlYnVnIG9ubHkKKwkgICAgVUlOVDMyICBUeEJ1bGtFbjoxOyAgICAgICAgLy9FbmFibGUgVVNCIERNQSBUeAorCSAgICBVSU5UMzIgIFJ4QnVsa0VuOjE7ICAgICAgICAvL0VuYWJsZSBVU0IgRE1BIFJ4CisJICAgIFVJTlQzMiAgUnhCdWxrQWdnRW46MTsgICAgICAgIC8vRW5hYmxlIFJ4IEJ1bGsgQWdncmVnYXRpb24KKwkgICAgVUlOVDMyICBUeG9wSGFsdDoxOyAgICAgICAgLy9IYWx0IFRYT1AgY291bnQgZG93biB3aGVuIFRYIGJ1ZmZlciBpcyBmdWxsLgorCSAgICBVSU5UMzIgIFR4Q2xlYXI6MTsgICAgICAgIC8vQ2xlYXIgVVNCIERNQSBUWCBwYXRoCisJICAgIFVJTlQzMiAgcnN2OjI7CisJICAgIFVJTlQzMiAgcGh5Y2xlYXI6MTsgICAgICAgIAkJLy9waHkgd2F0Y2ggZG9nIGVuYWJsZS4gd3JpdGUgMQorCSAgICBVSU5UMzIgIFJ4QnVsa0FnZ0xtdDo4OyAgICAgICAgLy9SeCBCdWxrIEFnZ3JlZ2F0aW9uIExpbWl0ICBpbiB1bml0IG9mIDEwMjQgYnl0ZXMKKwkgICAgVUlOVDMyICBSeEJ1bGtBZ2dUT3V0Ojg7ICAgICAgICAvL1J4IEJ1bGsgQWdncmVnYXRpb24gVGltZU91dCAgaW4gdW5pdCBvZiAzM25zCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlVU0JfRE1BX0NGR19TVFJVQywgKlBVU0JfRE1BX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9VU0JfRE1BX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICBSeEJ1bGtBZ2dUT3V0Ojg7ICAgICAgICAvL1J4IEJ1bGsgQWdncmVnYXRpb24gVGltZU91dCAgaW4gdW5pdCBvZiAzM25zCisJICAgIFVJTlQzMiAgUnhCdWxrQWdnTG10Ojg7ICAgICAgICAvL1J4IEJ1bGsgQWdncmVnYXRpb24gTGltaXQgIGluIHVuaXQgb2YgMjU2IGJ5dGVzCisJICAgIFVJTlQzMiAgcGh5Y2xlYXI6MTsgICAgICAgIAkJLy9waHkgd2F0Y2ggZG9nIGVuYWJsZS4gd3JpdGUgMQorCSAgICBVSU5UMzIgIHJzdjoyOworCSAgICBVSU5UMzIgIFR4Q2xlYXI6MTsgICAgICAgIC8vQ2xlYXIgVVNCIERNQSBUWCBwYXRoCisJICAgIFVJTlQzMiAgVHhvcEhhbHQ6MTsgICAgICAgIC8vSGFsdCBUWE9QIGNvdW50IGRvd24gd2hlbiBUWCBidWZmZXIgaXMgZnVsbC4KKwkgICAgVUlOVDMyICBSeEJ1bGtBZ2dFbjoxOyAgICAgICAgLy9FbmFibGUgUnggQnVsayBBZ2dyZWdhdGlvbgorCSAgICBVSU5UMzIgIFJ4QnVsa0VuOjE7ICAgICAgICAvL0VuYWJsZSBVU0IgRE1BIFJ4CisJICAgIFVJTlQzMiAgVHhCdWxrRW46MTsgICAgICAgIC8vRW5hYmxlIFVTQiBETUEgVHgKKwkgICAgVUlOVDMyICBFcG91dFZhbGlkOjY7ICAgICAgICAvL09VVCBlbmRwb2ludCBkYXRhIHZhbGlkCisJICAgIFVJTlQzMiAgUnhCdXN5OjE7ICAgICAgICAvL1VTQiBETUEgUlggRlNNIGJ1c3kKKwkgICAgVUlOVDMyICBUeEJ1c3k6MTsgICAJLy9VU0IgRE1BIFRYIEZTTSBidXN5CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlVU0JfRE1BX0NGR19TVFJVQywgKlBVU0JfRE1BX0NGR19TVFJVQzsKKyNlbmRpZgorCisvLworLy8gIDMgIFBCRiAgcmVnaXN0ZXJzCisvLworLy8KKy8vIE1vc3QgYXJlIGZvciBkZWJ1Zy4gRHJpdmVyIGRvZXNuJ3QgdG91Y2ggUEJGIHJlZ2lzdGVyLgorI2RlZmluZSAJUEJGX1NZU19DVFJMIAkgMHgwNDAwCisjZGVmaW5lICAgICBQQkZfQ0ZHICAgICAgICAgICAgICAgICAweDA0MDgKKyNkZWZpbmUgCVBCRl9NQVhfUENOVCAJIDB4MDQwQworI2RlZmluZSAJUEJGX0NUUkwJIAkweDA0MTAKKyNkZWZpbmUgCVBCRl9JTlRfU1RBCSAweDA0MTQKKyNkZWZpbmUgCVBCRl9JTlRfRU5BCSAweDA0MTgKKyNkZWZpbmUgCVRYUlhRX1BDTlQgIAkgMHgwNDM4CisjZGVmaW5lIAlQQkZfREJHIAkgCSAweDA0M2MKKyNkZWZpbmUgICAgIFBCRl9DQVBfQ1RSTCAgICAgMHgwNDQwCisKKworLy8gZUZ1c2UgcmVnaXN0ZXJzCisjZGVmaW5lIEVGVVNFX0NUUkwgICAgICAgICAgICAgIDB4MDU4MAorI2RlZmluZSBFRlVTRV9EQVRBMCAgICAgICAgICAgICAweDA1OTAKKyNkZWZpbmUgRUZVU0VfREFUQTEgICAgICAgICAgICAgMHgwNTk0CisjZGVmaW5lIEVGVVNFX0RBVEEyICAgICAgICAgICAgIDB4MDU5OAorI2RlZmluZSBFRlVTRV9EQVRBMyAgICAgICAgICAgICAweDA1OWMKKyNkZWZpbmUgRUZVU0VfVVNBR0VfTUFQX1NUQVJUICAgMHgyZDAKKyNkZWZpbmUgRUZVU0VfVVNBR0VfTUFQX0VORCAgICAgMHgyZmMKKyNkZWZpbmUgRUZVU0VfVEFHICAgICAgICAgICAgICAgMHgyZmUKKyNkZWZpbmUgRUZVU0VfVVNBR0VfTUFQX1NJWkUgICAgNDUKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0VGVVNFX0NUUkxfU1RSVUMgeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAgICAgIFNFTF9FRlVTRToxOworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fS0lDSzoxOworCQlVSU5UMzIgICAgICAgICAgICBSRVNFUlZFRDo0OworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fQUlOOjEwOworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fTERPX09OX1RJTUU6MjsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX0xET19PRkZfVElNRTo2OworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fTU9ERToyOworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fQU9VVDo2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRUZVU0VfQ1RSTF9TVFJVQywgKlBFRlVTRV9DVFJMX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0VGVVNFX0NUUkxfU1RSVUMgeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9BT1VUOjY7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9NT0RFOjI7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9MRE9fT0ZGX1RJTUU6NjsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX0xET19PTl9USU1FOjI7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9BSU46MTA7CisJCVVJTlQzMiAgICAgICAgICAgIFJFU0VSVkVEOjQ7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9LSUNLOjE7CisJCVVJTlQzMiAgICAgICAgICAgIFNFTF9FRlVTRToxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRUZVU0VfQ1RSTF9TVFJVQywgKlBFRlVTRV9DVFJMX1NUUlVDOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworI2RlZmluZSBMRE9fQ0ZHMCAJCQkJMHgwNWQ0CisjZGVmaW5lIEdQSU9fU1dJVENICQkJCTB4MDVkYworCisvLworLy8gIDQgIE1BQyAgcmVnaXN0ZXJzCisvLworLy8KKy8vICA0LjEgTUFDIFNZU1RFTSAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKG9mZnNldDoweDEwMDApCisvLworI2RlZmluZSBNQUNfQ1NSMCAgICAgICAgICAgIDB4MTAwMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0FTSUNfVkVSX0lEX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFTSUNWZXI7ICAgICAgICAvLyB2ZXJzaW9uIDogMjg2MAorCSAgICBVU0hPUlQgIEFTSUNSZXY7ICAgICAgICAvLyByZXZlcnNpb24gIDogMAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQVNJQ19WRVJfSURfU1RSVUMsICpQQVNJQ19WRVJfSURfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQVNJQ19WRVJfSURfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQVNJQ1JldjsgICAgICAgIC8vIHJldmVyc2lvbiAgOiAwCisJICAgIFVTSE9SVCAgQVNJQ1ZlcjsgICAgICAgIC8vIHZlcnNpb24gOiAyODYwCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBU0lDX1ZFUl9JRF9TVFJVQywgKlBBU0lDX1ZFUl9JRF9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBNQUNfU1lTX0NUUkwgICAgICAgICAgICAweDEwMDQJCS8vTUFDX0NTUjEKKyNkZWZpbmUgTUFDX0FERFJfRFcwICAgICAgICAgICAgCQkweDEwMDgJCS8vIE1BQyBBRERSIERXMAorI2RlZmluZSBNQUNfQUREUl9EVzEgICAgICAgICAgIAkJIDB4MTAwYwkJLy8gTUFDIEFERFIgRFcxCisvLworLy8gTUFDX0NTUjI6IFNUQSBNQUMgcmVnaXN0ZXIgMAorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9NQUNfRFcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJQnl0ZTM7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDMKKwkJVUNIQVIJCUJ5dGUyOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAyCisJCVVDSEFSCQlCeXRlMTsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMQorCQlVQ0hBUgkJQnl0ZTA7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1BQ19EVzBfU1RSVUMsICpQTUFDX0RXMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9NQUNfRFcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJQnl0ZTA7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDAKKwkJVUNIQVIJCUJ5dGUxOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAxCisJCVVDSEFSCQlCeXRlMjsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMgorCQlVQ0hBUgkJQnl0ZTM7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDMKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1BQ19EVzBfU1RSVUMsICpQTUFDX0RXMF9TVFJVQzsKKyNlbmRpZgorCisvLworLy8gTUFDX0NTUjM6IFNUQSBNQUMgcmVnaXN0ZXIgMQorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9NQUNfRFcxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJUnN2ZDE7CisJCVVDSEFSCQlVMk1lTWFzazsKKwkJVUNIQVIJCUJ5dGU1OwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSA1CisJCVVDSEFSCQlCeXRlNDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTUFDX0RXMV9TVFJVQywgKlBNQUNfRFcxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX01BQ19EVzFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCQlCeXRlNDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNAorCQlVQ0hBUgkJQnl0ZTU7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDUKKwkJVUNIQVIJCVUyTWVNYXNrOworCQlVQ0hBUgkJUnN2ZDE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNQUNfRFcxX1NUUlVDLCAqUE1BQ19EVzFfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBNQUNfQlNTSURfRFcwICAgICAgICAgICAgCQkweDEwMTAJCS8vIE1BQyBCU1NJRCBEVzAKKyNkZWZpbmUgTUFDX0JTU0lEX0RXMSAgICAgICAgICAgIAkJMHgxMDE0CQkvLyBNQUMgQlNTSUQgRFcxCisKKy8vCisvLyBNQUNfQ1NSNTogQlNTSUQgcmVnaXN0ZXIgMQorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9NQUNfQ1NSNV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVVNIT1JUCQlSc3ZkOjExOworCQlVU0hPUlQJCU1Cc3NCY25OdW06MzsKKwkJVVNIT1JUCQlCc3NJZE1vZGU6MjsgLy8gMDogb25lIEJTU0lELCAxMDogNCBCU1NJRCwgIDAxOiAyIEJTU0lEICwgMTE6IDhCU1NJRAorCQlVQ0hBUgkJQnl0ZTU7CQkgLy8gQlNTSUQgYnl0ZSA1CisJCVVDSEFSCQlCeXRlNDsJCSAvLyBCU1NJRCBieXRlIDQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1BQ19DU1I1X1NUUlVDLCAqUE1BQ19DU1I1X1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX01BQ19DU1I1X1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJQnl0ZTQ7CQkgLy8gQlNTSUQgYnl0ZSA0CisJCVVDSEFSCQlCeXRlNTsJCSAvLyBCU1NJRCBieXRlIDUKKwkJVVNIT1JUICAgICAgCUJzc0lkTWFzazoyOyAvLyAwOiBvbmUgQlNTSUQsIDEwOiA0IEJTU0lELCAgMDE6IDIgQlNTSUQgLCAxMTogOEJTU0lECisJCVVTSE9SVAkJTUJzc0Jjbk51bTozOworCQlVU0hPUlQJCVJzdmQ6MTE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNQUNfQ1NSNV9TVFJVQywgKlBNQUNfQ1NSNV9TVFJVQzsKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9MRU5fQ0ZHICAgICAgICAgICAgICAweDEwMTgJCS8vIHJ0Mjg2MGIgbWF4IDE2ayBieXRlcy4gYml0MTI6MTMgTWF4aW11bSBQU0RVIGxlbmd0aCAocG93ZXIgZmFjdG9yKSAwOjJeMTMsIDE6Ml4xNCwgMjoyXjE1LCAzOjJeMTYKKyNkZWZpbmUgQkJQX0NTUl9DRkcgICAgICAgICAgICAJCTB4MTAxYwkJLy8KKy8vCisvLyBCQlBfQ1NSX0NGRzogQkJQIHNlcmlhbCBjb250cm9sIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0JCUF9DU1JfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCToxMjsKKwkJVUlOVDMyCQlCQlBfUldfTU9ERToxOwkJLy8gMDogdXNlIHNlcmlhbCBtb2RlICAxOnBhcmFsbGVsCisJCVVJTlQzMgkJQkJQX1BBUl9EVVI6MTsJCSAgICAvLyAwOiA0IE1BQyBjbG9jayBjeWNsZXMgIDE6IDggTUFDIGNsb2NrIGN5Y2xlcworCQlVSU5UMzIJCUJ1c3k6MTsJCQkJLy8gMTogQVNJQyBpcyBidXN5IGV4ZWN1dGUgQkJQIHByb2dyYW1taW5nLgorCQlVSU5UMzIJCWZSZWFkOjE7CQkgICAgLy8gMDogV3JpdGUJQkJQLCAxOglSZWFkIEJCUAorCQlVSU5UMzIJCVJlZ051bTo4OwkJCS8vIFNlbGVjdGVkCUJCUAlyZWdpc3RlcgorCQlVSU5UMzIJCVZhbHVlOjg7CQkJLy8gUmVnaXN0ZXIJdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQkJQX0NTUl9DRkdfU1RSVUMsICpQQkJQX0NTUl9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQkJQX0NTUl9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJVmFsdWU6ODsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJCVVJTlQzMgkJUmVnTnVtOjg7CQkJLy8gU2VsZWN0ZWQJQkJQCXJlZ2lzdGVyCisJCVVJTlQzMgkJZlJlYWQ6MTsJCSAgICAvLyAwOiBXcml0ZQlCQlAsIDE6CVJlYWQgQkJQCisJCVVJTlQzMgkJQnVzeToxOwkJCQkvLyAxOiBBU0lDIGlzIGJ1c3kgZXhlY3V0ZSBCQlAgcHJvZ3JhbW1pbmcuCisJCVVJTlQzMgkJQkJQX1BBUl9EVVI6MTsJCSAgICAgLy8gMDogNCBNQUMgY2xvY2sgY3ljbGVzICAxOiA4IE1BQyBjbG9jayBjeWNsZXMKKwkJVUlOVDMyCQlCQlBfUldfTU9ERToxOwkJLy8gMDogdXNlIHNlcmlhbCBtb2RlICAxOnBhcmFsbGVsCisJCVVJTlQzMgkJOjEyOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQkJQX0NTUl9DRkdfU1RSVUMsICpQQkJQX0NTUl9DRkdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgUkZfQ1NSX0NGRzAgICAgICAgICAgICAJCTB4MTAyMAorLy8KKy8vIFJGX0NTUl9DRkc6IFJGIGNvbnRyb2wgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUkZfQ1NSX0NGRzBfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJQnVzeToxOwkJICAgIC8vIDA6IGlkbGUgMTogOGJ1c3kKKwkJVUlOVDMyCQlTZWw6MTsJCQkJLy8gMDpSRl9MRTAgYWN0aXZhdGUgIDE6UkZfTEUxIGFjdGl2YXRlCisJCVVJTlQzMgkJU3RhbmRieU1vZGU6MTsJCSAgICAvLyAwOiBoaWdoIHdoZW4gc3RhbmQgYnkgMToJbG93IHdoZW4gc3RhbmRieQorCQlVSU5UMzIJCWJpdHdpZHRoOjU7CQkJLy8gU2VsZWN0ZWQJQkJQCXJlZ2lzdGVyCisJCVVJTlQzMgkJUmVnSWRBbmRDb250ZW50OjI0OwkJCS8vIFJlZ2lzdGVyCXZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJGX0NTUl9DRkcwX1NUUlVDLCAqUFJGX0NTUl9DRkcwX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JGX0NTUl9DRkcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJlZ0lkQW5kQ29udGVudDoyNDsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJCVVJTlQzMgkJYml0d2lkdGg6NTsJCQkvLyBTZWxlY3RlZAlCQlAJcmVnaXN0ZXIKKwkJVUlOVDMyCQlTdGFuZGJ5TW9kZToxOwkJICAgIC8vIDA6IGhpZ2ggd2hlbiBzdGFuZCBieSAxOglsb3cgd2hlbiBzdGFuZGJ5CisJCVVJTlQzMgkJU2VsOjE7CQkJCS8vIDA6UkZfTEUwIGFjdGl2YXRlICAxOlJGX0xFMSBhY3RpdmF0ZQorCQlVSU5UMzIJCUJ1c3k6MTsJCSAgICAvLyAwOiBpZGxlIDE6IDhidXN5CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSRl9DU1JfQ0ZHMF9TVFJVQywgKlBSRl9DU1JfQ0ZHMF9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBSRl9DU1JfQ0ZHMSAgICAgICAgICAgCQkweDEwMjQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHMV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlyc3Y6NzsJCSAgICAvLyAwOiBpZGxlIDE6IDhidXN5CisJCVVJTlQzMgkJUkZHYXA6NTsJCQkvLyBHYXAgYmV0d2VlbiBCQl9DT05UUk9MX1JGIGFuZCBSRl9MRS4gMDogMyBzeXN0ZW0gY2xvY2sgY3ljbGUgKDM3LjV1c2VjKSAxOiA1IHN5c3RlbSBjbG9jayBjeWNsZSAoNjIuNXVzZWMpCisJCVVJTlQzMgkJUmVnSWRBbmRDb250ZW50OjI0OwkJCS8vIFJlZ2lzdGVyCXZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJGX0NTUl9DRkcxX1NUUlVDLCAqUFJGX0NTUl9DRkcxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JGX0NTUl9DRkcxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJlZ0lkQW5kQ29udGVudDoyNDsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJCVVJTlQzMgkJUkZHYXA6NTsJCQkvLyBHYXAgYmV0d2VlbiBCQl9DT05UUk9MX1JGIGFuZCBSRl9MRS4gMDogMyBzeXN0ZW0gY2xvY2sgY3ljbGUgKDM3LjV1c2VjKSAxOiA1IHN5c3RlbSBjbG9jayBjeWNsZSAoNjIuNXVzZWMpCisJCVVJTlQzMgkJcnN2Ojc7CQkgICAgLy8gMDogaWRsZSAxOiA4YnVzeQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUkZfQ1NSX0NGRzFfU1RSVUMsICpQUkZfQ1NSX0NGRzFfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgUkZfQ1NSX0NGRzIgICAgICAgICAgIAkJMHgxMDI4CQkvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1JGX0NTUl9DRkcyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCXJzdjo4OwkJICAgIC8vIDA6IGlkbGUgMTogOGJ1c3kKKwkJVUlOVDMyCQlSZWdJZEFuZENvbnRlbnQ6MjQ7CQkJLy8gUmVnaXN0ZXIJdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUkZfQ1NSX0NGRzJfU1RSVUMsICpQUkZfQ1NSX0NGRzJfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUkZfQ1NSX0NGRzJfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJUmVnSWRBbmRDb250ZW50OjI0OwkJCS8vIFJlZ2lzdGVyCXZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAKKwkJVUlOVDMyCQlyc3Y6ODsJCSAgICAvLyAwOiBpZGxlIDE6IDhidXN5CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSRl9DU1JfQ0ZHMl9TVFJVQywgKlBSRl9DU1JfQ0ZHMl9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBMRURfQ0ZHICAgICAgICAgICAJCTB4MTAyYwkJLy8gIE1BQ19DU1IxNAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0xFRF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJOjE7CisJCVVJTlQzMgkJTGVkUG9sYXI6MTsJCQkvLyBMZWQgUG9sYXJpdHkuICAwOiBhY3RpdmUgbG93MTogYWN0aXZlIGhpZ2gKKwkJVUlOVDMyCQlZTGVkTW9kZToyOwkJCS8vIHllbGxvdyBMZWQgTW9kZQorCQlVSU5UMzIJCUdMZWRNb2RlOjI7CQkJLy8gZ3JlZW4gTGVkIE1vZGUKKwkJVUlOVDMyCQlSTGVkTW9kZToyOwkJCS8vIHJlZCBMZWQgTW9kZSAgICAwOiBvZmYxOiBibGlua2luZyB1cG9uIFRYMjogcGVyaW9kaWMgc2xvdyBibGlua2luZzM6IGFsd2F5cyBvbgorCQlVSU5UMzIJCXJzdjoyOworCQlVSU5UMzIJCVNsb3dCbGlua1BlcmlvZDo2OwkJCS8vIHNsb3cgYmxpbmtpbmcgcGVyaW9kLiB1bml0OjFtcworCQlVSU5UMzIJCU9mZlBlcmlvZDo4OwkJCS8vIGJsaW5raW5nIG9mZiBwZXJpb2QgdW5pdCAxbXMKKwkJVUlOVDMyCQlPblBlcmlvZDo4OwkJCS8vIGJsaW5raW5nIG9uIHBlcmlvZCB1bml0IDFtcworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTEVEX0NGR19TVFJVQywgKlBMRURfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0xFRF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJT25QZXJpb2Q6ODsJCQkvLyBibGlua2luZyBvbiBwZXJpb2QgdW5pdCAxbXMKKwkJVUlOVDMyCQlPZmZQZXJpb2Q6ODsJCQkvLyBibGlua2luZyBvZmYgcGVyaW9kIHVuaXQgMW1zCisJCVVJTlQzMgkJU2xvd0JsaW5rUGVyaW9kOjY7CQkJLy8gc2xvdyBibGlua2luZyBwZXJpb2QuIHVuaXQ6MW1zCisJCVVJTlQzMgkJcnN2OjI7CisJCVVJTlQzMgkJUkxlZE1vZGU6MjsJCQkvLyByZWQgTGVkIE1vZGUgICAgMDogb2ZmMTogYmxpbmtpbmcgdXBvbiBUWDI6IHBlcmlvZGljIHNsb3cgYmxpbmtpbmczOiBhbHdheXMgb24KKwkJVUlOVDMyCQlHTGVkTW9kZToyOwkJCS8vIGdyZWVuIExlZCBNb2RlCisJCVVJTlQzMgkJWUxlZE1vZGU6MjsJCQkvLyB5ZWxsb3cgTGVkIE1vZGUKKwkJVUlOVDMyCQlMZWRQb2xhcjoxOwkJCS8vIExlZCBQb2xhcml0eS4gIDA6IGFjdGl2ZSBsb3cxOiBhY3RpdmUgaGlnaAorCQlVSU5UMzIJCToxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTEVEX0NGR19TVFJVQywgKlBMRURfQ0ZHX1NUUlVDOworI2VuZGlmCisvLworLy8gIDQuMiBNQUMgVElNSU5HICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTEwMCkKKy8vCisjZGVmaW5lIFhJRlNfVElNRV9DRkcgICAgICAgICAgICAgMHgxMTAwCQkgLy8gTUFDX0NTUjggIE1BQ19DU1I5CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSUZTX1NMT1RfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgIHJzdjoyOworCSAgICBVSU5UMzIgIEJCUnhlbmRFbmFibGU6MTsgICAgICAgIC8vICByZWZlcmVuY2UgUlhFTkQgc2lnbmFsIHRvIGJlZ2luIFhJRlMgZGVmZXIKKwkgICAgVUlOVDMyICBFSUZTOjk7ICAgICAgICAvLyAgdW5pdCAxdXMKKwkgICAgVUlOVDMyICBPZmRtWGlmc1RpbWU6NDsgICAgICAgIC8vT0ZETSBTSUZTLiB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBPRkRNIFJYIHdoZW4gTUFDIGRvZXNuJ3QgcmVmZXJlbmNlIEJCUCBzaWduYWwgQkJSWEVORAorCSAgICBVSU5UMzIgIE9mZG1TaWZzVGltZTo4OyAgICAgICAgLy8gIHVuaXQgMXVzLiBBcHBsaWVkIGFmdGVyIE9GRE0gUlgvVFgKKwkgICAgVUlOVDMyICBDY2ttU2lmc1RpbWU6ODsgICAgICAgIC8vICB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBDQ0sgUlgvVFgKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUlGU19TTE9UX0NGR19TVFJVQywgKlBJRlNfU0xPVF9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfSUZTX1NMT1RfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgIENja21TaWZzVGltZTo4OyAgICAgICAgLy8gIHVuaXQgMXVzLiBBcHBsaWVkIGFmdGVyIENDSyBSWC9UWAorCSAgICBVSU5UMzIgIE9mZG1TaWZzVGltZTo4OyAgICAgICAgLy8gIHVuaXQgMXVzLiBBcHBsaWVkIGFmdGVyIE9GRE0gUlgvVFgKKwkgICAgVUlOVDMyICBPZmRtWGlmc1RpbWU6NDsgICAgICAgIC8vT0ZETSBTSUZTLiB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBPRkRNIFJYIHdoZW4gTUFDIGRvZXNuJ3QgcmVmZXJlbmNlIEJCUCBzaWduYWwgQkJSWEVORAorCSAgICBVSU5UMzIgIEVJRlM6OTsgICAgICAgIC8vICB1bml0IDF1cworCSAgICBVSU5UMzIgIEJCUnhlbmRFbmFibGU6MTsgICAgICAgIC8vICByZWZlcmVuY2UgUlhFTkQgc2lnbmFsIHRvIGJlZ2luIFhJRlMgZGVmZXIKKwkgICAgVUlOVDMyICByc3Y6MjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUlGU19TTE9UX0NGR19TVFJVQywgKlBJRlNfU0xPVF9DRkdfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBCS09GRl9TTE9UX0NGRyAgICAgICAgICAgICAweDExMDQJCSAvLyAgbWFjX2NzcjkgbGFzdCA4IGJpdHMKKyNkZWZpbmUgTkFWX1RJTUVfQ0ZHICAgICAgICAgICAgIDB4MTEwOAkJIC8vIE5BViAgKE1BQ19DU1IxNSkKKyNkZWZpbmUgQ0hfVElNRV9DRkcgICAgICAgICAgICAgMHgxMTBDCQkgCS8vIENvdW50IGFzIGNoYW5uZWwgYnVzeQorI2RlZmluZSBQQkZfTElGRV9USU1FUiAgICAgICAgICAgICAweDExMTAJCSAvL1RYL1JYIE1QRFUgdGltZXN0YW1wIHRpbWVyIChmcmVlIHJ1bilVbml0OiAxdXMKKyNkZWZpbmUgQkNOX1RJTUVfQ0ZHICAgICAgICAgICAgIDB4MTExNAkJIC8vIFRYUlhfQ1NSOQorCisjZGVmaW5lIEJDTl9PRkZTRVQwCQkJCTB4MDQyQworI2RlZmluZSBCQ05fT0ZGU0VUMQkJCQkweDA0MzAKKworLy8KKy8vIEJDTl9USU1FX0NGRyA6IFN5bmNocm9uaXphdGlvbiBjb250cm9sIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0JDTl9USU1FX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlUeFRpbWVzdGFtcENvbXBlbnNhdGU6ODsKKyAgICAgICAgVUlOVDMyICAgICAgIDozOworCQlVSU5UMzIJCWJCZWFjb25HZW46MTsJCS8vIEVuYWJsZSBiZWFjb24gZ2VuZXJhdG9yCisgICAgICAgIFVJTlQzMiAgICAgICBiVEJUVEVuYWJsZToxOworCQlVSU5UMzIJCVRzZlN5bmNNb2RlOjI7CQkvLyBFbmFibGUgVFNGIHN5bmMsIDAwOiBkaXNhYmxlLCAwMTogaW5mcmEgbW9kZSwgMTA6IGFkLWhvYyBtb2RlCisJCVVJTlQzMgkJYlRzZlRpY2tpbmc6MTsJCS8vIEVuYWJsZSBUU0YgYXV0byBjb3VudGluZworCQlVSU5UMzIgICAgICAgQmVhY29uSW50ZXJ2YWw6MTY7ICAvLyBpbiB1bml0IG9mIDEvMTYgVFUKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUJDTl9USU1FX0NGR19TVFJVQywgKlBCQ05fVElNRV9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQkNOX1RJTUVfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgQmVhY29uSW50ZXJ2YWw6MTY7ICAvLyBpbiB1bml0IG9mIDEvMTYgVFUKKwkJVUlOVDMyCQliVHNmVGlja2luZzoxOwkJLy8gRW5hYmxlIFRTRiBhdXRvIGNvdW50aW5nCisJCVVJTlQzMgkJVHNmU3luY01vZGU6MjsJCS8vIEVuYWJsZSBUU0Ygc3luYywgMDA6IGRpc2FibGUsIDAxOiBpbmZyYSBtb2RlLCAxMDogYWQtaG9jIG1vZGUKKyAgICAgICAgVUlOVDMyICAgICAgIGJUQlRURW5hYmxlOjE7CisJCVVJTlQzMgkJYkJlYWNvbkdlbjoxOwkJLy8gRW5hYmxlIGJlYWNvbiBnZW5lcmF0b3IKKyAgICAgICAgVUlOVDMyICAgICAgIDozOworCQlVSU5UMzIJCVR4VGltZXN0YW1wQ29tcGVuc2F0ZTo4OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQkNOX1RJTUVfQ0ZHX1NUUlVDLCAqUEJDTl9USU1FX0NGR19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUQlRUX1NZTkNfQ0ZHICAgICAgICAgICAgMHgxMTE4ICAJCS8vIHR4cnhfY3NyMTAKKyNkZWZpbmUgVFNGX1RJTUVSX0RXMCAgICAgICAgICAgICAweDExMUMgIAkJLy8gTG9jYWwgVFNGIHRpbWVyIGxzYiAzMiBiaXRzLiBSZWFkLW9ubHkKKyNkZWZpbmUgVFNGX1RJTUVSX0RXMSAgICAgICAgICAgICAweDExMjAgIAkJLy8gbXNiIDMyIGJpdHMuIFJlYWQtb25seS4KKyNkZWZpbmUgVEJUVF9USU1FUiAgICAgICAgICAgICAJMHgxMTI0ICAJCS8vIFRJbWVyIHJlbWFpbnMgdGlsbCBuZXh0IFRCVFQuIFJlYWQtb25seS4gIFRYUlhfQ1NSMTQKKyNkZWZpbmUgSU5UX1RJTUVSX0NGRyAgICAgICAgICAgICAgCTB4MTEyOCAgCQkvLworI2RlZmluZSBJTlRfVElNRVJfRU4gICAgICAgICAgICAgCTB4MTEyYyAgCQkvLyAgR1AtdGltZXIgYW5kIHByZS10YnR0IEludCBlbmFibGUKKyNkZWZpbmUgQ0hfSURMRV9TVEEgICAgICAgICAgICAgIAkweDExMzAgIAkJLy8gIGNoYW5uZWwgaWRsZSB0aW1lCisjZGVmaW5lIENIX0JVU1lfU1RBICAgICAgICAgICAgICAJMHgxMTM0ICAJCS8vICBjaGFubmxlIGJ1c3kgdGltZQorLy8KKy8vICA0LjIgTUFDIFBPV0VSICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTIwMCkKKy8vCisjZGVmaW5lIE1BQ19TVEFUVVNfQ0ZHICAgICAgICAgICAgIDB4MTIwMAkJIC8vIG9sZCBNQUNfQ1NSMTIKKyNkZWZpbmUgUFdSX1BJTl9DRkcgICAgICAgICAgICAgMHgxMjA0CQkgLy8gb2xkIE1BQ19DU1IxMgorI2RlZmluZSBBVVRPX1dBS0VVUF9DRkcgICAgICAgICAgICAgMHgxMjA4CQkgLy8gb2xkIE1BQ19DU1IxMAorLy8KKy8vIEFVVE9fV0FLRVVQX0NGRzogTWFudWFsIHBvd2VyIGNvbnRyb2wgLyBzdGF0dXMgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfQVVUT19XQUtFVVBfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJOjE2OworCQlVSU5UMzIJCUVuYWJsZUF1dG9XYWtldXA6MTsJLy8gMDpzbGVlcCwgMTphd2FrZQorCQlVSU5UMzIgICAgICAgTnVtb2ZTbGVlcGluZ1RidHQ6NzsgICAgICAgICAgLy8gRm9yY2VXYWtlIGhhcyBoaWdoIHByaXZpbGVnZSB0aGFuIFB1dFRvU2xlZXAgd2hlbiBib3RoIHNldAorCQlVSU5UMzIgICAgICAgQXV0b0xlYWRUaW1lOjg7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBVVRPX1dBS0VVUF9TVFJVQywgKlBBVVRPX1dBS0VVUF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9BVVRPX1dBS0VVUF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIEF1dG9MZWFkVGltZTo4OworCQlVSU5UMzIgICAgICAgTnVtb2ZTbGVlcGluZ1RidHQ6NzsgICAgICAgICAgLy8gRm9yY2VXYWtlIGhhcyBoaWdoIHByaXZpbGVnZSB0aGFuIFB1dFRvU2xlZXAgd2hlbiBib3RoIHNldAorCQlVSU5UMzIJCUVuYWJsZUF1dG9XYWtldXA6MTsJLy8gMDpzbGVlcCwgMTphd2FrZQorCQlVSU5UMzIJCToxNjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUFVVE9fV0FLRVVQX1NUUlVDLCAqUEFVVE9fV0FLRVVQX1NUUlVDOworI2VuZGlmCisvLworLy8gIDQuMyBNQUMgVFggIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIChvZmZzZXQ6MHgxMzAwKQorLy8KKworI2RlZmluZSBFRENBX0FDMF9DRkcJMHgxMzAwCQkvL0FDX1RYT1BfQ1NSMCAweDM0NzQKKyNkZWZpbmUgRURDQV9BQzFfQ0ZHCTB4MTMwNAorI2RlZmluZSBFRENBX0FDMl9DRkcJMHgxMzA4CisjZGVmaW5lIEVEQ0FfQUMzX0NGRwkweDEzMGMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9FRENBX0FDX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICA6MTI7ICAgICAgICAvLworCSAgICBVSU5UMzIgIEN3bWF4OjQ7ICAgICAgICAvL3VuaXQgcG93ZXIgb2YgMgorCSAgICBVSU5UMzIgIEN3bWluOjQ7ICAgICAgICAvLworCSAgICBVSU5UMzIgIEFpZnNuOjQ7ICAgICAgICAvLyAjIG9mIHNsb3QgdGltZQorCSAgICBVSU5UMzIgIEFjVHhvcDo4OyAgICAgICAgLy8gIGluIHVuaXQgb2YgMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRURDQV9BQ19DRkdfU1RSVUMsICpQRURDQV9BQ19DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfRURDQV9BQ19DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgQWNUeG9wOjg7ICAgICAgICAvLyAgaW4gdW5pdCBvZiAzMnVzCisJICAgIFVJTlQzMiAgQWlmc246NDsgICAgICAgIC8vICMgb2Ygc2xvdCB0aW1lCisJICAgIFVJTlQzMiAgQ3dtaW46NDsgICAgICAgIC8vCisJICAgIFVJTlQzMiAgQ3dtYXg6NDsgICAgICAgIC8vdW5pdCBwb3dlciBvZiAyCisJICAgIFVJTlQzMiAgOjEyOyAgICAgICAvLworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRURDQV9BQ19DRkdfU1RSVUMsICpQRURDQV9BQ19DRkdfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBFRENBX1RJRF9BQ19NQVAJMHgxMzEwCisjZGVmaW5lIFRYX1BXUl9DRkdfMAkweDEzMTQKKyNkZWZpbmUgVFhfUFdSX0NGR18xCTB4MTMxOAorI2RlZmluZSBUWF9QV1JfQ0ZHXzIJMHgxMzFDCisjZGVmaW5lIFRYX1BXUl9DRkdfMwkweDEzMjAKKyNkZWZpbmUgVFhfUFdSX0NGR180CTB4MTMyNAorI2RlZmluZSBUWF9QSU5fQ0ZHCQkweDEzMjgKKyNkZWZpbmUgVFhfQkFORF9DRkcJMHgxMzJjCQkvLyAweDEgdXNlIHVwcGVyIDIwTUh6LiAwIGp1c2UgbG93ZXIgMjBNSHoKKyNkZWZpbmUgVFhfU1dfQ0ZHMAkJMHgxMzMwCisjZGVmaW5lIFRYX1NXX0NGRzEJCTB4MTMzNAorI2RlZmluZSBUWF9TV19DRkcyCQkweDEzMzgKKyNkZWZpbmUgVFhPUF9USFJFU19DRkcJCTB4MTMzYworI2RlZmluZSBUWE9QX0NUUkxfQ0ZHCQkweDEzNDAKKyNkZWZpbmUgVFhfUlRTX0NGRwkJMHgxMzQ0CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9SVFNfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgcnN2Ojc7CisJICAgIFVJTlQzMiAgICAgICBSdHNGYmtFbjoxOyAgICAvLyBlbmFibGUgcnRzIHJhdGUgZmFsbGJhY2sKKwkgICAgVUlOVDMyICAgICAgIFJ0c1RocmVzOjE2OyAgICAvLyB1bml0OmJ5dGUKKwkgICAgVUlOVDMyICAgICAgIEF1dG9SdHNSZXRyeUxpbWl0Ojg7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9SVFNfQ0ZHX1NUUlVDLCAqUFRYX1JUU19DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfUlRTX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIEF1dG9SdHNSZXRyeUxpbWl0Ojg7CisJICAgIFVJTlQzMiAgICAgICBSdHNUaHJlczoxNjsgICAgLy8gdW5pdDpieXRlCisJICAgIFVJTlQzMiAgICAgICBSdHNGYmtFbjoxOyAgICAvLyBlbmFibGUgcnRzIHJhdGUgZmFsbGJhY2sKKwkgICAgVUlOVDMyICAgICAgIHJzdjo3OyAgICAgLy8gMTogSFQgbm9uLVNUQkMgY29udHJvbCBmcmFtZSBlbmFibGUKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1JUU19DRkdfU1RSVUMsICpQVFhfUlRTX0NGR19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUWF9USU1FT1VUX0NGRwkweDEzNDgKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9USU1FT1VUX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIHJzdjI6ODsKKwkgICAgVUlOVDMyICAgICAgIFR4b3BUaW1lb3V0Ojg7CS8vVFhPUCB0aW1lb3V0IHZhbHVlIGZvciBUWE9QIHRydW5jYXRpb24uICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IChTTE9UX1RJTUUpID4gKFRYX09QX1RJTUVPVVQpID4gKFJYX0FDS19USU1FT1VUKQorCSAgICBVSU5UMzIgICAgICAgUnhBY2tUaW1lb3V0Ojg7CS8vIHVuaXQ6c2xvdC4gVXNlZCBmb3IgVFggcHJlY2VkdXJlCisJICAgIFVJTlQzMiAgICAgICBNcGR1TGlmZVRpbWU6NDsgICAgLy8gIGV4cGlyYXRpb24gdGltZSA9IDJeKDkrTVBEVSBMSUZFIFRJTUUpICB1cworCSAgICBVSU5UMzIgICAgICAgcnN2OjQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9USU1FT1VUX0NGR19TVFJVQywgKlBUWF9USU1FT1VUX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9USU1FT1VUX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIHJzdjo0OworCSAgICBVSU5UMzIgICAgICAgTXBkdUxpZmVUaW1lOjQ7ICAgIC8vICBleHBpcmF0aW9uIHRpbWUgPSAyXig5K01QRFUgTElGRSBUSU1FKSAgdXMKKwkgICAgVUlOVDMyICAgICAgIFJ4QWNrVGltZW91dDo4OwkvLyB1bml0OnNsb3QuIFVzZWQgZm9yIFRYIHByZWNlZHVyZQorCSAgICBVSU5UMzIgICAgICAgVHhvcFRpbWVvdXQ6ODsJLy9UWE9QIHRpbWVvdXQgdmFsdWUgZm9yIFRYT1AgdHJ1bmNhdGlvbi4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgKFNMT1RfVElNRSkgPiAoVFhfT1BfVElNRU9VVCkgPiAoUlhfQUNLX1RJTUVPVVQpCisJICAgIFVJTlQzMiAgICAgICByc3YyOjg7ICAgICAvLyAxOiBIVCBub24tU1RCQyBjb250cm9sIGZyYW1lIGVuYWJsZQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfVElNRU9VVF9DRkdfU1RSVUMsICpQVFhfVElNRU9VVF9DRkdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfUlRZX0NGRwkweDEzNGMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uIFBBQ0tFRCBfVFhfUlRZX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIHJzdjoxOworCSAgICBVSU5UMzIgICAgICAgVHhhdXRvRkJFbmFibGU6MTsgICAgLy8gVHggcmV0cnkgUEhZIHJhdGUgYXV0byBmYWxsYmFjayBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIEFnZ1J0eU1vZGU6MTsJLy8gQWdncmVnYXRlIE1QRFUgcmV0cnkgbW9kZS4gIDA6ZXhwaXJlZCBieSByZXRyeSBsaW1pdCwgMTogZXhwaXJlZCBieSBtcGR1IGxpZmUgdGltZXIKKwkgICAgVUlOVDMyICAgICAgIE5vbkFnZ1J0eU1vZGU6MTsJLy8gTm9uLUFnZ3JlZ2F0ZSBNUERVIHJldHJ5IG1vZGUuICAwOmV4cGlyZWQgYnkgcmV0cnkgbGltaXQsIDE6IGV4cGlyZWQgYnkgbXBkdSBsaWZlIHRpbWVyCisJICAgIFVJTlQzMiAgICAgICBMb25nUnR5VGhyZToxMjsJLy8gTG9uZyByZXRyeSB0aHJlc2hvb2xkCisJICAgIFVJTlQzMiAgICAgICBMb25nUnR5TGltaXQ6ODsJLy9sb25nIHJldHJ5IGxpbWl0CisJICAgIFVJTlQzMiAgICAgICBTaG9ydFJ0eUxpbWl0Ojg7CS8vICBzaG9ydCByZXRyeSBsaW1pdAorCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9SVFlfQ0ZHX1NUUlVDLCAqUFRYX1JUWV9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbiBQQUNLRUQgX1RYX1JUWV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBTaG9ydFJ0eUxpbWl0Ojg7CS8vICBzaG9ydCByZXRyeSBsaW1pdAorCSAgICBVSU5UMzIgICAgICAgTG9uZ1J0eUxpbWl0Ojg7CS8vbG9uZyByZXRyeSBsaW1pdAorCSAgICBVSU5UMzIgICAgICAgTG9uZ1J0eVRocmU6MTI7CS8vIExvbmcgcmV0cnkgdGhyZXNob29sZAorCSAgICBVSU5UMzIgICAgICAgTm9uQWdnUnR5TW9kZToxOwkvLyBOb24tQWdncmVnYXRlIE1QRFUgcmV0cnkgbW9kZS4gIDA6ZXhwaXJlZCBieSByZXRyeSBsaW1pdCwgMTogZXhwaXJlZCBieSBtcGR1IGxpZmUgdGltZXIKKwkgICAgVUlOVDMyICAgICAgIEFnZ1J0eU1vZGU6MTsJLy8gQWdncmVnYXRlIE1QRFUgcmV0cnkgbW9kZS4gIDA6ZXhwaXJlZCBieSByZXRyeSBsaW1pdCwgMTogZXhwaXJlZCBieSBtcGR1IGxpZmUgdGltZXIKKwkgICAgVUlOVDMyICAgICAgIFR4YXV0b0ZCRW5hYmxlOjE7ICAgIC8vIFR4IHJldHJ5IFBIWSByYXRlIGF1dG8gZmFsbGJhY2sgZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICByc3Y6MTsgICAgIC8vIDE6IEhUIG5vbi1TVEJDIGNvbnRyb2wgZnJhbWUgZW5hYmxlCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9SVFlfQ0ZHX1NUUlVDLCAqUFRYX1JUWV9DRkdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfTElOS19DRkcJMHgxMzUwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglQQUNLRUQgX1RYX0xJTktfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QgUEFDS0VEIHsKKwkgICAgVUlOVDMyICAgICAgIFJlbW90TUZTOjg7CS8vcmVtb3RlIE1DUyBmZWVkYmFjayBzZXF1ZW5jZSBudW1iZXIKKwkgICAgVUlOVDMyICAgICAgIFJlbW90TUZCOjg7ICAgIC8vICByZW1vdGUgTUNTIGZlZWRiYWNrCisJICAgIFVJTlQzMiAgICAgICByc3Y6MzsJLy8KKwkgICAgVUlOVDMyICAgICAgIFR4Q0ZBY2tFbjoxOwkvLyAgIFBpZ2d5YmFjayBDRi1BQ0sgZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICBUeFJER0VuOjE7CS8vIFJERyBUWCBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFR4TVJRRW46MTsJLy8gIE1DUyByZXF1ZXN0IFRYIGVuYWJsZQorCSAgICBVSU5UMzIgICAgICAgUmVtb3RlVU1GU0VuYWJsZToxOwkvLyAgcmVtb3RlIHVuc29saWNpdCAgTUZCIGVuYWJsZS4gIDA6IG5vdCBhcHBseSByZW1vdGUgcmVtb3RlIHVuc29saWNpdCAoTUZTPTcpCisJICAgIFVJTlQzMiAgICAgICBNRkJFbmFibGU6MTsJLy8gIFRYIGFwcGx5IHJlbW90ZSBNRkIgMTplbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFJlbW90ZU1GQkxpZmVUaW1lOjg7CS8vcmVtb3RlIE1GQiBsaWZlIHRpbWUuIHVuaXQgOiAzMnVzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9MSU5LX0NGR19TVFJVQywgKlBUWF9MSU5LX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCVBBQ0tFRCBfVFhfTElOS19DRkdfU1RSVUMJeworCXN0cnVjdCBQQUNLRUQgeworCSAgICBVSU5UMzIgICAgICAgUmVtb3RlTUZCTGlmZVRpbWU6ODsJLy9yZW1vdGUgTUZCIGxpZmUgdGltZS4gdW5pdCA6IDMydXMKKwkgICAgVUlOVDMyICAgICAgIE1GQkVuYWJsZToxOwkvLyAgVFggYXBwbHkgcmVtb3RlIE1GQiAxOmVuYWJsZQorCSAgICBVSU5UMzIgICAgICAgUmVtb3RlVU1GU0VuYWJsZToxOwkvLyAgcmVtb3RlIHVuc29saWNpdCAgTUZCIGVuYWJsZS4gIDA6IG5vdCBhcHBseSByZW1vdGUgcmVtb3RlIHVuc29saWNpdCAoTUZTPTcpCisJICAgIFVJTlQzMiAgICAgICBUeE1SUUVuOjE7CS8vICBNQ1MgcmVxdWVzdCBUWCBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFR4UkRHRW46MTsJLy8gUkRHIFRYIGVuYWJsZQorCSAgICBVSU5UMzIgICAgICAgVHhDRkFja0VuOjE7CS8vICAgUGlnZ3liYWNrIENGLUFDSyBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIHJzdjozOwkvLworCSAgICBVSU5UMzIgICAgICAgUmVtb3RNRkI6ODsgICAgLy8gIHJlbW90ZSBNQ1MgZmVlZGJhY2sKKwkgICAgVUlOVDMyICAgICAgIFJlbW90TUZTOjg7CS8vcmVtb3RlIE1DUyBmZWVkYmFjayBzZXF1ZW5jZSBudW1iZXIKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0xJTktfQ0ZHX1NUUlVDLCAqUFRYX0xJTktfQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIEhUX0ZCS19DRkcwCTB4MTM1NAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24gUEFDS0VEIF9IVF9GQktfQ0ZHMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTN0ZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1M2RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzVGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTNEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MzRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzJGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MwRkJLOjQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlIVF9GQktfQ0ZHMF9TVFJVQywgKlBIVF9GQktfQ0ZHMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uIFBBQ0tFRCBfSFRfRkJLX0NGRzBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzBGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MyRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzNGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTNEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1M1RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzZGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTN0ZCSzo0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSFRfRkJLX0NGRzBfU1RSVUMsICpQSFRfRkJLX0NGRzBfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgSFRfRkJLX0NGRzEJMHgxMzU4CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSFRfRkJLX0NGRzFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzE1RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzE0RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzEzRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzEyRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzExRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzEwRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzlGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTOEZCSzo0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSFRfRkJLX0NGRzFfU1RSVUMsICpQSFRfRkJLX0NGRzFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfSFRfRkJLX0NGRzFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzhGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTOUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMkZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxM0ZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxNEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxNUZCSzo0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSFRfRkJLX0NGRzFfU1RSVUMsICpQSFRfRkJLX0NGRzFfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgTEdfRkJLX0NGRzAJMHgxMzVjCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTEdfRkJLX0NGRzBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTN0ZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgNgorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzZGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDUKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1M1RkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyA0CisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTNEZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMworCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzNGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDIKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1MyRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAxCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTMUZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMAorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzBGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUxHX0ZCS19DRkcwX1NUUlVDLCAqUExHX0ZCS19DRkcwX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0xHX0ZCS19DRkcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzBGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1MxRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTMkZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMQorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzNGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDIKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1M0RkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAzCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTNUZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgNAorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzZGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDUKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1M3RkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyA2CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlMR19GQktfQ0ZHMF9TVFJVQywgKlBMR19GQktfQ0ZHMF9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBMR19GQktfQ0ZHMQkJMHgxMzYwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTEdfRkJLX0NGRzFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICByc3Y6MTY7CisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MzRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAyCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MyRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAxCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MxRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MwRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlMR19GQktfQ0ZHMV9TVFJVQywgKlBMR19GQktfQ0ZHMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9MR19GQktfQ0ZHMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIENDS01DUzBGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwkgICAgVUlOVDMyICAgICAgIENDS01DUzFGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwkgICAgVUlOVDMyICAgICAgIENDS01DUzJGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDEKKwkgICAgVUlOVDMyICAgICAgIENDS01DUzNGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDIKKwkgICAgVUlOVDMyICAgICAgIHJzdjoxNjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUxHX0ZCS19DRkcxX1NUUlVDLCAqUExHX0ZCS19DRkcxX1NUUlVDOworI2VuZGlmCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy89PT09PT09PT09PT09PT09IFByb3RlY3Rpb24gUGFyYW1hdGVyPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBDQ0tfUFJPVF9DRkcJMHgxMzY0CQkvL0NDSyBQcm90ZWN0aW9uCisjZGVmaW5lIEFTSUNfU0hPUlROQVYJCTEKKyNkZWZpbmUgQVNJQ19MT05HTkFWCQkyCisjZGVmaW5lIEFTSUNfUlRTCQkxCisjZGVmaW5lIEFTSUNfQ1RTCQkyCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUFJPVF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICByc3Y6NTsKKwkgICAgVUlOVDMyICAgICAgIFJUU1RoRW46MTsJLy9SVFMgdGhyZXNob2xkIGVuYWJsZSBvbiBDQ0sgVFgKKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0dGNDA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0dGMjA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd01NNDA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd01NMjA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuIDA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dPZmRtOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dDY2s6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFByb3RlY3ROYXY6MjsJLy9UWE9QIHByb3RlY3Rpb24gdHlwZSBmb3IgQ0NLIFRYLiAwOk5vbmUsIDE6U2hvcnROQVZwcm90ZWN0LCAgMjpMb25nTkFWUHJvdGVjdCwgMzpyc3YKKwkgICAgVUlOVDMyICAgICAgIFByb3RlY3RDdHJsOjI7CS8vUHJvdGVjdGlvbiBjb250cm9sIGZyYW1lIHR5cGUgZm9yIENDSyBUWC4gMTpSVFMvQ1RTLCAyOkNUUy10by1zZWxmLCAwOk5vbmUsIDM6cnN2CisJICAgIFVJTlQzMiAgICAgICBQcm90ZWN0UmF0ZToxNjsJLy9Qcm90ZWN0aW9uIGNvbnRyb2wgZnJhbWUgcmF0ZSBmb3IgQ0NLIFRYKFJUUy9DVFMvQ0ZFbmQpLgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUFJPVF9DRkdfU1RSVUMsICpQUFJPVF9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUFJPVF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBQcm90ZWN0UmF0ZToxNjsJLy9Qcm90ZWN0aW9uIGNvbnRyb2wgZnJhbWUgcmF0ZSBmb3IgQ0NLIFRYKFJUUy9DVFMvQ0ZFbmQpLgorCSAgICBVSU5UMzIgICAgICAgUHJvdGVjdEN0cmw6MjsJLy9Qcm90ZWN0aW9uIGNvbnRyb2wgZnJhbWUgdHlwZSBmb3IgQ0NLIFRYLiAxOlJUUy9DVFMsIDI6Q1RTLXRvLXNlbGYsIDA6Tm9uZSwgMzpyc3YKKwkgICAgVUlOVDMyICAgICAgIFByb3RlY3ROYXY6MjsJLy9UWE9QIHByb3RlY3Rpb24gdHlwZSBmb3IgQ0NLIFRYLiAwOk5vbmUsIDE6U2hvcnROQVZwcm90ZWN0LCAgMjpMb25nTkFWUHJvdGVjdCwgMzpyc3YKKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0NjazoxOwkvL0NDSyBUWE9QIGFsbG93YW5jZS4wOmRpc2FsbG93LgorCSAgICBVSU5UMzIgICAgICAgVHhvcEFsbG93T2ZkbToxOwkvL0NDSyBUWE9QIGFsbG93YW5jZS4wOmRpc2FsbG93LgorCSAgICBVSU5UMzIgICAgICAgVHhvcEFsbG93TU0yMDoxOwkvL0NDSyBUWE9QIGFsbG93YW5jZS4gMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd01NNDA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0dGMjA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd0dGNDA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFJUU1RoRW46MTsJLy9SVFMgdGhyZXNob2xkIGVuYWJsZSBvbiBDQ0sgVFgKKwkgICAgVUlOVDMyICAgICAgIHJzdjo1OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUFJPVF9DRkdfU1RSVUMsICpQUFJPVF9DRkdfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBPRkRNX1BST1RfQ0ZHCTB4MTM2OAkJLy9PRkRNIFByb3RlY3Rpb24KKyNkZWZpbmUgTU0yMF9QUk9UX0NGRwkweDEzNkMJCS8vTU0yMCBQcm90ZWN0aW9uCisjZGVmaW5lIE1NNDBfUFJPVF9DRkcJMHgxMzcwCQkvL01NNDAgUHJvdGVjdGlvbgorI2RlZmluZSBHRjIwX1BST1RfQ0ZHCTB4MTM3NAkJLy9HRjIwIFByb3RlY3Rpb24KKyNkZWZpbmUgR0Y0MF9QUk9UX0NGRwkweDEzNzgJCS8vR1I0MCBQcm90ZWN0aW9uCisjZGVmaW5lIEVYUF9DVFNfVElNRQkweDEzN0MJCS8vCisjZGVmaW5lIEVYUF9BQ0tfVElNRQkweDEzODAJCS8vCisKKy8vCisvLyAgNC40IE1BQyBSWCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTQwMCkKKy8vCisjZGVmaW5lIFJYX0ZJTFRSX0NGRwkweDE0MDAJCQkvL1RYUlhfQ1NSMAorI2RlZmluZSBBVVRPX1JTUF9DRkcJMHgxNDA0CQkJLy9UWFJYX0NTUjQKKy8vCisvLyBUWFJYX0NTUjQ6IEF1dG8tUmVzcG9uZGVyLworLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmIHVuaW9uIF9BVVRPX1JTUF9DRkdfU1RSVUMgeworIHN0cnVjdCB7CisgICAgIFVJTlQzMiAgICAgICAgOjI0OworICAgICBVSU5UMzIgICAgICAgQWNrQ3RzUHNtQml0OjE7ICAgLy8gUG93ZXIgYml0IHZhbHVlIGluIGNvbnJ0cm9sIGZyYW1lCisgICAgIFVJTlQzMiAgICAgICBEdWFsQ1RTRW46MTsgICAvLyBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUKKyAgICAgVUlOVDMyICAgICAgIHJzdjoxOyAgIC8vIFBvd2VyIGJpdCB2YWx1ZSBpbiBjb25ydHJvbCBmcmFtZQorICAgICBVSU5UMzIgICAgICAgQXV0b1Jlc3BvbmRlclByZWFtYmxlOjE7ICAgIC8vIDA6bG9uZywgMTpzaG9ydCBwcmVhbWJsZQorICAgICBVSU5UMzIgICAgICAgQ1RTNDBNUmVmOjE7ICAvLyBSZXNwb25zZSBDVFMgNDBNSHogZHVwbGljYXRlIG1vZGUKKyAgICAgVUlOVDMyICAgICAgIENUUzQwTU1vZGU6MTsgIC8vIFJlc3BvbnNlIENUUyA0ME1IeiBkdXBsaWNhdGUgbW9kZQorICAgICBVSU5UMzIgICAgICAgQkFDQWNrUG9saWN5RW5hYmxlOjE7ICAgIC8vIDA6bG9uZywgMTpzaG9ydCBwcmVhbWJsZQorICAgICBVSU5UMzIgICAgICAgQXV0b1Jlc3BvbmRlckVuYWJsZToxOworIH0gZmllbGQ7CisgVUlOVDMyICAgd29yZDsKK30gQVVUT19SU1BfQ0ZHX1NUUlVDLCAqUEFVVE9fUlNQX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmIHVuaW9uIF9BVVRPX1JTUF9DRkdfU1RSVUMgeworIHN0cnVjdCB7CisgICAgIFVJTlQzMiAgICAgICBBdXRvUmVzcG9uZGVyRW5hYmxlOjE7CisgICAgIFVJTlQzMiAgICAgICBCQUNBY2tQb2xpY3lFbmFibGU6MTsgICAgLy8gMDpsb25nLCAxOnNob3J0IHByZWFtYmxlCisgICAgIFVJTlQzMiAgICAgICBDVFM0ME1Nb2RlOjE7ICAvLyBSZXNwb25zZSBDVFMgNDBNSHogZHVwbGljYXRlIG1vZGUKKyAgICAgVUlOVDMyICAgICAgIENUUzQwTVJlZjoxOyAgLy8gUmVzcG9uc2UgQ1RTIDQwTUh6IGR1cGxpY2F0ZSBtb2RlCisgICAgIFVJTlQzMiAgICAgICBBdXRvUmVzcG9uZGVyUHJlYW1ibGU6MTsgICAgLy8gMDpsb25nLCAxOnNob3J0IHByZWFtYmxlCisgICAgIFVJTlQzMiAgICAgICByc3Y6MTsgICAvLyBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUKKyAgICAgVUlOVDMyICAgICAgIER1YWxDVFNFbjoxOyAgIC8vIFBvd2VyIGJpdCB2YWx1ZSBpbiBjb25ydHJvbCBmcmFtZQorICAgICBVSU5UMzIgICAgICAgQWNrQ3RzUHNtQml0OjE7ICAgLy8gUG93ZXIgYml0IHZhbHVlIGluIGNvbnJ0cm9sIGZyYW1lCisgICAgIFVJTlQzMiAgICAgICAgOjI0OworIH0gZmllbGQ7CisgVUlOVDMyICAgd29yZDsKK30gQVVUT19SU1BfQ0ZHX1NUUlVDLCAqUEFVVE9fUlNQX0NGR19TVFJVQzsKKyNlbmRpZgorCisjZGVmaW5lIExFR0FDWV9CQVNJQ19SQVRFCTB4MTQwOAkvLyAgVFhSWF9DU1I1ICAgICAgICAgICAweDMwNTQKKyNkZWZpbmUgSFRfQkFTSUNfUkFURQkJMHgxNDBjCisjZGVmaW5lIEhUX0NUUkxfQ0ZHCQkweDE0MTAKKyNkZWZpbmUgU0lGU19DT1NUX0NGRwkJMHgxNDE0CisjZGVmaW5lIFJYX1BBUlNFUl9DRkcJCTB4MTQxOAkvL1NldCBOQVYgZm9yIGFsbCByZWNlaXZlZCBmcmFtZXMKKworLy8KKy8vICA0LjUgTUFDIFNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gKG9mZnNldDoweDE1MDApCisvLworI2RlZmluZSBUWF9TRUNfQ05UMAkJMHgxNTAwCQkvLworI2RlZmluZSBSWF9TRUNfQ05UMAkJMHgxNTA0CQkvLworI2RlZmluZSBDQ01QX0ZDX01VVEUJCTB4MTUwOAkJLy8KKy8vCisvLyAgNC42IEhDQ0EvUFNNUCAob2Zmc2V0OjB4MTYwMCkKKy8vCisjZGVmaW5lIFRYT1BfSExEUl9BRERSMAkJMHgxNjAwCisjZGVmaW5lIFRYT1BfSExEUl9BRERSMQkJMHgxNjA0CisjZGVmaW5lIFRYT1BfSExEUl9FVAkJMHgxNjA4CisjZGVmaW5lIFFPU19DRlBPTExfUkFfRFcwCQkweDE2MGMKKyNkZWZpbmUgUU9TX0NGUE9MTF9BMV9EVzEJCTB4MTYxMAorI2RlZmluZSBRT1NfQ0ZQT0xMX1FDCQkweDE2MTQKKy8vCisvLyAgNC43IE1BQyBTdGF0aXN0aXMgcmVnaXN0ZXJzIChvZmZzZXQ6MHgxNzAwKQorLy8KKyNkZWZpbmUgUlhfU1RBX0NOVDAJCTB4MTcwMAkJLy8KKyNkZWZpbmUgUlhfU1RBX0NOVDEJCTB4MTcwNAkJLy8KKyNkZWZpbmUgUlhfU1RBX0NOVDIJCTB4MTcwOAkJLy8KKworLy8KKy8vIFJYX1NUQV9DTlQwX1NUUlVDOiBSWCBQTENQIGVycm9yIGNvdW50ICYgUlggQ1JDIGVycm9yIGNvdW50CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1JYX1NUQV9DTlQwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFBoeUVycjsKKwkgICAgVVNIT1JUICBDcmNFcnI7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9TVEFfQ05UMF9TVFJVQywgKlBSWF9TVEFfQ05UMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBDcmNFcnI7CisJICAgIFVTSE9SVCAgUGh5RXJyOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfU1RBX0NOVDBfU1RSVUMsICpQUlhfU1RBX0NOVDBfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFJYX1NUQV9DTlQxX1NUUlVDOiBSWCBGYWxzZSBDQ0EgY291bnQgJiBSWCBMT05HIGZyYW1lIGNvdW50CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1JYX1NUQV9DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFBsY3BFcnI7CisJICAgIFVTSE9SVCAgRmFsc2VDY2E7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9TVEFfQ05UMV9TVFJVQywgKlBSWF9TVEFfQ05UMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBGYWxzZUNjYTsKKwkgICAgVVNIT1JUICBQbGNwRXJyOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfU1RBX0NOVDFfU1RSVUMsICpQUlhfU1RBX0NOVDFfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFJYX1NUQV9DTlQyX1NUUlVDOgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBSeEZpZm9PdmVyZmxvd0NvdW50OworCSAgICBVU0hPUlQgIFJ4RHVwbGlDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJYX1NUQV9DTlQyX1NUUlVDLCAqUFJYX1NUQV9DTlQyX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JYX1NUQV9DTlQyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFJ4RHVwbGlDb3VudDsKKwkgICAgVVNIT1JUICBSeEZpZm9PdmVyZmxvd0NvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfU1RBX0NOVDJfU1RSVUMsICpQUlhfU1RBX0NOVDJfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfU1RBX0NOVDAJCTB4MTcwQwkJLy8KKy8vCisvLyBTVEFfQ1NSMzogVFggQmVhY29uIGNvdW50CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX1NUQV9DTlQwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFR4QmVhY29uQ291bnQ7CisJICAgIFVTSE9SVCAgVHhGYWlsQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9TVEFfQ05UMF9TVFJVQywgKlBUWF9TVEFfQ05UMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9TVEFfQ05UMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBUeEZhaWxDb3VudDsKKwkgICAgVVNIT1JUICBUeEJlYWNvbkNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0NOVDBfU1RSVUMsICpQVFhfU1RBX0NOVDBfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfU1RBX0NOVDEJCTB4MTcxMAkJLy8KKy8vCisvLyBUWF9TVEFfQ05UMTogVFggdHggY291bnQKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVFhfU1RBX0NOVDFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgVHhSZXRyYW5zbWl0OworCSAgICBVU0hPUlQgIFR4U3VjY2VzczsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1NUQV9DTlQxX1NUUlVDLCAqUFRYX1NUQV9DTlQxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX1NUQV9DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFR4U3VjY2VzczsKKwkgICAgVVNIT1JUICBUeFJldHJhbnNtaXQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9TVEFfQ05UMV9TVFJVQywgKlBUWF9TVEFfQ05UMV9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUWF9TVEFfQ05UMgkJMHgxNzE0CQkvLworLy8KKy8vIFRYX1NUQV9DTlQyOiBUWCB0eCBjb3VudAorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9TVEFfQ05UMl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBUeFVuZGVyRmxvd0NvdW50OworCSAgICBVU0hPUlQgIFR4WmVyb0xlbkNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0NOVDJfU1RSVUMsICpQVFhfU1RBX0NOVDJfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfU1RBX0NOVDJfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgVHhaZXJvTGVuQ291bnQ7CisJICAgIFVTSE9SVCAgVHhVbmRlckZsb3dDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1NUQV9DTlQyX1NUUlVDLCAqUFRYX1NUQV9DTlQyX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX1NUQV9GSUZPCQkweDE3MTgJCS8vCisvLworLy8gVFhfU1RBX0ZJRk9fU1RSVUM6IFRYIFJlc3VsdCBmb3Igc3BlY2lmaWMgUElEIHN0YXR1cyBmaWZvIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24gUEFDS0VEIF9UWF9TVEFfRklGT19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSZXNlcnZlOjI7CisJCVVJTlQzMgkJVHhCRjoxOyAvLyAzKjMKKwkJVUlOVDMyCQlTdWNjZXNzUmF0ZToxMzsJLy9pbmNsdWRlIE1DUywgbW9kZSAsc2hvcnRHSSwgQlcgc2V0dGluZ1NhbWUgZm9ybWF0IGFzIFRYV0kgV29yZCAwIEJpdCAzMS0xNi4KKy8vCQlVSU5UMzIJCVN1Y2Nlc3NSYXRlOjE2OwkvL2luY2x1ZGUgTUNTLCBtb2RlICxzaG9ydEdJLCBCVyBzZXR0aW5nU2FtZSBmb3JtYXQgYXMgVFhXSSBXb3JkIDAgQml0IDMxLTE2LgorCQlVSU5UMzIJCXdjaWQ6ODsJCS8vd2lyZWxlc3MgY2xpZW50IGluZGV4CisJCVVJTlQzMiAgICAgICAJVHhBY2tSZXF1aXJlZDoxOyAgICAvLyBhY2sgcmVxdWlyZWQKKwkJVUlOVDMyICAgICAgIAlUeEFnZ3JlOjE7ICAgIC8vIFR4IGlzIGFnZ3JlZ2F0ZWQKKwkJVUlOVDMyICAgICAgIAlUeFN1Y2Nlc3M6MTsgICAvLyBUeCBzdWNjZXNzLiB3aGV0aGVyIHN1Y2Nlc3Mgb3Igbm90CisJCVVJTlQzMiAgICAgICAJUGlkVHlwZTo0OworCQlVSU5UMzIgICAgICAgCWJWYWxpZDoxOyAgIC8vIDE6VGhpcyByZWdpc3RlciBjb250YWlucyBhIHZhbGlkIFRYIHJlc3VsdAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0ZJRk9fU1RSVUMsICpQVFhfU1RBX0ZJRk9fU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbiBQQUNLRUQgX1RYX1NUQV9GSUZPX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgCWJWYWxpZDoxOyAgIC8vIDE6VGhpcyByZWdpc3RlciBjb250YWlucyBhIHZhbGlkIFRYIHJlc3VsdAorCQlVSU5UMzIgICAgICAgCVBpZFR5cGU6NDsKKwkJVUlOVDMyICAgICAgIAlUeFN1Y2Nlc3M6MTsgICAvLyBUeCBObyByZXRyeSBzdWNjZXNzCisJCVVJTlQzMiAgICAgICAJVHhBZ2dyZToxOyAgICAvLyBUeCBSZXRyeSBTdWNjZXNzCisJCVVJTlQzMiAgICAgICAJVHhBY2tSZXF1aXJlZDoxOyAgICAvLyBUeCBmYWlsCisJCVVJTlQzMgkJd2NpZDo4OwkJLy93aXJlbGVzcyBjbGllbnQgaW5kZXgKKy8vCQlVSU5UMzIJCVN1Y2Nlc3NSYXRlOjE2OwkvL2luY2x1ZGUgTUNTLCBtb2RlICxzaG9ydEdJLCBCVyBzZXR0aW5nU2FtZSBmb3JtYXQgYXMgVFhXSSBXb3JkIDAgQml0IDMxLTE2LgorCQlVSU5UMzIJCVN1Y2Nlc3NSYXRlOjEzOwkvL2luY2x1ZGUgTUNTLCBtb2RlICxzaG9ydEdJLCBCVyBzZXR0aW5nU2FtZSBmb3JtYXQgYXMgVFhXSSBXb3JkIDAgQml0IDMxLTE2LgorCQlVSU5UMzIJCVR4QkY6MTsKKwkJVUlOVDMyCQlSZXNlcnZlOjI7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9TVEFfRklGT19TVFJVQywgKlBUWF9TVEFfRklGT19TVFJVQzsKKyNlbmRpZgorLy8gRGVidWcgY291bnRlcgorI2RlZmluZSBUWF9BR0dfQ05UCTB4MTcxYworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlRfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnVHhDb3VudDsKKwkgICAgVVNIT1JUICBOb25BZ2dUeENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVF9TVFJVQywgKlBUWF9BR0dfQ05UX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlRfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgTm9uQWdnVHhDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dUeENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVF9TVFJVQywgKlBUWF9BR0dfQ05UX1NUUlVDOworI2VuZGlmCisvLyBEZWJ1ZyBjb3VudGVyCisjZGVmaW5lIFRYX0FHR19DTlQwCTB4MTcyMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUyQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTFDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQwX1NUUlVDLCAqUFRYX0FHR19DTlQwX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTJDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQwX1NUUlVDLCAqUFRYX0FHR19DTlQwX1NUUlVDOworI2VuZGlmCisvLyBEZWJ1ZyBjb3VudGVyCisjZGVmaW5lIFRYX0FHR19DTlQxCTB4MTcyNAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU0Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTNDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQxX1NUUlVDLCAqUFRYX0FHR19DTlQxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUzQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTRDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQxX1NUUlVDLCAqUFRYX0FHR19DTlQxX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX0FHR19DTlQyCTB4MTcyOAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU2Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTVDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQyX1NUUlVDLCAqUFRYX0FHR19DTlQyX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU1Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTZDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQyX1NUUlVDLCAqUFRYX0FHR19DTlQyX1NUUlVDOworI2VuZGlmCisvLyBEZWJ1ZyBjb3VudGVyCisjZGVmaW5lIFRYX0FHR19DTlQzCTB4MTcyYworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQzX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU4Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTdDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQzX1NUUlVDLCAqUFRYX0FHR19DTlQzX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQzX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemU3Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZThDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQzX1NUUlVDLCAqUFRYX0FHR19DTlQzX1NUUlVDOworI2VuZGlmCisvLyBEZWJ1ZyBjb3VudGVyCisjZGVmaW5lIFRYX0FHR19DTlQ0CTB4MTczMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQ0X1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxMENvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemU5Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UNF9TVFJVQywgKlBUWF9BR0dfQ05UNF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UNF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplOUNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxMENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDRfU1RSVUMsICpQVFhfQUdHX0NOVDRfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfQUdHX0NOVDUJMHgxNzM0CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVFhfQUdHX0NOVDVfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTEyQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTExQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UNV9TVFJVQywgKlBUWF9BR0dfQ05UNV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UNV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTFDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTJDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQ1X1NUUlVDLCAqUFRYX0FHR19DTlQ1X1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX0FHR19DTlQ2CQkweDE3MzgKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UNl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTRDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTNDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQ2X1NUUlVDLCAqUFRYX0FHR19DTlQ2X1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQ2X1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxM0NvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxNENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDZfU1RSVUMsICpQVFhfQUdHX0NOVDZfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfQUdHX0NOVDcJCTB4MTczYworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQ3X1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxNkNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxNUNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDdfU1RSVUMsICpQVFhfQUdHX0NOVDdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfQUdHX0NOVDdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTE1Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTE2Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UN19TVFJVQywgKlBUWF9BR0dfQ05UN19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBNUERVX0RFTlNJVFlfQ05UCQkweDE3NDAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9NUERVX0RFTl9DTlRfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgUlhaZXJvRGVsQ291bnQ7CS8vUlggemVybyBsZW5ndGggZGVsaW1pdGVyIGNvdW50CisJICAgIFVTSE9SVCAgVFhaZXJvRGVsQ291bnQ7CS8vVFggemVybyBsZW5ndGggZGVsaW1pdGVyIGNvdW50CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNUERVX0RFTl9DTlRfU1RSVUMsICpQTVBEVV9ERU5fQ05UX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX01QRFVfREVOX0NOVF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBUWFplcm9EZWxDb3VudDsJLy9UWCB6ZXJvIGxlbmd0aCBkZWxpbWl0ZXIgY291bnQKKwkgICAgVVNIT1JUICBSWFplcm9EZWxDb3VudDsJLy9SWCB6ZXJvIGxlbmd0aCBkZWxpbWl0ZXIgY291bnQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1QRFVfREVOX0NOVF9TVFJVQywgKlBNUERVX0RFTl9DTlRfU1RSVUM7CisjZW5kaWYKKy8vCisvLyBUWFJYIGNvbnRyb2wgcmVnaXN0ZXJzIC0gYmFzZSBhZGRyZXNzIDB4MzAwMAorLy8KKy8vIHJ0Mjg2MGIgIFVOS05PV04gcmVnIHVzZSBSL08gUmVnIEFkZHIgMHg3N2QwIGZpcnN0Li4KKyNkZWZpbmUgVFhSWF9DU1IxICAgICAgICAgICAweDc3ZDAKKworLy8KKy8vIFNlY3VyaXR5IGtleSB0YWJsZSBtZW1vcnksIGJhc2UgYWRkcmVzcyA9IDB4MTAwMAorLy8KKyNkZWZpbmUgTUFDX1dDSURfQkFTRQkJMHgxODAwIC8vOC1ieXRlcyh1c2Ugb25seSA2LWJ5dGVzKSAqIDI1NiBlbnRyeSA9CisjZGVmaW5lIEhXX1dDSURfRU5UUllfU0laRSAgIDgKKyNkZWZpbmUgUEFJUldJU0VfS0VZX1RBQkxFX0JBU0UgICAgIDB4NDAwMCAgICAgIC8vIDMyLWJ5dGUgKiAyNTYtZW50cnkgPSAgLWJ5dGUKKyNkZWZpbmUgSFdfS0VZX0VOVFJZX1NJWkUgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgUEFJUldJU0VfSVZFSVZfVEFCTEVfQkFTRSAgICAgMHg2MDAwICAgICAgLy8gOC1ieXRlICogMjU2LWVudHJ5ID0gIC1ieXRlCisjZGVmaW5lIE1BQ19JVkVJVl9UQUJMRV9CQVNFICAgICAweDYwMDAgICAgICAvLyA4LWJ5dGUgKiAyNTYtZW50cnkgPSAgLWJ5dGUKKyNkZWZpbmUgSFdfSVZFSVZfRU5UUllfU0laRSAgIDgKKyNkZWZpbmUgTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgICAgIDB4NjgwMCAgICAgIC8vIDQtYnl0ZSAqIDI1Ni1lbnRyeSA9ICAtYnl0ZQorI2RlZmluZSBIV19XQ0lEX0FUVFJJX1NJWkUgICA0CisjZGVmaW5lIFdDSURfUkVTRVJWRUQgICAgICAgICAgCQkweDZiZmMKKyNkZWZpbmUgU0hBUkVEX0tFWV9UQUJMRV9CQVNFICAgICAgIDB4NmMwMCAgICAgIC8vIDMyLWJ5dGUgKiAxNi1lbnRyeSA9IDUxMi1ieXRlCisjZGVmaW5lIFNIQVJFRF9LRVlfTU9ERV9CQVNFICAgICAgIDB4NzAwMCAgICAgIC8vIDMyLWJ5dGUgKiAxNi1lbnRyeSA9IDUxMi1ieXRlCisjZGVmaW5lIEhXX1NIQVJFRF9LRVlfTU9ERV9TSVpFICAgNAorI2RlZmluZSBTSEFSRURLRVlUQUJMRQkJCTAKKyNkZWZpbmUgUEFJUldJU0VLRVlUQUJMRQkJCTEKKworCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfU0hBUkVES0VZX01PREVfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkzQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkyQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkxQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkwQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkzQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkyQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkxQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkwQ2lwaGVyQWxnOjM7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlTSEFSRURLRVlfTU9ERV9TVFJVQywgKlBTSEFSRURLRVlfTU9ERV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9TSEFSRURLRVlfTU9ERV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkwQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkxQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkyQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczBLZXkzQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkwQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkxQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkyQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwkJVUlOVDMyICAgICAgIEJzczFLZXkzQ2lwaGVyQWxnOjM7CisJCVVJTlQzMiAgICAgICA6MTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVNIQVJFREtFWV9NT0RFX1NUUlVDLCAqUFNIQVJFREtFWV9NT0RFX1NUUlVDOworI2VuZGlmCisvLyA2NC1lbnRyeSBmb3IgcGFpcndpc2Uga2V5IHRhYmxlCit0eXBlZGVmIHN0cnVjdCBfSFdfV0NJRF9FTlRSWSB7ICAvLyA4LWJ5dGUgcGVyIGVudHJ5CisgICAgVUNIQVIgICBBZGRyZXNzWzZdOworICAgIFVDSEFSICAgUnN2WzJdOworfSBIV19XQ0lEX0VOVFJZLCBQSFdfV0NJRF9FTlRSWTsKKworCisKKy8vCisvLyBPdGhlciBvbi1jaGlwIHNoYXJlZCBtZW1vcnkgc3BhY2UsIGJhc2UgPSAweDIwMDAKKy8vCisKKy8vIENJUyBzcGFjZSAtIGJhc2UgYWRkcmVzcyA9IDB4MjAwMAorI2RlZmluZSBIV19DSVNfQkFTRSAgICAgICAgICAgICAweDIwMDAKKworLy8gQ2Fycmllci1zZW5zZSBDVFMgZnJhbWUgYmFzZSBhZGRyZXNzLiBJdCdzIHdoZXJlIG1hYyBzdG9yZXMgY2Fycmllci1zZW5zZSBmcmFtZSBmb3IgY2Fycmllci1zZW5zZSBmdW5jdGlvbi4KKyNkZWZpbmUgSFdfQ1NfQ1RTX0JBU0UJCQkweDc3MDAKKy8vIERGUyBDVFMgZnJhbWUgYmFzZSBhZGRyZXNzLiBJdCdzIHdoZXJlIG1hYyBzdG9yZXMgQ1RTIGZyYW1lIGZvciBERlMuCisjZGVmaW5lIEhXX0RGU19DVFNfQkFTRQkJCTB4Nzc4MAorI2RlZmluZSBIV19DVFNfRlJBTUVfU0laRQkJMHg4MAorCisvLyAyMDA0LTExLTA4IGpvaG4gLSBzaW5jZSBOVUxMIGZyYW1lIHdvbid0IGJlIHRoYXQgbG9uZyAoMjU2IGJ5dGUpLiBXZSBzdGVhbCAxNiB0YWlsIGJ5dGVzCisvLyB0byBzYXZlIGRlYnVnZ2luZyBzZXR0aW5ncworI2RlZmluZSBIV19ERUJVR19TRVRUSU5HX0JBU0UgICAweDc3ZjAgIC8vIDB4NzdmMH4weDc3ZmYgdG90YWwgMTYgYnl0ZXMKKyNkZWZpbmUgSFdfREVCVUdfU0VUVElOR19CQVNFMiAgIDB4Nzc3MCAgLy8gMHg3N2YwfjB4NzdmZiB0b3RhbCAxNiBieXRlcworCisvLyBJbiBvcmRlciB0byBzdXBwb3J0IG1heGltdW0gOCBNQlNTIGFuZCBpdHMgbWF4aW11bSBsZW5ndGggaXMgNTEyIGZvciBlYWNoIGJlYWNvbgorLy8gVGhyZWUgc2VjdGlvbiBkaXNjb250aW51ZSBtZW1vcnkgc2VnbWVudHMgd2lsbCBiZSB1c2VkLgorLy8gMS4gVGhlIG9yaWdpbmFsIHJlZ2lvbiBmb3IgQkNOIDB+MworLy8gMi4gRXh0cmFjdCBtZW1vcnkgZnJvbSBGQ0UgdGFibGUgZm9yIEJDTiA0fjUKKy8vIDMuIEV4dHJhY3QgbWVtb3J5IGZyb20gUGFpci13aXNlIGtleSB0YWJsZSBmb3IgQkNOIDZ+NworLy8JICBJdCBvY2N1cGllZCB0aG9zZSBtZW1vcnkgb2Ygd2NpZCAyMzh+MjUzIGZvciBCQ04gNgorLy8JCQkJCQkgICAgICBhbmQgd2NpZCAyMjJ+MjM3IGZvciBCQ04gNworI2RlZmluZSBIV19CRUFDT05fTUFYX1NJWkUgICAgICAweDEwMDAgLyogdW5pdDogYnl0ZSAqLworI2RlZmluZSBIV19CRUFDT05fQkFTRTAgICAgICAgICAweDc4MDAKKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0UxICAgICAgICAgMHg3QTAwCisjZGVmaW5lIEhXX0JFQUNPTl9CQVNFMiAgICAgICAgIDB4N0MwMAorI2RlZmluZSBIV19CRUFDT05fQkFTRTMgICAgICAgICAweDdFMDAKKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0U0ICAgICAgICAgMHg3MjAwCisjZGVmaW5lIEhXX0JFQUNPTl9CQVNFNSAgICAgICAgIDB4NzQwMAorI2RlZmluZSBIV19CRUFDT05fQkFTRTYgICAgICAgICAweDVEQzAKKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0U3ICAgICAgICAgMHg1QkMwCisKKyNkZWZpbmUgSFdfQkVBQ09OX01BWF9DT1VOVCAgICAgOAorI2RlZmluZSBIV19CRUFDT05fT0ZGU0VUCQkweDAyMDAKKyNkZWZpbmUgSFdfQkVBQ09OX0NPTlRFTlRfTEVOCShIV19CRUFDT05fT0ZGU0VUIC0gVFhXSV9TSVpFKQorCisvLyBIT1NULU1DVSBzaGFyZWQgbWVtb3J5IC0gYmFzZSBhZGRyZXNzID0gMHgyMTAwCisjZGVmaW5lIEhPU1RfQ01EX0NTUgkJMHg0MDQKKyNkZWZpbmUgSDJNX01BSUxCT1hfQ1NSICAgICAgICAgMHg3MDEwCisjZGVmaW5lIEgyTV9NQUlMQk9YX0NJRCAgICAgICAgIDB4NzAxNAorI2RlZmluZSBIMk1fTUFJTEJPWF9TVEFUVVMgICAgICAweDcwMWMKKyNkZWZpbmUgSDJNX0lOVF9TUkMgICAgICAgICAgICAgMHg3MDI0CisjZGVmaW5lIEgyTV9CQlBfQUdFTlQgICAgICAgICAgIDB4NzAyOAorI2RlZmluZSBNMkhfQ01EX0RPTkVfQ1NSICAgICAgICAweDAwMGMKKyNkZWZpbmUgTUNVX1RYT1BfQVJSQVlfQkFTRSAgICAgMHgwMDBjICAgLy8gVE9ETzogdG8gYmUgcHJvdmlkZWQgYnkgQWxiZXJ0CisjZGVmaW5lIE1DVV9UWE9QX0VOVFJZX1NJWkUgICAgIDMyICAgICAgIC8vIFRPRE86IHRvIGJlIHByb3ZpZGVkIGJ5IEFsYmVydAorI2RlZmluZSBNQVhfTlVNX09GX1RYT1BfRU5UUlkgICAxNiAgICAgICAvLyBUT0RPOiBtdXN0IGJlIHNhbWUgd2l0aCA4MDUxIGZpcm13YXJlCisjZGVmaW5lIE1DVV9NQk9YX1ZFUlNJT04gICAgICAgIDB4MDEgICAgIC8vIFRPRE86IHRvIGJlIGNvbmZpcm1lZCBieSBBbGJlcnQKKyNkZWZpbmUgTUNVX01CT1hfVkVSU0lPTl9PRkZTRVQgNSAgICAgICAgLy8gVE9ETzogdG8gYmUgcHJvdmlkZWQgYnkgQWxiZXJ0CisKKy8vCisvLyBIb3N0IERNQSByZWdpc3RlcnMgLSBiYXNlIGFkZHJlc3MgMHgyMDAgLiAgVFgwLTM9RURDQVFpZDAtMywgVFg0PUhDQ0EsIFRYNT1NR01ULAorLy8KKy8vCisvLyAgRE1BIFJJTkcgREVTQ1JJUFRPUgorLy8KKyNkZWZpbmUgRTJQUk9NX0NTUiAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgSU9fQ05UTF9DU1IgICAgICAgICAweDc3ZDAKKworI2lmZGVmIFJUMjg3MAorLy8gODA1MSBmaXJtd2FyZSBpbWFnZSBmb3IgdXNiIC0gdXNlIGxhc3QtaGFsZiBiYXNlIGFkZHJlc3MgPSAweDMwMDAKKyNkZWZpbmUgRklSTVdBUkVfSU1BR0VfQkFTRSAgICAgMHgzMDAwCisjZGVmaW5lIE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFIDB4MTAwMCAgICAvLyA0a2J5dGUKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworLy8gVE9ETzogPz8/Pz8gb2xkIFJUMjU2MCByZWdpc3RlcnMuIHRvIGtlZXAgdGhlbSBvciByZW1vdmUgdGhlbT8KKy8vI2RlZmluZSBNQ0FTVDAgICAgICAgICAgICAgICAgICAweDAxNzggIC8vIG11bHRpY2FzdCBmaWx0ZXIgcmVnaXN0ZXIgMAorLy8jZGVmaW5lIE1DQVNUMSAgICAgICAgICAgICAgICAgIDB4MDE3YyAgLy8gbXVsdGljYXN0IGZpbHRlciByZWdpc3RlciAxCisKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVHggLwlSeCAvIE1nbXQgcmluZyBkZXNjcmlwdG9yIGRlZmluaXRpb24KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gdGhlIGZvbGxvd2luZyBQSUQgdmFsdWVzIGFyZSB1c2VkIHRvIG1hcmsgb3V0Z29pbmcgZnJhbWUgdHlwZSBpbiBUWEQtPlBJRCBzbyB0aGF0CisvLyBwcm9wZXIgVFggc3RhdGlzdGljcyBjYW4gYmUgY29sbGVjdGVkIGJhc2VkIG9uIHRoZXNlIGNhdGVnb3JpZXMKKy8vIGIzLTIgb2YgUElEIGZpZWxkIC0KKyNkZWZpbmUgUElEX01HTVQJCQkweDA1CisjZGVmaW5lIFBJRF9CRUFDT04JCQkweDBjCisjZGVmaW5lIFBJRF9EQVRBX05PUk1BTFVDQVNUCSAJMHgwMgorI2RlZmluZSBQSURfREFUQV9BTVBEVQkgCTB4MDQKKyNkZWZpbmUgUElEX0RBVEFfTk9fQUNLICAgIAkweDA4CisjZGVmaW5lIFBJRF9EQVRBX05PVF9OT1JNX0FDSwkgCTB4MDMKKy8vIHZhbHVlIGRvbWFpbiBvZiBwVHhELT5Ib3N0UUlkICg0LWJpdDogMH4xNSkKKyNkZWZpbmUgUUlEX0FDX0JLICAgICAgICAgICAgICAgMSAgIC8vIG1lZXQgQUNJIGRlZmluaXRpb24gaW4gODAyLjExZQorI2RlZmluZSBRSURfQUNfQkUgICAgICAgICAgICAgICAwICAgLy8gbWVldCBBQ0kgZGVmaW5pdGlvbiBpbiA4MDIuMTFlCisjZGVmaW5lIFFJRF9BQ19WSSAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUUlEX0FDX1ZPICAgICAgICAgICAgICAgMworI2RlZmluZSBRSURfSENDQSAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE5VTV9PRl9UWF9SSU5HICAgICAgICAgIDUKKyNkZWZpbmUgUUlEX01HTVQgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgUUlEX1JYICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgUUlEX09USEVSICAgICAgICAgICAgICAgMTUKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJCUCAmIFJGCWRlZmluaXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZQlCVVNZCQkgICAgICAgICAgICAgICAgMQorI2RlZmluZQlJRExFCQkgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lCVJGX1IwMAkJCQkJICAgIDAKKyNkZWZpbmUJUkZfUjAxCQkJCQkgICAgMQorI2RlZmluZQlSRl9SMDIJCQkJCSAgICAyCisjZGVmaW5lCVJGX1IwMwkJCQkJICAgIDMKKyNkZWZpbmUJUkZfUjA0CQkJCQkgICAgNAorI2RlZmluZQlSRl9SMDUJCQkJCSAgICA1CisjZGVmaW5lCVJGX1IwNgkJCQkJICAgIDYKKyNkZWZpbmUJUkZfUjA3CQkJCQkgICAgNworI2RlZmluZQlSRl9SMDgJCQkJCSAgICA4CisjZGVmaW5lCVJGX1IwOQkJCQkJICAgIDkKKyNkZWZpbmUJUkZfUjEwCQkJCQkgICAgMTAKKyNkZWZpbmUJUkZfUjExCQkJCQkgICAgMTEKKyNkZWZpbmUJUkZfUjEyCQkJCQkgICAgMTIKKyNkZWZpbmUJUkZfUjEzCQkJCQkgICAgMTMKKyNkZWZpbmUJUkZfUjE0CQkJCQkgICAgMTQKKyNkZWZpbmUJUkZfUjE1CQkJCQkgICAgMTUKKyNkZWZpbmUJUkZfUjE2CQkJCQkgICAgMTYKKyNkZWZpbmUJUkZfUjE3CQkJCQkgICAgMTcKKyNkZWZpbmUJUkZfUjE4CQkJCQkgICAgMTgKKyNkZWZpbmUJUkZfUjE5CQkJCQkgICAgMTkKKyNkZWZpbmUJUkZfUjIwCQkJCQkgICAgMjAKKyNkZWZpbmUJUkZfUjIxCQkJCQkgICAgMjEKKyNkZWZpbmUJUkZfUjIyCQkJCQkgICAgMjIKKyNkZWZpbmUJUkZfUjIzCQkJCQkgICAgMjMKKyNkZWZpbmUJUkZfUjI0CQkJCQkgICAgMjQKKyNkZWZpbmUJUkZfUjI1CQkJCQkgICAgMjUKKyNkZWZpbmUJUkZfUjI2CQkJCQkgICAgMjYKKyNkZWZpbmUJUkZfUjI3CQkJCQkgICAgMjcKKyNkZWZpbmUJUkZfUjI4CQkJCQkgICAgMjgKKyNkZWZpbmUJUkZfUjI5CQkJCQkgICAgMjkKKyNkZWZpbmUJUkZfUjMwCQkJCQkgICAgMzAKKyNkZWZpbmUJUkZfUjMxCQkJCQkgICAgMzEKKworI2RlZmluZQlCQlBfUjAJCQkJCSAgICAwICAvLyB2ZXJzaW9uCisjZGVmaW5lCUJCUF9SMQkJCQkgICAgICAgIDEgIC8vIFRTU0kKKyNkZWZpbmUJQkJQX1IyICAgICAgICAgIAkJCTIgIC8vIFRYIGNvbmZpZ3VyZQorI2RlZmluZSBCQlBfUjMgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBCQlBfUjQgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBCQlBfUjUgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBCQlBfUjYgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZQlCQlBfUjE0CQkJICAgICAgICAgICAgMTQgLy8gUlggY29uZmlndXJlCisjZGVmaW5lIEJCUF9SMTYgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBCQlBfUjE3ICAgICAgICAgICAgICAgICAgICAgMTcgLy8gUlggc2Vuc2liaWxpdHkKKyNkZWZpbmUgQkJQX1IxOCAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEJCUF9SMjEgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBCQlBfUjIyICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQkJQX1IyNCAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEJCUF9SMjUgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBCQlBfUjMxICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQkJQX1I0OSAgICAgICAgICAgICAgICAgICAgIDQ5IC8vVFNTSQorI2RlZmluZSBCQlBfUjUwICAgICAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgQkJQX1I1MSAgICAgICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIEJCUF9SNTIgICAgICAgICAgICAgICAgICAgICA1MgorI2RlZmluZSBCQlBfUjU1ICAgICAgICAgICAgICAgICAgICAgNTUKKyNkZWZpbmUgQkJQX1I2MiAgICAgICAgICAgICAgICAgICAgIDYyIC8vIFJ4IFNRMCBUaHJlc2hvbGQgSElHSAorI2RlZmluZSBCQlBfUjYzICAgICAgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgQkJQX1I2NCAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEJCUF9SNjUgICAgICAgICAgICAgICAgICAgICA2NQorI2RlZmluZSBCQlBfUjY2ICAgICAgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgQkJQX1I2NyAgICAgICAgICAgICAgICAgICAgIDY3CisjZGVmaW5lIEJCUF9SNjggICAgICAgICAgICAgICAgICAgICA2OAorI2RlZmluZSBCQlBfUjY5ICAgICAgICAgICAgICAgICAgICAgNjkKKyNkZWZpbmUgQkJQX1I3MCAgICAgICAgICAgICAgICAgICAgIDcwIC8vIFJ4IEFHQyBTUSBDQ0sgWGNvcnIgdGhyZXNob2xkCisjZGVmaW5lIEJCUF9SNzMgICAgICAgICAgICAgICAgICAgICA3MworI2RlZmluZSBCQlBfUjc1CQkJCQkJNzUKKyNkZWZpbmUgQkJQX1I3NyAgICAgICAgICAgICAgICAgICAgIDc3CisjZGVmaW5lIEJCUF9SNzkgICAgICAgICAgICAgICAgICAgICA3OQorI2RlZmluZSBCQlBfUjgwICAgICAgICAgICAgICAgICAgICAgODAKKyNkZWZpbmUgQkJQX1I4MSAgICAgICAgICAgICAgICAgICAgIDgxCisjZGVmaW5lIEJCUF9SODIgICAgICAgICAgICAgICAgICAgICA4MgorI2RlZmluZSBCQlBfUjgzICAgICAgICAgICAgICAgICAgICAgODMKKyNkZWZpbmUgQkJQX1I4NCAgICAgICAgICAgICAgICAgICAgIDg0CisjZGVmaW5lIEJCUF9SODYJCQkJCQk4NgorI2RlZmluZSBCQlBfUjkxCQkJCQkJOTEKKyNkZWZpbmUgQkJQX1I5MgkJCQkJCTkyCisjZGVmaW5lIEJCUF9SOTQgICAgICAgICAgICAgICAgICAgICA5NCAvLyBUeCBHYWluIENvbnRyb2wKKyNkZWZpbmUgQkJQX1IxMDMgICAgICAgICAgICAgICAgICAgIDEwMworI2RlZmluZSBCQlBfUjEwNSAgICAgICAgICAgICAgICAgICAgMTA1CisjZGVmaW5lIEJCUF9SMTEzICAgICAgICAgICAgICAgICAgICAxMTMKKyNkZWZpbmUgQkJQX1IxMTQgICAgICAgICAgICAgICAgICAgIDExNAorI2RlZmluZSBCQlBfUjExNSAgICAgICAgICAgICAgICAgICAgMTE1CisjZGVmaW5lIEJCUF9SMTE2ICAgICAgICAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgQkJQX1IxMTcgICAgICAgICAgICAgICAgICAgIDExNworI2RlZmluZSBCQlBfUjExOCAgICAgICAgICAgICAgICAgICAgMTE4CisjZGVmaW5lIEJCUF9SMTE5ICAgICAgICAgICAgICAgICAgICAxMTkKKyNkZWZpbmUgQkJQX1IxMjAgICAgICAgICAgICAgICAgICAgIDEyMAorI2RlZmluZSBCQlBfUjEyMSAgICAgICAgICAgICAgICAgICAgMTIxCisjZGVmaW5lIEJCUF9SMTIyICAgICAgICAgICAgICAgICAgICAxMjIKKyNkZWZpbmUgQkJQX1IxMjMgICAgICAgICAgICAgICAgICAgIDEyMworI2lmZGVmIFJUMzB4eAorI2RlZmluZSBCQlBfUjEzOCAgICAgICAgICAgICAgICAgICAgMTM4IC8vIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwLCBBREMgZHluYW1pYyBvbi9vZmYgY29udHJvbAorI2VuZGlmIC8vIFJUMzB4eCAvLworCisKKyNkZWZpbmUgQkJQUjk0X0RFRkFVTFQgICAgICAgICAgICAgIDB4MDYgLy8gQWRkIDEgdmFsdWUgd2lsbCBnYWluIDFkYgorCisvLyNkZWZpbmUgUEhZX1RSX1NXSVRDSF9USU1FICAgICAgICAgIDUgIC8vIHVzZWMKKworLy8jZGVmaW5lIEJCUF9SMTdfTE9XX1NFTlNJQklMSVRZICAgICAweDUwCisvLyNkZWZpbmUgQkJQX1IxN19NSURfU0VOU0lCSUxJVFkgICAgIDB4NDEKKy8vI2RlZmluZSBCQlBfUjE3X0RZTkFNSUNfVVBfQk9VTkQgICAgMHg0MAorI2RlZmluZSBSU1NJX0ZPUl9WRVJZX0xPV19TRU5TSUJJTElUWSAtMzUKKyNkZWZpbmUgUlNTSV9GT1JfTE9XX1NFTlNJQklMSVRZICAgICAgLTU4CisjZGVmaW5lIFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkgIC04MAorI2RlZmluZSBSU1NJX0ZPUl9NSURfU0VOU0lCSUxJVFkgICAgICAtOTAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFRVBST00gZGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIEVFRE8gICAgICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEVFREkgICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEVFQ1MgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEVFU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEVFUkwgICAgICAgICAgICAgICAgICAgICAgICAweDgwCisKKyNkZWZpbmUgRUVQUk9NX1dSSVRFX09QQ09ERSAgICAgICAgIDB4MDUKKyNkZWZpbmUgRUVQUk9NX1JFQURfT1BDT0RFICAgICAgICAgIDB4MDYKKyNkZWZpbmUgRUVQUk9NX0VXRFNfT1BDT0RFICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRUVQUk9NX0VXRU5fT1BDT0RFICAgICAgICAgIDB4MTMKKworI2RlZmluZQlOVU1fRUVQUk9NX0JCUF9QQVJNUwkJMTkJCQkvLyBJbmNsdWRlIE5JQyBDb25maWcgMCwgMSwgQ1IsIFRYIEFMQyBzdGVwLCBCQlBzCisjZGVmaW5lCU5VTV9FRVBST01fVFhfR19QQVJNUwkJNworI2RlZmluZQlFRVBST01fTklDMV9PRkZTRVQgICAgICAgICAgMHgzNAkJLy8gVGhlIGFkZHJlc3MgaXMgZnJvbSBOSUMgY29uZmlnIDAsIG5vdCBCQlAgcmVnaXN0ZXIgSUQKKyNkZWZpbmUJRUVQUk9NX05JQzJfT0ZGU0VUICAgICAgICAgIDB4MzYJCS8vIFRoZSBhZGRyZXNzIGlzIGZyb20gTklDIGNvbmZpZyAwLCBub3QgQkJQIHJlZ2lzdGVyIElECisjZGVmaW5lCUVFUFJPTV9CQlBfQkFTRV9PRkZTRVQJCTB4ZjAJCS8vIFRoZSBhZGRyZXNzIGlzIGZyb20gTklDIGNvbmZpZyAwLCBub3QgQkJQIHJlZ2lzdGVyIElECisjZGVmaW5lCUVFUFJPTV9HX1RYX1BXUl9PRkZTRVQJCTB4NTIKKyNkZWZpbmUJRUVQUk9NX0dfVFgyX1BXUl9PRkZTRVQJCTB4NjAKKyNkZWZpbmUgRUVQUk9NX0xFRDFfT0ZGU0VUCQkJMHgzYworI2RlZmluZSBFRVBST01fTEVEMl9PRkZTRVQJCQkweDNlCisjZGVmaW5lIEVFUFJPTV9MRUQzX09GRlNFVAkJCTB4NDAKKyNkZWZpbmUgRUVQUk9NX0xOQV9PRkZTRVQJCQkweDQ0CisjZGVmaW5lIEVFUFJPTV9SU1NJX0JHX09GRlNFVAkJMHg0NgorI2RlZmluZSBFRVBST01fUlNTSV9BX09GRlNFVAkJMHg0YQorI2RlZmluZSBFRVBST01fREVGSU5FX01BWF9UWFBXUgkJMHg0ZQorI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEVfMjBNSFpfMl80RwkweGRlCS8vIDIwTUhaIDIuNEcgdHggcG93ZXIuCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JZUkFURV80ME1IWl8yXzRHCTB4ZWUJLy8gNDBNSFogMi40RyB0eCBwb3dlci4KKyNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzVHCQkweGZhCS8vIDIwTUhaIDVHIHR4IHBvd2VyLgorI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfNUcJCTB4MTBhCS8vIDQwTUhaIDVHIHR4IHBvd2VyLgorI2RlZmluZSBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICAgICAgMHg3OAorI2RlZmluZSBFRVBST01fQV9UWDJfUFdSX09GRlNFVCAgICAgIDB4YTYKKy8vI2RlZmluZSBFRVBST01fSmFwYW5fVFhfUFdSX09GRlNFVCAgICAgIDB4OTAgLy8gODAyLjExagorLy8jZGVmaW5lIEVFUFJPTV9KYXBhbl9UWDJfUFdSX09GRlNFVCAgICAgIDB4YmUKKy8vI2RlZmluZSBFRVBST01fVFNTSV9SRUZfT0ZGU0VUCTB4NTQKKy8vI2RlZmluZSBFRVBST01fVFNTSV9ERUxUQV9PRkZTRVQJMHgyNAorLy8jZGVmaW5lIEVFUFJPTV9DQ0tfVFhfUFdSX09GRlNFVCAgMHg2MgorLy8jZGVmaW5lIEVFUFJPTV9DQUxJQlJBVEVfT0ZGU0VUCTB4N2MKKyNkZWZpbmUgRUVQUk9NX1ZFUlNJT05fT0ZGU0VUICAgICAgIDB4MDIKKyNkZWZpbmUJRUVQUk9NX0ZSRVFfT0ZGU0VUCQkJMHgzYQorI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEUgCTB4ZGUJLy8gMjBNSFogcG93ZXIuCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0RFTFRBCQkweDUwCS8vIDIwTUhaIEFORCA0MCBNSFogdXNlIGRpZmZlcmVudCBwb3dlci4gVGhpcyBpcyBkZWx0YSBpbiA0ME1IWi4KKyNkZWZpbmUgVkFMSURfRUVQUk9NX1ZFUlNJT04gICAgICAgIDEKKworLy8gUGFpcktleU1vZGUgZGVmaW5pdGlvbgorI2RlZmluZSBQS01PREVfTk9ORSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQS01PREVfV0VQNjQgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQS01PREVfV0VQMTI4ICAgICAgICAgICAgICAgMgorI2RlZmluZSBQS01PREVfVEtJUCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBQS01PREVfQUVTICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBQS01PREVfQ0tJUDY0ICAgICAgICAgICAgICAgNQorI2RlZmluZSBQS01PREVfQ0tJUDEyOCAgICAgICAgICAgICAgNgorI2RlZmluZSBQS01PREVfVEtJUF9OT19NSUMgICAgICAgICAgNyAgICAgICAvLyBNSUMgYXBwZW5kZWQgYnkgZHJpdmVyOiBub3QgYSB2YWxpZCB2YWx1ZSBpbiBoYXJkd2FyZSBrZXkgdGFibGUKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBXQ0lEICBmb3JtYXQKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy83LjEJV0NJRCAgRU5UUlkgIGZvcm1hdCAgOiA4Ynl0ZXMKK3R5cGVkZWYJc3RydWN0CV9XQ0lEX0VOVFJZX1NUUlVDIHsKKwlVQ0hBUgkJUlhCQUJpdG1hcDc7ICAgIC8vIGJpdDAgZm9yIFRJRDgsIGJpdDcgZm9yIFRJRCAxNQorCVVDSEFSCQlSWEJBQml0bWFwMDsgICAgLy8gYml0MCBmb3IgVElEMCwgYml0NyBmb3IgVElEIDcKKwlVQ0hBUgkJTUFDWzZdOwkvLyAwIGZvciBzaGFyZWQga2V5IHRhYmxlLiAgMSBmb3IgcGFpcndpc2Uga2V5IHRhYmxlCit9CVdDSURfRU5UUllfU1RSVUMsICpQV0NJRF9FTlRSWV9TVFJVQzsKKworLy84LjEuMQlTRUNVUklUWSAgS0VZICBmb3JtYXQgIDogOERXCisvLyAzMi1ieXRlIHBlciBlbnRyeSwgdG90YWwgMTYtZW50cnkgZm9yIHNoYXJlZCBrZXkgdGFibGUsIDY0LWVudHJ5IGZvciBwYWlyd2lzZSBrZXkgdGFibGUKK3R5cGVkZWYgc3RydWN0IF9IV19LRVlfRU5UUlkgeyAgICAgICAgICAvLyAzMi1ieXRlIHBlciBlbnRyeQorICAgIFVDSEFSICAgS2V5WzE2XTsKKyAgICBVQ0hBUiAgIFR4TWljWzhdOworICAgIFVDSEFSICAgUnhNaWNbOF07Cit9IEhXX0tFWV9FTlRSWSwgKlBIV19LRVlfRU5UUlk7CisKKy8vOC4xLjIJSVYvRUlWICBmb3JtYXQgIDogMkRXCisKKy8vOC4xLjMJUlggYXR0cmlidXRlIGVudHJ5IGZvcm1hdCAgOiAxRFcKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlfTUFDX0FUVFJJQlVURV9TVFJVQyB7CisJVUlOVDMyCQlyc3Y6MjI7CisJVUlOVDMyCQlSWFdJVURGOjM7CisJVUlOVDMyCQlCU1NJRElkeDozOyAvL211bHRpcGxlQlNTIGluZGV4IGZvciB0aGUgV0NJRAorCVVJTlQzMgkJUGFpcktleU1vZGU6MzsKKwlVSU5UMzIJCUtleVRhYjoxOwkvLyAwIGZvciBzaGFyZWQga2V5IHRhYmxlLiAgMSBmb3IgcGFpcndpc2Uga2V5IHRhYmxlCit9CU1BQ19BVFRSSUJVVEVfU1RSVUMsICpQTUFDX0FUVFJJQlVURV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXN0cnVjdAlfTUFDX0FUVFJJQlVURV9TVFJVQyB7CisJVUlOVDMyCQlLZXlUYWI6MTsJLy8gMCBmb3Igc2hhcmVkIGtleSB0YWJsZS4gIDEgZm9yIHBhaXJ3aXNlIGtleSB0YWJsZQorCVVJTlQzMgkJUGFpcktleU1vZGU6MzsKKwlVSU5UMzIJCUJTU0lESWR4OjM7IC8vbXVsdGlwbGVCU1MgaW5kZXggZm9yIHRoZSBXQ0lECisJVUlOVDMyCQlSWFdJVURGOjM7CisJVUlOVDMyCQlyc3Y6MjI7Cit9CU1BQ19BVFRSSUJVVEVfU1RSVUMsICpQTUFDX0FUVFJJQlVURV9TVFJVQzsKKyNlbmRpZgorCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVFggLyBSWCByaW5nIGRlc2NyaXB0b3IgZm9ybWF0CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gdGhlIGZpcnN0IDI0LWJ5dGUgaW4gVFhEIGlzIGNhbGxlZCBUWElORk8gYW5kIHdpbGwgYmUgRE1BZWQgdG8gTUFDIGJsb2NrIHRocm91Z2ggVFhGSUZPLgorLy8gTUFDIGJsb2NrIHVzZSB0aGlzIFRYSU5GTyB0byBjb250cm9sIHRoZSB0cmFuc21pc3Npb24gYmVoYXZpb3Igb2YgdGhpcyBmcmFtZS4KKyNkZWZpbmUgRklGT19NR01UICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZJRk9fSENDQSAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGSUZPX0VEQ0EgICAgICAgICAgICAgICAgIDIKKworLy8KKy8vIFRYIGRlc2NyaXB0b3IgZm9ybWF0LCBUeAlyaW5nLCBNZ210IFJpbmcKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9UWERfU1RSVUMgeworCS8vIFdvcmQgMAorCVVJTlQzMgkJU0RQdHIwOworCS8vIFdvcmQgMQorCVVJTlQzMgkJRE1BRE9ORToxOworCVVJTlQzMgkJTGFzdFNlYzA6MTsKKwlVSU5UMzIJCVNETGVuMDoxNDsKKwlVSU5UMzIJCUJ1cnN0OjE7CisJVUlOVDMyCQlMYXN0U2VjMToxOworCVVJTlQzMgkJU0RMZW4xOjE0OworCS8vIFdvcmQgMgorCVVJTlQzMgkJU0RQdHIxOworCS8vIFdvcmQgMworCVVJTlQzMgkJSUNPOjE7CisJVUlOVDMyCQlVQ086MTsKKwlVSU5UMzIJCVRDTzoxOworCVVJTlQzMgkJcnN2OjI7CisJVUlOVDMyCQlRU0VMOjI7CS8vIHNlbGVjdCBvbi1jaGlwIEZJRk8gSUQgZm9yIDJuZC1zdGFnZSBvdXRwdXQgc2NoZWR1bGVyLjA6TUdNVCwgMTpIQ0NBIDI6RURDQQorCVVJTlQzMgkJV0lWOjE7CS8vIFdpcmVsZXNzIEluZm8gVmFsaWQuIDEgaWYgRHJpdmVyIGFscmVhZHkgZmlsbCBXSSwgIG8gaWYgRE1BIG5lZWRzIHRvIGNvcHkgV0kgdG8gY29ycmVjdHBvc2l0aW9uCisJVUlOVDMyCQlyc3YyOjI0OworfQlUWERfU1RSVUMsICpQVFhEX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfVFhEX1NUUlVDIHsKKwkvLyBXb3JkCTAKKwlVSU5UMzIJCVNEUHRyMDsKKwkvLyBXb3JkCTEKKwlVSU5UMzIJCVNETGVuMToxNDsKKwlVSU5UMzIJCUxhc3RTZWMxOjE7CisJVUlOVDMyCQlCdXJzdDoxOworCVVJTlQzMgkJU0RMZW4wOjE0OworCVVJTlQzMgkJTGFzdFNlYzA6MTsKKwlVSU5UMzIJCURNQURPTkU6MTsKKwkvL1dvcmQyCisJVUlOVDMyCQlTRFB0cjE7CisJLy9Xb3JkMworCVVJTlQzMgkJcnN2MjoyNDsKKwlVSU5UMzIJCVdJVjoxOwkvLyBXaXJlbGVzcyBJbmZvIFZhbGlkLiAxIGlmIERyaXZlciBhbHJlYWR5IGZpbGwgV0ksICBvIGlmIERNQSBuZWVkcyB0byBjb3B5IFdJIHRvIGNvcnJlY3Rwb3NpdGlvbgorCVVJTlQzMgkJUVNFTDoyOwkvLyBzZWxlY3Qgb24tY2hpcCBGSUZPIElEIGZvciAybmQtc3RhZ2Ugb3V0cHV0IHNjaGVkdWxlci4wOk1HTVQsIDE6SENDQSAyOkVEQ0EKKwlVSU5UMzIJCXJzdjoyOworCVVJTlQzMgkJVENPOjE7CS8vCisJVUlOVDMyCQlVQ086MTsJLy8KKwlVSU5UMzIJCUlDTzoxOwkvLworfQlUWERfU1RSVUMsICpQVFhEX1NUUlVDOworI2VuZGlmCisKKworLy8KKy8vIFRYRCBXaXJlbGVzcyBJbmZvcm1hdGlvbiBmb3JtYXQgZm9yIFR4IHJpbmcgYW5kIE1nbXQgUmluZworLy8KKy8vdHhvcCA6IGZvciB0eG9wIG1vZGUKKy8vIDA6dHhvcCBmb3IgdGhlIE1QRFUgZnJhbWUgd2lsbCBiZSBoYW5kbGVzIGJ5IEFTSUMgYnkgcmVnaXN0ZXIKKy8vIDEvMi8zOnRoZSBNUERVIGZyYW1lIGlzIHNlbmQgYWZ0ZXIgUElGUy9iYWNrb2ZmL1NJRlMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1RYV0lfU1RSVUMgeworCS8vIFdvcmQgMAorCVVJTlQzMgkJUEhZTU9ERToyOworCVVJTlQzMgkJVHhCRjoxOwkvLyAzKjMKKwlVSU5UMzIJCXJzdjI6MTsKKy8vCVVJTlQzMgkJcnN2MjoyOworCVVJTlQzMgkJSWZzOjE7CS8vCisJVUlOVDMyCQlTVEJDOjI7CS8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisJVUlOVDMyCQlTaG9ydEdJOjE7CisJVUlOVDMyCQlCVzoxOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVJTlQzMgkJTUNTOjc7CisKKwlVSU5UMzIJCXJzdjo2OworCVVJTlQzMgkJdHhvcDoyOwkvL3R4IGJhY2sgb2ZmIG1vZGUgMDpIVCBUWE9QIHJ1bGUgLCAxOlBJRlMgVFggLDI6QmFja29mZiwgMzpzaWZzIG9ubHkgd2hlbiBwcmV2aW91cyBmcmFtZSBleGNoYW5nZSBpcyBzdWNjZXNzZnVsLgorCVVJTlQzMgkJTXBkdURlbnNpdHk6MzsKKwlVSU5UMzIJCUFNUERVOjE7CisKKwlVSU5UMzIJCVRTOjE7CisJVUlOVDMyCQlDRkFDSzoxOworCVVJTlQzMgkJTUlNT3BzOjE7CS8vIHRoZSByZW1vdGUgcGVlciBpcyBpbiBkeW5hbWljIE1JTU8tUFMgbW9kZQorCVVJTlQzMgkJRlJBRzoxOwkJLy8gMSB0byBpbmZvcm0gVEtJUCBlbmdpbmUgdGhpcyBpcyBhIGZyYWdtZW50LgorCS8vIFdvcmQgMQorCVVJTlQzMgkJUGFja2V0SWQ6NDsKKwlVSU5UMzIJCU1QRFV0b3RhbEJ5dGVDb3VudDoxMjsKKwlVSU5UMzIJCVdpcmVsZXNzQ2xpSUQ6ODsKKwlVSU5UMzIJCUJBV2luU2l6ZTo2OworCVVJTlQzMgkJTlNFUToxOworCVVJTlQzMgkJQUNLOjE7CisJLy8gV29yZCAyCisJVUlOVDMyCQlJVjsKKwkvLyBXb3JkIDMKKwlVSU5UMzIJCUVJVjsKK30JVFhXSV9TVFJVQywgKlBUWFdJX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfVFhXSV9TVFJVQyB7CisJLy8gV29yZAkwCisJVUlOVDMyCQlGUkFHOjE7CQkvLyAxIHRvIGluZm9ybSBUS0lQIGVuZ2luZSB0aGlzIGlzIGEgZnJhZ21lbnQuCisJVUlOVDMyCQlNSU1PcHM6MTsJLy8gdGhlIHJlbW90ZSBwZWVyIGlzIGluIGR5bmFtaWMgTUlNTy1QUyBtb2RlCisJVUlOVDMyCQlDRkFDSzoxOworCVVJTlQzMgkJVFM6MTsKKworCVVJTlQzMgkJQU1QRFU6MTsKKwlVSU5UMzIJCU1wZHVEZW5zaXR5OjM7CisJVUlOVDMyCQl0eG9wOjI7CS8vRk9SICJUSElTIiBmcmFtZS4gMDpIVCBUWE9QIHJ1bGUgLCAxOlBJRlMgVFggLDI6QmFja29mZiwgMzpzaWZzIG9ubHkgd2hlbiBwcmV2aW91cyBmcmFtZSBleGNoYW5nZSBpcyBzdWNjZXNzZnVsLgorCVVJTlQzMgkJcnN2OjY7CisKKwlVSU5UMzIJCU1DUzo3OworCVVJTlQzMgkJQlc6MTsJLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwlVSU5UMzIJCVNob3J0R0k6MTsKKwlVSU5UMzIJCVNUQkM6MjsJLy8gMTogU1RCQyBzdXBwb3J0IE1DUyA9MC03LCAgIDIsMyA6IFJFU0VSVkUKKwlVSU5UMzIJCUlmczoxOwkvLworLy8JVUlOVDMyCQlyc3YyOjI7CS8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisJVUlOVDMyCQlyc3YyOjE7CisJVUlOVDMyCQlUeEJGOjE7CS8vIDMqMworCVVJTlQzMgkJUEhZTU9ERToyOworCS8vIFdvcmQJMQorCVVJTlQzMgkJQUNLOjE7CisJVUlOVDMyCQlOU0VROjE7CisJVUlOVDMyCQlCQVdpblNpemU6NjsKKwlVSU5UMzIJCVdpcmVsZXNzQ2xpSUQ6ODsKKwlVSU5UMzIJCU1QRFV0b3RhbEJ5dGVDb3VudDoxMjsKKwlVSU5UMzIJCVBhY2tldElkOjQ7CisJLy9Xb3JkMgorCVVJTlQzMgkJSVY7CisJLy9Xb3JkMworCVVJTlQzMgkJRUlWOworfQlUWFdJX1NUUlVDLCAqUFRYV0lfU1RSVUM7CisjZW5kaWYKKy8vCisvLyBSeCBkZXNjcmlwdG9yIGZvcm1hdCwgUngJUmluZworLy8KKy8vCisvLyBSWFdJIHdpcmVsZXNzIGluZm9ybWF0aW9uIGZvcm1hdCwgaW4gUEJGLiBpbnZpc2libGUgaW4gZHJpdmVyLgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1JYV0lfU1RSVUMgeworCS8vIFdvcmQgMAorCVVJTlQzMgkJVElEOjQ7CisJVUlOVDMyCQlNUERVdG90YWxCeXRlQ291bnQ6MTI7CisJVUlOVDMyCQlVREY6MzsKKwlVSU5UMzIJCUJTU0lEOjM7CisJVUlOVDMyCQlLZXlJbmRleDoyOworCVVJTlQzMgkJV2lyZWxlc3NDbGlJRDo4OworCS8vIFdvcmQgMQorCVVJTlQzMgkJUEhZTU9ERToyOyAgICAgICAgICAgICAgLy8gMTogdGhpcyBSWCBmcmFtZSBpcyB1bmljYXN0IHRvIG1lCisJVUlOVDMyCQlyc3Y6MzsKKwlVSU5UMzIJCVNUQkM6MjsKKwlVSU5UMzIJCVNob3J0R0k6MTsKKwlVSU5UMzIJCUJXOjE7CisJVUlOVDMyCQlNQ1M6NzsKKwlVSU5UMzIJCVNFUVVFTkNFOjEyOworCVVJTlQzMgkJRlJBRzo0OworCS8vIFdvcmQgMgorCVVJTlQzMgkJcnN2MTo4OworCVVJTlQzMgkJUlNTSTI6ODsKKwlVSU5UMzIJCVJTU0kxOjg7CisJVUlOVDMyCQlSU1NJMDo4OworCS8vIFdvcmQgMworCVVJTlQzMgkJcnN2MjoxNjsKKwlVSU5UMzIJCVNOUjE6ODsKKwlVSU5UMzIJCVNOUjA6ODsKK30JUlhXSV9TVFJVQywgKlBSWFdJX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfUlhXSV9TVFJVQyB7CisJLy8gV29yZAkwCisJVUlOVDMyCQlXaXJlbGVzc0NsaUlEOjg7CisJVUlOVDMyCQlLZXlJbmRleDoyOworCVVJTlQzMgkJQlNTSUQ6MzsKKwlVSU5UMzIJCVVERjozOworCVVJTlQzMgkJTVBEVXRvdGFsQnl0ZUNvdW50OjEyOworCVVJTlQzMgkJVElEOjQ7CisJLy8gV29yZAkxCisJVUlOVDMyCQlGUkFHOjQ7CisJVUlOVDMyCQlTRVFVRU5DRToxMjsKKwlVSU5UMzIJCU1DUzo3OworCVVJTlQzMgkJQlc6MTsKKwlVSU5UMzIJCVNob3J0R0k6MTsKKwlVSU5UMzIJCVNUQkM6MjsKKwlVSU5UMzIJCXJzdjozOworCVVJTlQzMgkJUEhZTU9ERToyOyAgICAgICAgICAgICAgLy8gMTogdGhpcyBSWCBmcmFtZSBpcyB1bmljYXN0IHRvIG1lCisJLy9Xb3JkMgorCVVJTlQzMgkJUlNTSTA6ODsKKwlVSU5UMzIJCVJTU0kxOjg7CisJVUlOVDMyCQlSU1NJMjo4OworCVVJTlQzMgkJcnN2MTo4OworCS8vV29yZDMKKwlVSU5UMzIJCVNOUjA6ODsKKwlVSU5UMzIJCVNOUjE6ODsKKwlVSU5UMzIJCXJzdjI6MTY7Cit9CVJYV0lfU1RSVUMsICpQUlhXSV9TVFJVQzsKKyNlbmRpZgorCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSE9TVC1NQ1UgY29tbXVuaWNhdGlvbiBkYXRhIHN0cnVjdHVyZQorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vCisvLyBIMk1fTUFJTEJPWF9DU1I6IEhvc3QtdG8tTUNVIE1haWxib3gKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZiB1bmlvbiAgX0gyTV9NQUlMQk9YX1NUUlVDIHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBVSU5UMzIgICAgICAgT3duZXI6ODsKKyAgICAgICAgVUlOVDMyICAgICAgIENtZFRva2VuOjg7ICAgIC8vIDB4ZmYgdGVsbHMgTUNVIG5vdCB0byByZXBvcnQgQ21kRG9uZUludCBhZnRlciBleGN1dGluZyB0aGUgY29tbWFuZAorICAgICAgICBVSU5UMzIgICAgICAgSGlnaEJ5dGU6ODsKKyAgICAgICAgVUlOVDMyICAgICAgIExvd0J5dGU6ODsKKyAgICB9ICAgZmllbGQ7CisgICAgVUlOVDMyICAgICAgICAgICB3b3JkOworfSBIMk1fTUFJTEJPWF9TVFJVQywgKlBIMk1fTUFJTEJPWF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmIHVuaW9uICBfSDJNX01BSUxCT1hfU1RSVUMgeworICAgIHN0cnVjdCB7CisgICAgICAgIFVJTlQzMiAgICAgICBMb3dCeXRlOjg7CisgICAgICAgIFVJTlQzMiAgICAgICBIaWdoQnl0ZTo4OworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW46ODsKKyAgICAgICAgVUlOVDMyICAgICAgIE93bmVyOjg7CisgICAgfSAgIGZpZWxkOworICAgIFVJTlQzMiAgICAgICAgICAgd29yZDsKK30gSDJNX01BSUxCT1hfU1RSVUMsICpQSDJNX01BSUxCT1hfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIE0ySF9DTURfRE9ORV9DU1I6IE1DVS10by1Ib3N0IGNvbW1hbmQgY29tcGxldGUgaW5kaWNhdGlvbgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmIHVuaW9uIF9NMkhfQ01EX0RPTkVfU1RSVUMgeworICAgIHN0cnVjdCAgeworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4zOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4yOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4xOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4wOworICAgIH0gZmllbGQ7CisgICAgVUlOVDMyICAgICAgICAgICB3b3JkOworfSBNMkhfQ01EX0RPTkVfU1RSVUMsICpQTTJIX0NNRF9ET05FX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYgdW5pb24gX00ySF9DTURfRE9ORV9TVFJVQyB7CisgICAgc3RydWN0ICB7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjA7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjE7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjI7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjM7CisgICAgfSBmaWVsZDsKKyAgICBVSU5UMzIgICAgICAgICAgIHdvcmQ7Cit9IE0ySF9DTURfRE9ORV9TVFJVQywgKlBNMkhfQ01EX0RPTkVfU1RSVUM7CisjZW5kaWYKKworCisKKy8vCisvLyBNQ1VfTEVEQ1M6IE1DVSBMRUQgQ29udHJvbCBTZXR0aW5nLgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmIHVuaW9uICBfTUNVX0xFRENTX1NUUlVDIHsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJUG9sYXJpdHk6MTsKKwkJVUNIQVIJCUxlZE1vZGU6NzsKKwl9IGZpZWxkOworCVVDSEFSCQkJCXdvcmQ7Cit9IE1DVV9MRURDU19TVFJVQywgKlBNQ1VfTEVEQ1NfU1RSVUM7CisjZWxzZQordHlwZWRlZiB1bmlvbiAgX01DVV9MRURDU19TVFJVQyB7CisJc3RydWN0CXsKKwkJVUNIQVIJCUxlZE1vZGU6NzsKKwkJVUNIQVIJCVBvbGFyaXR5OjE7CisJfSBmaWVsZDsKKwlVQ0hBUgkJCXdvcmQ7Cit9IE1DVV9MRURDU19TVFJVQywgKlBNQ1VfTEVEQ1NfU1RSVUM7CisjZW5kaWYKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gUmVnaXN0ZXIgZm9ybWF0CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisKKy8vTkFWX1RJTUVfQ0ZHIDpOQVYKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9OQVZfVElNRV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVTSE9SVAkJcnN2OjY7CisJCVVTSE9SVAkJWmVyb1NpZnM6MTsgICAgICAgICAgICAgICAvLyBBcHBsaWVkIHplcm8gU0lGUyB0aW1lciBhZnRlciBPRkRNIFJYIDA6IGRpc2FibGUKKwkJVVNIT1JUCQlFaWZzOjk7ICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJCVVDSEFSICAgICAgIFNsb3RUaW1lOyAgICAvLyBpbiB1bml0IG9mIDEtdXMKKwkJVUNIQVIJCVNpZnM7ICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlOQVZfVElNRV9DRkdfU1RSVUMsICpQTkFWX1RJTUVfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX05BVl9USU1FX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCVNpZnM7ICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJCVVDSEFSICAgICAgIFNsb3RUaW1lOyAgICAvLyBpbiB1bml0IG9mIDEtdXMKKwkJVVNIT1JUCQlFaWZzOjk7ICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJCVVTSE9SVAkJWmVyb1NpZnM6MTsgICAgICAgICAgICAgICAvLyBBcHBsaWVkIHplcm8gU0lGUyB0aW1lciBhZnRlciBPRkRNIFJYIDA6IGRpc2FibGUKKwkJVVNIT1JUCQlyc3Y6NjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU5BVl9USU1FX0NGR19TVFJVQywgKlBOQVZfVElNRV9DRkdfU1RSVUM7CisjZW5kaWYKKworCisKKworCisvLworLy8gUlhfRklMVFJfQ0ZHOiAgL1JYIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglSWF9GSUxUUl9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJOjE1OworCQlVSU5UMzIgICAgICAgRHJvcFJzdkNudGxUeXBlOjE7CisKKyAgICAgICAgCVVJTlQzMiAgICAgICAJRHJvcEJBUjoxOyAgICAgICAvLworCQlVSU5UMzIJCURyb3BCQToxOwkJLy8KKwkJVUlOVDMyCQlEcm9wUHNQb2xsOjE7CQkvLyBEcm9wIFBzLVBvbGwKKwkJVUlOVDMyCQlEcm9wUnRzOjE7CQkvLyBEcm9wIFBzLVBvbGwKKworCQlVSU5UMzIJCURyb3BDdHM6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BBY2s6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BDRkVuZDoxOwkJLy8gRHJvcCBQcy1Qb2xsCisJCVVJTlQzMgkJRHJvcENGRW5kQWNrOjE7CQkvLyBEcm9wIFBzLVBvbGwKKworCQlVSU5UMzIJCURyb3BEdXBsaWNhdGU6MTsJCS8vIERyb3AgZHVwbGljYXRlIGZyYW1lCisJCVVJTlQzMgkJRHJvcEJjYXN0OjE7CQkvLyBEcm9wIGJyb2FkY2FzdCBmcmFtZXMKKwkJVUlOVDMyCQlEcm9wTWNhc3Q6MTsJCS8vIERyb3AgbXVsdGljYXN0IGZyYW1lcworCQlVSU5UMzIJCURyb3BWZXJFcnI6MTsJICAgIC8vIERyb3AgdmVyc2lvbiBlcnJvciBmcmFtZQorCisJCVVJTlQzMgkJRHJvcE5vdE15QlNTSUQ6MTsJCQkvLyBEcm9wIGZyYW0gVG9EcyBiaXQgaXMgdHJ1ZQorCQlVSU5UMzIJCURyb3BOb3RUb01lOjE7CQkvLyBEcm9wIG5vdCB0byBtZSB1bmljYXN0IGZyYW1lCisJCVVJTlQzMgkJRHJvcFBoeUVycjoxOwkJLy8gRHJvcCBwaHlzaWNhbCBlcnJvcgorCQlVSU5UMzIJCURyb3BDUkNFcnI6MTsJCS8vIERyb3AgQ1JDIGVycm9yCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9GSUxUUl9DRkdfU1RSVUMsICpQUlhfRklMVFJfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JYX0ZJTFRSX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlEcm9wQ1JDRXJyOjE7CQkvLyBEcm9wIENSQyBlcnJvcgorCQlVSU5UMzIJCURyb3BQaHlFcnI6MTsJCS8vIERyb3AgcGh5c2ljYWwgZXJyb3IKKwkJVUlOVDMyCQlEcm9wTm90VG9NZToxOwkJLy8gRHJvcCBub3QgdG8gbWUgdW5pY2FzdCBmcmFtZQorCQlVSU5UMzIJCURyb3BOb3RNeUJTU0lEOjE7CQkJLy8gRHJvcCBmcmFtIFRvRHMgYml0IGlzIHRydWUKKworCQlVSU5UMzIJCURyb3BWZXJFcnI6MTsJICAgIC8vIERyb3AgdmVyc2lvbiBlcnJvciBmcmFtZQorCQlVSU5UMzIJCURyb3BNY2FzdDoxOwkJLy8gRHJvcCBtdWx0aWNhc3QgZnJhbWVzCisJCVVJTlQzMgkJRHJvcEJjYXN0OjE7CQkvLyBEcm9wIGJyb2FkY2FzdCBmcmFtZXMKKwkJVUlOVDMyCQlEcm9wRHVwbGljYXRlOjE7CQkvLyBEcm9wIGR1cGxpY2F0ZSBmcmFtZQorCisJCVVJTlQzMgkJRHJvcENGRW5kQWNrOjE7CQkvLyBEcm9wIFBzLVBvbGwKKwkJVUlOVDMyCQlEcm9wQ0ZFbmQ6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BBY2s6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BDdHM6MTsJCS8vIERyb3AgUHMtUG9sbAorCisJCVVJTlQzMgkJRHJvcFJ0czoxOwkJLy8gRHJvcCBQcy1Qb2xsCisJCVVJTlQzMgkJRHJvcFBzUG9sbDoxOwkJLy8gRHJvcCBQcy1Qb2xsCisJCVVJTlQzMgkJRHJvcEJBOjE7CQkvLworICAgICAgICAJVUlOVDMyICAgICAgIAlEcm9wQkFSOjE7ICAgICAgIC8vCisKKwkJVUlOVDMyICAgICAgIAlEcm9wUnN2Q250bFR5cGU6MTsKKwkJVUlOVDMyCQk6MTU7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9GSUxUUl9DRkdfU1RSVUMsICpQUlhfRklMVFJfQ0ZHX1NUUlVDOworI2VuZGlmCisKKworCisKKy8vCisvLyBQSFlfQ1NSNDogUkYgc2VyaWFsIGNvbnRyb2wgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUEhZX0NTUjRfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJQnVzeToxOwkJCQkvLyAxOiBBU0lDIGlzIGJ1c3kgZXhlY3V0ZSBSRiBwcm9ncmFtbWluZy4KKwkJVUlOVDMyCQlQTExfTEQ6MTsJCQkvLyBSRiBQTExfTEQgc3RhdHVzCisJCVVJTlQzMgkJSUZTZWxlY3Q6MTsJCQkvLyAxOiBzZWxlY3QgSUYJdG8gcHJvZ3JhbSwJMDogc2VsZWN0IFJGIHRvCXByb2dyYW0KKwkJVUlOVDMyCQlOdW1iZXJPZkJpdHM6NTsJCS8vIE51bWJlciBvZiBiaXRzIHVzZWQgaW4gUkZSZWdWYWx1ZSAoSToyMCwJUkZNRDoyMikKKwkJVUlOVDMyCQlSRlJlZ1ZhbHVlOjI0OwkJLy8gUmVnaXN0ZXIJdmFsdWUgKGluY2x1ZGUgcmVnaXN0ZXIJaWQpCXNlcmlhbCBvdXQgdG8gUkYvSUYJY2hpcC4KKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVBIWV9DU1I0X1NUUlVDLCAqUFBIWV9DU1I0X1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1BIWV9DU1I0X1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJGUmVnVmFsdWU6MjQ7CQkvLyBSZWdpc3Rlcgl2YWx1ZSAoaW5jbHVkZSByZWdpc3RlcglpZCkJc2VyaWFsIG91dCB0byBSRi9JRgljaGlwLgorCQlVSU5UMzIJCU51bWJlck9mQml0czo1OwkJLy8gTnVtYmVyIG9mIGJpdHMgdXNlZCBpbiBSRlJlZ1ZhbHVlIChJOjIwLAlSRk1EOjIyKQorCQlVSU5UMzIJCUlGU2VsZWN0OjE7CQkJLy8gMTogc2VsZWN0IElGCXRvIHByb2dyYW0sCTA6IHNlbGVjdCBSRiB0bwlwcm9ncmFtCisJCVVJTlQzMgkJUExMX0xEOjE7CQkJLy8gUkYgUExMX0xEIHN0YXR1cworCQlVSU5UMzIJCUJ1c3k6MTsJCQkJLy8gMTogQVNJQyBpcyBidXN5IGV4ZWN1dGUgUkYgcHJvZ3JhbW1pbmcuCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlQSFlfQ1NSNF9TVFJVQywgKlBQSFlfQ1NSNF9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBTRUNfQ1NSNTogc2hhcmVkIGtleSB0YWJsZSBzZWN1cml0eSBtb2RlIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1NFQ19DU1I1X1NUUlVDCXsKKwlzdHJ1Y3QJeworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5M0NpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MkNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MUNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MENpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5M0NpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MkNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MUNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MENpcGhlckFsZzozOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JU0VDX0NTUjVfU1RSVUMsICpQU0VDX0NTUjVfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfU0VDX0NTUjVfU1RSVUMJeworCXN0cnVjdAl7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MENpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MUNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5MkNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MyS2V5M0NpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MENpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MUNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5MkNpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisgICAgICAgIFVJTlQzMiAgICAgICBCc3MzS2V5M0NpcGhlckFsZzozOworICAgICAgICBVSU5UMzIgICAgICAgOjE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlTRUNfQ1NSNV9TVFJVQywgKlBTRUNfQ1NSNV9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBIT1NUX0NNRF9DU1I6IEZvciBIT1NUIHRvIGludGVycnVwdCBlbWJlZGRlZCBwcm9jZXNzb3IKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSE9TVF9DTURfQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICBSc3Y6MjQ7CisJICAgIFVJTlQzMiAgIEhvc3RDb21tYW5kOjg7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlIT1NUX0NNRF9DU1JfU1RSVUMsICpQSE9TVF9DTURfQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0hPU1RfQ01EX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgSG9zdENvbW1hbmQ6ODsKKwkgICAgVUlOVDMyICAgUnN2OjI0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSE9TVF9DTURfQ1NSX1NUUlVDLCAqUEhPU1RfQ01EX0NTUl9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBBSUZTTl9DU1I6IEFJRlNOIGZvciBlYWNoIEVEQ0EgQUMKKy8vCisKKworCisvLworLy8gRTJQUk9NX0NTUjogRUVQUk9NIGNvbnRyb2wgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfRTJQUk9NX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSc3ZkOjI1OworCQlVSU5UMzIgICAgICAgTG9hZFN0YXR1czoxOyAgIC8vIDE6bG9hZGluZywgMDpkb25lCisJCVVJTlQzMgkJVHlwZToxOwkJCS8vIDE6IDkzQzQ2LCAwOjkzQzY2CisJCVVJTlQzMgkJRWVwcm9tRE86MTsKKwkJVUlOVDMyCQlFZXByb21ESToxOworCQlVSU5UMzIJCUVlcHJvbUNTOjE7CisJCVVJTlQzMgkJRWVwcm9tU0s6MTsKKwkJVUlOVDMyCQlSZWxvYWQ6MTsJCS8vIFJlbG9hZCBFRVBST00gY29udGVudCwgd3JpdGUgb25lIHRvIHJlbG9hZCwgc2VsZi1jbGVhcmVkLgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JRTJQUk9NX0NTUl9TVFJVQywgKlBFMlBST01fQ1NSX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0UyUFJPTV9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJUmVsb2FkOjE7CQkvLyBSZWxvYWQgRUVQUk9NIGNvbnRlbnQsIHdyaXRlIG9uZSB0byByZWxvYWQsIHNlbGYtY2xlYXJlZC4KKwkJVUlOVDMyCQlFZXByb21TSzoxOworCQlVSU5UMzIJCUVlcHJvbUNTOjE7CisJCVVJTlQzMgkJRWVwcm9tREk6MTsKKwkJVUlOVDMyCQlFZXByb21ETzoxOworCQlVSU5UMzIJCVR5cGU6MTsJCQkvLyAxOiA5M0M0NiwgMDo5M0M2NgorCQlVSU5UMzIgICAgICAgTG9hZFN0YXR1czoxOyAgIC8vIDE6bG9hZGluZywgMDpkb25lCisJCVVJTlQzMgkJUnN2ZDoyNTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUUyUFJPTV9DU1JfU1RSVUMsICpQRTJQUk9NX0NTUl9TVFJVQzsKKyNlbmRpZgorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBFMlBST00gZGF0YSBsYXlvdXQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8KKy8vIEVFUFJPTSBhbnRlbm5hIHNlbGVjdCBmb3JtYXQKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfRUVQUk9NX0FOVEVOTkFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVTSE9SVCAgICAgIFJzdjo0OworCQlVU0hPUlQgICAgICBSZkljVHlwZTo0OyAgICAgICAgICAgICAvLyBzZWUgRTJQUk9NIGRvY3VtZW50CisJCVVTSE9SVAkJVHhQYXRoOjQ7CS8vIDE6IDFULCAyOiAyVAorCQlVU0hPUlQJCVJ4UGF0aDo0OwkvLyAxOiAxUiwgMjogMlIsIDM6IDNSCisJfQlmaWVsZDsKKwlVU0hPUlQJCQl3b3JkOworfQlFRVBST01fQU5URU5OQV9TVFJVQywgKlBFRVBST01fQU5URU5OQV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FRVBST01fQU5URU5OQV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVVNIT1JUCQlSeFBhdGg6NDsJLy8gMTogMVIsIDI6IDJSLCAzOiAzUgorCQlVU0hPUlQJCVR4UGF0aDo0OwkvLyAxOiAxVCwgMjogMlQKKwkJVVNIT1JUICAgICAgUmZJY1R5cGU6NDsgICAgICAgICAgICAgLy8gc2VlIEUyUFJPTSBkb2N1bWVudAorCQlVU0hPUlQgICAgICBSc3Y6NDsKKwl9CWZpZWxkOworCVVTSE9SVAkJCXdvcmQ7Cit9CUVFUFJPTV9BTlRFTk5BX1NUUlVDLCAqUEVFUFJPTV9BTlRFTk5BX1NUUlVDOworI2VuZGlmCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uIF9FRVBST01fTklDX0NJTkZJRzJfU1RSVUMJeworCXN0cnVjdAl7CisgICAgICAgIFVTSE9SVAkJREFDVGVzdEJpdDoxOwkJCS8vIGNvbnRyb2wgaWYgZHJpdmVyIHNob3VsZCBwYXRjaCB0aGUgREFDIGlzc3VlCisJCVVTSE9SVAkJUnN2MjozOwkJCQkJLy8gbXVzdCBiZSAwCisgICAgICAgIFVTSE9SVAkJQW50RGl2ZXJzaXR5OjE7CQkJLy8gQW50ZW5uYSBkaXZlcnNpdHkKKwkJVVNIT1JUCQlSc3YxOjE7CQkJCQkvLyBtdXN0IGJlIDAKKwkJVVNIT1JUCQlCVzQwTUF2YWlsRm9yQToxOwkJCS8vIDA6ZW5hYmxlLCAxOmRpc2FibGUKKwkJVVNIT1JUCQlCVzQwTUF2YWlsRm9yRzoxOwkJCS8vIDA6ZW5hYmxlLCAxOmRpc2FibGUKKwkJVVNIT1JUCQlFbmFibGVXUFNQQkM6MTsgICAgICAgICAgICAgICAgIC8vIFdQUyBQQkMgQ29udHJvbCBiaXQKKwkJVVNIT1JUCQlCVzQwTVNpZGViYW5kRm9yQToxOworCQlVU0hPUlQJCUJXNDBNU2lkZWJhbmRGb3JHOjE7CisJCVVTSE9SVAkJQ2FyZGJ1c0FjY2VsZXJhdGlvbjoxOwkvLyAhISEgTk9URTogMCAtIGVuYWJsZSwgMSAtIGRpc2FibGUKKwkJVVNIT1JUCQlFeHRlcm5hbExOQUZvckE6MTsJCQkvLyBleHRlcm5hbCBMTkEgZW5hYmxlIGZvciA1RworCQlVU0hPUlQJCUV4dGVybmFsTE5BRm9yRzoxOwkJCS8vIGV4dGVybmFsIExOQSBlbmFibGUgZm9yIDIuNEcKKwkJVVNIT1JUCQlEeW5hbWljVHhBZ2NDb250cm9sOjE7CQkJLy8KKwkJVVNIT1JUCQlIYXJkd2FyZVJhZGlvQ29udHJvbDoxOwkvLyBXaGV0aGVyIFJGIGlzIGNvbnRyb2xsZWQgYnkgZHJpdmVyIG9yIEhXLiAxOmVuYWJsZSBodyBjb250cm9sLCAwOmRpc2FibGUKKwl9CWZpZWxkOworCVVTSE9SVAkJCXdvcmQ7Cit9CUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQywgKlBFRVBST01fTklDX0NPTkZJRzJfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbiBfRUVQUk9NX05JQ19DSU5GSUcyX1NUUlVDCXsKKwlzdHJ1Y3QgeworCQlVU0hPUlQJCUhhcmR3YXJlUmFkaW9Db250cm9sOjE7CS8vIDE6ZW5hYmxlLCAwOmRpc2FibGUKKwkJVVNIT1JUCQlEeW5hbWljVHhBZ2NDb250cm9sOjE7CQkJLy8KKwkJVVNIT1JUCQlFeHRlcm5hbExOQUZvckc6MTsJCQkJLy8KKwkJVVNIT1JUCQlFeHRlcm5hbExOQUZvckE6MTsJCQkvLyBleHRlcm5hbCBMTkEgZW5hYmxlIGZvciAyLjRHCisJCVVTSE9SVAkJQ2FyZGJ1c0FjY2VsZXJhdGlvbjoxOwkvLyAhISEgTk9URTogMCAtIGVuYWJsZSwgMSAtIGRpc2FibGUKKwkJVVNIT1JUCQlCVzQwTVNpZGViYW5kRm9yRzoxOworCQlVU0hPUlQJCUJXNDBNU2lkZWJhbmRGb3JBOjE7CisJCVVTSE9SVAkJRW5hYmxlV1BTUEJDOjE7ICAgICAgICAgICAgICAgICAvLyBXUFMgUEJDIENvbnRyb2wgYml0CisJCVVTSE9SVAkJQlc0ME1BdmFpbEZvckc6MTsJCQkvLyAwOmVuYWJsZSwgMTpkaXNhYmxlCisJCVVTSE9SVAkJQlc0ME1BdmFpbEZvckE6MTsJCQkvLyAwOmVuYWJsZSwgMTpkaXNhYmxlCisJCVVTSE9SVAkJUnN2MToxOwkJCQkJLy8gbXVzdCBiZSAwCisJCVVTSE9SVAkJQW50RGl2ZXJzaXR5OjE7CQkJLy8gQW50ZW5uYSBkaXZlcnNpdHkKKwkJVVNIT1JUCQlSc3YyOjM7CQkJCQkvLyBtdXN0IGJlIDAKKwkJVVNIT1JUCQlEQUNUZXN0Qml0OjE7CQkJLy8gY29udHJvbCBpZiBkcml2ZXIgc2hvdWxkIHBhdGNoIHRoZSBEQUMgaXNzdWUKKwl9CWZpZWxkOworCVVTSE9SVAkJCXdvcmQ7Cit9CUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQywgKlBFRVBST01fTklDX0NPTkZJRzJfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFRYX1BXUiBWYWx1ZSB2YWxpZCByYW5nZSAweEZBKC02KSB+IDB4MjQoMzYpCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9UWF9QV1JfU1RSVUMJeworCXN0cnVjdAl7CisJCUNIQVIJQnl0ZTE7CQkJCS8vIEhpZ2ggQnl0ZQorCQlDSEFSCUJ5dGUwOwkJCQkvLyBMb3cgQnl0ZQorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9UWF9QV1JfU1RSVUMsICpQRUVQUk9NX1RYX1BXUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FRVBST01fVFhfUFdSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlDSEFSCUJ5dGUwOwkJCQkvLyBMb3cgQnl0ZQorCQlDSEFSCUJ5dGUxOwkJCQkvLyBIaWdoIEJ5dGUKKwl9CWZpZWxkOworCVVTSE9SVAl3b3JkOworfQlFRVBST01fVFhfUFdSX1NUUlVDLCAqUEVFUFJPTV9UWF9QV1JfU1RSVUM7CisjZW5kaWYKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9WRVJTSU9OX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUglWZXJzaW9uOwkJCS8vIEhpZ2ggQnl0ZQorCQlVQ0hBUglGYWVSZWxlYXNlTnVtYmVyOwkvLyBMb3cgQnl0ZQorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9WRVJTSU9OX1NUUlVDLCAqUEVFUFJPTV9WRVJTSU9OX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9WRVJTSU9OX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUglGYWVSZWxlYXNlTnVtYmVyOwkvLyBMb3cgQnl0ZQorCQlVQ0hBUglWZXJzaW9uOwkJCS8vIEhpZ2ggQnl0ZQorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9WRVJTSU9OX1NUUlVDLCAqUEVFUFJPTV9WRVJTSU9OX1NUUlVDOworI2VuZGlmCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9FRVBST01fTEVEX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVU0hPUlQJUnN2ZDozOwkJCQkvLyBSZXNlcnZlZAorCQlVU0hPUlQJTGVkTW9kZTo1OwkJCS8vIExlZCBtb2RlLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzQ6MTsJLy8gUG9sYXJpdHkgR1BJTyM0IHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMzoxOwkvLyBQb2xhcml0eSBHUElPIzMgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT18yOjE7CS8vIFBvbGFyaXR5IEdQSU8jMiBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzE6MTsJLy8gUG9sYXJpdHkgR1BJTyMxIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMDoxOwkvLyBQb2xhcml0eSBHUElPIzAgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5QUNUOjE7CQkvLyBQb2xhcml0eSBBQ1Qgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5UkRZX0E6MTsJCS8vIFBvbGFyaXR5IFJEWV9BIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eVJEWV9HOjE7CQkvLyBQb2xhcml0eSBSRFlfRyBzZXR0aW5nLgorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9MRURfU1RSVUMsICpQRUVQUk9NX0xFRF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FRVBST01fTEVEX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVU0hPUlQJUG9sYXJpdHlSRFlfRzoxOwkJLy8gUG9sYXJpdHkgUkRZX0cgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5UkRZX0E6MTsJCS8vIFBvbGFyaXR5IFJEWV9BIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUFDVDoxOwkJLy8gUG9sYXJpdHkgQUNUIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMDoxOwkvLyBQb2xhcml0eSBHUElPIzAgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT18xOjE7CS8vIFBvbGFyaXR5IEdQSU8jMSBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzI6MTsJLy8gUG9sYXJpdHkgR1BJTyMyIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMzoxOwkvLyBQb2xhcml0eSBHUElPIzMgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT180OjE7CS8vIFBvbGFyaXR5IEdQSU8jNCBzZXR0aW5nLgorCQlVU0hPUlQJTGVkTW9kZTo1OwkJCS8vIExlZCBtb2RlLgorCQlVU0hPUlQJUnN2ZDozOwkJCQkvLyBSZXNlcnZlZAorCX0JZmllbGQ7CisJVVNIT1JUCXdvcmQ7Cit9CUVFUFJPTV9MRURfU1RSVUMsICpQRUVQUk9NX0xFRF9TVFJVQzsKKyNlbmRpZgorCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCVR4UG93ZXJFbmFibGU6MTsvLyBFbmFibGUKKwkJVUNIQVIJVHlwZToxOwkJCS8vIDE6IHBsdXMgdGhlIGRlbHRhIHZhbHVlLCAwOiBtaW51cyB0aGUgZGVsdGEgdmFsdWUKKwkJVUNIQVIJRGVsdGFWYWx1ZTo2OwkvLyBUeCBQb3dlciBkYWx0YSB2YWx1ZSAoTUFYPTQpCisJfQlmaWVsZDsKKwlVQ0hBUgl2YWx1ZTsKK30JRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUMsICpQRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCURlbHRhVmFsdWU6NjsJLy8gVHggUG93ZXIgZGFsdGEgdmFsdWUgKE1BWD00KQorCQlVQ0hBUglUeXBlOjE7CQkJLy8gMTogcGx1cyB0aGUgZGVsdGEgdmFsdWUsIDA6IG1pbnVzIHRoZSBkZWx0YSB2YWx1ZQorCQlVQ0hBUglUeFBvd2VyRW5hYmxlOjE7Ly8gRW5hYmxlCisJfQlmaWVsZDsKKwlVQ0hBUgl2YWx1ZTsKK30JRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUMsICpQRUVQUk9NX1RYUE9XRVJfREVMVEFfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFFPU19DU1IwOiBUWE9QIGhvbGRlciBhZGRyZXNzMCByZWdpc3RlcgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9RT1NfQ1NSMF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCUJ5dGUzOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAzCisJCVVDSEFSCQlCeXRlMjsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMgorCQlVQ0hBUgkJQnl0ZTE7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDEKKwkJVUNIQVIJCUJ5dGUwOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAwCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlRT1NfQ1NSMF9TVFJVQywgKlBRT1NfQ1NSMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9RT1NfQ1NSMF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCUJ5dGUwOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAwCisJCVVDSEFSCQlCeXRlMTsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMQorCQlVQ0hBUgkJQnl0ZTI7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDIKKwkJVUNIQVIJCUJ5dGUzOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlRT1NfQ1NSMF9TVFJVQywgKlBRT1NfQ1NSMF9TVFJVQzsKKyNlbmRpZgorCisvLworLy8gUU9TX0NTUjE6IFRYT1AgaG9sZGVyIGFkZHJlc3MxIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1FPU19DU1IxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJUnN2ZDE7CisJCVVDSEFSCQlSc3ZkMDsKKwkJVUNIQVIJCUJ5dGU1OwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSA1CisJCVVDSEFSCQlCeXRlNDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUU9TX0NTUjFfU1RSVUMsICpQUU9TX0NTUjFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUU9TX0NTUjFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCQlCeXRlNDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNAorCQlVQ0hBUgkJQnl0ZTU7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDUKKwkJVUNIQVIJCVJzdmQwOworCQlVQ0hBUgkJUnN2ZDE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlRT1NfQ1NSMV9TVFJVQywgKlBRT1NfQ1NSMV9TVFJVQzsKKyNlbmRpZgorCisjZGVmaW5lCVJGX0NTUl9DRkcJMHg1MDAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UCVJzdmQxOjE0OwkJCQkvLyBSZXNlcnZlZAorCQlVSU5UCVJGX0NTUl9LSUNLOjE7CQkJLy8ga2ljayBSRiByZWdpc3RlciByZWFkL3dyaXRlCisJCVVJTlQJUkZfQ1NSX1dSOjE7CQkJLy8gMDogcmVhZCAgMTogd3JpdGUKKwkJVUlOVAlSc3ZkMjozOwkJCQkvLyBSZXNlcnZlZAorCQlVSU5UCVRFU1RDU1JfUkZBQ0NfUkVHTlVNOjU7CS8vIFJGIHJlZ2lzdGVyIElECisJCVVJTlQJUkZfQ1NSX0RBVEE6ODsJCQkvLyBEQVRBCisJfQlmaWVsZDsKKwlVSU5UCXdvcmQ7Cit9CVJGX0NTUl9DRkdfU1RSVUMsICpQUkZfQ1NSX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UCVJGX0NTUl9EQVRBOjg7CQkJLy8gREFUQQorCQlVSU5UCVRFU1RDU1JfUkZBQ0NfUkVHTlVNOjU7CS8vIFJGIHJlZ2lzdGVyIElECisJCVVJTlQJUnN2ZDI6MzsJCQkJLy8gUmVzZXJ2ZWQKKwkJVUlOVAlSRl9DU1JfV1I6MTsJCQkvLyAwOiByZWFkICAxOiB3cml0ZQorCQlVSU5UCVJGX0NTUl9LSUNLOjE7CQkJLy8ga2ljayBSRiByZWdpc3RlciByZWFkL3dyaXRlCisJCVVJTlQJUnN2ZDE6MTQ7CQkJCS8vIFJlc2VydmVkCisJfQlmaWVsZDsKKwlVSU5UCXdvcmQ7Cit9CVJGX0NTUl9DRkdfU1RSVUMsICpQUkZfQ1NSX0NGR19TVFJVQzsKKyNlbmRpZgorCisjZW5kaWYJLy8gX19SVDI4WFhfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2F0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjM4ZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuYwpAQCAtMCwwICsxLDY1MDYgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpbmNsdWRlICJydF9jb25maWcuaCIKKworI2lmZGVmIFVDT1MKK0lOVCBJb2N0bFJlc3BvbnNlKFBVQ0hBUiBwYXlsb2FkLCBQVUNIQVIgbXNnLCBJTlQgbGVuKTsKKyNlbmRpZiAvLyBVQ09TIC8vCisKKyNkZWZpbmUgQVRFX0JCUF9SRUdfTlVNCTE2OAorVUNIQVIgcmVzdG9yZV9CQlBbQVRFX0JCUF9SRUdfTlVNXT17MH07CisKKyNpZmRlZiBSQUxJTktfQVRFCitVQ0hBUiBUZW1wbGF0ZUZyYW1lWzI0XSA9IHsweDA4LyogRGF0YSB0eXBlICovLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHhBQSwweEJCLDB4MTIsMHgzNCwweDU2LDB4MDAsMHgxMSwweDIyLDB4QUEsMHhCQiwweENDLDB4MDAsMHgwMH07CS8vIDgwMi4xMSBNQUMgSGVhZGVyLCBUeXBlOkRhdGEsIExlbmd0aDoyNGJ5dGVzCitleHRlcm4gUlRNUF9SRl9SRUdTIFJGMjg1MFJlZ1RhYmxlW107CitleHRlcm4gVUNIQVIgTlVNX09GXzI4NTBfQ0hOTDsKKworI2lmZGVmIFJUMjg3MAorZXh0ZXJuIFVDSEFSIEVwVG9RdWV1ZVtdOworZXh0ZXJuIFZPSUQJUlRVU0JSZWplY3RQZW5kaW5nUGFja2V0cygJSU4JUFJUTVBfQURBUFRFUglwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgUlQzMHh4CisvLzIwMDgvMDcvMTA6S0ggYWRkcyB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCitleHRlcm4gRlJFUVVFTkNZX0lURU0gRnJlcUl0ZW1zMzAyMFtdOworZXh0ZXJuIFVDSEFSIE5VTV9PRl8zMDIwX0NITkw7CisvLzIwMDgvMDcvMTA6S0ggYWRkcyB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKyNpZmRlZiBVQ09TCitleHRlcm4gSU5UIENvbnNvbGVSZXNwb25zZShJTiBQVUNIQVIgYnVmZik7CitleHRlcm4gaW50ICgqcmVtb3RlX2Rpc3BsYXkpKGNoYXIgKik7CisjZW5kaWYgLy8gVUNPUyAvLworCitzdGF0aWMgQ0hBUiBDQ0tSYXRlVGFibGVbXSA9IHswLCAxLCAyLCAzLCA4LCA5LCAxMCwgMTEsIC0xfTsgLyogQ0NLIE1vZGUuICovCitzdGF0aWMgQ0hBUiBPRkRNUmF0ZVRhYmxlW10gPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgLTF9OyAvKiBPRkRNIE1vZGUuICovCitzdGF0aWMgQ0hBUiBIVE1JWFJhdGVUYWJsZVtdID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xfTsgLyogSFQgTWl4IE1vZGUuICovCisKK3N0YXRpYyBJTlQgVHhEbWFCdXN5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworc3RhdGljIElOVCBSeERtYUJ1c3koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitzdGF0aWMgVk9JRCBSdG1wRG1hRW5hYmxlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIElOVCBFbmFibGUpOworCitzdGF0aWMgVk9JRCBCYnBTb2Z0UmVzZXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitzdGF0aWMgVk9JRCBSdG1wUmZJb1dyaXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworc3RhdGljIElOVCBBVEVTZXRVcEZyYW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVJTlQzMiBUeElkeCk7CisKK3N0YXRpYyBJTlQgQVRFVHhQd3JIYW5kbGVyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIGNoYXIgaW5kZXgpOworCitzdGF0aWMgSU5UIEFURUNtZEhhbmRsZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworc3RhdGljIGludCBDaGVja01DU1ZhbGlkKAorCUlOIFVDSEFSIE1vZGUsCisJSU4gVUNIQVIgTWNzKTsKKworCisjaWZkZWYgUlQyODcwCitzdGF0aWMgVk9JRCBBVEVXcml0ZVR4SW5mbygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhJTkZPX1NUUlVDIAlwVHhJbmZvLAorCUlOCSAgVVNIT1JUCQlVU0JETUFwa3RMZW4sCisJSU4JICBCT09MRUFOCQliV2l2LAorCUlOCSAgVUNIQVIJCQlRdWV1ZVNlbCwKKwlJTgkgIFVDSEFSCQkJTmV4dFZhbGlkLAorCUlOCSAgVUNIQVIJCQlUeEJ1cnN0KTsKKworc3RhdGljIFZPSUQgQVRFV3JpdGVUeFdJKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWFdJX1NUUlVDIAlwVHhXSSwKKwlJTglCT09MRUFOCQkJRlJBRywKKwlJTglCT09MRUFOCQkJSW5zVGltZXN0YW1wLAorCUlOCUJPT0xFQU4gCQlBTVBEVSwKKwlJTglCT09MRUFOIAkJQWNrLAorCUlOCUJPT0xFQU4gCQlOU2VxLAkJLy8gSFcgbmV3IGEgc2VxdWVuY2UuCisJSU4JVUNIQVIJCQlCQVNpemUsCisJSU4JVUNIQVIJCQlXQ0lELAorCUlOCVVMT05HCQkJTGVuZ3RoLAorCUlOCVVDSEFSIAkJCVBJRCwKKwlJTglVQ0hBUgkJCU1JTU9wcywKKwlJTglVQ0hBUgkJCVR4b3Btb2RlLAorCUlOCUJPT0xFQU4JCQlDZkFjaywKKwlJTglIVFRSQU5TTUlUX1NFVFRJTkcJVHJhbnNtaXQpOworCisjZW5kaWYgLy8gUlQyODcwIC8vCisKK3N0YXRpYyBWT0lEIFNldEphcGFuRmlsdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09ZW5kIG9mIHByb3RvdHlwZT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKyNpZmRlZiBSVDI4NzAKK3N0YXRpYyBJTlQgVHhEbWFCdXN5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUlOVCByZXN1bHQ7CisJVVNCX0RNQV9DRkdfU1RSVUMgVXNiQ2ZnOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBVU0JfRE1BX0NGRywgJlVzYkNmZy53b3JkKTsJLy8gZGlzYWJsZSBETUEKKwlpZiAoVXNiQ2ZnLmZpZWxkLlR4QnVzeSkKKwkJcmVzdWx0ID0gMTsKKwllbHNlCisJCXJlc3VsdCA9IDA7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgSU5UIFJ4RG1hQnVzeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlJTlQgcmVzdWx0OworCVVTQl9ETUFfQ0ZHX1NUUlVDIFVzYkNmZzsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVVNCX0RNQV9DRkcsICZVc2JDZmcud29yZCk7CS8vIGRpc2FibGUgRE1BCisJaWYgKFVzYkNmZy5maWVsZC5SeEJ1c3kpCisJCXJlc3VsdCA9IDE7CisJZWxzZQorCQlyZXN1bHQgPSAwOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFZPSUQgUnRtcERtYUVuYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBJTlQgRW5hYmxlKQoreworCUJPT0xFQU4gdmFsdWU7CisJVUxPTkcgV2FpdENudDsKKwlVU0JfRE1BX0NGR19TVFJVQyBVc2JDZmc7CisKKwl2YWx1ZSA9IEVuYWJsZSA+IDAgPyAxIDogMDsKKworCS8vIGNoZWNrIERNQSBpcyBpbiBidXN5IG1vZGUuCisJV2FpdENudCA9IDA7CisJd2hpbGUgKFR4RG1hQnVzeShwQWQpIHx8IFJ4RG1hQnVzeShwQWQpKQorCXsKKwkJUlRNUHVzZWNEZWxheSgxMCk7CisJCWlmIChXYWl0Q250KysgPiAxMDApCisJCQlicmVhazsKKwl9CisKKwkvL1doeSBub3QgdG8gY2xlYXIgVVNCIERNQSBUWCBwYXRoIGZpcnN0ID8/PworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVVNCX0RNQV9DRkcsICZVc2JDZmcud29yZCk7CS8vIGRpc2FibGUgRE1BCisJVXNiQ2ZnLmZpZWxkLlR4QnVsa0VuID0gdmFsdWU7CisJVXNiQ2ZnLmZpZWxkLlJ4QnVsa0VuID0gdmFsdWU7CisJUlRNUF9JT19XUklURTMyKHBBZCwgVVNCX0RNQV9DRkcsIFVzYkNmZy53b3JkKTsJLy8gYWJvcnQgYWxsIFRYIHJpbmdzCisJUlRNUHVzZWNEZWxheSg1MDAwKTsKKworCXJldHVybjsKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworc3RhdGljIFZPSUQgQmJwU29mdFJlc2V0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSIEJicERhdGEgPSAwOworCisJLy8gU29mdCByZXNldCwgc2V0IEJCUCBSMjEgYml0MD0xLT4wCisJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIxLCAmQmJwRGF0YSk7CisJQmJwRGF0YSB8PSAweDAwMDAwMDAxOyAvL3NldCBiaXQwPTEKKwlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIxLCBCYnBEYXRhKTsKKworCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMSwgJkJicERhdGEpOworCUJicERhdGEgJj0gfigweDAwMDAwMDAxKTsgLy9zZXQgYml0MD0wCisJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMSwgQmJwRGF0YSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBWT0lEIFJ0bXBSZklvV3JpdGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJLy8gU2V0IFJGIHZhbHVlIDEncyBzZXQgUjNbYml0Ml0gPSBbMF0KKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCAocEFkLT5MYXRjaFJmUmVncy5SMyAmICh+MHgwNCkpKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKKworCVJUTVB1c2VjRGVsYXkoMjAwKTsKKworCS8vIFNldCBSRiB2YWx1ZSAyJ3Mgc2V0IFIzW2JpdDJdID0gWzFdCisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMSk7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMik7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgfCAweDA0KSk7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SNCk7CisKKwlSVE1QdXNlY0RlbGF5KDIwMCk7CisKKwkvLyBTZXQgUkYgdmFsdWUgMydzIHNldCBSM1tiaXQyXSA9IFswXQorCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjEpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjIpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIChwQWQtPkxhdGNoUmZSZWdzLlIzICYgKH4weDA0KSkpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IENoZWNrTUNTVmFsaWQoCisJVUNIQVIgTW9kZSwKKwlVQ0hBUiBNY3MpCit7CisJaW50IGk7CisJUENIQVIgcFJhdGVUYWI7CisKKwlzd2l0Y2goTW9kZSkKKwl7CisJCWNhc2UgMDoKKwkJCXBSYXRlVGFiID0gQ0NLUmF0ZVRhYmxlOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBSYXRlVGFiID0gT0ZETVJhdGVUYWJsZTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWNhc2UgMzoKKwkJCXBSYXRlVGFiID0gSFRNSVhSYXRlVGFibGU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoInVucmVjb2duaXphYmxlIFR4IE1vZGUgJWRcbiIsIE1vZGUpKTsKKwkJCXJldHVybiAtMTsKKwkJCWJyZWFrOworCX0KKworCWkgPSAwOworCXdoaWxlKHBSYXRlVGFiW2ldICE9IC0xKQorCXsKKwkJaWYgKHBSYXRlVGFiW2ldID09IE1jcykKKwkJCXJldHVybiAwOworCQlpKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCisjaWYgMQorc3RhdGljIElOVCBBVEVUeFB3ckhhbmRsZXIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gY2hhciBpbmRleCkKK3sKKwlVTE9ORyBSOworCUNIQVIgVHhQb3dlcjsKKwlVQ0hBUiBCYnA5NCA9IDA7CisJQk9PTEVBTiBiUG93ZXJSZWR1Y2UgPSBGQUxTRTsKKyNpZmRlZiBSVDMweHgKKwlVQ0hBUiBSRlZhbHVlOworI2VuZGlmIC8vIFJUMzB4eCAvLworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJaWYgKChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpIHx8IChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IFRSVUUpKQorCXsKKwkJLyogV2hlbiBRQSBpcyB1c2VkIGZvciBUeCwgcEFkLT5hdGUuVHhQb3dlcjAvMSBhbmQgcmVhbCB0eCBwb3dlcgorCQkqKiBhcmUgbm90IHN5bmNocm9uaXplZC4KKwkJKi8KKy8qCisJCXBBZC0+YXRlLlR4UG93ZXIwID0gcEFkLT5MYXRjaFJmUmVncy54eHg7CisJCXBBZC0+YXRlLlR4UG93ZXIxID0gcEFkLT5MYXRjaFJmUmVncy54eHg7CisqLworCQlyZXR1cm4gMDsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJeworCQlUeFBvd2VyID0gaW5kZXggPT0gMCA/IHBBZC0+YXRlLlR4UG93ZXIwIDogcEFkLT5hdGUuVHhQb3dlcjE7CisKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCWlmIChUeFBvd2VyID4gMzEpCisJCQl7CisJCQkJLy8KKwkJCQkvLyBSMywgUjQgY2FuJ3QgbGFyZ2UgdGhhbiAzMSAoMHgyNCksIDMxIH4gMzYgdXNlZCBieSBCQlAgOTQKKwkJCQkvLworCQkJCVIgPSAzMTsKKwkJCQlpZiAoVHhQb3dlciA8PSAzNikKKwkJCQkJQmJwOTQgPSBCQlBSOTRfREVGQVVMVCArIChVQ0hBUikoVHhQb3dlciAtIDMxKTsKKwkJCX0KKwkJCWVsc2UgaWYgKFR4UG93ZXIgPCAwKQorCQkJeworCQkJCS8vCisJCQkJLy8gUjMsIFI0IGNhbid0IGxlc3MgdGhhbiAwLCAtMSB+IC02IHVzZWQgYnkgQkJQIDk0CisJCQkJLy8KKwkJCQlSID0gMDsKKwkJCQlpZiAoVHhQb3dlciA+PSAtNikKKwkJCQkJQmJwOTQgPSBCQlBSOTRfREVGQVVMVCArIFR4UG93ZXI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gMCB+IDMxCisJCQkJUiA9IChVTE9ORykgVHhQb3dlcjsKKwkJCQlCYnA5NCA9IEJCUFI5NF9ERUZBVUxUOworCQkJfQorCisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyAoVHhQb3dlcj0lZCwgUj0lbGQsIEJCUF9SOTQ9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIFR4UG93ZXIsIFIsIEJicDk0KSk7CisJCX0KKwkJZWxzZS8vIDUuNSBHSHoKKwkJeworCQkJaWYgKFR4UG93ZXIgPiAxNSkKKwkJCXsKKwkJCQkvLworCQkJCS8vIFIzLCBSNCBjYW4ndCBsYXJnZSB0aGFuIDE1ICgweDBGKQorCQkJCS8vCisJCQkJUiA9IDE1OworCQkJfQorCQkJZWxzZSBpZiAoVHhQb3dlciA8IDApCisJCQl7CisJCQkJLy8KKwkJCQkvLyBSMywgUjQgY2FuJ3QgbGVzcyB0aGFuIDAKKwkJCQkvLworCQkJCS8vIC0xIH4gLTcKKwkJCQlBU1NFUlQoKFR4UG93ZXIgPj0gLTcpKTsKKwkJCQlSID0gKFVMT05HKShUeFBvd2VyICsgNyk7CisJCQkJYlBvd2VyUmVkdWNlID0gVFJVRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyAwIH4gMTUKKwkJCQlSID0gKFVMT05HKSBUeFBvd2VyOworCQkJfQorCisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyAoVHhQb3dlcj0lZCwgUj0lbHUpXG4iLCBfX0ZVTkNUSU9OX18sIFR4UG93ZXIsIFIpKTsKKwkJfQorLy8yMDA4LzA5LzEwOktIIGFkZHMgdG8gc3VwcG9ydCAzMDcwIEFURSBUWCBQb3dlciB0dW5uaW5nIHJlYWwgdGltZTwtLQorI2lmZGVmIFJUMzB4eAorCQlpZihJU19SVDMweHgocEFkKSkKKwkJeworCQkJLy8gU2V0IFR4IFBvd2VyCisKKwkJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTIsIChQVUNIQVIpJlJGVmFsdWUpOworCQkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEUwKSB8IFR4UG93ZXI7CisJCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxMiwgKFVDSEFSKVJGVmFsdWUpOworCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIzMDcwIG9yIDIwNzA6JXMgKFR4UG93ZXI9JWQsIFJGVmFsdWU9JXgpXG4iLCBfX0ZVTkNUSU9OX18sIFR4UG93ZXIsIFJGVmFsdWUpKTsKKworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkgICAgICB7CisJCWlmIChwQWQtPmF0ZS5DaGFubmVsIDw9IDE0KQorCQl7CisJCQlpZiAoaW5kZXggPT0gMCkKKwkJCXsKKwkJCQlSID0gUiA8PCA5OwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFIzKSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQlSIHw9IChwQWQtPkxhdGNoUmZSZWdzLlIzICYgMHhmZmZmYzFmZik7CisJCQkJcEFkLT5MYXRjaFJmUmVncy5SMyA9IFI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUiA9IFIgPDwgNjsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSNCkgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SNCAmIDB4ZmZmZmY4M2YpOworCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSBSOworCQkJfQorCQl9CisJCWVsc2UvLyA1LjVHSHoKKwkJeworCQkJaWYgKGJQb3dlclJlZHVjZSA9PSBGQUxTRSkKKwkJCXsKKwkJCQlpZiAoaW5kZXggPT0gMCkKKwkJCQl7CisJCQkJCVIgPSAoUiA8PCAxMCkgfCAoMSA8PCA5KTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSMykgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAweGZmZmZjMWZmKTsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SMyA9IFI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVIgPSAoUiA8PCA3KSB8ICgxIDw8IDYpOwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFI0KSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SNCAmIDB4ZmZmZmY4M2YpOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlI0ID0gUjsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGluZGV4ID09IDApCisJCQkJeworCQkJCQlSID0gKFIgPDwgMTApOwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFIzKSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SMyAmIDB4ZmZmZmMxZmYpOworCisJCQkJCS8qIENsZWFyIGJpdCA5IG9mIFIzIHRvIHJlZHVjZSA3ZEIuICovCisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSAoUiAmICh+KDEgPDwgOSkpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUiA9IChSIDw8IDcpOwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFI0KSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SNCAmIDB4ZmZmZmY4M2YpOworCisJCQkJCS8qIENsZWFyIGJpdCA2IG9mIFI0IHRvIHJlZHVjZSA3ZEIuICovCisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSAoUiAmICh+KDEgPDwgNikpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworICAgICAgICAgICB9CisvLzIwMDgvMDkvMTA6S0ggYWRkcyB0byBzdXBwb3J0IDMwNzAgQVRFIFRYIFBvd2VyIHR1bm5pbmcgcmVhbCB0aW1lLS0+CisKKwkJcmV0dXJuIDA7CisJfQorfQorI2Vsc2UvLyAxIC8vCitzdGF0aWMgSU5UIEFURVR4UHdySGFuZGxlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBjaGFyIGluZGV4KQoreworCVVMT05HIFI7CisJQ0hBUiBUeFBvd2VyOworCVVDSEFSIEJicDk0ID0gMDsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJaWYgKChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpIHx8IChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IFRSVUUpKQorCXsKKwkJLy8gVE9ETzogaG93IHRvIGdldCBjdXJyZW50IFR4UG93ZXIwLzEgZnJvbSBwQWQtPkxhdGNoUmZSZWdzID8KKwkJLyogV2hlbiBRQSBpcyB1c2VkIGZvciBUeCwgcEFkLT5hdGUuVHhQb3dlcjAvMSBhbmQgcmVhbCB0eCBwb3dlcgorCQkqKiBhcmUgbm90IHN5bmNocm9uaXplZC4KKwkJKi8KKy8qCisJCXBBZC0+YXRlLlR4UG93ZXIwID0gcEFkLT5MYXRjaFJmUmVncy54eHg7CisJCXBBZC0+YXRlLlR4UG93ZXIxID0gcEFkLT5MYXRjaFJmUmVncy54eHg7CisqLworCQlyZXR1cm4gMDsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJeworCQlUeFBvd2VyID0gaW5kZXggPT0gMCA/IHBBZC0+YXRlLlR4UG93ZXIwIDogcEFkLT5hdGUuVHhQb3dlcjE7CisKKwlpZiAoVHhQb3dlciA+IDMxKQorCXsKKwkJLy8KKwkJLy8gUjMsIFI0IGNhbid0IGxhcmdlIHRoYW4gMzYgKDB4MjQpLCAzMSB+IDM2IHVzZWQgYnkgQkJQIDk0CisJCS8vCisJCVIgPSAzMTsKKwkJaWYgKFR4UG93ZXIgPD0gMzYpCisJCQlCYnA5NCA9IEJCUFI5NF9ERUZBVUxUICsgKFVDSEFSKShUeFBvd2VyIC0gMzEpOworCX0KKwllbHNlIGlmIChUeFBvd2VyIDwgMCkKKwl7CisJCS8vCisJCS8vIFIzLCBSNCBjYW4ndCBsZXNzIHRoYW4gMCwgLTEgfiAtNiB1c2VkIGJ5IEJCUCA5NAorCQkvLworCQlSID0gMDsKKwkJaWYgKFR4UG93ZXIgPj0gLTYpCisJCQlCYnA5NCA9IEJCUFI5NF9ERUZBVUxUICsgVHhQb3dlcjsKKwl9CisJZWxzZQorCXsKKwkJLy8gMCB+IDMxCisJCVIgPSAoVUxPTkcpIFR4UG93ZXI7CisJCUJicDk0ID0gQkJQUjk0X0RFRkFVTFQ7CisJfQorCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgKFR4UG93ZXI9JWQsIFIzPSVsZCwgQkJQX1I5ND0lZClcbiIsIF9fRlVOQ1RJT05fXywgVHhQb3dlciwgUiwgQmJwOTQpKTsKKworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworCWlmIChpbmRleCA9PSAwKQorCXsKKwkJUiA9IFIgPDwgOTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSMykgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAweGZmZmZjMWZmKTsKKwkJcEFkLT5MYXRjaFJmUmVncy5SMyA9IFI7CisJfQorCWVsc2UKKwl7CisJCVIgPSBSIDw8IDY7CQkvLyBzaGlmdCBUWCBwb3dlciBjb250cm9sIHRvIGNvcnJlY3QgUkYoUjQpIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbgorCQlSIHw9IChwQWQtPkxhdGNoUmZSZWdzLlI0ICYgMHhmZmZmZjgzZik7CisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSBSOworCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChpbmRleCA9PSAwKQorCQkJeworCQkJCVIgPSAoUiA8PCAxMCkgfCAoMSA8PCA5KTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSMykgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SMyAmIDB4ZmZmZmMxZmYpOworCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSBSOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVIgPSAoUiA8PCA3KSB8ICgxIDw8IDYpOwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFI0KSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJCQlSIHw9IChwQWQtPkxhdGNoUmZSZWdzLlI0ICYgMHhmZmZmZjgzZik7CisJCQkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IFI7CisJCQl9CisJCX0KKworCVJ0bXBSZklvV3JpdGUocEFkKTsKKworCXJldHVybiAwOworCX0KK30KKyNlbmRpZiAvLyAxIC8vCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgb3BlcmF0aW9uIG1vZGUgdG8KKyAgICAgICAgMC4gQVRFU1RBUlQgID0gU3RhcnQgQVRFIE1vZGUKKyAgICAgICAgMS4gQVRFU1RPUCAgID0gU3RvcCBBVEUgTW9kZQorICAgICAgICAyLiBUWENPTlQgICAgPSBDb250aW51b3VzIFRyYW5zbWl0CisgICAgICAgIDMuIFRYQ0FSUiAgICA9IFRyYW5zbWl0IENhcnJpZXIKKyAgICAgICAgNC4gVFhGUkFNRSAgID0gVHJhbnNtaXQgRnJhbWVzCisgICAgICAgIDUuIFJYRlJBTUUgICA9IFJlY2VpdmUgRnJhbWVzCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKyAgICAgICAgNi4gVFhTVE9QICAgID0gU3RvcCBBbnkgVHlwZSBvZiBUcmFuc21pdGlvbgorICAgICAgICA3LiBSWFNUT1AgICAgPSBTdG9wIFJlY2VpdmluZyBGcmFtZXMKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT1FbmQgb2YgUlQyODYwPT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PVN0YXJ0IG9mIFJUMjg3MD09PT09PT09PT09PT09PT09PT09PT0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmZGVmIFJUMjg3MAorc3RhdGljIElOVAlBVEVDbWRIYW5kbGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVSU5UMzIJCQlWYWx1ZTsKKwlVQ0hBUgkJCUJicERhdGE7CisJVUlOVDMyICAgICAgICAgIE1hY0RhdGE7CisJVUlOVAkJCWk9MCwgYXRlbW9kZTsKKwkvL05ESVNfU1RBVFVTCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCS8vUFVDSEFSCQkJcERlc3Q7CisJVUlOVDMyIAkJCXRlbXA7CisJVUxPTkcJCQlJcnFGbGFnczsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gQVRFQ21kSGFuZGxlcigpXG4iKSk7CisJQVRFQXNpY1N3aXRjaENoYW5uZWwocEFkKTsKKwkvKiBBc2ljTG9ja0NoYW5uZWwoKSBpcyBlbXB0eSBmdW5jdGlvbiBzbyBmYXIgaW4gZmFjdCAqLworCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+YXRlLkNoYW5uZWwpOworCisJUlRNUHVzZWNEZWxheSg1MDAwKTsKKworCS8vIERlZmF1bHQgdmFsdWUgaW4gQkJQIFIyMiBpcyAweDAuCisJQmJwRGF0YSA9IDA7CisKKwkvKiBFbnRlciBBVEUgbW9kZSBhbmQgc2V0IFR4L1J4IElkbGUgKi8KKwlpZiAoIXN0cmNtcChhcmcsICJBVEVTVEFSVCIpKQorCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJQk9PTEVBTiAgICAgICBDYW5jZWxsZWQ7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFURTogQVRFU1RBUlRcbiIpKTsKKworCQluZXRpZl9zdG9wX3F1ZXVlKHBBZC0+bmV0X2Rldik7CisKKwkJYXRlbW9kZSA9IHBBZC0+YXRlLk1vZGU7CisJCXBBZC0+YXRlLk1vZGUgPSBBVEVfU1RBUlQ7CisvLwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSBwQWQtPmF0ZS5UeENvdW50OworCQkvLyBEaXNhYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCS8vIERpc2FibGUgYXV0byByZXNwb25kZXIKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBBVVRPX1JTUF9DRkcsICZ0ZW1wKTsKKwkJdGVtcCA9IHRlbXAgJiAweEZGRkZGRkZFOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1JTUF9DRkcsIHRlbXApOworCisJCS8vIHJlYWQgTUFDX1NZU19DVFJMIGFuZCBiYWNrdXAgTUFDX1NZU19DVFJMIHZhbHVlLgorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQkvLyBjbGVhbiBiaXQ0IHRvIHN0b3AgY29udGludW91cyBUeCBwcm9kdWN0aW9uIHRlc3QuCisJCU1hY0RhdGEgJj0gMHhGRkZGRkZFRjsKKwkJLy8gU3RvcCBjb250aW51b3VzIFRYIHByb2R1Y3Rpb24gdGVzdC4KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsvL2Rpc2FibGUgb3IgY2FuY2VsIHBlbmRpbmcgaXJwIGZpcnN0ID8/PworCisgICAgICAgIGlmIChhdGVtb2RlICYgQVRFX1RYQ0FSUgorI2lmZGVmIFJUMzB4eAorIHx8IGF0ZW1vZGUgJiBBVEVfVFhDT05UCisjZW5kaWYgLy8gUlQzMHh4IC8vCispCisJCXsKKyNpZmRlZiBSVDMweHgKKwkJCS8vSGFyZHdhcmUgUmVzZXQgQkJQCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJnRlbXApOworCQkJdGVtcCA9IHRlbXAgfDB4MDAwMDAwMDI7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIHRlbXApOworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZ0ZW1wKTsKKwkJCXRlbXAgPSB0ZW1wICYgfigweDAwMDAwMDAyKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgdGVtcCk7CisJCQkvL1Jlc3RvcmUgQWxsIEJCUCBWYWx1ZQorCQkJZm9yKGk9MDtpPEFURV9CQlBfUkVHX05VTTtpKyspCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLGkscmVzdG9yZV9CQlBbaV0pOworI2VuZGlmIC8vIFJUMzB4eCAvLworCisJCQkvLyBObyBDYXJyaWVyIFRlc3Qgc2V0IEJCUCBSMjIgYml0Nz0wLCBiaXQ2PTAsIGJpdFs1fjBdPTB4MAorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQlCYnBEYXRhICY9IDB4RkZGRkZGMDA7IC8vY2xlYXIgYml0NywgYml0NiwgYml0WzV+MF0KKwkJICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCQl9CisJCWVsc2UgaWYgKGF0ZW1vZGUgJiBBVEVfVFhDQVJSU1VQUCkKKwkJeworI2lmZGVmIFJUMzB4eAorCQkJLy9IYXJkd2FyZSBSZXNldCBCQlAKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmdGVtcCk7CisJCQl0ZW1wID0gdGVtcCB8MHgwMDAwMDAwMjsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgdGVtcCk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJnRlbXApOworCQkJdGVtcCA9IHRlbXAgJiB+KDB4MDAwMDAwMDIpOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCB0ZW1wKTsKKwkJCS8vUmVzdG9yZSBBbGwgQkJQIFZhbHVlCisJCQlmb3IoaT0wO2k8QVRFX0JCUF9SRUdfTlVNO2krKykKKwkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsaSxyZXN0b3JlX0JCUFtpXSk7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwkJCS8vIE5vIENvbnQuIFRYIHNldCBCQlAgUjIyIGJpdDc9MAorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQlCYnBEYXRhICY9IH4oMSA8PCA3KTsgLy9zZXQgYml0Nz0wCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKworCQkJLy8gTm8gQ2FycmllciBTdXBwcmVzc2lvbiBzZXQgQkJQIFIyNCBiaXQwPTAKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyNCwgJkJicERhdGEpOworCQkJQmJwRGF0YSAmPSAweEZGRkZGRkZFOyAvL2NsZWFyIGJpdDAKKwkJICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsIEJicERhdGEpOworCQl9CisJCS8vIFdlIHNob3VsZCBmcmVlIHNvbWUgcmVzb3VyY2Ugd2hpY2ggYWxsb2NhdGUgd2hlbiBBVEVfVFhGUkFNRSAsIEFURV9TVE9QLCBhbmQgQVRFX1RYQ09OVC4KKwkJLy8gVE9ETzpTaG91bGQgd2UgZnJlZSBzb21lIHJlc291cmNlIHdoaWNoIHdhcyBhbGxvY2F0ZWQgd2hlbiBMb29wQmFjayBhbmQgQVRFX1NUT1AgPworCQllbHNlIGlmICgoYXRlbW9kZSAmIEFURV9UWEZSQU1FKSB8fCAoYXRlbW9kZSA9PSBBVEVfU1RPUCkpCisJCXsKKwkJCWlmIChhdGVtb2RlICYgQVRFX1RYQ09OVCkKKwkJCXsKKwkJCQkvLyBOb3QgQ29udC4gVFggYW55bW9yZSwgc28gc2V0IEJCUCBSMjIgYml0Nz0wCisJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQkJQmJwRGF0YSAmPSB+KDEgPDwgNyk7IC8vc2V0IGJpdDc9MAorCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCQkJfQorCQkJLy8gQWJvcnQgVHgsIFJ4IERNQS4KKwkJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKworCQkJeworCQkJCS8vIEl0IHNlZW1zIG5vdGhpbmcgdG8gZnJlZSwKKwkJCQkvLyBiZWNhdXNlIHdlIGRpZG4ndCBhbGxvY2F0ZSBhbnkgcmVzb3VyY2Ugd2hlbiB3ZSBlbnRlcmVkIEFURV9UWEZSQU1FIG1vZGUgbGF0ZXN0bHkuCisJCQl9CisKKwkJCS8vIFN0YXJ0IFR4LCBSWCBETUEKKwkJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKwkJfQorCisJCVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMocEFkKTsKKwkJUlRVU0JDbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZShwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCS8vCisJCS8vIEl0IHdpbGwgYmUgY2FsbGVkIGluIE1sbWVTdXNwZW5kKCkuCisJCS8vCisJCS8vIENhbmNlbCBwZW5kaW5nIHRpbWVycworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCAgICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlJlYXNzb2NUaW1lciwgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCAgICAgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsICAgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAgICAgICAmQ2FuY2VsbGVkKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkvL1JUVVNCQ2xlYW5VcE1MTUVXYWl0UXVldWUocEFkKTsJLyogbm90IHVzZWQgaW4gUlQyOHh4ICovCisJCVJUVVNCQ2xlYW5VcE1MTUVCdWxrT3V0UXVldWUocEFkKTsKKworCQkvLyBTb21ldGltZXMga2VybmVsIHdpbGwgaGFuZyBvbiwgc28gd2UgYXZvaWQgY2FsbGluZyBNbG1lU3VzcGVuZCgpLgorLy8JCU1sbWVTdXNwZW5kKHBBZCwgVFJVRSk7CisJCS8vUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgJkNhbmNlbGxlZCk7CisKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBBYm9ydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJLy8gRGlzYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDIpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHBlbmRpbmcgYnVsayBpbi9vdXQgSVJQcyBiZWZvcmUgd2UgZ28gb24uCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQkvKiBwQWQtPlBlbmRpbmdSeCBpcyBub3Qgb2YgdHlwZSBhdG9taWNfdCBhbnltb3JlIGluIDI4eHggKi8KKy8vCQl3aGlsZSAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKSkJLy9wQWQtPkJ1bGtGbGFncyAhPSAwIHdhaXQgYnVsayBvdXQgZmluaXNoCisJCXdoaWxlICgocEFkLT5QZW5kaW5nUnggPiAwKSkJLy9wQWQtPkJ1bGtGbGFncyAhPSAwIHdhaXQgYnVsayBvdXQgZmluaXNoCisJCXsKKyNpZiAxCisJCQlBVEVfUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisjZWxzZQorCQkJTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7CisjZW5kaWYKKwkJCS8qIGRlbGF5IDAuNSBzZWNvbmRzICovCisJCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCQlwQWQtPlBlbmRpbmdSeCA9IDA7CisJCX0KKwkJLyogcGV0ZXIgOiB3aHkgZG9uJ3Qgd2UgaGF2ZSB0byBnZXQgQnVsa091dExvY2sgZmlyc3QgPyAqLworCQl3aGlsZSAoKChwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMV0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1syXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzNdID09IFRSVUUpKSAmJiAocEFkLT5CdWxrRmxhZ3MgIT0gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQl7CisJCQlkbworCQkJeworCQkJCS8qIHBBZC0+QnVsa091dFBlbmRpbmdbeV0gd2lsbCBiZSBzZXQgdG8gRkFMU0UgaW4gUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpICovCisJCQkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworCQkJfSB3aGlsZSAoRkFMU0UpOworCisJCQkvKiB3ZSBoYXZlIGVub3VnaCB0aW1lIGRlbGF5IGluIFJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKQorCQkJKiogc28gdGhpcyBpcyBub3QgbmVjZXNzYXJ5CisJCQkqLworLy8JCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCX0KKworCQkvKiBwQWQtPlBlbmRpbmdSeCBpcyBub3Qgb2YgdHlwZSBhdG9taWNfdCBhbnltb3JlIGluIDI4eHggKi8KKy8vCQlBU1NFUlQoYXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA9PSAwKTsKKwkJQVNTRVJUKHBBZC0+UGVuZGluZ1J4ID09IDApOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCQkvLyByZXNldCBSeCBzdGF0aXN0aWNzLgorCQlwQWQtPmF0ZS5MYXN0U05SMCA9IDA7CisJCXBBZC0+YXRlLkxhc3RTTlIxID0gMDsKKwkJcEFkLT5hdGUuTGFzdFJzc2kwID0gMDsKKwkJcEFkLT5hdGUuTGFzdFJzc2kxID0gMDsKKwkJcEFkLT5hdGUuTGFzdFJzc2kyID0gMDsKKwkJcEFkLT5hdGUuQXZnUnNzaTAgPSAwOworCQlwQWQtPmF0ZS5BdmdSc3NpMSA9IDA7CisJCXBBZC0+YXRlLkF2Z1Jzc2kyID0gMDsKKwkJcEFkLT5hdGUuQXZnUnNzaTBYOCA9IDA7CisJCXBBZC0+YXRlLkF2Z1Jzc2kxWDggPSAwOworCQlwQWQtPmF0ZS5BdmdSc3NpMlg4ID0gMDsKKwkJcEFkLT5hdGUuTnVtT2ZBdmdSc3NpU2FtcGxlID0gMDsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCS8vIFR4IGZyYW1lCisJCXBBZC0+YXRlLmJRQVR4U3RhcnQgPSBGQUxTRTsKKwkJcEFkLT5hdGUuYlFBUnhTdGFydCA9IEZBTFNFOworCQlwQWQtPmF0ZS5zZXEgPSAwOworCisJCS8vIGNvdW50ZXJzCisJCXBBZC0+YXRlLlUyTSA9IDA7CisJCXBBZC0+YXRlLk90aGVyRGF0YSA9IDA7CisJCXBBZC0+YXRlLkJlYWNvbiA9IDA7CisJCXBBZC0+YXRlLk90aGVyQ291bnQgPSAwOworCQlwQWQtPmF0ZS5UeEFjMCA9IDA7CisJCXBBZC0+YXRlLlR4QWMxID0gMDsKKwkJcEFkLT5hdGUuVHhBYzIgPSAwOworCQlwQWQtPmF0ZS5UeEFjMyA9IDA7CisJCXBBZC0+YXRlLlR4SENDQSA9IDA7CisJCXBBZC0+YXRlLlR4TWdtdCA9IDA7CisJCXBBZC0+YXRlLlJTU0kwID0gMDsKKwkJcEFkLT5hdGUuUlNTSTEgPSAwOworCQlwQWQtPmF0ZS5SU1NJMiA9IDA7CisJCXBBZC0+YXRlLlNOUjAgPSAwOworCQlwQWQtPmF0ZS5TTlIxID0gMDsKKworCQkvLyBjb250cm9sCisJCXBBZC0+YXRlLlR4RG9uZUNvdW50ID0gMDsKKwkJcEFkLT5hdGUuVHhTdGF0dXMgPSAwOyAvLyB0YXNrIFR4IHN0YXR1cyAvLyAwIC0tPiB0YXNrIGlzIGlkbGUsIDEgLS0+IHRhc2sgaXMgcnVubmluZworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisKKwkJLy8gU29mdCByZXNldCBCQlAuCisJCUJicFNvZnRSZXNldChwQWQpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJQXNpY0Rpc2FibGVTeW5jKHBBZCk7CisKKwkJLyoKKwkJKiogSWYgd2Ugc2tpcCAiTGlua0Rvd24oKSIsIHdlIHNob3VsZCBkaXNhYmxlIHByb3RlY3Rpb24KKwkJKiogdG8gcHJldmVudCBmcm9tIHNlbmRpbmcgb3V0IFJUUyBvciBDVFMtdG8tc2VsZi4KKwkJKi8KKwkJQVRFRGlzYWJsZUFzaWNQcm90ZWN0KHBBZCk7CisJCVJUTVBTdGF0aW9uU3RvcChwQWQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCS8vIERlZmF1bHQgdmFsdWUgaW4gQkJQIFIyMiBpcyAweDAuCisJCUJicERhdGEgPSAwOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCisJCS8vIENsZWFuIGJpdDQgdG8gc3RvcCBjb250aW51b3VzIFR4IHByb2R1Y3Rpb24gdGVzdC4KKwkJTWFjRGF0YSAmPSAweEZGRkZGRkVGOworCSAgIAlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkgICAgCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgTWFjRGF0YSk7CisJCS8vQ2xlYW4gQVRFIEJ1bGsgaW4vb3V0IGNvdW50ZXIgYW5kIGNvbnRpbnVlIHNldHVwCisJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+QnVsa091dFJlbWFpbmVkLCAwKTsKKworCQkvKiBOZGlzQWNxdWlyZVNwaW5Mb2NrKCkvTmRpc1JlbGVhc2VTcGluTG9jaygpIG5lZWQgb25seSBvbmUgYXJndW1lbnQgaW4gUlQyOHh4ICovCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBGQUxTRTsKKwkJcEFkLT5Db250aW5CdWxrSW4gPSBGQUxTRTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfQVRFKTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJBVEVTVE9QIikpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEUgOiBBVEVTVE9QID09PT5cbiIpKTsKKworCQkvLyBEZWZhdWx0IHZhbHVlIGluIEJCUCBSMjIgaXMgMHgwLgorCQlCYnBEYXRhID0gMDsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsvLzA4MjAKKwkJLy8gQ2xlYW4gYml0NCB0byBzdG9wIGNvbnRpbnVvdXMgVHggcHJvZHVjdGlvbiB0ZXN0LgorCQlNYWNEYXRhICY9IDB4RkZGRkZGRUY7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIE1hY0RhdGEpOyAvLyByZWNvdmVyIHRoZSBNQUNfU1lTX0NUUkwgcmVnaXN0ZXIgYmFjay4KKworCQkvLyBEaXNhYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCS8qCisJCSoqIEFib3J0IFR4LCBSWCBETUEuCisJCSoqIFEgICA6IEhvdyB0byBkbyB0aGUgZm9sbG93aW5nIEkvTyBpZiBUeCwgUnggRE1BIGlzIGFib3J0ZWQgPworCQkqKiBBbnMgOiBCdWxrIGVuZHBvaW50cyBhcmUgYWJvcnRlZCwgd2hpbGUgdGhlIGNvbnRyb2wgZW5kcG9pbnQgaXMgbm90LgorCQkqLworCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJLy8gRGlzYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDIpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHBlbmRpbmcgYnVsayBpbi9vdXQgSVJQcyBiZWZvcmUgd2UgZ28gb24uICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLy8JCXdoaWxlICgoYXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA+IDApKQkvL3BBZC0+QnVsa0ZsYWdzICE9IDAgd2FpdCBidWxrIG91dCBmaW5pc2gKKwkJd2hpbGUgKHBBZC0+UGVuZGluZ1J4ID4gMCkKKwkJeworI2lmIDEKKwkJCUFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAocEFkKTsKKyNlbHNlCisvLwkJCU5kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmcEFkLT5QZW5kaW5nUngpOworCQkJcEFkLT5QZW5kaW5nUngtLTsKKyNlbmRpZgorCQkJUlRNUHVzZWNEZWxheSg1MDAwMDApOworCQl9CisKKwkJd2hpbGUgKCgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzFdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMl0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1szXSA9PSBUUlVFKSkgJiYgKHBBZC0+QnVsa0ZsYWdzICE9IDApKQkvL3BBZC0+QnVsa0ZsYWdzICE9IDAgd2FpdCBidWxrIG91dCBmaW5pc2gKKwkJeworCQkJZG8KKwkJCXsKKwkJCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHBBZCk7CisJCQl9IHdoaWxlIChGQUxTRSk7CisKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMDAwKTsKKwkJfQorCisvLwkJQVNTRVJUKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPT0gMCk7CisJCUFTU0VSVChwQWQtPlBlbmRpbmdSeCA9PSAwKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgIFJlc2V0IFJ4IFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8vCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPlBlbmRpbmdSeCwgMCk7CisJCXBBZC0+UGVuZGluZ1J4ID0gMDsKKwkJcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXggPSAwOwkvLyBOZXh0IFJ4IFJlYWQgaW5kZXgKKwkJcEFkLT5OZXh0UnhCdWxrSW5JbmRleCA9IFJYX1JJTkdfU0laRSAtIDE7CS8vIFJ4IEJ1bGsgcG9pbnRlcgorCQlwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJCXsKKwkJCVBSWF9DT05URVhUICBwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisJCQlOZGlzWmVyb01lbW9yeShwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgTUFYX1JYQlVMS19TSVpFKTsKKwkJCS8qIHBldGVyIDogd2h5IGRvbid0IHdlIGhhdmUgdG8gZ2V0IEJ1bGtJbkxvY2sgZmlyc3QgPyAqLworCQkJcFJ4Q29udGV4dC0+cEFkCT0gcEFkOworCQkJcFJ4Q29udGV4dC0+cElycCA9IE5VTEw7CisgICAgICAgICAgICAvKiBwZXRlciBkZWJ1ZyArKyAqLworCQkJcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0ID0gMDsKKwkJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gRkFMU0U7CisgICAgICAgICAgICAvKiBwZXRlciBkZWJ1ZyAtLSAqLworCQkJcFJ4Q29udGV4dC0+SW5Vc2UJCT0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nCT0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5SZWFkYWJsZQk9IEZBTFNFOworLy8JCQlwUnhDb250ZXh0LT5SZW9yZGVySW5Vc2UgPSBGQUxTRTsKKy8vCQkJcFJ4Q29udGV4dC0+UmVhZFBvc09mZnNldCA9IDA7CisJCX0KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qICAgICAgUmVzZXQgVHggUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQlkbworCQl7CisJCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHBBZCk7CisJCX0gd2hpbGUgKEZBTFNFKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLy8gRW5hYmxlIGF1dG8gcmVzcG9uZGVyLgorCQlSVE1QX0lPX1JFQUQzMihwQWQsIEFVVE9fUlNQX0NGRywgJnRlbXApOworCQl0ZW1wID0gdGVtcCB8ICgweDAxKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19SU1BfQ0ZHLCB0ZW1wKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQlBc2ljRW5hYmxlQnNzU3luYyhwQWQpOworCisJCS8qIFNvZnQgcmVzZXQgQkJQLiovCisJCS8qIEluIDI4NzAgY2hpcHNldCwgQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoKSA9PSBSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoKSAqLworCQkvKiBCb3RoIHJ0Mjg3MGFwIGFuZCBydDI4NzBzdGEgdXNlIEJicFNvZnRSZXNldChwQWQpIHRvIGRvIEJCUCBzb2Z0IHJlc2V0ICovCisJCUJicFNvZnRSZXNldChwQWQpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkvLyBTZXQgYWxsIHN0YXRlIG1hY2hpbmVzIGJhY2sgSURMRQorCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IENOVExfSURMRTsKKwkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlICAgPSBBU1NPQ19JRExFOworCQkJcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IEFVVEhfUkVRX0lETEU7CisJCQlwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SU1BfSURMRTsKKwkJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgICAgPSBTWU5DX0lETEU7CisJCQlwQWQtPk1sbWUuQWN0TWFjaGluZS5DdXJyU3RhdGUgICAgPSBBQ1RfSURMRTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJLy8KKwkJCS8vID09PT4gcmVmZXIgdG8gTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUoKS4KKwkJCS8vIFdoZW4gd2UgZW50ZXJlZCBBVEVfU1RBUlQgbW9kZSwgUGVyaW9kaWNUaW1lciB3YXMgbm90IGNhbmNlbGxlZC4KKwkJCS8vIFNvIHdlIGRvbid0IGhhdmUgdG8gc2V0IGl0IGhlcmUuCisJCQkvLworCQkJLy9SVE1QU2V0VGltZXIocEFkLCAmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsIE1MTUVfVEFTS19FWEVDX0lOVFYpOworCisJCQlBU1NFUlQocEFkLT5Db21tb25DZmcuQ2hhbm5lbCAhPSAwKTsKKworCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCSAgICBSVE1QU3RhdGlvblN0YXJ0KHBBZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKy8vCisvLyBUaGVzZSB0d28gc3RlcHMgaGF2ZSBiZWVuIGRvbmUgd2hlbiBlbnRlcmluZyBBVEVfU1RPUCBtb2RlLgorLy8KKwkJLy8gQ2xlYW4gQVRFIEJ1bGsgaW4vb3V0IGNvdW50ZXIgYW5kIGNvbnRpbnVlIHNldHVwLgorCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgMCk7CisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBGQUxTRTsKKwkJcEFkLT5Db250aW5CdWxrSW4gPSBGQUxTRTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJLyogV2FpdCA1MG1zIHRvIHByZXZlbnQgbmV4dCBVUkIgdG8gYnVsa291dCBkdXJpbmcgSFcgcmVzZXQuICovCisJCS8qIHRvZG8gOiByZW1vdmUgdGhpcyBpZiBub3QgbmVjZXNzYXJ5ICovCisJCU5kaXNNU2xlZXAoNTAwMDApOworCisJCXBBZC0+YXRlLk1vZGUgPSBBVEVfU1RPUDsKKworCQkvLyBFbmFibGUgVHgKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlIHw9ICgxIDw8IDIpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLyogcmVzdG9yZSBSWF9GSUxUUl9DRkcgKi8KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJLyogcmVzdG9yZSBSWF9GSUxUUl9DRkcgaW4gb3JkZXIgdGhhdCBRQSBtYXliZSBzZXQgaXQgdG8gMHgzICovCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKwkJLy8gRW5hYmxlIFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQkvLyBFbmFibGUgUngKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlIHw9ICgxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBXYWl0IDEwbXMgdG8gd2FpdCBhbGwgb2YgdGhlIGJ1bGstaW4gVVJCcyB0byBjb21wbGV0ZS4KKwkJLyogdG9kbyA6IHJlbW92ZSB0aGlzIGlmIG5vdCBuZWNlc3NhcnkgKi8KKwkJTmRpc01TbGVlcCgxMDAwMCk7CisKKwkJLy8gRXZlcnl0aGluZyBpcyByZWFkeSB0byBzdGFydCBub3JtYWwgVHgvUnguCisJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwkJbmV0aWZfc3RhcnRfcXVldWUocEFkLT5uZXRfZGV2KTsKKworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT09IEFURSA6IEFURVNUT1AgXG4iKSk7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiVFhDQVJSIikpCS8vIFR4IENhcnJpZXIKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFURTogVFhDQVJSXG4iKSk7CisJCXBBZC0+YXRlLk1vZGUgfD0gQVRFX1RYQ0FSUjsKKworI2lmZGVmIFJUMzB4eAorCQkJZm9yKGk9MDtpPEFURV9CQlBfUkVHX05VTTtpKyspCisJCQkJcmVzdG9yZV9CQlBbaV09MDsKKwkJCS8vUmVjb3JkIEFsbCBCQlAgVmFsdWUKKwkJCWZvcihpPTA7aTxBVEVfQkJQX1JFR19OVU07aSsrKQorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLGksJnJlc3RvcmVfQkJQW2ldKTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworCQkvLyBEaXNhYmxlIFJ4CisJCS8vIE1heSBiZSB3ZSBuZWVkIG5vdCB0byBkbyB0aGlzLCBiZWNhdXNlIHRoZXNlIGhhdmUgYmVlbiBkb25lIGluIEFURV9TVEFSVCBtb2RlID8/PworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBRQSBoYXMgZG9uZSB0aGUgZm9sbG93aW5nIHN0ZXBzIGlmIGl0IGlzIHVzZWQuCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IEZBTFNFKQorCQl7CisJCQkvLyBTb2Z0IHJlc2V0IEJCUC4KKwkJCUJicFNvZnRSZXNldChwQWQpOworCisJCQkvLyBDYXJyaWVyIFRlc3Qgc2V0IEJCUCBSMjIgYml0Nz0xLCBiaXQ2PTEsIGJpdFs1fjBdPTB4MDEKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgJkJicERhdGEpOworCQkJQmJwRGF0YSAmPSAweEZGRkZGRjAwOyAvL2NsZWFyIGJpdDcsIGJpdDYsIGJpdFs1fjBdCisJCQlCYnBEYXRhIHw9IDB4MDAwMDAwQzE7IC8vc2V0IGJpdDc9MSwgYml0Nj0xLCBiaXRbNX4wXT0weDAxCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKworCQkJLy8gc2V0IE1BQ19TWVNfQ1RSTCgweDEwMDQpIENvbnRpbnVvdXMgVHggUHJvZHVjdGlvbiBUZXN0IChiaXQ0KSA9IDEKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQkJVmFsdWUgPSBWYWx1ZSB8IDB4MDAwMDAwMTA7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKwkJfQorCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIlRYQ09OVCIpKQkvLyBUeCBDb250aW51ZQorCXsKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJLyogc2V0IE1BQ19TWVNfQ1RSTCgweDEwMDQpIGJpdDQoQ29udGludW91cyBUeCBQcm9kdWN0aW9uIFRlc3QpCisJCQkgICBhbmQgYml0MihNQUMgVFggZW5hYmxlKSBiYWNrIHRvIHplcm8uICovCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQkJTWFjRGF0YSAmPSAweEZGRkZGRkVCOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKworCQkJLy8gc2V0IEJCUCBSMjIgYml0Nz0wCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gMHhGRkZGRkY3RjsgLy9zZXQgYml0Nz0wCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJfQorCisJCS8qIGZvciBUeENvbnQgbW9kZS4KKwkJKiogU3RlcCAxOiBTZW5kIDUwIHBhY2tldHMgZmlyc3QgdGhlbiB3YWl0IGZvciBhIG1vbWVudC4KKwkJKiogU3RlcCAyOiBTZW5kIG1vcmUgNTAgcGFja2V0IHRoZW4gc3RhcnQgY29udGludWUgbW9kZS4KKwkJKi8KKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBUWENPTlRcbiIpKTsKKworI2lmZGVmIFJUMzB4eAorCQkJCWZvcihpPTA7aTxBVEVfQkJQX1JFR19OVU07aSsrKQorCQkJCXJlc3RvcmVfQkJQW2ldPTA7CisJCQkvL1JlY29yZCBBbGwgQkJQIFZhbHVlCisJCQlmb3IoaT0wO2k8QVRFX0JCUF9SRUdfTlVNO2krKykKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCxpLCZyZXN0b3JlX0JCUFtpXSk7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwkJLy8gU3RlcCAxOiBzZW5kIDUwIHBhY2tldHMgZmlyc3QuCisJCXBBZC0+YXRlLk1vZGUgfD0gQVRFX1RYQ09OVDsKKwkJcEFkLT5hdGUuVHhDb3VudCA9IDUwOworCQlwQWQtPmF0ZS5UeERvbmVDb3VudCA9IDA7CisKKwkJLy8gU29mdCByZXNldCBCQlAuCisJCUJicFNvZnRSZXNldChwQWQpOworCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKworCisJCS8qIE9ubHkgbmVlZGVkIGlmIHdlIGhhdmUgdG8gc2VuZCBzb21lIG5vcm1hbCBmcmFtZXMuICovCisJCVNldEphcGFuRmlsdGVyKHBBZCk7CisKKwkJLy8gU2V0dXAgZnJhbWUgZm9ybWF0LgorCQlBVEVTZXRVcEZyYW1lKHBBZCwgMCk7CisKKwkJLy8gRW5hYmxlIFR4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBTdGFydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMSk7CisKKwkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5CdWxrT3V0UmVtYWluZWQsIHBBZC0+YXRlLlR4Q291bnQpOworCisjaWZkZWYJUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJcEFkLT5hdGUuVHhTdGF0dXMgPSAxOworCQkJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOworCQl9CisjZW5kaWYJLy8gUkFMSU5LXzI4eHhfUUEgLy8KKworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsvLzA4MjAKKwkJcEFkLT5Db250aW5CdWxrT3V0ID0gRkFMU0U7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUpOworCisJCS8vIEtpY2sgYnVsayBvdXQKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCisJCS8qIFRvIG1ha2Ugc3VyZSBhbGwgdGhlIDUwIGZyYW1lcyBoYXZlIGJlZW4gYnVsayBvdXQgYmVmb3JlIGV4ZWN1dGluZyBzdGVwIDIgKi8KKwkJd2hpbGUgKGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkgPiAwKQorCQl7CisJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQl9CisKKwkJLy8gU3RlcCAyOiBzZW5kIG1vcmUgNTAgcGFja2V0cyB0aGVuIHN0YXJ0IGNvbnRpbnVlIG1vZGUuCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKworCQkvLyBDb250LiBUWCBzZXQgQkJQIFIyMiBiaXQ3PTEKKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCUJicERhdGEgfD0gMHgwMDAwMDA4MDsgLy9zZXQgYml0Nz0xCisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCisJCXBBZC0+YXRlLlR4Q291bnQgPSA1MDsKKwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSAwOworCisJCVNldEphcGFuRmlsdGVyKHBBZCk7CisKKwkJLy8gU2V0dXAgZnJhbWUgZm9ybWF0LgorCQlBVEVTZXRVcEZyYW1lKHBBZCwgMCk7CisKKwkJLy8gRW5hYmxlIFR4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCisJCS8vIFN0YXJ0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgcEFkLT5hdGUuVHhDb3VudCk7CisKKyNpZmRlZglSQUxJTktfMjh4eF9RQQorCQlpZiAocEFkLT5hdGUuYlFBVHhTdGFydCA9PSBUUlVFKQorCQl7CisJCQlwQWQtPmF0ZS5UeFN0YXR1cyA9IDE7CisJCQkvL3BBZC0+YXRlLlJlcGVhdCA9IDA7CisJCX0KKyNlbmRpZgkvLyBSQUxJTktfMjh4eF9RQSAvLworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOy8vMDgyMAorCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBGQUxTRTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisJCS8vIEtpY2sgYnVsayBvdXQKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCisjaWYgMQorCQlSVE1QdXNlY0RlbGF5KDUwMCk7CisjZWxzZQorCQl3aGlsZSAoYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSA+IDApCisJCXsKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCX0KKyNlbmRpZiAvLyAxIC8vCisKKwkJLy8gU2V0IE1BQ19TWVNfQ1RSTCgweDEwMDQpIENvbnRpbnVvdXMgVHggUHJvZHVjdGlvbiBUZXN0IChiaXQ0KSA9IDEuCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmTWFjRGF0YSk7CisJCU1hY0RhdGEgfD0gMHgwMDAwMDAxMDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJUWEZSQU1FIikpCS8vIFR4IEZyYW1lcworCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBUWEZSQU1FKENvdW50PTB4JTA4eClcbiIsIHBBZC0+YXRlLlR4Q291bnQpKTsKKwkJcEFkLT5hdGUuTW9kZSB8PSBBVEVfVFhGUkFNRTsKKworCQkvLyBTb2Z0IHJlc2V0IEJCUC4KKwkJQmJwU29mdFJlc2V0KHBBZCk7CisKKwkJLy8gRGVmYXVsdCB2YWx1ZSBpbiBCQlAgUjIyIGlzIDB4MC4KKwkJQmJwRGF0YSA9IDA7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsKKworCQkvLyBDbGVhbiBiaXQ0IHRvIHN0b3AgY29udGludW91cyBUeCBwcm9kdWN0aW9uIHRlc3QuCisJCU1hY0RhdGEgJj0gMHhGRkZGRkZFRjsKKworCSAgIAlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCS8vIGFkZCB0aGlzIGZvciBMb29wQmFjayBtb2RlCisJCWlmIChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IEZBTFNFKQorCQl7CisJCQkvLyBEaXNhYmxlIFJ4CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJCVZhbHVlICY9IH4oMSA8PCAzKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCQl9CisKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJcEFkLT5hdGUuVHhTdGF0dXMgPSAxOworCQkJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOworCQl9CisjZWxzZQorCQkvLyBEaXNhYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisKKwkJLy8gRW5hYmxlIFR4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKyAgICAgICAgU2V0SmFwYW5GaWx0ZXIocEFkKTsKKworCQkvLyBBYm9ydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSAwOworCisgICAgICAgIC8vIFNldHVwIGZyYW1lIGZvcm1hdAorCQlBVEVTZXRVcEZyYW1lKHBBZCwgMCk7CisKKwkJLy8gU3RhcnQgVHgsIFJYIERNQS4KKwkJUnRtcERtYUVuYWJsZShwQWQsIDEpOworCisJCS8vIENoZWNrIGNvdW50IGlzIGNvbnRpbnVvdXMgb3Igbm90IHlldC4KKwkJLy8KKwkJLy8gRHVlIHRvIHRoZSB0eXBlIG1pc21hdGNoIGJldHdlZW4gInBBZC0+QnVsa091dFJlbWFpbmVkIihhdG9taWNfdCkgYW5kICJwQWQtPmF0ZS5UeENvdW50IihVSU5UMzIpCisJCS8vCisJCWlmIChwQWQtPmF0ZS5UeENvdW50ID09IDApCisJCXsKKwkJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+QnVsa091dFJlbWFpbmVkLCAwKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+QnVsa091dFJlbWFpbmVkLCBwQWQtPmF0ZS5UeENvdW50KTsKKwkJfQorCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJidWxrIG91dCBjb3VudCA9ICVkXG4iLCBhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpKSk7CisJCUFTU0VSVCgoYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSA+PSAwKSk7CisKKwkJaWYgKGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkgPT0gMCkKKwkJeworCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBwYWNrZXQgY291bnRpbnVvdXNseVxuIikpOworCisJCQkvKiBJbiAyOHh4LCBOZGlzQWNxdWlyZVNwaW5Mb2NrKCkgPT0gc3Bpbl9sb2NrX2JoKCkgKi8KKwkJCS8qIE5kaXNBY3F1aXJlU3BpbkxvY2sgb25seSBuZWVkIG9uZSBhcmd1bWVudCBpbiAyOHh4LiAqLworCQkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisJCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBUUlVFOworCQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJCS8qIEluIDI4eHgsIEJVTEtfT1VUX0xPQ0soKSA9PSBzcGluX2xvY2tfaXJxc2F2ZSgpICovCisJCQlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7Ly8gcGV0ZXIgOiBOZGlzQWNxdWlyZVNwaW5Mb2NrID09PiBCVUxLX09VVF9MT0NLCisJCQlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gRkFMU0U7CisJCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsvLyBwZXRlciA6IE5kaXNBY3F1aXJlU3BpbkxvY2sgPT0+IEJVTEtfT1VUX0xPQ0sKKwkJfQorCQllbHNlCisJCXsKKwkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgcGFja2V0cyBkZXBlbmQgb24gY291bnRlclxuIikpOworCisJCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsKKwkJCXBBZC0+Q29udGluQnVsa091dCA9IEZBTFNFOworCQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisKKwkJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwkJCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBGQUxTRTsKKwkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCQl9CisKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisKKwkJLy8gS2ljayBidWxrIG91dAorCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisJfQorI2lmZGVmIFJBTElOS18yOHh4X1FBCisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJUWFNUT1AiKSkgCQkvL0VudGVyIEFURSBtb2RlIGFuZCBzZXQgVHgvUnggSWRsZQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBUWFNUT1BcbiIpKTsKKworCQlhdGVtb2RlID0gcEFkLT5hdGUuTW9kZTsKKwkJcEFkLT5hdGUuTW9kZSAmPSBBVEVfVFhTVE9QOworCQlwQWQtPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CisvLwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSBwQWQtPmF0ZS5UeENvdW50OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQlpZiAoYXRlbW9kZSAmIEFURV9UWENBUlIpCisJCXsKKwkJCS8vIE5vIENhcnJpZXIgVGVzdCBzZXQgQkJQIFIyMiBiaXQ3PTAsIGJpdDY9MCwgYml0WzV+MF09MHgwCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gMHhGRkZGRkYwMDsgLy9jbGVhciBiaXQ3LCBiaXQ2LCBiaXRbNX4wXQorCQkgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisJCX0KKwkJZWxzZSBpZiAoYXRlbW9kZSAmIEFURV9UWENBUlJTVVBQKQorCQl7CisJCQkvLyBObyBDb250LiBUWCBzZXQgQkJQIFIyMiBiaXQ3PTAKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgJkJicERhdGEpOworCQkJQmJwRGF0YSAmPSB+KDEgPDwgNyk7IC8vc2V0IGJpdDc9MAorCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisKKwkJCS8vIE5vIENhcnJpZXIgU3VwcHJlc3Npb24gc2V0IEJCUCBSMjQgYml0MD0wCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gMHhGRkZGRkZGRTsgLy9jbGVhciBiaXQwCisJCSAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCBCYnBEYXRhKTsKKwkJfQorCQllbHNlIGlmICgoYXRlbW9kZSAmIEFURV9UWEZSQU1FKSB8fCAoYXRlbW9kZSA9PSBBVEVfU1RPUCkpCisJCXsKKwkJCWlmIChhdGVtb2RlICYgQVRFX1RYQ09OVCkKKwkJCXsKKwkJCQkvLyBObyBDb250LiBUWCBzZXQgQkJQIFIyMiBiaXQ3PTAKKwkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsICZCYnBEYXRhKTsKKwkJCQlCYnBEYXRhICY9IH4oMSA8PCA3KTsgLy9zZXQgYml0Nz0wCisJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisJCQl9CisJCX0KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJUlRVU0JSZWplY3RQZW5kaW5nUGFja2V0cyhwQWQpOworCQlSVFVTQkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlKHBBZCk7CisKKwkJLyogbm90IHVzZWQgaW4gUlQyOHh4ICovCisJCS8vUlRVU0JDbGVhblVwTUxNRVdhaXRRdWV1ZShwQWQpOworCQkvKiBlbXB0eSBmdW5jdGlvbiBzbyBmYXIgKi8KKwkJUlRVU0JDbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZShwQWQpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLy8gQWJvcnQgVHgsIFJYIERNQS4KKwkJUnRtcERtYUVuYWJsZShwQWQsIDApOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCQkvKiBJbiAyOHh4LCBwQWQtPlBlbmRpbmdSeCBpcyBub3Qgb2YgdHlwZSBhdG9taWNfdCBhbnltb3JlICovCisvLwkJd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQkvKiBwZXRlciB0b2RvIDogQnVsa0luTG9jayAqLworCQl3aGlsZSAocEFkLT5QZW5kaW5nUnggPiAwKQorCQl7CisjaWYgMQorCQkJQVRFX1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOworI2Vsc2UKKy8vCQkJTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7CisJCQlwQWQtPlBlbmRpbmdSeC0tOworI2VuZGlmCisJCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCX0KKworCQl3aGlsZSAoKChwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMV0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1syXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzNdID09IFRSVUUpKSAmJiAocEFkLT5CdWxrRmxhZ3MgIT0gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQl7CisJCQlkbworCQkJeworCQkJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKKwkJCX0gd2hpbGUgKEZBTFNFKTsKKworCQkJUlRNUHVzZWNEZWxheSg1MDAwMDApOworCQl9CisKKwkJQVNTRVJUKHBBZC0+UGVuZGluZ1J4ID09IDApOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLy8gRW5hYmxlIFR4LCBSeCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQkvKiB0YXNrIFR4IHN0YXR1cyA6IDAgLS0+IHRhc2sgaXMgaWRsZSwgMSAtLT4gdGFzayBpcyBydW5uaW5nICovCisJCXBBZC0+YXRlLlR4U3RhdHVzID0gMDsKKworCQkvLyBTb2Z0IHJlc2V0IEJCUC4KKwkJQmJwU29mdFJlc2V0KHBBZCk7CisKKwkJLy8gRGlzYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQlNYWNEYXRhICY9ICgweGZmZmZmZmZiKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKworCQkvL0NsZWFuIEFURSBCdWxrIGluL291dCBjb3VudGVyIGFuZCBjb250aW51ZSBzZXR1cAorCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgMCk7CisKKwkJcEFkLT5Db250aW5CdWxrT3V0ID0gRkFMU0U7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiUlhTVE9QIikpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEU6IFJYU1RPUFxuIikpOworCQlhdGVtb2RlID0gcEFkLT5hdGUuTW9kZTsKKworCQkvLyBEaXNhYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCXBBZC0+YXRlLk1vZGUgJj0gQVRFX1JYU1RPUDsKKwkJcEFkLT5hdGUuYlFBUnhTdGFydCA9IEZBTFNFOworLy8JCXBBZC0+YXRlLlR4RG9uZUNvdW50ID0gcEFkLT5hdGUuVHhDb3VudDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJUlRVU0JSZWplY3RQZW5kaW5nUGFja2V0cyhwQWQpOworCQlSVFVTQkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlKHBBZCk7CisKKwkJLyogbm90IHVzZWQgaW4gUlQyOHh4ICovCisJCS8vUlRVU0JDbGVhblVwTUxNRVdhaXRRdWV1ZShwQWQpOworCQlSVFVTQkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlKHBBZCk7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvLwkJd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkpCisJCXdoaWxlIChwQWQtPlBlbmRpbmdSeCA+IDApCisJCXsKKyNpZiAxCisJCQlBVEVfUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisjZWxzZQorLy8JCQlOZGlzSW50ZXJsb2NrZWREZWNyZW1lbnQoJnBBZC0+UGVuZGluZ1J4KTsKKwkJCXBBZC0+UGVuZGluZ1J4LS07CisjZW5kaWYKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMDAwKTsKKwkJfQorCisJCXdoaWxlICgoKHBBZC0+QnVsa091dFBlbmRpbmdbMF0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1sxXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzJdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbM10gPT0gVFJVRSkpICYmIChwQWQtPkJ1bGtGbGFncyAhPSAwKSkJLy9wQWQtPkJ1bGtGbGFncyAhPSAwIHdhaXQgYnVsayBvdXQgZmluaXNoCisJCXsKKwkJCWRvCisJCQl7CisJCQkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworCQkJfSB3aGlsZSAoRkFMU0UpOworCisJCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCX0KKworCQlBU1NFUlQocEFkLT5QZW5kaW5nUnggPT0gMCk7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisJCS8vIFNvZnQgcmVzZXQgQkJQLgorCQlCYnBTb2Z0UmVzZXQocEFkKTsKKwkJcEFkLT5Db250aW5CdWxrSW4gPSBGQUxTRTsKKwl9CisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKwllbHNlIGlmICghc3RyY21wKGFyZywgIlJYRlJBTUUiKSkgLy8gUnggRnJhbWVzCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEU6IFJYRlJBTUVcbiIpKTsKKworCQkvLyBEaXNhYmxlIFJ4IG9mIE1BQyBibG9jaworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBEZWZhdWx0IHZhbHVlIGluIEJCUCBSMjIgaXMgMHgwLgorCQlCYnBEYXRhID0gMDsKKworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQkvLyBDbGVhbiBiaXQ0IHRvIHN0b3AgY29udGludW91cyBUeCBwcm9kdWN0aW9uIHRlc3QuCisJCU1hY0RhdGEgJj0gMHhGRkZGRkZFRjsKKworCSAgIAlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsKKworCQlwQWQtPmF0ZS5Nb2RlIHw9IEFURV9SWEZSQU1FOworCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKworCQkvLyBEaXNhYmxlIFRYIG9mIE1BQyBibG9jaworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDIpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworICAgICAgICAvLyBSZXNldCBSeCBSSU5HLgorCQlmb3IgKCBpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJCXsKKwkJCVBSWF9DT05URVhUICBwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisKKwkJCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5SZWFkYWJsZSA9IEZBTFNFOworCisJCQkvLworCQkJLy8gR2V0IHRoZSB1cmIgZnJvbSBrZXJuZWwgYmFjayB0byBkcml2ZXIuCisJCQkvLworCQkJUlRVU0JfVU5MSU5LX1VSQihwUnhDb250ZXh0LT5wVXJiKTsKKworCQkJLyogU2xlZXAgMjAwIG1pY3Jvc2VjcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsuICovCisJCQlOZGlzTVNsZWVwKDIwMCk7CisJCQlwQWQtPkJ1bGtJblJlcSA9IDA7CisKKy8vCQkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5QZW5kaW5nUngsIDApOworCQkJcEFkLT5QZW5kaW5nUnggPSAwOworCQkJcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXggPSAwOwkvLyBOZXh0IFJ4IFJlYWQgaW5kZXgKKwkJCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXgJCT0gUlhfUklOR19TSVpFIC0gMTsJLy8gUnggQnVsayBwb2ludGVyCisJCQlwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uID0gMDsKKwkJfQorCisJCS8vIHJlYWQgdG8gY2xlYXIgY291bnRlcnMKKwkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBSWF9TVEFfQ05UMCwgJnRlbXApOyAvL1JYIFBIWSAmIFJYIENSQyBjb3VudAorCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFJYX1NUQV9DTlQxLCAmdGVtcCk7IC8vUlggUExDUCBlcnJvciBjb3VudCAmIENDQSBmYWxzZSBhbGFybSBjb3VudAorCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFJYX1NUQV9DTlQyLCAmdGVtcCk7IC8vUlggRklGTyBvdmVyZmxvdyBmcmFtZSBjb3VudCAmIFJYIGR1cGxpY2F0ZWQgZmlsdGVyZWQgZnJhbWUgY291bnQKKworCQlwQWQtPkNvbnRpbkJ1bGtJbiA9IFRSVUU7CisKKwkJLy8gRW5hYmxlIFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQkvLyBFbmFibGUgUlggb2YgTUFDIGJsb2NrCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAzKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gS2ljayBidWxrIGluCisJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwl9CisJZWxzZQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBJbnZhbGlkIGFyZyFcbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlSVE1QdXNlY0RlbGF5KDUwMDApOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSBBVEVDbWRIYW5kbGVyKClcbiIpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCitJTlQJU2V0X0FURV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlpZiAoQVRFQ21kSGFuZGxlcihwQWQsIGFyZykpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1Byb2MgRmFpbGVkXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBBRERSMT1EQSBmb3IgVHhGcmFtZShBUCAgOiBUbyBEUyA9IDAgOyBGcm9tIERTID0gMSkKKyAgICAgICAgb3IKKyAgICAgICAgU2V0IEFURSBBRERSMz1EQSBmb3IgVHhGcmFtZShTVEEgOiBUbyBEUyA9IDEgOyBGcm9tIERTID0gMCkKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfREFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUgkJCQkqdmFsdWU7CisJSU5UCQkJCQlpOworCisJaWYoc3RybGVuKGFyZykgIT0gMTcpICAvL01hYyBhZGRyZXNzIGFjY2VwdGFibGUgZm9ybWF0IDAxOjAyOjAzOjA0OjA1OjA2IGxlbmd0aCAxNworCQlyZXR1cm4gRkFMU0U7CisKKyAgICBmb3IgKGk9MCwgdmFsdWUgPSByc3RydG9rKGFyZywgIjoiKTsgdmFsdWU7IHZhbHVlID0gcnN0cnRvayhOVUxMLCAiOiIpKQorCXsKKwkJaWYoKHN0cmxlbih2YWx1ZSkgIT0gMikgfHwgKCFpc3hkaWdpdCgqdmFsdWUpKSB8fCAoIWlzeGRpZ2l0KCoodmFsdWUrMSkpKSApCisJCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUF0b0godmFsdWUsICZwQWQtPmF0ZS5BZGRyM1tpKytdLCAxKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKwlpZihpICE9IDYpCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX0RBX1Byb2MgKERBID0gJTJYOiUyWDolMlg6JTJYOiUyWDolMlgpXG4iLCBwQWQtPmF0ZS5BZGRyM1swXSwKKwkJcEFkLT5hdGUuQWRkcjNbMV0sIHBBZC0+YXRlLkFkZHIzWzJdLCBwQWQtPmF0ZS5BZGRyM1szXSwgcEFkLT5hdGUuQWRkcjNbNF0sIHBBZC0+YXRlLkFkZHIzWzVdKSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfREFfUHJvYyBTdWNjZXNzXG4iKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIEFERFIzPVNBIGZvciBUeEZyYW1lKEFQICA6IFRvIERTID0gMCA7IEZyb20gRFMgPSAxKQorICAgICAgICBvcgorICAgICAgICBTZXQgQVRFIEFERFIyPVNBIGZvciBUeEZyYW1lKFNUQSA6IFRvIERTID0gMSA7IEZyb20gRFMgPSAwKQorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9TQV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlDSEFSCQkJCSp2YWx1ZTsKKwlJTlQJCQkJCWk7CisKKwlpZihzdHJsZW4oYXJnKSAhPSAxNykgIC8vTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgMDE6MDI6MDM6MDQ6MDU6MDYgbGVuZ3RoIDE3CisJCXJldHVybiBGQUxTRTsKKworICAgIGZvciAoaT0wLCB2YWx1ZSA9IHJzdHJ0b2soYXJnLCAiOiIpOyB2YWx1ZTsgdmFsdWUgPSByc3RydG9rKE5VTEwsICI6IikpCisJeworCQlpZigoc3RybGVuKHZhbHVlKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp2YWx1ZSkpIHx8ICghaXN4ZGlnaXQoKih2YWx1ZSsxKSkpICkKKwkJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJQXRvSCh2YWx1ZSwgJnBBZC0+YXRlLkFkZHIyW2krK10sIDEpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCWlmKGkgIT0gNikKKwkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfU0FfUHJvYyAoU0EgPSAlMlg6JTJYOiUyWDolMlg6JTJYOiUyWClcbiIsIHBBZC0+YXRlLkFkZHIyWzBdLAorCQlwQWQtPmF0ZS5BZGRyMlsxXSwgcEFkLT5hdGUuQWRkcjJbMl0sIHBBZC0+YXRlLkFkZHIyWzNdLCBwQWQtPmF0ZS5BZGRyMls0XSwgcEFkLT5hdGUuQWRkcjJbNV0pKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9TQV9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgQUREUjI9QlNTSUQgZm9yIFR4RnJhbWUoQVAgIDogVG8gRFMgPSAwIDsgRnJvbSBEUyA9IDEpCisgICAgICAgIG9yCisgICAgICAgIFNldCBBVEUgQUREUjE9QlNTSUQgZm9yIFR4RnJhbWUoU1RBIDogVG8gRFMgPSAxIDsgRnJvbSBEUyA9IDApCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX0JTU0lEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIJCQkJKnZhbHVlOworCUlOVAkJCQkJaTsKKworCWlmKHN0cmxlbihhcmcpICE9IDE3KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcKKwkJcmV0dXJuIEZBTFNFOworCisgICAgZm9yIChpPTAsIHZhbHVlID0gcnN0cnRvayhhcmcsICI6Iik7IHZhbHVlOyB2YWx1ZSA9IHJzdHJ0b2soTlVMTCwgIjoiKSkKKwl7CisJCWlmKChzdHJsZW4odmFsdWUpICE9IDIpIHx8ICghaXN4ZGlnaXQoKnZhbHVlKSkgfHwgKCFpc3hkaWdpdCgqKHZhbHVlKzEpKSkgKQorCQkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlBdG9IKHZhbHVlLCAmcEFkLT5hdGUuQWRkcjFbaSsrXSwgMSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisJaWYoaSAhPSA2KQorCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9CU1NJRF9Qcm9jIChCU1NJRCA9ICUyWDolMlg6JTJYOiUyWDolMlg6JTJYKVxuIiwJcEFkLT5hdGUuQWRkcjFbMF0sCisJCXBBZC0+YXRlLkFkZHIxWzFdLCBwQWQtPmF0ZS5BZGRyMVsyXSwgcEFkLT5hdGUuQWRkcjFbM10sIHBBZC0+YXRlLkFkZHIxWzRdLCBwQWQtPmF0ZS5BZGRyMVs1XSkpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX0JTU0lEX1Byb2MgU3VjY2Vzc1xuIikpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBDaGFubmVsCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX0NIQU5ORUxfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUNIQVIgY2hhbm5lbDsKKworCWNoYW5uZWwgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiAyMTYpKS8vIHRvIGFsbG93IEEgYmFuZCBjaGFubmVsIDogKChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiAxNCkpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX0NIQU5ORUxfUHJvYzo6T3V0IG9mIHJhbmdlLCBpdCBzaG91bGQgYmUgaW4gcmFuZ2Ugb2YgMX4xNC5cbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlwQWQtPmF0ZS5DaGFubmVsID0gY2hhbm5lbDsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfQ0hBTk5FTF9Qcm9jIChBVEUgQ2hhbm5lbCA9ICVkKVxuIiwgcEFkLT5hdGUuQ2hhbm5lbCkpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9DSEFOTkVMX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IFBvd2VyMAorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9QT1dFUjBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUiBUeFBvd2VyOworCisJVHhQb3dlciA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwl7CisJCWlmICgoVHhQb3dlciA+IDMxKSB8fCAoVHhQb3dlciA8IDApKQorCQl7CisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX1BPV0VSMF9Qcm9jOjpPdXQgb2YgcmFuZ2UgKFZhbHVlPSVkKVxuIiwgVHhQb3dlcikpOworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJfQorCWVsc2UvLyA1LjVHSHoKKwl7CisJCWlmICgoVHhQb3dlciA+IDE1KSB8fCAoVHhQb3dlciA8IC03KSkKKwkJeworCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9UWF9QT1dFUjBfUHJvYzo6T3V0IG9mIHJhbmdlIChWYWx1ZT0lZClcbiIsIFR4UG93ZXIpKTsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKworCXBBZC0+YXRlLlR4UG93ZXIwID0gVHhQb3dlcjsKKwlBVEVUeFB3ckhhbmRsZXIocEFkLCAwKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfUE9XRVIwX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IFBvd2VyMQorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9QT1dFUjFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUiBUeFBvd2VyOworCisJVHhQb3dlciA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwl7CisJaWYgKChUeFBvd2VyID4gMzEpIHx8IChUeFBvd2VyIDwgMCkpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jOjpPdXQgb2YgcmFuZ2UgKFZhbHVlPSVkKVxuIiwgVHhQb3dlcikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCX0KKwllbHNlCisJeworCQlpZiAoKFR4UG93ZXIgPiAxNSkgfHwgKFR4UG93ZXIgPCAtNykpCisJCXsKKwkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfUE9XRVIxX1Byb2M6Ok91dCBvZiByYW5nZSAoVmFsdWU9JWQpXG4iLCBUeFBvd2VyKSk7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwl9CisKKwlwQWQtPmF0ZS5UeFBvd2VyMSA9IFR4UG93ZXI7CisJQVRFVHhQd3JIYW5kbGVyKHBBZCwgMSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBBbnRlbm5hCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX0FudGVubmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUiB2YWx1ZTsKKworCXZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmICgodmFsdWUgPiAyKSB8fCAodmFsdWUgPCAwKSkKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfQW50ZW5uYV9Qcm9jOjpPdXQgb2YgcmFuZ2UgKFZhbHVlPSVkKVxuIiwgdmFsdWUpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXBBZC0+YXRlLlR4QW50ZW5uYVNlbCA9IHZhbHVlOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9BbnRlbm5hX1Byb2MgKEFudGVubmEgPSAlZClcbiIsIHBBZC0+YXRlLlR4QW50ZW5uYVNlbCkpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUmFsaW5rOiBTZXRfQVRFX1RYX0FudGVubmFfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgUnggQW50ZW5uYQorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9SWF9BbnRlbm5hX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIgdmFsdWU7CisKKwl2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoKHZhbHVlID4gMykgfHwgKHZhbHVlIDwgMCkpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1JYX0FudGVubmFfUHJvYzo6T3V0IG9mIHJhbmdlIChWYWx1ZT0lZClcbiIsIHZhbHVlKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlwQWQtPmF0ZS5SeEFudGVubmFTZWwgPSB2YWx1ZTsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jIChBbnRlbm5hID0gJWQpXG4iLCBwQWQtPmF0ZS5SeEFudGVubmFTZWwpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBSRiBmcmVxdWVuY2Ugb2Zmc2V0CisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUNIQVIgUkZGcmVxT2Zmc2V0OworCVVMT05HIFI0OworCisJUkZGcmVxT2Zmc2V0ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKyNpZm5kZWYgUlQzMHh4CisJaWYoUkZGcmVxT2Zmc2V0ID49IDY0KQorI2VuZGlmIC8vIFJUMzB4eCAvLworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA4LzA2OiBLSCBtb2RpZmllZCB0aGUgbGltaXQgb2Ygb2Zmc2V0IHZhbHVlIGZyb20gNjUgdG8gOTUoMHg1RikKKwlpZihSRkZyZXFPZmZzZXQgPj0gOTUpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYzo6T3V0IG9mIHJhbmdlLCBpdCBzaG91bGQgYmUgaW4gcmFuZ2Ugb2YgMH42My5cbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXBBZC0+YXRlLlJGRnJlcU9mZnNldCA9IFJGRnJlcU9mZnNldDsKKyNpZmRlZiBSVDMweHgKKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCS8vIFNldCBSRiBvZmZzZXQKKwkJVUNIQVIgUkZWYWx1ZTsKKwkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsIChQVUNIQVIpJlJGVmFsdWUpOworCQkJCS8vMjAwOC8wOC8wNjogS0ggbW9kaWZpZWQgInBBZC0+UkZGcmVxT2Zmc2V0IiB0byAicEFkLT5hdGUuUkZGcmVxT2Zmc2V0IgorCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmIDB4ODApIHwgcEFkLT5hdGUuUkZGcmVxT2Zmc2V0OworCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsIChVQ0hBUilSRlZhbHVlKTsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKworCQlSNCA9IHBBZC0+YXRlLlJGRnJlcU9mZnNldCA8PCAxNTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRiByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJUjQgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjQgJiAoKH4weDAwMWY4MDAwKSkpOworCQlwQWQtPkxhdGNoUmZSZWdzLlI0ID0gUjQ7CisKKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworCX0KKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYyAoUkZGcmVxT2Zmc2V0ID0gJWQpXG4iLCBwQWQtPmF0ZS5SRkZyZXFPZmZzZXQpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfRlJFUU9GRlNFVF9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBSRiBCVworCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9CV19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlpbnQgaTsKKwlVQ0hBUiB2YWx1ZSA9IDA7CisJVUNIQVIgQkJQQ3VycmVudEJXOworCisJQkJQQ3VycmVudEJXID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmKEJCUEN1cnJlbnRCVyA9PSAwKQorCQlwQWQtPmF0ZS5UeFdJLkJXID0gQldfMjA7CisJZWxzZQorCQlwQWQtPmF0ZS5UeFdJLkJXID0gQldfNDA7CisKKwlpZihwQWQtPmF0ZS5UeFdJLkJXID09IEJXXzIwKQorCXsKKwkJaWYocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworIAkJZm9yIChpPTA7IGk8NTsgaSsrKQorIAkJeworCQkJCWlmIChwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbaV0gIT0gMHhmZmZmZmZmZikKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkqNCwgcEFkLT5UeDIwTVB3ckNmZ0dCYW5kW2ldKTsKKwkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlmb3IgKGk9MDsgaTw1OyBpKyspCisJCQl7CisJCQkJaWYgKHBBZC0+VHgyME1Qd3JDZmdBQmFuZFtpXSAhPSAweGZmZmZmZmZmKQorIAkJCXsKKwkJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUFdSX0NGR18wICsgaSo0LCBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0pOworIAkJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworIAkJCX0KKyAJCX0KKwkJfQorCisJCS8vU2V0IEJCUCBSNCBiaXRbNDozXT0wOjAKKyAJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmdmFsdWUpOworIAkJdmFsdWUgJj0gKH4weDE4KTsKKyAJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgdmFsdWUpOworCisgIAkJLy9TZXQgQkJQIFI2Nj0weDNDCisgCQl2YWx1ZSA9IDB4M0M7CisgCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCB2YWx1ZSk7CisJCS8vU2V0IEJCUCBSNjg9MHgwQgorCQkvL3RvIGltcHJvdmUgUnggc2Vuc2l0aXZpdHkuCisJCXZhbHVlID0gMHgwQjsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OCwgdmFsdWUpOworCQkvL1NldCBCQlAgUjY5PTB4MTYKKwkJdmFsdWUgPSAweDE2OworIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgdmFsdWUpOworCQkvL1NldCBCQlAgUjcwPTB4MDgKKwkJdmFsdWUgPSAweDA4OworIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgdmFsdWUpOworCQkvL1NldCBCQlAgUjczPTB4MTEKKwkJdmFsdWUgPSAweDExOworIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgdmFsdWUpOworCisJICAgIC8vIElmIENoYW5uZWw9MTQsIEJhbmR3aWR0aD0yME0gYW5kIE1vZGU9Q0NLLCBTZXQgQkJQIFI0IGJpdDU9MQorCSAgICAvLyAoSmFwYW4gZmlsdGVyIGNvZWZmaWNpZW50cykKKwkgICAgLy8gVGhpcyBzZWdtZW50IG9mIGNvZGUgd2lsbCBvbmx5IHdvcmtzIHdoZW4gQVRFVFhNT0RFIGFuZCBBVEVDSEFOTkVMCisJICAgIC8vIHdlcmUgc2V0IHRvIE1PREVfQ0NLIGFuZCAxNCByZXNwZWN0aXZlbHkgYmVmb3JlIEFURVRYQlcgaXMgc2V0IHRvIDAuCisJICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCWlmIChwQWQtPmF0ZS5DaGFubmVsID09IDE0KQorCQl7CisJCQlpbnQgVHhNb2RlID0gcEFkLT5hdGUuVHhXSS5QSFlNT0RFOworCQkJaWYgKFR4TW9kZSA9PSBNT0RFX0NDSykKKwkJCXsKKwkJCQkvLyB3aGVuIENoYW5uZWw9PTE0ICYmIE1vZGU9PUNDSyAmJiBCYW5kV2lkdGg9PTIwTSwgQkJQIFI0IGJpdDU9MQorIAkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJnZhbHVlKTsKKwkJCQl2YWx1ZSB8PSAweDIwOyAvL3NldCBiaXQ1PTEKKyAJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCB2YWx1ZSk7CisJCQl9CisJCX0KKworCSAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyBJZiBiYW5kd2lkdGggIT0gNDBNLCBSRiBSZWc0IGJpdCAyMSA9IDAuCisjaWZkZWYgUlQzMHh4CisJLy8gU2V0IEJXCisJCWlmKElTX1JUMzB4eChwQWQpKQorCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCAoVUNIQVIpIHBBZC0+TWxtZS5DYWxpQlcyMFJmUjI0KTsKKwkJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQl7CisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgJj0gfjB4MDAyMDAwMDA7CisJCVJ0bXBSZklvV3JpdGUocEFkKTsKKwl9CisKKwl9CisJZWxzZSBpZihwQWQtPmF0ZS5UeFdJLkJXID09IEJXXzQwKQorCXsKKwkJaWYocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworCQkJZm9yIChpPTA7IGk8NTsgaSsrKQorCQkJeworCQkJCWlmIChwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbaV0gIT0gMHhmZmZmZmZmZikKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkqNCwgcEFkLT5UeDQwTVB3ckNmZ0dCYW5kW2ldKTsKKwkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlmb3IgKGk9MDsgaTw1OyBpKyspCisJCQl7CisJCQkJaWYgKHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFtpXSAhPSAweGZmZmZmZmZmKQorCQkJCXsKKwkJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUFdSX0NGR18wICsgaSo0LCBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbaV0pOworCQkJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQkJCX0KKwkJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmICgocEFkLT5hdGUuVHhXSS5QSFlNT0RFID49IE1PREVfSFRNSVgpICYmIChwQWQtPmF0ZS5UeFdJLk1DUyA9PSA3KSkKKwkJCXsKKyAgICAJCQl2YWx1ZSA9IDB4Mjg7CisgICAgCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NywgdmFsdWUpOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl9CisKKwkJLy9TZXQgQkJQIFI0IGJpdFs0OjNdPTE6MAorCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJnZhbHVlKTsKKwkJdmFsdWUgJj0gKH4weDE4KTsKKwkJdmFsdWUgfD0gMHgxMDsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCB2YWx1ZSk7CisKKwkJLy9TZXQgQkJQIFI2Nj0weDNDCisJCXZhbHVlID0gMHgzQzsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgdmFsdWUpOworCQkvL1NldCBCQlAgUjY4PTB4MEMKKwkJLy90byBpbXByb3ZlIFJ4IHNlbnNpdGl2aXR5LgorCQl2YWx1ZSA9IDB4MEM7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjgsIHZhbHVlKTsKKwkJLy9TZXQgQkJQIFI2OT0weDFBCisJCXZhbHVlID0gMHgxQTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgdmFsdWUpOworCQkvL1NldCBCQlAgUjcwPTB4MEEKKwkJdmFsdWUgPSAweDBBOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCB2YWx1ZSk7CisJCS8vU2V0IEJCUCBSNzM9MHgxNgorCQl2YWx1ZSA9IDB4MTY7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIHZhbHVlKTsKKworCQkvLyBJZiBiYW5kd2lkdGggPSA0ME0sIHNldCBSRiBSZWc0IGJpdCAyMSA9IDEuCisjaWZkZWYgUlQzMHh4CisJLy8gU2V0IEJXCisJCWlmKElTX1JUMzB4eChwQWQpKQorCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCAoVUNIQVIpIHBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0KTsKKwkJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQl7CisJCQlwQWQtPkxhdGNoUmZSZWdzLlI0IHw9IDB4MDAyMDAwMDA7CisJCQlSdG1wUmZJb1dyaXRlKHBBZCk7CisJCX0KKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX0JXX1Byb2MgKEJCUEN1cnJlbnRCVyA9ICVkKVxuIiwgcEFkLT5hdGUuVHhXSS5CVykpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9UWF9CV19Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBmcmFtZSBsZW5ndGgKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfVFhfTEVOR1RIX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCXBBZC0+YXRlLlR4TGVuZ3RoID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmKChwQWQtPmF0ZS5UeExlbmd0aCA8IDI0KSB8fCAocEFkLT5hdGUuVHhMZW5ndGggPiAoTUFYX0ZSQU1FX1NJWkUgLSAzNC8qID09IDIzMTIgKi8pKSkKKwl7CisJCXBBZC0+YXRlLlR4TGVuZ3RoID0gKE1BWF9GUkFNRV9TSVpFIC0gMzQvKiA9PSAyMzEyICovKTsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9UWF9MRU5HVEhfUHJvYzo6T3V0IG9mIHJhbmdlLCBpdCBzaG91bGQgYmUgaW4gcmFuZ2Ugb2YgMjR+JWQuXG4iLCAoTUFYX0ZSQU1FX1NJWkUgLSAzNC8qID09IDIzMTIgKi8pKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX0xFTkdUSF9Qcm9jIChUeExlbmd0aCA9ICVkKVxuIiwgcEFkLT5hdGUuVHhMZW5ndGgpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfTEVOR1RIX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IGZyYW1lIGNvdW50CisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX0NPVU5UX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCXBBZC0+YXRlLlR4Q291bnQgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9DT1VOVF9Qcm9jIChUeENvdW50ID0gJWQpXG4iLCBwQWQtPmF0ZS5UeENvdW50KSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX0NPVU5UX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IGZyYW1lIE1DUworCisgICAgICAgIFJldHVybjoKKyAgICAgICAgCVRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX01DU19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVQ0hBUiBNQ1M7CisJaW50IHJlc3VsdDsKKworCU1DUyA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJcmVzdWx0ID0gQ2hlY2tNQ1NWYWxpZChwQWQtPmF0ZS5UeFdJLlBIWU1PREUsIE1DUyk7CisKKwlpZiAocmVzdWx0ICE9IC0xKQorCXsKKwkJcEFkLT5hdGUuVHhXSS5NQ1MgPSAoVUNIQVIpTUNTOworCX0KKwllbHNlCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX01DU19Qcm9jOjpPdXQgb2YgcmFuZ2UsIHJlZmVyIHRvIHJhdGUgdGFibGUuXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX01DU19Qcm9jIChNQ1MgPSAlZClcbiIsIHBBZC0+YXRlLlR4V0kuTUNTKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX01DU19Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBmcmFtZSBNb2RlCisgICAgICAgIDA6IE1PREVfQ0NLCisgICAgICAgIDE6IE1PREVfT0ZETQorICAgICAgICAyOiBNT0RFX0hUTUlYCisgICAgICAgIDM6IE1PREVfSFRHUkVFTkZJRUxECisKKyAgICAgICAgUmV0dXJuOgorICAgICAgICAJVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfVFhfTU9ERV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlwQWQtPmF0ZS5UeFdJLlBIWU1PREUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYocEFkLT5hdGUuVHhXSS5QSFlNT0RFID4gMykKKwl7CisJCXBBZC0+YXRlLlR4V0kuUEhZTU9ERSA9IDA7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfTU9ERV9Qcm9jOjpPdXQgb2YgcmFuZ2UuIGl0IHNob3VsZCBiZSBpbiByYW5nZSBvZiAwfjNcbiIpKTsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiMDogQ0NLLCAxOiBPRkRNLCAyOiBIVF9NSVgsIDM6IEhUX0dSRUVOX0ZJRUxELlxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9NT0RFX1Byb2MgKFR4TW9kZSA9ICVkKVxuIiwgcEFkLT5hdGUuVHhXSS5QSFlNT0RFKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX01PREVfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgVHggZnJhbWUgR0kKKworICAgICAgICBSZXR1cm46CisgICAgICAgIAlUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9HSV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlwQWQtPmF0ZS5UeFdJLlNob3J0R0kgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYocEFkLT5hdGUuVHhXSS5TaG9ydEdJID4gMSkKKwl7CisJCXBBZC0+YXRlLlR4V0kuU2hvcnRHSSA9IDA7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfR0lfUHJvYzo6T3V0IG9mIHJhbmdlXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1RYX0dJX1Byb2MgKEdJID0gJWQpXG4iLCBwQWQtPmF0ZS5UeFdJLlNob3J0R0kpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfR0lfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworSU5UCVNldF9BVEVfUlhfRkVSX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCXBBZC0+YXRlLmJSeEZlciA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAocEFkLT5hdGUuYlJ4RmVyID09IDEpCisJeworCQlwQWQtPmF0ZS5SeENudFBlclNlYyA9IDA7CisJCXBBZC0+YXRlLlJ4VG90YWxDbnQgPSAwOworCX0KKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfUlhfRkVSX1Byb2MgKGJSeEZlciA9ICVkKVxuIiwgcEFkLT5hdGUuYlJ4RmVyKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1JYX0ZFUl9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfQVRFX1JlYWRfUkZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisjaWZkZWYgUlQzMHh4CisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgUlQzMHh4IEFURTwtLQorCWlmKElTX1JUMzB4eChwQWQpKQorCXsKKwkJCS8qIG1vZGlmeSBieSBXWSBmb3IgUmVhZCBSRiBSZWcuIGVycm9yICovCisJCVVDSEFSIFJGVmFsdWU7CisJCUlOVCBpbmRleD0wOworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAzMjsgaW5kZXgrKykKKwkJeworCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBpbmRleCwgKFBVQ0hBUikmUkZWYWx1ZSk7CisJCQlwcmludGsoIlIlZD0lZFxuIixpbmRleCxSRlZhbHVlKTsKKwkJfQorCX0KKwllbHNlCisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgUlQzMHh4IEFURS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKwkJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlIxID0gJWx4XG4iLCBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKKwkJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlIyID0gJWx4XG4iLCBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKKwkJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlIzID0gJWx4XG4iLCBwQWQtPkxhdGNoUmZSZWdzLlIzKTsKKwkJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlI0ID0gJWx4XG4iLCBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfQVRFX1dyaXRlX1JGMV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyNpZmRlZiBSVDMweHgKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURTwtLQorCWlmKElTX1JUMzB4eChwQWQpKQorCXsKKwkJcHJpbnRrKCJXYXJuaW5nISEgUlQzMHh4IERvbid0IFN1cHBvcnRcbiIpOworCQlyZXR1cm4gRkFMU0U7CisKKwl9CisJZWxzZQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCQlVSU5UMzIgdmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTYpOworCisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjEgPSB2YWx1ZTsKKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworCX0KKwlyZXR1cm4gVFJVRTsKKworfQorCitJTlQgU2V0X0FURV9Xcml0ZV9SRjJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisjaWZkZWYgUlQzMHh4CisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEU8LS0KKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCXByaW50aygiV2FybmluZyEhIFJUMzB4eCBEb24ndCBTdXBwb3J0XG4iKTsKKwkJcmV0dXJuIEZBTFNFOworCisJfQorCWVsc2UKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKwkJVUlOVDMyIHZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDE2KTsKKworCQlwQWQtPkxhdGNoUmZSZWdzLlIyID0gdmFsdWU7CisJCVJ0bXBSZklvV3JpdGUocEFkKTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfQVRFX1dyaXRlX1JGM19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyNpZmRlZiBSVDMweHgKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURTwtLQorCWlmKElTX1JUMzB4eChwQWQpKQorCXsKKwkJcHJpbnRrKCJXYXJuaW5nISEgUlQzMHh4IERvbid0IFN1cHBvcnRcbiIpOworCQlyZXR1cm4gRkFMU0U7CisKKwl9CisJZWxzZQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCQlVSU5UMzIgdmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTYpOworCisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSB2YWx1ZTsKKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworSU5UIFNldF9BVEVfV3JpdGVfUkY0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCisJaWYoSVNfUlQzMHh4KHBBZCkpCisJeworCQlwcmludGsoIldhcm5pbmchISBSVDMweHggRG9uJ3QgU3VwcG9ydFxuIik7CisJCXJldHVybiBGQUxTRTsKKworCX0KKwllbHNlCisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEUtLT4KKyNlbmRpZiAvLyBSVDMweHggLy8KKwl7CisJCVVJTlQzMiB2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxNik7CisKKwkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IHZhbHVlOworCQlSdG1wUmZJb1dyaXRlKHBBZCk7CisJfQorCXJldHVybiBUUlVFOworfQorI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCitJTlQJU0VUX0FURV8zMDcwUkZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUiAqdGhpc19jaGFyOworCUNIQVIgKnZhbHVlOworCVVJTlQzMiBSZWcsUkZWYWx1ZTsKKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCXByaW50aygiU0VUX0FURV8zMDcwUkZfUHJvYz0lc1xuIixhcmcpOworCQl0aGlzX2NoYXIgPWFyZzsKKwkJaWYgKCh2YWx1ZSA9IHN0cmNocih0aGlzX2NoYXIsICc6JykpICE9IE5VTEwpCisJCQkqdmFsdWUrKyA9IDA7CisJCVJlZz0gc2ltcGxlX3N0cnRvbCh0aGlzX2NoYXIsIDAsIDE2KTsKKwkJUkZWYWx1ZT0gc2ltcGxlX3N0cnRvbCh2YWx1ZSwgMCwgMTYpOworCQlwcmludGsoIlJGIFJlZ1slZF09JWRcbiIsUmVnLFJGVmFsdWUpOworCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSZWcsUkZWYWx1ZSk7CisJfQorCWVsc2UKKwkJcHJpbnRrKCJXYXJuaW5nISEgT25seSAzMDcwIFN1cHBvcnRcbiIpOworCXJldHVybiBUUlVFOworfQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIExvYWQgYW5kIFdyaXRlIEVFUFJPTSBmcm9tIGEgYmluYXJ5IGZpbGUgcHJlcGFyZWQgaW4gYWR2YW5jZS4KKworICAgICAgICBSZXR1cm46CisgICAgICAgIAlUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisjaWZuZGVmIFVDT1MKK0lOVCBTZXRfQVRFX0xvYWRfRTJQX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUJPT0xFQU4JCSAgICByZXQgPSBGQUxTRTsKKwlQVUNIQVIJCQlzcmMgPSBFRVBST01fQklOX0ZJTEVfTkFNRTsKKwlzdHJ1Y3QgZmlsZQkJKnNyY2Y7CisJSU5UMzIgCQkJcmV0dmFsLCBvcmdmc3VpZCwgb3JnZnNnaWQ7CisgICAJbW1fc2VnbWVudF90CW9yZ2ZzOworCVVTSE9SVCAJCQlXcml0ZUVFUFJPTVsoRUVQUk9NX1NJWkUvMildOworCVVJTlQzMgkJCUZpbGVMZW5ndGggPSAwOworCVVJTlQzMiAJCQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI9PT0+ICVzICh2YWx1ZT0lZClcblxuIiwgX19GVU5DVElPTl9fLCB2YWx1ZSkpOworCisJaWYgKHZhbHVlID4gMCkKKwl7CisJCS8qIHplcm8gdGhlIGUycCBidWZmZXIgKi8KKwkJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUilXcml0ZUVFUFJPTSwgRUVQUk9NX1NJWkUpOworCisJCS8qIHNhdmUgdWlkIGFuZCBnaWQgdXNlZCBmb3IgZmlsZXN5c3RlbSBhY2Nlc3MuCisJICAgICoqIHNldCB1c2VyIGFuZCBncm91cCB0byAwIChyb290KQorCSAgICAqLworCQlvcmdmc3VpZCA9IGN1cnJlbnQtPmZzdWlkOworCQlvcmdmc2dpZCA9IGN1cnJlbnQtPmZzZ2lkOworCQkvKiBhcyByb290ICovCisJCWN1cnJlbnQtPmZzdWlkID0gY3VycmVudC0+ZnNnaWQgPSAwOworICAgIAlvcmdmcyA9IGdldF9mcygpOworICAgIAlzZXRfZnMoS0VSTkVMX0RTKTsKKworCQlkbworCQl7CisJCQkvKiBvcGVuIHRoZSBiaW4gZmlsZSAqLworCQkJc3JjZiA9IGZpbHBfb3BlbihzcmMsIE9fUkRPTkxZLCAwKTsKKworCQkJaWYgKElTX0VSUihzcmNmKSkKKwkJCXsKKwkJCQlhdGVfcHJpbnQoIiVzIC0gRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsIF9fRlVOQ1RJT05fXywgLVBUUl9FUlIoc3JjZiksIHNyYyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIHRoZSBvYmplY3QgbXVzdCBoYXZlIGEgcmVhZCBtZXRob2QgKi8KKwkJCWlmICgoc3JjZi0+Zl9vcCA9PSBOVUxMKSB8fCAoc3JjZi0+Zl9vcC0+cmVhZCA9PSBOVUxMKSkKKwkJCXsKKwkJCQlhdGVfcHJpbnQoIiVzIC0gJXMgZG9lcyBub3QgaGF2ZSBhIHJlYWQgbWV0aG9kXG4iLCBfX0ZVTkNUSU9OX18sIHNyYyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIHJlYWQgdGhlIGZpcm13YXJlIGZyb20gdGhlIGZpbGUgKi5iaW4gKi8KKwkJCUZpbGVMZW5ndGggPSBzcmNmLT5mX29wLT5yZWFkKHNyY2YsCisJCQkJCQkJCQkJICAoUFVDSEFSKVdyaXRlRUVQUk9NLAorCQkJCQkJCQkJCSAgRUVQUk9NX1NJWkUsCisJCQkJCQkJCQkJICAmc3JjZi0+Zl9wb3MpOworCisJCQlpZiAoRmlsZUxlbmd0aCAhPSBFRVBST01fU0laRSkKKwkJCXsKKwkJCQlhdGVfcHJpbnQoIiVzOiBlcnJvciBmaWxlIGxlbmd0aCAoPSVkKSBpbiBlMnAuYmluXG4iLAorCQkJCQkgICBfX0ZVTkNUSU9OX18sIEZpbGVMZW5ndGgpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIHdyaXRlIHRoZSBjb250ZW50IG9mIC5iaW4gZmlsZSB0byBFRVBST00gKi8KKwkJCQlydF9lZV93cml0ZV9hbGwocEFkLCBXcml0ZUVFUFJPTSk7CisJCQkJcmV0ID0gVFJVRTsKKwkJCX0KKwkJCWJyZWFrOworCQl9IHdoaWxlKFRSVUUpOworCisJCS8qIGNsb3NlIGZpcm13YXJlIGZpbGUgKi8KKwkJaWYgKElTX0VSUihzcmNmKSkKKwkJeworCQkJCTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJldHZhbCA9IGZpbHBfY2xvc2Uoc3JjZiwgTlVMTCk7CisJCQlpZiAocmV0dmFsKQorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIi0tPiBFcnJvciAlZCBjbG9zaW5nICVzXG4iLCAtcmV0dmFsLCBzcmMpKTsKKworCQkJfQorCQl9CisKKwkJLyogcmVzdG9yZSAqLworCQlzZXRfZnMob3JnZnMpOworCQljdXJyZW50LT5mc3VpZCA9IG9yZ2ZzdWlkOworCQljdXJyZW50LT5mc2dpZCA9IG9yZ2ZzZ2lkOworCX0KKyAgICBBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI8PT09ICVzIChyZXQ9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIHJldCkpOworCisgICAgcmV0dXJuIHJldDsKKworfQorI2Vsc2UKK0lOVCBTZXRfQVRFX0xvYWRfRTJQX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVTSE9SVCAJCQlXcml0ZUVFUFJPTVsoRUVQUk9NX1NJWkUvMildOworCXN0cnVjdCBpd3JlcQkqd3JxID0gKHN0cnVjdCBpd3JlcSAqKWFyZzsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gJXMgKHdycS0+dS5kYXRhLmxlbmd0aCA9ICVkKVxuXG4iLCBfX0ZVTkNUSU9OX18sIHdycS0+dS5kYXRhLmxlbmd0aCkpOworCisJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBFRVBST01fU0laRSkKKwl7CisJCWF0ZV9wcmludCgiJXM6IGVycm9yIGxlbmd0aCAoPSVkKSBmcm9tIGhvc3RcbiIsCisJCQkgICBfX0ZVTkNUSU9OX18sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZWxzZS8qICh3cnEtPnUuZGF0YS5sZW5ndGggPT0gRUVQUk9NX1NJWkUpICovCisJeworCQkvKiB6ZXJvIHRoZSBlMnAgYnVmZmVyICovCisJCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpV3JpdGVFRVBST00sIEVFUFJPTV9TSVpFKTsKKworCQkvKiBmaWxsIHRoZSBsb2NhbCBidWZmZXIgKi8KKwkJTmRpc01vdmVNZW1vcnkoKFBVQ0hBUilXcml0ZUVFUFJPTSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCQlkbworCQl7CisJCQkJLyogd3JpdGUgdGhlIGNvbnRlbnQgb2YgLmJpbiBmaWxlIHRvIEVFUFJPTSAqLworCQkJCXJ0X2VlX3dyaXRlX2FsbChwQWQsIFdyaXRlRUVQUk9NKTsKKworCQl9IHdoaWxlKEZBTFNFKTsKKwkJfQorCisgICAgQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSAlc1xuIiwgX19GVU5DVElPTl9fKSk7CisKKyAgICByZXR1cm4gVFJVRTsKKworfQorI2VuZGlmIC8vICFVQ09TIC8vCisKK0lOVCBTZXRfQVRFX1JlYWRfRTJQX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVTSE9SVCBidWZmZXJbRUVQUk9NX1NJWkUvMl07CisJVVNIT1JUICpwOworCWludCBpOworCisJcnRfZWVfcmVhZF9hbGwocEFkLCAoVVNIT1JUICopYnVmZmVyKTsKKwlwID0gYnVmZmVyOworCWZvciAoaSA9IDA7IGkgPCAoRUVQUk9NX1NJWkUvMik7IGkrKykKKwl7CisJCWF0ZV9wcmludCgiJTQuNHggIiwgKnApOworCQlpZiAoKChpKzEpICUgMTYpID09IDApCisJCQlhdGVfcHJpbnQoIlxuIik7CisJCXArKzsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfQVRFX1Nob3dfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJYXRlX3ByaW50KCJNb2RlPSVkXG4iLCBwQWQtPmF0ZS5Nb2RlKTsKKwlhdGVfcHJpbnQoIlR4UG93ZXIwPSVkXG4iLCBwQWQtPmF0ZS5UeFBvd2VyMCk7CisJYXRlX3ByaW50KCJUeFBvd2VyMT0lZFxuIiwgcEFkLT5hdGUuVHhQb3dlcjEpOworCWF0ZV9wcmludCgiVHhBbnRlbm5hU2VsPSVkXG4iLCBwQWQtPmF0ZS5UeEFudGVubmFTZWwpOworCWF0ZV9wcmludCgiUnhBbnRlbm5hU2VsPSVkXG4iLCBwQWQtPmF0ZS5SeEFudGVubmFTZWwpOworCWF0ZV9wcmludCgiQkJQQ3VycmVudEJXPSVkXG4iLCBwQWQtPmF0ZS5UeFdJLkJXKTsKKwlhdGVfcHJpbnQoIkdJPSVkXG4iLCBwQWQtPmF0ZS5UeFdJLlNob3J0R0kpOworCWF0ZV9wcmludCgiTUNTPSVkXG4iLCBwQWQtPmF0ZS5UeFdJLk1DUyk7CisJYXRlX3ByaW50KCJUeE1vZGU9JWRcbiIsIHBBZC0+YXRlLlR4V0kuUEhZTU9ERSk7CisJYXRlX3ByaW50KCJBZGRyMT0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEFkLT5hdGUuQWRkcjFbMF0sIHBBZC0+YXRlLkFkZHIxWzFdLCBwQWQtPmF0ZS5BZGRyMVsyXSwgcEFkLT5hdGUuQWRkcjFbM10sIHBBZC0+YXRlLkFkZHIxWzRdLCBwQWQtPmF0ZS5BZGRyMVs1XSk7CisJYXRlX3ByaW50KCJBZGRyMj0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEFkLT5hdGUuQWRkcjJbMF0sIHBBZC0+YXRlLkFkZHIyWzFdLCBwQWQtPmF0ZS5BZGRyMlsyXSwgcEFkLT5hdGUuQWRkcjJbM10sIHBBZC0+YXRlLkFkZHIyWzRdLCBwQWQtPmF0ZS5BZGRyMls1XSk7CisJYXRlX3ByaW50KCJBZGRyMz0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEFkLT5hdGUuQWRkcjNbMF0sIHBBZC0+YXRlLkFkZHIzWzFdLCBwQWQtPmF0ZS5BZGRyM1syXSwgcEFkLT5hdGUuQWRkcjNbM10sIHBBZC0+YXRlLkFkZHIzWzRdLCBwQWQtPmF0ZS5BZGRyM1s1XSk7CisJYXRlX3ByaW50KCJDaGFubmVsPSVkXG4iLCBwQWQtPmF0ZS5DaGFubmVsKTsKKwlhdGVfcHJpbnQoIlR4TGVuZ3RoPSVkXG4iLCBwQWQtPmF0ZS5UeExlbmd0aCk7CisJYXRlX3ByaW50KCJUeENvdW50PSV1XG4iLCBwQWQtPmF0ZS5UeENvdW50KTsKKwlhdGVfcHJpbnQoIlJGRnJlcU9mZnNldD0lZFxuIiwgcEFkLT5hdGUuUkZGcmVxT2Zmc2V0KTsKKwlhdGVfcHJpbnQoS0VSTl9FTUVSRyAiU2V0X0FURV9TaG93X1Byb2MgU3VjY2Vzc1xuIik7CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfQVRFX0hlbHBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJYXRlX3ByaW50KCJBVEU9QVRFU1RBUlQsIEFURVNUT1AsIFRYQ09OVCwgVFhDQVJSLCBUWEZSQU1FLCBSWEZSQU1FXG4iKTsKKwlhdGVfcHJpbnQoIkFURURBXG4iKTsKKwlhdGVfcHJpbnQoIkFURVNBXG4iKTsKKwlhdGVfcHJpbnQoIkFURUJTU0lEXG4iKTsKKwlhdGVfcHJpbnQoIkFURUNIQU5ORUwsIHJhbmdlOjB+MTQodW5sZXNzIEEgYmFuZCAhKVxuIik7CisJYXRlX3ByaW50KCJBVEVUWFBPVzAsIHNldCBwb3dlciBsZXZlbCBvZiBhbnRlbm5hIDEuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYUE9XMSwgc2V0IHBvd2VyIGxldmVsIG9mIGFudGVubmEgMi5cbiIpOworCWF0ZV9wcmludCgiQVRFVFhBTlQsIHNldCBUWCBhbnRlbm5hLiAwOmFsbCwgMTphbnRlbm5hIG9uZSwgMjphbnRlbm5hIHR3by5cbiIpOworCWF0ZV9wcmludCgiQVRFUlhBTlQsIHNldCBSWCBhbnRlbm5hLjA6YWxsLCAxOmFudGVubmEgb25lLCAyOmFudGVubmEgdHdvLCAzOmFudGVubmEgdGhyZWUuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYRlJFUU9GRlNFVCwgc2V0IGZyZXF1ZW5jeSBvZmZzZXQsIHJhbmdlIDB+NjNcbiIpOworCWF0ZV9wcmludCgiQVRFVFhCVywgc2V0IEJhbmRXaWR0aCwgMDoyME1IeiwgMTo0ME1Iei5cbiIpOworCWF0ZV9wcmludCgiQVRFVFhMRU4sIHNldCBGcmFtZSBsZW5ndGgsIHJhbmdlIDI0fiVkXG4iLCAoTUFYX0ZSQU1FX1NJWkUgLSAzNC8qID09IDIzMTIgKi8pKTsKKwlhdGVfcHJpbnQoIkFURVRYQ05ULCBzZXQgaG93IG1hbnkgZnJhbWUgZ29pbmcgdG8gdHJhbnNtaXQuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYTUNTLCBzZXQgTUNTLCByZWZlcmVuY2UgdG8gcmF0ZSB0YWJsZS5cbiIpOworCWF0ZV9wcmludCgiQVRFVFhNT0RFLCBzZXQgTW9kZSAwOkNDSywgMTpPRkRNLCAyOkhULU1peCwgMzpHcmVlbkZpZWxkLCByZWZlcmVuY2UgdG8gcmF0ZSB0YWJsZS5cbiIpOworCWF0ZV9wcmludCgiQVRFVFhHSSwgc2V0IEdJIGludGVydmFsLCAwOkxvbmcsIDE6U2hvcnRcbiIpOworCWF0ZV9wcmludCgiQVRFUlhGRVIsIDA6ZGlzYWJsZSBSeCBGcmFtZSBlcnJvciByYXRlLiAxOmVuYWJsZSBSeCBGcmFtZSBlcnJvciByYXRlLlxuIik7CisJYXRlX3ByaW50KCJBVEVSUkYsIHNob3cgYWxsIFJGIHJlZ2lzdGVycy5cbiIpOworCWF0ZV9wcmludCgiQVRFV1JGMSwgc2V0IFJGMSByZWdpc3Rlci5cbiIpOworCWF0ZV9wcmludCgiQVRFV1JGMiwgc2V0IFJGMiByZWdpc3Rlci5cbiIpOworCWF0ZV9wcmludCgiQVRFV1JGMywgc2V0IFJGMyByZWdpc3Rlci5cbiIpOworCWF0ZV9wcmludCgiQVRFV1JGNCwgc2V0IFJGNCByZWdpc3Rlci5cbiIpOworCWF0ZV9wcmludCgiQVRFTERFMlAsIGxvYWQgRUVQUk9NIGZyb20gLmJpbiBmaWxlLlxuIik7CisJYXRlX3ByaW50KCJBVEVSRTJQLCBkaXNwbGF5IGFsbCBFRVBST00gY29udGVudC5cbiIpOworCWF0ZV9wcmludCgiQVRFU0hPVywgZGlzcGxheSBhbGwgcGFyYW1ldGVycyBvZiBBVEUuXG4iKTsKKwlhdGVfcHJpbnQoIkFURUhFTFAsIG9ubGluZSBoZWxwLlxuIik7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJQXNpY1N3aXRjaENoYW5uZWwoKSBkZWRpY2F0ZWQgZm9yIEFURS4KKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBVEVBc2ljU3dpdGNoQ2hhbm5lbCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVSU5UMzIgUjIgPSAwLCBSMyA9IERFRkFVTFRfUkZfVFhfUE9XRVIsIFI0ID0gMCwgVmFsdWUgPSAwOworCUNIQVIgVHhQd2VyID0gMCwgVHhQd2VyMiA9IDA7CisJVUNIQVIgaW5kZXgsIEJicFZhbHVlID0gMCwgUjY2ID0gMHgzMDsKKwlSVE1QX1JGX1JFR1MgKlJGUmVnVGFibGU7CisJVUNIQVIgQ2hhbm5lbDsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJaWYgKChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpIHx8IChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IFRSVUUpKQorCXsKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgIT0gcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsKQorCQl7CisJCQlwQWQtPmF0ZS5DaGFubmVsID0gcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsOworCQl9CisJCXJldHVybjsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJQ2hhbm5lbCA9IHBBZC0+YXRlLkNoYW5uZWw7CisKKwkvLyBTZWxlY3QgYW50ZW5uYQorCUFzaWNBbnRlbm5hU2VsZWN0KHBBZCwgQ2hhbm5lbCk7CisKKwkvLyBmaWxsIFR4IHBvd2VyIHZhbHVlCisJVHhQd2VyID0gcEFkLT5hdGUuVHhQb3dlcjA7CisJVHhQd2VyMiA9IHBBZC0+YXRlLlR4UG93ZXIxOworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCisKKwkvLyBUaGUgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIDN4eHggYW5kIDJ4eHgKKwkvLyBUaGUgMzA3MCBpcyAxVDFSLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgVHgvUnggcGF0aCBhbmQgdGhlIG9ubHkgam9iIGlzIHRvIHNldCB0aGUgcGFyYW1ldGVycyBvZiBjaGFubmVscy4KKwlpZiAoSVNfUlQzMHh4KHBBZCkgJiYgKChwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMCkgfHwKKyhwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMSkgfHwgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIyKSB8fAorKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18yMDIwKSkpCisJeworCQkvKiBtb2RpZnkgYnkgV1kgZm9yIFJlYWQgUkYgUmVnLiBlcnJvciAqLworCQlVQ0hBUiBSRlZhbHVlOworCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8zMDIwX0NITkw7IGluZGV4KyspCisJCXsKKwkJCWlmIChDaGFubmVsID09IEZyZXFJdGVtczMwMjBbaW5kZXhdLkNoYW5uZWwpCisJCQl7CisJCQkJLy8gUHJvZ3JhbW1pbmcgY2hhbm5lbCBwYXJhbWV0ZXJzCisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjAyLCBGcmVxSXRlbXMzMDIwW2luZGV4XS5OKTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDMsIEZyZXFJdGVtczMwMjBbaW5kZXhdLkspOworCisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDYsIChQVUNIQVIpJlJGVmFsdWUpOworCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmIDB4RkMpIHwgRnJlcUl0ZW1zMzAyMFtpbmRleF0uUjsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDYsIChVQ0hBUilSRlZhbHVlKTsKKworCQkJCS8vIFNldCBUeCBQb3dlcgorCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjEyLCAoUFVDSEFSKSZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEUwKSB8IFR4UHdlcjsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMTIsIChVQ0hBUilSRlZhbHVlKTsKKworCQkJCS8vIFNldCBSRiBvZmZzZXQKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMywgKFBVQ0hBUikmUkZWYWx1ZSk7CisJCQkJLy8yMDA4LzA4LzA2OiBLSCBtb2RpZmllZCAicEFkLT5SRkZyZXFPZmZzZXQiIHRvICJwQWQtPmF0ZS5SRkZyZXFPZmZzZXQiCisJCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHg4MCkgfCBwQWQtPmF0ZS5SRkZyZXFPZmZzZXQ7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIzLCAoVUNIQVIpUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgQlcKKwkJCQlpZiAocEFkLT5hdGUuVHhXSS5CVyA9PSBCV180MCkKKwkJCQl7CisJCQkJCVJGVmFsdWUgPSBwQWQtPk1sbWUuQ2FsaUJXNDBSZlIyNDsKKwkJCQkJLy9ESVNBQkxFXzExTl9DSEVDSyhwQWQpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSRlZhbHVlID0gcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQ7CisJCQkJfQorCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgKFVDSEFSKVJGVmFsdWUpOworCisJCQkJLy8gRW5hYmxlIFJGIHR1bmluZworCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCAoUFVDSEFSKSZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gUkZWYWx1ZSB8IDB4MTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDcsIChVQ0hBUilSRlZhbHVlKTsKKworCQkJCS8vIGxhdGNoIGNoYW5uZWwgZm9yIGZ1dHVyZSB1c2FnZS4KKwkJCQlwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBDaGFubmVsOworCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTd2l0Y2hDaGFubmVsIyVkKFJGPSVkLCBQd3IwPSVkLCBQd3IxPSVkLCAlZFQpLCBOPTB4JTAyWCwgSz0weCUwMlgsIFI9MHglMDJYXG4iLAorCQkJQ2hhbm5lbCwKKwkJCXBBZC0+UmZJY1R5cGUsCisJCQlUeFB3ZXIsCisJCQlUeFB3ZXIyLAorCQkJcEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCwKKwkJCUZyZXFJdGVtczMwMjBbaW5kZXhdLk4sCisJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5LLAorCQkJRnJlcUl0ZW1zMzAyMFtpbmRleF0uUikpOworCX0KKwllbHNlCisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEUtLT4KKyNlbmRpZiAvLyBSVDMweHggLy8KK3sKKwlSRlJlZ1RhYmxlID0gUkYyODUwUmVnVGFibGU7CisKKwlzd2l0Y2ggKHBBZC0+UmZJY1R5cGUpCisJeworCQkvKiBCdXQgb25seSAyODUwIGFuZCAyNzUwIHN1cHBvcnQgNS41R0h6IGJhbmQuLi4gKi8KKwkJY2FzZSBSRklDXzI4MjA6CisJCWNhc2UgUkZJQ18yODUwOgorCQljYXNlIFJGSUNfMjcyMDoKKwkJY2FzZSBSRklDXzI3NTA6CisKKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8yODUwX0NITkw7IGluZGV4KyspCisJCQl7CisJCQkJaWYgKENoYW5uZWwgPT0gUkZSZWdUYWJsZVtpbmRleF0uQ2hhbm5lbCkKKwkJCQl7CisJCQkJCVIyID0gUkZSZWdUYWJsZVtpbmRleF0uUjI7CisJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4NDAwMDsJLy8gSWYgVFhwYXRoIGlzIDEsIGJpdCAxNCA9IDE7CisJCQkJCX0KKworCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAyKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHBBZC0+YXRlLlJ4QW50ZW5uYVNlbCkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIDE6CisJCQkJCQkJCVIyIHw9IDB4MjAwNDA7CisJCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQmJwVmFsdWUpOworCQkJCQkJCQlCYnBWYWx1ZSAmPSAweEU0OworCQkJCQkJCQlCYnBWYWx1ZSB8PSAweDAwOworCQkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJicFZhbHVlKTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAyOgorCQkJCQkJCQlSMiB8PSAweDEwMDQwOworCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgwMTsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCVIyIHw9IDB4NDA7CisJCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQmJwVmFsdWUpOworCQkJCQkJCQlCYnBWYWx1ZSAmPSAweEU0OworCQkJCQkJCQkvKiBPbmx5IGVuYWJsZSB0d28gQW50ZW5uYSB0byByZWNlaXZlLiAqLworCQkJCQkJCQlCYnBWYWx1ZSB8PSAweDA4OworCQkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJicFZhbHVlKTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKQorCQkJCQl7CisJCQkJCQlSMiB8PSAweDIwMDQwOwkvLyB3cml0ZSAxIHRvIG9mZiBSeFBhdGgKKwkJCQkJfQorCisJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpCisJCQkJCXsKKwkJCQkJCWlmIChwQWQtPmF0ZS5UeEFudGVubmFTZWwgPT0gMSkKKwkJCQkJCXsKKwkJCQkJCQlSMiB8PSAweDQwMDA7CS8vIElmIFRYIEFudGVubmEgc2VsZWN0IGlzIDEgLCBiaXQgMTQgPSAxOyBEaXNhYmxlIEFudCAyCisJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZCYnBWYWx1ZSk7CisJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNzsJCS8vMTExMDAxMTFCCisJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCYnBWYWx1ZSk7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmIChwQWQtPmF0ZS5UeEFudGVubmFTZWwgPT0gMikKKwkJCQkJCXsKKwkJCQkJCQlSMiB8PSAweDgwMDA7CS8vIElmIFRYIEFudGVubmEgc2VsZWN0IGlzIDIgLCBiaXQgMTUgPSAxOyBEaXNhYmxlIEFudCAxCisJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZCYnBWYWx1ZSk7CisJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNzsKKwkJCQkJCQlCYnBWYWx1ZSB8PSAweDA4OworCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgQmJwVmFsdWUpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQmJwVmFsdWUpOworCQkJCQkJCUJicFZhbHVlICY9IDB4RTc7CisJCQkJCQkJQmJwVmFsdWUgfD0gMHgxMDsKKwkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsIEJicFZhbHVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAzKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHBBZC0+YXRlLlJ4QW50ZW5uYVNlbCkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIDE6CisJCQkJCQkJCVIyIHw9IDB4MjAwNDA7CisJCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQmJwVmFsdWUpOworCQkJCQkJCQlCYnBWYWx1ZSAmPSAweEU0OworCQkJCQkJCQlCYnBWYWx1ZSB8PSAweDAwOworCQkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJicFZhbHVlKTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAyOgorCQkJCQkJCQlSMiB8PSAweDEwMDQwOworCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgwMTsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMzoKKwkJCQkJCQkJUjIgfD0gMHgzMDAwMDsKKwkJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCYnBWYWx1ZSk7CisJCQkJCQkJCUJicFZhbHVlICY9IDB4RTQ7CisJCQkJCQkJCUJicFZhbHVlIHw9IDB4MDI7CisJCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQmJwVmFsdWUpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgxMDsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJaWYgKENoYW5uZWwgPiAxNCkKKwkJCQkJeworCQkJCQkJLy8gaW5pdGlhbGl6ZSBSMywgUjQKKwkJCQkJCVIzID0gKFJGUmVnVGFibGVbaW5kZXhdLlIzICYgMHhmZmZmYzFmZik7CisJCQkJCQlSNCA9IChSRlJlZ1RhYmxlW2luZGV4XS5SNCAmICh+MHgwMDFmODdjMCkpIHwgKHBBZC0+YXRlLlJGRnJlcU9mZnNldCA8PCAxNSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0aGUgUm9yeSdzIHN1Z2dlc3Rpb24gdG8gc29sdmUgdGhlIG1pZGRsZSByYW5nZSBpc3N1ZS4KKwkJCQkJCS8vIDUuNUcgYmFuZCBwb3dlciByYW5nZTogMHhGOX4wWDBGLCBUWDAgUmVnMyBiaXQ5L1RYMSBSZWc0IGJpdDY9IjAiIG1lYW5zIHRoZSBUWCBwb3dlciByZWR1Y2UgN2RCCisJCQkJCQkvLyBSMworCQkJCQkJaWYgKChUeFB3ZXIgPj0gLTcpICYmIChUeFB3ZXIgPCAwKSkKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIgPSAoNytUeFB3ZXIpOworCQkJCQkJCVR4UHdlciA9IChUeFB3ZXIgPiAweEYpID8gKDB4RikgOiAoVHhQd2VyKTsKKwkJCQkJCQlSMyB8PSAoVHhQd2VyIDw8IDEwKTsKKwkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEVBc2ljU3dpdGNoQ2hhbm5lbDogVHhQd2VyPSVkIFxuIiwgVHhQd2VyKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJVHhQd2VyID0gKFR4UHdlciA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIpOworCQkJCQkJCVIzIHw9IChUeFB3ZXIgPDwgMTApIHwgKDEgPDwgOSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIFI0CisJCQkJCQlpZiAoKFR4UHdlcjIgPj0gLTcpICYmIChUeFB3ZXIyIDwgMCkpCisJCQkJCQl7CisJCQkJCQkJVHhQd2VyMiA9ICg3K1R4UHdlcjIpOworCQkJCQkJCVR4UHdlcjIgPSAoVHhQd2VyMiA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIyKTsKKwkJCQkJCQlSNCB8PSAoVHhQd2VyMiA8PCA3KTsKKwkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEVBc2ljU3dpdGNoQ2hhbm5lbDogVHhQd2VyMj0lZCBcbiIsIFR4UHdlcjIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIyID0gKFR4UHdlcjIgPiAweEYpID8gKDB4RikgOiAoVHhQd2VyMik7CisJCQkJCQkJUjQgfD0gKFR4UHdlcjIgPDwgNykgfCAoMSA8PCA2KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCVIzID0gKFJGUmVnVGFibGVbaW5kZXhdLlIzICYgMHhmZmZmYzFmZikgfCAoVHhQd2VyIDw8IDkpOyAvLyBzZXQgVFggcG93ZXIwCisJCQkJCQlSNCA9IChSRlJlZ1RhYmxlW2luZGV4XS5SNCAmICh+MHgwMDFmODdjMCkpIHwgKHBBZC0+YXRlLlJGRnJlcU9mZnNldCA8PCAxNSkgfCAoVHhQd2VyMiA8PDYpOy8vIFNldCBmcmVxIG9mZnNldCAmIFR4UHdyMQorCQkJCQl9CisKKwkJCQkJLy8gQmFzZWQgb24gQkJQIGN1cnJlbnQgbW9kZSBiZWZvcmUgY2hhbmdpbmcgUkYgY2hhbm5lbC4KKwkJCQkJaWYgKHBBZC0+YXRlLlR4V0kuQlcgPT0gQldfNDApCisJCQkJCXsKKwkJCQkJCVI0IHw9MHgyMDAwMDA7CisJCQkJCX0KKworCQkJCQkvLyBVcGRhdGUgdmFyaWFibGVzCisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA9IENoYW5uZWw7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjEgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMTsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SMiA9IFIyOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIzID0gUjM7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSBSNDsKKworCQkJCQlSdG1wUmZJb1dyaXRlKHBBZCk7CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK30KKwkvLyBDaGFuZ2UgQkJQIHNldHRpbmcgZHVyaW5nIHN3aXRjaCBmcm9tIGEtPmcsIGctPmEKKwlpZiAoQ2hhbm5lbCA8PSAxNCkKKwl7CisJICAgIFVMT05HCVR4UGluQ2ZnID0gMHgwMDA1MEYwQTsvLyAyMDA3LjEwLjA5IGJ5IEJyaWFuIDogMHgwMDA1MDUwQSA9PT4gMHgwMDA1MEYwQQorCisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjIsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2MywgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY0LCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisKKwkJLyogRm9yIDFULzJSIGNoaXAgb25seS4uLiAqLworCSAgICBpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkV4dGVybmFsTE5BRm9yRykKKwkgICAgeworCSAgICAgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MiwgMHg2Mik7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJICAgICAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweDg0KTsKKwkgICAgfQorCisgICAgICAgIC8vIEFjY29yZGluZyB0aGUgUm9yeSdzIHN1Z2dlc3Rpb24gdG8gc29sdmUgdGhlIG1pZGRsZSByYW5nZSBpc3N1ZS4KKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAmQmJwVmFsdWUpOworCQlBU1NFUlQoKEJicFZhbHVlID09IDB4MDApKTsKKwkJaWYgKChCYnBWYWx1ZSAhPSAweDAwKSkKKwkJeworCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4NiwgMHgwMCk7CisJCX0KKworCQkvLyA1LjVHSHogYmFuZCBzZWxlY3Rpb24gUElOLCBiaXQxIGFuZCBiaXQyIGFyZSBjb21wbGVtZW50CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHg2KTsKKwkJVmFsdWUgfD0gKDB4MDQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgVmFsdWUpOworCisgICAgICAgIC8vIFR1cm4gb2ZmIHVudXNlZCBQQSBvciBMTkEgd2hlbiBvbmx5IDFUIG9yIDFSLgorCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGRkYzOworCQl9CisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCXsKKwkJCVR4UGluQ2ZnICY9IDB4RkZGRkYzRkY7CisJCX0KKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QSU5fQ0ZHLCBUeFBpbkNmZyk7CisJfQorCWVsc2UKKwl7CisJICAgIFVMT05HCVR4UGluQ2ZnID0gMHgwMDA1MEYwNTsvLzIwMDcuMTAuMDkgYnkgQnJpYW4gOiAweDAwMDUwNTA1ID09PiAweDAwMDUwRjA1CisKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2MiwgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYzLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjQsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MiwgMHhGMik7CisKKyAgICAgICAgLy8gQWNjb3JkaW5nIHRoZSBSb3J5J3Mgc3VnZ2VzdGlvbiB0byBzb2x2ZSB0aGUgbWlkZGxlIHJhbmdlIGlzc3VlLgorCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SODYsICZCYnBWYWx1ZSk7CisJCUFTU0VSVCgoQmJwVmFsdWUgPT0gMHgwMCkpOworCQlpZiAoKEJicFZhbHVlICE9IDB4MDApKQorCQl7CisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAweDAwKTsKKwkJfQorCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SOTEsICZCYnBWYWx1ZSk7CisJCUFTU0VSVCgoQmJwVmFsdWUgPT0gMHgwNCkpOworCisJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I5MiwgJkJicFZhbHVlKTsKKwkJQVNTRVJUKChCYnBWYWx1ZSA9PSAweDAwKSk7CisKKwkJLy8gNS41R0h6IGJhbmQgc2VsZWN0aW9uIFBJTiwgYml0MSBhbmQgYml0MiBhcmUgY29tcGxlbWVudAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4Nik7CisJCVZhbHVlIHw9ICgweDAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKworICAgICAgICAvLyBUdXJuIG9mZiB1bnVzZWQgUEEgb3IgTE5BIHdoZW4gb25seSAxVCBvciAxUi4KKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRkZGMzsKKwkgICAgfQorCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGM0ZGOworCQl9CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUElOX0NGRywgVHhQaW5DZmcpOworCX0KKworICAgIC8vIFI2NiBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byBDaGFubmVsIGFuZCB1c2UgMjBNSHogd2hlbiBzY2FubmluZworCWlmIChDaGFubmVsIDw9IDE0KQorCXsKKwkJLy8gQkcgYmFuZAorCQlSNjYgPSAweDJFICsgR0VUX0xOQV9HQUlOKHBBZCk7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJfQorCWVsc2UKKwl7CisJCS8vIDUuNSBHSHogYmFuZAorCQlpZiAocEFkLT5hdGUuVHhXSS5CVyA9PSBCV18yMCkKKwkJeworCQkJUjY2ID0gKFVDSEFSKSgweDMyICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzMpOworICAgIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVI2NiA9IChVQ0hBUikoMHgzQSArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zKTsKKwkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCX0KKwl9CisKKwkvLworCS8vIE9uIDExQSwgV2Ugc2hvdWxkIGRlbGF5IGFuZCB3YWl0IFJGL0JCUCB0byBiZSBzdGFibGUKKwkvLyBhbmQgdGhlIGFwcHJvcHJpYXRlIHRpbWUgc2hvdWxkIGJlIDEwMDAgbWljcm8gc2Vjb25kcworCS8vIDIwMDUvMDYvMDUgLSBPbiAxMUcsIFdlIGFsc28gbmVlZCB0aGlzIGRlbGF5IHRpbWUuIE90aGVyd2lzZSBpdCdzIGRpZmZpY3VsdCB0byBwYXNzIHRoZSBXSFFMLgorCS8vCisJUlRNUHVzZWNEZWxheSgxMDAwKTsKKworCWlmIChDaGFubmVsID4gMTQpCisJeworCQkvLyBXaGVuIDUuNUdIeiBiYW5kIHRoZSBMU0Igb2YgVHhQd3Igd2lsbCBiZSB1c2VkIHRvIHJlZHVjZWQgN2RCIG9yIG5vdC4KKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQ2hhbm5lbCMlZChSRj0lZCwgJWRUKSB0byAsIFIxPTB4JTA4bHgsIFIyPTB4JTA4bHgsIFIzPTB4JTA4bHgsIFI0PTB4JTA4bHhcbiIsCisJCQkJCQkJCSAgQ2hhbm5lbCwKKwkJCQkJCQkJICBwQWQtPlJmSWNUeXBlLAorCQkJCQkJCQkgIHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGgsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMSwKKwkJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIyLAorCQkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjMsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SNCkpOworCX0KKwllbHNlCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTd2l0Y2hDaGFubmVsIyVkKFJGPSVkLCBQd3IwPSV1LCBQd3IxPSV1LCAlZFQpIHRvICwgUjE9MHglMDhseCwgUjI9MHglMDhseCwgUjM9MHglMDhseCwgUjQ9MHglMDhseFxuIiwKKwkJCQkJCQkJICBDaGFubmVsLAorCQkJCQkJCQkgIHBBZC0+UmZJY1R5cGUsCisJCQkJCQkJCSAgKFIzICYgMHgwMDAwM2UwMCkgPj4gOSwKKwkJCQkJCQkJICAoUjQgJiAweDAwMDAwN2MwKSA+PiA2LAorCQkJCQkJCQkgIHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGgsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMSwKKwkJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIyLAorCQkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjMsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SNCkpOworICAgIH0KK30KKworLy8KKy8vIEluIGZhY3QsIG5vIG9uZSB3aWxsIGNhbGwgdGhpcyByb3V0aW5lIHNvIGZhciAhCisvLworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlHaXZlcyBDQ0sgVFggcmF0ZSAyIG1vcmUgZEIgVFggcG93ZXIuCisJCVRoaXMgcm91dGluZSB3b3JrcyBvbmx5IGluIEFURSBtb2RlLgorCisJCWNhbGN1bGF0ZSBkZXNpcmVkIFR4IHBvd2VyIGluIFJGIFIzLlR4MH41LAlzaG91bGQgY29uc2lkZXIgLQorCQkwLiBpZiBjdXJyZW50IHJhZGlvIGlzIGEgbm9pc3kgZW52aXJvbm1lbnQgKHBBZC0+RHJzQ291bnRlcnMuZk5vaXN5RW52aXJvbm1lbnQpCisJCTEuIFR4UG93ZXJQZXJjZW50YWdlCisJCTIuIGF1dG8gY2FsaWJyYXRpb24gYmFzZWQgb24gVFNTSSBmZWVkYmFjaworCQkzLiBleHRyYSAyIGRiIGZvciBDQ0sKKwkJNC4gLTEwIGRiIHVwb24gdmVyeS1zaG9ydCBkaXN0YW5jZSAoQXZnUlNTSSA+PSAtNDBkYikgdG8gQVAKKworCU5PVEU6IFNpbmNlIHRoaXMgcm91dGluZSByZXF1aXJlcyB0aGUgdmFsdWUgb2YgKHBBZC0+RHJzQ291bnRlcnMuZk5vaXN5RW52aXJvbm1lbnQpLAorCQlpdCBzaG91bGQgYmUgY2FsbGVkIEFGVEVSIE1sbWVEeW5hbWljVHhSYXRlU3dpdGNoaW5nKCkKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFURUFzaWNBZGp1c3RUeFBvd2VyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUlOVAkJCWksIGo7CisJQ0hBUgkJRGVsdGFQd3IgPSAwOworCUJPT0xFQU4JCWJBdXRvVHhBZ2MgPSBGQUxTRTsKKwlVQ0hBUgkJVHNzaVJlZiwgKnBUc3NpTWludXNCb3VuZGFyeSwgKnBUc3NpUGx1c0JvdW5kYXJ5LCBUeEFnY1N0ZXA7CisJVUNIQVIJCUJicFI0OSA9IDAsIGlkeDsKKwlQQ0hBUgkJcFR4QWdjQ29tcGVuc2F0ZTsKKwlVTE9ORwkJVHhQd3JbNV07CisJQ0hBUgkJVmFsdWU7CisKKwkvKiBubyBvbmUgY2FsbHMgdGhpcyBwcm9jZWR1cmUgc28gZmFyICovCisJaWYgKHBBZC0+YXRlLlR4V0kuQlcgPT0gQldfNDApCisJeworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA+IDE0KQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzRdOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhQd3JbMF0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbMF07CisJCQlUeFB3clsxXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFsxXTsKKwkJCVR4UHdyWzJdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzJdOworCQkJVHhQd3JbM10gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbM107CisJCQlUeFB3cls0XSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFs0XTsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA+IDE0KQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzRdOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhQd3JbMF0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbMF07CisJCQlUeFB3clsxXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFsxXTsKKwkJCVR4UHdyWzJdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzJdOworCQkJVHhQd3JbM10gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbM107CisJCQlUeFB3cls0XSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFs0XTsKKwkJfQorCX0KKworCS8vIFRYIHBvd2VyIGNvbXBlbnNhdGlvbiBmb3IgdGVtcGVyYXR1cmUgdmFyaWF0aW9uIGJhc2VkIG9uIFRTU0kuCisJLy8gRG8gaXQgcGVyIDQgc2Vjb25kcy4KKwlpZiAocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSA0ID09IDApCisJeworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworCQkJLyogYmcgY2hhbm5lbCAqLworCQkJYkF1dG9UeEFnYyAgICAgICAgID0gcEFkLT5iQXV0b1R4QWdjRzsKKwkJCVRzc2lSZWYgICAgICAgICAgICA9IHBBZC0+VHNzaVJlZkc7CisJCQlwVHNzaU1pbnVzQm91bmRhcnkgPSAmcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMF07CisJCQlwVHNzaVBsdXNCb3VuZGFyeSAgPSAmcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1swXTsKKwkJCVR4QWdjU3RlcCAgICAgICAgICA9IHBBZC0+VHhBZ2NTdGVwRzsKKwkJCXBUeEFnY0NvbXBlbnNhdGUgICA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUc7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBhIGNoYW5uZWwgKi8KKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0E7CisJCQlUc3NpUmVmICAgICAgICAgICAgPSBwQWQtPlRzc2lSZWZBOworCQkJcFRzc2lNaW51c0JvdW5kYXJ5ID0gJnBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzBdOworCQkJcFRzc2lQbHVzQm91bmRhcnkgID0gJnBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMF07CisJCQlUeEFnY1N0ZXAgICAgICAgICAgPSBwQWQtPlR4QWdjU3RlcEE7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVBOworCQl9CisKKwkJaWYgKGJBdXRvVHhBZ2MpCisJCXsKKwkJCS8qIEJicFI0OSBpcyB1bnNpZ25lZCBjaGFyICovCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNDksICZCYnBSNDkpOworCisJCQkvKiAocCkgVHNzaVBsdXNCb3VuZGFyeUdbMF0gPSAwID0gKG0pIFRzc2lNaW51c0JvdW5kYXJ5R1swXSAqLworCQkJLyogY29tcGVuc2F0ZTogKzQgICAgICszICAgKzIgICArMSAgICAwICAgLTEgICAtMiAgIC0zICAgLTQgKiBzdGVwcyAqLworCQkJLyogc3RlcCB2YWx1ZSBpcyBkZWZpbmVkIGluIHBBZC0+VHhBZ2NTdGVwRyBmb3IgdHggcG93ZXIgdmFsdWUgKi8KKworCQkJLyogWzRdKzErWzRdICAgcDQgICAgIHAzICAgcDIgICBwMSAgIG8xICAgbTEgICBtMiAgIG0zICAgbTQgKi8KKwkJCS8qIGV4OiAgICAgICAgIDB4MDAgMHgxNSAweDI1IDB4NDUgMHg4OCAweEEwIDB4QjUgMHhEMCAweEYwCisJCQkgICBhYm92ZSB2YWx1ZSBhcmUgZXhhbWluZWQgaW4gbWFzcyBmYWN0b3J5IHByb2R1Y3Rpb24gKi8KKwkJCS8qICAgICAgICAgICAgIFs0XSAgICBbM10gIFsyXSAgWzFdICBbMF0gIFsxXSAgWzJdICBbM10gIFs0XSAqLworCisJCQkvKiBwbHVzIGlzIDB4MTAgfiAweDQwLCBtaW51cyBpcyAweDYwIH4gMHg5MCAqLworCQkJLyogaWYgdmFsdWUgaXMgYmV0d2VlbiBwMSB+IG8xIG9yIG8xIH4gczEsIG5vIG5lZWQgdG8gYWRqdXN0IHR4IHBvd2VyICovCisJCQkvKiBpZiB2YWx1ZSBpcyAweDY1LCB0eCBwb3dlciB3aWxsIGJlIC09IFR4QWdjU3RlcCooMi0xKSAqLworCisJCQlpZiAoQmJwUjQ5ID4gcFRzc2lNaW51c0JvdW5kYXJ5WzFdKQorCQkJeworCQkJCS8vIFJlYWRpbmcgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZS4KKwkJCQkvLyBDaGVjayBmb3IgaG93IGxhcmdlIHdlIG5lZWQgdG8gZGVjcmVhc2UgdGhlIFR4IHBvd2VyLgorCQkJCWZvciAoaWR4ID0gMTsgaWR4IDwgNTsgaWR4KyspCisJCQkJeworCQkJCQlpZiAoQmJwUjQ5IDw9IHBUc3NpTWludXNCb3VuZGFyeVtpZHhdKSAgLy8gRm91bmQgdGhlIHJhbmdlCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gVGhlIGluZGV4IGlzIHRoZSBzdGVwIHdlIHNob3VsZCBkZWNyZWFzZSwgaWR4ID0gMCBtZWFucyB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBlbnNhdGUKKy8vCQkJCWlmIChSMyA+IChVTE9ORykgKFR4QWdjU3RlcCAqIChpZHgtMSkpKQorCQkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IC0oVHhBZ2NTdGVwICogKGlkeC0xKSk7CisvLwkJCQllbHNlCisvLwkJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSAtKChVQ0hBUilSMyk7CisKKwkJCQlEZWx0YVB3ciArPSAoKnBUeEFnY0NvbXBlbnNhdGUpOworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tIFR4IFBvd2VyLCBCQlAgUjE9JXgsIFRzc2lSZWY9JXgsIFR4QWdjU3RlcD0leCwgc3RlcCA9IC0lZFxuIiwKKwkJCQkJQmJwUjQ5LCBUc3NpUmVmLCBUeEFnY1N0ZXAsIGlkeC0xKSk7CisJCQl9CisJCQllbHNlIGlmIChCYnBSNDkgPCBwVHNzaVBsdXNCb3VuZGFyeVsxXSkKKwkJCXsKKwkJCQkvLyBSZWFkaW5nIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVmZXJlbmNlIHZhbHVlCisJCQkJLy8gY2hlY2sgZm9yIGhvdyBsYXJnZSB3ZSBuZWVkIHRvIGluY3JlYXNlIHRoZSBUeCBwb3dlcgorCQkJCWZvciAoaWR4ID0gMTsgaWR4IDwgNTsgaWR4KyspCisJCQkJeworCQkJCQlpZiAoQmJwUjQ5ID49IHBUc3NpUGx1c0JvdW5kYXJ5W2lkeF0pICAgLy8gRm91bmQgdGhlIHJhbmdlCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLy8gVGhlIGluZGV4IGlzIHRoZSBzdGVwIHdlIHNob3VsZCBpbmNyZWFzZSwgaWR4ID0gMCBtZWFucyB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBlbnNhdGUKKwkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IFR4QWdjU3RlcCAqIChpZHgtMSk7CisJCQkJRGVsdGFQd3IgKz0gKCpwVHhBZ2NDb21wZW5zYXRlKTsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIrKyBUeCBQb3dlciwgQkJQIFIxPSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSArJWRcbiIsCisJCQkJCUJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCBpZHgtMSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSpwVHhBZ2NDb21wZW5zYXRlID0gMDsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgICBUeCBQb3dlciwgQkJQIFIxPSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSArJWRcbiIsCisJCQkJCUJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCAwKSk7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0c7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVHOworCQl9CisJCWVsc2UKKwkJeworCQkJYkF1dG9UeEFnYyAgICAgICAgID0gcEFkLT5iQXV0b1R4QWdjQTsKKwkJCXBUeEFnY0NvbXBlbnNhdGUgICA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUE7CisJCX0KKworCQlpZiAoYkF1dG9UeEFnYykKKwkJCURlbHRhUHdyICs9ICgqcFR4QWdjQ29tcGVuc2F0ZSk7CisJfQorCisJLyogY2FsY3VsYXRlIGRlbHRhIHBvd2VyIGJhc2VkIG9uIHRoZSBwZXJjZW50YWdlIHNwZWNpZmllZCBmcm9tIFVJICovCisJLy8gRTJQUk9NIHNldHRpbmcgaXMgY2FsaWJyYXRlZCBmb3IgbWF4aW11bSBUWCBwb3dlciAoaS5lLiAxMDAlKQorCS8vIFdlIGxvd2VyIFRYIHBvd2VyIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBwZXJjZW50YWdlIHNwZWNpZmllZCBmcm9tIFVJCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID09IDB4ZmZmZmZmZmYpICAgICAgIC8vIEFVVE8gVFggUE9XRVIgY29udHJvbAorCQk7CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiA5MCkgIC8vIDkxIH4gMTAwJSAmIEFVVE8sIHRyZWF0IGFzIDEwMCUgaW4gdGVybXMgb2YgbVcKKwkJOworCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gNjApICAvLyA2MSB+IDkwJSwgdHJlYXQgYXMgNzUlIGluIHRlcm1zIG9mIG1XCisJeworCQlEZWx0YVB3ciAtPSAxOworCX0KKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDMwKSAgLy8gMzEgfiA2MCUsIHRyZWF0IGFzIDUwJSBpbiB0ZXJtcyBvZiBtVworCXsKKwkJRGVsdGFQd3IgLT0gMzsKKwl9CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiAxNSkgIC8vIDE2IH4gMzAlLCB0cmVhdCBhcyAyNSUgaW4gdGVybXMgb2YgbVcKKwl7CisJCURlbHRhUHdyIC09IDY7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gOSkgICAvLyAxMCB+IDE1JSwgdHJlYXQgYXMgMTIuNSUgaW4gdGVybXMgb2YgbVcKKwl7CisJCURlbHRhUHdyIC09IDk7CisJfQorCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB+IDkgJSwgdHJlYXQgYXMgTUlOKH4zJSkgaW4gdGVybXMgb2YgbVcKKwl7CisJCURlbHRhUHdyIC09IDEyOworCX0KKworCS8qIHJlc2V0IGRpZmZlcmVudCBuZXcgdHggcG93ZXIgZm9yIGRpZmZlcmVudCBUWCByYXRlICovCisJZm9yKGk9MDsgaTw1OyBpKyspCisJeworCQlpZiAoVHhQd3JbaV0gIT0gMHhmZmZmZmZmZikKKwkJeworCQkJZm9yIChqPTA7IGo8ODsgaisrKQorCQkJeworCQkJCVZhbHVlID0gKENIQVIpKChUeFB3cltpXSA+PiBqKjQpICYgMHgwRik7IC8qIDAgfiAxNSAqLworCisJCQkJaWYgKChWYWx1ZSArIERlbHRhUHdyKSA8IDApCisJCQkJeworCQkJCQlWYWx1ZSA9IDA7IC8qIG1pbiAqLworCQkJCX0KKwkJCQllbHNlIGlmICgoVmFsdWUgKyBEZWx0YVB3cikgPiAweEYpCisJCQkJeworCQkJCQlWYWx1ZSA9IDB4RjsgLyogbWF4ICovCisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVZhbHVlICs9IERlbHRhUHdyOyAvKiB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gKi8KKwkJCQl9CisKKwkJCQkvKiBmaWxsIG5ldyB2YWx1ZSB0byBDU1Igb2Zmc2V0ICovCisJCQkJVHhQd3JbaV0gPSAoVHhQd3JbaV0gJiB+KDB4MDAwMDAwMEYgPDwgaio0KSkgfCAoVmFsdWUgPDwgaio0KTsKKwkJCX0KKworCQkJLyogd3JpdGUgdHggcG93ZXIgdmFsdWUgdG8gQ1NSICovCisJCQkvKiBUWF9QV1JfQ0ZHXzAgKDggdHggcmF0ZSkgZm9yCVRYIHBvd2VyIGZvciBPRkRNIDEyTS8xOE0KKwkJCQkJCQkJCQkJVFggcG93ZXIgZm9yIE9GRE0gNk0vOU0KKwkJCQkJCQkJCQkJVFggcG93ZXIgZm9yIENDSzUuNU0vMTFNCisJCQkJCQkJCQkJCVRYIHBvd2VyIGZvciBDQ0sxTS8yTSAqLworCQkJLyogVFhfUFdSX0NGR18xIH4gVFhfUFdSX0NGR180ICovCisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QV1JfQ0ZHXzAgKyBpKjQsIFR4UHdyW2ldKTsKKworCisJCX0KKwl9CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlXcml0ZSBUeFdJIGZvciBBVEUgbW9kZS4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworI2lmZGVmIFJUMjg3MAorc3RhdGljIFZPSUQgQVRFV3JpdGVUeFdJKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWFdJX1NUUlVDIAlwVHhXSSwKKwlJTglCT09MRUFOCQkJRlJBRywKKwlJTglCT09MRUFOCQkJSW5zVGltZXN0YW1wLAorCUlOCUJPT0xFQU4gCQlBTVBEVSwKKwlJTglCT09MRUFOIAkJQWNrLAorCUlOCUJPT0xFQU4gCQlOU2VxLAkJLy8gSFcgbmV3IGEgc2VxdWVuY2UuCisJSU4JVUNIQVIJCQlCQVNpemUsCisJSU4JVUNIQVIJCQlXQ0lELAorCUlOCVVMT05HCQkJTGVuZ3RoLAorCUlOCVVDSEFSIAkJCVBJRCwKKwlJTglVQ0hBUgkJCU1JTU9wcywKKwlJTglVQ0hBUgkJCVR4b3Btb2RlLAorCUlOCUJPT0xFQU4JCQlDZkFjaywKKwlJTglIVFRSQU5TTUlUX1NFVFRJTkcJVHJhbnNtaXQpCit7CisJLy8KKwkvLyBBbHdheXMgdXNlIExvbmcgcHJlYW1ibGUgYmVmb3JlIHZlcmlmaWF0aW9uIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3Mgd2VsbC4KKwkvLyBUb2RvOiByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3MKKwkvLworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisJcFR4V0ktPkZSQUc9IEZSQUc7CisJcFR4V0ktPlRTPSBJbnNUaW1lc3RhbXA7CisJcFR4V0ktPkFNUERVID0gQU1QRFU7CisKKwlwVHhXSS0+TUlNT3BzID0gUFdSX0FDVElWRTsKKwlwVHhXSS0+TXBkdURlbnNpdHkgPSA0OworCXBUeFdJLT5BQ0sgPSBBY2s7CisJcFR4V0ktPnR4b3AgPSBUeG9wbW9kZTsKKwlwVHhXSS0+TlNFUSA9IE5TZXE7CisJcFR4V0ktPkJBV2luU2l6ZSA9IEJBU2l6ZTsKKworCXBUeFdJLT5XaXJlbGVzc0NsaUlEID0gV0NJRDsKKwlwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID0gTGVuZ3RoOworCXBUeFdJLT5QYWNrZXRJZCA9IFBJRDsKKworCXBUeFdJLT5CVyA9IFRyYW5zbWl0LmZpZWxkLkJXOworCXBUeFdJLT5TaG9ydEdJID0gVHJhbnNtaXQuZmllbGQuU2hvcnRHSTsKKwlwVHhXSS0+U1RCQz0gVHJhbnNtaXQuZmllbGQuU1RCQzsKKworCXBUeFdJLT5NQ1MgPSBUcmFuc21pdC5maWVsZC5NQ1M7CisJcFR4V0ktPlBIWU1PREU9IFRyYW5zbWl0LmZpZWxkLk1PREU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLworCS8vIE1NUFMgaXMgODAyLjExbiBmZWF0dXJlcy4gQmVjYXVzZSBUeFdJLT5NQ1MgPiA3IG11c3QgYmUgSFQgbW9kZSwKKwkvLyBzbyBuZWVkIG5vdCBjaGVjayBpZiBpdCdzIEhUIHJhdGUuCisJLy8KKwlpZiAoKE1JTU9wcyA9PSBNTVBTX1NUQVRJQykgJiYgKHBUeFdJLT5NQ1MgPiA3KSkKKwkJcFR4V0ktPk1DUyA9IDc7CisKKwlpZiAoKE1JTU9wcyA9PSBNTVBTX0RZTkFNSUMpICYmIChwVHhXSS0+TUNTID4gNykpIC8vIFNNUFMgcHJvdGVjdCAyIHNwYXRpYWwuCisJCXBUeFdJLT5NSU1PcHMgPSAxOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcFR4V0ktPkNGQUNLID0gQ2ZBY2s7CisKKwlyZXR1cm47Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJRGlzYWJsZSBwcm90ZWN0aW9uIGZvciBBVEUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBVEVEaXNhYmxlQXNpY1Byb3RlY3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVBST1RfQ0ZHX1NUUlVDCVByb3RDZmcsIFByb3RDZmc0OworCVVJTlQzMiBQcm90ZWN0WzZdOworCVVTSE9SVAkJCW9mZnNldDsKKwlVQ0hBUgkJCWk7CisJVUlOVDMyIE1hY1JlZyA9IDA7CisKKwkvLyBDb25maWcgQVNJQyBSVFMgdGhyZXNob2xkIHJlZ2lzdGVyCisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9SVFNfQ0ZHLCAmTWFjUmVnKTsKKwlNYWNSZWcgJj0gMHhGRjAwMDBGRjsKKwlNYWNSZWcgfD0gKHBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA8PCA4KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9SVFNfQ0ZHLCBNYWNSZWcpOworCisJLy8gSW5pdGlhbCBjb21tb24gcHJvdGVjdGlvbiBzZXR0aW5ncworCVJUTVBaZXJvTWVtb3J5KFByb3RlY3QsIHNpemVvZihQcm90ZWN0KSk7CisJUHJvdENmZzQud29yZCA9IDA7CisJUHJvdENmZy53b3JkID0gMDsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd0dGNDAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93R0YyMCA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dNTTQwID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd01NMjAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93T2ZkbSA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dDY2sgPSAxOworCVByb3RDZmcuZmllbGQuUlRTVGhFbiA9IDE7CisJUHJvdENmZy5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKworCS8vIEhhbmRsZSBsZWdhY3koQi9HKSBwcm90ZWN0aW9uCisJUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGU7CisJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IDA7CisJUHJvdGVjdFswXSA9IFByb3RDZmcud29yZDsKKwlQcm90ZWN0WzFdID0gUHJvdENmZy53b3JkOworCisJLy8gTk8gUFJPVEVDVAorCS8vIDEuQWxsIFNUQXMgaW4gdGhlIEJTUyBhcmUgMjAvNDAgTUh6IEhUCisJLy8gMi4gaW4gYWkgMjAvNDBNSHogQlNTCisJLy8gMy4gYWxsIFNUQXMgYXJlIDIwTUh6IGluIGEgMjBNSHogQlNTCisJLy8gUHVyZSBIVC4gbm8gcHJvdGVjdGlvbi4KKworCS8vIE1NMjBfUFJPVF9DRkcKKwkvLwlSZXNlcnZlZCAoMzE6MjcpCisJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMDEwMTExCisJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDA0IChPRkRNIDI0TSkKKwlQcm90ZWN0WzJdID0gMHgwMTc0NDAwNDsKKworCS8vIE1NNDBfUFJPVF9DRkcKKwkvLwlSZXNlcnZlZCAoMzE6MjcpCisJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMTExMTExCisJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDg0IChkdXBsaWNhdGUgT0ZETSAyNE0pCisJUHJvdGVjdFszXSA9IDB4MDNmNDQwODQ7CisKKwkvLyBDRjIwX1BST1RfQ0ZHCisJLy8JUmVzZXJ2ZWQgKDMxOjI3KQorCS8vIAlQUk9UX1RYT1AoMjU6MjApIC0tIDAxMDExMQorCS8vCVBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKQorCS8vICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKQorCS8vIAlQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDAwNCAoT0ZETSAyNE0pCisJUHJvdGVjdFs0XSA9IDB4MDE3NDQwMDQ7CisKKwkvLyBDRjQwX1BST1RfQ0ZHCisJLy8JUmVzZXJ2ZWQgKDMxOjI3KQorCS8vIAlQUk9UX1RYT1AoMjU6MjApIC0tIDExMTExMQorCS8vCVBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKQorCS8vICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKQorCS8vIAlQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDA4NCAoZHVwbGljYXRlIE9GRE0gMjRNKQorCVByb3RlY3RbNV0gPSAweDAzZjQ0MDg0OworCisJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IEZBTFNFOworCisJb2Zmc2V0ID0gQ0NLX1BST1RfQ0ZHOworCWZvciAoaSA9IDA7aSA8IDY7aSsrKQorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyBpKjQsIFByb3RlY3RbaV0pOworCit9CisKKyNpZmRlZiBSVDI4NzAKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJV3JpdGUgVHhJbmZvIGZvciBBVEUgbW9kZS4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBWT0lEIEFURVdyaXRlVHhJbmZvKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWElORk9fU1RSVUMgCXBUeEluZm8sCisJSU4JVVNIT1JUCQlVU0JETUFwa3RMZW4sCisJSU4JQk9PTEVBTgkJYldpdiwKKwlJTglVQ0hBUgkJCVF1ZXVlU2VsLAorCUlOCVVDSEFSCQkJTmV4dFZhbGlkLAorCUlOCVVDSEFSCQkJVHhCdXJzdCkKK3sKKwlwVHhJbmZvLT5VU0JETUFUeFBrdExlbiA9IFVTQkRNQXBrdExlbjsKKwlwVHhJbmZvLT5RU0VMID0gUXVldWVTZWw7CisKKwlpZiAoUXVldWVTZWwgIT0gRklGT19FRENBKQorCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PT09PiBRdWV1ZVNlbCAhPSBGSUZPX0VEQ0E8PT09PT09PVxuIikpOworCisJcFR4SW5mby0+VVNCRE1BTmV4dFZMRCA9IE5leHRWYWxpZDsKKwlwVHhJbmZvLT5VU0JETUFUeGJ1cnN0ID0gVHhCdXJzdDsKKwlwVHhJbmZvLT5XSVYgPSBiV2l2OworCXBUeEluZm8tPlN3VXNlTGFzdFJvdW5kID0gMDsKKwlwVHhJbmZvLT5yc3YgPSAwOworCXBUeEluZm8tPnJzdjIgPSAwOworCisJcmV0dXJuOworfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisvKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gY29udmVydCBSc3NpICovCisjaWYgMQorLy8KKy8vIFRoZSB3YXkgdXNlZCB3aXRoIEdFVF9MTkFfR0FJTigpLgorLy8KK0NIQVIgQVRFQ29udmVydFRvUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglDSEFSCVJzc2ksCisJSU4gIFVDSEFSICAgUnNzaU51bWJlcikKK3sKKwlVQ0hBUglSc3NpT2Zmc2V0LCBMTkFHYWluOworCisJLy8gUnNzaSBlcXVhbHMgdG8gemVybyBzaG91bGQgYmUgYW4gaW52YWxpZCB2YWx1ZQorCWlmIChSc3NpID09IDApCisJCXJldHVybiAtOTk7CisKKwlMTkFHYWluID0gR0VUX0xOQV9HQUlOKHBBZCk7CisJaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA+IDE0KQorCXsKKwkJaWYgKFJzc2lOdW1iZXIgPT0gMCkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MDsKKwkJZWxzZSBpZiAoUnNzaU51bWJlciA9PSAxKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDI7CisJfQorCWVsc2UKKwl7CisJCWlmIChSc3NpTnVtYmVyID09IDApCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQyOworCX0KKworCXJldHVybiAoLTEyIC0gUnNzaU9mZnNldCAtIExOQUdhaW4gLSBSc3NpKTsKK30KKyNlbHNlCisvLworLy8gVGhlIHdheSBvcmlnaW5hbGx5IHVzZWQgaW4gQVRFIG9mIHJ0Mjg2MGFwLgorLy8KK0NIQVIgQVRFQ29udmVydFRvUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglDSEFSCQkJUnNzaSwKKwlJTiAgVUNIQVIgICBSc3NpTnVtYmVyKQoreworCVVDSEFSCVJzc2lPZmZzZXQsIExOQUdhaW47CisKKwkvLyBSc3NpIGVxdWFscyB0byB6ZXJvIHNob3VsZCBiZSBhbiBpbnZhbGlkIHZhbHVlCisJaWYgKFJzc2kgPT0gMCkKKwkJcmV0dXJuIC05OTsKKworICAgIGlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkKKyAgICB7CisgICAgICAgIExOQUdhaW4gPSBwQWQtPkFMTkFHYWluOworICAgICAgICBpZiAoUnNzaU51bWJlciA9PSAwKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDE7CisJCWVsc2UKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTE5BR2FpbiA9IHBBZC0+QkxOQUdhaW47CisgICAgICAgIGlmIChSc3NpTnVtYmVyID09IDApCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQyOworICAgIH0KKworICAgIHJldHVybiAoLTMyIC0gUnNzaU9mZnNldCArIExOQUdhaW4gLSBSc3NpKTsKK30KKyNlbmRpZiAvKiBlbmQgb2YgI2lmIDEgKi8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNldCBKYXBhbiBmaWx0ZXIgY29lZmZpY2llbnRzIGlmIG5lZWRlZC4KKwlOb3RlOgorCQlUaGlzIHJvdXRpbmUgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4KKwkJZW50ZXJpbmcgVFhGUkFNRSBtb2RlIG9yIFRYQ09OVCBtb2RlLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIFZPSUQgU2V0SmFwYW5GaWx0ZXIoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVDSEFSCQkJQmJwRGF0YSA9IDA7CisKKwkvLworCS8vIElmIENoYW5uZWw9MTQgYW5kIEJhbmR3aWR0aD0yME0gYW5kIE1vZGU9Q0NLLCBzZXQgQkJQIFI0IGJpdDU9MQorCS8vIChKYXBhbiBUeCBmaWx0ZXIgY29lZmZpY2llbnRzKXdoZW4gKFRYRlJBTUUgb3IgVFhDT05UKS4KKwkvLworCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQmJwRGF0YSk7CisKKyAgICBpZiAoKHBBZC0+YXRlLlR4V0kuUEhZTU9ERSA9PSBNT0RFX0NDSykgJiYgKHBBZC0+YXRlLkNoYW5uZWwgPT0gMTQpICYmIChwQWQtPmF0ZS5UeFdJLkJXID09IEJXXzIwKSkKKyAgICB7CisgICAgICAgIEJicERhdGEgfD0gMHgyMDsgICAgLy8gdHVybiBvbgorICAgICAgICBBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRKYXBhbkZpbHRlciEhIVxuIikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCQlCYnBEYXRhICY9IDB4ZGY7ICAgIC8vIHR1cm4gb2ZmCisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNsZWFySmFwYW5GaWx0ZXIhISFcbiIpKTsKKyAgICB9CisKKwlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJicERhdGEpOworfQorCitWT0lEIEFURVNhbXBsZVJzc2koCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUFJYV0lfU1RSVUMJCXBSeFdJKQoreworCS8qIFRoZXJlIGFyZSB0d28gd2F5cyB0byBjb2xsZWN0IFJTU0kuICovCisjaWYgMQorCS8vcEFkLT5MYXN0UnhSYXRlID0gKFVTSE9SVCkoKHBSeFdJLT5NQ1MpICsgKHBSeFdJLT5CVyA8PDcpICsgKHBSeFdJLT5TaG9ydEdJIDw8OCkrIChwUnhXSS0+UEhZTU9ERSA8PDE0KSkgOworCWlmIChwUnhXSS0+UlNTSTAgIT0gMCkKKwl7CisJCXBBZC0+YXRlLkxhc3RSc3NpMAk9IEFURUNvbnZlcnRUb1Jzc2kocEFkLCAoQ0hBUikgcFJ4V0ktPlJTU0kwLCBSU1NJXzApOworCQlwQWQtPmF0ZS5BdmdSc3NpMFg4CT0gKHBBZC0+YXRlLkF2Z1Jzc2kwWDggLSBwQWQtPmF0ZS5BdmdSc3NpMCkgKyBwQWQtPmF0ZS5MYXN0UnNzaTA7CisJCXBBZC0+YXRlLkF2Z1Jzc2kwICAJPSBwQWQtPmF0ZS5BdmdSc3NpMFg4ID4+IDM7CisJfQorCWlmIChwUnhXSS0+UlNTSTEgIT0gMCkKKwl7CisJCXBBZC0+YXRlLkxhc3RSc3NpMQk9IEFURUNvbnZlcnRUb1Jzc2kocEFkLCAoQ0hBUikgcFJ4V0ktPlJTU0kxLCBSU1NJXzEpOworCQlwQWQtPmF0ZS5BdmdSc3NpMVg4CT0gKHBBZC0+YXRlLkF2Z1Jzc2kxWDggLSBwQWQtPmF0ZS5BdmdSc3NpMSkgKyBwQWQtPmF0ZS5MYXN0UnNzaTE7CisJCXBBZC0+YXRlLkF2Z1Jzc2kxCT0gcEFkLT5hdGUuQXZnUnNzaTFYOCA+PiAzOworCX0KKwlpZiAocFJ4V0ktPlJTU0kyICE9IDApCisJeworCQlwQWQtPmF0ZS5MYXN0UnNzaTIJPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMiwgUlNTSV8yKTsKKwkJcEFkLT5hdGUuQXZnUnNzaTJYOAk9IChwQWQtPmF0ZS5BdmdSc3NpMlg4IC0gcEFkLT5hdGUuQXZnUnNzaTIpICsgcEFkLT5hdGUuTGFzdFJzc2kyOworCQlwQWQtPmF0ZS5BdmdSc3NpMgk9IHBBZC0+YXRlLkF2Z1Jzc2kyWDggPj4gMzsKKwl9CisKKwlwQWQtPmF0ZS5MYXN0U05SMCA9IChDSEFSKShwUnhXSS0+U05SMCk7Ly8gQ0hBUiA9PT4gVUNIQVIgPworCXBBZC0+YXRlLkxhc3RTTlIxID0gKENIQVIpKHBSeFdJLT5TTlIxKTsvLyBDSEFSID09PiBVQ0hBUiA/CisKKwlwQWQtPmF0ZS5OdW1PZkF2Z1Jzc2lTYW1wbGUgKys7CisjZWxzZQorCXBBZC0+YXRlLkxhc3RTTlIwID0gKENIQVIpKHBSeFdJLT5TTlIwKTsKKwlwQWQtPmF0ZS5MYXN0U05SMSA9IChDSEFSKShwUnhXSS0+U05SMSk7CisJcEFkLT5hdGUuUnhDbnRQZXJTZWMrKzsKKwlwQWQtPmF0ZS5MYXN0UnNzaTAgPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMCwgUlNTSV8wKTsKKwlwQWQtPmF0ZS5MYXN0UnNzaTEgPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMSwgUlNTSV8xKTsKKwlwQWQtPmF0ZS5MYXN0UnNzaTIgPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMiwgUlNTSV8yKTsKKwlwQWQtPmF0ZS5BdmdSc3NpMFg4ID0gKHBBZC0+YXRlLkF2Z1Jzc2kwWDggLSBwQWQtPmF0ZS5BdmdSc3NpMCkgKyBwQWQtPmF0ZS5MYXN0UnNzaTA7CisJcEFkLT5hdGUuQXZnUnNzaTAgPSBwQWQtPmF0ZS5BdmdSc3NpMFg4ID4+IDM7CisJcEFkLT5hdGUuQXZnUnNzaTFYOCA9IChwQWQtPmF0ZS5BdmdSc3NpMVg4IC0gcEFkLT5hdGUuQXZnUnNzaTEpICsgcEFkLT5hdGUuTGFzdFJzc2kxOworCXBBZC0+YXRlLkF2Z1Jzc2kxID0gcEFkLT5hdGUuQXZnUnNzaTFYOCA+PiAzOworCXBBZC0+YXRlLkF2Z1Jzc2kyWDggPSAocEFkLT5hdGUuQXZnUnNzaTJYOCAtIHBBZC0+YXRlLkF2Z1Jzc2kyKSArIHBBZC0+YXRlLkxhc3RSc3NpMjsKKwlwQWQtPmF0ZS5BdmdSc3NpMiA9IHBBZC0+YXRlLkF2Z1Jzc2kyWDggPj4gMzsKKwlwQWQtPmF0ZS5OdW1PZkF2Z1Jzc2lTYW1wbGUgKys7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCBSVE1QU3RhdGlvblN0b3AoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpCit7CisvLwlCT09MRUFOICAgICAgIENhbmNlbGxlZDsKKworICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QU3RhdGlvblN0b3BcbiIpKTsKKworCS8vIEZvciByeCBzdGF0aXN0aWNzLCB3ZSBuZWVkIHRvIGtlZXAgdGhpcyB0aW1lciBydW5uaW5nLgorLy8JUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgICAgICAmQ2FuY2VsbGVkKTsKKworICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBSVE1QU3RhdGlvblN0b3BcbiIpKTsKK30KKworVk9JRCBSVE1QU3RhdGlvblN0YXJ0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKQoreworICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QU3RhdGlvblN0YXJ0XG4iKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IFJUTVBTdGF0aW9uU3RhcnRcbiIpKTsKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTZXR1cCBGcmFtZSBmb3JtYXQuCisJTk9URToKKwkJVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gQVRFIG1vZGUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaWZkZWYgUlQyODcwCisvKj09PT09PT09PT09PT09PT09PT09PT1TdGFydCBvZiBSVDI4NzA9PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitzdGF0aWMgSU5UIEFURVNldFVwRnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUlOVDMyIFR4SWR4KQoreworCVVJTlQgajsKKwlQVFhfQ09OVEVYVAlwTnVsbENvbnRleHQ7CisJUFVDSEFSCQkJcERlc3Q7CisJSFRUUkFOU01JVF9TRVRUSU5HCVR4SFRQaHlNb2RlOworCVBUWFdJX1NUUlVDCQlwVHhXSTsKKwlQVFhJTkZPX1NUUlVDCQlwVHhJbmZvOworCVVJTlQzMgkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoLCBPcmdCdWZmZXJMZW5ndGggPSAwOworCVVDSEFSCQkJcGFkTGVuID0gMDsKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCVBIRUFERVJfODAyXzExCXBIZWFkZXI4MDIxMSA9IE5VTEw7CisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkgfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJeworCQlyZXR1cm4gLTE7CisJfQorCisJLyogV2UgYWx3YXlzIHVzZSBRSURfQUNfQkUgYW5kIEZJRk9fRURDQSBpbiBBVEUgbW9kZS4gKi8KKworCXBOdWxsQ29udGV4dCA9ICYocEFkLT5OdWxsQ29udGV4dCk7CisJQVNTRVJUKHBOdWxsQ29udGV4dCAhPSBOVUxMKTsKKworCWlmIChwTnVsbENvbnRleHQtPkluVXNlID09IEZBTFNFKQorCXsKKwkJLy8gU2V0IHRoZSBpbiB1c2UgYml0CisJCXBOdWxsQ29udGV4dC0+SW5Vc2UgPSBUUlVFOworCQlOZGlzWmVyb01lbW9yeSgmKHBBZC0+TnVsbEZyYW1lKSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCQkvLyBGaWxsIDgwMi4xMSBoZWFkZXIuCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJcEhlYWRlcjgwMjExID0gTmRpc01vdmVNZW1vcnkoJihwQWQtPk51bGxGcmFtZSksIHBBZC0+YXRlLkhlYWRlciwgcEFkLT5hdGUuSExlbik7CisvLwkJCXBEZXN0ID0gTmRpc01vdmVNZW1vcnkoJihwQWQtPk51bGxGcmFtZSksIHBBZC0+YXRlLkhlYWRlciwgcEFkLT5hdGUuSExlbik7CisvLwkJCXBIZWFkZXI4MDIxMSA9IChQSEVBREVSXzgwMl8xMSlwRGVzdDsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKwkJeworCQkJLy8gRmlsbCA4MDIuMTEgaGVhZGVyLgorCQkJTmRpc01vdmVNZW1vcnkoJihwQWQtPk51bGxGcmFtZSksIFRlbXBsYXRlRnJhbWUsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCX0KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpJihwQWQtPk51bGxGcmFtZSksIERJUl9SRUFELCBGQUxTRSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJLyogbW9kaWZ5IHNlcXVlbmNlIG51bWJlci4uLi4gKi8KKwkJCWlmIChwQWQtPmF0ZS5UeERvbmVDb3VudCA9PSAwKQorCQkJeworCQkJCXBBZC0+YXRlLnNlcSA9IHBIZWFkZXI4MDIxMS0+U2VxdWVuY2U7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEhlYWRlcjgwMjExLT5TZXF1ZW5jZSA9ICsrcEFkLT5hdGUuc2VxOworCQkJfQorCQkJLyogV2UgYWxyZWFkeSBnb3QgYWxsIHRoZSBhZGRyLiBmaWVsZHMgZnJvbSBRQSBHVUkuICovCisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJCXsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjEsIHBBZC0+YXRlLkFkZHIxKTsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjIsIHBBZC0+YXRlLkFkZHIyKTsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjMsIHBBZC0+YXRlLkFkZHIzKTsKKwkJfQorCisJCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXSwgVFhfQlVGRkVSX05PUk1TSVpFKTsvLz8/PworCQlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdOworCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJLy8gQXZvaWQgdG8gZXhjZWVkIHRoZSByYW5nZSBvZiBXaXJlbGVzc1BhY2tldFtdLgorCQkJQVNTRVJUKHBBZC0+YXRlLlR4SW5mby5VU0JETUFUeFBrdExlbiA8PSAoTUFYX0ZSQU1FX1NJWkUgLSAzNC8qID09IDIzMTIgKi8pKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBUeEluZm8sICYocEFkLT5hdGUuVHhJbmZvKSwgc2l6ZW9mKHBBZC0+YXRlLlR4SW5mbykpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCQl7CisJCQkvLyBBdm9pZCB0byBleGNlZWQgdGhlIHJhbmdlIG9mIFdpcmVsZXNzUGFja2V0W10uCisJCQlBU1NFUlQocEFkLT5hdGUuVHhMZW5ndGggPD0gKE1BWF9GUkFNRV9TSVpFIC0gMzQvKiA9PSAyMzEyICovKSk7CisKKwkJCS8vIHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuIHdpbGwgYmUgdXBkYXRlZCB0byBpbmNsdWRlIHBhZGRpbmcgbGF0ZXIuCisJCQlBVEVXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKFRYV0lfU0laRSArIHBBZC0+YXRlLlR4TGVuZ3RoKSwgVFJVRSwgRXBUb1F1ZXVlW01HTVRQSVBFSURYXSwgRkFMU0UsICBGQUxTRSk7CisJCQlwVHhJbmZvLT5RU0VMID0gRklGT19FRENBOworCQl9CisKKwkJcFR4V0kgPSAoUFRYV0lfU1RSVUMpJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYSU5GT19TSVpFXTsKKworCQkvLyBGaWxsIFR4V0kuCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCVR4SFRQaHlNb2RlLmZpZWxkLkJXID0gcEFkLT5hdGUuVHhXSS5CVzsKKwkJCVR4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSBwQWQtPmF0ZS5UeFdJLlNob3J0R0k7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5TVEJDID0gcEFkLT5hdGUuVHhXSS5TVEJDOworCQkJVHhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEFkLT5hdGUuVHhXSS5NQ1M7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5NT0RFID0gcEFkLT5hdGUuVHhXSS5QSFlNT0RFOworCQkJQVRFV3JpdGVUeFdJKHBBZCwgcFR4V0ksIHBBZC0+YXRlLlR4V0kuRlJBRywgcEFkLT5hdGUuVHhXSS5UUywgcEFkLT5hdGUuVHhXSS5BTVBEVSwgcEFkLT5hdGUuVHhXSS5BQ0ssIHBBZC0+YXRlLlR4V0kuTlNFUSwKKwkJCQlwQWQtPmF0ZS5UeFdJLkJBV2luU2l6ZSwgQlNTSURfV0NJRCwgcEFkLT5hdGUuVHhXSS5NUERVdG90YWxCeXRlQ291bnQvKiBpbmNsdWRlIDgwMi4xMSBoZWFkZXIgKi8sIHBBZC0+YXRlLlR4V0kuUGFja2V0SWQsIDAsIHBBZC0+YXRlLlR4V0kudHhvcC8qSUZTX0hUVFhPUCovLCBwQWQtPmF0ZS5UeFdJLkNGQUNLLypGQUxTRSovLCBUeEhUUGh5TW9kZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5CVyA9IHBBZC0+YXRlLlR4V0kuQlc7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gcEFkLT5hdGUuVHhXSS5TaG9ydEdJOworCQkJVHhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IDA7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPmF0ZS5UeFdJLk1DUzsKKwkJCVR4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBwQWQtPmF0ZS5UeFdJLlBIWU1PREU7CisKKwkJCUFURVdyaXRlVHhXSShwQWQsIHBUeFdJLCAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UvKiBObyBhY2sgcmVxdWlyZWQuICovLCBGQUxTRSwgMCwgQlNTSURfV0NJRCwgcEFkLT5hdGUuVHhMZW5ndGgsCisJCQkJMCwgMCwgSUZTX0hUVFhPUCwgRkFMU0UsIFR4SFRQaHlNb2RlKTsvLyAiTU1QU19TVEFUSUMiIGluc3RlYWQgb2YgIk1NUFNfRFlOQU1JQyIgPz8/CisJCX0KKworCQlSVE1QTW92ZU1lbW9yeSgmcEFkLT5OdWxsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbVFhJTkZPX1NJWkUrVFhXSV9TSVpFXSwgJnBBZC0+TnVsbEZyYW1lLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCisJCXBEZXN0ID0gJihwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtUWElORk9fU0laRStUWFdJX1NJWkUrc2l6ZW9mKEhFQURFUl84MDJfMTEpXSk7CisKKwkJLy8gUHJlcGFyZSBmcmFtZSBwYXlsb2FkCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJLy8gY29weSBwYXR0ZXJuCisJCQlpZiAoKHBBZC0+YXRlLlBMZW4gIT0gMCkpCisJCQl7CisJCQkJZm9yIChqID0gMDsgaiA8IHBBZC0+YXRlLkRMZW47IGorPXBBZC0+YXRlLlBMZW4pCisJCQkJeworCQkJCQlSVE1QTW92ZU1lbW9yeShwRGVzdCwgcEFkLT5hdGUuUGF0dGVybiwgcEFkLT5hdGUuUExlbik7CisJCQkJCXBEZXN0ICs9IHBBZC0+YXRlLlBMZW47CisJCQkJfQorCQkJfQorCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGggPSBUWElORk9fU0laRSArIFRYV0lfU0laRSArIHBBZC0+YXRlLlR4V0kuTVBEVXRvdGFsQnl0ZUNvdW50OworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCQl7CisJCSAgICBmb3IgKGogPSAwOyBqIDwgKHBBZC0+YXRlLlR4TGVuZ3RoIC0gc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsgaisrKQorCQkgICAgeworCQkJCSpwRGVzdCA9IDB4QTU7CisJCQkJcERlc3QgKz0gMTsKKwkJICAgIH0KKwkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoID0gVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBwQWQtPmF0ZS5UeExlbmd0aDsKKwkJfQorCisjaWYgMQorCQlPcmdCdWZmZXJMZW5ndGggPSBUcmFuc2ZlckJ1ZmZlckxlbmd0aDsKKwkJVHJhbnNmZXJCdWZmZXJMZW5ndGggPSAoVHJhbnNmZXJCdWZmZXJMZW5ndGggKyAzKSAmICh+Myk7CisKKwkJLy8gQWx3YXlzIGFkZCA0IGV4dHJhIGJ5dGVzIGF0IGV2ZXJ5IHBhY2tldC4KKwkJcGFkTGVuID0gVHJhbnNmZXJCdWZmZXJMZW5ndGggLSBPcmdCdWZmZXJMZW5ndGggKyA0Oy8qIDQgPT0gbGFzdCBwYWNrZXQgcGFkZGluZyAqLworCQlBU1NFUlQoKHBhZExlbiA8PSAoUlRNUF9QS1RfVEFJTF9QQURESU5HIC0gNC8qIDQgPT0gTWF4QnVsa091dHNpemUgYWxpZ25tZW50IHBhZGRpbmcgKi8pKSk7CisKKwkJLyogTm93IG1lbXplcm8gYWxsIGV4dHJhIHBhZGRpbmcgYnl0ZXMuICovCisJCU5kaXNaZXJvTWVtb3J5KHBEZXN0LCBwYWRMZW4pOworCQlwRGVzdCArPSBwYWRMZW47CisjZWxzZQorCQlpZiAoKFRyYW5zZmVyQnVmZmVyTGVuZ3RoICUgNCkgPT0gMSkKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocERlc3QsIDcpOworCQkJcERlc3QgKz0gNzsKKwkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoICArPSAzOworCQl9CisJCWVsc2UgaWYgKChUcmFuc2ZlckJ1ZmZlckxlbmd0aCAlIDQpID09IDIpCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBEZXN0LCA2KTsKKwkJCXBEZXN0ICs9IDY7CisJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCAgKz0gMjsKKwkJfQorCQllbHNlIGlmICgoVHJhbnNmZXJCdWZmZXJMZW5ndGggJSA0KSA9PSAzKQorCQl7CisJCQlOZGlzWmVyb01lbW9yeShwRGVzdCwgNSk7CisJCQlwRGVzdCArPSA1OworCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGggICs9IDE7CisJCX0KKyNlbmRpZiAvLyAxIC8vCisKKwkJLy8gVXBkYXRlIHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuIHRvIGluY2x1ZGUgcGFkZGluZy4KKwkJcFR4SW5mby0+VVNCRE1BVHhQa3RMZW4gPSBUcmFuc2ZlckJ1ZmZlckxlbmd0aCAtIFRYSU5GT19TSVpFOworCisJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoICs9IDQ7CisKKwkJLy8gSWYgVHJhbnNmZXJCdWZmZXJMZW5ndGggaXMgbXVsdGlwbGUgb2YgNjQsIGFkZCBleHRyYSA0IGJ5dGVzIGFnYWluLgorCQlpZiAoKFRyYW5zZmVyQnVmZmVyTGVuZ3RoICUgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkgPT0gMCkKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocERlc3QsIDQpOworCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGggKz0gNDsKKwkJfQorCisJCS8vIEZpbGwgb3V0IGZyYW1lIGxlbmd0aCBpbmZvcm1hdGlvbiBmb3IgZ2xvYmFsIEJ1bGsgb3V0IGFyYml0b3IKKwkJcEFkLT5OdWxsQ29udGV4dC5CdWxrT3V0U2l6ZSA9IFRyYW5zZmVyQnVmZmVyTGVuZ3RoOworCX0KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4V0ksIFRZUEVfVFhXSSk7CisJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKCgoUFVDSEFSKXBUeEluZm8pK1RYV0lfU0laRStUWElORk9fU0laRSksIERJUl9XUklURSwgRkFMU0UpOworICAgIFJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4SW5mbywgVFlQRV9UWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKwlyZXR1cm4gMDsKK30KKworVk9JRCBBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBUWF9DT05URVhUCQkgICAgcE51bGxDb250ZXh0OworCVVDSEFSCQkJCUJ1bGtPdXRQaXBlSWQ7CisJTlRTVEFUVVMJCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwkJSXJxRmxhZ3M7CisJVUxPTkcJCQkgICAgT2xkVmFsdWU7CisKKwlwTnVsbENvbnRleHQgPSAoUFRYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgPSBwTnVsbENvbnRleHQtPnBBZDsKKworCisJLy8gUmVzZXQgTnVsbCBmcmFtZSBjb250ZXh0IGZsYWdzCisJcE51bGxDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJcE51bGxDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCVN0YXR1cyA9IHBVcmItPnN0YXR1czsKKworCS8vIFN0b3JlIEJ1bGtPdXQgUGlwZUlkCisJQnVsa091dFBpcGVJZCA9IHBOdWxsQ29udGV4dC0+QnVsa091dFBpcGVJZDsKKwlwQWQtPkJ1bGtPdXREYXRhT25lU2VjQ291bnQrKzsKKworCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpCisJeworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCWlmICgoQVRFX09OKHBBZCkpICYmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpKQorCQl7CisJCQlpZiAocEFkLT5hdGUuUUlEID09IEJ1bGtPdXRQaXBlSWQpCisJCQl7CisJCQkJLy8gTGV0IFJ4IGNhbiBoYXZlIGEgY2hhbmNlIHRvIGJyZWFrIGluIGR1cmluZyBUeCBwcm9jZXNzLAorCQkJCS8vIGVzcGVjaWFsbHkgZm9yIGxvb3BiYWNrIG1vZGUgaW4gUUEgQVRFLgorCQkJCS8vIFRvIHRyYWRlIG9mZiBiZXR3ZWVuIHR4IHBlcmZvcm1hbmNlIGFuZCBsb29wYmFjayBtb2RlIGludGVncml0eS4KKwkJCQkvKiBRICAgOiBOb3cgUnggaXMgaGFuZGxlZCBieSB0YXNrbGV0LCBkbyB3ZSBzdGlsbCBuZWVkIHRoaXMgZGVsYXkgPyAqLworCQkJCS8qIEFucyA6IEV2ZW4gdGFza2xldCBpcyB1c2VkLCBSeC9UeCA8IDEgaWYgd2UgZG8gbm90IGRlbGF5IGZvciBhIHdoaWxlIHJpZ2h0IGhlcmUuICovCisJCQkJUlRNUHVzZWNEZWxheSg1MDApOworCQkJCXBBZC0+YXRlLlR4RG9uZUNvdW50Kys7CisJCQkJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCQkJCUFTU0VSVChwQWQtPmF0ZS5RSUQgPT0gMCk7CisJCQkJcEFkLT5hdGUuVHhBYzArKzsKKwkJCX0KKwkJfQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJCXBBZC0+QnVsa091dENvbXBsZXRlKys7CisKKwkJcEFkLT5Db3VudGVyczgwMjMuR29vZFRyYW5zbWl0cysrOworCisJCS8qIERvbid0IHdvcnJ5IGFib3V0IHRoZSBxdWV1ZSBpcyBlbXB0eSBvciBub3QuIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpdHNlbGYuICovCisJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgVFJVRSwgQnVsa091dFBpcGVJZCwgTUFYX1RYX1BST0NFU1MpOworCisJCS8qIEluIDI4eHgsIFNlbmRUeFdhaXRRdWV1ZSA9PT4gVHhTd1F1ZXVlICAqLworLyoKKwkJaWYgKHBBZC0+U2VuZFR4V2FpdFF1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApCisJCXsKKwkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgQnVsa091dFBpcGVJZCk7CisJCX0KKyovCisJfQorCWVsc2UJLy8gU1RBVFVTX09USEVSCisJeworCQlwQWQtPkJ1bGtPdXRDb21wbGV0ZU90aGVyKys7CisKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQnVsa091dERhdGFQYWNrZXQgRmFpbGVkIFNUQVRVU19PVEhFUiA9IDB4JXggLiBcbiIsIFN0YXR1cykpOworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI+PkJ1bGtPdXRSZXE9MHglbHgsIEJ1bGtPdXRDb21wbGV0ZT0weCVseFxuIiwgcEFkLT5CdWxrT3V0UmVxLCBwQWQtPkJ1bGtPdXRDb21wbGV0ZSkpOworCisJCWlmICgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpKQorCQl7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCS8qIEluIDI4eHgsIFJUX09JRF9VU0JfUkVTRVRfQlVMS19PVVQgPT0+IENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCAqLworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQkJLy8gQ2hlY2sKKwkJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwkJCXBBZC0+YnVsa1Jlc2V0UGlwZWlkID0gQnVsa091dFBpcGVJZDsKKwkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisJfQorCisKKworCWlmIChhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpID4gMCkKKwl7CisJCWF0b21pY19kZWMoJnBBZC0+QnVsa091dFJlbWFpbmVkKTsKKwl9CisKKwkvLyAxc3QgLSBUcmFuc21pdCBTdWNjZXNzCisJT2xkVmFsdWUgPSBwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5Mb3dQYXJ0OworCXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC51Lkxvd1BhcnQrKzsKKworCWlmIChwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5Mb3dQYXJ0IDwgT2xkVmFsdWUpCisJeworCQlwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5IaWdoUGFydCsrOworCX0KKworCWlmKCgocEFkLT5Db250aW5CdWxrT3V0ID09IFRSVUUgKSB8fChhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpID4gMCkpICYmIChwQWQtPmF0ZS5Nb2RlICYgQVRFX1RYRlJBTUUpKQorCXsKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisJfQorCWVsc2UKKwl7CisJCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJcEFkLT5hdGUuVHhTdGF0dXMgPSAwOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJfQorCisJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCS8vIEFsd2F5cyBjYWxsIEJ1bGsgcm91dGluZSwgZXZlbiByZXNldCBidWxrLgorCS8vIFRoZSBwcm90ZWN0aW9uIG9mIHJlc3QgYnVsayBzaG91bGQgYmUgaW4gQnVsa091dCByb3V0aW5lLgorCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQpCit7CisJUFRYX0NPTlRFWFQJCXBOdWxsQ29udGV4dCA9ICYocEFkLT5OdWxsQ29udGV4dCk7CisJUFVSQgkJCXBVcmI7CisJaW50CQkJCXJldCA9IDA7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCisJQVNTRVJUKEJ1bGtPdXRQaXBlSWQgPT0gMCk7CisKKwkvKiBCdWlsZCB1cCB0aGUgZnJhbWUgZmlyc3QuICovCisvLwlBVEVTZXRVcEZyYW1lKHBBZCwgMCk7CisKKwlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwlpZiAocEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9PSBUUlVFKQorCXsKKwkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gVFJVRTsKKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCS8vIEluY3JlYXNlIFRvdGFsIHRyYW5zbWl0IGJ5dGUgY291bnRlcgorCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHJhbnNtaXR0ZWRCeXRlQ291bnQgKz0gIHBOdWxsQ29udGV4dC0+QnVsa091dFNpemU7CisJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEJ5dGVDb3VudCArPSAgcE51bGxDb250ZXh0LT5CdWxrT3V0U2l6ZTsKKworCS8vIENsZWFyIEFURSBmcmFtZSBidWxrIG91dCBmbGFnCisJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfQVRFKTsKKworCS8vIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yCisJcE51bGxDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwlSVFVTQkluaXRUeERlc2MocEFkLCBwTnVsbENvbnRleHQsIEJ1bGtPdXRQaXBlSWQsICh1c2JfY29tcGxldGVfdClBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKTsKKwlwVXJiID0gcE51bGxDb250ZXh0LT5wVXJiOworCisJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYikpIT0wKQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXQ6IFN1Ym1pdCBUeCBVUkIgZmFpbGVkICVkXG4iLCByZXQpKTsKKwkJcmV0dXJuOworCX0KKworCXBBZC0+QnVsa091dFJlcSsrOworCXJldHVybjsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUFJYX0NPTlRFWFQJCXBSeENvbnRleHQ7CisJVUlOVAkJCWk7CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+QVRFX1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUFxuIikpOworI2lmIDEKKwlmb3IgKCBpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisJCWlmKHBSeENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJeworCQkJUlRVU0JfVU5MSU5LX1VSQihwUnhDb250ZXh0LT5wVXJiKTsKKwkJCXBSeENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCQkvL05kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmcEFkLT5QZW5kaW5nUngpOworCQkJLy9wQWQtPlBlbmRpbmdSeC0tOworCQl9CisJfQorI2Vsc2UKKwlmb3IgKCBpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7CisJCWlmKGF0b21pY19yZWFkKCZwUnhDb250ZXh0LT5JcnBMb2NrKSA9PSBJUlBMT0NLX0NBTkNFTEFCTEUpCisJCXsKKwkJCVJUVVNCX1VOTElOS19VUkIocFJ4Q29udGV4dC0+cFVyYik7CisJCX0KKwkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcFJ4Q29udGV4dC0+SXJwTG9jaywgSVJQTE9DS19DQU5DRV9TVEFSVCk7CisJfQorI2VuZGlmIC8vIDEgLy8KKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tQVRFX1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUFxuIikpOworCXJldHVybjsKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworVk9JRCBydF9lZV9yZWFkX2FsbChQUlRNUF9BREFQVEVSIHBBZCwgVVNIT1JUICpEYXRhKQoreworCVVTSE9SVCBpOworCVVTSE9SVCB2YWx1ZTsKKworCWZvciAoaSA9IDAgOyBpIDwgRUVQUk9NX1NJWkUvMiA7ICkKKwl7CisJCS8qICJ2YWx1ZSIgaXMgZXhwZWNpYWxseSBmb3Igc29tZSBjb21waWxlcnMuLi4gKi8KKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBpKjIsIHZhbHVlKTsKKwkJRGF0YVtpXSA9IHZhbHVlOworCQlpKys7CisJfQorfQorCitWT0lEIHJ0X2VlX3dyaXRlX2FsbChQUlRNUF9BREFQVEVSIHBBZCwgVVNIT1JUICpEYXRhKQoreworCVVTSE9SVCBpOworCVVTSE9SVCB2YWx1ZTsKKworCWZvciAoaSA9IDAgOyBpIDwgRUVQUk9NX1NJWkUvMiA7ICkKKwl7CisJCS8qICJ2YWx1ZSIgaXMgZXhwZWNpYWxseSBmb3Igc29tZSBjb21waWxlcnMuLi4gKi8KKwkJdmFsdWUgPSBEYXRhW2ldOworCQlSVDI4eHhfRUVQUk9NX1dSSVRFMTYocEFkLCBpKjIsIHZhbHVlKTsKKwkJaSArKzsKKwl9Cit9CisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKK1ZPSUQgQVRFX1FBX1N0YXRpc3RpY3MoCisJSU4gUFJUTVBfQURBUFRFUgkJCXBBZCwKKwlJTiBQUlhXSV9TVFJVQwkJCQlwUnhXSSwKKwlJTiBQUlQyOFhYX1JYRF9TVFJVQwkJcFJ4RCwKKwlJTiBQSEVBREVSXzgwMl8xMQkJCXBIZWFkZXIpCit7CisJLy8gdXBkYXRlIGNvdW50ZXIgZmlyc3QKKwlpZiAocEhlYWRlciAhPSBOVUxMKQorCXsKKwkJaWYgKHBIZWFkZXItPkZDLlR5cGUgPT0gQlRZUEVfREFUQSkKKwkJeworCQkJaWYgKHBSeEQtPlUyTSkKKwkJCQlwQWQtPmF0ZS5VMk0rKzsKKwkJCWVsc2UKKwkJCQlwQWQtPmF0ZS5PdGhlckRhdGErKzsKKwkJfQorCQllbHNlIGlmIChwSGVhZGVyLT5GQy5UeXBlID09IEJUWVBFX01HTVQpCisJCXsKKwkJCWlmIChwSGVhZGVyLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQkVBQ09OKQorCQkJCXBBZC0+YXRlLkJlYWNvbisrOworCQkJZWxzZQorCQkJCXBBZC0+YXRlLk90aGVyQ291bnQrKzsKKwkJfQorCQllbHNlIGlmIChwSGVhZGVyLT5GQy5UeXBlID09IEJUWVBFX0NOVEwpCisJCXsKKwkJCXBBZC0+YXRlLk90aGVyQ291bnQrKzsKKwkJfQorCX0KKwlwQWQtPmF0ZS5SU1NJMCA9IHBSeFdJLT5SU1NJMDsKKwlwQWQtPmF0ZS5SU1NJMSA9IHBSeFdJLT5SU1NJMTsKKwlwQWQtPmF0ZS5SU1NJMiA9IHBSeFdJLT5SU1NJMjsKKwlwQWQtPmF0ZS5TTlIwID0gcFJ4V0ktPlNOUjA7CisJcEFkLT5hdGUuU05SMSA9IHBSeFdJLT5TTlIxOworfQorCisvKiBjb21tYW5kIGlkIHdpdGggQ21kIFR5cGUgPT0gMHgwMDA4KGZvciAyOHh4KS8weDAwMDUoZm9yIGlOSUMpICovCisjZGVmaW5lIFJBQ0ZHX0NNRF9SRl9XUklURV9BTEwJCTB4MDAwMAorI2RlZmluZSBSQUNGR19DTURfRTJQUk9NX1JFQUQxNgkJMHgwMDAxCisjZGVmaW5lIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEUxNgkweDAwMDIKKyNkZWZpbmUgUkFDRkdfQ01EX0UyUFJPTV9SRUFEX0FMTAkweDAwMDMKKyNkZWZpbmUgUkFDRkdfQ01EX0UyUFJPTV9XUklURV9BTEwJMHgwMDA0CisjZGVmaW5lIFJBQ0ZHX0NNRF9JT19SRUFECQkJMHgwMDA1CisjZGVmaW5lIFJBQ0ZHX0NNRF9JT19XUklURQkJCTB4MDAwNgorI2RlZmluZSBSQUNGR19DTURfSU9fUkVBRF9CVUxLCQkweDAwMDcKKyNkZWZpbmUgUkFDRkdfQ01EX0JCUF9SRUFEOAkJCTB4MDAwOAorI2RlZmluZSBSQUNGR19DTURfQkJQX1dSSVRFOAkJMHgwMDA5CisjZGVmaW5lIFJBQ0ZHX0NNRF9CQlBfUkVBRF9BTEwJCTB4MDAwYQorI2RlZmluZSBSQUNGR19DTURfR0VUX0NPVU5URVIJCTB4MDAwYgorI2RlZmluZSBSQUNGR19DTURfQ0xFQVJfQ09VTlRFUgkJMHgwMDBjCisKKyNkZWZpbmUgUkFDRkdfQ01EX1JTVjEJCQkJMHgwMDBkCisjZGVmaW5lIFJBQ0ZHX0NNRF9SU1YyCQkJCTB4MDAwZQorI2RlZmluZSBSQUNGR19DTURfUlNWMwkJCQkweDAwMGYKKworI2RlZmluZSBSQUNGR19DTURfVFhfU1RBUlQJCQkweDAwMTAKKyNkZWZpbmUgUkFDRkdfQ01EX0dFVF9UWF9TVEFUVVMJCTB4MDAxMQorI2RlZmluZSBSQUNGR19DTURfVFhfU1RPUAkJCTB4MDAxMgorI2RlZmluZSBSQUNGR19DTURfUlhfU1RBUlQJCQkweDAwMTMKKyNkZWZpbmUgUkFDRkdfQ01EX1JYX1NUT1AJCQkweDAwMTQKKyNkZWZpbmUgUkFDRkdfQ01EX0dFVF9OT0lTRV9MRVZFTAkweDAwMTUKKworI2RlZmluZSBSQUNGR19DTURfQVRFX1NUQVJUCQkJMHgwMDgwCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU1RPUAkJCTB4MDA4MQorCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ0FSUklFUgkJMHgwMTAwCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ09OVAkJCTB4MDEwMQorI2RlZmluZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0ZSQU1FCQkweDAxMDIKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfQlcJICAgICAgICAgICAgMHgwMTAzCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMAkgICAgICAgIDB4MDEwNAorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjEJCQkweDAxMDUKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfRlJFUV9PRkZTRVQJCTB4MDEwNgorI2RlZmluZSBSQUNGR19DTURfQVRFX0dFVF9TVEFUSVNUSUNTCQkweDAxMDcKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9SRVNFVF9DT1VOVEVSCQkJMHgwMTA4CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkEJCTB4MDEwOQorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFTF9SWF9BTlRFTk5BCQkweDAxMGEKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfUFJFQU1CTEUJCQkweDAxMGIKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfQ0hBTk5FTAkJCTB4MDEwYworI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9BRERSMQkJCQkweDAxMGQKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfQUREUjIJCQkJMHgwMTBlCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIzCQkJCTB4MDEwZgorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9SQVRFCQkJCTB4MDExMAorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9MRU4JCTB4MDExMQorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9DT1VOVAkweDAxMTIKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TVEFSVF9SWF9GUkFNRQkJMHgwMTEzCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1JFQURfQlVMSwkweDAxMTQKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9FMlBST01fV1JJVEVfQlVMSwkweDAxMTUKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9JT19XUklURV9CVUxLCQkweDAxMTYKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9CQlBfUkVBRF9CVUxLCQkweDAxMTcKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9CQlBfV1JJVEVfQlVMSwkweDAxMTgKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9SRl9SRUFEX0JVTEsJCTB4MDExOQorI2RlZmluZSBSQUNGR19DTURfQVRFX1JGX1dSSVRFX0JVTEsJCTB4MDExYQorCisKKworI2RlZmluZSBBMkhleChfWCwgX3ApIAkJCQlcCit7CQkJCQkJCQkJXAorCVVDSEFSICpwOwkJCQkJCVwKKwlfWCA9IDA7CQkJCQkJCVwKKwlwID0gX3A7CQkJCQkJCVwKKwl3aGlsZSAoKCgqcCA+PSAnYScpICYmICgqcCA8PSAnZicpKSB8fCAoKCpwID49ICdBJykgJiYgKCpwIDw9ICdGJykpIHx8ICgoKnAgPj0gJzAnKSAmJiAoKnAgPD0gJzknKSkpCQlcCisJewkJCQkJCQkJCQkJCVwKKwkJaWYgKCgqcCA+PSAnYScpICYmICgqcCA8PSAnZicpKQkJCQlcCisJCQlfWCA9IF9YICogMTYgKyAqcCAtIDg3OwkJCQkJXAorCQllbHNlIGlmICgoKnAgPj0gJ0EnKSAmJiAoKnAgPD0gJ0YnKSkJCVwKKwkJCV9YID0gX1ggKiAxNiArICpwIC0gNTU7CQkJCQlcCisJCWVsc2UgaWYgKCgqcCA+PSAnMCcpICYmICgqcCA8PSAnOScpKQkJXAorCQkJX1ggPSBfWCAqIDE2ICsgKnAgLSA0ODsJCQkJCVwKKwkJcCsrOwkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCVwKK30KKworCitzdGF0aWMgVk9JRCBtZW1jcHlfZXhsKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiAqZHN0LCBVQ0hBUiAqc3JjLCBVTE9ORyBsZW4pOworc3RhdGljIFZPSUQgbWVtY3B5X2V4cyhQUlRNUF9BREFQVEVSIHBBZCwgVUNIQVIgKmRzdCwgVUNIQVIgKnNyYywgVUxPTkcgbGVuKTsKK3N0YXRpYyBWT0lEIFJUTVBfSU9fUkVBRF9CVUxLKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiAqZHN0LCBVQ0hBUiAqc3JjLCBVSU5UMzIgbGVuKTsKKworI2lmZGVmIFVDT1MKK2ludCBhdGVfY29weV90b191c2VyKAorCUlOIFBVQ0hBUiBwYXlsb2FkLAorCUlOIFBVQ0hBUiBtc2csCisJSU4gSU5UICAgIGxlbikKK3sKKwltZW1tb3ZlKHBheWxvYWQsIG1zZywgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworI3VuZGVmCWNvcHlfdG9fdXNlcgorI2RlZmluZSBjb3B5X3RvX3VzZXIoeCx5LHopIGF0ZV9jb3B5X3RvX3VzZXIoKFBVQ0hBUil4LCAoUFVDSEFSKXksIHopCisjZW5kaWYgLy8gVUNPUyAvLworCisjZGVmaW5lCUxFTl9PRl9BUkcgMTYKKworVk9JRCBSdG1wRG9BdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBDb21tYW5kX0lkOworCXN0cnVjdCBhdGVfcmFjZmdoZHIgKnBSYUNmZzsKKwlJTlQJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKworCisKKwlpZigocFJhQ2ZnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0ZV9yYWNmZ2hkciksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCXsKKwkJU3RhdHVzID0gLUVJTlZBTDsKKwkJcmV0dXJuOworCX0KKworCU5kaXNaZXJvTWVtb3J5KHBSYUNmZywgc2l6ZW9mKHN0cnVjdCBhdGVfcmFjZmdoZHIpKTsKKworICAgIGlmIChjb3B5X2Zyb21fdXNlcigoUFVDSEFSKXBSYUNmZywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKwl7CisJCVN0YXR1cyA9IC1FRkFVTFQ7CisJCWtmcmVlKHBSYUNmZyk7CisJCXJldHVybjsKKwl9CisKKworCUNvbW1hbmRfSWQgPSBudG9ocyhwUmFDZmctPmNvbW1hbmRfaWQpOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJcbiVzOiBDb21tYW5kX0lkID0gMHglMDR4ICFcbiIsIF9fRlVOQ1RJT05fXywgQ29tbWFuZF9JZCkpOworCisJc3dpdGNoIChDb21tYW5kX0lkKQorCXsKKyAJCS8vIFdlIHdpbGwgZ2V0IHRoaXMgY29tbWFuZCB3aGVuIFFBIHN0YXJ0cy4KKwkJY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TVEFSVFxuIikpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjayBhcyBzb29uIGFzIHdlIGNhbiB0byBhdm9pZCBRQSB0aW1lb3V0LgorCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TVEFSVCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiQVRFU1RBUlQiKTsKKwkJCX0KKwkJCWJyZWFrOworCisgCQkvLyBXZSB3aWxsIGdldCB0aGlzIGNvbW1hbmQgZWl0aGVyIFFBIGlzIGNsb3NlZCBvciBhdGVkIGlzIGtpbGxlZCBieSB1c2VyLgorCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU1RPUDoKKwkJCXsKKyNpZm5kZWYgVUNPUworCQkJCUlOVDMyIHJldDsKKyNlbmRpZiAvLyAhVUNPUyAvLworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NUT1BcbiIpKTsKKworCQkJCS8vIERpc3Rpbmd1aXNoIHRoaXMgY29tbWFuZCBjYW1lIGZyb20gUUEodmlhIGF0ZWQpCisJCQkJLy8gb3IgYXRlIGRhZW1vbiBhY2NvcmRpbmcgdG8gdGhlIGV4aXN0ZW5jZSBvZiBwaWQgaW4gcGF5bG9hZC4KKwkJCQkvLyBObyBuZWVkIHRvIHByZXBhcmUgZmVlZGJhY2sgaWYgdGhpcyBjbWQgY2FtZSBkaXJlY3RseSBmcm9tIGF0ZSBkYWVtb24uCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlpZiAocFJhQ2ZnLT5sZW5ndGggPT0gc2l6ZW9mKHBBZGFwdGVyLT5hdGUuQXRlUGlkKSkKKwkJCQl7CisJCQkJCS8vIFRoaXMgY29tbWFuZCBjYW1lIGZyb20gUUEuCisJCQkJCS8vIEdldCB0aGUgcGlkIG9mIEFURSBkYWVtb24uCisJCQkJCW1lbWNweSgoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5BdGVQaWQsCisJCQkJCQkoJnBSYUNmZy0+ZGF0YVswXSkgLSAyLyogPT0gJihwUmFDZmctPnN0YXR1cykgKi8sCisJCQkJCQlzaXplb2YocEFkYXB0ZXItPmF0ZS5BdGVQaWQpKTsKKworCQkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrIGFzIHNvb24gYXMgd2UgY2FuIHRvIGF2b2lkIFFBIHRpbWVvdXQuCisJCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid3JxLT51LmRhdGEubGVuZ3RoID0gJWRcbiIsIHdycS0+dS5kYXRhLmxlbmd0aCkpOworCisJICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorCSAgICAgICAgICAgIAl7CisJICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TVE9QXG4iKSk7CisJICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworCSAgICAgICAgICAgIAl9CisKKwkJCQkJLy8KKwkJCQkJLy8ga2lsbCBBVEUgZGFlbW9uIHdoZW4gbGVhdmluZyBBVEUgbW9kZS4KKwkJCQkJLy8gV2UgbXVzdCBraWxsIEFURSBkYWVtb24gZmlyc3QgYmVmb3JlIHNldHRpbmcgQVRFU1RPUCwKKwkJCQkJLy8gb3IgTWljcm9zb2Z0IHdpbGwgcmVwb3J0IHN0aC4gd3JvbmcuCisjaWZuZGVmIFVDT1MKKwkJCQkJcmV0ID0ga2lsbF9wcm9jKHBBZGFwdGVyLT5hdGUuQXRlUGlkLCBTSUdURVJNLCAxKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJeworCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHVuYWJsZSB0byBzaWduYWwgdGhyZWFkXG4iLCBwQWRhcHRlci0+bmV0X2Rldi0+bmFtZSkpOworCQkJCQl9CisjZW5kaWYgLy8gIVVDT1MgLy8KKwkJCQl9CisKKyNpZmRlZiBVQ09TCisJCQkJLy8gUm9nZXIgYWRkIHRvIGF2b2lkIGVycm9yIG1lc3NhZ2UgYWZ0ZXIgY2xvc2UgUUEKKwkJCQlpZiAocEFkYXB0ZXItPkNTUkJhc2VBZGRyZXNzID09IFJUMjg2MF9DU1JfQUREUikKKwkJCQl7CisKKwkJCQkJLy8gcHJlcGFyZSBmZWVkYmFjayBhcyBzb29uIGFzIHdlIGNhbiB0byBhdm9pZCBRQSB0aW1lb3V0LgorCQkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKwkgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJICAgICAgICAgICAgCXsKKwkgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVBfU1RBUlRcbiIpKTsKKwkgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisJICAgICAgICAgICAgCX0KKwkJCQl9CisjZW5kaWYgLy8gVUNPUyAvLworCisJCQkJLy8gQVAgbWlnaHQgaGF2ZSBpbiBBVEVfU1RPUCBtb2RlIGR1ZSB0byBjbWQgZnJvbSBRQS4KKwkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQl7CisJCQkJCS8vIFNvbWVvbmUgaGFzIGtpbGxlZCBhdGUgZGFlbW9uIHdoaWxlIFFBIEdVSSBpcyBzdGlsbCBvcGVuLgorCQkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJBVEVTVE9QIik7CisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BUF9TVEFSVCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9SRl9XUklURV9BTEw6CisJCQl7CisJCQkJVUlOVDMyIFIxLCBSMiwgUjMsIFI0OworCQkJCVVTSE9SVCBjaGFubmVsOworCisJCQkJbWVtY3B5KCZSMSwgcFJhQ2ZnLT5kYXRhLTIsIDQpOworCQkJCW1lbWNweSgmUjIsIHBSYUNmZy0+ZGF0YSsyLCA0KTsKKwkJCQltZW1jcHkoJlIzLCBwUmFDZmctPmRhdGErNiwgNCk7CisJCQkJbWVtY3B5KCZSNCwgcFJhQ2ZnLT5kYXRhKzEwLCA0KTsKKwkJCQltZW1jcHkoJmNoYW5uZWwsIHBSYUNmZy0+ZGF0YSsxNCwgMik7CisKKwkJCQlwQWRhcHRlci0+TGF0Y2hSZlJlZ3MuUjEgPSBudG9obChSMSk7CisJCQkJcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlIyID0gbnRvaGwoUjIpOworCQkJCXBBZGFwdGVyLT5MYXRjaFJmUmVncy5SMyA9IG50b2hsKFIzKTsKKwkJCQlwQWRhcHRlci0+TGF0Y2hSZlJlZ3MuUjQgPSBudG9obChSNCk7CisJCQkJcEFkYXB0ZXItPkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBudG9ocyhjaGFubmVsKTsKKworCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWRhcHRlciwgcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlIxKTsKKwkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkYXB0ZXIsIHBBZGFwdGVyLT5MYXRjaFJmUmVncy5SMik7CisJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZGFwdGVyLCBwQWRhcHRlci0+TGF0Y2hSZlJlZ3MuUjMpOworCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWRhcHRlciwgcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlI0KTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX1JGX1dSSVRFX0FMTFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfUkZfV1JJVEVfQUxMIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKyAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0UyUFJPTV9SRUFEMTY6CisJCQl7CisJCQkJVVNIT1JUCW9mZnNldCwgdmFsdWUsIHRtcDsKKworCQkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCQkvKiAidG1wIiBpcyBleHBlY2lhbGx5IGZvciBzb21lIGNvbXBpbGVycy4uLiAqLworCQkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZGFwdGVyLCBvZmZzZXQsIHRtcCk7CisJCQkJdmFsdWUgPSB0bXA7CisJCQkJdmFsdWUgPSBodG9ucyh2YWx1ZSk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkVFUFJPTSBSZWFkIG9mZnNldCA9IDB4JTA0eCwgdmFsdWUgPSAweCUwNHhcbiIsIG9mZnNldCwgdmFsdWUpKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDQpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJbWVtY3B5KHBSYUNmZy0+ZGF0YSwgJnZhbHVlLCAyKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInNpemVvZihzdHJ1Y3QgYXRlX3JhY2ZnaGRyKSA9ICVkXG4iLCBzaXplb2Yoc3RydWN0IGF0ZV9yYWNmZ2hkcikpKTsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfRTJQUk9NX1JFQUQxNlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfRTJQUk9NX1JFQUQxNiBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisgICAgICAgICAgIAl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEUxNjoKKwkJCXsKKwkJCQlVU0hPUlQJb2Zmc2V0LCB2YWx1ZTsKKworCQkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCQltZW1jcHkoJnZhbHVlLCBwUmFDZmctPmRhdGEsIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCVJUMjh4eF9FRVBST01fV1JJVEUxNihwQWRhcHRlciwgb2Zmc2V0LCB2YWx1ZSk7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEUxNlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfRTJQUk9NX1dSSVRFMTYgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfRTJQUk9NX1JFQURfQUxMOgorCQkJeworCQkJCVVTSE9SVCBidWZmZXJbRUVQUk9NX1NJWkUvMl07CisKKwkJCQlydF9lZV9yZWFkX2FsbChwQWRhcHRlciwoVVNIT1JUICopYnVmZmVyKTsKKwkJCQltZW1jcHlfZXhzKHBBZGFwdGVyLCBwUmFDZmctPmRhdGEsIChVQ0hBUiAqKWJ1ZmZlciwgRUVQUk9NX1NJWkUpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMitFRVBST01fU0laRSk7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfRTJQUk9NX1JFQURfQUxMXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9FMlBST01fUkVBRF9BTEwgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfRTJQUk9NX1dSSVRFX0FMTDoKKwkJCXsKKwkJCQlVU0hPUlQgYnVmZmVyW0VFUFJPTV9TSVpFLzJdOworCisJCQkJTmRpc1plcm9NZW1vcnkoKFVDSEFSICopYnVmZmVyLCBFRVBST01fU0laRSk7CisJCQkJbWVtY3B5X2V4cyhwQWRhcHRlciwgKFVDSEFSICopYnVmZmVyLCAoVUNIQVIgKikmcFJhQ2ZnLT5zdGF0dXMsIEVFUFJPTV9TSVpFKTsKKwkJCQlydF9lZV93cml0ZV9hbGwocEFkYXB0ZXIsKFVTSE9SVCAqKWJ1ZmZlcik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEVfQUxMXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJBQ0ZHX0NNRF9FMlBST01fV1JJVEVfQUxMIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfSU9fUkVBRDoKKwkJCXsKKwkJCQlVSU5UMzIJb2Zmc2V0OworCQkJCVVJTlQzMgl2YWx1ZTsKKworCQkJCW1lbWNweSgmb2Zmc2V0LCAmcFJhQ2ZnLT5zdGF0dXMsIDQpOworCQkJCW9mZnNldCA9IG50b2hsKG9mZnNldCk7CisKKwkJCQkvLyBXZSBkbyBub3QgbmVlZCB0aGUgYmFzZSBhZGRyZXNzLgorCQkJCS8vIFNvIGp1c3QgZXh0cmFjdCB0aGUgb2Zmc2V0IG91dC4KKwkJCQlvZmZzZXQgJj0gMHgwMDAwRkZGRjsKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgb2Zmc2V0LCAmdmFsdWUpOworCQkJCXZhbHVlID0gaHRvbmwodmFsdWUpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoNik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQltZW1jcHkocFJhQ2ZnLT5kYXRhLCAmdmFsdWUsIDQpOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0lPX1JFQURcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0lPX1JFQUQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfSU9fV1JJVEU6CisJCQl7CisJCQkJVUlOVDMyCW9mZnNldCwgdmFsdWU7CisKKwkJCQltZW1jcHkoJm9mZnNldCwgcFJhQ2ZnLT5kYXRhLTIsIDQpOworCQkJCW1lbWNweSgmdmFsdWUsIHBSYUNmZy0+ZGF0YSsyLCA0KTsKKworCQkJCW9mZnNldCA9IG50b2hsKG9mZnNldCk7CisKKwkJCQkvLyBXZSBkbyBub3QgbmVlZCB0aGUgYmFzZSBhZGRyZXNzLgorCQkJCS8vIFNvIGp1c3QgZXh0cmFjdCBvdXQgdGhlIG9mZnNldC4KKwkJCQlvZmZzZXQgJj0gMHgwMDAwRkZGRjsKKwkJCQl2YWx1ZSA9IG50b2hsKHZhbHVlKTsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9JT19XUklURTogb2Zmc2V0ID0gJXgsIHZhbHVlID0gJXhcbiIsIG9mZnNldCwgdmFsdWUpKTsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIG9mZnNldCwgdmFsdWUpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfSU9fV1JJVEVcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0lPX1dSSVRFIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0lPX1JFQURfQlVMSzoKKwkJCXsKKwkJCQlVSU5UMzIJb2Zmc2V0OworCQkJCVVTSE9SVAlsZW47CisKKwkJCQltZW1jcHkoJm9mZnNldCwgJnBSYUNmZy0+c3RhdHVzLCA0KTsKKwkJCQlvZmZzZXQgPSBudG9obChvZmZzZXQpOworCisJCQkJLy8gV2UgZG8gbm90IG5lZWQgdGhlIGJhc2UgYWRkcmVzcy4KKwkJCQkvLyBTbyBqdXN0IGV4dHJhY3QgdGhlIG9mZnNldC4KKwkJCQlvZmZzZXQgJj0gMHgwMDAwRkZGRjsKKwkJCQltZW1jcHkoJmxlbiwgcFJhQ2ZnLT5kYXRhKzIsIDIpOworCQkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCQlpZiAobGVuID4gMzcxKQorCQkJCXsKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJsZW4gaXMgdG9vIGxhcmdlLCBtYWtlIGl0IHNtYWxsZXJcbiIpKTsKKwkJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygxKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJUlRNUF9JT19SRUFEX0JVTEsocEFkYXB0ZXIsIHBSYUNmZy0+ZGF0YSwgKFVDSEFSICopb2Zmc2V0LCBsZW4qNCk7Ly8gdW5pdCBpbiBmb3VyIGJ5dGVzCisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyK2xlbio0KTsvLyB1bml0IGluIGZvdXIgYnl0ZXMKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9JT19SRUFEX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0lPX1JFQURfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9CQlBfUkVBRDg6CisJCQl7CisJCQkJVVNIT1JUCW9mZnNldDsKKwkJCQlVQ0hBUgl2YWx1ZTsKKworCQkJCXZhbHVlID0gMDsKKwkJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisKKwkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQl7CisJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBvZmZzZXQsICAmdmFsdWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIG9mZnNldCwgICZ2YWx1ZSk7CisJCQkJfQorCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDMpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJcFJhQ2ZnLT5kYXRhWzBdID0gdmFsdWU7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJCUCB2YWx1ZSA9ICV4XG4iLCB2YWx1ZSkpOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0JCUF9SRUFEOFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQkJQX1JFQUQ4IGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJBQ0ZHX0NNRF9CQlBfV1JJVEU4OgorCQkJeworCQkJCVVTSE9SVAlvZmZzZXQ7CisJCQkJVUNIQVIJdmFsdWU7CisKKwkJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQkJbWVtY3B5KCZ2YWx1ZSwgcFJhQ2ZnLT5kYXRhLCAxKTsKKworCQkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJCXsKKwkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBvZmZzZXQsICB2YWx1ZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIG9mZnNldCwgIHZhbHVlKTsKKwkJCQl9CisKKwkJCQlpZiAoKG9mZnNldCA9PSBCQlBfUjEpIHx8IChvZmZzZXQgPT0gQkJQX1IzKSkKKwkJCQl7CisJCQkJCVN5bmNUeFJ4Q29uZmlnKHBBZGFwdGVyLCBvZmZzZXQsIHZhbHVlKTsKKwkJCQl9CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9CQlBfV1JJVEU4XG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9CQlBfV1JJVEU4IGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0JCUF9SRUFEX0FMTDoKKwkJCXsKKwkJCQlVU0hPUlQgajsKKworCQkJCWZvciAoaiA9IDA7IGogPCAxMzc7IGorKykKKwkJCQl7CisJCQkJCXBSYUNmZy0+ZGF0YVtqXSA9IDA7CisKKwkJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJCXsKKwkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBqLCAgJnBSYUNmZy0+ZGF0YVtqXSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGosICAmcFJhQ2ZnLT5kYXRhW2pdKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrMTM3KTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0JCUF9SRUFEX0FMTFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQkJQX1JFQURfQUxMIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0UyUFJPTV9SRUFEX0JVTEs6CisJCXsKKwkJCVVTSE9SVCBvZmZzZXQ7CisJCQlVU0hPUlQgbGVuOworCQkJVVNIT1JUIGJ1ZmZlcltFRVBST01fU0laRS8yXTsKKworCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisJCQlydF9lZV9yZWFkX2FsbChwQWRhcHRlciwoVVNIT1JUICopYnVmZmVyKTsKKwkJCWlmIChvZmZzZXQgKyBsZW4gPD0gRUVQUk9NX1NJWkUpCisJCQkJbWVtY3B5X2V4cyhwQWRhcHRlciwgcFJhQ2ZnLT5kYXRhLCAoVUNIQVIgKilidWZmZXIrb2Zmc2V0LCBsZW4pOworCQkJZWxzZQorCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImV4Y2VlZCBFRVBST00gc2l6ZVxuIikpOworCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrbGVuKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX0UyUFJPTV9SRUFEX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1JFQURfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCX0KKworCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1dSSVRFX0JVTEs6CisJCXsKKwkJCVVTSE9SVCBvZmZzZXQ7CisJCQlVU0hPUlQgbGVuOworCQkJVVNIT1JUIGJ1ZmZlcltFRVBST01fU0laRS8yXTsKKworCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisJCQlydF9lZV9yZWFkX2FsbChwQWRhcHRlciwoVVNIT1JUICopYnVmZmVyKTsKKwkJCW1lbWNweV9leHMocEFkYXB0ZXIsIChVQ0hBUiAqKWJ1ZmZlciArIG9mZnNldCwgKFVDSEFSICopcFJhQ2ZnLT5kYXRhICsgMiwgbGVuKTsKKwkJCXJ0X2VlX3dyaXRlX2FsbChwQWRhcHRlciwoVVNIT1JUICopYnVmZmVyKTsKKworCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1dSSVRFX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1dSSVRFX0JVTEsgaXMgZG9uZSAhXG4iKSk7CisJCQl9CisKKwkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0lPX1dSSVRFX0JVTEs6CisJCXsKKwkJCVVJTlQzMiBvZmZzZXQsIGksIHZhbHVlOworCQkJVVNIT1JUIGxlbjsKKworCQkJbWVtY3B5KCZvZmZzZXQsICZwUmFDZmctPnN0YXR1cywgNCk7CisJCQlvZmZzZXQgPSBudG9obChvZmZzZXQpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSsyLCAyKTsKKwkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkKKwkJCXsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAoVUNIQVIgKikmdmFsdWUsIHBSYUNmZy0+ZGF0YSs0K2ksIDQpOworCQkJCXByaW50aygiV3JpdGUgJXggJXhcbiIsIG9mZnNldCArIGksIHZhbHVlKTsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIChvZmZzZXQgK2kpICYgMHhmZmZmLCB2YWx1ZSk7CisJCQl9CisKKwkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX0lPX1dSSVRFX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJBQ0ZHX0NNRF9BVEVfSU9fV1JJVEVfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCX0KKworCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfQkJQX1JFQURfQlVMSzoKKwkJeworCQkJVVNIT1JUIG9mZnNldDsKKwkJCVVTSE9SVCBsZW47CisJCQlVU0hPUlQgajsKKworCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisKKwkJCWZvciAoaiA9IG9mZnNldDsgaiA8IChvZmZzZXQrbGVuKTsgaisrKQorCQkJeworCQkJCXBSYUNmZy0+ZGF0YVtqIC0gb2Zmc2V0XSA9IDA7CisKKwkJCQlpZiAocEFkYXB0ZXItPmF0ZS5Nb2RlID09IEFURV9TVE9QKQorCQkJCXsKKwkJCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBqLCAgJnBSYUNmZy0+ZGF0YVtqIC0gb2Zmc2V0XSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBqLCAgJnBSYUNmZy0+ZGF0YVtqIC0gb2Zmc2V0XSk7CisJCQkJfQorCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrbGVuKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9CQlBfUkVBRF9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX0JCUF9SRUFEX0JVTEsgaXMgZG9uZSAhXG4iKSk7CisJCQl9CisKKwkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0JCUF9XUklURV9CVUxLOgorCQl7CisJCQlVU0hPUlQgb2Zmc2V0OworCQkJVVNIT1JUIGxlbjsKKwkJCVVTSE9SVCBqOworCQkJVUNIQVIgKnZhbHVlOworCisJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQltZW1jcHkoJmxlbiwgcFJhQ2ZnLT5kYXRhLCAyKTsKKwkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCWZvciAoaiA9IG9mZnNldDsgaiA8IChvZmZzZXQrbGVuKTsgaisrKQorCQkJeworCQkJCXZhbHVlID0gcFJhQ2ZnLT5kYXRhICsgMiArIChqIC0gb2Zmc2V0KTsKKwkJCQlpZiAocEFkYXB0ZXItPmF0ZS5Nb2RlID09IEFURV9TVE9QKQorCQkJCXsKKwkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgaiwgICp2YWx1ZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgaiwgICp2YWx1ZSk7CisJCQkJfQorCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX0JCUF9XUklURV9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX0JCUF9XUklURV9CVUxLIGlzIGRvbmUgIVxuIikpOworCQkJfQorCQl9CisJCQlicmVhazsKKworI2lmZGVmIENPTkZJR19SQUxJTktfUlQzMDUyCisJCWNhc2UgUkFDRkdfQ01EX0FURV9SRl9SRUFEX0JVTEs6CisJCXsKKwkJCVVTSE9SVCBvZmZzZXQ7CisJCQlVU0hPUlQgbGVuOworCQkJVVNIT1JUIGo7CisKKwkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCW1lbWNweSgmbGVuLCBwUmFDZmctPmRhdGEsIDIpOworCQkJbGVuID0gbnRvaHMobGVuKTsKKworCQkJZm9yIChqID0gb2Zmc2V0OyBqIDwgKG9mZnNldCtsZW4pOyBqKyspCisJCQl7CisJCQkJcFJhQ2ZnLT5kYXRhW2ogLSBvZmZzZXRdID0gMDsKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWRhcHRlciwgaiwgICZwUmFDZmctPmRhdGFbaiAtIG9mZnNldF0pOworCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrbGVuKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9SRl9SRUFEX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfUkZfUkVBRF9CVUxLIGlzIGRvbmUgIVxuIikpOworCQkJfQorCisJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9SRl9XUklURV9CVUxLOgorCQl7CisJCQlVU0hPUlQgb2Zmc2V0OworCQkJVVNIT1JUIGxlbjsKKwkJCVVTSE9SVCBqOworCQkJVUNIQVIgKnZhbHVlOworCisJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQltZW1jcHkoJmxlbiwgcFJhQ2ZnLT5kYXRhLCAyKTsKKwkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCWZvciAoaiA9IG9mZnNldDsgaiA8IChvZmZzZXQrbGVuKTsgaisrKQorCQkJeworCQkJCXZhbHVlID0gcFJhQ2ZnLT5kYXRhICsgMiArIChqIC0gb2Zmc2V0KTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkYXB0ZXIsIGosICAqdmFsdWUpOworCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1JGX1dSSVRFX0JVTEtcbiIpKTsKKyAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfUkZfV1JJVEVfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCX0KKworCQl9CisJCQlicmVhazsKKyNlbmRpZgorCisKKwkJY2FzZSBSQUNGR19DTURfR0VUX05PSVNFX0xFVkVMOgorCQkJeworCQkJCVVDSEFSCWNoYW5uZWw7CisJCQkJSU5UMzIgICBidWZmZXJbM11bMTBdOy8qIDMgOiBSeFBhdGggOyAxMCA6IG5vLiBvZiBwZXIgcnNzaSBzYW1wbGVzICovCisKKwkJCQljaGFubmVsID0gKG50b2hzKHBSYUNmZy0+c3RhdHVzKSAmIDB4MDBGRik7CisJCQkJQ2FsTm9pc2VMZXZlbChwQWRhcHRlciwgY2hhbm5lbCwgYnVmZmVyKTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAoVUNIQVIgKilwUmFDZmctPmRhdGEsIChVQ0hBUiAqKSYoYnVmZmVyWzBdWzBdKSwgKHNpemVvZihJTlQzMikqMyoxMCkpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMiArIChzaXplb2YoSU5UMzIpKjMqMTApKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9HRVRfTk9JU0VfTEVWRUxcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0dFVF9OT0lTRV9MRVZFTCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9HRVRfQ09VTlRFUjoKKwkJCXsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzBdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5VMk0sIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLk90aGVyRGF0YSwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs4XSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuQmVhY29uLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzEyXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuT3RoZXJDb3VudCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsxNl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlR4QWMwLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzIwXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVHhBYzEsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMjRdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5UeEFjMiwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsyOF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlR4QWMzLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzMyXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVHhIQ0NBLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzM2XSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVHhNZ210LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzQwXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuUlNTSTAsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNDRdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5SU1NJMSwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0OF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlJTU0kyLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzUyXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuU05SMCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs1Nl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlNOUjEsIDQpOworCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKzYwKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9HRVRfQ09VTlRFUlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfR0VUX0NPVU5URVIgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQ0xFQVJfQ09VTlRFUjoKKwkJCXsKKwkJCQlwQWRhcHRlci0+YXRlLlUyTSA9IDA7CisJCQkJcEFkYXB0ZXItPmF0ZS5PdGhlckRhdGEgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuQmVhY29uID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLk90aGVyQ291bnQgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhBYzAgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhBYzEgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhBYzIgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhBYzMgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhIQ0NBID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLlR4TWdtdCA9IDA7CisJCQkJcEFkYXB0ZXItPmF0ZS5UeERvbmVDb3VudCA9IDA7CisKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQ0xFQVJfQ09VTlRFUlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQ0xFQVJfQ09VTlRFUiBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX1RYX1NUQVJUOgorCQkJeworCQkJCVVTSE9SVCAqcDsKKwkJCQlVU0hPUlQJZXJyID0gMTsKKwkJCQlVQ0hBUiAgIEJicDIyVmFsdWUgPSAwLCBCYnAyNFZhbHVlID0gMDsKKworCQkJCWlmICgocEFkYXB0ZXItPmF0ZS5UeFN0YXR1cyAhPSAwKSAmJiAocEFkYXB0ZXItPmF0ZS5Nb2RlICYgQVRFX1RYRlJBTUUpKQorCQkJCXsKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBdGUgVHggaXMgYWxyZWFkeSBydW5uaW5nLCB0byBydW4gbmV4dCBUeCwgeW91IG11c3Qgc3RvcCBpdCBmaXJzdFxuIikpOworCQkJCQllcnIgPSAyOworCQkJCQlnb3RvIFRYX1NUQVJUX0VSUk9SOworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkYXB0ZXItPmF0ZS5UeFN0YXR1cyAhPSAwKSAmJiAhKHBBZGFwdGVyLT5hdGUuTW9kZSAmIEFURV9UWEZSQU1FKSkKKwkJCQl7CisJCQkJCWludCBpID0gMDsKKworCQkJCQl3aGlsZSAoKGkrKyA8IDEwKSAmJiAocEFkYXB0ZXItPmF0ZS5UeFN0YXR1cyAhPSAwKSkKKwkJCQkJeworCQkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCQkJfQorCisJCQkJCS8vIGZvcmNlIGl0IHRvIHN0b3AKKwkJCQkJcEFkYXB0ZXItPmF0ZS5UeFN0YXR1cyA9IDA7CisJCQkJCXBBZGFwdGVyLT5hdGUuVHhEb25lQ291bnQgPSAwOworCQkJCQkvL3BBZGFwdGVyLT5hdGUuUmVwZWF0ID0gMDsKKwkJCQkJcEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CisJCQkJfQorCisJCQkJLy8gSWYgcFJhQ2ZnLT5sZW5ndGggPT0gMCwgdGhpcyAiUkFDRkdfQ01EX1RYX1NUQVJUIiBpcyBmb3IgQ2FycmllciB0ZXN0IG9yIENhcnJpZXIgU3VwcHJlc3Npb24uCisJCQkJaWYgKG50b2hzKHBSYUNmZy0+bGVuZ3RoKSAhPSAwKQorCQkJCXsKKwkJCQkJLy8gR2V0IGZyYW1lIGluZm8KKyNpZmRlZiBSVDI4NzAKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZGFwdGVyLT5hdGUuVHhJbmZvLCBwUmFDZmctPmRhdGEgLSAyLCA0KTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQkJCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpICZwQWRhcHRlci0+YXRlLlR4SW5mbywgVFlQRV9UWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPmF0ZS5UeFdJLCBwUmFDZmctPmRhdGEgKyAyLCAxNik7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJCQlSVE1QV0lFbmRpYW5DaGFuZ2UoKFBVQ0hBUikmcEFkYXB0ZXItPmF0ZS5UeFdJLCBUWVBFX1RYV0kpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPmF0ZS5UeENvdW50LCBwUmFDZmctPmRhdGEgKyAxOCwgNCk7CisJCQkJCXBBZGFwdGVyLT5hdGUuVHhDb3VudCA9IG50b2hsKHBBZGFwdGVyLT5hdGUuVHhDb3VudCk7CisKKwkJCQkJcCA9IChVU0hPUlQgKikoJnBSYUNmZy0+ZGF0YVsyMl0pOworCQkJCQkvL3AgPSBwUmFDZmctPmRhdGEgKyAyMjsKKwkJCQkJLy8gYWx3YXlzIHVzZSBRSURfQUNfQkUKKwkJCQkJcEFkYXB0ZXItPmF0ZS5RSUQgPSAwOworCQkJCQlwID0gKFVTSE9SVCAqKSgmcFJhQ2ZnLT5kYXRhWzI0XSk7CisJCQkJCS8vcCA9IHBSYUNmZy0+ZGF0YSArIDI0OworCQkJCQlwQWRhcHRlci0+YXRlLkhMZW4gPSBudG9ocygqcCk7CisKKwkJCQkJaWYgKHBBZGFwdGVyLT5hdGUuSExlbiA+IDMyKQorCQkJCQl7CisJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoInBBZGFwdGVyLT5hdGUuSExlbiA+IDMyXG4iKSk7CisJCQkJCQllcnIgPSAzOworCQkJCQkJZ290byBUWF9TVEFSVF9FUlJPUjsKKwkJCQkJfQorCisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+YXRlLkhlYWRlciwgcFJhQ2ZnLT5kYXRhICsgMjYsIHBBZGFwdGVyLT5hdGUuSExlbik7CisKKworCQkJCQlwQWRhcHRlci0+YXRlLlBMZW4gPSBudG9ocyhwUmFDZmctPmxlbmd0aCkgLSAocEFkYXB0ZXItPmF0ZS5ITGVuICsgMjgpOworCisJCQkJCWlmIChwQWRhcHRlci0+YXRlLlBMZW4gPiAzMikKKwkJCQkJeworCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJwQWRhcHRlci0+YXRlLlBMZW4gPiAzMlxuIikpOworCQkJCQkJZXJyID0gNDsKKwkJCQkJCWdvdG8gVFhfU1RBUlRfRVJST1I7CisJCQkJCX0KKworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPmF0ZS5QYXR0ZXJuLCBwUmFDZmctPmRhdGEgKyAyNiArIHBBZGFwdGVyLT5hdGUuSExlbiwgcEFkYXB0ZXItPmF0ZS5QTGVuKTsKKwkJCQkJcEFkYXB0ZXItPmF0ZS5ETGVuID0gcEFkYXB0ZXItPmF0ZS5UeFdJLk1QRFV0b3RhbEJ5dGVDb3VudCAtIHBBZGFwdGVyLT5hdGUuSExlbjsKKwkJCQl9CisKKwkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1IyMiwgJkJicDIyVmFsdWUpOworCisJCQkJc3dpdGNoIChCYnAyMlZhbHVlKQorCQkJCXsKKwkJCQkJY2FzZSBCQlAyMl9UWEZSQU1FOgorCQkJCQkJeworCQkJCQkJCWlmIChwQWRhcHRlci0+YXRlLlR4Q291bnQgPT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJfQorCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU1RBUlQgVFhGUkFNRVxuIikpOworCQkJCQkJCXBBZGFwdGVyLT5hdGUuYlFBVHhTdGFydCA9IFRSVUU7CisJCQkJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhGUkFNRSIpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBCQlAyMl9UWENPTlRfT1JfQ0FSUlNVUFA6CisJCQkJCQl7CisJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQlAyMl9UWENPTlRfT1JfQ0FSUlNVUFBcbiIpKTsKKwkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgMjQsICZCYnAyNFZhbHVlKTsKKworCQkJCQkJCXN3aXRjaCAoQmJwMjRWYWx1ZSkKKwkJCQkJCQl7CisJCQkJCQkJCWNhc2UgQkJQMjRfVFhDT05UOgorCQkJCQkJCQkJeworCQkJCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU1RBUlQgVFhDT05UXG4iKSk7CisJCQkJCQkJCQkJcEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID0gVFJVRTsKKwkJCQkJCQkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJUWENPTlQiKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJCWNhc2UgQkJQMjRfQ0FSUlNVUFA6CisJCQkJCQkJCQl7CisJCQkJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEFSVCBUWENBUlJTVVBQXG4iKSk7CisJCQkJCQkJCQkJcEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID0gVFJVRTsKKwkJCQkJCQkJCQlwQWRhcHRlci0+YXRlLk1vZGUgfD0gQVRFX1RYQ0FSUlNVUFA7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlicmVhazsKKworCQkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQkJeworCQkJCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiVW5rbm93biBTdGFydCBUWCBzdWJ0eXBlICEiKSk7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIEJCUDIyX1RYQ0FSUjoKKwkJCQkJCXsKKwkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQVJUIFRYQ0FSUlxuIikpOworCQkJCQkJCXBBZGFwdGVyLT5hdGUuYlFBVHhTdGFydCA9IFRSVUU7CisJCQkJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhDQVJSIik7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJeworCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiVW5rbm93biBTdGFydCBUWCBzdWJ0eXBlICEiKSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAocEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCQkJeworCQkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJICAgICAgICAgICAgCXsKKwkgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIHdhcyBmYWlsZWQgaW4gY2FzZSBSQUNGR19DTURfVFhfU1RBUlRcbiIpKTsKKwkgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisJICAgICAgICAgICAgCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfVFhfU1RBUlQgaXMgZG9uZSAhXG4iKSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCitUWF9TVEFSVF9FUlJPUjoKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKGVycik7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX1RYX1NUQVJUXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImZlZWRiYWNrIG9mIFRYX1NUQVJUX0VSUk9SIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0dFVF9UWF9TVEFUVVM6CisJCQl7CisJCQkJVUlOVDMyIGNvdW50OworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoNik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQljb3VudCA9IGh0b25sKHBBZGFwdGVyLT5hdGUuVHhEb25lQ291bnQpOworCQkJCU5kaXNNb3ZlTWVtb3J5KHBSYUNmZy0+ZGF0YSwgJmNvdW50LCA0KTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfR0VUX1RYX1NUQVRVU1xuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfR0VUX1RYX1NUQVRVUyBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9UWF9TVE9QOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX1RYX1NUT1BcbiIpKTsKKworCQkJCVNldF9BVEVfUHJvYyhwQWRhcHRlciwgIlRYU1RPUCIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfVFhfU1RPUFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfVFhfU1RPUCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9SWF9TVEFSVDoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9SWF9TVEFSVFxuIikpOworCisJCQkJcEFkYXB0ZXItPmF0ZS5iUUFSeFN0YXJ0ID0gVFJVRTsKKwkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJSWEZSQU1FIik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9SWF9TVEFSVFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfUlhfU1RBUlQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfUlhfU1RPUDoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9SWF9TVE9QXG4iKSk7CisKKwkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJSWFNUT1AiKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX1JYX1NUT1BcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX1JYX1NUT1AgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJLyogVGhlIGZvbGxvd2luZyBjYXNlcyBhcmUgZm9yIG5ldyBBVEUgR1VJKG5vdCBRQSkuICovCisJCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ0FSUklFUjoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ0FSUklFUlxuIikpOworCisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhDQVJSIik7CisKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NBUlJJRVJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9DQVJSSUVSIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9DT05UOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9DT05UXG4iKSk7CisKKwkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJUWENPTlQiKTsKKworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ09OVFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NPTlQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0ZSQU1FOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9GUkFNRVxuIikpOworCisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhGUkFNRSIpOworCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid3JxLT51LmRhdGEubGVuZ3RoID0gJWRcbiIsIHdycS0+dS5kYXRhLmxlbmd0aCkpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9GUkFNRVxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NUQVJUX1RYX0ZSQU1FIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQlc6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX0JXXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCisJCQkJU2V0X0FURV9UWF9CV19Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9CV1xuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9CVyBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMDoKKwkJCXsKKwkJCQlTSE9SVCAgICB2YWx1ZSA9IDA7CisJCQkJVUNIQVIgICAgc3RyW0xFTl9PRl9BUkddOworCisJCQkJTmRpc1plcm9NZW1vcnkoc3RyLCBMRU5fT0ZfQVJHKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfVFhfUE9XRVIwXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfUE9XRVIwX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjAgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjE6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMVxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjFcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfVFhfUE9XRVIxIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfRlJFUV9PRkZTRVQ6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX0ZSRVFfT0ZGU0VUXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfRlJFUU9GRlNFVF9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9GUkVRX09GRlNFVFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9GUkVRX09GRlNFVCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfR0VUX1NUQVRJU1RJQ1M6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX0dFVF9TVEFUSVNUSUNTXG4iKSk7CisKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzBdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5UeERvbmVDb3VudCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0XSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbOF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnUuTG93UGFydCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsxMl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJUU1N1Y2Nlc3NDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMTZdLCAoVUNIQVIgKikmcEFkYXB0ZXItPldsYW5Db3VudGVycy5SVFNGYWlsdXJlQ291bnQudS5Mb3dQYXJ0LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzIwXSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuUmVjZWl2ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzI0XSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMjhdLCAoVUNIQVIgKikmcEFkYXB0ZXItPkNvdW50ZXJzODAyMy5SeE5vQnVmZmVyLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzMyXSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRnJhbWVEdXBsaWNhdGVDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMzZdLCAoVUNIQVIgKikmcEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLk9uZVNlY0ZhbHNlQ0NBQ250LCA0KTsKKworCQkJCWlmIChwQWRhcHRlci0+YXRlLlJ4QW50ZW5uYVNlbCA9PSAwKQorCQkJCXsKKwkJCQkJSU5UMzIgUlNTSTAgPSAwOworCQkJCQlJTlQzMiBSU1NJMSA9IDA7CisJCQkJCUlOVDMyIFJTU0kyID0gMDsKKworCQkJCQlSU1NJMCA9IChJTlQzMikocEFkYXB0ZXItPmF0ZS5MYXN0UnNzaTAgLSBwQWRhcHRlci0+QmJwUnNzaVRvRGJtRGVsdGEpOworCQkJCQlSU1NJMSA9IChJTlQzMikocEFkYXB0ZXItPmF0ZS5MYXN0UnNzaTEgLSBwQWRhcHRlci0+QmJwUnNzaVRvRGJtRGVsdGEpOworCQkJCQlSU1NJMiA9IChJTlQzMikocEFkYXB0ZXItPmF0ZS5MYXN0UnNzaTIgLSBwQWRhcHRlci0+QmJwUnNzaVRvRGJtRGVsdGEpOworCQkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzQwXSwgKFVDSEFSICopJlJTU0kwLCA0KTsKKwkJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0NF0sIChVQ0hBUiAqKSZSU1NJMSwgNCk7CisJCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNDhdLCAoVUNIQVIgKikmUlNTSTIsIDQpOworCQkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrNTIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlJTlQzMiBSU1NJMCA9IDA7CisKKwkJCQkJUlNTSTAgPSAoSU5UMzIpKHBBZGFwdGVyLT5hdGUuTGFzdFJzc2kwIC0gcEFkYXB0ZXItPkJicFJzc2lUb0RibURlbHRhKTsKKwkJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0MF0sIChVQ0hBUiAqKSZSU1NJMCwgNCk7CisJCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMis0NCk7CisJCQkJfQorCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9HRVRfU1RBVElTVElDU1xuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX0dFVF9TVEFUSVNUSUNTIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9SRVNFVF9DT1VOVEVSOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMTsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1JFU0VUX0NPVU5URVJcbiIpKTsKKworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9SZXNldFN0YXRDb3VudGVyX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQlwQWRhcHRlci0+YXRlLlR4RG9uZUNvdW50ID0gMDsKKworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfUkVTRVRfQ09VTlRFUlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1JFU0VUX0NPVU5URVIgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkE6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkFcbiIpKTsKKworCQkJCW1lbWNweSgoUFVDSEFSKSZ2YWx1ZSwgKFBVQ0hBUikmKHBSYUNmZy0+c3RhdHVzKSwgMik7CisJCQkJdmFsdWUgPSBudG9ocyh2YWx1ZSk7CisJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CisJCQkJU2V0X0FURV9UWF9BbnRlbm5hX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkFcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRUxfVFhfQU5URU5OQSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VMX1JYX0FOVEVOTkE6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VMX1JYX0FOVEVOTkFcbiIpKTsKKworCQkJCW1lbWNweSgoUFVDSEFSKSZ2YWx1ZSwgKFBVQ0hBUikmKHBSYUNmZy0+c3RhdHVzKSwgMik7CisJCQkJdmFsdWUgPSBudG9ocyh2YWx1ZSk7CisJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CisJCQkJU2V0X0FURV9SWF9BbnRlbm5hX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VMX1JYX0FOVEVOTkFcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRUxfUlhfQU5URU5OQSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1BSRUFNQkxFOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9QUkVBTUJMRVxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX1RYX01PREVfUHJvYyhwQWRhcHRlciwgc3RyKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfUFJFQU1CTEVcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfUFJFQU1CTEUgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9DSEFOTkVMOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9DSEFOTkVMXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfQ0hBTk5FTF9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9DSEFOTkVMXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX0NIQU5ORUwgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9BRERSMToKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIxXG4iKSk7CisKKwkJCQkvLyBBZGRyIGlzIGFuIGFycmF5IG9mIFVDSEFSLAorCQkJCS8vIHNvIG5vIG5lZWQgdG8gcGVyZm9ybSBlbmRpYW4gc3dhcC4KKwkJCQltZW1jcHkocEFkYXB0ZXItPmF0ZS5BZGRyMSwgKFBVQ0hBUikocFJhQ2ZnLT5kYXRhIC0gMiksIE1BQ19BRERSX0xFTik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIxXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIxIGlzIGRvbmUgIVxuIChBRERSMSA9ICUyWDolMlg6JTJYOiUyWDolMlg6JTJYKVxuIiwgcEFkYXB0ZXItPmF0ZS5BZGRyMVswXSwKKwkJCQkJCXBBZGFwdGVyLT5hdGUuQWRkcjFbMV0sIHBBZGFwdGVyLT5hdGUuQWRkcjFbMl0sIHBBZGFwdGVyLT5hdGUuQWRkcjFbM10sIHBBZGFwdGVyLT5hdGUuQWRkcjFbNF0sIHBBZGFwdGVyLT5hdGUuQWRkcjFbNV0pKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIyOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfQUREUjJcbiIpKTsKKworCQkJCS8vIEFkZHIgaXMgYW4gYXJyYXkgb2YgVUNIQVIsCisJCQkJLy8gc28gbm8gbmVlZCB0byBwZXJmb3JtIGVuZGlhbiBzd2FwLgorCQkJCW1lbWNweShwQWRhcHRlci0+YXRlLkFkZHIyLCAoUFVDSEFSKShwUmFDZmctPmRhdGEgLSAyKSwgTUFDX0FERFJfTEVOKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQUREUjJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfQUREUjIgaXMgZG9uZSAhXG4gKEFERFIyID0gJTJYOiUyWDolMlg6JTJYOiUyWDolMlgpXG4iLCBwQWRhcHRlci0+YXRlLkFkZHIyWzBdLAorCQkJCQkJcEFkYXB0ZXItPmF0ZS5BZGRyMlsxXSwgcEFkYXB0ZXItPmF0ZS5BZGRyMlsyXSwgcEFkYXB0ZXItPmF0ZS5BZGRyMlszXSwgcEFkYXB0ZXItPmF0ZS5BZGRyMls0XSwgcEFkYXB0ZXItPmF0ZS5BZGRyMls1XSkpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQUREUjM6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9BRERSM1xuIikpOworCisJCQkJLy8gQWRkciBpcyBhbiBhcnJheSBvZiBVQ0hBUiwKKwkJCQkvLyBzbyBubyBuZWVkIHRvIHBlcmZvcm0gZW5kaWFuIHN3YXAuCisJCQkJbWVtY3B5KHBBZGFwdGVyLT5hdGUuQWRkcjMsIChQVUNIQVIpKHBSYUNmZy0+ZGF0YSAtIDIpLCBNQUNfQUREUl9MRU4pOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9BRERSM1xuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9BRERSMyBpcyBkb25lICFcbiAoQUREUjMgPSAlMlg6JTJYOiUyWDolMlg6JTJYOiUyWClcbiIsIHBBZGFwdGVyLT5hdGUuQWRkcjNbMF0sCisJCQkJCQlwQWRhcHRlci0+YXRlLkFkZHIzWzFdLCBwQWRhcHRlci0+YXRlLkFkZHIzWzJdLCBwQWRhcHRlci0+YXRlLkFkZHIzWzNdLCBwQWRhcHRlci0+YXRlLkFkZHIzWzRdLCBwQWRhcHRlci0+YXRlLkFkZHIzWzVdKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9SQVRFOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9SQVRFXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfTUNTX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1JBVEVcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfUkFURSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0xFTjoKKwkJCXsKKwkJCQlTSE9SVCAgICB2YWx1ZSA9IDA7CisJCQkJVUNIQVIgICAgc3RyW0xFTl9PRl9BUkddOworCisJCQkJTmRpc1plcm9NZW1vcnkoc3RyLCBMRU5fT0ZfQVJHKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfVFhfRlJBTUVfTEVOXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfTEVOR1RIX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0xFTlxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9MRU4gaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9DT1VOVDoKKwkJCXsKKwkJCQlVU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0NPVU5UXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXsKKwkJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CisJCQkJCVNldF9BVEVfVFhfQ09VTlRfUHJvYyhwQWRhcHRlciwgc3RyKTsKKwkJCQl9CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0NPVU5UXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0NPVU5UIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVF9SWF9GUkFNRToKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9SWF9TVEFSVFxuIikpOworCisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiUlhGUkFNRSIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfUlhfU1RBUlRcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX1JYX1NUQVJUIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorICAgIEFTU0VSVChwUmFDZmcgIT0gTlVMTCk7CisgICAgaWYgKHBSYUNmZyAhPSBOVUxMKQorICAgIHsKKyAgICBrZnJlZShwUmFDZmcpOworICAgIH0KKwlyZXR1cm47Cit9CisKK1ZPSUQgQnViYmxlU29ydChJTlQzMiBuLCBJTlQzMiBhW10pCit7CisJSU5UMzIgaywgaiwgdGVtcDsKKworCWZvciAoayA9IG4tMTsgIGs+MDsgIGstLSkKKwl7CisJCWZvciAoaiA9IDA7IGo8azsgaisrKQorCQl7CisJCQlpZihhW2pdID4gYVtqKzFdKQorCQkJeworCQkJCXRlbXAgPSBhW2pdOworCQkJCWFbal09YVtqKzFdOworCQkJCWFbaisxXT10ZW1wOworCQkJfQorCQl9CisJfQorfQorCitWT0lEIENhbE5vaXNlTGV2ZWwoUFJUTVBfQURBUFRFUiBwQWQsIFVDSEFSIGNoYW5uZWwsIElOVDMyIFJTU0lbM11bMTBdKQoreworCUlOVDMyCQlSU1NJMCwgUlNTSTEsIFJTU0kyOworIAlDSEFSCQlSc3NpME9mZnNldCwgUnNzaTFPZmZzZXQsIFJzc2kyT2Zmc2V0OworCVVDSEFSCQlCYnBSNTBSc3NpMCA9IDAsIEJicFI1MVJzc2kxID0gMCwgQmJwUjUyUnNzaTIgPSAwOworCVVDSEFSCQlPcmdfQkJQNjZ2YWx1ZSA9IDAsIE9yZ19CQlA2OXZhbHVlID0gMCwgT3JnX0JCUDcwdmFsdWUgPSAwLCBkYXRhID0gMDsKKwlVU0hPUlQJCUxOQV9HYWluID0gMDsKKwlJTlQzMiAgICAgICBqID0gMDsKKwlVQ0hBUgkJT3JnX0NoYW5uZWwgPSBwQWQtPmF0ZS5DaGFubmVsOworCVVTSE9SVAkgICAgR2FpblZhbHVlID0gMCwgT2Zmc2V0VmFsdWUgPSAwOworCisJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCAmT3JnX0JCUDY2dmFsdWUpOworCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgJk9yZ19CQlA2OXZhbHVlKTsKKwlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsICZPcmdfQkJQNzB2YWx1ZSk7CisKKwkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkvLyBSZWFkIHRoZSB2YWx1ZSBvZiBMTkEgZ2FpbiBhbmQgUnNzaSBvZmZzZXQKKwkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9MTkFfT0ZGU0VULCBHYWluVmFsdWUpOworCisJLy8gZm9yIE5vaXNlIExldmVsCisJaWYgKGNoYW5uZWwgPD0gMTQpCisJeworCQlMTkFfR2FpbiA9IEdhaW5WYWx1ZSAmIDB4MDBGRjsKKworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9SU1NJX0JHX09GRlNFVCwgT2Zmc2V0VmFsdWUpOworCQlSc3NpME9mZnNldCA9IE9mZnNldFZhbHVlICYgMHgwMEZGOworCQlSc3NpMU9mZnNldCA9IChPZmZzZXRWYWx1ZSAmIDB4RkYwMCkgPj4gODsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAoRUVQUk9NX1JTU0lfQkdfT0ZGU0VUICsgMikvKiAweDQ4ICovLCBPZmZzZXRWYWx1ZSk7CisJCVJzc2kyT2Zmc2V0ID0gT2Zmc2V0VmFsdWUgJiAweDAwRkY7CisJfQorCWVsc2UKKwl7CisJCUxOQV9HYWluID0gKEdhaW5WYWx1ZSAmIDB4RkYwMCkgPj4gODsKKworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9SU1NJX0FfT0ZGU0VULCBPZmZzZXRWYWx1ZSk7CisJCVJzc2kwT2Zmc2V0ID0gT2Zmc2V0VmFsdWUgJiAweDAwRkY7CisJCVJzc2kxT2Zmc2V0ID0gKE9mZnNldFZhbHVlICYgMHhGRjAwKSA+PiA4OworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIChFRVBST01fUlNTSV9BX09GRlNFVCArIDIpLyogMHg0QyAqLywgT2Zmc2V0VmFsdWUpOworCQlSc3NpMk9mZnNldCA9IE9mZnNldFZhbHVlICYgMHgwMEZGOworCX0KKwkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwl7CisJCXBBZC0+YXRlLkNoYW5uZWwgPSBjaGFubmVsOworCQlBVEVBc2ljU3dpdGNoQ2hhbm5lbChwQWQpOworCQltZGVsYXkoNSk7CisKKwkJZGF0YSA9IDB4MTA7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIGRhdGEpOworCQlkYXRhID0gMHg0MDsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgZGF0YSk7CisJCWRhdGEgPSAweDQwOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCBkYXRhKTsKKwkJbWRlbGF5KDUpOworCisJCS8vIFN0YXJ0IFJ4CisJCXBBZC0+YXRlLmJRQVJ4U3RhcnQgPSBUUlVFOworCQlTZXRfQVRFX1Byb2MocEFkLCAiUlhGUkFNRSIpOworCisJCW1kZWxheSg1KTsKKworCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykKKwkJeworCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjUwLCAmQmJwUjUwUnNzaTApOworCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjUxLCAmQmJwUjUxUnNzaTEpOworCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjUyLCAmQmJwUjUyUnNzaTIpOworCisJCQltZGVsYXkoMTApOworCisJCQkvLyBDYWxjdWxhdGUgUlNTSSAwCisJCQlpZiAoQmJwUjUwUnNzaTAgPT0gMCkKKwkJCXsKKwkJCQlSU1NJMCA9IC0xMDA7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlNTSTAgPSAoSU5UMzIpKC0xMiAtIEJicFI1MFJzc2kwIC0gTE5BX0dhaW4gLSBSc3NpME9mZnNldCk7CisJCQl9CisJCQlSU1NJWzBdW2pdID0gUlNTSTA7CisKKwkJCWlmICggcEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+PSAyICkgLy8gMlIKKwkJCXsKKwkJCQkvLyBDYWxjdWxhdGUgUlNTSSAxCisJCQkJaWYgKEJicFI1MVJzc2kxID09IDApCisJCQkJeworCQkJCQlSU1NJMSA9IC0xMDA7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJTU0kxID0gKElOVDMyKSgtMTIgLSBCYnBSNTFSc3NpMSAtIExOQV9HYWluIC0gUnNzaTFPZmZzZXQpOworCQkJCX0KKwkJCQlSU1NJWzFdW2pdID0gUlNTSTE7CisJCQl9CisKKwkJCWlmICggcEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+PSAzICkgLy8gM1IKKwkJCXsKKwkJCQkvLyBDYWxjdWxhdGUgUlNTSSAyCisJCQkJaWYgKEJicFI1MlJzc2kyID09IDApCisJCQkJCVJTU0kyID0gLTEwMDsKKwkJCQllbHNlCisJCQkJCVJTU0kyID0gKElOVDMyKSgtMTIgLSBCYnBSNTJSc3NpMiAtIExOQV9HYWluIC0gUnNzaTJPZmZzZXQpOworCisJCQkJUlNTSVsyXVtqXSA9IFJTU0kyOworCQkJfQorCQl9CisKKwkJLy8gU3RvcCBSeAorCQlTZXRfQVRFX1Byb2MocEFkLCAiUlhTVE9QIik7CisKKwkJbWRlbGF5KDUpOworCisJCUJ1YmJsZVNvcnQoMTAsIFJTU0lbMF0pOwkvLyAxUgorCisJCWlmICggcEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+PSAyICkgLy8gMlIKKwkJeworCQkJQnViYmxlU29ydCgxMCwgUlNTSVsxXSk7CisJCX0KKworCQlpZiAoIHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPj0gMyApIC8vIDNSCisJCXsKKwkJCUJ1YmJsZVNvcnQoMTAsIFJTU0lbMl0pOworCQl9CisKKwl9CisKKwlwQWQtPmF0ZS5DaGFubmVsID0gT3JnX0NoYW5uZWw7CisJQVRFQXNpY1N3aXRjaENoYW5uZWwocEFkKTsKKworCS8vIFJlc3RvcmUgb3JpZ2luYWwgdmFsdWUKKyAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBPcmdfQkJQNjZ2YWx1ZSk7CisgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgT3JnX0JCUDY5dmFsdWUpOworICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIE9yZ19CQlA3MHZhbHVlKTsKKworCXJldHVybjsKK30KKworQk9PTEVBTiBTeW5jVHhSeENvbmZpZyhQUlRNUF9BREFQVEVSIHBBZCwgVVNIT1JUIG9mZnNldCwgVUNIQVIgdmFsdWUpCit7CisJVUNIQVIgdG1wID0gMCwgYmJwX2RhdGEgPSAwOworCisJaWYgKEFURV9PTihwQWQpKQorCXsKKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBvZmZzZXQsICZiYnBfZGF0YSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIG9mZnNldCwgJmJicF9kYXRhKTsKKwl9CisKKwkvKiBjb25maXJtIGFnYWluICovCisJQVNTRVJUKGJicF9kYXRhID09IHZhbHVlKTsKKworCXN3aXRjaChvZmZzZXQpCisJeworCQljYXNlIEJCUF9SMToKKwkJCS8qIE5lZWQgdG8gc3luYy4gdHggY29uZmlndXJhdGlvbiB3aXRoIGxlZ2FjeSBBVEUuICovCisJCQl0bXAgPSAoYmJwX2RhdGEgJiAoKDEgPDwgNCkgfCAoMSA8PCAzKSkvKiAweDE4ICovKSA+PiAzOworCQkgICAgc3dpdGNoKHRtcCkKKwkJICAgIHsKKwkJCQkvKiBUaGUgQkJQIFIxIGJpdFs0OjNdID0gMiA6OiBCb3RoIERBQ3Mgd2lsbCBiZSB1c2VkIGJ5IFFBLiAqLworCQkgICAgICAgIGNhc2UgMjoKKwkJCQkJLyogQWxsICovCisJCQkJCXBBZC0+YXRlLlR4QW50ZW5uYVNlbCA9IDA7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkJCS8qIFRoZSBCQlAgUjEgYml0WzQ6M10gPSAwIDo6IERBQyAwIHdpbGwgYmUgdXNlZCBieSBRQS4gKi8KKwkJICAgICAgICBjYXNlIDA6CisJCQkJCS8qIEFudGVubmEgb25lICovCisJCQkJCXBBZC0+YXRlLlR4QW50ZW5uYVNlbCA9IDE7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkJCS8qIFRoZSBCQlAgUjEgYml0WzQ6M10gPSAxIDo6IERBQyAxIHdpbGwgYmUgdXNlZCBieSBRQS4gKi8KKwkJICAgICAgICBjYXNlIDE6CisJCQkJCS8qIEFudGVubmEgdHdvICovCisJCQkJCXBBZC0+YXRlLlR4QW50ZW5uYVNlbCA9IDI7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkgICAgICAgIGRlZmF1bHQ6CisJCSAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzIC0tIFN0aC4gd3JvbmchICA6IHJldHVybiBGQUxTRTsgXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCQkgICAgfQorCQkJYnJlYWs7LyogY2FzZSBCQlBfUjEgKi8KKworCQljYXNlIEJCUF9SMzoKKwkJCS8qIE5lZWQgdG8gc3luYy4gcnggY29uZmlndXJhdGlvbiB3aXRoIGxlZ2FjeSBBVEUuICovCisJCQl0bXAgPSAoYmJwX2RhdGEgJiAoKDEgPDwgMSkgfCAoMSA8PCAwKSkvKiAweDAzICovKTsKKwkJICAgIHN3aXRjaCh0bXApCisJCSAgICB7CisJCQkJLyogVGhlIEJCUCBSMyBiaXRbMTowXSA9IDMgOjogQWxsIEFEQ3Mgd2lsbCBiZSB1c2VkIGJ5IFFBLiAqLworCQkgICAgICAgIGNhc2UgMzoKKwkJCQkJLyogQWxsICovCisJCQkJCXBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9IDA7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkJCS8qIFRoZSBCQlAgUjMgYml0WzE6MF0gPSAwIDo6IEFEQyAwIHdpbGwgYmUgdXNlZCBieSBRQSwgKi8KKwkJCQkvKiB1bmxlc3MgdGhlIEJCUCBSMyBiaXRbNDozXSA9IDIgKi8KKwkJICAgICAgICBjYXNlIDA6CisJCQkJCS8qIEFudGVubmEgb25lICovCisJCQkJCXBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9IDE7CisJCQkJCXRtcCA9ICgoYmJwX2RhdGEgJiAoKDEgPDwgNCkgfCAoMSA8PCAzKSkvKiAweDAzICovKSA+PiAzKTsKKwkJCQkJaWYgKHRtcCA9PSAyKS8vIDNSCisJCQkJCXsKKwkJCQkJCS8qIERlZmF1bHQgOiBBbGwgQURDcyB3aWxsIGJlIHVzZWQgYnkgUUEgKi8KKwkJCQkJCXBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9IDA7CisJCQkJCX0KKwkJICAgICAgICAgICAgYnJlYWs7CisJCQkJLyogVGhlIEJCUCBSMyBiaXRbMTowXSA9IDEgOjogQURDIDEgd2lsbCBiZSB1c2VkIGJ5IFFBLiAqLworCQkgICAgICAgIGNhc2UgMToKKwkJCQkJLyogQW50ZW5uYSB0d28gKi8KKwkJCQkJcEFkLT5hdGUuUnhBbnRlbm5hU2VsID0gMjsKKwkJICAgICAgICAgICAgYnJlYWs7CisJCQkJLyogVGhlIEJCUCBSMyBiaXRbMTowXSA9IDIgOjogQURDIDIgd2lsbCBiZSB1c2VkIGJ5IFFBLiAqLworCQkgICAgICAgIGNhc2UgMjoKKwkJCQkJLyogQW50ZW5uYSB0aHJlZSAqLworCQkJCQlwQWQtPmF0ZS5SeEFudGVubmFTZWwgPSAzOworCQkgICAgICAgICAgICBicmVhazsKKwkJICAgICAgICBkZWZhdWx0OgorCQkgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyAtLSBJbXBvc3NpYmxlISAgOiByZXR1cm4gRkFMU0U7IFxuIiwgX19GVU5DVElPTl9fKSk7CisJCSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKwkJICAgIH0KKwkJCWJyZWFrOy8qIGNhc2UgQkJQX1IzICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIC0tIFN0aC4gd3JvbmchICA6IHJldHVybiBGQUxTRTsgXG4iLCBfX0ZVTkNUSU9OX18pKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIFZPSUQgbWVtY3B5X2V4bChQUlRNUF9BREFQVEVSIHBBZCwgVUNIQVIgKmRzdCwgVUNIQVIgKnNyYywgVUxPTkcgbGVuKQoreworCVVMT05HIGksIFZhbHVlID0gMDsKKwlVTE9ORyAqcERzdCwgKnBTcmM7CisJVUNIQVIgKnA4OworCisJcDggPSBzcmM7CisJcERzdCA9IChVTE9ORyAqKSBkc3Q7CisJcFNyYyA9IChVTE9ORyAqKSBzcmM7CisKKwlmb3IgKGkgPSAwIDsgaSA8IChsZW4vNCk7IGkrKykKKwl7CisJCS8qIEZvciBhbGlnbm1lbnQgaXNzdWUsIHdlIG5lZWQgYSB2YXJpYWJsZSAiVmFsdWUiLiAqLworCQltZW1tb3ZlKCZWYWx1ZSwgcFNyYywgNCk7CisJCVZhbHVlID0gaHRvbmwoVmFsdWUpOworCQltZW1tb3ZlKHBEc3QsICZWYWx1ZSwgNCk7CisJCXBEc3QrKzsKKwkJcFNyYysrOworCX0KKwlpZiAoKGxlbiAlIDQpICE9IDApCisJeworCQkvKiB3aXNoIHRoYXQgaXQgd2lsbCBuZXZlciByZWFjaCBoZXJlICovCisJCW1lbW1vdmUoJlZhbHVlLCBwU3JjLCAobGVuICUgNCkpOworCQlWYWx1ZSA9IGh0b25sKFZhbHVlKTsKKwkJbWVtbW92ZShwRHN0LCAmVmFsdWUsIChsZW4gJSA0KSk7CisJfQorfQorCitzdGF0aWMgVk9JRCBtZW1jcHlfZXhzKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiAqZHN0LCBVQ0hBUiAqc3JjLCBVTE9ORyBsZW4pCit7CisJVUxPTkcgaTsKKwlVQ0hBUiAqcERzdCwgKnBTcmM7CisKKwlwRHN0ID0gZHN0OworCXBTcmMgPSBzcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxlbi8yKTsgaSsrKQorCXsKKwkJbWVtbW92ZShwRHN0LCBwU3JjLCAyKTsKKwkJKigoVVNIT1JUICopcERzdCkgPSBodG9ucygqKChVU0hPUlQgKilwRHN0KSk7CisJCXBEc3QrPTI7CisJCXBTcmMrPTI7CisJfQorCisJaWYgKChsZW4gJSAyKSAhPSAwKQorCXsKKwkJbWVtbW92ZShwRHN0LCBwU3JjLCAxKTsKKwl9Cit9CisKK3N0YXRpYyBWT0lEIFJUTVBfSU9fUkVBRF9CVUxLKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiAqZHN0LCBVQ0hBUiAqc3JjLCBVSU5UMzIgbGVuKQoreworCVVJTlQzMiBpLCBWYWx1ZTsKKwlVSU5UMzIgKnBEc3QsICpwU3JjOworCisJcERzdCA9IChVSU5UMzIgKikgZHN0OworCXBTcmMgPSAoVUlOVDMyICopIHNyYzsKKworCWZvciAoaSA9IDAgOyBpIDwgKGxlbi80KTsgaSsrKQorCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCAoVUxPTkcpcFNyYywgJlZhbHVlKTsKKwkJVmFsdWUgPSBodG9ubChWYWx1ZSk7CisJCW1lbW1vdmUocERzdCwgJlZhbHVlLCA0KTsKKwkJcERzdCsrOworCQlwU3JjKys7CisJfQorCXJldHVybjsKK30KKworSU5UIFNldF9UeFN0b3BfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZXRfVHhTdG9wX1Byb2NcbiIpKTsKKworCWlmIChTZXRfQVRFX1Byb2MocEFkLCAiVFhTVE9QIikpCisJeworCXJldHVybiBUUlVFOworfQorCWVsc2UKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKK0lOVCBTZXRfUnhTdG9wX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU2V0X1J4U3RvcF9Qcm9jXG4iKSk7CisKKwlpZiAoU2V0X0FURV9Qcm9jKHBBZCwgIlJYU1RPUCIpKQorCXsKKwlyZXR1cm4gVFJVRTsKK30KKwllbHNlCisJeworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorI2VuZGlmCS8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYJLy8gUkFMSU5LX0FURSAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2F0ZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjllYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuaApAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX0FURV9IX18KKyNkZWZpbmUgX19BVEVfSF9fCisKKyNpZm5kZWYgVUNPUworI2RlZmluZSBhdGVfcHJpbnQgcHJpbnRrCisjZGVmaW5lIEFURURCR1BSSU5UIERCR1BSSU5UCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgRUVQUk9NX1NJWkUJCQkJCQkJCTB4NDAwCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZGVmaW5lIEVFUFJPTV9CSU5fRklMRV9OQU1FICAiL2V0Yy9XaXJlbGVzcy9SVDI4NzBTVEEvZTJwLmJpbiIKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKyNlbHNlIC8vICFVQ09TIC8vCisjZGVmaW5lIGZBVEVfTE9BRF9FRVBST00JCQkJCQkweDBDNDMKKyNpZmRlZiBDT05GSUdfUFJJTlRLCitleHRlcm4gSU5UIENvbnNvbGVSZXNwb25zZShJTiBQVUNIQVIgYnVmZik7CitleHRlcm4gaW50ICgqcmVtb3RlX2Rpc3BsYXkpKGNoYXIgKik7CitleHRlcm4gdm9pZCBwdXRzIChjb25zdCBjaGFyICpzKTsKKworLyogc3BlY2lmaWNseSBkZWZpbmVkIHRvIHJlZGlyZWN0IGFuZCBzaG93IGF0ZS1yZWxhdGVkIG1lc3NhZ2VzIHRvIGhvc3QuICovCisvKiBUcnkgdG8gZGVmaW5lIGF0ZV9wcmludCBhcyBhIG1hY3JvLiAqLworI2RlZmluZSBhdGVfcHJpbnQoZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgXAorZG97ICAgaW50ICgqb3JnX3JlbW90ZV9kaXNwbGF5KShjaGFyICopID0gTlVMTDsgICBcCisJb3JnX3JlbW90ZV9kaXNwbGF5ID0gcmVtb3RlX2Rpc3BsYXk7XAorCS8qIFNhdmUgb3JpZ2luYWwgInJlbW90ZV9kaXNwbGF5IiAqL1wKKwlyZW1vdGVfZGlzcGxheSA9IChpbnQgKCopKGNoYXIgKikpQ29uc29sZVJlc3BvbnNlOyAgICAgICAgICAgXAorCXByaW50ayhmbXQsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgXAorCS8qIFJlc3RvcmUgdGhlIHJlbW90ZV9kaXNwbGF5IGZ1bmN0aW9uIHBvaW50ZXIgKi8gICAgICAgIFwKKwlyZW1vdGVfZGlzcGxheSA9IG9yZ19yZW1vdGVfZGlzcGxheTsgfXdoaWxlKDApCisKKyNkZWZpbmUgQVRFREJHUFJJTlQoTGV2ZWwsIEZtdCkgICAgCVwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKExldmVsKSA8PSBSVERlYnVnTGV2ZWwpICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdGVfcHJpbnQgRm10OwkJCQkJXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2VuZGlmIC8vIENPTkZJR19QUklOVEsgLy8KKyNlbmRpZiAvLyAhVUNPUyAvLworCisjZGVmaW5lIEFURV9PTihfcCkgICAgICAgICAgICAgICgoKF9wKS0+YXRlLk1vZGUpICE9IEFURV9TVE9QKQorCisvKiBSVDI4ODBfaU5JQyB3aWxsIGRlZmluZSAiUlQyODYwIi4gKi8KKworLyogUlQyODgwX2lOSUMgd2lsbCBkZWZpbmUgUlQyODYwLiAqLworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIEVFUFJPTV9TSVpFCQkJCQkJCQkweDQwMAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBFRVBST01fQklOX0ZJTEVfTkFNRSAgIi9ldGMvV2lyZWxlc3MvUlQyODcwU1RBL2UycC5iaW4iCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgIFJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikKKyNkZWZpbmUgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKF9BLCBfSSwgX1YpICAgIFJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQoX0EsIF9JLCBfVikKKworI2RlZmluZSBCVUxLX09VVF9MT0NLKHBMb2NrLCBJcnFGbGFncykJXAorCQlpZigxIC8qIShpbl9pbnRlcnJ1cHQoKSAmIDB4ZmZmZjAwMDApKi8pCVwKKwkJCVJUTVBfSVJRX0xPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOworCisjZGVmaW5lIEJVTEtfT1VUX1VOTE9DSyhwTG9jaywgSXJxRmxhZ3MpCVwKKwkJaWYoMSAvKiEoaW5faW50ZXJydXB0KCkgJiAweGZmZmYwMDAwKSovKQlcCisJCQlSVE1QX0lSUV9VTkxPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOworCisvLyBQcm90b3R5cGVzIG9mIGNvbXBsZXRpb24gZnVudWMuCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCisjZGVmaW5lIEFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUocHVyYiwgcHRfcmVncykgICAgQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZShwdXJiKQorI2VuZGlmCisKK1ZPSUQgQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZSgKKwlJTiBwdXJiYl90IHB1cmIsCisJT1VUIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKKworVk9JRCBBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQpOworCitWT0lEIEFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgUlQzMHh4CisjZGVmaW5lIEFURV9SRl9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgICBSVE1QX1JGX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikKKyNkZWZpbmUgQVRFX1JGX0lPX1dSSVRFOF9CWV9SRUdfSUQoX0EsIF9JLCBfVikgICAgIFJUTVBfUkZfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisKK1ZPSUQgcnRfZWVfcmVhZF9hbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIFVTSE9SVCAqRGF0YSk7CisKKworVk9JRCBydF9lZV93cml0ZV9hbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVTSE9SVCAqRGF0YSk7CisKK0lOVCBTZXRfQVRFX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfREFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9TQV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX0JTU0lEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfQ0hBTk5FTF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX1BPV0VSMF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX0FudGVubmFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9SWF9BbnRlbm5hX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfRlJFUU9GRlNFVF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX0JXX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfTEVOR1RIX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfQ09VTlRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9UWF9NQ1NfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9UWF9NT0RFX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfR0lfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCisKK0lOVAlTZXRfQVRFX1JYX0ZFUl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQVRFX1JlYWRfUkZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Xcml0ZV9SRjFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Xcml0ZV9SRjJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Xcml0ZV9SRjNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Xcml0ZV9SRjRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9Mb2FkX0UyUF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQVRFX1JlYWRfRTJQX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfU2hvd19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX0hlbHBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCisjaWZkZWYgUkFMSU5LX0FURQorI2lmZGVmIFJBTElOS18yOHh4X1FBCitWT0lEIEFURV9RQV9TdGF0aXN0aWNzKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQUlhXSV9TVFJVQwkJCXBSeFdJLAorCUlOIFBSVDI4WFhfUlhEX1NUUlVDICAgIHAyOHh4UnhELAorCUlOIFBIRUFERVJfODAyXzExCQlwSGVhZGVyKTsKKworVk9JRCBSdG1wRG9BdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSk7CisKK1ZPSUQgQnViYmxlU29ydCgKKwlJTiAgSU5UMzIgbiwKKwlJTiAgSU5UMzIgYVtdKTsKKworVk9JRCBDYWxOb2lzZUxldmVsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisJSU4gIFVDSEFSICAgICAgICAgICBjaGFubmVsLAorCU9VVCBJTlQzMiAgICAgICAgICAgYnVmZmVyWzNdWzEwXSk7CisKK0JPT0xFQU4gU3luY1R4UnhDb25maWcoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglVU0hPUlQJCQlvZmZzZXQsCisJSU4JVUNIQVIJCQl2YWx1ZSk7CisKK0lOVCBTZXRfVHhTdG9wX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9SeFN0b3BfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKK1ZPSUQgQVRFQXNpY1N3aXRjaENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFURUFzaWNBZGp1c3RUeFBvd2VyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBVEVEaXNhYmxlQXNpY1Byb3RlY3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkKTsKKworQ0hBUiBBVEVDb252ZXJ0VG9Sc3NpKAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCwKKwlJTiBDSEFSCQkJCVJzc2ksCisJSU4gVUNIQVIgICAgUnNzaU51bWJlcik7CisKK1ZPSUQgQVRFU2FtcGxlUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBQUlhXSV9TVFJVQwkJcFJ4V0kpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgUlRNUFN0YXRpb25TdG9wKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QU3RhdGlvblN0YXJ0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBfX0FURV9IX18gLy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfY29uZmlnLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDY0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2NvbmZpZy5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0X2NvbmZpZy5oCisKKwlBYnN0cmFjdDoKKwlDZW50cmFsIGhlYWRlciBmaWxlIHRvIG1haW50YWluIGFsbCBpbmNsdWRlIGZpbGVzIGZvciBhbGwgTkRJUworCW1pbmlwb3J0IGRyaXZlciByb3V0aW5lcy4KKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUGF1bCBMaW4gICAgMDgtMDEtMjAwMiAgICBjcmVhdGVkCisKKyovCisjaWZuZGVmCV9fUlRfQ09ORklHX0hfXworI2RlZmluZQlfX1JUX0NPTkZJR19IX18KKworI2luY2x1ZGUgICAgInJ0bXBfdHlwZS5oIgorI2lmZGVmIFVDT1MKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAJInJ0X3Vjb3MuaCIKKyNlbmRpZgorCisjaWZkZWYgTElOVVgKKyNpbmNsdWRlCSJydF9saW51eC5oIgorI2VuZGlmCisjaW5jbHVkZSAgICAicnRtcF9kZWYuaCIKKyNpbmNsdWRlICAgICJydDI4eHguaCIKKworCisjaWZkZWYgUlQyODcwCisjaW5jbHVkZQkicnQyODcwLmgiCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpbmNsdWRlICAgICJvaWQuaCIKKyNpbmNsdWRlICAgICJtbG1lLmgiCisjaW5jbHVkZSAgICAid3BhLmgiCisjaW5jbHVkZSAgICAibWQ1LmgiCisjaW5jbHVkZSAgICAicnRtcC5oIgorI2luY2x1ZGUJImFwLmgiCisjaW5jbHVkZQkiZGZzLmgiCisjaW5jbHVkZQkiY2hsaXN0LmgiCisjaW5jbHVkZQkic3BlY3RydW0uaCIKKyNpZmRlZiBNTE1FX0VYCisjaW5jbHVkZQkibWxtZV9leF9kZWYuaCIKKyNpbmNsdWRlCSJtbG1lX2V4LmgiCisjZW5kaWYgLy8gTUxNRV9FWCAvLworCisjdW5kZWYgQVBfV1NDX0lOQ0xVREVECisjdW5kZWYgU1RBX1dTQ19JTkNMVURFRAorI3VuZGVmIFdTQ19JTkNMVURFRAorCisKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKyNpbmNsdWRlICAgICJsZWFwLmgiCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIEJMT0NLX05FVF9JRgorI2luY2x1ZGUgIm5ldGlmX2Jsb2NrLmgiCisjZW5kaWYgLy8gQkxPQ0tfTkVUX0lGIC8vCisKKyNpZmRlZiBJR01QX1NOT09QX1NVUFBPUlQKKyNpbmNsdWRlICJpZ21wX3Nub29wLmgiCisjZW5kaWYgLy8gSUdNUF9TTk9PUF9TVVBQT1JUIC8vCisKKyNpZmRlZiBSQUxJTktfQVRFCisjaW5jbHVkZSAicnRfYXRlLmgiCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisKKworI2lmIGRlZmluZWQoQVBfV1NDX0lOQ0xVREVEKSB8fCBkZWZpbmVkKFNUQV9XU0NfSU5DTFVERUQpCisjZGVmaW5lIFdTQ19JTkNMVURFRAorI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNlcnJvciAiQnVpbGQgZm9yIGJlaW5nIGNvbnRyb2xsZWQgYnkgTmV0d29ya01hbmFnZXIgb3Igd2V4dCwgcGxlYXNlIHNldCBIQVNfV1BBX1NVUFBMSUNBTlQ9eSBhbmQgSEFTX05BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUPXkiCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWZkZWYgSUtBTk9TX1ZYXzFYMAorI2luY2x1ZGUJInZyX2lrYW5zLmgiCisjZW5kaWYgLy8gSUtBTk9TX1ZYXzFYMCAvLworCisjZW5kaWYJLy8gX19SVF9DT05GSUdfSF9fCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjMzODUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9saW51eC5jCkBAIC0wLDAgKzEsMTA2MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgorCitVTE9ORwlSVERlYnVnTGV2ZWwgPSBSVF9ERUJVR19FUlJPUjsKKworQlVJTERfVElNRVJfRlVOQ1RJT04oTWxtZVBlcmlvZGljRXhlYyk7CisvL0JVSUxEX1RJTUVSX0ZVTkNUSU9OKE1sbWVSc3NpUmVwb3J0RXhlYyk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBc2ljUnhBbnRFdmFsVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBUFNEUGVyaW9kaWNFeGVjKTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKEFzaWNSZlR1bmluZ0V4ZWMpOworI2lmZGVmIFJUMjg3MAorQlVJTERfVElNRVJfRlVOQ1RJT04oQmVhY29uVXBkYXRlRXhlYyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorQlVJTERfVElNRVJfRlVOQ1RJT04oQmVhY29uVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihTY2FuVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBdXRoVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBc3NvY1RpbWVvdXQpOworQlVJTERfVElNRVJfRlVOQ1RJT04oUmVhc3NvY1RpbWVvdXQpOworQlVJTERfVElNRVJfRlVOQ1RJT04oRGlzYXNzb2NUaW1lb3V0KTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKExpbmtEb3duRXhlYyk7CisjaWZkZWYgTEVBUF9TVVBQT1JUCitCVUlMRF9USU1FUl9GVU5DVElPTihMZWFwQXV0aFRpbWVvdXQpOworI2VuZGlmCitCVUlMRF9USU1FUl9GVU5DVElPTihTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKTsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKERsc1RpbWVvdXRBY3Rpb24pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKworCisvLyBmb3Igd2lyZWxlc3Mgc3lzdGVtIGV2ZW50IG1lc3NhZ2UKK2NoYXIgY29uc3QgKnBXaXJlbGVzc1N5c0V2ZW50VGV4dFtJV19TWVNfRVZFTlRfVFlQRV9OVU1dID0geworCS8vIHN5c3RlbSBzdGF0dXMgZXZlbnQKKyAgICAiaGFkIGFzc29jaWF0ZWQgc3VjY2Vzc2Z1bGx5IiwJCQkJCQkJLyogSVdfQVNTT0NfRVZFTlRfRkxBRyAqLworICAgICJoYWQgZGlzYXNzb2NpYXRlZCIsCQkJCQkJCQkJLyogSVdfRElTQVNTT0NfRVZFTlRfRkxBRyAqLworICAgICJoYWQgZGVhdXRoZW50aWNhdGVkIiwJCQkJCQkJCQkvKiBJV19ERUFVVEhfRVZFTlRfRkxBRyAqLworICAgICJoYWQgYmVlbiBhZ2VkLW91dCBhbmQgZGlzYXNzb2NpYXRlZCIsCQkJCQkvKiBJV19BR0VPVVRfRVZFTlRfRkxBRyAqLworICAgICJvY2N1cnJlZCBDb3VudGVyTWVhc3VyZXMgYXR0YWNrIiwJCQkJCQkvKiBJV19DT1VOVEVSX01FQVNVUkVTX0VWRU5UX0ZMQUcgKi8KKyAgICAib2NjdXJyZWQgcmVwbGF5IGNvdW50ZXIgZGlmZmVyZW50IGluIEtleSBIYW5kc2hha2luZyIsCS8qIElXX1JFUExBWV9DT1VOVEVSX0RJRkZfRVZFTlRfRkxBRyAqLworICAgICJvY2N1cnJlZCBSU05JRSBkaWZmZXJlbnQgaW4gS2V5IEhhbmRzaGFraW5nIiwJCQkvKiBJV19SU05JRV9ESUZGX0VWRU5UX0ZMQUcgKi8KKyAgICAib2NjdXJyZWQgTUlDIGRpZmZlcmVudCBpbiBLZXkgSGFuZHNoYWtpbmciLAkJCS8qIElXX01JQ19ESUZGX0VWRU5UX0ZMQUcgKi8KKyAgICAib2NjdXJyZWQgSUNWIGVycm9yIGluIFJYIiwJCQkJCQkJCS8qIElXX0lDVl9FUlJPUl9FVkVOVF9GTEFHICovCisgICAgIm9jY3VycmVkIE1JQyBlcnJvciBpbiBSWCIsCQkJCQkJCQkvKiBJV19NSUNfRVJST1JfRVZFTlRfRkxBRyAqLworCSJHcm91cCBLZXkgSGFuZHNoYWtpbmcgdGltZW91dCIsCQkJCQkJLyogSVdfR1JPVVBfSFNfVElNRU9VVF9FVkVOVF9GTEFHICovCisJIlBhaXJ3aXNlIEtleSBIYW5kc2hha2luZyB0aW1lb3V0IiwJCQkJCQkvKiBJV19QQUlSV0lTRV9IU19USU1FT1VUX0VWRU5UX0ZMQUcgKi8KKwkiUlNOIElFIHNhbml0eSBjaGVjayBmYWlsdXJlIiwJCQkJCQkJLyogSVdfUlNOSUVfU0FOSVRZX0ZBSUxfRVZFTlRfRkxBRyAqLworCSJzZXQga2V5IGRvbmUgaW4gV1BBL1dQQVBTSyIsCQkJCQkJCS8qIElXX1NFVF9LRVlfRE9ORV9XUEExX0VWRU5UX0ZMQUcgKi8KKwkic2V0IGtleSBkb25lIGluIFdQQTIvV1BBMlBTSyIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElXX1NFVF9LRVlfRE9ORV9XUEEyX0VWRU5UX0ZMQUcgKi8KKwkiY29ubmVjdHMgd2l0aCBvdXIgd2lyZWxlc3MgY2xpZW50IiwgICAgICAgICAgICAgICAgICAgIC8qIElXX1NUQV9MSU5LVVBfRVZFTlRfRkxBRyAqLworCSJkaXNjb25uZWN0cyB3aXRoIG91ciB3aXJlbGVzcyBjbGllbnQiLCAgICAgICAgICAgICAgICAgLyogSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcgKi8KKwkic2NhbiBjb21wbGV0ZWQiCQkJCQkJCQkJCS8qIElXX1NDQU5fQ09NUExFVEVEX0VWRU5UX0ZMQUcgKi8KKwkic2NhbiB0ZXJtaW5hdGUhISBCdXN5ISEgRW5xdWV1ZSBmYWlsISEiCQkJCS8qIElXX1NDQU5fRU5RVUVVRV9GQUlMX0VWRU5UX0ZMQUcgKi8KKwl9OworCisvLyBmb3Igd2lyZWxlc3MgSURTX3Nwb29mX2F0dGFjayBldmVudCBtZXNzYWdlCitjaGFyIGNvbnN0ICpwV2lyZWxlc3NTcG9vZkV2ZW50VGV4dFtJV19TUE9PRl9FVkVOVF9UWVBFX05VTV0gPSB7CisgICAgImRldGVjdGVkIGNvbmZsaWN0IFNTSUQiLAkJCQkJCQkJLyogSVdfQ09ORkxJQ1RfU1NJRF9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHNwb29mZWQgYXNzb2NpYXRpb24gcmVzcG9uc2UiLAkJCQkvKiBJV19TUE9PRl9BU1NPQ19SRVNQX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgc3Bvb2ZlZCByZWFzc29jaWF0aW9uIHJlc3BvbnNlcyIsCQkJCS8qIElXX1NQT09GX1JFQVNTT0NfUkVTUF9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHNwb29mZWQgcHJvYmUgcmVzcG9uc2UiLAkJCQkJCS8qIElXX1NQT09GX1BST0JFX1JFU1BfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIGJlYWNvbiIsCQkJCQkJCQkvKiBJV19TUE9PRl9CRUFDT05fRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIGRpc2Fzc29jaWF0aW9uIiwJCQkJCQkvKiBJV19TUE9PRl9ESVNBU1NPQ19FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHNwb29mZWQgYXV0aGVudGljYXRpb24iLAkJCQkJCS8qIElXX1NQT09GX0FVVEhfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIGRlYXV0aGVudGljYXRpb24iLAkJCQkJLyogSVdfU1BPT0ZfREVBVVRIX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgc3Bvb2ZlZCB1bmtub3duIG1hbmFnZW1lbnQgZnJhbWUiLAkJCS8qIElXX1NQT09GX1VOS05PV05fTUdNVF9FVkVOVF9GTEFHICovCisJImRldGVjdGVkIHJlcGxheSBhdHRhY2siCQkJCQkJCQkvKiBJV19SRVBMQVlfQVRUQUNLX0VWRU5UX0ZMQUcgKi8KKwl9OworCisvLyBmb3Igd2lyZWxlc3MgSURTX2Zsb29kaW5nX2F0dGFjayBldmVudCBtZXNzYWdlCitjaGFyIGNvbnN0ICpwV2lyZWxlc3NGbG9vZEV2ZW50VGV4dFtJV19GTE9PRF9FVkVOVF9UWVBFX05VTV0gPSB7CisJImRldGVjdGVkIGF1dGhlbnRpY2F0aW9uIGZsb29kaW5nIiwJCQkJCQkvKiBJV19GTE9PRF9BVVRIX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgYXNzb2NpYXRpb24gcmVxdWVzdCBmbG9vZGluZyIsCQkJCS8qIElXX0ZMT09EX0FTU09DX1JFUV9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHJlYXNzb2NpYXRpb24gcmVxdWVzdCBmbG9vZGluZyIsCQkJCS8qIElXX0ZMT09EX1JFQVNTT0NfUkVRX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgcHJvYmUgcmVxdWVzdCBmbG9vZGluZyIsCQkJCQkJLyogSVdfRkxPT0RfUFJPQkVfUkVRX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgZGlzYXNzb2NpYXRpb24gZmxvb2RpbmciLAkJCQkJCS8qIElXX0ZMT09EX0RJU0FTU09DX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgZGVhdXRoZW50aWNhdGlvbiBmbG9vZGluZyIsCQkJCQkvKiBJV19GTE9PRF9ERUFVVEhfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCA4MDIuMXggZWFwLXJlcXVlc3QgZmxvb2RpbmciCQkJCQkvKiBJV19GTE9PRF9FQVBfUkVRX0VWRU5UX0ZMQUcgKi8KKwl9OworCisKKy8qIHRpbWVvdXQgLS0gbXMgKi8KK1ZPSUQgUlRNUF9TZXRQZXJpb2RpY1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIgKnBUaW1lciwKKwlJTgl1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJdGltZW91dCA9ICgodGltZW91dCpIWikgLyAxMDAwKTsKKwlwVGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZW91dDsKKwlhZGRfdGltZXIocFRpbWVyKTsKK30KKworLyogY29udmVydCBOZGlzTUluaXRpYWxpemVUaW1lciAtLT4gUlRNUF9PU19Jbml0X1RpbWVyICovCitWT0lEIFJUTVBfT1NfSW5pdF9UaW1lcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglORElTX01JTklQT1JUX1RJTUVSICpwVGltZXIsCisJSU4JVElNRVJfRlVOQ1RJT04gZnVuY3Rpb24sCisJSU4JUFZPSUQgZGF0YSkKK3sKKwlpbml0X3RpbWVyKHBUaW1lcik7CisgICAgcFRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKKyAgICBwVGltZXItPmZ1bmN0aW9uID0gZnVuY3Rpb247Cit9CisKKworVk9JRCBSVE1QX09TX0FkZF9UaW1lcigKKwlJTglORElTX01JTklQT1JUX1RJTUVSCQkqcFRpbWVyLAorCUlOCXVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlpZiAodGltZXJfcGVuZGluZyhwVGltZXIpKQorCQlyZXR1cm47CisKKwl0aW1lb3V0ID0gKCh0aW1lb3V0KkhaKSAvIDEwMDApOworCXBUaW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0OworCWFkZF90aW1lcihwVGltZXIpOworfQorCitWT0lEIFJUTVBfT1NfTW9kX1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIJCSpwVGltZXIsCisJSU4JdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCXRpbWVvdXQgPSAoKHRpbWVvdXQqSFopIC8gMTAwMCk7CisJbW9kX3RpbWVyKHBUaW1lciwgamlmZmllcyArIHRpbWVvdXQpOworfQorCitWT0lEIFJUTVBfT1NfRGVsX1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIJCSpwVGltZXIsCisJT1VUCUJPT0xFQU4JCQkJCSpwQ2FuY2VsbGVkKQoreworCWlmICh0aW1lcl9wZW5kaW5nKHBUaW1lcikpCisJeworCQkqcENhbmNlbGxlZCA9IGRlbF90aW1lcl9zeW5jKHBUaW1lcik7CisJfQorCWVsc2UKKwl7CisJCSpwQ2FuY2VsbGVkID0gVFJVRTsKKwl9CisKK30KKworVk9JRCBSVE1QX09TX1JlbGVhc2VfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVBRVUVVRV9FTlRSWSAgcEVudHJ5KQoreworCS8vUlRNUEZyZWVOZGlzUGFja2V0KHBBZCwgKHN0cnVjdCBza19idWZmICopcEVudHJ5KTsKK30KKworLy8gVW5pZnkgYWxsIGRlbGF5IHJvdXRpbmUgYnkgdXNpbmcgdWRlbGF5CitWT0lEIFJUTVB1c2VjRGVsYXkoCisJSU4JVUxPTkcJdXNlYykKK3sKKwlVTE9ORwlpOworCisJZm9yIChpID0gMDsgaSA8ICh1c2VjIC8gNTApOyBpKyspCisJCXVkZWxheSg1MCk7CisKKwlpZiAodXNlYyAlIDUwKQorCQl1ZGVsYXkodXNlYyAlIDUwKTsKK30KKwordm9pZCBSVE1QX0dldEN1cnJlbnRTeXN0ZW1UaW1lKExBUkdFX0lOVEVHRVIgKnRpbWUpCit7CisJdGltZS0+dS5Mb3dQYXJ0ID0gamlmZmllczsKK30KKworLy8gcEFkIE1VU1QgYWxsb3cgdG8gYmUgTlVMTAorTkRJU19TVEFUVVMgb3NfYWxsb2NfbWVtKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCU9VVAlQVUNIQVIgKm1lbSwKKwlJTglVTE9ORyAgc2l6ZSkKK3sKKwkqbWVtID0gKFBVQ0hBUikga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoKm1lbSkKKwkJcmV0dXJuIChORElTX1NUQVRVU19TVUNDRVNTKTsKKwllbHNlCisJCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7Cit9CisKKy8vIHBBZCBNVVNUIGFsbG93IHRvIGJlIE5VTEwKK05ESVNfU1RBVFVTIG9zX2ZyZWVfbWVtKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVBVQ0hBUiBtZW0pCit7CisKKwlBU1NFUlQobWVtKTsKKwlrZnJlZShtZW0pOworCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Cit9CisKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVGcmFnUGFja2V0QnVmZmVyKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVMT05HCUxlbmd0aCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OworCisJcGt0ID0gZGV2X2FsbG9jX3NrYihMZW5ndGgpOworCisJaWYgKHBrdCA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY2FuJ3QgYWxsb2NhdGUgZnJhZyByeCAlbGQgc2l6ZSBwYWNrZXRcbiIsTGVuZ3RoKSk7CisJfQorCisJaWYgKHBrdCkKKwl7CisJCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UoT1NQS1RfVE9fUlRQS1QocGt0KSwgUEtUU1JDX05ESVMpOworCX0KKworCXJldHVybiAoUE5ESVNfUEFDS0VUKSBwa3Q7Cit9CisKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVUeFBhY2tldEJ1ZmZlcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OworCisJcGt0ID0gZGV2X2FsbG9jX3NrYihMZW5ndGgpOworCisJaWYgKHBrdCA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY2FuJ3QgYWxsb2NhdGUgdHggJWxkIHNpemUgcGFja2V0XG4iLExlbmd0aCkpOworCX0KKworCWlmIChwa3QpCisJeworCQlSVE1QX1NFVF9QQUNLRVRfU09VUkNFKE9TUEtUX1RPX1JUUEtUKHBrdCksIFBLVFNSQ19ORElTKTsKKwkJKlZpcnR1YWxBZGRyZXNzID0gKFBWT0lEKSBwa3QtPmRhdGE7CisJfQorCWVsc2UKKwl7CisJCSpWaXJ0dWFsQWRkcmVzcyA9IChQVk9JRCkgTlVMTDsKKwl9CisKKwlyZXR1cm4gKFBORElTX1BBQ0tFVCkgcGt0OworfQorCisKK1ZPSUQgYnVpbGRfdHhfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVBVQ0hBUglwRnJhbWUsCisJSU4JVUxPTkcJRnJhbWVMZW4pCit7CisKKwlzdHJ1Y3Qgc2tfYnVmZgkqcFR4UGt0OworCisJQVNTRVJUKHBQYWNrZXQpOworCXBUeFBrdCA9IFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpOworCisJTmRpc01vdmVNZW1vcnkoc2tiX3B1dChwVHhQa3QsIEZyYW1lTGVuKSwgcEZyYW1lLCBGcmFtZUxlbik7Cit9CisKK1ZPSUQJUlRNUEZyZWVBZGFwdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworICAgIFBPU19DT09LSUUgb3NfY29va2llOworCWludCBpbmRleDsKKworCW9zX2Nvb2tpZT0oUE9TX0NPT0tJRSlwQWQtPk9TX0Nvb2tpZTsKKworCWtmcmVlKHBBZC0+QmVhY29uQnVmKTsKKworCisJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5NZ210UmluZ0xvY2spOworCisKKwlmb3IgKGluZGV4ID0wIDsgaW5kZXggPCBOVU1fT0ZfVFhfUklORzsgaW5kZXgrKykKKwl7CisgICAgCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+VHhTd1F1ZXVlTG9ja1tpbmRleF0pOworCQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkRlUXVldWVMb2NrW2luZGV4XSk7CisJCXBBZC0+RGVRdWV1ZVJ1bm5pbmdbaW5kZXhdID0gRkFMU0U7CisJfQorCisJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5pcnFfbG9jayk7CisKKworCXZmcmVlKHBBZCk7IC8vIHBjaV9mcmVlX2NvbnNpc3RlbnQob3NfY29va2llLT5wY2lfZGV2LHNpemVvZihSVE1QX0FEQVBURVIpLHBBZCxvc19jb29raWUtPnBBZF9wYSk7CisJa2ZyZWUob3NfY29va2llKTsKK30KKworQk9PTEVBTiBPU19OZWVkX0Nsb25lX1BhY2tldCh2b2lkKQoreworCXJldHVybiAoRkFMU0UpOworfQorCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCWNsb25lIGFuIGlucHV0IE5ESVMgUEFDS0VUIHRvIGFub3RoZXIgb25lLiBUaGUgbmV3IGludGVybmFsbHkgY3JlYXRlZCBORElTIFBBQ0tFVAorCQltdXN0IGhhdmUgb25seSBvbmUgTkRJUyBCVUZGRVIKKwkJcmV0dXJuIC0gYnl0ZSBjb3BpZWQuIDAgbWVhbnMgY2FuJ3QgY3JlYXRlIE5ESVMgUEFDS0VUCisJCU5PVEU6IGludGVybmFsbHkgY3JlYXRlZCBORElTX1BBQ0tFVCBzaG91bGQgYmUgZGVzdHJveWVkIGJ5IFJUTVBGcmVlTmRpc1BhY2tldAorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcEluc0FNU0RVSGRyCUVXQyBBLU1TRFUgZm9ybWF0IGhhcyBleHRyYSAxNC1ieXRlcyBoZWFkZXIuIGlmIFRSVUUsIGluc2VydCB0aGlzIDE0LWJ5dGUgaGRyIGluIGZyb250IG9mIE1TRFUuCisJCSpwU3JjVG90YWxMZW4JCQlyZXR1cm4gdG90YWwgcGFja2V0IGxlbmd0aC4gVGhpcyBsZW5naHQgaXMgY2FsY3VsYXRlZCB3aXRoIDgwMi4zIGZvcm1hdCBwYWNrZXQuCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKwkJTkRJU19TVEFUVVNfRkFJTFVSRQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIFJUTVBDbG9uZU5kaXNQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JQk9PTEVBTgkJCXBJbnNBTVNEVUhkciwKKwlJTglQTkRJU19QQUNLRVQJcEluUGFja2V0LAorCU9VVCBQTkRJU19QQUNLRVQgICAqcHBPdXRQYWNrZXQpCit7CisKKwlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OworCisJQVNTRVJUKHBJblBhY2tldCk7CisJQVNTRVJUKHBwT3V0UGFja2V0KTsKKworCS8vIDEuIEFsbG9jYXRlIGEgcGFja2V0CisJcGt0ID0gZGV2X2FsbG9jX3NrYigyMDQ4KTsKKworCWlmIChwa3QgPT0gTlVMTCkKKwl7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworIAlza2JfcHV0KHBrdCwgR0VUX09TX1BLVF9MRU4ocEluUGFja2V0KSk7CisJTmRpc01vdmVNZW1vcnkocGt0LT5kYXRhLCBHRVRfT1NfUEtUX0RBVEFQVFIocEluUGFja2V0KSwgR0VUX09TX1BLVF9MRU4ocEluUGFja2V0KSk7CisJKnBwT3V0UGFja2V0ID0gT1NQS1RfVE9fUlRQS1QocGt0KTsKKworCisJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShPU1BLVF9UT19SVFBLVChwa3QpLCBQS1RTUkNfTkRJUyk7CisKKwlwcmludGsoIiMjI0Nsb25lIyMjXG4iKTsKKworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisKKy8vIHRoZSBhbGxvY2F0ZWQgTkRJUyBQQUNLRVQgbXVzdCBiZSBmcmVlZCB2aWEgUlRNUEZyZWVOZGlzUGFja2V0KCkKK05ESVNfU1RBVFVTIFJUTVBBbGxvY2F0ZU5kaXNQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUIFBORElTX1BBQ0tFVCAgICpwcFBhY2tldCwKKwlJTglQVUNIQVIJCQlwSGVhZGVyLAorCUlOCVVJTlQJCQlIZWFkZXJMZW4sCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUlOVAkJCURhdGFMZW4pCit7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQ7CisJQVNTRVJUKHBEYXRhKTsKKwlBU1NFUlQoRGF0YUxlbik7CisKKwkvLyAxLiBBbGxvY2F0ZSBhIHBhY2tldAorCXBQYWNrZXQgPSAoUE5ESVNfUEFDS0VUICopIGRldl9hbGxvY19za2IoSGVhZGVyTGVuICsgRGF0YUxlbiArIFRYUEFERElOR19TSVpFKTsKKwlpZiAocFBhY2tldCA9PSBOVUxMKQorIAl7CisJCSpwcFBhY2tldCA9IE5VTEw7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJSVE1QQWxsb2NhdGVOZGlzUGFja2V0IEZhaWxcblxuIik7CisjZW5kaWYKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJLy8gMi4gY2xvbmUgdGhlIGZyYW1lIGNvbnRlbnQKKwlpZiAoSGVhZGVyTGVuID4gMCkKKwkJTmRpc01vdmVNZW1vcnkoR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpLCBwSGVhZGVyLCBIZWFkZXJMZW4pOworCWlmIChEYXRhTGVuID4gMCkKKwkJTmRpc01vdmVNZW1vcnkoR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpICsgSGVhZGVyTGVuLCBwRGF0YSwgRGF0YUxlbik7CisKKwkvLyAzLiB1cGRhdGUgbGVuZ3RoIG9mIHBhY2tldAorIAlza2JfcHV0KEdFVF9PU19QS1RfVFlQRShwUGFja2V0KSwgSGVhZGVyTGVuK0RhdGFMZW4pOworCisJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShwUGFja2V0LCBQS1RTUkNfTkRJUyk7CisvLwlwcmludGsoIiVzIDogcFBhY2tldCA9ICVwLCBsZW4gPSAlZFxuIiwgX19GVU5DVElPTl9fLCBwUGFja2V0LCBHRVRfT1NfUEtUX0xFTihwUGFja2V0KSk7CisJKnBwUGFja2V0ID0gcFBhY2tldDsKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIERlc2NyaXB0aW9uOgorCVRoaXMgcm91dGluZSBmcmVlcyBhIG1pbmlwb3J0IGludGVybmFsbHkgYWxsb2NhdGVkIE5ESVNfUEFDS0VUIGFuZCBpdHMKKwljb3JyZXNwb25kaW5nIE5ESVNfQlVGRkVSIGFuZCBhbGxvY2F0ZWQgbWVtb3J5LgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBGcmVlTmRpc1BhY2tldCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQTkRJU19QQUNLRVQgIHBQYWNrZXQpCit7CisJZGV2X2tmcmVlX3NrYl9hbnkoUlRQS1RfVE9fT1NQS1QocFBhY2tldCkpOworfQorCisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorLy8gTk9URTogd2UgZG8gaGF2ZSBhbiBhc3N1bXB0aW9uIGhlcmUsIHRoYXQgQnl0ZTAgYW5kIEJ5dGUxIGFsd2F5cyByZWFzaWQgYXQgdGhlIHNhbWUKKy8vCQkJIHNjYXR0ZXIgZ2F0aGVyIGJ1ZmZlcgorTkRJU19TVEFUVVMgU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcigKKwlJTglQTkRJU19CVUZGRVIJcEZpcnN0QnVmZmVyLAorCUlOCVVDSEFSCQkJRGVzaXJlZE9mZnNldCwKKwlPVVQgUFVDSEFSCQkJcEJ5dGUwLAorCU9VVCBQVUNIQVIJCQlwQnl0ZTEpCit7CisgICAgKnBCeXRlMCA9ICooUFVDSEFSKShwRmlyc3RCdWZmZXIgKyBEZXNpcmVkT2Zmc2V0KTsKKyAgICAqcEJ5dGUxID0gKihQVUNIQVIpKHBGaXJzdEJ1ZmZlciArIERlc2lyZWRPZmZzZXQgKyAxKTsKKworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisKK3ZvaWQgUlRNUF9RdWVyeVBhY2tldEluZm8oCisJSU4gIFBORElTX1BBQ0tFVCBwUGFja2V0LAorCU9VVCBQQUNLRVRfSU5GTyAgKnBQYWNrZXRJbmZvLAorCU9VVCBQVUNIQVIJCSAqcFNyY0J1ZlZBLAorCU9VVAlVSU5UCQkgKnBTcmNCdWZMZW4pCit7CisJcFBhY2tldEluZm8tPkJ1ZmZlckNvdW50ID0gMTsKKwlwUGFja2V0SW5mby0+cEZpcnN0QnVmZmVyID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCXBQYWNrZXRJbmZvLT5QaHlzaWNhbEJ1ZmZlckNvdW50ID0gMTsKKwlwUGFja2V0SW5mby0+VG90YWxQYWNrZXRMZW5ndGggPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKworCSpwU3JjQnVmVkEgPSBHRVRfT1NfUEtUX0RBVEFQVFIocFBhY2tldCk7CisJKnBTcmNCdWZMZW4gPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKK30KKwordm9pZCBSVE1QX1F1ZXJ5TmV4dFBhY2tldEluZm8oCisJSU4gIFBORElTX1BBQ0tFVCAqcHBQYWNrZXQsCisJT1VUIFBBQ0tFVF9JTkZPICAqcFBhY2tldEluZm8sCisJT1VUIFBVQ0hBUgkJICpwU3JjQnVmVkEsCisJT1VUCVVJTlQJCSAqcFNyY0J1ZkxlbikKK3sKKwlQTkRJU19QQUNLRVQgcFBhY2tldCA9IE5VTEw7CisKKwlpZiAoKnBwUGFja2V0KQorCQlwUGFja2V0ID0gR0VUX09TX1BLVF9ORVhUKCpwcFBhY2tldCk7CisKKwlpZiAocFBhY2tldCkKKwl7CisJCXBQYWNrZXRJbmZvLT5CdWZmZXJDb3VudCA9IDE7CisJCXBQYWNrZXRJbmZvLT5wRmlyc3RCdWZmZXIgPSBHRVRfT1NfUEtUX0RBVEFQVFIocFBhY2tldCk7CisJCXBQYWNrZXRJbmZvLT5QaHlzaWNhbEJ1ZmZlckNvdW50ID0gMTsKKwkJcFBhY2tldEluZm8tPlRvdGFsUGFja2V0TGVuZ3RoID0gR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisKKwkJKnBTcmNCdWZWQSA9IEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKwkJKnBTcmNCdWZMZW4gPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKwkJKnBwUGFja2V0ID0gR0VUX09TX1BLVF9ORVhUKHBQYWNrZXQpOworCX0KKwllbHNlCisJeworCQlwUGFja2V0SW5mby0+QnVmZmVyQ291bnQgPSAwOworCQlwUGFja2V0SW5mby0+cEZpcnN0QnVmZmVyID0gTlVMTDsKKwkJcFBhY2tldEluZm8tPlBoeXNpY2FsQnVmZmVyQ291bnQgPSAwOworCQlwUGFja2V0SW5mby0+VG90YWxQYWNrZXRMZW5ndGggPSAwOworCisJCSpwU3JjQnVmVkEgPSBOVUxMOworCQkqcFNyY0J1ZkxlbiA9IDA7CisJCSpwcFBhY2tldCA9IE5VTEw7CisJfQorfQorCisvLyBub3QgeWV0IHN1cHBvcnQgTUJTUworUE5FVF9ERVYgZ2V0X25ldGRldl9mcm9tX2Jzc2lkKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisgICAgUE5FVF9ERVYgZGV2X3AgPSBOVUxMOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJZGV2X3AgPSBwQWQtPm5ldF9kZXY7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJQVNTRVJUKGRldl9wKTsKKwlyZXR1cm4gZGV2X3A7IC8qIHJldHVybiBvbmUgb2YgTUJTUyAqLworfQorCitQTkRJU19QQUNLRVQgRHVwbGljYXRlUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwlQTkRJU19QQUNLRVQJcFJldFBhY2tldCA9IE5VTEw7CisJVVNIT1JUCQkJRGF0YVNpemU7CisJVUNIQVIJCQkqcERhdGE7CisKKwlEYXRhU2l6ZSA9IChVU0hPUlQpIEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCXBEYXRhID0gKFBVQ0hBUikgR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCisKKwlza2IgPSBza2JfY2xvbmUoUlRQS1RfVE9fT1NQS1QocFBhY2tldCksIE1FTV9BTExPQ19GTEFHKTsKKwlpZiAoc2tiKQorCXsKKwkJc2tiLT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisJCXBSZXRQYWNrZXQgPSBPU1BLVF9UT19SVFBLVChza2IpOworCX0KKworCXJldHVybiBwUmV0UGFja2V0OworCit9CisKK1BORElTX1BBQ0tFVCBkdXBsaWNhdGVfcGt0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwlQTkRJU19QQUNLRVQJcFBhY2tldCA9IE5VTEw7CisKKworCWlmICgoc2tiID0gX19kZXZfYWxsb2Nfc2tiKEhkckxlbiArIERhdGFTaXplICsgMiwgTUVNX0FMTE9DX0ZMQUcpKSAhPSBOVUxMKQorCXsKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJTmRpc01vdmVNZW1vcnkoc2tiLT50YWlsLCBwSGVhZGVyODAyXzMsIEhkckxlbik7CisJCXNrYl9wdXQoc2tiLCBIZHJMZW4pOworCQlOZGlzTW92ZU1lbW9yeShza2ItPnRhaWwsIHBEYXRhLCBEYXRhU2l6ZSk7CisJCXNrYl9wdXQoc2tiLCBEYXRhU2l6ZSk7CisJCXNrYi0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgRnJvbVdoaWNoQlNTSUQpOworCQlwUGFja2V0ID0gT1NQS1RfVE9fUlRQS1Qoc2tiKTsKKwl9CisKKwlyZXR1cm4gcFBhY2tldDsKK30KKworCisjZGVmaW5lIFRLSVBfVFhfTUlDX1NJWkUJCTgKK1BORElTX1BBQ0tFVCBkdXBsaWNhdGVfcGt0X3dpdGhfVEtJUF9NSUMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYiwgKm5ld3NrYjsKKworCisJc2tiID0gUlRQS1RfVE9fT1NQS1QocFBhY2tldCk7CisJaWYgKHNrYl90YWlscm9vbShza2IpIDwgVEtJUF9UWF9NSUNfU0laRSkKKwl7CisJCS8vIGFsbG9jIGEgbmV3IHNrYiBhbmQgY29weSB0aGUgcGFja2V0CisJCW5ld3NrYiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIHNrYl9oZWFkcm9vbShza2IpLCBUS0lQX1RYX01JQ19TSVpFLCBHRlBfQVRPTUlDKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJaWYgKG5ld3NrYiA9PSBOVUxMKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFeHRlbmQgVHguTUlDIGZvciBwYWNrZXQgZmFpbGVkISwgZHJvcHBpbmcgcGFja2V0IVxuIikpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJc2tiID0gbmV3c2tiOworCX0KKworCXJldHVybiBPU1BLVF9UT19SVFBLVChza2IpOworfQorCisKKworCitQTkRJU19QQUNLRVQgQ2xvbmVQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqcFJ4UGt0OworCXN0cnVjdCBza19idWZmCSpwQ2xvbmVkUGt0OworCisJQVNTRVJUKHBQYWNrZXQpOworCXBSeFBrdCA9IFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpOworCisJLy8gY2xvbmUgdGhlIHBhY2tldAorCXBDbG9uZWRQa3QgPSBza2JfY2xvbmUocFJ4UGt0LCBNRU1fQUxMT0NfRkxBRyk7CisKKwlpZiAocENsb25lZFBrdCkKKwl7CisgICAgCS8vIHNldCB0aGUgY29ycmVjdCBkYXRhcHRyIGFuZCBkYXRhIGxlbgorICAgIAlwQ2xvbmVkUGt0LT5kZXYgPSBwUnhQa3QtPmRldjsKKyAgICAJcENsb25lZFBrdC0+ZGF0YSA9IHBEYXRhOworICAgIAlwQ2xvbmVkUGt0LT5sZW4gPSBEYXRhU2l6ZTsKKyAgICAJcENsb25lZFBrdC0+dGFpbCA9IHBDbG9uZWRQa3QtPmRhdGEgKyBwQ2xvbmVkUGt0LT5sZW47CisJCUFTU0VSVChEYXRhU2l6ZSA8IDE1MzApOworCX0KKwlyZXR1cm4gcENsb25lZFBrdDsKK30KKworLy8KKy8vIGNoYW5nZSBPUyBwYWNrZXQgRGF0YVB0ciBhbmQgRGF0YUxlbgorLy8KK3ZvaWQgIHVwZGF0ZV9vc19wYWNrZXRfaW5mbygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOICBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCXN0cnVjdCBza19idWZmCSpwT1NQa3Q7CisKKwlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworCXBPU1BrdCA9IFJUUEtUX1RPX09TUEtUKHBSeEJsay0+cFJ4UGFja2V0KTsKKworCXBPU1BrdC0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgRnJvbVdoaWNoQlNTSUQpOworCXBPU1BrdC0+ZGF0YSA9IHBSeEJsay0+cERhdGE7CisJcE9TUGt0LT5sZW4gPSBwUnhCbGstPkRhdGFTaXplOworCXBPU1BrdC0+dGFpbCA9IHBPU1BrdC0+ZGF0YSArIHBPU1BrdC0+bGVuOworfQorCisKK3ZvaWQgd2xhbl84MDJfMTFfdG9fODAyXzNfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JUFVDSEFSCQkJcEhlYWRlcjgwMl8zLAorCUlOICBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCXN0cnVjdCBza19idWZmCSpwT1NQa3Q7CisKKwlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworCUFTU0VSVChwSGVhZGVyODAyXzMpOworCisJcE9TUGt0ID0gUlRQS1RfVE9fT1NQS1QocFJ4QmxrLT5wUnhQYWNrZXQpOworCisJcE9TUGt0LT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisJcE9TUGt0LT5kYXRhID0gcFJ4QmxrLT5wRGF0YTsKKwlwT1NQa3QtPmxlbiA9IHBSeEJsay0+RGF0YVNpemU7CisJcE9TUGt0LT50YWlsID0gcE9TUGt0LT5kYXRhICsgcE9TUGt0LT5sZW47CisKKwkvLworCS8vIGNvcHkgODAyLjMgaGVhZGVyCisJLy8KKwkvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJTmRpc01vdmVNZW1vcnkoc2tiX3B1c2gocE9TUGt0LCBMRU5HVEhfODAyXzMpLCBwSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisKKwordm9pZCBhbm5vdW5jZV84MDJfM19wYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisKKwlzdHJ1Y3Qgc2tfYnVmZgkqcFJ4UGt0OworCisJQVNTRVJUKHBQYWNrZXQpOworCisJcFJ4UGt0ID0gUlRQS1RfVE9fT1NQS1QocFBhY2tldCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworICAgIC8qIFB1c2ggdXAgdGhlIHByb3RvY29sIHN0YWNrICovCisjaWZkZWYgSUtBTk9TX1ZYXzFYMAorCUlLQU5PU19EYXRhRnJhbWVSeChwQWQsIHBSeFBrdC0+ZGV2LCBwUnhQa3QsIHBSeFBrdC0+bGVuKTsKKyNlbHNlCisJcFJ4UGt0LT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHBSeFBrdCwgcFJ4UGt0LT5kZXYpOworCisvLyNpZmRlZiBDT05GSUdfNVZUX0VOSEFOQ0UKKy8vCSooaW50KikocFJ4UGt0LT5jYikgPSBCUklER0VfVEFHOworLy8jZW5kaWYKKwluZXRpZl9yeChwUnhQa3QpOworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KK30KKworCitQUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNUCitydF9nZXRfc2dfbGlzdF9mcm9tX3BhY2tldChQTkRJU19QQUNLRVQgcFBhY2tldCwgUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNUICpzZykKK3sKKwlzZy0+TnVtYmVyT2ZFbGVtZW50cyA9IDE7CisJc2ctPkVsZW1lbnRzWzBdLkFkZHJlc3MgPSAgR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCXNnLT5FbGVtZW50c1swXS5MZW5ndGggPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKwlyZXR1cm4gKHNnKTsKK30KKwordm9pZCBoZXhfZHVtcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnBTcmNCdWZWQSwgdW5zaWduZWQgaW50IFNyY0J1ZkxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpwdDsKKwlpbnQgeDsKKworCWlmIChSVERlYnVnTGV2ZWwgPCBSVF9ERUJVR19UUkFDRSkKKwkJcmV0dXJuOworCisJcHQgPSBwU3JjQnVmVkE7CisJcHJpbnRrKCIlczogJXAsIGxlbiA9ICVkXG4iLHN0ciwgIHBTcmNCdWZWQSwgU3JjQnVmTGVuKTsKKwlmb3IgKHg9MDsgeDxTcmNCdWZMZW47IHgrKykKKwl7CisJCWlmICh4ICUgMTYgPT0gMCkKKwkJCXByaW50aygiMHglMDR4IDogIiwgeCk7CisJCXByaW50aygiJTAyeCAiLCAoKHVuc2lnbmVkIGNoYXIpcHRbeF0pKTsKKwkJaWYgKHglMTYgPT0gMTUpIHByaW50aygiXG4iKTsKKwl9CisJcHJpbnRrKCJcbiIpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU2VuZCBsb2cgbWVzc2FnZSB0aHJvdWdoIHdpcmVsZXNzIGV2ZW50CisKKwkJU3VwcG9ydCBzdGFuZGFyZCBpd19ldmVudCB3aXRoIElXRVZDVVNUT00uIEl0IGlzIHVzZWQgYmVsb3cuCisKKwkJaXdyZXFfZGF0YS5kYXRhLmZsYWdzIGlzIHVzZWQgdG8gc3RvcmUgZXZlbnRfZmxhZyB0aGF0IGlzIGRlZmluZWQgYnkgdXNlci4KKwkJaXdyZXFfZGF0YS5kYXRhLmxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBldmVudCBsb2cuCisKKwkJVGhlIGZvcm1hdCBvZiB0aGUgZXZlbnQgbG9nIGlzIGNvbXBvc2VkIG9mIHRoZSBlbnRyeSdzIE1BQyBhZGRyZXNzIGFuZAorCQl0aGUgZGVzaXJlZCBsb2cgbWVzc2FnZSAocmVmZXIgdG8gcFdpcmVsZXNzRXZlbnRUZXh0KS4KKworCQkJZXg6IDExOjIyOjMzOjQ0OjU1OjY2IGhhcyBhc3NvY2lhdGVkIHN1Y2Nlc3NmdWxseQorCisJCXAucy4gVGhlIHJlcXVpcmVtZW50IG9mIFdpcmVsZXNzIEV4dGVuc2lvbiBpcyB2MTUgb3IgbmV3ZXIuCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBTZW5kV2lyZWxlc3NFdmVudCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlFdmVudF9mbGFnLAorCUlOCVBVQ0hBUiAJCQlwQWRkciwKKwlJTglVQ0hBUgkJCUJzc0lkeCwKKwlJTglDSEFSCQkJUnNzaSkKK3sKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTUKKworCXVuaW9uIAlpd3JlcV9kYXRhICAgICAgd3JxdTsKKwlQVUNIQVIgCXBCdWYgPSBOVUxMLCBwQnVmUHRyID0gTlVMTDsKKwlVU0hPUlQJZXZlbnQsIHR5cGUsIEJ1ZkxlbjsKKwlVQ0hBUglldmVudF90YWJsZV9sZW4gPSAwOworCisJdHlwZSA9IEV2ZW50X2ZsYWcgJiAweEZGMDA7CisJZXZlbnQgPSBFdmVudF9mbGFnICYgMHgwMEZGOworCisJc3dpdGNoICh0eXBlKQorCXsKKwkJY2FzZSBJV19TWVNfRVZFTlRfRkxBR19TVEFSVDoKKwkJCWV2ZW50X3RhYmxlX2xlbiA9IElXX1NZU19FVkVOVF9UWVBFX05VTTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVdfU1BPT0ZfRVZFTlRfRkxBR19TVEFSVDoKKwkJCWV2ZW50X3RhYmxlX2xlbiA9IElXX1NQT09GX0VWRU5UX1RZUEVfTlVNOworCQkJYnJlYWs7CisKKwkJY2FzZSBJV19GTE9PRF9FVkVOVF9GTEFHX1NUQVJUOgorCQkJZXZlbnRfdGFibGVfbGVuID0gSVdfRkxPT0RfRVZFTlRfVFlQRV9OVU07CisJCQlicmVhazsKKwl9CisKKwlpZiAoZXZlbnRfdGFibGVfbGVuID09IDApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IFRoZSB0eXBlKCUweDAyeCkgaXMgbm90IHZhbGlkLlxuIiwgX19GVU5DVElPTl9fLCB0eXBlKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZXZlbnQgPj0gZXZlbnRfdGFibGVfbGVuKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBUaGUgZXZlbnQoJTB4MDJ4KSBpcyBub3QgdmFsaWQuXG4iLCBfX0ZVTkNUSU9OX18sIGV2ZW50KSk7CisJCXJldHVybjsKKwl9CisKKwkvL0FsbG9jYXRlIG1lbW9yeSBhbmQgY29weSB0aGUgbXNnLgorCWlmKChwQnVmID0ga21hbGxvYyhJV19DVVNUT01fTUFYX0xFTiwgR0ZQX0FUT01JQykpICE9IE5VTEwpCisJeworCQkvL1ByZXBhcmUgdGhlIHBheWxvYWQKKwkJbWVtc2V0KHBCdWYsIDAsIElXX0NVU1RPTV9NQVhfTEVOKTsKKworCQlwQnVmUHRyID0gcEJ1ZjsKKworCQlpZiAocEFkZHIpCisJCQlwQnVmUHRyICs9IHNwcmludGYocEJ1ZlB0ciwgIihSVDI4NjApIFNUQSglMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCkgIiwgUFJJTlRfTUFDKHBBZGRyKSk7CisJCWVsc2UgaWYgKEJzc0lkeCA8IE1BWF9NQlNTSURfTlVNKQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIoUlQyODYwKSBCU1MocmElZCkgIiwgQnNzSWR4KTsKKwkJZWxzZQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIoUlQyODYwKSAiKTsKKworCQlpZiAodHlwZSA9PSBJV19TWVNfRVZFTlRfRkxBR19TVEFSVCkKKwkJCXBCdWZQdHIgKz0gc3ByaW50ZihwQnVmUHRyLCAiJXMiLCBwV2lyZWxlc3NTeXNFdmVudFRleHRbZXZlbnRdKTsKKwkJZWxzZSBpZiAodHlwZSA9PSBJV19TUE9PRl9FVkVOVF9GTEFHX1NUQVJUKQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIlcyAoUlNTST0lZCkiLCBwV2lyZWxlc3NTcG9vZkV2ZW50VGV4dFtldmVudF0sIFJzc2kpOworCQllbHNlIGlmICh0eXBlID09IElXX0ZMT09EX0VWRU5UX0ZMQUdfU1RBUlQpCisJCQlwQnVmUHRyICs9IHNwcmludGYocEJ1ZlB0ciwgIiVzIiwgcFdpcmVsZXNzRmxvb2RFdmVudFRleHRbZXZlbnRdKTsKKwkJZWxzZQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIlcyIsICJ1bmtub3duIGV2ZW50Iik7CisKKwkJcEJ1ZlB0cltwQnVmUHRyIC0gcEJ1Zl0gPSAnXDAnOworCQlCdWZMZW4gPSBwQnVmUHRyIC0gcEJ1ZjsKKworCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJICAgIHdycXUuZGF0YS5mbGFncyA9IEV2ZW50X2ZsYWc7CisJCXdycXUuZGF0YS5sZW5ndGggPSBCdWZMZW47CisKKwkJLy9zZW5kIHdpcmVsZXNzIGV2ZW50CisJICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgcEJ1Zik7CisKKwkJLy9EQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyA6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIHBCdWYpKTsKKworCQlrZnJlZShwQnVmKTsKKwl9CisJZWxzZQorCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Igd2lyZWxlc3MgZXZlbnQuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKyNlbHNlCisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBUaGUgV2lyZWxlc3MgRXh0ZW5zaW9uIE1VU1QgYmUgdjE1IG9yIG5ld2VyLlxuIiwgX19GVU5DVElPTl9fKSk7CisjZW5kaWYgIC8qIFdJUkVMRVNTX0VYVCA+PSAxNSAqLworfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK3ZvaWQgc2VuZF9tb25pdG9yX3BhY2tldHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaykKK3sKKyAgICBzdHJ1Y3Qgc2tfYnVmZgkqcE9TUGt0OworICAgIHdsYW5fbmdfcHJpc20yX2hlYWRlciAqcGg7CisgICAgaW50IHJhdGVfaW5kZXggPSAwOworICAgIFVTSE9SVCBoZWFkZXJfbGVuID0gMDsKKyAgICBVQ0hBUiB0ZW1wX2hlYWRlcls0MF0gPSB7MH07CisKKyAgICB1X2ludDMyX3QgcmFsaW5rcmF0ZVsyNTZdID0gezIsNCwxMSwyMiwgMTIsMTgsMjQsMzYsNDgsNzIsOTYsICAxMDgsICAgMTA5LCAxMTAsIDExMSwgMTEyLCAxMywgMjYsIDM5LCA1Miw3OCwxMDQsIDExNywgMTMwLCAyNiwgNTIsIDc4LDEwNCwgMTU2LCAyMDgsIDIzNCwgMjYwLCAyNywgNTQsODEsMTA4LDE2MiwgMjE2LCAyNDMsIDI3MCwgLy8gTGFzdCAzOAorCTU0LCAxMDgsIDE2MiwgMjE2LCAzMjQsIDQzMiwgNDg2LCA1NDAsICAxNCwgMjksIDQzLCA1NywgODcsIDExNSwgMTMwLCAxNDQsIDI5LCA1OSw4NywxMTUsIDE3MywgMjMwLDI2MCwgMjg4LCAzMCwgNjAsOTAsMTIwLDE4MCwyNDAsMjcwLDMwMCw2MCwxMjAsMTgwLDI0MCwzNjAsNDgwLDU0MCw2MDAsIDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsCisJMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODB9OworCisKKyAgICBBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOworICAgIGlmIChwUnhCbGstPkRhdGFTaXplIDwgMTApCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IFNpemUgaXMgdG9vIHNtYWxsISAoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIHBSeEJsay0+RGF0YVNpemUpKTsKKwkJZ290byBlcnJfZnJlZV9za19idWZmOworICAgIH0KKworICAgIGlmIChwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikgPiBSWF9CVUZGRVJfQUdHUkVTSVpFKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBTaXplIGlzIHRvbyBsYXJnZSEgKCVkKVxuIiwgX19GVU5DVElPTl9fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKKwkJZ290byBlcnJfZnJlZV9za19idWZmOworICAgIH0KKworICAgIHBPU1BrdCA9IFJUUEtUX1RPX09TUEtUKHBSeEJsay0+cFJ4UGFja2V0KTsKKwlwT1NQa3QtPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEJTUzApOworICAgIGlmIChwUnhCbGstPnBIZWFkZXItPkZDLlR5cGUgPT0gQlRZUEVfREFUQSkKKyAgICB7CisgICAgICAgIHBSeEJsay0+RGF0YVNpemUgLT0gTEVOR1RIXzgwMl8xMTsKKyAgICAgICAgaWYgKChwUnhCbGstPnBIZWFkZXItPkZDLlRvRHMgPT0gMSkgJiYKKyAgICAgICAgICAgIChwUnhCbGstPnBIZWFkZXItPkZDLkZyRHMgPT0gMSkpCisgICAgICAgICAgICBoZWFkZXJfbGVuID0gTEVOR1RIXzgwMl8xMV9XSVRIX0FERFI0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBoZWFkZXJfbGVuID0gTEVOR1RIXzgwMl8xMTsKKworICAgICAgICAvLyBRT1MKKyAgICAJaWYgKHBSeEJsay0+cEhlYWRlci0+RkMuU3ViVHlwZSAmIDB4MDgpCisgICAgCXsKKyAgICAJICAgIGhlYWRlcl9sZW4gKz0gMjsKKyAgICAJCS8vIERhdGEgc2tpcCBRT1MgY29udG9ybCBmaWVsZAorICAgIAkJcFJ4QmxrLT5EYXRhU2l6ZSAtPTI7CisgICAgCX0KKworICAgIAkvLyBPcmRlciBiaXQ6IEEtUmFsaW5rIG9yIEhUQysKKyAgICAJaWYgKHBSeEJsay0+cEhlYWRlci0+RkMuT3JkZXIpCisgICAgCXsKKyAgICAJICAgIGhlYWRlcl9sZW4gKz0gNDsKKwkJCS8vIERhdGEgc2tpcCBIVEMgY29udG9ybCBmaWVsZAorCQkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSA0OworICAgIAl9CisKKyAgICAgICAgLy8gQ29weSBIZWFkZXIKKyAgICAgICAgaWYgKGhlYWRlcl9sZW4gPD0gNDApCisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSh0ZW1wX2hlYWRlciwgcFJ4QmxrLT5wRGF0YSwgaGVhZGVyX2xlbik7CisKKyAgICAgICAgLy8gc2tpcCBIVyBwYWRkaW5nCisgICAgCWlmIChwUnhCbGstPlJ4RC5MMlBBRCkKKyAgICAJICAgIHBSeEJsay0+cERhdGEgKz0gKGhlYWRlcl9sZW4gKyAyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcFJ4QmxrLT5wRGF0YSArPSBoZWFkZXJfbGVuOworICAgIH0gLy9lbmQgaWYKKworCisJaWYgKHBSeEJsay0+RGF0YVNpemUgPCBwT1NQa3QtPmxlbikgeworICAgICAgICBza2JfdHJpbShwT1NQa3QscFJ4QmxrLT5EYXRhU2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2tiX3B1dChwT1NQa3QsKHBSeEJsay0+RGF0YVNpemUgLSBwT1NQa3QtPmxlbikpOworICAgIH0gLy9lbmQgaWYKKworICAgIGlmICgocFJ4QmxrLT5wRGF0YSAtIHBPU1BrdC0+ZGF0YSkgPiAwKSB7CisJICAgIHNrYl9wdXQocE9TUGt0LChwUnhCbGstPnBEYXRhIC0gcE9TUGt0LT5kYXRhKSk7CisJICAgIHNrYl9wdWxsKHBPU1BrdCwocFJ4QmxrLT5wRGF0YSAtIHBPU1BrdC0+ZGF0YSkpOworICAgIH0gLy9lbmQgaWYKKworICAgIGlmIChza2JfaGVhZHJvb20ocE9TUGt0KSA8IChzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKSsgaGVhZGVyX2xlbikpIHsKKyAgICAgICAgaWYgKHBza2JfZXhwYW5kX2hlYWQocE9TUGt0LCAoc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikgKyBoZWFkZXJfbGVuKSwgMCwgR0ZQX0FUT01JQykpIHsKKwkgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogUmVhbGxvY2F0ZSBoZWFkZXIgc2l6ZSBvZiBza19idWZmIGZhaWwhXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJCWdvdG8gZXJyX2ZyZWVfc2tfYnVmZjsKKwkgICAgfSAvL2VuZCBpZgorICAgIH0gLy9lbmQgaWYKKworICAgIGlmIChoZWFkZXJfbGVuID4gMCkKKyAgICAgICAgTmRpc01vdmVNZW1vcnkoc2tiX3B1c2gocE9TUGt0LCBoZWFkZXJfbGVuKSwgdGVtcF9oZWFkZXIsIGhlYWRlcl9sZW4pOworCisgICAgcGggPSAod2xhbl9uZ19wcmlzbTJfaGVhZGVyICopIHNrYl9wdXNoKHBPU1BrdCwgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpOworCU5kaXNaZXJvTWVtb3J5KHBoLCBzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKSk7CisKKyAgICBwaC0+bXNnY29kZQkJICAgID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybTsKKwlwaC0+bXNnbGVuCQkgICAgPSBzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKTsKKwlzdHJjcHkocGgtPmRldm5hbWUsIHBBZC0+bmV0X2Rldi0+bmFtZSk7CisKKyAgICBwaC0+aG9zdHRpbWUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ob3N0dGltZTsKKwlwaC0+aG9zdHRpbWUuc3RhdHVzID0gMDsKKwlwaC0+aG9zdHRpbWUubGVuID0gNDsKKwlwaC0+aG9zdHRpbWUuZGF0YSA9IGppZmZpZXM7CisKKwlwaC0+bWFjdGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX21hY3RpbWU7CisJcGgtPm1hY3RpbWUuc3RhdHVzID0gMDsKKwlwaC0+bWFjdGltZS5sZW4gPSAwOworCXBoLT5tYWN0aW1lLmRhdGEgPSAwOworCisgICAgcGgtPmlzdHguZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9pc3R4OworCXBoLT5pc3R4LnN0YXR1cyA9IDA7CisJcGgtPmlzdHgubGVuID0gMDsKKwlwaC0+aXN0eC5kYXRhID0gMDsKKworICAgIHBoLT5jaGFubmVsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fY2hhbm5lbDsKKwlwaC0+Y2hhbm5lbC5zdGF0dXMgPSAwOworCXBoLT5jaGFubmVsLmxlbiA9IDQ7CisKKyAgICBwaC0+Y2hhbm5lbC5kYXRhID0gKHVfaW50MzJfdClwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCisgICAgcGgtPnJzc2kuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yc3NpOworCXBoLT5yc3NpLnN0YXR1cyA9IDA7CisJcGgtPnJzc2kubGVuID0gNDsKKyAgICBwaC0+cnNzaS5kYXRhID0gKHVfaW50MzJfdClSVE1QTWF4UnNzaShwQWQsIENvbnZlcnRUb1Jzc2kocEFkLCBwUnhCbGstPnBSeFdJLT5SU1NJMCwgUlNTSV8wKSwgQ29udmVydFRvUnNzaShwQWQsIHBSeEJsay0+cFJ4V0ktPlJTU0kxLCBSU1NJXzEpLCBDb252ZXJ0VG9Sc3NpKHBBZCwgcFJ4QmxrLT5wUnhXSS0+UlNTSTIsIFJTU0lfMikpOzsKKworCXBoLT5zaWduYWwuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zaWduYWw7CisJcGgtPnNpZ25hbC5zdGF0dXMgPSAwOworCXBoLT5zaWduYWwubGVuID0gNDsKKwlwaC0+c2lnbmFsLmRhdGEgPSAwOyAvL3Jzc2kgKyBub2lzZTsKKworCXBoLT5ub2lzZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlOworCXBoLT5ub2lzZS5zdGF0dXMgPSAwOworCXBoLT5ub2lzZS5sZW4gPSA0OworCXBoLT5ub2lzZS5kYXRhID0gMDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgIGlmIChwUnhCbGstPnBSeFdJLT5QSFlNT0RFID49IE1PREVfSFRNSVgpCisgICAgeworICAgIAlyYXRlX2luZGV4ID0gMTYgKyAoKFVDSEFSKXBSeEJsay0+cFJ4V0ktPkJXICoxNikgKyAoKFVDSEFSKXBSeEJsay0+cFJ4V0ktPlNob3J0R0kgKjMyKSArICgoVUNIQVIpcFJ4QmxrLT5wUnhXSS0+TUNTKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCWlmIChwUnhCbGstPnBSeFdJLT5QSFlNT0RFID09IE1PREVfT0ZETSkKKyAgICAJcmF0ZV9pbmRleCA9IChVQ0hBUikocFJ4QmxrLT5wUnhXSS0+TUNTKSArIDQ7CisgICAgZWxzZQorICAgIAlyYXRlX2luZGV4ID0gKFVDSEFSKShwUnhCbGstPnBSeFdJLT5NQ1MpOworICAgIGlmIChyYXRlX2luZGV4IDwgMCkKKyAgICAgICAgcmF0ZV9pbmRleCA9IDA7CisgICAgaWYgKHJhdGVfaW5kZXggPiAyNTUpCisgICAgICAgIHJhdGVfaW5kZXggPSAyNTU7CisKKwlwaC0+cmF0ZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3JhdGU7CisJcGgtPnJhdGUuc3RhdHVzID0gMDsKKwlwaC0+cmF0ZS5sZW4gPSA0OworICAgIHBoLT5yYXRlLmRhdGEgPSByYWxpbmtyYXRlW3JhdGVfaW5kZXhdOworCisJcGgtPmZybWxlbi5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2ZybWxlbjsKKyAgICBwaC0+ZnJtbGVuLnN0YXR1cyA9IDA7CisJcGgtPmZybWxlbi5sZW4gPSA0OworCXBoLT5mcm1sZW4uZGF0YQk9ICh1X2ludDMyX3QpcFJ4QmxrLT5EYXRhU2l6ZTsKKworCisgICAgcE9TUGt0LT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisgICAgcE9TUGt0LT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHBPU1BrdCwgcE9TUGt0LT5kZXYpOworICAgIHBPU1BrdC0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKyAgICBuZXRpZl9yeChwT1NQa3QpOworCisgICAgcmV0dXJuOworCitlcnJfZnJlZV9za19idWZmOgorCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJcmV0dXJuOworCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwordm9pZCBydG1wX29zX3RocmVhZF9pbml0KFBVQ0hBUiBwVGhyZWFkTmFtZSwgUFZPSUQgcE5vdGlmeSkKK3sKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwlkYWVtb25pemUocFRocmVhZE5hbWUgLyoiJXMiLHBBZC0+bmV0X2Rldi0+bmFtZSovKTsKKworCWFsbG93X3NpZ25hbChTSUdURVJNKTsKKwlhbGxvd19zaWduYWwoU0lHS0lMTCk7CisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYWVtb25pemUoKTsKKwlyZXBhcmVudF90b19pbml0KCk7CisJc3RyY3B5KGN1cnJlbnQtPmNvbW0sIHBUaHJlYWROYW1lKTsKKworCXNpZ2luaXRzZXRpbnYoJmN1cnJlbnQtPmJsb2NrZWQsIHNpZ21hc2soU0lHVEVSTSkgfCBzaWdtYXNrKFNJR0tJTEwpKTsKKworCS8qIEFsbG93IGludGVyY2VwdGlvbiBvZiBTSUdLSUxMIG9ubHkKKwkgKiBEb24ndCBhbGxvdyBvdGhlciBzaWduYWxzIHRvIGludGVycnVwdCB0aGUgdHJhbnNtaXNzaW9uICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDIyKQorCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5zaWdtYXNrX2xvY2ssIGZsYWdzKTsKKwlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCXJlY2FsY19zaWdwZW5kaW5nKGN1cnJlbnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPnNpZ21hc2tfbG9jaywgZmxhZ3MpOworI2VuZGlmCisjZW5kaWYKKworICAgIC8qIHNpZ25hbCB0aGF0IHdlJ3ZlIHN0YXJ0ZWQgdGhlIHRocmVhZCAqLworCWNvbXBsZXRlKHBOb3RpZnkpOworCit9CisKK3ZvaWQgUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCXsKKwkJaWYgKHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID09IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkKQorCQl7CisJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19TVEFfTElOS1VQX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19TVEFfTElOS0RPV05fRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDBkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2xpbnV4LmgKQEAgLTAsMCArMSw4ODcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgUHJvZ3JhbTogICAgcnRfbGludXguYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgQ3JlYXRlZDogICAgNC8yMS8yMDA2IDE6MTc6MzggUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgQXV0aG9yOiAgICAgV3UgWGktS3VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgQ29tbWVudHM6ICAgYGRlc2NyaXB0aW9uYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEhpc3Rvcnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFJldmlzaW9uIDEuMSA0LzIxLzIwMDYgMToxNzozOCBQTSAgeHNpa3VuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEluaXRpYWwgcmV2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInJ0bXBfdHlwZS5oIgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworCisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisvLyBsb2FkIGZpcm13YXJlCisjZGVmaW5lIF9fS0VSTkVMX1NZU0NBTExTX18KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisKKyNkZWZpbmUgTUVNX0FMTE9DX0ZMQUcgICAgICAoR0ZQX0FUT01JQykgLy8oR0ZQX0RNQSB8IEdGUF9BVE9NSUMpCisKKyNpZm5kZWYgSUZOQU1TSVoKKyNkZWZpbmUgSUZOQU1TSVogMTYKKyNlbmRpZgorCisvLyNkZWZpbmUgQ09ORklHX0NLSVBfU1VQUE9SVAorCisjdW5kZWYgX19pbmxpbmUKKyNkZWZpbmUgX19pbmxpbmUJICAgc3RhdGljIGlubGluZQorCit0eXBlZGVmIGludCAoKkhBUkRfU1RBUlRfWE1JVF9GVU5DKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CisKKy8vIGFkZCBieSBrYXRoeQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgU1RBX1BST0ZJTEVfUEFUSAkJCSIvZXRjL1dpcmVsZXNzL1JUMjg3MFNUQS9SVDI4NzBTVEEuZGF0IgorI2RlZmluZSBTVEFfUlQyODcwX0lNQUdFX0ZJTEVfTkFNRSAgIi9ldGMvV2lyZWxlc3MvUlQyODcwU1RBL3J0Mjg3MC5iaW4iCisjZGVmaW5lIFNUQV9OSUNfREVWSUNFX05BTUUJCQkiUlQyODcwU1RBIgorI2RlZmluZSBTVEFfRFJJVkVSX1ZFUlNJT04JCQkiMi4wLjEuMCIKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKyNkZWZpbmUgQ0FSRF9JTkZPX1BBVEgJCQkiL2V0Yy9XaXJlbGVzcy9SVDI4NzBTVEEvUlQyODcwU1RBQ2FyZC5kYXQiCisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCisjZGVmaW5lIFJUTVBfVElNRV9BRlRFUihhLGIpCQlcCisJKHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQgbG9uZylhKSAmJiBcCisJIHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQgbG9uZyliKSAmJiBcCisJICgobG9uZykoYikgLSAobG9uZykoYSkgPCAwKSkKKworI2RlZmluZSBSVE1QX1RJTUVfQUZURVJfRVEoYSxiKQlcCisJKHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQgbG9uZylhKSAmJiBcCisJIHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCAodW5zaWduZWQgbG9uZyliKSAmJiBcCisJICgobG9uZykoYSkgLSAobG9uZykoYikgPj0gMCkpCisjZGVmaW5lIFJUTVBfVElNRV9CRUZPUkUoYSxiKQlSVE1QX1RJTUVfQUZURVJfRVEoYixhKQorI2Vsc2UKKyNkZWZpbmUgUlRNUF9USU1FX0FGVEVSKGEsYikgdGltZV9hZnRlcihhLCBiKQorI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisjZGVmaW5lIFJUX01PRF9JTkNfVVNFX0NPVU5UKCkgXAorCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSBcCisJeyBcCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBjYW5ub3QgcmVzZXJ2ZSBtb2R1bGVcbiIsIF9fRlVOQ1RJT05fXykpOyBcCisJCXJldHVybiAtMTsgXAorCX0KKworI2RlZmluZSBSVF9NT0RfREVDX1VTRV9DT1VOVCgpIG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworI2Vsc2UKKyNkZWZpbmUgUlRfTU9EX0lOQ19VU0VfQ09VTlQoKQlNT0RfSU5DX1VTRV9DT1VOVDsKKyNkZWZpbmUgUlRfTU9EX0RFQ19VU0VfQ09VTlQoKSBNT0RfREVDX1VTRV9DT1VOVDsKKyNlbmRpZgorCisjZGVmaW5lIE9TX0haCQkJSFoKKworI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MJNgorCisjZGVmaW5lIElOCisjZGVmaW5lIE9VVAorCisjZGVmaW5lIE5ESVNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQKKyNkZWZpbmUgTkRJU19TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTkRJU19TVEFUVVNfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCQkJCTB4MDIKKyNkZWZpbmUgTkRJU19TVEFUVVNfUkVTT1VSQ0VTICAgICAgICAgICAgICAgICAgIDB4MDMKKworI2RlZmluZSBNSU5fTkVUX0RFVklDRV9GT1JfQUlECQkJMHgwMAkJLy8weDAwfjB4M2YKKyNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX01CU1NJRAkJMHgwMAkJLy8weDAwLDB4MTAsMHgyMCwweDMwCisjZGVmaW5lIE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMJCQkweDEwCQkvLzB4NDAsMHg1MCwweDYwLDB4NzAKKyNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX0FQQ0xJCQkweDIwCisjZGVmaW5lIE1JTl9ORVRfREVWSUNFX0ZPUl9NRVNICQkJMHgzMAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBNSU5fTkVUX0RFVklDRV9GT1JfRExTCQkJMHg0MAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRAkJMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkJMQorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJMgorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJMworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitzdHJ1Y3Qgb3NfbG9jayAgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgbG9uZyAgCWZsYWdzOworfTsKKworCitzdHJ1Y3Qgb3NfY29va2llIHsKKworI2lmZGVmIFJUMjg3MAorCXN0cnVjdCB1c2JfZGV2aWNlCQkqcFVzYl9EZXY7CisKKwlzdHJ1Y3QgcGlkICoJCU1MTUVUaHJfcGlkOworCXN0cnVjdCBwaWQgKgkJUlRVU0JDbWRUaHJfcGlkOworCXN0cnVjdCBwaWQgKgkJVGltZXJRVGhyX3BpZDsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJcnhfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJbWdtdF9kbWFfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJYWMwX2RtYV9kb25lX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IAlhYzFfZG1hX2RvbmVfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCWFjMl9kbWFfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJYWMzX2RtYV9kb25lX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IAloY2NhX2RtYV9kb25lX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXRidHRfdGFzazsKKyNpZmRlZiBSVDI4NzAKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJbnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlydHNfZnJhbWVfY29tcGxldGVfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcHNwb2xsX2ZyYW1lX2NvbXBsZXRlX3Rhc2s7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworCXVuc2lnbmVkIGxvbmcJCQlhcGRfcGlkOyAvLzgwMi4xeCBkYWVtb24gcGlkCisJSU5UCQkJCQkJaW9jdGxfaWZfdHlwZTsKKwlJTlQgCQkJCQlpb2N0bF9pZjsKK307CisKK3R5cGVkZWYgc3RydWN0IF9WSVJUVUFMX0FEQVBURVIKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKlJ0bXBEZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpWaXJ0dWFsRGV2OworfSBWSVJUVUFMX0FEQVBURVIsIFBWSVJUVUFMX0FEQVBURVI7CisKKyN1bmRlZiAgQVNTRVJUCisjZGVmaW5lIEFTU0VSVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICghKHgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyBfX0ZJTEVfXyAiOiVkIGFzc2VydCAiICN4ICJmYWlsZWRcbiIsIF9fTElORV9fKTsgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK3R5cGVkZWYgc3RydWN0IG9zX2Nvb2tpZQkqIFBPU19DT09LSUU7Cit0eXBlZGVmIHN0cnVjdCBwY2lfZGV2IAkJKiBQUENJX0RFVjsKK3R5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UJKiBQTkVUX0RFVjsKK3R5cGVkZWYgdm9pZAkJCQkqIFBORElTX1BBQ0tFVDsKK3R5cGVkZWYgY2hhcgkJCQlORElTX1BBQ0tFVDsKK3R5cGVkZWYgUE5ESVNfUEFDS0VUCQkqIFBQTkRJU19QQUNLRVQ7Cit0eXBlZGVmCWRtYV9hZGRyX3QJCQlORElTX1BIWVNJQ0FMX0FERFJFU1M7Cit0eXBlZGVmCWRtYV9hZGRyX3QJCQkqIFBORElTX1BIWVNJQ0FMX0FERFJFU1M7CisvL3R5cGVkZWYgc3RydWN0IHRpbWVyX2xpc3QJUkFMSU5LX1RJTUVSX1NUUlVDVDsKKy8vdHlwZWRlZiBzdHJ1Y3QgdGltZXJfbGlzdAkqIFBSQUxJTktfVElNRVJfU1RSVUNUOworLy90eXBlZGVmIHN0cnVjdCBvc19sb2NrCQlORElTX1NQSU5fTE9DSzsKK3R5cGVkZWYgc3BpbmxvY2tfdAkJCU5ESVNfU1BJTl9MT0NLOwordHlwZWRlZiBzdHJ1Y3QgdGltZXJfbGlzdAlORElTX01JTklQT1JUX1RJTUVSOwordHlwZWRlZiB2b2lkCQkJCSogTkRJU19IQU5ETEU7Cit0eXBlZGVmIGNoYXIgCQkJCSogUE5ESVNfQlVGRkVSOworCisKKwordm9pZCBoZXhfZHVtcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnBTcmNCdWZWQSwgdW5zaWduZWQgaW50IFNyY0J1Zkxlbik7CisKK2RtYV9hZGRyX3QgbGludXhfcGNpX21hcF9zaW5nbGUodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgc2RfaWR4LCBpbnQgZGlyZWN0aW9uKTsKK3ZvaWQgbGludXhfcGNpX3VubWFwX3NpbmdsZSh2b2lkICpoYW5kbGUsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNT1ZFIFRPIHJ0bXAuaCA/CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBQS1RTUkNfTkRJUyAgICAgICAgICAgICAweDdmCisjZGVmaW5lIFBLVFNSQ19EUklWRVIgICAgICAgICAgIDB4MGYKKyNkZWZpbmUgUFJJTlRfTUFDKGFkZHIpCVwKKwlhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLCBhZGRyWzNdLCBhZGRyWzRdLCBhZGRyWzVdCisKKworI2RlZmluZSBSVDI4NjBfUENJX0RFVklDRV9JRAkJMHgwNjAxCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgUENJX01BUF9TSU5HTEUoX2hhbmRsZSwgX3B0ciwgX3NpemUsIF9kaXIpIChVTE9ORykwCisKKyNkZWZpbmUgUENJX1VOTUFQX1NJTkdMRShfaGFuZGxlLCBfcHRyLCBfc2l6ZSwgX2RpcikKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisjZGVmaW5lIEJFQUNPTl9GUkFNRV9ETUFfQ0FDSEVfV0JBQ0soX3B0ciwgX3NpemUpCVwKKwlkbWFfY2FjaGVfd2JhY2soX3B0ciwgX3NpemUpCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworI2RlZmluZSBOZGlzTUluZGljYXRlU3RhdHVzKF93LCBfeCwgX3ksIF96KQorCisKK3R5cGVkZWYgc3RydWN0IHRpbWVyX2xpc3QJUlRNUF9PU19USU1FUjsKKworI2lmZGVmIFJUMjg3MAorLyogLS0tLS0tLS0tLS0tLS0tLS0gVGltZXIgUmVsYXRlZCBNQVJDTyAtLS0tLS0tLS0tLS0tLS0qLworLy8gSW4gUlQyODcwLCB3ZSBoYXZlIGEgbG90IG9mIHRpbWVyIGZ1bmN0aW9ucyBhbmQgd2lsbCByZWFkL3dyaXRlIHJlZ2lzdGVyLCBpdCdzCisvLwlub3QgYWxsb3dlZCBpbiBMaW51eCBVU0Igc3ViLXN5c3RlbSB0byBkbyBpdCAoIGJlY2F1c2Ugb2Ygc2xlZXAgaXNzdWUgd2hlbiBzdWJtaXQKKy8vICB0byBjdHJsIHBpcGUpLiBTbyB3ZSBuZWVkIGEgd3JhcHBlciBmdW5jdGlvbiB0byB0YWtlIGNhcmUgaXQuCisKK3R5cGVkZWYgVk9JRCAoKlJUMjg3MF9USU1FUl9IQU5ETEUpKAorCUlOICBQVk9JRCAgIFN5c3RlbVNwZWNpZmljMSwKKwlJTiAgUFZPSUQgICBGdW5jdGlvbkNvbnRleHQsCisJSU4gIFBWT0lEICAgU3lzdGVtU3BlY2lmaWMyLAorCUlOICBQVk9JRCAgIFN5c3RlbVNwZWNpZmljMyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwordHlwZWRlZiBzdHJ1Y3QgIF9SQUxJTktfVElNRVJfU1RSVUNUICAgIHsKKyAgICBSVE1QX09TX1RJTUVSCQlUaW1lck9iajsgICAgICAgLy8gTmRpcyBUaW1lciBvYmplY3QKKwlCT09MRUFOCQkJCVZhbGlkOwkJCS8vIFNldCB0byBUcnVlIHdoZW4gY2FsbCBSVE1QSW5pdFRpbWVyCisgICAgQk9PTEVBTiAgICAgICAgICAgICBTdGF0ZTsgICAgICAgICAgLy8gVHJ1ZSBpZiB0aW1lciBjYW5jZWxsZWQKKyAgICBCT09MRUFOCSAgICAgIAkJUGVyaW9kaWNUeXBlOwkvLyBUcnVlIGlmIHRpbWVyIGlzIHBlcmlvZGljIHRpbWVyCisgICAgQk9PTEVBTiAgICAgICAgICAgICBSZXBlYXQ7ICAgICAgICAgLy8gVHJ1ZSBpZiBwZXJpb2RpYyB0aW1lcgorICAgIFVMT05HICAgICAgICAgICAgICAgVGltZXJWYWx1ZTsgICAgIC8vIFRpbWVyIHZhbHVlIGluIG1pbGxpc2Vjb25kcworCVVMT05HCQkJCWNvb2tpZTsJCQkvLyBvcyBzcGVjaWZpYyBvYmplY3QKKyNpZmRlZiBSVDI4NzAKKwlSVDI4NzBfVElNRVJfSEFORExFCWhhbmRsZTsKKwl2b2lkCQkJCSpwQWQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCit9ICAgUkFMSU5LX1RJTUVSX1NUUlVDVCwgKlBSQUxJTktfVElNRVJfU1RSVUNUOworCisKKyNpZmRlZiBSVDI4NzAKKwordHlwZWRlZiBlbnVtIF9SVDI4NzBfS0VSTkVMX1RIUkVBRF9TVEFUVVNfCit7CisJUlQyODcwX1RIUkVBRF9VTktOT1dOID0gMCwKKwlSVDI4NzBfVEhSRUFEX0lOSVRFRCA9IDEsCisJUlQyODcwX1RIUkVBRF9SVU5OSU5HID0gMiwKKwlSVDI4NzBfVEhSRUFEX1NUT1BFRCA9IDQsCit9UlQyODcwX0tFUk5FTF9USFJFQURfU1RBVFVTOworCisjZGVmaW5lIFJUMjg3MF9USFJFQURfQ0FOX0RPX0lOU0VSVAkJKFJUMjg3MF9USFJFQURfSU5JVEVEIHxSVDI4NzBfVEhSRUFEX1JVTk5JTkcpCisKK3R5cGVkZWYgc3RydWN0IF9SVDI4NzBfVElNRVJfRU5UUllfCit7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAJCQkqcFJhVGltZXI7CisJc3RydWN0IF9SVDI4NzBfVElNRVJfRU5UUllfIAkqcE5leHQ7Cit9UlQyODcwX1RJTUVSX0VOVFJZOworCisKKyNkZWZpbmUgVElNRVJfUVVFVUVfU0laRV9NQVgJMTI4Cit0eXBlZGVmIHN0cnVjdCBfUlQyODcwX1RJTUVSX1FVRVVFXworeworCXVuc2lnbmVkIGludAkJc3RhdHVzOworCS8vd2FpdF9xdWV1ZV9oZWFkX3QgCXRpbWVyV2FpdFE7CisJLy9hdG9taWNfdAkJCWNvdW50OworCVVDSEFSCQkJCSpwVGltZXJRUG9sbDsKKwlSVDI4NzBfVElNRVJfRU5UUlkJKnBRUG9sbEZyZWVMaXN0OworCVJUMjg3MF9USU1FUl9FTlRSWSAJKnBRSGVhZDsKKwlSVDI4NzBfVElNRVJfRU5UUlkgCSpwUVRhaWw7Cit9UlQyODcwX1RJTUVSX1FVRVVFOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKy8vI2RlZmluZSBEQkcJMQorCisvLworLy8gIE1BQ1JPIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KKy8vCisKKyNpZmRlZiBEQkcKK2V4dGVybiBVTE9ORyAgICBSVERlYnVnTGV2ZWw7CisKKyNkZWZpbmUgREJHUFJJTlRfUkFXKExldmVsLCBGbXQpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoTGV2ZWwgPD0gUlREZWJ1Z0xldmVsKSAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRrIEZtdDsgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREJHUFJJTlQoTGV2ZWwsIEZtdCkgICAgREJHUFJJTlRfUkFXKExldmVsLCBGbXQpCisKKworI2RlZmluZSBEQkdQUklOVF9FUlIoRm10KSAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaW50aygiRVJST1IhISEgIik7ICAgICAgICAgIFwKKyAgICBwcmludGsgRm10OyAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBEQkdQUklOVF9TKFN0YXR1cywgRm10KQkJXAorewkJCQkJCQkJCVwKKwlwcmludGsgRm10OwkJCQkJXAorfQorCisKKyNlbHNlCisjZGVmaW5lIERCR1BSSU5UKExldmVsLCBGbXQpCisjZGVmaW5lIERCR1BSSU5UX1JBVyhMZXZlbCwgRm10KQorI2RlZmluZSBEQkdQUklOVF9TKFN0YXR1cywgRm10KQorI2RlZmluZSBEQkdQUklOVF9FUlIoRm10KQorI2VuZGlmCisKKworLy8KKy8vICBzcGluX2xvY2sgZW5oYW5jZWQgZm9yIE5lc3RlZCBzcGluIGxvY2sKKy8vCisjZGVmaW5lIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKF9fbG9jaykgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwaW5fbG9ja19pbml0KChzcGlubG9ja190ICopKF9fbG9jaykpOyAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBOZGlzRnJlZVNwaW5Mb2NrKGxvY2spICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworI2RlZmluZSBSVE1QX1NFTV9MT0NLKF9fbG9jaykJCQkJCVwKK3sJCQkJCQkJCQkJCQlcCisJc3Bpbl9sb2NrX2JoKChzcGlubG9ja190ICopKF9fbG9jaykpOwkJCQlcCit9CisKKyNkZWZpbmUgUlRNUF9TRU1fVU5MT0NLKF9fbG9jaykJCQkJCVwKK3sJCQkJCQkJCQkJCQlcCisJc3Bpbl91bmxvY2tfYmgoKHNwaW5sb2NrX3QgKikoX19sb2NrKSk7CQkJCVwKK30KKworLy8gc2FtcGxlLCB1c2Ugc2VtYXBob3JlIGxvY2sgdG8gcmVwbGFjZSBJUlEgbG9jaywgMjAwNy8xMS8xNQorI2RlZmluZSBSVE1QX0lSUV9MT0NLKF9fbG9jaywgX19pcnFmbGFncykJCQlcCit7CQkJCQkJCQkJCQkJCVwKKwlfX2lycWZsYWdzID0gMDsJCQkJCQkJCQlcCisJc3Bpbl9sb2NrX2JoKChzcGlubG9ja190ICopKF9fbG9jaykpOwkJCVwKKwlwQWQtPmlycV9kaXNhYmxlZCB8PSAxOyBcCit9CisKKyNkZWZpbmUgUlRNUF9JUlFfVU5MT0NLKF9fbG9jaywgX19pcnFmbGFnKQkJCVwKK3sJCQkJCQkJCQkJCQkJXAorCXBBZC0+aXJxX2Rpc2FibGVkICY9IDA7IFwKKwlzcGluX3VubG9ja19iaCgoc3BpbmxvY2tfdCAqKShfX2xvY2spKTsJCQlcCit9CisKKyNkZWZpbmUgUlRNUF9JTlRfTE9DSyhfX2xvY2ssIF9faXJxZmxhZ3MpCQkJXAorewkJCQkJCQkJCQkJCQlcCisJc3Bpbl9sb2NrX2lycXNhdmUoKHNwaW5sb2NrX3QgKilfX2xvY2ssIF9faXJxZmxhZ3MpOwlcCit9CisKKyNkZWZpbmUgUlRNUF9JTlRfVU5MT0NLKF9fbG9jaywgX19pcnFmbGFnKQkJCVwKK3sJCQkJCQkJCQkJCQkJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoKHNwaW5sb2NrX3QgKikoX19sb2NrKSwgKCh1bnNpZ25lZCBsb25nKV9faXJxZmxhZykpOwlcCit9CisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgUlRNUF9JT19SRUFEMzIoX0EsIF9SLCBfcFYpCQkJCQkJCQlcCisJUlRVU0JSZWFkTUFDUmVnaXN0ZXIoX0EsIF9SLCBfcFYpCisKKyNkZWZpbmUgUlRNUF9JT19SRUFEOChfQSwgX1IsIF9wVikJCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFJUTVBfSU9fV1JJVEUzMihfQSwgX1IsIF9WKQkJCQkJCQkJXAorCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihfQSwgX1IsIF9WKQorCisKKyNkZWZpbmUgUlRNUF9JT19XUklURTgoX0EsIF9SLCBfVikJCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJXAorCVVTSE9SVAlfVmFsID0gX1Y7CQkJCQkJCQkJCQlcCisJUlRVU0JTaW5nbGVXcml0ZShfQSwgX1IsIF9WYWwpOwkJCQkJCQkJXAorfQorCisKKyNkZWZpbmUgUlRNUF9JT19XUklURTE2KF9BLCBfUiwgX1YpCQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCVwKKwlSVFVTQlNpbmdsZVdyaXRlKF9BLCBfUiwgX1YpOwkJCQkJCQkJXAorfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZuZGVmIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgcmV0KSBcCitkbyB7IFwKKyAgICAgICAgd2FpdF9xdWV1ZV90IF9fd2FpdDsgXAorICAgICAgICBpbml0X3dhaXRxdWV1ZV9lbnRyeSgmX193YWl0LCBjdXJyZW50KTsgXAorICAgICAgICBhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOyBcCisgICAgICAgIGZvciAoOzspIHsgXAorICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7IFwKKyAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgXAorICAgICAgICAgICAgICAgIGlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gc2NoZWR1bGVfdGltZW91dChyZXQpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgXAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IFwKKyAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7IFwKKyAgICAgICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9IFwKKyAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7IFwKKyAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KSBcCisoeyBcCisgICAgICAgIGxvbmcgX19yZXQgPSB0aW1lb3V0OyBcCisgICAgICAgIGlmICghKGNvbmRpdGlvbikpIFwKKyAgICAgICAgICAgICAgICBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIF9fcmV0KTsgXAorICAgICAgICBfX3JldDsgXAorfSkKKyNlbmRpZgorI2RlZmluZSBPTkVfVElDSyAxCisjZGVmaW5lIE9TX1dBSVQoX3RpbWUpIFwKK3sJaW50IF9pOyBcCisJbG9uZyBfbG9vcCA9ICgoX3RpbWUpLygxMDAwL09TX0haKSkgPiAwID8gKChfdGltZSkvKDEwMDAvT1NfSFopKSA6IDE7XAorCXdhaXRfcXVldWVfaGVhZF90IF93YWl0OyBcCisJaW5pdF93YWl0cXVldWVfaGVhZCgmX3dhaXQpOyBcCisJZm9yIChfaT0wOyBfaTwoX2xvb3ApOyBfaSsrKSBcCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KF93YWl0LCAwLCBPTkVfVElDSyk7IH0KKworCisvKiBNb2RpZmllZCBieSBXdSBYaS1LdW4gNC8yMS8yMDA2ICovCit0eXBlZGVmIHZvaWQgKCpUSU1FUl9GVU5DVElPTikodW5zaWduZWQgbG9uZyk7CisKKyNkZWZpbmUgQ09QWV9NQUNfQUREUihBZGRyMSwgQWRkcjIpICAgICAgICAgICAgIG1lbWNweSgoQWRkcjEpLCAoQWRkcjIpLCBNQUNfQUREUl9MRU4pCisKKyNkZWZpbmUgTWxtZUFsbG9jYXRlTWVtb3J5KF9wQWQsIF9wcFZBKSBvc19hbGxvY19tZW0oX3BBZCwgX3BwVkEsIE1HTVRfRE1BX0JVRkZFUl9TSVpFKQorI2RlZmluZSBNbG1lRnJlZU1lbW9yeShfcEFkLCBfcFZBKSAgICAgb3NfZnJlZV9tZW0oX3BBZCwgX3BWQSkKKworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKF9mdW5jKQkJCQkJCQkJCQkJCQlcCit2b2lkIGxpbnV4XyMjX2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQkJCQkJCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJUFJBTElOS19USU1FUl9TVFJVQ1QJX3BUaW1lciA9IChQUkFMSU5LX1RJTUVSX1NUUlVDVClkYXRhOwkJCQkJXAorCVJUMjg3MF9USU1FUl9FTlRSWQkJKl9wUU5vZGU7CQkJCQkJCQkJCQkJXAorCVJUTVBfQURBUFRFUgkJCSpfcEFkOwkJCQkJCQkJCQkJCQlcCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwlfcFRpbWVyLT5oYW5kbGUgPSBfZnVuYzsJCQkJCQkJCQkJCQkJCQlcCisJX3BBZCA9IChSVE1QX0FEQVBURVIgKilfcFRpbWVyLT5wQWQ7CQkJCQkJCQkJCQkJXAorCV9wUU5vZGUgPSBSVDI4NzBfVGltZXJRX0luc2VydChfcEFkLCBfcFRpbWVyKTsgCQkJCQkJCQkJXAorCWlmICgoX3BRTm9kZSA9PSBOVUxMKSAmJiAoX3BBZC0+VGltZXJRLnN0YXR1cyAmIFJUMjg3MF9USFJFQURfQ0FOX0RPX0lOU0VSVCkpCVwKKwkJUlRNUF9PU19BZGRfVGltZXIoJl9wVGltZXItPlRpbWVyT2JqLCBIWik7ICAgICAgICAgICAgICAgCQkJCQlcCit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworI2RlZmluZSBERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKF9mdW5jKQkJCVwKK3ZvaWQgbGludXhfIyNfZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCisKKyNkZWZpbmUgR0VUX1RJTUVSX0ZVTkNUSU9OKF9mdW5jKQkJCQlcCisJCWxpbnV4XyMjX2Z1bmMKKworREVDTEFSRV9USU1FUl9GVU5DVElPTihNbG1lUGVyaW9kaWNFeGVjKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oTWxtZVJzc2lSZXBvcnRFeGVjKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQXNpY1J4QW50RXZhbFRpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihBUFNEUGVyaW9kaWNFeGVjKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQXNpY1JmVHVuaW5nRXhlYyk7CisjaWZkZWYgUlQyODcwCitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEJlYWNvblVwZGF0ZUV4ZWMpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQmVhY29uVGltZW91dCk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKFNjYW5UaW1lb3V0KTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQXV0aFRpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihBc3NvY1RpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihSZWFzc29jVGltZW91dCk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKERpc2Fzc29jVGltZW91dCk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKExpbmtEb3duRXhlYyk7CisjaWZkZWYgTEVBUF9TVVBQT1JUCitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKExlYXBBdXRoVGltZW91dCk7CisjZW5kaWYKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oUHNQb2xsV2FrZUV4ZWMpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihSYWRpb09uRXhlYyk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oRGxzVGltZW91dEFjdGlvbik7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyN1bmRlZiBBUF9XU0NfSU5DTFVERUQKKyN1bmRlZiBTVEFfV1NDX0lOQ0xVREVECisjdW5kZWYgV1NDX0lOQ0xVREVECisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWYgZGVmaW5lZChBUF9XU0NfSU5DTFVERUQpIHx8IGRlZmluZWQoU1RBX1dTQ19JTkNMVURFRCkKKyNkZWZpbmUgV1NDX0lOQ0xVREVECisjZW5kaWYKKworCisKK3ZvaWQgUlRNUF9HZXRDdXJyZW50U3lzdGVtVGltZShMQVJHRV9JTlRFR0VSICp0aW1lKTsKKworCisvKgorICogcGFja2V0IGhlbHBlcgorICogCS0gY29udmVydCBpbnRlcm5hbCBydCBwYWNrZXQgdG8gb3MgcGFja2V0IG9yCisgKiAgICAgICAgICAgICBvcyBwYWNrZXQgdG8gcnQgcGFja2V0CisgKi8KKyNkZWZpbmUgUlRQS1RfVE9fT1NQS1QoX3ApCQkoKHN0cnVjdCBza19idWZmICopKF9wKSkKKyNkZWZpbmUgT1NQS1RfVE9fUlRQS1QoX3ApCQkoKFBORElTX1BBQ0tFVCkoX3ApKQorCisjZGVmaW5lIEdFVF9PU19QS1RfREFUQVBUUihfcGt0KSBcCisJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+ZGF0YSkKKworI2RlZmluZSBHRVRfT1NfUEtUX0xFTihfcGt0KSBcCisJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+bGVuKQorCisjZGVmaW5lIEdFVF9PU19QS1RfREFUQVRBSUwoX3BrdCkgXAorCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPnRhaWwpCisKKyNkZWZpbmUgR0VUX09TX1BLVF9IRUFEKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5oZWFkKQorCisjZGVmaW5lIEdFVF9PU19QS1RfRU5EKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5lbmQpCisKKyNkZWZpbmUgR0VUX09TX1BLVF9ORVRERVYoX3BrdCkgXAorCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPmRldikKKworI2RlZmluZSBHRVRfT1NfUEtUX1RZUEUoX3BrdCkgXAorCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCkpCisKKyNkZWZpbmUgR0VUX09TX1BLVF9ORVhUKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5uZXh0KQorCisKKyNkZWZpbmUgT1NfTlRPSFMoX1ZhbCkgXAorCQkobnRvaHMoX1ZhbCkpCisjZGVmaW5lIE9TX0hUT05TKF9WYWwpIFwKKwkJKGh0b25zKF9WYWwpKQorI2RlZmluZSBPU19OVE9ITChfVmFsKSBcCisJCShudG9obChfVmFsKSkKKyNkZWZpbmUgT1NfSFRPTkwoX1ZhbCkgXAorCQkoaHRvbmwoX1ZhbCkpCisKKy8qIHN0YXRpc3RpY3MgY291bnRlciAqLworI2RlZmluZSBTVEFUU19JTkNfUlhfUEFDS0VUUyhfcEFkLCBfZGV2KQorI2RlZmluZSBTVEFUU19JTkNfVFhfUEFDS0VUUyhfcEFkLCBfZGV2KQorCisjZGVmaW5lIFNUQVRTX0lOQ19SWF9CWVRFU1MoX3BBZCwgX2RldiwgbGVuKQorI2RlZmluZSBTVEFUU19JTkNfVFhfQllURVNTKF9wQWQsIF9kZXYsIGxlbikKKworI2RlZmluZSBTVEFUU19JTkNfUlhfRVJST1JTKF9wQWQsIF9kZXYpCisjZGVmaW5lIFNUQVRTX0lOQ19UWF9FUlJPUlMoX3BBZCwgX2RldikKKworI2RlZmluZSBTVEFUU19JTkNfUlhfRFJPUFBFRChfcEFkLCBfZGV2KQorI2RlZmluZSBTVEFUU19JTkNfVFhfRFJPUFBFRChfcEFkLCBfZGV2KQorCisKKyNkZWZpbmUgQ0JfT0ZGICAxMAorCisKKy8vICAgY2hlY2sgRERLIE5ESVNfUEFDS0VUIGRhdGEgc3RydWN0dXJlIGFuZCBmaW5kIG91dCBvbmx5IE1pbmlwb3J0UmVzZXJ2ZWRFeFswLi43XSBjYW4gYmUgdXNlZCBieSBvdXIgZHJpdmVyIHdpdGhvdXQKKy8vICAgYW1iaWd1aXR5LiBGaWVsZHMgYWZ0ZXIgcFBhY2tldC0+TWluaXBvcnRSZXNlcnZlZEV4WzhdIG1heSBiZSB1c2VkIGJ5IG90aGVyIHdyYXBwZXIgbGF5ZXIgdGh1cyBjcmFzaGVzIHRoZSBkcml2ZXIKKy8vCisvLyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX01SKF9wKQkJCShSVFBLVF9UT19PU1BLVChfcCkpCisKKy8vIFVzZXIgUHJpb3JpdHkKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1VQKF9wLCBfcHJpbykJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMF0gPSBfcHJpbykKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1VQKF9wKQkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzBdKQorCisvLyBGcmFnbWVudCAjCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9GUkFHTUVOVFMoX3AsIF9udW0pCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMV0gPSBfbnVtKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfRlJBR01FTlRTKF9wKQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxXSkKKworLy8gMHgwIH4weDdmOiBUWCB0byBBUCdzIG93biBCU1Mgd2hpY2ggaGFzIHRoZSBzcGVjaWZpZWQgQUlELiBpZiBBSUQ+MTI3LCBzZXQgYml0IDcgaW4gUlRNUF9TRVRfUEFDS0VUX0VNQUNUQUIgdG9vLgorLy8odGhpcyB2YWx1ZSBhbHNvIGFzIE1BQyhvbi1jaGlwIFdDSUQpIHRhYmxlIGluZGV4KQorLy8gMHg4MH4weGZmOiBUWCB0byBhIFdEUyBsaW5rLiBiMH42OiBXRFMgaW5kZXgKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1dDSUQoX3AsIF93ZHNpZHgpCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMl0gPSBfd2RzaWR4KQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfV0NJRChfcCkgICAgICAgICAgCQkoKFVDSEFSKShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisyXSkpCisKKy8vIDB4ZmY6IFBLVFNSQ19ORElTLCBvdGhlcnM6IGxvY2FsIFRYIGJ1ZmZlciBpbmRleC4gVGhpcyB2YWx1ZSBhZmZlY3RzIGhvdyB0byBhIHBhY2tldAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfU09VUkNFKF9wLCBfcGt0c3JjKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzNdID0gX3BrdHNyYykKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1NPVVJDRShfcCkgICAgICAgCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrM10pCisKKy8vIFJUUy9DVFMtdG8tc2VsZiBwcm90ZWN0aW9uIG1ldGhvZAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfUlRTKF9wLCBfbnVtKSAgICAgIAkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzRdID0gX251bSkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1JUUyhfcCkgICAgICAgICAgCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrNF0pCisvLyBzZWUgUlRNUF9TKEcpRVRfUEFDS0VUX0VNQUNUQUIKKworLy8gVFggcmF0ZSBpbmRleAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfVFhSQVRFKF9wLCBfcmF0ZSkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis1XSA9IF9yYXRlKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfVFhSQVRFKF9wKQkJICAJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis1XSkKKworLy8gRnJvbSB3aGljaCBJbnRlcmZhY2UKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX0lGKF9wLCBfaWZkeCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis2XSA9IF9pZmR4KQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfSUYoX3ApCQkgIAkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzZdKQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoX3AsIF9ic3MpCQlSVE1QX1NFVF9QQUNLRVRfSUYoKF9wKSwgKF9ic3MpKQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9XRFMoX3AsIF9ic3MpCQlSVE1QX1NFVF9QQUNLRVRfSUYoKF9wKSwgKChfYnNzKSArIE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMpKQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9BUENMSShfcCwgX2lkeCkgICAJUlRNUF9TRVRfUEFDS0VUX0lGKChfcCksICgoX2lkeCkgKyBNSU5fTkVUX0RFVklDRV9GT1JfQVBDTEkpKQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NRVNIKF9wLCBfaWR4KSAgIAlSVE1QX1NFVF9QQUNLRVRfSUYoKF9wKSwgKChfaWR4KSArIE1JTl9ORVRfREVWSUNFX0ZPUl9NRVNIKSkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX05FVF9ERVZJQ0VfTUJTU0lEKF9wKQkJCVJUTVBfR0VUX1BBQ0tFVF9JRigoX3ApKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTkVUX0RFVklDRShfcCkJCQkJCVJUTVBfR0VUX1BBQ0tFVF9JRigoX3ApKQorCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9NT1JFREFUQShfcCwgX21vcmViaXQpCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrN10gPSBfbW9yZWJpdCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX01PUkVEQVRBKF9wKQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrN10pCisKKy8vI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoX3AsIF9ic3MpCShSVFBLVF9UT19PU1BLVChfcCktPmNiWzhdID0gX2JzcykKKy8vI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYls4XSkKKworLy8KKy8vCVNlcGNpZmljIFBha2NldCBUeXBlIGRlZmluaXRpb24KKy8vCisjZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX0NCX09GRlNFVAkxMQorCisjZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX0RIQ1AJCTB4MDEKKyNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfRUFQT0wJCTB4MDIKKyNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfSVBWNAkJMHgwNAorI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19XQUkJCTB4MDgKKyNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfVkxBTgkJMHgxMAorI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19MTENTTkFQCTB4MjAKKworLy9TcGVjaWZpYworI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfU1BFQ0lGSUMoX3AsIF9mbGcpCSAgIAkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdID0gX2ZsZykKKworLy9ESENQCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9ESENQKF9wLCBfZmxnKSAgIAkJCQkJCQkJCQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX0RIQ1ApOwkJXAorCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfREhDUCk7CVwKKwkJCX13aGlsZSgwKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfREhDUChfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19ESENQKQorCisvL0VBUE9MCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9FQVBPTChfcCwgX2ZsZykgICAJCQkJCQkJCQkJCQkJXAorCQkJZG97CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJaWYgKF9mbGcpCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pIHw9IChSVE1QX1BBQ0tFVF9TUEVDSUZJQ19FQVBPTCk7CQlcCisJCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgJj0gKCFSVE1QX1BBQ0tFVF9TUEVDSUZJQ19FQVBPTCk7CVwKKwkJCX13aGlsZSgwKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfRUFQT0woX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfRUFQT0wpCisKKy8vV0FJCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9XQUkoX3AsIF9mbGcpICAgCQkJCQkJCQkJCQkJCVwKKwkJCWRvewkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCWlmIChfZmxnKQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSB8PSAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfV0FJKTsJCVwKKwkJCQllbHNlCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSAmPSAoIVJUTVBfUEFDS0VUX1NQRUNJRklDX1dBSSk7CVwKKwkJCX13aGlsZSgwKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfV0FJKF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSAmIFJUTVBfUEFDS0VUX1NQRUNJRklDX1dBSSkKKworI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTE9XUkFURShfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfRUFQT0wgfCBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19ESENQIHwgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfV0FJKSkKKworLy9WTEFOCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9WTEFOKF9wLCBfZmxnKSAgIAkJCQkJCQkJCQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX1ZMQU4pOwkJXAorCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfVkxBTik7CVwKKwkJCX13aGlsZSgwKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfVkxBTihfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19WTEFOKQorCisvL0xMQy9TTkFQCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9MTENTTkFQKF9wLCBfZmxnKSAgIAkJCQkJCQkJCQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX0xMQ1NOQVApOwkJXAorCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfTExDU05BUCk7CQlcCisJCQl9d2hpbGUoMCkKKworI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTExDU05BUChfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19MTENTTkFQKQorCisvLyBJUAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfSVBWNChfcCwgX2ZsZykJCQkJCQkJCQkJCQkJCVwKKwkJCWRvewkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCWlmIChfZmxnKQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSB8PSAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfSVBWNCk7CQlcCisJCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgJj0gKCFSVE1QX1BBQ0tFVF9TUEVDSUZJQ19JUFY0KTsJXAorCQkJfXdoaWxlKDApCisKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0lQVjQoX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfSVBWNCkKKworLy8gSWYgdGhpcyBmbGFnIGlzIHNldCwgaXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBFQVBvTCBmcmFtZSBNVVNUIGJlIGNsZWFyLgorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfQ0xFQVJfRUFQX0ZSQU1FKF9wLCBfZmxnKSAgIChSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMl0gPSBfZmxnKQorI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfQ0xFQVJfRUFQX0ZSQU1FKF9wKSAgICAgICAgIChSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMl0pCisKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUXzVWVChfcCwgX2ZsZykgICAoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMjJdID0gX2ZsZykKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUXzVWVChfcCkgICAgICAgICAoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMjJdKQorCisKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisvKkl2ZXJzb24gcGF0Y2ggZm9yIFdNTSBBNS1UMDcgLFdpcmVsZXNzU3RhVG9XaXJlbGVzc1N0YSBkbyBub3QgYnVsayBvdXQgYWdncmVnYXRlICovCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9OT0JVTEtPVVQoX3AsIF9tb3JlYml0KQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisyM10gPSBfbW9yZWJpdCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX05PQlVMS09VVChfcCkJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisyM10pCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisKKworI2lmZGVmIENPTkZJR181VlRfRU5IQU5DRQorI2RlZmluZSBCUklER0VfVEFHIDB4MzU1NjQyNTIgICAgLy8gZGVwZW5kcyBvbiA1VlQgZGVmaW5lIGluIGJyX2lucHV0LmMKKyNlbmRpZgorCisKKyNkZWZpbmUgTkRJU19TRVRfUEFDS0VUX1NUQVRVUyhfcCwgX3N0YXR1cykKKworCisjZGVmaW5lIEdFVF9TR19MSVNUX0ZST01fUEFDS0VUKF9wLCBfc2MpCVwKKyAgICBydF9nZXRfc2dfbGlzdF9mcm9tX3BhY2tldChfcCwgX3NjKQorCisjZGVmaW5lIE5kaXNNb3ZlTWVtb3J5KERlc3RpbmF0aW9uLCBTb3VyY2UsIExlbmd0aCkgbWVtbW92ZShEZXN0aW5hdGlvbiwgU291cmNlLCBMZW5ndGgpCisjZGVmaW5lIE5kaXNaZXJvTWVtb3J5KERlc3RpbmF0aW9uLCBMZW5ndGgpICAgICAgICAgbWVtc2V0KERlc3RpbmF0aW9uLCAwLCBMZW5ndGgpCisjZGVmaW5lIE5kaXNGaWxsTWVtb3J5KERlc3RpbmF0aW9uLCBMZW5ndGgsIEZpbGwpICAgbWVtc2V0KERlc3RpbmF0aW9uLCBGaWxsLCBMZW5ndGgpCisjZGVmaW5lIE5kaXNFcXVhbE1lbW9yeShTb3VyY2UxLCBTb3VyY2UyLCBMZW5ndGgpICAgKCFtZW1jbXAoU291cmNlMSwgU291cmNlMiwgTGVuZ3RoKSkKKyNkZWZpbmUgUlRNUEVxdWFsTWVtb3J5KFNvdXJjZTEsIFNvdXJjZTIsIExlbmd0aCkJKCFtZW1jbXAoU291cmNlMSwgU291cmNlMiwgTGVuZ3RoKSkKKworCisjZGVmaW5lIFJUTVBfSU5DX1JFRihfQSkJCTAKKyNkZWZpbmUgUlRNUF9ERUNfUkVGKF9BKQkJMAorI2RlZmluZSBSVE1QX0dFVF9SRUYoX0EpCQkwCisKKworCisvKgorICogVUxPTkcKKyAqIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KAorICogICBJTiBORElTX1BIWVNJQ0FMX0FERFJFU1MgIFBoeXNpY2FsQWRkcmVzcyk7CisgKi8KKyNkZWZpbmUgUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NMb3coUGh5c2ljYWxBZGRyZXNzKQkJKFBoeXNpY2FsQWRkcmVzcykKKworLyoKKyAqIFVMT05HCisgKiBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0hpZ2goCisgKiAgIElOIE5ESVNfUEhZU0lDQUxfQUREUkVTUyAgUGh5c2ljYWxBZGRyZXNzKTsKKyAqLworI2RlZmluZSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0hpZ2goUGh5c2ljYWxBZGRyZXNzKQkJKDApCisKKy8qCisgKiBWT0lECisgKiBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0xvdygKKyAqICAgSU4gTkRJU19QSFlTSUNBTF9BRERSRVNTICBQaHlzaWNhbEFkZHJlc3MsCisgKiAgIElOIFVMT05HICBWYWx1ZSk7CisgKi8KKyNkZWZpbmUgUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NMb3coUGh5c2ljYWxBZGRyZXNzLCBWYWx1ZSkJXAorCQkJUGh5c2ljYWxBZGRyZXNzID0gVmFsdWU7CisKKy8qCisgKiBWT0lECisgKiBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0hpZ2goCisgKiAgIElOIE5ESVNfUEhZU0lDQUxfQUREUkVTUyAgUGh5c2ljYWxBZGRyZXNzLAorICogICBJTiBVTE9ORyAgVmFsdWUpOworICovCisjZGVmaW5lIFJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzSGlnaChQaHlzaWNhbEFkZHJlc3MsIFZhbHVlKQorCisKKy8vQ09OVEFJTklOR19SRUNPUkQocEVudHJ5LCBORElTX1BBQ0tFVCwgTWluaXBvcnRSZXNlcnZlZEV4KTsKKyNkZWZpbmUgUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBFbnRyeSkgXAorCShQTkRJU19QQUNLRVQpKHBFbnRyeSkKKworI2RlZmluZSBQQUNLRVRfVE9fUVVFVUVfRU5UUlkocFBhY2tldCkgXAorCShQUVVFVUVfRU5UUlkpKHBQYWNrZXQpCisKKworI2lmbmRlZiBDT05UQUlOSU5HX1JFQ09SRAorI2RlZmluZSBDT05UQUlOSU5HX1JFQ09SRChhZGRyZXNzLCB0eXBlLCBmaWVsZCkJCQlcCisoKHR5cGUgKikoKFBDSEFSKShhZGRyZXNzKSAtIG9mZnNldG9mKHR5cGUsIGZpZWxkKSkpCisjZW5kaWYKKworCisjZGVmaW5lIFJFTEVBU0VfTkRJU19QQUNLRVQoX3BBZCwgX3BQYWNrZXQsIF9TdGF0dXMpICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJUTVBGcmVlTmRpc1BhY2tldChfcEFkLCBfcFBhY2tldCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworI2RlZmluZSBTV0lUQ0hfUGh5QUIoX3BBQSwgX3BCQikgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVTE9ORwlBQUJhc2VQYUhpZ2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVMT05HCUFBQmFzZVBhTG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVTE9ORwlCQkJhc2VQYUhpZ2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVMT05HCUJCQmFzZVBhTG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBCQkJhc2VQYUhpZ2ggPSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0hpZ2goX3BCQik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBCQkJhc2VQYUxvdyA9IFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KF9wQkIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUFCYXNlUGFIaWdoID0gUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NIaWdoKF9wQUEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUFCYXNlUGFMb3cgPSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhfcEFBKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzSGlnaChfcEFBLCBCQkJhc2VQYUhpZ2gpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NMb3coX3BBQSwgQkJCYXNlUGFMb3cpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NIaWdoKF9wQkIsIEFBQmFzZVBhSGlnaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0xvdyhfcEJCLCBBQUJhc2VQYUxvdyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworCisjZGVmaW5lIE5kaXNXcml0ZUVycm9yTG9nRW50cnkoX2EsIF9iLCBfYywgX2QpCisjZGVmaW5lIE5kaXNNQWxsb2NhdGVNYXBSZWdpc3RlcnMoX2EsIF9iLCBfYywgX2QsIF9lKQkJTkRJU19TVEFUVVNfU1VDQ0VTUworCisKKyNkZWZpbmUgTmRpc0FjcXVpcmVTcGluTG9jawkJUlRNUF9TRU1fTE9DSworI2RlZmluZSBOZGlzUmVsZWFzZVNwaW5Mb2NrCQlSVE1QX1NFTV9VTkxPQ0sKKworc3RhdGljIGlubGluZSB2b2lkIE5kaXNHZXRTeXN0ZW1VcFRpbWUoVUxPTkcgKnRpbWUpCit7CisJKnRpbWUgPSBqaWZmaWVzOworfQorCisvL3BQYWNrZXQgPSBDT05UQUlOSU5HX1JFQ09SRChwRW50cnksIE5ESVNfUEFDS0VULCBNaW5pcG9ydFJlc2VydmVkRXgpOworI2RlZmluZSBRVUVVRV9FTlRSWV9UT19QS1QocEVudHJ5KSBcCisJCSgoUE5ESVNfUEFDS0VUKSAocEVudHJ5KSkKKworaW50IHJ0Mjh4eF9wYWNrZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCisKK3ZvaWQgcnRtcF9vc190aHJlYWRfaW5pdChQVUNIQVIgcFRocmVhZE5hbWUsIFBWT0lEIHBOb3RpZnkpOworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9tYWluX2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMDA2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X21haW5fZGV2LmMKQEAgLTAsMCArMSwxODAwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIHJ0X21haW5fZGV2LmMKKworICAgIEFic3RyYWN0OgorICAgIENyZWF0ZSBhbmQgcmVnaXN0ZXIgbmV0d29yayBpbnRlcmZhY2UuCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTYW1wbGUJCU1hci8yMS8wNwkJTWVyZ2UgUlQyODcwIGFuZCBSVDI4NjAgZHJpdmVycy4KKyovCisKKyNpbmNsdWRlICJydF9jb25maWcuaCIKKworI2RlZmluZSBGT1JUWV9NSFpfSU5UT0xFUkFOVF9JTlRFUlZBTAkoNjAqMTAwMCkgLy8gMSBtaW4KKworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorLy8gcmVjb3JkIHdoZXRoZXIgdGhlIGNhcmQgaW4gdGhlIGNhcmQgbGlzdCBpcyB1c2VkIGluIHRoZSBjYXJkIGZpbGUKK1VJTlQ4ICBNQ19DYXJkVXNlZFtNQVhfTlVNX09GX01VTFRJUExFX0NBUkRdOworLy8gcmVjb3JkIHVzZWQgY2FyZCBtYWMgYWRkcmVzcyBpbiB0aGUgY2FyZCBsaXN0CitzdGF0aWMgVUlOVDggIE1DX0NhcmRNYWNbTUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEXVs2XTsKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitVSU5UMzIgQ1dfTUFYX0lOX0JJVFM7CisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBWYXJpYWJsZXMgVXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLy9zdGF0aWMgUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgUGVyaW9kaWNUaW1lcjsKKworY2hhciAqbWFjID0gIiI7CQkgICAvLyBkZWZhdWx0IDAwOjAwOjAwOjAwOjAwOjAwCitjaGFyICpob3N0bmFtZSA9ICIiOwkJICAgLy8gZGVmYXVsdCBDTVBDCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMikKK01PRFVMRV9QQVJNIChtYWMsICJzIik7CisjZWxzZQorbW9kdWxlX3BhcmFtIChtYWMsIGNoYXJwLCAwKTsKKyNlbmRpZgorTU9EVUxFX1BBUk1fREVTQyAobWFjLCAicnQyOHh4OiB3aXJlbGVzcyBtYWMgYWRkciIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByb3RvdHlwZXMgb2YgRnVuY3Rpb25zIFVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK2V4dGVybiBCT09MRUFOIGJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfaW5pdChQUlRNUF9BREFQVEVSIHBBZCwgaW50IG51bSk7CitleHRlcm4gdm9pZCBiYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworZXh0ZXJuIE5ESVNfU1RBVFVTIE5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKElOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworCisvLyBwdWJsaWMgZnVuY3Rpb24gcHJvdG90eXBlCitJTlQgX19kZXZpbml0IHJ0Mjh4eF9wcm9iZShJTiB2b2lkICpfZGV2X3AsIElOIHZvaWQgKl9kZXZfaWRfcCwKKwkJCQkJCQlJTiBVSU5UIGFyZ2MsIE9VVCBQUlRNUF9BREFQVEVSICpwcEFkKTsKKworLy8gcHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGUKK3N0YXRpYyBpbnQgcnQyOHh4X2luaXQoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworSU5UIHJ0Mjh4eF9zZW5kX3BhY2tldHMoSU4gc3RydWN0IHNrX2J1ZmYgKnNrYl9wLCBJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gMHgyMDQwMgkvLyBSZWQgSGF0IDcuMQorc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldigKKwlpbnQgc2l6ZW9mX3ByaXYsCisJY29uc3QgY2hhciAqbWFzaywKKwl2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKTsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKworc3RhdGljIHZvaWQgQ2ZnSW5pdEhvb2soUFJUTVBfQURBUFRFUiBwQWQpOworLy9zdGF0aWMgQk9PTEVBTiBSVDI4WFhBdmFpbFJBTmFtZUFzc2lnbihJTiBDSEFSICpuYW1lX3ApOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitleHRlcm4JY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJ0Mjh4eF9pd19oYW5kbGVyX2RlZjsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitleHRlcm4JY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJ0Mjh4eF9hcF9pd19oYW5kbGVyX2RlZjsKKyNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLworCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gcXVlcnkgL3Byb2MKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzKAorICAgIElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKKyNlbmRpZgorCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqUlQyOHh4X2dldF9ldGhlcl9zdGF0cygKKyAgICBJTiAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENsb3NlIHJheHggaW50ZXJmYWNlLgorCitBcmd1bWVudHM6CisJKm5ldF9kZXYJCQl0aGUgcmF4eCBpbnRlcmZhY2UgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgMAkJCQkJT3BlbiBPSworCW90aGVyd2lzZQkJCU9wZW4gRmFpbAorCitOb3RlOgorCTEuIGlmIG9wZW4gZmFpbCwga2VybmVsIHdpbGwgbm90IGNhbGwgdGhlIGNsb3NlIGZ1bmN0aW9uLgorCTIuIEZyZWUgbWVtb3J5IGZvcgorCQkoMSkgTWxtZSBNZW1vcnkgSGFuZGxlcjoJCU1sbWVIYWx0KCkKKwkJKDIpIFRYICYgUlg6CQkJCQlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KCkKKwkJKDMpIEJBIFJlb3JkZXJpbmc6IAkJCQliYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworaW50IE1haW5WaXJ0dWFsSUZfY2xvc2UoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisgICAgUlRNUF9BREFQVEVSICpwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCisJLy8gU2FuaXR5IGNoZWNrIGZvciBwQWQKKwlpZiAocEFkID09IE5VTEwpCisJCXJldHVybiAwOyAvLyBjbG9zZSBvaworCisJbmV0aWZfY2Fycmllcl9vZmYocEFkLT5uZXRfZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKHBBZC0+bmV0X2Rldik7CisKKworCisJVklSVFVBTF9JRl9ET1dOKHBBZCk7CisKKwlSVF9NT0RfREVDX1VTRV9DT1VOVCgpOworCisJcmV0dXJuIDA7IC8vIGNsb3NlIG9rCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgT3BlbiByYXh4IGludGVyZmFjZS4KKworQXJndW1lbnRzOgorCSpuZXRfZGV2CQkJdGhlIHJheHggaW50ZXJmYWNlIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIDAJCQkJCU9wZW4gT0sKKwlvdGhlcndpc2UJCQlPcGVuIEZhaWwKKworTm90ZToKKwkxLiBpZiBvcGVuIGZhaWwsIGtlcm5lbCB3aWxsIG5vdCBjYWxsIHRoZSBjbG9zZSBmdW5jdGlvbi4KKwkyLiBGcmVlIG1lbW9yeSBmb3IKKwkJKDEpIE1sbWUgTWVtb3J5IEhhbmRsZXI6CQlNbG1lSGFsdCgpCisJCSgyKSBUWCAmIFJYOgkJCQkJUlRNUEZyZWVUeFJ4UmluZ01lbW9yeSgpCisJCSgzKSBCQSBSZW9yZGVyaW5nOiAJCQkJYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK2ludCBNYWluVmlydHVhbElGX29wZW4oSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisgICAgUlRNUF9BREFQVEVSICpwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCisJLy8gU2FuaXR5IGNoZWNrIGZvciBwQWQKKwlpZiAocEFkID09IE5VTEwpCisJCXJldHVybiAwOyAvLyBjbG9zZSBvaworCisJaWYgKFZJUlRVQUxfSUZfVVAocEFkKSAhPSAwKQorCQlyZXR1cm4gLTE7CisKKwkvLyBpbmNyZWFzZSBNT0RVTEUgdXNlIGNvdW50CisJUlRfTU9EX0lOQ19VU0VfQ09VTlQoKTsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldF9kZXYpOworCW5ldGlmX2NhcnJpZXJfb24obmV0X2Rldik7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXRfZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENsb3NlIHJheHggaW50ZXJmYWNlLgorCitBcmd1bWVudHM6CisJKm5ldF9kZXYJCQl0aGUgcmF4eCBpbnRlcmZhY2UgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgMAkJCQkJT3BlbiBPSworCW90aGVyd2lzZQkJCU9wZW4gRmFpbAorCitOb3RlOgorCTEuIGlmIG9wZW4gZmFpbCwga2VybmVsIHdpbGwgbm90IGNhbGwgdGhlIGNsb3NlIGZ1bmN0aW9uLgorCTIuIEZyZWUgbWVtb3J5IGZvcgorCQkoMSkgTWxtZSBNZW1vcnkgSGFuZGxlcjoJCU1sbWVIYWx0KCkKKwkJKDIpIFRYICYgUlg6CQkJCQlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KCkKKwkJKDMpIEJBIFJlb3JkZXJpbmc6IAkJCQliYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworaW50IHJ0Mjh4eF9jbG9zZShJTiBQTkVUX0RFViBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKiBuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2OworICAgIFJUTVBfQURBUFRFUgkqcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwlCT09MRUFOIAkJQ2FuY2VsbGVkID0gRkFMU0U7CisJVUlOVDMyCQkJaSA9IDA7CisjaWZkZWYgUlQyODcwCisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodW5saW5rX3dha2V1cCk7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwkvL1JUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9HUkVTUyk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gcnQyOHh4X2Nsb3NlXG4iKSk7CisKKwkvLyBTYW5pdHkgY2hlY2sgZm9yIHBBZAorCWlmIChwQWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7IC8vIGNsb3NlIG9rCisKKworI2lmZGVmIFdEU19TVVBQT1JUCisJV2RzRG93bihwQWQpOworI2VuZGlmIC8vIFdEU19TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKworCQkvLyBJZiBkaXJ2ZXIgZG9lc24ndCB3YWtlIHVwIGZpcm13YXJlIGhlcmUsCisJCS8vIE5JQ0xvYWRGaXJtd2FyZSB3aWxsIGhhbmcgZm9yZXZlciB3aGVuIGludGVyZmFjZSBpcyB1cCBhZ2Fpbi4KKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisgICAgICAgIHsKKwkJICAgIEFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworICAgICAgICB9CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJLy8gc2VuZCBETFMtVEVBUl9ET1dOIG1lc3NhZ2UsCisJCWlmIChwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJeworCQkJVUNIQVIgaTsKKworCQkJLy8gdGVhciBkb3duIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCQkJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCQkJeworCQkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJCXsKKwkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCX0KKwkJCX0KKworCQkJLy8gdGVhciBkb3duIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJCQlmb3IgKGk9TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQkJeworCQkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJCXsKKwkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCX0KKwkJCX0KKwkJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJCWlmIChJTkZSQV9PTihwQWQpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJCXsKKwkJCU1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVAlEaXNSZXE7CisJCQlNTE1FX1FVRVVFX0VMRU0gKk1zZ0VsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKworCQkJQ09QWV9NQUNfQUREUihEaXNSZXEuQWRkciwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJRGlzUmVxLlJlYXNvbiA9ICBSRUFTT05fREVBVVRIX1NUQV9MRUFWSU5HOworCisJCQlNc2dFbGVtLT5NYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKKwkJCU1zZ0VsZW0tPk1zZ1R5cGUgPSBNVDJfTUxNRV9ESVNBU1NPQ19SRVE7CisJCQlNc2dFbGVtLT5Nc2dMZW4gPSBzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KE1zZ0VsZW0tPk1zZywgJkRpc1JlcSwgc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCkpOworCisJCQkvLyBQcmV2ZW50IHRvIGNvbm5lY3QgQVAgYWdhaW4gaW4gU1RBTWxtZVBlcmlvZGljRXhlYworCQkJcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuPSAzMjsKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7CisJCQlNbG1lRGlzYXNzb2NSZXFBY3Rpb24ocEFkLCBNc2dFbGVtKTsKKwkJCWtmcmVlKE1zZ0VsZW0pOworCisJCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCQl9CisKKyNpZmRlZiBSVDI4NzAKKwlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgQ0NYX1NVUFBPUlQKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5MZWFwQXV0aFRpbWVyLCAmQ2FuY2VsbGVkKTsKKyNlbmRpZgorCisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXIsICZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLldwYURpc2Fzc29jQW5kQmxvY2tBc3NvY1RpbWVyLCAmQ2FuY2VsbGVkKTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJeworCQkJdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCQkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCB0byB3cGFfc3VwcGxpY2FudCBmb3IgaW5mcm9taW5nIGludGVyZmFjZSBkb3duLgorCQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQkJd3JxdS5kYXRhLmZsYWdzID0gUlRfSU5URVJGQUNFX0RPV047CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworCQl9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwkJTWxtZVJhZGlvT2ZmKHBBZCk7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IE5VTV9PRl9UWF9SSU5HOyBpKyspCisJeworCQl3aGlsZSAocEFkLT5EZVF1ZXVlUnVubmluZ1tpXSA9PSBUUlVFKQorCQl7CisJCQlwcmludGsoIldhaXRpbmcgZm9yIFR4UXVldWVbJWRdIGRvbmUuLi4uLi4uLi4uXG4iLCBpKTsKKwkJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCX0KKwl9CisKKyNpZmRlZiBSVDI4NzAKKwkvLyBlbnN1cmUgdGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZlIHVyYnMuCisJYWRkX3dhaXRfcXVldWUgKCZ1bmxpbmtfd2FrZXVwLCAmd2FpdCk7CisJcEFkLT53YWl0ID0gJnVubGlua193YWtldXA7CisKKwkvLyBtYXliZSB3YWl0IGZvciBkZWxldGlvbnMgdG8gZmluaXNoLgorCWkgPSAwOworCS8vd2hpbGUoKGkgPCAyNSkgJiYgYXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA+IDApCisJd2hpbGUoaSA8IDI1KQorCXsKKwkJdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKKworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJaWYgKHBBZC0+UGVuZGluZ1J4ID09IDApCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCQlicmVhazsKKwkJfQorCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDkpCisJCW1zbGVlcChVTkxJTktfVElNRU9VVF9NUyk7CS8vVGltZSBpbiBtaWxsaXNlY29uZAorI2Vsc2UKKwkJUlRNUHVzZWNEZWxheShVTkxJTktfVElNRU9VVF9NUyoxMDAwKTsJLy9UaW1lIGluIG1pY3Jvc2Vjb25kCisjZW5kaWYKKwkJaSsrOworCX0KKwlwQWQtPndhaXQgPSBOVUxMOworCXJlbW92ZV93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJLy9SVFVTQkNsZWFuVXBNTE1FV2FpdFF1ZXVlKHBBZCk7CS8qbm90IHVzZWQgaW4gUlQyOHh4Ki8KKworCisjaWZkZWYgUlQyODcwCisJLy8gV2UgbmVlZCBjbGVhciB0aW1lclEgcmVsYXRlZCBzdHJ1Y3R1cmUgYmVmb3JlIGV4aXRzIG9mIHRoZSB0aW1lciB0aHJlYWQuCisJUlQyODcwX1RpbWVyUV9FeGl0KHBBZCk7CisJLy8gQ2xvc2Uga2VybmVsIHRocmVhZHMgb3IgdGFza2xldHMKKwlSVDI4eHhUaHJlYWRUZXJtaW5hdGUocEFkKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vIFN0b3AgTWxtZSBzdGF0ZSBtYWNoaW5lCisJTWxtZUhhbHQocEFkKTsKKworCS8vIENsb3NlIGtlcm5lbCB0aHJlYWRzIG9yIHRhc2tsZXRzCisJa2lsbF90aHJlYWRfdGFzayhwQWQpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJTWFjVGFibGVSZXNldChwQWQpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisJTWVhc3VyZVJlcVRhYkV4aXQocEFkKTsKKwlUcGNSZXFUYWJFeGl0KHBBZCk7CisKKworCisKKwkvLyBGcmVlIFJpbmcgb3IgVVNCIGJ1ZmZlcnMKKwlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KHBBZCk7CisKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gRnJlZSBCQSByZW9yZGVyIHJlc291cmNlCisJYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBSVDI4NzAKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisJaWYgKHBBZC0+VXNiVmVuZG9yUmVxQnVmKQorCQlvc19mcmVlX21lbShwQWQsIHBBZC0+VXNiVmVuZG9yUmVxQnVmKTsKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKTsKKworCXJldHVybiAwOyAvLyBjbG9zZSBvaworfSAvKiBFbmQgb2YgcnQyOHh4X2Nsb3NlICovCisKK3N0YXRpYyBpbnQgcnQyOHh4X2luaXQoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJUFJUTVBfQURBUFRFUiAJCQlwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCVVJTlQJCQkJCWluZGV4OworCVVDSEFSCQkJCQlUbXBQaHk7CisvLwlVTE9ORwkJCQkJVmFsdWU9MDsKKwlORElTX1NUQVRVUwkJCQlTdGF0dXM7CisvLyAgICBPSURfU0VUX0hUX1BIWU1PREUJCVNldEhUOworLy8JV1BETUFfR0xPX0NGR19TVFJVQyAgICAgR2xvQ2ZnOworCVVJTlQzMiAJCU1hY0NzcjAgPSAwOworCVVJTlQzMgkJTWFjVmFsdWUgPSAwOworCisjaWZkZWYgUlQyODcwCisjaWZkZWYgSU5GX0FNQVpPTl9TRQorCWluaXRfTVVURVgoJihwQWQtPlVzYlZlbmRvclJlcV9zZW1hcGhvcmUpKTsKKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSKSZwQWQtPlVzYlZlbmRvclJlcUJ1ZiwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFIC0gMSk7CisJaWYgKHBBZC0+VXNiVmVuZG9yUmVxQnVmID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBbGxvY2F0ZSB2ZW5kb3IgcmVxdWVzdCB0ZW1wIGJ1ZmZlciBmYWlsZWQhXG4iKSk7CisJCWdvdG8gZXJyMDsKKwl9CisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gQWxsb2NhdGUgQkEgUmVvcmRlcmluZyBtZW1vcnkKKwliYV9yZW9yZGVyaW5nX3Jlc291cmNlX2luaXQocEFkLCBNQVhfUkVPUkRFUklOR19NUERVX05VTSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBNYWtlIHN1cmUgTUFDIGdldHMgcmVhZHkuCisJaW5kZXggPSAwOworCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19DU1IwLCAmTWFjQ3NyMCk7CisJCXBBZC0+TUFDVmVyc2lvbiA9IE1hY0NzcjA7CisKKwkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gIT0gMHgwMCkgJiYgKHBBZC0+TUFDVmVyc2lvbiAhPSAweEZGRkZGRkZGKSkKKwkJCWJyZWFrOworCisJCVJUTVB1c2VjRGVsYXkoMTApOworCX0gd2hpbGUgKGluZGV4KysgPCAxMDApOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTUFDX0NTUjAgIFsgVmVyOlJldj0weCUwOHhdXG4iLCBwQWQtPk1BQ1ZlcnNpb24pKTsKKy8qSXZlcnNvbiBwYXRjaCBQQ0lFIEwxIGlzc3VlICovCisKKwkvLyBEaXNhYmxlIERNQQorCVJUMjhYWERNQURpc2FibGUocEFkKTsKKworCisJLy8gTG9hZCA4MDUxIGZpcm13YXJlCisJU3RhdHVzID0gTklDTG9hZEZpcm13YXJlKHBBZCk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTklDTG9hZEZpcm13YXJlIGZhaWxlZCwgU3RhdHVzWz0weCUwOHhdXG4iLCBTdGF0dXMpKTsKKwkJZ290byBlcnIxOworCX0KKworCU5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKHBBZCk7CisKKwkvLyBEaXNhYmxlIGludGVycnVwdHMgaGVyZSB3aGljaCBpcyBhcyBzb29uIGFzIHBvc3NpYmxlCisJLy8gVGhpcyBzdGF0ZW1lbnQgc2hvdWxkIG5ldmVyIGJlIHRydWUuIFdlIG1pZ2h0IGNvbnNpZGVyIHRvIHJlbW92ZSBpdCBsYXRlcgorCisJU3RhdHVzID0gUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnkocEFkKTsKKwlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVF9FUlIoKCJSVE1QQWxsb2NETUFNZW1vcnkgZmFpbGVkLCBTdGF0dXNbPTB4JTA4eF1cbiIsIFN0YXR1cykpOworCQlnb3RvIGVycjE7CisJfQorCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSk7CisKKwkvLyBpbml0aWFsaXplIE1MTUUKKwkvLworCisJU3RhdHVzID0gTWxtZUluaXQocEFkKTsKKwlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVF9FUlIoKCJNbG1lSW5pdCBmYWlsZWQsIFN0YXR1c1s9MHglMDh4XVxuIiwgU3RhdHVzKSk7CisJCWdvdG8gZXJyMjsKKwl9CisKKwkvLyBJbml0aWFsaXplIHBBZC0+U3RhQ2ZnLCBwQWQtPkFwQ2ZnLCBwQWQtPkNvbW1vbkNmZyB0byBtYW51ZmFjdHVyZSBkZWZhdWx0CisJLy8KKwlVc2VyQ2ZnSW5pdChwQWQpOworCisjaWZkZWYgUlQyODcwCisJLy8gV2UgbmVlZCBpbml0IHRpbWVyUSByZWxhdGVkIHN0cnVjdHVyZSBiZWZvcmUgY3JlYXRlIHRoZSB0aW1lciB0aHJlYWQuCisJUlQyODcwX1RpbWVyUV9Jbml0KHBBZCk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlSVDI4WFhfVEFTS19USFJFQURfSU5JVChwQWQsIFN0YXR1cyk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIGVycjE7CisKKy8vCUNPUFlfTUFDX0FERFIocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLkJzc2lkLCBuZXRpZi0+aHdhZGRyKTsKKy8vCXBBZC0+YkZvcmNlUHJpbnRUWCA9IFRSVUU7CisKKwlDZmdJbml0SG9vayhwQWQpOworCisKKyNpZmRlZiBCTE9DS19ORVRfSUYKKwlpbml0YmxvY2tRdWV1ZVRhYihwQWQpOworI2VuZGlmIC8vIEJMT0NLX05FVF9JRiAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlNZWFzdXJlUmVxVGFiSW5pdChwQWQpOworCVRwY1JlcVRhYkluaXQocEFkKTsKKworCS8vCisJLy8gSW5pdCB0aGUgaGFyZHdhcmUsIHdlIG5lZWQgdG8gaW5pdCBhc2ljIGJlZm9yZSByZWFkIHJlZ2lzdHJ5LCBvdGhlcndpc2UgbWFjIHJlZ2lzdGVyIHdpbGwgYmUgcmVzZXQKKwkvLworCVN0YXR1cyA9IE5JQ0luaXRpYWxpemVBZGFwdGVyKHBBZCwgVFJVRSk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTklDSW5pdGlhbGl6ZUFkYXB0ZXIgZmFpbGVkLCBTdGF0dXNbPTB4JTA4eF1cbiIsIFN0YXR1cykpOworCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gZXJyMzsKKwl9CisKKwkvLyBSZWFkIHBhcmFtZXRlcnMgZnJvbSBDb25maWcgRmlsZQorCVN0YXR1cyA9IFJUTVBSZWFkUGFyYW1ldGVyc0hvb2socEFkKTsKKworCXByaW50aygiMS4gUGh5IE1vZGUgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTklDUmVhZFJlZ1BhcmFtZXRlcnMgZmFpbGVkLCBTdGF0dXNbPTB4JTA4eF1cbiIsU3RhdHVzKSk7CisJCWdvdG8gZXJyNDsKKwl9CisKKyNpZmRlZiBSVDI4NzAKKwlwQWQtPkNvbW1vbkNmZy5iTXVsdGlwbGVJUlAgPSBGQUxTRTsKKworCWlmIChwQWQtPkNvbW1vbkNmZy5iTXVsdGlwbGVJUlApCisJCXBBZC0+Q29tbW9uQ2ZnLk51bU9mQnVsa0luSVJQID0gUlhfUklOR19TSVpFOworCWVsc2UKKwkJcEFkLT5Db21tb25DZmcuTnVtT2ZCdWxrSW5JUlAgPSAxOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyAgIAkvL0luaXQgQmEgQ2FwYWJpbGl0eSBwYXJhbWV0ZXJzLgorLy8JUlQyOFhYX0JBX0lOSVQocEFkKTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHkgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5OworCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdUVuYWJsZSA9IChVU0hPUlQpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlOworCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemUgPSAoVVNIT1JUKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdVNpemU7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QcyA9IChVU0hPUlQpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlOworCS8vIFVQZGF0YSB0byBIVCBJRQorCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGU7CisJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5BTXNkdVNpemUgPSAoVVNIT1JUKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdVNpemU7CisJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBhZnRlciByZWFkaW5nIFJlZ2lzdHJ5LCB3ZSBub3cga25vdyBpZiBpbiBBUCBtb2RlIG9yIFNUQSBtb2RlCisKKwkvLyBMb2FkIDgwNTEgZmlybXdhcmU7IGNyYXNoIHdoZW4gRlcgaW1hZ2Ugbm90IGV4aXN0ZW50CisJLy8gU3RhdHVzID0gTklDTG9hZEZpcm13YXJlKHBBZCk7CisJLy8gaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCS8vICAgIGJyZWFrOworCisJcHJpbnRrKCIyLiBQaHkgTW9kZSA9ICVkXG4iLCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKTsKKworCS8vIFdlIHNob3VsZCByZWFkIEVFUFJPTSBmb3IgYWxsIGNhc2VzLiAgcnQyODYwYgorCU5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzKHBBZCwgbWFjKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXByaW50aygiMy4gUGh5IE1vZGUgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSk7CisKKwlOSUNJbml0QXNpY0Zyb21FRVBST00ocEFkKTsgLy9ydDI4NjBiCisKKwkvLyBTZXQgUEhZIHRvIGFwcHJvcHJpYXRlIG1vZGUKKwlUbXBQaHkgPSBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlOworCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSAweGZmOworCVJUTVBTZXRQaHlNb2RlKHBBZCwgVG1wUGh5KTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlTZXRDb21tb25IVChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy8gTm8gdmFsaWQgY2hhbm5lbHMuCisJaWYgKHBBZC0+Q2hhbm5lbExpc3ROdW0gPT0gMCkKKwl7CisJCXByaW50aygiV3JvbmcgY29uZmlndXJhdGlvbi4gTm8gdmFsaWQgY2hhbm5lbCBmb3VuZC4gQ2hlY2sgXCJDb250cnlDb2RlXCIgYW5kIFwiQ2hhbm5lbEdlb2dyYXBoeVwiIHNldHRpbmcuXG4iKTsKKwkJZ290byBlcnI0OworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCXByaW50aygiTUNTIFNldCA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFswXSwKKyAgICAgICAgICAgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSwgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsyXSwKKyAgICAgICAgICAgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFszXSwgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFs0XSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBSVDMweHgKKyAgICAvL0luaXQgUlQzMHh4IFJGUmVnaXN0ZXJzIGFmdGVyIHJlYWQgUkZJQyB0eXBlIGZyb20gRUVQUk9NCisJTklDSW5pdFJUMzB4eFJGUmVnaXN0ZXJzKHBBZCk7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKy8vCQlBUEluaXRpYWxpemUocEFkKTsKKworI2lmZGVmIElLQU5PU19WWF8xWDAKKwlWUl9JS0FOT1NfRlBfSW5pdChwQWQtPkFwQ2ZnLkJzc2lkTnVtLCBwQWQtPlBlcm1hbmVudEFkZHJlc3MpOworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KKworCQkvLworCS8vIEluaXRpYWxpemUgUkYgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCS8vCisJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKwlpZiAocEFkICYmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykpCisJeworCQkvLworCQkvLyBVbmRvIGV2ZXJ5dGhpbmcgaWYgaXQgZmFpbGVkCisJCS8vCisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJCXsKKy8vCQkJTmRpc01EZXJlZ2lzdGVySW50ZXJydXB0KCZwQWQtPkludGVycnVwdCk7CisJCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpOworCQl9CisvLwkJUlRNUEZyZWVBZGFwdGVyKHBBZCk7IC8vIHdlIHdpbGwgZnJlZSBpdCBpbiBkaXNjb25uZWN0KCkKKwl9CisJZWxzZSBpZiAocEFkKQorCXsKKwkJLy8gTWljcm9zb2Z0IEhDVCByZXF1aXJlIGRyaXZlciBzZW5kIGEgZGlzY29ubmVjdCBldmVudCBhZnRlciBkcml2ZXIgaW5pdGlhbGl6YXRpb24uCisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisvLwkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKwkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTUVESUFfU1RBVEVfQ0hBTkdFKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUIEV2ZW50IEIhXG4iKSk7CisKKworI2lmZGVmIFJUMjg3MAorCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKTsKKwkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpOworCisJCS8vCisJCS8vIFN1cHBvcnQgbXVsdGlwbGUgQnVsa0luIElSUCwKKwkJLy8gdGhlIHZhbHVlIG9uIHBBZC0+Q29tbW9uQ2ZnLk51bU9mQnVsa0luSVJQIG1heSBiZSBsYXJnZSB0aGFuIDEuCisJCS8vCisJCWZvcihpbmRleD0wOyBpbmRleDxwQWQtPkNvbW1vbkNmZy5OdW1PZkJ1bGtJbklSUDsgaW5kZXgrKykKKwkJeworCQkJUlRVU0JCdWxrUmVjZWl2ZShwQWQpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRVU0JCdWxrUmVjZWl2ZSFcbiIgKSk7CisJCX0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwl9Ly8gZW5kIG9mIGVsc2UKKworCisJREJHUFJJTlRfUyhTdGF0dXMsICgiPD09PT0gUlRNUEluaXRpYWxpemUsIFN0YXR1cz0leFxuIiwgU3RhdHVzKSk7CisKKwlyZXR1cm4gVFJVRTsKKworCitlcnI0OgorZXJyMzoKKwlNbG1lSGFsdChwQWQpOworZXJyMjoKKwlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KHBBZCk7CisvLwlSVE1QRnJlZUFkYXB0ZXIocEFkKTsKK2VycjE6CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlvc19mcmVlX21lbShwQWQsIHBBZC0+bXBkdV9ibGtfcG9vbC5tZW0pOyAvLyBmcmVlIEJBIHBvb2wKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlSVDI4WFhfSVJRX1JFTEVBU0UobmV0X2Rldik7CisKKwkvLyBzaGFsbCBub3Qgc2V0IHByaXYgdG8gTlVMTCBoZXJlIGJlY2F1c2UgdGhlIHByaXYgZGlkbid0IGJlZW4gZnJlZSB5ZXQuCisJLy9uZXRfZGV2LT5tbF9wcml2ID0gMDsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCitlcnIwOgorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKwlwcmludGsoIiEhISAlcyBJbml0aWFsaXplZCBmYWlsICEhIVxuIiwgUlQyOHh4X0NISVBfTkFNRSk7CisJcmV0dXJuIEZBTFNFOworfSAvKiBFbmQgb2YgcnQyOHh4X2luaXQgKi8KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIE9wZW4gcmF4eCBpbnRlcmZhY2UuCisKK0FyZ3VtZW50czoKKwkqbmV0X2RldgkJCXRoZSByYXh4IGludGVyZmFjZSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICAwCQkJCQlPcGVuIE9LCisJb3RoZXJ3aXNlCQkJT3BlbiBGYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitpbnQgcnQyOHh4X29wZW4oSU4gUE5FVF9ERVYgZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICogbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldjsKKwlQUlRNUF9BREFQVEVSIHBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJaW50IHJldHZhbCA9IDA7CisgCVBPU19DT09LSUUgcE9iajsKKworCisJLy8gU2FuaXR5IGNoZWNrIGZvciBwQWQKKwlpZiAocEFkID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC0xOworCX0KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCisJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkKKwl7CisJCUNXX01BWF9JTl9CSVRTID0gNjsKKwl9CisJZWxzZSBpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwl7CisJCUNXX01BWF9JTl9CSVRTID0gMTA7CisJfQorCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisJaWYgKG5ldF9kZXYtPm1sX3ByaXZfZmxhZ3MgPT0gSU5UX01BSU4pCisJeworCQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKQorCQkJbmV0X2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZydDI4eHhfYXBfaXdfaGFuZGxlcl9kZWY7CisJCWVsc2UgaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisJCQluZXRfZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikgJnJ0Mjh4eF9pd19oYW5kbGVyX2RlZjsKKwl9CisjZW5kaWYgLy8gV0lSRUxFU1NfRVhUID49IDEyIC8vCisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gSW5pdAorIAlwT2JqID0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CisKKwkvLyByZXNldCBBZGFwdGVyIGZsYWdzCisJUlRNUF9DTEVBUl9GTEFHUyhwQWQpOworCisJLy8gUmVxdWVzdCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBQQ0kgZGV2aWNlCisJLy8gcmVnaXN0ZXIgdGhlIGludGVycnVwdCByb3V0aW5lIHdpdGggdGhlIG9zCisJUlQyOFhYX0lSUV9SRVFVRVNUKG5ldF9kZXYpOworCisKKwkvLyBJbml0IEJzc1RhYiAmIENoYW5uZWxJbmZvIHRhYmJsZXMgZm9yIGF1dG8gY2hhbm5lbCBzZWxlY3QuCisKKworCS8vIENoaXAgJiBvdGhlciBpbml0CisJaWYgKHJ0Mjh4eF9pbml0KG5ldF9kZXYpID09IEZBTFNFKQorCQlnb3RvIGVycjsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5kZXZfbmFtZSwgMTYpOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5kZXZfbmFtZSwgbmV0X2Rldi0+bmFtZSwgc3RybGVuKG5ldF9kZXYtPm5hbWUpKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBTZXQgdXAgdGhlIE1hYyBhZGRyZXNzCisJTmRpc01vdmVNZW1vcnkobmV0X2Rldi0+ZGV2X2FkZHIsICh2b2lkICopIHBBZC0+Q3VycmVudEFkZHJlc3MsIDYpOworCisJLy8gSW5pdCBJUlEgcGFyYW1ldGVycworCVJUMjhYWF9JUlFfSU5JVChwQWQpOworCisJLy8gVmFyaW91cyBBUCBmdW5jdGlvbiBpbml0CisKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCQl7CisJCQl1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisJCQkvLyBzZW5kIHdpcmVsZXNzIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50IGZvciBpbmZyb21pbmcgaW50ZXJmYWNlIGRvd24uCisJCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSBSVF9JTlRFUkZBQ0VfVVA7CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworCQl9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBFbmFibGUgSW50ZXJydXB0CisJUlQyOFhYX0lSUV9FTkFCTEUocEFkKTsKKworCS8vIE5vdyBFbmFibGUgUnhUeAorCVJUTVBFbmFibGVSeFR4KHBBZCk7CisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApOworCisJeworCVVJTlQzMiByZWcgPSAwOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgMHgxMzAwLCAmcmVnKTsgIC8vIGNsZWFyIGdhcmJhZ2UgaW50ZXJydXB0cworCXByaW50aygiMHgxMzAwID0gJTA4eFxuIiwgcmVnKTsKKwl9CisKKwl7CisvLwl1MzIgcmVnOworLy8JdTggIGJ5dGU7CisvLwl1MTYgdG1wOworCisvLwlSVE1QX0lPX1JFQUQzMihwQWQsIFhJRlNfVElNRV9DRkcsICZyZWcpOworCisvLwl0bXAgPSAweDA4MDU7CisvLwlyZWcgID0gKHJlZyAmIDB4ZmZmZjAwMDApIHwgdG1wOworLy8JUlRNUF9JT19XUklURTMyKHBBZCwgWElGU19USU1FX0NGRywgcmVnKTsKKworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcmV0dXJuIChyZXR2YWwpOworCitlcnI6CisJcmV0dXJuICgtMSk7Cit9IC8qIEVuZCBvZiBydDI4eHhfb3BlbiAqLworCisKKy8qIE11c3Qgbm90IGJlIGNhbGxlZCBmb3IgbWRldiBhbmQgYXBkZXYgKi8KK3N0YXRpYyBORElTX1NUQVRVUyBydF9pZWVlODAyMTFfaWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTkRJU19TVEFUVVMgU3RhdHVzOworCUlOVCAgICAgaT0wOworCUNIQVIgICAgc2xvdF9uYW1lW0lGTkFNU0laXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAgICpkZXZpY2U7CisKKworCS8vZXRoZXJfc2V0dXAoZGV2KTsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHJ0Mjh4eF9zZW5kX3BhY2tldHM7CisKKyNpZmRlZiBJS0FOT1NfVlhfMVgwCisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBJS0FOT1NfRGF0YUZyYW1lc1R4OworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KKworLy8JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0OworLy8JZGV2LT5jaGFuZ2VfbXR1ID0gaWVlZTgwMjExX2NoYW5nZV9tdHU7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisJeworCQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJ0Mjh4eF9pd19oYW5kbGVyX2RlZjsKKwl9CisjZW5kaWYgLy9XSVJFTEVTU19FWFQgPj0gMTIKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkKKwl7CisJCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcnQyOHh4X2FwX2l3X2hhbmRsZXJfZGVmOworCX0KKyNlbmRpZiAvL1dJUkVMRVNTX0VYVCA+PSAxMgorI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisKKyNpZiBXSVJFTEVTU19FWFQgPCAyMQorCQlkZXYtPmdldF93aXJlbGVzc19zdGF0cyA9IHJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHM7CisjZW5kaWYKKwlkZXYtPmdldF9zdGF0cyA9IFJUMjh4eF9nZXRfZXRoZXJfc3RhdHM7CisJZGV2LT5vcGVuID0gTWFpblZpcnR1YWxJRl9vcGVuOyAvL3J0Mjh4eF9vcGVuOworCWRldi0+c3RvcCA9IE1haW5WaXJ0dWFsSUZfY2xvc2U7IC8vcnQyOHh4X2Nsb3NlOworLy8JZGV2LT51bmluaXQgPSBpZWVlODAyMTFfaWZfcmVpbml0OworLy8JZGV2LT5kZXN0cnVjdG9yID0gaWVlZTgwMjExX2lmX2ZyZWU7CisJZGV2LT5wcml2X2ZsYWdzID0gSU5UX01BSU47CisJZGV2LT5kb19pb2N0bCA9IHJ0Mjh4eF9pb2N0bDsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQorICAgIGRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7CisjZW5kaWYKKwkvLyBmaW5kIGF2YWlsYWJsZSBkZXZpY2UgbmFtZQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJeworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorCQlpZiAocEFkLT5NQ19Sb3dJRCA+PSAwKQorCQkJc3ByaW50ZihzbG90X25hbWUsICJyYSUwMmRfJWQiLCBwQWQtPk1DX1Jvd0lELCBpKTsKKwkJZWxzZQorI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCQlzcHJpbnRmKHNsb3RfbmFtZSwgInJhJWQiLCBpKTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjYpCisgICAgICAgIGRldmljZSA9IGRldl9nZXRfYnlfbmFtZShkZXZfbmV0KGRldiksIHNsb3RfbmFtZSk7CisjZWxzZQorICAgICAgICBkZXZpY2UgPSBkZXZfZ2V0X2J5X25hbWUoZGV2LT5uZF9uZXQsIHNsb3RfbmFtZSk7CisjZW5kaWYKKyNlbHNlCisJCWRldmljZSA9IGRldl9nZXRfYnlfbmFtZShzbG90X25hbWUpOworI2VuZGlmCisJCWlmIChkZXZpY2UgIT0gTlVMTCkgZGV2X3B1dChkZXZpY2UpOworI2Vsc2UKKwkJZm9yIChkZXZpY2UgPSBkZXZfYmFzZTsgZGV2aWNlICE9IE5VTEw7IGRldmljZSA9IGRldmljZS0+bmV4dCkKKwkJeworCQkJaWYgKHN0cm5jbXAoZGV2aWNlLT5uYW1lLCBzbG90X25hbWUsIDQpID09IDApCisJCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlpZihkZXZpY2UgPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKworCWlmKGkgPT0gOCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk5vIGF2YWlsYWJsZSBzbG90IG5hbWVcbiIpKTsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisJZWxzZQorCXsKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKwkJaWYgKHBBZC0+TUNfUm93SUQgPj0gMCkKKwkgICAgICAgIHNwcmludGYoZGV2LT5uYW1lLCAicmElMDJkXyVkIiwgcEFkLT5NQ19Sb3dJRCwgaSk7CisJCWVsc2UKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKwkJc3ByaW50ZihkZXYtPm5hbWUsICJyYSVkIiwgaSk7CisJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJfQorCisJcmV0dXJuIFN0YXR1czsKKworfQorCisKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgR2V0IGNhcmQgcHJvZmlsZSBwYXRoLgorCitBcmd1bWVudHM6CisgICAgcEFkCisKK1JldHVybiBWYWx1ZToKKyAgICBUUlVFCQktIEZpbmQgYSBjYXJkIHByb2ZpbGUKKwlGQUxTRQkJLSB1c2UgZGVmYXVsdCBwcm9maWxlCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitleHRlcm4gSU5UIFJUTVBHZXRLZXlQYXJhbWV0ZXIoCisgICAgSU4gIFBDSEFSICAga2V5LAorICAgIE9VVCBQQ0hBUiAgIGRlc3QsCisgICAgSU4gIElOVCAgICAgZGVzdHNpemUsCisgICAgSU4gIFBDSEFSICAgYnVmZmVyKTsKKworQk9PTEVBTiBSVE1QX0NhcmRJbmZvUmVhZCgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyNkZWZpbmUgTUNfU0VMRUNUX0NBUkRJRAkJMAkvKiB1c2UgQ0FSRCBJRCAoMCB+IDMxKSB0byBpZGVudGlmeSBkaWZmZXJlbnQgY2FyZHMgKi8KKyNkZWZpbmUgTUNfU0VMRUNUX01BQwkJCTEJLyogdXNlIENBUkQgTUFDIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBjYXJkcyAqLworI2RlZmluZSBNQ19TRUxFQ1RfQ0FSRFRZUEUJCTIJLyogdXNlIENBUkQgdHlwZSAoYWJnbiBvciBiZ24pIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBjYXJkcyAqLworCisjZGVmaW5lIExFVFRFUl9DQVNFX1RSQU5TTEFURSh0eHRfcCwgY2FyZF9pZCkJCQlcCisJewlVSU5UMzIgX2xlbjsgY2hhciBfY2hhcjsJCQkJCQlcCisJCWZvcihfbGVuPTA7IF9sZW48c3RybGVuKGNhcmRfaWQpOyBfbGVuKyspIHsJCVwKKwkJCV9jaGFyID0gKih0eHRfcCArIF9sZW4pOwkJCQkJXAorCQkJaWYgKCgnQScgPD0gX2NoYXIpICYmIChfY2hhciA8PSAnWicpKQkJXAorCQkJCSoodHh0X3ArX2xlbikgPSAnYScrKF9jaGFyLSdBJyk7CQlcCisJCX0gfQorCisJc3RydWN0IGZpbGUgKnNyY2Y7CisJSU5UIHJldHZhbCwgb3JnZnN1aWQsIG9yZ2ZzZ2lkOworICAgCW1tX3NlZ21lbnRfdCBvcmdmczsKKwlDSEFSICpidWZmZXIsICp0bXBidWYsIGNhcmRfaWRfYnVmWzMwXSwgUkZJQ193b3JkWzMwXTsKKwlCT09MRUFOIGZsZ19tYXRjaF9vayA9IEZBTFNFOworCUlOVDMyIGNhcmRfc2VsZWN0X21ldGhvZDsKKwlJTlQzMiBjYXJkX2ZyZWVfaWQsIGNhcmRfbm91c2VfaWQsIGNhcmRfc2FtZV9tYWNfaWQsIGNhcmRfbWF0Y2hfaWQ7CisJRUVQUk9NX0FOVEVOTkFfU1RSVUMgYW50ZW5uYTsKKwlVU0hPUlQgYWRkcjAxLCBhZGRyMjMsIGFkZHI0NTsKKwlVSU5UOCBtYWNbNl07CisJVUlOVDMyIGRhdGEsIGNhcmRfaW5kZXg7CisJVUNIQVIgKnN0YXJ0X3B0cjsKKworCisJLy8gaW5pdAorCWJ1ZmZlciA9IGttYWxsb2MoTUFYX0lOSV9CVUZGRVJfU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCWlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisJdG1wYnVmID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlpZih0bXBidWYgPT0gTlVMTCkKKwl7CisJCWtmcmVlKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCW9yZ2ZzdWlkID0gY3VycmVudC0+ZnN1aWQ7CisJb3JnZnNnaWQgPSBjdXJyZW50LT5mc2dpZDsKKwljdXJyZW50LT5mc3VpZCA9IGN1cnJlbnQtPmZzZ2lkID0gMDsKKyAgICBvcmdmcyA9IGdldF9mcygpOworICAgIHNldF9mcyhLRVJORUxfRFMpOworCisJLy8gZ2V0IFJGIElDIHR5cGUKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZkYXRhKTsKKworCWlmICgoZGF0YSAmIDB4MzApID09IDApCisJCXBBZC0+RUVQUk9NQWRkcmVzc051bSA9IDY7CS8vIDkzQzQ2CisJZWxzZSBpZiAoKGRhdGEgJiAweDMwKSA9PSAweDEwKQorCQlwQWQtPkVFUFJPTUFkZHJlc3NOdW0gPSA4OwkvLyA5M0M2NgorCWVsc2UKKwkJcEFkLT5FRVBST01BZGRyZXNzTnVtID0gODsJLy8gOTNDODYKKworCS8vYW50ZW5uYS53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX05JQzFfT0ZGU0VUKTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9OSUMxX09GRlNFVCwgYW50ZW5uYS53b3JkKTsKKworCWlmICgoYW50ZW5uYS5maWVsZC5SZkljVHlwZSA9PSBSRklDXzI4NTApIHx8CisJCShhbnRlbm5hLmZpZWxkLlJmSWNUeXBlID09IFJGSUNfMjc1MCkpCisJeworCQkvKiBBQkdOIGNhcmQgKi8KKwkJc3RyY3B5KFJGSUNfd29yZCwgImFiZ24iKTsKKwl9CisJZWxzZQorCXsKKwkJLyogQkdOIGNhcmQgKi8KKwkJc3RyY3B5KFJGSUNfd29yZCwgImJnbiIpOworCX0KKworCS8vIGdldCBNQUMgYWRkcmVzcworCS8vYWRkcjAxID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgMHgwNCk7CisJLy9hZGRyMjMgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCAweDA2KTsKKwkvL2FkZHI0NSA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDgpOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgwNCwgYWRkcjAxKTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDYsIGFkZHIyMyk7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDA4LCBhZGRyNDUpOworCisJbWFjWzBdID0gKFVDSEFSKShhZGRyMDEgJiAweGZmKTsKKwltYWNbMV0gPSAoVUNIQVIpKGFkZHIwMSA+PiA4KTsKKwltYWNbMl0gPSAoVUNIQVIpKGFkZHIyMyAmIDB4ZmYpOworCW1hY1szXSA9IChVQ0hBUikoYWRkcjIzID4+IDgpOworCW1hY1s0XSA9IChVQ0hBUikoYWRkcjQ1ICYgMHhmZik7CisJbWFjWzVdID0gKFVDSEFSKShhZGRyNDUgPj4gOCk7CisKKwkvLyBvcGVuIGNhcmQgaW5mb3JtYXRpb24gZmlsZQorCXNyY2YgPSBmaWxwX29wZW4oQ0FSRF9JTkZPX1BBVEgsIE9fUkRPTkxZLCAwKTsKKwlpZiAoSVNfRVJSKHNyY2YpKQorCXsKKwkJLyogY2FyZCBpbmZvcm1hdGlvbiBmaWxlIGRvZXMgbm90IGV4aXN0ICovCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCQkoIi0tPiBFcnJvciAlbGQgb3BlbmluZyAlc1xuIiwgLVBUUl9FUlIoc3JjZiksIENBUkRfSU5GT19QQVRIKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoc3JjZi0+Zl9vcCAmJiBzcmNmLT5mX29wLT5yZWFkKQorCXsKKwkJLyogY2FyZCBpbmZvcm1hdGlvbiBmaWxlIGV4aXN0cyBzbyByZWFkaW5nIHRoZSBjYXJkIGluZm9ybWF0aW9uICovCisJCW1lbXNldChidWZmZXIsIDB4MDAsIE1BWF9JTklfQlVGRkVSX1NJWkUpOworCQlyZXR2YWwgPSBzcmNmLT5mX29wLT5yZWFkKHNyY2YsIGJ1ZmZlciwgTUFYX0lOSV9CVUZGRVJfU0laRSwgJnNyY2YtPmZfcG9zKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCXsKKwkJCS8qIHJlYWQgZmFpbCAqLworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCQkoIi0tPiBSZWFkICVzIGVycm9yICVkXG4iLCBDQVJEX0lORk9fUEFUSCwgLXJldHZhbCkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogZ2V0IGNhcmQgc2VsZWN0aW9uIG1ldGhvZCAqLworCQkJbWVtc2V0KHRtcGJ1ZiwgMHgwMCwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKwkJCWNhcmRfc2VsZWN0X21ldGhvZCA9IE1DX1NFTEVDVF9DQVJEVFlQRTsgLy8gZGVmYXVsdAorCisJCQlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiU0VMRUNUIiwgdG1wYnVmLCAyNTYsIGJ1ZmZlcikpCisJCQl7CisJCQkJaWYgKHN0cmNtcCh0bXBidWYsICJDQVJESUQiKSA9PSAwKQorCQkJCQljYXJkX3NlbGVjdF9tZXRob2QgPSBNQ19TRUxFQ1RfQ0FSRElEOworCQkJCWVsc2UgaWYgKHN0cmNtcCh0bXBidWYsICJNQUMiKSA9PSAwKQorCQkJCQljYXJkX3NlbGVjdF9tZXRob2QgPSBNQ19TRUxFQ1RfTUFDOworCQkJCWVsc2UgaWYgKHN0cmNtcCh0bXBidWYsICJDQVJEVFlQRSIpID09IDApCisJCQkJCWNhcmRfc2VsZWN0X21ldGhvZCA9IE1DX1NFTEVDVF9DQVJEVFlQRTsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkJCSgiTUM+IENhcmQgU2VsZWN0aW9uID0gJWRcbiIsIGNhcmRfc2VsZWN0X21ldGhvZCkpOworCisJCQkvLyBpbml0CisJCQljYXJkX2ZyZWVfaWQgPSAtMTsKKwkJCWNhcmRfbm91c2VfaWQgPSAtMTsKKwkJCWNhcmRfc2FtZV9tYWNfaWQgPSAtMTsKKwkJCWNhcmRfbWF0Y2hfaWQgPSAtMTsKKworCQkJLy8gc2VhcmNoIGN1cnJlbnQgY2FyZCBpbmZvcm1hdGlvbiByZWNvcmRzCisJCQlmb3IoY2FyZF9pbmRleD0wOworCQkJCWNhcmRfaW5kZXg8TUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEOworCQkJCWNhcmRfaW5kZXgrKykKKwkJCXsKKwkJCQlpZiAoKCooVUlOVDMyICopJk1DX0NhcmRNYWNbY2FyZF9pbmRleF1bMF0gPT0gMCkgJiYKKwkJCQkJKCooVUlOVDE2ICopJk1DX0NhcmRNYWNbY2FyZF9pbmRleF1bNF0gPT0gMCkpCisJCQkJeworCQkJCQkvLyBNQUMgaXMgYWxsLTAgc28gdGhlIGVudHJ5IGlzIGF2YWlsYWJsZQorCQkJCQlNQ19DYXJkVXNlZFtjYXJkX2luZGV4XSA9IDA7CisKKwkJCQkJaWYgKGNhcmRfZnJlZV9pZCA8IDApCisJCQkJCQljYXJkX2ZyZWVfaWQgPSBjYXJkX2luZGV4OyAvLyAxc3QgZnJlZSBlbnRyeQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAobWVtY21wKE1DX0NhcmRNYWNbY2FyZF9pbmRleF0sIG1hYywgNikgPT0gMCkKKwkJCQkJeworCQkJCQkJLy8gd2UgZmluZCB0aGUgZW50cnkgd2l0aCBzYW1lIE1BQworCQkJCQkJaWYgKGNhcmRfc2FtZV9tYWNfaWQgPCAwKQorCQkJCQkJCWNhcmRfc2FtZV9tYWNfaWQgPSBjYXJkX2luZGV4OyAvLyAxc3Qgc2FtZSBlbnRyeQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy8gTUFDIGlzIG5vdCBhbGwtMCBidXQgdXNlZCBmbGFnID09IDAKKwkJCQkJCWlmICgoTUNfQ2FyZFVzZWRbY2FyZF9pbmRleF0gPT0gMCkgJiYKKwkJCQkJCQkoY2FyZF9ub3VzZV9pZCA8IDApKQorCQkJCQkJeworCQkJCQkJCWNhcmRfbm91c2VfaWQgPSBjYXJkX2luZGV4OyAvLyAxc3QgYXZhaWxhYmxlIGVudHJ5CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCQkoIk1DPiBGcmVlID0gJWQsIFNhbWUgPSAlZCwgTk9VU0UgPSAlZFxuIiwKKwkJCQkJY2FyZF9mcmVlX2lkLCBjYXJkX3NhbWVfbWFjX2lkLCBjYXJkX25vdXNlX2lkKSk7CisKKwkJCWlmICgoY2FyZF9zYW1lX21hY19pZCA+PSAwKSAmJgorCQkJCSgoY2FyZF9zZWxlY3RfbWV0aG9kID09IE1DX1NFTEVDVF9DQVJESUQpIHx8CisJCQkJKGNhcmRfc2VsZWN0X21ldGhvZCA9PSBNQ19TRUxFQ1RfQ0FSRFRZUEUpKSkKKwkJCXsKKwkJCQkvLyBzYW1lIE1BQyBlbnRyeSBpcyBmb3VuZAorCQkJCWNhcmRfbWF0Y2hfaWQgPSBjYXJkX3NhbWVfbWFjX2lkOworCisJCQkJaWYgKGNhcmRfc2VsZWN0X21ldGhvZCA9PSBNQ19TRUxFQ1RfQ0FSRFRZUEUpCisJCQkJeworCQkJCQkvLyBmb3IgQ0FSRFRZUEUKKwkJCQkJc3ByaW50ZihjYXJkX2lkX2J1ZiwgIiUwMmRDQVJEVFlQRSVzIiwKKwkJCQkJCQljYXJkX21hdGNoX2lkLCBSRklDX3dvcmQpOworCisJCQkJCWlmICgoc3RhcnRfcHRyPXJ0c3Ryc3RydW5jYXNlY21wKGJ1ZmZlciwgY2FyZF9pZF9idWYpKSAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQkvLyB3ZSBmb3VuZCB0aGUgY2FyZCBJRAorCQkJCQkJTEVUVEVSX0NBU0VfVFJBTlNMQVRFKHN0YXJ0X3B0ciwgY2FyZF9pZF9idWYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIHRoZSBjYXJkIGlzIDFzdCBwbHVnLWluLCB0cnkgdG8gZmluZCB0aGUgbWF0Y2ggY2FyZCBwcm9maWxlCisJCQkJc3dpdGNoKGNhcmRfc2VsZWN0X21ldGhvZCkKKwkJCQl7CisJCQkJCWNhc2UgTUNfU0VMRUNUX0NBUkRJRDogLy8gQ0FSRElECisJCQkJCWRlZmF1bHQ6CisJCQkJCQlpZiAoY2FyZF9mcmVlX2lkID49IDApCisJCQkJCQkJY2FyZF9tYXRjaF9pZCA9IGNhcmRfZnJlZV9pZDsKKwkJCQkJCWVsc2UKKwkJCQkJCQljYXJkX21hdGNoX2lkID0gY2FyZF9ub3VzZV9pZDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgTUNfU0VMRUNUX01BQzogLy8gTUFDCisJCQkJCQlzcHJpbnRmKGNhcmRfaWRfYnVmLCAiTUFDJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQkJCQkJCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLAorCQkJCQkJCQltYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKworCQkJCQkJLyogdHJ5IHRvIGZpbmQgdGhlIGtleSB3b3JkIGluIHRoZSBjYXJkIGZpbGUgKi8KKwkJCQkJCWlmICgoc3RhcnRfcHRyPXJ0c3Ryc3RydW5jYXNlY21wKGJ1ZmZlciwgY2FyZF9pZF9idWYpKSAhPSBOVUxMKQorCQkJCQkJeworCQkJCQkJCUxFVFRFUl9DQVNFX1RSQU5TTEFURShzdGFydF9wdHIsIGNhcmRfaWRfYnVmKTsKKworCQkJCQkJCS8qIGdldCB0aGUgcm93IElEICgyIEFTQ0lJIGNoYXJhY3RlcnMpICovCisJCQkJCQkJc3RhcnRfcHRyIC09IDI7CisJCQkJCQkJY2FyZF9pZF9idWZbMF0gPSAqKHN0YXJ0X3B0cik7CisJCQkJCQkJY2FyZF9pZF9idWZbMV0gPSAqKHN0YXJ0X3B0cisxKTsKKwkJCQkJCQljYXJkX2lkX2J1ZlsyXSA9IDB4MDA7CisKKwkJCQkJCQljYXJkX21hdGNoX2lkID0gc2ltcGxlX3N0cnRvbChjYXJkX2lkX2J1ZiwgMCwgMTApOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBNQ19TRUxFQ1RfQ0FSRFRZUEU6IC8vIENBUkRUWVBFCisJCQkJCQljYXJkX25vdXNlX2lkID0gLTE7CisKKwkJCQkJCWZvcihjYXJkX2luZGV4PTA7CisJCQkJCQkJY2FyZF9pbmRleDxNQVhfTlVNX09GX01VTFRJUExFX0NBUkQ7CisJCQkJCQkJY2FyZF9pbmRleCsrKQorCQkJCQkJeworCQkJCQkJCXNwcmludGYoY2FyZF9pZF9idWYsICIlMDJkQ0FSRFRZUEUlcyIsCisJCQkJCQkJCQljYXJkX2luZGV4LCBSRklDX3dvcmQpOworCisJCQkJCQkJaWYgKChzdGFydF9wdHI9cnRzdHJzdHJ1bmNhc2VjbXAoYnVmZmVyLAorCQkJCQkJCQkJCQkJCQljYXJkX2lkX2J1ZikpICE9IE5VTEwpCisJCQkJCQkJeworCQkJCQkJCQlMRVRURVJfQ0FTRV9UUkFOU0xBVEUoc3RhcnRfcHRyLCBjYXJkX2lkX2J1Zik7CisKKwkJCQkJCQkJaWYgKE1DX0NhcmRVc2VkW2NhcmRfaW5kZXhdID09IDApCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8qIGN1cnJlbnQgdGhlIGNhcmQgcHJvZmlsZSBpcyBub3QgdXNlZCAqLworCQkJCQkJCQkJaWYgKCgqKFVJTlQzMiAqKSZNQ19DYXJkTWFjW2NhcmRfaW5kZXhdWzBdID09IDApICYmCisJCQkJCQkJCQkJKCooVUlOVDE2ICopJk1DX0NhcmRNYWNbY2FyZF9pbmRleF1bNF0gPT0gMCkpCisJCQkJCQkJCQl7CisJCQkJCQkJCQkJLy8gZmluZCBpdCBhbmQgbm8gcHJldmlvdXMgY2FyZCB1c2UgaXQKKwkJCQkJCQkJCQljYXJkX21hdGNoX2lkID0gY2FyZF9pbmRleDsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQkvLyBldmVyIGEgY2FyZCB1c2UgaXQKKwkJCQkJCQkJCQlpZiAoY2FyZF9ub3VzZV9pZCA8IDApCisJCQkJCQkJCQkJCWNhcmRfbm91c2VfaWQgPSBjYXJkX2luZGV4OworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBpZiBub3QgZmluZCBhIGZyZWUgb25lLCB1c2UgdGhlIGF2YWlsYWJsZSBvbmUKKwkJCQkJCWlmIChjYXJkX21hdGNoX2lkIDwgMCkKKwkJCQkJCQljYXJkX21hdGNoX2lkID0gY2FyZF9ub3VzZV9pZDsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNhcmRfbWF0Y2hfaWQgPj0gMCkKKwkJCXsKKwkJCQkvLyBtYWtlIHVwIHNlYXJjaCBrZXl3b3JkCisJCQkJc3dpdGNoKGNhcmRfc2VsZWN0X21ldGhvZCkKKwkJCQl7CisJCQkJCWNhc2UgTUNfU0VMRUNUX0NBUkRJRDogLy8gQ0FSRElECisJCQkJCQlzcHJpbnRmKGNhcmRfaWRfYnVmLCAiJTAyZENBUkRJRCIsIGNhcmRfbWF0Y2hfaWQpOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBNQ19TRUxFQ1RfTUFDOiAvLyBNQUMKKwkJCQkJCXNwcmludGYoY2FyZF9pZF9idWYsCisJCQkJCQkJCSIlMDJkbWFjJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQkJCQkJCQljYXJkX21hdGNoX2lkLAorCQkJCQkJCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLAorCQkJCQkJCQltYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgTUNfU0VMRUNUX0NBUkRUWVBFOiAvLyBDQVJEVFlQRQorCQkJCQlkZWZhdWx0OgorCQkJCQkJc3ByaW50ZihjYXJkX2lkX2J1ZiwgIiUwMmRjYXJkdHlwZSVzIiwKKwkJCQkJCQkJY2FyZF9tYXRjaF9pZCwgUkZJQ193b3JkKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlYXJjaCBLZXl3b3JkID0gJXNcbiIsIGNhcmRfaWRfYnVmKSk7CisKKwkJCQkvLyByZWFkIGNhcmQgZmlsZSBwYXRoCisJCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoY2FyZF9pZF9idWYsIHRtcGJ1ZiwgMjU2LCBidWZmZXIpKQorCQkJCXsKKwkJCQkJaWYgKHN0cmxlbih0bXBidWYpIDwgc2l6ZW9mKHBBZC0+TUNfRmlsZU5hbWUpKQorCQkJCQl7CisJCQkJCQkvLyBiYWNrdXAgY2FyZCBpbmZvcm1hdGlvbgorCQkJCQkJcEFkLT5NQ19Sb3dJRCA9IGNhcmRfbWF0Y2hfaWQ7IC8qIGJhc2UgMCAqLworCQkJCQkJTUNfQ2FyZFVzZWRbY2FyZF9tYXRjaF9pZF0gPSAxOworCQkJCQkJbWVtY3B5KE1DX0NhcmRNYWNbY2FyZF9tYXRjaF9pZF0sIG1hYywgc2l6ZW9mKG1hYykpOworCisJCQkJCQkvLyBiYWNrdXAgY2FyZCBmaWxlIHBhdGgKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TUNfRmlsZU5hbWUsIHRtcGJ1ZiAsIHN0cmxlbih0bXBidWYpKTsKKwkJCQkJCXBBZC0+TUNfRmlsZU5hbWVbc3RybGVuKHRtcGJ1ZildID0gJ1wwJzsKKwkJCQkJCWZsZ19tYXRjaF9vayA9IFRSVUU7CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCQkJCQkoIkNhcmQgUHJvZmlsZSBOYW1lID0gJXNcbiIsIHBBZC0+TUNfRmlsZU5hbWUpKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAorCQkJCQkJCQkoIkNhcmQgUHJvZmlsZSBOYW1lIGxlbmd0aCB0b28gbGFyZ2UhXG4iKSk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCisJCQkJCQkJKCJDYW4gbm90IGZpbmQgc2VhcmNoIGtleSB3b3JkIGluIGNhcmQuZGF0IVxuIikpOworCQkJCX0KKworCQkJCWlmICgoZmxnX21hdGNoX29rICE9IFRSVUUpICYmCisJCQkJCShjYXJkX21hdGNoX2lkIDwgTUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEKSkKKwkJCQl7CisJCQkJCU1DX0NhcmRVc2VkW2NhcmRfbWF0Y2hfaWRdID0gMDsKKwkJCQkJbWVtc2V0KE1DX0NhcmRNYWNbY2FyZF9tYXRjaF9pZF0sIDAsIHNpemVvZihtYWMpKTsKKwkJCQl9CisJCQl9IC8vIGlmIChjYXJkX21hdGNoX2lkID49IDApCisJCX0KKwl9CisKKwkvLyBjbG9zZSBmaWxlCisJcmV0dmFsID0gZmlscF9jbG9zZShzcmNmLCBOVUxMKTsKKwlzZXRfZnMob3JnZnMpOworCWN1cnJlbnQtPmZzdWlkID0gb3JnZnN1aWQ7CisJY3VycmVudC0+ZnNnaWQgPSBvcmdmc2dpZDsKKwlrZnJlZShidWZmZXIpOworCWtmcmVlKHRtcGJ1Zik7CisJcmV0dXJuIGZsZ19tYXRjaF9vazsKK30KKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIFByb2JlIFJUMjhYWCBjaGlwc2V0LgorCitBcmd1bWVudHM6CisgICAgX2Rldl9wCQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZQorCV9kZXZfaWRfcAkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZSBJRAorCitSZXR1cm4gVmFsdWU6CisgICAgMAkJCQkJUHJvYmUgT0sKKwktRU5PREVWCQkJCVByb2JlIEZhaWwKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBfX2RldmluaXQgICBydDI4eHhfcHJvYmUoCisgICAgSU4gIHZvaWQgKl9kZXZfcCwKKyAgICBJTiAgdm9pZCAqX2Rldl9pZF9wLAorCUlOICBVSU5UIGFyZ2MsCisJT1VUIFBSVE1QX0FEQVBURVIgKnBwQWQpCit7CisgICAgc3RydWN0ICBuZXRfZGV2aWNlCSpuZXRfZGV2OworICAgIFBSVE1QX0FEQVBURVIgICAgICAgcEFkID0gKFBSVE1QX0FEQVBURVIpIE5VTEw7CisgICAgSU5UICAgICAgICAgICAgICAgICBzdGF0dXM7CisJUFZPSUQJCQkJaGFuZGxlOworI2lmZGVmIFJUMjg3MAorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZfcCA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKV9kZXZfcDsKKyNlbHNlCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKilfZGV2X3A7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldl9wID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCWRldl9wID0gdXNiX2dldF9kZXYoZGV2X3ApOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTVEEgRHJpdmVyIHZlcnNpb24tJXNcbiIsIFNUQV9EUklWRVJfVkVSU0lPTikpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gQ2hlY2sgY2hpcHNldCB2ZW5kb3IvcHJvZHVjdCBJRAorLy8JaWYgKFJUMjhYWENoaXBzZXRDaGVjayhfZGV2X3ApID09IEZBTFNFKQorLy8JCWdvdG8gZXJyX291dDsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAweDIwNDAyICAgICAgIC8vIFJlZCBIYXQgNy4xCisgICAgbmV0X2RldiA9IGFsbG9jX25ldGRldihzaXplb2YoUFJUTVBfQURBUFRFUiksICJldGglZCIsIGV0aGVyX3NldHVwKTsKKyNlbHNlCisgICAgbmV0X2RldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihQUlRNUF9BREFQVEVSKSk7CisjZW5kaWYKKyAgICBpZiAobmV0X2RldiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJhbGxvY19uZXRkZXYgZmFpbGVkXG4iKTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworI2VuZGlmIC8vTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQorI2Vsc2UKKwkJTU9EX0RFQ19VU0VfQ09VTlQ7CisjZW5kaWYKKyAgICAgICAgZ290byBlcnJfb3V0OworICAgIH0KKworLy8gc2FtcGxlCisvLwlpZiAocnRfaWVlZTgwMjExX2lmX3NldHVwKG5ldF9kZXYpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisvLwkJZ290byBlcnJfb3V0OworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQorICAgIFNFVF9NT0RVTEVfT1dORVIobmV0X2Rldik7CisjZW5kaWYKKworCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7CisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKy8qIGZvciBzdXBwb3J0aW5nIE5ldHdvcmsgTWFuYWdlciAqLworLyogU2V0IHRoZSBzeXNmcyBwaHlzaWNhbCBkZXZpY2UgcmVmZXJlbmNlIGZvciB0aGUgbmV0d29yayBsb2dpY2FsIGRldmljZQorICogaWYgc2V0IHByaW9yIHRvIHJlZ2lzdHJhdGlvbiB3aWxsIGNhdXNlIGEgc3ltbGluayBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgKi8KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKyAgICBTRVRfTkVUREVWX0RFVihuZXRfZGV2LCAmKGRldl9wLT5kZXYpKTsKKyNlbmRpZgorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwkvLyBBbGxvY2F0ZSBSVE1QX0FEQVBURVIgbWluaXBvcnQgYWRhcHRlciBzdHJ1Y3R1cmUKKwloYW5kbGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3NfY29va2llKSwgR0ZQX0tFUk5FTCk7CisJUlQyOFhYX0hBTkRMRV9ERVZfQVNTSUdOKGhhbmRsZSwgZGV2X3ApOworCisJc3RhdHVzID0gUlRNUEFsbG9jQWRhcHRlckJsb2NrKGhhbmRsZSwgJnBBZCk7CisJaWYgKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CisKKwluZXRfZGV2LT5tbF9wcml2ID0gKFBWT0lEKXBBZDsKKyAgICBwQWQtPm5ldF9kZXYgPSBuZXRfZGV2OyAvLyBtdXN0IGJlIGJlZm9yZSBSVDI4WFhOZXREZXZJbml0KCkKKworCVJUMjhYWE5ldERldkluaXQoX2Rldl9wLCBuZXRfZGV2LCBwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgcEFkLT5TdGFDZmcuT3JpRGV2VHlwZSA9IG5ldF9kZXYtPnR5cGU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBGaW5kIGFuZCBhc3NpZ24gYSBmcmVlIGludGVyZmFjZSBuYW1lLCByYXh4CisvLwlSVDI4WFhBdmFpbFJBTmFtZUFzc2lnbihuZXRfZGV2LT5uYW1lKTsKKworCS8vIFBvc3QgY29uZmlnCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCisJaWYgKFJUMjhYWFByb2JlUG9zdENvbmZpZyhfZGV2X3AsIHBBZCwgYXJnYykgPT0gRkFMU0UpCisJCWdvdG8gZXJyX291dF91bm1hcDsKKyNlbHNlCisJaWYgKFJUMjhYWFByb2JlUG9zdENvbmZpZyhfZGV2X3AsIHBBZCwgMCkgPT0gRkFMU0UpCisJCWdvdG8gZXJyX291dF91bm1hcDsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCXBBZC0+T3BNb2RlID0gT1BNT0RFX1NUQTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisJLy8gZmluZCBpdHMgcHJvZmlsZSBwYXRoCisJcEFkLT5NQ19Sb3dJRCA9IC0xOyAvLyB1c2UgZGVmYXVsdCBwcm9maWxlIHBhdGgKKwlSVE1QX0NhcmRJbmZvUmVhZChwQWQpOworCisJaWYgKHBBZC0+TUNfUm93SUQgPT0gLTEpCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCXN0cmNweShwQWQtPk1DX0ZpbGVOYW1lLCBTVEFfUFJPRklMRV9QQVRIKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJKCJNQz4gUk9XID0gJWQsIFBBVEggPSAlc1xuIiwgcEFkLT5NQ19Sb3dJRCwgcEFkLT5NQ19GaWxlTmFtZSkpOworI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisJLy8gc2FtcGxlIG1vdmUKKwlpZiAocnRfaWVlZTgwMjExX2lmX3NldHVwKG5ldF9kZXYsIHBBZCkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJZ290byBlcnJfb3V0X3VubWFwOworCisgICAgLy8gUmVnaXN0ZXIgdGhpcyBkZXZpY2UKKyAgICBzdGF0dXMgPSByZWdpc3Rlcl9uZXRkZXYobmV0X2Rldik7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgZ290byBlcnJfb3V0X3VubWFwOworCisgICAgLy8gU2V0IGRyaXZlciBkYXRhCisJUlQyOFhYX0RSVkRBVEFfU0VUKF9kZXZfcCk7CisKKworCisJKnBwQWQgPSBwQWQ7CisgICAgcmV0dXJuIDA7IC8vIHByb2JlIG9rCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFUlJPUiBIQU5ETEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitlcnJfb3V0X3VubWFwOgorCVJUTVBGcmVlQWRhcHRlcihwQWQpOworCVJUMjhYWF9VTk1BUCgpOworCitlcnJfb3V0X2ZyZWVfbmV0ZGV2OgorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyAgICBmcmVlX25ldGRldihuZXRfZGV2KTsKKyNlbHNlCisJa2ZyZWUobmV0X2Rldik7CisjZW5kaWYKKworZXJyX291dDoKKwlSVDI4WFhfUFVUX0RFVklDRShkZXZfcCk7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwlyZXR1cm4gKExPTkcpTlVMTDsKKyNlbHNlCisgICAgcmV0dXJuIC1FTk9ERVY7IC8qIHByb2JlIGZhaWwgKi8KKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KK30gLyogRW5kIG9mIHJ0Mjh4eF9wcm9iZSAqLworCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgVGhlIGVudHJ5IHBvaW50IGZvciBMaW51eCBrZXJuZWwgc2VudCBwYWNrZXQgdG8gb3VyIGRyaXZlci4KKworQXJndW1lbnRzOgorICAgIHNrX2J1ZmYgKnNrYgkJdGhlIHBvaW50ZXIgcmVmZXIgdG8gYSBza19idWZmZXIuCisKK1JldHVybiBWYWx1ZToKKyAgICAwCisKK05vdGU6CisJVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgb2YgVHggUGF0aCBmb3IgT3MgZGVsaXZlcnkgcGFja2V0IHRvCisJb3VyIGRyaXZlci4gWW91IG9ubHkgY2FuIHB1dCBPUy1kZXBlbmVkICYgU1RBL0FQIGNvbW1vbiBoYW5kbGUgcHJvY2VkdXJlcworCWluIGhlcmUuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitpbnQgcnQyOHh4X3BhY2tldF94bWl0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBza2ItPmRldjsKKwlQUlRNUF9BREFQVEVSIHBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJaW50IHN0YXR1cyA9IDA7CisJUE5ESVNfUEFDS0VUIHBQYWNrZXQgPSAoUE5ESVNfUEFDS0VUKSBza2I7CisKKwkvKiBSVDI4NzBTVEEgZG9lcyB0aGlzIGluIFJUTVBTZW5kUGFja2V0cygpICovCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwl7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19SRVNPVVJDRVMpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIERyb3Agc2VuZCByZXF1ZXN0IHNpbmNlIHdlIGFyZSBpbiBtb25pdG9yIG1vZGUKKwkJaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJeworCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJZ290byBkb25lOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisgICAgICAgIC8vIEVhcG9sU3RhcnQgc2l6ZSBpcyAxOAorCWlmIChza2ItPmxlbiA8IDE0KQorCXsKKwkJLy9wcmludGsoImJhZCBwYWNrZXQgc2l6ZTogJWRcbiIsIHBrdC0+bGVuKTsKKwkJaGV4X2R1bXAoImJhZCBwYWNrZXQiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlnb3RvIGRvbmU7CisJfQorCisJUlRNUF9TRVRfUEFDS0VUXzVWVChwUGFja2V0LCAwKTsKKy8vCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgcGt0LT5kYXRhLCBwa3QtPmxlbik7CisjaWZkZWYgQ09ORklHXzVWVF9FTkhBTkNFCisgICAgaWYgKCooaW50Kikoc2tiLT5jYikgPT0gQlJJREdFX1RBRykgeworCQlSVE1QX1NFVF9QQUNLRVRfNVZUKHBQYWNrZXQsIDEpOworICAgIH0KKyNlbmRpZgorCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCisJCVNUQVNlbmRQYWNrZXRzKChORElTX0hBTkRMRSlwQWQsIChQUE5ESVNfUEFDS0VUKSAmcFBhY2tldCwgMSk7CisJfQorCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlzdGF0dXMgPSAwOworZG9uZToKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBTZW5kIGEgcGFja2V0IHRvIFdMQU4uCisKK0FyZ3VtZW50czoKKyAgICBza2JfcCAgICAgICAgICAgcG9pbnRzIHRvIG91ciBhZGFwdGVyCisgICAgZGV2X3AgICAgICAgICAgIHdoaWNoIFdMQU4gbmV0d29yayBpbnRlcmZhY2UKKworUmV0dXJuIFZhbHVlOgorICAgIDA6IHRyYW5zbWl0IHN1Y2Nlc3NmdWxseQorICAgIG90aGVyd2lzZTogdHJhbnNtaXQgZmFpbAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIHJ0Mjh4eF9zZW5kX3BhY2tldHMoCisJSU4gc3RydWN0IHNrX2J1ZmYgCQkqc2tiX3AsCisJSU4gc3RydWN0IG5ldF9kZXZpY2UgCSpuZXRfZGV2KQoreworICAgIFJUTVBfQURBUFRFUiAqcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKworCWlmICghKG5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKSkKKwl7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCAoUE5ESVNfUEFDS0VUKXNrYl9wLCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuIDA7CisJfQorCisJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikmc2tiX3AtPmNiW0NCX09GRl0sIDE1KTsKKwlSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoc2tiX3AsIE1BSU5fTUJTU0lEKTsKKworCXJldHVybiBydDI4eHhfcGFja2V0X3htaXQoc2tiX3ApOworfSAvKiBFbmQgb2YgTUJTU19WaXJ0dWFsSUZfUGFja2V0U2VuZCAqLworCisKKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IDB4MjA0MDIJLy8gUmVkIEhhdCA3LjEKKy8vc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXYoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICptYXNrLCB2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKSAvL3NhbXBsZQorc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldigKKwlpbnQgc2l6ZW9mX3ByaXYsCisJY29uc3QgY2hhciAqbWFzaywKKwl2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKQoreworICAgIHN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisgICAgSU5UCQkJCQlhbGxvY19zaXplOworCisKKyAgICAvKiBlbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIHByaXZhdGUgYXJlYSAqLworICAgIGFsbG9jX3NpemUgPSBzaXplb2YgKCpkZXYpICsgc2l6ZW9mX3ByaXYgKyAzMTsKKworICAgIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOworICAgIGlmIChkZXYgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAorCQkJCSgiYWxsb2NfbmV0ZGV2OiBVbmFibGUgdG8gYWxsb2NhdGUgZGV2aWNlIG1lbW9yeS5cbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWVtc2V0KGRldiwgMCwgYWxsb2Nfc2l6ZSk7CisKKyAgICBpZiAoc2l6ZW9mX3ByaXYpCisgICAgICAgIGRldi0+bWxfcHJpdiA9ICh2b2lkICopICgoKGxvbmcpKGRldiArIDEpICsgMzEpICYgfjMxKTsKKworICAgIHNldHVwKGRldik7CisgICAgc3RyY3B5KGRldi0+bmFtZSwgbWFzayk7CisKKyAgICByZXR1cm4gZGV2OworfQorI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCisKK3ZvaWQgQ2ZnSW5pdEhvb2soUFJUTVBfQURBUFRFUiBwQWQpCit7CisJcEFkLT5iQnJvYWRDb21IVCA9IFRSVUU7Cit9IC8qIEVuZCBvZiBDZmdJbml0SG9vayAqLworCisKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTIKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBxdWVyeSAvcHJvYworc3RydWN0IGl3X3N0YXRpc3RpY3MgKnJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHMoCisgICAgSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzIC0tLT5cbiIpKTsKKworCXBBZC0+aXdfc3RhdHMuc3RhdHVzID0gMDsgLy8gU3RhdHVzIC0gZGV2aWNlIGRlcGVuZGVudCBmb3Igbm93CisKKwkvLyBsaW5rIHF1YWxpdHkKKwlwQWQtPml3X3N0YXRzLnF1YWwucXVhbCA9ICgocEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ICogMTIpLzEwICsgMTApOworCWlmKHBBZC0+aXdfc3RhdHMucXVhbC5xdWFsID4gMTAwKQorCQlwQWQtPml3X3N0YXRzLnF1YWwucXVhbCA9IDEwMDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQorCQlwQWQtPml3X3N0YXRzLnF1YWwubGV2ZWwgPSBSVE1QTWF4UnNzaShwQWQsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMSwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTIpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcEFkLT5pd19zdGF0cy5xdWFsLm5vaXNlID0gcEFkLT5CYnBXcml0ZUxhdGNoWzY2XTsgLy8gbm9pc2UgbGV2ZWwgKGRCbSkKKworCXBBZC0+aXdfc3RhdHMucXVhbC5ub2lzZSArPSAyNTYgLSAxNDM7CisJcEFkLT5pd19zdGF0cy5xdWFsLnVwZGF0ZWQgPSAxOyAgICAgLy8gRmxhZ3MgdG8ga25vdyBpZiB1cGRhdGVkCisjaWZkZWYgSVdfUVVBTF9EQk0KKwlwQWQtPml3X3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsJLy8gTGV2ZWwgKyBOb2lzZSBhcmUgZEJtCisjZW5kaWYgLy8gSVdfUVVBTF9EQk0gLy8KKworCXBBZC0+aXdfc3RhdHMuZGlzY2FyZC5ud2lkID0gMDsgICAgIC8vIFJ4IDogV3JvbmcgbndpZC9lc3NpZAorCXBBZC0+aXdfc3RhdHMubWlzcy5iZWFjb24gPSAwOyAgICAgIC8vIE1pc3NlZCBiZWFjb25zL3N1cGVyZnJhbWUKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0gcnQyOHh4X2dldF93aXJlbGVzc19zdGF0c1xuIikpOworCXJldHVybiAmcEFkLT5pd19zdGF0czsKK30gLyogRW5kIG9mIHJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHMgKi8KKyNlbmRpZiAvLyBXSVJFTEVTU19FWFQgLy8KKworCisKK3ZvaWQgdGJ0dF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKyNkZWZpbmUgTUFYX1RYX0lOX1RCVFQJCSgxNikKKworfQorCitJTlQgcnQyOHh4X2lvY3RsKAorCUlOCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRfZGV2LAorCUlOCU9VVAlzdHJ1Y3QgaWZyZXEJKnJxLAorCUlOCUlOVAkJCQkJY21kKQoreworCVZJUlRVQUxfQURBUFRFUgkqcFZpcnR1YWxBZCA9IE5VTEw7CisJUlRNUF9BREFQVEVSCSpwQWQgPSBOVUxMOworCUlOVAkJCQlyZXQgPSAwOworCisJaWYgKG5ldF9kZXYtPnByaXZfZmxhZ3MgPT0gSU5UX01BSU4pCisJeworCQlwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCX0KKwllbHNlCisJeworCQlwVmlydHVhbEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwkJcEFkID0gcFZpcnR1YWxBZC0+UnRtcERldi0+bWxfcHJpdjsKKwl9CisKKwlpZiAocEFkID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlyZXQgPSBydDI4eHhfc3RhX2lvY3RsKG5ldF9kZXYsIHJxLCBjbWQpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICByZXR1cm4gZXRoZXJuZXQgc3RhdGlzdGljcyBjb3VudGVyCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIG5ldF9kZXYgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG5ldF9kZXZpY2UKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgbmV0X2RldmljZV9zdGF0cyoKKworICAgIE5vdGU6CisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqUlQyOHh4X2dldF9ldGhlcl9zdGF0cygKKyAgICBJTiAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisgICAgUlRNUF9BREFQVEVSICpwQWQgPSBOVUxMOworCisJaWYgKG5ldF9kZXYpCisJCXBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisKKwlpZiAocEFkKQorCXsKKworCQlwQWQtPnN0YXRzLnJ4X3BhY2tldHMgPSBwQWQtPldsYW5Db3VudGVycy5SZWNlaXZlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQ7CisJCXBBZC0+c3RhdHMudHhfcGFja2V0cyA9IHBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC5RdWFkUGFydDsKKworCQlwQWQtPnN0YXRzLnJ4X2J5dGVzID0gcEFkLT5SYWxpbmtDb3VudGVycy5SZWNlaXZlZEJ5dGVDb3VudDsKKwkJcEFkLT5zdGF0cy50eF9ieXRlcyA9IHBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQ7CisKKwkJcEFkLT5zdGF0cy5yeF9lcnJvcnMgPSBwQWQtPkNvdW50ZXJzODAyMy5SeEVycm9yczsKKwkJcEFkLT5zdGF0cy50eF9lcnJvcnMgPSBwQWQtPkNvdW50ZXJzODAyMy5UeEVycm9yczsKKworCQlwQWQtPnN0YXRzLnJ4X2Ryb3BwZWQgPSAwOworCQlwQWQtPnN0YXRzLnR4X2Ryb3BwZWQgPSAwOworCisJICAgIHBBZC0+c3RhdHMubXVsdGljYXN0ID0gcEFkLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50LlF1YWRQYXJ0OyAgIC8vIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCisJICAgIHBBZC0+c3RhdHMuY29sbGlzaW9ucyA9IHBBZC0+Q291bnRlcnM4MDIzLk9uZUNvbGxpc2lvbiArIHBBZC0+Q291bnRlcnM4MDIzLk1vcmVDb2xsaXNpb25zOyAgLy8gQ29sbGlzaW9uIHBhY2tldHMKKworCSAgICBwQWQtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSAwOworCSAgICBwQWQtPnN0YXRzLnJ4X292ZXJfZXJyb3JzID0gcEFkLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlcjsgICAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZXIgcmluZyBidWZmIG92ZXJmbG93CisJICAgIHBBZC0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IDA7Ly9wQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50OyAgICAgLy8gcmVjdmVkIHBrdCB3aXRoIGNyYyBlcnJvcgorCSAgICBwQWQtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyA9IHBBZC0+Q291bnRlcnM4MDIzLlJjdkFsaWdubWVudEVycm9yczsgICAgICAgICAgLy8gcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvcgorCSAgICBwQWQtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gcEFkLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlcjsgICAgICAgICAgICAgICAgICAgLy8gcmVjdidyIGZpZm8gb3ZlcnJ1bgorCSAgICBwQWQtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZXIgbWlzc2VkIHBhY2tldAorCisJICAgIC8vIGRldGFpbGVkIHR4X2Vycm9ycworCSAgICBwQWQtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gMDsKKwkgICAgcEFkLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyA9IDA7CisJICAgIHBBZC0+c3RhdHMudHhfZmlmb19lcnJvcnMgPSAwOworCSAgICBwQWQtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOworCSAgICBwQWQtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMgPSAwOworCisJICAgIC8vIGZvciBjc2xpcCBldGMKKwkgICAgcEFkLT5zdGF0cy5yeF9jb21wcmVzc2VkID0gMDsKKwkgICAgcEFkLT5zdGF0cy50eF9jb21wcmVzc2VkID0gMDsKKworCQlyZXR1cm4gJnBBZC0+c3RhdHM7CisJfQorCWVsc2UKKyAgICAJcmV0dXJuIE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfcHJvZmlsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9wcm9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkYTI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfcHJvZmlsZS5jCkBAIC0wLDAgKzEsMjA0MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitzdGF0aWMgdm9pZCBIVFBhcmFtZXRlcnNIb29rKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCUNIQVIJCSAgKnBWYWx1ZVN0ciwKKwlJTglDSEFSCQkgICpwSW5wdXQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjZGVmaW5lIEVUSF9NQUNfQUREUl9TVFJfTEVOIDE3ICAvLyBpbiBmb3JtYXQgb2YgeHg6eHg6eHg6eHg6eHg6eHgKKworLy8gV2UgYXNzdW1lIHRoZSBzMSBpcyBhIHN0aW5nLCBzMiBpcyBhIG1lbW9yeSBzcGFjZSB3aXRoIDYgYnl0ZXMuIGFuZCBjb250ZW50IG9mIHMxIHdpbGwgYmUgY2hhbmdlZC4KK0JPT0xFQU4gcnRzdHJtYWN0b2hleChjaGFyICpzMSwgY2hhciAqczIpCit7CisJaW50IGkgPSAwOworCWNoYXIgKnB0b2tTID0gczEsICpwdG9rRSA9IHMxOworCisJaWYgKHN0cmxlbihzMSkgIT0gRVRIX01BQ19BRERSX1NUUl9MRU4pCisJCXJldHVybiBGQUxTRTsKKworCXdoaWxlKCgqcHRva1MpICE9ICdcMCcpCisJeworCQlpZigocHRva0UgPSBzdHJjaHIocHRva1MsICc6JykpICE9IE5VTEwpCisJCQkqcHRva0UrKyA9ICdcMCc7CisJCWlmICgoc3RybGVuKHB0b2tTKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCpwdG9rUykpIHx8ICghaXN4ZGlnaXQoKihwdG9rUysxKSkpKQorCQkJYnJlYWs7IC8vIGZhaWwKKwkJQXRvSChwdG9rUywgJnMyW2krK10sIDEpOworCQlwdG9rUyA9IHB0b2tFOworCQlpZiAoaSA9PSA2KQorCQkJYnJlYWs7IC8vIHBhcnNpbmcgZmluaXNoZWQKKwl9CisKKwlyZXR1cm4gKCBpID09IDYgPyBUUlVFIDogRkFMU0UpOworCit9CisKKworLy8gd2UgYXNzdW1lIHRoZSBzMSBhbmQgczIgYm90aCBhcmUgc3RyaW5ncy4KK0JPT0xFQU4gcnRzdHJjYXNlY21wKGNoYXIgKnMxLCBjaGFyICpzMikKK3sKKwljaGFyICpwMSA9IHMxLCAqcDIgPSBzMjsKKworCWlmIChzdHJsZW4oczEpICE9IHN0cmxlbihzMikpCisJCXJldHVybiBGQUxTRTsKKworCXdoaWxlKCpwMSAhPSAnXDAnKQorCXsKKwkJaWYoKCpwMSAhPSAqcDIpICYmICgoKnAxIF4gKnAyKSAhPSAweDIwKSkKKwkJCXJldHVybiBGQUxTRTsKKwkJcDErKzsKKwkJcDIrKzsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gd2UgYXNzdW1lIHRoZSBzMSAoYnVmZmVyKSBhbmQgczIgKGtleSkgYm90aCBhcmUgc3RyaW5ncy4KK2NoYXIgKiBydHN0cnN0cnVuY2FzZWNtcChjaGFyICogczEsIGNoYXIgKiBzMikKK3sKKwlJTlQgbDEsIGwyLCBpOworCWNoYXIgdGVtcDEsIHRlbXAyOworCisJbDIgPSBzdHJsZW4oczIpOworCWlmICghbDIpCisJCXJldHVybiAoY2hhciAqKSBzMTsKKworCWwxID0gc3RybGVuKHMxKTsKKworCXdoaWxlIChsMSA+PSBsMikKKwl7CisJCWwxLS07CisKKwkJZm9yKGk9MDsgaTxsMjsgaSsrKQorCQl7CisJCQl0ZW1wMSA9ICooczEraSk7CisJCQl0ZW1wMiA9ICooczIraSk7CisKKwkJCWlmICgoJ2EnIDw9IHRlbXAxKSAmJiAodGVtcDEgPD0gJ3onKSkKKwkJCQl0ZW1wMSA9ICdBJysodGVtcDEtJ2EnKTsKKwkJCWlmICgoJ2EnIDw9IHRlbXAyKSAmJiAodGVtcDIgPD0gJ3onKSkKKwkJCQl0ZW1wMiA9ICdBJysodGVtcDItJ2EnKTsKKworCQkJaWYgKHRlbXAxICE9IHRlbXAyKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGkgPT0gbDIpCisJCQlyZXR1cm4gKGNoYXIgKikgczE7CisKKwkJczErKzsKKwl9CisKKwlyZXR1cm4gTlVMTDsgLy8gbm90IGZvdW5kCit9CisKKy8vYWRkIGJ5IGthdGh5CisKKyAvKioKKyAgKiBzdHJzdHIgLSBGaW5kIHRoZSBmaXJzdCBzdWJzdHJpbmcgaW4gYSAlTlVMIHRlcm1pbmF0ZWQgc3RyaW5nCisgICogQHMxOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkCisgICogQHMyOiBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IKKyAgKi8KK2NoYXIgKiBydHN0cnN0cihjb25zdCBjaGFyICogczEsY29uc3QgY2hhciAqIHMyKQoreworCUlOVCBsMSwgbDI7CisKKwlsMiA9IHN0cmxlbihzMik7CisJaWYgKCFsMikKKwkJcmV0dXJuIChjaGFyICopIHMxOworCisJbDEgPSBzdHJsZW4oczEpOworCisJd2hpbGUgKGwxID49IGwyKQorCXsKKwkJbDEtLTsKKwkJaWYgKCFtZW1jbXAoczEsczIsbDIpKQorCQkJcmV0dXJuIChjaGFyICopIHMxOworCQlzMSsrOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHJzdHJ0b2sgLSBTcGxpdCBhIHN0cmluZyBpbnRvIHRva2VucworICogQHM6IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWQKKyAqIEBjdDogVGhlIGNoYXJhY3RlcnMgdG8gc2VhcmNoIGZvcgorICogKiBXQVJOSU5HOiBzdHJ0b2sgaXMgZGVwcmVjYXRlZCwgdXNlIHN0cnNlcCBpbnN0ZWFkLiBIb3dldmVyIHN0cnNlcCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9sZCBhcmNoaXRlY3R1cmUuCisgKi8KK2NoYXIgKiBfX3JzdHJ0b2s7CitjaGFyICogcnN0cnRvayhjaGFyICogcyxjb25zdCBjaGFyICogY3QpCit7CisJY2hhciAqc2JlZ2luLCAqc2VuZDsKKworCXNiZWdpbiAgPSBzID8gcyA6IF9fcnN0cnRvazsKKwlpZiAoIXNiZWdpbikKKwl7CisJCXJldHVybiBOVUxMOworCX0KKworCXNiZWdpbiArPSBzdHJzcG4oc2JlZ2luLGN0KTsKKwlpZiAoKnNiZWdpbiA9PSAnXDAnKQorCXsKKwkJX19yc3RydG9rID0gTlVMTDsKKwkJcmV0dXJuKCBOVUxMICk7CisJfQorCisJc2VuZCA9IHN0cnBicmsoIHNiZWdpbiwgY3QpOworCWlmIChzZW5kICYmICpzZW5kICE9ICdcMCcpCisJCSpzZW5kKysgPSAnXDAnOworCisJX19yc3RydG9rID0gc2VuZDsKKworCXJldHVybiAoc2JlZ2luKTsKK30KKworLyoqCisgKiBkZWxpbWl0Y250IC0gcmV0dXJuIHRoZSBjb3VudCBvZiBhIGdpdmVuIGRlbGltaXRlciBpbiBhIGdpdmVuIHN0cmluZy4KKyAqIEBzOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkLgorICogQGN0OiBUaGUgZGVsaW1pdGVyIHRvIHNlYXJjaCBmb3IuCisgKiBOb3RpY2UgOiBXZSBzdXBwb3NlIHRoZSBkZWxpbWl0ZXIgaXMgYSBzaW5nbGUtY2hhciBzdHJpbmcoZm9yIGV4YW1wbGUgOiAiOyIpLgorICovCitJTlQgZGVsaW1pdGNudChjaGFyICogcyxjb25zdCBjaGFyICogY3QpCit7CisJSU5UIGNvdW50ID0gMDsKKwkvKiBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCisJY29uc3QgY2hhciAqdG9rZW4gPSBzOworCisJZm9yICggOzsgKQorCXsKKwkJdG9rZW4gPSBzdHJwYnJrKHRva2VuLCBjdCk7IC8qIHNlYXJjaCBmb3IgZGVsaW1pdGVycyAqLworCisgICAgICAgIGlmICggdG9rZW4gPT0gTlVMTCApCisJCXsKKwkJCS8qIGFkdmFuY2VkIHRvIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlciAqLworCQkJYnJlYWs7CisJCX0KKwkJLyogc2tpcCB0aGUgZGVsaW1pdGVyICovCisJICAgICsrdG9rZW47CisKKwkJLyoKKwkJICogUHJpbnQgdGhlIGZvdW5kIHRleHQ6IHVzZSBsZW4gd2l0aCAlLipzIHRvIHNwZWNpZnkgZmllbGQgd2lkdGguCisJCSAqLworCisJCS8qIGFjY3VtdWxhdGUgZGVsaW1pdGVyIGNvdW50ICovCisJICAgICsrY291bnQ7CisJfQorICAgIHJldHVybiBjb3VudDsKK30KKworLyoKKyAgKiBjb252ZXJ0cyB0aGUgSW50ZXJuZXQgaG9zdCBhZGRyZXNzIGZyb20gdGhlIHN0YW5kYXJkIG51bWJlcnMtYW5kLWRvdHMgbm90YXRpb24KKyAgKiBpbnRvIGJpbmFyeSBkYXRhLgorICAqIHJldHVybnMgbm9uemVybyBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCwgemVybyBpZiBub3QuCisgICovCitpbnQgcnRpbmV0X2F0b24oY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgCXZhbDsKKwlpbnQgICAgICAgICAJYmFzZSwgbjsKKwljaGFyICAgICAgICAJYzsKKwl1bnNpZ25lZCBpbnQgICAgcGFydHNbNF07CisJdW5zaWduZWQgaW50ICAgICpwcCA9IHBhcnRzOworCisJZm9yICg7OykKKyAgICB7CisgICAgICAgICAvKgorICAgICAgICAgICogQ29sbGVjdCBudW1iZXIgdXAgdG8gYGAuJycuCisgICAgICAgICAgKiBWYWx1ZXMgYXJlIHNwZWNpZmllZCBhcyBmb3IgQzoKKyAgICAgICAgICAqCTB4PWhleCwgMD1vY3RhbCwgb3RoZXI9ZGVjaW1hbC4KKyAgICAgICAgICAqLworICAgICAgICAgdmFsID0gMDsKKyAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgIGlmICgqY3AgPT0gJzAnKQorICAgICAgICAgeworICAgICAgICAgICAgIGlmICgqKytjcCA9PSAneCcgfHwgKmNwID09ICdYJykKKyAgICAgICAgICAgICAgICAgYmFzZSA9IDE2LCBjcCsrOworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgYmFzZSA9IDg7CisgICAgICAgICB9CisgICAgICAgICB3aGlsZSAoKGMgPSAqY3ApICE9ICdcMCcpCisgICAgICAgICB7CisgICAgICAgICAgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpIGMpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gKHZhbCAqIGJhc2UpICsgKGMgLSAnMCcpOworICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgaWYgKGJhc2UgPT0gMTYgJiYgaXN4ZGlnaXQoKHVuc2lnbmVkIGNoYXIpIGMpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gKHZhbCA8PCA0KSArCisgICAgICAgICAgICAgICAgICAgICAoYyArIDEwIC0gKGlzbG93ZXIoKHVuc2lnbmVkIGNoYXIpIGMpID8gJ2EnIDogJ0EnKSk7CisgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgqY3AgPT0gJy4nKQorICAgICAgICAgeworICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICogSW50ZXJuZXQgZm9ybWF0OiBhLmIuYy5kIGEuYi5jICAgKHdpdGggYyB0cmVhdGVkIGFzIDE2LWJpdHMpCisgICAgICAgICAgICAgICogYS5iICAgICAod2l0aCBiIHRyZWF0ZWQgYXMgMjQgYml0cykKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICBpZiAocHAgPj0gcGFydHMgKyAzIHx8IHZhbCA+IDB4ZmYpCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICpwcCsrID0gdmFsLCBjcCsrOworICAgICAgICAgfQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGJyZWFrOworICAgICB9CisKKyAgICAgLyoKKyAgICAgICogQ2hlY2sgZm9yIHRyYWlsaW5nIGp1bmsuCisgICAgICAqLworICAgICB3aGlsZSAoKmNwKQorICAgICAgICAgaWYgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqY3ArKykpCisgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgLyoKKyAgICAgICogQ29uY29jdCB0aGUgYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBwYXJ0cyBzcGVjaWZpZWQuCisgICAgICAqLworICAgICBuID0gcHAgLSBwYXJ0cyArIDE7CisgICAgIHN3aXRjaCAobikKKyAgICAgeworCisgICAgICAgICBjYXNlIDE6ICAgICAgICAgLyogYSAtLSAzMiBiaXRzICovCisgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgMjogICAgICAgICAvKiBhLmIgLS0gOC4yNCBiaXRzICovCisgICAgICAgICAgICAgaWYgKHZhbCA+IDB4ZmZmZmZmKQorICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB2YWwgfD0gcGFydHNbMF0gPDwgMjQ7CisgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgMzogICAgICAgICAvKiBhLmIuYyAtLSA4LjguMTYgYml0cyAqLworICAgICAgICAgICAgIGlmICh2YWwgPiAweGZmZmYpCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIHZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KTsKKyAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgY2FzZSA0OiAgICAgICAgIC8qIGEuYi5jLmQgLS0gOC44LjguOCBiaXRzICovCisgICAgICAgICAgICAgaWYgKHZhbCA+IDB4ZmYpCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIHZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KSB8IChwYXJ0c1syXSA8PCA4KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgfQorCisgICAgICphZGRyID0gaHRvbmwodmFsKTsKKyAgICAgcmV0dXJuIDE7CisKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIEZpbmQga2V5IHNlY3Rpb24gZm9yIEdldCBrZXkgcGFyYW1ldGVyLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0YXJ0IGZpbmQgdGhlIGtleSBzZWN0aW9uCisgICAgICAgIHNlY3Rpb24gICAgICAgICAgICAgICAgICAgICB0aGUga2V5IG9mIHRoZSBzZWNpb24gdG8gYmUgZmluZAorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgRmFpbAorICAgICAgICBPdGhlcnMgICAgICAgICAgICAgICAgICAgICAgU3VjY2VzcworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1BVQ0hBUiAgUlRNUEZpbmRTZWN0aW9uKAorICAgIElOICBQQ0hBUiAgIGJ1ZmZlcikKK3sKKyAgICBDSEFSIHRlbXBfYnVmWzMyXTsKKyAgICBQVUNIQVIgIHB0cjsKKworICAgIHN0cmNweSh0ZW1wX2J1ZiwgIkRlZmF1bHQiKTsKKworICAgIGlmKChwdHIgPSBydHN0cnN0cihidWZmZXIsIHRlbXBfYnVmKSkgIT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAocHRyK3N0cmxlbigiXG4iKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgR2V0IGtleSBwYXJhbWV0ZXIuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIGtleSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGtleSBzdHJpbmcKKyAgICAgICAgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gZGVzdGluYXRpb24KKyAgICAgICAgZGVzdHNpemUgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRhc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdGFydCBmaW5kIHRoZSBrZXkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MKKyAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgICAgICAgIEZhaWwKKworICAgIE5vdGU6CisgICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIHZhbHVlIHdpdGggdGhlIG1hdGNoZWQga2V5IChjYXNlIGNhc2Utc2Vuc2l0aXZlKQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBSVE1QR2V0S2V5UGFyYW1ldGVyKAorICAgIElOICBQQ0hBUiAgIGtleSwKKyAgICBPVVQgUENIQVIgICBkZXN0LAorICAgIElOICBJTlQgICAgIGRlc3RzaXplLAorICAgIElOICBQQ0hBUiAgIGJ1ZmZlcikKK3sKKyAgICBVQ0hBUiAqdGVtcF9idWYxID0gTlVMTDsKKyAgICBVQ0hBUiAqdGVtcF9idWYyID0gTlVMTDsKKyAgICBDSEFSICpzdGFydF9wdHI7CisgICAgQ0hBUiAqZW5kX3B0cjsKKyAgICBDSEFSICpwdHI7CisgICAgQ0hBUiAqb2Zmc2V0ID0gMDsKKyAgICBJTlQgIGxlbjsKKworCS8vdGVtcF9idWYxID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlvc19hbGxvY19tZW0oTlVMTCwgJnRlbXBfYnVmMSwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKworCWlmKHRlbXBfYnVmMSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKEZBTFNFKTsKKworCS8vdGVtcF9idWYyID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlvc19hbGxvY19tZW0oTlVMTCwgJnRlbXBfYnVmMiwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKwlpZih0ZW1wX2J1ZjIgPT0gTlVMTCkKKwl7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworCX0KKworICAgIC8vZmluZCBzZWN0aW9uCisgICAgaWYoKG9mZnNldCA9IFJUTVBGaW5kU2VjdGlvbihidWZmZXIpKSA9PSBOVUxMKQorICAgIHsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RyY3B5KHRlbXBfYnVmMSwgIlxuIik7CisgICAgc3RyY2F0KHRlbXBfYnVmMSwga2V5KTsKKyAgICBzdHJjYXQodGVtcF9idWYxLCAiPSIpOworCisgICAgLy9zZWFyY2gga2V5CisgICAgaWYoKHN0YXJ0X3B0cj1ydHN0cnN0cihvZmZzZXQsIHRlbXBfYnVmMSkpPT1OVUxMKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RhcnRfcHRyKz1zdHJsZW4oIlxuIik7CisgICAgaWYoKGVuZF9wdHI9cnRzdHJzdHIoc3RhcnRfcHRyLCAiXG4iKSk9PU5VTEwpCisgICAgICAgZW5kX3B0cj1zdGFydF9wdHIrc3RybGVuKHN0YXJ0X3B0cik7CisKKyAgICBpZiAoZW5kX3B0cjxzdGFydF9wdHIpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBOZGlzTW92ZU1lbW9yeSh0ZW1wX2J1ZjIsIHN0YXJ0X3B0ciwgZW5kX3B0ci1zdGFydF9wdHIpOworICAgIHRlbXBfYnVmMltlbmRfcHRyLXN0YXJ0X3B0cl09J1wwJzsKKyAgICBsZW4gPSBzdHJsZW4odGVtcF9idWYyKTsKKyAgICBzdHJjcHkodGVtcF9idWYxLCB0ZW1wX2J1ZjIpOworICAgIGlmKChzdGFydF9wdHI9cnRzdHJzdHIodGVtcF9idWYxLCAiPSIpKSA9PSBOVUxMKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RyY3B5KHRlbXBfYnVmMiwgc3RhcnRfcHRyKzEpOworICAgIHB0ciA9IHRlbXBfYnVmMjsKKyAgICAvL3RyaW0gc3BhY2Ugb3IgdGFiCisgICAgd2hpbGUoKnB0ciAhPSAweDAwKQorICAgIHsKKyAgICAgICAgaWYoICgqcHRyID09ICcgJykgfHwgKCpwdHIgPT0gJ1x0JykgKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbGVuID0gc3RybGVuKHB0cik7CisgICAgbWVtc2V0KGRlc3QsIDB4MDAsIGRlc3RzaXplKTsKKyAgICBzdHJuY3B5KGRlc3QsIHB0ciwgbGVuID49IGRlc3RzaXplID8gIGRlc3RzaXplOiBsZW4pOworCisJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICBvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgR2V0IGtleSBwYXJhbWV0ZXIuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIGtleSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGtleSBzdHJpbmcKKyAgICAgICAgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gZGVzdGluYXRpb24KKyAgICAgICAgZGVzdHNpemUgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRhc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdGFydCBmaW5kIHRoZSBrZXkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MKKyAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgICAgICAgIEZhaWwKKworICAgIE5vdGU6CisgICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIHZhbHVlIHdpdGggdGhlIG1hdGNoZWQga2V5IChjYXNlIGNhc2Utc2Vuc2l0aXZlKS4KKyAgICAgICAgSXQgaXMgY2FsbGVkIGZvciBwYXJzaW5nIFNTSUQgYW5kIGFueSBrZXkgc3RyaW5nLgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBSVE1QR2V0Q3JpdGljYWxQYXJhbWV0ZXIoCisgICAgSU4gIFBDSEFSICAga2V5LAorICAgIE9VVCBQQ0hBUiAgIGRlc3QsCisgICAgSU4gIElOVCAgICAgZGVzdHNpemUsCisgICAgSU4gIFBDSEFSICAgYnVmZmVyKQoreworICAgIFVDSEFSICp0ZW1wX2J1ZjEgPSBOVUxMOworICAgIFVDSEFSICp0ZW1wX2J1ZjIgPSBOVUxMOworICAgIENIQVIgKnN0YXJ0X3B0cjsKKyAgICBDSEFSICplbmRfcHRyOworICAgIENIQVIgKnB0cjsKKyAgICBDSEFSICpvZmZzZXQgPSAwOworICAgIElOVCAgbGVuOworCisJLy90ZW1wX2J1ZjEgPSBrbWFsbG9jKE1BWF9QQVJBTV9CVUZGRVJfU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCW9zX2FsbG9jX21lbShOVUxMLCAmdGVtcF9idWYxLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOworCisJaWYodGVtcF9idWYxID09IE5VTEwpCisgICAgICAgIHJldHVybiAoRkFMU0UpOworCisJLy90ZW1wX2J1ZjIgPSBrbWFsbG9jKE1BWF9QQVJBTV9CVUZGRVJfU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCW9zX2FsbG9jX21lbShOVUxMLCAmdGVtcF9idWYyLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOworCWlmKHRlbXBfYnVmMiA9PSBOVUxMKQorCXsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisJfQorCisgICAgLy9maW5kIHNlY3Rpb24KKyAgICBpZigob2Zmc2V0ID0gUlRNUEZpbmRTZWN0aW9uKGJ1ZmZlcikpID09IE5VTEwpCisgICAgeworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBzdHJjcHkodGVtcF9idWYxLCAiXG4iKTsKKyAgICBzdHJjYXQodGVtcF9idWYxLCBrZXkpOworICAgIHN0cmNhdCh0ZW1wX2J1ZjEsICI9Iik7CisKKyAgICAvL3NlYXJjaCBrZXkKKyAgICBpZigoc3RhcnRfcHRyPXJ0c3Ryc3RyKG9mZnNldCwgdGVtcF9idWYxKSk9PU5VTEwpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBzdGFydF9wdHIrPXN0cmxlbigiXG4iKTsKKyAgICBpZigoZW5kX3B0cj1ydHN0cnN0cihzdGFydF9wdHIsICJcbiIpKT09TlVMTCkKKyAgICAgICBlbmRfcHRyPXN0YXJ0X3B0citzdHJsZW4oc3RhcnRfcHRyKTsKKworICAgIGlmIChlbmRfcHRyPHN0YXJ0X3B0cikKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIE5kaXNNb3ZlTWVtb3J5KHRlbXBfYnVmMiwgc3RhcnRfcHRyLCBlbmRfcHRyLXN0YXJ0X3B0cik7CisgICAgdGVtcF9idWYyW2VuZF9wdHItc3RhcnRfcHRyXT0nXDAnOworICAgIGxlbiA9IHN0cmxlbih0ZW1wX2J1ZjIpOworICAgIHN0cmNweSh0ZW1wX2J1ZjEsIHRlbXBfYnVmMik7CisgICAgaWYoKHN0YXJ0X3B0cj1ydHN0cnN0cih0ZW1wX2J1ZjEsICI9IikpID09IE5VTEwpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBzdHJjcHkodGVtcF9idWYyLCBzdGFydF9wdHIrMSk7CisgICAgcHRyID0gdGVtcF9idWYyOworCisgICAgLy90cmltIHRhYgorICAgIC8qIFdlIGNhbm5vdCB0cmltIHNwYWNlKCcgJykgZm9yIFNTSUQgYW5kIGtleSBzdHJpbmcuICovCisgICAgd2hpbGUoKnB0ciAhPSAweDAwKQorICAgIHsKKyAgICAgICAgLy9pZiggKCpwdHIgPT0gJyAnKSB8fCAoKnB0ciA9PSAnXHQnKSApCisgICAgICAgIGlmKCAoKnB0ciA9PSAnXHQnKSApCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBsZW4gPSBzdHJsZW4ocHRyKTsKKyAgICBtZW1zZXQoZGVzdCwgMHgwMCwgZGVzdHNpemUpOworICAgIHN0cm5jcHkoZGVzdCwgcHRyLCBsZW4gPj0gZGVzdHNpemUgPyAgZGVzdHNpemU6IGxlbik7CisKKwlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIG9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBHZXQgbXVsdGlwbGUga2V5IHBhcmFtZXRlci4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAga2V5ICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8ga2V5IHN0cmluZworICAgICAgICBkZXN0ICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBkZXN0aW5hdGlvbgorICAgICAgICBkZXN0c2l6ZSAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGFzaXplIG9mIHRoZSBkZXN0aW5hdGlvbgorICAgICAgICBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0YXJ0IGZpbmQgdGhlIGtleQorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBUUlVFICAgICAgICAgICAgICAgICAgICAgICAgU3VjY2VzcworICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgICAgICAgRmFpbAorCisgICAgTm90ZToKKyAgICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgdmFsdWUgd2l0aCB0aGUgbWF0Y2hlZCBrZXkgKGNhc2UgY2FzZS1zZW5zaXRpdmUpCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFJUTVBHZXRLZXlQYXJhbWV0ZXJXaXRoT2Zmc2V0KAorICAgIElOICBQQ0hBUiAgIGtleSwKKyAgICBPVVQgUENIQVIgICBkZXN0LAorICAgIE9VVAlVU0hPUlQJKmVuZF9vZmZzZXQsCisgICAgSU4gIElOVCAgICAgZGVzdHNpemUsCisgICAgSU4gIFBDSEFSICAgYnVmZmVyLAorICAgIElOCUJPT0xFQU4JYlRyaW1TcGFjZSkKK3sKKyAgICBVQ0hBUiAqdGVtcF9idWYxID0gTlVMTDsKKyAgICBVQ0hBUiAqdGVtcF9idWYyID0gTlVMTDsKKyAgICBDSEFSICpzdGFydF9wdHI7CisgICAgQ0hBUiAqZW5kX3B0cjsKKyAgICBDSEFSICpwdHI7CisgICAgQ0hBUiAqb2Zmc2V0ID0gMDsKKyAgICBJTlQgIGxlbjsKKworCWlmICgqZW5kX29mZnNldCA+PSBNQVhfSU5JX0JVRkZFUl9TSVpFKQorCQlyZXR1cm4gKEZBTFNFKTsKKworCW9zX2FsbG9jX21lbShOVUxMLCAmdGVtcF9idWYxLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOworCisJaWYodGVtcF9idWYxID09IE5VTEwpCisgICAgICAgIHJldHVybiAoRkFMU0UpOworCisJb3NfYWxsb2NfbWVtKE5VTEwsICZ0ZW1wX2J1ZjIsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7CisJaWYodGVtcF9idWYyID09IE5VTEwpCisJeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKwl9CisKKyAgICAvL2ZpbmQgc2VjdGlvbgorCWlmKCplbmRfb2Zmc2V0ID09IDApCisgICAgeworCQlpZiAoKG9mZnNldCA9IFJUTVBGaW5kU2VjdGlvbihidWZmZXIpKSA9PSBOVUxMKQorCQl7CisJCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworCSAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAJICAgIHJldHVybiAoRkFMU0UpOworCQl9CisgICAgfQorCWVsc2UKKwkJb2Zmc2V0ID0gYnVmZmVyICsgKCplbmRfb2Zmc2V0KTsKKworICAgIHN0cmNweSh0ZW1wX2J1ZjEsICJcbiIpOworICAgIHN0cmNhdCh0ZW1wX2J1ZjEsIGtleSk7CisgICAgc3RyY2F0KHRlbXBfYnVmMSwgIj0iKTsKKworICAgIC8vc2VhcmNoIGtleQorICAgIGlmKChzdGFydF9wdHI9cnRzdHJzdHIob2Zmc2V0LCB0ZW1wX2J1ZjEpKT09TlVMTCkKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHN0YXJ0X3B0cis9c3RybGVuKCJcbiIpOworICAgIGlmKChlbmRfcHRyPXJ0c3Ryc3RyKHN0YXJ0X3B0ciwgIlxuIikpPT1OVUxMKQorICAgICAgIGVuZF9wdHI9c3RhcnRfcHRyK3N0cmxlbihzdGFydF9wdHIpOworCisgICAgaWYgKGVuZF9wdHI8c3RhcnRfcHRyKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisJKmVuZF9vZmZzZXQgPSBlbmRfcHRyIC0gYnVmZmVyOworCisgICAgTmRpc01vdmVNZW1vcnkodGVtcF9idWYyLCBzdGFydF9wdHIsIGVuZF9wdHItc3RhcnRfcHRyKTsKKyAgICB0ZW1wX2J1ZjJbZW5kX3B0ci1zdGFydF9wdHJdPSdcMCc7CisgICAgbGVuID0gc3RybGVuKHRlbXBfYnVmMik7CisgICAgc3RyY3B5KHRlbXBfYnVmMSwgdGVtcF9idWYyKTsKKyAgICBpZigoc3RhcnRfcHRyPXJ0c3Ryc3RyKHRlbXBfYnVmMSwgIj0iKSkgPT0gTlVMTCkKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHN0cmNweSh0ZW1wX2J1ZjIsIHN0YXJ0X3B0cisxKTsKKyAgICBwdHIgPSB0ZW1wX2J1ZjI7CisgICAgLy90cmltIHNwYWNlIG9yIHRhYgorICAgIHdoaWxlKCpwdHIgIT0gMHgwMCkKKyAgICB7CisgICAgICAgIGlmKChiVHJpbVNwYWNlICYmICgqcHRyID09ICcgJykpIHx8ICgqcHRyID09ICdcdCcpICkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBlbHNlCisgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxlbiA9IHN0cmxlbihwdHIpOworICAgIG1lbXNldChkZXN0LCAweDAwLCBkZXN0c2l6ZSk7CisgICAgc3RybmNweShkZXN0LCBwdHIsIGxlbiA+PSBkZXN0c2l6ZSA/ICBkZXN0c2l6ZTogbGVuKTsKKworCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworCitzdGF0aWMgaW50IHJ0bXBfcGFyc2Vfa2V5X2J1ZmZlcl9mcm9tX2ZpbGUoSU4gIFBSVE1QX0FEQVBURVIgcEFkLElOICBjaGFyICpidWZmZXIsSU4gIFVMT05HIEtleVR5cGUsSU4gIElOVCBCU1NJZHgsSU4gIElOVCBLZXlJZHgpCit7CisJUFVDSEFSCQlrZXlidWZmOworCUlOVAkJCWkgPSBCU1NJZHgsIGlkeCA9IEtleUlkeDsKKwlVTE9ORwkJS2V5TGVuOworCVVDSEFSCQlDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisKKwlrZXlidWZmID0gYnVmZmVyOworCUtleUxlbiA9IHN0cmxlbihrZXlidWZmKTsKKworCWlmIChLZXlUeXBlID09IDEpCisJey8vQXNjaWkKKwkJaWYoIChLZXlMZW4gPT0gNSkgfHwgKEtleUxlbiA9PSAxMykpCisJCXsKKwkJCXBBZC0+U2hhcmVkS2V5W2ldW2lkeF0uS2V5TGVuID0gS2V5TGVuOworCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbaV1baWR4XS5LZXksIGtleWJ1ZmYsIEtleUxlbik7CisJCQlpZiAoS2V5TGVuID09IDUpCisJCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQkJZWxzZQorCQkJCUNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisJCQlwQWQtPlNoYXJlZEtleVtpXVtpZHhdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSS9GKHJhJWQpIEtleSVkU3RyPSVzIGFuZCB0eXBlPSVzXG4iLCBpLCBpZHgrMSwga2V5YnVmZiwgKEtleVR5cGUgPT0gMCkgPyAiSGV4IjoiQXNjaWkiKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQllbHNlCisJCXsvL0ludmFsaWQga2V5IGxlbmd0aAorCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiS2V5JWRTdHIgaXMgSW52YWxpZCBrZXkgbGVuZ3RoISBLZXlMZW4gPSAlbGQhXG4iLCBpZHgrMSwgS2V5TGVuKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwllbHNlCisJey8vSGV4IHR5cGUKKwkJaWYoIChLZXlMZW4gPT0gMTApIHx8IChLZXlMZW4gPT0gMjYpKQorCQl7CisJCQlwQWQtPlNoYXJlZEtleVtpXVtpZHhdLktleUxlbiA9IEtleUxlbiAvIDI7CisJCQlBdG9IKGtleWJ1ZmYsIHBBZC0+U2hhcmVkS2V5W2ldW2lkeF0uS2V5LCBLZXlMZW4gLyAyKTsKKwkJCWlmIChLZXlMZW4gPT0gMTApCisJCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQkJZWxzZQorCQkJCUNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisJCQlwQWQtPlNoYXJlZEtleVtpXVtpZHhdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSS9GKHJhJWQpIEtleSVkU3RyPSVzIGFuZCB0eXBlPSVzXG4iLCBpLCBpZHgrMSwga2V5YnVmZiwgKEtleVR5cGUgPT0gMCkgPyAiSGV4IjoiQXNjaWkiKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQllbHNlCisJCXsvL0ludmFsaWQga2V5IGxlbmd0aAorCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiSS9GKHJhJWQpIEtleSVkU3RyIGlzIEludmFsaWQga2V5IGxlbmd0aCEgS2V5TGVuID0gJWxkIVxuIiwgaSwgaWR4KzEsIEtleUxlbikpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9Cit9CitzdGF0aWMgdm9pZCBydG1wX3JlYWRfa2V5X3Bhcm1zX2Zyb21fZmlsZShJTiAgUFJUTVBfQURBUFRFUiBwQWQsIGNoYXIgKnRtcGJ1ZiwgY2hhciAqYnVmZmVyKQoreworCWNoYXIJCXRva19zdHJbMTZdOworCVBVQ0hBUgkJbWFjcHRyOworCUlOVAkJCWkgPSAwLCBpZHg7CisJVUxPTkcJCUtleVR5cGVbTUFYX01CU1NJRF9OVU1dOworCVVMT05HCQlLZXlJZHg7CisKKwlOZGlzWmVyb01lbW9yeShLZXlUeXBlLCBNQVhfTUJTU0lEX05VTSk7CisKKwkvL0RlZmF1bHRLZXlJRAorCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkRlZmF1bHRLZXlJRCIsIHRtcGJ1ZiwgMjUsIGJ1ZmZlcikpCisJeworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCUtleUlkeCA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQlpZigoS2V5SWR4ID49IDEgKSAmJiAoS2V5SWR4IDw9IDQpKQorCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgKEtleUlkeCAtIDEpOworCQkJZWxzZQorCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IDA7CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRlZmF1bHRLZXlJRCgwfjMpPSVkXG4iLCBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQpKTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCisJZm9yIChpZHggPSAwOyBpZHggPCA0OyBpZHgrKykKKwl7CisJCXNwcmludGYodG9rX3N0ciwgIktleSVkVHlwZSIsIGlkeCArIDEpOworCQkvL0tleTFUeXBlCisJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKHRva19zdHIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQl7CisJCSAgICBmb3IgKGkgPSAwLCBtYWNwdHIgPSByc3RydG9rKHRtcGJ1ZiwiOyIpOyBtYWNwdHI7IG1hY3B0ciA9IHJzdHJ0b2soTlVMTCwiOyIpLCBpKyspCisJCSAgICB7CisJCQkgICAgS2V5VHlwZVtpXSA9IHNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCk7CisJCSAgICB9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQl7CisJCQkJc3ByaW50Zih0b2tfc3RyLCAiS2V5JWRTdHIiLCBpZHggKyAxKTsKKwkJCQlpZiAoUlRNUEdldENyaXRpY2FsUGFyYW1ldGVyKHRva19zdHIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQkJCXsKKwkJCQkJcnRtcF9wYXJzZV9rZXlfYnVmZmVyX2Zyb21fZmlsZShwQWQsIHRtcGJ1ZiwgS2V5VHlwZVtCU1MwXSwgQlNTMCwgaWR4KTsKKwkJCQl9CisJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKwl9Cit9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorc3RhdGljIHZvaWQgcnRtcF9yZWFkX3N0YV93bW1fcGFybXNfZnJvbV9maWxlKElOICBQUlRNUF9BREFQVEVSIHBBZCwgY2hhciAqdG1wYnVmLCBjaGFyICpidWZmZXIpCit7CisJUFVDSEFSCQkJCQltYWNwdHI7CisJSU5UCQkJCQkJaT0wOworCUJPT0xFQU4JCQkJCWJXbW1FbmFibGUgPSBGQUxTRTsKKworCS8vV21tQ2FwYWJsZQorCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIldtbUNhcGFibGUiLCB0bXBidWYsIDMyLCBidWZmZXIpKQorCXsKKwkJaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKSAvL0VuYWJsZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSA9IFRSVUU7CisJCQliV21tRW5hYmxlID0gVFJVRTsKKwkJfQorCQllbHNlIC8vRGlzYWJsZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSA9IEZBTFNFOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV21tQ2FwYWJsZT0lZFxuIiwgcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpKTsKKwl9CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkvL0RMU0NhcGFibGUKKwlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJETFNDYXBhYmxlIiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwl7CisJCWlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlID0gVFJVRTsKKwkJfQorCQllbHNlIC8vRGlzYWJsZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSA9IEZBTFNFOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYkRMU0NhcGFibGU9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKSk7CisJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJLy9BY2tQb2xpY3kgZm9yIEFDX0JLLCBBQ19CRSwgQUNfVkksIEFDX1ZPCisJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQWNrUG9saWN5IiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwl7CisJCWZvciAoaSA9IDAsIG1hY3B0ciA9IHJzdHJ0b2sodG1wYnVmLCI7Iik7IG1hY3B0cjsgbWFjcHRyID0gcnN0cnRvayhOVUxMLCI7IiksIGkrKykKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQWNrUG9saWN5W2ldID0gKFVDSEFSKXNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCk7CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFja1BvbGljeVslZF09JWRcbiIsIGksIHBBZC0+Q29tbW9uQ2ZnLkFja1BvbGljeVtpXSkpOworCQl9CisJfQorCisJaWYgKGJXbW1FbmFibGUpCisJeworCQkvL0FQU0RDYXBhYmxlCisJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkFQU0RDYXBhYmxlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJeworCQkJaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKSAgLy9FbmFibGUKKwkJCQlwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgPSBUUlVFOworCQkJZWxzZQorCQkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSA9IEZBTFNFOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBUFNEQ2FwYWJsZT0lZFxuIiwgcEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlKSk7CisJCX0KKworCQkvL0FQU0RBQyBmb3IgQUNfQkUsIEFDX0JLLCBBQ19WSSwgQUNfVk8KKwkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQVBTREFDIiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwkJeworCQkJQk9PTEVBTiBhcHNkX2FjWzRdOworCisJCQlmb3IgKGkgPSAwLCBtYWNwdHIgPSByc3RydG9rKHRtcGJ1ZiwiOyIpOyBtYWNwdHI7IG1hY3B0ciA9IHJzdHJ0b2soTlVMTCwiOyIpLCBpKyspCisJCQl7CisJCQkJYXBzZF9hY1tpXSA9IChCT09MRUFOKXNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCk7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBUFNEQUMlZCAgJWRcbiIsIGksICBhcHNkX2FjW2ldKSk7CisJCQl9CisKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkUgPSBhcHNkX2FjWzBdOworCQkJcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CSyA9IGFwc2RfYWNbMV07CisJCQlwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJID0gYXBzZF9hY1syXTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8gPSBhcHNkX2FjWzNdOworCQl9CisJfQorCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworTkRJU19TVEFUVVMJUlRNUFJlYWRQYXJhbWV0ZXJzSG9vaygKKwlJTglQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQVUNIQVIJCQkJCXNyYyA9IE5VTEw7CisJc3RydWN0IGZpbGUJCQkJKnNyY2Y7CisJSU5UIAkJCQkJcmV0dmFsLCBvcmdmc3VpZCwgb3JnZnNnaWQ7CisgICAJbW1fc2VnbWVudF90CQkJb3JnZnM7CisJQ0hBUgkJCQkJKmJ1ZmZlcjsKKwlDSEFSCQkJCQkqdG1wYnVmOworCVVMT05HCQkJCQlSdHNUaHJlc2g7CisJVUxPTkcJCQkJCUZyYWdUaHJlc2g7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJVUNIQVIJICAgICAgICAgICAgICAgIGtleU1hdGVyaWFsWzQwXTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisJUFVDSEFSCQkJCQltYWNwdHI7CisJSU5UCQkJCQkJaSA9IDA7CisKKwlidWZmZXIgPSBrbWFsbG9jKE1BWF9JTklfQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlpZihidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisKKwl0bXBidWYgPSBrbWFsbG9jKE1BWF9QQVJBTV9CVUZGRVJfU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCWlmKHRtcGJ1ZiA9PSBOVUxMKQorCXsKKwkJa2ZyZWUoYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJc3JjID0gU1RBX1BST0ZJTEVfUEFUSDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKwlzcmMgPSBwQWQtPk1DX0ZpbGVOYW1lOworI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisJLy8gU2F2ZSB1aWQgYW5kIGdpZCB1c2VkIGZvciBmaWxlc3lzdGVtIGFjY2Vzcy4KKwkvLyBTZXQgdXNlciBhbmQgZ3JvdXAgdG8gMCAocm9vdCkKKyNpZiAwCisJb3JnZnN1aWQgPSBjdXJyZW50LT5mc3VpZDsKKwlvcmdmc2dpZCA9IGN1cnJlbnQtPmZzZ2lkOworCWN1cnJlbnQtPmZzdWlkPWN1cnJlbnQtPmZzZ2lkID0gMDsKKyNlbmRpZgorICAgIG9yZ2ZzID0gZ2V0X2ZzKCk7CisgICAgc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwlpZiAoc3JjICYmICpzcmMpCisJeworCQlzcmNmID0gZmlscF9vcGVuKHNyYywgT19SRE9OTFksIDApOworCQlpZiAoSVNfRVJSKHNyY2YpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsIC1QVFJfRVJSKHNyY2YpLHNyYykpOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gVGhlIG9iamVjdCBtdXN0IGhhdmUgYSByZWFkIG1ldGhvZAorCQkJaWYgKHNyY2YtPmZfb3AgJiYgc3JjZi0+Zl9vcC0+cmVhZCkKKwkJCXsKKwkJCQltZW1zZXQoYnVmZmVyLCAweDAwLCBNQVhfSU5JX0JVRkZFUl9TSVpFKTsKKwkJCQlyZXR2YWw9c3JjZi0+Zl9vcC0+cmVhZChzcmNmLCBidWZmZXIsIE1BWF9JTklfQlVGRkVSX1NJWkUsICZzcmNmLT5mX3Bvcyk7CisJCQkJaWYgKHJldHZhbCA8IDApCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gUmVhZCAlcyBlcnJvciAlZFxuIiwgc3JjLCAtcmV0dmFsKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIHNldCBmaWxlIHBhcmFtZXRlciB0byBwb3J0Y2ZnCisJCQkJCS8vQ291bnRyeVJlZ2lvbgorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJDb3VudHJ5UmVnaW9uIiwgdG1wYnVmLCAyNSwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiA9IChVQ0hBUikgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNvdW50cnlSZWdpb249JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24pKTsKKwkJCQkJfQorCQkJCQkvL0NvdW50cnlSZWdpb25BQmFuZAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJDb3VudHJ5UmVnaW9uQUJhbmQiLCB0bXBidWYsIDI1LCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQ9IChVQ0hBUikgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNvdW50cnlSZWdpb25BQmFuZD0lZFxuIiwgcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kKSk7CisJCQkJCX0KKwkJCQkJLy9Db3VudHJ5Q29kZQorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJDb3VudHJ5Q29kZSIsIHRtcGJ1ZiwgMjUsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlLCB0bXBidWYgLCAyKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlN0YU9yaUNvdW50cnlDb2RlLCB0bXBidWYgLCAyKTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkJCQlpZiAoc3RybGVuKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlKSAhPSAwKQorCQkJCQkJeworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJDb3VudHJ5RmxhZyA9IFRSVUU7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDb3VudHJ5Q29kZT0lc1xuIiwgcEFkLT5Db21tb25DZmcuQ291bnRyeUNvZGUpKTsKKwkJCQkJfQorCQkJCQkvL0NoYW5uZWxHZW9ncmFwaHkKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ2hhbm5lbEdlb2dyYXBoeSIsIHRtcGJ1ZiwgMjUsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCVVDSEFSIEdlb2dyYXBoeSA9IChVQ0hBUikgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCWlmIChHZW9ncmFwaHkgPD0gQk9USCkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPSBHZW9ncmFwaHk7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuQ291bnRyeUNvZGVbMl0gPQorCQkJCQkJCQkocEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5ID09IEJPVEgpID8gJyAnIDogKChwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPT0gSURPUikgPyAnSScgOiAnTycpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQkJcEFkLT5TdGFDZmcuU3RhT3JpR2VvZ3JhcGh5ID0gcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5OworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGFubmVsR2VvZ3JhcGh5PSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSA9IEJPVEg7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZVsyXSA9ICcgJzsKKwkJCQkJfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJeworCQkJCQkJLy9TU0lECisJCQkJCQlpZiAoUlRNUEdldENyaXRpY2FsUGFyYW1ldGVyKCJTU0lEIiwgdG1wYnVmLCAyNTYsIGJ1ZmZlcikpCisJCQkJCQl7CisJCQkJCQkJaWYgKHN0cmxlbih0bXBidWYpIDw9IDMyKQorCQkJCQkJCXsKKwkJCSAJCQkJCXBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4gPSAoVUNIQVIpIHN0cmxlbih0bXBidWYpOworCQkJCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5Tc2lkLCBORElTXzgwMl8xMV9MRU5HVEhfU1NJRCk7CisJCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHRtcGJ1ZiwgcEFkLT5Db21tb25DZmcuU3NpZExlbik7CisJCQkJCQkJCXBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbiA9IHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW47CisJCQkJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpOworCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHRtcGJ1ZiwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKwkJCQkJCQkJcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuOworCQkJCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpOworCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgdG1wYnVmLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjooU1NJRD0lcylcbiIsIF9fRlVOQ1RJT05fXywgdG1wYnVmKSk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJeworCQkJCQkJLy9OZXR3b3JrVHlwZQorCQkJCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIk5ldHdvcmtUeXBlIiwgdG1wYnVmLCAyNSwgYnVmZmVyKSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKwkJCQkJCQlpZiAoc3RyY21wKHRtcGJ1ZiwgIkFkaG9jIikgPT0gMCkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuQnNzVHlwZSA9IEJTU19BREhPQzsKKwkJCQkJCQllbHNlIC8vRGVmYXVsdCBJbmZyYXN0cnVjdHVyZSBtb2RlCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLkJzc1R5cGUgPSBCU1NfSU5GUkE7CisJCQkJCQkJLy8gUmVzZXQgUmFsaW5rIHN1cHBsaWNhbnQgdG8gbm90IHVzZSwgaXQgd2lsbCBiZSBzZXQgdG8gc3RhcnQgd2hlbiBVSSBzZXQgUE1LIGtleQorCQkJCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjooTmV0d29ya1R5cGU9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIHBBZC0+U3RhQ2ZnLkJzc1R5cGUpKTsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQkvL0NoYW5uZWwKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ2hhbm5lbCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSAoVUNIQVIpIHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGFubmVsPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJCQkJCX0KKwkJCQkJLy9XaXJlbGVzc01vZGUKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiV2lyZWxlc3NNb2RlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJaW50IHZhbHVlICA9IDAsIG1heFBoeU1vZGUgPSBQSFlfMTFHOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCQltYXhQaHlNb2RlID0gUEhZXzExTl81RzsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJCQkJdmFsdWUgPSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCisJCQkJCQlpZiAodmFsdWUgPD0gbWF4UGh5TW9kZSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gdmFsdWU7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQaHlNb2RlPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKSk7CisJCQkJCX0KKyAgICAgICAgICAgICAgICAgICAgLy9CYXNpY1JhdGUKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQmFzaWNSYXRlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwID0gKFVMT05HKSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQmFzaWNSYXRlPSVsZFxuIiwgcEFkLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwKSk7CisJCQkJCX0KKwkJCQkJLy9CZWFjb25QZXJpb2QKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQmVhY29uUGVyaW9kIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kID0gKFVTSE9SVCkgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJlYWNvblBlcmlvZD0lZFxuIiwgcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kKSk7CisJCQkJCX0KKyAgICAgICAgICAgICAgICAgICAgLy9UeFBvd2VyCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlR4UG93ZXIiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IChVTE9ORykgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQkJcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQgPSBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4UG93ZXI9JWxkXG4iLCBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSkpOworCQkJCQl9CisJCQkJCS8vQkdQcm90ZWN0aW9uCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkJHUHJvdGVjdGlvbiIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXN3aXRjaCAoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIDE6IC8vQWx3YXlzIE9uCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDE7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMjogLy9BbHdheXMgT0ZGCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDI7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMDogLy9BVVRPCisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gMDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCR1Byb3RlY3Rpb249JWxkXG4iLCBwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24pKTsKKwkJCQkJfQorCQkJCQkvL09MQkNEZXRlY3Rpb24KKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiRGlzYWJsZU9MQkMiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAxOiAvL2Rpc2FibGUgT0xCQyBEZXRlY3Rpb24KKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGlzYWJsZU9MQkNEZXRlY3QgPSAxOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDA6IC8vZW5hYmxlIE9MQkMgRGV0ZWN0aW9uCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkRpc2FibGVPTEJDRGV0ZWN0ID0gMDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGlzYWJsZU9MQkNEZXRlY3Q9IDA7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiT0xCQ0RldGVjdGlvbj0lbGRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkRpc2FibGVPTEJDRGV0ZWN0KSk7CisJCQkJCX0KKwkJCQkJLy9UeFByZWFtYmxlCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlR4UHJlYW1ibGUiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkpCisJCQkJCQl7CisJCQkJCQkJY2FzZSBSdDgwMl8xMVByZWFtYmxlU2hvcnQ6CisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPSBSdDgwMl8xMVByZWFtYmxlU2hvcnQ7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZUxvbmc6CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFJ0ODAyXzExUHJlYW1ibGVMb25nOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4UHJlYW1ibGU9JWxkXG4iLCBwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlKSk7CisJCQkJCX0KKwkJCQkJLy9SVFNUaHJlc2hvbGQKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiUlRTVGhyZXNob2xkIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJUnRzVGhyZXNoID0gc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCWlmKCAoUnRzVGhyZXNoID49IDEpICYmIChSdHNUaHJlc2ggPD0gTUFYX1JUU19USFJFU0hPTEQpICkKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgID0gKFVTSE9SVClSdHNUaHJlc2g7CisJCQkJCQllbHNlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID0gTUFYX1JUU19USFJFU0hPTEQ7CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUU1RocmVzaG9sZD0lZFxuIiwgcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkKSk7CisJCQkJCX0KKwkJCQkJLy9GcmFnVGhyZXNob2xkCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkZyYWdUaHJlc2hvbGQiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlGcmFnVGhyZXNoID0gc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQgPSBGQUxTRTsKKworCQkJCQkJaWYgKEZyYWdUaHJlc2ggPiBNQVhfRlJBR19USFJFU0hPTEQgfHwgRnJhZ1RocmVzaCA8IE1JTl9GUkFHX1RIUkVTSE9MRCkKKwkJCQkJCXsgLy9pbGxlZ2FsIEZyYWdUaHJlc2ggc28gd2Ugc2V0IGl0IHRvIGRlZmF1bHQKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gVFJVRTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKEZyYWdUaHJlc2ggJSAyID09IDEpCisJCQkJCQl7CisJCQkJCQkJLy8gVGhlIGxlbmd0aCBvZiBlYWNoIGZyYWdtZW50IHNoYWxsIGFsd2F5cyBiZSBhbiBldmVuIG51bWJlciBvZiBvY3RldHMsIGV4Y2VwdCBmb3IgdGhlIGxhc3QgZnJhZ21lbnQKKwkJCQkJCQkvLyBvZiBhbiBNU0RVIG9yIE1NUERVLCB3aGljaCBtYXkgYmUgZWl0aGVyIGFuIGV2ZW4gb3IgYW4gb2RkIG51bWJlciBvZiBvY3RldHMuCisJCQkJCQkJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAoVVNIT1JUKShGcmFnVGhyZXNoIC0gMSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAoVVNIT1JUKUZyYWdUaHJlc2g7CisJCQkJCQl9CisJCQkJCQkvL3BBZC0+Q29tbW9uQ2ZnLkFsbG93RnJhZ1NpemUgPSAocEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQpIC0gTEVOR1RIXzgwMl8xMSAtIExFTkdUSF9DUkM7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGcmFnVGhyZXNob2xkPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCkpOworCQkJCQl9CisJCQkJCS8vVHhCdXJzdAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJUeEJ1cnN0IiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworLy8jaWZkZWYgV0lGSV9URVNUCisvLwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gRkFMU0U7CisvLyNlbHNlCisJCQkJCQlpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApICAvL0VuYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gVFJVRTsKKwkJCQkJCWVsc2UgLy9EaXNhYmxlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgPSBGQUxTRTsKKy8vI2VuZGlmCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUeEJ1cnN0PSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCkpOworCQkJCQl9CisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisJCQkJCS8vUGt0QWdncmVnYXRlCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlBrdEFnZ3JlZ2F0ZSIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCWlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSA9IFRSVUU7CisJCQkJCQllbHNlIC8vRGlzYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPSBGQUxTRTsKKyNpZmRlZiBQSUdHWUJBQ0tfU1VQUE9SVAorCQkJCQkJcEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUgPSBwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlOworI2VuZGlmIC8vIFBJR0dZQkFDS19TVVBQT1JUIC8vCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQa3RBZ2dyZWdhdGU9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpKTsKKwkJCQkJfQorI2Vsc2UKKwkJCQkJcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSA9IEZBTFNFOworCQkJCQlwQWQtPkNvbW1vbkNmZy5iUGlnZ3lCYWNrQ2FwYWJsZSA9IEZBTFNFOworI2VuZGlmIC8vIEFHR1JFR0FUSU9OX1NVUFBPUlQgLy8KKworCQkJCQkvLyBXbW1DYXBhYmxlCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCXJ0bXBfcmVhZF9zdGFfd21tX3Bhcm1zX2Zyb21fZmlsZShwQWQsIHRtcGJ1ZiwgYnVmZmVyKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJCQkvL1Nob3J0U2xvdAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJTaG9ydFNsb3QiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApICAvL0VuYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lID0gVFJVRTsKKwkJCQkJCWVsc2UgLy9EaXNhYmxlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUgPSBGQUxTRTsKKworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2hvcnRTbG90PSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSkpOworCQkJCQl9CisJCQkJCS8vSUVFRTgwMjExSAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJJRUVFODAyMTFIIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkgICAgZm9yIChpID0gMCwgbWFjcHRyID0gcnN0cnRvayh0bXBidWYsIjsiKTsgbWFjcHRyOyBtYWNwdHIgPSByc3RydG9rKE5VTEwsIjsiKSwgaSsrKQorCQkJCQkgICAgeworICAgIAkJCQkJCWlmKHNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisgICAgCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID0gVFJVRTsKKyAgICAJCQkJCQllbHNlIC8vRGlzYWJsZQorICAgIAkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9IEZBTFNFOworCisgICAgCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUVFRTgwMjExSD0lZFxuIiwgcEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUgpKTsKKwkJCQkJICAgIH0KKwkJCQkJfQorCQkJCQkvL0NTUGVyaW9kCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkNTUGVyaW9kIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkgICAgaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNTUGVyaW9kID0gc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU1BlcmlvZCA9IDA7CisKKyAgIAkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNTUGVyaW9kPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU1BlcmlvZCkpOworCQkJCQl9CisKKwkJCQkJLy9SRFJlZ2lvbgorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJSRFJlZ2lvbiIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlpZiAoKHN0cm5jbXAodG1wYnVmLCAiSkFQX1c1MyIsIDcpID09IDApIHx8IChzdHJuY21wKHRtcGJ1ZiwgImphcF93NTMiLCA3KSA9PSAwKSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbiA9IEpBUF9XNTM7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgPSAxNTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKChzdHJuY21wKHRtcGJ1ZiwgIkpBUF9XNTYiLCA3KSA9PSAwKSB8fCAoc3RybmNtcCh0bXBidWYsICJqYXBfdzU2IiwgNykgPT0gMCkpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBKQVBfVzU2OworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gMTM7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmICgoc3RybmNtcCh0bXBidWYsICJKQVAiLCAzKSA9PSAwKSB8fCAoc3RybmNtcCh0bXBidWYsICJqYXAiLCAzKSA9PSAwKSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbiA9IEpBUDsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5EZnNTZXNzaW9uVGltZSA9IDU7CisJCQkJCQl9CisJCQkJCQllbHNlICBpZiAoKHN0cm5jbXAodG1wYnVmLCAiRkNDIiwgMykgPT0gMCkgfHwgKHN0cm5jbXAodG1wYnVmLCAiZmNjIiwgMykgPT0gMCkpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBGQ0M7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgPSA1OworCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAoKHN0cm5jbXAodG1wYnVmLCAiQ0UiLCAyKSA9PSAwKSB8fCAoc3RybmNtcCh0bXBidWYsICJjZSIsIDIpID09IDApKQorCQkJCQkJeworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uID0gQ0U7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgPSAxMzsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbiA9IENFOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gMTM7CisJCQkJCQl9CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJEUmVnaW9uPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbikpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBDRTsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gMTM7CisJCQkJCX0KKworCQkJCQkvL1dpcmVsZXNzRXZlbnQKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiV2lyZWxlc3NFdmVudCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTUKKwkJCQkJICAgIGlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQllbHNlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQgPSAwOwkvLyBkaXNhYmxlCisjZWxzZQorCQkJCQkJcEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQgPSAwOwkvLyBkaXNhYmxlCisjZW5kaWYKKyAgIAkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldpcmVsZXNzRXZlbnQ9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KSk7CisJCQkJCX0KKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiV2lGaVRlc3QiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCSAgICBpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYldpRmlUZXN0PSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCQkJCQkJZWxzZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCA9IDA7CS8vIGRpc2FibGUKKworICAgCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV2lGaVRlc3Q9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCkpOworCQkJCQl9CisJCQkJCS8vQXV0aE1vZGUKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQXV0aE1vZGUiLCB0bXBidWYsIDEyOCwgYnVmZmVyKSkKKwkJCQkJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoKHN0cmNtcCh0bXBidWYsICJXRVBBVVRPIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ3ZXBhdXRvIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaDsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIlNIQVJFRCIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAic2hhcmVkIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkOworCQkJCQkJCWVsc2UgaWYgKChzdHJjbXAodG1wYnVmLCAiV1BBUFNLIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ3cGFwc2siKSA9PSAwKSkKKwkJCQkJCQkgICAgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7CisJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJXUEFOT05FIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ3cGFub25lIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIldQQTJQU0siKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgIndwYTJwc2siKSA9PSAwKSkKKwkJCQkJCQkgICAgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIldQQSIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAid3BhIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBOworCQkJCQkJCWVsc2UgaWYgKChzdHJjbXAodG1wYnVmLCAiV1BBMiIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAid3BhMiIpID09IDApKQorCQkJCQkJCSAgICBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7CisKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6KEVuY3J5cFR5cGU9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cykpOworCQkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQl9CisJCQkJCS8vRW5jcnlwVHlwZQorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJFbmNyeXBUeXBlIiwgdG1wYnVmLCAxMjgsIGJ1ZmZlcikpCisJCQkJCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoKHN0cmNtcCh0bXBidWYsICJXRVAiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgIndlcCIpID09IDApKQorCQkJCQkJCQlwQWQtPlN0YUNmZy5XZXBTdGF0dXMJPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIlRLSVAiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgInRraXAiKSA9PSAwKSkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuV2VwU3RhdHVzCT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIkFFUyIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAiYWVzIikgPT0gMCkpCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLldlcFN0YXR1cwk9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPlN0YUNmZy5XZXBTdGF0dXMJPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisKKwkJCQkJCQkvLyBVcGRhdGUgYWxsIHdlcHN0YXR1cyByZWxhdGVkCisJCQkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlcgkJPSBwQWQtPlN0YUNmZy5XZXBTdGF0dXM7CisJCQkJCQkJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgCT0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCQkJCQkJCXBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgCT0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCQkJCQkJCXBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXIgCQk9IEZBTFNFOworCisJCQkJCQkJLy9SVE1QTWFrZVJTTklFKHBBZCwgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgMCk7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OihFbmNyeXBUeXBlPSVkKVxuIiwgX19GVU5DVElPTl9fLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMpKTsKKwkJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJfQorCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQl7CisJCQkJCQlpZihSVE1QR2V0Q3JpdGljYWxQYXJhbWV0ZXIoIldQQVBTSyIsIHRtcGJ1ZiwgNTEyLCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWludCAgICAgZXJyPTA7CisKKwkJCQkJCQl0bXBidWZbc3RybGVuKHRtcGJ1ZildID0gJ1wwJzsgLy8gbWFrZSBTVEEgY2FuIHByb2Nlc3MgLiReJiBmb3IgV1BBUFNLIGlucHV0CisKKwkJCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgJiYKKwkJCQkJCQkJKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spICYmCisJCQkJCQkJCShwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQkJCQkJCQkpCisJCQkJCQkJeworCQkJCQkJCQllcnIgPSAxOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGlmICgoc3RybGVuKHRtcGJ1ZikgPj0gOCkgJiYgKHN0cmxlbih0bXBidWYpIDwgNjQpKQorCQkJCQkJCXsKKwkJCQkJCQkJUGFzc3dvcmRIYXNoKChjaGFyICopdG1wYnVmLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLCBrZXlNYXRlcmlhbCk7CisJCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlBNSywga2V5TWF0ZXJpYWwsIDMyKTsKKworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGlmIChzdHJsZW4odG1wYnVmKSA9PSA2NCkKKwkJCQkJCQl7CisJCQkJCQkJCUF0b0godG1wYnVmLCBrZXlNYXRlcmlhbCwgMzIpOworCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5QTUssIGtleU1hdGVyaWFsLCAzMik7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCWVyciA9IDE7CisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOjooV1BBUFNLIGtleS1zdHJpbmcgcmVxdWlyZWQgOCB+IDY0IGNoYXJhY3RlcnMhKVxuIiwgX19GVU5DVElPTl9fKSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKGVyciA9PSAwKQorCSAgICAgICAgICAgICAgICAgICAgICAgIAkJCXsKKwkgICAgICAgICAgICAgICAgICAgICAgICAJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCQkJCQkJCQkocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8vIFN0YXJ0IFNUQSBzdXBwbGljYW50IHN0YXRlIG1hY2hpbmUKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfU1RBUlQ7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJCQkJCQkJeworCS8qCisJCQkJCQkJCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisJCQkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwgcEFkLT5TdGFDZmcuUE1LLCBMRU5fVEtJUF9FSyk7CisJCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywgJnBBZC0+U3RhQ2ZnLlBNS1sxNl0sIExFTl9US0lQX1JYTUlDSyk7CisJCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywgJnBBZC0+U3RhQ2ZnLlBNS1sxNl0sIExFTl9US0lQX1RYTUlDSyk7CisKKwkJCQkJCQkJCS8vIERlY2lkZSBpdHMgQ2hpcGVyQWxnCisJCQkJCQkJCQlpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCQkJCQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworCQkJCQkJCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJCQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJKi8KKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworCQkJCQkJCQl9CisKKwkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OihXUEFQU0s9JXMpXG4iLCBfX0ZVTkNUSU9OX18sIHRtcGJ1ZikpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQkJCS8vRGVmYXVsdEtleUlELCBLZXlUeXBlLCBLZXlTdHIKKwkJCQkJcnRtcF9yZWFkX2tleV9wYXJtc19mcm9tX2ZpbGUocEFkLCB0bXBidWYsIGJ1ZmZlcik7CisKKworCQkJCQkvL0hTQ291bnRlcgorCQkJCQkvKmlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhTQ291bnRlciIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXN3aXRjaCAoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSkKKwkJCQkJCXsKKwkJCQkJCQljYXNlIDE6IC8vRW5hYmxlCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVIU0NvdW50ZXIgPSBUUlVFOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDA6IC8vRGlzYWJsZQorCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVIU0NvdW50ZXIgPSBGQUxTRTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkhTQ291bnRlcj0lZFxuIiwgcEFkLT5Db21tb25DZmcuYkVuYWJsZUhTQ291bnRlcik7CisJCQkJCX0qLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCUhUUGFyYW1ldGVyc0hvb2socEFkLCB0bXBidWYsIGJ1ZmZlcik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKKwkJCQkJCS8vQ2FycmllckRldGVjdAorCQkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ2FycmllckRldGVjdCIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWlmICgoc3RybmNtcCh0bXBidWYsICIwIiwgMSkgPT0gMCkpCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID0gRkFMU0U7CisJCQkJCQkJZWxzZSBpZiAoKHN0cm5jbXAodG1wYnVmLCAiMSIsIDEpID09IDApKQorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9IFRSVUU7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9IEZBTFNFOworCisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2FycmllckRldGVjdC5FbmFibGU9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPSBGQUxTRTsKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJeworCQkJCQkJLy9QU01vZGUKKwkJCQkJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJQU01vZGUiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKKwkJCQkJCQl7CisJCQkJCQkJCWlmICgoc3RyY21wKHRtcGJ1ZiwgIk1BWF9QU1AiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgIm1heF9wc3AiKSA9PSAwKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJLy8gZG8gTk9UIHR1cm4gb24gUFNNIGJpdCBoZXJlLCB3YWl0IHVudGlsIE1sbWVDaGVja0ZvclBzbUNoYW5nZSgpCisJCQkJCQkJCQkvLyB0byBleGNsdWRlIGNlcnRhaW4gc2l0dWF0aW9ucy4KKwkJCQkJCQkJCS8vCSAgIE1sbWVTZXRQc20ocEFkLCBQV1JfU0FWRSk7CisJCQkJCQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKwkJCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTUFYX1BTUDsKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZU1BWF9QU1A7CisJCQkJCQkJCQlwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQgPSA1OworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UgaWYgKChzdHJjbXAodG1wYnVmLCAiRmFzdF9QU1AiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgImZhc3RfcHNwIikgPT0gMCkKKwkJCQkJCQkJCXx8IChzdHJjbXAodG1wYnVmLCAiRkFTVF9QU1AiKSA9PSAwKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJLy8gZG8gTk9UIHR1cm4gb24gUFNNIGJpdCBoZXJlLCB3YWl0IHVudGlsIE1sbWVDaGVja0ZvclBzbUNoYW5nZSgpCisJCQkJCQkJCQkvLyB0byBleGNsdWRlIGNlcnRhaW4gc2l0dWF0aW9ucy4KKwkJCQkJCQkJCS8vCSAgIE1sbWVTZXRQc21CaXQocEFkLCBQV1JfU0FWRSk7CisJCQkJCQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKwkJCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlRmFzdF9QU1A7CisJCQkJCQkJCQlwQWQtPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUDsKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCA9IDM7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJMZWdhY3lfUFNQIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJsZWdhY3lfcHNwIikgPT0gMCkKKwkJCQkJCQkJCXx8IChzdHJjbXAodG1wYnVmLCAiTEVHQUNZX1BTUCIpID09IDApKQorCQkJCQkJCQl7CisJCQkJCQkJCQkvLyBkbyBOT1QgdHVybiBvbiBQU00gYml0IGhlcmUsIHdhaXQgdW50aWwgTWxtZUNoZWNrRm9yUHNtQ2hhbmdlKCkKKwkJCQkJCQkJCS8vIHRvIGV4Y2x1ZGUgY2VydGFpbiBzaXR1YXRpb25zLgorCQkJCQkJCQkJLy8JICAgTWxtZVNldFBzbUJpdChwQWQsIFBXUl9TQVZFKTsKKwkJCQkJCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19SRUNFSVZFX0RUSU0pOworCQkJCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLmJXaW5kb3dzQUNDQU1FbmFibGUgPT0gRkFMU0UpCisJCQkJCQkJCQkJcEFkLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQOworCQkJCQkJCQkJcEFkLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUDsKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCA9IDM7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZQorCQkJCQkJCQl7IC8vRGVmYXVsdCBOZGlzODAyXzExUG93ZXJNb2RlQ0FNCisJCQkJCQkJCQkvLyBjbGVhciBQU00gYml0IGltbWVkaWF0ZWx5CisJCQkJCQkJCQlNbG1lU2V0UHNtQml0KHBBZCwgUFdSX0FDVElWRSk7CisJCQkJCQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKwkJCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOworCQkJCQkJCQkJcEFkLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOworCQkJCQkJCQl9CisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBTTW9kZT0lbGRcbiIsIHBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUpKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkvLyBGYXN0Um9hbWluZworCQkJCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkZhc3RSb2FtaW5nIiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSA9PSAwKQorCQkJCQkJCQlwQWQtPlN0YUNmZy5iRmFzdFJvYW1pbmcgPSBGQUxTRTsKKwkJCQkJCQllbHNlCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLmJGYXN0Um9hbWluZyA9IFRSVUU7CisKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGYXN0Um9hbWluZz0lZFxuIiwgcEFkLT5TdGFDZmcuYkZhc3RSb2FtaW5nKSk7CisJCQkJCQl9CisJCQkJCQkvLyBSb2FtVGhyZXNob2xkCisJCQkJCQlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiUm9hbVRocmVzaG9sZCIsIHRtcGJ1ZiwgMzIsIGJ1ZmZlcikpCisJCQkJCQl7CisJCQkJCQkJbG9uZyBsSW5mbyA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisKKwkJCQkJCQlpZiAobEluZm8gPiA5MCB8fCBsSW5mbyA8IDYwKQorCQkJCQkJCQlwQWQtPlN0YUNmZy5kQm1Ub1JvYW0gPSAtNzA7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPlN0YUNmZy5kQm1Ub1JvYW0gPSAoQ0hBUikoLTEpKmxJbmZvOworCisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUm9hbVRocmVzaG9sZD0lZCAgZEJtXG4iLCBwQWQtPlN0YUNmZy5kQm1Ub1JvYW0pKTsKKwkJCQkJCX0KKworCQkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiVEduV2lmaVRlc3QiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgPT0gMCkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0ID0gRkFMU0U7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPlN0YUNmZy5iVEduV2lmaVRlc3QgPSBUUlVFOworCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUR25XaWZpVGVzdD0lZFxuIiwgcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0KSk7CisJCQkJCQl9CisJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWZkZWYgUlQzMHh4CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJeworCQkJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkFudERpdmVyc2l0eSIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCQkJeworCQkJCQkJCQlmb3IgKGkgPSAwLCBtYWNwdHIgPSByc3RydG9rKHRtcGJ1ZiwiOyIpOyBtYWNwdHI7IG1hY3B0ciA9IHJzdHJ0b2soTlVMTCwiOyIpLCBpKyspCisJCQkJCQkJCXsKKwkJCQkJCQkJCWlmKHNpbXBsZV9zdHJ0b2wobWFjcHRyLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuYlJ4QW50RGl2ZXJzaXR5ID0gVFJVRTsKKwkJCQkJCQkJCWVsc2UgLy9EaXNhYmxlCisJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuYlJ4QW50RGl2ZXJzaXR5ID0gRkFMU0U7CisKKwkJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFudERpdmVyc2l0eT0lZFxuIiwgcEFkLT5Db21tb25DZmcuYlJ4QW50RGl2ZXJzaXR5KSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiAlcyBkb2VzIG5vdCBoYXZlIGEgd3JpdGUgbWV0aG9kXG4iLCBzcmMpKTsKKwkJCX0KKworCQkJcmV0dmFsPWZpbHBfY2xvc2Uoc3JjZixOVUxMKTsKKworCQkJaWYgKHJldHZhbCkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gRXJyb3IgJWQgY2xvc2luZyAlc1xuIiwgLXJldHZhbCwgc3JjKSk7CisJCQl9CisJCX0KKwl9CisKKwlzZXRfZnMob3JnZnMpOworI2lmIDAKKwljdXJyZW50LT5mc3VpZCA9IG9yZ2ZzdWlkOworCWN1cnJlbnQtPmZzZ2lkID0gb3JnZnNnaWQ7CisjZW5kaWYKKworCWtmcmVlKGJ1ZmZlcik7CisJa2ZyZWUodG1wYnVmKTsKKworCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Cit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3N0YXRpYyB2b2lkCUhUUGFyYW1ldGVyc0hvb2soCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JQ0hBUgkJICAqcFZhbHVlU3RyLAorCUlOCUNIQVIJCSAgKnBJbnB1dCkKK3sKKworCUlOVCBWYWx1ZTsKKworICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9QUk9URUNUIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKyAgICB7CisgICAgICAgIFZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKyAgICAgICAgaWYgKFZhbHVlID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJIVFByb3RlY3QgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJIVFByb3RlY3QgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBQcm90ZWN0aW9uICA9ICVzXG4iLCAoVmFsdWU9PTApID8gIkRpc2FibGUiIDogIkVuYWJsZSIpKTsKKyAgICB9CisKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfTUlNT1BTRW5hYmxlIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKyAgICB7CisgICAgICAgIFZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKyAgICAgICAgaWYgKFZhbHVlID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBNSU1PUFNFbmFibGUgID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlIikpOworICAgIH0KKworCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX01JTU9QU01vZGUiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorICAgIHsKKyAgICAgICAgVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworICAgICAgICBpZiAoVmFsdWUgPiBNTVBTX0VOQUJMRSkKKyAgICAgICAgeworCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gTU1QU19FTkFCTEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvL1RPRE86IGFkZCBtaW1vIHBvd2VyIHNhdmluZyBtZWNoYW5pc20KKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSA9IE1NUFNfRU5BQkxFOworCQkJLy9wQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUgPSBWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTUlNT1BTIE1vZGUgID0gJWRcbiIsIFZhbHVlKSk7CisgICAgfQorCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0JBRGVjbGluZSIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisgICAgeworICAgICAgICBWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisgICAgICAgIGlmIChWYWx1ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogQkEgRGVjbGluZSAgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisgICAgfQorCisKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfRGlzYWJsZVJlb3JkZXJpbmciLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorICAgIHsKKyAgICAgICAgVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworICAgICAgICBpZiAoVmFsdWUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iRGlzYWJsZVJlb3JkZXJpbmcgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBEaXNhYmxlUmVvcmRlcmluZyAgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisgICAgfQorCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0F1dG9CQSIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisgICAgeworICAgICAgICBWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisgICAgICAgIGlmIChWYWx1ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gRkFMU0U7CisJICAgIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBCQV9OT1RVU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gVFJVRTsKKwkgICAgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSA9IElNTUVEX0JBOworICAgICAgICB9CisgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBOworCXBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5OworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogQXV0byBCQSAgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisgICAgfQorCisJLy8gVHhfK0hUQyBmcmFtZQorICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9IVEMiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCQlpZiAoVmFsdWUgPT0gMCkKKwkJeworCQkJcEFkLT5IVENFbmFibGUgPSBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKyAgICAgICAgICAgIAkJcEFkLT5IVENFbmFibGUgPSBUUlVFOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBUeCArSFRDIGZyYW1lID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlIikpOworCX0KKworCS8vIEVuYWJsZSBIVCBMaW5rIEFkYXB0YXRpb24gQ29udHJvbAorCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9MaW5rQWRhcHQiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCQlpZiAoVmFsdWUgPT0gMCkKKwkJeworCQkJcEFkLT5iTGlua0FkYXB0ID0gRkFMU0U7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQWQtPkhUQ0VuYWJsZSA9IFRSVUU7CisJCQlwQWQtPmJMaW5rQWRhcHQgPSBUUlVFOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBMaW5rIEFkYXB0YXRpb24gQ29udHJvbCA9ICVzXG4iLCAoVmFsdWU9PTApID8gIkRpc2FibGUiIDogIkVuYWJsZSgrSFRDKSIpKTsKKwl9CisKKwkvLyBSZXZlcnNlIERpcmVjdGlvbiBNZWNoYW5pc20KKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfUkRHIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IDApCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJSZGcgPSBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+SFRDRW5hYmxlID0gVFJVRTsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJSZGcgPSBUUlVFOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBSREcgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUoK0hUQykiKSk7CisJfQorCisKKworCisJLy8gVHggQS1NU1VEID8KKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfQU1TRFUiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCQlpZiAoVmFsdWUgPT0gMCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlID0gRkFMU0U7CisJCX0KKwkJZWxzZQorCQl7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVFbmFibGUgPSBUUlVFOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBUeCBBLU1TRFUgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisJfQorCisJLy8gTVBEVSBEZW5zaXR5CisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX01wZHVEZW5zaXR5IiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlIDw9NyAmJiBWYWx1ZSA+PSAwKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkgPSBWYWx1ZTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBNUERVIERlbnNpdHkgPSAlZFxuIiwgVmFsdWUpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eSA9IDQ7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTVBEVSBEZW5zaXR5ID0gJWQgKERlZmF1bHQpXG4iLCA0KSk7CisJCX0KKwl9CisKKwkvLyBNYXggUnggQkEgV2luZG93IFNpemUKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfQkFXaW5TaXplIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKworCQlpZiAoVmFsdWUgPj0xICYmIFZhbHVlIDw9IDY0KQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gVmFsdWU7CisJCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gVmFsdWU7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogQkEgV2luZHcgU2l6ZSA9ICVkXG4iLCBWYWx1ZSkpOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDY0OworCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDY0OworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IEJBIFdpbmR3IFNpemUgPSA2NCAoRGVmdWFsdClcbiIpKTsKKwkJfQorCisJfQorCisJLy8gR3VhcmQgSW50ZXJ2YWwKKwlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfR0kiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCisJCWlmIChWYWx1ZSA9PSBHSV80MDApCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJID0gR0lfNDAwOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7CisJCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogR3VhcmQgSW50ZXJ2YWwgPSAlc1xuIiwgKFZhbHVlPT1HSV80MDApID8gIjQwMCIgOiAiODAwIiApKTsKKwl9CisKKwkvLyBIVCBPcGVyYXRpb24gTW9kZSA6IE1peGVkIE1vZGUgLCBHcmVlbiBGaWVsZAorCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9PcE1vZGUiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCisJCWlmIChWYWx1ZSA9PSBIVE1PREVfR0YpCisJCXsKKworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSAgPSBIVE1PREVfR0Y7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuSFRNT0RFICA9IEhUTU9ERV9NTTsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBPcGVyYXRlIE1vZGUgPSAlc1xuIiwgKFZhbHVlPT1IVE1PREVfR0YpID8gIkdyZWVuIEZpZWxkIiA6ICJNaXhlZCBNb2RlIiApKTsKKwl9CisKKwkvLyBGaXhlZCBUeCBtb2RlIDogQ0NLLCBPRkRNCisJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkZpeGVkVHhNb2RlIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVVDSEFSCWZpeF90eF9tb2RlOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCWZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0hUOworCisJCQlpZiAoc3RyY21wKHBWYWx1ZVN0ciwgIk9GRE0iKSA9PSAwIHx8IHN0cmNtcChwVmFsdWVTdHIsICJvZmRtIikgPT0gMCkKKwkJCXsKKwkJCQlmaXhfdHhfbW9kZSA9IEZJWEVEX1RYTU9ERV9PRkRNOworCQkJfQorCQkJZWxzZSBpZiAoc3RyY21wKHBWYWx1ZVN0ciwgIkNDSyIpID09IDAgfHwgc3RyY21wKHBWYWx1ZVN0ciwgImNjayIpID09IDApCisJCQl7CisJCSAgICAgICAgZml4X3R4X21vZGUgPSBGSVhFRF9UWE1PREVfQ0NLOworCQkJfQorCQkJZWxzZSBpZiAoc3RyY21wKHBWYWx1ZVN0ciwgIkhUIikgPT0gMCB8fCBzdHJjbXAocFZhbHVlU3RyLCAiaHQiKSA9PSAwKQorCQkJeworCQkgICAgICAgIGZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0hUOworCQl9CisJCWVsc2UKKwkJeworCQkJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJCQkvLyAxIDogQ0NLCisJCQkJLy8gMiA6IE9GRE0KKwkJCQkvLyBvdGhlcndpc2UgOiBIVAorCQkJCWlmIChWYWx1ZSA9PSBGSVhFRF9UWE1PREVfQ0NLIHx8IFZhbHVlID09IEZJWEVEX1RYTU9ERV9PRkRNKQorCQkJCQlmaXhfdHhfbW9kZSA9IFZhbHVlOworCQkJCWVsc2UKKwkJCQkJZml4X3R4X21vZGUgPSBGSVhFRF9UWE1PREVfSFQ7CisJCX0KKworCQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSA9IGZpeF90eF9tb2RlOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRml4ZWQgVHggTW9kZSA9ICVkXG4iLCBmaXhfdHhfbW9kZSkpOworCisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKworCS8vIENoYW5uZWwgV2lkdGgKKwlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfQlciLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCisJCWlmIChWYWx1ZSA9PSBCV180MCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzQwOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzIwOworCQl9CisKKyNpZmRlZiBNQ0FTVF9SQVRFX1NQRUNJRklDCisJCXBBZC0+Q29tbW9uQ2ZnLk1DYXN0UGh5TW9kZS5maWVsZC5CVyA9IHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVzsKKyNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IENoYW5uZWwgV2lkdGggPSAlc1xuIiwgKFZhbHVlPT1CV180MCkgPyAiNDAgTUh6IiA6ICIyMCBNSHoiICkpOworCX0KKworCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9FWFRDSEEiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorCXsKKwkJVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworCisJCWlmIChWYWx1ZSA9PSAwKQorCQl7CisKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgID0gRVhUQ0hBX0JFTE9XOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9BQk9WRTsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBFeHQgQ2hhbm5lbCA9ICVzXG4iLCAoVmFsdWU9PTApID8gIkJFTE9XIiA6ICJBQk9WRSIgKSk7CisJfQorCisJLy8gTVNDCisJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX01DUyIsIHBWYWx1ZVN0ciwgNTAsIHBJbnB1dCkpCisJeworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKworLy8JCQlpZiAoKFZhbHVlID49IDAgJiYgVmFsdWUgPD0gMTUpIHx8IChWYWx1ZSA9PSAzMikpCisJCQlpZiAoKFZhbHVlID49IDAgJiYgVmFsdWUgPD0gMjMpIHx8IChWYWx1ZSA9PSAzMikpIC8vIDMqMworCQl7CisJCQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgID0gVmFsdWU7CisJCQkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBGQUxTRTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTUNTID0gJWRcbiIsIHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgID0gTUNTX0FVVE87CisJCQkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBNQ1MgPSBBVVRPXG4iKSk7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisJLy8gU1RCQworICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9TVEJDIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IFNUQkNfVVNFKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQyA9IFNUQkNfVVNFOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IFNUQkMgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNUQkMpKTsKKwl9CisKKwkvLyA0MF9NaHpfSW50b2xlcmFudAorCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF80ME1IWl9JTlRPTEVSQU5UIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IDApCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJGb3J0eV9NaHpfSW50b2xlcmFudCA9IEZBTFNFOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db21tb25DZmcuYkZvcnR5X01oel9JbnRvbGVyYW50ID0gVFJVRTsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogNDBNSFogSU5UT0xFUkFOVCA9ICVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iRm9ydHlfTWh6X0ludG9sZXJhbnQpKTsKKwl9CisJLy9IVF9UeFN0cmVhbQorCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX1R4U3RyZWFtIiwgcFZhbHVlU3RyLCAxMCwgcElucHV0KSkKKwl7CisJCXN3aXRjaCAoc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKSkKKwkJeworCQkJY2FzZSAxOgorCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6IC8vIDMqMworCQkJZGVmYXVsdDoKKwkJCQlwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9IDM7CisKKwkJCQlpZiAocEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzI4ODNfVkVSU0lPTikKKwkJCQkJcEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPSAyOyAvLyBvbmx5IDIgdHggc3RyZWFtcyBmb3IgUlQyODYwIHNlcmllcworCQkJCWJyZWFrOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBUeCBTdHJlYW0gPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuVHhTdHJlYW0pKTsKKwl9CisJLy9IVF9SeFN0cmVhbQorCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX1J4U3RyZWFtIiwgcFZhbHVlU3RyLCAxMCwgcElucHV0KSkKKwl7CisJCXN3aXRjaCAoc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKSkKKwkJeworCQkJY2FzZSAxOgorCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQlkZWZhdWx0OgorCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID0gMzsKKworCQkJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPCBSQUxJTktfMjg4M19WRVJTSU9OKQorCQkJCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IDI7IC8vIG9ubHkgMiByeCBzdHJlYW1zIGZvciBSVDI4NjAgc2VyaWVzCisJCQkJYnJlYWs7CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IFJ4IFN0cmVhbSA9ICVkXG4iLCBwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSkpOworCX0KKworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGQ3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXAuaApAQCAtMCwwICsxLDc3MjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgcnRtcC5oCisKKyAgICBBYnN0cmFjdDoKKyAgICBNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUGF1bCBMaW4gICAgMjAwMi0wOC0wMSAgICBjcmVhdGVkCisgICAgSmFtZXMgVGFuICAgMjAwMi0wOS0wNiAgICBtb2RpZmllZCAoUmV2aXNlIE5UQ1JlZ1RhYmxlKQorICAgIEpvaG4gQ2hhbmcgIDIwMDQtMDktMDYgICAgbW9kaWZpZWQgZm9yIFJUMjYwMAorKi8KKyNpZm5kZWYgX19SVE1QX0hfXworI2RlZmluZSBfX1JUTVBfSF9fCisKKyNpbmNsdWRlICJsaW5rX2xpc3QuaCIKKyNpbmNsdWRlICJzcGVjdHJ1bV9kZWYuaCIKKworI2lmZGVmIE1MTUVfRVgKKyNpbmNsdWRlICJtbG1lX2V4X2RlZi5oIgorI2VuZGlmIC8vIE1MTUVfRVggLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2luY2x1ZGUgImFpcm9uZXQuaCIKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI3VuZGVmIEFQX1dTQ19JTkNMVURFRAorI3VuZGVmIFNUQV9XU0NfSU5DTFVERUQKKyN1bmRlZiBXU0NfSU5DTFVERUQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZiBkZWZpbmVkKEFQX1dTQ19JTkNMVURFRCkgfHwgZGVmaW5lZChTVEFfV1NDX0lOQ0xVREVEKQorI2RlZmluZSBXU0NfSU5DTFVERUQKKyNlbmRpZgorCisKKworCisKKy8vI2RlZmluZSBEQkcJCTEKKworLy8jZGVmaW5lIERCR19ESUFHTk9TRQkJMQorCisjaWYgZGVmaW5lZChDT05GSUdfQVBfU1VQUE9SVCkgJiYgZGVmaW5lZChDT05GSUdfU1RBX1NVUFBPUlQpCisjZGVmaW5lIElGX0RFVl9DT05GSUdfT1BNT0RFX09OX0FQKF9wQWQpCWlmKF9wQWQtPk9wTW9kZSA9PSBPUE1PREVfQVApCisjZGVmaW5lIElGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShfcEFkKQlpZihfcEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKyNlbHNlCisjZGVmaW5lIElGX0RFVl9DT05GSUdfT1BNT0RFX09OX0FQKF9wQWQpCisjZGVmaW5lIElGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShfcEFkKQorI2VuZGlmCisKKyNkZWZpbmUgVklSVFVBTF9JRl9JTkMoX19wQWQpICgoX19wQWQpLT5WaXJ0dWFsSWZDbnQrKykKKyNkZWZpbmUgVklSVFVBTF9JRl9ERUMoX19wQWQpICgoX19wQWQpLT5WaXJ0dWFsSWZDbnQtLSkKKyNkZWZpbmUgVklSVFVBTF9JRl9OVU0oX19wQWQpICgoX19wQWQpLT5WaXJ0dWFsSWZDbnQpCisKKyNpZmRlZiBSVDI4NzAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRoZSBUWF9CVUZGRVIgc3RydWN0dXJlIGZvcm1zIHRoZSB0cmFuc21pdHRlZCBVU0IgcGFja2V0IHRvIHRoZSBkZXZpY2UKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3R5cGVkZWYgc3RydWN0IF9fVFhfQlVGRkVSeworCXVuaW9uCXsKKwkJVUNIQVIJCQlXaXJlbGVzc1BhY2tldFtUWF9CVUZGRVJfTk9STVNJWkVdOworCQlIRUFERVJfODAyXzExCU51bGxGcmFtZTsKKwkJUFNQT0xMX0ZSQU1FCVBzUG9sbFBhY2tldDsKKwkJUlRTX0ZSQU1FCQlSVFNGcmFtZTsKKwl9ZmllbGQ7CisJVUNIQVIJCQlBZ2dyZWdhdGlvbls0XTsgIC8vQnVmZmVyIGZvciBzYXZlIEFnZ3JlZ2F0aW9uIHNpemUuCit9IFRYX0JVRkZFUiwgKlBUWF9CVUZGRVI7CisKK3R5cGVkZWYgc3RydWN0IF9fSFRUWF9CVUZGRVJ7CisJdW5pb24JeworCQlVQ0hBUgkJCVdpcmVsZXNzUGFja2V0W01BWF9UWEJVTEtfU0laRV07CisJCUhFQURFUl84MDJfMTEJTnVsbEZyYW1lOworCQlQU1BPTExfRlJBTUUJUHNQb2xsUGFja2V0OworCQlSVFNfRlJBTUUJCVJUU0ZyYW1lOworCX1maWVsZDsKKwlVQ0hBUgkJCUFnZ3JlZ2F0aW9uWzRdOyAgLy9CdWZmZXIgZm9yIHNhdmUgQWdncmVnYXRpb24gc2l6ZS4KK30gSFRUWF9CVUZGRVIsICpQSFRUWF9CVUZGRVI7CisKKworLy8gdXNlZCB0byB0cmFjayBkcml2ZXItZ2VuZXJhdGVkIHdyaXRlIGlycHMKK3R5cGVkZWYgc3RydWN0IF9UWF9DT05URVhUCit7CisJUFZPSUQJCQlwQWQ7CQkvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQorCVBVUkIJCQlwVXJiOwkJCS8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCisJUElSUAkJCXBJcnA7CQkJLy91c2VkIHRvIGNhbmNlbCBwZW5kaW5nIGJ1bGsgb3V0LgorCQkJCQkJCQkJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlQVFhfQlVGRkVSCQlUcmFuc2ZlckJ1ZmZlcjsJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlVTE9ORwkJCUJ1bGtPdXRTaXplOworCVVDSEFSCQkJQnVsa091dFBpcGVJZDsKKwlVQ0hBUgkJCVNlbGZJZHg7CisJQk9PTEVBTgkJCUluVXNlOworCUJPT0xFQU4JCQliV2FpdGluZ0J1bGtPdXQ7IC8vIGF0IGxlYXN0IG9uZSBwYWNrZXQgaXMgaW4gdGhpcyBUeENvbnRleHQsIHJlYWR5IGZvciBtYWtpbmcgSVJQIGFueXRpbWUuCisJQk9PTEVBTgkJCWJGdWxsRm9yQnVsa091dDsgLy8gYWxsIHR4IGJ1ZmZlciBhcmUgZnVsbCAsIHNvIHdhaXRpbmcgZm9yIHR4IGJ1bGtvdXQuCisJQk9PTEVBTgkJCUlSUFBlbmRpbmc7CisJQk9PTEVBTgkJCUxhc3RPbmU7CisJQk9PTEVBTgkJCWJBZ2dyZWdhdGlibGU7CisJVUNIQVIJCQlIZWFkZXJfODAyXzNbTEVOR1RIXzgwMl8zXTsKKwlVQ0hBUgkJCVJzdlsyXTsKKwlVTE9ORwkJCURhdGFPZmZzZXQ7CisJVUlOVAkJCVR4UmF0ZTsKKwlkbWFfYWRkcl90CQlkYXRhX2RtYTsJCS8vIHVyYiBkbWEgb24gbGludXgKKworfQlUWF9DT05URVhULCAqUFRYX0NPTlRFWFQsICoqUFBUWF9DT05URVhUOworCisKKy8vIHVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCB3cml0ZSBpcnBzCit0eXBlZGVmIHN0cnVjdCBfSFRfVFhfQ09OVEVYVAoreworCVBWT0lECQkJcEFkOwkJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlQVVJCCQkJcFVyYjsJCQkvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQorCVBJUlAJCQlwSXJwOwkJCS8vdXNlZCB0byBjYW5jZWwgcGVuZGluZyBidWxrIG91dC4KKwkJCQkJCQkJCS8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCisJUEhUVFhfQlVGRkVSCVRyYW5zZmVyQnVmZmVyOwkvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQorCVVMT05HCQkJQnVsa091dFNpemU7CS8vIEluZGljYXRlIHRoZSB0b3RhbCBidWxrLW91dCBzaXplIGluIGJ5dGVzIGluIG9uZSBidWxrLXRyYW5zbWlzc2lvbgorCVVDSEFSCQkJQnVsa091dFBpcGVJZDsKKwlCT09MRUFOCQkJSVJQUGVuZGluZzsKKwlCT09MRUFOCQkJTGFzdE9uZTsKKwlCT09MRUFOCQkJYkN1cldyaXRpbmc7CisJQk9PTEVBTgkJCWJSaW5nRW1wdHk7CisJQk9PTEVBTgkJCWJDb3B5U2F2ZVBhZDsKKwlVQ0hBUgkJCVNhdmVkUGFkWzhdOworCVVDSEFSCQkJSGVhZGVyXzgwMl8zW0xFTkdUSF84MDJfM107CisJVUxPTkcJCQlDdXJXcml0ZVBvc2l0aW9uOwkJLy8gSW5kaWNhdGUgdGhlIGJ1ZmZlciBvZmZzZXQgd2hpY2ggcGFja2V0IHdpbGwgYmUgaW5zZXJ0ZWQgc3RhcnQgZnJvbS4KKwlVTE9ORwkJCUN1cldyaXRlUmVhbFBvczsJCS8vIEluZGljYXRlIHRoZSBidWZmZXIgb2Zmc2V0IHdoaWNoIHBhY2tldCBub3cgYXJlIHdyaXRpbmcgdG8uCisJVUxPTkcJCQlOZXh0QnVsa091dFBvc2l0aW9uOwkvLyBJbmRpY2F0ZSB0aGUgYnVmZmVyIHN0YXJ0IG9mZnNldCBvZiBhIGJ1bGstdHJhbnNtaXNzaW9uCisJVUxPTkcJCQlFTmV4dEJ1bGtPdXRQb3NpdGlvbjsJLy8gSW5kaWNhdGUgdGhlIGJ1ZmZlciBlbmQgb2Zmc2V0IG9mIGEgYnVsay10cmFuc21pc3Npb24KKwlVSU5UCQkJVHhSYXRlOworCWRtYV9hZGRyX3QJCWRhdGFfZG1hOwkJLy8gdXJiIGRtYSBvbiBsaW51eAorfQlIVF9UWF9DT05URVhULCAqUEhUX1RYX0NPTlRFWFQsICoqUFBIVF9UWF9DT05URVhUOworCisKKy8vCisvLyBTdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiByZWNlaXZlIHBhY2tldHMgYW5kIGJ1ZmZlcnMgdG8gaW5kaWNhdGUKKy8vIHJlY2VpdmUgZGF0YSB0byB0aGUgcHJvdG9jb2wuCisvLwordHlwZWRlZiBzdHJ1Y3QgX1JYX0NPTlRFWFQKK3sKKwlQVUNIQVIJCQkJVHJhbnNmZXJCdWZmZXI7CisJUFZPSUQJCQkJcEFkOworCVBJUlAJCQkJcElycDsvL3VzZWQgdG8gY2FuY2VsIHBlbmRpbmcgYnVsayBpbi4KKwlQVVJCCQkJCXBVcmI7CisJLy9UaGVzZSAyIEJvb2xlYW4gc2hvdWxkbid0IGJvdGggYmUgMSBhdCB0aGUgc2FtZSB0aW1lLgorCVVMT05HCQkJCUJ1bGtJbk9mZnNldDsJLy8gbnVtYmVyIG9mIHBhY2tldHMgd2FpdGluZyBmb3IgcmVvcmRlcmluZyAuCisvLwlCT09MRUFOCQkJCVJlb3JkZXJJblVzZTsJLy8gQXQgbGVhc3Qgb25lIHBhY2tldCBpbiB0aGlzIGJ1ZmZlciBhcmUgaW4gcmVvcmRlcmluZyBidWZmZXIgYW5kIHdhaXQgZm9yIHJlY2VpdmUgaW5kaWNhdGlvbgorCUJPT0xFQU4JCQkJYlJ4SGFuZGxpbmc7CS8vIE5vdGlmeSB0aGlzIHBhY2tldCBpcyBiZWluZyBwcm9jZXNzIG5vdy4KKwlCT09MRUFOCQkJCUluVXNlOwkJCS8vIFVTQiBIYXJkd2FyZSBPY2N1cGllZC4gV2FpdCBmb3IgVVNCIEhXIHRvIHB1dCBwYWNrZXQuCisJQk9PTEVBTgkJCQlSZWFkYWJsZTsJCS8vIFJlY2VpdmUgQ29tcGxldGUgYmFjay4gT0sgZm9yIGRyaXZlciB0byBpbmRpY2F0ZSByZWNlaXZpbmcgcGFja2V0LgorCUJPT0xFQU4JCQkJSVJQUGVuZGluZzsJCS8vIFRPRE86IFRvIGJlIHJlbW92ZWQKKwlhdG9taWNfdAkJCUlycExvY2s7CisJTkRJU19TUElOX0xPQ0sJCVJ4Q29udGV4dExvY2s7CisJZG1hX2FkZHJfdAkJCWRhdGFfZG1hOwkJLy8gdXJiIGRtYSBvbiBsaW51eAorfQlSWF9DT05URVhULCAqUFJYX0NPTlRFWFQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworLy8KKy8vICBORElTIFZlcnNpb24gZGVmaW5pdGlvbnMKKy8vCisjaWZkZWYgIE5ESVM1MF9NSU5JUE9SVAorI2RlZmluZSBSVE1QX05ESVNfTUFKT1JfVkVSU0lPTiAgICAgNQorI2RlZmluZSBSVE1QX05ESVNfTUlOT1JfVkVSU0lPTiAgICAgMAorI2VuZGlmCisKKyNpZmRlZiAgTkRJUzUxX01JTklQT1JUCisjZGVmaW5lIFJUTVBfTkRJU19NQUpPUl9WRVJTSU9OICAgICA1CisjZGVmaW5lIFJUTVBfTkRJU19NSU5PUl9WRVJTSU9OICAgICAxCisjZW5kaWYKKworZXh0ZXJuICBjaGFyICAgIE5JQ19WRU5ET1JfREVTQ1tdOworZXh0ZXJuICBpbnQgICAgIE5JQ19WRU5ET1JfREVTQ19MRU47CisKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIFNOQVBfQUlST05FVFtdOworZXh0ZXJuICB1bnNpZ25lZCBjaGFyICAgQ2lwaGVyU3VpdGVDaXNjb0NDS01bXTsKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIENpcGhlclN1aXRlQ2lzY29DQ0tNTGVuOworZXh0ZXJuCXVuc2lnbmVkIGNoYXIJQ2lwaGVyU3VpdGVDaXNjb0NDS00yNFtdOworZXh0ZXJuCXVuc2lnbmVkIGNoYXIJQ2lwaGVyU3VpdGVDaXNjb0NDS00yNExlbjsKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIENpcGhlclN1aXRlQ0NYVGtpcFtdOworZXh0ZXJuICB1bnNpZ25lZCBjaGFyICAgQ2lwaGVyU3VpdGVDQ1hUa2lwTGVuOworZXh0ZXJuICB1bnNpZ25lZCBjaGFyICAgQ0lTQ09fT1VJW107CitleHRlcm4gIFVDSEFSCUJhU2l6ZUFycmF5WzRdOworCitleHRlcm4gVUNIQVIgQlJPQURDQVNUX0FERFJbTUFDX0FERFJfTEVOXTsKK2V4dGVybiBVQ0hBUiBNVUxUSUNBU1RfQUREUltNQUNfQUREUl9MRU5dOworZXh0ZXJuIFVDSEFSIFpFUk9fTUFDX0FERFJbTUFDX0FERFJfTEVOXTsKK2V4dGVybiBVTE9ORyBCSVQzMlszMl07CitleHRlcm4gVUNIQVIgQklUOFs4XTsKK2V4dGVybiBjaGFyKiBDaXBoZXJOYW1lW107CitleHRlcm4gY2hhciogTUNTVG9NYnBzW107CitleHRlcm4gVUNIQVIJIFJ4d2lNQ1NUb09mZG1SYXRlWzEyXTsKK2V4dGVybiBVQ0hBUiBTTkFQXzgwMl8xSFs2XTsKK2V4dGVybiBVQ0hBUiBTTkFQX0JSSURHRV9UVU5ORUxbNl07CitleHRlcm4gVUNIQVIgU05BUF9BSVJPTkVUWzhdOworZXh0ZXJuIFVDSEFSIENLSVBfTExDX1NOQVBbOF07CitleHRlcm4gVUNIQVIgRUFQT0xfTExDX1NOQVBbOF07CitleHRlcm4gVUNIQVIgRUFQT0xbMl07CitleHRlcm4gVUNIQVIgSVBYWzJdOworZXh0ZXJuIFVDSEFSIEFQUExFX1RBTEtbMl07CitleHRlcm4gVUNIQVIgUmF0ZUlkVG9QbGNwU2lnbmFsWzEyXTsgLy8gc2VlIElFRUU4MDIuMTFhLTE5OTkgcC4xNAorZXh0ZXJuIFVDSEFSCSBPZmRtUmF0ZVRvUnh3aU1DU1tdOworZXh0ZXJuIFVDSEFSIE9mZG1TaWduYWxUb1JhdGVJZFsxNl0gOworZXh0ZXJuIFVDSEFSIGRlZmF1bHRfY3dtaW5bNF07CitleHRlcm4gVUNIQVIgZGVmYXVsdF9jd21heFs0XTsKK2V4dGVybiBVQ0hBUiBkZWZhdWx0X3N0YV9haWZzbls0XTsKK2V4dGVybiBVQ0hBUiBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5WzhdOworCitleHRlcm4gVVNIT1JUIFJhdGVVcFBFUltdOworZXh0ZXJuIFVTSE9SVCBSYXRlRG93blBFUltdOworZXh0ZXJuIFVDSEFSICBQaHkxMUJOZXh0UmF0ZURvd253YXJkW107CitleHRlcm4gVUNIQVIgIFBoeTExQk5leHRSYXRlVXB3YXJkW107CitleHRlcm4gVUNIQVIgIFBoeTExQkdOZXh0UmF0ZURvd253YXJkW107CitleHRlcm4gVUNIQVIgIFBoeTExQkdOZXh0UmF0ZVVwd2FyZFtdOworZXh0ZXJuIFVDSEFSICBQaHkxMUFOZXh0UmF0ZURvd253YXJkW107CitleHRlcm4gVUNIQVIgIFBoeTExQU5leHRSYXRlVXB3YXJkW107CitleHRlcm4gQ0hBUiAgIFJzc2lTYWZlTGV2ZWxGb3JUeFJhdGVbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZUlkVG9NYnBzW107CitleHRlcm4gVVNIT1JUIFJhdGVJZFRvNTAwS2Jwc1tdOworCitleHRlcm4gVUNIQVIgIENpcGhlclN1aXRlV3BhTm9uZVRraXBbXTsKK2V4dGVybiBVQ0hBUiAgQ2lwaGVyU3VpdGVXcGFOb25lVGtpcExlbjsKKworZXh0ZXJuIFVDSEFSICBDaXBoZXJTdWl0ZVdwYU5vbmVBZXNbXTsKK2V4dGVybiBVQ0hBUiAgQ2lwaGVyU3VpdGVXcGFOb25lQWVzTGVuOworCitleHRlcm4gVUNIQVIgIFNzaWRJZTsKK2V4dGVybiBVQ0hBUiAgU3VwUmF0ZUllOworZXh0ZXJuIFVDSEFSICBFeHRSYXRlSWU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK2V4dGVybiBVQ0hBUiAgSHRDYXBJZTsKK2V4dGVybiBVQ0hBUiAgQWRkSHRJbmZvSWU7CitleHRlcm4gVUNIQVIgIE5ld0V4dENoYW5JZTsKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitleHRlcm4gVUNIQVIgIEV4dEh0Q2FwSWU7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitleHRlcm4gVUNIQVIgIEVycEllOworZXh0ZXJuIFVDSEFSICBEc0llOworZXh0ZXJuIFVDSEFSICBUaW1JZTsKK2V4dGVybiBVQ0hBUiAgV3BhSWU7CitleHRlcm4gVUNIQVIgIFdwYTJJZTsKK2V4dGVybiBVQ0hBUiAgSWJzc0llOworZXh0ZXJuIFVDSEFSICBDY3gySWU7CitleHRlcm4gVUNIQVIgIFdhcGlJZTsKKworZXh0ZXJuIFVDSEFSICBXUEFfT1VJW107CitleHRlcm4gVUNIQVIgIFJTTl9PVUlbXTsKK2V4dGVybiBVQ0hBUiAgV0FQSV9PVUlbXTsKK2V4dGVybiBVQ0hBUiAgV01FX0lORk9fRUxFTVtdOworZXh0ZXJuIFVDSEFSICBXTUVfUEFSTV9FTEVNW107CitleHRlcm4gVUNIQVIgIENjeDJRb3NJbmZvW107CitleHRlcm4gVUNIQVIgIENjeDJJZUluZm9bXTsKK2V4dGVybiBVQ0hBUiAgUkFMSU5LX09VSVtdOworZXh0ZXJuIFVDSEFSICBQb3dlckNvbnN0cmFpbnRJRVtdOworCisKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlW107CitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExQltdOworZXh0ZXJuIFVDSEFSICBSYXRlU3dpdGNoVGFibGUxMUdbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFCR1tdOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExQkdOMVNbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFCR04yU1tdOworZXh0ZXJuIFVDSEFSICBSYXRlU3dpdGNoVGFibGUxMUJHTjJTRm9yQUJhbmRbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFOMVNbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFOMlNbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFtdOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitleHRlcm4gVUNIQVIgIFBSRV9OX0hUX09VSVtdOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjZGVmaW5lCU1BWFNFUQkJKDB4RkZGKQorCisjaWZkZWYgUkFMSU5LX0FURQordHlwZWRlZglzdHJ1Y3QgX0FURV9JTkZPIHsKKwlVQ0hBUglNb2RlOworCUNIQVIJVHhQb3dlcjA7CisJQ0hBUglUeFBvd2VyMTsKKwlDSEFSICAgIFR4QW50ZW5uYVNlbDsKKwlDSEFSICAgIFJ4QW50ZW5uYVNlbDsKKwlUWFdJX1NUUlVDICBUeFdJOyAJICAvLyBUWFdJCisJVVNIT1JUCVFJRDsKKwlVQ0hBUglBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSCUFkZHIyW01BQ19BRERSX0xFTl07CisJVUNIQVIJQWRkcjNbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUglDaGFubmVsOworCVVJTlQzMglUeExlbmd0aDsKKwlVSU5UMzIJVHhDb3VudDsKKwlVSU5UMzIJVHhEb25lQ291bnQ7IC8vIFR4IERNQSBEb25lCisJVUlOVDMyCVJGRnJlcU9mZnNldDsKKwlCT09MRUFOCWJSeEZlcjsKKwlCT09MRUFOCWJRQVR4U3RhcnQ7IC8vIEhhdmUgY29tcGlsZWQgUUEgaW4gYW5kIHVzZSBpdCB0byBBVEUgdHguCisJQk9PTEVBTgliUUFSeFN0YXJ0OwkvLyBIYXZlIGNvbXBpbGVkIFFBIGluIGFuZCB1c2UgaXQgdG8gQVRFIHJ4LgorCVVJTlQzMglSeFRvdGFsQ250OworCVVJTlQzMglSeENudFBlclNlYzsKKworCUNIQVIJTGFzdFNOUjA7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgU05SCisJQ0hBUiAgICBMYXN0U05SMTsgICAgICAgICAgICAgLy8gbGFzdCByZWNlaXZlZCBTTlIgZm9yIDJuZCAgYW50ZW5uYQorCUNIQVIgICAgTGFzdFJzc2kwOyAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSQorCUNIQVIgICAgTGFzdFJzc2kxOyAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSSBmb3IgMm5kICBhbnRlbm5hCisJQ0hBUiAgICBMYXN0UnNzaTI7ICAgICAgICAgICAgLy8gbGFzdCByZWNlaXZlZCBSU1NJIGZvciAzcmQgIGFudGVubmEKKwlDSEFSICAgIEF2Z1Jzc2kwOyAgICAgICAgICAgICAvLyBsYXN0IDggZnJhbWVzJyBhdmVyYWdlIFJTU0kKKwlDSEFSICAgIEF2Z1Jzc2kxOyAgICAgICAgICAgICAvLyBsYXN0IDggZnJhbWVzJyBhdmVyYWdlIFJTU0kKKwlDSEFSICAgIEF2Z1Jzc2kyOyAgICAgICAgICAgICAvLyBsYXN0IDggZnJhbWVzJyBhdmVyYWdlIFJTU0kKKwlTSE9SVCAgIEF2Z1Jzc2kwWDg7ICAgICAgICAgICAvLyBzdW0gb2YgbGFzdCA4IGZyYW1lcycgUlNTSQorCVNIT1JUICAgQXZnUnNzaTFYODsgICAgICAgICAgIC8vIHN1bSBvZiBsYXN0IDggZnJhbWVzJyBSU1NJCisJU0hPUlQgICBBdmdSc3NpMlg4OyAgICAgICAgICAgLy8gc3VtIG9mIGxhc3QgOCBmcmFtZXMnIFJTU0kKKworCVVJTlQzMglOdW1PZkF2Z1Jzc2lTYW1wbGU7CisKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCS8vIFR4IGZyYW1lCisjaWZkZWYgUlQyODcwCisJLyogbm90IHVzZWQgaW4gUlQyODYwICovCisJVFhJTkZPX1NUUlVDCQlUeEluZm87IC8vIFR4SW5mbworI2VuZGlmIC8vIFJUMjg3MCAvLworCVVTSE9SVAkJSExlbjsgLy8gSGVhZGVyIExlbmd0aAorCVVTSE9SVAkJUExlbjsgLy8gUGF0dGVybiBMZW5ndGgKKwlVQ0hBUiAJCUhlYWRlclszMl07IC8vIEhlYWRlciBidWZmZXIKKwlVQ0hBUgkJUGF0dGVyblszMl07IC8vIFBhdHRlcm4gYnVmZmVyCisJVVNIT1JUCQlETGVuOyAvLyBEYXRhIExlbmd0aAorCVVTSE9SVAkJc2VxOworCVVJTlQzMgkJQ0lEOworCXBpZF90IAkJQXRlUGlkOworCS8vIGNvdW50ZXJzCisJVUlOVDMyCQlVMk07CisJVUlOVDMyCQlPdGhlckRhdGE7CisJVUlOVDMyCQlCZWFjb247CisJVUlOVDMyCQlPdGhlckNvdW50OworCVVJTlQzMgkJVHhBYzA7CisJVUlOVDMyCQlUeEFjMTsKKwlVSU5UMzIJCVR4QWMyOworCVVJTlQzMgkJVHhBYzM7CisJVUlOVDMyCQlUeEhDQ0E7CisJVUlOVDMyCQlUeE1nbXQ7CisJVUlOVDMyCQlSU1NJMDsKKwlVSU5UMzIJCVJTU0kxOworCVVJTlQzMgkJUlNTSTI7CisJVUlOVDMyCQlTTlIwOworCVVJTlQzMgkJU05SMTsKKwkvLyBjb250cm9sCisJLy9VSU5UMzIJCVJlcGVhdDsgLy8gVHggQ3B1IGNvdW50CisJVUNIQVIJCVR4U3RhdHVzOyAvLyB0YXNrIFR4IHN0YXR1cyAvLyAwIC0tPiB0YXNrIGlzIGlkbGUsIDEgLS0+IHRhc2sgaXMgcnVubmluZworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCit9CUFURV9JTkZPLCAqUEFURV9JTkZPOworCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKK3N0cnVjdCBhdGVfcmFjZmdoZHIgeworIAlVSU5UMzIJCW1hZ2ljX25vOworCVVTSE9SVAkJY29tbWFuZF90eXBlOworCVVTSE9SVAkJY29tbWFuZF9pZDsKKwlVU0hPUlQJCWxlbmd0aDsKKwlVU0hPUlQJCXNlcXVlbmNlOworCVVTSE9SVAkJc3RhdHVzOworCVVDSEFSCQlkYXRhWzIwNDZdOworfSAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3N0cnVjdCByZW9yZGVyaW5nX21wZHUKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1CSpuZXh0OworCVBORElTX1BBQ0tFVAkJCXBQYWNrZXQ7CQkvKiBjb3ZlcnRlZCB0byA4MDIuMyBmcmFtZSAqLworCWludAkJCQkJCVNlcXVlbmNlOwkJLyogc2VxdWVuY2UgbnVtYmVyIG9mIE1QRFUgKi8KKwlCT09MRUFOCQkJCQliQU1TRFU7Cit9OworCitzdHJ1Y3QgcmVvcmRlcmluZ19saXN0Cit7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbmV4dDsKKwlpbnQgCXFsZW47Cit9OworCitzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1X3Bvb2wKK3sKKwlQVk9JRAkJCQkJbWVtOworCU5ESVNfU1BJTl9MT0NLCQkJbG9jazsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19saXN0IAlmcmVlbGlzdDsKK307CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK3R5cGVkZWYgc3RydWN0IAlfUlNTSV9TQU1QTEUgeworCUNIQVIJCQlMYXN0UnNzaTA7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSQorCUNIQVIJCQlMYXN0UnNzaTE7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSQorCUNIQVIJCQlMYXN0UnNzaTI7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSQorCUNIQVIJCQlBdmdSc3NpMDsKKwlDSEFSCQkJQXZnUnNzaTE7CisJQ0hBUgkJCUF2Z1Jzc2kyOworCVNIT1JUCQkJQXZnUnNzaTBYODsKKwlTSE9SVAkJCUF2Z1Jzc2kxWDg7CisJU0hPUlQJCQlBdmdSc3NpMlg4OworfSBSU1NJX1NBTVBMRTsKKworLy8KKy8vICBRdWV1ZSBzdHJ1Y3R1cmUgYW5kIG1hY3JvcworLy8KK3R5cGVkZWYgc3RydWN0ICBfUVVFVUVfRU5UUlkgICAgeworCXN0cnVjdCBfUVVFVUVfRU5UUlkgICAgICpOZXh0OworfSAgIFFVRVVFX0VOVFJZLCAqUFFVRVVFX0VOVFJZOworCisvLyBRdWV1ZSBzdHJ1Y3R1cmUKK3R5cGVkZWYgc3RydWN0ICBfUVVFVUVfSEVBREVSICAgeworCVBRVUVVRV9FTlRSWSAgICBIZWFkOworCVBRVUVVRV9FTlRSWSAgICBUYWlsOworCVVMT05HICAgICAgICAgICBOdW1iZXI7Cit9ICAgUVVFVUVfSEVBREVSLCAqUFFVRVVFX0hFQURFUjsKKworI2RlZmluZSBJbml0aWFsaXplUXVldWVIZWFkZXIoUXVldWVIZWFkZXIpICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoUXVldWVIZWFkZXIpLT5IZWFkID0gKFF1ZXVlSGVhZGVyKS0+VGFpbCA9IE5VTEw7ICAgXAorCShRdWV1ZUhlYWRlciktPk51bWJlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgUmVtb3ZlSGVhZFF1ZXVlKFF1ZXVlSGVhZGVyKSAgICAgICAgICAgICAgICBcCisoUXVldWVIZWFkZXIpLT5IZWFkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlQUVVFVUVfRU5UUlkgcE5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKChRdWV1ZUhlYWRlciktPkhlYWQgIT0gTlVMTCkJCQkJXAorCXsJCQkJCQkJCQkJCQlcCisJCXBOZXh0ID0gKFF1ZXVlSGVhZGVyKS0+SGVhZC0+TmV4dDsgICAgICAgICAgXAorCQkoUXVldWVIZWFkZXIpLT5IZWFkID0gcE5leHQ7ICAgICAgICAgICAgICAgIFwKKwkJaWYgKHBOZXh0ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkoUXVldWVIZWFkZXIpLT5UYWlsID0gTlVMTDsgICAgICAgICAgICAgXAorCQkoUXVldWVIZWFkZXIpLT5OdW1iZXItLTsgICAgICAgICAgICAgICAgICAgIFwKKwl9CQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIEluc2VydEhlYWRRdWV1ZShRdWV1ZUhlYWRlciwgUXVldWVFbnRyeSkgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSgoUFFVRVVFX0VOVFJZKVF1ZXVlRW50cnkpLT5OZXh0ID0gKFF1ZXVlSGVhZGVyKS0+SGVhZDsgXAorCQkoUXVldWVIZWFkZXIpLT5IZWFkID0gKFBRVUVVRV9FTlRSWSkoUXVldWVFbnRyeSk7ICAgICAgIFwKKwkJaWYgKChRdWV1ZUhlYWRlciktPlRhaWwgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkoUXVldWVIZWFkZXIpLT5UYWlsID0gKFBRVUVVRV9FTlRSWSkoUXVldWVFbnRyeSk7ICAgXAorCQkoUXVldWVIZWFkZXIpLT5OdW1iZXIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBJbnNlcnRUYWlsUXVldWUoUXVldWVIZWFkZXIsIFF1ZXVlRW50cnkpICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKChQUVVFVUVfRU5UUlkpUXVldWVFbnRyeSktPk5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgXAorCWlmICgoUXVldWVIZWFkZXIpLT5UYWlsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKFF1ZXVlSGVhZGVyKS0+VGFpbC0+TmV4dCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkpOyBcCisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkoUXVldWVIZWFkZXIpLT5IZWFkID0gKFBRVUVVRV9FTlRSWSkoUXVldWVFbnRyeSk7ICAgICAgIFwKKwkoUXVldWVIZWFkZXIpLT5UYWlsID0gKFBRVUVVRV9FTlRSWSkoUXVldWVFbnRyeSk7ICAgICAgICAgICBcCisJKFF1ZXVlSGVhZGVyKS0+TnVtYmVyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvLworLy8gIE1hY3JvcyBmb3IgZmxhZyBhbmQgcmVmIGNvdW50IG9wZXJhdGlvbnMKKy8vCisjZGVmaW5lIFJUTVBfU0VUX0ZMQUcoX00sIF9GKSAgICAgICAoKF9NKS0+RmxhZ3MgfD0gKF9GKSkKKyNkZWZpbmUgUlRNUF9DTEVBUl9GTEFHKF9NLCBfRikgICAgICgoX00pLT5GbGFncyAmPSB+KF9GKSkKKyNkZWZpbmUgUlRNUF9DTEVBUl9GTEFHUyhfTSkgICAgICAgICgoX00pLT5GbGFncyA9IDApCisjZGVmaW5lIFJUTVBfVEVTVF9GTEFHKF9NLCBfRikgICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgIT0gMCkKKyNkZWZpbmUgUlRNUF9URVNUX0ZMQUdTKF9NLCBfRikgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSA9PSAoX0YpKQorCisjZGVmaW5lIE9QU1RBVFVTX1NFVF9GTEFHKF9wQWQsIF9GKSAgICAgKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgfD0gKF9GKSkKKyNkZWZpbmUgT1BTVEFUVVNfQ0xFQVJfRkxBRyhfcEFkLCBfRikgICAoKF9wQWQpLT5Db21tb25DZmcuT3BTdGF0dXNGbGFncyAmPSB+KF9GKSkKKyNkZWZpbmUgT1BTVEFUVVNfVEVTVF9GTEFHKF9wQWQsIF9GKSAgICAoKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgJiAoX0YpKSAhPSAwKQorCisjZGVmaW5lIENMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoX3BFbnRyeSxfRikgICAgICAoKF9wRW50cnkpLT5DbGllbnRTdGF0dXNGbGFncyB8PSAoX0YpKQorI2RlZmluZSBDTElFTlRfU1RBVFVTX0NMRUFSX0ZMQUcoX3BFbnRyeSxfRikgICAgKChfcEVudHJ5KS0+Q2xpZW50U3RhdHVzRmxhZ3MgJj0gfihfRikpCisjZGVmaW5lIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKF9wRW50cnksX0YpICAgICAoKChfcEVudHJ5KS0+Q2xpZW50U3RhdHVzRmxhZ3MgJiAoX0YpKSAhPSAwKQorCisjZGVmaW5lIFJYX0ZJTFRFUl9TRVRfRkxBRyhfcEFkLCBfRikgICAgKChfcEFkKS0+Q29tbW9uQ2ZnLlBhY2tldEZpbHRlciB8PSAoX0YpKQorI2RlZmluZSBSWF9GSUxURVJfQ0xFQVJfRkxBRyhfcEFkLCBfRikgICgoX3BBZCktPkNvbW1vbkNmZy5QYWNrZXRGaWx0ZXIgJj0gfihfRikpCisjZGVmaW5lIFJYX0ZJTFRFUl9URVNUX0ZMQUcoX3BBZCwgX0YpICAgKCgoX3BBZCktPkNvbW1vbkNmZy5QYWNrZXRGaWx0ZXIgJiAoX0YpKSAhPSAwKQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZGVmaW5lIFNUQV9OT19TRUNVUklUWV9PTihfcCkgICAgICAgICAgKF9wLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpCisjZGVmaW5lIFNUQV9XRVBfT04oX3ApICAgICAgICAgICAgICAgICAgKF9wLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpCisjZGVmaW5lIFNUQV9US0lQX09OKF9wKSAgICAgICAgICAgICAgICAgKF9wLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisjZGVmaW5lIFNUQV9BRVNfT04oX3ApICAgICAgICAgICAgICAgICAgKF9wLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisKKyNkZWZpbmUgU1RBX1RHTl9XSUZJX09OKF9wKSAgICAgICAgICAgICAoX3AtPlN0YUNmZy5iVEduV2lmaVRlc3QgPT0gVFJVRSkKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2RlZmluZSBDS0lQX0tQX09OKF9wKQkJCQkoKCgoX3ApLT5TdGFDZmcuQ2tpcEZsYWcpICYgMHgxMCkgJiYgKChfcCktPlN0YUNmZy5iQ2tpcENtaWNPbiA9PSBUUlVFKSkKKyNkZWZpbmUgQ0tJUF9DTUlDX09OKF9wKQkJCSgoKChfcCktPlN0YUNmZy5Da2lwRmxhZykgJiAweDA4KSAmJiAoKF9wKS0+U3RhQ2ZnLmJDa2lwQ21pY09uID09IFRSVUUpKQorCisKKyNkZWZpbmUgSU5DX1JJTkdfSU5ERVgoX2lkeCwgX1JpbmdTaXplKSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChfaWR4KSA9IChfaWR4KzEpICUgKF9SaW5nU2l6ZSk7ICAgICAgIFwKK30KKworLy8gV2Ugd2lsbCBoYXZlIGEgY29zdCBkb3duIHZlcnNpb24gd2hpY2ggbWFjIHZlcnNpb24gaXMgMHgzMDkweHh4eAorI2RlZmluZSBJU19SVDMwOTAoX3BBZCkJCQkJKCgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmZmMDAwMCkgPT0gMHgzMDcxMDAwMCkgfHwgKCgoX3BBZCktPk1BQ1ZlcnNpb24gJiAweGZmZmYwMDAwKSA9PSAweDMwOTAwMDAwKSkKKworI2RlZmluZSBJU19SVDMwNzAoX3BBZCkJCQkJKCgoX3BBZCktPk1BQ1ZlcnNpb24gJiAweGZmZmYwMDAwKSA9PSAweDMwNzAwMDAwKQorI2RlZmluZSBJU19SVDMwNzEoX3BBZCkJCQkJKCgoX3BBZCktPk1BQ1ZlcnNpb24gJiAweGZmZmYwMDAwKSA9PSAweDMwNzEwMDAwKQorI2RlZmluZSBJU19SVDIwNzAoX3BBZCkJCQkJKCgoX3BBZCktPlJmSWNUeXBlID09IFJGSUNfMjAyMCkgfHwgKChfcEFkKS0+RUZ1c2VUYWcgPT0gMHgyNykpCisKKyNkZWZpbmUgSVNfUlQzMHh4KF9wQWQpCQkJCSgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmYwMDAwMCkgPT0gMHgzMDcwMDAwMCkKKworI2RlZmluZSBSSU5HX1BBQ0tFVF9JTklUKF9UeFJpbmcsIF9pZHgpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1R4UmluZy0+Q2VsbFtfaWR4XS5wTmRpc1BhY2tldCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9UeFJpbmctPkNlbGxbX2lkeF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgVFhEVF9JTklUKF9UeEQpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJTmRpc1plcm9NZW1vcnkoX1R4RCwgVFhEX1NJWkUpOwlcCisJX1R4RC0+RE1BRE9ORSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvL1NldCBsYXN0IGRhdGEgc2VnbWVudAorI2RlZmluZSBSSU5HX1NFVF9MQVNURFMoX1R4RCwgX0lzU0QwKSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChfSXNTRDApIHtfVHhELT5MYXN0U2VjMCA9IDE7fSAgICAgXAorICAgIGVsc2Uge19UeEQtPkxhc3RTZWMxID0gMTt9ICAgICBcCit9CisKKy8vIEluY3JlYXNlIFR4VHNjIHZhbHVlIGZvciBuZXh0IHRyYW5zbWlzc2lvbgorLy8gVE9ETzoKKy8vIFdoZW4gaT09NiwgbWVhbnMgVFNDIGhhcyBkb25lIG9uZSBmdWxsIGN5Y2xlLCBkbyByZS1rZXlpbmcgc3R1ZmYgZm9sbG93IHNwZWNzCisvLyBTaG91bGQgc2VuZCBhIHNwZWNpYWwgZXZlbnQgbWljcm9zb2Z0IGRlZmluZWQgdG8gcmVxdWVzdCByZS1rZXkKKyNkZWZpbmUgSU5DX1RYX1RTQyhfdHNjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW50IGk9MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSAoKytfdHNjW2ldID09IDB4MCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGkgPT0gNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8gU3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1DU1NldCBpcyBjb3BpZWQgZnJvbSBBUCBiZWFjb24uICBEb24ndCBuZWVkIHRvIHVwZGF0ZSBoZXJlLgorI2RlZmluZSBDT1BZX0hUU0VUVElOR1NfRlJPTV9NTE1FX0FVWF9UT19BQ1RJVkVfQ0ZHKF9wQWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuQ2hhbm5lbFdpZHRoID0gX3BBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aDsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1pbW9QcyA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHM7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5HRiA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRjsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LlNob3J0R0lmb3IyMCA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjA7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5TaG9ydEdJZm9yNDAgPSBfcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwOyAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuVHhTVEJDID0gX3BBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlR4U1RCQzsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LlJ4U1RCQyA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkM7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5FeHRDaGFuT2Zmc2V0ID0gX3BBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQ7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5SZWNvbVdpZHRoID0gX3BBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGg7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5PcGVyYWlvbk1vZGUgPSBfcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZTsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk5vbkdmUHJlc2VudCA9IF9wQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50OyAgICAgIFwKKwlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUQ2FwYWJpbGl0eS5NQ1NTZXQsIChfcEFkKS0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0LCBzaXplb2YoVUNIQVIpICogMTYpO1wKK30KKworI2RlZmluZSBDT1BZX0FQX0hUU0VUVElOR1NfRlJPTV9CRUFDT04oX3BBZCwgX3BIdENhcGFiaWxpdHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUgPSAoVUNIQVIpKF9wSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQU1zZHVTaXplKTsJXAorCV9wQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1tcHNNb2RlPSAoVUNIQVIpKF9wSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uTWltb1BzKTsJXAorCV9wQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1heFJBbXBkdUZhY3RvciA9IChVQ0hBUikoX3BIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3IpOwlcCit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKy8vCisvLyBNQUNSTyBmb3IgMzItYml0IFBDSSByZWdpc3RlciByZWFkIC8gd3JpdGUKKy8vCisvLyBVc2FnZSA6IFJUTVBfSU9fUkVBRDMyKAorLy8gICAgICAgICAgICAgIFBSVE1QX0FEQVBURVIgcEFkLAorLy8gICAgICAgICAgICAgIFVMT05HIFJlZ2lzdGVyX09mZnNldCwKKy8vICAgICAgICAgICAgICBQVUxPTkcgIHBWYWx1ZSkKKy8vCisvLyAgICAgICAgIFJUTVBfSU9fV1JJVEUzMigKKy8vICAgICAgICAgICAgICBQUlRNUF9BREFQVEVSIHBBZCwKKy8vICAgICAgICAgICAgICBVTE9ORyBSZWdpc3Rlcl9PZmZzZXQsCisvLyAgICAgICAgICAgICAgVUxPTkcgVmFsdWUpCisvLworCisvLworLy8gQkJQICYgUkYgYXJlIHVzaW5nIGluZGlyZWN0IGFjY2Vzcy4gQmVmb3JlIHdyaXRlIGFueSB2YWx1ZSBpbnRvIGl0LgorLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgY29tbWFuZCBwZW5kaW5nIHZpYSBjaGVja2luZyBidXN5IGJpdC4KKy8vCisjZGVmaW5lIE1BWF9CVVNZX0NPVU5UICAxMDAgICAgICAgICAvLyBOdW1iZXIgb2YgcmV0cnkgYmVmb3JlIGZhaWxpbmcgYWNjZXNzIEJCUCAmIFJGIGluZGlyZWN0IHJlZ2lzdGVyCisvLworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIFJUTVBfUkZfSU9fV1JJVEUzMihfQSwgX1YpICAgICAgICAgICAgICAgICBSVFVTQldyaXRlUkZSZWdpc3RlcihfQSwgX1YpCisjZGVmaW5lIFJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikgICBSVFVTQlJlYWRCQlBSZWdpc3RlcihfQSwgX0ksIF9wVikKKyNkZWZpbmUgUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKSAgIFJUVVNCV3JpdGVCQlBSZWdpc3RlcihfQSwgX0ksIF9WKQorCisjZGVmaW5lIEJCUF9JT19XUklURThfQllfUkVHX0lEKF9BLCBfSSwgX1YpCQkJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKF9BLCBfSSwgX1YpCisjZGVmaW5lIEJCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgCQlSVFVTQlJlYWRCQlBSZWdpc3RlcihfQSwgX0ksIF9wVikKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIFJUMzB4eAorI2RlZmluZSBSVE1QX1JGX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikgICAgUlQzMHh4UmVhZFJGUmVnaXN0ZXIoX0EsIF9JLCBfcFYpCisjZGVmaW5lIFJUTVBfUkZfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKSAgICBSVDMweHhXcml0ZVJGUmVnaXN0ZXIoX0EsIF9JLCBfVikKKyNlbmRpZiAvLyBSVDMweHggLy8KKworI2RlZmluZSAgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKGNoLCBraHopICB7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICBraHogPSAyNDEyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICBraHogPSAyNDE3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICBraHogPSAyNDIyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICBraHogPSAyNDI3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU6ICAgICBraHogPSAyNDMyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDY6ICAgICBraHogPSAyNDM3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDc6ICAgICBraHogPSAyNDQyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDg6ICAgICBraHogPSAyNDQ3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDk6ICAgICBraHogPSAyNDUyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAgICBraHogPSAyNDU3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDExOiAgICBraHogPSAyNDYyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOiAgICBraHogPSAyNDY3MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiAgICBraHogPSAyNDcyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OiAgICBraHogPSAyNDg0MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDM2OiAgLyogVU5JSSAqLyAga2h6ID0gNTE4MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDogIC8qIFVOSUkgKi8gIGtoeiA9IDUyMDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDQ6ICAvKiBVTklJICovICBraHogPSA1MjIwMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ4OiAgLyogVU5JSSAqLyAga2h6ID0gNTI0MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MjogIC8qIFVOSUkgKi8gIGtoeiA9IDUyNjAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTY6ICAvKiBVTklJICovICBraHogPSA1MjgwMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDYwOiAgLyogVU5JSSAqLyAga2h6ID0gNTMwMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2NDogIC8qIFVOSUkgKi8gIGtoeiA9IDUzMjAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ5OiAvKiBVTklJICovICBraHogPSA1NzQ1MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE1MzogLyogVU5JSSAqLyAga2h6ID0gNTc2NTAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNTc6IC8qIFVOSUkgKi8gIGtoeiA9IDU3ODUwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTYxOiAvKiBVTklJICovICBraHogPSA1ODA1MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE2NTogLyogVU5JSSAqLyAga2h6ID0gNTgyNTAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTUwMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDQ6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTUyMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDg6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTU0MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTI6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTU2MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTY6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTU4MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjA6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTYwMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjQ6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTYyMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjg6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTY0MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzI6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTY2MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzY6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTY4MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDA6IC8qIEhpcGVyTEFOMiAqLyAga2h6ID0gNTcwMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzNDogIC8qIEphcGFuIE1NQUMgKi8gICBraHogPSA1MTcwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzODogIC8qIEphcGFuIE1NQUMgKi8gICBraHogPSA1MTkwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0MjogIC8qIEphcGFuIE1NQUMgKi8gICBraHogPSA1MjEwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0NjogIC8qIEphcGFuIE1NQUMgKi8gICBraHogPSA1MjMwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxODQ6IC8qIEphcGFuICovICAga2h6ID0gNDkyMDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTg4OiAvKiBKYXBhbiAqLyAgIGtoeiA9IDQ5NDAwMDA7ICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE5MjogLyogSmFwYW4gKi8gICBraHogPSA0OTYwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOTY6IC8qIEphcGFuICovICAga2h6ID0gNDk4MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjA4OiAvKiBKYXBhbiwgbWVhbnMgSjA4ICovICAga2h6ID0gNTA0MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjEyOiAvKiBKYXBhbiwgbWVhbnMgSjEyICovICAga2h6ID0gNTA2MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjE2OiAvKiBKYXBhbiwgbWVhbnMgSjE2ICovICAga2h6ID0gNTA4MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgIGtoeiA9IDI0MTIwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9CisKKyNkZWZpbmUgICAgIE1BUF9LSFpfVE9fQ0hBTk5FTF9JRChraHosIGNoKSAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGtoeikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDEyMDAwOiAgICBjaCA9IDE7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDE3MDAwOiAgICBjaCA9IDI7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDIyMDAwOiAgICBjaCA9IDM7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDI3MDAwOiAgICBjaCA9IDQ7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDMyMDAwOiAgICBjaCA9IDU7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDM3MDAwOiAgICBjaCA9IDY7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDQyMDAwOiAgICBjaCA9IDc7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDQ3MDAwOiAgICBjaCA9IDg7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDUyMDAwOiAgICBjaCA9IDk7ICAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDU3MDAwOiAgICBjaCA9IDEwOyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDYyMDAwOiAgICBjaCA9IDExOyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDY3MDAwOiAgICBjaCA9IDEyOyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDcyMDAwOiAgICBjaCA9IDEzOyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDg0MDAwOiAgICBjaCA9IDE0OyAgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MTgwMDAwOiAgICBjaCA9IDM2OyAgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTIwMDAwMDogICAgY2ggPSA0MDsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUyMjAwMDA6ICAgIGNoID0gNDQ7ICAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MjQwMDAwOiAgICBjaCA9IDQ4OyAgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTI2MDAwMDogICAgY2ggPSA1MjsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUyODAwMDA6ICAgIGNoID0gNTY7ICAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MzAwMDAwOiAgICBjaCA9IDYwOyAgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTMyMDAwMDogICAgY2ggPSA2NDsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU3NDUwMDA6ICAgIGNoID0gMTQ5OyAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1NzY1MDAwOiAgICBjaCA9IDE1MzsgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTc4NTAwMDogICAgY2ggPSAxNTc7IC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU4MDUwMDA6ICAgIGNoID0gMTYxOyAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1ODI1MDAwOiAgICBjaCA9IDE2NTsgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTUwMDAwMDogICAgY2ggPSAxMDA7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTUyMDAwMDogICAgY2ggPSAxMDQ7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTU0MDAwMDogICAgY2ggPSAxMDg7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTU2MDAwMDogICAgY2ggPSAxMTI7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTU4MDAwMDogICAgY2ggPSAxMTY7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTYwMDAwMDogICAgY2ggPSAxMjA7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTYyMDAwMDogICAgY2ggPSAxMjQ7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTY0MDAwMDogICAgY2ggPSAxMjg7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTY2MDAwMDogICAgY2ggPSAxMzI7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTY4MDAwMDogICAgY2ggPSAxMzY7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTcwMDAwMDogICAgY2ggPSAxNDA7IC8qIEhpcGVyTEFOMiAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTE3MDAwMDogICAgY2ggPSAzNDsgIC8qIEphcGFuIE1NQUMgKi8gICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTE5MDAwMDogICAgY2ggPSAzODsgIC8qIEphcGFuIE1NQUMgKi8gICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTIxMDAwMDogICAgY2ggPSA0MjsgIC8qIEphcGFuIE1NQUMgKi8gICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTIzMDAwMDogICAgY2ggPSA0NjsgIC8qIEphcGFuIE1NQUMgKi8gICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDkyMDAwMDogICAgY2ggPSAxODQ7IC8qIEphcGFuICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk0MDAwMDogICAgY2ggPSAxODg7IC8qIEphcGFuICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk2MDAwMDogICAgY2ggPSAxOTI7IC8qIEphcGFuICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk4MDAwMDogICAgY2ggPSAxOTY7IC8qIEphcGFuICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTA0MDAwMDogICAgY2ggPSAyMDg7IC8qIEphcGFuLCBtZWFucyBKMDggKi8gIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MDYwMDAwOiAgICBjaCA9IDIxMjsgLyogSmFwYW4sIG1lYW5zIEoxMiAqLyAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUwODAwMDA6ICAgIGNoID0gMjE2OyAvKiBKYXBhbiwgbWVhbnMgSjE2ICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgY2ggPSAxOyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9CisKKy8vCisvLyBDb21tb24gZnJhZ21lbnQgbGlzdCBzdHJ1Y3R1cmUgLSAgSWRlbnRpY2FsIHRvIHRoZSBzY2F0dGVyIGdhdGhlciBmcmFnIGxpc3Qgc3RydWN0dXJlCisvLworLy8jZGVmaW5lIFJUTVBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCAgICAgICAgIFNDQVRURVJfR0FUSEVSX0VMRU1FTlQKKy8vI2RlZmluZSBQUlRNUF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UICAgICAgICBQU0NBVFRFUl9HQVRIRVJfRUxFTUVOVAorI2RlZmluZSBOSUNfTUFYX1BIWVNfQlVGX0NPVU5UICAgICAgICAgICAgICA4CisKK3R5cGVkZWYgc3RydWN0IF9SVE1QX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgeworICAgIFBWT0lECQlBZGRyZXNzOworICAgIFVMT05HCQlMZW5ndGg7CisgICAgUFVMT05HCQlSZXNlcnZlZDsKK30gUlRNUF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5ULCAqUFJUTVBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVDsKKworCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNUIHsKKyAgICBVTE9ORyAgTnVtYmVyT2ZFbGVtZW50czsKKyAgICBQVUxPTkcgUmVzZXJ2ZWQ7CisgICAgUlRNUF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UIEVsZW1lbnRzW05JQ19NQVhfUEhZU19CVUZfQ09VTlRdOworfSBSVE1QX1NDQVRURVJfR0FUSEVSX0xJU1QsICpQUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNUOworCisvLworLy8gIFNvbWUgdXRpbGl0eSBtYWNyb3MKKy8vCisjaWZuZGVmIG1pbgorI2RlZmluZSBtaW4oX2EsIF9iKSAgICAgKCgoX2EpIDwgKF9iKSkgPyAoX2EpIDogKF9iKSkKKyNlbmRpZgorCisjaWZuZGVmIG1heAorI2RlZmluZSBtYXgoX2EsIF9iKSAgICAgKCgoX2EpID4gKF9iKSkgPyAoX2EpIDogKF9iKSkKKyNlbmRpZgorCisjZGVmaW5lIEdFVF9MTkFfR0FJTihfcEFkKQkoKF9wQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpID8gKF9wQWQtPkJMTkFHYWluKSA6ICgoX3BBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSA2NCkgPyAoX3BBZC0+QUxOQUdhaW4wKSA6ICgoX3BBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxMjgpID8gKF9wQWQtPkFMTkFHYWluMSkgOiAoX3BBZC0+QUxOQUdhaW4yKSkpKQorCisjZGVmaW5lIElOQ19DT1VOVEVSNjQoVmFsKSAgICAgICAgICAoVmFsLlF1YWRQYXJ0KyspCisKKyNkZWZpbmUgSU5GUkFfT04oX3ApICAgICAgICAgICAgICAgIChPUFNUQVRVU19URVNUX0ZMQUcoX3AsIGZPUF9TVEFUVVNfSU5GUkFfT04pKQorI2RlZmluZSBBREhPQ19PTihfcCkgICAgICAgICAgICAgICAgKE9QU1RBVFVTX1RFU1RfRkxBRyhfcCwgZk9QX1NUQVRVU19BREhPQ19PTikpCisjZGVmaW5lIE1PTklUT1JfT04oX3ApICAgICAgICAgICAgICAoKChfcCktPlN0YUNmZy5Cc3NUeXBlKSA9PSBCU1NfTU9OSVRPUikKKyNkZWZpbmUgSURMRV9PTihfcCkgICAgICAgICAgICAgICAgICghSU5GUkFfT04oX3ApICYmICFBREhPQ19PTihfcCkpCisKKy8vIENoZWNrIExFQVAgJiBDQ0tNIGZsYWdzCisjZGVmaW5lIExFQVBfT04oX3ApICAgICAgICAgICAgICAgICAoKChfcCktPlN0YUNmZy5MZWFwQXV0aE1vZGUpID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyNkZWZpbmUgTEVBUF9DQ0tNX09OKF9wKSAgICAgICAgICAgICgoKChfcCktPlN0YUNmZy5MZWFwQXV0aE1vZGUpID09IENJU0NPX0F1dGhNb2RlTEVBUCkgJiYgKChfcCktPlN0YUNmZy5MZWFwQXV0aEluZm8uQ0NLTSA9PSBUUlVFKSkKKworLy8gaWYgb3JnaW5hbCBFdGhlcm5ldCBmcmFtZSBjb250YWlucyBubyBMTEMvU05BUCwgdGhlbiBhbiBleHRyYSBMTEMvU05BUCBlbmNhcCBpcyByZXF1aXJlZAorI2RlZmluZSBFWFRSQV9MTENTTkFQX0VOQ0FQX0ZST01fUEtUX1NUQVJUKF9wQnVmVkEsIF9wRXh0cmFMbGNTbmFwRW5jYXApCQlcCit7CQkJCQkJCQkJCQkJCQkJCVwKKwlpZiAoKCgqKF9wQnVmVkEgKyAxMikgPDwgOCkgKyAqKF9wQnVmVkEgKyAxMykpID4gMTUwMCkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJXAorCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gU05BUF84MDJfMUg7CQkJCQkJXAorCQlpZiAoTmRpc0VxdWFsTWVtb3J5KElQWCwgX3BCdWZWQSArIDEyLCAyKSB8fCAJCQlcCisJCQlOZGlzRXF1YWxNZW1vcnkoQVBQTEVfVEFMSywgX3BCdWZWQSArIDEyLCAyKSkJCVwKKwkJewkJCQkJCQkJCQkJCQkJXAorCQkJX3BFeHRyYUxsY1NuYXBFbmNhcCA9IFNOQVBfQlJJREdFX1RVTk5FTDsJCQlcCisJCX0JCQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJXAorCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gTlVMTDsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorfQorCisvLyBOZXcgRGVmaW5lIGZvciBuZXcgVHggUGF0aC4KKyNkZWZpbmUgRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQoX3BCdWZWQSwgX3BFeHRyYUxsY1NuYXBFbmNhcCkJXAorewkJCQkJCQkJCQkJCQkJCQlcCisJaWYgKCgoKihfcEJ1ZlZBKSA8PCA4KSArICooX3BCdWZWQSArIDEpKSA+IDE1MDApCQkJXAorCXsJCQkJCQkJCQkJCQkJCQlcCisJCV9wRXh0cmFMbGNTbmFwRW5jYXAgPSBTTkFQXzgwMl8xSDsJCQkJCQlcCisJCWlmIChOZGlzRXF1YWxNZW1vcnkoSVBYLCBfcEJ1ZlZBLCAyKSB8fCAJCQkJXAorCQkJTmRpc0VxdWFsTWVtb3J5KEFQUExFX1RBTEssIF9wQnVmVkEsIDIpKQkJCVwKKwkJewkJCQkJCQkJCQkJCQkJXAorCQkJX3BFeHRyYUxsY1NuYXBFbmNhcCA9IFNOQVBfQlJJREdFX1RVTk5FTDsJCQlcCisJCX0JCQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJXAorCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gTlVMTDsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorfQorCisKKyNkZWZpbmUgTUFLRV84MDJfM19IRUFERVIoX3AsIF9wTWFjMSwgX3BNYWMyLCBfcFR5cGUpICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOZGlzTW92ZU1lbW9yeShfcCwgX3BNYWMxLCBNQUNfQUREUl9MRU4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOZGlzTW92ZU1lbW9yeSgoX3AgKyBNQUNfQUREUl9MRU4pLCBfcE1hYzIsIE1BQ19BRERSX0xFTik7ICAgICAgICAgIFwKKyAgICBOZGlzTW92ZU1lbW9yeSgoX3AgKyBNQUNfQUREUl9MRU4gKiAyKSwgX3BUeXBlLCBMRU5HVEhfODAyXzNfVFlQRSk7IFwKK30KKworLy8gaWYgcERhdGEgaGFzIG5vIExMQy9TTkFQIChuZWl0aGVyIFJGQzEwNDIgbm9yIEJyaWRnZSB0dW5uZWwpLCBrZWVwIGl0IHRoYXQgd2F5LgorLy8gZWxzZSBpZiB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgTExDL1NOQVAtZW5jYXBlZCBJUFggb3IgQVBQTEVUQUxLLCBwcmVzZXJ2ZSB0aGUgTExDL1NOQVAgZmllbGQKKy8vIGVsc2UgcmVtb3ZlIHRoZSBMTEMvU05BUCBmaWVsZCBmcm9tIHRoZSByZXN1bHQgRXRoZXJuZXQgZnJhbWUKKy8vIFBhdGNoIGZvciBXSFFMIG9ubHksIHdoaWNoIGRpZCBub3QgdHVybiBvbiBOZXRiaW9zIGJ1dCB1c2UgSVBYIHdpdGhpbiBpdHMgcGF5bG9hZAorLy8gTm90ZToKKy8vICAgICBfcERhdGEgJiBfRGF0YVNpemUgbWF5IGJlIGFsdGVyZWQgKHJlbW92ZSA4LWJ5dGUgTExDL1NOQVApIGJ5IHRoaXMgTUFDUk8KKy8vICAgICBfcFJlbW92ZWRMTENTTkFQOiBwb2ludGVyIHRvIHJlbW92ZWQgTExDL1NOQVA7IE5VTEwgaXMgbm90IHJlbW92ZWQKKyNkZWZpbmUgQ09OVkVSVF9UT184MDJfMyhfcDgwMjNoZHIsIF9wREEsIF9wU0EsIF9wRGF0YSwgX0RhdGFTaXplLCBfcFJlbW92ZWRMTENTTkFQKSAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjaGFyIExMQ19MZW5bMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcFJlbW92ZWRMTENTTkFQID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KFNOQVBfODAyXzFILCBfcERhdGEsIDYpICB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTmRpc0VxdWFsTWVtb3J5KFNOQVBfQlJJREdFX1RVTk5FTCwgX3BEYXRhLCA2KSkgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUFVDSEFSIHBQcm90byA9IF9wRGF0YSArIDY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKChOZGlzRXF1YWxNZW1vcnkoSVBYLCBwUHJvdG8sIDIpIHx8IE5kaXNFcXVhbE1lbW9yeShBUFBMRV9UQUxLLCBwUHJvdG8sIDIpKSAmJiAgXAorICAgICAgICAgICAgTmRpc0VxdWFsTWVtb3J5KFNOQVBfODAyXzFILCBfcERhdGEsIDYpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTExDX0xlblswXSA9IChVQ0hBUikoX0RhdGFTaXplIC8gMjU2KTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTExDX0xlblsxXSA9IChVQ0hBUikoX0RhdGFTaXplICUgMjU2KTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUFLRV84MDJfM19IRUFERVIoX3A4MDIzaGRyLCBfcERBLCBfcFNBLCBMTENfTGVuKTsgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUFLRV84MDJfM19IRUFERVIoX3A4MDIzaGRyLCBfcERBLCBfcFNBLCBwUHJvdG8pOyAgICAgICAgICAgXAorICAgICAgICAgICAgX3BSZW1vdmVkTExDU05BUCA9IF9wRGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX0RhdGFTaXplIC09IExFTkdUSF84MDJfMV9IOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX3BEYXRhICs9IExFTkdUSF84MDJfMV9IOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBMTENfTGVuWzBdID0gKFVDSEFSKShfRGF0YVNpemUgLyAyNTYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBMTENfTGVuWzFdID0gKFVDSEFSKShfRGF0YVNpemUgJSAyNTYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBNQUtFXzgwMl8zX0hFQURFUihfcDgwMjNoZHIsIF9wREEsIF9wU0EsIExMQ19MZW4pOyAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNXSVRDSF9BQiggX3BBQSwgX3BCQikgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQVk9JRCBwQ0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwQ0MgPSBfcEJCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX3BCQiA9IF9wQUE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcEFBID0gcENDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8vIEVucXVldWUgdGhpcyBmcmFtZSB0byBNTE1FIGVuZ2luZQorLy8gV2UgbmVlZCB0byBlbnF1ZXVlIHRoZSB3aG9sZSBmcmFtZSBiZWNhdXNlIE1MTUUgbmVlZCB0byBwYXNzIGRhdGEgdHlwZQorLy8gaW5mb3JtYXRpb24gZnJvbSA4MDIuMTEgaGVhZGVyCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIFJFUE9SVF9NR01UX0ZSQU1FX1RPX01MTUUoX3BBZCwgV2NpZCwgX3BGcmFtZSwgX0ZyYW1lU2l6ZSwgX1Jzc2kwLCBfUnNzaTEsIF9Sc3NpMiwgX1BsY3BTaWduYWwpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVJTlQzMiBIaWdoMzJUU0Y9MCwgTG93MzJUU0Y9MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1sbWVFbnF1ZXVlRm9yUmVjdihfcEFkLCBXY2lkLCBIaWdoMzJUU0YsIExvdzMyVFNGLCAoVUNIQVIpX1Jzc2kwLCAoVUNIQVIpX1Jzc2kxLChVQ0hBUilfUnNzaTIsX0ZyYW1lU2l6ZSwgX3BGcmFtZSwgKFVDSEFSKV9QbGNwU2lnbmFsKTsgICBcCit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBSVDMweHgKKy8vTmVlZCB0byBjb2xsZWN0IGVhY2ggYW50J3MgcnNzaSBjb25jdXJyZW50bHkKKy8vcnNzaTEgaXMgcmVwb3J0IHRvIHBhaXIyIEFudCBhbmQgcnNzMiBpcyByZXByb3QgdG8gcGFpcjEgQW50IHdoZW4gNCBBbnQKKyNkZWZpbmUgQ09MTEVDVF9SWF9BTlRFTk5BX0FWRVJBR0VfUlNTSShfcEFkLCBfcnNzaTEsIF9yc3NpMikJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwlTSE9SVAlBdmdSc3NpOwkJCQkJCQkJCQkJCQkJCVwKKwlVQ0hBUglVc2VkQW50OwkJCQkJCQkJCQkJCQkJCVwKKwlpZiAoX3BBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPT0gMCkJCQkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJVXNlZEFudCA9IF9wQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50OwkJCQkJCQlcCisJCUF2Z1Jzc2kgPSBfcEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbVXNlZEFudF07CQkJCQkJXAorCQlpZiAoQXZnUnNzaSA8IDApCQkJCQkJCQkJCQkJCVwKKwkJCUF2Z1Jzc2kgPSBBdmdSc3NpIC0gKEF2Z1Jzc2kgPj4gMykgKyBfcnNzaTE7CQkJCQlcCisJCWVsc2UJCQkJCQkJCQkJCQkJCQkJXAorCQkJQXZnUnNzaSA9IF9yc3NpMSA8PCAzOwkJCQkJCQkJCQkJXAorCQlfcEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbVXNlZEFudF0gPSBBdmdSc3NpOwkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCWVsc2UJCQkJCQkJCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJCQkJXAorCQlVc2VkQW50ID0gX3BBZC0+UnhBbnQuUGFpcjFTZWNvbmRhcnlSeEFudDsJCQkJCQkJXAorCQlBdmdSc3NpID0gX3BBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW1VzZWRBbnRdOwkJCQkJCVwKKwkJaWYgKChBdmdSc3NpIDwgMCkgJiYgKF9wQWQtPlJ4QW50LkZpcnN0UGt0QXJyaXZlZFdoZW5FdmFsdWF0ZSkpCQlcCisJCQlBdmdSc3NpID0gQXZnUnNzaSAtIChBdmdSc3NpID4+IDMpICsgX3Jzc2kxOwkJCQkJXAorCQllbHNlCQkJCQkJCQkJCQkJCQkJCVwKKwkJewkJCQkJCQkJCQkJCQkJCQkJXAorCQkJX3BBZC0+UnhBbnQuRmlyc3RQa3RBcnJpdmVkV2hlbkV2YWx1YXRlID0gVFJVRTsJCQkJCVwKKwkJCUF2Z1Jzc2kgPSBfcnNzaTEgPDwgMzsJCQkJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQkJXAorCQlfcEFkLT5SeEFudC5QYWlyMUF2Z1Jzc2lbVXNlZEFudF0gPSBBdmdSc3NpOwkJCQkJCVwKKwkJX3BBZC0+UnhBbnQuUmN2UGt0TnVtV2hlbkV2YWx1YXRlKys7CQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCVwKK30KKyNlbmRpZiAvLyBSVDMweHggLy8KKworCisjZGVmaW5lIE5ESVNfUVVFUllfQlVGRkVSKF9OZGlzQnVmLCBfcHBWQSwgX3BCdWZMZW4pICAgICAgICAgICAgICAgICAgICBcCisgICAgTmRpc1F1ZXJ5QnVmZmVyKF9OZGlzQnVmLCBfcHBWQSwgX3BCdWZMZW4pCisKKyNkZWZpbmUgTUFDX0FERFJfRVFVQUwocEFkZHIxLHBBZGRyMikgICAgICAgICAgIFJUTVBFcXVhbE1lbW9yeSgoUFZPSUQpKHBBZGRyMSksIChQVk9JRCkocEFkZHIyKSwgTUFDX0FERFJfTEVOKQorI2RlZmluZSBTU0lEX0VRVUFMKHNzaWQxLCBsZW4xLCBzc2lkMiwgbGVuMikgICAgKChsZW4xPT1sZW4yKSAmJiAoUlRNUEVxdWFsTWVtb3J5KHNzaWQxLCBzc2lkMiwgbGVuMSkpKQorCisvLworLy8gQ2hlY2sgaWYgaXQgaXMgSmFwYW4gVzUzKGNoNTIsNTYsNjAsNjQpIGNoYW5uZWwuCisvLworI2RlZmluZSBKYXBhbkNoYW5uZWxDaGVjayhjaGFubmVsKSAgKChjaGFubmVsID09IDUyKSB8fCAoY2hhbm5lbCA9PSA1NikgfHwgKGNoYW5uZWwgPT0gNjApIHx8IChjaGFubmVsID09IDY0KSkKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBTVEFfUE9SVF9TRUNVUkVEKF9wQWQpIFwKK3sgXAorCV9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyBcCisJTmRpc0FjcXVpcmVTcGluTG9jaygmX3BBZC0+TWFjVGFiTG9jayk7IFwKKwlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Qb3J0U2VjdXJlZCA9IF9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZDsgXAorCU5kaXNSZWxlYXNlU3BpbkxvY2soJl9wQWQtPk1hY1RhYkxvY2spOyBcCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworLy8KKy8vIFJlZ2lzdGVyIHNldCBwYWlyIGZvciBpbml0aWFsemF0aW9uIHJlZ2lzdGVyIHNldCBkZWZpbml0aW9uCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9SVE1QX1JFR19QQUlSCit7CisJVUxPTkcgICBSZWdpc3RlcjsKKwlVTE9ORyAgIFZhbHVlOworfSBSVE1QX1JFR19QQUlSLCAqUFJUTVBfUkVHX1BBSVI7CisKK3R5cGVkZWYgc3RydWN0ICBfUkVHX1BBSVIKK3sKKwlVQ0hBUiAgIFJlZ2lzdGVyOworCVVDSEFSICAgVmFsdWU7Cit9IFJFR19QQUlSLCAqUFJFR19QQUlSOworCisvLworLy8gUmVnaXN0ZXIgc2V0IHBhaXIgZm9yIGluaXRpYWx6YXRpb24gcmVnaXN0ZXIgc2V0IGRlZmluaXRpb24KKy8vCit0eXBlZGVmIHN0cnVjdCAgX1JUTVBfUkZfUkVHUworeworCVVDSEFSICAgQ2hhbm5lbDsKKwlVTE9ORyAgIFIxOworCVVMT05HICAgUjI7CisJVUxPTkcgICBSMzsKKwlVTE9ORyAgIFI0OworfSBSVE1QX1JGX1JFR1MsICpQUlRNUF9SRl9SRUdTOworCit0eXBlZGVmIHN0cnVjdCBfRlJFUVVFTkNZX0lURU0geworCVVDSEFSCUNoYW5uZWw7CisJVUNIQVIJTjsKKwlVQ0hBUglSOworCVVDSEFSCUs7Cit9IEZSRVFVRU5DWV9JVEVNLCAqUEZSRVFVRU5DWV9JVEVNOworCisvLworLy8gIERhdGEgYnVmZmVyIGZvciBETUEgb3BlcmF0aW9uLCB0aGUgYnVmZmVyIG11c3QgYmUgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkKKy8vICBCb3RoIERNQSB0byAvIGZyb20gQ1BVIHVzZSB0aGUgc2FtZSBzdHJ1Y3R1cmUuCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9SVE1QX0RNQUJVRgoreworCVVMT05HICAgICAgICAgICAgICAgICAgIEFsbG9jU2l6ZTsKKwlQVk9JRCAgICAgICAgICAgICAgICAgICBBbGxvY1ZhOyAgICAgICAgICAgIC8vIFR4QnVmIHZpcnR1YWwgYWRkcmVzcworCU5ESVNfUEhZU0lDQUxfQUREUkVTUyAgIEFsbG9jUGE7ICAgICAgICAgICAgLy8gVHhCdWYgcGh5c2ljYWwgYWRkcmVzcworfSBSVE1QX0RNQUJVRiwgKlBSVE1QX0RNQUJVRjsKKworCit0eXBlZGVmCXVuaW9uCV9IRUFERVJfODAyXzExX1NFUXsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgc3RydWN0IHsKKyAgIAlVU0hPUlQJCQlTZXF1ZW5jZToxMjsKKwlVU0hPUlQJCQlGcmFnOjQ7CisgICAgfSAgIGZpZWxkOworI2Vsc2UKKyAgICBzdHJ1Y3QgeworCVVTSE9SVAkJCUZyYWc6NDsKKwlVU0hPUlQJCQlTZXF1ZW5jZToxMjsKKyAgICB9ICAgZmllbGQ7CisjZW5kaWYKKyAgICBVU0hPUlQgICAgICAgICAgIHZhbHVlOworfQlIRUFERVJfODAyXzExX1NFUSwgKlBIRUFERVJfODAyXzExX1NFUTsKKworLy8KKy8vICBEYXRhIGJ1ZmZlciBmb3IgRE1BIG9wZXJhdGlvbiwgdGhlIGJ1ZmZlciBtdXN0IGJlIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5CisvLyAgQm90aCBETUEgdG8gLyBmcm9tIENQVSB1c2UgdGhlIHNhbWUgc3RydWN0dXJlLgorLy8KK3R5cGVkZWYgc3RydWN0ICBfUlRNUF9SRU9SREVSQlVGCit7CisJQk9PTEVBTgkJCUlzRnVsbDsKKwlQVk9JRCAgICAgICAgICAgICAgICAgICBBbGxvY1ZhOyAgICAgICAgICAgIC8vIFR4QnVmIHZpcnR1YWwgYWRkcmVzcworCVVDSEFSCQkJSGVhZGVyODAyXzNbMTRdOworCUhFQURFUl84MDJfMTFfU0VRCQkJU2VxdWVuY2U7CS8vc3VwcG9ydCBjb21wcmVzc2VkIGJpdG1hcCBCQSwgc28gbm8gY29uc2lkZXIgZnJhZ21lbnQgaW4gQkEKKwlVQ0hBUiAJCURhdGFPZmZzZXQ7CisJVVNIT1JUIAkJRGF0YXNpemU7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgQWxsb2NTaXplOworI2lmZGVmIFJUMjg3MAorCVBVQ0hBUgkJCQkJQWxsb2NQYTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KK30gICBSVE1QX1JFT1JERVJCVUYsICpQUlRNUF9SRU9SREVSQlVGOworCisvLworLy8gQ29udHJvbCBibG9jayAoRGVzY3JpcHRvcikgZm9yIGFsbCByaW5nIGRlc2NyaXB0b3IgRE1BIG9wZXJhdGlvbiwgYnVmZmVyIG11c3QgYmUKKy8vIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LiBORElTX1BBQ0tFVCBzdG9yZWQgdGhlIGJpbmRpbmcgUnggcGFja2V0IGRlc2NyaXB0b3IKKy8vIHdoaWNoIHdvbid0IGJlIHJlbGVhc2VkLCBkcml2ZXIgaGFzIHRvIHdhaXQgdW50aWwgdXBwZXIgbGF5ZXIgcmV0dXJuIHRoZSBwYWNrZXQKKy8vIGJlZm9yZSBnaXZlaW5nIHVwIHRoaXMgcnggcmluZyBkZXNjcmlwdG9yIHRvIEFTSUMuIE5ESVNfQlVGRkVSIGlzIGFzc29jYWl0ZWQgcGFpcgorLy8gdG8gZGVzY3JpYmUgdGhlIHBhY2tldCBidWZmZXIuIEZvciBUeCwgTkRJU19QQUNLRVQgc3RvcmVkIHRoZSB0eCBwYWNrZXQgZGVzY3JpcHRvcgorLy8gd2hpY2ggZHJpdmVyIHNob3VsZCBBQ0sgdXBwZXIgbGF5ZXIgd2hlbiB0aGUgdHggaXMgcGh5c2ljYWxseSBkb25lIG9yIGZhaWxlZC4KKy8vCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9ETUFDQgoreworCVVMT05HICAgICAgICAgICAgICAgICAgIEFsbG9jU2l6ZTsgICAgICAgICAgLy8gQ29udHJvbCBibG9jayBzaXplCisJUFZPSUQgICAgICAgICAgICAgICAgICAgQWxsb2NWYTsgICAgICAgICAgICAvLyBDb250cm9sIGJsb2NrIHZpcnR1YWwgYWRkcmVzcworCU5ESVNfUEhZU0lDQUxfQUREUkVTUyAgIEFsbG9jUGE7ICAgICAgICAgICAgLy8gQ29udHJvbCBibG9jayBwaHlzaWNhbCBhZGRyZXNzCisJUE5ESVNfUEFDS0VUIHBOZGlzUGFja2V0OworCVBORElTX1BBQ0tFVCBwTmV4dE5kaXNQYWNrZXQ7CisKKwlSVE1QX0RNQUJVRiAgICAgICAgICAgICBEbWFCdWY7ICAgICAgICAgICAgIC8vIEFzc29jaWF0ZWQgRE1BIGJ1ZmZlciBzdHJ1Y3R1cmUKK30gUlRNUF9ETUFDQiwgKlBSVE1QX0RNQUNCOworCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9UWF9CVUYKK3sKKwlQUVVFVUVfRU5UUlkgICAgTmV4dDsKKwlVQ0hBUiAgICAgICAgICAgSW5kZXg7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgQWxsb2NTaXplOyAgICAgICAgICAvLyBDb250cm9sIGJsb2NrIHNpemUKKwlQVk9JRCAgICAgICAgICAgICAgICAgICBBbGxvY1ZhOyAgICAgICAgICAgIC8vIENvbnRyb2wgYmxvY2sgdmlydHVhbCBhZGRyZXNzCisJTkRJU19QSFlTSUNBTF9BRERSRVNTICAgQWxsb2NQYTsgICAgICAgICAgICAvLyBDb250cm9sIGJsb2NrIHBoeXNpY2FsIGFkZHJlc3MKK30gUlRNUF9UWEJVRiwgKlBSVE1QX1RYQlVGOworCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9SWF9CVUYKK3sKKwlCT09MRUFOICAgICAgICAgICBJblVzZTsKKwlVTE9ORyAgICAgICAgICAgCUJ5QmFSZWNJbmRleDsKKwlSVE1QX1JFT1JERVJCVUYJTUFQX1JYQnVmW01BWF9SWF9SRU9SREVSQlVGXTsKK30gUlRNUF9SWEJVRiwgKlBSVE1QX1JYQlVGOwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfVFhfUklORworeworCVJUTVBfRE1BQ0IgIENlbGxbVFhfUklOR19TSVpFXTsKKwlVSU5UMzIJCVR4Q3B1SWR4OworCVVJTlQzMgkJVHhEbWFJZHg7CisJVUlOVDMyCQlUeFN3RnJlZUlkeDsgCS8vIHNvZnR3YXJlIG5leHQgZnJlZSB0eCBpbmRleAorfSBSVE1QX1RYX1JJTkcsICpQUlRNUF9UWF9SSU5HOworCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9SWF9SSU5HCit7CisJUlRNUF9ETUFDQiAgQ2VsbFtSWF9SSU5HX1NJWkVdOworCVVJTlQzMgkJUnhDcHVJZHg7CisJVUlOVDMyCQlSeERtYUlkeDsKKwlJTlQzMgkJUnhTd1JlYWRJZHg7IAkvLyBzb2Z0d2FyZSBuZXh0IHJlYWQgaW5kZXgKK30gUlRNUF9SWF9SSU5HLCAqUFJUTVBfUlhfUklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfTUdNVF9SSU5HCit7CisJUlRNUF9ETUFDQiAgQ2VsbFtNR01UX1JJTkdfU0laRV07CisJVUlOVDMyCQlUeENwdUlkeDsKKwlVSU5UMzIJCVR4RG1hSWR4OworCVVJTlQzMgkJVHhTd0ZyZWVJZHg7IC8vIHNvZnR3YXJlIG5leHQgZnJlZSB0eCBpbmRleAorfSBSVE1QX01HTVRfUklORywgKlBSVE1QX01HTVRfUklORzsKKworLy8KKy8vICBTdGF0aXN0aWMgY291bnRlciBzdHJ1Y3R1cmUKKy8vCit0eXBlZGVmIHN0cnVjdCBfQ09VTlRFUl84MDJfMworeworCS8vIEdlbmVyYWwgU3RhdHMKKwlVTE9ORyAgICAgICBHb29kVHJhbnNtaXRzOworCVVMT05HICAgICAgIEdvb2RSZWNlaXZlczsKKwlVTE9ORyAgICAgICBUeEVycm9yczsKKwlVTE9ORyAgICAgICBSeEVycm9yczsKKwlVTE9ORyAgICAgICBSeE5vQnVmZmVyOworCisJLy8gRXRoZXJuZXQgU3RhdHMKKwlVTE9ORyAgICAgICBSY3ZBbGlnbm1lbnRFcnJvcnM7CisJVUxPTkcgICAgICAgT25lQ29sbGlzaW9uOworCVVMT05HICAgICAgIE1vcmVDb2xsaXNpb25zOworCit9IENPVU5URVJfODAyXzMsICpQQ09VTlRFUl84MDJfMzsKKwordHlwZWRlZiBzdHJ1Y3QgX0NPVU5URVJfODAyXzExIHsKKwlVTE9ORyAgICAgICAgICAgTGVuZ3RoOworCUxBUkdFX0lOVEVHRVIgICBMYXN0VHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OworCUxBUkdFX0lOVEVHRVIgICBUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7CisJTEFSR0VfSU5URUdFUiAgIE11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgRmFpbGVkQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIFJldHJ5Q291bnQ7CisJTEFSR0VfSU5URUdFUiAgIE11bHRpcGxlUmV0cnlDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgUlRTU3VjY2Vzc0NvdW50OworCUxBUkdFX0lOVEVHRVIgICBSVFNGYWlsdXJlQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIEFDS0ZhaWx1cmVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgRnJhbWVEdXBsaWNhdGVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgUmVjZWl2ZWRGcmFnbWVudENvdW50OworCUxBUkdFX0lOVEVHRVIgICBNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIEZDU0Vycm9yQ291bnQ7Cit9IENPVU5URVJfODAyXzExLCAqUENPVU5URVJfODAyXzExOworCit0eXBlZGVmIHN0cnVjdCBfQ09VTlRFUl9SQUxJTksgeworCVVMT05HICAgICAgICAgICBUcmFuc21pdHRlZEJ5dGVDb3VudDsgICAvLyBib3RoIHN1Y2Nlc3NmdWwgYW5kIGZhaWx1cmUsIHVzZWQgdG8gY2FsY3VsYXRlIFRYIHRocm91Z2hwdXQKKwlVTE9ORyAgICAgICAgICAgUmVjZWl2ZWRCeXRlQ291bnQ7ICAgICAgLy8gYm90aCBDUkMgb2theSBhbmQgQ1JDIGVycm9yLCB1c2VkIHRvIGNhbGN1bGF0ZSBSWCB0aHJvdWdocHV0CisJVUxPTkcgICAgICAgICAgIEJlZW5EaXNhc3NvY2lhdGVkQ291bnQ7CisJVUxPTkcgICAgICAgICAgIEJhZENRSUF1dG9SZWNvdmVyeUNvdW50OworCVVMT05HICAgICAgICAgICBQb29yQ1FJUm9hbWluZ0NvdW50OworCVVMT05HICAgICAgICAgICBNZ210UmluZ0Z1bGxDb3VudDsKKwlVTE9ORyAgICAgICAgICAgUnhDb3VudFNpbmNlTGFzdE5VTEw7CisJVUxPTkcgICAgICAgICAgIFJ4Q291bnQ7CisJVUxPTkcgICAgICAgICAgIFJ4UmluZ0VyckNvdW50OworCVVMT05HICAgICAgICAgICBLaWNrVHhDb3VudDsKKwlVTE9ORyAgICAgICAgICAgVHhSaW5nRXJyQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIFJlYWxGY3NFcnJDb3VudDsKKwlVTE9ORyAgICAgICAgICAgUGVuZGluZ05kaXNQYWNrZXRDb3VudDsKKworCVVMT05HICAgICAgICAgICBPbmVTZWNPc1R4Q291bnRbTlVNX09GX1RYX1JJTkddOworCVVMT05HICAgICAgICAgICBPbmVTZWNEbWFEb25lQ291bnRbTlVNX09GX1RYX1JJTkddOworCVVJTlQzMiAgICAgICAgICBPbmVTZWNUeERvbmVDb3VudDsKKwlVTE9ORyAgICAgICAgICAgT25lU2VjUnhDb3VudDsKKwlVSU5UMzIgICAgICAgICAgT25lU2VjVHhBZ2dyZWdhdGlvbkNvdW50OworCVVJTlQzMiAgICAgICAgICBPbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQ7CisKKwlVSU5UMzIgICAJCU9uZVNlY0ZyYW1lRHVwbGljYXRlQ291bnQ7CisKKyNpZmRlZiBSVDI4NzAKKwlVTE9ORyAgICAgICAgICAgT25lU2VjVHJhbnNtaXR0ZWRCeXRlQ291bnQ7ICAgLy8gYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsdXJlLCB1c2VkIHRvIGNhbGN1bGF0ZSBUWCB0aHJvdWdocHV0CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlVSU5UMzIgICAgICAgICAgT25lU2VjVHhOb1JldHJ5T2tDb3VudDsKKwlVSU5UMzIgICAgICAgICAgT25lU2VjVHhSZXRyeU9rQ291bnQ7CisJVUlOVDMyICAgICAgICAgIE9uZVNlY1R4RmFpbENvdW50OworCVVJTlQzMiAgICAgICAgICBPbmVTZWNGYWxzZUNDQUNudDsgICAgICAvLyBDQ0EgZXJyb3IgY291bnQsIGZvciBkZWJ1ZyBwdXJwb3NlLCBtaWdodCBtb3ZlIHRvIGdsb2JhbCBjb3VudGVyCisJVUlOVDMyICAgICAgICAgIE9uZVNlY1J4T2tDbnQ7ICAgICAgICAgIC8vIFJYIHdpdGhvdXQgZXJyb3IKKwlVSU5UMzIgICAgICAgICAgT25lU2VjUnhPa0RhdGFDbnQ7ICAgICAgLy8gdW5pY2FzdC10by1tZSBEQVRBIGZyYW1lIGNvdW50CisJVUlOVDMyICAgICAgICAgIE9uZVNlY1J4RmNzRXJyQ250OyAgICAgIC8vIENSQyBlcnJvcgorCVVJTlQzMiAgICAgICAgICBPbmVTZWNCZWFjb25TZW50Q250OworCVVJTlQzMiAgICAgICAgICBMYXN0T25lU2VjVG90YWxUeENvdW50OyAvLyBPbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsgT25lU2VjVHhSZXRyeU9rQ291bnQgKyBPbmVTZWNUeEZhaWxDb3VudAorCVVJTlQzMiAgICAgICAgICBMYXN0T25lU2VjUnhPa0RhdGFDbnQ7ICAvLyBPbmVTZWNSeE9rRGF0YUNudAorCVVMT05HCQlEdXBsaWNhdGVSY3Y7CisJVUxPTkcJCVR4QWdnQ291bnQ7CisJVUxPTkcJCVR4Tm9uQWdnQ291bnQ7CisJVUxPTkcJCVR4QWdnMU1QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2cyTVBEVUNvdW50OworCVVMT05HCQlUeEFnZzNNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnNE1QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2c1TVBEVUNvdW50OworCVVMT05HCQlUeEFnZzZNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnN01QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2c4TVBEVUNvdW50OworCVVMT05HCQlUeEFnZzlNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTBNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTFNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTJNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTNNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTRNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTVNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMTZNUERVQ291bnQ7CisKKwlMQVJHRV9JTlRFR0VSICAgICAgIFRyYW5zbWl0dGVkT2N0ZXRzSW5BTVNEVTsKKwlMQVJHRV9JTlRFR0VSICAgICAgIFRyYW5zbWl0dGVkQU1TRFVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgICAgIFJlY2VpdmVkT2N0ZXNJbkFNU0RVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBSZWNlaXZlZEFNU0RVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBUcmFuc21pdHRlZEFNUERVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBUcmFuc21pdHRlZE1QRFVzSW5BTVBEVUNvdW50OworCUxBUkdFX0lOVEVHRVIgICAgICAgVHJhbnNtaXR0ZWRPY3RldHNJbkFNUERVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBNUERVSW5SZWNlaXZlZEFNUERVQ291bnQ7Cit9IENPVU5URVJfUkFMSU5LLCAqUENPVU5URVJfUkFMSU5LOworCit0eXBlZGVmIHN0cnVjdCBfUElEX0NPVU5URVIgeworCVVMT05HICAgICAgICAgICBUeEFja1JlcXVpcmVkQ291bnQ7ICAgICAgLy8gQ1JDIGVycm9yCisJVUxPTkcgICAgICAgICAgIFR4QWdncmVDb3VudDsKKwlVTE9ORyAgICAgICAgICAgVHhTdWNjZXNzQ291bnQ7IC8vIE9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKyBPbmVTZWNUeFJldHJ5T2tDb3VudCArIE9uZVNlY1R4RmFpbENvdW50CisJVUxPTkcJCUxhc3RTdWNjZXNzUmF0ZTsKK30gUElEX0NPVU5URVIsICpQUElEX0NPVU5URVI7CisKK3R5cGVkZWYgc3RydWN0IF9DT1VOVEVSX0RSUyB7CisJLy8gdG8gcmVjb3JkIHRoZSBlYWNoIFRYIHJhdGUncyBxdWFsaXR5LiAwIGlzIGJlc3QsIHRoZSBiaWdnZXIgdGhlIHdvcnNlLgorCVVTSE9SVCAgICAgICAgICBUeFF1YWxpdHlbTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0hdOworCVVDSEFSICAgICAgICAgICBQRVJbTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0hdOworCVVDSEFSICAgICAgICAgICBUeFJhdGVVcFBlbmFsdHk7ICAgICAgLy8gZXh0cmEgIyBvZiBzZWNvbmQgcGVuYWx0eSBkdWUgdG8gbGFzdCB1bnN0YWJsZSBjb25kaXRpb24KKwlVTE9ORyAgICAgICAgICAgQ3VyclR4UmF0ZVN0YWJsZVRpbWU7IC8vICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZQorCUJPT0xFQU4gICAgICAgICBmTm9pc3lFbnZpcm9ubWVudDsKKwlCT09MRUFOICAgICAgICAgZkxhc3RTZWNBY2NvcmRpbmdSU1NJOworCVVDSEFSICAgICAgICAgICBMYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uOyAvLyAwOiBubyBjaGFuZ2UsIDE6cmF0ZSBVUCwgMjpyYXRlIGRvd24KKwlVQ0hBUgkJCUxhc3RUaW1lVHhSYXRlQ2hhbmdlQWN0aW9uOyAvL0tlZXAgbGFzdCB0aW1lIHZhbHVlIG9mIExhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24KKwlVTE9ORwkJCUxhc3RUeE9rQ291bnQ7Cit9IENPVU5URVJfRFJTLCAqUENPVU5URVJfRFJTOworCisvLworLy8gIEFyY2ZvdXIgU3RydWN0dXJlIEFkZGVkIGJ5IFBhdWxXdQorLy8KK3R5cGVkZWYgc3RydWN0ICBfQVJDRk9VUgoreworCVVJTlQgICAgICAgICAgICBYOworCVVJTlQgICAgICAgICAgICBZOworCVVDSEFSICAgICAgICAgICBTVEFURVsyNTZdOworfSBBUkNGT1VSQ09OVEVYVCwgKlBBUkNGT1VSQ09OVEVYVDsKKworLy8gTUlNTyBUeCBwYXJhbWV0ZXIsIFNob3J0R0ksIE1DUywgU1RCQywgZXRjLiAgdGhlc2UgYXJlIGZpZWxkcyBpbiBUWFdJIHRvby4ganVzdCBjb3B5IHRvIFRYV0kuCit0eXBlZGVmIHN0cnVjdCAgX1JFQ0VJVkVfU0VUVElORyB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVTSE9SVAkJTUlNTzoxOworCVVTSE9SVAkJT0ZETToxOworCVVTSE9SVAkJcnN2OjM7CisJVVNIT1JUCQlTVEJDOjI7CS8vU1BBQ0UKKwlVU0hPUlQJCVNob3J0R0k6MTsKKwlVU0hPUlQJCU1vZGU6MjsJLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwlVU0hPUlQgICAJTnVtT2ZSWDoyOyAgICAgICAgICAgICAgICAgLy8gTUlNTy4gV0UgSEFWRSAzUgorI2Vsc2UKKwlVU0hPUlQgICAJTnVtT2ZSWDoyOyAgICAgICAgICAgICAgICAgLy8gTUlNTy4gV0UgSEFWRSAzUgorCVVTSE9SVAkJTW9kZToyOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVTSE9SVAkJU2hvcnRHSToxOworCVVTSE9SVAkJU1RCQzoyOwkvL1NQQUNFCisJVVNIT1JUCQlyc3Y6MzsKKwlVU0hPUlQJCU9GRE06MTsKKwlVU0hPUlQJCU1JTU86MTsKKyNlbmRpZgorIH0gUkVDRUlWRV9TRVRUSU5HLCAqUFJFQ0VJVkVfU0VUVElORzsKKworLy8gU2hhcmVkIGtleSBkYXRhIHN0cnVjdHVyZQordHlwZWRlZiBzdHJ1Y3QgIF9XRVBfS0VZIHsKKwlVQ0hBUiAgIEtleUxlbjsgICAgICAgICAgICAgICAgICAgICAvLyBLZXkgbGVuZ3RoIGZvciBlYWNoIGtleSwgMDogZW50cnkgaXMgaW52YWxpZAorCVVDSEFSICAgS2V5W01BWF9MRU5fT0ZfS0VZXTsgICAgICAgIC8vIHJpZ2h0IG5vdyB3ZSBpbXBsZW1lbnQgNCBrZXlzLCAxMjggYml0cyBtYXgKK30gV0VQX0tFWSwgKlBXRVBfS0VZOworCit0eXBlZGVmIHN0cnVjdCBfQ0lQSEVSX0tFWSB7CisJVUNIQVIgICBLZXlbMTZdOyAgICAgICAgICAgIC8vIHJpZ2h0IG5vdyB3ZSBpbXBsZW1lbnQgNCBrZXlzLCAxMjggYml0cyBtYXgKKwlVQ0hBUiAgIFJ4TWljWzhdOwkJCS8vIG1ha2UgYWxpZ25tZW50CisJVUNIQVIgICBUeE1pY1s4XTsKKwlVQ0hBUiAgIFR4VHNjWzZdOyAgICAgICAgICAgLy8gNDhiaXQgVFNDIHZhbHVlCisJVUNIQVIgICBSeFRzY1s2XTsgICAgICAgICAgIC8vIDQ4Yml0IFRTQyB2YWx1ZQorCVVDSEFSICAgQ2lwaGVyQWxnOyAgICAgICAgICAvLyAwLW5vbmUsIDE6V0VQNjQsIDI6V0VQMTI4LCAzOlRLSVAsIDQ6QUVTLCA1OkNLSVA2NCwgNjpDS0lQMTI4CisJVUNIQVIgICBLZXlMZW47CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJVUNIQVIgICBCc3NJZFs2XTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIC8vIEtleSBsZW5ndGggZm9yIGVhY2gga2V5LCAwOiBlbnRyeSBpcyBpbnZhbGlkCisJVUNIQVIgICBUeXBlOyAgICAgICAgICAgICAgIC8vIEluZGljYXRlIFBhaXJ3aXNlL0dyb3VwIHdoZW4gcmVwb3J0aW5nIE1JQyBlcnJvcgorfSBDSVBIRVJfS0VZLCAqUENJUEhFUl9LRVk7CisKK3R5cGVkZWYgc3RydWN0IF9CQlBfVFVOSU5HX1NUUlVDVCB7CisJQk9PTEVBTiAgICAgRW5hYmxlOworCVVDSEFSICAgICAgIEZhbHNlQ2NhQ291bnRVcHBlckJvdW5kOyAgLy8gMTAwIHBlciBzZWMKKwlVQ0hBUiAgICAgICBGYWxzZUNjYUNvdW50TG93ZXJCb3VuZDsgIC8vIDEwIHBlciBzZWMKKwlVQ0hBUiAgICAgICBSMTdMb3dlckJvdW5kOyAgICAgICAgICAgIC8vIHNwZWNpZmllZCBpbiBFMlBST00KKwlVQ0hBUiAgICAgICBSMTdVcHBlckJvdW5kOyAgICAgICAgICAgIC8vIDB4NjggYWNjb3JkaW5nIHRvIERhdmlkIFR1bmcKKwlVQ0hBUiAgICAgICBDdXJyZW50UjE3VmFsdWU7Cit9IEJCUF9UVU5JTkcsICpQQkJQX1RVTklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1NPRlRfUlhfQU5UX0RJVkVSU0lUWV9TVFJVQ1QgeworCVVDSEFSICAgICBFdmFsdWF0ZVBlcmlvZDsJCSAvLyAwOm5vdCBldmFsdXRlIHN0YXR1cywgMTogZXZhbHVhdGUgc3RhdHVzLCAyOiBzd2l0Y2hpbmcgc3RhdHVzCisJVUNIQVIgICAgIEV2YWx1YXRlU3RhYmxlQ250OworCVVDSEFSICAgICBQYWlyMVByaW1hcnlSeEFudDsgICAgIC8vIDA6QW50LUUxLCAxOkFudC1FMgorCVVDSEFSICAgICBQYWlyMVNlY29uZGFyeVJ4QW50OyAgIC8vIDA6QW50LUUxLCAxOkFudC1FMgorCVVDSEFSICAgICBQYWlyMlByaW1hcnlSeEFudDsgICAgIC8vIDA6QW50LUUzLCAxOkFudC1FNAorCVVDSEFSICAgICBQYWlyMlNlY29uZGFyeVJ4QW50OyAgIC8vIDA6QW50LUUzLCAxOkFudC1FNAorCVNIT1JUICAgICBQYWlyMUF2Z1Jzc2lbMl07ICAgICAgIC8vIEF2Z1Jzc2lbMF06RTEsIEF2Z1Jzc2lbMV06RTIKKwlTSE9SVCAgICAgUGFpcjJBdmdSc3NpWzJdOyAgICAgICAvLyBBdmdSc3NpWzBdOkUzLCBBdmdSc3NpWzFdOkU0CisJU0hPUlQgICAgIFBhaXIxTGFzdEF2Z1Jzc2k7ICAgICAgLy8KKwlTSE9SVCAgICAgUGFpcjJMYXN0QXZnUnNzaTsgICAgICAvLworCVVMT05HICAgICBSY3ZQa3ROdW1XaGVuRXZhbHVhdGU7CisJQk9PTEVBTiAgIEZpcnN0UGt0QXJyaXZlZFdoZW5FdmFsdWF0ZTsKKwlSQUxJTktfVElNRVJfU1RSVUNUICAgIFJ4QW50RGl2ZXJzaXR5VGltZXI7Cit9IFNPRlRfUlhfQU5UX0RJVkVSU0lUWSwgKlBTT0ZUX1JYX0FOVF9ESVZFUlNJVFk7CisKK3R5cGVkZWYgc3RydWN0IF9MRUFQX0FVVEhfSU5GTyB7CisJQk9PTEVBTiAgICAgICAgIEVuYWJsZWQ7ICAgICAgICAvL1R1cmU6IEVuYWJsZSBMRUFQIEF1dGhlbnRpY2F0aW9uCisJQk9PTEVBTiAgICAgICAgIENDS007ICAgICAgICAgICAvL1R1cmU6IFVzZSBGYXN0IFJlYXV0aGVudGljYXRpb24gd2l0aCBDQ0tNCisJVUNIQVIgICAgICAgICAgIFJlc2VydmVbMl07CisJVUNIQVIgICAgICAgICAgIFVzZXJOYW1lWzI1Nl07ICAvL0xFQVAsIFVzZXIgbmFtZQorCVVMT05HICAgICAgICAgICBVc2VyTmFtZUxlbjsKKwlVQ0hBUiAgICAgICAgICAgUGFzc3dvcmRbMjU2XTsgIC8vTEVBUCwgVXNlciBQYXNzd29yZAorCVVMT05HICAgICAgICAgICBQYXNzd29yZExlbjsKK30gTEVBUF9BVVRIX0lORk8sICpQTEVBUF9BVVRIX0lORk87CisKK3R5cGVkZWYgc3RydWN0IHsKKwlVQ0hBUiAgICAgICAgQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICBFcnJvckNvZGVbMl07ICAvLzAwIDAxLUludmFsaWQgYXV0aGVudGljYXRpb24gdHlwZQorCQkJCQkJCQkvLzAwIDAyLUF1dGhlbnRpY2F0aW9uIHRpbWVvdXQKKwkJCQkJCQkJLy8wMCAwMy1DaGFsbGVuZ2UgZnJvbSBBUCBmYWlsZWQKKwkJCQkJCQkJLy8wMCAwNC1DaGFsbGVuZ2UgdG8gQVAgZmFpbGVkCisJQk9PTEVBTiAgICAgIFJlcG9ydGVkOworfSBST0dVRUFQX0VOVFJZLCAqUFJPR1VFQVBfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlVQ0hBUiAgICAgICAgICAgICAgIFJvZ3VlQXBOcjsKKwlST0dVRUFQX0VOVFJZICAgICAgIFJvZ3VlQXBFbnRyeVtNQVhfTEVOX09GX0JTU19UQUJMRV07Cit9IFJPR1VFQVBfVEFCTEUsICpQUk9HVUVBUF9UQUJMRTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUJPT0xFQU4gICAgIEVuYWJsZTsKKwlVQ0hBUiAgICAgICBEZWx0YTsKKwlCT09MRUFOICAgICBQbHVzU2lnbjsKK30gQ0NLX1RYX1BPV0VSX0NBTElCUkFURSwgKlBDQ0tfVFhfUE9XRVJfQ0FMSUJSQVRFOworCisvLworLy8gUmVjZWl2ZSBUdXBsZSBDYWNoZSBGb3JtYXQKKy8vCit0eXBlZGVmIHN0cnVjdCAgX1RVUExFX0NBQ0hFICAgIHsKKwlCT09MRUFOICAgICAgICAgVmFsaWQ7CisJVUNIQVIgICAgICAgICAgIE1hY0FkZHJlc3NbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQgICAgICAgICAgU2VxdWVuY2U7CisJVVNIT1JUICAgICAgICAgIEZyYWc7Cit9IFRVUExFX0NBQ0hFLCAqUFRVUExFX0NBQ0hFOworCisvLworLy8gRnJhZ21lbnQgRnJhbWUgc3RydWN0dXJlCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9GUkFHTUVOVF9GUkFNRSB7CisJUE5ESVNfUEFDS0VUICAgIHBGcmFnUGFja2V0OworCVVMT05HICAgICAgIFJ4U2l6ZTsKKwlVU0hPUlQgICAgICBTZXF1ZW5jZTsKKwlVU0hPUlQgICAgICBMYXN0RnJhZzsKKwlVTE9ORyAgICAgICBGbGFnczsgICAgICAgICAgLy8gU29tZSBleHRyYSBmcmFtZSBpbmZvcm1hdGlvbi4gYml0IDA6IExMQyBwcmVzZW50ZWQKK30gRlJBR01FTlRfRlJBTUUsICpQRlJBR01FTlRfRlJBTUU7CisKKworLy8KKy8vIFBhY2tldCBpbmZvcm1hdGlvbiBmb3IgTmRpc1F1ZXJ5UGFja2V0CisvLwordHlwZWRlZiBzdHJ1Y3QgIF9QQUNLRVRfSU5GTyAgICB7CisJVUlOVCAgICAgICAgICAgIFBoeXNpY2FsQnVmZmVyQ291bnQ7ICAgIC8vIFBoeXNpY2FsIGJyZWFrcyBvZiBidWZmZXIgZGVzY3JpcG9yIGNoYWluZWQKKwlVSU5UICAgICAgICAgICAgQnVmZmVyQ291bnQgOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIEJ1ZmZlciBkZXNjcmlwdG9yIGNoYWluZWQKKwlVSU5UICAgICAgICAgICAgVG90YWxQYWNrZXRMZW5ndGggOyAgICAgLy8gU2VsZiBleHBsYWluZWQKKwlQTkRJU19CVUZGRVIgICAgcEZpcnN0QnVmZmVyOyAgICAgICAgICAgLy8gUG9pbnRlciB0byBmaXJzdCBidWZmZXIgZGVzY3JpcHRvcgorfSBQQUNLRVRfSU5GTywgKlBQQUNLRVRfSU5GTzsKKworLy8KKy8vIFRraXAgS2V5IHN0cnVjdHVyZSB3aGljaCBSQzQga2V5ICYgTUlDIGNhbGN1bGF0aW9uCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9US0lQX0tFWV9JTkZPICB7CisJVUlOVCAgICAgICAgbkJ5dGVzSW5NOyAgLy8gIyBieXRlcyBpbiBNIGZvciBNSUNLRVkKKwlVTE9ORyAgICAgICBJVjE2OworCVVMT05HICAgICAgIElWMzI7CisJVUxPTkcgICAgICAgSzA7ICAgICAgICAgLy8gZm9yIE1JQ0tFWSBMb3cKKwlVTE9ORyAgICAgICBLMTsgICAgICAgICAvLyBmb3IgTUlDS0VZIEhpZworCVVMT05HICAgICAgIEw7ICAgICAgICAgIC8vIEN1cnJlbnQgc3RhdGUgZm9yIE1JQ0tFWQorCVVMT05HICAgICAgIFI7ICAgICAgICAgIC8vIEN1cnJlbnQgc3RhdGUgZm9yIE1JQ0tFWQorCVVMT05HICAgICAgIE07ICAgICAgICAgIC8vIE1lc3NhZ2UgYWNjdW11bGF0b3IgZm9yIE1JQ0tFWQorCVVDSEFSICAgICAgIFJDNEtFWVsxNl07CisJVUNIQVIgICAgICAgTUlDWzhdOworfSBUS0lQX0tFWV9JTkZPLCAqUFRLSVBfS0VZX0lORk87CisKKy8vCisvLyBQcml2YXRlIC8gTWlzYyBkYXRhLCBjb3VudGVycyBmb3IgZHJpdmVyIGludGVybmFsIHVzZQorLy8KK3R5cGVkZWYgc3RydWN0ICBfX1BSSVZBVEVfU1RSVUMgeworCVVJTlQgICAgICAgU3lzdGVtUmVzZXRDbnQ7ICAgICAgICAgLy8gU3lzdGVtIHJlc2V0IGNvdW50ZXIKKwlVSU5UICAgICAgIFR4UmluZ0Z1bGxDbnQ7ICAgICAgICAgIC8vIFR4IHJpbmcgZnVsbCBvY2N1cnJhbmNlIG51bWJlcgorCVVJTlQgICAgICAgUGh5UnhFcnJDbnQ7ICAgICAgICAgICAgLy8gUEhZIFJ4IGVycm9yIGNvdW50LCBmb3IgZGVidWcgcHVycG9zZSwgbWlnaHQgbW92ZSB0byBnbG9iYWwgY291bnRlcgorCS8vIFZhcmlhYmxlcyBmb3IgV0VQIGVuY3J5cHRpb24gLyBkZWNyeXB0aW9uIGluIHJ0bXBfd2VwLmMKKwlVSU5UICAgICAgIEZDU0NSQzMyOworCUFSQ0ZPVVJDT05URVhUICBXRVBDT05URVhUOworCS8vIFRraXAgc3R1ZmYKKwlUS0lQX0tFWV9JTkZPICAgVHg7CisJVEtJUF9LRVlfSU5GTyAgIFJ4OworfSBQUklWQVRFX1NUUlVDLCAqUFBSSVZBVEVfU1RSVUM7CisKKy8vIHN0cnVjdHVyZSB0byB0dW5lIEJCUCBSNjYgKEJCUCBUVU5JTkcpCit0eXBlZGVmIHN0cnVjdCBfQkJQX1I2Nl9UVU5JTkcgeworCUJPT0xFQU4gICAgIGJFbmFibGU7CisJVVNIT1JUICAgICAgRmFsc2VDY2FMb3dlclRocmVzaG9sZDsgIC8vIGRlZmF1bHQgMTAwCisJVVNIT1JUICAgICAgRmFsc2VDY2FVcHBlclRocmVzaG9sZDsgIC8vIGRlZmF1bHQgNTEyCisJVUNIQVIgICAgICAgUjY2RGVsdGE7CisJVUNIQVIgICAgICAgUjY2Q3VycmVudFZhbHVlOworCUJPT0xFQU4JCVI2Nkxvd2VyVXBwZXJTZWxlY3Q7IC8vQmVmb3JlIExpbmtVcCwgVXNlZCBMb3dlckJvdW5kIG9yIFVwcGVyQm91bmQgYXMgUjY2IHZhbHVlLgorfSBCQlBfUjY2X1RVTklORywgKlBCQlBfUjY2X1RVTklORzsKKworLy8gc3RydWN0dXJlIHRvIHN0b3JlIGNoYW5uZWwgVFggcG93ZXIKK3R5cGVkZWYgc3RydWN0IF9DSEFOTkVMX1RYX1BPV0VSIHsKKwlVU0hPUlQgICAgIFJlbWFpbmluZ1RpbWVGb3JVc2U7CQkvL3VuaXQ6IHNlYworCVVDSEFSICAgICAgQ2hhbm5lbDsKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJQk9PTEVBTiAgICAgICBiRWZmZWN0ZWRDaGFubmVsOwkvLyBGb3IgQlcgNDAgb3BlcmF0aW5nIGluIDIuNEdIeiAsIHRoZSAiZWZmZWN0ZWQgY2hhbm5lbCIgaXMgdGhlIGNoYW5uZWwgdGhhdCBpcyBjb3ZlcmVkIGluIDQwTWh6LgorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKwlDSEFSICAgICAgIFBvd2VyOworCUNIQVIgICAgICAgUG93ZXIyOworCVVDSEFSICAgICAgTWF4VHhQd3I7CisJVUNIQVIgICAgICBEZnNSZXE7Cit9IENIQU5ORUxfVFhfUE9XRVIsICpQQ0hBTk5FTF9UWF9QT1dFUjsKKworLy8gc3RydWN0dXJlIHRvIHN0b3JlIDgwMi4xMWogY2hhbm5lbCBUWCBwb3dlcgordHlwZWRlZiBzdHJ1Y3QgX0NIQU5ORUxfMTFKX1RYX1BPV0VSIHsKKwlVQ0hBUiAgICAgIENoYW5uZWw7CisJVUNIQVIgICAgICBCVzsJLy8gQldfMTAgb3IgQldfMjAKKwlDSEFSICAgICAgIFBvd2VyOworCUNIQVIgICAgICAgUG93ZXIyOworCVVTSE9SVCAgICAgUmVtYWluaW5nVGltZUZvclVzZTsJCS8vdW5pdDogc2VjCit9IENIQU5ORUxfMTFKX1RYX1BPV0VSLCAqUENIQU5ORUxfMTFKX1RYX1BPV0VSOworCit0eXBlZGVmIGVudW0gX0FCR0JBTkRfU1RBVEVfIHsKKwlVTktOT1dOX0JBTkQsCisJQkdfQkFORCwKKwlBX0JBTkQsCit9IEFCR0JBTkRfU1RBVEU7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX1NUUlVDVCB7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJLy8gU1RBIHN0YXRlIG1hY2hpbmVzCisJU1RBVEVfTUFDSElORSAgICAgICAgICAgQ250bE1hY2hpbmU7CisJU1RBVEVfTUFDSElORSAgICAgICAgICAgQXNzb2NNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIEF1dGhNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIEF1dGhSc3BNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIFN5bmNNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIFdwYVBza01hY2hpbmU7CisJU1RBVEVfTUFDSElORSAgICAgICAgICAgTGVhcE1hY2hpbmU7CisJU1RBVEVfTUFDSElORSAgICAgICAgICAgQWlyb25ldE1hY2hpbmU7CisJU1RBVEVfTUFDSElORV9GVU5DICAgICAgQXNzb2NGdW5jW0FTU09DX0ZVTkNfU0laRV07CisJU1RBVEVfTUFDSElORV9GVU5DICAgICAgQXV0aEZ1bmNbQVVUSF9GVU5DX1NJWkVdOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIEF1dGhSc3BGdW5jW0FVVEhfUlNQX0ZVTkNfU0laRV07CisJU1RBVEVfTUFDSElORV9GVU5DICAgICAgU3luY0Z1bmNbU1lOQ19GVU5DX1NJWkVdOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIFdwYVBza0Z1bmNbV1BBX1BTS19GVU5DX1NJWkVdOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIEFpcm9uZXRGdW5jW0FJUk9ORVRfRlVOQ19TSVpFXTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlTVEFURV9NQUNISU5FX0ZVTkMgICAgICBBY3RGdW5jW0FDVF9GVU5DX1NJWkVdOworCS8vIEFjdGlvbgorCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIEFjdE1hY2hpbmU7CisKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCVNUQVRFX01BQ0hJTkUJCQlEbHNNYWNoaW5lOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIERsc0Z1bmNbRExTX0ZVTkNfU0laRV07CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKworCisKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBDaGFubmVsUXVhbGl0eTsgIC8vIDAuLjEwMCwgQ2hhbm5lbCBRdWFsaXR5IEluZGljYXRpb24gZm9yIFJvYW1pbmcKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBOb3czMjsgICAgICAgICAgIC8vIGxhdGNoIHRoZSB2YWx1ZSBvZiBOZGlzR2V0U3lzdGVtVXBUaW1lKCkKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBMYXN0U2VuZE5VTExwc21UaW1lOworCisJQk9PTEVBTiAgICAgICAgICAgICAgICAgYlJ1bm5pbmc7CisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgVGFza0xvY2s7CisJTUxNRV9RVUVVRSAgICAgICAgICAgICAgUXVldWU7CisKKwlVSU5UICAgICAgICAgICAgICAgICAgICBTaGlmdFJlZzsKKworCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIFBlcmlvZGljVGltZXI7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgQVBTRFBlcmlvZGljVGltZXI7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgTGlua0Rvd25UaW1lcjsKKwlSQUxJTktfVElNRVJfU1RSVUNUICAgICBMaW5rVXBUaW1lcjsKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1JvdW5kOworCVVMT05HICAgICAgICAgICAgICAgICAgIE9uZVNlY1BlcmlvZGljUm91bmQ7CisKKwlVQ0hBUgkJCQkJUmVhbFJ4UGF0aDsKKwlCT09MRUFOCQkJCQliTG93VGhyb3VnaHB1dDsKKwlCT09MRUFOCQkJCQliRW5hYmxlQXV0b0FudGVubmFDaGVjazsKKwlSQUxJTktfVElNRVJfU1RSVUNUCQlSeEFudEV2YWxUaW1lcjsKKworI2lmZGVmIFJUMzB4eAorCVVDSEFSIENhbGlCVzQwUmZSMjQ7CisJVUNIQVIgQ2FsaUJXMjBSZlIyNDsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworfSBNTE1FX1NUUlVDVCwgKlBNTE1FX1NUUlVDVDsKKworLy8gc3RydWN0dXJlIGZvciByYWRhciBkZXRlY3Rpb24gYW5kIGNoYW5uZWwgc3dpdGNoCit0eXBlZGVmIHN0cnVjdCBfUkFEQVJfREVURUNUX1NUUlVDVCB7CisgICAgLy9CT09MRUFOCQlJRUVFODAyMTFIOwkJCS8vIDA6IGRpc2FibGUsIDE6IGVuYWJsZSBJRUVFODAyLjExaAorCVVDSEFSCQlDU0NvdW50OwkJCS8vQ2hhbm5lbCBzd2l0Y2ggY291bnRlcgorCVVDSEFSCQlDU1BlcmlvZDsJCQkvL0NoYW5uZWwgc3dpdGNoIHBlcmlvZCAoYmVhY29uIGNvdW50KQorCVVDSEFSCQlSRENvdW50OwkJCS8vUmFkYXIgZGV0ZWN0aW9uIGNvdW50ZXIKKwlVQ0hBUgkJUkRNb2RlOwkJCQkvL1JhZGFyIERldGVjdGlvbiBtb2RlCisJVUNIQVIJCVJERHVyUmVnaW9uOwkJLy9SYWRhciBkZXRlY3Rpb24gZHVyYXRpb24gcmVnaW9uCisJVUNIQVIJCUJCUFIxNjsKKwlVQ0hBUgkJQkJQUjE3OworCVVDSEFSCQlCQlBSMTg7CisJVUNIQVIJCUJCUFIyMTsKKwlVQ0hBUgkJQkJQUjIyOworCVVDSEFSCQlCQlBSNjQ7CisJVUxPTkcJCUluU2VydmljZU1vbml0b3JDb3VudDsgLy8gdW5pdDogc2VjCisJVUlOVDgJCURmc1Nlc3Npb25UaW1lOworCUJPT0xFQU4JCWJGYXN0RGZzOworCVVJTlQ4CQlDaE1vdmluZ1RpbWU7CisJVUlOVDgJCUxvbmdQdWxzZVJhZGFyVGg7Cit9IFJBREFSX0RFVEVDVF9TVFJVQ1QsICpQUkFEQVJfREVURUNUX1NUUlVDVDsKKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKK3R5cGVkZWYgZW51bSBDRF9TVEFURV9uCit7CisJQ0RfTk9STUFMLAorCUNEX1NJTEVOQ0UsCisJQ0RfTUFYX1NUQVRFCit9IENEX1NUQVRFOworCit0eXBlZGVmIHN0cnVjdCBDQVJSSUVSX0RFVEVDVElPTl9zCit7CisJQk9PTEVBTgkJCQkJRW5hYmxlOworCVVJTlQ4CQkJCQlDRFNlc3Npb25UaW1lOworCVVJTlQ4CQkJCQlDRFBlcmlvZDsKKwlDRF9TVEFURQkJCQlDRF9TdGF0ZTsKK30gQ0FSUklFUl9ERVRFQ1RJT04sICpQQ0FSUklFUl9ERVRFQ1RJT047CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCit0eXBlZGVmIGVudW0gX1JFQ19CTE9DS0FDS19TVEFUVVMKK3sKKyAgICBSZWNpcGllbnRfTk9ORT0wLAorCVJlY2lwaWVudF9VU0VELAorCVJlY2lwaWVudF9IYW5kbGVSZXMsCisgICAgUmVjaXBpZW50X0FjY2VwdAorfSBSRUNfQkxPQ0tBQ0tfU1RBVFVTLCAqUFJFQ19CTE9DS0FDS19TVEFUVVM7CisKK3R5cGVkZWYgZW51bSBfT1JJX0JMT0NLQUNLX1NUQVRVUworeworICAgIE9yaWdpbmF0b3JfTk9ORT0wLAorCU9yaWdpbmF0b3JfVVNFRCwKKyAgICBPcmlnaW5hdG9yX1dhaXRSZXMsCisgICAgT3JpZ2luYXRvcl9Eb25lCit9IE9SSV9CTE9DS0FDS19TVEFUVVMsICpQT1JJX0JMT0NLQUNLX1NUQVRVUzsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QgX0JBX09SSV9FTlRSWXsKKwlVQ0hBUiAgIFdjaWQ7CisJVUNIQVIgICBUSUQ7CisJVUNIQVIgICBCQVdpblNpemU7CisJVUNIQVIgICBUb2tlbjsKKy8vIFNlcXVlbmNlIGlzIHRvIGZpbGwgZXZlcnkgb3V0Z29pbmcgUW9TIERBVEEgZnJhbWUncyBzZXF1ZW5jZSBmaWVsZCBpbiA4MDIuMTEgaGVhZGVyLgorCVVTSE9SVAlTZXF1ZW5jZTsKKwlVU0hPUlQJVGltZU91dFZhbHVlOworCU9SSV9CTE9DS0FDS19TVEFUVVMgIE9SSV9CQV9TdGF0dXM7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCBPUklCQVRpbWVyOworCVBWT0lECXBBZGFwdGVyOworfSBCQV9PUklfRU5UUlksICpQQkFfT1JJX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfQkFfUkVDX0VOVFJZIHsKKwlVQ0hBUiAgIFdjaWQ7CisJVUNIQVIgICBUSUQ7CisJVUNIQVIgICBCQVdpblNpemU7CS8vIDcuMy4xLjE0LiBlYWNoIGJ1ZmZlciBpcyBjYXBhYmxlIG9mIGhvbGRpbmcgYSBtYXggQU1TRFUgb3IgTVNEVS4KKwkvL1VDSEFSCU51bU9mUnhQa3Q7CisJLy9VQ0hBUiAgICBDdXJpbmRpZHg7IC8vIHRoZSBoZWFkIGluIHRoZSBSWCByZW9yZGVyaW5nIGJ1ZmZlcgorCVVTSE9SVAkJTGFzdEluZFNlcTsKKy8vCVVTSE9SVAkJTGFzdEluZFNlcUF0VGltZXI7CisJVVNIT1JUCQlUaW1lT3V0VmFsdWU7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCBSRUNCQVRpbWVyOworCVVMT05HCQlMYXN0SW5kU2VxQXRUaW1lcjsKKwlVTE9ORwkJbkRyb3BQYWNrZXQ7CisJVUxPTkcJCXJjdlNlcTsKKwlSRUNfQkxPQ0tBQ0tfU1RBVFVTICBSRUNfQkFfU3RhdHVzOworLy8JVUNIQVIJUnhCdWZJZHhVc2VkOworCS8vIGNvcnJlc3BvbmRpbmcgdmlydHVhbCBhZGRyZXNzIGZvciBSWCByZW9yZGVyaW5nIHBhY2tldCBzdG9yYWdlLgorCS8vUlRNUF9SRU9SREVSRE1BQlVGIE1BUF9SWEJ1ZltNQVhfUlhfUkVPUkRFUkJVRl07CisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgUnhSZVJpbmdMb2NrOyAgICAgICAgICAgICAgICAgLy8gUnggUmluZyBzcGlubG9jaworLy8Jc3RydWN0IF9CQV9SRUNfRU5UUlkgKnBOZXh0OworCVBWT0lECXBBZGFwdGVyOworCXN0cnVjdCByZW9yZGVyaW5nX2xpc3QJbGlzdDsKK30gQkFfUkVDX0VOVFJZLCAqUEJBX1JFQ19FTlRSWTsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJVUxPTkcJCW51bUFzUmVjaXBpZW50OwkJLy8gSSBhbSByZWNpcGllbnQgb2YgbnVtQXNSZWNpcGllbnQgY2xpZW50cy4gVGhlc2UgY2xpZW50IGFyZSBpbiB0aGUgQkFSZWNFbnRyeVtdCisJVUxPTkcJCW51bUFzT3JpZ2luYXRvcjsJLy8gSSBhbSBvcmlnaW5hdG9yIG9mIAludW1Bc09yaWdpbmF0b3IgY2xpZW50cy4gVGhlc2UgY2xpZW50cyBhcmUgaW4gdGhlIEJBT3JpRW50cnlbXQorCUJBX09SSV9FTlRSWSAgICAgICBCQU9yaUVudHJ5W01BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFXTsKKwlCQV9SRUNfRU5UUlkgICAgICAgQkFSZWNFbnRyeVtNQVhfTEVOX09GX0JBX1JFQ19UQUJMRV07Cit9IEJBX1RBQkxFLCAqUEJBX1RBQkxFOworCisvL0ZvciBRdXJleUJBVGFibGVPSUQgdXNlOwordHlwZWRlZiBzdHJ1Y3QgIFBBQ0tFRCBfT0lEX0JBX1JFQ19FTlRSWXsKKwlVQ0hBUiAgIE1BQ0FkZHJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgIEJhQml0bWFwOyAgIC8vIGlmIChCYUJpdG1hcCYoMTw8VElEKSksIHRoaXMgc2Vzc2lvbiB3aXRoe01BQ0FkZHIsIFRJRH1leGlzdHMsIHNvIHJlYWQgQnVmU2l6ZVtUSURdIGZvciBCdWZmZXJTaXplCisJVUNIQVIgICByc3Y7CisJVUNIQVIgICBCdWZTaXplWzhdOworCVJFQ19CTE9DS0FDS19TVEFUVVMJUkVDX0JBX1N0YXR1c1s4XTsKK30gT0lEX0JBX1JFQ19FTlRSWSwgKlBPSURfQkFfUkVDX0VOVFJZOworCisvL0ZvciBRdXJleUJBVGFibGVPSUQgdXNlOwordHlwZWRlZiBzdHJ1Y3QgIFBBQ0tFRCBfT0lEX0JBX09SSV9FTlRSWXsKKwlVQ0hBUiAgIE1BQ0FkZHJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgIEJhQml0bWFwOyAgLy8gaWYgKEJhQml0bWFwJigxPDxUSUQpKSwgdGhpcyBzZXNzaW9uIHdpdGh7TUFDQWRkciwgVElEfWV4aXN0cywgc28gcmVhZCBCdWZTaXplW1RJRF0gZm9yIEJ1ZmZlclNpemUsIHJlYWQgT1JJX0JBX1N0YXR1c1tUSURdIGZvciBzdGF0dXMKKwlVQ0hBUiAgIHJzdjsKKwlVQ0hBUiAgIEJ1ZlNpemVbOF07CisJT1JJX0JMT0NLQUNLX1NUQVRVUyAgT1JJX0JBX1N0YXR1c1s4XTsKK30gT0lEX0JBX09SSV9FTlRSWSwgKlBPSURfQkFfT1JJX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUVVFUllCQV9UQUJMRXsKKwlPSURfQkFfT1JJX0VOVFJZICAgICAgIEJBT3JpRW50cnlbMzJdOworCU9JRF9CQV9SRUNfRU5UUlkgICAgICAgQkFSZWNFbnRyeVszMl07CisJVUNIQVIgICBPcmlOdW07Ly8gTnVtYmVyIG9mIGJlbG93IEJBT3JpRW50cnkKKwlVQ0hBUiAgIFJlY051bTsvLyBOdW1iZXIgb2YgYmVsb3cgQkFSZWNFbnRyeQorfSBRVUVSWUJBX1RBQkxFLCAqUFFVRVJZQkFfVEFCTEU7CisKK3R5cGVkZWYJdW5pb24JX0JBQ0FQX1NUUlVDCXsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJc3RydWN0CXsKKwkJVUlOVDMyICAgICA6NDsKKwkJVUlOVDMyICAgICBiMjA0MENvZXhpc3RTY2FuU3VwOjE7CQkvL0FzIFN0YSwgc3VwcG9ydCBkbyAyMDQwIGNvZXhpc3RlbmNlIHNjYW4gZm9yIEFQLiBBcyBBcCwgc3VwcG9ydCBtb25pdG9yIHRyaWdnZXIgZXZlbnQgdG8gY2hlY2sgaWYgY2FuIHVzZSBCVyA0ME1Iei4KKwkJVUlOVDMyICAgICBiSHRBZGhvYzoxOwkJCS8vIGFkaG9jIGNhbiB1c2UgaHQgcmF0ZS4KKwkJVUlOVDMyICAgICBNTVBTbW9kZToyOwkvLyBNSU1PIHBvd2VyIHNhdmUgbW9yZSwgMDpzdGF0aWMsIDE6ZHluYW1pYywgMjpyc3YsIDM6bWltbyBlbmFibGUKKwkJVUlOVDMyICAgICBBbXNkdVNpemU6MTsJLy8gMDozODM5LCAxOjc5MzUgYnl0ZXMuIFVJTlQgIE1TRFVTaXplVG9CeXRlc1tdCT0geyAzODM5LCA3OTM1fTsKKwkJVUlOVDMyICAgICBBbXNkdUVuYWJsZToxOwkvL0VuYWJsZSBBTVNEVSB0cmFuc21pc3N0aW9uCisJCVVJTlQzMgkJTXBkdURlbnNpdHk6MzsKKwkJVUlOVDMyCQlQb2xpY3k6MjsJLy8gMDogREVMQVlfQkEgMTpJTU1FRF9CQSAgKC8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lKSAgIDI6QkEtbm90IHVzZQorCQlVSU5UMzIJCUF1dG9CQToxOwkvLyBhdXRvbWF0aWNhbGx5IEJBCisJCVVJTlQzMgkJVHhCQVdpbkxpbWl0Ojg7CisJCVVJTlQzMgkJUnhCQVdpbkxpbWl0Ojg7CisJfQlmaWVsZDsKKyNlbHNlCisJc3RydWN0CXsKKwkJVUlOVDMyCQlSeEJBV2luTGltaXQ6ODsKKwkJVUlOVDMyCQlUeEJBV2luTGltaXQ6ODsKKwkJVUlOVDMyCQlBdXRvQkE6MTsJLy8gYXV0b21hdGljYWxseSBCQQorCQlVSU5UMzIJCVBvbGljeToyOwkvLyAwOiBERUxBWV9CQSAxOklNTUVEX0JBICAoLy9CQSBQb2xpY3kgc3ViZmlsZWQgdmFsdWUgaW4gQUREQkEgZnJhbWUpICAgMjpCQS1ub3QgdXNlCisJCVVJTlQzMgkJTXBkdURlbnNpdHk6MzsKKwkJVUlOVDMyICAgICAgIAlBbXNkdUVuYWJsZToxOwkvL0VuYWJsZSBBTVNEVSB0cmFuc21pc3N0aW9uCisJCVVJTlQzMiAgICAgICAJQW1zZHVTaXplOjE7CS8vIDA6MzgzOSwgMTo3OTM1IGJ5dGVzLiBVSU5UICBNU0RVU2l6ZVRvQnl0ZXNbXQk9IHsgMzgzOSwgNzkzNX07CisJCVVJTlQzMiAgICAgICAJTU1QU21vZGU6MjsJLy8gTUlNTyBwb3dlciBzYXZlIG1vcmUsIDA6c3RhdGljLCAxOmR5bmFtaWMsIDI6cnN2LCAzOm1pbW8gZW5hYmxlCisJCVVJTlQzMiAgICAgICAJYkh0QWRob2M6MTsJCQkvLyBhZGhvYyBjYW4gdXNlIGh0IHJhdGUuCisJCVVJTlQzMiAgICAgICAJYjIwNDBDb2V4aXN0U2NhblN1cDoxOwkJLy9BcyBTdGEsIHN1cHBvcnQgZG8gMjA0MCBjb2V4aXN0ZW5jZSBzY2FuIGZvciBBUC4gQXMgQXAsIHN1cHBvcnQgbW9uaXRvciB0cmlnZ2VyIGV2ZW50IHRvIGNoZWNrIGlmIGNhbiB1c2UgQlcgNDBNSHouCisJCVVJTlQzMiAgICAgICAJOjQ7CisJfQlmaWVsZDsKKyNlbmRpZgorCVVJTlQzMgkJCXdvcmQ7Cit9IEJBQ0FQX1NUUlVDLCAqUEJBQ0FQX1NUUlVDOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvL1RoaXMgc3RydWN0dXJlIGlzIGZvciBhbGwgODAyLjExbiBjYXJkIEludGVyT3B0aWJpbGl0eVRlc3QgYWN0aW9uLiBSZXNldCBhbGwgTnVtIGV2ZXJ5IG4gc2Vjb25kLiAgKERldGFpbHMgc2VlIE1MTUVQZXJpb2RpYykKK3R5cGVkZWYJc3RydWN0CV9JT1RfU1RSVUMJeworCVVDSEFSCQkJVGhyZXNob2xkWzJdOworCVVDSEFSCQkJUmVvcmRlclRpbWVPdXROdW1bTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEVdOwkvLyBjb21wYXJlIHdpdGggdGhyZXNob2xkWzBdCisJVUNIQVIJCQlSZWZyZXNoTnVtW01BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFXTsJLy8gY29tcGFyZSB3aXRoIHRocmVzaG9sZFsxXQorCVVMT05HCQkJT25lU2VjSW5XaW5kb3dDb3VudDsKKwlVTE9ORwkJCU9uZVNlY0ZyYW1lRHVwbGljYXRlQ291bnQ7CisJVUxPTkcJCQlPbmVTZWNPdXRXaW5kb3dDb3VudDsKKwlVQ0hBUgkJCURlbE9yaUFjdDsKKwlVQ0hBUgkJCURlbFJlY0FjdDsKKwlVQ0hBUgkJCVJUU1Nob3J0UHJvdDsKKwlVQ0hBUgkJCVJUU0xvbmdQcm90OworCUJPT0xFQU4JCQliUlRTTG9uZ1Byb3RPbjsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlCT09MRUFOCQkJYkxhc3RBdGhlcm9zOworICAgIEJPT0xFQU4JCQliQ3VycmVudEF0aGVyb3M7CisgICAgQk9PTEVBTiAgICAgICAgIGJOb3dBdGhlcm9zQnVyc3RPbjsKKwlCT09MRUFOCQkJYk5leHREaXNhYmxlUnhCQTsKKyAgICBCT09MRUFOCQkJYlRvZ2dsZTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KK30gSU9UX1NUUlVDLCAqUElPVF9TVFJVQzsKKworLy8gVGhpcyBpcyB0aGUgcmVnaXN0cnkgc2V0dGluZyBmb3IgODAyLjExbiB0cmFuc21pdCBzZXR0aW5nLiAgVXNlZCBpbiBhZHZhbmNlZCBwYWdlLgordHlwZWRlZiB1bmlvbiBfUkVHX1RSQU5TTUlUX1NFVFRJTkcgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyBzdHJ1Y3QgeworICAgICAgICAgVUlOVDMyICByc3Y6MTM7CisJCSBVSU5UMzIgIEVYVENIQToyOworCQkgVUlOVDMyICBIVE1PREU6MTsKKwkJIFVJTlQzMiAgVFJBTlNOTzoyOworCQkgVUlOVDMyICBTVEJDOjE7IC8vU1BBQ0UKKwkJIFVJTlQzMiAgU2hvcnRHSToxOworCQkgVUlOVDMyICBCVzoxOyAvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCQkgVUlOVDMyICBUeEJGOjE7IC8vIDMqMworCQkgVUlOVDMyICByc3YwOjEwOworCQkgLy9VSU5UMzIgIE1DUzo3OyAgICAgICAgICAgICAgICAgLy8gTUNTCisgICAgICAgICAvL1VJTlQzMiAgUGh5TW9kZTo0OworICAgIH0gZmllbGQ7CisjZWxzZQorIHN0cnVjdCB7CisgICAgICAgICAvL1VJTlQzMiAgUGh5TW9kZTo0OworICAgICAgICAgLy9VSU5UMzIgIE1DUzo3OyAgICAgICAgICAgICAgICAgLy8gTUNTCisJCSBVSU5UMzIgIHJzdjA6MTA7CisJCSBVSU5UMzIgIFR4QkY6MTsKKyAgICAgICAgIFVJTlQzMiAgQlc6MTsgLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKyAgICAgICAgIFVJTlQzMiAgU2hvcnRHSToxOworICAgICAgICAgVUlOVDMyICBTVEJDOjE7IC8vU1BBQ0UKKyAgICAgICAgIFVJTlQzMiAgVFJBTlNOTzoyOworICAgICAgICAgVUlOVDMyICBIVE1PREU6MTsKKyAgICAgICAgIFVJTlQzMiAgRVhUQ0hBOjI7CisgICAgICAgICBVSU5UMzIgIHJzdjoxMzsKKyAgICB9IGZpZWxkOworI2VuZGlmCisgVUlOVDMyICAgd29yZDsKK30gUkVHX1RSQU5TTUlUX1NFVFRJTkcsICpQUkVHX1RSQU5TTUlUX1NFVFRJTkc7CisKK3R5cGVkZWYgdW5pb24gIF9ERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlzdHJ1Y3QJeworCQkJVVNIT1JUCQlyc3Y6MzsKKwkJCVVTSE9SVAkJRml4ZWRUeE1vZGU6MjsJCQkvLyBJZiBNQ1MgaXNuJ3QgQVVUTywgZml4IHJhdGUgaW4gQ0NLLCBPRkRNIG9yIEhUIG1vZGUuCisJCQlVU0hPUlQJCVBoeU1vZGU6NDsKKwkJCVVTSE9SVCAgIAlNQ1M6NzsgICAgICAgICAgICAgICAgIC8vIE1DUworCX0JZmllbGQ7CisjZWxzZQorCXN0cnVjdAl7CisJCQlVU0hPUlQgICAJTUNTOjc7ICAgICAgICAgICAgICAgICAJLy8gTUNTCisJCQlVU0hPUlQJCVBoeU1vZGU6NDsKKwkJCVVTSE9SVAkgCUZpeGVkVHhNb2RlOjI7CQkJLy8gSWYgTUNTIGlzbid0IEFVVE8sIGZpeCByYXRlIGluIENDSywgT0ZETSBvciBIVCBtb2RlLgorCQkJVVNIT1JUCQlyc3Y6MzsKKwl9CWZpZWxkOworI2VuZGlmCisJVVNIT1JUCQl3b3JkOworIH0gREVTSVJFRF9UUkFOU01JVF9TRVRUSU5HLCAqUERFU0lSRURfVFJBTlNNSVRfU0VUVElORzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUJPT0xFQU4JCUlzUmVjaXBpZW50OworCVVDSEFSICAgTUFDQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgVElEOworCVVDSEFSICAgbk1TRFU7CisJVVNIT1JUICAgVGltZU91dDsKKwlCT09MRUFOIGJBbGxUaWQ7ICAvLyBJZiBUcnVlLCBkZWxldGUgYWxsIFRJRCBmb3IgQkEgc2Vzc2lvbnMgd2l0aCB0aGlzIE1BQ2FkZHIuCit9IE9JRF9BRERfQkFfRU5UUlksICpQT0lEX0FERF9CQV9FTlRSWTsKKworLy8KKy8vIE11bHRpcGxlIFNTSUQgc3RydWN0dXJlCisvLworI2RlZmluZSBXTEFOX01BWF9OVU1fT0ZfVElNCQkJKChNQVhfTEVOX09GX01BQ19UQUJMRSA+PiAzKSArIDEpIC8qIC84ICsgMSAqLworI2RlZmluZSBXTEFOX0NUX1RJTV9CQ01DX09GRlNFVAkJMCAvKiB1bml0OiAzMkIgKi8KKworLyogY2xlYXIgYmNtYyBUSU0gYml0ICovCisjZGVmaW5lIFdMQU5fTVJfVElNX0JDTUNfQ0xFQVIoYXBpZHgpIFwKKwlwQWQtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uVGltQml0bWFwc1tXTEFOX0NUX1RJTV9CQ01DX09GRlNFVF0gJj0gfkJJVDhbMF07CisKKy8qIHNldCBiY21jIFRJTSBiaXQgKi8KKyNkZWZpbmUgV0xBTl9NUl9USU1fQkNNQ19TRVQoYXBpZHgpIFwKKwlwQWQtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uVGltQml0bWFwc1tXTEFOX0NUX1RJTV9CQ01DX09GRlNFVF0gfD0gQklUOFswXTsKKworLyogY2xlYXIgYSBzdGF0aW9uIFBTIFRJTSBiaXQgKi8KKyNkZWZpbmUgV0xBTl9NUl9USU1fQklUX0NMRUFSKGFkX3AsIGFwaWR4LCB3Y2lkKSBcCisJewlVQ0hBUiB0aW1fb2Zmc2V0ID0gd2NpZCA+PiAzOyBcCisJCVVDSEFSIGJpdF9vZmZzZXQgPSB3Y2lkICYgMHg3OyBcCisJCWFkX3AtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uVGltQml0bWFwc1t0aW1fb2Zmc2V0XSAmPSAofkJJVDhbYml0X29mZnNldF0pOyB9CisKKy8qIHNldCBhIHN0YXRpb24gUFMgVElNIGJpdCAqLworI2RlZmluZSBXTEFOX01SX1RJTV9CSVRfU0VUKGFkX3AsIGFwaWR4LCB3Y2lkKSBcCisJewlVQ0hBUiB0aW1fb2Zmc2V0ID0gd2NpZCA+PiAzOyBcCisJCVVDSEFSIGJpdF9vZmZzZXQgPSB3Y2lkICYgMHg3OyBcCisJCWFkX3AtPkFwQ2ZnLk1CU1NJRFthcGlkeF0uVGltQml0bWFwc1t0aW1fb2Zmc2V0XSB8PSBCSVQ4W2JpdF9vZmZzZXRdOyB9CisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgQkVBQ09OX0JJVE1BUF9NQVNLCQkweGZmCit0eXBlZGVmIHN0cnVjdCBfQkVBQ09OX1NZTkNfU1RSVUNUXworeworCVVDSEFSICAgICAgICAJCQlCZWFjb25CdWZbSFdfQkVBQ09OX01BWF9DT1VOVF1bSFdfQkVBQ09OX09GRlNFVF07CisJVUNIQVIJCQkJCUJlYWNvblR4V0lbSFdfQkVBQ09OX01BWF9DT1VOVF1bVFhXSV9TSVpFXTsKKwlVTE9ORyAJCQkJCVRpbUlFTG9jYXRpb25JbkJlYWNvbltIV19CRUFDT05fTUFYX0NPVU5UXTsKKwlVTE9ORwkJCQkJQ2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uW0hXX0JFQUNPTl9NQVhfQ09VTlRdOworCUJPT0xFQU4JCQkJCUVuYWJsZUJlYWNvbjsJCS8vIHRyaWdnZXIgdG8gZW5hYmxlIGJlYWNvbiB0cmFuc21pc3Npb24uCisJVUNIQVIJCQkJCUJlYWNvbkJpdE1hcDsJCS8vIE5PVEU6IElmIHRoZSBNQVhfTUJTU0lEX05VTSBpcyBsYXJnZXIgdGhhbiA4LCB0aGlzIHBhcmFtZXRlciBuZWVkIHRvIGNoYW5nZS4KKwlVQ0hBUgkJCQkJRHRpbUJpdE9uOwkJCS8vIE5PVEU6IElmIHRoZSBNQVhfTUJTU0lEX05VTSBpcyBsYXJnZXIgdGhhbiA4LCB0aGlzIHBhcmFtZXRlciBuZWVkIHRvIGNoYW5nZS4KK31CRUFDT05fU1lOQ19TVFJVQ1Q7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKK3R5cGVkZWYgc3RydWN0IF9NVUxUSVNTSURfU1RSVUNUIHsKKwlVQ0hBUgkJCQkJCQkJQnNzaWRbTUFDX0FERFJfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTc2lkTGVuOworICAgIENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBhYmlsaXR5SW5mbzsKKworICAgIFBORVRfREVWICAgICAgICAgICAgICAgICAgIAkJCU1TU0lERGV2OworCisJTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAgICAgQXV0aE1vZGU7CisJTkRJU184MDJfMTFfV0VQX1NUQVRVUyAgICAgICAgICAgICAgV2VwU3RhdHVzOworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMJCQkJR3JvdXBLZXlXZXBTdGF0dXM7CisJV1BBX01JWF9QQUlSX0NJUEhFUgkJCQkJV3BhTWl4UGFpckNpcGhlcjsKKworCVVMT05HCQkJCQkJCQlUeENvdW50OworCVVMT05HCQkJCQkJCQlSeENvdW50OworCVVMT05HCQkJCQkJCQlSZWNlaXZlZEJ5dGVDb3VudDsKKwlVTE9ORwkJCQkJCQkJVHJhbnNtaXR0ZWRCeXRlQ291bnQ7CisJVUxPTkcJCQkJCQkJCVJ4RXJyb3JDb3VudDsKKwlVTE9ORwkJCQkJCQkJUnhEcm9wQ291bnQ7CisKKwlIVFRSQU5TTUlUX1NFVFRJTkcJCQkJCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7Ly8gRm9yIHRyYW5zbWl0IHBoeSBzZXR0aW5nIGluIFRYV0kuCisJUlRfSFRfUEhZX0lORk8JCQkJCQlEZXNpcmVkSHRQaHlJbmZvOworCURFU0lSRURfVFJBTlNNSVRfU0VUVElORyAgICAgICAgCURlc2lyZWRUcmFuc21pdFNldHRpbmc7IC8vIERlc2lyZWQgdHJhbnNtaXQgc2V0dGluZy4gdGhpcyBpcyBmb3IgcmVhZGluZyByZWdpc3RyeSBzZXR0aW5nIG9ubHkuIG5vdCB1c2VmdWwuCisJQk9PTEVBTgkJCQkJCQkJYkF1dG9UeFJhdGVTd2l0Y2g7CisKKwkvL0NJUEhFUl9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZEtleVtTSEFSRV9LRVlfTlVNXTsgLy8gcmVmIHBBZC0+U2hhcmVkS2V5W0JTU11bNF0KKwlVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0S2V5SWQ7CisKKwlVQ0hBUgkJCQkJCQkJVHhSYXRlOyAgICAgICAvLyBSQVRFXzEsIFJBVEVfMiwgUkFURV81XzUsIFJBVEVfMTEsIC4uLgorCVVDSEFSICAgICAJCQkJCQkJRGVzaXJlZFJhdGVzW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsvLyBPSURfODAyXzExX0RFU0lSRURfUkFURVMKKwlVQ0hBUgkJCQkJCQkJRGVzaXJlZFJhdGVzSW5kZXg7CisJVUNIQVIgICAgIAkJCQkJCQlNYXhUeFJhdGU7ICAgICAgICAgICAgLy8gUkFURV8xLCBSQVRFXzIsIFJBVEVfNV81LCBSQVRFXzExCisKKy8vCVVMT05HICAgICAgICAgICAJCQkJCVRpbUJpdG1hcDsgICAgICAvLyBiaXQwIGZvciBicm9hZGNhc3QsIDEgZm9yIEFJRDEsIDIgZm9yIEFJRDIsIC4uLnNvIG9uCisvLyAgICBVTE9ORyAgICAgICAgICAgCQkJCQlUaW1CaXRtYXAyOyAgICAgLy8gYjAgZm9yIEFJRDMyLCBiMSBmb3IgQUlEMzMsIC4uLiBhbmQgc28gb24KKwlVQ0hBUgkJCQkJCQkJVGltQml0bWFwc1tXTEFOX01BWF9OVU1fT0ZfVElNXTsKKworICAgIC8vIFdQQQorICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdNS1szMl07CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1LWzMyXTsKKwlVQ0hBUgkJCQkJCQkJR1RLWzMyXTsKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMVg7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlQXV0aDsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTm9uY2VbMzJdOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRTZWN1cmVkOworICAgIE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSICAgICAgICAgIFByaXZhY3lGaWx0ZXI7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkFOQ2xhc3MzRGF0YTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc29sYXRlSW50ZXJTdGFUcmFmZmljOworCisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNOSUVfTGVuWzJdOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTTl9JRVsyXVtNQVhfTEVOX09GX1JTTklFXTsKKworCisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgCQkJVGltSUVMb2NhdGlvbkluQmVhY29uOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgIAkJCUNhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbjsKKyAgICAvLyBvdXRnb2luZyBCRUFDT04gZnJhbWUgYnVmZmVyIGFuZCBjb3JyZXNwb25kaW5nIFRYV0kKKwkvLyBQVFhXSV9TVFJVQyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlYWNvblR4V0k7IC8vCisgICAgQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVhY29uQnVmW01BWF9CRUFDT05fU0laRV07IC8vIE5PVEU6IEJlYWNvbkJ1ZiBzaG91bGQgYmUgNC1ieXRlIGFsaWduZWQKKworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJIaWRlU3NpZDsKKwlVSU5UMTYJCQkJCQkJCVN0YXRpb25LZWVwQWxpdmVUaW1lOyAvLyB1bml0OiBzZWNvbmQKKworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZMQU5fVklEOworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZMQU5fUHJpb3JpdHk7CisKKyAgICBSVF84MDJfMTFfQUNMCQkJCQkJQWNjZXNzQ29udHJvbExpc3Q7CisKKwkvLyBFRENBIFFvcworICAgIEJPT0xFQU4JCQkJCQkJCWJXbW1DYXBhYmxlOwkvLyAwOmRpc2FibGUgV01NLCAxOmVuYWJsZSBXTU0KKyAgICBCT09MRUFOCQkJCQkJCQliRExTQ2FwYWJsZTsJLy8gMDpkaXNhYmxlIERMUywgMTplbmFibGUgRExTCisKKwlVQ0hBUiAgICAgICAgICAgCQkJCQlEbHNQVEtbNjRdOwkJLy8gRHVlIHRvIHdpbmRvd3MgZGlydmVyIGNvdW50IG9uIG1lZXRpbmdob3VzZSB0byBoYW5kbGUgNC13YXkgc2hha2UKKworCS8vIEZvciA4MDIuMXggZGFlbW9uIHNldHRpbmcgcGVyIEJTUworCVVDSEFSCQkJCQkJCQlyYWRpdXNfc3J2X251bTsKKwlSQURJVVNfU1JWX0lORk8JCQkJCQlyYWRpdXNfc3J2X2luZm9bTUFYX1JBRElVU19TUlZfTlVNXTsKKworI2lmZGVmIFJUTDg2NVhfU09DCisJdW5zaWduZWQgaW50CQkJCQkJbXlsaW5raWQ7CisjZW5kaWYKKworCisJVUlOVDMyCQkJCQlSY3ZkQ29uZmxpY3RTc2lkQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZEFzc29jUmVzcENvdW50OworCVVJTlQzMgkJCQkJUmN2ZFNwb29mZWRSZWFzc29jUmVzcENvdW50OworCVVJTlQzMgkJCQkJUmN2ZFNwb29mZWRQcm9iZVJlc3BDb3VudDsKKwlVSU5UMzIJCQkJCVJjdmRTcG9vZmVkQmVhY29uQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZERpc2Fzc29jQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZEF1dGhDb3VudDsKKwlVSU5UMzIJCQkJCVJjdmRTcG9vZmVkRGVhdXRoQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZFVua25vd25NZ210Q291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkUmVwbGF5QXR0YWNrQ291bnQ7CisKKwlDSEFSCQkJCQlSc3NpT2ZSY3ZkQ29uZmxpY3RTc2lkOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkQXNzb2NSZXNwOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkUmVhc3NvY1Jlc3A7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWRQcm9iZVJlc3A7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWRCZWFjb247CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWREaXNhc3NvYzsKKwlDSEFSCQkJCQlSc3NpT2ZSY3ZkU3Bvb2ZlZEF1dGg7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWREZWF1dGg7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWRVbmtub3duTWdtdDsKKwlDSEFSCQkJCQlSc3NpT2ZSY3ZkUmVwbGF5QXR0YWNrOworCisJQk9PTEVBTgkJCQkJYkJjblNudFJlcTsKKwlVQ0hBUgkJCQkJQmNuQnVmSWR4OworfSBNVUxUSVNTSURfU1RSVUNULCAqUE1VTFRJU1NJRF9TVFJVQ1Q7CisKKworCisjaWZkZWYgRE9UMTFOX0RSQUZUMwordHlwZWRlZiBlbnVtIF9CU1MyMDQwQ09FWElTVF9GTEFHeworCUJTU18yMDQwX0NPRVhJU1RfRElTQUJMRSA9IDAsCisJQlNTXzIwNDBfQ09FWElTVF9USU1FUl9GSVJFRCAgPSAxLAorCUJTU18yMDQwX0NPRVhJU1RfSU5GT19TWU5DID0gMiwKKwlCU1NfMjA0MF9DT0VYSVNUX0lORk9fTk9USUZZID0gNCwKK31CU1MyMDQwQ09FWElTVF9GTEFHOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworLy8gY29uZmlndXJhdGlvbiBjb21tb24gdG8gT1BNT0RFX0FQIGFzIHdlbGwgYXMgT1BNT0RFX1NUQQordHlwZWRlZiBzdHJ1Y3QgX0NPTU1PTl9DT05GSUcgeworCisJQk9PTEVBTgkJYkNvdW50cnlGbGFnOworCVVDSEFSCQlDb3VudHJ5Q29kZVszXTsKKwlVQ0hBUgkJR2VvZ3JhcGh5OworCVVDSEFSICAgICAgIENvdW50cnlSZWdpb247ICAgICAgLy8gRW51bSBvZiBjb3VudHJ5IHJlZ2lvbiwgMDpGQ0MsIDE6SUMsIDI6RVRTSSwgMzpTUEFJTiwgNDpGcmFuY2UsIDU6TUtLLCA2Ok1LSzEsIDc6SXNyYWVsCisJVUNIQVIgICAgICAgQ291bnRyeVJlZ2lvbkZvckFCYW5kOwkvLyBFbnVtIG9mIGNvdW50cnkgcmVnaW9uIGZvciBBIGJhbmQKKwlVQ0hBUiAgICAgICBQaHlNb2RlOyAgICAgICAgICAgIC8vIFBIWV8xMUEsIFBIWV8xMUIsIFBIWV8xMUJHX01JWEVELCBQSFlfQUJHX01JWEVECisJVVNIT1JUICAgICAgRHNpZnM7ICAgICAgICAgICAgICAvLyBpbiB1bml0cyBvZiB1c2VjCisJVUxPTkcgICAgICAgUGFja2V0RmlsdGVyOyAgICAgICAvLyBQYWNrZXQgZmlsdGVyIGZvciByZWNlaXZpbmcKKworCUNIQVIgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsgLy8gTk9UIE5VTEwtdGVybWluYXRlZAorCVVDSEFSICAgICAgIFNzaWRMZW47ICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCBzc2lkIGxlbmd0aCBpbiB1c2VkCisJVUNIQVIgICAgICAgTGFzdFNzaWRMZW47ICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCBzc2lkIGxlbmd0aCBpbiB1c2VkCisJQ0hBUiAgICAgICAgTGFzdFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsgLy8gTk9UIE5VTEwtdGVybWluYXRlZAorCVVDSEFSCQlMYXN0QnNzaWRbTUFDX0FERFJfTEVOXTsKKworCVVDSEFSICAgICAgIEJzc2lkW01BQ19BRERSX0xFTl07CisJVVNIT1JUICAgICAgQmVhY29uUGVyaW9kOworCVVDSEFSICAgICAgIENoYW5uZWw7CisJVUNIQVIgICAgICAgQ2VudHJhbENoYW5uZWw7ICAgIAkvLyBDZW50cmFsIENoYW5uZWwgd2hlbiB1c2luZyA0ME1IeiBpcyBpbmRpY2F0aW5nLiBub3QgcmVhbCBjaGFubmVsLgorCisJVUNIQVIgICAgICAgU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIgICAgICAgU3VwUmF0ZUxlbjsKKwlVQ0hBUiAgICAgICBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUiAgICAgICBFeHRSYXRlTGVuOworCVVDSEFSICAgICAgIERlc2lyZVJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOyAgICAgIC8vIE9JRF84MDJfMTFfREVTSVJFRF9SQVRFUworCVVDSEFSICAgICAgIE1heERlc2lyZWRSYXRlOworCVVDSEFSICAgICAgIEV4cGVjdGVkQUNLUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisKKwlVTE9ORyAgICAgICBCYXNpY1JhdGVCaXRtYXA7ICAgICAgICAvLyBiYWNrdXAgYmFzaWMgcmF0ZWJpdG1hcAorCisJQk9PTEVBTgkJYkFQU0RDYXBhYmxlOworCUJPT0xFQU4JCWJJblNlcnZpY2VQZXJpb2Q7CisJQk9PTEVBTgkJYkFQU0RBQ19CRTsKKwlCT09MRUFOCQliQVBTREFDX0JLOworCUJPT0xFQU4JCWJBUFNEQUNfVkk7CisJQk9PTEVBTgkJYkFQU0RBQ19WTzsKKwlCT09MRUFOCQliTmVlZFNlbmRUcmlnZ2VyRnJhbWU7CisJQk9PTEVBTgkJYkFQU0RGb3JjZVBvd2VyU2F2ZTsJLy8gRm9yY2UgcG93ZXIgc2F2ZSBtb2RlLCBzaG91bGQgb25seSB1c2UgaW4gQVBTRC1TVEFVVAorCVVMT05HCQlUcmlnZ2VyVGltZXJDb3VudDsKKwlVQ0hBUgkJTWF4U1BMZW5ndGg7CisJVUNIQVIJCUJCUEN1cnJlbnRCVzsJLy8gQldfMTAsIAlCV18yMCwgQldfNDAKKwkvLyBtb3ZlIHRvIE1VTFRJU1NJRF9TVFJVQ1QgZm9yIE1CU1MKKwkvL0hUVFJBTlNNSVRfU0VUVElORwlIVFBoeU1vZGUsIE1heEhUUGh5TW9kZSwgTWluSFRQaHlNb2RlOy8vIEZvciB0cmFuc21pdCBwaHkgc2V0dGluZyBpbiBUWFdJLgorCVJFR19UUkFOU01JVF9TRVRUSU5HICAgICAgICBSZWdUcmFuc21pdFNldHRpbmc7IC8vcmVnaXN0cnkgdHJhbnNtaXQgc2V0dGluZy4gdGhpcyBpcyBmb3IgcmVhZGluZyByZWdpc3RyeSBzZXR0aW5nIG9ubHkuIG5vdCB1c2VmdWwuCisJLy9VQ0hBUiAgICAgICBGaXhlZFR4TW9kZTsgICAgICAgICAgICAgIC8vIEZpeGVkIFR4IE1vZGUgKENDSywgT0ZETSksIGZvciBIVCBmaXhlZCB0eCBtb2RlIChHRiwgTUlYKSAsIHJlZmVyIHRvIFJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1vZGUKKwlVQ0hBUiAgICAgICBUeFJhdGU7ICAgICAgICAgICAgICAgICAvLyBTYW1lIHZhbHVlIHRvIGZpbGwgaW4gVFhELiBUeFJhdGUgaXMgNi1iaXQKKwlVQ0hBUiAgICAgICBNYXhUeFJhdGU7ICAgICAgICAgICAgICAvLyBSQVRFXzEsIFJBVEVfMiwgUkFURV81XzUsIFJBVEVfMTEKKwlVQ0hBUiAgICAgICBUeFJhdGVJbmRleDsgICAgICAgICAgICAvLyBUeCByYXRlIGluZGV4IGluIFJhdGVTd2l0Y2hUYWJsZQorCVVDSEFSICAgICAgIFR4UmF0ZVRhYmxlU2l6ZTsgICAgICAgIC8vIFZhbGlkIFR4IHJhdGUgdGFibGUgc2l6ZSBpbiBSYXRlU3dpdGNoVGFibGUKKwkvL0JPT0xFQU4JCWJBdXRvVHhSYXRlU3dpdGNoOworCVVDSEFSICAgICAgIE1pblR4UmF0ZTsgICAgICAgICAgICAgIC8vIFJBVEVfMSwgUkFURV8yLCBSQVRFXzVfNSwgUkFURV8xMQorCVVDSEFSICAgICAgIFJ0c1JhdGU7ICAgICAgICAgICAgICAgIC8vIFJBVEVfeHh4CisJSFRUUkFOU01JVF9TRVRUSU5HCU1sbWVUcmFuc21pdDsgICAvLyBNR01UIGZyYW1lIFBIWSByYXRlIHNldHRpbmcgd2hlbiBvcGVyYXRpbiBhdCBIdCByYXRlLgorCVVDSEFSICAgICAgIE1sbWVSYXRlOyAgICAgICAgICAgICAgIC8vIFJBVEVfeHh4LCB1c2VkIHRvIHNlbmQgTUxNRSBmcmFtZXMKKwlVQ0hBUiAgICAgICBCYXNpY01sbWVSYXRlOyAgICAgICAgICAvLyBEZWZhdWx0IFJhdGUgZm9yIHNlbmRpbmcgTUxNRSBmcmFtZXMKKworCVVTSE9SVCAgICAgIFJ0c1RocmVzaG9sZDsgICAgICAgICAgIC8vIGluIHVuaXQgb2YgQllURQorCVVTSE9SVCAgICAgIEZyYWdtZW50VGhyZXNob2xkOyAgICAgIC8vIGluIHVuaXQgb2YgQllURQorCisJVUNIQVIgICAgICAgVHhQb3dlcjsgICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiBtVworCVVMT05HICAgICAgIFR4UG93ZXJQZXJjZW50YWdlOyAgICAgIC8vIDB+MTAwICUKKwlVTE9ORyAgICAgICBUeFBvd2VyRGVmYXVsdDsgICAgICAgICAvLyBrZWVwIGZvciBUeFBvd2VyUGVyY2VudGFnZQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJQkFDQVBfU1RSVUMgICAgICAgIEJBQ2FwYWJpbGl0eTsgLy8gICBOTyBVU0UgPSAwWEZGICA7ICBJTU1FRF9CQSA9MSAgOyAgREVMQVlfQkE9MAorCUJBQ0FQX1NUUlVDICAgICAgICBSRUdCQUNhcGFiaWxpdHk7IC8vICAgTk8gVVNFID0gMFhGRiAgOyAgSU1NRURfQkEgPTEgIDsgIERFTEFZX0JBPTAKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlJT1RfU1RSVUMJCUlPVGVzdFBhcm07CS8vIDgwMi4xMW4gSW50ZXJPcGJpbGl0eSBUZXN0IFBhcmFtZXRlcjsKKwlVTE9ORyAgICAgICBUeFByZWFtYmxlOyAgICAgICAgICAgICAvLyBSdDgwMl8xMVByZWFtYmxlTG9uZywgUnQ4MDJfMTFQcmVhbWJsZVNob3J0LCBSdDgwMl8xMVByZWFtYmxlQXV0bworCUJPT0xFQU4gICAgIGJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQ7ICAgICAvLyBNaWNyb3NvZnQgdXNlIDAgYXMgZGlzYWJsZQorCVVMT05HICAgICAgIFVzZUJHUHJvdGVjdGlvbjsgICAgICAgIC8vIDA6IGF1dG8sIDE6IGFsd2F5cyB1c2UsIDI6IGFsd2F5cyBub3QgdXNlCisJQk9PTEVBTiAgICAgYlVzZVNob3J0U2xvdFRpbWU7ICAgICAgLy8gMDogZGlzYWJsZSwgMSAtIHVzZSBzaG9ydCBzbG90ICg5dXMpCisJQk9PTEVBTiAgICAgYkVuYWJsZVR4QnVyc3Q7ICAgICAgICAgLy8gMTogZW5ibGUgVFggUEFDS0VUIEJVUlNULCAwOiBkaXNhYmxlIFRYIFBBQ0tFVCBCVVJTVAorCUJPT0xFQU4gICAgIGJBZ2dyZWdhdGlvbkNhcGFibGU7ICAgICAgLy8gMTogZW5hYmxlIFRYIGFnZ3JlZ2F0aW9uIHdoZW4gdGhlIHBlZXIgc3VwcG9ydHMgaXQKKwlCT09MRUFOICAgICBiUGlnZ3lCYWNrQ2FwYWJsZTsJCS8vIDE6IGVuYWJsZSBUWCBwaWdneS1iYWNrIGFjY29yZGluZyBNQUMncyB2ZXJzaW9uCisJQk9PTEVBTiAgICAgYklFRUU4MDIxMUg7CQkJLy8gMTogZW5hYmxlIElFRUU4MDIuMTFoIHNwZWMuCisJVUxPTkcJCURpc2FibGVPTEJDRGV0ZWN0OwkJLy8gMDogZW5hYmxlIE9MQkMgZGV0ZWN0OyAxIGRpc2FibGUgT0xCQyBkZXRlY3QKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJPT0xFQU4JCQkJYlJkZzsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlCT09MRUFOICAgICAgICAgICAgIGJXbW1DYXBhYmxlOyAgICAgICAgLy8gMDpkaXNhYmxlIFdNTSwgMTplbmFibGUgV01NCisJUU9TX0NBUEFCSUxJVFlfUEFSTSBBUFFvc0NhcGFiaWxpdHk7ICAgIC8vIFFPUyBjYXBhYmlsaXR5IG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKwlFRENBX1BBUk0gICAgICAgICAgIEFQRWRjYVBhcm07ICAgICAgICAgLy8gRURDQSBwYXJhbWV0ZXJzIG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKwlRQlNTX0xPQURfUEFSTSAgICAgIEFQUWJzc0xvYWQ7ICAgICAgICAgLy8gUUJTUyBsb2FkIG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKwlVQ0hBUiAgICAgICAgICAgICAgIEFja1BvbGljeVs0XTsgICAgICAgLy8gQUNLIHBvbGljeSBvZiB0aGUgc3BlY2lmaWVkIEFDLiBzZWUgQUNLX3h4eAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUJPT0xFQU4JCQkJYkRMU0NhcGFibGU7CQkvLyAwOmRpc2FibGUgRExTLCAxOmVuYWJsZSBETFMKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkvLyBhIGJpdG1hcCBvZiBCT09MRUFOIGZsYWdzLiBlYWNoIGJpdCByZXByZXNlbnQgYW4gb3BlcmF0aW9uIHN0YXR1cyBvZiBhIHBhcnRpY3VsYXIKKwkvLyBCT09MRUFOIGNvbnRyb2wsIGVpdGhlciBPTiBvciBPRkYuIFRoZXNlIGZsYWdzIHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWQgdmlhCisJLy8gT1BTVEFUVVNfVEVTVF9GTEFHKCksIE9QU1RBVFVTX1NFVF9GTEFHKCksIE9QX1NUQVRVU19DTEVBUl9GTEFHKCkgbWFjcm9zLgorCS8vIHNlZSBmT1BfU1RBVFVTX3h4eCBpbiBSVE1QX0RFRi5DIGZvciBkZXRhaWwgYml0IGRlZmluaXRpb24KKwlVTE9ORyAgICAgICAgICAgICAgIE9wU3RhdHVzRmxhZ3M7CisKKwlCT09MRUFOCQkJCU5kaXNSYWRpb1N0YXRlT2ZmOyAvL0ZvciBIQ1QgMTIuMCwgc2V0IHRoaXMgZmxhZyB0byBUUlVFIGluc3RlYWQgb2YgY2FsbGVkIE1sbWVSYWRpb09mZi4KKwlBQkdCQU5EX1NUQVRFCQlCYW5kU3RhdGU7CQkvLyBGb3Igc2V0dGluZyBCQlAgdXNlZCBvbiBCL0cgb3IgQSBtb2RlLgorCUJPT0xFQU4JCQkJYlJ4QW50RGl2ZXJzaXR5OyAvLyAwOmRpc2FibGUsIDE6ZW5hYmxlIFNvZnR3YXJlIFJ4IEFudGVubmEgRGl2ZXJzaXR5LgorCisJLy8gSUVFRTgwMi4xMUgtLURGUy4KKwlSQURBUl9ERVRFQ1RfU1RSVUNUCVJhZGFyRGV0ZWN0OworCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVAorCUNBUlJJRVJfREVURUNUSU9OCQlDYXJyaWVyRGV0ZWN0OworI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIEhUCisJVUNIQVIJCQlCQVNpemU7CQkvLyBVU2VyIGRlc2lyZWQgQkFXaW5kb3dTaXplLiBTaG91bGQgbm90IGV4Y2VlZCBvdXIgbWF4IGNhcGFiaWxpdHkKKwkvL1JUX0hUX0NBUEFCSUxJVFkJU3VwcG9ydGVkSHRQaHk7CisJUlRfSFRfQ0FQQUJJTElUWQlEZXNpcmVkSHRQaHk7CisJSFRfQ0FQQUJJTElUWV9JRQkJSHRDYXBhYmlsaXR5OworCUFERF9IVF9JTkZPX0lFCQlBZGRIVEluZm87CS8vIFVzZWZ1bCBhcyBBUC4KKwkvL1RoaXMgSUUgaXMgdXNlZCB3aXRoIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBlbGVtZW50IHdoZW4gY2hhbmdpbmcgdG8gYSBuZXcgNDBNSHouCisJLy9UaGlzIElFIGlzIGluY2x1ZGVkIGluIGNoYW5uZWwgc3dpdGNoIGFtbW91bmNlbWVudCBmcmFtZXMgNy40LjEuNSwgYmVhY29ucywgcHJvYmUgUnNwLgorCU5FV19FWFRfQ0hBTl9JRQlOZXdFeHRDaGFuT2Zmc2V0OwkvLzcuMy4yLjIwQSwgMSBpZiBleHRlbnNpb24gY2hhbm5lbCBpcyBhYm92ZSB0aGUgY29udHJvbCBjaGFubmVsLCAzIGlmIGJlbG93LCAwIGlmIG5vdCBwcmVzZW50CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJVUNIQVIJCQkJCUJzczIwNDBDb2V4aXN0RmxhZzsJCS8vIGJpdCAwOiBiQnNzQ29leGlzdFRpbWVyUnVubmluZywgYml0IDE6IE5lZWRTeW5jQWRkSHRJbmZvLgorCVJBTElOS19USU1FUl9TVFJVQ1QJQnNzMjA0MENvZXhpc3RUaW1lcjsKKworCS8vVGhpcyBJRSBpcyB1c2VkIGZvciAyMC80MCBCU1MgQ29leGlzdGVuY2UuCisJQlNTXzIwNDBfQ09FWElTVF9JRQkJQlNTMjA0MENvZXhpc3RJbmZvOworCS8vID09PT09PSAxMW4gRDMuMCA9PT09PT09PT09PT09PT09PT09PT09PT4KKwlVU0hPUlQJCQkJCURvdDExT0Jzc1NjYW5QYXNzaXZlRHdlbGw7CQkJCS8vIFVuaXQgOiBUVS4gNX4xMDAwCisJVVNIT1JUCQkJCQlEb3QxMU9Cc3NTY2FuQWN0aXZlRHdlbGw7CQkJCS8vIFVuaXQgOiBUVS4gMTB+MTAwMAorCVVTSE9SVAkJCQkJRG90MTFCc3NXaWR0aFRyaWdnZXJTY2FuSW50OwkJCS8vIFVuaXQgOiBTZWNvbmQKKwlVU0hPUlQJCQkJCURvdDExT0Jzc1NjYW5QYXNzaXZlVG90YWxQZXJDaGFubmVsOwkvLyBVbml0IDogVFUuIDIwMH4xMDAwMAorCVVTSE9SVAkJCQkJRG90MTFPQnNzU2NhbkFjdGl2ZVRvdGFsUGVyQ2hhbm5lbDsJLy8gVW5pdCA6IFRVLiAyMH4xMDAwMAorCVVTSE9SVAkJCQkJRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXlGYWN0b3I7CisJVVNIT1JUCQkJCQlEb3QxMU9Cc3NTY2FuQWN0aXZpdHlUaHJlOwkJCQkvLyBVbml0IDogcGVyY2VudGFnZQorCisJVUxPTkcJCQkJCURvdDExQnNzV2lkdGhDaGFuVHJhbkRlbGF5OwkJCS8vIG11bHRpcGxlIG9mIChEb3QxMUJzc1dpZHRoVHJpZ2dlclNjYW5JbnQgKiBEb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheUZhY3RvcikKKwlVTE9ORwkJCQkJQ291bnREb3duQ3RyOwkvLyBDb3VudERvd24gQ291bnRlciBmcm9tIChEb3QxMUJzc1dpZHRoVHJpZ2dlclNjYW5JbnQgKiBEb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheUZhY3RvcikKKworCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIFRyaWdnZXJFdmVudFRhYkxvY2s7CisJQlNTXzIwNDBfQ09FWElTVF9JRQkJTGFzdEJTU0NvZXhpc3QyMDQwOworCUJTU18yMDQwX0NPRVhJU1RfSUUJCUJTU0NvZXhpc3QyMDQwOworCVRSSUdHRVJfRVZFTlRfVEFCCQlUcmlnZ2VyRXZlbnRUYWI7CisJVUNIQVIJCQkJCUNoYW5uZWxMaXN0SWR4OworCS8vIDw9PT09PT0gMTFuIEQzLjAgPT09PT09PT09PT09PT09PT09PT09PT0KKwlCT09MRUFOCQkJCQliT3ZlcmxhcFNjYW5uaW5nOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIGJIVFByb3RlY3Q7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgYk1JTU9QU0VuYWJsZTsKKyAgICBCT09MRUFOCQkJCQliQkFEZWNsaW5lOworCUJPT0xFQU4JCQkJCWJEaXNhYmxlUmVvcmRlcmluZzsKKwlCT09MRUFOCQkJCQliRm9ydHlfTWh6X0ludG9sZXJhbnQ7CisJQk9PTEVBTgkJCQkJYkV4dENoYW5uZWxTd2l0Y2hBbm5vdW5jZW1lbnQ7CisJQk9PTEVBTgkJCQkJYlJjdkJTU1dpZHRoVHJpZ2dlckV2ZW50czsKKwlVTE9ORwkJCQkJTGFzdFJjdkJTU1dpZHRoVHJpZ2dlckV2ZW50c1RpbWU7CisKKwlVQ0hBUgkJCQkJVHhCQVNpemU7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBFbmFibGUgd2lyZWxlc3MgZXZlbnQKKwlCT09MRUFOCQkJCWJXaXJlbGVzc0V2ZW50OworCUJPT0xFQU4JCQkJYldpRmlUZXN0OwkJCQkvLyBFbmFibGUgdGhpcyBwYXJhbWV0ZXIgZm9yIFdpRmkgdGVzdAorCisJLy8gVHggJiBSeCBTdHJlYW0gbnVtYmVyIHNlbGVjdGlvbgorCVVDSEFSCQkJCVR4U3RyZWFtOworCVVDSEFSCQkJCVJ4U3RyZWFtOworCisJLy8gdHJhbnNtaXQgcGh5IG1vZGUsIHRyYXNtaXQgcmF0ZSBmb3IgTXVsdGljYXN0LgorI2lmZGVmIE1DQVNUX1JBVEVfU1BFQ0lGSUMKKwlVQ0hBUgkJCQlNY2FzdFRyYW5zbWl0TWNzOworCVVDSEFSCQkJCU1jYXN0VHJhbnNtaXRQaHlNb2RlOworI2VuZGlmIC8vIE1DQVNUX1JBVEVfU1BFQ0lGSUMgLy8KKworCUJPT0xFQU4gICAgIAkJYkhhcmR3YXJlUmFkaW87ICAgICAvLyBIYXJkd2FyZSBjb250cm9sbGVkIFJhZGlvIGVuYWJsZWQKKworI2lmZGVmIFJUMjg3MAorCUJPT0xFQU4gICAgIAkJYk11bHRpcGxlSVJQOyAgICAgICAvLyBNdWx0aXBsZSBCdWxrIElOIGZsYWcKKwlVQ0hBUiAgICAgICAJCU51bU9mQnVsa0luSVJQOyAgICAgLy8gaWYgYk11bHRpcGxlSVJQID09IFRSVUUsIE51bU9mQnVsa0luSVJQIHdpbGwgYmUgNCBvdGhlcndpc2UgYmUgMQorIAlSVF9IVF9DQVBBQklMSVRZCVN1cHBvcnRlZEh0UGh5OworCVVMT05HCQkJCU1heFBrdE9uZVR4QnVsazsKKwlVQ0hBUgkJCQlUeEJ1bGtGYWN0b3I7CisJVUNIQVIJCQkJUnhCdWxrRmFjdG9yOworCisJQkVBQ09OX1NZTkNfU1RSVUNUCSpwQmVhY29uU3luYzsKKwlSQUxJTktfVElNRVJfU1RSVUNUCUJlYWNvblVwZGF0ZVRpbWVyOworCVVJTlQzMgkJCQlCZWFjb25BZGp1c3Q7CisJVUlOVDMyCQkJCUJlYWNvbkZhY3RvcjsKKwlVSU5UMzIJCQkJQmVhY29uUmVtYWluOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyAJTkRJU19TUElOX0xPQ0sJCQlNZWFzdXJlUmVxVGFiTG9jazsKKwlQTUVBU1VSRV9SRVFfVEFCCQlwTWVhc3VyZVJlcVRhYjsKKworCU5ESVNfU1BJTl9MT0NLCQkJVHBjUmVxVGFiTG9jazsKKwlQVFBDX1JFUV9UQUIJCQlwVHBjUmVxVGFiOworCisJLy8gdHJhbnNtaXQgcGh5IG1vZGUsIHRyYXNtaXQgcmF0ZSBmb3IgTXVsdGljYXN0LgorI2lmZGVmIE1DQVNUX1JBVEVfU1BFQ0lGSUMKKwlIVFRSQU5TTUlUX1NFVFRJTkcJCU1DYXN0UGh5TW9kZTsKKyNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCisKKyNpZmRlZiBTSU5HTEVfU0tVCisJVUlOVDE2CQkJCQlEZWZpbmVNYXhUeFB3cjsKKyNlbmRpZiAvLyBTSU5HTEVfU0tVIC8vCisKKworfSBDT01NT05fQ09ORklHLCAqUENPTU1PTl9DT05GSUc7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLyogTW9kaWZpZWQgYnkgV3UgWGktS3VuIDQvMjEvMjAwNiAqLworLy8gU1RBIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cwordHlwZWRlZiBzdHJ1Y3QgX1NUQV9BRE1JTl9DT05GSUcgeworCS8vIEdST1VQIDEgLQorCS8vICAgVXNlciBjb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIFJlZ2lzdHJ5LCBFMlBST00gb3IgT0lEX3h4eC4gVGhlc2Ugc2V0dGluZ3MgZGVzY3JpYmUKKwkvLyAgIHRoZSB1c2VyIGludGVuZGVkIGNvbmZpZ3VyYXRpb24sIGJ1dCBub3QgbmVjZXNzYXJ5IGZ1bGx5IGVxdWFsIHRvIHRoZSBmaW5hbAorCS8vICAgc2V0dGluZ3MgaW4gQUNUSVZFIEJTUyBhZnRlciBuZWdvdGlhdGlvbi9jb21wcm9taXplIHdpdGggdGhlIEJTUyBob2xkZXIgKGVpdGhlcgorCS8vICAgQVAgb3IgSUJTUyBob2xkZXIpLgorCS8vICAgT25jZSBpbml0aWFsaXplZCwgdXNlciBjb25maWd1cmF0aW9uIGNhbiBvbmx5IGJlIGNoYW5nZWQgdmlhIE9JRF94eHgKKwlVQ0hBUiAgICAgICBCc3NUeXBlOyAgICAgICAgICAgICAgLy8gQlNTX0lORlJBIG9yIEJTU19BREhPQworCVVTSE9SVCAgICAgIEF0aW1XaW47ICAgICAgICAgIC8vIHVzZWQgd2hlbiBzdGFydGluZyBhIG5ldyBJQlNTCisKKwkvLyBHUk9VUCAyIC0KKwkvLyAgIFVzZXIgY29uZmlndXJhdGlvbiBsb2FkZWQgZnJvbSBSZWdpc3RyeSwgRTJQUk9NIG9yIE9JRF94eHguIFRoZXNlIHNldHRpbmdzIGRlc2NyaWJlCisJLy8gICB0aGUgdXNlciBpbnRlbmRlZCBjb25maWd1cmF0aW9uLCBhbmQgc2hvdWxkIGJlIGFsd2F5cyBhcHBsaWVkIHRvIHRoZSBmaW5hbAorCS8vICAgc2V0dGluZ3MgaW4gQUNUSVZFIEJTUyB3aXRob3V0IGNvbXByb21pc2luZyB3aXRoIHRoZSBCU1MgaG9sZGVyLgorCS8vICAgT25jZSBpbml0aWFsaXplZCwgdXNlciBjb25maWd1cmF0aW9uIGNhbiBvbmx5IGJlIGNoYW5nZWQgdmlhIE9JRF94eHgKKwlVQ0hBUiAgICAgICBSc3NpVHJpZ2dlcjsKKwlVQ0hBUiAgICAgICBSc3NpVHJpZ2dlck1vZGU7ICAgICAgLy8gUlNTSV9UUklHR0VSRURfVVBPTl9CRUxPV19USFJFU0hPTEQgb3IgUlNTSV9UUklHR0VSRURfVVBPTl9FWENDRUVEX1RIUkVTSE9MRAorCVVTSE9SVCAgICAgIERlZmF1bHRMaXN0ZW5Db3VudDsgICAvLyBkZWZhdWx0IGxpc3RlbiBjb3VudDsKKwlVTE9ORyAgICAgICBXaW5kb3dzUG93ZXJNb2RlOyAgICAgICAgICAgLy8gUG93ZXIgbW9kZSBmb3IgQUMgcG93ZXIKKwlVTE9ORyAgICAgICBXaW5kb3dzQmF0dGVyeVBvd2VyTW9kZTsgICAgLy8gUG93ZXIgbW9kZSBmb3IgYmF0dGVyeSBpZiBleGlzdHMKKwlCT09MRUFOICAgICBiV2luZG93c0FDQ0FNRW5hYmxlOyAgICAgICAgLy8gRW5hYmxlIENBTSBwb3dlciBtb2RlIHdoZW4gQUMgb24KKwlCT09MRUFOICAgICBiQXV0b1JlY29ubmVjdDsgICAgICAgICAvLyBTZXQgdG8gVFJVRSB3aGVuIHNldHRpbmcgT0lEXzgwMl8xMV9TU0lEIHdpdGggbm8gbWF0Y2hpbmcgQlNTSUQKKwlVTE9ORyAgICAgICBXaW5kb3dzUG93ZXJQcm9maWxlOyAgICAvLyBXaW5kb3dzIHBvd2VyIHByb2ZpbGUsIGZvciBORElTNS4xIFBuUAorCisJLy8gTUlCOmllZWU4MDJkb3QxMS5kb3QxMXNtdCgxKS5kb3QxMVN0YXRpb25Db25maWdUYWJsZSgxKQorCVVTSE9SVCAgICAgIFBzbTsgICAgICAgICAgICAgICAgICAvLyBwb3dlciBtYW5hZ2VtZW50IG1vZGUgICAoUFdSX0FDVElWRXxQV1JfU0FWRSkKKwlVU0hPUlQgICAgICBEaXNhc3NvY1JlYXNvbjsKKwlVQ0hBUiAgICAgICBEaXNhc3NvY1N0YVtNQUNfQUREUl9MRU5dOworCVVTSE9SVCAgICAgIERlYXV0aFJlYXNvbjsKKwlVQ0hBUiAgICAgICBEZWF1dGhTdGFbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQgICAgICBBdXRoRmFpbFJlYXNvbjsKKwlVQ0hBUiAgICAgICBBdXRoRmFpbFN0YVtNQUNfQUREUl9MRU5dOworCisJTkRJU184MDJfMTFfUFJJVkFDWV9GSUxURVIgICAgICAgICAgUHJpdmFjeUZpbHRlcjsgIC8vIFByaXZhY3lGaWx0ZXIgZW51bSBmb3IgODAyLjFYCisJTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAgICAgQXV0aE1vZGU7ICAgICAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIHRvIHdoYXRldmVyIG1pY3Jvc29mdCBkZWZpbmVkCisJTkRJU184MDJfMTFfV0VQX1NUQVRVUyAgICAgICAgICAgICAgV2VwU3RhdHVzOworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMJCQkJT3JpZ1dlcFN0YXR1czsJLy8gT3JpZ2luYWwgd2VwIHN0YXR1cyBzZXQgZnJvbSBPSUQKKworCS8vIEFkZCB0byBzdXBwb3J0IGRpZmZlcmVudCBjaXBoZXIgc3VpdGUgZm9yIFdQQTIvV1BBIG1vZGUKKwlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJR3JvdXBDaXBoZXI7CQkvLyBNdWx0aWNhc3QgY2lwaGVyIHN1aXRlCisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJCVBhaXJDaXBoZXI7CQkJLy8gVW5pY2FzdCBjaXBoZXIgc3VpdGUKKwlCT09MRUFOCQkJCQkJCQliTWl4Q2lwaGVyOwkJCS8vIEluZGljYXRlIGN1cnJlbnQgUGFpciAmIEdyb3VwIHVzZSBkaWZmZXJlbnQgY2lwaGVyIHN1aXRlcworCVVTSE9SVAkJCQkJCQkJUnNuQ2FwYWJpbGl0eTsKKworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIEdyb3VwS2V5V2VwU3RhdHVzOworCisJVUNIQVIJCVBNS1szMl07ICAgICAgICAgICAgICAgIC8vIFdQQSBQU0sgbW9kZSBQTUsKKwlVQ0hBUiAgICAgICBQVEtbNjRdOyAgICAgICAgICAgICAgICAvLyBXUEEgUFNLIG1vZGUgUFRLCisJVUNIQVIJCUdUS1szMl07CQkJCS8vIEdUSyBmcm9tIGF1dGhlbnRpY2F0b3IKKwlCU1NJRF9JTkZPCVNhdmVkUE1LW1BNS0lEX05PXTsKKwlVSU5UCQlTYXZlZFBNS051bTsJCQkvLyBTYXZlZCBQTUtJRCBudW1iZXIKKworCVVDSEFSCQlEZWZhdWx0S2V5SWQ7CisKKworCS8vIFdQQSA4MDIuMXggcG9ydCBjb250cm9sLCBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCwgV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVECisJVUNIQVIgICAgICAgUG9ydFNlY3VyZWQ7CisKKwkvLyBGb3IgV1BBIGNvdW50ZXJtZWFzdXJlcworCVVMT05HICAgICAgIExhc3RNaWNFcnJvclRpbWU7ICAgLy8gcmVjb3JkIGxhc3QgTUlDIGVycm9yIHRpbWUKKwlVTE9ORyAgICAgICBNaWNFcnJDbnQ7ICAgICAgICAgIC8vIFNob3VsZCBiZSAwLCAxLCAyLCB0aGVuIHJlc2V0IHRvIHplcm8gKGFmdGVyIGRpc2Fzc29pY2lhdGlvbikuCisJQk9PTEVBTiAgICAgYkJsb2NrQXNzb2M7ICAgICAgICAvLyBCbG9jayBhc3NvY2lhdGUgYXR0ZW1wdCBmb3IgNjAgc2Vjb25kcyBhZnRlciBjb3VudGVyIG1lYXN1cmUgb2NjdXJyZWQuCisJLy8gRm9yIFdQQS1QU0sgc3VwcGxpY2FudCBzdGF0ZQorCVdQQV9TVEFURSAgIFdwYVN0YXRlOyAgICAgICAgICAgLy8gRGVmYXVsdCBpcyBTU19OT1RVU0UgYW5kIGhhbmRsZWQgYnkgbWljcm9zb2Z0IDgwMi4xeAorCVVDSEFSICAgICAgIFJlcGxheUNvdW50ZXJbOF07CisJVUNIQVIgICAgICAgQU5vbmNlWzMyXTsgICAgICAgICAvLyBBTm9uY2UgZm9yIFdQQS1QU0sgZnJvbSBhdXJoZW50aWNhdG9yCisJVUNIQVIgICAgICAgU05vbmNlWzMyXTsgICAgICAgICAvLyBTTm9uY2UgZm9yIFdQQS1QU0sKKworCVVDSEFSICAgICAgIExhc3RTTlIwOyAgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIEJFQUNPTidzIFNOUgorCVVDSEFSICAgICAgIExhc3RTTlIxOyAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgQkVBQ09OJ3MgU05SIGZvciAybmQgIGFudGVubmEKKwlSU1NJX1NBTVBMRSBSc3NpU2FtcGxlOworCVVMT05HICAgICAgIE51bU9mQXZnUnNzaVNhbXBsZTsKKworCVVMT05HICAgICAgIExhc3RCZWFjb25SeFRpbWU7ICAgICAvLyBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBCRUFDT04gUlggdGltZQorCVVMT05HICAgICAgIExhc3QxMWJCZWFjb25SeFRpbWU7ICAvLyBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCAxMUIgQkVBQ09OIFJYIHRpbWUKKwlVTE9ORwkJTGFzdDExZ0JlYWNvblJ4VGltZTsJLy8gT1MncyB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgMTFHIEJFQUNPTiBSWCB0aW1lCisJVUxPTkcJCUxhc3QyME5CZWFjb25SeFRpbWU7CS8vIE9TJ3MgdGltZXN0YW1wIG9mIHRoZSBsYXN0IDIwTUh6IE4gQkVBQ09OIFJYIHRpbWUKKworCVVMT05HICAgICAgIExhc3RTY2FuVGltZTsgICAgICAgLy8gUmVjb3JkIGxhc3Qgc2NhbiB0aW1lIGZvciBpc3N1ZSBCU1NJRF9TQ0FOX0xJU1QKKwlVTE9ORyAgICAgICBTY2FuQ250OyAgICAgICAgICAgIC8vIFNjYW4gY291bnRzIHNpbmNlIG1vc3QgcmVjZW50IFNTSUQsIEJTU0lELCBTQ0FOIE9JRCByZXF1ZXN0CisJQk9PTEVBTiAgICAgYlN3UmFkaW87ICAgICAgICAgICAvLyBTb2Z0d2FyZSBjb250cm9sbGVkIFJhZGlvIE9uL09mZiwgVFJVRTogT24KKwlCT09MRUFOICAgICBiSHdSYWRpbzsgICAgICAgICAgIC8vIEhhcmR3YXJlIGNvbnRyb2xsZWQgUmFkaW8gT24vT2ZmLCBUUlVFOiBPbgorCUJPT0xFQU4gICAgIGJSYWRpbzsgICAgICAgICAgICAgLy8gUmFkaW8gc3RhdGUsIEFuZCBvZiBTdyAmIEh3IHJhZGlvIHN0YXRlCisJQk9PTEVBTiAgICAgYkhhcmR3YXJlUmFkaW87ICAgICAvLyBIYXJkd2FyZSBjb250cm9sbGVkIFJhZGlvIGVuYWJsZWQKKwlCT09MRUFOICAgICBiU2hvd0hpZGRlblNTSUQ7ICAgIC8vIFNob3cgYWxsIGtub3duIFNTSUQgaW4gU1NJRCBsaXN0IGdldCBvcGVyYXRpb24KKworICAgIC8vQk9PTEVBTgkJQWRob2NCT25seUpvaW5lZDsJLy8gSW5kaWNhdGUgQWRob2MgQiBKb2luLgorICAgIC8vQk9PTEVBTgkJQWRob2NCR0pvaW5lZDsJCS8vIEluZGljYXRlIEFkaG9jIEIvRyBKb2luLgorICAgIC8vQk9PTEVBTgkJQWRob2MyME5Kb2luZWQ7CQkvLyBJbmRpY2F0ZSBBZGhvYyAyME1IeiBOIEpvaW4uCisKKwkvLyBOZXcgZm9yIFdQQSwgd2luZG93cyB3YW50IHVzIHRvIHRvIGtlZXAgYXNzb2NpYXRpb24gaW5mb3JtYXRpb24gYW5kCisJLy8gRml4ZWQgSUVzIGZyb20gbGFzdCBhc3NvY2lhdGlvbiByZXNwb25zZQorCU5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OICAgICBBc3NvY0luZm87CisJVVNIT1JUICAgICAgIFJlcVZhcklFTGVuOyAgICAgICAgICAgICAgICAvLyBMZW5ndGggb2YgbmV4dCBWSUUgaW5jbHVkZSBFSUQgJiBMZW5ndGgKKwlVQ0hBUiAgICAgICBSZXFWYXJJRXNbTUFYX1ZJRV9MRU5dOwkJLy8gVGhlIGNvbnRlbnQgc2F2ZWQgaGVyZSBzaG91bGQgYmUgbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJVVNIT1JUICAgICAgIFJlc1ZhcklFTGVuOyAgICAgICAgICAgICAgICAvLyBMZW5ndGggb2YgbmV4dCBWSUUgaW5jbHVkZSBFSUQgJiBMZW5ndGgKKwlVQ0hBUiAgICAgICBSZXNWYXJJRXNbTUFYX1ZJRV9MRU5dOworCisJVUNIQVIgICAgICAgUlNOSUVfTGVuOworCVVDSEFSICAgICAgIFJTTl9JRVtNQVhfTEVOX09GX1JTTklFXTsJLy8gVGhlIGNvbnRlbnQgc2F2ZWQgaGVyZSBzaG91bGQgYmUgbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisKKwkvLyBOZXcgdmFyaWFibGVzIHVzZWQgZm9yIENDWCAxLjAKKwlCT09MRUFOICAgICAgICAgICAgIGJDa2lwT247CisJQk9PTEVBTiAgICAgICAgICAgICBiQ2tpcENtaWNPbjsKKwlVQ0hBUiAgICAgICAgICAgICAgIENraXBGbGFnOworCVVDSEFSICAgICAgICAgICAgICAgR0lWWzNdOyAgLy9mb3IgQ0NYIGl2CisJVUNIQVIgICAgICAgICAgICAgICBSeFNFUVs0XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIFR4U0VRWzRdOworCVVDSEFSICAgICAgICAgICAgICAgQ0tJUE1JQ1s0XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIExlYXBBdXRoTW9kZTsKKwlMRUFQX0FVVEhfSU5GTyAgICAgIExlYXBBdXRoSW5mbzsKKwlVQ0hBUiAgICAgICAgICAgICAgIEhhc2hQd2RbMTZdOworCVVDSEFSICAgICAgICAgICAgICAgTmV0d29ya0NoYWxsZW5nZVs4XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIE5ldHdvcmtDaGFsbGVuZ2VSZXNwb25zZVsyNF07CisJVUNIQVIgICAgICAgICAgICAgICBQZWVyQ2hhbGxlbmdlWzhdOworCisJVUNIQVIgICAgICAgICAgICAgICBQZWVyQ2hhbGxlbmdlUmVzcG9uc2VbMjRdOworCVVDSEFSICAgICAgICAgICAgICAgU2Vzc2lvbktleVsxNl07IC8vTmV0d29yayBzZXNzaW9uIGtleXMgKE5TSykKKwlSQUxJTktfVElNRVJfU1RSVUNUIExlYXBBdXRoVGltZXI7CisJUk9HVUVBUF9UQUJMRSAgICAgICBSb2d1ZUFwVGFiOyAgIC8vQ2lzY28gQ0NYMSBSb2d1ZSBBUCBEZXRlY3Rpb24KKworCS8vIE5ldyBjb250cm9sIGZsYWdzIGZvciBDQ1gKKwlDQ1hfQ09OVFJPTCAgICAgICAgIENDWENvbnRyb2w7ICAgICAgICAgICAgICAgICAvLyBNYXN0ZXIgYWRtaW5pc3RyYXRpb24gc3RhdGUKKwlCT09MRUFOICAgICAgICAgICAgIENDWEVuYWJsZTsgICAgICAgICAgICAgICAgICAvLyBBY3R1YWwgQ0NYIHN0YXRlCisJVUNIQVIgICAgICAgICAgICAgICBDQ1hTY2FuQ2hhbm5lbDsgICAgICAgICAgICAgLy8gU2VsZWN0ZWQgY2hhbm5lbCBmb3IgQ0NYIGJlYWNvbiByZXF1ZXN0CisJVVNIT1JUICAgICAgICAgICAgICBDQ1hTY2FuVGltZTsgICAgICAgICAgICAgICAgLy8gVGltZSBvdXQgdG8gd2FpdCBmb3IgYmVhY29uIGFuZCBwcm9iZSByZXNwb25zZQorCVVDSEFSICAgICAgICAgICAgICAgQ0NYUmVxVHlwZTsgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnQgcHJvY2Vzc2luZyBDQ1ggcmVxdWVzdCB0eXBlCisJQlNTX1RBQkxFICAgICAgICAgICBDQ1hCc3NUYWI7ICAgICAgICAgICAgICAgICAgLy8gQlNTIFRhYmxlCisJVUNIQVIgICAgICAgICAgICAgICBGcmFtZVJlcG9ydEJ1ZlsyMDQ4XTsgICAgICAgLy8gQnVmZmVyIGZvciBjcmVhdGluZyBmcmFtZSByZXBvcnQKKwlVU0hPUlQgICAgICAgICAgICAgIEZyYW1lUmVwb3J0TGVuOyAgICAgICAgICAgICAvLyBDdXJyZW50IEZyYW1lIHJlcG9ydCBsZW5ndGgKKwlVTE9ORyAgICAgICAgICAgICAgIENMQnVzeUJ5dGVzOyAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSB0b3RhbCBieXRlcyByZWNlaXZlZCBkdXJuaW5nIGNoYW5uZWwgbG9hZCBzY2FuIHRpbWUKKwlVU0hPUlQgICAgICAgICAgICAgIFJQSURlbnNpdHlbOF07ICAgICAgICAgICAgICAvLyBBcnJheSBmb3IgUlBJIGRlbnNpdHkgY29sbGVjdGlvbgorCS8vIFN0YXJ0IGFkZHJlc3Mgb2YgZWFjaCBCU1MgdGFibGUgd2l0aGluIEZyYW1lUmVwb3J0QnVmCisJLy8gSXQncyBpbXBvcnRhbnQgdG8gdXBkYXRlIHRoZSBSeFBvd2VyIG9mIHRoZSBjb3JyZXNwb25kaW5nIEJzcworCVVTSE9SVCAgICAgICAgICAgICAgQnNzUmVwb3J0T2Zmc2V0W01BWF9MRU5fT0ZfQlNTX1RBQkxFXTsKKwlVU0hPUlQgICAgICAgICAgICAgIEJlYWNvblRva2VuOyAgICAgICAgICAgICAgICAvLyBUb2tlbiBmb3IgYmVhY29uIHJlcG9ydAorCVVMT05HICAgICAgICAgICAgICAgTGFzdEJzc0luZGV4OyAgICAgICAgICAgICAgIC8vIE1vc3QgY3VycmVudCByZXBvcnRlZCBCc3MgaW5kZXgKKwlSTV9SRVFVRVNUX0FDVElPTiAgIE1lYXN1cmVtZW50UmVxdWVzdFsxNl07ICAgICAvLyBTYXZlZCBtZWFzdXJlbWVudCByZXF1ZXN0CisJVUNIQVIgICAgICAgICAgICAgICBSTVJlcUNudDsgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIG1lYXN1cmVtZW50IHJlcXVlc3Qgc2F2ZWQuCisJVUNIQVIgICAgICAgICAgICAgICBDdXJyZW50Uk1SZXFJZHg7ICAgICAgICAgICAgLy8gTnVtYmVyIG9mIG1lYXN1cmVtZW50IHJlcXVlc3Qgc2F2ZWQuCisJQk9PTEVBTiAgICAgICAgICAgICBQYXJhbGxlbFJlcTsgICAgICAgICAgICAgICAgLy8gUGFyYWxsZWwgbWVhc3VyZW1lbnQsIG9ubHkgb25lIHJlcXVlc3QgcGVyZm9ybWVkLAorCQkJCQkJCQkJCQkJCS8vIEl0IG11c3QgYmUgdGhlIHNhbWUgY2hhbm5lbCB3aXRoIG1heGltdW0gZHVyYXRpb24KKwlVU0hPUlQgICAgICAgICAgICAgIFBhcmFsbGVsRHVyYXRpb247ICAgICAgICAgICAvLyBNYXhpbXVtIGR1cmF0aW9uIGZvciBwYXJhbGxlbCBtZWFzdXJlbWVudAorCVVDSEFSICAgICAgICAgICAgICAgUGFyYWxsZWxDaGFubmVsOyAgICAgICAgICAgIC8vIE9ubHkgb25lIGNoYW5uZWwgd2l0aCBwYXJhbGxlbCBtZWFzdXJlbWVudAorCVVTSE9SVCAgICAgICAgICAgICAgSUFQUFRva2VuOyAgICAgICAgICAgICAgICAgIC8vIElBUFAgZGlhbG9nIHRva2VuCisJVUNIQVIgICAgICAgICAgICAgICBDQ1hRb3NFQ1dNaW47ICAgICAgICAgICAgICAgLy8gQ2lzY28gUU9TIEVDV01pbiBmb3IgQUMgMAorCVVDSEFSICAgICAgICAgICAgICAgQ0NYUW9zRUNXTWF4OyAgICAgICAgICAgICAgIC8vIENpc2NvIFFPUyBFQ1dNYXggZm9yIEFDIDAKKwkvLyBIYWNrIGZvciBjaGFubmVsIGxvYWQgYW5kIG5vaXNlIGhpc3RvZ3JhbSBwYXJhbWV0ZXJzCisJVUNIQVIgICAgICAgICAgICAgICBOSEZhY3RvcjsgICAgICAgICAgICAgICAgICAgLy8gUGFyYW1ldGVyIGZvciBOb2lzZSBoaXN0b2dyYW0KKwlVQ0hBUiAgICAgICAgICAgICAgIENMRmFjdG9yOyAgICAgICAgICAgICAgICAgICAvLyBQYXJhbWV0ZXIgZm9yIGNoYW5uZWwgbG9hZAorCisJVUNIQVIgICAgICAgICAgICAgICBLUktbMTZdOyAgICAgICAgLy9LZXkgUmVmcmVzaCBLZXkuCisJVUNIQVIgICAgICAgICAgICAgICBCVEtbMzJdOyAgICAgICAgLy9CYXNlIFRyYW5zaWVudCBLZXkKKwlCT09MRUFOICAgICAgICAgICAgIENDS01MaW5rVXBGbGFnOworCVVMT05HICAgICAgICAgICAgICAgQ0NLTVJOOyAgICAvLyhSZSlBc3NvY2lhdGlvbiByZXF1ZXN0IG51bWJlci4KKwlMQVJHRV9JTlRFR0VSICAgICAgIENDS01CZWFjb25BdEpvaW5UaW1lU3RhbXA7ICAvL1RTRiB0aW1lciBmb3IgUmUtYXNzb2NhaXRlIHRvIHRoZSBuZXcgQVAKKwlVQ0hBUiAgICAgICAgICAgICAgIEFpcm9uZXRDZWxsUG93ZXJMaW1pdDsgICAgICAvL2luIGRCbQorCVVDSEFSICAgICAgICAgICAgICAgQWlyb25ldElQQWRkcmVzc1s0XTsgICAgICAgIC8vZWcuIDE5Mi4xNjguMS4xCisJQk9PTEVBTiAgICAgICAgICAgICBDQ1hBZGphY2VudEFQUmVwb3J0RmxhZzsgICAgLy9mbGFnIGZvciBkZXRlcm1pbmluZyByZXBvcnQgQXNzb2MgTG9zdCB0aW1lCisJQ0hBUiAgICAgICAgICAgICAgICBDQ1hBZGphY2VudEFQU3NpZFtNQVhfTEVOX09GX1NTSURdOyAvL0FkamFjZW50IEFQJ3MgU1NJRCByZXBvcnQKKwlVQ0hBUiAgICAgICAgICAgICAgIENDWEFkamFjZW50QVBTc2lkTGVuOyAgICAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgc3NpZCBsZW5ndGggaW4gdXNlZAorCVVDSEFSICAgICAgICAgICAgICAgQ0NYQWRqYWNlbnRBUEJzc2lkW01BQ19BRERSX0xFTl07ICAgICAgICAgLy9BZGphY2VudCBBUCdzIEJTU0lEIHJlcG9ydAorCVVTSE9SVCAgICAgICAgICAgICAgQ0NYQWRqYWNlbnRBUENoYW5uZWw7CisJVUxPTkcgICAgICAgICAgICAgICBDQ1hBZGphY2VudEFQTGlua0Rvd25UaW1lOyAgLy9mb3IgU3BlYyBTMzIuCisKKwlSQUxJTktfVElNRVJfU1RSVUNUCVN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyOworCUJPT0xFQU4JCQkJU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nOworCisJVUNIQVIgICAgICAgICAgIAlEdGltQ291bnQ7ICAgICAgLy8gMC4uIER0aW1QZXJpb2QtMQorCVVDSEFSICAgICAgICAgICAJRHRpbVBlcmlvZDsgICAgIC8vIGRlZmF1bHQgPSAzCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwlSVF84MDJfMTFfRExTCQlETFNFbnRyeVtNQVhfTlVNX09GX0RMU19FTlRSWV07CisJVUNIQVIJCQkJRGxzUmVwbGF5Q291bnRlcls4XTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJLy8gVGhpcyBpcyBvbmx5IGZvciBXSFFMIHRlc3QuCisJQk9PTEVBTgkJCQlXaHFsVGVzdDsKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBSQUxJTktfVElNRVJfU1RSVUNUIFdwYURpc2Fzc29jQW5kQmxvY2tBc3NvY1RpbWVyOworICAgIC8vIEZhc3QgUm9hbWluZworCUJPT0xFQU4JCSAgICAgICAgYkZhc3RSb2FtaW5nOyAgICAgICAvLyAwOmRpc2FibGUgZmFzdCByb2FtaW5nLCAxOmVuYWJsZSBmYXN0IHJvYW1pbmcKKwlDSEFSCQkgICAgICAgIGRCbVRvUm9hbTsgICAgICAgICAgLy8gdGhlIGNvbmRpdGlvbiB0byByb2FtIHdoZW4gcmVjZWl2aW5nIFJzc2kgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIEl0J3MgbmVnYXRpdmUgdmFsdWUuCisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgQk9PTEVBTiAgICAgICAgICAgICBJRUVFODAyMVg7CisgICAgQk9PTEVBTiAgICAgICAgICAgICBJRUVFODAyMXhfcmVxdWlyZWRfa2V5czsKKyAgICBDSVBIRVJfS0VZCSAgICAgICAgRGVzaXJlU2hhcmVkS2V5WzRdOwkvLyBSZWNvcmQgdXNlciBkZXNpcmVkIFdFUCBrZXlzCisgICAgVUNIQVIgICAgICAgICAgICAgICBEZXNpcmVTaGFyZWRLZXlJZDsKKworICAgIC8vIDA6IGRyaXZlciBpZ25vcmVzIHdwYV9zdXBwbGljYW50CisgICAgLy8gMTogd3BhX3N1cHBsaWNhbnQgaW5pdGlhdGVzIHNjYW5uaW5nIGFuZCBBUCBzZWxlY3Rpb24KKyAgICAvLyAyOiBkcml2ZXIgdGFrZXMgY2FyZSBvZiBzY2FubmluZywgQVAgc2VsZWN0aW9uLCBhbmQgSUVFRSA4MDIuMTEgYXNzb2NpYXRpb24gcGFyYW1ldGVycworICAgIFVDSEFSICAgICAgICAgICAgICAgV3BhU3VwcGxpY2FudFVQOworCVVDSEFSCQkJCVdwYVN1cHBsaWNhbnRTY2FuQ291bnQ7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisgICAgQ0hBUiAgICAgICAgICAgICAgICBkZXZfbmFtZVsxNl07CisgICAgVVNIT1JUICAgICAgICAgICAgICBPcmlEZXZUeXBlOworCisgICAgQk9PTEVBTiAgICAgICAgICAgICBiVEduV2lmaVRlc3Q7CisJQk9PTEVBTgkJCSAgICBiU2NhblJlcUlzRnJvbVdlYlVJOworCisJSFRUUkFOU01JVF9TRVRUSU5HCQkJCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7Ly8gRm9yIHRyYW5zbWl0IHBoeSBzZXR0aW5nIGluIFRYV0kuCisJREVTSVJFRF9UUkFOU01JVF9TRVRUSU5HICAgICAgIAlEZXNpcmVkVHJhbnNtaXRTZXR0aW5nOworCVJUX0hUX1BIWV9JTkZPCQkJCQlEZXNpcmVkSHRQaHlJbmZvOworCUJPT0xFQU4JCQkJCQkJYkF1dG9UeFJhdGVTd2l0Y2g7CisKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlVQ0hBUgkJCQlJRUVFODAyMTFkQ2xpZW50TW9kZTsKKwlVQ0hBUgkJCQlTdGFPcmlDb3VudHJ5Q29kZVszXTsKKwlVQ0hBUgkJCQlTdGFPcmlHZW9ncmFwaHk7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworfSBTVEFfQURNSU5fQ09ORklHLCAqUFNUQV9BRE1JTl9DT05GSUc7CisKKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUga2VlcCB0aGUgY3VycmVudCBhY3RpdmUgQlNTL0lCU1MncyBjb25maWd1cmF0aW9uIHRoYXQgdGhpcyBTVEEKKy8vIGhhZCBhZ3JlZWQgdXBvbiBqb2luaW5nIHRoZSBuZXR3b3JrLiBXaGljaCBtZWFucyB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c3VhbGx5IGRlY2lkZWQKKy8vIGJ5IHRoZSBCU1MvSUJTUyBjcmVhdG9yIGluc3RlYWQgb2YgdXNlciBjb25maWd1cmF0aW9uLiBEYXRhIGluIHRoaXMgZGF0YSBzdHJ1Y3R1cnJlCisvLyBpcyB2YWxpZCBvbmx5IHdoZW4gZWl0aGVyIEFESE9DX09OKHBBZCkgb3IgSU5GUkFfT04ocEFkKSBpcyBUUlVFLgorLy8gTm9ybWFsbHksIGFmdGVyIFNDQU4gb3IgZmFpbGVkIHJvYW1pbmcgYXR0ZW1wdHMsIHdlIG5lZWQgdG8gcmVjb3ZlciBiYWNrIHRvCisvLyB0aGUgY3VycmVudCBhY3RpdmUgc2V0dGluZ3MuCit0eXBlZGVmIHN0cnVjdCBfU1RBX0FDVElWRV9DT05GSUcgeworCVVTSE9SVCAgICAgIEFpZDsKKwlVU0hPUlQgICAgICBBdGltV2luOyAgICAgICAgICAgICAgICAvLyBpbiBrdXNlYzsgSUJTUyBwYXJhbWV0ZXIgc2V0IGVsZW1lbnQKKwlVU0hPUlQgICAgICBDYXBhYmlsaXR5SW5mbzsKKwlVU0hPUlQgICAgICBDZnBNYXhEdXJhdGlvbjsKKwlVU0hPUlQgICAgICBDZnBQZXJpb2Q7CisKKwkvLyBDb3B5IHN1cHBvcnRlZCByYXRlIGZyb20gZGVzaXJlZCBBUCdzIGJlYWNvbi4gV2UgYXJlIHRyeWluZyB0byBtYXRjaAorCS8vIEFQJ3Mgc3VwcG9ydGVkIGFuZCBleHRlbmRlZCByYXRlIHNldHRpbmdzLgorCVVDSEFSICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSICAgICAgIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSICAgICAgIFN1cFJhdGVMZW47CisJVUNIQVIgICAgICAgRXh0UmF0ZUxlbjsKKwkvLyBDb3B5IHN1cHBvcnRlZCBodCBmcm9tIGRlc2lyZWQgQVAncyBiZWFjb24uIFdlIGFyZSB0cnlpbmcgdG8gbWF0Y2gKKwlSVF9IVF9QSFlfSU5GTwkJU3VwcG9ydGVkUGh5SW5mbzsKKwlSVF9IVF9DQVBBQklMSVRZCVN1cHBvcnRlZEh0UGh5OworfSBTVEFfQUNUSVZFX0NPTkZJRywgKlBTVEFfQUNUSVZFX0NPTkZJRzsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIFJUMjg3MAordHlwZWRlZiBzdHJ1Y3QgICBSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZIHsKKyAgICAgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgICAgICAgICBNYWNBZGRyOworICAgICAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY1RhYk1hdGNoV0NJRDsgICAgICAgIC8vIEFTSUMKKyAgICAgICAgQ0lQSEVSX0tFWSAgICAgIENpcGhlcktleTsKK30gUlRfQUREX1BBSVJXSVNFX0tFWV9FTlRSWSwqUFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKy8vIC0tLS0tLS0tLS0tIHN0YXJ0IG9mIEFQIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBVVRILVJTUCBTdGF0ZSBNYWNoaW5lIEF1eCBkYXRhIHN0cnVjdHVyZQordHlwZWRlZiBzdHJ1Y3QgX0FQX01MTUVfQVVYIHsKKwlVQ0hBUiAgICAgICAgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQgICAgICAgICAgICAgIEFsZzsKKwlDSEFSICAgICAgICAgICAgICAgIENoYWxsZW5nZVtDSVBIRVJfVEVYVF9MRU5dOworfSBBUF9NTE1FX0FVWCwgKlBBUF9NTE1FX0FVWDsKKworLy8gc3RydWN0dXJlIHRvIGRlZmluZSBXUEEgR3JvdXAgS2V5IFJla2V5IEludGVydmFsCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JUXzgwMl8xMV9XUEFfUkVLRVkgeworCVVMT05HIFJlS2V5TWV0aG9kOyAgICAgICAgICAvLyBtZWNoYW5pc20gZm9yIHJla2V5aW5nOiAwOmRpc2FibGUsIDE6IHRpbWUtYmFzZWQsIDI6IHBhY2tldC1iYXNlZAorCVVMT05HIFJlS2V5SW50ZXJ2YWw7ICAgICAgICAvLyB0aW1lLWJhc2VkOiBzZWNvbmRzLCBwYWNrZXQtYmFzZWQ6IGtpbG8tcGFja2V0cworfSBSVF9XUEFfUkVLRVksKlBSVF9XUEFfUkVLRVksIFJUXzgwMl8xMV9XUEFfUkVLRVksICpQUlRfODAyXzExX1dQQV9SRUtFWTsKKwordHlwZWRlZiBzdHJ1Y3QgX01BQ19UQUJMRV9FTlRSWSB7CisJLy9DaG9vc2UgMSBmcm9tIFZhbGlkQXNXRFMgYW5kIFZhbGlkQXNDTEkgIHRvIHZhbGlkaXplLgorCUJPT0xFQU4JCVZhbGlkQXNDTEk7CQkvLyBTdGEgbW9kZSwgc2V0IHRoaXMgVFJVRSBhZnRlciBMaW5rdXAsdG9vLgorCUJPT0xFQU4JCVZhbGlkQXNXRFM7CS8vIFRoaXMgaXMgV0RTIEVudHJ5LiBvbmx5IGZvciBBUCBtb2RlLgorCUJPT0xFQU4JCVZhbGlkQXNBcENsaTsgICAvL1RoaXMgaXMgYSBBUC1DbGllbnQgZW50cnksIG9ubHkgZm9yIEFQIG1vZGUgd2hpY2ggZW5hYmxlIEFQLUNsaWVudCBmdW5jdGlvbnMuCisJQk9PTEVBTgkJVmFsaWRBc01lc2g7CisJQk9PTEVBTgkJVmFsaWRBc0RsczsJLy8gVGhpcyBpcyBETFMgRW50cnkuIG9ubHkgZm9yIFNUQSBtb2RlLgorCUJPT0xFQU4JCWlzQ2FjaGVkOworCUJPT0xFQU4JCWJJQW1CYWRBdGhlcm9zOworCisJVUNIQVIgICAgICAgICAJRW5xdWV1ZUVhcG9sU3RhcnRUaW1lclJ1bm5pbmc7ICAvLyBFbnF1ZXVlIEVBUG9MLVN0YXJ0IGZvciB0cmlnZ2VyaW5nIEVBUCBTTQorCS8vamFuIGZvciB3cGEKKwkvLyByZWNvcmQgd2hpY2ggZW50cnkgcmV2b2tlIE1JQyBGYWlsdXJlICwgaWYgaXQgbGVhdmVzIHRoZSBCU1MgaXRzZWxmLCBBUCB3b24ndCB1cGRhdGUgYU1JQ0ZhaWxUaW1lIE1JQgorCVVDSEFSICAgICAgICAgICBDTVRpbWVyUnVubmluZzsKKwlVQ0hBUiAgICAgICAgICAgYXBpZHg7CQkJLy8gTUJTUyBudW1iZXIKKwlVQ0hBUiAgICAgICAgICAgUlNOSUVfTGVuOworCVVDSEFSICAgICAgICAgICBSU05fSUVbTUFYX0xFTl9PRl9SU05JRV07CisJVUNIQVIgICAgICAgICAgIEFOb25jZVtMRU5fS0VZX0RFU0NfTk9OQ0VdOworCVVDSEFSICAgICAgICAgICBSX0NvdW50ZXJbTEVOX0tFWV9ERVNDX1JFUExBWV07CisJVUNIQVIgICAgICAgICAgIFBUS1s2NF07CisJVUNIQVIgICAgICAgICAgIFJlVHJ5Q291bnRlcjsKKwlSQUxJTktfVElNRVJfU1RSVUNUICAgICAgICAgICAgICAgICBSZXRyeVRpbWVyOworCVJBTElOS19USU1FUl9TVFJVQ1QJCQkJCUVucXVldWVTdGFydEZvclBTS1RpbWVyOwkvLyBBIHRpbWVyIHdoaWNoIGVucXVldWUgRUFQb0wtU3RhcnQgZm9yIHRyaWdnZXJpbmcgUFNLIFNNCisJTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAgICAgQXV0aE1vZGU7ICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggdG8gd2hhdGV2ZXIgbWljcm9zb2Z0IGRlZmluZWQKKwlORElTXzgwMl8xMV9XRVBfU1RBVFVTICAgICAgICAgICAgICBXZXBTdGF0dXM7CisJQVBfV1BBX1NUQVRFICAgIFdwYVN0YXRlOworCUdUS19TVEFURSAgICAgICBHVEtTdGF0ZTsKKwlVU0hPUlQgICAgICAgICAgUG9ydFNlY3VyZWQ7CisJTkRJU184MDJfMTFfUFJJVkFDWV9GSUxURVIgIFByaXZhY3lGaWx0ZXI7ICAgICAgLy8gUHJpdmFjeUZpbHRlciBlbnVtIGZvciA4MDIuMVgKKwlDSVBIRVJfS0VZICAgICAgUGFpcndpc2VLZXk7CisJUFZPSUQgICAgICAgICAgIHBBZDsKKyAgICBJTlQJCQkJUE1LSURfQ2FjaGVJZHg7CisgICAgVUNIQVIJCQlQTUtJRFtMRU5fUE1LSURdOworCisKKwlVQ0hBUiAgICAgICAgICAgQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBQc01vZGU7CisJU1NUICAgICAgICAgICAgIFNzdDsKKwlBVVRIX1NUQVRFICAgICAgQXV0aFN0YXRlOyAvLyBmb3IgU0hBUkVEIEtFWSBhdXRoZW50aWNhdGlvbiBzdGF0ZSBtYWNoaW5lIHVzZWQgb25seQorCUJPT0xFQU4JCQlJc1JlYXNzb2NTdGE7CS8vIEluZGljYXRlIHdoZXRoZXIgdGhpcyBpcyBhIHJlYXNzb2NpYXRpb24gcHJvY2VkdXJlCisJVVNIT1JUICAgICAgICAgIEFpZDsKKwlVU0hPUlQgICAgICAgICAgQ2FwYWJpbGl0eUluZm87CisJVUNIQVIgICAgICAgICAgIExhc3RSc3NpOworCVVMT05HICAgICAgICAgICBOb0RhdGFJZGxlQ291bnQ7CisJVUlOVDE2CQkJU3RhdGlvbktlZXBBbGl2ZUNvdW50OyAvLyB1bml0OiBzZWNvbmQKKwlVTE9ORyAgICAgICAgICAgUHNRSWRsZUNvdW50OworCVFVRVVFX0hFQURFUiAgICBQc1F1ZXVlOworCisJVUlOVDMyCQkJU3RhQ29ubmVjdFRpbWU7CQkvLyB0aGUgbGl2ZSB0aW1lIG9mIHRoaXMgc3RhdGlvbiBzaW5jZSBhc3NvY2lhdGVkIHdpdGggQVAKKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJQk9PTEVBTgkJCWJTZW5kQkFSOworCVVTSE9SVAkJCU5vQkFEYXRhQ291bnREb3duOworCisJVUlOVDMyICAgCQlDYWNoZWRCdWZbMTZdOwkJLy8gVUlOVCAoNCBieXRlcykgZm9yIGFsaWdubWVudAorCVVJTlQJCQlUeEJGQ291bnQ7IC8vIDMqMworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCVVJTlQJCQlGSUZPQ291bnQ7CisJVUlOVAkJCURlYnVnRklGT0NvdW50OworCVVJTlQJCQlEZWJ1Z1R4Q291bnQ7CisgICAgQk9PTEVBTgkJCWJEbHNJbml0OworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy9XRFMgZW50cnkgbmVlZHMgdGhlc2UKKy8vIHJ0Mjg2MCBhZGQgdGhpcy4gaWYgVmFsaWRBc1dEUz09VFJVRSwgTWF0Y2hXRFNUYWJJZHggaXMgdGhlIGluZGV4IGluIFdkc1RhYi5NYWNUYWIKKwlVSU5UCQkJTWF0Y2hXRFNUYWJJZHg7CisJVUNIQVIgICAgICAgICAgIE1heFN1cHBvcnRlZFJhdGU7CisJVUNIQVIgICAgICAgICAgIEN1cnJUeFJhdGU7CisJVUNIQVIgICAgICAgICAgIEN1cnJUeFJhdGVJbmRleDsKKwkvLyB0byByZWNvcmQgdGhlIGVhY2ggVFggcmF0ZSdzIHF1YWxpdHkuIDAgaXMgYmVzdCwgdGhlIGJpZ2dlciB0aGUgd29yc2UuCisJVVNIT1JUICAgICAgICAgIFR4UXVhbGl0eVtNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSF07CisvLwlVU0hPUlQgICAgICAgICAgT25lU2VjVHhPa0NvdW50OworCVVJTlQzMgkJCU9uZVNlY1R4Tm9SZXRyeU9rQ291bnQ7CisJVUlOVDMyICAgICAgICAgIE9uZVNlY1R4UmV0cnlPa0NvdW50OworCVVJTlQzMiAgICAgICAgICBPbmVTZWNUeEZhaWxDb3VudDsKKwlVSU5UMzIJCQlDb250aW51ZVR4RmFpbENudDsKKwlVSU5UMzIgICAgICAgICAgQ3VyclR4UmF0ZVN0YWJsZVRpbWU7IC8vICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZQorCVVDSEFSICAgICAgICAgICBUeFJhdGVVcFBlbmFsdHk7ICAgICAgLy8gZXh0cmEgIyBvZiBzZWNvbmQgcGVuYWx0eSBkdWUgdG8gbGFzdCB1bnN0YWJsZSBjb25kaXRpb24KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCVVJTlQJCQlNYXRjaERsc0VudHJ5SWR4OyAvLyBpbmRpY2F0ZSB0aGUgaW5kZXggaW4gcEFkLT5TdGFDZmcuRExTRW50cnkKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCUJPT0xFQU4gICAgICAgICBmTm9pc3lFbnZpcm9ubWVudDsKKwlCT09MRUFOCQkJZkxhc3RTZWNBY2NvcmRpbmdSU1NJOworCVVDSEFSICAgICAgICAgICBMYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uOyAvLyAwOiBubyBjaGFuZ2UsIDE6cmF0ZSBVUCwgMjpyYXRlIGRvd24KKwlDSEFSCQkJTGFzdFRpbWVUeFJhdGVDaGFuZ2VBY3Rpb247IC8vS2VlcCBsYXN0IHRpbWUgdmFsdWUgb2YgTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbgorCVVMT05HCQkJTGFzdFR4T2tDb3VudDsKKwlVQ0hBUiAgICAgICAgICAgUEVSW01BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIXTsKKworCS8vIGEgYml0bWFwIG9mIEJPT0xFQU4gZmxhZ3MuIGVhY2ggYml0IHJlcHJlc2VudCBhbiBvcGVyYXRpb24gc3RhdHVzIG9mIGEgcGFydGljdWxhcgorCS8vIEJPT0xFQU4gY29udHJvbCwgZWl0aGVyIE9OIG9yIE9GRi4gVGhlc2UgZmxhZ3Mgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZCB2aWEKKwkvLyBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRygpLCBDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCksIENMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRygpIG1hY3Jvcy4KKwkvLyBzZWUgZk9QX1NUQVRVU194eHggaW4gUlRNUF9ERUYuQyBmb3IgZGV0YWlsIGJpdCBkZWZpbml0aW9uLiBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQKKwlVTE9ORyAgICAgICAgICAgQ2xpZW50U3RhdHVzRmxhZ3M7CisKKwkvLyBUT0RPOiBTaGFsbCB3ZSBtb3ZlIHRoYXQgdG8gRE9UMTFfTl9TVVBQT1JUPz8/CisJSFRUUkFOU01JVF9TRVRUSU5HCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7Ly8gRm9yIHRyYW5zbWl0IHBoeSBzZXR0aW5nIGluIFRYV0kuCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBIVCBFV0MgTUlNTy1OIHVzZWQgcGFyYW1ldGVycworCVVTSE9SVAkJUlhCQWJpdG1hcDsJLy8gZmlsbCB0byBvbi1jaGlwICBSWFdJX0JBX0JJVE1BU0sgaW4gOC4xLjNSWCBhdHRyaWJ1dGUgZW50cnkgZm9ybWF0CisJVVNIT1JUCQlUWEJBYml0bWFwOwkvLyBUaGlzIGJpdG1hcCBhcyBvcmlnaW5hdG9yLCBvbmx5IGtlZXAgaW4gc29mdHdhcmUgdXNlZCB0byBtYXJrIEFNUERVIGJpdCBpbiBUWFdJCisJVVNIT1JUCQlUWEF1dG9CQWJpdG1hcDsKKwlVU0hPUlQJCUJBRGVjbGluZUJpdG1hcDsKKwlVU0hPUlQJCUJBUmVjV2NpZEFycmF5W05VTV9PRl9USURdOwkvLyBUaGUgbWFwcGluZyB3Y2lkIG9mIHJlY2lwaWVudCBzZXNzaW9uLiBpZiBSWEJBYml0bWFwIGJpdCBpcyBtYXNrZWQKKwlVU0hPUlQJCUJBT3JpV2NpZEFycmF5W05VTV9PRl9USURdOyAvLyBUaGUgbWFwcGluZyB3Y2lkIG9mIG9yaWdpbmF0b3Igc2Vzc2lvbi4gaWYgVFhCQWJpdG1hcCBiaXQgaXMgbWFza2VkCisJVVNIT1JUCQlCQU9yaVNlcXVlbmNlW05VTV9PRl9USURdOyAvLyBUaGUgbWFwcGluZyB3Y2lkIG9mIG9yaWdpbmF0b3Igc2Vzc2lvbi4gaWYgVFhCQWJpdG1hcCBiaXQgaXMgbWFza2VkCisKKwkvLyA4MDIuMTFuIGZlYXR1cmVzLgorCVVDSEFSCQlNcGR1RGVuc2l0eTsKKwlVQ0hBUgkJTWF4UkFtcGR1RmFjdG9yOworCVVDSEFSCQlBTXNkdVNpemU7CisJVUNIQVIJCU1tcHNNb2RlOwkvLyBNSU1PIHBvd2VyIHNhdmUgbW9yZS4KKworCUhUX0NBUEFCSUxJVFlfSUUJCUhUQ2FwYWJpbGl0eTsKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKwlVQ0hBUgkJQlNTMjA0MENvZXhpc3RlbmNlTWdtdFN1cHBvcnQ7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJQk9PTEVBTgkJYkF1dG9UeFJhdGVTd2l0Y2g7CisKKwlVQ0hBUiAgICAgICBSYXRlTGVuOworCXN0cnVjdCBfTUFDX1RBQkxFX0VOVFJZICpwTmV4dDsKKyAgICBVU0hPUlQgICAgICBUeFNlcVtOVU1fT0ZfVElEXTsKKwlVU0hPUlQJCU5vblFvc0RhdGFTZXE7CisKKwlSU1NJX1NBTVBMRQlSc3NpU2FtcGxlOworCisJVUlOVDMyCQkJVFhNQ1NFeHBlY3RlZFsxNl07CisJVUlOVDMyCQkJVFhNQ1NTdWNjZXNzZnVsWzE2XTsKKwlVSU5UMzIJCQlUWE1DU0ZhaWxlZFsxNl07CisJVUlOVDMyCQkJVFhNQ1NBdXRvRmFsbEJhY2tbMTZdWzE2XTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBMYXN0QmVhY29uUnhUaW1lOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworfSBNQUNfVEFCTEVfRU5UUlksICpQTUFDX1RBQkxFX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfTUFDX1RBQkxFIHsKKwlVU0hPUlQJCQlTaXplOworCU1BQ19UQUJMRV9FTlRSWSAqSGFzaFtIQVNIX1RBQkxFX1NJWkVdOworCU1BQ19UQUJMRV9FTlRSWSBDb250ZW50W01BWF9MRU5fT0ZfTUFDX1RBQkxFXTsKKwlRVUVVRV9IRUFERVIgICAgTWNhc3RQc1F1ZXVlOworCVVMT05HICAgICAgICAgICBQc1FJZGxlQ291bnQ7CisJQk9PTEVBTiAgICAgICAgIGZBbnlTdGF0aW9uSW5Qc207CisJQk9PTEVBTiAgICAgICAgIGZBbnlTdGF0aW9uQmFkQXRoZXJvczsJLy8gQ2hlY2sgaWYgYW55IFN0YXRpb24gaXMgYXRoZXJvcyA4MDIuMTFuIENoaXAuICBXZSBuZWVkIHRvIHVzZSBSVFMvQ1RTIHdpdGggQXRoZXJvcyA4MDIsLjExbiBjaGlwLgorCUJPT0xFQU4JCQlmQW55VHhPUEZvcmNlRGlzYWJsZTsJLy8gQ2hlY2sgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGRpc2FibGUgQkUgVHhPUAorCUJPT0xFQU4JCQlmQWxsU3RhdGlvbkFzUmFsaW5rOyAJLy8gQ2hlY2sgaWYgYWxsIHN0YXRpb25zIGFyZSByYWxpbmstY2hpcHNldAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJPT0xFQU4gICAgICAgICBmQW55U3RhdGlvbklzTGVnYWN5OwkvLyBDaGVjayBpZiBJIHVzZSBsZWdhY3kgcmF0ZSB0byB0cmFuc21pdCB0byBteSBCU1MgU3RhdGlvbi8KKwlCT09MRUFOICAgICAgICAgZkFueVN0YXRpb25Ob25HRjsJCS8vIENoZWNrIGlmIGFueSBTdGF0aW9uIGNhbid0IHN1cHBvcnQgR0YuCisJQk9PTEVBTiAgICAgICAgIGZBbnlTdGF0aW9uMjBPbmx5OwkJLy8gQ2hlY2sgaWYgYW55IFN0YXRpb24gY2FuJ3Qgc3VwcG9ydCBHRi4KKwlCT09MRUFOCQkJZkFueVN0YXRpb25NSU1PUFNEeW5hbWljOyAvLyBDaGVjayBpZiBhbnkgU3RhdGlvbiBpcyBNSU1PIER5bmFtaWMKKwlCT09MRUFOICAgICAgICAgZkFueUJBU2Vzc2lvbjsgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBCQSBzZXNzaW9uLiAgRm9yY2UgdHVybiBvbiBSVFMvQ1RTCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCit9IE1BQ19UQUJMRSwgKlBNQUNfVEFCTEU7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNkZWZpbmUgSVNfSFRfU1RBKF9wTWFjRW50cnkpCVwKKwkoX3BNYWNFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkKKworI2RlZmluZSBJU19IVF9SQVRFKF9wTWFjRW50cnkpCVwKKwkoX3BNYWNFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkKKworI2RlZmluZSBQRUVSX0lTX0hUX1JBVEUoX3BNYWNFbnRyeSkJXAorCShfcE1hY0VudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCit0eXBlZGVmIHN0cnVjdCBfV0RTX0VOVFJZIHsKKwlCT09MRUFOICAgICAgICAgVmFsaWQ7CisJVUNIQVIgICAgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKwlVTE9ORyAgICAgICAgICAgTm9EYXRhSWRsZUNvdW50OworCXN0cnVjdCBfV0RTX0VOVFJZICpwTmV4dDsKK30gV0RTX0VOVFJZLCAqUFdEU19FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgIF9XRFNfVEFCTEVfRU5UUlkgeworCVVTSE9SVAkJCVNpemU7CisJVUNIQVIgICAgICAgICAgIFdkc0FkZHJbTUFDX0FERFJfTEVOXTsKKwlXRFNfRU5UUlkgICAgICAgKkhhc2hbSEFTSF9UQUJMRV9TSVpFXTsKKwlXRFNfRU5UUlkgICAgICAgQ29udGVudFtNQVhfTEVOX09GX01BQ19UQUJMRV07CisJVUNIQVIgICAgICAgICAgIE1heFN1cHBvcnRlZFJhdGU7CisJVUNIQVIgICAgICAgICAgIEN1cnJUeFJhdGU7CisJVVNIT1JUICAgICAgICAgIFR4UXVhbGl0eVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVVNIT1JUICAgICAgICAgIE9uZVNlY1R4T2tDb3VudDsKKwlVU0hPUlQgICAgICAgICAgT25lU2VjVHhSZXRyeU9rQ291bnQ7CisJVVNIT1JUICAgICAgICAgIE9uZVNlY1R4RmFpbENvdW50OworCVVMT05HICAgICAgICAgICBDdXJyVHhSYXRlU3RhYmxlVGltZTsgLy8gIyBvZiBzZWNvbmQgaW4gY3VycmVudCBUWCByYXRlCisJVUNIQVIgICAgICAgICAgIFR4UmF0ZVVwUGVuYWx0eTsgICAgICAvLyBleHRyYSAjIG9mIHNlY29uZCBwZW5hbHR5IGR1ZSB0byBsYXN0IHVuc3RhYmxlIGNvbmRpdGlvbgorfSBXRFNfVEFCTEVfRU5UUlksICpQV0RTX1RBQkxFX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX1dEU19FTlRSWSB7CisJUE5FVF9ERVYJCQlkZXY7CisJVUNIQVIJCQkJVmFsaWQ7CisJVUNIQVIJCQkJUGh5TW9kZTsKKwlVQ0hBUgkJCQlQZWVyV2RzQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSCQkJCU1hY1RhYk1hdGNoV0NJRDsJLy8gQVNJQworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMgIFdlcFN0YXR1czsKKwlVQ0hBUgkJCQkJS2V5SWR4OworCUNJUEhFUl9LRVkgICAgICAgICAgCVdkc0tleTsKKwlIVFRSQU5TTUlUX1NFVFRJTkcJCQkJSFRQaHlNb2RlLCBNYXhIVFBoeU1vZGUsIE1pbkhUUGh5TW9kZTsKKwlSVF9IVF9QSFlfSU5GTwkJCQkJRGVzaXJlZEh0UGh5SW5mbzsKKwlCT09MRUFOCQkJCQkJCWJBdXRvVHhSYXRlU3dpdGNoOworCURFU0lSRURfVFJBTlNNSVRfU0VUVElORyAgICAgICAJRGVzaXJlZFRyYW5zbWl0U2V0dGluZzsgLy8gRGVzaXJlZCB0cmFuc21pdCBzZXR0aW5nLgorfSBSVF84MDJfMTFfV0RTX0VOVFJZLCAqUFJUXzgwMl8xMV9XRFNfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0IF9XRFNfVEFCTEUgeworCVVDSEFSICAgICAgICAgICAgICAgTW9kZTsKKwlVTE9ORyAgICAgICAgICAgICAgIFNpemU7CisJUlRfODAyXzExX1dEU19FTlRSWQlXZHNFbnRyeVtNQVhfV0RTX0VOVFJZXTsKK30gV0RTX1RBQkxFLCAqUFdEU19UQUJMRTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FQQ0xJX1NUUlVDVCB7CisJUE5FVF9ERVYJCQkJZGV2OworI2lmZGVmIFJUTDg2NVhfU09DCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgbXlsaW5raWQ7CisjZW5kaWYKKwlCT09MRUFOICAgICAgICAgICAgICAgICBFbmFibGU7CS8vIFNldCBpdCBhcyAxIGlmIHRoZSBhcGNsaSBpbnRlcmZhY2Ugd2FzIGNvbmZpZ3VyZWQgdG8gIjEiICBvciBieSBpd3ByaXYgY21kICJBcENsaUVuYWJsZSIKKwlCT09MRUFOICAgICAgICAgICAgICAgICBWYWxpZDsJLy8gU2V0IGl0IGFzIDEgaWYgdGhlIGFwY2xpIGludGVyZmFjZSBhc3NvY2lhdGVkIHN1Y2Nlc3MgdG8gcmVtb3RlIEFQLgorCVVDSEFSCQkJCQlNYWNUYWJXQ0lEOwkvL1dDSUQgdmFsdWUsIHdoaWNoIHBvaW50IHRvIHRoZSBlbnRyeSBvZiBBU0lDIE1hYyB0YWJsZS4KKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBTc2lkTGVuOworCUNIQVIgICAgICAgICAgICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKworCVVDSEFSICAgICAgICAgICAgICAgICAgIENmZ1NzaWRMZW47CisJQ0hBUiAgICAgICAgICAgICAgICAgICAgQ2ZnU3NpZFtNQVhfTEVOX09GX1NTSURdOworCVVDSEFSICAgICAgICAgICAgICAgICAgIENmZ0FwQ2xpQnNzaWRbRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBDdXJyZW50QWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1NdOworCisJVUxPTkcgICAgICAgICAgICAgICAgICAgQXBDbGlSY3ZCZWFjb25UaW1lOworCisJVUxPTkcgICAgICAgICAgICAgICAgICAgQ3RybEN1cnJTdGF0ZTsKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBTeW5jQ3VyclN0YXRlOworCVVMT05HICAgICAgICAgICAgICAgICAgIEF1dGhDdXJyU3RhdGU7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgQXNzb2NDdXJyU3RhdGU7CisJVUxPTkcJCQkJCVdwYVBza0N1cnJTdGF0ZTsKKworCVVTSE9SVCAgICAgICAgICAgICAgICAgIEF1dGhSZXFDbnQ7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgQXNzb2NSZXFDbnQ7CisKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBDbGllbnRTdGF0dXNGbGFnczsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBNcGR1RGVuc2l0eTsKKworCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgICAgIEF1dGhNb2RlOyAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIHRvIHdoYXRldmVyIG1pY3Jvc29mdCBkZWZpbmVkCisJTkRJU184MDJfMTFfV0VQX1NUQVRVUyAgICAgICAgICAgICAgV2VwU3RhdHVzOworCisJLy8gQWRkIHRvIHN1cHBvcnQgZGlmZmVyZW50IGNpcGhlciBzdWl0ZSBmb3IgV1BBMi9XUEEgbW9kZQorCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCQlHcm91cENpcGhlcjsJCS8vIE11bHRpY2FzdCBjaXBoZXIgc3VpdGUKKwlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJUGFpckNpcGhlcjsJCQkvLyBVbmljYXN0IGNpcGhlciBzdWl0ZQorCUJPT0xFQU4JCQkJCQkJCWJNaXhDaXBoZXI7CQkJLy8gSW5kaWNhdGUgY3VycmVudCBQYWlyICYgR3JvdXAgdXNlIGRpZmZlcmVudCBjaXBoZXIgc3VpdGVzCisJVVNIT1JUCQkJCQkJCQlSc25DYXBhYmlsaXR5OworCisJVUNIQVIJCVBTS1sxMDBdOwkJCQkvLyByZXNlcnZlIFBTSyBrZXkgbWF0ZXJpYWwKKwlVQ0hBUiAgICAgICBQU0tMZW47CisJVUNIQVIgICAgICAgUE1LWzMyXTsgICAgICAgICAgICAgICAgLy8gV1BBIFBTSyBtb2RlIFBNSworCS8vVUNIQVIgICAgICAgUFRLWzY0XTsgICAgICAgICAgICAgICAgLy8gV1BBIFBTSyBtb2RlIFBUSworCVVDSEFSCQlHVEtbMzJdOwkJCQkvLyBHVEsgZnJvbSBhdXRoZW50aWNhdG9yCisKKwkvL0NJUEhFUl9LRVkJCVBhaXJ3aXNlS2V5OworCUNJUEhFUl9LRVkgICAgICBTaGFyZWRLZXlbU0hBUkVfS0VZX05VTV07CisJVUNIQVIgICAgICAgICAgIERlZmF1bHRLZXlJZDsKKworCS8vIFdQQSA4MDIuMXggcG9ydCBjb250cm9sLCBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCwgV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVECisJLy9VQ0hBUiAgICAgICBQb3J0U2VjdXJlZDsKKworCS8vIHN0b3JlIFJTTl9JRSBidWlsdCBieSBkcml2ZXIKKwlVQ0hBUgkJUlNOX0lFW01BWF9MRU5fT0ZfUlNOSUVdOyAgLy8gVGhlIGNvbnRlbnQgc2F2ZWQgaGVyZSBzaG91bGQgYmUgY29udmVydCB0byBsaXR0bGUtZW5kaWFuIGZvcm1hdC4KKwlVQ0hBUgkJUlNOSUVfTGVuOworCisJLy8gRm9yIFdQQSBjb3VudGVybWVhc3VyZXMKKwlVTE9ORyAgICAgICBMYXN0TWljRXJyb3JUaW1lOyAgIC8vIHJlY29yZCBsYXN0IE1JQyBlcnJvciB0aW1lCisJLy9VTE9ORyAgICAgICBNaWNFcnJDbnQ7ICAgICAgICAgIC8vIFNob3VsZCBiZSAwLCAxLCAyLCB0aGVuIHJlc2V0IHRvIHplcm8gKGFmdGVyIGRpc2Fzc29pY2lhdGlvbikuCisJQk9PTEVBTiAgICAgICAgICAgICAgICAgYkJsb2NrQXNzb2M7IC8vIEJsb2NrIGFzc29jaWF0ZSBhdHRlbXB0IGZvciA2MCBzZWNvbmRzIGFmdGVyIGNvdW50ZXIgbWVhc3VyZSBvY2N1cnJlZC4KKworCS8vIEZvciBXUEEtUFNLIHN1cHBsaWNhbnQgc3RhdGUKKwkvL1dQQV9TVEFURSAgIAlXcGFTdGF0ZTsgICAgICAgICAgIC8vIERlZmF1bHQgaXMgU1NfTk9UVVNFCisJLy9VQ0hBUiAgICAgICAJUmVwbGF5Q291bnRlcls4XTsKKwkvL1VDSEFSICAgICAgIAlBTm9uY2VbMzJdOyAgICAgICAgIC8vIEFOb25jZSBmb3IgV1BBLVBTSyBmcm9tIGF1dGhlbnRpY2F0b3IKKwlVQ0hBUiAgICAgICAJU05vbmNlWzMyXTsgICAgICAgICAvLyBTTm9uY2UgZm9yIFdQQS1QU0sKKwlVQ0hBUgkJCUdOb25jZVszMl07CQkJLy8gR05vbmNlIGZvciBXUEEtUFNLIGZyb20gYXV0aGVudGljYXRvcgorCisJSFRUUkFOU01JVF9TRVRUSU5HCQkJCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7CisJUlRfSFRfUEhZX0lORk8JCQkJCURlc2lyZWRIdFBoeUluZm87CisJQk9PTEVBTgkJCQkJCQliQXV0b1R4UmF0ZVN3aXRjaDsKKwlERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcgICAgICAgCURlc2lyZWRUcmFuc21pdFNldHRpbmc7IC8vIERlc2lyZWQgdHJhbnNtaXQgc2V0dGluZy4KK30gQVBDTElfU1RSVUNULCAqUEFQQ0xJX1NUUlVDVDsKKworLy8gLS0tLS0tLS0tLS0gZW5kIG9mIEFQIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmZGVmIEJMT0NLX05FVF9JRgordHlwZWRlZiBzdHJ1Y3QgX0JMT0NLX1FVRVVFX0VOVFJZCit7CisJQk9PTEVBTiBTd1R4UXVldWVCbG9ja0ZsYWc7CisJTElTVF9IRUFERVIgTmV0SWZMaXN0OworfSBCTE9DS19RVUVVRV9FTlRSWSwgKlBCTE9DS19RVUVVRV9FTlRSWTsKKyNlbmRpZiAvLyBCTE9DS19ORVRfSUYgLy8KKworCitzdHJ1Y3Qgd2lmaWNvbmYKK3sKKwlCT09MRUFOCWJTaG9ydEdJOworCUJPT0xFQU4gYkdyZWVuRmllbGQ7Cit9OworCisKKworCit0eXBlZGVmIHN0cnVjdCBfSU5GX1BDSV9DT05GSUcKK3sKKwlQVUNIQVIgICAgICAgICAgICAgICAgICBDU1JCYXNlQWRkcmVzczsgICAgIC8vIFBDSSBNTUlPIEJhc2UgQWRkcmVzcywgYWxsIGFjY2VzcyB3aWxsIHVzZQorfUlORl9QQ0lfQ09ORklHOworCit0eXBlZGVmIHN0cnVjdCBfSU5GX1VTQl9DT05GSUcKK3sKKwlVSU5UICAgICAgICAgICAgICAgIEJ1bGtJbkVwQWRkcjsJCS8vIGJ1bGstaW4gZW5kcG9pbnQgYWRkcmVzcworCVVJTlQgICAgICAgICAgICAgICAgQnVsa091dEVwQWRkcls2XTsJLy8gYnVsay1vdXQgZW5kcG9pbnQgYWRkcmVzcworCit9SU5GX1VTQl9DT05GSUc7CisKKyNpZmRlZiBJS0FOT1NfVlhfMVgwCisJdHlwZWRlZiB2b2lkICgqSWthbm9zV2xhblR4Q2JGdW5jUCkodm9pZCAqLCB2b2lkICopOworCisJc3RydWN0IElLQU5PU19UWF9JTkZPCisJeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCQlJa2Fub3NXbGFuVHhDYkZ1bmNQICpmcDsKKwl9OworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KKworI2lmZGVmIE5JTlRFTkRPX0FQCit0eXBlZGVmIHN0cnVjdCBfTklORE9fQ1RSTF9CTE9DSyB7CisKKwlSVF9OSU5URU5ET19UQUJMRQlEU19UQUJMRTsKKworI2lmZGVmIENISVAyNVhYCisJc3BpbmxvY2tfdAkJCU5JTlRFTkRPX1RBQkxFX0xvY2s7CisjZWxzZQorCU5ESVNfU1BJTl9MT0NLCQlOSU5URU5ET19UQUJMRV9Mb2NrOworI2VuZGlmIC8vIENISVAyNVhYIC8vCisKKwlVQ0hBUgkJCQlOSU5URU5ET19VUF9CVUZGRVJbNTEyXTsKKwlVQ0hBUgkJCQlMb2NhbF9LZXlJZHg7CisJQ0lQSEVSX0tFWQkJCUxvY2FsX1NoYXJlZEtleTsKKwlVQ0hBUgkJCQlMb2NhbF9iSGlkZVNzaWQ7CisJVUNIQVIJCQkJTG9jYWxfQXV0aE1vZGU7CisJVUNIQVIJCQkJTG9jYWxfV2VwU3RhdHVzOworCVVTSE9SVAkJCQlMb2NhbF9DYXBhYmlsaXR5SW5mbzsKK30gTklORE9fQ1RSTF9CTE9DSzsKKyNlbmRpZiAvLyBOSU5URU5ET19BUCAvLworCisKKyNpZmRlZiBEQkdfRElBR05PU0UKKyNkZWZpbmUgRElBR05PU0VfVElNRQkxMCAgIC8vIDEwIHNlYwordHlwZWRlZiBzdHJ1Y3QgX1J0bXBEaWFnU3RyY3V0XworewkvLyBEaWFnbm9zaXMgUmVsYXRlZCBlbGVtZW50CisJdW5zaWduZWQgY2hhcgkJaW5pdGVkOworCXVuc2lnbmVkIGNoYXIgCXFJZHg7CisJdW5zaWduZWQgY2hhciAJQXJyYXlTdGFydElkeDsKKwl1bnNpZ25lZCBjaGFyCQlBcnJheUN1cklkeDsKKwkvLyBUeCBSZWxhdGVkIENvdW50CisJVVNIT1JUCQkJVHhEYXRhQ250W0RJQUdOT1NFX1RJTUVdOworCVVTSE9SVAkJCVR4RmFpbENudFtESUFHTk9TRV9USU1FXTsKKy8vCVVTSE9SVAkJCVR4RGVzY0NudFtESUFHTk9TRV9USU1FXVsxNl07CQkvLyBUeERlc2MgcXVldWUgbGVuZ3RoIGluIHNjYWxlIG9mIDB+MTQsID49MTUKKwlVU0hPUlQJCQlUeERlc2NDbnRbRElBR05PU0VfVElNRV1bMjRdOyAvLyAzKjMJLy8gVHhEZXNjIHF1ZXVlIGxlbmd0aCBpbiBzY2FsZSBvZiAwfjE0LCA+PTE1CisvLwlVU0hPUlQJCQlUeE1jc0NudFtESUFHTk9TRV9USU1FXVsxNl07CQkJLy8gVHhEYXRlIE1DUyBDb3VudCBpbiByYW5nZSBmcm9tIDAgdG8gMTUsIHN0ZXAgaW4gMS4KKwlVU0hPUlQJCQlUeE1jc0NudFtESUFHTk9TRV9USU1FXVsyNF07IC8vIDMqMworCVVTSE9SVAkJCVR4U1dRdWVDbnRbRElBR05PU0VfVElNRV1bOV07CQkvLyBUeFN3UXVldWUgbGVuZ3RoIGluIHNjYWxlIG9mIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsID49OAorCisJVVNIT1JUCQkJVHhBZ2dDbnRbRElBR05PU0VfVElNRV07CisJVVNIT1JUCQkJVHhOb25BZ2dDbnRbRElBR05PU0VfVElNRV07CisvLwlVU0hPUlQJCQlUeEFNUERVQ250W0RJQUdOT1NFX1RJTUVdWzE2XTsJCS8vIDEwIHNlYywgVHhETUEgQVBNRFUgQWdncmVnYXRpb24gY291bnQgaW4gcmFuZ2UgZnJvbSAwIHRvIDE1LCBpbiBzZXRwIG9mIDEuCisJVVNIT1JUCQkJVHhBTVBEVUNudFtESUFHTk9TRV9USU1FXVsyNF07IC8vIDMqMyAvLyAxMCBzZWMsIFR4RE1BIEFQTURVIEFnZ3JlZ2F0aW9uIGNvdW50IGluIHJhbmdlIGZyb20gMCB0byAxNSwgaW4gc2V0cCBvZiAxLgorCVVTSE9SVAkJCVR4UmFsaW5rQ250W0RJQUdOT1NFX1RJTUVdOwkJCS8vIFR4UmFsaW5rIEFnZ3JlZ2F0aW9uIENvdW50IGluIDEgc2VjIHNjYWxlLgorCVVTSE9SVAkJCVR4QU1TRFVDbnRbRElBR05PU0VfVElNRV07CQkJLy8gVHhBTVNVRCBBZ2dyZWdhdGlvbiBDb3VudCBpbiAxIHNlYyBzY2FsZS4KKworCS8vIFJ4IFJlbGF0ZWQgQ291bnQKKwlVU0hPUlQJCQlSeERhdGFDbnRbRElBR05PU0VfVElNRV07CQkJLy8gUnggVG90YWwgRGF0YSBjb3VudC4KKwlVU0hPUlQJCQlSeENyY0VyckNudFtESUFHTk9TRV9USU1FXTsKKy8vCVVTSE9SVAkJCVJ4TWNzQ250W0RJQUdOT1NFX1RJTUVdWzE2XTsJCS8vIFJ4IE1DUyBDb3VudCBpbiByYW5nZSBmcm9tIDAgdG8gMTUsIHN0ZXAgaW4gMS4KKwlVU0hPUlQJCQlSeE1jc0NudFtESUFHTk9TRV9USU1FXVsyNF07IC8vIDMqMworfVJ0bXBEaWFnU3RydWN0OworI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisKKy8vCisvLyAgVGhlIG1pbmlwb3J0IGFkYXB0ZXIgc3RydWN0dXJlCisvLwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfQURBUFRFUgoreworCVBWT0lECQkJCQlPU19Db29raWU7CS8vIHNhdmUgc3BlY2lmaWMgc3RydWN0dXJlIHJlbGF0aXZlIHRvIE9TCisJUE5FVF9ERVYJCQkJbmV0X2RldjsKKwlVTE9ORwkJCQkJVmlydHVhbElmQ250OworCisKKworCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIGlycV9sb2NrOworCVVDSEFSICAgICAgICAgICAgICAgICAgIGlycV9kaXNhYmxlZDsKKworI2lmZGVmIFJUMjg3MAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICBVU0IgcmVsYXRlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJCSpjb25maWc7CisJVUlOVAkJCQkJCQkJQnVsa0luRXBBZGRyOwkJLy8gYnVsay1pbiBlbmRwb2ludCBhZGRyZXNzCisJVUlOVAkJCQkJCQkJQnVsa091dEVwQWRkcls2XTsJLy8gYnVsay1vdXQgZW5kcG9pbnQgYWRkcmVzcworCisJVUlOVAkJCQkJCQkJTnVtYmVyT2ZQaXBlczsKKwlVU0hPUlQJCQkJCQkJCUJ1bGtPdXRNYXhQYWNrZXRTaXplOworCVVTSE9SVAkJCQkJCQkJQnVsa0luTWF4UGFja2V0U2l6ZTsKKworCS8vPT09PT09Q29udHJvbCBGbGFncworCUxPTkcgICAgICAgICAgICAgICAgICAgIAlQZW5kaW5nSW9Db3VudDsKKwlVTE9ORwkJCQkJCUJ1bGtGbGFnczsKKwlCT09MRUFOICAgICAgICAgICAgICAgICAgICAgYlVzYlR4QnVsa0FnZ3JlOwkvLyBGbGFncyBmb3IgYnVsayBvdXQgZGF0YSBwcmlvcml0eQorCisKKwkvLz09PT09PVRpbWVyIFRocmVhZAorCVJUMjg3MF9USU1FUl9RVUVVRQkJVGltZXJROworCU5ESVNfU1BJTl9MT0NLCQkJVGltZXJRTG9jazsKKworCisJLy89PT09PT1DbWQgVGhyZWFkCisJQ21kUQkJCQkJQ21kUTsKKwlORElTX1NQSU5fTE9DSwkJCUNtZFFMb2NrOwkJCQkvLyBDbWRRTG9jayBzcGlubG9jaworCisJQk9PTEVBTgkJCQkJVGltZXJGdW5jX2tpbGw7CisJQk9PTEVBTgkJCQkJbWxtZV9raWxsOworCisKKwkvLz09PT09PVNlbWFwaG9yZXMgKGV2ZW50KQorCXN0cnVjdCBzZW1hcGhvcmUJCQltbG1lX3NlbWFwaG9yZTsJCQkvKiB0byBzbGVlcCB0aHJlYWQgb24JKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCQkJUlRVU0JDbWRfc2VtYXBob3JlOwkJLyogdG8gc2xlZXAgdGhyZWFkIG9uCSovCisJc3RydWN0IHNlbWFwaG9yZQkJCVJUVVNCVGltZXJfc2VtYXBob3JlOworI2lmZGVmIElORl9BTUFaT05fU0UKKwlzdHJ1Y3Qgc2VtYXBob3JlCQkJVXNiVmVuZG9yUmVxX3NlbWFwaG9yZTsKKwlQVk9JRAkJCQkJCVVzYlZlbmRvclJlcUJ1ZjsKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisJc3RydWN0IGNvbXBsZXRpb24JCQlUaW1lclFDb21wbGV0ZTsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJCW1sbWVDb21wbGV0ZTsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJCUNtZFFDb21wbGV0ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJCSp3YWl0OworCisJLy89PT09PT1Mb2NrIGZvciAyODcwIEFURQorI2lmZGVmIFJBTElOS19BVEUKKwlORElTX1NQSU5fTE9DSwkJCUdlbmVyaWNMb2NrOwkJLy8gQVRFIFR4L1J4IGdlbmVyaWMgc3BpbmxvY2sKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogICAgICBCb3RoIFBDSS9VU0IgcmVsYXRlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgVHggcmVsYXRlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCUJPT0xFQU4gICAgICAgICAgICAgICAgIERlUXVldWVSdW5uaW5nW05VTV9PRl9UWF9SSU5HXTsgIC8vIGZvciBlbnN1cmluZyBSVFVTQkRlUXVldWVQYWNrZXQgZ2V0IGNhbGwgb25jZQorCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIERlUXVldWVMb2NrW05VTV9PRl9UWF9SSU5HXTsKKworI2lmZGVmIFJUMjg3MAorCS8vIERhdGEgcmVsYXRlZCBjb250ZXh0IGFuZCBBQyBzcGVjaWZpZWQsIDQgQUMgc3VwcG9ydGVkCisJTkRJU19TUElOX0xPQ0sJCQlCdWxrT3V0TG9ja1s2XTsJCQkvLyBCdWxrT3V0IHNwaW5sb2NrIGZvciA0IEFDcworCU5ESVNfU1BJTl9MT0NLCQkJTUxNRUJ1bGtPdXRMb2NrOwkvLyBNTE1FIEJ1bGtPdXQgbG9jaworCisJSFRfVFhfQ09OVEVYVAkJCVR4Q29udGV4dFtOVU1fT0ZfVFhfUklOR107CisJTkRJU19TUElOX0xPQ0sJCQlUeENvbnRleHRRdWV1ZUxvY2tbTlVNX09GX1RYX1JJTkddOwkJLy8gVHhDb250ZXh0UXVldWUgc3BpbmxvY2sKKworCS8vIDQgc2V0cyBvZiBCdWxrIE91dCBpbmRleCBhbmQgcGVuZGluZyBmbGFnCisJVUNIQVIJCQkJCU5leHRCdWxrT3V0SW5kZXhbNF07CS8vIG9ubHkgdXNlZCBmb3IgNCBFRENBIGJ1bGtvdXQgcGlwZQorCisJQk9PTEVBTgkJCQkJQnVsa091dFBlbmRpbmdbNl07CS8vIHVzZWQgZm9yIHRvdGFsIDYgYnVsa291dCBwaXBlCisJVUNIQVIJCQkJCWJ1bGtSZXNldFBpcGVpZDsKKwlCT09MRUFOCQkJCQlNZ210QnVsa1BlbmRpbmc7CisJVUxPTkcJCQkJCWJ1bGtSZXNldFJlcVs2XTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vIHJlc291cmNlIGZvciBzb2Z0d2FyZSBiYWNrbG9nIHF1ZXVlcworCVFVRVVFX0hFQURFUiAgICAgICAgICAgIFR4U3dRdWV1ZVtOVU1fT0ZfVFhfUklOR107ICAvLyA0IEFDICsgMSBIQ0NBCisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgVHhTd1F1ZXVlTG9ja1tOVU1fT0ZfVFhfUklOR107CS8vIFR4U3dRdWV1ZSBzcGlubG9jaworCisJUlRNUF9ETUFCVUYgICAgICAgICAgICAgTWdtdERlc2NSaW5nOyAgICAgICAgICAgICAgIAkvLyBTaGFyZWQgbWVtb3J5IGZvciBNR01UIGRlc2NyaXB0b3JzCisJUlRNUF9NR01UX1JJTkcgICAgICAgICAgTWdtdFJpbmc7CisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgTWdtdFJpbmdMb2NrOyAgICAgICAgICAgICAgIAkvLyBQcmlvIFJpbmcgc3BpbmxvY2sKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgIFJ4IHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZkZWYgUlQyODcwCisJUlhfQ09OVEVYVAkJCQlSeENvbnRleHRbUlhfUklOR19TSVpFXTsgIC8vIDEgZm9yIHJlZHVuZGFudCBtdWx0aXBsZSBJUlAgYnVsayBpbi4KKwlORElTX1NQSU5fTE9DSwkJCUJ1bGtJbkxvY2s7CQkJCS8vIEJ1bGtJbiBzcGlubG9jayBmb3IgNCBBQ3MKKwlVQ0hBUgkJCQkJUGVuZGluZ1J4OwkJCQkvLyBUaGUgTWF4aW1hIHBlbmRpbmcgUnggdmFsdWUgc2hvdWxkIGJlIAlSWF9SSU5HX1NJWkUuCisJVUNIQVIJCQkJCU5leHRSeEJ1bGtJbkluZGV4OwkJLy8gSW5kaWNhdGUgdGhlIGN1cnJlbnQgUnhDb250ZXh0IEluZGV4IHdoaWNoIGhvbGQgYnkgSG9zdCBjb250cm9sbGVyLgorCVVDSEFSCQkJCQlOZXh0UnhCdWxrSW5SZWFkSW5kZXg7CS8vIEluZGljYXRlIHRoZSBjdXJyZW50IFJ4Q29udGV4dCBJbmRleCB3aGljaCBkcml2ZXIgY2FuIHJlYWQgJiBwcm9jZXNzIGl0LgorCVVMT05HCQkJCQlOZXh0UnhCdWxrSW5Qb3NpdGlvbjsgICAvLyBXYW50IHRvIGNvbnRhdGVuYXRlIDIgVVJCIGJ1ZmZlciB3aGlsZSAxc3QgaXMgYnVsa2luIGZhaWxlZCBVUkIuIFRoaXMgUG9zaXRpb24gaXMgMXN0IFVSQiBUcmFuc2Zlckxlbmd0aC4KKwlVTE9ORwkJCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGg7CS8vIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgYnVmZmVyCisJVUxPTkcJCQkJCVJlYWRQb3NpdGlvbjsJCQkvLyBjdXJyZW50IHJlYWQgcG9zaXRpb24gaW4gYSBwYWNrZXQgYnVmZmVyCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICBBU0lDIHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCVVJTlQzMiAgICAgICAgICAgICAgIAlNQUNWZXJzaW9uOyAgICAgIAkvLyBNQUMgdmVyc2lvbi4gUmVjb3JkIHJ0Mjg2MEMoMHgyODYwMDEwMCkgb3IgcnQyODYwRCAoMHgyODYwMDEwMSkuLgorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gRTJQUk9NCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVUxPTkcgICAgICAgICAgICAgICAgICAgRWVwcm9tVmVyc2lvbjsgICAgICAgICAgLy8gYnl0ZSAwOiB2ZXJzaW9uLCBieXRlIDE6IHJldmlzaW9uLCBieXRlIDJ+MzogdW51c2VkCisJVUNIQVIgICAgICAgICAgICAgICAgICAgRUVQUk9NQWRkcmVzc051bTsgICAgICAgLy8gOTNjNDY9NiAgOTNjNjY9OAorCVVTSE9SVCAgICAgICAgICAgICAgICAgIEVFUFJPTURlZmF1bHRWYWx1ZVtOVU1fRUVQUk9NX0JCUF9QQVJNU107CisJQk9PTEVBTiAgICAgICAgICAgICAgICAgRWVwcm9tQWNjZXNzOworCVVDSEFSICAgICAgICAgICAgICAgICAgIEVGdXNlVGFnOworCVVMT05HICAgICAgICAgICAgICAgICAgIEZpcm13YXJlVmVyc2lvbjsgICAgICAgIC8vIGJ5dGUgMDogTWlub3IgdmVyc2lvbiwgYnl0ZSAxOiBNYWpvciB2ZXJzaW9uLCBvdGhlcndpc2UgdW51c2VkLgorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gQkJQIENvbnRyb2wKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBCYnBXcml0ZUxhdGNoWzE0MF07ICAgICAvLyByZWNvcmQgbGFzdCBCQlAgcmVnaXN0ZXIgdmFsdWUgd3JpdHRlbiB2aWEgQkJQX0lPX1dSSVRFL0JCUF9JT19XUklURV9WWV9SRUdfSUQKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBCYnBSc3NpVG9EYm1EZWx0YTsKKwlCQlBfUjY2X1RVTklORyAgICAgICAgICBCYnBUdW5pbmc7CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gUkZJQyBjb250cm9sCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVDSEFSICAgICAgICAgICAgICAgICAgIFJmSWNUeXBlOyAgICAgICAvLyBSRklDX3h4eAorCVVMT05HICAgICAgICAgICAgICAgICAgIFJmRnJlcU9mZnNldDsgICAvLyBGcmVxdWVuY3kgb2Zmc2V0IGZvciBjaGFubmVsIHN3aXRjaGluZworCVJUTVBfUkZfUkVHUyAgICAgICAgICAgIExhdGNoUmZSZWdzOyAgICAvLyBsYXRjaCB0aCBsYXRlc3QgUkYgcHJvZ3JhbW1pbmcgdmFsdWUgc2luY2UgUkYgSUMgZG9lc24ndCBzdXBwb3J0IFJFQUQKKworCUVFUFJPTV9BTlRFTk5BX1NUUlVDICAgIEFudGVubmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIEFOdGVubmEgZGVmaW5pdGlvbiBpcyBkaWZmZXJlbnQgZm9yIGEgJiBnLiBXZSBuZWVkIHRvIHNhdmUgaXQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisJRUVQUk9NX05JQ19DT05GSUcyX1NUUlVDICAgIE5pY0NvbmZpZzI7CisKKwkvLyBUaGlzIHNvZnQgUnggQW50ZW5uYSBEaXZlcnNpdHkgbWVjaGFuaXNtIGlzIHVzZWQgb25seSB3aGVuIHVzZXIgc2V0CisJLy8gUlggQW50ZW5uYSA9IERJVkVSU0lUWSBPTgorCVNPRlRfUlhfQU5UX0RJVkVSU0lUWSAgIFJ4QW50OworCisJVUNIQVIgICAgICAgICAgICAgICAgICAgUkZQcm9nU2VxOworCUNIQU5ORUxfVFhfUE9XRVIgICAgICAgIFR4UG93ZXJbTUFYX05VTV9PRl9DSEFOTkVMU107ICAgICAgIC8vIFN0b3JlIFR4IHBvd2VyIHZhbHVlIGZvciBhbGwgY2hhbm5lbHMuCisJQ0hBTk5FTF9UWF9QT1dFUiAgICAgICAgQ2hhbm5lbExpc3RbTUFYX05VTV9PRl9DSEFOTkVMU107ICAgLy8gbGlzdCBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzIGZvciBzaXRlIHN1cnZleQorCUNIQU5ORUxfMTFKX1RYX1BPV0VSICAgIFR4UG93ZXIxMUpbTUFYX05VTV9PRl8xMUpDSEFOTkVMU107ICAgICAgIC8vIDgwMi4xMWogY2hhbm5lbCBhbmQgYncKKwlDSEFOTkVMXzExSl9UWF9QT1dFUiAgICBDaGFubmVsTGlzdDExSltNQVhfTlVNX09GXzExSkNIQU5ORUxTXTsgICAvLyBsaXN0IGFsbCBzdXBwb3J0ZWQgY2hhbm5lbHMgZm9yIHNpdGUgc3VydmV5CisKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBDaGFubmVsTGlzdE51bTsgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgY2hhbm5lbCBpbiBDaGFubmVsTGlzdFtdCisJVUNIQVIJCQkJCUJicDk0OworCUJPT0xFQU4JCQkJCUJicEZvckNDSzsKKwlVTE9ORwkJVHgyME1Qd3JDZmdBQmFuZFs1XTsKKwlVTE9ORwkJVHgyME1Qd3JDZmdHQmFuZFs1XTsKKwlVTE9ORwkJVHg0ME1Qd3JDZmdBQmFuZFs1XTsKKwlVTE9ORwkJVHg0ME1Qd3JDZmdHQmFuZFs1XTsKKworCUJPT0xFQU4gICAgIGJBdXRvVHhBZ2NBOyAgICAgICAgICAgICAgICAvLyBFbmFibGUgZHJpdmVyIGF1dG8gVHggQWdjIGNvbnRyb2wKKwlVQ0hBUgkgICAgVHNzaVJlZkE7CQkJCQkvLyBTdG9yZSBUc3NpIHJlZmVyZW5jZSB2YWx1ZSBhcyAyNSB0ZW1wZXJhdHVyZS4KKwlVQ0hBUgkgICAgVHNzaVBsdXNCb3VuZGFyeUFbNV07CQkvLyBUc3NpIGJvdW5kYXJ5IGZvciBpbmNyZWFzZSBUeCBwb3dlciB0byBjb21wZW5zYXRlLgorCVVDSEFSCSAgICBUc3NpTWludXNCb3VuZGFyeUFbNV07CQkvLyBUc3NpIGJvdW5kYXJ5IGZvciBkZWNyZWFzZSBUeCBwb3dlciB0byBjb21wZW5zYXRlLgorCVVDSEFSCSAgICBUeEFnY1N0ZXBBOwkJCQkJLy8gU3RvcmUgVHggVFNTSSBkZWx0YSBpbmNyZW1lbnQgLyBkZWNyZW1lbnQgdmFsdWUKKwlDSEFSCQlUeEFnY0NvbXBlbnNhdGVBOwkJCS8vIFN0b3JlIHRoZSBjb21wZW5zYXRpb24gKFR4QWdjU3RlcCAqIChpZHgtMSkpCisKKwlCT09MRUFOICAgICBiQXV0b1R4QWdjRzsgICAgICAgICAgICAgICAgLy8gRW5hYmxlIGRyaXZlciBhdXRvIFR4IEFnYyBjb250cm9sCisJVUNIQVIJICAgIFRzc2lSZWZHOwkJCQkJLy8gU3RvcmUgVHNzaSByZWZlcmVuY2UgdmFsdWUgYXMgMjUgdGVtcGVyYXR1cmUuCisJVUNIQVIJICAgIFRzc2lQbHVzQm91bmRhcnlHWzVdOwkJLy8gVHNzaSBib3VuZGFyeSBmb3IgaW5jcmVhc2UgVHggcG93ZXIgdG8gY29tcGVuc2F0ZS4KKwlVQ0hBUgkgICAgVHNzaU1pbnVzQm91bmRhcnlHWzVdOwkJLy8gVHNzaSBib3VuZGFyeSBmb3IgZGVjcmVhc2UgVHggcG93ZXIgdG8gY29tcGVuc2F0ZS4KKwlVQ0hBUgkgICAgVHhBZ2NTdGVwRzsJCQkJCS8vIFN0b3JlIFR4IFRTU0kgZGVsdGEgaW5jcmVtZW50IC8gZGVjcmVtZW50IHZhbHVlCisJQ0hBUgkJVHhBZ2NDb21wZW5zYXRlRzsJCQkvLyBTdG9yZSB0aGUgY29tcGVuc2F0aW9uIChUeEFnY1N0ZXAgKiAoaWR4LTEpKQorCisJLy8rKytGb3IgUlQyODcwLCB0aGUgcGFyYW1ldGVyZXMgaXMgc3RhcnQgZnJvbSBCR1Jzc2lPZmZzZXQxIH4gQkdSc3NpT2Zmc2V0MworCUNIQVIJCUJHUnNzaU9mZnNldDA7CQkJCS8vIFN0b3JlIEIvRyBSU1NJIzAgT2Zmc2V0IHZhbHVlIG9uIEVFUFJPTSAweDQ2aAorCUNIQVIJCUJHUnNzaU9mZnNldDE7CQkJCS8vIFN0b3JlIEIvRyBSU1NJIzEgT2Zmc2V0IHZhbHVlCisJQ0hBUgkJQkdSc3NpT2Zmc2V0MjsJCQkJLy8gU3RvcmUgQi9HIFJTU0kjMiBPZmZzZXQgdmFsdWUKKwkvLy0tLQorCisJLy8rKytGb3IgUlQyODcwLCB0aGUgcGFyYW1ldGVyZXMgaXMgc3RhcnQgZnJvbSBBUnNzaU9mZnNldDEgfiBBUnNzaU9mZnNldDMKKwlDSEFSCQlBUnNzaU9mZnNldDA7CQkJCS8vIFN0b3JlIEEgUlNTSSMwIE9mZnNldCB2YWx1ZSBvbiBFRVBST00gMHg0QWgKKwlDSEFSCQlBUnNzaU9mZnNldDE7CQkJCS8vIFN0b3JlIEEgUlNTSSMxIE9mZnNldCB2YWx1ZQorCUNIQVIJCUFSc3NpT2Zmc2V0MjsJCQkJLy8gU3RvcmUgQSBSU1NJIzIgT2Zmc2V0IHZhbHVlCisJLy8tLS0KKworCUNIQVIJCUJMTkFHYWluOwkJCQkJLy8gU3RvcmUgQi9HIGV4dGVybmFsIExOQSMwIHZhbHVlIG9uIEVFUFJPTSAweDQ0aAorCUNIQVIJCUFMTkFHYWluMDsJCQkJCS8vIFN0b3JlIEEgZXh0ZXJuYWwgTE5BIzAgdmFsdWUgZm9yIGNoMzZ+NjQKKwlDSEFSCQlBTE5BR2FpbjE7CQkJCQkvLyBTdG9yZSBBIGV4dGVybmFsIExOQSMxIHZhbHVlIGZvciBjaDEwMH4xMjgKKwlDSEFSCQlBTE5BR2FpbjI7CQkJCQkvLyBTdG9yZSBBIGV4dGVybmFsIExOQSMyIHZhbHVlIGZvciBjaDEzMn4xNjUKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBMRUQgY29udHJvbAorCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlNQ1VfTEVEQ1NfU1RSVUMJCUxlZENudGw7CisJVVNIT1JUCQkJCUxlZDE7CS8vIHJlYWQgZnJvbSBFRVBST00gMHgzYworCVVTSE9SVAkJCQlMZWQyOwkvLyBFRVBST00gMHgzZQorCVVTSE9SVAkJCQlMZWQzOwkvLyBFRVBST00gMHg0MAorCVVDSEFSCQkJCUxlZEluZGljYXRvclN0cmVndGg7CisJVUNIQVIJCQkJUnNzaVNpbmdhbHN0cmVuZ3RoT2ZmZXQ7CisgICAgQk9PTEVBTgkJCQliTGVkT25TY2FubmluZzsKKwlVQ0hBUgkJCQlMZWRTdGF0dXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgODAyLjExIHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvLyBvdXRnb2luZyBCRUFDT04gZnJhbWUgYnVmZmVyIGFuZCBjb3JyZXNwb25kaW5nIFRYRAorCVRYV0lfU1RSVUMgICAgICAgICAgICAgIAlCZWFjb25UeFdJOworCVBVQ0hBUgkJCQkJCUJlYWNvbkJ1ZjsKKwlVU0hPUlQJCQkJCQlCZWFjb25PZmZzZXRbSFdfQkVBQ09OX01BWF9DT1VOVF07CisKKwkvLyBwcmUtYnVpbGQgUFMtUE9MTCBhbmQgTlVMTCBmcmFtZSB1cG9uIGxpbmsgdXAuIGZvciBlZmZpY2llbmN5IHB1cnBvc2UuCisJUFNQT0xMX0ZSQU1FICAgICAgICAgICAgCVBzUG9sbEZyYW1lOworCUhFQURFUl84MDJfMTEgICAgICAgICAgIAlOdWxsRnJhbWU7CisKKyNpZmRlZiBSVDI4NzAKKwlUWF9DT05URVhUCQkJCUJlYWNvbkNvbnRleHRbQkVBQ09OX1JJTkdfU0laRV07CisJVFhfQ09OVEVYVAkJCQlOdWxsQ29udGV4dDsKKwlUWF9DT05URVhUCQkJCVBzUG9sbENvbnRleHQ7CisJVFhfQ09OVEVYVAkJCQlSVFNDb250ZXh0OworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKworLy89PT09PT09PT1BUD09PT09PT09PT09CisKKworLy89PT09PT09U1RBPT09PT09PT09PT0KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8qIE1vZGlmaWVkIGJ5IFd1IFhpLUt1biA0LzIxLzIwMDYgKi8KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFNUQSBzcGVjaWZpYyBjb25maWd1cmF0aW9uICYgb3BlcmF0aW9uIHN0YXR1cworCS8vIHVzZWQgb25seSB3aGVuIHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNUQV9BRE1JTl9DT05GSUcgICAgICAgIFN0YUNmZzsgICAgICAgICAgIC8vIHVzZXIgZGVzaXJlZCBzZXR0aW5ncworCVNUQV9BQ1RJVkVfQ09ORklHICAgICAgIFN0YUFjdGl2ZTsgICAgICAgICAvLyB2YWxpZCBvbmx5IHdoZW4gQURIT0NfT04ocEFkKSB8fCBJTkZSQV9PTihwQWQpCisJQ0hBUiAgICAgICAgICAgICAgICAgICAgbmlja25hbWVbSVdfRVNTSURfTUFYX1NJWkUrMV07IC8vIG5pY2tuYW1lLCBvbmx5IHVzZWQgaW4gdGhlIGl3Y29uZmlnIGkvZgorCU5ESVNfTUVESUFfU1RBVEUgICAgICAgIFByZU1lZGlhU3RhdGU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKy8vPT09PT09PUNvbW1vbj09PT09PT09PT09CisJLy8gT1AgbW9kZTogZWl0aGVyIEFQIG9yIFNUQQorCVVDSEFSICAgICAgICAgICAgICAgICAgIE9wTW9kZTsgICAgICAgICAgICAgICAgICAgICAvLyBPUE1PREVfU1RBLCBPUE1PREVfQVAKKworCU5ESVNfTUVESUFfU1RBVEUgICAgICAgIEluZGljYXRlTWVkaWFTdGF0ZTsJCQkvLyBCYXNlIG9uIEluZGljYXRpb24gc3RhdGUsIGRlZmF1bHQgaXMgTmRpc01lZGlhU3RhdGVEaXNDb25uZWN0ZWQKKworCisJLy8gTUFUIHJlbGF0ZWQgcGFyYW1ldGVycworCisJLy8gY29uZmlndXJhdGlvbjogcmVhZCBmcm9tIFJlZ2lzdHJ5ICYgRTJQUk9NCisJQk9PTEVBTiAgICAgICAgICAgICAgICAgYkxvY2FsQWRtaW5NQUM7ICAgICAgICAgICAgIC8vIFVzZSB1c2VyIGNoYW5nZWQgTUFDCisJVUNIQVIgICAgICAgICAgICAgICAgICAgUGVybWFuZW50QWRkcmVzc1tNQUNfQUREUl9MRU5dOyAgICAvLyBGYWN0b3J5IGRlZmF1bHQgTUFDIGFkZHJlc3MKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBDdXJyZW50QWRkcmVzc1tNQUNfQUREUl9MRU5dOyAgICAgIC8vIFVzZXIgY2hhbmdlZCBNQUMgYWRkcmVzcworCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gY29tbW9uIGNvbmZpZ3VyYXRpb24gdG8gYm90aCBPUE1PREVfU1RBIGFuZCBPUE1PREVfQVAKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlDT01NT05fQ09ORklHICAgICAgICAgICBDb21tb25DZmc7CisJTUxNRV9TVFJVQ1QgICAgICAgICAgICAgTWxtZTsKKworCS8vIEFQIG5lZWRzIHRob3NlIHZhaWFibGVzIGZvciBzaXRlIHN1cnZleSBmZWF0dXJlLgorCU1MTUVfQVVYICAgICAgICAgICAgICAgIE1sbWVBdXg7ICAgICAgICAgICAvLyB0ZW1wb3Jhcnkgc2V0dGluZ3MgdXNlZCBkdXJpbmcgTUxNRSBzdGF0ZSBtYWNoaW5lCisJQlNTX1RBQkxFICAgICAgICAgICAgICAgU2NhblRhYjsgICAgICAgICAgIC8vIHN0b3JlIHRoZSBsYXRlc3QgU0NBTiByZXN1bHQKKworCS8vQWJvdXQgTWFjVGFiLCB0aGUgc3RhIGRyaXZlciB3aWxsIHVzZSAjMCBhbmQgIzEgZm9yIG11bHRpY2FzdCBhbmQgQVAuCisJTUFDX1RBQkxFICAgICAgICAgICAgICAgICBNYWNUYWI7ICAgICAvLyBBU0lDIG9uLWNoaXAgV0NJRCBlbnRyeSB0YWJsZS4gIEF0IFRYLCBBU0lDIGFsd2F5cyB1c2Uga2V5IGFjY29yZGluZyB0byB0aGlzIG9uLWNoaXAgdGFibGUuCisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgTWFjVGFiTG9jazsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJBX1RBQkxFCQkJQkFUYWJsZTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlORElTX1NQSU5fTE9DSyAgICAgICAgICBCQVRhYkxvY2s7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCBSRUNCQVRpbWVyOworCisJLy8gZW5jcnlwdGlvbi9kZWNyeXB0aW9uIEtFWSB0YWJsZXMKKwlDSVBIRVJfS0VZICAgICAgICAgICAgICBTaGFyZWRLZXlbTUFYX01CU1NJRF9OVU1dWzRdOyAvLyBTVEEgYWx3YXlzIHVzZSBTaGFyZWRLZXlbQlNTMF1bMC4uM10KKworCQkvLyBSWCByZS1hc3NlbWJseSBidWZmZXIgZm9yIGZyYWdtZW50YXRpb24KKwlGUkFHTUVOVF9GUkFNRSAgICAgICAgICBGcmFnRnJhbWU7ICAgICAgICAgICAgICAgICAgLy8gRnJhbWUgc3RvcmFnZSBmb3IgZnJhZ21lbnQgZnJhbWUKKworCS8vIHZhcmlvdXMgQ291bnRlcnMKKwlDT1VOVEVSXzgwMl8zICAgICAgICAgICBDb3VudGVyczgwMjM7ICAgICAgICAgICAgICAgLy8gODAyLjMgY291bnRlcnMKKwlDT1VOVEVSXzgwMl8xMSAgICAgICAgICBXbGFuQ291bnRlcnM7ICAgICAgICAgICAgICAgLy8gODAyLjExIE1JQiBjb3VudGVycworCUNPVU5URVJfUkFMSU5LICAgICAgICAgIFJhbGlua0NvdW50ZXJzOyAgICAgICAgICAgICAvLyBSYWxpbmsgcHJvcHJpZXR5IGNvdW50ZXJzCisJQ09VTlRFUl9EUlMgICAgICAgICAgICAgRHJzQ291bnRlcnM7ICAgICAgICAgICAgICAgIC8vIGNvdW50ZXJzIGZvciBEeW5hbWljIFRYIFJhdGUgU3dpdGNoaW5nCisJUFJJVkFURV9TVFJVQyAgICAgICAgICAgUHJpdmF0ZUluZm87ICAgICAgICAgICAgICAgIC8vIFByaXZhdGUgaW5mb3JtYXRpb24gJiBjb3VudGVycworCisJLy8gZmxhZ3MsIHNlZSBmUlRNUF9BREFQVEVSX3h4eCBmbGFncworCVVMT05HICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvLyBSZXByZXNlbnQgY3VycmVudCBkZXZpY2Ugc3RhdHVzCisKKwkvLyBjdXJyZW50IFRYIHNlcXVlbmNlICMKKwlVU0hPUlQgICAgICAgICAgICAgICAgICBTZXF1ZW5jZTsKKworI2lmZGVmIFVOREVSX0NFCisJTkRJU19IQU5ETEUgICAgICAgICAgICAgaEdpSVNSOworI2VuZGlmCisKKworCS8vIENvbnRyb2wgZGlzY29ubmVjdCAvIGNvbm5lY3QgZXZlbnQgZ2VuZXJhdGlvbgorCS8vKysrRGlkbid0IHVzZWQgYW55bW9yZQorCVVMT05HICAgICAgICAgICAgICAgICAgIExpbmtEb3duVGltZTsKKwkvLy0tLQorCVVMT05HICAgICAgICAgICAgICAgICAgIExhc3RSeFJhdGU7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgTGFzdFR4UmF0ZTsKKwkvLysrK1VzZWQgb25seSBmb3IgU3RhdGlvbgorCUJPT0xFQU4gICAgICAgICAgICAgICAgIGJDb25maWdDaGFuZ2VkOyAgICAgICAgIC8vIENvbmZpZyBDaGFuZ2UgZmxhZyBmb3IgdGhlIHNhbWUgU1NJRCBzZXR0aW5nCisJLy8tLS0KKworCVVMT05HICAgICAgICAgICAgICAgICAgIEV4dHJhSW5mbzsgICAgICAgICAgICAgIC8vIEV4dHJhIGluZm9ybWF0aW9uIGZvciBkaXNwbGF5aW5nIHN0YXR1cworCVVMT05HICAgICAgICAgICAgICAgICAgIFN5c3RlbUVycm9yQml0bWFwOyAgICAgIC8vIGIwOiBFMlBST00gdmVyc2lvbiBlcnJvcgorCisJLy8rKytEaWRuJ3QgdXNlZCBhbnltb3JlCisJVUxPTkcgICAgICAgICAgICAgICAgICAgTWFjSWNWZXJzaW9uOyAgICAgICAgICAgLy8gTUFDL0JCUCBzZXJpYWwgaW50ZXJmYWNlIGlzc3VlIHNvbHZlZCBhZnRlciB2ZXIuRAorCS8vLS0tCisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBTeXN0ZW0gZXZlbnQgbG9nCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUlRfODAyXzExX0VWRU5UX1RBQkxFICAgRXZlbnRUYWI7CisKKworCUJPT0xFQU4JCUhUQ0VuYWJsZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiAgICAgIFN0YXRpc3RpYyByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFJUMjg3MAorCVVMT05HCQkJCQkJQnVsa091dERhdGFPbmVTZWNDb3VudDsKKwlVTE9ORwkJCQkJCUJ1bGtJbkRhdGFPbmVTZWNDb3VudDsKKwlVTE9ORwkJCQkJCUJ1bGtMYXN0T25lU2VjQ291bnQ7IC8vIEJ1bGtPdXREYXRhT25lU2VjQ291bnQgKyBCdWxrSW5EYXRhT25lU2VjQ291bnQKKwlVTE9ORwkJCQkJCXdhdGNoRG9nUnhDbnQ7CisJVUxPTkcJCQkJCQl3YXRjaERvZ1J4T3ZlckZsb3dDbnQ7CisJVUxPTkcJCQkJCQl3YXRjaERvZ1R4UGVuZGluZ0NudFtOVU1fT0ZfVFhfUklOR107CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlCT09MRUFOCQkJCQkJYlVwZGF0ZUJjbkNudERvbmU7CisJVUxPTkcJCQkJCQl3YXRjaERvZ01hY0RlYWRsb2NrOwkvLyBwcmV2ZW50IE1BQy9CQlAgaW50byBkZWFkbG9jayBjb25kaXRpb24KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gREVCVUcgcGFyYW1lcnRzCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vVUxPTkcJCURlYnVnU2V0dGluZ1s0XTsKKwlCT09MRUFOCQliQmFuQWxsQmFTZXR1cDsKKwlCT09MRUFOCQliUHJvbWlzY3VvdXM7CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gcnQyODYwYyBlbXVsYXRpb24tdXNlIFBhcmFtZXRlcnMKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVUxPTkcJCXJ0c2FjY3VbMzBdOworCVVMT05HCQljdHNhY2N1WzMwXTsKKwlVTE9ORwkJY2ZlbmRhY2N1WzMwXTsKKwlVTE9ORwkJYmFjb250ZW50WzE2XTsKKwlVTE9ORwkJcnhpbnRbUlhfUklOR19TSVpFKzFdOworCVVDSEFSCQlyY3ZiYVs2MF07CisJQk9PTEVBTgkJYkxpbmtBZGFwdDsKKwlCT09MRUFOCQliRm9yY2VQcmludFRYOworCUJPT0xFQU4JCWJGb3JjZVByaW50Ulg7CisJQk9PTEVBTgkJYkRpc2FibGVzY2FubmluZzsJCS8vZGVmaW5lZCBpbiBSVDI4NzAgVVNCCisJQk9PTEVBTgkJYlN0YUZpZm9UZXN0OworCUJPT0xFQU4JCWJQcm90ZWN0aW9uVGVzdDsKKwlCT09MRUFOCQliSENDQVRlc3Q7CisJQk9PTEVBTgkJYkdlbk9uZUhDQ0E7CisJQk9PTEVBTgkJYkJyb2FkQ29tSFQ7CisJLy8rKytGb2xsb3dpbmcgYWRkIGZyb20gUlQyODcwIFVTQi4KKwlVTE9ORwkJQnVsa091dFJlcTsKKwlVTE9ORwkJQnVsa091dENvbXBsZXRlOworCVVMT05HCQlCdWxrT3V0Q29tcGxldGVPdGhlcjsKKwlVTE9ORwkJQnVsa091dENvbXBsZXRlQ2FuY2VsOwkvLyBzZWVtcyBub3QgdXNlIG5vdz8KKwlVTE9ORwkJQnVsa0luUmVxOworCVVMT05HCQlCdWxrSW5Db21wbGV0ZTsKKwlVTE9ORwkJQnVsa0luQ29tcGxldGVGYWlsOworCS8vLS0tCisKKyAgICBzdHJ1Y3Qgd2lmaWNvbmYJCQlXSUZJdGVzdGJlZDsKKworI2lmZGVmIFJBTElOS19BVEUKKwlBVEVfSU5GTwkJCQlhdGU7CisjaWZkZWYgUlQyODcwCisJQk9PTEVBTgkJCQkJQ29udGluQnVsa091dDsJCS8vQVRFIGJ1bGsgb3V0IGNvbnRyb2wKKwlCT09MRUFOCQkJCQlDb250aW5CdWxrSW47CQkvL0FURSBidWxrIGluIGNvbnRyb2wKKwlhdG9taWNfdAkJCQlCdWxrT3V0UmVtYWluZWQ7CisJYXRvbWljX3QJCQkJQnVsa0luUmVtYWluZWQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdV9wb29sIG1wZHVfYmxrX3Bvb2w7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlVTE9ORwkJCQkJT25lU2Vjb25kbm9uQkVwYWNrZXRzOwkJLy8gcmVjb3JkIG5vbiBCRSBwYWNrZXRzIHBlciBzZWNvbmQKKworI2lmIFdJUkVMRVNTX0VYVCA+PSAxMgorICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzICAgIGl3X3N0YXRzOworI2VuZGlmCisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKworI2lmZGVmIEJMT0NLX05FVF9JRgorCUJMT0NLX1FVRVVFX0VOVFJZCQlibG9ja1F1ZXVlVGFiW05VTV9PRl9UWF9SSU5HXTsKKyNlbmRpZiAvLyBCTE9DS19ORVRfSUYgLy8KKworCisKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKwlJTlQzMgkJCQkJTUNfUm93SUQ7CisJVUNIQVIJCQkJCU1DX0ZpbGVOYW1lWzI1Nl07CisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisKKwlVTE9ORwkJCQkJVGJ0dFRpY2tDb3VudDsKKyNpZmRlZiBQQ0lfTVNJX1NVUFBPUlQKKwlCT09MRUFOCQkJCQlIYXZlTXNpOworI2VuZGlmIC8vIFBDSV9NU0lfU1VQUE9SVCAvLworCisKKwlVQ0hBUgkJCQkJaXNfb247CisKKyNkZWZpbmUgVElNRV9CQVNFCQkJKDEwMDAwMDAvT1NfSFopCisjZGVmaW5lIFRJTUVfT05FX1NFQ09ORAkJKDEwMDAwMDAvVElNRV9CQVNFKQorCVVDSEFSCQkJCQlmbGdfYmVfYWRqdXN0OworCVVMT05HCQkJCQliZV9hZGp1c3RfbGFzdF90aW1lOworCisjaWZkZWYgTklOVEVORE9fQVAKKwlOSU5ET19DVFJMX0JMT0NLCQluaW5kb19jdHJsX2Jsb2NrOworI2VuZGlmIC8vIE5JTlRFTkRPX0FQIC8vCisKKworI2lmZGVmIElLQU5PU19WWF8xWDAKKwlzdHJ1Y3QgSUtBTk9TX1RYX0lORk8JSWthbm9zVHhJbmZvOworCXN0cnVjdCBJS0FOT1NfVFhfSU5GTwlJa2Fub3NSeEluZm9bTUFYX01CU1NJRF9OVU0gKyBNQVhfV0RTX0VOVFJZICsgTUFYX0FQQ0xJX05VTSArIE1BWF9NRVNIX05VTV07CisjZW5kaWYgLy8gSUtBTk9TX1ZYXzFYMCAvLworCisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwlSdG1wRGlhZ1N0cnVjdAlEaWFnU3RydWN0OworI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisKKwlVSU5UOAkJCQkJUE1fRmxnU3VzcGVuZDsKKworI2lmZGVmIFJUMzB4eAorLy89PT09PT1lZnVzZQorCUJPT0xFQU4JCWJVc2VFZnVzZTsKKwlCT09MRUFOCQliRUVQUk9NRmlsZTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworfSBSVE1QX0FEQVBURVIsICpQUlRNUF9BREFQVEVSOworCisvLworLy8gQ2lzY28gSUFQUCBmb3JtYXQKKy8vCit0eXBlZGVmIHN0cnVjdCAgX0NJU0NPX0lBUFBfQ09OVEVOVF8KK3sKKwlVU0hPUlQgICAgIExlbmd0aDsgICAgICAgIC8vSUFQUCBMZW5ndGgKKwlVQ0hBUiAgICAgIE1lc3NhZ2VUeXBlOyAgICAgIC8vSUFQUCB0eXBlCisJVUNIQVIgICAgICBGdW5jdGlvbkNvZGU7ICAgICAvL0lBUFAgZnVuY3Rpb24gdHlwZQorCVVDSEFSICAgICAgRGVzdGluYWlvbk1BQ1tNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgU291cmNlTUFDW01BQ19BRERSX0xFTl07CisJVVNIT1JUICAgICBUYWc7ICAgICAgICAgICAvL1RhZyhlbGVtZW50IElFKSAtIEFkamFjZW50IEFQIHJlcG9ydAorCVVTSE9SVCAgICAgVGFnTGVuZ3RoOyAgICAgLy9MZW5ndGggb2YgZWxlbWVudCBub3QgaW5jbHVkaW5nIDQgYnl0ZSBoZWFkZXIKKwlVQ0hBUiAgICAgIE9VSVs0XTsgICAgICAgICAgIC8vMHgwMCwgMHg0MCwgMHg5NiwgMHgwMAorCVVDSEFSICAgICAgUHJldmlvdXNBUFtNQUNfQUREUl9MRU5dOyAgICAgICAvL01BQyBBZGRyZXNzIG9mIGFjY2VzcyBwb2ludAorCVVTSE9SVCAgICAgQ2hhbm5lbDsKKwlVU0hPUlQgICAgIFNzaWRMZW47CisJVUNIQVIgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07CisJVVNIT1JUICAgICBTZWNvbmRzOyAgICAgICAgICAvL1NlY29uZHMgdGhhdCB0aGUgY2xpZW50IGhhcyBiZWVuIGRpc2Fzc29jaWF0ZWQuCit9IENJU0NPX0lBUFBfQ09OVEVOVCwgKlBDSVNDT19JQVBQX0NPTlRFTlQ7CisKKyNkZWZpbmUgREVMQVlJTlRNQVNLCQkweDAwMDNmZmZiCisjZGVmaW5lIElOVE1BU0sJCQkJMHgwMDAzZmZmYgorI2RlZmluZSBJbmRNYXNrCQkJCTB4MDAwM2ZmZmMKKyNkZWZpbmUgUnhJTlQJCQkJMHgwMDAwMDAwNQkvLyBEZWxheWVkIFJ4IG9yIGluZGl2aSByeAorI2RlZmluZSBUeERhdGFJbnQJCQkweDAwMDAwMGZhCS8vIERlbGF5ZWQgVHggb3IgaW5kaXZpIHR4CisjZGVmaW5lIFR4TWdtdEludAkJCTB4MDAwMDAxMDIJLy8gRGVsYXllZCBUeCBvciBpbmRpdmkgdHgKKyNkZWZpbmUgVHhDb2hlcmVudAkJCTB4MDAwMjAwMDAJLy8gdHggY29oZXJlbnQKKyNkZWZpbmUgUnhDb2hlcmVudAkJCTB4MDAwMTAwMDAJLy8gcnggY29oZXJlbnQKKyNkZWZpbmUgTWN1Q29tbWFuZAkJCTB4MDAwMDAyMDAJLy8gbWN1CisjZGVmaW5lIFByZVRCVFRJbnQJCQkweDAwMDAxMDAwCS8vIFByZS1UQlRUIGludGVycnVwdAorI2RlZmluZSBUQlRUSW50CQkJCTB4MDAwMDA4MDAJCS8vIFRCVFQgaW50ZXJydXB0CisjZGVmaW5lIEdQVGltZU91dEludAkJCTB4MDAwMDgwMDAJCS8vIEdQdGltZW91dCBpbnRlcnJ1cHQKKyNkZWZpbmUgQXV0b1dha2V1cEludAkJMHgwMDAwNDAwMAkJLy8gQXV0b1dha2V1cEludCBpbnRlcnJ1cHQKKyNkZWZpbmUgRmlmb1N0YUZ1bGxJbnQJCQkweDAwMDAyMDAwCS8vICBmaWZvIHN0YXRpc3RpY3MgZnVsbCBpbnRlcnJ1cHQKKworCit0eXBlZGVmIHN0cnVjdCBfUlhfQkxLXworeworLy8JUlhEX1NUUlVDCQlSeEQ7IC8vIHNhbXBsZQorCVJUMjhYWF9SWERfU1RSVUMJUnhEOworCVBSWFdJX1NUUlVDCQkJcFJ4V0k7CisJUEhFQURFUl84MDJfMTEJCXBIZWFkZXI7CisJUE5ESVNfUEFDS0VUCQlwUnhQYWNrZXQ7CisJVUNIQVIJCQkJKnBEYXRhOworCVVTSE9SVAkJCQlEYXRhU2l6ZTsKKwlVU0hPUlQJCQkJRmxhZ3M7CisJVUNIQVIJCQkJVXNlclByaW9yaXR5OwkvLyBmb3IgY2FsY3VsYXRlIFRLSVAgTUlDIHVzaW5nCit9IFJYX0JMSzsKKworCisjZGVmaW5lIFJYX0JMS19TRVRfRkxBRyhfcFJ4QmxrLCBfZmxhZykJCShfcFJ4QmxrLT5GbGFncyB8PSBfZmxhZykKKyNkZWZpbmUgUlhfQkxLX1RFU1RfRkxBRyhfcFJ4QmxrLCBfZmxhZykJKF9wUnhCbGstPkZsYWdzICYgX2ZsYWcpCisjZGVmaW5lIFJYX0JMS19DTEVBUl9GTEFHKF9wUnhCbGssIF9mbGFnKQkoX3BSeEJsay0+RmxhZ3MgJj0gfihfZmxhZykpCisKKworI2RlZmluZSBmUlhfV0RTCQkJMHgwMDAxCisjZGVmaW5lIGZSWF9BTVNEVSAgICAgICAweDAwMDIKKyNkZWZpbmUgZlJYX0FSQUxJTksgICAgIDB4MDAwNAorI2RlZmluZSBmUlhfSFRDICAgICAgICAgMHgwMDA4CisjZGVmaW5lIGZSWF9QQUQgICAgICAgICAweDAwMTAKKyNkZWZpbmUgZlJYX0FNUERVICAgICAgIDB4MDAyMAorI2RlZmluZSBmUlhfUU9TCQkJMHgwMDQwCisjZGVmaW5lIGZSWF9JTkZSQQkJMHgwMDgwCisjZGVmaW5lIGZSWF9FQVAJCQkweDAxMDAKKyNkZWZpbmUgZlJYX01FU0gJCTB4MDIwMAorI2RlZmluZSBmUlhfQVBDTEkJCTB4MDQwMAorI2RlZmluZSBmUlhfRExTCQkJMHgwODAwCisjZGVmaW5lIGZSWF9XUEkJCQkweDEwMDAKKworI2RlZmluZSBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFECTE0CisjZGVmaW5lIExFTkdUSF9BUkFMSU5LX1NVQkZSQU1FSEVBRAkxNAorI2RlZmluZSBMRU5HVEhfQVJBTElOS19IRUFERVJfRklFTEQJIDIKKworI2RlZmluZSBUWF9VTktPV05fRlJBTUUJCQkweDAwCisjZGVmaW5lIFRYX01DQVNUX0ZSQU1FCQkJMHgwMQorI2RlZmluZSBUWF9MRUdBQ1lfRlJBTUUJCQkweDAyCisjZGVmaW5lIFRYX0FNUERVX0ZSQU1FCQkJMHgwNAorI2RlZmluZSBUWF9BTVNEVV9GUkFNRQkJCTB4MDgKKyNkZWZpbmUgVFhfUkFMSU5LX0ZSQU1FCQkJMHgxMAorI2RlZmluZSBUWF9GUkFHX0ZSQU1FCQkJMHgyMAorCisKKy8vCUN1cnJlbnRseSB0aGUgc2l6ZW9mKFRYX0JMSykgaXMgMTQ4IGJ5dGVzLgordHlwZWRlZiBzdHJ1Y3QgX1RYX0JMS18KK3sKKwlVQ0hBUgkJCQlRdWVJZHg7CisJVUNIQVIJCQkJVHhGcmFtZVR5cGU7CQkJCS8vIEluZGljYXRlIHRoZSBUcmFuc21pc3Npb24gdHlwZSBvZiB0aGUgYWxsIGZyYW1lcyBpbiBvbmUgYmF0Y2gKKwlVQ0hBUgkJCQlUb3RhbEZyYW1lTnVtOwkJCQkvLyBUb3RhbCBmcmFtZSBudW1iZXIgd2FudCB0byBzZW5kLW91dCBpbiBvbmUgYmF0Y2gKKwlVU0hPUlQJCQkJVG90YWxGcmFnTnVtOwkJCQkvLyBUb3RhbCBmcmFtZSBmcmFnbWVudHMgcmVxdWlyZWQgaW4gb25lIGJhdGNoCisJVVNIT1JUCQkJCVRvdGFsRnJhbWVMZW47CQkJCS8vIFRvdGFsIGxlbmd0aCBvZiBhbGwgZnJhbWVzIHdhbnQgdG8gc2VuZC1vdXQgaW4gb25lIGJhdGNoCisKKwlRVUVVRV9IRUFERVIJCVR4UGFja2V0TGlzdDsKKwlNQUNfVEFCTEVfRU5UUlkJCSpwTWFjRW50cnk7CQkJCQkvLyBOVUxMOiBwYWNrZXQgd2l0aCA4MDIuMTEgUkEgZmllbGQgaXMgbXVsdGljYXN0L2Jyb2FkY2FzdCBhZGRyZXNzCisJSFRUUkFOU01JVF9TRVRUSU5HCSpwVHJhbnNtaXQ7CisKKwkvLyBGb2xsb3dpbmcgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBzcGVjaWZpYyBwYWNrZXQuCisJUE5ESVNfUEFDS0VUCQlwUGFja2V0OworCVBVQ0hBUgkJCQlwU3JjQnVmSGVhZGVyOwkJCQkvLyBSZWZlcmVuY2UgdG8gdGhlIGhlYWQgb2Ygc2tfYnVmZi0+ZGF0YQorCVBVQ0hBUgkJCQlwU3JjQnVmRGF0YTsJCQkJLy8gUmVmZXJlbmNlIHRvIHRoZSBza19idWZmLT5kYXRhLCB3aWxsIGNoYW5nZWQgZGVwZW5kcyBvbiBoYW5sZGluZyBwcm9ncmVzc3MKKwlVSU5UCQkJCVNyY0J1ZkxlbjsJCQkJCS8vIExlbmd0aCBvZiBwYWNrZXQgcGF5bG9hZCB3aGljaCBub3QgaW5jbHVkaW5nIExheWVyIDIgaGVhZGVyCisJUFVDSEFSCQkJCXBFeHRyYUxsY1NuYXBFbmNhcDsJCQkvLyBOVUxMIG1lYW5zIG5vIGV4dHJhIExMQy9TTkFQIGlzIHJlcXVpcmVkCisJVUNIQVIJCQkJSGVhZGVyQnVmWzgwXTsJCQkJLy8gVGVtcEJ1ZmZlciBmb3IgVFhfSU5GTyArIFRYX1dJICsgODAyLjExIEhlYWRlciArIHBhZGRpbmcgKyBBTVNEVSBTdWJIZWFkZXIgKyBMTEMvU05BUAorCVVDSEFSCQkJCU1wZHVIZWFkZXJMZW47CQkJCS8vIDgwMi4xMSBoZWFkZXIgbGVuZ3RoIE5PVCBpbmNsdWRpbmcgdGhlIHBhZGRpbmcKKwlVQ0hBUgkJCQlIZHJQYWRMZW47CQkJCQkvLyByZWNvcmRpbmcgSGVhZGVyIFBhZGRpbmcgTGVuZ3RoOworCVVDSEFSCQkJCWFwaWR4OwkJCQkJCS8vIFRoZSBpbnRlcmZhY2UgYXNzb2NpYXRlZCB0byB0aGlzIHBhY2tldAorCVVDSEFSCQkJCVdjaWQ7CQkJCQkJLy8gVGhlIE1BQyBlbnRyeSBhc3NvY2lhdGVkIHRvIHRoaXMgcGFja2V0CisJVUNIQVIJCQkJVXNlclByaW9yaXR5OwkJCQkvLyBwcmlvcml0eSBjbGFzcyBvZiBwYWNrZXQKKwlVQ0hBUgkJCQlGcmFtZUdhcDsJCQkJCS8vIHdoYXQga2luZCBvZiBJRlMgdGhpcyBwYWNrZXQgdXNlCisJVUNIQVIJCQkJTXBkdVJlcU51bTsJCQkJCS8vIG51bWJlciBvZiBmcmFnbWVudHMgb2YgdGhpcyBmcmFtZQorCVVDSEFSCQkJCVR4UmF0ZTsJCQkJCQkvLyBUT0RPOiBPYnNvbGV0ZWQ/IFNob3VsZCBjaGFuZ2UgdG8gTUNTPworCVVDSEFSCQkJCUNpcGhlckFsZzsJCQkJCS8vIGNpcGhlciBhbG9ncml0aG0KKwlQQ0lQSEVSX0tFWQkJCXBLZXk7CisKKworCisJVVNIT1JUCQkJCUZsYWdzOwkJCQkJCS8vU2VlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgZGV0YWlsLgorCisJLy9ZT1UgU0hPVUxEIE5PVCBUT1VDSCBJVCEgRm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQgZm9yIGhhcmR3YXJlLWRlcGVuZGVkIGxheWVyLgorCVVMT05HCQkJCVByaXY7CQkJCQkJLy8gSGFyZHdhcmUgc3BlY2lmaWMgdmFsdWUgc2F2ZWQgaW4gaGVyZS4KK30gVFhfQkxLLCAqUFRYX0JMSzsKKworCisjZGVmaW5lIGZUWF9iUnRzUmVxdWlyZWQJCTB4MDAwMQkvLyBJbmRpY2F0ZSBpZiBuZWVkIHNlbmQgUlRTIGZyYW1lIGZvciBwcm90ZWN0aW9uLiBOb3QgdXNlZCBpbiBSVDI4NjAvUlQyODcwLgorI2RlZmluZSBmVFhfYkFja1JlcXVpcmVkICAgICAgIAkweDAwMDIJLy8gdGhlIHBhY2tldCBuZWVkIGFjayByZXNwb25zZQorI2RlZmluZSBmVFhfYlBpZ2d5QmFjayAgICAgCQkweDAwMDQJLy8gTGVnYWN5IGRldmljZSB1c2UgUGlnZ2JhY2sgb3Igbm90CisjZGVmaW5lIGZUWF9iSFRSYXRlICAgICAgICAgCTB4MDAwOAkvLyBhbGxvdyB0byB1c2UgSFQgcmF0ZQorLy8jZGVmaW5lIGZUWF9iRm9yY2VMb3dSYXRlICAgICAgIDB4MDAxMAkvLyBmb3JjZSB0byB1c2UgTG93IFJhdGUKKyNkZWZpbmUgZlRYX2JGb3JjZU5vblFvUyAgICAgICAJMHgwMDEwCS8vIGZvcmNlIHRvIHRyYW5zbWl0IGZyYW1lIHdpdGhvdXQgV01NLVFvUyBpbiBIVCBtb2RlCisjZGVmaW5lIGZUWF9iQWxsb3dGcmFnICAgICAgIAkweDAwMjAJLy8gYWxsb3cgdG8gZnJhZ21lbnQgdGhlIHBhY2tldCwgQS1NUERVLCBBLU1TRFUsIEEtUmFsaW5rIGlzIG5vdCBhbGxvd2VkIHRvIGZyYWdtZW50CisjZGVmaW5lIGZUWF9iTW9yZURhdGEJCQkweDAwNDAJLy8gdGhlcmUgYXJlIG1vcmUgZGF0YSBwYWNrZXRzIGluIFBvd2VyU2F2ZSBRdWV1ZQorI2RlZmluZSBmVFhfYldNTQkJCQkweDAwODAJLy8gUU9TIERhdGEKKworI2RlZmluZSBmVFhfYkNsZWFyRUFQRnJhbWUJCTB4MDEwMAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisKKyNkZWZpbmUgVFhfQkxLX0FTU0lHTl9GTEFHKF9wVHhCbGssIF9mbGFnLCB2YWx1ZSkJXAorCQlkbyB7CQkJCQkJCQkJCVwKKwkJCWlmICh2YWx1ZSkgCQkJCQkJCQlcCisJCQkJKF9wVHhCbGstPkZsYWdzIHw9IF9mbGFnKSAJCQlcCisJCQllbHNlIAkJCQkJCQkJCVwKKwkJCQkoX3BUeEJsay0+RmxhZ3MgJj0gfihfZmxhZykpCQlcCisJCX13aGlsZSgwKQorCisjZGVmaW5lIFRYX0JMS19TRVRfRkxBRyhfcFR4QmxrLCBfZmxhZykJCShfcFR4QmxrLT5GbGFncyB8PSBfZmxhZykKKyNkZWZpbmUgVFhfQkxLX1RFU1RfRkxBRyhfcFR4QmxrLCBfZmxhZykJKCgoX3BUeEJsay0+RmxhZ3MgJiBfZmxhZykgPT0gX2ZsYWcpID8gMSA6IDApCisjZGVmaW5lIFRYX0JMS19DTEVBUl9GTEFHKF9wVHhCbGssIF9mbGFnKQkoX3BUeEJsay0+RmxhZ3MgJj0gfihfZmxhZykpCisKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCitzdGF0aWMgaW5saW5lIFZPSUQJV3JpdGVCYWNrVG9EZXNjcmlwdG9yKAorCUlOICBQVUNIQVIJCQlEZXN0LAorIAlJTglQVUNIQVIJCQlTcmMsCisgICAgSU4gIEJPT0xFQU4JCQlEb0VuY3J5cHQsCisJSU4gIFVMT05HICAgICAgICAgICBEZXNjcmlwdG9yVHlwZSkKK3sKKwlVSU5UMzIgKnAxLCAqcDI7CisKKwlwMSA9ICgoVUlOVDMyICopRGVzdCk7CisJcDIgPSAoKFVJTlQzMiAqKVNyYyk7CisKKwkqcDEgPSAqcDI7CisJKihwMSsyKSA9ICoocDIrMik7CisJKihwMSszKSA9ICoocDIrMyk7CisJKihwMSsxKSA9ICoocDIrMSk7IC8vIFdvcmQgMTsgdGhpcyBtdXN0IGJlIHdyaXR0ZW4gYmFjayBsYXN0Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlFbmRpYW4gY29udmVyc2lvbiBvZiBUeC9SeCBkZXNjcmlwdG9yIC4KKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQkJUG9pbnRlciB0byBUeC9SeCBkZXNjcmlwdG9yCisJCURlc2NyaXB0b3JUeXBlCURpcmVjdGlvbiBvZiB0aGUgZnJhbWUKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKwkJQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gcmVhZCBvciB1cGRhdGUgZGVzY3JpcHRvcgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbmxpbmUgVk9JRAlSVE1QV0lFbmRpYW5DaGFuZ2UoCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEZXNjcmlwdG9yVHlwZSkKK3sKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKworCXNpemUgPSAoKERlc2NyaXB0b3JUeXBlID09IFRZUEVfVFhXSSkgPyBUWFdJX1NJWkUgOiBSWFdJX1NJWkUpOworCisJaWYoRGVzY3JpcHRvclR5cGUgPT0gVFlQRV9UWFdJKQorCXsKKwkJKigoVUlOVDMyICopKHBEYXRhKSkgPSBTV0FQMzIoKigoVUlOVDMyICopKHBEYXRhKSkpOwkJLy8gQnl0ZSAwfjMKKwkJKigoVUlOVDMyICopKHBEYXRhICsgNCkpID0gU1dBUDMyKCooKFVJTlQzMiAqKShwRGF0YSs0KSkpOwkvLyBCeXRlIDR+NworCX0KKwllbHNlCisJeworCQlmb3IoaT0wOyBpIDwgc2l6ZS80IDsgaSsrKQorCQkJKigoKFVJTlQzMiAqKXBEYXRhKSAraSkgPSBTV0FQMzIoKigoKFVJTlQzMiAqKXBEYXRhKStpKSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJRW5kaWFuIGNvbnZlcnNpb24gb2YgVHgvUnggZGVzY3JpcHRvciAuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJCVBvaW50ZXIgdG8gVHgvUnggZGVzY3JpcHRvcgorCQlEZXNjcmlwdG9yVHlwZQlEaXJlY3Rpb24gb2YgdGhlIGZyYW1lCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCUNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHJlYWQgb3IgdXBkYXRlIGRlc2NyaXB0b3IKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKyNpZmRlZiBSVDI4NzAKK3N0YXRpYyBpbmxpbmUgVk9JRAlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURlc2NyaXB0b3JUeXBlKQoreworCSooKFVJTlQzMiAqKShwRGF0YSkpID0gU1dBUDMyKCooKFVJTlQzMiAqKShwRGF0YSkpKTsKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlFbmRpYW4gY29udmVyc2lvbiBvZiBhbGwga2luZHMgb2YgODAyLjExIGZyYW1lcyAuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJCVBvaW50ZXIgdG8gdGhlIDgwMi4xMSBmcmFtZSBzdHJ1Y3R1cmUKKwkJRGlyIAkJCURpcmVjdGlvbiBvZiB0aGUgZnJhbWUKKwkJRnJvbVJ4RG9uZUludAlDYWxsZXIgaXMgZnJvbSBSeERvbmUgaW50ZXJydXB0CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCUNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHJlYWQgb3IgdXBkYXRlIGJ1ZmZlciBkYXRhCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlubGluZSBWT0lECVJUTVBGcmFtZUVuZGlhbkNoYW5nZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURpciwKKwlJTglCT09MRUFOIAkJRnJvbVJ4RG9uZUludCkKK3sKKwlQSEVBREVSXzgwMl8xMSBwRnJhbWU7CisJUFVDSEFSCXBNYWNIZHI7CisKKwkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBGcmFtZSBDb250cm9sIGZpZWxkCisJaWYoRGlyID09IERJUl9SRUFEKQorCXsKKwkJKihVU0hPUlQgKilwRGF0YSA9IFNXQVAxNigqKFVTSE9SVCAqKXBEYXRhKTsKKwl9CisKKwlwRnJhbWUgPSAoUEhFQURFUl84MDJfMTEpIHBEYXRhOworCXBNYWNIZHIgPSAoUFVDSEFSKSBwRnJhbWU7CisKKwkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBEdXJhdGlvbi9JRCBmaWVsZAorCSooVVNIT1JUICopKHBNYWNIZHIgKyAyKSA9IFNXQVAxNigqKFVTSE9SVCAqKShwTWFjSGRyICsgMikpOworCisJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gU2VxdWVuY2UgQ29udHJvbCBmaWVsZAorCSooVVNIT1JUICopKHBNYWNIZHIgKyAyMikgPSBTV0FQMTYoKihVU0hPUlQgKikocE1hY0hkciArIDIyKSk7CisKKwlpZihwRnJhbWUtPkZDLlR5cGUgPT0gQlRZUEVfTUdNVCkKKwl7CisJCXN3aXRjaChwRnJhbWUtPkZDLlN1YlR5cGUpCisJCXsKKwkJCWNhc2UgU1VCVFlQRV9BU1NPQ19SRVE6CisJCQljYXNlIFNVQlRZUEVfUkVBU1NPQ19SRVE6CisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gQ2FwYWJpbGl0eUluZm8gZmllbGQKKwkJCQlwTWFjSGRyICs9IHNpemVvZihIRUFERVJfODAyXzExKTsKKwkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKworCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIExpc3RlbiBJbnRlcnZhbCBmaWVsZAorCQkJCXBNYWNIZHIgKz0gMjsKKwkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTVUJUWVBFX0FTU09DX1JTUDoKKwkJCWNhc2UgU1VCVFlQRV9SRUFTU09DX1JTUDoKKwkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBDYXBhYmlsaXR5SW5mbyBmaWVsZAorCQkJCXBNYWNIZHIgKz0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gU3RhdHVzIENvZGUgZmllbGQKKwkJCQlwTWFjSGRyICs9IDI7CisJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisKKwkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBBSUQgZmllbGQKKwkJCQlwTWFjSGRyICs9IDI7CisJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgU1VCVFlQRV9BVVRIOgorCQkJCS8vIElmIGZyb20gQVBIYW5kbGVSeERvbmVJbnRlcnJ1cHQgcm91dGluZSwgaXQgaXMgc3RpbGwgYSBlbmNyeXB0IGZvcm1hdC4KKwkJCQkvLyBUaGUgY29udmVydGlvbiBpcyBkZWxheWVkIHRvIFJUTVBIYW5kbGVEZWNyeXB0aW9uRG9uZUludGVycnVwdC4KKwkJCQlpZighRnJvbVJ4RG9uZUludCAmJiBwRnJhbWUtPkZDLldlcCA9PSAxKQorCQkJCQlicmVhazsKKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBBdXRoIEFsZyBOby4gZmllbGQKKwkJCQkJcE1hY0hkciArPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisJCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIEF1dGggU2VxIE5vLiBmaWVsZAorCQkJCQlwTWFjSGRyICs9IDI7CisJCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIFN0YXR1cyBDb2RlIGZpZWxkCisJCQkJCXBNYWNIZHIgKz0gMjsKKwkJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFNVQlRZUEVfQkVBQ09OOgorCQkJY2FzZSBTVUJUWVBFX1BST0JFX1JTUDoKKwkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBCZWFjb25JbnRlcnZhbCBmaWVsZAorCQkJCXBNYWNIZHIgKz0gKHNpemVvZihIRUFERVJfODAyXzExKSArIFRJTUVTVEFNUF9MRU4pOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gQ2FwYWJpbGl0eUluZm8gZmllbGQKKwkJCQlwTWFjSGRyICs9IHNpemVvZihVU0hPUlQpOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCQkJCWJyZWFrOworCisJCQljYXNlIFNVQlRZUEVfREVBVVRIOgorCQkJY2FzZSBTVUJUWVBFX0RJU0FTU09DOgorCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIFJlYXNvbiBjb2RlIGZpZWxkCisJCQkJcE1hY0hkciArPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiggcEZyYW1lLT5GQy5UeXBlID09IEJUWVBFX0RBVEEgKQorCXsKKwl9CisJZWxzZSBpZihwRnJhbWUtPkZDLlR5cGUgPT0gQlRZUEVfQ05UTCkKKwl7CisJCXN3aXRjaChwRnJhbWUtPkZDLlN1YlR5cGUpCisJCXsKKwkJCWNhc2UgU1VCVFlQRV9CTE9DS19BQ0tfUkVROgorCQkJCXsKKwkJCQkJUEZSQU1FX0JBX1JFUSBwQkFSZXEgPSAoUEZSQU1FX0JBX1JFUSlwRnJhbWU7CisJCQkJCSooVVNIT1JUICopKCZwQkFSZXEtPkJBUkNvbnRyb2wpID0gU1dBUDE2KCooVVNIT1JUICopKCZwQkFSZXEtPkJBUkNvbnRyb2wpKTsKKwkJCQkJcEJBUmVxLT5CQVN0YXJ0aW5nU2VxLndvcmQgPSBTV0FQMTYocEJBUmVxLT5CQVN0YXJ0aW5nU2VxLndvcmQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1VCVFlQRV9CTE9DS19BQ0s6CisJCQkJLy8gRm9yIEJsb2NrIEFjayBwYWNrZXQsIHRoZSBIVF9DT05UUk9MIGZpZWxkIGlzIGluIHRoZSBzYW1lIG9mZnNldCB3aXRoIEFkZHIzCisJCQkJKihVSU5UMzIgKikoJnBGcmFtZS0+QWRkcjNbMF0pID0gU1dBUDMyKCooVUlOVDMyICopKCZwRnJhbWUtPkFkZHIzWzBdKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgU1VCVFlQRV9BQ0s6CisJCQkJLy9Gb3IgQUNLIHBhY2tldCwgdGhlIEhUX0NPTlRST0wgZmllbGQgaXMgaW4gdGhlIHNhbWUgb2Zmc2V0IHdpdGggQWRkcjIKKwkJCQkqKFVJTlQzMiAqKSgmcEZyYW1lLT5BZGRyMlswXSk9CVNXQVAzMigqKFVJTlQzMiAqKSgmcEZyYW1lLT5BZGRyMlswXSkpOworCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiSW52YWxpZCBGcmFtZSBUeXBlISEhXG4iKSk7CisJfQorCisJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gRnJhbWUgQ29udHJvbAorCWlmKERpciA9PSBESVJfV1JJVEUpCisJeworCQkqKFVTSE9SVCAqKXBEYXRhID0gU1dBUDE2KCooVVNIT1JUICopcERhdGEpOworCX0KK30KKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKworc3RhdGljIGlubGluZSBWT0lEIENvbnZlcnRNdWx0aWNhc3RJUDJNQUMoCisJSU4gUFVDSEFSIHBJcEFkZHIsCisJSU4gUFVDSEFSICpwcE1hY0FkZHIsCisJSU4gVUlOVDE2IFByb3RvVHlwZSkKK3sKKwlpZiAocElwQWRkciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAocHBNYWNBZGRyID09IE5VTEwgfHwgKnBwTWFjQWRkciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKFByb3RvVHlwZSkKKwl7CisJCWNhc2UgRVRIX1BfSVBWNjoKKy8vCQkJbWVtc2V0KCpwcE1hY0FkZHIsIDAsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisJCQkqKCpwcE1hY0FkZHIpID0gMHgzMzsKKwkJCSooKnBwTWFjQWRkciArIDEpID0gMHgzMzsKKwkJCSooKnBwTWFjQWRkciArIDIpID0gcElwQWRkclsxMl07CisJCQkqKCpwcE1hY0FkZHIgKyAzKSA9IHBJcEFkZHJbMTNdOworCQkJKigqcHBNYWNBZGRyICsgNCkgPSBwSXBBZGRyWzE0XTsKKwkJCSooKnBwTWFjQWRkciArIDUpID0gcElwQWRkclsxNV07CisJCQlicmVhazsKKworCQljYXNlIEVUSF9QX0lQOgorCQlkZWZhdWx0OgorLy8JCQltZW1zZXQoKnBwTWFjQWRkciwgMCwgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwkJCSooKnBwTWFjQWRkcikgPSAweDAxOworCQkJKigqcHBNYWNBZGRyICsgMSkgPSAweDAwOworCQkJKigqcHBNYWNBZGRyICsgMikgPSAweDVlOworCQkJKigqcHBNYWNBZGRyICsgMykgPSBwSXBBZGRyWzFdICYgMHg3ZjsKKwkJCSooKnBwTWFjQWRkciArIDQpID0gcElwQWRkclsyXTsKKwkJCSooKnBwTWFjQWRkciArIDUpID0gcElwQWRkclszXTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybjsKK30KKworQk9PTEVBTiBSVE1QQ2hlY2tGb3JIYW5nKAorCUlOICBORElTX0hBTkRMRSBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0CisJKTsKKworVk9JRCAgUlRNUEhhbHQoCisJSU4gIE5ESVNfSEFORExFIE1pbmlwb3J0QWRhcHRlckNvbnRleHQKKwkpOworCisvLworLy8gIFByaXZhdGUgcm91dGluZXMgaW4gcnRtcF9pbml0LmMKKy8vCitORElTX1NUQVRVUyBSVE1QQWxsb2NBZGFwdGVyQmxvY2soCisJSU4gUFZPSUQJCQloYW5kbGUsCisJT1VUIFBSVE1QX0FEQVBURVIgICAqcHBBZGFwdGVyCisJKTsKKworTkRJU19TVEFUVVMgUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQKKwkpOworCitORElTX1NUQVRVUyBSVE1QRmluZEFkYXB0ZXIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE5ESVNfSEFORExFICAgICBXcmFwcGVyQ29uZmlndXJhdGlvbkNvbnRleHQKKwkpOworCitORElTX1NUQVRVUwlSVE1QUmVhZFBhcmFtZXRlcnNIb29rKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkCisJKTsKKworVk9JRCBSVE1QRnJlZUFkYXB0ZXIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQKKwkpOworCitORElTX1NUQVRVUyBOSUNSZWFkUmVnUGFyYW1ldGVycygKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisJSU4gIE5ESVNfSEFORExFICAgICAgICAgV3JhcHBlckNvbmZpZ3VyYXRpb25Db250ZXh0CisJKTsKKworI2lmZGVmIFJUMzB4eAorVk9JRCBOSUNJbml0UlQzMHh4UkZSZWdpc3RlcnMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIFJUMzB4eCAvLworCitWT0lEIE5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzKAorCUlOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCwKKwlJTglQVUNIQVIJCQkJbWFjX2FkZHIpOworCitWT0lEIE5JQ0luaXRBc2ljRnJvbUVFUFJPTSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQpOworCitWT0lEIE5JQ0luaXRUeFJ4UmluZ0FuZEJhY2tsb2dRdWV1ZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK05ESVNfU1RBVFVTIE5JQ0luaXRpYWxpemVBZGFwdGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICAgQk9PTEVBTiAgICBiSGFyZFJlc2V0KTsKKworTkRJU19TVEFUVVMgTklDSW5pdGlhbGl6ZUFzaWMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIEJPT0xFQU4JCWJIYXJkUmVzZXQpOworCitWT0lEIE5JQ0lzc3VlUmVzZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIFJUTVBSaW5nQ2xlYW5VcCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIFJpbmdUeXBlKTsKKworVk9JRCBSeFRlc3QoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitORElTX1NUQVRVUyBEYmdTZW5kUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK1ZPSUQgVXNlckNmZ0luaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIE5JQ1Jlc2V0RnJvbUVycm9yKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBOSUNFcmFzZUZpcm13YXJlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworTkRJU19TVEFUVVMgTklDTG9hZEZpcm13YXJlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTkRJU19TVEFUVVMgTklDTG9hZFJhdGVTd2l0Y2hpbmdQYXJhbXMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitCT09MRUFOIE5JQ0NoZWNrRm9ySGFuZygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBOSUNVcGRhdGVSYXdDb3VudGVycygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1VMT05HCVJUTVBOb3RBbGxaZXJvKAorCUlOCVBWT0lECXBTcmMxLAorCUlOCVVMT05HCUxlbmd0aCk7CisKK1ZPSUQgUlRNUFplcm9NZW1vcnkoCisJSU4gIFBWT0lEICAgcFNyYywKKwlJTiAgVUxPTkcgICBMZW5ndGgpOworCitVTE9ORyBSVE1QQ29tcGFyZU1lbW9yeSgKKwlJTiAgUFZPSUQgICBwU3JjMSwKKwlJTiAgUFZPSUQgICBwU3JjMiwKKwlJTiAgVUxPTkcgICBMZW5ndGgpOworCitWT0lEIFJUTVBNb3ZlTWVtb3J5KAorCU9VVCBQVk9JRCAgIHBEZXN0LAorCUlOICBQVk9JRCAgIHBTcmMsCisJSU4gIFVMT05HICAgTGVuZ3RoKTsKKworVk9JRCBBdG9IKAorCWNoYXIJKnNyYywKKwlVQ0hBUgkqZGVzdCwKKwlpbnQJCWRlc3RsZW4pOworCitVQ0hBUiBCdG9IKAorCWNoYXIgY2gpOworCitWT0lEIFJUTVBQYXRjaE1hY0JicEJ1ZygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgUlRNUFBhdGNoQ2FyZEJ1cygKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyKTsKKworVk9JRCBSVE1QUGF0Y2hSYWxpbmtDYXJkQnVzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JVUxPTkcJCQlCdXMpOworCitVTE9ORyBSVE1QUmVhZENCQ29uZmlnKAorCUlOCVVMT05HCUJ1cywKKwlJTglVTE9ORwlTbG90LAorCUlOCVVMT05HCUZ1bmMsCisJSU4JVUxPTkcJT2Zmc2V0KTsKKworVk9JRCBSVE1QV3JpdGVDQkNvbmZpZygKKwlJTglVTE9ORwlCdXMsCisJSU4JVUxPTkcJU2xvdCwKKwlJTglVTE9ORwlGdW5jLAorCUlOCVVMT05HCU9mZnNldCwKKwlJTglVTE9ORwlWYWx1ZSk7CisKK1ZPSUQgUlRNUEluaXRUaW1lcigKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICAgICAgcEFkLAorCUlOICBQUkFMSU5LX1RJTUVSX1NUUlVDVCAgICBwVGltZXIsCisJSU4gIFBWT0lEICAgICAgICAgICAgICAgICAgIHBUaW1lckZ1bmMsCisJSU4JUFZPSUQJCQkJCXBEYXRhLAorCUlOICBCT09MRUFOICAgICAgICAgICAgICAgICBSZXBlYXQpOworCitWT0lEIFJUTVBTZXRUaW1lcigKKwlJTiAgUFJBTElOS19USU1FUl9TVFJVQ1QgICAgcFRpbWVyLAorCUlOICBVTE9ORyAgICAgICAgICAgICAgICAgICBWYWx1ZSk7CisKKworVk9JRCBSVE1QTW9kVGltZXIoCisJSU4JUFJBTElOS19USU1FUl9TVFJVQ1QJcFRpbWVyLAorCUlOCVVMT05HCQkJCQlWYWx1ZSk7CisKK1ZPSUQgUlRNUENhbmNlbFRpbWVyKAorCUlOICBQUkFMSU5LX1RJTUVSX1NUUlVDVCAgICBwVGltZXIsCisJT1VUIEJPT0xFQU4gICAgICAgICAgICAgICAgICpwQ2FuY2VsbGVkKTsKKworVk9JRCBSVE1QU2V0TEVEKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiBVQ0hBUgkJCVN0YXR1cyk7CisKK1ZPSUQgUlRNUFNldFNpZ25hbExFRCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gTkRJU184MDJfMTFfUlNTSSBEYm0pOworCitWT0lEIFJUTVBFbmFibGVSeFR4KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworLy8KKy8vIHByb3RvdHlwZSBpbiBhY3Rpb24uYworLy8KK1ZPSUQgQWN0aW9uU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiAgU1RBVEVfTUFDSElORSAqUywKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIE1sbWVBRERCQUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1sbWVERUxCQUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1sbWVETFNBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lSW52YWxpZEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1sbWVRT1NBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBQZWVyQWRkQkFSZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQWRkQkFSc3BBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyRGVsQkFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQkFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBTZW5kUFNNUEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCVdjaWQsCisJSU4gVUNIQVIJCQlQc21wKTsKKworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworVk9JRCBTZW5kQlNTMjA0MENvZXhpc3RNZ210QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCVdjaWQsCisJSU4JVUNIQVIJYXBpZHgsCisJSU4JVUNIQVIJSW5mb1JlcSk7CisKK1ZPSUQgU2VuZE5vdGlmeUJXQWN0aW9uRnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgIFdjaWQsCisJSU4gVUNIQVIgYXBpZHgpOworCitCT09MRUFOIENoYW5uZWxTd2l0Y2hTYW5pdHlDaGVjaygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTiAgICBVQ0hBUiAgTmV3Q2hhbm5lbCwKKwlJTiAgICBVQ0hBUiAgU2Vjb25kYXJ5KTsKKworVk9JRCBDaGFubmVsU3dpdGNoQWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOICAgIFVDSEFSICBDaGFubmVsLAorCUlOICAgIFVDSEFSICBTZWNvbmRhcnkpOworCitVTE9ORyBCdWlsZEludG9sZXJhbnRDaGFubmVsUmVwKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFBVQ0hBUiAgcERlc3QpOworCitWT0lEIFVwZGF0ZTIwNDBDb2V4aXN0RnJhbWVBbmROb3RpZnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICAgVUNIQVIgIFdjaWQsCisJSU4JQk9PTEVBTgliQWRkSW50b2xlcmFudENoYSk7CisKK1ZPSUQgU2VuZDIwNDBDb2V4aXN0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOCUJPT0xFQU4JYkFkZEludG9sZXJhbnRDaGEpOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworVk9JRCBQZWVyUk1BY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyUHVibGljQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgU3RhUHVibGljQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIEJzczIwNDBDb2V4aXN0KTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCitWT0lEIFBlZXJCU1NUcmFuQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgUGVlckhUQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgUGVlclFPU0FjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitWT0lEIFBlZXJETFNBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorVk9JRCBEbHNQYXJtRmlsbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBPVVQgTUxNRV9ETFNfUkVRX1NUUlVDVCAqcERsc1JlcSwKKwlJTiBQUlRfODAyXzExX0RMUyBwRGxzLAorCUlOIFVTSE9SVCByZWFzb24pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIFJFQ0JBVGltZXJUaW1lb3V0KAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgT1JJQkFUaW1lclRpbWVvdXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFNlbmRSZWZyZXNoQkFSKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5KTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBBY3RIZWFkZXJJbml0KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE9VVCBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisgICAgSU4gUFVDSEFSIEFkZHIxLAorICAgIElOIFBVQ0hBUiBBZGRyMiwKKyAgICBJTiBQVUNIQVIgQWRkcjMpOworCitWT0lEIEJhckhlYWRlckluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUIFBGUkFNRV9CQVIgcENudGxCYXIsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBQVUNIQVIgcFNBKTsKKworVk9JRCBJbnNlcnRBY3RGaWVsZCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBVSU5UOCBDYXRlZ29yeSwKKwlJTiBVSU5UOCBBY3RDb2RlKTsKKworQk9PTEVBTiBRb3NCQURhdGFQYXJzZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBCT09MRUFOIGJBTVNEVSwKKwlJTiBQVUNIQVIgcDgwMjNIZWFkZXIsCisJSU4gVUNIQVIJV0NJRCwKKwlJTiBVQ0hBUglUSUQsCisJSU4gVVNIT1JUIFNlcXVlbmNlLAorCUlOIFVDSEFSIERhdGFPZmZzZXQsCisJSU4gVVNIT1JUIERhdGFzaXplLAorCUlOIFVJTlQgICBDdXJSeEluZGV4KTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorQk9PTEVBTiBDbnRsRW5xdWV1ZUZvclJlY3YoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUxPTkcgV2NpZCwKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisJSU4gUEZSQU1FX0JBX1JFUSBwTXNnKTsKKworVk9JRCBCYUF1dG9NYW5Td2l0Y2goCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIEhUSU9UQ2hlY2soCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICAgVUNIQVIgICAgIEJhdFJlY0lkeCk7CisKKy8vCisvLyBQcml2YXRlIHJvdXRpbmVzIGluIHJ0bXBfZGF0YS5jCisvLworQk9PTEVBTiBSVE1QSGFuZGxlUnhEb25lSW50ZXJydXB0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QSGFuZGxlVHhEb25lSW50ZXJydXB0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworQk9PTEVBTiBSVE1QSGFuZGxlVHhSaW5nRG1hRG9uZUludGVycnVwdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgSU5UX1NPVVJDRV9DU1JfU1RSVUMgVHhSaW5nQml0bWFwKTsKKworVk9JRCBSVE1QSGFuZGxlTWdtdFJpbmdEbWFEb25lSW50ZXJydXB0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QSGFuZGxlVEJUVEludGVycnVwdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgUlRNUEhhbmRsZVByZVRCVFRJbnRlcnJ1cHQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCit2b2lkIFJUTVBIYW5kbGVUd2FrZXVwSW50ZXJydXB0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRAlSVE1QSGFuZGxlUnhDb2hlcmVudEludGVycnVwdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK0JPT0xFQU4gVHhGcmFtZUlzQWdncmVnYXRpYmxlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcFByZXZBZGRyMSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHA4MDIzaGRyKTsKKworQk9PTEVBTiBQZWVySXNBZ2dyZU9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBVTE9ORyAgICAgICAgICBUeFJhdGUsCisgICAgSU4gIFBNQUNfVEFCTEVfRU5UUlkgcE1hY0VudHJ5KTsKKworTkRJU19TVEFUVVMgU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcigKKwlJTiAgUE5ESVNfQlVGRkVSICAgIHBGaXJzdEJ1ZmZlciwKKwlJTiAgVUNIQVIgICAgICAgICAgIERlc2lyZWRPZmZzZXQsCisJT1VUIFBVQ0hBUiAgICAgICAgICBwQnl0ZTAsCisJT1VUIFBVQ0hBUiAgICAgICAgICBwQnl0ZTEpOworCitORElTX1NUQVRVUyBTVEFTZW5kUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK1ZPSUQgU1RBU2VuZFBhY2tldHMoCisJSU4gIE5ESVNfSEFORExFICAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LAorCUlOICBQUE5ESVNfUEFDS0VUICAgcHBQYWNrZXRBcnJheSwKKwlJTiAgVUlOVCAgICAgICAgICAgIE51bWJlck9mUGFja2V0cyk7CisKK1ZPSUQgUlRNUERlUXVldWVQYWNrZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAJSU4JQk9PTEVBTgkJCWJJbnRDb250ZXh0LAorCUlOICBVQ0hBUgkJCVF1ZUlkeCwKKwlJTglVQ0hBUgkJCU1heF9UeF9QYWNrZXRzKTsKKworTkRJU19TVEFUVVMJUlRNUEhhcmRUcmFuc21pdCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBQTkRJU19QQUNLRVQJCXBQYWNrZXQsCisJSU4gIFVDSEFSCQkJUXVlSWR4LAorCU9VVAlQVUxPTkcJCQlwRnJlZVRYRExlZnQpOworCitORElTX1NUQVRVUwlTVEFIYXJkVHJhbnNtaXQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVFhfQkxLCQkJKnBUeEJsaywKKwlJTiAgVUNIQVIJCQlRdWVJZHgpOworCitWT0lEIFNUQVJ4RUFQT0xGcmFtZUluZGljYXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5LAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK05ESVNfU1RBVFVTIFJUTVBGcmVlVFhEUmVxdWVzdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIFJpbmdUeXBlLAorCUlOICBVQ0hBUiAgICAgICAgICAgTnVtYmVyUmVxdWlyZWQsCisJSU4gCVBVQ0hBUiAgICAgICAgICBGcmVlTnVtYmVySXMpOworCitORElTX1NUQVRVUyBNbG1lSGFyZFRyYW5zbWl0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUglRdWVJZHgsCisJSU4gIFBORElTX1BBQ0tFVCAgICBwUGFja2V0KTsKKworTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdE1nbXRSaW5nKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUglRdWVJZHgsCisJSU4gIFBORElTX1BBQ0tFVCAgICBwUGFja2V0KTsKKworTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdFR4UmluZygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIJUXVlSWR4LAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK1VTSE9SVCAgUlRNUENhbGNEdXJhdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIFJhdGUsCisJSU4gIFVMT05HICAgICAgICAgICBTaXplKTsKKworVk9JRCBSVE1QV3JpdGVUeFdJKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWFdJX1NUUlVDCQlwVHhXSSwKKwlJTiAgQk9PTEVBTiAgICAJCUZSQUcsCisJSU4gIEJPT0xFQU4gICAgCQlDRkFDSywKKwlJTiAgQk9PTEVBTiAgICAJCUluc1RpbWVzdGFtcCwKKwlJTglCT09MRUFOCQkJQU1QRFUsCisJSU4JQk9PTEVBTgkJCUFjaywKKwlJTglCT09MRUFOCQkJTlNlcSwJCS8vIEhXIG5ldyBhIHNlcXVlbmNlLgorCUlOCVVDSEFSCQkJQkFTaXplLAorCUlOCVVDSEFSCQkJV0NJRCwKKwlJTglVTE9ORwkJCUxlbmd0aCwKKwlJTiAgVUNIQVIgICAgICAJCVBJRCwKKwlJTglVQ0hBUgkJCVRJRCwKKwlJTglVQ0hBUgkJCVR4UmF0ZSwKKwlJTglVQ0hBUgkJCVR4b3Btb2RlLAorCUlOCUJPT0xFQU4JCQlDZkFjaywKKwlJTglIVFRSQU5TTUlUX1NFVFRJTkcJKnBUcmFuc21pdCk7CisKKworVk9JRCBSVE1QV3JpdGVUeFdJX0RhdGEoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCU9VVCBQVFhXSV9TVFJVQwkJcFR4V0ksCisJSU4JVFhfQkxLCQkJCSpwVHhCbGspOworCisKK1ZPSUQgUlRNUFdyaXRlVHhXSV9DYWNoZSgKKwlJTglQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4JT1VUIFBUWFdJX1NUUlVDCQlwVHhXSSwKKwlJTglUWF9CTEsJCQkJKnBUeEJsayk7CisKK1ZPSUQgUlRNUFdyaXRlVHhEZXNjcmlwdG9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWERfU1RSVUMJCXBUeEQsCisJSU4JQk9PTEVBTgkJCWJXSVYsCisJSU4JVUNIQVIJCQlRU0VMKTsKKworVk9JRCBSVE1QU3VzcGVuZE1zZHVUcmFuc21pc3Npb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIFJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTkRJU19TVEFUVVMgTWluaXBvcnRNTVJlcXVlc3QoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQlRdWVJZHgsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4gIFVJTlQgICAgICAgICAgICBMZW5ndGgpOworCitORElTX1NUQVRVUyBNaW5pcG9ydERhdGFNTVJlcXVlc3QoCisJIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCSBJTiAgVUNIQVIgICAgICAgICAgIFF1ZUlkeCwKKwkgSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwkgSU4gIFVJTlQgICAgICAgICAgICBMZW5ndGgpOworCitWT0lEIFJUTVBTZW5kTnVsbEZyYW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiAgICAgICAgICAgVHhSYXRlLAorCUlOCUJPT0xFQU4JCQliUW9zTnVsbCk7CisKK1ZPSUQgUlRNUFNlbmREaXNhc3NvY2lhdGlvbkZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVE1QU2VuZFJUU0ZyYW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBLAorCUlOCXVuc2lnbmVkIGludAlOZXh0TXBkdVNpemUsCisJSU4gIFVDSEFSICAgICAgICAgICBUeFJhdGUsCisJSU4gIFVDSEFSICAgICAgICAgICBSVFNSYXRlLAorCUlOICBVU0hPUlQgICAgICAgICAgQWNrRHVyYXRpb24sCisJSU4gIFVDSEFSICAgICAgICAgICBRdWVJZHgsCisJSU4gIFVDSEFSCQkJRnJhbWVHYXApOworCisKK05ESVNfU1RBVFVTIFJUTVBBcHBseVBhY2tldEZpbHRlcigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFJUMjhYWF9SWERfU1RSVUMgICAgICBwUnhELAorCUlOICBQSEVBREVSXzgwMl8xMSAgcEhlYWRlcik7CisKK1BRVUVVRV9IRUFERVIgICBSVE1QQ2hlY2tUeFN3UXVldWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIFVDSEFSICAgICAgICAgICAqUXVlSWR4KTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCBSVE1QUmVwb3J0TWljRXJyb3IoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBDSVBIRVJfS0VZICAgICBwV3BhS2V5KTsKKworVk9JRAlXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKAorICAgIElOICBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiAgUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOICBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitORElTX1NUQVRVUyBSVE1QQ2xvbmVOZGlzUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCUJPT0xFQU4gICAgcEluc0FNU0RVSGRyLAorCUlOICBQTkRJU19QQUNLRVQgICAgcEluUGFja2V0LAorCU9VVCBQTkRJU19QQUNLRVQgICAqcHBPdXRQYWNrZXQpOworCitORElTX1NUQVRVUyBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgKnBQYWNrZXQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwSGVhZGVyLAorCUlOICBVSU5UICAgICAgICAgICAgSGVhZGVyTGVuLAorCUlOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJSU4gIFVJTlQgICAgICAgICAgICBEYXRhTGVuKTsKKworVk9JRCBSVE1QRnJlZU5kaXNQYWNrZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBORElTX1BBQ0tFVCAgICBwUGFja2V0KTsKKworQk9PTEVBTiBSVE1QRnJlZVRYRFVwb25UeERtYURvbmUoCisJSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJSU4gVUNIQVIgICAgICAgICAgICBRdWVJZHgpOworCitCT09MRUFOIFJUTVBDaGVja0RIQ1BGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCk7CisKKworQk9PTEVBTiBSVE1QQ2hlY2tFdGhlclR5cGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpOworCisKK1ZPSUQgUlRNUENja0JicFR1bmluZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVSU5UCQkJVHhSYXRlKTsKKworLy8KKy8vIFByaXZhdGUgcm91dGluZXMgaW4gcnRtcF93ZXAuYworLy8KK1ZPSUQgUlRNUEluaXRXZXBFbmdpbmUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5LAorCUlOICBVQ0hBUiAgICAgICAgICAgS2V5SWQsCisJSU4gIFVDSEFSICAgICAgICAgICBLZXlMZW4sCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGVzdCk7CisKK1ZPSUQgUlRNUEVuY3J5cHREYXRhKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNyYywKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEZXN0LAorCUlOICBVSU5UICAgICAgICAgICAgTGVuKTsKKworQk9PTEVBTglSVE1QRGVjcnlwdERhdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQlMZW4sCisJSU4JVUlOVAkJCWlkeCk7CisKK0JPT0xFQU4JUlRNUFNvZnREZWNyeXB0V0VQKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiBQVUNIQVIJCQlwRGF0YSwKKwlJTiBVTE9ORwkJCURhdGFCeXRlQ250LAorCUlOIFBDSVBIRVJfS0VZCQlwR3JvdXBLZXkpOworCitWT0lEIFJUTVBTZXRJQ1YoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGVzdCk7CisKK1ZPSUQgQVJDRk9VUl9JTklUKAorCUlOICBQQVJDRk9VUkNPTlRFWFQgQ3R4LAorCUlOICBQVUNIQVIgICAgICAgICAgcEtleSwKKwlJTiAgVUlOVCAgICAgICAgICAgIEtleUxlbik7CisKK1VDSEFSICAgQVJDRk9VUl9CWVRFKAorCUlOICBQQVJDRk9VUkNPTlRFWFQgICAgIEN0eCk7CisKK1ZPSUQgQVJDRk9VUl9ERUNSWVBUKAorCUlOICBQQVJDRk9VUkNPTlRFWFQgQ3R4LAorCUlOICBQVUNIQVIgICAgICAgICAgcERlc3QsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwU3JjLAorCUlOICBVSU5UICAgICAgICAgICAgTGVuKTsKKworVk9JRCBBUkNGT1VSX0VOQ1JZUFQoCisJSU4gIFBBUkNGT1VSQ09OVEVYVCBDdHgsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGVzdCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTcmMsCisJSU4gIFVJTlQgICAgICAgICAgICBMZW4pOworCitWT0lEIFdQQUFSQ0ZPVVJfRU5DUllQVCgKKwlJTiAgUEFSQ0ZPVVJDT05URVhUIEN0eCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEZXN0LAorCUlOICBQVUNIQVIgICAgICAgICAgcFNyYywKKwlJTiAgVUlOVCAgICAgICAgICAgIExlbik7CisKK1VJTlQgUlRNUF9DQUxDX0ZDUzMyKAorCUlOICBVSU5UICAgRmNzLAorCUlOICBQVUNIQVIgIENwLAorCUlOICBJTlQgICAgIExlbik7CisKKy8vCisvLyBNTE1FIHJvdXRpbmVzCisvLworCisvLyBBc2ljL1JGL0JCUCByZWxhdGVkIGZ1bmN0aW9ucworCitWT0lEIEFzaWNBZGp1c3RUeFBvd2VyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCAJQXNpY1VwZGF0ZVByb3RlY3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIAkJVVNIT1JUCQkJT3BlcmFpb25Nb2RlLAorCUlOIAkJVUNIQVIJCQlTZXRNYXNrLAorCUlOCQlCT09MRUFOCQkJYkRpc2FibGVCR1Byb3RlY3QsCisJSU4JCUJPT0xFQU4JCQliTm9uR0ZFeGlzdCk7CisKK1ZPSUQgQXNpY1N3aXRjaENoYW5uZWwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQlDaGFubmVsLAorCUlOCUJPT0xFQU4JCQliU2Nhbik7CisKK1ZPSUQgQXNpY0xvY2tDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIENoYW5uZWwpIDsKKworVk9JRCBBc2ljQW50ZW5uYVNlbGVjdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIENoYW5uZWwpOworCitWT0lEIEFzaWNBbnRlbm5hU2V0dGluZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglBQkdCQU5EX1NUQVRFCUJhbmRTdGF0ZSk7CisKK1ZPSUQgQXNpY1JmVHVuaW5nRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEIEFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVU0hPUlQgVGJ0dE51bVRvTmV4dFdha2VVcCk7CisKK1ZPSUQgQXNpY0ZvcmNlU2xlZXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNGb3JjZVdha2V1cCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOICAgIGJGcm9tVHgpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitWT0lEIEFzaWNTZXRCc3NpZCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSIHBCc3NpZCk7CisKK1ZPSUQgQXNpY1NldE1jYXN0V0MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNEZWxXY2lkVGFiKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCVdjaWQpOworCitWT0lEIEFzaWNFbmFibGVSREcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNEaXNhYmxlUkRHKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljRGlzYWJsZVN5bmMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFzaWNFbmFibGVCc3NTeW5jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBc2ljRW5hYmxlSWJzc1N5bmMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFzaWNTZXRFZGNhUGFybSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQRURDQV9QQVJNICAgIHBFZGNhUGFybSk7CisKK1ZPSUQgQXNpY1NldFNsb3RUaW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gYlVzZVNob3J0U2xvdFRpbWUpOworCitWT0lEIEFzaWNBZGRTaGFyZWRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgIEJzc0luZGV4LAorCUlOIFVDSEFSICAgICAgICAgS2V5SWR4LAorCUlOIFVDSEFSICAgICAgICAgQ2lwaGVyQWxnLAorCUlOIFBVQ0hBUiAgICAgICAgcEtleSwKKwlJTiBQVUNIQVIgICAgICAgIHBUeE1pYywKKwlJTiBQVUNIQVIgICAgICAgIHBSeE1pYyk7CisKK1ZPSUQgQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSICAgICAgICAgQnNzSW5kZXgsCisJSU4gVUNIQVIgICAgICAgICBLZXlJZHgpOworCitWT0lEIEFzaWNVcGRhdGVXQ0lEQXR0cmlidXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVQ0hBUgkJQnNzSW5kZXgsCisJSU4gVUNIQVIgICAgICAgIENpcGhlckFsZywKKwlJTiBCT09MRUFOCQliVXNlUGFpcmV3aXNlS2V5VGFibGUpOworCitWT0lEIEFzaWNVcGRhdGVXQ0lESVZFSVYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUCQlXQ0lELAorCUlOIFVMT05HICAgICAgICB1SVYsCisJSU4gVUxPTkcgICAgICAgIHVFSVYpOworCitWT0lEIEFzaWNVcGRhdGVSeFdDSURUYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQJCVdDSUQsCisJSU4gUFVDSEFSICAgICAgICBwQWRkcik7CisKK1ZPSUQgQXNpY0FkZEtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVQ0hBUgkJQnNzSW5kZXgsCisJSU4gVUNIQVIJCUtleUlkeCwKKwlJTiBQQ0lQSEVSX0tFWQlwQ2lwaGVyS2V5LAorCUlOIEJPT0xFQU4JCWJVc2VQYWlyZXdpc2VLZXlUYWJsZSwKKwlJTiBCT09MRUFOCQliVHhLZXkpOworCitWT0lEIEFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIsCisJSU4gVUNIQVIJCVdDSUQsCisJSU4gQ0lQSEVSX0tFWQkJICpwQ2lwaGVyS2V5KTsKKworVk9JRCBBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSICBwQWQsCisJSU4gVUNIQVIJCSBCc3NJZHgsCisJSU4gVUNIQVIJCSBXY2lkKTsKKworQk9PTEVBTiBBc2ljU2VuZENvbW1hbmRUb01jdSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgIENvbW1hbmQsCisJSU4gVUNIQVIgICAgICAgICBUb2tlbiwKKwlJTiBVQ0hBUiAgICAgICAgIEFyZzAsCisJSU4gVUNIQVIgICAgICAgICBBcmcxKTsKKworCitWT0lEIE1hY0FkZHJSYW5kb21Cc3NpZCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlPVVQgUFVDSEFSIHBBZGRyKTsKKworVk9JRCBNZ3RNYWNIZWFkZXJJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgICBwQWQsCisJSU4gT1VUIFBIRUFERVJfODAyXzExIHBIZHI4MDIxMSwKKwlJTiBVQ0hBUiBTdWJUeXBlLAorCUlOIFVDSEFSIFRvRHMsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBQVUNIQVIgcEJzc2lkKTsKKworVk9JRCBNbG1lUmFkaW9PZmYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIE1sbWVSYWRpb09uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworCitWT0lEIEJzc1RhYmxlSW5pdCgKKwlJTiBCU1NfVEFCTEUgKlRhYik7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgQkFUYWJsZUluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gQkFfVEFCTEUgKlRhYik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1VMT05HIEJzc1RhYmxlU2VhcmNoKAorCUlOIEJTU19UQUJMRSAqVGFiLAorCUlOIFBVQ0hBUiBwQnNzaWQsCisJSU4gVUNIQVIgQ2hhbm5lbCk7CisKK1VMT05HIEJzc1NzaWRUYWJsZVNlYXJjaCgKKwlJTiBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIgICAgcEJzc2lkLAorCUlOIFBVQ0hBUiAgICBwU3NpZCwKKwlJTiBVQ0hBUiAgICAgU3NpZExlbiwKKwlJTiBVQ0hBUiAgICAgQ2hhbm5lbCk7CisKK1VMT05HIEJzc1RhYmxlU2VhcmNoV2l0aFNTSUQoCisJSU4gQlNTX1RBQkxFICpUYWIsCisJSU4gUFVDSEFSICAgIEJzc2lkLAorCUlOIFBVQ0hBUiAgICBwU3NpZCwKKwlJTiBVQ0hBUiAgICAgU3NpZExlbiwKKwlJTiBVQ0hBUiAgICAgQ2hhbm5lbCk7CisKK1ZPSUQgQnNzVGFibGVEZWxldGVFbnRyeSgKKwlJTiBPVVQgIFBCU1NfVEFCTEUgcFRhYiwKKwlJTiAgICAgIFBVQ0hBUiBwQnNzaWQsCisJSU4gICAgICBVQ0hBUiBDaGFubmVsKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBCQVRhYmxlRGVsZXRlT1JJRW50cnkoCisJSU4gT1VUCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCQlCQV9PUklfRU5UUlkJKnBCQU9SSUVudHJ5KTsKKworVk9JRCBCQVRhYmxlRGVsZXRlUkVDRW50cnkoCisJSU4gT1VUCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCQlCQV9SRUNfRU5UUlkJKnBCQVJFQ0VudHJ5KTsKKworVk9JRCBCQVRhYmxlVGVhck9SSUVudHJ5KAorCUlOIE9VVAlQUlRNUF9BREFQVEVSIHBBZCwKKwlJTgkJVUNIQVIgVElELAorCUlOCQlVQ0hBUiBXY2lkLAorCUlOCQlCT09MRUFOIGJGb3JjZURlbGV0ZSwKKwlJTgkJQk9PTEVBTiBBTEwpOworCitWT0lEIEJBVGFibGVUZWFyUkVDRW50cnkoCisJSU4gT1VUCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCQlVQ0hBUiBUSUQsCisJSU4JCVVDSEFSIFdDSUQsCisJSU4JCUJPT0xFQU4gQUxMKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCAgQnNzRW50cnlTZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIFBCU1NfRU5UUlkgcEJzcywKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4sCisJSU4gVUNIQVIgQnNzVHlwZSwKKwlJTiBVU0hPUlQgQmVhY29uUGVyaW9kLAorCUlOIFBDRl9QQVJNIENmUGFybSwKKwlJTiBVU0hPUlQgQXRpbVdpbiwKKwlJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gVUNIQVIgU3VwUmF0ZVtdLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gVUNIQVIgRXh0UmF0ZVtdLAorCUlOIFVDSEFSIEV4dFJhdGVMZW4sCisJSU4gSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlJTiBBRERfSFRfSU5GT19JRSAqcEFkZEh0SW5mbywJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlBZGRIdEluZm9MZW4sCisJSU4gVUNIQVIJCQlOZXdFeHRDaGFuT2Zmc2V0LAorCUlOIFVDSEFSIENoYW5uZWwsCisJSU4gQ0hBUiBSc3NpLAorCUlOIExBUkdFX0lOVEVHRVIgVGltZVN0YW1wLAorCUlOIFVDSEFSIENraXBGbGFnLAorCUlOIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorCUlOIFBRT1NfQ0FQQUJJTElUWV9QQVJNIHBRb3NDYXBhYmlsaXR5LAorCUlOIFBRQlNTX0xPQURfUEFSTSBwUWJzc0xvYWQsCisJSU4gVVNIT1JUIExlbmd0aFZJRSwKKwlJTiBQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpOworCitVTE9ORyAgQnNzVGFibGVTZXRFbnRyeSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlPVVQgUEJTU19UQUJMRSBwVGFiLAorCUlOIFBVQ0hBUiBwQnNzaWQsCisJSU4gQ0hBUiBTc2lkW10sCisJSU4gVUNIQVIgU3NpZExlbiwKKwlJTiBVQ0hBUiBCc3NUeXBlLAorCUlOIFVTSE9SVCBCZWFjb25QZXJpb2QsCisJSU4gQ0ZfUEFSTSAqQ2ZQYXJtLAorCUlOIFVTSE9SVCBBdGltV2luLAorCUlOIFVTSE9SVCBDYXBhYmlsaXR5SW5mbywKKwlJTiBVQ0hBUiBTdXBSYXRlW10sCisJSU4gVUNIQVIgU3VwUmF0ZUxlbiwKKwlJTiBVQ0hBUiBFeHRSYXRlW10sCisJSU4gVUNIQVIgRXh0UmF0ZUxlbiwKKwlJTiBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCUlOIEFERF9IVF9JTkZPX0lFICpwQWRkSHRJbmZvLAkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlJTiBVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbiwKKwlJTiBVQ0hBUgkJCUFkZEh0SW5mb0xlbiwKKwlJTiBVQ0hBUgkJCU5ld0V4dENoYW5PZmZzZXQsCisJSU4gVUNIQVIgQ2hhbm5lbCwKKwlJTiBDSEFSIFJzc2ksCisJSU4gTEFSR0VfSU5URUdFUiBUaW1lU3RhbXAsCisJSU4gVUNIQVIgQ2tpcEZsYWcsCisJSU4gUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJSU4gUFFPU19DQVBBQklMSVRZX1BBUk0gcFFvc0NhcGFiaWxpdHksCisJSU4gUFFCU1NfTE9BRF9QQVJNIHBRYnNzTG9hZCwKKwlJTiBVU0hPUlQgTGVuZ3RoVklFLAorCUlOIFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgcFZJRSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgQkFUYWJsZUluc2VydEVudHJ5KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVTSE9SVCBBaWQsCisgICAgSU4gVVNIT1JUCQlUaW1lT3V0VmFsdWUsCisJSU4gVVNIT1JUCQlTdGFydGluZ1NlcSwKKyAgICBJTiBVQ0hBUiBUSUQsCisJSU4gVUNIQVIgQkFXaW5TaXplLAorCUlOIFVDSEFSIE9yaWdpbmF0b3JTdGF0dXMsCisgICAgSU4gQk9PTEVBTiBJc1JlY2lwaWVudCk7CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitWT0lEIEJzczIwNDBDb2V4aXN0VGltZU91dCgKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCisKK1ZPSUQgIFRyaUV2ZW50SW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1VMT05HIFRyaUV2ZW50VGFibGVTZXRFbnRyeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgVFJJR0dFUl9FVkVOVF9UQUIgKlRhYiwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlSZWdDbGFzcywKKwlJTiBVQ0hBUiBDaGFubmVsTm8pOworCitWT0lEIFRyaUV2ZW50Q291bnRlck1haW50ZW5hbmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgQnNzVGFibGVTc2lkU29ydCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlPVVQgQlNTX1RBQkxFICpPdXRUYWIsCisJSU4gIENIQVIgU3NpZFtdLAorCUlOICBVQ0hBUiBTc2lkTGVuKTsKKworVk9JRCAgQnNzVGFibGVTb3J0QnlSc3NpKAorCUlOIE9VVCBCU1NfVEFCTEUgKk91dFRhYik7CisKK1ZPSUQgQnNzQ2lwaGVyUGFyc2UoCisJSU4gT1VUICBQQlNTX0VOVFJZICBwQnNzKTsKKworTkRJU19TVEFUVVMgIE1sbWVRdWV1ZUluaXQoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUpOworCitWT0lEICBNbG1lUXVldWVEZXN0cm95KAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKTsKKworQk9PTEVBTiBNbG1lRW5xdWV1ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyBNYWNoaW5lLAorCUlOIFVMT05HIE1zZ1R5cGUsCisJSU4gVUxPTkcgTXNnTGVuLAorCUlOIFZPSUQgKk1zZyk7CisKK0JPT0xFQU4gTWxtZUVucXVldWVGb3JSZWN2KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIFVMT05HIFdjaWQsCisJSU4gVUxPTkcgVGltZVN0YW1wSGlnaCwKKwlJTiBVTE9ORyBUaW1lU3RhbXBMb3csCisJSU4gVUNIQVIgUnNzaTAsCisJSU4gVUNIQVIgUnNzaTEsCisJSU4gVUNIQVIgUnNzaTIsCisJSU4gVUxPTkcgTXNnTGVuLAorCUlOIFBWT0lEIE1zZywKKwlJTiBVQ0hBUiBTaWduYWwpOworCisKK0JPT0xFQU4gTWxtZURlcXVldWUoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUsCisJT1VUIE1MTUVfUVVFVUVfRUxFTSAqKkVsZW0pOworCitWT0lEICAgIE1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworQk9PTEVBTiAgTWxtZVF1ZXVlRW1wdHkoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUpOworCitCT09MRUFOICBNbG1lUXVldWVGdWxsKAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKTsKKworQk9PTEVBTiAgTXNnVHlwZVN1YnN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBGUkFNRV84MDJfMTEgcEZyYW1lLAorCU9VVCBJTlQgKk1hY2hpbmUsCisJT1VUIElOVCAqTXNnVHlwZSk7CisKK1ZPSUQgU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiBTVEFURV9NQUNISU5FICpTbSwKKwlJTiBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSwKKwlJTiBVTE9ORyBTdE5yLAorCUlOIFVMT05HIE1zZ05yLAorCUlOIFNUQVRFX01BQ0hJTkVfRlVOQyBEZWZGdW5jLAorCUlOIFVMT05HIEluaXRTdGF0ZSwKKwlJTiBVTE9ORyBCYXNlKTsKKworVk9JRCBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBVTE9ORyBTdCwKKwlVTE9ORyBNc2csCisJSU4gU1RBVEVfTUFDSElORV9GVU5DIEYpOworCitWT0lEIFN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIERyb3AoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBc3NvY1N0YXRlTWFjaGluZUluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgKlNtLAorCU9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7CisKK1ZPSUQgUmVhc3NvY1RpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBBc3NvY1RpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBEaXNhc3NvY1RpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWT0lEIE1sbWVEaXNhc3NvY1JlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lQXNzb2NSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgTWxtZVJlYXNzb2NSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgTWxtZURpc2Fzc29jUmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJBc3NvY1JzcEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyUmVhc3NvY1JzcEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyRGlzYXNzb2NBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgRGlzYXNzb2NUaW1lb3V0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFzc29jVGltZW91dEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgUmVhc3NvY1RpbWVvdXRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIENsczNlcnJBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiBwQWRkcik7CisKK1ZPSUQgU3dpdGNoQmV0d2VlbldlcEFuZENraXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEICBJbnZhbGlkU3RhdGVXaGVuQXNzb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEludmFsaWRTdGF0ZVdoZW5EaXNhc3NvY2lhdGUoCisJSU4gIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisjaWZkZWYgUlQyODcwCitWT0lEIE1sbWVDbnRsQ29uZmlybSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyBNc2dUeXBlLAorCUlOIFVTSE9SVCBNc2cpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCitWT0lEICBDb21wb3NlUHNQb2xsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCAgQ29tcG9zZU51bGxGcmFtZSgKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEICBBc3NvY1Bvc3RQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgcEFkZHIyLAorCUlOICBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gIFVTSE9SVCBBaWQsCisJSU4gIFVDSEFSIFN1cFJhdGVbXSwKKwlJTiAgVUNIQVIgU3VwUmF0ZUxlbiwKKwlJTiAgVUNIQVIgRXh0UmF0ZVtdLAorCUlOICBVQ0hBUiBFeHRSYXRlTGVuLAorCUlOIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUJCSpwSHRDYXBhYmlsaXR5LAorCUlOICBVQ0hBUiBIdENhcGFiaWxpdHlMZW4sCisJSU4gQUREX0hUX0lORk9fSUUJCSpwQWRkSHRJbmZvKTsKKworVk9JRCBBdXRoU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiBQU1RBVEVfTUFDSElORSBzbSwKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIEF1dGhUaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgTWxtZUF1dGhSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckF1dGhSc3BBdFNlcTJBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckF1dGhSc3BBdFNlcTRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQXV0aFRpbWVvdXRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ2xzMmVyckFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSIHBBZGRyKTsKKworVk9JRCBNbG1lRGVhdXRoUmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEludmFsaWRTdGF0ZVdoZW5BdXRoKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitWT0lEIEF1dGhSc3BTdGF0ZU1hY2hpbmVJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQU1RBVEVfTUFDSElORSBTbSwKKwlJTiAgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIFBlZXJEZWF1dGhBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQXV0aFNpbXBsZVJzcEdlbkFuZFNlbmQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBIRUFERVJfODAyXzExICBwSGRyODAyMTEsCisJSU4gIFVTSE9SVCBBbGcsCisJSU4gIFVTSE9SVCBTZXEsCisJSU4gIFVTSE9SVCBSZWFzb24sCisJSU4gIFVTSE9SVCBTdGF0dXMpOworCisvLworLy8gUHJpdmF0ZSByb3V0aW5lcyBpbiBkbHMuYworLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAordm9pZCBEbHNTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFNUQVRFX01BQ0hJTkUgKlNtLAorICAgIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7CisKK1ZPSUQgTWxtZURsc1JlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJEbHNSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNCSpFbGVtKTsKKworVk9JRCBQZWVyRGxzUnNwQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTQkqRWxlbSk7CisKK1ZPSUQgTWxtZURsc1RlYXJEb3duQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckRsc1RlYXJEb3duQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTQkqRWxlbSk7CisKK1ZPSUQgUlRNUENoZWNrRExTVGltZU91dCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK0JPT0xFQU4gUlRNUFJjdkZyYW1lRExTQ2hlY2soCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUEhFQURFUl84MDJfMTEJcEhlYWRlciwKKwlJTiBVTE9ORwkJCUxlbiwKKwlJTiBQUlQyOFhYX1JYRF9TVFJVQwlwUnhEKTsKKworSU5UCVJUTVBDaGVja0RMU0ZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBKTsKKworVk9JRCBSVE1QU2VuZERMU1RlYXJEb3duRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwREEpOworCitORElTX1NUQVRVUyBSVE1QU2VuZFNUQUtleVJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBKTsKKworTkRJU19TVEFUVVMgUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBKTsKKworVk9JRCBEbHNUaW1lb3V0QWN0aW9uKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK0JPT0xFQU4gTWxtZURsc1JlcVNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQUlRfODAyXzExX0RMUyAqcERMUywKKyAgICBPVVQgUFVTSE9SVCBwUmVhc29uKTsKKworSU5UIFNldF9EbHNFbnRyeUluZm9fRGlzcGxheV9Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBhcmcpOworCitNQUNfVEFCTEVfRU5UUlkgKk1hY1RhYmxlSW5zZXJ0RGxzRW50cnkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUglwQWRkciwKKwlJTiAgVUlOVAlEbHNFbnRyeUlkeCk7CisKK0JPT0xFQU4gTWFjVGFibGVEZWxldGVEbHNFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgd2NpZCwKKwlJTiBQVUNIQVIgcEFkZHIpOworCitNQUNfVEFCTEVfRU5UUlkgKkRsc0VudHJ5VGFibGVMb29rdXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCXBBZGRyLAorCUlOIEJPT0xFQU4JYlJlc2V0SWRlbENvdW50KTsKKworTUFDX1RBQkxFX0VOVFJZICpEbHNFbnRyeVRhYmxlTG9va3VwQnlXY2lkKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCXdjaWQsCisJSU4gUFVDSEFSCXBBZGRyLAorCUlOIEJPT0xFQU4JYlJlc2V0SWRlbENvdW50KTsKKworSU5UCVNldF9EbHNBZGRFbnRyeV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfRGxzVGVhckRvd25FbnRyeV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK0JPT0xFQU4gUGVlckRsc1JlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcERBLAorICAgIE9VVCBQVUNIQVIgcFNBLAorICAgIE9VVCBVU0hPUlQgKnBDYXBhYmlsaXR5SW5mbywKKyAgICBPVVQgVVNIT1JUICpwRGxzVGltZW91dCwKKyAgICBPVVQgVUNIQVIgKnBSYXRlc0xlbiwKKyAgICBPVVQgVUNIQVIgUmF0ZXNbXSwKKyAgICBPVVQgVUNIQVIgKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHkpOworCitCT09MRUFOIFBlZXJEbHNSc3BTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBEQSwKKyAgICBPVVQgUFVDSEFSIHBTQSwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcFN0YXR1cywKKyAgICBPVVQgVUNIQVIgKnBSYXRlc0xlbiwKKyAgICBPVVQgVUNIQVIgUmF0ZXNbXSwKKyAgICBPVVQgVUNIQVIgKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHkpOworCitCT09MRUFOIFBlZXJEbHNUZWFyRG93blNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcERBLAorICAgIE9VVCBQVUNIQVIgcFNBLAorICAgIE9VVCBVU0hPUlQgKnBSZWFzb24pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVk9JRCBTeW5jU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAqU20sCisJT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBCZWFjb25UaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgU2NhblRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBNbG1lU2NhblJlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuU2NhbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuSm9pbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuU3RhcnQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckJlYWNvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBFbnF1ZXVlUHJvYmVSZXF1ZXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBTY2FuUnVubmluZygKKwkJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitWT0lEIE1sbWVDbnRsSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIE1sbWVDbnRsTWFjaGluZVBlcmZvcm1BY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bElkbGVQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxPaWRTY2FuUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bE9pZFNzaWRQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKiBFbGVtKTsKKworVk9JRCBDbnRsT2lkUlRCc3NpZFByb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqIEVsZW0pOworCitWT0lEIENudGxNbG1lUm9hbWluZ1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqIEVsZW0pOworCitWT0lEIENudGxXYWl0RGlzYXNzb2NQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxXYWl0Sm9pblByb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bFdhaXRSZWFzc29jUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsV2FpdFN0YXJ0UHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsV2FpdEF1dGhQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxXYWl0QXV0aFByb2MyKAorCUlOICBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsV2FpdEFzc29jUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorVk9JRCBDbnRsT2lkRExTU2V0dXBQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKK1ZPSUQgTGlua1VwKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiBCc3NUeXBlKTsKKworVk9JRCBMaW5rRG93bigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgQk9PTEVBTiAgICAgICAgIElzUmVxRnJvbUFQKTsKKworVk9JRCBJdGVyYXRlT25Cc3NUYWIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEl0ZXJhdGVPbkJzc1RhYjIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOzsKKworVk9JRCBKb2luUGFybUZpbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE9VVCBNTE1FX0pPSU5fUkVRX1NUUlVDVCAqSm9pblJlcSwKKwlJTiAgVUxPTkcgQnNzSWR4KTsKKworVk9JRCBBc3NvY1Bhcm1GaWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIE9VVCBNTE1FX0FTU09DX1JFUV9TVFJVQ1QgKkFzc29jUmVxLAorCUlOICBQVUNIQVIgcEFkZHIsCisJSU4gIFVTSE9SVCBDYXBhYmlsaXR5SW5mbywKKwlJTiAgVUxPTkcgVGltZW91dCwKKwlJTiAgVVNIT1JUIExpc3RlbkludHYpOworCitWT0lEIFNjYW5QYXJtRmlsbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgT1VUIE1MTUVfU0NBTl9SRVFfU1RSVUNUICpTY2FuUmVxLAorCUlOICBDSEFSIFNzaWRbXSwKKwlJTiAgVUNIQVIgU3NpZExlbiwKKwlJTiAgVUNIQVIgQnNzVHlwZSwKKwlJTiAgVUNIQVIgU2NhblR5cGUpOworCitWT0lEIERpc2Fzc29jUGFybUZpbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE9VVCBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgKkRpc2Fzc29jUmVxLAorCUlOICBQVUNIQVIgcEFkZHIsCisJSU4gIFVTSE9SVCBSZWFzb24pOworCitWT0lEIFN0YXJ0UGFybUZpbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE9VVCBNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgKlN0YXJ0UmVxLAorCUlOICBDSEFSIFNzaWRbXSwKKwlJTiAgVUNIQVIgU3NpZExlbik7CisKK1ZPSUQgQXV0aFBhcm1GaWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBPVVQgTUxNRV9BVVRIX1JFUV9TVFJVQ1QgKkF1dGhSZXEsCisJSU4gIFBVQ0hBUiBwQWRkciwKKwlJTiAgVVNIT1JUIEFsZyk7CisKK1ZPSUQgRW5xdWV1ZVBzUG9sbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgRW5xdWV1ZUJlYWNvbkZyYW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBNbG1lSm9pblJlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lU2NhblJlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lU3RhcnRSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgU2NhblRpbWVvdXRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQmVhY29uVGltZW91dEF0Sm9pbkFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJCZWFjb25BdEpvaW5BY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckJlYWNvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyUHJvYmVSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFNjYW5OZXh0Q2hhbm5lbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1VMT05HIE1ha2VJYnNzQmVhY29uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBDQ1hBZGphY2VudEFQUmVwb3J0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworQk9PTEVBTiBNbG1lU2NhblJlcVNhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJT1VUIFVDSEFSICpCc3NUeXBlLAorCU9VVCBDSEFSIHNzaWRbXSwKKwlPVVQgVUNIQVIgKlNzaWRMZW4sCisJT1VUIFVDSEFSICpTY2FuVHlwZSk7CisKK0JPT0xFQU4gUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlJTiAgVUNIQVIgTXNnQ2hhbm5lbCwKKwlPVVQgUFVDSEFSIHBBZGRyMiwKKwlPVVQgUFVDSEFSIHBCc3NpZCwKKwlPVVQgQ0hBUiBTc2lkW10sCisJT1VUIFVDSEFSICpwU3NpZExlbiwKKwlPVVQgVUNIQVIgKnBCc3NUeXBlLAorCU9VVCBVU0hPUlQgKnBCZWFjb25QZXJpb2QsCisJT1VUIFVDSEFSICpwQ2hhbm5lbCwKKwlPVVQgVUNIQVIgKnBOZXdDaGFubmVsLAorCU9VVCBMQVJHRV9JTlRFR0VSICpwVGltZXN0YW1wLAorCU9VVCBDRl9QQVJNICpwQ2ZQYXJtLAorCU9VVCBVU0hPUlQgKnBBdGltV2luLAorCU9VVCBVU0hPUlQgKnBDYXBhYmlsaXR5SW5mbywKKwlPVVQgVUNIQVIgKnBFcnAsCisJT1VUIFVDSEFSICpwRHRpbUNvdW50LAorCU9VVCBVQ0hBUiAqcER0aW1QZXJpb2QsCisJT1VUIFVDSEFSICpwQmNhc3RGbGFnLAorCU9VVCBVQ0hBUiAqcE1lc3NhZ2VUb01lLAorCU9VVCBVQ0hBUiBTdXBSYXRlW10sCisJT1VUIFVDSEFSICpwU3VwUmF0ZUxlbiwKKwlPVVQgVUNIQVIgRXh0UmF0ZVtdLAorCU9VVCBVQ0hBUiAqcEV4dFJhdGVMZW4sCisJT1VUCVVDSEFSICpwQ2tpcEZsYWcsCisJT1VUCVVDSEFSICpwQWlyb25ldENlbGxQb3dlckxpbWl0LAorCU9VVCBQRURDQV9QQVJNICAgICAgIHBFZGNhUGFybSwKKwlPVVQgUFFCU1NfTE9BRF9QQVJNICBwUWJzc0xvYWQsCisJT1VUIFBRT1NfQ0FQQUJJTElUWV9QQVJNIHBRb3NDYXBhYmlsaXR5LAorCU9VVCBVTE9ORyAqcFJhbGlua0llLAorCU9VVCBVQ0hBUgkJICpwSHRDYXBhYmlsaXR5TGVuLAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCU9VVCBVQ0hBUgkJICpwUHJlTkh0Q2FwYWJpbGl0eUxlbiwKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlPVVQgSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlPVVQgVUNIQVIJCSAqQWRkSHRJbmZvTGVuLAorCU9VVCBBRERfSFRfSU5GT19JRSAqQWRkSHRJbmZvLAorCU9VVCBVQ0hBUiAqTmV3RXh0Q2hhbm5lbCwKKwlPVVQgVVNIT1JUICpMZW5ndGhWSUUsCisJT1VUIFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgcFZJRSk7CisKK0JPT0xFQU4gUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKnBNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyKTsKKworQk9PTEVBTiBQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqcE1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4pOworCitCT09MRUFOIFBlZXJEZWxCQUFjdGlvblNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBVQ0hBUiBXY2lkLAorICAgIElOIFZPSUQgKnBNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuKTsKKworQk9PTEVBTiBNbG1lQXNzb2NSZXFTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFwQWRkciwKKwlPVVQgVVNIT1JUICpDYXBhYmlsaXR5SW5mbywKKwlPVVQgVUxPTkcgKlRpbWVvdXQsCisJT1VUIFVTSE9SVCAqTGlzdGVuSW50dik7CisKK0JPT0xFQU4gTWxtZUF1dGhSZXFTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIsCisJT1VUIFVMT05HICpUaW1lb3V0LAorCU9VVCBVU0hPUlQgKkFsZyk7CisKK0JPT0xFQU4gTWxtZVN0YXJ0UmVxU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlPVVQgQ0hBUiBTc2lkW10sCisJT1VUIFVDSEFSICpTc2lkbGVuKTsKKworQk9PTEVBTiBQZWVyQXV0aFNhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJT1VUIFBVQ0hBUiBwQWRkciwKKwlPVVQgVVNIT1JUICpBbGcsCisJT1VUIFVTSE9SVCAqU2VxLAorCU9VVCBVU0hPUlQgKlN0YXR1cywKKwlPVVQgQ0hBUiBDaGxnVGV4dFtdKTsKKworQk9PTEVBTiBQZWVyQXNzb2NSc3BTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gVk9JRCAqcE1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyLAorCU9VVCBVU0hPUlQgKnBDYXBhYmlsaXR5SW5mbywKKwlPVVQgVVNIT1JUICpwU3RhdHVzLAorCU9VVCBVU0hPUlQgKnBBaWQsCisJT1VUIFVDSEFSIFN1cFJhdGVbXSwKKwlPVVQgVUNIQVIgKnBTdXBSYXRlTGVuLAorCU9VVCBVQ0hBUiBFeHRSYXRlW10sCisJT1VUIFVDSEFSICpwRXh0UmF0ZUxlbiwKKyAgICBPVVQgSFRfQ0FQQUJJTElUWV9JRQkJKnBIdENhcGFiaWxpdHksCisgICAgT1VUIEFERF9IVF9JTkZPX0lFCQkqcEFkZEh0SW5mbywJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisgICAgT1VUIFVDSEFSCQkJKnBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIFVDSEFSCQkJKnBBZGRIdEluZm9MZW4sCisgICAgT1VUIFVDSEFSCQkJKnBOZXdFeHRDaGFubmVsT2Zmc2V0LAorCU9VVCBQRURDQV9QQVJNIHBFZGNhUGFybSwKKwlPVVQgVUNIQVIgKnBDa2lwRmxhZyk7CisKK0JPT0xFQU4gUGVlckRpc2Fzc29jU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVDSEFSIHBBZGRyMiwKKwlPVVQgVVNIT1JUICpSZWFzb24pOworCitCT09MRUFOIFBlZXJXcGFNZXNzYWdlU2FuaXR5KAorICAgIElOIAlQUlRNUF9BREFQVEVSIAkJcEFkLAorICAgIElOIAlQRUFQT0xfUEFDS0VUIAkJcE1zZywKKyAgICBJTiAJVUxPTkcgCQkJCU1zZ0xlbiwKKyAgICBJTiAJVUNIQVIJCQkJTXNnVHlwZSwKKyAgICBJTiAJTUFDX1RBQkxFX0VOVFJZICAJKnBFbnRyeSk7CisKK0JPT0xFQU4gUGVlckRlYXV0aFNhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJT1VUIFBVQ0hBUiBwQWRkcjIsCisJT1VUIFVTSE9SVCAqUmVhc29uKTsKKworQk9PTEVBTiBQZWVyUHJvYmVSZXFTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyLAorCU9VVCBDSEFSIFNzaWRbXSwKKwlPVVQgVUNIQVIgKnBTc2lkTGVuKTsKKworQk9PTEVBTiBHZXRUaW1CaXQoCisJSU4gIENIQVIgKlB0ciwKKwlJTiAgVVNIT1JUIEFpZCwKKwlPVVQgVUNIQVIgKlRpbUxlbiwKKwlPVVQgVUNIQVIgKkJjYXN0RmxhZywKKwlPVVQgVUNIQVIgKkR0aW1Db3VudCwKKwlPVVQgVUNIQVIgKkR0aW1QZXJpb2QsCisJT1VUIFVDSEFSICpNZXNzYWdlVG9NZSk7CisKK1VDSEFSIENoYW5uZWxTYW5pdHkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgY2hhbm5lbCk7CisKK05ESVNfODAyXzExX05FVFdPUktfVFlQRSBOZXR3b3JrVHlwZUluVXNlU2FuaXR5KAorCUlOIFBCU1NfRU5UUlkgcEJzcyk7CisKK0JPT0xFQU4gTWxtZURlbEJBUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4pOworCitCT09MRUFOIE1sbWVBZGRCQVJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyKTsKKworVUxPTkcgTWFrZU91dGdvaW5nRnJhbWUoCisJT1VUIENIQVIgKkJ1ZmZlciwKKwlPVVQgVUxPTkcgKkxlbmd0aCwgLi4uKTsKKworVk9JRCAgTGZzckluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVMT05HIFNlZWQpOworCitVQ0hBUiBSYW5kb21CeXRlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBc2ljVXBkYXRlQXV0b0ZhbGxCYWNrVGFibGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcFR4UmF0ZSk7CisKK1ZPSUQgIE1sbWVQZXJpb2RpY0V4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBMaW5rRG93bkV4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBMaW5rVXBFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgU1RBTWxtZVBlcmlvZGljRXhlYygKKwlQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgTWxtZUF1dG9TY2FuKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBNbG1lVmFsaWRhdGVTU0lEKAorCUlOIFBVQ0hBUiBwU3NpZCwKKwlJTiBVQ0hBUiAgU3NpZExlbik7CisKK1ZPSUQgTWxtZUNoZWNrRm9yUm9hbWluZygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyAgICBOb3czMik7CisKK1ZPSUQgTWxtZUNoZWNrRm9yRmFzdFJvYW1pbmcoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVMT05HICAgICAgICAgICBOb3cpOworCitWT0lEIE1sbWVEeW5hbWljVHhSYXRlU3dpdGNoaW5nKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBNbG1lU2V0VHhSYXRlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFJUTVBfVFhfUkFURV9TV0lUQ0gJcFR4UmF0ZSk7CisKK1ZPSUQgTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFVDSEFSCQkJCSpwcFRhYmxlLAorCUlOIFBVQ0hBUgkJCQlwVGFibGVTaXplLAorCUlOIFBVQ0hBUgkJCQlwSW5pdFR4UmF0ZUlkeCk7CisKK1ZPSUQgTWxtZUNhbGN1bGF0ZUNoYW5uZWxRdWFsaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HIE5vdyk7CisKK1ZPSUQgTWxtZUNoZWNrUHNtQ2hhbmdlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HICAgIE5vdzMyKTsKKworVk9JRCBNbG1lU2V0UHNtQml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVCBwc20pOworCitWT0lEIE1sbWVTZXRUeFByZWFtYmxlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVCBUeFByZWFtYmxlKTsKKworVk9JRCBVcGRhdGVCYXNpY1JhdGVCaXRtYXAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIE1sbWVVcGRhdGVUeFJhdGVzKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTiAJQk9PTEVBTgkJIAliTGlua1VwLAorCUlOCVVDSEFSCQkJYXBpZHgpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIE1sbWVVcGRhdGVIdFR4UmF0ZXMoCisJSU4gUFJUTVBfQURBUFRFUiAJCXBBZCwKKwlJTglVQ0hBUgkJCQlhcGlkeCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgICAgUlRNUENoZWNrUmF0ZXMoCisJSU4gICAgICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIE9VVCAgVUNIQVIgICAgICAgICAgIFN1cFJhdGVbXSwKKwlJTiBPVVQgIFVDSEFSICAgICAgICAgICAqU3VwUmF0ZUxlbik7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0JPT0xFQU4gUlRNUENoZWNrQ2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUgkJQ2VudHJhbENoYW5uZWwsCisJSU4gVUNIQVIJCUNoYW5uZWwpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitCT09MRUFOIAlSVE1QQ2hlY2tIdCgKKwlJTgkJUFJUTVBfQURBUFRFUglwQWQsCisJSU4JCVVDSEFSCVdjaWQsCisJSU4gT1VUCUhUX0NBUEFCSUxJVFlfSUUJCQkqcEh0Q2FwYWJpbGl0eSwKKwlJTiBPVVQJQUREX0hUX0lORk9fSUUJCQkqcEFkZEh0SW5mbyk7CisKK1ZPSUQgU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIEFzaWNCYnBUdW5pbmcxKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljQmJwVHVuaW5nMigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgUlRNUFVwZGF0ZU1sbWVSYXRlKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworQ0hBUiBSVE1QTWF4UnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBDSEFSCQkJCVJzc2kwLAorCUlOIENIQVIJCQkJUnNzaTEsCisJSU4gQ0hBUgkJCQlSc3NpMik7CisKK1ZPSUQgQXNpY1NldFJ4QW50KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVDSEFSCQkJQW50KTsKKworVk9JRCBBc2ljRXZhbHVhdGVSeEFudCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgQXNpY1J4QW50RXZhbFRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBBUFNEUGVyaW9kaWNFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK0JPT0xFQU4gUlRNUENoZWNrRW50cnlFbmFibGVBdXRvUmF0ZVN3aXRjaCgKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSk7CisKK1VDSEFSIFJUTVBTdGFGaXhlZFR4TW9kZSgKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSk7CisKK1ZPSUQgUlRNUFVwZGF0ZUxlZ2FjeVR4U2V0dGluZygKKwkJVUNIQVIJCQkJZml4ZWRfdHhfbW9kZSwKKwkJUE1BQ19UQUJMRV9FTlRSWQlwRW50cnkpOworCitCT09MRUFOIFJUTVBBdXRvUmF0ZVN3aXRjaENoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkKTsKKworTkRJU19TVEFUVVMgTWxtZUluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIE1sbWVIYW5kbGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBNbG1lSGFsdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTWxtZVJlc2V0UmFsaW5rQ291bnRlcnMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEJ1aWxkQ2hhbm5lbExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitVQ0hBUiBGaXJzdENoYW5uZWwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitVQ0hBUiBOZXh0Q2hhbm5lbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgY2hhbm5lbCk7CisKK1ZPSUQgQ2hhbmdlVG9DZWxsUG93ZXJMaW1pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgIEFpcm9uZXRDZWxsUG93ZXJMaW1pdCk7CisKK1ZPSUQgUmFpc2VDbG9jaygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUlOVDMyICp4KTsKKworVk9JRCBMb3dlckNsb2NrKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVSU5UMzIgKngpOworCitVU0hPUlQgU2hpZnRJbkJpdHMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIFNoaWZ0T3V0Qml0cygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVVNIT1JUIGRhdGEsCisJSU4gIFVTSE9SVCBjb3VudCk7CisKK1ZPSUQgRUVwcm9tQ2xlYW51cCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgRVdEUygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgRVdFTigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1VTSE9SVCBSVE1QX0VFUFJPTV9SRUFEMTYoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVTSE9SVCBPZmZzZXQpOworCitWT0lEIFJUTVBfRUVQUk9NX1dSSVRFMTYoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVTSE9SVCBPZmZzZXQsCisJSU4gIFVTSE9SVCBEYXRhKTsKKworLy8KKy8vIFByb3RvdHlwZXMgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBydG1wX3RraXAuYworLy8KK1ZPSUQgICAgUlRNUEluaXRUa2lwRW5naW5lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcFRLZXksCisJSU4gIFVDSEFSICAgICAgICAgICBLZXlJZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBUQSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBNSUNLZXksCisJSU4gIFBVQ0hBUiAgICAgICAgICBwVFNDLAorCU9VVCBQVUxPTkcgICAgICAgICAgcElWMTYsCisJT1VUIFBVTE9ORyAgICAgICAgICBwSVYzMik7CisKK1ZPSUQgICAgUlRNUEluaXRNSUNFbmdpbmUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5LAorCUlOICBQVUNIQVIgICAgICAgICAgcERBLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNBLAorCUlOICBVQ0hBUiAgICAgICAgICAgVXNlclByaW9yaXR5LAorCUlOICBQVUNIQVIgICAgICAgICAgcE1JQ0tleSk7CisKK0JPT0xFQU4gUlRNUFRraXBDb21wYXJlTUlDVmFsdWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwU3JjLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNBLAorCUlOICBQVUNIQVIgICAgICAgICAgcE1JQ0tleSwKKwlJTglVQ0hBUgkJCVVzZXJQcmlvcml0eSwKKwlJTiAgVUlOVCAgICAgICAgICAgIExlbik7CisKK1ZPSUQgICAgUlRNUENhbGN1bGF0ZU1JQ1ZhbHVlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBFbmNhcCwKKwlJTiAgUENJUEhFUl9LRVkgICAgIHBLZXksCisJSU4JVUNIQVIJCQlhcGlkeCk7CisKK0JPT0xFQU4gUlRNUFRraXBDb21wYXJlTUlDVmFsdWVXaXRoTExDKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcExMQywKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTcmMsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwREEsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwU0EsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwTUlDS2V5LAorCUlOICBVSU5UICAgICAgICAgICAgTGVuKTsKKworVk9JRCAgICBSVE1QVGtpcEFwcGVuZEJ5dGUoCisJSU4gIFBUS0lQX0tFWV9JTkZPICBwVGtpcCwKKwlJTiAgVUNIQVIgICAgICAgICAgIHVDaGFyKTsKKworVk9JRCAgICBSVE1QVGtpcEFwcGVuZCgKKwlJTiAgUFRLSVBfS0VZX0lORk8gIHBUa2lwLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNyYywKKwlJTiAgVUlOVCAgICAgICAgICAgIG5CeXRlcyk7CisKK1ZPSUQgICAgUlRNUFRraXBHZXRNSUMoCisJSU4gIFBUS0lQX0tFWV9JTkZPICBwVGtpcCk7CisKK0JPT0xFQU4gUlRNUFNvZnREZWNyeXB0VEtJUCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIJcERhdGEsCisJSU4gVUxPTkcJRGF0YUJ5dGVDbnQsCisJSU4gVUNIQVIgICAgVXNlclByaW9yaXR5LAorCUlOIFBDSVBIRVJfS0VZCXBXcGFLZXkpOworCitCT09MRUFOIFJUTVBTb2Z0RGVjcnlwdEFFUygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIJcERhdGEsCisJSU4gVUxPTkcJRGF0YUJ5dGVDbnQsCisJSU4gUENJUEhFUl9LRVkJcFdwYUtleSk7CisKKy8vCisvLyBQcm90b3R5cGVzIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gY21tX2luZm8uYworLy8KK05ESVNfU1RBVFVTIFJUTVBXUEFSZW1vdmVLZXlQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVk9JRCAgICAgICAgICAgcEJ1Zik7CisKK1ZPSUQgICAgUlRNUFdQQVJlbW92ZUFsbEtleXMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitCT09MRUFOIFJUTVBDaGVja1N0clByaW50QWJsZSgKKyAgICBJTiAgQ0hBUiAqcEluUHV0U3RyLAorICAgIElOICBVQ0hBUiBzdHJMZW4pOworCitWT0lEICAgIFJUTVBTZXRQaHlNb2RlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVTE9ORyBwaHltb2RlKTsKKworVk9JRAlSVE1QVXBkYXRlSFRJRSgKKwlJTglSVF9IVF9DQVBBQklMSVRZCSpwUnRIdCwKKwlJTgkJVUNIQVIJCQkJKnBNY3NTZXQsCisJT1VUCQlIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCU9VVAkJQUREX0hUX0lORk9fSUUJCSpwQWRkSHRJbmZvKTsKKworVk9JRAlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQnNzSWR4LAorCUlOIAlVQ0hBUgkJIAlLZXlJZHgsCisJSU4gCVVDSEFSCQkgCUNpcGhlckFsZywKKwlJTiAJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkpOworCitDSEFSICpHZXRFbmNyeXB0VHlwZSgKKwlDSEFSIGVuYyk7CisKK0NIQVIgKkdldEF1dGhNb2RlKAorCUNIQVIgYXV0aCk7CisKK1ZPSUQgUlRNUElvY3RsR2V0U2l0ZVN1cnZleSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworVk9JRCBSVE1QSW9jdGxHZXRNYWNUYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBzdHJ1Y3QgaXdyZXEgKndycSk7CisKK1ZPSUQgUlRNUEluZGljYXRlV1BBMlN0YXR1cygKKwlJTiAgUFJUTVBfQURBUFRFUiAgcEFkYXB0ZXIpOworCitWT0lECVJUTVBPUE1vZGVTd2l0Y2hpbmcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEICAgIFJUTVBBZGRCU1NJRENpcGhlcigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglVQ0hBUglBaWQsCisgICAgSU4gIFBORElTXzgwMl8xMV9LRVkgICAgcEtleSwKKyAgICBJTiAgVUNIQVIgICBDaXBoZXJBbGcpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lECVJUTVBTZXRIVCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglPSURfU0VUX0hUX1BIWU1PREUgKnBIVFBoeU1vZGUpOworCitWT0lECVJUTVBTZXRJbmRpdmlkdWFsSFQoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVVDSEFSCQkJCWFwaWR4KTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBSVE1QU2VuZFdpcmVsZXNzRXZlbnQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJRXZlbnRfZmxhZywKKwlJTglQVUNIQVIgCQkJcEFkZHIsCisJSU4gIFVDSEFSCQkJQnNzSWR4LAorCUlOCUNIQVIJCQlSc3NpKTsKKworVk9JRAlOSUNVcGRhdGVDbnRsQ291bnRlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUEhFQURFUl84MDJfMTEJcEhlYWRlciwKKwlJTiAgICBVQ0hBUgkJCVN1YlR5cGUsCisJSU4JUFJYV0lfU1RSVUMgCXBSeFdJKTsKKy8vCisvLyBwcm90b3R5cGUgaW4gd3BhLmMKKy8vCitCT09MRUFOIFdwYU1zZ1R5cGVTdWJzdCgKKwlJTiAgVUNIQVIgICBFQVBUeXBlLAorCU9VVCBJTlQJCSpNc2dUeXBlKTsKKworVk9JRCBXcGFQc2tTdGF0ZU1hY2hpbmVJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAgICAgICAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIFdwYUVBUE9MS2V5QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYVBhaXJNc2cxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYVBhaXJNc2czQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYUdyb3VwTXNnMUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBXcGFNYWNIZWFkZXJJbml0KAorCUlOICAgICAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiBPVVQgIFBIRUFERVJfODAyXzExICBwSGRyODAyMTEsCisJSU4gICAgICBVQ0hBUiAgICAgICAgICAgd2VwLAorCUlOICAgICAgUFVDSEFSICAgICAgICAgIHBBZGRyMSk7CisKK1ZPSUQgICAgV3BhMlBhaXJNc2cxQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIFdwYTJQYWlyTXNnM0FjdGlvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworQk9PTEVBTiBQYXJzZUtleURhdGEoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5RGF0YSwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgIEtleURhdGFMZW4sCisJSU4JVUNIQVIJCQliUGFpcmV3aXNlKTsKKworVk9JRCAgICBSVE1QVG9XaXJlbGVzc1N0YSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBIZWFkZXI4MDJfMywKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEYXRhLAorICAgIElOICBVSU5UICAgICAgICAgICAgRGF0YUxlbiwKKyAgICBJTglCT09MRUFOCQkJaXM0d2F5RnJhbWUpOworCitWT0lEICAgIEhNQUNfU0hBMSgKKwlJTiAgVUNIQVIgICAqdGV4dCwKKwlJTiAgVUlOVCAgICB0ZXh0X2xlbiwKKwlJTiAgVUNIQVIgICAqa2V5LAorCUlOICBVSU5UICAgIGtleV9sZW4sCisJSU4gIFVDSEFSICAgKmRpZ2VzdCk7CisKK1ZPSUQgICAgUFJGKAorCUlOICBVQ0hBUiAgICprZXksCisJSU4gIElOVCAgICAga2V5X2xlbiwKKwlJTiAgVUNIQVIgICAqcHJlZml4LAorCUlOICBJTlQgICAgIHByZWZpeF9sZW4sCisJSU4gIFVDSEFSICAgKmRhdGEsCisJSU4gIElOVCAgICAgZGF0YV9sZW4sCisJT1VUIFVDSEFSICAgKm91dHB1dCwKKwlJTiAgSU5UICAgICBsZW4pOworCitWT0lEICAgIENDS01QUkYoCisJSU4gIFVDSEFSICAgKmtleSwKKwlJTiAgSU5UICAgICBrZXlfbGVuLAorCUlOICBVQ0hBUiAgICpkYXRhLAorCUlOICBJTlQgICAgIGRhdGFfbGVuLAorCU9VVCBVQ0hBUiAgICpvdXRwdXQsCisJSU4gIElOVCAgICAgbGVuKTsKKworVk9JRCBXcGFDb3VudFBUSygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAqUE1LLAorCUlOICBVQ0hBUiAgICpBTm9uY2UsCisJSU4gIFVDSEFSICAgKkFBLAorCUlOICBVQ0hBUiAgICpTTm9uY2UsCisJSU4gIFVDSEFSICAgKlNBLAorCU9VVCBVQ0hBUiAgICpvdXRwdXQsCisJSU4gIFVJTlQgICAgbGVuKTsKKworVk9JRCAgICBHZW5SYW5kb20oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQkqbWFjQWRkciwKKwlPVVQJVUNIQVIJCQkqcmFuZG9tKTsKKworLy8KKy8vIHByb3RvdHlwZSBpbiBhaXJvbmV0LmMKKy8vCitWT0lEICAgIEFpcm9uZXRTdGF0ZU1hY2hpbmVJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAgICAgICAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DICBUcmFuc1tdKTsKKworVk9JRCAgICBBaXJvbmV0TXNnQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIEFpcm9uZXRSZXF1ZXN0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICAgIENoYW5uZWxMb2FkUmVxdWVzdEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIEluZGV4KTsKKworVk9JRCAgICBOb2lzZUhpc3RSZXF1ZXN0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiAgICAgICAgICAgSW5kZXgpOworCitWT0lEICAgIEJlYWNvblJlcXVlc3RBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBJbmRleCk7CisKK1ZPSUQgICAgQWlyb25ldFJlcG9ydEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBDaGFubmVsTG9hZFJlcG9ydEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIEluZGV4KTsKKworVk9JRCAgICBOb2lzZUhpc3RSZXBvcnRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBJbmRleCk7CisKK1ZPSUQgICAgQWlyb25ldEZpbmFsUmVwb3J0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCAgICBCZWFjb25SZXBvcnRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBJbmRleCk7CisKK1ZPSUQgICAgQWlyb25ldEFkZEJlYWNvblJlcG9ydCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisJSU4gIFVMT05HICAgICAgICAgICAgICAgSW5kZXgsCisJSU4gIFBNTE1FX1FVRVVFX0VMRU0gICAgcEVsZW0pOworCitWT0lEICAgIEFpcm9uZXRDcmVhdGVCZWFjb25SZXBvcnRGcm9tQnNzVGFibGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICAgICAgcEFkKTsKKworVk9JRCAgICBEQkdQUklOVF9UWF9SSU5HKAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgICBRdWVJZHgpOworCitWT0lEIERCR1BSSU5UX1JYX1JJTkcoCisJSU4gUFJUTVBfQURBUFRFUiAgcEFkKTsKKworQ0hBUiAgICBDb252ZXJ0VG9Sc3NpKAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCwKKwlJTiBDSEFSCQkJCVJzc2ksCisJSU4gVUNIQVIgICAgUnNzaU51bWJlcik7CisKKworI2lmZGVmIERPVDExTl9EUkFGVDMKK1ZPSUQgQnVpbGRFZmZlY3RlZENoYW5uZWxMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKworVk9JRCBBUEFzaWNFdmFsdWF0ZVJ4QW50KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworCitWT0lEIEFQQXNpY1J4QW50RXZhbFRpbWVvdXQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCisvLworLy8gZnVuY3Rpb24gcHJvdG90eXBlIGluIGNtbV93cGEuYworLy8KK0JPT0xFQU4gUlRNUENoZWNrV1BBZnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQlwRW50cnksCisJSU4gUFVDSEFSIAkJCXBEYXRhLAorCUlOIFVMT05HIAkJCURhdGFCeXRlQ291bnQsCisJSU4gVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK1ZPSUQgQUVTX0dUS19LRVlfVU5XUkFQKAorCUlOICBVQ0hBUiAgICprZXksCisJT1VUIFVDSEFSICAgKnBsYWludGV4dCwKKwlJTglVQ0hBUgljX2xlbiwKKwlJTiAgVUNIQVIgICAqY2lwaGVydGV4dCk7CisKK0JPT0xFQU4gUlRNUENoZWNrUlNOSUUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIERhdGFMZW4sCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LAorCU9VVAlVQ0hBUgkJCSpPZmZzZXQpOworCitCT09MRUFOIFJUTVBQYXJzZUVhcG9sS2V5RGF0YSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBLZXlEYXRhLAorCUlOICBVQ0hBUiAgICAgICAgICAgS2V5RGF0YUxlbiwKKwlJTglVQ0hBUgkJCUdyb3VwS2V5SW5kZXgsCisJSU4JVUNIQVIJCQlNc2dUeXBlLAorCUlOCUJPT0xFQU4JCQliV1BBMiwKKwlJTiAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnkpOworCitWT0lECUNvbnN0cnVjdEVhcG9sTXNnKAorCUlOIAlQUlRNUF9BREFQVEVSICAgIAlwQWQsCisgICAgSU4gCVVDSEFSCQkJCVBlZXJBdXRoTW9kZSwKKyAgICBJTiAJVUNIQVIJCQkJUGVlcldlcFN0YXR1cywKKyAgICBJTiAJVUNIQVIJCQkJTXlHcm91cEtleVdlcFN0YXR1cywKKyAgICBJTiAJVUNIQVIJCQkJTXNnVHlwZSwKKyAgICBJTglVQ0hBUgkJCQlEZWZhdWx0S2V5SWR4LAorICAgIElOIAlVQ0hBUgkJCQkqUmVwbGF5Q291bnRlciwKKwlJTiAJVUNIQVIJCQkJKktleU5vbmNlLAorCUlOCVVDSEFSCQkJCSpUeFJTQywKKwlJTglVQ0hBUgkJCQkqUFRLLAorCUlOCVVDSEFSCQkJCSpHVEssCisJSU4JVUNIQVIJCQkJKlJTTklFLAorCUlOCVVDSEFSCQkJCVJTTklFX0xlbiwKKyAgICBPVVQgUEVBUE9MX1BBQ0tFVCAgICAgICBwTXNnKTsKKworVk9JRAlDYWxjdWxhdGVNSUMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlQZWVyV2VwU3RhdHVzLAorCUlOCVVDSEFSCQkJKlBUSywKKwlPVVQgUEVBUE9MX1BBQ0tFVCAgIHBNc2cpOworCitORElTX1NUQVRVUwlSVE1QU29mdERlY3J5cHRCcm9hZENhc3REYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJCQkJCXBBZCwKKwlJTglSWF9CTEsJCQkJCQkJKnBSeEJsaywKKwlJTiAgTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgCUdyb3VwQ2lwaGVyLAorCUlOICBQQ0lQSEVSX0tFWQkJCQkJCXBTaGFyZF9rZXkpOworCitWT0lECUNvbnN0cnVjdEVhcG9sS2V5RGF0YSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVBlZXJBdXRoTW9kZSwKKwlJTglVQ0hBUgkJCVBlZXJXZXBTdGF0dXMsCisJSU4JVUNIQVIJCQlHcm91cEtleVdlcFN0YXR1cywKKwlJTiAJVUNIQVIJCQlNc2dUeXBlLAorCUlOCVVDSEFSCQkJRGVmYXVsdEtleUlkeCwKKwlJTglCT09MRUFOCQkJYldQQTJDYXBhYmxlLAorCUlOCVVDSEFSCQkJKlBUSywKKwlJTglVQ0hBUgkJCSpHVEssCisJSU4JVUNIQVIJCQkqUlNOSUUsCisJSU4JVUNIQVIJCQlSU05JRV9MRU4sCisJT1VUIFBFQVBPTF9QQUNLRVQgICBwTXNnKTsKKworVk9JRCBSVE1QTWFrZVJTTklFKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVSU5UICAgICAgICAgICAgQXV0aE1vZGUsCisJSU4gIFVJTlQgICAgICAgICAgICBXZXBTdGF0dXMsCisJSU4JVUNIQVIJCQlhcGlkeCk7CisKKy8vCisvLyBmdW5jdGlvbiBwcm90b3R5cGUgaW4gYXBfd3BhLmMKKy8vCisKK0JPT0xFQU4gQVBXcGFNc2dUeXBlU3Vic3QoCisJSU4gVUNIQVIgICAgRUFQVHlwZSwKKwlPVVQgSU5UICpNc2dUeXBlKSA7CisKK01BQ19UQUJMRV9FTlRSWSAqUEFDSW5xdWlyeSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUxPTkcgICAgICAgICAgIFdjaWQpOworCitCT09MRUFOIFJUTVBDaGVja01jYXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBFSURfU1RSVUNUICAgICAgZWlkX3B0ciwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnkpOworCitCT09MRUFOIFJUTVBDaGVja1VjYXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBFSURfU1RSVUNUICAgICAgZWlkX3B0ciwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnkpOworCitCT09MRUFOIFJUTVBDaGVja0FVVEgoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUEVJRF9TVFJVQ1QgICAgICBlaWRfcHRyLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSk7CisKK1ZPSUQgV1BBU3RhcnQ0V2F5SFMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LAorCUlOCVVMT05HCQkJVGltZUludGVydmFsKTsKKworVk9JRCBXUEFTdGFydDJXYXlHcm91cEhTKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSk7CisKK1ZPSUQgQVBXcGFFQVBQYWNrZXRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFdwYUVBUE9MU3RhcnRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFdwYUVBUE9MTG9nb2ZmQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBXcGFFQVBPTEtleUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQV3BhRUFQT0xBU0ZBbGVydEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIEhhbmRsZUNvdW50ZXJNZWFzdXJlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSk7CisKK1ZPSUQgUGVlclBhaXJNc2cyQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJQYWlyTXNnNEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnksCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDTVRpbWVyRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIFdQQVJldHJ5RXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIEVucXVldWVTdGFydEZvclBTS0V4ZWMoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBSVE1QSGFuZGxlU1RBS2V5KAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkYXB0ZXIsCisgICAgSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5LAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIFBlZXJHcm91cE1zZzJBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOICBQTUFDX1RBQkxFX0VOVFJZIHBFbnRyeSwKKwlJTiAgVk9JRCAgICAgICAgICAgICAqTXNnLAorCUlOICBVSU5UICAgICAgICAgICAgIE1zZ0xlbik7CisKK1ZPSUQgUGFpckRpc0Fzc29jQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiAgUE1BQ19UQUJMRV9FTlRSWSBwRW50cnksCisJSU4gIFVTSE9SVCAgICAgICAgICAgUmVhc29uKTsKKworVk9JRCBNbG1lRGVBdXRoQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiAgUE1BQ19UQUJMRV9FTlRSWSBwRW50cnksCisJSU4gIFVTSE9SVCAgICAgICAgICAgUmVhc29uKTsKKworVk9JRCBHUkVLRVlQZXJpb2RpY0V4ZWMoCisJSU4gIFBWT0lEICAgU3lzdGVtU3BlY2lmaWMxLAorCUlOICBQVk9JRCAgIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiAgUFZPSUQgICBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gIFBWT0lEICAgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBDb3VudEdUSygKKwlJTiAgVUNIQVIgICAqUE1LLAorCUlOICBVQ0hBUiAgICpHTm9uY2UsCisJSU4gIFVDSEFSICAgKkFBLAorCU9VVCBVQ0hBUiAgICpvdXRwdXQsCisJSU4gIFVJTlQgICAgbGVuKTsKKworVk9JRCAgICBHZXRTbWFsbCgKKwlJTiAgUFZPSUQgICBwU3JjMSwKKwlJTiAgUFZPSUQgICBwU3JjMiwKKwlPVVQgUFVDSEFSICBvdXQsCisJSU4gIFVMT05HICAgTGVuZ3RoKTsKKworVk9JRCAgICBHZXRMYXJnZSgKKwlJTiAgUFZPSUQgICBwU3JjMSwKKwlJTiAgUFZPSUQgICBwU3JjMiwKKwlPVVQgUFVDSEFSICBvdXQsCisJSU4gIFVMT05HICAgTGVuZ3RoKTsKKworVk9JRCBBUEdlblJhbmRvbSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgVUNIQVIgICAgICAgKnJhbmRvbSk7CisKK1ZPSUQgQUVTX0dUS19LRVlfV1JBUCgKKwlJTiBVQ0hBUiAqa2V5LAorCUlOIFVDSEFSICpwbGFpbnRleHQsCisJSU4gVUNIQVIgcF9sZW4sCisJT1VUIFVDSEFSICpjaXBoZXJ0ZXh0KTsKKworVk9JRCAgICBXcGFTZW5kKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwUGFja2V0LAorICAgIElOICBVTE9ORyAgICAgICAgICAgTGVuKTsKKworVk9JRCAgICBBUFRvV2lyZWxlc3NTdGEoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LAorCUlOICBQVUNIQVIgICAgICAgICAgcEhlYWRlcjgwMl8zLAorCUlOICBVSU5UICAgICAgICAgICAgSGRyTGVuLAorCUlOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJSU4gIFVJTlQgICAgICAgICAgICBEYXRhTGVuLAorICAgIElOCUJPT0xFQU4JCQliQ2xlYXJGcmFtZSk7CisKK1ZPSUQgUlRNUEFkZFBNS0lEQ2FjaGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICAJCXBBZCwKKwlJTglJTlQJCQkJCQlhcGlkeCwKKwlJTglQVUNIQVIJCQkJcEFkZHIsCisJSU4JVUNIQVIJCQkJCSpQTUtJRCwKKwlJTglVQ0hBUgkJCQkJKlBNSyk7CisKK0lOVCBSVE1QU2VhcmNoUE1LSURDYWNoZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglJTlQJCQkJYXBpZHgsCisJSU4JUFVDSEFSCQlwQWRkcik7CisKK1ZPSUQgUlRNUERlbGV0ZVBNS0lEQ2FjaGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JSU5UCQkJCWFwaWR4LAorCUlOICBJTlQJCQkJaWR4KTsKKworVk9JRCBSVE1QTWFpbnRhaW5QTUtJRENhY2hlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRAlSVE1QU2VuZFRyaWdnZXJGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVk9JRAkJCXBCdWZmZXIsCisJSU4JVUxPTkcJCQlMZW5ndGgsCisJSU4gIFVDSEFSICAgICAgICAgICBUeFJhdGUsCisJSU4JQk9PTEVBTgkJCWJRb3NOdWxsKTsKKworI2lmZGVmIFJUMzB4eAorVk9JRCBSVE1QRmlsdGVyQ2FsaWJyYXRpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIFJUMzB4eCAvLworCisKKy8vdHlwZWRlZiB2b2lkICgqVElNRVJfRlVOQ1RJT04pKHVuc2lnbmVkIGxvbmcpOworCisKKy8qIHRpbWVvdXQgLS0gbXMgKi8KK1ZPSUQgUlRNUF9TZXRQZXJpb2RpY1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIgKnBUaW1lciwKKwlJTgl1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworCitWT0lEIFJUTVBfT1NfSW5pdF9UaW1lcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglORElTX01JTklQT1JUX1RJTUVSICpwVGltZXIsCisJSU4JVElNRVJfRlVOQ1RJT04gZnVuY3Rpb24sCisJSU4JUFZPSUQgZGF0YSk7CisKK1ZPSUQgUlRNUF9PU19BZGRfVGltZXIoCisJSU4JTkRJU19NSU5JUE9SVF9USU1FUgkqcFRpbWVyLAorCUlOCXVuc2lnbmVkIGxvbmcgdGltZW91dCk7CisKK1ZPSUQgUlRNUF9PU19Nb2RfVGltZXIoCisJSU4JTkRJU19NSU5JUE9SVF9USU1FUgkqcFRpbWVyLAorCUlOCXVuc2lnbmVkIGxvbmcgdGltZW91dCk7CisKKworVk9JRCBSVE1QX09TX0RlbF9UaW1lcigKKwlJTglORElTX01JTklQT1JUX1RJTUVSCSpwVGltZXIsCisJT1VUCUJPT0xFQU4JCQkJICpwQ2FuY2VsbGVkKTsKKworCitWT0lEIFJUTVBfT1NfUmVsZWFzZV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JUFFVRVVFX0VOVFJZICBwRW50cnkpOworCitWT0lEIFJUTVB1c2VjRGVsYXkoCisJSU4JVUxPTkcJdXNlYyk7CisKK05ESVNfU1RBVFVTIG9zX2FsbG9jX21lbSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQJUFVDSEFSICptZW0sCisJSU4JVUxPTkcgIHNpemUpOworCitORElTX1NUQVRVUyBvc19mcmVlX21lbSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglQVUNIQVIgbWVtKTsKKworCit2b2lkIFJUTVBfQWxsb2NhdGVTaGFyZWRNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCUJPT0xFQU4JQ2FjaGVkLAorCU9VVAlQVk9JRAkqVmlydHVhbEFkZHJlc3MsCisJT1VUCVBORElTX1BIWVNJQ0FMX0FERFJFU1MgUGh5c2ljYWxBZGRyZXNzKTsKKworVk9JRCBSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTkRJU19TVEFUVVMgQWRhcHRlckJsb2NrQWxsb2NhdGVNZW1vcnkoCisJSU4gUFZPSUQJaGFuZGxlLAorCU9VVAlQVk9JRAkqcHBBZCk7CisKK3ZvaWQgUlRNUF9BbGxvY2F0ZVR4RGVzY01lbW9yeSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVSU5UCUluZGV4LAorCUlOCVVMT05HCUxlbmd0aCwKKwlJTglCT09MRUFOCUNhY2hlZCwKKwlPVVQJUFZPSUQJKlZpcnR1YWxBZGRyZXNzLAorCU9VVAlQTkRJU19QSFlTSUNBTF9BRERSRVNTIFBoeXNpY2FsQWRkcmVzcyk7CisKK3ZvaWQgUlRNUF9BbGxvY2F0ZUZpcnN0VHhCdWZmZXIoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUlOVAlJbmRleCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcywKKwlPVVQJUE5ESVNfUEhZU0lDQUxfQUREUkVTUyBQaHlzaWNhbEFkZHJlc3MpOworCit2b2lkIFJUTVBfQWxsb2NhdGVNZ210RGVzY01lbW9yeSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcywKKwlPVVQJUE5ESVNfUEhZU0lDQUxfQUREUkVTUyBQaHlzaWNhbEFkZHJlc3MpOworCit2b2lkIFJUTVBfQWxsb2NhdGVSeERlc2NNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCUJPT0xFQU4JQ2FjaGVkLAorCU9VVAlQVk9JRAkqVmlydHVhbEFkZHJlc3MsCisJT1VUCVBORElTX1BIWVNJQ0FMX0FERFJFU1MgUGh5c2ljYWxBZGRyZXNzKTsKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVSeFBhY2tldEJ1ZmZlcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcywKKwlPVVQJUE5ESVNfUEhZU0lDQUxfQUREUkVTUyBQaHlzaWNhbEFkZHJlc3MpOworCitQTkRJU19QQUNLRVQgUlRNUF9BbGxvY2F0ZVR4UGFja2V0QnVmZmVyKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVMT05HCUxlbmd0aCwKKwlJTglCT09MRUFOCUNhY2hlZCwKKwlPVVQJUFZPSUQJKlZpcnR1YWxBZGRyZXNzKTsKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVGcmFnUGFja2V0QnVmZmVyKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVMT05HCUxlbmd0aCk7CisKK3ZvaWQgUlRNUF9RdWVyeVBhY2tldEluZm8oCisJSU4gIFBORElTX1BBQ0tFVCBwUGFja2V0LAorCU9VVCBQQUNLRVRfSU5GTyAgKnBQYWNrZXRJbmZvLAorCU9VVCBQVUNIQVIJCSAqcFNyY0J1ZlZBLAorCU9VVAlVSU5UCQkgKnBTcmNCdWZMZW4pOworCit2b2lkIFJUTVBfUXVlcnlOZXh0UGFja2V0SW5mbygKKwlJTiAgUE5ESVNfUEFDS0VUICpwcFBhY2tldCwKKwlPVVQgUEFDS0VUX0lORk8gICpwUGFja2V0SW5mbywKKwlPVVQgUFVDSEFSCQkgKnBTcmNCdWZWQSwKKwlPVVQJVUlOVAkJICpwU3JjQnVmTGVuKTsKKworCitCT09MRUFOIFJUTVBfRmlsbFR4QmxrSW5mbygKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBUWF9CTEsgKnBUeEJsayk7CisKKworUFJUTVBfU0NBVFRFUl9HQVRIRVJfTElTVAorcnRfZ2V0X3NnX2xpc3RfZnJvbV9wYWNrZXQoUE5ESVNfUEFDS0VUIHBQYWNrZXQsIFJUTVBfU0NBVFRFUl9HQVRIRVJfTElTVCAqc2cpOworCisKKyB2b2lkIGFubm91bmNlXzgwMl8zX3BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCk7CisKKworVUlOVCBCQV9SZW9yZGVyX0FNU0RVX0Fubm5vdW5jZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCk7CisKKworVUlOVCBIYW5kbGVfQU1TRFVfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUsCisJSU4gIFVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisKK3ZvaWQgY29udmVydF84MDJfMTFfdG9fODAyXzNfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXA4MDIzaGRyLAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUsCisJSU4gIFVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisKK1BORVRfREVWIGdldF9uZXRkZXZfZnJvbV9ic3NpZCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworCitQTkRJU19QQUNLRVQgZHVwbGljYXRlX3BrdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwSGVhZGVyODAyXzMsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworCitQTkRJU19QQUNLRVQgZHVwbGljYXRlX3BrdF93aXRoX1RLSVBfTUlDKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwT2xkUGt0KTsKKworUE5ESVNfUEFDS0VUIGR1cGxpY2F0ZV9wa3Rfd2l0aF9WTEFOKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitQTkRJU19QQUNLRVQgZHVwbGljYXRlX3BrdF93aXRoX1dQSSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglVSU5UMzIJCQlleHRfaGVhZF9sZW4sCisJSU4JVUlOVDMyCQkJZXh0X3RhaWxfbGVuKTsKKworVUNIQVIgVkxBTl84MDIzX0hlYWRlcl9Db3B5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKwlJTglVSU5UICAgICAgICAgICAgSGRyTGVuLAorCU9VVCBQVUNIQVIJCQlwRGF0YSwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAordm9pZCBiYV9mbHVzaF9yZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUEJBX1JFQ19FTlRSWQlwQkFFbnRyeSwKKwlJTiBVTE9ORwkJCU5vdzMyKTsKKworCitWT0lEIEJBT3JpU2Vzc2lvblNldFVwKAorCQkJSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJCQlJTiBNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeSwKKwkJCUlOIFVDSEFSCQkJVElELAorCQkJSU4gVVNIT1JUCQkJVGltZU91dCwKKwkJCUlOIFVMT05HCQkJRGVsYXlUaW1lLAorCQkJSU4gQk9PTEVBTgkJaXNGb3JjZWQpOworCitWT0lEIEJBU2Vzc2lvblRlYXJEb3duQUxMKAorCUlOIE9VVAlQUlRNUF9BREFQVEVSIHBBZCwKKwlJTgkJVUNIQVIgV2NpZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK0JPT0xFQU4gT1NfTmVlZF9DbG9uZV9QYWNrZXQodm9pZCk7CisKKworVk9JRCBidWlsZF90eF9wYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JUFVDSEFSCXBGcmFtZSwKKwlJTglVTE9ORwlGcmFtZUxlbik7CisKKworVk9JRCBCQU9yaVNlc3Npb25UZWFyRG93bigKKwlJTiBPVVQJUFJUTVBfQURBUFRFUglwQWQsCisJSU4JCVVDSEFSCQkJV2NpZCwKKwlJTgkJVUNIQVIJCQlUSUQsCisJSU4JCUJPT0xFQU4JCQliUGFzc2l2ZSwKKwlJTgkJQk9PTEVBTgkJCWJGb3JjZVNlbmQpOworCitWT0lEIEJBUmVjU2Vzc2lvblRlYXJEb3duKAorCUlOIE9VVAlQUlRNUF9BREFQVEVSCXBBZCwKKwlJTgkJVUNIQVIJCQlXY2lkLAorCUlOCQlVQ0hBUgkJCVRJRCwKKwlJTgkJQk9PTEVBTgkJCWJQYXNzaXZlKTsKKworQk9PTEVBTiBiYV9yZW9yZGVyaW5nX3Jlc291cmNlX2luaXQoUFJUTVBfQURBUFRFUiBwQWQsIGludCBudW0pOwordm9pZCBiYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoUFJUTVBfQURBUFRFUiBwQWQpOworCitVTE9ORyBBdXRvQ2hCc3NJbnNlcnRFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4sCisJSU4gVUNIQVIgQ2hhbm5lbE5vLAorCUlOIENIQVIgUnNzaSk7CisKK3ZvaWQgQXV0b0NoQnNzVGFibGVJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKwordm9pZCBDaGFubmVsSW5mb0luaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCit2b2lkIEF1dG9DaEJzc1RhYmxlRGVzdHJveSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK3ZvaWQgQ2hhbm5lbEluZm9EZXN0cm95KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVUNIQVIgTmV3X0FwQXV0b1NlbGVjdENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCisKKyNpZmRlZiBOSU5URU5ET19BUAorVk9JRAlJbml0TklOVEVORE9fVEFCTEUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitVQ0hBUglDaGVja05JTlRFTkRPX1RBQkxFKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCVBDSEFSIHBEU19Tc2lkLAorCVVDSEFSIERTX1NzaWRMZW4sCisJUFVDSEFSIHBEU19BZGRyKTsKKworVUNIQVIJRGVsTklOVEVORE9fRU5UUlkoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJVUNIQVIgKiBwRFNfQWRkcik7CisKK1ZPSUQJUlRNUElvY3RsTmludGVuZG9DYXBhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworVk9JRAlSVE1QSW9jdGxOaW50ZW5kb0dldFRhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworVk9JRAlSVE1QSW9jdGxOaW50ZW5kb1NldFRhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworI2VuZGlmIC8vIE5JTlRFTkRPX0FQIC8vCisKK0JPT0xFQU4gcnRzdHJtYWN0b2hleCgKKwlJTiBjaGFyICpzMSwKKwlJTiBjaGFyICpzMik7CisKK0JPT0xFQU4gcnRzdHJjYXNlY21wKAorCUlOIGNoYXIgKnMxLAorCUlOIGNoYXIgKnMyKTsKKworY2hhciAqcnRzdHJzdHJ1bmNhc2VjbXAoCisJSU4gY2hhciAqczEsCisJSU4gY2hhciAqczIpOworCitjaGFyICAgICpydHN0cnN0cigKKwlJTgljb25zdCBjaGFyICogczEsCisJSU4JY29uc3QgY2hhciAqIHMyKTsKKworY2hhciAqcnN0cnRvaygKKwlJTiBjaGFyICogcywKKwlJTiBjb25zdCBjaGFyICogY3QpOworCitpbnQgcnRpbmV0X2F0b24oCisJY29uc3QgY2hhciAqY3AsCisJdW5zaWduZWQgaW50ICphZGRyKTsKKworLy8vLy8vLy8vLyBjb21tb24gaW9jdGwgZnVuY3Rpb25zIC8vLy8vLy8vLy8KK0lOVCBTZXRfRHJpdmVyVmVyc2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQ291bnRyeVJlZ2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9XaXJlbGVzc01vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0NoYW5uZWxfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X1Nob3J0U2xvdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfVHhQb3dlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfQkdQcm90ZWN0aW9uX1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9UeFByZWFtYmxlX1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9SVFNUaHJlc2hvbGRfUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0ZyYWdUaHJlc2hvbGRfUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X1R4QnVyc3RfUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQVUNIQVIJCQlhcmcpOworCisjaWZkZWYgQUdHUkVHQVRJT05fU1VQUE9SVAorSU5UCVNldF9Qa3RBZ2dyZWdhdGVfUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQVUNIQVIJCQlhcmcpOworI2VuZGlmCisKK0lOVAlTZXRfSUVFRTgwMjExSF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKKyNpZmRlZiBEQkcKK0lOVAlTZXRfRGVidWdfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworI2VuZGlmCisKK0lOVAlTaG93X0Rlc2NJbmZvX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9SZXNldFN0YXRDb3VudGVyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorSU5UCVNldF9CQVNldHVwX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9CQURlY2xpbmVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0JBT3JpVGVhckRvd25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0JBUmVjVGVhckRvd25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0QndfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TWNzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdEdpX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdE9wTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRTdGJjX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdEh0Y19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRFeHRjaGFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TXBkdURlbnNpdHlfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0QmFXaW5TaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdFJkZ19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRMaW5rQWRhcHRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0QW1zZHVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0QXV0b0JhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdFByb3RlY3RfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TWltb1BzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworCitJTlQJU2V0X0ZvcmNlU2hvcnRHSV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfRm9yY2VHRl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRDb21tb25IVCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK0lOVAlTZXRfU2VuZFBTTVBBY3Rpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TUlNT1BTbW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKKworSU5UCVNldF9IdFR4QkFTaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8vRGxzICwJa2F0aHkKK1ZPSUQgUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEQSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vQmxvY2sgQUNLCitWT0lEIFF1ZXJ5QkFUQUJMRSgKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFBRVUVSWUJBX1RBQkxFIHBCQVQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorSU5UCSAgICBXcGFDaGVja0VhcENvZGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICAJcEFkLAorCUlOICBQVUNIQVIJCQkJcEZyYW1lLAorCUlOICBVU0hPUlQJCQkJRnJhbWVMZW4sCisJSU4gIFVTSE9SVAkJCQlPZmZTZXQpOworCitWT0lEICAgIFdwYVNlbmRNaWNGYWlsdXJlVG9XcGFTdXBwbGljYW50KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCwKKyAgICBJTiAgQk9PTEVBTiAgICAgICAgICAgICBiVW5pY2FzdCk7CisKK1ZPSUQgICAgU2VuZEFzc29jSUVzVG9XcGFTdXBwbGljYW50KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCk7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKK2ludCB3ZXh0X25vdGlmeV9ldmVudF9hc3NvYygKKwlJTiAgUlRNUF9BREFQVEVSICpwQWQpOworI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgSGFuZGxlX0JTU19XaWR0aF9UcmlnZ2VyX0V2ZW50cygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK3ZvaWQgYnVpbGRfZXh0X2NoYW5uZWxfc3dpdGNoX2llKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEhUX0VYVF9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlRfSUUgKnBJRSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworQk9PTEVBTiBBUFJ4RG9uZUludGVycnVwdEhhbmRsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK0JPT0xFQU4gU1RBUnhEb25lSW50ZXJydXB0SGFuZGxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCUJPT0xFQU4JCQlhcmdjKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8gQU1QRFUgcGFja2V0IGluZGljYXRpb24KK1ZPSUQgSW5kaWNhdGVfQU1QRFVfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKKy8vIEFNU0RVIHBhY2tldCBpbmRpY2F0aW9uCitWT0lEIEluZGljYXRlX0FNU0RVX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBOb3JtYWwgbGVnYWN5IFJ4IHBhY2tldCBpbmRpY2F0aW9uCitWT0lEIEluZGljYXRlX0xlZ2FjeV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworVk9JRCBJbmRpY2F0ZV9FQVBPTF9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKwordm9pZCAgdXBkYXRlX29zX3BhY2tldF9pbmZvKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK3ZvaWQgd2xhbl84MDJfMTFfdG9fODAyXzNfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JUFVDSEFSCQkJcEhlYWRlcjgwMl8zLAorCUlOICBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworVUlOVCBkZWFnZ3JlZ2F0ZV9BTVNEVV9hbm5vdW5jZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlQTkRJU19QQUNLRVQJCXBQYWNrZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSk7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLy8gcmVtb3ZlIExMQyBhbmQgZ2V0IDgwMl8zIEhlYWRlcgorI2RlZmluZSAgUlRNUF84MDJfMTFfUkVNT1ZFX0xMQ19BTkRfQ09OVkVSVF9UT184MDJfMyhfcFJ4QmxrLCBfcEhlYWRlcjgwMl8zKQlcCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJUFVDSEFSIF9wUmVtb3ZlZExMQ1NOQVAgPSBOVUxMLCBfcERBLCBfcFNBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9NRVNIKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX3BEQSA9IF9wUnhCbGstPnBIZWFkZXItPkFkZHIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlfcFNBID0gKFBVQ0hBUilfcFJ4QmxrLT5wSGVhZGVyICsgc2l6ZW9mKEhFQURFUl84MDJfMTEpOyAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9JTkZSQSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKwkJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJX3BEQSA9IF9wUnhCbGstPnBIZWFkZXItPkFkZHIxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9ETFMpKQkJCQkJCQkJCVwKKwkJCV9wU0EgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMjsJCQkJCQkJCQkJXAorCQllbHNlCQkJCQkJCQkJCQkJCQkJCQlcCisJCQlfcFNBID0gX3BSeEJsay0+cEhlYWRlci0+QWRkcjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCV9wREEgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJX3BTQSA9IF9wUnhCbGstPnBIZWFkZXItPkFkZHIyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJQ09OVkVSVF9UT184MDJfMyhfcEhlYWRlcjgwMl8zLCBfcERBLCBfcFNBLCBfcFJ4QmxrLT5wRGF0YSwgCQkJCVwKKwkJX3BSeEJsay0+RGF0YVNpemUsIF9wUmVtb3ZlZExMQ1NOQVApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK0JPT0xFQU4gQVBGb3dhcmRXaXJlbGVzc1N0YVRvV2lyZWxlc3NTdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JVUxPTkcJCQlGcm9tV2hpY2hCU1NJRCk7CisKK1ZPSUQgQW5ub3VuY2Vfb3JfRm9yd2FyZF84MDJfM19QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK1ZPSUQgU3RhX0Fubm91bmNlX29yX0ZvcndhcmRfODAyXzNfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgQU5OT1VOQ0VfT1JfRk9SV0FSRF84MDJfM19QQUNLRVQoX3BBZCwgX3BQYWNrZXQsIF9Gcm9tV2hpY2hCU1MpXAorCQkJU3RhX0Fubm91bmNlX29yX0ZvcndhcmRfODAyXzNfUGFja2V0KF9wQWQsIF9wUGFja2V0LCBfRnJvbVdoaWNoQlNTKTsKKwkJCS8vYW5ub3VuY2VfODAyXzNfcGFja2V0KF9wQWQsIF9wUGFja2V0KTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCitQTkRJU19QQUNLRVQgRHVwbGljYXRlUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisKK1BORElTX1BBQ0tFVCBDbG9uZVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplKTsKKworCisvLyBOb3JtYWwsIEFNUERVIG9yIEFNU0RVCitWT0lEIENtbVJ4bm9uUmFsaW5rRnJhbWVJbmRpY2F0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitWT0lEIENtbVJ4UmFsaW5rRnJhbWVJbmRpY2F0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeSwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitWT0lEIFVwZGF0ZV9Sc3NpX1NhbXBsZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBSU1NJX1NBTVBMRQkJKnBSc3NpLAorCUlOIFBSWFdJX1NUUlVDCQlwUnhXSSk7CisKK1BORElTX1BBQ0tFVCBHZXRQYWNrZXRGcm9tUnhSaW5nKAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJCVBSVDI4WFhfUlhEX1NUUlVDCQlwU2F2ZVJ4RCwKKwlPVVQJCUJPT0xFQU4JCQkqcGJSZXNjaGVkdWxlLAorCUlOIE9VVAlVSU5UMzIJCQkqcFJ4UGVuZGluZyk7CisKK1BORElTX1BBQ0tFVCBSVE1QRGVGcmFnbWVudERhdGFGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKworCisKKyNpZmRlZiBTTk1QX1NVUFBPUlQKKy8vZm9yIHNubXAgLCBrYXRoeQordHlwZWRlZiBzdHJ1Y3QgX0RlZmF1bHRLZXlJZHhWYWx1ZQoreworCVVDSEFSCUtleUlkeDsKKwlVQ0hBUglWYWx1ZVsxNl07Cit9IERlZmF1bHRLZXlJZHhWYWx1ZSwgKlBEZWZhdWx0S2V5SWR4VmFsdWU7CisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitlbnVtIHsKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtCQk9IDB4MDAwMDAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ob3N0dGltZQk9IDB4MDAwMTAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lCT0gMHgwMDAyMDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWwJPSAweDAwMDMwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcnNzaQkJPSAweDAwMDQwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc3EJCT0gMHgwMDA1MDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3NpZ25hbAk9IDB4MDAwNjAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ub2lzZQkJPSAweDAwMDcwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcmF0ZQkJPSAweDAwMDgwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eAkJPSAweDAwMDkwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fZnJtbGVuCT0gMHgwMDBBMDA0NAorfTsKK2VudW0geworCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWUJPSAweDAwCit9OworZW51bSB7CisJUDgwMjExRU5VTV90cnV0aF9mYWxzZQkJCT0gMHgwMCwKKwlQODAyMTFFTlVNX3RydXRoX3RydWUJCQk9IDB4MDEKK307CisKKy8qIERlZmluaXRpb24gZnJvbSBtYWR3aWZpICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFVJTlQzMiBkaWQ7CisgICAgICAgIFVJTlQxNiBzdGF0dXM7CisgICAgICAgIFVJTlQxNiBsZW47CisgICAgICAgIFVJTlQzMiBkYXRhOworfSBwODAyMTFpdGVtX3VpbnQzMl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFVJTlQzMiBtc2djb2RlOworICAgICAgICBVSU5UMzIgbXNnbGVuOworI2RlZmluZSBXTEFOX0RFVk5BTUVMRU5fTUFYIDE2CisgICAgICAgIFVJTlQ4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgaG9zdHRpbWU7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgbWFjdGltZTsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCBjaGFubmVsOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IHJzc2k7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3Qgc3E7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3Qgc2lnbmFsOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IG5vaXNlOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IHJhdGU7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgaXN0eDsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCBmcm1sZW47Cit9IHdsYW5fbmdfcHJpc20yX2hlYWRlcjsKKworLyogVGhlIHJhZGlvIGNhcHR1cmUgaGVhZGVyIHByZWNlZGVzIHRoZSA4MDIuMTEgaGVhZGVyLiAqLwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9pZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHsKKyAgICBVSU5UOAlpdF92ZXJzaW9uOwkvKiBWZXJzaW9uIDAuIE9ubHkgaW5jcmVhc2VzCisJCQkJICogZm9yIGRyYXN0aWMgY2hhbmdlcywKKwkJCQkgKiBpbnRyb2R1Y3Rpb24gb2YgY29tcGF0aWJsZQorCQkJCSAqIG5ldyBmaWVsZHMgZG9lcyBub3QgY291bnQuCisJCQkJICovCisgICAgVUlOVDgJaXRfcGFkOworICAgIFVJTlQxNiAgICAgaXRfbGVuOyAgICAgICAgIC8qIGxlbmd0aCBvZiB0aGUgd2hvbGUKKwkJCQkgKiBoZWFkZXIgaW4gYnl0ZXMsIGluY2x1ZGluZworCQkJCSAqIGl0X3ZlcnNpb24sIGl0X3BhZCwKKwkJCQkgKiBpdF9sZW4sIGFuZCBkYXRhIGZpZWxkcy4KKwkJCQkgKi8KKyAgICBVSU5UMzIgICBpdF9wcmVzZW50OwkvKiBBIGJpdG1hcCB0ZWxsaW5nIHdoaWNoCisJCQkJCSAqIGZpZWxkcyBhcmUgcHJlc2VudC4gU2V0IGJpdCAzMQorCQkJCQkgKiAoMHg4MDAwMDAwMCkgdG8gZXh0ZW5kIHRoZQorCQkJCQkgKiBiaXRtYXAgYnkgYW5vdGhlciAzMiBiaXRzLgorCQkJCQkgKiBBZGRpdGlvbmFsIGV4dGVuc2lvbnMgYXJlIG1hZGUKKwkJCQkJICogYnkgc2V0dGluZyBiaXQgMzEuCisJCQkJCSAqLworfWllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgOworCitlbnVtIGllZWU4MDIxMV9yYWRpb3RhcF90eXBlIHsKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCA9IDAsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTID0gMSwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfUkFURSA9IDIsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwgPSAzLAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9GSFNTID0gNCwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCA9IDUsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSA9IDYsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0xPQ0tfUVVBTElUWSA9IDcsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OID0gOCwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfREJfVFhfQVRURU5VQVRJT04gPSA5LAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVIgPSAxMCwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQSA9IDExLAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwgPSAxMiwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0UgPSAxMworfTsKKworI2RlZmluZSBXTEFOX1JBRElPVEFQX1BSRVNFTlQgKAkJCVwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkJfAlcCisJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CVwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSkgIHwgCVwKKwkgMCkKKwordHlwZWRlZiBzdHJ1Y3QgX3dsYW5fcmFkaW90YXBfaGVhZGVyIHsKKwlpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHd0X2loZHI7CisJSU5UNjQgd3RfdHNmdDsKKwlVSU5UOCB3dF9mbGFnczsKKwlVSU5UOCB3dF9yYXRlOworfSB3bGFuX3JhZGlvdGFwX2hlYWRlcjsKKy8qIERlZmluaXRpb24gZnJvbSBtYWR3aWZpICovCisKK3ZvaWQgc2VuZF9tb25pdG9yX3BhY2tldHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsayk7CisKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTIKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBxdWVyeSAvcHJvYworc3RydWN0IGl3X3N0YXRpc3RpY3MgKnJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHMoCisgICAgSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworI2VuZGlmCisKK1ZPSUQgICAgUlRNUFNldERlc2lyZWRSYXRlcygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBMT05HICAgICAgICAgICAgUmF0ZXMpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitJTlQJU2V0X0ZpeGVkVHhNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitJTlQJU2V0X09wTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworc3RhdGljIGlubGluZSBjaGFyKiBHZXRQaHlNb2RlKAorCWludCBNb2RlKQoreworCXN3aXRjaChNb2RlKQorCXsKKwkJY2FzZSBNT0RFX0NDSzoKKwkJCXJldHVybiAiQ0NLIjsKKworCQljYXNlIE1PREVfT0ZETToKKwkJCXJldHVybiAiT0ZETSI7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgTU9ERV9IVE1JWDoKKwkJCXJldHVybiAiSFRNSVgiOworCisJCWNhc2UgTU9ERV9IVEdSRUVORklFTEQ6CisJCQlyZXR1cm4gIkdSRUVOIjsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAiTi9BIjsKKwl9Cit9CisKKworc3RhdGljIGlubGluZSBjaGFyKiBHZXRCVygKKwlpbnQgQlcpCit7CisJc3dpdGNoKEJXKQorCXsKKwkJY2FzZSBCV18xMDoKKwkJCXJldHVybiAiMTBNIjsKKworCQljYXNlIEJXXzIwOgorCQkJcmV0dXJuICIyME0iOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIEJXXzQwOgorCQkJcmV0dXJuICI0ME0iOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQlkZWZhdWx0OgorCQkJcmV0dXJuICJOL0EiOworCX0KK30KKworCitWT0lEIFJUMjh4eFRocmVhZFRlcm1pbmF0ZSgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK0JPT0xFQU4gUlQyOFhYQ2hpcHNldENoZWNrKAorCUlOIHZvaWQgKl9kZXZfcCk7CisKK0JPT0xFQU4gUlQyOFhYTmV0RGV2SW5pdCgKKwlJTiB2b2lkIAkJCQkqX2Rldl9wLAorCUlOIHN0cnVjdCAgbmV0X2RldmljZQkqbmV0X2RldiwKKwlJTiBSVE1QX0FEQVBURVIgCQkqcEFkKTsKKworQk9PTEVBTiBSVDI4WFhQcm9iZVBvc3RDb25maWcoCisJSU4gdm9pZCAJCQkJKl9kZXZfcCwKKwlJTiBSVE1QX0FEQVBURVIgCQkqcEFkLAorCUlOIElOVDMyCQkJCWFyZ2MpOworCitWT0lEIFJUMjhYWERNQURpc2FibGUoCisJSU4gUlRNUF9BREFQVEVSIAkJKnBBZCk7CisKK1ZPSUQgUlQyOFhYRE1BRW5hYmxlKAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQpOworCitWT0lEIFJUMjh4eF9VcGRhdGVCZWFjb25Ub0FzaWMoCisJSU4gUlRNUF9BREFQVEVSICogcEFkLAorCUlOIElOVCBhcGlkeCwKKwlJTiBVTE9ORyBCZWFjb25MZW4sCisJSU4gVUxPTkcgVXBkYXRlUG9zKTsKKworSU5UIHJ0Mjh4eF9pb2N0bCgKKwlJTglzdHJ1Y3QgbmV0X2RldmljZQkqbmV0X2RldiwKKwlJTglPVVQJc3RydWN0IGlmcmVxCSpycSwKKwlJTglJTlQJCQljbWQpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0lOVCBydDI4eHhfc3RhX2lvY3RsKAorCUlOCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRfZGV2LAorCUlOCU9VVAlzdHJ1Y3QgaWZyZXEJKnJxLAorCUlOCUlOVAkJCWNtZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK0JPT0xFQU4gUlQyOFhYU2VjdXJpdHlLZXlBZGQoCisJSU4JCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTgkJVUxPTkcJCQkJYXBpZHgsCisJSU4JCVVMT05HCQkJCUtleUlkeCwKKwlJTgkJTUFDX1RBQkxFX0VOVFJZIAkqcEVudHJ5KTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworUE5ESVNfUEFDS0VUIEdldFBhY2tldEZyb21SeFJpbmcoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAkJUFJUMjhYWF9SWERfU1RSVUMJcFNhdmVSeEQsCisJT1VUCQlCT09MRUFOCQkJKnBiUmVzY2hlZHVsZSwKKwlJTiBPVVQJVUlOVDMyCQkJKnBSeFBlbmRpbmcpOworCisKK3ZvaWQga2lsbF90aHJlYWRfdGFzayhQUlRNUF9BREFQVEVSIHBBZCk7CisKK3ZvaWQgdGJ0dF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKworVk9JRCBBc2ljVHVybk9mZlJGQ2xrKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOCVVDSEFSICAgICAgICAgICBDaGFubmVsKTsKKworVk9JRCBBc2ljVHVybk9uUkZDbGsoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkLAorCUlOCVVDSEFSCQkJQ2hhbm5lbCk7CisKKyNpZmRlZiBSVDMweHgKK05UU1RBVFVTIFJUMzB4eFdyaXRlUkZSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVJlZ0lELAorCUlOCVVDSEFSCQkJVmFsdWUpOworCitOVFNUQVRVUyBSVDMweHhSZWFkUkZSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVJlZ0lELAorCUlOCVBVQ0hBUgkJCXBWYWx1ZSk7CisKKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZTwtLQorVUNIQVIgZUZ1c2VSZWFkUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlPVVQJVVNIT1JUKiBwRGF0YSk7CisKK1ZPSUQgZUZ1c2VSZWFkUGh5c2ljYWwoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisgIAlJTglQVVNIT1JUIGxwSW5CdWZmZXIsCisgIAlJTglVTE9ORyBuSW5CdWZmZXJTaXplLAorICAJT1VUCVBVU0hPUlQgbHBPdXRCdWZmZXIsCisgIAlJTglVTE9ORyBuT3V0QnVmZmVyU2l6ZQorKTsKKworTlRTVEFUVVMgZUZ1c2VSZWFkKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJTGVuZ3RoKTsKKworVk9JRCBlRnVzZVBoeXNpY2FsV3JpdGVSZWdpc3RlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCU9VVAlVU0hPUlQqIHBEYXRhKTsKKworTlRTVEFUVVMgZUZ1c2VXcml0ZVJlZ2lzdGVycygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJSU4JVVNIT1JUKiBwRGF0YSk7CisKK1ZPSUQgZUZ1c2VXcml0ZVBoeXNpY2FsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorICAJUFVTSE9SVCBscEluQnVmZmVyLAorCVVMT05HIG5JbkJ1ZmZlclNpemUsCisgIAlQVUNIQVIgbHBPdXRCdWZmZXIsCisgIAlVTE9ORyBuT3V0QnVmZmVyU2l6ZQorKTsKKworTlRTVEFUVVMgZUZ1c2VXcml0ZSgKKyAgIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKTsKKworSU5UIHNldF9lRnVzZUdldEZyZWVCbG9ja0NvdW50X1Byb2MoCisgICAJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIHNldF9lRnVzZWR1bXBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgc2V0X2VGdXNlTG9hZEZyb21CaW5fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitOVFNUQVRVUyBlRnVzZVdyaXRlUmVnaXN0ZXJzRnJvbUJpbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJSU4JVVNIT1JUKiBwRGF0YSk7CisKK1ZPSUQgZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCU9VVAlVU0hPUlQqIHBEYXRhKTsKKworTkRJU19TVEFUVVMgTklDTG9hZEVFUFJPTSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK0JPT0xFQU4gYk5lZWRMb2FkRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCisjaWZkZWYgUlQzMHh4CisvLyBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cAorVk9JRCBSVDMweHhMb2FkUkZOb3JtYWxNb2RlU2V0dXAoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkKTsKKworVk9JRCBSVDMweHhMb2FkUkZTbGVlcE1vZGVTZXR1cCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQpOworCitWT0lEIFJUMzB4eFJldmVyc2VSRlNsZWVwTW9kZVNldHVwKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCk7CisvLyBlbmQgam9obmxpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKyNpZmRlZiBSVDI4NzAKKy8vCisvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gcnR1c2JfYnVsay5jCisvLworVk9JRAlSVFVTQkluaXRUeERlc2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYX0NPTlRFWFQJCXBUeENvbnRleHQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCXVzYl9jb21wbGV0ZV90CUZ1bmMpOworCitWT0lECVJUVVNCSW5pdEhUVHhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBIVF9UWF9DT05URVhUCXBUeENvbnRleHQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCVVMT05HCQkJQnVsa091dFNpemUsCisJSU4JdXNiX2NvbXBsZXRlX3QJRnVuYyk7CisKK1ZPSUQJUlRVU0JJbml0UnhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBSWF9DT05URVhUCQlwUnhDb250ZXh0KTsKKworVk9JRCBSVFVTQkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkJ1bGtPdXREYXRhUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQnVsa091dFBpcGVJZCwKKwlJTglVQ0hBUgkJCUluZGV4KTsKKworVk9JRCBSVFVTQkJ1bGtPdXROdWxsRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFJUVVNCQnVsa091dFJUU0ZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFJUVVNCQ2FuY2VsUGVuZGluZ0lSUHMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFJUVVNCQnVsa091dE1MTUVQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCk7CisKK1ZPSUQgUlRVU0JCdWxrT3V0UHNQb2xsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQktpY2tCdWxrT3V0KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRAlSVFVTQkJ1bGtSZWNlaXZlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBEb0J1bGtJbigKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK1ZPSUQgUlRVU0JJbml0UnhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dCk7CisKK1ZPSUQgUlRVU0JCdWxrUnhIYW5kbGUoCisJSU4gdW5zaWduZWQgbG9uZyBkYXRhKTsKKworLy8KKy8vIEZ1bmN0aW9uIFByb3RvdHlwZSBpbiBydHVzYl9pby5jCisvLworTlRTVEFUVVMgUlRVU0JNdWx0aVJlYWQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCU9VVAlQVUNIQVIJCQlwRGF0YSwKKwlJTglVU0hPUlQJCQlsZW5ndGgpOworCitOVFNUQVRVUyBSVFVTQk11bHRpV3JpdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCk7CisKK05UU1RBVFVTIFJUVVNCTXVsdGlXcml0ZV9PbmVCeXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlJTglQVUNIQVIJCQlwRGF0YSk7CisKK05UU1RBVFVTIFJUVVNCUmVhZEJCUFJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSWQsCisJSU4JUFVDSEFSCQkJcFZhbHVlKTsKKworTlRTVEFUVVMgUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSWQsCisJSU4JVUNIQVIJCQlWYWx1ZSk7CisKK05UU1RBVFVTIFJUVVNCV3JpdGVSRlJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVJTlQzMgkJCVZhbHVlKTsKKworTlRTVEFUVVMgUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVSU5UMzIJCQlUcmFuc2ZlckZsYWdzLAorCUlOCVVDSEFSCQkJUmVzZXJ2ZWRCaXRzLAorCUlOCVVDSEFSCQkJUmVxdWVzdCwKKwlJTglVU0hPUlQJCQlWYWx1ZSwKKwlJTglVU0hPUlQJCQlJbmRleCwKKwlJTglQVk9JRAkJCVRyYW5zZmVyQnVmZmVyLAorCUlOCVVJTlQzMgkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoKTsKKworTlRTVEFUVVMgUlRVU0JSZWFkRUVQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKTsKKworTlRTVEFUVVMgUlRVU0JXcml0ZUVFUFJPTSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKTsKKworVk9JRCBSVFVTQlB1dFRvU2xlZXAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitOVFNUQVRVUyBSVFVTQldha2VVcCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRVU0JJbml0aWFsaXplQ21kUSgKKwlJTglQQ21kUQljbWRxKTsKKworTkRJU19TVEFUVVMJUlRVU0JFbnF1ZXVlQ21kRnJvbU5kaXMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTkRJU19PSUQJCU9pZCwKKwlJTglCT09MRUFOCQkJU2V0SW5mb3JtYXRpb24sCisJSU4JUFZPSUQJCQlwSW5mb3JtYXRpb25CdWZmZXIsCisJSU4JVUlOVDMyCQkJSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCitORElTX1NUQVRVUyBSVFVTQkVucXVldWVJbnRlcm5hbENtZCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBORElTX09JRAkJCU9pZCwKKwlJTiBQVk9JRAkJCXBJbmZvcm1hdGlvbkJ1ZmZlciwKKwlJTiBVSU5UMzIJCQlJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCk7CisKK1ZPSUQgUlRVU0JEZXF1ZXVlQ21kKAorCUlOCVBDbWRRCQljbWRxLAorCU9VVAlQQ21kUUVsbXQJKnBjbWRxZWxtdCk7CisKK0lOVCBSVFVTQkNtZFRocmVhZCgKKwlJTiBPVVQgUFZPSUQgQ29udGV4dCk7CisKK0lOVCBUaW1lclFUaHJlYWQoCisJSU4gT1VUIFBWT0lEIENvbnRleHQpOworCitSVDI4NzBfVElNRVJfRU5UUlkgKlJUMjg3MF9UaW1lclFfSW5zZXJ0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFJBTElOS19USU1FUl9TVFJVQ1QgKnBUaW1lcik7CisKK0JPT0xFQU4gUlQyODcwX1RpbWVyUV9SZW1vdmUoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gUkFMSU5LX1RJTUVSX1NUUlVDVCAqcFRpbWVyKTsKKwordm9pZCBSVDI4NzBfVGltZXJRX0V4aXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpOworCit2b2lkIFJUMjg3MF9UaW1lclFfSW5pdCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK1ZPSUQgUlQyODcwX0Jzc0JlYWNvbkV4aXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpOworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25TdG9wKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKTsKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uU3RhcnQoCisJSU4gUlRNUF9BREFQVEVSICogcEFkKTsKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uSW5pdCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK1ZPSUQgUlQyODcwX1dhdGNoRG9nKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKTsKKworTlRTVEFUVVMgUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlJTglVSU5UMzIJCQlWYWx1ZSk7CisKK05UU1RBVFVTIFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVJTlQzMgkJCXBWYWx1ZSk7CisKK05UU1RBVFVTIFJUVVNCU2luZ2xlV3JpdGUoCisJSU4gCVJUTVBfQURBUFRFUiAJKnBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JVVNIT1JUCQkJVmFsdWUpOworCitOVFNUQVRVUyBSVFVTQkZpcm13YXJlUnVuKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworTlRTVEFUVVMgUlRVU0JGaXJtd2FyZVdyaXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUgkJcEZ3SW1hZ2UsCisJSU4gVUxPTkcJCUZ3TGVuKTsKKworTlRTVEFUVVMJUlRVU0JGaXJtd2FyZU9wbW9kZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVJTlQzMgkJCXBWYWx1ZSk7CisKK05UU1RBVFVTCVJUVVNCVmVuZGVyUmVzZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitORElTX1NUQVRVUyBSVFVTQlNldEhhcmRXYXJlUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVk9JRAkJCXBCdWYpOworCitORElTX1NUQVRVUyBSVFVTQlF1ZXJ5SGFyZFdhcmVSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCVBWT0lECQkJcEJ1Zik7CisKK1ZPSUQgQ01ESGFuZGxlcigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKKworTkRJU19TVEFUVVMJIENyZWF0ZVRocmVhZHMoCisJSU4Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgKTsKKworCitWT0lEIE1hY1RhYmxlSW5pdGlhbGl6ZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTWxtZVNldFBzbSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgcHNtKTsKKworTkRJU19TVEFUVVMgUlRNUFdQQUFkZEtleVByb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBWT0lEICAgICAgICAgICBwQnVmKTsKKworVk9JRCBBc2ljUnhBbnRFdmFsQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKwordm9pZCBhcHBlbmRfcGt0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplLAorCU9VVCAgUE5ESVNfUEFDS0VUCSpwcFBhY2tldCk7CisKK1VJTlQgZGVhZ2dyZWdhdGVfQU1TRFVfYW5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUpOworCitORElTX1NUQVRVUwlSVE1QQ2hlY2tSeEVycm9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBIRUFERVJfODAyXzExCXBIZWFkZXIsCisJSU4JUFJYV0lfU1RSVUMJcFJ4V0ksCisJSU4JUFJUMjhYWF9SWERfU1RSVUMJcFJ4SU5GTyk7CisKKworVk9JRCBSVFVTQk1sbWVIYXJkVHJhbnNtaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE1HTVRfU1RSVUMJCXBNZ210KTsKKworSU5UIE1sbWVUaHJlYWQoCisJSU4gUFZPSUQgQ29udGV4dCk7CisKKy8vCisvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gcnR1c2JfZGF0YS5jCisvLworTkRJU19TVEFUVVMJUlRVU0JGcmVlRGVzY3JpcHRvclJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCVVJTlQzMgkJCU51bWJlclJlcXVpcmVkKTsKKworCitCT09MRUFOCVJUVVNCTmVlZFF1ZXVlQmFja0ZvckFnZygKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBVQ0hBUgkJQnVsa091dFBpcGVJZCk7CisKKworVk9JRCBSVE1QV3JpdGVUeEluZm8oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYSU5GT19TVFJVQyAJcFR4SW5mbywKKwlJTgkgIFVTSE9SVAkJVVNCRE1BcGt0TGVuLAorCUlOCSAgQk9PTEVBTgkJYldpdiwKKwlJTgkgIFVDSEFSCQkJUXVldWVTZWwsCisJSU4JICBVQ0hBUgkJCU5leHRWYWxpZCwKKwlJTgkgIFVDSEFSCQkJVHhCdXJzdCk7CisKKy8vCisvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gY21tX2RhdGFfMjg3MC5jCisvLworVVNIT1JUIFJ0bXBVU0JfV3JpdGVTdWJUeFJlc291cmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JQk9PTEVBTgkJCWJJc0xhc3QsCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKTsKKworVVNIT1JUIFJ0bXBVU0JfV3JpdGVTaW5nbGVUeFJlc291cmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JQk9PTEVBTgkJCWJJc0xhc3QsCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKTsKKworVVNIT1JUCVJ0bXBVU0JfV3JpdGVGcmFnVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJZnJhZ051bSwKKwlPVVQJVVNIT1JUCQkJKkZyZWVOdW1iZXIpOworCitVU0hPUlQgUnRtcFVTQl9Xcml0ZU11bHRpVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJZnJhbWVOdW0sCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKTsKKworVk9JRCBSdG1wVVNCX0ZpbmFsV3JpdGVUeFJlc291cmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGssCisJSU4JVVNIT1JUCQkJdG90YWxNUERVU2l6ZSwKKwlJTglVU0hPUlQJCQlUeElkeCk7CisKK1ZPSUQgUnRtcFVTQkRhdGFMYXN0VHhJZHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlRdWVJZHgsCisJSU4JVVNIT1JUCQkJVHhJZHgpOworCitWT0lEIFJ0bXBVU0JEYXRhS2lja091dCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJUXVlSWR4KTsKKworCitpbnQgUnRtcFVTQk1nbXRLaWNrT3V0KAorCUlOIFJUTVBfQURBUFRFUiAJKnBBZCwKKwlJTiBVQ0hBUiAJCQlRdWVJZHgsCisJSU4gUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOIFBVQ0hBUgkJCXBTcmNCdWZWQSwKKwlJTiBVSU5UIAkJCVNyY0J1Zkxlbik7CisKK1ZPSUQgUnRtcFVTQk51bGxGcmFtZUtpY2tPdXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVUNIQVIJCVF1ZUlkeCwKKwlJTiBVQ0hBUgkJKnBOdWxsRnJhbWUsCisJSU4gVUlOVDMyCQlmcmFtZUxlbik7CisKK1ZPSUQgUlQyOHh4VXNiU3RhQXNpY0ZvcmNlV2FrZXVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gICAgICAgYkZyb21UeCk7CisKK1ZPSUQgUlQyOHh4VXNiU3RhQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIFRidHROdW1Ub05leHRXYWtlVXApOworCitWT0lEIFJUMjh4eFVzYk1sbWVSYWRpb09uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBSVDI4eHhVc2JNbG1lUmFkaW9PRkYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1ZPSUQgUUJTU19Mb2FkSW5pdCgKKyAJSU4JCVJUTVBfQURBUFRFUgkqcEFkKTsKKworVUlOVDMyIFFCU1NfTG9hZEVsZW1lbnRBcHBlbmQoCisgCUlOCQlSVE1QX0FEQVBURVIJKnBBZCwKKwlPVVQJCVVJTlQ4CQkJKmJ1Zl9wKTsKKworVk9JRCBRQlNTX0xvYWRVcGRhdGUoCisgCUlOCQlSVE1QX0FEQVBURVIJKnBBZCk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworSU5UIFJUTVBTaG93Q2ZnVmFsdWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcE5hbWUsCisJSU4JUFVDSEFSCQkJcEJ1Zik7CisKK1BDSEFSICAgUlRNUEdldFJhbGlua0F1dGhNb2RlU3RyKAorICAgIElOICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFIGF1dGhNb2RlKTsKKworUENIQVIgICBSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKAorICAgIElOICBVU0hPUlQgZW5jcnlNb2RlKTsKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgQXNpY1N0YUJicFR1bmluZygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK0JPT0xFQU4gU3RhQWRkTWFjVGFibGVFbnRyeSgKKwlJTiAgUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOICBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSwKKwlJTiAgVUNIQVIJCQkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcywKKwlJTiAgSFRfQ0FQQUJJTElUWV9JRQkqcEh0Q2FwYWJpbGl0eSwKKwlJTiAgVUNIQVIJCQkJSHRDYXBhYmlsaXR5TGVuLAorCUlOICBVU0hPUlQgICAgICAgIAkJQ2FwYWJpbGl0eUluZm8pOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit2b2lkIFJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSZVN5bmNCZWFjb25UaW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QU2V0QUdDSW5pdFZhbHVlKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVDSEFSCQkJQmFuZFdpZHRoKTsKKworaW50IHJ0Mjh4eF9jbG9zZShJTiBQTkVUX0RFViBkZXYpOworaW50IHJ0Mjh4eF9vcGVuKElOIFBORVRfREVWIGRldik7CisKK19faW5saW5lIElOVCBWSVJUVUFMX0lGX1VQKFBSVE1QX0FEQVBURVIgcEFkKQoreworZXh0ZXJuIFZPSUQgTWVzaE1ha2VCZWFjb24oSU4gUFJUTVBfQURBUFRFUiBwQWQsIElOIFVDSEFSIGlkeCk7CitleHRlcm4gVk9JRCBNZXNoVXBkYXRlQmVhY29uRnJhbWUoSU4gUFJUTVBfQURBUFRFUiBwQWQsIElOIFVDSEFSIGlkeCk7CisKKwlpZiAoVklSVFVBTF9JRl9OVU0ocEFkKSA9PSAwKQorCXsKKwkJaWYgKHJ0Mjh4eF9vcGVuKHBBZC0+bmV0X2RldikgIT0gMCkKKwkJCXJldHVybiAtMTsKKwl9CisJZWxzZQorCXsKKwl9CisJVklSVFVBTF9JRl9JTkMocEFkKTsKKwlyZXR1cm4gMDsKK30KKworX19pbmxpbmUgVk9JRCBWSVJUVUFMX0lGX0RPV04oUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVklSVFVBTF9JRl9ERUMocEFkKTsKKwlpZiAoVklSVFVBTF9JRl9OVU0ocEFkKSA9PSAwKQorCQlydDI4eHhfY2xvc2UocEFkLT5uZXRfZGV2KTsKKwlyZXR1cm47Cit9CisKKworI2VuZGlmICAvLyBfX1JUTVBfSF9fCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF9ja2lwbWljLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfY2tpcG1pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZDk0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfY2tpcG1pYy5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfY2tpcG1pYy5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisqLworI2lmbmRlZglfX1JUTVBfQ0tJUE1JQ19IX18KKyNkZWZpbmUJX19SVE1QX0NLSVBNSUNfSF9fCisKK3R5cGVkZWYJc3RydWN0CV9NSUNfQ09OVEVYVAl7CisJLyogLS0tIE1NSCBjb250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJVUNIQVIJCUNLWzE2XTsJCQkJLyogdGhlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJVUNIQVIJCWNvZWZmaWNpZW50WzE2XTsJLyogY3VycmVudCBhZXMgY291bnRlciBtb2RlIGNvZWZmaWNpZW50cyAgICAgICovCisJVUxPTkdMT05HCWFjY3VtOwkJCQkvKiBhY2N1bXVsYXRlZCBtaWMsIHJlZHVjZWQgdG8gdTMyIGluIGZpbmFsKCkgKi8KKwlVSU5UCQlwb3NpdGlvbjsJCQkvKiBjdXJyZW50IHBvc2l0aW9uIChieXRlIG9mZnNldCkgaW4gbWVzc2FnZSAgKi8KKwlVQ0hBUgkJcGFydFs0XTsJCQkvKiBmb3IgY29udmVyc2lvbiBvZiBtZXNzYWdlIHRvIHUzMiBmb3IgbW1oICAgKi8KK30JTUlDX0NPTlRFWFQsICpQTUlDX0NPTlRFWFQ7CisKK1ZPSUQJQ0tJUF9rZXlfcGVybXV0ZSgKKwlPVVQJVUNIQVIJKlBLLAkJCS8qIG91dHB1dCBwZXJtdXRlZCBrZXkgKi8KKwlJTglVQ0hBUgkqQ0ssCQkJLyogaW5wdXQgQ0tJUCBrZXkgKi8KKwlJTglVQ0hBUgl0b0RzRnJvbURzLAkJLyogaW5wdXQgdG9Ecy9Gcm9tRHMgYml0cyAqLworCUlOCVVDSEFSCSpwaXYpOwkJCS8qIGlucHV0IHBvaW50ZXIgdG8gSVYgKi8KKworVk9JRAlSVE1QQ2tpcE1pY0luaXQoCisJSU4JUE1JQ19DT05URVhUCQlwQ29udGV4dCwKKwlJTglQVUNIQVIJCQkJQ0spOworCitWT0lEIFJUTVBNaWNVcGRhdGUoCisgICAgSU4gIFBNSUNfQ09OVEVYVCAgICAgICAgcENvbnRleHQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgcE9jdGV0cywKKyAgICBJTiAgSU5UICAgICAgICAgICAgICAgICBsZW4pOworCitVTE9ORyBSVE1QTWljR2V0Q29lZmZpY2llbnQoCisgICAgSU4gIFBNSUNfQ09OVEVYVCAgICAgICAgIHBDb250ZXh0KTsKKworVk9JRCB4b3JfMTI4KAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGEsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgYiwKKyAgICBPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitVQ0hBUiBSVE1QQ2tpcFNib3goCisgICAgSU4gIFVDSEFSICAgICAgICAgICAgICAgYSk7CisKK1ZPSUQgeG9yXzMyKAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGEsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgYiwKKyAgICBPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitWT0lEIG5leHRfa2V5KAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGtleSwKKyAgICBJTiAgSU5UICAgICAgICAgICAgICAgICByb3VuZCk7CisKK1ZPSUQgYnl0ZV9zdWIoCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgaW4sCisgICAgT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVk9JRCBzaGlmdF9yb3coCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgaW4sCisgICAgT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVk9JRCBtaXhfY29sdW1uKAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGluLAorICAgIE9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgUlRNUEFlc0VuY3J5cHQoCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAga2V5LAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGRhdGEsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgY2lwaGVydGV4dCk7CisKK1ZPSUQgUlRNUE1pY0ZpbmFsKAorICAgIElOICBQTUlDX0NPTlRFWFQgICAgICAgIHBDb250ZXh0LAorICAgIE9VVCBVQ0hBUiAgICAgICAgICAgICAgIGRpZ2VzdFs0XSk7CisKK1ZPSUQgUlRNUENraXBJbnNlcnRDTUlDKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIE9VVCBQVUNIQVIgICAgICAgICAgcE1JQywKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHA4MDIxMWhkciwKKyAgICBJTiAgUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQsCisgICAgSU4gIFBDSVBIRVJfS0VZICAgICBwS2V5LAorICAgIElOICBQVUNIQVIgICAgICAgICAgbWljX3NuYXApOworCisjZW5kaWYgLy9fX1JUTVBfQ0tJUE1JQ19IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF9kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk5ZjdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydG1wX2RlZi5oCkBAIC0wLDAgKzEsMTU1OSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBydG1wX2RlZi5oCisKKyAgICBBYnN0cmFjdDoKKyAgICBNaW5pcG9ydCByZWxhdGVkIGRlZmluaXRpb24gaGVhZGVyCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFBhdWwgTGluICAgIDA4LTAxLTIwMDIgICAgY3JlYXRlZAorICAgIEpvaG4gQ2hhbmcgIDA4LTA1LTIwMDMgICAgYWRkIGRlZmluaXRpb24gZm9yIDExZyAmIG90aGVyIGRyYWZ0cworKi8KKyNpZm5kZWYgX19SVE1QX0RFRl9IX18KKyNkZWZpbmUgX19SVE1QX0RFRl9IX18KKworI2luY2x1ZGUgIm9pZC5oIgorCisjdW5kZWYgQVBfV1NDX0lOQ0xVREVECisjdW5kZWYgU1RBX1dTQ19JTkNMVURFRAorI3VuZGVmIFdTQ19JTkNMVURFRAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmIGRlZmluZWQoQVBfV1NDX0lOQ0xVREVEKSB8fCBkZWZpbmVkKFNUQV9XU0NfSU5DTFVERUQpCisjZGVmaW5lIFdTQ19JTkNMVURFRAorI2VuZGlmCisvLworLy8gIERlYnVnIGluZm9ybWF0aW9uIHZlcmJvc2l0eTogbG93ZXIgdmFsdWVzIGluZGljYXRlIGhpZ2hlciB1cmdlbmN5CisvLworI2RlZmluZSBSVF9ERUJVR19PRkYgICAgICAgIDAKKyNkZWZpbmUgUlRfREVCVUdfRVJST1IgICAgICAxCisjZGVmaW5lIFJUX0RFQlVHX1dBUk4gICAgICAgMgorI2RlZmluZSBSVF9ERUJVR19UUkFDRSAgICAgIDMKKyNkZWZpbmUgUlRfREVCVUdfSU5GTyAgICAgICA0CisjZGVmaW5lIFJUX0RFQlVHX0xPVUQgICAgICAgNQorCisjZGVmaW5lIE5JQ19UQUcgICAgICAgICAgICAgKChVTE9ORyknMDY4MicpCisjZGVmaW5lIE5JQ19EQkdfU1RSSU5HICAgICAgKCIqKlJUMjh4eCoqIikKKworI2lmZGVmIFNOTVBfU1VQUE9SVAorLy8gZm9yIHNubXAKKy8vIHRvIGdldCBtYW51ZmFjdHVyZXIgT1VJLCBrYXRoeSwgMjAwOF8wMjIwCisjZGVmaW5lIE1hbnVmYWN0dXJlck9VSV9MRU4JCQkzCisjZGVmaW5lIE1hbnVmYWN0dXJlck5BTUUJCQkoIlJhbGluayBUZWNobm9sb2d5IENvbXBhbnkuIikKKyNkZWZpbmUJUmVzb3VyY2VUeXBlSWROYW1lCQkJKCJSYWxpbmtfSUQiKQorI2VuZGlmCisKKworLy8jZGVmaW5lIFBBQ0tFRAorCisjZGVmaW5lIFJBTElOS18yODgzX1ZFUlNJT04JCSgoVUlOVDMyKTB4Mjg4MzAzMDApCisjZGVmaW5lIFJBTElOS18yODgwRV9WRVJTSU9OCSgoVUlOVDMyKTB4Mjg3MjAyMDApCisjZGVmaW5lIFJBTElOS18zMDcwX1ZFUlNJT04JCSgoVUlOVDMyKTB4MzA3MDAyMDApCisKKy8vCisvLyBORElTIHZlcnNpb24gaW4gdXNlIGJ5IHRoZSBOSUMgZHJpdmVyLgorLy8gVGhlIGhpZ2ggYnl0ZSBpcyB0aGUgbWFqb3IgdmVyc2lvbi4gVGhlIGxvdyBieXRlIGlzIHRoZSBtaW5vciB2ZXJzaW9uLgorLy8KKyNpZmRlZiAgTkRJUzUxX01JTklQT1JUCisjZGVmaW5lIE5JQ19EUklWRVJfVkVSU0lPTiAgICAgIDB4MDUwMQorI2Vsc2UKKyNkZWZpbmUgTklDX0RSSVZFUl9WRVJTSU9OICAgICAgMHgwNTAwCisjZW5kaWYKKworLy8KKy8vIE5ESVMgbWVkaWEgdHlwZSwgY3VycmVudCBpcyBldGhlcm5ldCwgY2hhbmdlIGlmIG5hdGl2ZSB3aXJlbGVzcyBzdXBwb3J0ZWQKKy8vCisjZGVmaW5lIE5JQ19NRURJQV9UWVBFICAgICAgICAgIE5kaXNNZWRpdW04MDJfMworI2RlZmluZSBOSUNfUENJX0hEUl9MRU5HVEggICAgICAweGUyCisjZGVmaW5lIE5JQ19NQVhfUEFDS0VUX1NJWkUgICAgIDIzMDQKKyNkZWZpbmUgTklDX0hFQURFUl9TSVpFICAgICAgICAgMTQKKyNkZWZpbmUgTUFYX01BUF9SRUdJU1RFUlNfTkVFREVEIDMyCisjZGVmaW5lIE1JTl9NQVBfUkVHSVNURVJTX05FRURFRCAyICAgLy9Ub2RvOiBzaG91bGQgY29uc2lkZXIgZnJhZ21lbnQgaXNzdWUuCisKKy8vCisvLyBpbnRlcmZhY2UgdHlwZSwgd2UgdXNlIFBDSQorLy8KKyNkZWZpbmUgTklDX0lOVEVSRkFDRV9UWVBFICAgICAgTmRpc0ludGVyZmFjZVBjaQorI2RlZmluZSBOSUNfSU5URVJSVVBUX01PREUgICAgICBOZGlzSW50ZXJydXB0TGV2ZWxTZW5zaXRpdmUKKworLy8KKy8vIGJ1ZmZlciBzaXplIHBhc3NlZCBpbiBOZGlzTVF1ZXJ5QWRhcHRlclJlc291cmNlcworLy8gV2Ugc2hvdWxkIG9ubHkgbmVlZCB0aHJlZSBhZGFwdGVyIHJlc291cmNlcyAoSU8sIGludGVycnVwdCBhbmQgbWVtb3J5KSwKKy8vIFNvbWUgZGV2aWNlcyBnZXQgZXh0cmEgcmVzb3VyY2VzLCBzbyBoYXZlIHJvb20gZm9yIDEwIHJlc291cmNlcworLy8gICAgICAgICAgICAgICAgICAgIFVGX1NJWkUgICAoc2l6ZW9mKE5ESVNfUkVTT1VSQ0VfTElTVCkgKyAoMTAqc2l6ZW9mKENNX1BBUlRJQUxfUkVTT1VSQ0VfREVTQ1JJUFRPUikpKQorCisKKyNkZWZpbmUgTklDX1JFU09VUkNFX0IvLworLy8gSU8gc3BhY2UgbGVuZ3RoCisvLworI2RlZmluZSBOSUNfTUFQX0lPU1BBQ0VfTEVOR1RIICBzaXplb2YoQ1NSX1NUUlVDKQorCisjZGVmaW5lIE1BWF9SWF9QS1RfTEVOCTE1MjAKKworLy8KKy8vIEVudHJ5IG51bWJlciBmb3IgZWFjaCBETUEgZGVzY3JpcHRvciByaW5nCisvLworCisKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgVFhfUklOR19TSVpFICAgICAgICAgICAgOCAvLyAxCisjZGVmaW5lIFBSSU9fUklOR19TSVpFICAgICAgICAgIDgKKyNkZWZpbmUgTUdNVF9SSU5HX1NJWkUgICAgICAgMzIgLy8gUFJJT19SSU5HX1NJWkUKKyNkZWZpbmUgUlhfUklOR19TSVpFICAgICAgICAgICAgOAorI2RlZmluZSBNQVhfVFhfUFJPQ0VTUyAgICAgICAgICA0CisjZGVmaW5lIExPQ0FMX1RYQlVGX1NJWkUgICAgICAgIDIwNDgKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorLy8gTUM6IE11bHRwbGUgQ2FyZHMKKyNkZWZpbmUgTUFYX05VTV9PRl9NVUxUSVBMRV9DQVJECQkzMgorI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisjZGVmaW5lIE1BWF9SWF9QUk9DRVNTICAgICAgICAgIDEyOCAvLzY0IC8vMzIKKyNkZWZpbmUgTlVNX09GX0xPQ0FMX1RYQlVGICAgICAgMgorI2RlZmluZSBUWERfU0laRSAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBUWFdJX1NJWkUgICAgICAgICAgICAgICAxNgorI2RlZmluZSBSWERfU0laRSAgICAgICAgICAgICAgIAkxNgorI2RlZmluZSBSWFdJX1NJWkUgICAgICAgICAgICAgCTE2CisvLyBUWElORk9fU0laRSArIFRYV0lfU0laRSArIDgwMi4xMSBIZWFkZXIgU2l6ZSArIEFNU0RVIHN1YiBmcmFtZSBoZWFkZXIKKyNkZWZpbmUgVFhfRE1BXzFTVF9CVUZGRVJfU0laRSAgOTYgICAgLy8gb25seSB0aGUgMXN0IHBoeXNpY2FsIGJ1ZmZlciBpcyBwcmUtYWxsb2NhdGVkCisjZGVmaW5lIE1HTVRfRE1BX0JVRkZFUl9TSVpFICAgIDE1MzYgLy8yMDQ4CisjZGVmaW5lIFJYX0JVRkZFUl9BR0dSRVNJWkUgICAgIDM4NDAgLy8zOTA0IC8vMzk2OCAvLzQwOTYgLy8yMDQ4IC8vNDA5NgorI2RlZmluZSBSWF9CVUZGRVJfTk9STVNJWkUgICAgICAzODQwIC8vMzkwNCAvLzM5NjggLy80MDk2IC8vMjA0OCAvLzQwOTYKKyNkZWZpbmUgVFhfQlVGRkVSX05PUk1TSVpFCQlSWF9CVUZGRVJfTk9STVNJWkUKKyNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUgICAgICAgICAgMjM0NiAgICAgICAgICAgICAgICAgICAgLy8gTWF4aW11bSA4MDIuMTEgZnJhbWUgc2l6ZQorI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fU0laRSAgICAzODQwIC8vMzkwNCAvLzM5NjggLy80MDk2CisjZGVmaW5lIE1BWF9OVU1fT0ZfVFVQTEVfQ0FDSEUgIDIKKyNkZWZpbmUgTUFYX01DQVNUX0xJU1RfU0laRSAgICAgMzIKKyNkZWZpbmUgTUFYX0xFTl9PRl9WRU5ET1JfREVTQyAgNjQKKy8vI2RlZmluZSBNQVhfU0laRV9PRl9NQ0FTVF9QU1EgICAoTlVNX09GX0xPQ0FMX1RYQlVGID4+IDIpIC8vIEFQIHdvbid0IHNwZW5kIG1vcmUgdGhhbiAxLzQgb2YgdG90YWwgYnVmZmVycyBvbiBNL0JDQVNUIFBTUQorI2RlZmluZSBNQVhfU0laRV9PRl9NQ0FTVF9QU1EgICAgICAgICAgICAgICAzMgorCisjZGVmaW5lIE1BWF9SWF9QUk9DRVNTX0NOVAkoUlhfUklOR19TSVpFKQorCisKKyNkZWZpbmUgTUFYX1BBQ0tFVFNfSU5fUVVFVUUJCQkJKDUxMikgLy8oNTEyKSAgICAvLyB0byBwYXNzIFdNTSBBNS1XUEFQU0sKKyNkZWZpbmUgTUFYX1BBQ0tFVFNfSU5fTUNBU1RfUFNfUVVFVUUJCTMyCisjZGVmaW5lIE1BWF9QQUNLRVRTX0lOX1BTX1FVRVVFCQkJCTEyOAkvLzMyCisjZGVmaW5lIFdNTV9OVU1fT0ZfQUMgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFDMCwgQUMxLCBBQzIsIGFuZCBBQzMgKi8KKworCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2U8LS0KKyNkZWZpbmUgTUFYX0VFUFJPTV9CSU5fRklMRV9TSVpFCQkJCQkxMDI0CisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2UtLT4KKworLy8gUnhGaWx0ZXIKKyNkZWZpbmUgU1RBTk9STUFMCSAweDE3Zjk3CisjZGVmaW5lIEFQTk9STUFMCSAweDE1Zjk3CisvLworLy8gIFJUTVBfQURBUFRFUiBmbGFncworLy8KKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9NQVBfUkVHSVNURVIgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfSEFSRFdBUkVfRVJST1IgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9TQ0FUVEVSX0dBVEhFUiAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBmUlRNUF9BREFQVEVSX1NFTkRfUEFDS0VUX0VSUk9SICAgICAweDAwMDAwMDEwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfTUxNRV9SRVNFVF9JTl9QUk9HUkVTUyAweDAwMDAwMDIwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfVFhfUklOR19BTExPQ0FURUQgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MgICAgMHgwMDAwMDQwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX01JTU9SQVRFX0lOVVNFRCAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfUlhfUklOR19BTExPQ0FURUQgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTICAweDAwMDA0MDAwCisjZGVmaW5lCWZSVE1QX0FEQVBURVJfUkVBU1NPQ19JTl9QUk9HUkVTUwkweDAwMDA4MDAwCisjZGVmaW5lCWZSVE1QX0FEQVBURVJfTUVESUFfU1RBVEVfUEVORElORwkweDAwMDEwMDAwCisjZGVmaW5lCWZSVE1QX0FEQVBURVJfUkFESU9fT0ZGCQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUCQkJMHgwMDA0MDAwMAorI2RlZmluZQlmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVAkJCTB4MDAwODAwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9SREdfQUNUSVZFCQkJMHgwMDEwMDAwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX0RZTkFNSUNfQkVfVFhPUF9BQ1RJVkUgMHgwMDIwMDAwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX1NDQU5fMjA0MCAJCQkweDA0MDAwMDAwCisjZGVmaW5lCWZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQJCTB4MDgwMDAwMDAKKworI2RlZmluZSBmUlRNUF9BREFQVEVSX1NUQVJUX1VQICAgICAgICAgCQkweDEwMDAwMDAwCS8vRGV2aXZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIGVuYWJsZWQgVHgvUnguCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfTUVESUFfU1RBVEVfQ0hBTkdFICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRiAgICAgICAgMHg0MDAwMDAwMAorCisvLyBMb2NrIGJpdCBmb3IgYWNjZXNzaW5nIGRpZmZlcmVudCByaW5nIGJ1ZmZlcnMKKy8vI2RlZmluZSBmUlRNUF9BREFQVEVSX1RYX1JJTkdfQlVTWSAgICAgICAgMHg4MDAwMDAwMAorLy8jZGVmaW5lIGZSVE1QX0FEQVBURVJfTUdNVF9SSU5HX0JVU1kgICAgICAweDQwMDAwMDAwCisvLyNkZWZpbmUgZlJUTVBfQURBUFRFUl9BVElNX1JJTkdfQlVTWSAgICAgIDB4MjAwMDAwMDAKKy8vI2RlZmluZSBmUlRNUF9BREFQVEVSX1JYX1JJTkdfQlVTWSAgICAgICAgMHgxMDAwMDAwMAorCisvLyBMb2NrIGJpdCBmb3IgYWNjZXNzaW5nIGRpZmZlcmVudCBxdWV1ZQorLy8jZGVmaW5lICAgZlJUTVBfQURBUFRFUl9UWF9RVUVVRV9CVVNZICAgICAweDA4MDAwMDAwCisvLyNkZWZpbmUgICBmUlRNUF9BREFQVEVSX01HTVRfUVVFVUVfQlVTWSAgIDB4MDQwMDAwMDAKKworLy8KKy8vICBTVEEgb3BlcmF0aW9uIHN0YXR1cyBmbGFncworLy8KKyNkZWZpbmUgZk9QX1NUQVRVU19JTkZSQV9PTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBmT1BfU1RBVFVTX0FESE9DX09OICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgZk9QX1NUQVRVU19TSE9SVF9TTE9UX0lOVVNFRCAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCAgICAweDAwMDAwMDEwCisjZGVmaW5lIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNICAgICAgICAgICAgIDB4MDAwMDAwMjAKKy8vI2RlZmluZSBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQgICAweDAwMDAwMDQwCisjZGVmaW5lIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgZk9QX1NUQVRVU19XTU1fSU5VU0VEICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIGZPUF9TVEFUVVNfRE9aRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAgIC8vIGRlYnVnIHB1cnBvc2UKKyNkZWZpbmUgZk9QX1NUQVRVU19QSUdHWUJBQ0tfSU5VU0VEICAgICAgICAgMHgwMDAwMDgwMCAgLy8gcGlnZ3ktYmFjaywgYW5kIGFnZ3JlZ2F0aW9uCisjZGVmaW5lIGZPUF9TVEFUVVNfQVBTRF9JTlVTRUQJCQkJMHgwMDAwMTAwMAorI2RlZmluZSBmT1BfU1RBVFVTX1RYX0FNU0RVX0lOVVNFRAkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgZk9QX1NUQVRVU19NQVhfUkVUUllfRU5BQkxFRAkJMHgwMDAwNDAwMAorI2RlZmluZSBmT1BfU1RBVFVTX1dBS0VVUF9OT1cgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFICAgICAgIDB4MDAwMjAwMDAKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKyNkZWZpbmUgZk9QX1NUQVRVU19TQ0FOXzIwNDAgICAgICAgICAgICAgICAJICAgIDB4MDAwNDAwMDAKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKyNkZWZpbmUgQ0NLU0VUUFJPVEVDVAkJMHgxCisjZGVmaW5lIE9GRE1TRVRQUk9URUNUCQkweDIKKyNkZWZpbmUgTU0yMFNFVFBST1RFQ1QJCTB4NAorI2RlZmluZSBNTTQwU0VUUFJPVEVDVAkJMHg4CisjZGVmaW5lIEdGMjBTRVRQUk9URUNUCQkweDEwCisjZGVmaW5lIEdSNDBTRVRQUk9URUNUCQkweDIwCisjZGVmaW5lIEFMTE5fU0VUUFJPVEVDVAkJKEdSNDBTRVRQUk9URUNUIHwgR0YyMFNFVFBST1RFQ1QgfCBNTTQwU0VUUFJPVEVDVCB8IE1NMjBTRVRQUk9URUNUKQorCisvLworLy8gIEFQJ3MgY2xpZW50IHRhYmxlIG9wZXJhdGlvbiBzdGF0dXMgZmxhZ3MKKy8vCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIENMSUVOVCBjYW4gcGFyc2UgUU9TIERBVEEgZnJhbWUKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSAgMHgwMDAwMDAwMiAgLy8gQ0xJRU5UIGNhbiByZWNlaXZlIFJhbGluaydzIHByb3ByaWV0YXJ5IFRYIGFnZ3JlZ2F0aW9uIGZyYW1lCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1BJR0dZQkFDS19DQVBBQkxFICAgIDB4MDAwMDAwMDQgIC8vIENMSUVOVCBzdXBwb3J0IHBpZ2d5LWJhY2sKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfQU1TRFVfSU5VU0VECQkJMHgwMDAwMDAwOAorI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19TR0kyMF9DQVBBQkxFCQkweDAwMDAwMDEwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUJCTB4MDAwMDAwMjAKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfVHhTVEJDX0NBUEFCTEUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfUnhTVEJDX0NBUEFCTEUJCTB4MDAwMDAwODAKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfSFRDX0NBUEFCTEUJCQkweDAwMDAwMTAwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFCQkJMHgwMDAwMDIwMAorI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19NQ1NGRUVEQkFDS19DQVBBQkxFICAweDAwMDAwNDAwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX0FQU0RfQ0FQQUJMRSAgICAgICAgIDB4MDAwMDA4MDAgIC8qIFVBUFNEIFNUQVRJT04gKi8KKworI2lmZGVmIERPVDExTl9EUkFGVDMKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfQlNTQ09FWElTVF9DQVBBQkxFCTB4MDAwMDEwMDAKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQJCTB4MDAxMDAwMDAKKy8vCisvLyAgU1RBIGNvbmZpZ3VyYXRpb24gZmxhZ3MKKy8vCisvLyNkZWZpbmUgZlNUQV9DRkdfRU5BQkxFX1RYX0JVUlNUICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8gODAyLjExbiBPcGVyYXRpbmcgTW9kZSBEZWZpbml0aW9uLiAwLTMgYWxzbyB1c2VkIGluIEFTSUNVUGRhdGVQcm90ZWN0IHN3aXRjaCBjYXNlCisjZGVmaW5lIEhUX05PX1BST1RFQ1QJMAorI2RlZmluZSBIVF9MRUdBQ1lfUFJPVEVDVAkxCisjZGVmaW5lIEhUXzQwX1BST1RFQ1QJMgorI2RlZmluZSBIVF8yMDQwX1BST1RFQ1QJMworI2RlZmluZSBIVF9SVFNDVFNfNk0JNworLy9mb2xsb3dpbmcgaXMgb3VyIG93biBkZWZpbml0aW9uIGluIG9yZGVyIHRvIHR1cm4gb24gb3VyIEFTSUMgcHJvdGVjdGlvbiByZWdpc3RlciBpbiBJTkZSQVNUUlVDVFVSRS4KKyNkZWZpbmUgSFRfQVRIRVJPUwk4CisjZGVmaW5lIEhUX0ZPUkNFUlRTQ1RTCTkJLy8gRm9yY2UgdHVybiBvbiBSVFMvQ1RTIGZpcnN0LiB0aGVuIGdvIHRvIGV2YWx1YXRlIGlmIHRoaXMgZm9yY2UgUlRTIGlzIG5lY2Vzc2FyeS4KKworLy8KKy8vIFJYIFBhY2tldCBGaWx0ZXIgY29udHJvbCBmbGFncy4gQXBwbHkgb24gcEFkLT5QYWNrZXRGaWx0ZXIKKy8vCisjZGVmaW5lIGZSWF9GSUxURVJfQUNDRVBUX0RJUkVDVCAgICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQKKyNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfTVVMVElDQVNUICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QKKyNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfQlJPQURDQVNUICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QKKyNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfQUxMX01VTFRJQ0FTVCAgICAgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCisKKy8vCisvLyBFcnJvciBjb2RlIHNlY3Rpb24KKy8vCisvLyBORElTX0VSUk9SX0NPREVfQURBUFRFUl9OT1RfRk9VTkQKKyNkZWZpbmUgRVJSTE9HX1JFQURfUENJX1NMT1RfRkFJTEVEICAgICAweDAwMDAwMTAxTAorI2RlZmluZSBFUlJMT0dfV1JJVEVfUENJX1NMT1RfRkFJTEVEICAgIDB4MDAwMDAxMDJMCisjZGVmaW5lIEVSUkxPR19WRU5ET1JfREVWSUNFX05PTUFUQ0ggICAgMHgwMDAwMDEwM0wKKworLy8gTkRJU19FUlJPUl9DT0RFX0FEQVBURVJfRElTQUJMRUQKKyNkZWZpbmUgRVJSTE9HX0JVU19NQVNURVJfRElTQUJMRUQgICAgICAweDAwMDAwMjAxTAorCisvLyBORElTX0VSUk9SX0NPREVfVU5TVVBQT1JURURfQ09ORklHVVJBVElPTgorI2RlZmluZSBFUlJMT0dfSU5WQUxJRF9TUEVFRF9EVVBMRVggICAgIDB4MDAwMDAzMDFMCisjZGVmaW5lIEVSUkxPR19TRVRfU0VDT05EQVJZX0ZBSUxFRCAgICAgMHgwMDAwMDMwMkwKKworLy8gTkRJU19FUlJPUl9DT0RFX09VVF9PRl9SRVNPVVJDRVMKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAweDAwMDAwNDAxTAorI2RlZmluZSBFUlJMT0dfT1VUX09GX1NIQVJFRF9NRU1PUlkgICAgIDB4MDAwMDA0MDJMCisjZGVmaW5lIEVSUkxPR19PVVRfT0ZfTUFQX1JFR0lTVEVSUyAgICAgMHgwMDAwMDQwM0wKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9CVUZGRVJfUE9PTCAgICAgICAweDAwMDAwNDA0TAorI2RlZmluZSBFUlJMT0dfT1VUX09GX05ESVNfQlVGRkVSICAgICAgIDB4MDAwMDA0MDVMCisjZGVmaW5lIEVSUkxPR19PVVRfT0ZfUEFDS0VUX1BPT0wgICAgICAgMHgwMDAwMDQwNkwKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9ORElTX1BBQ0tFVCAgICAgICAweDAwMDAwNDA3TAorI2RlZmluZSBFUlJMT0dfT1VUX09GX0xPT0tBU0lERV9NRU1PUlkgIDB4MDAwMDA0MDhMCisKKy8vIE5ESVNfRVJST1JfQ09ERV9IQVJEV0FSRV9GQUlMVVJFCisjZGVmaW5lIEVSUkxPR19TRUxGVEVTVF9GQUlMRUQgICAgICAgICAgMHgwMDAwMDUwMUwKKyNkZWZpbmUgRVJSTE9HX0lOSVRJQUxJWkVfQURBUFRFUiAgICAgICAweDAwMDAwNTAyTAorI2RlZmluZSBFUlJMT0dfUkVNT1ZFX01JTklQT1JUICAgICAgICAgIDB4MDAwMDA1MDNMCisKKy8vIE5ESVNfRVJST1JfQ09ERV9SRVNPVVJDRV9DT05GTElDVAorI2RlZmluZSBFUlJMT0dfTUFQX0lPX1NQQUNFICAgICAgICAgICAgIDB4MDAwMDA2MDFMCisjZGVmaW5lIEVSUkxPR19RVUVSWV9BREFQVEVSX1JFU09VUkNFUyAgMHgwMDAwMDYwMkwKKyNkZWZpbmUgRVJSTE9HX05PX0lPX1JFU09VUkNFICAgICAgICAgICAweDAwMDAwNjAzTAorI2RlZmluZSBFUlJMT0dfTk9fSU5URVJSVVBUX1JFU09VUkNFICAgIDB4MDAwMDA2MDRMCisjZGVmaW5lIEVSUkxPR19OT19NRU1PUllfUkVTT1VSQ0UgICAgICAgMHgwMDAwMDYwNUwKKworCisvLyBXRFMgZGVmaW5pdGlvbgorI2RlZmluZQlNQVhfV0RTX0VOVFJZICAgICAgICAgICAgICAgNAorI2RlZmluZSBXRFNfUEFJUldJU0VfS0VZX09GRlNFVCAgICAgNjAgICAgLy8gV0RTIGxpbmtzIHVzZXMgcGFpcndpc2Uga2V5IzYwIH4gNjMgaW4gQVNJQyBwYWlyd2lzZSBrZXkgdGFibGUKKworI2RlZmluZQlXRFNfRElTQUJMRV9NT0RFICAgICAgICAgICAgMAorI2RlZmluZQlXRFNfUkVTVFJJQ1RfTU9ERSAgICAgICAgICAgMQorI2RlZmluZQlXRFNfQlJJREdFX01PREUgICAgICAgICAgICAgMgorI2RlZmluZQlXRFNfUkVQRUFURVJfTU9ERSAgICAgICAgICAgMworI2RlZmluZQlXRFNfTEFaWV9NT0RFICAgICAgICAgICAgICAgNAorCisKKyNkZWZpbmUgTUFYX01FU0hfTlVNCQkJCTAKKworI2RlZmluZSBNQVhfQVBDTElfTlVNCQkJCTAKKworI2RlZmluZSBNQVhfTUJTU0lEX05VTQkJCQkxCisjaWZkZWYgTUJTU19TVVBQT1JUCisjdW5kZWYJTUFYX01CU1NJRF9OVU0KKyNkZWZpbmUgTUFYX01CU1NJRF9OVU0JCQkJKDggLSBNQVhfTUVTSF9OVU0gLSBNQVhfQVBDTElfTlVNKQorI2VuZGlmIC8vIE1CU1NfU1VQUE9SVCAvLworCisvKiBzYW5pdHkgY2hlY2sgZm9yIGFwaWR4ICovCisjZGVmaW5lIE1CU1NfTVJfQVBJRFhfU0FOSVRZX0NIRUNLKGFwaWR4KSBcCisgICAgeyBpZiAoYXBpZHggPiBNQVhfTUJTU0lEX05VTSkgeyBcCisgICAgICAgICAgcHJpbnRrKCIlcz4gRXJyb3IhIGFwaWR4ID0gJWQgPiBNQVhfTUJTU0lEX05VTSFcbiIsIF9fRlVOQ1RJT05fXywgYXBpZHgpOyBcCisJICBhcGlkeCA9IE1BSU5fTUJTU0lEOyB9IH0KKworI2RlZmluZSBWQUxJRF9XQ0lEKF93Y2lkKQkoKF93Y2lkKSA+IDAgJiYgKF93Y2lkKSA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFICkKKworI2RlZmluZSBNQUlOX01CU1NJRCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGSVJTVF9NQlNTSUQgICAgICAgICAgICAgICAgMQorCisKKyNkZWZpbmUgTUFYX0JFQUNPTl9TSVpFCQkJCTUxMgorLy8gSWYgdGhlIE1BWF9NQlNTSURfTlVNIGlzIGxhcmdlciB0aGFuIDYsCisvLyBpdCBzaGFsbCByZXNlcnZlIHNvbWUgV0NJRCBzcGFjZSh3Y2lkIDIyMn4yNTMpIGZvciBiZWFjb24gZnJhbWVzLgorLy8gLQl0aGVzZSB3Y2lkIDIzOH4yNTMgYXJlIHJlc2VydmVkIGZvciBiZWFjb24jNihyYTYpLgorLy8gLQl0aGVzZSB3Y2lkIDIyMn4yMzcgYXJlIHJlc2VydmVkIGZvciBiZWFjb24jNyhyYTcpLgorI2lmIGRlZmluZWQoTUFYX01CU1NJRF9OVU0pICYmIChNQVhfTUJTU0lEX05VTSA9PSA4KQorI2RlZmluZSBIV19SRVNFUlZFRF9XQ0lECTIyMgorI2VsaWYgZGVmaW5lZChNQVhfTUJTU0lEX05VTSkgJiYgKE1BWF9NQlNTSURfTlVNID09IDcpCisjZGVmaW5lIEhXX1JFU0VSVkVEX1dDSUQJMjM4CisjZWxzZQorI2RlZmluZSBIV19SRVNFUlZFRF9XQ0lECTI1NQorI2VuZGlmCisKKy8vIFRoZW4gZGVkaWNhdGUgd2NpZCBvZiBERlMgYW5kIENhcnJpZXItU2Vuc2UuCisjZGVmaW5lIERGU19DVFNfV0NJRCAJCShIV19SRVNFUlZFRF9XQ0lEIC0gMSkKKyNkZWZpbmUgQ1NfQ1RTX1dDSUQgCQkoSFdfUkVTRVJWRURfV0NJRCAtIDIpCisjZGVmaW5lIExBU1RfU1BFQ0lGSUNfV0NJRAkoSFdfUkVTRVJWRURfV0NJRCAtIDIpCisKKy8vIElmIE1BWF9NQlNTSURfTlVNIGlzIDgsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSB3Y2lkIGZvciB0aGUgYXNzb2NpYXRlZCBTVEEgaXMgMjExLgorLy8gSWYgTUFYX01CU1NJRF9OVU0gaXMgNywgdGhlIG1heGltdW0gYXZhaWxhYmxlIHdjaWQgZm9yIHRoZSBhc3NvY2lhdGVkIFNUQSBpcyAyMjguCisjZGVmaW5lIE1BWF9BVkFJTEFCTEVfQ0xJRU5UX1dDSUQJKExBU1RfU1BFQ0lGSUNfV0NJRCAtIE1BWF9NQlNTSURfTlVNIC0gMSkKKworLy8gVFggbmVlZCBXQ0lEIHRvIGZpbmQgQ2lwaGVyIEtleQorLy8gdGhlc2Ugd2NpZCAyMTIgfiAyMTkgYXJlIHJlc2VydmVkIGZvciBiYy9tYyBwYWNrZXRzIGlmIE1BWF9NQlNTSURfTlVNIGlzIDguCisjZGVmaW5lIEdFVF9Hcm91cEtleV9XQ0lEKF9fd2NpZCwgX19ic3NpZHgpIFwKKwl7CQkJCQkJCQkJCVwKKwkJX193Y2lkID0gTEFTVF9TUEVDSUZJQ19XQ0lEIC0gKE1BWF9NQlNTSURfTlVNKSArIF9fYnNzaWR4OwlcCisJfQorCisjZGVmaW5lIElzR3JvdXBLZXlXQ0lEKF9fd2NpZCkgKCgoX193Y2lkKSA8IExBU1RfU1BFQ0lGSUNfV0NJRCkgJiYgKChfX3djaWQpID49IChMQVNUX1NQRUNJRklDX1dDSUQgLSAoTUFYX01CU1NJRF9OVU0pKSkpCisKKworLy8gZGVmaW5pdGlvbiB0byBzdXBwb3J0IG11bHRpcGxlIEJTU0lECisjZGVmaW5lIEJTUzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBCU1MxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQlNTMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEJTUzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBCU1M0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQlNTNSAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEJTUzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBCU1M3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTGVuZ3RoIGRlZmluaXRpb25zCisjZGVmaW5lIFBFRVJfS0VZX05PICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQUNfQUREUl9MRU4gICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVElNRVNUQU1QX0xFTiAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTICAgICAgTUFYX0xFTkdUSF9PRl9TVVBQT1JUX1JBVEVTIC8vIDEsIDIsIDUuNSwgMTEsIDYsIDksIDEyLCAxOCwgMjQsIDM2LCA0OCwgNTQKKyNkZWZpbmUgTUFYX0xFTl9PRl9LRVkgICAgICAgICAgICAgICAgICAzMiAgICAgIC8vIDMyIG9jdGV0cyA9PSAyNTYgYml0cywgUmVkZWZpbmUgZm9yIFdQQQorI2RlZmluZSBNQVhfTlVNX09GX0NIQU5ORUxTICAgICAgICAgICAgIE1BWF9OVU1fT0ZfQ0hTICAgICAgLy8gMTQgY2hhbm5lbHMgQDIuNEcgKyAgMTJAVU5JSSArIDQgQE1NQUMgKyAxMSBASGlwZXJMQU4yICsgNyBASmFwYW4gKyAxIGFzIE5VTEwgdGVybWluYXRpb24KKyNkZWZpbmUgTUFYX05VTV9PRl8xMUpDSEFOTkVMUyAgICAgICAgICAgICAyMCAgICAgIC8vIDE0IGNoYW5uZWxzIEAyLjRHICsgIDEyQFVOSUkgKyA0IEBNTUFDICsgMTEgQEhpcGVyTEFOMiArIDcgQEphcGFuICsgMSBhcyBOVUxMIHRlcm1pbmF0aW9uCisjZGVmaW5lIE1BWF9MRU5fT0ZfU1NJRCAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ0lQSEVSX1RFWFRfTEVOICAgICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgSEFTSF9UQUJMRV9TSVpFICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgTUFYX1ZJRV9MRU4gICAgICAgICAgICAgICAgICAgICAxMDI0ICAgLy8gTmV3IGZvciBXUEEgY2lwaGVyIHN1aXRlIHZhcmlhYmxlIElFIHNpemVzLgorI2RlZmluZSBNQVhfU1VQUE9SVF9NQ1MgICAgICAgICAgICAgMzIKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEFTSUMgV0NJRCBUYWJsZSBkZWZpbml0aW9uLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgQlNTSURfV0NJRAkJMQkvLyBpbiBpbmZyYSBtb2RlLCBhbHdheXMgcHV0IGJzc2lkIHdpdGggdGhpcyBXQ0lECisjZGVmaW5lIE1DQVNUX1dDSUQJMHgwCisjZGVmaW5lIEJTUzBNY2FzdF9XQ0lECTB4MAorI2RlZmluZSBCU1MxTWNhc3RfV0NJRAkweGY4CisjZGVmaW5lIEJTUzJNY2FzdF9XQ0lECTB4ZjkKKyNkZWZpbmUgQlNTM01jYXN0X1dDSUQJMHhmYQorI2RlZmluZSBCU1M0TWNhc3RfV0NJRAkweGZiCisjZGVmaW5lIEJTUzVNY2FzdF9XQ0lECTB4ZmMKKyNkZWZpbmUgQlNTNk1jYXN0X1dDSUQJMHhmZAorI2RlZmluZSBCU1M3TWNhc3RfV0NJRAkweGZlCisjZGVmaW5lIFJFU0VSVkVEX1dDSUQJCTB4ZmYKKworI2RlZmluZSBNQVhfTlVNX09GX0FDTF9MSVNUCQkJCU1BWF9OVU1CRVJfT0ZfQUNMCisKKyNkZWZpbmUgTUFYX0xFTl9PRl9NQUNfVEFCTEUgICAgICAgICAgICBNQVhfTlVNQkVSX09GX01BQyAvLyBpZiBNQVhfTUJTU0lEX05VTSBpcyA4LCB0aGlzIHZhbHVlIGNhbid0IGJlIGxhcmdlciB0aGFuIDIxMQorCisjaWYgTUFYX0xFTl9PRl9NQUNfVEFCTEU+TUFYX0FWQUlMQUJMRV9DTElFTlRfV0NJRAorI2Vycm9yIE1BWF9MRU5fT0ZfTUFDX1RBQkxFIGNhbiBub3QgYmUgbGFyZ2VyIHRoYW4gTUFYX0FWQUlMQUJMRV9DTElFTlRfV0NJRCEhISEKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9OVU1fT0ZfV0RTX0xJTktfUEVSQlNTSUQJICAgICAgICAgICAgMworI2RlZmluZSBNQVhfTlVNX09GX1dEU19MSU5LCSAgICAgICAgICAgIChNQVhfTlVNX09GX1dEU19MSU5LX1BFUkJTU0lEKk1BWF9NQlNTSURfTlVNKQorI2RlZmluZSBNQVhfTlVNX09GX0VWRU5UICAgICAgICAgICAgICAgIE1BWF9OVU1CRVJfT0ZfRVZFTlQKKyNkZWZpbmUgV0RTX0xJTktfU1RBUlRfV0NJRAkJCQkoTUFYX0xFTl9PRl9NQUNfVEFCTEUtMSkKKworI2RlZmluZSBOVU1fT0ZfVElECQkJOAorI2RlZmluZSBNQVhfQUlEX0JBICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFICAgICAgICAgICgoTlVNX09GX1RJRCAqIE1BWF9MRU5fT0ZfTUFDX1RBQkxFKS8yKS8vICAgKE5VTV9PRl9USUQqTUFYX0FJRF9CQSArIDMyKQkgLy9CbG9jayBBQ0sgcmVjaXBpZW50CisjZGVmaW5lIE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFICAgICAgICAgICgoTlVNX09GX1RJRCAqIE1BWF9MRU5fT0ZfTUFDX1RBQkxFKS8yKS8vICAgKE5VTV9PRl9USUQqTUFYX0FJRF9CQSArIDMyKSAgIC8vIEJsb2NrIEFDSyBvcmlnaW5hdG9yCisjZGVmaW5lIE1BWF9MRU5fT0ZfQlNTX1RBQkxFICAgICAgICAgICAgIDY0CisjZGVmaW5lIE1BWF9SRU9SREVSSU5HX01QRFVfTlVNCQkJIDUxMgorCisvLyBrZXkgcmVsYXRlZCBkZWZpbml0aW9ucworI2RlZmluZSBTSEFSRV9LRVlfTlVNICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTUFYX0xFTl9PRl9TSEFSRV9LRVkgICAgICAgICAgICAxNiAgICAvLyBieXRlIGNvdW50CisjZGVmaW5lIE1BWF9MRU5fT0ZfUEVFUl9LRVkgICAgICAgICAgICAgMTYgICAgLy8gYnl0ZSBjb3VudAorI2RlZmluZSBQQUlSV0lTRV9LRVlfTlVNICAgICAgICAgICAgICAgIDY0ICAgIC8vIGluIE1BQyBBU0lDIHBhaXJ3aXNlIGtleSB0YWJsZQorI2RlZmluZSBHUk9VUF9LRVlfTlVNICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUE1LX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBXRFNfUEFJUldJU0VfS0VZX09GRlNFVCAgICAgICAgIDYwICAgIC8vIFdEUyBsaW5rcyB1c2VzIHBhaXJ3aXNlIGtleSM2MCB+IDYzIGluIEFTSUMgcGFpcndpc2Uga2V5IHRhYmxlCisjZGVmaW5lCVBNS0lEX05PICAgICAgICAgICAgICAgICAgICAgICAgNCAgICAgLy8gTnVtYmVyIG9mIFBNS0lEIHNhdmVkIHN1cHBvcnRlZAorI2RlZmluZSBNQVhfTEVOX09GX01MTUVfQlVGRkVSICAgICAgICAgIDIwNDgKKworLy8gcG93ZXIgc3RhdHVzIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgUFdSX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBXUl9TQVZFICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQV1JfTU1QUyAgICAgICAgICAgICAgICAgICAgICAgIDIJCQkvL01JTU8gcG93ZXIgc2F2ZQorLy8jZGVmaW5lIFBXUl9VTktOT1dOICAgICAgICAgICAgICAgICAgIDIKKworLy8gQXV0aCBhbmQgQXNzb2MgbW9kZSByZWxhdGVkIGRlZmluaXRpb25zCisjZGVmaW5lIEFVVEhfTU9ERV9PUEVOICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBVVRIX01PREVfS0VZICAgICAgICAgICAgICAgICAgIDB4MDEKKy8vI2RlZmluZSBBVVRIX01PREVfQVVUT19TV0lUQ0ggICAgICAgICAweDAzCisvLyNkZWZpbmUgQVVUSF9NT0RFX0RFQVVUSCAgICAgICAgICAgICAgMHgwNAorLy8jZGVmaW5lIEFVVEhfTU9ERV9VUExBWUVSICAgICAgICAgICAgIDB4MDUgLy8gcmVzZXJ2ZWQgZm9yIDgwMi4xMWkgdXNlCisKKy8vIEJTUyBUeXBlIGRlZmluaXRpb25zCisjZGVmaW5lIEJTU19BREhPQyAgICAgICAgICAgICAgICAgICAgICAgMCAgLy8gPSBOZGlzODAyXzExSUJTUworI2RlZmluZSBCU1NfSU5GUkEgICAgICAgICAgICAgICAgICAgICAgIDEgIC8vID0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlCisjZGVmaW5lIEJTU19BTlkgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLy8gPSBOZGlzODAyXzExQXV0b1Vua25vd24KKyNkZWZpbmUgQlNTX01PTklUT1IJCQkgICAgICAgICAgICAzICAvLyA9IE5kaXM4MDJfMTFNb25pdG9yCisKKworLy8gUmVhc29uIGNvZGUgZGVmaW5pdGlvbnMKKyNkZWZpbmUgUkVBU09OX1JFU0VSVkVEICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJFQVNPTl9VTlNQRUNJRlkgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRUFTT05fTk9fTE9OR0VSX1ZBTElEICAgICAgICAgIDIKKyNkZWZpbmUgUkVBU09OX0RFQVVUSF9TVEFfTEVBVklORyAgICAgICAzCisjZGVmaW5lIFJFQVNPTl9ESVNBU1NPQ19JTkFDVElWRSAgICAgICAgNAorI2RlZmluZSBSRUFTT05fRElTQVNTUENfQVBfVU5BQkxFICAgICAgIDUKKyNkZWZpbmUgUkVBU09OX0NMUzJFUlIgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJFQVNPTl9DTFMzRVJSICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcgICAgIDgKKyNkZWZpbmUgUkVBU09OX1NUQV9SRVFfQVNTT0NfTk9UX0FVVEggICA5CisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX0lFICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgUkVBU09OX01JQ19GQUlMVVJFICAgICAgICAgICAgICAxNAorI2RlZmluZSBSRUFTT05fNF9XQVlfVElNRU9VVCAgICAgICAgICAgIDE1CisjZGVmaW5lIFJFQVNPTl9HUk9VUF9LRVlfSFNfVElNRU9VVCAgICAgMTYKKyNkZWZpbmUgUkVBU09OX0lFX0RJRkZFUkVOVCAgICAgICAgICAgICAxNworI2RlZmluZSBSRUFTT05fTUNJUEhFUl9OT1RfVkFMSUQgICAgICAgIDE4CisjZGVmaW5lIFJFQVNPTl9VQ0lQSEVSX05PVF9WQUxJRCAgICAgICAgMTkKKyNkZWZpbmUgUkVBU09OX0FLTVBfTk9UX1ZBTElEICAgICAgICAgICAyMAorI2RlZmluZSBSRUFTT05fVU5TVVBQT1JUX1JTTkVfVkVSICAgICAgIDIxCisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX1JTTkVfQ0FQICAgICAgICAgMjIKKyNkZWZpbmUgUkVBU09OXzgwMjFYX0FVVEhfRkFJTCAgICAgICAgICAyMworI2RlZmluZSBSRUFTT05fQ0lQSEVSX1NVSVRFX1JFSkVDVEVEICAgIDI0CisjZGVmaW5lIFJFQVNPTl9ERUNMSU5FRCAgICAgICAgICAgICAgICAgMzcKKworI2RlZmluZSBSRUFTT05fUU9TX1VOU1BFQ0lGWSAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkVBU09OX1FPU19MQUNLX0JBTkRXSURUSCAgICAgICAgIDMzCisjZGVmaW5lIFJFQVNPTl9QT09SX0NIQU5ORUxfQ09ORElUSU9OICAgICAzNAorI2RlZmluZSBSRUFTT05fUU9TX09VVFNJREVfVFhPUF9MSU1JVElPTiAgMzUKKyNkZWZpbmUgUkVBU09OX1FPU19RU1RBX0xFQVZJTkdfUUJTUyAgICAgIDM2CisjZGVmaW5lIFJFQVNPTl9RT1NfVU5XQU5URURfTUVDSEFOSVNNICAgICAzNworI2RlZmluZSBSRUFTT05fUU9TX01FQ0hfU0VUVVBfUkVRVUlSRUQgICAgMzgKKyNkZWZpbmUgUkVBU09OX1FPU19SRVFVRVNUX1RJTUVPVVQgICAgICAgIDM5CisjZGVmaW5lIFJFQVNPTl9RT1NfQ0lQSEVSX05PVF9TVVBQT1JUICAgICA0NQorCisvLyBTdGF0dXMgY29kZSBkZWZpbml0aW9ucworI2RlZmluZSBNTE1FX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUxNRV9VTlNQRUNJRllfRkFJTCAgICAgICAgICAgICAxCisjZGVmaW5lIE1MTUVfQ0FOTk9UX1NVUFBPUlRfQ0FQICAgICAgICAgMTAKKyNkZWZpbmUgTUxNRV9SRUFTU09DX0RFTllfQVNTT0NfRVhJU1QgICAxMQorI2RlZmluZSBNTE1FX0FTU09DX0RFTllfT1VUX1NDT1BFICAgICAgIDEyCisjZGVmaW5lIE1MTUVfQUxHX05PVF9TVVBQT1JUICAgICAgICAgICAgMTMKKyNkZWZpbmUgTUxNRV9TRVFfTlJfT1VUX09GX1NFUVVFTkNFICAgICAxNAorI2RlZmluZSBNTE1FX1JFSl9DSEFMTEVOR0VfRkFJTFVSRSAgICAgIDE1CisjZGVmaW5lIE1MTUVfUkVKX1RJTUVPVVQgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNTE1FX0FTU09DX1JFSl9VTkFCTEVfSEFORExFX1NUQSAgMTcKKyNkZWZpbmUgTUxNRV9BU1NPQ19SRUpfREFUQV9SQVRFICAgICAgICAgIDE4CisKKyNkZWZpbmUgTUxNRV9BU1NPQ19SRUpfTk9fRVhUX1JBVEUgICAgICAgIDIyCisjZGVmaW5lIE1MTUVfQVNTT0NfUkVKX05PX0VYVF9SQVRFX1BCQ0MgICAyMworI2RlZmluZSBNTE1FX0FTU09DX1JFSl9OT19DQ0tfT0ZETSAgICAgICAgMjQKKworI2RlZmluZSBNTE1FX1FPU19VTlNQRUNJRlkgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgTUxNRV9SRVFVRVNUX0RFQ0xJTkVEICAgICAgICAgICAgIDM3CisjZGVmaW5lIE1MTUVfUkVRVUVTVF9XSVRIX0lOVkFMSURfUEFSQU0gICAzOAorI2RlZmluZSBNTE1FX0RMU19OT1RfQUxMT1dfSU5fUUJTUyAgICAgICAgNDgKKyNkZWZpbmUgTUxNRV9ERVNUX1NUQV9OT1RfSU5fUUJTUyAgICAgICAgIDQ5CisjZGVmaW5lIE1MTUVfREVTVF9TVEFfSVNfTk9UX0FfUVNUQSAgICAgICA1MAorCisjZGVmaW5lIE1MTUVfSU5WQUxJRF9GT1JNQVQgICAgICAgICAgICAgMHg1MQorI2RlZmluZSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0UgICAgICAgICAgIDB4NTIKKyNkZWZpbmUgTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVCAgICAgICAweDUzCisjZGVmaW5lIE1MTUVfTUFDX1RBQkxFX0ZBSUwgICAgICAgICAgICAgMHg1NAorCisvLyBJRSBjb2RlCisjZGVmaW5lIElFX1NTSUQgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJRV9TVVBQX1JBVEVTICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUVfRkhfUEFSTSAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElFX0RTX1BBUk0gICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJRV9DRl9QQVJNICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSUVfVElNICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIElFX0lCU1NfUEFSTSAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJRV9DT1VOVFJZICAgICAgICAgICAgICAgICAgICAgIDcgICAgIC8vIDgwMi4xMWQKKyNkZWZpbmUgSUVfODAyXzExRF9SRVFVRVNUICAgICAgICAgICAgICAxMCAgICAvLyA4MDIuMTFkCisjZGVmaW5lIElFX1FCU1NfTE9BRCAgICAgICAgICAgICAgICAgICAgMTEgICAgLy8gODAyLjExZSBkOQorI2RlZmluZSBJRV9FRENBX1BBUkFNRVRFUiAgICAgICAgICAgICAgIDEyICAgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgSUVfVFNQRUMgICAgICAgICAgICAgICAgICAgICAgICAxMyAgICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIElFX1RDTEFTICAgICAgICAgICAgICAgICAgICAgICAgMTQgICAgLy8gODAyLjExZSBkOQorI2RlZmluZSBJRV9TQ0hFRFVMRSAgICAgICAgICAgICAgICAgICAgIDE1ICAgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgSUVfQ0hBTExFTkdFX1RFWFQgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJRV9QT1dFUl9DT05TVFJBSU5UICAgICAgICAgICAgIDMyICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9QT1dFUl9DQVBBQklMSVRZICAgICAgICAgICAgIDMzICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9UUENfUkVRVUVTVCAgICAgICAgICAgICAgICAgIDM0ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9UUENfUkVQT1JUICAgICAgICAgICAgICAgICAgIDM1ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9TVVBQX0NIQU5ORUxTICAgICAgICAgICAgICAgIDM2ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlQgIDM3ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9NRUFTVVJFTUVOVF9SRVFVRVNUICAgICAgICAgIDM4ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9NRUFTVVJFTUVOVF9SRVBPUlQgICAgICAgICAgIDM5ICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9RVUlFVCAgICAgICAgICAgICAgICAgICAgICAgIDQwICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9JQlNTX0RGUyAgICAgICAgICAgICAgICAgICAgIDQxICAgIC8vIDgwMi4xMWggZDMuMworI2RlZmluZSBJRV9FUlAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyICAgIC8vIDgwMi4xMWcKKyNkZWZpbmUgSUVfVFNfREVMQVkgICAgICAgICAgICAgICAgICAgICA0MyAgICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIElFX1RDTEFTX1BST0NFU1NJTkcgICAgICAgICAgICAgNDQgICAgLy8gODAyLjExZSBkOQorI2RlZmluZSBJRV9RT1NfQ0FQQUJJTElUWSAgICAgICAgICAgICAgIDQ2ICAgIC8vIDgwMi4xMWUgZDYKKyNkZWZpbmUgSUVfSFRfQ0FQICAgICAgICAgICAgICAgICAgICAgICA0NSAgICAvLyA4MDIuMTFuIGQxLiBIVCBDQVBBQklMSVRZLiBFTEVNRU5UIElEIFRCRAorI2RlZmluZSBJRV9BUF9DSEFOTkVMX1JFUE9SVAkJCTUxICAgIC8vIDgwMi4xMWsgZDYKKyNkZWZpbmUgSUVfSFRfQ0FQMiAgICAgICAgICAgICAgICAgICAgICAgICA1MiAgICAvLyA4MDIuMTFuIGQxLiBIVCBDQVBBQklMSVRZLiBFTEVNRU5UIElEIFRCRAorI2RlZmluZSBJRV9SU04gICAgICAgICAgICAgICAgICAgICAgICAgIDQ4ICAgIC8vIDgwMi4xMWkgZDMuMAorI2RlZmluZSBJRV9XUEEyICAgICAgICAgICAgICAgICAgICAgICAgIDQ4ICAgIC8vIFdQQTIKKyNkZWZpbmUgSUVfRVhUX1NVUFBfUkFURVMgICAgICAgICAgICAgICA1MCAgICAvLyA4MDIuMTFnCisjZGVmaW5lIElFX1NVUFBfUkVHX0NMQVNTICAgICAgICAgICAgICAgNTkgICAgLy8gODAyLjExeS4gU3VwcG9ydGVkIHJlZ3VsYXRvcnkgY2xhc3Nlcy4KKyNkZWZpbmUgSUVfRVhUX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVAk2MAkvLyA4MDIuMTFuCisjZGVmaW5lIElFX0FERF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA2MSAgICAvLyA4MDIuMTFuIGQxLiBBRERJVElPTkFMIEhUIENBUEFCSUxJVFkuIEVMRU1FTlQgSUQgVEJECisjZGVmaW5lIElFX0FERF9IVDIgICAgICAgICAgICAgICAgICAgICAgICA1MyAgICAvLyA4MDIuMTFuIGQxLiBBRERJVElPTkFMIEhUIENBUEFCSUxJVFkuIEVMRU1FTlQgSUQgVEJECisKKworLy8gRm9yIDgwMi4xMW4gRDMuMDMKKy8vI2RlZmluZSBJRV9ORVdfRVhUX0NIQV9PRkZTRVQgICAgICAgICAgICAgNjIgICAgLy8gODAyLjExbiBkMS4gTmV3IGV4dGVuc2lvbiBjaGFubmVsIG9mZnNldCBlbGVtZXQKKyNkZWZpbmUgSUVfU0VDT05EQVJZX0NIX09GRlNFVAkJNjIJLy8gODAyLjExbiBEMy4wMwlTZWNvbmRhcnkgQ2hhbm5lbCBPZmZzZXQgZWxlbWVudAorI2RlZmluZSBJRV9XQVBJCQkJCQkJCTY4CQkvLyBXQVBJIGluZm9ybWF0aW9uIGVsZW1lbnQKKyNkZWZpbmUgSUVfMjA0MF9CU1NfQ09FWElTVCAgICAgICAgICAgICAgIDcyICAgIC8vIDgwMi4xMW4gRDMuMC4zCisjZGVmaW5lIElFXzIwNDBfQlNTX0lOVE9MRVJBTlRfUkVQT1JUICAgICA3MyAgICAvLyA4MDIuMTFuIEQzLjAzCisjZGVmaW5lIElFX09WRVJMQVBCU1NfU0NBTl9QQVJNICAgICAgICAgICA3NCAgICAvLyA4MDIuMTFuIEQzLjAzCisjZGVmaW5lIElFX0VYVF9DQVBBQklMSVRZICAgICAgICAgICAgICAgIDEyNyAgIC8vIDgwMi4xMW4gRDMuMDMKKworCisjZGVmaW5lIElFX1dQQSAgICAgICAgICAgICAgICAgICAgICAgICAgMjIxICAgLy8gV1BBCisjZGVmaW5lIElFX1ZFTkRPUl9TUEVDSUZJQyAgICAgICAgICAgICAgMjIxICAgLy8gV2lmaSBXTU0gKFdNRSkKKworI2RlZmluZSBPVUlfQlJPQURDT01fSFQgICAgICAgICAgICAgIDUxICAgLy8KKyNkZWZpbmUgT1VJX0JST0FEQ09NX0hUQUREICAgICAgICAgICAgICA1MiAgIC8vCisjZGVmaW5lIE9VSV9QUkVOX0hUX0NBUCAgICAgICAgICAgICAgNTEgICAvLworI2RlZmluZSBPVUlfUFJFTl9BRERfSFQgICAgICAgICAgICAgIDUyICAgLy8KKworLy8gQ0NYIGluZm9ybWF0aW9uCisjZGVmaW5lIElFX0FJUk9ORVRfQ0tJUCAgICAgICAgICAgICAgICAgMTMzICAgLy8gQ0NYMS4wIElEIDg1SCBmb3IgQ0tJUAorI2RlZmluZSBJRV9BUF9UWF9QT1dFUiAgICAgICAgICAgICAgICAgIDE1MCAgIC8vIENDWCAyLjAgZm9yIEFQIHRyYW5zbWl0IHBvd2VyCisjZGVmaW5lIElFX01FQVNVUkVNRU5UX0NBUEFCSUxJVFkgICAgICAgMjIxICAgLy8gQ0NYIDIuMAorI2RlZmluZSBJRV9DQ1hfVjIgICAgICAgICAgICAgICAgICAgICAgIDIyMQorI2RlZmluZSBJRV9BSVJPTkVUX0lQQUREUkVTUyAgICAgICAgICAgIDE0OSAgIC8vIENDWCBJRCA5NUggZm9yIElQIEFkZHJlc3MKKyNkZWZpbmUgSUVfQUlST05FVF9DQ0tNUkVBU1NPQyAgICAgICAgICAxNTYgICAvLyBDQ1ggSUQgOUNIIGZvciBDQ0tNIFJlYXNzb2NpYXRpb24gUmVxdWVzdCBlbGVtZW50CisjZGVmaW5lIENLSVBfTkVHT1RJQVRJT05fTEVOR1RIICAgICAgICAgMzAKKyNkZWZpbmUgQUlST05FVF9JUEFERFJFU1NfTEVOR1RIICAgICAgICAxMAorI2RlZmluZSBBSVJPTkVUX0NDS01SRUFTU09DX0xFTkdUSCAgICAgIDI0CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FIHN0YXRlIG1hY2hpbmUgZGVmaW5pdGlvbgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gU1RBIE1MTUUgc3RhdGUgbWFoY2luZXMKKyNkZWZpbmUgQVNTT0NfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAxCisjZGVmaW5lIEFVVEhfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVRIX1JTUF9TVEFURV9NQUNISU5FICAgICAgICAgIDMKKyNkZWZpbmUgU1lOQ19TVEFURV9NQUNISU5FICAgICAgICAgICAgICA0CisjZGVmaW5lIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FICAgICAgICAgNQorI2RlZmluZSBXUEFfUFNLX1NUQVRFX01BQ0hJTkUgICAgICAgICAgIDYKKyNkZWZpbmUgTEVBUF9TVEFURV9NQUNISU5FICAgICAgICAgICAgICA3CisjZGVmaW5lIEFJUk9ORVRfU1RBVEVfTUFDSElORSAgICAgICAgICAgOAorI2RlZmluZSBBQ1RJT05fU1RBVEVfTUFDSElORSAgICAgICAgICAgOQorCisvLyBBUCBNTE1FIHN0YXRlIG1hY2hpbmVzCisjZGVmaW5lIEFQX0FTU09DX1NUQVRFX01BQ0hJTkUgICAgICAgICAgMTEKKyNkZWZpbmUgQVBfQVVUSF9TVEFURV9NQUNISU5FICAgICAgICAgICAxMgorI2RlZmluZSBBUF9BVVRIX1JTUF9TVEFURV9NQUNISU5FICAgICAgIDEzCisjZGVmaW5lIEFQX1NZTkNfU1RBVEVfTUFDSElORSAgICAgICAgICAgMTQKKyNkZWZpbmUgQVBfQ05UTF9TVEFURV9NQUNISU5FICAgICAgICAgICAxNQorI2RlZmluZSBBUF9XUEFfU1RBVEVfTUFDSElORSAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgV1NDX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAxNworI2RlZmluZSBXU0NfVVBOUF9TVEFURV9NQUNISU5FCQkgICAgMTgKKworCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKyNkZWZpbmUgRExTX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAgICAyNgorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisvLworLy8gU1RBJ3MgQ09OVFJPTC9DT05ORUNUIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBDTlRMX0lETEUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ05UTF9XQUlUX0RJU0FTU09DICAgICAgICAgICAgICAxCisjZGVmaW5lIENOVExfV0FJVF9KT0lOICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDTlRMX1dBSVRfUkVBU1NPQyAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ05UTF9XQUlUX1NUQVJUICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENOVExfV0FJVF9BVVRIICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDTlRMX1dBSVRfQVNTT0MgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ05UTF9XQUlUX0FVVEgyICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENOVExfV0FJVF9PSURfTElTVF9TQ0FOICAgICAgICAgOAorI2RlZmluZSBDTlRMX1dBSVRfT0lEX0RJU0FTU09DICAgICAgICAgIDkKKyNpZmRlZiBSVDI4NzAKKyNkZWZpbmUgQ05UTF9XQUlUX1NDQU5fRk9SX0NPTk5FQ1QgICAgICAxMAorI2VuZGlmIC8vIFJUMjg3MCAvLworCisjZGVmaW5lIE1UMl9BU1NPQ19DT05GICAgICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgTVQyX0FVVEhfQ09ORiAgICAgICAgICAgICAgICAgICAzNQorI2RlZmluZSBNVDJfREVBVVRIX0NPTkYgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIE1UMl9ESVNBU1NPQ19DT05GICAgICAgICAgICAgICAgMzcKKyNkZWZpbmUgTVQyX1JFQVNTT0NfQ09ORiAgICAgICAgICAgICAgICAzOAorI2RlZmluZSBNVDJfUFdSX01HTVRfQ09ORiAgICAgICAgICAgICAgIDM5CisjZGVmaW5lIE1UMl9KT0lOX0NPTkYgICAgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgTVQyX1NDQU5fQ09ORiAgICAgICAgICAgICAgICAgICA0MQorI2RlZmluZSBNVDJfU1RBUlRfQ09ORiAgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5lIE1UMl9HRVRfQ09ORiAgICAgICAgICAgICAgICAgICAgNDMKKyNkZWZpbmUgTVQyX1NFVF9DT05GICAgICAgICAgICAgICAgICAgICA0NAorI2RlZmluZSBNVDJfUkVTRVRfQ09ORiAgICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIE1UMl9NTE1FX1JPQU1JTkdfUkVRICAgICAgICAgICAgNTIKKworI2RlZmluZSBDTlRMX0ZVTkNfU0laRSAgICAgICAgICAgICAgICAgIDEKKworLy8KKy8vIFNUQSdzIEFTU09DIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBU1NPQ19JRExFICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVNTT0NfV0FJVF9SU1AgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJFQVNTT0NfV0FJVF9SU1AgICAgICAgICAgICAgICAgMgorI2RlZmluZSBESVNBU1NPQ19XQUlUX1JTUCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTUFYX0FTU09DX1NUQVRFICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgQVNTT0NfTUFDSElORV9CQVNFICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9NTE1FX0FTU09DX1JFUSAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfTUxNRV9SRUFTU09DX1JFUSAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX01MTUVfRElTQVNTT0NfUkVRICAgICAgICAgICAyCisjZGVmaW5lIE1UMl9QRUVSX0RJU0FTU09DX1JFUSAgICAgICAgICAgMworI2RlZmluZSBNVDJfUEVFUl9BU1NPQ19SRVEgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTVQyX1BFRVJfQVNTT0NfUlNQICAgICAgICAgICAgICA1CisjZGVmaW5lIE1UMl9QRUVSX1JFQVNTT0NfUkVRICAgICAgICAgICAgNgorI2RlZmluZSBNVDJfUEVFUl9SRUFTU09DX1JTUCAgICAgICAgICAgIDcKKyNkZWZpbmUgTVQyX0RJU0FTU09DX1RJTUVPVVQgICAgICAgICAgICA4CisjZGVmaW5lIE1UMl9BU1NPQ19USU1FT1VUICAgICAgICAgICAgICAgOQorI2RlZmluZSBNVDJfUkVBU1NPQ19USU1FT1VUICAgICAgICAgICAgIDEwCisjZGVmaW5lIE1BWF9BU1NPQ19NU0cgICAgICAgICAgICAgICAgICAgMTEKKworI2RlZmluZSBBU1NPQ19GVU5DX1NJWkUgICAgICAgICAgICAgICAgIChNQVhfQVNTT0NfU1RBVEUgKiBNQVhfQVNTT0NfTVNHKQorCisvLworLy8gQUNUIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBQ1RfSURMRSAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1BWF9BQ1RfU1RBVEUgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBQ1RfTUFDSElORV9CQVNFICAgICAgICAgICAgICAwCisKKy8vVGhvc2UgUEVFUl94eF9DQVRFIG51bWJlciBpcyBiYXNlZCBvbiByZWFsIENhdGVnYXJ5IHZhbHVlIGluIElFRUUgc3BlYy4gUGxlYXNlIGRvbidlcyBtb2RpZnkgaXQgYnkgeW91ciBzZWxmLgorLy9DYXRlZ29yeQorI2RlZmluZSBNVDJfUEVFUl9TUEVDVFJVTV9DQVRFICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9QRUVSX1FPU19DQVRFICAgICAgICAgICAgICAxCisjZGVmaW5lIE1UMl9QRUVSX0RMU19DQVRFICAgICAgICAgICAgIDIKKyNkZWZpbmUgTVQyX1BFRVJfQkFfQ0FURSAgICAgICAgICAgICAzCisjZGVmaW5lIE1UMl9QRUVSX1BVQkxJQ19DQVRFICAgICAgICAgICAgIDQKKyNkZWZpbmUgTVQyX1BFRVJfUk1fQ0FURSAgICAgICAgICAgICA1CisjZGVmaW5lIE1UMl9QRUVSX0hUX0NBVEUgICAgICAgICAgICAgNwkvLwk3LjQuNworI2RlZmluZSBNQVhfUEVFUl9DQVRFX01TRyAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIE1UMl9NTE1FX0FERF9CQV9DQVRFICAgICAgICAgICAgIDgKKyNkZWZpbmUgTVQyX01MTUVfT1JJX0RFTEJBX0NBVEUgICAgICAgICAgICAgOQorI2RlZmluZSBNVDJfTUxNRV9SRUNfREVMQkFfQ0FURSAgICAgICAgICAgICAxMAorI2RlZmluZSBNVDJfTUxNRV9RT1NfQ0FURSAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgTVQyX01MTUVfRExTX0NBVEUgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTVQyX0FDVF9JTlZBTElEICAgICAgICAgICAgIDEzCisjZGVmaW5lIE1BWF9BQ1RfTVNHICAgICAgICAgICAgICAgICAgIDE0CisKKy8vQ2F0ZWdvcnkgZmllbGQKKyNkZWZpbmUgQ0FURUdPUllfU1BFQ1RSVU0JCTAKKyNkZWZpbmUgQ0FURUdPUllfUU9TCQkJMQorI2RlZmluZSBDQVRFR09SWV9ETFMJCQkyCisjZGVmaW5lIENBVEVHT1JZX0JBCQkJMworI2RlZmluZSBDQVRFR09SWV9QVUJMSUMJCTQKKyNkZWZpbmUgQ0FURUdPUllfUk0JCQk1CisjZGVmaW5lIENBVEVHT1JZX0hUCQkJNworCisKKy8vIERMUyBBY3Rpb24gZnJhbWUgZGVmaW5pdGlvbgorI2RlZmluZSBBQ1RJT05fRExTX1JFUVVFU1QJCQkwCisjZGVmaW5lIEFDVElPTl9ETFNfUkVTUE9OU0UJCQkxCisjZGVmaW5lIEFDVElPTl9ETFNfVEVBUkRPV04JCQkyCisKKy8vU3BlY3RydW0gIEFjdGlvbiBmaWVsZCB2YWx1ZSA4MDIuMTFoIDcuNC4xCisjZGVmaW5lIFNQRUNfTVJRCTAJLy8gUmVxdWVzdAorI2RlZmluZSBTUEVDX01SUAkxCS8vUmVwb3J0CisjZGVmaW5lIFNQRUNfVFBDUlEJMgorI2RlZmluZSBTUEVDX1RQQ1JQCTMKKyNkZWZpbmUgU1BFQ19DSEFOTkVMX1NXSVRDSAk0CisKKworLy9CQSAgQWN0aW9uIGZpZWxkIHZhbHVlCisjZGVmaW5lIEFEREJBX1JFUQkwCisjZGVmaW5lIEFEREJBX1JFU1AJMQorI2RlZmluZSBERUxCQSAgIDIKKworLy9QdWJsaWMncyAgQWN0aW9uIGZpZWxkIHZhbHVlIGluIFB1YmxpYyBDYXRlZ29yeS4gIFNvbWUgaW4gODAyLjExeSBhbmQgc29tZSBpbiAxMW4KKyNkZWZpbmUgQUNUSU9OX0JTU18yMDQwX0NPRVhJU1QJCQkJMAkvLyAxMW4KKyNkZWZpbmUgQUNUSU9OX0RTRV9FTkFCTEVNRU5UCQkJCQkxCS8vIDExeSBEOS4wCisjZGVmaW5lIEFDVElPTl9EU0VfREVFTkFCTEVNRU5UCQkJCTIJLy8gMTF5IEQ5LjAKKyNkZWZpbmUgQUNUSU9OX0RTRV9SRUdfTE9DQVRJT05fQU5OT1VOQ0UJMwkvLyAxMXkgRDkuMAorI2RlZmluZSBBQ1RJT05fRVhUX0NIX1NXSVRDSF9BTk5PVU5DRQkJNAkvLyAxMXkgRDkuMAorI2RlZmluZSBBQ1RJT05fRFNFX01FQVNVUkVNRU5UX1JFUQkJCTUJLy8gMTF5IEQ5LjAKKyNkZWZpbmUgQUNUSU9OX0RTRV9NRUFTVVJFTUVOVF9SRVBPUlQJCTYJLy8gMTF5IEQ5LjAKKyNkZWZpbmUgQUNUSU9OX01FQVNVUkVNRU5UX1BJTE9UX0FDVElPTgkJNyAgCS8vIDExeSBEOS4wCisjZGVmaW5lIEFDVElPTl9EU0VfUE9XRVJfQ09OU1RSQUlOVAkJCTgJLy8gMTF5IEQ5LjAKKworCisvL0hUICBBY3Rpb24gZmllbGQgdmFsdWUKKyNkZWZpbmUgTk9USUZZX0JXX0FDVElPTgkJCQkwCisjZGVmaW5lIFNNUFNfQUNUSU9OCQkJCQkJMQorI2RlZmluZSBQU01QX0FDVElPTiAgIAkJCQkJMgorI2RlZmluZSBTRVRQQ09fQUNUSU9OCQkJCQkzCisjZGVmaW5lIE1JTU9fQ0hBX01FQVNVUkVfQUNUSU9OCQkJNAorI2RlZmluZSBNSU1PX05fQkVBQ09ORk9STQkJCQk1CisjZGVmaW5lIE1JTU9fQkVBQ09ORk9STQkJCQkJNgorI2RlZmluZSBBTlRFTk5BX1NFTEVDVAkJCQkJNworI2RlZmluZSBIVF9JTkZPX0VYQ0hBTkdFCQkJCTgKKworI2RlZmluZSBBQ1RfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAoTUFYX0FDVF9TVEFURSAqIE1BWF9BQ1RfTVNHKQorLy8KKy8vIFNUQSdzIEFVVEhFTlRJQ0FUSU9OIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZ2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVVUSF9SRVFfSURMRSAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVVEhfV0FJVF9TRVEyICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVRIX1dBSVRfU0VRNCAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUFYX0FVVEhfU1RBVEUgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgQVVUSF9NQUNISU5FX0JBU0UgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9NTE1FX0FVVEhfUkVRICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfUEVFUl9BVVRIX0VWRU4gICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX0FVVEhfVElNRU9VVCAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1BWF9BVVRIX01TRyAgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIEFVVEhfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAgKE1BWF9BVVRIX1NUQVRFICogTUFYX0FVVEhfTVNHKQorCisvLworLy8gU1RBJ3MgQVVUSF9SU1Agc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIEFVVEhfUlNQX0lETEUgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVRIX1JTUF9XQUlUX0NIQUwgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUFYX0FVVEhfUlNQX1NUQVRFICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgQVVUSF9SU1BfTUFDSElORV9CQVNFICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9BVVRIX0NIQUxMRU5HRV9USU1FT1VUICAgICAgMAorI2RlZmluZSBNVDJfUEVFUl9BVVRIX09ERCAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX1BFRVJfREVBVVRIICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1BWF9BVVRIX1JTUF9NU0cgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIEFVVEhfUlNQX0ZVTkNfU0laRSAgICAgICAgICAgICAgKE1BWF9BVVRIX1JTUF9TVEFURSAqIE1BWF9BVVRIX1JTUF9NU0cpCisKKy8vCisvLyBTVEEncyBTWU5DIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBTWU5DX0lETEUgICAgICAgICAgICAgICAgICAgICAgIDAgIC8vIG1lcmdlIE5PX0JTUyxJQlNTX0lETEUsSUJTU19BQ1RJVkUgYW5kIEJTUyBpbiB0byAxIHN0YXRlCisjZGVmaW5lIEpPSU5fV0FJVF9CRUFDT04gICAgICAgICAgICAgICAgMQorI2RlZmluZSBTQ0FOX0xJU1RFTiAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUFYX1NZTkNfU1RBVEUgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgU1lOQ19NQUNISU5FX0JBU0UgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9NTE1FX1NDQU5fUkVRICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfTUxNRV9KT0lOX1JFUSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX01MTUVfU1RBUlRfUkVRICAgICAgICAgICAgICAyCisjZGVmaW5lIE1UMl9QRUVSX0JFQUNPTiAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNVDJfUEVFUl9QUk9CRV9SU1AgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTVQyX1BFRVJfQVRJTSAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1UMl9TQ0FOX1RJTUVPVVQgICAgICAgICAgICAgICAgNgorI2RlZmluZSBNVDJfQkVBQ09OX1RJTUVPVVQgICAgICAgICAgICAgIDcKKyNkZWZpbmUgTVQyX0FUSU1fVElNRU9VVCAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE1UMl9QRUVSX1BST0JFX1JFUSAgICAgICAgICAgICAgOQorI2RlZmluZSBNQVhfU1lOQ19NU0cgICAgICAgICAgICAgICAgICAgIDEwCisKKyNkZWZpbmUgU1lOQ19GVU5DX1NJWkUgICAgICAgICAgICAgICAgICAoTUFYX1NZTkNfU1RBVEUgKiBNQVhfU1lOQ19NU0cpCisKKy8vTWVzc2FnZXMgZm9yIHRoZSBETFMgc3RhdGUgbWFjaGluZQorI2RlZmluZSBETFNfSURMRQkJCQkJCTAKKyNkZWZpbmUgTUFYX0RMU19TVEFURQkJCQkJMQorCisjZGVmaW5lIERMU19NQUNISU5FX0JBU0UJCQkJMAorI2RlZmluZSBNVDJfTUxNRV9ETFNfUkVRCQkJICAgIDAKKyNkZWZpbmUgTVQyX1BFRVJfRExTX1JFUQkJCSAgICAxCisjZGVmaW5lIE1UMl9QRUVSX0RMU19SU1AJCQkgICAgMgorI2RlZmluZSBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOCQkgICAgMworI2RlZmluZSBNVDJfUEVFUl9ETFNfVEVBUl9ET1dOCQkgICAgNAorI2RlZmluZSBNQVhfRExTX01TRwkJCQkgICAgICAgIDUKKworI2RlZmluZSBETFNfRlVOQ19TSVpFCQkJCQkoTUFYX0RMU19TVEFURSAqIE1BWF9ETFNfTVNHKQorCisvLworLy8gU1RBJ3MgV1BBLVBTSyBTdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgV1BBX1BTS19JRExFCQkJCQkwCisjZGVmaW5lIE1BWF9XUEFfUFNLX1NUQVRFCQkJCTEKKworI2RlZmluZSBXUEFfTUFDSElORV9CQVNFICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTVQyX0VBUFBhY2tldCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9FQVBPTFN0YXJ0ICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNVDJfRUFQT0xMb2dvZmYgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTVQyX0VBUE9MS2V5ICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1UMl9FQVBPTEFTRkFsZXJ0ICAgICAgICAgICAgICAgNAorI2RlZmluZSBNQVhfV1BBX1BTS19NU0cgICAgICAgICAgICAgICAgIDUKKworI2RlZmluZQlXUEFfUFNLX0ZVTkNfU0laRQkJCQkoTUFYX1dQQV9QU0tfU1RBVEUgKiBNQVhfV1BBX1BTS19NU0cpCisKKy8vCisvLyBTVEEncyBDSVNDTy1BSVJPTkVUIFN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBSVJPTkVUX0lETEUJCQkJCTAKKyNkZWZpbmUJQUlST05FVF9TQ0FOTklORwkJCQkxCisjZGVmaW5lIE1BWF9BSVJPTkVUX1NUQVRFCQkJCTIKKworI2RlZmluZSBBSVJPTkVUX01BQ0hJTkVfQkFTRQkJICAgIDAKKyNkZWZpbmUgTVQyX0FJUk9ORVRfTVNHCQkJCSAgICAwCisjZGVmaW5lIE1UMl9BSVJPTkVUX1NDQU5fUkVRCQkgICAgMQorI2RlZmluZSBNVDJfQUlST05FVF9TQ0FOX0RPTkUJCSAgICAyCisjZGVmaW5lIE1BWF9BSVJPTkVUX01TRwkJCQkgICAgMworCisjZGVmaW5lCUFJUk9ORVRfRlVOQ19TSVpFCQkJCShNQVhfQUlST05FVF9TVEFURSAqIE1BWF9BSVJPTkVUX01TRykKKworLy8KKy8vIFdTQyBTdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKworLy8KKy8vIEFQJ3MgQ09OVFJPTC9DT05ORUNUIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBUF9DTlRMX0ZVTkNfU0laRSAgICAgICAgICAgICAgIDEKKworLy8KKy8vIEFQJ3MgQVNTT0Mgc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIEFQX0FTU09DX0lETEUgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUF9NQVhfQVNTT0NfU1RBVEUgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBUF9BU1NPQ19NQUNISU5FX0JBU0UgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfTUxNRV9ESVNBU1NPQ19SRVEgICAgICAgICAwCisjZGVmaW5lIEFQTVQyX1BFRVJfRElTQVNTT0NfUkVRICAgICAgICAgMQorI2RlZmluZSBBUE1UMl9QRUVSX0FTU09DX1JFUSAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBNVDJfUEVFUl9SRUFTU09DX1JFUSAgICAgICAgICAzCisjZGVmaW5lIEFQTVQyX0NMUzNFUlIgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUF9NQVhfQVNTT0NfTVNHICAgICAgICAgICAgICAgIDUKKworI2RlZmluZSBBUF9BU1NPQ19GVU5DX1NJWkUgICAgICAgICAgICAgIChBUF9NQVhfQVNTT0NfU1RBVEUgKiBBUF9NQVhfQVNTT0NfTVNHKQorCisvLworLy8gQVAncyBBVVRIRU5USUNBVElPTiBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVBfQVVUSF9SRVFfSURMRSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQX01BWF9BVVRIX1NUQVRFICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIEFQX0FVVEhfTUFDSElORV9CQVNFICAgICAgICAgICAgMAorI2RlZmluZSBBUE1UMl9NTE1FX0RFQVVUSF9SRVEgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfQ0xTMkVSUiAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQX01BWF9BVVRIX01TRyAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEFQX0FVVEhfRlVOQ19TSVpFICAgICAgICAgICAgICAgKEFQX01BWF9BVVRIX1NUQVRFICogQVBfTUFYX0FVVEhfTVNHKQorCisvLworLy8gQVAncyBBVVRILVJTUCBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVBfQVVUSF9SU1BfSURMRSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQX01BWF9BVVRIX1JTUF9TVEFURSAgICAgICAgICAgMQorCisjZGVmaW5lIEFQX0FVVEhfUlNQX01BQ0hJTkVfQkFTRSAgICAgICAgMAorI2RlZmluZSBBUE1UMl9BVVRIX0NIQUxMRU5HRV9USU1FT1VUICAgIDAKKyNkZWZpbmUgQVBNVDJfUEVFUl9BVVRIX09ERCAgICAgICAgICAgICAxCisjZGVmaW5lIEFQTVQyX1BFRVJfREVBVVRIICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUF9NQVhfQVVUSF9SU1BfTVNHICAgICAgICAgICAgIDMKKworI2RlZmluZSBBUF9BVVRIX1JTUF9GVU5DX1NJWkUgICAgICAgICAgIChBUF9NQVhfQVVUSF9SU1BfU1RBVEUgKiBBUF9NQVhfQVVUSF9SU1BfTVNHKQorCisvLworLy8gQVAncyBTWU5DIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBUF9TWU5DX0lETEUgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBfU0NBTl9MSVNURU4JCQkJCTEKKyNkZWZpbmUgQVBfTUFYX1NZTkNfU1RBVEUgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgQVBfU1lOQ19NQUNISU5FX0JBU0UgICAgICAgICAgICAwCisjZGVmaW5lIEFQTVQyX1BFRVJfUFJPQkVfUkVRICAgICAgICAgICAgMAorI2RlZmluZSBBUE1UMl9QRUVSX0JFQUNPTiAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVBNVDJfTUxNRV9TQ0FOX1JFUQkJCQkyCisjZGVmaW5lIEFQTVQyX1BFRVJfUFJPQkVfUlNQCQkJMworI2RlZmluZSBBUE1UMl9TQ0FOX1RJTUVPVVQJCQkJNAorI2RlZmluZSBBUE1UMl9NTE1FX1NDQU5fQ05DTAkJCTUKKyNkZWZpbmUgQVBfTUFYX1NZTkNfTVNHICAgICAgICAgICAgICAgICA2CisKKyNkZWZpbmUgQVBfU1lOQ19GVU5DX1NJWkUgICAgICAgICAgICAgICAoQVBfTUFYX1NZTkNfU1RBVEUgKiBBUF9NQVhfU1lOQ19NU0cpCisKKy8vCisvLyBBUCdzIFdQQSBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVBfV1BBX1BUSyAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQX01BWF9XUEFfUFRLX1NUQVRFICAgICAgICAgICAgMQorCisjZGVmaW5lIEFQX1dQQV9NQUNISU5FX0JBU0UgICAgICAgICAgICAgMAorI2RlZmluZSBBUE1UMl9FQVBQYWNrZXQgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfRUFQT0xTdGFydCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQTVQyX0VBUE9MTG9nb2ZmICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUE1UMl9FQVBPTEtleSAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVBNVDJfRUFQT0xBU0ZBbGVydCAgICAgICAgICAgICA0CisjZGVmaW5lIEFQX01BWF9XUEFfTVNHICAgICAgICAgICAgICAgICAgNQorCisjZGVmaW5lIEFQX1dQQV9GVU5DX1NJWkUgICAgICAgICAgICAgICAgKEFQX01BWF9XUEFfUFRLX1NUQVRFICogQVBfTUFYX1dQQV9NU0cpCisKKworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLyB2YWx1ZSBkb21haW4gb2YgODAyLjExIGhlYWRlciBGQy5UeXRlLCB3aGljaCBpcyBiMy4uYjIgb2YgdGhlIDFzdC1ieXRlIG9mIE1BQyBoZWFkZXIKKyNkZWZpbmUgQlRZUEVfTUdNVCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQlRZUEVfQ05UTCAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQlRZUEVfREFUQSAgICAgICAgICAgICAgICAgIDIKKworLy8gdmFsdWUgZG9tYWluIG9mIDgwMi4xMSBNR01UIGZyYW1lJ3MgRkMuc3VidHlwZSwgd2hpY2ggaXMgYjcuLjQgb2YgdGhlIDFzdC1ieXRlIG9mIE1BQyBoZWFkZXIKKyNkZWZpbmUgU1VCVFlQRV9BU1NPQ19SRVEgICAgICAgICAgIDAKKyNkZWZpbmUgU1VCVFlQRV9BU1NPQ19SU1AgICAgICAgICAgIDEKKyNkZWZpbmUgU1VCVFlQRV9SRUFTU09DX1JFUSAgICAgICAgIDIKKyNkZWZpbmUgU1VCVFlQRV9SRUFTU09DX1JTUCAgICAgICAgIDMKKyNkZWZpbmUgU1VCVFlQRV9QUk9CRV9SRVEgICAgICAgICAgIDQKKyNkZWZpbmUgU1VCVFlQRV9QUk9CRV9SU1AgICAgICAgICAgIDUKKyNkZWZpbmUgU1VCVFlQRV9CRUFDT04gICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1VCVFlQRV9BVElNICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU1VCVFlQRV9ESVNBU1NPQyAgICAgICAgICAgIDEwCisjZGVmaW5lIFNVQlRZUEVfQVVUSCAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBTVUJUWVBFX0RFQVVUSCAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgU1VCVFlQRV9BQ1RJT04gICAgICAgICAgICAgIDEzCisjZGVmaW5lIFNVQlRZUEVfQUNUSU9OX05PX0FDSyAgICAgICAgICAgICAgMTQKKworLy8gdmFsdWUgZG9tYWluIG9mIDgwMi4xMSBDTlRMIGZyYW1lJ3MgRkMuc3VidHlwZSwgd2hpY2ggaXMgYjcuLjQgb2YgdGhlIDFzdC1ieXRlIG9mIE1BQyBoZWFkZXIKKyNkZWZpbmUgU1VCVFlQRV9XUkFQUEVSICAgICAgIAk3CisjZGVmaW5lIFNVQlRZUEVfQkxPQ0tfQUNLX1JFUSAgICAgICA4CisjZGVmaW5lIFNVQlRZUEVfQkxPQ0tfQUNLICAgICAgICAgICA5CisjZGVmaW5lIFNVQlRZUEVfUFNfUE9MTCAgICAgICAgICAgICAxMAorI2RlZmluZSBTVUJUWVBFX1JUUyAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgU1VCVFlQRV9DVFMgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFNVQlRZUEVfQUNLICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBTVUJUWVBFX0NGRU5EICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgU1VCVFlQRV9DRkVORF9DRkFDSyAgICAgICAgIDE1CisKKy8vIHZhbHVlIGRvbWFpbiBvZiA4MDIuMTEgREFUQSBmcmFtZSdzIEZDLnN1YnR5cGUsIHdoaWNoIGlzIGI3Li40IG9mIHRoZSAxc3QtYnl0ZSBvZiBNQUMgaGVhZGVyCisjZGVmaW5lIFNVQlRZUEVfREFUQSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNVQlRZUEVfREFUQV9DRkFDSyAgICAgICAgICAxCisjZGVmaW5lIFNVQlRZUEVfREFUQV9DRlBPTEwgICAgICAgICAyCisjZGVmaW5lIFNVQlRZUEVfREFUQV9DRkFDS19DRlBPTEwgICAzCisjZGVmaW5lIFNVQlRZUEVfTlVMTF9GVU5DICAgICAgICAgICA0CisjZGVmaW5lIFNVQlRZUEVfQ0ZBQ0sgICAgICAgICAgICAgICA1CisjZGVmaW5lIFNVQlRZUEVfQ0ZQT0xMICAgICAgICAgICAgICA2CisjZGVmaW5lIFNVQlRZUEVfQ0ZBQ0tfQ0ZQT0xMICAgICAgICA3CisjZGVmaW5lIFNVQlRZUEVfUURBVEEgICAgICAgICAgICAgICA4CisjZGVmaW5lIFNVQlRZUEVfUURBVEFfQ0ZBQ0sgICAgICAgICA5CisjZGVmaW5lIFNVQlRZUEVfUURBVEFfQ0ZQT0xMICAgICAgICAxMAorI2RlZmluZSBTVUJUWVBFX1FEQVRBX0NGQUNLX0NGUE9MTCAgMTEKKyNkZWZpbmUgU1VCVFlQRV9RT1NfTlVMTCAgICAgICAgICAgIDEyCisjZGVmaW5lIFNVQlRZUEVfUU9TX0NGQUNLICAgICAgICAgICAxMworI2RlZmluZSBTVUJUWVBFX1FPU19DRlBPTEwgICAgICAgICAgMTQKKyNkZWZpbmUgU1VCVFlQRV9RT1NfQ0ZBQ0tfQ0ZQT0xMICAgIDE1CisKKy8vIEFDSyBwb2xpY3kgb2YgUU9TIENvbnRyb2wgZmllbGQgYml0IDY6NQorI2RlZmluZSBOT1JNQUxfQUNLICAgICAgICAgICAgICAgICAgMHgwMCAgLy8gYjY6NSA9IDAwCisjZGVmaW5lIE5PX0FDSyAgICAgICAgICAgICAgICAgICAgICAweDIwICAvLyBiNjo1ID0gMDEKKyNkZWZpbmUgTk9fRVhQTElDSVRfQUNLICAgICAgICAgICAgIDB4NDAgIC8vIGI2OjUgPSAxMAorI2RlZmluZSBCTE9DS19BQ0sgICAgICAgICAgICAgICAgICAgMHg2MCAgLy8gYjY6NSA9IDExCisKKy8vCisvLyBydG1wX2RhdGEuYyB1c2UgdGhlc2UgZGVmaW5pdGlvbgorLy8KKyNkZWZpbmUgTEVOR1RIXzgwMl8xMSAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIExFTkdUSF84MDJfMTFfQU5EX0ggICAgICAgICAzMAorI2RlZmluZSBMRU5HVEhfODAyXzExX0NSQ19IICAgICAgICAgMzQKKyNkZWZpbmUgTEVOR1RIXzgwMl8xMV9DUkMgICAgICAgICAgIDI4CisjZGVmaW5lIExFTkdUSF84MDJfMTFfV0lUSF9BRERSNCAgICAzMAorI2RlZmluZSBMRU5HVEhfODAyXzMgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTEVOR1RIXzgwMl8zX1RZUEUgICAgICAgICAgIDIKKyNkZWZpbmUgTEVOR1RIXzgwMl8xX0ggICAgICAgICAgICAgIDgKKyNkZWZpbmUgTEVOR1RIX0VBUE9MX0ggICAgICAgICAgICAgIDQKKyNkZWZpbmUgTEVOR1RIX1dNTVFPU19ICQkJCTIKKyNkZWZpbmUgTEVOR1RIX0NSQyAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTUFYX1NFUV9OVU1CRVIgICAgICAgICAgICAgIDB4MGZmZgorI2RlZmluZSBMRU5HVEhfODAyXzNfTk9fVFlQRQkJMTIKKyNkZWZpbmUgTEVOR1RIXzgwMl8xUQkJCQk0IC8qIFZMQU4gcmVsYXRlZCAqLworCisvLyBTVEFfQ1NSNC5maWVsZC5UeFJlc3VsdAorI2RlZmluZSBUWF9SRVNVTFRfU1VDQ0VTUyAgICAgICAgICAgMAorI2RlZmluZSBUWF9SRVNVTFRfWkVST19MRU5HVEggICAgICAgMQorI2RlZmluZSBUWF9SRVNVTFRfVU5ERVJfUlVOICAgICAgICAgMgorI2RlZmluZSBUWF9SRVNVTFRfT0hZX0VSUk9SICAgICAgICAgNAorI2RlZmluZSBUWF9SRVNVTFRfUkVUUllfRkFJTCAgICAgICAgNgorCisvLyBBbGwgUEhZIHJhdGUgc3VtbWFyeSBpbiBUWEQKKy8vIFByZWFtYmxlIE1PREUgaW4gVHhECisjZGVmaW5lIE1PREVfQ0NLCTAKKyNkZWZpbmUgTU9ERV9PRkRNICAgMQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2RlZmluZSBNT0RFX0hUTUlYCTIKKyNkZWZpbmUgTU9ERV9IVEdSRUVORklFTEQJMworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworLy8gTUNTIGZvciBDQ0suICBCVy5TR0kuU1RCQyBhcmUgcmVzZXJ2ZWQKKyNkZWZpbmUgTUNTX0xPTkdQX1JBVEVfMSAgICAgICAgICAgICAgICAgICAgICAwCSAvLyBsb25nIHByZWFtYmxlIENDSyAxTWJwcworI2RlZmluZSBNQ1NfTE9OR1BfUkFURV8yICAgICAgICAgICAgICAgICAgICAgIDEJLy8gbG9uZyBwcmVhbWJsZSBDQ0sgMU1icHMKKyNkZWZpbmUgTUNTX0xPTkdQX1JBVEVfNV81ICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1DU19MT05HUF9SQVRFXzExICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNQ1NfU0hPUlRQX1JBVEVfMSAgICAgICAgICAgICAgICAgICAgICA0CSAvLyBsb25nIHByZWFtYmxlIENDSyAxTWJwcy4gc2hvcnQgaXMgZm9yYmlkZGVuIGluIDFNYnBzCisjZGVmaW5lIE1DU19TSE9SVFBfUkFURV8yICAgICAgICAgICAgICAgICAgICAgIDUJLy8gc2hvcnQgcHJlYW1ibGUgQ0NLIDJNYnBzCisjZGVmaW5lIE1DU19TSE9SVFBfUkFURV81XzUgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgTUNTX1NIT1JUUF9SQVRFXzExICAgICAgICAgICAgICAgICAgICAgNworLy8gVG8gc2VuZCBkdXBsaWNhdGUgbGVnYWN5IE9GRE0uIHNldCBCVz1CV180MC4gIFNHSS5TVEJDIGFyZSByZXNlcnZlZAorI2RlZmluZSBNQ1NfUkFURV82ICAgICAgICAgICAgICAgICAgICAgIDAgICAvLyBsZWdhY3kgT0ZETQorI2RlZmluZSBNQ1NfUkFURV85ICAgICAgICAgICAgICAgICAgICAgIDEgICAvLyBPRkRNCisjZGVmaW5lIE1DU19SQVRFXzEyICAgICAgICAgICAgICAgICAgICAgMiAgIC8vIE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfMTggICAgICAgICAgICAgICAgICAgICAzICAgLy8gT0ZETQorI2RlZmluZSBNQ1NfUkFURV8yNCAgICAgICAgICAgICAgICAgICAgIDQgIC8vIE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfMzYgICAgICAgICAgICAgICAgICAgICA1ICAgLy8gT0ZETQorI2RlZmluZSBNQ1NfUkFURV80OCAgICAgICAgICAgICAgICAgICAgIDYgIC8vIE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfNTQgICAgICAgICAgICAgICAgICAgICA3IC8vIE9GRE0KKy8vIEhUCisjZGVmaW5lIE1DU18wCQkwCS8vIDFTCisjZGVmaW5lIE1DU18xCQkxCisjZGVmaW5lIE1DU18yCQkyCisjZGVmaW5lIE1DU18zCQkzCisjZGVmaW5lIE1DU180CQk0CisjZGVmaW5lIE1DU181CQk1CisjZGVmaW5lIE1DU182CQk2CisjZGVmaW5lIE1DU183CQk3CisjZGVmaW5lIE1DU184CQk4CS8vIDJTCisjZGVmaW5lIE1DU185CQk5CisjZGVmaW5lIE1DU18xMAkJMTAKKyNkZWZpbmUgTUNTXzExCQkxMQorI2RlZmluZSBNQ1NfMTIJCTEyCisjZGVmaW5lIE1DU18xMwkJMTMKKyNkZWZpbmUgTUNTXzE0CQkxNAorI2RlZmluZSBNQ1NfMTUJCTE1CisjZGVmaW5lIE1DU18xNgkJMTYJLy8gMyozCisjZGVmaW5lIE1DU18xNwkJMTcKKyNkZWZpbmUgTUNTXzE4CQkxOAorI2RlZmluZSBNQ1NfMTkJCTE5CisjZGVmaW5lIE1DU18yMAkJMjAKKyNkZWZpbmUgTUNTXzIxCQkyMQorI2RlZmluZSBNQ1NfMjIJCTIyCisjZGVmaW5lIE1DU18yMwkJMjMKKyNkZWZpbmUgTUNTXzMyCQkzMgorI2RlZmluZSBNQ1NfQVVUTwkJMzMKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8gT0lEX0hUUEhZTU9ERQorLy8gTU9ERQorI2RlZmluZSBIVE1PREVfTU0JMAorI2RlZmluZSBIVE1PREVfR0YJMQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBGaXhlZCBUeCBNT0RFIC0gSFQsIENDSyBvciBPRkRNCisjZGVmaW5lIEZJWEVEX1RYTU9ERV9IVAkJMAorI2RlZmluZSBGSVhFRF9UWE1PREVfQ0NLCTEKKyNkZWZpbmUgRklYRURfVFhNT0RFX09GRE0gCTIKKy8vIEJXCisjZGVmaW5lIEJXXzIwCQlCQU5EX1dJRFRIXzIwCisjZGVmaW5lIEJXXzQwCQlCQU5EX1dJRFRIXzQwCisjZGVmaW5lIEJXX0JPVEgJCUJBTkRfV0lEVEhfQk9USAorI2RlZmluZSBCV18xMAkJQkFORF9XSURUSF8xMAkvLyA4MDIuMTFqIGhhcyAxME1Iei4gVGhpcyBkZWZpbml0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2FnZS4gZG9lc24ndCBmaWxsIGluIHRoZSBJRSBvciBvdGhlciBmaWVsZC4KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8gU0hPUlRHSQorI2RlZmluZSBHSV80MDAJCUdBUF9JTlRFUlZBTF80MDAJLy8gb25seSBzdXBwb3J0IGluIEhUIG1vZGUKKyNkZWZpbmUgR0lfQk9USAkJR0FQX0lOVEVSVkFMX0JPVEgKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyNkZWZpbmUgR0lfODAwCQlHQVBfSU5URVJWQUxfODAwCisvLyBTVEJDCisjZGVmaW5lIFNUQkNfTk9ORQkwCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjZGVmaW5lIFNUQkNfVVNFCTEJLy8gbGltaXRlZCB1c2UgaW4gcnQyODYwYiBwaHkKKyNkZWZpbmUgUlhTVEJDX09ORQkxCS8vIHJ4IHN1cHBvcnQgb2Ygb25lIHNwYXRpYWwgc3RyZWFtCisjZGVmaW5lIFJYU1RCQ19UV08JMgkvLyByeCBzdXBwb3J0IG9mIDEgYW5kIDIgc3BhdGlhbCBzdHJlYW0KKyNkZWZpbmUgUlhTVEJDX1RIUgkzCS8vIHJ4IHN1cHBvcnQgb2YgMX4zIHNwYXRpYWwgc3RyZWFtCisvLyBNQ1MgRkVFREJBQ0sKKyNkZWZpbmUgTUNTRkJLX05PTkUJMCAgLy8gbm90IHN1cHBvcnQgbWNzIGZlZWRiYWNrIC8KKyNkZWZpbmUgTUNTRkJLX1JTVgkxCS8vIHJlc2VydmVkCisjZGVmaW5lIE1DU0ZCS19VTlNPTElDSVQJMgkvLyBvbmx5IHN1cHBvcnQgdW5zb2xpY3QgbWNzIGZlZWRiYWNrCisjZGVmaW5lIE1DU0ZCS19NUlEJMwkvLyByZXNwb25zZSB0byBib3RoIE1SUSBhbmQgdW5zb2xpY3QgbWNzIGZlZWRiYWNrCisKKy8vIE1JTU8gcG93ZXIgc2FmZQorI2RlZmluZQlNTVBTX1NUQVRJQwkwCisjZGVmaW5lCU1NUFNfRFlOQU1JQwkJMQorI2RlZmluZSAgIE1NUFNfUlNWCQkyCisjZGVmaW5lIE1NUFNfRU5BQkxFCQkzCisKKworLy8gQS1NU0RVIHNpemUKKyNkZWZpbmUJQU1TRFVfMAkwCisjZGVmaW5lCUFNU0RVXzEJCTEKKworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLyBNQ1MgdXNlIDcgYml0cworI2RlZmluZSBUWFJBVEVNSU1PCQkweDgwCisjZGVmaW5lIFRYUkFURU1DUwkJMHg3RgorI2RlZmluZSBUWFJBVEVPRkRNCQkweDdGCisjZGVmaW5lIFJBVEVfMSAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJBVEVfMiAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJBVEVfNV81ICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJBVEVfMTEgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFJBVEVfNiAgICAgICAgICAgICAgICAgICAgICA0ICAgLy8gT0ZETQorI2RlZmluZSBSQVRFXzkgICAgICAgICAgICAgICAgICAgICAgNSAgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV8xMiAgICAgICAgICAgICAgICAgICAgIDYgICAvLyBPRkRNCisjZGVmaW5lIFJBVEVfMTggICAgICAgICAgICAgICAgICAgICA3ICAgLy8gT0ZETQorI2RlZmluZSBSQVRFXzI0ICAgICAgICAgICAgICAgICAgICAgOCAgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV8zNiAgICAgICAgICAgICAgICAgICAgIDkgICAvLyBPRkRNCisjZGVmaW5lIFJBVEVfNDggICAgICAgICAgICAgICAgICAgICAxMCAgLy8gT0ZETQorI2RlZmluZSBSQVRFXzU0ICAgICAgICAgICAgICAgICAgICAgMTEgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV9GSVJTVF9PRkRNX1JBVEUgICAgICAgIFJBVEVfNgorI2RlZmluZSBSQVRFX0xBU1RfT0ZETV9SQVRFICAgICAgICAJUkFURV81NAorI2RlZmluZSBSQVRFXzZfNSAgICAgICAgICAgICAgICAgICAgMTIgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzEzICAgICAgICAgICAgICAgICAgICAgMTMgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzE5XzUgICAgICAgICAgICAgICAgICAgMTQgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzI2ICAgICAgICAgICAgICAgICAgICAgMTUgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzM5ICAgICAgICAgICAgICAgICAgICAgMTYgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzUyICAgICAgICAgICAgICAgICAgICAgMTcgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzU4XzUgICAgICAgICAgICAgICAgICAgMTggIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzY1ICAgICAgICAgICAgICAgICAgICAgMTkgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzc4ICAgICAgICAgICAgICAgICAgICAgMjAgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzEwNCAgICAgICAgICAgICAgICAgICAgMjEgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzExNyAgICAgICAgICAgICAgICAgICAgMjIgIC8vIEhUIG1peAorI2RlZmluZSBSQVRFXzEzMCAgICAgICAgICAgICAgICAgICAgMjMgIC8vIEhUIG1peAorLy8jZGVmaW5lIFJBVEVfQVVUT19TV0lUQ0ggICAgICAgICAgICAyNTUgLy8gZm9yIFN0YUNmZy5GaXhlZFR4UmF0ZSBvbmx5CisjZGVmaW5lIEhUUkFURV8wICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFJBVEVfRklSU1RfTU1fUkFURSAgICAgICAgSFRSQVRFXzAKKyNkZWZpbmUgUkFURV9GSVJTVF9IVF9SQVRFICAgICAgICBIVFJBVEVfMAorI2RlZmluZSBSQVRFX0xBU1RfSFRfUkFURSAgICAgICAgSFRSQVRFXzAKKworLy8gcFR4V0ktPnR4b3AKKyNkZWZpbmUgSUZTX0hUVFhPUCAgICAgICAgICAgICAgICAgMAkvLyBUaGUgdHhvcCB3aWxsIGJlIGhhbmRsZXMgYnkgQVNJQy4KKyNkZWZpbmUgSUZTX1BJRlMgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUZTX1NJRlMgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSUZTX0JBQ0tPRkYgICAgICAgICAgICAgICAgIDMKKworLy8gcFR4RC0+UmV0cnlNb2RlCisjZGVmaW5lIExPTkdfUkVUUlkgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNIT1JUX1JFVFJZICAgICAgICAgICAgICAgICAwCisKKy8vIENvdW50cnkgUmVnaW9uIGRlZmluaXRpb24KKyNkZWZpbmUgUkVHSU9OX01JTklNVU1fQkdfQkFORCAgICAgICAgICAgIDAKKyNkZWZpbmUgUkVHSU9OXzBfQkdfQkFORCAgICAgICAgICAgICAgICAgIDAgICAgICAgLy8gMS0xMQorI2RlZmluZSBSRUdJT05fMV9CR19CQU5EICAgICAgICAgICAgICAgICAgMSAgICAgICAvLyAxLTEzCisjZGVmaW5lIFJFR0lPTl8yX0JHX0JBTkQgICAgICAgICAgICAgICAgICAyICAgICAgIC8vIDEwLTExCisjZGVmaW5lIFJFR0lPTl8zX0JHX0JBTkQgICAgICAgICAgICAgICAgICAzICAgICAgIC8vIDEwLTEzCisjZGVmaW5lIFJFR0lPTl80X0JHX0JBTkQgICAgICAgICAgICAgICAgICA0ICAgICAgIC8vIDE0CisjZGVmaW5lIFJFR0lPTl81X0JHX0JBTkQgICAgICAgICAgICAgICAgICA1ICAgICAgIC8vIDEtMTQKKyNkZWZpbmUgUkVHSU9OXzZfQkdfQkFORCAgICAgICAgICAgICAgICAgIDYgICAgICAgLy8gMy05CisjZGVmaW5lIFJFR0lPTl83X0JHX0JBTkQgICAgICAgICAgICAgICAgICA3ICAgICAgIC8vIDUtMTMKKyNkZWZpbmUgUkVHSU9OXzMxX0JHX0JBTkQgICAgICAgICAgICAgICAgIDMxICAgICAgIC8vIDUtMTMKKyNkZWZpbmUgUkVHSU9OX01BWElNVU1fQkdfQkFORCAgICAgICAgICAgIDcKKworI2RlZmluZSBSRUdJT05fTUlOSU1VTV9BX0JBTkQgICAgICAgICAgICAgMAorI2RlZmluZSBSRUdJT05fMF9BX0JBTkQgICAgICAgICAgICAgICAgICAgMCAgICAgICAvLyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CisjZGVmaW5lIFJFR0lPTl8xX0FfQkFORCAgICAgICAgICAgICAgICAgICAxICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAKKyNkZWZpbmUgUkVHSU9OXzJfQV9CQU5EICAgICAgICAgICAgICAgICAgIDIgICAgICAgLy8gMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0CisjZGVmaW5lIFJFR0lPTl8zX0FfQkFORCAgICAgICAgICAgICAgICAgICAzICAgICAgIC8vIDUyLCA1NiwgNjAsIDY0LCAxNDksIDE1MywgMTU3LCAxNjEKKyNkZWZpbmUgUkVHSU9OXzRfQV9CQU5EICAgICAgICAgICAgICAgICAgIDQgICAgICAgLy8gMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUKKyNkZWZpbmUgUkVHSU9OXzVfQV9CQU5EICAgICAgICAgICAgICAgICAgIDUgICAgICAgLy8gMTQ5LCAxNTMsIDE1NywgMTYxCisjZGVmaW5lIFJFR0lPTl82X0FfQkFORCAgICAgICAgICAgICAgICAgICA2ICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4CisjZGVmaW5lIFJFR0lPTl83X0FfQkFORCAgICAgICAgICAgICAgICAgICA3ICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CisjZGVmaW5lIFJFR0lPTl84X0FfQkFORCAgICAgICAgICAgICAgICAgICA4ICAgICAgIC8vIDUyLCA1NiwgNjAsIDY0CisjZGVmaW5lIFJFR0lPTl85X0FfQkFORCAgICAgICAgICAgICAgICAgICA5ICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CisjZGVmaW5lIFJFR0lPTl8xMF9BX0JBTkQgICAgICAgICAgICAgICAgICAxMAkgIC8vIDM2LCA0MCwgNDQsIDQ4LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQorI2RlZmluZSBSRUdJT05fMTFfQV9CQU5EICAgICAgICAgICAgICAgICAgMTEJICAvLyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDE0OSwgMTUzLCAxNTcsIDE2MQorI2RlZmluZSBSRUdJT05fTUFYSU1VTV9BX0JBTkQgICAgICAgICAgICAgMTEKKworLy8gcFR4RC0+Q2lwaGVyQWxnCisjZGVmaW5lIENJUEhFUl9OT05FICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENJUEhFUl9XRVA2NCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENJUEhFUl9XRVAxMjggICAgICAgICAgICAgICAyCisjZGVmaW5lIENJUEhFUl9US0lQICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENJUEhFUl9BRVMgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENJUEhFUl9DS0lQNjQgICAgICAgICAgICAgICA1CisjZGVmaW5lIENJUEhFUl9DS0lQMTI4ICAgICAgICAgICAgICA2CisjZGVmaW5lIENJUEhFUl9US0lQX05PX01JQyAgICAgICAgICA3ICAgICAgIC8vIE1JQyBhcHBlbmRlZCBieSBkcml2ZXI6IG5vdCBhIHZhbGlkIHZhbHVlIGluIGhhcmR3YXJlIGtleSB0YWJsZQorI2RlZmluZSBDSVBIRVJfU01TNAkJCQkJOAorCisvLyB2YWx1ZSBkb21haW4gb2YgcEFkLT5SZkljVHlwZQorI2RlZmluZSBSRklDXzI4MjAgICAgICAgICAgICAgICAgICAgMSAgICAgICAvLyAyLjRHIDJUM1IKKyNkZWZpbmUgUkZJQ18yODUwICAgICAgICAgICAgICAgICAgIDIgICAgICAgLy8gMi40Ry81RyAyVDNSCisjZGVmaW5lIFJGSUNfMjcyMCAgICAgICAgICAgICAgICAgICAzICAgICAgIC8vIDIuNEcgMVQyUgorI2RlZmluZSBSRklDXzI3NTAgICAgICAgICAgICAgICAgICAgNCAgICAgICAvLyAyLjRHLzVHIDFUMlIKKyNkZWZpbmUgUkZJQ18zMDIwICAgICAgICAgICAgICAgICAgIDUgICAgICAgLy8gMi40RyAxVDFSCisjZGVmaW5lIFJGSUNfMjAyMCAgICAgICAgICAgICAgICAgICA2ICAgICAgIC8vIDIuNEcgQi9HCisjZGVmaW5lIFJGSUNfMzAyMSAgICAgICAgICAgICAgICAgICA3ICAgICAgIC8vIDIuNEcgMVQyUgorI2RlZmluZSBSRklDXzMwMjIgICAgICAgICAgICAgICAgICAgOCAgICAgICAvLyAyLjRHIDJUMlIKKworLy8gTEVEIFN0YXR1cy4KKyNkZWZpbmUgTEVEX0xJTktfRE9XTiAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTEVEX0xJTktfVVAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTEVEX1JBRElPX09GRiAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTEVEX1JBRElPX09OICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTEVEX0hBTFQgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTEVEX1dQUyAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTEVEX09OX1NJVEVfU1VSVkVZICAgICAgICAgIDYKKyNkZWZpbmUgTEVEX1BPV0VSX1VQICAgICAgICAgICAgICAgIDcKKworLy8gdmFsdWUgZG9tYWluIG9mIHBBZC0+TGVkQ250bC5MZWRNb2RlIGFuZCBFMlBST00KKyNkZWZpbmUgTEVEX01PREVfREVGQVVMVCAgICAgICAgICAgIDAKKyNkZWZpbmUgTEVEX01PREVfVFdPX0xFRAkJCTEKKyNkZWZpbmUgTEVEX01PREVfU0lHTkFMX1NUUkVHVEgJCTggIC8vIEVFUFJPTSBkZWZpbmUgPTgKKworLy8gUkM0IGluaXQgdmFsdWUsIHVzZWQgZnJvIFdFUCAmIFRLSVAKKyNkZWZpbmUgUFBQSU5JVEZDUzMyICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYgICAvKiBJbml0aWFsIEZDUyB2YWx1ZSAqLworCisvLyB2YWx1ZSBkb21haW4gb2YgcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQuIDgwMi4xWCBjb250cm9sbGVkIHBvcnQgZGVmaW5pdGlvbgorI2RlZmluZSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCAgICAgMQorI2RlZmluZSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQgMgorCisjZGVmaW5lIFBBSVJXSVNFX0tFWSAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdST1VQX0tFWSAgICAgICAgICAgICAgICAgICAyCisKKy8vZGVmaW5pdGlvbiBvZiBEUlMKKyNkZWZpbmUgTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gJMzIKKworCisvLyBwcmUtYWxsb2NhdGVkIGZyZWUgTkRJUyBQQUNLRVQvQlVGRkVSIHBvbGwgZm9yIGludGVybmFsIHVzYWdlCisjZGVmaW5lIE1BWF9OVU1fT0ZfRlJFRV9ORElTX1BBQ0tFVCAxMjgKKworLy9CbG9jayBBQ0sKKyNkZWZpbmUgTUFYX1RYX1JFT1JERVJCVUYgICA2NAorI2RlZmluZSBNQVhfUlhfUkVPUkRFUkJVRiAgIDY0CisjZGVmaW5lIERFRkFVTFRfVFhfVElNRU9VVCAgIDMwCisjZGVmaW5lIERFRkFVTFRfUlhfVElNRU9VVCAgIDMwCisKKy8vIGRlZmluaXRpb24gb2YgUmVjaXBpZW50IG9yIE9yaWdpbmF0b3IKKyNkZWZpbmUgSV9SRUNJUElFTlQgICAgICAgICAgICAgICAgICBUUlVFCisjZGVmaW5lIElfT1JJR0lOQVRPUiAgICAgICAgICAgICAgICAgICBGQUxTRQorCisjZGVmaW5lIERFRkFVTFRfQkJQX1RYX1BPV0VSICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfUkZfVFhfUE9XRVIgICAgICAgICA1CisKKyNkZWZpbmUgTUFYX0lOSV9CVUZGRVJfU0laRQkJCTQwOTYKKyNkZWZpbmUgTUFYX1BBUkFNX0JVRkZFUl9TSVpFCQkoMjA0OCkgLy8gZW5vdWdoIGZvciBBQ0wgKDE4KjY0KQorCQkJCQkJCQkJCQkvLzE4IDogdGhlIGxlbmd0aCBvZiBNYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAiMDE6MDI6MDM6MDQ6MDU6MDY7IikKKwkJCQkJCQkJCQkJLy82NCA6IE1BWF9OVU1fT0ZfQUNMX0xJU1QKKy8vIGRlZmluaXRpb24gb2YgcEFkLT5PcE1vZGUKKyNkZWZpbmUgT1BNT0RFX1NUQSAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1BNT0RFX0FQICAgICAgICAgICAgICAgICAgIDEKKy8vI2RlZmluZSBPUE1PREVfTDNfQlJHICAgICAgICAgICAgICAgMiAgICAgICAvLyBhcyBBUCBhbmQgU1RBIGF0IHRoZSBzYW1lIHRpbWUKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyNkZWZpbmUgRElSX1JFQUQgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRElSX1dSSVRFICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFlQRV9UWEQgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFlQRV9SWEQgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFlQRV9UWElORk8JCQkJCTAKKyNkZWZpbmUgVFlQRV9SWElORk8JCQkJCTEKKyNkZWZpbmUgVFlQRV9UWFdJCQkJCQkwCisjZGVmaW5lIFRZUEVfUlhXSQkJCQkJMQorI2VuZGlmCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT0gQVAgcnRtcF9kZWYuaCA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIHZhbHVlIGRvbWFpbiBmb3IgcEFkLT5FdmVudFRhYi5Mb2dbXS5FdmVudAorI2RlZmluZSBFVkVOVF9SRVNFVF9BQ0NFU1NfUE9JTlQgICAgMCAvLyBMb2cgPSAiaGg6bW06c3MgICBSZXN0YXJ0IEFjY2VzcyBQb2ludCIKKyNkZWZpbmUgRVZFTlRfQVNTT0NJQVRFRCAgICAgICAgICAgIDEgLy8gTG9nID0gImhoOm1tOnNzICAgU1RBIDAwOjAxOjAyOjAzOjA0OjA1IGFzc29jaWF0ZWQiCisjZGVmaW5lIEVWRU5UX0RJU0FTU09DSUFURUQgICAgICAgICAyIC8vIExvZyA9ICJoaDptbTpzcyAgIFNUQSAwMDowMTowMjowMzowNDowNSBsZWZ0IHRoaXMgQlNTIgorI2RlZmluZSBFVkVOVF9BR0VEX09VVCAgICAgICAgICAgICAgMyAvLyBMb2cgPSAiaGg6bW06c3MgICBTVEEgMDA6MDE6MDI6MDM6MDQ6MDUgd2FzIGFnZWQtb3V0IGFuZCByZW1vdmVkIGZyb20gdGhpcyBCU1MiCisjZGVmaW5lIEVWRU5UX0NPVU5URVJfTSAgICAgICAgICAgICA0CisjZGVmaW5lIEVWRU5UX0lOVkFMSURfUFNLICAgICAgICAgICA1CisjZGVmaW5lIEVWRU5UX01BWF9FVkVOVF9UWVBFICAgICAgICA2CisvLyA9PT09IGVuZCBvZiBBUCBydG1wX2RlZi5oID09PT09PT09PT09PQorCisvLyBkZWZpbml0aW9uIFJTU0kgTnVtYmVyCisjZGVmaW5lIFJTU0lfMAkJCQkJMAorI2RlZmluZSBSU1NJXzEJCQkJCTEKKyNkZWZpbmUgUlNTSV8yCQkJCQkyCisKKy8vIGRlZmluaXRpb24gb2YgcmFkYXIgZGV0ZWN0aW9uCisjZGVmaW5lIFJEX05PUk1BTF9NT0RFCQkJCTAJLy8gTm90IGZvdW5kIHJhZGFyIHNpZ25hbAorI2RlZmluZSBSRF9TV0lUQ0hJTkdfTU9ERQkJCTEJLy8gRm91bmQgcmFkYXIgc2lnbmFsLCBhbmQgZG9pbmcgY2hhbm5lbCBzd2l0Y2gKKyNkZWZpbmUgUkRfU0lMRU5DRV9NT0RFCQkJCTIJLy8gQWZ0ZXIgY2hhbm5lbCBzd2l0Y2gsIG5lZWQgdG8gYmUgc2lsZW5jZSBhIHdoaWxlIHRvIGVuc3VyZSByYWRhciBub3QgZm91bmQKKworLy9Ecml2ZXIgZGVmaW5lZCBjaWQgZm9yIG1hcHBpbmcgc3RhdHVzIGFuZCBjb21tYW5kLgorI2RlZmluZSAgU0xFRVBDSUQJMHgxMQorI2RlZmluZSAgV0FLRUNJRAkweDIyCisjZGVmaW5lICBRVUVSWVBPV0VSQ0lECTB4MzMKKyNkZWZpbmUgIE9XTkVSTUNVCTB4MQorI2RlZmluZSAgT1dORVJDUFUJMHgwCisKKy8vIE1CU1NJRCBkZWZpbml0aW9uCisjZGVmaW5lIEVOVFJZX05PVF9GT1VORCAgICAgICAgICAgICAweEZGCisKKworLyogQWZ0ZXIgTGludXggMi42LjksCisgKiBWTEFOIG1vZHVsZSB1c2UgUHJpdmF0ZSAoZnJvbSB1c2VyKSBpbnRlcmZhY2UgZmxhZ3MgKG5ldGRldmljZS0+cHJpdl9mbGFncykuCisgKiAjZGVmaW5lIElGRl84MDJfMVFfVkxBTiAweDEgICAgICAgICAtLSAgICA4MDIuMVEgVkxBTiBkZXZpY2UuICBpbiBpZi5oCisgKiByZWYgdG8gaXBfc2Fib3RhZ2Vfb3V0KCkgWyBvdXQtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4gXSBpbiBicl9uZXRmaWx0ZXIuYworICoKKyAqIEZvciB0aGlzIHJlYXNvbiwgd2UgTVVTVCB1c2UgRVZFTiB2YWx1ZSBpbiBwcml2X2ZsYWdzCisgKi8KKyNkZWZpbmUgSU5UX01BSU4gICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBJTlRfTUJTU0lEICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIElOVF9XRFMgICAgICAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgSU5UX0FQQ0xJICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBJTlRfTUVTSCAgICAgICAgICAgICAgICAgICAJMHgwNTAwCisKKy8vIFVzZSBiaXRtYXAgdG8gYWxsb3cgY29leGlzdCBvZiBBVEVfVFhGUkFNRSBhbmQgQVRFX1JYRlJBTUUoaS5lLix0byBzdXBwb3J0IExvb3BCYWNrIG1vZGUpCisjaWZkZWYgUkFMSU5LX0FURQorI2RlZmluZQlBVEVfU1RBUlQgICAgICAgICAgICAgICAgICAgMHgwMCAgIC8vIFN0YXJ0IEFURQorI2RlZmluZQlBVEVfU1RPUCAgICAgICAgICAgICAgICAgICAgMHg4MCAgIC8vIFN0b3AgQVRFCisjZGVmaW5lCUFURV9UWENPTlQgICAgICAgICAgICAgICAgICAweDA1ICAgLy8gQ29udGludW91cyBUcmFuc21pdAorI2RlZmluZQlBVEVfVFhDQVJSICAgICAgICAgICAgICAgICAgMHgwOSAgIC8vIFRyYW5zbWl0IENhcnJpZXIKKyNkZWZpbmUJQVRFX1RYQ0FSUlNVUFAgICAgICAgICAgICAgIDB4MTEgICAvLyBUcmFuc21pdCBDYXJyaWVyIFN1cHByZXNzaW9uCisjZGVmaW5lCUFURV9UWEZSQU1FICAgICAgICAgICAgICAgICAweDAxICAgLy8gVHJhbnNtaXQgRnJhbWVzCisjZGVmaW5lCUFURV9SWEZSQU1FICAgICAgICAgICAgICAgICAweDAyICAgLy8gUmVjZWl2ZSBGcmFtZXMKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorI2RlZmluZSBBVEVfVFhTVE9QICAgICAgICAgICAgICAgICAgMHhlMiAgIC8vIFN0b3AgVHJhbnNtaXRpb24oaS5lLiwgVFhDT05ULCBUWENBUlIsIFRYQ0FSUlNVUFAsIGFuZCBUWEZSQU1FKQorI2RlZmluZSBBVEVfUlhTVE9QCQkJCQkweGZkICAgLy8gU3RvcCByZWNlaXZpbmcgRnJhbWVzCisjZGVmaW5lCUJCUDIyX1RYRlJBTUUgICAgIAkJCTB4MDAgICAvLyBUcmFuc21pdCBGcmFtZXMKKyNkZWZpbmUJQkJQMjJfVFhDT05UX09SX0NBUlJTVVBQICAgIDB4ODAgICAvLyBDb250aW51b3VzIFRyYW5zbWl0IG9yIENhcnJpZXIgU3VwcHJlc3Npb24KKyNkZWZpbmUJQkJQMjJfVFhDQVJSICAgICAgICAgICAgICAgIDB4YzEgICAvLyBUcmFuc21pdCBDYXJyaWVyCisjZGVmaW5lCUJCUDI0X1RYQ09OVCAgICAgICAgICAgICAgICAweDAwICAgLy8gQ29udGludW91cyBUcmFuc21pdAorI2RlZmluZQlCQlAyNF9DQVJSU1VQUCAgICAgICAgICAgICAgMHgwMSAgIC8vIENhcnJpZXIgU3VwcHJlc3Npb24KKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworLy8gV0VQIEtleSBUWVBFCisjZGVmaW5lIFdFUF9IRVhBREVDSU1BTF9UWVBFICAgIDAKKyNkZWZpbmUgV0VQX0FTQ0lJX1RZUEUgICAgICAgICAgMQorCisKKworLy8gV0lSRUxFU1MgRVZFTlRTIGRlZmluaXRpb24KKy8qIE1heCBudW1iZXIgb2YgY2hhciBpbiBjdXN0b20gZXZlbnQsIHJlZmVyIHRvIHdpcmVsZXNzX3Rvb2xzLjI4L3dpcmVsZXNzLjIwLmggKi8KKyNkZWZpbmUgSVdfQ1VTVE9NX01BWF9MRU4JCQkJICAJCQkyNTUJLyogSW4gYnl0ZXMgKi8KKworLy8gRm9yIHN5c3RlbSBldmVudCAtIHN0YXJ0CisjZGVmaW5lCUlXX1NZU19FVkVOVF9GTEFHX1NUQVJUICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lCUlXX0FTU09DX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lCUlXX0RJU0FTU09DX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgMHgwMjAxCisjZGVmaW5lCUlXX0RFQVVUSF9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgIAkweDAyMDIKKyNkZWZpbmUJSVdfQUdFT1VUX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgCTB4MDIwMworI2RlZmluZQlJV19DT1VOVEVSX01FQVNVUkVTX0VWRU5UX0ZMQUcgICAgICAgICAgICAgIDB4MDIwNAorI2RlZmluZQlJV19SRVBMQVlfQ09VTlRFUl9ESUZGX0VWRU5UX0ZMQUcgICAgICAgICAgIDB4MDIwNQorI2RlZmluZQlJV19SU05JRV9ESUZGX0VWRU5UX0ZMQUcgICAgICAgICAgIAkJCTB4MDIwNgorI2RlZmluZQlJV19NSUNfRElGRl9FVkVOVF9GTEFHICAgICAgICAgICAJCQkweDAyMDcKKyNkZWZpbmUgSVdfSUNWX0VSUk9SX0VWRU5UX0ZMQUcJCQkJCQkweDAyMDgKKyNkZWZpbmUgSVdfTUlDX0VSUk9SX0VWRU5UX0ZMQUcJCQkJCQkweDAyMDkKKyNkZWZpbmUgSVdfR1JPVVBfSFNfVElNRU9VVF9FVkVOVF9GTEFHCQkJCTB4MDIwQQorI2RlZmluZQlJV19QQUlSV0lTRV9IU19USU1FT1VUX0VWRU5UX0ZMQUcJCQkweDAyMEIKKyNkZWZpbmUgSVdfUlNOSUVfU0FOSVRZX0ZBSUxfRVZFTlRfRkxBRwkJCQkweDAyMEMKKyNkZWZpbmUgSVdfU0VUX0tFWV9ET05FX1dQQTFfRVZFTlRfRkxBRwkJCQkweDAyMEQKKyNkZWZpbmUgSVdfU0VUX0tFWV9ET05FX1dQQTJfRVZFTlRfRkxBRwkJCQkweDAyMEUKKyNkZWZpbmUgSVdfU1RBX0xJTktVUF9FVkVOVF9GTEFHCQkJCQkweDAyMEYKKyNkZWZpbmUgSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcJCQkJCTB4MDIxMAorI2RlZmluZSBJV19TQ0FOX0NPTVBMRVRFRF9FVkVOVF9GTEFHCQkJCTB4MDIxMQorI2RlZmluZSBJV19TQ0FOX0VOUVVFVUVfRkFJTF9FVkVOVF9GTEFHCQkJCTB4MDIxMgorLy8gaWYgYWRkIG5ldyBzeXN0ZW0gZXZlbnQgZmxhZywgcGxlYXNlIHVwYWR0ZSB0aGUgSVdfU1lTX0VWRU5UX0ZMQUdfRU5ECisjZGVmaW5lCUlXX1NZU19FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjEyCisjZGVmaW5lCUlXX1NZU19FVkVOVF9UWVBFX05VTQkJCQkJCShJV19TWVNfRVZFTlRfRkxBR19FTkQgLSBJV19TWVNfRVZFTlRfRkxBR19TVEFSVCArIDEpCisvLyBGb3Igc3lzdGVtIGV2ZW50IC0gZW5kCisKKy8vIEZvciBzcG9vZiBhdHRhY2sgZXZlbnQgLSBzdGFydAorI2RlZmluZQlJV19TUE9PRl9FVkVOVF9GTEFHX1NUQVJUICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBJV19DT05GTElDVF9TU0lEX0VWRU5UX0ZMQUcJCQkJCTB4MDMwMAorI2RlZmluZSBJV19TUE9PRl9BU1NPQ19SRVNQX0VWRU5UX0ZMQUcJCQkJMHgwMzAxCisjZGVmaW5lIElXX1NQT09GX1JFQVNTT0NfUkVTUF9FVkVOVF9GTEFHCQkJMHgwMzAyCisjZGVmaW5lIElXX1NQT09GX1BST0JFX1JFU1BfRVZFTlRfRkxBRwkJCQkweDAzMDMKKyNkZWZpbmUgSVdfU1BPT0ZfQkVBQ09OX0VWRU5UX0ZMQUcJCQkJCTB4MDMwNAorI2RlZmluZSBJV19TUE9PRl9ESVNBU1NPQ19FVkVOVF9GTEFHCQkJCTB4MDMwNQorI2RlZmluZSBJV19TUE9PRl9BVVRIX0VWRU5UX0ZMQUcJCQkJCTB4MDMwNgorI2RlZmluZSBJV19TUE9PRl9ERUFVVEhfRVZFTlRfRkxBRwkJCQkJMHgwMzA3CisjZGVmaW5lIElXX1NQT09GX1VOS05PV05fTUdNVF9FVkVOVF9GTEFHCQkJMHgwMzA4CisjZGVmaW5lIElXX1JFUExBWV9BVFRBQ0tfRVZFTlRfRkxBRwkJCQkJMHgwMzA5CisvLyBpZiBhZGQgbmV3IHNwb29mIGF0dGFjayBldmVudCBmbGFnLCBwbGVhc2UgdXBhZHRlIHRoZSBJV19TUE9PRl9FVkVOVF9GTEFHX0VORAorI2RlZmluZQlJV19TUE9PRl9FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAgIDB4MDMwOQorI2RlZmluZQlJV19TUE9PRl9FVkVOVF9UWVBFX05VTQkJCQkJCShJV19TUE9PRl9FVkVOVF9GTEFHX0VORCAtIElXX1NQT09GX0VWRU5UX0ZMQUdfU1RBUlQgKyAxKQorLy8gRm9yIHNwb29mIGF0dGFjayBldmVudCAtIGVuZAorCisvLyBGb3IgZmxvb2RpbmcgYXR0YWNrIGV2ZW50IC0gc3RhcnQKKyNkZWZpbmUJSVdfRkxPT0RfRVZFTlRfRkxBR19TVEFSVCAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgSVdfRkxPT0RfQVVUSF9FVkVOVF9GTEFHCQkJCQkweDA0MDAKKyNkZWZpbmUgSVdfRkxPT0RfQVNTT0NfUkVRX0VWRU5UX0ZMQUcJCQkJMHgwNDAxCisjZGVmaW5lIElXX0ZMT09EX1JFQVNTT0NfUkVRX0VWRU5UX0ZMQUcJCQkJMHgwNDAyCisjZGVmaW5lIElXX0ZMT09EX1BST0JFX1JFUV9FVkVOVF9GTEFHCQkJCTB4MDQwMworI2RlZmluZSBJV19GTE9PRF9ESVNBU1NPQ19FVkVOVF9GTEFHCQkJCTB4MDQwNAorI2RlZmluZSBJV19GTE9PRF9ERUFVVEhfRVZFTlRfRkxBRwkJCQkJMHgwNDA1CisjZGVmaW5lIElXX0ZMT09EX0VBUF9SRVFfRVZFTlRfRkxBRwkJCQkJMHgwNDA2CisvLyBpZiBhZGQgbmV3IGZsb29kaW5nIGF0dGFjayBldmVudCBmbGFnLCBwbGVhc2UgdXBhZHRlIHRoZSBJV19GTE9PRF9FVkVOVF9GTEFHX0VORAorI2RlZmluZQlJV19GTE9PRF9FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAJMHgwNDA2CisjZGVmaW5lCUlXX0ZMT09EX0VWRU5UX1RZUEVfTlVNCQkJCQkJKElXX0ZMT09EX0VWRU5UX0ZMQUdfRU5EIC0gSVdfRkxPT0RfRVZFTlRfRkxBR19TVEFSVCArIDEpCisvLyBGb3IgZmxvb2RpbmcgYXR0YWNrIC0gZW5kCisKKy8vIEVuZCAtIFdJUkVMRVNTIEVWRU5UUyBkZWZpbml0aW9uCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8vIGRlZmluaXRpb24gZm9yIERMUywga2F0aHkKKyNkZWZpbmUJTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWSAgIDEKKyNkZWZpbmUJTUFYX05VTV9PRl9ETFNfRU5UUlkgICAgICAgIE1BWF9OVU1CRVJfT0ZfRExTX0VOVFJZCisKKy8vQmxvY2sgQUNLICwgcnQyODYwLCBrYXRoeQorI2RlZmluZSBNQVhfVFhfUkVPUkRFUkJVRgkJNjQKKyNkZWZpbmUgTUFYX1JYX1JFT1JERVJCVUYJCTY0CisjZGVmaW5lIERFRkFVTFRfVFhfVElNRU9VVAkJMzAKKyNkZWZpbmUgREVGQVVMVF9SWF9USU1FT1VUCQkzMAorI2lmbmRlZiBDT05GSUdfQVBfU1VQUE9SVAorI2RlZmluZSBNQVhfQkFSRUNJX1NFU1NJT04JCTgKKyNlbmRpZgorCisjaWZuZGVmIElXX0VTU0lEX01BWF9TSVpFCisvKiBNYXhpbXVtIHNpemUgb2YgdGhlIEVTU0lEIGFuZCBwQWQtPm5pY2tuYW1lIHN0cmluZ3MgKi8KKyNkZWZpbmUgSVdfRVNTSURfTUFYX1NJWkUgICAJCTMyCisjZW5kaWYKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIE1DQVNUX1JBVEVfU1BFQ0lGSUMKKyNkZWZpbmUgTUNBU1RfRElTQUJMRQkwCisjZGVmaW5lIE1DQVNUX0NDSwkJMQorI2RlZmluZSBNQ0FTVF9PRkRNCQkyCisjZGVmaW5lIE1DQVNUX0hUTUlYCQkzCisjZW5kaWYgLy8gTUNBU1RfUkFURV9TUEVDSUZJQyAvLworCisvLyBGb3IgQXNpY1JhZGlvT2ZmL0FzaWNSYWRpb09uIGZ1bmN0aW9uCisjZGVmaW5lIERPVDExUE9XRVJTQVZFCQkwCisjZGVmaW5lIEdVSVJBRElPX09GRgkJMQorI2RlZmluZSBSVE1QX0hBTFQJCSAgICAyCisjZGVmaW5lIEdVSV9JRExFX1BPV0VSX1NBVkUJCTMKKy8vIC0tCisKKworLy8gZGVmaW5pdGlvbiBmb3IgV3BhU3VwcG9ydCBmbGFnCisjZGVmaW5lIFdQQV9TVVBQTElDQU5UX0RJU0FCTEUJCQkJMAorI2RlZmluZSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUJCQkJMQorI2RlZmluZQlXUEFfU1VQUExJQ0FOVF9FTkFCTEVfV0lUSF9XRUJfVUkJMgorCisvLyBFbmRpYW4gYnl0ZSBzd2FwcGluZyBjb2RlcworI2RlZmluZSBTV0FQMTYoeCkgXAorICAgICgoVUlOVDE2KSggXAorICAgICgoKFVJTlQxNikoeCkgJiAoVUlOVDE2KSAweDAwZmZVKSA8PCA4KSB8IFwKKyAgICAoKChVSU5UMTYpKHgpICYgKFVJTlQxNikgMHhmZjAwVSkgPj4gOCkgKSkKKworI2RlZmluZSBTV0FQMzIoeCkgXAorICAgICgoVUlOVDMyKSggXAorICAgICgoKFVJTlQzMikoeCkgJiAoVUlOVDMyKSAweDAwMDAwMGZmVUwpIDw8IDI0KSB8IFwKKyAgICAoKChVSU5UMzIpKHgpICYgKFVJTlQzMikgMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCBcCisgICAgKCgoVUlOVDMyKSh4KSAmIChVSU5UMzIpIDB4MDBmZjAwMDBVTCkgPj4gIDgpIHwgXAorICAgICgoKFVJTlQzMikoeCkgJiAoVUlOVDMyKSAweGZmMDAwMDAwVUwpID4+IDI0KSApKQorCisjZGVmaW5lIFNXQVA2NCh4KSBcCisgICAgKChVSU5UNjQpKCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSA8PCA1NikgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDAwMDAwMDBmZjAwVUxMKSA8PCA0MCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCAgOCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCBcCisgICAgKFVJTlQ2NCkoKChVSU5UNjQpKHgpICYgKFVJTlQ2NCkgMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSkKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKworI2RlZmluZSBjcHUybGU2NCh4KSBTV0FQNjQoKHgpKQorI2RlZmluZSBsZTJjcHU2NCh4KSBTV0FQNjQoKHgpKQorI2RlZmluZSBjcHUybGUzMih4KSBTV0FQMzIoKHgpKQorI2RlZmluZSBsZTJjcHUzMih4KSBTV0FQMzIoKHgpKQorI2RlZmluZSBjcHUybGUxNih4KSBTV0FQMTYoKHgpKQorI2RlZmluZSBsZTJjcHUxNih4KSBTV0FQMTYoKHgpKQorI2RlZmluZSBjcHUyYmU2NCh4KSAoKFVJTlQ2NCkoeCkpCisjZGVmaW5lIGJlMmNwdTY0KHgpICgoVUlOVDY0KSh4KSkKKyNkZWZpbmUgY3B1MmJlMzIoeCkgKChVSU5UMzIpKHgpKQorI2RlZmluZSBiZTJjcHUzMih4KSAoKFVJTlQzMikoeCkpCisjZGVmaW5lIGNwdTJiZTE2KHgpICgoVUlOVDE2KSh4KSkKKyNkZWZpbmUgYmUyY3B1MTYoeCkgKChVSU5UMTYpKHgpKQorCisjZWxzZSAgIC8vIExpdHRsZV9FbmRpYW4KKworI2RlZmluZSBjcHUybGU2NCh4KSAoKFVJTlQ2NCkoeCkpCisjZGVmaW5lIGxlMmNwdTY0KHgpICgoVUlOVDY0KSh4KSkKKyNkZWZpbmUgY3B1MmxlMzIoeCkgKChVSU5UMzIpKHgpKQorI2RlZmluZSBsZTJjcHUzMih4KSAoKFVJTlQzMikoeCkpCisjZGVmaW5lIGNwdTJsZTE2KHgpICgoVUlOVDE2KSh4KSkKKyNkZWZpbmUgbGUyY3B1MTYoeCkgKChVSU5UMTYpKHgpKQorI2RlZmluZSBjcHUyYmU2NCh4KSBTV0FQNjQoKHgpKQorI2RlZmluZSBiZTJjcHU2NCh4KSBTV0FQNjQoKHgpKQorI2RlZmluZSBjcHUyYmUzMih4KSBTV0FQMzIoKHgpKQorI2RlZmluZSBiZTJjcHUzMih4KSBTV0FQMzIoKHgpKQorI2RlZmluZSBjcHUyYmUxNih4KSBTV0FQMTYoKHgpKQorI2RlZmluZSBiZTJjcHUxNih4KSBTV0FQMTYoKHgpKQorCisjZW5kaWYgIC8vIFJUX0JJR19FTkRJQU4KKworI2VuZGlmICAvLyBfX1JUTVBfREVGX0hfXworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF90eXBlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNGIxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfdHlwZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgcnRtcF90eXBlLmgKKworICAgIEFic3RyYWN0OgorCisgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICBXaG8gICAgICAgICBXaGVuICAgICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgTmFtZSAgICAgICAgRGF0ZSAgICAgICAgICAgIE1vZGlmaWNhdGlvbiBsb2dzCisgICAgUGF1bCBMaW4gICAgMS0yLTIwMDQKKyovCisjaWZuZGVmIF9fUlRNUF9UWVBFX0hfXworI2RlZmluZSBfX1JUTVBfVFlQRV9IX18KKworCisjZGVmaW5lIFBBQ0tFRCAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKKy8vIFB1dCBwbGF0Zm9ybSBkZXBlbmRlbnQgZGVjbGFyYXRpb24gaGVyZQorLy8gRm9yIGV4YW1wbGUsIGxpbnV4IHR5cGUgZGVmaW5pdGlvbgordHlwZWRlZiB1bnNpZ25lZCBjaGFyCQlVSU5UODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCVVJTlQxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQlVSU5UMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlVSU5UNjQ7Cit0eXBlZGVmIGludAkJCQkJSU5UMzI7Cit0eXBlZGVmIGxvbmcgbG9uZyAJCQlJTlQ2NDsKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICoJCQlQVUlOVDg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICoJCVBVSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAqCQkJUFVJTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICoJUFVJTlQ2NDsKK3R5cGVkZWYgaW50CSoJCQkJCVBJTlQzMjsKK3R5cGVkZWYgbG9uZyBsb25nICogCQkJUElOVDY0OworCit0eXBlZGVmIHNpZ25lZCBjaGFyCQkJQ0hBUjsKK3R5cGVkZWYgc2lnbmVkIHNob3J0CQlTSE9SVDsKK3R5cGVkZWYgc2lnbmVkIGludAkJCUlOVDsKK3R5cGVkZWYgc2lnbmVkIGxvbmcJCQlMT05HOwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nCUxPTkdMT05HOworCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkJVUNIQVI7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlVU0hPUlQ7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkJVUlOVDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJVUxPTkc7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlVTE9OR0xPTkc7CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkJQk9PTEVBTjsKK3R5cGVkZWYgdm9pZAkJCQlWT0lEOworCit0eXBlZGVmIFZPSUQgKgkJCQlQVk9JRDsKK3R5cGVkZWYgQ0hBUiAqCQkJCVBDSEFSOwordHlwZWRlZiBVQ0hBUiAqIAkJCVBVQ0hBUjsKK3R5cGVkZWYgVVNIT1JUICoJCQlQVVNIT1JUOwordHlwZWRlZiBMT05HICoJCQkJUExPTkc7Cit0eXBlZGVmIFVMT05HICoJCQkJUFVMT05HOwordHlwZWRlZiBVSU5UICoJCQkJUFVJTlQ7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50CU5ESVNfTUVESUFfU1RBVEU7CisKK3R5cGVkZWYgdW5pb24gX0xBUkdFX0lOVEVHRVIgeworICAgIHN0cnVjdCB7CisgICAgICAgIFVJTlQgTG93UGFydDsKKyAgICAgICAgSU5UMzIgSGlnaFBhcnQ7CisgICAgfSB1OworICAgIElOVDY0IFF1YWRQYXJ0OworfSBMQVJHRV9JTlRFR0VSOworCisjZW5kaWYgIC8vIF9fUlRNUF9UWVBFX0hfXworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3NwZWN0cnVtLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3NwZWN0cnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjZmE1YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3BlY3RydW0uaApAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX1NQRUNUUlVNX0hfXworI2RlZmluZSBfX1NQRUNUUlVNX0hfXworCisjaW5jbHVkZSAicnRtcF90eXBlLmgiCisjaW5jbHVkZSAic3BlY3RydW1fZGVmLmgiCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfVFBDX1JFUE9SVF9JTkZPCit7CisJVUlOVDggVHhQd3I7CisJVUlOVDggTGlua01hcmdpbjsKK30gVFBDX1JFUE9SVF9JTkZPLCAqUFRQQ19SRVBPUlRfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9DSF9TV19BTk5fSU5GTworeworCVVJTlQ4IENoU3dNb2RlOworCVVJTlQ4IENoYW5uZWw7CisJVUlOVDggQ2hTd0NudDsKK30gQ0hfU1dfQU5OX0lORk8sICpQQ0hfU1dfQU5OX0lORk87CisKK3R5cGVkZWYgdW5pb24gUEFDS0VEIF9NRUFTVVJFX1JFUV9NT0RFCit7CisjaWZkZWYgUlRfQklHX0VORElBTgorCXN0cnVjdCBQQUNLRUQKKwl7CisJCVVJTlQ4IFJldjE6NDsKKwkJVUlOVDggUmVwb3J0OjE7CisJCVVJTlQ4IFJlcXVlc3Q6MTsKKwkJVUlOVDggRW5hYmxlOjE7CisJCVVJTlQ4IFJldjA6MTsKKwl9IGZpZWxkOworI2Vsc2UKKwlzdHJ1Y3QgUEFDS0VECisJeworCQlVSU5UOCBSZXYwOjE7CisJCVVJTlQ4IEVuYWJsZToxOworCQlVSU5UOCBSZXF1ZXN0OjE7CisJCVVJTlQ4IFJlcG9ydDoxOworCQlVSU5UOCBSZXYxOjQ7CisJfSBmaWVsZDsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJVUlOVDggd29yZDsKK30gTUVBU1VSRV9SRVFfTU9ERSwgKlBNRUFTVVJFX1JFUV9NT0RFOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfUkVRCit7CisJVUlOVDggQ2hOdW07CisJVUlOVDY0IE1lYXN1cmVTdGFydFRpbWU7CisJVUlOVDE2IE1lYXN1cmVEdXJhdGlvbjsKK30gTUVBU1VSRV9SRVEsICpQTUVBU1VSRV9SRVE7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTUVBU1VSRV9SRVFfSU5GTworeworCVVJTlQ4IFRva2VuOworCU1FQVNVUkVfUkVRX01PREUgUmVxTW9kZTsKKwlVSU5UOCBSZXFUeXBlOworCU1FQVNVUkVfUkVRIE1lYXN1cmVSZXE7Cit9IE1FQVNVUkVfUkVRX0lORk8sICpQTUVBU1VSRV9SRVFfSU5GTzsKKwordHlwZWRlZiB1bmlvbiBQQUNLRUQgX01FQVNVUkVfQkFTSUNfUkVQT1JUX01BUAoreworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlzdHJ1Y3QgUEFDS0VECisJeworCQlVSU5UOCBSZXY6MzsKKwkJVUlOVDggVW5tZWFzdXJlOjE7CisJCVVJTlQ4IFJhZGFyOjE7CisJCVVJTlQ4IFVuaWRlbnRpZmllZFNpZ25hbDoxOworCQlVSU5UOCBPZmRtUHJlYW1ibGU6MTsKKwkJVUlOVDggQlNTOjE7CisJfSBmaWVsZDsKKyNlbHNlCisJc3RydWN0IFBBQ0tFRAorCXsKKwkJVUlOVDggQlNTOjE7CisJCVVJTlQ4IE9mZG1QcmVhbWJsZToxOworCQlVSU5UOCBVbmlkZW50aWZpZWRTaWduYWw6MTsKKwkJVUlOVDggUmFkYXI6MTsKKwkJVUlOVDggVW5tZWFzdXJlOjE7CisJCVVJTlQ4IFJldjozOworCX0gZmllbGQ7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCVVJTlQ4IHdvcmQ7Cit9IE1FQVNVUkVfQkFTSUNfUkVQT1JUX01BUCwgKlBNRUFTVVJFX0JBU0lDX1JFUE9SVF9NQVA7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTUVBU1VSRV9CQVNJQ19SRVBPUlQKK3sKKwlVSU5UOCBDaE51bTsKKwlVSU5UNjQgTWVhc3VyZVN0YXJ0VGltZTsKKwlVSU5UMTYgTWVhc3VyZUR1cmF0aW9uOworCU1FQVNVUkVfQkFTSUNfUkVQT1JUX01BUCBNYXA7Cit9IE1FQVNVUkVfQkFTSUNfUkVQT1JULCAqUE1FQVNVUkVfQkFTSUNfUkVQT1JUOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfQ0NBX1JFUE9SVAoreworCVVJTlQ4IENoTnVtOworCVVJTlQ2NCBNZWFzdXJlU3RhcnRUaW1lOworCVVJTlQxNiBNZWFzdXJlRHVyYXRpb247CisJVUlOVDggQ0NBX0J1c3lfRnJhY3Rpb247Cit9IE1FQVNVUkVfQ0NBX1JFUE9SVCwgKlBNRUFTVVJFX0NDQV9SRVBPUlQ7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTUVBU1VSRV9SUElfUkVQT1JUCit7CisJVUlOVDggQ2hOdW07CisJVUlOVDY0IE1lYXN1cmVTdGFydFRpbWU7CisJVUlOVDE2IE1lYXN1cmVEdXJhdGlvbjsKKwlVSU5UOCBSUElfRGVuc2l0eVs4XTsKK30gTUVBU1VSRV9SUElfUkVQT1JULCAqUE1FQVNVUkVfUlBJX1JFUE9SVDsKKwordHlwZWRlZiB1bmlvbiBQQUNLRUQgX01FQVNVUkVfUkVQT1JUX01PREUKK3sKKwlzdHJ1Y3QgUEFDS0VECisJeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJVUlOVDggUmV2OjU7CisJCVVJTlQ4IFJlZnVzZWQ6MTsKKwkJVUlOVDggSW5jYXBhYmxlOjE7CisJCVVJTlQ4IExhdGU6MTsKKyNlbHNlCisJCVVJTlQ4IExhdGU6MTsKKwkJVUlOVDggSW5jYXBhYmxlOjE7CisJCVVJTlQ4IFJlZnVzZWQ6MTsKKwkJVUlOVDggUmV2OjU7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCX0gZmllbGQ7CisJVUlOVDggd29yZDsKK30gTUVBU1VSRV9SRVBPUlRfTU9ERSwgKlBNRUFTVVJFX1JFUE9SVF9NT0RFOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfUkVQT1JUX0lORk8KK3sKKwlVSU5UOCBUb2tlbjsKKwlNRUFTVVJFX1JFUE9SVF9NT0RFIFJlcG9ydE1vZGU7CisJVUlOVDggUmVwb3J0VHlwZTsKKwlVSU5UOCBPY3RlY3RbMF07Cit9IE1FQVNVUkVfUkVQT1JUX0lORk8sICpQTUVBU1VSRV9SRVBPUlRfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9RVUlFVF9JTkZPCit7CisJVUlOVDggUXVpZXRDbnQ7CisJVUlOVDggUXVpZXRQZXJpb2Q7CisJVUlOVDggUXVpZXREdXJhdGlvbjsKKwlVSU5UOCBRdWlldE9mZnNldDsKK30gUVVJRVRfSU5GTywgKlBRVUlFVF9JTkZPOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgTWVhc3VyZW1lbnQgcmVxdWVzdCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVNZWFzdXJlbWVudFJlcSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVJTlQ4IE1lYXN1cmVUb2tlbiwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxTW9kZSwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxVHlwZSwKKwlJTiBVSU5UOCBNZWFzdXJlQ2gsCisJSU4gVUlOVDE2IE1lYXN1cmVEdXJhdGlvbik7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBNZWFzdXJlbWVudCByZXBvcnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlTWVhc3VyZW1lbnRSZXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBEaWFsb2dUb2tlbiwKKwlJTiBVSU5UOCBNZWFzdXJlVG9rZW4sCisJSU4gVUlOVDggTWVhc3VyZVJlcU1vZGUsCisJSU4gVUlOVDggTWVhc3VyZVJlcVR5cGUsCisJSU4gVUlOVDggUmVwb3J0SW5mb0xlbiwKKwlJTiBQVUlOVDggcFJlcG9ydEluZm8pOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgVFBDIFJlcXVlc3QgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlVFBDUmVxKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUNIQVIgRGlhbG9nVG9rZW4pOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgVFBDIFJlcG9ydCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVUUENSZXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBEaWFsb2dUb2tlbiwKKwlJTiBVSU5UOCBUeFB3ciwKKwlJTiBVSU5UOCBMaW5rTWFyZ2luKTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCQkyLiBDaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgbW9kZS4KKwkJMi4gYSBOZXcgc2VsZWN0ZWQgY2hhbm5lbC4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlQ2hTd0FubigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVJTlQ4IENoU3dNb2RlLAorCUlOIFVJTlQ4IE5ld0NoKTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTcGVjdHJ1biBhY3Rpb24gZnJhbWVzIEhhbmRsZXIgc3VjaCBhcyBjaGFubmVsIHN3aXRjaCBhbm5vdWNlbWVudCwKKwkJbWVhc3VyZW1lbnQgcmVwb3J0LCBtZWFzdXJlbWVudCByZXF1ZXN0IGFjdGlvbnMgZnJhbWVzLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlclNwZWN0cnVtQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCVBhcmFtZXRyczoKKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworSU5UIFNldF9NZWFzdXJlUmVxX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9UcGNSZXFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitWT0lEIE1lYXN1cmVSZXFUYWJJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBNZWFzdXJlUmVxVGFiRXhpdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgVHBjUmVxVGFiSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgVHBjUmVxVGFiRXhpdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgTm90aWZ5Q2hTd0FublRvUGVlckFQcygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcFJBLAorCUlOIFBVQ0hBUiBwVEEsCisJSU4gVUlOVDggQ2hTd01vZGUsCisJSU4gVUlOVDggQ2hhbm5lbCk7CisjZW5kaWYgLy8gX19TUEVDVFJVTV9IX18gLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zcGVjdHJ1bV9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3BlY3RydW1fZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhNDgxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3BlY3RydW1fZGVmLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKwlzcGVjdHJ1bV9kZWYuaAorCisgICAgQWJzdHJhY3Q6CisgICAgSGFuZGxlIGFzc29jaWF0aW9uIHJlbGF0ZWQgcmVxdWVzdHMgZWl0aGVyIGZyb20gV1NUQSBvciBmcm9tIGxvY2FsIE1MTUUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlGb25jaGkgV3UgICAgMjAwOAkgIAkgICBjcmVhdGVkIGZvciA4MDIuMTFoCisgKi8KKworI2lmbmRlZiBfX1NQRUNUUlVNX0RFRl9IX18KKyNkZWZpbmUgX19TUEVDVFJVTV9ERUZfSF9fCisKKyNkZWZpbmUgTUFYX01FQVNVUkVfUkVRX1RBQl9TSVpFCQkzCisjZGVmaW5lIE1BWF9IQVNIX01FQVNVUkVfUkVRX1RBQl9TSVpFCU1BWF9NRUFTVVJFX1JFUV9UQUJfU0laRQorCisjZGVmaW5lIE1BWF9UUENfUkVRX1RBQl9TSVpFCQkJMworI2RlZmluZSBNQVhfSEFTSF9UUENfUkVRX1RBQl9TSVpFCQlNQVhfVFBDX1JFUV9UQUJfU0laRQorCisjZGVmaW5lIE1JTl9SQ1ZfUFdSCQkJCTEwMAkJLyogTmVnYXRpdmUgdmFsdWUgKChkQm0pICovCisKKyNkZWZpbmUgUk1fVFBDX1JFUQkJCQkwCisjZGVmaW5lIFJNX01FQVNVUkVfUkVRCQkJMQorCisjZGVmaW5lIFJNX0JBU0lDCQkJCTAKKyNkZWZpbmUgUk1fQ0NBCQkJCQkxCisjZGVmaW5lIFJNX1JQSV9ISVNUT0dSQU0JCTIKKworI2RlZmluZSBUUENfUkVRX0FHRV9PVVQJCQk1MDAJCS8qIG1zICovCisjZGVmaW5lIE1RX1JFUV9BR0VfT1VUCQkJNTAwCQkvKiBtcyAqLworCisjZGVmaW5lIFRQQ19ESUFMT0dUT0tFTl9IQVNIX0lOREVYKF9EaWFsb2dUb2tlbikJKChfRGlhbG9nVG9rZW4pICUgTUFYX0hBU0hfVFBDX1JFUV9UQUJfU0laRSkKKyNkZWZpbmUgTVFfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChfRGlhbG9nVG9rZW4pCQkoKF9EaWFsb2dUb2tlbikgJSBNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkUpCisKK3R5cGVkZWYgc3RydWN0IF9NRUFTVVJFX1JFUV9FTlRSWQoreworCXN0cnVjdCBfTUVBU1VSRV9SRVFfRU5UUlkgKnBOZXh0OworCVVMT05HIGxhc3RUaW1lOworCUJPT0xFQU4JVmFsaWQ7CisJVUlOVDggRGlhbG9nVG9rZW47CisJVUlOVDggTWVhc3VyZURpYWxvZ1Rva2VuWzNdOwkvLyAwOmJhc2ljIG1lYXN1cmUsIDE6IENDQSBtZWFzdXJlLCAyOiBSUElfSGlzdG9ncmFtIG1lYXN1cmUuCit9IE1FQVNVUkVfUkVRX0VOVFJZLCAqUE1FQVNVUkVfUkVRX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfTUVBU1VSRV9SRVFfVEFCCit7CisJVUNIQVIgU2l6ZTsKKwlQTUVBU1VSRV9SRVFfRU5UUlkgSGFzaFtNQVhfSEFTSF9NRUFTVVJFX1JFUV9UQUJfU0laRV07CisJTUVBU1VSRV9SRVFfRU5UUlkgQ29udGVudFtNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkVdOworfSBNRUFTVVJFX1JFUV9UQUIsICpQTUVBU1VSRV9SRVFfVEFCOworCit0eXBlZGVmIHN0cnVjdCBfVFBDX1JFUV9FTlRSWQoreworCXN0cnVjdCBfVFBDX1JFUV9FTlRSWSAqcE5leHQ7CisJVUxPTkcgbGFzdFRpbWU7CisJQk9PTEVBTiBWYWxpZDsKKwlVSU5UOCBEaWFsb2dUb2tlbjsKK30gVFBDX1JFUV9FTlRSWSwgKlBUUENfUkVRX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfVFBDX1JFUV9UQUIKK3sKKwlVQ0hBUiBTaXplOworCVBUUENfUkVRX0VOVFJZIEhhc2hbTUFYX0hBU0hfVFBDX1JFUV9UQUJfU0laRV07CisJVFBDX1JFUV9FTlRSWSBDb250ZW50W01BWF9UUENfUkVRX1RBQl9TSVpFXTsKK30gVFBDX1JFUV9UQUIsICpQVFBDX1JFUV9UQUI7CisKKyNlbmRpZiAvLyBfX1NQRUNUUlVNX0RFRl9IX18gLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYWlyb25ldC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYWlyb25ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjRhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9haXJvbmV0LmMKQEAgLTAsMCArMSwxMzEyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWFpcm9uZXQuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVBhdWwgTGluCTA0LTA2LTE1CQlJbml0aWFsCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWFzc29jaWF0aW9uCXN0YXRlIG1hY2hpbmUgaW5pdCwJaW5jbHVkaW5nIHN0YXRlCXRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKKwlQYXJhbWV0ZXJzOgorCQlTIC0JcG9pbnRlcgl0byB0aGUgYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQJQWlyb25ldFN0YXRlTWFjaGluZUluaXQoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVNUQVRFX01BQ0hJTkUJCSpTLAorCU9VVAlTVEFURV9NQUNISU5FX0ZVTkMJVHJhbnNbXSkKK3sKKwlTdGF0ZU1hY2hpbmVJbml0KFMsCVRyYW5zLCBNQVhfQUlST05FVF9TVEFURSwgTUFYX0FJUk9ORVRfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIEFJUk9ORVRfSURMRSwgQUlST05FVF9NQUNISU5FX0JBU0UpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBSVJPTkVUX0lETEUsIE1UMl9BSVJPTkVUX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylBaXJvbmV0TXNnQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUlST05FVF9JRExFLCBNVDJfQUlST05FVF9TQ0FOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylBaXJvbmV0UmVxdWVzdEFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFJUk9ORVRfU0NBTk5JTkcsIE1UMl9BSVJPTkVUX1NDQU5fRE9ORSwgKFNUQVRFX01BQ0hJTkVfRlVOQylBaXJvbmV0UmVwb3J0QWN0aW9uKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIGlzCXN0YXRlIG1hY2hpbmUgZnVuY3Rpb24uCisJCVdoZW4gcmVjZWl2aW5nIEVBUE9MIHBhY2tldHMgd2hpY2ggaXMgIGZvciA4MDIuMXgga2V5IG1hbmFnZW1lbnQuCisJCVVzZQlib3RoIGluCVdQQSwgYW5kIFdQQVBTSwljYXNlLgorCQlJbiB0aGlzCWZ1bmN0aW9uLCBmdXJ0aGVyIGRpc3BhdGNoIHRvIGRpZmZlcmVudAlmdW5jdGlvbnMgYWNjb3JkaW5nCXRvIHRoZSByZWNlaXZlZAlwYWNrZXQuCSAzIGNhdGVnb3JpZXMgYXJlIDoKKwkJICAxLiAgbm9ybWFsIDQtd2F5IHBhaXJ3aXNla2V5IGFuZCAyLXdheSBncm91cGtleSBoYW5kc2hha2UKKwkJICAyLiAgTUlDIGVycm9yCShDb3VudGVybWVhc3VyZXMgYXR0YWNrKSAgcmVwb3J0IHBhY2tldAlmcm9tIFNUQS4KKwkJICAzLiAgUmVxdWVzdCBmb3IgcGFpcndpc2UvZ3JvdXAga2V5IHVwZGF0ZQlmcm9tIFNUQQorCVJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQWlyb25ldE1zZ0FjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNTE1FX1FVRVVFX0VMRU0JKkVsZW0pCit7CisJVVNIT1JUCQkJCQkJCUxlbmd0aDsKKwlVQ0hBUgkJCQkJCQlJbmRleCwgaTsKKwlQVUNIQVIJCQkJCQkJcERhdGE7CisJUEFJUk9ORVRfUk1fUkVRVUVTVF9GUkFNRQkJcFJNUmVxOworCVBSTV9SRVFVRVNUX0FDVElPTgkJCQlwUmVxRWxlbTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLS0tPiBBaXJvbmV0TXNnQWN0aW9uXG4iKSk7CisKKwkvLyAwLiBHZXQgQWlyb25ldCBJQVBQIGhlYWRlciBmaXJzdAorCXBSTVJlcSA9IChQQUlST05FVF9STV9SRVFVRVNUX0ZSQU1FKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTFdOworCXBEYXRhICA9IChQVUNIQVIpICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMV07CisKKwkvLyAxLiBDaGFuZ2UgZW5kaWFuIGZvcm1hdCBmb3JtIG5ldHdvcmsgdG8gbGl0dGxlIGVuZGlhbgorCUxlbmd0aCA9IGJlMmNwdTE2KHBSTVJlcS0+SUFQUC5MZW5ndGgpOworCisJLy8gMi4wIFNhbml0eSBjaGVjaywgdGhpcyBzaG91bGQgb25seSBoYXBwZW4gd2hlbiBDQ1ggMi4wIHN1cHBvcnQgaXMgZW5hYmxlZAorCWlmIChwQWQtPlN0YUNmZy5DQ1hFbmFibGUgIT0gVFJVRSkKKwkJcmV0dXJuOworCisJLy8gMi4xIFJhZGlvIG1lYXN1cmVtZW50IG11c3QgYmUgb24KKwlpZiAocEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5STUVuYWJsZSAhPSAxKQorCQlyZXR1cm47CisKKwkvLyAyLjIuIERlYnVnIHByaW50IGFsbCBiaXQgaW5mb3JtYXRpb24KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIElEICYgTGVuZ3RoICVkXG4iLCBMZW5ndGgpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIFR5cGUgJXhcbiIsIHBSTVJlcS0+SUFQUC5UeXBlKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUFQUCBTdWJUeXBlICV4XG4iLCBwUk1SZXEtPklBUFAuU3ViVHlwZSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklBUFAgRGlhbG9nIFRva2VuICV4XG4iLCBwUk1SZXEtPklBUFAuVG9rZW4pKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIEFjdGl2YXRpb24gRGVsYXkgJXhcbiIsIHBSTVJlcS0+RGVsYXkpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIE1lYXN1cmVtZW50IE9mZnNldCAleFxuIiwgcFJNUmVxLT5PZmZzZXQpKTsKKworCS8vIDMuIENoZWNrIElBUFAgZnJhbWUgdHlwZSwgaXQgbXVzdCBiZSAweDMyIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvbgorCWlmIChwUk1SZXEtPklBUFAuVHlwZSAhPSBBSVJPTkVUX0lBUFBfVFlQRSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIldyb25nIElBUFAgdHlwZSBmb3IgQ2lzY28gQWlyb25ldCBleHRlbnNpb25cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCS8vIDQuIENoZWNrIElBUFAgZnJhbWUgc3VidHlwZSwgaXQgbXVzdCBiZSAweDAxIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvbiByZXF1ZXN0LgorCS8vICAgIFNpbmNlIHdlIGFyZSBhY3RpbmcgYXMgY2xpZW50IG9ubHksIHdlIHdpbGwgZGlzcmVnYXJkcyByZXBseSBzdWJ0eXBlLgorCWlmIChwUk1SZXEtPklBUFAuU3ViVHlwZSAhPSBBSVJPTkVUX0lBUFBfU1VCVFlQRV9SRVFVRVNUKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiV3JvbmcgSUFQUCBzdWJ0eXBlIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvblxuIikpOworCQlyZXR1cm47CisJfQorCisJLy8gNS4gVmVyaWZ5IERlc3RpbmF0aW9uIE1BQyBhbmQgU291cmNlIE1BQywgYm90aCBzaG91bGQgYmUgYWxsIHplcm9zLgorCWlmICghIE1BQ19BRERSX0VRVUFMKHBSTVJlcS0+SUFQUC5EQSwgWkVST19NQUNfQUREUikpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJXcm9uZyBJQVBQIERBIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvbiwgaXQncyBub3QgWmVyb1xuIikpOworCQlyZXR1cm47CisJfQorCisJaWYgKCEgTUFDX0FERFJfRVFVQUwocFJNUmVxLT5JQVBQLlNBLCBaRVJPX01BQ19BRERSKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIldyb25nIElBUFAgU0EgZm9yIENpc2NvIEFpcm9uZXQgZXh0ZW5zaW9uLCBpdCdzIG5vdCBaZXJvXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvLyA2LiBSZWluaXQgYWxsIHJlcG9ydCByZWxhdGVkIGZpZWxkcworCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmLCAyMDQ4KTsKKwlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5Cc3NSZXBvcnRPZmZzZXQsIHNpemVvZihVU0hPUlQpICogTUFYX0xFTl9PRl9CU1NfVEFCTEUpOworCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdCwgc2l6ZW9mKFJNX1JFUVVFU1RfQUNUSU9OKSAqIDQpOworCisJLy8gNy4gUG9pbnQgdG8gdGhlIHN0YXJ0IG9mIGZpcnN0IGVsZW1lbnQgcmVwb3J0IGVsZW1lbnQKKwlwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiAgID0gTEVOR1RIXzgwMl8xMSArIHNpemVvZihBSVJPTkVUX0lBUFBfSEVBREVSKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGUiBsZW4gPSAlZFxuIiwgcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4pKTsKKwlwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXggICAgID0gMHhmZjsKKwlwQWQtPlN0YUNmZy5STVJlcUNudCAgICAgICAgID0gMDsKKwlwQWQtPlN0YUNmZy5QYXJhbGxlbFJlcSAgICAgID0gRkFMU0U7CisJcEFkLT5TdGFDZmcuUGFyYWxsZWxEdXJhdGlvbiA9IDA7CisJcEFkLT5TdGFDZmcuUGFyYWxsZWxDaGFubmVsICA9IDA7CisJcEFkLT5TdGFDZmcuSUFQUFRva2VuICAgICAgICA9IHBSTVJlcS0+SUFQUC5Ub2tlbjsKKwlwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHggID0gMDsKKwlwQWQtPlN0YUNmZy5DTEJ1c3lCeXRlcyAgICAgID0gMDsKKwkvLyBSZXNldCB0aGUgc3RhdGlzdGljcworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0gPSAwOworCisJSW5kZXggPSAwOworCisJLy8gOC4gU2F2ZSBkaWFsb2cgdG9rZW4gZm9yIHJlcG9ydAorCXBBZC0+U3RhQ2ZnLklBUFBUb2tlbiA9IHBSTVJlcS0+SUFQUC5Ub2tlbjsKKworCS8vIFNhdmUgQWN0aXZhdGlvbiBkZWxheSAmIG1lYXN1cmVtZW50IG9mZnNldCwgTm90IHJlYWxseSBuZWVkZWQKKworCS8vIDkuIFBvaW50IHRvIHRoZSBmaXJzdCByZXF1ZXN0IGVsZW1lbnQKKwlwRGF0YSArPSBzaXplb2YoQUlST05FVF9STV9SRVFVRVNUX0ZSQU1FKTsKKwkvLyAgICBMZW5ndGggc2hvdWxkIGV4Y2x1ZGUgdGhlIENJU0NPIEFpcm9uZXQgU05BUCBoZWFkZXIKKwlMZW5ndGggLT0gKHNpemVvZihBSVJPTkVUX1JNX1JFUVVFU1RfRlJBTUUpIC0gTEVOR1RIXzgwMl8xX0gpOworCisJLy8gMTAuIFN0YXJ0IFBhcnNpbmcgdGhlIE1lYXN1cmVtZW50IGVsZW1lbnRzLgorCS8vICAgIEJlIGNhcmVmdWwgYWJvdXQgbXVsdGlwbGUgTVIgZWxlbWVudHMgd2l0aGluIG9uZSBmcmFtZXMuCisJd2hpbGUgKExlbmd0aCA+IDApCisJeworCQlwUmVxRWxlbSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pIHBEYXRhOworCQlzd2l0Y2ggKHBSZXFFbGVtLT5SZXFFbGVtLkVpZCkKKwkJeworCQkJY2FzZSBJRV9NRUFTVVJFTUVOVF9SRVFVRVNUOgorCQkJCS8vIEZyb20gdGhlIGV4YW1wbGUsIGl0IHNlZW1zIHdlIG9ubHkgbmVlZCB0byBzdXBwb3J0IG9uZSByZXF1ZXN0IGluIG9uZSBmcmFtZQorCQkJCS8vIFRoZXJlIGlzIG5vIG11bHRpcGxlIHJlcXVlc3QgaW4gb25lIGZyYW1lLgorCQkJCS8vIEJlc2lkZXMsIGxvb2tzIGxpa2Ugd2UgbmVlZCB0byB0YWtlIGNhcmUgdGhlIG1lYXN1cmVtZW50IHJlcXVlc3Qgb25seS4KKwkJCQkvLyBUaGUgbWVhc3VyZW1lbnQgcmVxdWVzdCBpcyBhbHdheXMgNCBieXRlcy4KKworCQkJCS8vIFN0YXJ0IHBhcnNpbmcgdGhpcyB0eXBlIG9mIHJlcXVlc3QuCisJCQkJLy8gMC4gRWlkIGlzIElFX01FQVNVUkVNRU5UX1JFUVVFU1QKKwkJCQkvLyAxLiBMZW5ndGggZGlkbid0IGluY2x1ZGUgRWlkIGFuZCBMZW5ndGggZmllbGQsIGl0IGFsd2F5cyBiZSA4LgorCQkJCS8vIDIuIE1lYXN1cmVtZW50IFRva2VuLCB3ZSBubmVkIHRvIHNhdmUgaXQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHJlcG9ydC4KKwkJCQkvLyAzLiBNZWFzdXJlbWVudCBNb2RlLCBBbHRob3VnaCB0aGVyZSBhcmUgZGVmaW5pdGlvbnMsIGJ1dCB3ZSBkaW4ndCBzZWUgdmFsdWUgb3RoZXIgdGhhbgorCQkJCS8vICAgIDAgZnJvbSB0ZXN0IHNwZWNzIGV4YW1wbGVzLgorCQkJCS8vIDQuIE1lYXN1cmVtZW50IFR5cGUsIHRoaXMgaXMgd2hhdCB3ZSBuZWVkIHRvIGRvLgorCQkJCXN3aXRjaCAocFJlcUVsZW0tPlJlcUVsZW0uVHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgTVNSTl9UWVBFX0NIQU5ORUxfTE9BRF9SRVE6CisJCQkJCWNhc2UgTVNSTl9UWVBFX05PSVNFX0hJU1RfUkVROgorCQkJCQljYXNlIE1TUk5fVFlQRV9CRUFDT05fUkVROgorCQkJCQkJLy8gQ2hlY2sgdGhlIEVuYWJsZSBub24tc2VydmluZyBjaGFubmVsIG1lYXN1cmVtZW50IGNvbnRyb2wKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5DQ1hDb250cm9sLmZpZWxkLkRDUk1FbmFibGUgPT0gMCkKKwkJCQkJCXsKKwkJCQkJCQkvLyBDaGVjayBjaGFubmVsIGJlZm9yZSBlbnF1ZXVlIHRoZSBhY3Rpb24KKwkJCQkJCQlpZiAocFJlcUVsZW0tPk1lYXN1cmVtZW50LkNoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJLy8gSWYgb2ZmIGNoYW5uZWwgbWVhc3VyZW1lbnQsIGNoZWNrIHRoZSBUVSBkdXJhdGlvbiBsaW1pdAorCQkJCQkJCWlmIChwUmVxRWxlbS0+TWVhc3VyZW1lbnQuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJCQkJCQlpZiAocFJlcUVsZW0tPk1lYXN1cmVtZW50LkR1cmF0aW9uID4gcEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5UdUxpbWl0KQorCQkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCS8vIFNhdmUgcmVxdWVzdHMgYW5kIGV4ZWN1dGUgYWN0aW9ucyBsYXRlcgorCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0sIHBSZXFFbGVtLCBzaXplb2YoUk1fUkVRVUVTVF9BQ1RJT04pKTsKKwkJCQkJCUluZGV4ICs9IDE7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIE1TUk5fVFlQRV9GUkFNRV9SRVE6CisJCQkJCQkvLyBTaW5jZSBpdCdzIG9wdGlvbiwgd2Ugd2lsbCBzdXBwb3J0IGxhdGVyCisJCQkJCQkvLyBGcmFtZVJlcXVlc3RBY3Rpb24ocEFkLCBwRGF0YSk7CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLy8gUG9pbnQgdG8gbmV4dCBNZWFzdXJlbWVudCByZXF1ZXN0CisJCQkJcERhdGEgICs9IHNpemVvZihSTV9SRVFVRVNUX0FDVElPTik7CisJCQkJTGVuZ3RoIC09IHNpemVvZihSTV9SRVFVRVNUX0FDVElPTik7CisJCQkJYnJlYWs7CisKKwkJCS8vIFdlIGFjY2VwdCByZXF1ZXN0IG9ubHksIGFsbCBvdGhlcnMgYXJlIGRyb3BwZWQKKwkJCWNhc2UgSUVfTUVBU1VSRU1FTlRfUkVQT1JUOgorCQkJY2FzZSBJRV9BUF9UWF9QT1dFUjoKKwkJCWNhc2UgSUVfTUVBU1VSRU1FTlRfQ0FQQUJJTElUWToKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuOworCQl9CisJfQorCisJLy8gMTEuIFVwZGF0ZSBzb21lIGZsYWdzIGFuZCBpbmRleAorCXBBZC0+U3RhQ2ZnLlJNUmVxQ250ID0gSW5kZXg7CisKKwlpZiAoSW5kZXgpCisJeworCQlNbG1lRW5xdWV1ZShwQWQsIEFJUk9ORVRfU1RBVEVfTUFDSElORSwgTVQyX0FJUk9ORVRfU0NBTl9SRVEsIDAsIE5VTEwpOworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLS0tIEFpcm9uZXRNc2dBY3Rpb25cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRSZXF1ZXN0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1MTUVfUVVFVUVfRUxFTQkqRWxlbSkKK3sKKwlQUk1fUkVRVUVTVF9BQ1RJT04JcFJlcTsKKworCS8vIDEuIFBvaW50IHRvIG5leHQgcmVxdWVzdCBlbGVtZW50CisJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4XTsKKworCS8vIDIuIFBhcnNlIG1lYXN1cmVtZW50IHR5cGUgYW5kIGNhbGwgYXBwcm9wcmlhdGUgZnVuY3Rpb25zCisJaWYgKHBSZXEtPlJlcUVsZW0uVHlwZSA9PSBNU1JOX1RZUEVfQ0hBTk5FTF9MT0FEX1JFUSkKKwkJLy8gQ2hhbm5lbCBMb2FkIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJQ2hhbm5lbExvYWRSZXF1ZXN0QWN0aW9uKHBBZCwgcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4KTsKKwllbHNlIGlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX05PSVNFX0hJU1RfUkVRKQorCQkvLyBOb2lzZSBIaXN0b2dyYW0gbWVhc3VyZW1lbnQgcmVxdWVzdAorCQlOb2lzZUhpc3RSZXF1ZXN0QWN0aW9uKHBBZCwgcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4KTsKKwllbHNlIGlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX0JFQUNPTl9SRVEpCisJCS8vIEJlYWNvbiBtZWFzdXJlbWVudCByZXF1ZXN0CisJCUJlYWNvblJlcXVlc3RBY3Rpb24ocEFkLCBwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHgpOworCWVsc2UKKwkJLy8gVW5rbm93bi4gRG8gbm90aGluZyBhbmQgcmV0dXJuLCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJcmV0dXJuOworCisJLy8gMy4gUGVlayBpbnRvIHRoZSBuZXh0IHJlcXVlc3QsIGlmIGl0J3MgcGFyYWxsZWwsIHdlIHdpbGwgdXBkYXRlIHRoZSBzY2FuIHRpbWUgdG8gdGhlIGxhcmdlc3Qgb25lCisJaWYgKChwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHggKyAxKSA8IHBBZC0+U3RhQ2ZnLlJNUmVxQ250KQorCXsKKwkJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4ICsgMV07CisJCS8vIENoZWNrIGZvciBwYXJhbGxlbCBiaXQKKwkJaWYgKChwUmVxLT5SZXFFbGVtLk1vZGUgJiAweDAxKSAmJiAocFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbCA9PSBwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCkpCisJCXsKKwkJCS8vIFVwZGF0ZSBwYXJhbGxlbCBtb2RlIHJlcXVlc3QgaW5mb3JtYXRpb24KKwkJCXBBZC0+U3RhQ2ZnLlBhcmFsbGVsUmVxID0gVFJVRTsKKwkJCXBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lID0gKChwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbiA+IHBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lKSA/CisJCQkocFJlcS0+TWVhc3VyZW1lbnQuRHVyYXRpb24pIDogKHBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lKSk7CisJCX0KKwl9CisKKwkvLyA0LiBDYWxsIFJUMjhYWF9NTE1FX0hBTkRMRVIgdG8gZXhlY3V0ZSB0aGUgcmVxdWVzdCBtbG1lIGNvbW1hbmRzLCBTY2FuIHJlcXVlc3QgaXMgdGhlIG9ubHkgb25lIHVzZWQKKwlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBjaGFubmVsIGxvYWQgcmVwb3J0IGFjdGlvbiwgc3BlY2lhbCBzY2FuIG9wZXJhdGlvbiBhZGRlZAorCQl0byBzdXBwb3J0CisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQlTdGFydCBmcm9tIGVsZW1lbnQgSUQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQ2hhbm5lbExvYWRSZXF1ZXN0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSW5kZXgpCit7CisJUFJNX1JFUVVFU1RfQUNUSU9OCQkJCXBSZXE7CisJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QJCQlTY2FuUmVxOworCVVDSEFSCQkJCQkJCVplcm9Tc2lkWzMyXTsKKwlORElTX1NUQVRVUwkJCQkJCU5TdGF0dXM7CisJUFVDSEFSCQkJCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVBIRUFERVJfODAyXzExCQkJCQlwTnVsbEZyYW1lOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hhbm5lbExvYWRSZXF1ZXN0QWN0aW9uIC0tLS0tPlxuIikpOworCisJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdOworCU5kaXNaZXJvTWVtb3J5KFplcm9Tc2lkLCAzMik7CisKKwkvLyBQcmVwYXJlIGZvciBzcGVjaWFsIHNjYW4gcmVxdWVzdAorCS8vIFRoZSBzY2FuIGRlZmluaXRpb24gaXMgZGlmZmVyZW50IHdpdGggb3VyIEFjdGl2ZSwgUGFzc2l2ZSBzY2FuIGRlZmluaXRpb24uCisJLy8gRm9yIENDWDIsIEFjdGl2ZSBtZWFucyBzZW5kIG91dCBwcm9iZSByZXF1ZXN0IHdpdGggYnJvYWRjYXN0IEJTU0lELgorCS8vIFBhc3NpdmUgbWVhbnMgbm8gcHJvYmUgcmVxdWVzdCBzZW50LCBvbmx5IGxpc3RlbiB0byB0aGUgYmVhY29ucy4KKwkvLyBUaGUgY2hhbm5lbCBzY2FubmVkIGlzIGZpeGVkIGFzIHNwZWNpZmllZCwgbm8gbmVlZCB0byBzY2FuIGFsbCBjaGFubmVscy4KKwkvLyBUaGUgc2NhbiB3YWl0IHRpbWUgaXMgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHRvby4KKwkvLyBQYXNzaXZlIHNjYW4gTW9kZQorCisJLy8gQ29udHJvbCBzdGF0ZSBtYWNoaW5lIGlzIG5vdCBpZGxlLCByZWplY3QgdGhlIHJlcXVlc3QKKwlpZiAoKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKSAmJiAoSW5kZXggPT0gMCkpCisJCXJldHVybjsKKworCS8vIEZpbGwgb3V0IHN0dWZmIGZvciBzY2FuIHJlcXVlc3QKKwlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgWmVyb1NzaWQsIDAsIEJTU19BTlksIFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKTsKKwlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47CisKKwkvLyBSZXNldCBzb21lIGludGVybmFsIGNvbnRyb2wgZmxhZ3MgdG8gbWFrZSBzdXJlIHRoaXMgc2NhbiB3b3Jrcy4KKwlCc3NUYWJsZUluaXQoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYik7CisJcEFkLT5TdGFDZmcuU2NhbkNudCAgICAgICAgPSAwOworCXBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsID0gcFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbDsKKwlwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSAgICA9IHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRHVyYXRpb24gJWQsIENoYW5uZWwgJWQhXG4iLCBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbiwgcFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbCkpOworCisJLy8gSWYgaXQncyBub24gc2VydmluZyBjaGFubmVsIHNjYW4sIHNlbmQgb3V0IGEgbnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24uCisJaWYgKHBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJeworCQkvLyBVc2UgTUxNRSBlbnF1ZXVlIG1ldGhvZAorCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgKFBWT0lEKSZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwkJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCXJldHVybjsKKworCQlwTnVsbEZyYW1lID0gKFBIRUFERVJfODAyXzExKSBwT3V0QnVmZmVyOzsKKwkJLy8gTWFrZSB0aGUgcG93ZXIgc2F2ZSBOdWxsIGZyYW1lIHdpdGggUFNNIGJpdCBvbgorCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgcE51bGxGcmFtZSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCXBOdWxsRnJhbWUtPkR1cmF0aW9uIAk9IDA7CisJCXBOdWxsRnJhbWUtPkZDLlR5cGUgCT0gQlRZUEVfREFUQTsKKwkJcE51bGxGcmFtZS0+RkMuUHdyTWdtdAk9IFBXUl9TQVZFOworCisJCS8vIFNlbmQgdXNpbmcgcHJpb3JpdHkgcXVldWUKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZW5kIFBTTSBEYXRhIGZyYW1lIGZvciBvZmYgY2hhbm5lbCBSTVxuIikpOworCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCX0KKworCXBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgICAgID0gTVNSTl9UWVBFX0NIQU5ORUxfTE9BRF9SRVE7CisJcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgICAgPSAwOworCS8vIEVuYWJsZSBSeCB3aXRoIHByb21pc2N1b3VzIHJlY2VwdGlvbgorCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgMHgxMDEwKTsKKworCS8vIFNldCBjaGFubmVsIGxvYWQgbWVhc3VyZW1lbnQgZmxhZworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX01FQVNVUkVNRU5UKTsKKworCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX1NDQU5OSU5HOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hhbm5lbExvYWRSZXF1ZXN0QWN0aW9uIDwtLS0tLVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBub2lzZSBoaXN0b2dyYW0gcmVwb3J0IGFjdGlvbiwgc3BlY2lhbCBzY2FuIG9wZXJhdGlvbiBhZGRlZAorCQl0byBzdXBwb3J0CisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQlTdGFydCBmcm9tIGVsZW1lbnQgSUQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJTm9pc2VIaXN0UmVxdWVzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCVBSTV9SRVFVRVNUX0FDVElPTgkJCQlwUmVxOworCU1MTUVfU0NBTl9SRVFfU1RSVUNUCQkJU2NhblJlcTsKKwlVQ0hBUgkJCQkJCQlaZXJvU3NpZFszMl0sIGk7CisJTkRJU19TVEFUVVMJCQkJCQlOU3RhdHVzOworCVBVQ0hBUgkJCQkJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlQSEVBREVSXzgwMl8xMQkJCQkJcE51bGxGcmFtZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5vaXNlSGlzdFJlcXVlc3RBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwlwUmVxID0gKFBSTV9SRVFVRVNUX0FDVElPTikgJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF07CisJTmRpc1plcm9NZW1vcnkoWmVyb1NzaWQsIDMyKTsKKworCS8vIFByZXBhcmUgZm9yIHNwZWNpYWwgc2NhbiByZXF1ZXN0CisJLy8gVGhlIHNjYW4gZGVmaW5pdGlvbiBpcyBkaWZmZXJlbnQgd2l0aCBvdXIgQWN0aXZlLCBQYXNzaXZlIHNjYW4gZGVmaW5pdGlvbi4KKwkvLyBGb3IgQ0NYMiwgQWN0aXZlIG1lYW5zIHNlbmQgb3V0IHByb2JlIHJlcXVlc3Qgd2l0aCBicm9hZGNhc3QgQlNTSUQuCisJLy8gUGFzc2l2ZSBtZWFucyBubyBwcm9iZSByZXF1ZXN0IHNlbnQsIG9ubHkgbGlzdGVuIHRvIHRoZSBiZWFjb25zLgorCS8vIFRoZSBjaGFubmVsIHNjYW5uZWQgaXMgZml4ZWQgYXMgc3BlY2lmaWVkLCBubyBuZWVkIHRvIHNjYW4gYWxsIGNoYW5uZWxzLgorCS8vIFRoZSBzY2FuIHdhaXQgdGltZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QgdG9vLgorCS8vIFBhc3NpdmUgc2NhbiBNb2RlCisKKwkvLyBDb250cm9sIHN0YXRlIG1hY2hpbmUgaXMgbm90IGlkbGUsIHJlamVjdCB0aGUgcmVxdWVzdAorCWlmICgocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpICYmIChJbmRleCA9PSAwKSkKKwkJcmV0dXJuOworCisJLy8gRmlsbCBvdXQgc3R1ZmYgZm9yIHNjYW4gcmVxdWVzdAorCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBaZXJvU3NpZCwgMCwgQlNTX0FOWSwgU0NBTl9DSVNDT19OT0lTRSk7CisJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLCBzaXplb2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7CisJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfTElTVF9TQ0FOOworCisJLy8gUmVzZXQgc29tZSBpbnRlcm5hbCBjb250cm9sIGZsYWdzIHRvIG1ha2Ugc3VyZSB0aGlzIHNjYW4gd29ya3MuCisJQnNzVGFibGVJbml0KCZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIpOworCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgICAgICAgID0gMDsKKwlwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCA9IHBSZXEtPk1lYXN1cmVtZW50LkNoYW5uZWw7CisJcEFkLT5TdGFDZmcuQ0NYU2NhblRpbWUgICAgPSBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwlwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICAgICA9IE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkR1cmF0aW9uICVkLCBDaGFubmVsICVkIVxuIiwgcFJlcS0+TWVhc3VyZW1lbnQuRHVyYXRpb24sIHBSZXEtPk1lYXN1cmVtZW50LkNoYW5uZWwpKTsKKworCS8vIElmIGl0J3Mgbm9uIHNlcnZpbmcgY2hhbm5lbCBzY2FuLCBzZW5kIG91dCBhIG51bGwgZnJhbWUgd2l0aCBQU00gYml0IG9uLgorCWlmIChwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCXsKKwkJLy8gVXNlIE1MTUUgZW5xdWV1ZSBtZXRob2QKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmIChOU3RhdHVzCSE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQlyZXR1cm47CisKKwkJcE51bGxGcmFtZSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJLy8gTWFrZSB0aGUgcG93ZXIgc2F2ZSBOdWxsIGZyYW1lIHdpdGggUFNNIGJpdCBvbgorCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgcE51bGxGcmFtZSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCXBOdWxsRnJhbWUtPkR1cmF0aW9uIAk9IDA7CisJCXBOdWxsRnJhbWUtPkZDLlR5cGUgIAk9IEJUWVBFX0RBVEE7CisJCXBOdWxsRnJhbWUtPkZDLlB3ck1nbXQJPSBQV1JfU0FWRTsKKworCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKKwkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwl9CisKKwkvLyBSZXNldCB0aGUgc3RhdGlzdGljcworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0gPSAwOworCisJLy8gRW5hYmxlIFJ4IHdpdGggcHJvbWlzY3VvdXMgcmVjZXB0aW9uCisJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfRklMVFJfQ0ZHLCAweDEwMTApOworCisJLy8gU2V0IGNoYW5uZWwgbG9hZCBtZWFzdXJlbWVudCBmbGFnCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQpOworCisJcEFkLT5NbG1lLkFpcm9uZXRNYWNoaW5lLkN1cnJTdGF0ZSA9IEFJUk9ORVRfU0NBTk5JTkc7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOb2lzZUhpc3RSZXF1ZXN0QWN0aW9uIDwtLS0tLVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBCZWFjb24gcmVwb3J0IGFjdGlvbiwgc3BlY2lhbCBzY2FuIG9wZXJhdGlvbiBhZGRlZAorCQl0byBzdXBwb3J0CisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCXBEYXRhCQlTdGFydCBmcm9tIGVsZW1lbnQgSUQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQmVhY29uUmVxdWVzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCVBSTV9SRVFVRVNUX0FDVElPTgkJCQlwUmVxOworCU5ESVNfU1RBVFVTCQkJCQkJTlN0YXR1czsKKwlQVUNIQVIJCQkJCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJUEhFQURFUl84MDJfMTEJCQkJCXBOdWxsRnJhbWU7CisJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QJCQlTY2FuUmVxOworCVVDSEFSCQkJCQkJCVplcm9Tc2lkWzMyXTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJlYWNvblJlcXVlc3RBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwlwUmVxID0gKFBSTV9SRVFVRVNUX0FDVElPTikgJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF07CisJTmRpc1plcm9NZW1vcnkoWmVyb1NzaWQsIDMyKTsKKworCS8vIFByZXBhcmUgZm9yIHNwZWNpYWwgc2NhbiByZXF1ZXN0CisJLy8gVGhlIHNjYW4gZGVmaW5pdGlvbiBpcyBkaWZmZXJlbnQgd2l0aCBvdXIgQWN0aXZlLCBQYXNzaXZlIHNjYW4gZGVmaW5pdGlvbi4KKwkvLyBGb3IgQ0NYMiwgQWN0aXZlIG1lYW5zIHNlbmQgb3V0IHByb2JlIHJlcXVlc3Qgd2l0aCBicm9hZGNhc3QgQlNTSUQuCisJLy8gUGFzc2l2ZSBtZWFucyBubyBwcm9iZSByZXF1ZXN0IHNlbnQsIG9ubHkgbGlzdGVuIHRvIHRoZSBiZWFjb25zLgorCS8vIFRoZSBjaGFubmVsIHNjYW5uZWQgaXMgZml4ZWQgYXMgc3BlY2lmaWVkLCBubyBuZWVkIHRvIHNjYW4gYWxsIGNoYW5uZWxzLgorCS8vIFRoZSBzY2FuIHdhaXQgdGltZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QgdG9vLgorCWlmIChwUmVxLT5NZWFzdXJlbWVudC5TY2FuTW9kZSA9PSBNU1JOX1NDQU5fTU9ERV9QQVNTSVZFKQorCXsKKwkJLy8gUGFzc2l2ZSBzY2FuIE1vZGUKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGFzc2l2ZSBTY2FuIE1vZGUhXG4iKSk7CisKKwkJLy8gQ29udHJvbCBzdGF0ZSBtYWNoaW5lIGlzIG5vdCBpZGxlLCByZWplY3QgdGhlIHJlcXVlc3QKKwkJaWYgKChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkgJiYgKEluZGV4ID09IDApKQorCQkJcmV0dXJuOworCisJCS8vIEZpbGwgb3V0IHN0dWZmIGZvciBzY2FuIHJlcXVlc3QKKwkJU2NhblBhcm1GaWxsKHBBZCwgJlNjYW5SZXEsIFplcm9Tc2lkLCAwLCBCU1NfQU5ZLCBTQ0FOX0NJU0NPX1BBU1NJVkUpOworCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfTElTVF9TQ0FOOworCisJCS8vIFJlc2V0IHNvbWUgaW50ZXJuYWwgY29udHJvbCBmbGFncyB0byBtYWtlIHN1cmUgdGhpcyBzY2FuIHdvcmtzLgorCQlCc3NUYWJsZUluaXQoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYik7CisJCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgICAgICAgID0gMDsKKwkJcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwgPSBwUmVxLT5NZWFzdXJlbWVudC5DaGFubmVsOworCQlwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSAgICA9IHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uOworCQlwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICAgICA9IE1TUk5fVFlQRV9CRUFDT05fUkVROworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEdXJhdGlvbiAlZCFcbiIsIHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uKSk7CisKKwkJLy8gSWYgaXQncyBub24gc2VydmluZyBjaGFubmVsIHNjYW4sIHNlbmQgb3V0IGEgbnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24uCisJCWlmIChwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQl7CisJCQkvLyBVc2UgTUxNRSBlbnF1ZXVlIG1ldGhvZAorCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCQlpZiAoTlN0YXR1cwkhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCXJldHVybjsKKworCQkJcE51bGxGcmFtZSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJCS8vIE1ha2UgdGhlIHBvd2VyIHNhdmUgTnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24KKwkJCU1ndE1hY0hlYWRlckluaXQocEFkLCBwTnVsbEZyYW1lLCBTVUJUWVBFX05VTExfRlVOQywgMSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCXBOdWxsRnJhbWUtPkR1cmF0aW9uIAk9IDA7CisJCQlwTnVsbEZyYW1lLT5GQy5UeXBlICAgICA9IEJUWVBFX0RBVEE7CisJCQlwTnVsbEZyYW1lLT5GQy5Qd3JNZ210ICA9IFBXUl9TQVZFOworCisJCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCX0KKworCQlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9TQ0FOTklORzsKKwl9CisJZWxzZSBpZiAocFJlcS0+TWVhc3VyZW1lbnQuU2Nhbk1vZGUgPT0gTVNSTl9TQ0FOX01PREVfQUNUSVZFKQorCXsKKwkJLy8gQWN0aXZlIHNjYW4gTW9kZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBY3RpdmUgU2NhbiBNb2RlIVxuIikpOworCisJCS8vIENvbnRyb2wgc3RhdGUgbWFjaGluZSBpcyBub3QgaWRsZSwgcmVqZWN0IHRoZSByZXF1ZXN0CisJCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkKKwkJCXJldHVybjsKKworCQkvLyBGaWxsIG91dCBzdHVmZiBmb3Igc2NhbiByZXF1ZXN0CisJCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBaZXJvU3NpZCwgMCwgQlNTX0FOWSwgU0NBTl9DSVNDT19BQ1RJVkUpOworCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfTElTVF9TQ0FOOworCisJCS8vIFJlc2V0IHNvbWUgaW50ZXJuYWwgY29udHJvbCBmbGFncyB0byBtYWtlIHN1cmUgdGhpcyBzY2FuIHdvcmtzLgorCQlCc3NUYWJsZUluaXQoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYik7CisJCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgICAgICAgID0gMDsKKwkJcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwgPSBwUmVxLT5NZWFzdXJlbWVudC5DaGFubmVsOworCQlwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSAgICA9IHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uOworCQlwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICAgICA9IE1TUk5fVFlQRV9CRUFDT05fUkVROworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEdXJhdGlvbiAlZCFcbiIsIHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uKSk7CisKKwkJLy8gSWYgaXQncyBub24gc2VydmluZyBjaGFubmVsIHNjYW4sIHNlbmQgb3V0IGEgbnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24uCisJCWlmIChwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQl7CisJCQkvLyBVc2UgTUxNRSBlbnF1ZXVlIG1ldGhvZAorCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCQlpZiAoTlN0YXR1cwkhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCXJldHVybjsKKworCQkJcE51bGxGcmFtZSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJCS8vIE1ha2UgdGhlIHBvd2VyIHNhdmUgTnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24KKwkJCU1ndE1hY0hlYWRlckluaXQocEFkLCBwTnVsbEZyYW1lLCBTVUJUWVBFX05VTExfRlVOQywgMSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCXBOdWxsRnJhbWUtPkR1cmF0aW9uIAk9IDA7CisJCQlwTnVsbEZyYW1lLT5GQy5UeXBlICAgICA9IEJUWVBFX0RBVEE7CisJCQlwTnVsbEZyYW1lLT5GQy5Qd3JNZ210ICA9IFBXUl9TQVZFOworCisJCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCX0KKworCQlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9TQ0FOTklORzsKKwl9CisJZWxzZSBpZiAocFJlcS0+TWVhc3VyZW1lbnQuU2Nhbk1vZGUgPT0gTVNSTl9TQ0FOX01PREVfQkVBQ09OX1RBQkxFKQorCXsKKwkJLy8gQmVhY29uIHJlcG9ydCBNb2RlLCByZXBvcnQgYWxsIHRoZSBBUFMgaW4gY3VycmVudCBic3MgdGFibGUKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQmVhY29uIFJlcG9ydCBNb2RlIVxuIikpOworCisJCS8vIENvcHkgY3VycmVudCBCU1MgdGFibGUgdG8gQ0NYIHRhYmxlLCB3ZSBjYW4gb21pdCB0aGlzIHN0ZXAgbGF0ZXIgb24uCisJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIsICZwQWQtPlNjYW5UYWIsIHNpemVvZihCU1NfVEFCTEUpKTsKKworCQkvLyBDcmVhdGUgYmVhY29uIHJlcG9ydCBmcm9tIEJzcyB0YWJsZQorCQlBaXJvbmV0Q3JlYXRlQmVhY29uUmVwb3J0RnJvbUJzc1RhYmxlKHBBZCk7CisKKwkJLy8gU2V0IHN0YXRlIHRvIHNjYW5uaW5nCisJCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX1NDQU5OSU5HOworCisJCS8vIEVucXVldWUgcmVwb3J0IHJlcXVlc3QKKwkJLy8gQ2lzY28gc2NhbiByZXF1ZXN0IGlzIGZpbmlzaGVkLCBwcmVwYXJlIGJlYWNvbiByZXBvcnQKKwkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsIE1UMl9BSVJPTkVUX1NDQU5fRE9ORSwgMCwgTlVMTCk7CisJfQorCWVsc2UKKwl7CisJCS8vIFdyb25nIHNjYW4gTW9kZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcm9uZyBTY2FuIE1vZGUhXG4iKSk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQmVhY29uUmVxdWVzdEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRSZXBvcnRBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUxNRV9RVUVVRV9FTEVNCSpFbGVtKQoreworCVBSTV9SRVFVRVNUX0FDVElPTglwUmVxOworCVVMT05HCQkJCU5vdzMyOworCisgICAgTmRpc0dldFN5c3RlbVVwVGltZSgmTm93MzIpOworCXBBZC0+U3RhQ2ZnLkxhc3RCZWFjb25SeFRpbWUgPSBOb3czMjsKKworCXBSZXEgPSAoUFJNX1JFUVVFU1RfQUNUSU9OKSAmcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W3BBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeF07CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBaXJvbmV0UmVwb3J0QWN0aW9uIC0tLS0tPlxuIikpOworCisJLy8gMS4gUGFyc2UgbWVhc3VyZW1lbnQgdHlwZSBhbmQgY2FsbCBhcHByb3ByaWF0ZSBmdW5jdGlvbnMKKwlpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9DSEFOTkVMX0xPQURfUkVRKQorCQkvLyBDaGFubmVsIExvYWQgbWVhc3VyZW1lbnQgcmVxdWVzdAorCQlDaGFubmVsTG9hZFJlcG9ydEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisJZWxzZSBpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUSkKKwkJLy8gTm9pc2UgSGlzdG9ncmFtIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJTm9pc2VIaXN0UmVwb3J0QWN0aW9uKHBBZCwgcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4KTsKKwllbHNlIGlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX0JFQUNPTl9SRVEpCisJCS8vIEJlYWNvbiBtZWFzdXJlbWVudCByZXF1ZXN0CisJCUJlYWNvblJlcG9ydEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisJZWxzZQorCQkvLyBVbmtub3duLiBEbyBub3RoaW5nIGFuZCByZXR1cm4KKwkJOworCisJLy8gMi4gUG9pbnQgdG8gdGhlIGNvcnJlY3QgaW5kZXggb2YgYWN0aW9uIGVsZW1lbnQsIHN0YXJ0IGZyb20gMAorCXBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCsrOworCisJLy8gMy4gQ2hlY2sgZm9yIHBhcmFsbGVsIGFjdGlvbnMKKwlpZiAocEFkLT5TdGFDZmcuUGFyYWxsZWxSZXEgPT0gVFJVRSkKKwl7CisJCXBSZXEgPSAoUFJNX1JFUVVFU1RfQUNUSU9OKSAmcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W3BBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeF07CisKKwkJLy8gUHJvY2VzcyBuZXh0IGFjdGlvbiByaWdodCBhd2F5CisJCWlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX0NIQU5ORUxfTE9BRF9SRVEpCisJCQkvLyBDaGFubmVsIExvYWQgbWVhc3VyZW1lbnQgcmVxdWVzdAorCQkJQ2hhbm5lbExvYWRSZXBvcnRBY3Rpb24ocEFkLCBwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHgpOworCQllbHNlIGlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX05PSVNFX0hJU1RfUkVRKQorCQkJLy8gTm9pc2UgSGlzdG9ncmFtIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJCU5vaXNlSGlzdFJlcG9ydEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisKKwkJcEFkLT5TdGFDZmcuUGFyYWxsZWxSZXEgPSBGQUxTRTsKKwkJcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4Kys7CisJfQorCisJaWYgKHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCA+PSBwQWQtPlN0YUNmZy5STVJlcUNudCkKKwl7CisJCS8vIDQuIFRoZXJlIGlzIG5vIG1vcmUgdW5wcm9jZXNzZWQgbWVhc3VyZW1lbnQgcmVxdWVzdCwgZ28gZm9yIHRyYW5zbWl0IHRoaXMgcmVwb3J0CisJCUFpcm9uZXRGaW5hbFJlcG9ydEFjdGlvbihwQWQpOworCQlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9JRExFOworCX0KKwllbHNlCisJeworCQlwUmVxID0gKFBSTV9SRVFVRVNUX0FDVElPTikgJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHhdOworCisJCWlmIChwUmVxLT5NZWFzdXJlbWVudC5DaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJCXsKKwkJCVJUTVB1c2VjRGVsYXkoMTAwMDAwKTsKKwkJfQorCisJCS8vIDUuIFRoZXJlIGFyZSBtb3JlIHJlcXVlc3RzIHRvIGJlIG1lYXN1cmUKKwkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsIE1UMl9BSVJPTkVUX1NDQU5fUkVRLCAwLCBOVUxMKTsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFpcm9uZXRSZXBvcnRBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBaXJvbmV0RmluYWxSZXBvcnRBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUFVDSEFSCQkJCQlwRGVzdDsKKwlQQUlST05FVF9JQVBQX0hFQURFUglwSUFQUDsKKwlQSEVBREVSXzgwMl8xMQkJCXBIZWFkZXI7CisJVUNIQVIJCQkJCUFja1JhdGUgPSBSQVRFXzI7CisJVVNIT1JUCQkJCQlBY2tEdXJhdGlvbiA9IDA7CisJTkRJU19TVEFUVVMJCQkJTlN0YXR1czsKKwlQVUNIQVIJCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVVMT05HCQkJCQlGcmFtZUxlbiA9IDA7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBaXJvbmV0RmluYWxSZXBvcnRBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwkvLyAwLiBTZXQgdXAgdGhlIGZyYW1lIHBvaW50ZXIsIEZyYW1lIHdhcyBpbml0ZWQgYXQgdGhlIGVuZCBvZiBtZXNzYWdlIGFjdGlvbgorCXBEZXN0ID0gJnBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmW0xFTkdUSF84MDJfMTFdOworCisJLy8gMS4gVXBkYXRlIHJlcG9ydCBJQVBQIGZpZWxkcworCXBJQVBQID0gKFBBSVJPTkVUX0lBUFBfSEVBREVSKSBwRGVzdDsKKworCS8vIDIuIENvcHkgQ2lzY28gU05BUCBoZWFkZXIKKwlOZGlzTW92ZU1lbW9yeShwSUFQUC0+Q2lzY29TbmFwSGVhZGVyLCBTTkFQX0FJUk9ORVQsIExFTkdUSF84MDJfMV9IKTsKKworCS8vIDMuIG5ldHdvcmsgb3JkZXIgZm9yIHRoaXMgMTZiaXQgbGVuZ3RoCisJcElBUFAtPkxlbmd0aCAgPSBjcHUyYmUxNihwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiAtIExFTkdUSF84MDJfMTEgLSBMRU5HVEhfODAyXzFfSCk7CisKKwkvLyAzLjEgc2FuaXR5IGNoZWNrIHRoZSByZXBvcnQgbGVuZ3RoLCBpZ25vcmUgaXQgaWYgdGhlcmUgaXMgbm90aGluZyB0byByZXBvcnQKKwlpZiAoYmUyY3B1MTYocElBUFAtPkxlbmd0aCkgPD0gMTgpCisJCXJldHVybjsKKworCS8vIDQuIFR5cGUgbXVzdCBiZSAweDMyCisJcElBUFAtPlR5cGUgICAgPSBBSVJPTkVUX0lBUFBfVFlQRTsKKworCS8vIDUuIFN1YlR5cGUgZm9yIHJlcG9ydCBtdXN0IGJlIDB4ODEKKwlwSUFQUC0+U3ViVHlwZSA9IEFJUk9ORVRfSUFQUF9TVUJUWVBFX1JFUE9SVDsKKworCS8vIDYuIERBIGlzIG5vdCB1c2VkIGFuZCBtdXN0IGJlIHplcm8sIGFsdGhvdWdoIHRoZSB3aG9sZSBmcmFtZSB3YXMgY2xlYXJlZCBhdCB0aGUgc3RhcnQgb2YgZnVuY3Rpb24KKwkvLyAgICBXZSB3aWxsIGRvIGl0IGFnYWluIGhlcmUuIFdlIGNhbiB1c2UgQlNTSUQgaW5zdGVhZAorCUNPUFlfTUFDX0FERFIocElBUFAtPkRBLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkvLyA3LiBTQSBpcyB0aGUgY2xpZW50IHJlcG9ydGluZyB3aGljaCBtdXN0IGJlIG91ciBNQUMKKwlDT1BZX01BQ19BRERSKHBJQVBQLT5TQSwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisKKwkvLyA4LiBDb3B5IHRoZSBzYXZlZCBkaWFsb2cgdG9rZW4KKwlwSUFQUC0+VG9rZW4gPSBwQWQtPlN0YUNmZy5JQVBQVG9rZW47CisKKwkvLyA5LiBNYWtlIHRoZSBSZXBvcnQgZnJhbWUgODAyLjExIGhlYWRlcgorCS8vICAgIFJldXNlIGZ1bmN0aW9uIGluIHdwYS5jCisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWY7CisJcEFkLT5TZXF1ZW5jZSArKzsKKwlXcGFNYWNIZWFkZXJJbml0KHBBZCwgcEhlYWRlciwgMCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJLy8gQUNLIHNpemUJaXMgMTQgaW5jbHVkZSBDUkMsIGFuZCBpdHMgcmF0ZQlpcyBiYXNlZCBvbiByZWFsIHRpbWUgaW5mb3JtYXRpb24KKwlBY2tSYXRlICAgICA9IHBBZC0+Q29tbW9uQ2ZnLkV4cGVjdGVkQUNLUmF0ZVtwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJQWNrRHVyYXRpb24gPSBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwgQWNrUmF0ZSwgMTQpOworCXBIZWFkZXItPkR1cmF0aW9uID0gcEFkLT5Db21tb25DZmcuRHNpZnMgKyBBY2tEdXJhdGlvbjsKKworCS8vIFVzZSBNTE1FIGVucXVldWUgbWV0aG9kCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cwkhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm47CisKKwkvLyAxMC4gUHJlcGFyZSByZXBvcnQgZnJhbWUgd2l0aCBkeW5hbWljIG91dGJ1ZmZlci4gSnVzdCBzaW1wbHkgY29weSBldmVyeXRoaW5nLgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4sIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmLAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKworCS8vIDExLiBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCXBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgPSBNU1JOX1RZUEVfVU5VU0VEOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWlyb25ldEZpbmFsUmVwb3J0QWN0aW9uIDwtLS0tLVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQ2hhbm5lbExvYWRSZXBvcnRBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKwlQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQJcFJlcG9ydDsKKwlQQ0hBTk5FTF9MT0FEX1JFUE9SVAkJcExvYWQ7CisJUFVDSEFSCQkJCQkJcERlc3Q7CisJVUNIQVIJCQkJCQlDQ0FCdXN5RnJhY3Rpb247CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGFubmVsTG9hZFJlcG9ydEFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIERpc2FibGUgUnggd2l0aCBwcm9taXNjdW91cyByZWNlcHRpb24sIG1ha2UgaXQgYmFjayB0byBub3JtYWwKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9GSUxUUl9DRkcsIFNUQU5PUk1BTCk7IC8vIFN0YWlvbiBub3QgZHJvcCBjb250cm9sIGZyYW1lIHdpbGwgZmFpbCBXaUZpIENlcnRpZmljYXRpb24uCisKKwkvLyAwLiBTZXR1cCBwb2ludGVyIGZvciBwcm9jZXNzaW5nIGJlYWNvbiAmIHByb2JlIHJlc3BvbnNlCisJcERlc3QgPSAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWZbcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW5dOworCXBSZXBvcnQgPSAoUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSBwRGVzdDsKKworCS8vIDEuIEZpbGwgTWVhc3VyZW1lbnQgcmVwb3J0IGVsZW1lbnQgZmllbGQuCisJcFJlcG9ydC0+RWlkICAgID0gSUVfTUVBU1VSRU1FTlRfUkVQT1JUOworCS8vIEZpeGVkIExlbmd0aCBhdCA5LCBub3QgaW5jbHVkZSBFaWQgYW5kIGxlbmd0aCBmaWVsZHMKKwlwUmVwb3J0LT5MZW5ndGggPSA5OworCXBSZXBvcnQtPlRva2VuICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0uUmVxRWxlbS5Ub2tlbjsKKwlwUmVwb3J0LT5Nb2RlICAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLlJlcUVsZW0uTW9kZTsKKwlwUmVwb3J0LT5UeXBlICAgPSBNU1JOX1RZUEVfQ0hBTk5FTF9MT0FEX1JFUTsKKworCS8vIDIuIEZpbGwgY2hhbm5lbCByZXBvcnQgbWVhc3VyZW1lbnQgZGF0YQorCXBEZXN0ICs9IHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCk7CisJcExvYWQgID0gKFBDSEFOTkVMX0xPQURfUkVQT1JUKSBwRGVzdDsKKwlwTG9hZC0+Q2hhbm5lbCAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLk1lYXN1cmVtZW50LkNoYW5uZWw7CisJcExvYWQtPlNwYXJlICAgID0gMDsKKwlwTG9hZC0+RHVyYXRpb24gPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLk1lYXN1cmVtZW50LkR1cmF0aW9uOworCisJLy8gMy4gQ2FsY3VsYXRlIHRoZSBDQ0EgQnVzeSBGcmFjdGlvbgorCS8vICAgIChCeXRlcyArIEFDSyBzaXplKSAqIDggLyBUeCBzcGVlZCAqIDI1NSAvIDEwMDAgLyBtZWFzdXJlbWVudCBkdXJhdGlvbiwgdXNlIDI0IHVzIFR4IHNwZWVkCisJLy8gICAgID0gIChCeXRlcyArIEFDSykgLyAxMiAvIGR1cmF0aW9uCisJLy8gICAgIDkgaXMgdGhlIGdvb2QgdmFsdWUgZm9yIHBBZC0+U3RhQ2ZnLkNMRmFjdG9yCisJLy8gQ0NBQnVzeUZyYWN0aW9uID0gKFVDSEFSKSAocEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgLyA5IC8gcExvYWQtPkR1cmF0aW9uKTsKKwlDQ0FCdXN5RnJhY3Rpb24gPSAoVUNIQVIpIChwQWQtPlN0YUNmZy5DTEJ1c3lCeXRlcyAvIHBBZC0+U3RhQ2ZnLkNMRmFjdG9yIC8gcExvYWQtPkR1cmF0aW9uKTsKKwlpZiAoQ0NBQnVzeUZyYWN0aW9uIDwgMTApCisJCQlDQ0FCdXN5RnJhY3Rpb24gPSAoVUNIQVIpIChwQWQtPlN0YUNmZy5DTEJ1c3lCeXRlcyAvIDMgLyBwTG9hZC0+RHVyYXRpb24pICsgMTsKKworCXBMb2FkLT5DQ0FCdXN5ID0gQ0NBQnVzeUZyYWN0aW9uOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNMQnVzeUJ5dGUgJWxkLCBEdXJhdGlvbiAlZCwgUmVzdWx0LCAlZFxuIiwgcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMsIHBMb2FkLT5EdXJhdGlvbiwgQ0NBQnVzeUZyYWN0aW9uKSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGcmFtZVJlcG9ydExlbiAlZFxuIiwgcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4pKTsKKwlwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiArPSAoc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSArIHNpemVvZihDSEFOTkVMX0xPQURfUkVQT1JUKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRnJhbWVSZXBvcnRMZW4gJWRcbiIsIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuKSk7CisKKwkvLyA0LiBDbGVhciBjaGFubmVsIGxvYWQgbWVhc3VyZW1lbnQgZmxhZworCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQpOworCisJLy8gNS4gcmVzZXQgdG8gaWRsZSBzdGF0ZQorCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX0lETEU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGFubmVsTG9hZFJlcG9ydEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECU5vaXNlSGlzdFJlcG9ydEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCVBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVAlwUmVwb3J0OworCVBOT0lTRV9ISVNUX1JFUE9SVAkJCXBOb2lzZTsKKwlQVUNIQVIJCQkJCQlwRGVzdDsKKwlVQ0hBUgkJCQkJCWksTm9pc2VDbnQ7CisJVVNIT1JUCQkJCQkJVG90YWxSUElDbnQsIFRvdGFsUlBJU3VtOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTm9pc2VIaXN0UmVwb3J0QWN0aW9uIC0tLS0tPlxuIikpOworCisJLy8gMC4gRGlzYWJsZSBSeCB3aXRoIHByb21pc2N1b3VzIHJlY2VwdGlvbiwgbWFrZSBpdCBiYWNrIHRvIG5vcm1hbAorCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsgLy8gU3RhaW9uIG5vdCBkcm9wIGNvbnRyb2wgZnJhbWUgd2lsbCBmYWlsIFdpRmkgQ2VydGlmaWNhdGlvbi4KKwkvLyAxLiBTZXR1cCBwb2ludGVyIGZvciBwcm9jZXNzaW5nIGJlYWNvbiAmIHByb2JlIHJlc3BvbnNlCisJcERlc3QgPSAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWZbcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW5dOworCXBSZXBvcnQgPSAoUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSBwRGVzdDsKKworCS8vIDIuIEZpbGwgTWVhc3VyZW1lbnQgcmVwb3J0IGVsZW1lbnQgZmllbGQuCisJcFJlcG9ydC0+RWlkICAgID0gSUVfTUVBU1VSRU1FTlRfUkVQT1JUOworCS8vIEZpeGVkIExlbmd0aCBhdCAxNiwgbm90IGluY2x1ZGUgRWlkIGFuZCBsZW5ndGggZmllbGRzCisJcFJlcG9ydC0+TGVuZ3RoID0gMTY7CisJcFJlcG9ydC0+VG9rZW4gID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W0luZGV4XS5SZXFFbGVtLlRva2VuOworCXBSZXBvcnQtPk1vZGUgICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0uUmVxRWxlbS5Nb2RlOworCXBSZXBvcnQtPlR5cGUgICA9IE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUTsKKworCS8vIDMuIEZpbGwgbm9pc2UgaGlzdG9ncmFtIHJlcG9ydCBtZWFzdXJlbWVudCBkYXRhCisJcERlc3QgKz0gc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKTsKKwlwTm9pc2UgID0gKFBOT0lTRV9ISVNUX1JFUE9SVCkgcERlc3Q7CisJcE5vaXNlLT5DaGFubmVsICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0uTWVhc3VyZW1lbnQuQ2hhbm5lbDsKKwlwTm9pc2UtPlNwYXJlICAgID0gMDsKKwlwTm9pc2UtPkR1cmF0aW9uID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W0luZGV4XS5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwkvLyA0LiBGaWxsIE5vaXNlIGhpc3RvZ3JhbSwgdGhlIHRvdGFsIFJQSSBjb3VudHMgc2hvdWxkIGJlIDAuNCAqIFRVCisJLy8gICAgV2UgZXN0aW1hdGUgNDAwMCBub3JtYWwgcGFja2V0cyByZWNlaXZlZCBkdXJuaW5nIDEwIHNlY29uZHMgdGVzdC4KKwkvLyAgICBBZGp1c3QgaXQgaWYgcmVxdWlyZWQuCisJLy8gMyBpcyBhIGdvb2QgdmFsdWUgZm9yIHBBZC0+U3RhQ2ZnLk5IRmFjdG9yCisJLy8gVG90YWxSUElDbnQgPSBwTm9pc2UtPkR1cmF0aW9uICogMyAvIDEwOworCVRvdGFsUlBJQ250ID0gcE5vaXNlLT5EdXJhdGlvbiAqIHBBZC0+U3RhQ2ZnLk5IRmFjdG9yIC8gMTA7CisJVG90YWxSUElTdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwl7CisJCVRvdGFsUlBJU3VtICs9IHBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV07CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJQSSAlZCBDb251dHMgJWRcbiIsIGksIHBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0pKTsKKwl9CisKKwkvLyBEb3VibGUgY2hlY2sgaWYgdGhlIGNvdW50ZXIgaXMgbGFyZ2VyIHRoYW4gb3VyIGV4cGVjdGF0aW9uLgorCS8vIFdlIHdpbGwgcmVwbGFjZSBpdCB3aXRoIHRoZSB0b3RhbCBudW1iZXIgcGx1cyBhIGZyYWN0aW9uLgorCWlmIChUb3RhbFJQSVN1bSA+IFRvdGFsUlBJQ250KQorCQlUb3RhbFJQSUNudCA9IFRvdGFsUlBJU3VtICsgcE5vaXNlLT5EdXJhdGlvbiAvIDIwOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVG90YWwgUlBJIENvbnV0cyAlZFxuIiwgVG90YWxSUElDbnQpKTsKKworCS8vIDUuIEluaXRpYWxpemUgbm9pc2UgY291bnQgZm9yIHRoZSB0b3RhbCBzdW1tYXRpb24gb2YgMHhmZgorCU5vaXNlQ250ID0gMDsKKwlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKQorCXsKKwkJcE5vaXNlLT5EZW5zaXR5W2ldID0gKFVDSEFSKSAocEFkLT5TdGFDZmcuUlBJRGVuc2l0eVtpXSAqIDI1NSAvIFRvdGFsUlBJQ250KTsKKwkJaWYgKChwTm9pc2UtPkRlbnNpdHlbaV0gPT0gMCkgJiYgKHBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0gIT0gMCkpCisJCQlwTm9pc2UtPkRlbnNpdHlbaV0rKzsKKwkJTm9pc2VDbnQgKz0gcE5vaXNlLT5EZW5zaXR5W2ldOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZXBvcnRlZCBSUElbJWRdICA9IDB4JTAyeFxuIiwgaSwgcE5vaXNlLT5EZW5zaXR5W2ldKSk7CisJfQorCisJLy8gNi4gUlBJWzBdIHJlcHJlc2VudHMgdGhlIHJlc3Qgb2YgY291bnRzCisJcE5vaXNlLT5EZW5zaXR5WzBdID0gMHhmZiAtIE5vaXNlQ250OworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlcG9ydGVkIFJQSVswXSAgPSAweCUwMnhcbiIsIHBOb2lzZS0+RGVuc2l0eVswXSkpOworCisJcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4gKz0gKHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCkgKyBzaXplb2YoTk9JU0VfSElTVF9SRVBPUlQpKTsKKworCS8vIDcuIENsZWFyIGNoYW5uZWwgbG9hZCBtZWFzdXJlbWVudCBmbGFnCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19NRUFTVVJFTUVOVCk7CisKKwkvLyA4LiByZXNldCB0byBpZGxlIHN0YXRlCisJcEFkLT5NbG1lLkFpcm9uZXRNYWNoaW5lLkN1cnJTdGF0ZSA9IEFJUk9ORVRfSURMRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5vaXNlSGlzdFJlcG9ydEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByZXBhcmUgQmVhY29uIHJlcG9ydCBhY3Rpb24sCisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUJlYWNvblJlcG9ydEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJlYWNvblJlcG9ydEFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIExvb2tzIGxpa2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0aGluZyBuZWVkIHRvIGRvIGhlcmUuCisJLy8gQWxsIG1lYXN1cmVtZW50IHJlcG9ydCBhbHJlYWR5IGZpbmlzaGVkIGluIEFkZEJlYWNvblJlcG9ydAorCS8vIFRoZSBsZW5ndGggaXMgaW4gdGhlIEZyYW1lUmVwb3J0TGVuCisKKwkvLyByZXNldCBCZWFjb24gaW5kZXggZm9yIG5leHQgYmVhY29uIHJlcXVlc3QKKwlwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXggPSAweGZmOworCisJLy8gcmVzZXQgdG8gaWRsZSBzdGF0ZQorCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX0lETEU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCZWFjb25SZXBvcnRBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCQlJbmRleAkJQ3VycmVudCBCU1NJRCBpbiBDQ1hCc3N0YWIgZW50cnkgaW5kZXgKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRBZGRCZWFjb25SZXBvcnQoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVVMT05HCQkJCUluZGV4LAorCUlOCVBNTE1FX1FVRVVFX0VMRU0JcEVsZW0pCit7CisJUFZPSUQJCQkJCQlwTXNnOworCVBVQ0hBUgkJCQkJCXBTcmMsIHBEZXN0OworCVVDSEFSCQkJCQkJUmVxSWR4OworCVVMT05HCQkJCQkJTXNnTGVuOworCVVTSE9SVAkJCQkJCUxlbmd0aDsKKwlQRlJBTUVfODAyXzExCQkJCXBGcmFtZTsKKwlQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQJcFJlcG9ydDsKKwlQRUlEX1NUUlVDVAkJCSAgICAgICAgcEVpZDsKKwlQQkVBQ09OX1JFUE9SVAkJCQlwQmVhY29uUmVwb3J0OworCVBCU1NfRU5UUlkJCQkJCXBCc3M7CisKKwkvLyAwLiBTZXR1cCBwb2ludGVyIGZvciBwcm9jZXNzaW5nIGJlYWNvbiAmIHByb2JlIHJlc3BvbnNlCisJcE1zZyAgID0gcEVsZW0tPk1zZzsKKwlNc2dMZW4gPSBwRWxlbS0+TXNnTGVuOworCXBGcmFtZSA9IChQRlJBTUVfODAyXzExKSBwTXNnOworCXBTcmMgICA9IHBGcmFtZS0+T2N0ZXQ7CQkJCS8vIFN0YXJ0IGZyb20gQVAgVFNGCisJcEJzcyAgID0gKFBCU1NfRU5UUlkpICZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIuQnNzRW50cnlbSW5kZXhdOworCVJlcUlkeCA9IHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeDsKKworCS8vIDEgQ2hlY2sgdGhlIEluZGV4LCBpZiB3ZSBhbHJlYWR5IGNyZWF0ZSB0aGlzIGVudHJ5LCBvbmx5IHVwZGF0ZSB0aGUgYXZlcmFnZSBSU1NJCisJaWYgKChJbmRleCA8PSBwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXgpICYmIChwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXggIT0gMHhmZikpCisJeworCQlwRGVzdCAgPSAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWZbcEFkLT5TdGFDZmcuQnNzUmVwb3J0T2Zmc2V0W0luZGV4XV07CisJCS8vIFBvaW50IHRvIGJzcyByZXBvcnQgaW5mb3JtYXRpb24KKwkJcERlc3QgKz0gc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKTsKKwkJcEJlYWNvblJlcG9ydCA9IChQQkVBQ09OX1JFUE9SVCkgcERlc3Q7CisKKwkJLy8gVXBkYXRlIFJ4IHBvd2VyLCBpbiBkQm0KKwkJLy8gR2V0IHRoZSBvcmlnaW5hbCBSU1NJIHJlYWRiYWNrIGZyb20gQkJQCisJCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgKz0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YTsKKwkJLy8gQXZlcmFnZSB0aGUgUnNzaSByZWFkaW5nCisJCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgID0gKHBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgKyBwQnNzLT5Sc3NpKSAvIDI7CisJCS8vIEdldCB0byBkQm0gZm9ybWF0CisJCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgLT0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCc3NpZCAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAiLAorCQkJcEJzcy0+QnNzaWRbMF0sIHBCc3MtPkJzc2lkWzFdLCBwQnNzLT5Cc3NpZFsyXSwKKwkJCXBCc3MtPkJzc2lkWzNdLCBwQnNzLT5Cc3NpZFs0XSwgcEJzcy0+QnNzaWRbNV0pKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUnhQb3dlclslbGRdIFJzc2kgJWQsIEF2ZyBSc3NpICVkXG4iLCBJbmRleCwgKHBCc3MtPlJzc2kgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhKSwgcEJlYWNvblJlcG9ydC0+UnhQb3dlciAtIDI1NikpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGcmFtZVJlcG9ydExlbiA9ICVkXG4iLCBwQWQtPlN0YUNmZy5Cc3NSZXBvcnRPZmZzZXRbSW5kZXhdKSk7CisKKwkJLy8gVXBkYXRlIG90aGVyIGluZm9ybWF0aW9uIGhlcmUKKworCQkvLyBEb25lCisJCXJldHVybjsKKwl9CisKKwkvLyAyLiBVcGRhdGUgcmVwb3J0ZWQgSW5kZXgKKwlwQWQtPlN0YUNmZy5MYXN0QnNzSW5kZXggPSBJbmRleDsKKworCS8vIDMuIFNldHVwIHRoZSBidWZmZXIgYWRkcmVzcyBmb3IgY29weWluZyB0aGlzIEJTU0lEIGludG8gcmVwb3J0aW5nIGZyYW1lCisJLy8gICAgVGhlIG9mZnNldCBzaG91bGQgc3RhcnQgYWZ0ZXIgODAyLjExIGhlYWRlciBhbmQgcmVwb3J0IGZyYW1lIGhlYWRlci4KKwlwRGVzdCA9IChQVUNIQVIpICZwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydEJ1ZltwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbl07CisKKwkvLyA0LiBTYXZlIHRoZSBzdGFydCBvZmZzZXQgb2YgZWFjaCBCc3MgaW4gcmVwb3J0IGZyYW1lCisJcEFkLT5TdGFDZmcuQnNzUmVwb3J0T2Zmc2V0W0luZGV4XSA9IHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuOworCisJLy8gNS4gRmlsbCBNZWFzdXJlbWVudCByZXBvcnQgZmllbGRzCisJcFJlcG9ydCA9IChQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpIHBEZXN0OworCXBSZXBvcnQtPkVpZCA9IElFX01FQVNVUkVNRU5UX1JFUE9SVDsKKwlwUmVwb3J0LT5MZW5ndGggPSAwOworCXBSZXBvcnQtPlRva2VuICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtSZXFJZHhdLlJlcUVsZW0uVG9rZW47CisJcFJlcG9ydC0+TW9kZSAgID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W1JlcUlkeF0uUmVxRWxlbS5Nb2RlOworCXBSZXBvcnQtPlR5cGUgICA9IE1TUk5fVFlQRV9CRUFDT05fUkVROworCUxlbmd0aCAgICAgICAgICA9IHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCk7CisJcERlc3QgICAgICAgICAgKz0gc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKTsKKworCS8vIDYuIFN0YXJ0IHRoZWJlYWNvbiByZXBvcnQgZm9ybWF0CisJcEJlYWNvblJlcG9ydCA9IChQQkVBQ09OX1JFUE9SVCkgcERlc3Q7CisJcERlc3QgICAgICAgICs9IHNpemVvZihCRUFDT05fUkVQT1JUKTsKKwlMZW5ndGggICAgICAgKz0gc2l6ZW9mKEJFQUNPTl9SRVBPUlQpOworCisJLy8gNy4gQ29weSBDaGFubmVsIG51bWJlcgorCXBCZWFjb25SZXBvcnQtPkNoYW5uZWwgICAgICAgID0gcEJzcy0+Q2hhbm5lbDsKKwlwQmVhY29uUmVwb3J0LT5TcGFyZSAgICAgICAgICA9IDA7CisJcEJlYWNvblJlcG9ydC0+RHVyYXRpb24gICAgICAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbUmVxSWR4XS5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwlwQmVhY29uUmVwb3J0LT5QaHlUeXBlICAgICAgICA9ICgocEJzcy0+U3VwUmF0ZUxlbitwQnNzLT5FeHRSYXRlTGVuID4gNCkgPyBQSFlfRVJQIDogUEhZX0RTUyk7CisJLy8gOC4gUnggcG93ZXIsIGluIGRCbQorCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgICAgICAgID0gcEJzcy0+UnNzaSAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCc3NpZCAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAiLAorCQlwQnNzLT5Cc3NpZFswXSwgcEJzcy0+QnNzaWRbMV0sIHBCc3MtPkJzc2lkWzJdLAorCQlwQnNzLT5Cc3NpZFszXSwgcEJzcy0+QnNzaWRbNF0sIHBCc3MtPkJzc2lkWzVdKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUnhQb3dlclslbGRdLCBSc3NpICVkXG4iLCBJbmRleCwgcEJlYWNvblJlcG9ydC0+UnhQb3dlciAtIDI1NikpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkZyYW1lUmVwb3J0TGVuID0gJWRcbiIsIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuKSk7CisKKwlwQmVhY29uUmVwb3J0LT5CZWFjb25JbnRlcnZhbCA9IHBCc3MtPkJlYWNvblBlcmlvZDsKKwlDT1BZX01BQ19BRERSKHBCZWFjb25SZXBvcnQtPkJTU0lELCBwRnJhbWUtPkhkci5BZGRyMyk7CisJTmRpc01vdmVNZW1vcnkocEJlYWNvblJlcG9ydC0+UGFyZW50VFNGLCBwU3JjLCA0KTsKKwlOZGlzTW92ZU1lbW9yeShwQmVhY29uUmVwb3J0LT5UYXJnZXRUU0YsICZwRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7CisJTmRpc01vdmVNZW1vcnkoJnBCZWFjb25SZXBvcnQtPlRhcmdldFRTRls0XSwgJnBFbGVtLT5UaW1lU3RhbXAudS5IaWdoUGFydCwgNCk7CisKKwkvLyA5LiBTa2lwIHRoZSBiZWFjb24gZnJhbWUgYW5kIG9mZnNldCB0byBzdGFydCBvZiBjYXBhYmlsaXR5aW5mbyBzaW5jZSB3ZSBhbHJlYWR5IHByb2Nlc3NlZCBjYXBhYmlsaXR5aW5mbworCXBTcmMgKz0gKFRJTUVTVEFNUF9MRU4gKyAyKTsKKwlwQmVhY29uUmVwb3J0LT5DYXBhYmlsaXR5SW5mbyA9ICooVVNIT1JUICopcFNyYzsKKworCS8vIDEwLiBQb2ludCB0byBzdGFydCBvZiBlbGVtZW50IElECisJcFNyYyArPSAyOworCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBTcmM7CisKKwkvLyAxMS4gU3RhcnQgcHJvY2VzcyBhbGwgdmFyaWFibGUgRWlkIG9heWxvYWQgYW5kIGFkZCB0aGUgYXBwcm9wcmlhdGUgdG8gdGhlIGZyYW1lIHJlcG9ydAorCXdoaWxlICgoKFBVQ0hBUikgcEVpZCArIHBFaWQtPkxlbiArIDEpIDwgKChQVUNIQVIpIHBGcmFtZSArIE1zZ0xlbikpCisJeworCQkvLyBPbmx5IGxpbWl0ZWQgRUlEIGFyZSByZXF1aXJlZCB0byByZXBvcnQgZm9yIENDWCAyLiBJdCBpbmNsdWRlcyBTU0lELCBTdXBwb3J0ZWQgcmF0ZSwKKwkJLy8gRkggcGFyYW1lbnRlciBzZXQsIERTIHBhcmFtZXRlciBzZXQsIENGIHBhcmFtZXRlciBzZXQsIElCU1MgcGFyYW1ldGVyIHNldCwKKwkJLy8gVElNIChyZXBvcnQgZmlyc3QgNCBieXRlcyBvbmx5LCByYWRpbyBtZWFzdXJlbWVudCBjYXBhYmlsaXR5CisJCXN3aXRjaCAocEVpZC0+RWlkKQorCQl7CisJCQljYXNlIElFX1NTSUQ6CisJCQljYXNlIElFX1NVUFBfUkFURVM6CisJCQljYXNlIElFX0ZIX1BBUk06CisJCQljYXNlIElFX0RTX1BBUk06CisJCQljYXNlIElFX0NGX1BBUk06CisJCQljYXNlIElFX0lCU1NfUEFSTToKKwkJCQlOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEVpZCwgcEVpZC0+TGVuICsgMik7CisJCQkJcERlc3QgICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQlMZW5ndGggKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCWJyZWFrOworCisJCQljYXNlIElFX01FQVNVUkVNRU5UX0NBUEFCSUxJVFk6CisJCQkJLy8gU2luY2UgdGhpcyBJRSBpcyBkdXBsaWNhdGVkIHdpdGggV1BBIHNlY3VyaXR5IElFLCB3ZSBoYXMgdG8gZG8gc2FuaXR5IGNoZWNrIGJlZm9yZQorCQkJCS8vIHJlY29nbml6ZSBpdC4KKwkJCQkvLyAxLiBJdCBhbHNvIGhhcyBmaXhlZCA2IGJ5dGVzIElFIGxlbmd0aC4KKwkJCQlpZiAocEVpZC0+TGVuICE9IDYpCisJCQkJCWJyZWFrOworCQkJCS8vIDIuIENoZWNrIHRoZSBDaXNjbyBBaXJvbmV0IE9VSQorCQkJCWlmIChOZGlzRXF1YWxNZW1vcnkoQ0lTQ09fT1VJLCAocFNyYyArIDIpLCAzKSkKKwkJCQl7CisJCQkJCS8vIE1hdGNoZWQsIHRoaXMgaXMgd2hhdCB3ZSB3YW50CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBwRWlkLCBwRWlkLT5MZW4gKyAyKTsKKwkJCQkJcERlc3QgICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQkJTGVuZ3RoICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfVElNOgorCQkJCWlmIChwRWlkLT5MZW4gPiA0KQorCQkJCXsKKwkJCQkJLy8gTWF5IHRydW5jYXRlIGFuZCByZXBvcnQgdGhlIGZpcnN0IDQgYnl0ZXMgb25seSwgd2l0aCB0aGUgZWlkICYgbGVuLCB0b3RhbCBzaG91bGQgYmUgNgorCQkJCQlOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEVpZCwgNik7CisJCQkJCXBEZXN0ICArPSA2OworCQkJCQlMZW5ndGggKz0gNjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTmRpc01vdmVNZW1vcnkocERlc3QsIHBFaWQsIHBFaWQtPkxlbiArIDIpOworCQkJCQlwRGVzdCAgKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCQlMZW5ndGggKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQkvLyAxMi4gTW92ZSB0byBuZXh0IGVsZW1lbnQgSUQKKwkJcFNyYyArPSAoMiArIHBFaWQtPkxlbik7CisJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBTcmM7CisJfQorCisJLy8gMTMuIFVwZGF0ZSB0aGUgbGVuZ3RoIGluIHRoZSBoZWFkZXIsIG5vdCBpbmNsdWRlIEVJRCBhbmQgbGVuZ3RoCisJcFJlcG9ydC0+TGVuZ3RoID0gTGVuZ3RoIC0gNDsKKworCS8vIDE0LiBVcGRhdGUgdGhlIGZyYW1lIHJlcG9ydCBidWZmZXIgZGF0YSBsZW5ndGgKKwlwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiArPSBMZW5ndGg7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRlIgbGVuID0gJWRcbiIsIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCQlJbmRleAkJQ3VycmVudCBCU1NJRCBpbiBDQ1hCc3N0YWIgZW50cnkgaW5kZXgKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRDcmVhdGVCZWFjb25SZXBvcnRGcm9tQnNzVGFibGUoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkKQoreworCVBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVAlwUmVwb3J0OworCVBCRUFDT05fUkVQT1JUCQkJCXBCZWFjb25SZXBvcnQ7CisJVUNIQVIJCQkJCQlJbmRleCwgUmVxSWR4OworCVVTSE9SVAkJCQkJCUxlbmd0aDsKKwlQVUNIQVIJCQkJCQlwRGVzdDsKKwlQQlNTX0VOVFJZCQkJCQlwQnNzOworCisJLy8gMC4gc2V0dXAgYmFzZSBwb2ludGVyCisJUmVxSWR4ID0gcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4OworCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgcEFkLT5TdGFDZmcuQ0NYQnNzVGFiLkJzc05yOyBJbmRleCsrKQorCXsKKwkJLy8gMS4gU2V0dXAgdGhlIGJ1ZmZlciBhZGRyZXNzIGZvciBjb3B5aW5nIHRoaXMgQlNTSUQgaW50byByZXBvcnRpbmcgZnJhbWUKKwkJLy8gICAgVGhlIG9mZnNldCBzaG91bGQgc3RhcnQgYWZ0ZXIgODAyLjExIGhlYWRlciBhbmQgcmVwb3J0IGZyYW1lIGhlYWRlci4KKwkJcERlc3QgID0gKFBVQ0hBUikgJnBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmW3BBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuXTsKKwkJcEJzcyAgID0gKFBCU1NfRU5UUlkpICZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIuQnNzRW50cnlbSW5kZXhdOworCQlMZW5ndGggPSAwOworCisJCS8vIDIuIEZpbGwgTWVhc3VyZW1lbnQgcmVwb3J0IGZpZWxkcworCQlwUmVwb3J0ICAgICAgICAgPSAoUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSBwRGVzdDsKKwkJcFJlcG9ydC0+RWlkICAgID0gSUVfTUVBU1VSRU1FTlRfUkVQT1JUOworCQlwUmVwb3J0LT5MZW5ndGggPSAwOworCQlwUmVwb3J0LT5Ub2tlbiAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbUmVxSWR4XS5SZXFFbGVtLlRva2VuOworCQlwUmVwb3J0LT5Nb2RlICAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbUmVxSWR4XS5SZXFFbGVtLk1vZGU7CisJCXBSZXBvcnQtPlR5cGUgICA9IE1TUk5fVFlQRV9CRUFDT05fUkVROworCQlMZW5ndGggICAgICAgICAgPSBzaXplb2YoTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpOworCQlwRGVzdCAgICAgICAgICArPSBzaXplb2YoTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpOworCisJCS8vIDMuIFN0YXJ0IHRoZSBiZWFjb24gcmVwb3J0IGZvcm1hdAorCQlwQmVhY29uUmVwb3J0ID0gKFBCRUFDT05fUkVQT1JUKSBwRGVzdDsKKwkJcERlc3QgICAgICAgICs9IHNpemVvZihCRUFDT05fUkVQT1JUKTsKKwkJTGVuZ3RoICAgICAgICs9IHNpemVvZihCRUFDT05fUkVQT1JUKTsKKworCQkvLyA0LiBDb3B5IENoYW5uZWwgbnVtYmVyCisJCXBCZWFjb25SZXBvcnQtPkNoYW5uZWwgICAgICAgID0gcEJzcy0+Q2hhbm5lbDsKKwkJcEJlYWNvblJlcG9ydC0+U3BhcmUgICAgICAgICAgPSAwOworCQlwQmVhY29uUmVwb3J0LT5EdXJhdGlvbiAgICAgICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtSZXFJZHhdLk1lYXN1cmVtZW50LkR1cmF0aW9uOworCQlwQmVhY29uUmVwb3J0LT5QaHlUeXBlICAgICAgICA9ICgocEJzcy0+U3VwUmF0ZUxlbitwQnNzLT5FeHRSYXRlTGVuID4gNCkgPyBQSFlfRVJQIDogUEhZX0RTUyk7CisJCXBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgICAgICAgID0gcEJzcy0+UnNzaSAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7CisJCXBCZWFjb25SZXBvcnQtPkJlYWNvbkludGVydmFsID0gcEJzcy0+QmVhY29uUGVyaW9kOworCQlwQmVhY29uUmVwb3J0LT5DYXBhYmlsaXR5SW5mbyA9IHBCc3MtPkNhcGFiaWxpdHlJbmZvOworCQlDT1BZX01BQ19BRERSKHBCZWFjb25SZXBvcnQtPkJTU0lELCBwQnNzLT5Cc3NpZCk7CisJCU5kaXNNb3ZlTWVtb3J5KHBCZWFjb25SZXBvcnQtPlBhcmVudFRTRiwgcEJzcy0+UFRTRiwgNCk7CisJCU5kaXNNb3ZlTWVtb3J5KHBCZWFjb25SZXBvcnQtPlRhcmdldFRTRiwgcEJzcy0+VFRTRiwgOCk7CisKKwkJLy8gNS4gQ3JlYXRlIFNTSUQKKwkJKnBEZXN0KysgPSAweDAwOworCQkqcERlc3QrKyA9IHBCc3MtPlNzaWRMZW47CisJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBwQnNzLT5Tc2lkLCBwQnNzLT5Tc2lkTGVuKTsKKwkJcERlc3QgICs9IHBCc3MtPlNzaWRMZW47CisJCUxlbmd0aCArPSAoMiArIHBCc3MtPlNzaWRMZW4pOworCisJCS8vIDYuIENyZWF0ZSBTdXBwb3J0UmF0ZXMKKwkJKnBEZXN0KysgPSAweDAxOworCQkqcERlc3QrKyA9IHBCc3MtPlN1cFJhdGVMZW47CisJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBwQnNzLT5TdXBSYXRlLCBwQnNzLT5TdXBSYXRlTGVuKTsKKwkJcERlc3QgICs9IHBCc3MtPlN1cFJhdGVMZW47CisJCUxlbmd0aCArPSAoMiArIHBCc3MtPlN1cFJhdGVMZW4pOworCisJCS8vIDcuIERTIFBhcmFtZXRlcgorCQkqcERlc3QrKyA9IDB4MDM7CisJCSpwRGVzdCsrID0gMTsKKwkJKnBEZXN0KysgPSBwQnNzLT5DaGFubmVsOworCQlMZW5ndGggICs9IDM7CisKKwkJLy8gOC4gSUJTUyBwYXJhbWV0ZXIgaWYgcHJlc2VudHMKKwkJaWYgKHBCc3MtPkJzc1R5cGUgPT0gQlNTX0FESE9DKQorCQl7CisJCQkqcERlc3QrKyA9IDB4MDY7CisJCQkqcERlc3QrKyA9IDI7CisJCQkqKFBVU0hPUlQpIHBEZXN0ID0gcEJzcy0+QXRpbVdpbjsKKwkJCXBEZXN0ICAgKz0gMjsKKwkJCUxlbmd0aCAgKz0gNDsKKwkJfQorCisJCS8vIDkuIFVwZGF0ZSBsZW5ndGggZmllbGQsIG5vdCBpbmNsdWRlIEVJRCBhbmQgbGVuZ3RoCisJCXBSZXBvcnQtPkxlbmd0aCA9IExlbmd0aCAtIDQ7CisKKwkJLy8gMTAuIFVwZGF0ZSB0b3RhbCBmcmFtZSBzaXplCisJCXBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuICs9IExlbmd0aDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9hc3NvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXNzb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzMzYTg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXNzb2MuYwpAQCAtMCwwICsxLDIwNjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJYXNzb2MuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4JCTIwMDQtOS0zCQlwb3J0aW5nIGZyb20gUlQyNTAwCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCitVQ0hBUglDaXBoZXJXcGFUZW1wbGF0ZVtdID0geworCQkweGRkLCAJCQkJCS8vIFdQQSBJRQorCQkweDE2LAkJCQkJLy8gTGVuZ3RoCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMQkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworCitVQ0hBUglDaXBoZXJXcGEyVGVtcGxhdGVbXSA9IHsKKwkJMHgzMCwJCQkJCS8vIFJTTiBJRQorCQkweDE0LAkJCQkJLy8gTGVuZ3RoCisJCTB4MDEsIDB4MDAsCQkJCS8vIFZlcnNpb24KKwkJMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwJLy8gZ3JvdXAgY2lwaGVyLCBUS0lQCisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBwYWlyd2lzZQorCQkweDAwLCAweDBmLCAweGFjLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwJLy8gYXV0aGVudGljYXRpb24KKwkJMHgwMCwgMHgwMCwJCQkJLy8gUlNOIGNhcGFiaWxpdHkKKwkJfTsKKworVUNIQVIJQ2N4MkllSW5mb1tdID0geyAweDAwLCAweDQwLCAweDk2LCAweDAzLCAweDAyfTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlhc3NvY2lhdGlvbiBzdGF0ZSBtYWNoaW5lIGluaXQsIGluY2x1ZGluZyBzdGF0ZSB0cmFuc2l0aW9uIGFuZCB0aW1lciBpbml0CisJUGFyYW1ldGVyczoKKwkJUyAtIHBvaW50ZXIgdG8gdGhlIGFzc29jaWF0aW9uIHN0YXRlIG1hY2hpbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzc29jU3RhdGVNYWNoaW5lSW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgU1RBVEVfTUFDSElORSAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisJU3RhdGVNYWNoaW5lSW5pdChTLCBUcmFucywgTUFYX0FTU09DX1NUQVRFLCBNQVhfQVNTT0NfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIEFTU09DX0lETEUsIEFTU09DX01BQ0hJTkVfQkFTRSk7CisKKwkvLyBmaXJzdCBjb2x1bW4KKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfSURMRSwgTVQyX01MTUVfQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVBc3NvY1JlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX0lETEUsIE1UMl9NTE1FX1JFQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVSZWFzc29jUmVxQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfSURMRSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVEaXNhc3NvY1JlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX0lETEUsIE1UMl9QRUVSX0RJU0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGlzYXNzb2NBY3Rpb24pOworCisJLy8gc2Vjb25kIGNvbHVtbgorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5Bc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZSk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRpc2Fzc29jQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0FTU09DX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQXNzb2NSc3BBY3Rpb24pOworCS8vCisJLy8gUGF0Y2ggM0NvbSBBUCBNT2RlOjNDUldFNDU0RzcyCisJLy8gV2Ugc2VuZCBBc3NvYyByZXF1ZXN0IGZyYW1lIHRvIHRoaXMgQVAsIGl0IGFsd2F5cyBzZW5kIFJlYXNzb2MgUnNwIG5vdCBBc3NvY2lhdGUgUnNwLgorCS8vCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9SRUFTU09DX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQXNzb2NSc3BBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX0FTU09DX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQXNzb2NUaW1lb3V0QWN0aW9uKTsKKworCS8vIHRoaXJkIGNvbHVtbgorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9BU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkFzc29jKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfUkVBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblJlYXNzb2MpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZSk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0RJU0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGlzYXNzb2NBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9SRUFTU09DX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyUmVhc3NvY1JzcEFjdGlvbik7CisJLy8KKwkvLyBQYXRjaCwgQVAgZG9lc24ndCBzZW5kIFJlYXNzb2NpYXRlIFJzcCBmcmFtZSB0byBTdGF0aW9uLgorCS8vCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0FTU09DX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyUmVhc3NvY1JzcEFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9SRUFTU09DX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpUmVhc3NvY1RpbWVvdXRBY3Rpb24pOworCisJLy8gZm91cnRoIGNvbHVtbgorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBESVNBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5Bc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZSk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRpc2Fzc29jQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgRElTQVNTT0NfV0FJVF9SU1AsIE1UMl9ESVNBU1NPQ19USU1FT1VULCAoU1RBVEVfTUFDSElORV9GVU5DKURpc2Fzc29jVGltZW91dEFjdGlvbik7CisKKwkvLyBpbml0aWFsaXplIHRoZSB0aW1lcgorCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihBc3NvY1RpbWVvdXQpLCBwQWQsIEZBTFNFKTsKKwlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihSZWFzc29jVGltZW91dCksIHBBZCwgRkFMU0UpOworCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkRpc2Fzc29jVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihEaXNhc3NvY1RpbWVvdXQpLCBwQWQsIEZBTFNFKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlBc3NvY2lhdGlvbiB0aW1lb3V0IHByb2NlZHVyZS4gQWZ0ZXIgYXNzb2NpYXRpb24gdGltZW91dCwgdGhpcyBmdW5jdGlvbgorCQl3aWxsIGJlIGNhbGxlZCBhbmQgaXQgd2lsbCBwdXQgYSBtZXNzYWdlIGludG8gdGhlIE1MTUUgcXVldWUKKwlQYXJhbWV0ZXJzOgorCQlTdGFuZGFyZCB0aW1lciBwYXJhbWV0ZXJzCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNzb2NUaW1lb3V0KElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwkJCQkgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCQkJCSBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJCQkJIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlSVE1QX0FEQVBURVIgKnBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQlyZXR1cm47CisKKwlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19USU1FT1VULCAwLCBOVUxMKTsKKwlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUmVhc3NvY2lhdGlvbiB0aW1lb3V0IHByb2NlZHVyZS4gQWZ0ZXIgcmVhc3NvY2lhdGlvbiB0aW1lb3V0LCB0aGlzCisJCWZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFuZCBwdXQgYSBtZXNzYWdlIGludG8gdGhlIE1MTUUgcXVldWUKKwlQYXJhbWV0ZXJzOgorCQlTdGFuZGFyZCB0aW1lciBwYXJhbWV0ZXJzCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUmVhc3NvY1RpbWVvdXQoSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCQkJCQlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJCQkJCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwkJCQkJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCVJUTVBfQURBUFRFUiAqcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJCXJldHVybjsKKworCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfVElNRU9VVCwgMCwgTlVMTCk7CisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCURpc2Fzc29jaWF0aW9uIHRpbWVvdXQgcHJvY2VkdXJlLiBBZnRlciBkaXNhc3NvY2lhdGlvbiB0aW1lb3V0LCB0aGlzCisJCWZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFuZCBwdXQgYSBtZXNzYWdlIGludG8gdGhlIE1MTUUgcXVldWUKKwlQYXJhbWV0ZXJzOgorCQlTdGFuZGFyZCB0aW1lciBwYXJhbWV0ZXJzCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRGlzYXNzb2NUaW1lb3V0KElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwkJCQkJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCQkJCQlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJCQkJCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlSVE1QX0FEQVBURVIgKnBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQlyZXR1cm47CisKKwlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19USU1FT1VULCAwLCBOVUxMKTsKKwlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJbWxtZSBhc3NvYyByZXEgaGFuZGxpbmcgcHJvY2VkdXJlCisJUGFyYW1ldGVyczoKKwkJQWRhcHRlciAtIEFkYXB0ZXIgcG9pbnRlcgorCQlFbGVtIC0gTUxNRSBRdWV1ZSBFbGVtZW50CisJUHJlOgorCQl0aGUgc3RhdGlvbiBoYXMgYmVlbiBhdXRoZW50aWNhdGVkIGFuZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgY29uZmlnCisJCQktIyBTU0lECisJCQktIyBzdXBwb3J0ZWQgcmF0ZXMgYW5kIHRoZWlyIGxlbmd0aAorCQkJLSMgbGlzdGVuIGludGVydmFsIChBZGFwdGVyLT5TdGFDZmcuZGVmYXVsdF9saXN0ZW5fY291bnQpCisJCQktIyBUcmFuc21pdCBwb3dlciAgKEFkYXB0ZXItPlN0YUNmZy50eF9wb3dlcikKKwlQb3N0ICA6CisJCS0jIEFuIGFzc29jaWF0aW9uIHJlcXVlc3QgZnJhbWUgaXMgZ2VuZXJhdGVkIGFuZCBzZW50IHRvIHRoZSBhaXIKKwkJLSMgQXNzb2NpYXRpb24gdGltZXIgc3RhcnRzCisJCS0jIEFzc29jaWF0aW9uIHN0YXRlIC0+IEFTU09DX1dBSVRfUlNQCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUFzc29jUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUgkJCUFwQWRkcls2XTsKKwlIRUFERVJfODAyXzExCUFzc29jSGRyOworCVVDSEFSCQkJQ2N4MkxlbiA9IDU7CisJVUNIQVIJCQlXbWVJZVs5XSA9IHtJRV9WRU5ET1JfU1BFQ0lGSUMsIDB4MDcsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDB9OworCVVTSE9SVAkJCUxpc3RlbkludHY7CisJVUxPTkcJCQlUaW1lb3V0OworCVVTSE9SVAkJCUNhcGFiaWxpdHlJbmZvOworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUwkJTlN0YXR1czsKKwlVTE9ORwkJCUZyYW1lTGVuID0gMDsKKwlVTE9ORwkJCXRtcDsKKwlVU0hPUlQJCQlWYXJJZXNPZmZzZXQ7CisJVUNIQVIJCQlDa2lwRmxhZzsKKwlVQ0hBUgkJCUNraXBOZWdvdGlhdGlvbkJ1ZmZlcltDS0lQX05FR09USUFUSU9OX0xFTkdUSF07CisJVUNIQVIJCQlBaXJvbmV0Q2tpcEllID0gSUVfQUlST05FVF9DS0lQOworCVVDSEFSCQkJQWlyb25ldENraXBMZW4gPSBDS0lQX05FR09USUFUSU9OX0xFTkdUSDsKKwlVQ0hBUgkJCUFpcm9uZXRJUEFkZHJlc3NJRSA9IElFX0FJUk9ORVRfSVBBRERSRVNTOworCVVDSEFSCQkJQWlyb25ldElQQWRkcmVzc0xlbiA9IEFJUk9ORVRfSVBBRERSRVNTX0xFTkdUSDsKKwlVQ0hBUgkJCUFpcm9uZXRJUEFkZHJlc3NCdWZmZXJbQUlST05FVF9JUEFERFJFU1NfTEVOR1RIXSA9IHsweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwfTsKKwlVU0hPUlQJCQlTdGF0dXM7CisKKwkvLyBCbG9jayBhbGwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBkdXJuaW5nIFdQQSBibG9jayBwZXJpb2QKKwlpZiAocEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPT0gVFJVRSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gQmxvY2sgQXNzb2MgcmVxdWVzdCBkdXJuaW5nIFdQQSBibG9jayBwZXJpb2QhXG4iKSk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCX0KKwkvLyBjaGVjayBzYW5pdHkgZmlyc3QKKwllbHNlIGlmIChNbG1lQXNzb2NSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQXBBZGRyLCAmQ2FwYWJpbGl0eUluZm8sICZUaW1lb3V0LCAmTGlzdGVuSW50dikpCisJeworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgQXBBZGRyKTsKKworCQkvLyBHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOworCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFTU09DIC0gTWxtZUFzc29jUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCVN0YXR1cyA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIEFkZCBieSBKYW1lcyAwMy8wNi8yNworCQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKKwkJLy8gQXNzb2NpYXRpb24gZG9uJ3QgbmVlZCB0byByZXBvcnQgTUFDIGFkZHJlc3MKKwkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLkF2YWlsYWJsZVJlcXVlc3RGaXhlZElFcyA9CisJCQlORElTXzgwMl8xMV9BSV9SRVFGSV9DQVBBQklMSVRJRVMgfCBORElTXzgwMl8xMV9BSV9SRVFGSV9MSVNURU5JTlRFUlZBTDsKKwkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLlJlcXVlc3RGaXhlZElFcy5DYXBhYmlsaXRpZXMgPSBDYXBhYmlsaXR5SW5mbzsKKwkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLlJlcXVlc3RGaXhlZElFcy5MaXN0ZW5JbnRlcnZhbCA9IExpc3RlbkludHY7CisJCS8vIE9ubHkgcmVhc3NvY2lhdGUgbmVlZCB0aGlzCisJCS8vQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5Bc3NvY0luZm8uUmVxdWVzdEZpeGVkSUVzLkN1cnJlbnRBUEFkZHJlc3MsIEFwQWRkcik7CisJCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5PZmZzZXRSZXF1ZXN0SUVzID0gc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMsIE1BWF9WSUVfTEVOKTsKKwkJLy8gRmlyc3QgYWRkIFNTSUQKKwkJVmFySWVzT2Zmc2V0ID0gMDsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmU3NpZEllLCAxKTsKKwkJVmFySWVzT2Zmc2V0ICs9IDE7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgJnBBZC0+TWxtZUF1eC5Tc2lkTGVuLCAxKTsKKwkJVmFySWVzT2Zmc2V0ICs9IDE7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKwkJVmFySWVzT2Zmc2V0ICs9IHBBZC0+TWxtZUF1eC5Tc2lkTGVuOworCisJCS8vIFNlY29uZCBhZGQgU3VwcG9ydGVkIHJhdGVzCisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgJlN1cFJhdGVJZSwgMSk7CisJCVZhckllc09mZnNldCArPSAxOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsICZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwgMSk7CisJCVZhckllc09mZnNldCArPSAxOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsIHBBZC0+TWxtZUF1eC5TdXBSYXRlLCBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbik7CisJCVZhckllc09mZnNldCArPSBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbjsKKwkJLy8gRW5kIEFkZCBieSBKYW1lcworCisgICAgICAgIGlmICgocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KSAmJgorICAgICAgICAgICAgKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IFRSVUUpKQorICAgICAgICAgICAgQ2FwYWJpbGl0eUluZm8gfD0gMHgwMTAwOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gU2VuZCBBU1NPQyByZXF1ZXN0Li4uXG4iKSk7CisJCU1ndE1hY0hlYWRlckluaXQocEFkLCAmQXNzb2NIZHIsIFNVQlRZUEVfQVNTT0NfUkVRLCAwLCBBcEFkZHIsIEFwQWRkcik7CisKKwkJLy8gQnVpbGQgYmFzaWMgZnJhbWUgZmlyc3QKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCQkJICBzaXplb2YoSEVBREVSXzgwMl8xMSksCSZBc3NvY0hkciwKKwkJCQkJCSAgMiwJCQkJCQkmQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkgIDIsCQkJCQkJJkxpc3RlbkludHYsCisJCQkJCQkgIDEsCQkJCQkJJlNzaWRJZSwKKwkJCQkJCSAgMSwJCQkJCQkmcEFkLT5NbG1lQXV4LlNzaWRMZW4sCisJCQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCAJcEFkLT5NbG1lQXV4LlNzaWQsCisJCQkJCQkgIDEsCQkJCQkJJlN1cFJhdGVJZSwKKwkJCQkJCSAgMSwJCQkJCQkmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sCisJCQkJCQkgIHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLCAgcEFkLT5NbG1lQXV4LlN1cFJhdGUsCisJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQlpZiAocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gIT0gMCkKKwkJeworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAmdG1wLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4sCisJCQkJCQkJICBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwgIHBBZC0+TWxtZUF1eC5FeHRSYXRlLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJLy8gSFQKKwkJaWYgKChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuID4gMCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpCisJCXsKKwkJCVVMT05HIFRtcExlbjsKKwkJCVVDSEFSIEh0TGVuOworCQkJVUNIQVIgQlJPQURDT01bNF0gPSB7MHgwLCAweDkwLCAweDRjLCAweDMzfTsKKwkJCWlmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJQcmVOSHQgPT0gVFJVRSkKKwkJCXsKKwkJCQlIdExlbiA9IFNJWkVfSFRfQ0FQX0lFICsgNDsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmV3BhSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0TGVuLAorCQkJCQkJCSAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCUk9BRENPTVswXSwKKwkJCQkJCQkgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwgICAgICAgICAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQl9CisJCQllbHNlCisJCQl7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkgICAgICAgIEhUX0NBUEFCSUxJVFlfSUUgSHRDYXBhYmlsaXR5VG1wOworI2VuZGlmCisKKyNpZm5kZWYgUlRfQklHX0VORElBTgorCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdENhcEllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkoJkh0Q2FwYWJpbGl0eVRtcCwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbik7CisgICAgICAgIAkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSk7CisgICAgICAgIAkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSk7CisKKyAgICAgICAgCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgJlRtcExlbiwKKyAgICAgICAgCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0Q2FwSWUsCisgICAgICAgIAkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLAorICAgICAgICAJCQkJCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwmSHRDYXBhYmlsaXR5VG1wLAorICAgICAgICAJCQkJCQkJRU5EX09GX0FSR1MpOworI2VuZGlmCisJCQl9CisJCQlGcmFtZUxlbiArPSBUbXBMZW47CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkvLyBhZGQgUmFsaW5rIHByb3ByaWV0YXJ5IElFIHRvIGluZm9ybSBBUCB0aGlzIFNUQSBpcyBnb2luZyB0byB1c2UgQUdHUkVHQVRJT04gb3IgUElHR1ktQkFDSytBR0dSRUdBVElPTgorCQkvLyBDYXNlIEk6IChBZ2dyZWdhdGlvbiArIFBpZ2d5LUJhY2spCisJCS8vIDEuIHVzZXIgZW5hYmxlIGFnZ3JlZ2F0aW9uLCBBTkQKKwkJLy8gMi4gTWFjIHN1cHBvcnQgcGlnZ3ktYmFjaworCQkvLyAzLiBBUCBhbm5vdWNlcyBpdCdzIFBJR0dZLUJBQ0srQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04KKwkJLy8gQ2FzZSBJSTogKEFnZ3JlZ2F0aW9uKQorCQkvLyAxLiB1c2VyIGVuYWJsZSBhZ2dyZWdhdGlvbiwgQU5ECisJCS8vIDIuIEFQIGFubm91Y2VzIGl0J3MgQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04KKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpCisJCXsKKwkJCWlmICgocEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUpICYmICgocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAzKSA9PSAzKSkKKwkJCXsKKwkJCQlVTE9ORyBUbXBMZW47CisJCQkJVUNIQVIgUmFsaW5rSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLCAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkJICA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFsaW5rSWUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJCX0KKwkJCWVsc2UgaWYgKHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICYgMHgwMDAwMDAwMSkKKwkJCXsKKwkJCQlVTE9ORyBUbXBMZW47CisJCQkJVUNIQVIgUmFsaW5rSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfTsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLCAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkJICA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFsaW5rSWUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVVMT05HIFRtcExlbjsKKwkJCVVDSEFSIFJhbGlua0llWzldID0ge0lFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH07CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLAkJICZUbXBMZW4sCisJCQkJCQkJICA5LAkJCQkJCSBSYWxpbmtJZSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJfQorCisJCWlmIChwQWQtPk1sbWVBdXguQVBFZGNhUGFybS5iVmFsaWQpCisJCXsKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlKQorCQkJeworCQkJCVFCU1NfU1RBX0lORk9fUEFSTSBRb3NJbmZvOworCisJCQkJTmRpc1plcm9NZW1vcnkoJlFvc0luZm8sIHNpemVvZihRQlNTX1NUQV9JTkZPX1BBUk0pKTsKKwkJCQlRb3NJbmZvLlVBUFNEX0FDX0JFID0gcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CRTsKKwkJCQlRb3NJbmZvLlVBUFNEX0FDX0JLID0gcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CSzsKKwkJCQlRb3NJbmZvLlVBUFNEX0FDX1ZJID0gcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WSTsKKwkJCQlRb3NJbmZvLlVBUFNEX0FDX1ZPID0gcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WTzsKKwkJCQlRb3NJbmZvLk1heFNQTGVuZ3RoID0gcEFkLT5Db21tb25DZmcuTWF4U1BMZW5ndGg7CisJCQkJV21lSWVbOF0gfD0gKihQVUNIQVIpJlFvc0luZm87CisJCQl9CisJCQllbHNlCisJCQl7CisgICAgICAgICAgICAgICAgLy8gVGhlIFBhcmFtZXRlciBTZXQgQ291bnQgaXMgc2V0IHRvIKGnMKGoIGluIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0IGZyYW1lcworICAgICAgICAgICAgICAgIC8vIFdtZUllWzhdIHw9IChwQWQtPk1sbWVBdXguQVBFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQgJiAweDBmKTsKKwkJCX0KKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAmdG1wLAorCQkJCQkJCSAgOSwgICAgICAgICAgICAgICAgICAgICAgICAmV21lSWVbMF0sCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKworCQkvLworCQkvLyBMZXQgV1BBKCMyMjEpIEVsZW1lbnQgSUQgb24gdGhlIGVuZCBvZiB0aGlzIGFzc29jaWF0aW9uIGZyYW1lLgorCQkvLyBPdGhlcndpc2Ugc29tZSBBUCB3aWxsIGZhaWwgb24gcGFyc2luZyBFbGVtZW50IElEIGFuZCBzZXQgc3RhdHVzIGZhaWwgb24gQXNzb2MgUnNwLgorCQkvLyBGb3IgZXhhbXBsZTogUHV0IFZlbmRvciBTcGVjaWZpYyBJRSBvbiB0aGUgZnJvbnQgb2YgV1BBIElFLgorCQkvLyBUaGlzIGhhcHBlbnMgb24gQVAgKE1vZGVsIE5vOkxpbmtzeXMgV1JLNTRHKQorCQkvLworCQlpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgfHwKKyAgICAgICAgICAgIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikKKwkJCSkKKyAgICAgICAgICAgICkKKwkJeworCQkJVUNIQVIgUlNOSWUgPSBJRV9XUEE7CisKKwkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgfHwKKyAgICAgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikpCisJCQl7CisJCQkJUlNOSWUgPSBJRV9XUEEyOworCQkJfQorCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZmRlZiBTSU9DU0lXR0VOSUUKKwkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gMSkKKyNlbmRpZiAvLyBTSU9DU0lXR0VOSUUgLy8KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgCVJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCBCU1MwKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFdQQSBQTUsgY2FjaGUgbGlzdAorCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCisJCQl7CisJCQkgICAgSU5UICAgICBpZHg7CisgICAgICAgICAgICAgICAgQk9PTEVBTiBGb3VuZFBNSyA9IEZBTFNFOworCQkJCS8vIFNlYXJjaCBjaGNoZWQgUE1LSUQsIGFwcGVuZCBpdCBpZiBleGlzdGVkCisJCQkJZm9yIChpZHggPSAwOyBpZHggPCBQTUtJRF9OTzsgaWR4KyspCisJCQkJeworCQkJCQlpZiAoTmRpc0VxdWFsTWVtb3J5KEFwQWRkciwgJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeF0uQlNTSUQsIDYpKQorCQkJCQl7CisJCQkJCQlGb3VuZFBNSyA9IFRSVUU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChGb3VuZFBNSykKKwkJCQl7CisJCQkJCS8vIFNldCBQTUsgbnVtYmVyCisJCQkJCSooUFVTSE9SVCkgJnBBZC0+U3RhQ2ZnLlJTTl9JRVtwQWQtPlN0YUNmZy5SU05JRV9MZW5dID0gMTsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlJTTl9JRVtwQWQtPlN0YUNmZy5SU05JRV9MZW4gKyAyXSwgJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeF0uUE1LSUQsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuUlNOSUVfTGVuICs9IDE4OworCQkJCX0KKwkJCX0KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZkZWYgU0lPQ1NJV0dFTklFCisJCQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID09IDEpCisJCQl7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAJCSZ0bXAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgIAlwQWQtPlN0YUNmZy5SU05JRV9MZW4sCQkJcEFkLT5TdGFDZmcuUlNOX0lFLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAJRU5EX09GX0FSR1MpOworCQkJfQorCQkJZWxzZQorI2VuZGlmCisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJCXsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgIAkJJnRtcCwKKwkJCQkgICAgICAgICAgICAgIAkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUlNOSWUsCisJCSAgICAgICAgICAgICAgICAgICAgICAgIAkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlN0YUNmZy5SU05JRV9MZW4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgIAlwQWQtPlN0YUNmZy5SU05JRV9MZW4sCQkJcEFkLT5TdGFDZmcuUlNOX0lFLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAJRU5EX09GX0FSR1MpOworCQkJfQorCisJCQlGcmFtZUxlbiArPSB0bXA7CisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmZGVmIFNJT0NTSVdHRU5JRQorCQkJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSAxKQorI2VuZGlmCisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJCXsKKwkgICAgICAgICAgICAvLyBBcHBlbmQgVmFyaWFibGUgSUUKKwkgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsICZSU05JZSwgMSk7CisJICAgICAgICAgICAgVmFySWVzT2Zmc2V0ICs9IDE7CisJICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmcEFkLT5TdGFDZmcuUlNOSUVfTGVuLCAxKTsKKwkgICAgICAgICAgICBWYXJJZXNPZmZzZXQgKz0gMTsKKwkJCX0KKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgcEFkLT5TdGFDZmcuUlNOX0lFLCBwQWQtPlN0YUNmZy5SU05JRV9MZW4pOworCQkJVmFySWVzT2Zmc2V0ICs9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbjsKKworCQkJLy8gU2V0IFZhcmlhYmxlIElFcyBMZW5ndGgKKwkJCXBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuID0gVmFySWVzT2Zmc2V0OworCQl9CisKKwkJLy8gV2UgaGF2ZSB1cGRhdGUgdGhhdCBhdCBQZWVyQmVhY29uQXRKb2luUmVxdWVzdCgpCisJCUNraXBGbGFnID0gcEFkLT5TdGFDZmcuQ2tpcEZsYWc7CisJCWlmIChDa2lwRmxhZyAhPSAwKQorCQl7CisJCQlOZGlzWmVyb01lbW9yeShDa2lwTmVnb3RpYXRpb25CdWZmZXIsIENLSVBfTkVHT1RJQVRJT05fTEVOR1RIKTsKKwkJCUNraXBOZWdvdGlhdGlvbkJ1ZmZlclsyXSA9IDB4NjY7CisJCQkvLyBNYWtlIGl0IHRyeSBLUCAmIE1JQywgc2luY2Ugd2UgaGF2ZSB0byBmb2xsb3cgdGhlIHJlc3VsdCBmcm9tIEFzc29jUnNwCisJCQlDa2lwTmVnb3RpYXRpb25CdWZmZXJbOF0gPSAweDE4OworCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyW0NLSVBfTkVHT1RJQVRJT05fTEVOR1RIIC0gMV0gPSAweDIyOworCQkJQ2tpcEZsYWcgPSAweDE4OworCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sIAkmdG1wLAorCQkJCQkJMSwJCQkJCQkgIAkJJkFpcm9uZXRDa2lwSWUsCisJCQkJCQkxLAkJCQkJCSAgCQkmQWlyb25ldENraXBMZW4sCisJCQkJCQlBaXJvbmV0Q2tpcExlbiwgCQkgIAkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyLAorCQkJCQkJRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKwkJLy8gQWRkIENDWCB2MiByZXF1ZXN0IGlmIENDWDIgYWRtaW4gc3RhdGUgaXMgb24KKwkJaWYgKHBBZC0+U3RhQ2ZnLkNDWENvbnRyb2wuZmllbGQuRW5hYmxlID09IDEpCisJCXsKKworCQkJLy8KKwkJCS8vIEFkZCBBaXJvbmV0SVBBZGRyZXNzSUUgZm9yIENpc2NvIENDWCAyLlgKKwkJCS8vIEFkZCBDQ1ggVmVyc2lvbgorCQkJLy8KKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCTEsCQkJCQkJCSZBaXJvbmV0SVBBZGRyZXNzSUUsCisJCQkJCQkxLAkJCQkJCQkmQWlyb25ldElQQWRkcmVzc0xlbiwKKwkJCQkJCUFpcm9uZXRJUEFkZHJlc3NMZW4sCQlBaXJvbmV0SVBBZGRyZXNzQnVmZmVyLAorCQkJCQkJMSwJCQkJCQkJJkNjeDJJZSwKKwkJCQkJCTEsCQkJCQkJCSZDY3gyTGVuLAorCQkJCQkJQ2N4MkxlbiwJCQkJICAgIENjeDJJZUluZm8sCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCS8vCisJCQkvLyBBZGQgQ2lwaGVyU3VpdGUgQ0NLTSBvciBMZWFwVGtpcCBpZiBzZXR0aW5nLgorCQkJLy8KKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSkKKwkJCXsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCSZ0bXAsCisJCQkJCQlDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbiwJCUNpcGhlclN1aXRlQ2lzY29DQ0tNLAorCQkJCQkJRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IHRtcDsKKworCQkJCS8vIFRoaXJkIGFkZCBSU04KKwkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsIENpcGhlclN1aXRlQ2lzY29DQ0tNLCBDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbik7IC8vU2F2ZSBDaXBoZXJTdWl0ZQorCQkJCVZhckllc09mZnNldCArPSBDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbjsKKwkJCX0KKwkJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKSAmJiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpKQorCQkJeworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCUNpcGhlclN1aXRlQ0NYVGtpcExlbiwJICAgIENpcGhlclN1aXRlQ0NYVGtpcCwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCQkvLyBUaGlyZCBhZGQgUlNOCisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCBDaXBoZXJTdWl0ZUNDWFRraXAsIENpcGhlclN1aXRlQ0NYVGtpcExlbik7CisJCQkJVmFySWVzT2Zmc2V0ICs9IENpcGhlclN1aXRlQ0NYVGtpcExlbjsKKwkJCX0KKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKworCQkJLy8gQWRkIGJ5IEphbWVzIDAzLzA2LzI3CisJCQkvLyBTZXQgVmFyaWFibGUgSUVzIExlbmd0aAorCQkJcEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPSBWYXJJZXNPZmZzZXQ7CisJCQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uUmVxdWVzdElFTGVuZ3RoID0gVmFySWVzT2Zmc2V0OworCisJCQkvLyBPZmZzZXRSZXNwb25zZUlFcyBmb2xsb3cgUmVxVmFySUUKKwkJCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5PZmZzZXRSZXNwb25zZUlFcyA9IHNpemVvZihORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTikgKyBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbjsKKwkJCS8vIEVuZCBBZGQgYnkgSmFtZXMKKwkJfQorCisKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQXNzb2NUaW1lciwgVGltZW91dCk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfV0FJVF9SU1A7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQVNTT0MgLSBNbG1lQXNzb2NSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbGVkLiBCVUchISEhISEgXG4iKSk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCX0KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCW1sbWUgcmVhc3NvYyByZXEgaGFuZGxpbmcgcHJvY2VkdXJlCisJUGFyYW1ldGVyczoKKwkJRWxlbSAtCisJUHJlOgorCQktIyBTU0lEICAoQWRhcHRlci0+U3RhQ2ZnLnNzaWRbXSkKKwkJLSMgQlNTSUQgKEFQIGFkZHJlc3MsIEFkYXB0ZXItPlN0YUNmZy5ic3NpZCkKKwkJLSMgU3VwcG9ydGVkIHJhdGVzIChBZGFwdGVyLT5TdGFDZmcuc3VwcG9ydGVkX3JhdGVzW10pCisJCS0jIFN1cHBvcnRlZCByYXRlcyBsZW5ndGggKEFkYXB0ZXItPlN0YUNmZy5zdXBwb3J0ZWRfcmF0ZXNfbGVuKQorCQktIyBUeCBwb3dlciAoQWRhcHRlci0+U3RhQ2ZnLnR4X3Bvd2VyKQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVSZWFzc29jUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUgkJCUFwQWRkcls2XTsKKwlIRUFERVJfODAyXzExCVJlYXNzb2NIZHI7CisJVUNIQVIJCQlDY3gyTGVuID0gNTsKKwlVQ0hBUgkJCVdtZUllWzldID0ge0lFX1ZFTkRPUl9TUEVDSUZJQywgMHgwNywgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwMH07CisJVVNIT1JUCQkJQ2FwYWJpbGl0eUluZm8sIExpc3RlbkludHY7CisJVUxPTkcJCQlUaW1lb3V0OworCVVMT05HCQkJRnJhbWVMZW4gPSAwOworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKwlORElTX1NUQVRVUwkJTlN0YXR1czsKKwlVTE9ORwkJCXRtcDsKKwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKy8vQ0NYIDIuWAorI2lmZGVmIExFQVBfU1VQUE9SVAorCVVDSEFSCQkJQ2tpcEZsYWc7CisJVUNIQVIJCQlDa2lwTmVnb3RpYXRpb25CdWZmZXJbQ0tJUF9ORUdPVElBVElPTl9MRU5HVEhdOworCVVDSEFSCQkJQWlyb25ldENraXBJZSA9IElFX0FJUk9ORVRfQ0tJUDsKKwlVQ0hBUgkJCUFpcm9uZXRDa2lwTGVuID0gQ0tJUF9ORUdPVElBVElPTl9MRU5HVEg7CisJVUNIQVIJCQlBaXJvbmV0SVBBZGRyZXNzSUUgPSBJRV9BSVJPTkVUX0lQQUREUkVTUzsKKwlVQ0hBUgkJCUFpcm9uZXRJUEFkZHJlc3NMZW4gPSBBSVJPTkVUX0lQQUREUkVTU19MRU5HVEg7CisJVUNIQVIJCQlBaXJvbmV0SVBBZGRyZXNzQnVmZmVyW0FJUk9ORVRfSVBBRERSRVNTX0xFTkdUSF0gPSB7MHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMH07CisJVUNIQVIJCQlBaXJvbmV0Q0NLTVJlYXNzb2NJRSA9IElFX0FJUk9ORVRfQ0NLTVJFQVNTT0M7CisJVUNIQVIJCQlBaXJvbmV0Q0NLTVJlYXNzb2NMZW4gPSBBSVJPTkVUX0NDS01SRUFTU09DX0xFTkdUSDsKKwlVQ0hBUgkJCUFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlcltBSVJPTkVUX0NDS01SRUFTU09DX0xFTkdUSF07CisJVUNIQVIJCQlBaXJvbmV0T1VJW10gPSB7MHgwMCwgMHg0MCwgMHg5NiwgMHgwMH07CisJVUNIQVIJCQlNSUNNTlsxNl07CisJVUNIQVIJCQlDYWxjTWljQnVmZmVyWzgwXTsKKwlVTE9ORwkJCUNhbGNNaWNCdWZmZXJMZW4gPSAwOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCVVTSE9SVAkJCVN0YXR1czsKKworCS8vIEJsb2NrIGFsbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGR1cm5pbmcgV1BBIGJsb2NrIHBlcmlvZAorCWlmIChwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9PSBUUlVFKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBCbG9jayBSZUFzc29jIHJlcXVlc3QgZHVybmluZyBXUEEgYmxvY2sgcGVyaW9kIVxuIikpOworCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCX0KKwkvLyB0aGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGFzc29jaWF0aW9uCisJZWxzZSBpZihNbG1lQXNzb2NSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQXBBZGRyLCAmQ2FwYWJpbGl0eUluZm8sICZUaW1lb3V0LCAmTGlzdGVuSW50dikpCisJeworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwkJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFTU09DIC0gTWxtZVJlYXNzb2NSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQkJU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworCQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7CisJCQlyZXR1cm47CisJCX0KKworCQlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgQXBBZGRyKTsKKworCQkvLyBtYWtlIGZyYW1lLCB1c2UgYnNzaWQgYXMgdGhlIEFQIGFkZHJlc3M/PworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFNlbmQgUkUtQVNTT0MgcmVxdWVzdC4uLlxuIikpOworCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJlJlYXNzb2NIZHIsIFNVQlRZUEVfUkVBU1NPQ19SRVEsIDAsIEFwQWRkciwgQXBBZGRyKTsKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgJlJlYXNzb2NIZHIsCisJCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgJkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICZMaXN0ZW5JbnR2LAorCQkJCQkJICBNQUNfQUREUl9MRU4sICAgICAgICAgICAgIEFwQWRkciwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEllLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguU3NpZExlbiwKKwkJCQkJCSAgcEFkLT5NbG1lQXV4LlNzaWRMZW4sICAgICBwQWQtPk1sbWVBdXguU3NpZCwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUllLAorCQkJCQkJICAxLAkJCQkJCSZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwKKwkJCQkJCSAgcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sICBwQWQtPk1sbWVBdXguU3VwUmF0ZSwKKwkJCQkJCSAgRU5EX09GX0FSR1MpOworCisJCWlmIChwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiAhPSAwKQorCQl7CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAmdG1wLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkV4dFJhdGVJZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwKKwkJCQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAkgICAgcEFkLT5NbG1lQXV4LkV4dFJhdGUsCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKworCQlpZiAocEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYlZhbGlkKQorCQl7CisJCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZSkKKwkJCXsKKwkJCQlRQlNTX1NUQV9JTkZPX1BBUk0gUW9zSW5mbzsKKworCQkJCU5kaXNaZXJvTWVtb3J5KCZRb3NJbmZvLCBzaXplb2YoUUJTU19TVEFfSU5GT19QQVJNKSk7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19CRSA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkU7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19CSyA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQks7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19WSSA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkk7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19WTyA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk87CisJCQkJUW9zSW5mby5NYXhTUExlbmd0aCA9IHBBZC0+Q29tbW9uQ2ZnLk1heFNQTGVuZ3RoOworCQkJCVdtZUllWzhdIHw9ICooUFVDSEFSKSZRb3NJbmZvOworCQkJfQorCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICZ0bXAsCisJCQkJCQkJICA5LCAgICAgICAgICAgICAgICAgICAgICAgICZXbWVJZVswXSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCUZyYW1lTGVuICs9IHRtcDsKKwkJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCS8vIEhUCisJCWlmICgocEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA+IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQl7CisJCQlVTE9ORyBUbXBMZW47CisJCQlVQ0hBUiBIdExlbjsKKwkJCVVDSEFSIEJST0FEQ09NWzRdID0gezB4MCwgMHg5MCwgMHg0YywgMHgzM307CisJCQlpZiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iUHJlTkh0ID09IFRSVUUpCisJCQl7CisJCQkJSHRMZW4gPSBTSVpFX0hUX0NBUF9JRSArIDQ7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXBMZW4sCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJldwYUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdExlbiwKKwkJCQkJCQkgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQlJPQURDT01bMF0sCisJCQkJCQkJIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4sICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdENhcEllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCX0KKwkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCS8vIGFkZCBSYWxpbmsgcHJvcHJpZXRhcnkgSUUgdG8gaW5mb3JtIEFQIHRoaXMgU1RBIGlzIGdvaW5nIHRvIHVzZSBBR0dSRUdBVElPTiBvciBQSUdHWS1CQUNLK0FHR1JFR0FUSU9OCisJCS8vIENhc2UgSTogKEFnZ3JlZ2F0aW9uICsgUGlnZ3ktQmFjaykKKwkJLy8gMS4gdXNlciBlbmFibGUgYWdncmVnYXRpb24sIEFORAorCQkvLyAyLiBNYWMgc3VwcG9ydCBwaWdneS1iYWNrCisJCS8vIDMuIEFQIGFubm91Y2VzIGl0J3MgUElHR1ktQkFDSytBR0dSRUdBVElPTi1jYXBhYmxlIGluIEJFQUNPTgorCQkvLyBDYXNlIElJOiAoQWdncmVnYXRpb24pCisJCS8vIDEuIHVzZXIgZW5hYmxlIGFnZ3JlZ2F0aW9uLCBBTkQKKwkJLy8gMi4gQVAgYW5ub3VjZXMgaXQncyBBR0dSRUdBVElPTi1jYXBhYmxlIGluIEJFQUNPTgorCQlpZiAocEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSkKKwkJeworCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5iUGlnZ3lCYWNrQ2FwYWJsZSkgJiYgKChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAmIDB4MDAwMDAwMDMpID09IDMpKQorCQkJeworCQkJCVVMT05HIFRtcExlbjsKKwkJCQlVQ0hBUiBSYWxpbmtJZVs5XSA9IHtJRV9WRU5ET1JfU1BFQ0lGSUMsIDcsIDB4MDAsIDB4MGMsIDB4NDMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9OworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIrRnJhbWVMZW4sICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCQkgIDksICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWxpbmtJZSwKKwkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkJRnJhbWVMZW4gKz0gVG1wTGVuOworCQkJfQorCQkJZWxzZSBpZiAocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAxKQorCQkJeworCQkJCVVMT05HIFRtcExlbjsKKwkJCQlVQ0hBUiBSYWxpbmtJZVs5XSA9IHtJRV9WRU5ET1JfU1BFQ0lGSUMsIDcsIDB4MDAsIDB4MGMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9OworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIrRnJhbWVMZW4sICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCQkgIDksICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWxpbmtJZSwKKwkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkJRnJhbWVMZW4gKz0gVG1wTGVuOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJVUxPTkcgVG1wTGVuOworCQkJVUNIQVIgUmFsaW5rSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDA0LCAweDAwLCAweDAwLCAweDAwfTsKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIrRnJhbWVMZW4sCQkgJlRtcExlbiwKKwkJCQkJCQkgIDksCQkJCQkJIFJhbGlua0llLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gVG1wTGVuOworCQl9CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCWlmIChMRUFQX0NDS01fT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuQ0NLTUxpbmtVcEZsYWcgPT0gVFJVRSkpCisJCXsKKwkJCUNraXBGbGFnID0gcEFkLT5TdGFDZmcuQ2tpcEZsYWc7CS8vIFdlIGhhdmUgdXBkYXRlIHRoYXQgYXQgUGVlckJlYWNvbkF0Sm9pblJlcXVlc3QoKQorCQkJaWYgKENraXBGbGFnICE9IDApCisJCQl7CisJCQkJTmRpc1plcm9NZW1vcnkoQ2tpcE5lZ290aWF0aW9uQnVmZmVyLCBDS0lQX05FR09USUFUSU9OX0xFTkdUSCk7CisJCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyWzJdID0gMHg2NjsKKwkJCQkvLyBNYWtlIGl0IHRyeSBLUCAmIE1JQywgc2luY2Ugd2UgaGF2ZSB0byBmb2xsb3cgdGhlIHJlc3VsdCBmcm9tIEFzc29jUnNwCisJCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyWzhdID0gMHgxODsKKwkJCQlDa2lwTmVnb3RpYXRpb25CdWZmZXJbQ0tJUF9ORUdPVElBVElPTl9MRU5HVEggLSAxXSA9IDB4MjI7CisKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJnRtcCwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFpcm9uZXRDa2lwSWUsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBaXJvbmV0Q2tpcExlbiwKKwkJCQkJCQkJCUFpcm9uZXRDa2lwTGVuLCAgICAgICAgICAgICAgICAgQ2tpcE5lZ290aWF0aW9uQnVmZmVyLAorCQkJCQkJCQkJRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IHRtcDsKKwkJCX0KKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLAorCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFpcm9uZXRJUEFkZHJlc3NJRSwKKwkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBaXJvbmV0SVBBZGRyZXNzTGVuLAorCQkJCQkJCUFpcm9uZXRJUEFkZHJlc3NMZW4sICAgICAgICAgICAgQWlyb25ldElQQWRkcmVzc0J1ZmZlciwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCS8vCisJCQkvLyBUaGUgUk4gaXMgaW5jcmVtZW50ZWQgYmVmb3JlIGVhY2ggcmVhc3NvY2lhdGlvbiByZXF1ZXN0LgorCQkJLy8KKwkJCXBBZC0+U3RhQ2ZnLkNDS01STisrOworCQkJLy8KKwkJCS8vIENhbGN1bGF0ZSBNSUMgPSBobWFjLW1kNShrcmssIFNUQS1JRHxCU1NJRHxSU05JRXxUU0Z8Uk4pOworCQkJLy8KKwkJCUNPUFlfTUFDX0FERFIoQ2FsY01pY0J1ZmZlciwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJCQlDYWxjTWljQnVmZmVyTGVuID0gTUFDX0FERFJfTEVOOworCQkJQ09QWV9NQUNfQUREUihDYWxjTWljQnVmZmVyICsgQ2FsY01pY0J1ZmZlckxlbiwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKwkJCUNhbGNNaWNCdWZmZXJMZW4gKz0gTUFDX0FERFJfTEVOOworCQkJTmRpc01vdmVNZW1vcnkoQ2FsY01pY0J1ZmZlciArIENhbGNNaWNCdWZmZXJMZW4sIENpcGhlclN1aXRlQ2lzY29DQ0tNLCBDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbik7CisJCQlDYWxjTWljQnVmZmVyTGVuICs9IENpcGhlclN1aXRlQ2lzY29DQ0tNTGVuOworCQkJTmRpc01vdmVNZW1vcnkoQ2FsY01pY0J1ZmZlciArIENhbGNNaWNCdWZmZXJMZW4sIChQVUNIQVIpICZwQWQtPlN0YUNmZy5DQ0tNQmVhY29uQXRKb2luVGltZVN0YW1wLCBzaXplb2YocEFkLT5TdGFDZmcuQ0NLTUJlYWNvbkF0Sm9pblRpbWVTdGFtcCkpOworCQkJQ2FsY01pY0J1ZmZlckxlbiArPSBzaXplb2YocEFkLT5TdGFDZmcuQ0NLTUJlYWNvbkF0Sm9pblRpbWVTdGFtcCk7CisJCQlOZGlzTW92ZU1lbW9yeShDYWxjTWljQnVmZmVyICsgQ2FsY01pY0J1ZmZlckxlbiwgKFBVQ0hBUikmcEFkLT5TdGFDZmcuQ0NLTVJOLCBzaXplb2YocEFkLT5TdGFDZmcuQ0NLTVJOKSk7CisJCQlDYWxjTWljQnVmZmVyTGVuICs9IHNpemVvZihwQWQtPlN0YUNmZy5DQ0tNUk4pOworCQkJaG1hY19tZDUocEFkLT5TdGFDZmcuS1JLLCBMRU5fRUFQX01JQ0ssIENhbGNNaWNCdWZmZXIsIENhbGNNaWNCdWZmZXJMZW4sIE1JQ01OKTsKKworCQkJLy8KKwkJCS8vIGZpbGwgdXAgQ0NLTSByZWFzc29jaWF0aW9uIHJlcXVlc3QgZWxlbWVudAorCQkJLy8KKwkJCU5kaXNNb3ZlTWVtb3J5KEFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlciwgQWlyb25ldE9VSSwgNCk7CisJCQlOZGlzTW92ZU1lbW9yeShBaXJvbmV0Q0NLTVJlYXNzb2NCdWZmZXIgKyA0LCAoUFVDSEFSKSZwQWQtPlN0YUNmZy5DQ0tNQmVhY29uQXRKb2luVGltZVN0YW1wLCA4KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KEFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlciArIDEyLCAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuQ0NLTVJOLCA0KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KEFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlciArMTYsIE1JQ01OLCA4KTsKKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLAorCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICZBaXJvbmV0Q0NLTVJlYXNzb2NJRSwKKwkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAmQWlyb25ldENDS01SZWFzc29jTGVuLAorCQkJCQkJCUFpcm9uZXRDQ0tNUmVhc3NvY0xlbiwgIEFpcm9uZXRDQ0tNUmVhc3NvY0J1ZmZlciwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCQlDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbixDaXBoZXJTdWl0ZUNpc2NvQ0NLTSwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKworCQkvLyBBZGQgQ0NYIHYyIHJlcXVlc3QgaWYgQ0NYMiBhZG1pbiBzdGF0ZSBpcyBvbgorCQlpZiAocEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5FbmFibGUgPT0gMSkKKwkJeworCQkJLy8KKwkJCS8vIEFkZCBDQ1ggVmVyc2lvbgorCQkJLy8KKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCTEsCQkJCQkJCSZDY3gySWUsCisJCQkJCQkxLAkJCQkJCQkmQ2N4MkxlbiwKKwkJCQkJCUNjeDJMZW4sCQkJCSAgICBDY3gySWVJbmZvLAorCQkJCQkJRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCBUaW1lb3V0KTsgLyogaW4gbVNlYyAqLworCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IFJFQVNTT0NfV0FJVF9SU1A7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQVNTT0MgLSBNbG1lUmVhc3NvY1JlcUFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsZWQuIEJVRyEhISEgXG4iKSk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVVwcGVyIGxheWVyIGlzc3VlcyBkaXNhc3NvYyByZXF1ZXN0CisJUGFyYW1ldGVyczoKKwkJRWxlbSAtCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lRGlzYXNzb2NSZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgcERpc2Fzc29jUmVxOworCUhFQURFUl84MDJfMTEgICAgICAgICBEaXNhc3NvY0hkcjsKKwlQSEVBREVSXzgwMl8xMSAgICAgICAgcERpc2Fzc29jSGRyOworCVBVQ0hBUiAgICAgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlVTE9ORyAgICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCU5ESVNfU1RBVFVTICAgICAgICAgICBOU3RhdHVzOworCUJPT0xFQU4gICAgICAgICAgICAgICBUaW1lckNhbmNlbGxlZDsKKwlVTE9ORyAgICAgICAgICAgICAgICAgVGltZW91dCA9IDA7CisJVVNIT1JUICAgICAgICAgICAgICAgIFN0YXR1czsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCS8vIHNlbmQgRExTLVRFQVJfRE9XTiBtZXNzYWdlLAorCWlmIChwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwl7CisJCVVDSEFSIGk7CisKKwkJLy8gdGVhciBkb3duIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJeworCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQl9CisJCX0KKworCQkvLyB0ZWFyIGRvd24gcGVlciBkbHMgdGFibGUgZW50cnkKKwkJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwkJeworCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkpCisJCQl7CisJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX05PTkU7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCS8vIHNraXAgc2FuaXR5IGNoZWNrCisJcERpc2Fzc29jUmVxID0gKFBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpKEVsZW0tPk1zZyk7CisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIE1sbWVEaXNhc3NvY1JlcUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWRcbiIpKTsKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQlTdGF0dXMgPSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0U7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCisKKwlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5EaXNhc3NvY1RpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBTZW5kIERJU0FTU09DIHJlcXVlc3RbQlNTSUQ6OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IChSZWFzb249JWQpXG4iLAorCQkJCXBEaXNhc3NvY1JlcS0+QWRkclswXSwgcERpc2Fzc29jUmVxLT5BZGRyWzFdLCBwRGlzYXNzb2NSZXEtPkFkZHJbMl0sCisJCQkJcERpc2Fzc29jUmVxLT5BZGRyWzNdLCBwRGlzYXNzb2NSZXEtPkFkZHJbNF0sIHBEaXNhc3NvY1JlcS0+QWRkcls1XSwgcERpc2Fzc29jUmVxLT5SZWFzb24pKTsKKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkRpc2Fzc29jSGRyLCBTVUJUWVBFX0RJU0FTU09DLCAwLCBwRGlzYXNzb2NSZXEtPkFkZHIsIHBEaXNhc3NvY1JlcS0+QWRkcik7CS8vIHBhdGNoIHBlYXAgdHRscyBzd2l0Y2hpbmcgaXNzdWUKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwmRGlzYXNzb2NIZHIsCisJCQkJCSAgMiwgICAgICAgICAgICAgICAgICAgICZwRGlzYXNzb2NSZXEtPlJlYXNvbiwKKwkJCQkJICBFTkRfT0ZfQVJHUyk7CisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisKKwkvLyBUbyBwYXRjaCBJbnN0YW5jZSBhbmQgQnVmZmFsbyhOKSBBUAorCS8vIERyaXZlciBoYXMgdG8gc2VuZCBkZWF1dGggdG8gSW5zdGFuY2UgQVAsIGJ1dCBCdWZmYWxvKE4pIG5lZWRzIHRvIHNlbmQgZGlzYXNzb2MgdG8gcmVzZXQgQXV0aGVudGljYXRvcidzIHN0YXRlIG1hY2hpbmUKKwkvLyBUaGVyZWZvcmUsIHdlIHNlbmQgYm90aCBvZiB0aGVtLgorCXBEaXNhc3NvY0hkciA9IChQSEVBREVSXzgwMl8xMSlwT3V0QnVmZmVyOworCXBEaXNhc3NvY0hkci0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfREVBVVRIOworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCXBBZC0+U3RhQ2ZnLkRpc2Fzc29jUmVhc29uID0gUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HOworCUNPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuRGlzYXNzb2NTdGEsIHBEaXNhc3NvY1JlcS0+QWRkcik7CisKKwlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5EaXNhc3NvY1RpbWVyLCBUaW1lb3V0KTsgLyogaW4gbVNlYyAqLworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gRElTQVNTT0NfV0FJVF9SU1A7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorCXsKKyAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAvL3NlbmQgZGlzYXNzb2NpYXRlIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50CisgICAgICAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKyAgICAgICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfRElTQVNTT0NfRVZFTlRfRkxBRzsKKyAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIHsKKyAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXBlZXIgc2VuZHMgYXNzb2MgcnNwIGJhY2sKKwlQYXJhbWV0ZXJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckFzc29jUnNwQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgICAgICAgIENhcGFiaWxpdHlJbmZvLCBTdGF0dXMsIEFpZDsKKwlVQ0hBUiAgICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBTdXBSYXRlTGVuOworCVVDSEFSICAgICAgICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU10sIEV4dFJhdGVMZW47CisJVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUJPT0xFQU4gICAgICAgVGltZXJDYW5jZWxsZWQ7CisJVUNIQVIgICAgICAgICBDa2lwRmxhZzsKKwlFRENBX1BBUk0gICAgIEVkY2FQYXJtOworCUhUX0NBUEFCSUxJVFlfSUUJCUh0Q2FwYWJpbGl0eTsKKwlBRERfSFRfSU5GT19JRQkJQWRkSHRJbmZvOwkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbjsKKwlVQ0hBUgkJCUFkZEh0SW5mb0xlbjsKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCisJaWYgKFBlZXJBc3NvY1JzcFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJkNhcGFiaWxpdHlJbmZvLCAmU3RhdHVzLCAmQWlkLCBTdXBSYXRlLCAmU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgJkV4dFJhdGVMZW4sCisJCSZIdENhcGFiaWxpdHksJkFkZEh0SW5mbywgJkh0Q2FwYWJpbGl0eUxlbiwmQWRkSHRJbmZvTGVuLCZOZXdFeHRDaGFubmVsT2Zmc2V0LCAmRWRjYVBhcm0sICZDa2lwRmxhZykpCisJeworCQkvLyBUaGUgZnJhbWUgaXMgZm9yIG1lID8KKwkJaWYoTUFDX0FERFJfRVFVQUwoQWRkcjIsIHBBZC0+TWxtZUF1eC5Cc3NpZCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBc3NvY1JzcEFjdGlvbigpOkFTU09DIC0gcmVjZWl2ZSBBU1NPQ19SU1AgdG8gbWUgKHN0YXR1cz0lZClcbiIsIFN0YXR1cykpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckFzc29jUnNwQWN0aW9uKCk6TWFjVGFibGUgWyVkXS5BTXNkdVNpemUgPSAlZC4gQ2xpZW50U3RhdHVzRmxhZ3MgPSAweCVseCBcbiIsRWxlbS0+V2NpZCwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQ2xpZW50U3RhdHVzRmxhZ3MpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQlpZihTdGF0dXMgPT0gTUxNRV9TVUNDRVNTKQorCQkJeworCQkJCVVDSEFSCQkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IDA7CisJCQkJVUNIQVIJCQlpZHg7CisKKwkJCQkvLyBzdXBwb3J0ZWQgcmF0ZXMgYXJyYXkgbWF5IG5vdCBiZSBzb3J0ZWQuIHNvcnQgaXQgYW5kIGZpbmQgdGhlIG1heGltdW0gcmF0ZQorCQkJICAgIGZvciAoaWR4PTA7IGlkeDxTdXBSYXRlTGVuOyBpZHgrKykKKyAgICAgICAgICAgICAgICB7CisJCQkgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKFN1cFJhdGVbaWR4XSAmIDB4N2YpKQorCQkJICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IFN1cFJhdGVbaWR4XSAmIDB4N2Y7CisgICAgICAgICAgICAgICAgfQorCisJCQkJZm9yIChpZHg9MDsgaWR4PEV4dFJhdGVMZW47IGlkeCsrKQorICAgICAgICAgICAgICAgIHsKKwkJCSAgICAgICAgaWYgKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPCAoRXh0UmF0ZVtpZHhdICYgMHg3ZikpCisJCQkgICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gRXh0UmF0ZVtpZHhdICYgMHg3ZjsKKyAgICAgICAgICAgICAgICB9CisJCQkJLy8gZ28gdG8gcHJvY2VkdXJlIGxpc3RlZCBvbiBwYWdlIDM3NgorCQkJCUFzc29jUG9zdFByb2MocEFkLCBBZGRyMiwgQ2FwYWJpbGl0eUluZm8sIEFpZCwgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbiwKKwkJCQkJJkVkY2FQYXJtLCAmSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4sICZBZGRIdEluZm8pOworCisJCQkJU3RhQWRkTWFjVGFibGVFbnRyeShwQWQsICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzLCAmSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4sIENhcGFiaWxpdHlJbmZvKTsKKworCQkJCXBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gQ2tpcEZsYWc7CisJCQkJaWYgKENraXBGbGFnICYgMHgxOCkKKwkJCQl7CisJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlR4U0VRLCA0KTsKKwkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUnhTRVEsIDQpOworCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5DS0lQTUlDLCA0KTsKKwkJCQkJcEFkLT5TdGFDZmcuR0lWWzBdID0gUmFuZG9tQnl0ZShwQWQpOworCQkJCQlwQWQtPlN0YUNmZy5HSVZbMV0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCXBBZC0+U3RhQ2ZnLkdJVlsyXSA9IFJhbmRvbUJ5dGUocEFkKTsKKwkJCQkJcEFkLT5TdGFDZmcuYkNraXBPbiA9IFRSVUU7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjxDQ1g+IHBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gMHglMDJ4XG4iLCBwQWQtPlN0YUNmZy5Da2lwRmxhZykpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBGYWlsZSBvbiBBc3NvY2lhdGlvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIGNvZGUKKwkJCQkvLyBJcyB0aGF0IGEgUm9ndWUgQVA/CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkJaWYgKChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKSAmJiAoU3RhdHVzID09IE1MTUVfQUxHX05PVF9TVVBQT1JUKSkKKwkJCQl7IC8vUG9zc2libHkgUm9ndWUgQVAKKwkJCQkJUm9ndWVBcFRhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TdGFDZmcuUm9ndWVBcFRhYiwgcEFkLT5NbG1lQXV4LkJzc2lkLCBMRUFQX1JFQVNPTl9JTlZBTElEX0FVVEgpOworCQkJCX0KKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCX0KKwkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFBlZXJBc3NvY1JzcEFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXBlZXIgc2VuZHMgcmVhc3NvYyByc3AKKwlQYXJhbWV0cnM6CisJCUVsZW0gLSBNTE1FIG1lc3NhZ2UgY250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJSZWFzc29jUnNwQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgICAgICBDYXBhYmlsaXR5SW5mbzsKKwlVU0hPUlQgICAgICBTdGF0dXM7CisJVVNIT1JUICAgICAgQWlkOworCVVDSEFSICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBTdXBSYXRlTGVuOworCVVDSEFSICAgICAgIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBFeHRSYXRlTGVuOworCVVDSEFSICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJVUNIQVIgICAgICAgQ2tpcEZsYWc7CisJQk9PTEVBTiAgICAgVGltZXJDYW5jZWxsZWQ7CisJRURDQV9QQVJNICAgRWRjYVBhcm07CisJSFRfQ0FQQUJJTElUWV9JRQkJSHRDYXBhYmlsaXR5OworCUFERF9IVF9JTkZPX0lFCQlBZGRIdEluZm87CS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorCVVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuOworCVVDSEFSCQkJQWRkSHRJbmZvTGVuOworCVVDSEFSCQkJTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7CisKKwlpZihQZWVyQXNzb2NSc3BTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsICZDYXBhYmlsaXR5SW5mbywgJlN0YXR1cywgJkFpZCwgU3VwUmF0ZSwgJlN1cFJhdGVMZW4sIEV4dFJhdGUsICZFeHRSYXRlTGVuLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5LAkmQWRkSHRJbmZvLCAmSHRDYXBhYmlsaXR5TGVuLCAmQWRkSHRJbmZvTGVuLCZOZXdFeHRDaGFubmVsT2Zmc2V0LCAmRWRjYVBhcm0sICZDa2lwRmxhZykpCisJeworCQlpZihNQUNfQUREUl9FUVVBTChBZGRyMiwgcEFkLT5NbG1lQXV4LkJzc2lkKSkgLy8gVGhlIGZyYW1lIGlzIGZvciBtZSA/CisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gcmVjZWl2ZSBSRUFTU09DX1JTUCB0byBtZSAoc3RhdHVzPSVkKVxuIiwgU3RhdHVzKSk7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJCWlmKFN0YXR1cyA9PSBNTE1FX1NVQ0NFU1MpCisJCQl7CisJCQkJLy8gZ28gdG8gcHJvY2VkdXJlIGxpc3RlZCBvbiBwYWdlIDM3NgorCQkJCUFzc29jUG9zdFByb2MocEFkLCBBZGRyMiwgQ2FwYWJpbGl0eUluZm8sIEFpZCwgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbiwKKwkJCQkJICZFZGNhUGFybSwgJkh0Q2FwYWJpbGl0eSwgSHRDYXBhYmlsaXR5TGVuLCAmQWRkSHRJbmZvKTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICE9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisKKyAgICAgICAgICAgICAgICAgICAgU2VuZEFzc29jSUVzVG9XcGFTdXBwbGljYW50KHBBZCk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKyAgICAgICAgICAgICAgICAgICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfQVNTT0NfRVZFTlRfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAgICAgICAgICAgICB3ZXh0X25vdGlmeV9ldmVudF9hc3NvYyhwQWQpOworCisgICAgICAgICAgICAgICAgICAgIG1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwQWQtPk1sbWVBdXguQnNzaWQsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJCQl9CisKKwkJCS8vCisJCQkvLyBDaXNjbyBMZWFwIENDS00gc3VwcG9ydGVkIFJlLWFzc29jaWF0aW9uLgorCQkJLy8KKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuQ0NLTUxpbmtVcEZsYWcgPT0gVFJVRSkpCisJCQl7CisJCQkJaWYgKENDS01Bc3NvY1JzcFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKSA9PSBUUlVFKQorCQkJCXsKKwkJCQkJcEFkLT5TdGFDZmcuQ2tpcEZsYWcgPSBDa2lwRmxhZzsKKwkJCQkJaWYgKENraXBGbGFnICYgMHgxOCkKKwkJCQkJeworCQkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuVHhTRVEsIDQpOworCQkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUnhTRVEsIDQpOworCQkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuQ0tJUE1JQywgNCk7CisJCQkJCQlwQWQtPlN0YUNmZy5HSVZbMF0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCQlwQWQtPlN0YUNmZy5HSVZbMV0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCQlwQWQtPlN0YUNmZy5HSVZbMl0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCQlwQWQtPlN0YUNmZy5iQ2tpcE9uID0gVFJVRTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjxDQ1g+IHBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gMHglMDJ4XG4iLCBwQWQtPlN0YUNmZy5Da2lwRmxhZykpOworCQkJCQl9CisKKwkJCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQkJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfUkVBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBDQ0tNQXNzb2NSc3BTYW5pdHkoKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCXsKKwkJCQkvLyBDa2lwRmxhZyBpcyBubyB1c2UgZm9yIHJlYXNzb2NpYXRlCisJCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gUGVlclJlYXNzb2NSc3BBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworCX0KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXByb2NlZHVyZXMgb24gSUVFRSA4MDIuMTEvMTk5OSBwLjM3NgorCVBhcmFtZXRyczoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc3NvY1Bvc3RQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwQWRkcjIsCisJSU4gVVNIT1JUIENhcGFiaWxpdHlJbmZvLAorCUlOIFVTSE9SVCBBaWQsCisJSU4gVUNIQVIgU3VwUmF0ZVtdLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gVUNIQVIgRXh0UmF0ZVtdLAorCUlOIFVDSEFSIEV4dFJhdGVMZW4sCisJSU4gUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJSU4gSFRfQ0FQQUJJTElUWV9JRQkJKnBIdENhcGFiaWxpdHksCisJSU4gVUNIQVIgSHRDYXBhYmlsaXR5TGVuLAorCUlOIEFERF9IVF9JTkZPX0lFCQkqcEFkZEh0SW5mbykJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCit7CisJVUxPTkcgSWR4OworCisJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBCU1NfSU5GUkE7CisJQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIHBBZGRyMik7CisJcEFkLT5NbG1lQXV4LkFpZCA9IEFpZDsKKwlwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbyAmIFNVUFBPUlRFRF9DQVBBQklMSVRZX0lORk87CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gU29tZSBIVCBBUCBtaWdodCBsb3N0IFdNTSBJRS4gV2UgYWRkIFdNTSBvdXJzZWx2ZXMuIGJlYWN1YXNlIEhUIHJlcXVpcmVzIFFvUyBvbi4KKwlpZiAoKEh0Q2FwYWJpbGl0eUxlbiA+IDApICYmIChwRWRjYVBhcm0tPmJWYWxpZCA9PSBGQUxTRSkpCisJeworCQlwRWRjYVBhcm0tPmJWYWxpZCA9IFRSVUU7CisJCXBFZGNhUGFybS0+QWlmc25bMF0gPSAzOworCQlwRWRjYVBhcm0tPkFpZnNuWzFdID0gNzsKKwkJcEVkY2FQYXJtLT5BaWZzblsyXSA9IDI7CisJCXBFZGNhUGFybS0+QWlmc25bM10gPSAyOworCisJCXBFZGNhUGFybS0+Q3dtaW5bMF0gPSA0OworCQlwRWRjYVBhcm0tPkN3bWluWzFdID0gNDsKKwkJcEVkY2FQYXJtLT5Dd21pblsyXSA9IDM7CisJCXBFZGNhUGFybS0+Q3dtaW5bM10gPSAyOworCisJCXBFZGNhUGFybS0+Q3dtYXhbMF0gPSAxMDsKKwkJcEVkY2FQYXJtLT5Dd21heFsxXSA9IDEwOworCQlwRWRjYVBhcm0tPkN3bWF4WzJdID0gNDsKKwkJcEVkY2FQYXJtLT5Dd21heFszXSA9IDM7CisKKwkJcEVkY2FQYXJtLT5UeG9wWzBdICA9IDA7CisJCXBFZGNhUGFybS0+VHhvcFsxXSAgPSAwOworCQlwRWRjYVBhcm0tPlR4b3BbMl0gID0gOTY7CisJCXBFZGNhUGFybS0+VHhvcFszXSAgPSA0ODsKKworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBFZGNhUGFybSwgcEVkY2FQYXJtLCBzaXplb2YoRURDQV9QQVJNKSk7CisKKwkvLyBmaWx0ZXIgb3V0IHVuLXN1cHBvcnRlZCByYXRlcworCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3VwUmF0ZSwgU3VwUmF0ZSwgU3VwUmF0ZUxlbik7CisJUlRNUENoZWNrUmF0ZXMocEFkLCBwQWQtPk1sbWVBdXguU3VwUmF0ZSwgJnBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuKTsKKworCS8vIGZpbHRlciBvdXQgdW4tc3VwcG9ydGVkIHJhdGVzCisJcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gPSBFeHRSYXRlTGVuOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5FeHRSYXRlLCBFeHRSYXRlLCBFeHRSYXRlTGVuKTsKKwlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5FeHRSYXRlLCAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4pOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKEh0Q2FwYWJpbGl0eUxlbiA+IDApCisJeworCQlSVE1QQ2hlY2tIdChwQWQsIEJTU0lEX1dDSUQsIHBIdENhcGFiaWxpdHksIHBBZGRIdEluZm8pOworCX0KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc3NvY1Bvc3RQcm9jPT09PiAgQVAuQU1zZHVTaXplID0gJWQuIENsaWVudFN0YXR1c0ZsYWdzID0gMHglbHggXG4iLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFNc2R1U2l6ZSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5DbGllbnRTdGF0dXNGbGFncykpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNzb2NQb3N0UHJvYz09PT4gICAgKE1tcHM9JWQsIEFtc2R1U2l6ZT0lZCwgKVxuIiwKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NbXBzTW9kZSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIFNldCBOZXcgV1BBIGluZm9ybWF0aW9uCisJSWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcEFkZHIyLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCk7CisJaWYgKElkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiQVNTT0MgLSBDYW4ndCBmaW5kIEJTUyBhZnRlciByZWNlaXZpbmcgQXNzb2MgcmVzcG9uc2VcbiIpKTsKKwl9CisJZWxzZQorCXsKKwkJLy8gSW5pdCB2YXJpYWJsZQorCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9IDA7CisJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBNQVhfTEVOX09GX1JTTklFKTsKKworCQkvLyBTdG9yZSBhcHByb3ByaWF0ZSBSU05fSUUgZm9yIFdQQSBTTSBuZWdvdGlhdGlvbiBsYXRlcgorCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgJiYgKHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlZhcklFTGVuICE9IDApKQorCQl7CisJCQlQVUNIQVIgICAgICAgICAgICAgIHBWSUU7CisJCQlVU0hPUlQgICAgICAgICAgICAgIGxlbjsKKwkJCVBFSURfU1RSVUNUICAgICAgICAgcEVpZDsKKworCQkJcFZJRSA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlZhcklFczsKKwkJCWxlbgkgPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5WYXJJRUxlbjsKKworCQkJd2hpbGUgKGxlbiA+IDApCisJCQl7CisJCQkJcEVpZCA9IChQRUlEX1NUUlVDVCkgcFZJRTsKKwkJCQkvLyBGb3IgV1BBL1dQQVBTSworCQkJCWlmICgocEVpZC0+RWlkID09IElFX1dQQSkgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkpCisJCQkJCSYmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEgfHwgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKKwkJCQl7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBwVklFLCAocEVpZC0+TGVuICsgMikpOworCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNzb2NQb3N0UHJvYz09PT4gU3RvcmUgUlNOX0lFIGZvciBXUEEgU00gbmVnb3RpYXRpb24gXG4iKSk7CisJCQkJfQorCQkJCS8vIEZvciBXUEEyL1dQQTJQU0sKKwkJCQllbHNlIGlmICgocEVpZC0+RWlkID09IElFX1JTTikgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKQorCQkJCQkmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMiB8fCBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKKwkJCQl7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBwVklFLCAocEVpZC0+TGVuICsgMikpOworCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNzb2NQb3N0UHJvYz09PT4gU3RvcmUgUlNOX0lFIGZvciBXUEEyIFNNIG5lZ290aWF0aW9uIFxuIikpOworCQkJCX0KKworCQkJCXBWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCWxlbiAgLT0gKHBFaWQtPkxlbiArIDIpOworCQkJfQorCQl9CisKKwkJaWYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOSUVfTGVuID09IDApCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzc29jUG9zdFByb2M9PT0+IG5vIFJTTl9JRSBcbiIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWhleF9kdW1wKCJSU05fSUUiLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4pOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWxlZnQgcGFydCBvZiBJRUVFIDgwMi4xMS8xOTk5IHAuMzc0CisJUGFyYW1ldGVyczoKKwkJRWxlbSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJEaXNhc3NvY0FjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCVVTSE9SVCAgICAgICAgUmVhc29uOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBQZWVyRGlzYXNzb2NBY3Rpb24oKVxuIikpOworCWlmKFBlZXJEaXNhc3NvY1Nhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJlJlYXNvbikpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFBlZXJEaXNhc3NvY0FjdGlvbigpIFJlYXNvbiA9ICVkXG4iLCBSZWFzb24pKTsKKwkJaWYgKElORlJBX09OKHBBZCkgJiYgTUFDX0FERFJfRVFVQUwocEFkLT5Db21tb25DZmcuQnNzaWQsIEFkZHIyKSkKKwkJeworCisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCQl7CisJCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfRElTQVNTT0NfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKwkJCX0KKworCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQlpZiAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKwkJCXsKKwkJCQkvLyBDaXNjb19MRUFQIGhhcyBzdGFydCBhIHRpbWVyCisJCQkJLy8gV2Ugc2hvdWxkIGNhbmNlbCBpdCBpZiB1c2luZyBMRUFQCisJCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5MZWFwQXV0aFRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJCS8vQ2hlY2sgaXMgaXQgbWFjaCB0aGUgTEVBUCBBdXRoZW50aWNhdGlvbiBmYWlsZWQgYXMgcG9zc2libGUgYSBSb2d1ZSBBUAorCQkJCS8vb24gaXQncyBQb3J0U2VjdXJlZCBub3QgZXF1YWwgdG8gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQgd2hpbGUgcHJvY2VzcyB0aGUgQXNzb2NpYXRpb24uCisJCQkJaWYgKChwQWQtPk1sbWUuTGVhcE1hY2hpbmUuQ3VyclN0YXRlICE9IExFQVBfSURMRSkgJiYgKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkICE9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKSkKKwkJCQl7CisJCQkJCVJvZ3VlQXBUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U3RhQ2ZnLlJvZ3VlQXBUYWIsIEFkZHIyLCBMRUFQX1JFQVNPTl9BVVRIX1RJTUVPVVQpOworCQkJCX0KKwkJCX0KKyNlbmRpZgkvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCS8vCisJCQkvLyBHZXQgQ3VycmVudCBTeXN0ZW0gdGltZSBhbmQgVHVybiBvbiBBZGphY2VudEFQUmVwb3J0CisJCQkvLworCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUExpbmtEb3duVGltZSk7CisJCQlwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQUmVwb3J0RmxhZyA9IFRSVUU7CisJCQlMaW5rRG93bihwQWQsIFRSVUUpOworCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorCQkJeworICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgICAgICAgICAvL3NlbmQgZGlzYXNzb2NpYXRlIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50CisgICAgICAgICAgICAgICAgbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworICAgICAgICAgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX0RJU0FTU09DX0VWRU5UX0ZMQUc7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAgICAgICAgIG1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJfQorCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFBlZXJEaXNhc3NvY0FjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisJfQorCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJd2hhdCB0aGUgc3RhdGUgbWFjaGluZSB3aWxsIGRvIGFmdGVyIGFzc29jIHRpbWVvdXQKKwlQYXJhbWV0ZXJzOgorCQlFbG1lIC0KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc3NvY1RpbWVvdXRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gQXNzb2NUaW1lb3V0QWN0aW9uXG4iKSk7CisJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCVN0YXR1cyA9IE1MTUVfUkVKX1RJTUVPVVQ7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXdoYXQgdGhlIHN0YXRlIG1hY2hpbmUgd2lsbCBkbyBhZnRlciByZWFzc29jIHRpbWVvdXQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBSZWFzc29jVGltZW91dEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBSZWFzc29jVGltZW91dEFjdGlvblxuIikpOworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1JFSl9USU1FT1VUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXdoYXQgdGhlIHN0YXRlIG1hY2hpbmUgd2lsbCBkbyBhZnRlciBkaXNhc3NvYyB0aW1lb3V0CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRGlzYXNzb2NUaW1lb3V0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgIFN0YXR1czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIERpc2Fzc29jVGltZW91dEFjdGlvblxuIikpOworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0RJU0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCitWT0lEIEludmFsaWRTdGF0ZVdoZW5Bc3NvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBJbnZhbGlkU3RhdGVXaGVuQXNzb2Moc3RhdGU9JWxkKSwgcmVzZXQgQVNTT0Mgc3RhdGUgbWFjaGluZVxuIiwKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKK1ZPSUQgSW52YWxpZFN0YXRlV2hlblJlYXNzb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYyhzdGF0ZT0lbGQpLCByZXNldCBBU1NPQyBzdGF0ZSBtYWNoaW5lXG4iLAorCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSkpOworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCitWT0lEIEludmFsaWRTdGF0ZVdoZW5EaXNhc3NvY2lhdGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2Moc3RhdGU9JWxkKSwgcmVzZXQgQVNTT0Mgc3RhdGUgbWFjaGluZVxuIiwKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfRElTQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJcmlnaHQgcGFydCBvZiBJRUVFIDgwMi4xMS8xOTk5IHBhZ2UgMzc0CisJTm90ZToKKwkJVGhpcyBldmVudCBzaG91bGQgbmV2ZXIgY2F1c2UgQVNTT0Mgc3RhdGUgbWFjaGluZSBwZXJmb3JtIHN0YXRlCisJCXRyYW5zaXRpb24sIGFuZCBoYXMgbm8gcmVsYXRpb25zaGlwIHdpdGggQ05UTCBtYWNoaW5lLiBTbyB3ZSBzZXBhcmF0ZQorCQl0aGlzIHJvdXRpbmUgYXMgYSBzZXJ2aWNlIG91dHNpZGUgb2YgQVNTT0Mgc3RhdGUgdHJhbnNpdGlvbiB0YWJsZS4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBDbHMzZXJyQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIpCit7CisJSEVBREVSXzgwMl8xMSAgICAgICAgIERpc2Fzc29jSGRyOworCVBIRUFERVJfODAyXzExICAgICAgICBwRGlzYXNzb2NIZHI7CisJUFVDSEFSICAgICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVVMT05HICAgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJTkRJU19TVEFUVVMgICAgICAgICAgIE5TdGF0dXM7CisJVVNIT1JUICAgICAgICAgICAgICAgIFJlYXNvbiA9IFJFQVNPTl9DTFMzRVJSOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIENsYXNzIDMgRXJyb3IsIFNlbmQgRElTQVNTT0MgZnJhbWVcbiIpKTsKKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkRpc2Fzc29jSGRyLCBTVUJUWVBFX0RJU0FTU09DLCAwLCBwQWRkciwgcEFkLT5Db21tb25DZmcuQnNzaWQpOwkvLyBwYXRjaCBwZWFwIHR0bHMgc3dpdGNoaW5nIGlzc3VlCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJICBzaXplb2YoSEVBREVSXzgwMl8xMSksJkRpc2Fzc29jSGRyLAorCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAmUmVhc29uLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKworCS8vIFRvIHBhdGNoIEluc3RhbmNlIGFuZCBCdWZmYWxvKE4pIEFQCisJLy8gRHJpdmVyIGhhcyB0byBzZW5kIGRlYXV0aCB0byBJbnN0YW5jZSBBUCwgYnV0IEJ1ZmZhbG8oTikgbmVlZHMgdG8gc2VuZCBkaXNhc3NvYyB0byByZXNldCBBdXRoZW50aWNhdG9yJ3Mgc3RhdGUgbWFjaGluZQorCS8vIFRoZXJlZm9yZSwgd2Ugc2VuZCBib3RoIG9mIHRoZW0uCisJcERpc2Fzc29jSGRyID0gKFBIRUFERVJfODAyXzExKXBPdXRCdWZmZXI7CisJcERpc2Fzc29jSGRyLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9ERUFVVEg7CisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJcEFkLT5TdGFDZmcuRGlzYXNzb2NSZWFzb24gPSBSRUFTT05fQ0xTM0VSUjsKKwlDT1BZX01BQ19BRERSKHBBZC0+U3RhQ2ZnLkRpc2Fzc29jU3RhLCBwQWRkcik7Cit9CisKKyAvKgorCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSBEZXNjcmlwdGlvbjoKKwkJIFN3aXRjaCBiZXR3ZWVuIFdFUCBhbmQgQ0tJUCB1cG9uIG5ldyBhc3NvY2lhdGlvbiB1cC4KKwkgUGFyYW1ldGVyczoKKworCSBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAqLworVk9JRCBTd2l0Y2hCZXR3ZWVuV2VwQW5kQ2tpcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlpbnQgICAgICAgICAgICBpOworCVNIQVJFREtFWV9NT0RFX1NUUlVDICBjc3IxOworCisJLy8gaWYgS1AgaXMgcmVxdWlyZWQuIGNoYW5nZSB0aGUgQ2lwaGVyQWxnIGluIGhhcmR3YXJlIHNoYXJkIGtleSB0YWJsZSBmcm9tIFdFUAorCS8vIHRvIENLSVAuIGVsc2UgcmVtYWluIGFzIFdFUAorCWlmIChwQWQtPlN0YUNmZy5iQ2tpcE9uICYmIChwQWQtPlN0YUNmZy5Da2lwRmxhZyAmIDB4MTApKQorCXsKKwkJLy8gbW9kaWZ5IGhhcmR3YXJlIGtleSB0YWJsZSBzbyB0aGF0IE1BQyB1c2UgY29ycmVjdCBhbGdvcml0aG0gdG8gZGVjcnlwdCBSWAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFLCAmY3NyMS53b3JkKTsKKwkJaWYgKGNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9IENJUEhFUl9DS0lQNjQ7CisJCWVsc2UgaWYgKGNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDEyODsKKworCQlpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9PSBDSVBIRVJfV0VQNjQpCisJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVA2NDsKKwkJZWxzZSBpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9PSBDSVBIRVJfV0VQMTI4KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9IENJUEhFUl9DS0lQMTI4OworCisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID09IENJUEhFUl9XRVA2NCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID09IENJUEhFUl9XRVAxMjgpCisJCQljc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVAxMjg7CisKKwkJaWYgKGNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENJUEhFUl9DS0lQNjQ7CisJCWVsc2UgaWYgKGNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDEyODsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UsIGNzcjEud29yZCk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN3aXRjaEJldHdlZW5XZXBBbmRDa2lwOiBtb2RpZnkgQlNTMCBjaXBoZXIgdG8gJXNcbiIsIENpcGhlck5hbWVbY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZ10pKTsKKworCQkvLyBtb2RpZnkgc29mdHdhcmUga2V5IHRhYmxlIHNvIHRoYXQgZHJpdmVyIGNhbiBzcGVjaWZ5IGNvcnJlY3QgYWxnb3JpdGhtIGluIFRYRCB1cG9uIFRYCisJCWZvciAoaT0wOyBpPFNIQVJFX0tFWV9OVU07IGkrKykKKwkJeworCQkJaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9PSBDSVBIRVJfV0VQNjQpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVA2NDsKKwkJCWVsc2UgaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9PSBDSVBIRVJfV0VQMTI4KQorCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9DS0lQMTI4OworCQl9CisJfQorCisJLy8gZWxzZSBpZiBLUCBOT1QgaW51c2VkLiBjaGFuZ2UgdGhlIENpcGhlckFsZyBpbiBoYXJkd2FyZSBzaGFyZCBrZXkgdGFibGUgZnJvbSBDS0lQCisJLy8gdG8gV0VQLgorCWVsc2UKKwl7CisJCS8vIG1vZGlmeSBoYXJkd2FyZSBrZXkgdGFibGUgc28gdGhhdCBNQUMgdXNlIGNvcnJlY3QgYWxnb3JpdGhtIHRvIGRlY3J5cHQgUlgKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSwgJmNzcjEud29yZCk7CisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQNjQpCisJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQMTI4KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisKKwkJaWYgKGNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVA2NCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCWVsc2UgaWYgKGNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVAxMjgpCisJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKworCQlpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9PSBDSVBIRVJfQ0tJUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJZWxzZSBpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9PSBDSVBIRVJfQ0tJUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworCisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQNjQpCisJCQljc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQMTI4KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisKKwkJLy8gbW9kaWZ5IHNvZnR3YXJlIGtleSB0YWJsZSBzbyB0aGF0IGRyaXZlciBjYW4gc3BlY2lmeSBjb3JyZWN0IGFsZ29yaXRobSBpbiBUWEQgdXBvbiBUWAorCQlmb3IgKGk9MDsgaTxTSEFSRV9LRVlfTlVNOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVA2NCkKKwkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCQllbHNlIGlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVAxMjgpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKwkJfQorCisJCS8vCisJCS8vIE9uIFdQQS1OT05FLCBtdXN0IHVwZGF0ZSBDaXBoZXJBbGcuCisJCS8vIEJlY2F1c2UgdGhlIE9JRF84MDJfMTFfV0VQX1NUQVRVUyB3YXMgYmVlbiBzZXQgYWZ0ZXIgT0lEXzgwMl8xMV9BRERfS0VZCisJCS8vIGFuZCBDaXBoZXJBbGcgd2lsbCBiZSBDSVBIRVJfTk9ORSBieSBXaW5kb3dzIFplcm9Db25maWcuCisJCS8vIFNvIHdlIG5lZWQgdG8gdXBkYXRlIENpcGhlckFsZyBhZnRlciBjb25uZWN0LgorCQkvLworCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJeworCQkJZm9yIChpID0gMDsgaSA8IFNIQVJFX0tFWV9OVU07IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uS2V5TGVuICE9IDApCisJCQkJeworCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCQkJCXsKKwkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJCQl7CisJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQkJCX0KKwkJCX0KKworCQkJY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZzsKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVsxXS5DaXBoZXJBbGc7CisJCQljc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMl0uQ2lwaGVyQWxnOworCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdWzNdLkNpcGhlckFsZzsKKwkJfQorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSwgY3NyMS53b3JkKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQmV0d2VlbldlcEFuZENraXA6IG1vZGlmeSBCU1MwIGNpcGhlciB0byAlc1xuIiwgQ2lwaGVyTmFtZVtjc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnXSkpOworCX0KK30KKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKK1ZPSUQgICAgU2VuZEFzc29jSUVzVG9XcGFTdXBwbGljYW50KAorICAgIElOICBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgdW5zaWduZWQgY2hhciBjdXN0b21bSVdfQ1VTVE9NX01BWF0gPSB7MH07CisKKyAgICBpZiAoKHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuICsgMTcpIDw9IElXX0NVU1RPTV9NQVgpCisgICAgeworICAgICAgICBzcHJpbnRmKGN1c3RvbSwgIkFTU09DSU5GT19SZXFJRXM9Iik7CisJICAgIE5kaXNNb3ZlTWVtb3J5KGN1c3RvbSsxNywgcEFkLT5TdGFDZmcuUmVxVmFySUVzLCBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbik7CisJICAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKyAgICAgICAgd3JxdS5kYXRhLmxlbmd0aCA9IHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuICsgMTc7CisgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX1JFUUlFX0VWRU5UX0ZMQUc7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgY3VzdG9tKTsKKworICAgICAgICBtZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX0FTU09DSU5GT19FVkVOVF9GTEFHOworICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuICsgMTcgPiBNQVhfQ1VTVE9NX0xFTlxuIikpOworCisgICAgcmV0dXJuOworfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKK2ludCB3ZXh0X25vdGlmeV9ldmVudF9hc3NvYygKKwlJTiAgUlRNUF9BREFQVEVSICpwQWQpCit7CisgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgIGNoYXIgY3VzdG9tW0lXX0NVU1RPTV9NQVhdID0gezB9OworCisjaWYgV0lSRUxFU1NfRVhUID4gMTcKKyAgICBpZiAocEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPD0gSVdfQ1VTVE9NX01BWCkKKyAgICB7CisgICAgICAgIHdycXUuZGF0YS5sZW5ndGggPSBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbjsKKyAgICAgICAgbWVtY3B5KGN1c3RvbSwgcEFkLT5TdGFDZmcuUmVxVmFySUVzLCBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbik7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQVNTT0NSRVFJRSwgJndycXUsIGN1c3RvbSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgicEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPiBNQVhfQ1VTVE9NX0xFTlxuIikpOworI2Vsc2UKKyAgICBpZiAoKChwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbioyKSArIDE3KSA8PSBJV19DVVNUT01fTUFYKQorICAgIHsKKyAgICAgICAgVUNIQVIgICBpZHg7CisgICAgICAgIHdycXUuZGF0YS5sZW5ndGggPSAocEFkLT5TdGFDZmcuUmVxVmFySUVMZW4qMikgKyAxNzsKKyAgICAgICAgc3ByaW50ZihjdXN0b20sICJBU1NPQ0lORk8oUmVxSUVzPSIpOworICAgICAgICBmb3IgKGlkeD0wOyBpZHg8cEFkLT5TdGFDZmcuUmVxVmFySUVMZW47IGlkeCsrKQorICAgICAgICAgICAgICAgIHNwcmludGYoY3VzdG9tLCAiJXMlMDJ4IiwgY3VzdG9tLCBwQWQtPlN0YUNmZy5SZXFWYXJJRXNbaWR4XSk7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgY3VzdG9tKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIocEFkLT5TdGFDZmcuUmVxVmFySUVMZW4qMikgKyAxNyA+IE1BWF9DVVNUT01fTEVOXG4iKSk7CisjZW5kaWYKKworCXJldHVybiAwOworCit9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCitCT09MRUFOIFN0YUFkZE1hY1RhYmxlRW50cnkoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUE1BQ19UQUJMRV9FTlRSWQlwRW50cnksCisJSU4gIFVDSEFSCQkJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMsCisJSU4gIEhUX0NBUEFCSUxJVFlfSUUJKnBIdENhcGFiaWxpdHksCisJSU4gIFVDSEFSCQkJCUh0Q2FwYWJpbGl0eUxlbiwKKwlJTiAgVVNIT1JUICAgICAgICAJCUNhcGFiaWxpdHlJbmZvKQoreworCVVDSEFSICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7CisKKwlpZiAoQURIT0NfT04ocEFkKSkKKwkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOworCisJc3dpdGNoIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzKQorICAgIHsKKyAgICAgICAgY2FzZSAxMDg6IE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzU0OyAgIGJyZWFrOworICAgICAgICBjYXNlIDk2OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNDg7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8zNjsgICBicmVhazsKKyAgICAgICAgY2FzZSA0ODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI0OyAgIGJyZWFrOworICAgICAgICBjYXNlIDM2OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTg7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjQ6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMjsgICBicmVhazsKKyAgICAgICAgY2FzZSAxODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzk7ICAgIGJyZWFrOworICAgICAgICBjYXNlIDEyOiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsgICBicmVhazsKKyAgICAgICAgY2FzZSAxMTogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzVfNTsgIGJyZWFrOworICAgICAgICBjYXNlIDQ6ICAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xOyAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworICAgIH0KKworICAgIGlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFHKSAmJiAoTWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gMTFuIG9ubHkKKwlpZiAoKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fMl80RykgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl81RykpJiYgKEh0Q2FwYWJpbGl0eUxlbiA9PSAwKSkKKwkJcmV0dXJuIEZBTFNFOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJaWYgKCFwRW50cnkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisJaWYgKHBFbnRyeSkKKwl7CisJCXBFbnRyeS0+UG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJaWYgKChNYXhTdXBwb3J0ZWRSYXRlIDwgUkFURV9GSVJTVF9PRkRNX1JBVEUpIHx8CisJCQkocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKSkKKwkJeworCQkJcEVudHJ5LT5SYXRlTGVuID0gNDsKKwkJCWlmIChNYXhTdXBwb3J0ZWRSYXRlID49IFJBVEVfRklSU1RfT0ZETV9SQVRFKQorCQkJCU1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOworCQl9CisJCWVsc2UKKwkJCXBFbnRyeS0+UmF0ZUxlbiA9IDEyOworCisJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQgPSAwOworCQlwRW50cnktPk1pbkhUUGh5TW9kZS53b3JkID0gMDsKKwkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IDA7CisJCXBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA9IE1heFN1cHBvcnRlZFJhdGU7CisJCWlmIChwRW50cnktPk1heFN1cHBvcnRlZFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkKKwkJeworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQl9CisJCWVsc2UKKwkJeworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQl9CisJCXBFbnRyeS0+Q2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbzsKKwkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSk7CisJCUNMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1BJR0dZQkFDS19DQVBBQkxFKTsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBJZiB0aGlzIEVudHJ5IHN1cHBvcnRzIDgwMi4xMW4sIHVwZ3JhZGUgdG8gSFQgcmF0ZS4KKwlpZiAoKEh0Q2FwYWJpbGl0eUxlbiAhPSAwKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwl7CisJCVVDSEFSCWosIGJpdG1hc2s7IC8vayxiaXRtYXNrOworCQlDSEFSICAgIGk7CisKKwkJaWYgKEFESE9DX09OKHBBZCkpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOworCQlpZiAoKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCXsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUR1JFRU5GSUVMRDsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJcEFkLT5NYWNUYWIuZkFueVN0YXRpb25Ob25HRiA9IFRSVUU7CisJCQlwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPSAxOworCQl9CisKKwkJaWYgKChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQ2hhbm5lbFdpZHRoKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCkpCisJCXsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXPSBCV180MDsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDApJihwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9ICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCkmKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApKTsKKwkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uMjBPbmx5ID0gVFJVRTsKKwkJfQorCisJCS8vIDMqMworCQlpZiAocEFkLT5NQUNWZXJzaW9uID49IFJBTElOS18yODgzX1ZFUlNJT04gJiYgcEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzMwNzBfVkVSU0lPTikKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlR4QkYgPSBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuVHhCRjsKKworCQkvLyBmaW5kIG1heCBmaXhlZCByYXRlCisJCWZvciAoaT0yMzsgaT49MDsgaS0tKSAvLyAzKjMKKwkJeworCQkJaiA9IGkvODsKKwkJCWJpdG1hc2sgPSAoMTw8KGktKGoqOCkpKTsKKwkJCWlmICgocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0gJiBiaXRtYXNrKSAmJiAocEh0Q2FwYWJpbGl0eS0+TUNTU2V0W2pdICYgYml0bWFzaykpCisJCQl7CisJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpPT0wKQorCQkJCWJyZWFrOworCQl9CisKKworCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgIT0gTUNTX0FVVE8pCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9PSAzMikKKwkJCXsKKwkJCQkvLyBGaXggTUNTIGFzIEhUIER1cGxpY2F0ZWQgTW9kZQorCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gMTsKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gMDsKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gMDsKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSAzMjsKKwkJCX0KKwkJCWVsc2UgaWYgKHBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA+IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MpCisJCQl7CisJCQkJLy8gU1RBIHN1cHBvcnRzIGZpeGVkIE1DUworCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQl9CisJCX0KKworCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5SeFNUQkMgJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykpOworCQlwRW50cnktPk1wZHVEZW5zaXR5ID0gcEh0Q2FwYWJpbGl0eS0+SHRDYXBQYXJtLk1wZHVEZW5zaXR5OworCQlwRW50cnktPk1heFJBbXBkdUZhY3RvciA9IHBIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3I7CisJCXBFbnRyeS0+TW1wc01vZGUgPSAoVUNIQVIpcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLk1pbW9QczsKKwkJcEVudHJ5LT5BTXNkdVNpemUgPSAoVUNIQVIpcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkFNc2R1U2l6ZTsKKwkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdUVuYWJsZSAmJiAocEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9PSBGQUxTRSkpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfQU1TRFVfSU5VU0VEKTsKKwkJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpOworCQlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlR4U1RCQykKKwkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRSk7CisJCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwkJaWYgKHBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mby5QbHVzSFRDKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0hUQ19DQVBBQkxFKTsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgJiYgcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlJER1N1cHBvcnQpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpOworCQlpZiAocEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLk1DU0ZlZWRiYWNrID09IDB4MDMpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSk7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uSXNMZWdhY3kgPSBUUlVFOworCX0KKworCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPkhUQ2FwYWJpbGl0eSwgcEh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkOworCXBFbnRyeS0+Q3VyclR4UmF0ZSA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKworCS8vIFNldCBhc2ljIGF1dG8gZmFsbCBiYWNrCisJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID09IFRSVUUpCisJeworCQlQVUNIQVIJCQkJCXBUYWJsZTsKKwkJVUNIQVIJCQkJCVRhYmxlU2l6ZSA9IDA7CisKKwkJTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKHBBZCwgcEVudHJ5LCAmcFRhYmxlLCAmVGFibGVTaXplLCAmcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXgpOworCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisKKwkJLy8gSWYgdGhlIGxlZ2FjeSBtb2RlIGlzIHNldCwgb3ZlcndyaXRlIHRoZSB0cmFuc21pdCBzZXR0aW5nIG9mIHRoaXMgZW50cnkuCisJCVJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGUsIHBFbnRyeSk7CisJfQorCisJcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCXBFbnRyeS0+U3N0ID0gU1NUX0FTU09DOworCXBFbnRyeS0+QXV0aFN0YXRlID0gQVNfQVVUSF9PUEVOOworCXBFbnRyeS0+QXV0aE1vZGUgPSBwQWQtPlN0YUNmZy5BdXRoTW9kZTsKKwlwRW50cnktPldlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCkKKyAgICB7CisgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKworICAgICAgICBTZW5kQXNzb2NJRXNUb1dwYVN1cHBsaWNhbnQocEFkKTsKKyAgICAgICAgbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworICAgICAgICB3cnF1LmRhdGEuZmxhZ3MgPSBSVF9BU1NPQ19FVkVOVF9GTEFHOworICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOworICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgeworICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgICAgIHdleHRfbm90aWZ5X2V2ZW50X2Fzc29jKHBBZCk7CisKKyAgICAgICAgbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBNQUNfQUREUl9MRU4pOworICAgICAgICBtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCisgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJcmV0dXJuIFRSVUU7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMmI1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9hdXRoLmMKQEAgLTAsMCArMSw0NzUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJYXV0aC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obgkJMjAwNC05LTMJCXBvcnRpbmcgZnJvbSBSVDI1MDAKKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgYXV0aGVudGljYXRlIHN0YXRlIG1hY2hpbmUgaW5pdCwgaW5jbHVkaW5nIHN0YXRlIHRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBTbSAtIHBvaW50ZXIgdG8gdGhlIGF1dGggc3RhdGUgbWFjaGluZQorICAgIE5vdGU6CisgICAgICAgIFRoZSBzdGF0ZSBtYWNoaW5lIGxvb2tzIGxpa2UgdGhpcworCisgICAgICAgICAgICAgICAgICAgICAgICBBVVRIX1JFUV9JRExFICAgICAgICAgICBBVVRIX1dBSVRfU0VRMiAgICAgICAgICAgICAgICAgICBBVVRIX1dBSVRfU0VRNAorICAgIE1UMl9NTE1FX0FVVEhfUkVRICAgbWxtZV9hdXRoX3JlcV9hY3Rpb24gICAgaW52YWxpZF9zdGF0ZV93aGVuX2F1dGggICAgICAgICAgaW52YWxpZF9zdGF0ZV93aGVuX2F1dGgKKyAgICBNVDJfUEVFUl9BVVRIX0VWRU4gIGRyb3AgICAgICAgICAgICAgICAgICAgIHBlZXJfYXV0aF9ldmVuX2F0X3NlcTJfYWN0aW9uICAgIHBlZXJfYXV0aF9ldmVuX2F0X3NlcTRfYWN0aW9uCisgICAgTVQyX0FVVEhfVElNRU9VVCAgICBEcm9wICAgICAgICAgICAgICAgICAgICBhdXRoX3RpbWVvdXRfYWN0aW9uICAgICAgICAgICAgICBhdXRoX3RpbWVvdXRfYWN0aW9uCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCit2b2lkIEF1dGhTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFNUQVRFX01BQ0hJTkUgKlNtLAorICAgIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKyAgICBTdGF0ZU1hY2hpbmVJbml0KFNtLCBUcmFucywgTUFYX0FVVEhfU1RBVEUsIE1BWF9BVVRIX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBBVVRIX1JFUV9JRExFLCBBVVRIX01BQ0hJTkVfQkFTRSk7CisKKyAgICAvLyB0aGUgZmlyc3QgY29sdW1uCisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBBVVRIX1JFUV9JRExFLCBNVDJfTUxNRV9BVVRIX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lQXV0aFJlcUFjdGlvbik7CisKKyAgICAvLyB0aGUgc2Vjb25kIGNvbHVtbgorICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9XQUlUX1NFUTIsIE1UMl9NTE1FX0FVVEhfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5BdXRoKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVEyLCBNVDJfUEVFUl9BVVRIX0VWRU4sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckF1dGhSc3BBdFNlcTJBY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9XQUlUX1NFUTIsIE1UMl9BVVRIX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQXV0aFRpbWVvdXRBY3Rpb24pOworCisgICAgLy8gdGhlIHRoaXJkIGNvbHVtbgorICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9XQUlUX1NFUTQsIE1UMl9NTE1FX0FVVEhfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5BdXRoKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVE0LCBNVDJfUEVFUl9BVVRIX0VWRU4sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckF1dGhSc3BBdFNlcTRBY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9XQUlUX1NFUTQsIE1UMl9BVVRIX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQXV0aFRpbWVvdXRBY3Rpb24pOworCisJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQXV0aFRpbWVvdXQpLCBwQWQsIEZBTFNFKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhdCB0aW1lciB0aHJlYWQgd2hlbiBhdXRoIHRpbWVyIGV4cGlyZXMKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBdXRoVGltZW91dCgKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisgICAgUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBVVRIIC0gQXV0aFRpbWVvdXRcbiIpKTsKKworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJCXJldHVybjsKKworCS8vIHNlbmQgYSBkZS1hdXRoIHRvIHJlc2V0IEFQJ3Mgc3RhdGUgbWFjaGluZSAoUGF0Y2ggQVAtRGlyNjM1KQorCWlmIChwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID09IEFVVEhfV0FJVF9TRVEyKQorCQlDbHMyZXJyQWN0aW9uKHBBZCwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKworCisgICAgTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX1RJTUVPVVQsIDAsIE5VTEwpOworICAgIFJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUF1dGhSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworICAgIFVDSEFSICAgICAgICAgICAgICBBZGRyWzZdOworICAgIFVTSE9SVCAgICAgICAgICAgICBBbGcsIFNlcSwgU3RhdHVzOworICAgIFVMT05HICAgICAgICAgICAgICBUaW1lb3V0OworICAgIEhFQURFUl84MDJfMTEgICAgICBBdXRoSGRyOworICAgIEJPT0xFQU4gICAgICAgICAgICBUaW1lckNhbmNlbGxlZDsKKyAgICBORElTX1NUQVRVUyAgICAgICAgTlN0YXR1czsKKyAgICBQVUNIQVIgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisgICAgVUxPTkcgICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKworCS8vIEJsb2NrIGFsbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGR1cm5pbmcgV1BBIGJsb2NrIHBlcmlvZAorCWlmIChwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9PSBUUlVFKQorCXsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIEJsb2NrIEF1dGggcmVxdWVzdCBkdXJuaW5nIFdQQSBibG9jayBwZXJpb2QhXG4iKSk7CisgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgICAgICBTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOworICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKwl9CisgICAgZWxzZSBpZihNbG1lQXV0aFJlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyLCAmVGltZW91dCwgJkFsZykpCisgICAgeworICAgICAgICAvLyByZXNldCB0aW1lcgorICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5BdXRoVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisgICAgICAgIENPUFlfTUFDX0FERFIocEFkLT5NbG1lQXV4LkJzc2lkLCBBZGRyKTsKKyAgICAgICAgcEFkLT5NbG1lQXV4LkFsZyAgPSBBbGc7CisgICAgICAgIFNlcSA9IDE7CisgICAgICAgIFN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKworICAgICAgICBOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorICAgICAgICBpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBNbG1lQXV0aFJlcUFjdGlvbihBbGc6JWQpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWRcbiIsIEFsZykpOworICAgICAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7CisgICAgICAgICAgICBTdGF0dXMgPSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0U7CisgICAgICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBTZW5kIEFVVEggcmVxdWVzdCBzZXEjMSAoQWxnPSVkKS4uLlxuIiwgQWxnKSk7CisgICAgICAgIE1ndE1hY0hlYWRlckluaXQocEFkLCAmQXV0aEhkciwgU1VCVFlQRV9BVVRILCAwLCBBZGRyLCBwQWQtPk1sbWVBdXguQnNzaWQpOworICAgICAgICBNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSEVBREVSXzgwMl8xMSksJkF1dGhIZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAmQWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgJlNlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICZTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICAgICAgTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisgICAgCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKyAgICAgICAgUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCBUaW1lb3V0KTsKKyAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfV0FJVF9TRVEyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEQkdQUklOVF9FUlIoKCJBVVRIIC0gTWxtZUF1dGhSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbGVkXG4iKSk7CisgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgICAgICBTdGF0dXMgPSBNTE1FX0lOVkFMSURfRk9STUFUOworICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKyAgICB9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyQXV0aFJzcEF0U2VxMkFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgICAgU2VxLCBTdGF0dXMsIFJlbW90ZVN0YXR1cywgQWxnOworICAgIFVDSEFSICAgICAgICAgQ2hsZ1RleHRbQ0lQSEVSX1RFWFRfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgIEN5cGVyQ2hsZ1RleHRbQ0lQSEVSX1RFWFRfTEVOICsgOCArIDhdOworICAgIFVDSEFSICAgICAgICAgRWxlbWVudFsyXTsKKyAgICBIRUFERVJfODAyXzExIEF1dGhIZHI7CisgICAgQk9PTEVBTiAgICAgICBUaW1lckNhbmNlbGxlZDsKKyAgICBQVUNIQVIgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworICAgIE5ESVNfU1RBVFVTICAgTlN0YXR1czsKKyAgICBVTE9ORyAgICAgICAgIEZyYW1lTGVuID0gMDsKKyAgICBVU0hPUlQgICAgICAgIFN0YXR1czI7CisKKyAgICBpZiAoUGVlckF1dGhTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsICZBbGcsICZTZXEsICZTdGF0dXMsIENobGdUZXh0KSkKKyAgICB7CisgICAgICAgIGlmIChNQUNfQUREUl9FUVVBTChwQWQtPk1sbWVBdXguQnNzaWQsIEFkZHIyKSAmJiBTZXEgPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFJlY2VpdmUgQVVUSF9SU1Agc2VxIzIgdG8gbWUgKEFsZz0lZCwgU3RhdHVzPSVkKVxuIiwgQWxnLCBTdGF0dXMpKTsKKyAgICAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworICAgICAgICAgICAgaWYgKFN0YXR1cyA9PSBNTE1FX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQXV0aGVudGljYXRpb24gTW9kZSAiTEVBUCIgaGFzIGFsbG93IGZvciBDQ1ggMS5YCisgICAgICAgICAgICAgICAgaWYgKChwQWQtPk1sbWVBdXguQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkJCXx8IChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJCSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworI2lmZGVmIExFQVBfU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICBwQWQtPk1sbWUuTGVhcE1hY2hpbmUuQ3VyclN0YXRlID0gTEVBUF9JRExFOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworICAgICAgICAgICAgICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMi4gc2hhcmVkIGtleSwgbmVlZCB0byBiZSBjaGFsbGVuZ2VkCisgICAgICAgICAgICAgICAgICAgIFNlcSsrOworICAgICAgICAgICAgICAgICAgICBSZW1vdGVTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7CisKKwkJCQkJLy8gR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gUGVlckF1dGhSc3BBdFNlcTJBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbFxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMyID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworICAgICAgICAgICAgICAgICAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1czIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFNlbmQgQVVUSCByZXF1ZXN0IHNlcSMzLi4uXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIE1ndE1hY0hlYWRlckluaXQocEFkLCAmQXV0aEhkciwgU1VCVFlQRV9BVVRILCAwLCBBZGRyMiwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKyAgICAgICAgICAgICAgICAgICAgQXV0aEhkci5GQy5XZXAgPSAxOworICAgICAgICAgICAgICAgICAgICAvLyBFbmNyeXB0IGNoYWxsZW5nZSB0ZXh0ICYgYXV0aCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBSVE1QSW5pdFdlcEVuZ2luZSgKKyAgICAgICAgICAgICAgICAgICAgCXBBZCwKKyAgICAgICAgICAgICAgICAgICAgCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LAorICAgICAgICAgICAgICAgICAgICAJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorICAgICAgICAgICAgICAgICAgICAJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4sCisgICAgICAgICAgICAgICAgICAgIAlDeXBlckNobGdUZXh0KTsKKworCQkJCQlBbGcgPSBjcHUybGUxNigqKFVTSE9SVCAqKSZBbGcpOworCQkJCQlTZXEgPSBjcHUybGUxNigqKFVTSE9SVCAqKSZTZXEpOworCQkJCQlSZW1vdGVTdGF0dXM9IGNwdTJsZTE2KCooVVNIT1JUICopJlJlbW90ZVN0YXR1cyk7CisKKwkJCQkJUlRNUEVuY3J5cHREYXRhKHBBZCwgKFBVQ0hBUikgJkFsZywgQ3lwZXJDaGxnVGV4dCArIDQsIDIpOworCQkJCQlSVE1QRW5jcnlwdERhdGEocEFkLCAoUFVDSEFSKSAmU2VxLCBDeXBlckNobGdUZXh0ICsgNiwgMik7CisJCQkJCVJUTVBFbmNyeXB0RGF0YShwQWQsIChQVUNIQVIpICZSZW1vdGVTdGF0dXMsIEN5cGVyQ2hsZ1RleHQgKyA4LCAyKTsKKwkJCQkJRWxlbWVudFswXSA9IDE2OworCQkJCQlFbGVtZW50WzFdID0gMTI4OworCQkJCQlSVE1QRW5jcnlwdERhdGEocEFkLCBFbGVtZW50LCBDeXBlckNobGdUZXh0ICsgMTAsIDIpOworCQkJCQlSVE1QRW5jcnlwdERhdGEocEFkLCBDaGxnVGV4dCwgQ3lwZXJDaGxnVGV4dCArIDEyLCAxMjgpOworCQkJCQlSVE1QU2V0SUNWKHBBZCwgQ3lwZXJDaGxnVGV4dCArIDE0MCk7CisgICAgICAgICAgICAgICAgICAgIE1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSEVBREVSXzgwMl8xMSksICAgICZBdXRoSGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSVBIRVJfVEVYVF9MRU4gKyAxNiwgICAgIEN5cGVyQ2hsZ1RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICAgICAgICAgICAgICAgICAgTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisgICAgICAgICAgICAgICAgCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICAgICAgUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCBBVVRIX1RJTUVPVVQpOworICAgICAgICAgICAgICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9XQUlUX1NFUTQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworI2lmZGVmIExFQVBfU1VQUE9SVAorICAgICAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy9JbnZhbGlkIEF1dGhlbnRpY2F0aW9uIHBvc3NpYmxlIHJvZ3VlIEFQCisgICAgICAgICAgICAgICAgICAgIC8vQWRkIHRoaXMgQXAgdG8gUm9ndWUgQVAuCisgICAgICAgICAgICAgICAgICAgIFJvZ3VlQXBUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U3RhQ2ZnLlJvZ3VlQXBUYWIsIEFkZHIyLCBMRUFQX1JFQVNPTl9JTlZBTElEX0FVVEgpOworCQkJCX0KKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICBwQWQtPlN0YUNmZy5BdXRoRmFpbFJlYXNvbiA9IFN0YXR1czsKKyAgICAgICAgICAgICAgICBDT1BZX01BQ19BRERSKHBBZC0+U3RhQ2ZnLkF1dGhGYWlsU3RhLCBBZGRyMik7CisgICAgICAgICAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7CisgICAgICAgICAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFBlZXJBdXRoU2FuaXR5KCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKKyAgICB9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyQXV0aFJzcEF0U2VxNEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgICAgQWxnLCBTZXEsIFN0YXR1czsKKyAgICBDSEFSICAgICAgICAgIENobGdUZXh0W0NJUEhFUl9URVhUX0xFTl07CisgICAgQk9PTEVBTiAgICAgICBUaW1lckNhbmNlbGxlZDsKKworICAgIGlmKFBlZXJBdXRoU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFkZHIyLCAmQWxnLCAmU2VxLCAmU3RhdHVzLCBDaGxnVGV4dCkpCisgICAgeworICAgICAgICBpZihNQUNfQUREUl9FUVVBTChwQWQtPk1sbWVBdXguQnNzaWQsIEFkZHIyKSAmJiBTZXEgPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFJlY2VpdmUgQVVUSF9SU1Agc2VxIzQgdG8gbWVcbiIpKTsKKyAgICAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworICAgICAgICAgICAgaWYgKFN0YXR1cyAhPSBNTE1FX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuQXV0aEZhaWxSZWFzb24gPSBTdGF0dXM7CisgICAgICAgICAgICAgICAgQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5BdXRoRmFpbFN0YSwgQWRkcjIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICAgICAgICAgIE1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX0NPTkYsIDIsICZTdGF0dXMpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBQZWVyQXV0aFJzcEF0U2VxNEFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisgICAgfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZURlYXV0aFJlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCAqcEluZm87CisgICAgSEVBREVSXzgwMl8xMSBEZWF1dGhIZHI7CisgICAgUFVDSEFSICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKyAgICBORElTX1NUQVRVUyAgIE5TdGF0dXM7CisgICAgVUxPTkcgICAgICAgICBGcmFtZUxlbiA9IDA7CisgICAgVVNIT1JUICAgICAgICBTdGF0dXM7CisKKyAgICBwSW5mbyA9IChNTE1FX0RFQVVUSF9SRVFfU1RSVUNUICopRWxlbS0+TXNnOworCisgICAgTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKyAgICBpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIE1sbWVEZWF1dGhSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbFxuIikpOworICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICAgICAgU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfREVBVVRIX0NPTkYsIDIsICZTdGF0dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gU2VuZCBERS1BVVRIIHJlcXVlc3QgKFJlYXNvbj0lZCkuLi5cbiIsIHBJbmZvLT5SZWFzb24pKTsKKyAgICBNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkRlYXV0aEhkciwgU1VCVFlQRV9ERUFVVEgsIDAsIHBJbmZvLT5BZGRyLCBwQWQtPk1sbWVBdXguQnNzaWQpOworICAgIE1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCZEZWF1dGhIZHIsCisgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICZwSW5mby0+UmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICBNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisgICAgcEFkLT5TdGFDZmcuRGVhdXRoUmVhc29uID0gcEluZm8tPlJlYXNvbjsKKyAgICBDT1BZX01BQ19BRERSKHBBZC0+U3RhQ2ZnLkRlYXV0aFN0YSwgcEluZm8tPkFkZHIpOworICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgIFN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKyAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfREVBVVRIX0NPTkYsIDIsICZTdGF0dXMpOworCisJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBkZWF1dGhlbnRpY2F0aW9uCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19ERUFVVEhfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEF1dGhUaW1lb3V0QWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKyAgICBVU0hPUlQgU3RhdHVzOworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBBdXRoVGltZW91dEFjdGlvblxuIikpOworICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgIFN0YXR1cyA9IE1MTUVfUkVKX1RJTUVPVVQ7CisgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBJbnZhbGlkU3RhdGVXaGVuQXV0aCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgVVNIT1JUIFN0YXR1czsKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gSW52YWxpZFN0YXRlV2hlbkF1dGggKHN0YXRlPSVsZCksIHJlc2V0IEFVVEggc3RhdGUgbWFjaGluZVxuIiwgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSkpOworICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgIFN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU29tZSBTVEEvQVAKKyAgICBOb3RlOgorICAgICAgICBUaGlzIGFjdGlvbiBzaG91bGQgbmV2ZXIgdHJpZ2dlciBBVVRIIHN0YXRlIHRyYW5zaXRpb24sIHRoZXJlZm9yZSB3ZQorICAgICAgICBzZXBhcmF0ZSBpdCBmcm9tIEFVVEggc3RhdGUgbWFjaGluZSwgYW5kIG1ha2UgaXQgYXMgYSBzdGFuZGFsb25lIHNlcnZpY2UKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBDbHMyZXJyQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFBVQ0hBUiBwQWRkcikKK3sKKyAgICBIRUFERVJfODAyXzExIERlYXV0aEhkcjsKKyAgICBQVUNIQVIgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworICAgIE5ESVNfU1RBVFVTICAgTlN0YXR1czsKKyAgICBVTE9ORyAgICAgICAgIEZyYW1lTGVuID0gMDsKKyAgICBVU0hPUlQgICAgICAgIFJlYXNvbiA9IFJFQVNPTl9DTFMyRVJSOworCisgICAgTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKyAgICBpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gQ2xhc3MgMiBlcnJvciwgU2VuZCBERUFVVEggZnJhbWUuLi5cbiIpKTsKKyAgICBNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkRlYXV0aEhkciwgU1VCVFlQRV9ERUFVVEgsIDAsIHBBZGRyLCBwQWQtPk1sbWVBdXguQnNzaWQpOworICAgIE1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCZEZWF1dGhIZHIsCisgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICZSZWFzb24sCisgICAgICAgICAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworICAgIE1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKyAgICBwQWQtPlN0YUNmZy5EZWF1dGhSZWFzb24gPSBSZWFzb247CisgICAgQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5EZWF1dGhTdGEsIHBBZGRyKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9hdXRoX3JzcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aF9yc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2FhNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aF9yc3AuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlhdXRoX3JzcC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obgkJMjAwNC0xMC0xCQljb3B5IGZyb20gUlQyNTYwCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIGF1dGhlbnRpY2F0aW9uIHN0YXRlIG1hY2hpbmUgaW5pdCBwcm9jZWR1cmUKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBTbSAtIHRoZSBzdGF0ZSBtYWNoaW5lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBdXRoUnNwU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBQU1RBVEVfTUFDSElORSBTbSwKKyAgICBJTiBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKyAgICBTdGF0ZU1hY2hpbmVJbml0KFNtLCBUcmFucywgTUFYX0FVVEhfUlNQX1NUQVRFLCBNQVhfQVVUSF9SU1BfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIEFVVEhfUlNQX0lETEUsIEFVVEhfUlNQX01BQ0hJTkVfQkFTRSk7CisKKyAgICAvLyBjb2x1bW4gMQorICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9SU1BfSURMRSwgTVQyX1BFRVJfREVBVVRILCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEZWF1dGhBY3Rpb24pOworCisgICAgLy8gY29sdW1uIDIKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfUlNQX1dBSVRfQ0hBTCwgTVQyX1BFRVJfREVBVVRILCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEZWF1dGhBY3Rpb24pOworCit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFBlZXJBdXRoU2ltcGxlUnNwR2VuQW5kU2VuZCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisgICAgSU4gVVNIT1JUIEFsZywKKyAgICBJTiBVU0hPUlQgU2VxLAorICAgIElOIFVTSE9SVCBSZWFzb24sCisgICAgSU4gVVNIT1JUIFN0YXR1cykKK3sKKyAgICBIRUFERVJfODAyXzExICAgICBBdXRoSGRyOworICAgIFVMT05HICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKyAgICBQVUNIQVIgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKyAgICBORElTX1NUQVRVUyAgICAgICBOU3RhdHVzOworCisgICAgaWYgKFJlYXNvbiAhPSBNTE1FX1NVQ0NFU1MpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyIEFVVEggZmFpbC4uLlxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisJLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorICAgIE5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CisgICAgaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBBVVRIIHJlc3BvbnNlIChzZXEjMikuLi5cbiIpKTsKKyAgICBNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkF1dGhIZHIsIFNVQlRZUEVfQVVUSCwgMCwgcEhkcjgwMjExLT5BZGRyMiwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKyAgICBNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSEVBREVSXzgwMl8xMSksICAgICZBdXRoSGRyLAorICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAgICAgJkFsZywKKyAgICAgICAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICZTZXEsCisgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICAgICAmUmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICBNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBQZWVyRGVhdXRoQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFBNTE1FX1FVRVVFX0VMRU0gRWxlbSkKK3sKKyAgICBVQ0hBUiAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgIFJlYXNvbjsKKworICAgIGlmIChQZWVyRGVhdXRoU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFkZHIyLCAmUmVhc29uKSkKKyAgICB7CisgICAgICAgIGlmIChJTkZSQV9PTihwQWQpICYmIE1BQ19BRERSX0VRVUFMKEFkZHIyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQVVUSF9SU1AgLSByZWNlaXZlIERFLUFVVEggZnJvbSBvdXIgQVAgKFJlYXNvbj0lZClcbiIsIFJlYXNvbikpOworCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKworCQkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBkZWF1dGhlbnRpY2F0aW9uCisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfREVBVVRIX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisKKyAgICAgICAgICAgIExpbmtEb3duKHBBZCwgVFJVRSk7CisKKyAgICAgICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIE1vZGUgQ2lzY29fTEVBUCBoYXMgc3RhcnQgYSB0aW1lcgorICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGNhbmNlbCBpdCBpZiB1c2luZyBMRUFQCisjaWZkZWYgTEVBUF9TVVBQT1JUCisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkxlYXBBdXRoVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisgICAgICAgICAgICAgICAgLy9DaGVjayBpcyBpdCBtYWNoIHRoZSBMRUFQIEF1dGhlbnRpY2F0aW9uIGZhaWxlZCBhcyBwb3NzaWJsZSBhIFJvZ3VlIEFQCisgICAgICAgICAgICAgICAgLy9vbiBpdCdzIFBvcnRTZWN1cmVkIG5vdCBlcXVhbCB0byBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCB3aGlsZSBwcm9jZXNzIHRoZSBBdXRoZW50aWNhdG9uLgorICAgICAgICAgICAgICAgIGlmICgocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgIT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpICYmIChwQWQtPk1sbWUuTGVhcE1hY2hpbmUuQ3VyclN0YXRlICE9IExFQVBfSURMRSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSb2d1ZUFwVGFibGVTZXRFbnRyeShwQWQsICZwQWQtPlN0YUNmZy5Sb2d1ZUFwVGFiLCBBZGRyMiwgTEVBUF9SRUFTT05fQVVUSF9USU1FT1VUKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBVVRIX1JTUCAtIFBlZXJEZWF1dGhBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvY29ubmVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvY29ubmVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmMwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9jb25uZWN0LmMKQEAgLTAsMCArMSwyODU3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWNvbm5lY3QuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4JCQkyMDA0LTA4LTA4CQkJTWFqb3IgbW9kaWZpY2F0aW9uIGZyb20gUlQyNTYwCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCitVQ0hBUglDaXBoZXJTdWl0ZVdwYU5vbmVUa2lwW10gPSB7CisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMAkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyU3VpdGVXcGFOb25lVGtpcExlbiA9IChzaXplb2YoQ2lwaGVyU3VpdGVXcGFOb25lVGtpcCkgLyBzaXplb2YoVUNIQVIpKTsKKworVUNIQVIJQ2lwaGVyU3VpdGVXcGFOb25lQWVzW10gPSB7CisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDQsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMAkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyU3VpdGVXcGFOb25lQWVzTGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZVdwYU5vbmVBZXMpIC8gc2l6ZW9mKFVDSEFSKSk7CisKKy8vIFRoZSBmb2xsb3dpbmcgTUFDUk8gaXMgY2FsbGVkIGFmdGVyIDEuIHN0YXJ0aW5nIGFuIG5ldyBJQlNTLCAyLiBzdWNjZXNmdWxseSBKT0lOIGFuIElCU1MsCisvLyBvciAzLiBzdWNjZXNmdWxseSBBU1NPQ0lBVEUgdG8gYSBCU1MsIDQuIHN1Y2Nlc3NmdWxseSBSRV9BU1NPQ0lBVEUgdG8gYSBCU1MKKy8vIEFsbCBzZXR0aW5ncyBzdWNjZXNzZnVseSBuZWdvdGlhdGVkIGZ1cmluZyBNTE1FIHN0YXRlIG1hY2hpbmVzIGJlY29tZSBmaW5hbCBzZXR0aW5ncworLy8gYW5kIGFyZSBjb3BpZWQgdG8gcEFkLT5TdGFBY3RpdmUKKyNkZWZpbmUgQ09QWV9TRVRUSU5HU19GUk9NX01MTUVfQVVYX1RPX0FDVElWRV9DRkcoX3BBZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+Q29tbW9uQ2ZnLlNzaWRMZW4gPSAoX3BBZCktPk1sbWVBdXguU3NpZExlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPkNvbW1vbkNmZy5Tc2lkLCAoX3BBZCktPk1sbWVBdXguU3NpZCwgKF9wQWQpLT5NbG1lQXV4LlNzaWRMZW4pOyBcCisJQ09QWV9NQUNfQUREUigoX3BBZCktPkNvbW1vbkNmZy5Cc3NpZCwgKF9wQWQpLT5NbG1lQXV4LkJzc2lkKTsgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSAoX3BBZCktPk1sbWVBdXguQ2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IChfcEFkKS0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbDsgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5TdGFBY3RpdmUuQWlkID0gKF9wQWQpLT5NbG1lQXV4LkFpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+U3RhQWN0aXZlLkF0aW1XaW4gPSAoX3BBZCktPk1sbWVBdXguQXRpbVdpbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPlN0YUFjdGl2ZS5DYXBhYmlsaXR5SW5mbyA9IChfcEFkKS0+TWxtZUF1eC5DYXBhYmlsaXR5SW5mbzsgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5Db21tb25DZmcuQmVhY29uUGVyaW9kID0gKF9wQWQpLT5NbG1lQXV4LkJlYWNvblBlcmlvZDsgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+U3RhQWN0aXZlLkNmcE1heER1cmF0aW9uID0gKF9wQWQpLT5NbG1lQXV4LkNmcE1heER1cmF0aW9uOyAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPlN0YUFjdGl2ZS5DZnBQZXJpb2QgPSAoX3BBZCktPk1sbWVBdXguQ2ZwUGVyaW9kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiA9IChfcEFkKS0+TWxtZUF1eC5TdXBSYXRlTGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCU5kaXNNb3ZlTWVtb3J5KChfcEFkKS0+U3RhQWN0aXZlLlN1cFJhdGUsIChfcEFkKS0+TWxtZUF1eC5TdXBSYXRlLCAoX3BBZCktPk1sbWVBdXguU3VwUmF0ZUxlbik7XAorCShfcEFkKS0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPSAoX3BBZCktPk1sbWVBdXguRXh0UmF0ZUxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPlN0YUFjdGl2ZS5FeHRSYXRlLCAoX3BBZCktPk1sbWVBdXguRXh0UmF0ZSwgKF9wQWQpLT5NbG1lQXV4LkV4dFJhdGVMZW4pO1wKKwlOZGlzTW92ZU1lbW9yeSgmKF9wQWQpLT5Db21tb25DZmcuQVBFZGNhUGFybSwgJihfcEFkKS0+TWxtZUF1eC5BUEVkY2FQYXJtLCBzaXplb2YoRURDQV9QQVJNKSk7XAorCU5kaXNNb3ZlTWVtb3J5KCYoX3BBZCktPkNvbW1vbkNmZy5BUFFvc0NhcGFiaWxpdHksICYoX3BBZCktPk1sbWVBdXguQVBRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpO1wKKwlOZGlzTW92ZU1lbW9yeSgmKF9wQWQpLT5Db21tb25DZmcuQVBRYnNzTG9hZCwgJihfcEFkKS0+TWxtZUF1eC5BUFFic3NMb2FkLCBzaXplb2YoUUJTU19MT0FEX1BBUk0pKTtcCisJQ09QWV9NQUNfQUREUigoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIChfcEFkKS0+TWxtZUF1eC5Cc3NpZCk7ICAgICAgXAorCShfcEFkKS0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWlkID0gKF9wQWQpLT5NbG1lQXV4LkFpZDsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IChfcEFkKS0+U3RhQ2ZnLlBhaXJDaXBoZXI7XAorCUNPUFlfTUFDX0FERFIoKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5QYWlyd2lzZUtleS5Cc3NJZCwgKF9wQWQpLT5NbG1lQXV4LkJzc2lkKTtcCisJKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SYXRlTGVuID0gKF9wQWQpLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIChfcEFkKS0+U3RhQWN0aXZlLkV4dFJhdGVMZW47XAorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIE1sbWVDbnRsSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBTVEFURV9NQUNISU5FICpTLAorCU9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKwkvLyBDb250cm9sIHN0YXRlIG1hY2hpbmUgZGlmZmVycyBmcm9tIG90aGVyIHN0YXRlIG1hY2hpbmVzLCB0aGUgaW50ZXJmYWNlCisJLy8gZm9sbG93cyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlCisJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgTWxtZUNudGxNYWNoaW5lUGVyZm9ybUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBTVEFURV9NQUNISU5FICpTLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlzd2l0Y2gocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSkKKwl7CisJCWNhc2UgQ05UTF9JRExFOgorCQkJeworCQkJCUNudGxJZGxlUHJvYyhwQWQsIEVsZW0pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ05UTF9XQUlUX0RJU0FTU09DOgorCQkJQ250bFdhaXREaXNhc3NvY1Byb2MocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCQljYXNlIENOVExfV0FJVF9KT0lOOgorCQkJQ250bFdhaXRKb2luUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJLy8gQ05UTF9XQUlUX1JFQVNTT0MgaXMgdGhlIG9ubHkgc3RhdGUgaW4gQ05UTCBtYWNoaW5lIHRoYXQgZG9lcworCQkvLyBub3QgdHJpZ2dlcmVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgIlJUTVBTZXRJbmZvcm1hdGlvbihPSURfeHh4KSIuCisJCS8vIFRoZXJlZm9yZSBub3QgcHJvdGVjdGVkIGJ5IE5ESVMncyAib25seSBvbmUgb3V0c3RhbmRpbmcgT0lEIHJlcXVlc3QiCisJCS8vIHJ1bGUuIFdoaWNoIG1lYW5zIE5ESVMgbWF5IFNFVCBPSUQgaW4gdGhlIG1pZGRsZSBvZiBST0FNaW5nIGF0dGVtcHRzLgorCQkvLyBDdXJyZW50IGFwcHJvYWNoIGlzIHRvIGJsb2NrIG5ldyBTRVQgcmVxdWVzdCBhdCBSVE1QU2V0SW5mb3JtYXRpb24oKQorCQkvLyB3aGVuIENudGxNYWNoaW5lLkN1cnJTdGF0ZSBpcyBub3QgQ05UTF9JRExFCisJCWNhc2UgQ05UTF9XQUlUX1JFQVNTT0M6CisJCQlDbnRsV2FpdFJlYXNzb2NQcm9jKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKworCQljYXNlIENOVExfV0FJVF9TVEFSVDoKKwkJCUNudGxXYWl0U3RhcnRQcm9jKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBDTlRMX1dBSVRfQVVUSDoKKwkJCUNudGxXYWl0QXV0aFByb2MocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCQljYXNlIENOVExfV0FJVF9BVVRIMjoKKwkJCUNudGxXYWl0QXV0aFByb2MyKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBDTlRMX1dBSVRfQVNTT0M6CisJCQlDbnRsV2FpdEFzc29jUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjoKKwkJCWlmKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX1NDQU5fQ09ORikKKwkJCXsKKwkJCQkvLyBSZXN1bWUgVHhSaW5nIGFmdGVyIFNDQU5JTkcgY29tcGxldGUuIFdlIGhvcGUgdGhlIG91dC1vZi1zZXJ2aWNlIHRpbWUKKwkJCQkvLyB3b24ndCBiZSB0b28gbG9uZyB0byBsZXQgdXBwZXIgbGF5ZXIgdGltZS1vdXQgdGhlIHdhaXRpbmcgZnJhbWVzCisJCQkJUlRNUFJlc3VtZU1zZHVUcmFuc21pc3Npb24ocEFkKTsKKwkJCQlpZiAocEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSAhPSBNU1JOX1RZUEVfVU5VU0VEKQorCQkJCXsKKwkJCQkJLy8gQ2lzY28gc2NhbiByZXF1ZXN0IGlzIGZpbmlzaGVkLCBwcmVwYXJlIGJlYWNvbiByZXBvcnQKKwkJCQkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsIE1UMl9BSVJPTkVUX1NDQU5fRE9ORSwgMCwgTlVMTCk7CisJCQkJfQorCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisKKyAgICAgICAgICAgICAgICAvLworCQkJCS8vIFNldCBMRUQgc3RhdHVzIHRvIHByZXZpb3VzIHN0YXR1cy4KKwkJCQkvLworCQkJCWlmIChwQWQtPmJMZWRPblNjYW5uaW5nKQorCQkJCXsKKwkJCQkJcEFkLT5iTGVkT25TY2FubmluZyA9IEZBTFNFOworCQkJCQlSVE1QU2V0TEVEKHBBZCwgcEFkLT5MZWRTdGF0dXMpOworCQkJCX0KKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJCQkJLy8gQVAgc2VudCBhIDIwNDBDb2V4aXN0ZW5jZSBtZ210IGZyYW1lLCB0aGVuIHN0YXRpb24gcGVyZm9ybSBhIHNjYW4sIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgcmVzcG9uZS4KKwkJCQlpZiAocEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAuZmllbGQuSW5mb1JlcSA9PSAxKQorCQkJCXsKKwkJCQkJVXBkYXRlMjA0MENvZXhpc3RGcmFtZUFuZE5vdGlmeShwQWQsIEJTU0lEX1dDSUQsIFRSVUUpOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisJCQl9CisJCQlicmVhazsKKworCQljYXNlIENOVExfV0FJVF9PSURfRElTQVNTT0M6CisJCQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfRElTQVNTT0NfQ09ORikKKwkJCXsKKwkJCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJfQorCQkJYnJlYWs7CisjaWZkZWYgUlQyODcwCisJCS8vCisJCS8vIFRoaXMgc3RhdGUgaXMgZm9yIHRoYXQgd2Ugd2FudCB0byBjb25uZWN0IHRvIGFuIEFQIGJ1dAorCQkvLyBpdCBkaWRuJ3QgZmluZCBvbiBCU1MgTGlzdCB0YWJsZS4gU28gd2UgbmVlZCB0byBzY2FuIHRoZSBhaXIgZmlyc3QsCisJCS8vIGFmdGVyIHRoYXQgd2UgY2FuIHRyeSB0byBjb25uZWN0IHRvIHRoZSBkZXNpcmVkIEFQIGlmIGF2YWlsYWJsZS4KKwkJLy8KKwkJY2FzZSBDTlRMX1dBSVRfU0NBTl9GT1JfQ09OTkVDVDoKKwkJCWlmKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX1NDQU5fQ09ORikKKwkJCXsKKwkJCQkvLyBSZXN1bWUgVHhSaW5nIGFmdGVyIFNDQU5JTkcgY29tcGxldGUuIFdlIGhvcGUgdGhlIG91dC1vZi1zZXJ2aWNlIHRpbWUKKwkJCQkvLyB3b24ndCBiZSB0b28gbG9uZyB0byBsZXQgdXBwZXIgbGF5ZXIgdGltZS1vdXQgdGhlIHdhaXRpbmcgZnJhbWVzCisJCQkJUlRNUFJlc3VtZU1zZHVUcmFuc21pc3Npb24ocEFkKTsKKyNpZmRlZiBDQ1hfU1VQUE9SVAorCQkJCWlmIChwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICE9IE1TUk5fVFlQRV9VTlVTRUQpCisJCQkJeworCQkJCQkvLyBDaXNjbyBzY2FuIHJlcXVlc3QgaXMgZmluaXNoZWQsIHByZXBhcmUgYmVhY29uIHJlcG9ydAorCQkJCQlNbG1lRW5xdWV1ZShwQWQsIEFJUk9ORVRfU1RBVEVfTUFDSElORSwgTVQyX0FJUk9ORVRfU0NBTl9ET05FLCAwLCBOVUxMKTsKKwkJCQl9CisjZW5kaWYgLy8gQ0NYX1NVUFBPUlQgLy8KKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCisJCQkJLy8KKwkJCQkvLyBDaGVjayBpZiB3ZSBjYW4gY29ubmVjdCB0by4KKwkJCQkvLworCQkJCUJzc1RhYmxlU3NpZFNvcnQocEFkLCAmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKwkJCQlpZiAocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIgPiAwKQorCQkJCXsKKwkJCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIFJUMjg3MCAvLworCQlkZWZhdWx0OgorCQkJREJHUFJJTlRfRVJSKCgiIUVSUk9SISBDTlRMIC0gSWxsZWdhbCBtZXNzYWdlIHR5cGUoPSVsZCkiLCBFbGVtLT5Nc2dUeXBlKSk7CisJCQlicmVhazsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bElkbGVQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgICBEaXNhc3NvY1JlcTsKKworCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKSkKKwkJcmV0dXJuOworCisJc3dpdGNoKEVsZW0tPk1zZ1R5cGUpCisJeworCQljYXNlIE9JRF84MDJfMTFfU1NJRDoKKwkJCUNudGxPaWRTc2lkUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX0JTU0lEOgorCQkJQ250bE9pZFJUQnNzaWRQcm9jKHBBZCxFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU46CisJCQlDbnRsT2lkU2NhblByb2MocEFkLEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX0RJU0FTU09DSUFURToKKyNpZmRlZiBSQUxJTktfQVRFCisJCQlpZihBVEVfT04ocEFkKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwkJCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOworCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9FTkFCTEVfV0lUSF9XRUJfVUkpCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgeworICAgIAkJCS8vIFNldCB0aGUgQXV0b1JlY29ubmVjdFNzaWQgdG8gcHJldmVudCBpdCByZWNvbm5lY3QgdG8gb2xkIFNTSUQKKyAgICAJCQkvLyBTaW5jZSBjYWxsaW5nIHRoaXMgaW5kaWNhdGUgdXNlciBkb24ndCB3YW50IHRvIGNvbm5lY3QgdG8gdGhhdCBTU0lEIGFueW1vcmUuCisgICAgCQkJcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuPSAzMjsKKyAgICAJCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbik7CisgICAgICAgICAgICB9CisJCQlicmVhazsKKworCQljYXNlIE1UMl9NTE1FX1JPQU1JTkdfUkVROgorCQkJQ250bE1sbWVSb2FtaW5nUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfODAyXzExX01JQ19GQUlMVVJFX1JFUE9SVF9GUkFNRToKKyAgICAgICAgICAgIFdwYU1pY0ZhaWx1cmVSZXBvcnRGcmFtZShwQWQsIEVsZW0pOworICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9ETFNfUEFSQU06CisJCQlDbnRsT2lkRExTU2V0dXBQcm9jKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIElsbGVnYWwgbWVzc2FnZSBpbiBDbnRsSWRsZVByb2MoTXNnVHlwZT0lbGQpXG4iLEVsZW0tPk1zZ1R5cGUpKTsKKwkJCWJyZWFrOworCX0KK30KKworVk9JRCBDbnRsT2lkU2NhblByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCU1MTUVfU0NBTl9SRVFfU1RSVUNUICAgICAgIFNjYW5SZXE7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgICAgQnNzSWR4ID0gQlNTX05PVF9GT1VORDsKKwlCU1NfRU5UUlkgICAgICAgICAgICAgICAgICBDdXJyQnNzOworCisjaWZkZWYgUkFMSU5LX0FURQorLyogRGlzYWJsZSBzY2FubmluZyB3aGVuIEFURSBpcyBydW5uaW5nLiAqLworCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCisJLy8gcmVjb3JkIGN1cnJlbnQgQlNTIGlmIG5ldHdvcmsgaXMgY29ubmVjdGVkLgorCS8vIDIwMDMtMi0xMyBkbyBub3QgaW5jbHVkZSBjdXJyZW50IElCU1MgaWYgdGhpcyBpcyB0aGUgb25seSBTVEEgaW4gdGhpcyBJQlNTLgorCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJeworCQlCc3NJZHggPSBCc3NTc2lkVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQlpZiAoQnNzSWR4ICE9IEJTU19OT1RfRk9VTkQpCisJCXsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZDdXJyQnNzLCAmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0sIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJfQorCX0KKworCS8vIGNsZWFuIHVwIHByZXZpb3VzIFNDQU4gcmVzdWx0LCBhZGQgY3VycmVudCBCU1MgYmFjayB0byB0YWJsZSBpZiBhbnkKKwlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7CisJaWYgKEJzc0lkeCAhPSBCU1NfTk9UX0ZPVU5EKQorCXsKKwkJLy8gRERLIE5vdGU6IElmIHRoZSBOSUMgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBCU1NJRCBhbmQgU1NJRAorCQkvLyAgICB0aGF0IGFyZSBub3QgY29udGFpbmVkIGluIHRoZSBsaXN0IG9mIEJTU0lEcyBnZW5lcmF0ZWQgYnkgdGhpcyBzY2FuLCB0aGUKKwkJLy8gICAgQlNTSUQgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnRseSBhc3NvY2lhdGVkIEJTU0lEIGFuZCBTU0lEIHNob3VsZCBiZQorCQkvLyAgICBhcHBlbmRlZCB0byB0aGUgbGlzdCBvZiBCU1NJRHMgaW4gdGhlIE5JQydzIGRhdGFiYXNlLgorCQkvLyBUbyBlbnN1cmUgdGhpcywgd2UgYXBwZW5kIHRoaXMgQlNTIGFzIHRoZSBmaXJzdCBlbnRyeSBpbiBTQ0FOIHJlc3VsdAorCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TY2FuVGFiLkJzc0VudHJ5WzBdLCAmQ3VyckJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOworCQlwQWQtPlNjYW5UYWIuQnNzTnIgPSAxOworCX0KKworCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCAiIiwgMCwgQlNTX0FOWSwgU0NBTl9BQ1RJVkUpOworCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TQ0FOX1JFUSwKKwkJc2l6ZW9mKE1MTUVfU0NBTl9SRVFfU1RSVUNUKSwgJlNjYW5SZXEpOworCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlCZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUsIHVzZXIgZGVzaXJlZCBTU0lEIHNob3VsZCBhbHJlYWR5IGJlZW4KKwkJcmVjb3JkZWQgaW4gQ29tbW9uQ2ZnLlNzaWRbXQorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxPaWRTc2lkUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKiBFbGVtKQoreworCVBORElTXzgwMl8xMV9TU0lEICAgICAgICAgIHBPaWRTc2lkID0gKE5ESVNfODAyXzExX1NTSUQgKilFbGVtLT5Nc2c7CisJTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICAgRGlzYXNzb2NSZXE7CisJVUxPTkcJCQkJCSAgIE5vdzsKKworCS8vIFN0ZXAgMS4gcmVjb3JkIHRoZSBkZXNpcmVkIHVzZXIgc2V0dGluZ3MgdG8gTWxtZUF1eAorCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBwT2lkU3NpZC0+U3NpZCwgcE9pZFNzaWQtPlNzaWRMZW5ndGgpOworCXBBZC0+TWxtZUF1eC5Tc2lkTGVuID0gKFVDSEFSKXBPaWRTc2lkLT5Tc2lkTGVuZ3RoOworCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKwlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IHBBZC0+U3RhQ2ZnLkJzc1R5cGU7CisKKworCS8vCisJLy8gVXBkYXRlIFJlY29ubmVjdCBTc2lkLCB0aGF0IHVzZXIgZGVzaXJlZCB0byBjb25uZWN0LgorCS8vCisJTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKwlwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4gPSBwQWQtPk1sbWVBdXguU3NpZExlbjsKKworCS8vIHN0ZXAgMi4gZmluZCBhbGwgbWF0Y2hpbmcgQlNTIGluIHRoZSBsYXN0ZXN0IFNDQU4gcmVzdWx0IChpbkJzc1RhYikKKwkvLyAgICAmIGxvZyB0aGVtIGludG8gTWxtZUF1eC5Tc2lkQnNzVGFiIGZvciBsYXRlci1vbiBpdGVyYXRpb24uIFNvcnQgYnkgUlNTSSBvcmRlcgorCUJzc1RhYmxlU3NpZFNvcnQocEFkLCAmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gJWQgQlNTIG9mICVkIEJTUyBtYXRjaCB0aGUgZGVzaXJlICglZClTU0lEIC0gJXNcbiIsCisJCQlwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciwgcEFkLT5TY2FuVGFiLkJzc05yLCBwQWQtPk1sbWVBdXguU3NpZExlbiwgcEFkLT5NbG1lQXV4LlNzaWQpKTsKKwlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCisJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSAmJgorCQkocEFkLT5Db21tb25DZmcuU3NpZExlbiA9PSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVswXS5Tc2lkTGVuKSAmJgorCQlOZGlzRXF1YWxNZW1vcnkocEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbMF0uU3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZExlbikgJiYKKwkJTUFDX0FERFJfRVFVQUwocEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5WzBdLkJzc2lkKSkKKwl7CisJCS8vIENhc2UgMS4gYWxyZWFkeSBjb25uZWN0ZWQgd2l0aCBhbiBBUCB3aG8gaGFzIHRoZSBkZXNpcmVkIFNTSUQKKwkJLy8gICAgICAgICB3aXRoIGhpZ2hlc3QgUlNTSQorCisJCS8vIEFkZCBjaGVja2luZyBNb2RlICJMRUFQIiBmb3IgQ0NYIDEuMAorCQlpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisJCQkgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgfHwKKwkJCSAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwKKwkJCSAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCSB8fCAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCSApICYmCisJCQkocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkKKwkJeworCQkJLy8gY2FzZSAxLjEgRm9yIFdQQSwgV1BBLVBTSywgaWYgdGhlIDF4IHBvcnQgaXMgbm90IHNlY3VyZWQsIHdlIGhhdmUgdG8gcmVkbworCQkJLy8gICAgICAgICAgY29ubmVjdGlvbiBwcm9jZXNzCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUC4uLlxuIikpOworCQkJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIFJFQVNPTl9ESVNBU1NPQ19TVEFfTEVBVklORyk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKKwkJCQkJCXNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKKwkJfQorCQllbHNlIGlmIChwQWQtPmJDb25maWdDaGFuZ2VkID09IFRSVUUpCisJCXsKKwkJCS8vIGNhc2UgMS4yIEltcG9ydGFudCBDb25maWcgaGFzIGNoYW5nZWQsIHdlIGhhdmUgdG8gcmVjb25uZWN0IHRvIHRoZSBzYW1lIEFQCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUCBCZWNhdXNlIGNvbmZpZyBjaGFuZ2VkLi4uXG4iKSk7CisJCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRpc2Fzc29jUmVxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLAorCQkJCQkJc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCksICZEaXNhc3NvY1JlcSk7CisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0RJU0FTU09DOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gY2FzZSAxLjMuIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBTU0lEIHdpdGggaGlnaGVzdCBSU1NJLgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGFscmVhZHkgd2l0aCB0aGlzIEJTU0lELiBpZ25vcmUgdGhpcyBTRVRfU1NJRCByZXF1ZXN0XG4iKSk7CisJCQkvLworCQkJLy8gKEhDVCAxMi4xKSAxY193bGFuX21lZGlhZXZlbnRzIHJlcXVpcmVkCisJCQkvLyBtZWRpYSBjb25uZWN0IGV2ZW50cyBhcmUgaW5kaWNhdGVkIHdoZW4gYXNzb2NpYXRpbmcgd2l0aCB0aGUgc2FtZSBBUAorCQkJLy8KKwkJCWlmIChJTkZSQV9PTihwQWQpKQorCQkJeworCQkJCS8vCisJCQkJLy8gU2luY2UgTWVkaWFTdGF0ZSBhbHJlYWR5IGlzIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkCisJCQkJLy8gV2UganVzdCBpbmRpY2F0ZSB0aGUgY29ubmVjdCBldmVudCBhZ2FpbiB0byBtZWV0IHRoZSBXSFFMIHJlcXVpcmVkLgorCQkJCS8vCisJCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKwkJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgICAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOyAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbiB0byBsaW5rIGlzIHVwCisJCQl9CisKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwQWQtPk1sbWVBdXguQnNzaWQsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJfQorCX0KKwllbHNlIGlmIChJTkZSQV9PTihwQWQpKQorCXsKKwkJLy8KKwkJLy8gRm9yIFJUNjEKKwkJLy8gWzg4ODg4XSBPSURfODAyXzExX1NTSUQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgTkRURVNUX1dFUF9BUDIoUmV0dXJuZWQ6ICkKKwkJLy8gUlQ2MSBtYXkgbG9zdCBTU0lELCBhbmQgbm90IGNvbm5lY3QgdG8gTkRURVNUX1dFUF9BUDIgYW5kIHdpbGwgY29ubmVjdCB0byBORFRFU1RfV0VQX0FQMiBieSBBdXRvcmVjb25uZWN0CisJCS8vIEJ1dCBtZWRpYSBzdGF0dXMgaXMgY29ubmVjdGVkLCBzbyB0aGUgU1NJRCBub3QgcmVwb3J0IGNvcnJlY3RseS4KKwkJLy8KKwkJaWYgKCFTU0lEX0VRVUFMKHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbikpCisJCXsKKwkJCS8vCisJCQkvLyBEaWZmZXJlbnQgU1NJRCBtZWFucyBub3QgUm9hbWluZyBjYXNlLCBzbyB3ZSBsZXQgTGlua0Rvd24oKSB0byBJbmRpY2F0ZSBhIGRpc2Nvbm5lY3QgZXZlbnQuCisJCQkvLworCQkJcEFkLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gVFJVRTsKKwkJfQorCQkvLyBjYXNlIDIuIGFjdGl2ZSBJTkZSQSBhc3NvY2lhdGlvbiBleGlzdGVudAorCQkvLyAgICByb2FtaW5nIGlzIGRvbmUgd2l0aGluIG1pbmlwb3J0IGRyaXZlciwgbm90aGluZyB0byBkbyB3aXRoIGNvbmZpZ3VyYXRpb24KKwkJLy8gICAgdXRpbGl0eS4gc28gdXBvbiBhIG5ldyBTRVQoT0lEXzgwMl8xMV9TU0lEKSBpcyByZWNlaXZlZCwgd2UganVzdAorCQkvLyAgICBkaXNhc3NvY2lhdGUgd2l0aCB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQLAorCQkvLyAgICB0aGVuIHBlcmZvcm0gYSBuZXcgYXNzb2NpYXRpb24gd2l0aCB0aGlzIG5ldyBTU0lELCBubyBtYXR0ZXIgdGhlCisJCS8vICAgIG5ldy9vbGQgU1NJRCBhcmUgdGhlIHNhbWUgb3Igbm90LgorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUC4uLlxuIikpOworCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRpc2Fzc29jUmVxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsKKwkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsCisJCQkJCXNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0RJU0FTU09DOworCX0KKwllbHNlCisJeworCQlpZiAoQURIT0NfT04ocEFkKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGRyb3AgY3VycmVudCBBREhPQ1xuIikpOworCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKwkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6TkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBDIVxuIikpOworCQl9CisKKwkJaWYgKChwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciA9PSAwKSAmJgorCQkJKHBBZC0+U3RhQ2ZnLmJBdXRvUmVjb25uZWN0ID09IFRSVUUpICYmCisJCQkocEFkLT5NbG1lQXV4LkJzc1R5cGUgPT0gQlNTX0lORlJBKSAmJgorCQkJKE1sbWVWYWxpZGF0ZVNTSUQocEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKSA9PSBUUlVFKQorCQkJKQorCQl7CisJCQlNTE1FX1NDQU5fUkVRX1NUUlVDVCAgICAgICBTY2FuUmVxOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gTm8gbWF0Y2hpbmcgQlNTLCBzdGFydCBhIG5ldyBzY2FuXG4iKSk7CisJCQlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCBCU1NfQU5ZLCBTQ0FOX0FDVElWRSk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKKwkJCS8vIFJlc2V0IE1pc3NlZCBzY2FuIG51bWJlcgorCQkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gTm93OworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7CisJCQlJdGVyYXRlT25Cc3NUYWIocEFkKTsKKwkJfQorCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsT2lkUlRCc3NpZFByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICogRWxlbSkKK3sKKwlVTE9ORyAgICAgICBCc3NJZHg7CisJUFVDSEFSICAgICAgcE9pZEJzc2lkID0gKFBVQ0hBUilFbGVtLT5Nc2c7CisJTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICAgIERpc2Fzc29jUmVxOworCU1MTUVfSk9JTl9SRVFfU1RSVUNUICAgICAgICBKb2luUmVxOworCisjaWZkZWYgUkFMSU5LX0FURQorLyogTm8gbmVlZCB0byBwZXJmb3JtIHRoaXMgcm91dGluZSB3aGVuIEFURSBpcyBydW5uaW5nLiAqLworCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCS8vIHJlY29yZCB1c2VyIGRlc2lyZWQgc2V0dGluZ3MKKwlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgcE9pZEJzc2lkKTsKKwlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IHBBZC0+U3RhQ2ZnLkJzc1R5cGU7CisKKwkvLworCS8vIFVwZGF0ZSBSZWNvbm5lY3QgU3NpZCwgdGhhdCB1c2VyIGRlc2lyZWQgdG8gY29ubmVjdC4KKwkvLworCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwlwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4gPSBwQWQtPk1sbWVBdXguU3NpZExlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisKKwkvLyBmaW5kIHRoZSBkZXNpcmVkIEJTUyBpbiB0aGUgbGF0ZXN0IFNDQU4gcmVzdWx0IHRhYmxlCisJQnNzSWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcE9pZEJzc2lkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCk7CisJaWYgKEJzc0lkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEJTU0lEIG5vdCBmb3VuZC4gcmVwbHkgTkRJU19TVEFUVVNfTk9UX0FDQ0VQVEVEXG4iKSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCXJldHVybjsKKwl9CisKKwkvLyBjb3B5IHRoZSBtYXRjaGVkIEJTUyBlbnRyeSBmcm9tIFNjYW5UYWIgdG8gTWxtZUF1eC5Tc2lkQnNzVGFiLiBXaHk/CisJLy8gQmVjYXVzZSB3ZSBuZWVkIHRoaXMgZW50cnkgdG8gYmVjb21lIHRoZSBKT0lOIHRhcmdldCBpbiBsYXRlciBvbiBTWU5DIHN0YXRlIG1hY2hpbmUKKwlwQWQtPk1sbWVBdXguQnNzSWR4ID0gMDsKKwlwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciA9IDE7CisJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5WzBdLCAmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0sIHNpemVvZihCU1NfRU5UUlkpKTsKKworCS8vcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZExlbjsKKwkvL05kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZCwgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZExlbik7CisKKwkvLyBBZGQgU1NJRCBpbnRvIE1sbWVBdXggZm9yIHNpdGUgc3VyZXkgam9pbmluZyBoaWRkZW4gU1NJRAorCS8vcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5Tc2lkTGVuOworCS8vTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKworCS8vIDIwMDItMTEtMjYgc2tpcCB0aGUgZm9sbG93aW5nIGNoZWNraW5nLiBpLmUuIGlmIHVzZXIgd2FudHMgdG8gcmUtY29ubmVjdCB0byBzYW1lIEFQCisJLy8gICB3ZSBqdXN0IGZvbGxvdyBub3JtYWwgcHJvY2VkdXJlLiBUaGUgcmVhc29uIG9mIHVzZXIgZG9pbmcgdGhpcyBtYXkgYmVjYXVzZSBoZS9zaGUgY2hhbmdlZAorCS8vICAgQVAgdG8gYW5vdGhlciBjaGFubmVsLCBidXQgd2Ugc3RpbGwgcmVjZWl2ZWQgQkVBQ09OIGZyb20gaXQgdGh1cyBkb24ndCBjbGFpbSBMaW5rIERvd24uCisJLy8gICBTaW5jZSB1c2VyIGtub3dzIGhlJ3MgY2hhbmdlZCBBUCBjaGFubmVsLCBoZSdsbCByZS1jb25uZWN0IGFnYWluLiBCeSBza2lwcGluZyB0aGUgZm9sbG93aW5nCisJLy8gICBjaGVja2luZywgd2UnbGwgZGlzYXNzb2NpYXRlIHRoZW4gcmUtZG8gbm9ybWFsIGFzc29jaWF0aW9uIHdpdGggdGhpcyBBUCBhdCB0aGUgbmV3IGNoYW5uZWwuCisJLy8gMjAwMy0xLTYgUmUtZW5hYmxlIHRoaXMgZmVhdHVyZSBiYXNlZCBvbiBtaWNyb3NvZnQgcmVxdWlyZW1lbnQgd2hpY2ggcHJlZmVyIG5vdCB0byByZS1kbworCS8vICAgY29ubmVjdGlvbiB3aGVuIHNldHRpbmcgdGhlIHNhbWUgQlNTSUQuCisJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSAmJgorCQlNQUNfQUREUl9FUVVBTChwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcE9pZEJzc2lkKSkKKwl7CisJCS8vIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBzYW1lIEJTU0lELCBnbyBiYWNrIHRvIGlkbGUgc3RhdGUgZGlyZWN0bHkKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGFscmVhZHkgaW4gdGhpcyBCU1NJRC4gaWdub3JlIHRoaXMgU0VUX0JTU0lEIHJlcXVlc3RcbiIpKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKworICAgICAgICAgICAgICAgIG1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCX0KKwllbHNlCisJeworCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJeworCQkJLy8gZGlzYXNzb2MgZnJvbSBjdXJyZW50IEFQIGZpcnN0CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUCAuLi5cbiIpKTsKKwkJCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOworCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsCisJCQkJCQlzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSwgJkRpc2Fzc29jUmVxKTsKKworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChBREhPQ19PTihwQWQpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBkcm9wIGN1cnJlbnQgQURIT0NcbiIpKTsKKwkJCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKKwkJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKyAgICAgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQyFcbiIpKTsKKwkJCX0KKworCQkJLy8gQ2hhbmdlIHRoZSB3ZXBzdGF0dXMgdG8gb3JpZ2luYWwgd2Vwc3RhdHVzCisJCQlwQWQtPlN0YUNmZy5XZXBTdGF0dXMgICA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyICA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisJCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisKKwkJCS8vIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBoZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcKKwkJCS8vIFNldCB0aGUgUGFpcndpc2UgYW5kIEdyb3VwIGNpcGhlciB0byBtYXRjaCB0aGUgaW50ZW5kZWQgQVAgc2V0dGluZworCQkJLy8gV2UgY2FuIG9ubHkgY29ubmVjdCB0byBBUCB3aXRoIGxlc3Mgc2VjdXJlZCBjaXBoZXIgc2V0dGluZworCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKQorCQkJeworCQkJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLkdyb3VwQ2lwaGVyOworCisJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlcikKKwkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyOworCQkJCWVsc2UgaWYgKHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyQXV4ICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKwkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyQXV4OworCQkJCWVsc2UJLy8gVGhlcmUgaXMgbm8gUGFpckNpcGhlciBBdXgsIGRvd25ncmFkZSBvdXIgY2FwYWJpbGl0eSB0byBUS0lQCisJCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJfQorCQkJZWxzZSBpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKKwkJCXsKKwkJCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuR3JvdXBDaXBoZXI7CisKKwkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlcikKKwkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlcjsKKwkJCQllbHNlIGlmIChwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLlBhaXJDaXBoZXJBdXggIT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQorCQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5QYWlyQ2lwaGVyQXV4OworCQkJCWVsc2UJLy8gVGhlcmUgaXMgbm8gUGFpckNpcGhlciBBdXgsIGRvd25ncmFkZSBvdXIgY2FwYWJpbGl0eSB0byBUS0lQCisJCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCisJCQkJLy8gUlNOIGNhcGFiaWxpdHkKKwkJCQlwQWQtPlN0YUNmZy5Sc25DYXBhYmlsaXR5ID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5Sc25DYXBhYmlsaXR5OworCQkJfQorCisJCQkvLyBTZXQgTWl4IGNpcGhlciBmbGFnCisJCQlwQWQtPlN0YUNmZy5iTWl4Q2lwaGVyID0gKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIpID8gRkFMU0UgOiBUUlVFOworCQkJaWYgKHBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXIgPT0gVFJVRSkKKwkJCXsKKwkJCQkvLyBJZiBtaXggY2lwaGVyLCByZS1idWlsZCBSU05JRQorCQkJCVJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCAwKTsKKwkJCX0KKwkJCS8vIE5vIGFjdGl2ZSBhc3NvY2lhdGlvbiwgam9pbiB0aGUgQlNTIGltbWVkaWF0ZWx5CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gam9pbmluZyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAuLi5cbiIsCisJCQkJcE9pZEJzc2lkWzBdLHBPaWRCc3NpZFsxXSxwT2lkQnNzaWRbMl0scE9pZEJzc2lkWzNdLHBPaWRCc3NpZFs0XSxwT2lkQnNzaWRbNV0pKTsKKworCQkJSm9pblBhcm1GaWxsKHBBZCwgJkpvaW5SZXEsIHBBZC0+TWxtZUF1eC5Cc3NJZHgpOworCQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0pPSU5fUkVRLCBzaXplb2YoTUxNRV9KT0lOX1JFUV9TVFJVQ1QpLCAmSm9pblJlcSk7CisKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfSk9JTjsKKwkJfQorCX0KK30KKworLy8gUm9hbWluZyBpcyB0aGUgb25seSBleHRlcm5hbCByZXF1ZXN0IHRyaWdnZXJpbmcgQ05UTCBzdGF0ZSBtYWNoaW5lCisvLyBkZXNwaXRlIG9mIG90aGVyICJTRVQgT0lEIiBvcGVyYXRpb24uIEFsbCAiU0VUIE9JRCIgcmVsYXRlZCBvZXJhdGlvbnMKKy8vIGhhcHBlbiBpbiBzZXF1ZW5jZSwgYmVjYXVzZSBubyBvdGhlciBTRVQgT0lEIHdpbGwgYmUgc2VudCB0byB0aGlzIGRldmljZQorLy8gdW50aWwgdGhlIHRoZSBwcmV2aW91cyBTRVQgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIChzdWNjZXNzZnVsIG8gZmFpbGVkKS4KKy8vIFNvLCBob3cgZG8gd2UgcXVhcmFudGVlIHRoaXMgUk9BTUlORyByZXF1ZXN0IHdvbid0IGNvcnJ1cHQgb3RoZXIgIlNFVCBPSUQiPworLy8gb3IgYmVlbiBjb3JydXB0ZWQgYnkgb3RoZXIgIlNFVCBPSUQiPworLy8KKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBDbnRsTWxtZVJvYW1pbmdQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwkvLyBUT0RPOgorCS8vIEFQIGluIGRpZmZlcmVudCBjaGFubmVsIG1heSBzaG93IGxvd2VyIFJTU0kgdGhhbiBhY3R1YWwgdmFsdWU/PworCS8vIHNob3VsZCB3ZSBhZGQgYSB3ZWlnaHRpbmcgZmFjdG9yIHRvIGNvbXBlbnNhdGUgaXQ/CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gUm9hbWluZyBpbiBNbG1lQXV4LlJvYW1UYWIuLi5cbiIpKTsKKworCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYiwgJnBBZC0+TWxtZUF1eC5Sb2FtVGFiLCBzaXplb2YocEFkLT5NbG1lQXV4LlJvYW1UYWIpKTsKKwlwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciA9IHBBZC0+TWxtZUF1eC5Sb2FtVGFiLkJzc05yOworCisJQnNzVGFibGVTb3J0QnlSc3NpKCZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYik7CisJcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7CisJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7Cit9CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxPaWRETFNTZXR1cFByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBSVF84MDJfMTFfRExTCQlwRExTID0gKFBSVF84MDJfMTFfRExTKUVsZW0tPk1zZzsKKwlNTE1FX0RMU19SRVFfU1RSVUNUCU1sbWVEbHNSZXE7CisJSU5UCQkJCQlpOworCVVTSE9SVAkJCQlyZWFzb24gPSBSRUFTT05fVU5TUEVDSUZZOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gKE9JRCBzZXQgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggd2l0aCBWYWxpZD0lZCwgU3RhdHVzPSVkLCBUaW1lT3V0PSVkLCBDb3VudERvd25UaW1lcj0lZClcbiIsCisJCXBETFMtPk1hY0FkZHJbMF0sIHBETFMtPk1hY0FkZHJbMV0sIHBETFMtPk1hY0FkZHJbMl0sIHBETFMtPk1hY0FkZHJbM10sIHBETFMtPk1hY0FkZHJbNF0sIHBETFMtPk1hY0FkZHJbNV0sCisJCXBETFMtPlZhbGlkLCBwRExTLT5TdGF0dXMsIHBETFMtPlRpbWVPdXQsIHBETFMtPkNvdW50RG93blRpbWVyKSk7CisKKwlpZiAoIXBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQlyZXR1cm47CisKKwkvLyBETFMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIHdoZW4gQWRob2MgbW9kZQorCWlmIChJTkZSQV9PTihwQWQpKQorCXsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwRExTLT5WYWxpZCAmJiBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmCisJCQkJKHBETFMtPlRpbWVPdXQgPT0gcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCkgJiYgTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJLy8gMS4gU2FtZSBzZXR0aW5nLCBqdXN0IGRyb3AgaXQKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNOVEwgLSBzZXR0aW5nIHVuY2hhbmdlZFxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoIXBETFMtPlZhbGlkICYmIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkgJiYKKwkJCQlNQUNfQUREUl9FUVVBTChwRExTLT5NYWNBZGRyLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQkvLyAyLiBEaXNhYmxlIERMUyBsaW5rIGNhc2UsIGp1c3QgdGVhciBkb3duIERMUyBsaW5rCisJCQkJcmVhc29uID0gUkVBU09OX1FPU19VTldBTlRFRF9NRUNIQU5JU007CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gc3RhcnQgdGVhciBkb3duIHByb2NlZHVyZVxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoKGkgPCBNQVhfTlVNX09GX0RMU19FTlRSWSkgJiYgcERMUy0+VmFsaWQgJiYgIXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkKQorCQkJeworCQkJCS8vIDMuIEVuYWJsZSBjYXNlLCBzdGFydCBETFMgc2V0dXAgcHJvY2VkdXJlCisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCBwRExTLCBzaXplb2YoUlRfODAyXzExX0RMU19VSSkpOworCisJCQkJLy9VcGRhdGUgY291bnRkb3duIHRpbWVyCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uQ291bnREb3duVGltZXIgPSBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0OworCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfUkVRLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNOVEwgLSBETFMgc2V0dXAgY2FzZVxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoKGkgPCBNQVhfTlVNX09GX0RMU19FTlRSWSkgJiYgcERMUy0+VmFsaWQgJiYgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYKKwkJCQkocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmICFNQUNfQUREUl9FUVVBTChwRExTLT5NYWNBZGRyLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQkvLyA0LiB1cGRhdGUgbWFjIGNhc2UsIHRlYXIgZG93biBvbGQgRExTIGFuZCBzZXR1cCBuZXcgRExTCisJCQkJcmVhc29uID0gUkVBU09OX1FPU19VTldBTlRFRF9NRUNIQU5JU007CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCBwRExTLCBzaXplb2YoUlRfODAyXzExX0RMU19VSSkpOworCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfUkVRLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNOVEwgLSBETFMgdGVhciBkb3duIGFuZCByZXN0YXJ0IGNhc2VcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYgKHBETFMtPlZhbGlkICYmIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmCisJCQkJTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQgIT0gcERMUy0+VGltZU91dCkpCisJCQl7CisJCQkJLy8gNS4gdXBkYXRlIHRpbWVvdXQgY2FzZSwgc3RhcnQgRExTIHNldHVwIHByb2NlZHVyZSAobm8gdGVhciBkb3duKQorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQJPSBwRExTLT5UaW1lT3V0OworCQkJCS8vVXBkYXRlIGNvdW50ZG93biB0aW1lcgorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dDsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1JFUSwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gRExTIHVwZGF0ZSB0aW1lb3V0IGNhc2VcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYgKHBETFMtPlZhbGlkICYmIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmCisJCQkJKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyAhPSBETFNfRklOSVNIKSAmJiBNQUNfQUREUl9FUVVBTChwRExTLT5NYWNBZGRyLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQkvLyA2LiByZS1zZXR1cCBjYXNlLCBzdGFydCBETFMgc2V0dXAgcHJvY2VkdXJlIChubyB0ZWFyIGRvd24pCisJCQkJRGxzUGFybUZpbGwocEFkLCAmTWxtZURsc1JlcSwgJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCByZWFzb24pOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19SRVEsIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQ05UTCAtIERMUyByZXRyeSBzZXR1cCBwcm9jZWR1cmVcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCgiQ05UTCAtIERMUyBub3QgY2hhbmdlZCBpbiBlbnRyeSAtICVkIC0gVmFsaWQ9JWQsIFN0YXR1cz0lZCwgVGltZU91dD0lZFxuIiwKKwkJCQkJaSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cywgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCkpOworCQkJfQorCQl9CisJfQorfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsV2FpdERpc2Fzc29jUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJTUxNRV9TVEFSVF9SRVFfU1RSVUNUICAgICBTdGFydFJlcTsKKworCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9ESVNBU1NPQ19DT05GKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIERpcy1hc3NvY2lhdGUgc3VjY2Vzc2Z1bFxuIikpOworCisJICAgIGlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJeworCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfRElTQVNTT0NfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKwkJfQorCisJCUxpbmtEb3duKHBBZCwgRkFMU0UpOworCisJCS8vIGNhc2UgMS4gbm8gbWF0Y2hpbmcgQlNTLCBhbmQgdXNlciB3YW50cyBBREhPQywgc28gd2UganVzdCBzdGFydCBhIG5ldyBvbmUKKwkJaWYgKChwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOcj09MCkgJiYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIE5vIG1hdGNoaW5nIEJTUywgc3RhcnQgYSBuZXcgQURIT0MgKFNzaWQ9JXMpLi4uXG4iLHBBZC0+TWxtZUF1eC5Tc2lkKSk7CisJCQlTdGFydFBhcm1GaWxsKHBBZCwgJlN0YXJ0UmVxLCBwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRMZW4pOworCQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NUQVJUX1JFUSwgc2l6ZW9mKE1MTUVfU1RBUlRfUkVRX1NUUlVDVCksICZTdGFydFJlcSk7CisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX1NUQVJUOworCQl9CisJCS8vIGNhc2UgMi4gdHJ5IGVhY2ggbWF0Y2hlZCBCU1MKKwkJZWxzZQorCQl7CisJCQlwQWQtPk1sbWVBdXguQnNzSWR4ID0gMDsKKworCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxXYWl0Sm9pblByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgICAgICAgICAgICAgICAgICBSZWFzb247CisJTUxNRV9BVVRIX1JFUV9TVFJVQ1QgICAgICAgIEF1dGhSZXE7CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfSk9JTl9DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQkvLyAxLiBqb2luZWQgYW4gSUJTUywgd2UgYXJlIHByZXR0eSBtdWNoIGRvbmUgaGVyZQorCQkJaWYgKHBBZC0+TWxtZUF1eC5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCXsKKwkJCSAgICAvLworCQkJCS8vIDVHIGJhbmRzIHJ1bGVzIG9mIEphcGFuOgorCQkJCS8vIEFkIGhvYyBtdXN0IGJlIGRpc2FibGVkIGluIFc1MyhjaDUyLDU2LDYwLDY0KSBjaGFubmVscy4KKwkJCQkvLworCQkJCWlmICggKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmCisgICAgICAgICAgICAgICAgICAgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJCSAgICkKKwkJCQl7CisJCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBDaGFubmVsPSVkLCBKb2luIGFkaG9jIG9uIFc1Myg1Miw1Niw2MCw2NCkgQ2hhbm5lbHMgYXJlIG5vdCBhY2NlcHRlZFxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJTGlua1VwKHBBZCwgQlNTX0FESE9DKTsKKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBqb2luIHRoZSBJQlNTID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggLi4uXG4iLAorCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzBdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzFdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzJdLAorCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzNdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzRdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzVdKSk7CisKKyAgICAgICAgICAgICAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworICAgICAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOworCQkJfQorCQkJLy8gMi4gam9pbmVkIGEgbmV3IElORlJBIG5ldHdvcmssIHN0YXJ0IGZyb20gYXV0aGVudGljYXRpb24KKwkJCWVsc2UKKwkJCXsKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCQkvLyBBZGQgQXV0aE1vZGUgIkxFQVAiIGZvciBDQ1ggMS5YCisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisJCQkJeworCQkJCQlBdXRoUGFybUZpbGwocEFkLCAmQXV0aFJlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBDSVNDT19BdXRoTW9kZUxFQVApOworCQkJCX0KKwkJCQllbHNlCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQkJeworCQkJCQkvLyBlaXRoZXIgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkIG9yIE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gsIHRyeSBzaGFyZWQga2V5IGZpcnN0CisJCQkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKSB8fAorCQkJCQkJKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpKQorCQkJCQl7CisJCQkJCQlBdXRoUGFybUZpbGwocEFkLCAmQXV0aFJlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlT3Blbik7CisJCQkJCX0KKwkJCQl9CisJCQkJTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FVVEhfUkVRLAorCQkJCQkJCXNpemVvZihNTE1FX0FVVEhfUkVRX1NUUlVDVCksICZBdXRoUmVxKTsKKworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfQVVUSDsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIDMuIGZhaWxlZCwgdHJ5IG5leHQgQlNTCisJCQlwQWQtPk1sbWVBdXguQnNzSWR4Kys7CisJCQlJdGVyYXRlT25Cc3NUYWIocEFkKTsKKwkJfQorCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsV2FpdFN0YXJ0UHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICAgICAgUmVzdWx0OworCisJaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX1NUQVJUX0NPTkYpCisJeworCQlOZGlzTW92ZU1lbW9yeSgmUmVzdWx0LCBFbGVtLT5Nc2csIHNpemVvZihVU0hPUlQpKTsKKwkJaWYgKFJlc3VsdCA9PSBNTE1FX1NVQ0NFU1MpCisJCXsKKwkJICAgIC8vCisJCQkvLyA1RyBiYW5kcyBydWxlcyBvZiBKYXBhbjoKKwkJCS8vIEFkIGhvYyBtdXN0IGJlIGRpc2FibGVkIGluIFc1MyhjaDUyLDU2LDYwLDY0KSBjaGFubmVscy4KKwkJCS8vCisJCQlpZiAoIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJgorICAgICAgICAgICAgICAgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJICAgKQorCQkJeworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIENoYW5uZWw9JWQsIFN0YXJ0IGFkaG9jIG9uIFc1Myg1Miw1Niw2MCw2NCkgQ2hhbm5lbHMgYXJlIG5vdCBhY2NlcHRlZFxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCXJldHVybjsKKwkJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCQl7CisJCQkJTl9DaGFubmVsQ2hlY2socEFkKTsKKwkJCQlTZXRDb21tb25IVChwQWQpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQWRkSHRJbmZvLCAmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKwkJCQlSVE1QQ2hlY2tIdChwQWQsIEJTU0lEX1dDSUQsICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksICZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8pOworCQkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID0gVFJVRTsKKwkJCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0sIDE2KTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0sICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzBdLCAxNik7CisJCQkJQ09QWV9IVFNFVFRJTkdTX0ZST01fTUxNRV9BVVhfVE9fQUNUSVZFX0NGRyhwQWQpOworCisJCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCAgPT0gQldfNDApICYmCisJCQkJCShwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0FCT1ZFKSkKKwkJCQl7CisJCQkJCXBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgKyAyOworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggID09IEJXXzQwKSAmJgorCQkJCQkJIChwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0JFTE9XKSkKKwkJCQl7CisJCQkJCXBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgLSAyOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCXsKKwkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IEZBTFNFOworCQkJfQorCQkJTGlua1VwKHBBZCwgQlNTX0FESE9DKTsKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCQkvLyBCZWZvcmUgc2VuZCBiZWFjb24sIGRyaXZlciBuZWVkIGRvIHJhZGFyIGRldGVjdGlvbgorCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQgKQorCQkJCSYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQorCQkJCSYmIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID0gUkRfU0lMRU5DRV9NT0RFOworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJEQ291bnQgPSAwOworI2lmZGVmIERGU19TVVBQT1JUCisJCQkJQmJwUmFkYXJEZXRlY3Rpb25TdGFydChwQWQpOworI2VuZGlmIC8vIERGU19TVVBQT1JUIC8vCisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBzdGFydCBhIG5ldyBJQlNTID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggLi4uXG4iLAorCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzBdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzFdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzJdLAorCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzNdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzRdLHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzVdKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gU3RhcnQgSUJTUyBmYWlsLiBCVUchISEhIVxuIikpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJfQorCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bFdhaXRBdXRoUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICBSZWFzb247CisJTUxNRV9BU1NPQ19SRVFfU1RSVUNUICAgICAgICBBc3NvY1JlcTsKKwlNTE1FX0FVVEhfUkVRX1NUUlVDVCAgICAgICAgIEF1dGhSZXE7CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfQVVUSF9DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQVVUSCBPS1xuIikpOworCQkJQXNzb2NQYXJtRmlsbChwQWQsICZBc3NvY1JlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkgIEFTU09DX1RJTUVPVVQsIHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCk7CisKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCS8vCisJCQkvLyBDaXNjbyBMZWFwIENDS00gc3VwcG9ydGVkIFJlLWFzc29jaWF0aW9uLgorCQkJLy8KKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuQ0NLTUxpbmtVcEZsYWcgPT0gVFJVRSkpCisJCQl7CisJCQkJLy9pZiBDQ0tNIGlzIHR1cm4gb24gLCB0aGF0J3MgbWVhbiBGYXN0IFJlYXV0aGVudGljYXRpb24KKwkJCQkvL1VzZSBDQ0tNIFJlYXNzb2NpYXRpb24gaW5zdGVhZCBvZiBub3JtYWwgYXNzb2NpYXRpb24gZm9yIEZhc3QgUm9hbWluZy4KKwkJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1JFQVNTT0NfUkVRLAorCQkJCQkJCXNpemVvZihNTE1FX0FTU09DX1JFUV9TVFJVQ1QpLCAmQXNzb2NSZXEpOworCisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9SRUFTU09DOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJeworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfQVNTT0NfUkVRLAorCQkJCQkJCXNpemVvZihNTE1FX0FTU09DX1JFUV9TVFJVQ1QpLCAmQXNzb2NSZXEpOworCisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9BU1NPQzsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIFRoaXMgZmFpbCBtYXkgYmVjYXVzZSBvZiB0aGUgQVAgYWxyZWFkeSBrZWVwIHVzIGluIGl0cyBNQUMgdGFibGUgd2l0aG91dAorCQkJLy8gYWdlaW5nLW91dC4gVGhlIHByZXZpb3VzIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHQgbXVzdCBoYXZlIGxldCBpdCByZW1vdmUgdXMuCisJCQkvLyBzbyB0cnkgQXV0aGVudGljYXRpb24gYWdhaW4gbWF5IGhlbHAuIEZvciBELUxpbmsgRFdMLTkwMEFQKyBjb21wYXRpYmlsaXR5LgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFVVEggRkFJTCwgdHJ5IGFnYWluLi4uXG4iKSk7CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkvL0FkZCBBdXRoTW9kZSAiTEVBUCIgZm9yIENDWCAxLlgKKwkJCWlmIChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorCQkJeworCQkJCUF1dGhQYXJtRmlsbChwQWQsICZBdXRoUmVxLCBwQWQtPk1sbWVBdXguQnNzaWQsIENJU0NPX0F1dGhNb2RlTEVBUCk7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQl7CisJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpIHx8CisJCQkJCShwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoKSkKKwkJCQl7CisJCQkJCS8vIGVpdGhlciBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQgb3IgTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCwgdHJ5IHNoYXJlZCBrZXkgZmlyc3QKKwkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlT3Blbik7CisJCQkJfQorCQkJfQorCQkJTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FVVEhfUkVRLAorCQkJCQkJc2l6ZW9mKE1MTUVfQVVUSF9SRVFfU1RSVUNUKSwgJkF1dGhSZXEpOworCisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0FVVEgyOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsV2FpdEF1dGhQcm9jMigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICBSZWFzb247CisJTUxNRV9BU1NPQ19SRVFfU1RSVUNUICAgICAgICBBc3NvY1JlcTsKKwlNTE1FX0FVVEhfUkVRX1NUUlVDVCAgICAgICAgIEF1dGhSZXE7CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfQVVUSF9DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQVVUSCBPS1xuIikpOworCQkJQXNzb2NQYXJtRmlsbChwQWQsICZBc3NvY1JlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkgIEFTU09DX1RJTUVPVVQsIHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FTU09DX1JFUSwKKwkJCQkJCXNpemVvZihNTE1FX0FTU09DX1JFUV9TVFJVQ1QpLCAmQXNzb2NSZXEpOworCisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0FTU09DOworCQl9CisJCWVsc2UKKwkJeworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkJLy8gUHJvY2VzcyBMRUFQIGZpcnN0LCBzaW5jZSBpdCB1c2UgZGlmZmVyZW50IGNvbnRyb2wgdmFyaWFibGUKKwkJCS8vIFdlIGRvbid0IHdhbnQgdG8gYWZmZWN0IG90aGVyIHBvdmVuIG9wZXJhdGlvbgorCQkJaWYgKHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisJCQl7CisJCQkJLy8gTEVBUCBBdXRoIG5vdCBzdWNjZXNzLCB0cnkgbmV4dCBCU1MKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gKkxFQVAqIEFVVEggRkFJTCwgZ2l2ZSB1cDsgdHJ5IG5leHQgQlNTXG4iKSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVG90YWwgbWF0Y2ggQlNTSUQgWz0lZF1cbiIsIHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc05yKSk7CisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJCQlwQWQtPk1sbWVBdXguQnNzSWR4Kys7CisJCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpICYmCisJCQkJIChwQWQtPk1sbWVBdXguQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFVVEggRkFJTCwgdHJ5IE9QRU4gc3lzdGVtLi4uXG4iKSk7CisJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlT3Blbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FVVEhfUkVRLAorCQkJCQkJCXNpemVvZihNTE1FX0FVVEhfUkVRX1NUUlVDVCksICZBdXRoUmVxKTsKKworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfQVVUSDI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gbm90IHN1Y2Nlc3MsIHRyeSBuZXh0IEJTUworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBVVRIIEZBSUwsIGdpdmUgdXA7IHRyeSBuZXh0IEJTU1xuIikpOworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7IC8vPz8/Pz8/PworCQkJCXBBZC0+TWxtZUF1eC5Cc3NJZHgrKzsKKwkJCQlJdGVyYXRlT25Cc3NUYWIocEFkKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bFdhaXRBc3NvY1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgIFJlYXNvbjsKKworCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9BU1NPQ19DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQlMaW5rVXAocEFkLCBCU1NfSU5GUkEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBc3NvY2lhdGlvbiBzdWNjZXNzZnVsIG9uIEJTUyAjJWxkXG4iLHBBZC0+TWxtZUF1eC5Cc3NJZHgpKTsKKworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJeworCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX0FTU09DX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBub3Qgc3VjY2VzcywgdHJ5IG5leHQgQlNTCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQXNzb2NpYXRpb24gZmFpbHMgb24gQlNTICMlbGRcbiIscEFkLT5NbG1lQXV4LkJzc0lkeCkpOworCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCsrOworCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxXYWl0UmVhc3NvY1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgIFJlc3VsdDsKKworCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9SRUFTU09DX0NPTkYpCisJeworCQlOZGlzTW92ZU1lbW9yeSgmUmVzdWx0LCBFbGVtLT5Nc2csIHNpemVvZihVU0hPUlQpKTsKKwkJaWYgKFJlc3VsdCA9PSBNTE1FX1NVQ0NFU1MpCisJCXsKKwkJCS8vCisJCQkvLyBORElTIHJlcXVpcmVzIGEgbmV3IExpbmsgVVAgaW5kaWNhdGlvbiBidXQgbm8gTGluayBEb3duIGZvciBSRS1BU1NPQworCQkJLy8KKwkJCUxpbmtVcChwQWQsIEJTU19JTkZSQSk7CisKKwkJCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgYXNzb2NpYXRpb24KKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19BU1NPQ19FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOworCisKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSkKKwkJCXsKKwkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19GSU5JU0g7CisJCQl9CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIFJlLWFzc29jaXRpb24gc3VjY2Vzc2Z1bCBvbiBCU1MgIyVsZFxuIiwgcEFkLT5NbG1lQXV4LlJvYW1JZHgpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIHJlYXNzb2MgZmFpbGVkLCB0cnkgdG8gcGljayBuZXh0IEJTUyBpbiB0aGUgQlNTIFRhYmxlCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gUmUtYXNzb2NpdGlvbiBmYWlscyBvbiBCU1MgIyVsZFxuIiwgcEFkLT5NbG1lQXV4LlJvYW1JZHgpKTsKKwkJCXBBZC0+TWxtZUF1eC5Sb2FtSWR4Kys7CisJCQlJdGVyYXRlT25Cc3NUYWIyKHBBZCk7CisJCX0KKwl9Cit9CisKKworVk9JRAlBZGhvY1R1cm5PblFvcygKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQpCit7CisjZGVmaW5lIEFDMF9ERUZfVFhPUAkJMAorI2RlZmluZSBBQzFfREVGX1RYT1AJCTAKKyNkZWZpbmUgQUMyX0RFRl9UWE9QCQk5NAorI2RlZmluZSBBQzNfREVGX1RYT1AJCTQ3CisKKwkvLyBUdXJuIG9uIFFPcyBpZiB1c2UgSFQgcmF0ZS4KKwlpZiAocEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iVmFsaWQgPT0gRkFMU0UpCisJeworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJWYWxpZCA9IFRSVUU7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bMF0gPSAzOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzFdID0gNzsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblsyXSA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bM10gPSAxOworCisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bMF0gPSA0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzFdID0gNDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblsyXSA9IDM7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bM10gPSAyOworCisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMF0gPSAxMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFsxXSA9IDY7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMl0gPSA0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWF4WzNdID0gMzsKKworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbMF0gID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzFdICA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFsyXSAgPSBBQzJfREVGX1RYT1A7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFszXSAgPSBBQzNfREVGX1RYT1A7CisJfQorCUFzaWNTZXRFZGNhUGFybShwQWQsICZwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgTGlua1VwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIEJzc1R5cGUpCit7CisJVUxPTkcJTm93OworCVVJTlQzMglEYXRhOworCUJPT0xFQU4JQ2FuY2VsbGVkOworCVVDSEFSCVZhbHVlID0gMCwgaWR4OworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gTlVMTCwgKnBDdXJyRW50cnk7CisKKwlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKKworCS8vCisJLy8gQVNTT0MgLSBEaXNhc3NvY1RpbWVvdXRBY3Rpb24KKwkvLyBDTlRMIC0gRGlzLWFzc29jaWF0ZSBzdWNjZXNzZnVsCisJLy8gISEhIExJTksgRE9XTiAhISEKKwkvLyBbODg4ODhdIE9JRF84MDJfMTFfU1NJRCBzaG91bGQgaGF2ZSByZXR1cm5lZCBORFRFU1RfV0VQX0FQMihSZXR1cm5lZDogKQorCS8vCisJLy8gVG8gcHJldmVudCBEaXNhc3NvY1RpbWVvdXRBY3Rpb24gdG8gY2FsbCBMaW5rIGRvd24gYWZ0ZXIgd2UgbGluayB1cCwKKwkvLyBjYW5jZWwgdGhlIERpc2Fzc29jVGltZXIgbm8gbWF0dGVyIHdoYXQgaXQgc3RhcnQgb3Igbm90LgorCS8vCisJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgICZDYW5jZWxsZWQpOworCisJQ09QWV9TRVRUSU5HU19GUk9NX01MTUVfQVVYX1RPX0FDVElWRV9DRkcocEFkKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUNPUFlfSFRTRVRUSU5HU19GUk9NX01MTUVfQVVYX1RPX0FDVElWRV9DRkcocEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkvLyBJdCdzIHF1aXRlIGRpZmZpY3VsdCB0byB0ZWxsIGlmIGEgbmV3bHkgYWRkZWQgS0VZIGlzIFdFUCBvciBDS0lQIHVudGlsIGEgbmV3IEJTUworCS8vIGlzIGZvcm1lZCAoZWl0aGVyIEFTU09DL1JFLUFTU09DIGRvbmUgb3IgSUJTUyBzdGFydGVkLiBMaW5rVVAgc2hvdWxkIGJlIGEgc2FmZSBwbGFjZQorCS8vIHRvIGV4YW1pbmUgaWYgY2lwaGVyIGFsZ29yaXRobSBzd2l0Y2hpbmcgaXMgcmVxdWlyZWQuCisJLy9ydDI4NjBiLiBEb24ndCBrbm93IHdoeSBuZWVkIHRoaXMKKwlTd2l0Y2hCZXR3ZWVuV2VwQW5kQ2tpcChwQWQpOworCisKKwlpZiAoQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJeworCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19JTkZSQV9PTik7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCAgPT0gQldfNDApICYmCisJCQkocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9BQk9WRSkpCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCArIDI7CisJCX0KKwkJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAyKSAmJgorCQkJCSAocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggID09IEJXXzQwKSAmJgorCQkJCSAocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9CRUxPVykpCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCAtIDI7CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8gUm9nZXIgc3luYyBDYXJyaWVyCisJCS8vIE5vIGNhcnJpZXIgZGV0ZWN0aW9uIHdoZW4gYWRob2MKKwkJLy8gQ2FycmllckRldGVjdGlvblN0b3AocEFkKTsKKwkJcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5DRF9TdGF0ZSA9IENEX05PUk1BTDsKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkKKwkJCUFkaG9jVHVybk9uUW9zKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhQWRob2MgTElOSyBVUCAhISEgXG4iICkpOworCX0KKwllbHNlCisJeworCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfSU5GUkFfT04pOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19BREhPQ19PTik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhSW5mcmEgTElOSyBVUCAhISEgXG4iICkpOworCX0KKworCS8vIDMqMworCS8vIHJlc2V0IFR4IGJlYW1mb3JtaW5nIGJpdAorCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKKwlWYWx1ZSAmPSAofjB4MDEpOworCVZhbHVlIHw9IHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5UeEJGOworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIFZhbHVlKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIENoYW5nZSB0byBBUCBjaGFubmVsCisgICAgaWYgKChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA+IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpICYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCXsKKwkJLy8gTXVzdCB1c2luZyA0ME1Iei4KKwkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfNDA7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDE4KTsKKwkJVmFsdWUgfD0gMHgxMDsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgVmFsdWUpOworCisJCS8vICBSWCA6IGNvbnRyb2wgY2hhbm5lbCBhdCBsb3dlcgorCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHgyMCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKKworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmRGF0YSk7CisJCURhdGEgJj0gMHhmZmZmZmZmZTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOworCisJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJeworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MUEpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIDB4MEEpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTYpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhNDBNSHogTG93ZXIgTElOSyBVUCAhISEgQ29udHJvbCBDaGFubmVsIGF0IEJlbG93LiBDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKwl9CisJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkgJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisgICAgeworCSAgICAvLyBNdXN0IHVzaW5nIDQwTUh6LgorCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCSAgICBBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4MTgpOworCQlWYWx1ZSB8PSAweDEwOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOworCQlEYXRhIHw9IDB4MTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOworCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKKwkgICAgVmFsdWUgfD0gKDB4MjApOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisKKwkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCQl7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxQSk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgMHgwQSk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxNik7CisJCQkgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQl9CisKKwkgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIDQwTUh6IFVwcGVyIExJTksgVVAgISEhIENvbnRyb2wgQ2hhbm5lbCBhdCBVcHBlckNlbnRyYWwgPSAlZCBcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICkpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisgICAgeworCSAgICBwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4MTgpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOworCQlEYXRhICY9IDB4ZmZmZmZmZmU7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBEYXRhKTsKKworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHgyMCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKKworCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDE2KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAweDA4KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDExKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXJ0Mjg2MEMgISEhIFxuIiApKTsKKwkJfQorCisJICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISAyME1IeiBMSU5LIFVQICEhISBcbiIgKSk7CisgICAgfQorCisJUlRNUFNldEFHQ0luaXRWYWx1ZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyk7CisJLy8KKwkvLyBTYXZlIEJCUF9SNjYgdmFsdWUsIGl0IHdpbGwgYmUgdXNlZCBpbiBSVFVTQlJlc3VtZU1zZHVUcmFuc21pc3Npb24KKwkvLworCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICZwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgVVAgISEhIChCc3NUeXBlPSVkLCBBSUQ9JWQsIHNzaWQ9JXMsIENoYW5uZWw9JWQsIENlbnRyYWxDaGFubmVsID0gJWQpXG4iLAorCQlCc3NUeXBlLCBwQWQtPlN0YUFjdGl2ZS5BaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTElOSyBVUCAhISEgKERlbnNpdHkgPSVkLCApXG4iLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1wZHVEZW5zaXR5KSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJQXNpY1NldEJzc2lkKHBBZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJQXNpY1NldFNsb3RUaW1lKHBBZCwgVFJVRSk7CisJQXNpY1NldEVkY2FQYXJtKHBBZCwgJnBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0pOworCisJLy8gQ2FsbCB0aGlzIGZvciBSVFMgcHJvdGVjdGlvbmZvciBsZWdhY3kgcmF0ZSwgd2Ugd2lsbCBhbHdheXMgZW5hYmxlIFJUUyB0aHJlc2hvbGQsIGJ1dCBub3JtYWxseSBpdCB3aWxsIG5vdCBoaXQKKwlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIDAsIChPRkRNU0VUUFJPVEVDVCB8IENDS1NFVFBST1RFQ1QpLCBUUlVFLCBGQUxTRSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IFRSVUUpKQorCXsKKwkJLy8gVXBkYXRlIEhUIHByb3RlY3Rpb25mb3IgYmFzZWQgb24gQVAncyBvcGVyYXRpbmcgbW9kZS4KKyAgICAJaWYgKHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPT0gMSkKKyAgICAJeworICAgIAkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCAgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgVFJVRSk7CisgICAgCX0KKyAgICAJZWxzZQorICAgCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCAgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgRkFMU0UpOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkRyc0NvdW50ZXJzLCBzaXplb2YoQ09VTlRFUl9EUlMpKTsKKworCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7CisJcEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZSA9IE5vdzsgICAvLyBsYXN0IFJYIHRpbWVzdGFtcAorCisJaWYgKChwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlICE9IFJ0ODAyXzExUHJlYW1ibGVMb25nKSAmJgorCQlDQVBfSVNfU0hPUlRfUFJFQU1CTEVfT04ocEFkLT5TdGFBY3RpdmUuQ2FwYWJpbGl0eUluZm8pKQorCXsKKwkJTWxtZVNldFR4UHJlYW1ibGUocEFkLCBSdDgwMl8xMVByZWFtYmxlU2hvcnQpOworCX0KKworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCk7CisKKwlpZiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID09IFJEX1NJTEVOQ0VfTU9ERSkKKwl7CisjaWZkZWYgREZTX1NVUFBPUlQKKwkJUmFkYXJEZXRlY3Rpb25TdG9wKHBBZCk7CisjZW5kaWYgLy8gREZTX1NVUFBPUlQgLy8KKwl9CisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID0gUkRfTk9STUFMX01PREU7CisKKwlpZiAoQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJeworCQlNYWtlSWJzc0JlYWNvbihwQWQpOworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJCSYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQorCQkJJiYgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSkKKwkJeworCQkJOyAvL0RvIG5vdGhpbmcKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzaWNFbmFibGVJYnNzU3luYyhwQWQpOworCQl9CisKKwkJLy8gSW4gYWQgaG9jIG1vZGUsIHVzZSBNQUMgdGFibGUgZnJvbSBpbmRleCAxLgorCQkvLyBwLnMgQVNJQyB1c2UgYWxsIDB4ZmYgYXMgdGVybWluYXRpb24gb2YgV0NJRCB0YWJsZSBzZWFyY2guVG8gcHJldmVudCBpdCdzIDB4ZmYtZmYtZmYtZmYtZmYtZmYsIFdyaXRlIDAgaGVyZS4KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1dDSURfQkFTRSwgMHgwMCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTgwOCwgMHgwMCk7CisKKwkJLy8gSWYgV0VQIGlzIGVuYWJsZWQsIGFkZCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyBpbnRvIEFzaWMKKwkJLy8gRmlsbCBpbiBTaGFyZWQgS2V5IFRhYmxlKG9mZnNldDogMHg2YzAwKSBhbmQgU2hhcmVkIEtleSBNb2RlKG9mZnNldDogMHg3MDAwKQorCisJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpCisJCXsKKwkJCVBVQ0hBUglLZXk7CisJCQlVQ0hBUiAJQ2lwaGVyQWxnOworCisJCQlmb3IgKGlkeD0wOyBpZHggPCBTSEFSRV9LRVlfTlVNOyBpZHgrKykKKyAgICAgICAgCXsKKwkJCQlDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLkNpcGhlckFsZzsKKyAgICAJCQlLZXkgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleTsKKworCQkJCWlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbiA+IDApCisJCQkJeworCQkJCQkvLyBTZXQga2V5IG1hdGVyaWFsIGFuZCBjaXBoZXJBbGcgdG8gQXNpYworICAgIAkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLCBCU1MwLCBpZHgsIENpcGhlckFsZywgS2V5LCBOVUxMLCBOVUxMKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCkKKwkJCQkJeworCQkJCQkJLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBncm91cCBrZXkgdGFibGUKKwkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBCU1MwLCBpZHgsIENpcGhlckFsZywgTlVMTCk7CisJCQkJCX0KKwkJCQl9CisKKworCQkJfQorCQl9CisJCS8vIElmIFdQQU5vbmUgaXMgZW5hYmxlZCwgYWRkIGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIGludG8gQXNpYworCQkvLyBGaWxsIGluIFNoYXJlZCBLZXkgVGFibGUob2Zmc2V0OiAweDZjMDApIGFuZCBTaGFyZWQgS2V5IE1vZGUob2Zmc2V0OiAweDcwMDApCisJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IDA7CS8vIGFsd2F5cyBiZSB6ZXJvCisKKyAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVswXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwgcEFkLT5TdGFDZmcuUE1LLCBMRU5fVEtJUF9FSyk7CisKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsICZwQWQtPlN0YUNmZy5QTUtbMTZdLCBMRU5fVEtJUF9SWE1JQ0spOworICAgIAkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLCAmcEFkLT5TdGFDZmcuUE1LWzE2XSwgTEVOX1RLSVBfVFhNSUNLKTsKKyAgICAgICAgICAgIH0KKworCQkJLy8gRGVjaWRlIGl0cyBDaGlwZXJBbGcKKwkJCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7CisJCQllbHNlIGlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKwkJCWVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJVbmtub3cgQ2lwaGVyICg9JWQpLCBzZXQgQ2lwaGVyIHRvIEFFU1xuIiwgcEFkLT5TdGFDZmcuUGFpckNpcGhlcikpOworCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisgICAgICAgICAgICB9CisKKwkJCS8vIFNldCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyB0byBBc2ljCisJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorCQkJCQkJCQkgIEJTUzAsCisJCQkJCQkJCSAgMCwKKwkJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisJCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAorCQkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAorCQkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljKTsKKworICAgICAgICAgICAgLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBncm91cCBrZXkgdGFibGUKKwkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBCU1MwLCAwLCBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsIE5VTEwpOworCisJCX0KKworCX0KKwllbHNlIC8vIEJTU19JTkZSQQorCXsKKwkJLy8gQ2hlY2sgdGhlIG5ldyBTU0lEIHdpdGggbGFzdCBTU0lECisJCXdoaWxlIChDYW5jZWxsZWQgPT0gVFJVRSkKKwkJeworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkxhc3RTc2lkTGVuID09IHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pCisJCQl7CisJCQkJaWYgKFJUTVBDb21wYXJlTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLkxhc3RTc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZExlbikgPT0gMCkKKwkJCQl7CisJCQkJCS8vIExpbmsgdG8gdGhlIG9sZCBvbmUgbm8gbGlua2Rvd24gaXMgcmVxdWlyZWQuCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8vIFNlbmQgbGluayBkb3duIGV2ZW50IGJlZm9yZSBzZXQgdG8gbGluayB1cAorCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKwkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBBQSFcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8KKwkJLy8gT24gV1BBIG1vZGUsIFJlbW92ZSBBbGwgS2V5cyBpZiBub3QgY29ubmVjdCB0byB0aGUgbGFzdCBCU1NJRAorCQkvLyBLZXkgd2lsbCBiZSBzZXQgYWZ0ZXIgNC13YXkgaGFuZHNoYWtlLgorCQkvLworCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkpCisJCXsKKwkJCVVMT05HIAkJSVY7CisKKwkJCS8vIFJlbW92ZSBhbGwgV1BBIGtleXMKKwkJCVJUTVBXUEFSZW1vdmVBbGxLZXlzKHBBZCk7CisJCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCXBBZC0+U3RhQ2ZnLlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQOworCisJCQkvLyBGaXhlZCBjb25uZWN0aW9uIGZhaWxlZCB3aXRoIFJhbmdlIE1heGltaXplciAtIDUxNSBBUCAoTWFydmVsbCBDaGlwKSB3aGVuIHNlY3VyaXR5IGlzIFdQQVBTSy9US0lQCisJCQkvLyBJZiBJViByZWxhdGVkIHZhbHVlcyBhcmUgdG9vIGxhcmdlIGluIEdyb3VwTXNnMiwgQVAgd291bGQgaWdub3JlIHRoaXMgbWVzc2FnZS4KKwkJCUlWID0gMDsKKwkJCUlWIHw9IChwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPDwgMzApOworCQkJQXNpY1VwZGF0ZVdDSURJVkVJVihwQWQsIEJTU0lEX1dDSUQsIElWLCAwKTsKKwkJfQorCQkvLyBOT1RFOgorCQkvLyB0aGUgZGVjaXNpb24gb2YgdXNpbmcgInNob3J0IHNsb3QgdGltZSIgb3Igbm90IG1heSBjaGFuZ2UgZHluYW1pY2FsbHkgZHVlIHRvCisJCS8vIG5ldyBTVEEgYXNzb2NpYXRpb24gdG8gdGhlIEFQLiBzbyB3ZSBoYXZlIHRvIGRlY2lkZSB0aGF0IHVwb24gcGFyc2luZyBCRUFDT04sIG5vdCBoZXJlCisKKwkJLy8gTk9URToKKwkJLy8gdGhlIGRlY2lzaW9uIHRvIHVzZSAiUlRDL0NUUyIgb3IgIkNUUy10by1zZWxmIiBwcm90ZWN0aW9uIG9yIG5vdCBtYXkgY2hhbmdlIGR5bmFtaWNhbGx5CisJCS8vIGR1ZSB0byBuZXcgU1RBIGFzc29jaWF0aW9uIHRvIHRoZSBBUC4gc28gd2UgaGF2ZSB0byBkZWNpZGUgdGhhdCB1cG9uIHBhcnNpbmcgQkVBQ09OLCBub3QgaGVyZQorCisJCUNvbXBvc2VQc1BvbGwocEFkKTsKKwkJQ29tcG9zZU51bGxGcmFtZShwQWQpOworCisJCQlBc2ljRW5hYmxlQnNzU3luYyhwQWQpOworCisJCS8vIEFkZCBCU1NJRCB0byBXQ0lEIHNlYXJjaCB0YWJsZQorCQlBc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCBCU1NJRF9XQ0lELCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKwkJLy8gYWRkIHRoaXMgQlNTSUQgZW50cnkgaW50byBIQVNIIHRhYmxlCisJCXsKKwkJCVVDSEFSIEhhc2hJZHg7CisKKwkJCS8vcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJCQlIYXNoSWR4ID0gTUFDX0FERFJfSEFTSF9JTkRFWChwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlpZiAocEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XSA9PSBOVUxMKQorCQkJeworCQkJCXBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPSBwRW50cnk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEN1cnJFbnRyeSA9IHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF07CisJCQkJd2hpbGUgKHBDdXJyRW50cnktPnBOZXh0ICE9IE5VTEwpCisJCQkJCXBDdXJyRW50cnkgPSBwQ3VyckVudHJ5LT5wTmV4dDsKKwkJCQlwQ3VyckVudHJ5LT5wTmV4dCA9IHBFbnRyeTsKKwkJCX0KKwkJfQorCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisKKwkJLy8gSWYgV0VQIGlzIGVuYWJsZWQsIGFkZCBwYWlld2lzZSBhbmQgc2hhcmVkIGtleQorI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgaWYgKCgocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKSYmCisgICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkmJgorICAgICAgICAgICAgIChwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkpIHx8CisgICAgICAgICAgICAoKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKSYmCisgICAgICAgICAgICAgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpKSkKKyNlbHNlCisJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCQl7CisJCQlQVUNIQVIJS2V5OworCQkJVUNIQVIgCUNpcGhlckFsZzsKKworCQkJZm9yIChpZHg9MDsgaWR4IDwgU0hBUkVfS0VZX05VTTsgaWR4KyspCisgICAgICAgIAl7CisJCQkJQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5DaXBoZXJBbGc7CisgICAgCQkJS2V5ID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXk7CisKKwkJCQlpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW4gPiAwKQorCQkJCXsKKwkJCQkJLy8gU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMKKyAgICAJCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgaWR4LCBDaXBoZXJBbGcsIEtleSwgTlVMTCwgTlVMTCk7CisKKwkJCQkJaWYgKGlkeCA9PSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQpCisJCQkJCXsKKwkJCQkJCS8vIEFzc2lnbiBncm91cCBrZXkgaW5mbworCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsIEJTUzAsIGlkeCwgQ2lwaGVyQWxnLCBOVUxMKTsKKworCQkJCQkJLy8gQXNzaWduIHBhaXJ3aXNlIGtleSBpbmZvCisJCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwgQlNTMCwgaWR4LCBDaXBoZXJBbGcsIHBFbnRyeSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBvbmx5IElORlJBU1RSVUNUVVJFIG1vZGUgbmVlZCB0byBpbmRpY2F0ZSBjb25uZWN0aXZpdHkgaW1tZWRpYXRlbHk7IEFESE9DIG1vZGUKKwkJLy8gc2hvdWxkIHdhaXQgdW50aWwgYXQgbGVhc3QgMiBhY3RpdmUgbm9kZXMgaW4gdGhpcyBCU1NJRC4KKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisKKyAgICAgICAgLy8gRm9yIEdVSSArKworCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPCBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCXsKKwkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsKKwkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisJCX0KKyAgICAgICAgLy8gLS0KKworCQkvLyBBZGQgQlNTSUQgaW4gbXkgTUFDIFRhYmxlLgorICAgICAgICBOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCQlSVE1QTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBNQUNfQUREUl9MRU4pOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFpZCA9IEJTU0lEX1dDSUQ7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0ucEFkID0gcEFkOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlZhbGlkQXNDTEkgPSBUUlVFOwkvL0FsdGhvdWdoIHRoaXMgaXMgYnNzaWQuLnN0aWxsIHNldCBWYWxpZEFzQ2wKKwkJcEFkLT5NYWNUYWIuU2l6ZSA9IDE7CS8vIGluZnJhIG1vZGUgYWx3YXlzIHNldCBNQUN0YWIgc2l6ZSA9MS4KKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Tc3QgPSBTU1RfQVNTT0M7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQXV0aFN0YXRlID0gU1NUX0FTU09DOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uV2VwU3RhdHVzID0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIFVQICEhISAgQ2xpZW50U3RhdHVzRmxhZ3M9JWx4KVxuIiwKKwkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQ2xpZW50U3RhdHVzRmxhZ3MpKTsKKworCQlNbG1lVXBkYXRlVHhSYXRlcyhwQWQsIFRSVUUsIEJTUzApOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlNbG1lVXBkYXRlSHRUeFJhdGVzKHBBZCwgQlNTMCk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIFVQICEhIChTdGFBY3RpdmUuYkh0RW5hYmxlID0lZCwgKVxuIiwgcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkvLworCQkvLyBSZXBvcnQgQWRqYWNlbnQgQVAgcmVwb3J0LgorCQkvLworI2lmZGVmIExFQVBfU1VQUE9SVAorCQlDQ1hBZGphY2VudEFQUmVwb3J0KHBBZCk7CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpCisJCXsKKwkJCWlmICgocEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUpICYmIChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAmIDB4MDAwMDAwMDMpID09IDMpCisJCQl7CisKKwkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUElHR1lCQUNLX0lOVVNFRCk7CisJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCk7CisgICAgICAgICAgICAgICAgUlRNUFNldFBpZ2d5QmFjayhwQWQsIFRSVUUpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR1cm4gb24gUGlnZ3ktQmFja1xuIikpOworCQkJfQorCQkJZWxzZSBpZiAocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAxKQorCQkJeworCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpOworCQkJfQorCQl9CisKKwkJaWYgKHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICE9IDB4MCkKKwkJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSkpCisJCQl7CisJCQkJQXNpY0VuYWJsZVJERyhwQWQpOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmQ0xJRU5UX1NUQVRVU19SQUxJTktfQ0hJUFNFVCk7CisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBmQ0xJRU5UX1NUQVRVU19SQUxJTktfQ0hJUFNFVCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpOworCQkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCBmQ0xJRU5UX1NUQVRVU19SQUxJTktfQ0hJUFNFVCk7CisJCX0KKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJORElTX1NUQVRVU19NRURJQV9DT05ORUNUIEV2ZW50IEIhLkJBQ2FwYWJpbGl0eSA9ICV4LiBDbGllbnRTdGF0dXNGbGFncyA9ICVseFxuIiwgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LndvcmQsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQ2xpZW50U3RhdHVzRmxhZ3MpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIFNldCBMRUQKKwlSVE1QU2V0TEVEKHBBZCwgTEVEX0xJTktfVVApOworCisJcEFkLT5NbG1lLlBlcmlvZGljUm91bmQgPSAwOworCXBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kID0gMDsKKwlwQWQtPmJDb25maWdDaGFuZ2VkID0gRkFMU0U7ICAgICAgICAvLyBSZXNldCBjb25maWcgZmxhZworCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOyAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbiB0byBsaW5rIGlzIHVwCisKKwkvLyBTZXQgYXNpYyBhdXRvIGZhbGwgYmFjaworCXsKKwkJUFVDSEFSCQkJCQlwVGFibGU7CisJCVVDSEFSCQkJCQlUYWJsZVNpemUgPSAwOworCisJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLCAmcFRhYmxlLCAmVGFibGVTaXplLCAmcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXgpOworCQlBc2ljVXBkYXRlQXV0b0ZhbGxCYWNrVGFibGUocEFkLCBwVGFibGUpOworCX0KKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisgICAgcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS53b3JkOworICAgIHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUud29yZDsKKwlpZiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gRkFMU0UpCisJeworCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gMzIpCisJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfODAwOworCisJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID4gTUNTXzcpIHx8IChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gMzIpKQorCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU1RCQyA9IFNUQkNfTk9ORTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJLy8gSWYgdGhlIGxlZ2FjeSBtb2RlIGlzIHNldCwgb3ZlcndyaXRlIHRoZSB0cmFuc21pdCBzZXR0aW5nIG9mIHRoaXMgZW50cnkuCisJCWlmIChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkKKwkJCVJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGUsIHBFbnRyeSk7CisJfQorCWVsc2UKKwkJcEVudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCA9IFRSVUU7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCS8vICBMZXQgTGluayBTdGF0dXMgUGFnZSBkaXNwbGF5IGZpcnN0IGluaXRpYWwgcmF0ZS4KKwlwQWQtPkxhc3RUeFJhdGUgPSAoVVNIT1JUKShwRW50cnktPkhUUGh5TW9kZS53b3JkKTsKKwkvLyBTZWxlY3QgREFDIGFjY29yZGluZyB0byBIVCBvciBMZWdhY3kKKwlpZiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gIT0gMHgwMCkKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDE4KTsKKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikKKwkJeworCQkgICAgVmFsdWUgfD0gMHgxMDsKKwkJfQorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBWYWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDE4KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgVmFsdWUpOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBGQUxTRSkKKwl7CisJfQorCWVsc2UgaWYgKHBFbnRyeS0+TWF4UkFtcGR1RmFjdG9yID09IDApCisJeworCSAgICAvLyBJZiBIVCBBUCBkb2Vzbid0IHN1cHBvcnQgTWF4UkFtcGR1RmFjdG9yID0gMSwgd2UgbmVlZCB0byBzZXQgbWF4IFBTRFUgdG8gMC4KKwkgICAgLy8gQmVjYXVzZSBvdXIgSW5pdCB2YWx1ZSBpcyAxIGF0IE1BQ1JlZ1RhYmxlLgorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQVhfTEVOX0NGRywgMHgwZmZmKTsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBQYXRjaCBmb3IgTWFydmVsIEFQIHRvIGdhaW4gaGlnaCB0aHJvdWdocHV0CisJLy8gTmVlZCB0byBzZXQgYXMgZm9sbG93aW5nLAorCS8vIDEuIFNldCB0eG9wIGluIHJlZ2lzdGVyLUVEQ0FfQUMwX0NGRyBhcyAweDYwCisJLy8gMi4gU2V0IEVuVFhXcml0ZUJhY2tERE9ORSBpbiByZWdpc3Rlci1XUERNQV9HTE9fQ0ZHIGFzIHplcm8KKwkvLyAzLiBQQkZfTUFYX1BDTlQgYXMgMHgxRjNGQkY5RgorCS8vIDQuIGtpY2sgcGVyIHR3byBwYWNrZXRzIHdoZW4gZGVxdWV1ZQorCS8vCisJLy8gVHhvcCBjYW4gb25seSBiZSBtb2RpZmllZCB3aGVuIFJERyBpcyBvZmYsIFdNTSBpcyBkaXNhYmxlIGFuZCBUeEJ1cnN0IGlzIGVuYWJsZQorCS8vCisJLy8gaWYgMS4gTGVnYWN5IEFQIFdNTSBvbiwgIG9yIDIuIDExbiBBUCwgQU1QRFUgZGlzYWJsZS4gIEZvcmNlIHR1cm4gb2ZmIGJ1cnN0IG5vIG1hdHRlciB3aGF0IGJFbmFibGVUeEJ1cnN0IGlzLgorI2lmZGVmIERPVDExX05fU1VQUE9SVAorLy8JaWYgKCghSVNfUlQzMHh4KHBBZCkpICYmCisJaWYgKCEoKHBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID09IDEpJiYocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMSkpICYmCisJCSgoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IEZBTFNFKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpKQorCQl8fCAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IFRSVUUpICYmIChwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID09IEJBX05PVFVTRSkpKSkKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmRGF0YSk7CisJCURhdGEgICY9IDB4RkZGRkZGMDA7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMwX0NGRywgRGF0YSk7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX01BWF9QQ05ULCAweDFGM0Y3RjlGKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhidXJzdCAxXG4iKSk7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlpZiAocEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QpCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVEQ0FfQUMwX0NGRywgJkRhdGEpOworCQlEYXRhICAmPSAweEZGRkZGRjAwOworCQlEYXRhICB8PSAweDYwOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOworCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOb3dBdGhlcm9zQnVyc3RPbiA9IFRSVUU7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX01BWF9QQ05ULCAweDFGM0ZCRjlGKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhidXJzdCAyXG4iKSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmRGF0YSk7CisJCURhdGEgICY9IDB4RkZGRkZGMDA7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMwX0NGRywgRGF0YSk7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX01BWF9QQ05ULCAweDFGM0Y3RjlGKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhidXJzdCAzXG4iKSk7CisJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gUmUtY2hlY2sgdG8gdHVybiBvbiBUWCBidXJzdCBvciBub3QuCisJaWYgKChwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJMYXN0QXRoZXJvcyA9PSBUUlVFKSAmJiAoKFNUQV9XRVBfT04ocEFkKSl8fChTVEFfVEtJUF9PTihwQWQpKSkpCisJeworCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOZXh0RGlzYWJsZVJ4QkEgPSBUUlVFOworCQlpZiAocEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QpCisJCXsKKwkJICAgIFVJTlQzMiBNQUNWYWx1ZSA9IDA7CisJCQkvLyBGb3JjZSBkaXNhYmxlICBUWE9QIHZhbHVlIGluIHRoaXMgY2FzZS4gVGhlIHNhbWUgYWN0aW9uIGluIE1MTUVVcGRhdGVQcm90ZWN0IHRvby4KKwkJCS8vIEkgZGlkbid0IGNoYW5nZSBQQkZfTUFYX1BDTlQgc2V0dGluZy4KKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmTUFDVmFsdWUpOworCQkJTUFDVmFsdWUgICY9IDB4RkZGRkZGMDA7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIE1BQ1ZhbHVlKTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYk5vd0F0aGVyb3NCdXJzdE9uID0gRkFMU0U7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTmV4dERpc2FibGVSeEJBID0gRkFMU0U7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTGFzdEF0aGVyb3MgPSBGQUxTRTsKKwlDT1BZX01BQ19BRERSKHBBZC0+Q29tbW9uQ2ZnLkxhc3RCc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXBBZC0+Yk5leHREaXNhYmxlUnhCQT0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOZXh0RGlzYWJsZVJ4QkEpKTsKKwkvLyBCU1NJRCBhZGQgaW4gb25lIE1BQyBlbnRyeSB0b28uICBCZWNhdXNlIGluIFR4LCBBU0lDIG5lZWQgdG8gY2hlY2sgQ2lwaGVyIGFuZCBJVi9FSVYsIEJBYml0bWFwCisJLy8gUHRoZXIgaW5mb3JtYXRpb24gaW4gTUFDVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0gaXMgbm90IG5lY2Vzc2FyeSBmb3IgZHJpdmVyLgorCS8vIE5vdGU6IEFzIFNUQSwgVGhlIE1BQ1RhYi5Db250ZW50W0JTU0lEX1dDSURdLiBQYWlyd2lzZUtleSBhbmQgU2hhcmVkIEtleSBmb3IgQlNTMCBhcmUgdGhlIHNhbWUuCisKKyAgICBpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDw9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKyAgICB7CisgICAgICAgIHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJCXBBZC0+U3RhQ2ZnLlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbDsKKwl9CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCXBFbnRyeS0+UG9ydFNlY3VyZWQgPSBwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZDsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisgICAgLy8KKwkvLyBQYXRjaCBBdGhlcm9zIEFQIFRYIHdpbGwgYnJlYWtkb3duIGlzc3VlLgorCS8vIEFQIE1vZGVsOiBETGluayBEV0wtODIwMEFQCisJLy8KKwlpZiAoSU5GUkFfT04ocEFkKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmIFNUQV9US0lQX09OKHBBZCkpCisJeworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9QQVJTRVJfQ0ZHLCAweDAxKTsKKwl9CisJZWxzZQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfUEFSU0VSX0NGRywgMHgwMCk7CisJfQorCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJaWYgKChwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuYjIwNDBDb2V4aXN0U2NhblN1cCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTEpKQorCXsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NDQU5fMjA0MCk7CisJCUJ1aWxkRWZmZWN0ZWRDaGFubmVsTGlzdChwQWQpOworCX0KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCURpc2Nvbm5lY3QgY3VycmVudCBCU1NJRAorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJLSBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCUlzUmVxRnJvbUFQCQktIFJlcXVlc3QgZnJvbSBBUAorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCVdlIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBrbm93IGl0J3MgdGhpcyByZXF1c3QgZnJvbSBBUC4KKwkJSWYgeWVzISB3ZSBuZWVkIHRvIGRvIGV4dHJhIGhhbmRsaW5nLCBmb3IgZXhhbXBsZSwgcmVtb3ZlIHRoZSBXUEEga2V5LgorCQlPdGhlcndpc2Ugb24gNC13YXkgaGFuZHNoYWtpbmcgd2lsbCBmYWllZCwgc2luY2UgdGhlIFdQQSBrZXkgZGlkbid0IGJlCisJCXJlbW92ZSB3aGlsZSBhdXRvIHJlY29ubmVjdC4KKwkJRGlzY29ubmVjdCByZXF1ZXN0IGZyb20gQVAsIGl0IG1lYW5zIHdlIHdpbGwgc3RhcnQgYWZyZXNoIDQtd2F5IGhhbmRzaGFraW5nCisJCW9uIFdQQSBtb2RlLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIExpbmtEb3duKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOICBCT09MRUFOICAgICAgSXNSZXFGcm9tQVApCit7CisJVUNIQVIJCQkgICAgaSwgQnl0ZVZhbHVlID0gMDsKKworCS8vIERvIG5vdGhpbmcgaWYgbW9uaXRvciBtb2RlIGlzIG9uCisJaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJcmV0dXJuOworCisjaWZkZWYgUkFMSU5LX0FURQorCS8vIE5vdGhpbmcgdG8gZG8gaW4gQVRFIG1vZGUuCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisgICAgaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCXsKKwkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgRE9XTiAhISFcbiIpKTsKKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpOworCisJaWYgKEFESE9DX09OKHBBZCkpCQkvLyBBZGhvYyBtb2RlIGxpbmsgZG93bgorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgRE9XTiAxISEhXG4iKSk7CisKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOworCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCQlCc3NUYWJsZURlbGV0ZUVudHJ5KCZwQWQtPlNjYW5UYWIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1hY1RhYi5TaXplPSVkICEhIVxuIiwgcEFkLT5NYWNUYWIuU2l6ZSkpOworCX0KKwllbHNlCQkJCQkvLyBJbmZyYSBzdHJ1Y3R1cmUgbW9kZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgRE9XTiAyISEhXG4iKSk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJLy8gRExTIHRlYXIgZG93biBmcmFtZSBtdXN0IGJlIHNlbnQgYmVmb3JlIGxpbmsgZG93bgorCQkvLyBzZW5kIERMUy1URUFSX0RPV04gbWVzc2FnZQorCQlpZiAocEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXsKKwkJCS8vIHRlYXIgZG93biBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwkJCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSkKKwkJCQl7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCQlSVE1QU2VuZERMU1RlYXJEb3duRnJhbWUocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIHRlYXIgZG93biBwZWVyIGRscyB0YWJsZSBlbnRyeQorCQkJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSAgRExTX0ZJTklTSCkpCisJCQkJeworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfTk9ORTsKKwkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJfQorCQkJfQorCQl9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfSU5GUkFfT04pOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCisJCS8vIFNhdmVkIGxhc3QgU1NJRCBmb3IgbGlua3VwIGNvbXBhcmlzb24KKwkJcEFkLT5Db21tb25DZmcuTGFzdFNzaWRMZW4gPSBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5Db21tb25DZmcuTGFzdFNzaWRMZW4pOworCQlDT1BZX01BQ19BRERSKHBBZC0+Q29tbW9uQ2ZnLkxhc3RCc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQlpZiAocEFkLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID09IFRSVUUpCisJCXsKKwkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgICAgICAgICAgcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQSFcbiIpKTsKKwkJCXBBZC0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9IEZBTFNFOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgLy8KKwkJCS8vIElmIGRpc2Fzc29jaWF0aW9uIHJlcXVlc3QgaXMgZnJvbSBORElTLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gZGVsZXRlIEJTU0lEIGZyb20gZW50cnkuCisJCQkvLyBPdGhlcndpc2UgbG9zdCBiZWFjb24gb3IgcmVjZWl2ZSBEZS1BdXRoZW50aWNhdGlvbiBmcm9tIEFQLAorCQkJLy8gdGhlbiB3ZSBzaG91bGQgZGVsZXRlIEJTU0lEIGZyb20gQnNzVGFibGUuCisJCQkvLyBJZiB3ZSBkb24ndCBkZWxldGUgZnJvbSBlbnRyeSwgcm9hbWluZyB3aWxsIGZhaWwuCisJCQkvLworCQkJQnNzVGFibGVEZWxldGVFbnRyeSgmcEFkLT5TY2FuVGFiLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCX0KKworCQkvLyByZXN0b3JlIGJhY2sgdG8gLQorCQkvLyAgICAgIDEuIGxvbmcgc2xvdCAoMjAgdXMpIG9yIHNob3J0IHNsb3QgKDkgdXMpIHRpbWUKKwkJLy8gICAgICAyLiB0dXJuIG9uL29mZiBSVFMvQ1RTIGFuZC9vciBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uCisJCS8vICAgICAgMy4gc2hvcnQgcHJlYW1ibGUKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpOworCisJCWlmIChwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQUmVwb3J0RmxhZyA9PSBUUlVFKQorCQl7CisJCQkvLworCQkJLy8gUmVjb3JkIGN1cnJlbnQgQVAncyBpbmZvcm1hdGlvbi4KKwkJCS8vIGZvciBsYXRlciB1c2VkIHJlcG9ydGluZyBBZGphY2VudCBBUCByZXBvcnQuCisJCQkvLworCQkJcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQkJcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUFNzaWRMZW4gPSBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuOworCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUFNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+U3RhQ2ZnLkNDWEFkamFjZW50QVBTc2lkTGVuKTsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUEJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCX0KKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJLy8gQ291bnRyeSBJRSBvZiB0aGUgQVAgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHdpbGwgYmUgdXNlZC4KKwkJaWYgKHBBZC0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlICE9IFJ0ODAyXzExX0RfTm9uZSkKKwkJeworCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlWzBdLCAmcEFkLT5TdGFDZmcuU3RhT3JpQ291bnRyeUNvZGVbMF0sIDIpOworCQkJcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5ID0gcEFkLT5TdGFDZmcuU3RhT3JpR2VvZ3JhcGh5OworCQkJQnVpbGRDaGFubmVsTGlzdEV4KHBBZCk7CisJCX0KKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKwl9CisKKwlmb3IgKGk9MTsgaTxNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0NMSSA9PSBUUlVFKQorCQkJTWFjVGFibGVEZWxldGVFbnRyeShwQWQsIHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uQWlkLCBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFkZHIpOworCX0KKworCXBBZC0+U3RhQ2ZnLkNDWFFvc0VDV01pbgk9IDQ7CisJcEFkLT5TdGFDZmcuQ0NYUW9zRUNXTWF4CT0gMTA7CisKKwlBc2ljU2V0U2xvdFRpbWUocEFkLCBUUlVFKTsgLy9GQUxTRSk7CisJQXNpY1NldEVkY2FQYXJtKHBBZCwgTlVMTCk7CisKKwkvLyBTZXQgTEVECisJUlRNUFNldExFRChwQWQsIExFRF9MSU5LX0RPV04pOworICAgIHBBZC0+TGVkSW5kaWNhdG9yU3RyZWd0aCA9IDB4RjA7CisgICAgUlRNUFNldFNpZ25hbExFRChwQWQsIC0xMDApOwkvLyBGb3JjZSBzaWduYWwgc3RyZW5ndGggTGVkIHRvIGJlIHR1cm5lZCBvZmYsIGZpcm13YXJlIGlzIG5vdCBkb25lIGl0LgorCisJCUFzaWNEaXNhYmxlU3luYyhwQWQpOworCisJcEFkLT5NbG1lLlBlcmlvZGljUm91bmQgPSAwOworCXBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kID0gMDsKKworCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKKwl7CisJLy8gUmVtb3ZlIFN0YUNmZyBJbmZvcm1hdGlvbiBhZnRlciBsaW5rIGRvd24KKwlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKwlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCQlwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuID0gMDsKKwl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BZGRIdEluZm8sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSAwOworCXBBZC0+TWxtZUF1eC5OZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIFJlc2V0IFdQQS1QU0sgc3RhdGUuIE9ubHkgcmVzZXQgd2hlbiBzdXBwbGljYW50IGVuYWJsZWQKKwlpZiAocEFkLT5TdGFDZmcuV3BhU3RhdGUgIT0gU1NfTk9UVVNFKQorCXsKKwkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19TVEFSVDsKKwkJLy8gQ2xlYXIgUmVwbGF5IGNvdW50ZXIKKwkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgOCk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuRGxzUmVwbGF5Q291bnRlciwgOCk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJfQorCisKKwkvLworCS8vIGlmIGxpbmsgZG93biBjb21lIGZyb20gQVAsIHdlIG5lZWQgdG8gcmVtb3ZlIGFsbCBXUEEga2V5cyBvbiBXUEEgbW9kZS4KKwkvLyBvdGhlcndpc2Ugd2lsbCBjYXVzZSA0LXdheSBoYW5kc2hha2luZyBmYWlsZWQsIHNpbmNlIHRoZSBXUEEga2V5IG5vdCBlbXB0eS4KKwkvLworCWlmICgoSXNSZXFGcm9tQVApICYmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpKQorCXsKKwkJLy8gUmVtb3ZlIGFsbCBXUEEga2V5cworCQlSVE1QV1BBUmVtb3ZlQWxsS2V5cyhwQWQpOworCX0KKworCS8vIDgwMi4xeCBwb3J0IGNvbnRyb2wKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJLy8gUHJldmVudCBjbGVhciBQb3J0U2VjdXJlZCBoZXJlIHdpdGggc3RhdGljIFdFUAorCS8vIE5ldHdvcmtNYW5nZXIgc2V0IHNlY3VyaXR5IHBvbGljeSBmaXJzdCB0aGVuIHNldCBTU0lEIHRvIGNvbm5lY3QgQVAuCisJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAmJgorCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKSAmJgorCQkocEFkLT5TdGFDZmcuSUVFRTgwMjFYID09IEZBTFNFKSkKKwl7CisJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJeworCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJcEFkLT5TdGFDZmcuUHJpdmFjeUZpbHRlciA9IE5kaXM4MDJfMTFQcml2RmlsdGVyODAyMXhXRVA7CisJfQorCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKwlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBvcnRTZWN1cmVkID0gcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQ7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCXBBZC0+U3RhQ2ZnLk1pY0VyckNudCA9IDA7CisKKwkvLyBUdXJuIG9mZiBDa2lwIGNvbnRyb2wgZmxhZworCXBBZC0+U3RhQ2ZnLmJDa2lwT24gPSBGQUxTRTsKKwlwQWQtPlN0YUNmZy5DQ1hFbmFibGUgPSBGQUxTRTsKKworICAgIHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJLy8gVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uIHRvIGxpbmsgaXMgdXAKKwlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOworCisgICAgLy9wQWQtPlN0YUNmZy5BZGhvY0JPbmx5Sm9pbmVkID0gRkFMU0U7CisJLy9wQWQtPlN0YUNmZy5BZGhvY0JHSm9pbmVkID0gRkFMU0U7CisJLy9wQWQtPlN0YUNmZy5BZGhvYzIwTkpvaW5lZCA9IEZBTFNFOworICAgIHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID0gRkFMU0U7CisKKwkvLyBSZXNldCB0aGUgQ3VycmVudCBBUCdzIElQIGFkZHJlc3MKKwlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5BaXJvbmV0SVBBZGRyZXNzLCA0KTsKKyNpZmRlZiBSVDI4NzAKKwlwQWQtPmJVc2JUeEJ1bGtBZ2dyZSA9IEZBTFNFOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJLy8gQ2xlYW4gYXNzb2NpYXRpb24gaW5mb3JtYXRpb24KKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5TdGFDZmcuQXNzb2NJbmZvLCBzaXplb2YoTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04pKTsKKwlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKKwlwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbiA9IDA7CisJcEFkLT5TdGFDZmcuUmVzVmFySUVMZW4gPSAwOworCisJLy8KKwkvLyBSZXNldCBSU1NJIHZhbHVlIGFmdGVyIGxpbmsgZG93bgorCS8vCisJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCA9IDA7CisJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMFg4ID0gMDsKKwlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxID0gMDsKKwlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxWDggPSAwOworCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIgPSAwOworCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTJYOCA9IDA7CisKKwkvLyBSZXN0b3JlIE1sbWVSYXRlCisJcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5CYXNpY01sbWVSYXRlOworCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBwQWQtPkNvbW1vbkNmZy5CYXNpY01sbWVSYXRlOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8KKwkvLyBBZnRlciBMaW5rIGRvd24sIHJlc2V0IHBpZ2d5LWJhY2sgc2V0dGluZyBpbiBBU0lDLiBEaXNhYmxlIFJERy4KKwkvLworCWlmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQnl0ZVZhbHVlKTsKKwkJQnl0ZVZhbHVlICY9ICh+MHgxOCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJ5dGVWYWx1ZSk7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCS8vIFJlc2V0IERBQworCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJkJ5dGVWYWx1ZSk7CisJQnl0ZVZhbHVlICY9ICh+MHgxOCk7CisJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikKKwl7CisJCUJ5dGVWYWx1ZSB8PSAweDEwOworCX0KKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCeXRlVmFsdWUpOworCisJUlRNUFNldFBpZ2d5QmFjayhwQWQsRkFMU0UpOworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BJR0dZQkFDS19JTlVTRUQpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LndvcmQgPSBwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkud29yZDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIFJlc3RvcmUgYWxsIHNldHRpbmdzIGluIHRoZSBmb2xsb3dpbmcuCisJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCAwLCAoQUxMTl9TRVRQUk9URUNUfENDS1NFVFBST1RFQ1R8T0ZETVNFVFBST1RFQ1QpLCBUUlVFLCBGQUxTRSk7CisJQXNpY0Rpc2FibGVSREcocEFkKTsKKwlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJDdXJyZW50QXRoZXJvcyA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYk5vd0F0aGVyb3NCdXJzdE9uID0gRkFMU0U7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0NBTl8yMDQwKTsKKwlwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC53b3JkID0gMDsKKwlUcmlFdmVudEluaXQocEFkKTsKKwlmb3IgKGkgPSAwOyBpIDwgKHBBZC0+Q2hhbm5lbExpc3ROdW0gLSAxKTsgaSsrKQorCXsKKwkJcEFkLT5DaGFubmVsTGlzdFtpXS5iRWZmZWN0ZWRDaGFubmVsID0gRkFMU0U7CisJfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BWF9MRU5fQ0ZHLCAweDFmZmYpOworCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApIHsKKwkJdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCQkvL3NlbmQgZGlzYXNzb2NpYXRlIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50CisJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJd3JxdS5kYXRhLmZsYWdzID0gUlRfRElTQVNTT0NfRVZFTlRfRkxBRzsKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKwl9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCXsKKwkJdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKwl9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIFJUMzB4eAorCWlmIChJU19SVDMwOTAocEFkKSkKKwl7CisJCVVJTlQzMgkJCQltYWNkYXRhOworCQkvLyBkaXNhYmxlIE1NUFMgQkJQIGNvbnRyb2wgcmVnaXN0ZXIKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQnl0ZVZhbHVlKTsKKwkJQnl0ZVZhbHVlICY9IH4oMHgwNCk7CS8vYml0IDIKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQnl0ZVZhbHVlKTsKKworCQkvLyBkaXNhYmxlIE1NUFMgTUFDIGNvbnRyb2wgcmVnaXN0ZXIKKwkJUlRNUF9JT19SRUFEMzIocEFkLCAweDEyMTAsICZtYWNkYXRhKTsKKwkJbWFjZGF0YSAmPSB+KDB4MDkpOwkvL2JpdCAwLCAzCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTIxMCwgbWFjZGF0YSk7CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEl0ZXJhdGVPbkJzc1RhYigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgICBTdGFydFJlcTsKKwlNTE1FX0pPSU5fUkVRX1NUUlVDVCAgICBKb2luUmVxOworCVVMT05HICAgICAgICAgICAgICAgICAgIEJzc0lkeDsKKworCS8vIENoYW5nZSB0aGUgd2Vwc3RhdHVzIHRvIG9yaWdpbmFsIHdlcHN0YXR1cworCXBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAgID0gcEFkLT5TdGFDZmcuT3JpZ1dlcFN0YXR1czsKKwlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyICA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzOworCisJQnNzSWR4ID0gcEFkLT5NbG1lQXV4LkJzc0lkeDsKKwlpZiAoQnNzSWR4IDwgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIpCisJeworCQkvLyBDaGVjayBjaXBoZXIgc3VpdGUsIEFQIG11c3QgaGF2ZSBtb3JlIHNlY3VyZWQgY2lwaGVyIHRoYW4gc3RhdGlvbiBzZXR0aW5nCisJCS8vIFNldCB0aGUgUGFpcndpc2UgYW5kIEdyb3VwIGNpcGhlciB0byBtYXRjaCB0aGUgaW50ZW5kZWQgQVAgc2V0dGluZworCQkvLyBXZSBjYW4gb25seSBjb25uZWN0IHRvIEFQIHdpdGggbGVzcyBzZWN1cmVkIGNpcGhlciBzZXR0aW5nCisJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKKwkJeworCQkJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5Hcm91cENpcGhlcjsKKworCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyKQorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyOworCQkJZWxzZSBpZiAocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlckF1eCAhPSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCisJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLlBhaXJDaXBoZXJBdXg7CisJCQllbHNlCS8vIFRoZXJlIGlzIG5vIFBhaXJDaXBoZXIgQXV4LCBkb3duZ3JhZGUgb3VyIGNhcGFiaWxpdHkgdG8gVEtJUAorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQl9CisJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLkdyb3VwQ2lwaGVyOworCisJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5QYWlyQ2lwaGVyKQorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlcjsKKwkJCWVsc2UgaWYgKHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5QYWlyQ2lwaGVyQXV4ICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKwkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLlBhaXJDaXBoZXJBdXg7CisJCQllbHNlCS8vIFRoZXJlIGlzIG5vIFBhaXJDaXBoZXIgQXV4LCBkb3duZ3JhZGUgb3VyIGNhcGFiaWxpdHkgdG8gVEtJUAorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCisJCQkvLyBSU04gY2FwYWJpbGl0eQorCQkJcEFkLT5TdGFDZmcuUnNuQ2FwYWJpbGl0eSA9IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5Sc25DYXBhYmlsaXR5OworCQl9CisKKwkJLy8gU2V0IE1peCBjaXBoZXIgZmxhZworCQlwQWQtPlN0YUNmZy5iTWl4Q2lwaGVyID0gKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIpID8gRkFMU0UgOiBUUlVFOworCQlpZiAocEFkLT5TdGFDZmcuYk1peENpcGhlciA9PSBUUlVFKQorCQl7CisJCQkvLyBJZiBtaXggY2lwaGVyLCByZS1idWlsZCBSU05JRQorCQkJUlRNUE1ha2VSU05JRShwQWQsIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIDApOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGl0ZXJhdGUgQlNTICVsZCBvZiAlZFxuIiwgQnNzSWR4LCBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOcikpOworCQlKb2luUGFybUZpbGwocEFkLCAmSm9pblJlcSwgQnNzSWR4KTsKKwkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0pPSU5fUkVRLCBzaXplb2YoTUxNRV9KT0lOX1JFUV9TVFJVQ1QpLAorCQkJCQkmSm9pblJlcSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfSk9JTjsKKwl9CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQWxsIEJTUyBmYWlsOyBzdGFydCBhIG5ldyBBREhPQyAoU3NpZD0lcykuLi5cbiIscEFkLT5NbG1lQXV4LlNzaWQpKTsKKwkJU3RhcnRQYXJtRmlsbChwQWQsICZTdGFydFJlcSwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKwkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NUQVJUX1JFUSwgc2l6ZW9mKE1MTUVfU1RBUlRfUkVRX1NUUlVDVCksICZTdGFydFJlcSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfU1RBUlQ7CisJfQorCWVsc2UgLy8gbm8gbW9yZSBCU1MKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBbGwgcm9hbWluZyBmYWlsZWQsIHN0YXkgQCBjaCAjJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCX0KK30KKworLy8gZm9yIHJlLWFzc29jaWF0aW9uIG9ubHkKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBJdGVyYXRlT25Cc3NUYWIyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU1MTUVfUkVBU1NPQ19SRVFfU1RSVUNUIFJlYXNzb2NSZXE7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgQnNzSWR4OworCUJTU19FTlRSWSAgICAgICAgICAgICAgICpwQnNzOworCisJQnNzSWR4ID0gcEFkLT5NbG1lQXV4LlJvYW1JZHg7CisJcEJzcyA9ICZwQWQtPk1sbWVBdXguUm9hbVRhYi5Cc3NFbnRyeVtCc3NJZHhdOworCisJaWYgKEJzc0lkeCA8IHBBZC0+TWxtZUF1eC5Sb2FtVGFiLkJzc05yKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGl0ZXJhdGUgQlNTICVsZCBvZiAlZFxuIiwgQnNzSWR4LCBwQWQtPk1sbWVBdXguUm9hbVRhYi5Cc3NOcikpOworCisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEJzcy0+Q2hhbm5lbCwgRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQnNzLT5DaGFubmVsKTsKKworCQkvLyByZWFzc29jaWF0ZSBtZXNzYWdlIGhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgYXNzb2NpYXRlIG1lc3NhZ2UKKwkJQXNzb2NQYXJtRmlsbChwQWQsICZSZWFzc29jUmVxLCBwQnNzLT5Cc3NpZCwgcEJzcy0+Q2FwYWJpbGl0eUluZm8sCisJCQkJCSAgQVNTT0NfVElNRU9VVCwgcEFkLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50KTsKKwkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwKKwkJCQkJc2l6ZW9mKE1MTUVfUkVBU1NPQ19SRVFfU1RSVUNUKSwgJlJlYXNzb2NSZXEpOworCisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfUkVBU1NPQzsKKwl9CisJZWxzZSAvLyBubyBtb3JlIEJTUworCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFsbCBmYXN0IHJvYW1pbmcgZmFpbGVkLCBiYWNrIHRvIGNoICMlZFxuIixwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEpvaW5QYXJtRmlsbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBPVVQgTUxNRV9KT0lOX1JFUV9TVFJVQ1QgKkpvaW5SZXEsCisJSU4gVUxPTkcgQnNzSWR4KQoreworCUpvaW5SZXEtPkJzc0lkeCA9IEJzc0lkeDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgU2NhblBhcm1GaWxsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE9VVCBNTE1FX1NDQU5fUkVRX1NUUlVDVCAqU2NhblJlcSwKKwlJTiBDSEFSIFNzaWRbXSwKKwlJTiBVQ0hBUiBTc2lkTGVuLAorCUlOIFVDSEFSIEJzc1R5cGUsCisJSU4gVUNIQVIgU2NhblR5cGUpCit7CisgICAgTmRpc1plcm9NZW1vcnkoU2NhblJlcS0+U3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwlTY2FuUmVxLT5Tc2lkTGVuID0gU3NpZExlbjsKKwlOZGlzTW92ZU1lbW9yeShTY2FuUmVxLT5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsKKwlTY2FuUmVxLT5Cc3NUeXBlID0gQnNzVHlwZTsKKwlTY2FuUmVxLT5TY2FuVHlwZSA9IFNjYW5UeXBlOworfQorCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBEbHNQYXJtRmlsbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBPVVQgTUxNRV9ETFNfUkVRX1NUUlVDVCAqcERsc1JlcSwKKwlJTiBQUlRfODAyXzExX0RMUyBwRGxzLAorCUlOIFVTSE9SVCByZWFzb24pCit7CisJcERsc1JlcS0+cERMUyA9IHBEbHM7CisJcERsc1JlcS0+UmVhc29uID0gcmVhc29uOworfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBTdGFydFBhcm1GaWxsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE9VVCBNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgKlN0YXJ0UmVxLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4pCit7CisJQVNTRVJUKFNzaWRMZW4gPD0gTUFYX0xFTl9PRl9TU0lEKTsKKwlOZGlzTW92ZU1lbW9yeShTdGFydFJlcS0+U3NpZCwgU3NpZCwgU3NpZExlbik7CisJU3RhcnRSZXEtPlNzaWRMZW4gPSBTc2lkTGVuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBdXRoUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfQVVUSF9SRVFfU1RSVUNUICpBdXRoUmVxLAorCUlOIFBVQ0hBUiBwQWRkciwKKwlJTiBVU0hPUlQgQWxnKQoreworCUNPUFlfTUFDX0FERFIoQXV0aFJlcS0+QWRkciwgcEFkZHIpOworCUF1dGhSZXEtPkFsZyA9IEFsZzsKKwlBdXRoUmVxLT5UaW1lb3V0ID0gQVVUSF9USU1FT1VUOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworCisjaWZkZWYgUlQyODcwCisKK1ZPSUQgTWxtZUNudGxDb25maXJtKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HIE1zZ1R5cGUsCisJSU4gVVNIT1JUIE1zZykKK3sKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNc2dUeXBlLCBzaXplb2YoVVNIT1JUKSwgJk1zZyk7Cit9CisKK1ZPSUQgQ29tcG9zZVBzUG9sbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQVFhJTkZPX1NUUlVDCQlwVHhJbmZvOworCVBUWFdJX1NUUlVDCQlwVHhXSTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNvbXBvc2VQc1BvbGxcbiIpKTsKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5Qc1BvbGxGcmFtZSwgc2l6ZW9mKFBTUE9MTF9GUkFNRSkpOworCisJcEFkLT5Qc1BvbGxGcmFtZS5GQy5Qd3JNZ210ID0gMDsKKwlwQWQtPlBzUG9sbEZyYW1lLkZDLlR5cGUgPSBCVFlQRV9DTlRMOworCXBBZC0+UHNQb2xsRnJhbWUuRkMuU3ViVHlwZSA9IFNVQlRZUEVfUFNfUE9MTDsKKwlwQWQtPlBzUG9sbEZyYW1lLkFpZCA9IHBBZC0+U3RhQWN0aXZlLkFpZCB8IDB4QzAwMDsKKwlDT1BZX01BQ19BRERSKHBBZC0+UHNQb2xsRnJhbWUuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlDT1BZX01BQ19BRERSKHBBZC0+UHNQb2xsRnJhbWUuVGEsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJUlRNUFplcm9NZW1vcnkoJnBBZC0+UHNQb2xsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF0sIDEwMCk7CisJcFR4SW5mbyA9IChQVFhJTkZPX1NUUlVDKSZwQWQtPlBzUG9sbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdOworCVJUTVBXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKHNpemVvZihQU1BPTExfRlJBTUUpK1RYV0lfU0laRSksIFRSVUUsIEVwVG9RdWV1ZVtNR01UUElQRUlEWF0sIEZBTFNFLCAgRkFMU0UpOworCXBUeFdJID0gKFBUWFdJX1NUUlVDKSZwQWQtPlBzUG9sbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYSU5GT19TSVpFXTsKKwlSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBUUlVFLCBGQUxTRSwgMCwgQlNTSURfV0NJRCwgKHNpemVvZihQU1BPTExfRlJBTUUpKSwKKwkJMCwgIDAsIChVQ0hBUilwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTLCBJRlNfQkFDS09GRiwgRkFMU0UsICZwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQpOworCVJUTVBNb3ZlTWVtb3J5KCZwQWQtPlBzUG9sbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYV0lfU0laRStUWElORk9fU0laRV0sICZwQWQtPlBzUG9sbEZyYW1lLCBzaXplb2YoUFNQT0xMX0ZSQU1FKSk7CisJLy8gQXBwZW5kIDQgZXh0cmEgemVybyBieXRlcy4KKwlwQWQtPlBzUG9sbENvbnRleHQuQnVsa091dFNpemUgPSAgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBzaXplb2YoUFNQT0xMX0ZSQU1FKSArIDQ7Cit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBDb21wb3NlTnVsbEZyYW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVBUWElORk9fU1RSVUMJCXBUeEluZm87CisJUFRYV0lfU1RSVUMJCXBUeFdJOworCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+TnVsbEZyYW1lLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCXBBZC0+TnVsbEZyYW1lLkZDLlR5cGUgPSBCVFlQRV9EQVRBOworCXBBZC0+TnVsbEZyYW1lLkZDLlN1YlR5cGUgPSBTVUJUWVBFX05VTExfRlVOQzsKKwlwQWQtPk51bGxGcmFtZS5GQy5Ub0RzID0gMTsKKwlDT1BZX01BQ19BRERSKHBBZC0+TnVsbEZyYW1lLkFkZHIxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXSwgMTAwKTsKKwlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdOworCVJUTVBXcml0ZVR4SW5mbyhwQWQsIHBUeEluZm8sIChVU0hPUlQpKHNpemVvZihIRUFERVJfODAyXzExKStUWFdJX1NJWkUpLCBUUlVFLCBFcFRvUXVldWVbTUdNVFBJUEVJRFhdLCBGQUxTRSwgIEZBTFNFKTsKKwlwVHhXSSA9IChQVFhXSV9TVFJVQykmcEFkLT5OdWxsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbVFhJTkZPX1NJWkVdOworCVJUTVBXcml0ZVR4V0kocEFkLCBwVHhXSSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIFRSVUUsIEZBTFNFLCAwLCBCU1NJRF9XQ0lELCAoc2l6ZW9mKEhFQURFUl84MDJfMTEpKSwKKwkJMCwgMCwgKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MsIElGU19CQUNLT0ZGLCBGQUxTRSwgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7CisJUlRNUE1vdmVNZW1vcnkoJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYV0lfU0laRStUWElORk9fU0laRV0sICZwQWQtPk51bGxGcmFtZSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwlwQWQtPk51bGxDb250ZXh0LkJ1bGtPdXRTaXplID0gIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgc2l6ZW9mKHBBZC0+TnVsbEZyYW1lKSArIDQ7Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmUtYnVpbGQgYSBCRUFDT04gZnJhbWUgaW4gdGhlIHNoYXJlZCBtZW1vcnkKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VMT05HIE1ha2VJYnNzQmVhY29uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSICAgICAgICAgRHNMZW4gPSAxLCBJYnNzTGVuID0gMjsKKwlVQ0hBUiAgICAgICAgIExvY2FsRXJwSWVbM10gPSB7SUVfRVJQLCAxLCAweDA0fTsKKwlIRUFERVJfODAyXzExIEJjbkhkcjsKKwlVU0hPUlQgICAgICAgIENhcGFiaWxpdHlJbmZvOworCUxBUkdFX0lOVEVHRVIgRmFrZVRpbWVzdGFtcDsKKwlVTE9ORyAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlQVFhXSV9TVFJVQwkgIHBUeFdJID0gJnBBZC0+QmVhY29uVHhXSTsKKwlDSEFSICAgICAgICAgKnBCZWFjb25GcmFtZSA9IHBBZC0+QmVhY29uQnVmOworCUJPT0xFQU4gICAgICAgUHJpdmFjeTsKKwlVQ0hBUiAgICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSICAgICAgICAgU3VwUmF0ZUxlbiA9IDA7CisJVUNIQVIgICAgICAgICBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUiAgICAgICAgIEV4dFJhdGVMZW4gPSAwOworCVVDSEFSICAgICAgICAgUlNOSWUgPSBJRV9XUEE7CisKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpKQorCXsKKwkJU3VwUmF0ZVswXSA9IDB4ODI7IC8vIDEgbWJwcworCQlTdXBSYXRlWzFdID0gMHg4NDsgLy8gMiBtYnBzCisJCVN1cFJhdGVbMl0gPSAweDhiOyAvLyA1LjUgbWJwcworCQlTdXBSYXRlWzNdID0gMHg5NjsgLy8gMTEgbWJwcworCQlTdXBSYXRlTGVuID0gNDsKKwkJRXh0UmF0ZUxlbiA9IDA7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwl7CisJCVN1cFJhdGVbMF0gID0gMHg4QzsgICAgLy8gNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQlTdXBSYXRlWzFdICA9IDB4MTI7ICAgIC8vIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJU3VwUmF0ZVsyXSAgPSAweDk4OyAgICAvLyAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQlTdXBSYXRlWzNdICA9IDB4MjQ7ICAgIC8vIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCVN1cFJhdGVbNF0gID0gMHhiMDsgICAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJU3VwUmF0ZVs1XSAgPSAweDQ4OyAgICAvLyAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlTdXBSYXRlWzZdICA9IDB4NjA7ICAgIC8vIDQ4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCVN1cFJhdGVbN10gID0gMHg2YzsgICAgLy8gNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJU3VwUmF0ZUxlbiAgPSA4OworCQlFeHRSYXRlTGVuICA9IDA7CisKKwkJLy8KKwkJLy8gQWxzbyBVcGRhdGUgTWxtZVJhdGUgJiBSdHNSYXRlIGZvciBHIG9ubHkgJiBBIG9ubHkKKwkJLy8KKwkJcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzY7CisJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBSQVRFXzY7CisJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTUzBNY2FzdF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKKwl9CisJZWxzZQorCXsKKwkJU3VwUmF0ZVswXSA9IDB4ODI7IC8vIDEgbWJwcworCQlTdXBSYXRlWzFdID0gMHg4NDsgLy8gMiBtYnBzCisJCVN1cFJhdGVbMl0gPSAweDhiOyAvLyA1LjUgbWJwcworCQlTdXBSYXRlWzNdID0gMHg5NjsgLy8gMTEgbWJwcworCQlTdXBSYXRlTGVuID0gNDsKKworCQlFeHRSYXRlWzBdICA9IDB4MEM7ICAgIC8vIDYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsCisJCUV4dFJhdGVbMV0gID0gMHgxMjsgICAgLy8gOSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlFeHRSYXRlWzJdICA9IDB4MTg7ICAgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLAorCQlFeHRSYXRlWzNdICA9IDB4MjQ7ICAgIC8vIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCUV4dFJhdGVbNF0gID0gMHgzMDsgICAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsCisJCUV4dFJhdGVbNV0gID0gMHg0ODsgICAgLy8gMzYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJRXh0UmF0ZVs2XSAgPSAweDYwOyAgICAvLyA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlFeHRSYXRlWzddICA9IDB4NmM7ICAgIC8vIDU0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCUV4dFJhdGVMZW4gID0gODsKKwl9CisKKwlwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlLCBTdXBSYXRlLCBTdXBSYXRlTGVuKTsKKwlwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID0gRXh0UmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlLCBFeHRSYXRlLCBFeHRSYXRlTGVuKTsKKworCS8vIGNvbXBvc2UgSUJTUyBiZWFjb24gZnJhbWUKKwlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkJjbkhkciwgU1VCVFlQRV9CRUFDT04sIDAsIEJST0FEQ0FTVF9BRERSLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJUHJpdmFjeSA9IChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgfHwKKwkJCSAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB8fAorCQkJICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpOworCUNhcGFiaWxpdHlJbmZvID0gQ0FQX0dFTkVSQVRFKDAsIDEsIFByaXZhY3ksIChwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlID09IFJ0ODAyXzExUHJlYW1ibGVTaG9ydCksIDAsIDApOworCisJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lLCAgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCSAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCAgICAgICAgICAgJkJjbkhkciwKKwkJCQkJICBUSU1FU1RBTVBfTEVOLCAgICAgICAgICAgICAgICAgICAmRmFrZVRpbWVzdGFtcCwKKwkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kLAorCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5mbywKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEllLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLAorCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCisJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVJZSwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUxlbiwKKwkJCQkJICBTdXBSYXRlTGVuLCAgICAgICAgICAgICAgICAgICAgICBTdXBSYXRlLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEc0llLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEc0xlbiwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSWJzc0llLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJYnNzTGVuLAorCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlN0YUFjdGl2ZS5BdGltV2luLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCS8vIGFkZCBFUlBfSUUgYW5kIEVYVF9SQUUgSUUgb2YgaW4gODAyLjExZworCWlmIChFeHRSYXRlTGVuKQorCXsKKwkJVUxPTkcJdG1wOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBCZWFjb25GcmFtZSArIEZyYW1lTGVuLCAgICAgICAgICZ0bXAsCisJCQkJCQkgIDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsRXJwSWUsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlSWUsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlTGVuLAorCQkJCQkJICBFeHRSYXRlTGVuLCAgICAgICAgICAgICAgICAgICAgICBFeHRSYXRlLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCUZyYW1lTGVuICs9IHRtcDsKKwl9CisKKwkvLyBJZiBhZGhvYyBzZWNydWl0eSBpcyBzZXQgZm9yIFdQQS1Ob25lLCBhcHBlbmQgdGhlIGNpcGhlciBzdWl0ZSBJRQorCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCXsKKwkJVUxPTkcgdG1wOworICAgICAgICBSVE1QTWFrZVJTTklFKHBBZCwgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgQlNTMCk7CisKKwkJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lICsgRnJhbWVMZW4sICAgICAgICAJJnRtcCwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJJlJTTkllLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAJJnBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwKKwkJCQkJCSAgcEFkLT5TdGFDZmcuUlNOSUVfTGVuLCAgICAgIAkJcEFkLT5TdGFDZmcuUlNOX0lFLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCUZyYW1lTGVuICs9IHRtcDsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpCisJeworCQlVTE9ORyBUbXBMZW47CisJCVVDSEFSIEh0TGVuLCBIdExlbjE7CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCUhUX0NBUEFCSUxJVFlfSUUgSHRDYXBhYmlsaXR5VG1wOworCQlBRERfSFRfSU5GT19JRQlhZGRIVEluZm9UbXA7CisJCVVTSE9SVAliMmxUbXAsIGIybFRtcDI7CisjZW5kaWYKKworCQkvLyBhZGQgSFQgQ2FwYWJpbGl0eSBJRQorCQlIdExlbiA9IHNpemVvZihwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkpOworCQlIdExlbjEgPSBzaXplb2YocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvKTsKKyNpZm5kZWYgUlRfQklHX0VORElBTgorCQlNYWtlT3V0Z29pbmdGcmFtZShwQmVhY29uRnJhbWUrRnJhbWVMZW4sCSZUbXBMZW4sCisJCQkJCQkgIDEsCQkJCQkJJkh0Q2FwSWUsCisJCQkJCQkgIDEsCQkJCQkJJkh0TGVuLAorCQkJCQkJICBIdExlbiwJCQkJCSZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCisJCQkJCQkgIDEsCQkJCQkJJkFkZEh0SW5mb0llLAorCQkJCQkJICAxLAkJCQkJCSZIdExlbjEsCisJCQkJCQkgIEh0TGVuMSwJCQkJCSZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8sCisJCQkJCQkgIEVORF9PRl9BUkdTKTsKKyNlbHNlCisJCU5kaXNNb3ZlTWVtb3J5KCZIdENhcGFiaWxpdHlUbXAsICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksIEh0TGVuKTsKKwkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSk7CisJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykpOworCisJCU5kaXNNb3ZlTWVtb3J5KCZhZGRIVEluZm9UbXAsICZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8sIEh0TGVuMSk7CisJCSooVVNIT1JUICopKCZhZGRIVEluZm9UbXAuQWRkSHRJbmZvMikgPSBTV0FQMTYoKihVU0hPUlQgKikoJmFkZEhUSW5mb1RtcC5BZGRIdEluZm8yKSk7CisJCSooVVNIT1JUICopKCZhZGRIVEluZm9UbXAuQWRkSHRJbmZvMykgPSBTV0FQMTYoKihVU0hPUlQgKikoJmFkZEhUSW5mb1RtcC5BZGRIdEluZm8zKSk7CisKKwkJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lK0ZyYW1lTGVuLAkmVG1wTGVuLAorCQkJCQkJICAxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJICAxLAkJCQkJCSZIdExlbiwKKwkJCQkJCSAgSHRMZW4sCQkJCQkmSHRDYXBhYmlsaXR5VG1wLAorCQkJCQkJICAxLAkJCQkJCSZBZGRIdEluZm9JZSwKKwkJCQkJCSAgMSwJCQkJCQkmSHRMZW4xLAorCQkJCQkJICBIdExlbjEsCQkJCQkmYWRkSFRJbmZvVG1wLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisjZW5kaWYKKwkJRnJhbWVMZW4gKz0gVG1wTGVuOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vYmVhY29uIHVzZSByZXNlcnZlZCBXQ0lEIDB4ZmYKKyAgICBpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQorICAgIHsKKwlSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksIEZBTFNFLCBGQUxTRSwgIFRSVUUsIEZBTFNFLCBGQUxTRSwgVFJVRSwgMCwgMHhmZiwgRnJhbWVMZW4sCisJCVBJRF9NR01ULCBQSURfQkVBQ09OLCBSQVRFXzEsIElGU19IVFRYT1AsIEZBTFNFLCAmcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gU2V0IHRvIHVzZSAxTWJwcyBmb3IgQWRob2MgYmVhY29uLgorCQlIVFRSQU5TTUlUX1NFVFRJTkcgVHJhbnNtaXQ7CisgICAgICAgIFRyYW5zbWl0LndvcmQgPSAwOworICAgICAgICBSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksIEZBTFNFLCBGQUxTRSwgIFRSVUUsIEZBTFNFLCBGQUxTRSwgVFJVRSwgMCwgMHhmZiwgRnJhbWVMZW4sCisgICAgCQlQSURfTUdNVCwgUElEX0JFQUNPTiwgUkFURV8xLCBJRlNfSFRUWE9QLCBGQUxTRSwgJlRyYW5zbWl0KTsKKyAgICB9CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgcEJlYWNvbkZyYW1lLCBESVJfV1JJVEUsIEZBTFNFKTsKKwlSVE1QV0lFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwVHhXSSwgVFlQRV9UWFdJKTsKKyNlbmRpZgorCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFrZUlic3NCZWFjb24gKGxlbj0lbGQpLCBTdXBSYXRlTGVuPSVkLCBFeHRSYXRlTGVuPSVkLCBDaGFubmVsPSVkLCBQaHlNb2RlPSVkXG4iLAorCQkJCQlGcmFtZUxlbiwgU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSkpOworCXJldHVybiBGcmFtZUxlbjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9kbHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2Rscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiY2Q0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9kbHMuYwpAQCAtMCwwICsxLDIxNzAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgZGxzLmMKKworICAgIEFic3RyYWN0OgorICAgIEhhbmRsZSBXTU0tRExTIHN0YXRlIG1hY2hpbmUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUm9yeSBDaGVuICAgMDItMTQtMjAwNgorCUFydmluIFRhaQkwNi0wMy0yMDA4CSAgTW9kaWZpZWQgZm9yIFJUMjh4eAorICovCisKKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBkbHMgc3RhdGUgbWFjaGluZSBpbml0LCBpbmNsdWRpbmcgc3RhdGUgdHJhbnNpdGlvbiBhbmQgdGltZXIgaW5pdAorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIFNtIC0gcG9pbnRlciB0byB0aGUgZGxzIHN0YXRlIG1hY2hpbmUKKyAgICBOb3RlOgorICAgICAgICBUaGUgc3RhdGUgbWFjaGluZSBsb29rcyBsaWtlIHRoaXMKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERMU19JRExFCisgICAgTVQyX01MTUVfRExTX1JFUVVFU1QgICBNbG1lRGxzUmVxQWN0aW9uCisgICAgTVQyX1BFRVJfRExTX1JFUVVFU1QgICBQZWVyRGxzUmVxQWN0aW9uCisgICAgTVQyX1BFRVJfRExTX1JFU1BPTlNFICBQZWVyRGxzUnNwQWN0aW9uCisgICAgTVQyX01MTUVfRExTX1RFQVJET1dOICBNbG1lVGVhckRvd25BY3Rpb24KKyAgICBNVDJfUEVFUl9ETFNfVEVBUkRPV04gIFBlZXJUZWFyRG93bkFjdGlvbgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3ZvaWQgRGxzU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBTVEFURV9NQUNISU5FICpTbSwKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisJVUNIQVIJaTsKKworICAgIFN0YXRlTWFjaGluZUluaXQoU20sIChTVEFURV9NQUNISU5FX0ZVTkMqKVRyYW5zLCBNQVhfRExTX1NUQVRFLCBNQVhfRExTX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBETFNfSURMRSwgRExTX01BQ0hJTkVfQkFTRSk7CisKKyAgICAvLyB0aGUgZmlyc3QgY29sdW1uCisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBETFNfSURMRSwgTVQyX01MTUVfRExTX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lRGxzUmVxQWN0aW9uKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIERMU19JRExFLCBNVDJfUEVFUl9ETFNfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEbHNSZXFBY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgRExTX0lETEUsIE1UMl9QRUVSX0RMU19SU1AsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRsc1JzcEFjdGlvbik7CisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBETFNfSURMRSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lRGxzVGVhckRvd25BY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgRExTX0lETEUsIE1UMl9QRUVSX0RMU19URUFSX0RPV04sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRsc1RlYXJEb3duQWN0aW9uKTsKKworCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJeworCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5wQWQgPSBwQWQ7CisJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihEbHNUaW1lb3V0QWN0aW9uKSwgcEFkLCBGQUxTRSk7CisJfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZURsc1JlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMJCU5TdGF0dXM7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJSEVBREVSXzgwMl8xMQlEbHNSZXFIZHI7CisJUFJUXzgwMl8xMV9ETFMJcERMUyA9IE5VTEw7CisJVUNIQVIJCQlDYXRlZ29yeSA9IENBVEVHT1JZX0RMUzsKKwlVQ0hBUgkJCUFjdGlvbiA9IEFDVElPTl9ETFNfUkVRVUVTVDsKKwlVTE9ORwkJCXRtcDsKKwlVU0hPUlQJCQlyZWFzb247CisJVUxPTkcJCQlUaW1lb3V0OworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKworCWlmKCFNbG1lRGxzUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZwRExTLCAmcmVhc29uKSkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBNbG1lRGxzUmVxQWN0aW9uKCkgXG4iKSk7CisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIE1sbWVEbHNSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQlyZXR1cm47CisJfQorCisJQWN0SGVhZGVySW5pdChwQWQsICZEbHNSZXFIZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkvLyBCdWlsZCBiYXNpYyBmcmFtZSBmaXJzdAorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkJCSZGcmFtZUxlbiwKKwkJCQkJc2l6ZW9mKEhFQURFUl84MDJfMTEpLAkJJkRsc1JlcUhkciwKKwkJCQkJMSwJCQkJCQkJJkNhdGVnb3J5LAorCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQk2LAkJCQkJCQkmcERMUy0+TWFjQWRkciwKKwkJCQkJNiwJCQkJCQkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJCQkJMiwJCQkJCQkJJnBBZC0+U3RhQWN0aXZlLkNhcGFiaWxpdHlJbmZvLAorCQkJCQkyLAkJCQkJCQkmcERMUy0+VGltZU91dCwKKwkJCQkJMSwJCQkJCQkJJlN1cFJhdGVJZSwKKwkJCQkJMSwJCQkJCQkJJnBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLAorCQkJCQlwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwJcEFkLT5NbG1lQXV4LlN1cFJhdGUsCisJCQkJCUVORF9PRl9BUkdTKTsKKworCWlmIChwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiAhPSAwKQorCXsKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJICAxLAkJCQkJCSZFeHRSYXRlSWUsCisJCQkJCQkgIDEsCQkJCQkJJnBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAorCQkJCQkJICBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwJcEFkLT5NbG1lQXV4LkV4dFJhdGUsCisJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJRnJhbWVMZW4gKz0gdG1wOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwl7CisJCVVDSEFSIEh0TGVuOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCQlIVF9DQVBBQklMSVRZX0lFIEh0Q2FwYWJpbGl0eVRtcDsKKyNlbmRpZgorCisJCS8vIGFkZCBIVCBDYXBhYmlsaXR5IElFCisJCUh0TGVuID0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpOworI2lmbmRlZiBSVF9CSUdfRU5ESUFOCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwJJnRtcCwKKwkJCQkJCQkxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJCTEsCQkJCQkJJkh0TGVuLAorCQkJCQkJCUh0TGVuLAkJCQkJJnBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZWxzZQorCQlOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBIdExlbik7CisJCQkJCQkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSk7CisJCQkJCQkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSk7CisKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJCTEsCQkJCQkJJkh0Q2FwSWUsCisJCQkJCQkJMSwJCQkJCQkmSHRMZW4sCisJCQkJCQkJSHRMZW4sCQkJCQkmSHRDYXBhYmlsaXR5VG1wLAorCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbmRpZgorCQlGcmFtZUxlbiA9IEZyYW1lTGVuICsgdG1wOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCVJUTVBDYW5jZWxUaW1lcigmcERMUy0+VGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJVGltZW91dCA9IERMU19USU1FT1VUOworCVJUTVBTZXRUaW1lcigmcERMUy0+VGltZXIsIFRpbWVvdXQpOworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckRsc1JlcUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMJCU5TdGF0dXM7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJVVNIT1JUCQkJU3RhdHVzQ29kZSA9IE1MTUVfU1VDQ0VTUzsKKwlIRUFERVJfODAyXzExCURsc1JzcEhkcjsKKwlVQ0hBUgkJCUNhdGVnb3J5ID0gQ0FURUdPUllfRExTOworCVVDSEFSCQkJQWN0aW9uID0gQUNUSU9OX0RMU19SRVNQT05TRTsKKwlVTE9ORwkJCXRtcDsKKwlVU0hPUlQJCQlDYXBhYmlsaXR5SW5mbzsKKwlVQ0hBUgkJCURBW01BQ19BRERSX0xFTl0sIFNBW01BQ19BRERSX0xFTl07CisJVVNIT1JUCQkJRExTVGltZU91dDsKKwlTSE9SVAkJCWk7CisJVUxPTkcJCQlUaW1lb3V0OworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKwlQUlRfODAyXzExX0RMUwlwRExTID0gTlVMTDsKKwlVQ0hBUgkJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPSAwOworICAgIFVDSEFSCQkJU3VwcG9ydGVkUmF0ZXNMZW47CisgICAgVUNIQVIJCQlTdXBwb3J0ZWRSYXRlc1tNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCQlIdENhcGFiaWxpdHlMZW47CisJSFRfQ0FQQUJJTElUWV9JRQlIdENhcGFiaWxpdHk7CisKKwlpZiAoIVBlZXJEbHNSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgREEsIFNBLCAmQ2FwYWJpbGl0eUluZm8sICZETFNUaW1lT3V0LAorCQkJCQkJCSZTdXBwb3J0ZWRSYXRlc0xlbiwgJlN1cHBvcnRlZFJhdGVzWzBdLCAmSHRDYXBhYmlsaXR5TGVuLCAmSHRDYXBhYmlsaXR5KSkKKwkJcmV0dXJuOworCisgICAgLy8gc3VwcG9ydGVkIHJhdGVzIGFycmF5IG1heSBub3QgYmUgc29ydGVkLiBzb3J0IGl0IGFuZCBmaW5kIHRoZSBtYXhpbXVtIHJhdGUKKyAgICBmb3IgKGkgPSAwOyBpIDwgU3VwcG9ydGVkUmF0ZXNMZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKFN1cHBvcnRlZFJhdGVzW2ldICYgMHg3ZikpCisgICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gU3VwcG9ydGVkUmF0ZXNbaV0gJiAweDdmOworICAgIH0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIFNBWzBdLCBTQVsxXSwgU0FbMl0sIFNBWzNdLCBTQVs0XSwgU0FbNV0pKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIUlORlJBX09OKHBBZCkpCisJeworCQlTdGF0dXNDb2RlID0gTUxNRV9SRVFVRVNUX0RFQ0xJTkVEOworCX0KKwllbHNlIGlmICghcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpCisJeworCQlTdGF0dXNDb2RlID0gTUxNRV9ERVNUX1NUQV9JU19OT1RfQV9RU1RBOworCX0KKwllbHNlIGlmICghcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJeworCQlTdGF0dXNDb2RlID0gTUxNRV9SRVFVRVNUX0RFQ0xJTkVEOworCX0KKwllbHNlCisJeworCQkvLyBmaW5kIHRhYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzCisJCWZvciAoaSA9IChNQVhfTlVNX09GX0RMU19FTlRSWS0xKTsgaSA+PSAwOyBpLS0pCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChTQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX1dBSVRfS0VZOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19GSU5JU0g7CisJCQkJfQorCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU2VxdWVuY2UgPSAwOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQgPSBETFNUaW1lT3V0OworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gRExTVGltZU91dDsKKwkJCQlpZiAoSHRDYXBhYmlsaXR5TGVuICE9IDApCisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IFRSVUU7CisJCQkJZWxzZQorCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5iSFRDYXAgPSBGQUxTRTsKKwkJCQlwRExTID0gJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLy8gY2FuIG5vdCBmaW5kIGluIHRhYmxlLCBjcmVhdGUgYSBuZXcgb25lCisJCWlmIChpIDwgMCkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBQZWVyRGxzUmVxQWN0aW9uKCkgY2FuIG5vdCBmaW5kIHNhbWUgZW50cnkgXG4iKSk7CisJCQlmb3IgKGk9KE1BWF9OVU1fT0ZfRExTX0VOVFJZIC0gMSk7IGkgPj0gTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaS0tKQorCQkJeworCQkJCWlmICghcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQpCisJCQkJeworCQkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQkJVUNIQVIgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7CisKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCQkJeworCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX1dBSVRfS0VZOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19GSU5JU0g7CisJCQkJCX0KKworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TZXF1ZW5jZSA9IDA7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkID0gVFJVRTsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCA9IERMU1RpbWVPdXQ7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gRExTVGltZU91dDsKKwkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwgU0EsIE1BQ19BRERSX0xFTik7CisJCQkJCWlmIChIdENhcGFiaWxpdHlMZW4gIT0gMCkKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IFRSVUU7CisJCQkJCWVsc2UKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IEZBTFNFOworCQkJCQlwRExTID0gJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldOworCQkJCQlwRW50cnkgPSBNYWNUYWJsZUluc2VydERsc0VudHJ5KHBBZCwgU0EsIGkpOworCisJCQkJCXN3aXRjaCAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcykKKwkJCQkJeworCQkJCQkJY2FzZSAxMDg6IE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzU0OyAgIGJyZWFrOworCQkJCQkJY2FzZSA5NjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzQ4OyAgIGJyZWFrOworCQkJCQkJY2FzZSA3MjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzM2OyAgIGJyZWFrOworCQkJCQkJY2FzZSA0ODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI0OyAgIGJyZWFrOworCQkJCQkJY2FzZSAzNjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE4OyAgIGJyZWFrOworCQkJCQkJY2FzZSAyNDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzEyOyAgIGJyZWFrOworCQkJCQkJY2FzZSAxODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzk7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAxMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzY7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAyMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQkJY2FzZSAxMTogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzVfNTsgIGJyZWFrOworCQkJCQkJY2FzZSA0OiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAyOiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE7ICAgIGJyZWFrOworCQkJCQkJZGVmYXVsdDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQl9CisKKwkJCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gbWluKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSwgTWF4U3VwcG9ydGVkUmF0ZSk7CisKKwkJCQkJaWYgKHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQkJCX0KKworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDA7CisJCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDA7CisKKwkJCQkJLy8gSWYgdGhpcyBFbnRyeSBzdXBwb3J0cyA4MDIuMTFuLCB1cGdyYWRlIHRvIEhUIHJhdGUuCisJCQkJCWlmICgoSHRDYXBhYmlsaXR5TGVuICE9IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQkJCQl7CisJCQkJCQlVQ0hBUglqLCBiaXRtYXNrOyAvL2ssYml0bWFzazsKKwkJCQkJCUNIQVIgICAgaWk7CisKKwkJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJCQkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uTm9uR0YgPSBUUlVFOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9IDE7CisJCQkJCQl9CisKKwkJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGgpICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoKSkKKwkJCQkJCXsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVz0gQldfNDA7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9ICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3I0MCkmKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjIwKSYoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApKTsKKwkJCQkJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbjIwT25seSA9IFRSVUU7CisJCQkJCQl9CisKKwkJCQkJCS8vIGZpbmQgbWF4IGZpeGVkIHJhdGUKKwkJCQkJCWZvciAoaWk9MTU7IGlpPj0wOyBpaS0tKQorCQkJCQkJeworCQkJCQkJCWogPSBpaS84OworCQkJCQkJCWJpdG1hc2sgPSAoMTw8KGlpLShqKjgpKSk7CisJCQkJCQkJaWYgKCAocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0mYml0bWFzaykgJiYgKEh0Q2FwYWJpbGl0eS5NQ1NTZXRbal0mYml0bWFzaykpCisJCQkJCQkJeworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBpaTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJCWlmIChpaT09MCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKworCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTICE9IE1DU19BVVRPKQorCQkJCQkJeworCisJCQkJCQkJcHJpbnRrKCJAQEAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9ICVkXG4iLAorCQkJCQkJCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyk7CisJCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID09IDMyKQorCQkJCQkJCXsKKwkJCQkJCQkJLy8gRml4IE1DUyBhcyBIVCBEdXBsaWNhdGVkIE1vZGUKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSAxOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IDA7CisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAwOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSAzMjsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSBpZiAocEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID4gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUykKKwkJCQkJCQl7CisJCQkJCQkJCS8vIFNUQSBzdXBwb3J0cyBmaXhlZCBNQ1MKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNUQkMgPSAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMgJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykpOworCQkJCQkJcEVudHJ5LT5NcGR1RGVuc2l0eSA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHk7CisJCQkJCQlwRW50cnktPk1heFJBbXBkdUZhY3RvciA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yOworCQkJCQkJcEVudHJ5LT5NbXBzTW9kZSA9IChVQ0hBUilIdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QczsKKwkJCQkJCXBFbnRyeS0+QU1zZHVTaXplID0gKFVDSEFSKUh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCkKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yNDApCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uVHhTVEJDKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0hUQ19DQVBBQkxFKTsKKwkJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnICYmIEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCkKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uTUNTRmVlZGJhY2sgPT0gMHgwMykKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSk7CisKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPkhUQ2FwYWJpbGl0eSwgJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKwkJCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkOworCQkJCQlwRW50cnktPkN1cnJUeFJhdGUgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSk7CisKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID09IFRSVUUpCisJCQkJCXsKKwkJCQkJCVBVQ0hBUiBwVGFibGU7CisJCQkJCQlVQ0hBUiBUYWJsZVNpemUgPSAwOworCisJCQkJCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsICZwRW50cnktPkN1cnJUeFJhdGVJbmRleCk7CisJCQkJCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQkJCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisKKwkJCQkJCVJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGUsIHBFbnRyeSk7CisJCQkJCX0KKwkJCQkJcEVudHJ5LT5SYXRlTGVuID0gU3VwcG9ydGVkUmF0ZXNMZW47CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCVN0YXR1c0NvZGUgPSBNTE1FX1NVQ0NFU1M7CisKKwkJLy8gY2FuIG5vdCBmaW5kIGluIHRhYmxlLCBjcmVhdGUgYSBuZXcgb25lCisJCWlmIChpIDwgMCkKKwkJeworCQkJU3RhdHVzQ29kZSA9IE1MTUVfUU9TX1VOU1BFQ0lGWTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIERMU0VudHJ5IHRhYmxlIGZ1bGwob25seSBjYW4gc3VwcG9ydCAlZCBETFMgc2Vzc2lvbikgXG4iLCBNQVhfTlVNX09GX0RMU19FTlRSWSAtIE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlkpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIHVzZSBlbnRyeSglZCkgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJaSwgU0FbMF0sIFNBWzFdLCBTQVsyXSwgU0FbM10sIFNBWzRdLCBTQVs1XSkpOworCQl9CisJfQorCisJQWN0SGVhZGVySW5pdChwQWQsICZEbHNSc3BIZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkvLyBCdWlsZCBiYXNpYyBmcmFtZSBmaXJzdAorCWlmIChTdGF0dXNDb2RlID09IE1MTUVfU1VDQ0VTUykKKwl7CisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkJCSZGcmFtZUxlbiwKKwkJCQkJCXNpemVvZihIRUFERVJfODAyXzExKSwJCSZEbHNSc3BIZHIsCisJCQkJCQkxLAkJCQkJCQkmQ2F0ZWdvcnksCisJCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQkJMiwJCQkJCQkJJlN0YXR1c0NvZGUsCisJCQkJCQk2LAkJCQkJCQlTQSwKKwkJCQkJCTYsCQkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCQkJCQkyLAkJCQkJCQkmcEFkLT5TdGFBY3RpdmUuQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkxLAkJCQkJCQkmU3VwUmF0ZUllLAorCQkJCQkJMSwJCQkJCQkJJnBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLAorCQkJCQkJcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sCXBBZC0+TWxtZUF1eC5TdXBSYXRlLAorCQkJCQkJRU5EX09GX0FSR1MpOworCisJCWlmIChwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiAhPSAwKQorCQl7CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCSZ0bXAsCisJCQkJCQkJICAxLAkJCQkJCSZFeHRSYXRlSWUsCisJCQkJCQkJICAxLAkJCQkJCSZwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwKKwkJCQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLCAJcEFkLT5NbG1lQXV4LkV4dFJhdGUsCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpCisJCXsKKwkJCVVDSEFSIEh0TGVuOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJSFRfQ0FQQUJJTElUWV9JRSBIdENhcGFiaWxpdHlUbXA7CisjZW5kaWYKKworCQkJLy8gYWRkIEhUIENhcGFiaWxpdHkgSUUKKwkJCUh0TGVuID0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpOworI2lmbmRlZiBSVF9CSUdfRU5ESUFOCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCSZ0bXAsCisJCQkJCQkJCTEsCQkJCQkJJkh0Q2FwSWUsCisJCQkJCQkJCTEsCQkJCQkJJkh0TGVuLAorCQkJCQkJCQlIdExlbiwJCQkJCSZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCisJCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbHNlCisJCQlOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBIdExlbik7CisJCQkJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykpOworCQkJCQkJCQkqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykgPSBTV0FQMTYoKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pKTsKKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJCQkxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJCQkxLAkJCQkJCSZIdExlbiwKKwkJCQkJCQkJSHRMZW4sCQkJCQkmSHRDYXBhYmlsaXR5VG1wLAorCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZW5kaWYKKwkJCUZyYW1lTGVuID0gRnJhbWVMZW4gKyB0bXA7CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQlpZiAocERMUyAmJiAocERMUy0+U3RhdHVzICE9IERMU19GSU5JU0gpKQorCQl7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBETFMtPlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJVGltZW91dCA9IERMU19USU1FT1VUOworCQkJUlRNUFNldFRpbWVyKCZwRExTLT5UaW1lciwgVGltZW91dCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCQkJc2l6ZW9mKEhFQURFUl84MDJfMTEpLAkJJkRsc1JzcEhkciwKKwkJCQkJCTEsCQkJCQkJCSZDYXRlZ29yeSwKKwkJCQkJCTEsCQkJCQkJCSZBY3Rpb24sCisJCQkJCQkyLAkJCQkJCQkmU3RhdHVzQ29kZSwKKwkJCQkJCTYsCQkJCQkJCVNBLAorCQkJCQkJNiwJCQkJCQkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJCQkJCUVORF9PRl9BUkdTKTsKKwl9CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyRGxzUnNwQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQJCUNhcGFiaWxpdHlJbmZvOworCVVDSEFSCQlEQVtNQUNfQUREUl9MRU5dLCBTQVtNQUNfQUREUl9MRU5dOworCVVTSE9SVAkJU3RhdHVzQ29kZTsKKwlTSE9SVAkJaTsKKwlCT09MRUFOCQlUaW1lckNhbmNlbGxlZDsKKwlVQ0hBUgkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IDA7CisgICAgVUNIQVIJCVN1cHBvcnRlZFJhdGVzTGVuOworICAgIFVDSEFSCQlTdXBwb3J0ZWRSYXRlc1tNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCUh0Q2FwYWJpbGl0eUxlbjsKKwlIVF9DQVBBQklMSVRZX0lFCUh0Q2FwYWJpbGl0eTsKKworCWlmICghcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXJldHVybjsKKworCWlmICghSU5GUkFfT04ocEFkKSkKKwkJcmV0dXJuOworCisJaWYgKCFQZWVyRGxzUnNwU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIERBLCBTQSwgJkNhcGFiaWxpdHlJbmZvLCAmU3RhdHVzQ29kZSwKKwkJCQkJCQkmU3VwcG9ydGVkUmF0ZXNMZW4sICZTdXBwb3J0ZWRSYXRlc1swXSwgJkh0Q2FwYWJpbGl0eUxlbiwgJkh0Q2FwYWJpbGl0eSkpCisJCXJldHVybjsKKworICAgIC8vIHN1cHBvcnRlZCByYXRlcyBhcnJheSBtYXkgbm90IGJlIHNvcnRlZC4gc29ydCBpdCBhbmQgZmluZCB0aGUgbWF4aW11bSByYXRlCisgICAgZm9yIChpPTA7IGk8U3VwcG9ydGVkUmF0ZXNMZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKFN1cHBvcnRlZFJhdGVzW2ldICYgMHg3ZikpCisgICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gU3VwcG9ydGVkUmF0ZXNbaV0gJiAweDdmOworICAgIH0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbigpIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggd2l0aCBTdGF0dXNDb2RlPSVkLCBDYXBhYmlsaXR5SW5mbz0weCV4XG4iLAorCQlTQVswXSwgU0FbMV0sIFNBWzJdLCBTQVszXSwgU0FbNF0sIFNBWzVdLCBTdGF0dXNDb2RlLCBDYXBhYmlsaXR5SW5mbykpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChTQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCWlmIChTdGF0dXNDb2RlID09IE1MTUVfU1VDQ0VTUykKKwkJCXsKKwkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQlVQ0hBUiBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKKworCQkJCXBFbnRyeSA9IE1hY1RhYmxlSW5zZXJ0RGxzRW50cnkocEFkLCBTQSwgaSk7CisKKwkJCQlzd2l0Y2ggKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMpCisJCQkJeworCQkJCQljYXNlIDEwODogTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNTQ7ICAgYnJlYWs7CisJCQkJCWNhc2UgOTY6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV80ODsgICBicmVhazsKKwkJCQkJY2FzZSA3MjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzM2OyAgIGJyZWFrOworCQkJCQljYXNlIDQ4OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMjQ7ICAgYnJlYWs7CisJCQkJCWNhc2UgMzY6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xODsgICBicmVhazsKKwkJCQkJY2FzZSAyNDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzEyOyAgIGJyZWFrOworCQkJCQljYXNlIDE4OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfOTsgICAgYnJlYWs7CisJCQkJCWNhc2UgMTI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV82OyAgICBicmVhazsKKwkJCQkJY2FzZSAyMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQljYXNlIDExOiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNV81OyAgYnJlYWs7CisJCQkJCWNhc2UgNDogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8yOyAgICBicmVhazsKKwkJCQkJY2FzZSAyOiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE7ICAgIGJyZWFrOworCQkJCQlkZWZhdWx0OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7ICAgYnJlYWs7CisJCQkJfQorCisJCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gbWluKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSwgTWF4U3VwcG9ydGVkUmF0ZSk7CisKKwkJCQlpZiAocEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlIDwgUkFURV9GSVJTVF9PRkRNX1JBVEUpCisJCQkJeworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKwkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCX0KKworCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gQldfMjA7CisJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDA7CisJCQkJcEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID0gMDsKKworCQkJCS8vIElmIHRoaXMgRW50cnkgc3VwcG9ydHMgODAyLjExbiwgdXBncmFkZSB0byBIVCByYXRlLgorCQkJCWlmICgoSHRDYXBhYmlsaXR5TGVuICE9IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQkJCXsKKwkJCQkJVUNIQVIJaiwgYml0bWFzazsgLy9rLGJpdG1hc2s7CisJCQkJCUNIQVIgICAgaWk7CisKKwkJCQkJaWYgKChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkdGKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkdGKSkKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRNSVg7CisJCQkJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbk5vbkdGID0gVFJVRTsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9IDE7CisJCQkJCX0KKworCQkJCQlpZiAoKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCkpCisJCQkJCXsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXPSBCV180MDsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDApJihIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCkpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjApJihIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCkpOworCQkJCQkJcEFkLT5NYWNUYWIuZkFueVN0YXRpb24yME9ubHkgPSBUUlVFOworCQkJCQl9CisKKwkJCQkJLy8gZmluZCBtYXggZml4ZWQgcmF0ZQorCQkJCQlmb3IgKGlpPTE1OyBpaT49MDsgaWktLSkKKwkJCQkJeworCQkJCQkJaiA9IGlpLzg7CisJCQkJCQliaXRtYXNrID0gKDE8PChpaS0oaio4KSkpOworCQkJCQkJaWYgKCAocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0mYml0bWFzaykgJiYgKEh0Q2FwYWJpbGl0eS5NQ1NTZXRbal0mYml0bWFzaykpCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gaWk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpZiAoaWk9PTApCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgIT0gTUNTX0FVVE8pCisJCQkJCXsKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9PSAzMikKKwkJCQkJCXsKKwkJCQkJCQkvLyBGaXggTUNTIGFzIEhUIER1cGxpY2F0ZWQgTW9kZQorCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gMTsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gMDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gMDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSAzMjsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKHBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA+IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MpCisJCQkJCQl7CisJCQkJCQkJLy8gU1RBIHN1cHBvcnRzIGZpeGVkIE1DUworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDICYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMpKTsKKwkJCQkJcEVudHJ5LT5NcGR1RGVuc2l0eSA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHk7CisJCQkJCXBFbnRyeS0+TWF4UkFtcGR1RmFjdG9yID0gSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3I7CisJCQkJCXBFbnRyeS0+TW1wc01vZGUgPSAoVUNIQVIpSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHM7CisJCQkJCXBFbnRyeS0+QU1zZHVTaXplID0gKFVDSEFSKUh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplOworCQkJCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKKworCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApCisJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCkKKwkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFKTsKKwkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uVHhTVEJDKQorCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1R4U1RCQ19DQVBBQkxFKTsKKwkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDKQorCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQykKKwkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19IVENfQ0FQQUJMRSk7CisJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnICYmIEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCkKKwkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSk7CisJCQkJCWlmIChIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLk1DU0ZlZWRiYWNrID09IDB4MDMpCisJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSk7CisKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+SFRDYXBhYmlsaXR5LCAmSHRDYXBhYmlsaXR5LCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKKwkJCQlwRW50cnktPkN1cnJUeFJhdGUgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKTsKKworCQkJCWlmIChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9PSBUUlVFKQorCQkJCXsKKwkJCQkJUFVDSEFSIHBUYWJsZTsKKwkJCQkJVUNIQVIgVGFibGVTaXplID0gMDsKKworCQkJCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsICZwRW50cnktPkN1cnJUeFJhdGVJbmRleCk7CisJCQkJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREU7CisJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQkJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBGQUxTRTsKKworCQkJCQlSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nKChVQ0hBUilwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlLCBwRW50cnkpOworCQkJCX0KKwkJCQlwRW50cnktPlJhdGVMZW4gPSBTdXBwb3J0ZWRSYXRlc0xlbjsKKworCQkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCQkJeworCQkJCQkvLyBJZiBzdXBwb3J0IFdQQSBvciBXUEEyLCBzdGFydCBTVEFLZXkgaGFuZCBzaGFrZSwKKwkJCQkJLy8gSWYgZmFpbGVkIGhhbmQgc2hha2UsIGp1c3QgdGVhciBkb3duIHBlZXIgRExTCisJCQkJCWlmIChSVE1QU2VuZFNUQUtleVJlcXVlc3QocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCQl7CisJCQkJCQlNTE1FX0RMU19SRVFfU1RSVUNUCU1sbWVEbHNSZXE7CisJCQkJCQlVU0hPUlQJCQkJcmVhc29uID0gUkVBU09OX1FPU19DSVBIRVJfTk9UX1NVUFBPUlQ7CisKKwkJCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19URUFSX0RPV04sIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX05PTkU7CisJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJETFMgLSBQZWVyRGxzUnNwQWN0aW9uIGZhaWxlZCB3aGVuIGNhbGwgUlRNUFNlbmRTVEFLZXlSZXF1ZXN0IFxuIikpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX1dBSVRfS0VZOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSB3YWl0aW5nIGZvciBTVEFLZXkgaGFuZHNoYWtlIHByb2NlZHVyZVxuIikpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19GSU5JU0g7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbigpIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggU3VjY2VlZCB3aXRoIFdFUCBvciBubyBzZWN1cml0eVxuIiwgU0FbMF0sIFNBWzFdLCBTQVsyXSwgU0FbM10sIFNBWzRdLCBTQVs1XSkpOworCQkJCX0KKworCQkJCS8vaW5pdGlhbGl6ZSBzZXEgbm8gZm9yIERMUyBmcmFtZXMuCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU2VxdWVuY2UgPSAwOworCQkJCWlmIChIdENhcGFiaWxpdHlMZW4gIT0gMCkKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uYkhUQ2FwID0gVFJVRTsKKwkJCQllbHNlCisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IEZBTFNFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIERMUyBzZXR1cCBwcm9jZWR1cmUgZmFpbGVkLgorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24gZmFpbGVkIHdpdGggU3RhdHVzQ29kZT0lZCBcbiIsIFN0YXR1c0NvZGUpKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChpID49IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24oKSB1cGRhdGUgdGltZW91dCB2YWx1ZSBcbiIpKTsKKwkJZm9yIChpPShNQVhfTlVNX09GX0RMU19FTlRSWS0xKTsgaT49TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaS0tKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgTUFDX0FERFJfRVFVQUwoU0EsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQkJeworCQkJCWlmIChTdGF0dXNDb2RlID09IE1MTUVfU1VDQ0VTUykKKwkJCQl7CisJCQkJCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5OworCQkJCQlVQ0hBUiBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKKworCQkJCQlwRW50cnkgPSBNYWNUYWJsZUluc2VydERsc0VudHJ5KHBBZCwgU0EsIGkpOworCisJCQkJCXN3aXRjaCAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcykKKwkJCQkJeworCQkJCQkJY2FzZSAxMDg6IE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzU0OyAgIGJyZWFrOworCQkJCQkJY2FzZSA5NjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzQ4OyAgIGJyZWFrOworCQkJCQkJY2FzZSA3MjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzM2OyAgIGJyZWFrOworCQkJCQkJY2FzZSA0ODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI0OyAgIGJyZWFrOworCQkJCQkJY2FzZSAzNjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE4OyAgIGJyZWFrOworCQkJCQkJY2FzZSAyNDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzEyOyAgIGJyZWFrOworCQkJCQkJY2FzZSAxODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzk7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAxMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzY7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAyMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQkJY2FzZSAxMTogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzVfNTsgIGJyZWFrOworCQkJCQkJY2FzZSA0OiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI7ICAgIGJyZWFrOworCQkJCQkJY2FzZSAyOiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE7ICAgIGJyZWFrOworCQkJCQkJZGVmYXVsdDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCQl9CisKKwkJCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gbWluKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSwgTWF4U3VwcG9ydGVkUmF0ZSk7CisKKwkJCQkJaWYgKHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQkJCX0KKworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDA7CisJCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDA7CisKKwkJCQkJLy8gSWYgdGhpcyBFbnRyeSBzdXBwb3J0cyA4MDIuMTFuLCB1cGdyYWRlIHRvIEhUIHJhdGUuCisJCQkJCWlmICgoSHRDYXBhYmlsaXR5TGVuICE9IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQkJCQl7CisJCQkJCQlVQ0hBUglqLCBiaXRtYXNrOyAvL2ssYml0bWFzazsKKwkJCQkJCUNIQVIgICAgaWk7CisKKwkJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJCQkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uTm9uR0YgPSBUUlVFOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9IDE7CisJCQkJCQl9CisKKwkJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGgpICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoKSkKKwkJCQkJCXsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVz0gQldfNDA7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9ICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3I0MCkmKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjIwKSYoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApKTsKKwkJCQkJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbjIwT25seSA9IFRSVUU7CisJCQkJCQl9CisKKwkJCQkJCS8vIGZpbmQgbWF4IGZpeGVkIHJhdGUKKwkJCQkJCWZvciAoaWk9MTU7IGlpPj0wOyBpaS0tKQorCQkJCQkJeworCQkJCQkJCWogPSBpaS84OworCQkJCQkJCWJpdG1hc2sgPSAoMTw8KGlpLShqKjgpKSk7CisJCQkJCQkJaWYgKCAocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0mYml0bWFzaykgJiYgKEh0Q2FwYWJpbGl0eS5NQ1NTZXRbal0mYml0bWFzaykpCisJCQkJCQkJeworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBpaTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJCWlmIChpaT09MCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyAhPSBNQ1NfQVVUTykKKwkJCQkJCXsKKwkJCQkJCQlwcmludGsoIkBAQCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gJWRcbiIsCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTKTsKKwkJCQkJCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPT0gMzIpCisJCQkJCQkJeworCQkJCQkJCQkvLyBGaXggTUNTIGFzIEhUIER1cGxpY2F0ZWQgTW9kZQorCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IDE7CisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gMDsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IDA7CisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IDMyOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGlmIChwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPiBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTKQorCQkJCQkJCXsKKwkJCQkJCQkJLy8gU1RBIHN1cHBvcnRzIGZpeGVkIE1DUworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlJ4U1RCQyAmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSk7CisJCQkJCQlwRW50cnktPk1wZHVEZW5zaXR5ID0gSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eTsKKwkJCQkJCXBFbnRyeS0+TWF4UkFtcGR1RmFjdG9yID0gSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3I7CisJCQkJCQlwRW50cnktPk1tcHNNb2RlID0gKFVDSEFSKUh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzOworCQkJCQkJcEVudHJ5LT5BTXNkdVNpemUgPSAoVUNIQVIpSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5BTXNkdVNpemU7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKKworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjIwKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0kyMF9DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCkKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJNDBfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5UeFNUQkMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1R4U1RCQ19DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlJ4U1RCQykKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUnhTVEJDX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQykKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfSFRDX0NBUEFCTEUpOworCQkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgJiYgSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0KQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5NQ1NGZWVkYmFjayA9PSAweDAzKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19NQ1NGRUVEQkFDS19DQVBBQkxFKTsKKworCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+SFRDYXBhYmlsaXR5LCAmSHRDYXBhYmlsaXR5LCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCQkJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCQkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisJCQkJCXBFbnRyeS0+Q3VyclR4UmF0ZSA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKwkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKTsKKworCQkJCQlpZiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gVFJVRSkKKwkJCQkJeworCQkJCQkJUFVDSEFSIHBUYWJsZTsKKwkJCQkJCVVDSEFSIFRhYmxlU2l6ZSA9IDA7CisKKwkJCQkJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsIHBFbnRyeSwgJnBUYWJsZSwgJlRhYmxlU2l6ZSwgJnBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4KTsKKwkJCQkJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJCQkJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBGQUxTRTsKKworCQkJCQkJUlRNUFVwZGF0ZUxlZ2FjeVR4U2V0dGluZygoVUNIQVIpcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSwgcEVudHJ5KTsKKwkJCQkJfQorCQkJCQlwRW50cnktPlJhdGVMZW4gPSBTdXBwb3J0ZWRSYXRlc0xlbjsKKworCQkJCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorCQkJCQl7CisJCQkJCQkvLyBJZiBzdXBwb3J0IFdQQSBvciBXUEEyLCBzdGFydCBTVEFLZXkgaGFuZCBzaGFrZSwKKwkJCQkJCS8vIElmIGZhaWxlZCBoYW5kIHNoYWtlLCBqdXN0IHRlYXIgZG93biBwZWVyIERMUworCQkJCQkJaWYgKFJUTVBTZW5kU1RBS2V5UmVxdWVzdChwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJCQl7CisJCQkJCQkJTUxNRV9ETFNfUkVRX1NUUlVDVAlNbG1lRGxzUmVxOworCQkJCQkJCVVTSE9SVAkJCQlyZWFzb24gPSBSRUFTT05fUU9TX0NJUEhFUl9OT1RfU1VQUE9SVDsKKworCQkJCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfTk9ORTsKKwkJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbiBmYWlsZWQgd2hlbiBjYWxsIFJUTVBTZW5kU1RBS2V5UmVxdWVzdCBcbiIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfV0FJVF9LRVk7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSB3YWl0aW5nIGZvciBTVEFLZXkgaGFuZHNoYWtlIHByb2NlZHVyZVxuIikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19GSU5JU0g7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24oKSBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFN1Y2NlZWQgd2l0aCBXRVAgb3Igbm8gc2VjdXJpdHlcbiIsIFNBWzBdLCBTQVsxXSwgU0FbMl0sIFNBWzNdLCBTQVs0XSwgU0FbNV0pKTsKKwkJCQkJfQorCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TZXF1ZW5jZSA9IDA7CisJCQkJCWlmIChIdENhcGFiaWxpdHlMZW4gIT0gMCkKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IFRSVUU7CisJCQkJCWVsc2UKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IEZBTFNFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBETFMgc2V0dXAgcHJvY2VkdXJlIGZhaWxlZC4KKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX05PTkU7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbiBmYWlsZWQgd2l0aCBTdGF0dXNDb2RlPSVkIFxuIiwgU3RhdHVzQ29kZSkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVEbHNUZWFyRG93bkFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMJCU5TdGF0dXM7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJVUNIQVIJCQlDYXRlZ29yeSA9IENBVEVHT1JZX0RMUzsKKwlVQ0hBUgkJCUFjdGlvbiA9IEFDVElPTl9ETFNfVEVBUkRPV047CisJVVNIT1JUCQkJUmVhc29uQ29kZSA9IFJFQVNPTl9RT1NfVU5TUEVDSUZZOworCUhFQURFUl84MDJfMTEJRGxzVGVhckRvd25IZHI7CisJUFJUXzgwMl8xMV9ETFMJcERMUzsKKwlCT09MRUFOCQkJVGltZXJDYW5jZWxsZWQ7CisJVUNIQVIJCQlpOworCisJaWYoIU1sbWVEbHNSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJnBETFMsICZSZWFzb25Db2RlKSkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBNbG1lRGxzVGVhckRvd25BY3Rpb24oKSB3aXRoIFJlYXNvbkNvZGU9JWQgXG4iLCBSZWFzb25Db2RlKSk7CisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIE1sbWVEbHNUZWFyRG93bkFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlBY3RIZWFkZXJJbml0KHBBZCwgJkRsc1RlYXJEb3duSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJLy8gQnVpbGQgYmFzaWMgZnJhbWUgZmlyc3QKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJCXNpemVvZihIRUFERVJfODAyXzExKSwJCSZEbHNUZWFyRG93bkhkciwKKwkJCQkJMSwJCQkJCQkJJkNhdGVnb3J5LAorCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQk2LAkJCQkJCQkmcERMUy0+TWFjQWRkciwKKwkJCQkJNiwJCQkJCQkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJCQkJMiwJCQkJCQkJJlJlYXNvbkNvZGUsCisJCQkJCUVORF9PRl9BUkdTKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwlSVE1QQ2FuY2VsVGltZXIoJnBETFMtPlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJLy8gUmVtb3ZlIGtleSBpbiBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBETFMtPk1hY0FkZHIsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlNYWNUYWJsZURlbGV0ZURsc0VudHJ5KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJfQorCX0KKworCS8vIGNsZWFyIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpID0gTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSA8IE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAoTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQlNYWNUYWJsZURlbGV0ZURsc0VudHJ5KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJfQorCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJEbHNUZWFyRG93bkFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIJCQlEQVtNQUNfQUREUl9MRU5dLCBTQVtNQUNfQUREUl9MRU5dOworCVVTSE9SVAkJCVJlYXNvbkNvZGU7CisJVUlOVAkJCWk7CisJQk9PTEVBTgkJCVRpbWVyQ2FuY2VsbGVkOworCisJaWYgKCFwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJcmV0dXJuOworCisJaWYgKCFJTkZSQV9PTihwQWQpKQorCQlyZXR1cm47CisKKwlpZiAoIVBlZXJEbHNUZWFyRG93blNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBEQSwgU0EsICZSZWFzb25Db2RlKSkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBQZWVyRGxzVGVhckRvd25BY3Rpb24oKSBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IHdpdGggUmVhc29uQ29kZT0lZFxuIiwgU0FbMF0sIFNBWzFdLCBTQVsyXSwgU0FbM10sIFNBWzRdLCBTQVs1XSwgUmVhc29uQ29kZSkpOworCisJLy8gY2xlYXIgbG9jYWwgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIE1BQ19BRERSX0VRVUFMKFNBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJeworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCS8vQXNpY0RlbFdjaWRUYWIocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQpOworCQkJLy9Bc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsIEJTUzAsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCk7CisJCQlNYWNUYWJsZURlbGV0ZURsc0VudHJ5KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJfQorCX0KKworCS8vIGNsZWFyIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChTQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkvL0FzaWNEZWxXY2lkVGFiKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lEKTsKKwkJCS8vQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkocEFkLCBCU1MwLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQpOworCQkJTWFjVGFibGVEZWxldGVEbHNFbnRyeShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCX0KKwl9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBSVE1QQ2hlY2tETFNUaW1lT3V0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworCVVMT05HCQkJCWk7CisJTUxNRV9ETFNfUkVRX1NUUlVDVAlNbG1lRGxzUmVxOworCVVTSE9SVAkJCQlyZWFzb24gPSBSRUFTT05fUU9TX1VOU1BFQ0lGWTsKKworCWlmICghIHBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQlyZXR1cm47CisKKwlpZiAoISBJTkZSQV9PTihwQWQpKQorCQlyZXR1cm47CisKKwkvLyBJZiB0aW1lb3V0IHZhbHVlIGlzIGVxdWFsZWQgdG8gemVybywgaXQgbWVhbnMgYWx3YXlzIG5vdCBiZSB0aW1lb3V0LgorCisJLy8gdXBkYXRlIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQpICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkKKwkJCSYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0ICE9IDApKQorCQl7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5Db3VudERvd25UaW1lciAtLTsKKworCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID09IDApCisJCQl7CisJCQkJcmVhc29uID0gUkVBU09OX1FPU19SRVFVRVNUX1RJTUVPVVQ7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQl9CisJCX0KKwl9CisKKwkvLyB1cGRhdGUgcGVlciBkbHMgdGFibGUgZW50cnkKKwlmb3IgKGk9TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJaWYgKChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCkgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKQorCQkJJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQgIT0gMCkpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyIC0tOworCisJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uQ291bnREb3duVGltZXIgPT0gMCkKKwkJCXsKKwkJCQlyZWFzb24gPSBSRUFTT05fUU9TX1JFUVVFU1RfVElNRU9VVDsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFJUTVBSY3ZGcmFtZURMU0NoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFBIRUFERVJfODAyXzExCXBIZWFkZXIsCisJSU4gVUxPTkcJCQlMZW4sCisJSU4gUFJUMjhYWF9SWERfU1RSVUMJcFJ4RCkKK3sKKwlVTE9ORwkJCWk7CisJQk9PTEVBTgkJCWJGaW5kRW50cnkgPSBGQUxTRTsKKwlCT09MRUFOCQkJYlNUQUtleUZyYW1lID0gRkFMU0U7CisJUEVBUE9MX1BBQ0tFVAlwRWFwOworCVBVQ0hBUgkJCXBQcm90bywgcEFkZHIgPSBOVUxMOworCVBVQ0hBUgkJCXBTVEFLZXkgPSBOVUxMOworCVVDSEFSCQkJWmVyb1JlcGxheVtMRU5fS0VZX0RFU0NfUkVQTEFZXTsKKwlVQ0hBUgkJCU1pY1sxNl0sIE9sZE1pY1sxNl07CisJVUNIQVIJCQlkaWdlc3RbODBdOworCVVDSEFSCQkJRGxzUFRLWzgwXTsKKwlVQ0hBUgkJCXRlbXBbNjRdOworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKwlDSVBIRVJfS0VZCQlQYWlyd2lzZUtleTsKKworCisJaWYgKCEgcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXJldHVybiBiU1RBS2V5RnJhbWU7CisKKwlpZiAoISBJTkZSQV9PTihwQWQpKQorCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCisJaWYgKCEgKHBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA4KSkKKwkJcmV0dXJuIGJTVEFLZXlGcmFtZTsKKworCWlmIChMZW4gPCBMRU5HVEhfODAyXzExICsgNiArIDIgKyAyKQorCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCisJcFByb3RvCT0gKFBVQ0hBUilwSGVhZGVyICsgTEVOR1RIXzgwMl8xMSArIDIgKyA2OwkvLyBRT1MgQ29udHJvbCBmaWVsZCAsIDB4QUEgMHhBQSAweEFBIDB4MDAgMHgwMCAweDAwCisJcEFkZHIJPSBwSGVhZGVyLT5BZGRyMjsKKworCS8vIEwyUEFEIGJpdCBvbiB3aWxsIHBhZCAyIGJ5dGVzIGF0IExMQworCWlmIChwUnhELT5MMlBBRCkKKwl7CisJCXBQcm90byArPSAyOworCX0KKworCWlmIChSVE1QRXF1YWxNZW1vcnkoRUFQT0wsIHBQcm90bywgMikgJiYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49ICBOZGlzODAyXzExQXV0aE1vZGVXUEEpKQorCXsKKwkJcEVhcCA9IChQRUFQT0xfUEFDS0VUKSAocFByb3RvICsgMik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBTbmlmZiBMZW49JWxkLCBEYXRhTGVuPSVkLCBLZXlNaWM9JWQsIEluc3RhbGw9JWQsIEtleUFjaz0lZCwgU2VjdXJlPSVkLCBFS0RfREw9JWQsIEVycm9yPSVkLCBSZXF1ZXN0PSVkXG4iLCBMZW4sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExFTkdUSF84MDJfMTEgKyA2ICsgMiArIDIgKyBzaXplb2YoRUFQT0xfUEFDS0VUKSAtIE1BWF9MRU5fT0ZfUlNOSUUgKyAxNiksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLktleU1pYywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWFwLT5LZXlEZXNjLktleUluZm8uSW5zdGFsbCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWFwLT5LZXlEZXNjLktleUluZm8uS2V5QWNrLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBFYXAtPktleURlc2MuS2V5SW5mby5TZWN1cmUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLkVLRF9ETCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWFwLT5LZXlEZXNjLktleUluZm8uRXJyb3IsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLlJlcXVlc3QpKTsKKworCQlpZiAoKExlbiA+PSAoTEVOR1RIXzgwMl8xMSArIDYgKyAyICsgMiArIHNpemVvZihFQVBPTF9QQUNLRVQpIC0gTUFYX0xFTl9PRl9SU05JRSArIDE2KSkgJiYgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLktleU1pYworCQkJJiYgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLkluc3RhbGwgJiYgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLktleUFjayAmJiBwRWFwLT5LZXlEZXNjLktleUluZm8uU2VjdXJlCisJCQkmJiBwRWFwLT5LZXlEZXNjLktleUluZm8uRUtEX0RMICYmICFwRWFwLT5LZXlEZXNjLktleUluZm8uRXJyb3IgJiYgIXBFYXAtPktleURlc2MuS2V5SW5mby5SZXF1ZXN0KQorCQl7CisJCQkvLyBGaXJzdCB2YWxpZGF0ZSByZXBsYXkgY291bnRlciwgb25seSBhY2NlcHQgbWVzc2FnZSB3aXRoIGxhcmdlciByZXBsYXkgY291bnRlcgorCQkJLy8gTGV0IGVxdWFsIHBhc3MsIHNvbWUgQVAgc3RhcnQgd2l0aCBhbGwgemVybyByZXBsYXkgY291bnRlcgorCQkJTmRpc1plcm9NZW1vcnkoWmVyb1JlcGxheSwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisJCQlpZiAoKFJUTVBDb21wYXJlTWVtb3J5KHBFYXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMSkgJiYKKwkJCQkoUlRNUENvbXBhcmVNZW1vcnkocEVhcC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAwKSkKKwkJCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCisJCQkvL1JUTVBNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIHBFYXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisJCQlSVE1QTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5EbHNSZXBsYXlDb3VudGVyLCBwRWFwLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBTbmlmZiByZXBsYXkgY291bnRlciAoJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4KSBMZW49JWxkLCBLZXlEYXRhTGVuPSVkXG4iLAorCQkJCXBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMF0sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMV0sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMl0sCisJCQkJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclszXSwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlcls0XSwJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlcls1XSwKKwkJCQlwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzZdLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzddLCBMZW4sIHBFYXAtPktleURlc2MuS2V5RGF0YVsxXSkpOworCisJCQkvLyBwdXQgdGhlc2UgY29kZSBzZWdtZW50IHRvIGdldCB0aGUgcmVwbGF5IGNvdW50ZXIKKwkJCWlmIChwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpCisJCQkJcmV0dXJuIGJTVEFLZXlGcmFtZTsKKworCQkJLy8gQ2hlY2sgTUlDIHZhbHVlCisJCQkvLyBTYXZlIHRoZSBNSUMgYW5kIHJlcGxhY2Ugd2l0aCB6ZXJvCisJCQkvLyB1c2UgcHJvcHJpZXRhcnkgUFRLCisJCQlOZGlzWmVyb01lbW9yeSh0ZW1wLCA2NCk7CisJCQlOZGlzTW92ZU1lbW9yeSh0ZW1wLCAiSUVFRTgwMi4xMSBXSVJFTEVTUyBBQ0NFU1MgUE9JTlQiLCAzMik7CisJCQlXcGFDb3VudFBUSyhwQWQsIHRlbXAsIHRlbXAsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCB0ZW1wLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBEbHNQVEssIExFTl9QVEspOworCisJCQlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBFYXAtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwkJCU5kaXNaZXJvTWVtb3J5KHBFYXAtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJCXsKKwkJCQkvLyBBRVMKKwkJCQlITUFDX1NIQTEoKFBVQ0hBUikgcEVhcCwgcEVhcC0+Qm9keV9MZW5bMV0gKyA0LCBEbHNQVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJCQlOZGlzTW92ZU1lbW9yeShNaWMsCWRpZ2VzdCwJTEVOX0tFWV9ERVNDX01JQyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaG1hY19tZDUoRGxzUFRLLCBMRU5fRUFQX01JQ0ssIChQVUNIQVIpIHBFYXAsIHBFYXAtPkJvZHlfTGVuWzFdICsgNCwgTWljKTsKKwkJCX0KKworCQkJaWYgKCFOZGlzRXF1YWxNZW1vcnkoT2xkTWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1JQyBEaWZmZXJlbnQgaW4gTXNnMSBvZiBTVEFLZXkgaGFuZHNoYWtlISBcbiIpKTsKKwkJCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCQkJfQorCQkJZWxzZQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1JQyBWQUxJRCBpbiBNc2cxIG9mIFNUQUtleSBoYW5kc2hha2UhIFxuIikpOworI2lmIDEKKwkJCWlmICgocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzBdID09IDB4REQpICYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbMl0gPT0gMHgwMCkgJiYgKHBFYXAtPktleURlc2MuS2V5RGF0YVszXSA9PSAweDBDKQorCQkJCSYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbNF0gPT0gMHg0MykgJiYgKHBFYXAtPktleURlc2MuS2V5RGF0YVs1XSA9PSAweDAyKSkKKwkJCXsKKwkJCQlwQWRkcgkJCT0gcEVhcC0+S2V5RGVzYy5LZXlEYXRhICsgODsJCS8vIFRwZSgxKSwgTGVuKDEpLCBPVUkoMyksIERhdGFUeXBlKDEpLCBSZXNlcnZlZCgyKQorCQkJCXBTVEFLZXkJCQk9IHBFYXAtPktleURlc2MuS2V5RGF0YSArIDE0OwkvLyBUcGUoMSksIExlbigxKSwgT1VJKDMpLCBEYXRhVHlwZSgxKSwgUmVzZXJ2ZWQoMiksIFNUQUtleV9NYWNfQWRkcig2KQorCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBSZWNlaXZlIFNUQUtleSBNZXNzYWdlLTEgZnJvbSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBMZW49JWxkLCBLZXlEYXRhTGVuPSVkXG4iLAorCQkJCQlwQWRkclswXSwgcEFkZHJbMV0sIHBBZGRyWzJdLCBwQWRkclszXSwgcEFkZHJbNF0sIHBBZGRyWzVdLCBMZW4sIHBFYXAtPktleURlc2MuS2V5RGF0YVsxXSkpOworCisJCQkJYlNUQUtleUZyYW1lID0gVFJVRTsKKwkJCX0KKyNlbHNlCisJCQlpZiAoKHBFYXAtPktleURlc2MuS2V5RGF0YVswXSA9PSAweEREKSAmJiAocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzJdID09IDB4MDApICYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbM10gPT0gMHgwRikKKwkJCQkmJiAocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzRdID09IDB4QUMpICYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbNV0gPT0gMHgwMikpCisJCQl7CisJCQkJcEFkZHIJCQk9IHBFYXAtPktleURlc2MuS2V5RGF0YSArIDg7CQkvLyBUcGUoMSksIExlbigxKSwgT1VJKDMpLCBEYXRhVHlwZSgxKSwgUmVzZXJ2ZWQoMikKKwkJCQlwU1RBS2V5CQkJPSBwRWFwLT5LZXlEZXNjLktleURhdGEgKyAxNDsJLy8gVHBlKDEpLCBMZW4oMSksIE9VSSgzKSwgRGF0YVR5cGUoMSksIFJlc2VydmVkKDIpLCBTVEFLZXlfTWFjX0FkZHIoNikKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggTGVuPSVkLCBLZXlEYXRhTGVuPSVkXG4iLAorCQkJCQlwQWRkclswXSwgcEFkZHJbMV0sIHBBZGRyWzJdLCBwQWRkclszXSwgcEFkZHJbNF0sIHBBZGRyWzVdLCBMZW4sIHBFYXAtPktleURlc2MuS2V5RGF0YVsxXSkpOworCisJCQkJYlNUQUtleUZyYW1lID0gVFJVRTsKKwkJCX0KKyNlbmRpZgorCisJCX0KKwkJZWxzZSBpZiAoTGVuID49IChMRU5HVEhfODAyXzExICsgNiArIDIgKyAyICsgc2l6ZW9mKEVBUE9MX1BBQ0tFVCkgLSBNQVhfTEVOX09GX1JTTklFKSkKKwkJeworCQkJUlRNUE1vdmVNZW1vcnkocEFkLT5TdGFDZmcuRGxzUmVwbGF5Q291bnRlciwgcEVhcC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gU25pZmYgcmVwbGF5IGNvdW50ZXIgMiglMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngpIExlbj0lbGQsIEtleURhdGFMZW49JWRcbiIsCisJCQkJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclswXSwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclsxXSwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclsyXSwKKwkJCQlwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzNdLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzRdLAlwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzVdLAorCQkJCXBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbNl0sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbN10sIExlbiwgcEVhcC0+S2V5RGVzYy5LZXlEYXRhWzFdKSk7CisKKwkJfQorCX0KKworCS8vIElmIHRpbWVvdXQgdmFsdWUgaXMgZXF1YWxlZCB0byB6ZXJvLCBpdCBtZWFucyBhbHdheXMgbm90IGJlIHRpbWVvdXQuCisJLy8gdXBkYXRlIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaT0gMDsgaSA8IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChwQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCWlmIChiU1RBS2V5RnJhbWUpCisJCQl7CisJCQkJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnk7CisKKwkJCQkvLyBTVEFLZXkgZnJhbWUsIGFkZCBwYWlyd2lzZSBrZXkgdGFibGUKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfRklOSVNIOworCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJCQlQYWlyd2lzZUtleS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJCQlOZGlzTW92ZU1lbW9yeShQYWlyd2lzZUtleS5LZXksICZwU1RBS2V5WzBdLCBMRU5fVEtJUF9FSyk7CisJCQkJTmRpc01vdmVNZW1vcnkoUGFpcndpc2VLZXkuVHhNaWMsICZwU1RBS2V5WzE2XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwkJCQlOZGlzTW92ZU1lbW9yeShQYWlyd2lzZUtleS5SeE1pYywgJnBTVEFLZXlbMjRdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJCQkJUGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGc7CisKKwkJCQlwRW50cnkgPSBEbHNFbnRyeVRhYmxlTG9va3VwKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwgVFJVRSk7CisJCQkJLy9Bc2ljQWRkS2V5RW50cnkocEFkLCAoVVNIT1JUKShpICsgMiksIEJTUzAsIDAsICZQYWlyd2lzZUtleSwgVFJVRSwgVFJVRSk7CS8vIHJlc2VydmUgMCBmb3IgbXVsdGljYXN0LCAxIGZvciB1bmljYXN0CisJCQkJLy9Bc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCAoVVNIT1JUKShpICsgMiksIHBBZGRyKTsKKwkJCQkvLyBBZGQgUGFpci13aXNlIGtleSB0byBBc2ljCisjaWZkZWYgUlQyODcwCisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlkgS2V5SW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1BZX01BQ19BRERSKEtleUluZm8uTWFjQWRkcixwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlJbmZvLk1hY1RhYk1hdGNoV0NJRD1wQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJktleUluZm8uQ2lwaGVyS2V5LCAgJlBhaXJ3aXNlS2V5LHNpemVvZihDSVBIRVJfS0VZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9DTURfU0VUX0tFWV9UQUJMRSwgJktleUluZm8sIHNpemVvZihSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQUNfVEFCTEVfRU5UUlkgcERMU0VudHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBETFNFbnRyeSA9IERsc0VudHJ5VGFibGVMb29rdXAocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyLCBUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRExTRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZz1QYWlyd2lzZUtleS5DaXBoZXJBbGc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9DTURfU0VUX1JYX1dDSURfVEFCTEUsIHBETFNFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCA8LS0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleSwgJlBhaXJ3aXNlS2V5LCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIChQZWVyIFNUQSBNQUMgQWRkcmVzcyBTVEFLZXkpIFxuIikpOworCisJCQkJUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gRmluaXNoIFNUQUtleSBoYW5kc2hha2UgcHJvY2VkdXJlIChJbml0aWF0b3Igc2lkZSlcbiIpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBEYXRhIGZyYW1lLCB1cGRhdGUgdGltZW91dCB2YWx1ZQorCQkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkKKwkJCQl7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dDsKKwkJCQkJLy9Bc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCAoVVNIT1JUKShpICsgMiksIHBBZGRyKTsKKwkJCQl9CisJCQl9CisKKwkJCWJGaW5kRW50cnkgPSBUUlVFOworCQl9CisJfQorCisJLy8gdXBkYXRlIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChwQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCWlmIChiU1RBS2V5RnJhbWUpCisJCQl7CisJCQkJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnkgPSBOVUxMOworCisJCQkJLy8gU1RBS2V5IGZyYW1lLCBhZGQgcGFpcndpc2Uga2V5IHRhYmxlLCBhbmQgc2VuZCBTVEFrZXkgTXNnLTIKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfRklOSVNIOworCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJCQlQYWlyd2lzZUtleS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJCQlOZGlzTW92ZU1lbW9yeShQYWlyd2lzZUtleS5LZXksICZwU1RBS2V5WzBdLCBMRU5fVEtJUF9FSyk7CisJCQkJTmRpc01vdmVNZW1vcnkoUGFpcndpc2VLZXkuVHhNaWMsICZwU1RBS2V5WzE2XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwkJCQlOZGlzTW92ZU1lbW9yeShQYWlyd2lzZUtleS5SeE1pYywgJnBTVEFLZXlbMjRdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJCQkJUGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGc7CisKKwkJCQlwRW50cnkgPSBEbHNFbnRyeVRhYmxlTG9va3VwKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwgVFJVRSk7CisJCQkJLy9Bc2ljQWRkS2V5RW50cnkocEFkLCAoVVNIT1JUKShpICsgMiksIEJTUzAsIDAsICZQYWlyd2lzZUtleSwgVFJVRSwgVFJVRSk7CS8vIHJlc2VydmUgMCBmb3IgbXVsdGljYXN0LCAxIGZvciB1bmljYXN0CisJCQkJLy9Bc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCAoVVNIT1JUKShpICsgMiksIHBBZGRyKTsKKwkJCQkvLyBBZGQgUGFpci13aXNlIGtleSB0byBBc2ljCisjaWZkZWYgUlQyODcwCisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlkgS2V5SW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1BZX01BQ19BRERSKEtleUluZm8uTWFjQWRkcixwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlJbmZvLk1hY1RhYk1hdGNoV0NJRD1wQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJktleUluZm8uQ2lwaGVyS2V5LCAgJlBhaXJ3aXNlS2V5LHNpemVvZihDSVBIRVJfS0VZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9DTURfU0VUX0tFWV9UQUJMRSwgJktleUluZm8sIHNpemVvZihSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQUNfVEFCTEVfRU5UUlkgcERMU0VudHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBETFNFbnRyeSA9IERsc0VudHJ5VGFibGVMb29rdXAocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyLCBUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRExTRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZz1QYWlyd2lzZUtleS5DaXBoZXJBbGc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9DTURfU0VUX1JYX1dDSURfVEFCTEUsIHBETFNFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvL0JlbnNvbiBtb2RpZmllZCBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5LCAyMDA4MDcyNCA8LS0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleSwgJlBhaXJ3aXNlS2V5LCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIChJbml0aWF0b3IgU1RBIE1BQyBBZGRyZXNzIFNUQUtleSlcbiIpKTsKKworCQkJCS8vIElmIHN1cHBvcnQgV1BBIG9yIFdQQTIsIHN0YXJ0IFNUQUtleSBoYW5kIHNoYWtlLAorCQkJCS8vIElmIGZhaWxlZCBoYW5kIHNoYWtlLCBqdXN0IHRlYXIgZG93biBwZWVyIERMUworCQkJCWlmIChSVE1QU2VuZFNUQUtleUhhbmRTaGFrZShwQWQsIHBBZGRyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCXsKKwkJCQkJTUxNRV9ETFNfUkVRX1NUUlVDVAlNbG1lRGxzUmVxOworCQkJCQlVU0hPUlQJCQkJcmVhc29uID0gUkVBU09OX1FPU19DSVBIRVJfTk9UX1NVUFBPUlQ7CisKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gRmluaXNoIFNUQUtleSBoYW5kc2hha2UgcHJvY2VkdXJlIChQZWVyIHNpZGUpXG4iKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIERhdGEgZnJhbWUsIHVwZGF0ZSB0aW1lb3V0IHZhbHVlCisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKQorCQkJCXsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uQ291bnREb3duVGltZXIgPSBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0OworCQkJCX0KKwkJCX0KKworCQkJYkZpbmRFbnRyeSA9IFRSVUU7CisJCX0KKwl9CisKKworCXJldHVybiBiU1RBS2V5RnJhbWU7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDaGVjayBpZiB0aGUgZnJhbWUgY2FuIGJlIHNlbnQgdGhyb3VnaCBETFMgZGlyZWN0IGxpbmsgaW50ZXJmYWNlCisKKwlBcmd1bWVudHM6CisJCXBBZAkJUG9pbnRlcgl0byBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCURMUyBlbnRyeSBpbmRleAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlSVE1QQ2hlY2tETFNGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEQSkKK3sKKwlJTlQgcnZhbCA9IC0xOworCUlOVAlpOworCisJaWYgKCFwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJcmV0dXJuIHJ2YWw7CisKKwlpZiAoIUlORlJBX09OKHBBZCkpCisJCXJldHVybiBydmFsOworCisJZG97CisJCS8vIGNoZWNrIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmCisJCQkJTUFDX0FERFJfRVFVQUwocERBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQlydmFsID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8vIGNoZWNrIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJCWZvciAoaT1NQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmCisJCQkJTUFDX0FERFJfRVFVQUwocERBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQlydmFsID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKEZBTFNFKTsKKworCXJldHVybiBydmFsOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTCQlOU3RhdHVzOworCUhFQURFUl84MDJfMTEJRGxzVGVhckRvd25IZHI7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJVVNIT1JUCQkJUmVhc29uID0gUkVBU09OX1FPU19RU1RBX0xFQVZJTkdfUUJTUzsKKwlVQ0hBUgkJCUNhdGVnb3J5ID0gQ0FURUdPUllfRExTOworCVVDSEFSCQkJQWN0aW9uID0gQUNUSU9OX0RMU19URUFSRE9XTjsKKwlVQ0hBUgkJCWkgPSAwOworCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykgfHwKKwkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKQorCQlyZXR1cm47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZW5kIERMUyBUZWFyRG93biBGcmFtZSBcbiIpKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQVNTT0MgLSBSVE1QU2VuZERMU1RlYXJEb3duRnJhbWUoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQlyZXR1cm47CisJfQorCisJQWN0SGVhZGVySW5pdChwQWQsICZEbHNUZWFyRG93bkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJCXNpemVvZihIRUFERVJfODAyXzExKSwJCSZEbHNUZWFyRG93bkhkciwKKwkJCQkJMSwJCQkJCQkJJkNhdGVnb3J5LAorCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQk2LAkJCQkJCQlwREEsCisJCQkJCTYsCQkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCQkJCTIsCQkJCQkJCSZSZWFzb24sCisJCQkJCUVORF9PRl9BUkdTKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwkvLyBSZW1vdmUga2V5IGluIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKQorCQkJJiYgTUFDX0FERFJfRVFVQUwocERBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJeworCQkJTWFjVGFibGVEZWxldGVEbHNFbnRyeShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCX0KKwl9CisKKwkvLyBSZW1vdmUga2V5IGluIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpCisJCQkmJiBNQUNfQUREUl9FUVVBTChwREEsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlNYWNUYWJsZURlbGV0ZURsc0VudHJ5KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJfQorCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgRExTIFRlYXJEb3duIEZyYW1lIGFuZCByZW1vdmUga2V5IGluIChpPSVkKSBcbiIsIGkpKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitORElTX1NUQVRVUyBSVE1QU2VuZFNUQUtleVJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBKQoreworCVVDSEFSCQkJCUhlYWRlcjgwMl8zWzE0XTsKKwlORElTX1NUQVRVUwkJCU5TdGF0dXM7CisJVUxPTkcJCQkJRnJhbWVMZW4gPSAwOworCUVBUE9MX1BBQ0tFVAkJUGFja2V0OworCVVDSEFSCQkJCU1pY1sxNl07CisJVUNIQVIJCQkJZGlnZXN0WzgwXTsKKwlQVUNIQVIJCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJUE5ESVNfUEFDS0VUCQlwTmRpc1BhY2tldDsKKwlVQ0hBUgkJCQl0ZW1wWzY0XTsKKwlVQ0hBUgkJCQlEbHNQVEtbODBdOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBSVE1QU2VuZFNUQUtleVJlcXVlc3QoKSB0byAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgcERBWzBdLCBwREFbMV0sIHBEQVsyXSwgcERBWzNdLCBwREFbNF0sIHBEQVs1XSkpOworCisJcEFkLT5TZXF1ZW5jZSArKzsKKwlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIEVBUE9MKTsKKworCS8vIFplcm8gbWVzc2FnZSBib2R5CisJTmRpc1plcm9NZW1vcnkoJlBhY2tldCwgc2l6ZW9mKFBhY2tldCkpOworCVBhY2tldC5Qcm9WZXIgPSBFQVBPTF9WRVI7CisJUGFja2V0LlByb1R5cGUgICAgPSBFQVBPTEtleTsKKwlQYWNrZXQuQm9keV9MZW5bMV0gID0gc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUUgKyA2ICsgTUFDX0FERFJfTEVOOwkJLy8gZGF0YSBmaWVsZCBjb250YWluIEtERSBhbmRQZWVyIE1BQyBhZGRyZXNzCisKKwkvLyBTVEFLZXkgTWVzc2FnZSBpcyBhcyBFQVBPTC1LZXkoMSwxLDAsMCxHLzAsMCwwLCBNSUMsIDAsUGVlciBNQUMgS0RFKQorCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKKyAgICB7CisgICAgICAgIFBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEExX0tFWV9ERVNDOworICAgIH0KKyAgICBlbHNlIGlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorICAgIHsKKyAgICAgICAgUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisgICAgfQorCisJLy8gS2V5IGRlc2NyaXB0b3IgdmVyc2lvbgorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9CisJCSgoKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkgfHwgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKSA/IChERVNDX1RZUEVfQUVTKSA6IChERVNDX1RZUEVfVEtJUCkpOworCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMJPSAxOworCVBhY2tldC5LZXlEZXNjLktleUluZm8uU2VjdXJlCT0gMTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLlJlcXVlc3QJPSAxOworCisJUGFja2V0LktleURlc2MuS2V5RGF0YUxlblsxXQk9IDEyOworCisJLy8gdXNlIG91ciBvd24gT1VJIHRvIGRpc3Rpbmd1aXNoIHByb3ByaWV0YXJ5IHdpdGggc3RhbmRhcmQuCisJUGFja2V0LktleURlc2MuS2V5RGF0YVswXQkJPSAweEREOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbMV0JCT0gMHgwQTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzJdCQk9IDB4MDA7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVszXQkJPSAweDBDOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbNF0JCT0gMHg0MzsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzVdCQk9IDB4MDM7CisJTmRpc01vdmVNZW1vcnkoJlBhY2tldC5LZXlEZXNjLktleURhdGFbNl0sIHBEQSwgTUFDX0FERFJfTEVOKTsKKworCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLkRsc1JlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gQWxsb2NhdGUgYnVmZmVyIGZvciB0cmFuc21pdHRpbmcgbWVzc2FnZQorCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CisJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIE5TdGF0dXM7CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJCSAgICAgICAgICAgICAgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwkvLyB1c2UgcHJvcHJpZXRhcnkgUFRLCisJTmRpc1plcm9NZW1vcnkodGVtcCwgNjQpOworCU5kaXNNb3ZlTWVtb3J5KHRlbXAsICJJRUVFODAyLjExIFdJUkVMRVNTIEFDQ0VTUyBQT0lOVCIsIDMyKTsKKwlXcGFDb3VudFBUSyhwQWQsIHRlbXAsIHRlbXAsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCB0ZW1wLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBEbHNQVEssIExFTl9QVEspOworCisJLy8gY2FsY3VsYXRlIE1JQworCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIEFFUworCQlOZGlzWmVyb01lbW9yeShkaWdlc3QsCXNpemVvZihkaWdlc3QpKTsKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBEbHNQVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlOZGlzWmVyb01lbW9yeShNaWMsCXNpemVvZihNaWMpKTsKKwkJaG1hY19tZDUoRGxzUFRLLCBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCQlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkgICAgICAgICAgICAgICAgICBzaXplb2YoSGVhZGVyODAyXzMpLAlIZWFkZXI4MDJfMywKKwkJICAgICAgICAgICAgICBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LAkmUGFja2V0LAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKworCU5TdGF0dXMgPSBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBOZGlzUGFja2V0LCBOVUxMLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJaWYgKE5TdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBOZGlzUGFja2V0LCBCU1NJRF9XQ0lEKTsKKwkJU1RBU2VuZFBhY2tldChwQWQsIHBOZGlzUGFja2V0KTsKKwkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKwl9CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNlbmRTVEFLZXlSZXF1ZXN0LSBTZW5kIFNUQUtleSByZXF1ZXN0IChOU3RhdHVzPSV4LCBGcmFtZUxlbj0lbGQpXG4iLCBOU3RhdHVzLCBGcmFtZUxlbikpOworCisJcmV0dXJuIE5TdGF0dXM7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworTkRJU19TVEFUVVMgUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBKQoreworCVVDSEFSCQkJCUhlYWRlcjgwMl8zWzE0XTsKKwlORElTX1NUQVRVUwkJCU5TdGF0dXM7CisJVUxPTkcJCQkJRnJhbWVMZW4gPSAwOworCUVBUE9MX1BBQ0tFVAkJUGFja2V0OworCVVDSEFSCQkJCU1pY1sxNl07CisJVUNIQVIJCQkJZGlnZXN0WzgwXTsKKwlQVUNIQVIJCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJUE5ESVNfUEFDS0VUCQlwTmRpc1BhY2tldDsKKwlVQ0hBUgkJCQl0ZW1wWzY0XTsKKwlVQ0hBUgkJCQlEbHNQVEtbODBdOwkJCS8vIER1ZSB0byBkaXJ2ZXIgY2FuIG5vdCBnZXQgUFRLLCB1c2UgcHJvcHJpZXRhcnkgUFRLCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFJUTVBTZW5kU1RBS2V5SGFuZFNoYWtlKCkgdG8gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIHBEQVswXSwgcERBWzFdLCBwREFbMl0sIHBEQVszXSwgcERBWzRdLCBwREFbNV0pKTsKKworCXBBZC0+U2VxdWVuY2UgKys7CisJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFQVBPTCk7CisKKwkvLyBaZXJvIG1lc3NhZ2UgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyID0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlICAgID0gRUFQT0xLZXk7CisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFICsgNiArIE1BQ19BRERSX0xFTjsJCS8vIGRhdGEgZmllbGQgY29udGFpbiBLREUgYW5kIFBlZXIgTUFDIGFkZHJlc3MKKworCS8vIFNUQUtleSBNZXNzYWdlIGlzIGFzIEVBUE9MLUtleSgxLDEsMCwwLEcvMCwwLDAsIE1JQywgMCxQZWVyIE1BQyBLREUpCisJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKQorICAgIHsKKyAgICAgICAgUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7CisgICAgfQorICAgIGVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisgICAgeworICAgICAgICBQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMl9LRVlfREVTQzsKKyAgICB9CisKKwkvLyBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0KKwkJKCgocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB8fCAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpID8gKERFU0NfVFlQRV9BRVMpIDogKERFU0NfVFlQRV9US0lQKSk7CisKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleU1pYwk9IDE7CisJUGFja2V0LktleURlc2MuS2V5SW5mby5TZWN1cmUJPSAxOworCisJUGFja2V0LktleURlc2MuS2V5RGF0YUxlblsxXQk9IDEyOworCisJLy8gdXNlIG91ciBvd24gT1VJIHRvIGRpc3Rpbmd1aXNoIHByb3ByaWV0YXJ5IHdpdGggc3RhbmRhcmQuCisJUGFja2V0LktleURlc2MuS2V5RGF0YVswXQkJPSAweEREOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbMV0JCT0gMHgwQTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzJdCQk9IDB4MDA7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVszXQkJPSAweDBDOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbNF0JCT0gMHg0MzsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzVdCQk9IDB4MDM7CisJTmRpc01vdmVNZW1vcnkoJlBhY2tldC5LZXlEZXNjLktleURhdGFbNl0sIHBEQSwgTUFDX0FERFJfTEVOKTsKKworCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLkRsc1JlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gQWxsb2NhdGUgYnVmZmVyIGZvciB0cmFuc21pdHRpbmcgbWVzc2FnZQorCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CisJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIE5TdGF0dXM7CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJCSAgICAgICAgICAgICAgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwkvLyB1c2UgcHJvcHJpZXRhcnkgUFRLCisJTmRpc1plcm9NZW1vcnkodGVtcCwgNjQpOworCU5kaXNNb3ZlTWVtb3J5KHRlbXAsICJJRUVFODAyLjExIFdJUkVMRVNTIEFDQ0VTUyBQT0lOVCIsIDMyKTsKKwlXcGFDb3VudFBUSyhwQWQsIHRlbXAsIHRlbXAsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCB0ZW1wLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBEbHNQVEssIExFTl9QVEspOworCisJLy8gY2FsY3VsYXRlIE1JQworCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIEFFUworCQlOZGlzWmVyb01lbW9yeShkaWdlc3QsCXNpemVvZihkaWdlc3QpKTsKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBEbHNQVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlOZGlzWmVyb01lbW9yeShNaWMsCXNpemVvZihNaWMpKTsKKwkJaG1hY19tZDUoRGxzUFRLLCBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCQlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkgICAgICAgICAgICAgICAgICBzaXplb2YoSGVhZGVyODAyXzMpLAlIZWFkZXI4MDJfMywKKwkJICAgICAgICAgICAgICBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LAkmUGFja2V0LAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKworCU5TdGF0dXMgPSBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBOZGlzUGFja2V0LCBOVUxMLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJaWYgKE5TdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBOZGlzUGFja2V0LCBCU1NJRF9XQ0lEKTsKKwkJU1RBU2VuZFBhY2tldChwQWQsIHBOZGlzUGFja2V0KTsKKwkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKwl9CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UtIFNlbmQgU1RBS2V5IE1lc3NhZ2UtMiAoTlN0YXR1cz0leCwgRnJhbWVMZW49JWxkKVxuIiwgTlN0YXR1cywgRnJhbWVMZW4pKTsKKworCXJldHVybiBOU3RhdHVzOworfQorCitWT0lEIERsc1RpbWVvdXRBY3Rpb24oCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCU1MTUVfRExTX1JFUV9TVFJVQ1QJCU1sbWVEbHNSZXE7CisJVVNIT1JUCQkJCQlyZWFzb247CisJUFJUXzgwMl8xMV9ETFMJCQlwRExTID0gKFBSVF84MDJfMTFfRExTKUZ1bmN0aW9uQ29udGV4dDsKKwlQUlRNUF9BREFQVEVSCQkJcEFkID0gcERMUy0+cEFkOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRGxzVGltZW91dCAtIFRlYXIgZG93biBETFMgbGlua3MgKCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwKKwkJcERMUy0+TWFjQWRkclswXSwgcERMUy0+TWFjQWRkclsxXSwgcERMUy0+TWFjQWRkclsyXSwgcERMUy0+TWFjQWRkclszXSwgcERMUy0+TWFjQWRkcls0XSwgcERMUy0+TWFjQWRkcls1XSkpOworCisJaWYgKChwRExTKSAmJiAocERMUy0+VmFsaWQpKQorCXsKKwkJcmVhc29uCQkJPSBSRUFTT05fUU9TX1JFUVVFU1RfVElNRU9VVDsKKwkJcERMUy0+VmFsaWQJCT0gRkFMU0U7CisJCXBETFMtPlN0YXR1cwk9IERMU19OT05FOworCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCBwRExTLCByZWFzb24pOworCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Rlc2NyaXB0aW9uIDogYmVjYXVzZSBETFMgYW5kIENMSSBzaGFyZSB0aGUgc2FtZSBXQ0lEIHRhYmxlIGluIEFTSUMuCitNZXNoIGVudHJ5IGFsc28gaW5zZXJ0IHRvIHBBZC0+TWFjVGFiLmNvbnRlbnRbXS4gIFN1Y2ggaXMgbWFya2VkIGFzIFZhbGlkQXNEbHMgPSBUUlVFLgorQWxzbyBmaWxscyB0aGUgcGFpcndpc2Uga2V5LgorQmVjYXVzZSBmcm9udCBNQVhfQUlEX0JBIGVudHJpZXMgaGF2ZSBkaXJlY3QgbWFwcGluZyB0byBCQUVudHJ5LCB3aGljaCBpcyBvbmx5IHVzZWQgYXMgQ0xJLiBTbyB3ZSBpbnNlcnQgRGxzCitmcm9tIGluZGV4IE1BWF9BSURfQkEuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTUFDX1RBQkxFX0VOVFJZICpNYWNUYWJsZUluc2VydERsc0VudHJ5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIJcEFkZHIsCisJSU4gIFVJTlQJRGxzRW50cnlJZHgpCit7CisJUE1BQ19UQUJMRV9FTlRSWSBwRW50cnkgPSBOVUxMOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gTWFjVGFibGVJbnNlcnREbHNFbnRyeVxuIikpOworCS8vIGlmIEZVTEwsIHJldHVybgorCWlmIChwQWQtPk1hY1RhYi5TaXplID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQlyZXR1cm4gTlVMTDsKKworCWRvCisJeworCQlpZigocEVudHJ5ID0gRGxzRW50cnlUYWJsZUxvb2t1cChwQWQsIHBBZGRyLCBUUlVFKSkgIT0gTlVMTCkKKwkJCWJyZWFrOworCisJCS8vIGFsbG9jYXRlIG9uZSBNQUMgZW50cnkKKwkJcEVudHJ5ID0gTWFjVGFibGVJbnNlcnRFbnRyeShwQWQsIHBBZGRyLCBEbHNFbnRyeUlkeCArIE1JTl9ORVRfREVWSUNFX0ZPUl9ETFMsIFRSVUUpOworCQlpZiAocEVudHJ5KQorCQl7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtEbHNFbnRyeUlkeF0uTWFjVGFiTWF0Y2hXQ0lEID0gcEVudHJ5LT5BaWQ7CisJCQlwRW50cnktPk1hdGNoRGxzRW50cnlJZHggPSBEbHNFbnRyeUlkeDsKKwkJCXBFbnRyeS0+QXV0aE1vZGUgPSBwQWQtPlN0YUNmZy5BdXRoTW9kZTsKKwkJCXBFbnRyeS0+V2VwU3RhdHVzID0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNUYWJsZUluc2VydERsc0VudHJ5IC0gYWxsb2NhdGUgZW50cnkgIyVkLCBUb3RhbD0gJWRcbiIscEVudHJ5LT5BaWQsIHBBZC0+TWFjVGFiLlNpemUpKTsKKworCQkJLy8gSWYgbGVnYWN5IFdFUCBpcyB1c2VkLCBzZXQgcGFpci13aXNlIGNpcGhlckFsZyBpbnRvIFdDSUQgYXR0cmlidXRlIHRhYmxlIGZvciB0aGlzIGVudHJ5CisJCQlpZiAoKHBFbnRyeS0+VmFsaWRBc0RscykgJiYgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKSkKKwkJCXsKKwkJCQlVQ0hBUiBLZXlJZHggPSAwOworCQkJCVVDSEFSIENpcGhlckFsZyA9IDA7CisKKwkJCQlLZXlJZHgJPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQ7CisKKwkJCQlDaXBoZXJBbGcgCT0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGc7CisKKwkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwKKwkJCQkJCQkJCQkJQlNTMCwKKwkJCQkJCQkJCQkJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorCQkJCQkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywKKwkJCQkJCQkJCQkJcEVudHJ5KTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlKEZBTFNFKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT09IE1hY1RhYmxlSW5zZXJ0RGxzRW50cnlcbiIpKTsKKworCXJldHVybiBwRW50cnk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlEZWxldGUgYWxsIE1lc2ggRW50cnkgaW4gcEFkLT5NYWNUYWIKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1hY1RhYmxlRGVsZXRlRGxzRW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIHdjaWQsCisJSU4gUFVDSEFSIHBBZGRyKQoreworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT0+IE1hY1RhYmxlRGVsZXRlRGxzRW50cnlcbiIpKTsKKworCWlmICghVkFMSURfV0NJRCh3Y2lkKSkKKwkJcmV0dXJuIEZBTFNFOworCisJTWFjVGFibGVEZWxldGVFbnRyeShwQWQsIHdjaWQsIHBBZGRyKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT09IE1hY1RhYmxlRGVsZXRlRGxzRW50cnlcbiIpKTsKKworCXJldHVybiBUUlVFOworfQorCitNQUNfVEFCTEVfRU5UUlkgKkRsc0VudHJ5VGFibGVMb29rdXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCXBBZGRyLAorCUlOIEJPT0xFQU4JYlJlc2V0SWRlbENvdW50KQoreworCVVMT05HIEhhc2hJZHg7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMOworCisJUlRNUF9TRU1fTE9DSygmcEFkLT5NYWNUYWJMb2NrKTsKKwlIYXNoSWR4ID0gTUFDX0FERFJfSEFTSF9JTkRFWChwQWRkcik7CisJcEVudHJ5ID0gcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XTsKKworCXdoaWxlIChwRW50cnkpCisJeworCQlpZiAoKHBFbnRyeS0+VmFsaWRBc0RscyA9PSBUUlVFKQorCQkJJiYgTUFDX0FERFJfRVFVQUwocEVudHJ5LT5BZGRyLCBwQWRkcikpCisJCXsKKwkJCWlmKGJSZXNldElkZWxDb3VudCkKKwkJCQlwRW50cnktPk5vRGF0YUlkbGVDb3VudCA9IDA7CisJCQlicmVhazsKKwkJfQorCQllbHNlCisJCQlwRW50cnkgPSBwRW50cnktPnBOZXh0OworCX0KKworCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5NYWNUYWJMb2NrKTsKKwlyZXR1cm4gcEVudHJ5OworfQorCitNQUNfVEFCTEVfRU5UUlkgKkRsc0VudHJ5VGFibGVMb29rdXBCeVdjaWQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJd2NpZCwKKwlJTiBQVUNIQVIJcEFkZHIsCisJSU4gQk9PTEVBTgliUmVzZXRJZGVsQ291bnQpCit7CisJVUxPTkcgRExzSW5kZXg7CisJUE1BQ19UQUJMRV9FTlRSWSBwQ3VyRW50cnkgPSBOVUxMOworCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCWlmICghVkFMSURfV0NJRCh3Y2lkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlSVE1QX1NFTV9MT0NLKCZwQWQtPk1hY1RhYkxvY2spOworCisJZG8KKwl7CisJCXBDdXJFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3djaWRdOworCisJCURMc0luZGV4ID0gMHhmZjsKKwkJaWYgKChwQ3VyRW50cnkpICYmIChwQ3VyRW50cnktPlZhbGlkQXNEbHM9PSBUUlVFKSkKKwkJeworCQkJRExzSW5kZXggPSBwQ3VyRW50cnktPk1hdGNoRGxzRW50cnlJZHg7CisJCX0KKworCQlpZiAoRExzSW5kZXggPT0gMHhmZikKKwkJCWJyZWFrOworCisJCWlmIChNQUNfQUREUl9FUVVBTChwQ3VyRW50cnktPkFkZHIsIHBBZGRyKSkKKwkJeworCQkJaWYoYlJlc2V0SWRlbENvdW50KQorCQkJCXBDdXJFbnRyeS0+Tm9EYXRhSWRsZUNvdW50ID0gMDsKKwkJCXBFbnRyeSA9IHBDdXJFbnRyeTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZShGQUxTRSk7CisKKwlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+TWFjVGFiTG9jayk7CisKKwlyZXR1cm4gcEVudHJ5OworfQorCitJTlQgU2V0X0Rsc0VudHJ5SW5mb19EaXNwbGF5X1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIGFyZykKK3sKKwlJTlQgaTsKKworCXByaW50aygiXG4lLTE5cyUtOHNcbiIsICJNQUMiLCAiVElNRU9VVFxuIik7CisJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQpICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkpCisJCXsKKwkJCXByaW50aygiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggICIsCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkclswXSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkclsxXSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkclsyXSwKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyWzNdLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyWzRdLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyWzVdKTsKKwkJCXByaW50aygiJS04ZFxuIiwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCk7CisJCX0KKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9EbHNBZGRFbnRyeV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAgICBVQ0hBUgltYWNbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQJVGltZW91dDsKKwljaGFyICp0b2tlbiwgc2VwVmFsdWVbXSA9ICI6IiwgREFTSCA9ICctJzsKKwlJTlQgaTsKKyAgICBSVF84MDJfMTFfRExTCURsczsKKworICAgIGlmKHN0cmxlbihhcmcpIDwgMTkpICAvL01hYyBhZGRyZXNzIGFjY2VwdGFibGUgZm9ybWF0IDAxOjAyOjAzOjA0OjA1OjA2IGxlbmd0aCAxNyBwbHVzIHRoZSAiLSIgYW5kIHRpbWVvdXQgdmFsdWUgaW4gZGVjaW1hbCBmb3JtYXQuCisJCXJldHVybiBGQUxTRTsKKworCXRva2VuID0gc3RyY2hyKGFyZywgREFTSCk7CisJaWYgKCh0b2tlbiAhPSBOVUxMKSAmJiAoc3RybGVuKHRva2VuKT4xKSkKKwl7CisJCVRpbWVvdXQgPSBzaW1wbGVfc3RydG9sKCh0b2tlbisxKSwgMCwgMTApOworCisJCSp0b2tlbiA9ICdcMCc7CisJCWZvciAoaSA9IDAsIHRva2VuID0gcnN0cnRvayhhcmcsICZzZXBWYWx1ZVswXSk7IHRva2VuOyB0b2tlbiA9IHJzdHJ0b2soTlVMTCwgJnNlcFZhbHVlWzBdKSwgaSsrKQorCQl7CisJCQlpZigoc3RybGVuKHRva2VuKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp0b2tlbikpIHx8ICghaXN4ZGlnaXQoKih0b2tlbisxKSkpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCUF0b0godG9rZW4sIChQVUNIQVIpKCZtYWNbaV0pLCAxKTsKKwkJfQorCQlpZihpICE9IDYpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkgICAgcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LSVkIiwgbWFjWzBdLCBtYWNbMV0sCisJICAgICAgICAgICBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sIChpbnQpVGltZW91dCk7CisKKwkJTmRpc1plcm9NZW1vcnkoJkRscywgc2l6ZW9mKFJUXzgwMl8xMV9ETFMpKTsKKwkJRGxzLlRpbWVPdXQgPSBUaW1lb3V0OworCQlDT1BZX01BQ19BRERSKERscy5NYWNBZGRyLCBtYWMpOworCQlEbHMuVmFsaWQgPSAxOworCisJCU1sbWVFbnF1ZXVlKHBBZCwKKwkJCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQkJCVJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTSwKKwkJCQkJc2l6ZW9mKFJUXzgwMl8xMV9ETFMpLAorCQkJCQkmRGxzKTsKKworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7CisKK30KKworSU5UCVNldF9EbHNUZWFyRG93bkVudHJ5X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVDSEFSCQkJbWFjQWRkcltNQUNfQUREUl9MRU5dOworCUNIQVIJCQkqdmFsdWU7CisJSU5UCQkJCWk7CisJUlRfODAyXzExX0RMUwlEbHM7CisKKwlpZihzdHJsZW4oYXJnKSAhPSAxNykgIC8vTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgMDE6MDI6MDM6MDQ6MDU6MDYgbGVuZ3RoIDE3CisJCXJldHVybiBGQUxTRTsKKworCWZvciAoaT0wLCB2YWx1ZSA9IHJzdHJ0b2soYXJnLCI6Iik7IHZhbHVlOyB2YWx1ZSA9IHJzdHJ0b2soTlVMTCwiOiIpKQorCXsKKwkJaWYoKHN0cmxlbih2YWx1ZSkgIT0gMikgfHwgKCFpc3hkaWdpdCgqdmFsdWUpKSB8fCAoIWlzeGRpZ2l0KCoodmFsdWUrMSkpKSApCisJCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQKKworCQlBdG9IKHZhbHVlLCAmbWFjQWRkcltpKytdLCAyKTsKKwl9CisKKwlwcmludGsoIlxuJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCBtYWNBZGRyWzBdLCBtYWNBZGRyWzFdLAorCSAgICAgICAgICAgbWFjQWRkclsyXSwgbWFjQWRkclszXSwgbWFjQWRkcls0XSwgbWFjQWRkcls1XSk7CisKKwlOZGlzWmVyb01lbW9yeSgmRGxzLCBzaXplb2YoUlRfODAyXzExX0RMUykpOworCUNPUFlfTUFDX0FERFIoRGxzLk1hY0FkZHIsIG1hY0FkZHIpOworCURscy5WYWxpZCA9IDA7CisKKwlNbG1lRW5xdWV1ZShwQWQsCisJCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQkJUlRfT0lEXzgwMl8xMV9TRVRfRExTX1BBUkFNLAorCQkJCXNpemVvZihSVF84MDJfMTFfRExTKSwKKwkJCQkmRGxzKTsKKworCXJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9ydG1wX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3J0bXBfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjI1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9ydG1wX2RhdGEuYwpAQCAtMCwwICsxLDI2MzcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJcnRtcF9kYXRhLmMKKworCUFic3RyYWN0OgorCURhdGEgcGF0aCBzdWJyb3V0aW5lcworCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8gCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huCQkgICAgICBBdWcvMTcvMDQJCW1ham9yIG1vZGlmaWNhdGlvbiBmb3IgUlQyNTYxLzI2NjEKKwlKYW4gTGVlCSAgICAgIE1hci8xNy8wNgkJbWFqb3IgbW9kaWZpY2F0aW9uIGZvciBSVDI4NjAgTmV3IFJpbmcgRGVzaWduCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisKKworVk9JRCBTVEFSeEVBUE9MRnJhbWVJbmRpY2F0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeSwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJUFJUMjhYWF9SWERfU1RSVUMJcFJ4RCA9ICYocFJ4QmxrLT5SeEQpOworCVBSWFdJX1NUUlVDCQlwUnhXSSA9IHBSeEJsay0+cFJ4V0k7CisJVUNIQVIJCQkqcFRtcEJ1ZjsKKworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApCisJeworCQkvLyBBbGwgRUFQb0wgZnJhbWVzIGhhdmUgdG8gcGFzcyB0byB1cHBlciBsYXllciAoZXguIFdQQV9TVVBQTElDQU5UIGRhZW1vbikKKwkJLy8gVEJEIDogcHJvY2VzcyBmcmFnbWVudGVkIEVBUG9sIGZyYW1lcworCQl7CisJCQkvLyBJbiA4MDIuMXggbW9kZSwgaWYgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIEVBUC1TVUNDRVNTIHBhY2tldCwgdHVybiBvbiB0aGUgUG9ydFNlY3VyZWQgdmFyaWFibGUKKwkJCWlmICggcEFkLT5TdGFDZmcuSUVFRTgwMjFYID09IFRSVUUgJiYKKwkJCQkgKEVBUF9DT0RFX1NVQ0NFU1MgPT0gV3BhQ2hlY2tFYXBDb2RlKHBBZCwgcFJ4QmxrLT5wRGF0YSwgcFJ4QmxrLT5EYXRhU2l6ZSwgTEVOR1RIXzgwMl8xX0gpKSkKKwkJCXsKKwkJCQlQVUNIQVIJS2V5OworCQkJCVVDSEFSIAlDaXBoZXJBbGc7CisJCQkJaW50ICAgICBpZHggPSAwOworCisJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQLVNVQ0NFU1MgUGFja2V0XG4iKSk7CisJCQkJLy9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkKTsKKworICAgICAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5JRUVFODAyMXhfcmVxdWlyZWRfa2V5cyA9PSBGQUxTRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleUlkOworICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGcgPSBwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbaWR4XS5DaXBoZXJBbGc7CisJCQkJCUtleSA9IHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuID4gMCkKKyAgICAJCQkJeworI2lmZGVmIFJUMjg3MAorCQkJCQkJdW5pb24KKwkJCQkJCXsKKwkJCQkJCQljaGFyIGJ1ZltzaXplb2YoTkRJU184MDJfMTFfV0VQKStNQVhfTEVOX09GX0tFWS0gMV07CisJCQkJCQkJTkRJU184MDJfMTFfV0VQIGtleWluZm87CisJCQkJCQl9ICBXZXBLZXk7CisJCQkJCQlpbnQgbGVuOworCisKKwkJCQkJCU5kaXNaZXJvTWVtb3J5KCZXZXBLZXksIHNpemVvZihXZXBLZXkpKTsKKwkJCQkJCWxlbiA9cEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuOworCisJCQkJCQlOZGlzTW92ZU1lbW9yeShXZXBLZXkua2V5aW5mby5LZXlNYXRlcmlhbCwKKwkJCQkJCQlwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbaWR4XS5LZXksCisJCQkJCQkJcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuKTsKKworCQkJCQkJV2VwS2V5LmtleWluZm8uS2V5SW5kZXggPSAweDgwMDAwMDAwICsgaWR4OworCQkJCQkJV2VwS2V5LmtleWluZm8uS2V5TGVuZ3RoID0gbGVuOworCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW4gPShVQ0hBUikgKGxlbiA8PSA1ID8gNSA6IDEzKTsKKworCQkJCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKwkJCQkJCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOworCQkJCQkJLy8gbmVlZCB0byBlbnF1ZXVlIGNtZCB0byB0aHJlYWQKKwkJCQkJCVJUVVNCRW5xdWV1ZUNtZEZyb21OZGlzKHBBZCwgT0lEXzgwMl8xMV9BRERfV0VQLCBUUlVFLCAmV2VwS2V5LCBzaXplb2YoV2VwS2V5LmtleWluZm8pICsgbGVuIC0gMSk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJCQkJCQkvLyBGb3IgUHJldmVudGluZyBTaGFyZEtleSBUYWJsZSBpcyBjbGVhcmVkIGJ5IHJlbW92ZSBrZXkgcHJvY2VkdXJlLgorICAgIAkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbiA9IHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleUxlbjsKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5LAorCQkJCQkJCQkJICAgcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5LAorCQkJCQkJCQkJICAgcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuKTsKKyAgICAJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQkJcmV0dXJuOworCQl9CisJfQorCWVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJeworCQkvLyBTcGVjaWFsIERBVEEgZnJhbWUgdGhhdCBoYXMgdG8gcGFzcyB0byBNTE1FCisJCS8vCSAxLiBDaXNjbyBBaXJvbmV0IGZyYW1lcyBmb3IgQ0NYMi4gV2UgbmVlZCBwYXNzIGl0IHRvIE1MTUUgZm9yIHNwZWNpYWwgcHJvY2VzcworCQkvLwkgMi4gRUFQT0wgaGFuZHNoYWtpbmcgZnJhbWVzIHdoZW4gZHJpdmVyIHN1cHBsaWNhbnQgZW5hYmxlZCwgcGFzcyB0byBNTE1FIGZvciBzcGVjaWFsIHByb2Nlc3MKKwkJeworCQkJcFRtcEJ1ZiA9IHBSeEJsay0+cERhdGEgLSBMRU5HVEhfODAyXzExOworCQkJTmRpc01vdmVNZW1vcnkocFRtcEJ1ZiwgcFJ4QmxrLT5wSGVhZGVyLCBMRU5HVEhfODAyXzExKTsKKwkJCVJFUE9SVF9NR01UX0ZSQU1FX1RPX01MTUUocEFkLCBwUnhXSS0+V2lyZWxlc3NDbGlJRCwgcFRtcEJ1ZiwgcFJ4QmxrLT5EYXRhU2l6ZSArIExFTkdUSF84MDJfMTEsIHBSeFdJLT5SU1NJMCwgcFJ4V0ktPlJTU0kxLCBwUnhXSS0+UlNTSTIsIHBSeEQtPlBsY3BTaWduYWwpOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIiEhISByZXBvcnQgRUFQT0wvQUlST05FVCBEQVRBIHRvIE1MTUUgKGxlbj0lZCkgISEhXG4iLCBwUnhCbGstPkRhdGFTaXplKSk7CisJCX0KKwl9CisKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCXJldHVybjsKKworfQorCitWT0lEIFNUQVJ4RGF0YUZyYW1lQW5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCisJLy8gbm9uLUVBUCBmcmFtZQorCWlmICghUlRNUENoZWNrV1BBZnJhbWUocEFkLCBwRW50cnksIHBSeEJsay0+cERhdGEsIHBSeEJsay0+RGF0YVNpemUsIEZyb21XaGljaEJTU0lEKSkKKwl7CisKKwkJeworCQkJLy8gZHJvcCBhbGwgbm9uLUVBUCBEQVRBIGZyYW1lIGJlZm9yZQorCQkJLy8gdGhpcyBjbGllbnQncyBQb3J0LUFjY2Vzcy1Db250cm9sIGlzIHNlY3VyZWQKKwkJCWlmIChwUnhCbGstPnBIZWFkZXItPkZDLldlcCkKKwkJCXsKKwkJCQkvLyB1bnN1cHBvcnRlZCBjaXBoZXIgc3VpdGUKKwkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpCisJCQkJeworCQkJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIGVuY3J5cHRpb24gaW4tdXNlIGJ1dCByZWNlaXZlIGEgbm9uLUVBUE9MIGNsZWFyIHRleHQgZnJhbWUsIGRyb3AgaXQKKwkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKSAmJgorCQkJCQkocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkKKwkJCQl7CisJCQkJCS8vIHJlbGVhc2UgcGFja2V0CisJCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKwkJUlhfQkxLX0NMRUFSX0ZMQUcocFJ4QmxrLCBmUlhfRUFQKTsKKwkJaWYgKCFSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FSQUxJTkspKQorCQl7CisJCQkvLyBOb3JtYWwgbGVnYWN5LCBBTVBEVSBvciBBTVNEVQorCQkJQ21tUnhub25SYWxpbmtGcmFtZUluZGljYXRlKHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIEFSQUxJTksKKwkJCUNtbVJ4UmFsaW5rRnJhbWVJbmRpY2F0ZShwQWQsIHBFbnRyeSwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCX0KKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJUlhfQkxLX0NMRUFSX0ZMQUcocFJ4QmxrLCBmUlhfRExTKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl9CisJZWxzZQorCXsKKwkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX0VBUCk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNUERVKSAmJiAocEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID09IDApKQorCQl7CisJCQlJbmRpY2F0ZV9BTVBEVV9QYWNrZXQocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCXsKKwkJCS8vIERldGVybWluIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgRUFQIGZyYW1lCisJCQkvLyAgdG8gV1BBIHN0YXRlIG1hY2hpbmUgb3IgdXBwZXIgbGF5ZXIKKwkJCVNUQVJ4RUFQT0xGcmFtZUluZGljYXRlKHBBZCwgcEVudHJ5LCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJfQorCX0KK30KKworCisvLyBGb3IgVEtJUCBmcmFtZSwgY2FsY3VsYXRlIHRoZSBNSUMgdmFsdWUKK0JPT0xFQU4gU1RBQ2hlY2tUa2lwTUlDVmFsdWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaykKK3sKKwlQSEVBREVSXzgwMl8xMQlwSGVhZGVyID0gcFJ4QmxrLT5wSGVhZGVyOworCVVDSEFSCQkJKnBEYXRhID0gcFJ4QmxrLT5wRGF0YTsKKwlVU0hPUlQJCQlEYXRhU2l6ZSA9IHBSeEJsay0+RGF0YVNpemU7CisJVUNIQVIJCQlVc2VyUHJpb3JpdHkgPSBwUnhCbGstPlVzZXJQcmlvcml0eTsKKwlQQ0lQSEVSX0tFWQkJcFdwYUtleTsKKwlVQ0hBUgkJCSpwREEsICpwU0E7CisKKwlwV3BhS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeEJsay0+cFJ4V0ktPktleUluZGV4XTsKKworCXBEQSA9IHBIZWFkZXItPkFkZHIxOworCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0lORlJBKSkKKwl7CisJCXBTQSA9IHBIZWFkZXItPkFkZHIzOworCX0KKwllbHNlCisJeworCQlwU0EgPSBwSGVhZGVyLT5BZGRyMjsKKwl9CisKKwlpZiAoUlRNUFRraXBDb21wYXJlTUlDVmFsdWUocEFkLAorCQkJCQkJCQlwRGF0YSwKKwkJCQkJCQkJcERBLAorCQkJCQkJCQlwU0EsCisJCQkJCQkJCXBXcGFLZXktPlJ4TWljLAorCQkJCQkJCQlVc2VyUHJpb3JpdHksCisJCQkJCQkJCURhdGFTaXplKSA9PSBGQUxTRSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIlJ4IE1JQyBWYWx1ZSBlcnJvciAyXG4iKSk7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApCisJCXsKKwkJCVdwYVNlbmRNaWNGYWlsdXJlVG9XcGFTdXBwbGljYW50KHBBZCwgKHBXcGFLZXktPlR5cGUgPT0gUEFJUldJU0VLRVkpID8gVFJVRSA6IEZBTFNFKTsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCQl7CisJCQlSVE1QUmVwb3J0TWljRXJyb3IocEFkLCBwV3BhS2V5KTsKKwkJfQorCisJCS8vIHJlbGVhc2UgcGFja2V0CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCisvLworLy8gQWxsIFJ4IHJvdXRpbmVzIHVzZSBSWF9CTEsgc3RydWN0dXJlIHRvIGhhbmRlIHJ4IGV2ZW50cworLy8gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gYnVpbGQgcFJ4QmxrIGF0dHJpYnV0ZXMKKy8vICAxLiBwSGVhZGVyIHBvaW50ZXIgdG8gODAyLjExIEhlYWRlcgorLy8gIDIuIHBEYXRhIHBvaW50ZXIgdG8gcGF5bG9hZCBpbmNsdWRpbmcgTExDIChqdXN0IHNraXAgSGVhZGVyKQorLy8gIDMuIHNldCBwYXlsb2FkIHNpemUgaW5jbHVkaW5nIExMQyB0byBEYXRhU2l6ZQorLy8gIDQuIHNldCBzb21lIGZsYWdzIHdpdGggUlhfQkxLX1NFVF9GTEFHKCkKKy8vCitWT0lEIFNUQUhhbmRsZVJ4RGF0YUZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGspCit7CisJUFJUMjhYWF9SWERfU1RSVUMJCQkJcFJ4RCA9ICYocFJ4QmxrLT5SeEQpOworCVBSWFdJX1NUUlVDCQkJCQkJcFJ4V0kgPSBwUnhCbGstPnBSeFdJOworCVBIRUFERVJfODAyXzExCQkJCQlwSGVhZGVyID0gcFJ4QmxrLT5wSGVhZGVyOworCVBORElTX1BBQ0tFVAkJCQkJcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7CisJQk9PTEVBTiAJCQkJCQliRnJhZ21lbnQgPSBGQUxTRTsKKwlNQUNfVEFCTEVfRU5UUlkJICAgIAkJCSpwRW50cnkgPSBOVUxMOworCVVDSEFSCQkJCQkJCUZyb21XaGljaEJTU0lEID0gQlNTMDsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJQcmlvcml0eSA9IDA7CisKKwl7CisJCS8vIGJlZm9yZSBMSU5LIFVQLCBhbGwgREFUQSBmcmFtZXMgYXJlIHJlamVjdGVkCisJCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCQl7CisJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm47CisJCX0KKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkvL2lmICgocEhlYWRlci0+RkMuRnJEcyA9PSAwKSAmJiAocEhlYWRlci0+RkMuVG9EcyA9PSAwKSkKKwkJaWYgKFJUTVBSY3ZGcmFtZURMU0NoZWNrKHBBZCwgcEhlYWRlciwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCwgcFJ4RCkpCisJCXsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJCS8vIERyb3Agbm90IG15IEJTUyBmcmFtZXMKKwkJaWYgKHBSeEQtPk15QnNzID09IDApCisJCXsKKwkJCXsKKwkJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudFNpbmNlTGFzdE5VTEwrKzsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSAmJiBwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZSAmJiAocEhlYWRlci0+RkMuU3ViVHlwZSAmIDB4MDgpKQorCQl7CisJCQlVQ0hBUiAqcERhdGE7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoImJBUFNEQ2FwYWJsZVxuIikpOworCisJCQkvLyBRb3MgYml0IDQKKwkJCXBEYXRhID0gKFBVQ0hBUilwSGVhZGVyICsgTEVOR1RIXzgwMl8xMTsKKwkJCWlmICgoKnBEYXRhID4+IDQpICYgMHgwMSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJ4RG9uZS0gUmN2IEVPU1AgZnJhbWUsIGRyaXZlciBtYXkgZmFsbCBpbnRvIHNsZWVwXG4iKSk7CisJCQkJcEFkLT5Db21tb25DZmcuYkluU2VydmljZVBlcmlvZCA9IEZBTFNFOworCisJCQkJLy8gRm9yY2UgZHJpdmVyIHRvIGZhbGwgaW50byBzbGVlcCBtb2RlIHdoZW4gcmN2IEVPU1AgZnJhbWUKKwkJCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJCQkJeworCQkJCQlVU0hPUlQgIFRidHROdW1Ub05leHRXYWtlVXA7CisJCQkJCVVTSE9SVCAgTmV4dER0aW0gPSBwQWQtPlN0YUNmZy5EdGltUGVyaW9kOworCQkJCQlVTE9ORyAgIE5vdzsKKworCQkJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQkJCQlOZXh0RHRpbSAtPSAoVVNIT1JUKShOb3cgLSBwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lKS9wQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2Q7CisKKwkJCQkJVGJ0dE51bVRvTmV4dFdha2VVcCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudDsKKwkJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKSAmJiAoVGJ0dE51bVRvTmV4dFdha2VVcCA+IE5leHREdGltKSkKKwkJCQkJCVRidHROdW1Ub05leHRXYWtlVXAgPSBOZXh0RHRpbTsKKworCQkJCQlNbG1lU2V0UHNtQml0KHBBZCwgUFdSX1NBVkUpOworCQkJCQkvLyBpZiBXTU0tQVBTRCBpcyBmYWlsZWQsIHRyeSB0byBkaXNhYmxlIGZvbGxvd2luZyBsaW5lCisJCQkJCUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoKHBIZWFkZXItPkZDLk1vcmVEYXRhKSAmJiAocEFkLT5Db21tb25DZmcuYkluU2VydmljZVBlcmlvZCkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZW5kaW5nIGFub3RoZXIgdHJpZ2dlciBmcmFtZSB3aGVuIE1vcmUgRGF0YSBiaXQgaXMgc2V0IHRvIDFcbiIpKTsKKwkJCX0KKwkJfQorCisJCS8vIERyb3AgTlVMTCwgQ0YtQUNLKG5vIGRhdGEpLCBDRi1QT0xMKG5vIGRhdGEpLCBhbmQgQ0YtQUNLK0NGLVBPTEwobm8gZGF0YSkgZGF0YSBmcmFtZQorCQlpZiAoKHBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA0KSkgLy8gYml0IDIgOiBubyBEQVRBCisJCXsKKwkJCS8vIHJlbGVhc2UgcGFja2V0CisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCXJldHVybjsKKwkJfQorCisJICAgIC8vIERyb3Agbm90IG15IEJTUyBmcmFtZSAod2UgY2FuIG5vdCBvbmx5IGNoZWNrIHRoZSBNeUJzcyBiaXQgaW4gUnhEKQorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCSAgICBpZiAoIXBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCSAgICB7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJCWlmIChJTkZSQV9PTihwQWQpKQorCQl7CisJCQkvLyBJbmZyYXN0cnVjdHVyZSBtb2RlLCBjaGVjayBhZGRyZXNzIDIgZm9yIEJTU0lECisJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeSgmcEhlYWRlci0+QWRkcjIsICZwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgNikpCisJCQl7CisJCQkJLy8gUmVjZWl2ZSBmcmFtZSBub3QgbXkgQlNTSUQKKwkgICAgICAgICAgICAvLyByZWxlYXNlIHBhY2tldAorCSAgICAgICAgICAgIFJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQllbHNlCS8vIEFkLUhvYyBtb2RlIG9yIE5vdCBhc3NvY2lhdGVkCisJCXsKKwkJCS8vIEFkLUhvYyBtb2RlLCBjaGVjayBhZGRyZXNzIDMgZm9yIEJTU0lECisJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeSgmcEhlYWRlci0+QWRkcjMsICZwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgNikpCisJCQl7CisJCQkJLy8gUmVjZWl2ZSBmcmFtZSBub3QgbXkgQlNTSUQKKwkgICAgICAgICAgICAvLyByZWxlYXNlIHBhY2tldAorCSAgICAgICAgICAgIFJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCSAgICB9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJLy8KKwkJLy8gZmluZCBwRW50cnkKKwkJLy8KKwkJaWYgKHBSeFdJLT5XaXJlbGVzc0NsaUlEIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXsKKwkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BSeFdJLT5XaXJlbGVzc0NsaUlEXTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIDEuIHJlbGVhc2UgcGFja2V0IGlmIGluZnJhIG1vZGUKKwkJCS8vIDIuIG5ldyBhIHBFbnRyeSBpZiBhZC1ob2MgbW9kZQorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBpbmZyYSBvciBhZC1ob2MKKwkJaWYgKElORlJBX09OKHBBZCkpCisJCXsKKwkJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9JTkZSQSk7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQlpZiAoKHBIZWFkZXItPkZDLkZyRHMgPT0gMCkgJiYgKHBIZWFkZXItPkZDLlRvRHMgPT0gMCkpCisJCQkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX0RMUyk7CisJCQllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJCQlBU1NFUlQocFJ4V0ktPldpcmVsZXNzQ2xpSUQgPT0gQlNTSURfV0NJRCk7CisJCX0KKworCQkvLyBjaGVjayBBdGhlcm9zIENsaWVudAorCQlpZiAoKHBFbnRyeS0+YklBbUJhZEF0aGVyb3MgPT0gRkFMU0UpICYmICAocFJ4RC0+QU1QRFUgPT0gMSkgJiYgKHBIZWFkZXItPkZDLlJldHJ5ICkpCisJCXsKKwkJCXBFbnRyeS0+YklBbUJhZEF0aGVyb3MgPSBUUlVFOworCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iQ3VycmVudEF0aGVyb3MgPSBUUlVFOworCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTGFzdEF0aGVyb3MgPSBUUlVFOworCQkJaWYgKCFTVEFfQUVTX09OKHBBZCkpCisJCQl7CisJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCA4LCBBTExOX1NFVFBST1RFQ1QsIFRSVUUsIEZBTFNFKTsKKwkJCX0KKwkJfQorCX0KKworCXBSeEJsay0+cERhdGEgPSAoVUNIQVIgKilwSGVhZGVyOworCisJLy8KKwkvLyB1cGRhdGUgUnhCbGstPnBEYXRhLCBEYXRhU2l6ZQorCS8vIDgwMi4xMSBIZWFkZXIsIFFPUywgSFRDLCBIdyBQYWRkaW5nCisJLy8KKworCS8vIDEuIHNraXAgODAyLjExIEhFQURFUgorCXsKKwkJcFJ4QmxrLT5wRGF0YSArPSBMRU5HVEhfODAyXzExOworCQlwUnhCbGstPkRhdGFTaXplIC09IExFTkdUSF84MDJfMTE7CisJfQorCisJLy8gMi4gUU9TCisJaWYgKHBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA4KQorCXsKKwkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX1FPUyk7CisJCVVzZXJQcmlvcml0eSA9ICoocFJ4QmxrLT5wRGF0YSkgJiAweDBmOworCQkvLyBiaXQgNyBpbiBRb1MgQ29udHJvbCBmaWVsZCBzaWduYWxzIHRoZSBIVCBBLU1TRFUgZm9ybWF0CisJCWlmICgoKnBSeEJsay0+cERhdGEpICYgMHg4MCkKKwkJeworCQkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX0FNU0RVKTsKKwkJfQorCisJCS8vIHNraXAgUU9TIGNvbnRvcmwgZmllbGQKKwkJcFJ4QmxrLT5wRGF0YSArPSAyOworCQlwUnhCbGstPkRhdGFTaXplIC09MjsKKwl9CisJcFJ4QmxrLT5Vc2VyUHJpb3JpdHkgPSBVc2VyUHJpb3JpdHk7CisKKwkvLyAzLiBPcmRlciBiaXQ6IEEtUmFsaW5rIG9yIEhUQysKKwlpZiAocEhlYWRlci0+RkMuT3JkZXIpCisJeworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKKwkJaWYgKChwUnhXSS0+UEhZTU9ERSA8PSBNT0RFX09GRE0pICYmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCkpKQorCQl7CisJCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfQVJBTElOSyk7CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9IVEMpOworCQkJLy8gc2tpcCBIVEMgY29udG9ybCBmaWVsZAorCQkJcFJ4QmxrLT5wRGF0YSArPSA0OworCQkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSA0OworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl9CisJfQorCisJLy8gNC4gc2tpcCBIVyBwYWRkaW5nCisJaWYgKHBSeEQtPkwyUEFEKQorCXsKKwkJLy8ganVzdCBtb3ZlIHBEYXRhIHBvaW50ZXIKKwkJLy8gYmVjYXVzZSBEYXRhU2l6ZSBleGNsdWRpbmcgSFcgcGFkZGluZworCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfUEFEKTsKKwkJcFJ4QmxrLT5wRGF0YSArPSAyOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChwUnhELT5CQSkKKwl7CisJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9BTVBEVSk7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKKwkvLworCS8vIENhc2UgSSAgUHJvY2VzcyBCcm9hZGNhc3QgJiBNdWx0aWNhc3QgZGF0YSBmcmFtZQorCS8vCisJaWYgKHBSeEQtPkJjYXN0IHx8IHBSeEQtPk1jYXN0KQorCXsKKwkJSU5DX0NPVU5URVI2NChwQWQtPldsYW5Db3VudGVycy5NdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQpOworCisJCS8vIERyb3AgTWNhc3QvQmNhc3QgZnJhbWUgd2l0aCBmcmFnbWVudCBiaXQgb24KKwkJaWYgKHBIZWFkZXItPkZDLk1vcmVGcmFnKQorCQl7CisJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBGaWx0ZXIgb3V0IEJjYXN0IGZyYW1lIHdoaWNoIEFQIHJlbGF5ZWQgZm9yIHVzCisJCWlmIChwSGVhZGVyLT5GQy5GckRzICYmIE1BQ19BRERSX0VRVUFMKHBIZWFkZXItPkFkZHIzLCBwQWQtPkN1cnJlbnRBZGRyZXNzKSkKKwkJeworCQkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJcmV0dXJuOworCQl9CisKKwkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQlyZXR1cm47CisJfQorCWVsc2UgaWYgKHBSeEQtPlUyTSkKKwl7CisJCXBBZC0+TGFzdFJ4UmF0ZSA9IChVU0hPUlQpKChwUnhXSS0+TUNTKSArIChwUnhXSS0+QlcgPDw3KSArIChwUnhXSS0+U2hvcnRHSSA8PDgpKyAocFJ4V0ktPlBIWU1PREUgPDwxNCkpIDsKKworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisgICAgICAgIGlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0RMUykpCisJCXsKKwkJCU1BQ19UQUJMRV9FTlRSWSAqcERsc0VudHJ5ID0gTlVMTDsKKworCQkJcERsc0VudHJ5ID0gRGxzRW50cnlUYWJsZUxvb2t1cEJ5V2NpZChwQWQsIHBSeFdJLT5XaXJlbGVzc0NsaUlELCBwSGVhZGVyLT5BZGRyMiwgVFJVRSk7CisJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgaWYocERsc0VudHJ5KQorCQkJVXBkYXRlX1Jzc2lfU2FtcGxlKHBBZCwgJnBEbHNFbnRyeS0+UnNzaVNhbXBsZSwgcFJ4V0kpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJaWYgKEFESE9DX09OKHBBZCkpCisJCXsKKwkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgcEhlYWRlci0+QWRkcjIpOworCQkJaWYgKHBFbnRyeSkKKwkJCQlVcGRhdGVfUnNzaV9TYW1wbGUocEFkLCAmcEVudHJ5LT5Sc3NpU2FtcGxlLCBwUnhXSSk7CisJCX0KKworCisJCVVwZGF0ZV9Sc3NpX1NhbXBsZShwQWQsICZwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLCBwUnhXSSk7CisKKwkJcEFkLT5TdGFDZmcuTGFzdFNOUjAgPSAoVUNIQVIpKHBSeFdJLT5TTlIwKTsKKwkJcEFkLT5TdGFDZmcuTGFzdFNOUjEgPSAoVUNIQVIpKHBSeFdJLT5TTlIxKTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tEYXRhQ250Kys7CisKKworICAgIAlpZiAoISgocEhlYWRlci0+RnJhZyA9PSAwKSAmJiAocEhlYWRlci0+RkMuTW9yZUZyYWcgPT0gMCkpKQorICAgIAl7CisgICAgCQkvLyByZS1hc3NlbWJsZSB0aGUgZnJhZ21lbnRlZCBwYWNrZXRzCisgICAgCQkvLyByZXR1cm4gY29tcGxldGUgZnJhbWUgKHBSeFBhY2tldCkgb3IgTlVMTAorICAgIAkJYkZyYWdtZW50ID0gVFJVRTsKKyAgICAJCXBSeFBhY2tldCA9IFJUTVBEZUZyYWdtZW50RGF0YUZyYW1lKHBBZCwgcFJ4QmxrKTsKKyAgICAJfQorCisgICAgCWlmIChwUnhQYWNrZXQpCisgICAgCXsKKwkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BSeFdJLT5XaXJlbGVzc0NsaUlEXTsKKworICAgIAkJLy8gcHJvY2VzcyBjb21wbGV0ZSBmcmFtZQorICAgIAkJaWYgKGJGcmFnbWVudCAmJiAocFJ4RC0+RGVjcnlwdGVkKSAmJiAocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkpCisgICAgCQl7CisJCQkJLy8gTWludXMgTUlDIGxlbmd0aAorCQkJCXBSeEJsay0+RGF0YVNpemUgLT0gODsKKworICAgIAkJCS8vIEZvciBUS0lQIGZyYW1lLCBjYWxjdWxhdGUgdGhlIE1JQyB2YWx1ZQorICAgIAkJCWlmIChTVEFDaGVja1RraXBNSUNWYWx1ZShwQWQsIHBFbnRyeSwgcFJ4QmxrKSA9PSBGQUxTRSkKKyAgICAJCQl7CisgICAgCQkJCXJldHVybjsKKyAgICAJCQl9CisgICAgCQl9CisKKyAgICAJCVNUQVJ4RGF0YUZyYW1lQW5ub3VuY2UocEFkLCBwRW50cnksIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQkJcmV0dXJuOworICAgIAl9CisgICAgCWVsc2UKKyAgICAJeworICAgIAkJLy8ganVzdCByZXR1cm4KKyAgICAJCS8vIGJlY2F1c2UgUlRNUERlRnJhZ21lbnREYXRhRnJhbWUoKSB3aWxsIHJlbGVhc2UgcnggcGFja2V0LAorICAgIAkJLy8gaWYgcGFja2V0IGlzIGZyYWdtZW50ZWQKKyAgICAJCXJldHVybjsKKyAgICAJfQorCX0KKworCUFTU0VSVCgwKTsKKwkvLyByZWxlYXNlIHBhY2tldAorCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworfQorCitWT0lEIFNUQUhhbmRsZVJ4TWdtdEZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGspCit7CisJUFJUMjhYWF9SWERfU1RSVUMJcFJ4RCA9ICYocFJ4QmxrLT5SeEQpOworCVBSWFdJX1NUUlVDCQlwUnhXSSA9IHBSeEJsay0+cFJ4V0k7CisJUEhFQURFUl84MDJfMTEJcEhlYWRlciA9IHBSeEJsay0+cEhlYWRlcjsKKwlQTkRJU19QQUNLRVQJcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7CisKKwlkbworCXsKKworCQkvLyBXZSBzaG91bGQgY29sbGVjdCBSU1NJIG5vdCBvbmx5IFUyTSBkYXRhIGJ1dCBhbHNvIG15IGJlYWNvbgorCQlpZiAoKHBIZWFkZXItPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9CRUFDT04pICYmIChNQUNfQUREUl9FUVVBTCgmcEFkLT5Db21tb25DZmcuQnNzaWQsICZwSGVhZGVyLT5BZGRyMikpCisJCQkmJiAocEFkLT5SeEFudC5FdmFsdWF0ZVBlcmlvZCA9PSAwKSkKKwkJeworCQkJVXBkYXRlX1Jzc2lfU2FtcGxlKHBBZCwgJnBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUsIHBSeFdJKTsKKworCQkJcEFkLT5TdGFDZmcuTGFzdFNOUjAgPSAoVUNIQVIpKHBSeFdJLT5TTlIwKTsKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RTTlIxID0gKFVDSEFSKShwUnhXSS0+U05SMSk7CisJCX0KKworI2lmZGVmIFJUMzB4eAorCQkvLyBjb2xsZWN0IHJzc2kgaW5mb3JtYXRpb24gZm9yIGFudGVubmEgZGl2ZXJzaXR5CisJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuQW50RGl2ZXJzaXR5KQorCQl7CisJCQlpZiAoKHBSeEQtPlUyTSkgfHwgKChwSGVhZGVyLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQkVBQ09OKSAmJiAoTUFDX0FERFJfRVFVQUwoJnBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCAmcEhlYWRlci0+QWRkcjIpKSkpCisJCQl7CisJCQkJCUNPTExFQ1RfUlhfQU5URU5OQV9BVkVSQUdFX1JTU0kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgKFVDSEFSKXBSeFdJLT5SU1NJMCwgUlNTSV8wKSwgMCk7IC8vTm90ZTogUlNTSTIgbm90IHVzZWQgb24gUlQ3MworCQkJCQlwQWQtPlN0YUNmZy5OdW1PZkF2Z1Jzc2lTYW1wbGUgKys7CisJCQl9CisJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKworCQkvLyBGaXJzdCBjaGVjayB0aGUgc2l6ZSwgaXQgTVVTVCBub3QgZXhjZWVkIHRoZSBtbG1lIHF1ZXVlIHNpemUKKwkJaWYgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPiBNR01UX0RNQV9CVUZGRVJfU0laRSkKKwkJeworCQkJREJHUFJJTlRfRVJSKCgiU1RBSGFuZGxlUnhNZ210RnJhbWU6IGZyYW1lIHRvbyBsYXJnZSwgc2l6ZSA9ICVkIFxuIiwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCkpOworCQkJYnJlYWs7CisJCX0KKworCQlSRVBPUlRfTUdNVF9GUkFNRV9UT19NTE1FKHBBZCwgcFJ4V0ktPldpcmVsZXNzQ2xpSUQsIHBIZWFkZXIsIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQsCisJCQkJCQkJCQlwUnhXSS0+UlNTSTAsIHBSeFdJLT5SU1NJMSwgcFJ4V0ktPlJTU0kyLCBwUnhELT5QbGNwU2lnbmFsKTsKKwl9IHdoaWxlIChGQUxTRSk7CisKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKK30KKworVk9JRCBTVEFIYW5kbGVSeENvbnRyb2xGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrKQoreworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCVBSWFdJX1NUUlVDCQlwUnhXSSA9IHBSeEJsay0+cFJ4V0k7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJUEhFQURFUl84MDJfMTEJcEhlYWRlciA9IHBSeEJsay0+cEhlYWRlcjsKKwlQTkRJU19QQUNLRVQJcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7CisKKwlzd2l0Y2ggKHBIZWFkZXItPkZDLlN1YlR5cGUpCisJeworCQljYXNlIFNVQlRZUEVfQkxPQ0tfQUNLX1JFUToKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCXsKKwkJCQlDbnRsRW5xdWV1ZUZvclJlY3YocEFkLCBwUnhXSS0+V2lyZWxlc3NDbGlJRCwgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQpLCAoUEZSQU1FX0JBX1JFUSlwSGVhZGVyKTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQljYXNlIFNVQlRZUEVfQkxPQ0tfQUNLOgorCQljYXNlIFNVQlRZUEVfQUNLOgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByb2Nlc3MgUnhEb25lIGludGVycnVwdCwgcnVubmluZyBpbiBEUEMgbGV2ZWwKKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCQlUaGlzIHJvdXRpbmUgaGFzIHRvIG1haW50YWluIFJ4IHJpbmcgcmVhZCBwb2ludGVyLgorCQlOZWVkIHRvIGNvbnNpZGVyIFFPUyBEQVRBIGZvcm1hdCB3aGVuIGNvbnZlcnRpbmcgdG8gODAyLjMKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFNUQVJ4RG9uZUludGVycnVwdEhhbmRsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglCT09MRUFOCQkJYXJnYykKK3sKKwlORElTX1NUQVRVUwkJCVN0YXR1czsKKwlVSU5UMzIJCQlSeFByb2Nlc3NlZCwgUnhQZW5kaW5nOworCUJPT0xFQU4JCQliUmVzY2hlZHVsZSA9IEZBTFNFOworCVJUMjhYWF9SWERfU1RSVUMJKnBSeEQ7CisJVUNIQVIJCQkqcERhdGE7CisJUFJYV0lfU1RSVUMJCXBSeFdJOworCVBORElTX1BBQ0tFVAlwUnhQYWNrZXQ7CisJUEhFQURFUl84MDJfMTEJcEhlYWRlcjsKKwlSWF9CTEsJCQlSeENlbGw7CisKKwlSeFByb2Nlc3NlZCA9IFJ4UGVuZGluZyA9IDA7CisKKwkvLyBwcm9jZXNzIHdob2xlIHJ4IHJpbmcKKwl3aGlsZSAoMSkKKwl7CisKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSB8fAorCQkJIVJUTVBfVEVTVF9GTEFHKHBBZCxmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkKKwkJeworCQkJYnJlYWs7CisJCX0KKworCisJCVJ4UHJvY2Vzc2VkICsrOyAvLyB0ZXN0CisKKwkJLy8gMS4gYWxsb2NhdGUgYSBuZXcgZGF0YSBwYWNrZXQgaW50byByeCByaW5nIHRvIHJlcGxhY2UgcmVjZWl2ZWQgcGFja2V0CisJCS8vICAgIHRoZW4gcHJvY2Vzc2luZyB0aGUgcmVjZWl2ZWQgcGFja2V0CisJCS8vIDIuIHRoZSBjYWxsZWUgbXVzdCB0YWtlIGNoYXJnZSBvZiByZWxlYXNlIG9mIHBhY2tldAorCQkvLyAzLiBBcyBmYXIgYXMgZHJpdmVyIGlzIGNvbmNlcm5lZCAsCisJCS8vICAgIHRoZSByeCBwYWNrZXQgbXVzdAorCQkvLyAgICAgIGEuIGJlIGluZGljYXRlZCB0byB1cHBlciBsYXllciBvcgorCQkvLyAgICAgIGIuIGJlIHJlbGVhc2VkIGlmIGl0IGlzIGRpc2NhcmRlZAorCQlwUnhQYWNrZXQgPSBHZXRQYWNrZXRGcm9tUnhSaW5nKHBBZCwgJihSeENlbGwuUnhEKSwgJmJSZXNjaGVkdWxlLCAmUnhQZW5kaW5nKTsKKwkJaWYgKHBSeFBhY2tldCA9PSBOVUxMKQorCQl7CisJCQkvLyBubyBtb3JlIHBhY2tldCB0byBwcm9jZXNzCisJCQlicmVhazsKKwkJfQorCisJCS8vIGdldCByeCByaW5nIGRlc2NyaXB0b3IKKwkJcFJ4RCA9ICYoUnhDZWxsLlJ4RCk7CisJCS8vIGdldCByeCBkYXRhIGJ1ZmZlcgorCQlwRGF0YQk9IEdFVF9PU19QS1RfREFUQVBUUihwUnhQYWNrZXQpOworCQlwUnhXSQk9IChQUlhXSV9TVFJVQykgcERhdGE7CisJCXBIZWFkZXIgPSAoUEhFQURFUl84MDJfMTEpIChwRGF0YStSWFdJX1NJWkUpIDsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkgICAgUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKFBVQ0hBUilwSGVhZGVyLCBESVJfUkVBRCwgVFJVRSk7CisJCVJUTVBXSUVuZGlhbkNoYW5nZSgoUFVDSEFSKXBSeFdJLCBUWVBFX1JYV0kpOworI2VuZGlmCisKKwkJLy8gYnVpbGQgUnhDZWxsCisJCVJ4Q2VsbC5wUnhXSSA9IHBSeFdJOworCQlSeENlbGwucEhlYWRlciA9IHBIZWFkZXI7CisJCVJ4Q2VsbC5wUnhQYWNrZXQgPSBwUnhQYWNrZXQ7CisJCVJ4Q2VsbC5wRGF0YSA9IChVQ0hBUiAqKSBwSGVhZGVyOworCQlSeENlbGwuRGF0YVNpemUgPSBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50OworCQlSeENlbGwuRmxhZ3MgPSAwOworCisJCS8vIEluY3JlYXNlIFRvdGFsIHJlY2VpdmUgYnl0ZSBjb3VudGVyIGFmdGVyIHJlYWwgZGF0YSByZWNlaXZlZCBubyBtYXRlciBhbnkgZXJyb3Igb3Igbm90CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuUmVjZWl2ZWRCeXRlQ291bnQgKz0gIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudCArKzsKKworCQlJTkNfQ09VTlRFUjY0KHBBZC0+V2xhbkNvdW50ZXJzLlJlY2VpdmVkRnJhZ21lbnRDb3VudCk7CisKKwkJaWYgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPCAxNCkKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisKKyAgICAgICAgaWYgKE1PTklUT1JfT04ocEFkKSkKKwkJeworICAgICAgICAgICAgc2VuZF9tb25pdG9yX3BhY2tldHMocEFkLCAmUnhDZWxsKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFJUMjg3MCBpbnZva2VzIFNUQVJ4RG9uZUludGVycnVwdEhhbmRsZSgpIGluIHJ0dXNiX2J1bGsuYyAqLworI2lmZGVmIFJBTElOS19BVEUKKwkJaWYgKEFURV9PTihwQWQpKQorCQl7CisJCQlwQWQtPmF0ZS5SeENudFBlclNlYysrOworCQkJQVRFU2FtcGxlUnNzaShwQWQsIHBSeFdJKTsKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCQkJaWYgKHBBZC0+YXRlLmJRQVJ4U3RhcnQgPT0gVFJVRSkKKwkJCXsKKwkJCQkvKiAoKnBSeEQpIGhhcyBiZWVuIHN3YXBwZWQgaW4gR2V0UGFja2V0RnJvbVJ4UmluZygpICovCisJCQkJQVRFX1FBX1N0YXRpc3RpY3MocEFkLCBwUnhXSSwgcFJ4RCwJcEhlYWRlcik7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwkJLy8gQ2hlY2sgZm9yIGFsbCBSeEQgZXJyb3JzCisJCVN0YXR1cyA9IFJUTVBDaGVja1J4RXJyb3IocEFkLCBwSGVhZGVyLCBwUnhXSSwgcFJ4RCk7CisKKwkJLy8gSGFuZGxlIHRoZSByZWNlaXZlZCBmcmFtZQorCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCXN3aXRjaCAocEhlYWRlci0+RkMuVHlwZSkKKwkJCXsKKwkJCQkvLyBDQVNFIEksIHJlY2VpdmUgYSBEQVRBIGZyYW1lCisJCQkJY2FzZSBCVFlQRV9EQVRBOgorCQkJCXsKKwkJCQkJLy8gcHJvY2VzcyBEQVRBIGZyYW1lCisJCQkJCVNUQUhhbmRsZVJ4RGF0YUZyYW1lKHBBZCwgJlJ4Q2VsbCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJCS8vIENBU0UgSUksIHJlY2VpdmUgYSBNR01UIGZyYW1lCisJCQkJY2FzZSBCVFlQRV9NR01UOgorCQkJCXsKKwkJCQkJU1RBSGFuZGxlUnhNZ210RnJhbWUocEFkLCAmUnhDZWxsKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQkJLy8gQ0FTRSBJSUkuIHJlY2VpdmUgYSBDTlRMIGZyYW1lCisJCQkJY2FzZSBCVFlQRV9DTlRMOgorCQkJCXsKKwkJCQkJU1RBSGFuZGxlUnhDb250cm9sRnJhbWUocEFkLCAmUnhDZWxsKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQkJLy8gZGlzY2FyZCBvdGhlciB0eXBlCisJCQkJZGVmYXVsdDoKKwkJCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db3VudGVyczgwMjMuUnhFcnJvcnMrKzsKKwkJCS8vIGRpc2NhcmQgdGhpcyBmcmFtZQorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCX0KKwl9CisKKwlyZXR1cm4gYlJlc2NoZWR1bGU7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUEhhbmRsZVR3YWtldXBJbnRlcnJ1cHQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRkFMU0UpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEVhcmx5IGNoZWNraW5nIGFuZCBPUy1kZXBlbmVkIHBhcnNpbmcgZm9yIFR4IHBhY2tldCBzZW5kIHRvIG91ciBTVEEgZHJpdmVyLgorCitBcmd1bWVudHM6CisgICAgTkRJU19IQU5ETEUgCU1pbmlwb3J0QWRhcHRlckNvbnRleHQJUG9pbnRlciByZWZlciB0byB0aGUgZGV2aWNlIGhhbmRsZSwgaS5lLiwgdGhlIHBBZC4KKwlQUE5ESVNfUEFDS0VUCXBwUGFja2V0QXJyYXkJCQlUaGUgcGFja2V0IGFycmF5IG5lZWQgdG8gZG8gdHJhbnNtaXNzaW9uLgorCVVJTlQJCQlOdW1iZXJPZlBhY2tldHMJCQlOdW1iZXIgb2YgcGFja2V0IGluIHBhY2tldCBhcnJheS4KKworUmV0dXJuIFZhbHVlOgorCU5PTkUKKworTm90ZToKKwlUaGlzIGZ1bmN0aW9uIGRvIGVhcmx5IGNoZWNraW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBmb3Igc2VuZC1vdXQgcGFja2V0LgorCVlvdSBvbmx5IGNhbiBwdXQgT1MtZGVwZW5lZCAmIFNUQSByZWxhdGVkIGNvZGUgaW4gaGVyZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgU1RBU2VuZFBhY2tldHMoCisJSU4JTkRJU19IQU5ETEUJCU1pbmlwb3J0QWRhcHRlckNvbnRleHQsCisJSU4JUFBORElTX1BBQ0tFVAlwcFBhY2tldEFycmF5LAorCUlOCVVJTlQJCQlOdW1iZXJPZlBhY2tldHMpCit7CisJVUlOVAkJCUluZGV4OworCVBSVE1QX0FEQVBURVIJcEFkID0gKFBSVE1QX0FEQVBURVIpIE1pbmlwb3J0QWRhcHRlckNvbnRleHQ7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQ7CisJQk9PTEVBTgkJCWFsbG93VG9TZW5kID0gRkFMU0U7CisKKworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlck9mUGFja2V0czsgSW5kZXgrKykKKwl7CisJCXBQYWNrZXQgPSBwcFBhY2tldEFycmF5W0luZGV4XTsKKworCQlkbworCQl7CisKKwkJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpIHx8CisJCQkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpIHx8CisJCQkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCisJCQl7CisJCQkJLy8gRHJvcCBzZW5kIHJlcXVlc3Qgc2luY2UgaGFyZHdhcmUgaXMgaW4gcmVzZXQgc3RhdGUKKwkJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlIGlmICghSU5GUkFfT04ocEFkKSAmJiAhQURIT0NfT04ocEFkKSkKKwkJCXsKKwkJCQkvLyBEcm9wIHNlbmQgcmVxdWVzdCBzaW5jZSB0aGVyZSBhcmUgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiB5ZXQKKwkJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gUmVjb3JkIHRoYXQgb3JpZ25hbCBwYWNrZXQgc291cmNlIGlzIGZyb20gTkRJUyBsYXllcixzbyB0aGF0CisJCQkJLy8gbGF0ZXIgb24gZHJpdmVyIGtub3dzIGhvdyB0byByZWxlYXNlIHRoaXMgTkRJUyBQQUNLRVQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQlQVUNIQVIgcFNyY0J1ZlZBID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCisJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwU3JjQnVmVkEpOworCQkJCWlmIChwRW50cnkgJiYgKHBFbnRyeS0+VmFsaWRBc0RscyA9PSBUUlVFKSkKKwkJCQl7CisJCQkJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQsIHBFbnRyeS0+QWlkKTsKKwkJCQl9CisJCQkJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQsIDApOyAvLyB0aGlzIGZpZWxkIGlzIHVzZWxlc3Mgd2hlbiBpbiBTVEEgbW9kZQorCQkJCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UocFBhY2tldCwgUEtUU1JDX05ESVMpOworCQkJCU5ESVNfU0VUX1BBQ0tFVF9TVEFUVVMocFBhY2tldCwgTkRJU19TVEFUVVNfUEVORElORyk7CisJCQkJcEFkLT5SYWxpbmtDb3VudGVycy5QZW5kaW5nTmRpc1BhY2tldENvdW50Kys7CisKKwkJCQlhbGxvd1RvU2VuZCA9IFRSVUU7CisJCQl9CisJCX0gd2hpbGUoRkFMU0UpOworCisJCWlmIChhbGxvd1RvU2VuZCA9PSBUUlVFKQorCQkJU1RBU2VuZFBhY2tldChwQWQsIHBQYWNrZXQpOworCQllbHNlCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisJLy8gRGVxdWV1ZSBvdXRnb2luZyBmcmFtZXMgZnJvbSBUeFN3UXVldWVbXSBhbmQgcHJvY2VzcyBpdAorCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIE5VTV9PRl9UWF9SSU5HLCBNQVhfVFhfUFJPQ0VTUyk7CisKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorCVRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGRvIHBhY2tldCBwYXJzaW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBmb3IgVHggcGFja2V0CisJdG8gU1RBIGRldmljZSwgYW5kIGl0IHdpbGwgZW4tcXVldWUgcGFja2V0cyB0byBvdXIgVHhTd1F1ZXVlIGRlcGVuZHMgb24gQUMKKwljbGFzcy4KKworQXJndW1lbnRzOgorCXBBZCAgICAJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwlwUGFja2V0IAlQb2ludGVyIHRvIHNlbmQgcGFja2V0CisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCQkJSWYgc3VjY2VzIHRvIHF1ZXVlIHRoZSBwYWNrZXQgaW50byBUeFN3UXVldWUuCisJTkRJU19TVEFUVVNfRkFJTFVSRQkJCUlmIGZhaWxlZCB0byBkbyBlbi1xdWV1ZS4KKworTm90ZToKKwlZb3Ugb25seSBjYW4gcHV0IE9TLWluZGVwZW5lZCAmIFNUQSByZWxhdGVkIGNvZGUgaW4gaGVyZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIFNUQVNlbmRQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJUEFDS0VUX0lORk8gCVBhY2tldEluZm87CisJUFVDSEFSCQkJcFNyY0J1ZlZBOworCVVJTlQJCQlTcmNCdWZMZW47CisJVUlOVAkJCUFsbG93RnJhZ1NpemU7CisJVUNIQVIJCQlOdW1iZXJPZkZyYWc7CisvLwlVQ0hBUgkJCVJUU1JlcXVpcmVkOworCVVDSEFSCQkJUXVlSWR4LCBVc2VyUHJpb3JpdHk7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMOworCXVuc2lnbmVkIGludCAJSXJxRmxhZ3M7CisJVUNIQVIJCQlGbGdJc0lQID0gMDsKKwlVQ0hBUgkJCVJhdGU7CisKKwkvLyBQcmVwYXJlIHBhY2tldCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgZm9yIGJ1ZmZlciBkZXNjcmlwdG9yCisJLy8gY2hhaW5lZCB3aXRoaW4gYSBzaW5nbGUgTkRJUyBwYWNrZXQuCisJUlRNUF9RdWVyeVBhY2tldEluZm8ocFBhY2tldCwgJlBhY2tldEluZm8sICZwU3JjQnVmVkEsICZTcmNCdWZMZW4pOworCisJaWYgKHBTcmNCdWZWQSA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJTVEFTZW5kUGFja2V0IC0tPiBwU3JjQnVmVkEgPT0gTlVMTCAhISFTcmNCdWZMZW49JXhcbiIsU3JjQnVmTGVuKSk7CisJCS8vIFJlc291cmVjZSBpcyBsb3csIHN5c3RlbSBkaWQgbm90IGFsbG9jYXRlIHZpcnR1YWwgYWRkcmVzcworCQkvLyByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRSBkaXJlY3RseSB0byB1cHBlciBsYXllcgorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCisJaWYgKFNyY0J1ZkxlbiA8IDE0KQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJTVEFTZW5kUGFja2V0IC0tPiBOZGlzIFBhY2tldCBidWZmZXIgZXJyb3IgISEhXG4iKSk7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisKKwkvLyBJbiBIVCByYXRlIGFkaG9jIG1vZGUsIEEtTVBEVSBpcyBvZnRlbiB1c2VkLiBTbyBuZWVkIHRvIGxvb2t1cCBCQSBUYWJsZSBhbmQgTUFDIEVudHJ5LgorCS8vIE5vdGUgbXVsdGljYXN0IHBhY2tldHMgaW4gYWRob2MgYWxzbyB1c2UgQlNTSURfV0NJRCBpbmRleC4KKwl7CisJCWlmKElORlJBX09OKHBBZCkpCisJCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCVVTSE9SVAl0bXBXY2lkOworCisJCQl0bXBXY2lkID0gUlRNUF9HRVRfUEFDS0VUX1dDSUQocFBhY2tldCk7CisJCQlpZiAoVkFMSURfV0NJRCh0bXBXY2lkKSAmJgorCQkJCShwQWQtPk1hY1RhYi5Db250ZW50W3RtcFdjaWRdLlZhbGlkQXNEbHM9PSBUUlVFKSkKKwkJCXsKKwkJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFt0bXBXY2lkXTsKKwkJCQlSYXRlID0gcEFkLT5NYWNUYWIuQ29udGVudFt0bXBXY2lkXS5DdXJyVHhSYXRlOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkJeworCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwUGFja2V0LCBCU1NJRF9XQ0lEKTsKKwkJCVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5UeFJhdGU7CisJCX0KKwkJfQorCQllbHNlIGlmIChBREhPQ19PTihwQWQpKQorCQl7CisJCQlpZiAoKnBTcmNCdWZWQSAmIDB4MDEpCisJCQl7CisJCQkJUlRNUF9TRVRfUEFDS0VUX1dDSUQocFBhY2tldCwgTUNBU1RfV0NJRCk7CisJCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF07CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwU3JjQnVmVkEpOworCQkJfQorCQkJUmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZTsKKwkJfQorCX0KKworCWlmICghcEVudHJ5KQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJTVEFTZW5kUGFja2V0LT5DYW5ub3QgZmluZCBwRW50cnkoJTJ4OiUyeDolMng6JTJ4OiUyeDolMngpIGluIE1hY1RhYiFcbiIsIFBSSU5UX01BQyhwU3JjQnVmVkEpKSk7CisJCS8vIFJlc291cmVjZSBpcyBsb3csIHN5c3RlbSBkaWQgbm90IGFsbG9jYXRlIHZpcnR1YWwgYWRkcmVzcworCQkvLyByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRSBkaXJlY3RseSB0byB1cHBlciBsYXllcgorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCWlmIChBREhPQ19PTihwQWQpCisJCSkKKwl7CisJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQsIChVQ0hBUilwRW50cnktPkFpZCk7CisJfQorCisJLy8KKwkvLyBDaGVjayB0aGUgRXRoZXJuZXQgRnJhbWUgdHlwZSBvZiB0aGlzIHBhY2tldCwgYW5kIHNldCB0aGUgUlRNUF9TRVRfUEFDS0VUX1NQRUNJRklDIGZsYWdzLgorCS8vCQlIZXJlIHdlIHNldCB0aGUgUEFDS0VUX1NQRUNJRklDIGZsYWdzKExMQywgVkxBTiwgREhDUC9BUlAsIEVBUE9MKS4KKwlSVE1QQ2hlY2tFdGhlclR5cGUocEFkLCBwUGFja2V0KTsKKworCisKKwkvLworCS8vIFdQQSA4MDIuMXggc2VjdXJlZCBwb3J0IGNvbnRyb2wgLSBkcm9wIGFsbCBub24tODAyLjF4IGZyYW1lIGJlZm9yZSBwb3J0IHNlY3VyZWQKKwkvLworCWlmICgoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwKKwkJIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCSAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwKKwkJIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQorI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJICB8fCAocEFkLT5TdGFDZmcuSUVFRTgwMjFYID09IFRSVUUpCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkgIHx8IChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkgICkKKwkJICAmJiAoKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkgfHwgKHBBZC0+U3RhQ2ZnLk1pY0VyckNudCA+PSAyKSkKKwkJICAmJiAoUlRNUF9HRVRfUEFDS0VUX0VBUE9MKHBQYWNrZXQpPT0gRkFMU0UpCisJCSAgKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEFTZW5kUGFja2V0IC0tPiBEcm9wIHBhY2tldCBiZWZvcmUgcG9ydCBzZWN1cmVkICEhIVxuIikpOworCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisKKwkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9CisKKworCS8vIFNURVAgMS4gRGVjaWRlIG51bWJlciBvZiBmcmFnbWVudHMgcmVxdWlyZWQgdG8gZGVsaXZlciB0aGlzIE1TRFUuCisJLy8JICAgVGhlIGVzdGltYXRpb24gaGVyZSBpcyBub3QgdmVyeSBhY2N1cmF0ZSBiZWNhdXNlIGRpZmZpY3VsdCB0bworCS8vCSAgIHRha2UgZW5jcnlwdGlvbiBvdmVyaGVhZCBpbnRvIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlIHJlc3VsdAorCS8vCSAgICJOdW1iZXJPZkZyYWciIGlzIHRoZW4ganVzdCB1c2VkIHRvIHByZS1jaGVjayBpZiBlbm91Z2ggZnJlZQorCS8vCSAgIFRYRCBhcmUgYXZhaWxhYmxlIHRvIGhvbGQgdGhpcyBNU0RVLgorCisKKwlpZiAoKnBTcmNCdWZWQSAmIDB4MDEpCS8vIGZyYWdtZW50YXRpb24gbm90IGFsbG93ZWQgb24gbXVsdGljYXN0ICYgYnJvYWRjYXN0CisJCU51bWJlck9mRnJhZyA9IDE7CisJZWxzZSBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpKQorCQlOdW1iZXJPZkZyYWcgPSAxOwkvLyBBZ2dyZWdhdGlvbiBvdmVyd2hlbG1zIGZyYWdtZW50YXRpb24KKwllbHNlIGlmIChDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCkpCisJCU51bWJlck9mRnJhZyA9IDE7CS8vIEFnZ3JlZ2F0aW9uIG92ZXJ3aGVsbXMgZnJhZ21lbnRhdGlvbgorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9PSBNT0RFX0hUTUlYKSB8fCAocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPT0gTU9ERV9IVEdSRUVORklFTEQpKQorCQlOdW1iZXJPZkZyYWcgPSAxOwkvLyBNSU1PIFJBVEUgb3ZlcndoZWxtcyBmcmFnbWVudGF0aW9uCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJZWxzZQorCXsKKwkJLy8gVGhlIGNhbGN1bGF0ZWQgIk51bWJlck9mRnJhZyIgaXMgYSByb3VnaCBlc3RpbWF0aW9uIGJlY2F1c2Ugb2YgdmFyaW91cworCQkvLyBlbmNyeXB0aW9uL2VuY2Fwc3VsYXRpb24gb3ZlcmhlYWQgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhpcyBudW1iZXIgaXMganVzdAorCQkvLyB1c2VkIHRvIG1ha2Ugc3VyZSBlbm91Z2ggZnJlZSBUWEQgYXJlIGF2YWlsYWJsZSBiZWZvcmUgZnJhZ21lbnRhdGlvbiB0YWtlcyBwbGFjZS4KKwkJLy8gSW4gY2FzZSB0aGUgYWN0dWFsIHJlcXVpcmVkIG51bWJlciBvZiBmcmFnbWVudHMgb2YgYW4gTkRJUyBwYWNrZXQKKwkJLy8gZXhjY2VlZHMgIk51bWJlck9mRnJhZyJjYWN1bGF0ZWQgaGVyZSBhbmQgbm90IGVub3VnaCBmcmVlIFRYRCBhdmFpbGFibGUsIHRoZQorCQkvLyBsYXN0IGZyYWdtZW50IChpLmUuIGxhc3QgTVBEVSkgd2lsbCBiZSBkcm9wcGVkIGluIFJUTVBIYXJkVHJhbnNtaXQoKSBkdWUgdG8gb3V0IG9mCisJCS8vIHJlc291cmNlLCBhbmQgdGhlIE5ESVMgcGFja2V0IHdpbGwgYmUgaW5kaWNhdGVkIE5ESVNfU1RBVFVTX0ZBSUxVUkUuIFRoaXMgc2hvdWxkCisJCS8vIHJhcmVseSBoYXBwZW4gYW5kIHRoZSBwZW5hbHR5IGlzIGp1c3QgbGlrZSBhIFRYIFJFVFJZIGZhaWwuIEFmZm9yZGFibGUuCisKKwkJQWxsb3dGcmFnU2l6ZSA9IChwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCkgLSBMRU5HVEhfODAyXzExIC0gTEVOR1RIX0NSQzsKKwkJTnVtYmVyT2ZGcmFnID0gKChQYWNrZXRJbmZvLlRvdGFsUGFja2V0TGVuZ3RoIC0gTEVOR1RIXzgwMl8zICsgTEVOR1RIXzgwMl8xX0gpIC8gQWxsb3dGcmFnU2l6ZSkgKyAxOworCQkvLyBUbyBnZXQgYWNjdXJhdGUgbnVtYmVyIG9mIGZyYWdtZW50YXRpb24sIE1pbnVzIDEgaWYgdGhlIHNpemUganVzdCBtYXRjaCB0byBhbGxvd2FibGUgZnJhZ21lbnQgc2l6ZQorCQlpZiAoKChQYWNrZXRJbmZvLlRvdGFsUGFja2V0TGVuZ3RoIC0gTEVOR1RIXzgwMl8zICsgTEVOR1RIXzgwMl8xX0gpICUgQWxsb3dGcmFnU2l6ZSkgPT0gMCkKKwkJeworCQkJTnVtYmVyT2ZGcmFnLS07CisJCX0KKwl9CisKKwkvLyBTYXZlIGZyYWdtZW50IG51bWJlciB0byBOZGlzIHBhY2tldCByZXNlcnZlZCBmaWVsZAorCVJUTVBfU0VUX1BBQ0tFVF9GUkFHTUVOVFMocFBhY2tldCwgTnVtYmVyT2ZGcmFnKTsKKworCisJLy8gU1RFUCAyLiBDaGVjayB0aGUgcmVxdWlyZW1lbnQgb2YgUlRTOgorCS8vCSAgIElmIG11bHRpcGxlIGZyYWdtZW50IHJlcXVpcmVkLCBSVFMgaXMgcmVxdWlyZWQgb25seSBmb3IgdGhlIGZpcnN0IGZyYWdtZW50CisJLy8JICAgaWYgdGhlIGZyYWdtZW50IHNpemUgbGFyZ2UgdGhhbiBSVFMgdGhyZXNob2xkCisJLy8gICAgIEZvciBSVDI4eHgsIExldCBBU0lDIHNlbmQgUlRTL0NUUworCVJUTVBfU0VUX1BBQ0tFVF9SVFMocFBhY2tldCwgMCk7CisJUlRNUF9TRVRfUEFDS0VUX1RYUkFURShwUGFja2V0LCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUpOworCisJLy8KKwkvLyBTVEVQIDMuIFRyYWZmaWMgY2xhc3NpZmljYXRpb24uIG91dGNvbWUgPSA8VXNlclByaW9yaXR5LCBRdWVJZHg+CisJLy8KKwlVc2VyUHJpb3JpdHkgPSAwOworCVF1ZUlkeAkJID0gUUlEX0FDX0JFOworCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmCisJCUNMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpKQorCXsKKwkJVVNIT1JUIFByb3RvY29sOworCQlVQ0hBUiAgTGxjU25hcExlbiA9IDAsIEJ5dGUwLCBCeXRlMTsKKwkJZG8KKwkJeworCQkJLy8gZ2V0IEV0aGVybmV0IHByb3RvY29sIGZpZWxkCisJCQlQcm90b2NvbCA9IChVU0hPUlQpKChwU3JjQnVmVkFbMTJdIDw8IDgpICsgcFNyY0J1ZlZBWzEzXSk7CisJCQlpZiAoUHJvdG9jb2wgPD0gMTUwMCkKKwkJCXsKKwkJCQkvLyBnZXQgRXRoZXJuZXQgcHJvdG9jb2wgZmllbGQgZnJvbSBMTEMvU05BUAorCQkJCWlmIChTbmlmZjJCeXRlc0Zyb21OZGlzQnVmZmVyKFBhY2tldEluZm8ucEZpcnN0QnVmZmVyLCBMRU5HVEhfODAyXzMgKyA2LCAmQnl0ZTAsICZCeXRlMSkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQkJYnJlYWs7CisKKwkJCQlQcm90b2NvbCA9IChVU0hPUlQpKChCeXRlMCA8PCA4KSArIEJ5dGUxKTsKKwkJCQlMbGNTbmFwTGVuID0gODsKKwkJCX0KKworCQkJLy8gYWx3YXlzIEFDX0JFIGZvciBub24tSVAgcGFja2V0CisJCQlpZiAoUHJvdG9jb2wgIT0gMHgwODAwKQorCQkJCWJyZWFrOworCisJCQkvLyBnZXQgSVAgaGVhZGVyCisJCQlpZiAoU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcihQYWNrZXRJbmZvLnBGaXJzdEJ1ZmZlciwgTEVOR1RIXzgwMl8zICsgTGxjU25hcExlbiwgJkJ5dGUwLCAmQnl0ZTEpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJYnJlYWs7CisKKwkJCS8vIHJldHVybiBBQ19CRSBpZiBwYWNrZXQgaXMgbm90IElQdjQKKwkJCWlmICgoQnl0ZTAgJiAweGYwKSAhPSAweDQwKQorCQkJCWJyZWFrOworCisJCQlGbGdJc0lQID0gMTsKKwkJCVVzZXJQcmlvcml0eSA9IChCeXRlMSAmIDB4ZTApID4+IDU7CisJCQlRdWVJZHggPSBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5W1VzZXJQcmlvcml0eV07CisKKwkJCS8vIFRPRE86IGhhdmUgdG8gY2hlY2sgQUNNIGJpdC4gYXBwbHkgVFNQRUMgaWYgQUNNIGlzIE9OCisJCQkvLyBUT0RPOiBkb3duZ3JhZGUgVVAgJiBRdWVJZHggYmVmb3JlIHBhc3NpbmcgQUNNCisJCQlpZiAocEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQUNNW1F1ZUlkeF0pCisJCQl7CisJCQkJVXNlclByaW9yaXR5ID0gMDsKKwkJCQlRdWVJZHgJCSA9IFFJRF9BQ19CRTsKKwkJCX0KKwkJfSB3aGlsZSAoRkFMU0UpOworCX0KKworCVJUTVBfU0VUX1BBQ0tFVF9VUChwUGFja2V0LCBVc2VyUHJpb3JpdHkpOworCisKKworCS8vIE1ha2Ugc3VyZSBTZW5kVHhXYWl0IHF1ZXVlIHJlc291cmNlIHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgdGhyZWFkcworCVJUTVBfSVJRX0xPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKKwlpZiAocEFkLT5UeFN3UXVldWVbUXVlSWR4XS5OdW1iZXIgPj0gTUFYX1BBQ0tFVFNfSU5fUVVFVUUpCisJeworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKKyNpZmRlZiBCTE9DS19ORVRfSUYKKwkJU3RvcE5ldElmUXVldWUocEFkLCBRdWVJZHgsIHBQYWNrZXQpOworI2VuZGlmIC8vIEJMT0NLX05FVF9JRiAvLworCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCWVsc2UKKwl7CisJCUluc2VydFRhaWxRdWV1ZSgmcEFkLT5UeFN3UXVldWVbUXVlSWR4XSwgUEFDS0VUX1RPX1FVRVVFX0VOVFJZKHBQYWNrZXQpKTsKKwl9CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyAgICBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPT0gVFJVRSkmJgorICAgICAgICBJU19IVF9TVEEocEVudHJ5KSkKKwl7CisJICAgIC8vUE1BQ19UQUJMRV9FTlRSWSBwTWFjRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKKwkJaWYgKCgocEVudHJ5LT5UWEJBYml0bWFwICYgKDE8PFVzZXJQcmlvcml0eSkpID09IDApICYmCisgICAgICAgICAgICAoKHBFbnRyeS0+QkFEZWNsaW5lQml0bWFwICYgKDE8PFVzZXJQcmlvcml0eSkpID09IDApICYmCisgICAgICAgICAgICAocEVudHJ5LT5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkKKwkJCSAvLyBGb3IgSU9UIGNvbXBhdGliaWxpdHksIGlmCisJCQkgLy8gMS4gSXQgaXMgUmFsaW5rIGNoaXAgb3IKKwkJCSAvLyAyLiBJdCBpcyBPUEVOIG9yIEFFUyBtb2RlLAorCQkJIC8vIHRoZW4gQkEgc2Vzc2lvbiBjYW4gYmUgYnVsaXQuCisJCQkgJiYgKChwRW50cnktPlZhbGlkQXNDTEkgJiYgcEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgIT0gMHgwKSB8fAorCQkJIAkgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCB8fCBwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSkKKwkJCSkKKwkJeworCQkJQkFPcmlTZXNzaW9uU2V0VXAocEFkLCBwRW50cnksIDAsIDAsIDEwLCBGQUxTRSk7CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY09zVHhDb3VudFtRdWVJZHhdKys7IC8vIFRPRE86IGZvciBkZWJ1ZyBvbmx5LiB0byBiZSByZW1vdmVkCisJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRoaXMgc3Vicm91dGluZSB3aWxsIHNjYW4gdGhyb3VnaCByZWxlYXRpdmUgcmluZyBkZXNjcmlwdG9yIHRvIGZpbmQKKwkJb3V0IGF2YWxpYWJsZSBmcmVlIHJpbmcgZGVzY3JpcHRvciBhbmQgY29tcGFyZSB3aXRoIHJlcXVlc3Qgc2l6ZS4KKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJUXVlSWR4CQlTZWxlY3RlZCBUWCBSaW5nCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUgCU5vdCBlbm91Z2ggZnJlZSBkZXNjcmlwdG9yCisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MgCUVub3VnaCBmcmVlIGRlc2NyaXB0b3IKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisjaWZkZWYgUlQyODcwCisvKgorCUFjdHVhbGx5LCB0aGlzIGZ1bmN0aW9uIHVzZWQgdG8gY2hlY2sgaWYgdGhlIFR4SGFyZHdhcmUgUXVldWUgc3RpbGwgaGFzIGZyYW1lIG5lZWQgdG8gc2VuZC4KKwlJZiBubyBmcmFtZSBuZWVkIHRvIHNlbmQsIGdvIHRvIHNsZWVwLCBlbHNlLCBzdGlsbCB3YWtlIHVwLgorKi8KK05ESVNfU1RBVFVTIFJUTVBGcmVlVFhEUmVxdWVzdCgKKwlJTgkJUFJUTVBfQURBUFRFUglwQWQsCisJSU4JCVVDSEFSCQkJUXVlSWR4LAorCUlOCQlVQ0hBUgkJCU51bWJlclJlcXVpcmVkLAorCUlOCQlQVUNIQVIJCQlGcmVlTnVtYmVySXMpCit7CisJLy9VTE9ORwkJRnJlZU51bWJlciA9IDA7CisJTkRJU19TVEFUVVMgCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJdW5zaWduZWQgbG9uZyAgIElycUZsYWdzOworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKworCXN3aXRjaCAoUXVlSWR4KQorCXsKKwkJY2FzZSBRSURfQUNfQks6CisJCWNhc2UgUUlEX0FDX0JFOgorCQljYXNlIFFJRF9BQ19WSToKKwkJY2FzZSBRSURfQUNfVk86CisJCWNhc2UgUUlEX0hDQ0E6CisJCQl7CisJCQkJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisJCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCQkJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICE9IHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24pIHx8CisJCQkJCShwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkpCisJCQkJeworCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQkJCX0KKwkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUUlEX01HTVQ6CisJCQlpZiAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCAhPSBNR01UX1JJTkdfU0laRSkKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQkJZWxzZQorCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJSVE1QRnJlZVRYRFJlcXVlc3Q6OkludmFsaWQgUXVlSWR4KD0lZClcbiIsIFF1ZUlkeCkpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChTdGF0dXMpOworCit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworVk9JRCBSVE1QU2VuZERpc2Fzc29jaWF0aW9uRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7Cit9CisKK1ZPSUQJUlRNUFNlbmROdWxsRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlUeFJhdGUsCisJSU4JQk9PTEVBTiAJCWJRb3NOdWxsKQoreworCVVDSEFSCU51bGxGcmFtZVs0OF07CisJVUxPTkcJTGVuZ3RoOworCVBIRUFERVJfODAyXzExCXBIZWFkZXJfODAyXzExOworCisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYoQVRFX09OKHBBZCkpCisJeworCQlyZXR1cm47CisJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworICAgIC8vIFdQQSA4MDIuMXggc2VjdXJlZCBwb3J0IGNvbnRyb2wKKyAgICBpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAorICAgICAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8CisgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCQkgIHx8IChwQWQtPlN0YUNmZy5JRUVFODAyMVggPT0gVFJVRSkKKyNlbmRpZgorICAgICAgICApICYmCisgICAgICAgKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkpCisJeworCQlyZXR1cm47CisJfQorCisJTmRpc1plcm9NZW1vcnkoTnVsbEZyYW1lLCA0OCk7CisJTGVuZ3RoID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJcEhlYWRlcl84MDJfMTEgPSAoUEhFQURFUl84MDJfMTEpIE51bGxGcmFtZTsKKworCXBIZWFkZXJfODAyXzExLT5GQy5UeXBlID0gQlRZUEVfREFUQTsKKwlwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfTlVMTF9GVU5DOworCXBIZWFkZXJfODAyXzExLT5GQy5Ub0RzID0gMTsKKwlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMSwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKwlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpCisJeworCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCX0KKwllbHNlCisJeworCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpID8gMTogMDsKKwl9CisJcEhlYWRlcl84MDJfMTEtPkR1cmF0aW9uID0gcEFkLT5Db21tb25DZmcuRHNpZnMgKyBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwgVHhSYXRlLCAxNCk7CisKKwlwQWQtPlNlcXVlbmNlKys7CisJcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcEFkLT5TZXF1ZW5jZTsKKworCS8vIFByZXBhcmUgUW9zTnVsbCBmdW5jdGlvbiBmcmFtZQorCWlmIChiUW9zTnVsbCkKKwl7CisJCXBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9RT1NfTlVMTDsKKworCQkvLyBjb3B5IFFPUyBjb250cm9sIGJ5dGVzCisJCU51bGxGcmFtZVtMZW5ndGhdCT0gIDA7CisJCU51bGxGcmFtZVtMZW5ndGgrMV0gPSAgMDsKKwkJTGVuZ3RoICs9IDI7Ly8gaWYgcGFkIHdpdGggMiBieXRlcyBmb3IgYWxpZ25tZW50LCBBUFNEIHdpbGwgZmFpbAorCX0KKworCUhBTF9LaWNrT3V0TnVsbEZyYW1lVHgocEFkLCAwLCBOdWxsRnJhbWUsIExlbmd0aCk7CisKK30KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lECVJUTVBTZW5kUlRTRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERBLAorCUlOCXVuc2lnbmVkIGludAlOZXh0TXBkdVNpemUsCisJSU4JVUNIQVIJCQlUeFJhdGUsCisJSU4JVUNIQVIJCQlSVFNSYXRlLAorCUlOCVVTSE9SVAkJCUFja0R1cmF0aW9uLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVVDSEFSCQkJRnJhbWVHYXApCit7Cit9CisKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIEZJTkQgRU5DUllQVCBLRVkgQU5EIERFQ0lERSBDSVBIRVIgQUxHT1JJVEhNCisvLwkJRmluZCB0aGUgV1BBIGtleSwgZWl0aGVyIEdyb3VwIG9yIFBhaXJ3aXNlIEtleQorLy8JCUxFQVAgKyBUS0lQIGFsc28gdXNlIFdQQSBrZXkuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVjaWRlIFdFUCBiaXQgYW5kIGNpcGhlciBzdWl0ZSB0byBiZSB1c2VkLiBTYW1lIGNpcGhlciBzdWl0ZSBzaG91bGQgYmUgdXNlZCBmb3Igd2hvbGUgZnJhZ21lbnQgYnVyc3QKKy8vIEluIENpc2NvIENDWCAyLjAgTGVhcCBBdXRoZW50aWNhdGlvbgorLy8JCSAgIFdlcFN0YXR1cyBpcyBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkIGJ1dCB0aGUga2V5IHdpbGwgdXNlIFBhaXJ3aXNlS2V5CisvLwkJICAgSW5zdGVhZCBvZiB0aGUgU2hhcmVkS2V5LCBTaGFyZWRLZXkgTGVuZ3RoIG1heSBiZSBaZXJvLgorVk9JRCBTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGspCit7CisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJQ2lwaGVyOwkJCQkvLyBUbyBpbmRpY2F0ZSBjaXBoZXIgdXNlZCBmb3IgdGhpcyBwYWNrZXQKKwlVQ0hBUgkJCQkJCQlDaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsJCS8vIGNpcGhlciBhbG9ncml0aG0KKwlVQ0hBUgkJCQkJCQlLZXlJZHggPSAweGZmOworCVBVQ0hBUgkJCQkJCQlwU3JjQnVmVkE7CisJUENJUEhFUl9LRVkJCQkJCQlwS2V5ID0gTlVMTDsKKworCXBTcmNCdWZWQSA9IEdFVF9PU19QS1RfREFUQVBUUihwVHhCbGstPnBQYWNrZXQpOworCisJeworCSAgICAvLyBTZWxlY3QgQ2lwaGVyCisJICAgIGlmICgoKnBTcmNCdWZWQSAmIDB4MDEpICYmIChBREhPQ19PTihwQWQpKSkKKwkgICAgICAgIENpcGhlciA9IHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyOyAvLyBDaXBoZXIgZm9yIE11bHRpY2FzdCBvciBCcm9hZGNhc3QKKwkgICAgZWxzZQorCSAgICAgICAgQ2lwaGVyID0gcEFkLT5TdGFDZmcuUGFpckNpcGhlcjsgLy8gQ2lwaGVyIGZvciBVbmljYXN0CisKKwkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwVHhCbGstPnBQYWNrZXQpKQorCQl7CisJCQlBU1NFUlQocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnIDw9IENJUEhFUl9DS0lQMTI4KTsKKworCQkJLy8gNC13YXkgaGFuZHNoYWtpbmcgZnJhbWUgbXVzdCBiZSBjbGVhcgorCQkJaWYgKCEoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iQ2xlYXJFQVBGcmFtZSkpICYmIChwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcpICYmCisJCQkJKHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbikpCisJCQl7CisJCQkJQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnOworCQkJCUtleUlkeCA9IDA7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpCisJCXsKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCWlmIChwQWQtPlN0YUNmZy5Da2lwRmxhZyAmIDB4MTApIC8vIENpc2NvIENLSVAgS1AgaXMgb24KKwkJCXsKKwkJCQlpZiAoTEVBUF9DQ0tNX09OKHBBZCkpCisJCQkJeworCQkJCQlpZiAoKCgqcFNyY0J1ZlZBICYgMHgwMSkgJiYgKEFESE9DX09OKHBBZCkpKSkKKwkJCQkJCUtleUlkeCA9IDE7CisJCQkJCWVsc2UKKwkJCQkJCUtleUlkeCA9IDA7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJS2V5SWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCQkJfQorCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuQ2tpcEZsYWcgJiAweDA4KSAvLyBvbmx5IENLSVAgQ01JQworCQkJCUtleUlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKwkJCWVsc2UgaWYgKExFQVBfQ0NLTV9PTihwQWQpKQorCQkJeworCQkJCWlmICgoKnBTcmNCdWZWQSAmIDB4MDEpICYmIChBREhPQ19PTihwQWQpKSkKKwkJCQkJS2V5SWR4ID0gMTsKKwkJCQllbHNlCisJCQkJCUtleUlkeCA9IDA7CisJCQl9CisJCQllbHNlCS8vIHN0YW5kYXJkIFdFUDY0IG9yIFdFUDEyOAorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJCUtleUlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKwkJfQorCQllbHNlIGlmICgoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHx8CisJCQkJIChDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpCisJCXsKKwkJCWlmICgoKnBTcmNCdWZWQSAmIDB4MDEpICYmIChBREhPQ19PTihwQWQpKSkgLy8gbXVsdGljYXN0CisJCQkJS2V5SWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCQkJZWxzZSBpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuKQorCQkJCUtleUlkeCA9IDA7CisJCQllbHNlCisJCQkJS2V5SWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCQl9CisKKwkJaWYgKEtleUlkeCA9PSAweGZmKQorCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJCWVsc2UgaWYgKChDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkgfHwgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID09IDApKQorCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCSAgICBlbHNlIGlmICggcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICYmCisJICAgICAgICAgICAgIChDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgJiYKKwkgICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9PSBUUlVFKSAmJgorCSAgICAgICAgICAgICAocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkKKwkgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9OT05FOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJZWxzZQorCQl7CisJCQkvL0hlYWRlcl84MDJfMTEuRkMuV2VwID0gMTsKKwkJCUNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnOworCQkJcEtleSA9ICZwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdOworCQl9CisJfQorCisJcFR4QmxrLT5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJcFR4QmxrLT5wS2V5ID0gcEtleTsKK30KKworCitWT0lEIFNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBUWF9CTEsgICAgICAgICAgKnBUeEJsaykKK3sKKworCUhFQURFUl84MDJfMTEJKnBIZWFkZXJfODAyXzExOworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCUJPT0xFQU4JYkRMU0ZyYW1lID0gRkFMU0U7CisJSU5UCURsc0VudHJ5SW5kZXggPSAwOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJLy8KKwkvLyBNQUtFIEEgQ09NTU9OIDgwMi4xMSBIRUFERVIKKwkvLworCisJLy8gbm9ybWFsIHdsYW4gaGVhZGVyIHNpemUgOiAyNCBvY3RldHMKKwlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwlwSGVhZGVyXzgwMl8xMSA9IChIRUFERVJfODAyXzExICopICZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07CisKKwlOZGlzWmVyb01lbW9yeShwSGVhZGVyXzgwMl8xMSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCXBIZWFkZXJfODAyXzExLT5GQy5GckRzID0gMDsKKwlwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSA9IEJUWVBFX0RBVEE7CisJcEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPSAoKFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYldNTSkpID8gU1VCVFlQRV9RREFUQSA6IFNVQlRZUEVfREFUQSk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwlpZiAoSU5GUkFfT04ocEFkKSkKKwl7CisJCS8vIENoZWNrIGlmIHRoZSBmcmFtZSBjYW4gYmUgc2VudCB0aHJvdWdoIERMUyBkaXJlY3QgbGluayBpbnRlcmZhY2UKKwkJLy8gSWYgcGFja2V0IGNhbiBiZSBzZW50IHRocm91Z2ggRExTLCB0aGVuIGZvcmNlIGFnZ3JlZ2F0aW9uIGRpc2FibGUuIChIYXJkIHRvIGRldGVybWluZSBwZWVyIFNUQSdzIGNhcGFiaWxpdHkpCisJCURsc0VudHJ5SW5kZXggPSBSVE1QQ2hlY2tETFNGcmFtZShwQWQsIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7CisJCWlmIChEbHNFbnRyeUluZGV4ID49IDApCisJCQliRExTRnJhbWUgPSBUUlVFOworCQllbHNlCisJCQliRExTRnJhbWUgPSBGQUxTRTsKKwl9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKyAgICBpZiAocFR4QmxrLT5wTWFjRW50cnkpCisJeworCQlpZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iRm9yY2VOb25Rb1MpKQorCQl7CisJCQlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwVHhCbGstPnBNYWNFbnRyeS0+Tm9uUW9zRGF0YVNlcTsKKwkJCXBUeEJsay0+cE1hY0VudHJ5LT5Ob25Rb3NEYXRhU2VxID0gKHBUeEJsay0+cE1hY0VudHJ5LT5Ob25Rb3NEYXRhU2VxKzEpICYgTUFYU0VROworCQl9CisJCWVsc2UKKwkJeworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJaWYgKGJETFNGcmFtZSkKKwkJCXsKKwkJCQlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwQWQtPlN0YUNmZy5ETFNFbnRyeVtEbHNFbnRyeUluZGV4XS5TZXF1ZW5jZTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtEbHNFbnRyeUluZGV4XS5TZXF1ZW5jZSA9IChwQWQtPlN0YUNmZy5ETFNFbnRyeVtEbHNFbnRyeUluZGV4XS5TZXF1ZW5jZSsxKSAmIE1BWFNFUTsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJCXsKKyAgICAJICAgIHBIZWFkZXJfODAyXzExLT5TZXF1ZW5jZSA9IHBUeEJsay0+cE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV07CisgICAgCSAgICBwVHhCbGstPnBNYWNFbnRyeS0+VHhTZXFbcFR4QmxrLT5Vc2VyUHJpb3JpdHldID0gKHBUeEJsay0+cE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV0rMSkgJiBNQVhTRVE7CisgICAgCX0KKwl9CisJfQorCWVsc2UKKwl7CisJCXBIZWFkZXJfODAyXzExLT5TZXF1ZW5jZSA9IHBBZC0+U2VxdWVuY2U7CisJCXBBZC0+U2VxdWVuY2UgPSAocEFkLT5TZXF1ZW5jZSsxKSAmIE1BWFNFUTsgLy8gbmV4dCBzZXF1ZW5jZQorCX0KKworCXBIZWFkZXJfODAyXzExLT5GcmFnID0gMDsKKworCXBIZWFkZXJfODAyXzExLT5GQy5Nb3JlRGF0YSA9IFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYk1vcmVEYXRhKTsKKworCXsKKwkJaWYgKElORlJBX09OKHBBZCkpCisJCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCWlmIChiRExTRnJhbWUpCisJCQl7CisJCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjEsIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7CisJCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCQkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQkJcEhlYWRlcl84MDJfMTEtPkZDLlRvRHMgPSAwOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkJeworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIzLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCQkJcEhlYWRlcl84MDJfMTEtPkZDLlRvRHMgPSAxOworCQl9CisJCX0KKwkJZWxzZSBpZiAoQURIT0NfT04ocEFkKSkKKwkJeworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjEsIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7CisJCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJcEhlYWRlcl84MDJfMTEtPkZDLlRvRHMgPSAwOworCQl9CisJfQorCisJaWYgKHBUeEJsay0+Q2lwaGVyQWxnICE9IENJUEhFUl9OT05FKQorCQlwSGVhZGVyXzgwMl8xMS0+RkMuV2VwID0gMTsKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gU1RFUCAyLiBNQUtFIEEgQ09NTU9OIDgwMi4xMSBIRUFERVIgU0hBUkVEIEJZIEVOVElSRSBGUkFHTUVOVCBCVVJTVC4gRmlsbCBzZXF1ZW5jZSBsYXRlci4KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlKQorICAgIAlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCWVsc2UKKyAgICAJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKTsKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBTVEFCdWlsZENhY2hlODAyXzExSGVhZGVyKAorCUlOIFJUTVBfQURBUFRFUgkJKnBBZCwKKwlJTiBUWF9CTEsJCQkqcFR4QmxrLAorCUlOIFVDSEFSCQkJKnBIZWFkZXIpCit7CisJTUFDX1RBQkxFX0VOVFJZCSpwTWFjRW50cnk7CisJUEhFQURFUl84MDJfMTEJcEhlYWRlcjgwMjExOworCisJcEhlYWRlcjgwMjExID0gKFBIRUFERVJfODAyXzExKXBIZWFkZXI7CisJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7CisKKwkvLworCS8vIFVwZGF0ZSB0aGUgY2FjaGVkIDgwMi4xMSBIRUFERVIKKwkvLworCisJLy8gbm9ybWFsIHdsYW4gaGVhZGVyIHNpemUgOiAyNCBvY3RldHMKKwlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwkvLyBNb3JlIEJpdAorCXBIZWFkZXI4MDIxMS0+RkMuTW9yZURhdGEgPSBUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7CisKKwkvLyBTZXF1ZW5jZQorCXBIZWFkZXI4MDIxMS0+U2VxdWVuY2UgPSBwTWFjRW50cnktPlR4U2VxW3BUeEJsay0+VXNlclByaW9yaXR5XTsKKyAgICBwTWFjRW50cnktPlR4U2VxW3BUeEJsay0+VXNlclByaW9yaXR5XSA9IChwTWFjRW50cnktPlR4U2VxW3BUeEJsay0+VXNlclByaW9yaXR5XSsxKSAmIE1BWFNFUTsKKworCXsKKwkJLy8gQ2hlY2sgaWYgdGhlIGZyYW1lIGNhbiBiZSBzZW50IHRocm91Z2ggRExTIGRpcmVjdCBsaW5rIGludGVyZmFjZQorCQkvLyBJZiBwYWNrZXQgY2FuIGJlIHNlbnQgdGhyb3VnaCBETFMsIHRoZW4gZm9yY2UgYWdncmVnYXRpb24gZGlzYWJsZS4gKEhhcmQgdG8gZGV0ZXJtaW5lIHBlZXIgU1RBJ3MgY2FwYWJpbGl0eSkKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJQk9PTEVBTgliRExTRnJhbWUgPSBGQUxTRTsKKwkJSU5UCURsc0VudHJ5SW5kZXggPSAwOworCisJCURsc0VudHJ5SW5kZXggPSBSVE1QQ2hlY2tETFNGcmFtZShwQWQsIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7CisJCWlmIChEbHNFbnRyeUluZGV4ID49IDApCisJCQliRExTRnJhbWUgPSBUUlVFOworCQllbHNlCisJCQliRExTRnJhbWUgPSBGQUxTRTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCQkvLyBUaGUgYWRkcjMgb2Ygbm9ybWFsIHBhY2tldCBzZW5kIGZyb20gRFMgaXMgRGVzdCBNYWMgYWRkcmVzcy4KKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJaWYgKGJETFNGcmFtZSkKKwkJeworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyODAyMTEtPkFkZHIxLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyODAyMTEtPkFkZHIzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlwSGVhZGVyODAyMTEtPkZDLlRvRHMgPSAwOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJaWYgKEFESE9DX09OKHBBZCkpCisJCQlDT1BZX01BQ19BRERSKHBIZWFkZXI4MDIxMS0+QWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJZWxzZQorCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyODAyMTEtPkFkZHIzLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCX0KKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gU1RFUCAyLiBNQUtFIEEgQ09NTU9OIDgwMi4xMSBIRUFERVIgU0hBUkVEIEJZIEVOVElSRSBGUkFHTUVOVCBCVVJTVC4gRmlsbCBzZXF1ZW5jZSBsYXRlci4KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlKQorICAgIAlwSGVhZGVyODAyMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKKwllbHNlCisgICAgCXBIZWFkZXI4MDIxMS0+RkMuUHdyTWdtdCA9IChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitzdGF0aWMgaW5saW5lIFBVQ0hBUiBTVEFfQnVpbGRfQVJhbGlua19GcmFtZV9IZWFkZXIoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVFhfQkxLCQkqcFR4QmxrKQoreworCVBVQ0hBUgkJCXBIZWFkZXJCdWZQdHI7CisJSEVBREVSXzgwMl8xMQkqcEhlYWRlcl84MDJfMTE7CisJUE5ESVNfUEFDS0VUCXBOZXh0UGFja2V0OworCVVJTlQzMgkJCW5leHRCdWZMZW47CisJUFFVRVVFX0VOVFJZCXBRRW50cnk7CisKKwlTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKHBBZCwgcFR4QmxrKTsKKwlTVEFCdWlsZENvbW1vbjgwMl8xMUhlYWRlcihwQWQsIHBUeEJsayk7CisKKworCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOworCXBIZWFkZXJfODAyXzExID0gKEhFQURFUl84MDJfMTEgKikgcEhlYWRlckJ1ZlB0cjsKKworCS8vIHN0ZWFsICJvcmRlciIgYml0IHRvIG1hcmsgImFnZ3JlZ2F0aW9uIgorCXBIZWFkZXJfODAyXzExLT5GQy5PcmRlciA9IDE7CisKKwkvLyBza2lwIGNvbW1vbiBoZWFkZXIKKwlwSGVhZGVyQnVmUHRyICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKworCWlmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKQorCXsKKwkJLy8KKwkJLy8gYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMKKwkJLy8KKwkJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKworCQkqKHBIZWFkZXJCdWZQdHIrMSkgPSAwOworCQlwSGVhZGVyQnVmUHRyICs9MjsKKwkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDI7CisJfQorCisJLy8gcGFkZGluZyBhdCBmcm9udCBvZiBMTEMgaGVhZGVyLiBMTEMgaGVhZGVyIHNob3VsZCBhdCA0LWJ5dGVzIGFsaWdtZW50LgorCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKXBIZWFkZXJCdWZQdHI7CisJcEhlYWRlckJ1ZlB0ciA9IChQQ0hBUilST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKKwlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORykocEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGRyUGFkTGVuKTsKKworCS8vIEZvciBSQSBBZ2dyZWdhdGlvbiwKKwkvLyBwdXQgdGhlIDJuZCBNU0RVIGxlbmd0aChleHRyYSAyLWJ5dGUgZmllbGQpIGFmdGVyIFFPU19DT05UUk9MIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0CisJcFFFbnRyeSA9IHBUeEJsay0+VHhQYWNrZXRMaXN0LkhlYWQ7CisJcE5leHRQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QS1QocFFFbnRyeSk7CisJbmV4dEJ1ZkxlbiA9IEdFVF9PU19QS1RfTEVOKHBOZXh0UGFja2V0KTsKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX1ZMQU4ocE5leHRQYWNrZXQpKQorCQluZXh0QnVmTGVuIC09IExFTkdUSF84MDJfMVE7CisKKwkqcEhlYWRlckJ1ZlB0ciA9IChVQ0hBUiluZXh0QnVmTGVuICYgMHhmZjsKKwkqKHBIZWFkZXJCdWZQdHIrMSkgPSAoVUNIQVIpKG5leHRCdWZMZW4gPj4gOCk7CisKKwlwSGVhZGVyQnVmUHRyICs9IDI7CisJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDI7CisKKwlyZXR1cm4gcEhlYWRlckJ1ZlB0cjsKKworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitzdGF0aWMgaW5saW5lIFBVQ0hBUiBTVEFfQnVpbGRfQU1TRFVfRnJhbWVfSGVhZGVyKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFRYX0JMSwkJKnBUeEJsaykKK3sKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOy8vLCBwU2F2ZUJ1ZlB0cjsKKwlIRUFERVJfODAyXzExCSpwSGVhZGVyXzgwMl8xMTsKKworCisJU1RBRmluZENpcGhlckFsZ29yaXRobShwQWQsIHBUeEJsayk7CisJU1RBQnVpbGRDb21tb244MDJfMTFIZWFkZXIocEFkLCBwVHhCbGspOworCisJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07CisJcEhlYWRlcl84MDJfMTEgPSAoSEVBREVSXzgwMl8xMSAqKSBwSGVhZGVyQnVmUHRyOworCisJLy8gc2tpcCBjb21tb24gaGVhZGVyCisJcEhlYWRlckJ1ZlB0ciArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisKKwkvLworCS8vIGJ1aWxkIFFPUyBDb250cm9sIGJ5dGVzCisJLy8KKwkqcEhlYWRlckJ1ZlB0ciA9IChwVHhCbGstPlVzZXJQcmlvcml0eSAmIDB4MEYpOworCisJLy8KKwkvLyBBLU1TRFUgcGFja2V0CisJLy8KKwkqcEhlYWRlckJ1ZlB0ciB8PSAweDgwOworCisJKihwSGVhZGVyQnVmUHRyKzEpID0gMDsKKwlwSGVhZGVyQnVmUHRyICs9MjsKKwlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gMjsKKworCS8vcFNhdmVCdWZQdHIgPSBwSGVhZGVyQnVmUHRyOworCisJLy8KKwkvLyBwYWRkaW5nIGF0IGZyb250IG9mIExMQyBoZWFkZXIKKwkvLyBMTEMgaGVhZGVyIHNob3VsZCBsb2NhdGUgYXQgNC1vY3RldHMgYWxpZ21lbnQKKwkvLworCS8vIEBAQCBNcGR1SGVhZGVyTGVuIGV4Y2x1ZGluZyBwYWRkaW5nIEBAQAorCS8vCisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpcEhlYWRlckJ1ZlB0cjsKKwlwSGVhZGVyQnVmUHRyID0gKFBDSEFSKSBST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKKwlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORykocEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGRyUGFkTGVuKTsKKworCXJldHVybiBwSGVhZGVyQnVmUHRyOworCit9CisKKworVk9JRCBTVEFfQU1QRFVfRnJhbWVfVHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaykKK3sKKwlIRUFERVJfODAyXzExCSpwSGVhZGVyXzgwMl8xMTsKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOworCVVTSE9SVAkJCUZyZWVOdW1iZXI7CisJTUFDX1RBQkxFX0VOVFJZCSpwTWFjRW50cnk7CisJQk9PTEVBTgkJCWJWTEFOUGt0OworCVBRVUVVRV9FTlRSWQlwUUVudHJ5OworCisJQVNTRVJUKHBUeEJsayk7CisKKwl3aGlsZShwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKQorCXsKKwkJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOworCQlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisJCWlmICggUlRNUF9GaWxsVHhCbGtJbmZvKHBBZCwgcFR4QmxrKSAhPSBUUlVFKQorCQl7CisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYlZMQU5Qa3QgPSAoUlRNUF9HRVRfUEFDS0VUX1ZMQU4ocFR4QmxrLT5wUGFja2V0KSA/IFRSVUUgOiBGQUxTRSk7CisKKwkJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7CisJCWlmIChwTWFjRW50cnktPmlzQ2FjaGVkKQorCQl7CisJCQkvLyBOT1RFOiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBzaXplIG9mIHBNYWNFbnRyeS0+Q2FjaGVkQnVmW10gaXMgc21hbGxlciB0aGFuIHBUeEJsay0+SGVhZGVyQnVmW10hISEhCisJCQlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0sIChQVUNIQVIpJnBNYWNFbnRyeS0+Q2FjaGVkQnVmWzBdLCBUWFdJX1NJWkUgKyBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCQkJcEhlYWRlckJ1ZlB0ciA9IChQVUNIQVIpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV0pOworCQkJU1RBQnVpbGRDYWNoZTgwMl8xMUhlYWRlcihwQWQsIHBUeEJsaywgcEhlYWRlckJ1ZlB0cik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKHBBZCwgcFR4QmxrKTsKKwkJCVNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKHBBZCwgcFR4QmxrKTsKKworCQkJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07CisJCX0KKworCisJCXBIZWFkZXJfODAyXzExID0gKEhFQURFUl84MDJfMTEgKikgcEhlYWRlckJ1ZlB0cjsKKworCQkvLyBza2lwIGNvbW1vbiBoZWFkZXIKKwkJcEhlYWRlckJ1ZlB0ciArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisKKwkJLy8KKwkJLy8gYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMKKwkJLy8KKwkJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKwkJKihwSGVhZGVyQnVmUHRyKzEpID0gMDsKKwkJcEhlYWRlckJ1ZlB0ciArPTI7CisJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOworCisJCS8vCisJCS8vIGJ1aWxkIEhUQysKKwkJLy8gSFRDIGNvbnRyb2wgZmlsZWQgZm9sbG93aW5nIFFvUyBmaWVsZAorCQkvLworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgPT0gVFJVRSkgJiYgQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocFR4QmxrLT5wTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFKSkKKwkJeworCQkJaWYgKHBNYWNFbnRyeS0+aXNDYWNoZWQgPT0gRkFMU0UpCisJCQl7CisJCQkJLy8gbWFyayBIVEMgYml0CisJCQkJcEhlYWRlcl84MDJfMTEtPkZDLk9yZGVyID0gMTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHBIZWFkZXJCdWZQdHIsIDQpOworCQkJCSoocEhlYWRlckJ1ZlB0ciszKSB8PSAweDgwOworCQkJfQorCQkJcEhlYWRlckJ1ZlB0ciArPSA0OworCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDQ7CisJCX0KKworCQkvL3BUeEJsay0+TXBkdUhlYWRlckxlbiA9IHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhlYWRlckJ1ZiAtIFRYV0lfU0laRSAtIFRYSU5GT19TSVpFOworCQlBU1NFUlQocFR4QmxrLT5NcGR1SGVhZGVyTGVuID49IDI0KTsKKworCQkvLyBza2lwIDgwMi4zIGhlYWRlcgorCQlwVHhCbGstPnBTcmNCdWZEYXRhID0gcFR4QmxrLT5wU3JjQnVmSGVhZGVyICsgTEVOR1RIXzgwMl8zOworCQlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisJCS8vIHNraXAgdmxhbiB0YWcKKwkJaWYgKGJWTEFOUGt0KQorCQl7CisJCQlwVHhCbGstPnBTcmNCdWZEYXRhCSs9IExFTkdUSF84MDJfMVE7CisJCQlwVHhCbGstPlNyY0J1ZkxlbgktPSBMRU5HVEhfODAyXzFROworCQl9CisKKwkJLy8KKwkJLy8gcGFkZGluZyBhdCBmcm9udCBvZiBMTEMgaGVhZGVyCisJCS8vIExMQyBoZWFkZXIgc2hvdWxkIGxvY2F0ZSBhdCA0LW9jdGV0cyBhbGlnbWVudAorCQkvLworCQkvLyBAQEAgTXBkdUhlYWRlckxlbiBleGNsdWRpbmcgcGFkZGluZyBAQEAKKwkJLy8KKwkJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpcEhlYWRlckJ1ZlB0cjsKKwkJcEhlYWRlckJ1ZlB0ciA9IChQQ0hBUikgUk9VTkRfVVAocEhlYWRlckJ1ZlB0ciwgNCk7CisJCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKShwSGVhZGVyQnVmUHRyIC0gcFR4QmxrLT5IZHJQYWRMZW4pOworCisJCXsKKworCQkJLy8KKwkJCS8vIEluc2VydCBMTEMtU05BUCBlbmNhcHN1bGF0aW9uIC0gOCBvY3RldHMKKwkJCS8vCisJCQlFWFRSQV9MTENTTkFQX0VOQ0FQX0ZST01fUEtUX09GRlNFVChwVHhCbGstPnBTcmNCdWZEYXRhLTIsIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKTsKKwkJCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCQkJcEhlYWRlckJ1ZlB0ciArPSA2OworCQkJCS8vIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKQorCQkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cFNyY0J1ZkRhdGEtMiwgMik7CisJCQkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSBMRU5HVEhfODAyXzFfSDsKKwkJCX0KKworCQl9CisKKwkJaWYgKHBNYWNFbnRyeS0+aXNDYWNoZWQpCisJCXsKKyAgICAgICAgICAgIFJUTVBXcml0ZVR4V0lfQ2FjaGUocEFkLCAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pLCBwVHhCbGspOworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUFdyaXRlVHhXSV9EYXRhKHBBZCwgKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSwgcFR4QmxrKTsKKworCQkJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikoJnBNYWNFbnRyeS0+Q2FjaGVkQnVmWzBdKSwgc2l6ZW9mKHBNYWNFbnRyeS0+Q2FjaGVkQnVmKSk7CisJCQlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSgmcE1hY0VudHJ5LT5DYWNoZWRCdWZbMF0pLCAoUFVDSEFSKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSwgKHBIZWFkZXJCdWZQdHIgLSAoUFVDSEFSKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSkpOworCQkJcE1hY0VudHJ5LT5pc0NhY2hlZCA9IFRSVUU7CisJCX0KKworCQkvLyBjYWxjdWxhdGUgVHJhbnNtaXR0ZWQgQU1QRFUgY291bnQgYW5kIEJ5dGVDb3VudAorCQl7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkTVBEVXNJbkFNUERVQ291bnQudS5Mb3dQYXJ0ICsrOworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZE9jdGV0c0luQU1QRFVDb3VudC5RdWFkUGFydCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKKwkJfQorCisJCS8vRnJlZU51bWJlciA9IEdFVF9UWFJJTkdfRlJFRU5PKHBBZCwgUXVlSWR4KTsKKworCQlIQUxfV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBUUlVFLCAmRnJlZU51bWJlcik7CisKKwkJLy8KKwkJLy8gS2ljayBvdXQgVHgKKwkJLy8KKwkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOworCX0KKworfQorCisKK1ZPSUQgU1RBX0FNU0RVX0ZyYW1lX1R4KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGspCit7CisJUFVDSEFSCQkJcEhlYWRlckJ1ZlB0cjsKKwlVU0hPUlQJCQlGcmVlTnVtYmVyOworCVVTSE9SVAkJCXN1YkZyYW1lUGF5bG9hZExlbiA9IDA7CS8vIEFNU0RVIFN1YmZyYW1lIGxlbmd0aCB3aXRob3V0IEFNU0RVLUhlYWRlciAvIFBhZGRpbmcuCisJVVNIT1JUCQkJdG90YWxNUERVU2l6ZT0wOworCVVDSEFSCQkJKnN1YkZyYW1lSGVhZGVyOworCVVDSEFSCQkJcGFkZGluZyA9IDA7CisJVVNIT1JUCQkJRmlyc3RUeCA9IDAsIExhc3RUeElkeCA9IDA7CisJQk9PTEVBTgkJCWJWTEFOUGt0OworCWludCAJCQlmcmFtZU51bSA9IDA7CisJUFFVRVVFX0VOVFJZCXBRRW50cnk7CisKKworCUFTU0VSVChwVHhCbGspOworCisJQVNTRVJUKChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIgPiAxKSk7CisKKwl3aGlsZShwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKQorCXsKKwkJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOworCQlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisJCWlmIChSVE1QX0ZpbGxUeEJsa0luZm8ocEFkLCBwVHhCbGspICE9IFRSVUUpCisJCXsKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJY29udGludWU7CisJCX0KKworCQliVkxBTlBrdCA9IChSVE1QX0dFVF9QQUNLRVRfVkxBTihwVHhCbGstPnBQYWNrZXQpID8gVFJVRSA6IEZBTFNFKTsKKworCQkvLyBza2lwIDgwMi4zIGhlYWRlcgorCQlwVHhCbGstPnBTcmNCdWZEYXRhID0gcFR4QmxrLT5wU3JjQnVmSGVhZGVyICsgTEVOR1RIXzgwMl8zOworCQlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisJCS8vIHNraXAgdmxhbiB0YWcKKwkJaWYgKGJWTEFOUGt0KQorCQl7CisJCQlwVHhCbGstPnBTcmNCdWZEYXRhCSs9IExFTkdUSF84MDJfMVE7CisJCQlwVHhCbGstPlNyY0J1ZkxlbgktPSBMRU5HVEhfODAyXzFROworCQl9CisKKwkJaWYgKGZyYW1lTnVtID09IDApCisJCXsKKwkJCXBIZWFkZXJCdWZQdHIgPSBTVEFfQnVpbGRfQU1TRFVfRnJhbWVfSGVhZGVyKHBBZCwgcFR4QmxrKTsKKworCQkJLy8gTk9URTogVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IHdpbGwgYmUgdXBkYXRlZCBhZnRlciBmaW5hbCBmcmFtZSB3YXMgaGFuZGxlZC4KKwkJCVJUTVBXcml0ZVR4V0lfRGF0YShwQWQsIChQVFhXSV9TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSksIHBUeEJsayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwSGVhZGVyQnVmUHRyID0gJnBUeEJsay0+SGVhZGVyQnVmWzBdOworCQkJcGFkZGluZyA9IFJPVU5EX1VQKExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQgKyBzdWJGcmFtZVBheWxvYWRMZW4sIDQpIC0gKExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQgKyBzdWJGcmFtZVBheWxvYWRMZW4pOworCQkJTmRpc1plcm9NZW1vcnkocEhlYWRlckJ1ZlB0ciwgcGFkZGluZyArIExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQpOworCQkJcEhlYWRlckJ1ZlB0ciArPSBwYWRkaW5nOworCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuID0gcGFkZGluZzsKKwkJfQorCisJCS8vCisJCS8vIEEtTVNEVSBzdWJmcmFtZQorCQkvLyAgIERBKDYpK1NBKDYpK0xlbmd0aCgyKSArIExMQy9TTkFQIEVuY2FwCisJCS8vCisJCXN1YkZyYW1lSGVhZGVyID0gcEhlYWRlckJ1ZlB0cjsKKwkJc3ViRnJhbWVQYXlsb2FkTGVuID0gcFR4QmxrLT5TcmNCdWZMZW47CisKKwkJTmRpc01vdmVNZW1vcnkoc3ViRnJhbWVIZWFkZXIsIHBUeEJsay0+cFNyY0J1ZkhlYWRlciwgMTIpOworCisKKwkJcEhlYWRlckJ1ZlB0ciArPSBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEOworCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRDsKKworCisJCS8vCisJCS8vIEluc2VydCBMTEMtU05BUCBlbmNhcHN1bGF0aW9uIC0gOCBvY3RldHMKKwkJLy8KKwkJRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQocFR4QmxrLT5wU3JjQnVmRGF0YS0yLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisKKwkJc3ViRnJhbWVQYXlsb2FkTGVuID0gcFR4QmxrLT5TcmNCdWZMZW47CisKKwkJaWYgKHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKQorCQl7CisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDY7CisJCQkvLyBnZXQgMiBvY3RldHMgKFR5cGVvZkxlbikKKwkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cFNyY0J1ZkRhdGEtMiwgMik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDI7CisJCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJCQlzdWJGcmFtZVBheWxvYWRMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJCX0KKworCQkvLyB1cGRhdGUgc3ViRnJhbWUgTGVuZ3RoIGZpZWxkCisJCXN1YkZyYW1lSGVhZGVyWzEyXSA9IChzdWJGcmFtZVBheWxvYWRMZW4gJiAweEZGMDApID4+IDg7CisJCXN1YkZyYW1lSGVhZGVyWzEzXSA9IHN1YkZyYW1lUGF5bG9hZExlbiAmIDB4RkY7CisKKwkJdG90YWxNUERVU2l6ZSArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKworCQlpZiAoZnJhbWVOdW0gPT0wKQorCQkJRmlyc3RUeCA9IEhBTF9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhbWVOdW0sICZGcmVlTnVtYmVyKTsKKwkJZWxzZQorCQkJTGFzdFR4SWR4ID0gSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwgJkZyZWVOdW1iZXIpOworCisJCWZyYW1lTnVtKys7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RG9uZUNvdW50Kys7CisKKwkJLy8gY2FsY3VsYXRlIFRyYW5zbWl0dGVkIEFNU0RVIENvdW50IGFuZCBCeXRlQ291bnQKKwkJeworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNU0RVQ291bnQudS5Mb3dQYXJ0ICsrOworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZE9jdGV0c0luQU1TRFUuUXVhZFBhcnQgKz0gdG90YWxNUERVU2l6ZTsKKwkJfQorCisJfQorCisJSEFMX0ZpbmFsV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCB0b3RhbE1QRFVTaXplLCBGaXJzdFR4KTsKKwlIQUxfTGFzdFR4SWR4KHBBZCwgcFR4QmxrLT5RdWVJZHgsIExhc3RUeElkeCk7CisKKwkvLworCS8vIEtpY2sgb3V0IFR4CisJLy8KKwlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgU1RBX0xlZ2FjeV9GcmFtZV9UeCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrKQoreworCUhFQURFUl84MDJfMTEJKnBIZWFkZXJfODAyXzExOworCVBVQ0hBUgkJCXBIZWFkZXJCdWZQdHI7CisJVVNIT1JUCQkJRnJlZU51bWJlcjsKKwlCT09MRUFOCQkJYlZMQU5Qa3Q7CisJUFFVRVVFX0VOVFJZCXBRRW50cnk7CisKKwlBU1NFUlQocFR4QmxrKTsKKworCisJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOworCXBUeEJsay0+cFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwUUVudHJ5KTsKKwlpZiAoUlRNUF9GaWxsVHhCbGtJbmZvKHBBZCwgcFR4QmxrKSAhPSBUUlVFKQorCXsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9NQ0FTVF9GUkFNRSkKKwl7CisJCUlOQ19DT1VOVEVSNjQocEFkLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKKwl9CisKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX1JUUyhwVHhCbGstPnBQYWNrZXQpKQorCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYlJ0c1JlcXVpcmVkKTsKKwllbHNlCisJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JSdHNSZXF1aXJlZCk7CisKKwliVkxBTlBrdCA9IChSVE1QX0dFVF9QQUNLRVRfVkxBTihwVHhCbGstPnBQYWNrZXQpID8gVFJVRSA6IEZBTFNFKTsKKworCWlmIChwVHhCbGstPlR4UmF0ZSA8IHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSkKKwkJcFR4QmxrLT5UeFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGU7CisKKwlTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKHBBZCwgcFR4QmxrKTsKKwlTVEFCdWlsZENvbW1vbjgwMl8xMUhlYWRlcihwQWQsIHBUeEJsayk7CisKKworCS8vIHNraXAgODAyLjMgaGVhZGVyCisJcFR4QmxrLT5wU3JjQnVmRGF0YSA9IHBUeEJsay0+cFNyY0J1ZkhlYWRlciArIExFTkdUSF84MDJfMzsKKwlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisJLy8gc2tpcCB2bGFuIHRhZworCWlmIChiVkxBTlBrdCkKKwl7CisJCXBUeEJsay0+cFNyY0J1ZkRhdGEJKz0gTEVOR1RIXzgwMl8xUTsKKwkJcFR4QmxrLT5TcmNCdWZMZW4JLT0gTEVOR1RIXzgwMl8xUTsKKwl9CisKKwlwSGVhZGVyQnVmUHRyID0gJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXTsKKwlwSGVhZGVyXzgwMl8xMSA9IChIRUFERVJfODAyXzExICopIHBIZWFkZXJCdWZQdHI7CisKKwkvLyBza2lwIGNvbW1vbiBoZWFkZXIKKwlwSGVhZGVyQnVmUHRyICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKworCWlmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKQorCXsKKwkJLy8KKwkJLy8gYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMKKwkJLy8KKwkJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKwkJKihwSGVhZGVyQnVmUHRyKzEpID0gMDsKKwkJcEhlYWRlckJ1ZlB0ciArPTI7CisJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOworCX0KKworCS8vIFRoZSByZW1haW5pbmcgY29udGVudCBvZiBNUERVIGhlYWRlciBzaG91bGQgbG9jYXRlIGF0IDQtb2N0ZXRzIGFsaWdtZW50CisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpcEhlYWRlckJ1ZlB0cjsKKwlwSGVhZGVyQnVmUHRyID0gKFBDSEFSKSBST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKKwlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORykocEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGRyUGFkTGVuKTsKKworCXsKKworCQkvLworCQkvLyBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzCisJCS8vCisJCS8vCisgICAJCS8vIGlmIG9yaWdpbmFsIEV0aGVybmV0IGZyYW1lIGNvbnRhaW5zIG5vIExMQy9TTkFQLAorCQkvLyB0aGVuIGFuIGV4dHJhIExMQy9TTkFQIGVuY2FwIGlzIHJlcXVpcmVkCisJCS8vCisJCUVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfU1RBUlQocFR4QmxrLT5wU3JjQnVmSGVhZGVyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisJCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwkJeworCQkJVUNIQVIgdmxhbl9zaXplOworCisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDY7CisJCQkvLyBza2lwIHZsYW4gdGFnCisJCQl2bGFuX3NpemUgPSAgKGJWTEFOUGt0KSA/IExFTkdUSF84MDJfMVEgOiAwOworCQkJLy8gZ2V0IDIgb2N0ZXRzIChUeXBlb2ZMZW4pCisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIrMTIrdmxhbl9zaXplLCAyKTsKKwkJCXBIZWFkZXJCdWZQdHIgKz0gMjsKKwkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSBMRU5HVEhfODAyXzFfSDsKKwkJfQorCisJfQorCisJLy8KKwkvLyBwcmVwYXJlIGZvciBUWFdJCisJLy8gdXNlIFdjaWQgYXMgS2V5IEluZGV4CisJLy8KKworCVJUTVBXcml0ZVR4V0lfRGF0YShwQWQsIChQVFhXSV9TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSksIHBUeEJsayk7CisKKwkvL0ZyZWVOdW1iZXIgPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisKKwlIQUxfV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBUUlVFLCAmRnJlZU51bWJlcik7CisKKwlwQWQtPlJhbGlua0NvdW50ZXJzLktpY2tUeENvdW50Kys7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOworCisJLy8KKwkvLyBLaWNrIG91dCBUeAorCS8vCisJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworfQorCisKK1ZPSUQgU1RBX0FSYWxpbmtfRnJhbWVfVHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaykKK3sKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOworCVVTSE9SVAkJCUZyZWVOdW1iZXI7CisJVVNIT1JUCQkJdG90YWxNUERVU2l6ZT0wOworCVVTSE9SVAkJCUZpcnN0VHgsIExhc3RUeElkeDsKKwlpbnQgCQkJZnJhbWVOdW0gPSAwOworCUJPT0xFQU4JCQliVkxBTlBrdDsKKwlQUVVFVUVfRU5UUlkJcFFFbnRyeTsKKworCisJQVNTRVJUKHBUeEJsayk7CisKKwlBU1NFUlQoKHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcj09IDIpKTsKKworCisJRmlyc3RUeCA9IExhc3RUeElkeCA9IDA7ICAvLyBJcyBpdCBvayBpbml0IHRoZXkgYXMgMD8KKwl3aGlsZShwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKQorCXsKKwkJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOworCQlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisKKwkJaWYgKFJUTVBfRmlsbFR4QmxrSW5mbyhwQWQsIHBUeEJsaykgIT0gVFJVRSkKKwkJeworCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWJWTEFOUGt0ID0gKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBUeEJsay0+cFBhY2tldCkgPyBUUlVFIDogRkFMU0UpOworCisJCS8vIHNraXAgODAyLjMgaGVhZGVyCisJCXBUeEJsay0+cFNyY0J1ZkRhdGEgPSBwVHhCbGstPnBTcmNCdWZIZWFkZXIgKyBMRU5HVEhfODAyXzM7CisJCXBUeEJsay0+U3JjQnVmTGVuICAtPSBMRU5HVEhfODAyXzM7CisKKwkJLy8gc2tpcCB2bGFuIHRhZworCQlpZiAoYlZMQU5Qa3QpCisJCXsKKwkJCXBUeEJsay0+cFNyY0J1ZkRhdGEJKz0gTEVOR1RIXzgwMl8xUTsKKwkJCXBUeEJsay0+U3JjQnVmTGVuCS09IExFTkdUSF84MDJfMVE7CisJCX0KKworCQlpZiAoZnJhbWVOdW0gPT0gMCkKKwkJewkvLyBGb3IgZmlyc3QgZnJhbWUsIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSA4MDIuMTEgaGVhZGVyICsgcGFkZGluZyhvcHRpb25hbCkgKyBSQS1BR0ctTEVOICsgU05BUCBIZWFkZXIKKworCQkJcEhlYWRlckJ1ZlB0ciA9IFNUQV9CdWlsZF9BUmFsaW5rX0ZyYW1lX0hlYWRlcihwQWQsIHBUeEJsayk7CisKKwkJCS8vIEl0J3Mgb2sgd3JpdGUgdGhlIFR4V0kgaGVyZSwgYmVjYXVzZSB0aGUgVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50CisJCQkvLwl3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgZmluYWwgZnJhbWUgd2FzIGhhbmRsZWQuCisJCQlSVE1QV3JpdGVUeFdJX0RhdGEocEFkLCAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pLCBwVHhCbGspOworCisKKwkJCS8vCisJCQkvLyBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzCisJCQkvLworCQkJRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQocFR4QmxrLT5wU3JjQnVmRGF0YS0yLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisKKwkJCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCQkJcEhlYWRlckJ1ZlB0ciArPSA2OworCQkJCS8vIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKQorCQkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cFNyY0J1ZkRhdGEtMiwgMik7CisJCQkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSBMRU5HVEhfODAyXzFfSDsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsJLy8gRm9yIHNlY29uZCBhZ2dyZWdhdGVkIGZyYW1lLCB3ZSBuZWVkIGNyZWF0ZSB0aGUgODAyLjMgaGVhZGVyIHRvIGhlYWRlckJ1ZiwgYmVjYXVzZSBQQ0kgd2lsbCBjb3B5IGl0IHRvIFNEUHRyMC4KKworCQkJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZlswXTsKKwkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiA9IDA7CisKKwkJCS8vIEEtUmFsaW5rIHN1Yi1zZXF1ZW50IGZyYW1lIGhlYWRlciBpcyB0aGUgc2FtZSBhcyA4MDIuMyBoZWFkZXIuCisJCQkvLyAgIERBKDYpK1NBKDYpK0ZyYW1lVHlwZSgyKQorCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wU3JjQnVmSGVhZGVyLCAxMik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDEyOworCQkJLy8gZ2V0IDIgb2N0ZXRzIChUeXBlb2ZMZW4pCisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZEYXRhLTIsIDIpOworCQkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuID0gTEVOR1RIX0FSQUxJTktfU1VCRlJBTUVIRUFEOworCQl9CisKKwkJdG90YWxNUERVU2l6ZSArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKworCQkvL0ZyZWVOdW1iZXIgPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisJCWlmIChmcmFtZU51bSA9PTApCisJCQlGaXJzdFR4ID0gSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwgJkZyZWVOdW1iZXIpOworCQllbHNlCisJCQlMYXN0VHhJZHggPSBIQUxfV3JpdGVNdWx0aVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYW1lTnVtLCAmRnJlZU51bWJlcik7CisKKwkJZnJhbWVOdW0rKzsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4QWdncmVnYXRpb25Db3VudCsrOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLktpY2tUeENvdW50Kys7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKKworCX0KKworCUhBTF9GaW5hbFdyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgdG90YWxNUERVU2l6ZSwgRmlyc3RUeCk7CisJSEFMX0xhc3RUeElkeChwQWQsIHBUeEJsay0+UXVlSWR4LCBMYXN0VHhJZHgpOworCisJLy8KKwkvLyBLaWNrIG91dCBUeAorCS8vCisJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworCit9CisKKworVk9JRCBTVEFfRnJhZ21lbnRfRnJhbWVfVHgoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVFhfQkxLCQkqcFR4QmxrKQoreworCUhFQURFUl84MDJfMTEJKnBIZWFkZXJfODAyXzExOworCVBVQ0hBUgkJCXBIZWFkZXJCdWZQdHI7CisJVVNIT1JUCQkJRnJlZU51bWJlcjsKKwlVQ0hBUiAJCQlmcmFnTnVtID0gMDsKKwlQQUNLRVRfSU5GTwkJUGFja2V0SW5mbzsKKwlVU0hPUlQJCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAwOworCVVJTlQzMgkJCUZyZWVNcGR1U2l6ZSwgU3JjUmVtYWluaW5nQnl0ZXM7CisJVVNIT1JUCQkJQWNrRHVyYXRpb247CisJVUlOVCAJCQlOZXh0TXBkdVNpemU7CisJQk9PTEVBTgkJCWJWTEFOUGt0OworCVBRVUVVRV9FTlRSWQlwUUVudHJ5OworCisKKwlBU1NFUlQocFR4QmxrKTsKKworCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKKwlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisJaWYgKFJUTVBfRmlsbFR4QmxrSW5mbyhwQWQsIHBUeEJsaykgIT0gVFJVRSkKKwl7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJQVNTRVJUKFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkFsbG93RnJhZykpOworCWJWTEFOUGt0ID0gKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBUeEJsay0+cFBhY2tldCkgPyBUUlVFIDogRkFMU0UpOworCisJU1RBRmluZENpcGhlckFsZ29yaXRobShwQWQsIHBUeEJsayk7CisJU1RBQnVpbGRDb21tb244MDJfMTFIZWFkZXIocEFkLCBwVHhCbGspOworCisJaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9US0lQKQorCXsKKwkJcFR4QmxrLT5wUGFja2V0ID0gZHVwbGljYXRlX3BrdF93aXRoX1RLSVBfTUlDKHBBZCwgcFR4QmxrLT5wUGFja2V0KTsKKwkJaWYgKHBUeEJsay0+cFBhY2tldCA9PSBOVUxMKQorCQkJcmV0dXJuOworCQlSVE1QX1F1ZXJ5UGFja2V0SW5mbyhwVHhCbGstPnBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFR4QmxrLT5wU3JjQnVmSGVhZGVyLCAmcFR4QmxrLT5TcmNCdWZMZW4pOworCX0KKworCS8vIHNraXAgODAyLjMgaGVhZGVyCisJcFR4QmxrLT5wU3JjQnVmRGF0YSA9IHBUeEJsay0+cFNyY0J1ZkhlYWRlciArIExFTkdUSF84MDJfMzsKKwlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisKKwkvLyBza2lwIHZsYW4gdGFnCisJaWYgKGJWTEFOUGt0KQorCXsKKwkJcFR4QmxrLT5wU3JjQnVmRGF0YQkrPSBMRU5HVEhfODAyXzFROworCQlwVHhCbGstPlNyY0J1ZkxlbgktPSBMRU5HVEhfODAyXzFROworCX0KKworCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOworCXBIZWFkZXJfODAyXzExID0gKEhFQURFUl84MDJfMTEgKilwSGVhZGVyQnVmUHRyOworCisKKwkvLyBza2lwIGNvbW1vbiBoZWFkZXIKKwlwSGVhZGVyQnVmUHRyICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKworCWlmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKQorCXsKKwkJLy8KKwkJLy8gYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMKKwkJLy8KKwkJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKworCQkqKHBIZWFkZXJCdWZQdHIrMSkgPSAwOworCQlwSGVhZGVyQnVmUHRyICs9MjsKKwkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDI7CisJfQorCisJLy8KKwkvLyBwYWRkaW5nIGF0IGZyb250IG9mIExMQyBoZWFkZXIKKwkvLyBMTEMgaGVhZGVyIHNob3VsZCBsb2NhdGUgYXQgNC1vY3RldHMgYWxpZ21lbnQKKwkvLworCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKXBIZWFkZXJCdWZQdHI7CisJcEhlYWRlckJ1ZlB0ciA9IChQQ0hBUikgUk9VTkRfVVAocEhlYWRlckJ1ZlB0ciwgNCk7CisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpKHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhkclBhZExlbik7CisKKworCisJLy8KKwkvLyBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzCisJLy8KKwkvLworICAgCS8vIGlmIG9yaWdpbmFsIEV0aGVybmV0IGZyYW1lIGNvbnRhaW5zIG5vIExMQy9TTkFQLAorCS8vIHRoZW4gYW4gZXh0cmEgTExDL1NOQVAgZW5jYXAgaXMgcmVxdWlyZWQKKwkvLworCUVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfU1RBUlQocFR4QmxrLT5wU3JjQnVmSGVhZGVyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisJaWYgKHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKQorCXsKKwkJVUNIQVIgdmxhbl9zaXplOworCisJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwLCA2KTsKKwkJcEhlYWRlckJ1ZlB0ciArPSA2OworCQkvLyBza2lwIHZsYW4gdGFnCisJCXZsYW5fc2l6ZSA9ICAoYlZMQU5Qa3QpID8gTEVOR1RIXzgwMl8xUSA6IDA7CisJCS8vIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKQorCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIrMTIrdmxhbl9zaXplLCAyKTsKKwkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJfQorCisKKwkvLyBJZiBUS0lQIGlzIHVzZWQgYW5kIGZyYWdtZW50YXRpb24gaXMgcmVxdWlyZWQuIERyaXZlciBoYXMgdG8KKwkvLwlhcHBlbmQgVEtJUCBNSUMgYXQgdGFpbCBvZiB0aGUgc2NhdHRlciBidWZmZXIKKwkvLwlNQUMgQVNJQyB3aWxsIG9ubHkgcGVyZm9ybSBJVi9FSVYvSUNWIGluc2VydGlvbiBidXQgbm8gVEtJUCBNSUMKKwlpZiAocFR4QmxrLT5DaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApCisJeworCisJCS8vIE5PVEU6IERPTidUIHJlZmVyIHRoZSBza2ItPmxlbiBkaXJlY3RseSBhZnRlciBmb2xsb3dpbmcgY29weS4gQmVjYXN1ZSB0aGUgbGVuZ3RoIGlzIG5vdCBhZGp1c3QKKwkJLy8JCQl0byBjb3JyZWN0IGxlbmdodCwgcmVmZXIgdG8gcFR4QmxrLT5TcmNCdWZMZW4gZm9yIHRoZSBwYWNrZXQgbGVuZ3RoIGluIGZvbGxvd2luZyBwcm9ncmVzcy4KKwkJTmRpc01vdmVNZW1vcnkocFR4QmxrLT5wU3JjQnVmRGF0YSArIHBUeEJsay0+U3JjQnVmTGVuLCAmcEFkLT5Qcml2YXRlSW5mby5UeC5NSUNbMF0sIDgpOworCQkvL3NrYl9wdXQoKFJUUEtUX1RPX09TUEtUKHBUeEJsay0+cFBhY2tldCkpLT50YWlsLCA4KTsKKwkJcFR4QmxrLT5TcmNCdWZMZW4gKz0gODsKKwkJcFR4QmxrLT5Ub3RhbEZyYW1lTGVuICs9IDg7CisJCXBUeEJsay0+Q2lwaGVyQWxnID0gQ0lQSEVSX1RLSVBfTk9fTUlDOworCX0KKworCS8vCisJLy8gY2FsY3VhdGUgdGhlIG92ZXJoZWFkIGJ5dGVzIHRoYXQgZW5jcnlwdGlvbiBhbGdvcml0aG0gbWF5IGFkZC4gVGhpcworCS8vIGFmZmVjdHMgdGhlIGNhbGN1bGF0ZSBvZiAiZHVyYXRpb24iIGZpZWxkCisJLy8KKwlpZiAoKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9XRVA2NCkgfHwgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9XRVAxMjgpKQorCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSA4OyAvL1dFUDogSVZbNF0gKyBJQ1ZbNF07CisJZWxzZSBpZiAocFR4QmxrLT5DaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVBfTk9fTUlDKQorCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAxMjsvL1RLSVA6IElWWzRdICsgRUlWWzRdICsgSUNWWzRdLCBNSUMgd2lsbCBiZSBhZGRlZCB0byBUb3RhbFBhY2tldExlbmd0aAorCWVsc2UgaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9US0lQKQorCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAyMDsvL1RLSVA6IElWWzRdICsgRUlWWzRdICsgSUNWWzRdICsgTUlDWzhdCisJZWxzZSBpZiAocFR4QmxrLT5DaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykKKwkJRW5jcnlwdGlvbk92ZXJoZWFkID0gMTY7CS8vIEFFUzogSVZbNF0gKyBFSVZbNF0gKyBNSUNbOF0KKwllbHNlCisJCUVuY3J5cHRpb25PdmVyaGVhZCA9IDA7CisKKwkvLyBkZWNpZGUgaG93IG11Y2ggdGltZSBhbiBBQ0svQ1RTIGZyYW1lIHdpbGwgY29uc3VtZSBpbiB0aGUgYWlyCisJQWNrRHVyYXRpb24gPSBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwgcEFkLT5Db21tb25DZmcuRXhwZWN0ZWRBQ0tSYXRlW3BUeEJsay0+VHhSYXRlXSwgMTQpOworCisJLy8gSW5pdCB0aGUgdG90YWwgcGF5bG9hZCBsZW5ndGggb2YgdGhpcyBmcmFtZS4KKwlTcmNSZW1haW5pbmdCeXRlcyA9IHBUeEJsay0+U3JjQnVmTGVuOworCisJcFR4QmxrLT5Ub3RhbEZyYWdOdW0gPSAweGZmOworCisJZG8geworCisJCUZyZWVNcGR1U2l6ZSA9IHBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkIC0gTEVOR1RIX0NSQzsKKworCQlGcmVlTXBkdVNpemUgLT0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOworCisJCWlmIChTcmNSZW1haW5pbmdCeXRlcyA8PSBGcmVlTXBkdVNpemUpCisJCXsJLy8gdGhpcyBpcyB0aGUgbGFzdCBvciBvbmx5IGZyYWdtZW50CisKKwkJCXBUeEJsay0+U3JjQnVmTGVuID0gU3JjUmVtYWluaW5nQnl0ZXM7CisKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Nb3JlRnJhZyA9IDA7CisJCQlwSGVhZGVyXzgwMl8xMS0+RHVyYXRpb24gPSBwQWQtPkNvbW1vbkNmZy5Ec2lmcyArIEFja0R1cmF0aW9uOworCisJCQkvLyBJbmRpY2F0ZSB0aGUgbG93ZXIgbGF5ZXIgdGhhdCB0aGlzJ3MgdGhlIGxhc3QgZnJhZ21lbnQuCisJCQlwVHhCbGstPlRvdGFsRnJhZ051bSA9IGZyYWdOdW07CisJCX0KKwkJZWxzZQorCQl7CS8vIG1vcmUgZnJhZ21lbnQgaXMgcmVxdWlyZWQKKworCQkJcFR4QmxrLT5TcmNCdWZMZW4gPSBGcmVlTXBkdVNpemU7CisKKwkJCU5leHRNcGR1U2l6ZSA9IG1pbigoKFVJTlQpU3JjUmVtYWluaW5nQnl0ZXMgLSBwVHhCbGstPlNyY0J1ZkxlbiksICgoVUlOVClwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCkpOworCQkJcEhlYWRlcl84MDJfMTEtPkZDLk1vcmVGcmFnID0gMTsKKwkJCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9ICgzICogcEFkLT5Db21tb25DZmcuRHNpZnMpICsgKDIgKiBBY2tEdXJhdGlvbikgKyBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwgcFR4QmxrLT5UeFJhdGUsIE5leHRNcGR1U2l6ZSArIEVuY3J5cHRpb25PdmVyaGVhZCk7CisJCX0KKworCQlpZiAoZnJhZ051bSA9PSAwKQorCQkJcFR4QmxrLT5GcmFtZUdhcCA9IElGU19IVFRYT1A7CisJCWVsc2UKKwkJCXBUeEJsay0+RnJhbWVHYXAgPSBJRlNfU0lGUzsKKworCQlSVE1QV3JpdGVUeFdJX0RhdGEocEFkLCAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pLCBwVHhCbGspOworCisJCUhBTF9Xcml0ZUZyYWdUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFnTnVtLCAmRnJlZU51bWJlcik7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RG9uZUNvdW50Kys7CisKKwkJLy8gVXBkYXRlIHRoZSBmcmFtZSBudW1iZXIsIHJlbWFpbmluZyBzaXplIG9mIHRoZSBORElTIHBhY2tldCBwYXlsb2FkLgorCisJCS8vIHNwYWNlIGZvciA4MDIuMTEgaGVhZGVyLgorCQlpZiAoZnJhZ051bSA9PSAwICYmIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKQorCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuIC09IExFTkdUSF84MDJfMV9IOworCisJCWZyYWdOdW0rKzsKKwkJU3JjUmVtYWluaW5nQnl0ZXMgLT0gcFR4QmxrLT5TcmNCdWZMZW47CisJCXBUeEJsay0+cFNyY0J1ZkRhdGEgKz0gcFR4QmxrLT5TcmNCdWZMZW47CisKKwkJcEhlYWRlcl84MDJfMTEtPkZyYWcrKzsJIC8vIGluY3JlYXNlIEZyYWcgIworCisJfXdoaWxlKFNyY1JlbWFpbmluZ0J5dGVzID4gMCk7CisKKwkvLworCS8vIEtpY2sgb3V0IFR4CisJLy8KKwlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7Cit9CisKKworI2RlZmluZSBSRUxFQVNFX0ZSQU1FU19PRl9UWEJMSyhfcEFkLCBfcFR4QmxrLCBfcFFFbnRyeSwgX1N0YXR1cykgCQkJCQkJCQkJCVwKKwkJd2hpbGUoX3BUeEJsay0+VHhQYWNrZXRMaXN0LkhlYWQpCQkJCQkJCQkJCQkJCQlcCisJCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJX3BRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJl9wVHhCbGstPlR4UGFja2V0TGlzdCk7CQkJCQkJCQkJXAorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChfcEFkLCBRVUVVRV9FTlRSWV9UT19QQUNLRVQoX3BRRW50cnkpLCBfU3RhdHVzKTsJXAorCQl9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAorCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSBlbmNyeXB0aW9uIGJlZm9yZSByZWFsbHkKKwlzZW50IG91dCB0byBhaXIuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlQTkRJU19QQUNLRVQJUG9pbnRlciB0byBvdXRnb2luZyBOZGlzIGZyYW1lCisJCU51bWJlck9mRnJhZwlOdW1iZXIgb2YgZnJhZ21lbnQgcmVxdWlyZWQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgU1RBSGFyZFRyYW5zbWl0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFRYX0JMSyAJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJUXVlSWR4KQoreworCU5ESVNfUEFDS0VUCQkqcFBhY2tldDsKKwlQUVVFVUVfRU5UUlkJcFFFbnRyeTsKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFNURVAgMC4gRE8gU0FOSVRZIENIRUNLIEFORCBTT01FIEVBUkxZIFBSRVBBUkFUSU9OLgorCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vCisJQVNTRVJUKHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcik7CisJaWYgKHBUeEJsay0+VHhQYWNrZXRMaXN0LkhlYWQgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoInBUeEJsay0+VG90YWxGcmFtZU51bSA9PSAlbGQhXG4iLCBwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIpKTsKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKTsKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFNURVAgMS4gV0FLRSBVUCBQSFkKKwkvLwkJb3V0Z29pbmcgZnJhbWUgYWx3YXlzIHdha2V1cCBQSFkgdG8gcHJldmVudCBmcmFtZSBsb3N0IGFuZAorCS8vCQl0dXJuIG9mZiBQU00gYml0IHRvIGltcHJvdmUgcGVyZm9ybWFuY2UKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBub3QgdG8gY2hhbmdlIFBTTSBiaXQsIGp1c3Qgc2VuZCB0aGlzIGZyYW1lIG91dD8KKwlpZiAoKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkgJiYgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwl7CisJICAgIERCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJBc2ljRm9yY2VXYWtldXAgQXQgSGFyZFR4XG4iKSk7CisJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworCX0KKworCS8vIEl0IHNob3VsZCBub3QgY2hhbmdlIFBTTSBiaXQsIHdoZW4gQVBTRCB0dXJuIG9uLgorCWlmICgoIShwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUpICYmIChwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlID09IEZBTFNFKSkKKwkJfHwgKFJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwVHhCbGstPnBQYWNrZXQpKQorCQl8fCAoUlRNUF9HRVRfUEFDS0VUX1dBSShwVHhCbGstPnBQYWNrZXQpKSkKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSAmJgorICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQKSkKKwkJCU1sbWVTZXRQc21CaXQocEFkLCBQV1JfQUNUSVZFKTsKKwl9CisKKwlzd2l0Y2ggKHBUeEJsay0+VHhGcmFtZVR5cGUpCisJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIFRYX0FNUERVX0ZSQU1FOgorCQkJCVNUQV9BTVBEVV9GcmFtZV9UeChwQWQsIHBUeEJsayk7CisJCQlicmVhazsKKwkJY2FzZSBUWF9BTVNEVV9GUkFNRToKKwkJCQlTVEFfQU1TRFVfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWNhc2UgVFhfTEVHQUNZX0ZSQU1FOgorCQkJCVNUQV9MZWdhY3lfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisJCWNhc2UgVFhfTUNBU1RfRlJBTUU6CisJCQkJU1RBX0xlZ2FjeV9GcmFtZV9UeChwQWQsIHBUeEJsayk7CisJCQlicmVhazsKKwkJY2FzZSBUWF9SQUxJTktfRlJBTUU6CisJCQkJU1RBX0FSYWxpbmtfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisJCWNhc2UgVFhfRlJBR19GUkFNRToKKwkJCQlTVEFfRnJhZ21lbnRfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl7CisJCQkJLy8gSXQgc2hvdWxkIG5vdCBoYXBwZW5lZCEKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZW5kIGEgcGFjZWt0IHdhcyBub3QgY2xhc3NpZmllZCEhIEl0IHNob3VsZCBub3QgaGFwcGVuIVxuIikpOworCQkJCXdoaWxlKHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcikKKwkJCQl7CisJCQkJCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKKwkJCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwUUVudHJ5KTsKKwkJCQkJaWYgKHBQYWNrZXQpCisJCQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChORElTX1NUQVRVU19TVUNDRVNTKTsKKworfQorCitVTE9ORyAgSGFzaEJ5dGVzUG9seW5vbWlhbChVQ0hBUiAqdmFsdWUsIHVuc2lnbmVkIGludCBsZW4pCit7CisgICB1bnNpZ25lZCBjaGFyICp3b3JkID0gdmFsdWU7CisgICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKyAgIHVuc2lnbmVkIGludCBpOworCisgICBmb3IoaT0wOyBpIDwgbGVuOyBpKyspCisgICB7CisJICBpbnQgbW9kID0gaSAlIDMyOworCSAgcmV0IF49KHVuc2lnbmVkIGludCkgKHdvcmRbaV0pIDw8IG1vZDsKKwkgIHJldCBePSh1bnNpZ25lZCBpbnQpICh3b3JkW2ldKSA+PiAoMzIgLSBtb2QpOworICAgfQorICAgcmV0dXJuIHJldDsKK30KKworVk9JRCBTdGFfQW5ub3VuY2Vfb3JfRm9yd2FyZF84MDJfM19QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlpZiAoVFJVRQorCQkpCisJeworCQlhbm5vdW5jZV84MDJfM19wYWNrZXQocEFkLCBwUGFja2V0KTsKKwl9CisJZWxzZQorCXsKKwkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvc2FuaXR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9zYW5pdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzk4NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvc2FuaXR5LmMKQEAgLTAsMCArMSw0MjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJc2FuaXR5LmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huIENoYW5nICAyMDA0LTA5LTAxICAgICAgYWRkIFdNTSBzdXBwb3J0CisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCitleHRlcm4gVUNIQVIJQ0lTQ09fT1VJW107CisKK2V4dGVybiBVQ0hBUglXUEFfT1VJW107CitleHRlcm4gVUNIQVIJUlNOX09VSVtdOworZXh0ZXJuIFVDSEFSCVdNRV9JTkZPX0VMRU1bXTsKK2V4dGVybiBVQ0hBUglXTUVfUEFSTV9FTEVNW107CitleHRlcm4gVUNIQVIJQ2N4MlFvc0luZm9bXTsKK2V4dGVybiBVQ0hBUglSQUxJTktfT1VJW107CitleHRlcm4gVUNIQVIJQlJPQURDT01fT1VJW107CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWxtZVN0YXJ0UmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqcFNzaWRMZW4pCit7CisgICAgTUxNRV9TVEFSVF9SRVFfU1RSVUNUICpJbmZvOworCisgICAgSW5mbyA9IChNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgKikoTXNnKTsKKworICAgIGlmIChJbmZvLT5Tc2lkTGVuID4gTUFYX0xFTl9PRl9TU0lEKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVN0YXJ0UmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBTU0lEIGxlbmd0aFxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgKnBTc2lkTGVuID0gSW5mby0+U3NpZExlbjsKKyAgICBOZGlzTW92ZU1lbW9yeShTc2lkLCBJbmZvLT5Tc2lkLCAqcFNzaWRMZW4pOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisgICAgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJBc3NvY1JzcFNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpwTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMiwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcFN0YXR1cywKKyAgICBPVVQgVVNIT1JUICpwQWlkLAorICAgIE9VVCBVQ0hBUiBTdXBSYXRlW10sCisgICAgT1VUIFVDSEFSICpwU3VwUmF0ZUxlbiwKKyAgICBPVVQgVUNIQVIgRXh0UmF0ZVtdLAorICAgIE9VVCBVQ0hBUiAqcEV4dFJhdGVMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUJCSpwSHRDYXBhYmlsaXR5LAorICAgIE9VVCBBRERfSFRfSU5GT19JRQkJKnBBZGRIdEluZm8sCS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorICAgIE9VVCBVQ0hBUgkJCSpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBVQ0hBUgkJCSpwQWRkSHRJbmZvTGVuLAorICAgIE9VVCBVQ0hBUgkJCSpwTmV3RXh0Q2hhbm5lbE9mZnNldCwKKyAgICBPVVQgUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisgICAgT1VUIFVDSEFSICpwQ2tpcEZsYWcpCit7CisgICAgQ0hBUiAgICAgICAgICBJZVR5cGUsICpQdHI7CisgICAgUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworICAgIFBFSURfU1RSVUNUICAgcEVpZDsKKyAgICBVTE9ORyAgICAgICAgIExlbmd0aCA9IDA7CisKKwkqcE5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCSpwSHRDYXBhYmlsaXR5TGVuID0gMDsKKwkqcEFkZEh0SW5mb0xlbiA9IDA7CisgICAgQ09QWV9NQUNfQUREUihwQWRkcjIsIHBGcmFtZS0+SGRyLkFkZHIyKTsKKyAgICBQdHIgPSBwRnJhbWUtPk9jdGV0OworICAgIExlbmd0aCArPSBMRU5HVEhfODAyXzExOworCisgICAgTmRpc01vdmVNZW1vcnkocENhcGFiaWxpdHlJbmZvLCAmcEZyYW1lLT5PY3RldFswXSwgMik7CisgICAgTGVuZ3RoICs9IDI7CisgICAgTmRpc01vdmVNZW1vcnkocFN0YXR1cywgICAgICAgICAmcEZyYW1lLT5PY3RldFsyXSwgMik7CisgICAgTGVuZ3RoICs9IDI7CisgICAgKnBDa2lwRmxhZyA9IDA7CisgICAgKnBFeHRSYXRlTGVuID0gMDsKKyAgICBwRWRjYVBhcm0tPmJWYWxpZCA9IEZBTFNFOworCisgICAgaWYgKCpwU3RhdHVzICE9IE1MTUVfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBOZGlzTW92ZU1lbW9yeShwQWlkLCAmcEZyYW1lLT5PY3RldFs0XSwgMik7CisgICAgTGVuZ3RoICs9IDI7CisKKyAgICAvLyBBaWQgYWxyZWFkeSBzd2FwZWQgYnl0ZSBvcmRlciBpbiBSVE1QRnJhbWVFbmRpYW5DaGFuZ2UoKSBmb3IgYmlnIGVuZGlhbiBwbGF0Zm9ybQorICAgICpwQWlkID0gKCpwQWlkKSAmIDB4M2ZmZjsgLy8gQUlEIGlzIGxvdyAxNC1iaXQKKworICAgIC8vIC0tIGdldCBzdXBwb3J0ZWQgcmF0ZXMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgSWVUeXBlID0gcEZyYW1lLT5PY3RldFs2XTsKKyAgICAqcFN1cFJhdGVMZW4gPSBwRnJhbWUtPk9jdGV0WzddOworICAgIGlmICgoSWVUeXBlICE9IElFX1NVUFBfUkFURVMpIHx8ICgqcFN1cFJhdGVMZW4gPiBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQXNzb2NSc3BTYW5pdHkgZmFpbCAtIHdyb25nIFN1cHBvcnRlZFJhdGVzIElFXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBOZGlzTW92ZU1lbW9yeShTdXBSYXRlLCAmcEZyYW1lLT5PY3RldFs4XSwgKnBTdXBSYXRlTGVuKTsKKworICAgIExlbmd0aCA9IExlbmd0aCArIDIgKyAqcFN1cFJhdGVMZW47CisKKyAgICAvLyBtYW55IEFQIGltcGxlbWVudCBwcm9wcmlldGFyeSBJRXMgaW4gbm9uLXN0YW5kYXJkIG9yZGVyLCB3ZSdkIGJldHRlcgorICAgIC8vIHRvbGVyYXRlIG1pcy1vcmRlcmVkIElFcyB0byBnZXQgYmVzdCBjb21wYXRpYmlsaXR5CisgICAgcEVpZCA9IChQRUlEX1NUUlVDVCkgJnBGcmFtZS0+T2N0ZXRbOCArICgqcFN1cFJhdGVMZW4pXTsKKworICAgIC8vIGdldCB2YXJpYWJsZSBmaWVsZHMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgd2hpbGUgKChMZW5ndGggKyAyICsgcEVpZC0+TGVuKSA8PSBNc2dMZW4pCisgICAgeworICAgICAgICBzd2l0Y2ggKHBFaWQtPkVpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBJRV9FWFRfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoRXh0UmF0ZSwgcEVpZC0+T2N0ZXQsIHBFaWQtPkxlbik7CisgICAgICAgICAgICAgICAgICAgICpwRXh0UmF0ZUxlbiA9IHBFaWQtPkxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICBjYXNlIElFX0hUX0NBUDoKKyAgICAgICAgICAgIGNhc2UgSUVfSFRfQ0FQMjoKKwkJCWlmIChwRWlkLT5MZW4gPj0gU0laRV9IVF9DQVBfSUUpICAvL05vdGU6IGFsbG93IGV4dGVuc2lvbi4hIQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KHBIdENhcGFiaWxpdHksIHBFaWQtPk9jdGV0LCBTSVpFX0hUX0NBUF9JRSk7CisKKwkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pKTsKKwkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pKTsKKworCQkJCSpwSHRDYXBhYmlsaXR5TGVuID0gU0laRV9IVF9DQVBfSUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJQZWVyQXNzb2NSc3BTYW5pdHkgLSB3cm9uZyBJRV9IVF9DQVAuIFxuIikpOworCQkJfQorCisJCWJyZWFrOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICAgICAgY2FzZSBJRV9BRERfSFQ6CisgICAgICAgICAgICBjYXNlIElFX0FERF9IVDI6CisJCQlpZiAocEVpZC0+TGVuID49IHNpemVvZihBRERfSFRfSU5GT19JRSkpCisJCQl7CisJCQkJLy8gVGhpcyBJRSBhbGxvd3MgZXh0ZW5zaW9uLCBidXQgd2UgY2FuIGlnbm9yZSBleHRyYSBieXRlcyBiZXlvbmQgb3VyIGtub3dsZWRnZSAsIHNvIG9ubHkKKwkJCQkvLyBjb3B5IGZpcnN0IHNpemVvZihBRERfSFRfSU5GT19JRSkKKwkJCQlOZGlzTW92ZU1lbW9yeShwQWRkSHRJbmZvLCBwRWlkLT5PY3RldCwgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSk7CisKKwkJCQkqKFVTSE9SVCAqKSgmcEFkZEh0SW5mby0+QWRkSHRJbmZvMikgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEFkZEh0SW5mby0+QWRkSHRJbmZvMikpOworCQkJCSooVVNIT1JUICopKCZwQWRkSHRJbmZvLT5BZGRIdEluZm8zKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwQWRkSHRJbmZvLT5BZGRIdEluZm8zKSk7CisKKwkJCQkqcEFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJQZWVyQXNzb2NSc3BTYW5pdHkgLSB3cm9uZyBJRV9BRERfSFQuIFxuIikpOworCQkJfQorCisJCWJyZWFrOworICAgICAgICAgICAgY2FzZSBJRV9TRUNPTkRBUllfQ0hfT0ZGU0VUOgorCQkJaWYgKHBFaWQtPkxlbiA9PSAxKQorCQkJeworCQkJCSpwTmV3RXh0Q2hhbm5lbE9mZnNldCA9IHBFaWQtPk9jdGV0WzBdOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckFzc29jUnNwU2FuaXR5IC0gd3JvbmcgSUVfU0VDT05EQVJZX0NIX09GRlNFVC4gXG4iKSk7CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWJyZWFrOworICAgICAgICAgICAgY2FzZSBJRV9BSVJPTkVUX0NLSVA6CisgICAgICAgICAgICAgICAgLy8gMC4gQ2hlY2sgQWlyb25ldCBJRSBsZW5ndGgsIGl0IG11c3QgYmUgbGFyZ2VyIG9yIGVxdWFsIHRvIDI4CisgICAgICAgICAgICAgICAgLy8gICAgQ2lzY28ncyBBUCBWeFdvcmsgdmVyc2lvbih3aWxsIG5vdCBiZSBzdXBwb3J0ZWQpIHVzZWQgdGhpcyBJRSBsZW5ndGggYXMgMjgKKyAgICAgICAgICAgICAgICAvLyAgICBDaXNjbydzIEFQIElPUyB2ZXJzaW9uIHVzZWQgdGhpcyBJRSBsZW5ndGggYXMgMzAKKyAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuIDwgKENLSVBfTkVHT1RJQVRJT05fTEVOR1RIIC0gMikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyAxLiBDb3B5IENLSVAgZmxhZyBieXRlIHRvIGJ1ZmZlciBmb3IgcHJvY2VzcworICAgICAgICAgICAgICAgICpwQ2tpcEZsYWcgPSAqKHBFaWQtPk9jdGV0ICsgOCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfQUlST05FVF9JUEFERFJFU1M6CisgICAgICAgICAgICAgICAgaWYgKHBFaWQtPkxlbiAhPSAweDBBKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gR2V0IENpc2NvIEFpcm9uZXQgSVAgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBDSVNDT19PVUksIDMpID09IDEpCisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkFpcm9uZXRJUEFkZHJlc3MsIHBFaWQtPk9jdGV0ICsgNCwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIENDWDIsIFdNTSB1c2UgdGhlIHNhbWUgSUUgdmFsdWUKKyAgICAgICAgICAgIC8vIGNhc2UgSUVfQ0NYX1YyOgorICAgICAgICAgICAgY2FzZSBJRV9WRU5ET1JfU1BFQ0lGSUM6CisgICAgICAgICAgICAgICAgLy8gaGFuZGxlIFdNRSBQQVJBTVRFUiBFTEVNRU5UCisgICAgICAgICAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV01FX1BBUk1fRUxFTSwgNikgJiYgKHBFaWQtPkxlbiA9PSAyNCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBQVUNIQVIgcHRyOworICAgICAgICAgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgICAgICAgICAvLyBwYXJzaW5nIEVEQ0EgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJWYWxpZCAgICAgICAgICA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlFBY2sgICAgICAgICAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHgxMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iUXVldWVSZXF1ZXN0ICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDIwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJUeG9wUmVxdWVzdCAgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4NDA7CisgICAgICAgICAgICAgICAgICAgIC8vcEVkY2FQYXJtLT5iTW9yZURhdGFBY2sgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDgwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkVkY2FVcGRhdGVDb3VudCA9IHBFaWQtPk9jdGV0WzZdICYgMHgwZjsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQVBTRENhcGFibGUgICAgPSAocEVpZC0+T2N0ZXRbNl0gJiAweDgwKSA/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcEVpZC0+T2N0ZXRbOF07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVIgYWNpID0gKCpwdHIgJiAweDYwKSA+PiA1OyAvLyBiNX42IGlzIEFDIElOREVYCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bYWNpXSAgPSAoKCgqcHRyKSAmIDB4MTApID09IDB4MTApOyAgIC8vIGI1IGlzIEFDTQorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5BaWZzblthY2ldID0gKCpwdHIpICYgMHgwZjsgICAgICAgICAgICAgICAvLyBiMH4zIGlzIEFJRlNOCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW2FjaV0gPSAqKHB0cisxKSAmIDB4MGY7ICAgICAgICAgICAgIC8vIGIwfjQgaXMgQ3dtaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbYWNpXSA9ICoocHRyKzEpID4+IDQ7ICAgICAgICAgICAgICAgLy8gYjV+OCBpcyBDd21heAorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5UeG9wW2FjaV0gID0gKihwdHIrMikgKyAyNTYgKiAoKihwdHIrMykpOyAvLyBpbiB1bml0IG9mIDMyLXVzCisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgKz0gNDsgLy8gcG9pbnQgdG8gbmV4dCBBQworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaGFuZGxlIENDWCBJRQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDAuIENoZWNrIHRoZSBzaXplIGFuZCBDQ1ggYWRtaW4gY29udHJvbAorICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5FbmFibGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuICE9IDUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIENDWDIgaWYgbWF0Y2hlZAorICAgICAgICAgICAgICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBDY3gySWVJbmZvLCA1KSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuQ0NYRW5hYmxlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBc3NvY1JzcFNhbml0eSAtIGlnbm9yZSB1bnJlY29nbml6ZWQgRUlEID0gJWRcbiIsIHBFaWQtPkVpZCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTGVuZ3RoID0gTGVuZ3RoICsgMiArIHBFaWQtPkxlbjsKKyAgICAgICAgcEVpZCA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKilwRWlkICsgMiArIHBFaWQtPkxlbik7CisgICAgfQorCisgICAgLy8gRm9yY2UgQ0NYMiBlbmFibGUgdG8gVFJVRSBmb3IgdGhvc2UgQVAgZGlkbid0IHJlcGxheSBDQ1ggdjIgSUUsIHdlIHN0aWxsIGZvcmNlIGl0IHRvIGJlIG9uCisgICAgaWYgKHBBZC0+U3RhQ2ZnLkNDWENvbnRyb2wuZmllbGQuRW5hYmxlID09IDEpCisgICAgICAgIHBBZC0+U3RhQ2ZnLkNDWEVuYWJsZSA9IFRSVUU7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gUGVlclByb2JlUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqcFNzaWRMZW4pCit7CisgICAgVUNIQVIgICAgICAgICBJZHg7CisgICAgVUNIQVIJICAgICAgUmF0ZUxlbjsKKyAgICBDSEFSICAgICAgICAgIEllVHlwZTsKKyAgICBQRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKU1zZzsKKworICAgIENPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7CisKKyAgICBpZiAoKHBGcmFtZS0+T2N0ZXRbMF0gIT0gSUVfU1NJRCkgfHwgKHBGcmFtZS0+T2N0ZXRbMV0gPiBNQVhfTEVOX09GX1NTSUQpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlclByb2JlUmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBTU0lEIElFKFR5cGU9JWQsTGVuPSVkKVxuIixwRnJhbWUtPk9jdGV0WzBdLHBGcmFtZS0+T2N0ZXRbMV0pKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgICpwU3NpZExlbiA9IHBGcmFtZS0+T2N0ZXRbMV07CisgICAgTmRpc01vdmVNZW1vcnkoU3NpZCwgJnBGcmFtZS0+T2N0ZXRbMl0sICpwU3NpZExlbik7CisKKyAgICBJZHggPSAqcFNzaWRMZW4gKyAyOworCisgICAgLy8gLS0gZ2V0IHN1cHBvcnRlZCByYXRlcyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBJZVR5cGUgPSBwRnJhbWUtPk9jdGV0W0lkeF07CisgICAgUmF0ZUxlbiA9IHBGcmFtZS0+T2N0ZXRbSWR4ICsgMV07CisgICAgaWYgKEllVHlwZSAhPSBJRV9TVVBQX1JBVEVTKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlclByb2JlUmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBTdXBwb3J0UmF0ZXMgSUUoVHlwZT0lZCxMZW49JWQpXG4iLHBGcmFtZS0+T2N0ZXRbSWR4XSxwRnJhbWUtPk9jdGV0W0lkeCsxXSkpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFHKSAmJiAoUmF0ZUxlbiA8IDgpKQorICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBHZXRUaW1CaXQoCisgICAgSU4gQ0hBUiAqUHRyLAorICAgIElOIFVTSE9SVCBBaWQsCisgICAgT1VUIFVDSEFSICpUaW1MZW4sCisgICAgT1VUIFVDSEFSICpCY2FzdEZsYWcsCisgICAgT1VUIFVDSEFSICpEdGltQ291bnQsCisgICAgT1VUIFVDSEFSICpEdGltUGVyaW9kLAorICAgIE9VVCBVQ0hBUiAqTWVzc2FnZVRvTWUpCit7CisgICAgVUNIQVIgICAgICAgICAgQml0Q250bCwgTjEsIE4yLCBNeUJ5dGUsIE15Qml0OworICAgIENIQVIgICAgICAgICAgKklkeFB0cjsKKworICAgIElkeFB0ciA9IFB0cjsKKworICAgIElkeFB0ciArKzsKKyAgICAqVGltTGVuID0gKklkeFB0cjsKKworICAgIC8vIGdldCBEVElNIENvdW50IGZyb20gVElNIGVsZW1lbnQKKyAgICBJZHhQdHIgKys7CisgICAgKkR0aW1Db3VudCA9ICpJZHhQdHI7CisKKyAgICAvLyBnZXQgRFRJTSBQZXJpb2QgZnJvbSBUSU0gZWxlbWVudAorICAgIElkeFB0cisrOworICAgICpEdGltUGVyaW9kID0gKklkeFB0cjsKKworICAgIC8vIGdldCBCaXRtYXAgQ29udHJvbCBmcm9tIFRJTSBlbGVtZW50CisgICAgSWR4UHRyKys7CisgICAgQml0Q250bCA9ICpJZHhQdHI7CisKKyAgICBpZiAoKCpEdGltQ291bnQgPT0gMCkgJiYgKEJpdENudGwgJiAweDAxKSkKKyAgICAgICAgKkJjYXN0RmxhZyA9IFRSVUU7CisgICAgZWxzZQorICAgICAgICAqQmNhc3RGbGFnID0gRkFMU0U7CisKKyAgICAvLyBQYXJzZSBQYXJ0aWFsIFZpcnR1YWwgQml0bWFwIGZyb20gVElNIGVsZW1lbnQKKyAgICBOMSA9IEJpdENudGwgJiAweGZlOyAgICAvLyBOMSBpcyB0aGUgZmlyc3QgYml0bWFwIGJ5dGUjCisgICAgTjIgPSAqVGltTGVuIC0gNCArIE4xOyAgLy8gTjIgaXMgdGhlIGxhc3QgYml0bWFwIGJ5dGUjCisKKyAgICBpZiAoKEFpZCA8IChOMSA8PCAzKSkgfHwgKEFpZCA+PSAoKE4yICsgMSkgPDwgMykpKQorICAgICAgICAqTWVzc2FnZVRvTWUgPSBGQUxTRTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBNeUJ5dGUgPSAoQWlkID4+IDMpIC0gTjE7ICAgICAgICAgICAgICAgICAgICAgICAvLyBteSBieXRlIHBvc2l0aW9uIGluIHRoZSBiaXRtYXAgYnl0ZS1zdHJlYW0KKyAgICAgICAgTXlCaXQgPSBBaWQgJSAxNiAtICgoTXlCeXRlICYgMHgwMSk/IDg6MCk7CisKKyAgICAgICAgSWR4UHRyICs9IChNeUJ5dGUgKyAxKTsKKworICAgICAgICAvL2lmICgqSWR4UHRyKQorICAgICAgICAvLyAgICBEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlRJTSBiaXRtYXAgPSAweCUwMnhcbiIsICpJZHhQdHIpKTsKKworICAgICAgICBpZiAoKklkeFB0ciAmICgweDAxIDw8IE15Qml0KSkKKyAgICAgICAgICAgICpNZXNzYWdlVG9NZSA9IFRSVUU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpNZXNzYWdlVG9NZSA9IEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9zeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1YjNiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3N5bmMuYwpAQCAtMCwwICsxLDE3NTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJc3luYy5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obiBDaGFuZwkyMDA0LTA5LTAxICAgICAgbW9kaWZpZWQgZm9yIHJ0MjU2MS8yNjYxCisJSmFuIExlZQkJMjAwNi0wOC0wMSAgICAgIG1vZGlmaWVkIGZvciBydDI4NjAgZm9yIDgwMi4xMW4KKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKyNkZWZpbmUgQURIT0NfRU5UUllfQkVBQ09OX0xPU1RfVElNRQkoMipPU19IWikJLy8gMiBzZWMKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGUgc3luYyBzdGF0ZSBtYWNoaW5lLAorCVBhcmFtZXRlcnM6CisJCVNtIC0gcG9pbnRlciB0byB0aGUgc3RhdGUgbWFjaGluZQorCU5vdGU6CisJCXRoZSBzdGF0ZSBtYWNoaW5lIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZworCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBTeW5jU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBTVEFURV9NQUNISU5FICpTbSwKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisJU3RhdGVNYWNoaW5lSW5pdChTbSwgVHJhbnMsIE1BWF9TWU5DX1NUQVRFLCBNQVhfU1lOQ19NU0csIChTVEFURV9NQUNISU5FX0ZVTkMpRHJvcCwgU1lOQ19JRExFLCBTWU5DX01BQ0hJTkVfQkFTRSk7CisKKwkvLyBjb2x1bW4gMQorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU1lOQ19JRExFLCBNVDJfTUxNRV9TQ0FOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lU2NhblJlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9NTE1FX0pPSU5fUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVKb2luUmVxQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNZTkNfSURMRSwgTVQyX01MTUVfU1RBUlRfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVTdGFydFJlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9QRUVSX0JFQUNPTiwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQmVhY29uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNZTkNfSURMRSwgTVQyX1BFRVJfUFJPQkVfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJQcm9iZVJlcUFjdGlvbik7CisKKwkvL2NvbHVtbiAyCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfTUxNRV9TQ0FOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuU2Nhbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfTUxNRV9KT0lOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuSm9pbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfTUxNRV9TVEFSVF9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblN0YXJ0KTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEpPSU5fV0FJVF9CRUFDT04sIE1UMl9QRUVSX0JFQUNPTiwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQmVhY29uQXRKb2luQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEpPSU5fV0FJVF9CRUFDT04sIE1UMl9CRUFDT05fVElNRU9VVCwgKFNUQVRFX01BQ0hJTkVfRlVOQylCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uKTsKKworCS8vIGNvbHVtbiAzCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX01MTUVfU0NBTl9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblNjYW4pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU0NBTl9MSVNURU4sIE1UMl9NTE1FX0pPSU5fUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5Kb2luKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfTUxNRV9TVEFSVF9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblN0YXJ0KTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfUEVFUl9CRUFDT04sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckJlYWNvbkF0U2NhbkFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX1BFRVJfUFJPQkVfUlNQLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJCZWFjb25BdFNjYW5BY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU0NBTl9MSVNURU4sIE1UMl9TQ0FOX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpU2NhblRpbWVvdXRBY3Rpb24pOworCisJLy8gdGltZXIgaW5pdAorCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQmVhY29uVGltZW91dCksIHBBZCwgRkFMU0UpOworCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKFNjYW5UaW1lb3V0KSwgcEFkLCBGQUxTRSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQmVhY29uIHRpbWVvdXQgaGFuZGxlciwgZXhlY3V0ZWQgaW4gdGltZXIgdGhyZWFkCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQmVhY29uVGltZW91dCgKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTWU5DIC0gQmVhY29uVGltZW91dFxuIikpOworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkKKwkJcmV0dXJuOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApCisJCSkKKwl7CisJCVVDSEFSICAgICAgICBCQlBWYWx1ZSA9IDA7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJCUJCUFZhbHVlIHw9IDB4MTA7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEVuZCBvZiBTQ0FOLCByZXN0b3JlIHRvIDQwTUh6IGNoYW5uZWwgJWQsIFRvdGFsIEJTU1slMDJkXVxuIixwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgcEFkLT5TY2FuVGFiLkJzc05yKSk7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9CRUFDT05fVElNRU9VVCwgMCwgTlVMTCk7CisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVNjYW4gdGltZW91dCBoYW5kbGVyLCBleGVjdXRlZCBpbiB0aW1lciB0aHJlYWQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBTY2FuVGltZW91dCgKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKQorCQlyZXR1cm47CisKKwlpZiAoTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX1RJTUVPVVQsIDAsIE5VTEwpKQorCXsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KKwllbHNlCisJeworCQkvLyBUbyBwcmV2ZW50IFN5bmNNYWNoaW5lLkN1cnJTdGF0ZSBpcyBTQ0FOX0xJU1RFTiBmb3JldmVyLgorCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IDA7CisJCVNjYW5OZXh0Q2hhbm5lbChwQWQpOworCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCXsKKwkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NDQU5fRU5RVUVVRV9GQUlMX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTUxNRSBTQ0FOIHJlcSBzdGF0ZSBtYWNoaW5lIHByb2NlZHVyZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZVNjYW5SZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXSwgU3NpZExlbiwgU2NhblR5cGUsIEJzc1R5cGUsIEJCUFZhbHVlID0gMDsKKwlCT09MRUFOICAgICAgICBUaW1lckNhbmNlbGxlZDsKKwlVTE9ORwkJICAgTm93OworCVVTSE9SVCAgICAgICAgIFN0YXR1czsKKwlQSEVBREVSXzgwMl8xMSBwSGRyODAyMTE7CisJUFVDSEFSICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgTlN0YXR1czsKKworCS8vIENoZWNrIHRoZSB0b3RhbCBzY2FuIHRyaWVzIGZvciBvbmUgc2luZ2xlIE9JRCBjb21tYW5kCisJLy8gSWYgdGhpcyBpcyB0aGUgQ0NYIDIuMCBDYXNlLCBza2lwIHRoYXQhCisJaWYgKCAhUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBNbG1lU2NhblJlcUFjdGlvbiBiZWZvcmUgU3RhcnR1cFxuIikpOworCQlyZXR1cm47CisJfQorCisJLy8gSW5jcmVhc2UgdGhlIHNjYW4gcmV0cnkgY291bnRlcnMuCisJcEFkLT5TdGFDZmcuU2NhbkNudCsrOworCisKKwkvLyBmaXJzdCBjaGVjayB0aGUgcGFyYW1ldGVyIHNhbml0eQorCWlmIChNbG1lU2NhblJlcVNhbml0eShwQWQsCisJCQkJCQkgIEVsZW0tPk1zZywKKwkJCQkJCSAgRWxlbS0+TXNnTGVuLAorCQkJCQkJICAmQnNzVHlwZSwKKwkJCQkJCSAgU3NpZCwKKwkJCQkJCSAgJlNzaWRMZW4sCisJCQkJCQkgICZTY2FuVHlwZSkpCisJeworCisJCS8vIENoZWNrIGZvciBjaGFubmVsIGxvYWQgYW5kIG5vaXNlIGhpc3QgcmVxdWVzdAorCQkvLyBTdXNwZW5kIE1TRFUgb25seSBhdCBzY2FuIHJlcXVlc3QsIG5vdCB0aGUgbGFzdCB0d28gbWVudGlvbmVkCisJCWlmICgoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19OT0lTRSkgfHwgKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKSkKKwkJeworCQkJaWYgKHBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJCQkJUlRNUFN1c3BlbmRNc2R1VHJhbnNtaXNzaW9uKHBBZCk7CQkJLy8gU3VzcGVuZCBNU0RVIHRyYW5zbWlzc2lvbiBoZXJlCisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBTdXNwZW5kIE1TRFUgdHJhbnNtaXNzaW9uIGhlcmUKKwkJCVJUTVBTdXNwZW5kTXNkdVRyYW5zbWlzc2lvbihwQWQpOworCQl9CisKKwkJLy8KKwkJLy8gVG8gcHJldmVudCBkYXRhIGxvc3QuCisJCS8vIFNlbmQgYW4gTlVMTCBkYXRhIHdpdGggdHVybmVkIFBTTSBiaXQgb24gdG8gY3VycmVudCBhc3NvY2lhdGVkIEFQIGJlZm9yZSBTQ0FOIHByb2dyZXNzLgorCQkvLyBBbmQgc2hvdWxkIHNlbmQgYW4gTlVMTCBkYXRhIHdpdGggdHVybmVkIFBTTSBiaXQgb2ZmIHRvIEFQLCB3aGVuIHNjYW4gcHJvZ3Jlc3MgZG9uZQorCQkvLworCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpICYmIChJTkZSQV9PTihwQWQpKSkKKwkJeworCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7CisJCQlpZiAoTlN0YXR1cwk9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJeworCQkJCXBIZHI4MDIxMSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjsKKwkJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgcEhkcjgwMjExLCBTVUJUWVBFX05VTExfRlVOQywgMSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCQlwSGRyODAyMTEtPkR1cmF0aW9uID0gMDsKKwkJCQlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9EQVRBOworCQkJCXBIZHI4MDIxMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCisJCQkJLy8gU2VuZCB1c2luZyBwcmlvcml0eSBxdWV1ZQorCQkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU2NhblJlcUFjdGlvbiAtLSBTZW5kIFBTTSBEYXRhIGZyYW1lIGZvciBvZmYgY2hhbm5lbCBSTVxuIikpOworCQkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCX0KKwkJfQorCisJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7CisJCXBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9IE5vdzsKKwkJLy8gcmVzZXQgYWxsIHRoZSB0aW1lcnMKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworCQkvLyByZWNvcmQgZGVzaXJlZCBCU1MgcGFyYW1ldGVycworCQlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IEJzc1R5cGU7CisJCXBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9IFNjYW5UeXBlOworCQlwQWQtPk1sbWVBdXguU3NpZExlbiA9IFNzaWRMZW47CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgU3NpZCwgU3NpZExlbik7CisKKwkJLy8gc3RhcnQgZnJvbSB0aGUgZmlyc3QgY2hhbm5lbAorCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IEZpcnN0Q2hhbm5lbChwQWQpOworCisJCS8vIENoYW5nZSB0aGUgc2NhbiBjaGFubmVsIHdoZW4gZGVhbGluZyB3aXRoIENDWCBiZWFjb24gcmVwb3J0CisJCWlmICgoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19QQVNTSVZFKSB8fCAoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19BQ1RJVkUpIHx8CisJCQkoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19DSEFOTkVMX0xPQUQpIHx8IChTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX05PSVNFKSkKKwkJCXBBZC0+TWxtZUF1eC5DaGFubmVsID0gcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWw7CisKKwkJLy8gTGV0IEJCUCByZWdpc3RlciBhdCAyME1IeiB0byBkbyBzY2FuCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJQkJQVmFsdWUgJj0gKH4weDE4KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gQkJQIFI0IHRvIDIwTUh6LmxcbiIpKTsKKwkJU2Nhbk5leHRDaGFubmVsKHBBZCk7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UX0VSUigoIlNZTkMgLSBNbG1lU2NhblJlcUFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfSU5WQUxJRF9GT1JNQVQ7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX0NPTkYsIDIsICZTdGF0dXMpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlNTE1FIEpPSU4gcmVxIHN0YXRlIG1hY2hpbmUgcHJvY2VkdXJlCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lSm9pblJlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgIEJCUFZhbHVlID0gMDsKKwlCU1NfRU5UUlkgICAgKnBCc3M7CisJQk9PTEVBTiAgICAgICBUaW1lckNhbmNlbGxlZDsKKwlIRUFERVJfODAyXzExIEhkcjgwMjExOworCU5ESVNfU1RBVFVTICAgTlN0YXR1czsKKwlVTE9ORyAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlQVUNIQVIgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVBVQ0hBUiAgICAgICAgcFN1cFJhdGUgPSBOVUxMOworCVVDSEFSICAgICAgICAgU3VwUmF0ZUxlbjsKKwlQVUNIQVIgICAgICAgIHBFeHRSYXRlID0gTlVMTDsKKwlVQ0hBUiAgICAgICAgIEV4dFJhdGVMZW47CisJVUNIQVIgICAgICAgICBBU3VwUmF0ZVtdID0gezB4OEMsIDB4MTIsIDB4OTgsIDB4MjQsIDB4YjAsIDB4NDgsIDB4NjAsIDB4NkN9OworCVVDSEFSICAgICAgICAgQVN1cFJhdGVMZW4gPSBzaXplb2YoQVN1cFJhdGUpL3NpemVvZihVQ0hBUik7CisJTUxNRV9KT0lOX1JFUV9TVFJVQ1QgKnBJbmZvID0gKE1MTUVfSk9JTl9SRVFfU1RSVUNUICopKEVsZW0tPk1zZyk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gTWxtZUpvaW5SZXFBY3Rpb24oQlNTICMlbGQpXG4iLCBwSW5mby0+QnNzSWR4KSk7CisKKworCS8vIHJlc2V0IGFsbCB0aGUgdGltZXJzCisJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJcEJzcyA9ICZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtwSW5mby0+QnNzSWR4XTsKKworCS8vIHJlY29yZCB0aGUgZGVzaXJlZCBTU0lEICYgQlNTSUQgd2UncmUgd2FpdGluZyBmb3IKKwlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgcEJzcy0+QnNzaWQpOworCisJLy8gSWYgQVAncyBTU0lEIGlzIG5vdCBoaWRkZW4sIGl0IGlzIE9LIGZvciB1cGRhdGluZyBzc2lkIHRvIE1sbWVBdXggYWdhaW4uCisJaWYgKHBCc3MtPkhpZGRlbiA9PSAwKQorCXsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHBCc3MtPlNzaWQsIHBCc3MtPlNzaWRMZW4pOworCQlwQWQtPk1sbWVBdXguU3NpZExlbiA9IHBCc3MtPlNzaWRMZW47CisJfQorCisJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBwQnNzLT5Cc3NUeXBlOworCXBBZC0+TWxtZUF1eC5DaGFubmVsID0gcEJzcy0+Q2hhbm5lbDsKKwlwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgPSBwQnNzLT5DZW50cmFsQ2hhbm5lbDsKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkvLyBDb3VudHJ5IElFIG9mIHRoZSBBUCB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgd2lsbCBiZSB1c2VkLgorCWlmICgocEFkLT5TdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUgIT0gUnQ4MDJfMTFfRF9Ob25lKSAmJgorCQkocEJzcy0+Ykhhc0NvdW50cnlJRSA9PSBUUlVFKSkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZVswXSwgJnBCc3MtPkNvdW50cnlTdHJpbmdbMF0sIDIpOworCQlpZiAocEJzcy0+Q291bnRyeVN0cmluZ1syXSA9PSAnSScpCisJCQlwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPSBJRE9SOworCQllbHNlIGlmIChwQnNzLT5Db3VudHJ5U3RyaW5nWzJdID09ICdPJykKKwkJCXBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSA9IE9ET1I7CisJCWVsc2UKKwkJCXBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSA9IEJPVEg7CisJCUJ1aWxkQ2hhbm5lbExpc3RFeChwQWQpOworCX0KKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKwkvLyBMZXQgQkJQIHJlZ2lzdGVyIGF0IDIwTUh6IHRvIGRvIHNjYW4KKwlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJQkJQVmFsdWUgJj0gKH4weDE4KTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEJCUCBSNCB0byAyME1Iei5sXG4iKSk7CisKKwkvLyBzd2l0Y2ggY2hhbm5lbCBhbmQgd2FpdGluZyBmb3IgYmVhY29uIHRpbWVyCisJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCwgRkFMU0UpOworCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKTsKKwlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwgSk9JTl9USU1FT1VUKTsKKworICAgIGRvCisJeworCQlpZiAoKChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJgorICAgICAgICAgICAgKHBBZC0+TWxtZUF1eC5DaGFubmVsID4gMTQpICYmCisgICAgICAgICAgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCkpCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLyBSb2dlciBzeW5jIENhcnJpZXIKKyAgICAgICAgICAgICB8fCAocEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPT0gVFJVRSkKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisgICAgICAgICAgICApCisJCXsKKwkJCS8vCisJCQkvLyBXZSBjYW4ndCBzZW5kIGFueSBQcm9iZSByZXF1ZXN0IGZyYW1lIHRvIG1lZXQgODAyLjExaC4KKwkJCS8vCisJCQlpZiAocEJzcy0+SGlkZGVuID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQkvLworCQkvLyBzZW5kIHByb2JlIHJlcXVlc3QKKwkJLy8KKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsKKwkJaWYgKE5TdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJCXBTdXBSYXRlID0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZTsKKwkJCQlTdXBSYXRlTGVuID0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbjsKKwkJCQlwRXh0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGU7CisJCQkJRXh0UmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW47CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8KKwkJCQkvLyBPdmVyd3JpdGUgU3VwcG9ydCBSYXRlLCBDQ0sgcmF0ZSBhcmUgbm90IGFsbG93ZWQKKwkJCQkvLworCQkJCXBTdXBSYXRlID0gQVN1cFJhdGU7CisJCQkJU3VwUmF0ZUxlbiA9IEFTdXBSYXRlTGVuOworCQkJCUV4dFJhdGVMZW4gPSAwOworCQkJfQorCisJCQlpZiAocEFkLT5NbG1lQXV4LkJzc1R5cGUgPT0gQlNTX0lORlJBKQorCQkJCU1ndE1hY0hlYWRlckluaXQocEFkLCAmSGRyODAyMTEsIFNVQlRZUEVfUFJPQkVfUkVRLCAwLCBwQWQtPk1sbWVBdXguQnNzaWQsIHBBZC0+TWxtZUF1eC5Cc3NpZCk7CisJCQllbHNlCisJCQkJTWd0TWFjSGVhZGVySW5pdChwQWQsICZIZHI4MDIxMSwgU1VCVFlQRV9QUk9CRV9SRVEsIDAsIEJST0FEQ0FTVF9BRERSLCBCUk9BRENBU1RfQUREUik7CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkJCSAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCAgICAmSGRyODAyMTEsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPk1sbWVBdXguU3NpZExlbiwKKwkJCQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLAkgICAgcEFkLT5NbG1lQXV4LlNzaWQsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTdXBSYXRlSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICZTdXBSYXRlTGVuLAorCQkJCQkJCSAgU3VwUmF0ZUxlbiwgICAgICAgICAgICAgICBwU3VwUmF0ZSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQkJaWYgKEV4dFJhdGVMZW4pCisJCQl7CisJCQkJVUxPTkcgVG1wOworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUllLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUxlbiwKKwkJCQkJCQkJICBFeHRSYXRlTGVuLCAgICAgICAgICAgICAgICAgICAgICAgcEV4dFJhdGUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcDsKKwkJCX0KKworCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCX0KKyAgICB9IHdoaWxlIChGQUxTRSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gU3dpdGNoIHRvIGNoICVkLCBXYWl0IEJFQUNPTiBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQlwQnNzLT5DaGFubmVsLCBwQnNzLT5Cc3NpZFswXSwgcEJzcy0+QnNzaWRbMV0sIHBCc3MtPkJzc2lkWzJdLCBwQnNzLT5Cc3NpZFszXSwgcEJzcy0+QnNzaWRbNF0sIHBCc3MtPkJzc2lkWzVdKSk7CisKKwlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gSk9JTl9XQUlUX0JFQUNPTjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlNTE1FIFNUQVJUIFJlcXVlc3Qgc3RhdGUgbWFjaGluZSBwcm9jZWR1cmUsIHN0YXJ0aW5nIGFuIElCU1MKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVTdGFydFJlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF0sIFNzaWRMZW47CisJQk9PTEVBTiAgICAgICBUaW1lckNhbmNlbGxlZDsKKworCS8vIE5ldyBmb3IgV1BBIHNlY3VyaXR5IHN1aXRlcworCVVDSEFSCQkJCQkJVmFySUVbTUFYX1ZJRV9MRU5dOyAJLy8gVG90YWwgVklFIGxlbmd0aCA9IE1BWF9WSUVfTEVOIC0gLTUKKwlORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMJKnBWSUUgPSBOVUxMOworCUxBUkdFX0lOVEVHRVIJCQkJVGltZVN0YW1wOworCUJPT0xFQU4gUHJpdmFjeTsKKwlVU0hPUlQgU3RhdHVzOworCisJLy8gSW5pdCBWYXJpYWJsZSBJRSBzdHJ1Y3R1cmUKKwlwVklFID0gKFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMpIFZhcklFOworCXBWSUUtPkxlbmd0aCA9IDA7CisJVGltZVN0YW1wLnUuTG93UGFydCAgPSAwOworCVRpbWVTdGFtcC51LkhpZ2hQYXJ0ID0gMDsKKworCWlmIChNbG1lU3RhcnRSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgU3NpZCwgJlNzaWRMZW4pKQorCXsKKwkJLy8gcmVzZXQgYWxsIHRoZSB0aW1lcnMKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworCQkvLworCQkvLyBTdGFydCBhIG5ldyBJQlNTLiBBbGwgSUJTUyBwYXJhbWV0ZXJzIGFyZSBkZWNpZGVkIG5vdy4uLi4KKwkJLy8KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVN0YXJ0UmVxQWN0aW9uIC0gU3RhcnQgYSBuZXcgSUJTUy4gQWxsIElCU1MgcGFyYW1ldGVycyBhcmUgZGVjaWRlZCBub3cuLi4uIFxuIikpOworCQlwQWQtPk1sbWVBdXguQnNzVHlwZSAgICAgICAgICAgPSBCU1NfQURIT0M7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsKKwkJcEFkLT5NbG1lQXV4LlNzaWRMZW4gICAgICAgICAgID0gU3NpZExlbjsKKworCQkvLyBnZW5lcmF0ZSBhIHJhZG9tIG51bWJlciBhcyBCU1NJRAorCQlNYWNBZGRyUmFuZG9tQnNzaWQocEFkLCBwQWQtPk1sbWVBdXguQnNzaWQpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU3RhcnRSZXFBY3Rpb24gLSBnZW5lcmF0ZSBhIHJhZG9tIG51bWJlciBhcyBCU1NJRCBcbiIpKTsKKworCQlQcml2YWN5ID0gKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSB8fAorCQkJCSAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB8fAorCQkJCSAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKTsKKwkJcEFkLT5NbG1lQXV4LkNhcGFiaWxpdHlJbmZvICAgID0gQ0FQX0dFTkVSQVRFKDAsMSxQcml2YWN5LCAocEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlU2hvcnQpLCAxLCAwKTsKKwkJcEFkLT5NbG1lQXV4LkJlYWNvblBlcmlvZCAgICAgID0gcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kOworCQlwQWQtPk1sbWVBdXguQXRpbVdpbiAgICAgICAgICAgPSBwQWQtPlN0YUNmZy5BdGltV2luOworCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCAgICAgICAgICAgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCisJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJCXBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCAgICA9IHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsOworCisJCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuPSBwQWQtPkNvbW1vbkNmZy5TdXBSYXRlTGVuOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3VwUmF0ZSwgcEFkLT5Db21tb25DZmcuU3VwUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCQlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5TdXBSYXRlLCAmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4pOworCQlwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW47CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5FeHRSYXRlLCBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisJCVJUTVBDaGVja1JhdGVzKHBBZCwgcEFkLT5NbG1lQXV4LkV4dFJhdGUsICZwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbik7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCXsKKwkJCVJUTVBVcGRhdGVIVElFKCZwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHksICZwQWQtPlN0YUNmZy5EZXNpcmVkSHRQaHlJbmZvLk1DU1NldFswXSwgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksICZwQWQtPk1sbWVBdXguQWRkSHRJbmZvKTsKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSk7CisJCQkvLyBOb3QgdHVybiBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5iSHRFbmFibGUgPSBUUlVFIGhlcmUuCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC1wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5iSHRFbmFibGUgPSBUUlVFXG4iKSk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl7CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuID0gMDsKKwkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID0gRkFMU0U7CisJCX0KKwkJLy8gdGVtcG9yYXJpbHkgbm90IHN1cHBvcnQgUU9TIGluIElCU1MKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLCBzaXplb2YoRURDQV9QQVJNKSk7CisJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpOworCisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBNbG1lU3RhcnRSZXFBY3Rpb24oY2g9ICVkLHN1cCByYXRlcz0gJWQsIGV4dCByYXRlcz0lZClcbiIsCisJCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCwgcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuKSk7CisKKwkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9TVUNDRVNTOworCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU1RBUlRfQ09ORiwgMiwgJlN0YXR1cyk7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UX0VSUigoIlNZTkMgLSBNbG1lU3RhcnRSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbC5cbiIpKTsKKwkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NUQVJUX0NPTkYsIDIsICZTdGF0dXMpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlwZWVyIHNlbmRzIGJlYWNvbiBiYWNrIHdoZW4gc2Nhbm5pbmcKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJCZWFjb25BdFNjYW5BY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dLCBBZGRyMltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF0sIEJzc1R5cGUsIENoYW5uZWwsIE5ld0NoYW5uZWwsCisJCQkJCVNzaWRMZW4sIER0aW1Db3VudCwgRHRpbVBlcmlvZCwgQmNhc3RGbGFnLCBNZXNzYWdlVG9NZTsKKwlDRl9QQVJNICAgICAgICAgQ2ZQYXJtOworCVVTSE9SVCAgICAgICAgICBCZWFjb25QZXJpb2QsIEF0aW1XaW4sIENhcGFiaWxpdHlJbmZvOworCVBGUkFNRV84MDJfMTEgICBwRnJhbWU7CisJTEFSR0VfSU5URUdFUiAgIFRpbWVTdGFtcDsKKwlVQ0hBUiAgICAgICAgICAgRXJwOworCVVDSEFSICAgICAgICAgCVN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUgkJICAJU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKKwlVU0hPUlQgCQkJTGVuVklFOworCVVDSEFSCQkJQ2tpcEZsYWc7CisJVUNIQVIJCQlBaXJvbmV0Q2VsbFBvd2VyTGltaXQ7CisJRURDQV9QQVJNICAgICAgIEVkY2FQYXJtOworCVFCU1NfTE9BRF9QQVJNICBRYnNzTG9hZDsKKwlRT1NfQ0FQQUJJTElUWV9QQVJNIFFvc0NhcGFiaWxpdHk7CisJVUxPTkcJCQkJCQlSYWxpbmtJZTsKKwlVQ0hBUgkJCQkJCVZhcklFW01BWF9WSUVfTEVOXTsJCS8vIFRvdGFsIFZJRSBsZW5ndGggPSBNQVhfVklFX0xFTiAtIC01CisJTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzCSpwVklFID0gTlVMTDsKKwlIVF9DQVBBQklMSVRZX0lFCQlIdENhcGFiaWxpdHk7CisJQUREX0hUX0lORk9fSUUJCUFkZEh0SW5mbzsJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4gPSAwLCBQcmVOSHRDYXBhYmlsaXR5TGVuID0gMDsKKwlVQ0hBUgkJCUFkZEh0SW5mb0xlbjsKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCisKKwkvLyBOZGlzRmlsbE1lbW9yeShTc2lkLCBNQVhfTEVOX09GX1NTSUQsIDB4MDApOworCXBGcmFtZSA9IChQRlJBTUVfODAyXzExKSBFbGVtLT5Nc2c7CisJLy8gSW5pdCBWYXJpYWJsZSBJRSBzdHJ1Y3R1cmUKKwlwVklFID0gKFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMpIFZhcklFOworCXBWSUUtPkxlbmd0aCA9IDA7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgUlRNUFplcm9NZW1vcnkoJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEh0Q2FwYWJpbGl0eSkpOworCVJUTVBaZXJvTWVtb3J5KCZBZGRIdEluZm8sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJaWYgKFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShwQWQsCisJCQkJCQkJCUVsZW0tPk1zZywKKwkJCQkJCQkJRWxlbS0+TXNnTGVuLAorCQkJCQkJCQlFbGVtLT5DaGFubmVsLAorCQkJCQkJCQlBZGRyMiwKKwkJCQkJCQkJQnNzaWQsCisJCQkJCQkJCVNzaWQsCisJCQkJCQkJCSZTc2lkTGVuLAorCQkJCQkJCQkmQnNzVHlwZSwKKwkJCQkJCQkJJkJlYWNvblBlcmlvZCwKKwkJCQkJCQkJJkNoYW5uZWwsCisJCQkJCQkJCSZOZXdDaGFubmVsLAorCQkJCQkJCQkmVGltZVN0YW1wLAorCQkJCQkJCQkmQ2ZQYXJtLAorCQkJCQkJCQkmQXRpbVdpbiwKKwkJCQkJCQkJJkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJCQkmRXJwLAorCQkJCQkJCQkmRHRpbUNvdW50LAorCQkJCQkJCQkmRHRpbVBlcmlvZCwKKwkJCQkJCQkJJkJjYXN0RmxhZywKKwkJCQkJCQkJJk1lc3NhZ2VUb01lLAorCQkJCQkJCQlTdXBSYXRlLAorCQkJCQkJCQkmU3VwUmF0ZUxlbiwKKwkJCQkJCQkJRXh0UmF0ZSwKKwkJCQkJCQkJJkV4dFJhdGVMZW4sCisJCQkJCQkJCSZDa2lwRmxhZywKKwkJCQkJCQkJJkFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKKwkJCQkJCQkJJkVkY2FQYXJtLAorCQkJCQkJCQkmUWJzc0xvYWQsCisJCQkJCQkJCSZRb3NDYXBhYmlsaXR5LAorCQkJCQkJCQkmUmFsaW5rSWUsCisJCQkJCQkJCSZIdENhcGFiaWxpdHlMZW4sCisJCQkJCQkJCSZQcmVOSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5LAorCQkJCQkJCQkmQWRkSHRJbmZvTGVuLAorCQkJCQkJCQkmQWRkSHRJbmZvLAorCQkJCQkJCQkmTmV3RXh0Q2hhbm5lbE9mZnNldCwKKwkJCQkJCQkJJkxlblZJRSwKKwkJCQkJCQkJcFZJRSkpCisJeworCQlVTE9ORyBJZHg7CisJCUNIQVIgUnNzaSA9IDA7CisKKwkJSWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgQnNzaWQsIENoYW5uZWwpOworCQlpZiAoSWR4ICE9IEJTU19OT1RfRk9VTkQpCisJCQlSc3NpID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uUnNzaTsKKworCQlSc3NpID0gUlRNUE1heFJzc2kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCksIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKSwgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpKTsKKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmICgoSHRDYXBhYmlsaXR5TGVuID4gMCkgfHwgKFByZU5IdENhcGFiaWxpdHlMZW4gPiAwKSkKKwkJCUh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQlpZiAoKHBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgIT0gTVNSTl9UWVBFX1VOVVNFRCkgJiYgKENoYW5uZWwgPT0gcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwpKQorCQl7CisJCQlJZHggPSBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYiwgQnNzaWQsIFNzaWQsIFNzaWRMZW4sIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwKKwkJCQkJCSAmQ2ZQYXJtLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbixFeHRSYXRlLCBFeHRSYXRlTGVuLCAmSHRDYXBhYmlsaXR5LAorCQkJCQkJICZBZGRIdEluZm8sIEh0Q2FwYWJpbGl0eUxlbiwgQWRkSHRJbmZvTGVuLCBOZXdFeHRDaGFubmVsT2Zmc2V0LCBDaGFubmVsLCBSc3NpLCBUaW1lU3RhbXAsIENraXBGbGFnLAorCQkJCQkJICZFZGNhUGFybSwgJlFvc0NhcGFiaWxpdHksICZRYnNzTG9hZCwgTGVuVklFLCBwVklFKTsKKwkJCWlmIChJZHggIT0gQlNTX05PVF9GT1VORCkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5DQ1hCc3NUYWIuQnNzRW50cnlbSWR4XS5QVFNGLCAmRWxlbS0+TXNnWzI0XSwgNCk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYi5Cc3NFbnRyeVtJZHhdLlRUU0ZbMF0sICZFbGVtLT5UaW1lU3RhbXAudS5Mb3dQYXJ0LCA0KTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuQ0NYQnNzVGFiLkJzc0VudHJ5W0lkeF0uVFRTRls0XSwgJkVsZW0tPlRpbWVTdGFtcC51Lkxvd1BhcnQsIDQpOworCQkJCWlmIChwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlID09IE1TUk5fVFlQRV9CRUFDT05fUkVRKQorCQkJCQlBaXJvbmV0QWRkQmVhY29uUmVwb3J0KHBBZCwgSWR4LCBFbGVtKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCUlkeCA9IEJzc1RhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TY2FuVGFiLCBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLAorCQkJCQkJICAmQ2ZQYXJtLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbiwgICZIdENhcGFiaWxpdHksCisJCQkJCQkgJkFkZEh0SW5mbywgSHRDYXBhYmlsaXR5TGVuLCBBZGRIdEluZm9MZW4sIE5ld0V4dENoYW5uZWxPZmZzZXQsIENoYW5uZWwsIFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsCisJCQkJCQkgJkVkY2FQYXJtLCAmUW9zQ2FwYWJpbGl0eSwgJlFic3NMb2FkLCBMZW5WSUUsIHBWSUUpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2lmZGVmIERPVDExTl9EUkFGVDMKKwkJCWlmIChwQWQtPkNoYW5uZWxMaXN0W3BBZC0+Q29tbW9uQ2ZnLkNoYW5uZWxMaXN0SWR4XS5iRWZmZWN0ZWRDaGFubmVsID09IFRSVUUpCisJCQl7CisJCQkJVUNIQVIJCVJlZ0NsYXNzOworCQkJCVBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eTIocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJlJlZ0NsYXNzKTsKKwkJCQlUcmlFdmVudFRhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLCBCc3NpZCwgJkh0Q2FwYWJpbGl0eSwgSHRDYXBhYmlsaXR5TGVuLCBSZWdDbGFzcywgQ2hhbm5lbCk7CisJCQl9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJaWYgKElkeCAhPSBCU1NfTk9UX0ZPVU5EKQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlBUU0YsICZFbGVtLT5Nc2dbMjRdLCA0KTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uVFRTRlswXSwgJkVsZW0tPlRpbWVTdGFtcC51Lkxvd1BhcnQsIDQpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5UVFNGWzRdLCAmRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7CisJCQl9CisJCX0KKwl9CisJLy8gc2FuaXR5IGNoZWNrIGZhaWwsIGlnbm9yZWQKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlXaGVuIHdhaXRpbmcgam9pbmluZyB0aGUgKEkpQlNTLCBiZWFjb24gcmVjZWl2ZWQgZnJvbSBleHRlcm5hbAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckJlYWNvbkF0Sm9pbkFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dLCBBZGRyMltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdLCBTc2lkTGVuLCBCc3NUeXBlLCBDaGFubmVsLCBNZXNzYWdlVG9NZSwKKwkJCQkgIER0aW1Db3VudCwgRHRpbVBlcmlvZCwgQmNhc3RGbGFnLCBOZXdDaGFubmVsOworCUxBUkdFX0lOVEVHRVIgVGltZVN0YW1wOworCVVTSE9SVCAgICAgICAgQmVhY29uUGVyaW9kLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbzsKKwlDRl9QQVJNICAgICAgIENmOworCUJPT0xFQU4gICAgICAgVGltZXJDYW5jZWxsZWQ7CisJVUNIQVIgICAgICAgICBFcnA7CisJVUNIQVIgICAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCSAgU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKKwlVQ0hBUiAgICAgICAgIENraXBGbGFnOworCVVTSE9SVCAJCSAgTGVuVklFOworCVVDSEFSCQkgIEFpcm9uZXRDZWxsUG93ZXJMaW1pdDsKKwlFRENBX1BBUk0gICAgICAgRWRjYVBhcm07CisJUUJTU19MT0FEX1BBUk0gIFFic3NMb2FkOworCVFPU19DQVBBQklMSVRZX1BBUk0gUW9zQ2FwYWJpbGl0eTsKKwlVU0hPUlQgICAgICAgIFN0YXR1czsKKwlVQ0hBUgkJCQkJCVZhcklFW01BWF9WSUVfTEVOXTsJCS8vIFRvdGFsIFZJRSBsZW5ndGggPSBNQVhfVklFX0xFTiAtIC01CisJTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzCSpwVklFID0gTlVMTDsKKwlVTE9ORyAgICAgICAgICAgUmFsaW5rSWU7CisJVUxPTkcgICAgICAgICBJZHg7CisJSFRfQ0FQQUJJTElUWV9JRQkJSHRDYXBhYmlsaXR5OworCUFERF9IVF9JTkZPX0lFCQlBZGRIdEluZm87CS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorCVVDSEFSCQkJCUh0Q2FwYWJpbGl0eUxlbiA9IDAsIFByZU5IdENhcGFiaWxpdHlMZW4gPSAwOworCVVDSEFSCQkJQWRkSHRJbmZvTGVuOworCVVDSEFSCQkJTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJVUNIQVIJCQlDZW50cmFsQ2hhbm5lbDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIEluaXQgVmFyaWFibGUgSUUgc3RydWN0dXJlCisJcFZJRSA9IChQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzKSBWYXJJRTsKKwlwVklFLT5MZW5ndGggPSAwOworICAgIFJUTVBaZXJvTWVtb3J5KCZIdENhcGFiaWxpdHksIHNpemVvZihIdENhcGFiaWxpdHkpKTsKKwlSVE1QWmVyb01lbW9yeSgmQWRkSHRJbmZvLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKworCisJaWYgKFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShwQWQsCisJCQkJCQkJCUVsZW0tPk1zZywKKwkJCQkJCQkJRWxlbS0+TXNnTGVuLAorCQkJCQkJCQlFbGVtLT5DaGFubmVsLAorCQkJCQkJCQlBZGRyMiwKKwkJCQkJCQkJQnNzaWQsCisJCQkJCQkJCVNzaWQsCisJCQkJCQkJCSZTc2lkTGVuLAorCQkJCQkJCQkmQnNzVHlwZSwKKwkJCQkJCQkJJkJlYWNvblBlcmlvZCwKKwkJCQkJCQkJJkNoYW5uZWwsCisJCQkJCQkJCSZOZXdDaGFubmVsLAorCQkJCQkJCQkmVGltZVN0YW1wLAorCQkJCQkJCQkmQ2YsCisJCQkJCQkJCSZBdGltV2luLAorCQkJCQkJCQkmQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkJCSZFcnAsCisJCQkJCQkJCSZEdGltQ291bnQsCisJCQkJCQkJCSZEdGltUGVyaW9kLAorCQkJCQkJCQkmQmNhc3RGbGFnLAorCQkJCQkJCQkmTWVzc2FnZVRvTWUsCisJCQkJCQkJCVN1cFJhdGUsCisJCQkJCQkJCSZTdXBSYXRlTGVuLAorCQkJCQkJCQlFeHRSYXRlLAorCQkJCQkJCQkmRXh0UmF0ZUxlbiwKKwkJCQkJCQkJJkNraXBGbGFnLAorCQkJCQkJCQkmQWlyb25ldENlbGxQb3dlckxpbWl0LAorCQkJCQkJCQkmRWRjYVBhcm0sCisJCQkJCQkJCSZRYnNzTG9hZCwKKwkJCQkJCQkJJlFvc0NhcGFiaWxpdHksCisJCQkJCQkJCSZSYWxpbmtJZSwKKwkJCQkJCQkJJkh0Q2FwYWJpbGl0eUxlbiwKKwkJCQkJCQkJJlByZU5IdENhcGFiaWxpdHlMZW4sCisJCQkJCQkJCSZIdENhcGFiaWxpdHksCisJCQkJCQkJCSZBZGRIdEluZm9MZW4sCisJCQkJCQkJCSZBZGRIdEluZm8sCisJCQkJCQkJCSZOZXdFeHRDaGFubmVsT2Zmc2V0LAorCQkJCQkJCQkmTGVuVklFLAorCQkJCQkJCQlwVklFKSkKKwl7CisJCS8vIERpc3F1YWxpZnkgMTFiIG9ubHkgYWRob2Mgd2hlbiB3ZSBhcmUgaW4gMTFnIG9ubHkgYWRob2MgbW9kZQorCQlpZiAoKEJzc1R5cGUgPT0gQlNTX0FESE9DKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFHKSAmJiAoKFN1cFJhdGVMZW4rRXh0UmF0ZUxlbik8IDEyKSkKKwkJCXJldHVybjsKKworCQkvLyBCRUFDT04gZnJvbSBkZXNpcmVkIEJTUy9JQlNTIGZvdW5kLiBXZSBzaG91bGQgYmUgYWJsZSB0byBkZWNpZGUgbW9zdAorCQkvLyBCU1MgcGFyYW1ldGVycyBoZXJlLgorCQkvLyBRLiBCdXQgd2hhdCBoYXBwZW4gaWYgdGhpcyBKT0lOIGRvZXNuJ3QgY29uY2x1ZGUgYSBzdWNjZXNzZnVsIEFTU09DSUFURUlPTj8KKwkJLy8gICAgRG8gd2UgbmVlZCB0byByZWNlb3ZlciBiYWNrIGFsbCBwYXJhbWV0ZXJzIGJlbG9uZ2luZyB0byBwcmV2aW91cyBCU1M/CisJCS8vIEEuIFNob3VsZCBiZSBub3QuIFRoZXJlJ3Mgbm8gYmFjay1kb29yIHJlY292ZXIgdG8gcHJldmlvdXMgQVAuIEl0IHN0aWxsIG5lZWQKKwkJLy8gICAgYSBuZXcgSk9JTi1BVVRILUFTU09DIHNlcXVlbmNlLgorCQlpZiAoTUFDX0FERFJfRVFVQUwocEFkLT5NbG1lQXV4LkJzc2lkLCBCc3NpZCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSByZWNlaXZlIGRlc2lyZWQgQkVBQ09OIGF0IEpvaW5XYWl0QmVhY29uLi4uIENoYW5uZWwgPSAlZFxuIiwgQ2hhbm5lbCkpOworCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJCS8vIFVwZGF0ZSBSU1NJIHRvIHByZXZlbnQgTm8gc2lnbmFsIGRpc3BsYXkgd2hlbiBjYXJkcyBmaXJzdCBpbml0aWFsaXplZAorCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAJPSBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCk7CisJCQlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMQk9IENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKTsKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyCT0gQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMAk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMFg4CT0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCA8PCAzOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMQk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMVg4CT0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMSA8PCAzOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMgk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMlg4CT0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMiA8PCAzOworCisJCQkvLworCQkJLy8gV2UgbmVlZCB0byBjaGVjayBpZiBTU0lEIG9ubHkgc2V0IHRvIGFueSwgdGhlbiB3ZSBjYW4gcmVjb3JkIHRoZSBjdXJyZW50IFNTSUQuCisJCQkvLyBPdGhlcndpc2Ugd2lsbCBjYXVzZSBoaWRkZW4gU1NJRCBhc3NvY2lhdGlvbiBmYWlsZWQuCisJCQkvLworCQkJaWYgKHBBZC0+TWxtZUF1eC5Tc2lkTGVuID09IDApCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIFNzaWQsIFNzaWRMZW4pOworCQkJCXBBZC0+TWxtZUF1eC5Tc2lkTGVuID0gU3NpZExlbjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlJZHggPSBCc3NTc2lkVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgQnNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbiwgQ2hhbm5lbCk7CisKKwkJCQlpZiAoSWR4ICE9IEJTU19OT1RfRk9VTkQpCisJCQkJeworCQkJCQkvLworCQkJCQkvLyBNdWx0aXBsZSBTU0lEIGNhc2UsIHVzZWQgY29ycmVjdCBDYXBhYmlsaXR5SW5mbworCQkJCQkvLworCQkJCQlDYXBhYmlsaXR5SW5mbyA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLkNhcGFiaWxpdHlJbmZvOworCQkJCX0KKwkJCX0KKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Cc3NpZCwgQnNzaWQsIE1BQ19BRERSX0xFTik7CisJCQlwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbyAmIFNVUFBPUlRFRF9DQVBBQklMSVRZX0lORk87CisJCQlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IEJzc1R5cGU7CisJCQlwQWQtPk1sbWVBdXguQmVhY29uUGVyaW9kID0gQmVhY29uUGVyaW9kOworCQkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSBDaGFubmVsOworCQkJcEFkLT5NbG1lQXV4LkF0aW1XaW4gPSBBdGltV2luOworCQkJcEFkLT5NbG1lQXV4LkNmcFBlcmlvZCA9IENmLkNmcFBlcmlvZDsKKwkJCXBBZC0+TWxtZUF1eC5DZnBNYXhEdXJhdGlvbiA9IENmLkNmcE1heER1cmF0aW9uOworCQkJcEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgPSBSYWxpbmtJZTsKKworCQkJLy8gQ29weSBBUCdzIHN1cHBvcnRlZCByYXRlIHRvIE1sbWVBdXggZm9yIGNyZWF0aW5nIGFzc29pY2F0aW9uIHJlcXVlc3QKKwkJCS8vIEFsc28gZmlsdGVyIG91dCBub3Qgc3VwcG9ydGVkIHJhdGUKKwkJCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5TdXBSYXRlLCBTdXBSYXRlLCBTdXBSYXRlTGVuKTsKKwkJCVJUTVBDaGVja1JhdGVzKHBBZCwgcEFkLT5NbG1lQXV4LlN1cFJhdGUsICZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbik7CisJCQlwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiA9IEV4dFJhdGVMZW47CisJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguRXh0UmF0ZSwgRXh0UmF0ZSwgRXh0UmF0ZUxlbik7CisJCQlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5FeHRSYXRlLCAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4pOworCisgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldCwgMTYpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJcEFkLT5NbG1lQXV4Lk5ld0V4dENoYW5uZWxPZmZzZXQgPSBOZXdFeHRDaGFubmVsT2Zmc2V0OworCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA9IEh0Q2FwYWJpbGl0eUxlbjsKKworCQkJLy8gZmlsdGVyIG91dCB1bi1zdXBwb3J0ZWQgaHQgcmF0ZXMKKwkJCWlmICgoKEh0Q2FwYWJpbGl0eUxlbiA+IDApIHx8IChQcmVOSHRDYXBhYmlsaXR5TGVuID4gMCkpICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQkJeworCQkJCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LCBTSVpFX0hUX0NBUF9JRSk7CisgICAJCQkJUlRNUE1vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BZGRIdEluZm8sICZBZGRIdEluZm8sIFNJWkVfQUREX0hUX0lORk9fSUUpOworCisJCQkJLy8gU3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1DU1NldCBzdG9yZXMgUGVlciBBUCdzIDExbiBSeCBjYXBhYmlsaXR5CisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXQsIEh0Q2FwYWJpbGl0eS5NQ1NTZXQsIDE2KTsKKwkJCQlwQWQtPk1sbWVBdXguTmV3RXh0Q2hhbm5lbE9mZnNldCA9IE5ld0V4dENoYW5uZWxPZmZzZXQ7CisJCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOworCQkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID0gVFJVRTsKKwkJCQlpZiAoUHJlTkh0Q2FwYWJpbGl0eUxlbiA+IDApCisJCQkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYlByZU5IdCA9IFRSVUU7CisJCQkJUlRNUENoZWNrSHQocEFkLCBCU1NJRF9XQ0lELCAmSHRDYXBhYmlsaXR5LCAmQWRkSHRJbmZvKTsKKwkJCQkvLyBDb3B5IEFQIFBhcmFtZXRlciB0byBTdGFBY3RpdmUuICBUaGlzIGlzIGFsc28gaW4gTGlua1VwLgorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BdEpvaW5BY3Rpb24hIChNcGR1RGVuc2l0eT0lZCwgTWF4UkFtcGR1RmFjdG9yPSVkLCBCVz0lZClcbiIsCisJCQkJCXBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1wZHVEZW5zaXR5LCBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5NYXhSQW1wZHVGYWN0b3IsIEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoKSk7CisKKwkJCQlpZiAoQWRkSHRJbmZvTGVuID4gMCkKKwkJCQl7CisJCQkJCUNlbnRyYWxDaGFubmVsID0gQWRkSHRJbmZvLkNvbnRyb2xDaGFuOworCQkgCQkJLy8gQ2hlY2sgYWdhaW4gdGhlIEJhbmR3aWR0aCBjYXBhYmlsaXR5IG9mIHRoaXMgQVAuCisJCSAJCQlpZiAoKEFkZEh0SW5mby5Db250cm9sQ2hhbiA+IDIpJiYgKEFkZEh0SW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQkVMT1cpICYmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJCSAJCQl7CisJCSAJCQkJQ2VudHJhbENoYW5uZWwgPSBBZGRIdEluZm8uQ29udHJvbENoYW4gLSAyOworCQkgCQkJfQorCQkgCQkJZWxzZSBpZiAoKEFkZEh0SW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQUJPVkUpICYmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJCSAJCQl7CisJCSAJCQkJQ2VudHJhbENoYW5uZWwgPSBBZGRIdEluZm8uQ29udHJvbENoYW4gKyAyOworCQkgCQkJfQorCisJCQkJCS8vIENoZWNrIEVycm9yIC4KKwkJCQkJaWYgKHBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCAhPSBDZW50cmFsQ2hhbm5lbCkKKwkJIAkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJQZWVyQmVhY29uQXRKb2luQWN0aW9uIEhUPT09PkJlYWNvbiBDZW50cmFsIENoYW5uZWwgPSAlZCwgQ29udHJvbCBDaGFubmVsID0gJWQuIE1sbWVhdXggQ2VudHJhbENoYW5uZWwgPSAlZFxuIiwgQ2VudHJhbENoYW5uZWwsIEFkZEh0SW5mby5Db250cm9sQ2hhbiwgcEFkLT5NbG1lQXV4LkNlbnRyYWxDaGFubmVsKSk7CisKKwkJIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BdEpvaW5BY3Rpb24gSFQ9PT0+Q2VudHJhbCBDaGFubmVsID0gJWQsIENvbnRyb2wgQ2hhbm5lbCA9ICVkLCAgLlxuIiwgQ2VudHJhbENoYW5uZWwsIEFkZEh0SW5mby5Db250cm9sQ2hhbikpOworCisJCQkJfQorCisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQl7CisgICAJCQkJLy8gVG8gcHJldmVudCBlcnJvciwgbGV0IGxlZ2FjeSBBUCBtdXN0IGhhdmUgc2FtZSBDZW50cmFsQ2hhbm5lbCBhbmQgQ2hhbm5lbC4KKwkJCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiA9PSAwKSAmJiAoUHJlTkh0Q2FwYWJpbGl0eUxlbiA9PSAwKSkKKwkJCQkJcEFkLT5NbG1lQXV4LkNlbnRyYWxDaGFubmVsID0gcEFkLT5NbG1lQXV4LkNoYW5uZWw7CisKKwkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IEZBTFNFOworCQkJCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LCBTSVpFX0hUX0NBUF9JRSk7CisJCQkJUlRNUFplcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BZGRIdEluZm8sIFNJWkVfQUREX0hUX0lORk9fSUUpOworCQkJfQorCisJCQlSVE1QVXBkYXRlTWxtZVJhdGUocEFkKTsKKworCQkJLy8gY29weSBRT1MgcmVsYXRlZCBpbmZvcm1hdGlvbgorCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQkpCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLCAmRWRjYVBhcm0sIHNpemVvZihFRENBX1BBUk0pKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5NbG1lQXV4LkFQUWJzc0xvYWQsICZRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFvc0NhcGFiaWxpdHksICZRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpOworCQkJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJCQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFvc0NhcGFiaWxpdHksIHNpemVvZihRT1NfQ0FQQUJJTElUWV9QQVJNKSk7CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBhZnRlciBKT0lOLCBTdXBSYXRlTGVuPSVkLCBFeHRSYXRlTGVuPSVkXG4iLAorCQkJCQkJCQkJCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLCBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbikpOworCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkvLyBVcGRhdGUgQ2tpcEZsYWcKKwkJCXBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gQ2tpcEZsYWc7CisKKwkJCS8vIEtlZXAgVGltZVN0YW1wIGZvciBSZS1Bc3NvY2lhdGlvbiB1c2VkLgorCQkJaWYgKExFQVBfQ0NLTV9PTihwQWQpICYmIChwQWQtPlN0YUNmZy5DQ0tNTGlua1VwRmxhZyA9PSBUUlVFKSkKKwkJCQlwQWQtPlN0YUNmZy5DQ0tNQmVhY29uQXRKb2luVGltZVN0YW1wID0gVGltZVN0YW1wOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCisJCQlpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0ICE9IDB4RkYpCisJCQl7CisJCQkJLy9XZSBuZWVkIHRvIGNoYW5nZSBvdXIgVHhQb3dlciBmb3IgQ0NYIDIuMCBBUCBDb250cm9sIG9mIENsaWVudCBUcmFuc21pdCBQb3dlcgorCQkJCUNoYW5nZVRvQ2VsbFBvd2VyTGltaXQocEFkLCBBaXJvbmV0Q2VsbFBvd2VyTGltaXQpOworCQkJfQorCQkJZWxzZSAgLy9Vc2VkIHRoZSBkZWZhdWx0IFRYIFBvd2VyIFBlcmNlbnRhZ2UuCisJCQkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdDsKKworCQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwkJCVN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9KT0lOX0NPTkYsIDIsICZTdGF0dXMpOworCQl9CisJCS8vIG5vdCB0byBtZSBCRUFDT04sIGlnbm9yZWQKKwl9CisJLy8gc2FuaXR5IGNoZWNrIGZhaWwsIGlnbm9yZSB0aGlzIGZyYW1lCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJcmVjZWl2ZSBCRUFDT04gZnJvbSBwZWVyCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckJlYWNvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dLCBBZGRyMltNQUNfQUREUl9MRU5dOworCUNIQVIgICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworCUNGX1BBUk0gICAgICAgQ2ZQYXJtOworCVVDSEFSICAgICAgICAgU3NpZExlbiwgTWVzc2FnZVRvTWU9MCwgQnNzVHlwZSwgQ2hhbm5lbCwgTmV3Q2hhbm5lbCwgaW5kZXg9MDsKKwlVQ0hBUiAgICAgICAgIER0aW1Db3VudD0wLCBEdGltUGVyaW9kPTAsIEJjYXN0RmxhZz0wOworCVVTSE9SVCAgICAgICAgQ2FwYWJpbGl0eUluZm8sIEF0aW1XaW4sIEJlYWNvblBlcmlvZDsKKwlMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcDsKKwlVU0hPUlQgICAgICAgIFRidHROdW1Ub05leHRXYWtlVXA7CisJVUNIQVIgICAgICAgICBFcnA7CisJVUNIQVIgICAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCSAgU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKKwlVQ0hBUgkJICBDa2lwRmxhZzsKKwlVU0hPUlQgICAgICAgIExlblZJRTsKKwlVQ0hBUgkJICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQ7CisJRURDQV9QQVJNICAgICAgIEVkY2FQYXJtOworCVFCU1NfTE9BRF9QQVJNICBRYnNzTG9hZDsKKwlRT1NfQ0FQQUJJTElUWV9QQVJNIFFvc0NhcGFiaWxpdHk7CisJVUxPTkcgICAgICAgICAgIFJhbGlua0llOworCS8vIE5ldyBmb3IgV1BBIHNlY3VyaXR5IHN1aXRlcworCVVDSEFSCQkJCQkJVmFySUVbTUFYX1ZJRV9MRU5dOwkJLy8gVG90YWwgVklFIGxlbmd0aCA9IE1BWF9WSUVfTEVOIC0gLTUKKwlORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMJKnBWSUUgPSBOVUxMOworCUhUX0NBUEFCSUxJVFlfSUUJCUh0Q2FwYWJpbGl0eTsKKwlBRERfSFRfSU5GT19JRQkJQWRkSHRJbmZvOwkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbiwgUHJlTkh0Q2FwYWJpbGl0eUxlbjsKKwlVQ0hBUgkJCUFkZEh0SW5mb0xlbjsKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCisKKyNpZmRlZiBSQUxJTktfQVRFCisgICAgaWYgKEFURV9PTihwQWQpKQorICAgIHsKKwkJcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwlpZiAoIShJTkZSQV9PTihwQWQpIHx8IEFESE9DX09OKHBBZCkKKwkJKSkKKwkJcmV0dXJuOworCisJLy8gSW5pdCBWYXJpYWJsZSBJRSBzdHJ1Y3R1cmUKKwlwVklFID0gKFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMpIFZhcklFOworCXBWSUUtPkxlbmd0aCA9IDA7CisgICAgUlRNUFplcm9NZW1vcnkoJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEh0Q2FwYWJpbGl0eSkpOworCVJUTVBaZXJvTWVtb3J5KCZBZGRIdEluZm8sIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworCisJaWYgKFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShwQWQsCisJCQkJCQkJCUVsZW0tPk1zZywKKwkJCQkJCQkJRWxlbS0+TXNnTGVuLAorCQkJCQkJCQlFbGVtLT5DaGFubmVsLAorCQkJCQkJCQlBZGRyMiwKKwkJCQkJCQkJQnNzaWQsCisJCQkJCQkJCVNzaWQsCisJCQkJCQkJCSZTc2lkTGVuLAorCQkJCQkJCQkmQnNzVHlwZSwKKwkJCQkJCQkJJkJlYWNvblBlcmlvZCwKKwkJCQkJCQkJJkNoYW5uZWwsCisJCQkJCQkJCSZOZXdDaGFubmVsLAorCQkJCQkJCQkmVGltZVN0YW1wLAorCQkJCQkJCQkmQ2ZQYXJtLAorCQkJCQkJCQkmQXRpbVdpbiwKKwkJCQkJCQkJJkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJCQkmRXJwLAorCQkJCQkJCQkmRHRpbUNvdW50LAorCQkJCQkJCQkmRHRpbVBlcmlvZCwKKwkJCQkJCQkJJkJjYXN0RmxhZywKKwkJCQkJCQkJJk1lc3NhZ2VUb01lLAorCQkJCQkJCQlTdXBSYXRlLAorCQkJCQkJCQkmU3VwUmF0ZUxlbiwKKwkJCQkJCQkJRXh0UmF0ZSwKKwkJCQkJCQkJJkV4dFJhdGVMZW4sCisJCQkJCQkJCSZDa2lwRmxhZywKKwkJCQkJCQkJJkFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKKwkJCQkJCQkJJkVkY2FQYXJtLAorCQkJCQkJCQkmUWJzc0xvYWQsCisJCQkJCQkJCSZRb3NDYXBhYmlsaXR5LAorCQkJCQkJCQkmUmFsaW5rSWUsCisJCQkJCQkJCSZIdENhcGFiaWxpdHlMZW4sCisJCQkJCQkJCSZQcmVOSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5LAorCQkJCQkJCQkmQWRkSHRJbmZvTGVuLAorCQkJCQkJCQkmQWRkSHRJbmZvLAorCQkJCQkJCQkmTmV3RXh0Q2hhbm5lbE9mZnNldCwKKwkJCQkJCQkJJkxlblZJRSwKKwkJCQkJCQkJcFZJRSkpCisJeworCQlCT09MRUFOIGlzX215X2Jzc2lkLCBpc19teV9zc2lkOworCQlVTE9ORyAgIEJzc2lkeCwgTm93OworCQlCU1NfRU5UUlkgKnBCc3M7CisJCUNIQVIJCVJlYWxSc3NpID0gUlRNUE1heFJzc2kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCksIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKSwgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpKTsKKworCQlpc19teV9ic3NpZCA9IE1BQ19BRERSX0VRVUFMKEJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk/IFRSVUUgOiBGQUxTRTsKKwkJaXNfbXlfc3NpZCA9IFNTSURfRVFVQUwoU3NpZCwgU3NpZExlbiwgcEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZExlbik/IFRSVUU6RkFMU0U7CisKKworCQkvLyBpZ25vcmUgQkVBQ09OIG5vdCBmb3IgbXkgU1NJRAorCQlpZiAoKCEgaXNfbXlfc3NpZCkgJiYgKCEgaXNfbXlfYnNzaWQpKQorCQkJcmV0dXJuOworCisJCS8vIEl0IG1lYW5zIFNUQSB3YWl0cyBkaXNhc3NvYyBjb21wbGV0ZWx5IGZyb20gdGhpcyBBUCwgaWdub3JlcyB0aGlzIGJlYWNvbi4KKwkJaWYgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9XQUlUX0RJU0FTU09DKQorCQkJcmV0dXJuOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCS8vIENvcHkgQ29udHJvbCBjaGFubmVsIGZvciB0aGlzIEJTU0lELgorCQlpZiAoQWRkSHRJbmZvTGVuICE9IDApCisJCQlDaGFubmVsID0gQWRkSHRJbmZvLkNvbnRyb2xDaGFuOworCisJCWlmICgoSHRDYXBhYmlsaXR5TGVuID4gMCkgfHwgKFByZU5IdENhcGFiaWxpdHlMZW4gPiAwKSkKKwkJCUh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCS8vCisJCS8vIEhvdXNla2VlcGluZyAiU3NpZEJzc1RhYiIgdGFibGUgZm9yIGxhdGVyLW9uIFJPQU1pbmcgdXNhZ2UuCisJCS8vCisJCUJzc2lkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIEJzc2lkLCBDaGFubmVsKTsKKwkJaWYgKEJzc2lkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCQl7CisJCQkvLyBkaXNjb3ZlciBuZXcgQVAgb2YgdGhpcyBuZXR3b3JrLCBjcmVhdGUgQlNTIGVudHJ5CisJCQlCc3NpZHggPSBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U2NhblRhYiwgQnNzaWQsIFNzaWQsIFNzaWRMZW4sIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwKKwkJCQkJCSAmQ2ZQYXJtLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbiwKKwkJCQkJCSZIdENhcGFiaWxpdHksICZBZGRIdEluZm8sSHRDYXBhYmlsaXR5TGVuLEFkZEh0SW5mb0xlbixOZXdFeHRDaGFubmVsT2Zmc2V0LCBDaGFubmVsLAorCQkJCQkJUmVhbFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsICZFZGNhUGFybSwgJlFvc0NhcGFiaWxpdHksCisJCQkJCQkmUWJzc0xvYWQsIExlblZJRSwgcFZJRSk7CisJCQlpZiAoQnNzaWR4ID09IEJTU19OT1RfRk9VTkQpIC8vIHJldHVybiBpZiBCU1MgdGFibGUgZnVsbAorCQkJCXJldHVybjsKKworCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uUFRTRiwgJkVsZW0tPk1zZ1syNF0sIDQpOworCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLlRUU0ZbMF0sICZFbGVtLT5UaW1lU3RhbXAudS5Mb3dQYXJ0LCA0KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5UVFNGWzRdLCAmRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7CisKKworCisJCX0KKworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmIChOZXdDaGFubmVsICE9IDApICYmIChDaGFubmVsICE9IE5ld0NoYW5uZWwpKQorCQl7CisJCQkvLyBTd2l0Y2hpbmcgdG8gY2hhbm5lbCAxIGNhbiBwcmV2ZW50IGZyb20gcmVzY2FubmluZyB0aGUgY3VycmVudCBjaGFubmVsIGltbWVkaWF0ZWx5IChieSBhdXRvIHJlY29ubmVjdGlvbikuCisJCQkvLyBJbiBhZGRpdGlvbiwgY2xlYXIgdGhlIE1MTUUgcXVldWUgYW5kIHRoZSBzY2FuIHRhYmxlIHRvIGRpc2NhcmQgdGhlIFJYIHBhY2tldHMgYW5kIHByZXZpb3VzIHNjYW5uaW5nIHJlc3VsdHMuCisJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIDEsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIDEpOworCQkgICAgTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCQlNbG1lUXVldWVJbml0KCZwQWQtPk1sbWUuUXVldWUpOworCQkJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOworCQkgICAgUlRNUHVzZWNEZWxheSgxMDAwMDAwKTsJCS8vIHVzZSBkZWxheSB0byBwcmV2ZW50IFNUQSBkbyByZWFzc29jCisKKwkJCS8vIGNoYW5uZWwgc2FuaXR5IGNoZWNrCisJCQlmb3IgKGluZGV4ID0gMCA7IGluZGV4IDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaW5kZXgrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5DaGFubmVsTGlzdFtpbmRleF0uQ2hhbm5lbCA9PSBOZXdDaGFubmVsKQorCQkJCXsKKwkJCQkJcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBOZXdDaGFubmVsOworCQkJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb24gLSBTVEEgcmVjZWl2ZSBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgSUUgKE5ldyBDaGFubmVsID0lZClcbiIsIE5ld0NoYW5uZWwpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaW5kZXggPj0gcEFkLT5DaGFubmVsTGlzdE51bSkKKwkJCXsKKwkJCQlEQkdQUklOVF9FUlIoKCJQZWVyQmVhY29uKGNhbiBub3QgZmluZCBOZXcgQ2hhbm5lbD0lZCBpbiBDaGFubmVsTGlzdFslZF1cbiIsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHBBZC0+Q2hhbm5lbExpc3ROdW0pKTsKKwkJCX0KKwkJfQorCisJCS8vIGlmIHRoZSBzc2lkIG1hdGNoZWQgJiBic3NpZCB1bm1hdGNoZWQsIHdlIHNob3VsZCBzZWxlY3QgdGhlIGJzc2lkIHdpdGggbGFyZ2UgdmFsdWUuCisJCS8vIFRoaXMgbWlnaHQgaGFwcGVuZWQgd2hlbiB0d28gU1RBIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUKKwkJaWYgKCghIGlzX215X2Jzc2lkKSAmJiBBREhPQ19PTihwQWQpKQorCQl7CisJCQlJTlQJaTsKKworCQkJLy8gQWRkIHRoZSBzYWZlZ3VhcmQgYWdhaW5zdCB0aGUgbWlzbWF0Y2ggb2YgYWRob2Mgd2VwIHN0YXR1cworCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5XZXBTdGF0dXMpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIE5vdCBtYXRjaGVkIHdlcCBzdGF0dXMgJWQgJWRcbiIsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uV2VwU3RhdHVzKSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYnNzaWQ9JXNcbiIsIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLkJzc2lkKSk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBjb2xsYXBzZSBpbnRvIHRoZSBBREhPQyBuZXR3b3JrIHdoaWNoIGhhcyBiaWdnZXIgQlNTSUQgdmFsdWUuCisJCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJeworCQkJCWlmIChCc3NpZFtpXSA+IHBBZC0+Q29tbW9uQ2ZnLkJzc2lkW2ldKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIG1lcmdlIHRvIHRoZSBJQlNTIHdpdGggYmlnZ2VyIEJTU0lEPSUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCQkJQnNzaWRbMF0sIEJzc2lkWzFdLCBCc3NpZFsyXSwgQnNzaWRbM10sIEJzc2lkWzRdLCBCc3NpZFs1XSkpOworCQkJCQlBc2ljRGlzYWJsZVN5bmMocEFkKTsKKwkJCQkJQ09QWV9NQUNfQUREUihwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgQnNzaWQpOworCQkJCQlBc2ljU2V0QnNzaWQocEFkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQkJCU1ha2VJYnNzQmVhY29uKHBBZCk7ICAgICAgICAvLyByZS1idWlsZCBCRUFDT04gZnJhbWUKKwkJCQkJQXNpY0VuYWJsZUlic3NTeW5jKHBBZCk7ICAgIC8vIGNvcHkgQkVBQ09OIGZyYW1lIHRvIG9uLWNoaXAgbWVtb3J5CisJCQkJCWlzX215X2Jzc2lkID0gVFJVRTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYgKEJzc2lkW2ldIDwgcEFkLT5Db21tb25DZmcuQnNzaWRbaV0pCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKworCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQlwQnNzID0gJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdOworCQlwQnNzLT5Sc3NpID0gUmVhbFJzc2k7ICAgICAgIC8vIGxhc3Rlc3QgUlNTSQorCQlwQnNzLT5MYXN0QmVhY29uUnhUaW1lID0gTm93OyAgIC8vIGxhc3QgUlggdGltZXN0YW1wCisKKwkJLy8KKwkJLy8gQkVBQ09OIGZyb20gbXkgQlNTSUQgLSBlaXRoZXIgSUJTUyBvciBJTkZSQSBuZXR3b3JrCisJCS8vCisJCWlmIChpc19teV9ic3NpZCkKKwkJeworCQkJUlhXSV9TVFJVQwlSeFdJOworCisJCQlwQWQtPlN0YUNmZy5EdGltQ291bnQgPSBEdGltQ291bnQ7CisJCQlwQWQtPlN0YUNmZy5EdGltUGVyaW9kID0gRHRpbVBlcmlvZDsKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RCZWFjb25SeFRpbWUgPSBOb3c7CisKKworCQkJUnhXSS5SU1NJMCA9IEVsZW0tPlJzc2kwOworCQkJUnhXSS5SU1NJMSA9IEVsZW0tPlJzc2kxOworCQkJUnhXSS5SU1NJMiA9IEVsZW0tPlJzc2kyOworCisJCQlVcGRhdGVfUnNzaV9TYW1wbGUocEFkLCAmcEFkLT5TdGFDZmcuUnNzaVNhbXBsZSwgJlJ4V0kpOworCQkJaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCAhPSAweEZGKQorCQkJeworCQkJCS8vCisJCQkJLy8gV2UgZ2V0IHRoZSBDaXNjbyAoY2N4KSAiVHhQb3dlciBMaW1pdCIgcmVxdWlyZWQKKwkJCQkvLyBDaGFuZ2VkIHRvIGFwcHJvcHJpYXRlIFR4UG93ZXIgTGltaXQgZm9yIENpc28gQ29tcGF0aWJsZSBFeHRlbnNpb25zCisJCQkJLy8KKwkJCQlDaGFuZ2VUb0NlbGxQb3dlckxpbWl0KHBBZCwgQWlyb25ldENlbGxQb3dlckxpbWl0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLworCQkJCS8vIEFpcm9uZXRDZWxsUG93ZXJMaW1pdCBlcXVhbCB0byAweEZGIG1lYW5zIHRoZSBDaXNjbyAoY2N4KSAiVHhQb3dlciBMaW1pdCIgbm90IGV4aXN0LgorCQkJCS8vIFVzZWQgdGhlIGRlZmF1bHQgVFggUG93ZXIgUGVyY2VudGFnZSwgdGhhdCBzZXQgZnJvbSBVSS4KKwkJCQkvLworCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQ7CisJCQl9CisKKwkJCWlmIChBREhPQ19PTihwQWQpICYmIChDQVBfSVNfSUJTU19PTihDYXBhYmlsaXR5SW5mbykpKQorCQkJeworCQkJCVVDSEFSCQkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IDA7CisJCQkJVUNIQVIJCQlpZHg7CisJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKwkJCQkvLyBzdXBwb3J0ZWQgcmF0ZXMgYXJyYXkgbWF5IG5vdCBiZSBzb3J0ZWQuIHNvcnQgaXQgYW5kIGZpbmQgdGhlIG1heGltdW0gcmF0ZQorCQkJICAgIGZvciAoaWR4PTA7IGlkeDxTdXBSYXRlTGVuOyBpZHgrKykKKwkJCQkJCXsKKwkJCSAgICAgICAgaWYgKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPCAoU3VwUmF0ZVtpZHhdICYgMHg3ZikpCisJCQkgICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gU3VwUmF0ZVtpZHhdICYgMHg3ZjsKKwkJCQkJCX0KKworCQkJCWZvciAoaWR4PTA7IGlkeDxFeHRSYXRlTGVuOyBpZHgrKykKKwkJCSAgICB7CisJCQkgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKEV4dFJhdGVbaWR4XSAmIDB4N2YpKQorCQkJICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IEV4dFJhdGVbaWR4XSAmIDB4N2Y7CisJCQkJCX0KKworCQkJCS8vIGxvb2sgdXAgdGhlIGV4aXN0aW5nIHRhYmxlCisJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBBZGRyMik7CisKKwkJCQkvLyBBZC1ob2MgbW9kZSBpcyB1c2luZyBNQUMgYWRkcmVzcyBhcyBCQSBzZXNzaW9uLiBTbyB3ZSBuZWVkIHRvIGNvbnRpbnVvdXNseSBmaW5kIG5ld2x5IGpvaW5lZCBhZGhvYyBzdGF0aW9uIGJ5IHJlY2VpdmluZyBiZWFjb24uCisJCQkJLy8gVG8gcHJldmVudCBhbHdheXMgY2hlY2sgdGhpcywgd2UgdXNlIHdjaWQgPT0gUkVTRVJWRURfV0NJRCB0byByZWNvZ25pemUgaXQgYXMgbmV3bHkgam9pbmVkIGFkaG9jIHN0YXRpb24uCisJCQkJaWYgKChBREhPQ19PTihwQWQpICYmIChFbGVtLT5XY2lkID09IFJFU0VSVkVEX1dDSUQpKSB8fAorCQkJCQkocEVudHJ5ICYmICgocEVudHJ5LT5MYXN0QmVhY29uUnhUaW1lICsgQURIT0NfRU5UUllfQkVBQ09OX0xPU1RfVElNRSkgPCBOb3cpKSkKKwkJCQkJCXsKKwkJCQkJaWYgKHBFbnRyeSA9PSBOVUxMKQorCQkJCQkJLy8gQW5vdGhlciBhZGhvYyBqb2luaW5nLCBhZGQgdG8gb3VyIE1BQyB0YWJsZS4KKwkJCQkJCXBFbnRyeSA9IE1hY1RhYmxlSW5zZXJ0RW50cnkocEFkLCBBZGRyMiwgQlNTMCwgRkFMU0UpOworCisJCQkJCWlmIChTdGFBZGRNYWNUYWJsZUVudHJ5KHBBZCwgcEVudHJ5LCBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzLCAmSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4sIENhcGFiaWxpdHlJbmZvKSA9PSBGQUxTRSkKKwkJCQkJeworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQURIT0MgLSBBZGQgRW50cnkgZmFpbGVkLlxuIikpOworCQkJCQkJcmV0dXJuOworCQkJCQl9CisKKwkJCQkJaWYgKHBFbnRyeSAmJgorCQkJCQkJKEVsZW0tPldjaWQgPT0gUkVTRVJWRURfV0NJRCkpCisJCQkJeworCQkJCQkJaWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCQkJCQkJUlQyOFhYX1NUQV9TRUNVUklUWV9JTkZPX0FERChwQWQsIEJTUzAsIGlkeCwgcEVudHJ5KTsKKwkJCQl9CisJCQkJfQorCisJCQkJaWYgKHBFbnRyeSAmJiBwRW50cnktPlZhbGlkQXNDTEkpCisJCQkJCXBFbnRyeS0+TGFzdEJlYWNvblJ4VGltZSA9IE5vdzsKKworCQkJCS8vIEF0IGxlYXN0IGFub3RoZXIgcGVlciBpbiB0aGlzIElCU1MsIGRlY2xhcmUgTWVkaWFTdGF0ZSBhcyBDT05ORUNURUQKKwkJCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQl7CisJCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCisJCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisJICAgICAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOworCQkJCQlBc2ljU2V0QnNzaWQocEFkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisKKwkJCQkJLy8gMjAwMy8wMy8xMiAtIGpvaG4KKwkJCQkJLy8gTWFrZSBzdXJlIHRoaXMgZW50cnkgaW4gIlNjYW5UYWIiIHRhYmxlLCB0aHVzIGNvbXBsaWVzIHRvIE1pY3Jvc29mdCdzIHBvbGljeSB0aGF0CisJCQkJCS8vICJzaXRlIHN1cnZleSIgcmVzdWx0IHNob3VsZCBhbHdheXMgaW5jbHVkZSB0aGUgY3VycmVudCBjb25uZWN0ZWQgbmV0d29yay4KKwkJCQkJLy8KKwkJCQkJQnNzaWR4ID0gQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgQnNzaWQsIENoYW5uZWwpOworCQkJCQlpZiAoQnNzaWR4ID09IEJTU19OT1RfRk9VTkQpCisJCQkJCXsKKwkJCQkJCUJzc2lkeCA9IEJzc1RhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TY2FuVGFiLCBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLAorCQkJCQkJCQkJJkNmUGFybSwgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4sICZIdENhcGFiaWxpdHksCisJCQkJCQkJCQkmQWRkSHRJbmZvLCBIdENhcGFiaWxpdHlMZW4sIEFkZEh0SW5mb0xlbiwgTmV3RXh0Q2hhbm5lbE9mZnNldCwgQ2hhbm5lbCwgUmVhbFJzc2ksIFRpbWVTdGFtcCwgMCwKKwkJCQkJCQkJCSZFZGNhUGFybSwgJlFvc0NhcGFiaWxpdHksICZRYnNzTG9hZCwgTGVuVklFLCBwVklFKTsKKwkJCQkJfQorCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBREhPQyAgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQuXG4iKSk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJCXsKKwkJCQlCT09MRUFOIGJVc2VTaG9ydFNsb3QsIGJVc2VCR1Byb3RlY3Rpb247CisKKwkJCQkvLyBkZWNpZGUgdG8gdXNlL2NoYW5nZSB0byAtCisJCQkJLy8gICAgICAxLiBsb25nIHNsb3QgKDIwIHVzKSBvciBzaG9ydCBzbG90ICg5IHVzKSB0aW1lCisJCQkJLy8gICAgICAyLiB0dXJuIG9uL29mZiBSVFMvQ1RTIGFuZC9vciBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uCisJCQkJLy8gICAgICAzLiBzaG9ydCBwcmVhbWJsZQorCisJCQkJLy9iVXNlU2hvcnRTbG90ID0gcEFkLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUgJiYgQ0FQX0lTX1NIT1JUX1NMT1QoQ2FwYWJpbGl0eUluZm8pOworCQkJCWJVc2VTaG9ydFNsb3QgPSBDQVBfSVNfU0hPUlRfU0xPVChDYXBhYmlsaXR5SW5mbyk7CisJCQkJaWYgKGJVc2VTaG9ydFNsb3QgIT0gT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9TTE9UX0lOVVNFRCkpCisJCQkJCUFzaWNTZXRTbG90VGltZShwQWQsIGJVc2VTaG9ydFNsb3QpOworCisJCQkJYlVzZUJHUHJvdGVjdGlvbiA9IChwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPT0gMSkgfHwgICAgLy8gYWx3YXlzIHVzZQorCQkJCQkJCQkgICAoKHBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9PSAwKSAmJiBFUlBfSVNfVVNFX1BST1RFQ1RJT04oRXJwKSk7CisKKwkJCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KSAvLyBhbHdheXMgbm8gQkcgcHJvdGVjdGlvbiBpbiBBLWJhbmQuIGZhbHNlbHkgaGFwcGVuZWQgd2hlbiBzd2l0Y2hpbmcgQS9HIGJhbmQgdG8gYSBkdWFsLWJhbmQgQVAKKwkJCQkJYlVzZUJHUHJvdGVjdGlvbiA9IEZBTFNFOworCisJCQkJaWYgKGJVc2VCR1Byb3RlY3Rpb24gIT0gT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCkpCisJCQkJeworCQkJCQlpZiAoYlVzZUJHUHJvdGVjdGlvbikKKwkJCQkJeworCQkJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0JHX1BST1RFQ1RJT05fSU5VU0VEKTsKKwkJCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgKE9GRE1TRVRQUk9URUNUfENDS1NFVFBST1RFQ1R8QUxMTl9TRVRQUk9URUNUKSxGQUxTRSwocEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9PSAxKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCk7CisJCQkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUsIChPRkRNU0VUUFJPVEVDVHxDQ0tTRVRQUk9URUNUfEFMTE5fU0VUUFJPVEVDVCksVFJVRSwocEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9PSAxKSk7CisJCQkJCX0KKworCQkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlNZTkMgLSBBUCBjaGFuZ2VkIEIvRyBwcm90ZWN0aW9uIHRvICVkXG4iLCBiVXNlQkdQcm90ZWN0aW9uKSk7CisJCQkJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJLy8gY2hlY2sgSHQgcHJvdGVjdGlvbiBtb2RlLiBhbmQgYWRoZXJlIHRvIHRoZSBOb24tR0YgZGV2aWNlIGluZGljYXRpb24gYnkgQVAuCisJCQkJaWYgKChBZGRIdEluZm9MZW4gIT0gMCkgJiYKKwkJCQkJKChBZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUgIT0gcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSkgfHwKKwkJCQkJKEFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCAhPSBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KSkpCisJCQkJeworCQkJCQlwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50ID0gQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50OworCQkJCQlwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlID0gQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlOworCQkJCQlpZiAocEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9PSAxKQorCQkJCXsKKwkJCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgVFJVRSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCBBTExOX1NFVFBST1RFQ1QsIEZBTFNFLCBGQUxTRSk7CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEFQIGNoYW5nZWQgTiBPcGVyYWlvbk1vZGUgdG8gJWRcbiIsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUpKTsKKwkJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpICYmCisJCQkJCUVSUF9JU19VU0VfQkFSS0VSX1BSRUFNQkxFKEVycCkpCisJCQkJeworCQkJCQlNbG1lU2V0VHhQcmVhbWJsZShwQWQsIFJ0ODAyXzExUHJlYW1ibGVMb25nKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEFQIGZvcmNlZCB0byB1c2UgTE9ORyBwcmVhbWJsZVxuIikpOworCQkJCX0KKworCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICAgICYmCisJCQkJCShFZGNhUGFybS5iVmFsaWQgPT0gVFJVRSkgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisJCQkJCShFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQgIT0gcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQpKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEFQIGNoYW5nZSBFRENBIHBhcmFtZXRlcnMoZnJvbSAlZCB0byAlZClcbiIsCisJCQkJCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkVkY2FVcGRhdGVDb3VudCwKKwkJCQkJCUVkY2FQYXJtLkVkY2FVcGRhdGVDb3VudCkpOworCQkJCQlBc2ljU2V0RWRjYVBhcm0ocEFkLCAmRWRjYVBhcm0pOworCQkJCX0KKworCQkJCS8vIGNvcHkgUU9TIHJlbGF0ZWQgaW5mb3JtYXRpb24KKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5Db21tb25DZmcuQVBRYnNzTG9hZCwgJlFic3NMb2FkLCBzaXplb2YoUUJTU19MT0FEX1BBUk0pKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5Db21tb25DZmcuQVBRb3NDYXBhYmlsaXR5LCAmUW9zQ2FwYWJpbGl0eSwgc2l6ZW9mKFFPU19DQVBBQklMSVRZX1BBUk0pKTsKKwkJCX0KKworCQkJLy8gb25seSBJTkZSQVNUUlVDVFVSRSBtb2RlIHN1cHBvcnQgcG93ZXItc2F2aW5nIGZlYXR1cmUKKwkJCWlmICgoSU5GUkFfT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSkgfHwgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpKQorCQkJeworCQkJCVVDSEFSIEZyZWVOdW1iZXI7CisJCQkJLy8gIDEuIEFQIGhhcyBiYWNrbG9nZ2VkIHVuaWNhc3QtdG8tbWUgZnJhbWUsIHN0YXkgQVdBS0UsIHNlbmQgUFNQT0xMCisJCQkJLy8gIDIuIEFQIGhhcyBiYWNrbG9nZ2VkIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWUgYW5kIHdlIHdhbnQgdGhvc2UgZnJhbWVzLCBzdGF5IEFXQUtFCisJCQkJLy8gIDMuIHdlIGhhdmUgb3V0Z29pbmcgZnJhbWVzIGluIFR4UmluZyBvciBNZ210UmluZywgYmV0dGVyIHN0YXkgQVdBS0UKKwkJCQkvLyAgNC4gUHNtIGNoYW5nZSB0byBQV1JfU0FWRSwgYnV0IEFQIG5vdCBiZWVuIGluZm9ybWVkIHlldCwgd2UgYmV0dGVyIHN0YXkgQVdBS0UKKwkJCQkvLyAgNS4gb3RoZXJ3aXNlLCBwdXQgUEhZIGJhY2sgdG8gc2xlZXAgdG8gc2F2ZSBiYXR0ZXJ5LgorCQkJCWlmIChNZXNzYWdlVG9NZSkKKwkJCQl7CisJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUgJiYKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkUgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CSyAmJiBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJICYmIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8pCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJOZWVkU2VuZFRyaWdnZXJGcmFtZSA9IFRSVUU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJUlQyOFhYX1BTX1BPTExfRU5RVUVVRShwQWQpOworCQkJCX0KKwkJCQllbHNlIGlmIChCY2FzdEZsYWcgJiYgKER0aW1Db3VudCA9PSAwKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSkpCisJCQkJeworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5OdW1iZXIgIT0gMCkJCQkJCQkJCQkJCQkJfHwKKwkJCQkJCShwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdLk51bWJlciAhPSAwKQkJCQkJCQkJCQkJCQkJfHwKKwkJCQkJCShwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVkldLk51bWJlciAhPSAwKQkJCQkJCQkJCQkJCQkJfHwKKwkJCQkJCShwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVk9dLk51bWJlciAhPSAwKQkJCQkJCQkJCQkJCQkJfHwKKwkJCQkJCShSVE1QRnJlZVRYRFJlcXVlc3QocEFkLCBRSURfQUNfQkssIFRYX1JJTkdfU0laRSAtIDEsICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQl8fAorCQkJCQkJKFJUTVBGcmVlVFhEUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgVFhfUklOR19TSVpFIC0gMSwgJkZyZWVOdW1iZXIpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCXx8CisJCQkJCQkoUlRNUEZyZWVUWERSZXF1ZXN0KHBBZCwgUUlEX0FDX1ZJLCBUWF9SSU5HX1NJWkUgLSAxLCAmRnJlZU51bWJlcikgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykJfHwKKwkJCQkJCShSVE1QRnJlZVRYRFJlcXVlc3QocEFkLCBRSURfQUNfVk8sIFRYX1JJTkdfU0laRSAtIDEsICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQl8fAorCQkJCQkJKFJUTVBGcmVlVFhEUmVxdWVzdChwQWQsIFFJRF9NR01ULCBNR01UX1JJTkdfU0laRSAtIDEsICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKSkKKwkJCQl7CisJCQkJCS8vIFRPRE86IGNvbnNpZGVyIHNjaGVkdWxlZCBIQ0NBLiBtaWdodCBub3QgYmUgcHJvcGVyIHRvIHVzZSB0cmFkaXRpb25hbCBEVElNLWJhc2VkIHBvd2VyLXNhdmluZyBzY2hlbWUKKwkJCQkJLy8gY2FuIHdlIGNoZWF0IGhlcmUgKGkuZS4ganVzdCBjaGVjayBNR01UICYgQUNfQkUpIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2U/CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVVTSE9SVCBOZXh0RHRpbSA9IER0aW1Db3VudDsKKworCQkJCQlpZiAoTmV4dER0aW0gPT0gMCkKKwkJCQkJCU5leHREdGltID0gRHRpbVBlcmlvZDsKKworCQkJCQlUYnR0TnVtVG9OZXh0V2FrZVVwID0gcEFkLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50OworCQkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19SRUNFSVZFX0RUSU0pICYmIChUYnR0TnVtVG9OZXh0V2FrZVVwID4gTmV4dER0aW0pKQorCQkJCQkJVGJ0dE51bVRvTmV4dFdha2VVcCA9IE5leHREdGltOworCisJCQkJCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwkJCQkJeworCQkJCQkJQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkvLyBub3QgbXkgQlNTSUQsIGlnbm9yZSBpdAorCX0KKwkvLyBzYW5pdHkgY2hlY2sgZmFpbCwgaWdub3JlIHRoaXMgZnJhbWUKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlSZWNlaXZlIFBST0JFIFJFUSBmcm9tIHJlbW90ZSBwZWVyIHdoZW4gb3BlcmF0aW5nIGluIElCU1MgbW9kZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlclByb2JlUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUiAgICAgICAgIEFkZHIyW01BQ19BRERSX0xFTl07CisJQ0hBUiAgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07CisJVUNIQVIgICAgICAgICBTc2lkTGVuOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCVVDSEFSCQkgIEh0TGVuLCBBZGRIdExlbiwgTmV3RXh0TGVuOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCUhFQURFUl84MDJfMTEgUHJvYmVSc3BIZHI7CisJTkRJU19TVEFUVVMgICBOU3RhdHVzOworCVBVQ0hBUiAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUxPTkcgICAgICAgICBGcmFtZUxlbiA9IDA7CisJTEFSR0VfSU5URUdFUiBGYWtlVGltZXN0YW1wOworCVVDSEFSICAgICAgICAgRHNMZW4gPSAxLCBJYnNzTGVuID0gMjsKKwlVQ0hBUiAgICAgICAgIExvY2FsRXJwSWVbM10gPSB7SUVfRVJQLCAxLCAwfTsKKwlCT09MRUFOICAgICAgIFByaXZhY3k7CisJVVNIT1JUICAgICAgICBDYXBhYmlsaXR5SW5mbzsKKwlVQ0hBUgkJICBSU05JZSA9IElFX1dQQTsKKworCWlmICghIEFESE9DX09OKHBBZCkpCisJCXJldHVybjsKKworCWlmIChQZWVyUHJvYmVSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsIFNzaWQsICZTc2lkTGVuKSkKKwl7CisJCWlmICgoU3NpZExlbiA9PSAwKSB8fCBTU0lEX0VRVUFMKFNzaWQsIFNzaWRMZW4sIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pKQorCQl7CisJCQkvLyBhbGxvY2F0ZSBhbmQgc2VuZCBvdXQgUHJvYmVSc3AgZnJhbWUKKwkJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCXJldHVybjsKKworCQkJLy9wQWQtPlN0YUNmZy5BdGltV2luID0gMDsgIC8vID8/Pz8/PworCisJCQlQcml2YWN5ID0gKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSB8fAorCQkJCQkgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgfHwKKwkJCQkJICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpOworCQkJQ2FwYWJpbGl0eUluZm8gPSBDQVBfR0VORVJBVEUoMCwgMSwgUHJpdmFjeSwgKHBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0KSwgMCwgMCk7CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgICAgICZQcm9iZVJzcEhkciwKKwkJCQkJCQkgIFRJTUVTVEFNUF9MRU4sICAgICAgICAgICAgICAgICZGYWtlVGltZXN0YW1wLAorCQkJCQkJCSAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCwKKwkJCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5mbywKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuU3NpZExlbiwKKwkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4sCisJCQkJCQkJICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuLCAgICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRzSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRHNMZW4sCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJYnNzSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSWJzc0xlbiwKKwkJCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlN0YUFjdGl2ZS5BdGltV2luLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCisJCQlpZiAocEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbikKKwkJCXsKKwkJCQlVTE9ORyB0bXA7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgJnRtcCwKKwkJCQkJCQkJICAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbEVycEllLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlSWUsCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4sCisJCQkJCQkJCSAgcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbiwgICAgJnBBZC0+U3RhQWN0aXZlLkV4dFJhdGUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IHRtcDsKKwkJCX0KKworCQkJLy8gSWYgYWRob2Mgc2VjcnVpdHkgaXMgc2V0IGZvciBXUEEtTm9uZSwgYXBwZW5kIHRoZSBjaXBoZXIgc3VpdGUgSUUKKwkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQkJeworCQkJCVVMT05HIHRtcDsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAJJnRtcCwKKwkJCQkJCSAgCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUlNOSWUsCisJCQkJCQkgIAkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkmcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAorCQkJCQkJICAJCQlwQWQtPlN0YUNmZy5SU05JRV9MZW4sICAgICAgCXBBZC0+U3RhQ2ZnLlJTTl9JRSwKKwkJCQkJCSAgCQkJRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IHRtcDsKKwkJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCQl7CisJCQkJVUxPTkcgVG1wTGVuOworCQkJCVVDSEFSCUJST0FEQ09NWzRdID0gezB4MCwgMHg5MCwgMHg0YywgMHgzM307CisJCQkJSHRMZW4gPSBzaXplb2YocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5KTsKKwkJCQlBZGRIdExlbiA9IHNpemVvZihwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8pOworCQkJCU5ld0V4dExlbiA9IDE7CisJCQkJLy9OZXcgZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IElFIGlzIGluY2x1ZGVkIGluIEJlYWNvbiwgUHJvYmUgUnNwIG9yIGNoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBGcmFtZQorCQkJCWlmIChwQWQtPmJCcm9hZENvbUhUID09IFRSVUUpCisJCQkJeworCQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJldwYUllLAorCQkJCQkJCQkgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQlJPQURDT01bMF0sCisJCQkJCQkJCSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXBMZW4sCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdENhcEllLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRMZW4sCisJCQkJCQkJCSBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSksICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBZGRIdEluZm9JZSwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFkZEh0TGVuLAorCQkJCQkJCQkgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSwgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbywKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk5ld0V4dENoYW5JZSwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk5ld0V4dExlbiwKKwkJCQkJCQkJIHNpemVvZihORVdfRVhUX0NIQU5fSUUpLCAgICAgICAgICAmcEFkLT5Db21tb25DZmcuTmV3RXh0Q2hhbk9mZnNldCwKKwkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQkJfQorCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJfQorCX0KK30KKworVk9JRCBCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uXG4iKSk7CisJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1JFSl9USU1FT1VUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9KT0lOX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVNjYW4gdGltZW91dCBwcm9jZWR1cmUuIGJhc2ljYWxseSBhZGQgY2hhbm5lbCBpbmRleCBieSAxIGFuZCByZXNjYW4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFNjYW5UaW1lb3V0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IE5leHRDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpOworCisJLy8gT25seSBvbmUgY2hhbm5lbCBzY2FubmVkIGZvciBDSVNDTyBiZWFjb24gcmVxdWVzdAorCWlmICgocEFkLT5NbG1lQXV4LlNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQUNUSVZFKSB8fAorCQkocEFkLT5NbG1lQXV4LlNjYW5UeXBlID09IFNDQU5fQ0lTQ09fUEFTU0lWRSkgfHwKKwkJKHBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX05PSVNFKSB8fAorCQkocEFkLT5NbG1lQXV4LlNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKSkKKwkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSAwOworCisJLy8gdGhpcyByb3V0aW5lIHdpbGwgc3RvcCBpZiBwQWQtPk1sbWVBdXguQ2hhbm5lbCA9PSAwCisJU2Nhbk5leHRDaGFubmVsKHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEludmFsaWRTdGF0ZVdoZW5TY2FuKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFZTkMgLSBJbnZhbGlkU3RhdGVXaGVuU2NhbihzdGF0ZT0lbGQpLiBSZXNldCBTWU5DIG1hY2hpbmVcbiIsIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOworCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NDQU5fQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEludmFsaWRTdGF0ZVdoZW5Kb2luKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkludmFsaWRTdGF0ZVdoZW5Kb2luKHN0YXRlPSVsZCkuIFJlc2V0IFNZTkMgbWFjaGluZVxuIiwgcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSkpOworCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfSk9JTl9DT05GLCAyLCAmU3RhdHVzKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgSW52YWxpZFN0YXRlV2hlblN0YXJ0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkludmFsaWRTdGF0ZVdoZW5TdGFydChzdGF0ZT0lbGQpLiBSZXNldCBTWU5DIG1hY2hpbmVcbiIsIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOworCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NUQVJUX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZVBzUG9sbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyNpZmRlZiBSQUxJTktfQVRFCisgICAgaWYgKEFURV9PTihwQWQpKQorICAgIHsKKwkJcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKworCWlmIChwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID09IE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQKQorICAgIAlwQWQtPlBzUG9sbEZyYW1lLkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIChQVUNIQVIpJnBBZC0+UHNQb2xsRnJhbWUsIHNpemVvZihQU1BPTExfRlJBTUUpKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlUHJvYmVSZXF1ZXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5ESVNfU1RBVFVTICAgICBOU3RhdGU7CisJUFVDSEFSICAgICAgICAgIHBPdXRCdWZmZXI7CisJVUxPTkcgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlIRUFERVJfODAyXzExICAgSGRyODAyMTE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJmb3JjZSBvdXQgYSBQcm9iZVJlcXVlc3QgLi4uXG4iKSk7CisKKwlOU3RhdGUgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYgKE5TdGF0ZSA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJTWd0TWFjSGVhZGVySW5pdChwQWQsICZIZHI4MDIxMSwgU1VCVFlQRV9QUk9CRV9SRVEsIDAsIEJST0FEQ0FTVF9BRERSLCBCUk9BRENBU1RfQUREUik7CisKKwkJLy8gdGhpcyBQcm9iZVJlcXVlc3QgZXhwbGljaXRseSBzcGVjaWZ5IFNTSUQgdG8gcmVkdWNlIHVud2FudGVkIFByb2JlUmVzcG9uc2UKKwkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgICAgICAgJkhkcjgwMjExLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sCisJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVJZSwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwKKwkJCQkJCSAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwgICAgICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCX0KKworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjaWZkZWYgRE9UMTFOX0RSQUZUMworVk9JRCBCdWlsZEVmZmVjdGVkQ2hhbm5lbExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUNIQVIJCUVDaGFubmVsWzExXTsKKwlVQ0hBUgkJaSwgaiwgazsKKwlVQ0hBUgkJVXBwZXJDaGFubmVsID0gMCwgTG93ZXJDaGFubmVsID0gMDsKKworCVJUTVBaZXJvTWVtb3J5KEVDaGFubmVsLCAxMSk7CisJaSA9IDA7CisJLy8gRmluZCB1cHBlciBjaGFubmVsIGFuZCBsb3dlciBjaGFubmVsLgorCWlmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA8IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJeworCQlVcHBlckNoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQlMb3dlckNoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbDsKKwl9CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPiBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCXsKKwkJVXBwZXJDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWw7CisJCUxvd2VyQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJfQorCWVsc2UKKwl7CisJCXJldHVybjsKKwl9CisKKwkvLyBSZWNvcmQgY2hhbm5lbHMgdGhhdCBpcyBiZWxvdyBsb3dlciBjaGFubmVsLi4KKwlpZiAoTG93ZXJDaGFubmVsID4gMSkKKwl7CisJCUVDaGFubmVsWzBdID0gTG93ZXJDaGFubmVsIC0gMTsKKwkJaSA9IDE7CisJCWlmIChMb3dlckNoYW5uZWwgPiAyKQorCQl7CisJCQlFQ2hhbm5lbFsxXSA9IExvd2VyQ2hhbm5lbCAtIDI7CisJCQlpID0gMjsKKwkJCWlmIChMb3dlckNoYW5uZWwgPiAzKQorCQkJeworCQkJCUVDaGFubmVsWzJdID0gTG93ZXJDaGFubmVsIC0gMzsKKwkJCQlpID0gMzsKKwkJCX0KKwkJfQorCX0KKwkvLyBSZWNvcmQgY2hhbm5lbHMgdGhhdCBpcyBiZXR3ZWVuICBsb3dlciBjaGFubmVsIGFuZCB1cHBlciBjaGFubmVsLgorCWZvciAoayA9IExvd2VyQ2hhbm5lbDtrIDwgVXBwZXJDaGFubmVsO2srKykKKwl7CisJCUVDaGFubmVsW2ldID0gazsKKwkJaSsrOworCX0KKwkvLyBSZWNvcmQgY2hhbm5lbHMgdGhhdCBpcyBhYm92ZSB1cHBlciBjaGFubmVsLi4KKwlpZiAoTG93ZXJDaGFubmVsIDwgMTEpCisJeworCQlFQ2hhbm5lbFtpXSA9IFVwcGVyQ2hhbm5lbCArIDE7CisJCWkrKzsKKwkJaWYgKExvd2VyQ2hhbm5lbCA8IDEwKQorCQl7CisJCQlFQ2hhbm5lbFtpXSA9IExvd2VyQ2hhbm5lbCArIDI7CisJCQlpKys7CisJCQlpZiAoTG93ZXJDaGFubmVsIDwgOSkKKwkJCXsKKwkJCQlFQ2hhbm5lbFtpXSA9IExvd2VyQ2hhbm5lbCArIDM7CisJCQkJaSsrOworCQkJfQorCQl9CisJfQorCS8vCisJZm9yIChqID0gMDtqIDwgaTtqKyspCisJeworCQlmb3IgKGsgPSAwO2sgPCBwQWQtPkNoYW5uZWxMaXN0TnVtO2srKykKKwkJeworCQkJaWYgKHBBZC0+Q2hhbm5lbExpc3Rba10uQ2hhbm5lbCA9PSBFQ2hhbm5lbFtqXSkKKwkJCXsKKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2tdLmJFZmZlY3RlZENoYW5uZWwgPSBUUlVFOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiIEVmZmVjdGVkQ2hhbm5lbCggPSVkKVxuIiwgRUNoYW5uZWxbal0pKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK0JPT0xFQU4gU2NhblJ1bm5pbmcoCisJCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCXJldHVybiAocEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9PSBTQ0FOX0xJU1RFTikgPyBUUlVFIDogRkFMU0U7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvd3BhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkMDgzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3dwYS5jCkBAIC0wLDAgKzEsMjA5OSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwl3cGEuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUphbglMZWUJCTAzLTA3LTIyCQlJbml0aWFsCisJUGF1bCBMaW4JMDMtMTEtMjgJCU1vZGlmeSBmb3Igc3VwcGxpY2FudAorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworI2RlZmluZQkJV1BBUlNOSUUJMHhkZAorI2RlZmluZQkJV1BBMlJTTklFCTB4MzAKKworLy9leHRlcm4gVUNIQVIgQklUOFtdOworVUNIQVIJQ2lwaGVyV3BhUHNrVGtpcFtdID0geworCQkweERELCAweDE2LAkJCQkvLyBSU04gSUUKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwJLy8gb3VpCisJCTB4MDEsIDB4MDAsCQkJCS8vIFZlcnNpb24KKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwJLy8gTXVsdGljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIE51bWJlciBvZiB1bmljYXN0CisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIHVuaWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyCS8vIGF1dGhlbnRpY2F0aW9uCisJCX07CitVQ0hBUglDaXBoZXJXcGFQc2tUa2lwTGVuID0gKHNpemVvZihDaXBoZXJXcGFQc2tUa2lwKSAvIHNpemVvZihVQ0hBUikpOworCitVQ0hBUglDaXBoZXJXcGFQc2tBZXNbXSA9IHsKKwkJMHhERCwgMHgxNiwgCQkJLy8gUlNOIElFCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDQsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMgkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyV3BhUHNrQWVzTGVuID0gKHNpemVvZihDaXBoZXJXcGFQc2tBZXMpIC8gc2l6ZW9mKFVDSEFSKSk7CisKK1VDSEFSCUNpcGhlclN1aXRlQ2lzY29DQ0tNW10gPSB7CisJCTB4REQsIDB4MTYsCQkJCS8vIFJTTiBJRQorCQkweDAwLCAweDUwLCAweGYyLCAweDAxLCAvLyBvdWkKKwkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbgorCQkweDAwLCAweDQwLCAweDk2LCAweDAxLCAvLyBNdWx0aWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gTnVtYmVyIG9mIHVpY2FzdAorCQkweDAwLCAweDQwLCAweDk2LCAweDAxLCAvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg0MCwgMHg5NiwgMHgwMCAgLy8gQXV0aGVudGljYXRpb24KKwkJfTsKK1VDSEFSCUNpcGhlclN1aXRlQ2lzY29DQ0tNTGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZUNpc2NvQ0NLTSkgLyBzaXplb2YoVUNIQVIpKTsKKworVUNIQVIJQ2lwaGVyU3VpdGVDaXNjb0NDS00yNFtdID0geworCQkweERELCAweDE4LAkJCQkvLyBSU04gSUUKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwgLy8gb3VpCisJCTB4MDEsIDB4MDAsCQkJCS8vIFZlcnNpb24KKwkJMHgwMCwgMHg0MCwgMHg5NiwgMHgwMSwgLy8gTXVsdGljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIE51bWJlciBvZiB1aWNhc3QKKwkJMHgwMCwgMHg0MCwgMHg5NiwgMHgwMSwgLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4NDAsIDB4OTYsIDB4MDAsCisJCTB4MjgsIDB4MDAvLyBBdXRoZW50aWNhdGlvbgorCQl9OworCitVQ0hBUglDaXBoZXJTdWl0ZUNpc2NvQ0NLTTI0TGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZUNpc2NvQ0NLTTI0KSAvIHNpemVvZihVQ0hBUikpOworCitVQ0hBUglDaXBoZXJTdWl0ZUNDWFRraXBbXSA9IHsKKwkJMHhERCwgMHgxNiwJCQkJLy8gUlNOIElFCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMQkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyU3VpdGVDQ1hUa2lwTGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZUNDWFRraXApIC8gc2l6ZW9mKFVDSEFSKSk7CisKK1VDSEFSCUNDWF9MTENfSERSW10gPSB7MHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMn07CitVQ0hBUglMTENfTk9STUFMW10gPSB7MHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07CisKK1VDSEFSCUVBUE9MX0ZSQU1FW10gPSB7MHg4OCwgMHg4RX07CisKK0JPT0xFQU4gQ2hlY2tSU05JRSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEYXRhLAorCUlOICBVQ0hBUiAgICAgICAgICAgRGF0YUxlbiwKKwlPVVQJVUNIQVIJCQkqT2Zmc2V0KTsKKwordm9pZCBpbmNfYnl0ZV9hcnJheShVQ0hBUiAqY291bnRlciwgaW50IGxlbik7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDbGFzc2lmeSBXUEEgRUFQIG1lc3NhZ2UgdHlwZQorCisJQXJndW1lbnRzOgorCQlFQVBUeXBlCQlWYWx1ZSBvZiBFQVAgbWVzc2FnZSB0eXBlCisJCU1zZ1R5cGUJCUludGVybmFsIE1lc3NhZ2UgZGVmaW5pdGlvbiBmb3IgTUxNRSBzdGF0ZSBtYWNoaW5lCisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUJCUZvdW5kIGFwcHJvcHJpYXRlIG1lc3NhZ2UgdHlwZQorCQlGQUxTRQkJTm8gYXBwcm9wcmlhdGUgbWVzc2FnZSB0eXBlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCUFsbCB0aGVzZSBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gd3BhLmgKKwkJRm9yIHN1cHBsaWNhbnQsIHRoZXJlIGlzIG9ubHkgRUFQT0wgS2V5IG1lc3NhZ2UgYXZhbGlhYmxlCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOCVdwYU1zZ1R5cGVTdWJzdCgKKwlJTglVQ0hBUglFQVBUeXBlLAorCU9VVAlJTlQJCSpNc2dUeXBlKQoreworCXN3aXRjaCAoRUFQVHlwZSkKKwl7CisJCWNhc2UgRUFQUGFja2V0OgorCQkJKk1zZ1R5cGUgPSBNVDJfRUFQUGFja2V0OworCQkJYnJlYWs7CisJCWNhc2UgRUFQT0xTdGFydDoKKwkJCSpNc2dUeXBlID0gTVQyX0VBUE9MU3RhcnQ7CisJCQlicmVhazsKKwkJY2FzZSBFQVBPTExvZ29mZjoKKwkJCSpNc2dUeXBlID0gTVQyX0VBUE9MTG9nb2ZmOworCQkJYnJlYWs7CisJCWNhc2UgRUFQT0xLZXk6CisJCQkqTXNnVHlwZSA9IE1UMl9FQVBPTEtleTsKKwkJCWJyZWFrOworCQljYXNlIEVBUE9MQVNGQWxlcnQ6CisJCQkqTXNnVHlwZSA9IE1UMl9FQVBPTEFTRkFsZXJ0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRkFMU0U7CisJfQorCXJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCWFzc29jaWF0aW9uCXN0YXRlIG1hY2hpbmUgaW5pdCwJaW5jbHVkaW5nIHN0YXRlCXRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKKwlQYXJhbWV0ZXJzOgorCQlTIC0JcG9pbnRlcgl0byB0aGUgYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgV3BhUHNrU3RhdGVNYWNoaW5lSW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglTVEFURV9NQUNISU5FICpTLAorCU9VVAlTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKwlTdGF0ZU1hY2hpbmVJbml0KFMsCVRyYW5zLCBNQVhfV1BBX1BTS19TVEFURSwgTUFYX1dQQV9QU0tfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIFdQQV9QU0tfSURMRSwgV1BBX01BQ0hJTkVfQkFTRSk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFdQQV9QU0tfSURMRSwgTVQyX0VBUE9MS2V5LCAoU1RBVEVfTUFDSElORV9GVU5DKVdwYUVBUE9MS2V5QWN0aW9uKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIGlzCXN0YXRlIG1hY2hpbmUgZnVuY3Rpb24uCisJCVdoZW4gcmVjZWl2aW5nIEVBUE9MIHBhY2tldHMgd2hpY2ggaXMgIGZvciA4MDIuMXgga2V5IG1hbmFnZW1lbnQuCisJCVVzZQlib3RoIGluCVdQQSwgYW5kIFdQQVBTSwljYXNlLgorCQlJbiB0aGlzCWZ1bmN0aW9uLCBmdXJ0aGVyIGRpc3BhdGNoIHRvIGRpZmZlcmVudAlmdW5jdGlvbnMgYWNjb3JkaW5nCXRvIHRoZSByZWNlaXZlZAlwYWNrZXQuCSAzIGNhdGVnb3JpZXMgYXJlIDoKKwkJICAxLiAgbm9ybWFsIDQtd2F5IHBhaXJ3aXNla2V5IGFuZCAyLXdheSBncm91cGtleSBoYW5kc2hha2UKKwkJICAyLiAgTUlDIGVycm9yCShDb3VudGVybWVhc3VyZXMgYXR0YWNrKSAgcmVwb3J0IHBhY2tldAlmcm9tIFNUQS4KKwkJICAzLiAgUmVxdWVzdCBmb3IgcGFpcndpc2UvZ3JvdXAga2V5IHVwZGF0ZQlmcm9tIFNUQQorCVJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgV3BhRUFQT0xLZXlBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUxNRV9RVUVVRV9FTEVNCSpFbGVtKQorCit7CisJSU5UICAgICAgICAgICAgIE1zZ1R5cGUgPSBFQVBPTF9NU0dfSU5WQUxJRDsKKwlQS0VZX0RFU0NSSVBURVIgcEtleURlc2M7CisJUEhFQURFUl84MDJfMTEgIHBIZWFkZXI7IC8vcmVkCisJVUNIQVIgICAgICAgICAgIFplcm9SZXBsYXlbTEVOX0tFWV9ERVNDX1JFUExBWV07CisJVUNIQVIgRWFwb2xWcjsKKwlLRVlfSU5GTwkJcGVlcktleUluZm87CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0tLT4gV3BhRUFQT0xLZXlBY3Rpb25cbiIpKTsKKworCS8vIEdldCA4MDIuMTEgaGVhZGVyIGZpcnN0CisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgRWxlbS0+TXNnOworCisJLy8gR2V0IEVBUG9MLUtleSBEZXNjcmlwdG9yCisJcEtleURlc2MgPSAoUEtFWV9ERVNDUklQVEVSKSAmRWxlbS0+TXNnWyhMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0ggKyBMRU5HVEhfRUFQT0xfSCldOworCisJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikmcGVlcktleUluZm8sIHNpemVvZihwZWVyS2V5SW5mbykpOworCU5kaXNNb3ZlTWVtb3J5KChQVUNIQVIpJnBlZXJLZXlJbmZvLCAoUFVDSEFSKSZwS2V5RGVzYy0+S2V5SW5mbywgc2l6ZW9mKEtFWV9JTkZPKSk7CisKKwkqKChVU0hPUlQgKikmcGVlcktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJnBlZXJLZXlJbmZvKSk7CisKKworCS8vIDEuIENoZWNrIEVBUE9MIGZyYW1lIHZlcnNpb24gYW5kIHR5cGUKKwlFYXBvbFZyCT0gKFVDSEFSKSBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMStMRU5HVEhfODAyXzFfSF07CisKKyAgICBpZiAoKChFYXBvbFZyICE9IEVBUE9MX1ZFUikgJiYgKEVhcG9sVnIgIT0gRUFQT0xfVkVSMikpIHx8ICgocEtleURlc2MtPlR5cGUgIT0gV1BBMV9LRVlfREVTQykgJiYgKHBLZXlEZXNjLT5UeXBlICE9IFdQQTJfS0VZX0RFU0MpKSkKKwl7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIktleSBkZXNjcmlwdGVyIGRvZXMgbm90IG1hdGNoIHdpdGggV1BBIHJ1bGVcbiIpKTsKKwkJCXJldHVybjsKKwl9CisKKwkvLyBGaXJzdCB2YWxpZGF0ZSByZXBsYXkgY291bnRlciwgb25seSBhY2NlcHQgbWVzc2FnZSB3aXRoIGxhcmdlciByZXBsYXkgY291bnRlcgorCS8vIExldCBlcXVhbCBwYXNzLCBzb21lIEFQIHN0YXJ0IHdpdGggYWxsIHplcm8gcmVwbGF5IGNvdW50ZXIKKwlOZGlzWmVyb01lbW9yeShaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCWlmKChSVE1QQ29tcGFyZU1lbW9yeShwS2V5RGVzYy0+UmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMSkgJiYKKwkJKFJUTVBDb21wYXJlTWVtb3J5KHBLZXlEZXNjLT5SZXBsYXlDb3VudGVyLCBaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAwKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiAgIFJlcGxheUNvdW50ZXIgbm90IG1hdGNoICAgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvLyBQcm9jZXNzIFdQQTJQU0sgZnJhbWUKKwlpZihwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQorCXsKKwkJaWYoKHBlZXJLZXlJbmZvLktleVR5cGUgPT0gUEFJUldJU0VLRVkpICYmCisJCQkocGVlcktleUluZm8uRUtEX0RMID09IDApICYmCisJCQkocGVlcktleUluZm8uS2V5QWNrID09IDEpICYmCisJCQkocGVlcktleUluZm8uS2V5TWljID09IDApICYmCisJCQkocGVlcktleUluZm8uU2VjdXJlID09IDApICYmCisJCQkocGVlcktleUluZm8uRXJyb3IgPT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5SZXF1ZXN0ID09IDApKQorCQl7CisJCQlNc2dUeXBlID0gRUFQT0xfUEFJUl9NU0dfMTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wgS2V5IFBhaXJ3aXNlIE1lc3NhZ2UgMVxuIikpOworCQl9IGVsc2UgaWYoKHBlZXJLZXlJbmZvLktleVR5cGUgPT0gUEFJUldJU0VLRVkpICYmCisJCQkocGVlcktleUluZm8uRUtEX0RMICA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleU1pYyA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCisJCQkocGVlcktleUluZm8uUmVxdWVzdCA9PSAwKSkKKwkJeworCQkJTXNnVHlwZSA9IEVBUE9MX1BBSVJfTVNHXzM7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MIEtleSBQYWlyd2lzZSBNZXNzYWdlIDNcbiIpKTsKKwkJfSBlbHNlIGlmKChwZWVyS2V5SW5mby5LZXlUeXBlID09IEdST1VQS0VZKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVLRF9ETCA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleU1pYyA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCisJCQkocGVlcktleUluZm8uUmVxdWVzdCA9PSAwKSkKKwkJeworCQkJTXNnVHlwZSA9IEVBUE9MX0dST1VQX01TR18xOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmVjZWl2ZSBFQVBPTCBLZXkgR3JvdXAgTWVzc2FnZSAxXG4iKSk7CisJCX0KKworCQkvLyBXZSB3aWxsIGFzc3VtZSBsaW5rIGlzIHVwIChhc3NvYyBzdWNlZXNzIGFuZCBwb3J0IG5vdCBzZWN1cmVkKS4KKwkJLy8gQWxsIHN0YXRlIGhhcyB0byBiZSBhYmxlIHRvIHByb2Nlc3MgbWVzc2FnZSBmcm9tIHByZXZpb3VzIHN0YXRlCisJCXN3aXRjaChwQWQtPlN0YUNmZy5XcGFTdGF0ZSkKKwkJeworCQljYXNlIFNTX1NUQVJUOgorCQkJaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xKQorCQkJeworCQkJCVdwYTJQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1NfV0FJVF9NU0dfMzoKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGEyUGFpck1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfTVNHXzM7CisJCQl9CisJCQllbHNlIGlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKKwkJCXsKKwkJCQlXcGEyUGFpck1zZzNBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfR1JPVVA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNTX1dBSVRfR1JPVVA6CQkvLyBXaGVuIGRvaW5nIGdyb3VwIGtleSBleGNoYW5nZQorCQljYXNlIFNTX0ZJTklTSDoJCQkvLyBUaGlzIGhhcHBlbmVkIHdoZW4gdXBkYXRlIGdyb3VwIGtleQorCQkJaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xKQorCQkJeworCQkJICAgIC8vIFJlc2V0IHBvcnQgc2VjdXJlZCB2YXJpYWJsZQorCQkJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJCVdwYTJQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQkJeworCQkJICAgIC8vIFJlc2V0IHBvcnQgc2VjdXJlZCB2YXJpYWJsZQorCQkJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJCVdwYTJQYWlyTXNnM0FjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9HUk9VUDsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkKKwkJCXsKKwkJCQlXcGFHcm91cE1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX0ZJTklTSDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwkvLyBQcm9jZXNzIFdQQVBTSyBGcmFtZQorCS8vIENsYXNzaWZ5IG1lc3NhZ2UgVHlwZSwgZWl0aGVyIHBhaXJ3aXNlIG1lc3NhZ2UgMSwgMywgb3IgZ3JvdXAgbWVzc2FnZSAxIGZvciBzdXBwbGljYW50CisJZWxzZSBpZihwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spCisJeworCQlpZigocGVlcktleUluZm8uS2V5VHlwZSA9PSBQQUlSV0lTRUtFWSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlJbmRleCA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleU1pYyA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCisJCQkocGVlcktleUluZm8uUmVxdWVzdCA9PSAwKSkKKwkJeworCQkJTXNnVHlwZSA9IEVBUE9MX1BBSVJfTVNHXzE7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MIEtleSBQYWlyd2lzZSBNZXNzYWdlIDFcbiIpKTsKKwkJfQorCQllbHNlIGlmKChwZWVyS2V5SW5mby5LZXlUeXBlID09IFBBSVJXSVNFS0VZKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUluZGV4ID09IDApICYmCisJCQkocGVlcktleUluZm8uS2V5QWNrID09IDEpICYmCisJCQkocGVlcktleUluZm8uS2V5TWljID09IDEpICYmCisJCQkocGVlcktleUluZm8uU2VjdXJlID09IDApICYmCisJCQkocGVlcktleUluZm8uRXJyb3IgPT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5SZXF1ZXN0ID09IDApKQorCQl7CisJCQlNc2dUeXBlID0gRUFQT0xfUEFJUl9NU0dfMzsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wgS2V5IFBhaXJ3aXNlIE1lc3NhZ2UgM1xuIikpOworCQl9CisJCWVsc2UgaWYoKHBlZXJLZXlJbmZvLktleVR5cGUgPT0gR1JPVVBLRVkpICYmCisJCQkocGVlcktleUluZm8uS2V5SW5kZXggIT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlBY2sgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlNaWMgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5TZWN1cmUgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5FcnJvciA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLlJlcXVlc3QgPT0gMCkpCisJCXsKKwkJCU1zZ1R5cGUgPSBFQVBPTF9HUk9VUF9NU0dfMTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wgS2V5IEdyb3VwIE1lc3NhZ2UgMVxuIikpOworCQl9CisKKwkJLy8gV2Ugd2lsbCBhc3N1bWUgbGluayBpcyB1cCAoYXNzb2Mgc3VjZWVzcyBhbmQgcG9ydCBub3Qgc2VjdXJlZCkuCisJCS8vIEFsbCBzdGF0ZSBoYXMgdG8gYmUgYWJsZSB0byBwcm9jZXNzIG1lc3NhZ2UgZnJvbSBwcmV2aW91cyBzdGF0ZQorCQlzd2l0Y2gocEFkLT5TdGFDZmcuV3BhU3RhdGUpCisJCXsKKwkJY2FzZSBTU19TVEFSVDoKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGFQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1NfV0FJVF9NU0dfMzoKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGFQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQkJeworCQkJCVdwYVBhaXJNc2czQWN0aW9uKHBBZCwgRWxlbSk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19XQUlUX0dST1VQOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTU19XQUlUX0dST1VQOgkJLy8gV2hlbiBkb2luZyBncm91cCBrZXkgZXhjaGFuZ2UKKwkJY2FzZSBTU19GSU5JU0g6CQkJLy8gVGhpcyBoYXBwZW5lZCB3aGVuIHVwZGF0ZSBncm91cCBrZXkKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGFQYWlyTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9NU0dfMzsKKwkJCQkvLyBSZXNldCBwb3J0IHNlY3VyZWQgdmFyaWFibGUKKwkJCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQkJeworCQkJCVdwYVBhaXJNc2czQWN0aW9uKHBBZCwgRWxlbSk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19XQUlUX0dST1VQOworCQkJCS8vIFJlc2V0IHBvcnQgc2VjdXJlZCB2YXJpYWJsZQorCQkJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJfQorCQkJZWxzZSBpZihNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKQorCQkJeworCQkJCVdwYUdyb3VwTXNnMUFjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfRklOSVNIOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLS0tIFdwYUVBUE9MS2V5QWN0aW9uXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlQcm9jZXNzIFBhaXJ3aXNlIGtleSA0LXdheSBoYW5kc2hha2luZworCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlFbGVtCQlNZXNzYWdlIGJvZHkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJV3BhUGFpck1zZzFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlQSEVBREVSXzgwMl8xMSAgICAgIHBIZWFkZXI7CisJVUNIQVIJCQkJKm1wb29sLCAqUFRLLCAqZGlnZXN0OworCVBVQ0hBUiAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUNIQVIgICAgICAgICAgICAgICBIZWFkZXI4MDJfM1sxNF07CisJVUxPTkcgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJUEVBUE9MX1BBQ0tFVCAgICAgICBwTXNnMTsKKwlFQVBPTF9QQUNLRVQgICAgICAgIFBhY2tldDsKKwlVQ0hBUiAgICAgICAgICAgICAgIE1pY1sxNl07CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFQYWlyTXNnMUFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIGFsbG9jYXRlIG1lbW9yeSBwb29sCisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUiAqKSZtcG9vbCwgMjU2KTsKKworCWlmIChtcG9vbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvLyBQVEsgTGVuID0gODAuCisJUFRLID0gKFVDSEFSICopIFJPVU5EX1VQKG1wb29sLCA0KTsKKwkvLyBkaWdlc3QgTGVuID0gODAuCisJZGlnZXN0ID0gKFVDSEFSICopIFJPVU5EX1VQKFBUSyArIDgwLCA0KTsKKworCXBIZWFkZXIgPSAoUEhFQURFUl84MDJfMTEpIEVsZW0tPk1zZzsKKworCS8vIFByb2Nlc3MgbWVzc2FnZSAxIGZyb20gYXV0aGVudGljYXRvcgorCXBNc2cxID0gKFBFQVBPTF9QQUNLRVQpICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKKworCS8vIDEuIFNhdmUgUmVwbGF5IGNvdW50ZXIsIGl0IHdpbGwgdXNlIHRvIHZlcmlmeSBtZXNzYWdlIDMgYW5kIGNvbnN0cnVjdCBtZXNzYWdlIDIKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBwTXNnMS0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIDIuIFNhdmUgQU5vbmNlCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuQU5vbmNlLCBwTXNnMS0+S2V5RGVzYy5LZXlOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIEdlbmVyYXRlIHJhbmRvbSBTTm9uY2UKKwlHZW5SYW5kb20ocEFkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPlN0YUNmZy5TTm9uY2UpOworCisJLy8gQ2FsYyBQVEsoQU5vbmNlLCBTTm9uY2UpCisJV3BhQ291bnRQVEsocEFkLAorCQlwQWQtPlN0YUNmZy5QTUssCisJCXBBZC0+U3RhQ2ZnLkFOb25jZSwKKwkJcEFkLT5Db21tb25DZmcuQnNzaWQsCisJCXBBZC0+U3RhQ2ZnLlNOb25jZSwKKwkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJUFRLLAorCQlMRU5fUFRLKTsKKworCS8vIFNhdmUga2V5IHRvIFBUSyBlbnRyeQorCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlBUSywgUFRLLCBMRU5fUFRLKTsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBNZXNzYWdlIDIgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJLy8KKwkvLyBNZXNzYWdlIDIgYXMgIEVBUE9MLUtleSgwLDEsMCwwLDAsUCwwLFNOb25jZSxNSUMsUlNOIElFKQorCS8vCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7CisJLy8gMS4gS2V5IGRlc2NyaXB0b3IgdmVyc2lvbiBhbmQgYXBwcm9wcmlhdGUgUlNOIElFCisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0gMjsKKwl9CisJZWxzZQkgIC8vIFRLSVAKKwl7CisJCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IDE7CisJfQorCisJLy8gZmlsbCBpbiBEYXRhIE1hdGVyaWFsIGFuZCBpdHMgbGVuZ3RoCisJUGFja2V0LktleURlc2MuS2V5RGF0YVswXSA9IElFX1dQQTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzFdID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuOworCVBhY2tldC5LZXlEZXNjLktleURhdGFMZW5bMV0gPSBwQWQtPlN0YUNmZy5SU05JRV9MZW4gKyAyOworCU5kaXNNb3ZlTWVtb3J5KCZQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzJdLCBwQWQtPlN0YUNmZy5SU05fSUUsIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7CisKKwkvLyBVcGRhdGUgcGFja2V0IGxlbmd0aCBhZnRlciBkZWNpZGUgS2V5IGRhdGEgcGF5bG9hZAorCVBhY2tldC5Cb2R5X0xlblsxXSAgPSBzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRSArIFBhY2tldC5LZXlEZXNjLktleURhdGFMZW5bMV07CisKKwkvLyBVcGRhdGUgS2V5IGxlbmd0aAorCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFswXSA9IHBNc2cxLT5LZXlEZXNjLktleUxlbmd0aFswXTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMV0gPSBwTXNnMS0+S2V5RGVzYy5LZXlMZW5ndGhbMV07CisJLy8gMi4gS2V5IFR5cGUgUGVlcktleQorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IFBBSVJXSVNFS0VZOworCisJLy8gMy4gS2V5TWljIGZpZWxkIHByZXNlbnRlZAorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5TWljICA9IDE7CisKKwkvL0NvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKKworCisJLy8gNC4gRmlsbCBTTm9uY2UKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlOb25jZSwgcEFkLT5TdGFDZmcuU05vbmNlLCBMRU5fS0VZX0RFU0NfTk9OQ0UpOworCisJLy8gNS4gS2V5IFJlcGxheSBDb3VudAorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gU2VuZCBFQVBPTCgwLCAxLCAwLCAwLCAwLCBQLCAwLCBTTm9uY2UsIE1JQywgUlNOX0lFKQorCS8vIE91dCBidWZmZXIgZm9yIHRyYW5zbWl0dGluZyBtZXNzYWdlIDIKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCBtcG9vbCk7CisJCXJldHVybjsKKwl9CisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICAmUGFja2V0LAorCQlFTkRfT0ZfQVJHUyk7CisKKwkvLyA2LiBQcmVwYXJlIGFuZCBGaWxsIE1JQyB2YWx1ZQorCU5kaXNaZXJvTWVtb3J5KE1pYywgc2l6ZW9mKE1pYykpOworCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CS8vIEFFUworCisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsJLy8gVEtJUAorCQlobWFjX21kNShQVEssICBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKwkvL2hleF9kdW1wKCJNSUMiLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorCQkJICAJCQlMRU5HVEhfODAyXzMsICAgICAJCQkmSGVhZGVyODAyXzMsCisJCQkJCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICAmUGFja2V0LAorCQkJCQkJRU5EX09GX0FSR1MpOworCisKKwkvLyA1LiBDb3B5IGZyYW1lIHRvIFR4IHJpbmcgYW5kIHNlbmQgTXNnIDIgdG8gYXV0aGVudGljYXRvcgorCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBUUlVFKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKwlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhUGFpck1zZzFBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKK1ZPSUQgV3BhMlBhaXJNc2cxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUEhFQURFUl84MDJfMTEgICAgICBwSGVhZGVyOworCVVDSEFSCQkJCSptcG9vbCwgKlBUSywgKmRpZ2VzdDsKKwlQVUNIQVIgICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVVDSEFSICAgICAgICAgICAgICAgSGVhZGVyODAyXzNbMTRdOworCVVMT05HICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCVBFQVBPTF9QQUNLRVQgICAgICAgcE1zZzE7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJVUNIQVIgICAgICAgICAgICAgICBNaWNbMTZdOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhMlBhaXJNc2cxQWN0aW9uIC0tLS0tPlxuIikpOworCisJLy8gYWxsb2NhdGUgbWVtb3J5IHBvb2wKKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJm1wb29sLCAyNTYpOworCisJaWYgKG1wb29sID09IE5VTEwpCisJCXJldHVybjsKKworCS8vIFBUSyBMZW4gPSA4MC4KKwlQVEsgPSAoVUNIQVIgKikgUk9VTkRfVVAobXBvb2wsIDQpOworCS8vIGRpZ2VzdCBMZW4gPSA4MC4KKwlkaWdlc3QgPSAoVUNIQVIgKikgUk9VTkRfVVAoUFRLICsgODAsIDQpOworCisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgRWxlbS0+TXNnOworCisJLy8gUHJvY2VzcyBtZXNzYWdlIDEgZnJvbSBhdXRoZW50aWNhdG9yCisJCXBNc2cxID0gKFBFQVBPTF9QQUNLRVQpCSZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKKworCS8vIDEuIFNhdmUgUmVwbGF5IGNvdW50ZXIsIGl0IHdpbGwgdXNlIHRvIHZlcmlmeSBtZXNzYWdlIDMgYW5kIGNvbnN0cnVjdCBtZXNzYWdlIDIKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBwTXNnMS0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIDIuIFNhdmUgQU5vbmNlCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuQU5vbmNlLCBwTXNnMS0+S2V5RGVzYy5LZXlOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIEdlbmVyYXRlIHJhbmRvbSBTTm9uY2UKKwlHZW5SYW5kb20ocEFkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPlN0YUNmZy5TTm9uY2UpOworCisJaWYocE1zZzEtPktleURlc2MuS2V5RGF0YUxlblsxXSA+IDAgKQorCXsKKwkJLy8gY2FjaGVkIFBNS0lECisJfQorCisJLy8gQ2FsYyBQVEsoQU5vbmNlLCBTTm9uY2UpCisJV3BhQ291bnRQVEsocEFkLAorCQlwQWQtPlN0YUNmZy5QTUssCisJCXBBZC0+U3RhQ2ZnLkFOb25jZSwKKwkJcEFkLT5Db21tb25DZmcuQnNzaWQsCisJCXBBZC0+U3RhQ2ZnLlNOb25jZSwKKwkJcEFkLT5DdXJyZW50QWRkcmVzcywKKwkJUFRLLAorCQlMRU5fUFRLKTsKKworCS8vIFNhdmUga2V5IHRvIFBUSyBlbnRyeQorCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlBUSywgUFRLLCBMRU5fUFRLKTsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBtZXNzYWdlIDIgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJLy8KKwkvLyBNZXNzYWdlIDIgYXMgIEVBUE9MLUtleSgwLDEsMCwwLDAsUCwwLFNOb25jZSxNSUMsUlNOIElFKQorCS8vCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisKKwkvLyAxLiBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uIGFuZCBhcHByb3ByaWF0ZSBSU04gSUUKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IDI7CisJfQorCWVsc2UJICAvLyBUS0lQCisJeworCQlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSAxOworCX0KKworCS8vIGZpbGwgaW4gRGF0YSBNYXRlcmlhbCBhbmQgaXRzIGxlbmd0aAorCVBhY2tldC5LZXlEZXNjLktleURhdGFbMF0gPSBJRV9XUEEyOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbMV0gPSBwQWQtPlN0YUNmZy5SU05JRV9MZW47CisJUGFja2V0LktleURlc2MuS2V5RGF0YUxlblsxXSA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiArIDI7CisJTmRpc01vdmVNZW1vcnkoJlBhY2tldC5LZXlEZXNjLktleURhdGFbMl0sIHBBZC0+U3RhQ2ZnLlJTTl9JRSwgcEFkLT5TdGFDZmcuUlNOSUVfTGVuKTsKKworCS8vIFVwZGF0ZSBwYWNrZXQgbGVuZ3RoIGFmdGVyIGRlY2lkZSBLZXkgZGF0YSBwYXlsb2FkCisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFICsgUGFja2V0LktleURlc2MuS2V5RGF0YUxlblsxXTsKKworCS8vIDIuIEtleSBUeXBlIFBlZXJLZXkKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleVR5cGUgPSBQQUlSV0lTRUtFWTsKKworCS8vIDMuIEtleU1pYyBmaWVsZCBwcmVzZW50ZWQKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleU1pYyAgPSAxOworCisJLy8gVXBkYXRlIEtleSBMZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMF0gPSAwOworCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFsxXSA9IHBNc2cxLT5LZXlEZXNjLktleUxlbmd0aFsxXTsKKworCS8vIDQuIEZpbGwgU05vbmNlCisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5Tm9uY2UsIHBBZC0+U3RhQ2ZnLlNOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIDUuIEtleSBSZXBsYXkgQ291bnQKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIENvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKKworCS8vIFNlbmQgRUFQT0wtS2V5KDAsMSwwLDAsMCxQLDAsU05vbmNlLE1JQyxSU04gSUUpCisJLy8gT3V0IGJ1ZmZlciBmb3IgdHJhbnNtaXR0aW5nIG1lc3NhZ2UgMgorCU1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCBtcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAmRnJhbWVMZW4sCisJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCUVORF9PRl9BUkdTKTsKKworCS8vIDYuIFByZXBhcmUgYW5kIEZpbGwgTUlDIHZhbHVlCisJTmRpc1plcm9NZW1vcnkoTWljLCBzaXplb2YoTWljKSk7CisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBQVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlobWFjX21kNShQVEssICBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKworCS8vIE1ha2UgIFRyYW5zbWl0dGluZyBmcmFtZQorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorCQkJICAJCQlMRU5HVEhfODAyXzMsICAgICAJCSZIZWFkZXI4MDJfMywKKwkJCQkJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKworCS8vIDUuIENvcHkgZnJhbWUgdG8gVHggcmluZworCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBUUlVFKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJb3NfZnJlZV9tZW0ocEFkLCBtcG9vbCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGEyUGFpck1zZzFBY3Rpb24gPC0tLS0tXG4iKSk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByb2Nlc3MgUGFpcndpc2Uga2V5IDQtd2F5IGhhbmRzaGFraW5nCisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCUVsZW0JCU1lc3NhZ2UgYm9keQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlXcGFQYWlyTXNnM0FjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNTE1FX1FVRVVFX0VMRU0JKkVsZW0pCisKK3sKKwlQSEVBREVSXzgwMl8xMSAgICAgIHBIZWFkZXI7CisJUFVDSEFSICAgICAgICAgIAlwT3V0QnVmZmVyID0gTlVMTDsKKwlVQ0hBUiAgICAgICAgICAgICAgIEhlYWRlcjgwMl8zWzE0XTsKKwlVTE9ORyAgICAgICAgICAgCUZyYW1lTGVuID0gMDsKKwlFQVBPTF9QQUNLRVQgICAgICAgIFBhY2tldDsKKwlQRUFQT0xfUEFDS0VUICAgICAgIHBNc2czOworCVVDSEFSICAgICAgICAgICAJTWljWzE2XSwgT2xkTWljWzE2XTsKKwlNQUNfVEFCTEVfRU5UUlkgCSpwRW50cnkgPSBOVUxMOworCVVDSEFSCQkJCXNraXBfb2Zmc2V0OworCUtFWV9JTkZPCQkJcGVlcktleUluZm87CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFQYWlyTXNnM0FjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIFJlY29yZCA4MDIuMTEgaGVhZGVyICYgdGhlIHJlY2VpdmVkIEVBUE9MIHBhY2tldCBNc2czCisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgRWxlbS0+TXNnOworCXBNc2czID0gKFBFQVBPTF9QQUNLRVQpCSZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKKworCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpJnBlZXJLZXlJbmZvLCBzaXplb2YocGVlcktleUluZm8pKTsKKwlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgKFBVQ0hBUikmcE1zZzMtPktleURlc2MuS2V5SW5mbywgc2l6ZW9mKEtFWV9JTkZPKSk7CisKKwkqKChVU0hPUlQqKSZwZWVyS2V5SW5mbykgPSBjcHUybGUxNigqKChVU0hPUlQqKSZwZWVyS2V5SW5mbykpOworCisKKwkvLyAxLiBWZXJpZnkgY2lwaGVyIHR5cGUgbWF0Y2gKKwlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IDIpKQorCXsKKwkJcmV0dXJuOworCX0KKwllbHNlIGlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IDEpKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vIFZlcmlmeSBSU04gSUUKKwkvL2lmICghUlRNUEVxdWFsTWVtb3J5KHBNc2czLT5LZXlEZXNjLktleURhdGEsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbikpCisJaWYgKCFDaGVja1JTTklFKHBBZCwgcE1zZzMtPktleURlc2MuS2V5RGF0YSwgcE1zZzMtPktleURlc2MuS2V5RGF0YUxlblsxXSwgJnNraXBfb2Zmc2V0KSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJTTl9JRSBEaWZmZXJlbnQgaW4gTXNnIDMgb2YgV1BBMSA0LXdheSBoYW5kc2hha2UhISBcbiIpKTsKKwkJaGV4X2R1bXAoIlRoZSBvcmlnaW5hbCBSU05fSUUiLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4pOworCQloZXhfZHVtcCgiVGhlIHJlY2VpdmVkIFJTTl9JRSIsIHBNc2czLT5LZXlEZXNjLktleURhdGEsIHBNc2czLT5LZXlEZXNjLktleURhdGFMZW5bMV0pOworCQlyZXR1cm47CisJfQorCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlNOX0lFIFZBTElEIGluIE1zZyAzIG9mIFdQQTEgNC13YXkgaGFuZHNoYWtlISEgXG4iKSk7CisKKworCS8vIDIuIENoZWNrIE1JQyB2YWx1ZQorCS8vIFNhdmUgdGhlIE1JQyBhbmQgcmVwbGFjZSB3aXRoIHplcm8KKwlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBNc2czLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJTmRpc1plcm9NZW1vcnkocE1zZzMtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJVUNIQVIgZGlnZXN0WzgwXTsKKworCQlITUFDX1NIQTEoKFBVQ0hBUikgcE1zZzMsIHBNc2czLT5Cb2R5X0xlblsxXSArIDQsIHBBZC0+U3RhQ2ZnLlBUSywgTEVOX0VBUF9NSUNLLCBkaWdlc3QpOworCQlOZGlzTW92ZU1lbW9yeShNaWMsIGRpZ2VzdCwgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCWVsc2UJLy8gVEtJUAorCXsKKwkJaG1hY19tZDUocEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIChQVUNIQVIpIHBNc2czLCBwTXNnMy0+Qm9keV9MZW5bMV0gKyA0LCBNaWMpOworCX0KKworCWlmKCFOZGlzRXF1YWxNZW1vcnkoT2xkTWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiIE1JQyBEaWZmZXJlbnQgaW4gbXNnIDMgb2YgNC13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNSUMgVkFMSUQgaW4gbXNnIDMgb2YgNC13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKworCS8vIDMuIENoZWNrIFJlcGxheSBDb3VudGVyLCBpdCBoYXMgdG8gYmUgbGFyZ2VyIHRoYW4gbGFzdCBvbmUuIE5vIG5lZWQgdG8gYmUgZXhhY3Qgb25lIGxhcmdlcgorCWlmKFJUTVBDb21wYXJlTWVtb3J5KHBNc2czLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDEpCisJCXJldHVybjsKKworCS8vIFVwZGF0ZSBuZXcgcmVwbGF5IGNvdW50ZXIKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBwTXNnMy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIDQuIERvdWJsZSBjaGVjayBBTm9uY2UKKwlpZighTmRpc0VxdWFsTWVtb3J5KHBBZC0+U3RhQ2ZnLkFOb25jZSwgcE1zZzMtPktleURlc2MuS2V5Tm9uY2UsIExFTl9LRVlfREVTQ19OT05DRSkpCisJCXJldHVybjsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBNZXNzYWdlIDQgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFOwkJLy8gTm8gZGF0YSBmaWVsZAorCisJLy8KKwkvLyBNZXNzYWdlIDQgYXMgIEVBUE9MLUtleSgwLDEsMCwwLDAsUCwwLDAsTUlDLDApCisJLy8KKwlQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMV9LRVlfREVTQzsKKworCS8vIEtleSBkZXNjcmlwdG9yIHZlcnNpb24gYW5kIGFwcHJvcHJpYXRlIFJTTiBJRQorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IHBlZXJLZXlJbmZvLktleURlc2NWZXI7CisKKwkvLyBVcGRhdGUgS2V5IExlbmd0aAorCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFswXSA9IHBNc2czLT5LZXlEZXNjLktleUxlbmd0aFswXTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMV0gPSBwTXNnMy0+S2V5RGVzYy5LZXlMZW5ndGhbMV07CisKKwkvLyBLZXkgVHlwZSBQZWVyS2V5CisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gUEFJUldJU0VLRVk7CisKKwkvLyBLZXlNaWMgZmllbGQgcHJlc2VudGVkCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMgID0gMTsKKworCS8vIEluIE1zZzMsICBLZXlJbmZvLnNlY3VyZSA9MCBpZiBHcm91cCBLZXkgSFMgdG8gY29tZS4gMSBpZiBubyBncm91cCBrZXkgSFMKKwkvLyBTdGF0aW9uIHNlbmRzIE1zZzQgIEtleUluZm8uc2VjdXJlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGF0IGluIE1zZy4zCisJUGFja2V0LktleURlc2MuS2V5SW5mby5TZWN1cmU9IHBlZXJLZXlJbmZvLlNlY3VyZTsKKworCS8vIENvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKKworCS8vIEtleSBSZXBsYXkgY291bnQKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwTXNnMy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIE91dCBidWZmZXIgZm9yIHRyYW5zbWl0dGluZyBtZXNzYWdlIDQKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICAgICZQYWNrZXQsCisJCUVORF9PRl9BUkdTKTsKKworCS8vIFByZXBhcmUgYW5kIEZpbGwgTUlDIHZhbHVlCisJTmRpc1plcm9NZW1vcnkoTWljLCBzaXplb2YoTWljKSk7CisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJLy8gQUVTCisJCVVDSEFSIGRpZ2VzdFs4MF07CisKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlobWFjX21kNShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgcE91dEJ1ZmZlciwgRnJhbWVMZW4sIE1pYyk7CisJfQorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCS8vIFVwZGF0ZSBQVEsKKwkvLyBQcmVwYXJlIHBhaXItd2lzZSBrZXkgaW5mb3JtYXRpb24gaW50byBzaGFyZWQga2V5IHRhYmxlCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbiA9IExFTl9US0lQX0VLOworICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwgJnBBZC0+U3RhQ2ZnLlBUS1szMl0sIExFTl9US0lQX0VLKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OF0sIExFTl9US0lQX1JYTUlDSyk7CisJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsICZwQWQtPlN0YUNmZy5QVEtbNDgrTEVOX1RLSVBfUlhNSUNLXSwgTEVOX1RLSVBfVFhNSUNLKTsKKworCS8vIERlY2lkZSBpdHMgQ2hpcGVyQWxnCisJaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworCWVsc2UKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisKKwkvLyBVcGRhdGUgdGhlc2UgcmVsYXRlZCBpbmZvcm1hdGlvbiB0byBNQUNfVEFCTEVfRU5UUlkKKwlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKKwlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LktleSwgJnBBZC0+U3RhQ2ZnLlBUS1szMl0sIExFTl9US0lQX0VLKTsKKwlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlR4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4K0xFTl9US0lQX1JYTUlDS10sIExFTl9US0lQX1RYTUlDSyk7CisJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGc7CisKKwkvLyBVcGRhdGUgcGFpcndpc2Uga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZQorCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsCisJCQkJCQkgIEJTUzAsCisJCQkJCQkgIDAsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMpOworCisJLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisJCQkJCQkJICBCU1MwLAorCQkJCQkJCSAgMCwKKwkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZywKKwkJCQkJCQkgIHBFbnRyeSk7CisKKwkvLyBNYWtlIHRyYW5zbWl0dGluZyBmcmFtZQorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorCQkJICAJCQlMRU5HVEhfODAyXzMsICAgICAJCSZIZWFkZXI4MDJfMywKKwkJCQkJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKworCS8vIENvcHkgZnJhbWUgdG8gVHggcmluZyBhbmQgU2VuZCBNZXNzYWdlIDQgdG8gYXV0aGVudGljYXRvcgorCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBUUlVFKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYVBhaXJNc2czQWN0aW9uIDwtLS0tLVxuIikpOworfQorCitWT0lEICAgIFdwYTJQYWlyTXNnM0FjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKQorCit7CisJUEhFQURFUl84MDJfMTEgICAgICBwSGVhZGVyOworCVBVQ0hBUiAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUNIQVIgICAgICAgICAgICAgICBIZWFkZXI4MDJfM1sxNF07CisJVUxPTkcgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJUEVBUE9MX1BBQ0tFVCAgICAgICBwTXNnMzsKKwlVQ0hBUiAgICAgICAgICAgICAgIE1pY1sxNl0sIE9sZE1pY1sxNl07CisJVUNIQVIgICAgICAgICAgICAgICAqbXBvb2wsICpLRVlEQVRBLCAqZGlnZXN0OworCVVDSEFSICAgICAgICAgICAgICAgS2V5WzMyXTsKKwlNQUNfVEFCTEVfRU5UUlkgCSpwRW50cnkgPSBOVUxMOworCUtFWV9JTkZPCQkJcGVlcktleUluZm87CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkKKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJm1wb29sLCAxMDI0KTsKKworCWlmKG1wb29sID09IE5VTEwpCisJCXJldHVybjsKKworCS8vIEtFWURBVEEgTGVuID0gNTEyLgorCUtFWURBVEEgPSAoVUNIQVIgKikgUk9VTkRfVVAobXBvb2wsIDQpOworCS8vIGRpZ2VzdCBMZW4gPSA4MC4KKwlkaWdlc3QgPSAoVUNIQVIgKikgUk9VTkRfVVAoS0VZREFUQSArIDUxMiwgNCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGEyUGFpck1zZzNBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwlwSGVhZGVyID0gKFBIRUFERVJfODAyXzExKSBFbGVtLT5Nc2c7CisKKwkvLyBQcm9jZXNzIG1lc3NhZ2UgMyBmcmFtZS4KKwlwTXNnMyA9IChQRUFQT0xfUEFDS0VUKQkmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSF07CisKKwlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgc2l6ZW9mKHBlZXJLZXlJbmZvKSk7CisJTmRpc01vdmVNZW1vcnkoKFBVQ0hBUikmcGVlcktleUluZm8sIChQVUNIQVIpJnBNc2czLT5LZXlEZXNjLktleUluZm8sIHNpemVvZihLRVlfSU5GTykpOworCisJKigoVVNIT1JUKikmcGVlcktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUKikmcGVlcktleUluZm8pKTsKKworCS8vIDEuIFZlcmlmeSBjaXBoZXIgdHlwZSBtYXRjaAorCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCAmJiAocGVlcktleUluZm8uS2V5RGVzY1ZlciE9IDIpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKwllbHNlIGlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IDEpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIDIuIENoZWNrIE1JQyB2YWx1ZQorCS8vIFNhdmUgdGhlIE1JQyBhbmQgcmVwbGFjZSB3aXRoIHplcm8KKwlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBNc2czLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJTmRpc1plcm9NZW1vcnkocE1zZzMtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJSE1BQ19TSEExKChQVUNIQVIpIHBNc2czLCBwTXNnMy0+Qm9keV9MZW5bMV0gKyA0LCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlobWFjX21kNShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgKFBVQ0hBUikgcE1zZzMsIHBNc2czLT5Cb2R5X0xlblsxXSArIDQsIE1pYyk7CisJfQorCisJaWYoIU5kaXNFcXVhbE1lbW9yeShPbGRNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQykpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIgTUlDIERpZmZlcmVudCBpbiBtc2cgMyBvZiA0LXdheSBoYW5kc2hha2UhISEhISEhISEhIFxuIikpOworCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQlyZXR1cm47CisJfQorCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIE1JQyBWQUxJRCBpbiBtc2cgMyBvZiA0LXdheSBoYW5kc2hha2UhISEhISEhISEhIFxuIikpOworCisJLy8gMy4gQ2hlY2sgUmVwbGF5IENvdW50ZXIsIGl0IGhhcyB0byBiZSBsYXJnZXIgdGhhbiBsYXN0IG9uZS4gTm8gbmVlZCB0byBiZSBleGFjdCBvbmUgbGFyZ2VyCisJaWYoUlRNUENvbXBhcmVNZW1vcnkocE1zZzMtPktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBVcGRhdGUgbmV3IHJlcGxheSBjb3VudGVyCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgcE1zZzMtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyA0LiBEb3VibGUgY2hlY2sgQU5vbmNlCisJaWYoIU5kaXNFcXVhbE1lbW9yeShwQWQtPlN0YUNmZy5BTm9uY2UsIHBNc2czLT5LZXlEZXNjLktleU5vbmNlLCBMRU5fS0VZX0RFU0NfTk9OQ0UpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIE9idGFpbiBHVEsKKwkvLyA1LiBEZWNyeXB0IEdUSyBmcm9tIEtleSBEYXRhCisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkVLRCA9ICVkXG4iLCBwZWVyS2V5SW5mby5FS0RfREwpKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIERlY3J5cHQgQUVTIEdUSworCQlBRVNfR1RLX0tFWV9VTldSQVAoJnBBZC0+U3RhQ2ZnLlBUS1sxNl0sIEtFWURBVEEsIHBNc2czLT5LZXlEZXNjLktleURhdGFMZW5bMV0scE1zZzMtPktleURlc2MuS2V5RGF0YSk7CisJfQorCWVsc2UJICAvLyBUS0lQCisJeworCQlJTlQgaTsKKwkJLy8gRGVjcnlwdCBUS0lQIEdUSworCQkvLyBDb25zdHJ1Y3QgMzIgYnl0ZXMgUkM0IEtleQorCQlOZGlzTW92ZU1lbW9yeShLZXksIHBNc2czLT5LZXlEZXNjLktleUl2LCAxNik7CisJCU5kaXNNb3ZlTWVtb3J5KCZLZXlbMTZdLCAmcEFkLT5TdGFDZmcuUFRLWzE2XSwgMTYpOworCQlBUkNGT1VSX0lOSVQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgS2V5LCAzMik7CisJCS8vZGlzY2FyZCBmaXJzdCAyNTYgYnl0ZXMKKwkJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCQlBUkNGT1VSX0JZVEUoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCk7CisJCS8vIERlY3J5cHQgR1RLLiBCZWNhcmVmdWwsIHRoZXJlIGlzIG5vIElDViB0byBjaGVjayB0aGUgcmVzdWx0IGlzIGNvcnJlY3Qgb3Igbm90CisJCUFSQ0ZPVVJfREVDUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBLRVlEQVRBLCBwTXNnMy0+S2V5RGVzYy5LZXlEYXRhLCBwTXNnMy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdKTsKKwl9CisKKwlpZiAoIVBhcnNlS2V5RGF0YShwQWQsIEtFWURBVEEsIHBNc2czLT5LZXlEZXNjLktleURhdGFMZW5bMV0sIDEpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIFVwZGF0ZSBHVEsgdG8gQVNJQworCS8vIFVwZGF0ZSBncm91cCBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlCisJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKKwkJCQkJCSAgQlNTMCwKKwkJCQkJCSAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uUnhNaWMpOworCisJLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisJCQkJCQkJICBCU1MwLAorCQkJCQkJCSAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcsCisJCQkJCQkJICBOVUxMKTsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBtZXNzYWdlIDQgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJUGFja2V0LkJvZHlfTGVuWzFdICAJPSBzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRTsJCS8vIE5vIGRhdGEgZmllbGQKKworCS8vCisJLy8gTWVzc2FnZSA0IGFzICBFQVBPTC1LZXkoMCwxLDAsMCwwLFAsMCwwLE1JQywwKQorCS8vCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisKKwkvLyBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uIGFuZCBhcHByb3ByaWF0ZSBSU04gSUUKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSBwZWVyS2V5SW5mby5LZXlEZXNjVmVyOworCisJLy8gVXBkYXRlIEtleSBMZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMF0gPSBwTXNnMy0+S2V5RGVzYy5LZXlMZW5ndGhbMF07CisJUGFja2V0LktleURlc2MuS2V5TGVuZ3RoWzFdID0gcE1zZzMtPktleURlc2MuS2V5TGVuZ3RoWzFdOworCisJLy8gS2V5IFR5cGUgUGVlcktleQorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IFBBSVJXSVNFS0VZOworCisJLy8gS2V5TWljIGZpZWxkIHByZXNlbnRlZAorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5TWljICA9IDE7CisJUGFja2V0LktleURlc2MuS2V5SW5mby5TZWN1cmUgPSAxOworCisJLy8gQ29udmVydCB0byBsaXR0bGUtZW5kaWFuIGZvcm1hdC4KKwkqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykgPSBjcHUybGUxNigqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykpOworCisJLy8gS2V5IFJlcGxheSBjb3VudAorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBNc2czLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gT3V0IGJ1ZmZlciBmb3IgdHJhbnNtaXR0aW5nIG1lc3NhZ2UgNAorCU1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVUNIQVIgKikmcE91dEJ1ZmZlcik7ICAvLyBhbGxvY2F0ZSBtZW1vcnkKKwlpZihwT3V0QnVmZmVyID09IE5VTEwpCisJeworCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQlyZXR1cm47CisJfQorCisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICAmUGFja2V0LAorCQlFTkRfT0ZfQVJHUyk7CisKKwkvLyBQcmVwYXJlIGFuZCBGaWxsIE1JQyB2YWx1ZQorCU5kaXNaZXJvTWVtb3J5KE1pYywgc2l6ZW9mKE1pYykpOworCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJLy8gQUVTCisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgcEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJaG1hY19tZDUocEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKwkvLyBVcGRhdGUgUFRLCisJLy8gUHJlcGFyZSBwYWlyLXdpc2Uga2V5IGluZm9ybWF0aW9uIGludG8gc2hhcmVkIGtleSB0YWJsZQorCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVswXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKyAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksICZwQWQtPlN0YUNmZy5QVEtbMzJdLCBMRU5fVEtJUF9FSyk7CisJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsICZwQWQtPlN0YUNmZy5QVEtbNDhdLCBMRU5fVEtJUF9SWE1JQ0spOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4K0xFTl9US0lQX1JYTUlDS10sIExFTl9US0lQX1RYTUlDSyk7CisKKwkvLyBEZWNpZGUgaXRzIENoaXBlckFsZworCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKwllbHNlCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCisJLy8gVXBkYXRlIHRoZXNlIHJlbGF0ZWQgaW5mb3JtYXRpb24gdG8gTUFDX1RBQkxFX0VOVFJZCisJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXkuS2V5LCAmcEFkLT5TdGFDZmcuUFRLWzMyXSwgTEVOX1RLSVBfRUspOworCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleS5UeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OCtMRU5fVEtJUF9SWE1JQ0tdLCBMRU5fVEtJUF9UWE1JQ0spOworCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnOworCisJLy8gVXBkYXRlIHBhaXJ3aXNlIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUKKwlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorCQkJCQkJICBCU1MwLAorCQkJCQkJICAwLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljKTsKKworCS8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAorCQkJCQkJCSAgQlNTMCwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisJCQkJCQkJICBwRW50cnkpOworCisJLy8gTWFrZSAgVHJhbnNtaXR0aW5nIGZyYW1lCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgIAkmRnJhbWVMZW4sCisJCQkgIAkJCUxFTkdUSF84MDJfMywgICAgIAkJJkhlYWRlcjgwMl8zLAorCQkJCQkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgJlBhY2tldCwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCisJLy8gQ29weSBmcmFtZSB0byBUeCByaW5nIGFuZCBTZW5kIE1lc3NhZ2UgNCB0byBhdXRoZW50aWNhdG9yCisJUlRNUFRvV2lyZWxlc3NTdGEocEFkLCBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zLCAoUFVDSEFSKSZQYWNrZXQsIFBhY2tldC5Cb2R5X0xlblsxXSArIDQsIFRSVUUpOworCisJLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKwkvL3BBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJU1RBX1BPUlRfU0VDVVJFRChwQWQpOworCisgICAgLy8gSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkKKyAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworCisJTWxtZUZyZWVNZW1vcnkocEFkLCAoUFVDSEFSKXBPdXRCdWZmZXIpOworCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisKKworCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3Igc2V0IGtleSBkb25lIFdQQTIKKwlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NFVF9LRVlfRE9ORV9XUEEyX0VWRU5UX0ZMQUcsIHBFbnRyeS0+QWRkciwgQlNTMCwgMCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJXcGEyUGFpck1zZzNBY3Rpb24gPC0tLS0tXG4iKSk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByb2Nlc3MgR3JvdXAga2V5IDItd2F5IGhhbmRzaGFraW5nCisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCUVsZW0JCU1lc3NhZ2UgYm9keQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlXcGFHcm91cE1zZzFBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUxNRV9RVUVVRV9FTEVNCSpFbGVtKQorCit7CisJUFVDSEFSICAgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlVQ0hBUiAgICAgICAgICAgICAgIEhlYWRlcjgwMl8zWzE0XTsKKwlVTE9ORyAgICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlFQVBPTF9QQUNLRVQgICAgICAgIFBhY2tldDsKKwlQRUFQT0xfUEFDS0VUICAgICAgIHBHcm91cDsKKwlVQ0hBUiAgICAgICAgICAgICAgICptcG9vbCwgKmRpZ2VzdCwgKktFWURBVEE7CisJVUNIQVIgICAgICAgICAgICAgICBNaWNbMTZdLCBPbGRNaWNbMTZdOworCVVDSEFSICAgICAgICAgICAgICAgR1RLWzMyXSwgS2V5WzMyXTsKKwlLRVlfSU5GTwkJCXBlZXJLZXlJbmZvOworCisJLy8gYWxsb2NhdGUgbWVtb3J5CisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUiAqKSZtcG9vbCwgMTAyNCk7CisKKwlpZihtcG9vbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvLyBkaWdlc3QgTGVuID0gODAuCisJZGlnZXN0ID0gKFVDSEFSICopIFJPVU5EX1VQKG1wb29sLCA0KTsKKwkvLyBLRVlEQVRBIExlbiA9IDUxMi4KKwlLRVlEQVRBID0gKFVDSEFSICopIFJPVU5EX1VQKGRpZ2VzdCArIDgwLCA0KTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYUdyb3VwTXNnMUFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIFByb2Nlc3MgR3JvdXAgTWVzc2FnZSAxIGZyYW1lLiBza2lwIDgwMi4xMSBoZWFkZXIoMjQpICYgTExDX1NOQVAgaGVhZGVyKDgpCisJcEdyb3VwID0gKFBFQVBPTF9QQUNLRVQpICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKKworCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpJnBlZXJLZXlJbmZvLCBzaXplb2YocGVlcktleUluZm8pKTsKKwlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgKFBVQ0hBUikmcEdyb3VwLT5LZXlEZXNjLktleUluZm8sIHNpemVvZihLRVlfSU5GTykpOworCisJKigoVVNIT1JUKikmcGVlcktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUKikmcGVlcktleUluZm8pKTsKKworCS8vIDAuIENoZWNrIGNpcGhlciB0eXBlIG1hdGNoCisJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IDIpKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKwllbHNlIGlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCAmJiAocGVlcktleUluZm8uS2V5RGVzY1ZlciAhPSAxKSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyAxLiBWZXJpZnkgUmVwbGF5IGNvdW50ZXIKKwkvLyAgICBDaGVjayBSZXBsYXkgQ291bnRlciwgaXQgaGFzIHRvIGJlIGxhcmdlciB0aGFuIGxhc3Qgb25lLiBObyBuZWVkIHRvIGJlIGV4YWN0IG9uZSBsYXJnZXIKKwlpZihSVE1QQ29tcGFyZU1lbW9yeShwR3JvdXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBVcGRhdGUgbmV3IHJlcGxheSBjb3VudGVyCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgcEdyb3VwLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gMi4gVmVyaWZ5IE1JQyBpcyB2YWxpZAorCS8vIFNhdmUgdGhlIE1JQyBhbmQgcmVwbGFjZSB3aXRoIHplcm8KKwlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBHcm91cC0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCU5kaXNaZXJvTWVtb3J5KHBHcm91cC0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsJLy8gQUVTCisJCUhNQUNfU0hBMSgoUFVDSEFSKSBwR3JvdXAsIHBHcm91cC0+Qm9keV9MZW5bMV0gKyA0LCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJewkvLyBUS0lQCisJCWhtYWNfbWQ1KHBBZC0+U3RhQ2ZnLlBUSywgTEVOX0VBUF9NSUNLLCAoUFVDSEFSKSBwR3JvdXAsIHBHcm91cC0+Qm9keV9MZW5bMV0gKyA0LCBNaWMpOworCX0KKworCWlmKCFOZGlzRXF1YWxNZW1vcnkoT2xkTWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiIE1JQyBEaWZmZXJlbnQgaW4gZ3JvdXAgbXNnIDEgb2YgMi13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNSUMgVkFMSUQgaW4gZ3JvdXAgbXNnIDEgb2YgMi13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKworCisJLy8gMy4gRGVjcnlwdCBHVEsgZnJvbSBLZXkgRGF0YQorCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIERlY3J5cHQgQUVTIEdUSworCQlBRVNfR1RLX0tFWV9VTldSQVAoJnBBZC0+U3RhQ2ZnLlBUS1sxNl0sIEtFWURBVEEsICBwR3JvdXAtPktleURlc2MuS2V5RGF0YUxlblsxXSwgcEdyb3VwLT5LZXlEZXNjLktleURhdGEpOworCX0KKwllbHNlCS8vIFRLSVAKKwl7CisJCUlOVCBpOworCisJCS8vIERlY3J5cHQgVEtJUCBHVEsKKwkJLy8gQ29uc3RydWN0IDMyIGJ5dGVzIFJDNCBLZXkKKwkJTmRpc01vdmVNZW1vcnkoS2V5LCBwR3JvdXAtPktleURlc2MuS2V5SXYsIDE2KTsKKwkJTmRpc01vdmVNZW1vcnkoJktleVsxNl0sICZwQWQtPlN0YUNmZy5QVEtbMTZdLCAxNik7CisJCUFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBLZXksIDMyKTsKKwkJLy9kaXNjYXJkIGZpcnN0IDI1NiBieXRlcworCQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJCUFSQ0ZPVVJfQllURSgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhUKTsKKwkJLy8gRGVjcnlwdCBHVEsuIEJlY2FyZWZ1bCwgdGhlcmUgaXMgbm8gSUNWIHRvIGNoZWNrIHRoZSByZXN1bHQgaXMgY29ycmVjdCBvciBub3QKKwkJQVJDRk9VUl9ERUNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIEtFWURBVEEsIHBHcm91cC0+S2V5RGVzYy5LZXlEYXRhLCBwR3JvdXAtPktleURlc2MuS2V5RGF0YUxlblsxXSk7CisJfQorCisJLy8gUHJvY2VzcyBkZWNyeXB0ZWQga2V5IGRhdGEgbWF0ZXJpYWwKKwkvLyBQYXJzZSBrZXlEYXRhIHRvIGhhbmRsZSBLREUgZm9ybWF0IGZvciBXUEEyUFNLCisJaWYgKHBlZXJLZXlJbmZvLkVLRF9ETCkKKwl7CisJCWlmICghUGFyc2VLZXlEYXRhKHBBZCwgS0VZREFUQSwgcEdyb3VwLT5LZXlEZXNjLktleURhdGFMZW5bMV0sIDApKQorCQl7CisJCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQkJcmV0dXJuOworCQl9CisJfQorCWVsc2UJLy8gV1BBUFNLCisJeworCQkvLyBzZXQga2V5IG1hdGVyaWFsLCBUeE1pYyBhbmQgUnhNaWMgZm9yIFdQQVBTSworCQlOZGlzTW92ZU1lbW9yeShHVEssIEtFWURBVEEsIDMyKTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuR1RLLCBHVEssIDMyKTsKKwkJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkID0gcGVlcktleUluZm8uS2V5SW5kZXg7CisKKwkJLy8gUHJlcGFyZSBwYWlyLXdpc2Uga2V5IGluZm9ybWF0aW9uIGludG8gc2hhcmVkIGtleSB0YWJsZQorCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksIEdUSywgTEVOX1RLSVBfRUspOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlJ4TWljLCAmR1RLWzE2XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5UeE1pYywgJkdUS1syNF0sIExFTl9US0lQX1RYTUlDSyk7CisKKwkJLy8gVXBkYXRlIFNoYXJlZCBLZXkgQ2lwaGVyQWxnCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJCWlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKwkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKworICAgIAkvL2hleF9kdW1wKCJHcm91cCBLZXkgOiIsIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LCBMRU5fVEtJUF9FSyk7CisJfQorCisJLy8gVXBkYXRlIGdyb3VwIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUKKwlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorCQkJCQkJICBCU1MwLAorCQkJCQkJICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5UeE1pYywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5SeE1pYyk7CisKKwkvLyBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUKKwlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwKKwkJCQkJCQkgIEJTUzAsCisJCQkJCQkJICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQsCisJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywKKwkJCQkJCQkgIE5VTEwpOworCisJLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKwkvL3BBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJU1RBX1BPUlRfU0VDVVJFRChwQWQpOworCisgICAgLy8gSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkKKyAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworCisJLy8gaW5pdCBoZWFkZXIgYW5kIEZpbGwgUGFja2V0CisJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFQVBPTCk7CisKKwkvLyBaZXJvIEdyb3VwIG1lc3NhZ2UgMSBib2R5CisJTmRpc1plcm9NZW1vcnkoJlBhY2tldCwgc2l6ZW9mKFBhY2tldCkpOworCVBhY2tldC5Qcm9WZXIJPSBFQVBPTF9WRVI7CisJUGFja2V0LlByb1R5cGUJPSBFQVBPTEtleTsKKwlQYWNrZXQuQm9keV9MZW5bMV0gID0gc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUU7CQkvLyBObyBkYXRhIGZpZWxkCisKKwkvLworCS8vIEdyb3VwIE1lc3NhZ2UgMiBhcyAgRUFQT0wtS2V5KDEsMCwwLDAsRywwLDAsTUlDLDApCisJLy8KKwlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKwl7CisJCVBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEEyX0tFWV9ERVNDOworCX0KKwllbHNlCisJeworCQlQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMV9LRVlfREVTQzsKKwl9CisKKwkvLyBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uIGFuZCBhcHByb3ByaWF0ZSBSU04gSUUKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSBwZWVyS2V5SW5mby5LZXlEZXNjVmVyOworCisJLy8gVXBkYXRlIEtleSBMZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMF0gPSBwR3JvdXAtPktleURlc2MuS2V5TGVuZ3RoWzBdOworCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFsxXSA9IHBHcm91cC0+S2V5RGVzYy5LZXlMZW5ndGhbMV07CisKKwkvLyBLZXkgSW5kZXggYXMgRy1Nc2cgMQorCWlmKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykKKwkJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlJbmRleCA9IHBlZXJLZXlJbmZvLktleUluZGV4OworCisJLy8gS2V5IFR5cGUgR3JvdXAga2V5CisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gR1JPVVBLRVk7CisKKwkvLyBLZXlNaWMgZmllbGQgcHJlc2VudGVkCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMgID0gMTsKKworCS8vIFNlY3VyZSBiaXQKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLlNlY3VyZSAgPSAxOworCisJLy8gQ29udmVydCB0byBsaXR0bGUtZW5kaWFuIGZvcm1hdC4KKwkqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykgPSBjcHUybGUxNigqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykpOworCisJLy8gS2V5IFJlcGxheSBjb3VudAorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBHcm91cC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIE91dCBidWZmZXIgZm9yIHRyYW5zbWl0dGluZyBncm91cCBtZXNzYWdlIDIKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIFByZXBhcmUgRUFQT0wgZnJhbWUgZm9yIE1JQyBjYWxjdWxhdGlvbgorCS8vIEJlIGNhcmVmdWwsIG9ubHkgRUFQT0wgZnJhbWUgaXMgY291bnRlZCBmb3IgTUlDIGNhbGN1bGF0aW9uCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJRU5EX09GX0FSR1MpOworCisJLy8gUHJlcGFyZSBhbmQgRmlsbCBNSUMgdmFsdWUKKwlOZGlzWmVyb01lbW9yeShNaWMsIHNpemVvZihNaWMpKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJeworCQlobWFjX21kNShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgcE91dEJ1ZmZlciwgRnJhbWVMZW4sIE1pYyk7CisJfQorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgCQkmRnJhbWVMZW4sCisJCQkJCQlMRU5HVEhfODAyXzMsICAgICAJCSZIZWFkZXI4MDJfMywKKwkJCQkJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKworCS8vIDUuIENvcHkgZnJhbWUgdG8gVHggcmluZyBhbmQgcHJlcGFyZSBmb3IgZW5jcnlwdGlvbgorCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBGQUxTRSk7CisKKwkvLyA2IEZyZWUgYWxsb2NhdGVkIG1lbW9yeQorCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKwlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCisJLy8gc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBzZXQga2V5IGRvbmUgV1BBMgorCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU0VUX0tFWV9ET05FX1dQQTJfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYUdyb3VwTXNnMUFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUluaXQgV1BBIE1BQyBoZWFkZXIKKworCUFyZ3VtZW50czoKKwkJcEFkCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJV3BhTWFjSGVhZGVySW5pdCgKKwlJTgkJUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUCVBIRUFERVJfODAyXzExCXBIZHI4MDIxMSwKKwlJTgkJVUNIQVIJCQl3ZXAsCisJSU4JCVBVQ0hBUgkJICAgIHBBZGRyMSkKK3sKKwlOZGlzWmVyb01lbW9yeShwSGRyODAyMTEsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJcEhkcjgwMjExLT5GQy5UeXBlCT0gQlRZUEVfREFUQTsKKwlwSGRyODAyMTEtPkZDLlRvRHMJPSAxOworCWlmICh3ZXAJPT0gMSkKKwkJcEhkcjgwMjExLT5GQy5XZXAgPSAxOworCisJIC8vCUFkZHIxOiBCU1NJRCwgQWRkcjI6IFNBLCBBZGRyMzoJREEKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjEsIHBBZGRyMSk7CisJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlwSGRyODAyMTEtPlNlcXVlbmNlID0JcEFkLT5TZXF1ZW5jZTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAorCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSBlbmNyeXB0aW9uIGJlZm9yZSByZWFsbHkKKwlzZW50IG91dCB0byBhaXIuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlQTkRJU19QQUNLRVQJUG9pbnRlciB0byBvdXRnb2luZyBOZGlzIGZyYW1lCisJCU51bWJlck9mRnJhZwlOdW1iZXIgb2YgZnJhZ21lbnQgcmVxdWlyZWQKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgICAgUlRNUFRvV2lyZWxlc3NTdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwSGVhZGVyODAyXzMsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIERhdGFMZW4sCisgICAgSU4JQk9PTEVBTgkJCWlzNHdheUZyYW1lKQorCit7CisJTkRJU19TVEFUVVMgICAgIFN0YXR1czsKKwlQTkRJU19QQUNLRVQgICAgcFBhY2tldDsKKwlVQ0hBUiAgIEluZGV4OworCisJZG8KKwl7CisJCS8vIDEuIGJ1aWxkIGEgTkRJUyBwYWNrZXQgYW5kIGNhbGwgUlRNUFNlbmRQYWNrZXQoKTsKKwkJLy8gICAgYmUgY2FyZWZ1bCBhYm91dCBob3cvd2hlbiB0byByZWxlYXNlIHRoaXMgaW50ZXJuYWwgYWxsb2NhdGVkIE5ESVMgUEFDS0VUIGJ1ZmZlcgorCQlTdGF0dXMgPSBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBQYWNrZXQsIHBIZWFkZXI4MDJfMywgSGRyTGVuLCBwRGF0YSwgRGF0YUxlbik7CisJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCWJyZWFrOworCisJCWlmIChpczR3YXlGcmFtZSkKKwkJCVJUTVBfU0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUocFBhY2tldCwgMSk7CisJCWVsc2UKKwkJCVJUTVBfU0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUocFBhY2tldCwgMCk7CisKKwkJLy8gMi4gc2VuZCBvdXQgdGhlIHBhY2tldAorCQlTdGF0dXMgPSBTVEFTZW5kUGFja2V0KHBBZCwgcFBhY2tldCk7CisJCWlmKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQkvLyBEZXF1ZXVlIG9uZSBmcmFtZSBmcm9tIFR4U3dRdWV1ZTAuLjMgcXVldWUgYW5kIHByb2Nlc3MgaXQKKwkJCS8vIFRoZXJlIGFyZSB0aHJlZSBwbGFjZSBjYWxsaW5nIGRlcXVldWUgZm9yIFRYIHJpbmcuCisJCQkvLyAxLiBIZXJlLCByaWdodCBhZnRlciBxdWV1ZWluZyB0aGUgZnJhbWUuCisJCQkvLyAyLiBBdCB0aGUgZW5kIG9mIFR4UmluZ1R4RG9uZSBzZXJ2aWNlIHJvdXRpbmUuCisJCQkvLyAzLiBVcG9uIE5ESVMgY2FsbCBSVE1QU2VuZFBhY2tldHMKKwkJCWlmKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgJiYKKwkJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpKQorCQkJeworCQkJCWZvcihJbmRleCA9IDA7IEluZGV4IDwgNTsgSW5kZXggKyspCisJCQkJCWlmKHBBZC0+VHhTd1F1ZXVlW0luZGV4XS5OdW1iZXIgPiAwKQorCQkJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgSW5kZXgsIE1BWF9UWF9QUk9DRVNTKTsKKwkJCX0KKwkJfQorCX0gd2hpbGUoRkFMU0UpOworCit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENoZWNrIFNhbml0eSBSU04gSUUgZm9ybSBBUAorCisgICAgQXJndW1lbnRzOgorCisgICAgUmV0dXJuIFZhbHVlOgorCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIENoZWNrUlNOSUUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIERhdGFMZW4sCisJT1VUCVVDSEFSCQkJKk9mZnNldCkKK3sKKwlQVUNIQVIgICAgICAgICAgICAgIHBWSUU7CisJVUNIQVIgICAgICAgICAgICAgICBsZW47CisJUEVJRF9TVFJVQ1QgICAgICAgICBwRWlkOworCUJPT0xFQU4JCQkJcmVzdWx0ID0gRkFMU0U7CisKKwlwVklFID0gcERhdGE7CisJbGVuCSA9IERhdGFMZW47CisJKk9mZnNldCA9IDA7CisKKwl3aGlsZSAobGVuID4gc2l6ZW9mKFJTTklFMikpCisJeworCQlwRWlkID0gKFBFSURfU1RSVUNUKSBwVklFOworCQkvLyBXUEEgUlNOIElFCisJCWlmICgocEVpZC0+RWlkID09IElFX1dQQSkgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkpKQorCQl7CisJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSB8fCBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spICYmCisJCQkJKE5kaXNFcXVhbE1lbW9yeShwVklFLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4pKSAmJgorCQkJCShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9PSAocEVpZC0+TGVuICsgMikpKQorCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGVja1JTTklFID09PiBXUEEvV1BBUFNLIFJTTiBJRSBtYXRjaGVkIGluIE1zZyAzLCBMZW5ndGgoJWQpIFxuIiwgKHBFaWQtPkxlbiArIDIpKSk7CisJCQkJCXJlc3VsdCA9IFRSVUU7CisJCQl9CisKKwkJCSpPZmZzZXQgKz0gKHBFaWQtPkxlbiArIDIpOworCQl9CisJCS8vIFdQQTIgUlNOIElFCisJCWVsc2UgaWYgKChwRWlkLT5FaWQgPT0gSUVfUlNOKSAmJiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0ICsgMiwgUlNOX09VSSwgMykpKQorCQl7CisJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIgfHwgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgJiYKKwkJCQkoTmRpc0VxdWFsTWVtb3J5KHBWSUUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbikpICYmCisJCQkJKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOSUVfTGVuID09IChwRWlkLT5MZW4gKyAyKSkpCisJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNoZWNrUlNOSUUgPT0+IFdQQTIvV1BBMlBTSyBSU04gSUUgbWF0Y2hlZCBpbiBNc2cgMywgTGVuZ3RoKCVkKSBcbiIsIChwRWlkLT5MZW4gKyAyKSkpOworCQkJCQlyZXN1bHQgPSBUUlVFOworCQkJfQorCisJCQkqT2Zmc2V0ICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJcFZJRSArPSAocEVpZC0+TGVuICsgMik7CisJCWxlbiAgLT0gKHBFaWQtPkxlbiArIDIpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNoZWNrUlNOSUUgPT0+IHNraXBfb2Zmc2V0KCVkKSBcbiIsICpPZmZzZXQpKTsKKworCXJldHVybiByZXN1bHQ7CisKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBQYXJzZSBLRVlEQVRBIGZpZWxkLiAgS0VZREFUQVtdIE1heSBjb250YWluIDIgUlNOIElFIGFuZCBvcHRpb25hbGx5IEdUSy4KKyAgICBHVEsgIGlzIGVuY2FwdHVsYXRlZCBpbiBLREUgZm9ybWF0IGF0ICBwLjgzIDgwMi4xMWkgRDEwCisKKyAgICBBcmd1bWVudHM6CisKKyAgICBSZXR1cm4gVmFsdWU6CisKKyAgICBOb3RlOgorICAgICAgICA4MDIuMTFpIEQxMAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBQYXJzZUtleURhdGEoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5RGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIEtleURhdGFMZW4sCisJSU4JVUNIQVIJCQliUGFpcmV3aXNlKQoreworICAgIFBLREVfRU5DQVAgICAgICAgICAgcEtERSA9IE5VTEw7CisgICAgUFVDSEFSICAgICAgICAgICAgICBwTXlLZXlEYXRhID0gcEtleURhdGE7CisgICAgVUNIQVIgICAgICAgICAgICAgICBLZXlEYXRhTGVuZ3RoID0gS2V5RGF0YUxlbjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEdUS0xFTjsKKwlVQ0hBUgkJCQlza2lwX29mZnNldDsKKworCS8vIFZlcmlmeSBUaGUgUlNOIElFIGNvbnRhaW5lZCBpbiBQYWlyZXdpc2UtTXNnIDMgYW5kIHNraXAgaXQKKwlpZiAoYlBhaXJld2lzZSkKKyAgICB7CisJCS8vIENoZWNrIFJTTiBJRSB3aGV0aGVyIGl0IGlzIFdQQTIvV1BBMlBTSworCQlpZiAoIUNoZWNrUlNOSUUocEFkLCBwS2V5RGF0YSwgS2V5RGF0YUxlbiwgJnNraXBfb2Zmc2V0KSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUGFyc2VLZXlEYXRhID09PiBXUEEyL1dQQTJQU0sgUlNOIElFIG1pc21hdGNoZWQgXG4iKSk7CisJCQloZXhfZHVtcCgiR2V0IEtFWURBVEEgOiIsIHBLZXlEYXRhLCBLZXlEYXRhTGVuKTsKKwkJCXJldHVybiBGQUxTRTsKKyAgICAJfQorICAgIAllbHNlCisJCXsKKwkJCS8vIHNraXAgUlNOIElFCisJCQlwTXlLZXlEYXRhICs9IHNraXBfb2Zmc2V0OworCQkJS2V5RGF0YUxlbmd0aCAtPSBza2lwX29mZnNldDsKKworCQkJLy9EQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQYXJzZUtleURhdGEgPT0+IFdQQTIvV1BBMlBTSyBSU04gSUUgbWF0Y2hlZCBpbiBNc2cgMywgTGVuZ3RoKCVkKSBcbiIsIHNraXBfb2Zmc2V0KSk7CisJCX0KKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlBhcnNlS2V5RGF0YSA9PT4gS2V5RGF0YUxlbmd0aCAlZCB3aXRob3V0IFJTTl9JRSBcbiIsIEtleURhdGFMZW5ndGgpKTsKKworCS8vIFBhcnNlIEVLRCBmb3JtYXQKKwlpZiAoS2V5RGF0YUxlbmd0aCA+PSA4KQorICAgIHsKKyAgICAgICAgcEtERSA9IChQS0RFX0VOQ0FQKSBwTXlLZXlEYXRhOworICAgIH0KKwllbHNlCisgICAgeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUjogS2V5RGF0YUxlbmd0aCBpcyB0b28gc2hvcnQgXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKworCS8vIFNhbml0eSBjaGVjayAtIHNoYXJlZCBrZXkgaW5kZXggc2hvdWxkIG5vdCBiZSAwCisJaWYgKHBLREUtPkdUS0VuY2FwLktpZCA9PSAwKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRVJST1I6IEdUSyBLZXkgaW5kZXggemVybyBcbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCS8vIFNhbml0eSBjaGVjayAtIEtFRCBsZW5ndGgKKwlpZiAoS2V5RGF0YUxlbmd0aCA8IChwS0RFLT5MZW4gKyAyKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBUaGUgbGVuIGZyb20gS0RFIGlzIHRvbyBzaG9ydCBcbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCS8vIEdldCBHVEsgbGVuZ3RoIC0gcmVmZXIgdG8gSUVFRSA4MDIuMTFpLTIwMDQgcC44MgorCUdUS0xFTiA9IHBLREUtPkxlbiAtNjsKKworCWlmIChHVEtMRU4gPCBMRU5fQUVTX0tFWSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGxlbmd0aCBpcyB0b28gc2hvcnQgKCVkKSBcbiIsIEdUS0xFTikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisJfQorCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiR1RLIEtleSB3aXRoIEtERSBmb3JtZXQgZ290IGluZGV4PSVkLCBsZW49JWQgXG4iLCBwS0RFLT5HVEtFbmNhcC5LaWQsIEdUS0xFTikpOworCisJLy8gVXBkYXRlIEdUSworCS8vIHNldCBrZXkgbWF0ZXJpYWwsIFR4TWljIGFuZCBSeE1pYyBmb3IgV1BBUFNLCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuR1RLLCBwS0RFLT5HVEtFbmNhcC5HVEssIDMyKTsKKwlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSBwS0RFLT5HVEtFbmNhcC5LaWQ7CisKKwkvLyBVcGRhdGUgc2hhcmVkIGtleSB0YWJsZQorCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksIHBLREUtPkdUS0VuY2FwLkdUSywgTEVOX1RLSVBfRUspOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uUnhNaWMsICZwS0RFLT5HVEtFbmNhcC5HVEtbMTZdLCBMRU5fVEtJUF9SWE1JQ0spOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsICZwS0RFLT5HVEtFbmNhcC5HVEtbMjRdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJLy8gVXBkYXRlIFNoYXJlZCBLZXkgQ2lwaGVyQWxnCisJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwlpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKwllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisKKwlyZXR1cm4gVFJVRTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2lzY28gQ0NLTSBQUkYgZnVuY3Rpb24KKworCUFyZ3VtZW50czoKKwkJa2V5CQkJCUNpc2NvIEJhc2UgVHJhbnNpZW50IEtleSAoQlRLKQorCQlrZXlfbGVuCQkJVGhlIGtleSBsZW5ndGggb2YgdGhlIEJUSworCQlkYXRhCQkJUnVxdWVzdCBOdW1iZXIoUk4pICsgQlNTSUQKKwkJZGF0YV9sZW4JCVRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKwkJb3V0cHV0CQkJU3RvcmUgZm9yIFBUSyhQYWlyd2lzZSB0cmFuc2llbnQga2V5cykKKwkJbGVuCQkJCVRoZSBsZW5ndGggb2YgdGhlIG91dHB1dAorCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKwkJODAyLjFpCUFubmV4IEYuOQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDQ0tNUFJGKAorCUlOCVVDSEFSCSprZXksCisJSU4JSU5UCQlrZXlfbGVuLAorCUlOCVVDSEFSCSpkYXRhLAorCUlOCUlOVAkJZGF0YV9sZW4sCisJT1VUCVVDSEFSCSpvdXRwdXQsCisJSU4JSU5UCQlsZW4pCit7CisJSU5UCQlpOworCVVDSEFSCWlucHV0WzEwMjRdOworCUlOVAkJY3VycmVudGluZGV4ID0gMDsKKwlJTlQJCXRvdGFsX2xlbjsKKworCU5kaXNNb3ZlTWVtb3J5KGlucHV0LCBkYXRhLCBkYXRhX2xlbik7CisJdG90YWxfbGVuID0gZGF0YV9sZW47CisJaW5wdXRbdG90YWxfbGVuXSA9IDA7CisJdG90YWxfbGVuKys7CisJZm9yCShpID0gMDsJaSA8CShsZW4gKyAxOSkgLyAyMDsgaSsrKQorCXsKKwkJSE1BQ19TSEExKGlucHV0LCB0b3RhbF9sZW4sCWtleSwga2V5X2xlbiwgJm91dHB1dFtjdXJyZW50aW5kZXhdKTsKKwkJY3VycmVudGluZGV4ICs9CTIwOworCQlpbnB1dFt0b3RhbF9sZW4gLSAxXSsrOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByb2Nlc3MgTUlDIGVycm9yIGluZGljYXRpb24gYW5kIHJlY29yZCBNSUMgZXJyb3IgdGltZXIuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwV3BhS2V5IAkJUG9pbnRlciB0byB0aGUgV1BBIGtleSBzdHJ1Y3R1cmUKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QUmVwb3J0TWljRXJyb3IoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUENJUEhFUl9LRVkgCXBXcGFLZXkpCit7CisJVUxPTkcJTm93OworICAgIFVDSEFSICAgdW5pY2FzdEtleSA9IChwV3BhS2V5LT5UeXBlID09IFBBSVJXSVNFX0tFWSA/IDE6MCk7CisKKwkvLyBSZWNvcmQgTGFzdCBNSUMgZXJyb3IgdGltZSBhbmQgY291bnQKKwlOb3cgPSBqaWZmaWVzOworCWlmIChwQWQtPlN0YUNmZy5NaWNFcnJDbnQgPT0gMCkKKwl7CisJCXBBZC0+U3RhQ2ZnLk1pY0VyckNudCsrOworCQlwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lID0gTm93OworICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCA4KTsKKwl9CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuTWljRXJyQ250ID09IDEpCisJeworCQlpZiAoKHBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgKyAoNjAgKiBPU19IWikpIDwgTm93KQorCQl7CisJCQkvLyBVcGRhdGUgTGFzdCBNSUMgZXJyb3IgdGltZSwgdGhpcyBkaWQgbm90IHZpb2xhdGUgdHdvIE1JQyBlcnJvcnMgd2l0aGluIDYwIHNlY29uZHMKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgPSBOb3c7CisJCX0KKwkJZWxzZQorCQl7CisKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19DT1VOVEVSX01FQVNVUkVTX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgPSBOb3c7CisJCQkvLyBWaW9sYXRlIE1JQyBlcnJvciBjb3VudHMsIE1JQyBjb3VudGVybWVhc3VyZXMga2lja3MgaW4KKwkJCXBBZC0+U3RhQ2ZnLk1pY0VyckNudCsrOworCQkJLy8gV2Ugc2hhbGwgYmxvY2sgYWxsIHJlY2VwdGlvbgorCQkJLy8gV2Ugc2hhbGwgY2xlYW4gYWxsIFR4IHJpbmcgYW5kIGRpc2Fzc29pY2F0ZSBmcm9tIEFQIGFmdGVyIG5leHQgRUFQT0wgZnJhbWUKKwkJCS8vCisJCQkvLyBObyBuZWNlc3NhcnkgdG8gY2xlYW4gYWxsIFR4IHJpbmcsIG9uIFJUTVBIYXJkVHJhbnNtaXQgd2lsbCBzdG9wIHNlbmRpbmcgbm9uLTgwMi4xWCBFQVBPTCBwYWNrZXRzCisJCQkvLyBpZiBwQWQtPlN0YUNmZy5NaWNFcnJDbnQgZ3JlYXRlciB0aGFuIDIuCisJCQkvLworCQkJLy8gUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsKKwkJCS8vIFJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CRSk7CisJCQkvLyBSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVkkpOworCQkJLy8gUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZPKTsKKwkJCS8vIFJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9IQ0NBKTsKKwkJfQorCX0KKwllbHNlCisJeworCQkvLyBNSUMgZXJyb3IgY291bnQgPj0gMgorCQkvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuCisJCTsKKwl9CisgICAgTWxtZUVucXVldWUocEFkLAorCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCU9JRF84MDJfMTFfTUlDX0ZBSUxVUkVfUkVQT1JUX0ZSQU1FLAorCQkJCTEsCisJCQkJJnVuaWNhc3RLZXkpOworCisgICAgaWYgKHBBZC0+U3RhQ2ZnLk1pY0VyckNudCA9PSAyKQorICAgIHsKKyAgICAgICAgUlRNUFNldFRpbWVyKCZwQWQtPlN0YUNmZy5XcGFEaXNhc3NvY0FuZEJsb2NrQXNzb2NUaW1lciwgMTAwKTsKKyAgICB9Cit9CisKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNkZWZpbmUJTEVOR1RIX0VBUF9IICAgIDQKKy8vIElmIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBFQVAtUGFja2V0ICxmaW5kIG91dCBpdHMgRUFQLUNvZGUgKFJlcXVlc3QoMHgwMSksIFJlc3BvbnNlKDB4MDIpLCBTdWNjZXNzKDB4MDMpLCBGYWlsdXJlKDB4MDQpKS4KK0lOVAkgICAgV3BhQ2hlY2tFYXBDb2RlKAorCUlOICBQUlRNUF9BREFQVEVSICAgCQlwQWQsCisJSU4gIFBVQ0hBUgkJCQlwRnJhbWUsCisJSU4gIFVTSE9SVAkJCQlGcmFtZUxlbiwKKwlJTiAgVVNIT1JUCQkJCU9mZlNldCkKK3sKKworCVBVQ0hBUglwRGF0YTsKKwlJTlQJcmVzdWx0ID0gMDsKKworCWlmKCBGcmFtZUxlbiA8IE9mZlNldCArIExFTkdUSF9FQVBPTF9IICsgTEVOR1RIX0VBUF9IICkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXBEYXRhID0gcEZyYW1lICsgT2ZmU2V0OyAvLyBza2lwIG9mZnNldCBieXRlcworCisJaWYoKihwRGF0YSsxKSA9PSBFQVBQYWNrZXQpIAkvLyA4MDIuMXggaGVhZGVyIC0gUGFja2V0IFR5cGUKKwl7CisJCSByZXN1bHQgPSAqKHBEYXRhKzQpOwkJLy8gRUFQIGhlYWRlciAtIENvZGUKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitWT0lEICAgIFdwYVNlbmRNaWNGYWlsdXJlVG9XcGFTdXBwbGljYW50KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiAgQk9PTEVBTiAgICAgICAgICBiVW5pY2FzdCkKK3sKKyAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgY2hhciBjdXN0b21bSVdfQ1VTVE9NX01BWF0gPSB7MH07CisKKyAgICBzcHJpbnRmKGN1c3RvbSwgIk1MTUUtTUlDSEFFTE1JQ0ZBSUxVUkUuaW5kaWNhdGlvbiIpOworICAgIGlmIChiVW5pY2FzdCkKKyAgICAgICAgc3ByaW50ZihjdXN0b20sICIlcyB1bmljYXN0IiwgY3VzdG9tKTsKKyAgICB3cnF1LmRhdGEubGVuZ3RoID0gc3RybGVuKGN1c3RvbSk7CisgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBjdXN0b20pOworCisgICAgcmV0dXJuOworfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworVk9JRAlXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBVQ0hBUiAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUNIQVIgICAgICAgICAgICAgICBIZWFkZXI4MDJfM1sxNF07CisJVUxPTkcgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJVUNIQVIgICAgICAgICAgICAgICBNaWNbMTZdOworICAgIEJPT0xFQU4gICAgICAgICAgICAgYlVuaWNhc3Q7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUgLS0tLS0+XG4iKSk7CisKKyAgICBiVW5pY2FzdCA9IChFbGVtLT5Nc2dbMF0gPT0gMSA/IFRSVUU6RkFMU0UpOworCXBBZC0+U2VxdWVuY2UgPSAoKHBBZC0+U2VxdWVuY2UpICsgMSkgJiAoTUFYX1NFUV9OVU1CRVIpOworCisJLy8gaW5pdCA4MDIuMyBoZWFkZXIgYW5kIEZpbGwgUGFja2V0CisJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFQVBPTCk7CisKKwlOZGlzWmVyb01lbW9yeSgmUGFja2V0LCBzaXplb2YoUGFja2V0KSk7CisJUGFja2V0LlByb1Zlcgk9IEVBUE9MX1ZFUjsKKwlQYWNrZXQuUHJvVHlwZQk9IEVBUE9MS2V5OworCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7CisKKyAgICAvLyBSZXF1ZXN0IGZpZWxkIHByZXNlbnRlZAorICAgIFBhY2tldC5LZXlEZXNjLktleUluZm8uUmVxdWVzdCA9IDE7CisKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSAyOworCX0KKwllbHNlCSAgLy8gVEtJUAorCXsKKwkJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0gMTsKKwl9CisKKyAgICBQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleVR5cGUgPSAoYlVuaWNhc3QgPyBQQUlSV0lTRUtFWSA6IEdST1VQS0VZKTsKKworCS8vIEtleU1pYyBmaWVsZCBwcmVzZW50ZWQKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleU1pYyAgPSAxOworCisgICAgLy8gRXJyb3IgZmllbGQgcHJlc2VudGVkCisJUGFja2V0LktleURlc2MuS2V5SW5mby5FcnJvciAgPSAxOworCisJLy8gVXBkYXRlIHBhY2tldCBsZW5ndGggYWZ0ZXIgZGVjaWRlIEtleSBkYXRhIHBheWxvYWQKKwlQYWNrZXQuQm9keV9MZW5bMV0gID0gc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUU7CisKKwkvLyBLZXkgUmVwbGF5IENvdW50CisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisgICAgaW5jX2J5dGVfYXJyYXkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgOCk7CisKKwkvLyBDb252ZXJ0IHRvIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorCSooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSk7CisKKworCU1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVUNIQVIgKikmcE91dEJ1ZmZlcik7ICAvLyBhbGxvY2F0ZSBtZW1vcnkKKwlpZihwT3V0QnVmZmVyID09IE5VTEwpCisJeworCQlyZXR1cm47CisJfQorCisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJICAgICAgICAgICAgICBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICZQYWNrZXQsCisJCSAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworCisJLy8gUHJlcGFyZSBhbmQgRmlsbCBNSUMgdmFsdWUKKwlOZGlzWmVyb01lbW9yeShNaWMsIHNpemVvZihNaWMpKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJewkvLyBBRVMKKyAgICAgICAgVUNIQVIgZGlnZXN0WzIwXSA9IHswfTsKKwkJSE1BQ19TSEExKHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCisJewkvLyBUS0lQCisJCWhtYWNfbWQ1KHBBZC0+U3RhQ2ZnLlBUSywgIExFTl9FQVBfTUlDSywgcE91dEJ1ZmZlciwgRnJhbWVMZW4sIE1pYyk7CisJfQorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworICAgIE1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorICAgIAkgIAkJCUxFTkdUSF84MDJfMywgICAgIAkJCSZIZWFkZXI4MDJfMywKKyAgICAJCQkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgICZQYWNrZXQsCisgICAgCQkJCUVORF9PRl9BUkdTKTsKKworCS8vIG9weSBmcmFtZSB0byBUeCByaW5nIGFuZCBzZW5kIE1JQyBmYWlsdXJlIHJlcG9ydCBmcmFtZSB0byBhdXRoZW50aWNhdG9yCisJUlRNUFRvV2lyZWxlc3NTdGEocEFkLCBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zLCAoUFVDSEFSKSZQYWNrZXQsIFBhY2tldC5Cb2R5X0xlblsxXSArIDQsIEZBTFNFKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYU1pY0ZhaWx1cmVSZXBvcnRGcmFtZSA8LS0tLS1cbiIpKTsKK30KKworLyoqIGZyb20gd3BhX3N1cHBsaWNhbnQKKyAqIGluY19ieXRlX2FycmF5IC0gSW5jcmVtZW50IGFyYml0cmFyeSBsZW5ndGggYnl0ZSBhcnJheSBieSBvbmUKKyAqIEBjb3VudGVyOiBQb2ludGVyIHRvIGJ5dGUgYXJyYXkKKyAqIEBsZW46IExlbmd0aCBvZiB0aGUgY291bnRlciBpbiBieXRlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5jcmVtZW50cyB0aGUgbGFzdCBieXRlIG9mIHRoZSBjb3VudGVyIGJ5IG9uZSBhbmQgY29udGludWVzCisgKiByb2xsaW5nIG92ZXIgdG8gbW9yZSBzaWduaWZpY2FudCBieXRlcyBpZiB0aGUgYnl0ZSB3YXMgaW5jcmVtZW50ZWQgZnJvbQorICogMHhmZiB0byAweDAwLgorICovCit2b2lkIGluY19ieXRlX2FycmF5KFVDSEFSICpjb3VudGVyLCBpbnQgbGVuKQoreworCWludCBwb3MgPSBsZW4gLSAxOworCXdoaWxlIChwb3MgPj0gMCkgeworCQljb3VudGVyW3Bvc10rKzsKKwkJaWYgKGNvdW50ZXJbcG9zXSAhPSAwKQorCQkJYnJlYWs7CisJCXBvcy0tOworCX0KK30KKworVk9JRCBXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYygKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisgICAgUlRNUF9BREFQVEVSICAgICAgICAgICAgICAgICpwQWQgPSAoUFJUTVBfQURBUFRFUilGdW5jdGlvbkNvbnRleHQ7CisgICAgTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICAgIERpc2Fzc29jUmVxOworCisJLy8gZGlzYXNzb2MgZnJvbSBjdXJyZW50IEFQIGZpcnN0CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFJlcG9ydE1pY0Vycm9yIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUCBhZnRlciBzZW5kaW5nIHNlY29uZCBjb250aW51b3VzIEVBUE9MIGZyYW1lXG4iKSk7CisJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIFJFQVNPTl9NSUNfRkFJTFVSRSk7CisJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsIHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCisJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKKwlwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9IFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhX2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YV9pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTQ1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YV9pb2N0bC5jCkBAIC0wLDAgKzEsNzIwMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBzdGFfaW9jdGwuYworCisgICAgQWJzdHJhY3Q6CisgICAgSU9DVEwgcmVsYXRlZCBzdWJyb3V0aW5lcworCisgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICBXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKKyAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBSb3J5IENoZW4gICAwMS0wMy0yMDAzICAgIGNyZWF0ZWQKKwlSb3J5IENoZW4gICAwMi0xNC0yMDA1ICAgIG1vZGlmeSB0byBzdXBwb3J0IFJUNjEKKyovCisKKyNpbmNsdWRlCSJydF9jb25maWcuaCIKKworI2lmZGVmIERCRworZXh0ZXJuIFVMT05HICAgIFJURGVidWdMZXZlbDsKKyNlbmRpZgorCisjZGVmaW5lIE5SX1dFUF9LRVlTIAkJCQk0CisjZGVmaW5lIFdFUF9TTUFMTF9LRVlfTEVOIAkJCSg0MC84KQorI2RlZmluZSBXRVBfTEFSR0VfS0VZX0xFTiAJCQkoMTA0LzgpCisKKyNkZWZpbmUgR1JPVVBfS0VZX05PICAgICAgICAgICAgICAgIDQKKworZXh0ZXJuIFVDSEFSICAgIENpcGhlcldwYTJUZW1wbGF0ZVtdOworZXh0ZXJuIFVDSEFSICAgIENpcGhlcldwYVBza1RraXBbXTsKK2V4dGVybiBVQ0hBUiAgICBDaXBoZXJXcGFQc2tUa2lwTGVuOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JUX1ZFUlNJT05fSU5GT3sKKyAgICBVQ0hBUiAgICAgICBEcml2ZXJWZXJzaW9uVzsKKyAgICBVQ0hBUiAgICAgICBEcml2ZXJWZXJzaW9uWDsKKyAgICBVQ0hBUiAgICAgICBEcml2ZXJWZXJzaW9uWTsKKyAgICBVQ0hBUiAgICAgICBEcml2ZXJWZXJzaW9uWjsKKyAgICBVSU5UICAgICAgICBEcml2ZXJCdWlsZFllYXI7CisgICAgVUlOVCAgICAgICAgRHJpdmVyQnVpbGRNb250aDsKKyAgICBVSU5UICAgICAgICBEcml2ZXJCdWlsZERheTsKK30gUlRfVkVSU0lPTl9JTkZPLCAqUFJUX1ZFUlNJT05fSU5GTzsKKworc3RydWN0IGl3X3ByaXZfYXJncyBwcml2dGFiW10gPSB7Cit7IFJUUFJJVl9JT0NUTF9TRVQsCisgIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwgMCwKKyAgInNldCJ9LAorCit7IFJUUFJJVl9JT0NUTF9TSE9XLCAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLAorICAiIn0sCit7IFJUUFJJVl9JT0NUTF9TSE9XLCBJV19QUklWX1RZUEVfQ0hBUiB8IDEwMjQsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssCisgICIifSwKKy8qIC0tLSBzdWItaW9jdGxzIGRlZmluaXRpb25zIC0tLSAqLworICAgIHsgU0hPV19DT05OX1NUQVRVUywKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJjb25uU3RhdHVzIiB9LAorCXsgU0hPV19EUlZJRVJfVkVSSU9OLAorCSAgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgImRyaXZlclZlciIgfSwKKyAgICB7IFNIT1dfQkFfSU5GTywKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJiYWluZm8iIH0sCisJeyBTSE9XX0RFU0NfSU5GTywKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJkZXNjaW5mbyIgfSwKKyAgICB7IFJBSU9fT0ZGLAorCSAgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgInJhZGlvX29mZiIgfSwKKwl7IFJBSU9fT04sCisJICAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCAicmFkaW9fb24iIH0sCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJeyBTSE9XX0RMU19FTlRSWV9JTkZPLAorCSAgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgImRsc2VudHJ5aW5mbyIgfSwKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl7IFNIT1dfQ0ZHX1ZBTFVFLAorCSAgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMDI0LCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCAic2hvdyIgfSwKKy8qIC0tLSBzdWItaW9jdGxzIHJlbGF0aW9ucyAtLS0gKi8KKworI2lmZGVmIERCRworeyBSVFBSSVZfSU9DVExfQkJQLAorICBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLAorICAiYmJwIn0sCit7IFJUUFJJVl9JT0NUTF9NQUMsCisgIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMDI0LAorICAibWFjIn0sCisjaWZkZWYgUlQzMHh4Cit7IFJUUFJJVl9JT0NUTF9SRiwKKyAgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywKKyAgInJmIn0sCisjZW5kaWYgLy8gUlQzMHh4IC8vCit7IFJUUFJJVl9JT0NUTF9FMlAsCisgIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMDI0LAorICAiZTJwIn0sCisjZW5kaWYgIC8qIERCRyAqLworCit7IFJUUFJJVl9JT0NUTF9TVEFUSVNUSUNTLAorICAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLAorICAic3RhdCJ9LAoreyBSVFBSSVZfSU9DVExfR1NJVEVTVVJWRVksCisgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwKKyAgImdldF9zaXRlX3N1cnZleSJ9LAorCisKK307CisKK0lOVCBTZXRfU1NJRF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCisjaWZkZWYgV01NX1NVUFBPUlQKK0lOVAlTZXRfV21tQ2FwYWJsZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisjZW5kaWYKKworSU5UIFNldF9OZXR3b3JrVHlwZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0F1dGhNb2RlX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisKK0lOVCBTZXRfRW5jcnlwVHlwZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0RlZmF1bHRLZXlJRF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0tleTFfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworSU5UIFNldF9LZXkyX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisKK0lOVCBTZXRfS2V5M19Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0tleTRfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworSU5UIFNldF9XUEFQU0tfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworCitJTlQgU2V0X1BTTW9kZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorSU5UIFNldF9XcGFfU3VwcG9ydCgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIERCRworCitWT0lEIFJUTVBJb2N0bE1BQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKTsKKworVk9JRCBSVE1QSW9jdGxFMlBST00oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgc3RydWN0IGl3cmVxICAgICp3cnEpOworCisjaWZkZWYgUlQzMHh4CitWT0lEIFJUTVBJb2N0bFJGKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIHN0cnVjdCBpd3JlcSAgICAqd3JxKTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKyNlbmRpZiAvLyBEQkcgLy8KKworCitORElTX1NUQVRVUyBSVE1QV1BBTm9uZUFkZEtleVByb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4JUFZPSUQJCQlwQnVmKTsKKworSU5UIFNldF9GcmFnVGVzdF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitJTlQgU2V0X1RHbldpZmlUZXN0X1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitJTlQgU2V0X0xvbmdSZXRyeUxpbWl0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X1Nob3J0UmV0cnlMaW1pdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKK0lOVCBTZXRfSWVlZTgwMjExZENsaWVudE1vZGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUCitJTlQgU2V0X0NhcnJpZXJEZXRlY3RfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCitzdGF0aWMgc3RydWN0IHsKKwlDSEFSICpuYW1lOworCUlOVCAoKnNldF9wcm9jKShQUlRNUF9BREFQVEVSIHBBZGFwdGVyLCBQVUNIQVIgYXJnKTsKK30gKlBSVE1QX1BSSVZBVEVfU0VUX1BST0MsIFJUTVBfUFJJVkFURV9TVVBQT1JUX1BST0NbXSA9IHsKKwl7IkRyaXZlclZlcnNpb24iLAkJCQlTZXRfRHJpdmVyVmVyc2lvbl9Qcm9jfSwKKwl7IkNvdW50cnlSZWdpb24iLAkJCQlTZXRfQ291bnRyeVJlZ2lvbl9Qcm9jfSwKKwl7IkNvdW50cnlSZWdpb25BQmFuZCIsCQkJU2V0X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jfSwKKwl7IlNTSUQiLAkJCQkJCVNldF9TU0lEX1Byb2N9LAorCXsiV2lyZWxlc3NNb2RlIiwJCQkJU2V0X1dpcmVsZXNzTW9kZV9Qcm9jfSwKKwl7IlR4QnVyc3QiLAkJCQkJU2V0X1R4QnVyc3RfUHJvY30sCisJeyJUeFByZWFtYmxlIiwJCQkJU2V0X1R4UHJlYW1ibGVfUHJvY30sCisJeyJUeFBvd2VyIiwJCQkJCVNldF9UeFBvd2VyX1Byb2N9LAorCXsiQ2hhbm5lbCIsCQkJCQlTZXRfQ2hhbm5lbF9Qcm9jfSwKKwl7IkJHUHJvdGVjdGlvbiIsCQkJCVNldF9CR1Byb3RlY3Rpb25fUHJvY30sCisJeyJSVFNUaHJlc2hvbGQiLAkJCQlTZXRfUlRTVGhyZXNob2xkX1Byb2N9LAorCXsiRnJhZ1RocmVzaG9sZCIsCQkJCVNldF9GcmFnVGhyZXNob2xkX1Byb2N9LAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCXsiSHRCdyIsCQkgICAgICAgICAgICAgICAgU2V0X0h0QndfUHJvY30sCisJeyJIdE1jcyIsCQkgICAgICAgICAgICAgICAgU2V0X0h0TWNzX1Byb2N9LAorCXsiSHRHaSIsCQkgICAgICAgICAgICAgICAgU2V0X0h0R2lfUHJvY30sCisJeyJIdE9wTW9kZSIsCQkgICAgICAgICAgICBTZXRfSHRPcE1vZGVfUHJvY30sCisJeyJIdEV4dGNoYSIsCQkgICAgICAgICAgICBTZXRfSHRFeHRjaGFfUHJvY30sCisJeyJIdE1wZHVEZW5zaXR5IiwJCSAgICAgICAgU2V0X0h0TXBkdURlbnNpdHlfUHJvY30sCisJeyJIdEJhV2luU2l6ZSIsCQkgICAgICAgIAlTZXRfSHRCYVdpblNpemVfUHJvY30sCisJeyJIdFJkZyIsCQkgICAgICAgIAkJU2V0X0h0UmRnX1Byb2N9LAorCXsiSHRBbXNkdSIsCQkgICAgICAgIAkJU2V0X0h0QW1zZHVfUHJvY30sCisJeyJIdEF1dG9CYSIsCQkgICAgICAgIAlTZXRfSHRBdXRvQmFfUHJvY30sCisJeyJIdEJhRGVjbGluZSIsCQkJCQlTZXRfQkFEZWNsaW5lX1Byb2N9LAorCXsiSHRQcm90ZWN0IiwJCSAgICAgICAgCVNldF9IdFByb3RlY3RfUHJvY30sCisJeyJIdE1pbW9QcyIsCQkgICAgICAgIAlTZXRfSHRNaW1vUHNfUHJvY30sCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisJeyJQa3RBZ2dyZWdhdGUiLAkJCQlTZXRfUGt0QWdncmVnYXRlX1Byb2N9LAorI2VuZGlmCisKKyNpZmRlZiBXTU1fU1VQUE9SVAorCXsiV21tQ2FwYWJsZSIsCQkJCQlTZXRfV21tQ2FwYWJsZV9Qcm9jfSwKKyNlbmRpZgorCXsiSUVFRTgwMjExSCIsCQkJCQlTZXRfSUVFRTgwMjExSF9Qcm9jfSwKKyAgICB7Ik5ldHdvcmtUeXBlIiwgICAgICAgICAgICAgICAgIFNldF9OZXR3b3JrVHlwZV9Qcm9jfSwKKwl7IkF1dGhNb2RlIiwJCQkJCVNldF9BdXRoTW9kZV9Qcm9jfSwKKwl7IkVuY3J5cFR5cGUiLAkJCQkJU2V0X0VuY3J5cFR5cGVfUHJvY30sCisJeyJEZWZhdWx0S2V5SUQiLAkJCQlTZXRfRGVmYXVsdEtleUlEX1Byb2N9LAorCXsiS2V5MSIsCQkJCQkJU2V0X0tleTFfUHJvY30sCisJeyJLZXkyIiwJCQkJCQlTZXRfS2V5Ml9Qcm9jfSwKKwl7IktleTMiLAkJCQkJCVNldF9LZXkzX1Byb2N9LAorCXsiS2V5NCIsCQkJCQkJU2V0X0tleTRfUHJvY30sCisJeyJXUEFQU0siLAkJCQkJCVNldF9XUEFQU0tfUHJvY30sCisJeyJSZXNldENvdW50ZXIiLAkJCQlTZXRfUmVzZXRTdGF0Q291bnRlcl9Qcm9jfSwKKwl7IlBTTW9kZSIsICAgICAgICAgICAgICAgICAgICAgIFNldF9QU01vZGVfUHJvY30sCisjaWZkZWYgREJHCisJeyJEZWJ1ZyIsCQkJCQkJU2V0X0RlYnVnX1Byb2N9LAorI2VuZGlmCisKKyNpZmRlZiBSQUxJTktfQVRFCisJeyJBVEUiLAkJCQkJCQlTZXRfQVRFX1Byb2N9LAorCXsiQVRFREEiLAkJCQkJCVNldF9BVEVfREFfUHJvY30sCisJeyJBVEVTQSIsCQkJCQkJU2V0X0FURV9TQV9Qcm9jfSwKKwl7IkFURUJTU0lEIiwJCQkJCVNldF9BVEVfQlNTSURfUHJvY30sCisJeyJBVEVDSEFOTkVMIiwJCQkJCVNldF9BVEVfQ0hBTk5FTF9Qcm9jfSwKKwl7IkFURVRYUE9XMCIsCQkJCQlTZXRfQVRFX1RYX1BPV0VSMF9Qcm9jfSwKKwl7IkFURVRYUE9XMSIsCQkJCQlTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jfSwKKwl7IkFURVRYQU5UIiwJCQkJCVNldF9BVEVfVFhfQW50ZW5uYV9Qcm9jfSwKKwl7IkFURVJYQU5UIiwJCQkJCVNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jfSwKKwl7IkFURVRYRlJFUU9GRlNFVCIsCQkJCVNldF9BVEVfVFhfRlJFUU9GRlNFVF9Qcm9jfSwKKwl7IkFURVRYQlciLAkJCQkJCVNldF9BVEVfVFhfQldfUHJvY30sCisJeyJBVEVUWExFTiIsCQkJCQlTZXRfQVRFX1RYX0xFTkdUSF9Qcm9jfSwKKwl7IkFURVRYQ05UIiwJCQkJCVNldF9BVEVfVFhfQ09VTlRfUHJvY30sCisJeyJBVEVUWE1DUyIsCQkJCQlTZXRfQVRFX1RYX01DU19Qcm9jfSwKKwl7IkFURVRYTU9ERSIsCQkJCQlTZXRfQVRFX1RYX01PREVfUHJvY30sCisJeyJBVEVUWEdJIiwJCQkJCQlTZXRfQVRFX1RYX0dJX1Byb2N9LAorCXsiQVRFUlhGRVIiLAkJCQkJU2V0X0FURV9SWF9GRVJfUHJvY30sCisJeyJBVEVSUkYiLAkJCQkJCVNldF9BVEVfUmVhZF9SRl9Qcm9jfSwKKwl7IkFURVdSRjEiLAkJCQkJCVNldF9BVEVfV3JpdGVfUkYxX1Byb2N9LAorCXsiQVRFV1JGMiIsCQkJCQkJU2V0X0FURV9Xcml0ZV9SRjJfUHJvY30sCisJeyJBVEVXUkYzIiwJCQkJCQlTZXRfQVRFX1dyaXRlX1JGM19Qcm9jfSwKKwl7IkFURVdSRjQiLAkJCQkJCVNldF9BVEVfV3JpdGVfUkY0X1Byb2N9LAorCXsiQVRFTERFMlAiLAkJCQkgICAgU2V0X0FURV9Mb2FkX0UyUF9Qcm9jfSwKKwl7IkFURVJFMlAiLAkJCQkJCVNldF9BVEVfUmVhZF9FMlBfUHJvY30sCisJeyJBVEVTSE9XIiwJCQkJCQlTZXRfQVRFX1Nob3dfUHJvY30sCisJeyJBVEVIRUxQIiwJCQkJCQlTZXRfQVRFX0hlbHBfUHJvY30sCisKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCXsiVHhTdG9wIiwJCQkJCQlTZXRfVHhTdG9wX1Byb2N9LAorCXsiUnhTdG9wIiwJCQkJCQlTZXRfUnhTdG9wX1Byb2N9LAorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIHsiV3BhU3VwcG9ydCIsICAgICAgICAgICAgICAgICAgU2V0X1dwYV9TdXBwb3J0fSwKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKworCisJeyJGaXhlZFR4TW9kZSIsICAgICAgICAgICAgICAgICBTZXRfRml4ZWRUeE1vZGVfUHJvY30sCisjaWZkZWYgQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQKKwl7Ik9wTW9kZSIsCQkJCQkJU2V0X09wTW9kZV9Qcm9jfSwKKyNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgIHsiVEduV2lmaVRlc3QiLCAgICAgICAgICAgICAgICAgU2V0X1RHbldpZmlUZXN0X1Byb2N9LAorICAgIHsiRm9yY2VHRiIsCQkgICAgICAgIAkJU2V0X0ZvcmNlR0ZfUHJvY30sCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJeyJEbHNBZGRFbnRyeSIsCQkJCQlTZXRfRGxzQWRkRW50cnlfUHJvY30sCisJeyJEbHNUZWFyRG93bkVudHJ5IiwJCQlTZXRfRGxzVGVhckRvd25FbnRyeV9Qcm9jfSwKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl7IkxvbmdSZXRyeSIsCSAgICAgICAgCQlTZXRfTG9uZ1JldHJ5TGltaXRfUHJvY30sCisJeyJTaG9ydFJldHJ5IiwJICAgICAgICAJCVNldF9TaG9ydFJldHJ5TGltaXRfUHJvY30sCisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCXsiMTFkQ2xpZW50TW9kZSIsCQkJCVNldF9JZWVlODAyMTFkQ2xpZW50TW9kZV9Qcm9jfSwKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVAorCXsiQ2FycmllckRldGVjdCIsCQkJCVNldF9DYXJyaWVyRGV0ZWN0X1Byb2N9LAorI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZTwtLQorI2lmZGVmIFJUMzB4eAorCXsiZWZ1c2VGcmVlTnVtYmVyIiwJCQkJc2V0X2VGdXNlR2V0RnJlZUJsb2NrQ291bnRfUHJvY30sCisJeyJlZnVzZUR1bXAiLAkJCQkJc2V0X2VGdXNlZHVtcF9Qcm9jfSwKKwl7ImVmdXNlTG9hZEZyb21CaW4iLAkJCQlzZXRfZUZ1c2VMb2FkRnJvbUJpbl9Qcm9jfSwKKyNlbmRpZiAvLyBSVDMweHggLy8KKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZS0tPgorCXtOVUxMLH0KK307CisKKworVk9JRCBSVE1QQWRkS2V5KAorCUlOCVBSVE1QX0FEQVBURVIJICAgIHBBZCwKKwlJTglQTkRJU184MDJfMTFfS0VZICAgIHBLZXkpCit7CisJVUxPTkcJCQkJS2V5SWR4OworCU1BQ19UQUJMRV9FTlRSWSAgCSpwRW50cnk7CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QQWRkS2V5IC0tLS0tLT5cbiIpKTsKKworCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJeworCQlpZiAocEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKQorCQl7CisJCSAgICBpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5QTUssIDMyKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5QTUssIHBLZXktPktleU1hdGVyaWFsLCBwS2V5LT5LZXlMZW5ndGgpOworICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgfQorCQkgICAgLy8gVXBkYXRlIFBUSworCQkgICAgTmRpc1plcm9NZW1vcnkoJnBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworICAgICAgICAgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIHBLZXktPktleU1hdGVyaWFsLCBMRU5fVEtJUF9FSyk7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSywgTEVOX1RLSVBfVFhNSUNLKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSyArIExFTl9US0lQX1RYTUlDSywgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUssIExFTl9US0lQX1RYTUlDSyk7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUsgKyBMRU5fVEtJUF9UWE1JQ0ssIExFTl9US0lQX1JYTUlDSyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERlY2lkZSBpdHMgQ2hpcGVyQWxnCisgICAgICAgIAlpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorICAgICAgICAJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworICAgICAgICAJZWxzZSBpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorICAgICAgICAJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisgICAgICAgIAllbHNlCisgICAgICAgIAkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGVzZSByZWxhdGVkIGluZm9ybWF0aW9uIHRvIE1BQ19UQUJMRV9FTlRSWQorICAgICAgICAJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LktleSwgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCBMRU5fVEtJUF9FSyk7CisgICAgICAgIAlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLCBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+UGFpcndpc2VLZXkuVHhNaWMsIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLCBMRU5fVEtJUF9UWE1JQ0spOworICAgICAgICAJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGc7CisKKyAgICAgICAgCS8vIFVwZGF0ZSBwYWlyd2lzZSBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlCisgICAgICAgIAlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorICAgICAgICAJCQkJCQkgIEJTUzAsCisgICAgICAgIAkJCQkJCSAgMCwKKyAgICAgICAgCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisgICAgICAgIAkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljKTsKKworICAgICAgICAJLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisgICAgICAgIAlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwKKyAgICAgICAgCQkJCQkJCSAgQlNTMCwKKyAgICAgICAgCQkJCQkJCSAgMCwKKyAgICAgICAgCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAorICAgICAgICAJCQkJCQkJICBwRW50cnkpOworCisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBzZXQgODAyLjF4IHBvcnQgY29udHJvbAorCSAgICAgICAgICAgIC8vcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7CisKKyAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZSBDb25uZWN0ZWQgZm9yIEdVSQorICAgICAgICAgICAgICAgIHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisgICAgICAgICAgICB9CisJCX0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVcGRhdGUgR1RLCisgICAgICAgICAgICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAocEtleS0+S2V5SW5kZXggJiAweEZGKTsKKyAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworICAgICAgICAgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LCBwS2V5LT5LZXlNYXRlcmlhbCwgTEVOX1RLSVBfRUspOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uUnhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUssIExFTl9US0lQX1RYTUlDSyk7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5UeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSyArIExFTl9US0lQX1RYTUlDSywgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5UeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSywgTEVOX1RLSVBfVFhNSUNLKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlJ4TWljLCBwS2V5LT5LZXlNYXRlcmlhbCArIExFTl9US0lQX0VLICsgTEVOX1RLSVBfVFhNSUNLLCBMRU5fVEtJUF9SWE1JQ0spOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBVcGRhdGUgU2hhcmVkIEtleSBDaXBoZXJBbGcKKyAgICAJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisgICAgCQlpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKyAgICAJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworICAgIAkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKyAgICAJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBncm91cCBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlCisgICAgICAgIAlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorICAgICAgICAJCQkJCQkgIEJTUzAsCisgICAgICAgIAkJCQkJCSAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnLAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsCisgICAgICAgIAkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5SeE1pYyk7CisKKyAgICAgICAgCS8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorICAgICAgICAJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisgICAgICAgIAkJCQkJCQkgIEJTUzAsCisgICAgICAgIAkJCQkJCQkgIHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKKyAgICAgICAgCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcsCisgICAgICAgIAkJCQkJCQkgIE5VTEwpOworCisgICAgICAgICAgICAvLyBzZXQgODAyLjF4IHBvcnQgY29udHJvbAorCSAgICAgICAgLy9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQkJU1RBX1BPUlRfU0VDVVJFRChwQWQpOworCisgICAgICAgICAgICAvLyBJbmRpY2F0ZSBDb25uZWN0ZWQgZm9yIEdVSQorICAgICAgICAgICAgcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKyAgICAgICAgfQorCX0KKwllbHNlCS8vIGR5bmFtaWMgV0VQIGZyb20gd3BhX3N1cHBsaWNhbnQKKwl7CisJCVVDSEFSCUNpcGhlckFsZzsKKyAgICAJUFVDSEFSCUtleTsKKworCQlpZihwS2V5LT5LZXlMZW5ndGggPT0gMzIpCisJCQlnb3RvIGVuZDsKKworCQlLZXlJZHggPSBwS2V5LT5LZXlJbmRleCAmIDB4MGZmZmZmZmY7CisKKwkJaWYgKEtleUlkeCA8IDQpCisJCXsKKwkJCS8vIGl0IGlzIGEgZGVmYXVsdCBzaGFyZWQga2V5LCBmb3IgUGFpcndpc2Uga2V5IHNldHRpbmcKKwkJCWlmIChwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApCisJCQl7CisJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwS2V5LT5CU1NJRCk7CisKKwkJCQlpZiAocEVudHJ5KQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUEFkZEtleTogU2V0IFBhaXItd2lzZSBLZXlcbiIpKTsKKworCQkJCQkvLyBzZXQga2V5IG1hdGVyaWFsIGFuZCBrZXkgbGVuZ3RoCisgCQkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LktleUxlbiA9IChVQ0hBUilwS2V5LT5LZXlMZW5ndGg7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+UGFpcndpc2VLZXkuS2V5LCAmcEtleS0+S2V5TWF0ZXJpYWwsIHBLZXktPktleUxlbmd0aCk7CisKKwkJCQkJLy8gc2V0IENpcGhlciB0eXBlCisJCQkJCWlmIChwS2V5LT5LZXlMZW5ndGggPT0gNSkKKwkJCQkJCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQkJCQllbHNlCisJCQkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisKKwkJCQkJLy8gQWRkIFBhaXItd2lzZSBrZXkgdG8gQXNpYworCQkJCQlBc2ljQWRkUGFpcndpc2VLZXlFbnRyeSgKKwkJCQkJCXBBZCwKKwkJCQkJCXBFbnRyeS0+QWRkciwKKwkJCQkJCShVQ0hBUilwRW50cnktPkFpZCwKKyAgICAgICAgICAgICAgICAJCSZwRW50cnktPlBhaXJ3aXNlS2V5KTsKKworCQkJCQkvLyB1cGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGVudHJ5CisJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkoCisJCQkJCQlwQWQsCisJCQkJCQlCU1MwLAorCQkJCQkJS2V5SWR4LCAvLyBUaGUgdmFsdWUgbWF5IGJlIG5vdCB6ZXJvCisJCQkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZywKKwkJCQkJCXBFbnRyeSk7CisKKwkJCQl9CisJCQl9CisJCQllbHNlCisgICAgICAgICAgICB7CisJCQkJLy8gRGVmYXVsdCBrZXkgZm9yIHR4IChzaGFyZWQga2V5KQorCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgS2V5SWR4OworCisJCQkJLy8gc2V0IGtleSBtYXRlcmlhbCBhbmQga2V5IGxlbmd0aAorCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gKFVDSEFSKSBwS2V5LT5LZXlMZW5ndGg7CisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXksICZwS2V5LT5LZXlNYXRlcmlhbCwgcEtleS0+S2V5TGVuZ3RoKTsKKworCQkJCS8vIFNldCBDaXBlciB0eXBlCisJCQkJaWYgKHBLZXktPktleUxlbmd0aCA9PSA1KQorCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJCQllbHNlCisJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKworICAgIAkJCUNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnOworICAgIAkJCUtleSA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5OworCisJCQkJLy8gU2V0IEdyb3VwIGtleSBtYXRlcmlhbCB0byBBc2ljCisgICAgCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgS2V5SWR4LCBDaXBoZXJBbGcsIEtleSwgTlVMTCwgTlVMTCk7CisKKwkJCQkvLyBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGdyb3VwIGtleSB0YWJsZQorCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBCU1MwLCBLZXlJZHgsIENpcGhlckFsZywgTlVMTCk7CisKKwkJCX0KKwkJfQorCX0KK2VuZDoKKwlyZXR1cm47Cit9CisKK2NoYXIgKiBydHN0cmNocihjb25zdCBjaGFyICogcywgaW50IGMpCit7CisgICAgZm9yKDsgKnMgIT0gKGNoYXIpIGM7ICsrcykKKyAgICAgICAgaWYgKCpzID09ICdcMCcpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gKGNoYXIgKikgczsKK30KKworLyoKK1RoaXMgaXMgcmVxdWlyZWQgZm9yIExpbkVYMjAwNC9rZXJuZWwyLjYuNyB0byBwcm92aWRlIGl3bGlzdCBzY2FubmluZyBmdW5jdGlvbgorKi8KKworaW50CitydF9pb2N0bF9naXduYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQoreworLy8JUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworI2lmZGVmIFJUMjg3MAorCXN0cm5jcHkobmFtZSwgIlJUMjg3MCBXaXJlbGVzcyIsIElGTkFNU0laKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwlpbnQgCWNoYW4gPSAtMTsKKworICAgIC8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICByZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCisJaWYgKGZyZXEtPmUgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmKChmcmVxLT5lID09IDApICYmIChmcmVxLT5tIDw9IDEwMDApKQorCQljaGFuID0gZnJlcS0+bTsJLy8gU2V0dGluZyBieSBjaGFubmVsIG51bWJlcgorCWVsc2UKKwkJTUFQX0tIWl9UT19DSEFOTkVMX0lEKCAoZnJlcS0+bSAvMTAwKSAsIGNoYW4pOyAvLyBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSAtIHNlYXJjaCB0aGUgdGFibGUgLCBsaWtlIDIuNDEyRywgMi40MjJHLAorCisgICAgaWYgKENoYW5uZWxTYW5pdHkocEFkYXB0ZXIsIGNoYW4pID09IFRSVUUpCisgICAgeworCXBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCA9IGNoYW47CisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiPT0+cnRfaW9jdGxfc2l3ZnJlcTo6U0lPQ1NJV0ZSRVFbY21kPTB4JXhdIChDaGFubmVsPSVkKVxuIiwgU0lPQ1NJV0ZSRVEsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CitpbnQgcnRfaW9jdGxfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisgICAgVklSVFVBTF9BREFQVEVSICpwVmlydHVhbEFkID0gTlVMTDsKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyOworCVVDSEFSIGNoOworCVVMT05HCW07CisKKwlpZiAoZGV2LT5wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCXsKKwkJcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJfQorCWVsc2UKKwl7CisJCXBWaXJ0dWFsQWQgPSBkZXYtPm1sX3ByaXY7CisJCXBBZGFwdGVyID0gcFZpcnR1YWxBZC0+UnRtcERldi0+bWxfcHJpdjsKKwl9CisKKwlpZiAocEFkYXB0ZXIgPT0gTlVMTCkKKwl7CisJCS8qIGlmIDFzdCBvcGVuIGZhaWwsIHBBZCB3aWxsIGJlIGZyZWU7CisJCSAgIFNvIHRoZSBuZXRfZGV2LT5tbF9wcml2IHdpbGwgYmUgTlVMTCBpbiAycmQgb3BlbiAqLworCQlyZXR1cm4gLUVORVRET1dOOworCX0KKworCQljaCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiPT0+cnRfaW9jdGxfZ2l3ZnJlcSAgJWRcbiIsIGNoKSk7CisKKyAgICBNQVBfQ0hBTk5FTF9JRF9UT19LSFooY2gsIG0pOworCWZyZXEtPm0gPSBtICogMTAwOworCWZyZXEtPmUgPSAxOworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfc2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCXN3aXRjaCAoKm1vZGUpCisJeworCQljYXNlIElXX01PREVfQURIT0M6CisJCQlTZXRfTmV0d29ya1R5cGVfUHJvYyhwQWRhcHRlciwgIkFkaG9jIik7CisJCQlicmVhazsKKwkJY2FzZSBJV19NT0RFX0lORlJBOgorCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJJbmZyYSIpOworCQkJYnJlYWs7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkpCisgICAgICAgIGNhc2UgSVdfTU9ERV9NT05JVE9SOgorCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJNb25pdG9yIik7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PnJ0X2lvY3RsX3Npd21vZGU6OlNJT0NTSVdNT0RFICh1bmtub3duICVkKVxuIiwgKm1vZGUpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIFJlc2V0IFJhbGluayBzdXBwbGljYW50IHRvIG5vdCB1c2UsIGl0IHdpbGwgYmUgc2V0IHRvIHN0YXJ0IHdoZW4gVUkgc2V0IFBNSyBrZXkKKwlwQWRhcHRlci0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJaWYgKEFESE9DX09OKHBBZGFwdGVyKSkKKwkJKm1vZGUgPSBJV19NT0RFX0FESE9DOworICAgIGVsc2UgaWYgKElORlJBX09OKHBBZGFwdGVyKSkKKwkJKm1vZGUgPSBJV19NT0RFX0lORlJBOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDQsMjApKQorICAgIGVsc2UgaWYgKE1PTklUT1JfT04ocEFkYXB0ZXIpKQorICAgIHsKKyAgICAgICAgKm1vZGUgPSBJV19NT0RFX01PTklUT1I7CisgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAgICAgICAqbW9kZSA9IElXX01PREVfQVVUTzsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PnJ0X2lvY3RsX2dpd21vZGUobW9kZT0lZClcbiIsICptb2RlKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAgCXJldHVybiAtRU5FVERPV047CisgICAgCX0KKworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworCXUxNiB2YWw7CisJaW50IGk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT0+cnRfaW9jdGxfZ2l3cmFuZ2VcbiIpKTsKKwlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKworCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07CisKKwlpZiAoSU5GUkFfT04ocEFkYXB0ZXIpfHxBREhPQ19PTihwQWRhcHRlcikpCisJeworCQlyYW5nZS0+bWluX3BtcCA9IDEgKiAxMDI0OworCQlyYW5nZS0+bWF4X3BtcCA9IDY1NTM1ICogMTAyNDsKKwkJcmFuZ2UtPm1pbl9wbXQgPSAxICogMTAyNDsKKwkJcmFuZ2UtPm1heF9wbXQgPSAxMDAwICogMTAyNDsKKwkJcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKKwkJcmFuZ2UtPnBtdF9mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7CisJCXJhbmdlLT5wbV9jYXBhID0gSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfVElNRU9VVCB8CisJCQlJV19QT1dFUl9VTklDQVNUX1IgfCBJV19QT1dFUl9BTExfUjsKKwl9CisKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxNDsKKworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKKworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSAgcEFkYXB0ZXItPkNoYW5uZWxMaXN0TnVtOworCisJdmFsID0gMDsKKwlmb3IgKGkgPSAxOyBpIDw9IHJhbmdlLT5udW1fY2hhbm5lbHM7IGkrKykKKwl7CisJCXUzMiBtOworCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSBwQWRhcHRlci0+Q2hhbm5lbExpc3RbaS0xXS5DaGFubmVsOworCQlNQVBfQ0hBTk5FTF9JRF9UT19LSFoocEFkYXB0ZXItPkNoYW5uZWxMaXN0W2ktMV0uQ2hhbm5lbCwgbSk7CisJCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IG0gKiAxMDA7IC8qIEhaICovCisKKwkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMTsKKwkJdmFsKys7CisJCWlmICh2YWwgPT0gSVdfTUFYX0ZSRVFVRU5DSUVTKQorCQkJYnJlYWs7CisJfQorCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOworCisJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7IC8qIHdoYXQgaXMgY29ycmVjdCBtYXg/IFRoaXMgd2FzIG5vdAorCQkJCQkqIGRvY3VtZW50ZWQgZXhhY3RseS4gQXQgbGVhc3QKKwkJCQkJKiA2OSBoYXMgYmVlbiBvYnNlcnZlZC4gKi8KKwlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOyAvKiBkQiAqLworCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7IC8qIGRCICovCisKKwkvKiBXaGF0IHdvdWxkIGJlIHN1aXRhYmxlIHZhbHVlcyBmb3IgImF2ZXJhZ2UvdHlwaWNhbCIgcXVhbD8gKi8KKwlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDIwOworCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IC02MDsKKwlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAtOTU7CisJcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsKKworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gTlJfV0VQX0tFWVM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCisjaWYgV0lSRUxFU1NfRVhUID4gMTcKKwkvKiBJV19FTkNfQ0FQQV8qIGJpdCBmaWVsZCAqLworCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX1dQQTIgfAorCQkJCQlJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUCB8IElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCc3NpZDsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKyAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCWlmIChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKQorICAgIHsKKyAgICAgICAgUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNTE1FIGJ1c3ksIHJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKyAgICB9CisKKyAgICAvLyB0ZWxsIENOVEwgc3RhdGUgbWFjaGluZSB0byBjYWxsIE5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZSgpIGFmdGVyIGNvbXBsZXRpbmcKKyAgICAvLyB0aGlzIHJlcXVlc3QsIGJlY2F1c2UgdGhpcyByZXF1ZXN0IGlzIGluaXRpYXRlZCBieSBORElTLgorICAgIHBBZGFwdGVyLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gRkFMU0U7CisJLy8gUHJldmVudCB0byBjb25uZWN0IEFQIGFnYWluIGluIFNUQU1sbWVQZXJpb2RpY0V4ZWMKKwlwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbj0gMzI7CisKKyAgICBtZW1zZXQoQnNzaWQsIDAsIE1BQ19BRERSX0xFTik7CisgICAgbWVtY3B5KEJzc2lkLCBhcF9hZGRyLT5zYV9kYXRhLCBNQUNfQUREUl9MRU4pOworICAgIE1sbWVFbnF1ZXVlKHBBZGFwdGVyLAorICAgICAgICAgICAgICAgIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorICAgICAgICAgICAgICAgIE9JRF84MDJfMTFfQlNTSUQsCisgICAgICAgICAgICAgICAgc2l6ZW9mKE5ESVNfODAyXzExX01BQ19BRERSRVNTKSwKKyAgICAgICAgICAgICAgICAoVk9JRCAqKSZCc3NpZCk7CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJT0NUTDo6U0lPQ1NJV0FQICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorICAgICAgICBCc3NpZFswXSwgQnNzaWRbMV0sIEJzc2lkWzJdLCBCc3NpZFszXSwgQnNzaWRbNF0sIEJzc2lkWzVdKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCWlmIChJTkZSQV9PTihwQWRhcHRlcikgfHwgQURIT0NfT04ocEFkYXB0ZXIpKQorCXsKKwkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgJnBBZGFwdGVyLT5Db21tb25DZmcuQnNzaWQsIEVUSF9BTEVOKTsKKwl9CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIC8vIEFkZCBmb3IgUlQyODcwCisgICAgZWxzZSBpZiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKKyAgICB7CisgICAgICAgIGFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKyAgICAgICAgbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsICZwQWRhcHRlci0+TWxtZUF1eC5Cc3NpZCwgRVRIX0FMRU4pOworICAgIH0KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU9DVEw6OlNJT0NHSVdBUCg9RU1QVFkpXG4iKSk7CisJCXJldHVybiAtRU5PVENPTk47CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbml0cyBhcmUgaW4gZGIgYWJvdmUgdGhlIG5vaXNlIGZsb29yLiBUaGF0IG1lYW5zIHRoZQorICogcnNzaSB2YWx1ZXMgcmVwb3J0ZWQgaW4gdGhlIHR4L3J4IGRlc2NyaXB0b3JzIGluIHRoZQorICogZHJpdmVyIGFyZSB0aGUgU05SIGV4cHJlc3NlZCBpbiBkYi4KKyAqCisgKiBJZiB5b3UgYXNzdW1lIHRoYXQgdGhlIG5vaXNlIGZsb29yIGlzIC05NSwgd2hpY2ggaXMgYW4KKyAqIGV4Y2VsbGVudCBhc3N1bXB0aW9uIDk5LjUgJSBvZiB0aGUgdGltZSwgdGhlbiB5b3UgY2FuCisgKiBkZXJpdmUgdGhlIGFic29sdXRlIHNpZ25hbCBsZXZlbCAoaS5lLiAtOTUgKyByc3NpKS4KKyAqIFRoZXJlIGFyZSBzb21lIG90aGVyIHNsaWdodCBmYWN0b3JzIHRvIHRha2UgaW50byBhY2NvdW50CisgKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgcnNzaSBtZWFzdXJlbWVudCBpcyBmcm9tIDExYiwKKyAqIDExZywgb3IgMTFhLiAgIFRoZXNlIGRpZmZlcmVuY2VzIGFyZSBhdCBtb3N0IDJkYiBhbmQKKyAqIGNhbiBiZSBkb2N1bWVudGVkLgorICoKKyAqIE5COiB2YXJpb3VzIGNhbGN1bGF0aW9ucyBhcmUgYmFzZWQgb24gdGhlIG9yaW5vY28vd2F2ZWxhbgorICogICAgIGRyaXZlcnMgZm9yIGNvbXBhdGliaWxpdHkKKyAqLworc3RhdGljIHZvaWQgc2V0X3F1YWxpdHkoUFJUTVBfQURBUFRFUiBwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19xdWFsaXR5ICppcSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyIHJzc2kpCit7CisJX191OCBDaGFubmVsUXVhbGl0eTsKKworCS8vIE5vcm1hbGl6ZSBSc3NpCisJaWYgKHJzc2kgPj0gLTUwKQorCQlDaGFubmVsUXVhbGl0eSA9IDEwMDsKKwllbHNlIGlmIChyc3NpID49IC04MCkgLy8gYmV0d2VlbiAtNTAgfiAtODBkYm0KKwkJQ2hhbm5lbFF1YWxpdHkgPSAoX191OCkoMjQgKyAoKHJzc2kgKyA4MCkgKiAyNikvMTApOworCWVsc2UgaWYgKHJzc2kgPj0gLTkwKSAgIC8vIGJldHdlZW4gLTgwIH4gLTkwZGJtCisgICAgICAgIENoYW5uZWxRdWFsaXR5ID0gKF9fdTgpKChyc3NpICsgOTApICogMjYpLzEwOworCWVsc2UKKwkJQ2hhbm5lbFF1YWxpdHkgPSAwOworCisgICAgaXEtPnF1YWwgPSAoX191OClDaGFubmVsUXVhbGl0eTsKKworICAgIGlxLT5sZXZlbCA9IChfX3U4KShyc3NpKTsKKyAgICBpcS0+bm9pc2UgPSAocEFkYXB0ZXItPkJicFdyaXRlTGF0Y2hbNjZdID4gcEFkYXB0ZXItPkJicFR1bmluZy5GYWxzZUNjYVVwcGVyVGhyZXNob2xkKSA/ICgoX191OClwQWRhcHRlci0+QmJwVHVuaW5nLkZhbHNlQ2NhVXBwZXJUaHJlc2hvbGQpIDogKChfX3U4KSBwQWRhcHRlci0+QmJwV3JpdGVMYXRjaFs2Nl0pOyAJLy8gbm9pc2UgbGV2ZWwgKGRCbSkKKyAgICBpcS0+bm9pc2UgKz0gMjU2IC0gMTQzOworICAgIGlxLT51cGRhdGVkID0gcEFkYXB0ZXItPml3X3N0YXRzLnF1YWwudXBkYXRlZDsKK30KKworaW50IHJ0X2lvY3RsX2l3YXBsaXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKyAJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCXN0cnVjdCBzb2NrYWRkciBhZGRyW0lXX01BWF9BUF07CisJc3RydWN0IGl3X3F1YWxpdHkgcXVhbFtJV19NQVhfQVBdOworCWludCBpOworCisgICAJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICBpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgeworICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisJCWRhdGEtPmxlbmd0aCA9IDA7CisJCXJldHVybiAwOworICAgICAgICAvL3JldHVybiAtRU5FVERPV047CisJfQorCisJZm9yIChpID0gMDsgaSA8SVdfTUFYX0FQIDsgaSsrKQorCXsKKwkJaWYgKGkgPj0gIHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yKQorCQkJYnJlYWs7CisJCWFkZHJbaV0uc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJbWVtY3B5KGFkZHJbaV0uc2FfZGF0YSwgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkLCBNQUNfQUREUl9MRU4pOworCQlzZXRfcXVhbGl0eShwQWRhcHRlciwgJnF1YWxbaV0sIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzc2kpOworCX0KKwlkYXRhLT5sZW5ndGggPSBpOworCW1lbWNweShleHRyYSwgJmFkZHIsIGkqc2l6ZW9mKGFkZHJbMF0pKTsKKwlkYXRhLT5mbGFncyA9IDE7CQkvKiBzaWduYWwgcXVhbGl0eSBwcmVzZW50IChzb3J0IG9mKSAqLworCW1lbWNweShleHRyYSArIGkqc2l6ZW9mKGFkZHJbMF0pLCAmcXVhbCwgaSpzaXplb2YocXVhbFtpXSkpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBTSU9DR0lXU0NBTgoraW50IHJ0X2lvY3RsX3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwlVTE9ORwkJCQkJCQkJTm93OworCWludCBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCisJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisJCXJldHVybiAtRU5FVERPV047CisJfQorCisJaWYgKE1PTklUT1JfT04ocEFkYXB0ZXIpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIERyaXZlciBpcyBpbiBNb25pdG9yIE1vZGUgbm93ICEhIVxuIikpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwlpZiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFKQorCXsKKwkJcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50U2NhbkNvdW50Kys7CisJfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworICAgIHBBZGFwdGVyLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IFRSVUU7CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJcmV0dXJuIDA7CisJZG97CisJCU5vdyA9IGppZmZpZXM7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCWlmICgocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFKSAmJgorCQkJKHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFNjYW5Db3VudCA+IDMpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgV3BhU3VwcGxpY2FudFNjYW5Db3VudCA+IDNcbiIpKTsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQlicmVhazsKKwkJfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCQlpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWRhcHRlciwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKSAmJgorCQkJKChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwKKwkJCShwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpICYmCisJCQkocEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTGluayBVUCwgUG9ydCBOb3QgU2VjdXJlZCEgaWdub3JlIHRoaXMgc2V0OjpPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTlxuIikpOworCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisJCXsKKwkJCVJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworCQl9CisKKwkJLy8gdGVsbCBDTlRMIHN0YXRlIG1hY2hpbmUgdG8gY2FsbCBOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUoKSBhZnRlciBjb21wbGV0aW5nCisJCS8vIHRoaXMgcmVxdWVzdCwgYmVjYXVzZSB0aGlzIHJlcXVlc3QgaXMgaW5pdGlhdGVkIGJ5IE5ESVMuCisJCXBBZGFwdGVyLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gRkFMU0U7CisJCS8vIFJlc2V0IGFsbG93ZWQgc2NhbiByZXRyaWVzCisJCXBBZGFwdGVyLT5TdGFDZmcuU2NhbkNudCA9IDA7CisJCXBBZGFwdGVyLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gTm93OworCisJCU1sbWVFbnF1ZXVlKHBBZGFwdGVyLAorCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQlPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwKKwkJCTAsCisJCQlOVUxMKTsKKworCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZGFwdGVyKTsKKwl9d2hpbGUoMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJaW50IGk9MDsKKwljaGFyICpjdXJyZW50X2V2ID0gZXh0cmEsICpwcmV2aW91c19ldiA9IGV4dHJhOworCWNoYXIgKmVuZF9idWY7CisJY2hhciAqY3VycmVudF92YWwsIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl0gPSB7MH07CisjaWZuZGVmIElXRVZHRU5JRQorCWNoYXIgaWR4OworI2VuZGlmIC8vIElXRVZHRU5JRSAvLworCXN0cnVjdCBpd19ldmVudCBpd2U7CisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQorICAgIHsKKwkJLyoKKwkJICogU3RpbGwgc2Nhbm5pbmcsIGluZGljYXRlIHRoZSBjYWxsZXIgc2hvdWxkIHRyeSBhZ2Fpbi4KKwkJICovCisJCXJldHVybiAtRUFHQUlOOworCX0KKworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCWlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUpCisJeworCQlwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRTY2FuQ291bnQgPSAwOworCX0KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwlpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzTnIgPT0gMCkKKwl7CisJCWRhdGEtPmxlbmd0aCA9IDA7CisJCXJldHVybiAwOworCX0KKworI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgIGlmIChkYXRhLT5sZW5ndGggPiAwKQorICAgICAgICBlbmRfYnVmID0gZXh0cmEgKyBkYXRhLT5sZW5ndGg7CisgICAgZWxzZQorICAgICAgICBlbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOworI2Vsc2UKKyAgICBlbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzTnI7IGkrKykKKwl7CisJCWlmIChjdXJyZW50X2V2ID49IGVuZF9idWYpCisgICAgICAgIHsKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorCisJCS8vTUFDIGFkZHJlc3MKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV0FQOworCQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCAmcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWQsIEVUSF9BTEVOKTsKKworICAgICAgICBwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvKgorCQlQcm90b2NvbDoKKwkJCWl0IHdpbGwgc2hvdyBzY2FubmVkIEFQJ3MgV2lyZWxlc3NNb2RlIC4KKwkJCWl0IG1pZ2h0IGJlCisJCQkJCTgwMi4xMWEKKwkJCQkJODAyLjExYS9uCisJCQkJCTgwMi4xMWcvbgorCQkJCQk4MDIuMTFiL2cvbgorCQkJCQk4MDIuMTFnCisJCQkJCTgwMi4xMWIvZworCQkqLworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV05BTUU7CisKKworCXsKKwkJUEJTU19FTlRSWSBwQnNzRW50cnk9JnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldOworCQlCT09MRUFOIGlzR29ubHk9RkFMU0U7CisJCWludCByYXRlQ250PTA7CisKKwkJaWYgKHBCc3NFbnRyeS0+Q2hhbm5lbD4xNCkKKwkJeworCQkJaWYgKHBCc3NFbnRyeS0+SHRDYXBhYmlsaXR5TGVuIT0wKQorCQkJCXN0cmNweShpd2UudS5uYW1lLCI4MDIuMTFhL24iKTsKKwkJCWVsc2UKKwkJCQlzdHJjcHkoaXdlLnUubmFtZSwiODAyLjExYSIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCQlpZiBvbmUgb2Ygbm9uIEIgbW9kZSByYXRlIGlzIHNldCBzdXBwb3J0ZWQgcmF0ZSAuIGl0IG1lYW4gRyBvbmx5LgorCQkJKi8KKwkJCWZvciAocmF0ZUNudD0wO3JhdGVDbnQ8cEJzc0VudHJ5LT5TdXBSYXRlTGVuO3JhdGVDbnQrKykKKwkJCXsKKwkJCQkvKgorCQkJCQk2TWJwcygxNDApIDlNYnBzKDE0NikgYW5kID49MTJNYnBzKDE1MikgYXJlIHN1cHBvcnRlZCByYXRlICwgaXQgbWVhbiBHIG9ubHkuCisJCQkJKi8KKwkJCQlpZiAocEJzc0VudHJ5LT5TdXBSYXRlW3JhdGVDbnRdPT0xNDAgfHwgcEJzc0VudHJ5LT5TdXBSYXRlW3JhdGVDbnRdPT0xNDYgfHwgcEJzc0VudHJ5LT5TdXBSYXRlW3JhdGVDbnRdPj0xNTIpCisJCQkJCWlzR29ubHk9VFJVRTsKKwkJCX0KKworCQkJZm9yIChyYXRlQ250PTA7cmF0ZUNudDxwQnNzRW50cnktPkV4dFJhdGVMZW47cmF0ZUNudCsrKQorCQkJeworCQkJCWlmIChwQnNzRW50cnktPkV4dFJhdGVbcmF0ZUNudF09PTE0MCB8fCBwQnNzRW50cnktPkV4dFJhdGVbcmF0ZUNudF09PTE0NiB8fCBwQnNzRW50cnktPkV4dFJhdGVbcmF0ZUNudF0+PTE1MikKKwkJCQkJaXNHb25seT1UUlVFOworCQkJfQorCisKKwkJCWlmIChwQnNzRW50cnktPkh0Q2FwYWJpbGl0eUxlbiE9MCkKKwkJCXsKKwkJCQlpZiAoaXNHb25seT09VFJVRSkKKwkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsIjgwMi4xMWcvbiIpOworCQkJCWVsc2UKKwkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsIjgwMi4xMWIvZy9uIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGlzR29ubHk9PVRSVUUpCisJCQkJCXN0cmNweShpd2UudS5uYW1lLCI4MDIuMTFnIik7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKHBCc3NFbnRyeS0+U3VwUmF0ZUxlbj09NCAmJiBwQnNzRW50cnktPkV4dFJhdGVMZW49PTApCisJCQkJCQlzdHJjcHkoaXdlLnUubmFtZSwiODAyLjExYiIpOworCQkJCQllbHNlCisJCQkJCQlzdHJjcHkoaXdlLnUubmFtZSwiODAyLjExYi9nIik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJCXByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKwkJY3VycmVudF9ldgkgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CisJCWlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworCSAgIAkJcmV0dXJuIC1FMkJJRzsKKyNlbHNlCisJCQlicmVhazsKKyNlbmRpZgorCisJCS8vRVNTSUQKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW47CisJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCisgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWQpOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvL05ldHdvcmsgVHlwZQorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc1R5cGUgPT0gTmRpczgwMl8xMUlCU1MpCisJCXsKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworCQl9CisJCWVsc2UgaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc1R5cGUgPT0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlKQorCQl7CisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FVVE87CisJCX0KKwkJaXdlLmxlbiA9IElXX0VWX1VJTlRfTEVOOworCisgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICBJV19FVl9VSU5UX0xFTik7CisgICAgICAgIGlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyNlbHNlCisJCQlicmVhazsKKyNlbmRpZgorCisJCS8vQ2hhbm5lbCBhbmQgRnJlcXVlbmN5CisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCQlpZiAoSU5GUkFfT04ocEFkYXB0ZXIpIHx8IEFESE9DX09OKHBBZGFwdGVyKSkKKwkJCWl3ZS51LmZyZXEubSA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkNoYW5uZWw7CisJCWVsc2UKKwkJCWl3ZS51LmZyZXEubSA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkNoYW5uZWw7CisJCWl3ZS51LmZyZXEuZSA9IDA7CisJCWl3ZS51LmZyZXEuaSA9IDA7CisKKwkJcHJldmlvdXNfZXYgPSBjdXJyZW50X2V2OworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworICAgICAgICAvL0FkZCBxdWFsaXR5IHN0YXRpc3RpY3MKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworICAgIAlpd2UuY21kID0gSVdFVlFVQUw7CisgICAgCWl3ZS51LnF1YWwubGV2ZWwgPSAwOworICAgIAlpd2UudS5xdWFsLm5vaXNlID0gMDsKKyAgICAgICAgc2V0X3F1YWxpdHkocEFkYXB0ZXIsICZpd2UudS5xdWFsLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc3NpKTsKKyAgICAJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKyAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJLy9FbmN5cHRpb24ga2V5CisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CisJCWlmIChDQVBfSVNfUFJJVkFDWV9PTiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQ2FwYWJpbGl0eUluZm8gKSkKKwkJCWl3ZS51LmRhdGEuZmxhZ3MgPUlXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCQllbHNlCisJCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCisgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKyAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsJml3ZSwgKGNoYXIgKilwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWyhpd2UudS5kYXRhLmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKS0xXS5LZXkpOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvL0JpdCBSYXRlCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlN1cFJhdGVMZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIFVDSEFSIHRtcFJhdGUgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5TdXBSYXRlW3BBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlN1cFJhdGVMZW4tMV07CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworICAgIAkJY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgSVdfRVZfTENQX0xFTjsKKyAgICAgICAgICAgIGlmICh0bXBSYXRlID09IDB4ODIpCisgICAgICAgICAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICAxICogMTAwMDAwMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRtcFJhdGUgPT0gMHg4NCkKKyAgICAgICAgICAgICAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gIDIgKiAxMDAwMDAwOworICAgICAgICAgICAgZWxzZSBpZiAodG1wUmF0ZSA9PSAweDhCKQorICAgICAgICAgICAgICAgIGl3ZS51LmJpdHJhdGUudmFsdWUgPSAgNS41ICogMTAwMDAwMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRtcFJhdGUgPT0gMHg5NikKKyAgICAgICAgICAgICAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gIDExICogMTAwMDAwMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAJCSAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gICh0bXBSYXRlLzIpICogMTAwMDAwMDsKKworCQkJaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisJCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCisJCQkJY3VycmVudF92YWwsIGVuZF9idWYsICZpd2UsCisgICAgCQkJSVdfRVZfUEFSQU1fTEVOKTsKKworICAgICAgICAJaWYoKGN1cnJlbnRfdmFsLWN1cnJlbnRfZXYpPklXX0VWX0xDUF9MRU4pCisgICAgICAgICAgICAJY3VycmVudF9ldiA9IGN1cnJlbnRfdmFsOworICAgICAgICAJZWxzZQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKworI2lmZGVmIElXRVZHRU5JRQorCQkvL1dQQSBJRQorCQlpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVMZW4gPiAwKQorCQl7CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJbWVtc2V0KCZjdXN0b21bMF0sIDAsIE1BWF9DVVNUT01fTEVOKTsKKwkJCW1lbWNweShjdXN0b20sICYocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVbMF0pLAorCQkJCQkJICAgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVMZW4pOworCQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVMZW47CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgY3VzdG9tKTsKKwkJCWlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJICAgIGJyZWFrOworI2VuZGlmCisJCX0KKworCQkvL1dQQTIgSUUKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuID4gMCkKKyAgICAgICAgeworICAgICAgICAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCW1lbXNldCgmY3VzdG9tWzBdLCAwLCBNQVhfQ1VTVE9NX0xFTik7CisJCQltZW1jcHkoY3VzdG9tLCAmKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFWzBdKSwKKwkJCQkJCSAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuKTsKKwkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGN1c3RvbSk7CisJCQlpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCSAgICBicmVhazsKKyNlbmRpZgorICAgICAgICB9CisjZWxzZQorICAgICAgICAvL1dQQSBJRQorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIGlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5XcGFJRS5JRUxlbiA+IDApCisgICAgICAgIHsKKyAgICAJCU5kaXNaZXJvTWVtb3J5KCZpd2UsIHNpemVvZihpd2UpKTsKKwkJCW1lbXNldCgmY3VzdG9tWzBdLCAwLCBNQVhfQ1VTVE9NX0xFTik7CisgICAgCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKyAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFTGVuICogMikgKyA3OworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoY3VzdG9tLCAid3BhX2llPSIsIDcpOworICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5XcGFJRS5JRUxlbjsgaWR4KyspCisgICAgICAgICAgICAgICAgc3ByaW50ZihjdXN0b20sICIlcyUwMngiLCBjdXN0b20sIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFW2lkeF0pOworICAgICAgICAgICAgcHJldmlvdXNfZXYgPSBjdXJyZW50X2V2OworICAgIAkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICBjdXN0b20pOworICAgICAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyNlbHNlCisJCQkgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIC8vV1BBMiBJRQorICAgICAgICBpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNuSUUuSUVMZW4gPiAwKQorICAgICAgICB7CisgICAgCQlOZGlzWmVyb01lbW9yeSgmaXdlLCBzaXplb2YoaXdlKSk7CisJCQltZW1zZXQoJmN1c3RvbVswXSwgMCwgTUFYX0NVU1RPTV9MRU4pOworICAgIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CisgICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc25JRS5JRUxlbiAqIDIpICsgNzsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KGN1c3RvbSwgInJzbl9pZT0iLCA3KTsKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNuSUUuSUVMZW47IGlkeCsrKQorICAgICAgICAgICAgICAgIHNwcmludGYoY3VzdG9tLCAiJXMlMDJ4IiwgY3VzdG9tLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc25JRS5JRVtpZHhdKTsKKyAgICAgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKyAgICAJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAgY3VzdG9tKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKyNlbmRpZiAvLyBJV0VWR0VOSUUgLy8KKwl9CisKKwlkYXRhLT5sZW5ndGggPSBjdXJyZW50X2V2IC0gZXh0cmE7CisgICAgcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gRkFMU0U7CisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IgLCgiPT09PnJ0X2lvY3RsX2dpd3NjYW4uICVkKCVkKSBCU1MgcmV0dXJuZWQsIGRhdGEtPmxlbmd0aCA9ICVkXG4iLGkgLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NOciwgZGF0YS0+bGVuZ3RoKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IHJ0X2lvY3RsX3Npd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIGlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICB7CisgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICB9CisKKwlpZiAoZGF0YS0+ZmxhZ3MpCisJeworCQlQQ0hBUglwU3NpZFN0cmluZyA9IE5VTEw7CisKKwkJLy8gSW5jbHVkZXMgbnVsbCBjaGFyYWN0ZXIuCisJCWlmIChkYXRhLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUgKyAxKSkKKwkJCXJldHVybiAtRTJCSUc7CisKKwkJcFNzaWRTdHJpbmcgPSAoQ0hBUiAqKSBrbWFsbG9jKE1BWF9MRU5fT0ZfU1NJRCsxLCBNRU1fQUxMT0NfRkxBRyk7CisJCWlmIChwU3NpZFN0cmluZykKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocFNzaWRTdHJpbmcsIE1BWF9MRU5fT0ZfU1NJRCsxKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBTc2lkU3RyaW5nLCBlc3NpZCwgZGF0YS0+bGVuZ3RoKTsKKwkJCWlmIChTZXRfU1NJRF9Qcm9jKHBBZGFwdGVyLCBwU3NpZFN0cmluZykgPT0gRkFMU0UpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCWVsc2UKKwl7CisJCS8vIEFOWSBzc2lkCisJCWlmIChTZXRfU1NJRF9Qcm9jKHBBZGFwdGVyLCAiIikgPT0gRkFMU0UpCisJCQlyZXR1cm4gLUVJTlZBTDsKKyAgICB9CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJZGF0YS0+ZmxhZ3MgPSAxOworICAgIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKKyAgICB7CisgICAgICAgIGRhdGEtPmxlbmd0aCAgPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKwlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCJNZWRpYVN0YXRlIGlzIGNvbm5lY3RlZFxuIikpOworCQlkYXRhLT5sZW5ndGggPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlNzaWRMZW47CisJCW1lbWNweShlc3NpZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLlNzaWRMZW4pOworCX0KKyNpZmRlZiBSVDI4NzAKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgLy8gQWRkIGZvciBSVDI4NzAKKyAgICBlbHNlIGlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorICAgIHsKKyAgICAgICAgZGF0YS0+bGVuZ3RoID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuOworCQltZW1jcHkoZXNzaWQsIHBBZGFwdGVyLT5Db21tb25DZmcuU3NpZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuKTsKKwl9CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCWVsc2UKKwl7Ly90aGUgQU5ZIHNzaWQgd2FzIHNwZWNpZmllZAorCQlkYXRhLT5sZW5ndGggID0gMDsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiTWVkaWFTdGF0ZSBpcyBub3QgY29ubmVjdGVkLCBlc3NcbiIpKTsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitpbnQgcnRfaW9jdGxfc2l3bmlja24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmlja25hbWUpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworICAgIC8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICByZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCWlmIChkYXRhLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQocEFkYXB0ZXItPm5pY2tuYW1lLCAwLCBJV19FU1NJRF9NQVhfU0laRSArIDEpOworCW1lbWNweShwQWRhcHRlci0+bmlja25hbWUsIG5pY2tuYW1lLCBkYXRhLT5sZW5ndGgpOworCisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd25pY2tuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKm5pY2tuYW1lKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwlpZiAoZGF0YS0+bGVuZ3RoID4gc3RybGVuKHBBZGFwdGVyLT5uaWNrbmFtZSkgKyAxKQorCQlkYXRhLT5sZW5ndGggPSBzdHJsZW4ocEFkYXB0ZXItPm5pY2tuYW1lKSArIDE7CisJaWYgKGRhdGEtPmxlbmd0aCA+IDApIHsKKwkJbWVtY3B5KG5pY2tuYW1lLCBwQWRhcHRlci0+bmlja25hbWUsIGRhdGEtPmxlbmd0aC0xKTsKKwkJbmlja25hbWVbZGF0YS0+bGVuZ3RoLTFdID0gJ1wwJzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwl1MTYgdmFsOworCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICBpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIHJldHVybiAtRU5FVERPV047CisgICAgfQorCisJaWYgKHJ0cy0+ZGlzYWJsZWQpCisJCXZhbCA9IE1BWF9SVFNfVEhSRVNIT0xEOworCWVsc2UgaWYgKHJ0cy0+dmFsdWUgPCAwIHx8IHJ0cy0+dmFsdWUgPiBNQVhfUlRTX1RIUkVTSE9MRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAocnRzLT52YWx1ZSA9PSAwKQorCSAgICB2YWwgPSBNQVhfUlRTX1RIUkVTSE9MRDsKKwllbHNlCisJCXZhbCA9IHJ0cy0+dmFsdWU7CisKKwlpZiAodmFsICE9IHBBZGFwdGVyLT5Db21tb25DZmcuUnRzVGhyZXNob2xkKQorCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA9IHZhbDsKKworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICAJfQorCisJcnRzLT52YWx1ZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuUnRzVGhyZXNob2xkOworCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA9PSBNQVhfUlRTX1RIUkVTSE9MRCk7CisJcnRzLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX3Npd2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJdTE2IHZhbDsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICAJeworICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIAl9CisKKwlpZiAoZnJhZy0+ZGlzYWJsZWQpCisJCXZhbCA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKwllbHNlIGlmIChmcmFnLT52YWx1ZSA+PSBNSU5fRlJBR19USFJFU0hPTEQgfHwgZnJhZy0+dmFsdWUgPD0gTUFYX0ZSQUdfVEhSRVNIT0xEKQorICAgICAgICB2YWwgPSBfX2NwdV90b19sZTE2KGZyYWctPnZhbHVlICYgfjB4MSk7IC8qIGV2ZW4gbnVtYmVycyBvbmx5ICovCisJZWxzZSBpZiAoZnJhZy0+dmFsdWUgPT0gMCkKKwkgICAgdmFsID0gTUFYX0ZSQUdfVEhSRVNIT0xEOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwQWRhcHRlci0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gdmFsOworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICAJeworICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIAl9CisKKwlmcmFnLT52YWx1ZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQ7CisJZnJhZy0+ZGlzYWJsZWQgPSAoZnJhZy0+dmFsdWUgPT0gTUFYX0ZSQUdfVEhSRVNIT0xEKTsKKwlmcmFnLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNQVhfV0VQX0tFWV9TSVpFIDEzCisjZGVmaW5lIE1JTl9XRVBfS0VZX1NJWkUgNQoraW50IHJ0X2lvY3RsX3Npd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICAJeworICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIAl9CisKKwlpZiAoKGVycS0+bGVuZ3RoID09IDApICYmCisgICAgICAgIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSkKKwl7CisJCXBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkJcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKyAgICAgICAgZ290byBkb25lOworCX0KKwllbHNlIGlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQgfHwgZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorCXsKKwkgICAgLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJCVNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworCQlwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwkJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworCQlwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPSBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKKwkJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKKwkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQ7CisgICAgCWVsc2UKKwkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCX0KKworICAgIGlmIChlcnEtPmxlbmd0aCA+IDApCisJeworCQlpbnQga2V5SWR4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKwkJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIGtleSAqLworCQlpZiAoZXJxLT5sZW5ndGggPiBNQVhfV0VQX0tFWV9TSVpFKQorCQl7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBDaGVjayBrZXkgaW5kZXggKi8KKwkJaWYgKChrZXlJZHggPCAwKSB8fCAoa2V5SWR4ID49IE5SX1dFUF9LRVlTKSkKKyAgICAgICAgeworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiPT0+cnRfaW9jdGxfc2l3ZW5jb2RlOjpXcm9uZyBrZXlJZHg9JWQhIFVzaW5nIGRlZmF1bHQga2V5IGluc3RlYWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlJZHgsIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkKSk7CisKKyAgICAgICAgICAgIC8vVXNpbmcgZGVmYXVsdCBrZXkKKwkJCWtleUlkeCA9IHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkOworICAgICAgICB9CisJCWVsc2UKKwkJeworCQkJcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQ9a2V5SWR4OworCQl9CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgIDE2KTsKKworCQlpZiAoZXJxLT5sZW5ndGggPT0gTUFYX1dFUF9LRVlfU0laRSkKKyAgICAgICAgeworCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IE1BWF9XRVBfS0VZX1NJWkU7CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKwkJfQorCQllbHNlIGlmIChlcnEtPmxlbmd0aCA9PSBNSU5fV0VQX0tFWV9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gTUlOX1dFUF9LRVlfU0laRTsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCX0KKwkJZWxzZQorCQkJLyogRGlzYWJsZSB0aGUga2V5ICovCisJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gMDsKKworCQkvKiBDaGVjayBpZiB0aGUga2V5IGlzIG5vdCBtYXJrZWQgYXMgaW52YWxpZCAqLworCQlpZighKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpKQorCQl7CisJCQkvKiBDb3B5IHRoZSBrZXkgaW4gdGhlIGRyaXZlciAqLworCQkJTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgZXh0cmEsIGVycS0+bGVuZ3RoKTsKKyAgICAgICAgfQorCX0KKyAgICBlbHNlCisJCQl7CisJCS8qIERvIHdlIHdhbnQgdG8ganVzdCBzZXQgdGhlIHRyYW5zbWl0IGtleSBpbmRleCA/ICovCisJCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJCWlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgNCkpCisgICAgICAgIHsKKwkJCXBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkID0gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIGVsc2UKKwkJCS8qIERvbid0IGNvbXBsYWluIGlmIG9ubHkgY2hhbmdlIHRoZSBtb2RlICovCisJCWlmKCFlcnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpCisJCXsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworZG9uZToKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT5ydF9pb2N0bF9zaXdlbmNvZGU6OmVycS0+ZmxhZ3M9JXhcbiIsZXJxLT5mbGFncykpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6QXV0aE1vZGU9JXhcbiIscEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6RGVmYXVsdEtleUlkPSV4LCBLZXlMZW4gPSAlZFxuIixwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCAsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleUxlbikpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6V2VwU3RhdHVzPSV4XG4iLHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludAorcnRfaW9jdGxfZ2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwlpbnQga2lkOworCisJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJeworICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKwlraWQgPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT5ydF9pb2N0bF9naXdlbmNvZGUgJWRcbiIsIGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpKTsKKworCWlmIChwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCisJeworCQllcnEtPmxlbmd0aCA9IDA7CisJCWVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJfQorCWVsc2UgaWYgKChraWQgPiAwKSAmJiAoa2lkIDw9NCkpCisJeworCQkvLyBjb3B5IHdlcCBrZXkKKwkJZXJxLT5mbGFncyA9IGtpZCA7CQkJLyogTkI6IGJhc2UgMSAqLworCQlpZiAoZXJxLT5sZW5ndGggPiBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tpZC0xXS5LZXlMZW4pCisJCQllcnEtPmxlbmd0aCA9IHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2lkLTFdLktleUxlbjsKKwkJbWVtY3B5KGtleSwgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtraWQtMV0uS2V5LCBlcnEtPmxlbmd0aCk7CisJCS8vaWYgKChraWQgPT0gcEFkYXB0ZXItPlBvcnRDZmcuRGVmYXVsdEtleUlkKSkKKwkJLy9lcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwkvKiBYWFggKi8KKwkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQorCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsJCS8qIFhYWCAqLworCQllbHNlCisJCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwkJLyogWFhYICovCisKKwl9CisJZWxzZSBpZiAoa2lkID09IDApCisJeworCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpCisJCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9SRVNUUklDVEVEOwkJLyogWFhYICovCisJCWVsc2UKKwkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CQkvKiBYWFggKi8KKwkJZXJxLT5sZW5ndGggPSBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW47CisJCW1lbWNweShrZXksIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwgZXJxLT5sZW5ndGgpOworCQkvLyBjb3B5IGRlZmF1bHQga2V5IElECisJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkKKwkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CQkvKiBYWFggKi8KKwkJZWxzZQorCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsJCS8qIFhYWCAqLworCQllcnEtPmZsYWdzID0gcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgKyAxOwkJCS8qIE5COiBiYXNlIDEgKi8KKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsJLyogWFhYICovCisJfQorCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludAorcnRfaW9jdGxfc2V0cGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSB2b2lkICp3LCBjaGFyICpleHRyYSkKK3sKKyAgICBWSVJUVUFMX0FEQVBURVIJKnBWaXJ0dWFsQWQgPSBOVUxMOworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXI7CisJUE9TX0NPT0tJRSBwT2JqOworCWNoYXIgKnRoaXNfY2hhciA9IGV4dHJhOworCWNoYXIgKnZhbHVlOworCWludCAgU3RhdHVzPTA7CisKKwlpZiAoZGV2LT5wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCXsKKwkJcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJfQorCWVsc2UKKwl7CisJCXBWaXJ0dWFsQWQgPSBkZXYtPm1sX3ByaXY7CisJCXBBZGFwdGVyID0gcFZpcnR1YWxBZC0+UnRtcERldi0+bWxfcHJpdjsKKwl9CisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWRhcHRlci0+T1NfQ29va2llOworCisJaWYgKHBBZGFwdGVyID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKwl7CisJCXBPYmotPmlvY3RsX2lmX3R5cGUgPSBJTlRfTUFJTjsKKyAgICAgICAgcE9iai0+aW9jdGxfaWYgPSBNQUlOX01CU1NJRDsKKwl9CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworCQkJcmV0dXJuIC1FTkVURE9XTjsKKyAgICAJfQorCisJaWYgKCEqdGhpc19jaGFyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodmFsdWUgPSBydHN0cmNocih0aGlzX2NoYXIsICc9JykpICE9IE5VTEwpCisJICAgICp2YWx1ZSsrID0gMDsKKworCWlmICghdmFsdWUpCisJICAgIHJldHVybiAtRUlOVkFMOworCisJLy8gcmVqZWN0IHNldHRpbmcgbm90aGluZyBiZXNpZGVzIEFOWSBzc2lkKHNzaWRMZW49MCkKKyAgICBpZiAoISp2YWx1ZSAmJiAoc3RyY21wKHRoaXNfY2hhciwgIlNTSUQiKSAhPSAwKSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKFBSVE1QX1BSSVZBVEVfU0VUX1BST0MgPSBSVE1QX1BSSVZBVEVfU1VQUE9SVF9QUk9DOyBQUlRNUF9QUklWQVRFX1NFVF9QUk9DLT5uYW1lOyBQUlRNUF9QUklWQVRFX1NFVF9QUk9DKyspCisJeworCSAgICBpZiAoc3RyY21wKHRoaXNfY2hhciwgUFJUTVBfUFJJVkFURV9TRVRfUFJPQy0+bmFtZSkgPT0gMCkKKwkgICAgeworCSAgICAgICAgaWYoIVBSVE1QX1BSSVZBVEVfU0VUX1BST0MtPnNldF9wcm9jKHBBZGFwdGVyLCB2YWx1ZSkpCisJICAgICAgICB7CS8vRkFMU0U6U2V0IHByaXZhdGUgZmFpbGVkIHRoZW4gcmV0dXJuIEludmFsaWQgYXJndW1lbnQKKwkJCSAgICBTdGF0dXMgPSAtRUlOVkFMOworCSAgICAgICAgfQorCQkgICAgYnJlYWs7CS8vRXhpdCBmb3IgbG9vcC4KKwkgICAgfQorCX0KKworCWlmKFBSVE1QX1BSSVZBVEVfU0VUX1BST0MtPm5hbWUgPT0gTlVMTCkKKwl7ICAvL05vdCBmb3VuZCBhcmd1bWVudAorCSAgICBTdGF0dXMgPSAtRUlOVkFMOworCSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+cnRfaW9jdGxfc2V0cGFyYW06OiAoaXdwcml2KSBOb3QgU3VwcG9ydCBTZXQgQ29tbWFuZCBbJXM9JXNdXG4iLCB0aGlzX2NoYXIsIHZhbHVlKSk7CisJfQorCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworCitzdGF0aWMgaW50CitydF9wcml2YXRlX2dldF9zdGF0aXN0aWNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqd3JxLCBjaGFyICpleHRyYSkKK3sKKwlJTlQJCQkJU3RhdHVzID0gMDsKKyAgICBQUlRNUF9BREFQVEVSICAgcEFkID0gZGV2LT5tbF9wcml2OworCisgICAgaWYgKGV4dHJhID09IE5VTEwpCisgICAgeworICAgICAgICB3cnEtPmxlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiAtRUlPOworICAgIH0KKworICAgIG1lbXNldChleHRyYSwgMHgwMCwgSVdfUFJJVl9TSVpFX01BU0spOworICAgIHNwcmludGYoZXh0cmEsICJcblxuIik7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYgKEFURV9PTihwQWQpKQorCXsKKwkgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiVHggc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+YXRlLlR4RG9uZUNvdW50KTsKKwkgICAgLy9zcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJUeCBzdWNjZXNzIHdpdGhvdXQgcmV0cnkgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5hdGUuVHhEb25lQ291bnQpOworCX0KKwllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCXsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJUeCBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJUeCBzdWNjZXNzIHdpdGhvdXQgcmV0cnkgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0IC0gKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQuUXVhZFBhcnQpOworCX0KKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJUeCBzdWNjZXNzIGFmdGVyIHJldHJ5ICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC5RdWFkUGFydCk7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiVHggZmFpbCB0byBSY3YgQUNLIGFmdGVyIHJldHJ5ICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSVFMgU3VjY2VzcyBSY3YgQ1RTICAgICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuUlRTU3VjY2Vzc0NvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSVFMgRmFpbCBSY3YgQ1RTICAgICAgICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuUlRTRmFpbHVyZUNvdW50LlF1YWRQYXJ0KTsKKworICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJ4IHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChVTE9ORylwQWQtPldsYW5Db3VudGVycy5SZWNlaXZlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQpOworICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJ4IHdpdGggQ1JDICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChVTE9ORylwQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSeCBkcm9wIGR1ZSB0byBvdXQgb2YgcmVzb3VyY2UgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlcik7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUnggZHVwbGljYXRlIGZyYW1lICAgICAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLkZyYW1lRHVwbGljYXRlQ291bnQuUXVhZFBhcnQpOworCisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiRmFsc2UgQ0NBIChvbmUgc2Vjb25kKSAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRmFsc2VDQ0FDbnQpOworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJeworCQlpZiAocEFkLT5hdGUuUnhBbnRlbm5hU2VsID09IDApCisJCXsKKyAgICAJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJTU0ktQSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChMT05HKShwQWQtPmF0ZS5MYXN0UnNzaTAgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhKSk7CisJCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSU1NJLUIgKGlmIGF2YWlsYWJsZSkgICAgICAgICAgID0gJWxkXG4iLCAoTE9ORykocEFkLT5hdGUuTGFzdFJzc2kxIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworCQkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlNTSS1DIChpZiBhdmFpbGFibGUpICAgICAgICAgICA9ICVsZFxuXG4iLCAoTE9ORykocEFkLT5hdGUuTGFzdFJzc2kyIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworCQl9CisJCWVsc2UKKwkJeworICAgIAkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlNTSSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICVsZFxuIiwgKExPTkcpKHBBZC0+YXRlLkxhc3RSc3NpMCAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGEpKTsKKwkJfQorCX0KKwllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCXsKKyAgICAJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlNTSS1BICAgICAgICAgICAgICAgICAgICAgICAgICA9ICVsZFxuIiwgKExPTkcpKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworICAgICAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSU1NJLUIgKGlmIGF2YWlsYWJsZSkgICAgICAgICAgID0gJWxkXG4iLCAoTE9ORykocEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhKSk7CisgICAgICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJTU0ktQyAoaWYgYXZhaWxhYmxlKSAgICAgICAgICAgPSAlbGRcblxuIiwgKExPTkcpKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworCX0KKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiV3BhU3VwcGxpY2FudFVQICAgICAgICAgICAgICAgICA9ICVkXG5cbiIsIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCk7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisKKyAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gcnRfcHJpdmF0ZV9nZXRfc3RhdGlzdGljcywgd3JxLT5sZW5ndGggPSAlZFxuIiwgd3JxLT5sZW5ndGgpKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3ZvaWQJZ2V0QmFJbmZvKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBPdXRCdWYpCit7CisJSU5UIGksIGo7CisJQkFfT1JJX0VOVFJZICpwT3JpQkFFbnRyeTsKKwlCQV9SRUNfRU5UUlkgKnBSZWNCQUVudHJ5OworCisJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV07CisJCWlmICgoKHBFbnRyeS0+VmFsaWRBc0NMSSB8fCBwRW50cnktPlZhbGlkQXNBcENsaSkgJiYgKHBFbnRyeS0+U3N0ID09IFNTVF9BU1NPQykpCisJCQl8fCAocEVudHJ5LT5WYWxpZEFzV0RTKSB8fCAocEVudHJ5LT5WYWxpZEFzTWVzaCkpCisJCXsKKwkJCXNwcmludGYocE91dEJ1ZiwgIiVzXG4lMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCAoQWlkID0gJWQpIChBUCkgLVxuIiwKKyAgICAgICAgICAgICAgICBwT3V0QnVmLAorCQkJCXBFbnRyeS0+QWRkclswXSwgcEVudHJ5LT5BZGRyWzFdLCBwRW50cnktPkFkZHJbMl0sCisJCQkJcEVudHJ5LT5BZGRyWzNdLCBwRW50cnktPkFkZHJbNF0sIHBFbnRyeS0+QWRkcls1XSwgcEVudHJ5LT5BaWQpOworCisJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1tSZWNpcGllbnRdXG4iLCBwT3V0QnVmKTsKKwkJCWZvciAoaj0wOyBqIDwgTlVNX09GX1RJRDsgaisrKQorCQkJeworCQkJCWlmIChwRW50cnktPkJBUmVjV2NpZEFycmF5W2pdICE9IDApCisJCQkJeworCQkJCQlwUmVjQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W3BFbnRyeS0+QkFSZWNXY2lkQXJyYXlbal1dOworCQkJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1RJRD0lZCwgQkFXaW5TaXplPSVkLCBMYXN0SW5kU2VxPSVkLCBSZW9yZGVyaW5nUGt0cz0lZFxuIiwgcE91dEJ1ZiwgaiwgcFJlY0JBRW50cnktPkJBV2luU2l6ZSwgcFJlY0JBRW50cnktPkxhc3RJbmRTZXEsIHBSZWNCQUVudHJ5LT5saXN0LnFsZW4pOworCQkJCX0KKwkJCX0KKwkJCXNwcmludGYocE91dEJ1ZiwgIiVzXG4iLCBwT3V0QnVmKTsKKworCQkJc3ByaW50ZihwT3V0QnVmLCAiJXNbT3JpZ2luYXRvcl1cbiIsIHBPdXRCdWYpOworCQkJZm9yIChqPTA7IGogPCBOVU1fT0ZfVElEOyBqKyspCisJCQl7CisJCQkJaWYgKHBFbnRyeS0+QkFPcmlXY2lkQXJyYXlbal0gIT0gMCkKKwkJCQl7CisJCQkJCXBPcmlCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtqXV07CisJCQkJCXNwcmludGYocE91dEJ1ZiwgIiVzVElEPSVkLCBCQVdpblNpemU9JWQsIFN0YXJ0U2VxPSVkLCBDdXJUeFNlcT0lZFxuIiwgcE91dEJ1ZiwgaiwgcE9yaUJBRW50cnktPkJBV2luU2l6ZSwgcE9yaUJBRW50cnktPlNlcXVlbmNlLCBwRW50cnktPlR4U2VxW2pdKTsKKwkJCQl9CisJCQl9CisJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1xuXG4iLCBwT3V0QnVmKTsKKwkJfQorICAgICAgICBpZiAoc3RybGVuKHBPdXRCdWYpID4gKElXX1BSSVZfU0laRV9NQVNLIC0gMzApKQorICAgICAgICAgICAgICAgIGJyZWFrOworCX0KKworCXJldHVybjsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworc3RhdGljIGludAorcnRfcHJpdmF0ZV9zaG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqd3JxLCBjaGFyICpleHRyYSkKK3sKKyAgICBJTlQJCQkJU3RhdHVzID0gMDsKKyAgICBWSVJUVUFMX0FEQVBURVIJKnBWaXJ0dWFsQWQgPSBOVUxMOworICAgIFBSVE1QX0FEQVBURVIgICBwQWQ7CisJUE9TX0NPT0tJRQkJcE9iajsKKyAgICB1MzIgICAgICAgICAgICAgc3ViY21kID0gd3JxLT5mbGFnczsKKworCWlmIChkZXYtPnByaXZfZmxhZ3MgPT0gSU5UX01BSU4pCisJCXBBZCA9IGRldi0+bWxfcHJpdjsKKwllbHNlCisJeworCQlwVmlydHVhbEFkID0gZGV2LT5tbF9wcml2OworCQlwQWQgPSBwVmlydHVhbEFkLT5SdG1wRGV2LT5tbF9wcml2OworCX0KKwlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJaWYgKHBBZCA9PSBOVUxMKQorCXsKKwkJLyogaWYgMXN0IG9wZW4gZmFpbCwgcEFkIHdpbGwgYmUgZnJlZTsKKwkJICAgU28gdGhlIG5ldF9kZXYtPm1sX3ByaXYgd2lsbCBiZSBOVUxMIGluIDJyZCBvcGVuICovCisJCXJldHVybiAtRU5FVERPV047CisJfQorCisgICAgaWYgKGV4dHJhID09IE5VTEwpCisgICAgeworICAgICAgICB3cnEtPmxlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiAtRUlPOworICAgIH0KKyAgICBtZW1zZXQoZXh0cmEsIDB4MDAsIElXX1BSSVZfU0laRV9NQVNLKTsKKworCXsKKwkJcE9iai0+aW9jdGxfaWZfdHlwZSA9IElOVF9NQUlOOworICAgICAgICBwT2JqLT5pb2N0bF9pZiA9IE1BSU5fTUJTU0lEOworCX0KKworICAgIHN3aXRjaChzdWJjbWQpCisgICAgeworCisgICAgICAgIGNhc2UgU0hPV19DT05OX1NUQVRVUzoKKyAgICAgICAgICAgIGlmIChNT05JVE9SX09OKHBBZCkpCisgICAgICAgICAgICB7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgICAgICAgICAgICAgaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCAmJgorICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcpCisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJNb25pdG9yIE1vZGUoQ2VudHJhbENoYW5uZWwgJWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiTW9uaXRvciBNb2RlKENoYW5uZWwgJWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCSAgICBpZiAoSU5GUkFfT04ocEFkKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiQ29ubmVjdGVkKEFQOiAlc1slMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWF0pXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuU3NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWRbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZFsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWRbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZFs1XSk7CisgICAgICAgICAgICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIlNzaWQ9JXMgLFNzaWRsZW4gPSAlZFxuIixwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuKSk7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBREhPQ19PTihwQWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIkNvbm5lY3RlZFxuIik7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgCWVsc2UKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJICAgIHNwcmludGYoZXh0cmEsICJEaXNjb25uZWN0ZWRcbiIpOworICAgICAgICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCJDb25uU3RhdHVzIGlzIG5vdCBjb25uZWN0ZWRcbiIpKTsKKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIT1dfRFJWSUVSX1ZFUklPTjoKKyAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJEcml2ZXIgdmVyc2lvbi0lcywgJXMgJXNcbiIsIFNUQV9EUklWRVJfVkVSU0lPTiwgX19EQVRFX18sIF9fVElNRV9fICk7CisgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICBjYXNlIFNIT1dfQkFfSU5GTzoKKyAgICAgICAgICAgIGdldEJhSW5mbyhwQWQsIGV4dHJhKTsKKyAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWNhc2UgU0hPV19ERVNDX0lORk86CisJCQl7CisJCQkJU2hvd19EZXNjSW5mb19Qcm9jKHBBZCwgTlVMTCk7CisJCQkJd3JxLT5sZW5ndGggPSAwOyAvLyAxOiBzaXplIG9mICdcMCcKKwkJCX0KKwkJCWJyZWFrOworICAgICAgICBjYXNlIFJBSU9fT0ZGOgorICAgICAgICAgICAgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIlNjYW5uaW5nXG4iKTsKKyAgICAgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvID0gRkFMU0U7CisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuYlJhZGlvICE9IChwQWQtPlN0YUNmZy5iSHdSYWRpbyAmJiBwQWQtPlN0YUNmZy5iU3dSYWRpbykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuYlJhZGlvID0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKTsKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTWxtZVJhZGlvT2ZmKHBBZCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQlwQWQtPkV4dHJhSW5mbyA9IFNXX1JBRElPX09GRjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiUmFkaW8gT2ZmXG4iKTsKKyAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkFJT19PTjoKKyAgICAgICAgICAgIGlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJTY2FubmluZ1xuIik7CisgICAgICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWQtPlN0YUNmZy5iU3dSYWRpbyA9IFRSVUU7CisgICAgICAgICAgICAvL2lmIChwQWQtPlN0YUNmZy5iUmFkaW8gIT0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWQtPlN0YUNmZy5iUmFkaW8gPSAocEFkLT5TdGFDZmcuYkh3UmFkaW8gJiYgcEFkLT5TdGFDZmcuYlN3UmFkaW8pOworICAgICAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE1sbWVSYWRpb09uKHBBZCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQlwQWQtPkV4dHJhSW5mbyA9IEVYVFJBX0lORk9fQ0xFQVI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIlJhZGlvIE9uXG4iKTsKKyAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworICAgICAgICAgICAgYnJlYWs7CisKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQljYXNlIFNIT1dfRExTX0VOVFJZX0lORk86CisJCQl7CisJCQkJU2V0X0Rsc0VudHJ5SW5mb19EaXNwbGF5X1Byb2MocEFkLCBOVUxMKTsKKwkJCQl3cnEtPmxlbmd0aCA9IDA7IC8vIDE6IHNpemUgb2YgJ1wwJworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJY2FzZSBTSE9XX0NGR19WQUxVRToKKwkJCXsKKwkJCQlTdGF0dXMgPSBSVE1QU2hvd0NmZ1ZhbHVlKHBBZCwgd3JxLT5wb2ludGVyLCBleHRyYSk7CisJCQkJaWYgKFN0YXR1cyA9PSAwKQorCQkJCQl3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKwkJCX0KKwkJCWJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgLSB1bmtub3cgc3ViY21kID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgc3ViY21kKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gU3RhdHVzOworfQorCisjaWZkZWYgU0lPQ1NJV01MTUUKK2ludCBydF9pb2N0bF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCSAgIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgICBwQWQgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGl3X21sbWUgKnBNbG1lID0gKHN0cnVjdCBpd19tbG1lICopd3JxdS0+ZGF0YS5wb2ludGVyOworCU1MTUVfUVVFVUVfRUxFTQkJCQlNc2dFbGVtOworCU1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVAlEaXNBc3NvY1JlcTsKKwlNTE1FX0RFQVVUSF9SRVFfU1RSVUNUICAgICAgRGVBdXRoUmVxOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gJXNcbiIsIF9fRlVOQ1RJT05fXykpOworCisJaWYgKHBNbG1lID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoKHBNbG1lLT5jbWQpCisJeworI2lmZGVmIElXX01MTUVfREVBVVRICisJCWNhc2UgSVdfTUxNRV9ERUFVVEg6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PiAlcyAtIElXX01MTUVfREVBVVRIXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJCUNPUFlfTUFDX0FERFIoRGVBdXRoUmVxLkFkZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCURlQXV0aFJlcS5SZWFzb24gPSBwTWxtZS0+cmVhc29uX2NvZGU7CisJCQlNc2dFbGVtLk1zZ0xlbiA9IHNpemVvZihNTE1FX0RFQVVUSF9SRVFfU1RSVUNUKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KE1zZ0VsZW0uTXNnLCAmRGVBdXRoUmVxLCBzaXplb2YoTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCkpOworCQkJTWxtZURlYXV0aFJlcUFjdGlvbihwQWQsICZNc2dFbGVtKTsKKwkJCWlmIChJTkZSQV9PTihwQWQpKQorCQkJeworCQkJICAgIExpbmtEb3duKHBBZCwgRkFMU0UpOworCQkJICAgIHBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIElXX01MTUVfREVBVVRIIC8vCisjaWZkZWYgSVdfTUxNRV9ESVNBU1NPQworCQljYXNlIElXX01MTUVfRElTQVNTT0M6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PiAlcyAtIElXX01MTUVfRElTQVNTT0NcbiIsIF9fRlVOQ1RJT05fXykpOworCQkJQ09QWV9NQUNfQUREUihEaXNBc3NvY1JlcS5BZGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlEaXNBc3NvY1JlcS5SZWFzb24gPSAgcE1sbWUtPnJlYXNvbl9jb2RlOworCisJCQlNc2dFbGVtLk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJTXNnRWxlbS5Nc2dUeXBlID0gTVQyX01MTUVfRElTQVNTT0NfUkVROworCQkJTXNnRWxlbS5Nc2dMZW4gPSBzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KE1zZ0VsZW0uTXNnLCAmRGlzQXNzb2NSZXEsIHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpKTsKKworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7CisJCQlNbG1lRGlzYXNzb2NSZXFBY3Rpb24ocEFkLCAmTXNnRWxlbSk7CisJCQlicmVhazsKKyNlbmRpZiAvLyBJV19NTE1FX0RJU0FTU09DIC8vCisJCWRlZmF1bHQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PiAlcyAtIFVua25vdyBDb21tYW5kXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmIC8vIFNJT0NTSVdNTE1FIC8vCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxNworaW50IHJ0X2lvY3RsX3Npd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisKKyAgICAvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKwl7CisgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgIAlyZXR1cm4gLUVORVRET1dOOworCX0KKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKyAgICAJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorICAgICAgICAgICAgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOworCQkJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKQorCQkJCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIpCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s7CisKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX1dQQV9WRVJTSU9OIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLCBfX0ZVTkNUSU9OX18sIHBhcmFtLT52YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisgICAgICAgICAgICBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1dFUDQwIHx8CisgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfV0VQMTA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjFYID0gRkFMU0U7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1RLSVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfQ0NNUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX0NJUEhFUl9QQUlSV0lTRSAtIHBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+dmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIAljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgorICAgICAgICAgICAgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfV0VQNDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9XRVAxMDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1RLSVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfQ0NNUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX0NJUEhFUl9HUk9VUCAtIHBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+dmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIAljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisgICAgICAgICAgICBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfS0VZX01HTVRfODAyXzFYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEE7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxWCA9IEZBTFNFOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxWCA9IEZBTFNFOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgLy8gV0VQIDF4CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjFYID0gVFJVRTsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL3BBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX0tFWV9NR01UIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLCBfX0ZVTkNUSU9OX18sIHBhcmFtLT52YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIAljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorICAgICAgICAgICAgLyppZiAocGFyYW0tPnZhbHVlID09IDApCisJCQl7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICAJICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgICAgICB9Ki8KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRCAtIHBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+dmFsdWUpKTsKKyAgICAJCWJyZWFrOworICAgIAljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKyAgICAgICAgICAgIGlmIChwYXJhbS0+dmFsdWUgIT0gMCkKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgIC8vcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworCQkJfQorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0FVVEhfV1BBX1ZFUlNJT04gLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisgICAgCQlicmVhazsKKyAgICAJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQkJaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisgICAgICAgICAgICB7CisJCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZDsKKwkJCX0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKQorICAgICAgICAgICAgeworCQkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCQkJfQorICAgICAgICAgICAgZWxzZQorCQkJCXJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0FVVEhfODAyMTFfQVVUSF9BTEcgLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisJCQlicmVhazsKKyAgICAJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0FVVEhfV1BBX0VOQUJMRUQgLSBEcml2ZXIgc3VwcG9ydHMgV1BBIShwYXJhbS0+dmFsdWUgPSAlZClcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisgICAgCQlicmVhazsKKyAgICAJZGVmYXVsdDoKKyAgICAJCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisKKyAgICAvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICB7CisgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorICAgICAgICBwYXJhbS0+dmFsdWUgPSAocEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKSA/IDAgOiAxOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKyAgICAgICAgcGFyYW0tPnZhbHVlID0gKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKSA/IElXX0FVVEhfQUxHX1NIQVJFRF9LRVkgOiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCXBhcmFtLT52YWx1ZSA9IChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgPyAxIDogMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInJ0X2lvY3RsX2dpd2F1dGg6OnBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgcGFyYW0tPnZhbHVlKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZm5TZXRDaXBoZXJLZXkoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgSU5UICAgICAgICAgICAgIGtleUlkeCwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgIENpcGhlckFsZywKKyAgICBJTiAgQk9PTEVBTiAgICAgICAgIGJHVEssCisgICAgSU4gIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQpCit7CisgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKyAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgZXh0LT5rZXksIExFTl9US0lQX0VLKTsKKyAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uVHhNaWMsIGV4dC0+a2V5ICsgTEVOX1RLSVBfRUssIExFTl9US0lQX1RYTUlDSyk7CisgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLlJ4TWljLCBleHQtPmtleSArIExFTl9US0lQX0VLICsgTEVOX1RLSVBfVFhNSUNLLCBMRU5fVEtJUF9SWE1JQ0spOworICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKyAgICAvLyBVcGRhdGUgZ3JvdXAga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZQorCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwKKwkJCQkJCSAgQlNTMCwKKwkJCQkJCSAga2V5SWR4LAorCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLAorCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LAorCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uVHhNaWMsCisJCQkJCQkgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5SeE1pYyk7CisKKyAgICBpZiAoYkdUSykKKyAgICAgICAgLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisgICAgCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkYXB0ZXIsCisgICAgCQkJCQkJCSAgQlNTMCwKKyAgICAJCQkJCQkJICBrZXlJZHgsCisgICAgCQkJCQkJCSAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZywKKyAgICAJCQkJCQkJICBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIC8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorICAgIAlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZGFwdGVyLAorICAgIAkJCQkJCQkgIEJTUzAsCisgICAgCQkJCQkJCSAga2V5SWR4LAorICAgIAkJCQkJCQkgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcsCisgICAgCQkJCQkJCSAgJnBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSk7Cit9CisKK2ludCBydF9pb2N0bF9zaXdlbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJICAgY2hhciAqZXh0cmEpCisJCQl7CisgICAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworICAgIGludCBrZXlJZHgsIGFsZyA9IGV4dC0+YWxnOworCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJeworICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKyAgICBpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQorCXsKKyAgICAgICAga2V5SWR4ID0gKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworICAgICAgICAvLyBzZXQgQlNTSUQgd2NpZCBlbnRyeSBvZiB0aGUgUGFpci13aXNlIEtleSB0YWJsZSBhcyBuby1zZWN1cml0eSBtb2RlCisJICAgIEFzaWNSZW1vdmVQYWlyd2lzZUtleUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBCU1NJRF9XQ0lEKTsKKyAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IDA7CisJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwkJQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLCAwLCAoVUNIQVIpa2V5SWR4KTsKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OlJlbW92ZSBhbGwga2V5cyEoZW5jb2RpbmctPmZsYWdzID0gJXgpXG4iLCBfX0ZVTkNUSU9OX18sIGVuY29kaW5nLT5mbGFncykpOworICAgIH0KKwkJCQkJZWxzZQorICAgIHsKKyAgICAgICAgLy8gR2V0IEtleSBJbmRleCBhbmQgY29udmV0IHRvIG91ciBvd24gZGVmaW5lZCBrZXkgaW5kZXgKKyAgICAJa2V5SWR4ID0gKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworICAgIAlpZigoa2V5SWR4IDwgMCkgfHwgKGtleUlkeCA+PSBOUl9XRVBfS0VZUykpCisgICAgCQlyZXR1cm4gLUVJTlZBTDsKKworICAgICAgICBpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkID0ga2V5SWR4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OkRlZmF1bHRLZXlJZCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkKSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGFsZykgeworICAgIAkJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0VOQ09ERV9BTEdfTk9ORVxuIiwgX19GVU5DVElPTl9fKSk7CisgICAgCQkJYnJlYWs7CisgICAgCQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19FTkNPREVfQUxHX1dFUCAtIGV4dC0+a2V5X2xlbiA9ICVkLCBrZXlJZHggPSAlZFxuIiwgX19GVU5DVElPTl9fLCBleHQtPmtleV9sZW4sIGtleUlkeCkpOworICAgIAkJCWlmIChleHQtPmtleV9sZW4gPT0gTUFYX1dFUF9LRVlfU0laRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgIAkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPSBNQVhfV0VQX0tFWV9TSVpFOworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKwkJCQl9CisgICAgICAgIAkJZWxzZSBpZiAoZXh0LT5rZXlfbGVuID09IE1JTl9XRVBfS0VZX1NJWkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gTUlOX1dFUF9LRVlfU0laRTsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJCX0KKyAgICAgICAgCQllbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgIDE2KTsKKwkJCSAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKKyAgICAJCQlicmVhazsKKyAgICAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19FTkNPREVfQUxHX1RLSVAgLSBrZXlJZHggPSAlZCwgZXh0LT5rZXlfbGVuID0gJWRcbiIsIF9fRlVOQ1RJT05fXywga2V5SWR4LCBleHQtPmtleV9sZW4pKTsKKyAgICAgICAgICAgICAgICBpZiAoZXh0LT5rZXlfbGVuID09IDMyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmblNldENpcGhlcktleShwQWRhcHRlciwga2V5SWR4LCBDSVBIRVJfVEtJUCwgRkFMU0UsIGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQl9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuU2V0Q2lwaGVyS2V5KHBBZGFwdGVyLCBrZXlJZHgsIENJUEhFUl9US0lQLCBUUlVFLCBleHQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgODAyLjF4IHBvcnQgY29udHJvbAorICAgICAgICAgICAgCSAgICAgICAgLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisgICAgICAgICAgICAJICAgICAgICBTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CisgICAgICAgICAgICAgICAgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKQorCQl7CisgICAgICAgICAgICAgICAgICAgIGZuU2V0Q2lwaGVyS2V5KHBBZGFwdGVyLCBrZXlJZHgsIENJUEhFUl9BRVMsIEZBTFNFLCBleHQpOworICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQorICAgICAgICAgICAgICAgICAgICAJLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisgICAgICAgICAgICAgICAgICAgIAlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZuU2V0Q2lwaGVyS2V5KHBBZGFwdGVyLCBrZXlJZHgsIENJUEhFUl9BRVMsIFRSVUUsIGV4dCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKyAgICAgICAgCSAgICAgICAgLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisgICAgICAgIAkgICAgICAgIFNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAJCWRlZmF1bHQ6CisgICAgCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CitydF9pb2N0bF9naXdlbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWQgPSBkZXYtPm1sX3ByaXY7CisJUENIQVIgcEtleSA9IE5VTEw7CisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisJaW50IGlkeCwgbWF4X2tleV9sZW47CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT0+IHJ0X2lvY3RsX2dpd2VuY29kZWV4dFxuIikpOworCisJbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOworCWlmIChtYXhfa2V5X2xlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCWlmIChpZHgpCisJeworCQlpZiAoaWR4IDwgMSB8fCBpZHggPiA0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlkeC0tOworCisJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHx8CisJCQkocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKQorCQl7CisJCQlpZiAoaWR4ICE9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCkKKwkJCXsKKwkJCQlleHQtPmtleV9sZW4gPSAwOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCWVsc2UKKwkJaWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCisJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKKwltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOworCisJZXh0LT5rZXlfbGVuID0gMDsKKwlzd2l0Y2gocEFkLT5TdGFDZmcuV2VwU3RhdHVzKSB7CisJCWNhc2UgTmRpczgwMl8xMVdFUERpc2FibGVkOgorCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisJCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOworCQkJYnJlYWs7CisJCWNhc2UgTmRpczgwMl8xMVdFUEVuYWJsZWQ6CisJCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfV0VQOworCQkJaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5TGVuID4gbWF4X2tleV9sZW4pCisJCQkJcmV0dXJuIC1FMkJJRzsKKwkJCWVsc2UKKwkJCXsKKwkJCQlleHQtPmtleV9sZW4gPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbjsKKwkJCQlwS2V5ID0gJihwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleVswXSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOgorCQljYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ6CisJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1RLSVA7CisJCQllbHNlCisJCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX0NDTVA7CisKKwkJCWlmIChtYXhfa2V5X2xlbiA8IDMyKQorCQkJCXJldHVybiAtRTJCSUc7CisJCQllbHNlCisJCQl7CisJCQkJZXh0LT5rZXlfbGVuID0gMzI7CisJCQkJcEtleSA9ICZwQWQtPlN0YUNmZy5QTUtbMF07CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChleHQtPmtleV9sZW4gJiYgcEtleSkKKwl7CisJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKKwkJbWVtY3B5KGV4dC0+a2V5LCBwS2V5LCBleHQtPmtleV9sZW4pOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgU0lPQ1NJV0dFTklFCitpbnQgcnRfaW9jdGxfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZCA9IGRldi0+bWxfcHJpdjsKKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA+IE1BWF9MRU5fT0ZfUlNOSUUgfHwKKwkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIGV4dHJhID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCkKKwl7CisJCXBBZC0+U3RhQ2ZnLlJTTklFX0xlbiA9IHdycXUtPmRhdGEubGVuZ3RoOworCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuUlNOX0lFWzBdLCBleHRyYSwgcEFkLT5TdGFDZmcuUlNOSUVfTGVuKTsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5TdGFDZmcuUlNOSUVfTGVuID0gMDsKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U3RhQ2ZnLlJTTl9JRVswXSwgTUFYX0xFTl9PRl9SU05JRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLy8gU0lPQ1NJV0dFTklFIC8vCisKK2ludCBydF9pb2N0bF9naXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZCA9IGRldi0+bWxfcHJpdjsKKworCWlmICgocEFkLT5TdGFDZmcuUlNOSUVfTGVuID09IDApIHx8CisJCShwQWQtPlN0YUNmZy5BdXRoTW9kZSA8IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkpCisJeworCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZkZWYgU0lPQ1NJV0dFTklFCisJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUpCisJeworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbikKKwkJcmV0dXJuIC1FMkJJRzsKKworCXdycXUtPmRhdGEubGVuZ3RoID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuOworCW1lbWNweShleHRyYSwgJnBBZC0+U3RhQ2ZnLlJTTl9JRVswXSwgcEFkLT5TdGFDZmcuUlNOSUVfTGVuKTsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFNJT0NTSVdHRU5JRSAvLworI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJeworCQlVQ0hBUiBSU05JZSA9IElFX1dQQTsKKworCQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCAocEFkLT5TdGFDZmcuUlNOSUVfTGVuICsgMikpIC8vIElELCBMZW4KKwkJCXJldHVybiAtRTJCSUc7CisJCXdycXUtPmRhdGEubGVuZ3RoID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuICsgMjsKKworCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spIHx8CisgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikpCisJCQlSU05JZSA9IElFX1JTTjsKKworCQlleHRyYVswXSA9IChjaGFyKVJTTkllOworCQlleHRyYVsxXSA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbjsKKwkJbWVtY3B5KGV4dHJhKzIsICZwQWQtPlN0YUNmZy5SU05fSUVbMF0sIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdwbWtzYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkgICBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSICAgcEFkID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wbWtzYSAqcFBta3NhID0gKHN0cnVjdCBpd19wbWtzYSAqKXdycXUtPmRhdGEucG9pbnRlcjsKKwlJTlQJQ2FjaGVkSWR4ID0gMCwgaWR4ID0gMDsKKworCWlmIChwUG1rc2EgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT0+IHJ0X2lvY3RsX3Npd3Bta3NhXG4iKSk7CisJc3dpdGNoKHBQbWtzYS0+Y21kKQorCXsKKwkJY2FzZSBJV19QTUtTQV9GTFVTSDoKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlNhdmVkUE1LLCBzaXplb2YoQlNTSURfSU5GTykqUE1LSURfTk8pOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgicnRfaW9jdGxfc2l3cG1rc2EgLSBJV19QTUtTQV9GTFVTSFxuIikpOworCQkJYnJlYWs7CisJCWNhc2UgSVdfUE1LU0FfUkVNT1ZFOgorCQkJZm9yIChDYWNoZWRJZHggPSAwOyBDYWNoZWRJZHggPCBwQWQtPlN0YUNmZy5TYXZlZFBNS051bTsgQ2FjaGVkSWR4KyspCisJCQl7CisJCSAgICAgICAgLy8gY29tcGFyZSB0aGUgQlNTSUQKKwkJICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBQbWtzYS0+YnNzaWQuc2FfZGF0YSwgcEFkLT5TdGFDZmcuU2F2ZWRQTUtbQ2FjaGVkSWR4XS5CU1NJRCwgTUFDX0FERFJfTEVOKSkKKwkJICAgICAgICB7CisJCSAgICAgICAgCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSUQsIE1BQ19BRERSX0xFTik7CisJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uUE1LSUQsIDE2KTsKKwkJCQkJZm9yIChpZHggPSBDYWNoZWRJZHg7IGlkeCA8IChwQWQtPlN0YUNmZy5TYXZlZFBNS051bSAtIDEpOyBpZHgrKykKKwkJCQkJeworCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeF0uQlNTSURbMF0sICZwQWQtPlN0YUNmZy5TYXZlZFBNS1tpZHgrMV0uQlNTSURbMF0sIE1BQ19BRERSX0xFTik7CisJCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuU2F2ZWRQTUtbaWR4XS5QTUtJRFswXSwgJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeCsxXS5QTUtJRFswXSwgMTYpOworCQkJCQl9CisJCQkJCXBBZC0+U3RhQ2ZnLlNhdmVkUE1LTnVtLS07CisJCQkgICAgICAgIGJyZWFrOworCQkgICAgICAgIH0KKwkgICAgICAgIH0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgicnRfaW9jdGxfc2l3cG1rc2EgLSBJV19QTUtTQV9SRU1PVkVcbiIpKTsKKwkJCWJyZWFrOworCQljYXNlIElXX1BNS1NBX0FERDoKKwkJCWZvciAoQ2FjaGVkSWR4ID0gMDsgQ2FjaGVkSWR4IDwgcEFkLT5TdGFDZmcuU2F2ZWRQTUtOdW07IENhY2hlZElkeCsrKQorCQkJeworCQkgICAgICAgIC8vIGNvbXBhcmUgdGhlIEJTU0lECisJCSAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwUG1rc2EtPmJzc2lkLnNhX2RhdGEsIHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSUQsIE1BQ19BRERSX0xFTikpCisJCQkgICAgICAgIGJyZWFrOworCSAgICAgICAgfQorCisJICAgICAgICAvLyBGb3VuZCwgcmVwbGFjZSBpdAorCSAgICAgICAgaWYgKENhY2hlZElkeCA8IFBNS0lEX05PKQorCSAgICAgICAgeworCQkgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX09GRiwgKCJVcGRhdGUgUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKKwkJICAgICAgICBOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuU2F2ZWRQTUtbQ2FjaGVkSWR4XS5CU1NJRFswXSwgcFBta3NhLT5ic3NpZC5zYV9kYXRhLCBNQUNfQUREUl9MRU4pOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLlBNS0lEWzBdLCBwUG1rc2EtPnBta2lkLCAxNik7CisJCSAgICAgICAgcEFkLT5TdGFDZmcuU2F2ZWRQTUtOdW0rKzsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIE5vdCBmb3VuZCwgcmVwbGFjZSB0aGUgbGFzdCBvbmUKKwkgICAgICAgIGVsc2UKKwkgICAgICAgIHsKKwkJICAgICAgICAvLyBSYW5kb21seSByZXBsYWNlIG9uZQorCQkgICAgICAgIENhY2hlZElkeCA9IChwUG1rc2EtPmJzc2lkLnNhX2RhdGFbNV0gJSBQTUtJRF9OTyk7CisJCSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfT0ZGLCAoIlVwZGF0ZSBQTUtJRCwgaWR4ID0gJWRcbiIsIENhY2hlZElkeCkpOworCQkgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLkJTU0lEWzBdLCBwUG1rc2EtPmJzc2lkLnNhX2RhdGEsIE1BQ19BRERSX0xFTik7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uUE1LSURbMF0sIHBQbWtzYS0+cG1raWQsIDE2KTsKKwkgICAgICAgIH0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgicnRfaW9jdGxfc2l3cG1rc2EgLSBJV19QTUtTQV9BRERcbiIpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgicnRfaW9jdGxfc2l3cG1rc2EgLSBVbmtub3cgQ29tbWFuZCEhXG4iKSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyAjaWYgV0lSRUxFU1NfRVhUID4gMTcKKworI2lmZGVmIERCRworc3RhdGljIGludAorcnRfcHJpdmF0ZV9pb2N0bF9iYnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BvaW50ICp3cnEsIGNoYXIgKmV4dHJhKQorCQkJeworCUNIQVIJCQkJKnRoaXNfY2hhcjsKKwlDSEFSCQkJCSp2YWx1ZSA9IE5VTEw7CisJVUNIQVIJCQkJcmVnQkJQID0gMDsKKy8vCUNIQVIJCQkJYXJnWzI1NV09ezB9OworCVVJTlQzMgkJCQliYnBJZDsKKwlVSU5UMzIJCQkJYmJwVmFsdWU7CisJQk9PTEVBTgkJCQliSXNQcmludEFsbEJCUCA9IEZBTFNFOworCUlOVAkJCQkJU3RhdHVzID0gMDsKKyAgICBQUlRNUF9BREFQVEVSICAgICAgIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisKKwltZW1zZXQoZXh0cmEsIDB4MDAsIElXX1BSSVZfU0laRV9NQVNLKTsKKworCWlmICh3cnEtPmxlbmd0aCA+IDEpIC8vTm8gcGFyYW1ldGVycy4KKwkJCQl7CisJCXNwcmludGYoZXh0cmEsICJcbiIpOworCisJCS8vUGFyc2luZyBSZWFkIG9yIFdyaXRlCisJCXRoaXNfY2hhciA9IHdycS0+cG9pbnRlcjsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgidGhpc19jaGFyPSVzXG4iLCB0aGlzX2NoYXIpKTsKKwkJaWYgKCEqdGhpc19jaGFyKQorCQkJZ290byBuZXh0OworCisJCWlmICgodmFsdWUgPSBydHN0cmNocih0aGlzX2NoYXIsICc9JykpICE9IE5VTEwpCisJCQkqdmFsdWUrKyA9IDA7CisKKwkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKQorCQl7IC8vUmVhZAorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgidGhpc19jaGFyPSVzLCB2YWx1ZT0lc1xuIiwgdGhpc19jaGFyLCB2YWx1ZSkpOworCQkJaWYgKHNzY2FuZih0aGlzX2NoYXIsICIlZCIsICYoYmJwSWQpKSA9PSAxKQorCQkJeworI2lmbmRlZiBSVDMweHgKKwkJCQlpZiAoYmJwSWQgPD0gMTM2KQorI2VuZGlmIC8vIFJUMzB4eCAvLworI2lmZGVmIFJUMzB4eAorCQkJCWlmIChiYnBJZCA8PSAxMzgpICAvLyBlZGl0IGJ5IGpvaG5saSwgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAsIGFkZCBCQlAgUjEzOCBmb3IgQURDIGR5bmFtaWMgb24vb2ZmIGNvbnRyb2wKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCQl7CisjaWZkZWYgUkFMSU5LX0FURQorCQkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQkJeworCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCQkJfQorCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJCQl7CisJCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJCQl9CisJCQkJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlIlMDJkWzB4JTAyWF06JTAyWFxuIiwgYmJwSWQsIGJicElkKjIsIHJlZ0JCUCk7CisgICAgICAgICAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJtc2c9JXNcbiIsIGV4dHJhKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7Ly9JbnZhbGlkIHBhcmFtZXRlcywgc28gZGVmYXVsdCBwcmludGsgYWxsIGJicAorCQkJCQliSXNQcmludEFsbEJCUCA9IFRSVUU7CisJCQkJCWdvdG8gbmV4dDsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7IC8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBiYnAKKwkJCQliSXNQcmludEFsbEJCUCA9IFRSVUU7CisJCQkJZ290byBuZXh0OworCQkJfQorCQl9CisJCWVsc2UKKwkJeyAvL1dyaXRlCisJCQlpZiAoKHNzY2FuZih0aGlzX2NoYXIsICIlZCIsICYoYmJwSWQpKSA9PSAxKSAmJiAoc3NjYW5mKHZhbHVlLCAiJXgiLCAmKGJicFZhbHVlKSkgPT0gMSkpCisJCQl7CisjaWZuZGVmIFJUMzB4eAorCQkJCWlmIChiYnBJZCA8PSAxMzYpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisjaWZkZWYgUlQzMHh4CisJCQkJaWYgKGJicElkIDw9IDEzOCkgIC8vIGVkaXQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgYWRkIEJCUCBSMTM4IGZvciBBREMgZHluYW1pYyBvbi9vZmYgY29udHJvbAorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJCXsKKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJCQl7CisJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCBiYnBWYWx1ZSk7CisJCQkJCQkvL1JlYWQgaXQgYmFjayBmb3Igc2hvd2luZworCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCQkJfQorCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJCQl7CisJCQkJCSAgICBSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgYmJwVmFsdWUpOworICAgIAkJCQkJLy9SZWFkIGl0IGJhY2sgZm9yIHNob3dpbmcKKyAgICAJCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJfQorCQkJCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSJTAyZFsweCUwMlhdOiUwMlhcbiIsIGJicElkLCBiYnBJZCoyLCByZWdCQlApOworICAgICAgICAgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgibXNnPSVzXG4iLCBleHRyYSkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBiYnAKKwkJCQkJYklzUHJpbnRBbGxCQlAgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeyAvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgYmJwCisJCQkJYklzUHJpbnRBbGxCQlAgPSBUUlVFOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJfQorCQl9CisJZWxzZQorCQliSXNQcmludEFsbEJCUCA9IFRSVUU7CisKK25leHQ6CisJaWYgKGJJc1ByaW50QWxsQkJQKQorCXsKKwkJbWVtc2V0KGV4dHJhLCAweDAwLCBJV19QUklWX1NJWkVfTUFTSyk7CisJCXNwcmludGYoZXh0cmEsICJcbiIpOworI2lmbmRlZiBSVDMweHgKKwkJZm9yIChiYnBJZCA9IDA7IGJicElkIDw9IDEzNjsgYmJwSWQrKykKKyNlbmRpZiAvLyBSVDMweHggLy8KKyNpZmRlZiBSVDMweHgKKwkJZm9yIChiYnBJZCA9IDA7IGJicElkIDw9IDEzODsgYmJwSWQrKykgIC8vIGVkaXQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgYWRkIEJCUCBSMTM4IGZvciBBREMgZHluYW1pYyBvbi9vZmYgY29udHJvbAorI2VuZGlmIC8vIFJUMzB4eCAvLworCQl7CisJCSAgICBpZiAoc3RybGVuKGV4dHJhKSA+PSAoSVdfUFJJVl9TSVpFX01BU0sgLSAxMCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgUkFMSU5LX0FURQorCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQl7CisJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKy8qCisJCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSJTAyZFsweCUwMlhdOiUwMlggICAgIiwgYmJwSWQsIGJicElkKjIsIHJlZ0JCUCk7CisJCQlpZiAoYmJwSWQlNSA9PSA0KQorCQkJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlxuIik7CisqLworCQkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiJTAzZCA9ICUwMlhcbiIsIGJicElkLCByZWdCQlApOyAgLy8gZWRpdCBieSBqb2hubGksIGNoYW5nZSBkaXNwbGF5IGZvcm1hdAorCQl9CisKKyAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+bGVuZ3RoID0gJWRcbiIsIHdycS0+bGVuZ3RoKSk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09cnRfcHJpdmF0ZV9pb2N0bF9iYnBcblxuIikpOworCisgICAgcmV0dXJuIFN0YXR1czsKK30KKyNlbmRpZiAvLyBEQkcgLy8KKworaW50IHJ0X2lvY3RsX3Npd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKyAgICBQUlRNUF9BREFQVEVSICAgcEFkID0gZGV2LT5tbF9wcml2OworICAgIFVJTlQzMiAgICAgICAgICByYXRlID0gd3JxdS0+Yml0cmF0ZS52YWx1ZSwgZml4ZWQgPSB3cnF1LT5iaXRyYXRlLmZpeGVkOworCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKyAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJydF9pb2N0bF9zaXdyYXRlOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgCXJldHVybiAtRU5FVERPV047CisJfQorCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgicnRfaW9jdGxfc2l3cmF0ZTo6KHJhdGUgPSAlZCwgZml4ZWQgPSAlZClcbiIsIHJhdGUsIGZpeGVkKSk7CisgICAgLyogcmF0ZSA9IC0xID0+IGF1dG8gcmF0ZQorICAgICAgIHJhdGUgPSBYLCBmaXhlZCA9IDEgPT4gKGZpeGVkIHJhdGUgWCkKKyAgICAqLworICAgIGlmIChyYXRlID09IC0xKQorICAgIHsKKwkJLy9BdXRvIFJhdGUKKwkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKKwkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPD0gUEhZXzExRykgfHwKKwkJICAgIChwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkpCisJCQlSVE1QU2V0RGVzaXJlZFJhdGVzKHBBZCwgLTEpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCVNldENvbW1vbkhUKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChmaXhlZCkKKyAgICAgICAgeworICAgICAgICAJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBGQUxTRTsKKyAgICAgICAgICAgIGlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA8PSBQSFlfMTFHKSB8fAorICAgICAgICAgICAgICAgIChwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9IE1PREVfT0ZETSkpCisgICAgICAgICAgICAgICAgUlRNUFNldERlc2lyZWRSYXRlcyhwQWQsIHJhdGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTX0FVVE87CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgICAgICAgICAgICAgU2V0Q29tbW9uSFQocEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInJ0X2lvY3RsX3Npd3JhdGU6OihIdE1jcz0lZClcbiIscEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRPRE86IHJhdGUgPSBYLCBmaXhlZCA9IDAgPT4gKHJhdGVzIDw9IFgpCisgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworICAgIFBSVE1QX0FEQVBURVIgICBwQWQgPSBkZXYtPm1sX3ByaXY7CisgICAgaW50IHJhdGVfaW5kZXggPSAwLCByYXRlX2NvdW50ID0gMDsKKyAgICBIVFRSQU5TTUlUX1NFVFRJTkcgaHRfc2V0dGluZzsKKyAgICBfX3MzMiByYWxpbmtyYXRlW10gPQorCXsyLCAgNCwgICAxMSwgIDIyLCAvLyBDQ0sKKwkxMiwgMTgsICAgMjQsICAzNiwgNDgsIDcyLCA5NiwgMTA4LCAvLyBPRkRNCisJMTMsIDI2LCAgIDM5LCAgNTIsICA3OCwgMTA0LCAxMTcsIDEzMCwgMjYsICA1MiwgIDc4LCAxMDQsIDE1NiwgMjA4LCAyMzQsIDI2MCwgLy8gMjBNSHosIDgwMG5zIEdJLCBNQ1M6IDAgfiAxNQorCTM5LCA3OCwgIDExNywgMTU2LCAyMzQsIDMxMiwgMzUxLCAzOTAsCQkJCQkJCQkJCSAgLy8gMjBNSHosIDgwMG5zIEdJLCBNQ1M6IDE2IH4gMjMKKwkyNywgNTQsICAgODEsIDEwOCwgMTYyLCAyMTYsIDI0MywgMjcwLCA1NCwgMTA4LCAxNjIsIDIxNiwgMzI0LCA0MzIsIDQ4NiwgNTQwLCAvLyA0ME1IeiwgODAwbnMgR0ksIE1DUzogMCB+IDE1CisJODEsIDE2MiwgMjQzLCAzMjQsIDQ4NiwgNjQ4LCA3MjksIDgxMCwJCQkJCQkJCQkJICAvLyA0ME1IeiwgODAwbnMgR0ksIE1DUzogMTYgfiAyMworCTE0LCAyOSwgICA0MywgIDU3LCAgODcsIDExNSwgMTMwLCAxNDQsIDI5LCA1OSwgICA4NywgMTE1LCAxNzMsIDIzMCwgMjYwLCAyODgsIC8vIDIwTUh6LCA0MDBucyBHSSwgTUNTOiAwIH4gMTUKKwk0MywgODcsICAxMzAsIDE3MywgMjYwLCAzMTcsIDM5MCwgNDMzLAkJCQkJCQkJCQkgIC8vIDIwTUh6LCA0MDBucyBHSSwgTUNTOiAxNiB+IDIzCisJMzAsIDYwLCAgIDkwLCAxMjAsIDE4MCwgMjQwLCAyNzAsIDMwMCwgNjAsIDEyMCwgMTgwLCAyNDAsIDM2MCwgNDgwLCA1NDAsIDYwMCwgLy8gNDBNSHosIDQwMG5zIEdJLCBNQ1M6IDAgfiAxNQorCTkwLCAxODAsIDI3MCwgMzYwLCA1NDAsIDcyMCwgODEwLCA5MDB9OwkJCQkJCQkJCQkgIC8vIDQwTUh6LCA0MDBucyBHSSwgTUNTOiAxNiB+IDIzCisKKyAgICByYXRlX2NvdW50ID0gc2l6ZW9mKHJhbGlua3JhdGUpL3NpemVvZihfX3MzMik7CisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKyAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgCXJldHVybiAtRU5FVERPV047CisJfQorCisgICAgaWYgKChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9PSBGQUxTRSkgJiYKKyAgICAgICAgKElORlJBX09OKHBBZCkpICYmCisgICAgICAgICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA8PSBQSFlfMTFHKSB8fCAocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pKSkKKyAgICAgICAgaHRfc2V0dGluZy53b3JkID0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLndvcmQ7CisgICAgZWxzZQorICAgICAgICBodF9zZXR0aW5nLndvcmQgPSBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS53b3JkOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgaWYgKGh0X3NldHRpbmcuZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYKQorICAgIHsKKy8vICAgIAlyYXRlX2luZGV4ID0gMTIgKyAoKFVDSEFSKWh0X3NldHRpbmcuZmllbGQuQlcgKjE2KSArICgoVUNIQVIpaHRfc2V0dGluZy5maWVsZC5TaG9ydEdJICozMikgKyAoKFVDSEFSKWh0X3NldHRpbmcuZmllbGQuTUNTKTsKKyAgICAJcmF0ZV9pbmRleCA9IDEyICsgKChVQ0hBUilodF9zZXR0aW5nLmZpZWxkLkJXICoyNCkgKyAoKFVDSEFSKWh0X3NldHRpbmcuZmllbGQuU2hvcnRHSSAqNDgpICsgKChVQ0hBUilodF9zZXR0aW5nLmZpZWxkLk1DUyk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICBpZiAoaHRfc2V0dGluZy5maWVsZC5NT0RFID09IE1PREVfT0ZETSkKKyAgICAJcmF0ZV9pbmRleCA9IChVQ0hBUikoaHRfc2V0dGluZy5maWVsZC5NQ1MpICsgNDsKKyAgICBlbHNlIGlmIChodF9zZXR0aW5nLmZpZWxkLk1PREUgPT0gTU9ERV9DQ0spCisgICAgCXJhdGVfaW5kZXggPSAoVUNIQVIpKGh0X3NldHRpbmcuZmllbGQuTUNTKTsKKworICAgIGlmIChyYXRlX2luZGV4IDwgMCkKKyAgICAgICAgcmF0ZV9pbmRleCA9IDA7CisKKyAgICBpZiAocmF0ZV9pbmRleCA+IHJhdGVfY291bnQpCisgICAgICAgIHJhdGVfaW5kZXggPSByYXRlX2NvdW50OworCisgICAgd3JxdS0+Yml0cmF0ZS52YWx1ZSA9IHJhbGlua3JhdGVbcmF0ZV9pbmRleF0gKiA1MDAwMDA7CisgICAgd3JxdS0+Yml0cmF0ZS5kaXNhYmxlZCA9IDA7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcnRfaGFuZGxlcltdID0KK3sKKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkgICAgICAgICAgICAvKiBTSU9DU0lXQ09NTUlUICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd25hbWUsCQkJLyogU0lPQ0dJV05BTUUgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCSAgICAgICAgICAgIC8qIFNJT0NTSVdOV0lEICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkgICAgICAgICAgICAvKiBTSU9DR0lXTldJRCAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2ZyZXEsCQkgICAgLyogU0lPQ1NJV0ZSRVEgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdmcmVxLAkJICAgIC8qIFNJT0NHSVdGUkVRICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3bW9kZSwJCSAgICAvKiBTSU9DU0lXTU9ERSAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd21vZGUsCQkgICAgLyogU0lPQ0dJV01PREUgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdTRU5TICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DR0lXU0VOUyAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUkFOR0UgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd3JhbmdlLAkJICAgIC8qIFNJT0NHSVdSQU5HRSAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCAvKiBrZXJuZWwgY29kZSAqLywgICAgLyogU0lPQ0dJV1BSSVYgICAqLworCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICAqLworCShpd19oYW5kbGVyKSBydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzIC8qIGtlcm5lbCBjb2RlICovLCAgICAvKiBTSU9DR0lXU1RBVFMgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1NQWSAgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdTUFkgICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgICAgICAvKiBTSU9DU0lXVEhSU1BZICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogU0lPQ0dJV1RIUlNQWSAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdhcCwgICAgICAgICAgICAvKiBTSU9DU0lXQVAgICAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2FwLAkJICAgIC8qIFNJT0NHSVdBUCAgICAgKi8KKyNpZmRlZiBTSU9DU0lXTUxNRQorCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdtbG1lLAkgICAgICAgIC8qIFNJT0NTSVdNTE1FICAgKi8KKyNlbHNlCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogU0lPQ1NJV01MTUUgKi8KKyNlbmRpZiAvLyBTSU9DU0lXTUxNRSAvLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9pd2FwbGlzdCwJCSAgICAvKiBTSU9DR0lXQVBMSVNUICovCisjaWZkZWYgU0lPQ0dJV1NDQU4KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3c2NhbiwJCSAgICAvKiBTSU9DU0lXU0NBTiAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd3NjYW4sCQkgICAgLyogU0lPQ0dJV1NDQU4gICAqLworI2Vsc2UKKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgICAgICAvKiBTSU9DU0lXU0NBTiAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogU0lPQ0dJV1NDQU4gICAqLworI2VuZGlmIC8qIFNJT0NHSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2Vzc2lkLAkJICAgIC8qIFNJT0NTSVdFU1NJRCAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3ZXNzaWQsCQkgICAgLyogU0lPQ0dJV0VTU0lEICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXduaWNrbiwJCSAgICAvKiBTSU9DU0lXTklDS04gICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd25pY2tuLAkJICAgIC8qIFNJT0NHSVdOSUNLTiAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgICAgICAvKiAtLSBob2xlIC0tICAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogLS0gaG9sZSAtLSAgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdyYXRlLCAgICAgICAgICAvKiBTSU9DU0lXUkFURSAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd3JhdGUsICAgICAgICAgIC8qIFNJT0NHSVdSQVRFICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3cnRzLAkJICAgIC8qIFNJT0NTSVdSVFMgICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3cnRzLAkJICAgIC8qIFNJT0NHSVdSVFMgICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3ZnJhZywJCSAgICAvKiBTSU9DU0lXRlJBRyAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2ZyYWcsCQkgICAgLyogU0lPQ0dJV0ZSQUcgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdUWFBPVyAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DR0lXVFhQT1cgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1JFVFJZICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdSRVRSWSAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3ZW5jb2RlLAkJLyogU0lPQ1NJV0VOQ09ERSAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdlbmNvZGUsCQkvKiBTSU9DR0lXRU5DT0RFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1BPV0VSICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdQT1dFUiAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCQkJLyogLS0gaG9sZSAtLSAqLworI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisgICAgKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2dlbmllLCAgICAgICAgIC8qIFNJT0NTSVdHRU5JRSAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3Z2VuaWUsICAgICAgICAgLyogU0lPQ0dJV0dFTklFICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdhdXRoLAkJICAgIC8qIFNJT0NTSVdBVVRIICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3YXV0aCwJCSAgICAvKiBTSU9DR0lXQVVUSCAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2VuY29kZWV4dCwJICAgIC8qIFNJT0NTSVdFTkNPREVFWFQgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3ZW5jb2RlZXh0LAkJLyogU0lPQ0dJV0VOQ09ERUVYVCAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdwbWtzYSwgICAgICAgICAvKiBTSU9DU0lXUE1LU0EgICovCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHJ0X3ByaXZfaGFuZGxlcnNbXSA9IHsKKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDAwICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwMSAqLworI2lmbmRlZiBDT05GSUdfQVBfU1VQUE9SVAorCShpd19oYW5kbGVyKSBydF9pb2N0bF9zZXRwYXJhbSwgLyogKyAweDAyICovCisjZWxzZQorCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDIgKi8KKyNlbmRpZiAvLyBDT05GSUdfQVBfU1VQUE9SVCAvLworI2lmZGVmIERCRworCShpd19oYW5kbGVyKSBydF9wcml2YXRlX2lvY3RsX2JicCwgLyogKyAweDAzICovCisjZWxzZQorCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDMgKi8KKyNlbmRpZgorCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDA1ICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwNiAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDcgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDA4ICovCisJKGl3X2hhbmRsZXIpIHJ0X3ByaXZhdGVfZ2V0X3N0YXRpc3RpY3MsIC8qICsgMHgwOSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MEEgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDBCICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwQyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MEQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDBFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwRiAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MTAgKi8KKwkoaXdfaGFuZGxlcikgcnRfcHJpdmF0ZV9zaG93LCAvKiArIDB4MTEgKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDEyICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgxMyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MTUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDE3ICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgxOCAqLworfTsKKworY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJ0Mjh4eF9pd19oYW5kbGVyX2RlZiA9Cit7CisjZGVmaW5lCU4oYSkJKHNpemVvZiAoYSkgLyBzaXplb2YgKGFbMF0pKQorCS5zdGFuZGFyZAk9IChpd19oYW5kbGVyICopIHJ0X2hhbmRsZXIsCisJLm51bV9zdGFuZGFyZAk9IHNpemVvZihydF9oYW5kbGVyKSAvIHNpemVvZihpd19oYW5kbGVyKSwKKwkucHJpdmF0ZQk9IChpd19oYW5kbGVyICopIHJ0X3ByaXZfaGFuZGxlcnMsCisJLm51bV9wcml2YXRlCQk9IE4ocnRfcHJpdl9oYW5kbGVycyksCisJLnByaXZhdGVfYXJncwk9IChzdHJ1Y3QgaXdfcHJpdl9hcmdzICopIHByaXZ0YWIsCisJLm51bV9wcml2YXRlX2FyZ3MJPSBOKHByaXZ0YWIpLAorI2lmIElXX0hBTkRMRVJfVkVSU0lPTiA+PSA3CisgICAgLmdldF93aXJlbGVzc19zdGF0cyA9IHJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHMsCisjZW5kaWYKK307CisKK0lOVCBSVE1QU2V0SW5mb3JtYXRpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgcEFkYXB0ZXIsCisgICAgSU4gIE9VVCBzdHJ1Y3QgaWZyZXEgICAgKnJxLAorICAgIElOICBJTlQgICAgICAgICAgICAgICAgIGNtZCkKK3sKKyAgICBzdHJ1Y3QgaXdyZXEgICAgICAgICAgICAgICAgICAgICAgICAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKSBycTsKKyAgICBORElTXzgwMl8xMV9TU0lEICAgICAgICAgICAgICAgICAgICBTc2lkOworICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTICAgICAgICAgICAgIEJzc2lkOworICAgIFJUXzgwMl8xMV9QSFlfTU9ERSAgICAgICAgICAgICAgICAgIFBoeU1vZGU7CisgICAgUlRfODAyXzExX1NUQV9DT05GSUcgICAgICAgICAgICAgICAgU3RhQ29uZmlnOworICAgIE5ESVNfODAyXzExX1JBVEVTICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzOworICAgIFJUXzgwMl8xMV9QUkVBTUJMRSAgICAgICAgICAgICAgICAgIFByZWFtYmxlOworICAgIE5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIFdlcFN0YXR1czsKKyAgICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFICAgICBBdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU1heDsKKyAgICBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICBCc3NUeXBlOworICAgIE5ESVNfODAyXzExX1JUU19USFJFU0hPTEQgICAgICAgICAgIFJ0c1RocmVzaDsKKyAgICBORElTXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCBGcmFnVGhyZXNoOworICAgIE5ESVNfODAyXzExX1BPV0VSX01PREUgICAgICAgICAgICAgIFBvd2VyTW9kZTsKKyAgICBQTkRJU184MDJfMTFfS0VZICAgICAgICAgICAgICAgICAgICBwS2V5ID0gTlVMTDsKKyAgICBQTkRJU184MDJfMTFfV0VQCQkJICAgICAgICBwV2VwS2V5ID1OVUxMOworICAgIFBORElTXzgwMl8xMV9SRU1PVkVfS0VZICAgICAgICAgICAgIHBSZW1vdmVLZXkgPSBOVUxMOworICAgIE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04gICAgICAgICAgIENvbmZpZywgKnBDb25maWcgPSBOVUxMOworICAgIE5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgICAgICAgICAgIE5ldFR5cGU7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm93OworICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleUlkeCA9IDA7CisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUywgTWF4UGh5TW9kZSA9IFBIWV8xMUc7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXJUZW1wOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhZGlvU3RhdGU7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVNYWNoaW5lVG91Y2hlZCA9IEZBTFNFOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCU9JRF9TRVRfSFRfUEhZTU9ERQkJCQkJSFRfUGh5TW9kZTsJLy8xMW4gLGthdGh5CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIFBORElTXzgwMl8xMV9QTUtJRCAgICAgICAgICAgICAgICAgIHBQbWtJZCA9IE5VTEw7CisgICAgQk9PTEVBTgkJCQkgICAgICAgICAgICAgICAgSUVFRTgwMjF4U3RhdGUgPSBGQUxTRTsKKyAgICBCT09MRUFOCQkJCSAgICAgICAgICAgICAgICBJRUVFODAyMXhfcmVxdWlyZWRfa2V5cyA9IEZBTFNFOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdwYV9zdXBwbGljYW50X2VuYWJsZSA9IDA7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgU05NUF9TVVBQT1JUCisJVFhfUlRZX0NGR19TVFJVQwkJCXR4X3J0eV9jZmc7CisJVUxPTkcJCQkJCQlTaG9ydFJldHJ5TGltaXQsIExvbmdSZXRyeUxpbWl0OworCVVDSEFSCQkJCQkJY3RtcDsKKyNlbmRpZiAvLyBTTk1QX1NVUFBPUlQgLy8KKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJTWF4UGh5TW9kZSA9IFBIWV8xMU5fNUc7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPlJUTVBTZXRJbmZvcm1hdGlvbigpLAkweCUwOHhcbiIsIGNtZCYweDdGRkYpKTsKKyAgICBzd2l0Y2goY21kICYgMHg3RkZGKSB7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9DT1VOVFJZX1JFR0lPTjoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggPCBzaXplb2YoVUNIQVIpKQorICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FSU5WQUw7CisJCQkvLyBPbmx5IGF2YWxpYWJsZSB3aGVuIEVFUFJPTSBub3QgcHJvZ3JhbW1pbmcKKyAgICAgICAgICAgIGVsc2UgaWYgKCEocEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uICYgMHg4MCkgJiYgIShwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCAmIDB4ODApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVMT05HICAgQ291bnRyeTsKKyAgICAgICAgICAgICAgICBVQ0hBUglUbXBQaHk7CisKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQ291bnRyeSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gPSAoVUNIQVIpKENvdW50cnkgJiAweDAwMDAwMEZGKTsKKwkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCA9IChVQ0hBUikoKENvdW50cnkgPj4gOCkgJiAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgICAgICBUbXBQaHkgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGU7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID0gMHhmZjsKKwkJCQkvLyBCdWlsZCBhbGwgY29ycmVzcG9uZGluZyBjaGFubmVsIGluZm9ybWF0aW9uCisJCQkJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFRtcFBoeSk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJU2V0Q29tbW9uSFQocEFkYXB0ZXIpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9DT1VOVFJZX1JFR0lPTiAoQTolZCAgQi9HOiVkKVxuIiwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQsCisJCQkJICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU46CisgI2lmZGVmIFJBTElOS19BVEUKKwkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRoZSBkcml2ZXIgaXMgaW4gQVRFIG1vZGUgbm93XG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworICAgICAgICAgICAgTm93ID0gamlmZmllczsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sIFR4Q250ID0gJWQgXG4iLCBwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuTGFzdE9uZVNlY1RvdGFsVHhDb3VudCkpOworCisgICAgICAgICAgICBpZiAoTU9OSVRPUl9PTihwQWRhcHRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIERyaXZlciBpcyBpbiBNb25pdG9yIE1vZGUgbm93ICEhIVxuIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisJCQkvL0JlbnNvbiBhZGQgMjAwODA1MjcsIHdoZW4gcmFkaW8gb2ZmLCBzdGEgZG9uJ3QgbmVlZCB0byBzY2FuCisJCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKSkKKwkJCQlicmVhazsKKworCQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKwkJCXsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgRHJpdmVyIGlzIHNjYW5uaW5nIG5vdyAhISFcbiIpKTsKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBUUlVFOworCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKwkJCWlmIChwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuTGFzdE9uZVNlY1RvdGFsVHhDb3VudCA+IDEwMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTGluayBVUCwgaWdub3JlIHRoaXMgc2V0OjpPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTlxuIikpOworCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQkJcEFkYXB0ZXItPlN0YUNmZy5TY2FuQ250ID0gOTk7CQkvLyBQcmV2ZW50IGF1dG8gc2NhbiB0cmlnZ2VyZWQgYnkgdGhpcyBPSUQKKwkJCQlicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChPUFNUQVRVU19URVNUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkgJiYKKwkJCQkoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fAorCQkJCShwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgfHwKKwkJCQkocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fAorCQkJCShwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKSAmJgorICAgICAgICAgICAgICAgIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExpbmsgVVAsIFBvcnQgTm90IFNlY3VyZWQhIGlnbm9yZSB0aGlzIHNldDo6T0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU5cbiIpKTsKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQkJCXBBZGFwdGVyLT5TdGFDZmcuU2NhbkNudCA9IDk5OwkJLy8gUHJldmVudCBhdXRvIHNjYW4gdHJpZ2dlcmVkIGJ5IHRoaXMgT0lECisJCQkJYnJlYWs7CisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0ZWxsIENOVEwgc3RhdGUgbWFjaGluZSB0byBjYWxsIE5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZSgpIGFmdGVyIGNvbXBsZXRpbmcKKyAgICAgICAgICAgIC8vIHRoaXMgcmVxdWVzdCwgYmVjYXVzZSB0aGlzIHJlcXVlc3QgaXMgaW5pdGlhdGVkIGJ5IE5ESVMuCisgICAgICAgICAgICBwQWRhcHRlci0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9IEZBTFNFOworICAgICAgICAgICAgLy8gUmVzZXQgYWxsb3dlZCBzY2FuIHJldHJpZXMKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuU2NhbkNudCA9IDA7CisgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9IE5vdzsKKworCQkJcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gVFJVRTsKKyAgICAgICAgICAgIFJUTVBfU0VUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOworICAgICAgICAgICAgTWxtZUVucXVldWUocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgICAgICAgICAgU3RhdGVNYWNoaW5lVG91Y2hlZCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1NTSUQ6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9TU0lEKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgCVBDSEFSIHBTc2lkU3RyaW5nID0gTlVMTDsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmU3NpZCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9TU0lEIChMZW49JWQsU3NpZD0lcylcbiIsIFNzaWQuU3NpZExlbmd0aCwgU3NpZC5Tc2lkKSk7CisgICAgICAgICAgICAgICAgaWYgKFNzaWQuU3NpZExlbmd0aCA+IE1BWF9MRU5fT0ZfU1NJRCkKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIAlpZiAoU3NpZC5Tc2lkTGVuZ3RoID09IDApCisgICAgICAgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgICAJCVNldF9TU0lEX1Byb2MocEFkYXB0ZXIsICIiKTsKKyAgICAgICAgICAgICAgICAJfQorCQkJCQllbHNlCisgICAgICAgICAgICAgICAgCXsKKwkgICAgICAgICAgICAgICAgCXBTc2lkU3RyaW5nID0gKENIQVIgKikga21hbGxvYyhNQVhfTEVOX09GX1NTSUQrMSwgTUVNX0FMTE9DX0ZMQUcpOworCQkJCQkJaWYgKHBTc2lkU3RyaW5nKQorCQkJCQkJeworCQkJCQkJCU5kaXNaZXJvTWVtb3J5KHBTc2lkU3RyaW5nLCBNQVhfTEVOX09GX1NTSUQrMSk7CisJCQkJCQkJTmRpc01vdmVNZW1vcnkocFNzaWRTdHJpbmcsIFNzaWQuU3NpZCwgU3NpZC5Tc2lkTGVuZ3RoKTsKKwkgICAgICAgICAgICAgICAgCQlTZXRfU1NJRF9Qcm9jKHBBZGFwdGVyLCBwU3NpZFN0cmluZyk7CisJCQkJCQkJa2ZyZWUocFNzaWRTdHJpbmcpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJCVN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0JTU0lEOgorI2lmZGVmIFJBTElOS19BVEUKKwkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRoZSBkcml2ZXIgaXMgaW4gQVRFIG1vZGUgbm93XG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfTUFDX0FERFJFU1MpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZCc3NpZCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIC8vIHRlbGwgQ05UTCBzdGF0ZSBtYWNoaW5lIHRvIGNhbGwgTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKCkgYWZ0ZXIgY29tcGxldGluZworICAgICAgICAgICAgICAgIC8vIHRoaXMgcmVxdWVzdCwgYmVjYXVzZSB0aGlzIHJlcXVlc3QgaXMgaW5pdGlhdGVkIGJ5IE5ESVMuCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBGQUxTRTsKKworCQkJCS8vIFByZXZlbnQgdG8gY29ubmVjdCBBUCBhZ2FpbiBpbiBTVEFNbG1lUGVyaW9kaWNFeGVjCisJCQkJcEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW49IDMyOworCisgICAgICAgICAgICAgICAgLy8gUmVzZXQgYWxsb3dlZCBzY2FuIHJldHJpZXMKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLlNjYW5DbnQgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSVDI4WFhfTUxNRV9SRVNFVF9TVEFURV9NQUNISU5FKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBNbG1lRW5xdWV1ZShwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfODAyXzExX0JTU0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihORElTXzgwMl8xMV9NQUNfQUREUkVTUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKikmQnNzaWQpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgU3RhdGVNYWNoaW5lVG91Y2hlZCA9IFRSVUU7CisKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQlNTSUQgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnNzaWRbMF0sIEJzc2lkWzFdLCBCc3NpZFsyXSwgQnNzaWRbM10sIEJzc2lkWzRdLCBCc3NpZFs1XSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9SQURJTzoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKEJPT0xFQU4pKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZSYWRpb1N0YXRlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9SQURJTyAoPSVkKVxuIiwgUmFkaW9TdGF0ZSkpOworICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLmJTd1JhZGlvICE9IFJhZGlvU3RhdGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLmJTd1JhZGlvID0gUmFkaW9TdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuYlJhZGlvICE9IChwQWRhcHRlci0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZGFwdGVyLT5TdGFDZmcuYlN3UmFkaW8pKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLmJSYWRpbyA9IChwQWRhcHRlci0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZGFwdGVyLT5TdGFDZmcuYlN3UmFkaW8pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWxtZVJhZGlvT24ocEFkYXB0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQkJCXBBZGFwdGVyLT5FeHRyYUluZm8gPSBFWFRSQV9JTkZPX0NMRUFSOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1sbWVSYWRpb09mZihwQWRhcHRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uCisJCQkJCQkJcEFkYXB0ZXItPkV4dHJhSW5mbyA9IFNXX1JBRElPX09GRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUEhZX01PREU6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihSVF84MDJfMTFfUEhZX01PREUpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZQaHlNb2RlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCWlmIChQaHlNb2RlIDw9IE1heFBoeU1vZGUpCisJCQkJeworICAgICAgICAgICAgICAgIAlSVE1QU2V0UGh5TW9kZShwQWRhcHRlciwgUGh5TW9kZSk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCVNldENvbW1vbkhUKHBBZGFwdGVyKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQl9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1BIWV9NT0RFICg9JWQpXG4iLCBQaHlNb2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1NUQV9DT05GSUc6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihSVF84MDJfMTFfU1RBX0NPTkZJRykpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJlN0YUNvbmZpZywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gU3RhQ29uZmlnLkVuYWJsZVR4QnVyc3Q7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPSBTdGFDb25maWcuVXNlQkdQcm90ZWN0aW9uOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUgPSAxOyAvLyAyMDAzLTEwLTMwIGFsd2F5cyBTSE9SVCBTTE9UIGNhcGFibGUKKyAgICAgICAgICAgICAgICBpZiAoKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSAhPSBTdGFDb25maWcuQWRob2NNb2RlKSAmJgorCQkJCQkoU3RhQ29uZmlnLkFkaG9jTW9kZSA8PSBNYXhQaHlNb2RlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGFsbG93IGR5bmFtaWMgY2hhbmdlIG9mICJVU0UgT0ZETSByYXRlIG9yIG5vdCIgaW4gQURIT0MgbW9kZQorICAgICAgICAgICAgICAgICAgICAvLyBpZiBzZXR0aW5nIGNoYW5nZWQsIG5lZWQgdG8gcmVzZXQgY3VycmVudCBUWCByYXRlIGFzIHdlbGwgYXMgQkVBQ09OIGZyYW1lIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSBTdGFDb25maWcuQWRob2NNb2RlOworICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBoeU1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgTWxtZVVwZGF0ZVR4UmF0ZXMocEFkYXB0ZXIsIEZBTFNFLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VJYnNzQmVhY29uKHBBZGFwdGVyKTsgICAgICAgICAgIC8vIHJlLWJ1aWxkIEJFQUNPTiBmcmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgQXNpY0VuYWJsZUlic3NTeW5jKHBBZGFwdGVyKTsgICAvLyBjb3B5IHRvIG9uLWNoaXAgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1NFVF9TVEFfQ09ORklHIChCdXJzdD0lZCwgUHJvdGVjdGlvbj0lbGQsU2hvcnRTbG90PSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfUkFURVMpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZhcnlSYXRlcywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGUsICZhcnlSYXRlcywgc2l6ZW9mKE5ESVNfODAyXzExX1JBVEVTKSk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0RFU0lSRURfUkFURVMgKCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeClcbiIsCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMV0sCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsyXSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10sCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs0XSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNV0sCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs2XSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbN10gKSk7CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgRGVzaXJlZFJhdGUgbWF5IGFmZmVjdCB0aGUgTUFYIFRYIHJhdGUgd2UgdXNlZCB0byBUWCBmcmFtZXMgb3V0CisgICAgICAgICAgICAgICAgTWxtZVVwZGF0ZVR4UmF0ZXMocEFkYXB0ZXIsIEZBTFNFLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUFJFQU1CTEU6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihSVF84MDJfMTFfUFJFQU1CTEUpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZQcmVhbWJsZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAoUHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFByZWFtYmxlID0gUHJlYW1ibGU7CisgICAgICAgICAgICAgICAgICAgIE1sbWVTZXRUeFByZWFtYmxlKHBBZGFwdGVyLCBSdDgwMl8xMVByZWFtYmxlU2hvcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoUHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZUxvbmcpIHx8IChQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlQXV0bykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBpZiB1c2VyIHdhbnRzIEFVVE8sIGluaXRpYWxpemUgdG8gTE9ORyBoZXJlLCB0aGVuIGNoYW5nZSBhY2NvcmRpbmcgdG8gQVAncworICAgICAgICAgICAgICAgICAgICAvLyBjYXBhYmlsaXR5IHVwb24gYXNzb2NpYXRpb24uCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFByZWFtYmxlOworICAgICAgICAgICAgICAgICAgICBNbG1lU2V0VHhQcmVhbWJsZShwQWRhcHRlciwgUnQ4MDJfMTFQcmVhbWJsZUxvbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1BSRUFNQkxFICg9JWQpXG4iLCBQcmVhbWJsZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9XRVBfU1RBVFVTOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfV0VQX1NUQVRVUykpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJldlcFN0YXR1cywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAvLyBTaW5jZSBUS0lQLCBBRVMsIFdFUCBhcmUgYWxsIHN1cHBvcnRlZC4gSXQgc2hvdWxkIG5vdCBoYXZlIGFueSBpbnZhbGlkIHNldHRpbmcKKyAgICAgICAgICAgICAgICBpZiAoV2VwU3RhdHVzIDw9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0tleUFic2VudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBXZXBTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbmZpZyBoYXMgY2hhbmdlZAorICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgICAgPSBXZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IFdlcFN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyICAgID0gV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIAlwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICAgPSBXZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1dFUF9TVEFUVVMgKD0lZClcbiIsV2VwU3RhdHVzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREU6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQXV0aE1vZGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKEF1dGhNb2RlID4gTmRpczgwMl8xMUF1dGhNb2RlTWF4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBBdXRoTW9kZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uZmlnIGhhcyBjaGFuZ2VkCisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+YkNvbmZpZ0NoYW5nZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBBdXRoTW9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAoPSVkKSBcbiIscEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkJzc1R5cGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkJCQlpZiAoQnNzVHlwZSA9PSBOZGlzODAyXzExSUJTUykKKwkJCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJBZGhvYyIpOworCQkJCWVsc2UgaWYgKEJzc1R5cGUgPT0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlKQorCQkJCQlTZXRfTmV0d29ya1R5cGVfUHJvYyhwQWRhcHRlciwgIkluZnJhIik7CisJCQkJZWxzZSBpZiAoQnNzVHlwZSA9PSBOZGlzODAyXzExTW9uaXRvcikKKwkJCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJNb25pdG9yIik7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJU3RhdHVzICA9IC1FSU5WQUw7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFICh1bmtub3duKVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCSBjYXNlIE9JRF84MDJfMTFfUkVNT1ZFX1dFUDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9SRU1PVkVfV0VQXG4iKSk7CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9LRVlfSU5ERVgpKQorICAgICAgICAgICAgeworCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisJCQkJS2V5SWR4ID0gKihORElTXzgwMl8xMV9LRVlfSU5ERVggKikgd3JxLT51LmRhdGEucG9pbnRlcjsKKworCQkJCWlmIChLZXlJZHggJiAweDgwMDAwMDAwKQorCQkJCXsKKwkJCQkJLy8gU2hvdWxkIG5ldmVyIHNldCBkZWZhdWx0IGJpdCB3aGVuIHJlbW92ZSBrZXkKKwkJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJS2V5SWR4ID0gS2V5SWR4ICYgMHgwZmZmZmZmZjsKKwkJCQkJaWYgKEtleUlkeCA+PSA0KXsKKwkJCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gMDsKKwkJCQkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwkJCQkJCUFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgMCwgKFVDSEFSKUtleUlkeCk7CisJCQkJCX0KKwkJCQl9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1JFU0VUX0NPVU5URVJTOgorICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMsIHNpemVvZihDT1VOVEVSXzgwMl8xMSkpOworICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5Db3VudGVyczgwMjMsIHNpemVvZihDT1VOVEVSXzgwMl8zKSk7CisgICAgICAgICAgICBOZGlzWmVyb01lbW9yeSgmcEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLCBzaXplb2YoQ09VTlRFUl9SQUxJTkspKTsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlciAgID0gMDsKKwkJCXBBZGFwdGVyLT5Db3VudGVyczgwMjMuR29vZFJlY2VpdmVzID0gMDsKKwkJCXBBZGFwdGVyLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlciAgID0gMDsKKyNpZmRlZiBSVDI4NzAKKwkJCXBBZGFwdGVyLT5CdWxrT3V0Q29tcGxldGUJPSAwOworCQkJcEFkYXB0ZXItPkJ1bGtPdXRDb21wbGV0ZU90aGVyPSAwOworCQkJcEFkYXB0ZXItPkJ1bGtPdXRDb21wbGV0ZUNhbmNlbCA9IDA7CisJCQlwQWRhcHRlci0+QnVsa091dFJlcSA9IDA7CisJCQlwQWRhcHRlci0+QnVsa0luUmVxPSAwOworCQkJcEFkYXB0ZXItPkJ1bGtJbkNvbXBsZXRlID0gMDsKKwkJCXBBZGFwdGVyLT5CdWxrSW5Db21wbGV0ZUZhaWwgPSAwOworI2VuZGlmIC8vIFJUMjg3MCAvLworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1JFU0VUX0NPVU5URVJTIFxuIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xEOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfUlRTX1RIUkVTSE9MRCkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJlJ0c1RocmVzaCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAoUnRzVGhyZXNoID4gTUFYX1JUU19USFJFU0hPTEQpCisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgPSAoVVNIT1JUKVJ0c1RocmVzaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xEICg9JWxkKVxuIixSdHNUaHJlc2gpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQ6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkZyYWdUaHJlc2gsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgaWYgKEZyYWdUaHJlc2ggPiBNQVhfRlJBR19USFJFU0hPTEQgfHwgRnJhZ1RocmVzaCA8IE1JTl9GUkFHX1RIUkVTSE9MRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChGcmFnVGhyZXNoID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSBNQVhfRlJBR19USFJFU0hPTEQ7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAoVVNIT1JUKUZyYWdUaHJlc2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQgKD0lbGQpIFxuIixGcmFnVGhyZXNoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1BPV0VSX01PREU6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9QT1dFUl9NT0RFKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZQb3dlck1vZGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKFBvd2VyTW9kZSA9PSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNKQorICAgICAgICAgICAgICAgIAlTZXRfUFNNb2RlX1Byb2MocEFkYXB0ZXIsICJDQU0iKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZU1BWF9QU1ApCisgICAgICAgICAgICAgICAgCVNldF9QU01vZGVfUHJvYyhwQWRhcHRlciwgIk1heF9QU1AiKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQKQorCQkJCQlTZXRfUFNNb2RlX1Byb2MocEFkYXB0ZXIsICJGYXN0X1BTUCIpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFBvd2VyTW9kZSA9PSBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUCkKKwkJCQkJU2V0X1BTTW9kZV9Qcm9jKHBBZGFwdGVyLCAiTGVnYWN5X1BTUCIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9QT1dFUl9NT0RFICg9JWQpXG4iLFBvd2VyTW9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUxfMToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIDwgc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZQb3dlclRlbXAsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJaWYgKFBvd2VyVGVtcCA+IDEwMCkKKwkJCQkJUG93ZXJUZW1wID0gMHhmZmZmZmZmZjsgIC8vIEFVVE8KKwkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0ID0gUG93ZXJUZW1wOyAvL2tlZXAgY3VycmVudCBzZXR0aW5nLgorCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUxfMSAoPSVsZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UpKTsKKwkJCX0KKwkgICAgICAgIGJyZWFrOworCQljYXNlIE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE5ESVNfODAyXzExX05FVFdPUktfVFlQRSkpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmTmV0VHlwZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCQkJCWlmIChOZXRUeXBlID09IE5kaXM4MDJfMTFEUykKKwkJCQkJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBIWV8xMUIpOworCQkJCWVsc2UgaWYgKE5ldFR5cGUgPT0gTmRpczgwMl8xMU9GRE0yNCkKKwkJCQkJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBIWV8xMUJHX01JWEVEKTsKKwkJCQllbHNlIGlmIChOZXRUeXBlID09IE5kaXM4MDJfMTFPRkRNNSkKKwkJCQkJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBIWV8xMUEpOworCQkJCWVsc2UKKwkJCQkJU3RhdHVzID0gLUVJTlZBTDsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJCVNldENvbW1vbkhUKHBBZGFwdGVyKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRSAoPSVkKVxuIixOZXRUeXBlKSk7CisJCSAgICB9CisJCQlicmVhazsKKyAgICAgICAgLy8gRm9yIFdQQSBQU0sgUE1LIGtleQorICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfQUREX1dQQToKKyAgICAgICAgICAgIHBLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYocEtleSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBLZXksIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBpZiAocEtleS0+TGVuZ3RoICE9IHdycS0+dS5kYXRhLmxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfQUREX1dQQSwgRmFpbGVkISFcbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSAmJgorCQkJCSAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSAmJgorCQkJCSAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX0FERF9XUEEsIEZhaWxlZCEhIFtBdXRoTW9kZSAhPSBXUEFQU0svV1BBMlBTSy9XUEFOT05FXVxuIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCQkJCQkgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgfHwKKwkJCQkJCSAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKSApICAgICAvLyBPbmx5IGZvciBXUEEgUFNLIG1vZGUKKwkJCQl7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TdGFDZmcuUE1LLCAmcEtleS0+S2V5TWF0ZXJpYWwsIHBLZXktPktleUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBSYUNvbmZpZyBhcyBQU0sgYWdlbnQuCisgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IFNUQSBzdXBwbGljYW50IHN0YXRlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19TVEFSVDsKKworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfQUREX1dQQSAoaWQ9MHgleCwgTGVuPSVkLWJ5dGUpXG4iLCBwS2V5LT5LZXlJbmRleCwgcEtleS0+S2V5TGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19OT1RVU0U7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9BRERfV1BBIChpZD0weCV4LCBMZW49JWQtYnl0ZSlcbiIsIHBLZXktPktleUluZGV4LCBwS2V5LT5LZXlMZW5ndGgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZnJlZShwS2V5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUkVNT1ZFX0tFWToKKyAgICAgICAgICAgIHBSZW1vdmVLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYocFJlbW92ZUtleSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBSZW1vdmVLZXksIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBpZiAocFJlbW92ZUtleS0+TGVuZ3RoICE9IHdycS0+dS5kYXRhLmxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUkVNT1ZFX0tFWSwgRmFpbGVkISFcbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBSVE1QV1BBUmVtb3ZlS2V5UHJvYyhwQWRhcHRlciwgcFJlbW92ZUtleSk7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9SRU1PVkVfS0VZLCBSZW1vdmUgV1BBIEtleSEhXG4iKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEtleUlkeCA9IHBSZW1vdmVLZXktPktleUluZGV4OworCisgICAgICAgICAgICAgICAgICAgIGlmIChLZXlJZHggJiAweDgwMDAwMDAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgbmV2ZXIgc2V0IGRlZmF1bHQgYml0IHdoZW4gcmVtb3ZlIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUkVNT1ZFX0tFWSwgRmFpbGVkISEoU2hvdWxkIG5ldmVyIHNldCBkZWZhdWx0IGJpdCB3aGVuIHJlbW92ZSBrZXkpXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBLZXlJZHggPSBLZXlJZHggJiAweDBmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEtleUlkeCA+IDMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1JFTU9WRV9LRVksIEZhaWxlZCEhKEtleUlkWyVkXSBvdXQgb2YgcmFuZ2UpXG4iLCBLZXlJZHgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLCAwLCAoVUNIQVIpS2V5SWR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUkVNT1ZFX0tFWSAoaWQ9MHgleCwgTGVuPSVkLWJ5dGUpXG4iLCBwUmVtb3ZlS2V5LT5LZXlJbmRleCwgcFJlbW92ZUtleS0+TGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZnJlZShwUmVtb3ZlS2V5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBOZXcgZm9yIFdQQQorICAgICAgICBjYXNlIE9JRF84MDJfMTFfQUREX0tFWToKKyAgICAgICAgICAgIHBLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYocEtleSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwS2V5LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgaWYgKHBLZXktPkxlbmd0aCAhPSB3cnEtPnUuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0FERF9LRVksIEZhaWxlZCEhXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUlRNUEFkZEtleShwQWRhcHRlciwgcEtleSk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0FERF9LRVkgKGlkPTB4JXgsIExlbj0lZC1ieXRlKVxuIiwgcEtleS0+S2V5SW5kZXgsIHBLZXktPktleUxlbmd0aCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAga2ZyZWUocEtleSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0NPTkZJR1VSQVRJT046CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQ29uZmlnLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIHBDb25maWcgPSAmQ29uZmlnOworCisgICAgICAgICAgICAgICAgaWYgKChwQ29uZmlnLT5CZWFjb25QZXJpb2QgPj0gMjApICYmIChwQ29uZmlnLT5CZWFjb25QZXJpb2QgPD00MDApKQorICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPSAoVVNIT1JUKSBwQ29uZmlnLT5CZWFjb25QZXJpb2Q7CisKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQWN0aXZlLkF0aW1XaW4gPSAoVVNIT1JUKSBwQ29uZmlnLT5BVElNV2luZG93OworICAgICAgICAgICAgICAgIE1BUF9LSFpfVE9fQ0hBTk5FTF9JRChwQ29uZmlnLT5EU0NvbmZpZywgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsKTsKKyAgICAgICAgICAgICAgICAvLworCQkJCS8vIFNhdmUgdGhlIGNoYW5uZWwgb24gTWxtZUF1eCBmb3IgQ250bE9pZFJUQnNzaWRQcm9jIHVzZWQuCisJCQkJLy8KKwkJCQlwQWRhcHRlci0+TWxtZUF1eC5DaGFubmVsID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsOworCisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0NPTkZJR1VSQVRJT04gKEJlYWNuUGVyaW9kPSVsZCxBdGltVz0lbGQsQ2g9JWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBwQ29uZmlnLT5CZWFjb25QZXJpb2QsIHBDb25maWctPkFUSU1XaW5kb3csIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworICAgICAgICAgICAgICAgIC8vIENvbmZpZyBoYXMgY2hhbmdlZAorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9IVF9QSFlNT0RFOgorCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aAkhPSBzaXplb2YoT0lEX1NFVF9IVF9QSFlNT0RFKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJICAgIFBPSURfU0VUX0hUX1BIWU1PREUJcEhUUGh5TW9kZSA9ICZIVF9QaHlNb2RlOworCisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkhUX1BoeU1vZGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpwSFRQaHlNb2RlCShQaHlNb2RlID0gJWQsVHJhbnNtaXRObyA9ICVkLCBIdE1vZGUgPQklZCwJRXh0T2Zmc2V0ID0JJWQgLCBNQ1MgPSAlZCwgQlcgPQklZCwJU1RCQyA9ICVkLCBTSE9SVEdJID0gJWQpIFxuIiwKKwkJCQlwSFRQaHlNb2RlLT5QaHlNb2RlLCBwSFRQaHlNb2RlLT5UcmFuc21pdE5vLHBIVFBoeU1vZGUtPkh0TW9kZSxwSFRQaHlNb2RlLT5FeHRPZmZzZXQsCisJCQkJcEhUUGh5TW9kZS0+TUNTLCBwSFRQaHlNb2RlLT5CVywgcEhUUGh5TW9kZS0+U1RCQywJcEhUUGh5TW9kZS0+U0hPUlRHSSkpOworCQkJCWlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUJPj0gUEhZXzExQUJHTl9NSVhFRCkKKwkJCQkJUlRNUFNldEhUKHBBZGFwdGVyLAlwSFRQaHlNb2RlKTsKKwkJCX0KKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9TRVRfSFRfUEhZTU9ERShNQ1M9JWQsQlc9JWQsU0dJPSVkLFNUQkM9JWQpXG4iLAorCQkJCXBBZGFwdGVyLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUywgcEFkYXB0ZXItPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuQlcsIHBBZGFwdGVyLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0ksCisJCQkJcEFkYXB0ZXItPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU1RCQykpOworCQkJYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9TRVRUSU5HOgorCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoVUxPTkcpKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJVUxPTkcgYXBzZCA7CisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJmFwc2QsIHdycS0+dS5kYXRhLnBvaW50ZXIsCXdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQl8QjMxfkI3CXwJQjZ+QjUJIHwJIEI0CSB8CSBCMwkgfAlCMgkgfAlCMQkgfAkgICBCMAkJfAorCQkJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCXwgUnN2ZAl8IE1heCBTUCBMZW4gfCBBQ19WTyB8IEFDX1ZJIHwgQUNfQksgfCBBQ19CRSB8IEFQU0QJQ2FwYWJsZQl8CisJCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSA9IChhcHNkICYgMHgwMDAwMDAwMSkgPyBUUlVFIDoJRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JFID0gKChhcHNkCSYgMHgwMDAwMDAwMikgPj4gMSkJPyBUUlVFIDogRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JLID0gKChhcHNkCSYgMHgwMDAwMDAwNCkgPj4gMikJPyBUUlVFIDogRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX1ZJID0gKChhcHNkCSYgMHgwMDAwMDAwOCkgPj4gMykJPyBUUlVFIDogRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX1ZPID0gKChhcHNkCSYgMHgwMDAwMDAxMCkgPj4gNCkJPyBUUlVFIDogRkFMU0U7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5NYXhTUExlbmd0aAk9IChVQ0hBUikoKGFwc2QJJiAweDAwMDAwMDYwKSA+PiA1KTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9TRVRUSU5HIChhcHNkPTB4JWx4LCBBUFNEQ2FwPSVkLCBbQkUsQkssVkksVk9dPVslZC8lZC8lZC8lZF0sCU1heFNQTGVuPSVkKVxuIiwgYXBzZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTRENhcGFibGUsCisJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CRSwJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JLLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkksCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WTywJcEFkYXB0ZXItPkNvbW1vbkNmZy5NYXhTUExlbmd0aCkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9BUFNEX1BTTToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGgJIT0gc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCS8vIERyaXZlciBuZWVkcwl0byBub3RpZnkgQVAgd2hlbiBQU00gY2hhbmdlcworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZQkhPSBwQWRhcHRlci0+U3RhQ2ZnLlBzbSkKKwkJCQl7CisJCQkJCU1sbWVTZXRQc21CaXQocEFkYXB0ZXIsCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSk7CisJCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZGFwdGVyLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UmF0ZSwJVFJVRSk7CisJCQkJfQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9QU00gKGJBUFNERm9yY2VQb3dlclNhdmU6JWQpXG4iLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpKTsKKwkJCX0KKwkJCWJyZWFrOworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQljYXNlIFJUX09JRF84MDJfMTFfU0VUX0RMUzoKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCUJPT0xFQU4Jb2xkdmFsdWUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlOworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZwQWRhcHRlci0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCWlmIChvbGR2YWx1ZSAmJgkhcEFkYXB0ZXItPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJCQl7CisJCQkJCWludAlpOworCQkJCQkvLyB0ZWFyCWRvd24gbG9jYWwgZGxzIHRhYmxlIGVudHJ5CisJCQkJCWZvcgkoaT0wOyBpPE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwkJCQkJeworCQkJCQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJCQkJeworCQkJCQkJCXBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQkJCQkJcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWRhcHRlciwgcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCS8vIHRlYXIJZG93biBwZWVyIGRscyB0YWJsZQllbnRyeQorCQkJCQlmb3IJKGk9TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQkJCQl7CisJCQkJCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkpCisJCQkJCQl7CisJCQkJCQkJcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQkJCQlwQWRhcHRlci0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZGFwdGVyLCBwQWRhcHRlci0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZXQ6OlJUX09JRF84MDJfMTFfU0VUX0RMUyAoPSVkKVxuIiwgcEFkYXB0ZXItPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9ETFNfUEFSQU06CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoCSE9IHNpemVvZihSVF84MDJfMTFfRExTX1VJKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVJUXzgwMl8xMV9ETFMJRGxzOworCisJCQkJTmRpc1plcm9NZW1vcnkoJkRscywgc2l6ZW9mKFJUXzgwMl8xMV9ETFMpKTsKKwkJCQlSVE1QTW92ZU1lbW9yeSgmRGxzLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YoUlRfODAyXzExX0RMU19VSSkpOworCQkJCU1sbWVFbnF1ZXVlKHBBZGFwdGVyLAorCQkJCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCQkJCVJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTSwKKwkJCQkJCQlzaXplb2YoUlRfODAyXzExX0RMUyksCisJCQkJCQkJJkRscyk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTZXQ6OlJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTSBcbiIpKTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQljYXNlIFJUX09JRF84MDJfMTFfU0VUX1dNTToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGgJIT0gc2l6ZW9mKEJPT0xFQU4pKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJnBBZGFwdGVyLT5Db21tb25DZmcuYldtbUNhcGFibGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1NFVF9XTU0gKD0lZCkJXG4iLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlKSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFOgorI2lmZGVmIFJBTElOS19BVEUKKwkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRoZSBkcml2ZXIgaXMgaW4gQVRFIG1vZGUgbm93XG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJLy8KKwkJCS8vIFNldCBOZGlzUmFkaW9TdGF0ZU9mZiB0bwlUUlVFLCBpbnN0ZWFkIG9mIGNhbGxlZAlNbG1lUmFkaW9PZmYuCisJCQkvLyBMYXRlciBvbiwgTkRJU184MDJfMTFfQlNTSURfTElTVF9FWC0+TnVtYmVyT2ZJdGVtcyBzaG91bGQgYmUJMAorCQkJLy8gd2hlbglxdWVyeSBPSURfODAyXzExX0JTU0lEX0xJU1QuCisJCQkvLworCQkJLy8gVFJVRTogIE51bWJlck9mSXRlbXMJd2lsbCBzZXQgdG8JMC4KKwkJCS8vIEZBTFNFOiBOdW1iZXJPZkl0ZW1zCW5vIGNoYW5nZS4KKwkJCS8vCisJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLk5kaXNSYWRpb1N0YXRlT2ZmID0JVFJVRTsKKwkJCS8vIFNldCB0byBpbW1lZGlhdGVseSBzZW5kIHRoZSBtZWRpYSBkaXNjb25uZWN0CWV2ZW50CisJCQlwQWRhcHRlci0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcwk9IFRSVUU7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfRElTQVNTT0NJQVRFCVxuIikpOworCisJCQlpZiAoSU5GUkFfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCWlmIChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0JQ05UTF9JRExFKQorCQkJCXsKKwkJCQkJUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNTE1FCWJ1c3ksIHJlc2V0CU1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKwkJCQl9CisKKwkJCQlNbG1lRW5xdWV1ZShwQWRhcHRlciwKKwkJCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQkJCU9JRF84MDJfMTFfRElTQVNTT0NJQVRFLAorCQkJCQkwLAorCQkJCQlOVUxMKTsKKworCQkJCVN0YXRlTWFjaGluZVRvdWNoZWQJPSBUUlVFOworCQkJfQorCQkJYnJlYWs7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9JTU1FX0JBX0NBUDoKKwkJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihPSURfQkFDQVBfU1RSVUMpKQorCQkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCU9JRF9CQUNBUF9TVFJVQyBPcmRlIDsKKwkJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJk9yZGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJCWlmIChPcmRlLlBvbGljeSA+IEJBX05PVFVTRSkKKwkJCQkJeworCQkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKE9yZGUuUG9saWN5ID09IEJBX05PVFVTRSkKKwkJCQkJeworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gQkFfTk9UVVNFOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkgPSBPcmRlLk1wZHVEZW5zaXR5OworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHkgPSBPcmRlLk1wZHVEZW5zaXR5OworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUgPSBPcmRlLkFtc2R1RW5hYmxlOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplPSBPcmRlLkFtc2R1U2l6ZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9Qcz0gT3JkZS5NTVBTbW9kZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gT3JkZS5NTVBTbW9kZTsKKwkJCQkJCS8vIFVQZGF0YSB0byBIVCBJRQorCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QcyA9IE9yZGUuTU1QU21vZGU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplID0gT3JkZS5BbXNkdVNpemU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHkgPSBPcmRlLk1wZHVEZW5zaXR5OworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gT3JkZS5BdXRvQkE7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBJTU1FRF9CQTsgLy8gd2Ugb25seSBzdXBwb3J0IGltbWVkaWF0ZSBCQS4KKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1RW5hYmxlID0gT3JkZS5BbXNkdUVuYWJsZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZT0gT3JkZS5BbXNkdVNpemU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NaW1vUHMgPSBPcmRlLk1NUFNtb2RlOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUgPSBPcmRlLk1NUFNtb2RlOworCisJCQkJCQkvLyBVUGRhdGEgdG8gSFQgSUUKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHMgPSBPcmRlLk1NUFNtb2RlOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZSA9IE9yZGUuQW1zZHVTaXplOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKworCQkJCQkJaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA+IE1BWF9SWF9SRU9SREVSQlVGKQorCQkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IE1BWF9SWF9SRU9SREVSQlVGOworCisJCQkJCX0KKworCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS53b3JkID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkud29yZDsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjooT3JkZS5BdXRvQkEgPSAlZCkgKFBvbGljeT0lZCkoUmVCQVdpbkxpbWl0PSVkKShUeEJBV2luTGltaXQ9JWQpKEF1dG9Nb2RlPSVkKVxuIixPcmRlLkF1dG9CQSwgcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5LAorCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0LHBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlR4QkFXaW5MaW1pdCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBKSk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6KE1pbW9QcyA9ICVkKShBbXNkdUVuYWJsZSA9ICVkKSAoQW1zZHVTaXplPSVkKShNcGR1RGVuc2l0eT0lZClcbiIscEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWltb1BzLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdUVuYWJsZSwKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZSwgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHkpKTsKKwkJCQl9CisKKwkJCQlicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX0FERF9JTU1FX0JBOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIFNldCA6OiBSVF9PSURfODAyXzExX0FERF9JTU1FX0JBIFxuIikpOworCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoT0lEX0FERF9CQV9FTlRSWSkpCisJCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJVUNIQVIJCSAgICAgICAgaW5kZXg7CisJCQkJT0lEX0FERF9CQV9FTlRSWSAgICBCQTsKKwkJCQlNQUNfVEFCTEVfRU5UUlkgICAgICpwRW50cnk7CisKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQkEsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJaWYgKEJBLlRJRCA+IDE1KQorCQkJCXsKKwkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy9CQVRhYmxlSW5zZXJ0RW50cnkKKwkJCQkJLy9BcyBhZC1ob2MgbW9kZSwgQkEgcGFpciBpcyBub3QgbGltaXRlZCB0byBvbmx5IEJTU0lELiBzbyBhZGQgdmlhIE9JRC4KKwkJCQkJaW5kZXggPSBCQS5USUQ7CisJCQkJCS8vIGluIGFkIGhvYyBtb2RlLCB3aGVuIGFkZGluZyBCQSBwYWlyLCB3ZSBzaG91bGQgaW5zZXJ0IHRoaXMgZW50cnkgaW50byBNQUNFbnRyeSB0b28KKwkJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkYXB0ZXIsIEJBLk1BQ0FkZHIpOworCQkJCQlpZiAoIXBFbnRyeSkKKwkJCQkJeworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRfT0lEXzgwMl8xMV9BRERfSU1NRV9CQS4gYnJlYWsgb24gbm8gY29ubmVjdGlvbi4tLS0tOiV4OiV4XG4iLCBCQS5NQUNBZGRyWzRdLCBCQS5NQUNBZGRyWzVdKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoQkEuSXNSZWNpcGllbnQgPT0gRkFMU0UpCisJCQkJCXsKKwkJCQkJICAgIGlmIChwRW50cnktPmJJQW1CYWRBdGhlcm9zID09IFRSVUUpCisJCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gMHgxMDsKKworCQkJCQkJQkFPcmlTZXNzaW9uU2V0VXAocEFkYXB0ZXIsIHBFbnRyeSwgaW5kZXgsIDAsIDEwMCwgVFJVRSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvL0JBVGFibGVJbnNlcnRFbnRyeShwQWRhcHRlciwgcEVudHJ5LT5BaWQsIEJBLk1BQ0FkZHIsIDAsIDB4ZmZmZiwgQkEuVElELCBCQS5uTVNEVSwgQkEuSXNSZWNpcGllbnQpOworCQkJCQl9CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX0FERF9JTU1FX0JBLiBSZWMgPSAlZC4gTWFjID0gJXg6JXg6JXg6JXg6JXg6JXggLiBcbiIsCisJCQkJCQlCQS5Jc1JlY2lwaWVudCwgQkEuTUFDQWRkclswXSwgQkEuTUFDQWRkclsxXSwgQkEuTUFDQWRkclsyXSwgQkEuTUFDQWRkclsyXQorCQkJCQkJLCBCQS5NQUNBZGRyWzRdLCBCQS5NQUNBZGRyWzVdKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1RFQVJfSU1NRV9CQToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldCA6OiBSVF9PSURfODAyXzExX1RFQVJfSU1NRV9CQSBcbiIpKTsKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE9JRF9BRERfQkFfRU5UUlkpKQorCQkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVBPSURfQUREX0JBX0VOVFJZCXBCQTsKKwkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKworCQkJCXBCQSA9IGttYWxsb2Mod3JxLT51LmRhdGEubGVuZ3RoLCBNRU1fQUxMT0NfRkxBRyk7CisKKwkJCQlpZiAocEJBID09IE5VTEwpCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgOjogUlRfT0lEXzgwMl8xMV9URUFSX0lNTUVfQkEga21hbGxvYygpIGNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnlcbiIpKTsKKwkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIocEJBLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgOjogUlRfT0lEXzgwMl8xMV9URUFSX0lNTUVfQkEoVElEPSVkLCBiQWxsVGlkPSVkKVxuIiwgcEJBLT5USUQsIHBCQS0+YkFsbFRpZCkpOworCisJCQkJCWlmICghcEJBLT5iQWxsVGlkICYmIChwQkEtPlRJRCA+IE5VTV9PRl9USUQpKQorCQkJCQl7CisJCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19JTlZBTElEX0RBVEE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCWlmIChwQkEtPklzUmVjaXBpZW50ID09IEZBTFNFKQorCQkJCQl7CisJCQkJCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWRhcHRlciwgcEJBLT5NQUNBZGRyKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBwQkEtPklzUmVjaXBpZW50ID09IEZBTFNFXG4iKSk7CisJCQkJCQlpZiAocEVudHJ5KQorCQkJCQkJeworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBwQkEtPnBFbnRyeVxuIikpOworCQkJCQkJCUJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZGFwdGVyLCBwRW50cnktPkFpZCwgcEJBLT5USUQsIEZBTFNFLCBUUlVFKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgOjogTm90IGZvdW5kIHBFbnRyeSBcbiIpKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZGFwdGVyLCBwQkEtPk1BQ0FkZHIpOworCQkJCQkJaWYgKHBFbnRyeSkKKwkJCQkJCXsKKwkJCQkJCQlCQVJlY1Nlc3Npb25UZWFyRG93biggcEFkYXB0ZXIsIChVQ0hBUilwRW50cnktPkFpZCwgcEJBLT5USUQsIFRSVUUpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldCA6OiBOb3QgZm91bmQgcEVudHJ5IFxuIikpOworCQkJCQl9CisJCQkJCWtmcmVlKHBCQSk7CisJCQkJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyAgICAgICAgLy8gRm9yIFdQQV9TVVBQTElDQU5UIHRvIHNldCBzdGF0aWMgd2VwIGtleQorICAgIAljYXNlIE9JRF84MDJfMTFfQUREX1dFUDoKKyAgICAJICAgIHBXZXBLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworCisgICAgCSAgICBpZihwV2VwS2V5ID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVOT01FTTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQUREX1dFUCwgRmFpbGVkISFcbiIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBXZXBLZXksIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBpZiAoU3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9BRERfV0VQLCBGYWlsZWQgKGxlbmd0aCBtaXNtYXRjaCkhIVxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworCQkgICAgICAgIEtleUlkeCA9IHBXZXBLZXktPktleUluZGV4ICYgMHgwZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAvLyBLZXlJZHggbXVzdCBiZSAwIH4gMworICAgICAgICAgICAgICAgIGlmIChLZXlJZHggPiA0KQorICAgIAkJCXsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9BRERfV0VQLCBGYWlsZWQgKEtleUlkeCBtdXN0IGJlIHNtYWxsZXIgdGhhbiA0KSEhXG4iKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVDSEFSIENpcGhlckFsZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIFBVQ0hBUiBLZXk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGtleSBtYXRlcmlhbCBhbmQga2V5IGxlbmd0aAorICAgICAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5LCAxNik7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXlMZW4gPSAoVUNIQVIpIHBXZXBLZXktPktleUxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleSwgJnBXZXBLZXktPktleU1hdGVyaWFsLCBwV2VwS2V5LT5LZXlMZW5ndGgpOworCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChwV2VwS2V5LT5LZXlMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9BRERfV0VQLCBvbmx5IHN1cHBvcnQgQ0lQSEVSX1dFUDY0KGxlbjo1KSAmIENJUEhFUl9XRVAxMjgobGVuOjEzKSEhXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCisgICAgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQga2V5IGZvciB0eCAoc2hhcmVkIGtleSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBXZXBLZXktPktleUluZGV4ICYgMHg4MDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgeworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBrZXkgbWF0ZXJpYWwgYW5kIGtleSBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W0tleUlkeF0uS2V5LCAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtLZXlJZHhdLktleUxlbiA9IChVQ0hBUikgcFdlcEtleS0+S2V5TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbS2V5SWR4XS5LZXksICZwV2VwS2V5LT5LZXlNYXRlcmlhbCwgcFdlcEtleS0+S2V5TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5SWQgPSBLZXlJZHg7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtLZXlJZHhdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgS2V5SWR4OworICAgICAgICAgICAgICAgICAgICB9CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgS2V5ID0gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMKKyAgICAgICAgCQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgQlNTMCwgS2V5SWR4LCBDaXBoZXJBbGcsIEtleSwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwV2VwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1BQ19UQUJMRV9FTlRSWSBwRW50cnkgPSAmcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiBncm91cCBrZXkgaW5mbworICAgIAkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkYXB0ZXIsIEJTUzAsIEtleUlkeCwgQ2lwaGVyQWxnLCBOVUxMKTsKKyAgICAJCQkJCQkvLyBBc3NpZ24gcGFpcndpc2Uga2V5IGluZm8KKyAgICAJCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBLZXlJZHgsIENpcGhlckFsZywgcEVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQUREX1dFUCAoaWQ9MHgleCwgTGVuPSVkLWJ5dGUpLCAlc1xuIiwgcFdlcEtleS0+S2V5SW5kZXgsIHBXZXBLZXktPktleUxlbmd0aCwgKHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpID8gIlBvcnQgU2VjdXJlZCI6IlBvcnQgTk9UIFNlY3VyZWQiKSk7CisJCQkJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAga2ZyZWUocFdlcEtleSk7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJICAgIGNhc2UgT0lEX1NFVF9DT1VOVEVSTUVBU1VSRVM6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihpbnQpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBlbmFibGVkID0gMDsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmZW5hYmxlZCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLmJCbG9ja0Fzc29jID0gVFJVRTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIFdQQSBNSUMgZXJyb3Igc2hvdWxkIGJsb2NrIGFzc29jaWF0aW9uIGF0dGVtcHQgZm9yIDYwIHNlY29uZHMKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iQmxvY2tBc3NvYyA9IEZBTFNFOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEX1NFVF9DT1VOVEVSTUVBU1VSRVMgYkJsb2NrQXNzb2M9JXNcbiIsIHBBZGFwdGVyLT5TdGFDZmcuYkJsb2NrQXNzb2MgPyAiVFJVRSI6IkZBTFNFIikpOworICAgICAgICAgICAgfQorCSAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQ6CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihVQ0hBUikpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJndwYV9zdXBwbGljYW50X2VuYWJsZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAJCQlwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IHdwYV9zdXBwbGljYW50X2VuYWJsZTsKKyAgICAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUICg9JWQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCkpOworCQkJfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9ERUFVVEhFTlRJQ0FUSU9OOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCAgICAgICpwSW5mbzsKKwkJCQlNTE1FX1FVRVVFX0VMRU0gKk1zZ0VsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKworICAgICAgICAgICAgICAgIHBJbmZvID0gKE1MTUVfREVBVVRIX1JFUV9TVFJVQ1QgKikgTXNnRWxlbS0+TXNnOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBJbmZvLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIE1sbWVEZWF1dGhSZXFBY3Rpb24ocEFkYXB0ZXIsIE1zZ0VsZW0pOworCQkJCWtmcmVlKE1zZ0VsZW0pOworCisgICAgICAgICAgICAgICAgaWYgKElORlJBX09OKHBBZGFwdGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfREVBVVRIRU5USUNBVElPTiAoUmVhc29uPSVkKVxuIiwgcEluZm8tPlJlYXNvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9EUk9QX1VORU5DUllQVEVEOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoaW50KSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgZW5hYmxlZCA9IDA7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJmVuYWJsZWQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWRhcHRlci0+TWFjVGFiTG9jayk7CisJCQkJcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlBvcnRTZWN1cmVkID0gcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZDsKKwkJCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWRhcHRlci0+TWFjVGFiTG9jayk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0RST1BfVU5FTkNSWVBURUQgKD0lZClcbiIsIGVuYWJsZWQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfU0VUX0lFRUU4MDIxWDoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKEJPT0xFQU4pKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZJRUVFODAyMXhTdGF0ZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxWCA9IElFRUU4MDIxeFN0YXRlOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9TRVRfSUVFRTgwMjFYICg9JWQpXG4iLCBJRUVFODAyMXhTdGF0ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9TRVRfSUVFRTgwMjFYX1JFUVVJUkVfS0VZOgorCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoQk9PTEVBTikpCisJCQkJIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZJRUVFODAyMXhfcmVxdWlyZWRfa2V5cywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxeF9yZXF1aXJlZF9rZXlzID0gSUVFRTgwMjF4X3JlcXVpcmVkX2tleXM7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1NFVF9JRUVFODAyMVhfUkVRVUlSRV9LRVkgKCVkKVxuIiwgSUVFRTgwMjF4X3JlcXVpcmVkX2tleXMpKTsKKwkJCX0KKwkJCWJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUE1LSUQ6CisJICAgICAgICBwUG1rSWQgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworCisJICAgICAgICBpZihwUG1rSWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwUG1rSWQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkgICAgICAgIC8vIGNoZWNrIHRoZSBQTUtJRCBpbmZvcm1hdGlvbgorCSAgICAgICAgaWYgKHBQbWtJZC0+QlNTSURJbmZvQ291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LLCBzaXplb2YoQlNTSURfSU5GTykqUE1LSURfTk8pOworCSAgICAgICAgZWxzZQorCSAgICAgICAgeworCQkgICAgICAgIFBCU1NJRF9JTkZPCXBCc3NJZEluZm87CisJCSAgICAgICAgVUlOVAkJQnNzSWR4OworCQkgICAgICAgIFVJTlQJCUNhY2hlZElkeDsKKworCQkgICAgICAgIGZvciAoQnNzSWR4ID0gMDsgQnNzSWR4IDwgcFBta0lkLT5CU1NJREluZm9Db3VudDsgQnNzSWR4KyspCisJCSAgICAgICAgeworCQkJICAgICAgICAvLyBwb2ludCB0byB0aGUgaW5kZXhlZCBCU1NJRF9JTkZPIHN0cnVjdHVyZQorCQkJICAgICAgICBwQnNzSWRJbmZvID0gKFBCU1NJRF9JTkZPKSAoKFBVQ0hBUikgcFBta0lkICsgMiAqIHNpemVvZihVSU5UKSArIEJzc0lkeCAqIHNpemVvZihCU1NJRF9JTkZPKSk7CisJCQkgICAgICAgIC8vIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBzYXZlZCBkYXRhIGJhc2UuCisJCQkgICAgICAgIGZvciAoQ2FjaGVkSWR4ID0gMDsgQ2FjaGVkSWR4IDwgcEFkYXB0ZXItPlN0YUNmZy5TYXZlZFBNS051bTsgQ2FjaGVkSWR4KyspCisJCQkgICAgICAgIHsKKwkJCQkgICAgICAgIC8vIGNvbXBhcmUgdGhlIEJTU0lECisJCQkJICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBCc3NJZEluZm8tPkJTU0lELCBwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSUQsIHNpemVvZihORElTXzgwMl8xMV9NQUNfQUREUkVTUykpKQorCQkJCQkgICAgICAgIGJyZWFrOworCQkJICAgICAgICB9CisKKwkJCSAgICAgICAgLy8gRm91bmQsIHJlcGxhY2UgaXQKKwkJCSAgICAgICAgaWYgKENhY2hlZElkeCA8IFBNS0lEX05PKQorCQkJICAgICAgICB7CisJCQkJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19PRkYsICgiVXBkYXRlIE9JRF84MDJfMTFfUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKKwkJCQkgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0sIHBCc3NJZEluZm8sIHNpemVvZihCU1NJRF9JTkZPKSk7CisJCQkJICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LTnVtKys7CisJCQkgICAgICAgIH0KKwkJCSAgICAgICAgLy8gTm90IGZvdW5kLCByZXBsYWNlIHRoZSBsYXN0IG9uZQorCQkJICAgICAgICBlbHNlCisJCQkgICAgICAgIHsKKwkJCQkgICAgICAgIC8vIFJhbmRvbWx5IHJlcGxhY2Ugb25lCisJCQkJICAgICAgICBDYWNoZWRJZHggPSAocEJzc0lkSW5mby0+QlNTSURbNV0gJSBQTUtJRF9OTyk7CisJCQkJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19PRkYsICgiVXBkYXRlIE9JRF84MDJfMTFfUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKKwkJCQkgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0sIHBCc3NJZEluZm8sIHNpemVvZihCU1NJRF9JTkZPKSk7CisJCQkgICAgICAgIH0KKwkJICAgICAgICB9CisJCQl9CisJCQlpZihwUG1rSWQpCisJCQkJa2ZyZWUocFBta0lkKTsKKwkgICAgICAgIGJyZWFrOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCisKKyNpZmRlZiBTTk1QX1NVUFBPUlQKKwkJY2FzZSBPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVDoKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZTaG9ydFJldHJ5TGltaXQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsICZ0eF9ydHlfY2ZnLndvcmQpOworCQkJCXR4X3J0eV9jZmcuZmllbGQuU2hvcnRSdHlMaW1pdCA9IFNob3J0UmV0cnlMaW1pdDsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsIHR4X3J0eV9jZmcud29yZCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVCAodHhfcnR5X2NmZy5maWVsZC5TaG9ydFJldHJ5TGltaXQ9JWQsIFNob3J0UmV0cnlMaW1pdD0lbGQpXG4iLCB0eF9ydHlfY2ZnLmZpZWxkLlNob3J0UnR5TGltaXQsIFNob3J0UmV0cnlMaW1pdCkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX0xPTkdSRVRSWUxJTUlUOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0xPTkdSRVRSWUxJTUlUIFxuIikpOworCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoVUxPTkcpKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkxvbmdSZXRyeUxpbWl0LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCAmdHhfcnR5X2NmZy53b3JkKTsKKwkJCQl0eF9ydHlfY2ZnLmZpZWxkLkxvbmdSdHlMaW1pdCA9IExvbmdSZXRyeUxpbWl0OworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgVFhfUlRZX0NGRywgdHhfcnR5X2NmZy53b3JkKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfTE9OR1JFVFJZTElNSVQgKHR4X3J0eV9jZmcuZmllbGQuTG9uZ1JldHJ5TGltaXQ9ICVkLExvbmdSZXRyeUxpbWl0PSVsZClcbiIsIHR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0LCBMb25nUmV0cnlMaW1pdCkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZVkFMVUVcbiIpKTsKKwkJCXBLZXkgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwS2V5LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJLy9wS2V5ID0gJldlcEtleTsKKworCQkJaWYgKCBwS2V5LT5MZW5ndGggIT0gd3JxLT51LmRhdGEubGVuZ3RoKQorCQkJeworCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRSwgRmFpbGVkISFcbiIpKTsKKwkJCX0KKwkJCUtleUlkeCA9IHBLZXktPktleUluZGV4ICYgMHgwZmZmZmZmZjsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgicEtleS0+S2V5SW5kZXggPSVkLCBwS2V5LT5LZXlMZW5ndGg9JWRcbiIsIHBLZXktPktleUluZGV4LCBwS2V5LT5LZXlMZW5ndGgpKTsKKworCQkJLy8gaXQgaXMgYSBzaGFyZWQga2V5CisJCQlpZiAoS2V5SWR4ID4gNCkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleUxlbiA9IChVQ0hBUikgcEtleS0+S2V5TGVuZ3RoOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksICZwS2V5LT5LZXlNYXRlcmlhbCwgcEtleS0+S2V5TGVuZ3RoKTsKKwkJCQlpZiAocEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKQorCQkJCXsKKwkJCQkJLy8gRGVmYXVsdCBrZXkgZm9yIHR4IChzaGFyZWQga2V5KQorCQkJCQlwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgS2V5SWR4OworCQkJCX0KKwkJCQkvL1Jlc3RhcnRBUElzUmVxdWlyZWQgPSBUUlVFOworCQkJfQorCQkJYnJlYWs7CisKKworCQljYXNlIE9JRF84MDJfMTFfV0VQREVGQVVMVEtFWUlEOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1dFUERFRkFVTFRLRVlJRCBcbiIpKTsKKworCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoVUNIQVIpKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJnBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCisJCQlicmVhazsKKworCisJCWNhc2UgT0lEXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTCBcbiIpKTsKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVDSEFSKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZjdG1wLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCXNwcmludGYoJmN0bXAsIiVkIiwgY3RtcCk7CisJCQkJU2V0X0NoYW5uZWxfUHJvYyhwQWRhcHRlciwgJmN0bXApOworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYKKworCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6dW5rbm93biBJT0NUTCdzIHN1YmNtZCA9IDB4JTA4eFxuIiwgY21kKSk7CisgICAgICAgICAgICBTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworSU5UIFJUTVBRdWVyeUluZm9ybWF0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSIHBBZGFwdGVyLAorICAgIElOICBPVVQgc3RydWN0IGlmcmVxICAgICpycSwKKyAgICBJTiAgSU5UICAgICAgICAgICAgICAgICBjbWQpCit7CisgICAgc3RydWN0IGl3cmVxICAgICAgICAgICAgICAgICAgICAgICAgKndycSA9IChzdHJ1Y3QgaXdyZXEgKikgcnE7CisgICAgTkRJU184MDJfMTFfQlNTSURfTElTVF9FWCAgICAgICAgICAgKnBCc3NpZExpc3QgPSBOVUxMOworICAgIFBORElTX1dMQU5fQlNTSURfRVggICAgICAgICAgICAgICAgIHBCc3M7CisgICAgTkRJU184MDJfMTFfU1NJRCAgICAgICAgICAgICAgICAgICAgU3NpZDsKKyAgICBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OICAgICAgICAgICAqcENvbmZpZ3VyYXRpb24gPSBOVUxMOworICAgIFJUXzgwMl8xMV9MSU5LX1NUQVRVUyAgICAgICAgICAgICAgICpwTGlua1N0YXR1cyA9IE5VTEw7CisgICAgUlRfODAyXzExX1NUQV9DT05GSUcgICAgICAgICAgICAgICAgKnBTdGFDb25maWcgPSBOVUxMOworICAgIE5ESVNfODAyXzExX1NUQVRJU1RJQ1MgICAgICAgICAgICAgICpwU3RhdGlzdGljcyA9IE5VTEw7CisgICAgTkRJU184MDJfMTFfUlRTX1RIUkVTSE9MRCAgICAgICAgICAgUnRzVGhyZXNoOworICAgIE5ESVNfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEIEZyYWdUaHJlc2g7CisgICAgTkRJU184MDJfMTFfUE9XRVJfTU9ERSAgICAgICAgICAgICAgUG93ZXJNb2RlOworICAgIE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgIEJzc1R5cGU7CisgICAgUlRfODAyXzExX1BSRUFNQkxFICAgICAgICAgICAgICAgICAgUHJlYW1UeXBlOworICAgIE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgICAgIEF1dGhNb2RlOworICAgIE5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIFdlcFN0YXR1czsKKyAgICBORElTX01FRElBX1NUQVRFICAgICAgICAgICAgICAgICAgICBNZWRpYVN0YXRlOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJzc0J1ZlNpemUsIHVsSW5mbz0wLCBOZXR3b3JrVHlwZUxpc3RbNF0sIGFwc2QgPSAwOworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJzc0xlbiA9IDA7CisgICAgUFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1ZiA9IE5VTEwsIHBQdHI7CisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZV92ZXJzaW9uX2NvbXBpbGVkOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIFBhZGRpbmcgPSAwOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhZGlvU3RhdGU7CisJVUNIQVIJZHJpdmVyVmVyc2lvbls4XTsKKyAgICBPSURfU0VUX0hUX1BIWU1PREUJCQkgICAgICAgICpwSFRQaHlNb2RlID0gTlVMTDsKKworCisjaWZkZWYgU05NUF9TVVBQT1JUCisJLy9mb3Igc25tcCwga2F0aHkKKwlEZWZhdWx0S2V5SWR4VmFsdWUJCQkqcEtleUlkeFZhbHVlOworCUlOVAkJCQkJCQl2YWx1ZUxlbjsKKwlUWF9SVFlfQ0ZHX1NUUlVDCQkJdHhfcnR5X2NmZzsKKwlVTE9ORwkJCQkJCVNob3J0UmV0cnlMaW1pdCwgTG9uZ1JldHJ5TGltaXQ7CisJVUNIQVIJCQkJCQl0bXBbNjRdOworI2VuZGlmIC8vU05NUAorCisgICAgc3dpdGNoKGNtZCkKKyAgICB7CisgICAgICAgIGNhc2UgUlRfT0lEX0RFVklDRV9OQU1FOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFNUQV9OSUNfREVWSUNFX05BTUUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIFNUQV9OSUNfREVWSUNFX05BTUUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfVkVSU0lPTl9JTkZPOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF9WRVJTSU9OX0lORk8gXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSA4KnNpemVvZihVQ0hBUik7CisJCQlzcHJpbnRmKCZkcml2ZXJWZXJzaW9uWzBdLCAiJXMiLCBTVEFfRFJJVkVSX1ZFUlNJT04pOworCQkJZHJpdmVyVmVyc2lvbls3XSA9ICdcMCc7CisJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZkcml2ZXJWZXJzaW9uLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBSQUxJTktfQVRFCisJCWNhc2UgUlRfUVVFUllfQVRFX1RYRE9ORV9DT1VOVDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9RVUVSWV9BVEVfVFhET05FX0NPVU5UIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVJTlQzMik7CisJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+YXRlLlR4RG9uZUNvdW50LCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorCQkJeworCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9CU1NJRF9MSVNUOgorICAgICAgICAgICAgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAkvKgorICAgICAgICAgICAgCSAqIFN0aWxsIHNjYW5uaW5nLCBpbmRpY2F0ZSB0aGUgY2FsbGVyIHNob3VsZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAJICovCisgICAgICAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQlNTSURfTElTVCAoU3RpbGwgc2Nhbm5pbmcpXG4iKSk7CisJCQkJcmV0dXJuIC1FQUdBSU47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9CU1NJRF9MSVNUICglZCBCU1MgcmV0dXJuZWQpXG4iLHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yKSk7CisJCQlwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKKyAgICAgICAgICAgIC8vIENsYWN1bGF0ZSB0b3RhbCBidWZmZXIgc2l6ZSByZXF1aXJlZAorICAgICAgICAgICAgQnNzQnVmU2l6ZSA9IHNpemVvZihVTE9ORyk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwQWRhcHRlci0+U2NhblRhYi5Cc3NOcjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEFsaWduIHBvaW50ZXIgdG8gNCBieXRlcyBib3VuZGFyeS4KKyAgICAgICAgICAgICAgICAvL1BhZGRpbmcgPSA0IC0gKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlZhcklFTGVuICYgMHgwMDAzKTsKKyAgICAgICAgICAgICAgICAvL2lmIChQYWRkaW5nID09IDQpCisgICAgICAgICAgICAgICAgLy8gICAgUGFkZGluZyA9IDA7CisgICAgICAgICAgICAgICAgQnNzQnVmU2l6ZSArPSAoc2l6ZW9mKE5ESVNfV0xBTl9CU1NJRF9FWCkgLSAxICsgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykgKyBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbiArIFBhZGRpbmcpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3Igc2FmZXR5IGlzc3VlLCB3ZSBhZGQgMjU2IGJ5dGVzIGp1c3QgaW4gY2FzZQorICAgICAgICAgICAgQnNzQnVmU2l6ZSArPSAyNTY7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgc2FtZSBzaXplIGFzIHBhc3NlZCBmcm9tIGhpZ2hlciBsYXllcgorICAgICAgICAgICAgcEJ1ZiA9IGttYWxsb2MoQnNzQnVmU2l6ZSwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYocEJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJbml0IDgwMl8xMV9CU1NJRF9MSVNUX0VYIHN0cnVjdHVyZQorICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEJ1ZiwgQnNzQnVmU2l6ZSk7CisgICAgICAgICAgICBwQnNzaWRMaXN0ID0gKFBORElTXzgwMl8xMV9CU1NJRF9MSVNUX0VYKSBwQnVmOworICAgICAgICAgICAgcEJzc2lkTGlzdC0+TnVtYmVyT2ZJdGVtcyA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdG90YWwgYnVmZmVyIGxlbmd0aAorICAgICAgICAgICAgQnNzTGVuID0gNDsgLy8gQ29uc2lzdCBvZiBOdW1iZXJPZkl0ZW1zCisgICAgICAgICAgICAvLyBQb2ludCB0byBzdGFydCBvZiBORElTX1dMQU5fQlNTSURfRVgKKyAgICAgICAgICAgIC8vIHBQdHIgPSBwQnVmICsgc2l6ZW9mKFVMT05HKTsKKyAgICAgICAgICAgIHBQdHIgPSAoUFVDSEFSKSAmcEJzc2lkTGlzdC0+QnNzaWRbMF07CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzTnI7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQnNzID0gKFBORElTX1dMQU5fQlNTSURfRVgpIHBQdHI7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJnBCc3MtPk1hY0FkZHJlc3MsICZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICBpZiAoKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkhpZGRlbiA9PSAxKSAmJiAocEFkYXB0ZXItPlN0YUNmZy5iU2hvd0hpZGRlblNTSUQgPT0gRkFMU0UpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8KKwkJCQkJLy8gV2UgbXVzdCByZXR1cm4gdGhpcyBTU0lEIGR1cmluZyA0d2F5IGhhbmRzaGFraW5nLCBvdGhlcndpc2UgQWVnaXMgd2lsbCBmYWlsZWQgdG8gcGFyc2UgV1BBIGluZm9tYXRpb24KKwkJCQkJLy8gYW5kIHRoZW4gZmFpbGVkIHRvIHNlbmQgRUFQT2wgZmFyYW1lLgorCQkJCQkvLworCQkJCQlpZiAoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSAmJiAocEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCAhPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkpCisJCQkJCXsKKwkJCQkJCXBCc3MtPlNzaWQuU3NpZExlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW47CisJCQkJCQlOZGlzTW92ZU1lbW9yeShwQnNzLT5Tc2lkLlNzaWQsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWQsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW4pOworCQkJCQl9CisJCQkJCWVsc2UKKyAgICAgICAgICAgICAgICAgICAgCXBCc3MtPlNzaWQuU3NpZExlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBCc3MtPlNzaWQuU3NpZExlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW47CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBCc3MtPlNzaWQuU3NpZCwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3NpZCwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3NpZExlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBCc3MtPlByaXZhY3kgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Qcml2YWN5OworICAgICAgICAgICAgICAgIHBCc3MtPlJzc2kgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc3NpIC0gcEFkYXB0ZXItPkJicFJzc2lUb0RibURlbHRhOworICAgICAgICAgICAgICAgIHBCc3MtPk5ldHdvcmtUeXBlSW5Vc2UgPSBOZXR3b3JrVHlwZUluVXNlU2FuaXR5KCZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXSk7CisgICAgICAgICAgICAgICAgcEJzcy0+Q29uZmlndXJhdGlvbi5MZW5ndGggPSBzaXplb2YoTkRJU184MDJfMTFfQ09ORklHVVJBVElPTik7CisgICAgICAgICAgICAgICAgcEJzcy0+Q29uZmlndXJhdGlvbi5CZWFjb25QZXJpb2QgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5CZWFjb25QZXJpb2Q7CisgICAgICAgICAgICAgICAgcEJzcy0+Q29uZmlndXJhdGlvbi5BVElNV2luZG93ID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQXRpbVdpbjsKKworICAgICAgICAgICAgICAgIE1BUF9DSEFOTkVMX0lEX1RPX0tIWihwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsLCBwQnNzLT5Db25maWd1cmF0aW9uLkRTQ29uZmlnKTsKKworICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NUeXBlID09IEJTU19JTkZSQSkKKyAgICAgICAgICAgICAgICAgICAgcEJzcy0+SW5mcmFzdHJ1Y3R1cmVNb2RlID0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcEJzcy0+SW5mcmFzdHJ1Y3R1cmVNb2RlID0gTmRpczgwMl8xMUlCU1M7CisKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQnNzLT5TdXBwb3J0ZWRSYXRlcywgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3VwUmF0ZSwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3VwUmF0ZUxlbik7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEJzcy0+U3VwcG9ydGVkUmF0ZXMgKyBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5TdXBSYXRlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkV4dFJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uRXh0UmF0ZUxlbik7CisKKyAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVMZW4gPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBCc3MtPklFTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcyk7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBCc3MtPklFcywgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkZpeElFcywgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykpOworICAgICAgICAgICAgICAgICAgICBwUHRyID0gcFB0ciArIHNpemVvZihORElTX1dMQU5fQlNTSURfRVgpIC0gMSArIHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQnNzLT5JRUxlbmd0aCA9IChVTE9ORykoc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykgKyBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbik7CisgICAgICAgICAgICAgICAgICAgIHBQdHIgPSBwUHRyICsgc2l6ZW9mKE5ESVNfV0xBTl9CU1NJRF9FWCkgLSAxICsgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcyk7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBCc3MtPklFcywgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkZpeElFcywgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykpOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQnNzLT5JRXMgKyBzaXplb2YoTkRJU184MDJfMTFfRklYRURfSUVzKSwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVzLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbik7CisgICAgICAgICAgICAgICAgICAgIHBQdHIgKz0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVMZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBCc3MtPkxlbmd0aCA9IChVTE9ORykoc2l6ZW9mKE5ESVNfV0xBTl9CU1NJRF9FWCkgLSAxICsgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcykgKyBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbiArIFBhZGRpbmcpOworCisjaWYgV0lSRUxFU1NfRVhUIDwgMTcKKyAgICAgICAgICAgICAgICBpZiAoKEJzc0xlbiArIHBCc3MtPkxlbmd0aCkgPCB3cnEtPnUuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICAgICAgQnNzTGVuICs9IHBCc3MtPkxlbmd0aDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQnNzaWRMaXN0LT5OdW1iZXJPZkl0ZW1zID0gaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBCc3NMZW4gKz0gcEJzcy0+TGVuZ3RoOworI2VuZGlmCisgICAgICAgICAgICB9CisKKyNpZiBXSVJFTEVTU19FWFQgPCAxNworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gQnNzTGVuOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChCc3NMZW4gPiB3cnEtPnUuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2ZyZWUocEJzc2lkTGlzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBCc3NMZW47CisjZW5kaWYKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwQnNzaWRMaXN0LCBCc3NMZW4pOworICAgICAgICAgICAga2ZyZWUocEJzc2lkTGlzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gTUFDX0FERFJfTEVOOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTOgorICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCisgICAgICAgICAgICAgICAgTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIE1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKE5ESVNfTUVESUFfU1RBVEUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZNZWRpYVN0YXRlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9CU1NJRDoKKyNpZmRlZiBSQUxJTktfQVRFCisJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisgICAgICAgICAgICBpZiAoSU5GUkFfT04ocEFkYXB0ZXIpIHx8IEFESE9DX09OKHBBZGFwdGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuQnNzaWQsIHNpemVvZihORElTXzgwMl8xMV9NQUNfQUREUkVTUykpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQlNTSUQoPUVNUFRZKVxuIikpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9UQ09OTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfU1NJRDoKKwkJCU5kaXNaZXJvTWVtb3J5KCZTc2lkLCBzaXplb2YoTkRJU184MDJfMTFfU1NJRCkpOworCQkJTmRpc1plcm9NZW1vcnkoU3NpZC5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOworICAgICAgICAgICAgU3NpZC5Tc2lkTGVuZ3RoID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuOworCQkJbWVtY3B5KFNzaWQuU3NpZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkLAlTc2lkLlNzaWRMZW5ndGgpOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZTc2lkLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfU1NJRCAoTGVuPSVkLCBzc2lkPSVzKVxuIiwgU3NpZC5Tc2lkTGVuZ3RoLFNzaWQuU3NpZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9MSU5LX1NUQVRVUzoKKyAgICAgICAgICAgIHBMaW5rU3RhdHVzID0gKFJUXzgwMl8xMV9MSU5LX1NUQVRVUyAqKSBrbWFsbG9jKHNpemVvZihSVF84MDJfMTFfTElOS19TVEFUVVMpLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgICAgICAgICBpZiAocExpbmtTdGF0dXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcExpbmtTdGF0dXMtPkN1cnJUeFJhdGUgPSBSYXRlSWRUbzUwMEticHNbcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFJhdGVdOyAgIC8vIHVuaXQgOiA1MDAga2JwcworICAgICAgICAgICAgICAgIHBMaW5rU3RhdHVzLT5DaGFubmVsUXVhbGl0eSA9IHBBZGFwdGVyLT5NbG1lLkNoYW5uZWxRdWFsaXR5OworICAgICAgICAgICAgICAgIHBMaW5rU3RhdHVzLT5SeEJ5dGVDb3VudCA9IHBBZGFwdGVyLT5SYWxpbmtDb3VudGVycy5SZWNlaXZlZEJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICBwTGlua1N0YXR1cy0+VHhCeXRlQ291bnQgPSBwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQ7CisgICAgICAgIAkJcExpbmtTdGF0dXMtPkNlbnRyYWxDaGFubmVsID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbDsKKyAgICAgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoUlRfODAyXzExX0xJTktfU1RBVFVTKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcExpbmtTdGF0dXMsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAga2ZyZWUocExpbmtTdGF0dXMpOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0xJTktfU1RBVFVTXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfTElOS19TVEFUVVMoa21hbGxvYyBmYWlsZWQpXG4iKSk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTjoKKyAgICAgICAgICAgIHBDb25maWd1cmF0aW9uID0gKE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04gKikga21hbGxvYyhzaXplb2YoTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiksIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmIChwQ29uZmlndXJhdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQ29uZmlndXJhdGlvbi0+TGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04pOworICAgICAgICAgICAgICAgIHBDb25maWd1cmF0aW9uLT5CZWFjb25QZXJpb2QgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZDsKKyAgICAgICAgICAgICAgICBwQ29uZmlndXJhdGlvbi0+QVRJTVdpbmRvdyA9IHBBZGFwdGVyLT5TdGFBY3RpdmUuQXRpbVdpbjsKKyAgICAgICAgICAgICAgICBNQVBfQ0hBTk5FTF9JRF9UT19LSFoocEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsLCBwQ29uZmlndXJhdGlvbi0+RFNDb25maWcpOworICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcENvbmZpZ3VyYXRpb24sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQ09ORklHVVJBVElPTihCZWFjb25QZXJpb2Q9JWxkLEF0aW1XPSVsZCxDaGFubmVsPSVkKSBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENvbmZpZ3VyYXRpb24tPkJlYWNvblBlcmlvZCwgcENvbmZpZ3VyYXRpb24tPkFUSU1XaW5kb3csIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCWtmcmVlKHBDb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OKGttYWxsb2MgZmFpbGVkKVxuIikpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX1NOUl8wOgorCQkJaWYgKChwQWRhcHRlci0+U3RhQ2ZnLkxhc3RTTlIwID4gMCkpCisJCQl7CisJCQkJdWxJbmZvID0gKCgweGViCS0gcEFkYXB0ZXItPlN0YUNmZy5MYXN0U05SMCkgKiAzKSAvCTE2IDsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywJd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TTlJfMCgweD0lbHgpXG4iLCB1bEluZm8pKTsKKwkJCX0KKyAgICAgICAgICAgIGVsc2UKKwkJCSAgICBTdGF0dXMgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TTlJfMToKKwkJCWlmICgocEFkYXB0ZXItPkFudGVubmEuZmllbGQuUnhQYXRoCT4gMSkgJiYKKyAgICAgICAgICAgICAgICAocEFkYXB0ZXItPlN0YUNmZy5MYXN0U05SMSA+IDApKQorCQkJeworCQkJCXVsSW5mbyA9ICgoMHhlYgktIHBBZGFwdGVyLT5TdGFDZmcuTGFzdFNOUjEpICogMykgLwkxNiA7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sCXdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TTlJfMSgweD0lbHgpXG4iLHVsSW5mbykpOworCQkJfQorCQkJZWxzZQorCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1NOUl8xKHBBZGFwdGVyLT5TdGFDZmcuTGFzdFNOUjE9JWQpXG4iLHBBZGFwdGVyLT5TdGFDZmcuTGFzdFNOUjEpKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUlNTSV9UUklHR0VSOgorICAgICAgICAgICAgdWxJbmZvID0gcEFkYXB0ZXItPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCAtIHBBZGFwdGVyLT5CYnBSc3NpVG9EYm1EZWx0YTsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIoPSVsZClcbiIsIHVsSW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgT0lEXzgwMl8xMV9SU1NJOgorICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUlNTSToKKwkJCXVsSW5mbyA9IHBBZGFwdGVyLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTA7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLAl3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9SU1NJXzE6CisgICAgICAgICAgICB1bEluZm8gPSBwQWRhcHRlci0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywJd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUlNTSV8yOgorICAgICAgICAgICAgdWxJbmZvID0gcEFkYXB0ZXItPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMjsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sCXdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1NUQVRJU1RJQ1M6CisgICAgICAgICAgICBwU3RhdGlzdGljcyA9IChORElTXzgwMl8xMV9TVEFUSVNUSUNTICopIGttYWxsb2Moc2l6ZW9mKE5ESVNfODAyXzExX1NUQVRJU1RJQ1MpLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgICAgICAgICBpZiAocFN0YXRpc3RpY3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfU1RBVElTVElDUyBcbiIpKTsKKyAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIG1vc3QgdXAtdG8tZGF0ZSBoL3cgcmF3IGNvdW50ZXJzIGludG8gc29mdHdhcmUgY291bnRlcnMKKwkJCSAgICBOSUNVcGRhdGVSYXdDb3VudGVycyhwQWRhcHRlcik7CisKKyAgICAgICAgICAgICAgICAvLyBTYW5pdHkgY2hlY2sgZm9yIGNhbGN1bGF0aW9uIG9mIHN1Y2Vzc2Z1bCBjb3VudAorICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC5RdWFkUGFydCA8IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC5RdWFkUGFydCkKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQuUXVhZFBhcnQ7CisKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+VHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPk11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5GYWlsZWRDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRmFpbGVkQ291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPlJldHJ5Q291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPk11bHRpcGxlUmV0cnlDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuTXVsdGlwbGVSZXRyeUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5SVFNTdWNjZXNzQ291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJUU1N1Y2Nlc3NDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+UlRTRmFpbHVyZUNvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5SVFNGYWlsdXJlQ291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPkFDS0ZhaWx1cmVDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuQUNLRmFpbHVyZUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5GcmFtZUR1cGxpY2F0ZUNvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5GcmFtZUR1cGxpY2F0ZUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5SZWNlaXZlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJlY2VpdmVkRnJhZ21lbnRDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+TXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5NdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQuUXVhZFBhcnQ7CisjaWZkZWYgREJHCisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPkZDU0Vycm9yQ291bnQgPSBwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuUmVhbEZjc0VyckNvdW50OworI2Vsc2UKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+RkNTRXJyb3JDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+RnJhbWVEdXBsaWNhdGVDb3VudC51Lkxvd1BhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkZyYW1lRHVwbGljYXRlQ291bnQudS5Mb3dQYXJ0IC8gMTAwOworI2VuZGlmCisgICAgICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX1NUQVRJU1RJQ1MpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwU3RhdGlzdGljcywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBrZnJlZShwU3RhdGlzdGljcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfU1RBVElTVElDUyhrbWFsbG9jIGZhaWxlZClcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEX0dFTl9SQ1ZfT0s6CisgICAgICAgICAgICB1bEluZm8gPSBwQWRhcHRlci0+Q291bnRlcnM4MDIzLkdvb2RSZWNlaXZlczsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfR0VOX1JDVl9OT19CVUZGRVI6CisgICAgICAgICAgICB1bEluZm8gPSBwQWRhcHRlci0+Q291bnRlcnM4MDIzLlJ4Tm9CdWZmZXI7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9QSFlfTU9ERToKKyAgICAgICAgICAgIHVsSW5mbyA9IChVTE9ORylwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGU7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUEhZX01PREUgKD0lbGQpXG4iLCB1bEluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfU1RBX0NPTkZJRzoKKyAgICAgICAgICAgIHBTdGFDb25maWcgPSAoUlRfODAyXzExX1NUQV9DT05GSUcgKikga21hbGxvYyhzaXplb2YoUlRfODAyXzExX1NUQV9DT05GSUcpLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgICAgICAgICBpZiAocFN0YUNvbmZpZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TVEFfQ09ORklHXG4iKSk7CisgICAgICAgICAgICAgICAgcFN0YUNvbmZpZy0+RW5hYmxlVHhCdXJzdCA9IHBBZGFwdGVyLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3Q7CisgICAgICAgICAgICAgICAgcFN0YUNvbmZpZy0+RW5hYmxlVHVyYm9SYXRlID0gMDsKKyAgICAgICAgICAgICAgICBwU3RhQ29uZmlnLT5Vc2VCR1Byb3RlY3Rpb24gPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbjsKKyAgICAgICAgICAgICAgICBwU3RhQ29uZmlnLT5Vc2VTaG9ydFNsb3RUaW1lID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZTsKKyAgICAgICAgICAgICAgICAvL3BTdGFDb25maWctPkFkaG9jTW9kZSA9IHBBZGFwdGVyLT5TdGFDZmcuQWRob2NNb2RlOworICAgICAgICAgICAgICAgIHBTdGFDb25maWctPkh3UmFkaW9TdGF0dXMgPSAocEFkYXB0ZXItPlN0YUNmZy5iSHdSYWRpbyA9PSBUUlVFKSA/IDEgOiAwOworICAgICAgICAgICAgICAgIHBTdGFDb25maWctPlJzdjEgPSAwOworICAgICAgICAgICAgICAgIHBTdGFDb25maWctPlN5c3RlbUVycm9yQml0bWFwID0gcEFkYXB0ZXItPlN5c3RlbUVycm9yQml0bWFwOworICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihSVF84MDJfMTFfU1RBX0NPTkZJRyk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBTdGFDb25maWcsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAga2ZyZWUocFN0YUNvbmZpZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfU1RBX0NPTkZJRyhrbWFsbG9jIGZhaWxlZClcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xEOgorICAgICAgICAgICAgUnRzVGhyZXNoID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQ7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoUnRzVGhyZXNoKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmUnRzVGhyZXNoLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRCg9JWxkKVxuIiwgUnRzVGhyZXNoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEOgorICAgICAgICAgICAgRnJhZ1RocmVzaCA9IHBBZGFwdGVyLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQ7CisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID09IFRSVUUpCisgICAgICAgICAgICAgICAgRnJhZ1RocmVzaCA9IDA7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoRnJhZ1RocmVzaCk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJkZyYWdUaHJlc2gsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCg9JWxkKVxuIiwgRnJhZ1RocmVzaCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9QT1dFUl9NT0RFOgorICAgICAgICAgICAgUG93ZXJNb2RlID0gcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFBvd2VyTW9kZSk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJlBvd2VyTW9kZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1BPV0VSX01PREUoPSVkKVxuIiwgUG93ZXJNb2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1JBRElPOgorICAgICAgICAgICAgUmFkaW9TdGF0ZSA9IChCT09MRUFOKSBwQWRhcHRlci0+U3RhQ2ZnLmJTd1JhZGlvOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJhZGlvU3RhdGUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZSYWRpb1N0YXRlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfUkFESU8gKD0lZClcbiIsIFJhZGlvU3RhdGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERToKKyAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKQorICAgICAgICAgICAgICAgIEJzc1R5cGUgPSBOZGlzODAyXzExSUJTUzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfSU5GUkEpCisgICAgICAgICAgICAgICAgQnNzVHlwZSA9IE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfTU9OSVRPUikKKyAgICAgICAgICAgICAgICBCc3NUeXBlID0gTmRpczgwMl8xMU1vbml0b3I7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQnNzVHlwZSA9IE5kaXM4MDJfMTFBdXRvVW5rbm93bjsKKworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKEJzc1R5cGUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZCc3NUeXBlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERSg9JWQpXG4iLCBCc3NUeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1BSRUFNQkxFOgorICAgICAgICAgICAgUHJlYW1UeXBlID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFByZWFtYmxlOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFByZWFtVHlwZSk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJlByZWFtVHlwZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1BSRUFNQkxFKD0lZClcbiIsIFByZWFtVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFOgorICAgICAgICAgICAgQXV0aE1vZGUgPSBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKEF1dGhNb2RlKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmQXV0aE1vZGUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFKD0lZClcbiIsIEF1dGhNb2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1dFUF9TVEFUVVM6CisgICAgICAgICAgICBXZXBTdGF0dXMgPSBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihXZXBTdGF0dXMpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZXZXBTdGF0dXMsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9XRVBfU1RBVFVTKD0lZClcbiIsIFdlcFN0YXR1cykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTDoKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuVHhQb3dlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMICV4XG4iLHBBZGFwdGVyLT5Db21tb25DZmcuVHhQb3dlcikpOworCQkJYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTF8xOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVMT05HKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1RYX1BPV0VSX0xFVkVMXzEgKD0lbGQpXG4iLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlKSk7CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVEOgorCQkJaWYgKChwQWRhcHRlci0+UmZJY1R5cGUJPT0gUkZJQ18yODUwKSB8fCAocEFkYXB0ZXItPlJmSWNUeXBlID09CVJGSUNfMjc1MCkpCisJCQl7CisJCQkJTmV0d29ya1R5cGVMaXN0WzBdID0gMzsgICAgICAgICAgICAgICAgIC8vIE51bWJlck9mSXRlbXMgPSAzCisJCQkJTmV0d29ya1R5cGVMaXN0WzFdID0gTmRpczgwMl8xMURTOyAgICAgIC8vIE5ldHdvcmtUeXBlWzFdID0gMTFiCisJCQkJTmV0d29ya1R5cGVMaXN0WzJdID0gTmRpczgwMl8xMU9GRE0yNDsgIC8vIE5ldHdvcmtUeXBlWzJdID0gMTFnCisJCQkJTmV0d29ya1R5cGVMaXN0WzNdID0gTmRpczgwMl8xMU9GRE01OyAgIC8vIE5ldHdvcmtUeXBlWzNdID0gMTFhCisgICAgICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gMTY7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZOZXR3b3JrVHlwZUxpc3RbMF0sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJTmV0d29ya1R5cGVMaXN0WzBdID0gMjsgICAgICAgICAgICAgICAgIC8vIE51bWJlck9mSXRlbXMgPSAyCisJCQkJTmV0d29ya1R5cGVMaXN0WzFdID0gTmRpczgwMl8xMURTOyAgICAgIC8vIE5ldHdvcmtUeXBlWzFdID0gMTFiCisJCQkJTmV0d29ya1R5cGVMaXN0WzJdID0gTmRpczgwMl8xMU9GRE0yNDsgIC8vIE5ldHdvcmtUeXBlWzJdID0gMTFnCisJCQkgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gMTI7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZOZXR3b3JrVHlwZUxpc3RbMF0sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQl9CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVTX1NVUFBPUlRFRFxuIikpOworCQkJCWJyZWFrOworCSAgICBjYXNlIE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRToKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUEpCisJCQkJdWxJbmZvID0gTmRpczgwMl8xMU9GRE01OworCQkJZWxzZSBpZiAoKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCR19NSVhFRCkgfHwgKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFHKSkKKwkJCQl1bEluZm8gPSBOZGlzODAyXzExT0ZETTI0OworCQkJZWxzZQorCQkJCXVsSW5mbyA9IE5kaXM4MDJfMTFEUzsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9MQVNUX1JYX1JBVEU6CisgICAgICAgICAgICB1bEluZm8gPSAoVUxPTkcpcEFkYXB0ZXItPkxhc3RSeFJhdGU7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfTEFTVF9SWF9SQVRFICg9JWxkKVxuIiwgdWxJbmZvKSk7CisJCQlicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0xBU1RfVFhfUkFURToKKwkJCS8vdWxJbmZvID0gKFVMT05HKXBBZGFwdGVyLT5MYXN0VHhSYXRlOworCQkJdWxJbmZvID0gKFVMT05HKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUud29yZDsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sCXdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9MQVNUX1RYX1JBVEUgKD0lbHgpXG4iLCB1bEluZm8pKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUVVFUllfRUVQUk9NX1ZFUlNJT046CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUxPTkcpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+RWVwcm9tVmVyc2lvbiwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUVVFUllfRklSTVdBUkVfVkVSU0lPTjoKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5GaXJtd2FyZVZlcnNpb24sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKwkgICAgY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX05PSVNFX0xFVkVMOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkJicFdyaXRlTGF0Y2hbNjZdLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfTk9JU0VfTEVWRUwgKD0lZClcbiIsIHBBZGFwdGVyLT5CYnBXcml0ZUxhdGNoWzY2XSkpOworCQkJYnJlYWs7CisJICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9FWFRSQV9JTkZPOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVMT05HKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkV4dHJhSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX0VYVFJBX0lORk8gKD0lbGQpXG4iLCBwQWRhcHRlci0+RXh0cmFJbmZvKSk7CisJICAgICAgICBicmVhazsKKwkgICAgY2FzZSBSVF9PSURfV0VfVkVSU0lPTl9DT01QSUxFRDoKKwkgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVSU5UKTsKKwkgICAgICAgIHdlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJndlX3ZlcnNpb25fY29tcGlsZWQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJICAgICAgICBicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0FQU0RfU0VUVElORzoKKwkJCWFwc2QgPSAocEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgfCAocEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JFIDw8IDEpIHwgKHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CSyA8PCAyKQorCQkJCXwgKHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WSSA8PCAzKQl8IChwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8gPDwgNCkJfCAocEFkYXB0ZXItPkNvbW1vbkNmZy5NYXhTUExlbmd0aCA8PCA1KSk7CisKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmFwc2QsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9BUFNEX1NFVFRJTkcgKD0weCVseCxBUFNEQ2FwPSVkLEFDX0JFPSVkLEFDX0JLPSVkLEFDX1ZJPSVkLEFDX1ZPPSVkLE1BWFNQTGVuPSVkKVxuIiwKKwkJCQlhcHNkLHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlLHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CRSxwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksscEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX1ZJLHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WTyxwQWRhcHRlci0+Q29tbW9uQ2ZnLk1heFNQTGVuZ3RoKSk7CisJCQlicmVhazsKKwkJY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0FQU0RfUFNNOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVMT05HKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfQVBTRF9QU00gKD0lZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSkpOworCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9XTU06CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuYldtbUNhcGFibGUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9XTU0gKD0lZClcbiIsCXBBZGFwdGVyLT5Db21tb25DZmcuYldtbUNhcGFibGUpKTsKKwkJCWJyZWFrOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgY2FzZSBSVF9PSURfTkVXX0RSSVZFUjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVQ0hBUiBlbmFibGVkID0gMTsKKyAgICAJICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUNIQVIpOworICAgIAkgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmZW5hYmxlZCwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEX05FV19EUklWRVIgKD0lZClcbiIsIGVuYWJsZWQpKTsKKyAgICAgICAgICAgIH0KKwkgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUOgorCSAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKwkgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgKD0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKSk7CisJICAgICAgICBicmVhazsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyAgICAgICAgY2FzZSBSVF9PSURfRFJJVkVSX0RFVklDRV9OQU1FOgorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF9EUklWRVJfREVWSUNFX05BTUUgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxNjsKKwkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcEFkYXB0ZXItPlN0YUNmZy5kZXZfbmFtZSwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKwkJCXsKKwkJCQlTdGF0dXMgPSAtRUZBVUxUOworCQkJfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9IVF9QSFlNT0RFOgorICAgICAgICAgICAgcEhUUGh5TW9kZSA9IChPSURfU0VUX0hUX1BIWU1PREUgKikga21hbGxvYyhzaXplb2YoT0lEX1NFVF9IVF9QSFlNT0RFKSwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYgKHBIVFBoeU1vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEhUUGh5TW9kZS0+UGh5TW9kZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZTsKKyAgICAJCQlwSFRQaHlNb2RlLT5IdE1vZGUgPSAoVUNIQVIpcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFOworICAgIAkJCXBIVFBoeU1vZGUtPkJXID0gKFVDSEFSKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuQlc7CisgICAgCQkJcEhUUGh5TW9kZS0+TUNTPSAoVUNIQVIpcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisgICAgCQkJcEhUUGh5TW9kZS0+U0hPUlRHST0gKFVDSEFSKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSTsKKyAgICAJCQlwSFRQaHlNb2RlLT5TVEJDPSAoVUNIQVIpcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5TVEJDOworCisgICAgCQkJcEhUUGh5TW9kZS0+RXh0T2Zmc2V0ID0gKChwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsKSA/IChFWFRDSEFfQkVMT1cpIDogKEVYVENIQV9BQk9WRSkpOworICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihPSURfU0VUX0hUX1BIWU1PREUpOworICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcEhUUGh5TW9kZSwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAJCQl7CisgICAgCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisgICAgCQkJfQorICAgIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0hUX1BIWU1PREUgKFBoeU1vZGUgPSAlZCwgTUNTID0lZCwgQlcgPSAlZCwgU1RCQyA9ICVkLCBFeHRPZmZzZXQ9JWQpXG4iLAorICAgIAkJCQlwSFRQaHlNb2RlLT5IdE1vZGUsIHBIVFBoeU1vZGUtPk1DUywgcEhUUGh5TW9kZS0+QlcsIHBIVFBoeU1vZGUtPlNUQkMsIHBIVFBoeU1vZGUtPkV4dE9mZnNldCkpOworICAgIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNbG1lVXBkYXRlVHhSYXRlcyAoLndvcmQgPSAleCApXG4iLCBwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLndvcmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TVEFfQ09ORklHKGttYWxsb2MgZmFpbGVkKVxuIikpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX0NPVU5UUllfUkVHSU9OOgorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfQ09VTlRSWV9SRUdJT04gXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKyAgICAgICAgICAgIHVsSW5mbyA9IHBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kOworICAgICAgICAgICAgdWxJbmZvID0gKHVsSW5mbyA8PCA4KXwocEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uKTsKKwkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKwkJCQlTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9EQVRfSFRfUEhZTU9ERToKKyAgICAgICAgICAgIHBIVFBoeU1vZGUgPSAoT0lEX1NFVF9IVF9QSFlNT0RFICopIGttYWxsb2Moc2l6ZW9mKE9JRF9TRVRfSFRfUEhZTU9ERSksIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmIChwSFRQaHlNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBIVFBoeU1vZGUtPlBoeU1vZGUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGU7CisgICAgCQkJcEhUUGh5TW9kZS0+SHRNb2RlID0gKFVDSEFSKXBBZGFwdGVyLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERTsKKyAgICAJCQlwSFRQaHlNb2RlLT5CVyA9IChVQ0hBUilwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVzsKKyAgICAJCQlwSFRQaHlNb2RlLT5NQ1M9IChVQ0hBUilwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTOworICAgIAkJCXBIVFBoeU1vZGUtPlNIT1JUR0k9IChVQ0hBUilwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJOworICAgIAkJCXBIVFBoeU1vZGUtPlNUQkM9IChVQ0hBUilwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TVEJDOworCisgICAgICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKE9JRF9TRVRfSFRfUEhZTU9ERSk7CisgICAgICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwSFRQaHlNb2RlLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgIAkJCXsKKyAgICAJCQkJU3RhdHVzID0gLUVGQVVMVDsKKyAgICAJCQl9CisgICAgCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfSFRfUEhZTU9ERSAoUGh5TW9kZSA9ICVkLCBNQ1MgPSVkLCBCVyA9ICVkLCBTVEJDID0gJWQsIEV4dE9mZnNldD0lZClcbiIsCisgICAgCQkJCXBIVFBoeU1vZGUtPkh0TW9kZSwgcEhUUGh5TW9kZS0+TUNTLCBwSFRQaHlNb2RlLT5CVywgcEhUUGh5TW9kZS0+U1RCQywgcEhUUGh5TW9kZS0+RXh0T2Zmc2V0KSk7CisgICAgCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIE1sbWVVcGRhdGVUeFJhdGVzICgud29yZCA9ICV4IClcbiIsIHBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUud29yZCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1NUQV9DT05GSUcoa21hbGxvYyBmYWlsZWQpXG4iKSk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF9RVUVSWV9NVUxUSVBMRV9DQVJEX1NVUFBPUlQ6CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUNIQVIpOworICAgICAgICAgICAgaSA9IDA7CisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisgICAgICAgICAgICBpID0gMTsKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKwkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmksIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICB7CisJCQkJU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfUVVFUllfTVVMVElQTEVfQ0FSRF9TVVBQT1JUKD0lZCkgXG4iLCBpKSk7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBTTk1QX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX01BQ19BRERSRVNTOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gTUFDX0FERFJfTEVOOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVST1VJOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVST1VJIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gTWFudWZhY3R1cmVyT1VJX0xFTjsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX01BTlVGQUNUVVJFUk5BTUU6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9NQU5VRkFDVFVSRVJOQU1FIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKE1hbnVmYWN0dXJlck5BTUUpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIE1hbnVmYWN0dXJlck5BTUUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfUkVTT1VSQ0VUWVBFSUROQU1FOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUkVTT1VSQ0VUWVBFSUROQU1FIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKFJlc291cmNlVHlwZUlkTmFtZSk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgUmVzb3VyY2VUeXBlSWROYW1lLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1BSSVZBQ1lPUFRJT05JTVBMRU1FTlRFRDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1BSSVZBQ1lPUFRJT05JTVBMRU1FTlRFRCBcbiIpKTsKKwkJCXVsSW5mbyA9IDE7IC8vIDEgaXMgc3VwcG9ydCB3ZXAgZWxzZSAyIGlzIG5vdCBzdXBwb3J0LgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9QT1dFUk1BTkFHRU1FTlRNT0RFOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUE9XRVJNQU5BR0VNRU5UTU9ERSBcbiIpKTsKKwkJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLlBzbSA9PSBQU01QX0FDVElPTikKKwkJCQl1bEluZm8gPSAxOyAvLyAxIGlzIHBvd2VyIGFjdGl2ZSBlbHNlIDIgaXMgcG93ZXIgc2F2ZS4KKwkJCWVsc2UKKwkJCQl1bEluZm8gPSAyOworCisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1dFUERFRkFVTFRLRVlWQUxVRSBcbiIpKTsKKwkJCS8vS2V5SWR4VmFsdWUuS2V5SWR4ID0gcEFkLT5Qb3J0Q2ZnLk1CU1NJRFtwQWQtPklvY3RsSUZdLkRlZmF1bHRLZXlJZDsKKwkJCXBLZXlJZHhWYWx1ZSA9IHdycS0+dS5kYXRhLnBvaW50ZXI7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIktleUlkeFZhbHVlLktleUlkeCA9ICVkLCBcbiIscEtleUlkeFZhbHVlLT5LZXlJZHgpKTsKKwkJCXZhbHVlTGVuID0gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuOworCQkJTmRpc01vdmVNZW1vcnkocEtleUlkeFZhbHVlLT5WYWx1ZSwKKwkJCQkJCSAgICZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksCisJCQkJCQkgICB2YWx1ZUxlbik7CisJCQlwS2V5SWR4VmFsdWUtPlZhbHVlW3ZhbHVlTGVuXT0nXDAnOworCisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoRGVmYXVsdEtleUlkeFZhbHVlKTsKKworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBLZXlJZHhWYWx1ZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRGVmYXVsdEtleUlkID0gJWQsIHRvdGFsIGxlbiA9ICVkLCBzdHIgbGVuPSVkLCBLZXlWYWx1ZT0gJTAyeCAlMDJ4ICUwMnggJTAyeCBcbiIsIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkLCB3cnEtPnUuZGF0YS5sZW5ndGgsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleUxlbiwKKwkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5WzBdLAorCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlbMF0sCisJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLktleVswXSwKKwkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5WzBdKSk7CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfV0VQREVGQVVMVEtFWUlEOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfV0VQREVGQVVMVEtFWUlEIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEZWZhdWx0S2V5SWQgPSVkIFxuIiwgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9XRVBLRVlNQVBQSU5HTEVOR1RIOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfV0VQS0VZTUFQUElOR0xFTkdUSCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVQ0hBUik7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwKKwkJCQkJCQkJCSZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4sCisJCQkJCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgVFhfUlRZX0NGRywgJnR4X3J0eV9jZmcud29yZCk7CisJCQlTaG9ydFJldHJ5TGltaXQgPSB0eF9ydHlfY2ZnLmZpZWxkLlNob3J0UnR5TGltaXQ7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTaG9ydFJldHJ5TGltaXQgPSVsZCwgIHR4X3J0eV9jZmcuZmllbGQuU2hvcnRSZXRyeUxpbWl0PSVkXG4iLCBTaG9ydFJldHJ5TGltaXQsIHR4X3J0eV9jZmcuZmllbGQuU2hvcnRSdHlMaW1pdCkpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZTaG9ydFJldHJ5TGltaXQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfTE9OR1JFVFJZTElNSVQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9MT05HUkVUUllMSU1JVCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgVFhfUlRZX0NGRywgJnR4X3J0eV9jZmcud29yZCk7CisJCQlMb25nUmV0cnlMaW1pdCA9IHR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0OworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTG9uZ1JldHJ5TGltaXQgPSVsZCwgIHR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0PSVkXG4iLCBMb25nUmV0cnlMaW1pdCwgdHhfcnR5X2NmZy5maWVsZC5Mb25nUnR5TGltaXQpKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmTG9uZ1JldHJ5TGltaXQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfUFJPRFVDVElEOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUFJPRFVDVElEIFxuIikpOworCisjaWZkZWYgUlQyODcwCisJCQlzcHJpbnRmKHRtcCwgIiUwNHggJTA0eFxuIiwgKChQT1NfQ09PS0lFKXBBZGFwdGVyLT5PU19Db29raWUpLT5wVXNiX0Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciAsKChQT1NfQ09PS0lFKXBBZGFwdGVyLT5PU19Db29raWUpLT5wVXNiX0Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisjZW5kaWYgLy8gUlQyODcwIC8vCisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4odG1wKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCB0bXAsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVJRDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX01BTlVGQUNUVVJFSUQgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oTWFudWZhY3R1cmVyTkFNRSk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgTWFudWZhY3R1cmVyTkFNRSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0NVUlJFTlRDSEFOTkVMIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInNpemVvZiBVQ0hBUj0lZCwgY2hhbm5lbD0lZCBcbiIsIHNpemVvZihVQ0hBUiksIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTdGF0dXM9JWRcbiIsIFN0YXR1cykpOworCQkJYnJlYWs7CisjZW5kaWYgLy9TTk1QX1NVUFBPUlQKKworCQljYXNlIE9JRF84MDJfMTFfQlVJTERfQ0hBTk5FTF9FWDoKKwkJCXsKKwkJCQlVQ0hBUiB2YWx1ZTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9CVUlMRF9DSEFOTkVMX0VYIFxuIikpOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVQ0hBUik7CisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN1cHBvcnQgRVhUX0JVSUxEX0NIQU5ORUxfTElTVC5cbiIpKTsKKwkJCQl2YWx1ZSA9IDE7CisjZWxzZQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRvZXNuJ3Qgc3VwcG9ydCBFWFRfQlVJTERfQ0hBTk5FTF9MSVNULlxuIikpOworCQkJCXZhbHVlID0gMDsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ2YWx1ZSwgMSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3RhdHVzPSVkXG4iLCBTdGF0dXMpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9HRVRfQ0hfTElTVDoKKwkJCXsKKwkJCQlQUlRfQ0hBTk5FTF9MSVNUX0lORk8gcENoTGlzdEJ1ZjsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0dFVF9DSF9MSVNUIFxuIikpOworCQkJCWlmIChwQWRhcHRlci0+Q2hhbm5lbExpc3ROdW0gPT0gMCkKKwkJCQl7CisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXBDaExpc3RCdWYgPSAoUlRfQ0hBTk5FTF9MSVNUX0lORk8gKikga21hbGxvYyhzaXplb2YoUlRfQ0hBTk5FTF9MSVNUX0lORk8pLCBNRU1fQUxMT0NfRkxBRyk7CisJCQkJaWYgKHBDaExpc3RCdWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXBDaExpc3RCdWYtPkNoYW5uZWxMaXN0TnVtID0gcEFkYXB0ZXItPkNoYW5uZWxMaXN0TnVtOworCQkJCWZvciAoaSA9IDA7IGkgPCBwQ2hMaXN0QnVmLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCQkJCQlwQ2hMaXN0QnVmLT5DaGFubmVsTGlzdFtpXSA9IHBBZGFwdGVyLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJUX0NIQU5ORUxfTElTVF9JTkZPKTsKKwkJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcENoTGlzdEJ1Ziwgc2l6ZW9mKFJUX0NIQU5ORUxfTElTVF9JTkZPKSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3RhdHVzPSVkXG4iLCBTdGF0dXMpKTsKKworCQkJCWlmIChwQ2hMaXN0QnVmKQorCQkJCQlrZnJlZShwQ2hMaXN0QnVmKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9HRVRfQ09VTlRSWV9DT0RFOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfR0VUX0NPVU5UUllfQ09ERSBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDI7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeUNvZGUsIDIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3RhdHVzPSVkXG4iLCBTdGF0dXMpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9HRVRfQ0hBTk5FTF9HRU9HUkFQSFk6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9HRVRfQ0hBTk5FTF9HRU9HUkFQSFkgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSwgMSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTdGF0dXM9JWRcbiIsIFN0YXR1cykpOworCQkJYnJlYWs7CisKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQljYXNlIFJUX09JRF84MDJfMTFfUVVFUllfRExTOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfRExTKD0lZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuYkRMU0NhcGFibGUpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9ETFNfUEFSQU06CisJCQl7CisJCQkJUFJUXzgwMl8xMV9ETFNfSU5GTwlwRGxzSW5mbyA9IGttYWxsb2Moc2l6ZW9mKFJUXzgwMl8xMV9ETFNfSU5GTyksIEdGUF9BVE9NSUMpOworCQkJCWlmIChwRGxzSW5mbyA9PSBOVUxMKQorCQkJCQlicmVhazsKKworCQkJCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJCQkJeworCQkJCQlSVE1QTW92ZU1lbW9yeSgmcERsc0luZm8tPkVudHJ5W2ldLCAmcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXSwgc2l6ZW9mKFJUXzgwMl8xMV9ETFNfVUkpKTsKKwkJCQl9CisKKwkJCQlwRGxzSW5mby0+bnVtID0gTUFYX05VTV9PRl9ETFNfRU5UUlk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJUXzgwMl8xMV9ETFNfSU5GTyk7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBEbHNJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0RMU19QQVJBTVxuIikpOworCisJCQkJaWYgKHBEbHNJbmZvKQorCQkJCQlrZnJlZShwRGxzSW5mbyk7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5Ojp1bmtub3duIElPQ1RMJ3Mgc3ViY21kID0gMHglMDh4XG4iLCBjbWQpKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IC1FT1BOT1RTVVBQOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBTdGF0dXM7Cit9CisKK0lOVCBydDI4eHhfc3RhX2lvY3RsKAorCUlOCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRfZGV2LAorCUlOCU9VVAlzdHJ1Y3QgaWZyZXEJKnJxLAorCUlOCUlOVAkJCQkJY21kKQoreworCVBPU19DT09LSUUJCQlwT2JqOworCVZJUlRVQUxfQURBUFRFUgkJKnBWaXJ0dWFsQWQgPSBOVUxMOworCVJUTVBfQURBUFRFUiAgICAgICAgKnBBZCA9IE5VTEw7CisJc3RydWN0IGl3cmVxICAgICAgICAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKSBycTsKKwlCT09MRUFOCQkJCVN0YXRlTWFjaGluZVRvdWNoZWQgPSBGQUxTRTsKKwlJTlQJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJVVNIT1JUCQkJCXN1YmNtZDsKKworCWlmIChuZXRfZGV2LT5wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCXsKKwkJcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwl9CisJZWxzZQorCXsKKwkJcFZpcnR1YWxBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJCXBBZCA9IHBWaXJ0dWFsQWQtPlJ0bXBEZXYtPm1sX3ByaXY7CisJfQorCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisKKwlpZiAocEFkID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKyAgICAvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIGlmKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgeworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCisJICAgIGlmICh3cnEtPnUuZGF0YS5wb2ludGVyID09IE5VTEwpCisJICAgIHsKKwkJICAgIHJldHVybiBTdGF0dXM7CisJICAgIH0KKworCSAgICBpZiAoc3Ryc3RyKHdycS0+dS5kYXRhLnBvaW50ZXIsICJPcE1vZGUiKSA9PSBOVUxMKQorI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKwkJICAgIHJldHVybiAtRU5FVERPV047CisgICAgICAgIH0KKyAgICB9CisKKwl7CS8vIGRldGVybWluZSB0aGlzIGlvY3RsIGNvbW1hbmQgaXMgY29tbWluZyBmcm9tIHdoaWNoIGludGVyZmFjZS4KKwkJcE9iai0+aW9jdGxfaWZfdHlwZSA9IElOVF9NQUlOOworCQlwT2JqLT5pb2N0bF9pZiA9IE1BSU5fTUJTU0lEOworCX0KKworCXN3aXRjaChjbWQpCisJeworI2lmZGVmIFJBTElOS19BVEUKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCQljYXNlIFJUUFJJVl9JT0NUTF9BVEU6CisJCQl7CisJCQkJUnRtcERvQXRlKHBBZCwgd3JxKTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworICAgICAgICBjYXNlIFNJT0NHSUZIV0FERFI6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJT0NUTDo6U0lPQ0dJRkhXQUREUlxuIikpOworCQkJbWVtY3B5KHdycS0+dS5uYW1lLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFVEhfQUxFTik7CisJCQlicmVhazsKKwkJY2FzZSBTSU9DR0lXTkFNRToKKyAgICAgICAgeworICAgICAgICAJY2hhciAqbmFtZT0md3JxLT51Lm5hbWVbMF07CisgICAgICAgIAlydF9pb2N0bF9naXduYW1lKG5ldF9kZXYsIE5VTEwsIG5hbWUsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DR0lXRVNTSUQ6ICAvL0dldCBFU1NJRAorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkPSZ3cnEtPnUuZXNzaWQ7CisgICAgICAgIAlydF9pb2N0bF9naXdlc3NpZChuZXRfZGV2LCBOVUxMLCBlc3NpZCwgZXNzaWQtPnBvaW50ZXIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DU0lXRVNTSUQ6ICAvL1NldCBFU1NJRAorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQJKmVzc2lkPSZ3cnEtPnUuZXNzaWQ7CisgICAgICAgIAlydF9pb2N0bF9zaXdlc3NpZChuZXRfZGV2LCBOVUxMLCBlc3NpZCwgZXNzaWQtPnBvaW50ZXIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DU0lXTldJRDogICAvLyBzZXQgbmV0d29yayBpZCAodGhlIGNlbGwpCisJCWNhc2UgU0lPQ0dJV05XSUQ6ICAgLy8gZ2V0IG5ldHdvcmsgaWQKKwkJCVN0YXR1cyA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCWNhc2UgU0lPQ1NJV0ZSRVE6ICAgLy9zZXQgY2hhbm5lbC9mcmVxdWVuY3kgKEh6KQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfZnJlcSAqZnJlcT0md3JxLT51LmZyZXE7CisgICAgICAgIAlydF9pb2N0bF9zaXdmcmVxKG5ldF9kZXYsIE5VTEwsIGZyZXEsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DR0lXRlJFUTogICAvLyBnZXQgY2hhbm5lbC9mcmVxdWVuY3kgKEh6KQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfZnJlcSAqZnJlcT0md3JxLT51LmZyZXE7CisgICAgICAgIAlydF9pb2N0bF9naXdmcmVxKG5ldF9kZXYsIE5VTEwsIGZyZXEsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DU0lXTklDS046IC8vc2V0IG5vZGUgbmFtZS9uaWNrbmFtZQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGE9JndycS0+dS5kYXRhOworICAgICAgICAJcnRfaW9jdGxfc2l3bmlja24obmV0X2RldiwgTlVMTCwgZGF0YSwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFNJT0NHSVdOSUNLTjogLy9nZXQgbm9kZSBuYW1lL25pY2tuYW1lCisgICAgICAgIHsKKyAgICAgICAgCXN0cnVjdCBpd19wb2ludCAqZGF0YT0md3JxLT51LmRhdGE7CisgICAgICAgIAlydF9pb2N0bF9naXduaWNrbihuZXRfZGV2LCBOVUxMLCBkYXRhLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV1JBVEU6ICAgLy9nZXQgZGVmYXVsdCBiaXQgcmF0ZSAoYnBzKQorCQkgICAgcnRfaW9jdGxfZ2l3cmF0ZShuZXRfZGV2LCBOVUxMLCAmd3JxLT51LCBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIFNJT0NTSVdSQVRFOiAgLy9zZXQgZGVmYXVsdCBiaXQgcmF0ZSAoYnBzKQorCSAgICAgICAgcnRfaW9jdGxfc2l3cmF0ZShuZXRfZGV2LCBOVUxMLCAmd3JxLT51LCBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJT0NHSVdSVFM6ICAvLyBnZXQgUlRTL0NUUyB0aHJlc2hvbGQgKGJ5dGVzKQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcGFyYW0gKnJ0cz0md3JxLT51LnJ0czsKKyAgICAgICAgCXJ0X2lvY3RsX2dpd3J0cyhuZXRfZGV2LCBOVUxMLCBydHMsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKyAgICAgICAgY2FzZSBTSU9DU0lXUlRTOiAgLy9zZXQgUlRTL0NUUyB0aHJlc2hvbGQgKGJ5dGVzKQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcGFyYW0gKnJ0cz0md3JxLT51LnJ0czsKKyAgICAgICAgCXJ0X2lvY3RsX3Npd3J0cyhuZXRfZGV2LCBOVUxMLCBydHMsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKyAgICAgICAgY2FzZSBTSU9DR0lXRlJBRzogIC8vZ2V0IGZyYWdtZW50YXRpb24gdGhyIChieXRlcykKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BhcmFtICpmcmFnPSZ3cnEtPnUuZnJhZzsKKyAgICAgICAgCXJ0X2lvY3RsX2dpd2ZyYWcobmV0X2RldiwgTlVMTCwgZnJhZywgTlVMTCk7CisJCQlicmVhazsKKwkJfQorICAgICAgICBjYXNlIFNJT0NTSVdGUkFHOiAgLy9zZXQgZnJhZ21lbnRhdGlvbiB0aHIgKGJ5dGVzKQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcGFyYW0gKmZyYWc9JndycS0+dS5mcmFnOworICAgICAgICAJcnRfaW9jdGxfc2l3ZnJhZyhuZXRfZGV2LCBOVUxMLCBmcmFnLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisgICAgICAgIGNhc2UgU0lPQ0dJV0VOQ09ERTogIC8vZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQgKmVycT0md3JxLT51LmVuY29kaW5nOworICAgICAgICAJaWYoZXJxLT5wb2ludGVyKQorICAgICAgICAJCXJ0X2lvY3RsX2dpd2VuY29kZShuZXRfZGV2LCBOVUxMLCBlcnEsIGVycS0+cG9pbnRlcik7CisJCQlicmVhazsKKwkJfQorICAgICAgICBjYXNlIFNJT0NTSVdFTkNPREU6ICAvL3NldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BvaW50ICplcnE9JndycS0+dS5lbmNvZGluZzsKKyAgICAgICAgCWlmKGVycS0+cG9pbnRlcikKKyAgICAgICAgCQlydF9pb2N0bF9zaXdlbmNvZGUobmV0X2RldiwgTlVMTCwgZXJxLCBlcnEtPnBvaW50ZXIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DR0lXQVA6ICAgICAvL2dldCBhY2Nlc3MgcG9pbnQgTUFDIGFkZHJlc3NlcworICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHI9JndycS0+dS5hcF9hZGRyOworICAgICAgICAJcnRfaW9jdGxfZ2l3YXAobmV0X2RldiwgTlVMTCwgYXBfYWRkciwgYXBfYWRkci0+c2FfZGF0YSk7CisJCQlicmVhazsKKwkJfQorCSAgICBjYXNlIFNJT0NTSVdBUDogIC8vc2V0IGFjY2VzcyBwb2ludCBNQUMgYWRkcmVzc2VzCisgICAgICAgIHsKKyAgICAgICAgCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkcj0md3JxLT51LmFwX2FkZHI7CisgICAgICAgIAlydF9pb2N0bF9zaXdhcChuZXRfZGV2LCBOVUxMLCBhcF9hZGRyLCBhcF9hZGRyLT5zYV9kYXRhKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV01PREU6ICAgLy9nZXQgb3BlcmF0aW9uIG1vZGUKKyAgICAgICAgeworICAgICAgICAJX191MzIgKm1vZGU9JndycS0+dS5tb2RlOworICAgICAgICAJcnRfaW9jdGxfZ2l3bW9kZShuZXRfZGV2LCBOVUxMLCBtb2RlLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ1NJV01PREU6ICAgLy9zZXQgb3BlcmF0aW9uIG1vZGUKKyAgICAgICAgeworICAgICAgICAJX191MzIgKm1vZGU9JndycS0+dS5tb2RlOworICAgICAgICAJcnRfaW9jdGxfc2l3bW9kZShuZXRfZGV2LCBOVUxMLCBtb2RlLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV1NFTlM6ICAgLy9nZXQgc2Vuc2l0aXZpdHkgKGRCbSkKKwkJY2FzZSBTSU9DU0lXU0VOUzoJLy9zZXQgc2Vuc2l0aXZpdHkgKGRCbSkKKwkJY2FzZSBTSU9DR0lXUE9XRVI6ICAvL2dldCBQb3dlciBNYW5hZ2VtZW50IHNldHRpbmdzCisJCWNhc2UgU0lPQ1NJV1BPV0VSOiAgLy9zZXQgUG93ZXIgTWFuYWdlbWVudCBzZXR0aW5ncworCQljYXNlIFNJT0NHSVdUWFBPVzogIC8vZ2V0IHRyYW5zbWl0IHBvd2VyIChkQm0pCisJCWNhc2UgU0lPQ1NJV1RYUE9XOiAgLy9zZXQgdHJhbnNtaXQgcG93ZXIgKGRCbSkKKwkJY2FzZSBTSU9DR0lXUkFOR0U6CS8vR2V0IHJhbmdlIG9mIHBhcmFtZXRlcnMKKwkJY2FzZSBTSU9DR0lXUkVUUlk6CS8vZ2V0IHJldHJ5IGxpbWl0cyBhbmQgbGlmZXRpbWUKKwkJY2FzZSBTSU9DU0lXUkVUUlk6CS8vc2V0IHJldHJ5IGxpbWl0cyBhbmQgbGlmZXRpbWUKKwkJCVN0YXR1cyA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCWNhc2UgUlRfUFJJVl9JT0NUTDoKKyAgICAgICAgY2FzZSBSVF9QUklWX0lPQ1RMX0VYVDoKKwkJCXN1YmNtZCA9IHdycS0+dS5kYXRhLmZsYWdzOworCQkJaWYoIHN1YmNtZCAmIE9JRF9HRVRfU0VUX1RPR0dMRSkKKwkJCQlTdGF0dXMgPSBSVE1QU2V0SW5mb3JtYXRpb24ocEFkLCBycSwgc3ViY21kKTsKKwkJCWVsc2UKKwkJCQlTdGF0dXMgPSBSVE1QUXVlcnlJbmZvcm1hdGlvbihwQWQsIHJxLCBzdWJjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0lPQ0dJV1BSSVY6CisJCQlpZiAod3JxLT51LmRhdGEucG9pbnRlcikKKwkJCXsKKwkJCQlpZiAoIGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHNpemVvZihwcml2dGFiKSkgIT0gVFJVRSkKKwkJCQkJYnJlYWs7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHByaXZ0YWIpIC8gc2l6ZW9mKHByaXZ0YWJbMF0pOworCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcHJpdnRhYiwgc2l6ZW9mKHByaXZ0YWIpKSkKKwkJCQkJU3RhdHVzID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJUUFJJVl9JT0NUTF9TRVQ6CisJCQlpZihhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCkgIT0gVFJVRSkKKwkJCQlicmVhazsKKwkJCXJ0X2lvY3RsX3NldHBhcmFtKG5ldF9kZXYsIE5VTEwsIE5VTEwsIHdycS0+dS5kYXRhLnBvaW50ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgUlRQUklWX0lPQ1RMX0dTSVRFU1VSVkVZOgorCQkJUlRNUElvY3RsR2V0U2l0ZVN1cnZleShwQWQsIHdycSk7CisJCSAgICBicmVhazsKKyNpZmRlZiBEQkcKKwkJY2FzZSBSVFBSSVZfSU9DVExfTUFDOgorCQkJUlRNUElvY3RsTUFDKHBBZCwgd3JxKTsKKwkJCWJyZWFrOworCQljYXNlIFJUUFJJVl9JT0NUTF9FMlA6CisJCQlSVE1QSW9jdGxFMlBST00ocEFkLCB3cnEpOworCQkJYnJlYWs7CisjaWZkZWYgUlQzMHh4CisJCWNhc2UgUlRQUklWX0lPQ1RMX1JGOgorCQkJUlRNUElvY3RsUkYocEFkLCB3cnEpOworCQkJYnJlYWs7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisjZW5kaWYgLy8gREJHIC8vCisgICAgICAgIGNhc2UgU0lPQ0VUSFRPT0w6CisgICAgICAgICAgICAgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJJT0NUTDo6dW5rbm93biBJT0NUTCdzIGNtZCA9IDB4JTA4eFxuIiwgY21kKSk7CisJCQlTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCX0KKworICAgIGlmKFN0YXRlTWFjaGluZVRvdWNoZWQpIC8vIFVwcGVyIGxheWVyIHNlbnQgYSBNTE1FLXJlbGF0ZWQgb3BlcmF0aW9ucworICAgIAlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBTU0lECisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X1NTSURfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIE5ESVNfODAyXzExX1NTSUQgICAgICAgICAgICAgICAgICAgIFNzaWQsICpwU3NpZD1OVUxMOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlTWFjaGluZVRvdWNoZWQgPSBGQUxTRTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gVFJVRTsKKworICAgIGlmKCBzdHJsZW4oYXJnKSA8PSBNQVhfTEVOX09GX1NTSUQpCisgICAgeworICAgICAgICBOZGlzWmVyb01lbW9yeSgmU3NpZCwgc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpKTsKKyAgICAgICAgaWYgKHN0cmxlbihhcmcpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFNzaWQuU3NpZCwgYXJnLCBzdHJsZW4oYXJnKSk7CisgICAgICAgICAgICBTc2lkLlNzaWRMZW5ndGggPSBzdHJsZW4oYXJnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlICAgLy9BTlkgc3NpZAorICAgICAgICB7CisgICAgICAgICAgICBTc2lkLlNzaWRMZW5ndGggPSAwOworCQkgICAgbWVtY3B5KFNzaWQuU3NpZCwgIiIsIDApOworCQkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOworCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47CisJICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOworCQl9CisgICAgICAgIHBTc2lkID0gJlNzaWQ7CisKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIE1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lICEhIVxuIikpOworICAgICAgICB9CisKKyAgICAgICAgcEFkYXB0ZXItPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBUUlVFOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKKwkJcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKworICAgICAgICBNbG1lRW5xdWV1ZShwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisgICAgICAgICAgICAgICAgICAgIE9JRF84MDJfMTFfU1NJRCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpLAorICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKXBTc2lkKTsKKworICAgICAgICBTdGF0ZU1hY2hpbmVUb3VjaGVkID0gVFJVRTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1NTSURfUHJvYzo6KExlbj0lZCxTc2lkPSVzKVxuIiwgU3NpZC5Tc2lkTGVuZ3RoLCBTc2lkLlNzaWQpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzdWNjZXNzID0gRkFMU0U7CisKKyAgICBpZiAoU3RhdGVNYWNoaW5lVG91Y2hlZCkgLy8gVXBwZXIgbGF5ZXIgc2VudCBhIE1MTUUtcmVsYXRlZCBvcGVyYXRpb25zCisgICAgCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkYXB0ZXIpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKyNpZmRlZiBXTU1fU1VQUE9SVAorLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV21tQ2FwYWJsZSBFbmFibGUgb3IgRGlzYWJsZQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9XbW1DYXBhYmxlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUJPT0xFQU4JYldtbUNhcGFibGU7CisKKwliV21tQ2FwYWJsZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoKGJXbW1DYXBhYmxlID09IDEpCisjaWZkZWYgUlQyODcwCisJCSYmIChwQWQtPk51bWJlck9mUGlwZXMgPj0gNSkKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwkJKQorCQlwQWQtPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSA9IFRSVUU7CisJZWxzZSBpZiAoYldtbUNhcGFibGUgPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPSBGQUxTRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1dtbUNhcGFibGVfUHJvYzo6KGJXbW1DYXBhYmxlPSVkKVxuIiwKKwkJcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFdNTV9TVVBQT1JUIC8vCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IE5ldHdvcmsgVHlwZShJbmZyYXN0cnVjdHVyZS9BZGhvYyBtb2RlKQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9OZXR3b3JrVHlwZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgVUlOVDMyCVZhbHVlID0gMDsKKworICAgIGlmIChzdHJjbXAoYXJnLCAiQWRob2MiKSA9PSAwKQorCXsKKwkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSAhPSBCU1NfQURIT0MpCisJCXsKKwkJCS8vIENvbmZpZyBoYXMgY2hhbmdlZAorCQkJcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKyAgICAgICAgICAgIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsKKyAgICAgICAgICAgICAgICBSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQkJCVZhbHVlICY9ICh+MHg4MCk7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKyAgICAgICAgICAgICAgICBPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgTGlua0Rvd24ocEFkYXB0ZXIsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKwkJCWlmIChJTkZSQV9PTihwQWRhcHRlcikpCisJCQl7CisJCQkJLy9CT09MRUFOIENhbmNlbGxlZDsKKwkJCQkvLyBTZXQgdGhlIEF1dG9SZWNvbm5lY3RTc2lkIHRvIHByZXZlbnQgaXQgcmVjb25uZWN0IHRvIG9sZCBTU0lECisJCQkJLy8gU2luY2UgY2FsbGluZyB0aGlzIGluZGljYXRlIHVzZXIgZG9uJ3Qgd2FudCB0byBjb25uZWN0IHRvIHRoYXQgU1NJRCBhbnltb3JlLgorCQkJCXBBZGFwdGVyLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuPSAzMjsKKwkJCQlOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4pOworCisJCQkJTGlua0Rvd24ocEFkYXB0ZXIsIEZBTFNFKTsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQkIhXG4iKSk7CisJCQl9CisJCX0KKwkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0FESE9DOworICAgICAgICBwQWRhcHRlci0+bmV0X2Rldi0+dHlwZSA9IHBBZGFwdGVyLT5TdGFDZmcuT3JpRGV2VHlwZTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PlNldF9OZXR3b3JrVHlwZV9Qcm9jOjooQUQtSE9DKVxuIikpOworCX0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiSW5mcmEiKSA9PSAwKQorCXsKKwkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSAhPSBCU1NfSU5GUkEpCisJCXsKKwkJCS8vIENvbmZpZyBoYXMgY2hhbmdlZAorCQkJcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKyAgICAgICAgICAgIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsKKyAgICAgICAgICAgICAgICBSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQkJCVZhbHVlICY9ICh+MHg4MCk7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKyAgICAgICAgICAgICAgICBPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgTGlua0Rvd24ocEFkYXB0ZXIsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKwkJCWlmIChBREhPQ19PTihwQWRhcHRlcikpCisJCQl7CisJCQkJLy8gU2V0IHRoZSBBdXRvUmVjb25uZWN0U3NpZCB0byBwcmV2ZW50IGl0IHJlY29ubmVjdCB0byBvbGQgU1NJRAorCQkJCS8vIFNpbmNlIGNhbGxpbmcgdGhpcyBpbmRpY2F0ZSB1c2VyIGRvbid0IHdhbnQgdG8gY29ubmVjdCB0byB0aGF0IFNTSUQgYW55bW9yZS4KKwkJCQlwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbj0gMzI7CisJCQkJTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZGFwdGVyLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKworCQkJCUxpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7CisJCQl9CisJCX0KKwkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOworICAgICAgICBwQWRhcHRlci0+bmV0X2Rldi0+dHlwZSA9IHBBZGFwdGVyLT5TdGFDZmcuT3JpRGV2VHlwZTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PlNldF9OZXR3b3JrVHlwZV9Qcm9jOjooSU5GUkEpXG4iKSk7CisKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOworCX0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiTW9uaXRvciIpID09IDApCisgICAgeworCQlVQ0hBUgliYnBWYWx1ZSA9IDA7CisJCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7CisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfSU5GUkFfT04pOworICAgICAgICBPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX0FESE9DX09OKTsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKKwkJLy8gZGlzYWJsZSBhbGwgcGVyaW9kaWMgc3RhdGUgbWFjaGluZQorCQlwQWRhcHRlci0+U3RhQ2ZnLmJBdXRvUmVjb25uZWN0ID0gRkFMU0U7CisJCS8vIHJlc2V0IGFsbCBtbG1lIHN0YXRlIG1hY2hpbmUKKwkJUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEIFxuIikpOworICAgICAgICBpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9PSAwKQorICAgICAgICB7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFOX01JWEVEKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSAzNjsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gNjsKKyAgICAgICAgfQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICBlbHNlCisgICAgICAgICAgICBOX0NoYW5uZWxDaGVjayhwQWRhcHRlcik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQgJiYKKyAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXID09IEJXXzQwICYmCisgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPT0gRVhUQ0hBX0FCT1ZFKQorCQl7CisJCQkvLyA0ME1IeiAsY29udHJvbCBjaGFubmVsIGF0IGxvd2VyCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlICY9ICh+MHgxOCk7CisJCQliYnBWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LCBiYnBWYWx1ZSk7CisJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzQwOworCQkJLy8gIFJYIDogY29udHJvbCBjaGFubmVsIGF0IGxvd2VyCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SMywgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlICY9ICh+MHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjMsIGJicFZhbHVlKTsKKworCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQkJVmFsdWUgJj0gMHhmZmZmZmZmZTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKwkJCXBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgKyAyOworICAgICAgICAgICAgQXNpY1N3aXRjaENoYW5uZWwocEFkYXB0ZXIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJICAgIEFzaWNMb2NrQ2hhbm5lbChwQWRhcHRlciwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCV180MCAsY29udHJvbF9jaGFubmVsKCVkKSwgQ2VudHJhbENoYW5uZWwoJWQpIFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpKTsKKwkJfQorCQllbHNlIGlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCAmJgorICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCAmJgorICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPT0gRVhUQ0hBX0JFTE9XKQorCQl7CisJCQkvLyA0ME1IeiAsY29udHJvbCBjaGFubmVsIGF0IHVwcGVyCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlICY9ICh+MHgxOCk7CisJCQliYnBWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LCBiYnBWYWx1ZSk7CisJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzQwOworCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQkJVmFsdWUgfD0gMHgxOworCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBUWF9CQU5EX0NGRywgVmFsdWUpOworCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SMywgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlIHw9ICgweDIwKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SMywgYmJwVmFsdWUpOworCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCAtIDI7CisgICAgICAgICAgICBBc2ljU3dpdGNoQ2hhbm5lbChwQWRhcHRlciwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQkgICAgQXNpY0xvY2tDaGFubmVsKHBBZGFwdGVyLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJXXzQwICxjb250cm9sX2NoYW5uZWwoJWQpLCBDZW50cmFsQ2hhbm5lbCglZCkgXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCkpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJeworCQkJLy8gMjBNSHoKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LCAmYmJwVmFsdWUpOworCQkJYmJwVmFsdWUgJj0gKH4weDE4KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgYmJwVmFsdWUpOworCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZGFwdGVyLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWRhcHRlciwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJXXzIwLCBDaGFubmVsKCVkKVxuIiwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJCX0KKwkJLy8gRW5hYmxlIFJ4IHdpdGggcHJvbWlzY3VvdXMgcmVjZXB0aW9uCisJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgUlhfRklMVFJfQ0ZHLCAweDMpOworCQkvLyBBU0lDIHN1cHBvcnN0cyBzbmlmZmVyIGZ1bmN0aW9uIHdpdGggcmVwbGFjaW5nIFJTU0kgd2l0aCB0aW1lc3RhbXAuCisJCS8vUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJLy9WYWx1ZSB8PSAoMHg4MCk7CisJCS8vUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKwkJLy8gZGlzYWJsZSBzeW5jCisJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBCQ05fVElNRV9DRkcsICZjc3Iud29yZCk7CisJCWNzci5maWVsZC5iQmVhY29uR2VuID0gMDsKKwkJY3NyLmZpZWxkLmJUQlRURW5hYmxlID0gMDsKKwkJY3NyLmZpZWxkLlRzZlN5bmNNb2RlID0gMDsKKwkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBCQ05fVElNRV9DRkcsIGNzci53b3JkKTsKKworCQlwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPSBCU1NfTU9OSVRPUjsKKyAgICAgICAgcEFkYXB0ZXItPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNOyAvL0FSUEhSRF9JRUVFODAyMTE7IC8vIElFRUU4MDIxMQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+U2V0X05ldHdvcmtUeXBlX1Byb2M6OihNT05JVE9SKVxuIikpOworICAgIH0KKworICAgIC8vIFJlc2V0IFJhbGluayBzdXBwbGljYW50IHRvIG5vdCB1c2UsIGl0IHdpbGwgYmUgc2V0IHRvIHN0YXJ0IHdoZW4gVUkgc2V0IFBNSyBrZXkKKyAgICBwQWRhcHRlci0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X05ldHdvcmtUeXBlX1Byb2M6OihOZXR3b3JrVHlwZT0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSkpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEF1dGhlbnRpY2F0aW9uIG1vZGUKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfQXV0aE1vZGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGlmICgoc3RyY21wKGFyZywgIldFUEFVVE8iKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIndlcGF1dG8iKSA9PSAwKSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2g7CisgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJPUEVOIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJvcGVuIikgPT0gMCkpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiU0hBUkVEIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJzaGFyZWQiKSA9PSAwKSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZDsKKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIldQQVBTSyIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid3BhcHNrIikgPT0gMCkpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7CisgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJXUEFOT05FIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJ3cGFub25lIikgPT0gMCkpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiV1BBMlBTSyIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid3BhMnBzayIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJXUEEiKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIndwYSIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBOworICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiV1BBMiIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid3BhMiIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMjsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0F1dGhNb2RlX1Byb2M6OihBdXRoTW9kZT0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBFbmNyeXB0aW9uIFR5cGUKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfRW5jcnlwVHlwZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaWYgKChzdHJjbXAoYXJnLCAiTk9ORSIpID09IDApIHx8IChzdHJjbXAoYXJnLCAibm9uZSIpID09IDApKQorICAgIHsKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgICAgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciAgICA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciAgID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgIH0KKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIldFUCIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid2VwIikgPT0gMCkpCisgICAgeworICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzICAgICA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgICAgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwkgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciAgID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisgICAgfQorICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiVEtJUCIpID09IDApIHx8IChzdHJjbXAoYXJnLCAidGtpcCIpID09IDApKQorICAgIHsKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPCBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzICAgICA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciAgICA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgICA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisgICAgfQorICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiQUVTIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJhZXMiKSA9PSAwKSkKKyAgICB7CisgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworCSAgICBwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0VuY3J5cFR5cGVfUHJvYzo6KEVuY3J5cFR5cGU9JWQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cykpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IERlZmF1bHQgS2V5IElECisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0RlZmF1bHRLZXlJRF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5SWR4OworCisgICAgS2V5SWR4ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKyAgICBpZigoS2V5SWR4ID49IDEgKSAmJiAoS2V5SWR4IDw9IDQpKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChVQ0hBUikgKEtleUlkeCAtIDEgKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0RlZmF1bHRLZXlJRF9Qcm9jOjooRGVmYXVsdEtleUlEPSVkKVxuIiwgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXRVAgS0VZMQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9LZXkxX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlMZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGc9Q0lQSEVSX1dFUDY0OworCisgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgS2V5TGVuID0gc3RybGVuKGFyZyk7CisKKyAgICBzd2l0Y2ggKEtleUxlbikKKyAgICB7CisgICAgICAgIGNhc2UgNTogLy93ZXAgNDAgQXNjaWkgdHlwZQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBLZXlMZW47CisgICAgICAgICAgICBtZW1jcHkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIGFyZywgS2V5TGVuKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkxX1Byb2M6OihLZXkxPSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiQXNjaWkiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDogLy93ZXAgNDAgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTFfUHJvYzo6KEtleTE9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJIZXgiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMzogLy93ZXAgMTA0IEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTFfUHJvYzo6KEtleTE9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJBc2NpaSIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI2OiAvL3dlcCAxMDQgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkxX1Byb2M6OihLZXkxPSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiSGV4IikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vSW52YWxpZCBhcmd1bWVudAorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTFfUHJvYzo6SW52YWxpZCBhcmd1bWVudCAoPSVzKVxuIiwgYXJnKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKyAgICAvLyBTZXQga2V5cyAoaW50byBBU0lDKQorICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgOyAgIC8vIG5vdCBzdXBwb3J0CisgICAgZWxzZSAgICAvLyBPbGQgV0VQIHN0dWZmCisgICAgeworICAgICAgICBBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVswXS5LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFdFUCBLRVkyCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0tleTJfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleUxlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENpcGhlckFsZz1DSVBIRVJfV0VQNjQ7CisKKyAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgIHJldHVybiBUUlVFOyAgICAvLyBkbyBub3RoaW5nCisKKyAgICBLZXlMZW4gPSBzdHJsZW4oYXJnKTsKKworICAgIHN3aXRjaCAoS2V5TGVuKQorICAgIHsKKyAgICAgICAgY2FzZSA1OiAvL3dlcCA0MCBBc2NpaSB0eXBlCisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLktleUxlbiA9IEtleUxlbjsKKyAgICAgICAgICAgIG1lbWNweShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLktleSwgYXJnLCBLZXlMZW4pOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTJfUHJvYzo6KEtleTI9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJBc2NpaSIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEwOiAvL3dlcCA0MCBIZXggdHlwZQorICAgICAgICAgICAgZm9yKGk9MDsgaSA8IEtleUxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAhaXN4ZGlnaXQoKihhcmcraSkpICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOyAgLy9Ob3QgSGV4IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlMZW4gPSBLZXlMZW4gLyAyIDsKKyAgICAgICAgICAgIEF0b0goYXJnLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLktleSwgS2V5TGVuIC8gMik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5Ml9Qcm9jOjooS2V5Mj0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkhleCIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEzOiAvL3dlcCAxMDQgQXNjaWkgdHlwZQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlMZW4gPSBLZXlMZW47CisgICAgICAgICAgICBtZW1jcHkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXksIGFyZywgS2V5TGVuKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5Ml9Qcm9jOjooS2V5Mj0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkFzY2lpIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjY6IC8vd2VwIDEwNCBIZXggdHlwZQorICAgICAgICAgICAgZm9yKGk9MDsgaSA8IEtleUxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAhaXN4ZGlnaXQoKihhcmcraSkpICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOyAgLy9Ob3QgSGV4IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlMZW4gPSBLZXlMZW4gLyAyIDsKKyAgICAgICAgICAgIEF0b0goYXJnLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLktleSwgS2V5TGVuIC8gMik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTJfUHJvYzo6KEtleTI9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJIZXgiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLy9JbnZhbGlkIGFyZ3VtZW50CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5Ml9Qcm9jOjpJbnZhbGlkIGFyZ3VtZW50ICg9JXMpXG4iLCBhcmcpKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKyAgICAvLyBTZXQga2V5cyAoaW50byBBU0lDKQorICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgOyAgIC8vIG5vdCBzdXBwb3J0CisgICAgZWxzZSAgICAvLyBPbGQgV0VQIHN0dWZmCisgICAgeworICAgICAgICBBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uQ2lwaGVyQWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXRVAgS0VZMworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9LZXkzX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlMZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGc9Q0lQSEVSX1dFUDY0OworCisgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgS2V5TGVuID0gc3RybGVuKGFyZyk7CisKKyAgICBzd2l0Y2ggKEtleUxlbikKKyAgICB7CisgICAgICAgIGNhc2UgNTogLy93ZXAgNDAgQXNjaWkgdHlwZQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXlMZW4gPSBLZXlMZW47CisgICAgICAgICAgICBtZW1jcHkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXksIGFyZywgS2V5TGVuKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkzX1Byb2M6OihLZXkzPSVzIGFuZCB0eXBlPUFzY2lpKVxuIiwgYXJnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDogLy93ZXAgNDAgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTNfUHJvYzo6KEtleTM9JXMgYW5kIHR5cGU9SGV4KVxuIiwgYXJnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMzogLy93ZXAgMTA0IEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTNfUHJvYzo6KEtleTM9JXMgYW5kIHR5cGU9QXNjaWkpXG4iLCBhcmcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI2OiAvL3dlcCAxMDQgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkzX1Byb2M6OihLZXkzPSVzIGFuZCB0eXBlPUhleClcbiIsIGFyZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vSW52YWxpZCBhcmd1bWVudAorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTNfUHJvYzo6SW52YWxpZCBhcmd1bWVudCAoPSVzKVxuIiwgYXJnKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCisgICAgLy8gU2V0IGtleXMgKGludG8gQVNJQykKKyAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgIDsgICAvLyBub3Qgc3VwcG9ydAorICAgIGVsc2UgICAgLy8gT2xkIFdFUCBzdHVmZgorICAgIHsKKyAgICAgICAgQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLkNpcGhlckFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV0VQIEtFWTQKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfS2V5NF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5TGVuOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2lwaGVyQWxnPUNJUEhFUl9XRVA2NDsKKworICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgIEtleUxlbiA9IHN0cmxlbihhcmcpOworCisgICAgc3dpdGNoIChLZXlMZW4pCisgICAgeworICAgICAgICBjYXNlIDU6IC8vd2VwIDQwIEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5NF9Qcm9jOjooS2V5ND0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkFzY2lpIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTA6IC8vd2VwIDQwIEhleCB0eXBlCisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgS2V5TGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFpc3hkaWdpdCgqKGFyZytpKSkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvL05vdCBIZXggdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleUxlbiA9IEtleUxlbiAvIDIgOworICAgICAgICAgICAgQXRvSChhcmcsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5LCBLZXlMZW4gLyAyKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXk0X1Byb2M6OihLZXk0PSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiSGV4IikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTM6IC8vd2VwIDEwNCBBc2NpaSB0eXBlCisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleUxlbiA9IEtleUxlbjsKKyAgICAgICAgICAgIG1lbWNweShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleSwgYXJnLCBLZXlMZW4pOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXk0X1Byb2M6OihLZXk0PSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiQXNjaWkiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNjogLy93ZXAgMTA0IEhleCB0eXBlCisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgS2V5TGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFpc3hkaWdpdCgqKGFyZytpKSkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvL05vdCBIZXggdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleUxlbiA9IEtleUxlbiAvIDIgOworICAgICAgICAgICAgQXRvSChhcmcsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uS2V5LCBLZXlMZW4gLyAyKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5NF9Qcm9jOjooS2V5ND0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkhleCIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAvL0ludmFsaWQgYXJndW1lbnQKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXk0X1Byb2M6OkludmFsaWQgYXJndW1lbnQgKD0lcylcbiIsIGFyZykpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKworICAgIC8vIFNldCBrZXlzIChpbnRvIEFTSUMpCisgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICA7ICAgLy8gbm90IHN1cHBvcnQKKyAgICBlbHNlICAgIC8vIE9sZCBXRVAgc3R1ZmYKKyAgICB7CisgICAgICAgIEFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVszXS5DaXBoZXJBbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV1BBIFBTSyBrZXkKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfV1BBUFNLX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICBrZXlNYXRlcmlhbFs0MF07CisKKyAgICBpZiAoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSAmJgorICAgICAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSAmJgorCSAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQkpCisgICAgICAgIHJldHVybiBUUlVFOyAgICAvLyBkbyBub3RoaW5nCisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfV1BBUFNLX1Byb2M6OihXUEFQU0s9JXMpXG4iLCBhcmcpKTsKKworICAgIE5kaXNaZXJvTWVtb3J5KGtleU1hdGVyaWFsLCA0MCk7CisKKyAgICBpZiAoKHN0cmxlbihhcmcpIDwgOCkgfHwgKHN0cmxlbihhcmcpID4gNjQpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0IGZhaWxlZCEhKFdQQVBTSz0lcyksIFdQQVBTSyBrZXktc3RyaW5nIHJlcXVpcmVkIDggfiA2NCBjaGFyYWN0ZXJzIFxuIiwgYXJnKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoc3RybGVuKGFyZykgPT0gNjQpCisgICAgeworICAgICAgICBBdG9IKGFyZywga2V5TWF0ZXJpYWwsIDMyKTsKKyAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlN0YUNmZy5QTUssIGtleU1hdGVyaWFsLCAzMik7CisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgUGFzc3dvcmRIYXNoKChjaGFyICopYXJnLCBwQWRhcHRlci0+TWxtZUF1eC5Tc2lkLCBwQWRhcHRlci0+TWxtZUF1eC5Tc2lkTGVuLCBrZXlNYXRlcmlhbCk7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TdGFDZmcuUE1LLCBrZXlNYXRlcmlhbCwgMzIpOworICAgIH0KKworCisKKyAgICBpZihwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DICYmCisgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorICAgIHsKKyAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19OT1RVU0U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFN0YXJ0IFNUQSBzdXBwbGljYW50IHN0YXRlIG1hY2hpbmUKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1NUQVJUOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBQb3dlciBTYXZpbmcgbW9kZQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9QU01vZGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0lORlJBKQorICAgIHsKKyAgICAgICAgaWYgKChzdHJjbXAoYXJnLCAiTWF4X1BTUCIpID09IDApIHx8CisJCQkoc3RyY21wKGFyZywgIm1heF9wc3AiKSA9PSAwKSB8fAorCQkJKHN0cmNtcChhcmcsICJNQVhfUFNQIikgPT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRvIE5PVCB0dXJuIG9uIFBTTSBiaXQgaGVyZSwgd2FpdCB1bnRpbCBNbG1lQ2hlY2tGb3JQc21DaGFuZ2UoKQorICAgICAgICAgICAgLy8gdG8gZXhjbHVkZSBjZXJ0YWluIHNpdHVhdGlvbnMuCisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVNQVhfUFNQOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVNQVhfUFNQOworICAgICAgICAgICAgT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50ID0gNTsKKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiRmFzdF9QU1AiKSA9PSAwKSB8fAorCQkJCSAoc3RyY21wKGFyZywgImZhc3RfcHNwIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChhcmcsICJGQVNUX1BTUCIpID09IDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkbyBOT1QgdHVybiBvbiBQU00gYml0IGhlcmUsIHdhaXQgdW50aWwgTWxtZUNoZWNrRm9yUHNtQ2hhbmdlKCkKKyAgICAgICAgICAgIC8vIHRvIGV4Y2x1ZGUgY2VydGFpbiBzaXR1YXRpb25zLgorICAgICAgICAgICAgT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKyAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLmJXaW5kb3dzQUNDQU1FbmFibGUgPT0gRkFMU0UpCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUDsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50ID0gMzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIkxlZ2FjeV9QU1AiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGFyZywgImxlZ2FjeV9wc3AiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGFyZywgIkxFR0FDWV9QU1AiKSA9PSAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZG8gTk9UIHR1cm4gb24gUFNNIGJpdCBoZXJlLCB3YWl0IHVudGlsIE1sbWVDaGVja0ZvclBzbUNoYW5nZSgpCisgICAgICAgICAgICAvLyB0byBleGNsdWRlIGNlcnRhaW4gc2l0dWF0aW9ucy4KKyAgICAgICAgICAgIE9QU1RBVFVTX1NFVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVMZWdhY3lfUFNQOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQgPSAzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy9EZWZhdWx0IE5kaXM4MDJfMTFQb3dlck1vZGVDQU0KKyAgICAgICAgICAgIC8vIGNsZWFyIFBTTSBiaXQgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgIE1sbWVTZXRQc21CaXQocEFkYXB0ZXIsIFBXUl9BQ1RJVkUpOworICAgICAgICAgICAgT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKyAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLmJXaW5kb3dzQUNDQU1FbmFibGUgPT0gRkFMU0UpCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTTsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOworICAgICAgICB9CisKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1BTTW9kZV9Qcm9jOjooUFNNb2RlPSVsZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBGQUxTRTsKKworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXcGFTdXBwb3J0IGZsYWcuCisgICAgVmFsdWU6CisgICAgICAgIDA6IERyaXZlciBpZ25vcmUgd3BhX3N1cHBsaWNhbnQuCisgICAgICAgIDE6IHdwYV9zdXBwbGljYW50IGluaXRpYXRlcyBzY2FubmluZyBhbmQgQVAgc2VsZWN0aW9uLgorICAgICAgICAyOiBkcml2ZXIgdGFrZXMgY2FyZSBvZiBzY2FubmluZywgQVAgc2VsZWN0aW9uLCBhbmQgSUVFRSA4MDIuMTEgYXNzb2NpYXRpb24gcGFyYW1ldGVycy4KKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfV3BhX1N1cHBvcnQoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisgICAgaWYgKCBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID09IDApCisgICAgICAgIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEU7CisgICAgZWxzZSBpZiAoIHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMSkKKyAgICAgICAgcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFOworICAgIGVsc2UgaWYgKCBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID09IDIpCisgICAgICAgIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0VOQUJMRV9XSVRIX1dFQl9VSTsKKyAgICBlbHNlCisgICAgICAgIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEU7CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfV3BhX1N1cHBvcnQ6OihXcGFTdXBwbGljYW50VVA9JWQpXG4iLCBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApKTsKKworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIERCRworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBSZWFkIC8gV3JpdGUgTUFDCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWRhcHRlciAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgICAgICB3cnEgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW9jdGwgYXJndW1lbnQKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICAgICAxLikgaXdwcml2IHJhMCBtYWMgMCAgICAgICAgPT0+IHJlYWQgTUFDIHdoZXJlIEFkZHI9MHgwCisgICAgICAgICAgICAgICAyLikgaXdwcml2IHJhMCBtYWMgMD0xMiAgICAgPT0+IHdyaXRlIE1BQyB3aGVyZSBBZGRyPTB4MCwgdmFsdWU9MTIKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUElvY3RsTUFDKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4Jc3RydWN0IGl3cmVxCSp3cnEpCit7CisJQ0hBUgkJCQkqdGhpc19jaGFyOworCUNIQVIJCQkJKnZhbHVlOworCUlOVAkJCQkJaiA9IDAsIGsgPSAwOworCUNIQVIJCQkJbXNnWzEwMjRdOworCUNIQVIJCQkJYXJnWzI1NV07CisJVUxPTkcJCQkJbWFjQWRkciA9IDA7CisJVUNIQVIJCQkJdGVtcFsxNl0sIHRlbXAyWzE2XTsKKwlVSU5UMzIJCQkJbWFjVmFsdWUgPSAwOworCUlOVAkJCQkJU3RhdHVzOworCUJPT0xFQU4JCQkJYklzUHJpbnRBbGxNQUMgPSBGQUxTRTsKKworCisJbWVtc2V0KG1zZywgMHgwMCwgMTAyNCk7CisJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDEpIC8vTm8gcGFyYW1ldGVycy4KKwl7CisJICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKGFyZywgd3JxLT51LmRhdGEucG9pbnRlciwgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDI1NSkgPyAyNTUgOiB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQlzcHJpbnRmKG1zZywgIlxuIik7CisKKwkJLy9QYXJzaW5nIFJlYWQgb3IgV3JpdGUKKwkgICAgdGhpc19jaGFyID0gYXJnOworCQlpZiAoISp0aGlzX2NoYXIpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKCh2YWx1ZSA9IHJ0c3RyY2hyKHRoaXNfY2hhciwgJz0nKSkgIT0gTlVMTCkKKwkJCSp2YWx1ZSsrID0gMDsKKworCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpCisJCXsgLy9SZWFkCisJCQkvLyBTYW5pdHkgY2hlY2sKKwkJCWlmKHN0cmxlbih0aGlzX2NoYXIpID4gNCkKKwkJCQlnb3RvIG5leHQ7CisKKwkJCWogPSBzdHJsZW4odGhpc19jaGFyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJaWYodGhpc19jaGFyW2pdID4gJ2YnIHx8IHRoaXNfY2hhcltqXSA8ICcwJykKKwkJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBNYWMgQWRkcgorCQkJayA9IGogPSBzdHJsZW4odGhpc19jaGFyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJdGhpc19jaGFyWzQtaytqXSA9IHRoaXNfY2hhcltqXTsKKwkJCX0KKworCQkJd2hpbGUoayA8IDQpCisJCQkJdGhpc19jaGFyWzMtaysrXT0nMCc7CisJCQl0aGlzX2NoYXJbNF09J1wwJzsKKworCQkJaWYoc3RybGVuKHRoaXNfY2hhcikgPT0gNCkKKwkJCXsKKwkJCQlBdG9IKHRoaXNfY2hhciwgdGVtcCwgMik7CisJCQkJbWFjQWRkciA9ICp0ZW1wKjI1NiArIHRlbXBbMV07CisJCQkJaWYgKG1hY0FkZHIgPCAweEZGRkYpCisJCQkJeworCQkJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgbWFjQWRkciwgJm1hY1ZhbHVlKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFjQWRkcj0lbHgsIE1hY1ZhbHVlPSV4XG4iLCBtYWNBZGRyLCBtYWNWYWx1ZSkpOworCQkJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlsweCUwOGxYXTolMDhYICAiLCBtYWNBZGRyICwgbWFjVmFsdWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBtYWMKKwkJCQkJYklzUHJpbnRBbGxNQUMgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeyAvL1dyaXRlCisJCQltZW1jcHkoJnRlbXAyLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7CisJCQl0ZW1wMltzdHJsZW4odmFsdWUpXSA9ICdcMCc7CisKKwkJCS8vIFNhbml0eSBjaGVjaworCQkJaWYoKHN0cmxlbih0aGlzX2NoYXIpID4gNCkgfHwgc3RybGVuKHRlbXAyKSA+IDgpCisJCQkJZ290byBuZXh0OworCisJCQlqID0gc3RybGVuKHRoaXNfY2hhcik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCWlmKHRoaXNfY2hhcltqXSA+ICdmJyB8fCB0aGlzX2NoYXJbal0gPCAnMCcpCisJCQkJCXJldHVybjsKKwkJCX0KKworCQkJaiA9IHN0cmxlbih0ZW1wMik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCWlmKHRlbXAyW2pdID4gJ2YnIHx8IHRlbXAyW2pdIDwgJzAnKQorCQkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vTUFDIEFkZHIKKwkJCWsgPSBqID0gc3RybGVuKHRoaXNfY2hhcik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCXRoaXNfY2hhcls0LWsral0gPSB0aGlzX2NoYXJbal07CisJCQl9CisKKwkJCXdoaWxlKGsgPCA0KQorCQkJCXRoaXNfY2hhclszLWsrK109JzAnOworCQkJdGhpc19jaGFyWzRdPSdcMCc7CisKKwkJCS8vTUFDIHZhbHVlCisJCQlrID0gaiA9IHN0cmxlbih0ZW1wMik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCXRlbXAyWzgtaytqXSA9IHRlbXAyW2pdOworCQkJfQorCisJCQl3aGlsZShrIDwgOCkKKwkJCQl0ZW1wMls3LWsrK109JzAnOworCQkJdGVtcDJbOF09J1wwJzsKKworCQkJeworCQkJCUF0b0godGhpc19jaGFyLCB0ZW1wLCAyKTsKKwkJCQltYWNBZGRyID0gKnRlbXAqMjU2ICsgdGVtcFsxXTsKKworCQkJCUF0b0godGVtcDIsIHRlbXAsIDQpOworCQkJCW1hY1ZhbHVlID0gKnRlbXAqMjU2KjI1NioyNTYgKyB0ZW1wWzFdKjI1NioyNTYgKyB0ZW1wWzJdKjI1NiArIHRlbXBbM107CisKKwkJCQkvLyBkZWJ1ZyBtb2RlCisJCQkJaWYgKG1hY0FkZHIgPT0gKEhXX0RFQlVHX1NFVFRJTkdfQkFTRSArIDQpKQorCQkJCXsKKwkJCQkJLy8gMHgyYmY0OiBieXRlMCBub24temVybzogZW5hYmxlIFIxNyB0dW5pbmcsIDA6IGRpc2FibGUgUjE3IHR1bmluZworICAgICAgICAgICAgICAgICAgICBpZiAobWFjVmFsdWUgJiAweDAwMDAwMGZmKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+QmJwVHVuaW5nLmJFbmFibGUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJ0dXJuIG9uIFIxNyB0dW5pbmdcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSIFI2NjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5CYnBUdW5pbmcuYkVuYWJsZSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgUjY2ID0gMHgyNiArIEdFVF9MTkFfR0FJTihwQWRhcHRlcik7CisjaWZkZWYgUkFMSU5LX0FURQorCQkJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJCQl7CisJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjY2LCAoMHgyNiArIEdFVF9MTkFfR0FJTihwQWRhcHRlcikpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjY2LCAoMHgyNiArIEdFVF9MTkFfR0FJTihwQWRhcHRlcikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgidHVybiBvZmYgUjE3IHR1bmluZywgcmVzdG9yZSB0byAweCUwMnhcbiIsIFI2NikpOworICAgICAgICAgICAgICAgICAgICB9CisJCQkJCXJldHVybjsKKwkJCQl9CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNBZGRyPSUwMmx4LCBNYWNWYWx1ZT0weCV4XG4iLCBtYWNBZGRyLCBtYWNWYWx1ZSkpOworCisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBtYWNBZGRyLCBtYWNWYWx1ZSk7CisJCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICJbMHglMDhsWF06JTA4WCAgIiwgbWFjQWRkciwgbWFjVmFsdWUpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwkJYklzUHJpbnRBbGxNQUMgPSBUUlVFOworbmV4dDoKKwlpZiAoYklzUHJpbnRBbGxNQUMpCisJeworCQlzdHJ1Y3QgZmlsZQkJKmZpbGVfdzsKKwkJUENIQVIJCQlmaWxlTmFtZSA9ICJNYWNEdW1wLnR4dCI7CisJCW1tX3NlZ21lbnRfdAlvcmlnX2ZzOworCisJCW9yaWdfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwkJLy8gb3BlbiBmaWxlCisJCWZpbGVfdyA9IGZpbHBfb3BlbihmaWxlTmFtZSwgT19XUk9OTFl8T19DUkVBVCwgMCk7CisJCWlmIChJU19FUlIoZmlsZV93KSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+MikgJXM6IEVycm9yICVsZCBvcGVuaW5nICVzXG4iLCBfX0ZVTkNUSU9OX18sIC1QVFJfRVJSKGZpbGVfdyksIGZpbGVOYW1lKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoZmlsZV93LT5mX29wICYmIGZpbGVfdy0+Zl9vcC0+d3JpdGUpCisJCQl7CisJCQkJZmlsZV93LT5mX3BvcyA9IDA7CisJCQkJbWFjQWRkciA9IDB4MTAwMDsKKworCQkJCXdoaWxlIChtYWNBZGRyIDw9IDB4MTgwMCkKKwkJCQl7CisJCQkJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBtYWNBZGRyLCAmbWFjVmFsdWUpOworCQkJCQlzcHJpbnRmKG1zZywgIiUwOGx4ID0gJTA4WFxuIiwgbWFjQWRkciwgbWFjVmFsdWUpOworCisJCQkJCS8vIHdyaXRlIGRhdGEgdG8gZmlsZQorCQkJCQlmaWxlX3ctPmZfb3AtPndyaXRlKGZpbGVfdywgbXNnLCBzdHJsZW4obXNnKSwgJmZpbGVfdy0+Zl9wb3MpOworCisJCQkJCXByaW50aygiJXMiLCBtc2cpOworCQkJCQltYWNBZGRyICs9IDQ7CisJCQkJfQorCQkJCXNwcmludGYobXNnLCAiXG5EdW1wIGFsbCBNQUMgdmFsdWVzIHRvICVzXG4iLCBmaWxlTmFtZSk7CisJCQl9CisJCQlmaWxwX2Nsb3NlKGZpbGVfdywgTlVMTCk7CisJCX0KKwkJc2V0X2ZzKG9yaWdfZnMpOworCX0KKwlpZihzdHJsZW4obXNnKSA9PSAxKQorCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIj09PT5FcnJvciBjb21tYW5kIGZvcm1hdCEiKTsKKworCS8vIENvcHkgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlIHVzZXIgYnVmZmVyCisJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CisJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIG1zZywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PVJUTVBJb2N0bE1BQ1xuXG4iKSk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmVhZCAvIFdyaXRlIEUyUFJPTQorICAgIEFyZ3VtZW50czoKKyAgICAgICAgcEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICAgICAgd3JxICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgIE5vdGU6CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgICAgMS4pIGl3cHJpdiByYTAgZTJwIDAgICAgIAk9PT4gcmVhZCBFMlBST00gd2hlcmUgQWRkcj0weDAKKyAgICAgICAgICAgICAgIDIuKSBpd3ByaXYgcmEwIGUycCAwPTEyMzQgICAgPT0+IHdyaXRlIEUyUFJPTSB3aGVyZSBBZGRyPTB4MCwgdmFsdWU9MTIzNAorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QSW9jdGxFMlBST00oCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSkKK3sKKwlDSEFSCQkJCSp0aGlzX2NoYXI7CisJQ0hBUgkJCQkqdmFsdWU7CisJSU5UCQkJCQlqID0gMCwgayA9IDA7CisJQ0hBUgkJCQltc2dbMTAyNF07CisJQ0hBUgkJCQlhcmdbMjU1XTsKKwlVU0hPUlQJCQkJZWVwQWRkciA9IDA7CisJVUNIQVIJCQkJdGVtcFsxNl0sIHRlbXAyWzE2XTsKKwlVU0hPUlQJCQkJZWVwVmFsdWU7CisJaW50CQkJCQlTdGF0dXM7CisJQk9PTEVBTgkJCQliSXNQcmludEFsbEUyUCA9IEZBTFNFOworCisKKwltZW1zZXQobXNnLCAweDAwLCAxMDI0KTsKKwlpZiAod3JxLT51LmRhdGEubGVuZ3RoID4gMSkgLy9ObyBwYXJhbWV0ZXJzLgorCXsKKwkgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoYXJnLCB3cnEtPnUuZGF0YS5wb2ludGVyLCAod3JxLT51LmRhdGEubGVuZ3RoID4gMjU1KSA/IDI1NSA6IHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCXNwcmludGYobXNnLCAiXG4iKTsKKworCSAgICAvL1BhcnNpbmcgUmVhZCBvciBXcml0ZQorCQl0aGlzX2NoYXIgPSBhcmc7CisKKworCQlpZiAoISp0aGlzX2NoYXIpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKCh2YWx1ZSA9IHJ0c3RyY2hyKHRoaXNfY2hhciwgJz0nKSkgIT0gTlVMTCkKKwkJCSp2YWx1ZSsrID0gMDsKKworCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpCisJCXsgLy9SZWFkCisKKwkJCS8vIFNhbml0eSBjaGVjaworCQkJaWYoc3RybGVuKHRoaXNfY2hhcikgPiA0KQorCQkJCWdvdG8gbmV4dDsKKworCQkJaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQlpZih0aGlzX2NoYXJbal0gPiAnZicgfHwgdGhpc19jaGFyW2pdIDwgJzAnKQorCQkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIEUyUFJPTSBhZGRyCisJCQlrID0gaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQl0aGlzX2NoYXJbNC1rK2pdID0gdGhpc19jaGFyW2pdOworCQkJfQorCisJCQl3aGlsZShrIDwgNCkKKwkJCQl0aGlzX2NoYXJbMy1rKytdPScwJzsKKwkJCXRoaXNfY2hhcls0XT0nXDAnOworCisJCQlpZihzdHJsZW4odGhpc19jaGFyKSA9PSA0KQorCQkJeworCQkJCUF0b0godGhpc19jaGFyLCB0ZW1wLCAyKTsKKwkJCQllZXBBZGRyID0gKnRlbXAqMjU2ICsgdGVtcFsxXTsKKwkJCQlpZiAoZWVwQWRkciA8IDB4RkZGRikKKwkJCQl7CisJCQkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZGFwdGVyLCBlZXBBZGRyLCBlZXBWYWx1ZSk7CisJCQkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCAiWzB4JTA0WF06MHglMDRYICAiLCBlZXBBZGRyICwgZWVwVmFsdWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBiYnAKKwkJCQkJYklzUHJpbnRBbGxFMlAgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeyAvL1dyaXRlCisJCQltZW1jcHkoJnRlbXAyLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7CisJCQl0ZW1wMltzdHJsZW4odmFsdWUpXSA9ICdcMCc7CisKKwkJCS8vIFNhbml0eSBjaGVjaworCQkJaWYoKHN0cmxlbih0aGlzX2NoYXIpID4gNCkgfHwgc3RybGVuKHRlbXAyKSA+IDgpCisJCQkJZ290byBuZXh0OworCisJCQlqID0gc3RybGVuKHRoaXNfY2hhcik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCWlmKHRoaXNfY2hhcltqXSA+ICdmJyB8fCB0aGlzX2NoYXJbal0gPCAnMCcpCisJCQkJCXJldHVybjsKKwkJCX0KKwkJCWogPSBzdHJsZW4odGVtcDIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQlpZih0ZW1wMltqXSA+ICdmJyB8fCB0ZW1wMltqXSA8ICcwJykKKwkJCQkJcmV0dXJuOworCQkJfQorCisJCQkvL01BQyBBZGRyCisJCQlrID0gaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQl0aGlzX2NoYXJbNC1rK2pdID0gdGhpc19jaGFyW2pdOworCQkJfQorCisJCQl3aGlsZShrIDwgNCkKKwkJCQl0aGlzX2NoYXJbMy1rKytdPScwJzsKKwkJCXRoaXNfY2hhcls0XT0nXDAnOworCisJCQkvL01BQyB2YWx1ZQorCQkJayA9IGogPSBzdHJsZW4odGVtcDIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQl0ZW1wMls0LWsral0gPSB0ZW1wMltqXTsKKwkJCX0KKworCQkJd2hpbGUoayA8IDQpCisJCQkJdGVtcDJbMy1rKytdPScwJzsKKwkJCXRlbXAyWzRdPSdcMCc7CisKKwkJCUF0b0godGhpc19jaGFyLCB0ZW1wLCAyKTsKKwkJCWVlcEFkZHIgPSAqdGVtcCoyNTYgKyB0ZW1wWzFdOworCisJCQlBdG9IKHRlbXAyLCB0ZW1wLCAyKTsKKwkJCWVlcFZhbHVlID0gKnRlbXAqMjU2ICsgdGVtcFsxXTsKKworCQkJUlQyOHh4X0VFUFJPTV9XUklURTE2KHBBZGFwdGVyLCBlZXBBZGRyLCBlZXBWYWx1ZSk7CisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlsweCUwMlhdOiUwMlggICIsIGVlcEFkZHIsIGVlcFZhbHVlKTsKKwkJfQorCX0KKwllbHNlCisJCWJJc1ByaW50QWxsRTJQID0gVFJVRTsKK25leHQ6CisJaWYgKGJJc1ByaW50QWxsRTJQKQorCXsKKwkJc3RydWN0IGZpbGUJCSpmaWxlX3c7CisJCVBDSEFSCQkJZmlsZU5hbWUgPSAiRUVQUk9NRHVtcC50eHQiOworCQltbV9zZWdtZW50X3QJb3JpZ19mczsKKworCQlvcmlnX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCisJCS8vIG9wZW4gZmlsZQorCQlmaWxlX3cgPSBmaWxwX29wZW4oZmlsZU5hbWUsIE9fV1JPTkxZfE9fQ1JFQVQsIDApOworCQlpZiAoSVNfRVJSKGZpbGVfdykpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPjIpICVzOiBFcnJvciAlbGQgb3BlbmluZyAlc1xuIiwgX19GVU5DVElPTl9fLCAtUFRSX0VSUihmaWxlX3cpLCBmaWxlTmFtZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGZpbGVfdy0+Zl9vcCAmJiBmaWxlX3ctPmZfb3AtPndyaXRlKQorCQkJeworCQkJCWZpbGVfdy0+Zl9wb3MgPSAwOworCQkJCWVlcEFkZHIgPSAweDAwOworCisJCQkJd2hpbGUgKGVlcEFkZHIgPD0gMHhGRSkKKwkJCQl7CisJCQkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZGFwdGVyLCBlZXBBZGRyLCBlZXBWYWx1ZSk7CisJCQkJCXNwcmludGYobXNnLCAiJTA4eCA9ICUwNHhcbiIsIGVlcEFkZHIgLCBlZXBWYWx1ZSk7CisKKwkJCQkJLy8gd3JpdGUgZGF0YSB0byBmaWxlCisJCQkJCWZpbGVfdy0+Zl9vcC0+d3JpdGUoZmlsZV93LCBtc2csIHN0cmxlbihtc2cpLCAmZmlsZV93LT5mX3Bvcyk7CisKKwkJCQkJcHJpbnRrKCIlcyIsIG1zZyk7CisJCQkJCWVlcEFkZHIgKz0gMjsKKwkJCQl9CisJCQkJc3ByaW50Zihtc2csICJcbkR1bXAgYWxsIEVFUFJPTSB2YWx1ZXMgdG8gJXNcbiIsIGZpbGVOYW1lKTsKKwkJCX0KKwkJCWZpbHBfY2xvc2UoZmlsZV93LCBOVUxMKTsKKwkJfQorCQlzZXRfZnMob3JpZ19mcyk7CisJfQorCWlmKHN0cmxlbihtc2cpID09IDEpCisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCAiPT09PkVycm9yIGNvbW1hbmQgZm9ybWF0ISIpOworCisKKwkvLyBDb3B5IHRoZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSB1c2VyIGJ1ZmZlcgorCXdycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihtc2cpOworCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT1SVE1QSW9jdGxFMlBST01cbiIpKTsKK30KKyNpZmRlZiBSVDMweHgKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmVhZCAvIFdyaXRlIFJGIHJlZ2lzdGVyCitBcmd1bWVudHM6CisgICAgcEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICB3cnEgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW9jdGwgYXJndW1lbnQKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICAgICAxLikgaXdwcml2IHJhMCByZiAgICAgICAgICAgICAgICA9PT4gcmVhZCBhbGwgUkYgcmVnaXN0ZXJzCisgICAgICAgICAgICAgICAyLikgaXdwcml2IHJhMCByZiAxICAgICAgICAgICAgICA9PT4gcmVhZCBSRiB3aGVyZSBSZWdJRD0xCisgICAgICAgICAgICAgICAzLikgaXdwcml2IHJhMCByZiAxPTEwCQkgICAgPT0+IHdyaXRlIFJGIFIxPTB4MTAKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUElvY3RsUkYoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSkKK3sKKwlDSEFSCQkJCSp0aGlzX2NoYXI7CisJQ0hBUgkJCQkqdmFsdWU7CisJVUNIQVIJCQkJcmVnUkYgPSAwOworCUNIQVIJCQkJbXNnWzIwNDhdOworCUNIQVIJCQkJYXJnWzI1NV07CisJSU5UCQkJCQlyZklkOworCUxPTkcJCQkJcmZWYWx1ZTsKKwlpbnQJCQkJCVN0YXR1czsKKwlCT09MRUFOCQkJCWJJc1ByaW50QWxsUkYgPSBGQUxTRTsKKworCisJbWVtc2V0KG1zZywgMHgwMCwgMjA0OCk7CisJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDEpIC8vTm8gcGFyYW1ldGVycy4KKwl7CisJICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKGFyZywgd3JxLT51LmRhdGEucG9pbnRlciwgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDI1NSkgPyAyNTUgOiB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQlzcHJpbnRmKG1zZywgIlxuIik7CisKKwkgICAgLy9QYXJzaW5nIFJlYWQgb3IgV3JpdGUKKwkJdGhpc19jaGFyID0gYXJnOworCQlpZiAoISp0aGlzX2NoYXIpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKCh2YWx1ZSA9IHN0cmNocih0aGlzX2NoYXIsICc9JykpICE9IE5VTEwpCisJCQkqdmFsdWUrKyA9IDA7CisKKwkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKQorCQl7IC8vUmVhZAorCQkJaWYgKHNzY2FuZih0aGlzX2NoYXIsICIlZCIsICYocmZJZCkpID09IDEpCisJCQl7CisJCQkJaWYgKHJmSWQgPD0gMzEpCisJCQkJeworCQkJCQkvLyBJbiBSVDI4NjAgQVRFIG1vZGUsIHdlIGRvIG5vdCBsb2FkIDgwNTEgZmlybXdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vV2UgbXVzdCBhY2Nlc3MgUkYgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBSVDI4NzAgQVRFIG1vZGUsIEFURV9SRl9JT19XUklURTgoL1JFQUQ4KV9CWV9SRUdfSUQgYXJlIHJlZGVmaW5lZC4KKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJCQl7CisJCQkJCQlBVEVfUkZfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCByZklkLCAmcmVnUkYpOworCQkJCQl9CisJCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCQkJCS8vIGFjY29yZGluZyB0byBBbmR5LCBHYXJ5LCBEYXZpZCByZXF1aXJlLgorCQkJCQkvLyB0aGUgY29tbWFuZCByZiBzaGFsbCByZWFkIHJmIHJlZ2lzdGVyIGRpcmVjdGx5IGZvciBkdWJ1Zy4KKwkJCQkJLy8gQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKworCQkJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlIlMDJkWzB4JTAyeF06JTAyWCAgIiwgcmZJZCwgcmZJZCoyLCByZWdSRik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7Ly9JbnZhbGlkIHBhcmFtZXRlcywgc28gZGVmYXVsdCBwcmludGsgYWxsIFJGCisJCQkJCWJJc1ByaW50QWxsUkYgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeyAvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgUkYKKwkJCQliSXNQcmludEFsbFJGID0gVFJVRTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7IC8vV3JpdGUKKwkJCWlmICgoc3NjYW5mKHRoaXNfY2hhciwgIiVkIiwgJihyZklkKSkgPT0gMSkgJiYgKHNzY2FuZih2YWx1ZSwgIiVseCIsICYocmZWYWx1ZSkpID09IDEpKQorCQkJeworCQkJCWlmIChyZklkIDw9IDMxKQorCQkJCXsKKwkJCQkJLy8gSW4gUlQyODYwIEFURSBtb2RlLCB3ZSBkbyBub3QgbG9hZCA4MDUxIGZpcm13YXJlLgorCQkJCQkvLyBXZSBzaG91bGQgYWNjZXNzIFJGIHJlZ2lzdGVycyBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIFJUMjg3MCBBVEUgbW9kZSwgQVRFX1JGX0lPX1dSSVRFOC9SRUFEOF9CWV9SRUdfSUQgYXJlIHJlZGVmaW5lZC4KKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQkJCXsKKwkJCQkJCQlBVEVfUkZfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCByZklkLCAmcmVnUkYpOworCQkJCQkJCUFURV9SRl9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCAoVUNIQVIpcmZJZCwoVUNIQVIpIHJmVmFsdWUpOworCQkJCQkJCS8vUmVhZCBpdCBiYWNrIGZvciBzaG93aW5nCisJCQkJCQkJQVRFX1JGX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKwkJCQkJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlIlMDJkWzB4JTAyWF06JTAyWFxuIiwgcmZJZCwgcmZJZCoyLCByZWdSRik7CisJCQkJCQl9CisJCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJCQkJeworCQkJCQkJCS8vIGFjY29yZGluZyB0byBBbmR5LCBHYXJ5LCBEYXZpZCByZXF1aXJlLgorCQkJCQkJCS8vIHRoZSBjb21tYW5kIFJGIHNoYWxsIHJlYWQvd3JpdGUgUkYgcmVnaXN0ZXIgZGlyZWN0bHkgZm9yIGR1YnVnLgorCQkJCQkJCS8vQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJCQkgICAgICAgICAgICAgICAgLy9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgKFVDSEFSKWJicElkLChVQ0hBUikgYmJwVmFsdWUpOworCQkJCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZGFwdGVyLCByZklkLCAmcmVnUkYpOworCQkJCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWRhcHRlciwgKFVDSEFSKXJmSWQsKFVDSEFSKSByZlZhbHVlKTsKKwkJCQkJICAgICAgICAgICAgICAgIC8vUmVhZCBpdCBiYWNrIGZvciBzaG93aW5nCisJCQkJCQkJLy9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgJnJlZ0JCUCk7CisJCQkJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkYXB0ZXIsIHJmSWQsICZyZWdSRik7CisJCQkJCSAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlIlMDJkWzB4JTAyWF06JTAyWFxuIiwgcmZJZCwgcmZJZCoyLCByZWdSRik7CisJCQkJICAgICAgICAgICAgICAgIH0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgUkYKKwkJCQkJYklzUHJpbnRBbGxSRiA9IFRSVUU7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeyAvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgUkYKKwkJCQliSXNQcmludEFsbFJGID0gVFJVRTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJCWJJc1ByaW50QWxsUkYgPSBUUlVFOworbmV4dDoKKwlpZiAoYklzUHJpbnRBbGxSRikKKwl7CisJCW1lbXNldChtc2csIDB4MDAsIDIwNDgpOworCQlzcHJpbnRmKG1zZywgIlxuIik7CisJCWZvciAocmZJZCA9IDA7IHJmSWQgPD0gMzE7IHJmSWQrKykKKwkJeworCQkJLy8gSW4gUlQyODYwIEFURSBtb2RlLCB3ZSBkbyBub3QgbG9hZCA4MDUxIGZpcm13YXJlLgorICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFjY2VzcyBSRiByZWdpc3RlcnMgZGlyZWN0bHkuCisgICAgICAgICAgICAvLyBGb3IgUlQyODcwIEFURSBtb2RlLCBBVEVfUkZfSU9fV1JJVEU4L1JFQUQ4X0JZX1JFR19JRCBhcmUgcmVkZWZpbmVkLgorI2lmZGVmIFJBTElOS19BVEUKKwkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQl7CisJCQkJCUFURV9SRl9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIHJmSWQsICZyZWdSRik7CisJCQkJfQorCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwkJCS8vIGFjY29yZGluZyB0byBBbmR5LCBHYXJ5LCBEYXZpZCByZXF1aXJlLgorCQkJLy8gdGhlIGNvbW1hbmQgUkYgc2hhbGwgcmVhZC93cml0ZSBSRiByZWdpc3RlciBkaXJlY3RseSBmb3IgZHVidWcuCisJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCAiJTAzZCA9ICUwMlhcbiIsIHJmSWQsIHJlZ1JGKTsKKwkJfQorCQkvLyBDb3B5IHRoZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSB1c2VyIGJ1ZmZlcgorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJzdHJsZW4obXNnKT0lZFxuIiwgKFVJTlQzMilzdHJsZW4obXNnKSkpOworCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKKwkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOiBjb3B5X3RvX3VzZXIoKSBmYWlsXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZihzdHJsZW4obXNnKSA9PSAxKQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICI9PT0+RXJyb3IgY29tbWFuZCBmb3JtYXQhIik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiY29weSB0byB1c2VyIFttc2c9JXNdXG4iLCBtc2cpKTsKKwkJLy8gQ29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgdXNlciBidWZmZXIKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgic3RybGVuKG1zZykgPSVkXG4iLCAoVUlOVDMyKXN0cmxlbihtc2cpKSk7CisKKwkJLy8gQ29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgdXNlciBidWZmZXIKKwkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CisJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09UlRNUElvY3RsUkZcblxuIikpOworfQorI2VuZGlmIC8vIFJUMzB4eCAvLworI2VuZGlmIC8vIERCRyAvLworCisKKworCitJTlQgU2V0X1RHbldpZmlUZXN0X1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaWYgKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMCkKKyAgICAgICAgcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0ID0gRkFMU0U7CisgICAgZWxzZQorICAgICAgICBwQWQtPlN0YUNmZy5iVEduV2lmaVRlc3QgPSBUUlVFOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUYgU2V0X1RHbldpZmlUZXN0X1Byb2M6OihiVEduV2lmaVRlc3Q9JWQpXG4iLCBwQWQtPlN0YUNmZy5iVEduV2lmaVRlc3QpKTsKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UIFNldF9Mb25nUmV0cnlMaW1pdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVRYX1JUWV9DRkdfU1RSVUMJdHhfcnR5X2NmZzsKKwlVQ0hBUgkJCQlMb25nUmV0cnlMaW1pdCA9IChVQ0hBUilzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsICZ0eF9ydHlfY2ZnLndvcmQpOworCXR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0ID0gTG9uZ1JldHJ5TGltaXQ7CisJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCB0eF9ydHlfY2ZnLndvcmQpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklGIFNldF9Mb25nUmV0cnlMaW1pdF9Qcm9jOjoodHhfcnR5X2NmZz0weCV4KVxuIiwgdHhfcnR5X2NmZy53b3JkKSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfU2hvcnRSZXRyeUxpbWl0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVFhfUlRZX0NGR19TVFJVQwl0eF9ydHlfY2ZnOworCVVDSEFSCQkJCVNob3J0UmV0cnlMaW1pdCA9IChVQ0hBUilzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsICZ0eF9ydHlfY2ZnLndvcmQpOworCXR4X3J0eV9jZmcuZmllbGQuU2hvcnRSdHlMaW1pdCA9IFNob3J0UmV0cnlMaW1pdDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsIHR4X3J0eV9jZmcud29yZCk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUYgU2V0X1Nob3J0UmV0cnlMaW1pdF9Qcm9jOjoodHhfcnR5X2NmZz0weCV4KVxuIiwgdHhfcnR5X2NmZy53b3JkKSk7CisJcmV0dXJuIFRSVUU7Cit9CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCitJTlQgU2V0X0llZWU4MDIxMWRDbGllbnRNb2RlX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpZiAoc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA9PSAwKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlID0gUnQ4MDJfMTFfRF9Ob25lOworICAgIGVsc2UgaWYgKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMTFkQ2xpZW50TW9kZSA9IFJ0ODAyXzExX0RfRmxleGlibGU7CisgICAgZWxzZSBpZiAoc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA9PSAyKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlID0gUnQ4MDJfMTFfRF9TdHJpY3Q7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSWVlZTgwMmRNb2RlX1Byb2M6OihJRUVFRTAyMTFkTW9kZT0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUCitJTlQgU2V0X0NhcnJpZXJEZXRlY3RfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpZiAoc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA9PSAwKQorICAgICAgICBwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9IEZBTFNFOworICAgIGVsc2UKKyAgICAgICAgcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPSBUUlVFOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUYgU2V0X0NhcnJpZXJEZXRlY3RfUHJvYzo6KENhcnJpZXJEZXRlY3QuRW5hYmxlPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUpKTsKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvd3BhLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3dwYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzdjOGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3dwYS5oCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXdwYS5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisqLworCisjaWZuZGVmCV9fV1BBX0hfXworI2RlZmluZQlfX1dQQV9IX18KKworLy8gRUFQT0wgS2V5IGRlc2NyaXB0ZXIgZnJhbWUgZm9ybWF0IHJlbGF0ZWQgbGVuZ3RoCisjZGVmaW5lIExFTl9LRVlfREVTQ19OT05DRQkJCTMyCisjZGVmaW5lIExFTl9LRVlfREVTQ19JVgkJCQkxNgorI2RlZmluZSBMRU5fS0VZX0RFU0NfUlNDCQkJOAorI2RlZmluZSBMRU5fS0VZX0RFU0NfSUQJCQkJOAorI2RlZmluZSBMRU5fS0VZX0RFU0NfUkVQTEFZCQkJOAorI2RlZmluZSBMRU5fS0VZX0RFU0NfTUlDCQkJMTYKKworLy8gVGhlIGxlbmd0aCBpcyB0aGUgRUFQb0wtS2V5IGZyYW1lIGV4Y2VwdCBrZXkgZGF0YSBmaWVsZC4KKy8vIFBsZWFzZSByZWZlciB0byA4MDIuMTFpLTIwMDQgLEZpZ3VyZSA0M3UgaW4gcC43OAorI2RlZmluZSBMRU5fRUFQT0xfS0VZX01TRwkJCShzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRSkKKworLy8gRUFQIENvZGUgVHlwZS4KKyNkZWZpbmUgRUFQX0NPREVfUkVRVUVTVAkxCisjZGVmaW5lIEVBUF9DT0RFX1JFU1BPTlNFCTIKKyNkZWZpbmUgRUFQX0NPREVfU1VDQ0VTUyAgICAzCisjZGVmaW5lIEVBUF9DT0RFX0ZBSUxVUkUgICAgNAorCisvLyBFQVBPTCBmcmFtZSBQcm90b2NvbCBWZXJzaW9uCisjZGVmaW5lCUVBUE9MX1ZFUgkJCQkJMQorI2RlZmluZQlFQVBPTF9WRVIyCQkJCQkyCisKKy8vIEVBUE9MLUtFWSBEZXNjcmlwdG9yIFR5cGUKKyNkZWZpbmUJV1BBMV9LRVlfREVTQwkJCQkweGZlCisjZGVmaW5lIFdQQTJfS0VZX0RFU0MgICAgICAgICAgICAgICAweDAyCisKKy8vIEtleSBEZXNjcmlwdG9yIFZlcnNpb24gb2YgS2V5IEluZm9ybWF0aW9uCisjZGVmaW5lCURFU0NfVFlQRV9US0lQCQkJCTEKKyNkZWZpbmUJREVTQ19UWVBFX0FFUwkJCQkyCisjZGVmaW5lIERFU0NfVFlQRV9NRVNICQkJCTMKKworI2RlZmluZSBMRU5fTVNHMV8yV0FZICAgICAgICAgICAgICAgMHg3ZgorI2RlZmluZSBNQVhfTEVOX09GX0VBUF9IUyAgICAgICAgICAgMjU2CisKKyNkZWZpbmUgTEVOX01BU1RFUl9LRVkJCQkJMzIKKworLy8gRUFQT0wgRUssIE1LCisjZGVmaW5lIExFTl9FQVBfRUsJCQkJCTE2CisjZGVmaW5lIExFTl9FQVBfTUlDSwkJCQkxNgorI2RlZmluZSBMRU5fRUFQX0tFWQkJCQkJKChMRU5fRUFQX0VLKSsoTEVOX0VBUF9NSUNLKSkKKy8vIFRLSVAga2V5IHJlbGF0ZWQKKyNkZWZpbmUgTEVOX1BNS0lECQkJCQkxNgorI2RlZmluZSBMRU5fVEtJUF9FSwkJCQkJMTYKKyNkZWZpbmUgTEVOX1RLSVBfUlhNSUNLCQkJCTgKKyNkZWZpbmUgTEVOX1RLSVBfVFhNSUNLCQkJCTgKKyNkZWZpbmUgTEVOX0FFU19FSwkJCQkJMTYKKyNkZWZpbmUgTEVOX0FFU19LRVkJCQkJCUxFTl9BRVNfRUsKKyNkZWZpbmUgTEVOX1RLSVBfS0VZCQkJCSgoTEVOX1RLSVBfRUspKyhMRU5fVEtJUF9SWE1JQ0spKyhMRU5fVEtJUF9UWE1JQ0spKQorI2RlZmluZSBUS0lQX0FQX1RYTUlDS19PRkZTRVQJCSgoTEVOX0VBUF9LRVkpKyhMRU5fVEtJUF9FSykpCisjZGVmaW5lIFRLSVBfQVBfUlhNSUNLX09GRlNFVAkJKFRLSVBfQVBfVFhNSUNLX09GRlNFVCtMRU5fVEtJUF9UWE1JQ0spCisjZGVmaW5lIFRLSVBfR1RLX0xFTkdUSAkJCQkoKExFTl9US0lQX0VLKSsoTEVOX1RLSVBfUlhNSUNLKSsoTEVOX1RLSVBfVFhNSUNLKSkKKyNkZWZpbmUgTEVOX1BUSwkJCQkJCSgoTEVOX0VBUF9LRVkpKyhMRU5fVEtJUF9LRVkpKQorCisvLyBSU04gSUUgTGVuZ3RoIGRlZmluaXRpb24KKyNkZWZpbmUgTUFYX0xFTl9PRl9SU05JRSAgICAgICAgIAk5MAorI2RlZmluZSBNSU5fTEVOX09GX1JTTklFICAgICAgICAgCTgKKworLy9FQVAgUGFja2V0IFR5cGUKKyNkZWZpbmUJRUFQUGFja2V0CQkwCisjZGVmaW5lCUVBUE9MU3RhcnQJCTEKKyNkZWZpbmUJRUFQT0xMb2dvZmYJCTIKKyNkZWZpbmUJRUFQT0xLZXkJCTMKKyNkZWZpbmUJRUFQT0xBU0ZBbGVydAk0CisjZGVmaW5lCUVBUFR0eXBlTWF4CQk1CisKKyNkZWZpbmUJRUFQT0xfTVNHX0lOVkFMSUQJMAorI2RlZmluZQlFQVBPTF9QQUlSX01TR18xCTEKKyNkZWZpbmUJRUFQT0xfUEFJUl9NU0dfMgkyCisjZGVmaW5lCUVBUE9MX1BBSVJfTVNHXzMJMworI2RlZmluZQlFQVBPTF9QQUlSX01TR180CTQKKyNkZWZpbmUJRUFQT0xfR1JPVVBfTVNHXzEJNQorI2RlZmluZQlFQVBPTF9HUk9VUF9NU0dfMgk2CisKKyNkZWZpbmUgUEFJUldJU0VLRVkJCQkJCTEKKyNkZWZpbmUgR1JPVVBLRVkJCQkJCTAKKworLy8gUmV0cnkgdGltZXIgY291bnRlciBpbml0aWFsIHZhbHVlCisjZGVmaW5lIFBFRVJfTVNHMV9SRVRSWV9USU1FUl9DVFIgICAgICAgICAgIDAKKyNkZWZpbmUgUEVFUl9NU0czX1JFVFJZX1RJTUVSX0NUUiAgICAgICAgICAgMTAKKyNkZWZpbmUgR1JPVVBfTVNHMV9SRVRSWV9USU1FUl9DVFIgICAgICAgICAgMjAKKworCisjZGVmaW5lIEVBUE9MX1NUQVJUX0RJU0FCTEUJCQkJCTAKKyNkZWZpbmUgRUFQT0xfU1RBUlRfUFNLCQkJCQkJMQorI2RlZmluZSBFQVBPTF9TVEFSVF8xWAkJCQkJCTIKKworI2RlZmluZSBNSVhfQ0lQSEVSX1dQQV9US0lQX09OKHgpICAgICAgICgoKHgpICYgMHgwOCkgIT0gMCkKKyNkZWZpbmUgTUlYX0NJUEhFUl9XUEFfQUVTX09OKHgpICAgICAgICAoKCh4KSAmIDB4MDQpICE9IDApCisjZGVmaW5lIE1JWF9DSVBIRVJfV1BBMl9US0lQX09OKHgpICAgICAgKCgoeCkgJiAweDAyKSAhPSAwKQorI2RlZmluZSBNSVhfQ0lQSEVSX1dQQTJfQUVTX09OKHgpICAgICAgICgoKHgpICYgMHgwMSkgIT0gMCkKKworI2RlZmluZSBST1VORF9VUChfX3gsIF9feSkgXAorCSgoKFVMT05HKSgoX194KSsoKF9feSktMSkpKSAmICgoVUxPTkcpfigoX195KS0xKSkpCisKKyNkZWZpbmUJQUREX09ORV9Ub182NEJJVF9WQVIoX1YpCQlcCit7CQkJCQkJCQkJCVwKKwlVQ0hBUgljbnQgPSBMRU5fS0VZX0RFU0NfUkVQTEFZOwlcCisJZG8JCQkJCQkJCQlcCisJewkJCQkJCQkJCVwKKwkJY250LS07CQkJCQkJCVwKKwkJX1ZbY250XSsrOwkJCQkJCVwKKwkJaWYgKGNudCA9PSAwKQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCX13aGlsZSAoX1ZbY250XSA9PSAwKTsJCQkJXAorfQorCisjZGVmaW5lIElTX1dQQV9DQVBBQklMSVRZKGEpICAgICAgICgoKGEpID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgJiYgKChhKSA8PSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSykpCisKKy8vIEVBUE9MIEtleSBJbmZvcm1hdGlvbiBkZWZpbml0aW9uIHdpdGhpbiBLZXkgZGVzY3JpcHRvciBmb3JtYXQKK3R5cGVkZWYJc3RydWN0IFBBQ0tFRCBfS0VZX0lORk8KK3sKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUNIQVIJS2V5QWNrOjE7CisgICAgVUNIQVIJSW5zdGFsbDoxOworICAgIFVDSEFSCUtleUluZGV4OjI7CisgICAgVUNIQVIJS2V5VHlwZToxOworICAgIFVDSEFSCUtleURlc2NWZXI6MzsKKyAgICBVQ0hBUglSc3ZkOjM7CisgICAgVUNIQVIJRUtEX0RMOjE7CQkvLyBFS0QgZm9yIEFQOyBETCBmb3IgU1RBCisgICAgVUNIQVIJUmVxdWVzdDoxOworICAgIFVDSEFSCUVycm9yOjE7CisgICAgVUNIQVIJU2VjdXJlOjE7CisgICAgVUNIQVIJS2V5TWljOjE7CisjZWxzZQorCVVDSEFSCUtleU1pYzoxOworCVVDSEFSCVNlY3VyZToxOworCVVDSEFSCUVycm9yOjE7CisJVUNIQVIJUmVxdWVzdDoxOworCVVDSEFSCUVLRF9ETDoxOyAgICAgICAvLyBFS0QgZm9yIEFQOyBETCBmb3IgU1RBCisJVUNIQVIJUnN2ZDozOworCVVDSEFSCUtleURlc2NWZXI6MzsKKwlVQ0hBUglLZXlUeXBlOjE7CisJVUNIQVIJS2V5SW5kZXg6MjsKKwlVQ0hBUglJbnN0YWxsOjE7CisJVUNIQVIJS2V5QWNrOjE7CisjZW5kaWYKK30JS0VZX0lORk8sICpQS0VZX0lORk87CisKKy8vIEVBUE9MIEtleSBkZXNjcmlwdG9yIGZvcm1hdAordHlwZWRlZglzdHJ1Y3QgUEFDS0VEIF9LRVlfREVTQ1JJUFRFUgoreworCVVDSEFSCQlUeXBlOworCUtFWV9JTkZPCUtleUluZm87CisJVUNIQVIJCUtleUxlbmd0aFsyXTsKKwlVQ0hBUgkJUmVwbGF5Q291bnRlcltMRU5fS0VZX0RFU0NfUkVQTEFZXTsKKwlVQ0hBUgkJS2V5Tm9uY2VbTEVOX0tFWV9ERVNDX05PTkNFXTsKKwlVQ0hBUgkJS2V5SXZbTEVOX0tFWV9ERVNDX0lWXTsKKwlVQ0hBUgkJS2V5UnNjW0xFTl9LRVlfREVTQ19SU0NdOworCVVDSEFSCQlLZXlJZFtMRU5fS0VZX0RFU0NfSURdOworCVVDSEFSCQlLZXlNaWNbTEVOX0tFWV9ERVNDX01JQ107CisJVUNIQVIJCUtleURhdGFMZW5bMl07CisJVUNIQVIJCUtleURhdGFbTUFYX0xFTl9PRl9SU05JRV07Cit9CUtFWV9ERVNDUklQVEVSLCAqUEtFWV9ERVNDUklQVEVSOworCit0eXBlZGVmCXN0cnVjdCBQQUNLRUQgX0VBUE9MX1BBQ0tFVAoreworCVVDSEFSCSAJCQlQcm9WZXI7CisJVUNIQVIJIAkJCVByb1R5cGU7CisJVUNIQVIJIAkJCUJvZHlfTGVuWzJdOworCUtFWV9ERVNDUklQVEVSCQlLZXlEZXNjOworfQlFQVBPTF9QQUNLRVQsICpQRUFQT0xfUEFDS0VUOworCisvLzgwMi4xMWkgRDEwIHBhZ2UgODMKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfR1RLX0VOQ0FQCit7CisjaWZuZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEtpZDoyOworICAgIFVDSEFSICAgICAgICAgICAgICAgdHg6MTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIHJzdjo1OworICAgIFVDSEFSICAgICAgICAgICAgICAgcnN2MTsKKyNlbHNlCisgICAgVUNIQVIgICAgICAgICAgICAgICByc3Y6NTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIHR4OjE7CisgICAgVUNIQVIgICAgICAgICAgICAgICBLaWQ6MjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIHJzdjE7CisjZW5kaWYKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEdUS1tUS0lQX0dUS19MRU5HVEhdOworfSAgIEdUS19FTkNBUCwgKlBHVEtfRU5DQVA7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfS0RFX0VOQ0FQCit7CisgICAgVUNIQVIgICAgICAgICAgICAgICBUeXBlOworICAgIFVDSEFSICAgICAgICAgICAgICAgTGVuOworICAgIFVDSEFSICAgICAgICAgICAgICAgT1VJWzNdOworICAgIFVDSEFSICAgICAgICAgICAgICAgRGF0YVR5cGU7CisgICAgR1RLX0VOQ0FQICAgICAgR1RLRW5jYXA7Cit9ICAgS0RFX0VOQ0FQLCAqUEtERV9FTkNBUDsKKworLy8gRm9yIFdQQTEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUlNOSUUgeworICAgIFVDSEFSICAgb3VpWzRdOworICAgIFVTSE9SVCAgdmVyc2lvbjsKKyAgICBVQ0hBUiAgIG1jYXN0WzRdOworICAgIFVTSE9SVCAgdWNvdW50OworICAgIHN0cnVjdCBQQUNLRUQgeworICAgICAgICBVQ0hBUiBvdWlbNF07CisgICAgfXVjYXN0WzFdOworfSBSU05JRSwgKlBSU05JRTsKKworLy8gRm9yIFdQQTIKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUlNOSUUyIHsKKyAgICBVU0hPUlQgIHZlcnNpb247CisgICAgVUNIQVIgICBtY2FzdFs0XTsKKyAgICBVU0hPUlQgIHVjb3VudDsKKyAgICBzdHJ1Y3QgUEFDS0VEIHsKKyAgICAgICAgVUNIQVIgb3VpWzRdOworICAgIH11Y2FzdFsxXTsKK30gUlNOSUUyLCAqUFJTTklFMjsKKworLy8gQUtNIFN1aXRlCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JTTklFX0FVVEggeworICAgIFVTSE9SVCBhY291bnQ7CisgICAgc3RydWN0IFBBQ0tFRCB7CisgICAgICAgIFVDSEFSIG91aVs0XTsKKyAgICB9YXV0aFsxXTsKK30gUlNOSUVfQVVUSCwqUFJTTklFX0FVVEg7CisKK3R5cGVkZWYJdW5pb24gUEFDS0VEIF9SU05fQ0FQQUJJTElUSUVTCXsKKwlzdHJ1Y3QJUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgICAgIFVTSE9SVAkJUnN2ZDoxMDsKKyAgICAgICAgVVNIT1JUCQlHVEtTQV9SX0NvdW50ZXI6MjsKKyAgICAgICAgVVNIT1JUCQlQVEtTQV9SX0NvdW50ZXI6MjsKKyAgICAgICAgVVNIT1JUCQlOb19QYWlyd2lzZToxOworCQlVU0hPUlQJCVByZUF1dGg6MTsKKyNlbHNlCisgICAgICAgIFVTSE9SVAkJUHJlQXV0aDoxOworCQlVU0hPUlQJCU5vX1BhaXJ3aXNlOjE7CisJCVVTSE9SVAkJUFRLU0FfUl9Db3VudGVyOjI7CisJCVVTSE9SVAkJR1RLU0FfUl9Db3VudGVyOjI7CisJCVVTSE9SVAkJUnN2ZDoxMDsKKyNlbmRpZgorCX0JZmllbGQ7CisJVVNIT1JUCQkJd29yZDsKK30JUlNOX0NBUEFCSUxJVElFUywgKlBSU05fQ0FQQUJJTElUSUVTOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0VBUF9IRFIgeworICAgIFVDSEFSICAgUHJvVmVyOworICAgIFVDSEFSICAgUHJvVHlwZTsKKyAgICBVQ0hBUiAgIEJvZHlfTGVuWzJdOworICAgIFVDSEFSICAgY29kZTsKKyAgICBVQ0hBUiAgIGlkZW50aWZpZXI7CisgICAgVUNIQVIgICBsZW5ndGhbMl07IC8vIGluY2x1ZGluZyBjb2RlIGFuZCBpZGVudGlmaWVyLCBmb2xsb3dlZCBieSBsZW5ndGgtMiBvY3RldHMgb2YgZGF0YQorfSBFQVBfSERSLCAqUEVBUF9IRFI7CisKKy8vIEZvciBzdXBwbGljYW50IHN0YXRlIG1hY2hpbmUgc3RhdGVzLiA4MDIuMTFpIERyYWZ0IDQuMSwgcC4gOTcKKy8vIFdlIHNpbXBsaWZpZWQgaXQKK3R5cGVkZWYJZW51bQlfV3BhU3RhdGUKK3sKKwlTU19OT1RVU0UsCQkJCS8vIDAKKwlTU19TVEFSVCwJCQkJLy8gMQorCVNTX1dBSVRfTVNHXzMsCQkJLy8gMgorCVNTX1dBSVRfR1JPVVAsCQkJLy8gMworCVNTX0ZJTklTSCwgIAkJCS8vIDQKKwlTU19LRVlVUERBVEUsCQkJLy8gNQorfQlXUEFfU1RBVEU7CisKKy8vCisvLwlUaGUgZGVmaW5pdGlvbiBvZiB0aGUgY2lwaGVyIGNvbWJpbmF0aW9uCisvLworLy8gCSBiaXQzCWJpdDIgIGJpdDEgICBiaXQwCisvLwkrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKy8vIAl8CSAgV1BBCSB8CSAgIFdQQTIgICB8CisvLwkrLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLSsKKy8vCXwgVEtJUCB8IEFFUyB8IFRLSVAgfCBBRVMgfAorLy8JfAkwICB8ICAxICB8ICAgMSAgfCAgMCAgfCAtPiAweDA2CisvLwl8CTAgIHwgIDEgIHwgICAxICB8ICAxICB8IC0+IDB4MDcKKy8vCXwJMSAgfCAgMCAgfCAgIDAgIHwgIDEgIHwgLT4gMHgwOQorLy8JfAkxICB8ICAwICB8ICAgMSAgfCAgMSAgfCAtPiAweDBCCisvLwl8CTEgIHwgIDEgIHwgICAwICB8ICAxICB8IC0+IDB4MEQKKy8vCXwJMSAgfCAgMSAgfCAgIDEgIHwgIDAgIHwgLT4gMHgwRQorLy8JfAkxICB8ICAxICB8ICAgMSAgfCAgMSAgfAktPiAweDBGCisvLwkrLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLSsKKy8vCit0eXBlZGVmCWVudW0JX1dwYU1peFBhaXJDaXBoZXIKK3sKKwlNSVhfQ0lQSEVSX05PVFVTRSAJCQk9IDB4MDAsCisJV1BBX05PTkVfV1BBMl9US0lQQUVTCQk9IDB4MDMsCQkvLyBXUEEyLVRLSVBBRVMKKwlXUEFfQUVTX1dQQTJfVEtJUCAJCQk9IDB4MDYsCisJV1BBX0FFU19XUEEyX1RLSVBBRVMJCT0gMHgwNywKKwlXUEFfVEtJUF9XUEEyX0FFUwkJCT0gMHgwOSwKKwlXUEFfVEtJUF9XUEEyX1RLSVBBRVMJCT0gMHgwQiwKKwlXUEFfVEtJUEFFU19XUEEyX05PTkUJCT0gMHgwQywJCS8vIFdQQS1US0lQQUVTCisJV1BBX1RLSVBBRVNfV1BBMl9BRVMJCT0gMHgwRCwKKwlXUEFfVEtJUEFFU19XUEEyX1RLSVAJCT0gMHgwRSwKKwlXUEFfVEtJUEFFU19XUEEyX1RLSVBBRVMJPSAweDBGLAorfQlXUEFfTUlYX1BBSVJfQ0lQSEVSOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JTTl9JRV9IRUFERVJfU1RSVUNUCXsKKwlVQ0hBUgkJRWlkOworCVVDSEFSCQlMZW5ndGg7CisJVVNIT1JUCQlWZXJzaW9uOwkvLyBMaXR0bGUgZW5kaWFuIGZvcm1hdAorfQlSU05fSUVfSEVBREVSX1NUUlVDVCwgKlBSU05fSUVfSEVBREVSX1NUUlVDVDsKKworLy8gQ2lwaGVyIHN1aXRlIHNlbGVjdG9yIHR5cGVzCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0NJUEhFUl9TVUlURV9TVFJVQ1QJeworCVVDSEFSCQlPdWlbM107CisJVUNIQVIJCVR5cGU7Cit9CUNJUEhFUl9TVUlURV9TVFJVQ1QsICpQQ0lQSEVSX1NVSVRFX1NUUlVDVDsKKworLy8gQXV0aGVudGljYXRpb24gYW5kIEtleSBNYW5hZ2VtZW50IHN1aXRlIHNlbGVjdG9yCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0FLTV9TVUlURV9TVFJVQ1QJeworCVVDSEFSCQlPdWlbM107CisJVUNIQVIJCVR5cGU7Cit9CUFLTV9TVUlURV9TVFJVQ1QsICpQQUtNX1NVSVRFX1NUUlVDVDsKKworLy8gUlNOIGNhcGFiaWxpdHkKK3R5cGVkZWYgc3RydWN0CVBBQ0tFRCBfUlNOX0NBUEFCSUxJVFkJeworCVVTSE9SVAkJUnN2OjEwOworCVVTSE9SVAkJR1RLU0FSZXBsYXlDbnQ6MjsKKwlVU0hPUlQJCVBUS1NBUmVwbGF5Q250OjI7CisJVVNIT1JUCQlOb1BhaXJ3aXNlOjE7CisJVVNIT1JUCQlQcmVBdXRoOjE7Cit9CVJTTl9DQVBBQklMSVRZLCAqUFJTTl9DQVBBQklMSVRZOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvZG90MTFkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2RvdDExZC5oCmluZGV4IDQ5ZjUzZmUuLjI0MTdkYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvZG90MTFkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9kb3QxMWQuaApAQCAtMSwxMDEgKzEsMTAxIEBACi0jaWZuZGVmIF9fSU5DX0RPVDExRF9IDQotI2RlZmluZSBfX0lOQ19ET1QxMURfSA0KLQ0KLSNpbmNsdWRlICJpZWVlODAyMTEuaCINCi0NCi0vLyNkZWZpbmUgRU5BQkxFX0RPVDExRA0KLQ0KLS8vI2RlZmluZSBET1QxMURfTUFYX0NITkxfTlVNIDgzDQotDQotdHlwZWRlZiBzdHJ1Y3QgX0NITkxfVFhQT1dFUl9UUklQTEUgew0KLQl1OCBGaXJzdENobmw7DQotCXU4ICBOdW1DaG5sczsNCi0JdTggIE1heFR4UG93ZXJJbkRibTsNCi19Q0hOTF9UWFBPV0VSX1RSSVBMRSwgKlBDSE5MX1RYUE9XRVJfVFJJUExFOw0KLQ0KLXR5cGVkZWYgZW51bSBfRE9UMTFEX1NUQVRFIHsNCi0JRE9UMTFEX1NUQVRFX05PTkUgPSAwLA0KLQlET1QxMURfU1RBVEVfTEVBUk5FRCwNCi0JRE9UMTFEX1NUQVRFX0RPTkUsDQotfURPVDExRF9TVEFURTsNCi0NCi10eXBlZGVmIHN0cnVjdCBfUlRfRE9UMTFEX0lORk8gew0KLQkvL0RFQ0xBUkVfUlRfT0JKRUNUKFJUX0RPVDExRF9JTkZPKTsNCi0NCi0JYm9vbCBiRW5hYmxlZDsgLy8gZG90MTFNdWx0aURvbWFpbkNhcGFiaWxpdHlFbmFibGVkDQotDQotCXUxNiBDb3VudHJ5SWVMZW47IC8vID4gMCBpZiBDb3VudHJ5SWVCdWZbXSBjb250YWlucyB2YWxpZCBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQuDQotCXU4ICBDb3VudHJ5SWVCdWZbTUFYX0lFX0xFTl07DQotCXU4ICBDb3VudHJ5SWVTcmNBZGRyWzZdOyAvLyBTb3VyY2UgQVAgb2YgdGhlIGNvdW50cnkgSUUuDQotCXU4ICBDb3VudHJ5SWVXYXRjaGRvZzsgDQotDQotCXU4ICBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07ICAvLyEhIVZhbHVlIDA6IEludmFsaWQsIDE6IFZhbGlkIChhY3RpdmUgc2NhbiksIDI6IFZhbGlkIChwYXNzaXZlIHNjYW4pDQotCS8vdTggIENobmxMaXN0TGVuOyAvLyAjQnl0ZXMgdmFsaWQgaW4gQ2hubExpc3RbXS4NCi0JLy91OCAgQ2hubExpc3RbRE9UMTFEX01BWF9DSE5MX05VTV07DQotCXU4ICBNYXhUeFB3ckRibUxpc3RbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOw0KLQ0KLQlET1QxMURfU1RBVEUgU3RhdGU7DQotfVJUX0RPVDExRF9JTkZPLCAqUFJUX0RPVDExRF9JTkZPOw0KLSNkZWZpbmUgZXFNYWNBZGRyKGEsYikJCSggKChhKVswXT09KGIpWzBdICYmIChhKVsxXT09KGIpWzFdICYmIChhKVsyXT09KGIpWzJdICYmIChhKVszXT09KGIpWzNdICYmIChhKVs0XT09KGIpWzRdICYmIChhKVs1XT09KGIpWzVdKSA/IDE6MCApDQotI2RlZmluZSBjcE1hY0FkZHIoZGVzLHNyYykJICAgICAgKChkZXMpWzBdPShzcmMpWzBdLChkZXMpWzFdPShzcmMpWzFdLChkZXMpWzJdPShzcmMpWzJdLChkZXMpWzNdPShzcmMpWzNdLChkZXMpWzRdPShzcmMpWzRdLChkZXMpWzVdPShzcmMpWzVdKQ0KLSNkZWZpbmUgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpICgoUFJUX0RPVDExRF9JTkZPKSgoX19wSWVlZURldiktPnBEb3QxMWRJbmZvKSkNCi0NCi0jZGVmaW5lIElTX0RPVDExRF9FTkFCTEUoX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5iRW5hYmxlZA0KLSNkZWZpbmUgSVNfQ09VTlRSWV9JRV9WQUxJRChfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4gPiAwKQ0KLQ0KLSNkZWZpbmUgSVNfRVFVQUxfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgZXFNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpIA0KLSNkZWZpbmUgVVBEQVRFX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGNwTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQ0KLQ0KLSNkZWZpbmUgSVNfQ09VTlRSWV9JRV9DSEFOR0VEKF9fcEllZWVEZXYsIF9fSWUpIFwNCi0JKCgoX19JZSkuTGVuZ3RoID09IDAgfHwgKF9fSWUpLkxlbmd0aCAhPSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbikgPyBcDQotCUZBTFNFIDogXA0KLQkoIW1lbWNtcChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUJ1ZiwgKF9fSWUpLk9jdGV0LCAoX19JZSkuTGVuZ3RoKSkpDQotDQotI2RlZmluZSBDSUVfV0FUQ0hET0dfVEggMQ0KLSNkZWZpbmUgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVdhdGNoZG9nDQotI2RlZmluZSBSRVNFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSA9IDAgDQotI2RlZmluZSBVUERBVEVfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpICsrR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KQ0KLQ0KLSNkZWZpbmUgSVNfRE9UMTFEX1NUQVRFX0RPTkUoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+U3RhdGUgPT0gRE9UMTFEX1NUQVRFX0RPTkUpDQotDQotDQotdm9pZA0KLURvdDExZF9Jbml0KA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2DQotCSk7DQotDQotdm9pZA0KLURvdDExZF9SZXNldCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldg0KLQkpOw0KLQ0KLXZvaWQNCi1Eb3QxMWRfVXBkYXRlQ291bnRyeUllKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LA0KLQl1OCAqCQlwVGFkZHIsDQotCXUxNglDb3V0cnlJZUxlbiwNCi0JdTggKiBwQ291dHJ5SWUJIA0KLQkpOw0KLQ0KLXU4DQotRE9UMTFEX0dldE1heFR4UHdySW5EYm0oDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsDQotCXU4IENoYW5uZWwNCi0JKTsNCi0NCi12b2lkDQotRE9UMTFEX1NjYW5Db21wbGV0ZSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYNCi0JKTsNCi0NCi1pbnQgSXNMZWdhbENoYW5uZWwoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LA0KLQl1OCBjaGFubmVsDQotKTsNCi0NCi1pbnQgVG9MZWdhbENoYW5uZWwoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LA0KLQl1OCBjaGFubmVsDQotKTsNCi0NCi0jZW5kaWYgLy8gI2lmbmRlZiBfX0lOQ19ET1QxMURfSA0KKyNpZm5kZWYgX19JTkNfRE9UMTFEX0gKKyNkZWZpbmUgX19JTkNfRE9UMTFEX0gKKworI2luY2x1ZGUgImllZWU4MDIxMS5oIgorCisvLyNkZWZpbmUgRU5BQkxFX0RPVDExRAorCisvLyNkZWZpbmUgRE9UMTFEX01BWF9DSE5MX05VTSA4MworCit0eXBlZGVmIHN0cnVjdCBfQ0hOTF9UWFBPV0VSX1RSSVBMRSB7CisJdTggRmlyc3RDaG5sOworCXU4ICBOdW1DaG5sczsKKwl1OCAgTWF4VHhQb3dlckluRGJtOworfUNITkxfVFhQT1dFUl9UUklQTEUsICpQQ0hOTF9UWFBPV0VSX1RSSVBMRTsKKwordHlwZWRlZiBlbnVtIF9ET1QxMURfU1RBVEUgeworCURPVDExRF9TVEFURV9OT05FID0gMCwKKwlET1QxMURfU1RBVEVfTEVBUk5FRCwKKwlET1QxMURfU1RBVEVfRE9ORSwKK31ET1QxMURfU1RBVEU7CisKK3R5cGVkZWYgc3RydWN0IF9SVF9ET1QxMURfSU5GTyB7CisJLy9ERUNMQVJFX1JUX09CSkVDVChSVF9ET1QxMURfSU5GTyk7CisKKwlib29sIGJFbmFibGVkOyAvLyBkb3QxMU11bHRpRG9tYWluQ2FwYWJpbGl0eUVuYWJsZWQKKworCXUxNiBDb3VudHJ5SWVMZW47IC8vID4gMCBpZiBDb3VudHJ5SWVCdWZbXSBjb250YWlucyB2YWxpZCBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQuCisJdTggIENvdW50cnlJZUJ1ZltNQVhfSUVfTEVOXTsKKwl1OCAgQ291bnRyeUllU3JjQWRkcls2XTsgLy8gU291cmNlIEFQIG9mIHRoZSBjb3VudHJ5IElFLgorCXU4ICBDb3VudHJ5SWVXYXRjaGRvZzsKKworCXU4ICBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07ICAvLyEhIVZhbHVlIDA6IEludmFsaWQsIDE6IFZhbGlkIChhY3RpdmUgc2NhbiksIDI6IFZhbGlkIChwYXNzaXZlIHNjYW4pCisJLy91OCAgQ2hubExpc3RMZW47IC8vICNCeXRlcyB2YWxpZCBpbiBDaG5sTGlzdFtdLgorCS8vdTggIENobmxMaXN0W0RPVDExRF9NQVhfQ0hOTF9OVU1dOworCXU4ICBNYXhUeFB3ckRibUxpc3RbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOworCisJRE9UMTFEX1NUQVRFIFN0YXRlOworfVJUX0RPVDExRF9JTkZPLCAqUFJUX0RPVDExRF9JTkZPOworI2RlZmluZSBlcU1hY0FkZHIoYSxiKQkJKCAoKGEpWzBdPT0oYilbMF0gJiYgKGEpWzFdPT0oYilbMV0gJiYgKGEpWzJdPT0oYilbMl0gJiYgKGEpWzNdPT0oYilbM10gJiYgKGEpWzRdPT0oYilbNF0gJiYgKGEpWzVdPT0oYilbNV0pID8gMTowICkKKyNkZWZpbmUgY3BNYWNBZGRyKGRlcyxzcmMpCSAgICAgICgoZGVzKVswXT0oc3JjKVswXSwoZGVzKVsxXT0oc3JjKVsxXSwoZGVzKVsyXT0oc3JjKVsyXSwoZGVzKVszXT0oc3JjKVszXSwoZGVzKVs0XT0oc3JjKVs0XSwoZGVzKVs1XT0oc3JjKVs1XSkKKyNkZWZpbmUgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpICgoUFJUX0RPVDExRF9JTkZPKSgoX19wSWVlZURldiktPnBEb3QxMWRJbmZvKSkKKworI2RlZmluZSBJU19ET1QxMURfRU5BQkxFKF9fcEllZWVEZXYpIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+YkVuYWJsZWQKKyNkZWZpbmUgSVNfQ09VTlRSWV9JRV9WQUxJRChfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4gPiAwKQorCisjZGVmaW5lIElTX0VRVUFMX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGVxTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQorI2RlZmluZSBVUERBVEVfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgY3BNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpCisKKyNkZWZpbmUgSVNfQ09VTlRSWV9JRV9DSEFOR0VEKF9fcEllZWVEZXYsIF9fSWUpIFwKKwkoKChfX0llKS5MZW5ndGggPT0gMCB8fCAoX19JZSkuTGVuZ3RoICE9IEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuKSA/IFwKKwlGQUxTRSA6IFwKKwkoIW1lbWNtcChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUJ1ZiwgKF9fSWUpLk9jdGV0LCAoX19JZSkuTGVuZ3RoKSkpCisKKyNkZWZpbmUgQ0lFX1dBVENIRE9HX1RIIDEKKyNkZWZpbmUgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVdhdGNoZG9nCisjZGVmaW5lIFJFU0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpID0gMAorI2RlZmluZSBVUERBVEVfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpICsrR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KQorCisjZGVmaW5lIElTX0RPVDExRF9TVEFURV9ET05FKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPlN0YXRlID09IERPVDExRF9TVEFURV9ET05FKQorCisKK3ZvaWQKK0RvdDExZF9Jbml0KAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYKKwkpOworCit2b2lkCitEb3QxMWRfUmVzZXQoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldgorCSk7CisKK3ZvaWQKK0RvdDExZF9VcGRhdGVDb3VudHJ5SWUoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwKKwl1OCAqCQlwVGFkZHIsCisJdTE2CUNvdXRyeUllTGVuLAorCXU4ICogcENvdXRyeUllCisJKTsKKwordTgKK0RPVDExRF9HZXRNYXhUeFB3ckluRGJtKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsCisJdTggQ2hhbm5lbAorCSk7CisKK3ZvaWQKK0RPVDExRF9TY2FuQ29tcGxldGUoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYKKwkpOworCitpbnQgSXNMZWdhbENoYW5uZWwoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsCisJdTggY2hhbm5lbAorKTsKKworaW50IFRvTGVnYWxDaGFubmVsKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAorCXU4IGNoYW5uZWwKKyk7CisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fSU5DX0RPVDExRF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2RvdDExZC5jCmluZGV4IDVkOGI3NTIuLjU0YmNkY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2RvdDExZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2RvdDExZC5jCkBAIC0xLDI0NiArMSwyNDYgQEAKLSNpZmRlZiBFTkFCTEVfRE9UMTFEDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vCUZpbGU6DQotLy8JCURvdDExZC5jDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJSW1wbGVtZW50IDgwMi4xMWQuIA0KLS8vDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLSNpbmNsdWRlICJkb3QxMWQuaCINCi0NCi12b2lkDQotRG90MTFkX0luaXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpDQotew0KLQlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oaWVlZSk7DQotDQotCXBEb3QxMWRJbmZvLT5iRW5hYmxlZCA9IDA7DQotDQotCXBEb3QxMWRJbmZvLT5TdGF0ZSA9IERPVDExRF9TVEFURV9OT05FOw0KLQlwRG90MTFkSW5mby0+Q291bnRyeUllTGVuID0gMDsNCi0JbWVtc2V0KHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcCwgMCwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOyAgDQotCW1lbXNldChwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0LCAweEZGLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7DQotCVJFU0VUX0NJRV9XQVRDSERPRyhpZWVlKTsNCi0NCi0JcHJpbnRrKCJEb3QxMWRfSW5pdCgpXG4iKTsNCi19DQotDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJUmVzZXQgdG8gdGhlIHN0YXRlIGFzIHdlIGFyZSBqdXN0IGVudGVyaW5nIGEgcmVndWxhdG9yeSBkb21haW4uDQotLy8NCi12b2lkDQotRG90MTFkX1Jlc2V0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQ0KLXsNCi0JdTMyIGk7DQotCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhpZWVlKTsNCi0NCi0JLy8gQ2xlYXIgb2xkIGNoYW5uZWwgbWFwDQotCW1lbXNldChwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXAsIDAsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsNCi0JbWVtc2V0KHBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3QsIDB4RkYsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsNCi0JLy8gU2V0IG5ldyBjaGFubmVsIG1hcA0KLQlmb3IgKGk9MTsgaTw9MTE7IGkrKykgew0KLQkJKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcClbaV0gPSAxOw0KLQl9DQotCWZvciAoaT0xMjsgaTw9MTQ7IGkrKykgew0KLQkJKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcClbaV0gPSAyOw0KLQl9DQotDQotCXBEb3QxMWRJbmZvLT5TdGF0ZSA9IERPVDExRF9TVEFURV9OT05FOw0KLQlwRG90MTFkSW5mby0+Q291bnRyeUllTGVuID0gMDsNCi0JUkVTRVRfQ0lFX1dBVENIRE9HKGllZWUpOw0KLQ0KLQkvL3ByaW50aygiRG90MTFkX1Jlc2V0KClcbiIpOw0KLX0NCi0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlVcGRhdGUgY291bnRyeSBJRSBmcm9tIEJlYWNvbiBvciBQcm9iZSBSZXNvcG5zZSANCi0vLwkJYW5kIGNvbmZpZ3VyZSBQSFkgZm9yIG9wZXJhdGlvbiBpbiB0aGUgcmVndWxhdG9yeSBkb21haW4uDQotLy8NCi0vLwlUT0RPOiANCi0vLwkJQ29uZmlndXJlIFR4IHBvd2VyLg0KLS8vDQotLy8JQXNzdW1wdGlvbjoNCi0vLwkJMS4gSVNfRE9UMTFEX0VOQUJMRSgpIGlzIFRSVUUuDQotLy8JCTIuIElucHV0IElFIGlzIGFuIHZhbGlkIG9uZS4NCi0vLw0KLXZvaWQNCi1Eb3QxMWRfVXBkYXRlQ291bnRyeUllKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LA0KLQl1OCAqCQlwVGFkZHIsDQotCXUxNglDb3V0cnlJZUxlbiwNCi0JdTggKiBwQ291dHJ5SWUJIA0KLQkpDQotew0KLQlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsNCi0JdTggaSwgaiwgTnVtVHJpcGxlcywgTWF4Q2hubE51bTsNCi0JUENITkxfVFhQT1dFUl9UUklQTEUgcFRyaXBsZTsNCi0NCi0JaWYoKENvdXRyeUllTGVuIC0gMyklMyAhPSAwKQ0KLQl7DQotCQlwcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogSW52YWxpZCBjb3VudHJ5IElFLCBza2lwIGl0Li4uLi4uLi4xXG4iKTsNCi0JCURvdDExZF9SZXNldChkZXYpOw0KLQkJcmV0dXJuOw0KLQl9DQotDQotCW1lbXNldChwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXAsIDAsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsNCi0JbWVtc2V0KHBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3QsIDB4RkYsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsNCi0JTWF4Q2hubE51bSA9IDA7DQotCU51bVRyaXBsZXMgPSAoQ291dHJ5SWVMZW4gLSAzKSAvIDM7IC8vIHNraXAgMy1ieXRlIGNvdW50cnkgc3RyaW5nLg0KLQlwVHJpcGxlID0gKFBDSE5MX1RYUE9XRVJfVFJJUExFKShwQ291dHJ5SWUgKyAzKTsNCi0JZm9yKGkgPSAwOyBpIDwgTnVtVHJpcGxlczsgaSsrKQ0KLQl7DQotCQlpZihNYXhDaG5sTnVtID49IHBUcmlwbGUtPkZpcnN0Q2hubCkNCi0JCXsgLy8gSXQgaXMgbm90IGluIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIG9yZGVyLCBzbyBzdG9wIHByb2Nlc3NpbmcuDQotCQkJcHJpbnRrKCJEb3QxMWRfVXBkYXRlQ291bnRyeUllKCk6IEludmFsaWQgY291bnRyeSBJRSwgc2tpcCBpdC4uLi4uLi4uMVxuIik7DQotCQkJRG90MTFkX1Jlc2V0KGRldik7DQotCQkJcmV0dXJuOyANCi0JCX0NCi0JCWlmKE1BWF9DSEFOTkVMX05VTUJFUiA8IChwVHJpcGxlLT5GaXJzdENobmwgKyBwVHJpcGxlLT5OdW1DaG5scykpDQotCQl7IC8vIEl0IGlzIG5vdCBhIHZhbGlkIHNldCBvZiBjaGFubmVsIGlkLCBzbyBzdG9wIHByb2Nlc3NpbmcuDQotCQkJcHJpbnRrKCJEb3QxMWRfVXBkYXRlQ291bnRyeUllKCk6IEludmFsaWQgY291bnRyeSBJRSwgc2tpcCBpdC4uLi4uLi4uMlxuIik7DQotCQkJRG90MTFkX1Jlc2V0KGRldik7DQotCQkJcmV0dXJuOyANCi0JCX0NCi0NCi0JCWZvcihqID0gMCA7IGogPCBwVHJpcGxlLT5OdW1DaG5sczsgaisrKQ0KLQkJew0KLQkJCXBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtwVHJpcGxlLT5GaXJzdENobmwgKyBqXSA9IDE7DQotCQkJcERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdFtwVHJpcGxlLT5GaXJzdENobmwgKyBqXSA9IHBUcmlwbGUtPk1heFR4UG93ZXJJbkRibTsNCi0JCQlNYXhDaG5sTnVtID0gcFRyaXBsZS0+Rmlyc3RDaG5sICsgajsNCi0JCX0JDQotDQotCQlwVHJpcGxlID0gKFBDSE5MX1RYUE9XRVJfVFJJUExFKSgodTgqKXBUcmlwbGUgKyAzKTsNCi0JfQ0KLSNpZiAxDQotCS8vcHJpbnRrKCJEb3QxMWRfVXBkYXRlQ291bnRyeUllKCk6IENoYW5uZWwgTGlzdDpcbiIpOw0KLQlwcmludGsoIkNoYW5uZWwgTGlzdDoiKTsNCi0JZm9yKGk9MTsgaTw9IE1BWF9DSEFOTkVMX05VTUJFUjsgaSsrKQ0KLQkJaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW2ldID4gMCkNCi0JCQlwcmludGsoIiAlZCIsIGkpOw0KLQlwcmludGsoIlxuIik7DQotI2VuZGlmDQotDQotCVVQREFURV9DSUVfU1JDKGRldiwgcFRhZGRyKTsNCi0NCi0JcERvdDExZEluZm8tPkNvdW50cnlJZUxlbiA9IENvdXRyeUllTGVuOw0KLQltZW1jcHkocERvdDExZEluZm8tPkNvdW50cnlJZUJ1ZiwgcENvdXRyeUllLENvdXRyeUllTGVuKTsNCi0JcERvdDExZEluZm8tPlN0YXRlID0gRE9UMTFEX1NUQVRFX0xFQVJORUQ7DQotfQ0KLQ0KLXZvaWQgZHVtcF9jaG5sX21hcCh1OCAqIGNoYW5uZWxfbWFwKQ0KLXsNCi0JaW50IGk7DQotCXByaW50aygiQ2hhbm5lbCBMaXN0OiIpOw0KLQlmb3IoaT0xOyBpPD0gTUFYX0NIQU5ORUxfTlVNQkVSOyBpKyspDQotCQlpZihjaGFubmVsX21hcFtpXSA+IDApDQotCQkJcHJpbnRrKCIgJWQoJWQpIiwgaSwgY2hhbm5lbF9tYXBbaV0pOw0KLQlwcmludGsoIlxuIik7DQotfQ0KLQ0KLXU4DQotRE9UMTFEX0dldE1heFR4UHdySW5EYm0oDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsDQotCXU4IENoYW5uZWwNCi0JKQ0KLXsNCi0JUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7DQotCXU4IE1heFR4UHdySW5EYm0gPSAyNTU7DQotDQotCWlmKE1BWF9DSEFOTkVMX05VTUJFUiA8IENoYW5uZWwpDQotCXsgDQotCQlwcmludGsoIkRPVDExRF9HZXRNYXhUeFB3ckluRGJtKCk6IEludmFsaWQgQ2hhbm5lbFxuIik7DQotCQlyZXR1cm4gTWF4VHhQd3JJbkRibTsgDQotCX0NCi0JaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW0NoYW5uZWxdKQ0KLQl7DQotCQlNYXhUeFB3ckluRGJtID0gcERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdFtDaGFubmVsXTsJDQotCX0NCi0NCi0JcmV0dXJuIE1heFR4UHdySW5EYm07DQotfQ0KLQ0KLQ0KLXZvaWQNCi1ET1QxMURfU2NhbkNvbXBsZXRlKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldg0KLQkpDQotew0KLQlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsNCi0NCi0Jc3dpdGNoKHBEb3QxMWRJbmZvLT5TdGF0ZSkNCi0Jew0KLQljYXNlIERPVDExRF9TVEFURV9MRUFSTkVEOg0KLQkJcERvdDExZEluZm8tPlN0YXRlID0gRE9UMTFEX1NUQVRFX0RPTkU7DQotCQlicmVhazsNCi0NCi0JY2FzZSBET1QxMURfU1RBVEVfRE9ORToNCi0JCWlmKCBHRVRfQ0lFX1dBVENIRE9HKGRldikgPT0gMCApDQotCQl7IC8vIFJlc2V0IGNvdW50cnkgSUUgaWYgcHJldmlvdXMgb25lIGlzIGdvbmUuIA0KLQkJCURvdDExZF9SZXNldChkZXYpOyANCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIERPVDExRF9TVEFURV9OT05FOg0KLQkJYnJlYWs7DQotCX0NCi19DQotDQotaW50IElzTGVnYWxDaGFubmVsKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwNCi0JdTggY2hhbm5lbA0KLSkNCi17DQotCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOw0KLQ0KLQlpZihNQVhfQ0hBTk5FTF9OVU1CRVIgPCBjaGFubmVsKQ0KLQl7IA0KLQkJcHJpbnRrKCJJc0xlZ2FsQ2hhbm5lbCgpOiBJbnZhbGlkIENoYW5uZWxcbiIpOw0KLQkJcmV0dXJuIDA7IA0KLQl9DQotCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtjaGFubmVsXSA+IDApDQotCQlyZXR1cm4gMTsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBUb0xlZ2FsQ2hhbm5lbCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsDQotCXU4IGNoYW5uZWwNCi0pDQotew0KLQlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsNCi0JdTggZGVmYXVsdF9jaG4gPSAwOw0KLQl1MzIgaSA9IDA7DQotDQotCWZvciAoaT0xOyBpPD0gTUFYX0NIQU5ORUxfTlVNQkVSOyBpKyspDQotCXsNCi0JCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtpXSA+IDApDQotCQl7DQotCQkJZGVmYXVsdF9jaG4gPSBpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotDQotCWlmKE1BWF9DSEFOTkVMX05VTUJFUiA8IGNoYW5uZWwpDQotCXsgDQotCQlwcmludGsoIklzTGVnYWxDaGFubmVsKCk6IEludmFsaWQgQ2hhbm5lbFxuIik7DQotCQlyZXR1cm4gZGVmYXVsdF9jaG47IA0KLQl9DQotCQ0KLQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbY2hhbm5lbF0gPiAwKQ0KLQkJcmV0dXJuIGNoYW5uZWw7DQotCQ0KLQlyZXR1cm4gZGVmYXVsdF9jaG47DQotfQ0KLQ0KLSNpZiAwDQotRVhQT1JUX1NZTUJPTChEb3QxMWRfSW5pdCk7DQotRVhQT1JUX1NZTUJPTChEb3QxMWRfUmVzZXQpOw0KLUVYUE9SVF9TWU1CT0woRG90MTFkX1VwZGF0ZUNvdW50cnlJZSk7DQotRVhQT1JUX1NZTUJPTChET1QxMURfR2V0TWF4VHhQd3JJbkRibSk7DQotRVhQT1JUX1NZTUJPTChET1QxMURfU2NhbkNvbXBsZXRlKTsNCi1FWFBPUlRfU1lNQk9MKElzTGVnYWxDaGFubmVsKTsNCi1FWFBPUlRfU1lNQk9MKFRvTGVnYWxDaGFubmVsKTsNCi0jZW5kaWYNCi0jZW5kaWYNCisjaWZkZWYgRU5BQkxFX0RPVDExRAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8JRmlsZToKKy8vCQlEb3QxMWQuYworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCUltcGxlbWVudCA4MDIuMTFkLgorLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2luY2x1ZGUgImRvdDExZC5oIgorCit2b2lkCitEb3QxMWRfSW5pdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3sKKwlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oaWVlZSk7CisKKwlwRG90MTFkSW5mby0+YkVuYWJsZWQgPSAwOworCisJcERvdDExZEluZm8tPlN0YXRlID0gRE9UMTFEX1NUQVRFX05PTkU7CisJcERvdDExZEluZm8tPkNvdW50cnlJZUxlbiA9IDA7CisJbWVtc2V0KHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcCwgMCwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOworCW1lbXNldChwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0LCAweEZGLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7CisJUkVTRVRfQ0lFX1dBVENIRE9HKGllZWUpOworCisJcHJpbnRrKCJEb3QxMWRfSW5pdCgpXG4iKTsKK30KKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVJlc2V0IHRvIHRoZSBzdGF0ZSBhcyB3ZSBhcmUganVzdCBlbnRlcmluZyBhIHJlZ3VsYXRvcnkgZG9tYWluLgorLy8KK3ZvaWQKK0RvdDExZF9SZXNldChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3sKKwl1MzIgaTsKKwlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oaWVlZSk7CisKKwkvLyBDbGVhciBvbGQgY2hhbm5lbCBtYXAKKwltZW1zZXQocERvdDExZEluZm8tPmNoYW5uZWxfbWFwLCAwLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7CisJbWVtc2V0KHBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3QsIDB4RkYsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsKKwkvLyBTZXQgbmV3IGNoYW5uZWwgbWFwCisJZm9yIChpPTE7IGk8PTExOyBpKyspIHsKKwkJKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcClbaV0gPSAxOworCX0KKwlmb3IgKGk9MTI7IGk8PTE0OyBpKyspIHsKKwkJKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcClbaV0gPSAyOworCX0KKworCXBEb3QxMWRJbmZvLT5TdGF0ZSA9IERPVDExRF9TVEFURV9OT05FOworCXBEb3QxMWRJbmZvLT5Db3VudHJ5SWVMZW4gPSAwOworCVJFU0VUX0NJRV9XQVRDSERPRyhpZWVlKTsKKworCS8vcHJpbnRrKCJEb3QxMWRfUmVzZXQoKVxuIik7Cit9CisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlVcGRhdGUgY291bnRyeSBJRSBmcm9tIEJlYWNvbiBvciBQcm9iZSBSZXNvcG5zZQorLy8JCWFuZCBjb25maWd1cmUgUEhZIGZvciBvcGVyYXRpb24gaW4gdGhlIHJlZ3VsYXRvcnkgZG9tYWluLgorLy8KKy8vCVRPRE86CisvLwkJQ29uZmlndXJlIFR4IHBvd2VyLgorLy8KKy8vCUFzc3VtcHRpb246CisvLwkJMS4gSVNfRE9UMTFEX0VOQUJMRSgpIGlzIFRSVUUuCisvLwkJMi4gSW5wdXQgSUUgaXMgYW4gdmFsaWQgb25lLgorLy8KK3ZvaWQKK0RvdDExZF9VcGRhdGVDb3VudHJ5SWUoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwKKwl1OCAqCQlwVGFkZHIsCisJdTE2CUNvdXRyeUllTGVuLAorCXU4ICogcENvdXRyeUllCisJKQoreworCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOworCXU4IGksIGosIE51bVRyaXBsZXMsIE1heENobmxOdW07CisJUENITkxfVFhQT1dFUl9UUklQTEUgcFRyaXBsZTsKKworCWlmKChDb3V0cnlJZUxlbiAtIDMpJTMgIT0gMCkKKwl7CisJCXByaW50aygiRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgpOiBJbnZhbGlkIGNvdW50cnkgSUUsIHNraXAgaXQuLi4uLi4uLjFcbiIpOworCQlEb3QxMWRfUmVzZXQoZGV2KTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldChwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXAsIDAsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsKKwltZW1zZXQocERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdCwgMHhGRiwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOworCU1heENobmxOdW0gPSAwOworCU51bVRyaXBsZXMgPSAoQ291dHJ5SWVMZW4gLSAzKSAvIDM7IC8vIHNraXAgMy1ieXRlIGNvdW50cnkgc3RyaW5nLgorCXBUcmlwbGUgPSAoUENITkxfVFhQT1dFUl9UUklQTEUpKHBDb3V0cnlJZSArIDMpOworCWZvcihpID0gMDsgaSA8IE51bVRyaXBsZXM7IGkrKykKKwl7CisJCWlmKE1heENobmxOdW0gPj0gcFRyaXBsZS0+Rmlyc3RDaG5sKQorCQl7IC8vIEl0IGlzIG5vdCBpbiBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvcmRlciwgc28gc3RvcCBwcm9jZXNzaW5nLgorCQkJcHJpbnRrKCJEb3QxMWRfVXBkYXRlQ291bnRyeUllKCk6IEludmFsaWQgY291bnRyeSBJRSwgc2tpcCBpdC4uLi4uLi4uMVxuIik7CisJCQlEb3QxMWRfUmVzZXQoZGV2KTsKKwkJCXJldHVybjsKKwkJfQorCQlpZihNQVhfQ0hBTk5FTF9OVU1CRVIgPCAocFRyaXBsZS0+Rmlyc3RDaG5sICsgcFRyaXBsZS0+TnVtQ2hubHMpKQorCQl7IC8vIEl0IGlzIG5vdCBhIHZhbGlkIHNldCBvZiBjaGFubmVsIGlkLCBzbyBzdG9wIHByb2Nlc3NpbmcuCisJCQlwcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogSW52YWxpZCBjb3VudHJ5IElFLCBza2lwIGl0Li4uLi4uLi4yXG4iKTsKKwkJCURvdDExZF9SZXNldChkZXYpOworCQkJcmV0dXJuOworCQl9CisKKwkJZm9yKGogPSAwIDsgaiA8IHBUcmlwbGUtPk51bUNobmxzOyBqKyspCisJCXsKKwkJCXBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtwVHJpcGxlLT5GaXJzdENobmwgKyBqXSA9IDE7CisJCQlwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0W3BUcmlwbGUtPkZpcnN0Q2hubCArIGpdID0gcFRyaXBsZS0+TWF4VHhQb3dlckluRGJtOworCQkJTWF4Q2hubE51bSA9IHBUcmlwbGUtPkZpcnN0Q2hubCArIGo7CisJCX0KKworCQlwVHJpcGxlID0gKFBDSE5MX1RYUE9XRVJfVFJJUExFKSgodTgqKXBUcmlwbGUgKyAzKTsKKwl9CisjaWYgMQorCS8vcHJpbnRrKCJEb3QxMWRfVXBkYXRlQ291bnRyeUllKCk6IENoYW5uZWwgTGlzdDpcbiIpOworCXByaW50aygiQ2hhbm5lbCBMaXN0OiIpOworCWZvcihpPTE7IGk8PSBNQVhfQ0hBTk5FTF9OVU1CRVI7IGkrKykKKwkJaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW2ldID4gMCkKKwkJCXByaW50aygiICVkIiwgaSk7CisJcHJpbnRrKCJcbiIpOworI2VuZGlmCisKKwlVUERBVEVfQ0lFX1NSQyhkZXYsIHBUYWRkcik7CisKKwlwRG90MTFkSW5mby0+Q291bnRyeUllTGVuID0gQ291dHJ5SWVMZW47CisJbWVtY3B5KHBEb3QxMWRJbmZvLT5Db3VudHJ5SWVCdWYsIHBDb3V0cnlJZSxDb3V0cnlJZUxlbik7CisJcERvdDExZEluZm8tPlN0YXRlID0gRE9UMTFEX1NUQVRFX0xFQVJORUQ7Cit9CisKK3ZvaWQgZHVtcF9jaG5sX21hcCh1OCAqIGNoYW5uZWxfbWFwKQoreworCWludCBpOworCXByaW50aygiQ2hhbm5lbCBMaXN0OiIpOworCWZvcihpPTE7IGk8PSBNQVhfQ0hBTk5FTF9OVU1CRVI7IGkrKykKKwkJaWYoY2hhbm5lbF9tYXBbaV0gPiAwKQorCQkJcHJpbnRrKCIgJWQoJWQpIiwgaSwgY2hhbm5lbF9tYXBbaV0pOworCXByaW50aygiXG4iKTsKK30KKwordTgKK0RPVDExRF9HZXRNYXhUeFB3ckluRGJtKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsCisJdTggQ2hhbm5lbAorCSkKK3sKKwlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsKKwl1OCBNYXhUeFB3ckluRGJtID0gMjU1OworCisJaWYoTUFYX0NIQU5ORUxfTlVNQkVSIDwgQ2hhbm5lbCkKKwl7CisJCXByaW50aygiRE9UMTFEX0dldE1heFR4UHdySW5EYm0oKTogSW52YWxpZCBDaGFubmVsXG4iKTsKKwkJcmV0dXJuIE1heFR4UHdySW5EYm07CisJfQorCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtDaGFubmVsXSkKKwl7CisJCU1heFR4UHdySW5EYm0gPSBwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0W0NoYW5uZWxdOworCX0KKworCXJldHVybiBNYXhUeFB3ckluRGJtOworfQorCisKK3ZvaWQKK0RPVDExRF9TY2FuQ29tcGxldGUoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYKKwkpCit7CisJUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7CisKKwlzd2l0Y2gocERvdDExZEluZm8tPlN0YXRlKQorCXsKKwljYXNlIERPVDExRF9TVEFURV9MRUFSTkVEOgorCQlwRG90MTFkSW5mby0+U3RhdGUgPSBET1QxMURfU1RBVEVfRE9ORTsKKwkJYnJlYWs7CisKKwljYXNlIERPVDExRF9TVEFURV9ET05FOgorCQlpZiggR0VUX0NJRV9XQVRDSERPRyhkZXYpID09IDAgKQorCQl7IC8vIFJlc2V0IGNvdW50cnkgSUUgaWYgcHJldmlvdXMgb25lIGlzIGdvbmUuCisJCQlEb3QxMWRfUmVzZXQoZGV2KTsKKwkJfQorCQlicmVhazsKKwljYXNlIERPVDExRF9TVEFURV9OT05FOgorCQlicmVhazsKKwl9Cit9CisKK2ludCBJc0xlZ2FsQ2hhbm5lbCgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwKKwl1OCBjaGFubmVsCispCit7CisJUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7CisKKwlpZihNQVhfQ0hBTk5FTF9OVU1CRVIgPCBjaGFubmVsKQorCXsKKwkJcHJpbnRrKCJJc0xlZ2FsQ2hhbm5lbCgpOiBJbnZhbGlkIENoYW5uZWxcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW2NoYW5uZWxdID4gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBUb0xlZ2FsQ2hhbm5lbCgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwKKwl1OCBjaGFubmVsCispCit7CisJUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7CisJdTggZGVmYXVsdF9jaG4gPSAwOworCXUzMiBpID0gMDsKKworCWZvciAoaT0xOyBpPD0gTUFYX0NIQU5ORUxfTlVNQkVSOyBpKyspCisJeworCQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbaV0gPiAwKQorCQl7CisJCQlkZWZhdWx0X2NobiA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmKE1BWF9DSEFOTkVMX05VTUJFUiA8IGNoYW5uZWwpCisJeworCQlwcmludGsoIklzTGVnYWxDaGFubmVsKCk6IEludmFsaWQgQ2hhbm5lbFxuIik7CisJCXJldHVybiBkZWZhdWx0X2NobjsKKwl9CisKKwlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbY2hhbm5lbF0gPiAwKQorCQlyZXR1cm4gY2hhbm5lbDsKKworCXJldHVybiBkZWZhdWx0X2NobjsKK30KKworI2lmIDAKK0VYUE9SVF9TWU1CT0woRG90MTFkX0luaXQpOworRVhQT1JUX1NZTUJPTChEb3QxMWRfUmVzZXQpOworRVhQT1JUX1NZTUJPTChEb3QxMWRfVXBkYXRlQ291bnRyeUllKTsKK0VYUE9SVF9TWU1CT0woRE9UMTFEX0dldE1heFR4UHdySW5EYm0pOworRVhQT1JUX1NZTUJPTChET1QxMURfU2NhbkNvbXBsZXRlKTsKK0VYUE9SVF9TWU1CT0woSXNMZWdhbENoYW5uZWwpOworRVhQT1JUX1NZTUJPTChUb0xlZ2FsQ2hhbm5lbCk7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvZG90MTFkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuaAppbmRleCA2NGJjZjE1Li44MjU3NmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuaApAQCAtMSwxMDIgKzEsMTAyIEBACi0jaWZuZGVmIF9fSU5DX0RPVDExRF9IDQotI2RlZmluZSBfX0lOQ19ET1QxMURfSA0KLQ0KLSNpbmNsdWRlICJpZWVlODAyMTEuaCINCi0NCi0vLyNkZWZpbmUgRU5BQkxFX0RPVDExRA0KLQ0KLS8vI2RlZmluZSBET1QxMURfTUFYX0NITkxfTlVNIDgzDQotDQotdHlwZWRlZiBzdHJ1Y3QgX0NITkxfVFhQT1dFUl9UUklQTEUgew0KLQl1OCBGaXJzdENobmw7DQotCXU4ICBOdW1DaG5sczsNCi0JdTggIE1heFR4UG93ZXJJbkRibTsNCi19Q0hOTF9UWFBPV0VSX1RSSVBMRSwgKlBDSE5MX1RYUE9XRVJfVFJJUExFOw0KLQ0KLXR5cGVkZWYgZW51bSBfRE9UMTFEX1NUQVRFIHsNCi0JRE9UMTFEX1NUQVRFX05PTkUgPSAwLA0KLQlET1QxMURfU1RBVEVfTEVBUk5FRCwNCi0JRE9UMTFEX1NUQVRFX0RPTkUsDQotfURPVDExRF9TVEFURTsNCi0NCi10eXBlZGVmIHN0cnVjdCBfUlRfRE9UMTFEX0lORk8gew0KLQkvL0RFQ0xBUkVfUlRfT0JKRUNUKFJUX0RPVDExRF9JTkZPKTsNCi0NCi0JYm9vbCBiRW5hYmxlZDsgLy8gZG90MTFNdWx0aURvbWFpbkNhcGFiaWxpdHlFbmFibGVkDQotDQotCXUxNiBDb3VudHJ5SWVMZW47IC8vID4gMCBpZiBDb3VudHJ5SWVCdWZbXSBjb250YWlucyB2YWxpZCBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQuDQotCXU4ICBDb3VudHJ5SWVCdWZbTUFYX0lFX0xFTl07DQotCXU4ICBDb3VudHJ5SWVTcmNBZGRyWzZdOyAvLyBTb3VyY2UgQVAgb2YgdGhlIGNvdW50cnkgSUUuDQotCXU4ICBDb3VudHJ5SWVXYXRjaGRvZzsgDQotDQotCXU4ICBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07ICAvLyEhIVZhbHVlIDA6IEludmFsaWQsIDE6IFZhbGlkIChhY3RpdmUgc2NhbiksIDI6IFZhbGlkIChwYXNzaXZlIHNjYW4pDQotCS8vdTggIENobmxMaXN0TGVuOyAvLyAjQnl0ZXMgdmFsaWQgaW4gQ2hubExpc3RbXS4NCi0JLy91OCAgQ2hubExpc3RbRE9UMTFEX01BWF9DSE5MX05VTV07DQotCXU4ICBNYXhUeFB3ckRibUxpc3RbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOw0KLQ0KLQlET1QxMURfU1RBVEUgU3RhdGU7DQotfVJUX0RPVDExRF9JTkZPLCAqUFJUX0RPVDExRF9JTkZPOw0KLSNkZWZpbmUgZXFNYWNBZGRyKGEsYikJCSggKChhKVswXT09KGIpWzBdICYmIChhKVsxXT09KGIpWzFdICYmIChhKVsyXT09KGIpWzJdICYmIChhKVszXT09KGIpWzNdICYmIChhKVs0XT09KGIpWzRdICYmIChhKVs1XT09KGIpWzVdKSA/IDE6MCApDQotI2RlZmluZSBjcE1hY0FkZHIoZGVzLHNyYykJICAgICAgKChkZXMpWzBdPShzcmMpWzBdLChkZXMpWzFdPShzcmMpWzFdLChkZXMpWzJdPShzcmMpWzJdLChkZXMpWzNdPShzcmMpWzNdLChkZXMpWzRdPShzcmMpWzRdLChkZXMpWzVdPShzcmMpWzVdKQ0KLSNkZWZpbmUgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpICgoUFJUX0RPVDExRF9JTkZPKSgoX19wSWVlZURldiktPnBEb3QxMWRJbmZvKSkNCi0NCi0jZGVmaW5lIElTX0RPVDExRF9FTkFCTEUoX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5iRW5hYmxlZA0KLSNkZWZpbmUgSVNfQ09VTlRSWV9JRV9WQUxJRChfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4gPiAwKQ0KLQ0KLSNkZWZpbmUgSVNfRVFVQUxfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgZXFNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpIA0KLSNkZWZpbmUgVVBEQVRFX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGNwTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQ0KLQ0KLSNkZWZpbmUgSVNfQ09VTlRSWV9JRV9DSEFOR0VEKF9fcEllZWVEZXYsIF9fSWUpIFwNCi0JKCgoX19JZSkuTGVuZ3RoID09IDAgfHwgKF9fSWUpLkxlbmd0aCAhPSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbikgPyBcDQotCUZBTFNFIDogXA0KLQkoIW1lbWNtcChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUJ1ZiwgKF9fSWUpLk9jdGV0LCAoX19JZSkuTGVuZ3RoKSkpDQotDQotI2RlZmluZSBDSUVfV0FUQ0hET0dfVEggMQ0KLSNkZWZpbmUgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVdhdGNoZG9nDQotI2RlZmluZSBSRVNFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSA9IDAgDQotI2RlZmluZSBVUERBVEVfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpICsrR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KQ0KLQ0KLSNkZWZpbmUgSVNfRE9UMTFEX1NUQVRFX0RPTkUoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+U3RhdGUgPT0gRE9UMTFEX1NUQVRFX0RPTkUpDQotDQotDQotdm9pZA0KLURvdDExZF9Jbml0KA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2DQotCSk7DQotDQotdm9pZA0KLURvdDExZF9SZXNldCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldg0KLQkpOw0KLQ0KLXZvaWQNCi1Eb3QxMWRfVXBkYXRlQ291bnRyeUllKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LA0KLQl1OCAqCQlwVGFkZHIsDQotCXUxNglDb3V0cnlJZUxlbiwNCi0JdTggKiBwQ291dHJ5SWUJIA0KLQkpOw0KLQ0KLXU4DQotRE9UMTFEX0dldE1heFR4UHdySW5EYm0oDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsDQotCXU4IENoYW5uZWwNCi0JKTsNCi0NCi12b2lkDQotRE9UMTFEX1NjYW5Db21wbGV0ZSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYNCi0JKTsNCi0NCi1pbnQgSXNMZWdhbENoYW5uZWwoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LA0KLQl1OCBjaGFubmVsDQotKTsNCi0NCi1pbnQgVG9MZWdhbENoYW5uZWwoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LA0KLQl1OCBjaGFubmVsDQotKTsNCi0NCi12b2lkIGR1bXBfY2hubF9tYXAodTggKiBjaGFubmVsX21hcCk7DQotI2VuZGlmIC8vICNpZm5kZWYgX19JTkNfRE9UMTFEX0gNCisjaWZuZGVmIF9fSU5DX0RPVDExRF9ICisjZGVmaW5lIF9fSU5DX0RPVDExRF9ICisKKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKKworLy8jZGVmaW5lIEVOQUJMRV9ET1QxMUQKKworLy8jZGVmaW5lIERPVDExRF9NQVhfQ0hOTF9OVU0gODMKKwordHlwZWRlZiBzdHJ1Y3QgX0NITkxfVFhQT1dFUl9UUklQTEUgeworCXU4IEZpcnN0Q2hubDsKKwl1OCAgTnVtQ2hubHM7CisJdTggIE1heFR4UG93ZXJJbkRibTsKK31DSE5MX1RYUE9XRVJfVFJJUExFLCAqUENITkxfVFhQT1dFUl9UUklQTEU7CisKK3R5cGVkZWYgZW51bSBfRE9UMTFEX1NUQVRFIHsKKwlET1QxMURfU1RBVEVfTk9ORSA9IDAsCisJRE9UMTFEX1NUQVRFX0xFQVJORUQsCisJRE9UMTFEX1NUQVRFX0RPTkUsCit9RE9UMTFEX1NUQVRFOworCit0eXBlZGVmIHN0cnVjdCBfUlRfRE9UMTFEX0lORk8geworCS8vREVDTEFSRV9SVF9PQkpFQ1QoUlRfRE9UMTFEX0lORk8pOworCisJYm9vbCBiRW5hYmxlZDsgLy8gZG90MTFNdWx0aURvbWFpbkNhcGFiaWxpdHlFbmFibGVkCisKKwl1MTYgQ291bnRyeUllTGVuOyAvLyA+IDAgaWYgQ291bnRyeUllQnVmW10gY29udGFpbnMgdmFsaWQgY291bnRyeSBpbmZvcm1hdGlvbiBlbGVtZW50LgorCXU4ICBDb3VudHJ5SWVCdWZbTUFYX0lFX0xFTl07CisJdTggIENvdW50cnlJZVNyY0FkZHJbNl07IC8vIFNvdXJjZSBBUCBvZiB0aGUgY291bnRyeSBJRS4KKwl1OCAgQ291bnRyeUllV2F0Y2hkb2c7CisKKwl1OCAgY2hhbm5lbF9tYXBbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOyAgLy8hISFWYWx1ZSAwOiBJbnZhbGlkLCAxOiBWYWxpZCAoYWN0aXZlIHNjYW4pLCAyOiBWYWxpZCAocGFzc2l2ZSBzY2FuKQorCS8vdTggIENobmxMaXN0TGVuOyAvLyAjQnl0ZXMgdmFsaWQgaW4gQ2hubExpc3RbXS4KKwkvL3U4ICBDaG5sTGlzdFtET1QxMURfTUFYX0NITkxfTlVNXTsKKwl1OCAgTWF4VHhQd3JEYm1MaXN0W01BWF9DSEFOTkVMX05VTUJFUisxXTsKKworCURPVDExRF9TVEFURSBTdGF0ZTsKK31SVF9ET1QxMURfSU5GTywgKlBSVF9ET1QxMURfSU5GTzsKKyNkZWZpbmUgZXFNYWNBZGRyKGEsYikJCSggKChhKVswXT09KGIpWzBdICYmIChhKVsxXT09KGIpWzFdICYmIChhKVsyXT09KGIpWzJdICYmIChhKVszXT09KGIpWzNdICYmIChhKVs0XT09KGIpWzRdICYmIChhKVs1XT09KGIpWzVdKSA/IDE6MCApCisjZGVmaW5lIGNwTWFjQWRkcihkZXMsc3JjKQkgICAgICAoKGRlcylbMF09KHNyYylbMF0sKGRlcylbMV09KHNyYylbMV0sKGRlcylbMl09KHNyYylbMl0sKGRlcylbM109KHNyYylbM10sKGRlcylbNF09KHNyYylbNF0sKGRlcylbNV09KHNyYylbNV0pCisjZGVmaW5lIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KSAoKFBSVF9ET1QxMURfSU5GTykoKF9fcEllZWVEZXYpLT5wRG90MTFkSW5mbykpCisKKyNkZWZpbmUgSVNfRE9UMTFEX0VOQUJMRShfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPmJFbmFibGVkCisjZGVmaW5lIElTX0NPVU5UUllfSUVfVkFMSUQoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuID4gMCkKKworI2RlZmluZSBJU19FUVVBTF9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBlcU1hY0FkZHIoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVTcmNBZGRyLCBfX3BUYSkKKyNkZWZpbmUgVVBEQVRFX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGNwTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQorCisjZGVmaW5lIElTX0NPVU5UUllfSUVfQ0hBTkdFRChfX3BJZWVlRGV2LCBfX0llKSBcCisJKCgoX19JZSkuTGVuZ3RoID09IDAgfHwgKF9fSWUpLkxlbmd0aCAhPSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbikgPyBcCisJRkFMU0UgOiBcCisJKCFtZW1jbXAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVCdWYsIChfX0llKS5PY3RldCwgKF9fSWUpLkxlbmd0aCkpKQorCisjZGVmaW5lIENJRV9XQVRDSERPR19USCAxCisjZGVmaW5lIEdFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVXYXRjaGRvZworI2RlZmluZSBSRVNFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSA9IDAKKyNkZWZpbmUgVVBEQVRFX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSArK0dFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikKKworI2RlZmluZSBJU19ET1QxMURfU1RBVEVfRE9ORShfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5TdGF0ZSA9PSBET1QxMURfU1RBVEVfRE9ORSkKKworCit2b2lkCitEb3QxMWRfSW5pdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2CisJKTsKKwordm9pZAorRG90MTFkX1Jlc2V0KAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYKKwkpOworCit2b2lkCitEb3QxMWRfVXBkYXRlQ291bnRyeUllKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsCisJdTggKgkJcFRhZGRyLAorCXUxNglDb3V0cnlJZUxlbiwKKwl1OCAqIHBDb3V0cnlJZQorCSk7CisKK3U4CitET1QxMURfR2V0TWF4VHhQd3JJbkRibSgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LAorCXU4IENoYW5uZWwKKwkpOworCit2b2lkCitET1QxMURfU2NhbkNvbXBsZXRlKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2CisJKTsKKworaW50IElzTGVnYWxDaGFubmVsKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAorCXU4IGNoYW5uZWwKKyk7CisKK2ludCBUb0xlZ2FsQ2hhbm5lbCgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwKKwl1OCBjaGFubmVsCispOworCit2b2lkIGR1bXBfY2hubF9tYXAodTggKiBjaGFubmVsX21hcCk7CisjZW5kaWYgLy8gI2lmbmRlZiBfX0lOQ19ET1QxMURfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggZTU3NTJmNi4uODBmOWNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC03MTksNyArNzE5LDcgQEAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgc29mdG1hY19zY2FuX3dxKTsKICNlbHNlCiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCkBAIC03NzcsNyArNzc3LDcgQEAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHNvZnRtYWNfc2Nhbl93cSk7CiAjZWxzZQogdm9pZCBpZWVlODAyMTFfc29mdG1hY19zY2FuX3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQpAQCAtMjk4MCw3ICsyOTgwLDcgQEAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCiB2b2lkIGllZWU4MDIxMV9zdGFydF9pYnNzX3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHN0YXJ0X2lic3Nfd3EpOwogI2Vsc2UKIHZvaWQgaWVlZTgwMjExX3N0YXJ0X2lic3Nfd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCkBAIC0zMTYyLDcgKzMxNjIsNyBAQAogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9yZXRyeV93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCBhc3NvY2lhdGVfcmV0cnlfd3EpOwogI2Vsc2UKIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9yZXRyeV93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggNmFhZDYxZS4uZDEyOTVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTg0MiwxNCArODQyLDE0IEBACiAKIAlpZiAobGVuPk1BWF9XUEFfSUVfTEVOIHx8IChsZW4gJiYgaWUgPT0gTlVMTCkpCiAJewotCQlwcmludGsoInJldHVybiBlcnJvciBvdXQsIGxlbjolZFxuIiwgbGVuKTsKKwkJcHJpbnRrKCJyZXR1cm4gZXJyb3Igb3V0LCBsZW46JXp1XG4iLCBsZW4pOwogCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChsZW4pCiAJewogCQlpZiAobGVuICE9IGllWzFdKzIpewotCQkJcHJpbnRrKCJsZW46JWQsIGllOiVkXG4iLCBsZW4sIGllWzFdKTsKKwkJCXByaW50aygibGVuOiV6dSwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwppbmRleCA2NmRlNWNjLi42ZWNkMTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwpAQCAtMzE2MSw3ICszMTYxLDcgQEAKIAkJcmV0dXJuIDsKIAogCX0KLQkvL3doaWxlKCEgKnRhaWwgJiAoMTw8MzEpKXsKKwkvL3doaWxlKCEgKCp0YWlsICYgKDE8PDMxKSkpewogCQkqdGFpbD0gMDsgLy8gemVyb2VzIGhlYWRlcgogCiAJCSp0YWlsID0gKnRhaWx8ICgxPDwyOSkgOyAvL2Zpc3Qgc2VnbWVudCBvZiB0aGUgcGFja2V0CkBAIC01NDM4LDcgKzU0MzgsNyBAQAogLy8Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHdhdGNoX2RvZ193cSk7CiAvLwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqKQogLy8JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCB3YXRjaF9kb2dfd3EpOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod193YWtldXBfd3EpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CiAjZWxzZQpAQCAtNTQ1OSw3ICs1NDU5LDcgQEAKIC8vICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHdhdGNoX2RvZ193cSk7CiAvLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsKLSAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod19zbGVlcF93cSk7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CiAjZWxzZQpAQCAtNjQwNyw3ICs2NDA3LDcgQEAKIHZvaWQgcnRsODE4MF90eF9pcnFfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCS8vc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHJlc2V0X3dxKTsKLSAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwpAQCAtNjY5MSw3ICs2NjkxLDcgQEAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCiB2b2lkIEdQSU9DaGFuZ2VSRldvcmtJdGVtQ2FsbEJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCS8vc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJLy9zdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgR1BJT0NoYW5nZVJGV29ya0l0ZW0ud29yayk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMKaW5kZXggNzQyZGMxMS4uOTNiNWE3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYwpAQCAtMSwxNzI1ICsxLDE3MjUgQEAKLS8vI2luY2x1ZGUgInI4MTgwLmgiDQotI2luY2x1ZGUgInI4MTgwX2RtLmgiDQotI2luY2x1ZGUgInI4MTgwX2h3LmgiDQotI2luY2x1ZGUgInI4MTgwXzkzY3g2LmgiDQotLy97YnkgYW15IDA4MDMxMg0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVJldHVybiBUUlVFIGlmIHdlIHNoYWxsIHBlcmZvcm0gSGlnaCBQb3dlciBNZWNhaG5pc20sIEZBTFNFIG90aGVyd2lzZS4JDQotLy8NCi0vLytieSBhbXkgMDgwMzEyDQotI2RlZmluZSBSQVRFX0FEQVBUSVZFX1RJTUVSX1BFUklPRCAgICAgIDMwMA0KLQ0KLWJvb2wgQ2hlY2tIaWdoUG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7DQotDQotCWlmKCFwcml2LT5iUmVnSGlnaFBvd2VyTWVjaGFuaXNtKQ0KLQl7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0JCQ0KLQlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEX1NDQU5OSU5HKQ0KLQl7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0NCi0JcmV0dXJuIHRydWU7DQotfQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVVwZGF0ZSBUeCBwb3dlciBsZXZlbCBpZiBuZWNlc3NhcnkuDQotLy8JCVNlZSBhbHNvIERvUnhIaWdoUG93ZXIoKSBhbmQgU2V0VHhQb3dlckxldmVsODE4NSgpIGZvciByZWZlcmVuY2UuDQotLy8NCi0vLwlOb3RlOg0KLS8vCQlUaGUgcmVhc29uIHdoeSB3ZSB1ZHBhdGUgVHggcG93ZXIgbGV2ZWwgaGVyZSBpbnN0ZWFkIG9mIERvUnhIaWdoUG93ZXIoKSANCi0vLwkJaXMgdGhlIG51bWJlciBvZiBJTyB0byBjaGFuZ2UgVHggcG93ZXIgaXMgbXVjaCBtb3JlIHRoYW4gY2hhbmUgVFIgc3dpdGNoIA0KLS8vCQlhbmQgdGhleSBhcmUgcmVsYXRlZCB0byBPRkRNIGFuZCBNQUMgcmVnaXN0ZXJzLiANCi0vLwkJU28sIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIGl0IHNvIGZyZXF1ZW50bHkgaW4gcGVyLVJ4IHBhY2tldCBiYXNlLiANCi0vLw0KLXZvaWQNCi1Eb1R4SGlnaFBvd2VyKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JdTE2CQkJSGlQd3JVcHBlclRoID0gMDsNCi0JdTE2CQkJSGlQd3JMb3dlclRoID0gMDsNCi0JdTgJCQlSU1NJSGlQd3JVcHBlclRoOw0KLQl1OAkJCVJTU0lIaVB3ckxvd2VyVGg7DQotCXU4CQkJdTFiVG1wOw0KLQljaGFyCQkJT2ZkbVR4UHdySWR4LCBDY2tUeFB3cklkeDsNCi0NCi0JLy9wcmludGsoIi0tLS0+IERvVHhIaWdoUG93ZXIoKVxuIik7DQotDQotCUhpUHdyVXBwZXJUaCA9IHByaXYtPlJlZ0hpUHdyVXBwZXJUaDsNCi0JSGlQd3JMb3dlclRoID0gcHJpdi0+UmVnSGlQd3JMb3dlclRoOwkJCQkJCQ0KLQkNCi0JSGlQd3JVcHBlclRoID0gSGlQd3JVcHBlclRoICogMTA7DQotCUhpUHdyTG93ZXJUaCA9IEhpUHdyTG93ZXJUaCAqIDEwOw0KLQlSU1NJSGlQd3JVcHBlclRoID0gcHJpdi0+UmVnUlNTSUhpUHdyVXBwZXJUaDsNCi0JUlNTSUhpUHdyTG93ZXJUaCA9IHByaXYtPlJlZ1JTU0lIaVB3ckxvd2VyVGg7DQotDQotCS8vbHptIGFkZCAwODA4MjYNCi0JT2ZkbVR4UHdySWR4ICA9IHByaXYtPmNodHhwd3Jfb2ZkbVtwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsgDQotCUNja1R4UHdySWR4ICA9IHByaXYtPmNodHhwd3JbcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbF07IA0KLQ0KLQkvLwlwcmludGsoIkRvVHhIaWdoUG93ZXIoKSAtIFVuZGVjb3JhdGVkU21vb3RoZWRTUzolZCwgQ3VyQ0NLUlNTSSA9ICVkICwgYkN1ckNDS1BrdD0gJWQgXG4iLCBwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MsIHByaXYtPkN1ckNDS1JTU0ksIHByaXYtPmJDdXJDQ0tQa3QgKTsNCi0JDQotCWlmKChwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MgPiBIaVB3clVwcGVyVGgpIHx8DQotCQkocHJpdi0+YkN1ckNDS1BrdCAmJiAocHJpdi0+Q3VyQ0NLUlNTSSA+IFJTU0lIaVB3clVwcGVyVGgpKSkNCi0Jew0KLQkJLy8gU3RldmVubCBzdWdnZXN0ZWQgdGhhdCBkZWdyYWRlIDhkYm0gaW4gaGlnaCBwb3dlciBzYXRlLiAyMDA3LTEyLTA0IElzYWlhaCANCi0JCQ0KLQkvLwlwcmludGsoIj09PT09PkRvVHhIaWdoUG93ZXIoKSAtIEhpZ2ggUG93ZXIgLSBVbmRlY29yYXRlZFNtb290aGVkU1M6JWQsICBIaVB3clVwcGVyVGggPSAlZCBcbiIsIHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUywgSGlQd3JVcHBlclRoICk7DQotCQlwcml2LT5iVG9VcGRhdGVUeFB3ciA9IHRydWU7DQotCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOw0KLQ0KLQkJLy8gSWYgaXQgbmV2ZXIgZW50ZXIgSGlnaCBQb3dlci4NCi0JCWlmKCBDY2tUeFB3cklkeCA9PSB1MWJUbXApDQotCQl7DQotCQl1MWJUbXAgPSAodTFiVG1wID4gMTYpID8gKHUxYlRtcCAtMTYpOiAwOyAgLy8gOGRibQ0KLQkJd3JpdGVfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MsIHUxYlRtcCk7DQotDQotCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDKTsNCi0JCXUxYlRtcCA9ICh1MWJUbXAgPiAxNikgPyAodTFiVG1wIC0xNik6IDA7ICAvLyA4ZGJtDQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYlRtcCk7DQotCQl9DQotCQkNCi0JfQ0KLQllbHNlIGlmKChwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MgPCBIaVB3ckxvd2VyVGgpICYmDQotCQkoIXByaXYtPmJDdXJDQ0tQa3QgfHwgcHJpdi0+Q3VyQ0NLUlNTSSA8IFJTU0lIaVB3ckxvd2VyVGgpKQ0KLQl7DQotCS8vCSBwcmludGsoIkRvVHhIaWdoUG93ZXIoKSAtIGxvd2VyIFBvd2VyIC0gVW5kZWNvcmF0ZWRTbW9vdGhlZFNTOiVkLCAgSGlQd3JVcHBlclRoID0gJWQgXG4iLCBwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MsIEhpUHdyTG93ZXJUaCApOw0KLQkJaWYocHJpdi0+YlRvVXBkYXRlVHhQd3IpDQotCQl7DQotCQkJcHJpdi0+YlRvVXBkYXRlVHhQd3IgPSBmYWxzZTsNCi0JCQkvL1NEMyByZXF1aXJlZC4NCi0JCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOwkJCQ0KLQkJCWlmKHUxYlRtcCA8IENja1R4UHdySWR4KQ0KLQkJCXsNCi0JCQkvL3UxYlRtcCA9ICgodTFiVG1wKzE2KSA+IDM1KSA/IDM1OiAodTFiVG1wKzE2KTsgIC8vIDhkYm0NCi0JCQkvL3dyaXRlX25pY19ieXRlKGRldiwgQ0NLX1RYQUdDLCB1MWJUbXApOw0KLQkJCXdyaXRlX25pY19ieXRlKGRldiwgQ0NLX1RYQUdDLCBDY2tUeFB3cklkeCk7DQotCQkJfQ0KLQ0KLQkJCXUxYlRtcD0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOw0KLQkJCWlmKHUxYlRtcCA8IE9mZG1UeFB3cklkeCkNCi0JCQl7DQotCQkJLy91MWJUbXAgPSAoKHUxYlRtcCsxNikgPiAzNSkgPyAzNTogKHUxYlRtcCsxNik7ICAvLyA4ZGJtDQotCQkJLy93cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYlRtcCk7DQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCBPZmRtVHhQd3JJZHgpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQkvL3ByaW50aygiPC0tLS0gRG9UeEhpZ2hQb3dlcigpXG4iKTsNCi19DQotDQotDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJQ2FsbGJhY2sgZnVuY3Rpb24gb2YgVXBkYXRlVHhQb3dlcldvcmtJdGVtLg0KLS8vCQlCZWNhdXNlIG9mIHNvbWUgZXZlbnQgaGFwcGVuZCwgZS5nLiBDQ1ggVFBDLCBIaWdoIFBvd2VyIE1lY2hhbmlzbSwgDQotLy8JCVdlIHVwZGF0ZSBUeCBwb3dlciBvZiBjdXJyZW50IGNoYW5uZWwgYWdhaW4uIA0KLS8vDQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkNCi12b2lkIHJ0bDgxODBfdHhfcHdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCi17DQotLy8gICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsNCi0vLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHdhdGNoX2RvZ193cSk7DQotICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7DQotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSx0eF9wd193cSk7DQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2Ow0KLSNlbHNlDQotdm9pZCBydGw4MTgwX3R4X3B3X3dxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQotew0KLQkvLyBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7DQotI2VuZGlmDQotDQotLy8JcHJpbnRrKCItLS0tPiBVcGRhdGVUeFBvd2VyV29ya0l0ZW1DYWxsYmFjaygpXG4iKTsNCi0JDQotCURvVHhIaWdoUG93ZXIoZGV2KTsJDQotCQ0KLS8vCXByaW50aygiPC0tLS0gVXBkYXRlVHhQb3dlcldvcmtJdGVtQ2FsbGJhY2soKVxuIik7DQotfQ0KLQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVJldHVybiBUUlVFIGlmIHdlIHNoYWxsIHBlcmZvcm0gRElHIE1lY2FobmlzbSwgRkFMU0Ugb3RoZXJ3aXNlLgkNCi0vLw0KLWJvb2wNCi1DaGVja0RpZygNCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldg0KLQkpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7DQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOw0KLQ0KLQlpZighcHJpdi0+YkRpZ01lY2hhbmlzbSkNCi0JCXJldHVybiBmYWxzZTsNCi0NCi0JaWYoaWVlZS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkNCi0JCXJldHVybiBmYWxzZTsNCi0NCi0JLy9pZihwcml2LT5DdXJyZW50T3BlcmFSYXRlIDwgMzYpIC8vIFNjaGVkdWxlIERpZyB1bmRlciBhbGwgT0ZETSByYXRlcy4gQnkgQnJ1Y2UsIDIwMDctMDYtMDEuDQotCWlmKChwcml2LT5pZWVlODAyMTEtPnJhdGUvNSkgPCAzNikgLy8gU2NoZWR1bGUgRGlnIHVuZGVyIGFsbCBPRkRNIHJhdGVzLiBCeSBCcnVjZSwgMjAwNy0wNi0wMS4NCi0JCXJldHVybiBmYWxzZTsNCi0JcmV0dXJuIHRydWU7DQotfQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCUltcGxlbWVudGF0aW9uIG9mIERJRyBmb3IgWmVicmEgYW5kIFplYnJhMi4JDQotLy8NCi12b2lkDQotRElHX1plYnJhKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JdTE2CQkJQ0NLRmFsc2VBbGFybSwgT0ZETUZhbHNlQWxhcm07DQotCXUxNgkJCU9mZG1GQTEsIE9mZG1GQTI7DQotCWludAkJCUluaXRpYWxHYWluU3RlcCA9IDc7IC8vIFRoZSBudW1iZXIgb2YgaW5pdGlhbCBnYWluIHN0YWdlcy4NCi0JaW50CQkJTG93ZXN0R2FpblN0YWdlID0gNDsgLy8gVGhlIGNhcGFibGUgbG93ZXN0IHN0YWdlIG9mIHBlcmZvcm1pbmcgZGlnIHdvcmtpdGVtLg0KLQl1MzIgCQkJQXdha2VQZXJpb2RJbjJTZWM9MDsNCi0NCi0JLy9wcmludGsoIi0tLS0tLS0tLT4gRElHX1plYnJhKClcbiIpOw0KLQ0KLQlDQ0tGYWxzZUFsYXJtID0gKHUxNikocHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlICYgMHgwMDAwZmZmZik7DQotCU9GRE1GYWxzZUFsYXJtID0gKHUxNikoKHByaXYtPkZhbHNlQWxhcm1SZWdWYWx1ZSA+PiAxNikgJiAweDAwMDBmZmZmKTsNCi0JT2ZkbUZBMSA9ICAweDE1Ow0KLQlPZmRtRkEyID0gKCh1MTYpKHByaXYtPlJlZ0RpZ09mZG1GYVVwVGgpKSA8PCA4Ow0KLQ0KLS8vCXByaW50aygiRElHKioqKioqKioqKkNDSyBGYWxzZSBBbGFybTogJSNYIFxuIixDQ0tGYWxzZUFsYXJtKTsNCi0vLwlwcmludGsoIkRJRyoqKioqKioqKipPRkRNIEZhbHNlIEFsYXJtOiAlI1ggXG4iLE9GRE1GYWxzZUFsYXJtKTsNCi0NCi0gICAgICAgIC8vIFRoZSBudW1iZXIgb2YgaW5pdGlhbCBnYWluIHN0ZXBzIGlzIGRpZmZlcmVudCwgYnkgQnJ1Y2UsIDIwMDctMDQtMTMuDQotCWlmIChwcml2LT5Jbml0aWFsR2FpbiA9PSAwICkgLy9hdXRvRElHDQotCXsgLy8gQWR2aXNlZCBmcm9tIFNEMyBEWg0KLQkJcHJpdi0+SW5pdGlhbEdhaW4gPSA0OyAvLyBJbiA4N0IsIG03NGRCbSBtZWFucyBTdGF0ZSA0IChtODJkQm0pDQotCX0NCi0JLy9pZihwSGFsRGF0YS0+VmVyc2lvbklEICE9IFZFUlNJT05fODE4N0JfQikNCi0JeyAvLyBBZHZpc2VkIGZyb20gU0QzIERaDQotCQlPZmRtRkExID0gIDB4MjA7DQotCX0NCi0JDQotI2lmIDEgLy9sem0gcmVzZXJ2ZWQgMDgwODI2DQotCUF3YWtlUGVyaW9kSW4yU2VjID0gKDIwMDAtcHJpdiAtPkRvemVQZXJpb2RJblBhc3QyU2VjKTsNCi0JLy9wcmludGsoIiYmJiBEb3plUGVyaW9kPSVkIEF3YWtlUGVyaW9kPSVkXG4iLCBwcml2LT5Eb3plUGVyaW9kSW5QYXN0MlNlYywgQXdha2VQZXJpb2RJbjJTZWMpOw0KLQlwcml2IC0+RG96ZVBlcmlvZEluUGFzdDJTZWM9MDsNCi0JDQotCWlmKEF3YWtlUGVyaW9kSW4yU2VjKQ0KLQl7CQ0KLQkJLy9SVF9UUkFDRShDT01QX0RJRywgREJHX1RSQUNFLCAoIkRJRzogQXdha2VQZXJpb2RJbjJTZWMoJWQpIC0gRkFUaCgweCVYICwgMHglWCkgLT4iLEF3YWtlUGVyaW9kSW4yU2VjLCBPZmRtRkExLCBPZmRtRkEyKSk7DQotCQkvLyBhZGp1ZXN0IERJRyB0aHJlc2hvbGQuDQotCQlPZmRtRkExID0gICh1MTYpKChPZmRtRkExKkF3YWtlUGVyaW9kSW4yU2VjKSAgLyAyMDAwKSA7ICAJDQotCQlPZmRtRkEyID0gICh1MTYpKChPZmRtRkEyKkF3YWtlUGVyaW9kSW4yU2VjKSAgLyAyMDAwKSA7DQotCQkvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfVFJBQ0UsICgiKCAweCVYICwgMHglWClcbiIsIE9mZG1GQTEsIE9mZG1GQTIpKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCTsvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfV0FSTklORywgKCJFUlJPUiEhICBBd2FrZVBlcmlvZEluMlNlYyBzaG91bGQgbm90IGJlIFpFUk8hIVxuIikpOw0KLQl9DQotI2VuZGlmDQotDQotCUluaXRpYWxHYWluU3RlcCA9IDg7DQotCUxvd2VzdEdhaW5TdGFnZSA9IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlOyAvLyBMb3dlc3QgZ2FpbiBzdGFnZS4NCi0NCi0JaWYgKE9GRE1GYWxzZUFsYXJtID4gT2ZkbUZBMSkNCi0Jew0KLQkJaWYgKE9GRE1GYWxzZUFsYXJtID4gT2ZkbUZBMikNCi0JCXsNCi0JCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlKys7DQotCQkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUgPjEpDQotCQkJew0KLQkJCQkvL3NlcmlvdXMgT0ZETSAgRmFsc2UgQWxhcm0sIG5lZWQgZmFsbGJhY2sNCi0JCQkJaWYgKHByaXYtPkluaXRpYWxHYWluIDwgSW5pdGlhbEdhaW5TdGVwKQ0KLQkJCQl7DQotCQkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47DQotDQotCQkJCQlwcml2LT5Jbml0aWFsR2FpbiA9IChwcml2LT5Jbml0aWFsR2FpbiArIDEpOw0KLS8vCQkJCQlwcmludGsoIkRJRyoqKioqKioqKipPRkRNIEZhbHNlIEFsYXJtOiAlI1gsICBPZmRtRkExOiAlI1gsIE9mZG1GQTI6ICUjWFxuIiwgT0ZETUZhbHNlQWxhcm0sIE9mZG1GQTEsIE9mZG1GQTIpOw0KLS8vCQkJCQlwcmludGsoIkRJRysrKysrKysgZmFsbGJhY2sgT0ZETTolZCBcbiIsIHByaXYtPkluaXRpYWxHYWluKTsNCi0JCQkJCVVwZGF0ZUluaXRpYWxHYWluKGRldik7IA0KLQkJCQl9DQotCQkJCXByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUgPSAwOw0KLQkJCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU9MDsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUpDQotCQkJCXByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUtLTsNCi0JCX0NCi0JCXByaXYtPkRJR19OdW1iZXJVcGdyYWRlVm90ZT0wOwkJDQotCX0NCi0JZWxzZQkNCi0Jew0KLQkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUpDQotCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZS0tOw0KLQkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlKys7DQotDQotCQlpZiAocHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPjkpDQotCQl7DQotCQkJaWYgKHByaXYtPkluaXRpYWxHYWluID4gTG93ZXN0R2FpblN0YWdlKSAvLyBJbiA4N0IsIG03OGRCbSBtZWFucyBTdGF0ZSA0IChtODY0ZEJtKQ0KLQkJCXsNCi0JCQkJcHJpdi0+SW5pdGlhbEdhaW5CYWNrVXA9IHByaXYtPkluaXRpYWxHYWluOw0KLQ0KLQkJCQlwcml2LT5Jbml0aWFsR2FpbiA9IChwcml2LT5Jbml0aWFsR2FpbiAtIDEpOw0KLS8vCQkJCXByaW50aygiRElHKioqKioqKioqKk9GRE0gRmFsc2UgQWxhcm06ICUjWCwgIE9mZG1GQTE6ICUjWCwgT2ZkbUZBMjogJSNYXG4iLCBPRkRNRmFsc2VBbGFybSwgT2ZkbUZBMSwgT2ZkbUZBMik7DQotLy8JCQkJcHJpbnRrKCJESUctLS0tLS0tLS0gVXBncmFkZSBPRkRNOiVkIFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOw0KLQkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOyANCi0JCQl9DQotCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA9IDA7DQotCQkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPTA7DQotCQl9DQotCX0NCi0NCi0vLwlwcmludGsoIkRJRysrKysrKysgT0ZETTolZFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOwkNCi0JLy9wcmludGsoIjwtLS0tLS0tLS0gRElHX1plYnJhKClcbiIpOw0KLX0NCi0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlEaXNwYXRjaCBESUcgaW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHRvIFJGLiAJDQotLy8NCi12b2lkDQotRHluYW1pY0luaXRHYWluKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0NCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApDQotCXsNCi0JCWNhc2UgUkZfWkVCUkEyOiAgLy8gW0FubmllV29ya2Fyb3VuZF0gRm9yIFplYnJhMiwgMjAwNS0wOC0wMS4NCi0JCWNhc2UgUkZfWkVCUkE0Og0KLQkJCURJR19aZWJyYSggZGV2ICk7DQotCQkJYnJlYWs7DQotCQkNCi0JCWRlZmF1bHQ6DQotCQkJcHJpbnRrKCJEeW5hbWljSW5pdEdhaW4oKTogdW5rbm93biBSRkNoaXBJRCglZCkgISEhXG4iLCBwcml2LT5yZl9jaGlwKTsNCi0JCQlicmVhazsNCi0JfQ0KLX0NCi0NCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQ0KLXZvaWQgcnRsODE4MF9od19kaWdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCi17DQotLy8gICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsNCi0vLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHdhdGNoX2RvZ193cSk7DQotICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7DQotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod19kaWdfd3EpOw0KLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsNCi0jZWxzZQ0KLXZvaWQgcnRsODE4MF9od19kaWdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCi17DQotCQ0KLSNlbmRpZg0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7DQotDQotCS8vIFJlYWQgQ0NLIGFuZCBPRkRNIEZhbHNlIEFsYXJtLg0KLQlwcml2LT5GYWxzZUFsYXJtUmVnVmFsdWUgPSByZWFkX25pY19kd29yZChkZXYsIENDS19GQUxTRV9BTEFSTSk7DQotCQ0KLQ0KLQkvLyBBZGp1c3QgSW5pdGlhbCBHYWluIGR5bmFtaWNhbGx5Lg0KLQlEeW5hbWljSW5pdEdhaW4oZGV2KTsNCi0JDQotfQ0KLQ0KLWludA0KLUluY2x1ZGVkSW5TdXBwb3J0ZWRSYXRlcygNCi0gICAgICAgIHN0cnVjdCByODE4MF9wcml2ICAgICAgICpwcml2LA0KLSAgICAgICAgdTggICAgICAgICAgICAgIFR4UmF0ZSAgKQ0KLXsNCi0gICAgdTggcmF0ZV9sZW47DQotICAgICAgICB1OCByYXRlX2V4X2xlbjsNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIFJhdGVNYXNrID0gMHg3RjsNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIGlkeDsNCi0gICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIEZvdW5kID0gMDsNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIE5haXZlVHhSYXRlID0gVHhSYXRlJlJhdGVNYXNrOw0KLQ0KLSAgICByYXRlX2xlbiA9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzX2xlbjsNCi0gICAgICAgIHJhdGVfZXhfbGVuID0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNfZXhfbGVuOw0KLSAgICAgICAgZm9yKCBpZHg9MDsgaWR4PCByYXRlX2xlbjsgaWR4KysgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgICAgICBpZiggKHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzW2lkeF0gJiBSYXRlTWFzaykgPT0gTmFpdmVUeFJhdGUgKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgRm91bmQgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfcmF0ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICBmb3IoIGlkeD0wOyBpZHg8IHJhdGVfZXhfbGVuOyBpZHgrKyApDQotICAgICAgICB7DQotICAgICAgICAgICAgICAgIGlmKCAocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNfZXhbaWR4XSAmIFJhdGVNYXNrKSA9PSBOYWl2ZVR4UmF0ZSApDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3VuZCA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9yYXRlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRm91bmQ7DQotICAgICAgICBmb3VuZF9yYXRlOg0KLSAgICAgICAgcmV0dXJuIEZvdW5kOw0KLX0NCi0NCi0vLw0KLS8vICAgICAgRGVzY3JpcHRpb246DQotLy8gICAgICAgICAgICAgIEdldCB0aGUgVHggcmF0ZSBvbmUgZGVncmVlIHVwIGZvcm0gdGhlIGlucHV0IHJhdGUgaW4gdGhlIHN1cHBvcnRlZCByYXRlcy4NCi0vLyAgICAgICAgICAgICAgUmV0dXJuIHRoZSB1cGdyYWRlIHJhdGUgaWYgaXQgaXMgc3VjY2Vzc2VkLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBpbnB1dCByYXRlLg0KLS8vICAgICAgQnkgQnJ1Y2UsIDIwMDctMDYtMDUuDQotLy8gDQotdTgNCi1HZXRVcGdyYWRlVHhSYXRlKA0KLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZQ0KLSAgICAgICAgKQ0KLXsNCi0gICAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0gICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIFVwUmF0ZTsNCi0NCi0gICAgICAgIC8vIFVwZ3JhZGUgMSBkZWdyZWUuDQotICAgICAgICBzd2l0Y2gocmF0ZSkNCi0gICAgICAgIHsNCi0gICAgICAgIGNhc2UgMTA4OiAvLyBVcCB0byA1NE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDEwODsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDk2OiAvLyBVcCB0byA1NE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDEwODsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDcyOiAvLyBVcCB0byA0OE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDk2Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgNDg6IC8vIFVwIHRvIDM2TWJwcy4NCi0gICAgICAgICAgICAgICAgVXBSYXRlID0gNzI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSAzNjogLy8gVXAgdG8gMjRNYnBzLg0KLSAgICAgICAgICAgICAgICBVcFJhdGUgPSA0ODsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDIyOiAvLyBVcCB0byAxOE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDM2Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgMTE6IC8vIFVwIHRvIDExTWJwcy4NCi0gICAgICAgICAgICAgICAgVXBSYXRlID0gMjI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA0OiAvLyBVcCB0byA1LjVNYnBzLg0KLSAgICAgICAgICAgICAgICBVcFJhdGUgPSAxMTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDI6IC8vIFVwIHRvIDJNYnBzLg0KLSAgICAgICAgICAgICAgICBVcFJhdGUgPSA0Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgIHByaW50aygiR2V0VXBncmFkZVR4UmF0ZSgpOiBJbnB1dCBUeCBSYXRlKCVkKSBpcyB1bmRlZmluZWQhXG4iLCByYXRlKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7DQotICAgICAgICB9DQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmF0ZSBpcyB2YWxpZC4NCi0gICAgICAgIGlmKEluY2x1ZGVkSW5TdXBwb3J0ZWRSYXRlcyhwcml2LCBVcFJhdGUpKQ0KLSAgICAgICAgew0KLS8vICAgICAgICAgICAgICBwcmludGsoIkdldFVwZ3JhZGVUeFJhdGUoKTogR2V0VXBncmFkZSBUeCByYXRlKCVkKSBmcm9tICVkICFcbiIsIFVwUmF0ZSwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7DQotICAgICAgICAgICAgICAgIHJldHVybiBVcFJhdGU7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJHZXRVcGdyYWRlVHhSYXRlKCk6IFR4IHJhdGUgKCVkKSBpcyBub3QgaW4gc3VwcG9ydGVkIHJhdGVzXG4iLCBVcFJhdGUpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmF0ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiByYXRlOw0KLX0NCi0vLw0KLS8vICAgICAgRGVzY3JpcHRpb246DQotLy8gICAgICAgICAgICAgIEdldCB0aGUgVHggcmF0ZSBvbmUgZGVncmVlIGRvd24gZm9ybSB0aGUgaW5wdXQgcmF0ZSBpbiB0aGUgc3VwcG9ydGVkIHJhdGVzLg0KLS8vICAgICAgICAgICAgICBSZXR1cm4gdGhlIGRlZ3JhZGUgcmF0ZSBpZiBpdCBpcyBzdWNjZXNzZWQsIG90aGVyd2lzZSByZXR1cm4gdGhlIGlucHV0IHJhdGUuDQotLy8gICAgICBCeSBCcnVjZSwgMjAwNy0wNi0wNS4NCi0vLyANCi11OA0KLUdldERlZ3JhZGVUeFJhdGUoDQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KLSAgICAgICAgdTggICAgICAgICByYXRlDQotICAgICAgICApDQotew0KLSAgICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLSAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgRG93blJhdGU7DQotDQotICAgICAgICAvLyBVcGdyYWRlIDEgZGVncmVlLg0KLSAgICAgICAgc3dpdGNoKHJhdGUpDQotICAgICAgICB7DQotICAgICAgICBjYXNlIDEwODogLy8gRG93biB0byA0OE1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gOTY7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA5NjogLy8gRG93biB0byAzNk1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gNzI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA3MjogLy8gRG93biB0byAyNE1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gNDg7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA0ODogLy8gRG93biB0byAxOE1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMzY7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSAzNjogLy8gRG93biB0byAxMU1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSAyMjogLy8gRG93biB0byA1LjVNYnBzLg0KLSAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDExOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgMTE6IC8vIERvd24gdG8gMk1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gNDsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDQ6IC8vIERvd24gdG8gMU1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDI6IC8vIERvd24gdG8gMU1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgICAgICBwcmludGsoIkdldERlZ3JhZGVUeFJhdGUoKTogSW5wdXQgVHggUmF0ZSglZCkgaXMgdW5kZWZpbmVkIVxuIiwgcmF0ZSk7DQotICAgICAgICAgICAgICAgIHJldHVybiByYXRlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJhdGUgaXMgdmFsaWQuDQotICAgICAgICBpZihJbmNsdWRlZEluU3VwcG9ydGVkUmF0ZXMocHJpdiwgRG93blJhdGUpKQ0KLSAgICAgICAgew0KLS8vICAgICAgICAgICAgICBwcmludGsoIkdldERlZ3JhZGVUeFJhdGUoKTogR2V0RGVncmFkZSBUeCByYXRlKCVkKSBmcm9tICVkIVxuIiwgRG93blJhdGUsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gRG93blJhdGU7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJHZXREZWdyYWRlVHhSYXRlKCk6IFR4IHJhdGUgKCVkKSBpcyBub3QgaW4gc3VwcG9ydGVkIHJhdGVzXG4iLCBEb3duUmF0ZSk7DQotICAgICAgICAgICAgICAgIHJldHVybiByYXRlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHJhdGU7DQotfQ0KLS8vDQotLy8gICAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBkYXRhIHJhdGUgaXMgDQotLy8gICAgICBDQ0sgcmF0ZS4NCi0vLyAgICAgIDIwMDUuMDEuMjUsIGJ5IHJjbmprby4NCi0vLw0KLWJvb2wNCi1NZ250SXNDY2tSYXRlKA0KLSAgICAgICAgdTE2ICAgICByYXRlDQotICAgICAgICApDQotew0KLSAgICAgICAgYm9vbCBiUmV0dXJuID0gZmFsc2U7DQotDQotICAgICAgICBpZigocmF0ZSA8PSAyMikgJiYgKHJhdGUgIT0gMTIpICYmIChyYXRlICE9IDE4KSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAgICAgYlJldHVybiA9IHRydWU7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4gYlJldHVybjsNCi19DQotI2lmZGVmIENPTkZJR19SVEw4MThYX1MNCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlUeCBQb3dlciB0cmFja2luZyBtZWNoYW5pc20gcm91dGluZSBvbiA4N1NFLg0KLS8vIAlDcmVhdGVkIGJ5IFJvZ2VyLCAyMDA3LjEyLjExLg0KLS8vDQotdm9pZA0KLVR4UHdyVHJhY2tpbmc4N1NFKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotKQ0KLXsJCQ0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotCXU4CXRtcHUxQnl0ZSwgQ3VycmVudFRoZXJtYWwsIElkeDsJDQotCWNoYXIJQ2NrVHhQd3JJZHgsIE9mZG1UeFB3cklkeDsJDQotCS8vdTMyCXU0YlJmUmVnOw0KLQkNCi0JdG1wdTFCeXRlID0gcmVhZF9uaWNfYnl0ZShkZXYsIEVOX0xQRl9DQUwpOw0KLQlDdXJyZW50VGhlcm1hbCA9ICh0bXB1MUJ5dGUgJiAweGYwKT4+NDsgLy9bIDc6NF06IHRoZXJtYWwgbWV0ZXIgaW5kaWNhdGlvbi4NCi0JQ3VycmVudFRoZXJtYWwgPSAoQ3VycmVudFRoZXJtYWw+MHgwYyk/IDB4MGM6Q3VycmVudFRoZXJtYWw7Ly9sem0gYWRkIDA4MDgyNg0KLQ0KLQkvL3ByaW50aygiVHhQd3JUcmFja2luZzg3U0UoKTogQ3VycmVudFRoZXJtYWwoJWQpXG4iLCBDdXJyZW50VGhlcm1hbCk7DQotCQ0KLQlpZiggQ3VycmVudFRoZXJtYWwgIT0gcHJpdi0+VGhlcm1hbE1ldGVyKQ0KLQl7CQ0KLS8vCQlwcmludGsoIlR4UHdyVHJhY2tpbmc4N1NFKCk6IFRoZXJtYWwgbWV0ZXIgY2hhbmdlZCEhIVxuIik7DQotDQotCQkvLyBVcGRhdGUgVHggUG93ZXIgbGV2ZWwgb24gZWFjaCBjaGFubmVsLg0KLQkJZm9yKElkeCA9IDE7IElkeDwxNTsgSWR4KyspDQotCQl7CQkJDQotCQkJQ2NrVHhQd3JJZHggPSBwcml2LT5jaHR4cHdyW0lkeF07DQotCQkJT2ZkbVR4UHdySWR4ID0gcHJpdi0+Y2h0eHB3cl9vZmRtW0lkeF07CQkJDQotCQkJDQotCQkJaWYoIEN1cnJlbnRUaGVybWFsID4gcHJpdi0+VGhlcm1hbE1ldGVyICkNCi0JCQl7IC8vIGhpZ2hlciB0aGVybWFsIG1ldGVyLgkJDQotCQkJCUNja1R4UHdySWR4ICs9IChDdXJyZW50VGhlcm1hbCAtIHByaXYtPlRoZXJtYWxNZXRlcikqMjsNCi0JCQkJT2ZkbVR4UHdySWR4ICs9IChDdXJyZW50VGhlcm1hbCAtIHByaXYtPlRoZXJtYWxNZXRlcikqMjsNCi0JCQkNCi0JCQkJaWYoQ2NrVHhQd3JJZHggPjM1KQ0KLQkJCQkJQ2NrVHhQd3JJZHggPSAzNTsgLy8gRm9yY2UgVHhQb3dlciB0byBtYXhpbWFsIGluZGV4Lg0KLQkJCQlpZihPZmRtVHhQd3JJZHggPjM1KQ0KLQkJCQkJT2ZkbVR4UHdySWR4ID0gMzU7CQkJCQ0KLQkJCX0NCi0JCQllbHNlDQotCQkJeyAvLyBsb3dlciB0aGVybWFsIG1ldGVyLgkJCQkNCi0JCQkJQ2NrVHhQd3JJZHggLT0gKHByaXYtPlRoZXJtYWxNZXRlciAtIEN1cnJlbnRUaGVybWFsKSoyOw0KLQkJCQlPZmRtVHhQd3JJZHggLT0gKHByaXYtPlRoZXJtYWxNZXRlciAtIEN1cnJlbnRUaGVybWFsKSoyOw0KLQ0KLQkJCQlpZihDY2tUeFB3cklkeCA8MCkNCi0JCQkJCUNja1R4UHdySWR4ID0gMDsJCQ0KLQkJCQlpZihPZmRtVHhQd3JJZHggPDApDQotCQkJCQlPZmRtVHhQd3JJZHggPSAwOwkJCQkNCi0JCQl9CQkJCQkNCi0JCQkNCi0JCQkvLyBVcGRhdGUgVHhQb3dlciBsZXZlbCBvbiBDQ0sgYW5kIE9GRE0gcmVzcC4NCi0JCQlwcml2LT5jaHR4cHdyW0lkeF0gPSBDY2tUeFB3cklkeDsNCi0JCQlwcml2LT5jaHR4cHdyX29mZG1bSWR4XSA9IE9mZG1UeFB3cklkeDsJCQkJDQotCQl9CQ0KLQ0KLQkJLy8gVXBkYXRlIFR4UG93ZXIgbGV2ZWwgaW1tZWRpYXRlbHkuDQotCQlydGw4MjI1ejJfU2V0VFhQb3dlckxldmVsKGRldiwgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCk7DQotCX0JDQotCXByaXYtPlRoZXJtYWxNZXRlciA9IEN1cnJlbnRUaGVybWFsOwkJCQkJDQotfQ0KLXZvaWQNCi1TdGFSYXRlQWRhcHRpdmU4N1NFKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JdW5zaWduZWQgbG9uZyAJCQlDdXJyVHhva0NudDsNCi0JdTE2CQkJQ3VyclJldHJ5Q250Ow0KLQl1MTYJCQlDdXJyUmV0cnlSYXRlOw0KLQkvL3UxNgkJCWksaWR4Ow0KLQl1bnNpZ25lZCBsb25nICAgICAgIAlDdXJyUnhva0NudDsNCi0JYm9vbAkJCWJUcnlVcCA9IGZhbHNlOw0KLQlib29sCQkJYlRyeURvd24gPSBmYWxzZTsNCi0JdTgJCQlUcnlVcFRoID0gMTsNCi0JdTgJCQlUcnlEb3duVGggPSAyOw0KLQl1MzIJCQlUeFRocm91Z2hwdXQ7DQotCWxvbmcJCUN1cnJTaWduYWxTdHJlbmd0aDsNCi0JYm9vbAkJYlVwZGF0ZUluaXRpYWxHYWluID0gZmFsc2U7DQotICAgIAl1OAkJCXUxYk9mZG09MCwgdTFiQ2NrID0gMDsNCi0JY2hhcgkJT2ZkbVR4UHdySWR4LCBDY2tUeFB3cklkeDsJDQotDQotCXByaXYtPlJhdGVBZGFwdGl2ZVBlcmlvZD0gUkFURV9BREFQVElWRV9USU1FUl9QRVJJT0Q7DQotDQotDQotCUN1cnJSZXRyeUNudAk9IHByaXYtPkN1cnJSZXRyeUNudDsNCi0JQ3VyclR4b2tDbnQJPSBwcml2LT5OdW1UeE9rVG90YWwgLSBwcml2LT5MYXN0VHhva0NudDsNCi0JQ3VyclJ4b2tDbnQJPSBwcml2LT5pZWVlODAyMTEtPk51bVJ4T2tUb3RhbCAtIHByaXYtPkxhc3RSeG9rQ250Ow0KLQlDdXJyU2lnbmFsU3RyZW5ndGggPSBwcml2LT5TdGF0c19SZWN2U2lnbmFsUG93ZXI7DQotCVR4VGhyb3VnaHB1dCA9ICh1MzIpKHByaXYtPk51bVR4T2tCeXRlc1RvdGFsIC0gcHJpdi0+TGFzdFR4T0tCeXRlcyk7DQotCXByaXYtPkxhc3RUeE9LQnl0ZXMgPSBwcml2LT5OdW1UeE9rQnl0ZXNUb3RhbDsNCi0JcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IHByaXYtPmllZWU4MDIxMS0+cmF0ZS81Ow0KLQkvL3ByaW50aygicHJpdi0+Q3VycmVudE9wZXJhUmF0ZSBpcyAlZFxuIixwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0JLy8yIENvbXB1dGUgcmV0cnkgcmF0aW8uDQotCWlmIChDdXJyVHhva0NudD4wKQ0KLQl7DQotCQlDdXJyUmV0cnlSYXRlID0gKHUxNikoQ3VyclJldHJ5Q250KjEwMC9DdXJyVHhva0NudCk7DQotCX0NCi0JZWxzZQ0KLQl7IC8vIEl0IG1heSBiZSBzZXJpb3VzIHJldHJ5LiBUbyBkaXN0aW5ndWlzaCBzZXJpb3VzIHJldHJ5IG9yIG5vIHBhY2tldHMgbW9kaWZpZWQgYnkgQnJ1Y2UNCi0JCUN1cnJSZXRyeVJhdGUgPSAodTE2KShDdXJyUmV0cnlDbnQqMTAwLzEpOw0KLQl9DQotDQotDQotCS8vDQotCS8vIEFkZGVkIGJ5IFJvZ2VyLCAyMDA3LjAxLjAyLg0KLQkvLyBGb3IgZGVidWcgaW5mb3JtYXRpb24uDQotCS8vDQotCS8vcHJpbnRrKCJcbigxKSBwSGFsRGF0YS0+TGFzdFJldHJ5UmF0ZTogJWQgXG4iLHByaXYtPkxhc3RSZXRyeVJhdGUpOw0KLQkvL3ByaW50aygiKDIpIFJldHJ5Q250ID0gJWQgIFxuIiwgQ3VyclJldHJ5Q250KTsJDQotCS8vcHJpbnRrKCIoMykgVHhva0NudCA9ICVkIFxuIiwgQ3VyclR4b2tDbnQpOw0KLQkvL3ByaW50aygiKDQpIEN1cnJSZXRyeVJhdGUgPSAlZCBcbiIsIEN1cnJSZXRyeVJhdGUpOwkNCi0JLy9wcmludGsoIig1KSBDdXJyU2lnbmFsU3RyZW5ndGggPSAlZCBcbiIsQ3VyclNpZ25hbFN0cmVuZ3RoKTsNCi0JLy9wcmludGsoIig2KSBUeFRocm91Z2hwdXQgaXMgJWRcbiIsVHhUaHJvdWdocHV0KTsNCi0JLy9wcmludGsoInByaXYtPk51bVR4T2tCeXRlc1RvdGFsIGlzICVkXG4iLHByaXYtPk51bVR4T2tCeXRlc1RvdGFsKTsJCQ0KLQ0KLQlwcml2LT5MYXN0UmV0cnlDbnQgPSBwcml2LT5DdXJyUmV0cnlDbnQ7DQotCXByaXYtPkxhc3RUeG9rQ250ID0gcHJpdi0+TnVtVHhPa1RvdGFsOw0KLQlwcml2LT5MYXN0Unhva0NudCA9IHByaXYtPmllZWU4MDIxMS0+TnVtUnhPa1RvdGFsOw0KLQlwcml2LT5DdXJyUmV0cnlDbnQgPSAwOw0KLQ0KLQkvLzJObyBUeCBwYWNrZXRzLCByZXR1cm4gdG8gaW5pdF9yYXRlIG9yIG5vdD8NCi0JaWYgKEN1cnJSZXRyeVJhdGU9PTAgJiYgQ3VyclR4b2tDbnQgPT0gMCkNCi0JewkNCi0JCS8vDQotCQkvL0FmdGVyIDkgKDMwKjMwMG1zKSBzZWNvbmRzIGluIHRoaXMgY29uZGl0aW9uLCB3ZSB0cnkgdG8gcmFpc2UgcmF0ZS4NCi0JCS8vDQotCQlwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhKys7DQotCQkNCi0vLwkJcHJpbnRrKCJObyBUeCBwYWNrZXRzLCBUcnl1cGluZ0NvdW50Tm9EYXRhKCVkKVxuIiwgcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YSk7DQotCQkvL1tUUkMgRGVsbCBMYWJdIEV4dGVuZCByYWlzZWQgcGVyaW9kIGZyb20gNC41c2VjIHRvIDlzZWMsIElzYWlhaCAyMDA4LTAyLTE1IDE4OjAwIA0KLQkJaWYgKHByaXYtPlRyeXVwaW5nQ291bnROb0RhdGE+MzApDQotCQl7DQotCQkJcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YSA9IDA7DQotCQkgCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSBHZXRVcGdyYWRlVHhSYXRlKGRldiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CQkNCi0JCQkvLyBSZXNldCBGYWlsIFJlY29yZA0KLQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gMDsNCi0JCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gLTIwMDsNCi0JCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgPSAwOw0KLQkJfQ0KLQkJZ290byBTZXRJbml0aWFsR2FpbjsNCi0JfQ0KLSAgICAgICAgZWxzZQ0KLQl7DQotCQlwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhPTA7IC8vUmVzZXQgdHJ5aW5nIHVwIHRpbWVzLg0KLQl9DQotDQotDQotCS8vDQotCS8vIEZvciBOZXRnZWFyIGNhc2UsIEkgY29tbWVudCBvdXQgdGhlIGZvbGxvd2luZyBzaWduYWwgc3RyZW5ndGggZXN0aW1hdGlvbiwNCi0JLy8gd2hpY2ggY2FuIHJlc3VsdHMgaW4gbG93ZXIgcmF0ZSB0byB0cmFuc21pdCB3aGVuIHNhbXBsZSBpcyBOT1QgZW5vdWdoIChlLmcuIFBJTkcgcmVxdWVzdCkuICANCi0JLy8gMjAwNy4wNC4wOSwgYnkgUm9nZXIuCQ0KLQkvLwkNCi0NCi0JLy8NCi0JLy8gUmVzdHJ1Y3R1cmUgcmF0ZSBhZGFwdGl2ZSBhcyB0aGUgZm9sbG93aW5nIG1haW4gc3RhZ2VzOg0KLQkvLyAoMSkgQWRkIHJldHJ5IHRocmVzaG9sZCBpbiA1NE0gdXBncmFkaW5nIGNvbmRpdGlvbiB3aXRoIHNpZ25hbCBzdHJlbmd0aC4NCi0JLy8gKDIpIEFkZCB0aGUgbWVjaGFuaXNtIHRvIGRlZ3JhZGUgdG8gQ0NLIHJhdGUgYWNjb3JkaW5nIHRvIHNpZ25hbCBzdHJlbmd0aCANCi0JLy8JCWFuZCByZXRyeSByYXRlLg0KLQkvLyAoMykgUmVtb3ZlIGFsbCBJbml0aWFsIEdhaW4gVXBkYXRlcyBvdmVyIE9GRE0gcmF0ZS4gVG8gYXZvaWQgdGhlIGNvbXBsaWNhdGVkIA0KLQkvLwkJc2l0dWF0aW9uLCBJbml0aWFsIEdhaW4gVXBkYXRlIGlzIHVwb24gb24gRElHIG1lY2hhbmlzbSBleGNlcHQgQ0NLIHJhdGUuDQotCS8vICg0KSBBZGQgdGhlIG1laGFuaXNtIG9mIHRyeWluZyB0byB1cGdyYWRlIHR4IHJhdGUuDQotCS8vICg1KSBSZWNvcmQgdGhlIGluZm9ybWF0aW9uIG9mIHVwcGluZyB0eCByYXRlIHRvIGF2b2lkIHRyeWluZyB1cHBpbmcgdHggcmF0ZSBjb25zdGFudGx5Lg0KLQkvLyBCeSBCcnVjZSwgMjAwNy0wNi0wNS4NCi0JLy8JDQotCS8vDQotDQotCS8vIDExTWJwcyBvciAzNk1icHMNCi0JLy8gQ2hlY2sgbW9yZSB0aW1lcyBpbiB0aGVzZSByYXRlKGtleSByYXRlcykuDQotCS8vDQotCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMjIgfHwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA3MikNCi0JeyANCi0JCVRyeVVwVGggKz0gOTsNCi0JfQ0KLQkvLw0KLQkvLyBMZXQgdGhlc2UgcmF0ZXMgZG93biBtb3JlIGRpZmZpY3VsdC4NCi0JLy8NCi0JaWYoTWdudElzQ2NrUmF0ZShwcml2LT5DdXJyZW50T3BlcmFSYXRlKSB8fCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDM2KQ0KLQl7DQotCQkJVHJ5RG93blRoICs9IDE7DQotCX0NCi0NCi0JLy8xIEFkanVzdCBSYXRlLg0KLQlpZiAocHJpdi0+YlRyeXVwaW5nID09IHRydWUpDQotCXsJDQotCQkvLzIgRm9yIFRlc3QgVXBncmFkaW5nIG1lY2hhbmlzbQ0KLQkJLy8gTm90ZToNCi0JCS8vIAlTb21ldGltZXMgdGhlIHRocm91Z2hwdXQgaXMgdXBvbiBvbiB0aGUgY2FwYWJpbGl0eSBid3R3ZWVuIHRoZSBBUCBhbmQgTklDLA0KLQkJLy8gCXRodXMgdGhlIGxvdyBkYXRhIHJhdGUgZG9lcyBub3QgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UuDQotCQkvLyAJV2UgcmFuZG9tbHkgdXBncmFkZSB0aGUgZGF0YSByYXRlIGFuZCBjaGVjayBpZiB0aGUgcmV0cnkgcmF0ZSBpcyBpbXByb3ZlZC4NCi0JCQ0KLQkJLy8gVXBncmFkaW5nIHJhdGUgZGlkIG5vdCBpbXByb3ZlIHRoZSByZXRyeSByYXRlLCBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgcmF0ZS4NCi0JCWlmICggKEN1cnJSZXRyeVJhdGUgPiAyNSkgJiYgVHhUaHJvdWdocHV0IDwgcHJpdi0+TGFzdFR4VGhyb3VnaHB1dCkNCi0JCXsNCi0JCQkvL05vdCBuZWNlc3NhcnkgcmFpc2luZyByYXRlLCBmYWxsIGJhY2sgcmF0ZS4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQkJLy9wcmludGsoImNhc2UxLTE6IE5vdCBuZWNlc3NhcnkgcmFpc2luZyByYXRlLCBmYWxsIGJhY2sgcmF0ZS4uLi5cbiIpOw0KLQkJCS8vcHJpbnRrKCJjYXNlMS0xOiBwTWdudEluZm8tPkN1cnJlbnRPcGVyYVJhdGUgPSVkLCBUeFRocm91Z2hwdXQgPSAlZCwgTGFzdFRocm91Z2hwdXQgPSAlZFxuIiwNCi0JCQkvLwkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSwgVHhUaHJvdWdocHV0LCBwcml2LT5MYXN0VHhUaHJvdWdocHV0KTsJCQkNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlwcml2LT5iVHJ5dXBpbmcgPSBmYWxzZTsNCi0JCX0NCi0JfQkNCi0JZWxzZSBpZiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTQ3ICYmIChDdXJyUmV0cnlSYXRlIDwgNTApKQ0KLQl7DQotCQkvLzJGb3IgSGlnaCBQb3dlcg0KLQkJLy8NCi0JCS8vIEFkZGVkIGJ5IFJvZ2VyLCAyMDA3LjA0LjA5Lg0KLQkJLy8gUmV0dXJuIHRvIGhpZ2hlc3QgZGF0YSByYXRlLCBpZiBzaWduYWwgc3RyZW5ndGggaXMgZ29vZCBlbm91Z2guDQotCQkvLyBTaWduYWxTdHJlbmd0aCB0aHJlc2hvbGQoLTUwZGJtKSBpcyBmb3IgUlRMODE4Ni4NCi0JCS8vIFJldmlzZSBTaWduYWxTdHJlbmd0aCB0aHJlc2hvbGQgdG8gLTUxZGJtLgkNCi0JCS8vDQotCQkvLyBBbHNvIG5lZWQgdG8gY2hlY2sgcmV0cnkgcmF0ZSBmb3Igc2FmZXR5LCBieSBCcnVjZSwgMjAwNy0wNi0wNS4NCi0JCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgIT0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuSGlnaGVzdE9wZXJhUmF0ZSApDQotCQl7DQotCQkJYlRyeVVwID0gdHJ1ZTsNCi0JCQkvLyBVcGdyYWRlIFR4IFJhdGUgZGlyZWN0bHkuDQotCQkJcHJpdi0+VHJ5dXBpbmdDb3VudCArPSBUcnlVcFRoOw0KLQkJfQ0KLS8vCQlwcmludGsoImNhc2UyOiBTdGFSYXRlQWRhcHRpdmU4N1NFOiBQb3dlciglZCkgaXMgaGlnaCBlbm91Z2ghIS4gXG4iLCBDdXJyU2lnbmFsU3RyZW5ndGgpOwkJCQ0KLQkJCQkJDQotCX0NCi0JZWxzZSBpZihDdXJyVHhva0NudCA+IDkgJiYgQ3VyclR4b2tDbnQ8IDEwMCAmJiBDdXJyUmV0cnlSYXRlID49IDYwMCkgDQotCXsNCi0JCS8vMiBGb3IgU2VyaW91cyBSZXRyeQ0KLQkJLy8NCi0JCS8vIFRyYWZmaWMgaXMgbm90IGJ1c3kgYnV0IG91ciBUeCByZXRyeSBpcyBzZXJpb3VzLiANCi0JCS8vDQotCQliVHJ5RG93biA9IHRydWU7DQotCQkvLyBMZXQgUmF0ZSBNZWNoYW5pc20gdG8gZGVncmFkZSB0eCByYXRlIGRpcmVjdGx5Lg0KLQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotLy8JCXByaW50aygiY2FzZTM6IFJBOiBUeCBSZXRyeSBpcyBzZXJpb3VzLiBEZWdyYWRlIFR4IFJhdGUgdG8gJWQgZGlyZWN0bHkuLi5cbiIsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOwkNCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAxMDggKQ0KLQl7DQotCQkvLzJGb3IgNTRNYnBzDQotCQkvLyBBaXIgTGluaw0KLQkJaWYgKCAoQ3VyclJldHJ5UmF0ZT4yNikmJihwcml2LT5MYXN0UmV0cnlSYXRlPjI1KSkNCi0vLwkJaWYgKCAoQ3VyclJldHJ5UmF0ZT40MCkmJihwcml2LT5MYXN0UmV0cnlSYXRlPjM5KSkNCi0JCXsNCi0JCQkvL0Rvd24gdG8gcmF0ZSA0OE1icHMuDQotCQkJYlRyeURvd24gPSB0cnVlOw0KLQkJfQ0KLQkJLy8gQ2FibGUgTGluaw0KLQkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPjE3KSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MTYpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtNzIpKSANCi0vLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPjE3KSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MTYpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtNzIpKQ0KLQkJew0KLQkJCS8vRG93biB0byByYXRlIDQ4TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotDQotCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTc1KSkgLy9jYWJsZSBsaW5rDQotCQl7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQkvL3ByaW50aygiY2FzZTQtLS01NE0gXG4iKTsJDQotDQotCX0NCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gOTYgKQ0KLQl7DQotCQkvLzJGb3IgNDhNYnBzDQotCQkvL0FpciBMaW5rDQotCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT40OCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NDcpKSkNCi0vLwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+NjUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjY0KSkpDQotDQotCQl7CQ0KLQkJCS8vRG93biB0byByYXRlIDM2TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQkvL0NhYmxlIExpbmsNCi0JCWVsc2UgaWYgKCAoKEN1cnJSZXRyeVJhdGU+MjEpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjIwKSkgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC03NCkpDQotCQl7DQotCQkJLy9Eb3duIHRvIHJhdGUgMzZNYnBzLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0vLwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNzAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQ0KLQkJew0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw4KSApIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwyOCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8OCkgKSANCi0JCXsNCi0JCQliVHJ5VXAgPSB0cnVlOw0KLQkJfQ0KLQ0KLQkJaWYoYlRyeURvd24gJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA8IC03NSkpDQotCQl7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQkvL3ByaW50aygiY2FzZTUtLS00OE0gXG4iKTsJDQotCX0NCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNzIgKQ0KLQl7DQotCQkvLzJGb3IgMzZNYnBzDQotCQlpZiAoIChDdXJyUmV0cnlSYXRlPjQzKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT40MSkpIA0KLS8vCQlpZiAoIChDdXJyUmV0cnlSYXRlPjYwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT41OSkpDQotCQl7CQ0KLQkJCS8vRG93biB0byByYXRlIDI0TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA1MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpDQotLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MTUpICYmICAocHJpdi0+TGFzdFJldHJ5UmF0ZTwxNikpIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwzNSkgJiYgIChwcml2LT5MYXN0UmV0cnlSYXRlPDM2KSkNCi0JCXsNCi0JCQliVHJ5VXAgPSB0cnVlOw0KLQkJfQ0KLQ0KLQkJaWYoYlRyeURvd24gJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04MCkpDQotCQl7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQkvL3ByaW50aygiY2FzZTYtLS0zNk0gXG4iKTsJDQotCX0NCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNDggKQ0KLQl7DQotCQkvLzJGb3IgMjRNYnBzDQotCQkvLyBBaXIgTGluaw0KLQkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+NjMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjYyKSkpDQotLy8JCWlmICggKChDdXJyUmV0cnlSYXRlPjgzKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT44MikpKQ0KLQkJewkNCi0JCQkvL0Rvd24gdG8gcmF0ZSAxOE1icHMuDQotCQkJYlRyeURvd24gPSB0cnVlOw0KLQkJfQ0KLQkJLy9DYWJsZSBMaW5rDQotCQllbHNlIGlmICggKChDdXJyUmV0cnlSYXRlPjMzKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT4zMikpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtODIpICkNCi0vLwkJIGVsc2UgaWYgKCAoKEN1cnJSZXRyeVJhdGU+NTApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjQ5KSkgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC04MikgKQ0KLQkJew0KLQkJCS8vRG93biB0byByYXRlIDE4TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA1MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpDQotLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0NCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotICAJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwyMCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8MjEpKSAvL1RPIERPOiBuZWVkIHRvIGNvbnNpZGVyIChSU1NJKQ0KLS8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8NDApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDQxKSkNCi0JCXsJDQotCQkJYlRyeVVwID0gdHJ1ZTsJDQotCQl9DQotDQotCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTgyKSkNCi0JCXsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCS8vcHJpbnRrKCJjYXNlNy0tLTI0TSBcbiIpOwkNCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAzNiApDQotCXsNCi0JCS8vMkZvciAxOE1icHMNCi0JCS8vIG9yaWdpbmFsICgxMDksIDEwOSkgDQotCQkvL1tUUkMgRGVsbCBMYWJdICg5MCwgOTEpLCBJc2FpYWggMjAwOC0wMi0xOCAyMzoyNA0KLQkJLy8JCQkgICAgICg4NSwgODYpLCBJc2FpYWggMjAwOC0wMi0xOCAyNDowMA0KLQkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+ODUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjg2KSkpDQotLy8JCWlmICggKChDdXJyUmV0cnlSYXRlPjExNSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MTE2KSkpDQotCQl7DQotCQkJLy9Eb3duIHRvIHJhdGUgMTFNYnBzLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0JCS8vW1RSQyBEZWxsIExhYl0gIElzYWlhaCAyMDA4LTAyLTE4IDIzOjI0DQotCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA1MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpDQotLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7DQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MjIpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDIzKSkgLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkNCi0vLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDQyKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw0MykpDQotCQl7CQ0KLQkJCWJUcnlVcCA9IHRydWU7CQ0KLQkJfQ0KLQkJLy9wcmludGsoImNhc2U4LS0tMThNIFxuIik7CQ0KLQl9DQotCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyICkNCi0Jew0KLQkJLy8yRm9yIDExTWJwcw0KLQkJaWYgKEN1cnJSZXRyeVJhdGU+OTUpDQotLy8JCWlmIChDdXJyUmV0cnlSYXRlPjE1NSkNCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MjkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwzMCkgKS8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw0OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPDUwKSApDQotCQkJew0KLQkJCWJUcnlVcCA9IHRydWU7DQotCQkJfQ0KLQkJLy9wcmludGsoImNhc2U5LS0tMTFNIFxuIik7CQ0KLQkJfQkNCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMTEgKQ0KLQl7DQotCQkvLzJGb3IgNS41TWJwcw0KLQkJaWYgKEN1cnJSZXRyeVJhdGU+MTQ5KSANCi0vLwkJaWYgKEN1cnJSZXRyeVJhdGU+MTg5KQ0KLQkJewkNCi0JCQliVHJ5RG93biA9IHRydWU7CQkJDQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8NjApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgNjUpKQ0KLS8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8ODApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgODUpKQ0KLQ0KLQkJCXsNCi0JCQliVHJ5VXAgPSB0cnVlOw0KLQkJCX0JCQ0KLQkJLy9wcmludGsoImNhc2UxMC0tLTUuNU0gXG4iKTsJDQotCQl9DQotCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDQgKQ0KLQl7DQotCQkvLzJGb3IgMiBNYnBzDQotCQlpZigoQ3VyclJldHJ5UmF0ZT45OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+OTkpKQ0KLS8vCQlpZigoQ3VyclJldHJ5UmF0ZT4xOTkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjE5OSkpDQotCQl7DQotCQkJYlRyeURvd24gPSB0cnVlOwkJCQ0KLQkJfQ0KLQkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlIDwgNjUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgNzApKQ0KLS8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGUgPCA4NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA5MCkpDQotCQl7DQotCQkJYlRyeVVwID0gdHJ1ZTsNCi0JCX0NCi0JCS8vcHJpbnRrKCJjYXNlMTEtLS0yTSBcbiIpOwkNCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAyICkNCi0Jew0KLQkJLy8yRm9yIDEgTWJwcw0KLQkJaWYoIChDdXJyUmV0cnlSYXRlPDcwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw3NSkpDQotLy8JCWlmKCAoQ3VyclJldHJ5UmF0ZTw5MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8OTUpKQ0KLQkJew0KLQkJCWJUcnlVcCA9IHRydWU7DQotCQl9DQotCQkvL3ByaW50aygiY2FzZTEyLS0tMU0gXG4iKTsJDQotCX0NCi0NCi0JaWYoYlRyeVVwICYmIGJUcnlEb3duKQ0KLSAgICAJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N0IoKTogVHggUmF0ZSB0cmllZCB1cHBpbmcgYW5kIGRvd25pbmcgc2ltdWx0YW5lb3VzbHkhXG4iKTsNCi0JCQkJDQotCS8vMSBUZXN0IFVwZ3JhZGluZyBUeCBSYXRlDQotCS8vIFNvbWV0aW1lcyB0aGUgY2F1c2Ugb2YgdGhlIGxvdyB0aHJvdWdocHV0IChoaWdoIHJldHJ5IHJhdGUpIGlzIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIEFQIGFuZCBOSUMuDQotCS8vIFRvIHRlc3QgaWYgdGhlIHVwcGVyIHJhdGUgbWF5IGNhdXNlIGxvd2VyIHJldHJ5IHJhdGUsIHRoaXMgbWVjaGFuaXNtIHJhbmRvbWx5IG9jY3VycyB0byB0ZXN0IHVwZ3JhZGluZyB0eCByYXRlLg0KLQlpZighYlRyeVVwICYmICFiVHJ5RG93biAmJiAocHJpdi0+VHJ5dXBpbmdDb3VudCA9PSAwKSAmJiAocHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9PSAwKQ0KLQkJJiYgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSAhPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5IaWdoZXN0T3BlcmFSYXRlICYmIHByaXYtPkZhaWxUeFJhdGVDb3VudCA8IDIpDQotCXsNCi0JCWlmKGppZmZpZXMlIChDdXJyUmV0cnlSYXRlICsgMTAxKSA9PSAwKQ0KLQkJew0KLQkJCWJUcnlVcCA9IHRydWU7CQ0KLQkJCXByaXYtPmJUcnl1cGluZyA9IHRydWU7DQotCQkJLy9wcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogUmFuZG9tbHkgdHJ5IHVwZ3JhZGluZy4uLlxuIik7DQotCQl9DQotCX0NCi0NCi0JLy8xIFJhdGUgTWVjaGFuaXNtDQotCWlmKGJUcnlVcCkNCi0Jew0KLQkJcHJpdi0+VHJ5dXBpbmdDb3VudCsrOw0KLQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9IDA7DQotCQkJDQotCQl7DQotLy8JCQlwcmludGsoIlVQOiBwSGFsRGF0YS0+VHJ5dXBpbmdDb3VudCA9ICVkXG4iLCBwcml2LT5Ucnl1cGluZ0NvdW50KTsNCi0vLwkJCXByaW50aygiVVA6IFRyeVVwVGgoJWQpKyAoRmFpbFR4UmF0ZUNvdW50KCVkKSleMiA9JWRcbiIsIA0KLS8vCQkJCVRyeVVwVGgsIHByaXYtPkZhaWxUeFJhdGVDb3VudCwgKFRyeVVwVGggKyBwcml2LT5GYWlsVHhSYXRlQ291bnQgKiBwcml2LT5GYWlsVHhSYXRlQ291bnQpICk7DQotLy8JCQlwcmludGsoIlVQOiBwSGFsRGF0YS0+YlRyeXVwaW5nPSVkXG4iLCAgcHJpdi0+YlRyeXVwaW5nKTsNCi0NCi0JCX0NCi0JCQ0KLQkJLy8NCi0JCS8vIENoZWNrIG1vcmUgdGltZXMgaWYgd2UgbmVlZCB0byB1cGdyYWRlIGluZGVlZC4NCi0JCS8vIEJlY2F1c2UgdGhlIGxhcmdlc3QgdmFsdWUgb2YgcEhhbERhdGEtPlRyeXVwaW5nQ291bnQgaXMgMHhGRkZGIGFuZCANCi0JCS8vIHRoZSBsYXJnZXN0IHZhbHVlIG9mIHBIYWxEYXRhLT5GYWlsVHhSYXRlQ291bnQgaXMgMHgxNCwNCi0JCS8vIHRoaXMgY29uZGl0aW9uIHdpbGwgYmUgc2F0aXNmaWVkIGF0IG1vc3QgZXZlcnkgMiBtaW4uDQotCQkvLw0KLQ0KLQkJaWYoKHByaXYtPlRyeXVwaW5nQ291bnQgPiAoVHJ5VXBUaCArIHByaXYtPkZhaWxUeFJhdGVDb3VudCAqIHByaXYtPkZhaWxUeFJhdGVDb3VudCkpIHx8DQotCQkJKEN1cnJTaWduYWxTdHJlbmd0aCA+IHByaXYtPkxhc3RGYWlsVHhSYXRlU1MpIHx8IHByaXYtPmJUcnl1cGluZykNCi0JCXsNCi0JCQlwcml2LT5Ucnl1cGluZ0NvdW50ID0gMDsNCi0JCQkvLyANCi0JCQkvLyBXaGVuIHRyYW5zZmVyaW5nIGZyb20gQ0NLIHRvIE9GRE0sIERJRyBpcyBhbiBpbXBvcnRhbnQgaXNzdWUuDQotCQkJLy8NCi0JCQlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyKQ0KLQkJCQliVXBkYXRlSW5pdGlhbEdhaW4gPSB0cnVlOw0KLQ0KLQkJCS8vIFRoZSBkaWZmZXJlbmNlIGluIHRocm91Z2hwdXQgYmV0d2VlbiA0OE1icHMgYW5kIDM2TWJwcyBpcyA4TS4NCi0JCQkvLyBTbywgd2UgbXVzdCBiZSBjYXJlZnVsbHkgaW4gdGhpcyByYXRlIHNjYWxlLiBJc2FpYWggMjAwOC0wMi0xNS4NCi0JCQkvLw0KLQkJCWlmKCAgKChwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDcyKSB8fCAocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA0OCkgfHwgKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMzYpKSAmJg0KLQkJCQkocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4gMikgKQ0KLQkJCQlwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2Q9IChSQVRFX0FEQVBUSVZFX1RJTUVSX1BFUklPRC8yKTsNCi0JCQkNCi0JCQkvLyAoMSlUbyBhdm9pZCB1cGdyYWRlIGZyZXF1ZW50bHkgdG8gdGhlIGZhaWwgdHggcmF0ZSwgYWRkIHRoZSBGYWlsVHhSYXRlQ291bnQgaW50byB0aGUgdGhyZXNob2xkLg0KLQkJCS8vICgyKUlmIHRoZSBzaWduYWwgc3RyZW5ndGggaXMgaW5jcmVhc2VkLCBpdCBtYXkgYmUgYWJsZSB0byB1cGdyYWRlLg0KLQ0KLQkJCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSBHZXRVcGdyYWRlVHhSYXRlKGRldiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7DQotLy8JCQlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogVXBncmFkZSBUeCBSYXRlIHRvICVkXG4iLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0NCi0JCQkvL1tUUkMgRGVsbCBMYWJdIEJ5cGFzcyAxMi85LzYsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwIA0KLQkJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0zNikNCi0JCQl7DQotCQkJCXByaXYtPmJVcGRhdGVBUkZSPXRydWU7DQotCQkJCXdyaXRlX25pY193b3JkKGRldiwgQVJGUiwgMHgwRjhGKTsgLy9ieXBhc3MgMTIvOS82DQotLy8JCQkJcHJpbnRrKCJVUDogQVJGUj0weEY4RlxuIik7DQotCQkJfQ0KLQkJCWVsc2UgaWYocHJpdi0+YlVwZGF0ZUFSRlIpDQotCQkJew0KLQkJCQlwcml2LT5iVXBkYXRlQVJGUj1mYWxzZTsNCi0JCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGRkYpOyAvL3NldCAxTSB+IDU0TWJwcy4NCi0vLwkJCQlwcmludGsoIlVQOiBBUkZSPTB4RkZGXG4iKTsNCi0JCQl9DQotCQkJCQ0KLQkJCS8vIFVwZGF0ZSBGYWlsIFR4IHJhdGUgYW5kIGNvdW50Lg0KLQkJCWlmKHByaXYtPkxhc3RGYWlsVHhSYXRlICE9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpDQotCQkJew0KLQkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGU7DQotCQkJCXByaXYtPkZhaWxUeFJhdGVDb3VudCA9IDA7DQotCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSAtMjAwOyAvLyBTZXQgbG93ZXN0IHBvd2VyLg0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsJDQotCQlpZihwcml2LT5Ucnl1cGluZ0NvdW50ID4gMCkNCi0JCQlwcml2LT5Ucnl1cGluZ0NvdW50IC0tOw0KLQl9DQotCQ0KLQlpZihiVHJ5RG93bikNCi0Jew0KLQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSsrOw0KLQkJcHJpdi0+VHJ5dXBpbmdDb3VudCA9IDA7DQotCQl7DQotLy8JCQlwcmludGsoIkROOiBwSGFsRGF0YS0+VHJ5RG93bkNvdW50TG93RGF0YSA9ICVkXG4iLHByaXYtPlRyeURvd25Db3VudExvd0RhdGEpOw0KLS8vCQkJcHJpbnRrKCJETjogVHJ5RG93blRoID0lZFxuIiwgVHJ5RG93blRoKTsNCi0vLwkJCXByaW50aygiRE46IHBIYWxEYXRhLT5iVHJ5dXBpbmc9JWRcbiIsICBwcml2LT5iVHJ5dXBpbmcpOw0KLQkJfQ0KLQkJCQkJCQ0KLQkJLy9DaGVjayBpZiBUeCByYXRlIGNhbiBiZSBkZWdyYWRlZCBvciBUZXN0IHRyeWluZyB1cGdyYWRpbmcgc2hvdWxkIGZhbGxiYWNrLg0KLQkJaWYocHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA+IFRyeURvd25UaCB8fCBwcml2LT5iVHJ5dXBpbmcpDQotCQl7DQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9IDA7DQotCQkJcHJpdi0+YlRyeXVwaW5nID0gZmFsc2U7DQotCQkJLy8gVXBkYXRlIGZhaWwgaW5mb3JtYXRpb24uDQotCQkJaWYocHJpdi0+TGFzdEZhaWxUeFJhdGUgPT0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkNCi0JCQl7DQotCQkJCXByaXYtPkZhaWxUeFJhdGVDb3VudCArKzsNCi0JCQkJLy8gUmVjb3JkIHRoZSBUeCBmYWlsIHJhdGUgc2lnbmFsIHN0cmVuZ3RoLg0KLQkJCQlpZihDdXJyU2lnbmFsU3RyZW5ndGggPiBwcml2LT5MYXN0RmFpbFR4UmF0ZVNTKQ0KLQkJCQl7DQotCQkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gQ3VyclNpZ25hbFN0cmVuZ3RoOw0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZTsNCi0JCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMTsNCi0JCQkJcHJpdi0+TGFzdEZhaWxUeFJhdGVTUyA9IEN1cnJTaWduYWxTdHJlbmd0aDsNCi0JCQl9DQotCQkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IEdldERlZ3JhZGVUeFJhdGUoZGV2LCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0NCi0JCQkvLyBSZWR1Y2UgY2hhcmlvdCB0cmFpbmluZyB0aW1lIGF0IHdlYWsgc2lnbmFsIHN0cmVuZ3RoIHNpdHVhdGlvbi4gU0QzIEVEIGRlbWFuZC4gDQotCQkJLy9bVFJDIERlbGwgTGFiXSBSZXZpc2UgU2lnbmFsIFRocmVzaG9sZCBmcm9tIC03NSB0byAtODAgLCBJc2FpYWggMjAwOC0wMi0xOCAyMDowMCANCi0JCQlpZiggKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04MCkgJiYgKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPiA3MiApKQ0KLQkJCXsNCi0JCQkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IDcyOw0KLS8vCQkJCXByaW50aygiRE46IHdlYWsgc2lnbmFsIHN0cmVuZ3RoICglZCksIGRlZ3JhZGUgdG8gMzZNYnBzXG4iLCBDdXJyU2lnbmFsU3RyZW5ndGgpOw0KLQkJCX0NCi0NCi0JCQkvL1tUUkMgRGVsbCBMYWJdIEJ5cGFzcyAxMi85LzYsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwIA0KLQkJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0zNikNCi0JCQl7DQotCQkJCXByaXYtPmJVcGRhdGVBUkZSPXRydWU7DQotCQkJCXdyaXRlX25pY193b3JkKGRldiwgQVJGUiwgMHgwRjhGKTsgLy9ieXBhc3MgMTIvOS82DQotLy8JCQkJcHJpbnRrKCJETjogQVJGUj0weEY4RlxuIik7DQotCQkJfQ0KLQkJCWVsc2UgaWYocHJpdi0+YlVwZGF0ZUFSRlIpDQotCQkJew0KLQkJCQlwcml2LT5iVXBkYXRlQVJGUj1mYWxzZTsNCi0JCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGRkYpOyAvL3NldCAxTSB+IDU0TWJwcy4NCi0vLwkJCQlwcmludGsoIkROOiBBUkZSPTB4RkZGXG4iKTsNCi0JCQl9DQotCQkJCQ0KLQkJCS8vDQotCQkJLy8gV2hlbiBpdCBpcyBDQ0sgcmF0ZSwgaXQgbWF5IG5lZWQgdG8gdXBkYXRlIGluaXRpYWwgZ2FpbiB0byByZWNlaXZlIGxvd2VyIHBvd2VyIHBhY2tldHMuDQotCQkJLy8NCi0JCQlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpKQ0KLQkJCXsNCi0JCQkJYlVwZGF0ZUluaXRpYWxHYWluID0gdHJ1ZTsNCi0JCQl9DQotLy8JCQlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogRGVncmFkZSBUeCBSYXRlIHRvICVkXG4iLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmKHByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPiAwKQ0KLQkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgLS07DQotCX0NCi0JCQkNCi0JLy8gS2VlcCB0aGUgVHggZmFpbCByYXRlIGNvdW50IHRvIGVxdWFsIHRvIDB4MTUgYXQgbW9zdC4NCi0JLy8gUmVkdWNlIHRoZSBmYWlsIGNvdW50IGF0IGxlYXN0IHRvIDEwIHNlYyBpZiB0eCByYXRlIGlzIHRlbmRpbmcgc3RhYmxlLg0KLQlpZihwcml2LT5GYWlsVHhSYXRlQ291bnQgPj0gMHgxNSB8fCANCi0JCSghYlRyeVVwICYmICFiVHJ5RG93biAmJiBwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID09IDAgJiYgcHJpdi0+VHJ5dXBpbmdDb3VudCAmJiBwcml2LT5GYWlsVHhSYXRlQ291bnQgPiAweDYpKQ0KLQl7DQotCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgLS07DQotCX0JCQ0KLQ0KLQ0KLQlPZmRtVHhQd3JJZHggID0gcHJpdi0+Y2h0eHB3cl9vZmRtW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOyANCi0JQ2NrVHhQd3JJZHggID0gcHJpdi0+Y2h0eHB3cltwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsgDQotCQ0KLQkvL1tUUkMgRGVsbCBMYWJdIE1hYzB4OWUgaW5jcmVhc2UgMiBsZXZlbCBpbiAzNk1+MThNIHNpdHVhdGlvbiwgSXNhaWFoIDIwMDgtMDItMTggMjQ6MDAgDQotCWlmKChwcml2LT5DdXJyZW50T3BlcmFSYXRlIDwgOTYpICYmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPiAyMikpDQotCXsNCi0JCXUxYkNjayA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOw0KLQkJdTFiT2ZkbSA9IHJlYWRfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDKTsNCi0NCi0JCS8vIGNhc2UgMTogTmV2ZXIgZW50ZXIgSGlnaCBwb3dlcg0KLQkJaWYodTFiQ2NrID09IENja1R4UHdySWR4ICkNCi0JCXsNCi0JCQlpZih1MWJPZmRtICE9IChPZmRtVHhQd3JJZHgrMikgKQ0KLQkJCXsNCi0JCQlwcml2LT5iRW5oYW5jZVR4UHdyPSB0cnVlOw0KLQkJCXUxYk9mZG0gPSAoKHUxYk9mZG0rMikgPiAzNSkgPyAzNTogKHUxYk9mZG0rMik7DQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsNCi0vLwkJCXByaW50aygiRW5oYW5jZSBPRkRNX1RYQUdDIDogKysrKysgdTFiT2ZkbT0gMHgleFxuIiwgdTFiT2ZkbSk7DQotCQkJfQ0KLQkJfQ0KLQkJLy8gY2FzZSAyOiBlbnRlciBoaWdoIHBvd2VyDQotCQllbHNlIGlmKHUxYkNjayA8IENja1R4UHdySWR4KQ0KLQkJew0KLQkJCWlmKCFwcml2LT5iRW5oYW5jZVR4UHdyKQ0KLQkJCXsNCi0JCQkJcHJpdi0+YkVuaGFuY2VUeFB3cj0gdHJ1ZTsNCi0JCQkJdTFiT2ZkbSA9ICgodTFiT2ZkbSsyKSA+IDM1KSA/IDM1OiAodTFiT2ZkbSsyKTsNCi0JCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsNCi0JCQkJLy9SVF9UUkFDRShDT01QX1JBVEUsIERCR19UUkFDRSwgKCJFbmhhbmNlIE9GRE1fVFhBR0MoMikgOiArKysrKyB1MWJPZmRtPSAweCV4XG4iLCB1MWJPZmRtKSk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotCWVsc2UgaWYocHJpdi0+YkVuaGFuY2VUeFB3cikgIC8vNTQvNDgvMTEvNS41LzIvMQ0KLQl7DQotCQl1MWJDY2sgPSByZWFkX25pY19ieXRlKGRldiwgQ0NLX1RYQUdDKTsNCi0JCXUxYk9mZG0gPSByZWFkX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQyk7DQotDQotCQkvLyBjYXNlIDE6IE5ldmVyIGVudGVyIEhpZ2ggcG93ZXINCi0JCWlmKHUxYkNjayA9PSBDY2tUeFB3cklkeCApDQotCQl7DQotCQlwcml2LT5iRW5oYW5jZVR4UHdyPSBmYWxzZTsNCi0JCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgT2ZkbVR4UHdySWR4KTsNCi0JCS8vcHJpbnRrKCJSZWNvdmVyIE9GRE1fVFhBR0MgOiA9PT09PSB1MWJPZmRtPSAweCV4XG4iLCBPZmRtVHhQd3JJZHgpOw0KLQkJfQ0KLQkJLy8gY2FzZSAyOiBlbnRlciBoaWdoIHBvd2VyDQotCQllbHNlIGlmKHUxYkNjayA8IENja1R4UHdySWR4KQ0KLQkJew0KLQkJCXByaXYtPmJFbmhhbmNlVHhQd3I9IGZhbHNlOw0KLQkJCXUxYk9mZG0gPSAoKHUxYk9mZG0tMikgPiAwKSA/ICh1MWJPZmRtLTIpOiAwOw0KLQkJCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgdTFiT2ZkbSk7DQotCQkJLy9SVF9UUkFDRShDT01QX1JBVEUsIERCR19UUkFDRSwgKCJSZWNvdmVyIE9GRE1fVFhBR0MoMik6ID09PT09IHUxYk9mZG09IDB4JXhcbiIsIHUxYk9mZG0pKTsNCi0NCi0JCX0NCi0JfQ0KLQ0KLQkvLw0KLQkvLyBXZSBuZWVkIHVwZGF0ZSBpbml0aWFsIGdhaW4gd2hlbiB3ZSBzZXQgdHggcmF0ZSAiZnJvbSBPRkRNIHRvIENDSyIgb3INCi0JLy8gImZyb20gQ0NLIHRvIE9GRE0iLiANCi0JLy8NCi1TZXRJbml0aWFsR2FpbjoNCi0JaWYoYlVwZGF0ZUluaXRpYWxHYWluKQ0KLQl7DQotCQlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpKSAvLyBDQ0sNCi0JCXsNCi0JCQlpZihwcml2LT5Jbml0aWFsR2FpbiA+IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlKQ0KLQkJCXsNCi0JCQkJcHJpdi0+SW5pdGlhbEdhaW5CYWNrVXA9IHByaXYtPkluaXRpYWxHYWluOw0KLQ0KLQkJCQlpZihDdXJyU2lnbmFsU3RyZW5ndGggPCAtODUpIC8vIExvdyBwb3dlciwgT0ZETSBbMHgxN10gPSAyNi4NCi0JCQkJew0KLQkJCQkJLy9TRDMgU1lzIHN1Z2dlc3QgdGhhdCBDdXJyU2lnbmFsU3RyZW5ndGggPCAtNjUsIG9mZG0gMHgxNz0yNi4NCi0JCQkJCXByaXYtPkluaXRpYWxHYWluID0gcHJpdi0+UmVnQk1vZGVHYWluU3RhZ2U7DQotCQkJCX0NCi0JCQkJZWxzZSBpZihwcml2LT5Jbml0aWFsR2FpbiA+IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlICsgMSkNCi0JCQkJew0KLQkJCQkJcHJpdi0+SW5pdGlhbEdhaW4gLT0gMjsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCXByaXYtPkluaXRpYWxHYWluIC0tOw0KLQkJCQl9DQotCQkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiB1cGRhdGUgaW5pdF9nYWluIHRvIGluZGV4ICVkIGZvciBkYXRlIHJhdGUgJWRcbiIscHJpdi0+SW5pdGlhbEdhaW4sIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOwkJCQ0KLQkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UgLy8gT0ZETQ0KLQkJewkJCQ0KLQkJCWlmKHByaXYtPkluaXRpYWxHYWluIDwgNCkNCi0JCQl7DQotCQkJCXByaXYtPkluaXRpYWxHYWluQmFja1VwPSBwcml2LT5Jbml0aWFsR2FpbjsNCi0NCi0JCQkJcHJpdi0+SW5pdGlhbEdhaW4gKys7DQotCQkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiB1cGRhdGUgaW5pdF9nYWluIHRvIGluZGV4ICVkIGZvciBkYXRlIHJhdGUgJWRcbiIscHJpdi0+SW5pdGlhbEdhaW4sIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOwkJCQ0KLQkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOw0KLQkJCX0JCQkJCQ0KLQkJfQ0KLQl9DQotDQotCS8vUmVjb3JkIHRoZSByZWxhdGVkIGluZm8NCi0JcHJpdi0+TGFzdFJldHJ5UmF0ZSA9IEN1cnJSZXRyeVJhdGU7DQotCXByaXYtPkxhc3RUeFRocm91Z2hwdXQgPSBUeFRocm91Z2hwdXQ7DQotCXByaXYtPmllZWU4MDIxMS0+cmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgKiA1Ow0KLX0NCi0NCi0jZW5kaWYNCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49S0VSTkVMX1ZFUlNJT04oMiw2LDIwKQ0KLXZvaWQgcnRsODE4MF9yYXRlX2FkYXB0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICogd29yaykNCi17DQotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsNCi0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLHJhdGVfYWRhcHRlcl93cSk7DQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2Ow0KLSNlbHNlDQotdm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KLXsNCi0NCi0jZW5kaWYNCi0gICAgICAgIC8vc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLS8vICAgIERNRVNHKCItLS0tPnJ0bDgxODBfcmF0ZV9hZGFwdGVyIik7DQotICAgICAgICBTdGFSYXRlQWRhcHRpdmU4N1NFKGRldik7DQotLy8gICBETUVTRygiPC0tLS1ydGw4MTgwX3JhdGVfYWRhcHRlciIpOw0KLX0NCi12b2lkIHRpbWVyX3JhdGVfYWRhcHRpdmUodW5zaWduZWQgbG9uZyBkYXRhKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYqIHByaXYgPSBpZWVlODAyMTFfcHJpdigoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhKTsNCi0JLy9ETUVTRygiLS0tLT50aW1lcl9yYXRlX2FkYXB0aXZlKClcbiIpOw0KLQlpZighcHJpdi0+dXApDQotCXsNCi0vLwkJRE1FU0coIjwtLS0tdGltZXJfcmF0ZV9hZGFwdGl2ZSgpOmRyaXZlciBpcyBub3QgdXAhXG4iKTsNCi0JCXJldHVybjsNCi0JfQ0KLQlpZigocHJpdi0+aWVlZTgwMjExLT5pd19tb2RlICE9IElXX01PREVfTUFTVEVSKQ0KLQkJCSYmIChwcml2LT5pZWVlODAyMTEtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpICYmDQotCQkJKHByaXYtPkZvcmNlZERhdGFSYXRlID09IDApICkNCi0Jew0KLS8vCURNRVNHKCJ0aW1lcl9yYXRlX2FkYXB0aXZlKCk6c2NoZWR1bGUgcmF0ZV9hZGFwdGVyX3dxXG4iKTsNCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLQkJcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAodm9pZCAqKSZwcml2LT5pZWVlODAyMTEtPnJhdGVfYWRhcHRlcl93cSk7DQotLy8JCVN0YVJhdGVBZGFwdGl2ZTg3U0UoKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YSk7DQotI2VuZGlmDQotCX0NCi0JcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNU0VDUyhwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2QpOw0KLQlhZGRfdGltZXIoJnByaXYtPnJhdGVhZGFwdGVyX3RpbWVyKTsNCi0JLy9ETUVTRygiPC0tLS10aW1lcl9yYXRlX2FkYXB0aXZlKClcbiIpOw0KLX0NCi0vL2J5IGFteSAwODAzMTJ9DQotdm9pZA0KLVN3QW50ZW5uYURpdmVyc2l0eVJ4T2s4MTg1KA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCANCi0JdTggU2lnbmFsU3RyZW5ndGgNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOw0KLQ0KLS8vCXByaW50aygiK1N3QW50ZW5uYURpdmVyc2l0eVJ4T2s4MTg1OiBSeFNzOiAlZFxuIiwgU2lnbmFsU3RyZW5ndGgpOw0KLQ0KLQlwcml2LT5BZFJ4T2tDbnQrKzsNCi0NCi0JaWYoIHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCAhPSAtMSkNCi0Jew0KLQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoID0gKChwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgqNykgKyAoU2lnbmFsU3RyZW5ndGgqMykpIC8gMTA7DQotCX0NCi0JZWxzZQ0KLQl7IC8vIEluaXRpYWxpemF0aW9uIGNhc2UuDQotCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPSBTaWduYWxTdHJlbmd0aDsNCi0JfQ0KLS8veytieSBhbXkgMDgwMzEyDQotCWlmKCBwcml2LT5MYXN0UnhQa3RBbnRlbm5hICkgLy9NYWluIGFudGVubmEuCQ0KLQkJcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQrKzsJDQotCWVsc2UJIC8vIEF1eCBhbnRlbm5hLg0KLQkJcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCsrOw0KLS8vK2J5IGFteSAwODAzMTINCi0vLwlwcmludGsoIi1Td0FudGVubmFEaXZlcnNpdHlSeE9rODE4NTogQWRSeE9rQ250OiAlZCBBZFJ4U2lnbmFsU3RyZW5ndGg6ICVkXG4iLCBwcml2LT5BZFJ4T2tDbnQsIHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCk7DQotfQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCUNoYW5nZSBBbnRlbm5hIFN3aXRjaC4NCi0vLw0KLWJvb2wNCi1TZXRBbnRlbm5hODE4NSgNCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCi0JdTgJCXUxYkFudGVubmFJbmRleA0KLQkpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotCWJvb2wgYkFudGVubmFTd2l0Y2hlZCA9IGZhbHNlOw0KLQ0KLS8vCXByaW50aygiK1NldEFudGVubmE4MTg1KCk6IEFudGVubmEgaXMgc3dpdGNoaW5nIHRvOiAlZCBcbiIsIHUxYkFudGVubmFJbmRleCk7DQotDQotCXN3aXRjaCh1MWJBbnRlbm5hSW5kZXgpDQotCXsNCi0JY2FzZSAwOg0KLQkJc3dpdGNoKHByaXYtPnJmX2NoaXApDQotCQl7DQotCQljYXNlIFJGX1pFQlJBMjoNCi0JCWNhc2UgUkZfWkVCUkE0Og0KLSNpZmRlZiBDT05GSUdfUlRMODE4NUINCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLQkJCS8vIE1hYyByZWdpc3RlciwgbWFpbiBhbnRlbm5hDQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDMpOyANCi0JCQkvL2Jhc2UgYmFuZA0KLQkJCXdyaXRlX3BoeV9jY2soZGV2LDB4MTEsIDB4OWIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuDQotCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDVjKTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4NCi0NCi0jZWxzZQ0KLQkJCS8vIE1hYyByZWdpc3RlciwgbWFpbiBhbnRlbm5hDQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDMpOyANCi0JCQkvL2Jhc2UgYmFuZA0KLQkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLg0KLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1Yyk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuDQotI2VuZGlmDQotI2VuZGlmDQotDQotCQkJYkFudGVubmFTd2l0Y2hlZCA9IHRydWU7DQotCQkJYnJlYWs7DQotDQotCQlkZWZhdWx0Og0KLQkJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua293biBSRkNoaXBJRCglZClcbiIsIHByaXYtPnJmX2NoaXApOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQkJYnJlYWs7DQotDQotCWNhc2UgMToNCi0JCXN3aXRjaChwcml2LT5yZl9jaGlwKQ0KLQkJew0KLQkJY2FzZSBSRl9aRUJSQTI6DQotCQljYXNlIFJGX1pFQlJBNDoNCi0jaWZkZWYgQ09ORklHX1JUTDgxODVCDQotI2lmZGVmIENPTkZJR19SVEw4MThYX1MNCi0JCQkvLyBNYWMgcmVnaXN0ZXIsIGF1eCBhbnRlbm5hDQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDApOyANCi0JCQkvL2Jhc2UgYmFuZA0KLQkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweGJiKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLg0KLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1NCk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuDQotI2Vsc2UNCi0JCQkvLyBNYWMgcmVnaXN0ZXIsIGF1eCBhbnRlbm5hDQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDApOyANCi0JCQkvL2Jhc2UgYmFuZA0KLQkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweGJiKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLg0KLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1NCk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuDQotI2VuZGlmDQotI2VuZGlmDQotDQotCQkJYkFudGVubmFTd2l0Y2hlZCA9IHRydWU7DQotCQkJYnJlYWs7DQotDQotCQlkZWZhdWx0Og0KLQkJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua293biBSRkNoaXBJRCglZClcbiIsIHByaXYtPnJmX2NoaXApOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQkJYnJlYWs7DQotDQotCWRlZmF1bHQ6DQotCQlwcmludGsoIlNldEFudGVubmE4MTg1OiB1bmtvd24gdTFiQW50ZW5uYUluZGV4KCVkKVxuIiwgdTFiQW50ZW5uYUluZGV4KTsNCi0JCWJyZWFrOw0KLQl9DQotDQotCWlmKGJBbnRlbm5hU3dpdGNoZWQpDQotCXsNCi0JCXByaXYtPkN1cnJBbnRlbm5hSW5kZXggPSB1MWJBbnRlbm5hSW5kZXg7DQotCX0NCi0NCi0vLwlwcmludGsoIi1TZXRBbnRlbm5hODE4NSgpOiByZXR1cm4gKCUjWClcbiIsIGJBbnRlbm5hU3dpdGNoZWQpOw0KLQ0KLQlyZXR1cm4gYkFudGVubmFTd2l0Y2hlZDsNCi19DQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJVG9nZ2xlIEFudGVubmEgc3dpdGNoLg0KLS8vDQotYm9vbA0KLVN3aXRjaEFudGVubmEoDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOw0KLQ0KLQlib29sCQliUmVzdWx0Ow0KLQ0KLQlpZihwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDApDQotCXsNCi0jaWYgMC8vbHptIGRlbCAwODA4MjYNCi0vL2J5IGFteSAwODAzMTINCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLQkJaWYocHJpdi0+YlN3QW50ZW5uYURpdmVyaXR5KQ0KLQkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hQ29uZmlnODdTRShkZXYsIDEsIHRydWUpOw0KLQkJZWxzZQkJCQ0KLSNlbmRpZg0KLSNlbmRpZg0KLQkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDEpOw0KLS8vYnkgYW15IDA4MDMxMg0KLS8vCQlwcmludGsoIlN3aXRjaEFudGVubmEoKTogc3dpdGNoaW5nIHRvIGFudGVubmEgMSAuLi4uLi5cbiIpOw0KLS8vCQliUmVzdWx0ID0gU2V0QW50ZW5uYTgxODUoZGV2LCAxKTsvLy1ieSBhbXkgMDgwMzEyDQotCX0NCi0JZWxzZQ0KLQl7DQotI2lmIDAvL2x6bSBkZWwgMDgwODI2DQotLy9ieSBhbXkgMDgwMzEyDQotI2lmZGVmIENPTkZJR19SVEw4MThYX1MNCi0JCWlmKHByaXYtPmJTd0FudGVubmFEaXZlcml0eSkNCi0JCQliUmVzdWx0ID0gU2V0QW50ZW5uYUNvbmZpZzg3U0UoZGV2LCAwLCB0cnVlKTsNCi0JCWVsc2UJDQotI2VuZGlmDQotI2VuZGlmDQotCQkJYlJlc3VsdCA9IFNldEFudGVubmE4MTg1KGRldiwgMCk7DQotLy9ieSBhbXkgMDgwMzEyDQotLy8JCXByaW50aygiU3dpdGNoQW50ZW5uYSgpOiBzd2l0Y2hpbmcgdG8gYW50ZW5uYSAwIC4uLi4uLlxuIik7DQotLy8JCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDApOy8vLWJ5IGFteSAwODAzMTINCi0JfQ0KLQ0KLQlyZXR1cm4gYlJlc3VsdDsNCi19DQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJRW5naW5lIG9mIFNXIEFudGVubmEgRGl2ZXJzaXR5IG1lY2hhbmlzbS4NCi0vLwkJU2luY2UgODE4NyBoYXMgbm8gVHggcGFydCBpbmZvcm1hdGlvbiwgDQotLy8JCXRoaXMgaW1wbGVtZW50YXRpb24gaXMgb25seSBkZXBlbmRlbmQgb24gUnggcGFydCBpbmZvcm1hdGlvbi4gDQotLy8NCi0vLwkyMDA2LjA0LjE3LCBieSByY25qa28uDQotLy8NCi12b2lkDQotU3dBbnRlbm5hRGl2ZXJzaXR5KA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JYm9vbCAgIGJTd0NoZWNrU1M9ZmFsc2U7DQotLy8JcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IEN1cnJBbnRlbm5hSW5kZXg6ICVkXG4iLCBwcml2LT5DdXJyQW50ZW5uYUluZGV4KTsNCi0vLwlwcmludGsoIkFkVGlja0NvdW50IGlzICVkXG4iLHByaXYtPkFkVGlja0NvdW50KTsNCi0vL2J5IGFteSAwODAzMTINCi0JaWYoYlN3Q2hlY2tTUykNCi0Jew0KLQkJcHJpdi0+QWRUaWNrQ291bnQrKzsNCi0JDQotCQlwcmludGsoIigxKSBBZFRpY2tDb3VudDogJWQsIEFkQ2hlY2tQZXJpb2Q6ICVkXG4iLCANCi0JCQlwcml2LT5BZFRpY2tDb3VudCwgcHJpdi0+QWRDaGVja1BlcmlvZCk7DQotCQlwcmludGsoIigyKSBBZFJ4U2lnbmFsU3RyZW5ndGg6ICVsZCwgQWRSeFNzVGhyZXNob2xkOiAlbGRcbiIsIA0KLQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKTsNCi0JfQ0KLS8vCXByaXYtPkFkVGlja0NvdW50Kys7Ly8tYnkgYW15IDA4MDMxMg0KLQkNCi0JLy8gQ2FzZSAxLiBObyBMaW5rLg0KLQlpZihwcml2LT5pZWVlODAyMTEtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpDQotCXsNCi0JLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAxLiBObyBMaW5rLlxuIik7DQotDQotCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gZmFsc2U7DQotCQkvLyBJIHN3aXRjaCBhbnRlbm5hIGhlcmUgdG8gcHJldmVudCBhbnkgb25lIG9mIGFudGVubmEgaXMgYnJva2VuIGJlZm9yZSBsaW5rIGVzdGFibGlzaGVkLCAyMDA2LjA0LjE4LCBieSByY25qa28uLg0KLQkJU3dpdGNoQW50ZW5uYShkZXYpOw0KLQl9DQotCS8vIENhc2UgMi4gTGlua2VkIGJ1dCBubyBwYWNrZXQgcmVjZWl2ZWQuDQotCWVsc2UgaWYocHJpdi0+QWRSeE9rQ250ID09IDApDQotCXsNCi0JLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAyLiBMaW5rZWQgYnV0IG5vIHBhY2tldCByZWNlaXZlZC5cbiIpOw0KLQ0KLQkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IGZhbHNlOw0KLQkJU3dpdGNoQW50ZW5uYShkZXYpOw0KLQl9DQotCS8vIENhc2UgMy4gRXZhbHVhdGUgbGFzdCBhbnRlbm5hIHN3aXRjaCBhY3Rpb24gYW5kIHVuZG8gaXQgaWYgbmVjZXNzYXJ5Lg0KLQllbHNlIGlmKHByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPT0gdHJ1ZSkNCi0Jew0KLQkvLwlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBDYXNlIDMuIEV2YWx1YXRlIGxhc3QgYW50ZW5uYSBzd2l0Y2ggYWN0aW9uLlxuIik7DQotDQotCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gZmFsc2U7DQotDQotCQkvLyBBZGp1c3QgUnggc2lnbmFsIHN0cmVuZ3RoIHRocmVhc2hvbGQuDQotCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPSAocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoICsgcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQpIC8gMjsNCi0NCi0JCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPiBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpID8JDQotCQkJCQlwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQ6IHByaXYtPkFkUnhTc1RocmVzaG9sZDsNCi0JCWlmKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCA8IHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKQ0KLQkJeyAvLyBSeCBzaWduYWwgc3RyZW5ndGggaXMgbm90IGltcHJvdmVkIGFmdGVyIHdlIHN3dGljaGVkIGFudGVubmEuID0+IFN3aWNoIGJhY2suDQotLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgbm90IGltcHJvdmVkLCBDdXJyUnhTczogJWQsIExhc3RSeFNzOiAlZFxuIiwgDQotLy8JCQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoLCBwcml2LT5BZFJ4U3NCZWZvcmVTd2l0Y2hlZCk7DQotLy9ieSBhbXkgMDgwMzEyDQotCQkJLy8gSW5jcmVhc2UgQW50ZW5uYSBEaXZlcnNpdHkgY2hlY2tpbmcgcGVyaW9kIGR1ZSB0byBiYWQgZGVjaXNpb24uDQotCQkJcHJpdi0+QWRDaGVja1BlcmlvZCAqPSAyOw0KLS8vYnkgYW15IDA4MDMxMg0KLQkJCS8vIEluY3JlYXNlIEFudGVubmEgRGl2ZXJzaXR5IGNoZWNraW5nIHBlcmlvZC4NCi0JCQlpZihwcml2LT5BZENoZWNrUGVyaW9kID4gcHJpdi0+QWRNYXhDaGVja1BlcmlvZCkNCi0JCQkJcHJpdi0+QWRDaGVja1BlcmlvZCA9IHByaXYtPkFkTWF4Q2hlY2tQZXJpb2Q7DQotCQ0KLQkJCS8vIFdyb25nIGRlY2Vpc2lvbiA9PiBzd2l0Y2ggYmFjay4NCi0JCQlTd2l0Y2hBbnRlbm5hKGRldik7DQotCQl9DQotCQllbHNlDQotCQl7IC8vIFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyBpbXByb3ZlZC4gDQotLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgaW1wcm92ZWQsIEN1cnJSeFNzOiAlZCwgTGFzdFJ4U3M6ICVkXG4iLCANCi0vLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKTsNCi0NCi0JCQkvLyBSZXNldCBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgdG8gaXRzIG1pbiB2YWx1ZS4NCi0JCQlwcml2LT5BZENoZWNrUGVyaW9kID0gcHJpdi0+QWRNaW5DaGVja1BlcmlvZDsNCi0JCX0NCi0NCi0vLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQWRSeFNzVGhyZXNob2xkOiAlZCwgQWRDaGVja1BlcmlvZDogJWRcbiIsDQotLy8JCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQsIHByaXYtPkFkQ2hlY2tQZXJpb2QpOw0KLQl9DQotCS8vIENhc2UgNC4gRXZhbHVhdGUgaWYgd2Ugc2hhbGwgc3dpdGNoIGFudGVubmEgbm93Lg0KLQkvLyBDYXVzZSBUYWJsZSBTcGVlZCBpcyB2ZXJ5IGZhc3QgaW4gVFJDIERlbGwgTGFiLCB3ZSBjaGVjayBpdCBldmVyeSB0aW1lLiANCi0JZWxzZS8vIGlmKHByaXYtPkFkVGlja0NvdW50ID49IHByaXYtPkFkQ2hlY2tQZXJpb2QpLy8tYnkgYW15IDA4MDMxMg0KLQl7DQotLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IENhc2UgNC4gRXZhbHVhdGUgaWYgd2Ugc2hhbGwgc3dpdGNoIGFudGVubmEgbm93LlxuIik7DQotDQotCQlwcml2LT5BZFRpY2tDb3VudCA9IDA7DQotDQotCQkvLw0KLQkJLy8gPFJvZ2VyX05vdGVzPiBXZSBldmFsdWF0ZSBSeE9rIGNvdW50cyBmb3IgZWFjaCBhbnRlbm5hIGZpcnN0IGFuZCB0aGFuIA0KLQkJLy8gZXZhbHVhdGUgc2lnbmFsIHN0cmVuZ3RoLiANCi0JCS8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIGNhbiBvdmVyY29tZSB0aGUgZGlzYWJpbGl0eSBvZiBDQ0Egb24gYm90aCB0d28gYW50ZW5uYXMNCi0JCS8vIFdoZW4gc2lnbmFsIHN0cmVuZ3RoIHdhcyBleHRyZW1lbHkgbG93IG9yIGhpZ2guDQotCQkvLyAyMDA4LjAxLjMwLg0KLQkJLy8gDQotCQkNCi0JCS8vDQotCQkvLyBFdmFsdWF0ZSBSeE9rIGNvdW50IGZyb20gZWFjaCBhbnRlbm5hIGlmIHdlIHNoYWxsIHN3aXRjaCBkZWZhdWx0IGFudGVubmEgbm93Lg0KLQkJLy8gQWRkZWQgYnkgUm9nZXIsIDIwMDguMDIuMjEuDQotLy97YnkgYW15IDA4MDMxMg0KLQkJaWYoKHByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250IDwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCkgDQotCQkJJiYgKHByaXYtPkN1cnJBbnRlbm5hSW5kZXggPT0gMCkpDQotCQl7IC8vIFdlIHNldCBNYWluIGFudGVubmEgYXMgZGVmYXVsdCBidXQgUnhPayBjb3VudCB3YXMgbGVzcyB0aGFuIEF1eCBvbmVzLg0KLQ0KLQkvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogTWFpbiBhbnRlbm5hIFJ4T0sgaXMgcG9vciwgQWRNYWluQW50ZW5uYVJ4T2tDbnQ6ICVkLCBBZEF1eEFudGVubmFSeE9rQ250OiAlZFxuIiwgDQotCS8vCQkJcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQsIHByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQpOw0KLQkJCQ0KLQkJCS8vIFN3aXRjaCB0byBBdXggYW50ZW5uYS4NCi0JCQlTd2l0Y2hBbnRlbm5hKGRldik7CQ0KLQkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSB0cnVlOw0KLQkJfQ0KLQkJZWxzZSBpZigocHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCA8IHByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250KSANCi0JCQkmJiAocHJpdi0+Q3VyckFudGVubmFJbmRleCA9PSAxKSkNCi0JCXsgLy8gV2Ugc2V0IEF1eCBhbnRlbm5hIGFzIGRlZmF1bHQgYnV0IFJ4T2sgY291bnQgd2FzIGxlc3MgdGhhbiBNYWluIG9uZXMuDQotDQotCS8vCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBBdXggYW50ZW5uYSBSeE9LIGlzIHBvb3IsIEFkTWFpbkFudGVubmFSeE9rQ250OiAlZCwgQWRBdXhBbnRlbm5hUnhPa0NudDogJWRcbiIsIA0KLQkvLwkJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250LCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KTsNCi0JCQkNCi0JCQkvLyBTd2l0Y2ggdG8gTWFpbiBhbnRlbm5hLg0KLQkJCVN3aXRjaEFudGVubmEoZGV2KTsNCi0JCQlwcml2LT5iSFdBZFN3aXRjaGVkID0gdHJ1ZTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsvLyBEZWZhdWx0IGFudGVubmEgaXMgYmV0dGVyLg0KLQ0KLQkvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogRGVmYXVsdCBhbnRlbm5hIGlzIGJldHRlci4sIEFkTWFpbkFudGVubmFSeE9rQ250OiAlZCwgQWRBdXhBbnRlbm5hUnhPa0NudDogJWRcbiIsIA0KLQkvLwkJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250LCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KTsNCi0NCi0JCQkvLyBTdGlsbCBuZWVkIHRvIGNoZWNrIGN1cnJlbnQgc2lnbmFsIHN0cmVuZ3RoLg0KLQkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSBmYWxzZTsJDQotCQl9DQotCQkvLw0KLQkJLy8gPFJvZ2VyX05vdGVzPiBXZSBldmFsdWF0ZSBSeCBzaWduYWwgc3RyZW5ndGggT05MWSB3aGVuIGRlZmF1bHQgYW50ZW5uYSANCi0JCS8vIGRpZG4ndCBjaGFuZ2VkIGJ5IEhXIGV2YWx1YXRpb24uIA0KLQkJLy8gMjAwOC4wMi4yNy4NCi0JCS8vDQotCQkvLyBbVFJDIERlbGwgTGFiXSBTaWduYWxTdHJlbmd0aCBpcyBpbmFjY3VyYWN5LiBJc2FpYWggMjAwOC0wMy0wNSANCi0JCS8vIEZvciBleGFtcGxlLCBUaHJvdWdocHV0IG9mIGF1eCBpcyBiZXR0ZXIgdGhhbiBtYWluIGFudGVubmEoYWJvdXQgMTBNIHYucyAyTSksIA0KLQkJLy8gYnV0IEFkUnhTaWduYWxTdHJlbmd0aCBpcyBsZXNzIHRoYW4gbWFpbi4gDQotCQkvLyBPdXIgZ3Vlc3MgaXMgdGhhdCBtYWluIGFudGVubmEgaGF2ZSBsb3dlciB0aHJvdWdocHV0IGFuZCBnZXQgbWFueSBjaGFuZ2UgDQotCQkvLyB0byByZWNlaXZlIG1vcmUgQ0NLIHBhY2tldHMoZXguQmVhY29uKSB3aGljaCBoYXZlIHN0cm9uZ2VyIFNpZ25hbFN0cmVuZ3RoLg0KLQkJLy8NCi0JCWlmKCAoIXByaXYtPmJIV0FkU3dpdGNoZWQpICYmIChiU3dDaGVja1NTKSkNCi0JCXsNCi0vL2J5IGFteSAwODAzMTJ9DQotCQkvLyBFdmFsdWF0ZSBSeCBzaWduYWwgc3RyZW5ndGggaWYgd2Ugc2hhbGwgc3dpdGNoIGFudGVubmEgbm93Lg0KLQkJaWYocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoIDwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKQ0KLQkJeyAvLyBSeCBzaWduYWwgc3RyZW5ndGggaXMgd2VhayA9PiBTd2l0Y2ggQW50ZW5uYS4NCi0vLwkJCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyB3ZWFrLCBDdXJyUnhTczogJWQsIFJ4U3NUaHJlc2hvbGQ6ICVkXG4iLCANCi0vLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc1RocmVzaG9sZCk7CQ0KLQ0KLQkJCXByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkID0gcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoOyANCi0JCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gdHJ1ZTsNCi0NCi0JCQlTd2l0Y2hBbnRlbm5hKGRldik7DQotCQl9DQotCQllbHNlDQotCQl7IC8vIFJ4IHNpZ25hbCBzdHJlbmd0aCBpcyBPSy4gDQotLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgT0ssIEN1cnJSeFNzOiAlZCwgUnhTc1RocmVzaG9sZDogJWRcbiIsIA0KLS8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKTsNCi0NCi0JCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gZmFsc2U7DQotCQkJLy8gSW5jcmVhc2UgUnggc2lnbmFsIHN0cmVuZ3RoIHRocmVhc2hvbGQgaWYgbmVjZXNzYXJ5Lg0KLQkJCWlmKAkocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoID4gKHByaXYtPkFkUnhTc1RocmVzaG9sZCArIDEwKSkgJiYgLy8gU2lnbmFsIGlzIG11Y2ggc3Ryb25nZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZA0KLQkJCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPD0gcHJpdi0+QWRNYXhSeFNzVGhyZXNob2xkKSAvLyBDdXJyZW50IHRocmVob2xkIGlzIG5vdCB5ZXQgcmVhY2ggdXBwZXIgbGltaXQuDQotCQkJew0KLQkJCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPSAocHJpdi0+QWRSeFNzVGhyZXNob2xkICsgcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoKSAvIDI7DQotCQkJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPiBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpID8NCi0JCQkJCQkJCQkJCQlwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQ6IHByaXYtPkFkUnhTc1RocmVzaG9sZDsvLytieSBhbXkgMDgwMzEyDQotCQkJfQ0KLQ0KLQkJCS8vIFJlZHVjZSBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgaWYgcG9zc2libGUuIA0KLQkJCWlmKCBwcml2LT5BZENoZWNrUGVyaW9kID4gcHJpdi0+QWRNaW5DaGVja1BlcmlvZCApDQotCQkJew0KLQkJCQlwcml2LT5BZENoZWNrUGVyaW9kIC89IDI7IA0KLQkJCX0NCi0JCX0NCi0JCX0NCi0JfQ0KLS8vYnkgYW15IDA4MDMxMg0KLQkvLyBSZXNldCBhbnRlbm5hIGRpdmVyc2l0eSBSeCByZWxhdGVkIHN0YXRpc3RpY3MuDQotCXByaXYtPkFkUnhPa0NudCA9IDA7DQotCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250ID0gMDsNCi0JcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCA9IDA7DQotLy9ieSBhbXkgMDgwMzEyDQotDQotLy8JcHJpdi0+QWRSeE9rQ250ID0gMDsvLy1ieSBhbXkgMDgwMzEyDQotDQotLy8JcHJpbnRrKCItU3dBbnRlbm5hRGl2ZXJzaXR5KClcbiIpOw0KLX0NCi0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlSZXR1cm4gVFJVRSBpZiB3ZSBzaGFsbCBwZXJmb3JtIFR4IFBvd2VyIFRyYWNraW5nIE1lY2FobmlzbSwgRkFMU0Ugb3RoZXJ3aXNlLgkNCi0vLw0KLWJvb2wNCi1DaGVja1R4UHdyVHJhY2tpbmcoCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotDQotCWlmKCFwcml2LT5iVHhQb3dlclRyYWNrKQ0KLQl7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0NCi0vL2x6bSByZXNlcnZlZCAwODA4MjYNCi0JLy9pZihwcml2LT5iU2NhbkluUHJvZ3Jlc3MpDQotCS8vew0KLQkvLwlyZXR1cm4gZmFsc2U7DQotCS8vfQ0KLQ0KLQkvL2lmIDg3U0UgaXMgaW4gSGlnaCBQb3dlciAsIGRvbid0IGRvIFR4IFBvd2VyIFRyYWNraW5nLiBhc2tlZCBieSBTRDMgRUQuIDIwMDgtMDgtMDggSXNhaWFoIA0KLQlpZihwcml2LT5iVG9VcGRhdGVUeFB3cikNCi0Jew0KLQkJcmV0dXJuIGZhbHNlOw0KLQl9DQotCQkNCi0JcmV0dXJuIHRydWU7DQotfQ0KLQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIFNXIEFudGVubmEgRGl2ZXJzaXR5Lg0KLS8vDQotdm9pZA0KLVN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOw0KLQlSVF9SRl9QT1dFUl9TVEFURSBydFN0YXRlOw0KLQkNCi0JLy9wcmludGsoIitTd0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrKClcbiIpOw0KLQ0KLQkvLw0KLQkvLyBXZSBkbyBOT1QgbmVlZCB0byBzd2l0Y2ggYW50ZW5uYSB3aGlsZSBSRiBpcyBvZmYuDQotCS8vIDIwMDcuMDUuMDksIGFkZGVkIGJ5IFJvZ2VyLg0KLQkvLw0KLQlydFN0YXRlID0gcHJpdi0+ZVJGUG93ZXJTdGF0ZTsNCi0JZG97DQotCQlpZiAocnRTdGF0ZSA9PSBlUmZPZmYpDQotCQl7CQ0KLS8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHlUaW1lciAtIFJGIGlzIE9GRi5cbiIpOw0KLQkJCWJyZWFrOw0KLQkJfSAgCQ0KLQkJZWxzZSBpZiAocnRTdGF0ZSA9PSBlUmZTbGVlcCkNCi0JCXsJDQotCQkJLy8gRG9uJ3QgYWNjZXNzIEJCL1JGIHVuZGVyIERpc2FibGUgUExMIHNpdHVhdGlvbi4NCi0JCQkvL1JUX1RSQUNFKChDT01QX1JGfENPTVBfQU5URU5OQSksIERCR19MT1VELCAoIlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soKTogUkYgaXMgU2xlZXAgPT4gc2tpcCBpdFxuIikpOw0KLQkJCWJyZWFrOw0KLQkJfSAgDQotCQlTd0FudGVubmFEaXZlcnNpdHkoZGV2KTsNCi0NCi0JfXdoaWxlKGZhbHNlKTsNCi0NCi0JaWYocHJpdi0+dXApDQotCXsNCi0JCXByaXYtPlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgTVNFQ1MoQU5URU5OQV9ESVZFUlNJVFlfVElNRVJfUEVSSU9EKTsNCi0JCWFkZF90aW1lcigmcHJpdi0+U3dBbnRlbm5hRGl2ZXJzaXR5VGltZXIpOw0KLQl9DQotDQotCS8vcHJpbnRrKCItU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjaygpXG4iKTsNCi19DQotDQorLy8jaW5jbHVkZSAicjgxODAuaCIKKyNpbmNsdWRlICJyODE4MF9kbS5oIgorI2luY2x1ZGUgInI4MTgwX2h3LmgiCisjaW5jbHVkZSAicjgxODBfOTNjeDYuaCIKKy8ve2J5IGFteSAwODAzMTIKKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVJldHVybiBUUlVFIGlmIHdlIHNoYWxsIHBlcmZvcm0gSGlnaCBQb3dlciBNZWNhaG5pc20sIEZBTFNFIG90aGVyd2lzZS4KKy8vCisvLytieSBhbXkgMDgwMzEyCisjZGVmaW5lIFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9EICAgICAgMzAwCisKK2Jvb2wgQ2hlY2tIaWdoUG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7CisKKwlpZighcHJpdi0+YlJlZ0hpZ2hQb3dlck1lY2hhbmlzbSkKKwl7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEX1NDQU5OSU5HKQorCXsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJVXBkYXRlIFR4IHBvd2VyIGxldmVsIGlmIG5lY2Vzc2FyeS4KKy8vCQlTZWUgYWxzbyBEb1J4SGlnaFBvd2VyKCkgYW5kIFNldFR4UG93ZXJMZXZlbDgxODUoKSBmb3IgcmVmZXJlbmNlLgorLy8KKy8vCU5vdGU6CisvLwkJVGhlIHJlYXNvbiB3aHkgd2UgdWRwYXRlIFR4IHBvd2VyIGxldmVsIGhlcmUgaW5zdGVhZCBvZiBEb1J4SGlnaFBvd2VyKCkKKy8vCQlpcyB0aGUgbnVtYmVyIG9mIElPIHRvIGNoYW5nZSBUeCBwb3dlciBpcyBtdWNoIG1vcmUgdGhhbiBjaGFuZSBUUiBzd2l0Y2gKKy8vCQlhbmQgdGhleSBhcmUgcmVsYXRlZCB0byBPRkRNIGFuZCBNQUMgcmVnaXN0ZXJzLgorLy8JCVNvLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBpdCBzbyBmcmVxdWVudGx5IGluIHBlci1SeCBwYWNrZXQgYmFzZS4KKy8vCit2b2lkCitEb1R4SGlnaFBvd2VyKAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXUxNgkJCUhpUHdyVXBwZXJUaCA9IDA7CisJdTE2CQkJSGlQd3JMb3dlclRoID0gMDsKKwl1OAkJCVJTU0lIaVB3clVwcGVyVGg7CisJdTgJCQlSU1NJSGlQd3JMb3dlclRoOworCXU4CQkJdTFiVG1wOworCWNoYXIJCQlPZmRtVHhQd3JJZHgsIENja1R4UHdySWR4OworCisJLy9wcmludGsoIi0tLS0+IERvVHhIaWdoUG93ZXIoKVxuIik7CisKKwlIaVB3clVwcGVyVGggPSBwcml2LT5SZWdIaVB3clVwcGVyVGg7CisJSGlQd3JMb3dlclRoID0gcHJpdi0+UmVnSGlQd3JMb3dlclRoOworCisJSGlQd3JVcHBlclRoID0gSGlQd3JVcHBlclRoICogMTA7CisJSGlQd3JMb3dlclRoID0gSGlQd3JMb3dlclRoICogMTA7CisJUlNTSUhpUHdyVXBwZXJUaCA9IHByaXYtPlJlZ1JTU0lIaVB3clVwcGVyVGg7CisJUlNTSUhpUHdyTG93ZXJUaCA9IHByaXYtPlJlZ1JTU0lIaVB3ckxvd2VyVGg7CisKKwkvL2x6bSBhZGQgMDgwODI2CisJT2ZkbVR4UHdySWR4ICA9IHByaXYtPmNodHhwd3Jfb2ZkbVtwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsKKwlDY2tUeFB3cklkeCAgPSBwcml2LT5jaHR4cHdyW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOworCisJLy8JcHJpbnRrKCJEb1R4SGlnaFBvd2VyKCkgLSBVbmRlY29yYXRlZFNtb290aGVkU1M6JWQsIEN1ckNDS1JTU0kgPSAlZCAsIGJDdXJDQ0tQa3Q9ICVkIFxuIiwgcHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTLCBwcml2LT5DdXJDQ0tSU1NJLCBwcml2LT5iQ3VyQ0NLUGt0ICk7CisKKwlpZigocHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTID4gSGlQd3JVcHBlclRoKSB8fAorCQkocHJpdi0+YkN1ckNDS1BrdCAmJiAocHJpdi0+Q3VyQ0NLUlNTSSA+IFJTU0lIaVB3clVwcGVyVGgpKSkKKwl7CisJCS8vIFN0ZXZlbmwgc3VnZ2VzdGVkIHRoYXQgZGVncmFkZSA4ZGJtIGluIGhpZ2ggcG93ZXIgc2F0ZS4gMjAwNy0xMi0wNCBJc2FpYWgKKworCS8vCXByaW50aygiPT09PT0+RG9UeEhpZ2hQb3dlcigpIC0gSGlnaCBQb3dlciAtIFVuZGVjb3JhdGVkU21vb3RoZWRTUzolZCwgIEhpUHdyVXBwZXJUaCA9ICVkIFxuIiwgcHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTLCBIaVB3clVwcGVyVGggKTsKKwkJcHJpdi0+YlRvVXBkYXRlVHhQd3IgPSB0cnVlOworCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOworCisJCS8vIElmIGl0IG5ldmVyIGVudGVyIEhpZ2ggUG93ZXIuCisJCWlmKCBDY2tUeFB3cklkeCA9PSB1MWJUbXApCisJCXsKKwkJdTFiVG1wID0gKHUxYlRtcCA+IDE2KSA/ICh1MWJUbXAgLTE2KTogMDsgIC8vIDhkYm0KKwkJd3JpdGVfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MsIHUxYlRtcCk7CisKKwkJdTFiVG1wPSByZWFkX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQyk7CisJCXUxYlRtcCA9ICh1MWJUbXAgPiAxNikgPyAodTFiVG1wIC0xNik6IDA7ICAvLyA4ZGJtCisJCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgdTFiVG1wKTsKKwkJfQorCisJfQorCWVsc2UgaWYoKHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUyA8IEhpUHdyTG93ZXJUaCkgJiYKKwkJKCFwcml2LT5iQ3VyQ0NLUGt0IHx8IHByaXYtPkN1ckNDS1JTU0kgPCBSU1NJSGlQd3JMb3dlclRoKSkKKwl7CisJLy8JIHByaW50aygiRG9UeEhpZ2hQb3dlcigpIC0gbG93ZXIgUG93ZXIgLSBVbmRlY29yYXRlZFNtb290aGVkU1M6JWQsICBIaVB3clVwcGVyVGggPSAlZCBcbiIsIHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUywgSGlQd3JMb3dlclRoICk7CisJCWlmKHByaXYtPmJUb1VwZGF0ZVR4UHdyKQorCQl7CisJCQlwcml2LT5iVG9VcGRhdGVUeFB3ciA9IGZhbHNlOworCQkJLy9TRDMgcmVxdWlyZWQuCisJCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOworCQkJaWYodTFiVG1wIDwgQ2NrVHhQd3JJZHgpCisJCQl7CisJCQkvL3UxYlRtcCA9ICgodTFiVG1wKzE2KSA+IDM1KSA/IDM1OiAodTFiVG1wKzE2KTsgIC8vIDhkYm0KKwkJCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MsIHUxYlRtcCk7CisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIENDS19UWEFHQywgQ2NrVHhQd3JJZHgpOworCQkJfQorCisJCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDKTsKKwkJCWlmKHUxYlRtcCA8IE9mZG1UeFB3cklkeCkKKwkJCXsKKwkJCS8vdTFiVG1wID0gKCh1MWJUbXArMTYpID4gMzUpID8gMzU6ICh1MWJUbXArMTYpOyAgLy8gOGRibQorCQkJLy93cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYlRtcCk7CisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIE9mZG1UeFB3cklkeCk7CisJCQl9CisJCX0KKwl9CisKKwkvL3ByaW50aygiPC0tLS0gRG9UeEhpZ2hQb3dlcigpXG4iKTsKK30KKworCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJQ2FsbGJhY2sgZnVuY3Rpb24gb2YgVXBkYXRlVHhQb3dlcldvcmtJdGVtLgorLy8JCUJlY2F1c2Ugb2Ygc29tZSBldmVudCBoYXBwZW5kLCBlLmcuIENDWCBUUEMsIEhpZ2ggUG93ZXIgTWVjaGFuaXNtLAorLy8JCVdlIHVwZGF0ZSBUeCBwb3dlciBvZiBjdXJyZW50IGNoYW5uZWwgYWdhaW4uCisvLworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKK3ZvaWQgcnRsODE4MF90eF9wd193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworLy8gICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsKKy8vICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKikKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCB3YXRjaF9kb2dfd3EpOworICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7CisgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLHR4X3B3X3dxKTsKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKKyNlbHNlCit2b2lkIHJ0bDgxODBfdHhfcHdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkvLyBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisjZW5kaWYKKworLy8JcHJpbnRrKCItLS0tPiBVcGRhdGVUeFBvd2VyV29ya0l0ZW1DYWxsYmFjaygpXG4iKTsKKworCURvVHhIaWdoUG93ZXIoZGV2KTsKKworLy8JcHJpbnRrKCI8LS0tLSBVcGRhdGVUeFBvd2VyV29ya0l0ZW1DYWxsYmFjaygpXG4iKTsKK30KKworCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJUmV0dXJuIFRSVUUgaWYgd2Ugc2hhbGwgcGVyZm9ybSBESUcgTWVjYWhuaXNtLCBGQUxTRSBvdGhlcndpc2UuCisvLworYm9vbAorQ2hlY2tEaWcoCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldgorCSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7CisKKwlpZighcHJpdi0+YkRpZ01lY2hhbmlzbSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYoaWVlZS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkKKwkJcmV0dXJuIGZhbHNlOworCisJLy9pZihwcml2LT5DdXJyZW50T3BlcmFSYXRlIDwgMzYpIC8vIFNjaGVkdWxlIERpZyB1bmRlciBhbGwgT0ZETSByYXRlcy4gQnkgQnJ1Y2UsIDIwMDctMDYtMDEuCisJaWYoKHByaXYtPmllZWU4MDIxMS0+cmF0ZS81KSA8IDM2KSAvLyBTY2hlZHVsZSBEaWcgdW5kZXIgYWxsIE9GRE0gcmF0ZXMuIEJ5IEJydWNlLCAyMDA3LTA2LTAxLgorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisvLworLy8JRGVzY3JpcHRpb246CisvLwkJSW1wbGVtZW50YXRpb24gb2YgRElHIGZvciBaZWJyYSBhbmQgWmVicmEyLgorLy8KK3ZvaWQKK0RJR19aZWJyYSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1MTYJCQlDQ0tGYWxzZUFsYXJtLCBPRkRNRmFsc2VBbGFybTsKKwl1MTYJCQlPZmRtRkExLCBPZmRtRkEyOworCWludAkJCUluaXRpYWxHYWluU3RlcCA9IDc7IC8vIFRoZSBudW1iZXIgb2YgaW5pdGlhbCBnYWluIHN0YWdlcy4KKwlpbnQJCQlMb3dlc3RHYWluU3RhZ2UgPSA0OyAvLyBUaGUgY2FwYWJsZSBsb3dlc3Qgc3RhZ2Ugb2YgcGVyZm9ybWluZyBkaWcgd29ya2l0ZW0uCisJdTMyIAkJCUF3YWtlUGVyaW9kSW4yU2VjPTA7CisKKwkvL3ByaW50aygiLS0tLS0tLS0tPiBESUdfWmVicmEoKVxuIik7CisKKwlDQ0tGYWxzZUFsYXJtID0gKHUxNikocHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlICYgMHgwMDAwZmZmZik7CisJT0ZETUZhbHNlQWxhcm0gPSAodTE2KSgocHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlID4+IDE2KSAmIDB4MDAwMGZmZmYpOworCU9mZG1GQTEgPSAgMHgxNTsKKwlPZmRtRkEyID0gKCh1MTYpKHByaXYtPlJlZ0RpZ09mZG1GYVVwVGgpKSA8PCA4OworCisvLwlwcmludGsoIkRJRyoqKioqKioqKipDQ0sgRmFsc2UgQWxhcm06ICUjWCBcbiIsQ0NLRmFsc2VBbGFybSk7CisvLwlwcmludGsoIkRJRyoqKioqKioqKipPRkRNIEZhbHNlIEFsYXJtOiAlI1ggXG4iLE9GRE1GYWxzZUFsYXJtKTsKKworICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGluaXRpYWwgZ2FpbiBzdGVwcyBpcyBkaWZmZXJlbnQsIGJ5IEJydWNlLCAyMDA3LTA0LTEzLgorCWlmIChwcml2LT5Jbml0aWFsR2FpbiA9PSAwICkgLy9hdXRvRElHCisJeyAvLyBBZHZpc2VkIGZyb20gU0QzIERaCisJCXByaXYtPkluaXRpYWxHYWluID0gNDsgLy8gSW4gODdCLCBtNzRkQm0gbWVhbnMgU3RhdGUgNCAobTgyZEJtKQorCX0KKwkvL2lmKHBIYWxEYXRhLT5WZXJzaW9uSUQgIT0gVkVSU0lPTl84MTg3Ql9CKQorCXsgLy8gQWR2aXNlZCBmcm9tIFNEMyBEWgorCQlPZmRtRkExID0gIDB4MjA7CisJfQorCisjaWYgMSAvL2x6bSByZXNlcnZlZCAwODA4MjYKKwlBd2FrZVBlcmlvZEluMlNlYyA9ICgyMDAwLXByaXYgLT5Eb3plUGVyaW9kSW5QYXN0MlNlYyk7CisJLy9wcmludGsoIiYmJiBEb3plUGVyaW9kPSVkIEF3YWtlUGVyaW9kPSVkXG4iLCBwcml2LT5Eb3plUGVyaW9kSW5QYXN0MlNlYywgQXdha2VQZXJpb2RJbjJTZWMpOworCXByaXYgLT5Eb3plUGVyaW9kSW5QYXN0MlNlYz0wOworCisJaWYoQXdha2VQZXJpb2RJbjJTZWMpCisJeworCQkvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfVFJBQ0UsICgiRElHOiBBd2FrZVBlcmlvZEluMlNlYyglZCkgLSBGQVRoKDB4JVggLCAweCVYKSAtPiIsQXdha2VQZXJpb2RJbjJTZWMsIE9mZG1GQTEsIE9mZG1GQTIpKTsKKwkJLy8gYWRqdWVzdCBESUcgdGhyZXNob2xkLgorCQlPZmRtRkExID0gICh1MTYpKChPZmRtRkExKkF3YWtlUGVyaW9kSW4yU2VjKSAgLyAyMDAwKSA7CisJCU9mZG1GQTIgPSAgKHUxNikoKE9mZG1GQTIqQXdha2VQZXJpb2RJbjJTZWMpICAvIDIwMDApIDsKKwkJLy9SVF9UUkFDRShDT01QX0RJRywgREJHX1RSQUNFLCAoIiggMHglWCAsIDB4JVgpXG4iLCBPZmRtRkExLCBPZmRtRkEyKSk7CisJfQorCWVsc2UKKwl7CisJCTsvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfV0FSTklORywgKCJFUlJPUiEhICBBd2FrZVBlcmlvZEluMlNlYyBzaG91bGQgbm90IGJlIFpFUk8hIVxuIikpOworCX0KKyNlbmRpZgorCisJSW5pdGlhbEdhaW5TdGVwID0gODsKKwlMb3dlc3RHYWluU3RhZ2UgPSBwcml2LT5SZWdCTW9kZUdhaW5TdGFnZTsgLy8gTG93ZXN0IGdhaW4gc3RhZ2UuCisKKwlpZiAoT0ZETUZhbHNlQWxhcm0gPiBPZmRtRkExKQorCXsKKwkJaWYgKE9GRE1GYWxzZUFsYXJtID4gT2ZkbUZBMikKKwkJeworCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSsrOworCQkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUgPjEpCisJCQl7CisJCQkJLy9zZXJpb3VzIE9GRE0gIEZhbHNlIEFsYXJtLCBuZWVkIGZhbGxiYWNrCisJCQkJaWYgKHByaXYtPkluaXRpYWxHYWluIDwgSW5pdGlhbEdhaW5TdGVwKQorCQkJCXsKKwkJCQkJcHJpdi0+SW5pdGlhbEdhaW5CYWNrVXA9IHByaXYtPkluaXRpYWxHYWluOworCisJCQkJCXByaXYtPkluaXRpYWxHYWluID0gKHByaXYtPkluaXRpYWxHYWluICsgMSk7CisvLwkJCQkJcHJpbnRrKCJESUcqKioqKioqKioqT0ZETSBGYWxzZSBBbGFybTogJSNYLCAgT2ZkbUZBMTogJSNYLCBPZmRtRkEyOiAlI1hcbiIsIE9GRE1GYWxzZUFsYXJtLCBPZmRtRkExLCBPZmRtRkEyKTsKKy8vCQkJCQlwcmludGsoIkRJRysrKysrKysgZmFsbGJhY2sgT0ZETTolZCBcbiIsIHByaXYtPkluaXRpYWxHYWluKTsKKwkJCQkJVXBkYXRlSW5pdGlhbEdhaW4oZGV2KTsKKwkJCQl9CisJCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA9IDA7CisJCQkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPTA7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSkKKwkJCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlLS07CisJCX0KKwkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPTA7CisJfQorCWVsc2UKKwl7CisJCWlmIChwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlKQorCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZS0tOworCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGUrKzsKKworCQlpZiAocHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPjkpCisJCXsKKwkJCWlmIChwcml2LT5Jbml0aWFsR2FpbiA+IExvd2VzdEdhaW5TdGFnZSkgLy8gSW4gODdCLCBtNzhkQm0gbWVhbnMgU3RhdGUgNCAobTg2NGRCbSkKKwkJCXsKKwkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47CisKKwkJCQlwcml2LT5Jbml0aWFsR2FpbiA9IChwcml2LT5Jbml0aWFsR2FpbiAtIDEpOworLy8JCQkJcHJpbnRrKCJESUcqKioqKioqKioqT0ZETSBGYWxzZSBBbGFybTogJSNYLCAgT2ZkbUZBMTogJSNYLCBPZmRtRkEyOiAlI1hcbiIsIE9GRE1GYWxzZUFsYXJtLCBPZmRtRkExLCBPZmRtRkEyKTsKKy8vCQkJCXByaW50aygiRElHLS0tLS0tLS0tIFVwZ3JhZGUgT0ZETTolZCBcbiIsIHByaXYtPkluaXRpYWxHYWluKTsKKwkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOworCQkJfQorCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA9IDA7CisJCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU9MDsKKwkJfQorCX0KKworLy8JcHJpbnRrKCJESUcrKysrKysrIE9GRE06JWRcbiIsIHByaXYtPkluaXRpYWxHYWluKTsKKwkvL3ByaW50aygiPC0tLS0tLS0tLSBESUdfWmVicmEoKVxuIik7Cit9CisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlEaXNwYXRjaCBESUcgaW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHRvIFJGLgorLy8KK3ZvaWQKK0R5bmFtaWNJbml0R2FpbigKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCXN3aXRjaChwcml2LT5yZl9jaGlwKQorCXsKKwkJY2FzZSBSRl9aRUJSQTI6ICAvLyBbQW5uaWVXb3JrYXJvdW5kXSBGb3IgWmVicmEyLCAyMDA1LTA4LTAxLgorCQljYXNlIFJGX1pFQlJBNDoKKwkJCURJR19aZWJyYSggZGV2ICk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJEeW5hbWljSW5pdEdhaW4oKTogdW5rbm93biBSRkNoaXBJRCglZCkgISEhXG4iLCBwcml2LT5yZl9jaGlwKTsKKwkJCWJyZWFrOworCX0KK30KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKK3ZvaWQgcnRsODE4MF9od19kaWdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKy8vICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHdhdGNoX2RvZ193cSk7CisvLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsKKyAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOworICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod19kaWdfd3EpOworICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OworI2Vsc2UKK3ZvaWQgcnRsODE4MF9od19kaWdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKworI2VuZGlmCisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJLy8gUmVhZCBDQ0sgYW5kIE9GRE0gRmFsc2UgQWxhcm0uCisJcHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBDQ0tfRkFMU0VfQUxBUk0pOworCisKKwkvLyBBZGp1c3QgSW5pdGlhbCBHYWluIGR5bmFtaWNhbGx5LgorCUR5bmFtaWNJbml0R2FpbihkZXYpOworCit9CisKK2ludAorSW5jbHVkZWRJblN1cHBvcnRlZFJhdGVzKAorICAgICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAgICAgICAqcHJpdiwKKyAgICAgICAgdTggICAgICAgICAgICAgIFR4UmF0ZSAgKQoreworICAgIHU4IHJhdGVfbGVuOworICAgICAgICB1OCByYXRlX2V4X2xlbjsKKyAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgUmF0ZU1hc2sgPSAweDdGOworICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBpZHg7CisgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIEZvdW5kID0gMDsKKyAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgTmFpdmVUeFJhdGUgPSBUeFJhdGUmUmF0ZU1hc2s7CisKKyAgICByYXRlX2xlbiA9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzX2xlbjsKKyAgICAgICAgcmF0ZV9leF9sZW4gPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5yYXRlc19leF9sZW47CisgICAgICAgIGZvciggaWR4PTA7IGlkeDwgcmF0ZV9sZW47IGlkeCsrICkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNbaWR4XSAmIFJhdGVNYXNrKSA9PSBOYWl2ZVR4UmF0ZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9yYXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGZvciggaWR4PTA7IGlkeDwgcmF0ZV9leF9sZW47IGlkeCsrICkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNfZXhbaWR4XSAmIFJhdGVNYXNrKSA9PSBOYWl2ZVR4UmF0ZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9yYXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRm91bmQ7CisgICAgICAgIGZvdW5kX3JhdGU6CisgICAgICAgIHJldHVybiBGb3VuZDsKK30KKworLy8KKy8vICAgICAgRGVzY3JpcHRpb246CisvLyAgICAgICAgICAgICAgR2V0IHRoZSBUeCByYXRlIG9uZSBkZWdyZWUgdXAgZm9ybSB0aGUgaW5wdXQgcmF0ZSBpbiB0aGUgc3VwcG9ydGVkIHJhdGVzLgorLy8gICAgICAgICAgICAgIFJldHVybiB0aGUgdXBncmFkZSByYXRlIGlmIGl0IGlzIHN1Y2Nlc3NlZCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgaW5wdXQgcmF0ZS4KKy8vICAgICAgQnkgQnJ1Y2UsIDIwMDctMDYtMDUuCisvLwordTgKK0dldFVwZ3JhZGVUeFJhdGUoCisgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZQorICAgICAgICApCit7CisgICAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKyAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgVXBSYXRlOworCisgICAgICAgIC8vIFVwZ3JhZGUgMSBkZWdyZWUuCisgICAgICAgIHN3aXRjaChyYXRlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMTA4OiAvLyBVcCB0byA1NE1icHMuCisgICAgICAgICAgICAgICAgVXBSYXRlID0gMTA4OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgOTY6IC8vIFVwIHRvIDU0TWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSAxMDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA3MjogLy8gVXAgdG8gNDhNYnBzLgorICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDk2OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDg6IC8vIFVwIHRvIDM2TWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSA3MjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM2OiAvLyBVcCB0byAyNE1icHMuCisgICAgICAgICAgICAgICAgVXBSYXRlID0gNDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyMjogLy8gVXAgdG8gMThNYnBzLgorICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDM2OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTE6IC8vIFVwIHRvIDExTWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSAyMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ6IC8vIFVwIHRvIDUuNU1icHMuCisgICAgICAgICAgICAgICAgVXBSYXRlID0gMTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOiAvLyBVcCB0byAyTWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSA0OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcHJpbnRrKCJHZXRVcGdyYWRlVHhSYXRlKCk6IElucHV0IFR4IFJhdGUoJWQpIGlzIHVuZGVmaW5lZCFcbiIsIHJhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiByYXRlOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSByYXRlIGlzIHZhbGlkLgorICAgICAgICBpZihJbmNsdWRlZEluU3VwcG9ydGVkUmF0ZXMocHJpdiwgVXBSYXRlKSkKKyAgICAgICAgeworLy8gICAgICAgICAgICAgIHByaW50aygiR2V0VXBncmFkZVR4UmF0ZSgpOiBHZXRVcGdyYWRlIFR4IHJhdGUoJWQpIGZyb20gJWQgIVxuIiwgVXBSYXRlLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVXBSYXRlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJHZXRVcGdyYWRlVHhSYXRlKCk6IFR4IHJhdGUgKCVkKSBpcyBub3QgaW4gc3VwcG9ydGVkIHJhdGVzXG4iLCBVcFJhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiByYXRlOworICAgICAgICB9CisgICAgICAgIHJldHVybiByYXRlOworfQorLy8KKy8vICAgICAgRGVzY3JpcHRpb246CisvLyAgICAgICAgICAgICAgR2V0IHRoZSBUeCByYXRlIG9uZSBkZWdyZWUgZG93biBmb3JtIHRoZSBpbnB1dCByYXRlIGluIHRoZSBzdXBwb3J0ZWQgcmF0ZXMuCisvLyAgICAgICAgICAgICAgUmV0dXJuIHRoZSBkZWdyYWRlIHJhdGUgaWYgaXQgaXMgc3VjY2Vzc2VkLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBpbnB1dCByYXRlLgorLy8gICAgICBCeSBCcnVjZSwgMjAwNy0wNi0wNS4KKy8vCit1OAorR2V0RGVncmFkZVR4UmF0ZSgKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgdTggICAgICAgICByYXRlCisgICAgICAgICkKK3sKKyAgICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBEb3duUmF0ZTsKKworICAgICAgICAvLyBVcGdyYWRlIDEgZGVncmVlLgorICAgICAgICBzd2l0Y2gocmF0ZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDEwODogLy8gRG93biB0byA0OE1icHMuCisgICAgICAgICAgICAgICAgRG93blJhdGUgPSA5NjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDk2OiAvLyBEb3duIHRvIDM2TWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDcyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNzI6IC8vIERvd24gdG8gMjRNYnBzLgorICAgICAgICAgICAgICAgIERvd25SYXRlID0gNDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA0ODogLy8gRG93biB0byAxOE1icHMuCisgICAgICAgICAgICAgICAgRG93blJhdGUgPSAzNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM2OiAvLyBEb3duIHRvIDExTWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDIyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjI6IC8vIERvd24gdG8gNS41TWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDExOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTE6IC8vIERvd24gdG8gMk1icHMuCisgICAgICAgICAgICAgICAgRG93blJhdGUgPSA0OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDogLy8gRG93biB0byAxTWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOiAvLyBEb3duIHRvIDFNYnBzLgorICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHByaW50aygiR2V0RGVncmFkZVR4UmF0ZSgpOiBJbnB1dCBUeCBSYXRlKCVkKSBpcyB1bmRlZmluZWQhXG4iLCByYXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmF0ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmF0ZSBpcyB2YWxpZC4KKyAgICAgICAgaWYoSW5jbHVkZWRJblN1cHBvcnRlZFJhdGVzKHByaXYsIERvd25SYXRlKSkKKyAgICAgICAgeworLy8gICAgICAgICAgICAgIHByaW50aygiR2V0RGVncmFkZVR4UmF0ZSgpOiBHZXREZWdyYWRlIFR4IHJhdGUoJWQpIGZyb20gJWQhXG4iLCBEb3duUmF0ZSwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIERvd25SYXRlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJHZXREZWdyYWRlVHhSYXRlKCk6IFR4IHJhdGUgKCVkKSBpcyBub3QgaW4gc3VwcG9ydGVkIHJhdGVzXG4iLCBEb3duUmF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhdGU7Cit9CisvLworLy8gICAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBkYXRhIHJhdGUgaXMKKy8vICAgICAgQ0NLIHJhdGUuCisvLyAgICAgIDIwMDUuMDEuMjUsIGJ5IHJjbmprby4KKy8vCitib29sCitNZ250SXNDY2tSYXRlKAorICAgICAgICB1MTYgICAgIHJhdGUKKyAgICAgICAgKQoreworICAgICAgICBib29sIGJSZXR1cm4gPSBmYWxzZTsKKworICAgICAgICBpZigocmF0ZSA8PSAyMikgJiYgKHJhdGUgIT0gMTIpICYmIChyYXRlICE9IDE4KSkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGJSZXR1cm4gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJSZXR1cm47Cit9CisjaWZkZWYgQ09ORklHX1JUTDgxOFhfUworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVR4IFBvd2VyIHRyYWNraW5nIG1lY2hhbmlzbSByb3V0aW5lIG9uIDg3U0UuCisvLyAJQ3JlYXRlZCBieSBSb2dlciwgMjAwNy4xMi4xMS4KKy8vCit2b2lkCitUeFB3clRyYWNraW5nODdTRSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CispCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCXU4CXRtcHUxQnl0ZSwgQ3VycmVudFRoZXJtYWwsIElkeDsKKwljaGFyCUNja1R4UHdySWR4LCBPZmRtVHhQd3JJZHg7CisJLy91MzIJdTRiUmZSZWc7CisKKwl0bXB1MUJ5dGUgPSByZWFkX25pY19ieXRlKGRldiwgRU5fTFBGX0NBTCk7CisJQ3VycmVudFRoZXJtYWwgPSAodG1wdTFCeXRlICYgMHhmMCk+PjQ7IC8vWyA3OjRdOiB0aGVybWFsIG1ldGVyIGluZGljYXRpb24uCisJQ3VycmVudFRoZXJtYWwgPSAoQ3VycmVudFRoZXJtYWw+MHgwYyk/IDB4MGM6Q3VycmVudFRoZXJtYWw7Ly9sem0gYWRkIDA4MDgyNgorCisJLy9wcmludGsoIlR4UHdyVHJhY2tpbmc4N1NFKCk6IEN1cnJlbnRUaGVybWFsKCVkKVxuIiwgQ3VycmVudFRoZXJtYWwpOworCisJaWYoIEN1cnJlbnRUaGVybWFsICE9IHByaXYtPlRoZXJtYWxNZXRlcikKKwl7CisvLwkJcHJpbnRrKCJUeFB3clRyYWNraW5nODdTRSgpOiBUaGVybWFsIG1ldGVyIGNoYW5nZWQhISFcbiIpOworCisJCS8vIFVwZGF0ZSBUeCBQb3dlciBsZXZlbCBvbiBlYWNoIGNoYW5uZWwuCisJCWZvcihJZHggPSAxOyBJZHg8MTU7IElkeCsrKQorCQl7CisJCQlDY2tUeFB3cklkeCA9IHByaXYtPmNodHhwd3JbSWR4XTsKKwkJCU9mZG1UeFB3cklkeCA9IHByaXYtPmNodHhwd3Jfb2ZkbVtJZHhdOworCisJCQlpZiggQ3VycmVudFRoZXJtYWwgPiBwcml2LT5UaGVybWFsTWV0ZXIgKQorCQkJeyAvLyBoaWdoZXIgdGhlcm1hbCBtZXRlci4KKwkJCQlDY2tUeFB3cklkeCArPSAoQ3VycmVudFRoZXJtYWwgLSBwcml2LT5UaGVybWFsTWV0ZXIpKjI7CisJCQkJT2ZkbVR4UHdySWR4ICs9IChDdXJyZW50VGhlcm1hbCAtIHByaXYtPlRoZXJtYWxNZXRlcikqMjsKKworCQkJCWlmKENja1R4UHdySWR4ID4zNSkKKwkJCQkJQ2NrVHhQd3JJZHggPSAzNTsgLy8gRm9yY2UgVHhQb3dlciB0byBtYXhpbWFsIGluZGV4LgorCQkJCWlmKE9mZG1UeFB3cklkeCA+MzUpCisJCQkJCU9mZG1UeFB3cklkeCA9IDM1OworCQkJfQorCQkJZWxzZQorCQkJeyAvLyBsb3dlciB0aGVybWFsIG1ldGVyLgorCQkJCUNja1R4UHdySWR4IC09IChwcml2LT5UaGVybWFsTWV0ZXIgLSBDdXJyZW50VGhlcm1hbCkqMjsKKwkJCQlPZmRtVHhQd3JJZHggLT0gKHByaXYtPlRoZXJtYWxNZXRlciAtIEN1cnJlbnRUaGVybWFsKSoyOworCisJCQkJaWYoQ2NrVHhQd3JJZHggPDApCisJCQkJCUNja1R4UHdySWR4ID0gMDsKKwkJCQlpZihPZmRtVHhQd3JJZHggPDApCisJCQkJCU9mZG1UeFB3cklkeCA9IDA7CisJCQl9CisKKwkJCS8vIFVwZGF0ZSBUeFBvd2VyIGxldmVsIG9uIENDSyBhbmQgT0ZETSByZXNwLgorCQkJcHJpdi0+Y2h0eHB3cltJZHhdID0gQ2NrVHhQd3JJZHg7CisJCQlwcml2LT5jaHR4cHdyX29mZG1bSWR4XSA9IE9mZG1UeFB3cklkeDsKKwkJfQorCisJCS8vIFVwZGF0ZSBUeFBvd2VyIGxldmVsIGltbWVkaWF0ZWx5LgorCQlydGw4MjI1ejJfU2V0VFhQb3dlckxldmVsKGRldiwgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCk7CisJfQorCXByaXYtPlRoZXJtYWxNZXRlciA9IEN1cnJlbnRUaGVybWFsOworfQordm9pZAorU3RhUmF0ZUFkYXB0aXZlODdTRSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIAkJCUN1cnJUeG9rQ250OworCXUxNgkJCUN1cnJSZXRyeUNudDsKKwl1MTYJCQlDdXJyUmV0cnlSYXRlOworCS8vdTE2CQkJaSxpZHg7CisJdW5zaWduZWQgbG9uZyAgICAgICAJQ3VyclJ4b2tDbnQ7CisJYm9vbAkJCWJUcnlVcCA9IGZhbHNlOworCWJvb2wJCQliVHJ5RG93biA9IGZhbHNlOworCXU4CQkJVHJ5VXBUaCA9IDE7CisJdTgJCQlUcnlEb3duVGggPSAyOworCXUzMgkJCVR4VGhyb3VnaHB1dDsKKwlsb25nCQlDdXJyU2lnbmFsU3RyZW5ndGg7CisJYm9vbAkJYlVwZGF0ZUluaXRpYWxHYWluID0gZmFsc2U7CisgICAgCXU4CQkJdTFiT2ZkbT0wLCB1MWJDY2sgPSAwOworCWNoYXIJCU9mZG1UeFB3cklkeCwgQ2NrVHhQd3JJZHg7CisKKwlwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2Q9IFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9EOworCisKKwlDdXJyUmV0cnlDbnQJPSBwcml2LT5DdXJyUmV0cnlDbnQ7CisJQ3VyclR4b2tDbnQJPSBwcml2LT5OdW1UeE9rVG90YWwgLSBwcml2LT5MYXN0VHhva0NudDsKKwlDdXJyUnhva0NudAk9IHByaXYtPmllZWU4MDIxMS0+TnVtUnhPa1RvdGFsIC0gcHJpdi0+TGFzdFJ4b2tDbnQ7CisJQ3VyclNpZ25hbFN0cmVuZ3RoID0gcHJpdi0+U3RhdHNfUmVjdlNpZ25hbFBvd2VyOworCVR4VGhyb3VnaHB1dCA9ICh1MzIpKHByaXYtPk51bVR4T2tCeXRlc1RvdGFsIC0gcHJpdi0+TGFzdFR4T0tCeXRlcyk7CisJcHJpdi0+TGFzdFR4T0tCeXRlcyA9IHByaXYtPk51bVR4T2tCeXRlc1RvdGFsOworCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSBwcml2LT5pZWVlODAyMTEtPnJhdGUvNTsKKwkvL3ByaW50aygicHJpdi0+Q3VycmVudE9wZXJhUmF0ZSBpcyAlZFxuIixwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKwkvLzIgQ29tcHV0ZSByZXRyeSByYXRpby4KKwlpZiAoQ3VyclR4b2tDbnQ+MCkKKwl7CisJCUN1cnJSZXRyeVJhdGUgPSAodTE2KShDdXJyUmV0cnlDbnQqMTAwL0N1cnJUeG9rQ250KTsKKwl9CisJZWxzZQorCXsgLy8gSXQgbWF5IGJlIHNlcmlvdXMgcmV0cnkuIFRvIGRpc3Rpbmd1aXNoIHNlcmlvdXMgcmV0cnkgb3Igbm8gcGFja2V0cyBtb2RpZmllZCBieSBCcnVjZQorCQlDdXJyUmV0cnlSYXRlID0gKHUxNikoQ3VyclJldHJ5Q250KjEwMC8xKTsKKwl9CisKKworCS8vCisJLy8gQWRkZWQgYnkgUm9nZXIsIDIwMDcuMDEuMDIuCisJLy8gRm9yIGRlYnVnIGluZm9ybWF0aW9uLgorCS8vCisJLy9wcmludGsoIlxuKDEpIHBIYWxEYXRhLT5MYXN0UmV0cnlSYXRlOiAlZCBcbiIscHJpdi0+TGFzdFJldHJ5UmF0ZSk7CisJLy9wcmludGsoIigyKSBSZXRyeUNudCA9ICVkICBcbiIsIEN1cnJSZXRyeUNudCk7CisJLy9wcmludGsoIigzKSBUeG9rQ250ID0gJWQgXG4iLCBDdXJyVHhva0NudCk7CisJLy9wcmludGsoIig0KSBDdXJyUmV0cnlSYXRlID0gJWQgXG4iLCBDdXJyUmV0cnlSYXRlKTsKKwkvL3ByaW50aygiKDUpIEN1cnJTaWduYWxTdHJlbmd0aCA9ICVkIFxuIixDdXJyU2lnbmFsU3RyZW5ndGgpOworCS8vcHJpbnRrKCIoNikgVHhUaHJvdWdocHV0IGlzICVkXG4iLFR4VGhyb3VnaHB1dCk7CisJLy9wcmludGsoInByaXYtPk51bVR4T2tCeXRlc1RvdGFsIGlzICVkXG4iLHByaXYtPk51bVR4T2tCeXRlc1RvdGFsKTsKKworCXByaXYtPkxhc3RSZXRyeUNudCA9IHByaXYtPkN1cnJSZXRyeUNudDsKKwlwcml2LT5MYXN0VHhva0NudCA9IHByaXYtPk51bVR4T2tUb3RhbDsKKwlwcml2LT5MYXN0Unhva0NudCA9IHByaXYtPmllZWU4MDIxMS0+TnVtUnhPa1RvdGFsOworCXByaXYtPkN1cnJSZXRyeUNudCA9IDA7CisKKwkvLzJObyBUeCBwYWNrZXRzLCByZXR1cm4gdG8gaW5pdF9yYXRlIG9yIG5vdD8KKwlpZiAoQ3VyclJldHJ5UmF0ZT09MCAmJiBDdXJyVHhva0NudCA9PSAwKQorCXsKKwkJLy8KKwkJLy9BZnRlciA5ICgzMCozMDBtcykgc2Vjb25kcyBpbiB0aGlzIGNvbmRpdGlvbiwgd2UgdHJ5IHRvIHJhaXNlIHJhdGUuCisJCS8vCisJCXByaXYtPlRyeXVwaW5nQ291bnROb0RhdGErKzsKKworLy8JCXByaW50aygiTm8gVHggcGFja2V0cywgVHJ5dXBpbmdDb3VudE5vRGF0YSglZClcbiIsIHByaXYtPlRyeXVwaW5nQ291bnROb0RhdGEpOworCQkvL1tUUkMgRGVsbCBMYWJdIEV4dGVuZCByYWlzZWQgcGVyaW9kIGZyb20gNC41c2VjIHRvIDlzZWMsIElzYWlhaCAyMDA4LTAyLTE1IDE4OjAwCisJCWlmIChwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhPjMwKQorCQl7CisJCQlwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhID0gMDsKKwkJIAlwcml2LT5DdXJyZW50T3BlcmFSYXRlID0gR2V0VXBncmFkZVR4UmF0ZShkZXYsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCQkJLy8gUmVzZXQgRmFpbCBSZWNvcmQKKwkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gMDsKKwkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSAtMjAwOworCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMDsKKwkJfQorCQlnb3RvIFNldEluaXRpYWxHYWluOworCX0KKyAgICAgICAgZWxzZQorCXsKKwkJcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YT0wOyAvL1Jlc2V0IHRyeWluZyB1cCB0aW1lcy4KKwl9CisKKworCS8vCisJLy8gRm9yIE5ldGdlYXIgY2FzZSwgSSBjb21tZW50IG91dCB0aGUgZm9sbG93aW5nIHNpZ25hbCBzdHJlbmd0aCBlc3RpbWF0aW9uLAorCS8vIHdoaWNoIGNhbiByZXN1bHRzIGluIGxvd2VyIHJhdGUgdG8gdHJhbnNtaXQgd2hlbiBzYW1wbGUgaXMgTk9UIGVub3VnaCAoZS5nLiBQSU5HIHJlcXVlc3QpLgorCS8vIDIwMDcuMDQuMDksIGJ5IFJvZ2VyLgorCS8vCisKKwkvLworCS8vIFJlc3RydWN0dXJlIHJhdGUgYWRhcHRpdmUgYXMgdGhlIGZvbGxvd2luZyBtYWluIHN0YWdlczoKKwkvLyAoMSkgQWRkIHJldHJ5IHRocmVzaG9sZCBpbiA1NE0gdXBncmFkaW5nIGNvbmRpdGlvbiB3aXRoIHNpZ25hbCBzdHJlbmd0aC4KKwkvLyAoMikgQWRkIHRoZSBtZWNoYW5pc20gdG8gZGVncmFkZSB0byBDQ0sgcmF0ZSBhY2NvcmRpbmcgdG8gc2lnbmFsIHN0cmVuZ3RoCisJLy8JCWFuZCByZXRyeSByYXRlLgorCS8vICgzKSBSZW1vdmUgYWxsIEluaXRpYWwgR2FpbiBVcGRhdGVzIG92ZXIgT0ZETSByYXRlLiBUbyBhdm9pZCB0aGUgY29tcGxpY2F0ZWQKKwkvLwkJc2l0dWF0aW9uLCBJbml0aWFsIEdhaW4gVXBkYXRlIGlzIHVwb24gb24gRElHIG1lY2hhbmlzbSBleGNlcHQgQ0NLIHJhdGUuCisJLy8gKDQpIEFkZCB0aGUgbWVoYW5pc20gb2YgdHJ5aW5nIHRvIHVwZ3JhZGUgdHggcmF0ZS4KKwkvLyAoNSkgUmVjb3JkIHRoZSBpbmZvcm1hdGlvbiBvZiB1cHBpbmcgdHggcmF0ZSB0byBhdm9pZCB0cnlpbmcgdXBwaW5nIHR4IHJhdGUgY29uc3RhbnRseS4KKwkvLyBCeSBCcnVjZSwgMjAwNy0wNi0wNS4KKwkvLworCS8vCisKKwkvLyAxMU1icHMgb3IgMzZNYnBzCisJLy8gQ2hlY2sgbW9yZSB0aW1lcyBpbiB0aGVzZSByYXRlKGtleSByYXRlcykuCisJLy8KKwlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyIHx8IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNzIpCisJeworCQlUcnlVcFRoICs9IDk7CisJfQorCS8vCisJLy8gTGV0IHRoZXNlIHJhdGVzIGRvd24gbW9yZSBkaWZmaWN1bHQuCisJLy8KKwlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpIHx8IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMzYpCisJeworCQkJVHJ5RG93blRoICs9IDE7CisJfQorCisJLy8xIEFkanVzdCBSYXRlLgorCWlmIChwcml2LT5iVHJ5dXBpbmcgPT0gdHJ1ZSkKKwl7CisJCS8vMiBGb3IgVGVzdCBVcGdyYWRpbmcgbWVjaGFuaXNtCisJCS8vIE5vdGU6CisJCS8vIAlTb21ldGltZXMgdGhlIHRocm91Z2hwdXQgaXMgdXBvbiBvbiB0aGUgY2FwYWJpbGl0eSBid3R3ZWVuIHRoZSBBUCBhbmQgTklDLAorCQkvLyAJdGh1cyB0aGUgbG93IGRhdGEgcmF0ZSBkb2VzIG5vdCBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZS4KKwkJLy8gCVdlIHJhbmRvbWx5IHVwZ3JhZGUgdGhlIGRhdGEgcmF0ZSBhbmQgY2hlY2sgaWYgdGhlIHJldHJ5IHJhdGUgaXMgaW1wcm92ZWQuCisKKwkJLy8gVXBncmFkaW5nIHJhdGUgZGlkIG5vdCBpbXByb3ZlIHRoZSByZXRyeSByYXRlLCBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgcmF0ZS4KKwkJaWYgKCAoQ3VyclJldHJ5UmF0ZSA+IDI1KSAmJiBUeFRocm91Z2hwdXQgPCBwcml2LT5MYXN0VHhUaHJvdWdocHV0KQorCQl7CisJCQkvL05vdCBuZWNlc3NhcnkgcmFpc2luZyByYXRlLCBmYWxsIGJhY2sgcmF0ZS4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJCS8vcHJpbnRrKCJjYXNlMS0xOiBOb3QgbmVjZXNzYXJ5IHJhaXNpbmcgcmF0ZSwgZmFsbCBiYWNrIHJhdGUuLi4uXG4iKTsKKwkJCS8vcHJpbnRrKCJjYXNlMS0xOiBwTWdudEluZm8tPkN1cnJlbnRPcGVyYVJhdGUgPSVkLCBUeFRocm91Z2hwdXQgPSAlZCwgTGFzdFRocm91Z2hwdXQgPSAlZFxuIiwKKwkJCS8vCQlwcml2LT5DdXJyZW50T3BlcmFSYXRlLCBUeFRocm91Z2hwdXQsIHByaXYtPkxhc3RUeFRocm91Z2hwdXQpOworCQl9CisJCWVsc2UKKwkJeworCQkJcHJpdi0+YlRyeXVwaW5nID0gZmFsc2U7CisJCX0KKwl9CisJZWxzZSBpZiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTQ3ICYmIChDdXJyUmV0cnlSYXRlIDwgNTApKQorCXsKKwkJLy8yRm9yIEhpZ2ggUG93ZXIKKwkJLy8KKwkJLy8gQWRkZWQgYnkgUm9nZXIsIDIwMDcuMDQuMDkuCisJCS8vIFJldHVybiB0byBoaWdoZXN0IGRhdGEgcmF0ZSwgaWYgc2lnbmFsIHN0cmVuZ3RoIGlzIGdvb2QgZW5vdWdoLgorCQkvLyBTaWduYWxTdHJlbmd0aCB0aHJlc2hvbGQoLTUwZGJtKSBpcyBmb3IgUlRMODE4Ni4KKwkJLy8gUmV2aXNlIFNpZ25hbFN0cmVuZ3RoIHRocmVzaG9sZCB0byAtNTFkYm0uCisJCS8vCisJCS8vIEFsc28gbmVlZCB0byBjaGVjayByZXRyeSByYXRlIGZvciBzYWZldHksIGJ5IEJydWNlLCAyMDA3LTA2LTA1LgorCQlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlICE9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLkhpZ2hlc3RPcGVyYVJhdGUgKQorCQl7CisJCQliVHJ5VXAgPSB0cnVlOworCQkJLy8gVXBncmFkZSBUeCBSYXRlIGRpcmVjdGx5LgorCQkJcHJpdi0+VHJ5dXBpbmdDb3VudCArPSBUcnlVcFRoOworCQl9CisvLwkJcHJpbnRrKCJjYXNlMjogU3RhUmF0ZUFkYXB0aXZlODdTRTogUG93ZXIoJWQpIGlzIGhpZ2ggZW5vdWdoISEuIFxuIiwgQ3VyclNpZ25hbFN0cmVuZ3RoKTsKKworCX0KKwllbHNlIGlmKEN1cnJUeG9rQ250ID4gOSAmJiBDdXJyVHhva0NudDwgMTAwICYmIEN1cnJSZXRyeVJhdGUgPj0gNjAwKQorCXsKKwkJLy8yIEZvciBTZXJpb3VzIFJldHJ5CisJCS8vCisJCS8vIFRyYWZmaWMgaXMgbm90IGJ1c3kgYnV0IG91ciBUeCByZXRyeSBpcyBzZXJpb3VzLgorCQkvLworCQliVHJ5RG93biA9IHRydWU7CisJCS8vIExldCBSYXRlIE1lY2hhbmlzbSB0byBkZWdyYWRlIHR4IHJhdGUgZGlyZWN0bHkuCisJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworLy8JCXByaW50aygiY2FzZTM6IFJBOiBUeCBSZXRyeSBpcyBzZXJpb3VzLiBEZWdyYWRlIFR4IFJhdGUgdG8gJWQgZGlyZWN0bHkuLi5cbiIsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAxMDggKQorCXsKKwkJLy8yRm9yIDU0TWJwcworCQkvLyBBaXIgTGluaworCQlpZiAoIChDdXJyUmV0cnlSYXRlPjI2KSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MjUpKQorLy8JCWlmICggKEN1cnJSZXRyeVJhdGU+NDApJiYocHJpdi0+TGFzdFJldHJ5UmF0ZT4zOSkpCisJCXsKKwkJCS8vRG93biB0byByYXRlIDQ4TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQkvLyBDYWJsZSBMaW5rCisJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZT4xNykmJihwcml2LT5MYXN0UmV0cnlSYXRlPjE2KSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTcyKSkKKy8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU+MTcpJiYocHJpdi0+TGFzdFJldHJ5UmF0ZT4xNikgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC03MikpCisJCXsKKwkJCS8vRG93biB0byByYXRlIDQ4TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCisJCWlmKGJUcnlEb3duICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPCAtNzUpKSAvL2NhYmxlIGxpbmsKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJLy9wcmludGsoImNhc2U0LS0tNTRNIFxuIik7CisKKwl9CisJZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gOTYgKQorCXsKKwkJLy8yRm9yIDQ4TWJwcworCQkvL0FpciBMaW5rCisJCWlmICggKChDdXJyUmV0cnlSYXRlPjQ4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT40NykpKQorLy8JCWlmICggKChDdXJyUmV0cnlSYXRlPjY1KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT42NCkpKQorCisJCXsKKwkJCS8vRG93biB0byByYXRlIDM2TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQkvL0NhYmxlIExpbmsKKwkJZWxzZSBpZiAoICgoQ3VyclJldHJ5UmF0ZT4yMSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MjApKSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTc0KSkKKwkJeworCQkJLy9Eb3duIHRvIHJhdGUgMzZNYnBzLgorCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKy8vCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA3MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworCQl9CisJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw4KSApIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDI4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw4KSApCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKworCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTc1KSkKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJLy9wcmludGsoImNhc2U1LS0tNDhNIFxuIik7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDcyICkKKwl7CisJCS8vMkZvciAzNk1icHMKKwkJaWYgKCAoQ3VyclJldHJ5UmF0ZT40MykgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NDEpKQorLy8JCWlmICggKEN1cnJSZXRyeVJhdGU+NjApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjU5KSkKKwkJeworCQkJLy9Eb3duIHRvIHJhdGUgMjRNYnBzLgorCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKy8vCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA3MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworCQl9CisJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwxNSkgJiYgIChwcml2LT5MYXN0UmV0cnlSYXRlPDE2KSkgLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkKKy8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MzUpICYmICAocHJpdi0+TGFzdFJldHJ5UmF0ZTwzNikpCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKworCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTgwKSkKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJLy9wcmludGsoImNhc2U2LS0tMzZNIFxuIik7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDQ4ICkKKwl7CisJCS8vMkZvciAyNE1icHMKKwkJLy8gQWlyIExpbmsKKwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+NjMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjYyKSkpCisvLwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+ODMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjgyKSkpCisJCXsKKwkJCS8vRG93biB0byByYXRlIDE4TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQkvL0NhYmxlIExpbmsKKwkJZWxzZSBpZiAoICgoQ3VyclJldHJ5UmF0ZT4zMykgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MzIpKSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTgyKSApCisvLwkJIGVsc2UgaWYgKCAoKEN1cnJSZXRyeVJhdGU+NTApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjQ5KSkgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC04MikgKQorCQl7CisJCQkvL0Rvd24gdG8gcmF0ZSAxOE1icHMuCisJCQliVHJ5RG93biA9IHRydWU7CisJCX0KKwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNTAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQorLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKworCQl7CisJCQliVHJ5RG93biA9IHRydWU7CisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsKKwkJfQorICAJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwyMCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8MjEpKSAvL1RPIERPOiBuZWVkIHRvIGNvbnNpZGVyIChSU1NJKQorLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw0MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8NDEpKQorCQl7CisJCQliVHJ5VXAgPSB0cnVlOworCQl9CisKKwkJaWYoYlRyeURvd24gJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04MikpCisJCXsKKwkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworCQl9CisJCS8vcHJpbnRrKCJjYXNlNy0tLTI0TSBcbiIpOworCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAzNiApCisJeworCQkvLzJGb3IgMThNYnBzCisJCS8vIG9yaWdpbmFsICgxMDksIDEwOSkKKwkJLy9bVFJDIERlbGwgTGFiXSAoOTAsIDkxKSwgSXNhaWFoIDIwMDgtMDItMTggMjM6MjQKKwkJLy8JCQkgICAgICg4NSwgODYpLCBJc2FpYWggMjAwOC0wMi0xOCAyNDowMAorCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT44NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+ODYpKSkKKy8vCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT4xMTUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjExNikpKQorCQl7CisJCQkvL0Rvd24gdG8gcmF0ZSAxMU1icHMuCisJCQliVHJ5RG93biA9IHRydWU7CisJCX0KKwkJLy9bVFJDIERlbGwgTGFiXSAgSXNhaWFoIDIwMDgtMDItMTggMjM6MjQKKwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNTAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQorLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKwkJeworCQkJYlRyeURvd24gPSB0cnVlOworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDIyKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTwyMykpIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDQyKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw0MykpCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKwkJLy9wcmludGsoImNhc2U4LS0tMThNIFxuIik7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIyICkKKwl7CisJCS8vMkZvciAxMU1icHMKKwkJaWYgKEN1cnJSZXRyeVJhdGU+OTUpCisvLwkJaWYgKEN1cnJSZXRyeVJhdGU+MTU1KQorCQl7CisJCQliVHJ5RG93biA9IHRydWU7CisJCX0KKwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDI5KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZSA8MzApICkvL1RPIERPOiBuZWVkIHRvIGNvbnNpZGVyIChSU1NJKQorLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw0OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPDUwKSApCisJCQl7CisJCQliVHJ5VXAgPSB0cnVlOworCQkJfQorCQkvL3ByaW50aygiY2FzZTktLS0xMU0gXG4iKTsKKwkJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDExICkKKwl7CisJCS8vMkZvciA1LjVNYnBzCisJCWlmIChDdXJyUmV0cnlSYXRlPjE0OSkKKy8vCQlpZiAoQ3VyclJldHJ5UmF0ZT4xODkpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8NjApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgNjUpKQorLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw4MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA4NSkpCisKKwkJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCQl9CisJCS8vcHJpbnRrKCJjYXNlMTAtLS01LjVNIFxuIik7CisJCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA0ICkKKwl7CisJCS8vMkZvciAyIE1icHMKKwkJaWYoKEN1cnJSZXRyeVJhdGU+OTkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjk5KSkKKy8vCQlpZigoQ3VyclJldHJ5UmF0ZT4xOTkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjE5OSkpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGUgPCA2NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA3MCkpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlIDwgODUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwgOTApKQorCQl7CisJCQliVHJ5VXAgPSB0cnVlOworCQl9CisJCS8vcHJpbnRrKCJjYXNlMTEtLS0yTSBcbiIpOworCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAyICkKKwl7CisJCS8vMkZvciAxIE1icHMKKwkJaWYoIChDdXJyUmV0cnlSYXRlPDcwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw3NSkpCisvLwkJaWYoIChDdXJyUmV0cnlSYXRlPDkwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw5NSkpCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKwkJLy9wcmludGsoImNhc2UxMi0tLTFNIFxuIik7CisJfQorCisJaWYoYlRyeVVwICYmIGJUcnlEb3duKQorICAgIAlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3QigpOiBUeCBSYXRlIHRyaWVkIHVwcGluZyBhbmQgZG93bmluZyBzaW11bHRhbmVvdXNseSFcbiIpOworCisJLy8xIFRlc3QgVXBncmFkaW5nIFR4IFJhdGUKKwkvLyBTb21ldGltZXMgdGhlIGNhdXNlIG9mIHRoZSBsb3cgdGhyb3VnaHB1dCAoaGlnaCByZXRyeSByYXRlKSBpcyB0aGUgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBBUCBhbmQgTklDLgorCS8vIFRvIHRlc3QgaWYgdGhlIHVwcGVyIHJhdGUgbWF5IGNhdXNlIGxvd2VyIHJldHJ5IHJhdGUsIHRoaXMgbWVjaGFuaXNtIHJhbmRvbWx5IG9jY3VycyB0byB0ZXN0IHVwZ3JhZGluZyB0eCByYXRlLgorCWlmKCFiVHJ5VXAgJiYgIWJUcnlEb3duICYmIChwcml2LT5Ucnl1cGluZ0NvdW50ID09IDApICYmIChwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID09IDApCisJCSYmIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgIT0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuSGlnaGVzdE9wZXJhUmF0ZSAmJiBwcml2LT5GYWlsVHhSYXRlQ291bnQgPCAyKQorCXsKKwkJaWYoamlmZmllcyUgKEN1cnJSZXRyeVJhdGUgKyAxMDEpID09IDApCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCQlwcml2LT5iVHJ5dXBpbmcgPSB0cnVlOworCQkJLy9wcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogUmFuZG9tbHkgdHJ5IHVwZ3JhZGluZy4uLlxuIik7CisJCX0KKwl9CisKKwkvLzEgUmF0ZSBNZWNoYW5pc20KKwlpZihiVHJ5VXApCisJeworCQlwcml2LT5Ucnl1cGluZ0NvdW50Kys7CisJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPSAwOworCisJCXsKKy8vCQkJcHJpbnRrKCJVUDogcEhhbERhdGEtPlRyeXVwaW5nQ291bnQgPSAlZFxuIiwgcHJpdi0+VHJ5dXBpbmdDb3VudCk7CisvLwkJCXByaW50aygiVVA6IFRyeVVwVGgoJWQpKyAoRmFpbFR4UmF0ZUNvdW50KCVkKSleMiA9JWRcbiIsCisvLwkJCQlUcnlVcFRoLCBwcml2LT5GYWlsVHhSYXRlQ291bnQsIChUcnlVcFRoICsgcHJpdi0+RmFpbFR4UmF0ZUNvdW50ICogcHJpdi0+RmFpbFR4UmF0ZUNvdW50KSApOworLy8JCQlwcmludGsoIlVQOiBwSGFsRGF0YS0+YlRyeXVwaW5nPSVkXG4iLCAgcHJpdi0+YlRyeXVwaW5nKTsKKworCQl9CisKKwkJLy8KKwkJLy8gQ2hlY2sgbW9yZSB0aW1lcyBpZiB3ZSBuZWVkIHRvIHVwZ3JhZGUgaW5kZWVkLgorCQkvLyBCZWNhdXNlIHRoZSBsYXJnZXN0IHZhbHVlIG9mIHBIYWxEYXRhLT5Ucnl1cGluZ0NvdW50IGlzIDB4RkZGRiBhbmQKKwkJLy8gdGhlIGxhcmdlc3QgdmFsdWUgb2YgcEhhbERhdGEtPkZhaWxUeFJhdGVDb3VudCBpcyAweDE0LAorCQkvLyB0aGlzIGNvbmRpdGlvbiB3aWxsIGJlIHNhdGlzZmllZCBhdCBtb3N0IGV2ZXJ5IDIgbWluLgorCQkvLworCisJCWlmKChwcml2LT5Ucnl1cGluZ0NvdW50ID4gKFRyeVVwVGggKyBwcml2LT5GYWlsVHhSYXRlQ291bnQgKiBwcml2LT5GYWlsVHhSYXRlQ291bnQpKSB8fAorCQkJKEN1cnJTaWduYWxTdHJlbmd0aCA+IHByaXYtPkxhc3RGYWlsVHhSYXRlU1MpIHx8IHByaXYtPmJUcnl1cGluZykKKwkJeworCQkJcHJpdi0+VHJ5dXBpbmdDb3VudCA9IDA7CisJCQkvLworCQkJLy8gV2hlbiB0cmFuc2ZlcmluZyBmcm9tIENDSyB0byBPRkRNLCBESUcgaXMgYW4gaW1wb3J0YW50IGlzc3VlLgorCQkJLy8KKwkJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMjIpCisJCQkJYlVwZGF0ZUluaXRpYWxHYWluID0gdHJ1ZTsKKworCQkJLy8gVGhlIGRpZmZlcmVuY2UgaW4gdGhyb3VnaHB1dCBiZXR3ZWVuIDQ4TWJwcyBhbmQgMzZNYnBzIGlzIDhNLgorCQkJLy8gU28sIHdlIG11c3QgYmUgY2FyZWZ1bGx5IGluIHRoaXMgcmF0ZSBzY2FsZS4gSXNhaWFoIDIwMDgtMDItMTUuCisJCQkvLworCQkJaWYoICAoKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNzIpIHx8IChwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDQ4KSB8fCAocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAzNikpICYmCisJCQkJKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+IDIpICkKKwkJCQlwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2Q9IChSQVRFX0FEQVBUSVZFX1RJTUVSX1BFUklPRC8yKTsKKworCQkJLy8gKDEpVG8gYXZvaWQgdXBncmFkZSBmcmVxdWVudGx5IHRvIHRoZSBmYWlsIHR4IHJhdGUsIGFkZCB0aGUgRmFpbFR4UmF0ZUNvdW50IGludG8gdGhlIHRocmVzaG9sZC4KKwkJCS8vICgyKUlmIHRoZSBzaWduYWwgc3RyZW5ndGggaXMgaW5jcmVhc2VkLCBpdCBtYXkgYmUgYWJsZSB0byB1cGdyYWRlLgorCisJCQlwcml2LT5DdXJyZW50T3BlcmFSYXRlID0gR2V0VXBncmFkZVR4UmF0ZShkZXYsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworLy8JCQlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogVXBncmFkZSBUeCBSYXRlIHRvICVkXG4iLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKworCQkJLy9bVFJDIERlbGwgTGFiXSBCeXBhc3MgMTIvOS82LCBJc2FpYWggMjAwOC0wMi0xOCAyMDowMAorCQkJaWYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PTM2KQorCQkJeworCQkJCXByaXYtPmJVcGRhdGVBUkZSPXRydWU7CisJCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGOEYpOyAvL2J5cGFzcyAxMi85LzYKKy8vCQkJCXByaW50aygiVVA6IEFSRlI9MHhGOEZcbiIpOworCQkJfQorCQkJZWxzZSBpZihwcml2LT5iVXBkYXRlQVJGUikKKwkJCXsKKwkJCQlwcml2LT5iVXBkYXRlQVJGUj1mYWxzZTsKKwkJCQl3cml0ZV9uaWNfd29yZChkZXYsIEFSRlIsIDB4MEZGRik7IC8vc2V0IDFNIH4gNTRNYnBzLgorLy8JCQkJcHJpbnRrKCJVUDogQVJGUj0weEZGRlxuIik7CisJCQl9CisKKwkJCS8vIFVwZGF0ZSBGYWlsIFR4IHJhdGUgYW5kIGNvdW50LgorCQkJaWYocHJpdi0+TGFzdEZhaWxUeFJhdGUgIT0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkKKwkJCXsKKwkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGU7CisJCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMDsKKwkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gLTIwMDsgLy8gU2V0IGxvd2VzdCBwb3dlci4KKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlpZihwcml2LT5Ucnl1cGluZ0NvdW50ID4gMCkKKwkJCXByaXYtPlRyeXVwaW5nQ291bnQgLS07CisJfQorCisJaWYoYlRyeURvd24pCisJeworCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhKys7CisJCXByaXYtPlRyeXVwaW5nQ291bnQgPSAwOworCQl7CisvLwkJCXByaW50aygiRE46IHBIYWxEYXRhLT5UcnlEb3duQ291bnRMb3dEYXRhID0gJWRcbiIscHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSk7CisvLwkJCXByaW50aygiRE46IFRyeURvd25UaCA9JWRcbiIsIFRyeURvd25UaCk7CisvLwkJCXByaW50aygiRE46IHBIYWxEYXRhLT5iVHJ5dXBpbmc9JWRcbiIsICBwcml2LT5iVHJ5dXBpbmcpOworCQl9CisKKwkJLy9DaGVjayBpZiBUeCByYXRlIGNhbiBiZSBkZWdyYWRlZCBvciBUZXN0IHRyeWluZyB1cGdyYWRpbmcgc2hvdWxkIGZhbGxiYWNrLgorCQlpZihwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID4gVHJ5RG93blRoIHx8IHByaXYtPmJUcnl1cGluZykKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9IDA7CisJCQlwcml2LT5iVHJ5dXBpbmcgPSBmYWxzZTsKKwkJCS8vIFVwZGF0ZSBmYWlsIGluZm9ybWF0aW9uLgorCQkJaWYocHJpdi0+TGFzdEZhaWxUeFJhdGUgPT0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkKKwkJCXsKKwkJCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgKys7CisJCQkJLy8gUmVjb3JkIHRoZSBUeCBmYWlsIHJhdGUgc2lnbmFsIHN0cmVuZ3RoLgorCQkJCWlmKEN1cnJTaWduYWxTdHJlbmd0aCA+IHByaXYtPkxhc3RGYWlsVHhSYXRlU1MpCisJCQkJeworCQkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gQ3VyclNpZ25hbFN0cmVuZ3RoOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGU7CisJCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMTsKKwkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gQ3VyclNpZ25hbFN0cmVuZ3RoOworCQkJfQorCQkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IEdldERlZ3JhZGVUeFJhdGUoZGV2LCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKworCQkJLy8gUmVkdWNlIGNoYXJpb3QgdHJhaW5pbmcgdGltZSBhdCB3ZWFrIHNpZ25hbCBzdHJlbmd0aCBzaXR1YXRpb24uIFNEMyBFRCBkZW1hbmQuCisJCQkvL1tUUkMgRGVsbCBMYWJdIFJldmlzZSBTaWduYWwgVGhyZXNob2xkIGZyb20gLTc1IHRvIC04MCAsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwCisJCQlpZiggKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04MCkgJiYgKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPiA3MiApKQorCQkJeworCQkJCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSA3MjsKKy8vCQkJCXByaW50aygiRE46IHdlYWsgc2lnbmFsIHN0cmVuZ3RoICglZCksIGRlZ3JhZGUgdG8gMzZNYnBzXG4iLCBDdXJyU2lnbmFsU3RyZW5ndGgpOworCQkJfQorCisJCQkvL1tUUkMgRGVsbCBMYWJdIEJ5cGFzcyAxMi85LzYsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwCisJCQlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlID09MzYpCisJCQl7CisJCQkJcHJpdi0+YlVwZGF0ZUFSRlI9dHJ1ZTsKKwkJCQl3cml0ZV9uaWNfd29yZChkZXYsIEFSRlIsIDB4MEY4Rik7IC8vYnlwYXNzIDEyLzkvNgorLy8JCQkJcHJpbnRrKCJETjogQVJGUj0weEY4RlxuIik7CisJCQl9CisJCQllbHNlIGlmKHByaXYtPmJVcGRhdGVBUkZSKQorCQkJeworCQkJCXByaXYtPmJVcGRhdGVBUkZSPWZhbHNlOworCQkJCXdyaXRlX25pY193b3JkKGRldiwgQVJGUiwgMHgwRkZGKTsgLy9zZXQgMU0gfiA1NE1icHMuCisvLwkJCQlwcmludGsoIkROOiBBUkZSPTB4RkZGXG4iKTsKKwkJCX0KKworCQkJLy8KKwkJCS8vIFdoZW4gaXQgaXMgQ0NLIHJhdGUsIGl0IG1heSBuZWVkIHRvIHVwZGF0ZSBpbml0aWFsIGdhaW4gdG8gcmVjZWl2ZSBsb3dlciBwb3dlciBwYWNrZXRzLgorCQkJLy8KKwkJCWlmKE1nbnRJc0Nja1JhdGUocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkpCisJCQl7CisJCQkJYlVwZGF0ZUluaXRpYWxHYWluID0gdHJ1ZTsKKwkJCX0KKy8vCQkJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N1NFKCk6IERlZ3JhZGUgVHggUmF0ZSB0byAlZFxuIiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYocHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA+IDApCisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhIC0tOworCX0KKworCS8vIEtlZXAgdGhlIFR4IGZhaWwgcmF0ZSBjb3VudCB0byBlcXVhbCB0byAweDE1IGF0IG1vc3QuCisJLy8gUmVkdWNlIHRoZSBmYWlsIGNvdW50IGF0IGxlYXN0IHRvIDEwIHNlYyBpZiB0eCByYXRlIGlzIHRlbmRpbmcgc3RhYmxlLgorCWlmKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+PSAweDE1IHx8CisJCSghYlRyeVVwICYmICFiVHJ5RG93biAmJiBwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID09IDAgJiYgcHJpdi0+VHJ5dXBpbmdDb3VudCAmJiBwcml2LT5GYWlsVHhSYXRlQ291bnQgPiAweDYpKQorCXsKKwkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50IC0tOworCX0KKworCisJT2ZkbVR4UHdySWR4ICA9IHByaXYtPmNodHhwd3Jfb2ZkbVtwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsKKwlDY2tUeFB3cklkeCAgPSBwcml2LT5jaHR4cHdyW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOworCisJLy9bVFJDIERlbGwgTGFiXSBNYWMweDllIGluY3JlYXNlIDIgbGV2ZWwgaW4gMzZNfjE4TSBzaXR1YXRpb24sIElzYWlhaCAyMDA4LTAyLTE4IDI0OjAwCisJaWYoKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPCA5NikgJiYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA+IDIyKSkKKwl7CisJCXUxYkNjayA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOworCQl1MWJPZmRtID0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOworCisJCS8vIGNhc2UgMTogTmV2ZXIgZW50ZXIgSGlnaCBwb3dlcgorCQlpZih1MWJDY2sgPT0gQ2NrVHhQd3JJZHggKQorCQl7CisJCQlpZih1MWJPZmRtICE9IChPZmRtVHhQd3JJZHgrMikgKQorCQkJeworCQkJcHJpdi0+YkVuaGFuY2VUeFB3cj0gdHJ1ZTsKKwkJCXUxYk9mZG0gPSAoKHUxYk9mZG0rMikgPiAzNSkgPyAzNTogKHUxYk9mZG0rMik7CisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYk9mZG0pOworLy8JCQlwcmludGsoIkVuaGFuY2UgT0ZETV9UWEFHQyA6ICsrKysrIHUxYk9mZG09IDB4JXhcbiIsIHUxYk9mZG0pOworCQkJfQorCQl9CisJCS8vIGNhc2UgMjogZW50ZXIgaGlnaCBwb3dlcgorCQllbHNlIGlmKHUxYkNjayA8IENja1R4UHdySWR4KQorCQl7CisJCQlpZighcHJpdi0+YkVuaGFuY2VUeFB3cikKKwkJCXsKKwkJCQlwcml2LT5iRW5oYW5jZVR4UHdyPSB0cnVlOworCQkJCXUxYk9mZG0gPSAoKHUxYk9mZG0rMikgPiAzNSkgPyAzNTogKHUxYk9mZG0rMik7CisJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsKKwkJCQkvL1JUX1RSQUNFKENPTVBfUkFURSwgREJHX1RSQUNFLCAoIkVuaGFuY2UgT0ZETV9UWEFHQygyKSA6ICsrKysrIHUxYk9mZG09IDB4JXhcbiIsIHUxYk9mZG0pKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlIGlmKHByaXYtPmJFbmhhbmNlVHhQd3IpICAvLzU0LzQ4LzExLzUuNS8yLzEKKwl7CisJCXUxYkNjayA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOworCQl1MWJPZmRtID0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOworCisJCS8vIGNhc2UgMTogTmV2ZXIgZW50ZXIgSGlnaCBwb3dlcgorCQlpZih1MWJDY2sgPT0gQ2NrVHhQd3JJZHggKQorCQl7CisJCXByaXYtPmJFbmhhbmNlVHhQd3I9IGZhbHNlOworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIE9mZG1UeFB3cklkeCk7CisJCS8vcHJpbnRrKCJSZWNvdmVyIE9GRE1fVFhBR0MgOiA9PT09PSB1MWJPZmRtPSAweCV4XG4iLCBPZmRtVHhQd3JJZHgpOworCQl9CisJCS8vIGNhc2UgMjogZW50ZXIgaGlnaCBwb3dlcgorCQllbHNlIGlmKHUxYkNjayA8IENja1R4UHdySWR4KQorCQl7CisJCQlwcml2LT5iRW5oYW5jZVR4UHdyPSBmYWxzZTsKKwkJCXUxYk9mZG0gPSAoKHUxYk9mZG0tMikgPiAwKSA/ICh1MWJPZmRtLTIpOiAwOworCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsKKwkJCS8vUlRfVFJBQ0UoQ09NUF9SQVRFLCBEQkdfVFJBQ0UsICgiUmVjb3ZlciBPRkRNX1RYQUdDKDIpOiA9PT09PSB1MWJPZmRtPSAweCV4XG4iLCB1MWJPZmRtKSk7CisKKwkJfQorCX0KKworCS8vCisJLy8gV2UgbmVlZCB1cGRhdGUgaW5pdGlhbCBnYWluIHdoZW4gd2Ugc2V0IHR4IHJhdGUgImZyb20gT0ZETSB0byBDQ0siIG9yCisJLy8gImZyb20gQ0NLIHRvIE9GRE0iLgorCS8vCitTZXRJbml0aWFsR2FpbjoKKwlpZihiVXBkYXRlSW5pdGlhbEdhaW4pCisJeworCQlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpKSAvLyBDQ0sKKwkJeworCQkJaWYocHJpdi0+SW5pdGlhbEdhaW4gPiBwcml2LT5SZWdCTW9kZUdhaW5TdGFnZSkKKwkJCXsKKwkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47CisKKwkJCQlpZihDdXJyU2lnbmFsU3RyZW5ndGggPCAtODUpIC8vIExvdyBwb3dlciwgT0ZETSBbMHgxN10gPSAyNi4KKwkJCQl7CisJCQkJCS8vU0QzIFNZcyBzdWdnZXN0IHRoYXQgQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTY1LCBvZmRtIDB4MTc9MjYuCisJCQkJCXByaXYtPkluaXRpYWxHYWluID0gcHJpdi0+UmVnQk1vZGVHYWluU3RhZ2U7CisJCQkJfQorCQkJCWVsc2UgaWYocHJpdi0+SW5pdGlhbEdhaW4gPiBwcml2LT5SZWdCTW9kZUdhaW5TdGFnZSArIDEpCisJCQkJeworCQkJCQlwcml2LT5Jbml0aWFsR2FpbiAtPSAyOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwcml2LT5Jbml0aWFsR2FpbiAtLTsKKwkJCQl9CisJCQkJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N1NFKCk6IHVwZGF0ZSBpbml0X2dhaW4gdG8gaW5kZXggJWQgZm9yIGRhdGUgcmF0ZSAlZFxuIixwcml2LT5Jbml0aWFsR2FpbiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisJCQkJVXBkYXRlSW5pdGlhbEdhaW4oZGV2KTsKKwkJCX0KKwkJfQorCQllbHNlIC8vIE9GRE0KKwkJeworCQkJaWYocHJpdi0+SW5pdGlhbEdhaW4gPCA0KQorCQkJeworCQkJCXByaXYtPkluaXRpYWxHYWluQmFja1VwPSBwcml2LT5Jbml0aWFsR2FpbjsKKworCQkJCXByaXYtPkluaXRpYWxHYWluICsrOworCQkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiB1cGRhdGUgaW5pdF9nYWluIHRvIGluZGV4ICVkIGZvciBkYXRlIHJhdGUgJWRcbiIscHJpdi0+SW5pdGlhbEdhaW4sIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCQkJCVVwZGF0ZUluaXRpYWxHYWluKGRldik7CisJCQl9CisJCX0KKwl9CisKKwkvL1JlY29yZCB0aGUgcmVsYXRlZCBpbmZvCisJcHJpdi0+TGFzdFJldHJ5UmF0ZSA9IEN1cnJSZXRyeVJhdGU7CisJcHJpdi0+TGFzdFR4VGhyb3VnaHB1dCA9IFR4VGhyb3VnaHB1dDsKKwlwcml2LT5pZWVlODAyMTEtPnJhdGUgPSBwcml2LT5DdXJyZW50T3BlcmFSYXRlICogNTsKK30KKworI2VuZGlmCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49S0VSTkVMX1ZFUlNJT04oMiw2LDIwKQordm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiB3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsKKyAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssc3RydWN0IGllZWU4MDIxMV9kZXZpY2UscmF0ZV9hZGFwdGVyX3dxKTsKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKKyNlbHNlCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKyNlbmRpZgorICAgICAgICAvL3N0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKy8vICAgIERNRVNHKCItLS0tPnJ0bDgxODBfcmF0ZV9hZGFwdGVyIik7CisgICAgICAgIFN0YVJhdGVBZGFwdGl2ZTg3U0UoZGV2KTsKKy8vICAgRE1FU0coIjwtLS0tcnRsODE4MF9yYXRlX2FkYXB0ZXIiKTsKK30KK3ZvaWQgdGltZXJfcmF0ZV9hZGFwdGl2ZSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHI4MTgwX3ByaXYqIHByaXYgPSBpZWVlODAyMTFfcHJpdigoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhKTsKKwkvL0RNRVNHKCItLS0tPnRpbWVyX3JhdGVfYWRhcHRpdmUoKVxuIik7CisJaWYoIXByaXYtPnVwKQorCXsKKy8vCQlETUVTRygiPC0tLS10aW1lcl9yYXRlX2FkYXB0aXZlKCk6ZHJpdmVyIGlzIG5vdCB1cCFcbiIpOworCQlyZXR1cm47CisJfQorCWlmKChwcml2LT5pZWVlODAyMTEtPml3X21vZGUgIT0gSVdfTU9ERV9NQVNURVIpCisJCQkmJiAocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKSAmJgorCQkJKHByaXYtPkZvcmNlZERhdGFSYXRlID09IDApICkKKwl7CisvLwlETUVTRygidGltZXJfcmF0ZV9hZGFwdGl2ZSgpOnNjaGVkdWxlIHJhdGVfYWRhcHRlcl93cVxuIik7CisjaWZkZWYgQ09ORklHX1JUTDgxOFhfUworCQlxdWV1ZV93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsICh2b2lkICopJnByaXYtPmllZWU4MDIxMS0+cmF0ZV9hZGFwdGVyX3dxKTsKKy8vCQlTdGFSYXRlQWRhcHRpdmU4N1NFKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpOworI2VuZGlmCisJfQorCXByaXYtPnJhdGVhZGFwdGVyX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgTVNFQ1MocHJpdi0+UmF0ZUFkYXB0aXZlUGVyaW9kKTsKKwlhZGRfdGltZXIoJnByaXYtPnJhdGVhZGFwdGVyX3RpbWVyKTsKKwkvL0RNRVNHKCI8LS0tLXRpbWVyX3JhdGVfYWRhcHRpdmUoKVxuIik7Cit9CisvL2J5IGFteSAwODAzMTJ9Cit2b2lkCitTd0FudGVubmFEaXZlcnNpdHlSeE9rODE4NSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXU4IFNpZ25hbFN0cmVuZ3RoCisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKworLy8JcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5UnhPazgxODU6IFJ4U3M6ICVkXG4iLCBTaWduYWxTdHJlbmd0aCk7CisKKwlwcml2LT5BZFJ4T2tDbnQrKzsKKworCWlmKCBwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggIT0gLTEpCisJeworCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPSAoKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCo3KSArIChTaWduYWxTdHJlbmd0aCozKSkgLyAxMDsKKwl9CisJZWxzZQorCXsgLy8gSW5pdGlhbGl6YXRpb24gY2FzZS4KKwkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoID0gU2lnbmFsU3RyZW5ndGg7CisJfQorLy97K2J5IGFteSAwODAzMTIKKwlpZiggcHJpdi0+TGFzdFJ4UGt0QW50ZW5uYSApIC8vTWFpbiBhbnRlbm5hLgorCQlwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCsrOworCWVsc2UJIC8vIEF1eCBhbnRlbm5hLgorCQlwcml2LT5BZEF1eEFudGVubmFSeE9rQ250Kys7CisvLytieSBhbXkgMDgwMzEyCisvLwlwcmludGsoIi1Td0FudGVubmFEaXZlcnNpdHlSeE9rODE4NTogQWRSeE9rQ250OiAlZCBBZFJ4U2lnbmFsU3RyZW5ndGg6ICVkXG4iLCBwcml2LT5BZFJ4T2tDbnQsIHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCk7Cit9CisvLworLy8JRGVzY3JpcHRpb246CisvLwkJQ2hhbmdlIEFudGVubmEgU3dpdGNoLgorLy8KK2Jvb2wKK1NldEFudGVubmE4MTg1KAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJdTgJCXUxYkFudGVubmFJbmRleAorCSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CisJYm9vbCBiQW50ZW5uYVN3aXRjaGVkID0gZmFsc2U7CisKKy8vCXByaW50aygiK1NldEFudGVubmE4MTg1KCk6IEFudGVubmEgaXMgc3dpdGNoaW5nIHRvOiAlZCBcbiIsIHUxYkFudGVubmFJbmRleCk7CisKKwlzd2l0Y2godTFiQW50ZW5uYUluZGV4KQorCXsKKwljYXNlIDA6CisJCXN3aXRjaChwcml2LT5yZl9jaGlwKQorCQl7CisJCWNhc2UgUkZfWkVCUkEyOgorCQljYXNlIFJGX1pFQlJBNDoKKyNpZmRlZiBDT05GSUdfUlRMODE4NUIKKyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCisJCQkvLyBNYWMgcmVnaXN0ZXIsIG1haW4gYW50ZW5uYQorCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDMpOworCQkJLy9iYXNlIGJhbmQKKwkJCXdyaXRlX3BoeV9jY2soZGV2LDB4MTEsIDB4OWIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuCisJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MGQsIDB4NWMpOyAvLyBDb25maWcgT0ZETSBSWCBhbnRlbm5hLgorCisjZWxzZQorCQkJLy8gTWFjIHJlZ2lzdGVyLCBtYWluIGFudGVubmEKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgQU5UU0VMLCAweDAzKTsKKwkJCS8vYmFzZSBiYW5kCisJCQl3cml0ZV9waHlfY2NrKGRldiwgMHgxMCwgMHg5Yik7IC8vIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4KKwkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1Yyk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuCisjZW5kaWYKKyNlbmRpZgorCisJCQliQW50ZW5uYVN3aXRjaGVkID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlNldEFudGVubmE4MTg1OiB1bmtvd24gUkZDaGlwSUQoJWQpXG4iLCBwcml2LT5yZl9jaGlwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSAxOgorCQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKKwkJeworCQljYXNlIFJGX1pFQlJBMjoKKwkJY2FzZSBSRl9aRUJSQTQ6CisjaWZkZWYgQ09ORklHX1JUTDgxODVCCisjaWZkZWYgQ09ORklHX1JUTDgxOFhfUworCQkJLy8gTWFjIHJlZ2lzdGVyLCBhdXggYW50ZW5uYQorCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDApOworCQkJLy9iYXNlIGJhbmQKKwkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweGJiKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLgorCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDU0KTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4KKyNlbHNlCisJCQkvLyBNYWMgcmVnaXN0ZXIsIGF1eCBhbnRlbm5hCisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMCk7CisJCQkvL2Jhc2UgYmFuZAorCQkJd3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4YmIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuCisJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MGQsIDB4NTQpOyAvLyBDb25maWcgT0ZETSBSWCBhbnRlbm5hLgorI2VuZGlmCisjZW5kaWYKKworCQkJYkFudGVubmFTd2l0Y2hlZCA9IHRydWU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJTZXRBbnRlbm5hODE4NTogdW5rb3duIFJGQ2hpcElEKCVkKVxuIiwgcHJpdi0+cmZfY2hpcCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua293biB1MWJBbnRlbm5hSW5kZXgoJWQpXG4iLCB1MWJBbnRlbm5hSW5kZXgpOworCQlicmVhazsKKwl9CisKKwlpZihiQW50ZW5uYVN3aXRjaGVkKQorCXsKKwkJcHJpdi0+Q3VyckFudGVubmFJbmRleCA9IHUxYkFudGVubmFJbmRleDsKKwl9CisKKy8vCXByaW50aygiLVNldEFudGVubmE4MTg1KCk6IHJldHVybiAoJSNYKVxuIiwgYkFudGVubmFTd2l0Y2hlZCk7CisKKwlyZXR1cm4gYkFudGVubmFTd2l0Y2hlZDsKK30KKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlUb2dnbGUgQW50ZW5uYSBzd2l0Y2guCisvLworYm9vbAorU3dpdGNoQW50ZW5uYSgKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCWJvb2wJCWJSZXN1bHQ7CisKKwlpZihwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDApCisJeworI2lmIDAvL2x6bSBkZWwgMDgwODI2CisvL2J5IGFteSAwODAzMTIKKyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCisJCWlmKHByaXYtPmJTd0FudGVubmFEaXZlcml0eSkKKwkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hQ29uZmlnODdTRShkZXYsIDEsIHRydWUpOworCQllbHNlCisjZW5kaWYKKyNlbmRpZgorCQkJYlJlc3VsdCA9IFNldEFudGVubmE4MTg1KGRldiwgMSk7CisvL2J5IGFteSAwODAzMTIKKy8vCQlwcmludGsoIlN3aXRjaEFudGVubmEoKTogc3dpdGNoaW5nIHRvIGFudGVubmEgMSAuLi4uLi5cbiIpOworLy8JCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDEpOy8vLWJ5IGFteSAwODAzMTIKKwl9CisJZWxzZQorCXsKKyNpZiAwLy9sem0gZGVsIDA4MDgyNgorLy9ieSBhbXkgMDgwMzEyCisjaWZkZWYgQ09ORklHX1JUTDgxOFhfUworCQlpZihwcml2LT5iU3dBbnRlbm5hRGl2ZXJpdHkpCisJCQliUmVzdWx0ID0gU2V0QW50ZW5uYUNvbmZpZzg3U0UoZGV2LCAwLCB0cnVlKTsKKwkJZWxzZQorI2VuZGlmCisjZW5kaWYKKwkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDApOworLy9ieSBhbXkgMDgwMzEyCisvLwkJcHJpbnRrKCJTd2l0Y2hBbnRlbm5hKCk6IHN3aXRjaGluZyB0byBhbnRlbm5hIDAgLi4uLi4uXG4iKTsKKy8vCQliUmVzdWx0ID0gU2V0QW50ZW5uYTgxODUoZGV2LCAwKTsvLy1ieSBhbXkgMDgwMzEyCisJfQorCisJcmV0dXJuIGJSZXN1bHQ7Cit9CisvLworLy8JRGVzY3JpcHRpb246CisvLwkJRW5naW5lIG9mIFNXIEFudGVubmEgRGl2ZXJzaXR5IG1lY2hhbmlzbS4KKy8vCQlTaW5jZSA4MTg3IGhhcyBubyBUeCBwYXJ0IGluZm9ybWF0aW9uLAorLy8JCXRoaXMgaW1wbGVtZW50YXRpb24gaXMgb25seSBkZXBlbmRlbmQgb24gUnggcGFydCBpbmZvcm1hdGlvbi4KKy8vCisvLwkyMDA2LjA0LjE3LCBieSByY25qa28uCisvLwordm9pZAorU3dBbnRlbm5hRGl2ZXJzaXR5KAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCWJvb2wgICBiU3dDaGVja1NTPWZhbHNlOworLy8JcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IEN1cnJBbnRlbm5hSW5kZXg6ICVkXG4iLCBwcml2LT5DdXJyQW50ZW5uYUluZGV4KTsKKy8vCXByaW50aygiQWRUaWNrQ291bnQgaXMgJWRcbiIscHJpdi0+QWRUaWNrQ291bnQpOworLy9ieSBhbXkgMDgwMzEyCisJaWYoYlN3Q2hlY2tTUykKKwl7CisJCXByaXYtPkFkVGlja0NvdW50Kys7CisKKwkJcHJpbnRrKCIoMSkgQWRUaWNrQ291bnQ6ICVkLCBBZENoZWNrUGVyaW9kOiAlZFxuIiwKKwkJCXByaXYtPkFkVGlja0NvdW50LCBwcml2LT5BZENoZWNrUGVyaW9kKTsKKwkJcHJpbnRrKCIoMikgQWRSeFNpZ25hbFN0cmVuZ3RoOiAlbGQsIEFkUnhTc1RocmVzaG9sZDogJWxkXG4iLAorCQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoLCBwcml2LT5BZFJ4U3NUaHJlc2hvbGQpOworCX0KKy8vCXByaXYtPkFkVGlja0NvdW50Kys7Ly8tYnkgYW15IDA4MDMxMgorCisJLy8gQ2FzZSAxLiBObyBMaW5rLgorCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkKKwl7CisJLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAxLiBObyBMaW5rLlxuIik7CisKKwkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IGZhbHNlOworCQkvLyBJIHN3aXRjaCBhbnRlbm5hIGhlcmUgdG8gcHJldmVudCBhbnkgb25lIG9mIGFudGVubmEgaXMgYnJva2VuIGJlZm9yZSBsaW5rIGVzdGFibGlzaGVkLCAyMDA2LjA0LjE4LCBieSByY25qa28uLgorCQlTd2l0Y2hBbnRlbm5hKGRldik7CisJfQorCS8vIENhc2UgMi4gTGlua2VkIGJ1dCBubyBwYWNrZXQgcmVjZWl2ZWQuCisJZWxzZSBpZihwcml2LT5BZFJ4T2tDbnQgPT0gMCkKKwl7CisJLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAyLiBMaW5rZWQgYnV0IG5vIHBhY2tldCByZWNlaXZlZC5cbiIpOworCisJCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsKKwkJU3dpdGNoQW50ZW5uYShkZXYpOworCX0KKwkvLyBDYXNlIDMuIEV2YWx1YXRlIGxhc3QgYW50ZW5uYSBzd2l0Y2ggYWN0aW9uIGFuZCB1bmRvIGl0IGlmIG5lY2Vzc2FyeS4KKwllbHNlIGlmKHByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPT0gdHJ1ZSkKKwl7CisJLy8JcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSAzLiBFdmFsdWF0ZSBsYXN0IGFudGVubmEgc3dpdGNoIGFjdGlvbi5cbiIpOworCisJCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsKKworCQkvLyBBZGp1c3QgUnggc2lnbmFsIHN0cmVuZ3RoIHRocmVhc2hvbGQuCisJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggKyBwcml2LT5BZFJ4U3NCZWZvcmVTd2l0Y2hlZCkgLyAyOworCisJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPiBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpID8KKwkJCQkJcHJpdi0+QWRNYXhSeFNzVGhyZXNob2xkOiBwcml2LT5BZFJ4U3NUaHJlc2hvbGQ7CisJCWlmKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCA8IHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKQorCQl7IC8vIFJ4IHNpZ25hbCBzdHJlbmd0aCBpcyBub3QgaW1wcm92ZWQgYWZ0ZXIgd2Ugc3d0aWNoZWQgYW50ZW5uYS4gPT4gU3dpY2ggYmFjay4KKy8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogUnggU2lnbmFsIFN0cmVuZ3RoIGlzIG5vdCBpbXByb3ZlZCwgQ3VyclJ4U3M6ICVkLCBMYXN0UnhTczogJWRcbiIsCisvLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKTsKKy8vYnkgYW15IDA4MDMxMgorCQkJLy8gSW5jcmVhc2UgQW50ZW5uYSBEaXZlcnNpdHkgY2hlY2tpbmcgcGVyaW9kIGR1ZSB0byBiYWQgZGVjaXNpb24uCisJCQlwcml2LT5BZENoZWNrUGVyaW9kICo9IDI7CisvL2J5IGFteSAwODAzMTIKKwkJCS8vIEluY3JlYXNlIEFudGVubmEgRGl2ZXJzaXR5IGNoZWNraW5nIHBlcmlvZC4KKwkJCWlmKHByaXYtPkFkQ2hlY2tQZXJpb2QgPiBwcml2LT5BZE1heENoZWNrUGVyaW9kKQorCQkJCXByaXYtPkFkQ2hlY2tQZXJpb2QgPSBwcml2LT5BZE1heENoZWNrUGVyaW9kOworCisJCQkvLyBXcm9uZyBkZWNlaXNpb24gPT4gc3dpdGNoIGJhY2suCisJCQlTd2l0Y2hBbnRlbm5hKGRldik7CisJCX0KKwkJZWxzZQorCQl7IC8vIFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyBpbXByb3ZlZC4KKy8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogUnggU2lnbmFsIFN0cmVuZ3RoIGlzIGltcHJvdmVkLCBDdXJyUnhTczogJWQsIExhc3RSeFNzOiAlZFxuIiwKKy8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQpOworCisJCQkvLyBSZXNldCBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgdG8gaXRzIG1pbiB2YWx1ZS4KKwkJCXByaXYtPkFkQ2hlY2tQZXJpb2QgPSBwcml2LT5BZE1pbkNoZWNrUGVyaW9kOworCQl9CisKKy8vCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBBZFJ4U3NUaHJlc2hvbGQ6ICVkLCBBZENoZWNrUGVyaW9kOiAlZFxuIiwKKy8vCQkJcHJpdi0+QWRSeFNzVGhyZXNob2xkLCBwcml2LT5BZENoZWNrUGVyaW9kKTsKKwl9CisJLy8gQ2FzZSA0LiBFdmFsdWF0ZSBpZiB3ZSBzaGFsbCBzd2l0Y2ggYW50ZW5uYSBub3cuCisJLy8gQ2F1c2UgVGFibGUgU3BlZWQgaXMgdmVyeSBmYXN0IGluIFRSQyBEZWxsIExhYiwgd2UgY2hlY2sgaXQgZXZlcnkgdGltZS4KKwllbHNlLy8gaWYocHJpdi0+QWRUaWNrQ291bnQgPj0gcHJpdi0+QWRDaGVja1BlcmlvZCkvLy1ieSBhbXkgMDgwMzEyCisJeworLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IENhc2UgNC4gRXZhbHVhdGUgaWYgd2Ugc2hhbGwgc3dpdGNoIGFudGVubmEgbm93LlxuIik7CisKKwkJcHJpdi0+QWRUaWNrQ291bnQgPSAwOworCisJCS8vCisJCS8vIDxSb2dlcl9Ob3Rlcz4gV2UgZXZhbHVhdGUgUnhPayBjb3VudHMgZm9yIGVhY2ggYW50ZW5uYSBmaXJzdCBhbmQgdGhhbgorCQkvLyBldmFsdWF0ZSBzaWduYWwgc3RyZW5ndGguCisJCS8vIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIGNhbiBvdmVyY29tZSB0aGUgZGlzYWJpbGl0eSBvZiBDQ0Egb24gYm90aCB0d28gYW50ZW5uYXMKKwkJLy8gV2hlbiBzaWduYWwgc3RyZW5ndGggd2FzIGV4dHJlbWVseSBsb3cgb3IgaGlnaC4KKwkJLy8gMjAwOC4wMS4zMC4KKwkJLy8KKworCQkvLworCQkvLyBFdmFsdWF0ZSBSeE9rIGNvdW50IGZyb20gZWFjaCBhbnRlbm5hIGlmIHdlIHNoYWxsIHN3aXRjaCBkZWZhdWx0IGFudGVubmEgbm93LgorCQkvLyBBZGRlZCBieSBSb2dlciwgMjAwOC4wMi4yMS4KKy8ve2J5IGFteSAwODAzMTIKKwkJaWYoKHByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250IDwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCkKKwkJCSYmIChwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDApKQorCQl7IC8vIFdlIHNldCBNYWluIGFudGVubmEgYXMgZGVmYXVsdCBidXQgUnhPayBjb3VudCB3YXMgbGVzcyB0aGFuIEF1eCBvbmVzLgorCisJLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IE1haW4gYW50ZW5uYSBSeE9LIGlzIHBvb3IsIEFkTWFpbkFudGVubmFSeE9rQ250OiAlZCwgQWRBdXhBbnRlbm5hUnhPa0NudDogJWRcbiIsCisJLy8JCQlwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCk7CisKKwkJCS8vIFN3aXRjaCB0byBBdXggYW50ZW5uYS4KKwkJCVN3aXRjaEFudGVubmEoZGV2KTsKKwkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSB0cnVlOworCQl9CisJCWVsc2UgaWYoKHByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQgPCBwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCkKKwkJCSYmIChwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDEpKQorCQl7IC8vIFdlIHNldCBBdXggYW50ZW5uYSBhcyBkZWZhdWx0IGJ1dCBSeE9rIGNvdW50IHdhcyBsZXNzIHRoYW4gTWFpbiBvbmVzLgorCisJLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IEF1eCBhbnRlbm5hIFJ4T0sgaXMgcG9vciwgQWRNYWluQW50ZW5uYVJ4T2tDbnQ6ICVkLCBBZEF1eEFudGVubmFSeE9rQ250OiAlZFxuIiwKKwkvLwkJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250LCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KTsKKworCQkJLy8gU3dpdGNoIHRvIE1haW4gYW50ZW5uYS4KKwkJCVN3aXRjaEFudGVubmEoZGV2KTsKKwkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSB0cnVlOworCQl9CisJCWVsc2UKKwkJey8vIERlZmF1bHQgYW50ZW5uYSBpcyBiZXR0ZXIuCisKKwkvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogRGVmYXVsdCBhbnRlbm5hIGlzIGJldHRlci4sIEFkTWFpbkFudGVubmFSeE9rQ250OiAlZCwgQWRBdXhBbnRlbm5hUnhPa0NudDogJWRcbiIsCisJLy8JCQlwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCk7CisKKwkJCS8vIFN0aWxsIG5lZWQgdG8gY2hlY2sgY3VycmVudCBzaWduYWwgc3RyZW5ndGguCisJCQlwcml2LT5iSFdBZFN3aXRjaGVkID0gZmFsc2U7CisJCX0KKwkJLy8KKwkJLy8gPFJvZ2VyX05vdGVzPiBXZSBldmFsdWF0ZSBSeCBzaWduYWwgc3RyZW5ndGggT05MWSB3aGVuIGRlZmF1bHQgYW50ZW5uYQorCQkvLyBkaWRuJ3QgY2hhbmdlZCBieSBIVyBldmFsdWF0aW9uLgorCQkvLyAyMDA4LjAyLjI3LgorCQkvLworCQkvLyBbVFJDIERlbGwgTGFiXSBTaWduYWxTdHJlbmd0aCBpcyBpbmFjY3VyYWN5LiBJc2FpYWggMjAwOC0wMy0wNQorCQkvLyBGb3IgZXhhbXBsZSwgVGhyb3VnaHB1dCBvZiBhdXggaXMgYmV0dGVyIHRoYW4gbWFpbiBhbnRlbm5hKGFib3V0IDEwTSB2LnMgMk0pLAorCQkvLyBidXQgQWRSeFNpZ25hbFN0cmVuZ3RoIGlzIGxlc3MgdGhhbiBtYWluLgorCQkvLyBPdXIgZ3Vlc3MgaXMgdGhhdCBtYWluIGFudGVubmEgaGF2ZSBsb3dlciB0aHJvdWdocHV0IGFuZCBnZXQgbWFueSBjaGFuZ2UKKwkJLy8gdG8gcmVjZWl2ZSBtb3JlIENDSyBwYWNrZXRzKGV4LkJlYWNvbikgd2hpY2ggaGF2ZSBzdHJvbmdlciBTaWduYWxTdHJlbmd0aC4KKwkJLy8KKwkJaWYoICghcHJpdi0+YkhXQWRTd2l0Y2hlZCkgJiYgKGJTd0NoZWNrU1MpKQorCQl7CisvL2J5IGFteSAwODAzMTJ9CisJCS8vIEV2YWx1YXRlIFJ4IHNpZ25hbCBzdHJlbmd0aCBpZiB3ZSBzaGFsbCBzd2l0Y2ggYW50ZW5uYSBub3cuCisJCWlmKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCA8IHByaXYtPkFkUnhTc1RocmVzaG9sZCkKKwkJeyAvLyBSeCBzaWduYWwgc3RyZW5ndGggaXMgd2VhayA9PiBTd2l0Y2ggQW50ZW5uYS4KKy8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogUnggU2lnbmFsIFN0cmVuZ3RoIGlzIHdlYWssIEN1cnJSeFNzOiAlZCwgUnhTc1RocmVzaG9sZDogJWRcbiIsCisvLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc1RocmVzaG9sZCk7CisKKwkJCXByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkID0gcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoOworCQkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IHRydWU7CisKKwkJCVN3aXRjaEFudGVubmEoZGV2KTsKKwkJfQorCQllbHNlCisJCXsgLy8gUnggc2lnbmFsIHN0cmVuZ3RoIGlzIE9LLgorLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgT0ssIEN1cnJSeFNzOiAlZCwgUnhTc1RocmVzaG9sZDogJWRcbiIsCisvLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc1RocmVzaG9sZCk7CisKKwkJCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsKKwkJCS8vIEluY3JlYXNlIFJ4IHNpZ25hbCBzdHJlbmd0aCB0aHJlYXNob2xkIGlmIG5lY2Vzc2FyeS4KKwkJCWlmKAkocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoID4gKHByaXYtPkFkUnhTc1RocmVzaG9sZCArIDEwKSkgJiYgLy8gU2lnbmFsIGlzIG11Y2ggc3Ryb25nZXIgdGhhbiBjdXJyZW50IHRocmVzaG9sZAorCQkJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA8PSBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpIC8vIEN1cnJlbnQgdGhyZWhvbGQgaXMgbm90IHlldCByZWFjaCB1cHBlciBsaW1pdC4KKwkJCXsKKwkJCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPSAocHJpdi0+QWRSeFNzVGhyZXNob2xkICsgcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoKSAvIDI7CisJCQkJcHJpdi0+QWRSeFNzVGhyZXNob2xkID0gKHByaXYtPkFkUnhTc1RocmVzaG9sZCA+IHByaXYtPkFkTWF4UnhTc1RocmVzaG9sZCkgPworCQkJCQkJCQkJCQkJcHJpdi0+QWRNYXhSeFNzVGhyZXNob2xkOiBwcml2LT5BZFJ4U3NUaHJlc2hvbGQ7Ly8rYnkgYW15IDA4MDMxMgorCQkJfQorCisJCQkvLyBSZWR1Y2UgQW50ZW5uYSBEaXZlcnNpdHkgY2hlY2tpbmcgcGVyaW9kIGlmIHBvc3NpYmxlLgorCQkJaWYoIHByaXYtPkFkQ2hlY2tQZXJpb2QgPiBwcml2LT5BZE1pbkNoZWNrUGVyaW9kICkKKwkJCXsKKwkJCQlwcml2LT5BZENoZWNrUGVyaW9kIC89IDI7CisJCQl9CisJCX0KKwkJfQorCX0KKy8vYnkgYW15IDA4MDMxMgorCS8vIFJlc2V0IGFudGVubmEgZGl2ZXJzaXR5IFJ4IHJlbGF0ZWQgc3RhdGlzdGljcy4KKwlwcml2LT5BZFJ4T2tDbnQgPSAwOworCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250ID0gMDsKKwlwcml2LT5BZEF1eEFudGVubmFSeE9rQ250ID0gMDsKKy8vYnkgYW15IDA4MDMxMgorCisvLwlwcml2LT5BZFJ4T2tDbnQgPSAwOy8vLWJ5IGFteSAwODAzMTIKKworLy8JcHJpbnRrKCItU3dBbnRlbm5hRGl2ZXJzaXR5KClcbiIpOworfQorCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJUmV0dXJuIFRSVUUgaWYgd2Ugc2hhbGwgcGVyZm9ybSBUeCBQb3dlciBUcmFja2luZyBNZWNhaG5pc20sIEZBTFNFIG90aGVyd2lzZS4KKy8vCitib29sCitDaGVja1R4UHdyVHJhY2tpbmcoCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYoIXByaXYtPmJUeFBvd2VyVHJhY2spCisJeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisvL2x6bSByZXNlcnZlZCAwODA4MjYKKwkvL2lmKHByaXYtPmJTY2FuSW5Qcm9ncmVzcykKKwkvL3sKKwkvLwlyZXR1cm4gZmFsc2U7CisJLy99CisKKwkvL2lmIDg3U0UgaXMgaW4gSGlnaCBQb3dlciAsIGRvbid0IGRvIFR4IFBvd2VyIFRyYWNraW5nLiBhc2tlZCBieSBTRDMgRUQuIDIwMDgtMDgtMDggSXNhaWFoCisJaWYocHJpdi0+YlRvVXBkYXRlVHhQd3IpCisJeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIFNXIEFudGVubmEgRGl2ZXJzaXR5LgorLy8KK3ZvaWQKK1N3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldgorCSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CisJUlRfUkZfUE9XRVJfU1RBVEUgcnRTdGF0ZTsKKworCS8vcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjaygpXG4iKTsKKworCS8vCisJLy8gV2UgZG8gTk9UIG5lZWQgdG8gc3dpdGNoIGFudGVubmEgd2hpbGUgUkYgaXMgb2ZmLgorCS8vIDIwMDcuMDUuMDksIGFkZGVkIGJ5IFJvZ2VyLgorCS8vCisJcnRTdGF0ZSA9IHByaXYtPmVSRlBvd2VyU3RhdGU7CisJZG97CisJCWlmIChydFN0YXRlID09IGVSZk9mZikKKwkJeworLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyIC0gUkYgaXMgT0ZGLlxuIik7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChydFN0YXRlID09IGVSZlNsZWVwKQorCQl7CisJCQkvLyBEb24ndCBhY2Nlc3MgQkIvUkYgdW5kZXIgRGlzYWJsZSBQTEwgc2l0dWF0aW9uLgorCQkJLy9SVF9UUkFDRSgoQ09NUF9SRnxDT01QX0FOVEVOTkEpLCBEQkdfTE9VRCwgKCJTd0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrKCk6IFJGIGlzIFNsZWVwID0+IHNraXAgaXRcbiIpKTsKKwkJCWJyZWFrOworCQl9CisJCVN3QW50ZW5uYURpdmVyc2l0eShkZXYpOworCisJfXdoaWxlKGZhbHNlKTsKKworCWlmKHByaXYtPnVwKQorCXsKKwkJcHJpdi0+U3dBbnRlbm5hRGl2ZXJzaXR5VGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNU0VDUyhBTlRFTk5BX0RJVkVSU0lUWV9USU1FUl9QRVJJT0QpOworCQlhZGRfdGltZXIoJnByaXYtPlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyKTsKKwl9CisKKwkvL3ByaW50aygiLVN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soKVxuIik7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uaAppbmRleCAzZGU5MmYwLi5iMjczNmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5oCkBAIC0xLDQxICsxLDQxIEBACi0jaWZuZGVmIFI4MTgwX0RNX0ggDQotI2RlZmluZSBSODE4MF9ETV9IDQotDQotI2luY2x1ZGUgInI4MTgwLmgiDQotLy8jaW5jbHVkZSAicjgxODBfaHcuaCINCi0vLyNpbmNsdWRlICJyODE4MF85M2N4Ni5oIg0KLXZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5UnhPazgxODUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggU2lnbmFsU3RyZW5ndGgpOw0KLWJvb2wgU2V0QW50ZW5uYTgxODUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwJdTggdTFiQW50ZW5uYUluZGV4KTsNCi1ib29sIFN3aXRjaEFudGVubmEoCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLXZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYJKTsNCi12b2lkIFN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotYm9vbCBDaGVja0RpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCi1ib29sIENoZWNrSGlnaFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpDQotdm9pZCBydGw4MTgwX2h3X2RpZ193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsNCi0jZWxzZQ0KLXZvaWQgcnRsODE4MF9od19kaWdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotI2VuZGlmDQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkNCi12b2lkIHJ0bDgxODBfdHhfcHdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7DQotI2Vsc2UNCi12b2lkIHJ0bDgxODBfdHhfcHdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotI2VuZGlmDQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PUtFUk5FTF9WRVJTSU9OKDIsNiwyMCkNCi12b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspOw0KLQ0KLSNlbHNlDQotdm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCi0NCi0jZW5kaWYNCi12b2lkIFR4UHdyVHJhY2tpbmc4N1NFKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLWJvb2wgQ2hlY2tUeFB3clRyYWNraW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj1LRVJORUxfVkVSU0lPTigyLDYsMjApDQotdm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiB3b3JrKTsNCi0jZWxzZQ0KLXZvaWQgcnRsODE4MF9yYXRlX2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotI2VuZGlmDQotdm9pZCB0aW1lcl9yYXRlX2FkYXB0aXZlKHVuc2lnbmVkIGxvbmcgZGF0YSk7DQotDQotDQotI2VuZGlmDQorI2lmbmRlZiBSODE4MF9ETV9ICisjZGVmaW5lIFI4MTgwX0RNX0gKKworI2luY2x1ZGUgInI4MTgwLmgiCisvLyNpbmNsdWRlICJyODE4MF9ody5oIgorLy8jaW5jbHVkZSAicjgxODBfOTNjeDYuaCIKK3ZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5UnhPazgxODUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggU2lnbmFsU3RyZW5ndGgpOworYm9vbCBTZXRBbnRlbm5hODE4NShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAl1OCB1MWJBbnRlbm5hSW5kZXgpOworYm9vbCBTd2l0Y2hBbnRlbm5hKAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYJKTsKK3ZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2Jvb2wgQ2hlY2tEaWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Citib29sIENoZWNrSGlnaFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKK3ZvaWQgcnRsODE4MF9od19kaWdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisjZWxzZQordm9pZCBydGw4MTgwX2h3X2RpZ193cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbmRpZgorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKK3ZvaWQgcnRsODE4MF90eF9wd193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKyNlbHNlCit2b2lkIHJ0bDgxODBfdHhfcHdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj1LRVJORUxfVkVSU0lPTigyLDYsMjApCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspOworCisjZWxzZQordm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworI2VuZGlmCit2b2lkIFR4UHdyVHJhY2tpbmc4N1NFKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworYm9vbCBDaGVja1R4UHdyVHJhY2tpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49S0VSTkVMX1ZFUlNJT04oMiw2LDIwKQordm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiB3b3JrKTsKKyNlbHNlCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2VuZGlmCit2b2lkIHRpbWVyX3JhdGVfYWRhcHRpdmUodW5zaWduZWQgbG9uZyBkYXRhKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYwppbmRleCA4YjM5MDFkLi45NzliYTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF93eC5jCkBAIC0xMjc0LDggKzEyNzQsOCBAQAogCiB9CiBzdGF0aWMgaW50IHI4MTgwX3d4X3NldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAkvL3ByaW50aygiPT09PT4lcygpXG4iLCBfX2Z1bmNfXyk7CiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlkb3duKCZwcml2LT53eF9zZW0pOwotCXJldCA9IGllZWU4MDIxMV93eF9zZXRfYXV0aChwcml2LT5pZWVlODAyMTEsIGluZm8sIGRhdGEsIGV4dHJhKTsKKwlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X2F1dGgocHJpdi0+aWVlZTgwMjExLCBpbmZvLCAmd3JxdS0+cGFyYW0sIGV4dHJhKTsKIAl1cCgmcHJpdi0+d3hfc2VtKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMxMiw4ICsxMzEyLDggQEAKIAlyZXR1cm4gcmV0OwogfQogc3RhdGljIGludCByODE4MF93eF9zZXRfZ2VuX2llKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAvLwlwcmludGsoIj09PT0+JXMoKSwgbGVuOiVkXG4iLCBfX2Z1bmNfXywgZGF0YS0+bGVuZ3RoKTsKIAlpbnQgcmV0PTA7CkBAIC0xMzI1LDcgKzEzMjUsNyBAQAogCiAgICAgICAgIGRvd24oJnByaXYtPnd4X3NlbSk7CiAjaWYgMQotICAgICAgICByZXQgPSBpZWVlODAyMTFfd3hfc2V0X2dlbl9pZShwcml2LT5pZWVlODAyMTEsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOworICAgICAgICByZXQgPSBpZWVlODAyMTFfd3hfc2V0X2dlbl9pZShwcml2LT5pZWVlODAyMTEsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7CiAjZW5kaWYKICAgICAgICAgdXAoJnByaXYtPnd4X3NlbSk7CiAJLy9wcmludGsoIjw9PT09PT0lcygpLCByZXQ6JWRcbiIsIF9fZnVuY19fLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMWFmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL0tjb25maWcKQEAgLTAsMCArMSw5IEBACitjb25maWcgVVNCX1NFUklBTF9RVUFURUNIX0VTVTEwMAorCXRyaXN0YXRlICJVU0IgUXVhdGVjaCBFU1UtMTAwIDggUG9ydCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBRdWF0ZWNoIEVTVS0xMDAgOCBwb3J0IHVzYiB0bworCSAgc2VyaWFsIGFkYXB0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNlcnF0X3VzYi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDFkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0hfRVNVMTAwKQkJKz0gc2VycXRfdXNiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGVjY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9UT0RPCkBAIC0wLDAgKzEsOCBAQAorVGhpbmdzIHRvIGRvIGZvciB0aGlzIGRyaXZlciB0byBnZXQgbWVyZ2VkIGludG8gdGhlIG1haW4gcG9ydGlvbiBvZiB0aGUKK2tlcm5lbDoKKwktIGNoZWNrcGF0Y2ggY2xlYW51cHMKKwktIHNwYXJzZSBjbGVhbgorCS0gcG9ydCB0byB0aGUgdXNiLXNlcmlhbCBsYXllciBpbnN0ZWFkIG9mIGRvaW5nIGl0IGFsbCBvbiBpdHMKKwkgIG93bi4KKworU2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL3NlcnF0X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9zZXJxdF91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzgxNTEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9zZXJxdF91c2IuYwpAQCAtMCwwICsxLDI3NzkgQEAKKy8qCisgKiBUaGlzIGNvZGUgd2FzIGRldmVsb3BlZCBmb3IgdGhlIFF1YXRlY2ggVVNCIGxpbmUgZm9yIGxpbnV4LCBpdCB1c2VkCisgKiBtdWNoIG9mIHRoZSBjb2RlIGRldmVsb3BlZCBieSBHcmVnIEtyb2FoLUhhcnRtYW4gZm9yIFVTQiBzZXJpYWwgZGV2aWNlcworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KKy8qICNkZWZpbmUgREVCVUdfT04gKi8KKy8qICN1bmRlZiBkYmcgKi8KKyNpZmRlZiBERUJVR19PTgorI2RlZmluZSAgbXlkYmcoY29uc3QuLi4pICAgIHByaW50ayhjb25zdCkKKyNlbHNlCisjZGVmaW5lICBteWRiZyhjb25zdC4uLikKKyNlbmRpZgorCisvKiBwYXJpdHkgY2hlY2sgZmxhZyAqLworI2RlZmluZSBSRUxFVkFOVF9JRkxBRyhpZmxhZykJKGlmbGFnICYgKElHTkJSS3xCUktJTlR8SUdOUEFSfFBBUk1SS3xJTlBDSykpCisKKyNkZWZpbmUgU0VSSUFMX1RUWV9NQUpPUgkgICAgICAgIDAJLyogTmljZSBsZWdhbCBudW1iZXIgbm93ICovCisjZGVmaW5lIFNFUklBTF9UVFlfTUlOT1JTCSAgICAgICAgMjU1CS8qIGxvYWRzIG9mIGRldmljZXMgOikgKi8KKyNkZWZpbmUgTUFYX05VTV9QT1JUUwkJICAgICAgICA4CS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3J0cyBvbmUgZGV2aWNlIGNhbiBncmFiIGF0IG9uY2UgKi8KKyNkZWZpbmUgUFJFRlVGRl9MRVZFTF9DT05TRVJWQVRJVkUgIDEyOAorI2RlZmluZSBBVENfRElTQUJMRUQgICAgICAgICAgICAgICAgMHgwMAorCisjZGVmaW5lIFJSX0JJVFMgICAgICAgICAgICAgMHgwMwkvKiBmb3IgY2xlYXJpbmcgY2xvY2sgYml0cyAqLworI2RlZmluZSBEVVBNT0RFX0JJVFMgICAgICAgIDB4YzAKKworI2RlZmluZSBSUzIzMl9NT0RFICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUlRTQ1RTX1RPX0NPTk5FQ1RPUiAweDQwCisjZGVmaW5lIENMS1NfWDQgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIExPT1BNT0RFX0JJVFMgICAgICAgMHg0MQkvKiBMT09QMSA9IGI2LCBMT09QMCA9IGIwIChQT1JUIEIpICovCisjZGVmaW5lIEFMTF9MT09QQkFDSyAgICAgICAgMHgwMQorI2RlZmluZSBNT0RFTV9DVFJMICAgICAgICAgIDB4NDAKKworI2RlZmluZSBUSElTQ0hBUiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXQorI2RlZmluZSBORVhUQ0hBUiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMV0KKyNkZWZpbmUgVEhJUkRDSEFSICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMl0KKyNkZWZpbmUgRk9VUlRIQ0hBUiAgICAgICAgICAgICAgICAgIGRhdGFbaSArIDNdCisKKy8qCisgKiBVc2VmdWwgZGVmaW50aW9ucyBmb3IgcG9ydCBBLCBQb3J0IEIgYW5kIFBvcnQgQworICovCisjZGVmaW5lIEZVTExQV1JCSVQgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBORVhUX0JPQVJEX1BPV0VSX0JJVCAgICAgICAgMHgwMDAwMDAwNAorCisjZGVmaW5lIFNFUklBTF9MU1JfT0UgICAgICAgMHgwMgorI2RlZmluZSBTRVJJQUxfTFNSX1BFICAgICAgIDB4MDQKKyNkZWZpbmUgU0VSSUFMX0xTUl9GRSAgICAgICAweDA4CisjZGVmaW5lIFNFUklBTF9MU1JfQkkgICAgICAgMHgxMAorCisjZGVmaW5lIFNFUklBTF9MU1JfVEVNVCAgICAgMHg0MAorCisjZGVmaW5lICBESVZfTEFUQ0hfTFMgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lICBYTVRfSE9MRF9SRUdJU1RFUiAgICAgICAgICAweDAwCisjZGVmaW5lICBYVlJfQlVGRkVSX1JFR0lTVEVSICAgICAgICAweDAwCisjZGVmaW5lICBESVZfTEFUQ0hfTVMgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lICBGSUZPX0NPTlRST0xfUkVHSVNURVIgICAgICAweDAyCisjZGVmaW5lICBMSU5FX0NPTlRST0xfUkVHSVNURVIgICAgICAweDAzCisjZGVmaW5lICBNT0RFTV9DT05UUk9MX1JFR0lTVEVSICAgICAweDA0CisjZGVmaW5lICBMSU5FX1NUQVRVU19SRUdJU1RFUiAgICAgICAweDA1CisjZGVmaW5lICBNT0RFTV9TVEFUVVNfUkVHSVNURVIgICAgICAweDA2CisKKyNkZWZpbmUgIFNFUklBTF9NQ1JfRFRSICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgIFNFUklBTF9NQ1JfUlRTICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgIFNFUklBTF9NQ1JfTE9PUCAgICAgICAgICAgIDB4MTAKKworI2RlZmluZSAgU0VSSUFMX01TUl9DVFMgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgU0VSSUFMX01TUl9DRCAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSAgU0VSSUFMX01TUl9SSSAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSAgU0VSSUFMX01TUl9EU1IgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgU0VSSUFMX01TUl9NQVNLICAgICAgICAgICAgMHhmMAorCisjZGVmaW5lICBTRVJJQUxfOF9EQVRBICAgICAgICAgICAgICAweDAzCisjZGVmaW5lICBTRVJJQUxfN19EQVRBICAgICAgICAgICAgICAweDAyCisjZGVmaW5lICBTRVJJQUxfNl9EQVRBICAgICAgICAgICAgICAweDAxCisjZGVmaW5lICBTRVJJQUxfNV9EQVRBICAgICAgICAgICAgICAweDAwCisKKyNkZWZpbmUgIFNFUklBTF9PRERfUEFSSVRZICAgICAgICAgIDBYMDgKKyNkZWZpbmUgIFNFUklBTF9FVkVOX1BBUklUWSAgICAgICAgIDBYMTgKKyNkZWZpbmUgIFNFUklBTF9UV09fU1RPUEIgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgIFNFUklBTF9PTkVfU1RPUEIgICAgICAgICAgIDB4MDAKKworI2RlZmluZSAgTUFYX0JBVURfUkFURSAgICAgICAgICAgICAgNDYwODAwCisjZGVmaW5lICBNQVhfQkFVRF9SRU1BSU5ERVIgICAgICAgICA0NjA4CisKKyNkZWZpbmUgUVRfU0VUX0dFVF9ERVZJQ0UgICAgICAgICAgIDB4YzIKKyNkZWZpbmUgUVRfT1BFTl9DTE9TRV9DSEFOTkVMICAgICAgIDB4Y2EKKyNkZWZpbmUgUVRfR0VUX1NFVF9QUkVCVUZfVFJJR19MVkwgIDB4Y2MKKyNkZWZpbmUgUVRfU0VUX0FURiAgICAgICAgICAgICAgICAgIDB4Y2QKKyNkZWZpbmUgUVRfR0VUX1NFVF9SRUdJU1RFUiAgICAgICAgIDB4YzAKKyNkZWZpbmUgUVRfR0VUX1NFVF9VQVJUICAgICAgICAgICAgIDB4YzEKKyNkZWZpbmUgUVRfSFdfRkxPV19DT05UUk9MX01BU0sgICAgIDB4YzUKKyNkZWZpbmUgUVRfU1dfRkxPV19DT05UUk9MX01BU0sgICAgIDB4YzYKKyNkZWZpbmUgUVRfU1dfRkxPV19DT05UUk9MX0RJU0FCTEUgIDB4YzcKKyNkZWZpbmUgUVRfQlJFQUtfQ09OVFJPTCAgICAgICAgICAgIDB4YzgKKworI2RlZmluZSBTRVJJQUxRVF9QQ0lfSU9DX01BR0lDICdrJworI2RlZmluZSBTRVJJQUxRVF9XUklURV9RT1BSIF9JT1coU0VSSUFMUVRfUENJX0lPQ19NQUdJQywgMCwgaW50KQorI2RlZmluZSBTRVJJQUxRVF9XUklURV9RTUNSIF9JT1coU0VSSUFMUVRfUENJX0lPQ19NQUdJQywgMSwgaW50KQorI2RlZmluZSBTRVJJQUxRVF9HRVRfTlVNT0ZfVU5JVFMgX0lPUihTRVJJQUxRVF9QQ0lfSU9DX01BR0lDLCAyLCB2b2lkICopCisjZGVmaW5lIFNFUklBTFFUX0dFVF9USElTX1VOSVQgX0lPUihTRVJJQUxRVF9QQ0lfSU9DX01BR0lDLCAzLCB2b2lkICopCisjZGVmaW5lIFNFUklBTFFUX1JFQURfUU9QUiBfSU9SKFNFUklBTFFUX1BDSV9JT0NfTUFHSUMsIDQsIGludCkKKyNkZWZpbmUgU0VSSUFMUVRfUkVBRF9RTUNSIF9JT1IoU0VSSUFMUVRfUENJX0lPQ19NQUdJQywgNSwgaW50KQorI2RlZmluZSBTRVJJQUxRVF9JUzQyMl9FWFRFTkRFRCBfSU9SKFNFUklBTFFUX1BDSV9JT0NfTUFHSUMsIDYsIGludCkJLyogcmV0dXJucyBzdWNjZXNzZnVsIGlmIDQyMiBleHRlbmRlZCAqLworCisjZGVmaW5lIFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOICAgIDB4YzAKKyNkZWZpbmUgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VUICAgMHg0MAorCisjZGVmaW5lIEFUQ19ESVNBQkxFRCAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUQ19SVFNfRU5BQkxFRCAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBVENfRFRSX0VOQUJMRUQgICAgICAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBSUl9CSVRTICAgICAgICAgICAgIDB4MDMJLyogZm9yIGNsZWFyaW5nIGNsb2NrIGJpdHMgKi8KKyNkZWZpbmUgRFVQTU9ERV9CSVRTICAgICAgICAweGMwCisKKyNkZWZpbmUgRlVMTF9EVVBMRVggICAgICAgICAweDAwCisjZGVmaW5lIEhBTEZfRFVQTEVYX1JUUyAgICAgMHg0MAorI2RlZmluZSBIQUxGX0RVUExFWF9EVFIgICAgIDB4ODAKKworI2RlZmluZSBRTUNSX0ZVTExfRFVQTEVYICAweDAwCisjZGVmaW5lIFFNQ1JfSEFMRl9EVVBMRVhfUlRTIDB4MDIKKyNkZWZpbmUgUU1DUl9IQUxGX0RVUExFWF9EVFIgMHgwMQorI2RlZmluZSBRTUNSX0hBTEZfRFVQTEVYX01BU0sgMHgwMworI2RlZmluZSBRTUNSX0NPTk5FQ1RPUl9NQVNLIDB4MUMKKworI2RlZmluZSBRTUNSX1JYX0VOX01BU0sgMHgyMAorCisjZGVmaW5lIFFNQ1JfQUxMX0xPT1BCQUNLICAgIDB4MTAKKyNkZWZpbmUgUU1DUl9NT0RFTV9DT05UUk9MICAgMFgwMAorCisjZGVmaW5lIFNFUklBTFFUX0lPQ19NQVhOUiA2CisKK3N0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgeworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CS8qIHBvaW50ZXIgYmFjayB0byB0aGUgb3duZXIgb2YgdGhpcyBwb3J0ICovCisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsJLyogdGhlIGNvcmVzcG9uZGluZyB0dHkgZm9yIHRoaXMgcG9ydCAqLworCXVuc2lnbmVkIGNoYXIgbnVtYmVyOworCWNoYXIgYWN0aXZlOwkJLyogc29tZW9uZSBoYXMgdGhpcyBkZXZpY2Ugb3BlbiAqLworCisJdW5zaWduZWQgY2hhciAqaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICppbnRlcnJ1cHRfaW5fdXJiOworCV9fdTggaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczsKKworCXVuc2lnbmVkIGNoYXIgKmJ1bGtfaW5fYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKnhmZXJfdG9fdHR5X2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICpyZWFkX3VyYjsKKwlfX3U4IGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOworCisJdW5zaWduZWQgY2hhciAqYnVsa19vdXRfYnVmZmVyOworCWludCBidWxrX291dF9zaXplOworCXN0cnVjdCB1cmIgKndyaXRlX3VyYjsKKwlfX3U4IGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKKworCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCWludCBvcGVuX2NvdW50OwkJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgYmVlbiBvcGVuZWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKworCV9fdTggc2hhZG93TENSOwkJLyogbGFzdCBMQ1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlfX3U4IHNoYWRvd01DUjsJCS8qIGxhc3QgTUNSIHZhbHVlIHJlY2VpdmVkICovCisJX191OCBzaGFkb3dNU1I7CQkvKiBsYXN0IE1TUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTggc2hhZG93TFNSOwkJLyogbGFzdCBMU1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlpbnQgUnhIb2xkaW5nOworCWNoYXIgY2xvc2VQZW5kaW5nOworCWludCBSZWFkQnVsa1N0b3BwZWQ7CisKKwl2b2lkICpwcml2YXRlOwkJLyogZGF0YSBwcml2YXRlIHRvIHRoZSBzcGVjaWZpYyBwb3J0ICovCit9OworCitzdHJ1Y3QgaWRlbnRpdHkgeworCWludCBpbmRleDsKKwlpbnQgbl9pZGVudGl0eTsKK307CisKK3N0cnVjdCB1c2Jfc2VyaWFsIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHR0eV9kcml2ZXIgKnR0eV9kcml2ZXI7CS8qIHRoZSB0dHlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLworCXVuc2lnbmVkIGNoYXIgbWlub3I7CS8qIHRoZSBzdGFydGluZyBtaW5vciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlICovCisJdW5zaWduZWQgY2hhciBudW1fcG9ydHM7CS8qIHRoZSBudW1iZXIgb2YgcG9ydHMgdGhpcyBkZXZpY2UgaGFzICovCisJY2hhciBudW1faW50ZXJydXB0X2luOwkvKiBudW1iZXIgb2YgaW50ZXJydXB0IGluIGVuZHBvaW50cyB3ZSBoYXZlICovCisJY2hhciBudW1fYnVsa19pbjsJLyogbnVtYmVyIG9mIGJ1bGsgaW4gZW5kcG9pbnRzIHdlIGhhdmUgKi8KKwljaGFyIG51bV9idWxrX291dDsJLyogbnVtYmVyIG9mIGJ1bGsgb3V0IGVuZHBvaW50cyB3ZSBoYXZlICovCisJdW5zaWduZWQgY2hhciBudW1fT3BlbkNvdW50OwkvKiB0aGUgbnVtYmVyIG9mIHBvcnRzIHRoaXMgZGV2aWNlIGhhcyAqLworCisJX191MTYgdmVuZG9yOwkJLyogdmVuZG9yIGlkIG9mIHRoaXMgZGV2aWNlICovCisJX191MTYgcHJvZHVjdDsJCS8qIHByb2R1Y3QgaWQgb2YgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IHBvcnRbTUFYX05VTV9QT1JUU107CisKKwl2b2lkICpwcml2YXRlOwkJLyogZGF0YSBwcml2YXRlIHRvIHRoZSBzcGVjaWZpYyBkcml2ZXIgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfcGFyYW5vaWFfY2hlY2soc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwlpZiAoIXBvcnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgPT0gTlVMTCIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIXBvcnQtPnNlcmlhbCkgeworCQlkYmcoIiVzIC0gcG9ydC0+c2VyaWFsID09IE5VTExcbiIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIXBvcnQtPnR0eSkgeworCQlkYmcoIiVzIC0gcG9ydC0+dHR5ID09IE5VTExcbiIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKiBJbmxpbmUgZnVuY3Rpb25zIHRvIGNoZWNrIHRoZSBzYW5pdHkgb2YgYSBwb2ludGVyIHRoYXQgaXMgcGFzc2VkIHRvIHVzICovCitzdGF0aWMgaW5saW5lIGludCBzZXJpYWxfcGFyYW5vaWFfY2hlY2soc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkJY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJaWYgKCFzZXJpYWwpIHsKKwkJZGJnKCIlcyAtIHNlcmlhbCA9PSBOVUxMXG4iLCBmdW5jdGlvbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX3NlcmlhbCAqZ2V0X3VzYl9zZXJpYWwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJCWNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCS8qIGlmIG5vIHBvcnQgd2FzIHNwZWNpZmllZCwgb3IgaXQgZmFpbHMgYSBwYXJhbm9pYSBjaGVjayAqLworCWlmICghcG9ydCB8fAorCSAgICBwb3J0X3BhcmFub2lhX2NoZWNrKHBvcnQsIGZ1bmN0aW9uKSB8fAorCSAgICBzZXJpYWxfcGFyYW5vaWFfY2hlY2socG9ydC0+c2VyaWFsLCBmdW5jdGlvbikpIHsKKwkJLyogdGhlbiBzYXkgdGhhdCB3ZSBkb250IGhhdmUgYSB2YWxpZCB1c2Jfc2VyaWFsIHRoaW5nLCB3aGljaCB3aWxsCisJCSAqIGVuZCB1cCBnZW5yYXRpbmcgLUVOT0RFViByZXR1cm4gdmFsdWVzICovCisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBwb3J0LT5zZXJpYWw7Cit9CisKK3N0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgeworCV9fdTggcG9ydGE7CisJX191OCBwb3J0YjsKKwlfX3U4IHBvcnRjOworfTsKKworc3RydWN0IHF0X29wZW5fY2hhbm5lbF9kYXRhIHsKKwlfX3U4IGxpbmVfc3RhdHVzOworCV9fdTggbW9kZW1fc3RhdHVzOworfTsKKworc3RhdGljIHZvaWQgUHJvY2Vzc0xpbmVTdGF0dXMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgbGluZV9zdGF0dXMpOworc3RhdGljIHZvaWQgUHJvY2Vzc01vZGVtU3RhdHVzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBtb2RlbV9zdGF0dXMpOworc3RhdGljIHZvaWQgUHJvY2Vzc1J4Q2hhcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBjaGFyIERhdGEpOworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpnZXRfZnJlZV9zZXJpYWwoaW50IG51bV9wb3J0cywgaW50ICptaW5vcik7CisKK3N0YXRpYyBpbnQgc2VycXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKK3N0YXRpYyB2b2lkIHNlcnF0X3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworc3RhdGljIGludCBib3hfc2V0X2RldmljZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJICBzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhICpwRGV2aWNlRGF0YSk7CitzdGF0aWMgaW50IGJveF9nZXRfZGV2aWNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkgIHN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgKnBEZXZpY2VEYXRhKTsKK3N0YXRpYyBpbnQgc2VyaWFsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgc2VyaWFsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgc2VyaWFsX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IHNlcmlhbF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHNlcmlhbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CitzdGF0aWMgaW50IHNlcmlhbF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQlpbnQgY291bnQpOworCitzdGF0aWMgdm9pZCBzZXJpYWxfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBzZXJpYWxfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgc2VyaWFsX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50IHNlcmlhbF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisKK3N0YXRpYyBpbnQgcXRfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50IEJveFNldFByZWJ1ZmZlckxldmVsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCitzdGF0aWMgaW50IEJveFNldEFUQyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBuX01vZGUpOworc3RhdGljIGludCBCb3hTZXRVYXJ0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0X2Rpdmlzb3IsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9MQ1IpOworCitzdGF0aWMgaW50IEJveE9QZW5DbG9zZUNoYW5uZWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydF9OdW1iZXIsCisJCQkgICAgICAgX191MTYgT3BlbkNsb3NlLAorCQkJICAgICAgIHN0cnVjdCBxdF9vcGVuX2NoYW5uZWxfZGF0YSAqcERldmljZURhdGEpOworc3RhdGljIHZvaWQgcXRfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBCb3hHZXRSZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBzaG9ydCBVYXJ0X051bWJlciwKKwkJCSAgdW5zaWduZWQgc2hvcnQgUmVnaXN0ZXJfTnVtLCBfX3U4ICpwVmFsdWUpOworc3RhdGljIGludCBCb3hTZXRSZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBzaG9ydCBVYXJ0X051bWJlciwKKwkJCSAgdW5zaWduZWQgc2hvcnQgUmVnaXN0ZXJfTnVtLCB1bnNpZ25lZCBzaG9ydCBWYWx1ZSk7CitzdGF0aWMgdm9pZCBxdF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IHF0X3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBmcm9tX3VzZXIsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBwb3J0X3NvZnRpbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgcXRfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgcXRfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCBxdF9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHF0X3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyBpbnQgQm94U2V0SFdfRmxvd0N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgaW50IFVhcnROdW1iZXIsCisJCQkgICAgIGludCBiU2V0KTsKK3N0YXRpYyBpbnQgQm94RGlzYWJsZV9TV19GbG93Q3RybChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBVYXJ0TnVtYmVyKTsKK3N0YXRpYyBpbnQgRW11bGF0ZVdyaXRlUU1DUl9SZWcoaW50IGluZGV4LCB1bnNpZ25lZCB1Y192YWx1ZSk7CitzdGF0aWMgaW50IEVtdWxhdGVSZWFkUU1DUl9SZWcoaW50IGluZGV4LCB1bnNpZ25lZCAqdWNfdmFsdWUpOworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpmaW5kX3RoZV9ib3godW5zaWduZWQgaW50IGluZGV4KTsKK3N0YXRpYyBpbnQgaW9jdGxfc2VyaWFsX3VzYihzdHJ1Y3QgaW5vZGUgKmlubm9kLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisKK3N0YXRpYyBpbnQgQm94U2V0U1dfRmxvd0N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydCwKKwkJCSAgICAgdW5zaWduZWQgY2hhciBzdG9wX2NoYXIsIHVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhcik7CitzdGF0aWMgdm9pZCBxdF9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKKworc3RhdGljIHZvaWQgcG9ydF9zb2ZyaW50KHZvaWQgKnByaXZhdGUpOworCitzdGF0aWMgdm9pZCByZXR1cm5fc2VyaWFsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCitzdGF0aWMgaW50IHNlcmlhbF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgaW50IHNlcmlhbF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKK3N0YXRpYyBpbnQgcXRfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpOworCitzdGF0aWMgaW50IHF0X3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMTQiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRpbSBHb2JlbGksIFF1YXRlY2gsIEluYyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlF1YXRlY2ggVVNCIHRvIFNlcmlhbCBEcml2ZXIiCisKKyNkZWZpbmUJVVNCX1ZFTkRPUl9JRF9RVUFURUNICQkJMHgwNjFkCS8qIFF1YXRlY2ggVklEICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX1NJTkdMRV9QT1JUCTB4QzAyMAkvKiBTU1UxMDAgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfU0lOR0xFX1BPUlQJMHhDMDMwCS8qIFNTVTIwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9EVUFMX1BPUlQJMHhDMDQwCS8qIERTVTEwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9EVUFMX1BPUlQJMHhDMDUwCS8qIERTVTIwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9GT1VSX1BPUlQJMHhDMDYwCS8qIFFTVTEwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9GT1VSX1BPUlQJMHhDMDcwCS8qIFFTVTIwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0EJMHhDMDgwCS8qIEVTVTEwMEEgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRUlHSFRfUE9SVF9CCTB4QzA4MQkvKiBFU1UxMDBCICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQQkweEMwQTAJLyogRVNVMjAwQSAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9FSUdIVF9QT1JUX0IJMHhDMEExCS8qIEVTVTIwMEIgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9BCTB4QzA5MAkvKiBIU1UxMDBBICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTMjMyXzE2X1BPUlRfQgkweEMwOTEJLyogSFNVMTAwQiAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0MJMHhDMDkyCS8qIEhTVTEwMEMgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9ECTB4QzA5MwkvKiBIU1UxMDBEICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQQkweEMwQjAJLyogSFNVMjAwQSAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0IJMHhDMEIxCS8qIEhTVTIwMEIgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9DCTB4QzBCMgkvKiBIU1UyMDBDICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfRAkweEMwQjMJLyogSFNVMjAwRCAqLworCisvKiB0YWJsZSBvZiBRdWF0ZWNoIGRldmljZXMgICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2VycXRfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9TSU5HTEVfUE9SVCl9LAorCXtVU0JfREVWSUNFCisJIChVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX1NJTkdMRV9QT1JUKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9EVUFMX1BPUlQpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0RVQUxfUE9SVCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRk9VUl9QT1JUKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9GT1VSX1BPUlQpfSwKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0EpfSwKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0IpfSwKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9FSUdIVF9QT1JUX0EpfSwKKwl7VVNCX0RFVklDRQorCSAoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9FSUdIVF9QT1JUX0IpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyXzE2X1BPUlRfQSl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9CKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0MpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyXzE2X1BPUlRfRCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9BKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0IpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQyl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9EKX0sCisJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNlcnF0X3RhYmxlKTsKKworc3RhdGljIGludCBtYWpvcl9udW1iZXI7CitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbF90YWJsZVtTRVJJQUxfVFRZX01JTk9SU107CS8qIGluaXRpYWxseSBhbGwgTlVMTCAqLworCisvKiB0YWJsZSBvZiBRdWF0ZWNoIDQyMmRldmljZXMgICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcnF0XzQyMl90YWJsZVtdID0geworCURFVklDRV9JRF9RVUFURUNIX1JTNDIyX1NJTkdMRV9QT1JULAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyX0RVQUxfUE9SVCwKKwlERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9GT1VSX1BPUlQsCisJREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRUlHSFRfUE9SVF9BLAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQiwKKwlERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0EsCisJREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9CLAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQywKKwlERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0QsCisJMAkJCS8qIHRlcm1pbmF0ZSB3aXRoIHplcm8gKi8KK307CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZXJxdF91c2JfZHJpdmVyID0geworCS5uYW1lID0gInF1YXRlY2gtdXNiLXNlcmlhbCIsCisJLnByb2JlID0gc2VycXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBzZXJxdF91c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBzZXJxdF90YWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga3Rlcm1pb3MgKnNlcmlhbF90ZXJtaW9zW1NFUklBTF9UVFlfTUlOT1JTXTsKK3N0YXRpYyBzdHJ1Y3Qga3Rlcm1pb3MgKnNlcmlhbF90ZXJtaW9zX2xvY2tlZFtTRVJJQUxfVFRZX01JTk9SU107CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2VyaWFsX29wcyA9IHsKKwkub3BlbiA9IHNlcmlhbF9vcGVuLAorCS5jbG9zZSA9IHNlcmlhbF9jbG9zZSwKKwkud3JpdGUgPSBzZXJpYWxfd3JpdGUsCisJLndyaXRlX3Jvb20gPSBzZXJpYWxfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPSBzZXJpYWxfaW9jdGwsCisJLnNldF90ZXJtaW9zID0gc2VyaWFsX3NldF90ZXJtaW9zLAorCS50aHJvdHRsZSA9IHNlcmlhbF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9IHNlcmlhbF91bnRocm90dGxlLAorCS5icmVha19jdGwgPSBzZXJpYWxfYnJlYWssCisJLmNoYXJzX2luX2J1ZmZlciA9IHNlcmlhbF9jaGFyc19pbl9idWZmZXIsCisJLnRpb2Ntc2V0ID0gc2VyaWFsX3Rpb2Ntc2V0LAorCS50aW9jbWdldCA9IHNlcmlhbF90aW9jbWdldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciBzZXJpYWxfdHR5X2RyaXZlciA9IHsKKwkubWFnaWMgPSBUVFlfRFJJVkVSX01BR0lDLAorCS5kcml2ZXJfbmFtZSA9ICJRdWF0ZWNoIHVzYi1zZXJpYWwiLAorCS5uYW1lID0gInR0eVFUX1VTQiIsCisJLm1ham9yID0gU0VSSUFMX1RUWV9NQUpPUiwKKwkubWlub3Jfc3RhcnQgPSAwLAorCS5udW0gPSBTRVJJQUxfVFRZX01JTk9SUywKKwkudHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUwsCisJLnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUwsCisJLmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVYsCisKKwkudGVybWlvcyA9IHNlcmlhbF90ZXJtaW9zLAorCS50ZXJtaW9zX2xvY2tlZCA9IHNlcmlhbF90ZXJtaW9zX2xvY2tlZCwKKwkuaW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUwsCisKKwkuaW5pdF90ZXJtaW9zLmNfaWZsYWcgPSBJQ1JOTCB8IElYT04sCisJLmluaXRfdGVybWlvcy5jX29mbGFnID0gT1BPU1QsCisKKwkuaW5pdF90ZXJtaW9zLmNfbGZsYWcgPQorCSAgICBJU0lHIHwgSUNBTk9OIHwgRUNITyB8IEVDSE9FIHwgRUNIT0sgfCBFQ0hPQ1RMIHwgRUNIT0tFIHwgSUVYVEVOLAorfTsKKworLyogZm9wcyBmb3IgcGFyZW50IGRldmljZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VyaWFscXRfdXNiX2ZvcHMgPSB7CisJLmlvY3RsID0gaW9jdGxfc2VyaWFsX3VzYiwKK307CisKKyAvKioKKyAqCSAgc2VycXRfcHJvYmUKKyAqCisgKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0aGF0IGl0IHRoaW5rcworICoJdGhpcyBkcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbi4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc2VycXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBOVUxMOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9pbl9lbmRwb2ludFtNQVhfTlVNX1BPUlRTXTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfaW5fZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX291dF9lbmRwb2ludFtNQVhfTlVNX1BPUlRTXTsKKwlpbnQgbWlub3I7CisJaW50IGJ1ZmZlcl9zaXplOworCWludCBpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJaW50IG51bV9pbnRlcnJ1cHRfaW4gPSAwOworCWludCBudW1fYnVsa19pbiA9IDA7CisJaW50IG51bV9idWxrX291dCA9IDA7CisJaW50IG51bV9wb3J0czsKKwlzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhIERldmljZURhdGE7CisJaW50IHN0YXR1czsKKworCW15ZGJnKCJJbiAlc1xuIiwgX19mdW5jX18pOworCisJLyogbGV0J3MgZmluZCB0aGUgZW5kcG9pbnRzIG5lZWRlZCAqLworCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7OworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLworCQkJbXlkYmcoImZvdW5kIGJ1bGsgaW4iKTsKKwkJCWJ1bGtfaW5fZW5kcG9pbnRbbnVtX2J1bGtfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9idWxrX2luOworCQl9CisKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwkJCW15ZGJnKCJmb3VuZCBidWxrIG91dFxuIik7CisJCQlidWxrX291dF9lbmRwb2ludFtudW1fYnVsa19vdXRdID0gZW5kcG9pbnQ7CisJCQkrK251bV9idWxrX291dDsKKwkJfQorCisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCisJCQlteWRiZygiZm91bmQgaW50ZXJydXB0IGluXG4iKTsKKwkJCWludGVycnVwdF9pbl9lbmRwb2ludFtudW1faW50ZXJydXB0X2luXSA9IGVuZHBvaW50OworCQkJKytudW1faW50ZXJydXB0X2luOworCQl9CisJfQorCisJLyogZm91bmQgYWxsIHRoYXQgd2UgbmVlZCAqLworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlF1YXRlY2ggY29udmVydGVyIGRldGVjdGVkXG4iKTsKKwludW1fcG9ydHMgPSBudW1fYnVsa19vdXQ7CisJaWYgKG51bV9wb3J0cyA9PSAwKSB7CisJCWVycigiUXVhdGVjaCBkZXZpY2Ugd2l0aCBubyBidWxrIG91dCwgbm90IGFsbG93ZWQuIik7CisJCXJldHVybiAtRU5PREVWOworCisJfQorCisJc2VyaWFsID0gZ2V0X2ZyZWVfc2VyaWFsKG51bV9wb3J0cywgJm1pbm9yKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpIHsKKwkJZXJyKCJObyBtb3JlIGZyZWUgc2VyaWFsIGRldmljZXMiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc2VyaWFsLT5kZXYgPSBkZXY7CisJc2VyaWFsLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJc2VyaWFsLT5taW5vciA9IG1pbm9yOworCXNlcmlhbC0+bnVtX3BvcnRzID0gbnVtX3BvcnRzOworCXNlcmlhbC0+bnVtX2J1bGtfaW4gPSBudW1fYnVsa19pbjsKKwlzZXJpYWwtPm51bV9idWxrX291dCA9IG51bV9idWxrX291dDsKKwlzZXJpYWwtPm51bV9pbnRlcnJ1cHRfaW4gPSBudW1faW50ZXJydXB0X2luOworCXNlcmlhbC0+dmVuZG9yID0gZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yOworCXNlcmlhbC0+cHJvZHVjdCA9IGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3Q7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKKwkJZW5kcG9pbnQgPSBidWxrX2luX2VuZHBvaW50W2ldOworCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJcG9ydC0+cmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPnJlYWRfdXJiKSB7CisJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCX0KKwkJYnVmZmVyX3NpemUgPSBlbmRwb2ludC0+d01heFBhY2tldFNpemU7CisJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCXBvcnQtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXBvcnQtPnhmZXJfdG9fdHR5X2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBkZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGV2LAorCQkJCQkJICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJICBwb3J0LT5idWxrX2luX2J1ZmZlciwgYnVmZmVyX3NpemUsCisJCQkJICBxdF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19vdXQ7ICsraSkgeworCQllbmRwb2ludCA9IGJ1bGtfb3V0X2VuZHBvaW50W2ldOworCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0LT53cml0ZV91cmIpIHsKKwkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQlidWZmZXJfc2l6ZSA9IGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZTsKKwkJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydC0+YnVsa19vdXRfYnVmZmVyKSB7CisJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfb3V0X2J1ZmZlciIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIGRldiwKKwkJCQkgIHVzYl9zbmRidWxrcGlwZShkZXYsCisJCQkJCQkgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgIHBvcnQtPmJ1bGtfb3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsCisJCQkJICBxdF93cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKworCX0KKworCS8qIEZvciB1cyBudW1iIG9mIGJ1bGtpbiAgb3Igb3V0ID0gbnVtYmVyIG9mIHBvcnRzICovCisJbXlkYmcoIiVzIC0gc2V0dGluZyB1cCAlZCBwb3J0IHN0cnVjdHVyZXMgZm9yIHRoaXMgZGV2aWNlXG4iLAorCSAgICAgIF9fZnVuY19fLCBudW1fYnVsa19pbik7CisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKKwkJcG9ydCA9ICZzZXJpYWwtPnBvcnRbaV07CisJCXBvcnQtPm51bWJlciA9IGkgKyBzZXJpYWwtPm1pbm9yOworCQlwb3J0LT5zZXJpYWwgPSBzZXJpYWw7CisKKwkJSU5JVF9XT1JLKCZwb3J0LT53b3JrLCBwb3J0X3NvZnRpbnQpOworCisJCWluaXRfTVVURVgoJnBvcnQtPnNlbSk7CisKKwl9CisJc3RhdHVzID0gYm94X2dldF9kZXZpY2Uoc2VyaWFsLCAmRGV2aWNlRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gImJveF9nZXRfZGV2aWNlIGZhaWxlZCIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKworCW15ZGJnKF9fRklMRV9fICJEZXZpY2VEYXRhLnBvcnRiID0gMHgleCIsIERldmljZURhdGEucG9ydGIpOworCisJRGV2aWNlRGF0YS5wb3J0YiAmPSB+RlVMTFBXUkJJVDsKKwlteWRiZyhfX0ZJTEVfXyAiQ2hhbmdpbmcgRGV2aWNlRGF0YS5wb3J0YiB0byAweCV4IiwgRGV2aWNlRGF0YS5wb3J0Yik7CisKKwlzdGF0dXMgPSBib3hfc2V0X2RldmljZShzZXJpYWwsICZEZXZpY2VEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiYm94X3NldF9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisKKwkvKiBpbml0aWFsaXplIHRoZSBkZXZmcyBub2RlcyBmb3IgdGhpcyBkZXZpY2UgYW5kIGxldCB0aGUgdXNlciBrbm93IHdoYXQgcG9ydHMgd2UgYXJlIGJvdW5kIHRvICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAorCQkJICJDb252ZXJ0ZXIgbm93IGF0dGFjaGVkIHRvIHR0eVVTQiVkIChvciB1c2IvdHRzLyVkIGZvciBkZXZmcykiLAorCQkJIHNlcmlhbC0+cG9ydFtpXS5udW1iZXIsIHNlcmlhbC0+cG9ydFtpXS5udW1iZXIpOworCX0KKworCS8qIHVzYl9zZXJpYWxfY29uc29sZV9pbml0IChkZWJ1ZywgbWlub3IpOyAqLworCisJLyoqKioqKioqKioqVEFHIGFkZCBzdGFydCBuZXh0IGJvYXJkIGhlcmUgKioqKi8KKwlzdGF0dXMgPSBib3hfZ2V0X2RldmljZShzZXJpYWwsICZEZXZpY2VEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiYm94X2dldF9kZXZpY2UgZmFpbGVkIik7CisJCWdvdG8gcHJvYmVfZXJyb3I7CisJfQorCS8qCisJICogYW5kIGJlZm9yZSB3ZSBwb3dlciB1cCBsZXRzIGluaXRpYWxpYXplIHBhcm5lbnQgZGV2aWNlIHN0dWZmIGhlcmUgYmVmb3JlCisJICogd2Ugc2V0IHRobWVtIHZpYSBhbnkgb3RoZXIgbWV0aG9kIHN1Y2ggYXMgdGhlIHByb3BlcnR5IHBhZ2VzCisJICovCisJc3dpdGNoIChzZXJpYWwtPnByb2R1Y3QpIHsKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX1NJTkdMRV9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRFVBTF9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRk9VUl9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRUlHSFRfUE9SVF9BOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfRUlHSFRfUE9SVF9COgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9BOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9COgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9DOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9EOgorCQlEZXZpY2VEYXRhLnBvcnRhICY9IH4oUlJfQklUUyB8IERVUE1PREVfQklUUyk7CisJCURldmljZURhdGEucG9ydGEgfD0gQ0xLU19YNDsKKwkJRGV2aWNlRGF0YS5wb3J0YiAmPSB+KExPT1BNT0RFX0JJVFMpOworCQlEZXZpY2VEYXRhLnBvcnRiIHw9IFJTMjMyX01PREU7CisJCWJyZWFrOworCisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9TSU5HTEVfUE9SVDoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0RVQUxfUE9SVDoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0ZPVVJfUE9SVDoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQToKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQjoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQToKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQjoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQzoKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfRDoKKwkJRGV2aWNlRGF0YS5wb3J0YSAmPSB+KFJSX0JJVFMgfCBEVVBNT0RFX0JJVFMpOworCQlEZXZpY2VEYXRhLnBvcnRhIHw9IENMS1NfWDQ7CisJCURldmljZURhdGEucG9ydGIgJj0gfihMT09QTU9ERV9CSVRTKTsKKwkJRGV2aWNlRGF0YS5wb3J0YiB8PSBBTExfTE9PUEJBQ0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURldmljZURhdGEucG9ydGEgJj0gfihSUl9CSVRTIHwgRFVQTU9ERV9CSVRTKTsKKwkJRGV2aWNlRGF0YS5wb3J0YSB8PSBDTEtTX1g0OworCQlEZXZpY2VEYXRhLnBvcnRiICY9IH4oTE9PUE1PREVfQklUUyk7CisJCURldmljZURhdGEucG9ydGIgfD0gUlMyMzJfTU9ERTsKKwkJYnJlYWs7CisKKwl9CisJc3RhdHVzID0gQm94U2V0UHJlYnVmZmVyTGV2ZWwoc2VyaWFsKTsJLyogc2V0cyB0byBkZWZhdWx0IHZhdWUgKi8KKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0UHJlYnVmZmVyTGV2ZWwgZmFpbGVkXG4iKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBCb3hTZXRBVEMoc2VyaWFsLCBBVENfRElTQUJMRUQpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRBVEMgZmFpbGVkXG4iKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJbXlkYmcoX19GSUxFX18gIkRldmljZURhdGEucG9ydGIgPSAweCV4IiwgRGV2aWNlRGF0YS5wb3J0Yik7CisKKwlEZXZpY2VEYXRhLnBvcnRiIHw9IE5FWFRfQk9BUkRfUE9XRVJfQklUOworCW15ZGJnKF9fRklMRV9fICJDaGFuZ2luZyBEZXZpY2VEYXRhLnBvcnRiIHRvIDB4JXgiLCBEZXZpY2VEYXRhLnBvcnRiKTsKKworCXN0YXR1cyA9IGJveF9zZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfc2V0X2RldmljZSBmYWlsZWRcbiIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKworCW15ZGJnKCJFeGl0IFN1Y2Nlc3MgJXNcbiIsIF9fZnVuY19fKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBzZXJpYWwpOworCXJldHVybiAwOworCitwcm9iZV9lcnJvcjoKKworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19pbjsgKytpKSB7CisJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQl1c2JfZnJlZV91cmIocG9ydC0+cmVhZF91cmIpOworCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19vdXQ7ICsraSkgeworCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJdXNiX2ZyZWVfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CisJCWtmcmVlKHBvcnQtPnhmZXJfdG9fdHR5X2J1ZmZlcik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJydXB0X2luOyArK2kpIHsKKwkJcG9ydCA9ICZzZXJpYWwtPnBvcnRbaV07CisJCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJa2ZyZWUocG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CisJfQorCisJLyogcmV0dXJuIHRoZSBtaW5vciByYW5nZSB0aGF0IHRoaXMgZGV2aWNlIGhhZCAqLworCXJldHVybl9zZXJpYWwoc2VyaWFsKTsKKwlteWRiZygiRXhpdCBmYWlsICVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KKwlrZnJlZShzZXJpYWwpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogcmV0dXJucyB0aGUgc2VyaWFsX3RhYmxlIGFycmF5IHBvaW50ZXJzIHRoYXQgYXJlIHRha2VuCisgKiB1cCBpbiBjb25zZWN1dGl2ZSBwb3NpdGlvbnMgZm9yIGVhY2ggcG9ydCB0byBhIGNvbW1vbiB1c2Jfc2VyaWFsIHN0cnVjdHVyZQorICogYmFjayB0byBOVUxMCisgKi8KK3N0YXRpYyB2b2lkIHJldHVybl9zZXJpYWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKworCW15ZGJnKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHNlcmlhbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkKKwkJc2VyaWFsX3RhYmxlW3NlcmlhbC0+bWlub3IgKyBpXSA9IE5VTEw7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBGaW5kcyB0aGUgZmlyc3QgbG9jYXRpbyBpbnQgdGhlIHNlcmlhbF90YWJsZSBhcnJheSB3aGVyZSBpdCBjYW4gZml0CisgKiBudW1fcG9ydHMgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHBvaW50cyB0byBhIGNvbW1vbiB1c2Jfc2VyaWFsCisgKiBzdHJ1Y3R1cmUsYWxsb2NhdGVzIGEgc3R1Y3R1cmUgcG9pbnRzIHRvIGl0IGluIGFsbCB0aGUgc3RydWN0dXJlcywgYW5kCisgKiByZXR1cm5zIHRoZSBpbmRleCB0byB0aGUgZmlyc3QgbG9jYXRpb24gaW4gdGhlIGFycmF5IGluIHRoZSAibWlub3IiCisgKiB2YXJpYWJsZS4KKyAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpnZXRfZnJlZV9zZXJpYWwoaW50IG51bV9wb3J0cywgaW50ICptaW5vcikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gTlVMTDsKKwlpbnQgaSwgajsKKwlpbnQgZ29vZF9zcG90OworCisJbXlkYmcoIiVzICVkXG4iLCBfX2Z1bmNfXywgbnVtX3BvcnRzKTsKKworCSptaW5vciA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpIHsKKwkJaWYgKHNlcmlhbF90YWJsZVtpXSkKKwkJCWNvbnRpbnVlOworCisJCWdvb2Rfc3BvdCA9IDE7CisJCS8qCisJCSAqIGZpbmQgYSBzcG90IGluIHRoZSBhcnJheSB3aGVyZSB5b3UgY2FuIGZpdCBjb25zZWN1dGl2ZQorCQkgKiBwb3NpdGlvbnMgdG8gcHV0IHRoZSBwb2ludGVycyB0byB0aGUgdXNiX3NlcmFpbCBhbGxvY2F0ZWQKKwkJICogc3RydWN0dXJlIGZvciBhbGwgdGhlIG1pbm9yIG51bWJlcnMgKGllLiBwb3J0cykKKwkJICovCisJCWZvciAoaiA9IDE7IGogPD0gbnVtX3BvcnRzIC0gMTsgKytqKQorCQkJaWYgKHNlcmlhbF90YWJsZVtpICsgal0pCisJCQkJZ29vZF9zcG90ID0gMDsKKwkJaWYgKGdvb2Rfc3BvdCA9PSAwKQorCQkJY29udGludWU7CisKKwkJc2VyaWFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzZXJpYWwpIHsKKwkJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJbWVtc2V0KHNlcmlhbCwgMCwgc2l6ZW9mKHN0cnVjdCB1c2Jfc2VyaWFsKSk7CisJCXNlcmlhbF90YWJsZVtpXSA9IHNlcmlhbDsKKwkJKm1pbm9yID0gaTsKKwkJbXlkYmcoIiVzIC0gbWlub3IgYmFzZSA9ICVkXG4iLCBfX2Z1bmNfXywgKm1pbm9yKTsKKworCQkvKgorCQkgKiBjb3B5IGluIHRoZSBwb2ludGVyIGludG8gdGhlIGFycmF5IHN0YXJ0aW5nIGEgdGhlICptaW5vcgorCQkgKiBwb3NpdGlvbiBtaW5vciBpcyB0aGUgaW5kZXggaW50byB0aGUgYXJyYXkuCisJCSAqLworCQlmb3IgKGkgPSAqbWlub3IgKyAxOworCQkgICAgIChpIDwgKCptaW5vciArIG51bV9wb3J0cykpICYmIChpIDwgU0VSSUFMX1RUWV9NSU5PUlMpOyArK2kpCisJCQlzZXJpYWxfdGFibGVbaV0gPSBzZXJpYWw7CisJCXJldHVybiBzZXJpYWw7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGZsaXBfdGhhdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBfX3UxNiBVYXJ0TnVtYmVyLAorCQkgICAgIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl0dHlfc2NoZWR1bGVfZmxpcCh0dHkpOworCXJldHVybiAwOworfQorCisvKiBIYW5kbGVzIHByb2Nlc3NpbmcgYW5kIG1vdmluZyBkYXRhIHRvIHRoZSB0dHkgbGF5ZXIgKi8KK3N0YXRpYyB2b2lkIHBvcnRfc29mcmludCh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXByaXZhdGU7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCXN0cnVjdCB1cmIgKnVyYiA9IHBvcnQtPnJlYWRfdXJiOworCXVuc2lnbmVkIGludCBSeENvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCBpLCByZXN1bHQ7CisJaW50IGZsYWcsIGZsYWdfZGF0YTsKKworCS8qIFVhcnROdW1iZXIgPSBNSU5PUihwb3J0LT50dHktPmRldmljZSkgLSBzZXJpYWwtPm1pbm9yOyAqLworCVVhcnROdW1iZXIgPSB0dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCW15ZGJnKCIlcyAtIHBvcnQtPlJ4SG9sZGluZyA9ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+UnhIb2xkaW5nKTsKKworCWlmIChwb3J0X3BhcmFub2lhX2NoZWNrKHBvcnQsIF9fZnVuY19fKSAhPSAwKSB7CisJCW15ZGJnKCIlcyAtIHBvcnRfcGFyYW5vaWFfY2hlY2ssIGV4aXRpbmdcbiIsIF9fZnVuY19fKTsKKwkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMTsKKwkJcmV0dXJuOworCX0KKworCWlmICghc2VyaWFsKSB7CisJCW15ZGJnKCIlcyAtIGJhZCBzZXJpYWwgcG9pbnRlciwgZXhpdGluZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWlmIChwb3J0LT5jbG9zZVBlbmRpbmcgPT0gMSkgeworCQkvKiBXZXJlIGNsb3NpbmcgLCBzdG9wIHJlYWRpbmcgKi8KKwkJbXlkYmcoIiVzIC0gKHBvcnQtPmNsb3NlcGVuZGluZyA9PSAxXG4iLCBfX2Z1bmNfXyk7CisJCXBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9IDE7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJ4SG9sZGluZyBpcyBhc3NlcnRlZCBieSB0aHJvdHRsZSwgaWYgd2UgYXNzZXJ0IGl0LCB3ZSdyZSBub3QKKwkgKiByZWNlaXZpbmcgYW55IG1vcmUgY2hhcmFjdGVycyBhbmQgbGV0IHRoZSBib3ggaGFuZGxlIHRoZSBmbG93CisJICogY29udHJvbAorCSAqLworCWlmIChwb3J0LT5SeEhvbGRpbmcgPT0gMSkgeworCQlwb3J0LT5SZWFkQnVsa1N0b3BwZWQgPSAxOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCXBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9IDE7CisKKwkJbXlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXR0eSA9IHBvcnQtPnR0eTsKKwlteWRiZygiJXMgLSBwb3J0ICVkLCB0dHkgPTB4JXBcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIHR0eSk7CisKKwlpZiAodHR5ICYmIFJ4Q291bnQpIHsKKwkJZmxhZ19kYXRhID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IFJ4Q291bnQ7ICsraSkgeworCQkJLyogTG9vayBhaGVhZCBjb2RlIGhlcmUgKi8KKwkJCWlmICgoaSA8PSAoUnhDb3VudCAtIDMpKSAmJiAoVEhJU0NIQVIgPT0gMHgxYikKKwkJCSAgICAmJiAoTkVYVENIQVIgPT0gMHgxYikpIHsKKwkJCQlmbGFnID0gMDsKKwkJCQlzd2l0Y2ggKFRISVJEQ0hBUikgeworCQkJCWNhc2UgMHgwMDoKKwkJCQkJLyogTGluZSBzdGF0dXMgY2hhbmdlIDR0aCBieXRlIG11c3QgZm9sbG93ICovCisJCQkJCWlmIChpID4gKFJ4Q291bnQgLSA0KSkgeworCQkJCQkJbXlkYmcoIklsbGVnYWwgZXNjYXBlIHNlcXVlbmNlcyBpbiByZWNlaXZlZCBkYXRhXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCVByb2Nlc3NMaW5lU3RhdHVzKHBvcnQsIEZPVVJUSENIQVIpOworCQkJCQlpICs9IDM7CisJCQkJCWZsYWcgPSAxOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMHgwMToKKwkJCQkJLyogTW9kZW0gc3RhdHVzIHN0YXR1cyBjaGFuZ2UgNHRoIGJ5dGUgbXVzdCBmb2xsb3cgKi8KKwkJCQkJbXlkYmcoIk1vZGVtIHN0YXR1cyBzdGF0dXMuIFxuIik7CisJCQkJCWlmIChpID4gKFJ4Q291bnQgLSA0KSkgeworCQkJCQkJbXlkYmcKKwkJCQkJCSAgICAoIklsbGVnYWwgZXNjYXBlIHNlcXVlbmNlcyBpbiByZWNlaXZlZCBkYXRhXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCVByb2Nlc3NNb2RlbVN0YXR1cyhwb3J0LCBGT1VSVEhDSEFSKTsKKwkJCQkJaSArPSAzOworCQkJCQlmbGFnID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweGZmOgorCQkJCQlteWRiZygiTm8gc3RhdHVzIHNlcXVlbmNlLiBcbiIpOworCisJCQkJCVByb2Nlc3NSeENoYXIocG9ydCwgVEhJU0NIQVIpOworCQkJCQlQcm9jZXNzUnhDaGFyKHBvcnQsIE5FWFRDSEFSKTsKKwkJCQkJaSArPSAyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKGZsYWcgPT0gMSkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCAxKTsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgKGRhdGEgKyBpKSwgMSk7CisJCQl9CisKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICBxdF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlteWRiZygiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCSAgICAgIF9fZnVuY19fLCByZXN1bHQpOworCWVsc2UgeworCQlpZiAodHR5ICYmIFJ4Q291bnQpCisJCQlmbGlwX3RoYXQodHR5LCBVYXJ0TnVtYmVyLCBzZXJpYWwpOworCX0KKworCXJldHVybjsKKworfQorCitzdGF0aWMgdm9pZCBxdF9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCXBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9IDE7CisJCW15ZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJcG9ydF9zb2ZyaW50KCh2b2lkICopcG9ydCk7CisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIFByb2Nlc3NSeENoYXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdW5zaWduZWQgY2hhciBEYXRhKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IHVyYiAqdXJiID0gcG9ydC0+cmVhZF91cmI7CisJdHR5ID0gcG9ydC0+dHR5OworCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0uICovCisKKwlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIDEpOworCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgJkRhdGEsIDEpOworCQkvKiB0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOyAqLworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgUHJvY2Vzc0xpbmVTdGF0dXMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgbGluZV9zdGF0dXMpCit7CisKKwlwb3J0LT5zaGFkb3dMU1IgPQorCSAgICBsaW5lX3N0YXR1cyAmIChTRVJJQUxfTFNSX09FIHwgU0VSSUFMX0xTUl9QRSB8IFNFUklBTF9MU1JfRkUgfAorCQkJICAgU0VSSUFMX0xTUl9CSSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBQcm9jZXNzTW9kZW1TdGF0dXMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG1vZGVtX3N0YXR1cykKK3sKKworCXBvcnQtPnNoYWRvd01TUiA9IG1vZGVtX3N0YXR1czsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPndhaXQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2VycXRfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCS8qIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCWludCBpOworCisJbXlkYmcoIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKHNlcmlhbCkgeworCisJCXNlcmlhbC0+ZGV2ID0gTlVMTDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkKKwkJCXNlcmlhbC0+cG9ydFtpXS5vcGVuX2NvdW50ID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fYnVsa19pbjsgKytpKSB7CisJCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJCXVzYl91bmxpbmtfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihwb3J0LT5yZWFkX3VyYik7CisJCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX2J1bGtfb3V0OyArK2kpIHsKKwkJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQkJdXNiX3VubGlua191cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOworCQkJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1faW50ZXJydXB0X2luOyArK2kpIHsKKwkJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQkJdXNiX3VubGlua191cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKwl9CisKKwkJLyogcmV0dXJuIHRoZSBtaW5vciByYW5nZSB0aGF0IHRoaXMgZGV2aWNlIGhhZCAqLworCQlyZXR1cm5fc2VyaWFsKHNlcmlhbCk7CisKKwkJLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCisJCWtmcmVlKHNlcmlhbCk7CisKKwl9IGVsc2UgeworCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJkZXZpY2UgZGlzY29ubmVjdGVkIik7CisJfQorCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqZ2V0X3NlcmlhbF9ieV9taW5vcih1bnNpZ25lZCBpbnQgbWlub3IpCit7CisJcmV0dXJuIHNlcmlhbF90YWJsZVttaW5vcl07Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNlcmlhbF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBpbnQgcG9ydE51bWJlcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCW15ZGJnKCIlc1xuIiwgX19mdW5jX18pOworCisJLyogaW5pdGlhbGl6ZSB0aGUgcG9pbnRlciBpbmNhc2Ugc29tZXRoaW5nIGZhaWxzICovCisJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwkvKiBnZXQgdGhlIHNlcmlhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHR5IHBvaW50ZXIgKi8KKwkvKiBzZXJpYWwgPSBnZXRfc2VyaWFsX2J5X21pbm9yIChNSU5PUih0dHktPmRldmljZSkpOyAqLworCisJLyogZ2V0IHRoZSBzZXJpYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHR0eSBwb2ludGVyICovCisJc2VyaWFsID0gZ2V0X3NlcmlhbF9ieV9taW5vcih0dHktPmluZGV4KTsKKworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soc2VyaWFsLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRU5PREVWOworCisJLyogc2V0IHVwIG91ciBwb3J0IHN0cnVjdHVyZSBtYWtpbmcgdGhlIHR0eSBkcml2ZXIgcmVtZW1iZXIgb3VyIHBvcnQgb2JqZWN0LCBhbmQgdXMgaXQgKi8KKwlwb3J0TnVtYmVyID0gdHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisJcG9ydCA9ICZzZXJpYWwtPnBvcnRbcG9ydE51bWJlcl07CisJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCXBvcnQtPnR0eSA9IHR0eTsKKworCSsrcG9ydC0+b3Blbl9jb3VudDsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAxKSB7CisJCXBvcnQtPmNsb3NlUGVuZGluZyA9IDA7CisJCW15ZGJnKCIlcyBwb3J0LT5jbG9zZXBlbmRpbmcgPSAwXG4iLCBfX2Z1bmNfXyk7CisKKwkJcG9ydC0+UnhIb2xkaW5nID0gMDsKKwkJbXlkYmcoIiVzIHBvcnQtPlJ4SG9sZGluZyA9IDBcbiIsIF9fZnVuY19fKTsKKworCQlyZXR2YWwgPSBxdF9vcGVuKHBvcnQsIGZpbHApOworCX0KKworCWlmIChyZXR2YWwpCisJCXBvcnQtPm9wZW5fY291bnQgPSAwOworCW15ZGJnKCIlcyByZXR1cm5pbmcgcG9ydC0+Y2xvc2VQZW5kaW5nICA9ICVkXG4iLCBfX2Z1bmNfXywKKwkgICAgICBwb3J0LT5jbG9zZVBlbmRpbmcpOworCisJdXAoJnBvcnQtPnNlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKmRldmljZSdzIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcXRfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCXN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgRGV2aWNlRGF0YTsKKwlzdHJ1Y3QgcXRfb3Blbl9jaGFubmVsX2RhdGEgQ2hhbm5lbERhdGE7CisJdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9kaXZpc29yID0gMHgzMDsJCS8qIGdpdmVzIDk2MDAgYmF1ZCByYXRlICovCisJdW5zaWduZWQgY2hhciBkZWZhdWx0X0xDUiA9IFNFUklBTF84X0RBVEE7CS8qIDgsIG5vbmUgLCAxICovCisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAocG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX2Z1bmNfXykpCisJCXJldHVybiAtRU5PREVWOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEgdGhyb3VnaCwKKwkgICBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2Ugd2l0aCBPSENJKSBkYXRhCisJICAgY2FuIGdldCBsb3N0LiAqLworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAwOworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJc3RhdHVzID0gYm94X2dldF9kZXZpY2Uoc2VyaWFsLCAmRGV2aWNlRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gImJveF9nZXRfZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCXNlcmlhbC0+bnVtX09wZW5Db3VudCsrOworCW15ZGJnKCIlcyBzZXJpYWwtPm51bV9PcGVuQ291bnQgID0gJWRcbiIsIF9fZnVuY19fLAorCSAgICAgIHNlcmlhbC0+bnVtX09wZW5Db3VudCk7CisJLyogT3BlbiB1YXJ0IGNoYW5uZWwgKi8KKworCS8qIFBvcnQgc3BlY2lmaWMgc2V0dXBzICovCisJc3RhdHVzID0gQm94T1BlbkNsb3NlQ2hhbm5lbChzZXJpYWwsIFVhcnROdW1iZXIsIDEsICZDaGFubmVsRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gIkJveE9QZW5DbG9zZUNoYW5uZWwgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJbXlkYmcoX19GSUxFX18gIkJveE9QZW5DbG9zZUNoYW5uZWwgY29tcGxldGVkLlxuIik7CisKKwlwb3J0LT5zaGFkb3dMU1IgPSBDaGFubmVsRGF0YS5saW5lX3N0YXR1cyAmCisJICAgIChTRVJJQUxfTFNSX09FIHwgU0VSSUFMX0xTUl9QRSB8IFNFUklBTF9MU1JfRkUgfCBTRVJJQUxfTFNSX0JJKTsKKworCXBvcnQtPnNoYWRvd01TUiA9IENoYW5uZWxEYXRhLm1vZGVtX3N0YXR1cyAmCisJICAgIChTRVJJQUxfTVNSX0NUUyB8IFNFUklBTF9NU1JfRFNSIHwgU0VSSUFMX01TUl9SSSB8IFNFUklBTF9NU1JfQ0QpOworCisJLyogU2V0IEJhdWQgcmF0ZSB0byBkZWZhdWx0IGFuZCB0dXJuIG9mZiAoZGVmYXVsdClmbG93IGNvbnRyb2wgaGVyZSAqLworCXN0YXR1cyA9IEJveFNldFVhcnQoc2VyaWFsLCBVYXJ0TnVtYmVyLCBkZWZhdWx0X2Rpdmlzb3IsIGRlZmF1bHRfTENSKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0VWFydCBmYWlsZWRcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlteWRiZyhfX0ZJTEVfXyAiQm94U2V0VWFydCBjb21wbGV0ZWQuXG4iKTsKKworCS8qIFB1dCB0aGlzIGhlcmUgdG8gbWFrZSBpdCByZXNwb25zaXZlIHRvIHN0dHkgYW5kIGRlZmF1bHMgc2V0IGJ5IHRoZSB0dHkgbGF5ZXIgKi8KKwlxdF9zZXRfdGVybWlvcyhwb3J0LCBOVUxMKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHdhaXQgcXVlIGhlYWQgKi8KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYocG9ydC0+d2FpdCkpOworCisJLyogaWYgd2UgaGF2ZSBhIGJ1bGsgZW5kcG9pbnQsIHN0YXJ0IHJlYWRpbmcgZnJvbSBpdCAqLworCWlmIChzZXJpYWwtPm51bV9idWxrX2luKSB7CisJCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCSAgcG9ydC0+CisJCQkJCQkgIGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgIHF0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMDsKKworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJICAgIF9fZnVuY19fLCByZXN1bHQpOworCQkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMTsKKwkJfQorCisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBpZiBkaXNjb25uZWN0IGJlYXQgdXMgdG8gdGhlIHB1bmNoIGhlcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBkbyAqLworCWlmICh0dHktPmRyaXZlcl9kYXRhKSB7CisJCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkXG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQktLXBvcnQtPm9wZW5fY291bnQ7CisJCWlmIChwb3J0LT5vcGVuX2NvdW50IDw9IDApIHsKKwkJCXBvcnQtPmNsb3NlUGVuZGluZyA9IDE7CisJCQlteWRiZygiJXMgLSBwb3J0LT5jbG9zZVBlbmRpbmcgPSAxXG4iLCBfX2Z1bmNfXyk7CisKKwkJCWlmIChzZXJpYWwtPmRldikgeworCQkJCXF0X2Nsb3NlKHBvcnQsIGZpbHApOworCQkJCXBvcnQtPm9wZW5fY291bnQgPSAwOworCQkJfQorCQl9CisKKwl9CisKK2V4aXQ6CisJdXAoJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgLSAlZCByZXR1cm5cbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCit9CisKK3N0YXRpYyB2b2lkIHF0X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXVuc2lnbmVkIGxvbmcgamlmdCA9IGppZmZpZXMgKyAxMCAqIEhaOworCV9fdTggTFNSX1ZhbHVlLCBNQ1JfVmFsdWU7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCisJc3RydWN0IHF0X29wZW5fY2hhbm5lbF9kYXRhIENoYW5uZWxEYXRhOworCXN0YXR1cyA9IDA7CisJTFNSX1ZhbHVlID0gMDsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKworCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCisJCXVzYl91bmxpbmtfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4pCisJCXVzYl91bmxpbmtfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKworCS8qIHdhaXQgdXAgdG8gMzAgc2Vjb25kcyBmb3IgdHJhbnNtaXR0ZXIgdG8gZW1wdHkgKi8KKwlkbyB7CisJCXN0YXR1cyA9IEJveEdldFJlZ2lzdGVyKHNlcmlhbCwgVWFydE51bWJlciwgTElORV9TVEFUVVNfUkVHSVNURVIsICZMU1JfVmFsdWUpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbXlkYmcoX19GSUxFX18gImJveF9nZXRfZGV2aWNlIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoTFNSX1ZhbHVlICYgU0VSSUFMX0xTUl9URU1UKQorCQkgICAgJiYgKHBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9PSAxKSkKKwkJCWJyZWFrOworCQlzY2hlZHVsZSgpOworCisJfQorCXdoaWxlIChqaWZmaWVzIDw9IGppZnQpCisJCTsKKworCWlmIChqaWZmaWVzID4gamlmdCkKKwkJbXlkYmcoIiVzIC0gcG9ydCAlZCB0aW1vdXQgb2YgY2hlY2tpbmcgdHJhbnNtaXR0ZXIgZW1wdHlcbiIsCisJCSAgICAgIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWVsc2UKKwkJbXlkYmcoIiVzIC0gcG9ydCAlZCBjaGVja2luZyB0cmFuc21pdHRlciBlbXB0eSBzdWNjZWRlZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzdGF0dXMgPQorCSAgICBCb3hHZXRSZWdpc3RlcihzZXJpYWwsIFVhcnROdW1iZXIsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCQkgICAmTUNSX1ZhbHVlKTsKKwlteWRiZyhfX0ZJTEVfXyAiQm94R2V0UmVnaXN0ZXIgTUNSID0gMHgleC5cbiIsIE1DUl9WYWx1ZSk7CisKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJTUNSX1ZhbHVlICY9IH4oU0VSSUFMX01DUl9EVFIgfCBTRVJJQUxfTUNSX1JUUyk7CisJCS8qIHN0YXR1cyA9IEJveFNldFJlZ2lzdGVyKHNlcmlhbCwgVWFydE51bWJlciwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgTUNSX1ZhbHVlKTsgKi8KKwl9CisKKwkvKiBDbG9zZSB1YXJ0IGNoYW5uZWwgKi8KKwlzdGF0dXMgPSBCb3hPUGVuQ2xvc2VDaGFubmVsKHNlcmlhbCwgVWFydE51bWJlciwgMCwgJkNoYW5uZWxEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJbXlkYmcoIiVzIC0gcG9ydCAlZCBCb3hPUGVuQ2xvc2VDaGFubmVsIGZhaWxlZC5cbiIsCisJCSAgICAgIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJc2VyaWFsLT5udW1fT3BlbkNvdW50LS07CisKK30KKworc3RhdGljIGludCBzZXJpYWxfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKwlpbnQgZnJvbV91c2VyID0gMDsKKworCXNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBnZXQgZGlzY29ubmVjdGVkIGEgKi8KKwlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlKHMpXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7CisJbXlkYmcoIiVzIC0gcG9ydC0+UnhIb2xkaW5nID0gICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+UnhIb2xkaW5nKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHF0X3dyaXRlKHBvcnQsIGZyb21fdXNlciwgYnVmLCBjb3VudCk7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBxdF93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgZnJvbV91c2VyLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaWYgKHNlcmlhbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJbXlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKwkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJbXlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNvdW50ID0KKwkJICAgIChjb3VudCA+IHBvcnQtPmJ1bGtfb3V0X3NpemUpID8gcG9ydC0+YnVsa19vdXRfc2l6ZSA6IGNvdW50OworCisJCWlmIChmcm9tX3VzZXIpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkJICAgIChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBjb3VudCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQltZW1jcHkocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgY291bnQpOworCQl9CisKKwkJLyogdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKF9fRklMRV9fLCBfX2Z1bmNfXywgY291bnQsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsgKi8KKworCQkvKiBzZXQgdXAgb3VyIHVyYiAqLworCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQkgIHBvcnQtPgorCQkJCQkJICBidWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LAorCQkJCSAgcXRfd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJbXlkYmcoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXN1bHQpOworCQllbHNlCisJCQlyZXN1bHQgPSBjb3VudDsKKworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIG5vIGJ1bGsgb3V0LCBzbyByZXR1cm4gMCBieXRlcyB3cml0dGVuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHF0X3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXNlcmlhbCkgeworCQlteWRiZygiJXMgLSBiYWQgc2VyaWFsIHBvaW50ZXIsIGV4aXRpbmdcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlteWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlwb3J0X3NvZnRpbnQoJnBvcnQtPndvcmspOworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwb3J0X3NvZnRpbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCwgd29yayk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KQorCQlyZXR1cm47CisjaWYgMAorCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKQorCSAgICAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgeworCQlteWRiZygiJXMgLSB3cml0ZSB3YWtldXAgY2FsbC5cbiIsIF9fZnVuY19fKTsKKwkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSAodHR5KTsKKwl9CisjZW5kaWYKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKK30KK3N0YXRpYyBpbnQgc2VyaWFsX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gcXRfd3JpdGVfcm9vbShwb3J0KTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorc3RhdGljIGludCBxdF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcm9vbSA9IDA7CisJaWYgKHBvcnQtPmNsb3NlUGVuZGluZyA9PSAxKSB7CisJCW15ZGJnKCIlcyAtIHBvcnQtPmNsb3NlUGVuZGluZyA9PSAxXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KSB7CisJCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCQlyb29tID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsKKwl9CisKKwlteWRiZygiJXMgLSByZXR1cm5zICVkXG4iLCBfX2Z1bmNfXywgcm9vbSk7CisJcmV0dXJuIHJvb207Cit9CitzdGF0aWMgaW50IHNlcmlhbF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzID0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gcXRfY2hhcnNfaW5fYnVmZmVyKHBvcnQpOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcXRfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgY2hhcnMgPSAwOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJCWNoYXJzID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCX0KKworCW15ZGJnKCIlcyAtIHJldHVybnMgJWRcbiIsIF9fZnVuY19fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworfQorCitzdGF0aWMgaW50IHNlcmlhbF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKwlteWRiZygiSW4gJXMgXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZCBcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCW15ZGJnKCIlcyAtIHBvcnQtPlJ4SG9sZGluZyA9ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+UnhIb2xkaW5nKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBxdF90aW9jbXNldChwb3J0LCBmaWxlLCBzZXQpOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcXRfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisKKwlfX3U4IE1DUl9WYWx1ZTsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoqICBUSU9DTUdFVAorICAgICAqLworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKwlzdGF0dXMgPQorCSAgICBCb3hHZXRSZWdpc3Rlcihwb3J0LT5zZXJpYWwsIFVhcnROdW1iZXIsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCQkgICAmTUNSX1ZhbHVlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIC1FU1BJUEU7CisKKwkvKgorCSAqIFR1cm4gb2ZmIHRoZSBSVFMgYW5kIERUUiBhbmQgbG9vcGJjY2sgYW5kIHRoZW4gb25seSB0dXJuIG9uIHdoYXQgd2FzCisJICogYXNrZWQgZm9yCisJICovCisJTUNSX1ZhbHVlICY9IH4oU0VSSUFMX01DUl9SVFMgfCBTRVJJQUxfTUNSX0RUUiB8IFNFUklBTF9NQ1JfTE9PUCk7CisJaWYgKHZhbHVlICYgVElPQ01fUlRTKQorCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9SVFM7CisJaWYgKHZhbHVlICYgVElPQ01fRFRSKQorCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9EVFI7CisJaWYgKHZhbHVlICYgVElPQ01fTE9PUCkKKwkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfTE9PUDsKKworCXN0YXR1cyA9CisJICAgIEJveFNldFJlZ2lzdGVyKHBvcnQtPnNlcmlhbCwgVWFydE51bWJlciwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwKKwkJCSAgIE1DUl9WYWx1ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiAtRVNQSVBFOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisJbXlkYmcoIkluICVzIFxuIiwgX19mdW5jX18pOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybiAtRU5PREVWOworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJZG93bigmcG9ydC0+c2VtKTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCW15ZGJnKCIlcyAtIHBvcnQtPlJ4SG9sZGluZyA9ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+UnhIb2xkaW5nKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBxdF90aW9jbWdldChwb3J0LCBmaWxlKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHF0X3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCisJX191OCBNQ1JfVmFsdWU7CisJX191OCBNU1JfVmFsdWU7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXR0eSA9IHBvcnQtPnR0eTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWQsIHR0eSA9MHglcFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgdHR5KTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiogIFRJT0NNR0VUCisgICAgICovCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCXN0YXR1cyA9CisJICAgIEJveEdldFJlZ2lzdGVyKHBvcnQtPnNlcmlhbCwgVWFydE51bWJlciwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwKKwkJCSAgICZNQ1JfVmFsdWUpOworCWlmIChzdGF0dXMgPj0gMCkgeworCQlzdGF0dXMgPQorCQkgICAgQm94R2V0UmVnaXN0ZXIocG9ydC0+c2VyaWFsLCBVYXJ0TnVtYmVyLAorCQkJCSAgIE1PREVNX1NUQVRVU19SRUdJU1RFUiwgJk1TUl9WYWx1ZSk7CisKKwl9CisKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJcmVzdWx0ID0gKChNQ1JfVmFsdWUgJiBTRVJJQUxfTUNSX0RUUikgPyBUSU9DTV9EVFIgOiAwKQorCQkgICAgLyogRFRSIElTIFNFVCAqLworCQkgICAgfCAoKE1DUl9WYWx1ZSAmIFNFUklBTF9NQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJCSAgICAvKiBSVFMgSVMgU0VUICovCisJCSAgICB8ICgoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9DVFMpID8gVElPQ01fQ1RTIDogMCkKKwkJICAgIC8qIENUUyBpcyBzZXQgKi8KKwkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NEKSA/IFRJT0NNX0NBUiA6IDApCisJCSAgICAvKiBDYXJyaWVyIGRldGVjdCBpcyBzZXQgKi8KKwkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkKKwkJICAgIC8qIFJpbmcgaW5kaWNhdG9yIHNldCAqLworCQkgICAgfCAoKE1TUl9WYWx1ZSAmIFNFUklBTF9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOworCQkvKiBEU1IgaXMgc2V0ICovCisJCXJldHVybiByZXN1bHQ7CisKKwl9IGVsc2UKKwkJcmV0dXJuIC1FU1BJUEU7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisJbXlkYmcoIkluICVzIFxuIiwgX19mdW5jX18pOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybiAtRU5PREVWOworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJZG93bigmcG9ydC0+c2VtKTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHhcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisJbXlkYmcoIiVzIC0gcG9ydC0+UnhIb2xkaW5nID0gJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5SeEhvbGRpbmcpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCW15ZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5cbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHF0X2lvY3RsKHBvcnQsIGZpbGUsIGNtZCwgYXJnKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorc3RhdGljIGludCBxdF9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCV9fdTggTUNSX1ZhbHVlOworCV9fdTggTVNSX1ZhbHVlOworCXVuc2lnbmVkIHNob3J0IFByZXZfTVNSX1ZhbHVlOworCXVuc2lnbmVkIGludCB2YWx1ZSwgcmVzdWx0ID0gMDsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCWlmIChzZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJdHR5ID0gcG9ydC0+dHR5OworCisJbXlkYmcoIiVzIC0gcG9ydCAlZCwgdHR5ID0weCVwXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCB0dHkpOworCisJLyogVElPQ01HRVQgKi8KKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlpZiAoY21kID09IFRJT0NNR0VUKSB7CisJCU1DUl9WYWx1ZSA9IHBvcnQtPnNoYWRvd01DUjsKKwkJTVNSX1ZhbHVlID0gcG9ydC0+c2hhZG93TVNSOworCisJCXsKKwkJCXJlc3VsdCA9ICgoTUNSX1ZhbHVlICYgU0VSSUFMX01DUl9EVFIpID8gVElPQ01fRFRSIDogMCkKKwkJCSAgICAvKiBEVFIgSVMgU0VUICovCisJCQkgICAgfCAoKE1DUl9WYWx1ZSAmIFNFUklBTF9NQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJCQkgICAgLyogUlRTIElTIFNFVCAqLworCQkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKQorCQkJICAgIC8qIENUUyBpcyBzZXQgKi8KKwkJCSAgICB8ICgoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9DRCkgPyBUSU9DTV9DQVIgOiAwKQorCQkJICAgIC8qIENhcnJpZXIgZGV0ZWN0IGlzIHNldCAqLworCQkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkKKwkJCSAgICAvKiBSaW5nIGluZGljYXRvciBzZXQgKi8KKwkJCSAgICB8ICgoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9EU1IpID8gVElPQ01fRFNSIDogMCk7CisJCQkvKiBEU1IgaXMgc2V0ICovCisJCQlpZiAoY29weV90b191c2VyCisJCQkgICAgKCh1bnNpZ25lZCBpbnQgKilhcmcsICZyZXN1bHQsCisJCQkgICAgIHNpemVvZih1bnNpZ25lZCBpbnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCisJCX0KKwl9CisKKwkvKiBUSU9DTUJJUywgVElPQ01CSUMsIEFORCBUSU9DTVNFVCAqLworCWlmIChjbWQgPT0gVElPQ01CSVMgfHwgY21kID09IFRJT0NNQklDIHx8IGNtZCA9PSBUSU9DTVNFVCkgeworCQlzdGF0dXMgPQorCQkgICAgQm94R2V0UmVnaXN0ZXIocG9ydC0+c2VyaWFsLCBVYXJ0TnVtYmVyLAorCQkJCSAgIE1PREVNX0NPTlRST0xfUkVHSVNURVIsICZNQ1JfVmFsdWUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiAtRVNQSVBFOworCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmdmFsdWUsICh1bnNpZ25lZCBpbnQgKilhcmcsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ01CSVM6CisJCQlpZiAodmFsdWUgJiBUSU9DTV9SVFMpCisJCQkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfUlRTOworCQkJaWYgKHZhbHVlICYgVElPQ01fRFRSKQorCQkJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX0RUUjsKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX0xPT1ApCisJCQkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfTE9PUDsKKwkJCWJyZWFrOworCQljYXNlIFRJT0NNQklDOgorCQkJaWYgKHZhbHVlICYgVElPQ01fUlRTKQorCQkJCU1DUl9WYWx1ZSAmPSB+U0VSSUFMX01DUl9SVFM7CisJCQlpZiAodmFsdWUgJiBUSU9DTV9EVFIpCisJCQkJTUNSX1ZhbHVlICY9IH5TRVJJQUxfTUNSX0RUUjsKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX0xPT1ApCisJCQkJTUNSX1ZhbHVlICY9IH5TRVJJQUxfTUNSX0xPT1A7CisJCQlicmVhazsKKwkJY2FzZSBUSU9DTVNFVDoKKwkJCS8qCisJCQkgKiBUdXJuIG9mZiB0aGUgUlRTIGFuZCBEVFIgYW5kIGxvb3BiY2NrIGFuZCB0aGVuIG9ubHkKKwkJCSAqIHR1cm4gb24gd2hhdCB3YXMgYXNrZWQgZm9yCisJCQkgKi8KKwkJCU1DUl9WYWx1ZSAmPQorCQkJICAgIH4oU0VSSUFMX01DUl9SVFMgfCBTRVJJQUxfTUNSX0RUUiB8CisJCQkgICAgICBTRVJJQUxfTUNSX0xPT1ApOworCQkJaWYgKHZhbHVlICYgVElPQ01fUlRTKQorCQkJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX1JUUzsKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX0RUUikKKwkJCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9EVFI7CisJCQlpZiAodmFsdWUgJiBUSU9DTV9MT09QKQorCQkJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX0xPT1A7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCisJCX0KKwkJc3RhdHVzID0KKwkJICAgIEJveFNldFJlZ2lzdGVyKHBvcnQtPnNlcmlhbCwgVWFydE51bWJlciwKKwkJCQkgICBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBNQ1JfVmFsdWUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiAtRVNQSVBFOworCQllbHNlIHsKKwkJCXBvcnQtPnNoYWRvd01DUiA9IE1DUl9WYWx1ZTsKKwkJCXJldHVybiAwOworCQl9CisKKwl9CisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgLyoqICAgVElPQ01CSVMsIFRJT0NNQklDLCBBTkQgVElPQ01TRVQgICAgZW5kCisgICAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChjbWQgPT0gVElPQ01JV0FJVCkgeworCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwkJUHJldl9NU1JfVmFsdWUgPSBwb3J0LT5zaGFkb3dNU1IgJiBTRVJJQUxfTVNSX01BU0s7CisJCXdoaWxlICgxKSB7CisJCQlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+d2FpdCwgJndhaXQpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCXNjaGVkdWxlKCk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+d2FpdCwgJndhaXQpOworCQkJLyogc2VlIGlmIGEgc2lnbmFsIHdva2UgdXMgdXAgKi8KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJTVNSX1ZhbHVlID0gcG9ydC0+c2hhZG93TVNSICYgU0VSSUFMX01TUl9NQVNLOworCQkJaWYgKE1TUl9WYWx1ZSA9PSBQcmV2X01TUl9WYWx1ZSkKKwkJCQlyZXR1cm4gLUVJTzsJLyogbm8gY2hhbmdlIGVycm9yICovCisKKwkJCWlmICgoYXJnICYgVElPQ01fUk5HCisJCQkgICAgICYmICgoUHJldl9NU1JfVmFsdWUgJiBTRVJJQUxfTVNSX1JJKSA9PQorCQkJCSAoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9SSSkpKQorCQkJICAgIHx8IChhcmcgJiBUSU9DTV9EU1IKKwkJCQkmJiAoKFByZXZfTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9EU1IpID09CisJCQkJICAgIChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0RTUikpKQorCQkJICAgIHx8IChhcmcgJiBUSU9DTV9DRAorCQkJCSYmICgoUHJldl9NU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NEKSA9PQorCQkJCSAgICAoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9DRCkpKQorCQkJICAgIHx8IChhcmcgJiBUSU9DTV9DVFMKKwkJCQkmJiAoKFByZXZfTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9DVFMpID09CisJCQkJICAgIChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NUUykpKSkgeworCQkJCXJldHVybiAwOworCQkJfQorCisJCX0KKworCX0KKwlteWRiZygiJXMgLU5vIGlvY3RsIGZvciB0aGF0IG9uZS4gIHBvcnQgPSAlZFxuIiwgX19mdW5jX18sCisJICAgICAgcG9ydC0+bnVtYmVyKTsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCisJZG93bigmcG9ydC0+c2VtKTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCW15ZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5cbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJcXRfc2V0X3Rlcm1pb3MocG9ydCwgb2xkKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKK30KKworc3RhdGljIHZvaWQgcXRfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJdW5zaWduZWQgaW50IGNmbGFnOworCWludCBiYXVkLCBkaXZpc29yLCByZW1haW5kZXI7CisJdW5zaWduZWQgY2hhciBMQ1JfY2hhbmdlX3RvID0gMDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlfX3UxNiBVYXJ0TnVtYmVyOworCV9fdTE2IHRtcCwgdG1wMjsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJdG1wID0gcG9ydC0+dHR5LT5pbmRleDsKKwlteWRiZygiJXMgLSBNSU5PUihwb3J0LT50dHktPmluZGV4KSA9ICAlZFxuIiwgX19mdW5jX18sIHRtcCk7CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdG1wMiA9IHNlcmlhbC0+bWlub3I7CisJbXlkYmcoIiVzIC0gc2VyaWFsLT5taW5vciA9ICAlZFxuIiwgX19mdW5jX18sIHRtcDIpOworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJdHR5ID0gcG9ydC0+dHR5OworCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykKKwkJICAgICYmIChSRUxFVkFOVF9JRkxBRyh0dHktPnRlcm1pb3MtPmNfaWZsYWcpID09CisJCQlSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCQlteWRiZygiJXMgLSBOb3RoaW5nIHRvIGNoYW5nZVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuOworCQl9CisKKwl9CisKKwlteWRiZygiJXMgLSAzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGNmbGFnKSB7CisJY2FzZSBDUzU6CisJCUxDUl9jaGFuZ2VfdG8gfD0gU0VSSUFMXzVfREFUQTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCUxDUl9jaGFuZ2VfdG8gfD0gU0VSSUFMXzZfREFUQTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCUxDUl9jaGFuZ2VfdG8gfD0gU0VSSUFMXzdfREFUQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIENTODoKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfOF9EQVRBOworCQlicmVhazsKKwl9CisKKwkvKiBQYXJpdHkgc3R1ZmYgKi8KKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfT0REX1BBUklUWTsKKwkJZWxzZQorCQkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfRVZFTl9QQVJJVFk7CisJfQorCWlmIChjZmxhZyAmIENTVE9QQikKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfVFdPX1NUT1BCOworCWVsc2UKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfVFdPX1NUT1BCOworCisJbXlkYmcoIiVzIC0gNFxuIiwgX19mdW5jX18pOworCS8qIFRoYXRzIHRoZSBMQ1Igc3R1ZmYsIGdvIGFoZWFkIGFuZCBzZXQgaXQgKi8KKwliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKKwlpZiAoIWJhdWQpIHsKKwkJLyogcGljayBhIGRlZmF1bHQsIGFueSBkZWZhdWx0Li4uICovCisJCWJhdWQgPSA5NjAwOworCX0KKworCW15ZGJnKCIlcyAtIGdvdCBiYXVkID0gJWRcbiIsIF9fZnVuY19fLCBiYXVkKTsKKworCWRpdmlzb3IgPSBNQVhfQkFVRF9SQVRFIC8gYmF1ZDsKKwlyZW1haW5kZXIgPSBNQVhfQkFVRF9SQVRFICUgYmF1ZDsKKwkvKiBSb3VuZCB0byBuZWFyZXN0IGRpdmlzb3IgKi8KKwlpZiAoKChyZW1haW5kZXIgKiAyKSA+PSBiYXVkKSAmJiAoYmF1ZCAhPSAxMTApKQorCQlkaXZpc29yKys7CisKKwkvKgorCSAqIFNldCBCYXVkIHJhdGUgdG8gZGVmYXVsdCBhbmQgdHVybiBvZmYgKGRlZmF1bHQpZmxvdyBjb250cm9sIGhlcmUKKwkgKi8KKwlzdGF0dXMgPQorCSAgICBCb3hTZXRVYXJ0KHNlcmlhbCwgVWFydE51bWJlciwgKHVuc2lnbmVkIHNob3J0KWRpdmlzb3IsCisJCSAgICAgICBMQ1JfY2hhbmdlX3RvKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0VWFydCBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogTm93IGRldGVybWluZSBmbG93IGNvbnRyb2wgKi8KKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCW15ZGJnKCIlcyAtIEVuYWJsaW5nIEhXIGZsb3cgY29udHJvbCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgcG9ydC0+bnVtYmVyKTsKKworCQkvKiBFbmFibGUgUlRTL0NUUyBmbG93IGNvbnRyb2wgKi8KKwkJc3RhdHVzID0gQm94U2V0SFdfRmxvd0N0cmwoc2VyaWFsLCBVYXJ0TnVtYmVyLCAxKTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbXlkYmcoX19GSUxFX18gIkJveFNldEhXX0Zsb3dDdHJsIGZhaWxlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQkvKiBEaXNhYmxlIFJUUy9DVFMgZmxvdyBjb250cm9sICovCisJCW15ZGJnKCIlcyAtIGRpc2FibGluZyBIVyBmbG93IGNvbnRyb2wgcG9ydCAlZFxuIiwgX19mdW5jX18sCisJCSAgICAgIHBvcnQtPm51bWJlcik7CisKKwkJc3RhdHVzID0gQm94U2V0SFdfRmxvd0N0cmwoc2VyaWFsLCBVYXJ0TnVtYmVyLCAwKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRIV19GbG93Q3RybCBmYWlsZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZXQgdGhlIHN0YXJ0IGFuZCBzdG9wIGNoYXJhY3RlciBpbgorCSAqIHRoZSBkZXZpY2UgKi8KKwlpZiAoSV9JWE9GRih0dHkpIHx8IElfSVhPTih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7CisJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKwkJc3RhdHVzID0KKwkJICAgIEJveFNldFNXX0Zsb3dDdHJsKHNlcmlhbCwgVWFydE51bWJlciwgc3RvcF9jaGFyLAorCQkJCSAgICAgIHN0YXJ0X2NoYXIpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRTV19GbG93Q3RybCAoZW5hYmxlZCkgZmFpbGVkXG4iKTsKKworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgU1cgZmxvdyBjb250cm9sICovCisJCXN0YXR1cyA9IEJveERpc2FibGVfU1dfRmxvd0N0cmwoc2VyaWFsLCBVYXJ0TnVtYmVyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0U1dfRmxvd0N0cmwgKGRpYWJsaW5nKSBmYWlsZWRcbiIpOworCisJfQorCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEJveEdldFJlZ2lzdGVyCisqCWlzc3VzZSBhIEdFVF9SRUdJU1RFUiB2ZW5kb3Itc3BjaWZpYyByZXF1ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbnRyb2wgcGlwZQorKglJZiBzdWNjZXNzZnVsLCBmaWxscyBpbiB0aGUgIHBWYWx1ZSB3aXRoIHRoZSByZWdpc3RlciB2YWx1ZSBhc2tlZCBmb3IKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IEJveEdldFJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAorCQkJICB1bnNpZ25lZCBzaG9ydCBSZWdpc3Rlcl9OdW0sIF9fdTggKnBWYWx1ZSkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGN1cnJlbnRfbGVuZ3RoOworCisJY3VycmVudF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSk7CisKKwlyZXN1bHQgPQorCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgUVRfR0VUX1NFVF9SRUdJU1RFUiwgMHhDMCwgUmVnaXN0ZXJfTnVtLAorCQkJICAgIFVhcnRfTnVtYmVyLCAodm9pZCAqKXBWYWx1ZSwgc2l6ZW9mKCpwVmFsdWUpLCAzMDApOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQm94U2V0UmVnaXN0ZXIKKyoJaXNzdXNlIGEgR0VUX1JFR0lTVEVSIHZlbmRvci1zcGNpZmljIHJlcXVlc3Qgb24gdGhlIGRlZmF1bHQgY29udHJvbCBwaXBlCisqCUlmIHN1Y2Nlc3NmdWwsIGZpbGxzIGluIHRoZSAgcFZhbHVlIHdpdGggdGhlIHJlZ2lzdGVyIHZhbHVlIGFza2VkIGZvcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgQm94U2V0UmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgc2hvcnQgVWFydF9OdW1iZXIsCisJCQkgIHVuc2lnbmVkIHNob3J0IFJlZ2lzdGVyX051bSwgdW5zaWduZWQgc2hvcnQgVmFsdWUpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBzaG9ydCBSZWdBbmRCeXRlOworCisJUmVnQW5kQnl0ZSA9IFZhbHVlOworCVJlZ0FuZEJ5dGUgPSBSZWdBbmRCeXRlIDw8IDg7CisJUmVnQW5kQnl0ZSA9IFJlZ0FuZEJ5dGUgKyBSZWdpc3Rlcl9OdW07CisKKy8qCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSBRVF9HRVRfU0VUX1JFR0lTVEVSLCAweEMwLCBSZWdpc3Rlcl9OdW0sCisJCQkJIFVhcnRfTnVtYmVyLCBOVUxMLCAwLCAzMDApOworKi8KKworCXJlc3VsdCA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9HRVRfU0VUX1JFR0lTVEVSLCAweDQwLCBSZWdBbmRCeXRlLCBVYXJ0X051bWJlciwKKwkJCSAgICBOVUxMLCAwLCAzMDApOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBib3hfZ2V0X2RldmljZQorICogICBJc3N1ZSBhIEdFVF9ERVZJQ0UgdmVuZG9yLXNwZWNpZmljIHJlcXVlc3Qgb24gdGhlIGRlZmF1bHQgY29udHJvbCBwaXBlIElmCisgKiAgIHN1Y2Nlc3NmdWwsIGZpbGxzIGluIHRoZSBxdF9nZXRfZGV2aWNlX2RhdGEgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkKKyAqICAgZGV2aWNlX2RhdGEsIG90aGVyd2lzZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb2YgdGhlIHByb2JsZW0uCisgKi8KK3N0YXRpYyBpbnQgYm94X2dldF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCSAgc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSAqZGV2aWNlX2RhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBjdXJyZW50X2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisKKwljdXJyZW50X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhKTsKKwl0cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGN1cnJlbnRfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJIFFUX1NFVF9HRVRfREVWSUNFLCAweGMwLCAwLCAwLAorCQkJCSB0cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfbGVuZ3RoLCAzMDApOworCWlmIChyZXN1bHQgPiAwKQorCQltZW1jcHkoZGV2aWNlX2RhdGEsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgpOworCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGJveF9zZXRfZGV2aWNlCisgKiAgIElzc3VlIGEgU0VUX0RFVklDRSB2ZW5kb3Itc3BlY2lmaWMgcmVxdWVzdCBvbiB0aGUgZGVmYXVsdCBjb250cm9sIHBpcGUgSWYKKyAqICAgc3VjY2Vzc2Z1bCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYQorICogICBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb2YgdGhlIHByb2JsZW0uCisgKi8KK3N0YXRpYyBpbnQgYm94X3NldF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCSAgc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSAqZGV2aWNlX2RhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBsZW5ndGg7CisJX191MTYgUG9ydFNldHRpbmdzOworCisJUG9ydFNldHRpbmdzID0gKChfX3UxNikgKGRldmljZV9kYXRhLT5wb3J0YikpOworCVBvcnRTZXR0aW5ncyA9IChQb3J0U2V0dGluZ3MgPDwgOCk7CisJUG9ydFNldHRpbmdzICs9ICgoX191MTYpIChkZXZpY2VfZGF0YS0+cG9ydGEpKTsKKworCWxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhKTsKKwlteWRiZygiJXMgLSBQb3J0U2V0dGluZ3MgPSAweCV4XG4iLCBfX2Z1bmNfXywgUG9ydFNldHRpbmdzKTsKKworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgUVRfU0VUX0dFVF9ERVZJQ0UsIDB4NDAsIFBvcnRTZXR0aW5ncywKKwkJCQkgMCwgTlVMTCwgMCwgMzAwKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQm94T1BlbkNsb3NlQ2hhbm5lbAorICogVGhpcyBmdW5jaW90biBub3RpZmllcyB0aGUgZGV2aWNlIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgd2lzaGVzIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIFVBUlQgY2hhbm5lbC4gaXRzCisgKiBwdXJwb3NlIGlzIHRvIGFsbG93IHRoZSBkZXZpY2UgZHJpdmVyIGFuZCB0aGUgZGV2aWNlIHRvIHN5bmNocm9uaXplIHN0YXRlIGluZm9ybWF0aW9uLgorICogT3BlbkNsb3NlID0gMSBmb3Igb3BlbiAsIDAgZm9yIGNsb3NlCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IEJveE9QZW5DbG9zZUNoYW5uZWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydF9OdW1iZXIsCisJCQkgICAgICAgX191MTYgT3BlbkNsb3NlLAorCQkJICAgICAgIHN0cnVjdCBxdF9vcGVuX2NoYW5uZWxfZGF0YSAqcERldmljZURhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBsZW5ndGg7CisJX191OCBEaXJlY2lvbjsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwlsZW5ndGggPSBzaXplb2Yoc3RydWN0IHF0X29wZW5fY2hhbm5lbF9kYXRhKTsKKworCS8qIGlmIG9wZW5pbmcuLi4gKi8KKwlpZiAoT3BlbkNsb3NlID09IDEpIHsKKwkJRGlyZWNpb24gPSBVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9JTjsKKwkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCk7CisJCXJlc3VsdCA9CisJCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHBpcGUsIFFUX09QRU5fQ0xPU0VfQ0hBTk5FTCwKKwkJCQkgICAgRGlyZWNpb24sIE9wZW5DbG9zZSwgVWFydF9OdW1iZXIsCisJCQkJICAgIHBEZXZpY2VEYXRhLCBsZW5ndGgsIDMwMCk7CisKKwl9IGVsc2UgeworCQlEaXJlY2lvbiA9IFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVDsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCk7CisJCXJlc3VsdCA9CisJCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHBpcGUsIFFUX09QRU5fQ0xPU0VfQ0hBTk5FTCwKKwkJCQkgICAgRGlyZWNpb24sIE9wZW5DbG9zZSwgVWFydF9OdW1iZXIsIE5VTEwsIDAsCisJCQkJICAgIDMwMCk7CisKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEJveFNldFByZWJ1ZmZlckxldmVsCisgICBURUxMUyBCT1ggV0hFTiBUTyBBU1NFUlQgRkxPVyBDT05UUk9MCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgQm94U2V0UHJlYnVmZmVyTGV2ZWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGJ1ZmZlcl9sZW5ndGg7CisKKwlidWZmZXJfbGVuZ3RoID0gUFJFRlVGRl9MRVZFTF9DT05TRVJWQVRJVkU7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSBRVF9HRVRfU0VUX1BSRUJVRl9UUklHX0xWTCwgMHg0MCwKKwkJCQkgYnVmZmVyX2xlbmd0aCwgMCwgTlVMTCwgMCwgMzAwKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEJveFNldEFUQworICAgVEVMTFMgQk9YIFdIRU4gVE8gQVNTRVJUIGF1dG9tYXRpYyB0cmFuc21pdHRlciBjb250cm9sCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBCb3hTZXRBVEMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgbl9Nb2RlKQoreworCWludCByZXN1bHQ7CisJX191MTYgYnVmZmVyX2xlbmd0aDsKKworCWJ1ZmZlcl9sZW5ndGggPSBQUkVGVUZGX0xFVkVMX0NPTlNFUlZBVElWRTsKKworCXJlc3VsdCA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9TRVRfQVRGLCAweDQwLCBuX01vZGUsIDAsIE5VTEwsIDAsIDMwMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBCb3hTZXRVYXJ0CisqCWlzc3VzZSBhIFNFVF9VQVJUIHZlbmRvci1zcGNpZmljIHJlcXVlc3Qgb24gdGhlIGRlZmF1bHQgY29udHJvbCBwaXBlCisqCUlmIHN1Y2Nlc3NmdWwgc2V0cyBiYXVkIHJhdGUgZGl2aXNvciBhbmQgTENSIHZhbHVlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBCb3hTZXRVYXJ0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0X2Rpdmlzb3IsIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9MQ1IpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBzaG9ydCBVYXJ0TnVtYW5kTENSOworCisJVWFydE51bWFuZExDUiA9IChkZWZhdWx0X0xDUiA8PCA4KSArIFVhcnRfTnVtYmVyOworCisJcmVzdWx0ID0KKwkgICAgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgIFFUX0dFVF9TRVRfVUFSVCwgMHg0MCwgZGVmYXVsdF9kaXZpc29yLAorCQkJICAgIFVhcnROdW1hbmRMQ1IsIE5VTEwsIDAsIDMwMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IEJveFNldEhXX0Zsb3dDdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGludCBVYXJ0TnVtYmVyLAorCQkJICAgICBpbnQgYlNldCkKK3sKKwlfX3U4IE1DUl9WYWx1ZSA9IDA7CisJX191OCBNU1JfVmFsdWUgPSAwLCBNT1VUX1ZhbHVlID0gMDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlwb3J0ID0gc2VyaWFsLT5wb3J0OworCisJaWYgKGJTZXQgPT0gMSkgeworCQkvKiBmbG93IGNvbnRyb2wsIGJveCB3aWxsIGNsZWFyIFJUUyBsaW5lIHRvIHByZXZlbnQgcmVtb3RlICovCisJCU1DUl9WYWx1ZSA9IFNFUklBTF9NQ1JfUlRTOworCX0JCQkvKiBkZXZpY2UgZnJvbSB4bWl0dGluZyBtb3JlIGNoYXJzICovCisJZWxzZSB7CisJCS8qIG5vIGZsb3cgY29udHJvbCB0byByZW1vdGUgZGV2aWNlICovCisJCU1DUl9WYWx1ZSA9IDA7CisKKwl9CisJTU9VVF9WYWx1ZSA9IE1DUl9WYWx1ZSA8PCA4OworCisJaWYgKGJTZXQgPT0gMSkgeworCQkvKiBmbG93IGNvbnRyb2wsIGJveCB3aWxsIGluaGliaXQgeG1pdCBkYXRhIGlmIENUUyBsaW5lIGlzCisJCSAqIGFzc2VydGVkICovCisJCU1TUl9WYWx1ZSA9IFNFUklBTF9NU1JfQ1RTOworCX0gZWxzZSB7CisJCS8qIEJveCB3aWxsIG5vdCBpbmhpbWJlIHhtaXQgZGF0YSBkdWUgdG8gQ1RTIGxpbmUgKi8KKwkJTVNSX1ZhbHVlID0gMDsKKwl9CisJTU9VVF9WYWx1ZSB8PSBNU1JfVmFsdWU7CisKKwlzdGF0dXMgPQorCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgUVRfSFdfRkxPV19DT05UUk9MX01BU0ssIDB4NDAsIE1PVVRfVmFsdWUsCisJCQkgICAgVWFydE51bWJlciwgTlVMTCwgMCwgMzAwKTsKKwlyZXR1cm4gc3RhdHVzOworCit9CisKK3N0YXRpYyBpbnQgQm94U2V0U1dfRmxvd0N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydE51bWJlciwKKwkJCSAgICAgdW5zaWduZWQgY2hhciBzdG9wX2NoYXIsIHVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhcikKK3sKKwlfX3UxNiBuU1dmbG93b3V0OworCWludCByZXN1bHQ7CisKKwluU1dmbG93b3V0ID0gc3RhcnRfY2hhciA8PCA4OworCW5TV2Zsb3dvdXQgPSAodW5zaWduZWQgc2hvcnQpc3RvcF9jaGFyOworCisJcmVzdWx0ID0KKwkgICAgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgIFFUX1NXX0ZMT1dfQ09OVFJPTF9NQVNLLCAweDQwLCBuU1dmbG93b3V0LAorCQkJICAgIFVhcnROdW1iZXIsIE5VTEwsIDAsIDMwMCk7CisJcmV0dXJuIHJlc3VsdDsKKworfQorc3RhdGljIGludCBCb3hEaXNhYmxlX1NXX0Zsb3dDdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IFVhcnROdW1iZXIpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9TV19GTE9XX0NPTlRST0xfRElTQUJMRSwgMHg0MCwgMCwgVWFydE51bWJlciwKKwkJCSAgICBOVUxMLCAwLCAzMDApOworCXJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybjsKKworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCS8qIHNodXQgZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1heSBiZSBnb2luZyBvbiAqLworLyoJdXNiX3VubGlua191cmIgKHBvcnQtPnJlYWRfdXJiKTsgKi8KKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJcG9ydC0+UnhIb2xkaW5nID0gMTsKKwlteWRiZygiJXMgLSBwb3J0LT5SeEhvbGRpbmcgPSAxXG4iLCBfX2Z1bmNfXyk7CisKK2V4aXQ6CisJdXAoJnBvcnQtPnNlbSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybjsKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPlJ4SG9sZGluZyA9PSAxKSB7CisJCW15ZGJnKCIlcyAtcG9ydC0+UnhIb2xkaW5nID09IDFcbiIsIF9fZnVuY19fKTsKKworCQlwb3J0LT5SeEhvbGRpbmcgPSAwOworCQlteWRiZygiJXMgLSBwb3J0LT5SeEhvbGRpbmcgPSAwXG4iLCBfX2Z1bmNfXyk7CisKKwkJLyogaWYgd2UgaGF2ZSBhIGJ1bGsgZW5kcG9pbnQsIHN0YXJ0IGl0IHVwICovCisJCWlmICgoc2VyaWFsLT5udW1fYnVsa19pbikgJiYgKHBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9PSAxKSkgeworCQkJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwkJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkJICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQkJICBwb3J0LT4KKwkJCQkJCQkgIGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgIHBvcnQtPnJlYWRfdXJiLT4KKwkJCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQkgIHF0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAocmVzdWx0KQorCQkJCWVycigiJXMgLSBmYWlsZWQgcmVzdGFydGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJCSAgICBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJfQorCX0KK2V4aXQ6CisJdXAoJnBvcnQtPnNlbSk7CisJcmV0dXJuOworCit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJX191MTYgVWFydE51bWJlciwgQnJlYWtfVmFsdWU7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpCisJCUJyZWFrX1ZhbHVlID0gMTsKKwllbHNlCisJCUJyZWFrX1ZhbHVlID0gMDsKKworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXN1bHQgPQorCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgUVRfQlJFQUtfQ09OVFJPTCwgMHg0MCwgQnJlYWtfVmFsdWUsIFVhcnROdW1iZXIsCisJCQkgICAgTlVMTCwgMCwgMzAwKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpb2N0bF9zZXJpYWxfdXNiKHN0cnVjdCBpbm9kZSAqaW5ub2QsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCisJdW5zaWduZWQgZXJyOworCXVuc2lnbmVkIHVjT1BSX05ld1ZhbHVlLCB1Y19WYWx1ZTsKKwlpbnQgKnBfTnVtX29mX2FkYXB0ZXJzLCBjb3VudHMsIGluZGV4LCAqcF9RTUNSX1ZhbHVlOworCXN0cnVjdCBpZGVudGl0eSAqcF9JZGVudGl0eV9vZjsKKwlzdHJ1Y3QgaWRlbnRpdHkgSWRlbnRpdHlfb2Y7CisJc3RydWN0IHVzYl9zZXJpYWwgKmxhc3RzZXJpYWwsICpzZXJpYWw7CisKKwlteWRiZyhLRVJOX0RFQlVHICJpb2N0bF9zZXJpYWxfdXNiICBjbWQgPVxuIik7CisJaWYgKF9JT0NfVFlQRShjbWQpICE9IFNFUklBTFFUX1BDSV9JT0NfTUFHSUMpCisJCXJldHVybiAtRU5PVFRZOworCWlmIChfSU9DX05SKGNtZCkgPiBTRVJJQUxRVF9JT0NfTUFYTlIpCisJCXJldHVybiAtRU5PVFRZOworCW15ZGJnKEtFUk5fREVCVUcgImlvY3RsX3NlcmlhbF91c2IgIGNtZCA9IDB4JXhcbiIsIGNtZCk7CisJZXJyID0gMDsKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBTRVJJQUxRVF9XUklURV9RTUNSOgorCQllcnIgPSAtRU5PVFRZOworCQlpbmRleCA9IGFyZyA+PiAxNjsKKwkJY291bnRzID0gMDsKKworCQl1Y09QUl9OZXdWYWx1ZSA9IGFyZzsKKworCQllcnIgPSBFbXVsYXRlV3JpdGVRTUNSX1JlZyhpbmRleCwgdWNPUFJfTmV3VmFsdWUpOworCQlicmVhazsKKworCWNhc2UgU0VSSUFMUVRfUkVBRF9RTUNSOgorCQllcnIgPSAtRU5PVFRZOworCQlwX1FNQ1JfVmFsdWUgPSAoaW50ICopYXJnOworCQlpbmRleCA9IGFyZyA+PiAxNjsKKwkJY291bnRzID0gMDsKKworCQllcnIgPSBFbXVsYXRlUmVhZFFNQ1JfUmVnKGluZGV4LCAmdWNfVmFsdWUpOworCQlpZiAoZXJyID09IDApCisJCQllcnIgPSBwdXRfdXNlcih1Y19WYWx1ZSwgcF9RTUNSX1ZhbHVlKTsKKwkJYnJlYWs7CisKKwljYXNlIFNFUklBTFFUX0dFVF9OVU1PRl9VTklUUzoKKwkJcF9OdW1fb2ZfYWRhcHRlcnMgPSAoaW50ICopYXJnOworCQljb3VudHMgPSAwOwkvKiBJbml0aWFsaXplIGNvdW50cyB0byB6ZXJvICovCisJCS8qIHN0cnVjdCB1c2Jfc2VyaWFsICpsYXN0c2VyaWFsID0gc2VyaWFsX3RhYmxlWzBdLCAqc2VyaWFsOyAqLworCQlsYXN0c2VyaWFsID0gc2VyaWFsX3RhYmxlWzBdOworCisJCW15ZGJnKEtFUk5fREVCVUcgIlNFUklBTFFUX0dFVF9OVU1PRl9VTklUUyBcbiIpOworCQkvKiBpZiBmaXJzdCBwb2ludGVyIGlzIG5vbnVsbCwgd2UgYXQgbGVhc3QgaGF2ZSBvbmUgYm94ICovCisJCWlmIChsYXN0c2VyaWFsKQorCQkJY291bnRzID0gMTsJLyogd2UgYXQgbGVhc3QgaGF2ZSBvbmUgYm94ICovCisKKwkJZm9yIChpbmRleCA9IDE7IGluZGV4IDwgU0VSSUFMX1RUWV9NSU5PUlM7IGluZGV4KyspIHsKKwkJCXNlcmlhbCA9IHNlcmlhbF90YWJsZVtpbmRleF07CisJCQlpZiAoc2VyaWFsKSB7CisJCQkJaWYgKHNlcmlhbCAhPSBsYXN0c2VyaWFsKSB7CisJCQkJCS8qIHdlIGhhZCBhIGNoYW5nZSBpbiB0aGUgYXJyYXksIGhlbmNlCisJCQkJCSAqIGFub3RoZXIgYm94IGlzIHRoZXJlICovCisJCQkJCWxhc3RzZXJpYWwgPSBzZXJpYWw7CisJCQkJCWNvdW50cysrOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQl9CisKKwkJbXlkYmcoS0VSTl9ERUJVRyAiaW9jdGxfc2VyaWFsX3VzYiB3cml0dGluZyBjb3VudHMgPSAlZCIsCisJCSAgICAgIGNvdW50cyk7CisKKwkJZXJyID0gcHV0X3VzZXIoY291bnRzLCBwX051bV9vZl9hZGFwdGVycyk7CisKKwkJYnJlYWs7CisJY2FzZSBTRVJJQUxRVF9HRVRfVEhJU19VTklUOgorCQljb3VudHMgPSAwOworCQlwX0lkZW50aXR5X29mID0gKHN0cnVjdCBpZGVudGl0eSAqKWFyZzsKKwkJLyogY29weSB1c2VyIHN0cnVjdHVyZSB0byBsb2NhbCB2YXJpYWJsZSAqLworCQlnZXRfdXNlcihJZGVudGl0eV9vZi5pbmRleCwgJnBfSWRlbnRpdHlfb2YtPmluZGV4KTsKKwkJbXlkYmcoS0VSTl9ERUJVRyAiU0VSSUFMUVRfR0VUX1RISVNfVU5JVCBJZGVudGl0eV9vZi5pbmRleFxuIik7CisJCW15ZGJnKEtFUk5fREVCVUcKKwkJICAgICAgIlNFUklBTFFUX0dFVF9USElTX1VOSVQgSWRlbnRpdHlfb2YuaW5kZXg9IDB4JXhcbiIsCisJCSAgICAgIElkZW50aXR5X29mLmluZGV4KTsKKworCQllcnIgPSAtRU5PVFRZOworCQlzZXJpYWwgPSBmaW5kX3RoZV9ib3goSWRlbnRpdHlfb2YuaW5kZXgpOworCQlpZiAoc2VyaWFsKSB7CisJCQllcnIgPQorCQkJICAgIHB1dF91c2VyKHNlcmlhbC0+cHJvZHVjdCwKKwkJCQkgICAgICZwX0lkZW50aXR5X29mLT5uX2lkZW50aXR5KTsKKworCQl9CisJCWJyZWFrOworCisJY2FzZSBTRVJJQUxRVF9JUzQyMl9FWFRFTkRFRDoKKwkJZXJyID0gLUVOT1RUWTsKKwkJbXlkYmcoS0VSTl9ERUJVRyAiU0VSSUFMUVRfSVM0MjJfRVhURU5ERUQgXG4iKTsKKwkJaW5kZXggPSBhcmcgPj4gMTY7CisKKwkJY291bnRzID0gMDsKKworCQlteWRiZyhLRVJOX0RFQlVHCisJCSAgICAgICJTRVJJQUxRVF9JUzQyMl9FWFRFTkRFRCwgbG9va2luZyBJZGVudGl0eV9vZi5pbmRleHQgPSAweCV4XG4iLAorCQkgICAgICBpbmRleCk7CisJCXNlcmlhbCA9IGZpbmRfdGhlX2JveChpbmRleCk7CisJCWlmIChzZXJpYWwpIHsKKwkJCW15ZGJnKCIlcyBpbmRleCA9IDB4JXgsIHNlcmlhbCA9IDB4JXBcbiIsIF9fZnVuY19fLAorCQkJICAgICAgaW5kZXgsIHNlcmlhbCk7CisJCQlmb3IgKGNvdW50cyA9IDA7IHNlcnF0XzQyMl90YWJsZVtjb3VudHNdICE9IDA7IGNvdW50cysrKSB7CisKKwkJCQlteWRiZworCQkJCSAgICAoIiVzIHNlcmlhbC0+cHJvZHVjdCA9ID0gMHgleCwgc2VycXRfNDIyX3RhYmxlW2NvdW50c10gPSAweCV4XG4iLAorCQkJCSAgICAgX19mdW5jX18sIHNlcmlhbC0+cHJvZHVjdCwKKwkJCQkgICAgIHNlcnF0XzQyMl90YWJsZVtjb3VudHNdKTsKKwkJCQlpZiAoc2VyaWFsLT5wcm9kdWN0ID09IHNlcnF0XzQyMl90YWJsZVtjb3VudHNdKSB7CisJCQkJCWVyciA9IDA7CisKKwkJCQkJbXlkYmcKKwkJCQkJICAgICgiJXMgZm91bmQgbWF0Y2ggZm9yIDQyMmV4dGVuZGVkXG4iLAorCQkJCQkgICAgIF9fZnVuY19fKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1RUWTsKKwl9CisKKwlteWRiZygiJXMgcmV0dXJuaW5nIGVyciA9IDB4JXhcbiIsIF9fZnVuY19fLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqZmluZF90aGVfYm94KHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqbGFzdHNlcmlhbCwgKmZvdW5kc2VyaWFsLCAqc2VyaWFsOworCWludCBjb3VudHMgPSAwLCBpbmRleDI7CisJbGFzdHNlcmlhbCA9IHNlcmlhbF90YWJsZVswXTsKKwlmb3VuZHNlcmlhbCA9IE5VTEw7CisJZm9yIChpbmRleDIgPSAwOyBpbmRleDIgPCBTRVJJQUxfVFRZX01JTk9SUzsgaW5kZXgyKyspIHsKKwkJc2VyaWFsID0gc2VyaWFsX3RhYmxlW2luZGV4Ml07CisKKwkJbXlkYmcoIiVzIGluZGV4ID0gMHgleCwgaW5kZXgyID0gMHgleCwgc2VyaWFsID0gMHglcFxuIiwKKwkJICAgICAgX19mdW5jX18sIGluZGV4LCBpbmRleDIsIHNlcmlhbCk7CisKKwkJaWYgKHNlcmlhbCkgeworCQkJLyogZmlyc3Qgc2VlIGlmIHRoaXMgaXMgdGhlIHVuaXQgd2UnZXIgbG9va2luZyBmb3IgKi8KKwkJCW15ZGJnCisJCQkgICAgKCIlcyBpbnNpZGUgaWYoc2VyaWFsKSBjb3VudHMgPSAweCV4ICwgaW5kZXggPSAweCV4XG4iLAorCQkJICAgICBfX2Z1bmNfXywgY291bnRzLCBpbmRleCk7CisJCQlpZiAoY291bnRzID09IGluZGV4KSB7CisJCQkJLyogd2UgZm91bmQgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGZvciwgY29weXRoZQorCQkJCSAqIHByb2R1Y3QgSWQgdG8gdXNlciAqLworCQkJCW15ZGJnKCIlcyB3ZSBmb3VuZCB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yIHNlcmlhbCA9IDB4JXBcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgc2VyaWFsKTsKKwkJCQlmb3VuZHNlcmlhbCA9IHNlcmlhbDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHNlcmlhbCAhPSBsYXN0c2VyaWFsKSB7CisJCQkJLyogd2hlbiB3ZSBoYXZlIGEgY2hhbmdlIGluIHRoZSBwb2ludGVyICovCisJCQkJbGFzdHNlcmlhbCA9IHNlcmlhbDsKKwkJCQljb3VudHMrKzsKKwkJCX0KKwkJfSBlbHNlCisJCQlicmVhazsJLyogbm8gbWF0Y2hlcyAqLworCX0KKworCW15ZGJnKCIlcyByZXR1cm5pbmcgZm91bmRzZXJpYWwgPSAweCVwXG4iLCBfX2Z1bmNfXywgZm91bmRzZXJpYWwpOworCXJldHVybiBmb3VuZHNlcmlhbDsKK30KKworc3RhdGljIGludCBFbXVsYXRlV3JpdGVRTUNSX1JlZyhpbnQgaW5kZXgsIHVuc2lnbmVkIHVjX3ZhbHVlKQoreworCisJX191MTYgQVRDX01vZGUgPSAwOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhIERldmljZURhdGE7CisJdW5zaWduZWQgdWNfdGVtcCA9IDA7CisJbXlkYmcoIkluc2lkZSAlcywgdWNfdmFsdWUgPSAweCV4XG4iLCBfX2Z1bmNfXywgdWNfdmFsdWUpOworCisJRGV2aWNlRGF0YS5wb3J0YSA9IDA7CisJRGV2aWNlRGF0YS5wb3J0YiA9IDA7CisJc2VyaWFsID0gZmluZF90aGVfYm94KGluZGV4KTsKKwkvKiBEZXRlcm1pbmUgRHVwbGV4IG1vZGUgKi8KKwlpZiAoIShzZXJpYWwpKQorCQlyZXR1cm4gLUVOT1RUWTsKKwlzdGF0dXMgPSBib3hfZ2V0X2RldmljZShzZXJpYWwsICZEZXZpY2VEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiYm94X3NldF9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl1Y190ZW1wID0gdWNfdmFsdWUgJiBRTUNSX0hBTEZfRFVQTEVYX01BU0s7CisJc3dpdGNoICh1Y190ZW1wKSB7CisJY2FzZSBRTUNSX0ZVTExfRFVQTEVYOgorCQlEZXZpY2VEYXRhLnBvcnRhICY9IH5EVVBNT0RFX0JJVFM7CisJCURldmljZURhdGEucG9ydGEgfD0gRlVMTF9EVVBMRVg7CisJCUFUQ19Nb2RlID0gQVRDX0RJU0FCTEVEOworCQlicmVhazsKKwljYXNlIFFNQ1JfSEFMRl9EVVBMRVhfUlRTOgorCQlEZXZpY2VEYXRhLnBvcnRhICY9IH5EVVBNT0RFX0JJVFM7CisJCURldmljZURhdGEucG9ydGEgfD0gSEFMRl9EVVBMRVhfUlRTOworCQlBVENfTW9kZSA9IEFUQ19SVFNfRU5BQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBRTUNSX0hBTEZfRFVQTEVYX0RUUjoKKwkJRGV2aWNlRGF0YS5wb3J0YSAmPSB+RFVQTU9ERV9CSVRTOworCQlEZXZpY2VEYXRhLnBvcnRhIHw9IEhBTEZfRFVQTEVYX0RUUjsKKwkJQVRDX01vZGUgPSBBVENfRFRSX0VOQUJMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXVjX3RlbXAgPSB1Y192YWx1ZSAmIFFNQ1JfQ09OTkVDVE9SX01BU0s7CisJc3dpdGNoICh1Y190ZW1wKSB7CisJY2FzZSBRTUNSX01PREVNX0NPTlRST0w6CisJCURldmljZURhdGEucG9ydGIgJj0gfkxPT1BNT0RFX0JJVFM7CS8qIHJlc2V0IGNvbm5lY3Rpb24gYml0cyAqLworCQlEZXZpY2VEYXRhLnBvcnRiIHw9IE1PREVNX0NUUkw7CisJCWJyZWFrOworCWNhc2UgUU1DUl9BTExfTE9PUEJBQ0s6CisJCURldmljZURhdGEucG9ydGIgJj0gfkxPT1BNT0RFX0JJVFM7CS8qIHJlc2V0IGNvbm5lY3Rpb24gYml0cyAqLworCQlEZXZpY2VEYXRhLnBvcnRiIHw9IEFMTF9MT09QQkFDSzsKKwkJYnJlYWs7CisJfQorCisJbXlkYmcoX19GSUxFX18gIkNhbGxpbmcgYm94X3NldF9kZXZpY2Ugd2l0aCBmYWlsZWRcbiIpOworCXN0YXR1cyA9IGJveF9zZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfc2V0X2RldmljZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIFRoaXMgYml0IChvdGhlcndpc2UgdW51c2VkKSBpJ2xsIHVzZWQgIHRvIGRldGVjdCB3aGV0aGVyIEFUQyBpcworCSAqIHNlbGVjdGVkICovCisJaWYgKHVjX3ZhbHVlICYgUU1DUl9SWF9FTl9NQVNLKSB7CisKKwkJbXlkYmcoX19GSUxFX18KKwkJICAgICAgImNhbGxpbmcgQm94c2V0QVRDIHdpdGggRGV2aWNlRGF0YS5wb3J0YSA9IDB4JXggYW5kIERldmljZURhdGEucG9ydGIgPSAweCV4XG4iLAorCQkgICAgICBEZXZpY2VEYXRhLnBvcnRhLCBEZXZpY2VEYXRhLnBvcnRiKTsKKwkJc3RhdHVzID0gQm94U2V0QVRDKHNlcmlhbCwgQVRDX01vZGUpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbXlkYmcoX19GSUxFX18gIkJveFNldEFUQyBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0gZWxzZSB7CisKKwkJbXlkYmcoX19GSUxFX18KKwkJICAgICAgImNhbGxpbmcgQm94c2V0QVRDIHdpdGggRGV2aWNlRGF0YS5wb3J0YSA9IDB4JXggYW5kIERldmljZURhdGEucG9ydGIgPSAweCV4XG4iLAorCQkgICAgICBEZXZpY2VEYXRhLnBvcnRhLCBEZXZpY2VEYXRhLnBvcnRiKTsKKwkJc3RhdHVzID0gQm94U2V0QVRDKHNlcmlhbCwgQVRDX0RJU0FCTEVEKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRBVEMgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IEVtdWxhdGVSZWFkUU1DUl9SZWcoaW50IGluZGV4LCB1bnNpZ25lZCAqdWNfdmFsdWUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgRGV2aWNlRGF0YTsKKwlfX3U4IHVjX3RlbXA7CisKKwkqdWNfdmFsdWUgPSAwOworCisJc2VyaWFsID0gZmluZF90aGVfYm94KGluZGV4KTsKKwlpZiAoIShzZXJpYWwpKQorCQlyZXR1cm4gLUVOT1RUWTsKKworCXN0YXR1cyA9IGJveF9nZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfZ2V0X2RldmljZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwl1Y190ZW1wID0gRGV2aWNlRGF0YS5wb3J0YSAmIERVUE1PREVfQklUUzsKKwlzd2l0Y2ggKHVjX3RlbXApIHsKKwljYXNlIEZVTExfRFVQTEVYOgorCQkqdWNfdmFsdWUgfD0gUU1DUl9GVUxMX0RVUExFWDsKKwkJYnJlYWs7CisJY2FzZSBIQUxGX0RVUExFWF9SVFM6CisJCSp1Y192YWx1ZSB8PSBRTUNSX0hBTEZfRFVQTEVYX1JUUzsKKwkJYnJlYWs7CisJY2FzZSBIQUxGX0RVUExFWF9EVFI6CisJCSp1Y192YWx1ZSB8PSBRTUNSX0hBTEZfRFVQTEVYX0RUUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSSB1c2UgdGhpcyBmb3IgQVRDIGNvbnRyb2wgc2UgKi8KKwl1Y190ZW1wID0gRGV2aWNlRGF0YS5wb3J0YiAmIExPT1BNT0RFX0JJVFM7CisKKwlzd2l0Y2ggKHVjX3RlbXApIHsKKwljYXNlIEFMTF9MT09QQkFDSzoKKwkJKnVjX3ZhbHVlIHw9IFFNQ1JfQUxMX0xPT1BCQUNLOworCQlicmVhazsKKwljYXNlIE1PREVNX0NUUkw6CisJCSp1Y192YWx1ZSB8PSBRTUNSX01PREVNX0NPTlRST0w7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCisJfQorCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNlcnF0X3VzYl9pbml0KHZvaWQpCit7CisJaW50IGksIHJlc3VsdDsKKwlpbnQgc3RhdHVzID0gMDsKKworCW15ZGJnKCIlc1xuIiwgX19mdW5jX18pOworCXR0eV9zZXRfb3BlcmF0aW9ucygmc2VyaWFsX3R0eV9kcml2ZXIsICZzZXJpYWxfb3BzKTsKKwlyZXN1bHQgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfdHR5X2RyaXZlcik7CisJaWYgKHJlc3VsdCkgeworCQlteWRiZygidHR5X3JlZ2lzdGVyX2RyaXZlciBmYWlsZWQgZXJyb3IgPSAweCV4IiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBJbml0YWxpemUgb3VyIGdsb2JhbCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpCisJCXNlcmlhbF90YWJsZVtpXSA9IE5VTEw7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZzZXJxdF91c2JfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiIF9fRklMRV9fCisJCSAgICAiIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJc3RhdHVzID0gMDsJCS8qIER5bmFtaWMgYXNzaWdubWVudCBvZiBtYWpvciBudW1iZXIgKi8KKwltYWpvcl9udW1iZXIgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYoc3RhdHVzLCAiU2VyaWFsUVRfVVNCIiwgJnNlcmlhbHF0X3VzYl9mb3BzKTsKKwlpZiAobWFqb3JfbnVtYmVyIDwgMCkgeworCQlteWRiZyhLRVJOX0RFQlVHICJObyBkZXZpY2VzIGZvdW5kIFxuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9IGVsc2UKKwkJbXlkYmcoS0VSTl9ERUJVRyAiU2VyUVRfVVNCIG1ham9yIG51bWJlciBhc3NpZ25tZW50ID0gJWQgXG5cbiIsCisJCSAgICAgIG1ham9yX251bWJlcik7CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZXJxdF91c2JfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZzZXJxdF91c2JfZHJpdmVyKTsKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF90dHlfZHJpdmVyKTsKKwl1bnJlZ2lzdGVyX2NocmRldihtYWpvcl9udW1iZXIsICJTZXJpYWxRVF9VU0IiKTsKK30KKworbW9kdWxlX2luaXQoc2VycXRfdXNiX2luaXQpOworbW9kdWxlX2V4aXQoc2VycXRfdXNiX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0NDMyYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYmRvd25sb2FkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MjE1ICswLDAgQEAKLSNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCi0jZGVmaW5lIE1PSkFWRV9VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMjoyMiIKLSNkZWZpbmUgTU9KQVZFX1VDT0RFX0hPU1RJRl9JRCAgCTMKLQotc3RhdGljIHMzMiBNTnVtU2VjdGlvbnMgPSAweDI7Ci1zdGF0aWMgdTMyIE1TZWN0aW9uU2l6ZVtdID0KLXsKLQkweDAwMDA4MDAwLCAweDAwMDEwMDAwLAotfTsKLQotc3RhdGljIHUzMiBNU2VjdGlvblN0YXJ0W10gPQotewotCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCi19OwotCi1zdGF0aWMgdTggTW9qYXZlVUNvZGVbMl1bNjU1MzZdID0KLXsKLQl7Ci0JMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCi0JMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHhhMiwgMHg0MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDAwLCAweGEyLCAweDQ5LCAweGRkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHhhMiwgMHg0MCwKLQkweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDFmLCAweGU5LCAweDE4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU5LAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4NDAsIDB4ZTksIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MGYsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxMSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDBlLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZGQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MmIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHgxNCwgMHhiYywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDEzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4YjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhkOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGI2LCAweGQzLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZmLCAweGIzLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDIyLCAweDUwLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhhNSwgMHhhNSwgMHgwMCwgMHhhNiwgMHhiNCwgMHhhNywgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHhhMiwgMHg1MCwKLQkweGI1LCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDdmLCAweDAwLCAweDAwLCAweDIwLCAweGY1LCAweGNmLCAweDAxLCAweDAwLCAweDFjLCAweDAxLCAweDAwLCAweGZhLAotCTB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4MDAsIDB4ZGEsIDB4YjUsIDB4YWIsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHgwMCwgMHhhMiwgMHg1MCwgMHhiNSwgMHg2MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQ0LCAweGIzLCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlZCwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDAwLCAweDAwLCAweDQ2LCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwgMHhlZiwgMHg4YiwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGUzLCAweDhmLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQ4LCAweGIzLCAweDMzLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhkNywgMHg4ZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhmMSwgMHhkYiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGU5LCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZTksIDB4ZTMsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGIsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDRjLCAweGIzLCAweDMzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsIDB4ZWIsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLAotCTB4YjUsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHhjZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhhNywKLQkweGI0LCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhiNSwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDYyLCAweDAwLCAweDI2LCAweDRjLCAweGI1LCAweDYzLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGRhLAotCTB4YjUsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZGYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNSwgMHgwMCwgMHgwMCwgMHg1MiwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDRiLCAweDg5LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGRmLCAweGY3LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4ZGYsIDB4OGIsIDB4MDEsIDB4MDAsIDB4NjksIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHhkZiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhlNSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGIzLCAweDhiLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDksCi0JMHhkNSwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjUsIDB4ZjMsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHhkYSwgMHg3YiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGRkLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDVkLCAweGIzLCAweDMzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsIDB4ZTcsIDB4OGIsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGU3LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ZTcsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg1ZSwKLQkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGU1LCAweDhiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHg4ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY3LCAweGI1LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlNSwgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweGRkLCAweDliLCAweDAxLCAweDAwLAotCTB4OTYsIDB4MDAsIDB4MjIsIDB4ZjUsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHhkNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweGViLCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY1LAotCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmNywgMHhlMywgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwKLQkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweGVlLCAweGRkLCAweGNiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ZDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHhlOSwgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDAwLCAweDAwLCAweDRhLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLAotCTB4ZGQsIDB4ODksIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDlhLCAweDEzLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4YTYsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweGE2LAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweGQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweGE2LAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhNiwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE2LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NGIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwNCwgMHgwMCwgMHg0MCwgMHhkZCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNywgMHgwMCwgMHgxMywgMHhiYywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDAwLCAweDQwLCAweGRkLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4OTUsIDB4ZTgsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhlOSwgMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwOSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGM4LCAweDAwLCAweDA4LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQ0LCAweDAwLCAweDFmLCAweGZkLAotCTB4ZjksIDB4MzMsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4OWUsIDB4ZmQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKLQkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZkLCAweGY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHgwMCwgMHgwYSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQwLCAweGZiLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZjksIDB4ZjMsIDB4OGYsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNywgMHg0MiwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwgMHhkMywgMHgwMCwgMHhhMiwgMHhmZiwKLQkweGY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZmYsIDB4ZmIsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmMsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAwLCAweDA2LCAweGZlLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YjMsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4YjMsIDB4YzMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4ZCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZWIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5NiwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAotCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHhlYiwgMHgwMSwgMHgwMCwgMHhlNCwgMHgwMCwgMHg4NCwgMHg5NiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGU1LCAweDAwLCAweDAwLCAweDQwLCAweGI1LCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4YTIsIDB4NDEsCi0JMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDAxLCAweDAwLCAweDQxLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YjMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4MDAsIDB4YTIsIDB4NDEsIDB4OGQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwgMHhiNSwgMHhiZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4YjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiOCwgMHhlMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHhiOSwgMHhlYiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGI4LCAweDk3LCAweDAxLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweGRjLAotCTB4YjksIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMSwgMHgwMCwgMHg0MiwKLQkweDJkLCAweDExLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDJkLCAweDExLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDJkLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODEsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHg5NiwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHhhMCwgMHhkYywKLQkweGI5LCAweDZiLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweDAwLCAweDQxLCAweDJkLCAweDkxLCAweDAwLCAweDAwLAotCTB4ZjgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHhkYSwgMHg4YiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDExLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHg0NCwgMHg4OSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZDksIDB4MDAsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwgMHgwYywgMHgwMSwgMHhhMCwgMHhkYSwgMHg4YiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDhhLCAweGY0LCAweDAxLCAweDAwLCAweDEyLCAweDAxLCAweDkwLCAweDQ0LCAweDhhLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsCi0JMHg4YSwgMHhhOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MCwgMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQwLCAweGY5LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTksIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMSwgMHg0MCwgMHhkYSwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhkYSwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLAotCTB4MTYsIDB4MDEsIDB4OWYsIDB4ZGEsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAxLCAweDlmLCAweDk0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OTIsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGI0LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGIzLCAweGMzLCAweDAxLCAweDAwLAotCTB4MWQsIDB4MDEsIDB4YTIsIDB4NDEsIDB4OTEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMSwgMHgwMCwgMHg1MSwgMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI5LCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDQ5LAotCTB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyOSwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGExLCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4MjAsIDB4NDgsIDB4YTEsIDB4NTEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHgyMiwgMHg0YiwKLQkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCi0JMHg3ZSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MSwgMHgwMSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDRlLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDgwLCAweDQwLAotCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGFmLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDVmLCAweDAxLCAweDIyLCAweGNjLCAweDg1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKLQkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDg1LCAweDkzLCAweDAxLCAweDAwLAotCTB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGE0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4YmMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKLQkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRkLCAweDgxLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhkLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OGYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQyLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhlMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgxYSwgMHgwMCwKLQkweDVhLCAweDAxLCAweDUxLCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLCAweDVhLCAweDAxLCAweDUyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsCi0JMHg1YSwgMHgwMSwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg5MSwgMHg4MSwKLQkweDgwLCAweDMwLCAweDFhLCAweDAwLCAweDVhLCAweDAxLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4OTEsIDB4ODIsIDB4ODAsIDB4MzAsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLAotCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDk0LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDEsIDB4MjIsIDB4NDAsCi0JMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQxLCAweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTAsIDB4MGYsIDB4YmQsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGI3LCAweDAxLCAweDAwLCAweDQwLCAweDE5LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQyLCAweGZmLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHhhNCwKLQkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweGFjLCAweDAxLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDEsIDB4YTIsIDB4NGMsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMSwgMHgyMiwgMHhkMiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAxLCAweDIyLCAweDQxLCAweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweGEyLCAweGUwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4OSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MiwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDQsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiMywgMHgwMSwgMHgwMCwgMHg0OCwgMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAxLCAweDAwLCAweDViLCAweDg5LCAweDkwLCAweDAwLCAweDAwLCAweGIwLCAweDlmLCAweDAwLCAweGEwLAotCTB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhjYiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGJhLCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDhhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4YzMsIDB4MDEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHgwMSwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywKLQkweDZmLCAweDkzLCAweDAxLCAweDAwLCAweGYzLCAweDlmLCAweDAwLCAweDUyLCAweDZmLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGM3LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MDEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4MDEsIDB4NTUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg2ZiwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGYzLCAweDlmLCAweDAwLCAweDUzLCAweDZmLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyMywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHgwMSwgMHgyMiwgMHhkZSwKLQkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDEsIDB4YTIsIDB4NDQsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MywgMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY4LAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4ZTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRkLAotCTB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlZCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweGRlLCAweGExLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDU3LCAweDAxLCAweDAwLCAweGRmLCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwgMHhhNSwgMHhlNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweGMxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjcsIDB4MDEsIDB4MjIsIDB4NDQsIDB4YzEsIDB4NTMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDEsIDB4ODQsIDB4NDEsCi0JMHg4MSwgMHg0MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDQ1LCAweGIxLCAweDAxLCAweDAwLCAweGYxLCAweDAxLCAweDAwLCAweDQxLAotCTB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHhkZCwKLQkweGExLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwKLQkweGM1LCAweDAyLCAweDAwLCAweGUwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweGEyLCAweGJhLCAweDgwLCAweDA0LCAweDAwLCAweDAwLAotCTB4NjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4YTgsIDB4YjEsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4MDIsIDB4MDAsIDB4NGQsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGUzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGU1LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhlYiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDIsIDB4MjIsIDB4NDAsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHhjNywKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDdkLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4NWQsIDB4MDIsIDB4MDAsIDB4NDIsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI5LCAweDAyLCAweGI4LCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4MDIsIDB4YjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDAyLCAweGJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDIsIDB4YmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMSwgMHgwMiwgMHhiYywgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MzMsIDB4MDIsIDB4YmQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMiwgMHhiZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM3LCAweDAyLCAweGJmLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHgwMiwgMHhjOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNiLCAweDAyLCAweGM5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDIsIDB4Y2EsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAyLCAweGNiLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4MDIsIDB4Y2MsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MywgMHgwMiwgMHhjZCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4NDUsIDB4MDIsIDB4Y2UsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMiwgMHhjZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDA2LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNywgMHgwMSwgMHgwMCwgMHhjNywgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDYzLCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4MWEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDQ5LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsIDB4MWMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0ZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY1LCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4NWMsIDB4MDIsIDB4NGEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCi0JMHg5ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkOCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGQwLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAotCTB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZDQsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhkNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwKLQkweGRjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGRlLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZGEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsCi0JMHg4ZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhlNiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LAotCTB4ZmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKLQkweGU0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGU4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZWEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCi0JMHhmNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhmNiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY4LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LAotCTB4YTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4MSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ODUsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk1LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MDAsIDB4NDYsIDB4YTMsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg5OCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDAyLCAweDIzLCAweDUwLCAweGE1LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4NDIsCi0JMHhhNSwgMHg2MywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NCwgMHgwMiwgMHgyMiwgMHg0NCwKLQkweGE1LCAweDUzLCAweDAwLCAweDAwLCAweDkxLCAweDAyLCAweDAwLCAweDQxLCAweGExLCAweGMxLCAweDAwLCAweDAwLAotCTB4NWEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHgzMywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4ZDIsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDliLCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4NTQsCi0JMHhhNSwgMHgzMywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YTksIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4MDIsIDB4MDAsIDB4NDYsCi0JMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LAotCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwKLQkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsCi0JMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwMiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKLQkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDAyLCAweDAwLCAweGQ0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAotCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNywgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMiwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4ODAsIDB4YTUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweGNkLCAweDAyLCAweDgwLCAweGE1LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhkNiwgMHgwMiwgMHgyMCwgMHg0ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGQ2LCAweDAyLCAweDIwLCAweDRiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDIsIDB4MjAsIDB4NDcsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDAzLCAweDkwLCAweDAwLCAweDQxLAotCTB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNCwgMHgyZiwgMHg0YywgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGRhLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDIsIDB4YTIsIDB4YTUsCi0JMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGUwLCAweDAyLCAweDFmLCAweDkxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhlMywgMHgwMiwgMHgxZiwgMHg5MSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweGE5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4MDIsIDB4MWYsIDB4OTEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDAyLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDY4LCAweDAwLCAweDkwLAotCTB4MjAsIDB4YTksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIzLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDA2LCAweDA1LCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDcsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAzLCAweDAwLCAweDQwLCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMiwgMHhhMiwgMHhmOCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMiwgMHhmMCwKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDIxLCAweDkxLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MGMsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg0ZCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAzLCAweDAwLCAweDRlLCAweDg1LCAweDEwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDIwLCAweDRmLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NGYsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHgwMywgMHgwMCwgMHgwYywgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgyMCwgMHg0MywKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAzLCAweDIyLCAweGYwLCAweDllLCAweDZlLCAweDAwLCAweDAwLAotCTB4MzksIDB4MDMsIDB4MDAsIDB4NGQsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDIsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMywgMHgyMiwgMHhmMCwgMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwKLQkweDM5LCAweDAzLCAweDAwLCAweDRlLCAweDg1LCAweDEwLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQxLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDMsIDB4YTIsIDB4ZjAsIDB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDIwLCAweDk1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MjEsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAzLCAweDAwLCAweDE3LCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDU4LAotCTB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NTksIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyMCwgMHg0ZiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg1YSwKLQkweDg1LCAweDEwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDE3LCAweDg1LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDMsIDB4MjIsIDB4ZjAsCi0JMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg1OCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDE0LCAweDIwLCAweDQxLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDIzLCAweDAzLCAweDIyLCAweGYwLAotCTB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NTksIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgxNCwgMHgyMCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMywgMHhhMiwgMHhmMCwKLQkweDllLCAweDZlLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDAzLCAweGEyLCAweDQyLCAweDIxLCAweDdkLCAweDAwLCAweDAwLCAweGE1LCAweGE1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMywgMHgwMCwgMHg0NCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDMsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDg3LCAweGI0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDg3LCAweGI0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDAzLCAweGEyLCAweDQxLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGYyLAotCTB4ODYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHgwMywgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDgsIDB4ODQsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4ZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ5LCAweDAzLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OWYsIDB4MDAsIDB4NDcsIDB4OTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMywgMHgwMCwgMHg1YywKLQkweDhmLCAweDgwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsCi0JMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LAotCTB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDgyLCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MjIsIDB4NWYsCi0JMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDUzLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MywKLQkweDg2LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQxLCAweDg1LCAweDUwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODMsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJmLCAweDQ2LCAweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDhiLCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDMsIDB4YTAsIDB4NDEsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHg0MSwgMHg4MiwgMHhlOCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDhlLCAweGMwLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDQxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEzLCAweDU1LCAweDgxLCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NzMsIDB4MDMsIDB4MDAsIDB4NTAsIDB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4MDMsIDB4YTIsIDB4NDEsCi0JMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDFhLCAweDE1LCAweDAwLCAweGE2LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweGUxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsCi0JMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDAzLCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDMsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4MywgMHgwMywgMHhhMiwgMHg0MSwKLQkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNywgMHgwZiwgMHgwMCwgMHhiYywKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQl9LAotCXsKLQkweDMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM0LCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzUsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4MCwgMHg4MSwgMHg4MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweGEyLCAweDQwLCAweDkxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDk1LCAweDJhLCAweGM4LCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgxMSwgMHg4MSwKLQkweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MWEsIDB4ODAsIDB4MTEsIDB4ODIsIDB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4OSwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDIzLCAweDgwLCAweGEyLCAweDQyLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MCwgMHgxMSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHg1MSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDExLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODAsIDB4MDAsIDB4NDgsCi0JMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgyNywgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDgwLCAweGEyLCAweDUzLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDUzLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHg4MCwgMHhhMiwgMHg1MiwgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg1MiwKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwgMHg1MiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHg0YywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDUsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGUxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ZGUsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDliLCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NSwgMHgyMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDM2LCAweGIxLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzOCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDksIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdiLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NzAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhkZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg3MSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5NywKLQkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJlLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmUsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg5MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDgxLCAweDAwLCAweDQwLCAweGFmLCAweDMzLCAweDAxLCAweDAwLCAweDYxLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc3LCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAwLCAweDAwLAotCTB4NzEsIDB4ODAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODAsIDB4NTIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MywgMHg4MCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDgwLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDkxLCAweDgxLAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAotCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDksCi0JMHhmZCwgMHg4MywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0YSwgMHhmZCwgMHg4MywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAotCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhkMCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4MCwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGExLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDQsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgzZiwgMHg0MiwgMHg5NywgMHhlMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAzLAotCTB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg5OSwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywKLQkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDhlLCAweDgwLCAweGEyLCAweDQxLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCi0JMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTUsIDB4ODAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDIsIDB4MDAsIDB4MjAsCi0JMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwNSwgMHg2YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNiLCAweGRiLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLAotCTB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHg4MCwgMHhhOCwgMHhiMSwgMHg4YywgMHgzMywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDlkLCAweDgwLCAweGE4LCAweGIxLCAweDk0LCAweDMzLCAweDAwLCAweDAwLAotCTB4YTMsIDB4ODAsIDB4MTQsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YzYsCi0JMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg0ZiwgMHg4MywgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDdmLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweGM2LAotCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTcsIDB4YTMsIDB4MDEsIDB4MDAsCi0JMHg3ZiwgMHg4MCwgMHgxZiwgMHg1YywgMHg5NywgMHg1MywgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MywgMHgxZCwgMHhjNiwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQzLCAweDgxLCAweGYwLCAweDAxLCAweDAwLAotCTB4YTksIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDgxLCAweDAwLCAweGNhLCAweDYzLCAweGIzLCAweDAwLCAweDAwLCAweDJkLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4NGQsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxZSwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwZCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDgxLCAweDAwLCAweDRjLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg5YiwgMHhiMywgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4NTUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDU5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MywgMHgwMCwgMHhiYiwKLQkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRhLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4NzcsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4MSwgMHgwMCwgMHg0ZSwKLQkweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTUsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MCwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGUyLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAotCTB4NGQsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4ZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsCi0JMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDc1LCAweDgwLCAweDAwLCAweGNhLCAweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGUsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg0ZSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHg0YywKLQkweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGU4LCAweDgwLCAweDIyLCAweDQyLAotCTB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODAsIDB4MjIsIDB4NDEsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg4MCwgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MCwgMHgxZiwgMHhjYSwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDIsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAotCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAotCTB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MmYsIDB4OWMsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4MSwgMHgwMCwgMHg0MCwgMHgzOSwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAwLCAweDJmLCAweDliLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLAotCTB4MzcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OWEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNSwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZiwgMHg5OSwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDMzLCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YWUsIDB4NDcsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLAotCTB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg2MywgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDIsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwKLQkweDA1LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjAsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MSwgMHhhMiwgMHg0MCwKLQkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHhlMSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHg4MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDExLCAweDgxLCAweDI4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODEsIDB4MDAsIDB4YmIsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDgxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDk1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MWYsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MmYsIDB4NDAsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4MSwgMHgyMiwgMHg0MCwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDYwLCAweDQwLCAweDk1LCAweDgzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODEsIDB4MzYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjUsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDQxLAotCTB4NDMsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MSwgMHhhMiwgMHg0MiwKLQkweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweGNhLCAweDY5LCAweDk3LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMCwgMHg0MywKLQkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDgwLCAweGNhLCAweDY3LCAweDMzLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MjIsIDB4NDAsIDB4NjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NmYsCi0JMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDM1LCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDk1LCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MSwgMHgyMiwgMHg1YiwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHhmNSwgMHgwMCwgMHhjYSwgMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweGZkLCAweDAwLCAweGNhLCAweDk1LCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4N2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4Y2EsCi0JMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGM1LCAweGIxLCAweDAwLCAweDAwLCAweGRmLCAweDZmLCAweDAwLCAweGNhLAotCTB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg1ZiwKLQkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCi0JMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhjOSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGNiLCAweGIxLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAotCTB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgxNCwgMHgwMCwgMHg0MCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDYwLCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2MiwgMHg4MSwgMHg5ZiwgMHg4NSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg4MSwgMHhhMiwgMHg0ZiwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweGM0LCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAotCTB4NzUsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDBjLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAotCTB4N2EsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDAxLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDQzLAotCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDdmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODcsIDB4ODEsIDB4MjIsIDB4NDMsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDg0LCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg4YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4ODksIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4NDEsCi0JMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg4ZiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDA4LCAweGIxLCAweDAwLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4OTIsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4MSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGIwLCAweDgxLCAweDIyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDExLCAweDgwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg4MSwgMHgyMiwgMHg0YSwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDljLCAweDgxLCAweDIyLCAweDRkLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWUsIDB4ODEsIDB4MjIsIDB4NGYsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDgxLCAweDIyLCAweDRlLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4MjIsIDB4NDIsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODEsIDB4MjIsIDB4NDUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZCwgMHg4MSwgMHgyMiwgMHg0NCwKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODEsIDB4MjIsIDB4NDMsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgyMiwgMHg0MiwKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDgxLCAweDIyLCAweDRiLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGFmLCAweGIzLCAweDAxLCAweDAwLCAweGM1LCAweDgxLCAweDIyLCAweDQwLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAotCTB4YzUsIDB4ODEsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhhZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGM0LCAweDgxLCAweDIyLCAweDQyLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGM1LCAweDgxLCAweDAwLCAweDBiLAotCTB4N2QsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4N2QsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwgMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGE1LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGNhLCAweGE3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhjYSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweGNjLCAweDgxLCAweDlmLCAweDg1LAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg4MSwgMHgxNCwgMHhmNywgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg4MSwgMHhhMiwgMHg0OSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4ODEsIDB4MTUsIDB4ZjgsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ODEsIDB4YTIsIDB4NGEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGQ2LCAweDgxLCAweGEyLCAweGM4LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlZiwgMHhiMywgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MSwgMHg0MiwgMHg0MCwKLQkweGYxLCAweDMzLCAweDAwLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDQwLCAweDY4LCAweDk3LCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4YmIsIDB4NmIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4YmIsCi0JMHhiMSwgMHhiMywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDE0LCAweDJlLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGEyLAotCTB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHhkYSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDg5LCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4OCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGQ4LCAweDAwLCAweDAwLCAweDQzLAotCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGE1LCAweGMzLCAweDAxLCAweDAwLCAweGY4LCAweDgxLCAweDIyLCAweDQ0LCAweDg5LCAweDUwLCAweDAwLCAweDAwLAotCTB4ZjgsIDB4ODEsIDB4MjIsIDB4NDQsIDB4OGIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODEsIDB4YTIsIDB4NTAsCi0JMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhhNSwgMHhlMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGJiLAotCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MTQsIDB4MmUsIDB4ZDIsIDB4OTUsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZjUsIDB4ODEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODEsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4MSwgMHgwMCwgMHg0MCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGIzLCAweDczLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLCAweGI1LCAweGYzLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjMsIDB4ZjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCi0JMHhiMywgMHhmYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhhNiwgMHhiOCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGYyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQyLAotCTB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlYiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDksIDB4ODIsIDB4MTAsIDB4ZGEsIDB4YjUsIDB4NmIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MDAsIDB4NDEsCi0JMHgyZCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAotCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwNiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHg0MiwKLQkweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4MiwgMHgwNCwgMHg0MCwgMHgyZCwgMHgwMSwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDExLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNSwgMHgwMSwgMHgwMCwgMHg0MiwgMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHhmMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGI5LCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDJkLCAweDgxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDI5LCAweDgyLCAweGEyLCAweDU0LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MiwgMHhhMiwgMHgwNiwKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4MiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweDNhLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY1LCAweGIxLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsCi0JMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQ4LCAweGIyLCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDgyLCAweGEyLCAweDQxLCAweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZGEsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDgyLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDgyLCAweDIyLCAweDQ1LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmQsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MjIsIDB4MjAsCi0JMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGRiLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcyLCAweDgyLCAweDIyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODIsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDQ2LCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NGEsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk1LCAweGMwLCAweDAxLCAweDAwLCAweDg1LCAweDgyLCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGJiLCAweDg1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODIsIDB4MjIsIDB4NDUsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTYsIDB4ODIsIDB4YTgsIDB4YmIsIDB4ZTEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDk4LCAweDgyLCAweGEyLCAweGYyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweGUxLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWYsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhNywgMHg4MiwgMHhhMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweGE3LCAweDgyLCAweGEyLCAweGZhLAotCTB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHhhYSwgMHg4MiwgMHgyMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhhNywgMHg4MiwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDY5LCAweDkzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGY2LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDE2LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZmEsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGI4LCAweDgyLCAweGEyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLCAweGZjLCAweDE1LCAweDIwLCAweDIwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4MiwgMHgyMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweGJhLCAweDgyLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzIsIDB4ODIsIDB4MjIsIDB4NTAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODEsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4MSwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsCi0JMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRhLAotCTB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4ODIsIDB4MjIsIDB4NTAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODIsIDB4MDAsIDB4NTAsCi0JMHhiNSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgzMSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgzMywgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM0LCAweDM1LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzYsIDB4MzcsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzgsIDB4MzksIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MSwgMHg0MiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQzLCAweDQ0LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ1LCAweDQ2LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDcsIDB4NDgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0OSwgMHg0YSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY3LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZTcsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlZCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweGYzLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHg2NywgMHgwMCwgMHhhNiwgMHhlMCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgyMywgMHgwMCwgMHg3MCwKLQkweGUxLCAweDlhLCAweDAxLCAweDAwLCAweGNkLCAweGVmLCAweDAwLCAweGE2LCAweGUyLCAweGIyLCAweDAxLCAweDAwLAotCTB4ODksIDB4YWIsIDB4MDAsIDB4NzEsIDB4ZTMsIDB4OWEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4MDAsIDB4YTYsCi0JMHhlNCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhkYywgMHgwMCwgMHg3MiwgMHhlNSwgMHg5YSwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDEwLCAweDAwLCAweGE2LCAweGU2LCAweGIyLCAweDAxLCAweDAwLCAweDc2LCAweDU0LCAweDAwLCAweDczLAotCTB4ZTcsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4YzMsIDB4MDAsIDB4YTYsIDB4ZTgsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHhlMSwgMHgwMCwgMHg3NCwgMHhlOSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0YSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHg4MywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDE2LCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGZjLCAweDE2LCAweDJhLCAweDQ3LAotCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTgsIDB4ZTUsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEzLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDNkLCAweDQ2LCAweDhkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHg0MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDgzLCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZWIsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhlZiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGYxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGYzLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDgzLCAweGEwLCAweDUwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweGE0LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg0MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDc1LCAweDg5LCAweGU0LCAweDAxLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDc1LAotCTB4ODUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHg4MywgMHhhMywgMHg1MywgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4YiwgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDgzLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweDg5LCAweGE0LCAweDAxLCAweDAwLCAweDRjLCAweDgzLCAweDAwLCAweDc4LCAweDg5LCAweGE0LCAweDAwLCAweDAwLAotCTB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODMsIDB4YWEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4NGMsIDB4ODMsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDgzLCAweGEzLCAweDUzLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODIsIDB4NWEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg3OSwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4NTgsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDksIDB4NmUsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHhlYiwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNiLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4ZiwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHhiYywgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NjIsIDB4Y2EsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4YzEsIDB4MDAsIDB4NDIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGYzLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlZiwgMHhmNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGVlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweGVkLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZWEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDgzLCAweDJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LAotCTB4ZTEsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ZTMsIDB4YzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhlNSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwKLQkweGU3LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweGU5LCAweGMyLCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODMsIDB4ODEsIDB4NDEsIDB4OGQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4MywgMHhhMiwgMHg0YiwgMHhiNywgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDlkLCAweDgzLCAweGEyLCAweDQxLCAweDJmLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5YywgMHg4MywgMHgyMiwgMHg0MCwKLQkweDhmLCAweDZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5YywgMHg4MywgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDVlLCAweDE2LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDdjLCAweDE2LCAweDIwLCAweGY2LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg4MywgMHgyMiwgMHg0ZiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDgyLCAweDgzLCAweDIyLCAweDQwLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ODYsIDB4ODMsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODMsIDB4MjIsIDB4NDIsCi0JMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDg2LCAweDgzLCAweDIyLCAweDQxLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODMsIDB4MjIsIDB4NTEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4OTUsIDB4ODMsIDB4YTIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0OCwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDRiLAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk5LCAweDgzLCAweDIyLCAweDQwLAotCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODMsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmZSwKLQkweDdmLCAweGQ5LCAweDAxLCAweDAwLCAweDlkLCAweDgzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDQxLCAweDk5LCAweGIzLCAweDAxLCAweDAwLCAweGE4LCAweDgzLCAweDIyLCAweDQ0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ODMsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhYSwgMHg4MywgMHgyMiwgMHg0YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHg4MywgMHgyMiwgMHg1MCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI1LCAweDgzLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4YjcsIDB4ODMsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmMsIDB4ODMsIDB4MjIsIDB4NWMsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAotCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHhhZSwgMHg4MywgMHhhMiwgMHg0MiwKLQkweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MjIsIDB4Y2EsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDUsCi0JMHhmMywgMHg5MywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDgwLCAweGNhLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDAxLAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHgwMSwgMHgwMCwgMHhiYywgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKLQkweGIxLCAweGIzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4YTIsIDB4NDAsCi0JMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDgzLCAweGE4LCAweGIxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweGI4LCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4YmYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGNhLCAweDgzLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhhLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHg4MywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MywgMHg1NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGYzLCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4MywgMHhhMiwgMHg0MSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4ODMsIDB4OTEsIDB4ODEsCi0JMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweGQ4LCAweDgzLCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODMsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NDEsCi0JMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDE0LCAweDJmLCAweDQwLCAweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZhLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODMsIDB4MjIsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZjUsIDB4ODMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODMsIDB4YTIsIDB4NDEsCi0JMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OWYsIDB4MDAsIDB4NDcsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUwLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZmIsIDB4ODMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweGZlLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKLQkweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDUwLCAweGQzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZjLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODQsIDB4MjIsIDB4YTcsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0OSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4YTAsIDB4OTQsIDB4MmUsIDB4NDMsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4NCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDk0LCAweDJlLCAweDQzLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHg4NCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLCAweGEzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU5LCAweDQxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0MSwKLQkweDgxLCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODQsIDB4MDAsIDB4NTAsIDB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODQsIDB4YTIsIDB4NDEsCi0JMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4NCwgMHgyMiwgMHg1OCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDc4LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDFjLCAweDg0LCAweGE4LCAweGIxLAotCTB4OWMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwZSwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4NCwgMHgzMywgMHhjNCwKLQkweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDI0LCAweDg0LCAweGExLCAweGFkLCAweDlkLCAweDIwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MTMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGUsCi0JMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDJjLCAweDg0LCAweDIyLCAweGFiLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDJhLCAweDg0LCAweGEyLCAweDQwLAotCTB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODQsIDB4MjIsIDB4NWYsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyMSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4NCwgMHgyMiwgMHg1ZSwKLQkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDg0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzEsIDB4ODQsIDB4MjIsIDB4NTQsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYywgMHg4NCwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGZhLCAweDg1LCAweGEyLCAweDVmLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDVjLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODQsIDB4YTIsIDB4NWYsIDB4NTksIDB4MjcsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHg4NCwgMHhhMiwgMHg1YywgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4NCwgMHhhMiwgMHg1ZSwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDQ2LCAweDg0LCAweDIyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4NDcsIDB4ODQsIDB4MzcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NCwgMHhhOCwgMHhiMSwgMHgzNiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDg0LCAweGE4LCAweGIxLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgyOSwgMHg4NiwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NywgMHg4NCwgMHgzNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4M2QsIDB4ODQsIDB4YTgsIDB4YjEsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4NTIsIDB4MjEsCi0JMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0MSwgMHgyZiwgMHhjMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDNmLCAweDAwLCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4MDEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ODcsIDB4ODQsIDB4MDAsIDB4MzQsIDB4MTMsIDB4ODQsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgzZiwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhlNSwgMHg4NCwgMHgwMCwgMHg0MywKLQkweDAxLCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NDcsIDB4ODQsIDB4MzMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MTMsIDB4NGUsCi0JMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHhlNiwgMHg4OSwgMHhhMiwgMHg0OCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDRlLCAweDg0LCAweDIyLCAweDU5LCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDc5LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODQsIDB4MjgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHg0YiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4NCwgMHgyMSwgMHhhYywKLQkweDljLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDFmLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTAsIDB4NWYsIDB4OWQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg1OCwgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NCwgMHgyMiwgMHg1YSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDdhLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDUzLCAweDg0LCAweGE4LCAweGIxLAotCTB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4MTEsIDB4YzksIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg4NCwgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgyMiwgMHg0NCwKLQkweDkzLCAweDdmLCAweDAwLCAweDAwLCAweDU4LCAweDg0LCAweDQyLCAweGE1LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4NWIsIDB4ODQsIDB4YTIsIDB4NDAsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ODQsIDB4MWEsIDB4NDAsCi0JMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDlhLCAweDgwLCAweGEyLCAweDQwLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDliLCAweDg5LCAweDIyLCAweDQ0LAotCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4OTIsIDB4ODksIDB4MjIsIDB4NDAsIDB4NjUsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHg4OSwgMHhhMiwgMHg1YiwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwKLQkweDMzLCAweDdkLCAweDAwLCAweDAwLCAweDY2LCAweDg0LCAweDIyLCAweDQ4LCAweDMzLCAweDdkLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgzMywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDY5LCAweDg0LCAweDIyLCAweDQwLAotCTB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODQsIDB4MjIsIDB4NDAsIDB4ODEsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhlZiwgMHg4OSwgMHgxZiwgMHhhNSwgMHg4MiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDZjLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDMzLCAweDQwLAotCTB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg3MywgMHg4NCwgMHhhMCwgMHhjZSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg4NCwgMHhhMCwgMHhjZCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDljLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODQsIDB4MjIsIDB4YjUsCi0JMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDc3LCAweDg0LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGI0LAotCTB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTUsIDB4MmUsIDB4NDAsIDB4NjksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDg0LCAweGE4LCAweGExLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODQsIDB4MDAsIDB4ODgsIDB4OWUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg4NCwgMHhhMiwgMHg0MSwgMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgwMCwgMHg2ZiwKLQkweGRiLCAweDkxLCAweDAwLCAweDAwLCAweDg1LCAweDg0LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NWMsIDB4ODQsIDB4MWEsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4MDAsIDB4MDksCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDg0LCAweGE2LCAweDQyLCAweDEzLCAweDYwLCAweDAwLCAweDAwLCAweDNmLCAweDk3LCAweDAwLCAweDk1LAotCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODQsIDB4NDUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YywgMHg4NCwgMHhhOCwgMHhiMSwKLQkweDBjLCAweDMwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweDFkLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAotCTB4OTEsIDB4ODQsIDB4MDAsIDB4NTgsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTcsIDB4MDAsIDB4OTUsCi0JMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweGYwLAotCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHg4NCwgMHgyMywgMHg0YiwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4NCwgMHgyMiwgMHg0YiwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODQsIDB4ODMsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDlkLCAweDg0LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4MjIsIDB4NTUsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4YTMsIDB4ODQsIDB4MDAsIDB4NGIsIDB4NDQsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDI4LCAweDNjLCAweDQ2LCAweDBkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODQsIDB4YTIsIDB4ZjgsCi0JMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg4NCwgMHgyMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGFiLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODQsIDB4YTIsIDB4ZjgsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHg4NCwgMHhhMiwgMHhmOCwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhhYywgMHg4NCwgMHhhMiwgMHhmMCwKLQkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweGJkLCAweDg0LCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4NDcsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4NCwgMHhhMiwgMHhmMywgMHg3NCwgMHgwNiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGU2LCAweDk1LCAweDAxLCAweDAwLCAweGJkLCAweDg0LCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHgwMCwgMHgxZiwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4YmIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODQsIDB4NDcsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHg4NCwgMHgxZiwgMHg0MSwgMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwKLQkweGMzLCAweDg0LCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMywgMHg4NCwgMHg0NywgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVjLCAweDg0LCAweDFmLCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMywgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNiLCAweDg0LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg5NiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg4NCwgMHgyMiwgMHg0MCwKLQkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGRiLCAweDg0LCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkYiwgMHg4NCwgMHgyMiwgMHgyMCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkOCwgMHg4NCwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTgsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNlLCAweDk5LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODQsIDB4ODIsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg4YiwgMHgwMCwgMHg0NSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGUyLCAweDg0LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAotCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NGIsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5NywgMHgwMCwgMHgwMywgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGU3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTksIDB4ODQsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZWUsIDB4MDcsIDB4MmUsIDB4NDcsIDB4OTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODQsIDB4MjIsIDB4MTcsCi0JMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg4NCwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGZkLCAweDg0LCAweDIzLCAweGEyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDUyLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyZCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLAotCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDg1LCAweDAwLCAweDVjLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDExLCAweDg1LCAweDIyLCAweDQzLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHg4NSwgMHgyMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNiwgMHg4NSwgMHg0NSwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MWQsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHhmNiwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDBlLCAweDg1LCAweGEyLCAweGE2LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTEsIDB4ODUsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODUsIDB4YTIsIDB4NGIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDE1LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFjLCAweDg1LCAweDIyLCAweDRhLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODUsIDB4MjIsIDB4NDgsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDg2LCAweDg4LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4M2QsIDB4NDIsCi0JMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4NSwgMHhhMiwgMHg0MiwgMHhlMCwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGY3LCAweDg1LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxYywgMHg4NSwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywKLQkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQxLCAweDQ3LCAweGMzLCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODUsIDB4MjIsIDB4YTEsIDB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4NSwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDViLCAweDg1LCAweGEzLCAweDkyLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQwLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgxNSwgMHg4YSwgMHgyMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4NSwgMHgyMiwgMHg1YywKLQkweDE3LCAweDdjLCAweDAwLCAweDAwLCAweDI5LCAweDg1LCAweDAwLCAweDAwLCAweDJhLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4NSwgMHhhMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ5LCAweDg1LCAweDAwLCAweDVlLAotCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhmOCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHg4NSwgMHhhOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NSwgMHgwMCwgMHg1ZSwKLQkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAotCTB4NDgsIDB4ODUsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwOSwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDg1LCAweDI4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTgsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHg0YiwgMHg4NSwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAotCTB4NGUsIDB4ODUsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRmLCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NSwgMHgyMiwgMHg0MywKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCi0JMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1OSwgMHg4NSwgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGI5LCAweDk0LCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1ZCwgMHg4NSwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4NSwgMHgwMCwgMHg0MSwKLQkweDQzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWYsIDB4ODUsIDB4MzUsIDB4MDEsCi0JMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY2LCAweDg1LCAweDI4LCAweGIxLCAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDYwLCAweDg1LCAweDIyLCAweDRkLAotCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHhmMywgMHg4NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NjYsIDB4ODUsIDB4YTgsIDB4YjEsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODUsIDB4YTIsIDB4NDAsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHg4NSwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDg1LCAweGEzLCAweDBiLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAotCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDM5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDg1LCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwMSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLAotCTB4ODQsIDB4ODUsIDB4MjMsIDB4MDEsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4NSwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDhiLCAweDg1LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4NSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWIsIDB4OTUsIDB4MDAsIDB4NDMsIDB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWUsIDB4ODUsIDB4MjIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg4NSwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyZCwgMHg0YywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDM3LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4ODQsIDB4ODUsIDB4MDAsIDB4NDUsIDB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODUsIDB4YTMsIDB4MTIsCi0JMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg4NSwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE0LCAweDg1LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4Y2EsIDB4ODUsIDB4MjIsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJkLCAweDE0LCAweDEyLCAweGMwLCAweDAxLCAweDAwLCAweGMzLCAweDg1LCAweGEyLCAweDE0LAotCTB4MzYsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODUsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4NSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGI5LCAweDg1LCAweDIzLCAweDAxLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODUsIDB4MjIsIDB4MWIsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YzAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODUsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDg0LCAweDg1LCAweGEyLCAweDQwLCAweDI1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MzksIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MzksIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDg0LCAweDg1LCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNkLCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZSwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDg1LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsCi0JMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkNywgMHg4NSwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweGRhLCAweDg1LCAweDIyLCAweDQzLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxNiwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYywgMHg4NSwgMHhhMywgMHg0MCwKLQkweDI3LCAweDZjLCAweDAwLCAweDAwLCAweGRlLCAweDg1LCAweDYwLCAweDVmLCAweDE3LCAweDkwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODQsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTMsCi0JMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDE1LCAweDhhLCAweGEyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiOSwgMHg5NCwgMHgwMCwgMHgwMSwgMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU4LCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODUsIDB4MjIsIDB4MTMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDg1LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVhLCAweDg1LCAweDAwLCAweDQxLAotCTB4ODMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHgwMCwgMHgwNywKLQkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDA1LCAweDg2LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODYsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NiwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDg2LCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHg4NiwgMHgyMiwgMHgyMCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYSwgMHg4NiwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTgsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNlLCAweDk5LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMywgMHg4NiwgMHgyMiwgMHgzYSwgMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNywgMHg4NiwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAotCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzOCwgMHg5NywgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4NiwgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweGY1LCAweDk3LCAweDAwLCAweDRiLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDRjLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODYsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4NiwgMHg4NSwgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGU3LCAweDk0LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmUsIDB4ODYsIDB4NDYsIDB4NDcsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDg2LCAweGE4LCAweDFiLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDFlLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NiwgMHgwMSwgMHhmYiwKLQkweDA4LCAweDMwLCAweDAwLCAweDAwLCAweGE3LCAweDg2LCAweDg3LCAweGZiLCAweDIyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDk2LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDRhLCAweDg2LCAweDIyLCAweDQxLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2UsIDB4ODYsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NiwgMHgyMiwgMHg1ZiwKLQkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA0LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4NDIsIDB4ODYsIDB4YTYsIDB4NWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODYsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDRmLCAweDg2LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU2LCAweDg2LCAweDIxLCAweDA0LCAweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDU3LCAweDg2LCAweDAwLCAweDQwLAotCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NiwgMHg4NiwgMHgwMCwgMHg0MywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg4NiwgMHgwMCwgMHhmYiwKLQkweDIyLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OGIsIDB4MDAsIDB4NGUsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODYsIDB4MDAsIDB4NWEsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NiwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGE4LCAweDhhLCAweDAwLCAweDUzLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDU2LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4YiwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4NiwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDY0LCAweDg2LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OGIsIDB4MDAsIDB4NTMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NTQsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4NiwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDY4LCAweDg2LCAweGEyLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDVkLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg4NiwgMHhhMCwgMHg5MSwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDVlLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MCwgMHg4NiwgMHgyMCwgMHg5MSwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDY2LCAweDhiLCAweDAwLCAweDU0LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHhhMCwgMHgwYSwKLQkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDhhLCAweGEwLCAweDQyLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDU0LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAotCTB4ODMsIDB4ODYsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4ODYsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg5MCwgMHg4NiwgMHhhMiwgMHg1NCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4NiwgMHgyMiwgMHg1NSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODYsIDB4MjIsIDB4NTMsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YmMsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg4NiwgMHgyMiwgMHg0MywgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDgwLCAweDg2LCAweGEyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLAotCTB4N2MsIDB4OTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODYsIDB4NDMsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4NiwgMHhhMCwgMHhmMCwgMHgzMCwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDg2LCAweDg2LCAweDFiLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAotCTB4MzEsIDB4YzMsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg4NiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDY2LCAweDk2LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDE4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBjLAotCTB4ZTAsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4NiwgMHgzMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDIsIDB4MDAsIDB4YTEsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLAotCTB4YWQsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NiwgMHgyMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweDIyLCAweDQyLAotCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHg4NiwgMHg0NywgMHgxYiwgMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQxLCAweDQxLCAweGMzLCAweDAxLCAweDAwLAotCTB4ZTAsIDB4ODYsIDB4MjMsIDB4OTIsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODYsIDB4YTIsIDB4NDUsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NiwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4NiwgMHgyMiwgMHgwOCwKLQkweDQwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MDcsIDB4MDAsIDB4MTIsIDB4MjQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODYsIDB4YWEsIDB4NDEsCi0JMHgyNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGRhLCAweDg2LCAweDI2LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweGM3LCAweDg2LCAweGEyLCAweDQwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4ODYsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDIsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgyMSwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGNjLCAweDg2LCAweGEyLCAweDQ0LAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgyMCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODYsIDB4YTgsIDB4NDIsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODYsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4NiwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDcsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODYsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhYSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDkyLCAweDI1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODYsIDB4MjIsIDB4MDgsCi0JMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyNywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDgwLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4MGEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGVjLCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODcsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweGY2LCAweDg2LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjYsIDB4ODYsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODYsIDB4YTMsIDB4MDcsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDg2LCAweGEzLCAweDQwLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBlLCAweGNjLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZmLCAweDg2LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMSwgMHgyZCwgMHg0MCwKLQkweDAwLCAweGMwLCAweDAxLCAweDAwLCAweGU3LCAweDg4LCAweDIyLCAweDBmLCAweDQyLCAweDA1LCAweDAwLCAweDAwLAotCTB4MTIsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEyLCAweDg3LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweGQxLCAweDg3LCAweGEyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHg1NCwgMHgyOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODcsIDB4MjAsIDB4OTQsCi0JMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDg3LCAweDIyLCAweDAxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDJhLCAweDg3LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MmIsIDB4ODcsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCi0JMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4NywgMHgyMiwgMHg0MCwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDM3LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDVmLCAweDg3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM5LCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0MywgMHg4NywgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDg3LCAweDgwLCAweDA4LCAweGYwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHgxZSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgxZiwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4NywgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDdkLCAweDg3LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4NTAsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NywgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NywgMHgyMiwgMHg0MiwKLQkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDVmLCAweDg3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1NywgMHg4NywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODcsIDB4MjIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4N2QsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODcsIDB4YTIsIDB4MGQsCi0JMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2YiwgMHg4NywgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjksIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY2LCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHg4NywgMHgxZiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHg0YywKLQkweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4ODcsIDB4MjMsIDB4MDcsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NzksIDB4ODcsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODcsIDB4MDAsIDB4MDMsCi0JMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHgwZCwgMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDJlLCAweDE0LCAweDBhLCAweGQwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyYSwgMHhmMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgyMiwgMHg0MCwKLQkweDMxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4ZjYsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg4NywgMHg4NywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDg5LCAweDg3LCAweDIyLCAweDBiLAotCTB4ZWQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRhLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODcsIDB4MjIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MywgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDkxLCAweDg3LCAweGEwLCAweDQ2LCAweDBmLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwZiwgMHhhMiwKLQkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDk4LCAweDg3LCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5NSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDliLCAweDg3LCAweGEwLCAweDQxLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg4NywgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NywgMHhhMCwgMHg0MywKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGEwLCAweDg3LCAweDIwLCAweDQ1LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAotCTB4YTAsIDB4ODcsIDB4YTAsIDB4NDEsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDg3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweGE5LCAweDg3LCAweDIyLCAweDQ4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhNywgMHg4NywgMHg5MCwgMHg0OCwKLQkweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDE0LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4ODcsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGI5LCAweDg3LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg4NywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YmMsIDB4ODcsIDB4ODcsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5NSwgMHgwMCwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMSwgMHgwMCwKLQkweGJlLCAweDg3LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUyLCAweDg5LCAweDAwLCAweDE3LAotCTB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHg4NywgMHhhMCwgMHgwNywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODcsIDB4OTAsIDB4ZjIsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNmLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE3LAotCTB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NTIsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNSwgMHg4NywgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDUsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDBhLCAweGM4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LAotCTB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4OCwgMHgyMiwgMHgwMSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4YTQsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg4NywgMHhhMywgMHgwNywgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGViLCAweDg3LCAweDY4LCAweDAxLCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA3LAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4ODcsIDB4MjIsIDB4NDAsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNywgMHg4NywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHg4OCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4NywgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGYyLCAweDNhLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4M2IsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4OCwgMHgyMywgMHgxYSwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDAzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MzcsIDB4ODgsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MWQsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzMCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDMxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4OCwgMHgyMiwgMHgxYSwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4MTQsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgxNywgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4OCwgMHgwMCwgMHgxYSwKLQkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4OCwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIxLCAweDg4LCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODgsIDB4ODAsIDB4MDgsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDFmLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDI4LCAweDg4LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODgsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg1NCwgMHg4OCwgMHgyMiwgMHgwZCwgMHgyNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDJmLCAweDg4LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MzcsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDg4LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTMsIDB4ODgsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODgsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDg4LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg4OCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4ODgsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4NywgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKLQkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGU0LCAweDg3LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUwLCAweDg4LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ODcsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MDAsIDB4MGQsCi0JMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4OCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKLQkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAotCTB4NjYsIDB4ODgsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg4OCwgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDA1LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxOCwKLQkweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDZlLCAweDg4LCAweGEwLCAweGZjLCAweDkwLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmMsIDB4ODgsIDB4YTIsIDB4NDEsCi0JMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAotCTB4NzYsIDB4ODgsIDB4NDIsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0MSwgMHgzZCwgMHhjMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MWQsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2NiwgMHgxOCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDgwLCAweDg4LCAweGEwLCAweDQxLCAweDgwLCAweDQ0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZSwgMHgzMCwgMHg4MSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDg0LCAweDg4LCAweDkwLCAweDQwLCAweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4OTMsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgxOSwKLQkweGU4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAotCTB4OGEsIDB4ODgsIDB4YTAsIDB4MTksIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZiwgMHgxZSwgMHgzMiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDg4LCAweGEyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDhlLCAweDg4LCAweGEwLCAweDFjLAotCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHgzOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDFlLCAweDk4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MWEsIDB4OTgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4OCwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk4LCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDFhLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODgsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4OCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWQsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGFhLCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZiLCAweDk1LCAweDAwLCAweDQxLCAweDIzLCAweDQwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweGI2LCAweDg4LCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4OCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YmUsIDB4ODgsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLCAweGRlLCAweDg4LCAweDIyLCAweDQwLAotCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzksIDB4ODgsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhjOCwgMHg4OCwgMHgyMiwgMHg5ZiwKLQkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LCAweDFjLCAweGNjLCAweDAxLCAweDAwLAotCTB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgzZiwgMHhjMywgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDg4LCAweGEyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAotCTB4M2UsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODgsIDB4MjIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4OCwgMHgyMCwgMHgxZSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDFlLCAweDI0LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4ODgsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDg4LCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg4OCwgMHhhMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHgxZiwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGUzLCAweDg4LCAweGEyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ODgsIDB4MDAsIDB4MWUsIDB4M2UsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4ODgsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGVmLCAweDg4LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDg4LCAweDIyLCAweDA3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4ODgsIDB4MjAsIDB4OTQsCi0JMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHgwMCwgMHg5NCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDg4LCAweDIyLCAweDQwLAotCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDg5LCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHg1MiwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHg4OSwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4OSwgMHg2OCwgMHgwNywKLQkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MWYsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4OSwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OSwgMHgyMiwgMHgwZCwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDFhLCAweDg5LCAweDIyLCAweDBkLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODksIDB4MDAsIDB4MGQsCi0JMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGEyLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIwLAotCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg4OSwgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyNywgMHg4OSwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODksIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQzLAotCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OSwgMHhhMiwgMHgwZCwKLQkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDMzLCAweDg5LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4OSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MmUsIDB4ODksIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM4LCAweDg5LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDRjLAotCTB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg4OSwgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHg4OSwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg4OSwgMHgwMCwgMHgwMywKLQkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLAotCTB4NGUsIDB4ODksIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDRlLCAweDg5LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4OSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTQsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDg5LCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NywgMHg4OSwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NGUsIDB4OTksIDB4MDAsIDB4NDEsIDB4M2YsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDBiLCAweDk2LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLAotCTB4NjYsIDB4ODksIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODksIDB4MjIsIDB4NDIsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDY1LCAweDg5LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ODksIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4OSwgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDZiLCAweDg5LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDk5LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweGEyLCAweDVmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MmQsIDB4NDMsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4ZSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLCAweDdkLCAweDg5LCAweDIyLCAweDQ4LAotCTB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4OSwgMHgxZiwgMHhmMCwKLQkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDg5LCAweDIzLCAweDQxLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4YTgsIDB4OGEsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDgsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDgyLCAweDg5LCAweDIyLCAweDBhLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OTksIDB4MDAsIDB4NDAsIDB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg4YSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHg0NSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDg5LCAweDIyLCAweGYwLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4OSwgMHhhMywgMHg0MSwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4YSwgMHgyMCwgMHg0YywKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAotCTB4YTgsIDB4OGEsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MjIsIDB4MGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDg5LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQ5LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5NiwgMHg4OSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDk3LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4OTcsIDB4ODksIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDg5LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDlkLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODQsIDB4MjIsIDB4NDAsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4OSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4NDksIDB4ODQsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4OSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGM5LCAweDg5LCAweDFkLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDg5LCAweDIyLCAweDQwLAotCTB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODksIDB4MjIsIDB4NWIsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGE2LCAweDg5LCAweGE4LCAweGIxLCAweDk0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOSwgMHg4OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFiLCAweDg5LCAweDQzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI5LCAweDg5LCAweDIyLCAweDU3LAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg4OSwgMHhhOCwgMHhiMSwgMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGFmLCAweDg5LCAweGE4LCAweGIxLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4OSwgMHhhOCwgMHg0YSwgMHg4MCwgMHgzMywgMHgwMCwgMHgwMCwKLQkweGI3LCAweDg5LCAweDIyLCAweDVmLCAweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODksIDB4YTgsIDB4NGIsIDB4YWMsIDB4MzMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHhhNSwgMHg4MiwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4OSwgMHgwMCwgMHhiZSwKLQkweDgzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQwLCAweDgxLCAweGIzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNywgMHg4OSwgMHhhMiwgMHg0MCwgMHg4NiwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLAotCTB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NTAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjMywgMHg4OSwgMHg1MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDgsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHgwNSwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4OSwgMHgyMiwgMHg1NCwKLQkweDgxLCAweDdjLCAweDAwLCAweDAwLCAweGNiLCAweDg5LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4YjQsIDB4NjksIDB4ZGYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweGRlLCAweDg5LCAweDBmLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHhlMywgMHg4OSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg4LCAweGNjLCAweDAxLCAweDAwLCAweGQ2LCAweDg5LCAweDk5LCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODksIDB4OWIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweGRhLCAweDg5LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQwLAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlMywgMHg4OSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg1OCwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyNiwgMHgwNSwgMHg0NywgMHgzMSwgMHgwMCwgMHgwMCwKLQkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDgxLCAweGM4LCAweDAxLCAweDAwLAotCTB4ZTksIDB4ODksIDB4MjIsIDB4NDAsIDB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ODAsIDB4MDAsIDB4NmYsCi0JMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHhlYiwgMHg4OSwgMHgyMiwgMHg0MCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDliLCAweDgwLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweDIyLCAweDU5LAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlNiwgMHg4OSwgMHgyOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhlYywgMHg4OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGMwLCAweDk1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODksIDB4MjIsIDB4NWQsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGYyLCAweDg5LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAotCTB4N2YsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4YzUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY3LCAweDg5LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ZjksIDB4ODksIDB4NDMsIDB4NWYsIDB4N2YsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4YmYsCi0JMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg3ZiwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDdmLCAweDkzLCAweDAxLCAweDAwLCAweDc1LCAweDk4LCAweDAwLCAweGJmLAotCTB4YzUsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNiwgMHg4YSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA2LCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDk1LCAweDIyLCAweDAyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHg2MiwgMHg5NSwgMHgxYSwgMHgwMiwKLQkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDExLCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTEsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBlLCAweDhhLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2YywgMHg5NSwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4NmMsIDB4OTUsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MWMsIDB4OGEsIDB4OWMsIDB4MGYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxOSwgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWQsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwKLQkweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAotCTB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MmYsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2ZCwgMHg4YSwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyOSwgMHg0MSwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAotCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4YSwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDMyLCAweDhhLCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDA3LAotCTB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MzksIDB4OGEsIDB4MDUsIDB4YzIsIDB4MjQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg1MSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDZlLCAweDhhLCAweDFjLCAweGYwLCAweDE4LCAweDMwLCAweDAxLCAweDAwLAotCTB4NTEsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4YSwgMHhhMCwgMHg0OCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDFhLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDIsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNmLCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4YSwgMHgwMCwgMHhmOCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQzLCAweDhhLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDEwLAotCTB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxYSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDhhLCAweGE4LCAweDA5LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4YSwgMHgyMiwgMHg0MSwKLQkweDBkLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLAotCTB4NTksIDB4OGEsIDB4YTAsIDB4YWEsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OGEsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHgwOSwgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4YSwgMHg4MywgMHg0MSwKLQkweDE3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4OGEsIDB4MDAsIDB4NDEsIDB4MWIsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OGEsIDB4MjMsIDB4NDAsCi0JMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY1LCAweDhhLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg4YSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NmUsIDB4OGEsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDZiLCAweDhhLCAweGEwLCAweGFhLAotCTB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg5NCwgMHgyMCwgMHgwNywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MGMsCi0JMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4YSwgMHgyNiwgMHg1NCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDc2LCAweDhhLCAweDg3LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzYsIDB4OGEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3NiwgMHg4YSwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdiLCAweDhhLCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwKLQkweDc3LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDhhLCAweDIyLCAweDQ5LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwKLQkweDc3LCAweDdkLCAweDAxLCAweDAwLCAweDdiLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDk0LCAweDJmLCAweDU1LAotCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHg4NCwgMHhhMiwgMHg0MSwgMHhlNSwgMHg1MSwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDhhLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGIsIDB4OGEsIDB4YTIsIDB4OTMsIDB4NTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg1NywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHhhYiwgMHgyNywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDZmLCAweDg0LCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDIyLCAweDUxLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4YTIsIDB4NDEsIDB4MWQsIDB4NTMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweDQxLCAweGI1LCAweDUzLCAweDAxLCAweDAwLCAweDZmLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLCAweDYwLCAweDE2LCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwKLQkweGI0LCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4YWUsIDB4OGEsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4ZDEsIDB4OGQsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGUsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDhlLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4NzYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OGUsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBiLCAweDkwLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4YWYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OGUsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4ZiwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmYsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5YiwgMHg4ZiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiOSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4ZiwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjksIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGUxLCAweDhmLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGYyLCAweDhmLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDhmLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhmLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmQsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBlLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4ZiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZkLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQxLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwZiwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MCwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MCwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDhlLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGEzLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDkwLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTAsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDczLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4OTEsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgyMCwgMHg0NywKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDZlLCAweDhiLCAweDAwLCAweDRiLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGJlLCAweDkwLCAweDAwLCAweDQ5LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OTAsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBiLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg2LCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDkxLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDRiLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5MSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNywgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHg5MSwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4OTIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg5MiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDkyLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5MSwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjYsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGMwLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjMCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU2LCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NGMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzMSwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2QsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDMxLCAweDkyLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMSwgMHg5MiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ1LCAweDkyLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ1LCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVmLCAweDkyLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4OTIsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGY2LCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE4LCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTgsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg5MiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5MiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5MiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjIsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVmLCAweDk0LCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHg5NCwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDk0LCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5MSwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDk0LCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4OTQsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg5NCwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTQsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZiLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDk0LCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YjYsIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg5NCwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDBhLCAweDhhLCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAotCTB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGJhLCAweDhkLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg4ZCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4Y2EsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGM3LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODYsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhjYiwgMHg4ZCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmUsIDB4NGIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4YSwgMHgwMCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDA2LCAweDA3LCAweDQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDcsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4MmUsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0YiwKLQkweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk1LCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MzQsCi0JMHg5NywgMHg4NCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlNCwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAxLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAotCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDQzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZSwgMHg0MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4ZCwgMHgyMCwgMHg0YiwKLQkweDk0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjksIDB4OGQsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDhlLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OGUsIDB4YTIsIDB4NGMsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwYywgMHg4ZSwgMHgwMCwgMHg0YywgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwZCwgMHg4ZSwgMHgyMCwgMHhmMCwKLQkweDU2LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDU2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4ZSwgMHhhOCwgMHg0NCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxYiwgMHg4ZSwgMHhhOCwgMHg0NCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MzgsIDB4MDAsIDB4MmUsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4ZSwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDI2LCAweDhlLCAweDIyLCAweDQ0LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMCwgMHhhMiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MmEsIDB4OGUsIDB4MjMsIDB4MGIsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDQzLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDJmLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MmUsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQxLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzYSwgMHg4ZSwgMHhhMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNlLCAweDhlLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLAotCTB4ODYsIDB4MDAsIDB4MmYsIDB4NDksIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGUsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDQxLCAweDhlLCAweGEyLCAweDQ2LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgyZiwgMHg0NiwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDQ1LCAweDhlLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDE0LCAweGY0LCAweDAxLCAweDAwLAotCTB4NzAsIDB4OGUsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OGUsIDB4MjIsIDB4MGEsCi0JMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDEzLCAweGMwLCAweDAxLCAweDAwLAotCTB4NTcsIDB4OGUsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg4ZSwgMHgwMCwgMHg0MSwgMHgxNSwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDcwLCAweDhlLCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAotCTB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxNSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDY0LCAweDhlLCAweGEwLCAweDQzLAotCTB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4OTcsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg2YywgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NTEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGUsIDB4MjIsIDB4NDUsCi0JMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4ZSwgMHgyMiwgMHg0OCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGEsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmEsIDB4NGEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDkwLCAweDhlLCAweDIzLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDAwLCAweDIwLCAweDQwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDIwLCAweDQxLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMSwgMHg5OSwgMHgwMCwgMHhmMCwgMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4ZSwgMHhhMiwgMHg0NCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4OGEsIDB4OTYsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OGUsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJkLCAweDhlLCAweGEyLCAweDA4LAotCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDc4LCAweDhlLCAweDIyLCAweDRhLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNlLCAweDQzLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4NjAsIDB4MDAsCi0JMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHg4NSwgMHgxMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLAotCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDhlLCAweDAwLCAweDQ5LCAweDE5LCAweDgwLCAweDAwLCAweDAwLAotCTB4YjQsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDJkLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDY4LCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM2LCAweGQwLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweDQwLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg4ZSwgMHgyMCwgMHg5NCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI1LCAweDk3LCAweDAwLCAweDk0LCAweGU1LCAweDMxLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDhlLCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OGUsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkNiwgMHg4ZSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDMsIDB4OGUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDk1LCAweDAwLCAweDQzLAotCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGUsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4ZSwgMHhhMywgMHgwMSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweGUxLCAweDhlLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGUsIDB4MjAsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4ZSwgMHgwMCwgMHgwMiwKLQkweGYwLCAweGIxLCAweDAwLCAweDAwLCAweGU2LCAweDhlLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTcsIDB4OGUsIDB4NjgsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4ZSwgMHg4MCwgMHgwOCwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDExLCAweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgxZiwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlYiwgMHg4ZSwgMHhhOCwgMHgxMywKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIyLCAweDhmLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MmQsIDB4MDIsIDB4MGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OGYsIDB4YTIsIDB4MDIsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGY4LCAweDhlLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4ZSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MjIsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNiwgMHg4ZiwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDUsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NGEsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwZiwgMHg4ZiwgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWQsIDB4OGYsIDB4MjIsIDB4MDYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDhmLCAweGEyLCAweDAyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDhmLCAweDBkLAotCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGNmLCAweDhlLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGUsIDB4MDAsIDB4MDIsCi0JMHgzNiwgMHhkMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHg4ZiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwKLQkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAotCTB4MjYsIDB4OGYsIDB4YTAsIDB4NDMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJkLCAweDhmLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4ZiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmIsIDB4OTUsIDB4MDAsIDB4MTAsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzEsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MzksIDB4OGYsIDB4OTAsIDB4ZjIsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweGE2LAotCTB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHg4ZiwgMHgyMiwgMHg0OSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ZjAsIDB4MDAsIDB4MGMsIDB4MTgsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTcsIDB4MDAsIDB4NGMsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ5LCAweDhmLCAweDIyLCAweDQwLCAweGFmLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDFlLAotCTB4OTQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZiwgMHhhMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDViLCAweDhmLCAweDAwLCAweDQ3LCAweDE5LCAweDgwLCAweDAwLCAweDAwLAotCTB4NTIsIDB4OGYsIDB4MDAsIDB4MDAsIDB4OTIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OGYsIDB4NDMsIDB4NDgsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDhmLCAweDI4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDhmLCAweDIyLCAweDQ4LAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1YSwgMHg4ZiwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRlLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OGYsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweGY4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLCAweDU0LCAweDhmLCAweGEyLCAweDQxLAotCTB4M2IsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgxZSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDViLCAweDhmLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OGYsIDB4MjIsIDB4NWYsCi0JMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDhhLCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAwLCAweDAwLCAweDY1LCAweDhmLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg2NSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NjIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4ZiwgMHg0MCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDZiLCAweDhmLCAweDg1LCAweGNhLAotCTB4OTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwgMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHg3MiwgMHg4OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDE4LCAweDAwLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcyLCAweDhmLCAweGEyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNSwgMHg5NywgMHgwMCwgMHg0MCwgMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGYsIDB4OTAsIDB4NGMsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDdhLCAweDhmLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4ODEsIDB4OGYsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4ZiwgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OGYsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwgMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDkyLCAweDhmLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDQ3LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDk0LCAweDhmLCAweDQzLCAweDQ4LAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg5YSwgMHg4ZiwgMHgyOCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZiwgMHgyMiwgMHg0OCwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDFiLCAweDA4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MWIsIDB4NDcsCi0JMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDlmLCAweDhmLCAweGEwLCAweDQzLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAotCTB4YWEsIDB4OGYsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDQsCi0JMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDFmLCAweGYwLAotCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MDAsIDB4NDgsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhYSwgMHg4YSwgMHgyMywgMHg0MSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhhYSwgMHg4YSwgMHgwMCwgMHg0NywKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDk3LCAweDAwLCAweDQ3LCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OGUsIDB4YTIsIDB4NDAsCi0JMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiOCwgMHg4ZiwgMHgyMiwgMHg0NywgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDdlLCAweDhlLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDI3LCAweDkwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsIDB4MDUsIDB4YjQsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNlLCAweDk0LCAweDAwLCAweDRhLAotCTB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4ZiwgMHhhMiwgMHg1MCwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OGYsIDB4YTAsIDB4NDMsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDAwLCAweDIwLCAweDQ3LCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg4ZiwgMHg4NCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4ZiwgMHgyMiwgMHg0NywKLQkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAotCTB4ZGUsIDB4OGYsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGQ3LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQ3LCAweDhmLCAweDQyLCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHhkYywgMHg4ZiwgMHgyMywgMHg0MSwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGI5LCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDRiLCAweDk5LCAweDAwLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGEsIDB4MDAsIDB4NDgsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweGVkLCAweDhmLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MmMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OGYsIDB4YTMsIDB4NDAsCi0JMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVmLCAweDhmLCAweDIwLCAweDRjLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMiwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDYsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDk2LCAweGNjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmNSwgMHg5NywgMHgwMCwgMHg0NiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsCi0JMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDRhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQ3LAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDEzLCAweDkwLCAweDkwLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDYyLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MSwKLQkweGU1LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MjMsIDB4OTAsIDB4ODAsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM4LCAweDkwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTAsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MzIsIDB4OTAsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMywgMHg5MCwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM1LCAweDkwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsCi0JMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDIwLCAweDAwLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDJiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDk4LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4OTAsIDB4YTAsIDB4MTQsCi0JMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg5MCwgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NTAsIDB4OTAsIDB4YTQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDZlLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDNiLCAweDk4LCAweDAwLCAweDMwLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OTAsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1YiwgMHg5MCwgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1YSwgMHg5MCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDYxLCAweDkwLCAweDA2LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MjAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDksIDB4NDYsCi0JMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLAotCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OTAsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MCwgMHgyMiwgMHg0MywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNlLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDZmLCAweDkwLCAweDI0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHg5MCwgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwKLQkweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3NiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTAsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDgsCi0JMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDkwLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODQsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg5MCwgMHg0MywgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDgxLCAweDkwLCAweGE4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MzUsIDB4MDAsIDB4MWIsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4NywgMHg5MCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDkwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE1LCAweDhlLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgyMiwgMHg0YSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE1LCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweGY0LCAweDAxLCAweDAwLCAweDlmLCAweDhlLCAweDIyLCAweDA2LAotCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDJhLCAweDUwLCAweGU3LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTAsIDB4YTAsIDB4NDMsCi0JMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDk0LCAweDAwLCAweDEwLCAweDg2LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OTAsIDB4NDIsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4ZSwgMHgxYSwgMHg1ZCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDEwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDZiLCAweGZiLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGFlLCAweDkwLCAweGEwLCAweDQzLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKLQkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweGIxLCAweDkwLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NCwgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI0LCAweDkwLCAweDQyLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAotCTB4YTMsIDB4OGYsIDB4MjIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGFkLCAweDhmLCAweDAwLCAweGYwLAotCTB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg5MCwgMHg0NywgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKLQkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGM0LCAweDkwLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NmIsIDB4ODQsIDB4MWYsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDQyLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTAsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg0NiwgMHg5NywgMHgwMCwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAyLCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweGNkLCAweDkwLCAweDAwLCAweDUwLAotCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MiwgMHg0YiwgMHgxMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NGEsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDVlLCAweDAxLCAweDAwLCAweDRiLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5MCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAotCTB4ZTYsIDB4OTAsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhlZiwgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGVkLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTYsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MCwgMHgyMCwgMHgwOSwgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGY1LCAweDkwLCAweDFmLCAweDA5LCAweDk2LCAweDI0LCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg5NywgMHgwMCwgMHg1NywgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmIsIDB4OTAsIDB4MjIsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDIsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQyLAotCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MjIsIDB4NDAsCi0JMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNiwgMHg5MSwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDkxLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg5NywgMHgwMCwgMHgwOCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDkxLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDE5LCAweDk4LCAweDAwLCAweDQzLAotCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIwLCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDkxLCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4M2QsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDg3LCAweDkxLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDNiLCAweDkxLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlMywgMHg4OSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHg5MSwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4MTUsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDMsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAotCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTEsIDB4YTAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRiLCAweDkxLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwKLQkweDk5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0NywKLQkweGU3LCAweGI1LCAweDAxLCAweDAwLCAweDVjLCAweDkxLCAweDIzLCAweDBiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZTUsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAyLCAweGQwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDAwLAotCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MSwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTQsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhmOCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5MSwgMHgyMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5MSwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDk0LCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDYzLCAweDAwLCAweGE2LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5MSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4N2YsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDg1LCAweDkxLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0YSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MmQsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKLQkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNiLCAweDkxLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MSwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlkLCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGM0LCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4YjIsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDkxLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTEsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGIxLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJiLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAotCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmMsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZSwgMHg5MSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNywgMHg5MSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGM4LCAweDkxLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTEsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGQ2LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAotCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDcsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHgwYSwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTEsIDB4MDMsIDB4MWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5MSwgMHgwMCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhlMSwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDkxLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTEsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDhkLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGY2LCAweDkxLCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTEsIDB4YTIsIDB4NDAsCi0JMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDIwLCAweDBiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDkyLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4OTgsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwYywgMHg5MiwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA5LCAweDkyLCAweGE4LCAweDAwLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsCi0JMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDhlLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGUsIDB4OTEsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDJjLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHhkYywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0OCwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTIsIDB4YTgsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI3LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDkyLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDg3LCAweDQyLAotCTB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNkLCAweDkyLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MjIsIDB4MDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5MiwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNkLCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHhmMiwKLQkweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDkyLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQzLCAweDkyLCAweGEyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg0NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNlLCAweDkyLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0YywgMHg5MiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZSwgMHg5MiwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTIsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NGQsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDkyLCAweDIyLCAweDQyLCAweDk2LCAweDE0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjgsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg5MiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5MiwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjUsIDB4OTIsIDB4NDcsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg5MiwgMHgyMiwgMHg0NywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDFmLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgwOSwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OTIsIDB4YTgsIDB4NDAsCi0JMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDc2LCAweDkyLCAweDQ3LCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdlLCAweDkyLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDBiLAotCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg5NiwgMHg5MiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NiwgMHgwMCwgMHg1ZiwKLQkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTIsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDkyLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDRjLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTIsIDB4MzAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MGYsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg5OSwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGFhLCAweDkyLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4YTgsIDB4OTIsIDB4NDMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCi0JMHgzMSwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJiLCAweDkyLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGI0LCAweDkyLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiNSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGI4LCAweDkyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY1LCAweDk3LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGRjLCAweDk2LCAweDAwLCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MiwgMHgyMiwgMHg0NywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDUxLCAweDk1LCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTIsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTIsIDB4YTIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3NCwgMHg5NiwgMHgwMCwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5MiwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDkyLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQ3LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAotCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwYiwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg5MywgMHgyNiwgMHg0NywKLQkweDk3LCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4OTMsIDB4MjMsIDB4NGIsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4NGIsCi0JMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwgMHgwNCwgMHg1MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4OTMsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTMsIDB4ODQsIDB4NDgsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDkzLCAweDAwLCAweDBhLCAweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA5LCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDkzLCAweDIyLCAweDA2LCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDI0LCAweDk3LCAweDAwLCAweDQ1LAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEyLCAweDkzLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJkLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MWMsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDkzLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTMsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MywgMHhhMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MzQsIDB4OTMsIDB4MjIsIDB4NGEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyYywgMHg5MywgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5MywgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzEsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDE2LAotCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTMsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ3LCAweDkzLCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsCi0JMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDA4LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OTMsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTMsIDB4MjAsIDB4MTYsCi0JMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUxLCAweDkzLCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg5MywgMHg4NCwgMHg0NSwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg5MywgMHgwMCwgMHgwYSwKLQkweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NWIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5MywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDczLCAweDkzLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAotCTB4NzQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YiwgMHg5MywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDc0LCAweDkzLCAweDAwLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDkzLCAweDIzLCAweDBkLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDkzLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHg5MywgMHhhOCwgMHg0NiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4NSwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4OGIsIDB4OTMsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5MywgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDhmLCAweDkzLCAweGEyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhhNCwgMHg5MywgMHgyMiwgMHg0YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDk1LCAweDkzLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDkzLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTMsIDB4YTIsIDB4ZjMsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg1LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4OWQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCi0JMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGExLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDE2LCAweGU0LCAweGIxLCAweDAwLCAweDAwLAotCTB4YTcsIDB4OTMsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGI0LCAweDkzLCAweDIyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OTMsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHg5MywgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTMsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDJkLCAweDAwLAotCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MmQsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHg5MSwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MSwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGJiLCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjksIDB4OTMsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDkzLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLAotCTB4Y2IsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHg5MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGNlLCAweDkzLCAweDIzLCAweDBkLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMywgMHg5MywgMHgyMiwgMHg0MCwKLQkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDAxLCAweDg0LCAweDUwLCAweDAxLCAweDAwLAotCTB4ZGIsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGExLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDksIDB4OTMsIDB4YTgsIDB4MTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4OTMsIDB4MDAsIDB4NWUsCi0JMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg5MywgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MywgMHgyMiwgMHg0MCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg0MywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhlOCwgMHg5MywgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZWIsIDB4OTMsIDB4YTgsIDB4MGEsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGYyLCAweDkzLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDExLAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwKLQkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTQsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAxLCAweDk0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHg5NCwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDE1LCAweDk0LCAweDIyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5OCwgMHgwMCwgMHg0MSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg5NCwgMHgyMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJiLCAweDkzLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTQsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE5LCAweDk0LCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDI3LCAweDk0LCAweDI2LCAweDQ3LAotCTB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHg5NCwgMHgyMywgMHg0YiwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwKLQkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDk4LCAweDAwLCAweDRiLCAweDA0LCAweDUwLCAweDAxLCAweDAwLCAweDI4LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHg5NCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsCi0JMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTQsIDB4MjIsIDB4MDYsCi0JMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5NywgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDk0LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg5NCwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDFiLCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDgsIDB4OTQsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg5NCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHg1OSwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NCwgMHhhMiwgMHgxNiwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDk0LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwKLQkweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTMsIDB4YTIsIDB4MTYsCi0JMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTUsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHg0OSwgMHg5MywgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDYzLCAweDk0LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjgsIDB4OTQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0NSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmUsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OTQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAotCTB4NzMsIDB4OTQsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YjYsIDB4OTYsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJmLCAweDk1LCAweDAwLCAweDQ3LCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDhjLCAweDk0LCAweGEyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OTQsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4NzQsIDB4OTYsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTUsIDB4MDAsIDB4MTAsIDB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDljLCAweDk0LCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg5NCwgMHgzNywgMHg1YywKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4OTksIDB4OTQsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDE3LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDhlLCAweGIwLCAweDAxLCAweDAwLAotCTB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiMywgMHg5NCwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4ZWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NGEsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDM3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMzLCAweGMzLCAweDAxLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NCwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDlmLCAweDQ4LCAweDAzLCAweGQwLCAweDAwLCAweDAwLCAweGMxLCAweDk0LCAweDljLCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxMSwKLQkweDEwLCAweGMxLCAweDAwLCAweDAwLCAweGM2LCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweGMxLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTQsIDB4MDAsIDB4NTAsIDB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweGU1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgyMywgMHhkMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NCwgMHgwMCwgMHg1MCwKLQkweDQzLCAweGQxLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDk1LCAweDAwLCAweDQxLCAweGUxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQ3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4MDEsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLAotCTB4ZTEsIDB4OTQsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NCwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDkwLCAweDAxLCAweDAwLCAweDhkLCAweDk4LCAweDAwLCAweDQ3LAotCTB4MTksIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5OCwgMHgwMCwgMHhmMCwKLQkweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjgsIDB4OTQsIDB4YTIsIDB4NGIsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTUsIDB4YTIsIDB4NGMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGZiLCAweDk0LCAweGEyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQ2LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTQsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmMywgMHg5NCwgMHgyMiwgMHhmMCwKLQkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDQ4LCAweDk1LCAweDFmLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDk1LCAweDIwLCAweDQyLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGY3LCAweDk0LCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5NCwgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDk0LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDA4LCAweDk1LCAweDIzLCAweGYwLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OTUsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0YSwgMHg5NSwgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NSwgMHhhMiwgMHg0MSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTEsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NSwgMHgxZiwgMHgxMiwgMHg4NCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDRhLCAweDk1LCAweGEwLCAweDAxLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMywgMHg5NSwgMHhhMiwgMHg0NiwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDIyLCAweGYwLCAweDE0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MTEsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OTUsIDB4MDMsIDB4MWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTUsIDB4MjIsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxOSwgMHg5NSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU1LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg5NSwgMHgyMCwgMHg5MSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHg5NSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MjcsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI0LCAweDk1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJlLCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MmIsIDB4OTUsIDB4YTIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmIsIDB4OTUsIDB4YTIsIDB4ZjIsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5NSwgMHhhMCwgMHg5MSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI5LCAweDk1LCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLAotCTB4MzIsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDNjLCAweDk1LCAweGEyLCAweGYwLAotCTB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg5NSwgMHhhMiwgMHhmMiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MmIsIDB4OTUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MjAsIDB4OTEsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDk1LCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDNmLCAweDk1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHg5NSwgMHgyMiwgMHgwYSwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDE5LCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4NDQsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ3LCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0ZCwgMHg5NSwgMHgwMCwgMHg0MywgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgwMCwgMHg0MSwKLQkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDAwLCAweDQyLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NGQsIDB4OTUsIDB4MDAsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MDAsIDB4NGMsCi0JMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDU1LCAweDk1LCAweGEyLCAweGYzLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmEsIDB4NDEsCi0JMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDAwLCAweGU0LCAweDAxLCAweDAwLCAweDViLCAweDk1LCAweDIyLCAweDVhLAotCTB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg1YywgMHg5NSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTAsIDB4YTUsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweGYwLAotCTB4OGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4OTUsIDB4MjIsIDB4NDAsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5NSwgMHhhMiwgMHg0YiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDY3LCAweDk1LCAweDIyLCAweGYwLCAweDE4LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsCi0JMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZiLCAweDk1LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGI4LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDk2LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDk2LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTUsIDB4MzMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3NywgMHg5NSwgMHhhMSwgMHhhZCwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg5NSwgMHgxMywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRhLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHg1ZSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg1ZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAotCTB4NDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NGEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg1OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDRlLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDg2LCAweDAwLCAweDQwLCAweDVkLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDgyLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODYsIDB4OTUsIDB4NDQsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhjMiwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDk1LCAweGEyLCAweDQ1LCAweDI1LCAweDdjLCAweDAwLCAweDAwLAotCTB4OGEsIDB4OTUsIDB4MzEsIDB4MjAsIDB4ODUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4OTUsIDB4MjIsIDB4MTIsCi0JMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5OCwgMHgxMSwgMHgxMiwgMHg0OCwgMHgwMywgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg5NSwgMHgzMSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDkxLCAweDk1LCAweDIyLCAweDEyLCAweDQ4LCAweDdmLCAweDAwLCAweDAwLAotCTB4NTEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NSwgMHgwYiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDExLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLCAweDliLCAweDk1LCAweDIyLCAweDUwLAotCTB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1MSwgMHg5NywgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5OSwgMHgwMCwgMHgxMiwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCi0JMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgxMCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI3LCAweDNmLCAweDQzLCAweDExLCAweGYwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA4LAotCTB4OGEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTUsIDB4MzAsIDB4YTEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhhNCwgMHg5NSwgMHgyMiwgMHg0NSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg5NSwgMHgxMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweDQ1LCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHg4NSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDVlLCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDUxLCAweDk3LCAweDAwLCAweGYyLAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFmLCAweDk1LCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiMywgMHg5NSwgMHhhOCwgMHgwNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDRiLCAweDk2LCAweGRjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsIDB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweGJjLCAweDk1LCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJkLCAweDk1LCAweDAwLCAweDQyLAotCTB4NjgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiZCwgMHg5NSwgMHgzMSwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg0MiwKLQkweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweGJmLCAweDk1LCAweDM1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTUsIDB4MjgsIDB4YjEsCi0JMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5NSwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTUsIDB4YTgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGNiLCAweDk1LCAweDI4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLAotCTB4YzcsIDB4OTUsIDB4OWYsIDB4YmEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyNCwgMHgxMSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGQxLCAweDk1LCAweDMyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZDcsIDB4OTUsIDB4MjIsIDB4ZjgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCi0JMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDkyLCAweDQ4LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkYiwgMHg5NSwgMHgyOCwgMHhiMSwgMHg5MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNywgMHg5NSwgMHgyMiwgMHg0YywKLQkweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4OTUsIDB4YTgsIDB4YjEsCi0JMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDkwLCAweGQwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5MiwgMHg0OSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDgyLCAweDhjLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCi0JMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwgMHhlOCwgMHg5NSwgMHgyMiwgMHgxYSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDAwLCAweDM0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE1LCAweDgyLCAweDhjLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCi0JMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwgMHhmMSwgMHg5NSwgMHgyMiwgMHgwZCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDAwLCAweDFhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5NSwgMHg4MywgMHgxZSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MmQsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4MTEsIDB4MTAsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg1MCwKLQkweDQzLCAweGMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4OTYsIDB4MjIsIDB4NDAsIDB4ZjUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHhlNSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MjIsIDB4MTEsIDB4MWUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHg5NiwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NiwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAwLCAweDAwLCAweDA5LCAweDk2LCAweGEwLCAweGY0LCAweDE2LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCi0JMHgyMywgMHhkMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg0MywgMHhkMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDk2LCAweDMwLCAweDQ3LAotCTB4MTcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5MCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDEzLCAweDk2LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDEsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDk2LCAweDQwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweGRiLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTYsIDB4YTIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHg5NywgMHgzZiwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDMxLCAweDk2LCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAwLCAweDAwLCAweDFlLCAweDk2LCAweDMwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHg5NiwgMHhhMiwgMHgwYiwKLQkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDIsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQxLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjEsIDB4YTIsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHg0YSwgMHg0NCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZSwgMHg0MSwKLQkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDA3LAotCTB4OTIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0MywKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDgyLCAweDg4LCAweDAxLCAweDAwLAotCTB4MzUsIDB4OTYsIDB4NDAsIDB4MDgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5NiwgMHgyMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDNkLCAweDk2LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBmLAotCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTYsIDB4MzEsIDB4NWYsIDB4OTcsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMSwgMHg0YiwgMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDZhLCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDk2LCAweDMwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5NiwgMHhhMiwgMHgzYiwKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OTYsIDB4MTgsIDB4NGEsCi0JMHg0NCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDRmLCAweDk2LCAweDIyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4MGYsIDB4OTgsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg1ZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg5NiwgMHgwMCwgMHgwNSwKLQkweDRhLCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweGE3LCAweDVlLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OTYsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkYiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OSwgMHg5NiwgMHgyMiwgMHg0NSwKLQkweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4ZDksIDB4OTksIDB4MDAsIDB4NGEsIDB4NDQsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsCi0JMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NjEsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTYsIDB4YTIsIDB4M2IsCi0JMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGQxLCAweDk5LCAweDAwLCAweDEyLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGU2LCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJmLCAweDRmLCAweDk1LCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4NGIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGUzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJkLCAweDQ0LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHgxMCwKLQkweDMyLCAweDMwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweGEwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NGMsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDk2LCAweDIyLCAweDQxLCAweDAzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTYsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDA2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5NiwgMHhhYSwgMHg0MSwgMHgzYiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDQsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg5NiwgMHgyNiwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDY0LCAweDAxLCAweDIwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YWQsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlmLCAweDk2LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4YWMsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4OTYsIDB4YTIsIDB4NDEsCi0JMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OWEsIDB4OTYsIDB4MDAsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDFhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTYsIDB4MjIsIDB4NDAsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg1YywKLQkweDAxLCAweDAwLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDAwLCAweDQxLCAweDNiLCAweGQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWYsCi0JMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiYiwgMHg5NiwgMHg4YywgMHhmOCwgMHg4ZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LCAweDE0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZSwgMHhmOCwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJhLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHg5NiwgMHgyMCwgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjAsIDB4NGEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgyMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGIzLCAweDk2LCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDJkLCAweDQyLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NiwgMHhhMiwgMHhhNSwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZDEsIDB4OTYsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAotCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhkNiwgMHg5NiwgMHhhMCwgMHhhNSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQxLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGIsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHg5OCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0YywgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDgwLCAweDAwLAotCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLAotCTB4ZTcsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4OWYsIDB4NDEsCi0JMHg4NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDJkLCAweDAwLCAweGEwLCAweDQyLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDAwLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTcsIDB4NTIsIDB4NDMsIDB4ODEsIDB4NjAsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg5NywgMHgwMCwgMHg0MSwKLQkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA1LCAweDk3LCAweDllLCAweGJiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBhLCAweDk3LCAweGEyLCAweDQwLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNhLCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDk3LCAweDljLCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTcsIDB4YTIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgxZSwKLQkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDEzLCAweDk3LCAweGEyLCAweDQ4LCAweDk5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTcsIDB4YTIsIDB4OGEsCi0JMHhmMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDNlLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGY0LAotCTB4MjgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHg5NywgMHgyMCwgMHhmMCwgMHgzZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4YmYsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjMsCi0JMHgzYSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDJhLCAweDBjLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDYsIDB4MTQsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MmIsIDB4OTcsIDB4MjIsIDB4NDUsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgyYSwgMHhlYywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyYSwgMHg0YywgMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTcsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTcsIDB4NDUsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDk3LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQyLCAweDk3LCAweDQ1LCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDMsIDB4OTcsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTcsIDB4NDYsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDk3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDllLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHg1MiwgMHg5NywgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5NywgMHgyMiwgMHhmMywKLQkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTcsIDB4ODUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NTUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU3LCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg5NywgMHg4MiwgMHg0MSwKLQkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDVmLCAweDk3LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NSwgMHg5NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OTcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OTcsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDMsCi0JMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZjLCAweDk3LCAweGEzLCAweDE1LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDZkLCAweDk3LCAweDAwLCAweDA2LAotCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHg5NywgMHgyMCwgMHgwMiwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4NzQsIDB4OTcsIDB4MjYsIDB4NDcsIDB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NywgMHgyMywgMHg0YiwgMHgwNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTcsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHg5NywgMHhhMiwgMHgwMiwgMHgyYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg5NywgMHhhMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDdhLCAweDk3LCAweDIyLCAweDAyLCAweDBjLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODMsIDB4OTcsIDB4MDAsIDB4MDIsIDB4MTYsIDB4YzAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4OTcsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDgyLCAweDk3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3ZSwgMHg5NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MjQsIDB4OTcsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTcsIDB4MjIsIDB4MTUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDlkLCAweDk3LCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDhmLCAweDk3LCAweDIyLCAweDQ2LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OGIsIDB4OTcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NWMsIDB4OTcsIDB4MjAsIDB4MTUsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5YSwgMHg5NywgMHhhOCwgMHg0NiwKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDVjLCAweDk3LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4NWMsIDB4OTcsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OTcsIDB4YTIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGE3LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAotCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MSwKLQkweGEzLCAweDQxLCAweDAxLCAweDAwLCAweGFiLCAweDk3LCAweDAwLCAweDQxLCAweDI3LCAweGQwLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHgwNiwKLQkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGM0LCAweDAxLCAweDAwLAotCTB4YmEsIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDQwLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NywgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MywKLQkweDg2LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDBiLCAweDE2LCAweGM4LCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTcsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5NywgMHgyMiwgMHgwNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDk3LCAweGEyLCAweDA2LCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGNkLCAweDk3LCAweDIyLCAweDQ4LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OTcsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDMxLCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmQsIDB4NDgsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGQwLCAweDk3LCAweGEwLCAweDQ4LAotCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywKLQkweGZjLCAweGM5LCAweDAxLCAweDAwLCAweDNiLCAweDk4LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4OTcsIDB4MjIsIDB4NGEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDAwLCAweDJkLCAweGFiLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg5NywgMHg2NCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAwLCAweDAwLCAweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGYsIDB4OTcsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LAotCTB4MzAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxOSwgMHhmYywgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhlZCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhmMiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywKLQkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDRjLCAweDk1LCAweDYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsIDB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGZkLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGU4LCAweDVmLCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg5OCwgMHgyMiwgMHg0MywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4NmUsIDB4MDYsCi0JMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwZSwgMHg5OCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweDRjLAotCTB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHg5OCwgMHg0MiwgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5ZSwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDk4LCAweDI2LCAweDMwLCAweDkzLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweDk4LCAweDkwLCAweDRjLAotCTB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwgMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDFkLCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmEsIDB4OTgsIDB4MjIsIDB4NWYsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHg5OCwgMHhhMiwgMHg0MCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg5NywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDk4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MjEsIDB4ODEsIDB4ODQsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHg5OCwgMHhhMiwgMHg1ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MywKLQkweDE5LCAweDdjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NiwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwKLQkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDA4LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDM4LCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5OCwgMHgyMCwgMHg0YywKLQkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NDEsIDB4OTgsIDB4MjAsIDB4ZjIsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDAwLCAweDJkLCAweDE0LAotCTB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4OTgsIDB4MjAsIDB4NGMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDQ5LCAweDk4LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDZlLCAweGYzLCAweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLAotCTB4ODIsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTgsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwKLQkweDgyLCAweGVjLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTIsIDB4OTgsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg0OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDRiLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDRkLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDU0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTcsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDViLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDVkLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDY0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjcsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDZiLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDZjLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NmUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDczLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzcsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDdhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDdjLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4N2UsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg3MiwgMHg5OCwgMHg0MywgMHg1NywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg5OCwgMHhhMiwgMHg1NywKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweGEyLCAweDQwLCAweDgxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3NiwgMHg5OCwgMHhhOCwgMHg0YSwgMHg4MCwgMHgzMywgMHgwMCwgMHgwMCwKLQkweDdiLCAweDk4LCAweDIyLCAweDVmLCAweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzksIDB4OTgsIDB4YTgsIDB4NGIsIDB4YWMsIDB4MzMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHhhNSwgMHg4MiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiZSwKLQkweDgzLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4NGEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTgsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg5OCwgMHgyMiwgMHg1NywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDliLCAweDIwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5YiwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDAxLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhhNywgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgyZCwgMHgxYywgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwKLQkweDhhLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDhiLCAweGVjLCAweDAwLCAweDAwLAotCTB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDk3LCAweDk4LCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJlLCAweDAwLCAweDJmLCAweGFiLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OTgsIDB4MDAsIDB4MTQsIDB4ODIsIDB4NTAsIDB4MDEsIDB4MDAsCi0JMHg5YywgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5YywgMHg5OCwgMHgyMiwgMHhmMiwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDhjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4OWMsIDB4OTgsIDB4OWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDJkLCAweDMwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5NCwgMHgwMCwgMHgyZCwgMHhmMiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5OCwgMHgyMywgMHhmMCwKLQkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQyLCAweDg4LCAweGY0LCAweDAxLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MjAsIDB4NTAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTgsIDB4YTMsIDB4OTIsCi0JMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg5OCwgMHgwMCwgMHg0NCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDBhLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA5LAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDgsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwNywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNywKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA3LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDA2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA2LAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA1LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTgsIDB4MDAsIDB4NDQsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwZiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDBlLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBkLAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBjLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDMsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg5OCwgMHgyMywgMHg0MCwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDk0LCAweDAwLCAweDIwLCAweDlkLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OTgsIDB4YTIsIDB4ZjAsIDB4MzgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ2LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4OWMsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweGQ1LCAweDk4LCAweDIzLCAweDQxLAotCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDEsIDB4MjQsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4OTgsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MiwgMHgzOCwgMHhlYywgMHgwMCwgMHgwMCwKLQkweGRmLCAweDk4LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OTgsIDB4YTMsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGU1LCAweDk4LCAweDIyLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NWYsCi0JMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5OCwgMHgyMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDgwLCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDIwLCAweDEyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4YTAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4ZWUsIDB4OTgsIDB4OWYsIDB4NDEsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweGVmLCAweDk4LCAweDAwLCAweDQxLCAweDI0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGY4LCAweDk4LCAweGEyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg0MSwKLQkweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGY4LCAweDNlLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4MTIsIDB4ZTAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDAsIDB4MjAsIDB4YWIsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHhhMCwgMHgxZiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDk5LCAweGEzLCAweDVmLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxNSwgMHg5OSwgMHgyMiwgMHhmMiwgMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5OSwgMHgxZiwgMHg0MywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDBhLCAweDk5LCAweGEyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQxLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OTksIDB4OWYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg4LCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDk5LCAweDFmLCAweDQ0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4YTIsIDB4NDAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxOCwgMHg5OSwgMHg2MiwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2MiwgMHg0MSwKLQkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJjLCAweDAwLCAweDJlLCAweDQzLCAweDg3LCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTksIDB4MjAsIDB4NDMsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg0MywKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDQzLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDljLCAweDAwLCAweDJkLCAweGYwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg5OSwgMHhhMiwgMHgxMiwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHhmMiwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDJiLCAweDk5LCAweGEwLCAweGYyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MjAsIDB4NDEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgyZCwgMHgxMiwgMHg4NiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDk5LCAweGEzLCAweDQxLCAweGUwLCAweDZkLCAweDAwLCAweDAwLCAweDJmLCAweDk5LCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgyZCwgMHg0MywgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5OSwgMHg5ZiwgMHg0MiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzQsIDB4OTksIDB4YTMsIDB4NDIsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTksIDB4MDAsIDB4MGEsCi0JMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDk5LCAweGEwLCAweDE3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDE3LAotCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTksIDB4MjIsIDB4NDAsIDB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgwYSwgMHgwYywgMHhlYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDNjLCAweDk5LCAweGEwLCAweDQxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHg0OCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDJhLCAweDBjLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTksIDB4MjIsIDB4NDksCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweGFhLCAweDk3LCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTksIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHgwOCwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDU3LCAweDk5LCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4YWEsIDB4OTcsIDB4MDAsIDB4NDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5OSwgMHg0MywgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDk5LCAweDI4LCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTksIDB4OTksIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhhYSwgMHg5NywgMHgxYiwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5OSwgMHgyMiwgMHg1ZiwKLQkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDE1LCAweDYyLCAweDMxLCAweDAwLCAweDAwLAotCTB4NWUsIDB4OTksIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHg5OSwgMHgwMCwgMHg0OSwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDA2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAzLCAweDA2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhhMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDY1LCAweDk5LCAweGEwLCAweDU0LCAweDkzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDZlLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgyZSwgMHgwOCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDc0LCAweDk5LCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NywgMHgyZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MmUsIDB4MDUsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDU3LCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGI4LCAweDk0LCAweDIwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDg2LCAweDk5LCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2ZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDY4LCAweGIxLCAweDAxLCAweDAwLCAweDhhLCAweDk5LCAweDg1LCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MzMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDI5LCAweDliLCAweDAxLCAweDAwLCAweGVlLCAweDA1LCAweDAwLCAweDQwLCAweDI1LCAweDliLCAweDAxLCAweDAwLAotCTB4NDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGE1LCAweDNjLCAweDhiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NWIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsCi0JMHg0NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1OSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTMsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhhNywgMHg5OSwgMHhhMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhhNywgMHg5OSwgMHhhMiwgMHg1MSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGE4LCAweDk5LCAweDAwLCAweDQwLCAweDFkLCAweGIzLCAweDAwLCAweDAwLAotCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsCi0JMHg4OCwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHhhNiwgMHgzYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweGMwLCAweDAwLCAweDlkLCAweDNiLCAweDliLCAweDAxLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDQwLAotCTB4MjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGQsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwYSwgMHgwMCwgMHhhNiwgMHgxNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4YSwKLQkweDE1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWUsIDB4NTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgyMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDQzLCAweDAwLCAweDRiLCAweDk2LCAweGM4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDEwLAotCTB4MjAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsIDB4MjAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5OSwgMHgyZSwgMHgwYSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGI3LCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJiLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5OSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGJmLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OTksIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDkwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTksIDB4ODUsIDB4NDEsCi0JMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGNlLCAweDk5LCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAotCTB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4OWMsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg5OSwgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDgwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDljLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OTksIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsCi0JMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLAotCTB4OTIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg4MCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKLQkweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg5OSwgMHg4MCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDk5LCAweDAwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OTksIDB4ODAsIDB4YTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5OSwgMHgyMCwgMHg0ZiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZWEsIDB4OTksIDB4MjAsIDB4NGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5OSwgMHgyMCwgMHg0NywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NDEsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyZiwgMHg0YywKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZWUsIDB4OTksIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4YTUsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5OSwgMHhhMiwgMHhhNSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTksIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGY3LCAweDk5LCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5OSwgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGZjLCAweDk5LCAweDFmLCAweDkxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjgsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MjMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAzLCAweDAwLCAweDQwLCAweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDA2LCAweDA1LCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDcsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAyLCAweGEyLCAweGY4LCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIyLCAweGYwLAotCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGEzLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGMxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OWEsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5YSwgMHgwMCwgMHgwNSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDlhLCAweDAwLCAweDA1LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMSwgMHg5YSwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwgMHgzMywgMHg5YSwgMHgwMCwgMHg0NCwKLQkweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGE0LCAweGU3LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzEsCi0JMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyOSwgMHg5YSwgMHgyMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDlhLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLCAweGIxLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGE0LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDkxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzksIDB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsIDB4MjksIDB4OWEsIDB4MjIsIDB4NDEsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg5YSwgMHgwMCwgMHg0MSwgMHhjMSwgMHhjMywgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweGRlLCAweDg1LCAweDg5LCAweDAxLCAweDAwLCAweDI5LCAweDlhLCAweDAwLCAweGMyLAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4OTUsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgyOSwgMHg5YSwgMHgwMCwgMHhjYSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKLQkweDgxLCAweGM4LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweGYyLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLAotCTB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDlmLCAweDQxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI5LCAweDlmLCAweDIyLCAweDQwLAotCTB4N2IsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweGM2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHg5ZiwgMHgwMCwgMHg0ZCwgMHg5YSwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGMyLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4OWYsIDB4YTIsIDB4NDEsIDB4OWIsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0OSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4YzksIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NGEsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGM5LCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDksIDB4OWYsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywKLQkweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NGYsCi0JMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE5LCAweDlhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OWEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JfSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYnJjdnVjb2RlLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYnJjdnVjb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYTVhNGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2JyY3Z1Y29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMiBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgotICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZwotICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgR0JfUkNWVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKLSNkZWZpbmUgR0JfUkNWVUNPREVfVkVSU19EQVRFICAJIjIwMDYvMDMvMjcgMTU6MTI6MTUiCi0KLXN0YXRpYyB1MzIgR0JSY3ZVQ29kZUxlbiA9IDUxMjsKLQotc3RhdGljIHU4IEdCUmN2VUNvZGVbMjU2MF0gPQotewotMHg0NywgMHg3NSwgMHgwMSwgMHgwMCwgMHgwNCwgMHhhMCwgMHgxMywgMHgwMSwgMHgwMCwgMHgxYywgMHhiNywgMHg1YiwgMHgwOSwKLTB4MzAsIDB4MDAsIDB4YjYsIDB4NWYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4M2IsCi0weDc4LCAweDNhLCAweDAwLCAweDFjLCAweGEyLCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweDAxLCAweDcwLAotMHgxOCwgMHhiMywgMHg3YiwgMHhhOSwgMHhhYSwgMHgxZSwgMHhiNCwgMHg3YiwgMHgwMSwgMHgwYywgMHgxYywgMHhiNSwgMHg3YiwKLTB4MWQsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjQsIDB4MDgsIDB4MGMsIDB4MzEsIDB4NTYsIDB4NzAsIDB4MDQsCi0weDBjLCAweDMxLCAweDU2LCAweDgwLCAweDA0LCAweDBjLCAweDMxLCAweDRhLCAweDkwLCAweDA0LCAweDBjLCAweDMxLCAweDQ2LAotMHhhMCwgMHgwMCwgMHgwOSwgMHgyNSwgMHg1MSwgMHhjMCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0ZSwgMHhiMCwgMHgwMCwgMHhlOSwKLTB4MjQsIDB4NTEsIDB4YzAsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4MDAsIDB4MWMsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsCi0weDFjLCAweDA2LCAweDU2LCAweDQyLCAweGQ0LCAweDA4LCAweDA3LCAweDlkLCAweDAwLCAweDAwLCAweDFjLCAweDdiLCAweGI3LAotMHgwMiwgMHgwMCwgMHgxMCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHgwNiwgMHg1NiwgMHg1YSwgMHhjMCwgMHgwNCwKLTB4YTAsIDB4MzAsIDB4NmMsIDB4MDMsIDB4MDAsIDB4YWMsIDB4MzAsIDB4NmQsIDB4MDMsIDB4MDAsIDB4Y2QsIDB4MDMsIDB4M2EsCi0weDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDFjLCAweDYwLCAweDhlLCAweDQxLCAweDU0LCAweDA5LCAweDI5LAotMHgyNSwgMHg2ZCwgMHgwMywgMHgwMCwgMHg4MCwgMHg4ZSwgMHg0MSwgMHg1NCwgMHgwOSwgMHg4YywgMHgzMCwgMHg4ZCwgMHgwMCwKLTB4MDQsIDB4NDcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4MDAsIDB4MDAsCi0weDYwLCAweDAwLCAweDA0LCAweDQ3LCAweDFjLCAweDYxLCAweGMwLCAweDA0LCAweDQ3LCAweDFjLCAweDZkLCAweDAzLCAweDAwLAotMHg2YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg0ZCwgMHgzNCwgMHgwMiwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwKLTB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YzgsIDB4ODMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ODAsCi0weDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDA0LCAweGEwLCAweDBmLCAweDQwLCAweDU0LAotMHgwOSwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHg3YiwgMHhmYiwgMHhmMiwgMHgwMCwgMHgxYywgMHhjYywgMHgzMywKLTB4MGQsIDB4MDAsIDB4MWMsIDB4YjQsIDB4N2IsIDB4ZmQsIDB4MDMsIDB4MWMsIDB4ODAsIDB4MGUsIDB4NDAsIDB4NTQsIDB4MDksCi0weGUwLCAweGZiLCAweDA1LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweGIzLCAweDBmLCAweDQxLAotMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhlOCwgMHg3MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlOCwgMHg4MCwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4YTAsIDB4OTMsIDB4MDAsIDB4NjEsIDB4NzYsIDB4YTEsIDB4YzMsIDB4MDQsIDB4YzAsIDB4OGQsIDB4NDEsIDB4NTQsCi0weDA5LCAweGUwLCAweDdiLCAweDAwLCAweGMwLCAweDFmLCAweGEwLCAweGZkLCAweGMxLCAweDAxLCAweDAwLCAweGNjLCAweDMzLAotMHgwNSwgMHgwMCwgMHgxYywgMHhkNCwgMHgwMywgMHgwMCwgMHgzYywgMHgxYywgMHhkNCwgMHhkMywgMHgxYiwgMHgwMCwgMHgxYywKLTB4YzAsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MTMsIDB4MDQsIDB4OGUsIDB4OGUsIDB4NDIsCi0weDU0LCAweDA5LCAweDViLCAweDgwLCAweDc2LCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLAotMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwKLTB4MDksIDB4YzAsIDB4MDMsIDB4ZmMsIDB4N2YsIDB4MWMsIDB4YTAsIDB4MDEsIDB4OWMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGEwLCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGMwLCAweDAzLCAweGZjLCAweDAzLCAweDFjLAotMHhmNSwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwgMHhmNiwgMHgwNSwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwKLTB4NTQsIDB4MDksIDB4YjMsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsCi0weDBmLCAweDQxLCAweDU0LCAweDA5LCAweDdhLCAweDA2LCAweDAyLCAweDAwLCAweDFjLCAweGI1LCAweDAyLCAweDAyLCAweDAwLAotMHgxYywgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHhhZiwgMHgwMywgMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwKLTB4NDIsIDB4NTQsIDB4MDksIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MWMsCi0weGEwLCAweDNkLCAweGE2LCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweGE4LCAweDExLCAweDA0LCAweGQ0LCAweGQzLCAweDUyLAotMHgwMCwgMHgxYywgMHhiNSwgMHgzZSwgMHhhZSwgMHgwMSwgMHgwMCwgMHgyMCwgMHhmYiwgMHhmZCwgMHhmZiwgMHgxZiwgMHg4MCwKLTB4MmMsIDB4ODQsIDB4MDMsIDB4MDAsIDB4YjksIDB4M2EsIDB4OWEsIDB4MDEsIDB4MDAsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsCi0weDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLCAweDEwLCAweGRiLCAweDgzLCAweDE2LCAweDAwLCAweDFjLCAweGM3LCAweDFkLAotMHgxZCwgMHhjMSwgMHgwNCwgMHhiOSwgMHgzYiwgMHg4OSwgMHhjMSwgMHgwNCwgMHg4YiwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywKLTB4NmIsIDB4MmMsIDB4MzEsIDB4YzEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MTEsIDB4MDAsIDB4Y2IsIDB4MmMsIDB4NzUsCi0weGMxLCAweDA0LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDU0LAotMHhkMCwgMHgwMiwgMHgwMCwgMHgxYywgMHg0OSwgMHgyNSwgMHhhZCwgMHgwMSwgMHgwMCwgMHhhYiwgMHgyYywgMHg3ZCwgMHhjMSwKLTB4MDQsIDB4YTcsIDB4MWQsIDB4NmQsIDB4MDMsIDB4MDAsIDB4Y2MsIDB4MzMsIDB4MDksIDB4MDAsIDB4MWMsIDB4ZWIsIDB4MmQsCi0weDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LAotMHhhZSwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhkNCwgMHgwNywgMHhmYywKLTB4MDMsIDB4MWMsIDB4OTksIDB4M2EsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YmIsIDB4MzgsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsCi0weDM4LCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweDA0LCAweGRiLCAweDNiLCAweDdlLCAweDAwLAotMHgxYywgMHhjNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwgMHgwYSwgMHgwNiwgMHgxYywgMHgyNywgMHgxZCwKLTB4MDEsIDB4MDAsIDB4MWMsIDB4YjMsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksCi0weDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLAotMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHhhMCwKLTB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MDYsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsCi0weDA5LCAweGFmLCAweDAzLCAweDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLAotMHg0MiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwKLTB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsCi0weDU0LCAweDA5LCAweDAwLCAweDNkLCAweDAyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDU0LCAweDEyLCAweDAwLCAweGNiLAotMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwgMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwKLTB4MTAsIDB4YTYsIDB4N2IsIDB4ZjEsIDB4MDUsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4YzIsIDB4MDQsIDB4YTYsIDB4N2IsCi0weGYxLCAweDA1LCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDA0LCAweGNiLCAweDJmLCAweDA1LCAweDAwLCAweDFjLAotMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHhjNywgMHgxYywgMHhlMSwgMHgwMiwgMHgwMCwgMHg1MywgMHgwZiwgMHg0MiwKLTB4NTQsIDB4MDksIDB4YzAsIDB4ODMsIDB4ZjEsIDB4MzIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4MDQsIDB4NDYsCi0weDdhLCAweGRhLCAweDA1LCAweDFjLCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweGMwLCAweDgzLCAweGYxLCAweDMyLAotMHgxYywgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwNCwgMHg0MCwgMHhmYSwgMHgxNSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwKLTB4YTAsIDB4MDIsIDB4MDQsIDB4NDYsIDB4N2EsIDB4ZGEsIDB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksCi0weGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLAotMHg1NCwgMHgwOSwgMHhiMywgMHg3YiwgMHgwMSwgMHhjMCwgMHgxZiwgMHg3NCwgMHgwZSwgMHg0MCwgMHg1NCwgMHgwOSwgMHhjMCwKLTB4MDMsIDB4OWMsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDIsCi0weDA0LCAweDAwLCAweDAwLCAweGM0LCAweDEyLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGQ0LCAweGQzLAotMHgyYiwgMHgwMCwgMHgxYywgMHhkNCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHg4MCwgMHg3NiwgMHg5NSwgMHgxMywgMHgwNCwKLTB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4YTYsIDB4N2IsIDB4YTksIDB4MDMsIDB4MTAsIDB4YzcsIDB4OWMsIDB4MDAsCi0weDAwLCAweDFjLCAweDgwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDA0LCAweDAwLAotMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHhhYiwgMHgyZCwgMHhmMSwgMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHhjZCwgMHhjMiwKLTB4MDQsIDB4OGIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NjksIDB4MjUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTYsIDB4N2IsCi0weGE5LCAweDAzLCAweDEwLCAweGNiLCAweDJmLCAweDA5LCAweDAwLCAweDFjLCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLAotMHgwMCwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHg0NiwgMHg3YSwgMHhkYSwKLTB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4MWMsIDB4MDAsCi0weDAwLCAweDI4LCAweDAzLCAweDA0LCAweDQ2LCAweDdhLCAweGRhLCAweDA1LCAweDFjLCAweGI1LCAweDBmLCAweDQxLCAweDU0LAotMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3MywgMHhlYywgMHg0MiwgMHgwMywgMHgwNCwgMHg2MCwgMHgyYywKLTB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4YzcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsCi0weDAwLCAweDAwLCAweDQwLCAweDEzLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGMwLCAweGQ3LCAweDIyLAotMHgwMCwgMHgxYywgMHg3NSwgMHg1NiwgMHg5NiwgMHgxMywgMHgwNCwgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHhlNywKLTB4MWMsIDB4NWQsIDB4MDMsIDB4MDQsIDB4ZTcsIDB4OWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTYsIDB4N2IsIDB4YTksIDB4MDMsCi0weDEwLCAweDgwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDA0LCAweDAwLCAweDAwLAotMHg2YywgMHhjMywgMHgwNCwgMHhiOSwgMHg3YiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMywgMHgwNCwKLTB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDQsIDB4MWMsIDB4YzcsIDB4OWYsIDB4ODAsCi0weDAzLCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweGMzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLAotMHgyZiwgMHgwZCwgMHgwNCwgMHgxYywgMHhjNywgMHg5ZiwgMHg4MCwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMywKLTB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDAsIDB4MWQsIDB4MDAsIDB4MDAsCi0weGEwLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGEwLCAweDEzLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLAotMHhjMCwgMHgxZCwgMHhmMCwgMHhkMywgMHgwOCwgMHgyNywgMHg5ZCwgMHhmOCwgMHgwMywgMHgwMCwgMHhhMCwgMHhlZSwgMHg1NiwKLTB4ZDQsIDB4MDAsIDB4ZmIsIDB4NzUsIDB4MTksIDB4MTQsIDB4MDQsIDB4MjAsIDB4N2IsIDB4MDYsIDB4MDAsIDB4MWMsIDB4YzAsCi0weDFjLCAweDJjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweGQzLCAweDA4LCAweDAwLCAweDAwLCAweDEwLCAweGY0LAotMHgwMCwgMHhjMCwgMHhlZiwgMHhmMiwgMHgwMCwgMHgxYywgMHgyMCwgMHgyNSwgMHg2YywgMHgxNCwgMHgwNCwgMHg2MCwgMHhiNywKLTB4ZTYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTUsIDB4MDAsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsCi0weGNjLCAweDMzLCAweDA1LCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGM1LCAweDA0LCAweDYwLCAweGI3LCAweDFlLAotMHgwNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjNCwgMHgwNCwgMHhjMCwKLTB4MWQsIDB4YWMsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzQsIDB4MDQsIDB4MDcsIDB4OWQsIDB4MDAsIDB4MDAsCi0weDFjLCAweDFiLCAweDc0LCAweDBkLCAweGY0LCAweDA0LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGUwLCAweDdiLAotMHgwMCwgMHhmYywgMHgxZiwgMHgzOSwgMHg3ZiwgMHgwMiwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHhiMSwgMHhjMywgMHgwNCwKLTB4YTYsIDB4N2IsIDB4YzEsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzQsIDB4MDQsIDB4ZTAsIDB4MWMsIDB4MDAsCi0weDAwLCAweDFjLCAweDAwLCAweDAwLCAweGI4LCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLAotMHgyZiwgMHgwMSwgMHgxMCwgMHgxZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMywKLTB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTgsIDB4MWQsIDB4YzcsIDB4OWYsCi0weDAwLCAweDBiLCAweDFjLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweGZiLCAweDc1LCAweDAxLCAweDAwLCAweDFjLAotMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwMSwKLTB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4YTAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTAsCi0weGVlLCAweGI2LCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLCAweDJmLCAweDA5LCAweDA0LAotMHgxYywgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHhjYywgMHhiMywKLTB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YzUsIDB4MDQsCi0weDAwLCAweDAwLCAweDg4LCAweDM0LCAweDA1LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDE1LAotMHgwMiwgMHgxYywgMHg0NywgMHg5ZCwgMHg2NCwgMHhjNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg0NCwgMHgwMCwgMHg4MCwKLTB4MWQsIDB4OGMsIDB4NTQsIDB4MDQsIDB4ODcsIDB4MWQsIDB4OWQsIDB4MDQsIDB4MDAsIDB4Y2UsIDB4NzYsIDB4MDEsIDB4MDAsCi0weDFjLCAweGVmLCAweDc2LCAweGFkLCAweGM0LCAweDA0LCAweGE0LCAweDc3LCAweDlkLCAweDI0LCAweDA5LCAweGU0LCAweDc2LAotMHgwMSwgMHgwMCwgMHgxYywgMHhjNCwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhOCwgMHg1NCwgMHgwNCwKLTB4ZDcsIDB4NzYsIDB4MDEsIDB4NTAsIDB4MTgsIDB4ZjYsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDMwLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGNjLCAweDMwLCAweDUxLCAweGM1LCAweDA0LCAweGViLAotMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwgMHgwMCwgMHgxYywgMHhjMCwgMHg1OSwgMHgwMSwgMHgwMCwKLTB4MWMsIDB4ZjUsIDB4NzcsIDB4MzksIDB4YzUsIDB4MDQsIDB4ZTAsIDB4MzAsIDB4ZWMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NGMsCi0weGMwLCAweDA0LCAweDAwLCAweDIwLCAweDRjLCAweDA0LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweDAwLAotMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwOSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhjNSwKLTB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTksIDB4MDIsIDB4MWMsIDB4ZWIsCi0weDJkLCAweGM1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDBkLCAweDAyLAotMHgxYywgMHhlYiwgMHgyZCwgMHhjNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywKLTB4MTEsIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YzUsIDB4YzQsIDB4MDQsIDB4MDAsIDB4N2IsIDB4MDAsIDB4ODAsIDB4MWMsCi0weGFlLCAweDc3LCAweDUxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGMwLCAweDA0LCAweGQzLCAweDhiLCAweDAwLAotMHhmYywgMHgxZiwgMHg2MCwgMHg3YSwgMHgzYywgMHgwMCwgMHgxYywgMHg2MCwgMHg0YywgMHhkMCwgMHgwNCwgMHgwMCwgMHhjMCwKLTB4MmYsIDB4MjAsIDB4MDUsIDB4MWYsIDB4ZTAsIDB4MzAsIDB4YzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjUsIDB4YzAsIDB4MDQsCi0weDAwLCAweGI1LCAweDViLCAweGMxLCAweDA0LCAweDA0LCAweDY5LCAweDI2LCAweDAxLCAweDAwLCAweDFjLCAweDZhLCAweDJiLAotMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgxZCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhOSwgMHgyNSwgMHg1MSwgMHgwNSwgMHgwMCwKLTB4ZWUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWYsIDB4NzcsIDB4MTEsIDB4MDUsIDB4MDAsIDB4YjQsIDB4NWYsIDB4MDEsCi0weDQwLCAweDE4LCAweDA3LCAweDlkLCAweDU0LCAweDU1LCAweDA0LCAweGI3LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDk2LAotMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg0NywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNCwgMHgzMywgMHgwMSwgMHg2MCwKLTB4MTgsIDB4YTQsIDB4MmYsIDB4MDEsIDB4NjAsIDB4MTgsIDB4NjQsIDB4NzcsIDB4MDEsIDB4NjAsIDB4MTgsIDB4MjQsIDB4NzcsCi0weDAxLCAweDYwLCAweDE4LCAweDQ0LCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDY0LCAweDg4LCAweDAzLCAweDAwLCAweDFjLAotMHhhNCwgMHgzZiwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNCwgMHgzYiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1MywgMHg3NywgMHgwMSwKLTB4MDAsIDB4MWMsIDB4ZDMsIDB4Y2YsIDB4M2IsIDB4MDAsIDB4MWMsIDB4NTMsIDB4NGYsIDB4MDIsIDB4MDAsIDB4MWMsIDB4ZDMsCi0weGNmLCAweDAwLCAweDAwLCAweDFmLCAweGRhLCAweGNmLCAweDBiLCAweDAwLCAweDFjLCAweGQ1LCAweDU3LCAweDBmLCAweDAwLAotMHgxYywgMHhkMywgMHhkMywgMHgzNywgMHgwMCwgMHgxYywgMHhkNCwgMHg1MywgMHgwZiwgMHgwMCwgMHgxYywgMHhlMCwgMHgyOSwKLTB4MDAsIDB4MDAsIDB4MWMsIDB4ZjUsIDB4ZDUsIDB4YzAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4NTUsIDB4MDQsCi0weDc3LCAweDU2LCAweDAxLCAweDAwLCAweDFjLCAweDU2LCAweDUzLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLAotMHgxMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhmNSwgMHg1NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4YzQsIDB4NTUsIDB4MDQsIDB4NzcsIDB4NTYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTYsIDB4NTMsIDB4MDEsIDB4MDAsCi0weDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDE4LCAweDAwLCAweDAwLCAweDA0LCAweGMwLCAweDA0LCAweGNiLCAweDJmLAotMHgwMSwgMHgxOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwOCwgMHgxMCwKLTB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MjAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsCi0weDAwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDI4LCAweDEwLCAweDg5LCAweDI1LCAweDZkLCAweGMyLCAweDA0LCAweDAwLAotMHgwMCwgMHgwNCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywKLTB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDA0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LAotMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHg0MCwgMHgxYywgMHg2OCwgMHhjMCwgMHgwNCwgMHg0MCwgMHgxYywgMHg5OCwKLTB4YzAsIDB4MDQsIDB4YTcsIDB4NzcsIDB4NmQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzAsIDB4MDQsIDB4MjcsCi0weDFkLCAweGVkLCAweGMwLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLAotMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTllMDA3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4NTAgKzAsMCBAQAotI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX1NUUklORwkiMS4yIgotI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMToyMiIKLSNkZWZpbmUgT0FTSVNfVUNPREVfSE9TVElGX0lEICAJMwotCi1zdGF0aWMgczMyIE9OdW1TZWN0aW9ucyA9IDB4MjsKLXN0YXRpYyB1MzIgT1NlY3Rpb25TaXplW10gPQotewotCTB4MDAwMDQwMDAsIDB4MDAwMTAwMDAsCi19OwotCi1zdGF0aWMgdTMyIE9TZWN0aW9uU3RhcnRbXSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKLX07Ci0KLXN0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Ci17Ci0JewotCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKLQkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCi0JMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAotCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKLQkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCi0JMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAotCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAotCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCi0JMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAotCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAotCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCi0JMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAotCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKLQkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCi0JMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAotCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKLQkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCi0JMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKLQkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCi0JMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAotCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCi0JMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCi0JMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAotCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKLQkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAotCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKLQkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCi0JMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAotCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAotCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAotCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAotCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAotCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKLQkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAotCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKLQkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCi0JMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKLQkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKLQkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAotCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKLQkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCi0JMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAotCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKLQkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCi0JMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAotCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKLQkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKLQkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAotCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKLQkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAotCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKLQkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCi0JMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAotCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAotCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKLQkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAotCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKLQkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAotCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAotCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAotCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCi0JMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKLQkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAotCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKLQkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAotCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKLQkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCi0JMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAotCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAotCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAotCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCi0JMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAotCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCi0JMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCi0JMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAotCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAotCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAotCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCi0JMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKLQkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCi0JMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAotCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAotCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCi0JMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAotCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKLQkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAotCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKLQkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCi0JMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKLQkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCi0JMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKLQkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCi0JMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKLQkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAotCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCi0JMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCi0JMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAotCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAotCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCi0JMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCi0JMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKLQkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAotCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAotCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKLQkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAotCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCi0JMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAotCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAotCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAotCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAotCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKLQkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCi0JMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCi0JMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCi0JMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCi0JMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCi0JMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAotCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCi0JMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCi0JMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAotCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCi0JMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKLQkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCi0JMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKLQkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCi0JMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKLQkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCi0JMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAotCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKLQkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCi0JMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAotCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKLQkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAotCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCi0JMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKLQkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKLQkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAotCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKLQkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCi0JMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKLQkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JfSwKLQl7Ci0JMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCi0JMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAotCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAotCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDA1LCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAotCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDk5LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDJmLCAweDgxLCAweDAxLCAweDAwLAotCTB4YTIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAotCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKLQkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NTgsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAotCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHg5MSwgMHg2ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhkMCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MCwgMHhhMiwgMHg0MiwKLQkweDk3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGExLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDQsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgzZiwgMHg0MiwgMHg5NywgMHhlMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAzLAotCTB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg5OSwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywKLQkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGQzLCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCi0JMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZGEsIDB4ODAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4MDAsIDB4MjAsCi0JMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwNSwgMHg2YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNiLCAweGRiLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLAotCTB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg4YywgMHgzMywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGUyLCAweDgwLCAweGE4LCAweGIxLCAweDk0LCAweDMzLCAweDAwLCAweDAwLAotCTB4ZTgsIDB4ODAsIDB4MTQsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YzYsCi0JMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMiwgMHg0ZiwgMHg4MywgMHgwNCwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweGM2LAotCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTcsIDB4YTMsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHgxZiwgMHg1YywgMHg5NywgMHg1MywgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4MiwgMHgxZSwgMHhjNiwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweDIyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4ZjIsIDB4ODAsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4MjIsIDB4NDgsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGYyLCAweDgwLCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4YzYsIDB4OGYsIDB4MDYsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHgxZSwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywKLQkweDgxLCAweGYwLCAweDAxLCAweDAwLCAweGY2LCAweDgwLCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4NDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MiwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMywgMHgwMCwgMHgwMCwKLQkweDc1LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDgxLCAweDAwLCAweDRkLAotCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg0YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MSwgMHgwMCwgMHg0YywKLQkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDAzLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg5MCwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDliLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4OWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDlmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDlmLCAweDgxLCAweDAwLCAweDQxLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg4MiwgMHgwMCwgMHhiYiwgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MiwgMHgwMCwgMHhjYSwKLQkweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAotCTB4ZTgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAotCTB4NzcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NGQsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1ZSwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHgwMCwgMHhiYiwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDAwLCAweDRjLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAotCTB4NGMsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4ODEsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweDRkLCAweGIzLCAweDAwLCAweDAwLCAweDcwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg4MSwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4MSwgMHgyMiwgMHg0MSwKLQkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDJhLCAweDgxLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MmMsIDB4ODEsIDB4MWYsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQxLAotCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwKLQkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDJmLCAweDljLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAotCTB4MzksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmYsIDB4OTksIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHgzMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDgwLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwKLQkweGUxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4NjMsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYwLCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTIsIDB4NDAsCi0JMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4ZTEsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODEsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4MSwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDIyLCAweDVjLCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4YzQsIDB4ODAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDE3LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDYwLCAweGIxLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQxLCAweDc2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDgzLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDY1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAotCTB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjIsIDB4NDAsCi0JMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg2MCwgMHg0MCwgMHg5NSwgMHg4MywgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweDIyLCAweDQwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ODUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHhhMiwgMHg0ZSwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4MSwgMHgzNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDZlLCAweDgxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg3NCwgMHg4MSwgMHgyMiwgMHg0MSwgMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwKLQkweDk1LCAweGNiLCAweDAxLCAweDAwLCAweDY4LCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODEsIDB4YTIsIDB4NDIsCi0JMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2NywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDc3LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHhjYSwgMHg2OSwgMHg5NywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjAsIDB4NDMsCi0JMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg4MCwgMHhjYSwgMHg2NywgMHgzMywgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgzLCAweDIyLCAweDQwLCAweDY1LCAweDZmLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQ4LAotCTB4ZGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCi0JMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MCwgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAotCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4MSwgMHgyMiwgMHg1YiwKLQkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsCi0JMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHhjYSwgMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAotCTB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDVmLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAotCTB4MGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAotCTB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGE0LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4MSwgMHg5ZiwgMHg4NSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgzLCAweDg0LCAweDAxLCAweDAwLAotCTB4ZGQsIDB4ODEsIDB4MjIsIDB4MzAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODEsIDB4YTIsIDB4NGYsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAyLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDQxLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHhjNCwgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGJkLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAotCTB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwYywgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMyLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGNmLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQxLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDQxLAotCTB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNkLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDEzLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDIyLCAweDQzLAotCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhkNSwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgzLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCi0JMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ODMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGVjLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlZiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwKLQkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweGY2LCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4ODIsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4MjIsIDB4NDQsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDRhLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4MiwgMHgyMiwgMHg0ZCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDgyLCAweDIyLCAweDRmLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODIsIDB4MjIsIDB4NGUsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDgyLCAweDIyLCAweDQ1LCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg4MiwgMHgyMiwgMHg0MywKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MiwgMHgyMiwgMHg0YiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsIDB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHhjYSwKLQkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDgyLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MTQsIDB4ZjcsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg4MiwgMHhhMiwgMHg0OSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDMzLCAweDgyLCAweDE1LCAweGY4LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAotCTB4MzMsIDB4ODIsIDB4YTIsIDB4NGEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHhhMiwgMHhjOCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZWYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHg4MiwgMHg0MiwgMHg0MCwgMHhmMSwgMHgzMywgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGJiLCAweDZiLCAweGIzLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4YmIsIDB4YjEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDgyLCAweGEyLCAweDU0LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4MiwgMHhhMiwgMHgwNiwKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZjLCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAotCTB4NzgsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MjIsIDB4NDgsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MiwgMHgyMiwgMHg0YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDg1LCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDg2LCAweDgyLCAweDIyLCAweDU0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDA5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMywgMHg4MywgMHgwMSwgMHgwMCwKLQkweDdlLCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4Y2EsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMCwgMHg0MywKLQkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDgwLCAweGNhLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDgsCi0JMHhkYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKLQkweDU3LCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAotCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHhhMiwgMHg0MCwKLQkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAotCTB4OGEsIDB4ODIsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4OWIsIDB4ODIsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDgyLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDgyLCAweDU2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweGEyLCAweDQxLAotCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MiwgMHg5MSwgMHg4MSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4YTksIDB4ODIsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhYiwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwKLQkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDgyLCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCi0JMHg4MSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGJjLCAweDgyLCAweGEwLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDgyLCAweDAwLCAweDUwLAotCTB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4MiwgMHgyMiwgMHg1OCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDFlLCAweGE0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDBlLAotCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4Y2YsIDB4ODIsIDB4MzMsIDB4YzQsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkMiwgMHg4MiwgMHhhMSwgMHhhZCwgMHg5ZCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgxMywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRlLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweGFiLAotCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4YTIsIDB4NDAsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4MiwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg4OCwgMHgwMCwgMHg1ZiwKLQkweDFmLCAweGI0LCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweDVlLCAweDU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4N2QsIDB4ODgsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODIsIDB4MjIsIDB4NTQsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODQsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg5MiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4MiwgMHhhMiwgMHg1ZiwKLQkweDU5LCAweDI3LCAweDAwLCAweDAwLCAweGU3LCAweDgyLCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4ODIsIDB4YTIsIDB4NWUsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODIsIDB4MjIsIDB4NWMsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGU4LCAweDgyLCAweGE4LCAweGIxLAotCTB4MzYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlYSwgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDg4LCAweDAxLCAweDAwLCAweDM0LCAweDg1LCAweDE3LCAweDVmLCAweDFmLCAweGI0LCAweDAwLCAweDAwLAotCTB4ZmIsIDB4ODIsIDB4MzQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhlZiwgMHg4MiwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGY3LCAweDgyLCAweDUyLCAweDIxLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLAotCTB4MmYsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDgzLCAweDAwLCAweDM0LCAweDEzLCAweDg0LCAweDAwLCAweDAwLAotCTB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgxZiwgMHhiNCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZiLCAweDgyLCAweDMzLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGUsIDB4NWEsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAotCTB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4YTIsIDB4NDgsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MywgMHgwMiwgMHhlNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA2LCAweDgzLCAweDgzLCAweGU1LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDhlLCAweDgyLCAweDAwLCAweDQyLAotCTB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4OWUsIDB4ODIsIDB4MDAsIDB4NDIsIDB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHg4MywgMHgyMiwgMHg0NiwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MywgMHhhMiwgMHg0MSwKLQkweGYzLCAweDdmLCAweDAwLCAweDAwLCAweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODMsIDB4MjIsIDB4NDQsIDB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODMsIDB4YTIsIDB4NDEsCi0JMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGFjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDExLCAweDgzLCAweDIyLCAweDVhLAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHg4MywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwKLQkweDExLCAweGM5LCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLAotCTB4MTcsIDB4ODMsIDB4MjIsIDB4NDQsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODMsIDB4NDIsIDB4YTUsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MywgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDM4LCAweDgzLCAweDFhLCAweDQwLCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhkZiwgMHg4NywgMHgyMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg4NywgMHgyMiwgMHg0MCwKLQkweDY1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MjIsIDB4NDgsCi0JMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLAotCTB4MzMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4YzYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4ODMsIDB4MzMsIDB4NDAsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZSwgMHg1YSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsCi0JMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MywgMHhhMCwgMHhjZSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDRkLCAweDgzLCAweGEwLCAweGNkLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAotCTB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0ZCwgMHg4MywgMHgyMiwgMHhiNSwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgyZiwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsIDB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTUsIDB4MmUsIDB4NDAsCi0JMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ODMsIDB4YTgsIDB4YTEsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MywgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDE3LCAweDgzLCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweDAwLCAweDZmLAotCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxNywgMHg4MywgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDVjLCAweDgzLCAweGE2LCAweDQyLAotCTB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1NywgMHg4MywgMHg2MSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDgzLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4OTYsIDB4NzEsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODMsIDB4MDAsIDB4NTgsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHgwNCwgMHgwMCwgMHgxNywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRhLCAweGMxLCAweDAwLCAweDE3LCAweDk2LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MywgMHgyMywgMHg0YiwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDY4LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2YiwgMHg4MywgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDZkLCAweDgzLCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODMsIDB4MjIsIDB4NTUsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NzMsIDB4ODMsIDB4MDAsIDB4NGIsIDB4NDQsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKLQkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZjAsCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDI4LCAweDNjLCAweDQ2LAotCTB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3ZiwgMHg4MywgMHhhMiwgMHhmOCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg4MywgMHgyMiwgMHg0MSwKLQkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4N2IsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODMsIDB4YTIsIDB4ZjgsCi0JMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHg4MywgMHhhMiwgMHhmOCwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDdjLCAweDgzLCAweGEyLCAweGYwLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDhkLCAweDgzLCAweDIyLCAweDU4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHg4NCwgMHg4MywgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MywgMHhhMiwgMHhmMywKLQkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGU2LCAweDk1LCAweDAxLCAweDAwLAotCTB4OGQsIDB4ODMsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHg3NSwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4MywgMHg3NywgMHg0MSwKLQkweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDkzLCAweDgzLCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDkzLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQzLCAweDgzLCAweDc3LCAweDQxLAotCTB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MywgMHgyMiwgMHg0MSwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDliLCAweDgzLCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODMsIDB4MjIsIDB4NWYsCi0JMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweGExLCAweDgzLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGI1LCAweDgzLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4MjAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQ1LAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4NTUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGIsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NiwgMHgwMCwgMHgwMywgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGE5LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTAsCi0JMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4Y2UsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MmUsIDB4NDcsCi0JMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDgzLCAweDIzLCAweGEyLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgwMCwKLQkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDg0LCAweDAwLCAweDVjLAotCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg4MywgMHgyMiwgMHg1ZiwKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGVkLCAweDgzLCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHg3MiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAotCTB4ZjUsIDB4ODMsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MDAsIDB4ZjIsCi0JMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4MjIsIDB4NGEsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4NCwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDg0LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLCAweGYxLCAweDg0LCAweGEyLCAweDRiLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDUsIDB4ODQsIDB4NjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsCi0JMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MSwgMHg0NywgMHhjMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEwLCAweGExLCAweDA5LCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDg0LCAweDIyLCAweGExLAotCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4NCwgMHhhMywgMHg5MiwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMywgMHg4OCwgMHgyNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDg0LCAweDIyLCAweDVjLCAweDE3LCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDAwLAotCTB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhMiwgMHg0MywKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzQsIDB4ODQsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4NCwgMHhhOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDg0LCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzMsIDB4ODQsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM0LCAweDg0LCAweDI4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLAotCTB4MzAsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LAotCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4M2EsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQxLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4NCwgMHhhMiwgMHg1ZiwKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDg0LCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4NCwgMHgzNSwgMHgwMSwKLQkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NTQsIDB4ODQsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4MjIsIDB4NGQsCi0JMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGRiLCAweDg0LCAweGE3LCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlZCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU0LCAweDg0LCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWUsIDB4ODQsIDB4YTcsIDB4NDAsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg0YywgMHg4NCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2MywgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDg0LCAweGEzLCAweDBiLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAotCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLCAweDM5LCAweGIwLCAweDAxLCAweDAwLAotCTB4NmQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgxNiwgMHgzMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGRlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDcwLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NCwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDg0LCAweDgyLCAweDQxLAotCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg3YywgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NzksIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NCwgMHgyMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4OCwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCi0JMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweDAwLCAweDQ1LAotCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKLQkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDk3LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDE0LAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKLQkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweGI3LCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAotCTB4YTcsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MCwgMHgyYiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGFkLCAweDg0LCAweDIzLCAweDAxLAotCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg4NCwgMHgyMiwgMHgxYiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKLQkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweGEyLCAweDQwLCAweDI1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4MTMsCi0JMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODQsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGM2LCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjMywgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQwLAotCTB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAotCTB4Y2QsIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDIwLCAweDFkLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4ODQsIDB4YTMsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4NCwgMHg2MCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwKLQkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEzLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAotCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDg0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NCwgMHgyMiwgMHgxMywKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDk1LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDA1LCAweDg1LCAweDIyLCAweDQxLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NSwgMHgyMiwgMHg1ZiwKLQkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg1LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODUsIDB4MjIsIDB4MjAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4NSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDg1LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDg1LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM1LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDg1LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRiLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHg4NSwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDJmLCAweDg1LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsCi0JMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDQxLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NSwgMHg2NCwgMHg0NywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDNhLCAweDg1LCAweGE4LCAweDFiLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4NzQsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHgwNSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDA5LCAweDAzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODUsIDB4MDEsIDB4ZmIsCi0JMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg4NSwgMHg4NywgMHhmYiwgMHgyMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1YywgMHg4NSwgMHgyMiwgMHg0MSwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDg1LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODUsIDB4MjIsIDB4NWYsCi0JMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDUxLCAweDg1LCAweGE2LCAweDVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAotCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjksIDB4ODUsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NSwgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDY2LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NywgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg4NSwgMHgyMSwgMHgwNCwKLQkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDZlLCAweDg1LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4YTEsIDB4ODgsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODUsIDB4MDAsIDB4NDMsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGExLCAweDg4LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDRlLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NiwgMHg4NSwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg1MywKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwKLQkweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjksIDB4ODksIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODUsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg4NSwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDY5LCAweDg5LCAweDAwLCAweDUzLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDU0LAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4NywgMHg4NSwgMHhhMiwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4YTAsIDB4OTEsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4ODUsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg2OSwgMHg4OSwgMHgwMCwgMHg1NCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweGEwLCAweDQyLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NTQsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMywgMHg0MCwKLQkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDksIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LAotCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4ODUsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4NSwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGJiLCAweDg1LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGIzLCAweDg1LCAweDIyLCAweDU1LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhhYSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MywKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGJiLCAweDg1LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODUsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYywgMHg4NSwgMHg0NiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGJmLCAweDg1LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAotCTB4YjEsIDB4ODUsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCi0JMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg3OSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxOCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYywgMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGUwLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ODUsIDB4MjIsIDB4NDAsCi0JMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDg1LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweDA5LCAweDdjLCAweDAwLCAweDAwLCAweGUxLCAweDg1LCAweDY2LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4NDEsCi0JMHg0MSwgMHhjMywgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDEzLCAweDg2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDRiLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDI0LCAweGM4LCAweDAxLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAotCTB4MTEsIDB4ODYsIDB4MjIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGVhLCAweDg1LCAweGFhLCAweDQxLCAweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDQ5LAotCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHg4NiwgMHgyNiwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4NSwgMHhhMiwgMHg0MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDg2LCAweDAwLCAweDQxLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQyLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjEsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NSwgMHhhMiwgMHg0NCwKLQkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDg2LCAweGE4LCAweDQyLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGY2LCAweDg1LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4MGIsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAotCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODYsIDB4MDAsIDB4MTcsCi0JMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDkyLAotCTB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjQsIDB4ODYsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDc4LCAweDk4LCAweDAwLCAweDBhLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHg5ZiwKLQkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDIzLCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJkLCAweDg2LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MmQsIDB4ODYsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODYsIDB4YTMsIDB4MDcsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDg2LCAweGEzLCAweDQwLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBlLCAweGNjLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDg2LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDEsIDB4MmQsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODcsIDB4MjIsIDB4MGYsCi0JMHg0MiwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4NiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQzLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODYsIDB4MjIsIDB4MDcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAotCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwNiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAotCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAotCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhMiwKLQkweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4NzksIDB4ODYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCi0JMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDY2LCAweDg2LCAweGEzLCAweDA3LAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ODYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDczLCAweDg2LCAweDIyLCAweDQwLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDczLCAweDg2LCAweDIyLCAweDQyLAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk5LCAweDg2LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc1LCAweDg2LCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKLQkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODYsIDB4YTMsIDB4MTIsCi0JMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZiwgMHg4NiwgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLAotCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg5OSwgMHgwMCwgMHgwOCwgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKLQkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg3LCAweDg2LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODYsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg4NiwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDg2LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4ODYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTUsIDB4ODYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDg2LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweGI4LCAweDg2LCAweGEyLCAweDBkLAotCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGEzLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ODYsIDB4YTIsIDB4NWYsCi0JMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDYwLCAweDg2LCAweDIzLCAweDA3LAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHgwZCwKLQkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDE0LCAweDBhLCAweGQwLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhNCwgMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGExLCAweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzEsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4YzUsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKLQkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRhLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODYsIDB4MjIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MywgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGQxLCAweDg2LCAweGEwLCAweDQ2LCAweDBmLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4ODYsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwZiwgMHhhMiwKLQkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweGQ4LCAweDg2LCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5NSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGRiLCAweDg2LCAweGEwLCAweDQxLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg4NiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMCwgMHg0MywKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGUwLCAweDg2LCAweDIwLCAweDQ1LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4ODYsIDB4YTAsIDB4NDEsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDg2LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDIyLCAweDQ4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4NiwgMHg5MCwgMHg0OCwKLQkweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLAotCTB4NDIsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg5OSwgMHgwMCwgMHgxNywKLQkweDk4LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE3LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDIsIDB4ODcsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCi0JMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NywgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4ODcsIDB4YTAsIDB4MDcsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAotCTB4MGQsIDB4ODcsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNywgMHg4NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDA3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4NywgMHgyMiwgMHg0MCwgMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDBjLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LAotCTB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NywgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUyLAotCTB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHg4NywgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDk5LCAweDAwLCAweDA4LCAweDk4LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NywgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDc5LCAweDg3LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4NGQsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4NywgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4NTksIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4NywgMHhhMiwgMHgwZCwKLQkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDY1LCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweGEyLCAweDVmLAotCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NywgMHgyMywgMHgwNywKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc1LCAweDg3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MzksIDB4ODcsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4MGQsCi0JMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDgzLCAweDg3LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAotCTB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4OGMsIDB4ODcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDk4LCAweDAwLCAweDQxLCAweDNmLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDg3LCAweDIyLCAweDUwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywKLQkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGEzLCAweDg3LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4OWUsIDB4ODcsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4NywgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDBlLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4NywgMHhhMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCi0JMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4ODcsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhZCwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAotCTB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhMSwgMHg4OCwgMHhhMiwgMHg1ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0MywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDkxLCAweDZjLCAweDAwLCAweDAwLCAweGMxLCAweDg3LCAweDIyLCAweDQ4LAotCTB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4NywgMHgxZiwgMHhmMCwKLQkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDg3LCAweDIzLCAweDQxLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4YTEsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NDgsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDg3LCAweDIyLCAweDBhLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhMSwgMHg4OCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHg0NSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQyLCAweDg3LCAweDIyLCAweGYwLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NywgMHhhMywgMHg0MSwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4OCwgMHgyMCwgMHg0YywKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAotCTB4YTEsIDB4ODgsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4MGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweGVkLCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQ5LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkYSwgMHg4NywgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweGRiLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODcsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDg3LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODMsIDB4MjIsIDB4NDAsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4NywgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDEsIDB4ODMsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODcsIDB4MjIsIDB4NDYsCi0JMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NywgMHhhMiwgMHg0MSwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAotCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHhlYywgMHg4NywgMHgyMiwgMHg0MCwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGUwLCAweDgwLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODcsIDB4OWMsIDB4MGYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhmMSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDk0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZjUsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgyZSwgMHg5NCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2UsIDB4OTQsIDB4MjIsIDB4MDIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDFhLCAweDAyLAotCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODgsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4OCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODgsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDJmLCAweDgzLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBiLCAweDg4LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTYsIDB4OTUsIDB4MmYsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyOSwgMHg0MSwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4MGMsIDB4NTUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDEyLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQzLCAweDg4LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODgsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4OCwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4NzAsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDQzLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODgsIDB4YTAsIDB4NDgsCi0JMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDg4LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4OCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4OCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxYSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4OCwgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg0ZiwgMHg4OCwgMHgyMiwgMHg0MSwgMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLAotCTB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4OCwgMHg4MywgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLAotCTB4NWEsIDB4ODgsIDB4MjMsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDg4LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHg4OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4ODgsIDB4YTIsIDB4NDEsCi0JMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDVkLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MGMsCi0JMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4OCwgMHgyNiwgMHg1NCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDZjLCAweDg4LCAweDg3LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MGMsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDZjLCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjgsIDB4ODgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4OCwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDJhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBjLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NmQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4ODgsIDB4MjIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NzksIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCi0JMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDgzLCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODEsIDB4ODgsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4NCwgMHg4OCwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MjIsIDB4NTEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MywgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4OCwgMHgyMiwgMHg0MCwKLQkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAotCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGYyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4OCwgMHgyMiwgMHg1MCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCi0JMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0OCwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDU3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg4OCwgMHgwMCwgMHg0YiwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGUxLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDhjLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDhjLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4YywgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4YywgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5NSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZCwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhkLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjEsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OGUsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MmMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzZSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4ZSwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhkLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5MywgMHg4ZCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQyLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDhlLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4NGIsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4NTgsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OGUsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDNiLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYyLAotCTB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCi0JMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0ZSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDJhLCAweDAwLCAweDAwLCAweDQ3LCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4ODksIDB4MDAsIDB4NGIsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDhmLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3MSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDNhLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2EsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDNhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDRkLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDUsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDkwLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDcxLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDgxLCAweDkwLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDgxLCAweDkwLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4OTAsIDB4MDAsIDB4NGIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQxLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJiLCAweDkwLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5MSwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDU3LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDg3LCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFiLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4ZSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHg5MCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhlLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDhlLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NWEsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVhLCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1YSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTEsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDk2LCAweDkyLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJmLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTIsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YmYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MiwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjcsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4OTAsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTMsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg5MywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDRiLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDkzLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTMsIDB4MDAsIDB4NGMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NTMsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkzLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE2LCAweDkzLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZkLCAweDkyLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDQsIDB4OTMsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ3LCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDY3LCAweDkzLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjcsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZlLCAweDkzLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg4YiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODUsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhkOSwgMHg4YiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAotCTB4MWEsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA1LCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LAotCTB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4MDYsCi0JMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCi0JMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAotCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OGMsIDB4MjAsIDB4NGIsCi0JMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDhjLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4OGMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEwLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGExLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAotCTB4MWIsIDB4OGMsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OGMsIDB4YTIsIDB4NGMsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4YywgMHgwMCwgMHg0YywgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDhjLCAweDIwLCAweGYwLCAweDU2LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDMsCi0JMHg4MSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJiLCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQzLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM0LCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDhjLCAweDIyLCAweDQzLAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHg4YywgMHgyMiwgMHg0NCwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4YywgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OGMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVjLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OGMsIDB4YTIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU5LCAweDhjLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDJmLCAweDQ5LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NTksIDB4OGMsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDVjLCAweDhjLCAweGEyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGMsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgyZiwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDhjLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4YywgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc2LCAweDhjLCAweDIyLCAweDBhLCAweDE2LCAweDZjLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDE1LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4YywgMHhhMCwgMHg0MywKLQkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAotCTB4NmIsIDB4OGMsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4MGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwOCwgMHgxMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4NDEsCi0JMHgxNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDgzLCAweDhjLCAweGEwLCAweDQzLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDYsIDB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDJiLCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4YywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDhjLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDlkLCAweDhjLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjMsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhNCwgMHg4YywgMHgyMiwgMHg0NSwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKLQkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsCi0JMHg4YywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweGYzLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4YywgMHgyMiwgMHg0OCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGEsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmEsIDB4NGEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGI5LCAweDhjLCAweDIzLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDAwLCAweDIwLCAweDQwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDIwLCAweDQxLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4YywgMHhhMiwgMHg0NCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDhjLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGVhLCAweDhjLCAweGEyLCAweDA4LAotCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDk1LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDhjLCAweDIyLCAweDRhLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NSwgMHgwMCwgMHhmMywKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLCAweDhjLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGRjLCAweDhjLCAweDAwLCAweDQ5LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweGUxLCAweDhjLCAweDIyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlNSwgMHg4YywgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OGMsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDJkLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0ZSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDY4LCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDM2LCAweGQwLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweDQwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NywgMHgwMCwgMHg0MCwgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY2LCAweDhjLCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4ZCwgMHg4MiwgMHg0MSwKLQkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGZlLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MGMsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OGQsIDB4YTMsIDB4MDEsCi0JMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg4ZCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDIwLCAweDAyLAotCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHg4ZCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4ZCwgMHhhMywgMHgwMSwKLQkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDhkLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsCi0JMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4ZCwgMHhhOCwgMHgxMywKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDUxLCAweDhkLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MmQsIDB4MDIsIDB4MGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OGQsIDB4YTIsIDB4MDIsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4ZCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDhkLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGQsIDB4MjIsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4ZCwgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGQsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJjLCAweDhkLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM5LCAweDhkLCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4M2UsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDhkLCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OGQsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4ZiwgMHgwZCwKLQkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWMsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGMsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4YywgMHgwMCwgMHgwMiwKLQkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDhkLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDU3LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDVlLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGQsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhkLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OGQsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGQsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg4ZCwgMHgyOCwgMHg0MCwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDZlLCAweDhkLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NzUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4ZCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDcyLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAotCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0OCwKLQkweDNiLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OGQsIDB4YTIsIDB4NDEsCi0JMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4ZCwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZCwgMHgyMiwgMHg1ZiwKLQkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDg3LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YTcsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4OGQsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4OCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDhiLCAweDhkLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTEsIDB4OGQsIDB4ODUsIDB4Y2EsCi0JMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5OCwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGI0LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OGQsIDB4YTIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEyLCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZCwgMHg5MCwgMHg0YywKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4OGQsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhkLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZCwgMHg0NSwgMHg0OCwKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YjQsIDB4OGQsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGQsIDB4MjIsIDB4NDgsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgxZCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDFkLCAweDQ3LAotCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGQsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCi0JMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDg3LCAweDk4LCAweDAwLCAweDQ4LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGE3LCAweDg4LCAweDIzLCAweDQxLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwKLQkweGU2LCAweDZkLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDAwLCAweGJlLCAweDA2LCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGE1LCAweDhjLCAweGEyLCAweDQwLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGRiLCAweDhkLCAweDIyLCAweDQ3LAotCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhNSwgMHg4YywgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NiwKLQkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDVkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsCi0JMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDhjLCAweDkzLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhlZiwgMHg4ZCwgMHhhMiwgMHg1MCwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgyMiwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDBjLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDksIDB4OGUsIDB4MjIsIDB4NDcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCi0JMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4ZSwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZmLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4OGUsIDB4NDIsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDIzLCAweDQxLAotCTB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4NywgMHg5OCwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhNywgMHg4OCwgMHgwMCwgMHg0OCwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGEyLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDhlLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OGUsIDB4YTMsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4ZSwgMHgyMCwgMHg0YywKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDIsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDk3LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLAotCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsCi0JMHg5NiwgMHhjYywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDRhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ2LAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0NywgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDQ2LCAweDhlLCAweDkwLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgyMiwgMHg0MCwKLQkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAotCTB4MDksIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OGUsIDB4ODAsIDB4ZjMsCi0JMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZlLCAweDhlLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAotCTB4NjYsIDB4OGUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDIsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDhlLCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2OSwgMHg4ZSwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLAotCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKLQkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg4ZSwgMHhhMCwgMHgxNCwKLQkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDhlLCAweDIyLCAweDRhLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZSwgMHhhNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OTcsIDB4MDAsIDB4MzAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YywgMHg4ZSwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkzLCAweDhlLCAweDIyLCAweDRhLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDhlLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTksIDB4OGUsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKLQkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCi0JMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZSwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGEwLCAweDhlLCAweDIyLCAweDQzLAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCi0JMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZSwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGFmLCAweDhlLCAweGE4LCAweDQwLAotCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4ZSwgMHhhMCwgMHg0MywKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsCi0JMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4ZSwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGNlLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5NywgMHg4YywgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZSwgMHg4YywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDIyLCAweDA2LAotCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsCi0JMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTMsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNywgMHg4ZSwgMHg0MiwgMHgwNSwKLQkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4YzgsIDB4OGMsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHgxMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHhmYiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGU3LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg4YywgMHg5MywgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVhLCAweDhlLCAweDQyLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiZiwgMHg4ZCwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGQsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY3LCAweDhlLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAotCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OGUsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyNywgMHg4MywgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg4ZSwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGEzLCAweDk2LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDhmLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGYsIDB4MDAsIDB4NTAsCi0JMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEyLCAweDhmLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHg4ZiwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI3LCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDhmLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAotCTB4MmQsIDB4OGYsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4ZiwgMHgyMiwgMHhmMywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDhmLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDRlLCAweDhmLCAweGEyLCAweDE2LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MjMsIDB4MDAsIDB4YTYsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OGYsIDB4ODMsIDB4MWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OGYsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHg3OSwgMHg5NywgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGYsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYxLCAweDhmLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg2OSwgMHg4ZiwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDNkLCAweDgwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCi0JMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkYywgMHg4ZiwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDg0LCAweDhmLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweGEyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwKLQkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDdkLCAweDhmLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OGYsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDhmLCAweDIyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg4ZiwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDAwLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4ZiwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHg5OSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDBiLAotCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDIyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsCi0JMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAotCTB4OTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgxMSwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OGYsIDB4MjMsIDB4MGIsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHhiZSwgMHg4ZiwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDk3LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLCAweGU0LCAweGNkLCAweDAxLCAweDAwLAotCTB4YzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLAotCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGYsIDB4MjIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4Y2UsIDB4OGYsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MywgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQzLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsCi0JMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhkYywgMHg4ZiwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwKLQkweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAotCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGYsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGZhLCAweDhmLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4ZiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFmLCAweDkwLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFhLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDkwLCAweDIyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFiLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGUxLCAweDk0LCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDkwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNSwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MGEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4M2EsIDB4OTAsIDB4MDMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OTAsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDQzLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0YiwgMHg5MCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjZCwgMHg4YiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTAsIDB4MjIsIDB4NDAsCi0JMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDYyLCAweDkwLCAweGEyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNkLCAweDhiLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCi0JMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5MCwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NmQsIDB4OTAsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKLQkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZTYsIDB4OGYsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MCwgMHhhOCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDkwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg5MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGFiLCAweDkwLCAweDIyLCAweDQ3LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5MCwgMHgyMiwgMHgwMCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDkwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweGYyLAotCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5MCwgMHgwMCwgMHg0MCwKLQkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjIsIDB4OTAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGIyLCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTEsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGJhLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDUxLCAweDkxLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHg5MCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMSwgMHg5MCwgMHhhMiwgMHgxNiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkMiwgMHg5MCwgMHgyMiwgMHg0MiwgMHg5NiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDY4LCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5MCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQzLCAweDkwLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNywgMHg5MCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKLQkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGRjLCAweDkwLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MjcsIDB4ODMsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDc1LCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5MCwgMHhhOCwgMHg0MCwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAotCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OTAsIDB4NjUsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGQsIDB4OTEsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4MDAsIDB4NWYsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTAsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHgzMSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAotCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGQsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MTksIDB4OTEsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCi0JMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwKLQkweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjcsIDB4OTEsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTEsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg5MSwgMHhhMiwgMHg0MCwgMHgzMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAotCTB4MzEsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDk0LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDNhLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5MSwgMHgzNywgMHg1YywKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MzcsIDB4OTEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTEsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweGU3LCAweDMxLCAweDAxLCAweDAwLCAweDRlLCAweDkxLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDksIDB4OTEsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDkxLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDJmLCAweDQ3LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg5NywgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA5LCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MSwgMHhhMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDksIDB4OTcsIDB4MDAsIDB4NDcsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywKLQkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwKLQkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAotCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwKLQkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDhhLCAweDkxLCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ODgsIDB4OTEsIDB4ODQsIDB4NDgsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDAxLAotCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MSwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDgzLCAweDkxLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MSwgMHhhOCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4ODMsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDllLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhNCwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGE4LCAweDkxLCAweDIyLCAweDQ0LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5MSwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjcsIDB4OTEsIDB4MjIsIDB4NGEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5MSwgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDE2LAotCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTEsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4YmQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGM3LCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHgwNywKLQkweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAotCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTEsIDB4MjAsIDB4MTYsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQ5LCAweDkxLCAweGE4LCAweDQ2LAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4ODQsIDB4NDUsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHhlNywgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmMCwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDkyLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDUsIDB4OTIsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTIsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHgxYiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwKLQkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDk4LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweGUxLCAweDk0LCAweDAwLCAweDQwLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHg5MiwgMHgyMywgMHgwZCwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDEzLCAweDkyLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTIsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDkyLCAweGE4LCAweDQ2LAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE4LCAweDkyLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5MiwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTIsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHg5MiwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5MiwgMHhhMiwgMHgxNiwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDkyLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDJkLCAweDkyLCAweGEyLCAweGYzLAotCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKLQkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDMxLCAweDkyLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MTEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDM1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwKLQkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweDNiLCAweDkyLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDkyLCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDkxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHg5MiwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTIsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMSwgMHgyZCwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjcsIDB4NDAsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQxLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5MiwgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDU1LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OTIsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MywgMHg5MiwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDkyLCAweDIyLCAweDQwLCAweDFiLCAweDZjLCAweDAwLCAweDAwLAotCTB4NTgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTIsIDB4MjIsIDB4NDAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTIsIDB4YTgsIDB4MTEsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDhhLCAweDkyLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDdlLCAweDkyLCAweDIzLCAweDBkLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MiwgMHgyMiwgMHg0MCwKLQkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4OGEsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDkyLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MiwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAotCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGU2LCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MGMsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDkxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5MiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YTQsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDkyLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5MiwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTIsIDB4MjcsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjcsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5MiwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiZiwgMHg5MiwgMHgwMCwgMHg0YSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsIDB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY5LCAweDk0LCAweDAwLCAweDAwLCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MiwgMHhhMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQzLCAweDkyLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5MiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGM1LCAweDkyLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHhhOCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YzUsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLAotCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5MiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTIsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDkyLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDRmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDkyLCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjEsIDB4OTIsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LAotCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDkxLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLCAweDJiLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY5LCAweDk0LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHg5MywgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBiLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDkzLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLAotCTB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjYsIDB4OTMsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDFlLCAweDkzLCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg5MywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDFmLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4OTMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDNkLCAweDkzLCAweGEyLCAweDE2LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzksIDB4OTMsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCi0JMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk0LCAweDAwLCAweDEwLAotCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MywgMHhhMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDUyLCAweDkzLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDRhLCAweDkzLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NGYsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDg0LCAweDhmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcyLCAweDkzLCAweGEyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg3NywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLAotCTB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4NiwgMHg5MywgMHg4NSwgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQ4LCAweDAzLCAweGQwLCAweDAwLCAweDAwLAotCTB4ODgsIDB4OTMsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsCi0JMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQxLCAweGUxLCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk1LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4YTUsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweGYwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGEzLCAweDkzLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5MywgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDkwLCAweDAxLCAweDAwLCAweGNlLCAweDk3LCAweDAwLCAweDQ3LAotCTB4MTksIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5OCwgMHgwMCwgMHhmMCwKLQkweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OTMsIDB4YTIsIDB4NGIsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTQsIDB4YTIsIDB4NGMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYSwgMHg5MywgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGJkLCAweDkzLCAweGEyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQ2LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTMsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MywgMHgyMiwgMHhmMCwKLQkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDk0LCAweDFmLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDk0LCAweDIwLCAweDQyLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI5LCAweDkzLCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MywgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMxLCAweDkzLCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDIzLCAweGYwLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5MywgMHhhMiwgMHhmMCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBlLCAweDk0LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MGUsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OTMsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDBlLCAweDk0LCAweDFmLCAweDEyLAotCTB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTQsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhiYSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGY3LCAweDkzLCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTMsIDB4MjIsIDB4ZjAsCi0JMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MywgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGU2LCAweDkzLCAweDAzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGQ0LCAweDkzLCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5MywgMHgyMiwgMHgwYSwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDkzLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZDksIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGRjLCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweGUzLCAweDkzLCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTIsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlOCwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTMsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MywgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGVmLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmMSwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZWYsIDB4OTMsIDB4YTAsIDB4OTEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OTMsIDB4MjIsIDB4NDMsCi0JMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NCwgMHhhMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZkLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZiwgMHg5MywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGVkLCAweDkzLCAweDIwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDksIDB4OTQsIDB4MjIsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTMsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDU1LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTQsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDk0LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTEsIDB4OTQsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTQsIDB4MDAsIDB4NDIsCi0JMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5NCwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDExLCAweDk0LCAweDAwLCAweDRjLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDMwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NGEsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NCwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDFjLCAweDk0LCAweGEyLCAweGYzLAotCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwgMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwKLQkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDAwLCAweGU0LCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTQsIDB4MjIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMywgMHg5NCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLAotCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTQsIDB4YTAsIDB4YTUsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YTUsCi0JMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzYiwgMHg5NCwgMHgyMiwgMHg0MCwKLQkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDBjLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LAotCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NGIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzOSwgMHg5NCwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTQsIDB4MjIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsCi0JMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LAotCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAotCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzZCwgMHg5NSwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDk0LCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NTcsIDB4OTQsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4OTQsIDB4MTMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAotCTB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwgMHg1ZSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKLQkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCi0JMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAotCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODUsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDE1LCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTQsIDB4NjAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhjMiwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk0LCAweGEyLCAweDQ1LCAweDI1LCAweDdjLCAweDAwLCAweDAwLAotCTB4NzAsIDB4OTQsIDB4MzEsIDB4MjAsIDB4ODUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTQsIDB4MjIsIDB4MTIsCi0JMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNCwgMHgxMSwgMHgxMiwgMHg0OCwgMHgwMywgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg1ZiwKLQkweDhiLCAweDEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4NzksIDB4OTQsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE3LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MTIsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OSwgMHg5NCwgMHgwYiwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLAotCTB4ODYsIDB4OTQsIDB4MjIsIDB4NTAsIDB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDkzLCAweDA0LCAweDAwLCAweDEyLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDEwLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5NCwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDkwLCAweDk0LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDk0LCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGQ4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5YywgMHg5NCwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsCi0JMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDk0LCAweGE4LCAweDA1LAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKLQkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhYSwgMHg5NCwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFiLCAweDk0LCAweDAwLCAweDQyLCAweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTQsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0MiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg0MiwKLQkweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDk0LCAweDM1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTQsIDB4MjgsIDB4YjEsCi0JMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk1LCAweDQwLAotCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHg5NCwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NCwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGI5LCAweDk0LCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YywKLQkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDExLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsCi0JMHgxMSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAwLAotCTB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YzgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNywgMHg0OSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5NCwgMHgyOCwgMHhiMSwgMHg5MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDIyLCAweDRjLCAweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDQwLAotCTB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5NCwgMHhhOCwgMHhiMSwgMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDQ5LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwKLQkweGVhLCAweDk0LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDAwLAotCTB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhlNCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAotCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg5NCwgMHgyMiwgMHgwZCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHgwMCwKLQkweDFhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5NCwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDJkLCAweDAxLAotCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwKLQkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNywgMHgzZCwgMHg0MywKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweGExLCAweDE2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDk5LCAweDAwLCAweDBkLCAweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTUsIDB4MzAsIDB4NDcsIDB4MTcsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHgxYSwgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MWUsIDB4OTUsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDFmLCAweDk1LCAweDQwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyOSwgMHg5NSwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgzZiwgMHg0MSwKLQkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsCi0JMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDNjLCAweDk1LCAweDAwLCAweDNiLAotCTB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDJmLCAweDk1LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDIsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0YSwKLQkweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTIsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTUsIDB4NDAsIDB4MDgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgyMiwgMHg0NSwKLQkweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTUsIDB4MzEsIDB4NWYsCi0JMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsCi0JMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4YTIsIDB4M2IsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDQ0LCAweDdmLCAweDAwLCAweDAwLAotCTB4NWMsIDB4OTUsIDB4MTgsIDB4NGEsIDB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweGU0LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDRiLAotCTB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwKLQkweDVmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDJmLCAweDdlLCAweGQ5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4MjIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDZhLCAweDk1LCAweDAwLCAweDA1LAotCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKLQkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA4LCAweDRlLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDZkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMzLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDcsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg3MiwgMHg5NSwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDk1LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsCi0JMHg0NCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNCwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKLQkweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4YWEsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHg5NSwgMHhhMiwgMHgzYiwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0YSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRiLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHg5NSwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLCAweGU2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsCi0JMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweGEzLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTUsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5NSwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGE3LCAweDk1LCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5NSwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKLQkweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDNhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NSwgMHhhYSwgMHg0MSwgMHgzYiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4NDgsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgyNiwgMHg0NiwKLQkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLCAweDEyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGMsCi0JMHg0MiwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDY0LCAweDAxLCAweDIwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDQxLAotCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQxLCAweDk1LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGRlLCAweDk1LCAweDIyLCAweDQxLAotCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDcsIDB4OTUsIDB4YTgsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDFhLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MjIsIDB4NDAsCi0JMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMzLCAweDk0LCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQxLAotCTB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKLQkweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsIDB4OGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTUsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsCi0JMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTgsIDB4MDAsIDB4MjAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDJkLCAweDQyLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NiwgMHhhMiwgMHhhNSwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4OTYsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAotCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHg5NiwgMHhhMCwgMHhhNSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQxLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTIsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHg5OCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0YywgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDEzLCAweDk2LCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLAotCTB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDMzLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODIsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLAotCTB4M2QsIDB4OTYsIDB4OWYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsCi0JMHg4NSwgMHhjYywgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweGE1LCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLAotCTB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHg0NCwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKLQkweDk5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDk5LCAweDgwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIxLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwMCwgMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDRmLCAweDk2LCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4OTYsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1MSwgMHg5NiwgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NiwgMHhhMiwgMHg0MCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAotCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHg5NiwgMHg5YywgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDYwLCAweDk2LCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCi0JMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NiwgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDVmLCAweDk2LCAweGEyLCAweDhhLAotCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKLQkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OTYsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAotCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywKLQkweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAotCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NiwgMHgyMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDk1LAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5NiwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4OTUsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDk2LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwKLQkweDBkLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDk2LCAweDYzLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLAotCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhmMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKLQkweDk3LCAweGYwLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjcsIDB4OTYsIDB4MjIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLAotCTB4YzcsIDB4OTYsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4OTYsIDB4YTIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMyLCAweDk2LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGUxLCAweDk0LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTYsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhjYSwgMHg5NiwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk2LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTcsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDk2LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweGY3LCAweDk2LCAweGEyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4OTYsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhkYiwgMHg5NiwgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NiwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZGEsIDB4OTYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQ2LCAweDk2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3MywgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgxNSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZjYsIDB4OTYsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4OTYsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweGU3LCAweDk2LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDJmLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgxYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NiwgMHgyMCwgMHgxNSwKLQkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHhiOSwgMHg5NiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiOSwgMHg5NiwgMHgwMCwgMHgwMiwKLQkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4OTgsIDB4OTMsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAotCTB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhhMywgMHg0MSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NywgMHgwMCwgMHg0MSwKLQkweDI3LCAweGQwLCAweDAwLCAweDAwLCAweDM2LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgxNCwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4MDYsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhjNCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDI4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MjEsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsCi0JMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDIxLCAweDk3LCAweGE0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTcsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyZiwgMHg5NywgMHhhMiwgMHgwNiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYywgMHg5NywgMHgyMiwgMHg0OCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI2LCAweDk3LCAweGEwLCAweDQxLCAweDE3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJkLCAweDQ4LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDJmLCAweDk3LCAweGEwLCAweDQ4LCAweDE3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDk3LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MzksIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NywgMHg2NCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNlLCAweDk3LCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LCAweDMwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5NywgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwKLQkweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1MiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDRjLAotCTB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsIDB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwKLQkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDVkLCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLCAweDE3LCAweDkwLCAweDAxLCAweDAwLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsCi0JMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZhLCAweDk3LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5NywgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAotCTB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDc4LCAweDk3LCAweDI2LCAweDMwLCAweDkzLCAweDA0LCAweDAwLCAweDAwLAotCTB4NzgsIDB4OTcsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwgMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLAotCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAotCTB4N2QsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MjAsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDhmLCAweDk3LCAweDIyLCAweDVmLCAweDgxLCAweDdjLCAweDAwLCAweDAwLCAweDhjLCAweDk3LCAweGEyLCAweDQwLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDk3LCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTcsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI1LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHg5MiwgMHg5NywgMHhhMiwgMHg1ZiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4OTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGEwLCAweDk3LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDAyLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwKLQkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDA4LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGE1LCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTcsIDB4MjAsIDB4NGMsCi0JMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGIxLCAweDk3LCAweDIwLCAweGYyLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgxNCwKLQkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGI2LCAweDk3LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MzAsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDk3LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmMywKLQkweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLCAweDgyLCAweGMwLCAweDAwLCAweDAwLAotCTB4YzAsIDB4OTcsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4MiwgMHhlYywgMHgwMCwgMHgwMCwKLQkweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwNSwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjYiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxYywKLQkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDhhLCAweGQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGQ5LCAweDk3LCAweDljLCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5OCwgMHgwMCwgMHgxNCwKLQkweDgyLCAweDUwLCAweDAxLCAweDAwLCAweGRlLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZGUsIDB4OTcsIDB4MjIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NywgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGJlLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZjIsIDB4OTcsIDB4MjMsIDB4ZjAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTcsIDB4MjMsIDB4OTIsCi0JMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHgwNCwgMHgwMCwgMHhhNiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODksIDB4MDAsIDB4NGEsIDB4OTQsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlOCwgMHg5NywgMHg2OCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweGJkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NywgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGY3LCAweDk3LCAweDIzLCAweDQwLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNywgMHg5NywgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAotCTB4ZjcsIDB4OTcsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZiLCAweDk3LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg5OCwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQxLCAweDI0LCAweGVjLCAweDAwLCAweDAwLAotCTB4MGQsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsCi0JMHgzOCwgMHhlYywgMHgwMCwgMHgwMCwgMHgwZCwgMHg5OCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDBmLCAweDk4LCAweGEzLCAweGYwLAotCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEzLCAweDk4LCAweDIyLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NWYsCi0JMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5OCwgMHgyMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDgwLCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDIwLCAweDEyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4YTAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MiwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDk4LCAweDlmLCAweDQxLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0MSwgMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MmMsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLAotCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwKLQkweDNlLCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDEyLCAweGUwLCAweGVkLCAweDAwLCAweDAwLAotCTB4YzgsIDB4MDAsIDB4MjAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDM4LCAweDk4LCAweGEzLCAweDVmLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0YywgMHg5OCwgMHgyMiwgMHhmMiwgMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5OCwgMHgxZiwgMHg0MywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDk4LCAweGEyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQxLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTgsIDB4OWYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg4LCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDk4LCAweDFmLCAweDQ0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0ZiwgMHg5OCwgMHg2MiwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2MiwgMHg0MSwKLQkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJjLCAweDAwLCAweDJlLCAweDQzLCAweDg3LCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTgsIDB4MjAsIDB4NDMsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg0MywKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDQzLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLAotCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDY0LCAweDk4LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTgsIDB4YTAsIDB4ZjIsCi0JMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLAotCTB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4OTgsIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg2OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLAotCTB4NmIsIDB4OTgsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5OCwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDZlLCAweDk4LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTgsIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5OCwgMHgyMiwgMHg0MCwKLQkweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4YTAsIDB4NDEsCi0JMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsCi0JMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAotCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4M2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5OCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDk4LCAweDI4LCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTgsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgxZCwgMHg0NiwKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDk4LCAweDk4LCAweDIyLCAweDVmLCAweDExLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTgsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVmLCAweDk4LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAotCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAotCTB4YTIsIDB4OTgsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGEyLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAyLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDJlLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiNiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHg5OCwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM5LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKLQkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKLQkweGU0LCAweDk4LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDk4LCAweGEyLCAweDUxLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKLQkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAotCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwKLQkweDU3LCAweGI1LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDYsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsCi0JMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LAotCTB4MjEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5OCwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5OCwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHg5OSwgMHg2YSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5OSwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDk5LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweDExLCAweDk5LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5OSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDk5LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAotCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAotCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKLQkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCi0JMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAotCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAotCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDg3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLAotCX0sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDM4YzIzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZG93bmxvYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4NDggKzAsMCBAQAotI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX1NUUklORwkiMS4yIgotI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMDozNyIKLSNkZWZpbmUgT0FTSVNfVUNPREVfSE9TVElGX0lEICAJMwotCi1zdGF0aWMgczMyIE9OdW1TZWN0aW9ucyA9IDB4MjsKLXN0YXRpYyB1MzIgT1NlY3Rpb25TaXplW10gPSB7Ci0JMHgwMDAwNDAwMCwgMHgwMDAxMDAwMCwKLX07Ci0KLXN0YXRpYyB1MzIgT1NlY3Rpb25TdGFydFtdID0gewotCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCi19OwotCi1zdGF0aWMgdTggT2FzaXNVQ29kZVsyXVs2NTUzNl0gPQotewotCXsKLQkweDE1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweGEyLCAweDQwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MDksIDB4MDAsIDB4YTIsIDB4NDksIDB4ZGQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweGEyLCAweDQwLAotCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwMCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweDk4LCAweDE4LCAweDMxLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTgsCi0JMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDk4LCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDQwLCAweDk4LAotCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MGUsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZGQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYSwgMHgwMCwgMHgxNCwgMHhiYywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZlLCAweDAwLCAweDEzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZmQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgzMywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLAotCTB4OTksIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGUwLCAweGIzLCAweDAxLCAweDAwLCAweDM5LCAweDAwLCAweDk4LCAweGVlLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHgwMCwgMHg4MCwgMHhmMywgMHhkZSwgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDAwLCAweDgzLCAweGYzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHgyZSwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAotCTB4MjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MTgsIDB4ZWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHgwMCwgMHg5NSwgMHhlOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhlOCwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHhlYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZWUsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY3LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweGYwLCAweGQ2LCAweDhkLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGYwLAotCTB4ZjAsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAyLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGY4LCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MjIsIDB4ZmEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGRlLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGZhLAotCTB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHhmYiwKLQkweDdhLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGRjLCAweGIxLCAweDAxLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZGQsIDB4OTEsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4OTUsIDB4ZTgsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhlOSwgMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4ZSwgMHgwMCwgMHgwOSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhjLCAweDAwLCAweDA4LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDFmLCAweGZkLAotCTB4ZjksIDB4MzMsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4OWUsIDB4ZmQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKLQkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZkLCAweGY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHgwMCwgMHgwYSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQwLCAweGZiLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZjksIDB4ZjMsIDB4OGYsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNywgMHg0MiwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwgMHg5NywgMHgwMCwgMHhhMiwgMHhmZiwKLQkweGY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZmYsIDB4ZmIsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmMsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGJiLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGZkLCAweDdmLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDlhLCAweDEzLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDlhLCAweDEzLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDI5LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg2NywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDdmLCAweDAwLCAweDQwLCAweDI1LCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDg4LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0NiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweGNlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDhkLCAweGYwLCAweDAxLCAweDAwLAotCTB4YzksIDB4MDAsIDB4ODIsIDB4NDEsIDB4ODksIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDA4LCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDk0LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4NGUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4NCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTYsCi0JMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4ZCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLAotCTB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODksIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwKLQkweDhhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwKLQkweGVjLCAweDAwLCAweDA4LCAweDQxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDAwLCAweDAwLCAweDk0LAotCTB4MjQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MjQsIDB4ZjUsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMiwgMHgwMCwgMHhhMCwgMHg0NCwKLQkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4MDAsIDB4MjAsIDB4NDQsCi0JMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQyLAotCTB4ODksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDAsIDB4YTAsIDB4ZmEsIDB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHgwMCwgMHhhMywgMHg0MiwKLQkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDg4LCAweDg4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OGEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4OTAsIDB4NDQsCi0JMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDhhLCAweGE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLAotCTB4OGIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDA4LCAweDgzLCAweDE0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHhmOSwgMHg5YiwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHhmYywgMHgxOSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQwLCAweDk0LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmOSwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDJiLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAxLCAweDlmLCAweDk0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NTEsCi0JMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDEsIDB4YTIsIDB4NDEsIDB4OTMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDczLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4N2QsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTEsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYiwgMHgwMSwgMHgyMCwgMHg0OCwgMHhhMSwgMHg1MSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ3LCAweDAxLCAweDIyLCAweDRiLAotCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKLQkweDdlLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweGFhLAotCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDIyLCAweGNjLAotCTB4ODUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYzLCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAotCTB4YTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YmMsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywKLQkweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweGE5LCAweGIzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3MywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDg2LCAweDAxLCAweDAwLCAweGRkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgyLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODMsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKLQkweGQ1LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsCi0JMHg3MiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgyOCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwKLQkweGZkLCAweDkzLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDJhLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NTUsIDB4NDksIDB4ZmQsIDB4ODMsIDB4MmEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsCi0JMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLAotCTB4ODAsIDB4MzAsIDB4MmEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAotCTB4YjMsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkyLCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MDEsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg5NiwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MSwKLQkweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGJmLCAweGIzLCAweDAxLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4YTAsIDB4MGYsIDB4YmQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGI1LCAweDAxLCAweDAwLCAweDQwLCAweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmZiwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ZmYsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHhhNCwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGFhLCAweDAxLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4YTIsIDB4NGMsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHgwMSwgMHgyMiwgMHhkMiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHgwMSwgMHgyMiwgMHg0MSwKLQkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGUwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHg4OSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQxLCAweDQzLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDQsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHgwMSwgMHgwMCwgMHg1YiwKLQkweDg5LCAweDkwLCAweDAwLCAweDAwLCAweGE4LCAweDlmLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGJlLCAweDAxLCAweDIyLCAweGRlLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiOSwgMHgwMSwgMHhhMiwgMHg0NCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MywKLQkweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZjgsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGQxLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDUzLCAweDAxLCAweDAwLCAweGRlLAotCTB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhlNSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweGRmLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwgMHhhNSwgMHhlNywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGMxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDEsIDB4MjIsIDB4NDQsIDB4YzEsIDB4NTMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwMSwgMHg4NCwgMHg0MSwgMHg4MSwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDUsIDB4MDEsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweGRkLCAweGExLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywKLQkweGE3LCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweGUwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGJhLAotCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlOCwgMHgwMSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGJhLCAweGIzLCAweDAxLCAweDAwLAotCTB4NmIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NGQsCi0JMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlYiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZjksIDB4MDEsIDB4MjIsIDB4NDAsCi0JMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAyLCAweDAwLCAweGM3LCAweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NDIsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVkLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAyLCAweGI4LCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDIsIDB4YjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMiwgMHhiYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDIsIDB4YmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhiYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAyLCAweGJkLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMiwgMHhiZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDFhLCAweDAyLCAweGJmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDIsIDB4YzgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDFlLCAweDAyLCAweGM5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDIsIDB4Y2EsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMiwgMHhjYiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDIsIDB4Y2MsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMiwgMHhjZCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI4LCAweDAyLCAweGNlLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyYSwgMHgwMiwgMHhjZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGYwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDIsIDB4ZjEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAyLCAweGYyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZjMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhmNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MzYsIDB4MDIsIDB4ZjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMiwgMHhmNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNhLCAweDAyLCAweGY3LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMiwgMHhmOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNlLCAweDAyLCAweGY5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ZmEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDAyLCAweGZiLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4ZmMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NiwgMHgwMiwgMHhmZCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDIsIDB4ZmUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0YSwgMHgwMiwgMHhmZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDA2LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkYiwgMHgwMSwgMHgwMCwgMHhjNywgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY2LCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4MWEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDYzLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDQ5LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsIDB4MWMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0ZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4NWYsIDB4MDIsIDB4NGEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCi0JMHg5ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkOCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGQwLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAotCTB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZDQsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhkNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwKLQkweGRjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGRlLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZGEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsCi0JMHg4ZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhlNiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LAotCTB4ZmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKLQkweGU0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGU4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZWEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCi0JMHhmNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhmNiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY4LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LAotCTB4YTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4NCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDYsIDB4YTMsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg5YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAyLCAweDIzLCAweDUwLCAweGE1LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4NDIsCi0JMHhhNSwgMHg2MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NywgMHgwMiwgMHgyMiwgMHg0NCwKLQkweGE1LCAweDUzLCAweDAwLCAweDAwLCAweDk0LCAweDAyLCAweDAwLCAweDQxLCAweGExLCAweGMxLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZDIsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDllLCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4NTQsCi0JMHhhNSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWMsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NDYsCi0JMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LAotCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwKLQkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGEzLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGMxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YmQsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMCwgMHgwNSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGNiLCAweDAyLCAweDAwLCAweDA1LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkMCwgMHgwMiwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHg0NCwKLQkweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGE0LCAweGU3LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzEsCi0JMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLCAweGRhLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGE0LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDkxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzksIDB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MjIsIDB4NDEsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHg0MSwgMHhjMSwgMHhjMywgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweGRlLCAweDg1LCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweGMyLAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4OTUsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHgwMiwgMHgwMCwgMHhjYSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUyLCAweDAyLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsCi0JMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDAyLCAweDAwLCAweGQ0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhjYywKLQkweDg1LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmEsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MSwKLQkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDBhLCAweDAzLCAweDIyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTIsIDB4MDMsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MjIsIDB4NGMsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMywgMHgyMiwgMHg1MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDE3LCAweDAzLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE5LCAweDAzLCAweDIyLCAweDU4LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MjIsIDB4NWMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKLQkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweGNhLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMywgMHhhMiwgMHg0MiwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDIyLCAweGNhLAotCTB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDUsIDB4ZjMsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHg4MCwgMHhjYSwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDIyLCAweDAxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4YmMsCi0JMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHhiMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGRkLCAweDlmLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGNhLAotCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4YTIsIDB4NDAsIDB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYiwgMHgwMywgMHhhOCwgMHhiMSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDFhLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDJkLCAweDAzLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAzLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHgwMywgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4M2IsIDB4MDMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2QsIDB4MDMsIDB4NTUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDE0LCAweDJmLCAweDQwLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAotCTB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYyLCAweDg4LCAweGU0LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDUzLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MWYsIDB4OTEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDgsIDB4ODQsIDB4ODQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDhmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NWEsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDcsCi0JMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMywgMHgwMCwgMHg1YywgMHg4ZiwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDE1LCAweDJkLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LCAweDgyLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MiwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg2NSwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MywgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MywgMHg4NiwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE2LCAweDQxLCAweDg1LCAweDUwLCAweDAxLCAweDAwLCAweDcwLCAweDAzLCAweDAwLCAweDQxLAotCTB4ODMsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZiwgMHg0NiwKLQkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQyLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMywgMHhhMCwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDAzLCAweDAwLCAweDQxLCAweDgyLCAweGU4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OGUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MTUsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDk1LCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk3LCAweDAzLCAweDIyLCAweDVhLAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDkwLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDE1LCAweDJkLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweDQ4LCAweDkwLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAzLCAweDIyLCAweDQwLAotCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDhkLCAweGMwLCAweDAxLCAweDAwLCAweGI1LCAweDAzLCAweDIyLCAweDVmLCAweDhkLCAweDZjLCAweDAwLCAweDAwLAotCTB4YTcsIDB4MDMsIDB4YTIsIDB4NDEsIDB4OTMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHg0NywgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDlmLCAweDAwLCAweDQ3LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDcsIDB4OGUsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDUwLCAweGIzLCAweDAxLCAweDAwLCAweGJiLCAweDAzLCAweDIwLCAweDE4LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1NSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGJlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGE2LAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDUwLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDRmLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NGUsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4MiwgMHgwMywgMHgwMCwgMHg0MiwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM3LCAweDAzLCAweDIyLCAweGE3LAotCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGNhLAotCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMywgMHgyMiwgMHg0MiwKLQkweDc1LCAweDZmLCAweDAwLCAweDAwLCAweGQ4LCAweDAzLCAweDIyLCAweDQxLCAweDc1LCAweDZmLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4MDMsIDB4MWUsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MDMsIDB4MWYsIDB4Y2EsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDlmLCAweDAwLCAweDQyLCAweDc1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4Y2QsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDEsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDc1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0YywKLQkweDkzLCAweDMwLCAweDAxLCAweDAwLCAweGVjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU0LCAweDk1LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDE0LCAweDJlLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAotCTB4YTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHhkYSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDg5LCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4OCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQzLAotCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGE1LCAweGMzLCAweDAxLCAweDAwLCAweDBiLCAweDA0LCAweDIyLCAweDQ0LCAweDg5LCAweDUwLCAweDAwLCAweDAwLAotCTB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4OGIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MDMsIDB4YTIsIDB4NTAsCi0JMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhhNSwgMHhlMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLAotCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MTQsIDB4MmUsIDB4ZDIsIDB4OTUsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDQsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDQsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg5NCwgMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LAotCTB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NCwKLQkweGI0LCAweGIzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDI3LCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweGMwLCAweDAwLCAweDQwLCAweDJkLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHhjNCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODIsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwNCwgMHg4MCwgMHg5NCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHgyZCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDMxLCAweDA0LCAweDAwLCAweDEyLAotCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg0OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0YiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDRkLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NGYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTAsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDU0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDU2LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg1OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg1YiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDVkLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4NWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjAsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDY0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDY1LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg2OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg2YiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDZjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4NmUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzAsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDczLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDc1LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg3OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg3YSwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDdjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NDAsIDB4N2UsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU5LCAweDA0LCAweDAwLCAweDEyLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDg2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg4LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4ZSwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDlhLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGFhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGFjLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiMCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiMiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGJjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJlLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHgwNCwgMHg4NSwgMHg0MSwKLQkweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDg3LCAweDA0LCAweDg1LCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4NjAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweGYwLCAweDRiLCAweDgyLCAweDg5LCAweDAxLCAweDAwLCAweDkzLCAweDA0LCAweDYwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHhmMCwgMHhhNiwgMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NiwgMHgwNCwgMHg2MCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0YiwgMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweGE2LAotCTB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHhjYSwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGIwLCAweDA0LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGIxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDQsIDB4MjIsIDB4NGIsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDA0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhjNiwgMHgwNCwgMHgyMiwgMHg0YiwKLQkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDQsIDB4YTIsIDB4NDEsCi0JMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0YywKLQkweDg4LCAweDk0LCAweDAwLCAweDAwLCAweGQ2LCAweDA0LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4MDQsIDB4MjIsIDB4MjAsIDB4ODcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxZiwgMHg4MCwgMHg4NiwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMCwgMHgwNCwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMSwgMHgwNCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGU4LCAweDA0LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweGU2LCAweDA0LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHgwNCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDIwLCAweDg3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZjEsIDB4MDQsIDB4YTgsIDB4YjEsIDB4NTIsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDQsIDB4MjIsIDB4NGEsCi0JMHg1MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDA0LCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGYxLCAweDA0LCAweGEyLCAweDQxLAotCTB4OTksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NGYsIDB4NzcsIDB4ZmQsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHgxZCwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDUsIDB4YTIsIDB4NDAsCi0JMHg4NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg5ZiwgMHg5YywgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDUwLAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwNSwgMHg1MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4MDUsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQxLAotCTB4ZTEsIDB4YzEsIDB4MWEsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MWIsIDB4MDAsCi0JMHgxOSwgMHgwNSwgMHgyMiwgMHg1NCwgMHg4MSwgMHg3YywgMHgxYSwgMHgwMCwgMHgxNCwgMHgwNSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDFhLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGIzLCAweDY3LCAweGRmLCAweDFiLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MWIsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgxYiwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDA1LCAweDBmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLAotCTB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwgMHgxZiwgMHgwNSwgMHg5OSwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg5LCAweGQwLCAweDAxLCAweDAwLAotCTB4MjEsIDB4MDUsIDB4OWIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNSwgMHgxZiwgMHg0NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDA1LCAweDAwLCAweDQwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg1OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDg2LCAweGY0LCAweDAxLCAweDAwLAotCTB4NmYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MjYsIDB4MDUsCi0JMHg0NywgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQ0LCAweGYwLCAweDQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMSwgMHgwMCwgMHgwNywKLQkweDkxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDk3LCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwNSwgMHhhMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4NDUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAotCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAotCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDUwLCAweDA1LCAweGEyLCAweDQxLCAweDhmLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZGEsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwKLQkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4N2EsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDUsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3ZCwgMHgwNSwgMHgyMiwgMHgyMCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDFmLCAweDAwLAotCTB4N2QsIDB4MDUsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MWUsIDB4MDAsIDB4N2EsIDB4MDUsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2NywgMHg5MywgMHgxZiwgMHgwMCwKLQkweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDFlLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MWYsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NGEsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk1LCAweGMwLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLAotCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDA1LCAweDIyLCAweDQ1LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGUwLCAweDE1LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhNywgMHgwNSwgMHhhOCwgMHhiYiwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGFhLCAweDA1LCAweGEyLCAweDQxLAotCTB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDUsIDB4YTIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwNSwgMHhhMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4YjEsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDA1LCAweGEyLCAweGZhLAotCTB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHgwNSwgMHhhMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwKLQkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweGJiLCAweDA1LCAweDIyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDUsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg2NywgMHg5MywgMHgyMSwgMHgwMCwgMHhkZiwgMHg5ZiwgMHgwMCwgMHg1OCwgMHg2NywgMHg5MywgMHgyMCwgMHgwMCwKLQkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLAotCTB4NDksIDB4MzEsIDB4MjEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MjEsIDB4MDAsCi0JMHg1YywgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwKLQkweDhlLCAweGIwLCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YzksIDB4MDUsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhmYywgMHgxNSwgMHgyMCwgMHgyMCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDI0LCAweDAwLCAweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDI1LCAweDAwLAotCTB4Y2UsIDB4MDUsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MjQsIDB4MDAsIDB4Y2IsIDB4MDUsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2NywgMHg5MywgMHgyNSwgMHgwMCwKLQkweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDI0LCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MjUsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMywgMHgwNSwgMHgyMiwgMHg1MCwKLQkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYSwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDRhLCAweGI0LCAweDhiLCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlOSwgMHgwNSwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGVhLCAweDA1LCAweDAwLCAweDUwLCAweGI1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDMxLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDMzLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzUsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgzNywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgzOSwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQxLCAweDQyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NDMsIDB4NDQsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NywgMHg0OCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDRhLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDUsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDA2LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDYsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHg2NywgMHgwMCwgMHhhNiwgMHhlMCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgyMywgMHgwMCwgMHg3MCwKLQkweGUxLCAweDlhLCAweDAxLCAweDAwLCAweGNkLCAweGVmLCAweDAwLCAweGE2LCAweGUyLCAweGIyLCAweDAxLCAweDAwLAotCTB4ODksIDB4YWIsIDB4MDAsIDB4NzEsIDB4ZTMsIDB4OWEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4MDAsIDB4YTYsCi0JMHhlNCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhkYywgMHgwMCwgMHg3MiwgMHhlNSwgMHg5YSwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDEwLCAweDAwLCAweGE2LCAweGU2LCAweGIyLCAweDAxLCAweDAwLCAweDc2LCAweDU0LCAweDAwLCAweDczLAotCTB4ZTcsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4YzMsIDB4MDAsIDB4YTYsIDB4ZTgsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHhlMSwgMHgwMCwgMHg3NCwgMHhlOSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0YSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDE2LCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGZjLCAweDE2LCAweDJhLCAweDQ3LAotCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTgsIDB4ZTUsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEzLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDNkLCAweDQ2LCAweDhkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHg0MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDA2LCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZWIsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhlZiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGYxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGYzLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDRiLCAweDA2LCAweGEwLCAweDUwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweGE0LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg0MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDc1LCAweDg5LCAweGU0LCAweDAxLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDc1LAotCTB4ODUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHgwNiwgMHhhMywgMHg1MywgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4YiwgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDA2LCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweDg5LCAweGE0LCAweDAxLCAweDAwLCAweDY0LCAweDA2LCAweDAwLCAweDc4LCAweDg5LCAweGE0LCAweDAwLCAweDAwLAotCTB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDYsIDB4YWEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDZiLCAweDA2LCAweGEzLCAweDUzLAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODIsIDB4NWEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg3OSwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4NzAsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDksIDB4NmUsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHhlYiwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNiLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4ZiwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHhiYywgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NjIsIDB4Y2EsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4YzEsIDB4MDAsIDB4NDIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGYzLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlZiwgMHhmNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGVlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweGVkLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZWEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDA2LCAweDJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LAotCTB4ZTEsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ZTMsIDB4YzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhlNSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwKLQkweGU3LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweGU5LCAweGMyLCAweDAxLCAweDAwLAotCTB4MmIsIDB4MDYsIDB4ODEsIDB4NDEsIDB4OGQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4MDYsIDB4MjIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHhhMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDVlLCAweDE2LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4N2MsIDB4MTYsIDB4MjAsIDB4ZjYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzMSwgMHhiMywgMHgwMSwgMHgwMCwgMHg5ZCwgMHgwNiwgMHgyMiwgMHg0ZiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDlmLCAweDA2LCAweDIyLCAweDQwLAotCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhhMSwgMHgwNiwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGEzLCAweDA2LCAweDIyLCAweDQxLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDYsIDB4MjIsIDB4NTEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjIsIDB4MDYsIDB4YTIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0OCwKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YjYsIDB4MDYsIDB4MjIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDYsIDB4MDAsIDB4NTQsCi0JMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDAwLCAweGZlLCAweDdmLCAweGQ5LCAweDAxLCAweDAwLCAweGJhLCAweDA2LCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGU3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM0LCAweDA2LCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlOSwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDBhLCAweDA3LCAweDIyLCAweDAxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGQ5LCAweDA2LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4MDYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCi0JMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlYywgMHgwNiwgMHgyMiwgMHg0MCwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGU2LCAweDA2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDA3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDA2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU4LCAweDA2LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHgzYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweGZhLCAweDA2LCAweDIzLCAweDFhLAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxZCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweGYyLCAweDMwLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDAyLCAweDA3LCAweDIyLCAweDFhLAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxNCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDIzLCAweDA3LCAweDAwLCAweDFhLAotCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDBmLCAweDA3LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDcsIDB4NjAsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsCi0JMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDE2LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDcsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDI0LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHgwNywgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MWYsIDB4MDcsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDA3LCAweGEyLCAweDBkLCAweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDJlLCAweDA3LCAweDIyLCAweDQ2LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwNywgMHgyMiwgMHhmMiwKLQkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDMzLCAweDA3LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4MDYsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsCi0JMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhkMywgMHgwNiwgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwNywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweGQzLCAweDA2LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDA2LCAweDAwLCAweDBkLAotCTB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDcsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDA5LCAweDAwLCAweDAwLCAweGYzLCAweDM4LCAweDg4LCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDIwLCAweDUwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4NDAsIDB4M2YsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MWQsCi0JMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDA3LCAweGEwLCAweGZjLCAweDkwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDE4LCAweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDVjLCAweDA3LCAweGEwLCAweGZjLAotCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MCwgMHhiMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgyZCwgMHgwMCwKLQkweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4NDgsIDB4YzEsIDB4MmQsIDB4MDAsIDB4NjQsIDB4MDcsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MmMsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4NSwgMHhiMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKLQkweDNkLCAweGMzLCAweDJkLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDJkLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MWQsCi0JMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgxOCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDZlLCAweDA3LCAweGEwLCAweDQxLAotCTB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZSwgMHgzMCwKLQkweDgxLCAweDg0LCAweDAxLCAweDAwLCAweDcyLCAweDA3LCAweDkwLCAweDQwLCAweDkyLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDE5LCAweGU4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAotCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDcsIDB4YTAsIDB4MTksIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZiwgMHgxZSwKLQkweDMyLCAweGMwLCAweDAxLCAweDAwLCAweDdkLCAweDA3LCAweGEyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDcsIDB4YTAsIDB4MWMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHgzOCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDFlLAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MWEsIDB4OTgsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwNywgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODksIDB4MDcsIDB4MjIsIDB4ZjIsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg2LCAweDA3LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg5MSwgMHgwNywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4OWIsIDB4MDcsIDB4MjIsIDB4ZjIsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk4LCAweDA3LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YTEsIDB4MDcsIDB4OTAsIDB4ZjIsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4YWMsIDB4MDcsIDB4MjIsIDB4ZjIsIDB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGE5LCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHgwNywgMHgyMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHgwNywgMHhhMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4YjMsIDB4MDcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHhlNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAxLCAweDAwLCAweGU2LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDcsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNywgMHgyMiwgMHg0MCwKLQkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGJhLCAweDA3LCAweDIwLCAweDFlLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OWYsIDB4MDAsIDB4MWUsCi0JMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHgwNywgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDA3LCAweGEyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGU4LCAweDlmLCAweDAwLCAweDFmLAotCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4MDcsIDB4YTIsIDB4NDEsCi0JMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY3LCAweDA3LCAweDAwLCAweGJjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLAotCX0sCi0JewotCTB4MzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDgwLCAweDgxLCAweDgwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YTIsIDB4NDAsIDB4OTEsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5MCwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLAotCTB4OTAsIDB4OTUsIDB4MmEsIDB4YzgsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDExLCAweDgxLAotCTB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgxYSwgMHg4MCwgMHgxMSwgMHg4MiwgMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBlLCAweDg3LCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAotCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODAsIDB4YTIsIDB4NDIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgwLCAweDExLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDUxLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4MTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDI3LCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjYsIDB4ODAsIDB4YTIsIDB4NTMsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTMsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4MCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDI5LCAweDgwLCAweGEyLCAweDUyLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLCAweDUyLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwNSwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhkZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAotCTB4OWIsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NSwgMHgyMCwgMHg0NCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4ZWUsCi0JMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDgwLCAweGEyLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MzYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgxMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDA5LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg4OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEyLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4OWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTUsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGRkLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDI3LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyZiwgMHg4MSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg0MSwgMHhlMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDAwLCAweDAwLAotCTB4NmMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjQsCi0JMHg2OSwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdkLCAweDgwLCAweDIyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2EsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg1OCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4ZmEsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OTYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NiwgMHg4MCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDkzLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGQwLCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQ3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDcyLCAweDAxLCAweDAwLCAweDQxLAotCTB4ODEsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTEsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg1MiwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwKLQkweGZkLCAweDgzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU2LCAweDRhLCAweGZkLCAweDgzLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4OTEsIDB4ODEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4YjQsIDB4ODAsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwgMHgzZCwgMHhjMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweGQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweGJmLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4YTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwNCwgMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDE1LCAweDNmLCAweDQyLCAweDk3LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKLQkweDk5LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweGYzLCAweDgzLCAweDAxLCAweDAwLAotCTB4ZDEsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsCi0JMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHgwMCwgMHgyMCwgMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDA1LCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNiLAotCTB4ZGIsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MCwgMHhhOCwgMHhiMSwKLQkweDhjLCAweDMzLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZTAsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODAsIDB4MTQsIDB4YzYsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDgyLCAweDIyLCAweDRmLCAweDgzLCAweDA0LCAweDAwLCAweDAwLCAweGMyLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NywgMHhhMywgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MCwgMHgxZiwgMHg1YywKLQkweDk3LCAweDUzLCAweDAwLCAweDAwLCAweDU4LCAweDgyLCAweDFlLCAweGM2LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDMsIDB4ODEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI0LCAweDgyLCAweDAwLCAweGNhLAotCTB4NjMsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NjEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0OCwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgwMCwgMHg0ZSwKLQkweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDgsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweGRmLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwKLQkweDliLCAweGIzLCAweDAwLCAweDAwLCAweDdiLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4N2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDg5LCAweDgxLCAweDAwLCAweDQwLAotCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk3LCAweDgyLCAweDAwLCAweGJiLCAweGFiLCAweGIzLCAweDAwLCAweDAwLAotCTB4MjUsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg3NywgMHhiMywgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgwMCwgMHg0ZCwKLQkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLAotCTB4NDEsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4MDAsIDB4NGMsCi0JMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI0LCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4NGQsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg3MCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDFjLCAweDgxLCAweDIyLCAweDQyLCAweDhmLCAweDZmLCAweDAwLCAweDAwLAotCTB4MWUsIDB4ODEsIDB4MjIsIDB4NDEsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MWUsIDB4Y2EsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MSwgMHgxZiwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQyLAotCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHg0MSwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAotCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MmYsIDB4OWMsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzOSwgMHgzMywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZiwgMHg5YiwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDM3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4OWEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHgzNSwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZiwgMHg5OSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDMzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGFlLAotCTB4NDcsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLCAweGUxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YWUsCi0JMHg2MywgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4MSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMzLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDgxLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LCAweDY5LCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhhMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4ZTEsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHg4MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDk1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDUzLCAweDgxLCAweDAwLCAweGJiLAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MmYsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHg4MSwgMHgyMiwgMHg0MCwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHg2MCwgMHg0MCwKLQkweDk1LCAweDgzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4NTYsIDB4ODEsIDB4MzYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDU5LCAweDgxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDQxLCAweDQzLCAweDUxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NDEsCi0JMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg4MSwgMHhhMiwgMHg0MiwgMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDY3LCAweGIzLCAweDAxLCAweDAwLCAweDYzLCAweDgxLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHhjYSwKLQkweDY5LCAweDk3LCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NjgsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MWEsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDgwLCAweGNhLCAweDY3LCAweDMzLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDQwLAotCTB4NjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCi0JMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MCwgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHg3NywgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAotCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4MSwgMHgyMiwgMHg1YiwKLQkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsCi0JMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHhjYSwgMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAotCTB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGM3LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDVmLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAotCTB4MGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAotCTB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4MSwgMHg5ZiwgMHg4NSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgzLCAweDg0LCAweDAxLCAweDAwLAotCTB4YzgsIDB4ODEsIDB4MjIsIDB4MzAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTIsIDB4ODEsIDB4YTIsIDB4NGYsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAyLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDQxLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHhjNCwgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhhNSwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAotCTB4YmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwYywgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGFkLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGJhLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQxLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDQxLAotCTB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDEzLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGMzLCAweDgxLCAweDIyLCAweDQzLAotCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhjMCwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGM1LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgzLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCi0JMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ODMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGQ3LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkYSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwKLQkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweGUxLCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4MSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZjMsIDB4ODEsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MjIsIDB4NDQsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBhLCAweDgyLCAweDIyLCAweDRhLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHg4MSwgMHgyMiwgMHg0ZCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGYwLCAweDgxLCAweDIyLCAweDRmLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4ODEsIDB4MjIsIDB4NGUsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBhLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGZkLCAweDgxLCAweDIyLCAweDQ1LCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MjIsIDB4NDQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MiwgMHgyMiwgMHg0MywKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MGEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHg4MiwgMHgyMiwgMHg0YiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsIDB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHhjYSwKLQkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDgyLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODIsIDB4MTQsIDB4ZjcsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4MiwgMHhhMiwgMHg0OSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDFlLCAweDgyLCAweDE1LCAweGY4LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAotCTB4MWUsIDB4ODIsIDB4YTIsIDB4NGEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MiwgMHhhMiwgMHhjOCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZWYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MiwgMHg0MiwgMHg0MCwgMHhmMSwgMHgzMywgMHgwMCwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGJiLCAweDZiLCAweGIzLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4YmIsIDB4YjEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweGEyLCAweDU0LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg4MiwgMHhhMiwgMHgwNiwKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDRiLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MiwKLQkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDYyLCAweDgyLCAweDIyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODIsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODIsIDB4MjIsIDB4NGMsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4MiwgMHgyMiwgMHg1MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDZmLCAweDgyLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDcxLCAweDgyLCAweDIyLCAweDU4LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODIsIDB4MjIsIDB4NWMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKLQkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MiwgMHhhMiwgMHg0MiwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweGNhLAotCTB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDYsIDB4ZjMsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHg4MCwgMHhjYSwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDAxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4YmMsCi0JMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHhiMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGNhLAotCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4YTIsIDB4NDAsIDB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MywgMHg4MiwgMHhhOCwgMHhiMSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDcyLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhjYiwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDc5LCAweDgyLCAweGEyLCAweDQxLAotCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4MiwgMHg5MSwgMHg4MiwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODIsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MiwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwKLQkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg4OSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4ODIsIDB4OTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDkyLCAweDgyLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OTQsIDB4ODIsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgxNCwgMHgyZiwgMHg0MCwKLQkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAotCTB4YTAsIDB4OTQsIDB4MmUsIDB4NDMsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDk0LCAweDJlLCAweDQzLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5ZiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLCAweGEzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU5LCAweDQxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg0MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQyLCAweDgxLCAweDZjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ODIsIDB4YTAsIDB4NDIsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg4MiwgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDgyLCAweGEyLCAweDQxLCAweDAxLCAweDdkLCAweDAwLCAweDAwLCAweGI1LCAweDgyLCAweDIyLCAweDU4LAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHg4MiwgMHhhOCwgMHhiMSwgMHg5YywgMHgzMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDBlLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4YjUsIDB4ODIsIDB4MzMsIDB4YzQsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODIsIDB4YTEsIDB4YWQsCi0JMHg5ZCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEzLCAweDRlLCAweDVhLCAweDgzLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODIsIDB4MjIsIDB4YWIsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHhiZSwgMHg4MiwgMHhhMiwgMHg0MCwgMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4MiwgMHgyMiwgMHg1ZiwKLQkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDM2LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YzAsIDB4ODIsIDB4MjIsIDB4NWUsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OTksIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHg4MiwgMHgyMiwgMHg1NCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDgyLCAweGE4LCAweGIxLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODQsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjYSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg4MiwgMHhhMiwgMHg1ZiwKLQkweDU5LCAweDI3LCAweDAwLCAweDAwLCAweGM5LCAweDgyLCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4ZDAsIDB4ODIsIDB4YTIsIDB4NWUsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODIsIDB4MjIsIDB4NWMsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg4MiwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGNhLCAweDgyLCAweGE4LCAweGIxLAotCTB4MzYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjYywgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDg4LCAweDAxLCAweDAwLCAweGI5LCAweDg0LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZGIsIDB4ODIsIDB4MzQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMSwgMHg4MiwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGQ4LCAweDgyLCAweDUyLCAweDIxLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLAotCTB4MmYsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4MywgMHgwMCwgMHgzNCwKLQkweDEzLCAweDg0LCAweDAwLCAweDAwLCAweGZmLCAweDNmLCAweDE0LCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODMsIDB4MDAsIDB4NDMsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDEzLCAweDRlLCAweDVhLCAweDkzLCAweDAwLCAweDAwLCAweDBlLCAweDg3LCAweGEyLCAweDQ4LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YWMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg4MiwgMHgyMiwgMHg1YSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGUwLCAweDgyLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4MTEsIDB4YzksIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4YTIsIDB4NDAsCi0JMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHgyMiwgMHg0NCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGU1LCAweDgyLCAweDQyLCAweGE1LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGU4LCAweDgyLCAweGEyLCAweDQwLAotCTB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODIsIDB4MWEsIDB4NDAsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MCwgMHhhMiwgMHg0MCwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA5LCAweDg3LCAweDIyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODcsIDB4MjIsIDB4NDAsIDB4NjUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4YTIsIDB4NWIsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwgMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGYzLCAweDgyLCAweDIyLCAweDQ4LCAweDMzLCAweDdkLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweDk5LAotCTB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgzMywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGRkLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY2LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MzMsIDB4NDAsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgxMywgMHg0ZSwgMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHhmZCwgMHg4MiwgMHhhMCwgMHhjZSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDBmLCAweDgzLCAweGEwLCAweGNkLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHg4MywgMHgyMiwgMHhiNSwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDE1LCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDgzLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsIDB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNSwgMHgyZSwgMHg0MCwgMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwKLQkweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGRjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODMsIDB4YTgsIDB4YTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhlOSwgMHg4MiwgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHhhMiwgMHg0MSwKLQkweDY3LCAweDZmLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweDAwLCAweDZmLCAweGRiLCAweDkxLCAweDAwLCAweDAwLAotCTB4MGYsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4MWEsIDB4NDAsCi0JMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDFhLCAweDgzLCAweGE2LCAweDQyLAotCTB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxNSwgMHg4MywgMHg2MSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDE2LCAweDgzLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWYsIDB4OTQsIDB4NzEsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODMsIDB4MDAsIDB4NTgsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg5NCwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMywgMHg0YiwKLQkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyNSwgMHg4MywgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDI3LCAweDgzLCAweDg1LCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHg4MywgMHgyMiwgMHg1NSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4ODMsIDB4MDAsIDB4NGIsCi0JMHg0NCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweGY2LCAweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweGExLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyOCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MjgsIDB4M2MsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsCi0JMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4MywgMHhhMiwgMHhmOCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDQ5LCAweDgzLCAweDIyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHg4MywgMHhhMiwgMHhmOCwgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHg4MywgMHhhMiwgMHhmOCwKLQkweDEwLCAweDZjLCAweDAwLCAweDAwLCAweDM2LCAweDgzLCAweGEyLCAweGYwLCAweDFhLCAweDZjLCAweDAwLCAweDAwLAotCTB4NDcsIDB4ODMsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCi0JMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4MywgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQyLCAweDgzLCAweGEyLCAweGYzLCAweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ZTYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4NDcsIDB4ODMsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHg3NSwgMHhmMywKLQkweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDRmLCAweDgzLCAweDc3LCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDRkLCAweDgzLCAweDIyLCAweDU4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4MywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4N2MsIDB4ODMsIDB4NzcsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDVkLCAweDgzLCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDgzLCAweDIyLCAweDQyLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg4MywgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5MywgMHgwMCwgMHg1ZiwKLQkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDViLCAweDgzLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4ODMsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2NSwgMHg4MywgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDYyLCAweDgzLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTMsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2OCwgMHg4MywgMHg4MiwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0NSwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NmMsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NGIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0YiwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ4LCAweDkzLCAweDAwLCAweDAzLCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGI0LCAweDkxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg1MCwKLQkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3NywgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGM5LCAweDAxLCAweDAwLCAweDc5LCAweDgzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg0MSwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgyZSwgMHg0NywKLQkweDk3LCAweDkwLCAweDAxLCAweDAwLCAweDhmLCAweDgzLCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAotCTB4OGQsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODMsIDB4MjMsIDB4YTIsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDAwLAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4ODMsIDB4MDAsIDB4NWMsCi0JMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MywgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDlhLCAweDgzLCAweDIyLCAweDVmLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4OTYsIDB4ODMsIDB4NjIsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NywgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDcyLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MGYsIDB4MDAsIDB4ZjYsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg5ZSwgMHg4MywgMHhhMiwgMHhhNiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MywgMHgwMCwgMHhmMiwKLQkweDNhLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDg0LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg4MywgMHgyMiwgMHg0YSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGFjLCAweDgzLCAweDIyLCAweDQ4LCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDNkLCAweDQyLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAotCTB4YWMsIDB4ODMsIDB4YTIsIDB4NDIsIDB4ZTAsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODQsIDB4YTIsIDB4NGIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDgzLCAweDY5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3OSwgMHg0MSwgMHg0NywgMHhjMywgMHgwMSwgMHgwMCwgMHhiMiwgMHg4MywgMHgyMiwgMHhhMSwKLQkweDA5LCAweDZjLCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODMsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ODMsIDB4YTMsIDB4OTIsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLCAweDJhLCAweDg3LCAweDIyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODMsIDB4MjIsIDB4NWMsIDB4MTcsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhiOSwgMHg4MywgMHgwMCwgMHgwMCwgMHgyYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4YmQsIDB4ODMsIDB4YTIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDRjLAotCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGM2LCAweDgzLCAweGE4LCAweDU0LAotCTB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODMsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MywgMHgyMiwgMHg0MywKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweGNjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTQsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDksIDB4ODMsIDB4MjgsIDB4NTQsCi0JMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGRiLCAweDgzLCAweDIyLCAweDUwLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgxNywgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MywgMHhhMiwgMHg0MSwKLQkweDk5LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDE3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4ODMsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxNiwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAotCTB4ZTksIDB4ODMsIDB4YTIsIDB4NWYsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTEsIDB4MDAsIDB4MDEsCi0JMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDgzLCAweGEyLCAweDRiLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODQsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDExLCAweGIwLCAweDAxLCAweDAwLCAweGVmLCAweDgzLCAweDM1LCAweDAxLCAweDg2LCAweDMwLCAweDAwLCAweDAwLAotCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODMsIDB4MjgsIDB4YjEsCi0JMHgzMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MywgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDg0LCAweGEyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MywgMHhhOCwgMHhiMSwKLQkweDEyLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDgzLCAweGEyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDA3LCAweDAwLCAweDQzLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweGFhLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgzZSwgMHg0MywgMHgyNywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4YTMsIDB4MGIsCi0JMHg4NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MmQsIDB4NDAsIDB4MzksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4NCwgMHhhMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweGRlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAotCTB4MGYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHgyMywgMHgwMSwKLQkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MWYsIDB4ODQsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5MiwgMHgwMCwgMHg0MywKLQkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDg0LCAweDIyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjUsIDB4ODQsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDI1LCAweGQwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDRjLAotCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzcsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHgwMCwgMHg0NSwKLQkweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDMwLCAweDg0LCAweGEzLCAweDEyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzEsIDB4ODQsIDB4NjgsIDB4MWIsIDB4MjgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCi0JMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzNCwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg1YSwgMHg4NCwgMHgyMiwgMHgxNCwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTQsCi0JMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4NCwgMHhhMiwgMHgxNCwgMHgzNiwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDQ0LCAweDg0LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNmLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MmIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0OSwgMHg4NCwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDg0LCAweDIyLCAweDFiLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE1LAotCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg4NCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDU0LCAweDg0LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODQsIDB4YTIsIDB4NDAsCi0JMHgyNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzOSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDM5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4NCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDYwLCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDkyLCAweDAwLCAweDQwLAotCTB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAotCTB4NjcsIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDIwLCAweDFkLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmMsIDB4ODQsIDB4YTMsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg2ZSwgMHg4NCwgMHg2MCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwKLQkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEzLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAotCTB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4YTIsIDB4NWYsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDkxLCAweDAwLCAweDAxLAotCTB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NzYsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDg0LCAweDIyLCAweDEzLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLAotCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDdlLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YSwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAotCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5NSwgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5MywgMHg4NCwgMHgyMiwgMHg0MiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4OTQsIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4NCwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDlkLCAweDg0LCAweDIyLCAweDIwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODQsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MywgMHgwMCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDg0LCAweDIyLCAweDNhLAotCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YTcsIDB4ODQsIDB4YTIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA1LCAweDk0LCAweDAwLCAweDk1LAotCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjAsIDB4ODQsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NGIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGIyLCAweDg0LCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKLQkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGExLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTEsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGJlLCAweDg0LCAweDY0LCAweDQ3LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODQsIDB4YTgsIDB4MWIsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHg3NCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGUwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODQsIDB4MDEsIDB4ZmIsIDB4MDgsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHg4NSwgMHg4NywgMHhmYiwgMHgyMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNlLCAweDg0LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4NCwgMHhhNiwgMHg1ZiwKLQkweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDkyLCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDcsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGUyLCAweDg0LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NTMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4MjIsIDB4MjAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZiwgMHg4NCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDMzLCAweDkzLCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4ODQsIDB4MjEsIDB4MDQsCi0JMHg4MCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKLQkweGJkLCAweDg3LCAweDAwLCAweDRiLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDA2LCAweDg1LCAweDAwLCAweDQzLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODUsIDB4MDAsIDB4ZmIsIDB4MjIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiZCwgMHg4NywgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0ZSwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDAyLCAweDg1LCAweDAwLCAweDVhLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWYsIDB4ODQsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MDAsIDB4NTMsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1NiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweGEwLCAweDBhLAotCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODQsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4NCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1MywKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDU0LCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmUsIDB4ODQsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODQsIDB4YTIsIDB4MGEsCi0JMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1ZCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODQsIDB4YTAsIDB4OTEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3YiwgMHg4OCwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODUsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NTQsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4YTAsIDB4NDIsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1NCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAotCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4NSwgMHgyMiwgMHgwYiwKLQkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDg1LCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGEyLCAweDU0LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODUsIDB4MjIsIDB4NTUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg4MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDg1LCAweDIyLCAweDUzLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweGJjLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDIwLCAweDg1LCAweDIyLCAweDQzLAotCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg4NSwgMHhhMiwgMHg0MywgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDIxLCAweDg1LCAweDQ2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjQsIDB4ODUsIDB4YTAsIDB4ZjAsIDB4MzAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODUsIDB4MWUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg0MSwgMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwKLQkweDVkLCAweDkyLCAweDAwLCAweDQwLCAweDI1LCAweDMwLCAweDAxLCAweDAwLCAweDI5LCAweDg1LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg5MywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxOCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYywgMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhMSwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHg4NSwgMHgyMiwgMHg0NiwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHgzZCwgMHg4NSwgMHgyMiwgMHg0MCwKLQkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4M2YsIDB4ODUsIDB4MjIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg4NSwgMHgyMiwgMHg0MiwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDQxLCAweDg1LCAweDY2LCAweDFiLAotCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NiwgMHg0MSwgMHg0MSwgMHhjMywgMHgwMSwgMHgwMCwgMHg3MCwgMHg4NSwgMHgyMywgMHg5MiwKLQkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDg1LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NzQsIDB4ODUsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDBhLCAweDI0LCAweGM4LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLAotCTB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4ODUsIDB4MjIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwKLQkweDI0LCAweGNjLCAweDAxLCAweDAwLCAweDRhLCAweDg1LCAweGFhLCAweDQxLCAweDI3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODUsIDB4MjYsIDB4NDAsCi0JMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg1NywgMHg4NSwgMHhhMiwgMHg0MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg2MywgMHg4NSwgMHgwMCwgMHg0MSwKLQkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQyLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MjEsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHg1YywgMHg4NSwgMHhhMiwgMHg0NCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVmLCAweDg1LCAweGE4LCAweDQyLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDg1LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDZhLCAweDg1LCAweDIyLCAweDQwLAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2NywgMHg4NSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDdkLCAweDg1LCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweDdlLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzQsIDB4ODUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg5MiwgMHgwMCwgMHg5MiwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDMxLCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDg1LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4N2QsIDB4ODUsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDk1LCAweDAwLCAweDBhLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHg4NSwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDkxLCAweDg1LCAweDJhLCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4NiwgMHg4NSwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg4NSwgMHhhMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDg1LCAweGEzLCAweDA3LCAweDAzLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODksIDB4ODUsIDB4YTMsIDB4NDAsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDg1LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGUsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4NSwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MmQsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg4NiwgMHgyMiwgMHgwZiwgMHg0MiwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4NSwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlhLCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhMiwgMHg4NSwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTEsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwNiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDU0LAotCTB4MjksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAzLCAweDBhLCAweGM4LCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4Y2IsIDB4ODUsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCi0JMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGI4LCAweDg1LCAweGEzLCAweDA3LAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODUsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGM1LCAweDg1LCAweDIyLCAweDQwLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGM1LCAweDg1LCAweDIyLCAweDQyLAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGU5LCAweDg1LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YzIsIDB4ODUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGM3LCAweDg1LCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlOSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKLQkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODUsIDB4YTMsIDB4MTIsCi0JMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkMSwgMHg4NSwgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLAotCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDg1LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDg2LCAweDIyLCAweDBkLAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4NSwgMHgwMCwgMHgwZCwKLQkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDg1LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweGU5LCAweDg1LCAweDAwLCAweDQxLAotCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg4NSwgMHhhOCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODYsIDB4MjIsIDB4MGQsCi0JMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4NiwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGY1LCAweDg1LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhmMywgMHg4NSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4NSwgMHgxZiwgMHhmMCwKLQkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweGIyLCAweDg1LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YjIsIDB4ODUsIDB4MjMsIDB4MDcsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODYsIDB4YTgsIDB4NDYsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhiMiwgMHg4NSwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGIyLCAweDg1LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDE0LAotCTB4MGEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHhmMiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDg2LCAweDIyLCAweDQwLCAweDMxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhmNiwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDExLCAweDg2LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODYsIDB4MjIsIDB4MGIsIDB4ZWQsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCi0JMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDFmLCAweDQzLCAweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDFiLCAweDg2LCAweGEwLCAweDQ2LAotCTB4MGYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4NiwgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBmLCAweGEyLCAweDQyLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk1LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4ODYsIDB4YTAsIDB4NDEsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NiwgMHgyMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJhLCAweDg2LCAweGEwLCAweDQzLCAweDg5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MmEsIDB4ODYsIDB4MjAsIDB4NDUsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODYsIDB4YTAsIDB4NDEsCi0JMHgwZSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGMwLCAweDAxLCAweDAwLCAweDIyLCAweDg2LCAweGEyLCAweDQxLAotCTB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODYsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwKLQkweDkwLCAweDg4LCAweDAxLCAweDAwLCAweDMxLCAweDg2LCAweDkwLCAweDQ4LCAweDkyLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDE0LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQwLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDg2LCAweDAwLCAweDE3LAotCTB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4NiwgMHhhMCwgMHgwNywKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4NiwgMHg5MCwgMHhmMiwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLAotCTB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NTksIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDU2LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2MywgMHg4NiwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjMsIDB4ODYsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDg2LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2OCwgMHg4NiwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTEsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDZkLCAweDg2LCAweDIyLCAweDQwLAotCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDcyLCAweDg2LCAweGE4LCAweDQwLAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHg1MiwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg4NiwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MSwgMHg4NiwgMHg2OCwgMHgwNywKLQkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsCi0JMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg4NiwgMHg4NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NiwgMHgyMiwgMHgwZCwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDhjLCAweDg2LCAweDIyLCAweDBkLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4ODYsIDB4MDAsIDB4MGQsCi0JMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGEyLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIwLAotCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg5MiwgMHg4NiwgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg4NiwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTMsIDB4ODYsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBkLAotCTB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODYsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhhMywgMHg4NiwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4YTEsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDllLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4ODYsIDB4MWYsIDB4ZjAsCi0JMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4NiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDdiLCAweDg2LCAweDIzLCAweDA3LAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweGE4LCAweDQ2LAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3YiwgMHg4NiwgMHgwMCwgMHgwZCwgMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHhiZSwgMHg4NiwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YmIsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDg2LCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NiwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDg4LCAweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OTUsIDB4MDAsIDB4NDEsIDB4M2YsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAotCTB4MmEsIDB4ODcsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweGQ4LCAweDkyLCAweDAwLCAweDA3LAotCTB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4ODYsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkMiwgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDg2LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ODYsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGRjLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGQ5LCAweDg2LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg5MywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweGEyLCAweDVmLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDMsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDhlLCAweGY0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLAotCTB4ZWIsIDB4ODYsIDB4MjIsIDB4NDgsIDB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKLQkweGViLCAweDg2LCAweDFmLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGVhLCAweDg2LCAweDIzLCAweDQxLAotCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiZCwgMHg4NywgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4ODYsIDB4MjIsIDB4MGEsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJkLCAweDQ1LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDg2LCAweDIyLCAweGYwLAotCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4NiwgMHhhMywgMHg0MSwKLQkweDJjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4OTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwKLQkweGJkLCAweDg3LCAweDIwLCAweDRjLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLAotCTB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywKLQkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YmQsIDB4ODcsIDB4MDAsIDB4NDksIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4NywgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDgwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDA1LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHg4NywgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDg3LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MGIsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4ODIsIDB4MjIsIDB4NDAsCi0JMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg4MSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4NywgMHgyMiwgMHg0MCwKLQkweGYyLCAweDdmLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweDAwLCAweDZmLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODcsIDB4MjIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODAsIDB4MDAsIDB4NDEsCi0JMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwZSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE4LCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTIsIDB4MjIsIDB4MDIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYywgMHg4NywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDJmLCAweDkyLCAweDFhLCAweDAyLAotCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MjYsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg4NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM5LCAweDkyLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI3LCAweDg3LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg5MiwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgzMSwgMHg4NywgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MzEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzMiwgMHg4NywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyZiwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDgyLCAweDg3LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI4LCAweDk0LCAweDI5LCAweDQxLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBkLCAweDk4LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY2LCAweDg3LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4NDcsIDB4ODcsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg4NywgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODcsIDB4NzAsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDVkLCAweDg3LCAweGEwLCAweDQ4LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1NywgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDFhLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDAwLCAweGY4LCAweDE4LCAweDMwLCAweDAxLCAweDAwLAotCTB4NTgsIDB4ODcsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsCi0JMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDFhLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NjEsIDB4ODcsIDB4YTgsIDB4MDksIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDcyLCAweDg3LCAweDIyLCAweDQxLAotCTB4MGQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg2ZSwgMHg4NywgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4NywgMHgwMCwgMHg0MSwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAyLCAweDAwLCAweDA5LCAweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDQ1LCAweDg3LCAweDgzLCAweDQxLAotCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHg4NywgMHgwMCwgMHg0MSwgMHgxYiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHg4NywgMHgyMywgMHg0MCwKLQkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4N2EsIDB4ODcsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc3LCAweDg3LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgwMCwgMHhmOCwKLQkweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg3LCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODcsIDB4YTAsIDB4YWEsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDk0LCAweDIwLCAweDA3LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgwYywKLQkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDk1LCAweDg3LCAweDI2LCAweDU0LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4OGIsIDB4ODcsIDB4ODcsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4NywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDg3LCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDg3LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODcsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAotCTB4OGMsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LAotCTB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsIDB4OTAsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAotCTB4OTUsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCi0JMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDgyLCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODcsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHg4NywgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MjIsIDB4NTEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg4NywgMHgyMiwgMHg0MCwKLQkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAotCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDQwLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg4NywgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhlNiwgMHg4YSwgMHgwMCwgMHg0MSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4YiwgMHgwMCwgMHg0MSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDRjLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4YiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDhiLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4YiwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDczLCAweDhjLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3MywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhjLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4YywgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4OGMsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWEsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg4YywgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGMsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmNSwgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZCwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDhjLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDcxLCAweDhjLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA3LCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDhkLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBlLCAweDhkLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDFjLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4N2IsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDgzLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4ZCwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OGIsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3ZiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDIwLCAweDQ3LAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4ODMsIDB4ODgsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGQsIDB4MDAsIDB4NDksCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4ZCwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGViLCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTUsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OGUsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDhkLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlZSwgMHg4ZCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NGIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDhkLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVjLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDhlLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDhlLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDksIDB4OGYsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDhkLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4OWQsIDB4OGYsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBjLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBjLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjMSwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMSwgMHg4ZiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YWUsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFlLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFmLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyYiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDhmLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg4ZiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGYsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4ZiwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ4LCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkOCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmEsIDB4OTAsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmYSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDhmLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHg4ZSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4OGYsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MzYsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTEsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5MSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDkxLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NywgMHg5MSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDY3LCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhlLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg1LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM0LCAweDkxLCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJlLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODcsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MGYsCi0JMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhlZSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGRmLCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkZiwgMHg4YSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZGMsIDB4OGEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4NCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDhhLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHhhMywgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDFmLCAweDg3LCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDcsIDB4NDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNywgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgyZSwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDRiLAotCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTUsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgzNCwKLQkweDk3LCAweDg0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRiLCAweGU0LCAweGU1LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDksIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJlLCAweDQwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDhiLCAweDIwLCAweDRiLAotCTB4OTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHg4YiwgMHgwMCwgMHg0MSwgMHg5NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDE4LCAweDhiLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWQsIDB4OGIsIDB4NDQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4YiwgMHhhMiwgMHg0YywgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDIxLCAweDhiLCAweDAwLCAweDRjLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDIyLCAweDhiLCAweDIwLCAweGYwLAotCTB4NTYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDI4LCAweDhiLCAweGE4LCAweDQ0LAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDhiLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDhiLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OGIsIDB4MjIsIDB4NDQsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDIwLCAweGEyLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHg4YiwgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgyZSwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDRmLCAweDhiLCAweGEyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4NiwgMHgwMCwgMHgyZiwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4YiwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OGIsIDB4YTIsIDB4NDYsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDhiLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDJmLCAweDQ2LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OGIsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAotCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg4NSwgMHg4YiwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4YiwgMHgyMiwgMHgwYSwKLQkweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg2YywgMHg4YiwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDYyLCAweDhiLCAweDAwLCAweDQxLCAweDE1LCAweGQwLCAweDAwLCAweDAwLAotCTB4ODUsIDB4OGIsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCi0JMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDg1LCAweDhiLCAweDIyLCAweDQxLCAweDE1LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzksIDB4OGIsIDB4YTAsIDB4NDMsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDExLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0NywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MmMsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDgxLCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4OGIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1MSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4YiwgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4YiwgMHgyMiwgMHg0NSwKLQkweDIzLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDk3LCAweDhiLCAweDIyLCAweDQ4LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwYSwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYSwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAotCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGIsIDB4MjMsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDRjLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjAsIDB4NDEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDk1LCAweDAwLCAweGYwLCAweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGFlLCAweDhiLCAweGEyLCAweDQ0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGIsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5MywgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4YiwgMHhhMiwgMHgwOCwKLQkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweGFlLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OGIsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OGIsIDB4MjIsIDB4NGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDM2LCAweDkzLCAweDAwLCAweGYzLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwKLQkweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4OGIsIDB4MDAsIDB4NDksIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHhjOSwgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg1NywgMHg5MywgMHgwMCwgMHg0MCwKLQkweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGNkLCAweDhiLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjgsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4NDAsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweGQwLCAweDAxLCAweDAwLCAweDg5LCAweDk0LCAweDAwLCAweDQwLAotCTB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHg4YiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjZSwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ2LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZWMsIDB4OGIsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4YiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGYwLCAweDhiLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweGYxLCAweDhiLCAweDAwLCAweDA2LAotCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmMywgMHg4YiwgMHgyMCwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGY3LCAweDhiLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAwLCAweDAwLAotCTB4ZjYsIDB4OGIsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OGIsIDB4MDAsIDB4MDYsCi0JMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLAotCTB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4M2UsIDB4OTYsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4OGIsIDB4YTgsIDB4MTMsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OGMsIDB4MjIsIDB4MDIsCi0JMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgyZCwgMHgwMiwgMHgwYywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDhjLCAweGEyLCAweDAyLCAweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDBhLCAweDhjLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDUsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDJkLCAweGYwLAotCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4YywgMHgyMiwgMHgwMSwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDE3LCAweDhjLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNiwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDRhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDAwLCAweDA1LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjAsIDB4OGMsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4OGMsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDhjLCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OGMsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHg4ZiwgMHgwZCwgMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4OGIsIDB4MDAsIDB4YTEsCi0JMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDhiLCAweDAwLCAweDAyLCAweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDhjLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MmQsIDB4NDYsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4YywgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgzZSwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4M2IsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQ1LCAweDhjLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4YywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjAsIDB4MDEsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDRhLCAweDhjLCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDRkLCAweDhjLCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4MWUsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MjgsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4YywgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OGMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1MiwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMCwKLQkweDkyLCAweGIwLCAweDAxLCAweDAwLCAweDViLCAweDhjLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4ZjgsCi0JMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4YywgMHhhMiwgMHg0MSwgMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDhjLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDFlLAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1ZiwgMHg4YywgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0NywKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDYyLCAweDhjLCAweDIyLCAweDVmLCAweDAxLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODcsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4YywgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY5LCAweDhjLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjksIDB4OGMsIDB4NDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4YywgMHg4NSwgMHhjYSwgMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDk1LCAweDE4LCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NywKLQkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NiwgMHg4YywgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDk0LCAweDAwLCAweDQwLAotCTB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwKLQkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDdjLCAweDhjLCAweDkwLCAweDRjLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OGMsIDB4MjIsIDB4NDMsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwgMHg3ZSwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKLQkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDhjLCAweDhjLCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OGMsIDB4MjgsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4YywgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDFkLCAweDA4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MWQsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDk3LCAweDhjLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLCAweGEyLCAweDhjLCAweGEyLCAweDQxLAotCTB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDQsIDB4ODMsIDB4NzAsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKLQkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDFmLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OTUsIDB4MDAsIDB4NDgsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODcsIDB4MjMsIDB4NDEsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhiZiwgMHg4NywgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0NywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTMsIDB4OGIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhiMCwgMHg4YywgMHgyMiwgMHg0NywgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MywgMHg4YiwgMHgwMCwgMHg0OCwKLQkweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDFmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsIDB4MDUsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDliLCAweDkxLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YmUsIDB4OGMsIDB4YTIsIDB4NTAsCi0JMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4OGMsIDB4YTAsIDB4NDMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyMCwgMHg0NywKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDIyLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg4ZiwgMHg4NCwgMHgwMSwgMHgwMCwgMHhkNiwgMHg4YywgMHgyMiwgMHg0NywgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDhjLCAweDFmLCAweGYwLAotCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhjLCAweDQyLCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4YywgMHgyMywgMHg0MSwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMSwgMHg4YywgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGQ0LCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAotCTB4YmYsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGEyLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDhjLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OGMsIDB4YTMsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4YywgMHgyMCwgMHg0YywKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDIsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDk0LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwKLQkweDk2LCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDYsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDIyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0YSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM5LCAweDk0LCAweDAwLCAweDQ3LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4ZCwgMHg5MCwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDYyLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwgMHhlNSwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDk0LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDhkLCAweDgwLCAweGYzLAotCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDhkLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAotCTB4MjgsIDB4OGQsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDIsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDJhLCAweDhkLCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg4ZCwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLAotCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDk0LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OGQsIDB4YTAsIDB4MTQsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGY4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDBiLAotCTB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OGQsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDBmLCAweDk1LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4NGMsIDB4OGQsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4ZCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg1MiwgMHg4ZCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsCi0JMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU5LCAweDhkLCAweDA2LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDIwLCAweGYyLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDksIDB4NDYsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwKLQkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAotCTB4NWUsIDB4OGQsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4ZCwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLAotCTB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwKLQkweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NmUsIDB4OGQsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDM1LCAweDAwLCAweDFkLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OGQsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4ZCwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OGIsIDB4MjIsIDB4NGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4YiwgMHgyMiwgMHgwNiwKLQkweDkwLCAweDZjLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyYSwgMHg1MCwgMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDhmLCAweDhkLCAweGEwLCAweDQzLAotCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg5MSwgMHgwMCwgMHgxMCwgMHg4NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkxLCAweDhkLCAweDQyLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGIsIDB4MWEsIDB4NWQsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHgxMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2YiwgMHhmYiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg5YywgMHg4ZCwgMHhhMCwgMHg0MywKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4ZCwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTEsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4ZCwgMHg0MiwgMHgwNSwKLQkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDliLCAweDhjLCAweDIyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4YywgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWQsIDB4OGQsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCi0JMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZCwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGY1LCAweDgyLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGFjLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGI0LCAweDhkLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWYsIDB4OTQsIDB4MDAsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGMwLCAweGE4LCAweDNkLCAweDQ2LCAweDBkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmUsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMiwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHhiYiwgMHg4ZCwgMHgwMCwgMHg1MCwKLQkweDQzLCAweGMxLCAweDAwLCAweDAwLCAweGNhLCAweDhkLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4NGIsIDB4MTIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDk0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDRhLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1ZSwgMHgwMSwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDA5LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDhkLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGQ4LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGQsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDk3LCAweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk2LAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGQsIDB4MjAsIDB4MDksIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg4ZCwgMHgxZiwgMHgwOSwgMHg5NiwgMHgyNCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGRlLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODMsIDB4OTQsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGU5LCAweDhkLCAweDIyLCAweGYzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDQyLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MiwKLQkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDk2LCAweDkzLCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDIyLCAweDQwLAotCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGQsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4NTIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OGQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDAsIDB4YTYsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4ZSwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDA4LCAweDAwLCAweDBiLCAweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNiwgMHg4ZSwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGE3LCAweDkxLCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZSwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwKLQkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTIsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxOSwgMHg4ZSwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDNkLCAweDgwLCAweDAxLCAweDAwLAotCTB4MWEsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZSwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDc1LCAweDhlLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGUsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHg4ZSwgMHhhMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwKLQkweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OGUsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDE1LAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4ZSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMxLCAweDhlLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1ZCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDVkLCAweDhlLCAweGEwLCAweDBiLCAweDk5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg4ZSwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MGIsCi0JMHg5OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg1MCwgMHg5OSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDYyLCAweDAxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDIzLCAweDgwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNmLCAweDQxLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDcsCi0JMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4ZSwgMHgyMywgMHgwYiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweGU1LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OGUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGUsIDB4MjYsIDB4MTEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHg0YywgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLCAweDYyLCAweDhlLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmYsIDB4MDgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhmNCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGU0LCAweGNkLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4OGUsIDB4MjIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjgsIDB4OGUsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MywgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NzAsIDB4OGUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZkLCAweDhlLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg3MywgMHg4ZSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NzUsIDB4OGUsIDB4MDAsIDB4NGEsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDJkLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDJkLCAweGYwLAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCi0JMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDk0LCAweDAwLCAweDQwLAotCTB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiOSwgMHg4ZSwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGUsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDhmLCAweDhlLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4ZSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGEwLCAweDhlLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGVlLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg4ZSwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTYsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDhlLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg5ZiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGEzLCAweDhlLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhOSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGFhLCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OGUsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YjUsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg4ZSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDhlLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiYywgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGM1LCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MGEsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNhLCAweDhlLCAweDAzLCAweDFlLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4OGUsIDB4MDAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4ZSwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGQ4LCAweDhlLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGVjLCAweDhlLCAweGEyLCAweDQwLAotCTB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDIwLCAweDA2LCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OGEsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LCAweDk4LCAweDUwLCAweDAwLCAweDAwLAotCTB4ZmEsIDB4OGUsIDB4MjAsIDB4MDEsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNywgMHg4ZSwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWMsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLAotCTB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDdjLCAweDhlLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgyYywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQyLCAweDE5LCAweDgwLCAweDAwLCAweDAwLAotCTB4YTksIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDgsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDhmLCAweGE4LCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg4ZiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHg4ZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHg4NywgMHg0MiwKLQkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDkyLCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDIyLCAweDAwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OGYsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4ZjIsCi0JMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQwLAotCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHg4ZiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMSwgMHg4ZiwgMHhhMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzIsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiYywgMHg4ZiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM3LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4OGYsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDRkLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg4ZiwgMHgyMiwgMHg0MiwgMHg5NiwgMHgxNCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDY4LCAweDQwLAotCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGIsIDB4OGYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OGYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDUzLCAweDhmLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OGYsIDB4MjIsIDB4NDcsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDUyLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzUsIDB4MDksIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDhmLCAweGE4LCAweDQwLAotCTB4ZTEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg4ZiwgMHg2NSwgMHgwNSwKLQkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg2YywgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwYiwKLQkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ODQsIDB4OGYsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTMsIDB4MDAsIDB4NWYsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc2LCAweDhmLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg2ZSwgMHg4ZiwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4ZiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDAwLCAweDQwLCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDE3LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MGMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0YywgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDhlLCAweDhmLCAweDMwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDBmLCAweDk0LCAweGY0LCAweDAxLCAweDAwLAotCTB4OTMsIDB4MDQsIDB4MDAsIDB4NWYsIDB4OTUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5OCwgMHg4ZiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDk2LCAweDhmLCAweDQ2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAotCTB4MzEsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDg1LCAweDkyLCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhOSwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhMiwgMHg4ZiwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE2LCAweDhmLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YTMsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDIyLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHg5NCwgMHgwMCwgMHg0YSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5MywgMHgwMCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDQwLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MjIsIDB4NDcsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDhmLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGI1LCAweDhmLCAweGEyLCAweDQwLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDEsIDB4OTMsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM5LCAweDk0LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGYsIDB4ODcsIDB4NDIsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTksIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGJhLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5NSwgMHgwMCwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkMywgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0NywKLQkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDcsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4NDEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgwYSwKLQkweDJjLCAweDUwLCAweDAwLCAweDAwLCAweDA3LCAweDk1LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZWEsIDB4OGYsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OGYsIDB4ODQsIDB4NDgsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDhmLCAweDAwLCAweDBhLCAweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGViLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGY4LCAweDhmLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweGYxLCAweDkzLCAweDAwLCAweDQ1LAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGYsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY0LCAweDhmLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OGYsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJkLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiNywgMHg5MywgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4OTAsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHg5MCwgMHhhMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTAsIDB4MjIsIDB4NGEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHg5MCwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5MCwgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTMsIDB4OTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LAotCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTAsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDI5LCAweDkwLCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsCi0JMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDA4LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTAsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTAsIDB4MjAsIDB4MTYsCi0JMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDMzLCAweDkwLCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHg5MCwgMHg4NCwgMHg0NSwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MCwgMHgwMCwgMHgwYSwKLQkweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MzQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5MCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDIsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDkwLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAotCTB4NTYsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDU2LCAweDkwLCAweDAwLCAweDVjLAotCTB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDkwLCAweDIzLCAweDBkLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OTAsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDYyLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg1ZSwgMHg5MCwgMHhhOCwgMHg0NiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI3LCAweDkzLCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg2NywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NmQsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg3MSwgMHg5MCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDcxLCAweDkwLCAweGEyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg4NiwgMHg5MCwgMHgyMiwgMHg0YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDc3LCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDgyLCAweDkwLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2IsIDB4OTAsIDB4YTIsIDB4ZjMsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg1LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4N2YsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCi0JMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgzLCAweDkwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LCAweGU0LCAweGIxLCAweDAwLCAweDAwLAotCTB4ODksIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDk2LCAweDkwLCAweDIyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OTAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4ZSwgMHg5MCwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTAsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDJkLCAweDAwLAotCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MmQsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHg4ZSwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MSwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDkwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTAsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGQ2LCAweDkwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLAotCTB4YWQsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHg5MCwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGIwLCAweDkwLCAweDIzLCAweDBkLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MCwgMHgyMiwgMHg0MCwKLQkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDAxLCAweDg0LCAweDUwLCAweDAxLCAweDAwLAotCTB4YmQsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGExLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YmIsIDB4OTAsIDB4YTgsIDB4MTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTAsIDB4MDAsIDB4NWUsCi0JMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5MCwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MCwgMHgyMiwgMHg0MCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg0MywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg5MCwgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4Y2QsIDB4OTAsIDB4YTgsIDB4MGEsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDkwLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDExLAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg5NCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwKLQkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MSwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTAsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUzLCAweDkwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg5MCwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhlZiwgMHg5MCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDdkLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGY3LCAweDkwLCAweDIyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmMiwgMHg5MCwgMHgyMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTAsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4YzEsIDB4OTIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDk1LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDkxLCAweGEyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweGE3LCAweDkxLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA3LCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDkxLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4ZjEsIDB4OTMsIDB4MDAsIDB4NDUsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4OTAsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEwLCAweDkxLCAweGE4LCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZCwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE5LCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHg5MSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTEsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDMwLCAweDkxLCAweDIyLCAweDRhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTEsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MjIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk2LCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHgxNiwKLQkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweDE3LCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGMxLCAweDkyLCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDJiLCAweDkwLCAweDAwLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzYSwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NDEsIDB4OTMsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDkxLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlYywgMHg4ZSwgMHgwMCwgMHg0NSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDUxLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5MSwgMHgzNywgMHg1YywKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NGUsIDB4OTEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDE3LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMSwgMHgyMCwgMHgxNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0NywKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDkxLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHgxNSwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMSwgMHgyMCwgMHgxNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5MiwgMHgwMCwgMHgxMCwKLQkweDMyLCAweDMwLCAweDAxLCAweDAwLCAweDJiLCAweDkwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAotCTB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzMsIDB4OTEsIDB4YTIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTEsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5MSwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDgyLCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3ZSwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MmQsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLAotCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDkwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDQ1LAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzcsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzMywgMHhjMywgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OTYsIDB4OTEsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDgsCi0JMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDlmLCAweDRjLCAweDAzLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLAotCTB4MzQsIDB4YzMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4OWQsIDB4OTIsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YTQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDkxLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4MDAsIDB4NDcsCi0JMHgxOSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDYxLCAweDk1LCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHg5MSwgMHhhMiwgMHg0YiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxOCwgMHg5MiwgMHhhMiwgMHg0YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGM1LCAweDkxLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAotCTB4YzgsIDB4OTEsIDB4YTIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg5MSwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDkxLCAweDIyLCAweGYwLAotCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MWYsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0ZiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTYsIDB4OTIsIDB4MjAsIDB4NDIsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDU4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDkxLCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTEsIDB4MjMsIDB4ZjAsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhkMiwgMHg5MSwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDE3LCAweDkyLCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDE3LCAweDkyLCAweGEyLCAweDQxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4OTEsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDE3LCAweDkyLCAweDFmLCAweDEyLCAweDg0LCAweDUwLCAweDAwLCAweDAwLAotCTB4MTcsIDB4OTIsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzUsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDkyLCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTEsIDB4MjIsIDB4ZjAsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkZSwgMHg5MSwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MSwgMHgwMywgMHgxZSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRkLCAweDkxLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5MSwgMHgyMiwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGU2LCAweDkxLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDkxLCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5MSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweGVjLCAweDkxLCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGViLCAweDkxLCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlZSwgMHg5MSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTEsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmOCwgMHg5MSwgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MSwgMHhhMiwgMHhmMiwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTEsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGY4LCAweDkxLCAweGEwLCAweDkxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OTEsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg5MSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDksIDB4OTIsIDB4YTIsIDB4ZjAsCi0JMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA2LCAweDkyLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmOCwgMHg5MSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MSwgMHgyMCwgMHg5MSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MGQsIDB4OTIsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTIsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDkyLCAweDIyLCAweDBhLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxMSwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4OTIsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDkyLCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDkyLCAweDAwLCAweDQxLAotCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTIsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxYSwgMHg5MiwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MiwgMHgwMCwgMHg0YywKLQkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweGM5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MWQsIDB4OTIsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OTIsIDB4YTIsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwKLQkweGU3LCAweGQxLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OTIsIDB4MjIsIDB4NWEsCi0JMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDkyLCAweDAwLCAweDVhLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHhhNSwgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4ZjAsCi0JMHg4YywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MiwgMHgyMiwgMHg0MCwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDMzLCAweDkyLCAweGEyLCAweDRiLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTIsIDB4MjIsIDB4ZjAsIDB4MTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywKLQkweDEwLCAweDMwLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MzgsIDB4OTIsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODUsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MiwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQ0LCAweDkyLCAweGExLCAweGFkLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDUyLCAweDkyLCAweDEzLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGEsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDVlLCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCi0JMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAotCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQxLCAweDk3LCAweGIwLCAweDAwLCAweDAwLAotCTB4NGYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg5MiwgMHg2MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweGMyLAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OTIsIDB4YTIsIDB4NDUsIDB4MjUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5MiwgMHgzMSwgMHgyMCwgMHg4NSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg5MiwgMHgyMiwgMHgxMiwKLQkweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDU4LCAweDA0LCAweDExLCAweDEyLCAweDQ4LCAweDAzLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDVkLCAweDkyLCAweDMxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OTIsIDB4MjIsIDB4MTIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDkyLCAweDBiLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4NjgsIDB4OTIsIDB4MjIsIDB4NTAsCi0JMHg4NSwgMHg3MCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDk0LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDkzLCAweDA0LCAweDAwLCAweDEyLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKLQkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQyLCAweDEwLCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5MiwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDkyLCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDVlLCAweDkyLCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDg1LCAweDgwLCAweDAxLCAweDAwLAotCTB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmEsIDB4OTQsIDB4MDAsIDB4ZjIsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDkyLCAweGE4LCAweDA1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAotCTB4ODksIDB4OTIsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTIsIDB4MDAsIDB4NDIsCi0JMHg2OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDhhLCAweDkyLCAweDMxLCAweDVhLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDQyLAotCTB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MzUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg5MiwgMHgyOCwgMHhiMSwKLQkweDJjLCAweDMwLCAweDAwLCAweDAwLCAweDhkLCAweDkyLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg5MiwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTIsIDB4MjgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg5MiwgMHg5ZiwgMHhiYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI0LCAweDExLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDlhLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDk0LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTIsIDB4MzIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhNCwgMHg5MiwgMHgyMiwgMHhmOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDkyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDkyLCAweDI4LCAweGIxLCAweDkyLCAweDMwLCAweDAwLCAweDAwLCAweGE0LCAweDkyLCAweDIyLCAweDRjLAotCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5MiwgMHhhOCwgMHhiMSwKLQkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDkyLCAweDQ5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGI1LCAweDkyLCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5MiwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGJlLCAweDkyLCAweDIyLCAweDBkLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5MiwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGMzLCAweDkyLCAweDgzLCAweDFlLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgyZCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTIsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNywgMHgzZCwgMHg0MywKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweGExLCAweDE2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDksIDB4OTIsIDB4MzAsIDB4NDcsCi0JMHgxNywgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDkwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTIsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4ZTEsIDB4OTIsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlYiwgMHg5MiwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAxLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4OTIsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4OTIsIDB4MzAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGYxLCAweDkyLCAweGEyLCAweDBiLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5OCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDRhLCAweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLAotCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDQzLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5MywgMHg0MCwgMHgwOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDkzLCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAotCTB4MGEsIDB4OTMsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MywgMHgzMSwgMHg1ZiwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4OTMsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDE2LCAweDkzLCAweGEyLCAweDNiLAotCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNywgMHg5MywgMHgxOCwgMHg0YSwKLQkweDQ0LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTMsIDB4MjIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDFlLCAweDkzLCAweDAwLCAweDA1LAotCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg5MywgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDlkLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweDIyLCAweDQ1LAotCTB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHgwNCwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwKLQkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyZSwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNywgMHg5MywgMHhhMiwgMHgzYiwKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZTYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmYsIDB4NGYsIDB4OTUsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg0YiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmQsIDB4NDQsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYyLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDEwLAotCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTMsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHg1YywKLQkweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4MDYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MSwKLQkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweDVhLCAweDkzLCAweGFhLCAweDQxLCAweDNiLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDdiLCAweDkzLCAweDI2LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLAotCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MjAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3YSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTMsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg3OSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHhhMiwgMHg0MSwKLQkweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5MywgMHhhOCwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NywgMHg5MywgMHgwMCwgMHg1MCwKLQkweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4MWEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5MywgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDVjLAotCTB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTMsIDB4MDAsIDB4NDEsIDB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDg4LCAweDkzLCAweDhjLCAweGY4LCAweDhlLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJlLCAweGY4LCAweDBjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MmEsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk1LCAweDkzLCAweDIwLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDIwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MmQsIDB4NDIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDliLCAweDkzLCAweGEyLCAweGE1LAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5ZSwgMHg5MywgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCi0JMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGEzLCAweDkzLCAweGEwLCAweGE1LCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg5MywgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDk4LCAweGRjLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDRjLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4ODAsIDB4MDAsCi0JMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGMzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg5MywgMHg5ZiwgMHg0MSwKLQkweDg1LCAweDUwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGNjLCAweDAxLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4YTAsIDB4NDIsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDAsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MywgMHg1MiwgMHg0MywgMHg4MSwgMHg2MCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGQxLCAweDkzLCAweDAwLCAweDQxLAotCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDIsIDB4OTMsIDB4OWUsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OTMsIDB4YTIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDE1LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTMsIDB4OWMsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMSwgMHg5MywgMHhhMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDFlLAotCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTMsIDB4YTIsIDB4NDgsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MywgMHhhMiwgMHg4YSwKLQkweGYxLCAweDZkLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2UsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjQsCi0JMHgyOCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGViLCAweDkzLCAweDIwLCAweGYwLCAweDNlLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywKLQkweDNhLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAotCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHgyMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5NCwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg5NCwgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBkLCAweDk0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHg5NCwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxOSwgMHg5NCwgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFhLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTQsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTQsIDB4NjMsIDB4NDIsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg5NCwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg5NCwgMHgyMiwgMHhmMywKLQkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTcsIDB4ODUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MywgMHg5NCwgMHg4MiwgMHg0MSwKLQkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDM4LCAweDk0LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDMsIDB4OTQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTIsIDB4MDAsIDB4NDMsCi0JMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDk0LCAweGEzLCAweDE1LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDQ2LCAweDk0LCAweDAwLCAweDA2LAotCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHg5NCwgMHgyMCwgMHgwMiwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAotCTB4NzIsIDB4OTQsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OTQsIDB4YTIsIDB4MDIsCi0JMHgyYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg5NCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDRlLCAweDk0LCAweDIyLCAweDAyLCAweDBjLCAweDUwLCAweDAwLCAweDAwLCAweDU3LCAweDk0LCAweDAwLCAweDAyLAotCTB4MTYsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4OTQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGYxLCAweDkzLCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OTQsIDB4MjIsIDB4MTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3MSwgMHg5NCwgMHhhMiwgMHgwMiwKLQkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDk0LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg2MywgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWYsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MmYsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDM1LCAweDk0LCAweDIwLCAweDE1LAotCTB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweGUwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5NCwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDM1LCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDM1LCAweDk0LCAweDAwLCAweDAyLAotCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTQsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MSwgMHhhMywgMHg0MSwgMHgwMSwgMHgwMCwKLQkweDdmLCAweDk0LCAweDAwLCAweDQxLCAweDI3LCAweGQwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHgwNiwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGM0LCAweDAxLCAweDAwLCAweDhlLCAweDk0LCAweGEwLCAweGYwLAotCTB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwKLQkweDMwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTQsIDB4MjIsIDB4NGEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MywgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDMwLCAweDAwLCAweDBiLCAweDE2LCAweGM4LCAweDAxLCAweDAwLCAweDk3LCAweDk0LCAweGE0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHg5NCwgMHgyMiwgMHgwNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhNCwgMHg5NCwgMHhhMiwgMHgwNiwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDk0LCAweDIyLCAweDQ4LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4OWMsIDB4OTQsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDQ4LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHhhNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGE0LCAweDk0LCAweGEwLCAweDQ4LCAweDE3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDk1LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTQsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4YWUsIDB4OTQsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5NCwgMHg2NCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGIzLCAweDk0LCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LCAweDMwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmQsIDB4NDYsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLAotCTB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxOSwgMHhmYywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4OTQsIDB4YTAsIDB4ZjAsCi0JMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGU0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE2LCAweDRjLCAweDk1LCAweDYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRhLAotCTB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGQxLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHg1ZiwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4ZjYsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NCwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGE2LAotCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4NmUsIDB4MDYsIDB4ODIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhlMiwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweDRjLCAweDgzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTQsIDB4NDMsIDB4MzAsCi0JMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5ZSwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5NCwgMHgyNiwgMHgzMCwKLQkweDkzLCAweDA0LCAweDAwLCAweDAwLCAweGVjLCAweDk0LCAweDkwLCAweDRjLCAweDkyLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NDksCi0JMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGYxLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmUsIDB4OTQsIDB4MjIsIDB4NWYsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTQsIDB4YTIsIDB4NDAsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTcsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5NCwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZhLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MjEsIDB4ODEsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTUsIDB4YTIsIDB4NWYsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MywgMHgxOSwgMHg3YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDBjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxNSwgMHg5NSwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE1LCAweDk1LCAweDIwLCAweGYyLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDAwLCAweDJkLCAweDE0LCAweDk4LCAweGQwLCAweDAxLCAweDAwLAotCTB4MWEsIDB4OTUsIDB4MjAsIDB4NGMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDFkLCAweDk1LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmMywKLQkweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLCAweDgyLCAweGMwLCAweDAwLCAweDAwLAotCTB4MjMsIDB4OTUsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4MiwgMHhlYywgMHgwMCwgMHgwMCwKLQkweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGE4LCAweDAwLCAweDJkLCAweDFjLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAotCTB4OGEsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLAotCTB4MzcsIDB4OTUsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MmYsIDB4YWIsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg5NSwgMHgwMCwgMHgxNCwgMHg4MiwgMHg1MCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNjLCAweDk1LCAweDIyLCAweGYyLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzYywgMHg5NSwgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4MzAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDRmLCAweDk1LCAweDIzLCAweGYwLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTUsIDB4MjMsIDB4OTIsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhjOSwgMHgwNCwgMHgwMCwgMHhhNiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4ODksIDB4MDAsIDB4NGEsIDB4OTQsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDYsIDB4OTUsIDB4NjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhiMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDAwLCAweDJkLCAweDQyLCAweGIyLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLAotCTB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OTUsIDB4ZDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3OCwgMHhkYSwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NSwgMHgyMywgMHg0MCwKLQkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDIwLCAweDlkLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MmQsIDB4NDMsCi0JMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDk1LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDIwLCAweDlkLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHg5NSwgMHhhMiwgMHhmMCwgMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MjAsIDB4NDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAotCTB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OTUsIDB4MjMsIDB4NDEsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDEsCi0JMHgyNCwgMHhlYywgMHgwMCwgMHgwMCwgMHg2OCwgMHg5NSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDlmLCAweDQyLCAweDM4LCAweGVjLCAweDAwLCAweDAwLCAweDY4LCAweDk1LCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg5NSwgMHhhMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NmUsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDZlLCAweDk1LCAweDIzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDIwLCAweDFkLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwMCwgMHhhMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzcsIDB4OTUsIDB4OWYsIDB4NDEsCi0JMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhjLCAweGQwLCAweDAxLCAweDAwLCAweDc4LCAweDk1LCAweDAwLCAweDQxLAotCTB4MjQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDgxLCAweDk1LCAweGEyLCAweDQwLAotCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgyZiwgMHg0MCwKLQkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4ZjgsIDB4M2UsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4MTIsCi0JMHhlMCwgMHhlZCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMCwgMHgyMCwgMHhhYiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDAwLCAweGEwLCAweDFmLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDhhLCAweDk1LCAweGEzLCAweDVmLAotCTB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NSwgMHgyMiwgMHhmMiwKLQkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsCi0JMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkyLCAweDk1LCAweDFmLCAweDQzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDkzLCAweDk1LCAweGEyLCAweDQwLAotCTB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5NywgMHg5NSwgMHg5ZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg0LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDAwLCAweDJlLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQwLAotCTB4ODgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTUsIDB4MWYsIDB4NDQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMSwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg5NSwgMHg2MiwgMHg0MSwKLQkweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDYyLCAweDQxLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsCi0JMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEyLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDJlLCAweDQzLAotCTB4ODcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhNywgMHg5NSwgMHgyMCwgMHg0MywgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDQzLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4NDMsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDJkLCAweGYyLCAweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDJkLCAweGYwLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5NSwgMHhhMiwgMHgxMiwKLQkweDk4LCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDJkLCAweGYyLCAweDk4LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjQsIDB4OTUsIDB4YTAsIDB4ZjIsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI0LCAweDAwLCAweDJkLCAweDEyLCAweDg2LCAweGQwLCAweDAxLCAweDAwLCAweGI3LCAweDk1LCAweGEzLCAweDQxLAotCTB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg0MywKLQkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweGJiLCAweDk1LCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OTUsIDB4YTMsIDB4NDIsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiZSwgMHg5NSwgMHgwMCwgMHgwYSwgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDk1LCAweGEwLCAweDE3LAotCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTcsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHg5NSwgMHgyMiwgMHg0MCwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwYSwKLQkweDBjLCAweGVjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGY0LCAweDAxLCAweDAwLAotCTB4YzUsIDB4OTUsIDB4YTAsIDB4NDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDlkLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwKLQkweDg3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNywgMHg5NSwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRjLCAweDk1LCAweDI4LCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTUsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg3ZSwgMHg5NCwgMHgxZCwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHg5NSwgMHgyMiwgMHg1ZiwKLQkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDE1LCAweDYyLCAweDMxLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OTUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE0LCAweDJmLCAweDRjLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5NiwgMHgwMCwgMHg0OSwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDQ5LCAweDA2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAzLAotCTB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkzLCAweGMwLCAweDAxLCAweDAwLCAweGU5LCAweDk1LCAweGEwLCAweDU0LCAweDkzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAyLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGYyLCAweDk1LCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjOCwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDJlLCAweDA4LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjksIDB4OTUsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgyZSwgMHgwNSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDZmLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTYsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDM5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzMywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDNmLCAweGIzLCAweDAxLCAweDAwLCAweGVlLCAweDA1LCAweDAwLCAweDQwLAotCTB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDJkLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweGYxLCAweDkzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGE1LAotCTB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NWIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg0NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDU5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg1MywgMHhiMywgMHgwMSwgMHgwMCwgMHgyYiwgMHg5NiwgMHhhMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDJiLCAweDk2LCAweGEyLCAweDUxLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDJjLCAweDk2LCAweDAwLCAweDQwLAotCTB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHg4OCwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHhhNiwKLQkweDNhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDlkLCAweDNiLCAweDliLCAweDAxLCAweDAwLAotCTB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwYSwgMHgwMCwgMHhhNiwgMHgxNCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAxLCAweDAwLCAweDhhLCAweDE1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAotCTB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWUsIDB4NTcsIDB4YjUsIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgyMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDQzLCAweDAwLCAweDRiLCAweDk2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgyMCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NywgMHgyMSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk5LCAweDJlLCAweDBhLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDk2LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAotCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4NDEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMiwgMHg5ZiwgMHgyMiwgMHg0MCwgMHg3YiwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhjNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweGM2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEyLCAweGM4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4NGQsCi0JMHg5YSwgMHhjYywgMHgwMSwgMHgwMCwgMHhiYiwgMHg5ZiwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGI5LCAweDlmLCAweGEyLCAweDQxLAotCTB4OWIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OWYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MiwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQyLCAweGNkLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhjMiwgMHg5ZiwgMHgwMCwgMHg0MywgMHhjYiwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDUwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGQyLCAweDlmLCAweDAwLCAweDQwLAotCTB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDRkLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4Y2EsIDB4OWYsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAotCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwKLQkweDQ1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDdiLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDgsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKLQkweDgxLCAweGM4LCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweGYyLCAweDkzLCAweDAwLCAweDAwLAotCTB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQ3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDVkLCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQwLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQl9LAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzcmN2dWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzcmN2dWNvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIzNTMxZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc3JjdnVjb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotI2RlZmluZSBPQVNJU19SQ1ZVQ09ERV9WRVJTX1NUUklORwkiMS4yIgotI2RlZmluZSBPQVNJU19SQ1ZVQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMDoyOCIKLQotc3RhdGljIHUzMiBPYXNpc1JjdlVDb2RlTGVuID0gNTEyOwotCi1zdGF0aWMgdTggT2FzaXNSY3ZVQ29kZVsyNTYwXSA9Ci17Ci0weDQ3LCAweDc1LCAweDAxLCAweDAwLCAweDA0LCAweGEwLCAweDEzLCAweDAxLCAweDAwLCAweDFjLCAweGI3LCAweDViLCAweDA5LAotMHgzMCwgMHgwMCwgMHhiNiwgMHg1ZiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgzYiwKLTB4NzgsIDB4M2EsIDB4MDAsIDB4MWMsIDB4YTIsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4MDEsIDB4NzAsCi0weDE4LCAweGFkLCAweDdiLCAweGYxLCAweGZmLCAweDFjLCAweGIzLCAweDdiLCAweGE5LCAweGFhLCAweDFlLCAweGI0LCAweDdiLAotMHgwMSwgMHgwYywgMHgxYywgMHhiNSwgMHg3YiwgMHgwZCwgMHgwNiwgMHgxYywgMHgwMCwgMHgwMCwgMHgzMCwgMHg2NCwgMHgwOCwKLTB4MGMsIDB4MzEsIDB4NWEsIDB4NzAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NWEsIDB4ODAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGUsCi0weDkwLCAweDA0LCAweDBjLCAweDMxLCAweDRhLCAweGEwLCAweDAwLCAweDA5LCAweDI1LCAweDU1LCAweGMwLCAweDA0LCAweDBjLAotMHgzMSwgMHg1MiwgMHhiMCwgMHgwMCwgMHhlOSwgMHgyNCwgMHg1NSwgMHhjMCwgMHgwNCwgMHhjYywgMHhiMywgMHgwMCwgMHgxYywKLTB4MWMsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDYsIDB4NTYsIDB4MzIsIDB4ZDQsIDB4MDgsIDB4MDcsIDB4OWQsCi0weDAwLCAweDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDEwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAotMHgwNiwgMHg1NiwgMHg1ZSwgMHhjMCwgMHgwNCwgMHhhMCwgMHgzMCwgMHg1NCwgMHgwMywgMHgwMCwgMHhhYywgMHgzMCwgMHg1NSwKLTB4MDMsIDB4MDAsIDB4Y2QsIDB4MDMsIDB4M2EsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NjAsCi0weDhlLCAweDMxLCAweDU0LCAweDA5LCAweDI5LCAweDI1LCAweDU1LCAweDAzLCAweDAwLCAweDgwLCAweDhlLCAweDMxLCAweDU0LAotMHgwOSwgMHg4YywgMHgzMCwgMHg5MSwgMHgwMCwgMHgwNCwgMHg0NywgMHgxYywgMHgwMSwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwKLTB4MzEsIDB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4NjUsIDB4YzAsIDB4MDQsCi0weDQ3LCAweDFjLCAweDU1LCAweDAzLCAweDAwLCAweDZjLCAweDMwLCAweDAxLCAweDAwLCAweDFjLCAweDRkLCAweDM0LCAweDAyLAotMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhjOCwKLTB4ODMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsCi0weDA0LCAweGEwLCAweDBmLCAweDMwLCAweDU0LCAweDA5LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDdiLCAweGZiLAotMHhmMiwgMHgwMCwgMHgxYywgMHhjYywgMHgzMywgMHgwZCwgMHgwMCwgMHgxYywgMHhiNCwgMHg3YiwgMHhmZCwgMHgwMywgMHgxYywKLTB4ODAsIDB4MGUsIDB4MzAsIDB4NTQsIDB4MDksIDB4ZTAsIDB4ZmIsIDB4MDUsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OGMsCi0weDAzLCAweDAwLCAweGIzLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweDAwLCAweDAwLCAweGVjLCAweDcwLCAweDA0LCAweDAwLAotMHgwMCwgMHhlYywgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MywgMHgwMCwgMHg2MSwgMHg3NiwgMHg4ZCwgMHhjMywKLTB4MDQsIDB4YzAsIDB4OGQsIDB4MzEsIDB4NTQsIDB4MDksIDB4ZTAsIDB4N2IsIDB4MDAsIDB4YzAsIDB4MWYsIDB4YTAsIDB4ZmQsCi0weGM1LCAweDAxLCAweDAwLCAweGNjLCAweDMzLCAweDA1LCAweDAwLCAweDFjLCAweGQ0LCAweDAzLCAweDAwLCAweDNjLCAweDFjLAotMHhkNCwgMHhkMywgMHgxYiwgMHgwMCwgMHgxYywgMHhjMCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg1YywKLTB4MTMsIDB4MDQsIDB4OGUsIDB4OGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NWIsIDB4ODAsIDB4NWUsIDB4MTMsIDB4MDQsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDk0LCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LAotMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhjMCwgMHgwMywgMHhmYywgMHg3ZiwgMHgxYywgMHhhMCwgMHgwMSwKLTB4YTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCi0weGMwLCAweDAzLCAweGZjLCAweDAzLCAweDFjLCAweGY1LCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDI2LCAweDdhLCAweGU2LAotMHgwNSwgMHgxYywgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhiMywgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhiNSwKLTB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4N2EsIDB4N2UsIDB4MDIsIDB4MDAsCi0weDFjLCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweGFmLCAweDAzLAotMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywKLTB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsIDB4M2QsIDB4YWEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YWMsCi0weDExLCAweDA0LCAweGQ0LCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweGI1LCAweDNlLCAweGIyLCAweDAxLCAweDAwLCAweDIwLAotMHhmYiwgMHhmZCwgMHhmZiwgMHgxZiwgMHg4MCwgMHgyYywgMHg2YywgMHgwMywgMHgwMCwgMHhiOSwgMHgzYSwgMHg5ZSwgMHgwMSwKLTB4MDAsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ZGIsIDB4ODMsCi0weDE2LCAweDAwLCAweDFjLCAweGM3LCAweDFkLCAweDIxLCAweGMxLCAweDA0LCAweGI5LCAweDNiLCAweDhkLCAweGMxLCAweDA0LAotMHg4YiwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHg2YiwgMHgyYywgMHgzNSwgMHhjMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwKLTB4MTEsIDB4MDAsIDB4Y2IsIDB4MmMsIDB4NzksIDB4YzEsIDB4MDQsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsCi0weDBmLCAweDMxLCAweDU0LCAweDA5LCAweDU0LCAweGQwLCAweDAyLCAweDAwLCAweDFjLCAweDQ5LCAweDI1LCAweGIxLCAweDAxLAotMHgwMCwgMHhhYiwgMHgyYywgMHg4MSwgMHhjMSwgMHgwNCwgMHhhNywgMHgxZCwgMHg1NSwgMHgwMywgMHgwMCwgMHhjYywgMHgzMywKLTB4MDksIDB4MDAsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsIDB4MDAsIDB4MWMsCi0weGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGFlLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLAotMHg1NCwgMHgwOSwgMHhkNCwgMHgwNywgMHhmYywgMHgwMywgMHgxYywgMHg5OSwgMHgzYSwgMHgwMiwgMHgwMCwgMHgxYywgMHhiYiwKLTB4MzgsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsCi0weDA0LCAweGRiLCAweDNiLCAweDdlLCAweDAwLCAweDFjLCAweGM3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweDI2LCAweDdhLAotMHhmYSwgMHgwNSwgMHgxYywgMHgyNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhiMywgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKLTB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsCi0weDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDUzLAotMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwNiwgMHgwMiwgMHgwMCwKLTB4MWMsIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4YWYsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsCi0weDMyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LAotMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwKLTB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4MDAsIDB4M2QsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsCi0weDAwLCAweDU4LCAweDEyLCAweDAwLCAweGNiLCAweDJjLCAweDAxLCAweDAwLCAweDFjLCAweDc1LCAweDNiLCAweDAyLCAweDAwLAotMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwNSwgMHgwMCwgMHgxYywgMHg2MCwgMHgyYywKLTB4MDAsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWMsIDB4YzksIDB4MDIsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCi0weDUzLCAweDA3LCAweDAyLCAweDAwLCAweDFjLCAweDQ2LCAweDdhLCAweGNhLCAweDA1LCAweDFjLCAweDdhLCAweDBlLCAweDMyLAotMHg1NCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgxOSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwNCwgMHg0NiwKLTB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsCi0weDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGIzLCAweDdiLAotMHgwMSwgMHhjMCwgMHgxZiwgMHg3NCwgMHgwZSwgMHgzMCwgMHg1NCwgMHgwOSwgMHhjMCwgMHgwMywgMHg5YywgMHgwMCwgMHgxYywKLTB4ODAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YWMsCi0weDEyLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGQ0LCAweGQzLCAweDJiLCAweDAwLCAweDFjLCAweGQ0LAotMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHg4MCwgMHg3NiwgMHg3ZCwgMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMiwKLTB4MDAsIDB4YTYsIDB4N2IsIDB4OTUsIDB4MDMsIDB4MTAsIDB4YzcsIDB4OWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MmMsCi0weDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDZjLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LAotMHhhYiwgMHgyZCwgMHhkOSwgMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHhiNSwgMHhjMiwgMHgwNCwgMHg4YiwgMHgyZCwgMHgwMSwKLTB4MDAsIDB4MWMsIDB4NjksIDB4MjUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTYsIDB4N2IsIDB4OTUsIDB4MDMsIDB4MTAsIDB4Y2IsCi0weDJmLCAweDA5LCAweDAwLCAweDFjLCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDQ4LCAweDAzLAotMHgwMCwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg0NiwgMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwKLTB4MzIsIDB4NTQsIDB4MDksIDB4NDAsIDB4ZmEsIDB4MTksIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDQsCi0weDQ2LCAweDdhLCAweGNhLCAweDA1LCAweDFjLCAweGI1LCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLAotMHg1NCwgMHgwOSwgMHg3MywgMHhlYywgMHgyYSwgMHgwMywgMHgwNCwgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4MjgsIDB4MDMsIDB4MDAsIDB4YzcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTMsCi0weDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGMwLCAweGQ3LCAweDIyLCAweDAwLCAweDFjLCAweDc1LCAweDU2LAotMHg3ZSwgMHgxMywgMHgwNCwgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHhlNywgMHgxYywgMHg0NSwgMHgwMywgMHgwNCwKLTB4ZTcsIDB4OWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTYsIDB4N2IsIDB4OTUsIDB4MDMsIDB4MTAsIDB4ODAsIDB4MmMsIDB4MDAsCi0weDAwLCAweDFjLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweGI5LAotMHg3YiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg4YywgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywKLTB4MWMsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDQsIDB4MWMsIDB4YzcsIDB4OWYsIDB4ODAsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsCi0weDhjLCAweGMzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLCAweDJmLCAweDBkLCAweDA0LCAweDFjLAotMHhjNywgMHg5ZiwgMHg4MCwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHg4YywgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwKLTB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDAsIDB4MWQsIDB4YTYsIDB4N2IsIDB4OTUsIDB4MDMsIDB4MWMsIDB4YzcsCi0weDljLCAweDhjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDhjLCAweDEzLCAweDA1LCAweDA3LCAweDFkLCAweDAxLCAweDAwLAotMHgxYywgMHhjMCwgMHgxZCwgMHhkYywgMHhkMywgMHgwOCwgMHgyNywgMHg5ZCwgMHhlNCwgMHgwMywgMHgwMCwgMHhhMCwgMHhlZSwKLTB4NDYsIDB4ZDQsIDB4MDAsIDB4ZmIsIDB4NzUsIDB4MDksIDB4MTQsIDB4MDQsIDB4MjAsIDB4N2IsIDB4MDYsIDB4MDAsIDB4MWMsCi0weGMwLCAweDFjLCAweDFjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGQzLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAotMHhmNCwgMHgwMCwgMHhjMCwgMHhlZiwgMHhmMiwgMHgwMCwgMHgxYywgMHgyMCwgMHgyNSwgMHg1YywgMHgxNCwgMHgwNCwgMHg2MCwKLTB4YjcsIDB4ZDIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MTUsIDB4MDAsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsCi0weDFjLCAweGNjLCAweDMzLCAweDA1LCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweDBjLCAweGM1LCAweDA0LCAweDYwLCAweGI3LAotMHgwZSwgMHgwNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywgMHgxNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1YywgMHhjNCwgMHgwNCwKLTB4YzAsIDB4MWQsIDB4OTgsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YzQsIDB4MDQsIDB4MDcsIDB4OWQsIDB4MDAsCi0weDAwLCAweDFjLCAweDFiLCAweDc0LCAweGZkLCAweGYzLCAweDA0LCAweGE2LCAweDdiLCAweGYxLCAweDAzLCAweDFjLCAweGEwLAotMHgwZiwgMHg2OSwgMHg1NCwgMHgwOSwgMHhlMCwgMHg3YiwgMHgwMCwgMHhmYywgMHgxZiwgMHgzOSwgMHg3ZiwgMHgwMiwgMHgwMCwKLTB4MWMsIDB4MDcsIDB4MWQsIDB4OWQsIDB4YzMsIDB4MDQsIDB4YTYsIDB4N2IsIDB4YWQsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsCi0weDY4LCAweGM0LCAweDA0LCAweGUwLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LAotMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxMCwgMHgxZCwgMHgwMCwgMHgwMCwgMHhhYywKLTB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsCi0weDJmLCAweDAxLCAweDE4LCAweDFkLCAweGM3LCAweDlmLCAweDAwLCAweDBiLCAweDFjLCAweDAwLCAweDAwLCAweGFjLCAweGMzLAotMHgwNCwgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjYywgMHhiMywKLTB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YWMsIDB4YzMsIDB4MDQsCi0weGEwLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGEwLCAweGVlLCAweGEyLCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLAotMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwOSwgMHgwNCwgMHgxYywgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4YWMsIDB4YzMsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsIDB4MDIsCi0weDFjLCAweDAwLCAweDAwLCAweDBjLCAweGM1LCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweDM0LCAweDA1LCAweGNjLCAweGIzLAotMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxNSwgMHgwMiwgMHgxYywgMHg0NywgMHg5ZCwgMHg1NCwgMHhjNCwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4NzgsIDB4NDQsIDB4MDAsIDB4ODAsIDB4MWQsIDB4N2MsIDB4NTQsIDB4MDQsIDB4ODcsIDB4MWQsIDB4OGQsCi0weDA0LCAweDAwLCAweGNlLCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweGVmLCAweDc2LCAweDlkLCAweGM0LCAweDA0LCAweGE0LAotMHg3NywgMHg4ZCwgMHgyNCwgMHgwOSwgMHhlNCwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHhjNCwgMHg3NiwgMHgwMSwgMHgwMCwKLTB4MWMsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NTQsIDB4MDQsIDB4ZDcsIDB4NzYsIDB4MDEsIDB4NTAsIDB4MTgsIDB4ZjYsIDB4NzYsCi0weDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotMHhjYywgMHgzMCwgMHg0NSwgMHhjNSwgMHgwNCwgMHhlYiwgMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwKLTB4MDAsIDB4MWMsIDB4YzAsIDB4NTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZjUsIDB4NzcsIDB4MjksIDB4YzUsIDB4MDQsIDB4ZTAsCi0weDMwLCAweGRjLCAweDA0LCAweDAwLCAweDAwLCAweDRjLCAweGIwLCAweDA0LCAweDAwLCAweDIwLCAweDRjLCAweGY0LCAweDA0LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwNCwgMHgwMCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywKLTB4MDksIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsCi0weGNjLCAweDMzLCAweDE5LCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLAotMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwZCwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwgMHgwNCwgMHhjYywKLTB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTEsIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsCi0weDA0LCAweDAwLCAweDdiLCAweDAwLCAweDgwLCAweDFjLCAweGFlLCAweDc3LCAweDQ1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLAotMHgwNCwgMHhjMCwgMHgwNCwgMHhkMywgMHg4YiwgMHgwMCwgMHhmYywgMHgxZiwgMHg2MCwgMHg3YSwgMHgzYywgMHgwMCwgMHgxYywKLTB4NjAsIDB4NGMsIDB4YzAsIDB4MDQsIDB4MDAsIDB4YzAsIDB4MmYsIDB4MjAsIDB4MDUsIDB4MWYsIDB4ZTAsIDB4MzAsIDB4YjAsCi0weDA0LCAweDAwLCAweDgwLCAweDI1LCAweGIwLCAweDA0LCAweDAwLCAweGI1LCAweDViLCAweGIxLCAweDA0LCAweDA0LCAweDY5LAotMHgyNiwgMHgwMSwgMHgwMCwgMHgxYywgMHg2YSwgMHgyYiwgMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgxZCwgMHgwMCwgMHgwMCwKLTB4MWMsIDB4YTksIDB4MjUsIDB4NDUsIDB4MDUsIDB4MDAsIDB4ZWUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWYsIDB4NzcsCi0weDAxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDI0LCAweDA0LCAweGI0LCAweDVmLCAweDAxLCAweDQwLCAweDE4LAotMHgwNywgMHg5ZCwgMHg0OCwgMHg1NSwgMHgwNCwgMHhiNywgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NiwgMHg3NiwgMHgwMSwKLTB4MDAsIDB4MWMsIDB4NDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4MzMsIDB4MDEsIDB4NjAsIDB4MTgsIDB4YTQsCi0weDJmLCAweDAxLCAweDYwLCAweDE4LCAweDY0LCAweDc3LCAweDAxLCAweDYwLCAweDE4LCAweDI0LCAweDc3LCAweDAxLCAweDYwLAotMHgxOCwgMHg0NCwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHg2NCwgMHg4OCwgMHgwMywgMHgwMCwgMHgxYywgMHhhNCwgMHgzZiwKLTB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4M2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTMsIDB4N2IsIDB4MDAsIDB4YzAsIDB4MWMsCi0weGQzLCAweGNmLCAweDFiLCAweDAwLCAweDFjLCAweDUzLCAweDRmLCAweDAyLCAweDAwLCAweDFjLCAweGRhLCAweGNmLCAweDAwLAotMHhjMCwgMHgxZiwgMHhkNSwgMHg1NywgMHgwZiwgMHgwMCwgMHgxYywgMHhkMywgMHhkMywgMHgzNywgMHgwMCwgMHgxYywgMHhkNCwKLTB4NTMsIDB4MGYsIDB4MDAsIDB4MWMsIDB4ZTAsIDB4MjksIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZjUsIDB4ZDUsIDB4YjAsIDB4MDUsCi0weDAwLCAweDAwLCAweDAwLCAweDljLCAweDU1LCAweDA0LCAweDc3LCAweDU2LCAweDAxLCAweDAwLCAweDFjLCAweDU2LCAweDUzLAotMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwKLTB4ZjUsIDB4NTUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YjQsIDB4NTUsIDB4MDQsIDB4NzcsIDB4NTYsIDB4MDEsCi0weDAwLCAweDFjLCAweDU2LCAweDUzLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDE4LCAweDAwLAotMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxMCwKLTB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsIDB4Y2IsIDB4MmYsCi0weDAxLCAweDIwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDI4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDAwLCAweDEwLAotMHg4OSwgMHgyNSwgMHg2MSwgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlYywgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwKLTB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsCi0weDAwLCAweDYwLCAweGMyLCAweDA0LCAweDAwLCAweDAwLCAweGVjLCAweGMyLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLAotMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHg0MCwgMHgxYywKLTB4NmMsIDB4YzAsIDB4MDQsIDB4NDAsIDB4MWMsIDB4OWMsIDB4YzAsIDB4MDQsIDB4YTcsIDB4NzcsIDB4NTUsIDB4YzMsIDB4MDQsCi0weDAwLCAweDAwLCAweGM0LCAweGMwLCAweDA0LCAweDI3LCAweDFkLCAweGYxLCAweGMwLCAweDA0LCAweDAwLCAweDAwLCAweDU0LAotMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKaW5kZXggYThlYTU5ZC4uY2NmNzYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaApAQCAtNDYsMzAgKzQ2LDEwIEBACiAjZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEwOjM3IgogI2RlZmluZSBPQVNJU19VQ09ERV9IT1NUSUZfSUQgIAkzCiAKLXN0YXRpYyBzMzIgT051bVNlY3Rpb25zID0gMHgyOwotc3RhdGljIHUzMiBPU2VjdGlvblNpemVbXSA9IHsKLQkweDAwMDA0MDAwLCAweDAwMDEwMDAwLAotfTsKLQotc3RhdGljIHUzMiBPU2VjdGlvblN0YXJ0W10gPSB7Ci0JMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKLX07Ci0KICNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCiAjZGVmaW5lIE1PSkFWRV9VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMjoyMiIKICNkZWZpbmUgTU9KQVZFX1VDT0RFX0hPU1RJRl9JRCAgCTMKIAotc3RhdGljIHMzMiBNTnVtU2VjdGlvbnMgPSAweDI7Ci1zdGF0aWMgdTMyIE1TZWN0aW9uU2l6ZVtdID0KLXsKLQkweDAwMDA4MDAwLCAweDAwMDEwMDAwLAotfTsKLQotc3RhdGljIHUzMiBNU2VjdGlvblN0YXJ0W10gPQotewotCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCi19OwotCiAjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCiAjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjE1Igogc3RhdGljIHUzMiBPYXNpc1JjdlVDb2RlTGVuID0gNTEyOwpAQCAtMjAxLDE3ICsxODEsNiBAQAogCiAjZGVmaW5lIFNMSUNfTUFYX0NBUkRTICAgICAgICAgICAgICAzMgogI2RlZmluZSBTTElDX01BWF9QT1JUUyAgICAgICAgICAgICAgNCAgICAgICAgLyogTWF4ICMgb2YgcG9ydHMgcGVyIGNhcmQgICAqLwotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0vKgotRHVtcCBidWZmZXIgc2l6ZQotCi1UaGlzIGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgbWF4IERNQSBzaXplIHRoZSBjYXJkIHN1cHBvcnRzLAotZ2l2ZW4gdGhlIGN1cnJlbnQgY29kZSBzdHJ1Y3R1cmUgaW4gdGhlIGhvc3QgYW5kIHVjb2RlLgotTW9qYXZlIHN1cHBvcnRzIDE2SywgT2FzaXMgc3VwcG9ydHMgMTZLLTEsIHNvCi1qdXN0IHNldCB0aGlzIGF0IDE1Sywgc2hvdWxkbnQgbWFrZSB0aGF0IG11Y2ggb2YgYSBkaWZmLgotKi8KLSNkZWZpbmUgRFVNUF9CVUZfU0laRSAgICAgICAgICAgICAgIDB4M0MwMAotI2VuZGlmCiAKIAogc3RydWN0IG1jYXN0X2FkZHJlc3MgewpAQCAtMzY3LDMwICszMzYsNiBAQAogICAgIHUzMiAgICAgICAgICAgICBtYXhfaXNyX3htaXRzOwogICAgIHUzMiAgICAgICAgICAgICByY3ZfaW50ZXJydXB0X3lpZWxkczsKICAgICB1MzIgICAgICAgICAgICAgdHhfcGFja2V0czsKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotICAgIHUzMiAgICAgICAgICAgICBkdW1wc3RhdHVzOyAgICAgICAgICAgLyogUmVzdWx0IG9mIGR1bXAgVVBSICovCi0gICAgdm9pZCAqY21kYnVmZmVyOwotCi0gICAgdWxvbmcgICAgICAgICAgICAgICBjbWRidWZmZXJfcGh5czsKLSAgICB1MzIgICAgICAgICAgICAgY21kYnVmZmVyX3BoeXNsOwotICAgIHUzMiAgICAgICAgICAgICBjbWRidWZmZXJfcGh5c2g7Ci0KLSAgICB1MzIgICAgICAgICAgICAgZHVtcF9jb3VudDsKLSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmR1bXBfdGFza19pZDsKLSAgICB1MzIgICAgICAgICAgICAgZHVtcF93YWl0X2NvdW50OwotICAgIHVpbnQgICAgICAgICAgICAgICAgZHVtcHRocmVhZF9ydW5uaW5nOyAvKiBoYXMgYSBkdW1wIHRocmVhZCBiZWVuIGluaXQnZCAgKi8KLSAgICB1aW50ICAgICAgICAgICAgICAgIGR1bXBfcmVxdWVzdGVkOyAgICAgLyogMCBubywgMSA9IHJlcXN0ZCAyPWN1cnIgMz1kb25lICovCi0gICAgdTMyICAgICAgICAgICAgIGR1bXB0aW1lX3N0YXJ0OwotICAgIHUzMiAgICAgICAgICAgICBkdW1wdGltZV9jb21wbGV0ZTsKLSAgICB1MzIgICAgICAgICAgICAgZHVtcHRpbWVfZGVsdGE7Ci0gICAgdm9pZCAqZHVtcGJ1ZmZlcjsKLSAgICB1bG9uZyAgICAgICAgICAgICAgIGR1bXBidWZmZXJfcGh5czsKLSAgICB1MzIgICAgICAgICAgICAgZHVtcGJ1ZmZlcl9waHlzbDsKLSAgICB1MzIgICAgICAgICAgICAgZHVtcGJ1ZmZlcl9waHlzaDsKLSAgICB3YWl0X3F1ZXVlX2hlYWRfdCAgIGR1bXBfd3E7Ci0gICAgc3RydWN0IGZpbGUgICAgICAgICpkdW1waGFuZGxlOwotICAgIG1tX3NlZ21lbnRfdCAgICAgICAgZHVtcGZpbGVfZnM7Ci0jZW5kaWYKICAgICB1MzIgICAgICAgICAgICAgZGVidWdfaXg7CiAgICAgdXNob3J0ICAgICAgICAgICAgICByZWdfdHlwZVszMl07CiAgICAgdXNob3J0ICAgICAgICAgICAgICByZWdfb2Zmc2V0WzMyXTsKQEAgLTUxNiw4ICs0NjEsNiBAQAogICAgIHVpbnQgICAgICAgICAgICAgICAgdXByX2J1c3k7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICBwaW5ndGltZXI7CiAgICAgdTMyICAgICAgICAgICAgIHBpbmd0aW1lcnNldDsKLSAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgIHN0YXRzdGltZXI7Ci0gICAgdTMyICAgICAgICAgICAgIHN0YXRzdGltZXJzZXQ7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICBsb2FkdGltZXI7CiAgICAgdTMyICAgICAgICAgICAgIGxvYWR0aW1lcnNldDsKICAgICBzdHJ1Y3QgZGVudHJ5ICAgICAgKmRlYnVnZnNfZW50cnk7CkBAIC01NzAsMjUgKzUxMyw2IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiB9OwogCi0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19EVU1QX1JFUVVFU1RFRCAgICAgIDEKLSNkZWZpbmUgU0xJQ19EVU1QX0lOX1BST0dSRVNTICAgIDIKLSNkZWZpbmUgU0xJQ19EVU1QX0RPTkUgICAgICAgICAgIDMKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBNaWNyb2NvZGUgY3Jhc2ggaW5mb3JtYXRpb24gc3RydWN0dXJlLiAgVGhpcwotICogc3RydWN0dXJlIGlzIHdyaXR0ZW4gb3V0IHRvIHRoZSBjYXJkJ3MgU1JBTSB3aGVuIHRoZSBtaWNyb2NvZGUgcGFuaWMncy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBzbGljX2NyYXNoX2luZm8gewotICAgIHVzaG9ydCAgY3B1X2lkOwotICAgIHVzaG9ydCAgY3Jhc2hfcGM7Ci19OwotCi0jZGVmaW5lIENSQVNIX0lORk9fT0ZGU0VUICAgMHgxNTVDCi0KLSNlbmRpZgogCiAjZGVmaW5lIFVQREFURV9TVEFUUyhsYXJnZXN0YXQsIG5ld3N0YXQsIG9sZHN0YXQpICAgICAgICAgICAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTYwNSwxMSArNTI5LDExIEBACiAKICNkZWZpbmUgRVRIRVJfRVFfQUREUihfQWRkckEsIF9BZGRyQiwgX1Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9SZXN1bHQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKLQlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKQEAgLTYyMiw4ICs1NDYsOCBAQAogI2RlZmluZSAgIFNMSUNfR0VUX0FERFJfSElHSChfYWRkcikgICh1MzIpMAogI2VuZGlmCiAKLSNkZWZpbmUgRkxVU0ggICAgICAgVFJVRQotI2RlZmluZSBET05UX0ZMVVNIICBGQUxTRQorI2RlZmluZSBGTFVTSAkJdHJ1ZQorI2RlZmluZSBET05UX0ZMVVNICWZhbHNlCiAKICNkZWZpbmUgU0lPQ1NMSUNEVU1QQ0FSRCAgICAgICAgIChTSU9DREVWUFJJVkFURSs5KQogI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgKFNJT0NERVZQUklWQVRFKzEwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY19vcy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY19vcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmM2Nzg0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNfb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgotICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZwotICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEZJTEVOQU1FOiBzbGljX29zLmgKLSAqCi0gKiBUaGVzZSBhcmUgdGhlIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zIHJlcXVpcmVkIGZvciB0aGUgU0xJQ09TUwotICogZHJpdmVyLCB3aGljaCBzaG91bGQgYWxsb3cgZm9yIGdyZWF0ZXIgcG9ydGFiaWxpdHkgdG8gb3RoZXIgT1Nlcy4KLSAqLwotI2lmbmRlZiBfU0xJQ19PU19TUEVDSUZJQ19IXwotI2RlZmluZSBfU0xJQ19PU19TUEVDSUZJQ19IXwotCi0jZGVmaW5lIEZBTFNFICAgICAgICAgICAgICAgKDApCi0jZGVmaW5lIFRSVUUgICAgICAgICAgICAgICAgKDEpCi0KLSNkZWZpbmUgU0xJQ19TRUNTX1RPX0pJRkZTKHgpICAoKHgpICogSFopCi0jZGVmaW5lIFNMSUNfTVNfVE9fSklGRklFUyh4KSAgKFNMSUNfU0VDU19UT19KSUZGUygoeCkpIC8gMTAwMCkKLQotI2lmZGVmIERFQlVHX1JFR0lTVEVSX1RSQUNFCi0jZGVmaW5lIFdSSVRFX1JFRyhyZWcsIHZhbHVlLCBmbHVzaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ190eXBlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IDA7ICAgXAotCQlhZGFwdGVyLT5jYXJkLT5yZWdfb2Zmc2V0W2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IFwKLQkJKCh1bnNpZ25lZCBjaGFyICopKCZyZWcpKSAtIFwKLQkJKCh1bnNpZ25lZCBjaGFyICopYWRhcHRlci0+c2xpY19yZWdzKTsgXAotCQlhZGFwdGVyLT5jYXJkLT5yZWdfdmFsdWVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXgrK10gPSB2YWx1ZTsgIFwKLQkJaWYgKGFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID09IDMyKSBcCi0JCQlhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkJc2xpY19yZWczMl93cml0ZSgoJnJlZyksICh2YWx1ZSksIChmbHVzaCkpOyAgICAgICAgICAgIFwKLQl9Ci0jZGVmaW5lIFdSSVRFX1JFRzY0KGEsIHJlZywgdmFsdWUsIHJlZ2gsIHZhbGgsIGZsdXNoKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ190eXBlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IDE7ICAgICAgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ19vZmZzZXRbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gXAotCQkoKHVuc2lnbmVkIGNoYXIgKikoJnJlZykpIC0gXAotCQkoKHVuc2lnbmVkIGNoYXIgKilhZGFwdGVyLT5zbGljX3JlZ3MpOyBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ192YWx1ZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSB2YWx1ZTsgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ192YWx1ZWhbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXgrK10gPSB2YWxoOyAgXAotCQlpZiAoYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPT0gMzIpIFwKLQkJCWFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgXAotCQlzbGljX3JlZzY0X3dyaXRlKChhKSwgKCZyZWcpLCAodmFsdWUpLCAoJnJlZ2gpLCAodmFsaCksIFwKLQkJCQkoZmx1c2gpKTtcCi0JfQotI2Vsc2UKLSNkZWZpbmUgV1JJVEVfUkVHKHJlZywgdmFsdWUsIGZsdXNoKSBcCi0Jc2xpY19yZWczMl93cml0ZSgoJnJlZyksICh2YWx1ZSksIChmbHVzaCkpCi0jZGVmaW5lIFdSSVRFX1JFRzY0KGEsIHJlZywgdmFsdWUsIHJlZ2gsIHZhbGgsIGZsdXNoKSBcCi0Jc2xpY19yZWc2NF93cml0ZSgoYSksICgmcmVnKSwgKHZhbHVlKSwgKCZyZWdoKSwgKHZhbGgpLCAoZmx1c2gpKQotI2VuZGlmCi0KLSNlbmRpZiAgLyogX1NMSUNfT1NfU1BFQ0lGSUNfSF8gICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNidWlsZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2J1aWxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMDVlMDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2J1aWxkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCi0gKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCi0gKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRklMRU5BTUU6IHNsaWNidWlsZC5oCi0gKgotICogVGhlIGZvbGxvd2luZyBjb250YWlucyB0aGUgY29tcGlsZXIgZGlyZWN0aXZlIHN3aXRjaGVzIHVzZWQgZm9yCi0gKiBkaWZmZXJlbnQgU0xJQyBidWlsZCBvcHRpb25zLiAgVGhleSBjYW4gYWxsIGJlIHNldCBpbiB0aGUgTWFrZWZpbGUKLSAqIGJ1dCB0aGUgZGVmYXVsdHMgYXJlIGRlZmluZWQgaGVyZS4KLSAqLwotI2lmbmRlZiBfU0xJQ19CVUlMRF9IXwotI2RlZmluZSBfU0xJQ19CVUlMRF9IXwotCi0jaWZuZGVmIFNMSUNfUFJPRFVDVElPTl9CVUlMRAotI2RlZmluZSBTTElDX1BST0RVQ1RJT05fQlVJTEQJCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19GQUlMVVJFX1JFU0VUCi0jZGVmaW5lIFNMSUNfRkFJTFVSRV9SRVNFVAkJCTEKLSNlbmRpZgotI2RlZmluZSBEQkcgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2lmbmRlZiBTTElDX0FTU0VSVF9FTkFCTEVECi0jZGVmaW5lIFNMSUNfQVNTRVJUX0VOQUJMRUQJCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19NQ0FTVF9FTkFCTEVECi0jZGVmaW5lIFNMSUNfTUNBU1RfRU5BQkxFRAkJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECi0jZGVmaW5lIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQJCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAotI2RlZmluZSBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECQkwCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAotI2RlZmluZSBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAkJMQotI2VuZGlmCi0jaWZuZGVmIEFUS19ERUJVRwotI2RlZmluZSBBVEtfREVCVUcJCQkJMQotI2VuZGlmCi0jaWZuZGVmIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECi0jZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECQkwCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAotI2RlZmluZSBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCQkxCi0jZW5kaWYKLSNpZm5kZWYgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMKLSNkZWZpbmUgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0KLSNkZWZpbmUgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJCTAKLSNlbmRpZgotI2lmbmRlZiBTVEFUU19USU1FUl9JTlRFUlZBTAotI2RlZmluZSBTVEFUU19USU1FUl9JTlRFUlZBTAkJCTIKLSNlbmRpZgotI2lmbmRlZiBQSU5HX1RJTUVSX0lOVEVSVkFMCi0jZGVmaW5lIFBJTkdfVElNRVJfSU5URVJWQUwJCQkxCi0jZW5kaWYKLQotI2VuZGlmICAgLyogX1NMSUNfQlVJTERfSF8gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NGU0NGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2RiZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KLSAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKLSAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBGSUxFTkFNRTogc2xpY2RiZy5oCi0gKgotICogQWxsIGRlYnVnIGFuZCBhc3NlcnRpb24tYmFzZWQgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyBhcmUgaW5jbHVkZWQKLSAqIGluIHRoaXMgZmlsZSBmb3IgdGhlIFNMSUNPU1MgZHJpdmVyLgotICovCi0jaWZuZGVmIF9TTElDX0RFQlVHX0hfCi0jZGVmaW5lIF9TTElDX0RFQlVHX0hfCi0KLSNpZmRlZiBTTElDX0RFRkFVTFRfTE9HX0xFVkVMCi0jZWxzZQotI2RlZmluZSBTTElDTEVWRUwgICBLRVJOX0RFQlVHCi0jZW5kaWYKLSNkZWZpbmUgU0xJQ19ESVNQTEFZICAgICAgICAgICAgICBwcmludGsKLSNkZWZpbmUgREJHX0VSUk9SKG4sIGFyZ3MuLi4pICAgU0xJQ19ESVNQTEFZKEtFUk5fRU1FUkcgbiwgIyNhcmdzKQotCi0jZGVmaW5lIFNMSUNfREVCVUdfTUVTU0FHRSAxCi0jaWYgU0xJQ19ERUJVR19NRVNTQUdFCi0vKiNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKSAgICAgIFNMSUNfRElTUExBWShTTElDTEVWRUwgbiwgIyNhcmdzKSovCi0jZGVmaW5lIERCR19NU0cobiwgYXJncy4uLikKLSNlbHNlCi0jZGVmaW5lIERCR19NU0cobiwgYXJncy4uLikKLSNlbmRpZgotCi0jaWZkZWYgQVNTRVJUCi0jdW5kZWYgQVNTRVJUCi0jZW5kaWYKLQotI2lmIFNMSUNfQVNTRVJUX0VOQUJMRUQKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIFZBTElEX0FERFJFU1MocCkgICgxKQotI2Vsc2UKLSNkZWZpbmUgVkFMSURfQUREUkVTUyhwKSAgKCgodTMyKShwKSAmIDB4ODAwMDAwMDApIHx8ICgodTMyKShwKSA9PSAwKSkKLSNlbmRpZgotI2lmbmRlZiBBU1NFUlQKLSNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlEQkdfRVJST1IoIkFTU0VSVCgpIEZhaWx1cmU6IGZpbGUgJXMsIGZ1bmN0aW9uICVzICBsaW5lICVkXG4iLFwKLQkJX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXNsaWNfYXNzZXJ0X2ZhaWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLSNlbmRpZgotI2lmbmRlZiBBU1NFUlRNU0cKLSNkZWZpbmUgQVNTRVJUTVNHKGEsbXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlEQkdfRVJST1IoIkFTU0VSVCgpIEZhaWx1cmU6IGZpbGUgJXMsIGZ1bmN0aW9uICVzIlwKLQkJCSJsaW5lICVkOiAlc1xuIixcCi0JCQlfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fLCAobXNnKSk7ICAgICAgICAgICAgXAotCQlzbGljX2Fzc2VydF9mYWlsKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotI2VuZGlmCi0jZWxzZQotI2lmbmRlZiBBU1NFUlQKLSNkZWZpbmUgQVNTRVJUKGEpCi0jZW5kaWYKLSNpZm5kZWYgQVNTRVJUTVNHCi0jZGVmaW5lIEFTU0VSVE1TRyhhLCBtc2cpCi0jZW5kaWYKLSNlbmRpZiAvKiBTTElDX0FTU0VSVF9FTkFCTEVEICAqLwotCi0jZW5kaWYgIC8qICBfU0xJQ19ERUJVR19IXyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZHVtcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmE5YjQ0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotLyoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiBOTyBMSUNFTlNFIFRPIEFOWSBBTEFDUklURUNIIFBBVEVOVCBDTEFJTSBJUyBHUkFOVEVEIEJZIEFOWSBDT1BZUklHSFQKLSAqIExJQ0VOU0UgVE8gVEhJUyBPUiBPVEhFUiBTT0ZUV0FSRS4gVEhJUyBTT0ZUV0FSRSBNQVkgQkUgQ09WRVJFRCBCWQotICogQUxBQ1JJVEVDSCBQQVRFTlRTIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVS5TLiBQQVRFTlQgTk9TLiA2LDIyNiw2ODAsCi0gKiA2LDI0NywwNjAsIDYsMzM0LDE1MywgNiwzODksNDc5LCA2LDM5Myw0ODcsIDYsNDI3LDE3MSwgNiw0MjcsMTczCi0gKiBhbmQgNiw0MzQsNjIwLgotICogVEhJUyBTT0ZUV0FSRSBJUyBOT1QgU1VCSkVDVCBUTyBUSEUgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgKEdQTCkuCi0gKgotICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZAotICogZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUKLSAqIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyCi0gKiBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICovCi0jaWZuZGVmIF9TTElDX0RVTVBfSF8KLSNkZWZpbmUgX1NMSUNfRFVNUF9IXwotCi0jZGVmaW5lIERFQlVHX1NVQ0NFU1MgICAwCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFV0aWxpdHkgcHJvY2Vzc29yIHJlZ2lzdGVyIGxvY2F0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBVVElMSVRZX1JFU0VUICAgICAgIDB4MAotI2RlZmluZSBVVElMSVRZX0lTUF9BRERSICAgIDB4NCAgICAgLyogSW50ZXJydXB0IHN0YXR1cyBQb2ludGVyICovCi0jZGVmaW5lIFVUSUxJVFlfSVNSX0FERFIgICAgMHg4ICAgICAvKiBJbnRlcnJ1cHQgc3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFVUSUxJVFlfSUNSX0FERFIgICAgMHhjICAgICAvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBVVElMSVRZX0NQUl9BRERSICAgIDB4MTAgICAgLyogQ29tbWFuZCBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIFVUSUxJVFlfRFBSX0FERFIgICAgMHgxNCAgICAvKiBEYXRhIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVRJTElUWV9ETVBfVFJRICAgICAweDE4ICAgIC8qIER1bXAgcXVldWUgb250byBBTFUgZm9yIGFuYWx5c2VyICovCi0jZGVmaW5lIFVUSUxJVFlfVVBQX0FERFIgICAgMHgxYyAgICAvKiBCaXRzIDYzLTMyIG9mIGNtZC9kYXRhIHBvaW50ZXIgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogSU5JQyBzdGF0dXMgcmVnaXN0ZXIgYml0cwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU0xJQ19JU1JfQ0MgICAgICAgICAweDEwMDAwMDAwICAvKiBDb21tYW5kIGNvbXBsZXRlIC0gc3luY2hyb25vdXMgKi8KLSNkZWZpbmUgU0xJQ19JU1JfRVJSICAgICAgICAweDAxMDAwMDAwICAvKiBDb21tYW5kIEVycm9yIC0gc3luY2hyb25vdXMgKi8KLSNkZWZpbmUgU0xJQ19JU1JfQ01EX01BU0sgICAweDExMDAwMDAwICAvKiBDb21tYW5kIHN0YXR1cyBtYXNrICovCi0jZGVmaW5lIFNMSUNfSVNSX1RQSCAgICAgICAgMHgwMDA4MDAwMCAgLyogVHJhbnNtaXQgcHJvY2Vzc29yIGhhbHRlZCAtIGFzeW5jICovCi0jZGVmaW5lIFNMSUNfSVNSX1JQSCAgICAgICAgMHgwMDA0MDAwMCAgLyogUmVjZWl2ZSBwcm9jZXNzb3IgaGFsdGVkIC0gYXN5bmMgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogSU5JQyBDb250cm9sIHJlZ2lzdGVyIHZhbHVlcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU0xJQ19JQ1JfT0ZGICAgICAgICAwICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIGRpc2FibGVkICovCi0jZGVmaW5lIFNMSUNfSUNSX09OICAgICAgICAgMSAgICAgICAgICAgLyogSW50ZXJydXB0cyBlbmFibGVkICovCi0jZGVmaW5lIFNMSUNfSUNSX01BU0sgICAgICAgMiAgICAgICAgICAgLyogSW50ZXJydXB0cyBtYXNrZWQgKi8KLQotI2RlZmluZSBXUklURV9EUkVHKHJlZywgdmFsdWUsIGZsdXNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd3JpdGVsKCh2YWx1ZSksIChyZWcpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoZmx1c2gpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JbWIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29tbWFuZCBGb3JtYXQKLSAqCi0gKiBFYWNoIGNvbW1hbmQgY29udGFpbnMgYSBjb21tYW5kIGJ5dGUgd2hpY2ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotICoKLSAqICBiaXRzOiAgIDctMyAgICAgMiAgICAgICAxLTAKLSAqICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICBjb21tYW5kICAgICBBbHQuIFByb2MgICBQcm9jZXNzb3IKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTWFjcm8gdG8gY3JlYXRlIHRoZSBjb21tYW5kIGJ5dGUgZ2l2ZW4gdGhlIGNvbW1hbmQsIEFsdC4gUHJvYywgYW5kCi0gKiBQcm9jZXNzb3IgdmFsdWVzLiAgTm90ZSB0aGF0IHRoZSBtYWNybyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlcyBhcmUKLSAqIHByZXNoaWZ0ZWQuICBUaGF0IGlzLCB0aGUgdmFsdWVzIGZvciBhbHQuIHByb2MgYXJlIDAgZm9yIHRyYW5zbWl0IGFuZAotICogNCBmb3IgcmVjZWl2ZS4KLSAqLwotI2RlZmluZSBDT01NQU5EX0JZVEUoY29tbWFuZCwgYWx0X3Byb2MsIHByb2MpICgoY29tbWFuZCkgfCAoYWx0X3Byb2MpIHwgKHByb2MpKQotCi0vKgotICogQ29tbWFuZCB2YWx1ZXMKLSAqLwotI2RlZmluZSBDTURfSEFMVCAgICAgICAgMHgwICAgICAvKiBTZW5kIGEgaGFsdCB0byB0aGUgSU5JQyAqLwotI2RlZmluZSBDTURfUlVOICAgICAgICAgMHg4ICAgICAvKiBTdGFydCB0aGUgaGFsdGVkIElOSUMgKi8KLSNkZWZpbmUgQ01EX1NURVAgICAgICAgIDB4MTAgICAgLyogU2luZ2xlIHN0ZXAgdGhlIGluaWMgKi8KLSNkZWZpbmUgQ01EX0JSRUFLICAgICAgIDB4MTggICAgLyogU2V0IGEgYnJlYWtwb2ludCAtIDggYnl0ZSBjb21tYW5kICovCi0jZGVmaW5lIENNRF9SRVNFVF9CUkVBSyAweDIwICAgIC8qIFJlc2V0IGEgYnJlYWtwb2ludCAtIDggYnl0ZSBjbWQgKi8KLSNkZWZpbmUgQ01EX0RVTVAgICAgICAgIDB4MjggICAgLyogRHVtcCBJTklDIG1lbW9yeSAtIDggYnl0ZSBjb21tYW5kICovCi0jZGVmaW5lIENNRF9MT0FEICAgICAgICAweDMwICAgIC8qIExvYWQgSU5JQyBtZW1vcnkgLSA4IGJ5dGUgY29tbWFuZCAqLwotI2RlZmluZSBDTURfTUFQICAgICAgICAgMHgzOCAgICAvKiBNYXAgb3V0IGEgUk9NIGluc3RydWN0aW9uIC0gOCBCQyAqLwotI2RlZmluZSBDTURfQ0FNX09QUyAgICAgMHgzOCAgICAvKiBwZXJmb3JtIG9wcyBvbiBzcGVjaWZpYyBDQU0gKi8KLSNkZWZpbmUgQ01EX1hNVCAgICAgICAgIDB4NDAgICAgLyogVHJhbnNtaXQgZnJhbWUgKi8KLSNkZWZpbmUgQ01EX1JDViAgICAgICAgIDB4NDggICAgLyogUmVjZWl2ZSBmcmFtZSAqLwotCi0vKgotICogQWx0LiBQcm9jIHZhbHVlcwotICoKLSAqIFdoZW4gdGhlIHByb2MgdmFsdWUgaXMgc2V0IHRvIHRoZSB1dGlsaXR5IHByb2Nlc3NvciwgdGhlIEFsdC4gUHJvYwotICogc3BlY2lmaWVzIHdoaWNoIHByb2Nlc3NvciBoYW5kbGVzIHRoZSBkZWJ1Z2dpbmcuCi0gKi8KLSNkZWZpbmUgQUxUX1BST0NfVFJBTlNNSVQgICAweDAKLSNkZWZpbmUgQUxUX1BST0NfUkVDRUlWRSAgICAweDQKLQotLyoKLSAqIFByb2MgdmFsdWVzCi0gKi8KLSNkZWZpbmUgUFJPQ19JTlZBTElEICAgICAgICAweDAKLSNkZWZpbmUgUFJPQ19OT05FICAgICAgICAgICAweDAgIC8qIEdpZ2FiaXQgdXNlICovCi0jZGVmaW5lIFBST0NfVFJBTlNNSVQgICAgICAgMHgxCi0jZGVmaW5lIFBST0NfUkVDRUlWRSAgICAgICAgMHgyCi0jZGVmaW5lIFBST0NfVVRJTElUWSAgICAgICAgMHgzCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiA4IGJ5dGUgY29tbWFuZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogQnJlYWsgYW5kIFJlc2V0IEJyZWFrIGNvbW1hbmQgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBCUkVBSyB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgY29tbWFuZDsgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KLSAgICB1bnNpZ25lZCBjaGFyICAgICByZXN2ZDsKLSAgICB1c2hvcnQgICAgY291bnQ7ICAgICAgLyogTnVtYmVyIG9mIGV4ZWN1dGlvbnMgYmVmb3JlIGJyZWFrICovCi0gICAgdTMyICAgYWRkcjsgICAgICAgLyogQWRkcmVzcyBvZiBicmVhayBwb2ludCAqLwotfTsKLQotLyoKLSAqIER1bXAgYW5kIExvYWQgY29tbWFuZCBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IGR1bXBfY21kIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBjbWQ7ICAgICAgICAvKiBDb21tYW5kIHdvcmQgZGVmaW5lZCBhYm92ZSAqLwotICAgIHVuc2lnbmVkIGNoYXIgICAgIGRlc2M7ICAgICAgIC8qIERlc2NyaXB0b3IgdmFsdWVzIC0gZGVmaW5lZCBiZWxvdyAqLwotICAgIHVzaG9ydCAgICBjb3VudDsgICAgICAvKiBudW1iZXIgb2YgNCBieXRlIHdvcmRzIHRvIGJlIHRyYW5zZmVycmVkICovCi0gICAgdTMyICAgYWRkcjsgICAgICAgLyogc3RhcnQgYWRkcmVzcyBvZiBkdW1wIG9yIGxvYWQgKi8KLX07Ci0KLS8qCi0gKiBSZWNlaXZlIG9yIFRyYW5zbWl0IGEgZnJhbWUuCi0gKi8KLXN0cnVjdCBSQ1ZfT1JfWE1UX0ZSQU1FIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBjb21tYW5kOyAgICAvKiBDb21tYW5kIHdvcmQgZGVmaW5lZCBhYm92ZSAqLwotICAgIHVuc2lnbmVkIGNoYXIgICAgIE1hY0lkOyAgICAgIC8qIE1hYyBJRCBvZiBpbnRlcmZhY2UgLSB0cmFuc21pdCBvbmx5ICovCi0gICAgdXNob3J0ICAgIGNvdW50OyAgICAgIC8qIExlbmd0aCBvZiBmcmFtZSBpbiBieXRlcyAqLwotICAgIHUzMiAgIHBhZDsgICAgICAgIC8qIG5vdCB1c2VkICovCi19OwotCi0vKgotICogVmFsdWVzIG9mIGRlc2MgZmllbGQgaW4gRFVNUF9PUl9MT0FEIHN0cnVjdHVyZQotICovCi0jZGVmaW5lIERFU0NfUkZJTEUgICAgICAgICAgMHgwICAgICAvKiBSZWdpc3RlciBmaWxlICovCi0jZGVmaW5lIERFU0NfU1JBTSAgICAgICAgICAgMHgxICAgICAvKiBTUkFNICovCi0jZGVmaW5lIERFU0NfRFJBTSAgICAgICAgICAgMHgyICAgICAvKiBEUkFNICovCi0jZGVmaW5lIERFU0NfUVVFVUUgICAgICAgICAgMHgzICAgICAvKiBxdWV1ZXMgKi8KLSNkZWZpbmUgREVTQ19SRUcgICAgICAgICAgICAweDQgICAgIC8qIEdlbmVyYWwgcmVnaXN0ZXJzIChwYywgc3RhdHVzLCBldGMpICovCi0jZGVmaW5lIERFU0NfU0VOU0UgICAgICAgICAgMHg1ICAgICAvKiBTZW5zZSByZWdpc3RlciAqLwotCi0vKiBEZXNjcmlwdG9yIGZpZWxkIGRlZmluaXRpb25zIGZvciBDTURfRFVNUF9DQU0gKi8KLSNkZWZpbmUgRFVNUF9DQU1fQSAgICAgICAgICAgICAgMAotI2RlZmluZSBEVU1QX0NBTV9CICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgLyogdW51c2VkIGF0IHByZXNlbnQgKi8KLSNkZWZpbmUgRFVNUF9DQU1fQyAgICAgICAgICAgICAgMgotI2RlZmluZSBEVU1QX0NBTV9EICAgICAgICAgICAgICAzCi0jZGVmaW5lIFNFQVJDSF9DQU1fQSAgICAgICAgICAgIDQKLSNkZWZpbmUgU0VBUkNIX0NBTV9DICAgICAgICAgICAgNQotCi0vKgotICogTWFwIGNvbW1hbmQgdG8gcmVwbGFjZSBhIGNvbW1hbmQgaW4gUk9NIHdpdGggYSBjb21tYW5kIGluIFdDUwotICovCi1zdHJ1Y3QgTUFQIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgY29tbWFuZDsgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KLSAgICB1bnNpZ25lZCBjaGFyICAgbm90X3VzZWRbM107Ci0gICAgdXNob3J0ICBtYXBfdG87ICAgICAvKiBJbnN0cnVjdGlvbiBhZGRyZXNzIGluIFdDUyAqLwotICAgIHVzaG9ydCAgbWFwX291dDsgICAgLyogSW5zdHJ1Y3Rpb24gYWRkcmVzcyBpbiBST00gKi8KLX07Ci0KLS8qCi0gKiBNaXNjIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgU0xJQ19NQVhfUVVFVUUgICAgICAgMzIgLyogVG90YWwgIyBvZiBxdWV1ZXMgb24gdGhlIElOSUMgKDAtMzEpKi8KLSNkZWZpbmUgU0xJQ180TUFYX1JFRyAgICAgICA1MTIgLyogVG90YWwgIyBvZiA0LXBvcnQgZmlsZS1yZWdpc3RlcnMgICAgKi8KLSNkZWZpbmUgU0xJQ18xTUFYX1JFRyAgICAgICAzODQgLyogVG90YWwgIyBvZiBmaWxlLXJlZ2lzdGVycyAgICAgICAgICAgKi8KLSNkZWZpbmUgU0xJQ19HQk1BWF9SRUcgICAgIDEwMjQgLyogVG90YWwgIyBvZiBHYml0IGZpbGUtcmVnaXN0ZXJzICAgICAgKi8KLSNkZWZpbmUgU0xJQ19OVU1fUkVHICAgICAgICAgMzIgLyogbm9uLWZpbGUtcmVnaXN0ZXJzID0gTlVNX1JFRyBpbiB0bS1zaW1iYS5oICovCi0jZGVmaW5lIFNMSUNfR0JfQ0FNQV9TWkUgICAgIDMyCi0jZGVmaW5lIFNMSUNfR0JfQ0FNQl9TWkUgICAgIDE2Ci0jZGVmaW5lIFNMSUNfR0JfQ0FNQUJfU1pFICAgIDMyCi0jZGVmaW5lIFNMSUNfR0JfQ0FNQ19TWkUgICAgIDE2Ci0jZGVmaW5lIFNMSUNfR0JfQ0FNRF9TWkUgICAgIDE2Ci0jZGVmaW5lIFNMSUNfR0JfQ0FNQ0RfU1pFICAgIDMyCi0KLS8qCi0gKiBDb3JlZHVtcCBoZWFkZXIgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBDT1JFX1EgewotICAgIHUzMiAgIHF1ZXVlT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIHF1ZXVlICovCi0gICAgdTMyICAgcXVldWVzaXplOyAgICAgICAgICAvKiBzaXplIG9mIHF1ZXVlICovCi19OwotCi0jZGVmaW5lIERSSVZFUl9OQU1FX1NJWkUgICAgMzIKLQotc3RydWN0IHNsaWNjb3JlX2hkciB7Ci0gICAgdW5zaWduZWQgY2hhciBkcml2ZXJfdmVyc2lvbltEUklWRVJfTkFNRV9TSVpFXTsgLyogRHJpdmVyIHZlcnNpb24gc3RyaW5nICovCi0gICAgdTMyICAgUmN2UmVnT2ZmOyAgICAgICAgICAvKiBPZmZzZXQgb2YgcmVjZWl2ZSByZWdpc3RlcnMgKi8KLSAgICB1MzIgICBSY3ZSZWdzaXplOyAgICAgICAgIC8qIHNpemUgb2YgcmVjZWl2ZSByZWdpc3RlcnMgKi8KLSAgICB1MzIgICBYbXRSZWdPZmY7ICAgICAgICAgIC8qIE9mZnNldCBvZiB0cmFuc21pdCByZWdpc3RlcnMgKi8KLSAgICB1MzIgICBYbXRSZWdzaXplOyAgICAgICAgIC8qIHNpemUgb2YgdHJhbnNtaXQgcmVnaXN0ZXJzICovCi0gICAgdTMyICAgRmlsZVJlZ09mZjsgICAgICAgICAvKiBPZmZzZXQgb2YgcmVnaXN0ZXIgZmlsZSAqLwotICAgIHUzMiAgIEZpbGVSZWdzaXplOyAgICAgICAgLyogc2l6ZSBvZiByZWdpc3RlciBmaWxlICovCi0gICAgdTMyICAgU3JhbU9mZjsgICAgICAgICAgICAvKiBPZmZzZXQgb2YgU3JhbSAqLwotICAgIHUzMiAgIFNyYW1zaXplOyAgICAgICAgICAgLyogc2l6ZSBvZiBTcmFtICovCi0gICAgdTMyICAgRHJhbU9mZjsgICAgICAgICAgICAvKiBPZmZzZXQgb2YgRHJhbSAqLwotICAgIHUzMiAgIERyYW1zaXplOyAgICAgICAgICAgLyogc2l6ZSBvZiBEcmFtICovCi0gICAgQ09SRV9RICAgIHF1ZXVlc1tTTElDX01BWF9RVUVVRV07IC8qIHNpemUgYW5kIG9mZnNldHMgb2YgcXVldWVzICovCi0gICAgdTMyICAgQ2FtQU1PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEEgY29udGVudHMgKi8KLSAgICB1MzIgICBDYW1BU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEEgKi8KLSAgICB1MzIgICBDYW1CTU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gQiBjb250ZW50cyAqLwotICAgIHUzMiAgIENhbUJTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gQiAqLwotICAgIHUzMiAgIENhbUNNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBDIGNvbnRlbnRzICovCi0gICAgdTMyICAgQ2FtQ1NpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBDICovCi0gICAgdTMyICAgQ2FtRE1PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEQgY29udGVudHMgKi8KLSAgICB1MzIgICBDYW1EU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEQgKi8KLX07Ci0KLS8qCi0gKiBkZWZpbml0aW9ucyBuZWVkZWQgZm9yIG91ciBrZXJuZWwtbW9kZSBnZGIgc3R1Yi4KLSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRGVmaW5pdGlvbnMgJiBUeXBlZGVmcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBCVUZNQVggICAgICAweDIwMDAwIC8qIDEyOGsgLSBzaXplIG9mIGlucHV0L291dHB1dCBidWZmZXIgKi8KLSNkZWZpbmUgQlVGTUFYUDIgICAgNSAgICAgICAvKiAyKio1ICgzMikgNEsgcGFnZXMgKi8KLQotI2RlZmluZSBJT0NUTF9TSU1CQV9CUkVBSyAgICAgICAgICAgX0lPVygncycsIDAsIHVuc2lnbmVkIGxvbmcpCi0vKiAjZGVmaW5lIElPQ1RMX1NJTUJBX0lOSVQgICAgICAgICAgICBfSU9XKCdzJywgMSwgdW5zaWduZWQgbG9uZykgKi8KLSNkZWZpbmUgSU9DVExfU0lNQkFfS0lMTF9UR1RfUFJPQyAgIF9JT1coJ3MnLCAyLCB1bnNpZ25lZCBsb25nKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBHbG9iYWwgdmFyaWFibGVzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFRIUkVBRFJFQ0VJVkUgICAxICAgLyogYml0IDAgb2YgU3RvcHBlZFRocmVhZHMgKi8KLSNkZWZpbmUgVEhSRUFEVFJBTlNNSVQgIDIgICAvKiBiaXQgMSBvZiBTdG9wcGVkVGhyZWFkcyAqLwotI2RlZmluZSBUSFJFQURCT1RIICAgICAgMyAgIC8qIGJpdCAwIGFuZCAxLi4gKi8KLQotI2VuZGlmICAvKiAgX1NMSUNfRFVNUF9IICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaAppbmRleCBkMDNlOTBiLi42Mjc1ZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaApAQCAtNDEsMzAwICs0MSwyODYgQEAKICNpZm5kZWYgX19TTElDSFdfSF9fCiAjZGVmaW5lIF9fU0xJQ0hXX0hfXwogCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSCAgICAweDEzOUEKLSNkZWZpbmUgU0xJQ18xR0JfREVWSUNFX0lEICAgICAgICAgIDB4MDAwNQotI2RlZmluZSBTTElDXzJHQl9ERVZJQ0VfSUQgICAgICAgICAgMHgwMDA3ICAvKk9hc2lzIERldmljZSBJRCAqLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMQUNSSVRFQ0gJMHgxMzlBCisjZGVmaW5lIFNMSUNfMUdCX0RFVklDRV9JRAkJMHgwMDA1CisjZGVmaW5lIFNMSUNfMkdCX0RFVklDRV9JRAkJMHgwMDA3CS8qIE9hc2lzIERldmljZSBJRCAqLwogCi0jZGVmaW5lIFNMSUNfMUdCX0NJQ0FEQV9TVUJTWVNfSUQgICAweDAwMDgKKyNkZWZpbmUgU0xJQ18xR0JfQ0lDQURBX1NVQlNZU19JRAkweDAwMDgKIAotI2RlZmluZSBTTElDX05CUl9NQUNTICAgICAgNAorI2RlZmluZSBTTElDX05CUl9NQUNTCQk0CiAKLSNkZWZpbmUgU0xJQ19SQ1ZCVUZfU0laRSAgICAgICAgMjA0OAotI2RlZmluZSBTTElDX1JDVkJVRl9IRUFEU0laRSAgICAzNAotI2RlZmluZSBTTElDX1JDVkJVRl9UQUlMU0laRSAgICAwCi0jZGVmaW5lIFNMSUNfUkNWQlVGX0RBVEFTSVpFICAgIChTTElDX1JDVkJVRl9TSVpFIC0gKFNMSUNfUkNWQlVGX0hFQURTSVpFICtcCi0JCQkJCVNMSUNfUkNWQlVGX1RBSUxTSVpFKSkKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfU0laRQkyMDQ4CisjZGVmaW5lIFNMSUNfUkNWQlVGX0hFQURTSVpFCTM0CisjZGVmaW5lIFNMSUNfUkNWQlVGX1RBSUxTSVpFCTAKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfREFUQVNJWkUJKFNMSUNfUkNWQlVGX1NJWkUgLQkJXAorCQkJCSAoU0xJQ19SQ1ZCVUZfSEVBRFNJWkUgKwlcCisJCQkJICBTTElDX1JDVkJVRl9UQUlMU0laRSkpCiAKLSNkZWZpbmUgVkdCU1RBVF9YUEVSUiAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBWR0JTVEFUX1hFUlJTSEZUICAgICAgICAyNQotI2RlZmluZSBWR0JTVEFUX1hDU0VSUiAgICAgICAgICAweDIzCi0jZGVmaW5lIFZHQlNUQVRfWFVGTE9XICAgICAgICAgIDB4MjIKLSNkZWZpbmUgVkdCU1RBVF9YSExFTiAgICAgICAgICAgMHgyMAotI2RlZmluZSBWR0JTVEFUX05FVEVSUiAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFZHQlNUQVRfTkVSUlNIRlQgICAgICAgIDE2Ci0jZGVmaW5lIFZHQlNUQVRfTkVSUk1TSyAgICAgICAgIDB4MWZmCi0jZGVmaW5lIFZHQlNUQVRfTkNTRVJSICAgICAgICAgIDB4MTAzCi0jZGVmaW5lIFZHQlNUQVRfTlVGTE9XICAgICAgICAgIDB4MTAyCi0jZGVmaW5lIFZHQlNUQVRfTkhMRU4gICAgICAgICAgIDB4MTAwCi0jZGVmaW5lIFZHQlNUQVRfTE5LRVJSICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgVkdCU1RBVF9MRVJSTVNLICAgICAgICAgMHhmZgotI2RlZmluZSBWR0JTVEFUX0xERUFSTFkgICAgICAgICAweDg2Ci0jZGVmaW5lIFZHQlNUQVRfTEJPRkxPICAgICAgICAgIDB4ODUKLSNkZWZpbmUgVkdCU1RBVF9MQ09ERVJSICAgICAgICAgMHg4NAotI2RlZmluZSBWR0JTVEFUX0xEQkxOQkwgICAgICAgICAweDgzCi0jZGVmaW5lIFZHQlNUQVRfTENSQ0VSUiAgICAgICAgIDB4ODIKLSNkZWZpbmUgVkdCU1RBVF9MT0ZMTyAgICAgICAgICAgMHg4MQotI2RlZmluZSBWR0JTVEFUX0xVRkxPICAgICAgICAgICAweDgwCi0jZGVmaW5lIElSSEREUl9GTEVOX01TSyAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgSVJIRERSX1NWQUxJRCAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBJUkhERFJfRVJSICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRfODAyT0UgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVF9UUE9GTE8gICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBWUkhTVEFUQl84MDJVRSAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX1JDVkUgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfQlVGRiAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9DQVJSRSAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0xPTkdFICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfUFJFQSAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9DUkMgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0RSQkwgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfQ09ERSAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9UUENTVU0gICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX1RQSExFTiAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfSVBDU1VNICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBWUkhTVEFUQl9JUExFUlIgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0lQSEVSUiAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgU0xJQ19NQVg2NF9CQ05UICAgICAgICAgMjMKLSNkZWZpbmUgU0xJQ19NQVgzMl9CQ05UICAgICAgICAgMjYKLSNkZWZpbmUgSUhDTURfWE1UX1JFUSAgICAgICAgICAgMHgwMQotI2RlZmluZSBJSEZMR19JRlNIRlQgICAgICAgICAgICAyCi0jZGVmaW5lIFNMSUNfUlNQQlVGX1NJWkUgICAgICAgIDMyCisjZGVmaW5lIFZHQlNUQVRfWFBFUlIJCTB4NDAwMDAwMDAKKyNkZWZpbmUgVkdCU1RBVF9YRVJSU0hGVAkyNQorI2RlZmluZSBWR0JTVEFUX1hDU0VSUgkJMHgyMworI2RlZmluZSBWR0JTVEFUX1hVRkxPVwkJMHgyMgorI2RlZmluZSBWR0JTVEFUX1hITEVOCQkweDIwCisjZGVmaW5lIFZHQlNUQVRfTkVURVJSCQkweDAxMDAwMDAwCisjZGVmaW5lIFZHQlNUQVRfTkVSUlNIRlQJMTYKKyNkZWZpbmUgVkdCU1RBVF9ORVJSTVNLCQkweDFmZgorI2RlZmluZSBWR0JTVEFUX05DU0VSUgkJMHgxMDMKKyNkZWZpbmUgVkdCU1RBVF9OVUZMT1cJCTB4MTAyCisjZGVmaW5lIFZHQlNUQVRfTkhMRU4JCTB4MTAwCisjZGVmaW5lIFZHQlNUQVRfTE5LRVJSCQkweDAwMDAwMDgwCisjZGVmaW5lIFZHQlNUQVRfTEVSUk1TSwkJMHhmZgorI2RlZmluZSBWR0JTVEFUX0xERUFSTFkJCTB4ODYKKyNkZWZpbmUgVkdCU1RBVF9MQk9GTE8JCTB4ODUKKyNkZWZpbmUgVkdCU1RBVF9MQ09ERVJSCQkweDg0CisjZGVmaW5lIFZHQlNUQVRfTERCTE5CTAkJMHg4MworI2RlZmluZSBWR0JTVEFUX0xDUkNFUlIJCTB4ODIKKyNkZWZpbmUgVkdCU1RBVF9MT0ZMTwkJMHg4MQorI2RlZmluZSBWR0JTVEFUX0xVRkxPCQkweDgwCisjZGVmaW5lIElSSEREUl9GTEVOX01TSwkJMHgwMDAwZmZmZgorI2RlZmluZSBJUkhERFJfU1ZBTElECQkweDgwMDAwMDAwCisjZGVmaW5lIElSSEREUl9FUlIJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVF84MDJPRQkJMHg4MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUX1RQT0ZMTwkJMHgxMDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl84MDJVRQkJMHg4MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9SQ1ZFCQkweDQwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0JVRkYJCTB4MjAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQ0FSUkUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfTE9OR0UJCTB4MDIwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfUFJFQQkJMHgwMTAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9DUkMJCTB4MDA4MDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfRFJCTAkJMHgwMDQwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9DT0RFCQkweDAwMjAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX1RQQ1NVTQkJMHgwMDEwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9UUEhMRU4JCTB4MDAwODAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfSVBDU1VNCQkweDAwMDQwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0lQTEVSUgkJMHgwMDAyMDAwMAorI2RlZmluZSBWUkhTVEFUQl9JUEhFUlIJCTB4MDAwMTAwMDAKKyNkZWZpbmUgU0xJQ19NQVg2NF9CQ05UCQkyMworI2RlZmluZSBTTElDX01BWDMyX0JDTlQJCTI2CisjZGVmaW5lIElIQ01EX1hNVF9SRVEJCTB4MDEKKyNkZWZpbmUgSUhGTEdfSUZTSEZUCQkyCisjZGVmaW5lIFNMSUNfUlNQQlVGX1NJWkUJMzIKIAotI2RlZmluZSBTTElDX1JFU0VUX01BR0lDICAgICAgICAweERFQUQKLSNkZWZpbmUgSUNSX0lOVF9PRkYgICAgICAgICAgICAgMAotI2RlZmluZSBJQ1JfSU5UX09OICAgICAgICAgICAgICAxCi0jZGVmaW5lIElDUl9JTlRfTUFTSyAgICAgICAgICAgIDIKKyNkZWZpbmUgU0xJQ19SRVNFVF9NQUdJQwkweERFQUQKKyNkZWZpbmUgSUNSX0lOVF9PRkYJCTAKKyNkZWZpbmUgSUNSX0lOVF9PTgkJMQorI2RlZmluZSBJQ1JfSU5UX01BU0sJCTIKIAotI2RlZmluZSBJU1JfRVJSICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIElTUl9SQ1YgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgSVNSX0NNRCAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBJU1JfSU8gICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCi0jZGVmaW5lIElTUl9VUEMgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgSVNSX0xFVkVOVCAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBJU1JfUk1JU1MgICAgICAgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIElTUl9VUENFUlIgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgSVNSX1hEUk9QICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBJU1JfVVBDQlNZICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIElTUl9FVk1TSyAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgSVNSX1BJTkdNQVNLICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBJU1JfUElOR0RTTUFTSyAgICAgICAgICAweDAwNzEwMDAwCi0jZGVmaW5lIElTUl9VUENNQVNLICAgICAgICAgICAgIDB4MTEwMDAwMDAKLSNkZWZpbmUgU0xJQ19XQ1NfU1RBUlQgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBTTElDX1dDU19DT01QQVJFICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFNMSUNfUkNWV0NTX0JFR0lOICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgU0xJQ19SQ1ZXQ1NfRklOSVNIICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBTTElDX1BNX01BWFBBVFRFUk5TICAgICA2Ci0jZGVmaW5lIFNMSUNfUE1fUEFUVEVSTlNJWkUgICAgIDEyOAotI2RlZmluZSBTTElDX1BNQ0FQU19XQUtFT05MQU4gICAweDAwMDAwMDAxCi0jZGVmaW5lIE1JSUNSX1JFR19QQ1IgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgTUlJQ1JfUkVHXzQgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBNSUlDUl9SRUdfOSAgICAgICAgICAgICAweDAwMDkwMDAwCi0jZGVmaW5lIE1JSUNSX1JFR18xNiAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUENSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lIFBDUl9QT1dFUkRPV04gICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBQQ1JfU1BFRURfMTAwICAgICAgICAgICAweDIwMDAKLSNkZWZpbmUgUENSX1NQRUVEXzEwMDAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIFBDUl9BVVRPTkVHICAgICAgICAgICAgIDB4MTAwMAotI2RlZmluZSBQQ1JfQVVUT05FR19SU1QgICAgICAgICAweDAyMDAKLSNkZWZpbmUgUENSX0RVUExFWF9GVUxMICAgICAgICAgMHgwMTAwCi0jZGVmaW5lIFBTUl9MSU5LVVAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBJU1JfRVJSCQkJMHg4MDAwMDAwMAorI2RlZmluZSBJU1JfUkNWCQkJMHg0MDAwMDAwMAorI2RlZmluZSBJU1JfQ01ECQkJMHgyMDAwMDAwMAorI2RlZmluZSBJU1JfSU8JCQkweDYwMDAwMDAwCisjZGVmaW5lIElTUl9VUEMJCQkweDEwMDAwMDAwCisjZGVmaW5lIElTUl9MRVZFTlQJCTB4MDgwMDAwMDAKKyNkZWZpbmUgSVNSX1JNSVNTCQkweDAyMDAwMDAwCisjZGVmaW5lIElTUl9VUENFUlIJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSVNSX1hEUk9QCQkweDAwODAwMDAwCisjZGVmaW5lIElTUl9VUENCU1kJCTB4MDAwMjAwMDAKKyNkZWZpbmUgSVNSX0VWTVNLCQkweGZmZmYwMDAwCisjZGVmaW5lIElTUl9QSU5HTUFTSwkJMHgwMDcwMDAwMAorI2RlZmluZSBJU1JfUElOR0RTTUFTSwkJMHgwMDcxMDAwMAorI2RlZmluZSBJU1JfVVBDTUFTSwkJMHgxMTAwMDAwMAorI2RlZmluZSBTTElDX1dDU19TVEFSVAkJMHg4MDAwMDAwMAorI2RlZmluZSBTTElDX1dDU19DT01QQVJFCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfQkVHSU4JMHg0MDAwMDAwMAorI2RlZmluZSBTTElDX1JDVldDU19GSU5JU0gJMHg4MDAwMDAwMAorI2RlZmluZSBTTElDX1BNX01BWFBBVFRFUk5TCTYKKyNkZWZpbmUgU0xJQ19QTV9QQVRURVJOU0laRQkxMjgKKyNkZWZpbmUgU0xJQ19QTUNBUFNfV0FLRU9OTEFOCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJQ1JfUkVHX1BDUgkJMHgwMDAwMDAwMAorI2RlZmluZSBNSUlDUl9SRUdfNAkJMHgwMDA0MDAwMAorI2RlZmluZSBNSUlDUl9SRUdfOQkJMHgwMDA5MDAwMAorI2RlZmluZSBNSUlDUl9SRUdfMTYJCTB4MDAxMDAwMDAKKyNkZWZpbmUgUENSX1JFU0VUCQkweDgwMDAKKyNkZWZpbmUgUENSX1BPV0VSRE9XTgkJMHgwODAwCisjZGVmaW5lIFBDUl9TUEVFRF8xMDAJCTB4MjAwMAorI2RlZmluZSBQQ1JfU1BFRURfMTAwMAkJMHgwMDQwCisjZGVmaW5lIFBDUl9BVVRPTkVHCQkweDEwMDAKKyNkZWZpbmUgUENSX0FVVE9ORUdfUlNUCQkweDAyMDAKKyNkZWZpbmUgUENSX0RVUExFWF9GVUxMCQkweDAxMDAKKyNkZWZpbmUgUFNSX0xJTktVUAkJMHgwMDA0CiAKLSNkZWZpbmUgUEFSX0FEVjEwMEZEICAgICAgICAgICAgMHgwMTAwCi0jZGVmaW5lIFBBUl9BRFYxMDBIRCAgICAgICAgICAgIDB4MDA4MAotI2RlZmluZSBQQVJfQURWMTBGRCAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgUEFSX0FEVjEwSEQgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIFBBUl9BU1lNUEFVU0UgICAgICAgICAgIDB4MEMwMAotI2RlZmluZSBQQVJfODAyXzMgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgUEFSX0FEVjEwMEZECQkweDAxMDAKKyNkZWZpbmUgUEFSX0FEVjEwMEhECQkweDAwODAKKyNkZWZpbmUgUEFSX0FEVjEwRkQJCTB4MDA0MAorI2RlZmluZSBQQVJfQURWMTBIRAkJMHgwMDIwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0UJCTB4MEMwMAorI2RlZmluZSBQQVJfODAyXzMJCTB4MDAwMQogCi0jZGVmaW5lIFBBUl9BRFYxMDAwWEZEICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBQQVJfQURWMTAwMFhIRCAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgUEFSX0FTWU1QQVVTRV9GSUJFUiAgICAgMHgwMTgwCisjZGVmaW5lIFBBUl9BRFYxMDAwWEZECQkweDAwMjAKKyNkZWZpbmUgUEFSX0FEVjEwMDBYSEQJCTB4MDA0MAorI2RlZmluZSBQQVJfQVNZTVBBVVNFX0ZJQkVSCTB4MDE4MAogCi0jZGVmaW5lIFBHQ19BRFYxMDAwRkQgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBQR0NfQURWMTAwMEhEICAgICAgICAgICAweDAxMDAKLSNkZWZpbmUgU0VFUV9MSU5LRkFJTCAgICAgICAgICAgMHg0MDAwCi0jZGVmaW5lIFNFRVFfU1BFRUQgICAgICAgICAgICAgIDB4MDA4MAotI2RlZmluZSBTRUVRX0RVUExFWCAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgVERLX0RVUExFWCAgICAgICAgICAgICAgMHgwODAwCi0jZGVmaW5lIFRES19TUEVFRCAgICAgICAgICAgICAgIDB4MDQwMAotI2RlZmluZSBNUlZfUkVHMTZfWE9WRVJPTiAgICAgICAweDAwNjgKLSNkZWZpbmUgTVJWX1JFRzE2X1hPVkVST0ZGICAgICAgMHgwMDA4Ci0jZGVmaW5lIE1SVl9TUEVFRF8xMDAwICAgICAgICAgIDB4ODAwMAotI2RlZmluZSBNUlZfU1BFRURfMTAwICAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgTVJWX1NQRUVEXzEwICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIE1SVl9GVUxMRFVQTEVYICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBNUlZfTElOS1VQICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgUEdDX0FEVjEwMDBGRAkJMHgwMjAwCisjZGVmaW5lIFBHQ19BRFYxMDAwSEQJCTB4MDEwMAorI2RlZmluZSBTRUVRX0xJTktGQUlMCQkweDQwMDAKKyNkZWZpbmUgU0VFUV9TUEVFRAkJMHgwMDgwCisjZGVmaW5lIFNFRVFfRFVQTEVYCQkweDAwNDAKKyNkZWZpbmUgVERLX0RVUExFWAkJMHgwODAwCisjZGVmaW5lIFRES19TUEVFRAkJMHgwNDAwCisjZGVmaW5lIE1SVl9SRUcxNl9YT1ZFUk9OCTB4MDA2OAorI2RlZmluZSBNUlZfUkVHMTZfWE9WRVJPRkYJMHgwMDA4CisjZGVmaW5lIE1SVl9TUEVFRF8xMDAwCQkweDgwMDAKKyNkZWZpbmUgTVJWX1NQRUVEXzEwMAkJMHg0MDAwCisjZGVmaW5lIE1SVl9TUEVFRF8xMAkJMHgwMDAwCisjZGVmaW5lIE1SVl9GVUxMRFVQTEVYCQkweDIwMDAKKyNkZWZpbmUgTVJWX0xJTktVUAkJMHgwNDAwCiAKLSNkZWZpbmUgR0lHX0xJTktVUCAgICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEdJR19GVUxMRFVQTEVYICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBHSUdfU1BFRURfTUFTSyAgICAgICAgICAweDAwMEMKLSNkZWZpbmUgR0lHX1NQRUVEXzEwMDAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIEdJR19TUEVFRF8xMDAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBHSUdfU1BFRURfMTAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgR0lHX0xJTktVUAkJMHgwMDAxCisjZGVmaW5lIEdJR19GVUxMRFVQTEVYCQkweDAwMDIKKyNkZWZpbmUgR0lHX1NQRUVEX01BU0sJCTB4MDAwQworI2RlZmluZSBHSUdfU1BFRURfMTAwMAkJMHgwMDA4CisjZGVmaW5lIEdJR19TUEVFRF8xMDAJCTB4MDAwNAorI2RlZmluZSBHSUdfU1BFRURfMTAJCTB4MDAwMAogCi0jZGVmaW5lIE1DUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTUNSX0NSQ0VOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBNQ1JfRlVMTEQgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIE1DUl9QQUQgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgTUNSX1JFVFJZTEFURSAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBNQ1JfQk9MX1NISUZUICAgICAgICAgICAyMQotI2RlZmluZSBNQ1JfSVBHMV9TSElGVCAgICAgICAgICAxNAotI2RlZmluZSBNQ1JfSVBHMl9TSElGVCAgICAgICAgICA3Ci0jZGVmaW5lIE1DUl9JUEczX1NISUZUICAgICAgICAgIDAKLSNkZWZpbmUgR01DUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBHTUNSX0dCSVQgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIEdNQ1JfRlVMTEQgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgR01DUl9HQVBCQl9TSElGVCAgICAgICAgMTQKLSNkZWZpbmUgR01DUl9HQVBSMV9TSElGVCAgICAgICAgNwotI2RlZmluZSBHTUNSX0dBUFIyX1NISUZUICAgICAgICAwCi0jZGVmaW5lIEdNQ1JfR0FQQkJfMTAwMCAgICAgICAgIDB4NjAKLSNkZWZpbmUgR01DUl9HQVBSMV8xMDAwICAgICAgICAgMHgyQwotI2RlZmluZSBHTUNSX0dBUFIyXzEwMDAgICAgICAgICAweDQwCi0jZGVmaW5lIEdNQ1JfR0FQQkJfMTAwICAgICAgICAgIDB4NzAKLSNkZWZpbmUgR01DUl9HQVBSMV8xMDAgICAgICAgICAgMHgyQwotI2RlZmluZSBHTUNSX0dBUFIyXzEwMCAgICAgICAgICAweDQwCi0jZGVmaW5lIFhDUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgWENSX1hNVEVOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBYQ1JfUEFVU0VFTiAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFhDUl9MT0FEUk5HICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUkNSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBSQ1JfUkNWRU4gICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFJDUl9SQ1ZBTEwgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUkNSX1JDVkJBRCAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBSQ1JfQ1RMRU4gICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFJDUl9BRERSQUVOICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgR1hDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBHWENSX1hNVEVOICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEdYQ1JfUEFVU0VFTiAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgR1JDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBHUkNSX1JDVkVOICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEdSQ1JfUkNWQUxMICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgR1JDUl9SQ1ZCQUQgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBHUkNSX0NUTEVOICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIEdSQ1JfQUREUkFFTiAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgR1JDUl9IQVNIU0laRV9TSElGVCAgICAgMTcKLSNkZWZpbmUgR1JDUl9IQVNIU0laRSAgICAgICAgICAgMTQKKyNkZWZpbmUgTUNSX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lIE1DUl9DUkNFTgkJMHg0MDAwMDAwMAorI2RlZmluZSBNQ1JfRlVMTEQJCTB4MTAwMDAwMDAKKyNkZWZpbmUgTUNSX1BBRAkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgTUNSX1JFVFJZTEFURQkJMHgwMTAwMDAwMAorI2RlZmluZSBNQ1JfQk9MX1NISUZUCQkyMQorI2RlZmluZSBNQ1JfSVBHMV9TSElGVAkJMTQKKyNkZWZpbmUgTUNSX0lQRzJfU0hJRlQJCTcKKyNkZWZpbmUgTUNSX0lQRzNfU0hJRlQJCTAKKyNkZWZpbmUgR01DUl9SRVNFVAkJMHg4MDAwMDAwMAorI2RlZmluZSBHTUNSX0dCSVQJCTB4MjAwMDAwMDAKKyNkZWZpbmUgR01DUl9GVUxMRAkJMHgxMDAwMDAwMAorI2RlZmluZSBHTUNSX0dBUEJCX1NISUZUCTE0CisjZGVmaW5lIEdNQ1JfR0FQUjFfU0hJRlQJNworI2RlZmluZSBHTUNSX0dBUFIyX1NISUZUCTAKKyNkZWZpbmUgR01DUl9HQVBCQl8xMDAwCQkweDYwCisjZGVmaW5lIEdNQ1JfR0FQUjFfMTAwMAkJMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMDAJCTB4NDAKKyNkZWZpbmUgR01DUl9HQVBCQl8xMDAJCTB4NzAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAJCTB4MkMKKyNkZWZpbmUgR01DUl9HQVBSMl8xMDAJCTB4NDAKKyNkZWZpbmUgWENSX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lIFhDUl9YTVRFTgkJMHg0MDAwMDAwMAorI2RlZmluZSBYQ1JfUEFVU0VFTgkJMHgyMDAwMDAwMAorI2RlZmluZSBYQ1JfTE9BRFJORwkJMHgxMDAwMDAwMAorI2RlZmluZSBSQ1JfUkVTRVQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkVOCQkweDQwMDAwMDAwCisjZGVmaW5lIFJDUl9SQ1ZBTEwJCTB4MjAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkJBRAkJMHgxMDAwMDAwMAorI2RlZmluZSBSQ1JfQ1RMRU4JCTB4MDgwMDAwMDAKKyNkZWZpbmUgUkNSX0FERFJBRU4JCTB4MDIwMDAwMDAKKyNkZWZpbmUgR1hDUl9SRVNFVAkJMHg4MDAwMDAwMAorI2RlZmluZSBHWENSX1hNVEVOCQkweDQwMDAwMDAwCisjZGVmaW5lIEdYQ1JfUEFVU0VFTgkJMHgyMDAwMDAwMAorI2RlZmluZSBHUkNSX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lIEdSQ1JfUkNWRU4JCTB4NDAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZBTEwJCTB4MjAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZCQUQJCTB4MTAwMDAwMDAKKyNkZWZpbmUgR1JDUl9DVExFTgkJMHgwODAwMDAwMAorI2RlZmluZSBHUkNSX0FERFJBRU4JCTB4MDIwMDAwMDAKKyNkZWZpbmUgR1JDUl9IQVNIU0laRV9TSElGVAkxNworI2RlZmluZSBHUkNSX0hBU0hTSVpFCQkxNAogCi0jZGVmaW5lIFNMSUNfRUVQUk9NX0lEICAgICAgICAweEE1QTUKLSNkZWZpbmUgU0xJQ19TUkFNX1NJWkUyR0IgICAgICg2NCAqIDEwMjQpCi0jZGVmaW5lIFNMSUNfU1JBTV9TSVpFMUdCICAgICAoMzIgKiAxMDI0KQotI2RlZmluZSBTTElDX0hPU1RJRF9ERUZBVUxUICAgMHhGRkZGICAgICAgLyogdW5pbml0aWFsaXplZCBob3N0aWQgKi8KLSNkZWZpbmUgU0xJQ19OQlJfTUFDUyAgICAgICAgIDQKLQotI2lmbmRlZiBGQUxTRQotI2RlZmluZSBGQUxTRSAgMAotI2Vsc2UKLSN1bmRlZiAgRkFMU0UKLSNkZWZpbmUgRkFMU0UgIDAKLSNlbmRpZgotCi0jaWZuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAgIDEKLSNlbHNlCi0jdW5kZWYgIFRSVUUKLSNkZWZpbmUgVFJVRSAgIDEKLSNlbmRpZgorI2RlZmluZSBTTElDX0VFUFJPTV9JRAkJMHhBNUE1CisjZGVmaW5lIFNMSUNfU1JBTV9TSVpFMkdCCSg2NCAqIDEwMjQpCisjZGVmaW5lIFNMSUNfU1JBTV9TSVpFMUdCCSgzMiAqIDEwMjQpCisjZGVmaW5lIFNMSUNfSE9TVElEX0RFRkFVTFQJMHhGRkZGCQkvKiB1bmluaXRpYWxpemVkIGhvc3RpZCAqLworI2RlZmluZSBTTElDX05CUl9NQUNTCQk0CiAKIHN0cnVjdCBzbGljX3JjdmJ1ZiB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgcGFkMVs2XTsKLSAgICB1c2hvcnQgICAgcGFkMjsKLSAgICB1MzIgICBwYWQzOwotICAgIHUzMiAgIHBhZDQ7Ci0gICAgdTMyICAgYnVmZmVyOwotICAgIHUzMiAgIGxlbmd0aDsKLSAgICB1MzIgICBzdGF0dXM7Ci0gICAgdTMyICAgcGFkNTsKLSAgICB1c2hvcnQgICAgcGFkNjsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBkYXRhW1NMSUNfUkNWQlVGX0RBVEFTSVpFXTsKKwl1OCBwYWQxWzZdOworCXUxNiBwYWQyOworCXUzMiBwYWQzOworCXUzMiBwYWQ0OworCXUzMiBidWZmZXI7CisJdTMyIGxlbmd0aDsKKwl1MzIgc3RhdHVzOworCXUzMiBwYWQ1OworCXUxNiBwYWQ2OworCXU4IGRhdGFbU0xJQ19SQ1ZCVUZfREFUQVNJWkVdOwogfTsKIAotIHN0cnVjdCBzbGljX2hkZHJfd2RzIHsKLSAgdW5pb24gewotICAgIHN0cnVjdCB7Ci0JdTMyICAgIGZyYW1lX3N0YXR1czsKLQl1MzIgICAgZnJhbWVfc3RhdHVzX2I7Ci0JdTMyICAgIHRpbWVfc3RhbXA7Ci0JdTMyICAgIGNoZWNrc3VtOwotICAgIH0gaGRyc18xNHBvcnQ7Ci0gICAgc3RydWN0IHsKLQl1MzIgICAgZnJhbWVfc3RhdHVzOwotCXVzaG9ydCAgICAgQnl0ZUNudDsKLQl1c2hvcnQgICAgIFRwQ2hrc3VtOwotCXVzaG9ydCAgICAgQ3R4SGFzaDsKLQl1c2hvcnQgICAgIE1hY0hhc2g7Ci0JdTMyICAgIEJ1ZkxuazsKLSAgICB9IGhkcnNfZ2JpdDsKLSAgfSB1MDsKK3N0cnVjdCBzbGljX2hkZHJfd2RzIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIgZnJhbWVfc3RhdHVzOworCQkJdTMyIGZyYW1lX3N0YXR1c19iOworCQkJdTMyIHRpbWVfc3RhbXA7CisJCQl1MzIgY2hlY2tzdW07CisJCX0gaGRyc18xNHBvcnQ7CisJCXN0cnVjdCB7CisJCQl1MzIgZnJhbWVfc3RhdHVzOworCQkJdTE2IEJ5dGVDbnQ7CisJCQl1MTYgVHBDaGtzdW07CisJCQl1MTYgQ3R4SGFzaDsKKwkJCXUxNiBNYWNIYXNoOworCQkJdTMyIEJ1ZkxuazsKKwkJfSBoZHJzX2diaXQ7CisJfSB1MDsKIH07CiAKLSNkZWZpbmUgZnJhbWVfc3RhdHVzMTQgICAgICAgIHUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1cwotI2RlZmluZSBmcmFtZV9zdGF0dXNfYjE0ICAgICAgdTAuaGRyc18xNHBvcnQuZnJhbWVfc3RhdHVzX2IKLSNkZWZpbmUgZnJhbWVfc3RhdHVzR0IgICAgICAgIHUwLmhkcnNfZ2JpdC5mcmFtZV9zdGF0dXMKKyNkZWZpbmUgZnJhbWVfc3RhdHVzMTQJCXUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1cworI2RlZmluZSBmcmFtZV9zdGF0dXNfYjE0CXUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1c19iCisjZGVmaW5lIGZyYW1lX3N0YXR1c0dCCQl1MC5oZHJzX2diaXQuZnJhbWVfc3RhdHVzCiAKIHN0cnVjdCBzbGljX2hvc3Q2NHNnIHsKLQl1MzIgICAgICAgIHBhZGRybDsKLQl1MzIgICAgICAgIHBhZGRyaDsKLQl1MzIgICAgICAgIGxlbmd0aDsKKwl1MzIgcGFkZHJsOworCXUzMiBwYWRkcmg7CisJdTMyIGxlbmd0aDsKIH07CiAKIHN0cnVjdCBzbGljX2hvc3Q2NF9jbWQgewotICAgIHUzMiAgICAgICBob3N0aGFuZGxlOwotICAgIHUzMiAgICAgICBSU1ZEOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICBjb21tYW5kOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICBmbGFnczsKLSAgICB1bmlvbiB7Ci0JdXNob3J0ICAgICAgICAgIHJzdjE7Ci0JdXNob3J0ICAgICAgICAgIHJzdjI7Ci0gICAgfSB1MDsKLSAgICB1bmlvbiB7Ci0Jc3RydWN0IHsKLQkJdTMyICAgICAgICAgICAgdG90bGVuOwotCQlzdHJ1Y3Qgc2xpY19ob3N0NjRzZyAgICBidWZzW1NMSUNfTUFYNjRfQkNOVF07Ci0JfSBzbGljX2J1ZmZlcnM7Ci0gICAgfSB1OworCXUzMiBob3N0aGFuZGxlOworCXUzMiBSU1ZEOworCXU4IGNvbW1hbmQ7CisJdTggZmxhZ3M7CisJdW5pb24geworCQl1MTYgcnN2MTsKKwkJdTE2IHJzdjI7CisJfSB1MDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIgdG90bGVuOworCQkJc3RydWN0IHNsaWNfaG9zdDY0c2cgYnVmc1tTTElDX01BWDY0X0JDTlRdOworCQl9IHNsaWNfYnVmZmVyczsKKwl9IHU7CiB9OwogCiBzdHJ1Y3Qgc2xpY19yc3BidWYgewotICAgIHUzMiAgIGhvc3RoYW5kbGU7Ci0gICAgdTMyICAgcGFkMDsKLSAgICB1MzIgICBwYWQxOwotICAgIHUzMiAgIHN0YXR1czsKLSAgICB1MzIgICBwYWQyWzRdOwotCisJdTMyIGhvc3RoYW5kbGU7CisJdTMyIHBhZDA7CisJdTMyIHBhZDE7CisJdTMyIHN0YXR1czsKKwl1MzIgcGFkMls0XTsKIH07CiAKIHN0cnVjdCBzbGljX3JlZ3MgewotCXUzMglzbGljX3Jlc2V0OwkJLyogUmVzZXQgUmVnaXN0ZXIgKi8KKwl1MzIJc2xpY19yZXNldDsJLyogUmVzZXQgUmVnaXN0ZXIgKi8KIAl1MzIJcGFkMDsKIAotCXUzMglzbGljX2ljcjsJCS8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCXNsaWNfaWNyOwkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLwogCXUzMglwYWQyOwogI2RlZmluZSBTTElDX0lDUgkJMHgwMDA4CiAKLQl1MzIJc2xpY19pc3A7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIgKi8KKwl1MzIJc2xpY19pc3A7CS8qIEludGVycnVwdCBzdGF0dXMgcG9pbnRlciAqLwogCXUzMglwYWQxOwogI2RlZmluZSBTTElDX0lTUAkJMHgwMDEwCiAKLSAgICB1MzIJc2xpY19pc3I7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzICovCisJdTMyCXNsaWNfaXNyOwkvKiBJbnRlcnJ1cHQgc3RhdHVzICovCiAJdTMyCXBhZDM7CiAjZGVmaW5lIFNMSUNfSVNSCQkweDAwMTgKIAotICAgIHUzMglzbGljX2hiYXI7CQkvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgcmVnICovCi0JdTMyCQlwYWQ0OworCXUzMglzbGljX2hiYXI7CS8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KKwl1MzIJcGFkNDsKIAkvKiAzMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgaGRyIGJ1ZmZlcnMKIAkgICAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCiAJICAgQnVmZmVycyBhcmUgMjU2IGJ5dGVzIGxvbmcgb24gMjU2LWJ5dGUgYm91bmRhcmllcy4gKi8KICNkZWZpbmUgU0xJQ19IQkFSCQkweDAwMjAKICNkZWZpbmUgU0xJQ19IQkFSX0NOVF9NU0sJMHgwMDAwMDBGRgogCi0gICAgdTMyCXNsaWNfZGJhcjsJLyogRGF0YSBidWZmZXIgaGFuZGxlICYgYWRkcmVzcyByZWcgKi8KLQl1MzIJCXBhZDU7CisJdTMyCXNsaWNfZGJhcjsJLyogRGF0YSBidWZmZXIgaGFuZGxlICYgYWRkcmVzcyByZWcgKi8KKwl1MzIJcGFkNTsKIAogCS8qIDQgc2V0cyBvZiByZWdpc3RlcnM7IEJ1ZmZlcnMgYXJlIDJLIGJ5dGVzIGxvbmcgMiBwZXIgNEsgcGFnZS4gKi8KICNkZWZpbmUgU0xJQ19EQkFSCQkweDAwMjgKICNkZWZpbmUgU0xJQ19EQkFSX1NJWkUJCTIwNDgKIAotICAgIHUzMglzbGljX2NiYXI7CQkgCS8qIFhtdCBDbWQgYnVmIGFkZHIgcmVncy4qLworCXUzMglzbGljX2NiYXI7CS8qIFhtdCBDbWQgYnVmIGFkZHIgcmVncy4qLwogCS8qIDEgcGVyIFhNVCBpbnRlcmZhY2UKIAkgICAzMS01IC0gcGh5IGFkZHIgb2YgaG9zdCBjb21tYW5kIGJ1ZmZlcgogCSAgICA0LTAgLSBsZW5ndGggb2YgY21kIGluIG11bHRpcGxlcyBvZiAzMiBieXRlcwpAQCAtMzQzLDEzICszMjksMTMgQEAKICNkZWZpbmUgU0xJQ19DQkFSX0xFTl9NU0sJMHgwMDAwMDAxRgogI2RlZmluZSBTTElDX0NCQVJfQUxJR04JCTB4MDAwMDAwMjAKIAotCXUzMglzbGljX3djczsJCS8qIHdyaXRlIGNvbnRyb2wgc3RvcmUqLworCXUzMglzbGljX3djczsJLyogd3JpdGUgY29udHJvbCBzdG9yZSovCiAjZGVmaW5lCVNMSUNfV0NTCQkweDAwMzQKICNkZWZpbmUgU0xJQ19XQ1NfU1RBUlQJCTB4ODAwMDAwMDAJLypTdGFydCB0aGUgU0xJQyAoSnVtcCB0byBXQ1MpKi8KICNkZWZpbmUgU0xJQ19XQ1NfQ09NUEFSRQkweDQwMDAwMDAwCS8qIENvbXBhcmUgd2l0aCB2YWx1ZSBpbiBXQ1MqLwogCi0gICAgdTMyCXNsaWNfcmJhcjsJCS8qIFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLwotCXUzMgkJcGFkNzsKKwl1MzIJc2xpY19yYmFyOwkvKiBSZXNwb25zZSBidWZmZXIgYWRkcmVzcyByZWcuKi8KKwl1MzIJcGFkNzsKIAkgLyozMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgcmVzcG9uc2UgYnVmZmVycwogCSAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCiAJIEJ1ZmZlcnMgYXJlIDMyIGJ5dGVzIGxvbmcgb24gMzItYnl0ZSBib3VuZGFyaWVzLiovCkBAIC0zNTcsMjE1ICszNDMsMjE0IEBACiAjZGVmaW5lIFNMSUNfUkJBUl9DTlRfTVNLCTB4MDAwMDAwRkYKICNkZWZpbmUgU0xJQ19SQkFSX1NJWkUJCTMyCiAKLQl1MzIJc2xpY19zdGF0czsJCS8qIHJlYWQgc3RhdGlzdGljcyAoVVBSKSAqLwotCXUzMgkJcGFkODsKKwl1MzIJc2xpY19zdGF0czsJLyogcmVhZCBzdGF0aXN0aWNzIChVUFIpICovCisJdTMyCXBhZDg7CiAjZGVmaW5lCVNMSUNfUlNUQVQJCTB4MDA0MAogCi0JdTMyCXNsaWNfcmxzcjsJCQkvKiByZWFkIGxpbmsgc3RhdHVzICovCi0JdTMyCQlwYWQ5OworCXUzMglzbGljX3Jsc3I7CS8qIHJlYWQgbGluayBzdGF0dXMgKi8KKwl1MzIJcGFkOTsKICNkZWZpbmUgU0xJQ19MU1RBVAkJMHgwMDQ4CiAKLQl1MzIJc2xpY193bWNmZzsJCQkvKiBXcml0ZSBNYWMgQ29uZmlnICovCi0JdTMyCQlwYWQxMDsKKwl1MzIJc2xpY193bWNmZzsJLyogV3JpdGUgTWFjIENvbmZpZyAqLworCXUzMglwYWQxMDsKICNkZWZpbmUJU0xJQ19XTUNGRwkJMHgwMDUwCiAKLQl1MzIJc2xpY193cGh5OwkJCS8qIFdyaXRlIHBoeSByZWdpc3RlciAqLwotCXUzMgkJcGFkMTE7CisJdTMyCXNsaWNfd3BoeTsJLyogV3JpdGUgcGh5IHJlZ2lzdGVyICovCisJdTMyCXBhZDExOwogI2RlZmluZSBTTElDX1dQSFkJCTB4MDA1OAogCi0JdTMyCXNsaWNfcmNiYXI7CQkJLypSY3YgQ21kIGJ1ZiBhZGRyIHJlZyovCi0JdTMyCQlwYWQxMjsKKwl1MzIJc2xpY19yY2JhcjsJLyogUmN2IENtZCBidWYgYWRkciByZWcgKi8KKwl1MzIJcGFkMTI7CiAjZGVmaW5lCVNMSUNfUkNCQVIJCTB4MDA2MAogCi0JdTMyCXNsaWNfcmNvbmZpZzsJCS8qIFJlYWQgU0xJQyBDb25maWcqLwotCXUzMgkJcGFkMTM7CisJdTMyCXNsaWNfcmNvbmZpZzsJLyogUmVhZCBTTElDIENvbmZpZyovCisJdTMyCXBhZDEzOwogI2RlZmluZSBTTElDX1JDT05GSUcJMHgwMDY4CiAKLQl1MzIJc2xpY19pbnRhZ2c7CQkvKiBJbnRlcnJ1cHQgYWdncmVnYXRpb24gdGltZSovCi0JdTMyCQlwYWQxNDsKKwl1MzIJc2xpY19pbnRhZ2c7CS8qIEludGVycnVwdCBhZ2dyZWdhdGlvbiB0aW1lICovCisJdTMyCXBhZDE0OwogI2RlZmluZSBTTElDX0lOVEFHRwkJMHgwMDcwCiAKLQl1MzIJc2xpY193eGNmZzsJCS8qIFdyaXRlIFhNSVQgY29uZmlnIHJlZyovCi0JdTMyCQlwYWQxNjsKKwl1MzIJc2xpY193eGNmZzsJLyogV3JpdGUgWE1JVCBjb25maWcgcmVnKi8KKwl1MzIJcGFkMTY7CiAjZGVmaW5lCVNMSUNfV1hDRkcJCTB4MDA3OAogCi0JdTMyCXNsaWNfd3JjZmc7CQkvKiBXcml0ZSBSQ1YgY29uZmlnIHJlZyovCi0JdTMyCQlwYWQxNzsKKwl1MzIJc2xpY193cmNmZzsJLyogV3JpdGUgUkNWIGNvbmZpZyByZWcqLworCXUzMglwYWQxNzsKICNkZWZpbmUJU0xJQ19XUkNGRwkJMHgwMDgwCiAKLQl1MzIJc2xpY193cmFkZHJhbDsJCS8qIFdyaXRlIHJjdiBhZGRyIGEgbG93Ki8KLQl1MzIJCXBhZDE4OworCXUzMglzbGljX3dyYWRkcmFsOwkvKiBXcml0ZSByY3YgYWRkciBhIGxvdyovCisJdTMyCXBhZDE4OwogI2RlZmluZQlTTElDX1dSQUREUkFMCTB4MDA4OAogCi0JdTMyCXNsaWNfd3JhZGRyYWg7CQkvKiBXcml0ZSByY3YgYWRkciBhIGhpZ2gqLwotCXUzMgkJcGFkMTk7CisJdTMyCXNsaWNfd3JhZGRyYWg7CS8qIFdyaXRlIHJjdiBhZGRyIGEgaGlnaCovCisJdTMyCXBhZDE5OwogI2RlZmluZQlTTElDX1dSQUREUkFICTB4MDA5MAogCi0JdTMyCXNsaWNfd3JhZGRyYmw7CQkvKiBXcml0ZSByY3YgYWRkciBiIGxvdyovCi0JdTMyCQlwYWQyMDsKKwl1MzIJc2xpY193cmFkZHJibDsJLyogV3JpdGUgcmN2IGFkZHIgYiBsb3cqLworCXUzMglwYWQyMDsKICNkZWZpbmUJU0xJQ19XUkFERFJCTAkweDAwOTgKIAotCXUzMglzbGljX3dyYWRkcmJoOwkJLyogV3JpdGUgcmN2IGFkZHIgYiBoaWdoKi8KKwl1MzIJc2xpY193cmFkZHJiaDsJLyogV3JpdGUgcmN2IGFkZHIgYiBoaWdoKi8KIAl1MzIJCXBhZDIxOwogI2RlZmluZQlTTElDX1dSQUREUkJICTB4MDBhMAogCi0JdTMyCXNsaWNfbWNhc3Rsb3c7CQkvKiBMb3cgYml0cyBvZiBtY2FzdCBtYXNrKi8KKwl1MzIJc2xpY19tY2FzdGxvdzsJLyogTG93IGJpdHMgb2YgbWNhc3QgbWFzayovCiAJdTMyCQlwYWQyMjsKICNkZWZpbmUJU0xJQ19NQ0FTVExPVwkweDAwYTgKIAotCXUzMglzbGljX21jYXN0aGlnaDsJCS8qIEhpZ2ggYml0cyBvZiBtY2FzdCBtYXNrKi8KKwl1MzIJc2xpY19tY2FzdGhpZ2g7CS8qIEhpZ2ggYml0cyBvZiBtY2FzdCBtYXNrKi8KIAl1MzIJCXBhZDIzOwogI2RlZmluZQlTTElDX01DQVNUSElHSAkweDAwYjAKIAotCXUzMglzbGljX3Bpbmc7CQkJLyogUGluZyB0aGUgY2FyZCovCi0JdTMyCQlwYWQyNDsKKwl1MzIJc2xpY19waW5nOwkvKiBQaW5nIHRoZSBjYXJkKi8KKwl1MzIJcGFkMjQ7CiAjZGVmaW5lIFNMSUNfUElORwkJMHgwMGI4CiAKLQl1MzIJc2xpY19kdW1wX2NtZDsJCS8qIER1bXAgY29tbWFuZCAqLwotCXUzMgkJcGFkMjU7CisJdTMyCXNsaWNfZHVtcF9jbWQ7CS8qIER1bXAgY29tbWFuZCAqLworCXUzMglwYWQyNTsKICNkZWZpbmUgU0xJQ19EVU1QX0NNRAkweDAwYzAKIAotCXUzMglzbGljX2R1bXBfZGF0YTsJCS8qIER1bXAgZGF0YSBwb2ludGVyICovCi0JdTMyCQlwYWQyNjsKKwl1MzIJc2xpY19kdW1wX2RhdGE7CS8qIER1bXAgZGF0YSBwb2ludGVyICovCisJdTMyCXBhZDI2OwogI2RlZmluZSBTTElDX0RVTVBfREFUQQkweDAwYzgKIAogCXUzMglzbGljX3BjaXN0YXR1czsJLyogUmVhZCBjYXJkJ3MgcGNpX3N0YXR1cyByZWdpc3RlciAqLwotCXUzMgkJcGFkMjc7CisJdTMyCXBhZDI3OwogI2RlZmluZQlTTElDX1BDSVNUQVRVUwkweDAwZDAKIAotCXUzMglzbGljX3dyaG9zdGlkOwkJLyogV3JpdGUgaG9zdGlkIGZpZWxkICovCisJdTMyCXNsaWNfd3Job3N0aWQ7CS8qIFdyaXRlIGhvc3RpZCBmaWVsZCAqLwogCXUzMgkJcGFkMjg7CiAjZGVmaW5lIFNMSUNfV1JIT1NUSUQJCSAweDAwZDgKICNkZWZpbmUgU0xJQ19SREhPU1RJRF8xR0IJIDB4MTU1NAogI2RlZmluZSBTTElDX1JESE9TVElEXzJHQgkgMHgxNTU0CiAKIAl1MzIJc2xpY19sb3dfcG93ZXI7CS8qIFB1dCBjYXJkIGluIGEgbG93IHBvd2VyIHN0YXRlICovCi0JdTMyCQlwYWQyOTsKKwl1MzIJcGFkMjk7CiAjZGVmaW5lIFNMSUNfTE9XX1BPV0VSCTB4MDBlMAogCiAJdTMyCXNsaWNfcXVpZXNjZTsJLyogZm9yY2Ugc2xpYyBpbnRvIHF1aWVzY2VudCBzdGF0ZQotCQkJCQkgYmVmb3JlIHNvZnQgcmVzZXQgKi8KLQl1MzIJCXBhZDMwOworCQkJCSAgIGJlZm9yZSBzb2Z0IHJlc2V0ICovCisJdTMyCXBhZDMwOwogI2RlZmluZSBTTElDX1FVSUVTQ0UJMHgwMGU4CiAKLQl1MzIJc2xpY19yZXNldF9pZmFjZTsJLyogcmVzZXQgaW50ZXJmYWNlIHF1ZXVlcyAqLwotCXUzMgkJcGFkMzE7CisJdTMyCXNsaWNfcmVzZXRfaWZhY2U7LyogcmVzZXQgaW50ZXJmYWNlIHF1ZXVlcyAqLworCXUzMglwYWQzMTsKICNkZWZpbmUgU0xJQ19SRVNFVF9JRkFDRSAweDAwZjAKIAotICAgIHUzMglzbGljX2FkZHJfdXBwZXI7CS8qIEJpdHMgNjMtMzIgZm9yIGhvc3QgaS9mIGFkZHJzICovCi0JdTMyCQlwYWQzMjsKKwl1MzIJc2xpY19hZGRyX3VwcGVyOy8qIEJpdHMgNjMtMzIgZm9yIGhvc3QgaS9mIGFkZHJzICovCisJdTMyCXBhZDMyOwogI2RlZmluZSBTTElDX0FERFJfVVBQRVIJMHgwMGY4IC8qUmVnaXN0ZXIgaXMgb25seSB3cml0dGVuIHdoZW4gaXQgaGFzIGNoYW5nZWQqLwogCi0gICAgdTMyCXNsaWNfaGJhcjY0OwkJLyogNjQgYml0IEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KLQl1MzIJCXBhZDMzOworCXUzMglzbGljX2hiYXI2NDsJLyogNjQgYml0IEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KKwl1MzIJcGFkMzM7CiAjZGVmaW5lIFNMSUNfSEJBUjY0CQkweDAxMDAKIAotICAgIHUzMglzbGljX2RiYXI2NDsJLyogNjQgYml0IERhdGEgYnVmZmVyIGhhbmRsZSAmIGFkZHJlc3MgcmVnICovCi0JdTMyCQlwYWQzNDsKKwl1MzIJc2xpY19kYmFyNjQ7CS8qIDY0IGJpdCBEYXRhIGJ1ZmZlciBoYW5kbGUgJiBhZGRyZXNzIHJlZyAqLworCXUzMglwYWQzNDsKICNkZWZpbmUgU0xJQ19EQkFSNjQJCTB4MDEwOAogCi0gICAgdTMyCXNsaWNfY2JhcjY0OwkgCS8qIDY0IGJpdCBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuICovCi0JdTMyCQlwYWQzNTsKKwl1MzIJc2xpY19jYmFyNjQ7IAkvKiA2NCBiaXQgWG10IENtZCBidWYgYWRkciByZWdzLiAqLworCXUzMglwYWQzNTsKICNkZWZpbmUgU0xJQ19DQkFSNjQJCTB4MDExMAogCi0gICAgdTMyCXNsaWNfcmJhcjY0OwkJLyogNjQgYml0IFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLwotCXUzMgkJcGFkMzY7CisJdTMyCXNsaWNfcmJhcjY0OwkvKiA2NCBiaXQgUmVzcG9uc2UgYnVmZmVyIGFkZHJlc3MgcmVnLiovCisJdTMyCXBhZDM2OwogI2RlZmluZSBTTElDX1JCQVI2NAkJMHgwMTE4CiAKLQl1MzIJc2xpY19yY2JhcjY0OwkJLyogNjQgYml0IFJjdiBDbWQgYnVmIGFkZHIgcmVnKi8KLQl1MzIJCXBhZDM3OworCXUzMglzbGljX3JjYmFyNjQ7CS8qIDY0IGJpdCBSY3YgQ21kIGJ1ZiBhZGRyIHJlZyovCisJdTMyCXBhZDM3OwogI2RlZmluZQlTTElDX1JDQkFSNjQJMHgwMTIwCiAKLQl1MzIJc2xpY19zdGF0czY0OwkJLypyZWFkIHN0YXRpc3RpY3MgKDY0IGJpdCBVUFIpKi8KLQl1MzIJCXBhZDM4OworCXUzMglzbGljX3N0YXRzNjQ7CS8qIHJlYWQgc3RhdGlzdGljcyAoNjQgYml0IFVQUikgKi8KKwl1MzIJcGFkMzg7CiAjZGVmaW5lCVNMSUNfUlNUQVQ2NAkweDAxMjgKIAogCXUzMglzbGljX3Jjdl93Y3M7CS8qRG93bmxvYWQgR2lnYWJpdCBSQ1Ygc2VxdWVuY2VyIHVjb2RlKi8KLQl1MzIJCXBhZDM5OworCXUzMglwYWQzOTsKICNkZWZpbmUgU0xJQ19SQ1ZfV0NTCTB4MDEzMAogI2RlZmluZSBTTElDX1JDVldDU19CRUdJTgkweDQwMDAwMDAwCiAjZGVmaW5lIFNMSUNfUkNWV0NTX0ZJTklTSAkweDgwMDAwMDAwCiAKLQl1MzIJc2xpY193cnZsYW5pZDsJCS8qIFdyaXRlIFZsYW5JZCBmaWVsZCAqLwotCXUzMgkJcGFkNDA7CisJdTMyCXNsaWNfd3J2bGFuaWQ7CS8qIFdyaXRlIFZsYW5JZCBmaWVsZCAqLworCXUzMglwYWQ0MDsKICNkZWZpbmUgU0xJQ19XUlZMQU5JRAkweDAxMzgKIAotCXUzMglzbGljX3JlYWRfeGZfaW5mbzsgIC8qIFJlYWQgVHJhbnNmb3JtZXIgaW5mbyAqLwotCXUzMgkJcGFkNDE7CisJdTMyCXNsaWNfcmVhZF94Zl9pbmZvOwkvKiBSZWFkIFRyYW5zZm9ybWVyIGluZm8gKi8KKwl1MzIJcGFkNDE7CiAjZGVmaW5lIFNMSUNfUkVBRF9YRl9JTkZPIAkweDAxNDAKIAotCXUzMglzbGljX3dyaXRlX3hmX2luZm87IC8qIFdyaXRlIFRyYW5zZm9ybWVyIGluZm8gKi8KLQl1MzIJCXBhZDQyOworCXUzMglzbGljX3dyaXRlX3hmX2luZm87CS8qIFdyaXRlIFRyYW5zZm9ybWVyIGluZm8gKi8KKwl1MzIJcGFkNDI7CiAjZGVmaW5lIFNMSUNfV1JJVEVfWEZfSU5GTyAJMHgwMTQ4CiAKLQl1MzIJUlNWRDE7ICAgICAgICAgICAgICAvKiBUT0UgT25seSAqLwotCXUzMgkJcGFkNDM7CisJdTMyCVJTVkQxOwkJLyogVE9FIE9ubHkgKi8KKwl1MzIJcGFkNDM7CiAKLQl1MzIJUlNWRDI7IAkgICAgICAgICAgICAvKiBUT0UgT25seSAqLwotCXUzMgkJcGFkNDQ7CisJdTMyCVJTVkQyOwkJLyogVE9FIE9ubHkgKi8KKwl1MzIJcGFkNDQ7CiAKLQl1MzIJUlNWRDM7ICAgICAgICAgICAgICAvKiBUT0UgT25seSAqLwotCXUzMgkJcGFkNDU7CisJdTMyCVJTVkQzOwkJLyogVE9FIE9ubHkgKi8KKwl1MzIJcGFkNDU7CiAKLQl1MzIJUlNWRDQ7ICAgICAgICAgICAgICAvKiBUT0UgT25seSAqLwotCXUzMgkJcGFkNDY7CisJdTMyCVJTVkQ0OwkJLyogVE9FIE9ubHkgKi8KKwl1MzIJcGFkNDY7CiAKIAl1MzIJc2xpY190aWNrc19wZXJfc2VjOyAvKiBXcml0ZSBjYXJkIHRpY2tzIHBlciBzZWNvbmQgKi8KLQl1MzIJCXBhZDQ3OworCXUzMglwYWQ0NzsKICNkZWZpbmUgU0xJQ19USUNLU19QRVJfU0VDCTB4MDE3MAotCiB9OwogCiBlbnVtIFVQUl9SRVFVRVNUIHsKLSAgICBTTElDX1VQUl9TVEFUUywKLSAgICBTTElDX1VQUl9STFNSLAotICAgIFNMSUNfVVBSX1dDRkcsCi0gICAgU0xJQ19VUFJfUkNPTkZJRywKLSAgICBTTElDX1VQUl9SUEhZLAotICAgIFNMSUNfVVBSX0VOTEIsCi0gICAgU0xJQ19VUFJfRU5DVCwKLSAgICBTTElDX1VQUl9QRFdOLAotICAgIFNMSUNfVVBSX1BJTkcsCi0gICAgU0xJQ19VUFJfRFVNUCwKKwlTTElDX1VQUl9TVEFUUywKKwlTTElDX1VQUl9STFNSLAorCVNMSUNfVVBSX1dDRkcsCisJU0xJQ19VUFJfUkNPTkZJRywKKwlTTElDX1VQUl9SUEhZLAorCVNMSUNfVVBSX0VOTEIsCisJU0xJQ19VUFJfRU5DVCwKKwlTTElDX1VQUl9QRFdOLAorCVNMSUNfVVBSX1BJTkcsCisJU0xJQ19VUFJfRFVNUCwKIH07CiAKIHN0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4gewotICAgIHUzMiAgICBwYXR0ZXJubGVuZ3RoOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICBwYXR0ZXJuW1NMSUNfUE1fUEFUVEVSTlNJWkVdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICBtYXNrW1NMSUNfUE1fUEFUVEVSTlNJWkVdOworCXUzMiBwYXR0ZXJubGVuZ3RoOworCXU4IHBhdHRlcm5bU0xJQ19QTV9QQVRURVJOU0laRV07CisJdTggbWFza1tTTElDX1BNX1BBVFRFUk5TSVpFXTsKIH07CiAKIHN0cnVjdCBpbmljcG1fc3RhdGUgewotICAgIHUzMiAgICAgICAgICAgICAgICAgcG93ZXJjYXBzOwotICAgIHUzMiAgICAgICAgICAgICAgICAgcG93ZXJzdGF0ZTsKLSAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfbGlua3N0YXR1czsKLSAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfbWFnaWNwYWNrZXQ7Ci0gICAgdTMyICAgICAgICAgICAgICAgICB3YWtlX2ZyYW1lcGF0dGVybjsKLSAgICBzdHJ1Y3QgaW5pY3BtX3dha2VwYXR0ZXJuICAgIHdha2VwYXR0ZXJuW1NMSUNfUE1fTUFYUEFUVEVSTlNdOworCXUzMiBwb3dlcmNhcHM7CisJdTMyIHBvd2Vyc3RhdGU7CisJdTMyIHdha2VfbGlua3N0YXR1czsKKwl1MzIgd2FrZV9tYWdpY3BhY2tldDsKKwl1MzIgd2FrZV9mcmFtZXBhdHRlcm47CisJc3RydWN0IGluaWNwbV93YWtlcGF0dGVybiB3YWtlcGF0dGVybltTTElDX1BNX01BWFBBVFRFUk5TXTsKIH07CiAKIHN0cnVjdCBzbGljcG1fcGFja2V0X3BhdHRlcm4gewotICAgIHUzMiAgICAgcHJpb3JpdHk7Ci0gICAgdTMyICAgICByZXNlcnZlZDsKLSAgICB1MzIgICAgIG1hc2tzaXplOwotICAgIHUzMiAgICAgcGF0dGVybm9mZnNldDsKLSAgICB1MzIgICAgIHBhdHRlcm5zaXplOwotICAgIHUzMiAgICAgcGF0dGVybmZsYWdzOworCXUzMiBwcmlvcml0eTsKKwl1MzIgcmVzZXJ2ZWQ7CisJdTMyIG1hc2tzaXplOworCXUzMiBwYXR0ZXJub2Zmc2V0OworCXUzMiBwYXR0ZXJuc2l6ZTsKKwl1MzIgcGF0dGVybmZsYWdzOwogfTsKIAogZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgewotICAgIHNsaWNwbV9zdGF0ZV91bnNwZWNpZmllZCA9IDAsCi0gICAgc2xpY3BtX3N0YXRlX2QwLAotICAgIHNsaWNwbV9zdGF0ZV9kMSwKLSAgICBzbGljcG1fc3RhdGVfZDIsCi0gICAgc2xpY3BtX3N0YXRlX2QzLAotICAgIHNsaWNwbV9zdGF0ZV9tYXhpbXVtCisJc2xpY3BtX3N0YXRlX3Vuc3BlY2lmaWVkID0gMCwKKwlzbGljcG1fc3RhdGVfZDAsCisJc2xpY3BtX3N0YXRlX2QxLAorCXNsaWNwbV9zdGF0ZV9kMiwKKwlzbGljcG1fc3RhdGVfZDMsCisJc2xpY3BtX3N0YXRlX21heGltdW0KIH07CiAKIHN0cnVjdCBzbGljcG1fd2FrZXVwX2NhcGFiaWxpdGllcyB7Ci0gICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9tYWdpY19wYWNrZXRfd2FrZXVwOwotICAgIGVudW0gc2xpY3BtX3Bvd2VyX3N0YXRlICBtaW5fcGF0dGVybl93YWtldXA7Ci0gICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9saW5rX2NoYW5nZV93YWtldXA7CisJZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgbWluX21hZ2ljX3BhY2tldF93YWtldXA7CisJZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgbWluX3BhdHRlcm5fd2FrZXVwOworCWVudW0gc2xpY3BtX3Bvd2VyX3N0YXRlIG1pbl9saW5rX2NoYW5nZV93YWtldXA7CiB9OwogCiBzdHJ1Y3Qgc2xpY19wbnBfY2FwYWJpbGl0aWVzIHsKQEAgLTYxMiwxMzYgKzU5NywxMzUgQEAKIH07CiAKIHN0cnVjdCBzbGljX3N0YXRzIHsKLSAgICB1bmlvbiB7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHhtdF9zdGF0cyAgeG10MTAwOwotCQlzdHJ1Y3QgcmN2X3N0YXRzICByY3YxMDA7Ci0JfSBzdGF0c18xMDA7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHhtdF9zdGF0c2diICAgICB4bXRHQjsKLQkJc3RydWN0IHJjdl9zdGF0c2diICAgICByY3ZHQjsKLQl9IHN0YXRzX0dCOwotICAgIH0gdTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgeG10X3N0YXRzIHhtdDEwMDsKKwkJCXN0cnVjdCByY3Zfc3RhdHMgcmN2MTAwOworCQl9IHN0YXRzXzEwMDsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCB4bXRfc3RhdHNnYiB4bXRHQjsKKwkJCXN0cnVjdCByY3Zfc3RhdHNnYiByY3ZHQjsKKwkJfSBzdGF0c19HQjsKKwl9IHU7CiB9OwogCi0jZGVmaW5lIHhtaXRfdGNwX3NlZ3MxMDAgICAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3RjcF9zZWdzCi0jZGVmaW5lIHhtaXRfdGNwX2J5dGVzMTAwICAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3RjcF9ieXRlcwotI2RlZmluZSB4bWl0X2J5dGVzMTAwICAgICAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9ieXRlcwotI2RlZmluZSB4bWl0X2NvbGxpc2lvbnMxMDAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9jb2xsaXNpb25zCi0jZGVmaW5lIHhtaXRfdW5pY2FzdHMxMDAgICAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3VuaWNhc3RzCi0jZGVmaW5lIHhtaXRfb3RoZXJfZXJyb3IxMDAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X290aGVyX2Vycm9yCi0jZGVmaW5lIHhtaXRfZXhjZXNzX2NvbGxpc2lvbnMxMDAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X2V4Y2Vzc19jb2xsaXNpb25zCi0jZGVmaW5lIHJjdl90Y3Bfc2VnczEwMCAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdGNwX3NlZ3MKLSNkZWZpbmUgcmN2X3RjcF9ieXRlczEwMCAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl90Y3BfYnl0ZXMKLSNkZWZpbmUgcmN2X2J5dGVzMTAwICAgICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl9ieXRlcwotI2RlZmluZSByY3ZfdW5pY2FzdHMxMDAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3VuaWNhc3RzCi0jZGVmaW5lIHJjdl9vdGhlcl9lcnJvcjEwMCAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3Zfb3RoZXJfZXJyb3IKLSNkZWZpbmUgcmN2X2Ryb3BzMTAwICAgICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl9kcm9wcwotI2RlZmluZSB4bWl0X3RjcF9zZWdzX2diICAgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdGNwX3NlZ3MKLSNkZWZpbmUgeG1pdF90Y3BfYnl0ZXNfZ2IgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X3RjcF9ieXRlcwotI2RlZmluZSB4bWl0X2J5dGVzX2diICAgICAgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfYnl0ZXMKLSNkZWZpbmUgeG1pdF9jb2xsaXNpb25zX2diICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X2NvbGxpc2lvbnMKLSNkZWZpbmUgeG1pdF91bmljYXN0c19nYiAgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X3VuaWNhc3RzCi0jZGVmaW5lIHhtaXRfb3RoZXJfZXJyb3JfZ2IgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF9vdGhlcl9lcnJvcgotI2RlZmluZSB4bWl0X2V4Y2Vzc19jb2xsaXNpb25zX2diICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfZXhjZXNzX2NvbGxpc2lvbnMKKyNkZWZpbmUgeG1pdF90Y3Bfc2VnczEwMAkJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdGNwX3NlZ3MKKyNkZWZpbmUgeG1pdF90Y3BfYnl0ZXMxMDAJCXUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3RjcF9ieXRlcworI2RlZmluZSB4bWl0X2J5dGVzMTAwCQkJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfYnl0ZXMKKyNkZWZpbmUgeG1pdF9jb2xsaXNpb25zMTAwCQl1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9jb2xsaXNpb25zCisjZGVmaW5lIHhtaXRfdW5pY2FzdHMxMDAJCXUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X3VuaWNhc3RzCisjZGVmaW5lIHhtaXRfb3RoZXJfZXJyb3IxMDAJCXUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X290aGVyX2Vycm9yCisjZGVmaW5lIHhtaXRfZXhjZXNzX2NvbGxpc2lvbnMxMDAJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfZXhjZXNzX2NvbGxpc2lvbnMKKyNkZWZpbmUgcmN2X3RjcF9zZWdzMTAwCQkJdS5zdGF0c18xMDAucmN2MTAwLnJjdl90Y3Bfc2VncworI2RlZmluZSByY3ZfdGNwX2J5dGVzMTAwCQl1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3RjcF9ieXRlcworI2RlZmluZSByY3ZfYnl0ZXMxMDAJCQl1LnN0YXRzXzEwMC5yY3YxMDAucmN2X2J5dGVzCisjZGVmaW5lIHJjdl91bmljYXN0czEwMAkJCXUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdW5pY2FzdHMKKyNkZWZpbmUgcmN2X290aGVyX2Vycm9yMTAwCQl1LnN0YXRzXzEwMC5yY3YxMDAucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wczEwMAkJCXUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfZHJvcHMKKyNkZWZpbmUgeG1pdF90Y3Bfc2Vnc19nYgkJdS5zdGF0c19HQi54bXRHQi54bWl0X3RjcF9zZWdzCisjZGVmaW5lIHhtaXRfdGNwX2J5dGVzX2diCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdGNwX2J5dGVzCisjZGVmaW5lIHhtaXRfYnl0ZXNfZ2IJCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfYnl0ZXMKKyNkZWZpbmUgeG1pdF9jb2xsaXNpb25zX2diCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfY29sbGlzaW9ucworI2RlZmluZSB4bWl0X3VuaWNhc3RzX2diCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdW5pY2FzdHMKKyNkZWZpbmUgeG1pdF9vdGhlcl9lcnJvcl9nYgkJdS5zdGF0c19HQi54bXRHQi54bWl0X290aGVyX2Vycm9yCisjZGVmaW5lIHhtaXRfZXhjZXNzX2NvbGxpc2lvbnNfZ2IJdS5zdGF0c19HQi54bXRHQi54bWl0X2V4Y2Vzc19jb2xsaXNpb25zCiAKLSNkZWZpbmUgcmN2X3RjcF9zZWdzX2diICAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX3NlZ3MKLSNkZWZpbmUgcmN2X3RjcF9ieXRlc19nYiAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX2J5dGVzCi0jZGVmaW5lIHJjdl9ieXRlc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2J5dGVzCi0jZGVmaW5lIHJjdl91bmljYXN0c19nYiAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X3VuaWNhc3RzCi0jZGVmaW5lIHJjdl9vdGhlcl9lcnJvcl9nYiAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X290aGVyX2Vycm9yCi0jZGVmaW5lIHJjdl9kcm9wc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2Ryb3BzCisjZGVmaW5lIHJjdl90Y3Bfc2Vnc19nYgkJCXUuc3RhdHNfR0IucmN2R0IucmN2X3RjcF9zZWdzCisjZGVmaW5lIHJjdl90Y3BfYnl0ZXNfZ2IJCXUuc3RhdHNfR0IucmN2R0IucmN2X3RjcF9ieXRlcworI2RlZmluZSByY3ZfYnl0ZXNfZ2IJCQl1LnN0YXRzX0dCLnJjdkdCLnJjdl9ieXRlcworI2RlZmluZSByY3ZfdW5pY2FzdHNfZ2IJCQl1LnN0YXRzX0dCLnJjdkdCLnJjdl91bmljYXN0cworI2RlZmluZSByY3Zfb3RoZXJfZXJyb3JfZ2IJCXUuc3RhdHNfR0IucmN2R0IucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wc19nYgkJCXUuc3RhdHNfR0IucmN2R0IucmN2X2Ryb3BzCiAKIHN0cnVjdCBzbGljX2NvbmZpZ19tYWMgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIG1hY2FkZHJBWzZdOworCXU4IG1hY2FkZHJBWzZdOwogfTsKIAotI2RlZmluZSBBVEtfRlJVX0ZPUk1BVCAgICAgICAgMHgwMAotI2RlZmluZSBWRU5ET1IxX0ZSVV9GT1JNQVQgICAgMHgwMQotI2RlZmluZSBWRU5ET1IyX0ZSVV9GT1JNQVQgICAgMHgwMgotI2RlZmluZSBWRU5ET1IzX0ZSVV9GT1JNQVQgICAgMHgwMwotI2RlZmluZSBWRU5ET1I0X0ZSVV9GT1JNQVQgICAgMHgwNAotI2RlZmluZSBOT19GUlVfRk9STUFUICAgICAgICAgMHhGRgorI2RlZmluZSBBVEtfRlJVX0ZPUk1BVAkJMHgwMAorI2RlZmluZSBWRU5ET1IxX0ZSVV9GT1JNQVQJMHgwMQorI2RlZmluZSBWRU5ET1IyX0ZSVV9GT1JNQVQJMHgwMgorI2RlZmluZSBWRU5ET1IzX0ZSVV9GT1JNQVQJMHgwMworI2RlZmluZSBWRU5ET1I0X0ZSVV9GT1JNQVQJMHgwNAorI2RlZmluZSBOT19GUlVfRk9STUFUCQkweEZGCiAKIHN0cnVjdCBhdGtfZnJ1IHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBhc3NlbWJseVs2XTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICByZXZpc2lvblsyXTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXJpYWxbMTRdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFszXTsKKwl1OCBhc3NlbWJseVs2XTsKKwl1OCByZXZpc2lvblsyXTsKKwl1OCBzZXJpYWxbMTRdOworCXU4IHBhZFszXTsKIH07CiAKIHN0cnVjdCB2ZW5kb3IxX2ZydSB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgY29tbW9kaXR5OwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzRdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHN1cHBsaWVyWzJdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGRhdGVbMl07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VxdWVuY2VbM107Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzEzXTsKKwl1OCBjb21tb2RpdHk7CisJdTggYXNzZW1ibHlbNF07CisJdTggcmV2aXNpb25bMl07CisJdTggc3VwcGxpZXJbMl07CisJdTggZGF0ZVsyXTsKKwl1OCBzZXF1ZW5jZVszXTsKKwl1OCBwYWRbMTNdOwogfTsKIAogc3RydWN0IHZlbmRvcjJfZnJ1IHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYXJ0WzhdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHN1cHBsaWVyWzVdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGRhdGVbM107Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VxdWVuY2VbNF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzddOworCXU4IHBhcnRbOF07CisJdTggc3VwcGxpZXJbNV07CisJdTggZGF0ZVszXTsKKwl1OCBzZXF1ZW5jZVs0XTsKKwl1OCBwYWRbN107CiB9OwogCiBzdHJ1Y3QgdmVuZG9yM19mcnUgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzZdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcmlhbFsxNF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzNdOworCXU4IGFzc2VtYmx5WzZdOworCXU4IHJldmlzaW9uWzJdOworCXU4IHNlcmlhbFsxNF07CisJdTggcGFkWzNdOwogfTsKIAogc3RydWN0IHZlbmRvcjRfZnJ1IHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBudW1iZXJbOF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFydFs4XTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICB2ZXJzaW9uWzhdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFszXTsKKwl1OCBudW1iZXJbOF07CisJdTggcGFydFs4XTsKKwl1OCB2ZXJzaW9uWzhdOworCXU4IHBhZFszXTsKIH07CiAKIHVuaW9uIG9lbWZydSB7Ci0gICAgc3RydWN0IHZlbmRvcjFfZnJ1ICAgdmVuZG9yMV9mcnU7Ci0gICAgc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7Ci0gICAgc3RydWN0IHZlbmRvcjNfZnJ1ICAgdmVuZG9yM19mcnU7Ci0gICAgc3RydWN0IHZlbmRvcjRfZnJ1ICAgdmVuZG9yNF9mcnU7CisJc3RydWN0IHZlbmRvcjFfZnJ1IHZlbmRvcjFfZnJ1OworCXN0cnVjdCB2ZW5kb3IyX2ZydSB2ZW5kb3IyX2ZydTsKKwlzdHJ1Y3QgdmVuZG9yM19mcnUgdmVuZG9yM19mcnU7CisJc3RydWN0IHZlbmRvcjRfZnJ1IHZlbmRvcjRfZnJ1OwogfTsKIAogLyoKLSAgIFNMSUMgRUVQUk9NIHN0cnVjdHVyZSBmb3IgTW9qYXZlCi0qLworICogU0xJQyBFRVBST00gc3RydWN0dXJlIGZvciBNb2phdmUKKyAqLwogc3RydWN0IHNsaWNfZWVwcm9tIHsKLQl1c2hvcnQJCUlkOwkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnKi8KLQl1c2hvcnQJCUVlY29kZVNpemU7CS8qIDAxIFNpemUgb2YgRUVQUk9NIENvZGVzIChieXRlcyAqIDQpKi8KLQl1c2hvcnQJCUZsYXNoU2l6ZTsJLyogMDIgRmxhc2ggc2l6ZSAqLwotCXVzaG9ydAkJRWVwcm9tU2l6ZTsJLyogMDMgRUVQUk9NIFNpemUgKi8KLQl1c2hvcnQJCVZlbmRvcklkOwkvKiAwNCBWZW5kb3IgSUQgKi8KLQl1c2hvcnQJCURldmljZUlkOwkvKiAwNSBEZXZpY2UgSUQgKi8KLQl1bnNpZ25lZCBjaGFyCQlSZXZpc2lvbklkOwkvKiAwNiBSZXZpc2lvbiBJRCAqLwotCXVuc2lnbmVkIGNoYXIJCUNsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSAqLwotCXVuc2lnbmVkIGNoYXIJCURiZ0ludFBpbjsJLyogMDggRGVidWcgSW50ZXJydXB0IHBpbiAqLwotCXVuc2lnbmVkIGNoYXIJCU5ldEludFBpbjA7CS8qICAgIE5ldHdvcmsgSW50ZXJydXB0IFBpbiAqLwotCXVuc2lnbmVkIGNoYXIJCU1pbkdyYW50OwkvKiAwOSBNaW5pbXVtIGdyYW50ICovCi0JdW5zaWduZWQgY2hhcgkJTWF4TGF0OwkJLyogICAgTWF4aW11bSBMYXRlbmN5ICovCi0JdXNob3J0CQlQY2lTdGF0dXM7CS8qIDEwIFBDSSBTdGF0dXMgKi8KLQl1c2hvcnQJCVN1YlN5c1ZJZDsJLyogMTEgU3Vic3lzdGVtIFZlbmRvciBJZCAqLwotCXVzaG9ydAkJU3ViU3lzSWQ7CS8qIDEyIFN1YnN5c3RlbSBJRCAqLwotCXVzaG9ydAkJRGJnRGV2SWQ7CS8qIDEzIERlYnVnIERldmljZSBJZCAqLwotCXVzaG9ydAkJRHJhbVJvbUZuOwkvKiAxNCBEcmFtL1JvbSBmdW5jdGlvbiAqLwotCXVzaG9ydAkJRFNpemUyUGNpOwkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAqIDY0SykgKi8KLQl1c2hvcnQJUlNpemUyUGNpOwkvKiAxNiBST00gZXh0ZW5zaW9uIHNpemUgdG8gUENJIChieXRlcyAqIDRrKSAqLwotCXVuc2lnbmVkIGNoYXIgTmV0SW50UGluMTsvKiAxNyBOZXR3b3JrIEludGVyZmFjZSBQaW4gMQorCXUxNiBJZDsJCQkvKiAwMCBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScqLworCXUxNiBFZWNvZGVTaXplOwkJLyogMDEgU2l6ZSBvZiBFRVBST00gQ29kZXMgKGJ5dGVzICogNCkqLworCXUxNiBGbGFzaFNpemU7CQkvKiAwMiBGbGFzaCBzaXplICovCisJdTE2IEVlcHJvbVNpemU7CQkvKiAwMyBFRVBST00gU2l6ZSAqLworCXUxNiBWZW5kb3JJZDsJCS8qIDA0IFZlbmRvciBJRCAqLworCXUxNiBEZXZpY2VJZDsJCS8qIDA1IERldmljZSBJRCAqLworCXU4IFJldmlzaW9uSWQ7CQkvKiAwNiBSZXZpc2lvbiBJRCAqLworCXU4IENsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSAqLworCXU4IERiZ0ludFBpbjsJCS8qIDA4IERlYnVnIEludGVycnVwdCBwaW4gKi8KKwl1OCBOZXRJbnRQaW4wOwkJLyogICAgTmV0d29yayBJbnRlcnJ1cHQgUGluICovCisJdTggTWluR3JhbnQ7CQkvKiAwOSBNaW5pbXVtIGdyYW50ICovCisJdTggTWF4TGF0OwkJLyogICAgTWF4aW11bSBMYXRlbmN5ICovCisJdTE2IFBjaVN0YXR1czsJCS8qIDEwIFBDSSBTdGF0dXMgKi8KKwl1MTYgU3ViU3lzVklkOwkJLyogMTEgU3Vic3lzdGVtIFZlbmRvciBJZCAqLworCXUxNiBTdWJTeXNJZDsJCS8qIDEyIFN1YnN5c3RlbSBJRCAqLworCXUxNiBEYmdEZXZJZDsJCS8qIDEzIERlYnVnIERldmljZSBJZCAqLworCXUxNiBEcmFtUm9tRm47CQkvKiAxNCBEcmFtL1JvbSBmdW5jdGlvbiAqLworCXUxNiBEU2l6ZTJQY2k7CQkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAqIDY0SykgKi8KKwl1MTYgUlNpemUyUGNpOwkJLyogMTYgUk9NIGV4dGVuc2lvbiBzaXplIHRvIFBDSSAoYnl0ZXMgKiA0aykgKi8KKwl1OCBOZXRJbnRQaW4xOwkJLyogMTcgTmV0d29yayBJbnRlcmZhY2UgUGluIDEKIAkJCQkgICAgKHNpbWJhL2xlb25lIG9ubHkpICovCi0JdW5zaWduZWQgY2hhciBOZXRJbnRQaW4yOyAvKk5ldHdvcmsgSW50ZXJmYWNlIFBpbiAyIChzaW1iYS9sZW9uZSBvbmx5KSovCisJdTggTmV0SW50UGluMjsJCS8qIE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAyIChzaW1iYS9sZW9uZSBvbmx5KSovCiAJdW5pb24gewotCQl1bnNpZ25lZCBjaGFyIE5ldEludFBpbjM7LyoxOCBOZXR3b3JrIEludGVyZmFjZSBQaW4gMwotCQkJCQkgICAoc2ltYmEgb25seSkqLwotCQl1bnNpZ25lZCBjaGFyIEZyZWVUaW1lOy8qRnJlZVRpbWUgc2V0dGluZyAobGVvbmUvbW9qYXZlIG9ubHkpICovCisJCXU4IE5ldEludFBpbjM7CS8qIDE4IE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAzIChzaW1iYSBvbmx5KSAqLworCQl1OCBGcmVlVGltZTsJLyogRnJlZVRpbWUgc2V0dGluZyAobGVvbmUvbW9qYXZlIG9ubHkpICovCiAJfSB1MTsKLQl1bnNpZ25lZCBjaGFyCVRCSWN0bDsJLyogICAgMTAtYml0IGludGVyZmFjZSBjb250cm9sIChNb2phdmUgb25seSkgKi8KLQl1c2hvcnQJCURyYW1TaXplOwkvKiAxOSBEUkFNIHNpemUgKGJ5dGVzICogNjRrKSAqLworCXU4IFRCSWN0bDsJCS8qIDEwLWJpdCBpbnRlcmZhY2UgY29udHJvbCAoTW9qYXZlIG9ubHkpICovCisJdTE2IERyYW1TaXplOwkJLyogMTkgRFJBTSBzaXplIChieXRlcyAqIDY0aykgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQkvKiBNYWMgSW50ZXJmYWNlIFNwZWNpZmljIHBvcnRpb25zICovCkBAIC03NTAsNjcgKzczNCw2NCBAQAogCQlzdHJ1Y3QgewogCQkJLyogdXNlIGFib3ZlIHN0cnVjdCBmb3IgTUFDIGFjY2VzcyAqLwogCQkJc3RydWN0IHNsaWNfY29uZmlnX21hYwlwYWRbU0xJQ19OQlJfTUFDUyAtIDFdOwotCQkJdXNob3J0CQlEZXZpY2VJZDI7CS8qIERldmljZSBJRCBmb3IgMm5kCi0JCQkJCQkJCVBDSSBmdW5jdGlvbiAqLwotCQkJdW5zaWduZWQgY2hhcglJbnRQaW4yOwkvKiBJbnRlcnJ1cHQgcGluIGZvcgotCQkJCQkJCSAgIDJuZCBQQ0kgZnVuY3Rpb24gKi8KLQkJCXVuc2lnbmVkIGNoYXIJQ2xhc3NDb2RlMlszXTsJLyogQ2xhc3MgQ29kZSBmb3IgMm5kCi0JCQkJCQkJCVBDSSBmdW5jdGlvbiAqLworCQkJdTE2IERldmljZUlkMjsJLyogRGV2aWNlIElEIGZvciAybmQgUENJIGZ1bmN0aW9uICovCisJCQl1OCBJbnRQaW4yOwkvKiBJbnRlcnJ1cHQgcGluIGZvciAybmQgUENJIGZ1bmN0aW9uICovCisJCQl1OCBDbGFzc0NvZGUyWzNdOyAvKiBDbGFzcyBDb2RlIGZvciAybmQgUENJIGZ1bmN0aW9uICovCiAJCX0gbW9qYXZlOwkvKiAybmQgZnVuY3Rpb24gYWNjZXNzIGZvciBnaWdhYml0IGJvYXJkICovCiAJfSB1MjsKLQl1c2hvcnQJCUNmZ0J5dGU2OwkvKiBDb25maWcgQnl0ZSA2ICovCi0JdXNob3J0CQlQTUVDYXBhYjsJLyogUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLwotCXVzaG9ydAkJTndDbGtDdHJsczsJLyogTmV0d29ya0Nsb2NrQ29udHJvbHMgKi8KLQl1bnNpZ25lZCBjaGFyCUZydUZvcm1hdDsJLyogQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KLQlzdHJ1Y3QgYXRrX2ZydSAgIEF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLwotCXVuaW9uIG9lbWZydSAgICBPZW1GcnU7ICAgICAgICAgLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJUGFkWzRdOwkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBja3N1bSBieXRlcwotCQkJCSAqKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKKwl1MTYgQ2ZnQnl0ZTY7CQkvKiBDb25maWcgQnl0ZSA2ICovCisJdTE2IFBNRUNhcGFiOwkJLyogUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLworCXUxNiBOd0Nsa0N0cmxzOwkJLyogTmV0d29ya0Nsb2NrQ29udHJvbHMgKi8KKwl1OCBGcnVGb3JtYXQ7CQkvKiBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLworCXN0cnVjdCBhdGtfZnJ1ICBBdGtGcnU7CS8qIEFsYWNyaXRlY2ggRlJVIGluZm9ybWF0aW9uICovCisJdTggT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24gb2VtZnJ1IE9lbUZydTsJLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXU4CVBhZFs0XTsJCS8qIFBhZCB0byAxMjggYnl0ZXMgLSBpbmNsdWRlcyAyIGNrc3VtIGJ5dGVzCisJCQkJICogKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKIAkJCQkgKiBieXRlcyBhdCB0aGUgZW5kICovCiB9OwogCiAvKiBTTElDIEVFUFJPTSBzdHJ1Y3R1cmUgZm9yIE9hc2lzICovCiBzdHJ1Y3Qgb3NsaWNfZWVwcm9tIHsKLQl1c2hvcnQJCUlkOwkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCi0JdXNob3J0CQlFZWNvZGVTaXplOwkvKiAwMSBTaXplIG9mIEVFUFJPTSBDb2RlcyAoYnl0ZXMgKiA0KSovCi0JdXNob3J0CQlGbGFzaENvbmZpZzA7CS8qIDAyIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAwICovCi0JdXNob3J0CQlGbGFzaENvbmZpZzE7CS8qIDAzIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAxICovCi0JdXNob3J0CQlWZW5kb3JJZDsJLyogMDQgVmVuZG9yIElEICovCi0JdXNob3J0CQlEZXZpY2VJZDsJLyogMDUgRGV2aWNlIElEIChmdW5jdGlvbiAwKSAqLwotCXVuc2lnbmVkIGNoYXIJUmV2aXNpb25JZDsJLyogMDYgUmV2aXNpb24gSUQgKi8KLQl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSBmb3IgUENJIGZ1bmN0aW9uIDAgKi8KLQl1bnNpZ25lZCBjaGFyCUludFBpbjE7CS8qIDA4IEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAxKi8KLQl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZTJbM107CS8qIDA5IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAxICovCi0JdW5zaWduZWQgY2hhcglJbnRQaW4yOwkvKiAxMCBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMiovCi0JdW5zaWduZWQgY2hhcglJbnRQaW4wOwkvKiAgICBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMCovCi0JdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDExIE1pbmltdW0gZ3JhbnQgKi8KLQl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KLQl1c2hvcnQJCVN1YlN5c1ZJZDsJLyogMTIgU3Vic3lzdGVtIFZlbmRvciBJZCAqLwotCXVzaG9ydAkJU3ViU3lzSWQ7CS8qIDEzIFN1YnN5c3RlbSBJRCAqLwotCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAxNCBGbGFzaCBzaXplIChieXRlcyAvIDRLKSAqLwotCXVzaG9ydAkJRFNpemUyUGNpOwkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAvIDY0SykgKi8KLQl1c2hvcnQJCVJTaXplMlBjaTsJLyogMTYgRmxhc2ggKFJPTSBleHRlbnNpb24pIHNpemUgdG8KLQkJCQkJCVBDSSAoYnl0ZXMgLyA0SykgKi8KLQl1c2hvcnQJCURldmljZUlkMTsJLyogMTcgRGV2aWNlIElkIChmdW5jdGlvbiAxKSAqLwotCXVzaG9ydAkJRGV2aWNlSWQyOwkvKiAxOCBEZXZpY2UgSWQgKGZ1bmN0aW9uIDIpICovCi0JdXNob3J0CQlDZmdCeXRlNjsJLyogMTkgRGV2aWNlIFN0YXR1cyBDb25maWcgQnl0ZXMgNi03ICovCi0JdXNob3J0CQlQTUVDYXBhYjsJLyogMjAgUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLwotCXVuc2lnbmVkIGNoYXIJCU1TSUNhcGFiOwkvKiAyMSBNU0kgY2FwYWJpbGl0aWVzICovCi0JdW5zaWduZWQgY2hhcgkJQ2xvY2tEaXZpZGVyOwkvKiAgICBDbG9jayBkaXZpZGVyICovCi0JdXNob3J0CQlQY2lTdGF0dXNMb3c7CS8qIDIyIFBDSSBTdGF0dXMgYml0cyAxNTowICovCi0JdXNob3J0CQlQY2lTdGF0dXNIaWdoOwkvKiAyMyBQQ0kgU3RhdHVzIGJpdHMgMzE6MTYgKi8KLQl1c2hvcnQJCURyYW1Db25maWdMb3c7CS8qIDI0IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDE1OjAgKi8KLQl1c2hvcnQJCURyYW1Db25maWdIaWdoOwkvKiAyNSBEUkFNIENvbmZpZ3VyYXRpb24gYml0cyAzMToxNiAqLwotCXVzaG9ydAkJRHJhbVNpemU7CS8qIDI2IERSQU0gc2l6ZSAoYnl0ZXMgLyA2NEspICovCi0JdXNob3J0CQlHcGlvVGJpQ3RsOy8qIDI3IEdQSU8vVEJJIGNvbnRyb2xzIGZvciBmdW5jdGlvbnMgMS8wICovCi0JdXNob3J0CQlFZXByb21TaXplOwkJLyogMjggRUVQUk9NIFNpemUgKi8KKwl1MTYgSWQ7CQkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCisJdTE2IEVlY29kZVNpemU7CQkvKiAwMSBTaXplIG9mIEVFUFJPTSBDb2RlcyAoYnl0ZXMgKiA0KSovCisJdTE2IEZsYXNoQ29uZmlnMDsJLyogMDIgRmxhc2ggQ29uZmlnIGZvciBTUEkgZGV2aWNlIDAgKi8KKwl1MTYgRmxhc2hDb25maWcxOwkvKiAwMyBGbGFzaCBDb25maWcgZm9yIFNQSSBkZXZpY2UgMSAqLworCXUxNiBWZW5kb3JJZDsJCS8qIDA0IFZlbmRvciBJRCAqLworCXUxNiBEZXZpY2VJZDsJCS8qIDA1IERldmljZSBJRCAoZnVuY3Rpb24gMCkgKi8KKwl1OCBSZXZpc2lvbklkOwkJLyogMDYgUmV2aXNpb24gSUQgKi8KKwl1OCBDbGFzc0NvZGVbM107CS8qIDA3IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAwICovCisJdTggSW50UGluMTsJCS8qIDA4IEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAxKi8KKwl1OCBDbGFzc0NvZGUyWzNdOwkvKiAwOSBDbGFzcyBDb2RlIGZvciBQQ0kgZnVuY3Rpb24gMSAqLworCXU4IEludFBpbjI7CQkvKiAxMCBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMiovCisJdTggSW50UGluMDsJCS8qICAgIEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAwKi8KKwl1OCBNaW5HcmFudDsJCS8qIDExIE1pbmltdW0gZ3JhbnQgKi8KKwl1OCBNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1MTYgU3ViU3lzVklkOwkJLyogMTIgU3Vic3lzdGVtIFZlbmRvciBJZCAqLworCXUxNiBTdWJTeXNJZDsJCS8qIDEzIFN1YnN5c3RlbSBJRCAqLworCXUxNiBGbGFzaFNpemU7CQkvKiAxNCBGbGFzaCBzaXplIChieXRlcyAvIDRLKSAqLworCXUxNiBEU2l6ZTJQY2k7CQkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAvIDY0SykgKi8KKwl1MTYgUlNpemUyUGNpOwkJLyogMTYgRmxhc2ggKFJPTSBleHRlbnNpb24pIHNpemUgdG8gUENJCisJCQkJCShieXRlcyAvIDRLKSAqLworCXUxNiBEZXZpY2VJZDE7CQkvKiAxNyBEZXZpY2UgSWQgKGZ1bmN0aW9uIDEpICovCisJdTE2IERldmljZUlkMjsJCS8qIDE4IERldmljZSBJZCAoZnVuY3Rpb24gMikgKi8KKwl1MTYgQ2ZnQnl0ZTY7CQkvKiAxOSBEZXZpY2UgU3RhdHVzIENvbmZpZyBCeXRlcyA2LTcgKi8KKwl1MTYgUE1FQ2FwYWI7CQkvKiAyMCBQb3dlciBNZ21lbnQgY2FwYWJpbGl0aWVzICovCisJdTggTVNJQ2FwYWI7CQkvKiAyMSBNU0kgY2FwYWJpbGl0aWVzICovCisJdTggQ2xvY2tEaXZpZGVyOwkvKiAgICBDbG9jayBkaXZpZGVyICovCisJdTE2IFBjaVN0YXR1c0xvdzsJLyogMjIgUENJIFN0YXR1cyBiaXRzIDE1OjAgKi8KKwl1MTYgUGNpU3RhdHVzSGlnaDsJLyogMjMgUENJIFN0YXR1cyBiaXRzIDMxOjE2ICovCisJdTE2IERyYW1Db25maWdMb3c7CS8qIDI0IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDE1OjAgKi8KKwl1MTYgRHJhbUNvbmZpZ0hpZ2g7CS8qIDI1IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDMxOjE2ICovCisJdTE2IERyYW1TaXplOwkJLyogMjYgRFJBTSBzaXplIChieXRlcyAvIDY0SykgKi8KKwl1MTYgR3Bpb1RiaUN0bDsJCS8qIDI3IEdQSU8vVEJJIGNvbnRyb2xzIGZvciBmdW5jdGlvbnMgMS8wICovCisJdTE2IEVlcHJvbVNpemU7CQkvKiAyOCBFRVBST00gU2l6ZSAqLwogCXN0cnVjdCBzbGljX2NvbmZpZ19tYWMgTWFjSW5mb1syXTsJLyogMjkgTUFDIGFkZHJlc3NlcyAoMiBwb3J0cykgKi8KLQl1bnNpZ25lZCBjaGFyCUZydUZvcm1hdDsJLyogMzUgQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KKwl1OCBGcnVGb3JtYXQ7CQkvKiAzNSBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLwogCXN0cnVjdCBhdGtfZnJ1CUF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLwotCXVuaW9uIG9lbWZydSAgICBPZW1GcnU7ICAgICAgICAgLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJUGFkWzRdOwkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBjaGVja3N1bSBieXRlcworCXU4IE9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXVuaW9uIG9lbWZydSBPZW1GcnU7CS8qIG9wdGlvbmFsIE9FTSBGUlUgaW5mb3JtYXRpb24gKi8KKwl1OCBQYWRbNF07CQkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBjaGVja3N1bSBieXRlcwogCQkJCSAqIChpZiBPRU0gRlJVIGluZm8gZXhpc3RzKSBhbmQgdHdvIHVudXNhYmxlCiAJCQkJICogYnl0ZXMgYXQgdGhlIGVuZAogCQkJCSAqLwpAQCAtODE5LDI0ICs4MDAsMjUgQEAKICNkZWZpbmUJTUFYX0VFQ09ERV9TSVpFCXNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pCiAjZGVmaW5lIE1JTl9FRUNPREVfU0laRQkweDYyCS8qIGNvZGUgc2l6ZSB3aXRob3V0IG9wdGlvbmFsIE9FTSBGUlUgc3R1ZmYgKi8KIAotLyogU0xJQyBDT05GSUcgc3RydWN0dXJlCi0KLSBUaGlzIHN0cnVjdHVyZSBsaXZlcyBpbiB0aGUgQ0FSRCBzdHJ1Y3R1cmUgYW5kIGlzIHZhbGlkIGZvciBhbGwKLSBib2FyZCB0eXBlcy4gIEl0IGlzIGZpbGxlZCBpbiBmcm9tIHRoZSBhcHByb3ByaWF0ZSBFRVBST00gc3RydWN0dXJlCi0gYnkgU2xpY0dldENvbmZpZ0RhdGEoKS4KLSovCisvKgorICogU0xJQyBDT05GSUcgc3RydWN0dXJlCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdGhlIENBUkQgc3RydWN0dXJlIGFuZCBpcyB2YWxpZCBmb3IgYWxsIGJvYXJkIHR5cGVzLgorICogSXQgaXMgZmlsbGVkIGluIGZyb20gdGhlIGFwcHJvcHJpYXRlIEVFUFJPTSBzdHJ1Y3R1cmUgYnkKKyAqIFNsaWNHZXRDb25maWdEYXRhKCkKKyAqLwogc3RydWN0IHNsaWNfY29uZmlnIHsKIAlib29sIEVlcHJvbVZhbGlkOwkvKiBWYWxpZCBFRVBST00gZmxhZyAoY2hlY2tzdW0gZ29vZD8pICovCi0JdXNob3J0CQlEcmFtU2l6ZTsJLyogRFJBTSBzaXplIChieXRlcyAvIDY0SykgKi8KKwl1MTYgRHJhbVNpemU7CQkvKiBEUkFNIHNpemUgKGJ5dGVzIC8gNjRLKSAqLwogCXN0cnVjdCBzbGljX2NvbmZpZ19tYWMgTWFjSW5mb1tTTElDX05CUl9NQUNTXTsgLyogTUFDIGFkZHJlc3NlcyAqLwotCXVuc2lnbmVkIGNoYXIJCUZydUZvcm1hdDsJLyogQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KKwl1OCBGcnVGb3JtYXQ7CQkvKiBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLwogCXN0cnVjdCBhdGtfZnJ1CUF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KLQl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXU4IE9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLwogCXVuaW9uIHsKLQkJc3RydWN0IHZlbmRvcjFfZnJ1ICAgdmVuZG9yMV9mcnU7Ci0JCXN0cnVjdCB2ZW5kb3IyX2ZydSAgIHZlbmRvcjJfZnJ1OwotCQlzdHJ1Y3QgdmVuZG9yM19mcnUgICB2ZW5kb3IzX2ZydTsKLQkJc3RydWN0IHZlbmRvcjRfZnJ1ICAgdmVuZG9yNF9mcnU7CisJCXN0cnVjdCB2ZW5kb3IxX2ZydSB2ZW5kb3IxX2ZydTsKKwkJc3RydWN0IHZlbmRvcjJfZnJ1IHZlbmRvcjJfZnJ1OworCQlzdHJ1Y3QgdmVuZG9yM19mcnUgdmVuZG9yM19mcnU7CisJCXN0cnVjdCB2ZW5kb3I0X2ZydSB2ZW5kb3I0X2ZydTsKIAl9IE9lbUZydTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNpbmMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNpbmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyODhjNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgotICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZwotICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEZJTEVOQU1FOiBzbGljaW5jLmgKLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG90aGVyIGluY2x1ZGUgZmlsZXMgYW5kIHByb3RvdHlwZSBkZWZpbml0aW9ucwotICogZm9yIHRoZSBTTElDT1NTIGRyaXZlci4KLSAqLwotI2lmbmRlZiBfU0xJQ19JTkNMVURFX0hfCi0jZGVmaW5lIF9TTElDX0lOQ0xVREVfSF8KLQotI2luY2x1ZGUgInNsaWNfb3MuaCIKLSNpbmNsdWRlICJzbGljZGJnLmgiCi0jaW5jbHVkZSAic2xpY2h3LmgiCi0jaW5jbHVkZSAic2xpYy5oIgotCi1zdGF0aWMgaW50IHNsaWNfZW50cnlfcHJvYmUoc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAgICpwY2lkZXYsCi0JCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAgKmVudCk7Ci1zdGF0aWMgdm9pZCBzbGljX2VudHJ5X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKLQotc3RhdGljIHZvaWQgc2xpY19pbml0X2RyaXZlcih2b2lkKTsKLXN0YXRpYyBpbnQgIHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIHNsaWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgaW50ICBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBzbGljX3htaXRfZmFpbChzdHJ1Y3QgYWRhcHRlciAgICAqYWRhcHRlciwKLQkJCXN0cnVjdCBza19idWZmICAgKnNrYiwKLQkJCXZvaWQgKmNtZCwKLQkJCXUzMiAgICAgICAgICAgc2tidHlwZSwKLQkJCXUzMiAgICAgICAgICAgc3RhdHVzKTsKLXN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2xpY19yY3ZxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgdWludCBmbHVzaCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWc2NF93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdm9pZCBfX2lvbWVtICpyZWcsCi0JdTMyIHZhbHVlLCB2b2lkIF9faW9tZW0gKnJlZ2gsIHUzMiBwYWRkcmgsIHVpbnQgZmx1c2gpOwotCi0jaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IHNsaWNfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cik7Ci1zdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbGlua19ldmVudF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgaXNyKTsKLXN0YXRpYyBpbnQgICBzbGljX3JzcHF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgIHNsaWNfcnNwcXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfcnNwcXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgc3RydWN0IHNsaWNfcnNwYnVmICpzbGljX3JzcHF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcW1lbV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkICBzbGljX2NtZHFtZW1fZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdTMyICpzbGljX2NtZHFtZW1fYWRkcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50ICAgc2xpY19jbWRxX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkICBzbGljX2NtZHFfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcV9hZGRjbWRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgKnBhZ2UpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcV9nZXRkb25lKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkICBzbGljX2NtZHFfcHV0ZG9uZV9pcnEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCQlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQpOwotc3RhdGljIHN0cnVjdCBzbGljX2hvc3RjbWQgKnNsaWNfY21kcV9nZXRmcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgICBzbGljX3JjdnF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgIHNsaWNfcmN2cXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgIHNsaWNfcmN2cXVldWVfZmlsbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdTMyIHNsaWNfcmN2cXVldWVfcmVpbnNlcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgIHNsaWNfcmN2cXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVfZXJyb3Ioc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmKTsKLXN0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgc2xpY19jYXJkX2luaXQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2ludGFnZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2YWx1ZSk7Ci1zdGF0aWMgaW50ICBzbGljX2NhcmRfZG93bmxvYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHUzMiBzbGljX2NhcmRfbG9jYXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLQotc3RhdGljIHZvaWQgc2xpY19pZl9zdG9wX3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfaWZfc3RhcnRfcXVldWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgc2xpY19pZl9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgIHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2xpbmtfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgbGlua3NwZWVkLAotCQkJdTMyIGxpbmtkdXBsZXgpOwotc3RhdGljIHZvaWQgc2xpY191bm1hcF9tbWlvX3NwYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfY2FyZF9jbGVhbnVwKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBzbGljX2luaXRfY2xlYW51cChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX3NvZnRfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGJvb2wgc2xpY19tYWNfZmlsdGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJc3RydWN0IGV0aGVyX2hlYWRlciAqZXRoZXJfZnJhbWUpOwotc3RhdGljIHZvaWQgc2xpY19tYWNfYWRkcmVzc19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19tYWNfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X21hc2soc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBzbGljX21jYXN0X2FkZF9saXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNsaWNfbWNhc3RfZ2V0X21hY19oYXNoKGNoYXIgKm1hY2FkZHIpOwotc3RhdGljIHZvaWQgIHNsaWNfbWNhc3Rfc2V0X2JpdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY2hhciAqYWRkcmVzcyk7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua2NoYW5nZSk7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19nZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcsCi0JCQl1MzIgY29uZmlnaCk7Ci1zdGF0aWMgdm9pZCBzbGljX3RpbWVyX2xvYWRfY2hlY2sodWxvbmcgY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBzbGljX3RpbWVyX3BpbmcodWxvbmcgZGV2KTsKLXN0YXRpYyB2b2lkIHNsaWNfYXNzZXJ0X2ZhaWwodm9pZCk7Ci1zdGF0aWMgdXNob3J0IHNsaWNfZWVwcm9tX2Nrc3VtKGNoYXIgKm0sIGludCBsZW4pOwotLyogdXByICovCi1zdGF0aWMgdm9pZCBzbGljX3Vwcl9zdGFydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2xpbmtfdXByX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgSXNyKTsKLXN0YXRpYyBpbnQgIHNsaWNfdXByX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgICAgKmFkYXB0ZXIsCi0JCQl1MzIgICAgICAgICAgICB1cHJfcmVxdWVzdCwKLQkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhLAotCQkJdTMyICAgICAgICAgICAgdXByX2RhdGFfaCwKLQkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXIsCi0JCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyX2gpOwotc3RhdGljIGludCAgc2xpY191cHJfcXVldWVfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAgICAgICphZGFwdGVyLAotCQkJCXUzMiAgICAgICAgICAgIHVwcl9yZXF1ZXN0LAotCQkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhLAotCQkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhX2gsCi0JCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlciwKLQkJCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyX2gpOwotc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHNsaWNfbWNhc3RfaW5pdF9jcmMzMih2b2lkKTsKLQotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi1zdGF0aWMgaW50ICAgc2xpY19kdW1wX3RocmVhZCh2b2lkICpjb250ZXh0KTsKLXN0YXRpYyB1aW50ICBzbGljX2luaXRfZHVtcF90aHJlYWQoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNsaWNfZ2V0X2R1bXBfaW5kZXgoY2hhciAqcGF0aCk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9jYXJkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgYm9vbCByZXN1bWUpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfaGFsdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYyk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9yZWcoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfZGF0YShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBhZGRyLAotCQkJdXNob3J0IGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgYnVmX3BoeXMsCi0JCQl1MzIgYnVmX3BoeXNoLCB1MzIgcXVldWUpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfbG9hZF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBkYXRhLAotCQkJCXUzMiBxdWV1ZSk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9jYW0oc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgYWRkciwKLQkJCXUzMiBjb3VudCwgdW5zaWduZWQgY2hhciBkZXNjKTsKLQotc3RhdGljIHUzMiBzbGljX2R1bXBfcmVzdW1lKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKTsKLXN0YXRpYyB1MzIgc2xpY19kdW1wX3NlbmRfY21kKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGNtZF9waHlzLAotCQkJCXUzMiBjbWRfcGh5c2gsIHUzMiBidWZfcGh5cywKLQkJCQl1MzIgYnVmX3BoeXNoKTsKLQotI2RlZmluZSBjcmVhdGVfZmlsZSh4KSAgICAgICAgIFNUQVRVU19TVUNDRVNTCi0jZGVmaW5lIHdyaXRlX2ZpbGUodywgeCwgeSwgeikgU1RBVFVTX1NVQ0NFU1MKLSNkZWZpbmUgY2xvc2VfZmlsZSh4KSAgICAgICAgICBTVEFUVVNfU1VDQ0VTUwotI2RlZmluZSByZWFkX2ZpbGUodywgeCwgeSwgeikgIFNUQVRVU19TVUNDRVNTCi0jZGVmaW5lIG9wZW5fZmlsZSh4KSAgICAgICAgICAgU1RBVFVTX1NVQ0NFU1MKLQotLyogUEFHRV9TSVpFICogMTYgKi8KLSNkZWZpbmUgRFVNUF9QQUdFX1NJWkUgICAgICAgICAweEZGRkYKLSNkZWZpbmUgRFVNUF9QQUdFX1NJWkVfSEFMRiAgICAweDdGRkUKLSNlbmRpZgotCi0jZW5kaWYgLyogX1NMSUNfSU5DTFVERV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCmluZGV4IGJmN2RhOGYuLjk1MzY4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKQEAgLTU1LDE5ICs1NSwxMCBAQAogICovCiAKIAotI2RlZmluZSBTTElDX0RVTVBfRU5BQkxFRCAgICAgICAgICAgICAgIDAKICNkZWZpbmUgS0xVREdFX0ZPUl80R0JfQk9VTkRBUlkgICAgICAgICAxCiAjZGVmaW5lIERFQlVHX01JQ1JPQ09ERSAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBTTElDX1BST0RVQ1RJT05fQlVJTEQJICAgICAgICAxCi0jZGVmaW5lIFNMSUNfRkFJTFVSRV9SRVNFVAkgICAgICAgICAgICAxCiAjZGVmaW5lIERCRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBTTElDX0FTU0VSVF9FTkFCTEVECQkgICAgICAgIDEKLSNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAkJCTEKLSNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAkwCi0jZGVmaW5lIFNMSUNfUElOR19USU1FUl9FTkFCTEVECQkgICAgMQotI2RlZmluZSBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkwCiAjZGVmaW5lIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQJMQotI2RlZmluZSBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwkxCiAjZGVmaW5lIFNMSUNfT0ZGTE9BRF9JUF9DSEVDS1NVTQkJMQogI2RlZmluZSBTVEFUU19USU1FUl9JTlRFUlZBTAkJCTIKICNkZWZpbmUgUElOR19USU1FUl9JTlRFUlZBTAkJCSAgICAxCkBAIC0xMDIsMjAgKzkzLDczIEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2RlZmluZSBTTElDX0VUSFRPT0xfU1VQUE9SVCAgICAgMQotCiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgInNsaWNpbmMuaCIKKyNpbmNsdWRlICJzbGljaHcuaCIKKyNpbmNsdWRlICJzbGljLmgiCiAKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotI2luY2x1ZGUgInNsaWNkdW1wLmgiCi0jZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzbGljX3htaXRfZmFpbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgIHZvaWQgKmNtZCwgdTMyIHNrYnR5cGUsIHUzMiBzdGF0dXMpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOworc3RhdGljIHN0cnVjdCBza19idWZmICpzbGljX3JjdnF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX21hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwdHIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcik7CitzdGF0aWMgaW50IHNsaWNfcnNwcXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX3JzcHF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBzbGljX3JzcGJ1ZiAqc2xpY19yc3BxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19jbWRxX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY21kcV9hZGRjbWRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgKnBhZ2UpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX2dldGRvbmUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX3B1dGRvbmVfaXJxKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCSAgc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kKTsKK3N0YXRpYyBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpzbGljX2NtZHFfZ2V0ZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfcmN2cXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfcmN2cXVldWVfZmlsbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdTMyIHNsaWNfcmN2cXVldWVfcmVpbnNlcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIHZvaWQgc2xpY19yY3ZxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19jYXJkX2luaXQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2ludGFnZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2YWx1ZSk7CitzdGF0aWMgaW50IHNsaWNfY2FyZF9kb3dubG9hZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdTMyIHNsaWNfY2FyZF9sb2NhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX2lmX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGxpbmtzcGVlZCwKKwkJCSAgICAgdTMyIGxpbmtkdXBsZXgpOworc3RhdGljIHZvaWQgc2xpY191bm1hcF9tbWlvX3NwYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY2FyZF9jbGVhbnVwKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CitzdGF0aWMgdm9pZCBzbGljX3NvZnRfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGJvb2wgc2xpY19tYWNfZmlsdGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJICAgIHN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aGVyX2ZyYW1lKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9tYXNrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgYm9vbCBsaW5rY2hhbmdlKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2dldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZywKKwkJCSAgICB1MzIgY29uZmlnaCk7CitzdGF0aWMgdm9pZCBzbGljX3RpbWVyX2xvYWRfY2hlY2sodWxvbmcgY29udGV4dCk7CitzdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpOworc3RhdGljIHVzaG9ydCBzbGljX2VlcHJvbV9ja3N1bShjaGFyICptLCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkIHNsaWNfdXByX3N0YXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbGlua191cHJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBJc3IpOworc3RhdGljIGludCAgc2xpY191cHJfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHVwcl9yZXF1ZXN0LAorCQkJICAgICB1MzIgdXByX2RhdGEsIHUzMiB1cHJfZGF0YV9oLCB1MzIgdXByX2J1ZmZlciwKKwkJCSAgICAgdTMyIHVwcl9idWZmZXJfaCk7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0jZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVCAgMAogCiBzdGF0aWMgdWludCBzbGljX2ZpcnN0X2luaXQgPSAxOwogc3RhdGljIGNoYXIgKnNsaWNfYmFubmVyID0gIkFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgIlwKLQkJImFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpXG4iOworCQkiYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3IgKE5vbi1BY2NlbGVyYXRlZCkiOwogCiBzdGF0aWMgY2hhciAqc2xpY19wcm9jX3ZlcnNpb24gPSAiMi4wLjM1MSAgMjAwNi8wNy8xNCAxMjoyNjowMCI7CiBzdGF0aWMgY2hhciAqc2xpY19wcm9kdWN0X25hbWUgPSAiU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgIlwKQEAgLTEyOSw4ICsxNzMsNiBAQAogc3RhdGljIHN0cnVjdCBiYXNlX2RyaXZlciBzbGljX2dsb2JhbCA9IHsge30sIDAsIDAsIDAsIDEsIE5VTEwsIE5VTEwgfTsKIHN0YXRpYyBpbnQgaW50YWdnX2RlbGF5ID0gMTAwOwogc3RhdGljIHUzMiBkeW5hbWljX2ludGFnZzsKLXN0YXRpYyBpbnQgZXJyb3Jtc2c7Ci1zdGF0aWMgaW50IGdvb2Rtc2c7CiBzdGF0aWMgdW5zaWduZWQgaW50IHJjdl9jb3VudDsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzbGljX2RlYnVnZnM7CiAKQEAgLTE2NCw2ICsyMDYsMjEgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNsaWNfcGNpX3RibCk7CiAKKyNpZmRlZiBBU1NFUlQKKyN1bmRlZiBBU1NFUlQKKyNlbmRpZgorCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkgZG8gewkJCQkJCQlcCisJaWYgKCEoYSkpIHsJCQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgInNsaWNvc3MgQVNTRVJUKCkgRmFpbHVyZTogZnVuY3Rpb24gJXMiCVwKKwkJCSJsaW5lICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwkJXAorCQlzbGljX2Fzc2VydF9mYWlsKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKICNkZWZpbmUgU0xJQ19HRVRfU0xJQ19IQU5ETEUoX2FkYXB0ZXIsIF9wc2xpY19oYW5kbGUpICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE5NSwxNyArMjUyLDE2IEBACiBzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfY3JlYXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CiBzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfZGVzdHJveShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCB1aW50IGZsdXNoKQorc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgYm9vbCBmbHVzaCkKIHsKIAl3cml0ZWwodmFsdWUsIHJlZyk7CiAJaWYgKGZsdXNoKQogCQltYigpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWc2NF93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgICB2b2lkIF9faW9tZW0gKnJlZywKLQkJCSAgICAgICB1MzIgdmFsdWUsCi0JCQkgICAgICAgdm9pZCBfX2lvbWVtICpyZWdoLCB1MzIgcGFkZHJoLCB1aW50IGZsdXNoKQorc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnNjRfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgX19pb21lbSAqcmVnLAorCQkJCSAgICB1MzIgdmFsdWUsIHZvaWQgX19pb21lbSAqcmVnaCwgdTMyIHBhZGRyaCwKKwkJCQkgICAgYm9vbCBmbHVzaCkKIHsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCiAJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKQEAgLTIyMyw0MyArMjc5LDEyIEBACiBzdGF0aWMgdm9pZCBzbGljX2luaXRfZHJpdmVyKHZvaWQpCiB7CiAJaWYgKHNsaWNfZmlyc3RfaW5pdCkgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBzbGljX2ZpcnN0X2luaXQgc2V0IGppZmZpZXNbJWx4XVxuIiwKLQkJCV9fZnVuY19fLCBqaWZmaWVzKTsKIAkJc2xpY19maXJzdF9pbml0ID0gMDsKIAkJc3Bpbl9sb2NrX2luaXQoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2spOwogCQlzbGljX2RlYnVnX2luaXQoKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNsaWNfZGJnX21hY2FkZHJzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCURCR19NU0coIiAgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOwotCURCR19NU0coIiAgKCVzKSBtYWMgICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm1hY2FkZHJbMF0sCi0JCWFkYXB0ZXItPm1hY2FkZHJbMV0sIGFkYXB0ZXItPm1hY2FkZHJbMl0sCi0JCWFkYXB0ZXItPm1hY2FkZHJbM10sIGFkYXB0ZXItPm1hY2FkZHJbNF0sIGFkYXB0ZXItPm1hY2FkZHJbNV0pOwotCXJldHVybjsKLX0KLQotI2lmZGVmIERFQlVHX1JFR0lTVEVSX1RSQUNFCi1zdGF0aWMgdm9pZCBzbGljX2RiZ19yZWdpc3Rlcl90cmFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJc3RydWN0IHNsaWNjYXJkICpjYXJkKQotewotCXVpbnQgaTsKLQotCURCR19FUlJPUigiRHVtcCBSZWdpc3RlciBXcml0ZSBUcmFjZTogY3Vycl9peCA9PSAlZFxuIiwgY2FyZC0+ZGVidWdfaXgpOwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCURCR19FUlJPUigiJTJkICVkICU0eCAleCAleFxuIiwKLQkJCSAgaSwgY2FyZC0+cmVnX3R5cGVbaV0sIGNhcmQtPnJlZ19vZmZzZXRbaV0sCi0JCQkgIGNhcmQtPnJlZ192YWx1ZVtpXSwgY2FyZC0+cmVnX3ZhbHVlaFtpXSk7Ci0JfQotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHNsaWNfaW5pdF9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAogCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnksCkBAIC0yNjgsOSArMjkzLDcgQEAKIAl1c2hvcnQgaW5kZXg7CiAJc3RydWN0IHNsaWNfaGFuZGxlICpwc2xpY19oYW5kbGU7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpOwotLyoKLSAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpXG4gICAgbmV0ZGV2IFslcF1cbiAgICBhZGFwdGVyWyVwXVxuICAgICIKLQkgICAgInBjaWRldiBbJXBdXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lLCBuZXRkZXYsIGFkYXB0ZXIsIHBjaWRldik7Ki8KKwogLyoJYWRhcHRlci0+cGNpZGV2ID0gcGNpZGV2OyovCiAJYWRhcHRlci0+dmVuZGlkID0gcGNpX3RibF9lbnRyeS0+dmVuZG9yOwogCWFkYXB0ZXItPmRldmlkID0gcGNpX3RibF9lbnRyeS0+ZGV2aWNlOwpAQCAtMzEwLDE5ICszMzMsMTEgQEAKIAkJcHNsaWNfaGFuZGxlLT5uZXh0ID0gYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzOwogCQlhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMgPSBwc2xpY19oYW5kbGU7CiAJfQotLyoKLSAgICBEQkdfTVNHKCIuLi4uLi4uLi5cbml4WyVkXSBwaGFuZGxlWyVwXSBwZnJlZVslcF0gbmV4dFslcF1cbiIsCi0JaW5kZXgsIHBzbGljX2hhbmRsZSwgYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzLCBwc2xpY19oYW5kbGUtPm5leHQpOyovCiAJYWRhcHRlci0+cHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopCiAJCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSwKIAkJCQkJJmFkYXB0ZXItPgogCQkJCQlwaHlzX3NobWVtKTsKLS8qCi0gICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpXG4gICBwc2htZW0gICAgWyVwXVxuICAgcGh5c19zaG1lbVslcF1cbiJcCi0JCSJzbGljX3JlZ3MgWyVwXVxuIiwgX19mdW5jX18sIG5ldGRldi0+bmFtZSwgYWRhcHRlci0+cHNobWVtLAotCQkodm9pZCAqKWFkYXB0ZXItPnBoeXNfc2htZW0sIGFkYXB0ZXItPnNsaWNfcmVncyk7Ci0qLwogCUFTU0VSVChhZGFwdGVyLT5wc2htZW0pOwogCiAJbWVtc2V0KGFkYXB0ZXItPnBzaG1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSk7CkBAIC0zMzUsNyArMzUwLDcgQEAKIHsKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwogCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb247Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gLUVOT0RFVjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwogCXZvaWQgX19pb21lbSAqbWVtbWFwcGVkX2lvYWRkciA9IE5VTEw7CkBAIC0zNDQsNTQgKzM1OSwzNiBAQAogCXVsb25nIG1taW9fbGVuID0gMDsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBOVUxMOwogCi0JREJHX01TRygic2xpY29zczogJXMgMi42IFZFUlNJT04gRU5URVIgamlmZmllc1slbHhdIGNwdSAlZFxuIiwKLQkJX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KIAlzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZyA9IGR5bmFtaWNfaW50YWdnOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KTsKIAotCURCR19NU0coIkNhbGwgcGNpX2VuYWJsZV9kZXZpY2UoJXApICBzdGF0dXNbJXhdXG4iLCBwY2lkZXYsIGVycik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChzbGljX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKLQkJcHJpbnRrKHNsaWNfYmFubmVyKTsKLQkJcHJpbnRrKHNsaWNfcHJvY192ZXJzaW9uKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBzbGljX2Jhbm5lcik7CisJCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgc2xpY19wcm9jX3ZlcnNpb24pOwogCX0KIAogCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfNjRCSVRfTUFTSyk7Ci0JaWYgKCFlcnIpIHsKLQkJREJHX01TRygicGNpX3NldF9kbWFfbWFzayhETUFfNjRCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7Ci0JfSBlbHNlIHsKKwlpZiAoZXJyKSB7CiAJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfMzJCSVRfTUFTSyk7Ci0JCWlmIChlcnIpIHsKLQkJCURCR19NU0cKLQkJCSAgICAoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmcgIGVyclsleF1cbiIsCi0JCQkgICAgIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCURCR19NU0coInBjaV9zZXRfZG1hX21hc2soRE1BXzMyQklUX01BU0spIHN1Y2Nlc3NmdWxcbiIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwogCX0KIAotCURCR19NU0coIkNhbGwgcGNpX3JlcXVlc3RfcmVnaW9uc1xuIik7Ci0KIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgRFJWX05BTUUpOwotCWlmIChlcnIpIHsKLQkJREJHX01TRygicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRUQgZXJyWyV4XVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwogCi0JREJHX01TRygiY2FsbCBwY2lfc2V0X21hc3RlclxuIik7CiAJcGNpX3NldF9tYXN0ZXIocGNpZGV2KTsKIAotCURCR19NU0coImNhbGwgYWxsb2NfZXRoZXJkZXZcbiIpOwogCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYWRhcHRlcikpOwogCWlmICghbmV0ZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9leGl0X3NsaWNfcHJvYmU7CiAJfQotCURCR19NU0coImFsbG9jX2V0aGVyZGV2IGZvciBzbGljIG5ldGRldlslcF1cbiIsIG5ldGRldik7CiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwY2lkZXYtPmRldik7CiAKQEAgLTQwMywyNCArNDAwLDE1IEBACiAJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOwogCi0JREJHX01TRygic2xpY29zczogY2FsbCBpb3JlbWFwKG1taW9fc3RhcnRbJWx4XSwgbW1pb19sZW5bJWx4XSlcbiIsCi0JCW1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAotLyogIG1lbW1hcHBlZF9pb2FkZHIgPSAgKHUzMilpb3JlbWFwX25vY2FjaGUobW1pb19zdGFydCwgbW1pb19sZW4pOyovCisvKgltZW1tYXBwZWRfaW9hZGRyID0gICh1MzIpaW9yZW1hcF9ub2NhY2hlKG1taW9fc3RhcnQsIG1taW9fbGVuKTsqLwogCW1lbW1hcHBlZF9pb2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBNRU1NQVBQRURfSU9BRERSIFslcF1cbiIsIF9fZnVuY19fLAotCQltZW1tYXBwZWRfaW9hZGRyKTsKIAlpZiAoIW1lbW1hcHBlZF9pb2FkZHIpIHsKLQkJREJHX0VSUk9SKCIlcyBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAotCQkJICBfX2Z1bmNfXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAorCQkJbW1pb19sZW4sIG1taW9fc3RhcnQpOworCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCi0JREJHX01TRwotCSAgICAoInNsaWNvc3M6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU0xJQ09TUyBQQ0ksIE1NSU8gYXQgJXAsICJcCi0JICAgICJzdGFydFslbHhdIGxlblslbHhdLCBJUlEgJWQuXG4iLAotCSAgICAgX19mdW5jX18sIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7Ci0KIAlzbGljX2NvbmZpZ19wY2kocGNpZGV2KTsKIAogCXNsaWNfaW5pdF9kcml2ZXIoKTsKQEAgLTQzMCw3ICs0MTgsNyBAQAogCiAJc3RhdHVzID0gc2xpY19jYXJkX2xvY2F0ZShhZGFwdGVyKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCURCR19FUlJPUigiJXMgY2Fubm90IGxvY2F0ZSBjYXJkXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiY2Fubm90IGxvY2F0ZSBjYXJkXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CiAJfQogCkBAIC00NDEsMjIgKzQyOSwxMyBAQAogCQlhZGFwdGVyLT5hbGxvY2F0ZWQgPSAxOwogCX0KIAotCURCR19NU0coInNsaWNvc3M6ICVzICAgIGNhcmQ6ICAgICAgICAgICAgICVwXG4iLCBfX2Z1bmNfXywKLQkJYWRhcHRlci0+Y2FyZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlclslZF0gPT0gWyVwXVxuIiwgX19mdW5jX18sCi0JCSh1aW50KSBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQgWyVkXVxuIiwgX19mdW5jX18sCi0JCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkIFslZF1cbiIsIF9fZnVuY19fLAotCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpOwotCiAJc3RhdHVzID0gc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7CiAKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CiAJCWNhcmQtPnN0YXRlID0gQ0FSRF9GQUlMOwogCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7CiAJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKLQkJREJHX0VSUk9SKCJzbGljX2NhcmRfaW5pdCBGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKIAl9IGVsc2UgewogCQlzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihhZGFwdGVyKTsKIAl9CkBAIC00NjgsOSArNDQ3LDcgQEAKIAluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNsaWNfeG1pdF9zdGFydDsKIAluZXRkZXYtPmRvX2lvY3RsID0gc2xpY19pb2N0bDsKIAluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNsaWNfbWFjX3NldF9hZGRyZXNzOwotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKIAluZXRkZXYtPmdldF9zdGF0cyA9IHNsaWNfZ2V0X3N0YXRzOwotI2VuZGlmCiAJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzbGljX21jYXN0X3NldF9saXN0OwogCiAJc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShhZGFwdGVyKTsKQEAgLTQ3OCwzNSArNDU1LDI1IEBACiAJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaWYgKGVycikgewotCQlEQkdfRVJST1IoIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCi0JREJHX01TRwotCSAgICAoInNsaWNvc3M6IGFkZHIgMHglbHgsIGlycSAlZCwgTUFDIGFkZHIgIlwKLQkgICAgICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKLQkgICAgIG1taW9fc3RhcnQsIC8qcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCksICovIHBjaWRldi0+aXJxLAotCSAgICAgbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwgbmV0ZGV2LT5kZXZfYWRkclsyXSwKLQkgICAgIG5ldGRldi0+ZGV2X2FkZHJbM10sIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOwotCiAJY2FyZHNfZm91bmQrKzsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIHN0YXR1c1sleF0gamlmZmllc1slbHhdIGNwdSAlZFxuIiwKLQkJX19mdW5jX18sIHN0YXR1cywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCXJldHVybiBzdGF0dXM7CiAKIGVycl9vdXRfdW5tYXA6CiAJaW91bm1hcChtZW1tYXBwZWRfaW9hZGRyKTsKLQogZXJyX291dF9mcmVlX21taW9fcmVnaW9uOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ci0KK2Vycl9vdXRfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIGVycl9vdXRfZXhpdF9zbGljX3Byb2JlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpZGV2KTsKLQlEQkdfRVJST1IoIiVzIEVYSVQgamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19mdW5jX18sIGppZmZpZXMsCi0JCSAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCXJldHVybiAtRU5PREVWOworZXJyX291dF9kaXNhYmxlX3BjaToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpZGV2KTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTE4LDE2ICs0ODUsNiBAQAogCiAJQVNTRVJUKGFkYXB0ZXIpOwogCUFTU0VSVChjYXJkKTsKLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogJXMgYWRhcHRlci0+YWN0aXZhdGVkWyVkXSBjYXJkLT5hZGFwdGVyc1sleF0gIlwKLQkgICAgICJhbGxvY2RbJXhdXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+YWN0aXZhdGVkLAotCSAgICAgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLAotCSAgICAgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKTsKLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogJXMgKCVzKTogW2ppZmZpZXNbJWx4XSBjcHUgJWRdIGRldlslcF0gYWRhcHRbJXBdICJcCi0JICAgICAicG9ydFslZF0gY2FyZFslcF1cbiIsCi0JICAgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCksCi0JICAgICBhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQsIGNhcmQpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwogCkBAIC01NTQsMjkgKzUxMSwxNCBAQAogCQl9CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCURCR19NU0coInNsaWNvc3M6ICVzIHNldCBjYXJkLT5tYXN0ZXJbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKLQkJY2FyZC0+bWFzdGVyLCBhZGFwdGVyKTsKIAlpZiAoIWNhcmQtPm1hc3RlcikKIAkJY2FyZC0+bWFzdGVyID0gYWRhcHRlcjsKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWlmICghKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZykpCi0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPmR1bXBfd3EpOwotI2VuZGlmCiAKIAlpZiAobG9ja2VkKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCiAJCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKIAkJbG9ja2VkID0gMDsKIAl9Ci0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLQlpZiAoIShjYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcpKSB7Ci0JCURCR19NU0coImF0dGVtcHQgdG8gaW5pdGlhbGl6ZSBkdW1wIHRocmVhZFxuIik7Ci0JCXN0YXR1cyA9IHNsaWNfaW5pdF9kdW1wX3RocmVhZChjYXJkKTsKLQkJLyoKLQkJRXZlbiBpZiB0aGUgZHVtcCB0aHJlYWQgZmFpbHMsIHdlIHdpbGwgY29udGludWUgYXQgdGhpcyBwb2ludAotCQkqLwotCX0KLSNlbmRpZgogCiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQpAQCAtNTkxLDIyICs1MzMsMTUgQEAKIAlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyLCAqbWxpc3Q7CiAKIAlBU1NFUlQoYWRhcHRlcik7Ci0JREJHX01TRygic2xpY29zczogJXMgRU5URVIgZGV2WyVwXSBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGRldiwKLQkJYWRhcHRlcik7CiAJc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7CiAJc2xpY191bm1hcF9tbWlvX3NwYWNlKGFkYXB0ZXIpOwotCURCR19NU0coInNsaWNvc3M6ICVzIHVucmVnaXN0ZXJfbmV0ZGV2XG4iLCBfX2Z1bmNfXyk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKIAltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIHJlbF9yZWdpb24oMCkgc3RhcnRbJXhdIGxlblsleF1cbiIsIF9fZnVuY19fLAotCQltbWlvX3N0YXJ0LCBtbWlvX2xlbik7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIGlvdW5tYXAgZGV2LT5iYXNlX2FkZHJbJXhdXG4iLCBfX2Z1bmNfXywKLQkJKHVpbnQpIGRldi0+YmFzZV9hZGRyKTsKIAlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcik7CiAJLyogZnJlZSBtdWx0aWNhc3QgYWRkcmVzc2VzICovCiAJbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwpAQCAtNjIwLDEwICs1NTUsNiBAQAogCUFTU0VSVChjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOwogCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZC0tOwogCWFkYXB0ZXItPmFsbG9jYXRlZCA9IDA7Ci0JREJHX01TRwotCSAgICAoInNsaWNvc3M6ICVzIGluaXRbJXhdIGFsbG9jWyV4XSBjYXJkWyVwXSBhZGFwdGVyWyVwXVxuIiwKLQkgICAgIF9fZnVuY19fLCBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQsIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCwKLQkgICAgIGNhcmQsIGFkYXB0ZXIpOwogCWlmICghY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKSB7CiAJCXN0cnVjdCBzbGljY2FyZCAqY3Vycl9jYXJkID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOwogCQlpZiAoY3Vycl9jYXJkID09IGNhcmQpIHsKQEAgLTYzOCwxMCArNTY5LDggQEAKIAkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMtLTsKIAkJc2xpY19jYXJkX2NsZWFudXAoY2FyZCk7CiAJfQotCURCR19NU0coInNsaWNvc3M6ICVzIGRlYWxsb2NhdGUgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CiAJa2ZyZWUoZGV2KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7Ci0JREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgaW50IHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNjUzLDc1ICs1ODIsMzUgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKIAkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CiAJQVNTRVJUKGNhcmQpOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRU5URVJcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUpOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgYWN0dnRkWyVkXSBhbGxvY1slZF0gc3RhdGVbJXhdIGFkYXB0WyVwXVxuIiwKLQkJX19mdW5jX18sIGRldi0+bmFtZSwgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLAotCQljYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQsIGNhcmQtPnN0YXRlLCBhZGFwdGVyKTsKLQlzbGljX2lmX3N0b3BfcXVldWUoYWRhcHRlcik7CisJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwogCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRE9XTjsKIAlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CiAJYWRhcHRlci0+dXByX2xpc3QgPSBOVUxMOwogCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKIAlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gMDsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNldCBhZGFwdGVyWyVwXSBzdGF0ZSB0byBBREFQVF9ET1dOKCVkKVxuIiwKLQkJX19mdW5jX18sIGRldi0+bmFtZSwgYWRhcHRlciwgYWRhcHRlci0+c3RhdGUpOwogCUFTU0VSVChjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPmNhcmRpbmRleF0gPT0gYWRhcHRlcik7Ci0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKIAlhZGFwdGVyLT5hbGxfcmVnX3dyaXRlcysrOwogCWFkYXB0ZXItPmljcl9yZWdfd3JpdGVzKys7CiAJc2xpY19jb25maWdfY2xlYXIoYWRhcHRlcik7Ci0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBkZXZbJXBdIGFkYXB0WyVwXSBjYXJkWyVwXVxuIiwKLQkJX19mdW5jX18sIGRldi0+bmFtZSwgZGV2LCBhZGFwdGVyLCBjYXJkKTsKIAlpZiAoYWRhcHRlci0+YWN0aXZhdGVkKSB7CiAJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZC0tOwogCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUtLTsKIAkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKIAl9CiAjaWZkZWYgQVVUT01BVElDX1JFU0VUCi0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yZXNldF9pZmFjZSwgMCwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19yZXNldF9pZmFjZSwgMCwgRkxVU0gpOwogI2VuZGlmCiAJLyoKLQkgKiAgUmVzZXQgdGhlIGFkYXB0ZXIncyByc3AsIGNtZCwgYW5kIHJjdiBxdWV1ZXMKKwkgKiAgUmVzZXQgdGhlIGFkYXB0ZXIncyBjbWQgcXVldWVzCiAJICovCiAJc2xpY19jbWRxX3Jlc2V0KGFkYXB0ZXIpOwotCXNsaWNfcnNwcXVldWVfcmVzZXQoYWRhcHRlcik7Ci0Jc2xpY19yY3ZxdWV1ZV9yZXNldChhZGFwdGVyKTsKIAogI2lmZGVmIEFVVE9NQVRJQ19SRVNFVAotCWlmICghY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKSB7Ci0KLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCQlpZiAoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nKSB7Ci0JCQl1aW50IHN0YXR1czsKLQkJCURCR19NU0coImF0dGVtcHQgdG8gdGVybWluYXRlIGR1bXAgdGhyZWFkIHBpZFsleF1cbiIsCi0JCQkJY2FyZC0+ZHVtcF90YXNrX2lkKTsKLQkJCXN0YXR1cyA9IGtpbGxfcHJvYyhjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCwgU0lHS0lMTCwgMSk7Ci0KLQkJCWlmICghc3RhdHVzKSB7Ci0JCQkJaW50IGNvdW50ID0gMTAgKiAxMDA7Ci0JCQkJd2hpbGUgKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZyAmJiAtLWNvdW50KSB7Ci0JCQkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQkJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwotCQkJCX0KLQotCQkJCWlmICghY291bnQpIHsKLQkJCQkJREJHX01TRwotCQkJCQkgICAgKCJzbGljbW9uIHRocmVhZCBjbGVhbnVwIEZBSUxFRCBcCi0JCQkJCSAgICAgcGlkWyV4XVxuIiwKLQkJCQkJICAgICBjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0jZW5kaWYKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBpbml0aWF0ZSBDQVJEX0hBTFRcbiIsIF9fZnVuY19fLAotCQkJZGV2LT5uYW1lKTsKLQorCWlmICghY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKQogCQlzbGljX2NhcmRfaW5pdChjYXJkLCBhZGFwdGVyKTsKLQl9CiAjZW5kaWYKIAotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVFxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7Ci0JREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCiAJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOwogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKQEAgLTcyOSw2OSArNjE4LDI3IEBACiAKIHN0YXRpYyBpbnQgc2xpY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogeworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWRhdGE7CisJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisJdTMyIGRhdGFbN107CisJdTMyIGludGFnZzsKKwogCUFTU0VSVChycSk7Ci0vKgotICAgICAgREJHX01TRygic2xpY29zczogJXMgY21kWyV4XSBycVslcF0gZGV2WyVwXVxuIiwgX19mdW5jX18sIGNtZCwgcnEsIGRldik7Ci0qLwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DU0xJQ1NFVElOVEFHRzoKLQkJewotCQkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikKLQkJCQkJCQluZXRkZXZfcHJpdihkZXYpOwotCQkJdTMyIGRhdGFbN107Ci0JCQl1MzIgaW50YWdnOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKLQkJCQlEQkdfRVJST1IKLQkJCQkgICAgKCJjb3B5X2Zyb21fdXNlciBGQUlMRUQgZ2V0dGluZyBpbml0aWFsIFwKLQkJCQkgICAgIHBhcmFtc1xuIik7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQlpbnRhZ2cgPSBkYXRhWzBdOwotCQkJcHJpbnRrKEtFUk5fRU1FUkcKLQkJCSAgICAgICAiJXM6IHNldCBpbnRlcnJ1cHQgYWdncmVnYXRpb24gdG8gJWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIGludGFnZyk7Ci0JCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgaW50YWdnKTsKLQkJCXJldHVybiAwOwotCQl9Ci0jaWZkZWYgU0xJQ19VU0VSX1JFUVVFU1RfRFVNUF9FTkFCTEVECi0JY2FzZSBTSU9DU0xJQ0RVTVBDQVJEOgotCQl7Ci0JCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JCQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7Ci0KLQkJCUFTU0VSVChhZGFwdGVyKTsKLQkJCUFTU0VSVChhZGFwdGVyLT5jYXJkKQotCQkJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7Ci0KLQkJCURCR19JT0NUTCgic2xpY19pb2N0bCAgU0lPQ1NMSUNfRFVNUF9DQVJEXG4iKTsKLQotCQkJaWYgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9ET05FKSB7Ci0JCQkJcHJpbnRrKFNMSUNMRVZFTAotCQkJCSAgICAgICAiU0xJQyBDYXJkIGR1bXAgdG8gYmUgb3ZlcndyaXR0ZW5cbiIpOwotCQkJCWNhcmQtPmR1bXBfcmVxdWVzdGVkID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKLQkJCX0gZWxzZSBpZiAoKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9SRVFVRVNURUQpCi0JCQkJICAgfHwgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09Ci0JCQkJICAgICAgIFNMSUNfRFVNUF9JTl9QUk9HUkVTUykpIHsKLQkJCQlwcmludGsoU0xJQ0xFVkVMCi0JCQkJICAgICAgICJTTElDIENhcmQgZHVtcCBSZXF1ZXN0ZWQgYnV0IGFscmVhZHkgXAotCQkJCQlpbiBwcm9ncmVzcy4uLiBpZ25vcmVcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoU0xJQ0xFVkVMCi0JCQkJICAgICAgICJTTElDIENhcmQgIyVkIER1bXAgUmVxdWVzdGVkXG4iLAotCQkJCSAgICAgICBjYXJkLT5jYXJkbnVtKTsKLQkJCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfQotI2VuZGlmCisJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpbnRhZ2cgPSBkYXRhWzBdOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBzZXQgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uIHRvICVkXG4iLAorCQkJX19mdW5jX18sIGludGFnZyk7CisJCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2cpOworCQlyZXR1cm4gMDsKIAogI2lmZGVmIFNMSUNfVFJBQ0VfRFVNUF9FTkFCTEVECiAJY2FzZSBTSU9DU0xJQ1RSQUNFRFVNUDoKIAkJewotCQkJdWxvbmcgZGF0YVs3XTsKLQkJCXVsb25nIHZhbHVlOwotCisJCQl1MzIgdmFsdWU7CiAJCQlEQkdfSU9DVEwoInNsaWNfaW9jdGwgIFNJT0NTTElDX1RSQUNFX0RVTVBcbiIpOwogCiAJCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKQEAgLTgyNCwxMDQgKzY3MSw3NiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KICNlbmRpZgotI2lmIFNMSUNfRVRIVE9PTF9TVVBQT1JUCiAJY2FzZSBTSU9DRVRIVE9PTDoKLQkJewotCQkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikKLQkJCQkJCQluZXRkZXZfcHJpdihkZXYpOwotCQkJc3RydWN0IGV0aHRvb2xfY21kIGRhdGE7Ci0JCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwkJQVNTRVJUKGFkYXB0ZXIpOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmVjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGVjbWQpKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCi0JCQlBU1NFUlQoYWRhcHRlcik7Ci0vKiAgICAgICAgICAgICAgICAgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBTSU9DRVRIVE9PTFxuIiwgX19mdW5jX18pOyAqLwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZlY21kLCBycS0+aWZyX2RhdGEsIHNpemVvZihlY21kKSkpCisJCWlmIChlY21kLmNtZCA9PSBFVEhUT09MX0dTRVQpIHsKKwkJCWVkYXRhLnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9NSUkpOworCQkJZWRhdGEucG9ydCA9IFBPUlRfTUlJOworCQkJZWRhdGEudHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCQkJZWRhdGEucGh5X2FkZHJlc3MgPSAwOworCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQorCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTAwOworCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKKwkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQkJZWxzZQorCQkJCWVkYXRhLnNwZWVkID0gMDsKKworCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCWVsc2UKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkJZWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQkJZWRhdGEubWF4dHhwa3QgPSAxOworCQkJZWRhdGEubWF4cnhwa3QgPSAxOworCQkJaWYgKGNvcHlfdG9fdXNlcihycS0+aWZyX2RhdGEsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCWlmIChlY21kLmNtZCA9PSBFVEhUT09MX0dTRVQpIHsKLQkJCQlkYXRhLnN1cHBvcnRlZCA9Ci0JCQkJICAgIChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKLQkJCQkgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAotCQkJCSAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAotCQkJCSAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAotCQkJCSAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfTUlJKTsKLQkJCQlkYXRhLnBvcnQgPSBQT1JUX01JSTsKLQkJCQlkYXRhLnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKLQkJCQlkYXRhLnBoeV9hZGRyZXNzID0gMDsKLQkJCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwTUIpCi0JCQkJCWRhdGEuc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKLQkJCQkJZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQl9IGVsc2UgaWYgKGVjbWQuY21kID09IEVUSFRPT0xfU1NFVCkgeworCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJCXJldHVybiAtRVBFUk07CisKKwkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDBNQikKKwkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWVsc2UgaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCisJCQkJZWRhdGEuc3BlZWQgPSBTUEVFRF8xMDsKKwkJCWVsc2UKKwkJCQllZGF0YS5zcGVlZCA9IDA7CisKKwkJCWlmIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCisJCQkJZWRhdGEuZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCQllbHNlCisJCQkJZWRhdGEuZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisKKwkJCWVkYXRhLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJCWVkYXRhLm1heHR4cGt0ID0gMTsKKwkJCWVkYXRhLm1heHJ4cGt0ID0gMTsKKwkJCWlmICgoZWNtZC5zcGVlZCAhPSBlZGF0YS5zcGVlZCkgfHwKKwkJCSAgICAoZWNtZC5kdXBsZXggIT0gZWRhdGEuZHVwbGV4KSkgeworCQkJCXUzMiBzcGVlZDsKKwkJCQl1MzIgZHVwbGV4OworCisJCQkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTApCisJCQkJCXNwZWVkID0gMDsKIAkJCQllbHNlCi0JCQkJCWRhdGEuc3BlZWQgPSAwOwotCi0JCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKLQkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCQkJc3BlZWQgPSBQQ1JfU1BFRURfMTAwOworCQkJCWlmIChlY21kLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQkJZHVwbGV4ID0gUENSX0RVUExFWF9GVUxMOwogCQkJCWVsc2UKLQkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQotCQkJCWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotCQkJCWRhdGEubWF4dHhwa3QgPSAxOwotCQkJCWRhdGEubWF4cnhwa3QgPSAxOwotCQkJCWlmIChjb3B5X3RvX3VzZXIKLQkJCQkgICAgKHJxLT5pZnJfZGF0YSwgJmRhdGEsIHNpemVvZihkYXRhKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQl9IGVsc2UgaWYgKGVjbWQuY21kID09IEVUSFRPT0xfU1NFVCkgewotCQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCQkJcmV0dXJuIC1FUEVSTTsKLQotCQkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDBNQikKLQkJCQkJZGF0YS5zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCQllbHNlIGlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xME1CKQotCQkJCQlkYXRhLnNwZWVkID0gU1BFRURfMTA7Ci0JCQkJZWxzZQotCQkJCQlkYXRhLnNwZWVkID0gMDsKLQotCQkJCWlmIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCi0JCQkJCWRhdGEuZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQkJZWxzZQotCQkJCQlkYXRhLmR1cGxleCA9IERVUExFWF9IQUxGOwotCi0JCQkJZGF0YS5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCQkJZGF0YS5tYXh0eHBrdCA9IDE7Ci0JCQkJZGF0YS5tYXhyeHBrdCA9IDE7Ci0JCQkJaWYgKChlY21kLnNwZWVkICE9IGRhdGEuc3BlZWQpIHx8Ci0JCQkJICAgIChlY21kLmR1cGxleCAhPSBkYXRhLmR1cGxleCkpIHsKLQkJCQkJdTMyIHNwZWVkOwotCQkJCQl1MzIgZHVwbGV4OwotCi0JCQkJCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwKSB7Ci0JCQkJCQlzcGVlZCA9IDA7Ci0JCQkJCQlTTElDX0RJU1BMQVkKLQkJCQkJCSAgICAoIiVzOiBzbGljIEVUSFRPT0wgc2V0IFwKLQkJCQkJCSAgICAgbGluayBzcGVlZD09MTBNQiIsCi0JCQkJCQkgICAgIGRldi0+bmFtZSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzcGVlZCA9IFBDUl9TUEVFRF8xMDA7Ci0JCQkJCQlTTElDX0RJU1BMQVkKLQkJCQkJCSAgICAoIiVzOiBzbGljIEVUSFRPT0wgc2V0IFwKLQkJCQkJCSAgICBsaW5rIHNwZWVkPT0xMDBNQiIsCi0JCQkJCQkgICAgIGRldi0+bmFtZSk7Ci0JCQkJCX0KLQkJCQkJaWYgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQkJCQlkdXBsZXggPSBQQ1JfRFVQTEVYX0ZVTEw7Ci0JCQkJCQlTTElDX0RJU1BMQVkKLQkJCQkJCSAgICAoIjogZHVwbGV4PT1GVUxMXG4iKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWR1cGxleCA9IDA7Ci0JCQkJCQlTTElDX0RJU1BMQVkKLQkJCQkJCSAgICAoIjogZHVwbGV4PT1IQUxGXG4iKTsKLQkJCQkJfQotCQkJCQlzbGljX2xpbmtfY29uZmlnKGFkYXB0ZXIsCi0JCQkJCQkJIHNwZWVkLCBkdXBsZXgpOwotCQkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKLQkJCQl9CisJCQkJCWR1cGxleCA9IDA7CisJCQkJc2xpY19saW5rX2NvbmZpZyhhZGFwdGVyLCBzcGVlZCwgZHVwbGV4KTsKKwkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKIAkJCX0KLQkJCXJldHVybiAwOwogCQl9Ci0jZW5kaWYKKwkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKLS8qICAgICAgICAgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBVTlNVUFBPUlRFRFsleF1cbiIsIF9fZnVuY19fLCBjbWQpOyAqLwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogfQpAQCAtOTcwLDExICs3ODksNiBAQAogCiAJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CiAJQVNTRVJUKGNhcmQpOwotLyoKLSAgICBEQkdfRVJST1IoInhtaXRfc3RhcnQgKCVzKSBFTlRFUiBza2JbJXBdIGxlblslZF0gbGlua3N0YXRlWyV4XSBzdGF0ZVsleF1cbiIsCi0JYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBza2IsIHNrYi0+bGVuLCBhZGFwdGVyLT5saW5rc3RhdGUsCi0JIGFkYXB0ZXItPnN0YXRlKTsKLSovCiAJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgfHwKIAkgICAgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKSB8fCAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9VUCkpIHsKIAkJc3RhdHVzID0gWE1JVF9GQUlMX0xJTktfU1RBVEU7CkBAIC0xMDE1LDE0ICs4MjksMTMgQEAKIAl9CiAjZW5kaWYKIAlpZiAoaGNtZC0+cGFkZHJoID09IDApIHsKLQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyLAotCQkJICAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksIERPTlRfRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfY2JhciwKKwkJCQkgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLCBET05UX0ZMVVNIKTsKIAl9IGVsc2UgewotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyNjQsCi0JCQkgICAgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJICAgIGhjbWQtPnBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyNjQsCisJCQkJIChoY21kLT5wYWRkcmwgfCBoY21kLT5jbWRzaXplKSwKKwkJCQkgJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCSBoY21kLT5wYWRkcmgsIERPTlRfRkxVU0gpOwogCX0KIHhtaXRfZG9uZToKIAlyZXR1cm4gMDsKQEAgLTEwMzYsMjkgKzg0OSwyOSBAQAogCQkgICAgdm9pZCAqY21kLCB1MzIgc2tidHlwZSwgdTMyIHN0YXR1cykKIHsKIAlpZiAoYWRhcHRlci0+eG1pdHFfZnVsbCkKLQkJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOworCQluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CiAJaWYgKChjbWQgPT0gTlVMTCkgJiYgKHN0YXR1cyA8PSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMKSkgewogCQlzd2l0Y2ggKHN0YXR1cykgewogCQljYXNlIFhNSVRfRkFJTF9MSU5LX1NUQVRFOgotCQkJREJHX0VSUk9SCi0JCQkgICAgKCIoJXMpIHJlamVjdCB4bWl0IHNrYlslcDogJXhdIGxpbmtzdGF0ZVslc10gXAotCQkJICAgICBhZGFwdGVyWyVzOiVkXSBjYXJkWyVzOiVkXVxuIiwKLQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBza2IsIHNrYi0+cGt0X3R5cGUsCi0JCQkgICAgIFNMSUNfTElOS1NUQVRFKGFkYXB0ZXItPmxpbmtzdGF0ZSksCi0JCQkgICAgIFNMSUNfQURBUFRFUl9TVEFURShhZGFwdGVyLT5zdGF0ZSksIGFkYXB0ZXItPnN0YXRlLAotCQkJICAgICBTTElDX0NBUkRfU1RBVEUoYWRhcHRlci0+Y2FyZC0+c3RhdGUpLAotCQkJICAgICBhZGFwdGVyLT5jYXJkLT5zdGF0ZSk7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkicmVqZWN0IHhtaXQgc2tiWyVwOiAleF0gbGlua3N0YXRlWyVzXSAiCisJCQkJImFkYXB0ZXJbJXM6JWRdIGNhcmRbJXM6JWRdXG4iLAorCQkJCXNrYiwgc2tiLT5wa3RfdHlwZSwKKwkJCQlTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpLAorCQkJCVNMSUNfQURBUFRFUl9TVEFURShhZGFwdGVyLT5zdGF0ZSksCisJCQkJYWRhcHRlci0+c3RhdGUsCisJCQkJU0xJQ19DQVJEX1NUQVRFKGFkYXB0ZXItPmNhcmQtPnN0YXRlKSwKKwkJCQlhZGFwdGVyLT5jYXJkLT5zdGF0ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBYTUlUX0ZBSUxfWkVST19MRU5HVEg6Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoInhtaXRfc3RhcnQgc2tiLT5sZW4gPT0gMCBza2JbJXBdIHR5cGVbJXhdISEhISBcbiIsCi0JCQkgICAgIHNrYiwgc2tiLT5wa3RfdHlwZSk7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkieG1pdF9zdGFydCBza2ItPmxlbiA9PSAwIHNrYlslcF0gdHlwZVsleF1cbiIsCisJCQkJc2tiLCBza2ItPnBrdF90eXBlKTsKIAkJCWJyZWFrOwogCQljYXNlIFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUw6Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoInhtaXRfc3RhcnQgc2tiWyVwXSB0eXBlWyV4XSBObyBob3N0IGNvbW1hbmRzIFwKLQkJCSAgICAgYXZhaWxhYmxlICEhISEgXG4iLAotCQkJICAgICBza2IsIHNrYi0+cGt0X3R5cGUpOworCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJInhtaXRfc3RhcnQgc2tiWyVwXSB0eXBlWyV4XSBObyBob3N0IGNvbW1hbmRzICIKKwkJCQkiYXZhaWxhYmxlXG4iLCBza2IsIHNrYi0+cGt0X3R5cGUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlBU1NFUlQoMCk7CkBAIC0xMTgzLDExICs5OTYsNiBAQAogCiAJCWlmICghc2xpY19tYWNfZmlsdGVyKGFkYXB0ZXIsIChzdHJ1Y3QgZXRoZXJfaGVhZGVyICopCiAJCQkJCXJjdmJ1Zi0+ZGF0YSkpIHsKLSNpZiAwCi0JCQlEQkdfTVNHCi0JCQkgICAgKCJzbGljb3NzOiAlcyAoJXMpIGRyb3AgZnJhbWUgZHVlIHRvIG1hYyBmaWx0ZXJcbiIsCi0JCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwotI2VuZGlmCiAJCQlzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KGFkYXB0ZXIsIHNrYik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTI0MiwxMiArMTA1MCw2IEBACiAJCUFTU0VSVChoY21kKTsKIAkJQVNTRVJUKGhjbWQtPnBzbGljX2hhbmRsZSA9PQogCQkgICAgICAgJmFkYXB0ZXItPnNsaWNfaGFuZGxlc1tzbGljX2hhbmRsZV93b3JkLmhhbmRsZV9pbmRleF0pOwotLyoKLSAgICAgIERCR19FUlJPUigieG1pdF9jb21wbGV0ZSAoJXMpICAgaGNtZFslcF0gIGhvc3RoYW5kbGVbJXhdXG4iLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGhjbWQsIGhjbWQtPmNtZDY0Lmhvc3RoYW5kbGUpOwotICAgICAgREJHX0VSUk9SKCIgICAgc2tiWyVwXSBsZW4gJWQgIGhjbWR0eXBlWyV4XVxuIiwgaGNtZC0+c2tiLAotCQloY21kLT5za2ItPmxlbiwgaGNtZC0+dHlwZSk7Ci0qLwogCQlpZiAoaGNtZC0+dHlwZSA9PSBTTElDX0NNRF9EVU1CKSB7CiAJCQlpZiAoaGNtZC0+c2tiKQogCQkJCWRldl9rZnJlZV9za2JfaXJxKGhjbWQtPnNrYik7CkBAIC0xMjY3LDcgKzEwNjksOCBAQAogCXUzMiBpc3I7CiAKIAlpZiAoKGFkYXB0ZXItPnBzaG1lbSkgJiYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSkgewotCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9NQVNLLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pY3IsCisJCQkJIElDUl9JTlRfTUFTSywgRkxVU0gpOwogCQlpc3IgPSBhZGFwdGVyLT5pc3Jjb3B5ID0gYWRhcHRlci0+cHNobWVtLT5pc3I7CiAJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKIAkJYWRhcHRlci0+bnVtX2lzcnMrKzsKQEAgLTEyOTksMjkgKzExMDIsMTggQEAKIAkJCQkJCQlpZiAoIWNvdW50KQogCQkJCQkJCQlicmVhazsKIAkJCQkJCX0KLQkJCQkJCURCR19NU0cKLQkJCQkJCSAgICAoIiglcyk6IFsleF0gSVNSX1JNSVNTIFwKLQkJCQkJCSAgICAgaW5pdGlhbFsleF0gcHJlWyV4XSBcCi0JCQkJCQkgICAgIGVycm9yc1sleF0gXAotCQkJCQkJICAgICBwb3N0X2NvdW50WyV4XVxuIiwKLQkJCQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkJCQkJICAgICBpc3IsIHJjdl9jb3VudCwgcHJlX2NvdW50LAotCQkJCQkJICAgICBlcnJvcnMsIHJjdnEtPmNvdW50KTsKIAkJCQkJfSBlbHNlIGlmIChpc3IgJiBJU1JfWERST1ApIHsKLQkJCQkJCURCR19FUlJPUgotCQkJCQkJICAgICgiaXNyICYgSVNSX0VSUiBbJXhdIFwKLQkJCQkJCSAgICAgSVNSX1hEUk9QIFxuIiwKLQkJCQkJCSAgICAgaXNyKTsKKwkJCQkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCQkJCSJpc3IgJiBJU1JfRVJSIFsleF0gIgorCQkJCQkJCSJJU1JfWERST1AgXG4iLCBpc3IpOwogCQkJCQl9IGVsc2UgewotCQkJCQkJREJHX0VSUk9SCi0JCQkJCQkgICAgKCJpc3IgJiBJU1JfRVJSIFsleF1cbiIsCi0JCQkJCQkgICAgIGlzcik7CisJCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkJCQkiaXNyICYgSVNSX0VSUiBbJXhdXG4iLAorCQkJCQkJCWlzcik7CiAJCQkJCX0KIAkJCQl9CiAKIAkJCQlpZiAoaXNyICYgSVNSX0xFVkVOVCkgewotCQkJCQkvKkRCR19NU0coIiVzICglcykgIElTUl9MRVZFTlQgXG4iLAotCQkJCQkgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsqLwogCQkJCQlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cysrOwogCQkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKIAkJCQl9CkBAIC0xMzU5LDcgKzExNTEsNyBAQAogCQlhZGFwdGVyLT5pc3Jjb3B5ID0gMDsKIAkJYWRhcHRlci0+YWxsX3JlZ193cml0ZXMgKz0gMjsKIAkJYWRhcHRlci0+aXNyX3JlZ193cml0ZXMrKzsKLQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2lzciwgMCwgRkxVU0gpOwogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPmZhbHNlX2ludGVycnVwdHMrKzsKIAl9CkBAIC0xMzg5LDExICsxMTgxLDYgQEAKIAlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotLyoKLSAgICBEQkdfTVNHKCJzbGljX2V2ZW50X2hhbmRsZXIgIHBzaG1lbS0+bGlua3N0YXR1c1sleF0gIHBzaG1lbVslcF1cbiAgIFwKLQkmbGlua3N0YXR1c1slcF0gJmlzclslcF1cbiIsIGFkYXB0ZXItPnBzaG1lbS0+bGlua3N0YXR1cywgcHNobWVtLAotCSZwc2htZW0tPmxpbmtzdGF0dXMsICZwc2htZW0tPmlzcik7Ci0qLwogCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKIAkJCQkgIFNMSUNfVVBSX1JMU1IsCiAJCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5saW5rc3RhdHVzKSwKQEAgLTE0MTEsNDYgKzExOTgsMjkgQEAKIAogc3RhdGljIHZvaWQgc2xpY19pbml0X2NsZWFudXAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF0gIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCWlmIChhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgewotCQlEQkdfTVNHKCJGUkVFX0lSUSAiKTsKIAkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAwOwogCQlmcmVlX2lycShhZGFwdGVyLT5uZXRkZXYtPmlycSwgYWRhcHRlci0+bmV0ZGV2KTsKIAogCX0KIAlpZiAoYWRhcHRlci0+cHNobWVtKSB7Ci0JCURCR19NU0coIkZSRUVfU0hNRU0gIik7Ci0JCURCR19NU0coImFkYXB0ZXJbJXBdIHBvcnQgJWQgcHNobWVtWyVwXSBGcmVlU2htZW0gIiwKLQkJCWFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQsICh2b2lkICopIGFkYXB0ZXItPnBzaG1lbSk7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pLAogCQkJCSAgICBhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPnBoeXNfc2htZW0pOwogCQlhZGFwdGVyLT5wc2htZW0gPSBOVUxMOwogCQlhZGFwdGVyLT5waHlzX3NobWVtID0gKGRtYV9hZGRyX3QpIE5VTEw7CiAJfQotI2lmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKLQlpZiAoYWRhcHRlci0+c3RhdHN0aW1lcnNldCkgewotCQlEQkdfTVNHKCJzdGF0c3RpbWVyICIpOwotCQlhZGFwdGVyLT5zdGF0c3RpbWVyc2V0ID0gMDsKLQkJZGVsX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLQl9Ci0jZW5kaWYKLSNpZiAhU0xJQ19EVU1QX0VOQUJMRUQgJiYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKLS8qI2lmIFNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVEKi8KKwogCWlmIChhZGFwdGVyLT5waW5ndGltZXJzZXQpIHsKLQkJREJHX01TRygicGluZ3RpbWVyICIpOwogCQlhZGFwdGVyLT5waW5ndGltZXJzZXQgPSAwOwogCQlkZWxfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CiAJfQotI2VuZGlmCisKIAlzbGljX3JzcHF1ZXVlX2ZyZWUoYWRhcHRlcik7CiAJc2xpY19jbWRxX2ZyZWUoYWRhcHRlcik7CiAJc2xpY19yY3ZxdWV1ZV9mcmVlKGFkYXB0ZXIpOwotCi0JREJHX01TRygiXG4iKTsKIH0KIAotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CkBAIC0xNDcwLDcgKzEyNDAsNiBAQAogCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gMDsKIAlyZXR1cm4gJmFkYXB0ZXItPnN0YXRzOwogfQotI2VuZGlmCiAKIC8qCiAgKiAgQWxsb2NhdGUgYSBtY2FzdF9hZGRyZXNzIHN0cnVjdHVyZSB0byBob2xkIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KQEAgLTE0OTEsNyArMTI2MCw3IEBACiAJfQogCiAJLyogRG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgQWxsb2NhdGUgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBpdCAqLwotCW1jYWRkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtY2FzdF9hZGRyZXNzKSwgR0ZQX0FUT01JQyk7CisJbWNhZGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1jYXN0X2FkZHJlc3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAobWNhZGRyID09IE5VTEwpCiAJCXJldHVybiAxOwogCkBAIC0xNjA4LDggKzEzNzcsNiBAQAogCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKIAl9CiAKLQlEQkdfTVNHKCIlcyBhLT5kZXZmbGFnc19wcmV2WyV4XSBkZXYtPmZsYWdzWyV4XSBzdGF0dXNbJXhdXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiwgZGV2LT5mbGFncywgc3RhdHVzKTsKIAlpZiAoYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiAhPSBkZXYtPmZsYWdzKSB7CiAJCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CiAJCWlmIChkZXYtPmZsYWdzKSB7CkBAIC0xNjIzLDkgKzEzOTAsNyBAQAogCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOwogCQl9CiAJCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOwotCQlEQkdfTVNHKCIlcyBjYWxsIHNsaWNfY29uZmlnX3NldCBhZGFwdGVyLT5tYWNvcHRzWyV4XVxuIiwKLQkJCV9fZnVuY19fLCBhZGFwdGVyLT5tYWNvcHRzKTsKLQkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgdHJ1ZSk7CiAJfSBlbHNlIHsKIAkJaWYgKHN0YXR1cyA9PSBTVEFUVVNfU1VDQ0VTUykKIAkJCXNsaWNfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7CkBAIC0xNjM3LDM2ICsxNDAyLDIzIEBACiB7CiAJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CiAKLQlEQkdfTVNHKCIlcyBFTlRFUiAoJXMpIG1hY29wdHNbJXhdIG1hc2tbJWxseF1cbiIsIF9fZnVuY19fLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsICh1aW50KSBhZGFwdGVyLT5tYWNvcHRzLAotCQlhZGFwdGVyLT5tY2FzdG1hc2spOwotCiAJaWYgKGFkYXB0ZXItPm1hY29wdHMgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0MpKSB7CiAJCS8qIFR1cm4gb24gYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMuIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IKIAkJICogcHJvbWlzY3VvdXMgbW9kZSBhcyB3ZWxsIGFzIEFMTE1DQVNUIG1vZGUuICBJdCBzYXZlcyB0aGUKIAkJICogTWljcm9jb2RlIGZyb20gaGF2aW5nIHRvIGtlZXAgc3RhdGUgYWJvdXQgdGhlIE1BQwogCQkgKiBjb25maWd1cmF0aW9uLgogCQkgKi8KLS8qICAgICAgICAgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBtYWNvcHRzID0gTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0NcblwKLQkJU0xVVCBNT0RFISEhXG4iLF9fZnVuY19fKTsgKi8KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGxvdywgMHhGRkZGRkZGRiwgRkxVU0gpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0aGlnaCwgMHhGRkZGRkZGRiwgRkxVU0gpOwotLyogICAgICAgIERCR19NU0coIiVzICglcykgV1JJVEUgdG8gc2xpY19yZWdzIHNsaWNfbWNhc3Rsb3cmaGlnaCAweEZGRkZGRkZGXG4iLAotCQlfZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOyAqLworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfbWNhc3Rsb3csIDB4RkZGRkZGRkYsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX21jYXN0aGlnaCwgMHhGRkZGRkZGRiwKKwkJCQkgRkxVU0gpOwogCX0gZWxzZSB7CiAJCS8qIENvbW1pdCBvdXIgbXVsdGljYXN0IG1hc3QgdG8gdGhlIFNMSUMgYnkgd3JpdGluZyB0byB0aGUKIAkJICogbXVsdGljYXN0IGFkZHJlc3MgbWFzayByZWdpc3RlcnMKIAkJICovCi0JCURCR19NU0coIiVzICglcykgV1JJVEUgbWNhc3Rsb3dbJXhdIG1jYXN0aGlnaFsleF1cbiIsCi0JCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkJKCh1bG9uZykgKGFkYXB0ZXItPm1jYXN0bWFzayAmIDB4RkZGRkZGRkYpKSwKLQkJCSgodWxvbmcpICgoYWRhcHRlci0+bWNhc3RtYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpKSk7Ci0KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGxvdywKLQkJCSAgKHUzMikgKGFkYXB0ZXItPm1jYXN0bWFzayAmIDB4RkZGRkZGRkYpLCBGTFVTSCk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLAotCQkJICAodTMyKSAoKGFkYXB0ZXItPm1jYXN0bWFzayA+PiAzMikgJiAweEZGRkZGRkZGKSwKLQkJCSAgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfbWNhc3Rsb3csCisJCQkodTMyKShhZGFwdGVyLT5tY2FzdG1hc2sgJiAweEZGRkZGRkZGKSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLAorCQkJKHUzMikoKGFkYXB0ZXItPm1jYXN0bWFzayA+PiAzMikgJiAweEZGRkZGRkZGKSwgRkxVU0gpOwogCX0KIH0KIApAQCAtMTY4MCw1MyArMTQzMiwxMSBAQAogCUFTU0VSVChhZGFwdGVyKTsKIAljYXJkID0gYWRhcHRlci0+Y2FyZDsKIAlBU1NFUlQoY2FyZCk7Ci0jaWYgIVNMSUNfRFVNUF9FTkFCTEVECi0vKiNpZiBTTElDX0RVTVBfRU5BQkxFRCovCi0JaWYgKChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgJiYgKGNhcmQtPnN0YXRlID09IENBUkRfVVApKSB7Ci0JCWludCBzdGF0dXM7CiAKLQkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7Ci0JCQlpZiAoZXJyb3Jtc2crKyA8IDUpIHsKLQkJCQlEQkdfTVNHCi0JCQkJICAgICgiJXMgKCVzKSBDQVJEIEhBUyBDUkFTSEVEICBQSU5HX3N0YXR1cyA9PSBcCi0JCQkJICAgICAleCBFUlJPUk1TRyMgJWRcbiIsCi0JCQkJICAgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkJCSAgICAgY2FyZC0+cGluZ3N0YXR1cywgZXJyb3Jtc2cpOwotCQkJfQotCQkJLyogICBBU1NFUlQoY2FyZC0+cGluZ3N0YXR1cyA9PSBJU1JfUElOR01BU0spOyAqLwotCQl9IGVsc2UgewotCQkJaWYgKGdvb2Rtc2crKyA8IDUpIHsKLQkJCQlEQkdfTVNHCi0JCQkJICAgICgic2xpY29zczogJXMgKCVzKSBQSU5HX3N0YXR1cyA9PSAleCBcCi0JCQkJICAgICBHT09EISEhISEhISEgbXNnIyAlZFxuIiwKLQkJCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCi0JCQkJICAgICBjYXJkLT5waW5nc3RhdHVzLCBlcnJvcm1zZyk7Ci0JCQl9Ci0JCX0KLQkJY2FyZC0+cGluZ3N0YXR1cyA9IDA7Ci0JCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwgU0xJQ19VUFJfUElORywgMCwgMCwgMCwgMCk7Ci0KLQkJQVNTRVJUKHN0YXR1cyA9PSAwKTsKLQl9IGVsc2UgewotCQlEQkdfTVNHKCJzbGljb3NzICVzICglcykgYWRhcHRlclslcF0gTk9UIFVQISEhIVxuIiwKLQkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOwotCX0KLSNlbmRpZgotCWFkYXB0ZXItPnBpbmd0aW1lci5leHBpcmVzID0KLQkgICAgamlmZmllcyArIFNMSUNfU0VDU19UT19KSUZGUyhQSU5HX1RJTUVSX0lOVEVSVkFMKTsKKwlhZGFwdGVyLT5waW5ndGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoUElOR19USU1FUl9JTlRFUlZBTCAqIEhaKTsKIAlhZGRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNsaWNfaWZfc3RvcF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfaWZfc3RhcnRfcXVldWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKLX0KLQogLyoKICAqICBzbGljX2lmX2luaXQKICAqCkBAIC0xNzQyLDE0ICsxNDUyLDExIEBACiAJaW50IHN0YXR1cyA9IDA7CiAKIAlBU1NFUlQoY2FyZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBFTlRFUiBzdGF0ZXNbJWQ6JWQ6JWQ6JWRdIGZsYWdzWyV4XVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKLQkJYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkLCBhZGFwdGVyLT5zdGF0ZSwgYWRhcHRlci0+bGlua3N0YXRlLAotCQljYXJkLT5zdGF0ZSwgZGV2LT5mbGFncyk7CiAKIAkvKiBhZGFwdGVyIHNob3VsZCBiZSBkb3duIGF0IHRoaXMgcG9pbnQgKi8KIAlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgewotCQlEQkdfRVJST1IoInNsaWNfaWZfaW5pdCBhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTlxuIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCUFTU0VSVChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKTsKQEAgLTE3NTcsNTQgKzE0NjQsMzUgQEAKIAlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKIAlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOwogCWlmIChkZXYtPmZsYWdzKSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzICglcykgU2V0IE1BQyBvcHRpb25zOiAiLCBfX2Z1bmNfXywKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgeworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpCiAJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKLQkJCURCR19NU0coIkJDQVNUICIpOwotCQl9Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX1BST01JU0M7Ci0JCQlEQkdfTVNHKCJQUk9NSVNDICIpOwotCQl9Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQogCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7Ci0JCQlEQkdfTVNHKCJBTExfTUNBU1QgIik7Ci0JCX0KLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkKIAkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOwotCQkJREJHX01TRygiTUNBU1QgIik7Ci0JCX0KLQkJREJHX01TRygiXG4iKTsKIAl9CiAJc3RhdHVzID0gc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKGFkYXB0ZXIpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoInNsaWNfaWZfaW5pdDogc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzIEZBSUxFRCAleFxuIiwKLQkJICAgICBzdGF0dXMpOworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCSIlczogc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzIEZBSUxFRCAleFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhhZGFwdGVyKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAlpZiAoIWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCkgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfcnNwcXVldWVfaW5pdFxuIiwgX19mdW5jX18pOwogCQlpZiAoc2xpY19yc3BxdWV1ZV9pbml0KGFkYXB0ZXIpKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCURCR19NU0cKLQkJICAgICgic2xpY29zczogJXMgY2FsbCBzbGljX2NtZHFfaW5pdCBhZGFwdGVyWyVwXSBwb3J0ICVkIFxuIiwKLQkJICAgICBfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cG9ydCk7CiAJCWlmIChzbGljX2NtZHFfaW5pdChhZGFwdGVyKSkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlEQkdfTVNHCi0JCSAgICAoInNsaWNvc3M6ICVzIGNhbGwgc2xpY19yY3ZxdWV1ZV9pbml0IGFkYXB0ZXJbJXBdIFwKLQkJICAgICBwb3J0ICVkIFxuIiwgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQpOwogCQlpZiAoc2xpY19yY3ZxdWV1ZV9pbml0KGFkYXB0ZXIpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCA9IDE7CiAJfQotCURCR19NU0coInNsaWNvc3M6ICVzIGRpc2FibGUgaW50ZXJydXB0cyhzbGljKVxuIiwgX19mdW5jX18pOwogCi0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKIAltZGVsYXkoMSk7CiAKIAlpZiAoIWFkYXB0ZXItPmlzcF9pbml0aWFsaXplZCkgewpAQCAtMTgxNCwxMyArMTUwMiwxMyBAQAogCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkgIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pc3IpLCBET05UX0ZMVVNIKTsKLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3AsCi0JCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pc3IpLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwKKwkJCQkgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsICh1MzIpIDAsIERPTlRfRkxVU0gpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzcCwgKHUzMikgJnBzaG1lbS0+aXNyLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwgKHUzMikmcHNobWVtLT5pc3IsIEZMVVNIKTsKICNlbHNlCiAJCVN0b3AgQ29tcGlsYXRpb25zCiAjZW5kaWYKQEAgLTE4MzMsNjYgKzE1MjEsNDQgQEAKIAlpZiAoIWNhcmQtPmxvYWR0aW1lcnNldCkgewogCQlpbml0X3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOwogCQljYXJkLT5sb2FkdGltZXIuZXhwaXJlcyA9Ci0JCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFNMSUNfTE9BRFRJTUVSX1BFUklPRCk7CisJCSAgICBqaWZmaWVzICsgKFNMSUNfTE9BRFRJTUVSX1BFUklPRCAqIEhaKTsKIAkJY2FyZC0+bG9hZHRpbWVyLmRhdGEgPSAodWxvbmcpIGNhcmQ7CiAJCWNhcmQtPmxvYWR0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2xvYWRfY2hlY2s7CiAJCWFkZF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKIAogCQljYXJkLT5sb2FkdGltZXJzZXQgPSAxOwogCX0KLSNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECi0JaWYgKCFhZGFwdGVyLT5zdGF0c3RpbWVyc2V0KSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzIHN0YXJ0IGdldHN0YXRzX3RpbWVyKHNsaWMpXG4iLAotCQkJX19mdW5jX18pOwotCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLQkJYWRhcHRlci0+c3RhdHN0aW1lci5leHBpcmVzID0KLQkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoU1RBVFNfVElNRVJfSU5URVJWQUwpOwotCQlhZGFwdGVyLT5zdGF0c3RpbWVyLmRhdGEgPSAodWxvbmcpIGFkYXB0ZXItPm5ldGRldjsKLQkJYWRhcHRlci0+c3RhdHN0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2dldF9zdGF0czsKLQkJYWRkX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLQkJYWRhcHRlci0+c3RhdHN0aW1lcnNldCA9IDE7Ci0JfQotI2VuZGlmCi0jaWYgIVNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVECi0vKiNpZiBTTElDX0RVTVBfRU5BQkxFRCAmJiBTTElDX1BJTkdfVElNRVJfRU5BQkxFRCovCisKIAlpZiAoIWFkYXB0ZXItPnBpbmd0aW1lcnNldCkgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBzdGFydCBjYXJkX3BpbmdfdGltZXIoc2xpYylcbiIsCi0JCQlfX2Z1bmNfXyk7CiAJCWluaXRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CiAJCWFkYXB0ZXItPnBpbmd0aW1lci5leHBpcmVzID0KLQkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoUElOR19USU1FUl9JTlRFUlZBTCk7CisJCSAgICBqaWZmaWVzICsgKFBJTkdfVElNRVJfSU5URVJWQUwgKiBIWik7CiAJCWFkYXB0ZXItPnBpbmd0aW1lci5kYXRhID0gKHVsb25nKSBkZXY7CiAJCWFkYXB0ZXItPnBpbmd0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX3Bpbmc7CiAJCWFkZF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKIAkJYWRhcHRlci0+cGluZ3RpbWVyc2V0ID0gMTsKIAkJYWRhcHRlci0+Y2FyZC0+cGluZ3N0YXR1cyA9IElTUl9QSU5HTUFTSzsKIAl9Ci0jZW5kaWYKIAogCS8qCiAJICogICAgY2xlYXIgYW55IHBlbmRpbmcgZXZlbnRzLCB0aGVuIGVuYWJsZSBpbnRlcnJ1cHRzCiAJICovCi0JREJHX01TRygic2xpY29zczogJXMgRU5BQkxFIGludGVycnVwdHMoc2xpYylcbiIsIF9fZnVuY19fKTsKIAlhZGFwdGVyLT5pc3Jjb3B5ID0gMDsKIAlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7Ci0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PTiwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09OLCBGTFVTSCk7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfbGlua19jb25maWcoc2xpYylcbiIsIF9fZnVuY19fKTsKIAlzbGljX2xpbmtfY29uZmlnKGFkYXB0ZXIsIExJTktfQVVUT1NQRUVELCBMSU5LX0FVVE9EKTsKIAlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLSNpZiBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwogCWlmIChhZGFwdGVyLT5zbGljX3JlZ3MpCiAJCWlvdW5tYXAoYWRhcHRlci0+c2xpY19yZWdzKTsKIAlhZGFwdGVyLT5zbGljX3JlZ3MgPSBOVUxMOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQpAQCAtMTkwMCwxMyArMTU2Niw2IEBACiAJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgewogCQlpbnQgcmV0dmFsOwogCi0JCURCR19NU0cKLQkJICAgICgic2xpY29zczogJXMgQWxsb2NBZGFwdFJzcmNzIGFkYXB0ZXJbJXBdIHNobWVtWyVwXSBcCi0JCSAgICAgcGh5c19zaG1lbVslcF0gZGV2LT5pcnFbJXhdICV4XG4iLAotCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wc2htZW0sCi0JCSAgICAgKHZvaWQgKilhZGFwdGVyLT5waHlzX3NobWVtLCBhZGFwdGVyLT5uZXRkZXYtPmlycSwKLQkJICAgICBOUl9JUlFTKTsKLQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAogCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CiAKQEAgLTE5MTksMTYgKzE1NzgsMTIgQEAKIAkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOwogCiAJCWlmIChyZXR2YWwpIHsKLQkJCURCR19FUlJPUigic2xpY29zczogcmVxdWVzdF9pcnEgKCVzKSBGQUlMRUQgWyV4XVxuIiwKLQkJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0X2lycSAoJXMpIEZBSUxFRCBbJXhdXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0KIAkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAxOwotCQlEQkdfTVNHCi0JCSAgICAoInNsaWNvc3M6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBzaG1lbVslcF0gXAotCQkgICAgIHBzaG1lbVslcF0gZGV2LT5pcnFbJXhdXG4iLAotCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wc2htZW0sCi0JCSAgICAgKHZvaWQgKilhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPm5ldGRldi0+aXJxKTsKIAl9CiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQpAQCAtMTkzOSwyMiArMTU5NCwxNyBAQAogCXUxNiBuZXdfY29tbWFuZDsKIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsICZwY2lfY29tbWFuZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgIFBDSSBjb21tYW5kWyU0LjR4XVxuIiwgX19mdW5jX18sIHBjaV9jb21tYW5kKTsKIAogCW5ld19jb21tYW5kID0gcGNpX2NvbW1hbmQgfCBQQ0lfQ09NTUFORF9NQVNURVIKIAkgICAgfCBQQ0lfQ09NTUFORF9NRU1PUlkKIAkgICAgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCiAJICAgIHwgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUiB8IFBDSV9DT01NQU5EX0ZBU1RfQkFDSzsKLQlpZiAocGNpX2NvbW1hbmQgIT0gbmV3X2NvbW1hbmQpIHsKLQkJREJHX01TRygiJXMgLS0gVXBkYXRpbmcgUENJIENPTU1BTkQgcmVnaXN0ZXIgJTQuNHgtPiU0LjR4LlxuIiwKLQkJCV9fZnVuY19fLCBwY2lfY29tbWFuZCwgbmV3X2NvbW1hbmQpOworCWlmIChwY2lfY29tbWFuZCAhPSBuZXdfY29tbWFuZCkKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsIG5ld19jb21tYW5kKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CiAJc2xpY19pbml0X2NsZWFudXAoYWRhcHRlcik7CiAJbWVtc2V0KCZhZGFwdGVyLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CiAJYWRhcHRlci0+ZXJyb3JfaW50ZXJydXB0cyA9IDA7CkBAIC0xOTY3LDcgKzE2MTcsNiBAQAogCWFkYXB0ZXItPnJjdl9icm9hZGNhc3RzID0gMDsKIAlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cyA9IDA7CiAJYWRhcHRlci0+cmN2X3VuaWNhc3RzID0gMDsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIC8qCkBAIC0xOTc5LDIxICsxNjI4LDE1IEBACiBzdGF0aWMgdm9pZCBzbGljX2xpbmtfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAogCQkgICAgICB1MzIgbGlua3NwZWVkLCB1MzIgbGlua2R1cGxleCkKIHsKKwl1MzIgX19pb21lbSAqd3BoeTsKIAl1MzIgc3BlZWQ7CiAJdTMyIGR1cGxleDsKIAl1MzIgcGh5X2NvbmZpZzsKIAl1MzIgcGh5X2FkdnJlZzsKIAl1MzIgcGh5X2djdGxyZWc7CiAKLQlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHsKLQkJREJHX01TRwotCQkgICAgKCIlcyAoJXMpIEFEQVBUIE5vdCB1cCB5ZXQsIFJldHVybiEgc3BlZWRbJXhdIGR1cGxleFsleF1cbiIsCi0JCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgbGlua3NwZWVkLAotCQkgICAgIGxpbmtkdXBsZXgpOworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkKIAkJcmV0dXJuOwotCX0KLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNsaWNfbGlua19jb25maWc6IHNwZWVkWyV4XSBkdXBsZXhbJXhdXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBsaW5rc3BlZWQsIGxpbmtkdXBsZXgpOwogCiAJQVNTRVJUKChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzFHQl9ERVZJQ0VfSUQpCiAJICAgICAgIHx8IChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzJHQl9ERVZJQ0VfSUQpKTsKQEAgLTIwMDMsNiArMTY0Niw4IEBACiAJaWYgKGxpbmtkdXBsZXggPiBMSU5LX0FVVE9EKQogCQlsaW5rZHVwbGV4ID0gTElOS19BVVRPRDsKIAorCXdwaHkgPSAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHk7CisKIAlpZiAoKGxpbmtzcGVlZCA9PSBMSU5LX0FVVE9TUEVFRCkgfHwgKGxpbmtzcGVlZCA9PSBMSU5LXzEwMDBNQikpIHsKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgQURBUFRfRkxBR1NfRklCRVJNRURJQSkgewogCQkJLyogIFdlJ3ZlIGdvdCBhIGZpYmVyIGdpZ2FiaXQgaW50ZXJmYWNlLCBhbmQgcmVnaXN0ZXIKQEAgLTIwMTMsOCArMTY1OCw3IEBACiAJCQlwaHlfYWR2cmVnID0gKE1JSUNSX1JFR180IHwgKFBBUl9BRFYxMDAwWEZEKSk7CiAJCQkvKiBlbmFibGUgUEFVU0UgZnJhbWVzICAgICAgICAqLwogCQkJcGh5X2FkdnJlZyB8PSBQQVJfQVNZTVBBVVNFX0ZJQkVSOwotCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfYWR2cmVnLAotCQkJCSAgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfYWR2cmVnLCBGTFVTSCk7CiAKIAkJCWlmIChsaW5rc3BlZWQgPT0gTElOS19BVVRPU1BFRUQpIHsKIAkJCQkvKiByZXNldCBwaHksIGVuYWJsZSBhdXRvLW5lZyAgKi8KQEAgLTIwMjIsMTQgKzE2NjYsMTIgQEAKIAkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAogCQkJCSAgICAgKFBDUl9SRVNFVCB8IFBDUl9BVVRPTkVHIHwKIAkJCQkgICAgICBQQ1JfQVVUT05FR19SU1QpKTsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCi0JCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQkJfSBlbHNlIHsJLyogZm9yY2VkIDEwMDAgTWIgRkQqLwogCQkJCS8qIHBvd2VyIGRvd24gcGh5IHRvIGJyZWFrIGxpbmsKIAkJCQkgICB0aGlzIG1heSBub3Qgd29yaykgKi8KIAkJCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCBQQ1JfUE9XRVJET1dOKTsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCi0JCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQkJCS8qIHdhaXQsIE1hcnZlbGwgc2F5cyAxIHNlYywKIAkJCQkgICB0cnkgdG8gZ2V0IGF3YXkgd2l0aCAxMCBtcyAgKi8KIAkJCQltZGVsYXkoMTApOwpAQCAtMjA0MCw4ICsxNjgyLDcgQEAKIAkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAogCQkJCSAgICAgKFBDUl9SRVNFVCB8IFBDUl9TUEVFRF8xMDAwIHwKIAkJCQkgICAgICBQQ1JfRFVQTEVYX0ZVTEwpKTsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCi0JCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQkJfQogCQl9IGVsc2UgewkvKiBjb3BwZXIgZ2lnYWJpdCAqLwogCkBAIC0yMDY1LDM1ICsxNzA2LDMwIEBACiAJCQlwaHlfYWR2cmVnIHw9IFBBUl9BU1lNUEFVU0U7CiAJCQkvKiByZXF1aXJlZCBieSB0aGUgQ2ljYWRhIFBIWSAgKi8KIAkJCXBoeV9hZHZyZWcgfD0gUEFSXzgwMl8zOwotCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfYWR2cmVnLAotCQkJCSAgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfYWR2cmVnLCBGTFVTSCk7CiAJCQkvKiBhZHZlcnRpc2UgRkQgb25seSBAMTAwMCBNYiAgKi8KIAkJCXBoeV9nY3RscmVnID0gKE1JSUNSX1JFR185IHwgKFBHQ19BRFYxMDAwRkQpKTsKLQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2djdGxyZWcsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9nY3RscmVnLCBGTFVTSCk7CiAKIAkJCWlmIChhZGFwdGVyLT5zdWJzeXNpZCAhPSBTTElDXzFHQl9DSUNBREFfU1VCU1lTX0lEKSB7CiAJCQkJLyogaWYgYSBNYXJ2ZWxsIFBIWQogCQkJCSAgIGVuYWJsZSBhdXRvIGNyb3Nzb3ZlciAqLwogCQkJCXBoeV9jb25maWcgPQogCQkJCSAgICAoTUlJQ1JfUkVHXzE2IHwgKE1SVl9SRUcxNl9YT1ZFUk9OKSk7Ci0JCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAotCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAogCQkJCS8qIHJlc2V0IHBoeSwgZW5hYmxlIGF1dG8tbmVnICAqLwogCQkJCXBoeV9jb25maWcgPQogCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CiAJCQkJICAgICAoUENSX1JFU0VUIHwgUENSX0FVVE9ORUcgfAogCQkJCSAgICAgIFBDUl9BVVRPTkVHX1JTVCkpOwotCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwKLQkJCQkJICBwaHlfY29uZmlnLCBGTFVTSCk7CisJCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiAJCQl9IGVsc2UgewkvKiBpdCdzIGEgQ2ljYWRhIFBIWSAgKi8KIAkJCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgYXV0by1uZWcgKGRvbid0IHJlc2V0KSAgKi8KIAkJCQlwaHlfY29uZmlnID0KIAkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAogCQkJCSAgICAgKFBDUl9BVVRPTkVHIHwgUENSX0FVVE9ORUdfUlNUKSk7Ci0JCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAotCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CkBAIC0yMTExLDEzICsxNzQ3LDEyIEBACiAJCQkvKiBpZiBhIE1hcnZlbGwgUEhZCiAJCQkgICBkaXNhYmxlIGF1dG8gY3Jvc3NvdmVyICAqLwogCQkJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfMTYgfCAoTVJWX1JFRzE2X1hPVkVST0ZGKSk7Ci0JCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAkJfQogCiAJCS8qIHBvd2VyIGRvd24gcGh5IHRvIGJyZWFrIGxpbmsgKHRoaXMgbWF5IG5vdCB3b3JrKSAgKi8KIAkJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfUENSIHwgKFBDUl9QT1dFUkRPV04gfCBzcGVlZCB8IGR1cGxleCkpOwotCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiAKIAkJLyogd2FpdCwgTWFydmVsbCBzYXlzIDEgc2VjLCB0cnkgdG8gZ2V0IGF3YXkgd2l0aCAxMCBtcyAqLwogCQltZGVsYXkoMTApOwpAQCAtMjEyOCw0MyArMTc2MywxNyBAQAogCQkJICAgc29mdCByZXNldCBwaHksIHBvd2VydXAgKi8KIAkJCXBoeV9jb25maWcgPQogCQkJICAgIChNSUlDUl9SRUdfUENSIHwgKFBDUl9SRVNFVCB8IHNwZWVkIHwgZHVwbGV4KSk7Ci0JCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAkJfSBlbHNlIHsJLyogaXQncyBhIENpY2FkYSBQSFkgICovCiAJCQkvKiBkaXNhYmxlIGF1dG8tbmVnLCBzZXQgc3BlZWQsIHBvd2VydXAgICovCiAJCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCAoc3BlZWQgfCBkdXBsZXgpKTsKLQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywKLQkJCQkgIEZMVVNIKTsKKwkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQl9CiAJfQotCi0JREJHX01TRwotCSAgICAoInNsaWNvc3M6ICVzICglcykgRVhJVCBzbGljX2xpbmtfY29uZmlnIDogc3RhdGVbJWRdIFwKLQkgICAgcGh5X2NvbmZpZ1sleF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnN0YXRlLAotCSAgICBwaHlfY29uZmlnKTsKIH0KIAogc3RhdGljIHZvaWQgc2xpY19jYXJkX2NsZWFudXAoc3RydWN0IHNsaWNjYXJkICpjYXJkKQogewotCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSXG4iLCBfX2Z1bmNfXyk7Ci0KLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWlmIChjYXJkLT5kdW1wYnVmZmVyKSB7Ci0JCWNhcmQtPmR1bXBidWZmZXJfcGh5cyA9IDA7Ci0JCWNhcmQtPmR1bXBidWZmZXJfcGh5c2wgPSAwOwotCQljYXJkLT5kdW1wYnVmZmVyX3BoeXNoID0gMDsKLQkJa2ZyZWUoY2FyZC0+ZHVtcGJ1ZmZlcik7Ci0JCWNhcmQtPmR1bXBidWZmZXIgPSBOVUxMOwotCX0KLQlpZiAoY2FyZC0+Y21kYnVmZmVyKSB7Ci0JCWNhcmQtPmNtZGJ1ZmZlcl9waHlzID0gMDsKLQkJY2FyZC0+Y21kYnVmZmVyX3BoeXNsID0gMDsKLQkJY2FyZC0+Y21kYnVmZmVyX3BoeXNoID0gMDsKLQkJa2ZyZWUoY2FyZC0+Y21kYnVmZmVyKTsKLQkJY2FyZC0+Y21kYnVmZmVyID0gTlVMTDsKLQl9Ci0jZW5kaWYKLQogCWlmIChjYXJkLT5sb2FkdGltZXJzZXQpIHsKIAkJY2FyZC0+bG9hZHRpbWVyc2V0ID0gMDsKIAkJZGVsX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOwpAQCAtMjE3Myw3ICsxNzgyLDYgQEAKIAlzbGljX2RlYnVnX2NhcmRfZGVzdHJveShjYXJkKTsKIAogCWtmcmVlKGNhcmQpOwotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKIH0KIAogc3RhdGljIGludCBzbGljX2NhcmRfZG93bmxvYWRfZ2JyY3Yoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yMTgzLDE1ICsxNzkxLDE2IEBACiAJaW50IHJldDsKIAlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKIAl1MzIgY29kZWFkZHI7Ci0JdW5zaWduZWQgY2hhciAqaW5zdHJ1Y3Rpb24gPSBOVUxMOworCXUzMiBpbnN0cnVjdGlvbjsKKwlpbnQgaW5kZXggPSAwOwogCXUzMiByY3Z1Y29kZWxlbiA9IDA7CiAKIAlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CiAJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6Ci0JCWZpbGUgPSAib2FzaXNfcmN2LmJpbiI7CisJCWZpbGUgPSAic2xpY29zcy9vYXNpc3JjdnVjb2RlLnN5cyI7CiAJCWJyZWFrOwogCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgotCQlmaWxlID0gImdiX3Jjdi5iaW4iOworCQlmaWxlID0gInNsaWNvc3MvZ2JyY3Z1Y29kZS5zeXMiOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlBU1NFUlQoMCk7CkBAIC0yMjAwLDEyICsxODA5LDEzIEBACiAKIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmFkYXB0ZXItPnBjaWRldi0+ZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0xJQ09TUzogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIGZpbGUpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCSJTTElDT1NTOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlsZSk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaW5zdHJ1Y3Rpb24gPSAodW5zaWduZWQgY2hhciAqKWZ3LT5kYXRhOwotCXJjdnVjb2RlbGVuID0gZnctPnNpemU7CisJcmN2dWNvZGVsZW4gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwlpbmRleCArPSA0OwogCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKIAljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKIAkJaWYgKHJjdnVjb2RlbGVuICE9IE9hc2lzUmN2VUNvZGVMZW4pCkBAIC0yMjE5LDI5ICsxODI5LDI4IEBACiAJCUFTU0VSVCgwKTsKIAkJYnJlYWs7CiAJfQotCiAJLyogc3RhcnQgZG93bmxvYWQgKi8KLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIFNMSUNfUkNWV0NTX0JFR0lOLCBGTFVTSCk7Ci0KKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfQkVHSU4sIEZMVVNIKTsKIAkvKiBkb3dubG9hZCB0aGUgcmN2IHNlcXVlbmNlciB1Y29kZSAqLwogCWZvciAoY29kZWFkZHIgPSAwOyBjb2RlYWRkciA8IHJjdnVjb2RlbGVuOyBjb2RlYWRkcisrKSB7CiAJCS8qIHdyaXRlIG91dCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCi0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgY29kZWFkZHIsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIGNvZGVhZGRyLCBGTFVTSCk7CiAKKwkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJaW5kZXggKz0gNDsKIAkJLyogd3JpdGUgb3V0IHRoZSBpbnN0cnVjdGlvbiBkYXRhIGxvdyBhZGRyICovCi0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywKLQkJCSAgKHUzMikgKih1MzIgKikgaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKLQkJaW5zdHJ1Y3Rpb24gKz0gNDsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIGluc3RydWN0aW9uLCBGTFVTSCk7CiAKKwkJaW5zdHJ1Y3Rpb24gPSAqKHU4ICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQlpbmRleCsrOwogCQkvKiB3cml0ZSBvdXQgdGhlIGluc3RydWN0aW9uIGRhdGEgaGlnaCBhZGRyICovCi0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgKHUzMikgKmluc3RydWN0aW9uLAotCQkJICBGTFVTSCk7Ci0JCWluc3RydWN0aW9uICs9IDE7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCAodTgpaW5zdHJ1Y3Rpb24sCisJCQkJIEZMVVNIKTsKIAl9CiAKIAkvKiBkb3dubG9hZCBmaW5pc2hlZCAqLwogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfRklOSVNILCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIFNMSUNfUkNWV0NTX0ZJTklTSCwgRkxVU0gpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjU0LDQxICsxODYzLDIxIEBACiAJaW50IHRoaXNzZWN0aW9uc2l6ZTsKIAlpbnQgY29kZWFkZHI7CiAJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7Ci0JdTMyICppbnN0cnVjdGlvbiA9IE5VTEw7Ci0JdTMyICpsYXN0aW5zdHJ1Y3QgPSBOVUxMOwotCXUzMiAqc3RhcnRpbnN0cnVjdCA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciAqbmV4dGluc3RydWN0OworCXUzMiBpbnN0cnVjdGlvbjsKIAl1MzIgYmFzZWFkZHJlc3M7CiAJdTMyIGZhaWx1cmU7CiAJdTMyIGk7CiAJdTMyIG51bXNlY3RzID0gMDsKIAl1MzIgc2VjdHNpemVbM107CiAJdTMyIHNlY3RzdGFydFszXTsKLQotLyogICAgICBEQkdfTVNHICgic2xpY29zczogJXMgKCVzKSBhZGFwdGVyWyVwXSBjYXJkWyVwXSBkZXZpZFsleF0gXAotCWppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIsCi0JICAgIGFkYXB0ZXItPmNhcmQsIGFkYXB0ZXItPmRldmlkLGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7ICovCisJaW50IHVjb2RlX3N0YXJ0LCBpbmRleCA9IDA7CiAKIAlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CiAJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6Ci0vKiAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyBkZXZpZD09U0xJQ18yR0JfREVWSUNFX0lEIHNlY3Rpb25zWyV4XVxuIiwKLQlfX2Z1bmNfXywgKHVpbnQpIE9OdW1TZWN0aW9ucyk7ICovCi0JCWZpbGUgPSAic2xpY19vYXNpcy5iaW4iOwotCQludW1zZWN0cyA9IE9OdW1TZWN0aW9uczsKLQkJZm9yIChpID0gMDsgaSA8IG51bXNlY3RzOyBpKyspIHsKLQkJCXNlY3RzaXplW2ldID0gT1NlY3Rpb25TaXplW2ldOwotCQkJc2VjdHN0YXJ0W2ldID0gT1NlY3Rpb25TdGFydFtpXTsKLQkJfQorCQlmaWxlID0gInNsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMiOwogCQlicmVhazsKIAljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKLS8qICAgICAgICAgICAgICBEQkdfTVNHICgic2xpY29zczogJXMgZGV2aWQ9PVNMSUNfMUdCX0RFVklDRV9JRCBzZWN0aW9uc1sleF1cbiIsCi0JCV9fZnVuY19fLCAodWludCkgTU51bVNlY3Rpb25zKTsgKi8KLQkJZmlsZSA9ICJzbGljX21vamF2ZS5iaW4iOwotCQludW1zZWN0cyA9IE1OdW1TZWN0aW9uczsKLQkJZm9yIChpID0gMDsgaSA8IG51bXNlY3RzOyBpKyspIHsKLQkJCXNlY3RzaXplW2ldID0gTVNlY3Rpb25TaXplW2ldOwotCQkJc2VjdHN0YXJ0W2ldID0gTVNlY3Rpb25TdGFydFtpXTsKLQkJfQorCQlmaWxlID0gInNsaWNvc3MvZ2Jkb3dubG9hZC5zeXMiOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlBU1NFUlQoMCk7CkBAIC0yMjk2LDEzMSArMTg4NSw4NCBAQAogCX0KIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmFkYXB0ZXItPnBjaWRldi0+ZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0xJQ09TUzogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIGZpbGUpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCSJTTElDT1NTOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlsZSk7CiAJCXJldHVybiByZXQ7CiAJfQotCisJbnVtc2VjdHMgPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwlpbmRleCArPSA0OwogCUFTU0VSVChudW1zZWN0cyA8PSAzKTsKLQorCWZvciAoaSA9IDA7IGkgPCBudW1zZWN0czsgaSsrKSB7CisJCXNlY3RzaXplW2ldID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCWluZGV4ICs9IDQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1zZWN0czsgaSsrKSB7CisJCXNlY3RzdGFydFtpXSA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQlpbmRleCArPSA0OworCX0KKwl1Y29kZV9zdGFydCA9IGluZGV4OworCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJaW5kZXggKz0gNDsKIAlmb3IgKHNlY3Rpb24gPSAwOyBzZWN0aW9uIDwgbnVtc2VjdHM7IHNlY3Rpb24rKykgewotCQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7Ci0JCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgotCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopKGZ3LT5kYXRhICsgKFNFQ1RJT05fU0laRSAqCi0JCQkJCQkJCXNlY3Rpb24pKTsKLQkJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOwotCQkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKLQkJCWxhc3RpbnN0cnVjdCA9Ci0JCQkgICAgKHUzMiAqKShmdy0+ZGF0YSArIChTRUNUSU9OX1NJWkUgKiBzZWN0aW9uKSArCi0JCQkJCXNlY3RzaXplW3NlY3Rpb25dIC0gOCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoZnctPmRhdGEgKyAoU0VDVElPTl9TSVpFICoKLQkJCQkJCQkJc2VjdGlvbikpOwotCQkJYmFzZWFkZHJlc3MgPSBzZWN0c3RhcnRbc2VjdGlvbl07Ci0JCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOwotCQkJbGFzdGluc3RydWN0ID0KLQkJCSAgICAodTMyICopKGZ3LT5kYXRhICsgKFNFQ1RJT05fU0laRSAqIHNlY3Rpb24pICsKLQkJCQkJc2VjdHNpemVbc2VjdGlvbl0gLSA4KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KLQogCQliYXNlYWRkcmVzcyA9IHNlY3RzdGFydFtzZWN0aW9uXTsKIAkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKIAogCQlmb3IgKGNvZGVhZGRyID0gMDsgY29kZWFkZHIgPCB0aGlzc2VjdGlvbnNpemU7IGNvZGVhZGRyKyspIHsKLQkJCXN0YXJ0aW5zdHJ1Y3QgPSBpbnN0cnVjdGlvbjsKLQkJCW5leHRpbnN0cnVjdCA9ICgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uKSArIDg7CiAJCQkvKiBXcml0ZSBvdXQgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsIGJhc2VhZGRyZXNzICsgY29kZWFkZHIsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd2NzLAorCQkJCQkgYmFzZWFkZHJlc3MgKyBjb2RlYWRkciwgRkxVU0gpOwogCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGxvdyBhZGRyICovCi0JCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgKmluc3RydWN0aW9uLCBGTFVTSCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopKCh1bnNpZ25lZCBjaGFyICopaW5zdHJ1Y3Rpb24gKyA0KTsKLSNlbHNlCi0JCQlpbnN0cnVjdGlvbisrOwotI2VuZGlmCisJCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd2NzLCBpbnN0cnVjdGlvbiwgRkxVU0gpOworCQkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJCWluZGV4ICs9IDQ7CisKIAkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBoaWdoIGFkZHIgKi8KLQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOwotI2Vsc2UKLQkJCWluc3RydWN0aW9uKys7Ci0jZW5kaWYKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193Y3MsIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJfQogCX0KLQorCWluZGV4ID0gdWNvZGVfc3RhcnQ7CiAJZm9yIChzZWN0aW9uID0gMDsgc2VjdGlvbiA8IG51bXNlY3RzOyBzZWN0aW9uKyspIHsKLQkJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgewotCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKLQkJCWluc3RydWN0aW9uID0gKHUzMiAqKWZ3LT5kYXRhICsgKFNFQ1RJT05fU0laRSAqCi0JCQkJCQkJCXNlY3Rpb24pOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgotCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopZnctPmRhdGEgKyAoU0VDVElPTl9TSVpFICoKLQkJCQkJCQkJc2VjdGlvbik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFTU0VSVCgwKTsKLQkJCWJyZWFrOwotCQl9Ci0KKwkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKIAkJYmFzZWFkZHJlc3MgPSBzZWN0c3RhcnRbc2VjdGlvbl07CiAJCWlmIChiYXNlYWRkcmVzcyA8IDB4ODAwMCkKIAkJCWNvbnRpbnVlOwogCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOwogCi0vKiAgICAgICAgREJHX01TRyAoInNsaWNvc3M6IENPTVBBUkUgc2VjdG9uWyV4XSBiYXNlYWRkclsleF0gc2VjdG5zaXplWyV4XVxuIiwKLQkJKHVpbnQpc2VjdGlvbixiYXNlYWRkcmVzcyx0aGlzc2VjdGlvbnNpemUpOyovCi0KIAkJZm9yIChjb2RlYWRkciA9IDA7IGNvZGVhZGRyIDwgdGhpc3NlY3Rpb25zaXplOyBjb2RlYWRkcisrKSB7CiAJCQkvKiBXcml0ZSBvdXQgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsCi0JCQkJICBTTElDX1dDU19DT01QQVJFIHwgKGJhc2VhZGRyZXNzICsgY29kZWFkZHIpLAotCQkJCSAgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3djcywKKwkJCQlTTElDX1dDU19DT01QQVJFIHwgKGJhc2VhZGRyZXNzICsgY29kZWFkZHIpLAorCQkJCUZMVVNIKTsKIAkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBsb3cgYWRkciAqLwotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7Ci0jZWxzZQotCQkJaW5zdHJ1Y3Rpb24rKzsKLSNlbmRpZgorCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3djcywgaW5zdHJ1Y3Rpb24sCisJCQkJCSBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBoaWdoIGFkZHIgKi8KLQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOwotI2Vsc2UKLQkJCWluc3RydWN0aW9uKys7Ci0jZW5kaWYKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193Y3MsIGluc3RydWN0aW9uLAorCQkJCQkgRkxVU0gpOworCQkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJCWluZGV4ICs9IDQ7CisKIAkJCS8qIENoZWNrIFNSQU0gbG9jYXRpb24gemVyby4gSWYgaXQgaXMgbm9uLXplcm8uIEFib3J0LiovCi0JCQlmYWlsdXJlID0gcmVhZGwoKHUzMiBfX2lvbWVtICopJnNsaWNfcmVncy0+c2xpY19yZXNldCk7CisvKgkJCWZhaWx1cmUgPSByZWFkbCgodTMyIF9faW9tZW0gKikmc2xpY19yZWdzLT5zbGljX3Jlc2V0KTsKIAkJCWlmIChmYWlsdXJlKSB7Ci0JCQkJREJHX01TRwotCQkJCSAgICAoInNsaWNvc3M6ICVzIEZBSUxVUkUgRVhJVCBjb2RlYWRkclsleF0gXAotCQkJCSAgICB0aGlzc2VjdGlvbnNpemVbJXhdIGZhaWx1cmVbJXhdXG4iLAotCQkJCSAgICAgX19mdW5jX18sIGNvZGVhZGRyLCB0aGlzc2VjdGlvbnNpemUsCi0JCQkJICAgICBmYWlsdXJlKTsKIAkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KKwkJCX0qLwogCQl9CiAJfQotLyogICAgREJHX01TRyAoInNsaWNvc3M6IENvbXBhcmUgZG9uZVxuIik7Ki8KIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkvKiBFdmVyeXRoaW5nIE9LLCBraWNrIG9mZiB0aGUgY2FyZCAqLwogCW1kZWxheSgxMCk7Ci0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsIFNMSUNfV0NTX1NUQVJULCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3djcywgU0xJQ19XQ1NfU1RBUlQsIEZMVVNIKTsKIAogCS8qIHN0YWxsIGZvciAyMCBtcywgbG9uZyBlbm91Z2ggZm9yIHVjb2RlIHRvIGluaXQgY2FyZAogCSAgIGFuZCByZWFjaCBtYWlubG9vcCAqLwogCW1kZWxheSgyMCk7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVYSVQgYWRhcHRlclslcF0gY2FyZFslcF1cbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQpOwotCiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQogCkBAIC0yNDI4LDE5ICsxOTcwLDEwIEBACiB7CiAJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKIAotLyogIERCR19NU0cgKCIlcyBFTlRFUiBjYXJkLT5jb25maWdfc2V0WyV4XSBwb3J0WyVkXSBwaHlzcG9ydFslZF0gZnVuY3QjWyVkXVxuIiwKLSAgICBfX2Z1bmNfXywgY2FyZC0+Y29uZmlnX3NldCwgYWRhcHRlci0+cG9ydCwgYWRhcHRlci0+cGh5c3BvcnQsCi0gICAgYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIpOwotCi0gICAgc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCi0KIAlpZiAoKGFkYXB0ZXItPmNhcmQpICYmIChjYXJkLT5jb25maWdfc2V0KSkgewogCQltZW1jcHkoYWRhcHRlci0+bWFjYWRkciwKIAkJICAgICAgIGNhcmQtPmNvbmZpZy5NYWNJbmZvW2FkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyXS5tYWNhZGRyQSwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19jb25maWdfbWFjKSk7Ci0vKiAgICAgIERCR19NU0cgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwKLQlfX2Z1bmNfXyk7Ci0Jc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7Ki8KIAkJaWYgKCEoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0gfHwKIAkJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10gfHwKIAkJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pKSB7CkBAIC0yNDUxLDE1ICsxOTg0LDExIEBACiAJCQkgICAgICAgNik7CiAJCX0KIAl9Ci0vKiAgREJHX01TRyAoIiVzIEVYSVQgcG9ydCAlZFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQpOwotICAgIHNsaWNfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOyAqLwogfQogCiBzdGF0aWMgdm9pZCBzbGljX2ludGFnZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2YWx1ZSkKIHsKLQlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKLQotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaW50YWdnLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pbnRhZ2csIHZhbHVlLCBGTFVTSCk7CiAJYWRhcHRlci0+Y2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSB2YWx1ZTsKIH0KIApAQCAtMjQ4NSwxMCArMjAxNCw2IEBACiAJc3RydWN0IGF0a19mcnUgKnBhdGtmcnU7CiAJdW5pb24gb2VtZnJ1ICpwb2VtZnJ1OwogCi0JREJHX01TRwotCSAgICAoInNsaWNvc3M6ICVzIEVOVEVSIGNhcmRbJXBdIGFkYXB0ZXJbJXBdIGNhcmQtPnN0YXRlWyV4XSBcCi0JICAgIHNpemVbJWRdXG4iLCBfX2Z1bmNfXywgY2FyZCwgYWRhcHRlciwgY2FyZC0+c3RhdGUsIGNhcmQtPmNhcmRfc2l6ZSk7Ci0KIAkvKiBSZXNldCBldmVyeXRoaW5nIGV4Y2VwdCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLwogCXNsaWNfc29mdF9yZXNldChhZGFwdGVyKTsKIApAQCAtMjQ5Niw5ICsyMDIxLDkgQEAKIAlzdGF0dXMgPSBzbGljX2NhcmRfZG93bmxvYWQoYWRhcHRlcik7CiAKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCURCR19FUlJPUigiU0xJQyBkb3dubG9hZCBmYWlsZWQgYnVzICVkIHNsb3QgJWRcbiIsCi0JCQkgICh1aW50KSBhZGFwdGVyLT5idXNudW1iZXIsCi0JCQkgICh1aW50KSBhZGFwdGVyLT5zbG90bnVtYmVyKTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkiZG93bmxvYWQgZmFpbGVkIGJ1cyAlZCBzbG90ICVkXG4iLAorCQkJYWRhcHRlci0+YnVzbnVtYmVyLCBhZGFwdGVyLT5zbG90bnVtYmVyKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTI1MTAsMzMgKzIwMzUsMjQgQEAKIAkJcGh5c19jb25maWdsID0gU0xJQ19HRVRfQUREUl9MT1cocGh5c19jb25maWcpOwogCQlwaHlzX2NvbmZpZ2ggPSBTTElDX0dFVF9BRERSX0hJR0gocGh5c19jb25maWcpOwogCi0JCURCR19NU0coInNsaWNvc3M6ICVzIEVlcHJvbSBpbmZvICBhZGFwdGVyIFslcF1cbiAgICAiCi0JCQkic2l6ZSAgICAgICAgWyV4XVxuICAgIHBlZXByb20gICAgIFslcF1cbiAgICAiCi0JCQkicGh5c19jb25maWcgWyVwXVxuICAgIHBoeXNfY29uZmlnbFsleF1cbiAgICAiCi0JCQkicGh5c19jb25maWdoWyV4XVxuIiwKLQkJCV9fZnVuY19fLCBhZGFwdGVyLAotCQkJKHUzMilzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwKLQkJCXBlZXByb20sICh2b2lkICopIHBoeXNfY29uZmlnLCBwaHlzX2NvbmZpZ2wsCi0JCQlwaHlzX2NvbmZpZ2gpOwogCQlpZiAoIXBlZXByb20pIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiU0xJQyBlZXByb20gcmVhZCBmYWlsZWQgdG8gZ2V0IG1lbW9yeSBidXMgJWQgXAotCQkJICAgIHNsb3QgJWRcbiIsCi0JCQkgICAgICh1aW50KSBhZGFwdGVyLT5idXNudW1iZXIsCi0JCQkgICAgICh1aW50KSBhZGFwdGVyLT5zbG90bnVtYmVyKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJCSJlZXByb20gcmVhZCBmYWlsZWQgdG8gZ2V0IG1lbW9yeSAiCisJCQkJImJ1cyAlZCBzbG90ICVkXG4iLCBhZGFwdGVyLT5idXNudW1iZXIsCisJCQkJYWRhcHRlci0+c2xvdG51bWJlcik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfSBlbHNlIHsKIAkJCW1lbXNldChwZWVwcm9tLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSk7CiAJCX0KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CiAJCW1kZWxheSgxKTsKIAkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCiAJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNwLAotCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pc3IpLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwKKwkJCQkgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKIAkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKIApAQCAtMjU0NCw0MSArMjA2MCwzMyBAQAogCiAJCWZvciAoOzspIHsKIAkJCWlmIChhZGFwdGVyLT5wc2htZW0tPmlzcikgewotCQkJCURCR19NU0coIiVzIHNobWVtWyVwXSBzaG1lbS0+aXNyWyV4XVxuIiwKLQkJCQkJX19mdW5jX18sIGFkYXB0ZXItPnBzaG1lbSwKLQkJCQkJYWRhcHRlci0+cHNobWVtLT5pc3IpOwotCiAJCQkJaWYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyICYgSVNSX1VQQykgewogCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7Ci0JCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2lzcCwKLQkJCQkJCSAgICAwLAotCQkJCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCQkJICAgIDAsIEZMVVNIKTsKLQkJCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3IsIDAsCi0JCQkJCQkgIEZMVVNIKTsKKwkJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAorCQkJCQkJJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkwLCBGTFVTSCk7CisJCQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsCisJCQkJCQkJIDAsIEZMVVNIKTsKIAogCQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIDApOwogCQkJCQlicmVhazsKIAkJCQl9IGVsc2UgewogCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7Ci0JCQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNyLCAwLAotCQkJCQkJICBGTFVTSCk7CisJCQkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsCisJCQkJCQkJIDAsIEZMVVNIKTsKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCW1kZWxheSgxKTsKIAkJCQlpKys7CiAJCQkJaWYgKGkgPiA1MDAwKSB7Ci0JCQkJCURCR19FUlJPUgotCQkJCQkgICAgKCJTTElDOiAlZCBjb25maWcgZGF0YSBmZXRjaCB0aW1lZFwKLQkJCQkJICAgICAgb3V0IVxuIiwgYWRhcHRlci0+cG9ydCk7Ci0JCQkJCURCR19NU0coIiVzIHNobWVtWyVwXSBzaG1lbS0+aXNyWyV4XVxuIiwKLQkJCQkJCV9fZnVuY19fLCBhZGFwdGVyLT5wc2htZW0sCi0JCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzcik7Ci0JCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKLQkJCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkJCSAgICAwLCBGTFVTSCk7CisJCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJCQkJIiVkIGNvbmZpZyBkYXRhIGZldGNoIHRpbWVkIG91dCFcbiIsCisJCQkJCQlhZGFwdGVyLT5wb3J0KTsKKwkJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAorCQkJCQkJJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkwLCBGTFVTSCk7CiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCX0KIAkJCX0KQEAgLTI2MTQsNyArMjEyMiw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCA9IEZBTFNFOworCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBmYWxzZTsKIAogCQkvKiAgc2VlIGlmIHRoZSBFRVBST00gaXMgdmFsaWQgYnkgY2hlY2tpbmcgaXQncyBjaGVja3N1bSAqLwogCQlpZiAoKGVlY29kZXNpemUgPD0gTUFYX0VFQ09ERV9TSVpFKSAmJgpAQCAtMjYzMyw3ICsyMTQxLDcgQEAKIAkJCSAgICB3ZSB3b3VsZG4ndCBuZWVkIHRoaXMgc2hpdAogCQkJKi8KIAkJCWlmIChlZV9jaGtzdW0gPT0gY2FsY19jaGtzdW0pCi0JCQkJY2FyZC0+Y29uZmlnLkVlcHJvbVZhbGlkID0gVFJVRTsKKwkJCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSB0cnVlOwogCQl9CiAJCS8qICBjb3B5IGluIHRoZSBEUkFNIHNpemUgKi8KIAkJY2FyZC0+Y29uZmlnLkRyYW1TaXplID0gZHJhbXNpemU7CkBAIC0yNjQzLDggKzIxNTEsNiBAQAogCQkJbWVtY3B5KCZjYXJkLT5jb25maWcuTWFjSW5mb1tpXSwKIAkJCSAgICAgICAmcG1hY1tpXSwgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKIAkJfQotLyogICAgICBEQkdfTVNHICgiJXMgRUVQUk9NIENoZWNrc3VtIEdvb2Q/ICVkICBNYWNBZGRyZXNzXG4iLF9fZnVuY19fLAotCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQpOyAqLwogCiAJCS8qICBjb3B5IHRoZSBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLwogCQljYXJkLT5jb25maWcuRnJ1Rm9ybWF0ID0gZnJ1Zm9ybWF0OwpAQCAtMjY1NCwyMCArMjE2MCwxNCBAQAogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksCiAJCQkJICAgIHBlZXByb20sIHBoeXNfY29uZmlnKTsKLQkJREJHX01TRwotCQkgICAgKCJzbGljb3NzOiAlcyBhZGFwdGVyJWQgWyVwXSBzaXplWyV4XSBGUkVFIHBlZXByb21bJXBdIFwKLQkJICAgICBwaHlzX2NvbmZpZ1slcF1cbiIsCi0JCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXIsCi0JCSAgICAgKHUzMikgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSksIHBlZXByb20sCi0JCSAgICAgKHZvaWQgKikgcGh5c19jb25maWcpOwogCiAJCWlmICgoIWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCkgJiYKIAkJICAgIChhZGFwdGVyLT5yZWdfcGFyYW1zLmZhaWxfb25fYmFkX2VlcHJvbSkpIHsKLQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJICAgIHNsaWNfcmVncy0+c2xpY19pc3AsCi0JCQkJICAgIDAsIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBGTFVTSCk7Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoInVuc3VwcG9ydGVkIENPTkZJR1VSQVRJT04gIEVFUFJPTSBpbnZhbGlkXG4iKTsKKwkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCSAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCSAwLCBGTFVTSCk7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCQkidW5zdXBwb3J0ZWQgQ09ORklHVVJBVElPTiBFRVBST00gaW52YWxpZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0yNjc1LDc0ICsyMTc1LDI2IEBACiAJfQogCiAJaWYgKHNsaWNfY2FyZF9kb3dubG9hZF9nYnJjdihhZGFwdGVyKSkgewotCQlEQkdfRVJST1IoIiVzIHVuYWJsZSB0byBkb3dubG9hZCBHQiByZWNlaXZlIG1pY3JvY29kZVxuIiwKLQkJCSAgX19mdW5jX18pOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCSJ1bmFibGUgdG8gZG93bmxvYWQgR0IgcmVjZWl2ZSBtaWNyb2NvZGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cpIHsKLQkJREJHX01TRwotCQkgICAgKCJEeW5hbWljIEludGVycnVwdCBBZ2dyZWdhdGlvbltFTkFCTEVEXTogc2xpYyVkIFwKLQkJICAgICBTRVQgaW50YWdnIHRvICVkXG4iLAotCQkgICAgIGNhcmQtPmNhcmRudW0sIDApOworCWlmIChzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZykKIAkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIDApOwotCX0gZWxzZSB7CisJZWxzZQogCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgaW50YWdnX2RlbGF5KTsKLQkJREJHX01TRwotCQkgICAgKCJEeW5hbWljIEludGVycnVwdCBBZ2dyZWdhdGlvbltESVNBQkxFRF06IHNsaWMlZCBcCi0JCSAgICAgU0VUIGludGFnZyB0byAlZFxuIiwKLQkJICAgICBjYXJkLT5jYXJkbnVtLCBpbnRhZ2dfZGVsYXkpOwotCX0KIAogCS8qCiAJICogIEluaXRpYWxpemUgcGluZyBzdGF0dXMgdG8gIm9rIgogCSAqLwogCWNhcmQtPnBpbmdzdGF0dXMgPSBJU1JfUElOR01BU0s7CiAKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWlmICghY2FyZC0+ZHVtcGJ1ZmZlcikgewotCQljYXJkLT5kdW1wYnVmZmVyID0ga21hbGxvYyhEVU1QX1BBR0VfU0laRSwgR0ZQX0FUT01JQyk7Ci0KLQkJQVNTRVJUKGNhcmQtPmR1bXBidWZmZXIpOwotCQlpZiAoY2FyZC0+ZHVtcGJ1ZmZlciA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCS8qCi0JICogIFNtZWFyIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBhbmQgdGhlbiBvYnRhaW4KLQkgKiAgdGhlIFBIWVNJQ0FMIGFkZHJlc3Mgb2YgdGhpcyBzdHJ1Y3R1cmUKLQkgKi8KLQltZW1zZXQoY2FyZC0+ZHVtcGJ1ZmZlciwgMCwgRFVNUF9QQUdFX1NJWkUpOwotCWNhcmQtPmR1bXBidWZmZXJfcGh5cyA9IHZpcnRfdG9fYnVzKGNhcmQtPmR1bXBidWZmZXIpOwotCWNhcmQtPmR1bXBidWZmZXJfcGh5c2ggPSBTTElDX0dFVF9BRERSX0hJR0goY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzKTsKLQljYXJkLT5kdW1wYnVmZmVyX3BoeXNsID0gU0xJQ19HRVRfQUREUl9MT1coY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzKTsKLQotCS8qCi0JICogIEFsbG9jYXRlIENPTU1BTkQgQlVGRkVSCi0JICovCi0JaWYgKCFjYXJkLT5jbWRidWZmZXIpIHsKLQkJY2FyZC0+Y21kYnVmZmVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGR1bXBfY21kKSwgR0ZQX0FUT01JQyk7Ci0KLQkJQVNTRVJUKGNhcmQtPmNtZGJ1ZmZlcik7Ci0JCWlmIChjYXJkLT5jbWRidWZmZXIgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQkvKgotCSAqICBTbWVhciB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgYW5kIHRoZW4gb2J0YWluCi0JICogIHRoZSBQSFlTSUNBTCBhZGRyZXNzIG9mIHRoaXMgc3RydWN0dXJlCi0JICovCi0JbWVtc2V0KGNhcmQtPmNtZGJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBkdW1wX2NtZCkpOwotCWNhcmQtPmNtZGJ1ZmZlcl9waHlzID0gdmlydF90b19idXMoY2FyZC0+Y21kYnVmZmVyKTsKLQljYXJkLT5jbWRidWZmZXJfcGh5c2ggPSBTTElDX0dFVF9BRERSX0hJR0goY2FyZC0+Y21kYnVmZmVyX3BoeXMpOwotCWNhcmQtPmNtZGJ1ZmZlcl9waHlzbCA9IFNMSUNfR0VUX0FERFJfTE9XKGNhcmQtPmNtZGJ1ZmZlcl9waHlzKTsKLSNlbmRpZgotCiAJLyoKIAkgKiBMYXN0bHksIG1hcmsgb3VyIGNhcmQgc3RhdGUgYXMgdXAgYW5kIHJldHVybiBzdWNjZXNzCiAJICovCiAJY2FyZC0+c3RhdGUgPSBDQVJEX1VQOwogCWNhcmQtPnJlc2V0X2luX3Byb2dyZXNzID0gMDsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIGNhcmRbJXBdIGFkYXB0ZXJbJXBdIGNhcmQtPnN0YXRlWyV4XVxuIiwKLQkJX19mdW5jX18sIGNhcmQsIGFkYXB0ZXIsIGNhcmQtPnN0YXRlKTsKIAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KQEAgLTI3NTYsMTAgKzIyMDgsNiBAQAogCXVpbnQgaTsKIAl1aW50IHJkaG9zdGlkX29mZnNldCA9IDA7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBzbG90WyV4XSBidXNbJXhdIHBvcnRbJXhdXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+c2xvdG51bWJlciwgYWRhcHRlci0+YnVzbnVtYmVyLAotCQlhZGFwdGVyLT5wb3J0KTsKLQogCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKIAljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKIAkJcmRob3N0aWRfb2Zmc2V0ID0gU0xJQ19SREhPU1RJRF8yR0I7CkBAIC0yNzc1LDExICsyMjIzLDkgQEAKIAlob3N0aWRfcmVnID0KIAkgICAgKHUxNiBfX2lvbWVtICopICgoKHU4IF9faW9tZW0gKikgKGFkYXB0ZXItPnNsaWNfcmVncykpICsKIAkgICAgcmRob3N0aWRfb2Zmc2V0KTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAqaG9zdGlkX3JlZ1slcF0gPT0gIiwgX19mdW5jX18sIGhvc3RpZF9yZWcpOwogCiAJLyogcmVhZCB0aGUgMTYgYml0IGhvc3RpZCBmcm9tIFNSQU0gKi8KIAljYXJkX2hvc3RpZCA9ICh1c2hvcnQpIHJlYWR3KGhvc3RpZF9yZWcpOwotCURCR19NU0coIiBjYXJkX2hvc3RpZFsleF1cbiIsIGNhcmRfaG9zdGlkKTsKIAogCS8qIEluaXRpYWxpemUgYSBuZXcgY2FyZCBzdHJ1Y3R1cmUgaWYgbmVlZCBiZSAqLwogCWlmIChjYXJkX2hvc3RpZCA9PSBTTElDX0hPU1RJRF9ERUZBVUxUKSB7CkBAIC0yNzg5LDE3ICsyMjM1LDYgQEAKIAogCQljYXJkLT5uZXh0ID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOwogCQlzbGljX2dsb2JhbC5zbGljX2NhcmQgPSBjYXJkOwotI2lmIERCRwotCQlpZiAoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18yR0JfREVWSUNFX0lEKSB7Ci0JCQlEQkdfTVNHCi0JCQkgICAgKCJTTElDT1NTID09PiBJbml0aWFsaXplIDIgUG9ydCBHaWdhYml0IFNlcnZlciBcCi0JCQkgICAgIGFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yXG4iKTsKLQkJfSBlbHNlIHsKLQkJCURCR19NU0cKLQkJCSAgICAoIlNMSUNPU1MgPT0+IEluaXRpYWxpemUgMSBQb3J0IEdpZ2FiaXQgU2VydmVyIFwKLQkJCSAgICAgYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3JcbiIpOwotCQl9Ci0jZW5kaWYKIAkJY2FyZC0+YnVzbnVtYmVyID0gYWRhcHRlci0+YnVzbnVtYmVyOwogCQljYXJkLT5zbG90bnVtYmVyID0gYWRhcHRlci0+c2xvdG51bWJlcjsKIApAQCAtMjgxMiwyMyArMjI0NywxMSBAQAogCQkJfQogCQl9CiAJCXNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzKys7Ci0JCURCR19NU0coIlxuQ0FSRE5VTSA9PSAlZCAgVG90YWwgJWQgIENhcmRbJXBdXG5cbiIsCi0JCQljYXJkLT5jYXJkbnVtLCBzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcywgY2FyZCk7CiAKIAkJc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShjYXJkKTsKIAl9IGVsc2UgewotCQlEQkdfTVNHCi0JCSAgICAoInNsaWNvc3M6ICVzIENBUkQgYWxyZWFkeSBhbGxvY2F0ZWQsIGZpbmQgdGhlIFwKLQkJICAgICBjb3JyZWN0IGNhcmRcbiIsIF9fZnVuY19fKTsKIAkJLyogQ2FyZCBleGlzdHMsIGZpbmQgdGhlIGNhcmQgdGhpcyBhZGFwdGVyIGJlbG9uZ3MgdG8gKi8KIAkJd2hpbGUgKGNhcmQpIHsKLQkJCURCR19NU0cKLQkJCSAgICAoInNsaWNvc3M6ICVzIGNhcmRbJXBdIHNsb3RbJXhdIGJ1c1sleF0gXAotCQkJICAgICAgYWRhcHRwb3J0WyVwXSBob3N0aWRbJXhdIGNhcmRudW1bJXhdXG4iLAotCQkJICAgICBfX2Z1bmNfXywgY2FyZCwgY2FyZC0+c2xvdG51bWJlciwKLQkJCSAgICAgY2FyZC0+YnVzbnVtYmVyLCBjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdLAotCQkJICAgICBjYXJkX2hvc3RpZCwgY2FyZC0+Y2FyZG51bSk7Ci0KIAkJCWlmIChjYXJkLT5jYXJkbnVtID09IGNhcmRfaG9zdGlkKQogCQkJCWJyZWFrOwogCQkJY2FyZCA9IGNhcmQtPm5leHQ7CkBAIC0yODYxLDE0ICsyMjg0LDkgQEAKIAl9CiAJaWYgKCFwaHlzY2FyZCkgewogCQkvKiBubyBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciB0aGlzIHBoeXNpY2FsIGNhcmQgeWV0ICovCi0JCXBoeXNjYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNjYXJkKSwgR0ZQX0FUT01JQyk7CisJCXBoeXNjYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNjYXJkKSwgR0ZQX0tFUk5FTCk7CiAJCUFTU0VSVChwaHlzY2FyZCk7CiAKLQkJREJHX01TRwotCQkgICAgKCJcbiVzIEFsbG9jYXRlIGEgUEhZU0lDQUxjYXJkOlxuICAgIFBIWVNJQ0FMX0NhcmRbJXBdXG5cCi0JCSAgICAgTG9naWNhbENhcmQgIFslcF1cbiAgICBhZGFwdGVyICAgICAgWyVwXVxuIiwKLQkJICAgICBfX2Z1bmNfXywgcGh5c2NhcmQsIGNhcmQsIGFkYXB0ZXIpOwotCiAJCXBoeXNjYXJkLT5uZXh0ID0gc2xpY19nbG9iYWwucGh5c19jYXJkOwogCQlzbGljX2dsb2JhbC5waHlzX2NhcmQgPSBwaHlzY2FyZDsKIAkJcGh5c2NhcmQtPmFkYXB0ZXJzX2FsbG9jZCA9IDE7CkBAIC0yODgxLDggKzIyOTksNiBAQAogCUFTU0VSVChwaHlzY2FyZC0+YWRhcHRlclthZGFwdGVyLT5waHlzcG9ydF0gPT0gTlVMTCk7CiAJcGh5c2NhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cGh5c3BvcnRdID0gYWRhcHRlcjsKIAlhZGFwdGVyLT5waHlzY2FyZCA9IHBoeXNjYXJkOwotCURCR19NU0coIiAgICBQSFlTSUNBTF9Qb3J0ICVkICAgIExvZ2ljYWxfUG9ydCAgJWRcbiIsIGFkYXB0ZXItPnBoeXNwb3J0LAotCQlhZGFwdGVyLT5wb3J0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjg5MCwxNiArMjMwNiwxMiBAQAogc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCWlmIChhZGFwdGVyLT5jYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzIFFVSUVTQ0UgYWRhcHRlclslcF0gY2FyZFslcF0gZGV2aWRbJXhdXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQsIGFkYXB0ZXItPmRldmlkKTsKLQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19xdWllc2NlLCAwLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19xdWllc2NlLCAwLCBGTFVTSCk7CiAJCW1kZWxheSgxKTsKIAl9Ci0vKiAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyAoJXMpIGFkYXB0ZXJbJXBdIGNhcmRbJXBdIGRldmlkWyV4XVxuIiwKLQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5jYXJkLAotCSAgIGFkYXB0ZXItPmRldmlkKTsgKi8KIAotCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfcmVzZXQsIFNMSUNfUkVTRVRfTUFHSUMsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfcmVzZXQsIFNMSUNfUkVTRVRfTUFHSUMsCisJCQkgRkxVU0gpOwogCW1kZWxheSgxKTsKIH0KIApAQCAtMjkwOSwxMCArMjMyMSw2IEBACiAJdTMyIFJjclJlc2V0OwogCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwogCi0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBzbGljX2ludGVyZmFjZV9lbmFibGVbJXBdKCVkKVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlciwKLQkJYWRhcHRlci0+Y2FyZGluZGV4KTsKLQogCWlmIChsaW5rY2hhbmdlKSB7CiAJCS8qIFNldHVwIE1BQyAqLwogCQlzbGljX21hY19jb25maWcoYWRhcHRlcik7CkBAIC0yOTI4LDkgKzIzMzYsNyBAQAogCQkJIEdYQ1JfWE1URU4gfAkvKiBFbmFibGUgdHJhbnNtaXQgICovCiAJCQkgR1hDUl9QQVVTRUVOKTsJLyogRW5hYmxlIHBhdXNlICAgICAqLwogCi0JCURCR19NU0coInNsaWNvc3M6IEZEWCBhZGFwdFslcF0gc2V0IHhtdGNmZyB0byBbJXhdXG4iLCBhZGFwdGVyLAotCQkJdmFsdWUpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3d4Y2ZnLCB2YWx1ZSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CiAKIAkJLyogU2V0dXAgcmN2Y2ZnIGxhc3QgKi8KIAkJdmFsdWUgPSAoUmNyUmVzZXQgfAkvKiBSZXNldCwgaWYgbGlua2NoYW5nZSAqLwpAQCAtMjk0Myw5ICsyMzQ5LDcgQEAKIAkJdmFsdWUgPSAoR1hDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAgICAgKi8KIAkJCSBHWENSX1hNVEVOKTsJLyogRW5hYmxlIHRyYW5zbWl0ICAqLwogCi0JCURCR19NU0coInNsaWNvc3M6IEhEWCBhZGFwdFslcF0gc2V0IHhtdGNmZyB0byBbJXhdXG4iLCBhZGFwdGVyLAotCQkJdmFsdWUpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3d4Y2ZnLCB2YWx1ZSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CiAKIAkJLyogU2V0dXAgcmN2Y2ZnIGxhc3QgKi8KIAkJdmFsdWUgPSAoUmNyUmVzZXQgfAkvKiBSZXNldCwgaWYgbGlua2NoYW5nZSAqLwpAQCAtMjk2Miw4ICsyMzY2LDcgQEAKIAlpZiAoYWRhcHRlci0+bWFjb3B0cyAmIE1BQ19QUk9NSVNDKQogCQl2YWx1ZSB8PSBHUkNSX1JDVkFMTDsKIAotCURCR19NU0coInNsaWNvc3M6IGFkYXB0WyVwXSBzZXQgcmN2Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsIHZhbHVlKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmNmZywgdmFsdWUsIEZMVVNIKTsKIH0KIAogLyoKQEAgLTI5NzksMTggKzIzODIsMTggQEAKIAl2YWx1ZSA9IChHWENSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICovCiAJCSBHWENSX1BBVVNFRU4pOwkvKiBFbmFibGUgcGF1c2UgKi8KIAotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3d4Y2ZnLCB2YWx1ZSwgRkxVU0gpOwogCiAJdmFsdWUgPSAoR1JDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAgICAgICovCiAJCSBHUkNSX0NUTEVOIHwJLyogRW5hYmxlIENUTCBmcmFtZXMgKi8KIAkJIEdSQ1JfQUREUkFFTiB8CS8qIEFkZHJlc3MgQSBlbmFibGUgICovCiAJCSAoR1JDUl9IQVNIU0laRSA8PCBHUkNSX0hBU0hTSVpFX1NISUZUKSk7CiAKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmNmZywgdmFsdWUsIEZMVVNIKTsKIAogCS8qIHBvd2VyIGRvd24gcGh5ICovCiAJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfUENSIHwgKFBDUl9QT1dFUkRPV04pKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogfQogCiBzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19nZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcsCkBAIC0zMDEyLDE4ICsyNDE1LDE0IEBACiAKIAl2YWx1ZSA9ICoodTMyICopICZhZGFwdGVyLT5jdXJybWFjYWRkclsyXTsKIAl2YWx1ZSA9IG50b2hsKHZhbHVlKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmFsLCB2YWx1ZSwgRkxVU0gpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYmwsIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmFsLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJibCwgdmFsdWUsIEZMVVNIKTsKIAogCXZhbHVlMiA9ICh1MzIpICgoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gPDwgOCB8CiAJCQkgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdKSAmIDB4RkZGRik7CiAKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmFoLCB2YWx1ZTIsIEZMVVNIKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmJoLCB2YWx1ZTIsIEZMVVNIKTsKLQotCURCR19NU0coIiVzIHZhbHVlMVsleF0gdmFsdWUyWyV4XSBDYWxsIHNsaWNfbWNhc3Rfc2V0X21hc2tcbiIsCi0JCV9fZnVuY19fLCB2YWx1ZSwgdmFsdWUyKTsKLQlzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWgsIHZhbHVlMiwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJiaCwgdmFsdWUyLCBGTFVTSCk7CiAKIAkvKiBXcml0ZSBvdXIgbXVsdGljYXN0IG1hc2sgb3V0IHRvIHRoZSBjYXJkLiAgVGhpcyBpcyBkb25lICovCiAJLyogaGVyZSBpbiBhZGRpdGlvbiB0byB0aGUgc2xpY19tY2FzdF9hZGRyX3NldCByb3V0aW5lICAgICAqLwpAQCAtMzA1OCw3ICsyNDU3LDcgQEAKIAl9CiAKIAkvKiB3cml0ZSBtYWMgY29uZmlnICovCi0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193bWNmZywgdmFsdWUsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd21jZmcsIHZhbHVlLCBGTFVTSCk7CiAKIAkvKiBzZXR1cCBtYWMgYWRkcmVzc2VzICovCiAJc2xpY19tYWNfYWRkcmVzc19jb25maWcoYWRhcHRlcik7CkBAIC0zMDcyLDE4ICsyNDcxLDE1IEBACiAJdTE2ICpkaG9zdDIgPSAodTE2ICopJmV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdFs0XTsKIAlib29sIGVxdWFsYWRkcjsKIAotCWlmIChvcHRzICYgTUFDX1BST01JU0MpIHsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBQUk9NSVNDVU9VUy4gQWNjZXB0IGZyYW1lXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JCXJldHVybiBUUlVFOwotCX0KKwlpZiAob3B0cyAmIE1BQ19QUk9NSVNDKQorCQlyZXR1cm4gdHJ1ZTsKIAogCWlmICgoKmRob3N0NCA9PSAweEZGRkZGRkZGKSAmJiAoKmRob3N0MiA9PSAweEZGRkYpKSB7CiAJCWlmIChvcHRzICYgTUFDX0JDQVNUKSB7CiAJCQlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cysrOwotCQkJcmV0dXJuIFRSVUU7CisJCQlyZXR1cm4gdHJ1ZTsKIAkJfSBlbHNlIHsKLQkJCXJldHVybiBGQUxTRTsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KIApAQCAtMzA5MSw3ICsyNDg3LDcgQEAKIAkJaWYgKG9wdHMgJiBNQUNfQUxMTUNBU1QpIHsKIAkJCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzKys7CiAJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKLQkJCXJldHVybiBUUlVFOworCQkJcmV0dXJuIHRydWU7CiAJCX0KIAkJaWYgKG9wdHMgJiBNQUNfTUNBU1QpIHsKIAkJCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwpAQCAtMzEwMywyMCArMjQ5OSwyMCBAQAogCQkJCWlmIChlcXVhbGFkZHIpIHsKIAkJCQkJYWRhcHRlci0+cmN2X211bHRpY2FzdHMrKzsKIAkJCQkJYWRhcHRlci0+c3RhdHMubXVsdGljYXN0Kys7Ci0JCQkJCXJldHVybiBUUlVFOworCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQl9CiAJCQkJbWNhZGRyID0gbWNhZGRyLT5uZXh0OwogCQkJfQotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9IGVsc2UgewotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQogCWlmIChvcHRzICYgTUFDX0RJUkVDVEVEKSB7CiAJCWFkYXB0ZXItPnJjdl91bmljYXN0cysrOwotCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIHRydWU7CiAJfQotCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gZmFsc2U7CiAKIH0KIApAQCAtMzEyNSw4MCArMjUyMSwyOCBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwdHI7CiAKLQlEQkdfTVNHKCIlcyBFTlRFUiAoJXMpXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUJVU1k7CiAJaWYgKCFhZGFwdGVyKQogCQlyZXR1cm4gLUVCVVNZOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgY3VyciAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CisKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KGFkYXB0ZXItPmN1cnJtYWNhZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIG5ldyAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CiAKLQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIHRydWUpOwogCXJldHVybiAwOwogfQogCi0vKgotICogIHNsaWNfdGltZXJfZ2V0X3N0YXRzCi0gKgotICogVGltZXIgZnVuY3Rpb24gdXNlZCB0byBzdWNrIHRoZSBzdGF0aXN0aWNzIG91dCBvZiB0aGUgY2FyZCBldmVyeQotICogNTAgc2Vjb25kcyBvciB3aGF0ZXZlciBTVEFUU19USU1FUl9JTlRFUlZBTCBpcyBzZXQgdG8uCi0gKgotICovCi0jaWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAotc3RhdGljIHZvaWQgc2xpY190aW1lcl9nZXRfc3RhdHModWxvbmcgZGV2KQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKLQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOwotCi0JQVNTRVJUKGRldik7Ci0JYWRhcHRlciA9IG5ldGRldl9wcml2KChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldik7Ci0JQVNTRVJUKGFkYXB0ZXIpOwotCWNhcmQgPSBhZGFwdGVyLT5jYXJkOwotCUFTU0VSVChjYXJkKTsKLQotCWlmICgoY2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkgJiYKLQkgICAgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSAmJiAoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfVVApKSB7Ci0JCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQlzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsCi0JCQkJIFNMSUNfVVBSX1NUQVRTLAotCQkJCSBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pbmljc3RhdHMpLAotCQkJCSBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+aW5pY3N0YXRzKSwgMCwgMCk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCi0JCXNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKLQkJCQkgU0xJQ19VUFJfU1RBVFMsCi0JCQkJICh1MzIpICZwc2htZW0tPmluaWNzdGF0cywgMCwgMCwgMCk7Ci0jZWxzZQotCQlTdG9wIGNvbXBpbGF0aW9uOwotI2VuZGlmCi0JfSBlbHNlIHsKLS8qCQlEQkdfTVNHICgic2xpY29zczogJXMgYWRhcHRlclslcF0gbGlua3N0YXRlWyV4XSBOT1QgVVAhXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPmxpbmtzdGF0ZSk7ICovCi0JfQotCWFkYXB0ZXItPnN0YXRzdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKwotCSAgICBTTElDX1NFQ1NfVE9fSklGRlMoU1RBVFNfVElNRVJfSU5URVJWQUwpOwotCWFkZF90aW1lcigmYWRhcHRlci0+c3RhdHN0aW1lcik7Ci19Ci0jZW5kaWYKIHN0YXRpYyB2b2lkIHNsaWNfdGltZXJfbG9hZF9jaGVjayh1bG9uZyBjYXJkYWRkcikKIHsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSAoc3RydWN0IHNsaWNjYXJkICopY2FyZGFkZHI7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjYXJkLT5tYXN0ZXI7CisJdTMyIF9faW9tZW0gKmludGFnZzsKIAl1MzIgbG9hZCA9IGNhcmQtPmV2ZW50czsKIAl1MzIgbGV2ZWwgPSAwOwogCisJaW50YWdnID0gJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pbnRhZ2c7CisKIAlpZiAoKGFkYXB0ZXIpICYmIChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgJiYKIAkgICAgKGNhcmQtPnN0YXRlID09IENBUkRfVVApICYmIChzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZykpIHsKIAkJaWYgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMUdCX0RFVklDRV9JRCkgewpAQCAtMzIyMCw4ICsyNTY0LDcgQEAKIAkJCX0KIAkJCWlmIChjYXJkLT5sb2FkbGV2ZWxfY3VycmVudCAhPSBsZXZlbCkgewogCQkJCWNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ID0gbGV2ZWw7Ci0JCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pbnRhZ2csCi0JCQkJCSAgbGV2ZWwsIEZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKGludGFnZywgbGV2ZWwsIEZMVVNIKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChsb2FkID4gU0xJQ19MT0FEXzUpCkBAIC0zMjM4LDE0ICsyNTgxLDEyIEBACiAJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18wOwogCQkJaWYgKGNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ICE9IGxldmVsKSB7CiAJCQkJY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSBsZXZlbDsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ludGFnZywKLQkJCQkJICBsZXZlbCwgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUoaW50YWdnLCBsZXZlbCwgRkxVU0gpOwogCQkJfQogCQl9CiAJfQogCWNhcmQtPmV2ZW50cyA9IDA7Ci0JY2FyZC0+bG9hZHRpbWVyLmV4cGlyZXMgPQotCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFNMSUNfTE9BRFRJTUVSX1BFUklPRCk7CisJY2FyZC0+bG9hZHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKFNMSUNfTE9BRFRJTUVSX1BFUklPRCAqIEhaKTsKIAlhZGRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CiB9CiAKQEAgLTMyNTYsNyArMjU5Nyw4IEBACiAJY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJY3Vycl9waWQgPSBjdXJyZW50LT5waWQ7CiAKLQlEQkdfRVJST1IoIiVzIENQVSAjICVkIC0tLS0gUElEICMgJWRcbiIsIF9fZnVuY19fLCBjcHVpZCwgY3Vycl9waWQpOworCXByaW50ayhLRVJOX0VSUiAiJXMgQ1BVICMgJWQgLS0tLSBQSUQgIyAlZFxuIiwKKwkgICAgICAgX19mdW5jX18sIGNwdWlkLCBjdXJyX3BpZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2xpY191cHJfcXVldWVfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKQEAgLTMyNjksMTEgKzI2MTEsOSBAQAogCXN0cnVjdCBzbGljX3VwciAqdXBycXVldWU7CiAKIAl1cHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xpY191cHIpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXVwcikgewotCQlEQkdfTVNHKCIlcyBDT1VMRCBOT1QgQUxMT0NBVEUgVVBSIE1FTVxuIiwgX19mdW5jX18pOwotCisJaWYgKCF1cHIpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKwogCXVwci0+YWRhcHRlciA9IGFkYXB0ZXItPnBvcnQ7CiAJdXByLT51cHJfcmVxdWVzdCA9IHVwcl9yZXF1ZXN0OwogCXVwci0+dXByX2RhdGEgPSB1cHJfZGF0YTsKQEAgLTMzMjIsMTAgKzI2NjIsNiBAQAogCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CiAJc3RydWN0IHNsaWNfdXByICp1cHI7CiAKLS8qICAgIGlmIChjYXJkLT5kdW1wX3JlcXVlc3RlZCkgewotCURCR19NU0coIkVOVEVSIHNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUgRHVtcCBpbiBwcm9ncmVzcyBJU1JbJXhdXG4iLAotCQlpc3IpOwotICAgICAgfSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLCBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CiAJdXByID0gYWRhcHRlci0+dXByX2xpc3Q7CiAJaWYgKCF1cHIpIHsKQEAgLTMzNDEsMzggKzI2NzcsMTkgQEAKIAlzd2l0Y2ggKHVwci0+dXByX3JlcXVlc3QpIHsKIAljYXNlIFNMSUNfVVBSX1NUQVRTOgogCQl7Ci0jaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAogCQkJc3RydWN0IHNsaWNfc3RhdHMgKnNsaWNzdGF0cyA9CiAJCQkgICAgKHN0cnVjdCBzbGljX3N0YXRzICopICZhZGFwdGVyLT5wc2htZW0tPmluaWNzdGF0czsKIAkJCXN0cnVjdCBzbGljX3N0YXRzICpuZXdzdGF0cyA9IHNsaWNzdGF0czsKIAkJCXN0cnVjdCBzbGljX3N0YXRzICAqb2xkID0gJmFkYXB0ZXItPmluaWNzdGF0c19wcmV2OwogCQkJc3RydWN0IHNsaWNuZXRfc3RhdHMgKnN0c3QgPSAmYWRhcHRlci0+c2xpY19zdGF0czsKLSNlbmRpZgorCiAJCQlpZiAoaXNyICYgSVNSX1VQQ0VSUikgewotCQkJCURCR19FUlJPUgotCQkJCSAgICAoIlNMSUNfVVBSX1NUQVRTIGNvbW1hbmQgZmFpbGVkIGlzclsleF1cbiIsCi0JCQkJICAgICBpc3IpOworCQkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCQkiU0xJQ19VUFJfU1RBVFMgY29tbWFuZCBmYWlsZWQgaXNyWyV4XVxuIiwKKwkJCQkJaXNyKTsKIAogCQkJCWJyZWFrOwogCQkJfQotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKLS8qCQkJREJHX01TRyAoInNsaWNvc3M6ICVzIHJjdiAlbHg6JWx4OiVseDolbHg6JWx4ICVseCAlbHggIgotCQkJCSJ4bXQgJWx4OiVseDolbHg6JWx4OiVseCAlbHggJWx4XG4iLAotCQkJCSBfX2Z1bmNfXywKLQkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdW5pY2FzdHMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+cmN2X2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnJjdl9ieXRlczEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdGNwX2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnJjdl90Y3Bfc2VnczEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT5yY3Zfb3RoZXJfZXJyb3IxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+cmN2X2Ryb3BzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdW5pY2FzdHMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9ieXRlczEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdGNwX2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnhtaXRfdGNwX3NlZ3MxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9vdGhlcl9lcnJvcjEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2NvbGxpc2lvbnMxMDApOyovCiAJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+dGNwLnhtaXRfdGNwX3NlZ3MsCiAJCQkJCW5ld3N0YXRzLT54bWl0X3RjcF9zZWdzX2diLAogCQkJCQlvbGQtPnhtaXRfdGNwX3NlZ3NfZ2IpOwpAQCAtMzQzMSw3ICsyNzQ4LDYgQEAKIAkJCQkgICAgIG9sZC0+cmN2X2Ryb3BzX2diKTsKIAkJCX0KIAkJCW1lbWNweShvbGQsIG5ld3N0YXRzLCBzaXplb2Yoc3RydWN0IHNsaWNfc3RhdHMpKTsKLSNlbmRpZgogCQkJYnJlYWs7CiAJCX0KIAljYXNlIFNMSUNfVVBSX1JMU1I6CkBAIC0zNDU0LDExICsyNzcwLDYgQEAKIAljYXNlIFNMSUNfVVBSX1BJTkc6CiAJCWNhcmQtPnBpbmdzdGF0dXMgfD0gKGlzciAmIElTUl9QSU5HRFNNQVNLKTsKIAkJYnJlYWs7Ci0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLQljYXNlIFNMSUNfVVBSX0RVTVA6Ci0JCWNhcmQtPmR1bXBzdGF0dXMgfD0gKGlzciAmIElTUl9VUENNQVNLKTsKLQkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlBU1NFUlQoMCk7CiAJfQpAQCAtMzQ4Nyw3NCArMjc5OCwyOSBAQAogCXN3aXRjaCAodXByLT51cHJfcmVxdWVzdCkgewogCWNhc2UgU0xJQ19VUFJfU1RBVFM6CiAJCWlmICh1cHItPnVwcl9kYXRhX2ggPT0gMCkgewotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19zdGF0cywgdXByLT51cHJfZGF0YSwgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3N0YXRzLCB1cHItPnVwcl9kYXRhLAorCQkJCQkgRkxVU0gpOwogCQl9IGVsc2UgewotCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX3N0YXRzNjQsCi0JCQkJICAgIHVwci0+dXByX2RhdGEsCi0JCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCSAgICB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19zdGF0czY0LAorCQkJCQkgdXByLT51cHJfZGF0YSwKKwkJCQkJICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBTTElDX1VQUl9STFNSOgotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIHNsaWNfcmVncy0+c2xpY19ybHNyLAotCQkJICAgIHVwci0+dXByX2RhdGEsCi0JCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfcmxzciwgdXByLT51cHJfZGF0YSwKKwkJCQkgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsCisJCQkJIEZMVVNIKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNMSUNfVVBSX1JDT05GSUc6Ci0JCURCR19NU0coIiVzIFNMSUNfVVBSX1JDT05GSUchISEhXG4iLCBfX2Z1bmNfXyk7Ci0JCURCR19NU0coIldSSVRFX1JFRzY0IGFkYXB0ZXJbJXBdXG4iCi0JCQkiICAgIGEtPnNsaWNfcmVnc1slcF0gc2xpY19yZWdzWyVwXVxuIgotCQkJIiAgICAmc2xpY19yY29uZmlnWyVwXSAmc2xpY19hZGRyX3VwcGVyWyVwXVxuIgotCQkJIiAgICB1cHJbJXBdXG4iCi0JCQkiICAgIHVwcmRhdGFbJXhdIHVwcmRhdGFoWyV4XVxuIiwKLQkJCWFkYXB0ZXIsIGFkYXB0ZXItPnNsaWNfcmVncywgc2xpY19yZWdzLAotCQkJJnNsaWNfcmVncy0+c2xpY19yY29uZmlnLCAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQl1cHIsIHVwci0+dXByX2RhdGEsIHVwci0+dXByX2RhdGFfaCk7Ci0JCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkgICAgc2xpY19yZWdzLT5zbGljX3Jjb25maWcsCi0JCQkgICAgdXByLT51cHJfZGF0YSwKLQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7CisJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19yY29uZmlnLAorCQkJCSB1cHItPnVwcl9kYXRhLCAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOwogCQlicmVhazsKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWNhc2UgU0xJQ19VUFJfRFVNUDoKLSNpZiAwCi0JCURCR19NU0coIiVzIFNMSUNfVVBSX0RVTVAhISEhXG4iLCBfX2Z1bmNfXyk7Ci0JCURCR19NU0coIldSSVRFX1JFRzY0IGFkYXB0ZXJbJXBdXG4iCi0JCQkgIiAgICB1cHJfYnVmZmVyWyV4XSAgIHVwcl9idWZmZXJoWyV4XVxuIgotCQkJICIgICAgdXByX2RhdGFbJXhdICAgICB1cHJfZGF0YWhbJXhdXG4iCi0JCQkgIiAgICBjbWRidWZmWyVwXSBjbWRidWZmUFslcF1cbiIKLQkJCSAiICAgIGR1bXBidWZmWyVwXSBkdW1wYnVmZlBbJXBdXG4iLAotCQkJIGFkYXB0ZXIsIHVwci0+dXByX2J1ZmZlciwgdXByLT51cHJfYnVmZmVyX2gsCi0JCQkgdXByLT51cHJfZGF0YSwgdXByLT51cHJfZGF0YV9oLAotCQkJIGFkYXB0ZXItPmNhcmQtPmNtZGJ1ZmZlciwKLQkJCSAodm9pZCAqKWFkYXB0ZXItPmNhcmQtPmNtZGJ1ZmZlcl9waHlzLAotCQkJIGFkYXB0ZXItPmNhcmQtPmR1bXBidWZmZXIsICgKLQkJCSB2b2lkICopYWRhcHRlci0+Y2FyZC0+ZHVtcGJ1ZmZlcl9waHlzKTsKLQotCQlwdHIxID0gKGNoYXIgKilzbGljX3JlZ3M7Ci0JCXB0cjIgPSAoY2hhciAqKSgmc2xpY19yZWdzLT5zbGljX2R1bXBfY21kKTsKLQkJY21kb2Zmc2V0ID0gcHRyMiAtIHB0cjE7Ci0JCURCR19NU0coInNsaWNfZHVtcF9jbWQgcmVnaXN0ZXIgb2Zmc2V0IFsleF1cbiIsIGNtZG9mZnNldCk7Ci0jZW5kaWYKLQkJaWYgKHVwci0+dXByX2J1ZmZlciB8fCB1cHItPnVwcl9idWZmZXJfaCkgewotCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2R1bXBfZGF0YSwKLQkJCQkgICAgdXByLT51cHJfYnVmZmVyLAotCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkgICAgdXByLT51cHJfYnVmZmVyX2gsIEZMVVNIKTsKLQkJfQotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIHNsaWNfcmVncy0+c2xpY19kdW1wX2NtZCwKLQkJCSAgICB1cHItPnVwcl9kYXRhLAotCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKLQkJYnJlYWs7Ci0jZW5kaWYKIAljYXNlIFNMSUNfVVBSX1BJTkc6Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcGluZywgMSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcGluZywgMSwgRkxVU0gpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlBU1NFUlQoMCk7CkBAIC0zNTY4LDEwICsyODM0LDYgQEAKIAl1bnNpZ25lZCBjaGFyIGxpbmtzcGVlZDsKIAl1bnNpZ25lZCBjaGFyIGxpbmtkdXBsZXg7CiAKLQlEQkdfTVNHKCIlczogJXMgSVNSWyV4XSBsaW5rc3RhdHVzWyV4XVxuICAgYWRhcHRlclslcF0oJWQpXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpc3IsIGxpbmtzdGF0dXMsIGFkYXB0ZXIsCi0JCWFkYXB0ZXItPmNhcmRpbmRleCk7Ci0KIAlpZiAoKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgewogCQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOwogCkBAIC0zNTk5LDUwICsyODYxLDMzIEBACiAJICAgICAgIHx8IChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzJHQl9ERVZJQ0VfSUQpKTsKIAogCWxpbmt1cCA9IGxpbmtzdGF0dXMgJiBHSUdfTElOS1VQID8gTElOS19VUCA6IExJTktfRE9XTjsKLQlpZiAobGlua3N0YXR1cyAmIEdJR19TUEVFRF8xMDAwKSB7CisJaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwMCkKIAkJbGlua3NwZWVkID0gTElOS18xMDAwTUI7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzICglcykgR0lHQUJJVCBTcGVlZD09MTAwME1CICAiLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JfSBlbHNlIGlmIChsaW5rc3RhdHVzICYgR0lHX1NQRUVEXzEwMCkgeworCWVsc2UgaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwKQogCQlsaW5rc3BlZWQgPSBMSU5LXzEwME1COwotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEdJR0FCSVQgU3BlZWQ9PTEwME1CICAiLCBfX2Z1bmNfXywKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWxpbmtzcGVlZCA9IExJTktfMTBNQjsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBHSUdBQklUIFNwZWVkPT0xME1CICAiLCBfX2Z1bmNfXywKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JfQotCWlmIChsaW5rc3RhdHVzICYgR0lHX0ZVTExEVVBMRVgpIHsKLQkJbGlua2R1cGxleCA9IExJTktfRlVMTEQ7Ci0JCURCR19NU0coIiBEdXBsZXggPT0gRlVMTFxuIik7Ci0JfSBlbHNlIHsKLQkJbGlua2R1cGxleCA9IExJTktfSEFMRkQ7Ci0JCURCR19NU0coIiBEdXBsZXggPT0gSEFMRlxuIik7Ci0JfQogCi0JaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKSAmJiAobGlua3VwID09IExJTktfRE9XTikpIHsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBwaHlzcG9ydCglZCkgbGluayBzdGlsbCBkb3duXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+cGh5c3BvcnQpOworCWlmIChsaW5rc3RhdHVzICYgR0lHX0ZVTExEVVBMRVgpCisJCWxpbmtkdXBsZXggPSBMSU5LX0ZVTExEOworCWVsc2UKKwkJbGlua2R1cGxleCA9IExJTktfSEFMRkQ7CisKKwlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX0RPV04pICYmIChsaW5rdXAgPT0gTElOS19ET1dOKSkKIAkJcmV0dXJuOwotCX0KIAogCS8qIGxpbmsgdXAgZXZlbnQsIGJ1dCBub3RoaW5nIGhhcyBjaGFuZ2VkICovCiAJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkgJiYKIAkgICAgKGxpbmt1cCA9PSBMSU5LX1VQKSAmJgogCSAgICAoYWRhcHRlci0+bGlua3NwZWVkID09IGxpbmtzcGVlZCkgJiYKLQkgICAgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gbGlua2R1cGxleCkpIHsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBwb3J0KCVkKSBsaW5rIHN0aWxsIHVwXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+cGh5c3BvcnQpOworCSAgICAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBsaW5rZHVwbGV4KSkKIAkJcmV0dXJuOwotCX0KIAogCS8qIGxpbmsgaGFzIGNoYW5nZWQgYXQgdGhpcyBwb2ludCAqLwogCiAJLyogbGluayBoYXMgZ29uZSBmcm9tIHVwIHRvIGRvd24gKi8KIAlpZiAobGlua3VwID09IExJTktfRE9XTikgewogCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047Ci0JCURCR19NU0coInNsaWNvc3M6ICVzICVkIExpbmtEb3duIVxuIiwgX19mdW5jX18sCi0JCQlhZGFwdGVyLT5waHlzcG9ydCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM2NTIsMzAgKzI4OTcsMTAgQEAKIAogCWlmIChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgewogCQkvKiBzZXR1cCB0aGUgbWFjICovCi0JCURCR19NU0coIiVzIGNhbGwgc2xpY19jb25maWdfc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCBUUlVFKTsKKwkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIHRydWUpOwogCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX1VQOwotCQlEQkdfTVNHKCJcbiglcykgTGluayBVUDogQ0FMTCBzbGljX2lmX3N0YXJ0X3F1ZXVlIiwKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JCXNsaWNfaWZfc3RhcnRfcXVldWUoYWRhcHRlcik7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CiAJfQotI2lmIDEKLQlzd2l0Y2ggKGxpbmtzcGVlZCkgewotCWNhc2UgTElOS18xMDAwTUI6Ci0JCURCR19NU0cKLQkJICAgICgiXG4oJXMpIExJTksgVVAhOiBHSUdBQklUIFNQRUVEID09IDEwMDBNQiAgZHVwbGV4WyV4XVxuIiwKLQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOwotCQlicmVhazsKLQljYXNlIExJTktfMTAwTUI6Ci0JCURCR19NU0coIlxuKCVzKSBMSU5LIFVQITogU1BFRUQgPT0gMTAwTUIgIGR1cGxleFsleF1cbiIsCi0JCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEQkdfTVNHKCJcbiglcykgTElOSyBVUCE6IFNQRUVEID09IDEwTUIgIGR1cGxleFsleF1cbiIsCi0JCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtkdXBsZXgpOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTM3ODcsMjAgKzMwMTIsMTggQEAKIAlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKIAl1MzIgcGFkZHJoID0gMDsKIAotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOwogCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKIAltZW1zZXQocnNwcSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX3JzcHF1ZXVlKSk7CiAKIAlyc3BxLT5udW1fcGFnZXMgPSBTTElDX1JTUFFfUEFHRVNfR0I7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcnNwcS0+bnVtX3BhZ2VzOyBpKyspIHsKLQkJcnNwcS0+dmFkZHJbaV0gPQotCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LCBQQUdFX1NJWkUsCi0JCQkJCSAmcnNwcS0+cGFkZHJbaV0pOworCQlyc3BxLT52YWRkcltpXSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJCSAgICAgIFBBR0VfU0laRSwKKwkJCQkJCSAgICAgICZyc3BxLT5wYWRkcltpXSk7CiAJCWlmICghcnNwcS0+dmFkZHJbaV0pIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgicnNwcXVldWVfaW5pdF9mYWlsZWQgIHBjaV9hbGxvY19jb25zaXN0ZW50XG4iKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJCSJwY2lfYWxsb2NfY29uc2lzdGVudCBmYWlsZWRcbiIpOwogCQkJc2xpY19yc3BxdWV1ZV9mcmVlKGFkYXB0ZXIpOwogCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCQl9CkBAIC0zODExLDQ3ICszMDM0LDIxIEBACiAJCSAgICAgICAodTMyKSByc3BxLT5wYWRkcltpXSk7CiAjZW5kaWYKIAkJbWVtc2V0KHJzcHEtPnZhZGRyW2ldLCAwLCBQQUdFX1NJWkUpOwotLyogICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIFVQTE9BRCBSU1BCVUZGIFBhZ2UgcGFnZWl4WyV4XSBwYWRkclslcF0gIgotCQkJInZhZGRyWyVwXVxuIiwKLQkJCV9fZnVuY19fLCBpLCAodm9pZCAqKXJzcHEtPnBhZGRyW2ldLCByc3BxLT52YWRkcltpXSk7ICovCiAKIAkJaWYgKHBhZGRyaCA9PSAwKSB7Ci0JCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3JiYXIsCi0JCQkJICAocnNwcS0+cGFkZHJbaV0gfCBTTElDX1JTUFFfQlVGU0lOUEFHRSksCi0JCQkJICBET05UX0ZMVVNIKTsKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19yYmFyLAorCQkJCShyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKKwkJCQlET05UX0ZMVVNIKTsKIAkJfSBlbHNlIHsKLQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJICAgIHNsaWNfcmVncy0+c2xpY19yYmFyNjQsCi0JCQkJICAgIChyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJICAgIHBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfcmJhcjY0LAorCQkJCShyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKKwkJCQkmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJcGFkZHJoLCBET05UX0ZMVVNIKTsKIAkJfQogCX0KIAlyc3BxLT5vZmZzZXQgPSAwOwogCXJzcHEtPnBhZ2VpbmRleCA9IDA7CiAJcnNwcS0+cnNwYnVmID0gKHN0cnVjdCBzbGljX3JzcGJ1ZiAqKXJzcHEtPnZhZGRyWzBdOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCi0JCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7Ci0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNsaWNfcnNwcXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7Ci0KLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKLQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKLQlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7Ci0JQVNTRVJUKHJzcHEpOwotCi0JREJHX01TRygic2xpY29zczogTm90aGluZyB0byBkby4gcnNwcVslcF1cbiIKLQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WyV4XVxuIgotCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlaXhbJXhdXG4iCi0JCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzcGJ1ZlslcF1cbiIsCi0JCXJzcHEsIHJzcHEtPm9mZnNldCwgcnNwcS0+cGFnZWluZGV4LCByc3BxLT5yc3BidWYpOwotCi0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKLQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CiAKQEAgLTM4NjAsMTQgKzMwNTcsOCBAQAogCWludCBpOwogCXN0cnVjdCBzbGljX3JzcHF1ZXVlICpyc3BxID0gJmFkYXB0ZXItPnJzcHF1ZXVlOwogCi0JREJHX01TRygic2xpY29zczogJXMgYWRhcHRlclslcF0gcG9ydCAlZCByc3BxWyVwXSBGcmVlUlNQUVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNwb3J0LCByc3BxKTsKIAlmb3IgKGkgPSAwOyBpIDwgcnNwcS0+bnVtX3BhZ2VzOyBpKyspIHsKIAkJaWYgKHJzcHEtPnZhZGRyW2ldKSB7Ci0JCQlEQkdfTVNHCi0JCQkgICAgKCJzbGljb3NzOiAgcGNpX2ZyZWVfY29uc2lzdGVudCByc3BxLT52YWRkclslcF0gXAotCQkJICAgIHBhZGRyWyVwXVxuIiwKLQkJCSAgICAgcnNwcS0+dmFkZHJbaV0sICh2b2lkICopIHJzcHEtPnBhZGRyW2ldKTsKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LCBQQUdFX1NJWkUsCiAJCQkJCSAgICByc3BxLT52YWRkcltpXSwgcnNwcS0+cGFkZHJbaV0pOwogCQl9CkBAIC0zOTAwLDExICszMDkxLDkgQEAKICNlbmRpZgogCX0gZWxzZSB7CiAJCUFTU0VSVChyc3BxLT5vZmZzZXQgPT0gU0xJQ19SU1BRX0JVRlNJTlBBR0UpOwotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19yYmFyNjQsCi0JCQkgICAgKHJzcHEtPgotCQkJICAgICBwYWRkcltyc3BxLT5wYWdlaW5kZXhdIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3JiYXI2NCwKKwkJCShyc3BxLT5wYWRkcltyc3BxLT5wYWdlaW5kZXhdIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAorCQkJJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKIAkJcnNwcS0+cGFnZWluZGV4ID0gKCsrcnNwcS0+cGFnZWluZGV4KSAlIHJzcHEtPm51bV9wYWdlczsKIAkJcnNwcS0+b2Zmc2V0ID0gMDsKIAkJcnNwcS0+cnNwYnVmID0gKHN0cnVjdCBzbGljX3JzcGJ1ZiAqKQpAQCAtMzkzMiwxMiArMzEyMSw4IEBACiAJc3RydWN0IHNsaWNfY21kcW1lbSAqY21kcW1lbSA9ICZhZGFwdGVyLT5jbWRxbWVtOwogCWludCBpOwogCi0JREJHX01TRygic2xpY29zczogKCVzKSBhZGFwdGVyWyVwXSBwb3J0ICVkIHJzcHFbJXBdIEZyZWUgQ01EUSBNZW1vcnlcbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCwgY21kcW1lbSk7CiAJZm9yIChpID0gMDsgaSA8IFNMSUNfQ01EUV9NQVhQQUdFUzsgaSsrKSB7CiAJCWlmIChjbWRxbWVtLT5wYWdlc1tpXSkgewotCQkJREJHX01TRygic2xpY29zczogJXMgRGVhbGxvY2F0ZSBwYWdlICBDbWRRUGFnZVslcF1cbiIsCi0JCQkJX19mdW5jX18sICh2b2lkICopIGNtZHFtZW0tPnBhZ2VzW2ldKTsKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAogCQkJCQkgICAgUEFHRV9TSVpFLAogCQkJCQkgICAgKHZvaWQgKikgY21kcW1lbS0+cGFnZXNbaV0sCkBAIC0zOTcyLDcgKzMxNTcsNiBAQAogCWludCBpOwogCXUzMiAqcGFnZWFkZHI7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKIAltZW1zZXQoJmFkYXB0ZXItPmNtZHFfYWxsLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKIAltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZnJlZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CkBAIC0zOTk0LDcgKzMxNzgsNiBAQAogCQlzbGljX2NtZHFfYWRkY21kcGFnZShhZGFwdGVyLCBwYWdlYWRkcik7CiAJfQogCWFkYXB0ZXItPnNsaWNfaGFuZGxlX2l4ID0gMTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyByZXNldCBzbGljX2hhbmRsZV9peCB0byBPTkVcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KQEAgLTQwMDMsOCArMzE4Niw2IEBACiB7CiAJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kOwogCi0JREJHX01TRygic2xpY29zczogJXMgYWRhcHRlclslcF0gcG9ydCAlZCBGcmVlQ29tbWFuZHNGcm9tIENNRFFcbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCk7CiAJY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKIAl3aGlsZSAoY21kKSB7CiAJCWlmIChjbWQtPmJ1c3kpIHsKQEAgLTQwMzAsNyArMzIxMSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgb3V0c3RhbmRpbmc7CiAKLQlEQkdfTVNHKCIlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrLAogCQkJYWRhcHRlci0+Y21kcV9mcmVlLmxvY2suZmxhZ3MpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5sb2NrLApAQCAtNDA0MiwxMSArMzIyMiw4IEBACiAJCWlmIChoY21kLT5idXN5KSB7CiAJCQlza2IgPSBoY21kLT5za2I7CiAJCQlBU1NFUlQoc2tiKTsKLQkJCURCR19NU0coInNsaWNvc3M6ICVzIGhjbWRbJXBdIHNrYlslcF0gIiwgX19mdW5jX18sCi0JCQkJaGNtZCwgc2tiKTsKIAkJCWhjbWQtPmJ1c3kgPSAwOwogCQkJaGNtZC0+c2tiID0gTlVMTDsKLQkJCURCR19NU0coIiBGcmVlIFNLQlxuIik7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQl9CiAJCWhjbWQgPSBoY21kLT5uZXh0X2FsbDsKQEAgLTQwNjUsMTQgKzMyNDIsMTQgQEAKIAkJaGNtZCA9IGhjbWQtPm5leHRfYWxsOwogCX0KIAlpZiAoYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50ICE9IGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KSB7Ci0JCURCR19FUlJPUigiJXMgZnJlZV9jb3VudCAlZCAhPSBhbGwgY291bnQgJWRcbiIsIF9fZnVuY19fLAotCQkJICBhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQsIGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KTsKKwkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkiZnJlZV9jb3VudCAlZCAhPSBhbGwgY291bnQgJWRcbiIsCisJCQlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQsIGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jaywKIAkJCQlhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5mbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jaywKIAkJCQlhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5mbGFncyk7Ci0JREJHX01TRygiJXMgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBzbGljX2NtZHFfYWRkY21kcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICpwYWdlKQpAQCAtNDA5MCw4ICszMjY3LDYgQEAKIAogCWNtZGFkZHIgPSBwYWdlOwogCWNtZCA9IChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopY21kYWRkcjsKLS8qICBEQkdfTVNHKCJDTURRIFBhZ2UgYWRkclslcF0gaXhbJWRdIHBmcmVlWyVwXVxuIiwgY21kYWRkciwgc2xpY19oYW5kbGVfaXgsCi0gICAgYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzKTsgKi8KIAljbWRjbnQgPSAwOwogCiAJcGh5c19hZGRyID0gdmlydF90b19idXMoKHZvaWQgKilwYWdlKTsKQEAgLTQxMTcsNyArMzI5Miw3IEBACiAKIAkJY21kLT5wc2xpY19oYW5kbGUgPSBwc2xpY19oYW5kbGU7CiAJCWNtZC0+Y21kNjQuaG9zdGhhbmRsZSA9IHBzbGljX2hhbmRsZS0+dG9rZW4uaGFuZGxlX3Rva2VuOwotCQljbWQtPmJ1c3kgPSBGQUxTRTsKKwkJY21kLT5idXN5ID0gZmFsc2U7CiAJCWNtZC0+cGFkZHJsID0gcGh5c19hZGRybDsKIAkJY21kLT5wYWRkcmggPSBwaHlzX2FkZHJoOwogCQljbWQtPm5leHRfYWxsID0gcHJldjsKQEAgLTQxMzMsMTMgKzMzMDgsMTEgQEAKIAljbWRxID0gJmFkYXB0ZXItPmNtZHFfYWxsOwogCWNtZHEtPmNvdW50ICs9IGNtZGNudDsJLyogIFNMSUNfQ01EUV9DTURTSU5QQUdFOyAgIG1vb2t0b2RvICovCiAJdGFpbC0+bmV4dF9hbGwgPSBjbWRxLT5oZWFkOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKHByZXYpKTsKIAljbWRxLT5oZWFkID0gcHJldjsKIAljbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY21kcS0+bG9jay5sb2NrLCBjbWRxLT5sb2NrLmZsYWdzKTsKIAljbWRxLT5jb3VudCArPSBjbWRjbnQ7CS8qICBTTElDX0NNRFFfQ01EU0lOUEFHRTsgICBtb29rdG9kbyAqLwogCXRhaWwtPm5leHQgPSBjbWRxLT5oZWFkOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKHByZXYpKTsKIAljbWRxLT5oZWFkID0gcHJldjsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWRxLT5sb2NrLmxvY2ssIGNtZHEtPmxvY2suZmxhZ3MpOwogfQpAQCAtNDE4NCw3ICszMzU3LDYgQEAKIAogCUFTU0VSVChmcmVlX2NtZHEtPmhlYWQgPT0gTlVMTCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbmVfY21kcS0+bG9jay5sb2NrLCBkb25lX2NtZHEtPmxvY2suZmxhZ3MpOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKGRvbmVfY21kcS0+aGVhZCkpOwogCiAJZnJlZV9jbWRxLT5oZWFkID0gZG9uZV9jbWRxLT5oZWFkOwogCWZyZWVfY21kcS0+Y291bnQgPSBkb25lX2NtZHEtPmNvdW50OwpAQCAtNDIwMSw5ICszMzczLDcgQEAKIAogCXNwaW5fbG9jaygmY21kcS0+bG9jay5sb2NrKTsKIAljbWQtPmJ1c3kgPSAwOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKGNtZHEtPmhlYWQpKTsKIAljbWQtPm5leHQgPSBjbWRxLT5oZWFkOwotCUFTU0VSVChWQUxJRF9BRERSRVNTKGNtZCkpOwogCWNtZHEtPmhlYWQgPSBjbWQ7CiAJY21kcS0+Y291bnQrKzsKIAlpZiAoKGFkYXB0ZXItPnhtaXRxX2Z1bGwpICYmIChjbWRxLT5jb3VudCA+IDEwKSkKQEAgLTQyMTYsNyArMzM4Niw2IEBACiAJaW50IGksIGNvdW50OwogCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOwogCi0JREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKIAlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7CiAJcmN2cS0+dGFpbCA9IE5VTEw7CiAJcmN2cS0+aGVhZCA9IE5VTEw7CkBAIC00MjMzLDI1ICszNDAyLDYgQEAKIAkJc2xpY19yY3ZxdWV1ZV9mcmVlKGFkYXB0ZXIpOwogCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CiAJfQotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKLQotCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7Ci0JQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOwotCUFTU0VSVChyY3ZxKTsKLQotCURCR19NU0coInNsaWNvc3M6IE5vdGhpbmcgdG8gZG8uIHJjdnFbJXBdXG4iCi0JCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50WyV4XVxuIgotCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkWyVwXVxuIgotCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsWyVwXVxuIiwKLQkJcmN2cSwgcmN2cS0+Y291bnQsIHJjdnEtPmhlYWQsIHJjdnEtPnRhaWwpOwotCi0JREJHX01TRygic2xpY29zczogJXMgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIApAQCAtNDI5MCw4ICszNDQwLDggQEAKIAkJCXNrYiA9IE5VTEw7CiAJCX0KIAl9IGVsc2UgewotCQlEQkdfRVJST1IoIlJjdlEgRW1wdHkhISBhZGFwdGVyWyVwXSByY3ZxWyVwXSBjb3VudFsleF1cbiIsCi0JCQkgIGFkYXB0ZXIsIHJjdnEsIHJjdnEtPmNvdW50KTsKKwkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkiUmN2USBFbXB0eSEhIHJjdnFbJXBdIGNvdW50WyV4XVxuIiwgcmN2cSwgcmN2cS0+Y291bnQpOwogCQlza2IgPSBOVUxMOwogCX0KIAl3aGlsZSAocmN2cS0+Y291bnQgPCBTTElDX1JDVlFfRklMTFRIUkVTSCkgewpAQCAtNDMxMSw2ICszNDYxLDcgQEAKIAl1MzIgcGFkZHJoOwogCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOwogCWludCBpID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+bmV0ZGV2LT5kZXY7CiAKIAl3aGlsZSAoaSA8IFNMSUNfUkNWUV9GSUxMRU5UUklFUykgewogCQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZjsKQEAgLTQzMzMsNDQgKzM0ODQsNDUgQEAKIAkJCXNrYi0+bmV4dCA9IE5VTEw7CiAjaWZkZWYgS0xVREdFX0ZPUl80R0JfQk9VTkRBUlkKIAkJCWlmIChwYWRkcmwgPT0gMCkgewotCQkJCURCR19FUlJPUgotCQkJCSAgICAoIiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCAiCi0JCQkJICAgICAic2tiWyVwXSAgIFBST0JMRU1cbiIKLQkJCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIgotCQkJCSAgICAgIiAgICAgICAgIHNrYmxlblsleF1cbiIKLQkJCQkgICAgICIgICAgICAgICBwYWRkclslcF1cbiIKLQkJCQkgICAgICIgICAgICAgICBwYWRkcmxbJXhdXG4iCi0JCQkJICAgICAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgX19mdW5jX18sIHNrYiwKLQkJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIHBhZGRyLCBwYWRkcmwsCi0JCQkJICAgICBwYWRkcmgpOwotCQkJCURCR19FUlJPUigiICAgICAgICAgcmN2cS0+aGVhZFslcF1cbiIKLQkJCQkJICAiICAgICAgICAgcmN2cS0+dGFpbFslcF1cbiIKLQkJCQkJICAiICAgICAgICAgcmN2cS0+Y291bnRbJXhdXG4iLAotCQkJCQkgIHJjdnEtPmhlYWQsIHJjdnEtPnRhaWwsIHJjdnEtPmNvdW50KTsKLQkJCQlEQkdfRVJST1IoIlNLSVAgVEhJUyBTS0IhISEhISEhIVxuIik7CisJCQkJZGV2X2VycihkZXYsICIlczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDBcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKGRldiwgInNrYlslcF0gUFJPQkxFTVxuIiwgc2tiKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iLCBza2ItPmRhdGEpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgc2tibGVuWyV4XVxuIiwgc2tiLT5sZW4pOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJbJXBdXG4iLCBwYWRkcik7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkcmxbJXhdXG4iLCBwYWRkcmwpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgcGFkZHJoKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iLCByY3ZxLT5oZWFkKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPnRhaWxbJXBdXG4iLCByY3ZxLT50YWlsKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPmNvdW50WyV4XVxuIiwgcmN2cS0+Y291bnQpOworCQkJCWRldl9lcnIoZGV2LCAiU0tJUCBUSElTIFNLQiEhISEhISEhXG4iKTsKIAkJCQlnb3RvIHJldHJ5X3JjdnFmaWxsOwogCQkJfQogI2Vsc2UKIAkJCWlmIChwYWRkcmwgPT0gMCkgewotCQkJCURCR19FUlJPUgotCQkJCSAgICAoIlxuXG4lczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDAgIgotCQkJCSAgICAgInNrYlslcF0gIEdJVkUgVE8gQ0FSRCBBTllXQVlcbiIKLQkJCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIgotCQkJCSAgICAgIiAgICAgICAgIHBhZGRyWyVwXVxuIgotCQkJCSAgICAgIiAgICAgICAgIHBhZGRybFsleF1cbiIKLQkJCQkgICAgICIgICAgICAgICBwYWRkcmhbJXhdXG4iLCBfX2Z1bmNfXywgc2tiLAotCQkJCSAgICAgc2tiLT5kYXRhLCBwYWRkciwgcGFkZHJsLCBwYWRkcmgpOworCQkJCWRldl9lcnIoZGV2LCAiJXM6IExPVyAzMmJpdHMgUEhZU0lDQUwgQUREUkVTUyA9PSAwXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQkJZGV2X2VycihkZXYsICJza2JbJXBdIFBST0JMRU1cbiIsIHNrYik7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICBza2JkYXRhWyVwXVxuIiwgc2tiLT5kYXRhKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmxlblsleF1cbiIsIHNrYi0+bGVuKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRyWyVwXVxuIiwgcGFkZHIpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJsWyV4XVxuIiwgcGFkZHJsKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIHBhZGRyaCk7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT5oZWFkWyVwXVxuIiwgcmN2cS0+aGVhZCk7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT50YWlsWyVwXVxuIiwgcmN2cS0+dGFpbCk7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT5jb3VudFsleF1cbiIsIHJjdnEtPmNvdW50KTsKKwkJCQlkZXZfZXJyKGRldiwgIkdJVkUgVE8gQ0FSRCBBTllXQVlcbiIpOwogCQkJfQogI2VuZGlmCiAJCQlpZiAocGFkZHJoID09IDApIHsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXIsCi0JCQkJCSAgKHUzMikgcGFkZHJsLCBET05UX0ZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhciwKKwkJCQkJCSAodTMyKXBhZGRybCwgRE9OVF9GTFVTSCk7CiAJCQl9IGVsc2UgewotCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkJCSAgICBhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhcjY0LAotCQkJCQkgICAgKHUzMikgcGFkZHJsLAotCQkJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJCSAgICAodTMyKSBwYWRkcmgsIERPTlRfRkxVU0gpOworCQkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwKKwkJCQkJJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyNjQsCisJCQkJCXBhZGRybCwKKwkJCQkJJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCQlwYWRkcmgsIERPTlRfRkxVU0gpOwogCQkJfQogCQkJaWYgKHJjdnEtPmhlYWQpCiAJCQkJcmN2cS0+dGFpbC0+bmV4dCA9IHNrYjsKQEAgLTQzODAsMTAgKzM1MzIsOSBAQAogCQkJcmN2cS0+Y291bnQrKzsKIAkJCWkrKzsKIAkJfSBlbHNlIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiJXMgc2xpY19yY3ZxdWV1ZV9maWxsIGNvdWxkIG9ubHkgZ2V0IFslZF0gIgotCQkJICAgICAic2tidWZmc1xuIiwKLQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJzbGljX3JjdnF1ZXVlX2ZpbGwgY291bGQgb25seSBnZXQgWyVkXSBza2J1ZmZzXG4iLAorCQkJCWkpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC00Mzk3LDYgKzM1NDgsNyBAQAogCXUzMiBwYWRkcmw7CiAJdTMyIHBhZGRyaDsKIAlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZiA9IChzdHJ1Y3Qgc2xpY19yY3ZidWYgKilza2ItPmhlYWQ7CisJc3RydWN0IGRldmljZSAqZGV2OwogCiAJQVNTRVJUKHNrYi0+bGVuID09IFNMSUNfUkNWQlVGX0hFQURTSVpFKTsKIApAQCAtNDQwOSwyNiArMzU2MSwyNiBAQAogCXBhZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwYWRkcik7CiAKIAlpZiAocGFkZHJsID09IDApIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoIiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCBza2JbJXBdICAgUFJPQkxFTVxuIgotCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIiAiICAgICAgICAgc2tibGVuWyV4XVxuIgotCQkgICAgICIgICAgICAgICBwYWRkclslcF1cbiIgIiAgICAgICAgIHBhZGRybFsleF1cbiIKLQkJICAgICAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgX19mdW5jX18sIHNrYiwgc2tiLT5kYXRhLAotCQkgICAgIHNrYi0+bGVuLCBwYWRkciwgcGFkZHJsLCBwYWRkcmgpOwotCQlEQkdfRVJST1IoIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iCi0JCQkgICIgICAgICAgICByY3ZxLT50YWlsWyVwXVxuIgotCQkJICAiICAgICAgICAgcmN2cS0+Y291bnRbJXhdXG4iLCByY3ZxLT5oZWFkLCByY3ZxLT50YWlsLAotCQkJICByY3ZxLT5jb3VudCk7CisJCWRldiA9ICZhZGFwdGVyLT5uZXRkZXYtPmRldjsKKwkJZGV2X2VycihkZXYsICIlczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDBcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWRldl9lcnIoZGV2LCAic2tiWyVwXSBQUk9CTEVNXG4iLCBza2IpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iLCBza2ItPmRhdGEpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmxlblsleF1cbiIsIHNrYi0+bGVuKTsKKwkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkclslcF1cbiIsIHBhZGRyKTsKKwkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkcmxbJXhdXG4iLCBwYWRkcmwpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIHBhZGRyaCk7CisJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcmN2cS0+aGVhZFslcF1cbiIsIHJjdnEtPmhlYWQpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPnRhaWxbJXBdXG4iLCByY3ZxLT50YWlsKTsKKwkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT5jb3VudFsleF1cbiIsIHJjdnEtPmNvdW50KTsKIAl9CiAJaWYgKHBhZGRyaCA9PSAwKSB7Ci0JCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhciwgKHUzMikgcGFkZHJsLAotCQkJICBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXIsICh1MzIpcGFkZHJsLAorCQkJCSBET05UX0ZMVVNIKTsKIAl9IGVsc2UgewotCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyNjQsCi0JCQkgICAgcGFkZHJsLAotCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJICAgIHBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyNjQsCisJCQkJIHBhZGRybCwgJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCSBwYWRkcmgsIERPTlRfRkxVU0gpOwogCX0KIAlpZiAocmN2cS0+aGVhZCkKIAkJcmN2cS0+dGFpbC0+bmV4dCA9IHNrYjsKQEAgLTQ0NDksNyArMzYwMSw3IEBACiAJdW5zaWduZWQgY2hhciAqb2VtZnJ1ID0gKHVuc2lnbmVkIGNoYXIgKikoJmNhcmQtPmNvbmZpZy5PZW1GcnUpOwogI2VuZGlmCiAKLQlzZXFfcHJpbnRmKHNlcSwgImRyaXZlcl92ZXJzaW9uICAgICAgICAgICA6ICVzIiwgc2xpY19wcm9jX3ZlcnNpb24pOworCXNlcV9wcmludGYoc2VxLCAiZHJpdmVyX3ZlcnNpb24gICAgICAgICAgIDogJXNcbiIsIHNsaWNfcHJvY192ZXJzaW9uKTsKIAlzZXFfcHJpbnRmKHNlcSwgIk1pY3JvY29kZSB2ZXJzaW9uczogICAgICAgICAgIFxuIik7CiAJc2VxX3ByaW50ZihzZXEsICIgICAgR2lnYWJpdCAoZ2IpICAgICAgICAgOiAlcyAlc1xuIiwKIAkJICAgIE1PSkFWRV9VQ09ERV9WRVJTX1NUUklORywgTU9KQVZFX1VDT0RFX1ZFUlNfREFURSk7CkBAIC00ODgyLDEwMzAgKzQwMzQsNiBAQAogCX0KIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gRHVtcCByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotdm9pZCAqc2xpY19kdW1wX2hhbmRsZTsJCS8qIHRocmVhZCBoYW5kbGUgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKLSAqIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KLSAqLwotc3RhdGljIGludCBzbGljX2R1bXBfc2VlayhzdHJ1Y3QgZmlsZSAqU0xJQ2hhbmRsZSwgdTMyIGZpbGVfb2Zmc2V0KQotewotCWlmIChTTElDaGFuZGxlLT5mX3BvcyAhPSBmaWxlX29mZnNldCkgewotCQkvKkRCR19NU0coInNsaWNfZHVtcF9zZWVrICBub3cgbmVlZGVkIFsleCA6ICV4XVxuIiwKLQkJCSh1MzIpU0xJQ2hhbmRsZS0+Zl9wb3MsICh1MzIpZmlsZV9vZmZzZXQpOyAqLwotCQlpZiAoU0xJQ2hhbmRsZS0+Zl9vcC0+bGxzZWVrKSB7Ci0JCQlpZiAoU0xJQ2hhbmRsZS0+Zl9vcC0+Ci0JCQkgICAgbGxzZWVrKFNMSUNoYW5kbGUsIGZpbGVfb2Zmc2V0LCAwKSAhPSBmaWxlX29mZnNldCkKLQkJCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCVNMSUNoYW5kbGUtPmZfcG9zID0gZmlsZV9vZmZzZXQ7Ci0JCX0KLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19kdW1wX3dyaXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKLQkJCSAgIGNvbnN0IHZvaWQgKmFkZHIsIGludCBzaXplLCB1MzIgZmlsZV9vZmZzZXQpCi17Ci0JaW50IHIgPSAxOwotCXUzMiByZXN1bHQgPSAwOwotCXN0cnVjdCBmaWxlICpTTElDaGFuZGxlID0gY2FyZC0+ZHVtcGhhbmRsZTsKLQotI2lmZGVmIEhJU1RPUklDQUwJCS8qIGxlZ2FjeSAqLwotCWRvd24oJlNMSUNoYW5kbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7Ci0jZW5kaWYKLQlpZiAoc2l6ZSkgewotCQlzbGljX2R1bXBfc2VlayhTTElDaGFuZGxlLCBmaWxlX29mZnNldCk7Ci0KLQkJcmVzdWx0ID0KLQkJICAgIFNMSUNoYW5kbGUtPmZfb3AtPndyaXRlKFNMSUNoYW5kbGUsIGFkZHIsIHNpemUsCi0JCQkJCSAgICAmU0xJQ2hhbmRsZS0+Zl9wb3MpOwotCi0JCXIgPSByZXN1bHQgPT0gc2l6ZTsKLQl9Ci0KLQljYXJkLT5kdW1wdGltZV9jb21wbGV0ZSA9IGppZmZpZXM7Ci0JY2FyZC0+ZHVtcHRpbWVfZGVsdGEgPSBjYXJkLT5kdW1wdGltZV9jb21wbGV0ZSAtIGNhcmQtPmR1bXB0aW1lX3N0YXJ0OwotCWNhcmQtPmR1bXB0aW1lX3N0YXJ0ID0gamlmZmllczsKLQotI2lmZGVmIEhJU1RPUklDQUwKLQl1cCgmU0xJQ2hhbmRsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKLSNlbmRpZgotCWlmICghcikgewotCQlEQkdfRVJST1IoIiVzOiBhZGRyWyVwXSBzaXplWyV4XSByZXN1bHRbJXhdIGZpbGVfb2Zmc2V0WyV4XVxuIiwKLQkJCSAgX19mdW5jX18sIGFkZHIsIHNpemUsIHJlc3VsdCwgZmlsZV9vZmZzZXQpOwotCX0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHVpbnQgc2xpY19pbml0X2R1bXBfdGhyZWFkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKLXsKLQljYXJkLT5kdW1wX3Rhc2tfaWQgPSBrdGhyZWFkX3J1bihzbGljX2R1bXBfdGhyZWFkLCAodm9pZCAqKWNhcmQsIDApOwotCi0vKiAgREJHX01TRygiY3JlYXRlIHNsaWNfZHVtcF90aHJlYWQgZHVtcF9waWRbJXhdXG4iLCBjYXJkLT5kdW1wX3BpZCk7ICovCi0JaWYgKElTX0VSUihjYXJkLT5kdW1wX3Rhc2tfaWQpKSB7Ci0JCURCR19NU0coImNyZWF0ZSBzbGljX2R1bXBfdGhyZWFkIEZBSUxFRCBcbiIpOwotCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNsaWNfZHVtcF90aHJlYWQodm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSAoc3RydWN0IHNsaWNjYXJkICopY29udGV4dDsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgYWRhcHRlciAqZHVtcF9hZGFwdGVyID0gTlVMTDsKLQl1MzIgZHVtcF9jb21wbGV0ZSA9IDA7Ci0JdTMyIGRlbGF5ID0gU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOwotCXN0cnVjdCBzbGljX3JlZ3MgKnByZWdzOwotCXUzMiBpOwotCXN0cnVjdCBzbGljX3VwciAqdXByLCAqdXBybmV4dDsKLQl1MzIgZHVtcF9jYXJkOwotCi0JQVNTRVJUKGNhcmQpOwotCi0JY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nID0gMTsKLQotI2lmZGVmIEhJU1RPUklDQUwKLQlsb2NrX2tlcm5lbCgpOwotCS8qCi0JICogVGhpcyB0aHJlYWQgZG9lc24ndCBuZWVkIGFueSB1c2VyLWxldmVsIGFjY2VzcywKLQkgKiBzbyBnZXQgcmlkIG9mIGFsbCBvdXIgcmVzb3VyY2VzCi0JICovCi0JZXhpdF9maWxlcyhjdXJyZW50KTsJLyogZGFlbW9uaXplIGRvZXNuJ3QgZG8gZXhpdF9maWxlcyAqLwotCWN1cnJlbnQtPmZpbGVzID0gaW5pdF90YXNrLmZpbGVzOwotCWF0b21pY19pbmMoJmN1cnJlbnQtPmZpbGVzLT5jb3VudCk7Ci0jZW5kaWYKLQotCWRhZW1vbml6ZSgiJXMiLCAic2xpY21vbiIpOwotCi0JLyogU2V0dXAgYSBuaWNlIG5hbWUgKi8KLQlzdHJjcHkoY3VycmVudC0+Y29tbSwgInNsaWNtb24iKTsKLQlEQkdfRVJST1IKLQkgICAgKCJzbGljX2R1bXBfdGhyZWFkW3NsaWNtb25dIGRhZW1vbiBpcyBhbGl2ZSBjYXJkWyVwXSBwaWRbJXhdXG4iLAotCSAgICAgY2FyZCwgY2FyZC0+ZHVtcF90YXNrX2lkLT5waWQpOwotCi0JLyoKLQkgKiAgICBTZW5kIG1lIGEgc2lnbmFsIHRvIGdldCBtZSB0byBkaWUgKGZvciBkZWJ1Z2dpbmcpCi0JICovCi0JZG8gewotCQkvKgotCQkgKiBJZiBjYXJkIHN0YXRlIGlzIG5vdCBzZXQgdG8gdXAsIHNraXAKLQkJICovCi0JCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1VQKSB7Ci0JCQlpZiAoY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKQotCQkJCWdvdG8gd2FpdDsKLQkJCWVsc2UKLQkJCQlnb3RvIGVuZF90aHJlYWQ7Ci0JCX0KLQkJLyoKLQkJICogICAgQ2hlY2sgdGhlIHJlc3VsdHMgb2Ygb3VyIGxhc3QgcGluZy4KLQkJICovCi0JCWR1bXBfY2FyZCA9IDA7Ci0jaWZkZWYgU0xJQ19GQUlMVVJFX0RVTVAKLQkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7Ci0JCQlEQkdfTVNHCi0JCQkgICAgKCJcbltzbGljbW9uXSAgQ0FSRCAjJWQgVElNRUQgT1VUIC0gc3RhdHVzICIKLQkJCSAgICAgIiV4OiBEVU1QIFRIRSBDQVJEIVxuIiwKLQkJCSAgICAgY2FyZC0+Y2FyZG51bSwgY2FyZC0+cGluZ3N0YXR1cyk7Ci0JCQlkdW1wX2NhcmQgPSAxOwotCQl9Ci0jZWxzZQotCQkvKgotCQkgKiAgQ2F1c2UgYSBjYXJkIFJFU0VUIGluc3RlYWQ/Ci0JCSAqLwotCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKLQkJCS8qIHRvZG8uIGRvIHdlIHdhbnQgdG8gcmVzZXQgdGhlIGNhcmQgaW4gcHJvZHVjdGlvbiAqLwotCQkJLyogREJHX01TRygiXG5bc2xpY21vbl0gIENBUkQgIyVkIFRJTUVEIE9VVCAtICIKLQkJCSAgIHN0YXR1cyAleDogUkVTRVQgVEhFIENBUkQhXG4iLCBjYXJkLT5jYXJkbnVtLAotCQkJICAgY2FyZC0+cGluZ3N0YXR1cyk7ICovCi0JCQlEQkdfRVJST1IKLQkJCSAgICAoIlxuW3NsaWNtb25dICBDQVJEICMlZCBUSU1FRCBPVVQgLSBzdGF0dXMgJXg6ICIKLQkJCSAgICAgIkRVTVAgVEhFIENBUkQhXG4iLAotCQkJICAgICBjYXJkLT5jYXJkbnVtLCBjYXJkLT5waW5nc3RhdHVzKTsKLQkJCWR1bXBfY2FyZCA9IDE7Ci0JCX0KLSNlbmRpZgotCQlpZiAoKGR1bXBfY2FyZCkKLQkJICAgIHx8IChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKSkgewotCQkJaWYgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9SRVFVRVNURUQpIHsKLQkJCQlEQkdfRVJST1IKLQkJCSAgICAoIltzbGljbW9uXTogRHVtcCBjYXJkIFJlcXVlc3RlZDogQ2FyZCAleFxuIiwKLQkJCQkgICAgIGNhcmQtPmNhcmRudW0pOwotCQkJfQotCQkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7Ci0JCQkJdXNob3J0IGNwdWlkID0gMDsKLQkJCQl1c2hvcnQgY3Jhc2hwYyA9IDA7Ci0KLQkJCQlpZiAoY2FyZC0+YWRhcHRlclswXSkgewotCQkJCQlpZiAoKGNhcmQtPmFkYXB0ZXJbMF0pLT5tZW1vcnlsZW5ndGggPj0KLQkJCQkJICAgIENSQVNIX0lORk9fT0ZGU0VUICsKLQkJCQkJICAgIHNpemVvZihzbGljX2NyYXNoX2luZm8pKSB7Ci0JCQkJCQljaGFyICpjcmFzaHB0cjsKLQkJCQkJCXBfc2xpY19jcmFzaF9pbmZvIGNyYXNoaW5mbzsKLQotCQkJCQkJY3Jhc2hwdHIgPQotCQkJCQkJICAgICgoY2hhciAqKWNhcmQtPmFkYXB0ZXJbMF0tPgotCQkJCQkJICAgICBzbGljX3JlZ3MpICsKLQkJCQkJCSAgICBDUkFTSF9JTkZPX09GRlNFVDsKLQkJCQkJCWNyYXNoaW5mbyA9Ci0JCQkJCQkgICAgKHBfc2xpY19jcmFzaF9pbmZvKQotCQkJCQkJICAgIGNyYXNocHRyOwotCQkJCQkJY3B1aWQgPSBjcmFzaGluZm8tPmNwdV9pZDsKLQkJCQkJCWNyYXNocGMgPSBjcmFzaGluZm8tPmNyYXNoX3BjOwotCQkJCQl9Ci0JCQkJfQotCQkJCURCR19FUlJPUgotCQkJCSAgICAoIltzbGljbW9uXTogRHVtcCBjYXJkOiBDYXJkICV4IGNyYXNoZWQgIgotCQkJCSAgICAgImFuZCBmYWlsZWQgdG8gYW5zd2VyIFBJTkcuICIKLQkJCQkgICAgICJDUFVJRFsleF0gUENbJXhdXG4gIiwKLQkJCQkgICAgIGNhcmQtPmNhcmRudW0sIGNwdWlkLCBjcmFzaHBjKTsKLQkJCX0KLQotCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfSU5fUFJPR1JFU1M7Ci0KLQkJCS8qCi0JCQkgKiBTZXQgdGhlIGNhcmQgc3RhdGUgdG8gRE9XTiBhbmQgdGhlIGFkYXB0ZXIgc3RhdGVzCi0JCQkgKiB0byBSRVNFVC5UaGV5IHdpbGwgY2hlY2sgdGhpcyBpbiBTaW1iYUNoZWNrRm9ySGFuZwotCQkJICogYW5kIGluaXRpYXRlIGludGVyZmFjZSByZXNldCAod2hpY2ggaW4gdHVybiB3aWxsCi0JCQkgKiByZWluaXRpYWxpemUgdGhlIGNhcmQpLgotCQkJICovCi0JCQljYXJkLT5zdGF0ZSA9IENBUkRfRE9XTjsKLQotCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7Ci0JCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07Ci0JCQkJaWYgKGFkYXB0ZXIpIHsKLQkJCQkJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOwotCi0JCQkJCWlmIChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgewotCQkJCQkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9SRVNFVDsKLQkJCQkJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKLQkJCQkJCURCR19FUlJPUgotCQkJCQkJICAgICgiW3NsaWNtb25dOiBTTElDIENhcmRbJWRdICIKLQkJCQkJCSAgICAgIlBvcnRbJWRdIGFkYXB0ZXJbJXBdICIKLQkJCQkJCSAgICAgImRvd25cbiIsCi0JCQkJCQkgICAgICh1aW50KSBjYXJkLT5jYXJkbnVtLAotCQkJCQkJICAgICAodWludCkgaSwgYWRhcHRlcik7Ci0JCQkJCX0KLSNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECi0JCQkJCS8qIGZyZWUgc3RhdHMgdGltZXIgKi8KLQkJCQkJaWYgKGFkYXB0ZXItPnN0YXRzdGltZXJzZXQpIHsKLQkJCQkJCWFkYXB0ZXItPnN0YXRzdGltZXJzZXQgPSAwOwotCQkJCQkJZGVsX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLQkJCQkJfQotI2VuZGlmCi0JCQkJfQotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKLQkJCQlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcltpXTsKLQkJCQlpZiAoKGFkYXB0ZXIpICYmIChhZGFwdGVyLT5hY3RpdmF0ZWQpKSB7Ci0JCQkJCXByZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwotCQkJCQlkdW1wX2FkYXB0ZXIgPSBhZGFwdGVyOwotCi0JCQkJCS8qCi0JCQkJCSAqIElmIHRoZSBkdW1wIHN0YXR1cyBpcyB6ZXJvLCB0aGVuCi0JCQkJCSAqIHRoZSB1dGlsaXR5IHByb2Nlc3NvciBoYXMgY3Jhc2hlZC4KLQkJCQkJICogSWYgdGhpcyBpcyB0aGUgY2FzZSwgYW55IHBlbmRpbmcKLQkJCQkJICogdXRpbGl0eXByb2Nlc3NvciByZXF1ZXN0cyB3aWxsIG5vdAotCQkJCQkgKiBjb21wbGV0ZSBhbmQgb3VyIGR1bXAgY29tbWFuZHMgd2lsbAotCQkJCQkgKiBub3QgYmUgaXNzdWVkLgotCQkJCQkgKgotCQkJCQkgKiBUbyBhdm9pZCB0aGlzIHdlIHdpbGwgY2xlYXIgYW55Ci0JCQkJCSAqIHBlbmRpbmcgdXRpbGl0eSBwcm9jZXNzb3IgcmVxdWVzdHMKLQkJCQkJICogbm93LgotCQkJCQkgKi8KLQkJCQkJaWYgKCFjYXJkLT5waW5nc3RhdHVzKSB7Ci0JCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgKLQkJCQkJCSAgICAmYWRhcHRlci0+dXByX2xvY2subG9jaywKLQkJCQkJCSAgICBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7Ci0JCQkJCQl1cHIgPSBhZGFwdGVyLT51cHJfbGlzdDsKLQkJCQkJCXdoaWxlICh1cHIpIHsKLQkJCQkJCQl1cHJuZXh0ID0gdXByLT5uZXh0OwotCQkJCQkJCWtmcmVlKHVwcik7Ci0JCQkJCQkJdXByID0gdXBybmV4dDsKLQkJCQkJCX0KLQkJCQkJCWFkYXB0ZXItPnVwcl9saXN0ID0gMDsKLQkJCQkJCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKLQkJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCi0JCQkJCQkgICAgJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCi0JCQkJCQkgICAgYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOwotCQkJCQl9Ci0KLQkJCQkJc2xpY19kdW1wX2NhcmQoY2FyZCwgRkFMU0UpOwotCQkJCQlkdW1wX2NvbXBsZXRlID0gMTsKLQkJCQl9Ci0KLQkJCQlpZiAoZHVtcF9jb21wbGV0ZSkgewotCQkJCQlEQkdfRVJST1IoIlNMSUMgRHVtcCBDb21wbGV0ZVxuIik7Ci0JCQkJCS8qICBPbmx5IGR1bXAgdGhlIGNhcmQgb25lIHRpbWUgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoZHVtcF9hZGFwdGVyKSB7Ci0JCQkJREJHX0VSUk9SCi0JCQkJICAgICgic2xpYyBkdW1wIGNvbXBsZXRlZC4gIgotCQkJCSAgICAgIlJlZW5hYmxlIGludGVyZmFjZXNcbiIpOwotCQkJCXNsaWNfY2FyZF9pbml0KGNhcmQsIGR1bXBfYWRhcHRlcik7Ci0KLQkJCQkvKgotCQkJCSAqICBSZWVuYWJsZSB0aGUgYWRhcHRlcnMgdGhhdCB3ZXJlIHJlc2V0Ci0JCQkJICovCi0JCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7Ci0JCQkJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOwotCQkJCQlpZiAoYWRhcHRlcikgewotCQkJCQkJaWYgKGFkYXB0ZXItPnN0YXRlID09Ci0JCQkJCQkgICAgQURBUFRfUkVTRVQpIHsKLQkJCQkJCQlEQkdfRVJST1IKLQkJCQkJCQkgICAgKCJzbGljZHVtcDogU0xJQyAiCi0JCQkJCSAgICJDYXJkWyVkXSBQb3J0WyVkXSBhZGFwdGVyWyVwXSAiCi0JCQkJCSAgICJicmluZyBVUFxuIiwKLQkJCQkJCQkgICAgICh1aW50KSBjYXJkLT4KLQkJCQkJCQkgICAgIGNhcmRudW0sICh1aW50KSBpLAotCQkJCQkJCSAgICAgYWRhcHRlcik7Ci0JCQkJCQkJYWRhcHRlci0+c3RhdGUgPQotCQkJCQkJCSAgICBBREFQVF9ET1dOOwotCQkJCQkJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9Ci0JCQkJCQkJICAgIExJTktfRE9XTjsKLQkJCQkJCQlzbGljX2VudHJ5X29wZW4KLQkJCQkJCQkgICAgKGFkYXB0ZXItPm5ldGRldik7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9ET05FOwotCQkJfQotCQl9IGVsc2UgewotCQkvKiBpZiBwaW5nc3RhdHVzICE9IElTUl9QSU5HTUFTSykgfHwgZHVtcF9yZXF1ZXN0ZWQuLi5FTFNFCi0JCSAqICAgIFdlIHJlY2VpdmVkIGEgdmFsaWQgcGluZyByZXNwb25zZS4KLQkJICogICAgQ2xlYXIgdGhlIFBpbmdzdGF0dXMgZmllbGQsIGZpbmQgYSB2YWxpZCBhZGFwdGVyCi0JCSAqICAgIHN0cnVjdHVyZSBhbmQgc2VuZCBhbm90aGVyIHBpbmcuCi0JCSAqLwotCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7Ci0JCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07Ci0JCQkJaWYgKGFkYXB0ZXIgJiYgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSkgewotCQkJCQljYXJkLT5waW5nc3RhdHVzID0gMDsKLQkJCQkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9QSU5HLAotCQkJCQkJCSAwLCAwLCAwLCAwKTsKLQkJCQkJYnJlYWs7CS8qIE9ubHkgaXNzdWUgb25lIHBlciBjYXJkICovCi0JCQkJfQotCQkJfQotCQl9Ci13YWl0OgotCQlTTElDX0lOVEVSUlVQVElCTEVfU0xFRVBfT05fVElNRU9VVChjYXJkLT5kdW1wX3dxLCBkZWxheSk7Ci0JfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKLQotZW5kX3RocmVhZDoKLS8qICBEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX3RocmVhZCBjYXJkWyVwXSBwaWRbJXhdIEVORElOR1xuIiwKLSAgICBjYXJkLCBjYXJkLT5kdW1wX3BpZCk7ICovCi0JY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nID0gMDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVhZCBhIHNpbmdsZSBieXRlIGZyb20gb3VyIGR1bXAgaW5kZXggZmlsZS4gIFRoaXMKLSAqIHZhbHVlIGlzIHVzZWQgYXMgb3VyIHN1ZmZpeCBmb3Igb3VyIGR1bXAgcGF0aC4gIFRoZQotICogdmFsdWUgaXMgaW5jcmVtZW50ZWQgYW5kIHdyaXR0ZW4gYmFjayB0byB0aGUgZmlsZQotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX2dldF9kdW1wX2luZGV4KGNoYXIgKnBhdGgpCi17Ci0JdW5zaWduZWQgY2hhciBpbmRleCA9IDA7Ci0jaWZkZWYgU0xJQ19EVU1QX0lOREVYX1NVUFBPUlQKLQl1MzIgc3RhdHVzOwotCXZvaWQgKkZpbGVIYW5kbGU7Ci0JdTMyIG9mZnNldDsKLQotCW9mZnNldCA9IDA7Ci0KLQkvKgotCSAqIE9wZW4gdGhlIGluZGV4IGZpbGUuICBJZiBvbmUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0Ci0JICovCi0Jc3RhdHVzID0gY3JlYXRlX2ZpbGUoJkZpbGVIYW5kbGUpOwotCi0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSAwOwotCi0Jc3RhdHVzID0gcmVhZF9maWxlKEZpbGVIYW5kbGUsICZpbmRleCwgMSwgJm9mZnNldCk7Ci0KLQlpbmRleCsrOwotCi0Jc3RhdHVzID0gd3JpdGVfZmlsZShGaWxlSGFuZGxlLCAmaW5kZXgsIDEsICZvZmZzZXQpOwotCi0JY2xvc2VfZmlsZShGaWxlSGFuZGxlKTsKLSNlbHNlCi0JaW5kZXggPSAwOwotI2VuZGlmCi0JcmV0dXJuIGluZGV4OwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGUgKnNsaWNfZHVtcF9vcGVuX2ZpbGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKQotewotCXN0cnVjdCBmaWxlICpTTElDaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBOVUxMOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwotCWNoYXIgU0xJQ2ZpbGVbNTBdOwotCi0JY2FyZC0+ZHVtcGZpbGVfZnMgPSBnZXRfZnMoKTsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCi0JbWVtc2V0KFNMSUNmaWxlLCAwLCBzaXplb2YoU0xJQ2ZpbGUpKTsKLQlzcHJpbnRmKFNMSUNmaWxlLCAiL3Zhci90bXAvc2xpYyVkLWR1bXAtJWQiLCBjYXJkLT5jYXJkbnVtLAotCQkodWludCkgY2FyZC0+ZHVtcF9jb3VudCk7Ci0JY2FyZC0+ZHVtcF9jb3VudCsrOwotCi0JU0xJQ2hhbmRsZSA9Ci0JICAgIGZpbHBfb3BlbihTTElDZmlsZSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fU1lOQyB8IE9fTEFSR0VGSUxFLCAwNjY2KTsKLQotCURCR19NU0coIltzbGljbW9uXTogRHVtcCBDYXJkICMlZCB0byBmaWxlOiAlcyBcbiIsIGNhcmQtPmNhcmRudW0sCi0JCVNMSUNmaWxlKTsKLQotLyogIERCR19NU0coIltzbGljbW9uXSBmaWxwX29wZW4gJXMgU0xJQ2hhbmRsZVslcF1cbiIsIFNMSUNmaWxlLCBTTElDaGFuZGxlKTsqLwotCi0JaWYgKElTX0VSUihTTElDaGFuZGxlKSkKLQkJZ290byBlbmRfc2xpY2R1bXA7Ci0KLQlkZW50cnkgPSBTTElDaGFuZGxlLT5mX2RlbnRyeTsKLQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQotLyogIERCR19NU0coIltzbGljbW9uXSBpbm9kZVslcF0gaV9ubGlua1sleF0gaV9tb2RlWyV4XSBpX29wWyVwXSBpX2ZvcFslcF1cbiIKLQkJImZfb3AtPndyaXRlWyVwXVxuIiwKLQkJaW5vZGUsIGlub2RlLT5pX25saW5rLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9vcCwKLQkJaW5vZGUtPmlfZm9wLCBTTElDaGFuZGxlLT5mX29wLT53cml0ZSk7ICovCi0JaWYgKGlub2RlLT5pX25saW5rID4gMSkKLQkJZ290byBjbG9zZV9zbGljZHVtcDsJLyogbXVsdGlwbGUgbGlua3MgLSBkb24ndCBkdW1wICovCi0jaWZkZWYgSElTVE9SSUNBTAotCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKLQkJZ290byBjbG9zZV9zbGljZHVtcDsKLSNlbmRpZgotCWlmICghaW5vZGUtPmlfb3AgfHwgIWlub2RlLT5pX2ZvcCkKLQkJZ290byBjbG9zZV9zbGljZHVtcDsKLQotCWlmICghU0xJQ2hhbmRsZS0+Zl9vcC0+d3JpdGUpCi0JCWdvdG8gY2xvc2Vfc2xpY2R1bXA7Ci0KLQkvKgotCSAqICBJZiB3ZSBnb3QgaGVyZSB3ZSBoYXZlIFNVQ0NFU1NGVUxMWSBPUEVORUQgdGhlIGR1bXAgZmlsZQotCSAqLwotLyogIERCR19NU0coIm9wZW5lZCAlcyBTTElDaGFuZGxlWyVwXVxuIiwgU0xJQ2ZpbGUsIFNMSUNoYW5kbGUpOyAqLwotCXJldHVybiBTTElDaGFuZGxlOwotCi1jbG9zZV9zbGljZHVtcDoKLQlEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX29wZW5fZmlsZSBmYWlsZWQgY2xvc2UgU0xJQ2hhbmRsZVslcF1cbiIsCi0JCVNMSUNoYW5kbGUpOwotCWZpbHBfY2xvc2UoU0xJQ2hhbmRsZSwgTlVMTCk7Ci0KLWVuZF9zbGljZHVtcDoKLQlzZXRfZnMoY2FyZC0+ZHVtcGZpbGVfZnMpOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfZHVtcF9jbG9zZV9maWxlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKLXsKLQotLyogIERCR19NU0coIltzbGljbW9uXSBzbGljX2R1bXBfQ0xPU0VfZmlsZSBjbG9zZSBTTElDaGFuZGxlWyVwXVxuIiwKLSAgIGNhcmQtPmR1bXBoYW5kbGUpOyAqLwotCi0JZmlscF9jbG9zZShjYXJkLT5kdW1waGFuZGxlLCBOVUxMKTsKLQotCXNldF9mcyhjYXJkLT5kdW1wZmlsZV9mcyk7Ci19Ci0KLXN0YXRpYyB1MzIgc2xpY19kdW1wX2NhcmQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBib29sIHJlc3VtZSkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNhcmQtPm1hc3RlcjsKLQl1MzIgc3RhdHVzOwotCXUzMiBxdWV1ZTsKLQl1MzIgbGVuLCBvZmZzZXQ7Ci0JdTMyIHNyYW1fc2l6ZSwgZHJhbV9zaXplLCByZWdzOwotCXN0cnVjdCBzbGljY29yZV9oZHIgY29yZWhkcjsKLQl1MzIgZmlsZV9vZmZzZXQ7Ci0JY2hhciAqbmFtZXN0cjsKLQl1MzIgaTsKLQl1MzIgbWF4X3F1ZXVlcyA9IDA7Ci0JdTMyIHJlc3VsdDsKLQotCWNhcmQtPmR1bXBoYW5kbGUgPSBzbGljX2R1bXBfb3Blbl9maWxlKGNhcmQpOwotCi0JaWYgKGNhcmQtPmR1bXBoYW5kbGUgPT0gTlVMTCkgewotCQlEQkdfTVNHKCJbc2xpY21vbl0gQ2FudCBjcmVhdGUgRHVtcCBmaWxlIC0gZHVtcCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JaWYgKCFjYXJkLT5kdW1wYnVmZmVyKSB7Ci0JCURCR19NU0coIltzbGljbW9uXSBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBkdW1wXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWlmICghY2FyZC0+Y21kYnVmZmVyKSB7Ci0JCURCR19NU0coIltzbGljbW9uXSBJbnN1ZmZpY2llbnQgY21kIG1lbW9yeSBmb3IgZHVtcFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogV3JpdGUgdGhlIGZpbGUgdmVyc2lvbiB0byB0aGUgY29yZSBoZWFkZXIuCi0JICovCi0JbmFtZXN0ciA9IHNsaWNfcHJvY192ZXJzaW9uOwotCWZvciAoaSA9IDA7IGkgPCAoRFJJVkVSX05BTUVfU0laRSAtIDEpOyBpKyssIG5hbWVzdHIrKykgewotCQlpZiAoIW5hbWVzdHIpCi0JCQlicmVhazsKLQkJY29yZWhkci5kcml2ZXJfdmVyc2lvbltpXSA9ICpuYW1lc3RyOwotCX0KLQljb3JlaGRyLmRyaXZlcl92ZXJzaW9uW2ldID0gMDsKLQotCWZpbGVfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBzbGljY29yZV9oZHIpOwotCi0JLyoKLQkgKiBJc3N1ZSB0aGUgZm9sbG93aW5nIGRlYnVnIGNvbW1hbmRzIHRvIHRoZSBTTElDOgotCSAqICAgICAgICAtIEhhbHQgYm90aCByZWNlaXZlIGFuZCB0cmFuc21pdAotCSAqICAgICAgICAtIER1bXAgcmVjZWl2ZSByZWdpc3RlcnMKLQkgKiAgICAgICAgLSBEdW1wIHRyYW5zbWl0IHJlZ2lzdGVycwotCSAqICAgICAgICAtIER1bXAgc3JhbQotCSAqICAgICAgICAtIER1bXAgZHJhbQotCSAqICAgICAgICAtIER1bXAgcXVldWVzCi0JICovCi0JREJHX01TRygic2xpY0R1bXAgSEFMVCBSZWNlaXZlIFByb2Nlc3NvclxuIik7Ci0JY2FyZC0+ZHVtcHRpbWVfc3RhcnQgPSBqaWZmaWVzOwotCi0Jc3RhdHVzID0gc2xpY19kdW1wX2hhbHQoY2FyZCwgUFJPQ19SRUNFSVZFKTsKLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJDYW50IGhhbHQgcmVjZWl2ZSBzZXF1ZW5jZXIgLSBkdW1wIGZhaWxlZCBzdGF0dXNbJXhdXG4iLAotCQkgICAgIHN0YXR1cyk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlEQkdfTVNHKCJzbGljRHVtcCBIQUxUIFRyYW5zbWl0IFByb2Nlc3NvclxuIik7Ci0Jc3RhdHVzID0gc2xpY19kdW1wX2hhbHQoY2FyZCwgUFJPQ19UUkFOU01JVCk7Ci0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlEQkdfRVJST1IoIkNhbnQgaGFsdCB0cmFuc21pdCBzZXF1ZW5jZXIgLSBkdW1wIGZhaWxlZFxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKiBEdW1wIHJlY2VpdmUgcmVncyAqLwotCXN0YXR1cyA9IHNsaWNfZHVtcF9yZWcoY2FyZCwgUFJPQ19SRUNFSVZFKTsKLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCURCR19FUlJPUigiQ2FudCBkdW1wIHJlY2VpdmUgcmVnaXN0ZXJzIC0gZHVtcCBmYWlsZWRcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JREJHX01TRygic2xpY0R1bXAgV3JpdGUgUmVjZWl2ZSBSRUdTIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKLQkJKFNMSUNfTlVNX1JFRyAqIDQpLCBmaWxlX29mZnNldCk7Ci0KLQlyZXN1bHQgPQotCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgU0xJQ19OVU1fUkVHICogNCwKLQkJCSAgICBmaWxlX29mZnNldCk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoIkNhbnQgd3JpdGUgcmN2IHJlZ2lzdGVycyB0byBkdW1wIGZpbGUgLSBkdW1wIGZhaWxlZFxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQljb3JlaGRyLlJjdlJlZ09mZiA9IGZpbGVfb2Zmc2V0OwotCWNvcmVoZHIuUmN2UmVnc2l6ZSA9IFNMSUNfTlVNX1JFRyAqIDQ7Ci0JZmlsZV9vZmZzZXQgKz0gU0xJQ19OVU1fUkVHICogNDsKLQotCS8qIER1bXAgdHJhbnNtaXQgcmVncyAqLwotCXN0YXR1cyA9IHNsaWNfZHVtcF9yZWcoY2FyZCwgUFJPQ19UUkFOU01JVCk7Ci0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlEQkdfRVJST1IoIkNhbnQgZHVtcCB0cmFuc21pdCByZWdpc3RlcnMgLSBkdW1wIGZhaWxlZFxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBYTUlUIFJFR1MgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLAotCQkoU0xJQ19OVU1fUkVHICogNCksIGZpbGVfb2Zmc2V0KTsKLQotCXJlc3VsdCA9Ci0JICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBTTElDX05VTV9SRUcgKiA0LAotCQkJICAgIGZpbGVfb2Zmc2V0KTsKLQlpZiAoIXJlc3VsdCkgewotCQlEQkdfRVJST1IKLQkJICAgICgiQ2FudCB3cml0ZSB4bXQgcmVnaXN0ZXJzIHRvIGR1bXAgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWNvcmVoZHIuWG10UmVnT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5YbXRSZWdzaXplID0gU0xJQ19OVU1fUkVHICogNDsKLQlmaWxlX29mZnNldCArPSBTTElDX05VTV9SRUcgKiA0OwotCi0JcmVncyA9IFNMSUNfR0JNQVhfUkVHOwotCi0JY29yZWhkci5GaWxlUmVnT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5GaWxlUmVnc2l6ZSA9IHJlZ3MgKiA0OwotCi0JZm9yIChvZmZzZXQgPSAwOyByZWdzOykgewotCQlsZW4gPSBNSU4ocmVncywgMTYpOwkvKiBDYW4gb25seSB4ZnIgMTYgcmVncyBhdCBhIHRpbWUgKi8KLQotCQlzdGF0dXMgPSBzbGljX2R1bXBfZGF0YShjYXJkLCBvZmZzZXQsICh1c2hvcnQpIGxlbiwgREVTQ19SRklMRSk7Ci0KLQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJREJHX0VSUk9SKCJDYW50IGR1bXAgcmVnaXN0ZXIgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCURCR19NU0coInNsaWNEdW1wIFdyaXRlIFJlZ2lzdGVyRmlsZSBsZW5bJXhdIG9mZnNldFsleF1cbiIsCi0JCQkobGVuICogNCksIGZpbGVfb2Zmc2V0KTsKLQotCQlyZXN1bHQgPQotCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiAqIDQsCi0JCQkJICAgIGZpbGVfb2Zmc2V0KTsKLQkJaWYgKCFyZXN1bHQpIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiQ2FudCB3cml0ZSByZWdpc3RlciBmaWxlIHRvIGR1bXAgZmlsZSAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWZpbGVfb2Zmc2V0ICs9IGxlbiAqIDQ7Ci0JCW9mZnNldCArPSBsZW47Ci0JCXJlZ3MgLT0gbGVuOwotCX0KLQotCWRyYW1fc2l6ZSA9IGNhcmQtPmNvbmZpZy5EcmFtU2l6ZSAqIDB4MTAwMDA7Ci0KLQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7Ci0JY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6Ci0JCXNyYW1fc2l6ZSA9IFNMSUNfU1JBTV9TSVpFMkdCOwotCQlicmVhazsKLQljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKLQkJc3JhbV9zaXplID0gU0xJQ19TUkFNX1NJWkUxR0I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNyYW1fc2l6ZSA9IDA7Ci0JCUFTU0VSVCgwKTsKLQkJYnJlYWs7Ci0JfQotCi0JY29yZWhkci5TcmFtT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5TcmFtc2l6ZSA9IHNyYW1fc2l6ZTsKLQotCWZvciAob2Zmc2V0ID0gMDsgc3JhbV9zaXplOykgewotCQlsZW4gPSBNSU4oc3JhbV9zaXplLCBEVU1QX0JVRl9TSVpFKTsKLQkJc3RhdHVzID0gc2xpY19kdW1wX2RhdGEoY2FyZCwgb2Zmc2V0LCAodXNob3J0KSBsZW4sIERFU0NfU1JBTSk7Ci0JCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiW3NsaWNtb25dIENhbnQgZHVtcCBTUkFNIGF0IG9mZnNldCAleCAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iLCAodWludCkgb2Zmc2V0KTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCURCR19NU0coIltzbGljbW9uXSBzbGljRHVtcCBXcml0ZSBTUkFNICBsZW5bJXhdIG9mZnNldFsleF1cbiIsCi0JCQlsZW4sIGZpbGVfb2Zmc2V0KTsKLQotCQlyZXN1bHQgPQotCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBTUkFNIHRvIGR1bXAgZmlsZSAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWZpbGVfb2Zmc2V0ICs9IGxlbjsKLQkJb2Zmc2V0ICs9IGxlbjsKLQkJc3JhbV9zaXplIC09IGxlbjsKLQl9Ci0KLQljb3JlaGRyLkRyYW1PZmYgPSBmaWxlX29mZnNldDsKLQljb3JlaGRyLkRyYW1zaXplID0gZHJhbV9zaXplOwotCi0JZm9yIChvZmZzZXQgPSAwOyBkcmFtX3NpemU7KSB7Ci0JCWxlbiA9IE1JTihkcmFtX3NpemUsIERVTVBfQlVGX1NJWkUpOwotCi0JCXN0YXR1cyA9IHNsaWNfZHVtcF9kYXRhKGNhcmQsIG9mZnNldCwgKHVzaG9ydCkgbGVuLCBERVNDX0RSQU0pOwotCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoIltzbGljbW9uXSBDYW50IGR1bXAgZHJhbSBhdCBvZmZzZXQgJXggLSAiCi0JCQkgICAgICJkdW1wIGZhaWxlZFxuIiwgKHVpbnQpIG9mZnNldCk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBEUkFNICBsZW5bJXhdIG9mZnNldFsleF1cbiIsIGxlbiwKLQkJCWZpbGVfb2Zmc2V0KTsKLQotCQlyZXN1bHQgPQotCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBEUkFNIHRvIGR1bXAgZmlsZSAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWZpbGVfb2Zmc2V0ICs9IGxlbjsKLQkJb2Zmc2V0ICs9IGxlbjsKLQkJZHJhbV9zaXplIC09IGxlbjsKLQl9Ci0KLQltYXhfcXVldWVzID0gU0xJQ19NQVhfUVVFVUU7Ci0KLQlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBtYXhfcXVldWVzOyBxdWV1ZSsrKSB7Ci0JCXUzMiAqcWFycmF5ID0gKHUzMiAqKSBjYXJkLT5kdW1wYnVmZmVyOwotCQl1MzIgcWFycmF5X3BoeXNsID0gY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbDsKLQkJdTMyIHFhcnJheV9waHlzaCA9IGNhcmQtPmR1bXBidWZmZXJfcGh5c2g7Ci0JCXUzMiBxc3RhcnQ7Ci0JCXUzMiBxZGVsdGE7Ci0JCXUzMiBxdG90YWwgPSAwOwotCi0JCURCR19NU0coIltzbGljbW9uXSBTdGFydCBEdW1wIG9mIFFVRVVFICMweCV4XG4iLCAodWludCkgcXVldWUpOwotCi0JCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgKERVTVBfQlVGX1NJWkUgPj4gMik7IG9mZnNldCsrKSB7Ci0JCQlxc3RhcnQgPSBqaWZmaWVzOwotCQkJcWRlbHRhID0gMDsKLQotCQkJc3RhdHVzID0gc2xpY19kdW1wX3F1ZXVlKGNhcmQsCi0JCQkJCQkgcWFycmF5X3BoeXNsLAotCQkJCQkJIHFhcnJheV9waHlzaCwgcXVldWUpOwotCQkJcWFycmF5X3BoeXNsICs9IDQ7Ci0KLQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChqaWZmaWVzID4gcXN0YXJ0KSB7Ci0JCQkJcWRlbHRhID0gamlmZmllcyAtIHFzdGFydDsKLQkJCQlxdG90YWwgKz0gcWRlbHRhOwotCQkJfQotCQl9Ci0KLQkJaWYgKG9mZnNldCkKLQkJCXFkZWx0YSA9IHF0b3RhbCAvIG9mZnNldDsKLQkJZWxzZQotCQkJcWRlbHRhID0gMDsKLQotLyogICAgICAgIERCR19NU0coIiAgIHNsaWNEdW1wIFdyaXRlIFFVRVVFICMweCV4IGxlblsleF0gb2Zmc2V0WyV4XSAiCi0JCSJhdmdqaWZmc1sleF1cbiIsIHF1ZXVlLCAob2Zmc2V0KjQpLCBmaWxlX29mZnNldCwgcWRlbHRhKTsgKi8KLQotCQlyZXN1bHQgPQotCQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIG9mZnNldCAqIDQsCi0JCQkJICAgIGZpbGVfb2Zmc2V0KTsKLQotCQlpZiAoIXJlc3VsdCkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJbc2xpY21vbl0gQ2FudCB3cml0ZSBRVUVVRVMgdG8gZHVtcCBmaWxlIC0gIgotCQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJY29yZWhkci5xdWV1ZXNbcXVldWVdLnF1ZXVlT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JCWNvcmVoZHIucXVldWVzW3F1ZXVlXS5xdWV1ZXNpemUgPSBvZmZzZXQgKiA0OwotCQlmaWxlX29mZnNldCArPSBvZmZzZXQgKiA0OwotCi0vKiAgICAgIERCR19NU0coIiAgICBSZWxvYWQgUVVFVUUgIzB4JXggZWxlbWVudHNbJXhdXG4iLCAodWludClxdWV1ZSwgb2Zmc2V0KTsqLwotCQkvKgotCQkgKiBGaWxsIHRoZSBxdWV1ZSBiYWNrIHVwCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKLQkJCXFzdGFydCA9IGppZmZpZXM7Ci0JCQlxZGVsdGEgPSAwOwotCi0JCQlzdGF0dXMgPSBzbGljX2R1bXBfbG9hZF9xdWV1ZShjYXJkLCBxYXJyYXlbaV0sIHF1ZXVlKTsKLQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChqaWZmaWVzID4gcXN0YXJ0KSB7Ci0JCQkJcWRlbHRhID0gamlmZmllcyAtIHFzdGFydDsKLQkJCQlxdG90YWwgKz0gcWRlbHRhOwotCQkJfQotCQl9Ci0KLQkJaWYgKG9mZnNldCkKLQkJCXFkZWx0YSA9IHF0b3RhbCAvIG9mZnNldDsKLQkJZWxzZQotCQkJcWRlbHRhID0gMDsKLQotLyogICAgICBEQkdfTVNHKCIgICBSZWxvYWQgRE9ORSBhdmdqaWZmc1sleF1cbiIsIHFkZWx0YSk7ICovCi0KLQkJcmVzdW1lID0gMTsKLQl9Ci0KLQlsZW4gPSBTTElDX0dCX0NBTUFCX1NaRSAqIDQ7Ci0Jc3RhdHVzID0gc2xpY19kdW1wX2NhbShjYXJkLCAwLCBsZW4sIERVTVBfQ0FNX0EpOwotCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SKCJbc2xpY21vbl0gQ2FuJ3QgZHVtcCBDQU1fQSAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCXJlc3VsdCA9IHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKLQlpZiAocmVzdWx0KSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJbc2xpY21vbl0gQ2FuJ3Qgd3JpdGUgQ0FNX0EgZGF0YSB0byBkdW1wIGZpbGUgLSAiCi0JCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQljb3JlaGRyLkNhbUFNT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5DYW1BU2l6ZSA9IGxlbjsKLQlmaWxlX29mZnNldCArPSBsZW47Ci0KLQlsZW4gPSBTTElDX0dCX0NBTUNEX1NaRSAqIDQ7Ci0Jc3RhdHVzID0gc2xpY19kdW1wX2NhbShjYXJkLCAwLCBsZW4sIERVTVBfQ0FNX0MpOwotCWlmIChzdGF0dXMpIHsKLQkJREJHX0VSUk9SKCJbc2xpY21vbl0gQ2FuJ3QgZHVtcCBDQU1fQyAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCXJlc3VsdCA9IHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKLQlpZiAocmVzdWx0KSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJbc2xpY21vbl0gQ2FuJ3Qgd3JpdGUgQ0FNX0MgZGF0YSB0byBkdW1wIGZpbGUgLSAiCi0JCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQljb3JlaGRyLkNhbUNNT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5DYW1DU2l6ZSA9IGxlbjsKLQlmaWxlX29mZnNldCArPSBsZW47Ci0KLWRvbmU6Ci0JLyoKLQkgKiBXcml0ZSBvdXQgdGhlIGNvcmUgaGVhZGVyCi0JICovCi0JZmlsZV9vZmZzZXQgPSAwOwotCURCR19NU0coIltzbGljbW9uXSBXcml0ZSBDb3JlSGVhZGVyIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKLQkJKHVpbnQpIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSwgZmlsZV9vZmZzZXQpOwotCi0JcmVzdWx0ID0KLQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsICZjb3JlaGRyLCBzaXplb2Yoc3RydWN0IHNsaWNjb3JlX2hkciksCi0JCQkgICAgZmlsZV9vZmZzZXQpOwotCURCR19NU0coIltzbGljbW9uXSBjb3JlaGRyICB4b2ZmWyV4XSB4c3pbJXhdXG4iCi0JCSIgICAgcm9mZlsleF0gcnN6WyV4XSBmaWxlb2ZmWyV4XSBmaWxlc3pbJXhdXG4iCi0JCSIgICAgc3JhbW9mZlsleF0gc3JhbXN6WyV4XSwgZHJhbW9mZlsleF0gZHJhbXN6WyV4XVxuIgotCQkiICAgIGNvcmVoZHJfb2Zmc2V0WyV4XVxuIiwgY29yZWhkci5YbXRSZWdPZmYsCi0JCWNvcmVoZHIuWG10UmVnc2l6ZSwgY29yZWhkci5SY3ZSZWdPZmYsIGNvcmVoZHIuUmN2UmVnc2l6ZSwKLQkJY29yZWhkci5GaWxlUmVnT2ZmLCBjb3JlaGRyLkZpbGVSZWdzaXplLCBjb3JlaGRyLlNyYW1PZmYsCi0JCWNvcmVoZHIuU3JhbXNpemUsIGNvcmVoZHIuRHJhbU9mZiwgY29yZWhkci5EcmFtc2l6ZSwKLQkJKHVpbnQpIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSk7Ci0JZm9yIChpID0gMDsgaSA8IG1heF9xdWV1ZXM7IGkrKykgewotCQlEQkdfTVNHKCJbc2xpY21vbl0gIFFVRVVFIDB4JXggIG9mZnNldFsleF0gc2l6ZVsleF1cbiIsCi0JCQkodWludCkgaSwgY29yZWhkci5xdWV1ZXNbaV0ucXVldWVPZmYsCi0JCQljb3JlaGRyLnF1ZXVlc1tpXS5xdWV1ZXNpemUpOwotCi0JfQotCi0Jc2xpY19kdW1wX2Nsb3NlX2ZpbGUoY2FyZCk7Ci0KLQlpZiAocmVzdW1lKSB7Ci0JCURCR19NU0coInNsaWNEdW1wIFJFU1RBUlQgUkVDRUlWRSBhbmQgWE1JVCBQUk9DRVNTT1JTXG5cbiIpOwotCQlzbGljX2R1bXBfcmVzdW1lKGNhcmQsIFBST0NfUkVDRUlWRSk7Ci0JCXNsaWNfZHVtcF9yZXN1bWUoY2FyZCwgUFJPQ19UUkFOU01JVCk7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfaGFsdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKLXsKLQl1bnNpZ25lZCBjaGFyICpjbWQgPSBjYXJkLT5jbWRidWZmZXI7Ci0KLQkqY21kID0gQ09NTUFORF9CWVRFKENNRF9IQUxULCAwLCBwcm9jKTsKLQotCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLCAwLCAwKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfcmVzdW1lKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKQotewotCXVuc2lnbmVkIGNoYXIgKmNtZCA9IGNhcmQtPmNtZGJ1ZmZlcjsKLQotCSpjbWQgPSBDT01NQU5EX0JZVEUoQ01EX1JVTiwgMCwgcHJvYyk7Ci0KLQlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB1MzIgc2xpY19kdW1wX3JlZyhzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKLXsKLQlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOwotCi0JZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBwcm9jKTsKLQlkdW1wLT5kZXNjID0gREVTQ19SRUc7Ci0JZHVtcC0+Y291bnQgPSAwOwotCWR1bXAtPmFkZHIgPSAwOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCi0JCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfZGF0YShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsCi0JCSAgICAgICB1MzIgYWRkciwgdXNob3J0IGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpCi17Ci0Jc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKLQotCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfRFVNUCwgMCwgUFJPQ19SRUNFSVZFKTsKLQlkdW1wLT5kZXNjID0gZGVzYzsKLQlkdW1wLT5jb3VudCA9IGNvdW50OwotCWR1bXAtPmFkZHIgPSBhZGRyOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCi0JCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLAotCQkJdTMyIGFkZHIsIHUzMiBidWZfcGh5c2gsIHUzMiBxdWV1ZSkKLXsKLQlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOwotCi0JZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBQUk9DX1JFQ0VJVkUpOwotCWR1bXAtPmRlc2MgPSBERVNDX1FVRVVFOwotCWR1bXAtPmNvdW50ID0gMTsKLQlkdW1wLT5hZGRyID0gcXVldWU7Ci0KLQlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwKLQkJCQkgICBhZGRyLCBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfbG9hZF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBkYXRhLAotCQkJCXUzMiBxdWV1ZSkKLXsKLQlzdHJ1Y3QgZHVtcF9jbWQgKmxvYWQgPSAoc3RydWN0IGR1bXBfY21kICopIGNhcmQtPmNtZGJ1ZmZlcjsKLQotCWxvYWQtPmNtZCA9IENPTU1BTkRfQllURShDTURfTE9BRCwgMCwgUFJPQ19SRUNFSVZFKTsKLQlsb2FkLT5kZXNjID0gREVTQ19RVUVVRTsKLQlsb2FkLT5jb3VudCA9ICh1c2hvcnQpIHF1ZXVlOwotCWxvYWQtPmFkZHIgPSBkYXRhOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsIDAsIDApOwotfQotCi1zdGF0aWMgdTMyIHNsaWNfZHVtcF9jYW0oc3RydWN0IHNsaWNjYXJkICpjYXJkLAotCQkgICAgICB1MzIgYWRkciwgdTMyIGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpCi17Ci0Jc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKLQotCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfQ0FNX09QUywgMCwgUFJPQ19OT05FKTsKLQlkdW1wLT5kZXNjID0gZGVzYzsKLQlkdW1wLT5jb3VudCA9IGNvdW50OwotCWR1bXAtPmFkZHIgPSAwOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCi0JCQkJICAgYWRkciwgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCk7Ci19Ci0KLXN0YXRpYyB1MzIgc2xpY19kdW1wX3NlbmRfY21kKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKLQkJCSAgIHUzMiBjbWRfcGh5c2wsCi0JCQkgICB1MzIgY21kX3BoeXNoLAotCQkJICAgdTMyIGJ1Zl9waHlzbCwgdTMyIGJ1Zl9waHlzaCkKLXsKLQl1bG9uZyB0aW1lb3V0ID0gU0xJQ19NU19UT19KSUZGSUVTKDUwMCk7CS8qIDUwMCBtc2VjICovCi0JdTMyIGF0dGVtcHRzID0gNTsKLQl1MzIgZGVsYXkgPSBTTElDX01TX1RPX0pJRkZJRVMoMTApOwkvKiAxMCBtc2VjICovCi0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjYXJkLT5tYXN0ZXI7Ci0KLQlBU1NFUlQoYWRhcHRlcik7Ci0JZG8gewotCQkvKgotCQkgKiBaZXJvIHRoZSBEdW1wc3RhdHVzIGZpZWxkIG9mIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQotCQkgKi8KLQkJY2FyZC0+ZHVtcHN0YXR1cyA9IDA7Ci0JCS8qCi0JCSAqIElzc3VlIHRoZSBkdW1wIGNvbW1hbmQgdmlhIGEgdXRpbGl0eSBwcm9jZXNzb3IgcmVxdWVzdC4KLQkJICoKLQkJICogS2x1ZGdlOiBXZSB1c2UgdGhlIEluZm9ybWF0aW9uYnVmZmVyIHBhcmFtZXRlciB0byBob2xkCi0JCSAqIHRoZSBidWZmZXIgYWRkcmVzcwotCQkgKi8KLQkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9EVU1QLCBjbWRfcGh5c2wsIGNtZF9waHlzaCwKLQkJCQkgYnVmX3BoeXNsLCBidWZfcGh5c2gpOwotCi0JCXRpbWVvdXQgKz0gamlmZmllczsKLQkJLyoKLQkJICogU3BpbiB1bnRpbCBjb21wbGV0aW9uIG9yIHRpbWVvdXQuCi0JCSAqLwotCQl3aGlsZSAoIWNhcmQtPmR1bXBzdGF0dXMpIHsKLQkJCWludCBudW1fc2xlZXBzID0gMDsKLQotCQkJaWYgKGppZmZpZXMgPiB0aW1lb3V0KSB7Ci0JCQkJLyoKLQkJCQkgKiAgQ29tcGxldGUgdGhlIHRpbWVkLW91dCBEVU1QIFVQUiByZXF1ZXN0LgotCQkJCSAqLwotCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7Ci0JCQkJREJHX0VSUk9SCi0JCQkJICAgICgiJXM6IFRJTUVEIE9VVCBudW1fc2xlZXBzWyV4XSAiCi0JCQkJICAgICAic3RhdHVzWyV4XVxuIiwKLQkJCQkgICAgIF9fZnVuY19fLCBudW1fc2xlZXBzLCBTVEFUVVNfRkFJTFVSRSk7Ci0KLQkJCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0JCQl9Ci0JCQludW1fc2xlZXBzKys7Ci0JCQlTTElDX0lOVEVSUlVQVElCTEVfU0xFRVBfT05fVElNRU9VVChjYXJkLT5kdW1wX3dxLAotCQkJCQkJCSAgICBkZWxheSk7Ci0JCX0KLQotCQlpZiAoY2FyZC0+ZHVtcHN0YXR1cyAmIElTUl9VUENFUlIpIHsKLQkJCS8qCi0JCQkgKiBFcnJvciAob3IgcXVldWUgZW1wdHkpCi0JCQkgKi8KLS8qICAgICAgICAgIERCR19FUlJPUigiW3NsaWNtb25dICVzOiBEVU1QX1NUQVRVUyAmIElTUl9VUENFUlIgc3RhdHVzWyV4XVxuIiwKLQkJX19mdW5jX18sIFNUQVRVU19GQUlMVVJFKTsgKi8KLQotCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotCQl9IGVsc2UgaWYgKGNhcmQtPmR1bXBzdGF0dXMgJiBJU1JfVVBDQlNZKSB7Ci0JCQkvKgotCQkJICogUmV0cnkKLQkJCSAqLwotCQkJREJHX0VSUk9SKCIlczogSVNSX1VQQ0JVU1kgYXR0ZW1wdFsleF1cbiIsIF9fZnVuY19fLAotCQkJCSAgYXR0ZW1wdHMpOwotCi0JCQlhdHRlbXB0cy0tOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIHN1Y2Nlc3MKLQkJCSAqLwotCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCQl9Ci0KLQl9IHdoaWxlIChhdHRlbXB0cyk7Ci0KLQlEQkdfRVJST1IoIiVzOiBHQVZFIFVQIEFGVEVSIFNFVkVSQUwgQVRURU1QVFMgc3RhdHVzWyV4XVxuIiwKLQkJICBfX2Z1bmNfXywgU1RBVFVTX0ZBSUxVUkUpOwotCi0JLyoKLQkgKiBHYXZlIHVwIGFmdGVyIHNldmVyYWwgYXR0ZW1wdHMKLQkgKi8KLQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci19Ci0KLSNlbmRpZgotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqICAgTU9EVUxFIElOSVRJQVRJT04gLyBURVJNSU5BVElPTiBGVU5DVElPTlMgICAqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTkxNSw0NiArNDA0MywyNSBAQAogCS5pZF90YWJsZSA9IHNsaWNfcGNpX3RibCwKIAkucHJvYmUgPSBzbGljX2VudHJ5X3Byb2JlLAogCS5yZW1vdmUgPSBzbGljX2VudHJ5X3JlbW92ZSwKLSNpZiBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAotCS5zdXNwZW5kID0gc2xpY3BtX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHNsaWNwbV9yZXN1bWUsCi0jZW5kaWYKLS8qICAgIC5zaHV0ZG93biAgID0gICAgIHNsaWNfc2h1dGRvd24sICBNT09LX0lOVkVTVElHQVRFICovCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzbGljX21vZHVsZV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaWRldjsKLQlpbnQgcmV0OwotCi0vKiAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGNwdSAlZFxuIiwgX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSk7ICovCi0KIAlzbGljX2luaXRfZHJpdmVyKCk7CiAKIAlpZiAoZGVidWcgPj0gMCAmJiBzbGljX2RlYnVnICE9IGRlYnVnKQotCQlwcmludGsoU0xJQ0xFVkVMICJzbGljb3NzOiBkZWJ1ZyBsZXZlbCBpcyAlZC5cbiIsIGRlYnVnKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjogZGVidWcgbGV2ZWwgaXMgJWQuXG4iLAorCQkgICAgICAgZGVidWcpOwogCWlmIChkZWJ1ZyA+PSAwKQogCQlzbGljX2RlYnVnID0gZGVidWc7CiAKLQlwY2lkZXYgPSAoc3RydWN0IHBjaV9kZXZpY2VfaWQgKilzbGljX2RyaXZlci5pZF90YWJsZTsKLS8qICAgICAgREJHX01TRygic2xpY29zczogJXMgY2FsbCBwY2lfbW9kdWxlX2luaXQgamlmZmllc1slbHhdIGNwdSAjJWRcbiIsCi0JX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7ICovCi0KLQlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbGljX2RyaXZlcik7Ci0KLS8qICBEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIGFmdGVyIGNhbGwgcGNpX21vZHVsZV9pbml0IGppZmZpZXNbJWx4XSAiCi0JICAgICJjcHUgIyVkIHN0YXR1c1sleF1cbiIsX19mdW5jX18sIGppZmZpZXMsCi0JICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgcmV0KTsgKi8KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNsaWNfbW9kdWxlX2NsZWFudXAodm9pZCkKIHsKLS8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRU5URVJcbiIsIF9fZnVuY19fKTsgKi8KIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKIAlzbGljX2RlYnVnX2NsZWFudXAoKTsKLS8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOyAqLwogfQogCiBtb2R1bGVfaW5pdChzbGljX21vZHVsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZjQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnCkBAIC0wLDAgKzEsOCBAQAorY29uZmlnIFNUTEM0NVhYCisJdHJpc3RhdGUgInN0bGM0NTUwLzQ1NjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgU1BJX01BU1RFUgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHN0bGM0NTUwIGFuZCBzdGxjNDU2MCBjaGlwc2V0cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgc3RsYzQ1eHguICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZTMyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1NUTEM0NVhYKQkrPSBzdGxjNDV4eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlY2VkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYwpAQCAtMCwwICsxLDI2MDYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBzdGxjNDV4eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAic3RsYzQ1eHguaCIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgInN0bGM0NXh4X2xtYWMuaCIKKworLyoKKyAqIGdwaW9zIHNob3VsZCBiZSBoYW5kbGVkIGluIGJvYXJkIGZpbGVzIGFuZCBwcm92aWRlZCB2aWEgcGxhdGZvcm0gZGF0YSwKKyAqIGJ1dCBiZWNhdXNlIGl0J3MgY3VycmVudGx5IGltcG9zc2libGUgZm9yIHN0bGM0NXh4IHRvIGhhdmUgYSBoZWFkZXIgZmlsZQorICogaW4gaW5jbHVkZS9saW51eCwgbGV0J3MgdXNlIG1vZHVsZSBwYXJhbWF0ZXJzIGZvciBub3cKKyAqLworc3RhdGljIGludCBzdGxjNDV4eF9ncGlvX3Bvd2VyID0gOTc7Cittb2R1bGVfcGFyYW0oc3RsYzQ1eHhfZ3Bpb19wb3dlciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3RsYzQ1eHhfZ3Bpb19wb3dlciwgInN0bGM0NXh4IGdwaW8gbnVtYmVyIGZvciBwb3dlciBsaW5lIik7CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfZ3Bpb19pcnEgPSA4NzsKK21vZHVsZV9wYXJhbShzdGxjNDV4eF9ncGlvX2lycSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3RsYzQ1eHhfZ3Bpb19pcnEsICJzdGxjNDV4eCBncGlvIG51bWJlciBmb3IgaXJxIGxpbmUiKTsKKworc3RhdGljIGNvbnN0IHU4IGRlZmF1bHRfY2FsX2NoYW5uZWxzW10gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweDA5LAorCTB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwKKwkweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCisJMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LAorCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKKwkweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLAorCTB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwKKwkweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCisJMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKKwkweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsCisJMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LAorCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKKwkweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLAorCTB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwKKwkweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKKwkweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAorCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsCisJMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsCisJMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKKwkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKKwkweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKwkweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLAorCTB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywKKwkweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLAorCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKKwkweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAorCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsCisJMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwKKwkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsCisJMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKKwkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLAorCTB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwKKwkweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwKKwkweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLAorCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKKwkweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsCisJMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwKKwkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsCisJMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKKwkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LAorCTB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLAorCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwKKwkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLAorCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKKwkweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAorCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsCisJMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwKKwkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAorCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsCisJMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKKwkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLAorCTB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsCisJMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKKwkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LAorCTB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKKwkweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLAorCTB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksCisJMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsCisJMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAorCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsCisJMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKKwkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLAorCTB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKKwkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLAorCTB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCisJMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKKwkweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLAorCTB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwKKwkweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OGEsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwKKwkweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsCisJMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKKwkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLAorCTB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKKwkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLAorCTB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKKwkweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLAorCTB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCisJMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwKKwkweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCisJMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwKKwkweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAorCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDA5LCAweDAwLCAweDAwLAorCTB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LAorCTB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLAorCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKKwkweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLAorCTB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwKKwkweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCisJMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKKwkweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsCisJMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk0LCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLAorCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKKwkweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLAorCTB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwKKwkweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCisJMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKKwkweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAorCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsCisJMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsCisJMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKKwkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwOSwgMHgwMCwKKwkweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLAorCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKwkweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLAorCTB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwKKwkweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAorCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKKwkweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAorCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsCisJMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwKKwkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsCisJMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKKwkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LAorCTB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAorCTB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsCisJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwKKwkweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAorCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKKwkweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksCisJMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwKKwkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsCisJMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKKwkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LAorCTB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLAorCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCB9OworCitzdGF0aWMgY29uc3QgdTggZGVmYXVsdF9jYWxfcnNzaVtdID0geworCTB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsCisJMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsCisJMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLAorCTB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfZWRjZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2V0dXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NjYW4oc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3BzbShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgZW5hYmxlKTsKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSk7CitzdGF0aWMgaW50IHN0bGM0NXh4X3R4X3BzcG9sbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKTsKKworc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfcnNzaShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IGxlbjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWxlbiA9IFBBR0VfU0laRTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChzdGxjLT5jYWxfcnNzaSkKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKHN0bGMtPmNhbF9yc3NpLCBSU1NJX0NBTF9BUlJBWV9MRU4sIDE2LAorCQkJCSAgIDIsIGJ1ZiwgbGVuLCAwKTsKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCWxlbiA9IHN0cmxlbihidWYpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX3Jzc2koc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKGNvdW50ICE9IFJTU0lfQ0FMX0FSUkFZX0xFTikgeworCQlzdGxjNDV4eF9lcnJvcigiaW52YWxpZCBjYWxfcnNzaSBsZW5ndGg6ICV6dSIsIGNvdW50KTsKKwkJY291bnQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJa2ZyZWUoc3RsYy0+Y2FsX3Jzc2kpOworCisJc3RsYy0+Y2FsX3Jzc2kgPSBrbWVtZHVwKGJ1ZiwgUlNTSV9DQUxfQVJSQVlfTEVOLCBHRlBfS0VSTkVMKTsKKworCWlmICghc3RsYy0+Y2FsX3Jzc2kpIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbF9yc3NpIik7CisJCWNvdW50ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgbGVuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbGVuID0gUEFHRV9TSVpFOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKHN0bGMtPmNhbF9jaGFubmVscykKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKHN0bGMtPmNhbF9jaGFubmVscywgQ0hBTk5FTF9DQUxfQVJSQVlfTEVOLAorCQkJCSAgIDE2LCAyLCBidWYsIGxlbiwgMCk7CisKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCWxlbiA9IHN0cmxlbihidWYpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChjb3VudCAhPSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4pIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImludmFsaWQgY2FsX2NoYW5uZWxzIHNpemU6ICV6dSAiLCBjb3VudCk7CisJCWNvdW50ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWtmcmVlKHN0bGMtPmNhbF9jaGFubmVscyk7CisKKwlzdGxjLT5jYWxfY2hhbm5lbHMgPSBrbWVtZHVwKGJ1ZiwgY291bnQsIEdGUF9LRVJORUwpOworCisJaWYgKCFzdGxjLT5jYWxfY2hhbm5lbHMpIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbF9jaGFubmVscyIpOworCQljb3VudCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfdHhfYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHR4YnVmZmVyICplbnRyeTsKKwlzc2l6ZV90IGxlbiA9IDA7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzdGxjLT50eF9zZW50LCB0eF9saXN0KSB7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIjB4JXg6IDB4JXgtMHgleFxuIiwKKwkJCSAgICAgICBlbnRyeS0+aGFuZGxlLCBlbnRyeS0+c3RhcnQsCisJCQkgICAgICAgZW50cnktPmVuZCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY2FsX3Jzc2ksIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9yc3NpLAorCQkgICBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfcnNzaSk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2FsX2NoYW5uZWxzLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfY2hhbm5lbHMsCisJCSAgIHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9jaGFubmVscyk7CitzdGF0aWMgREVWSUNFX0FUVFIodHhfYnVmLCBTX0lSVUdPLCBzdGxjNDV4eF9zeXNmc19zaG93X3R4X2J1ZiwgTlVMTCk7CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3NwaV9yZWFkKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKworCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KKwlhZGRyID0gKGFkZHIgPDwgOCkgfCBBRERSX1JFQURfQklUXzE1OworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwl0WzBdLnR4X2J1ZiA9ICZhZGRyOworCXRbMF0ubGVuID0gMjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOworCisJdFsxXS5yeF9idWYgPSBidWY7CisJdFsxXS5sZW4gPSBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKKworCXNwaV9zeW5jKHN0bGMtPnNwaSwgJm0pOworfQorCisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3NwaV93cml0ZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXUxNiBsYXN0X3dvcmQ7CisKKwkvKiBXZSBmaXJzdCBwdXNoIHRoZSBhZGRyZXNzICovCisJYWRkciA9IGFkZHIgPDwgODsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOworCisJdFswXS50eF9idWYgPSAmYWRkcjsKKwl0WzBdLmxlbiA9IDI7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0udHhfYnVmID0gYnVmOworCXRbMV0ubGVuID0gbGVuOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwlpZiAobGVuICUgMikgeworCQlsYXN0X3dvcmQgPSAoKHU4ICopYnVmKVtsZW4gLSAxXTsKKworCQl0WzJdLnR4X2J1ZiA9ICZsYXN0X3dvcmQ7CisJCXRbMl0ubGVuID0gMjsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMl0sICZtKTsKKwl9CisKKwlzcGlfc3luYyhzdGxjLT5zcGksICZtKTsKK30KKworc3RhdGljIHUxNiBzdGxjNDV4eF9yZWFkMTYoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTE2IHZhbDsKKworCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB1MzIgc3RsYzQ1eHhfcmVhZDMyKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXUzMiB2YWw7CisKKwlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF93cml0ZTE2KHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgdmFsKQoreworCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3dyaXRlMzIoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiB2YWwpCit7CisJc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKK30KKworc3RydWN0IHN0bGM0NXh4X3NwaV9yZWcgeworCXUxNiBhZGRyZXNzOworCXUxNiBsZW5ndGg7CisJY2hhciAqbmFtZTsKK307CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhidWZmZXJfZHVtcChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcjsKKwljaGFyICpidWYsICpwb3M7CisJaW50IGJ1Zl9sZW4sIGwsIGNvdW50OworCisJaWYgKCEoREVCVUdfTEVWRUwgJiBERUJVR19UWEJVRkZFUikpCisJCXJldHVybjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOworCisJYnVmX2xlbiA9IDUwMDsKKwlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9BVE9NSUMpOworCWlmICghYnVmKQorCQlyZXR1cm47CisKKwlwb3MgPSBidWY7CisJY291bnQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eGJ1ZmZlciwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgeworCQlsID0gc25wcmludGYocG9zLCBidWZfbGVuLCAiMHgleC0weCV4LCIsCisJCQkgICAgIHR4YnVmZmVyLT5zdGFydCwgdHhidWZmZXItPmVuZCk7CisJCS8qIGRyb3AgdGhlIG51bGwgYnl0ZSAqLworCQlwb3MgKz0gbDsKKwkJYnVmX2xlbiAtPSBsOworCQljb3VudCsrOworCX0KKworCWlmIChjb3VudCA9PSAwKQorCQkqcG9zID0gJ1wwJzsKKwllbHNlCisJCSotLXBvcyA9ICdcMCc7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBpbiBidWZmZXIgJWQgcmVnaW9uczogJXMiLAorCQkgICAgICAgY291bnQsIGJ1Zik7CisKKwlrZnJlZShidWYpOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KK3N0YXRpYyBpbnQgc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcjsKKwlpbnQgcG9zOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlwb3MgPSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVDsKKworCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eGJ1ZmZlcikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiB0aGUgZW50cmllcyBpbiB0eGJ1ZmZlciBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgYXJlIGluCisJICogdGhlIHJlYWwgYnVmZmVyCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eGJ1ZmZlciwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgeworCQlpZiAocG9zICsgbGVuIDwgdHhidWZmZXItPnN0YXJ0KQorCQkJYnJlYWs7CisJCXBvcyA9IEFMSUdOKHR4YnVmZmVyLT5lbmQgKyAxLCA0KTsKKwl9CisKKwlpZiAocG9zICsgbGVuID4gRklSTVdBUkVfVFhCVUZGRVJfRU5EKQorCQkvKiBub3QgZW5vdWdoIHJvb20gKi8KKwkJcG9zID0gLTE7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBmaW5kICV6dSBCOiAweCV4IiwgbGVuLCBwb3MpOworCitvdXQ6CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF90eGJ1ZmZlcl9hZGQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLAorCQkJCSBzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyKQoreworCXN0cnVjdCB0eGJ1ZmZlciAqciwgKnByZXYgPSBOVUxMOworCisJaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4YnVmZmVyKSkgeworCQlsaXN0X2FkZCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmc3RsYy0+dHhidWZmZXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyID0gbGlzdF9maXJzdF9lbnRyeSgmc3RsYy0+dHhidWZmZXIsIHN0cnVjdCB0eGJ1ZmZlciwgYnVmZmVyX2xpc3QpOworCisJaWYgKHR4YnVmZmVyLT5zdGFydCA8IHItPnN0YXJ0KSB7CisJCS8qIGFkZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0ICovCisJCWxpc3RfYWRkKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZzdGxjLT50eGJ1ZmZlcik7CisJCXJldHVybiAwOworCX0KKworCXByZXYgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgeworCQkvKiBza2lwIGZpcnN0IGVudHJ5LCB3ZSBjaGVja2VkIGZvciB0aGF0IGFib3ZlICovCisJCWlmICghcHJldikgeworCQkJcHJldiA9IHI7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGRvdWJsZS1jaGVjayBvdmVybGFwcyAqLworCQlXQVJOX09OX09OQ0UodHhidWZmZXItPnN0YXJ0ID49IHItPnN0YXJ0ICYmCisJCQkgICAgIHR4YnVmZmVyLT5zdGFydCA8PSByLT5lbmQpOworCQlXQVJOX09OX09OQ0UodHhidWZmZXItPmVuZCA+PSByLT5zdGFydCAmJgorCQkJICAgICB0eGJ1ZmZlci0+ZW5kIDw9IHItPmVuZCk7CisKKwkJaWYgKHByZXYtPmVuZCA8IHR4YnVmZmVyLT5zdGFydCAmJgorCQkgICAgdHhidWZmZXItPmVuZCA8IHItPnN0YXJ0KSB7CisJCQkvKiBpbnNlcnQgYXQgdGhpcyBzcG90ICovCisJCQlsaXN0X2FkZF90YWlsKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZyLT5idWZmZXJfbGlzdCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXByZXYgPSByOworCX0KKworCS8qIG5vdCBmb3VuZCAqLworCWxpc3RfYWRkX3RhaWwoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnN0bGMtPnR4YnVmZmVyKTsKKworCXJldHVybiAwOworCit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLworc3RhdGljIHN0cnVjdCB0eGJ1ZmZlciAqc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RydWN0IHN0bGM0NXh4ICpzdGxjLAorCQkJCQkJIHNpemVfdCBmcmFtZV9sZW4pCit7CisJc3RydWN0IHR4YnVmZmVyICplbnRyeSA9IE5VTEw7CisJc2l6ZV90IGxlbjsKKwlpbnQgcG9zOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlsZW4gPSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgKyBmcmFtZV9sZW4gKyBGSVJNV0FSRV9UWEJVRkZFUl9UUkFJTEVSOworCXBvcyA9IHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgbGVuKTsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCVdBUk5fT05fT05DRShwb3MgKyBsZW4gPiBGSVJNV0FSRV9UWEJVRkZFUl9FTkQpOworCVdBUk5fT05fT05DRShwb3MgPCBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCk7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOworCWVudHJ5LT5zdGFydCA9IHBvczsKKwllbnRyeS0+ZnJhbWVfc3RhcnQgPSBwb3MgKyBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVI7CisJZW50cnktPmVuZCA9IGVudHJ5LT5zdGFydCArIGxlbiAtIDE7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBhbGxvY2F0ZWQgMHgleC0weCV4IiwKKwkJICAgICAgIGVudHJ5LT5zdGFydCwgZW50cnktPmVuZCk7CisKKwlzdGxjNDV4eF90eGJ1ZmZlcl9hZGQoc3RsYywgZW50cnkpOworCisJc3RsYzQ1eHhfdHhidWZmZXJfZHVtcChzdGxjKTsKKworCXJldHVybiBlbnRyeTsKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCitzdGF0aWMgdm9pZCBzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywKKwkJCQkgICBzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyKQoreworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfVFhCVUZGRVIsICJ0eGJ1ZmZlcjogZnJlZWQgMHgleC0weCV4IiwKKwkJICAgICAgIHR4YnVmZmVyLT5zdGFydCwgdHhidWZmZXItPmVuZCk7CisKKwlsaXN0X2RlbCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0KTsKKwlrZnJlZSh0eGJ1ZmZlcik7Cit9CisKKworc3RhdGljIGludCBzdGxjNDV4eF93YWl0X2JpdChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHUxNiByZWcsIHUzMiBtYXNrLAorCQkJICAgICB1MzIgZXhwZWN0ZWQpCit7CisJaW50IGk7CisJY2hhciBidWZmZXJbNF07CisKKwlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7CisJCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIHJlZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmICgoKCoodTMyICopYnVmZmVyKSAmIG1hc2spID09IGV4cGVjdGVkKQorCQkJcmV0dXJuIDE7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisKKwkvKiBGSVhNRTogc2hvdWxkIGRyaXZlciB1c2UgaXQncyBvd24gc3RydWN0IGRldmljZT8gKi8KKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgIjM4MjYuYXJtIiwgJnN0bGMtPnNwaS0+ZGV2KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJyZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGZ3LT5zaXplICUgNCkgeworCQlzdGxjNDV4eF9lcnJvcigiZmlybXdhcmUgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzJiaXQ6ICV6dSIsCisJCQkgICAgICAgZnctPnNpemUpOworCQlyZXR1cm4gLUVJTFNFUTsgLyogSWxsZWdhbCBieXRlIHNlcXVlbmNlICAqLzsKKwl9CisKKwlpZiAoZnctPnNpemUgPCAxMDAwKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBpcyB0b28gc21hbGw6ICV6dSIsIGZ3LT5zaXplKTsKKwkJcmV0dXJuIC1FSUxTRVE7CisJfQorCisJc3RsYy0+ZncgPSBrbWVtZHVwKGZ3LT5kYXRhLCBmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGxjLT5mdykgeworCQlzdGxjNDV4eF9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlybXdhcmUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3RsYy0+ZndfbGVuID0gZnctPnNpemU7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHNfZG1hX3JlZ3MgZG1hX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBmd19sZW4sIGZ3X2FkZHI7CisJbG9uZyBfZndfbGVuOworCWludCByZXQ7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXN0bGMtPmZ3KSB7CisJCXJldCA9IHN0bGM0NXh4X3JlcXVlc3RfZmlybXdhcmUoc3RsYyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBzdG9wIHRoZSBkZXZpY2UgKi8KKwlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCisJCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUCisJCQkgfCBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAorCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERQorCQkJIHwgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCWZ3X2FkZHIgPSBGSVJNV0FSRV9BRERSRVNTOworCWZ3X2xlbiA9IHN0bGMtPmZ3X2xlbjsKKworCXdoaWxlIChmd19sZW4gPiAwKSB7CisJCV9md19sZW4gPSAoZndfbGVuID4gU1BJX01BWF9QQUNLRVRfU0laRSkKKwkJCT8gU1BJX01BWF9QQUNLRVRfU0laRSA6IGZ3X2xlbjsKKwkJZG1hX3JlZ3MuY21kID0gU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRTsKKwkJZG1hX3JlZ3MubGVuID0gY3B1X3RvX2xlMTYoX2Z3X2xlbik7CisJCWRtYV9yZWdzLmFkZHIgPSBjcHVfdG9fbGUzMihmd19hZGRyKTsKKworCQlmd19sZW4gLT0gX2Z3X2xlbjsKKwkJZndfYWRkciArPSBfZndfbGVuOworCisJCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsIGRtYV9yZWdzLmNtZCk7CisKKwkJaWYgKHN0bGM0NXh4X3dhaXRfYml0KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAorCQkJCSAgICAgIEhPU1RfQUxMT1dFRCwgSE9TVF9BTExPV0VEKSA9PSAwKSB7CisJCQlzdGxjNDV4eF9lcnJvcigiZndfdXBsb2FkIG5vdCBhbGxvd2VkIHRvIERNQSB3cml0ZSIpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKworCQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9MRU4sIGRtYV9yZWdzLmxlbik7CisJCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsIGRtYV9yZWdzLmFkZHIpOworCisJCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfREFUQSwgc3RsYy0+ZncsIF9md19sZW4pOworCisJCS8qIEZJWE1FOiBJIHRoaW5rIHRoaXMgZG9lc24ndCB3b3JrIGlmIGZpcm13YXJlIGlzIGxhcmdlLAorCQkgKiB0aGlzIGxvb3AgZ29lcyB0byBzZWNvbmQgcm91bmQuIGZ3LT5kYXRhIGlzIG5vdAorCQkgKiBpbmNyZWFzZWQgYXQgYWxsISAqLworCX0KKworCUJVR19PTihmd19sZW4gIT0gMCk7CisKKwkvKiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICovCisJc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVF9FTiwgU1BJX0hPU1RfSU5UU19ERUZBVUxUKTsKKworCS8qIGJvb3QgdGhlIGRldmljZSAqLworCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKKwkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQKKwkJCSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKKwkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX1JBTV9CT09UKTsKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfY2hlY2tfdHhzZW50KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5LCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbiwgJnN0bGMtPnR4X3NlbnQsIHR4X2xpc3QpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZW50cnktPmxpZmV0aW1lKSkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlzdGxjNDV4eF93YXJuaW5nKCJmcmFtZSAweCV4IGxpZmV0aW1lIGV4Y2VlZGVkIiwKKwkJCQkJCSBlbnRyeS0+c3RhcnQpOworCQkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKKwkJCXNrYl9wdWxsKGVudHJ5LT5za2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKwkJCWllZWU4MDIxMV90eF9zdGF0dXMoc3RsYy0+aHcsIGVudHJ5LT5za2IpOworCQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3Bvd2VyX29mZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKKwlncGlvX3NldF92YWx1ZShzdGxjNDV4eF9ncGlvX3Bvd2VyLCAwKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfcG93ZXJfb24oc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCWdwaW9fc2V0X3ZhbHVlKHN0bGM0NXh4X2dwaW9fcG93ZXIsIDEpOworCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKKworCS8qCisJICogbmVlZCB0byB3YWl0IGEgd2hpbGUgYmVmb3JlIGRldmljZSBjYW4gYmUgYWNjZXNzZWQsIHRoZSBsZW5ndGgKKwkgKiBpcyBqdXN0IGEgZ3Vlc3MKKwkgKi8KKwltc2xlZXAoMTApOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KK3N0YXRpYyB2b2lkIHN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHR4YnVmZmVyICplbnRyeTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpIHsKKwkJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdGxjLT50eF9zZW50LAorCQkJCQkgc3RydWN0IHR4YnVmZmVyLCB0eF9saXN0KTsKKwkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKKwkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKKwkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7CisJfQorCisJV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSkgeworCQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJnN0bGMtPnR4X3BlbmRpbmcsCisJCQkJCSBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOworCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOworCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOworCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKKwl9CisKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhidWZmZXIpKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29ya19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwKKwkJCQkJICAgICB3b3JrX3Jlc2V0KTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRVNFVCkKKwkJZ290byBvdXQ7CisKKwlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7CisKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCS8qIHdhaXQgdGhhdCBhbGwgd29ya19zdHJ1Y3RzIGhhdmUgZmluaXNoZWQsIHdlIGNhbid0IGhvbGQKKwkgKiBzdGxjLT5tdXRleCB0byBhdm9pZCBkZWFkbG9jayAqLworCWNhbmNlbF93b3JrX3N5bmMoJnN0bGMtPndvcmspOworCisJLyogRklYTUU6IGZpbmQgb3V0IGdvb2QgdmFsdWUgdG8gd2FpdCBmb3IgY2hpcCBwb3dlciBkb3duICovCisJbXNsZWVwKDEwMCk7CisKKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIGdyYWNlZnVsbHkgaGFuZGxlIGlmIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZAorCSAqIGFmdGVyIHJlLWFjcXVpcmluZyBtdXRleCAqLworCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVTRVQpOworCisJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKwlzdGxjNDV4eF9mbHVzaF9xdWV1ZXMoc3RsYyk7CisJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRVNFVFRJTkc7CisKKwlzdGxjNDV4eF9wb3dlcl9vbihzdGxjKTsKKwlzdGxjNDV4eF91cGxvYWRfZmlybXdhcmUoc3RsYyk7CisKK291dDoKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfcmVzZXQoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0bGM0NXh4X3dhcm5pbmcoInJlc2V0dGluZyBmaXJtd2FyZSIpOworCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVTRVQ7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKHN0bGMtPmh3KTsKKwlxdWV1ZV93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsICZzdGxjLT53b3JrX3Jlc2V0KTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29ya190eF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LAorCQkJCQkgICAgIHdvcmtfdHhfdGltZW91dC53b3JrKTsKKworCXN0bGM0NXh4X3dhcm5pbmcoInR4IHRpbWVvdXQiKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSkKKwkJZ290byBvdXQ7CisKKwlzdGxjNDV4eF9yZXNldChzdGxjKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9pbnRfYWNrKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTMyIHZhbCkKK3sKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0FDSywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd2FrZXVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGludHM7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwkvKiB3YWtlIHRoZSBjaGlwICovCisJc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19BUk1fSU5URVJSVVBUUywgU1BJX1RBUkdFVF9JTlRfV0FLRVVQKTsKKworCS8qIEFuZCB3YWl0IGZvciB0aGUgUkVBRFkgaW50ZXJydXB0ICovCisJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKKworCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCQlnb3RvIG91dDsKKwkJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCX0KKworCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1JFQURZKTsKKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfc2xlZXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsIFNQSV9UQVJHRVRfSU5UX1NMRUVQKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfaW50X3JlYWR5KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLAorCQkJIFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKTsKKworCXN3aXRjaCAoc3RsYy0+Zndfc3RhdGUpIHsKKwljYXNlIEZXX1NUQVRFX0JPT1RJTkc6CisJCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7CisJCWNvbXBsZXRlKCZzdGxjLT5md19jb21wKTsKKwkJYnJlYWs7CisJY2FzZSBGV19TVEFURV9SRVNFVFRJTkc6CisJCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7CisKKwkJc3RsYzQ1eHhfdHhfc2NhbihzdGxjKTsKKwkJc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7CisJCXN0bGM0NXh4X3R4X2VkY2Yoc3RsYyk7CisKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKHN0bGMtPmh3KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3J4X3R4YWNrKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKKwlzdHJ1Y3Qgc19sbW9fdHggKnR4OworCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7CisJaW50IGZvdW5kID0gMDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7CisJdHggPSAoc3RydWN0IHNfbG1vX3R4ICopIChjb250cm9sICsgMSk7CisKKwlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXN0bGM0NXh4X3dhcm5pbmcoIm5vIGZyYW1lcyB3YWl0aW5nIGZvciAiCisJCQkJCSAiYWNrbm93bGVkZ2VtZW50Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmc3RsYy0+dHhfc2VudCwgdHhfbGlzdCkgeworCQlpZiAoY29udHJvbC0+aGFuZGxlID09IGVudHJ5LT5oYW5kbGUpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJc3RsYzQ1eHhfd2FybmluZygiY291bGRuJ3QgZmluZCBmcmFtZSBmb3IgdHggYWNrIDB4JXgiLAorCQkJCQkgY29udHJvbC0+aGFuZGxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAiVFggQUNLIDB4JXgiLCBlbnRyeS0+aGFuZGxlKTsKKworCWlmIChlbnRyeS0+c3RhdHVzX25lZWRlZCkgeworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKKworCQlpZiAoISh0eC0+ZmxhZ3MgJiBMTV9UWF9GQUlMRUQpKSB7CisJCQkvKiBmcmFtZSB3YXMgYWNrZWQgKi8KKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJCWluZm8tPnN0YXR1cy5hY2tfc2lnbmFsID0gdHgtPnJjcGkgLyAyIC0gMTEwOworCQl9CisKKwkJc2tiX3B1bGwoZW50cnktPnNrYiwgZW50cnktPmhlYWRlcl9sZW4pOworCisJCWllZWU4MDIxMV90eF9zdGF0dXMoc3RsYy0+aHcsIGVudHJ5LT5za2IpOworCX0KKworCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7CisKKwlzdGxjNDV4eF9jaGVja190eHNlbnQoc3RsYyk7CisJaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4X3NlbnQpKQorCQkvKiB0aGVyZSBhcmUgbm8gcGVuZGluZyBmcmFtZXMsIHdlIGNhbiBzdG9wIHRoZSB0eCB0aW1lb3V0CisJCSAqIHRpbWVyICovCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnN0bGMtPndvcmtfdHhfdGltZW91dCk7CisKKwlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7CisKKwlpZiAoc3RsYy0+dHhfcXVldWVfc3RvcHBlZCAmJgorCSAgICBzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0bGMsIE1BWF9GUkFNRV9MRU4pICE9IC0xKSB7CisJCXN0bGM0NXh4X2RlYnVnKERFQlVHX1FVRVVFLCAicm9vbSBpbiB0eCBidWZmZXIsIHdha2luZyBxdWV1ZXMiKTsKKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKHN0bGMtPmh3KTsKKwkJc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfY29udHJvbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKKwlpbnQgcmV0ID0gMDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7CisKKwlzd2l0Y2ggKGNvbnRyb2wtPm9pZCkgeworCWNhc2UgTE1fT0lEX1RYOgorCQlyZXQgPSBzdGxjNDV4eF9yeF90eGFjayhzdGxjLCBza2IpOworCQlicmVhazsKKwljYXNlIExNX09JRF9TRVRVUDoKKwljYXNlIExNX09JRF9TQ0FOOgorCWNhc2UgTE1fT0lEX1RSQVA6CisJY2FzZSBMTV9PSURfRURDRjoKKwljYXNlIExNX09JRF9LRVlDQUNIRToKKwljYXNlIExNX09JRF9QU006CisJY2FzZSBMTV9PSURfU1RBVFM6CisJY2FzZSBMTV9PSURfTEVEOgorCWRlZmF1bHQ6CisJCXN0bGM0NXh4X3dhcm5pbmcoInVuaGFuZGxlZCByeCBjb250cm9sIG9pZCAlZFxuIiwKKwkJCQkgY29udHJvbC0+b2lkKTsKKwkJYnJlYWs7CisJfQorCisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIHJldDsKK30KKworLyogY29waWVkIGZyb20gbWFjODAyMTEgKi8KK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3BhcnNlX2VsZW1zKHU4ICpzdGFydCwgc2l6ZV90IGxlbiwKKwkJCQkgc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqKnRpbSwKKwkJCQkgc2l6ZV90ICp0aW1fbGVuKQoreworCXNpemVfdCBsZWZ0ID0gbGVuOworCXU4ICpwb3MgPSBzdGFydDsKKworCXdoaWxlIChsZWZ0ID49IDIpIHsKKwkJdTggaWQsIGVsZW47CisKKwkJaWQgPSAqcG9zKys7CisJCWVsZW4gPSAqcG9zKys7CisJCWxlZnQgLT0gMjsKKworCQlpZiAoZWxlbiA+IGxlZnQpCisJCQlyZXR1cm47CisKKwkJc3dpdGNoIChpZCkgeworCQljYXNlIFdMQU5fRUlEX1RJTToKKwkJCSp0aW0gPSAoc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqKSBwb3M7CisJCQkqdGltX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJbGVmdCAtPSBlbGVuOworCQlwb3MgKz0gZWxlbjsKKwl9Cit9CisKKy8qCisgKiBtYWM4MDIxMSBkb2Vzbid0IGhhdmUgc3VwcG9ydCBmb3IgYXNraW5nIGZyYW1lcyB3aXRoIFBTLVBvbGwsIHNvIGxldCdzCisgKiBpbXBsZW1lbnQgaW4gdGhlIGRyaXZlciBmb3Igbm93LiBXZSBoYXZlIHRvIGFkZCBzdXBwb3J0IHRvIG1hYzgwMjExCisgKiBsYXRlci4KKyAqLworc3RhdGljIGludCBzdGxjNDV4eF9jaGVja19tb3JlX2RhdGEoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzaXplX3QgbGVuOworCXUxNiBmYzsKKworCWhkciA9ICh2b2lkICopIHNrYi0+ZGF0YSArIHNpemVvZigqZGF0YSk7CisJbGVuID0gc2tiLT5sZW4gLSBzaXplb2YoKmRhdGEpOworCisJLyogbWluaW11bSBmcmFtZSBsZW5ndGggaXMgdGhlIG51bGwgZnJhbWUgbGVuZ3RoIDI0IGJ5dGVzICovCisJaWYgKGxlbiA8IDI0KSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImludmFsaWQgZnJhbWUgbGVuZ3RoIHdoZW4gY2hlY2tpbmcgZm9yICIKKwkJCQkgIm1vcmUgZGF0YSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKQorCQkvKiB0aGlzIGlzIG5vdCBmcm9tIERTICovCisJCXJldHVybiAwOworCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihoZHItPmFkZHIxLCBzdGxjLT5tYWNfYWRkcikgIT0gMCkKKwkJLyogdGhlIGZyYW1lIHdhcyBub3QgZm9yIHVzICovCisJCXJldHVybiAwOworCisJaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSkpIHsKKwkJLyogQVAgaGFzIG5vIG1vcmUgZnJhbWVzIGJ1ZmZlcmVkIGZvciB1cyAqLworCQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJhbGwgYnVmZmVyZWQgZnJhbWVzIHJldHJpZXZlZCIpOworCQlzdGxjLT5wc3BvbGxpbmcgPSBmYWxzZTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTU9SRURBVEEgYml0IGlzIHNldCwgbGV0J3MgYXNrIGZvciBhIG5ldyBmcmFtZSBmcm9tIHRoZSBBUCAqLworCXN0bGM0NXh4X3R4X3BzcG9sbChzdGxjLCBzdGxjLT5wc20pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBtYWM4MDIxMSBjYW5ub3QgcmVhZCBUSU0gZnJvbSBiZWFjb25zLCBzbyBsZXQncyBhZGQgYSBoYWNrIHRvIHRoZQorICogZHJpdmVyLiBXZSBoYXZlIHRvIGFkZCBzdXBwb3J0IHRvIG1hYzgwMjExIGxhdGVyLgorICovCitzdGF0aWMgaW50IHN0bGM0NXh4X3J4X2RhdGFfYmVhY29uKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc19sbV9kYXRhX2luICpkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfaW4gKikgc2tiLT5kYXRhOworCXNpemVfdCBsZW4gPSBza2ItPmxlbiwgdGltX2xlbiA9IDAsIGJhc2VsZW4sIHB2Ym1hcF9sZW47CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBzdGxjNDV4eF9pZV90aW0gKnRpbSA9IE5VTEw7CisJaW50IGJtYXBfb2Zmc2V0LCBpbmRleCwgYWlkX2JpdDsKKworCW1nbXQgPSAodm9pZCAqKSBza2ItPmRhdGEgKyBzaXplb2YoKmRhdGEpOworCisJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtICh1OCAqKSBtZ210OworCWlmIChiYXNlbGVuID4gbGVuKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImludmFsaWQgYmFzZWxlbiBpbiBiZWFjb24iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RsYzQ1eHhfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sICZ0aW0sCisJCQkgICAgICZ0aW1fbGVuKTsKKworCWlmICghdGltKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImRpZG4ndCBmaW5kIHRpbSBmcm9tIGEgYmVhY29uIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJtYXBfb2Zmc2V0ID0gdGltLT5ibWFwX2NvbnRyb2wgJiAweGZlOworCWluZGV4ID0gc3RsYy0+YWlkIC8gOCAtIGJtYXBfb2Zmc2V0OworCisJcHZibWFwX2xlbiA9IHRpbV9sZW4gLSAzOworCWlmIChpbmRleCA+IHB2Ym1hcF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJYWlkX2JpdCA9ICEhKHRpbS0+cHZibWFwW2luZGV4XSAmICgxIDw8IHN0bGMtPmFpZCAlIDgpKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgImZjIDB4JXggZHVyYXRpb24gJWQgc2VxICVkIGR0aW0gJXUgIgorCQkgICAgICAgImJtYXBfY29udHJvbCAweCV4IGFpZF9iaXQgJWQiLAorCQkgICAgICAgbWdtdC0+ZnJhbWVfY29udHJvbCwgbWdtdC0+ZHVyYXRpb24sIG1nbXQtPnNlcV9jdHJsID4+IDQsCisJCSAgICAgICB0aW0tPmR0aW1fY291bnQsIHRpbS0+Ym1hcF9jb250cm9sLCBhaWRfYml0KTsKKworCWlmICghYWlkX2JpdCkKKwkJcmV0dXJuIDA7CisKKwlzdGxjLT5wc3BvbGxpbmcgPSB0cnVlOworCXN0bGM0NXh4X3R4X3BzcG9sbChzdGxjLCBzdGxjLT5wc20pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfZGF0YShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7CisJaW50IGFsaWduID0gMDsKKwl1OCAqcCwgYWxpZ25fbGVuOworCXUxNiBsZW47CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoc3RsYy0+cHNtKSB7CisJCWlmIChkYXRhLT5mbGFncyAmIExNX0lOX0JFQUNPTikKKwkJCXN0bGM0NXh4X3J4X2RhdGFfYmVhY29uKHN0bGMsIHNrYik7CisJCWVsc2UgaWYgKHN0bGMtPnBzcG9sbGluZyAmJiAoZGF0YS0+ZmxhZ3MgJiBMTV9JTl9EQVRBKSkKKwkJCXN0bGM0NXh4X2NoZWNrX21vcmVfZGF0YShzdGxjLCBza2IpOworCX0KKworCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisKKwlzdGF0dXMuZnJlcSA9IGRhdGEtPmZyZXF1ZW5jeTsKKwlzdGF0dXMuc2lnbmFsID0gZGF0YS0+cmNwaSAvIDIgLSAxMTA7CisKKwkvKiBsZXQncyBhc3N1bWUgdGhhdCBtYXhpbXVtIHJjcGkgdmFsdWUgaXMgMTQwICg9IDM1IGRCbSkgKi8KKwlzdGF0dXMucXVhbCA9IGRhdGEtPnJjcGkgKiAxMDAgLyAxNDA7CisKKwlzdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisKKwkvKgorCSAqIEZJWE1FOiB0aGlzIGdpdmVzIHdhcm5pbmcgZnJvbSBfX2llZWU4MDIxMV9yeCgpCisJICoKKwkgKiBzdGF0dXMucmF0ZV9pZHggPSBkYXRhLT5yYXRlOworCSAqLworCisJbGVuID0gZGF0YS0+bGVuZ3RoOworCisJaWYgKGRhdGEtPmZsYWdzICYgTE1fRkxBR19BTElHTikKKwkJYWxpZ24gPSAxOworCisJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmRhdGEpKTsKKworCWlmIChhbGlnbikgeworCQlwID0gc2tiLT5kYXRhOworCQlhbGlnbl9sZW4gPSAqcDsKKwkJc2tiX3B1bGwoc2tiLCBhbGlnbl9sZW4pOworCX0KKworCXNrYl90cmltKHNrYiwgbGVuKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1JYLCAicnggZGF0YSAweCVwICVkIEIiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlzdGxjNDV4eF9kdW1wKERFQlVHX1JYX0NPTlRFTlQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJaWVlZTgwMjExX3J4KHN0bGMtPmh3LCBza2IsICZzdGF0dXMpOworCisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IHN0bGM0NXh4X3J4KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldDsKKwl1MTYgbGVuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc3RsYzQ1eHhfd2FrZXVwKHN0bGMpOworCisJLyogZHVtbXkgcmVhZCB0byBmbHVzaCBTUEkgRE1BIGNvbnRyb2xsZXIgYnVnICovCisJc3RsYzQ1eHhfcmVhZDE2KHN0bGMsIFNQSV9BRFJTX0dFTl9QVVJQXzEpOworCisJbGVuID0gc3RsYzQ1eHhfcmVhZDE2KHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBKTsKKworCWlmIChsZW4gPT0gMCkgeworCQlzdGxjNDV4eF93YXJuaW5nKCJyeCByZXF1ZXN0IG9mIHplcm8gYnl0ZXMiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOworCWlmICghc2tiKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImNvdWxkIG5vdCBhbGxvYyBza2IiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIHNrYl9wdXQoc2tiLCBsZW4pLCBsZW4pOworCisJc3RsYzQ1eHhfc2xlZXAoc3RsYyk7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19SWCwgInJ4IGZyYW1lIDB4JXAgJWQgQiIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCXN0bGM0NXh4X2R1bXAoREVCVUdfUlhfQ09OVEVOVCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwljb250cm9sID0gKHN0cnVjdCBzX2xtX2NvbnRyb2wgKikgc2tiLT5kYXRhOworCisJaWYgKGNvbnRyb2wtPmZsYWdzICYgTE1fRkxBR19DT05UUk9MKQorCQlyZXQgPSBzdGxjNDV4eF9yeF9jb250cm9sKHN0bGMsIHNrYik7CisJZWxzZQorCQlyZXQgPSBzdGxjNDV4eF9yeF9kYXRhKHN0bGMsIHNrYik7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdGxjNDV4eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY29uZmlnKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb25maWc7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19JUlEsICJJUlEiKTsKKworCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3R4X2ZyYW1lKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTMyIGFkZHJlc3MsCisJCQkgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc19kbWFfcmVncyBkbWFfcmVnczsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisJdTMyIGludHM7CisKKwlzdGxjLT50eF9mcmFtZXMrKzsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZnJhbWUgMHglcCAlenUgQiIsIGJ1ZiwgbGVuKTsKKwlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIGJ1ZiwgbGVuKTsKKworCXN0bGM0NXh4X3dha2V1cChzdGxjKTsKKworCWRtYV9yZWdzLmNtZCAgPSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFOworCWRtYV9yZWdzLmxlbiAgPSBjcHVfdG9fbGUxNihsZW4pOworCWRtYV9yZWdzLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyZXNzKTsKKworCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgJmRtYV9yZWdzLAorCQkJICAgc2l6ZW9mKGRtYV9yZWdzKSk7CisKKwlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIGJ1ZiwgbGVuKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgMiAqIEhaOworCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1dSX1JFQURZKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJc3RsYzQ1eHhfd2FybmluZygiV1JfUkVBRFkgdGltZW91dCIpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJfQorCisJc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfV1JfUkVBRFkpOworCisJc3RsYzQ1eHhfc2xlZXAoc3RsYyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3dxX3R4KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfcGVuZGluZykpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KHN0bGMtPnR4X3BlbmRpbmcubmV4dCwKKwkJCQkgICBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOworCisJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT50eF9saXN0KTsKKworCQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwkJcmV0ID0gc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgZW50cnktPmZyYW1lX3N0YXJ0LAorCQkJCQllbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4pOworCisJCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCS8qIGZyYW1lIHRyYW5zZmVyIHRvIGZpcm13YXJlIGJ1ZmZlciBmYWlsZWQgKi8KKwkJCS8qIEZJWE1FOiByZXBvcnQgdGhpcyB0byBtYWM4MDIxMSAqLworCQkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKKwkJCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJnN0bGMtPndvcmtfdHhfdGltZW91dCwKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKFRYX1RJTUVPVVQpKTsKKwl9CisKK291dDoKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwgd29yayk7CisJdTMyIGludHM7CisJaW50IHJldDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCWlmIChzdGxjLT5md19zdGF0ZSA9PSBGV19TVEFURV9PRkYgJiYKKwkgICAgc3RsYy0+Zndfc3RhdGUgPT0gRldfU1RBVEVfUkVTRVQpCisJCWdvdG8gb3V0OworCisJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0JILCAiYmVnaW4gaG9zdF9pbnRzIDB4JTA4eCIsIGludHMpOworCisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpIHsKKwkJc3RsYzQ1eHhfaW50X3JlYWR5KHN0bGMpOworCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9SRUFEWSk7CisJfQorCisJaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQorCQlnb3RvIG91dDsKKworCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1VQREFURSkgeworCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9VUERBVEUpOworCQlyZXQgPSBzdGxjNDV4eF9yeChzdGxjKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKSB7CisJCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1NXX1VQREFURSk7CisJCXJldCA9IHN0bGM0NXh4X3J4KHN0bGMpOworCQlpZiAocmV0IDwgMCkgeworCQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldCA9IHN0bGM0NXh4X3dxX3R4KHN0bGMpOworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOworCQlnb3RvIG91dDsKKwl9CisKKwlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfQkgsICJlbmQgaG9zdF9pbnRzIDB4JTA4eCIsIGludHMpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X2VkY2Yoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7CisJc3RydWN0IHNfbG1vX2VkY2YgKmVkY2Y7CisJc2l6ZV90IGxlbiwgZWRjZl9sZW47CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwllZGNmX2xlbiA9IHNpemVvZigqZWRjZik7CisJbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIGVkY2ZfbGVuOworCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJZWRjZiA9IChzdHJ1Y3Qgc19sbW9fZWRjZiAqKSAoY29udHJvbCArIDEpOworCisJY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOworCWNvbnRyb2wtPmxlbmd0aCA9IGVkY2ZfbGVuOworCWNvbnRyb2wtPm9pZCA9IExNX09JRF9FRENGOworCisJZWRjZi0+c2xvdHRpbWUgPSAweDE0OworCWVkY2YtPnNpZnMgPSAxMDsKKwllZGNmLT5lb2ZwYWQgPSA2OworCWVkY2YtPm1heGJ1cnN0ID0gMTUwMDsKKworCWVkY2YtPnF1ZXVlc1swXS5haWZzID0gMjsKKwllZGNmLT5xdWV1ZXNbMF0ucGFkMCA9IDE7CisJZWRjZi0+cXVldWVzWzBdLmN3bWluID0gMzsKKwllZGNmLT5xdWV1ZXNbMF0uY3dtYXggPSA3OworCWVkY2YtPnF1ZXVlc1swXS50eG9wID0gNDc7CisJZWRjZi0+cXVldWVzWzFdLmFpZnMgPSAyOworCWVkY2YtPnF1ZXVlc1sxXS5wYWQwID0gMDsKKwllZGNmLT5xdWV1ZXNbMV0uY3dtaW4gPSA3OworCWVkY2YtPnF1ZXVlc1sxXS5jd21heCA9IDE1OworCWVkY2YtPnF1ZXVlc1sxXS50eG9wID0gOTQ7CisJZWRjZi0+cXVldWVzWzJdLmFpZnMgPSAzOworCWVkY2YtPnF1ZXVlc1syXS5wYWQwID0gMDsKKwllZGNmLT5xdWV1ZXNbMl0uY3dtaW4gPSAxNTsKKwllZGNmLT5xdWV1ZXNbMl0uY3dtYXggPSAxMDIzOworCWVkY2YtPnF1ZXVlc1syXS50eG9wID0gMDsKKwllZGNmLT5xdWV1ZXNbM10uYWlmcyA9IDc7CisJZWRjZi0+cXVldWVzWzNdLnBhZDAgPSAwOworCWVkY2YtPnF1ZXVlc1szXS5jd21pbiA9IDE1OworCWVkY2YtPnF1ZXVlc1szXS5jd21heCA9IDEwMjM7CisJZWRjZi0+cXVldWVzWzNdLnR4b3AgPSAwOworCWVkY2YtPnF1ZXVlc1s0XS5haWZzID0gMTM7CisJZWRjZi0+cXVldWVzWzRdLnBhZDAgPSA5OTsKKwllZGNmLT5xdWV1ZXNbNF0uY3dtaW4gPSAzNDM3OworCWVkY2YtPnF1ZXVlc1s0XS5jd21heCA9IDUxMjsKKwllZGNmLT5xdWV1ZXNbNF0udHhvcCA9IDEyOworCWVkY2YtPnF1ZXVlc1s1XS5haWZzID0gMTQyOworCWVkY2YtPnF1ZXVlc1s1XS5wYWQwID0gMTA5OworCWVkY2YtPnF1ZXVlc1s1XS5jd21pbiA9IDg3NTY7CisJZWRjZi0+cXVldWVzWzVdLmN3bWF4ID0gNjsKKwllZGNmLT5xdWV1ZXNbNV0udHhvcCA9IDA7CisJZWRjZi0+cXVldWVzWzZdLmFpZnMgPSA0OworCWVkY2YtPnF1ZXVlc1s2XS5wYWQwID0gMDsKKwllZGNmLT5xdWV1ZXNbNl0uY3dtaW4gPSAwOworCWVkY2YtPnF1ZXVlc1s2XS5jd21heCA9IDU4NzA1OworCWVkY2YtPnF1ZXVlc1s2XS50eG9wID0gMjU3MTY7CisJZWRjZi0+cXVldWVzWzddLmFpZnMgPSAwOworCWVkY2YtPnF1ZXVlc1s3XS5wYWQwID0gMDsKKwllZGNmLT5xdWV1ZXNbN10uY3dtaW4gPSAwOworCWVkY2YtPnF1ZXVlc1s3XS5jd21heCA9IDA7CisJZWRjZi0+cXVldWVzWzddLnR4b3AgPSAwOworCisJc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOworCisJa2ZyZWUoY29udHJvbCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NldHVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOworCXN0cnVjdCBzX2xtb19zZXR1cCAqc2V0dXA7CisJc2l6ZV90IGxlbiwgc2V0dXBfbGVuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc2V0dXBfbGVuID0gc2l6ZW9mKCpzZXR1cCk7CisJbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIHNldHVwX2xlbjsKKwljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCXNldHVwID0gKHN0cnVjdCBzX2xtb19zZXR1cCAqKSAoY29udHJvbCArIDEpOworCisJY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOworCWNvbnRyb2wtPmxlbmd0aCA9IHNldHVwX2xlbjsKKwljb250cm9sLT5vaWQgPSBMTV9PSURfU0VUVVA7CisKKwlzZXR1cC0+ZmxhZ3MgPSBMTV9TRVRVUF9JTkZSQTsKKwlzZXR1cC0+YW50ZW5uYSA9IDI7CisJc2V0dXAtPnJ4X2FsaWduID0gMDsKKwlzZXR1cC0+cnhfYnVmZmVyID0gRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQ7CisJc2V0dXAtPnJ4X210dSA9IEZJUk1XQVJFX01UVTsKKwlzZXR1cC0+ZnJvbnRlbmQgPSA1OworCXNldHVwLT50aW1lb3V0ID0gMDsKKwlzZXR1cC0+dHJ1bmNhdGUgPSA0ODg5NjsKKwlzZXR1cC0+YnJhdGVtYXNrID0gMHhmZmZmZmZmZjsKKwlzZXR1cC0+cmVmX2Nsb2NrID0gNjQ0MjQ1MDk0OworCXNldHVwLT5scGZfYmFuZHdpZHRoID0gNjU1MzU7CisJc2V0dXAtPm9zY19zdGFydF9kZWxheSA9IDY1NTM1OworCisJbWVtY3B5KHNldHVwLT5tYWNhZGRyLCBzdGxjLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShzZXR1cC0+YnNzaWQsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7CisKKwlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7CisKKwlrZnJlZShjb250cm9sKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2NhbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKKwlzdHJ1Y3Qgc19sbW9fc2NhbiAqc2NhbjsKKwlzaXplX3QgbGVuLCBzY2FuX2xlbjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXNjYW5fbGVuID0gc2l6ZW9mKCpzY2FuKTsKKwlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgc2Nhbl9sZW47CisJY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlzY2FuID0gKHN0cnVjdCBzX2xtb19zY2FuICopIChjb250cm9sICsgMSk7CisKKwljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7CisJY29udHJvbC0+bGVuZ3RoID0gc2Nhbl9sZW47CisJY29udHJvbC0+b2lkID0gTE1fT0lEX1NDQU47CisKKwlzY2FuLT5mbGFncyA9IExNX1NDQU5fRVhJVDsKKwlzY2FuLT5icmF0ZW1hc2sgPSAweDE1ZjsKKwlzY2FuLT5hbG9mdFswXSA9IDM7CisJc2Nhbi0+YWxvZnRbMV0gPSAzOworCXNjYW4tPmFsb2Z0WzJdID0gMTsKKwlzY2FuLT5hbG9mdFszXSA9IDA7CisJc2Nhbi0+YWxvZnRbNF0gPSAwOworCXNjYW4tPmFsb2Z0WzVdID0gMDsKKwlzY2FuLT5hbG9mdFs2XSA9IDA7CisJc2Nhbi0+YWxvZnRbN10gPSAwOworCisJbWVtY3B5KCZzY2FuLT5yc3NpY2FsLCAmc3RsYy0+Y2FsX3Jzc2lbKHN0bGMtPmNoYW5uZWwgLSAxKSAqCisJCQkJCSAgICAgICBSU1NJX0NBTF9MRU5dLAorCSAgICAgICBSU1NJX0NBTF9MRU4pOworCW1lbWNweSgmc2Nhbi0+Y2hhbm5lbCwgJnN0bGMtPmNhbF9jaGFubmVsc1soc3RsYy0+Y2hhbm5lbCAtIDEpICoKKwkJCQkJCSAgIENIQU5ORUxfQ0FMX0xFTl0sCisJICAgICAgIENIQU5ORUxfQ0FMX0xFTik7CisKKwlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7CisKKwlrZnJlZShjb250cm9sKTsKK30KKworLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgKKyAqLworc3RhdGljIGludCBzdGxjNDV4eF90eF9wc3BvbGwoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHNwb2xsOworCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKKwlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCXN0cnVjdCBza19idWZmICpza2I7CisJY2hhciAqcGF5bG9hZDsKKwl1MTYgZmM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArIDE2KTsKKwlpZiAoIXNrYikgeworCQlzdGxjNDV4eF93YXJuaW5nKCJmYWlsZWQgdG8gYWxsb2NhdGUgcHNwb2xsIGZyYW1lIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDE2KTsKKwltZW1zZXQocHNwb2xsLCAwLCAxNik7CisJZmMgPSBJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTDsKKwlpZiAocG93ZXJzYXZlKQorCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKKwlwc3BvbGwtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CisJcHNwb2xsLT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KHN0bGMtPmFpZCk7CisKKwkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KKwlwc3BvbGwtPmR1cmF0aW9uX2lkIHw9IGNwdV90b19sZTE2KDEgPDwgMTUpIHwgY3B1X3RvX2xlMTYoMSA8PCAxNCk7CisKKwltZW1jcHkocHNwb2xsLT5hZGRyMSwgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkocHNwb2xsLT5hZGRyMiwgc3RsYy0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgUFMtUG9sbCBmcmFtZSB0byAlcyAocG93ZXJzYXZlICVkLCAiCisJCSAgICAgICAiZmMgMHgleCwgYWlkICVkKSIsIHByaW50X21hYyhtYWMsIHBzcG9sbC0+YWRkcjEpLAorCQkgICAgICAgcG93ZXJzYXZlLCBmYywgc3RsYy0+YWlkKTsKKworCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCWlmICghZW50cnkpIHsKKwkJLyoKKwkJICogVGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCisJCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCisJCSAqIHNwYWNlLgorCQkgKgorCQkgKiBCdXQgSSdtIHRvbyBsYXp5IGFuZCBvbWl0IGl0IGZvciBub3cuCisJCSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgdHggYnVmZmVyIGZ1bGwgaXMgZnVsbCAiCisJCQkJCSAiZm9yIG51bGwgZnJhbWUiKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJcGF5bG9hZCA9IHNrYi0+ZGF0YTsKKwlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOworCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOworCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7CisKKwllbnRyeS0+c2tiID0gc2tiOworCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gZmFsc2U7CisJZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKKwllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgorCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAorCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCisJCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7CisJc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7CisKKwlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOworCisJbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKworCWlmIChwYWRkaW5nKQorCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047CisKKwlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKKwlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKKwlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOworCWRhdGEtPmFpZCA9IDE7CisJZGF0YS0+cnRzX3JldHJpZXMgPSA3OworCWRhdGEtPnJldHJpZXMgPSA3OworCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOworCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OworCWRhdGEtPmtleXR5cGUgPSAwOworCWRhdGEtPmtleWxlbiA9IDA7CisJZGF0YS0+cXVldWUgPSBMTV9RVUVVRV9EQVRBMzsKKwlkYXRhLT5iYWNrbG9nID0gMzI7CisJZGF0YS0+YW50ZW5uYSA9IDI7CisJZGF0YS0+Y3RzID0gMzsKKwlkYXRhLT5wb3dlciA9IDEyNzsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWRhdGEtPmFsb2Z0W2ldID0gMDsKKworCS8qCisJICogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyCisJICoKKwkgKiBGSVhNRTogaWdub3JlZCBmb3Igbm93CisJICovCisKKwlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+c3RhcnQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJbGlzdF9hZGQoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfc2VudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgKKyAqCisgKiBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBtYWM4MDIxMS9pZWVlODAyMTFfc2VuZF9udWxsZnVuYworICovCitzdGF0aWMgaW50IHN0bGM0NXh4X3R4X251bGxmdW5jKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOworCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKKwlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCXN0cnVjdCBza19idWZmICpza2I7CisJY2hhciAqcGF5bG9hZDsKKwl1MTYgZmM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKKwlpZiAoIXNrYikgeworCQlzdGxjNDV4eF93YXJuaW5nKCJmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBudWxsIGZyYW1lXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG51bGxmdW5jLCAwLCAyNCk7CisJZmMgPSBJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8CisJICAgICBJRUVFODAyMTFfRkNUTF9UT0RTOworCisJaWYgKHBvd2Vyc2F2ZSkKKwkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUE07CisKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHN0bGMtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgTnVsbCBmcmFtZSB0byAlcyAocG93ZXJzYXZlICVkLCAiCisJCSAgICAgICAiZmMgMHgleCkiLAorCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbnVsbGZ1bmMtPmFkZHIxKSwgcG93ZXJzYXZlLCBmYyk7CisKKwlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJZW50cnkgPSBzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdGxjLCBza2ItPmxlbik7CisKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwlpZiAoIWVudHJ5KSB7CisJCS8qCisJCSAqIFRoZSBxdWV1ZSBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIGZpcm13YXJlIGJ1ZmZlcgorCQkgKiBpcyBmdWxsLCBzbyBmaXJtd2FyZSBidWZmZXIgc2hvdWxkIGFsd2F5cyBoYXZlIGVub3VnaAorCQkgKiBzcGFjZS4KKwkJICoKKwkJICogQnV0IEknbSB0b28gbGF6eSBhbmQgb21pdCBpdCBmb3Igbm93LgorCQkgKi8KKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXN0bGM0NXh4X3dhcm5pbmcoImZpcm13YXJlIHR4IGJ1ZmZlciBmdWxsIGlzIGZ1bGwgIgorCQkJCQkgImZvciBudWxsIGZyYW1lIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCXBheWxvYWQgPSBza2ItPmRhdGE7CisJcGF5bG9hZF9sZW4gPSBza2ItPmxlbjsKKwlwYWRkaW5nID0gKGludCkgKHNrYi0+ZGF0YSAtIHNpemVvZigqZGF0YSkpICYgMzsKKwllbnRyeS0+aGVhZGVyX2xlbiA9IHNpemVvZigqZGF0YSkgKyBwYWRkaW5nOworCisJZW50cnktPnNrYiA9IHNrYjsKKwllbnRyeS0+c3RhdHVzX25lZWRlZCA9IGZhbHNlOworCWVudHJ5LT5oYW5kbGUgPSAodTMyKSBza2I7CisJZW50cnktPmxpZmV0aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVFhfRlJBTUVfTElGRVRJTUUpOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBkYXRhIDB4JXggKDB4JXAgcGF5bG9hZCAlZCBCICIKKwkJICAgICAgICJwYWRkaW5nICVkIGhlYWRlcl9sZW4gJWQpIiwKKwkJICAgICAgIGVudHJ5LT5oYW5kbGUsIHBheWxvYWQsIHBheWxvYWRfbGVuLCBwYWRkaW5nLAorCQkgICAgICAgZW50cnktPmhlYWRlcl9sZW4pOworCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOworCisJZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX291dCAqKSBza2JfcHVzaChza2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKworCW1lbXNldChkYXRhLCAwLCBlbnRyeS0+aGVhZGVyX2xlbik7CisKKwlpZiAocGFkZGluZykKKwkJZGF0YS0+ZmxhZ3MgPSBMTV9GTEFHX0FMSUdOOworCisJZGF0YS0+ZmxhZ3MgPSBMTV9PVVRfQlVSU1Q7CisJZGF0YS0+bGVuZ3RoID0gcGF5bG9hZF9sZW47CisJZGF0YS0+aGFuZGxlID0gZW50cnktPmhhbmRsZTsKKwlkYXRhLT5haWQgPSAxOworCWRhdGEtPnJ0c19yZXRyaWVzID0gNzsKKwlkYXRhLT5yZXRyaWVzID0gNzsKKwlkYXRhLT5hbG9mdF9jdHJsID0gMDsKKwlkYXRhLT5jcnlwdF9vZmZzZXQgPSA1ODsKKwlkYXRhLT5rZXl0eXBlID0gMDsKKwlkYXRhLT5rZXlsZW4gPSAwOworCWRhdGEtPnF1ZXVlID0gTE1fUVVFVUVfREFUQTM7CisJZGF0YS0+YmFja2xvZyA9IDMyOworCWRhdGEtPmFudGVubmEgPSAyOworCWRhdGEtPmN0cyA9IDM7CisJZGF0YS0+cG93ZXIgPSAxMjc7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlkYXRhLT5hbG9mdFtpXSA9IDA7CisKKwkvKgorCSAqIGNoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIHNwYWNlIGluIHR4IGJ1ZmZlcgorCSAqCisJICogRklYTUU6IGlnbm9yZWQgZm9yIG5vdworCSAqLworCisJc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgZW50cnktPnN0YXJ0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCWxpc3RfYWRkKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3NlbnQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXggKi8KK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3BzbShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7CisJc3RydWN0IHNfbG1vX3BzbSAqcHNtOworCXNpemVfdCBsZW4sIHBzbV9sZW47CisKKwlXQVJOX09OKCFzdGxjLT5hc3NvY2lhdGVkKTsKKwlXQVJOX09OKHN0bGMtPmFpZCA8IDEpOworCVdBUk5fT04oc3RsYy0+YWlkID4gMjAwNyk7CisKKwlwc21fbGVuID0gc2l6ZW9mKCpwc20pOworCWxlbiA9IHNpemVvZigqY29udHJvbCkgKyBwc21fbGVuOworCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJcHNtID0gKHN0cnVjdCBzX2xtb19wc20gKikgKGNvbnRyb2wgKyAxKTsKKworCWNvbnRyb2wtPmZsYWdzID0gTE1fRkxBR19DT05UUk9MIHwgTE1fQ1RSTF9PUFNFVDsKKwljb250cm9sLT5sZW5ndGggPSBwc21fbGVuOworCWNvbnRyb2wtPm9pZCA9IExNX09JRF9QU007CisKKwlpZiAoZW5hYmxlKQorCQlwc20tPmZsYWdzIHw9IExNX1BTTTsKKworCXBzbS0+YWlkID0gc3RsYy0+YWlkOworCisJcHNtLT5iZWFjb25fcmNwaV9za2lwX21heCA9IDYwOworCisJcHNtLT5pbnRlcnZhbHNbMF0uaW50ZXJ2YWwgPSAxOworCXBzbS0+aW50ZXJ2YWxzWzBdLnBlcmlvZHMgPSAxOworCXBzbS0+aW50ZXJ2YWxzWzFdLmludGVydmFsID0gMTsKKwlwc20tPmludGVydmFsc1sxXS5wZXJpb2RzID0gMTsKKwlwc20tPmludGVydmFsc1syXS5pbnRlcnZhbCA9IDE7CisJcHNtLT5pbnRlcnZhbHNbMl0ucGVyaW9kcyA9IDE7CisJcHNtLT5pbnRlcnZhbHNbM10uaW50ZXJ2YWwgPSAxOworCXBzbS0+aW50ZXJ2YWxzWzNdLnBlcmlvZHMgPSAxOworCisJcHNtLT5uciA9IDA7CisJcHNtLT5leGNsdWRlWzBdID0gMDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgTE1fT0lEX1BTTSAoYWlkICVkLCBpbnRlcnZhbCAlZCkiLAorCQkgICAgICAgcHNtLT5haWQsIHBzbS0+aW50ZXJ2YWxzWzBdLmludGVydmFsKTsKKworCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKKworCWtmcmVlKGNvbnRyb2wpOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CisJaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOworCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOworCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7CisJY2hhciAqcGF5bG9hZDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKKwlpZiAoIWVudHJ5KSB7CisJCS8qIHRoZSBxdWV1ZSBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIGZpcm13YXJlIGJ1ZmZlcgorCQkgKiBpcyBmdWxsLCBzbyBmaXJtd2FyZSBidWZmZXIgc2hvdWxkIGFsd2F5cyBoYXZlIGVub3VnaAorCQkgKiBzcGFjZSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgYnVmZmVyIGZ1bGwiKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCXBheWxvYWQgPSBza2ItPmRhdGE7CisJcGF5bG9hZF9sZW4gPSBza2ItPmxlbjsKKwlwYWRkaW5nID0gKGludCkgKHNrYi0+ZGF0YSAtIHNpemVvZigqZGF0YSkpICYgMzsKKwllbnRyeS0+aGVhZGVyX2xlbiA9IHNpemVvZigqZGF0YSkgKyBwYWRkaW5nOworCisJZW50cnktPnNrYiA9IHNrYjsKKwllbnRyeS0+c3RhdHVzX25lZWRlZCA9IHRydWU7CisJZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKKwllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgorCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAorCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCisJCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7CisJc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7CisKKwlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOworCisJbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKworCWlmIChwYWRkaW5nKQorCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047CisKKwlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKKwlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKKwlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOworCWRhdGEtPmFpZCA9IDE7CisJZGF0YS0+cnRzX3JldHJpZXMgPSA3OworCWRhdGEtPnJldHJpZXMgPSA3OworCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOworCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OworCWRhdGEtPmtleXR5cGUgPSAwOworCWRhdGEtPmtleWxlbiA9IDA7CisJZGF0YS0+cXVldWUgPSAyOworCWRhdGEtPmJhY2tsb2cgPSAzMjsKKwlkYXRhLT5hbnRlbm5hID0gMjsKKwlkYXRhLT5jdHMgPSAzOworCWRhdGEtPnBvd2VyID0gMTI3OworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlyYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHN0bGMtPmh3LCBpbmZvKTsKKwkJZGF0YS0+YWxvZnRbaV0gPSByYXRlLT5od192YWx1ZTsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3BlbmRpbmcpOworCisJLyogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyICovCisJaWYgKHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgTUFYX0ZSQU1FX0xFTikgPT0gLTEpIHsKKwkJc3RsYzQ1eHhfZGVidWcoREVCVUdfUVVFVUUsICJ0eCBidWZmZXIgZnVsbCwgc3RvcHBpbmcgcXVldWVzIik7CisJCXN0bGMtPnR4X3F1ZXVlX3N0b3BwZWQgPSAxOworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc3RsYy0+aHcpOworCX0KKworCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmspOworCisJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX0JPT1RJTkc7CisJc3RsYy0+Y2hhbm5lbCA9IDE7CisKKwlzdGxjNDV4eF9wb3dlcl9vbihzdGxjKTsKKworCXJldCA9IHN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdGxjKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlzdGxjLT50eF9xdWV1ZV9zdG9wcGVkID0gMDsKKworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworCisJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7CisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZzdGxjLT5md19jb21wLAorCQkJCQkJCSAgICB0aW1lb3V0KTsKKwlpZiAoIXRpbWVvdXQpIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZpcm13YXJlIGJvb3QgZmFpbGVkIik7CisJCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0JPT1QsICJmaXJtd2FyZSBib290ZWQiKTsKKworCS8qIEZJWE1FOiBzaG91bGQgd2UgdGFrZSBtdXRleCBqdXN0IGFmdGVyIHdhaXRfZm9yX2NvbXBsZXRpb24oKT8gKi8KKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlXQVJOX09OKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlXQVJOX09OKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKTsKKworCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKKworCS8qIEZJWE1FOiBtYWtlIHN1cmUgdGhhdCBhbGwgd29ya19zdHJ1Y3RzIGhhdmUgY29tcGxldGVkICovCisKKwlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCXN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdGxjKTsKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX09GRjsKKworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCW1lbWNweShzdGxjLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X29wX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCW1lbWNweShzdGxjLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwlzdGxjNDV4eF90eF9zZXR1cChzdGxjKTsKKworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCXN0bGMtPmNoYW5uZWwgPSBody0+Y29uZi5jaGFubmVsLT5od192YWx1ZTsKKwlzdGxjNDV4eF90eF9zY2FuKHN0bGMpOworCXN0bGM0NXh4X3R4X3NldHVwKHN0bGMpOworCXN0bGM0NXh4X3R4X2VkY2Yoc3RsYyk7CisKKwlpZiAoKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICE9IHN0bGMtPnBzbSkgeworCQlzdGxjLT5wc20gPSBody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTOworCQlpZiAoc3RsYy0+YXNzb2NpYXRlZCkgeworCQkJc3RsYzQ1eHhfdHhfcHNtKHN0bGMsIHN0bGMtPnBzbSk7CisJCQlzdGxjNDV4eF90eF9udWxsZnVuYyhzdGxjLCBzdGxjLT5wc20pOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCSAgICAgIGludCBtY19jb3VudCwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwkqdG90YWxfZmxhZ3MgPSAwOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCisJCQkJCSB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJc3RsYy0+YXNzb2NpYXRlZCA9IGluZm8tPmFzc29jOworCQlpZiAoaW5mby0+YXNzb2MpCisJCQlzdGxjLT5haWQgPSBpbmZvLT5haWQ7CisJCWVsc2UKKwkJCXN0bGMtPmFpZCA9IC0xOworCisJCWlmIChzdGxjLT5wc20pIHsKKwkJCXN0bGM0NXh4X3R4X3BzbShzdGxjLCBzdGxjLT5wc20pOworCQkJc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RsYywgc3RsYy0+cHNtKTsKKwkJfQorCX0KK30KKworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgc3RsYzQ1eHhfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsICAuaHdfdmFsdWUgPSAwLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAwLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgIC5od192YWx1ZSA9IDEsICAgIC5od192YWx1ZV9zaG9ydCA9IDEsIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAgLmh3X3ZhbHVlID0gMiwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMiwgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAzLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAzLCB9LAorCXsgLmJpdHJhdGUgPSA2MCwgIC5od192YWx1ZSA9IDQsICAgIC5od192YWx1ZV9zaG9ydCA9IDQsIH0sCisJeyAuYml0cmF0ZSA9IDkwLCAgLmh3X3ZhbHVlID0gNSwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNSwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA2LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsICAgIC5od192YWx1ZV9zaG9ydCA9IDcsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gOCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA5LCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCAgIC5od192YWx1ZV9zaG9ydCA9IDEwLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCAgIC5od192YWx1ZV9zaG9ydCA9IDExLCB9LAorfTsKKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHN0bGM0NXh4X2NoYW5uZWxzW10gPSB7CisJeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKKwl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTd9LAorCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMn0sCisJeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3fSwKKwl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzJ9LAorCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzN30sCisJeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyfSwKKwl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDd9LAorCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1Mn0sCisJeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1N30sCisJeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2Mn0sCisJeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2N30sCisJeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCit9OworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHN0bGM0NXh4X2JhbmRfMmdoeiA9IHsKKwkuY2hhbm5lbHMgPSBzdGxjNDV4eF9jaGFubmVscywKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3RsYzQ1eHhfY2hhbm5lbHMpLAorCS5iaXRyYXRlcyA9IHN0bGM0NXh4X3JhdGVzLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShzdGxjNDV4eF9yYXRlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgc3RsYzQ1eHhfb3BzID0geworCS5zdGFydCA9IHN0bGM0NXh4X29wX3N0YXJ0LAorCS5zdG9wID0gc3RsYzQ1eHhfb3Bfc3RvcCwKKwkuYWRkX2ludGVyZmFjZSA9IHN0bGM0NXh4X29wX2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UgPSBzdGxjNDV4eF9vcF9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcgPSBzdGxjNDV4eF9vcF9jb25maWcsCisJLmNvbmZpZ19pbnRlcmZhY2UgPSBzdGxjNDV4eF9vcF9jb25maWdfaW50ZXJmYWNlLAorCS5jb25maWd1cmVfZmlsdGVyID0gc3RsYzQ1eHhfb3BfY29uZmlndXJlX2ZpbHRlciwKKwkudHggPSBzdGxjNDV4eF9vcF90eCwKKwkuYnNzX2luZm9fY2hhbmdlZCA9IHN0bGM0NXh4X29wX2Jzc19pbmZvX2NoYW5nZWQsCit9OworCitzdGF0aWMgaW50IHN0bGM0NXh4X3JlZ2lzdGVyX21hYzgwMjExKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwkvKiBGSVhNRTogU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoKSByZXF1aXJlcyBkZWZhdWx0X21hY19hZGRyCisJICAgdG8gYmUgbm9uLWNvbnN0IGZvciBzb21lIHN0cmFuZ2UgcmVhc29uICovCisJc3RhdGljIHU4IGRlZmF1bHRfbWFjX2FkZHJbRVRIX0FMRU5dID0geworCQkweDAwLCAweDAyLCAweGVlLCAweGMwLCAweGZmLCAweGVlCisJfTsKKwlpbnQgcmV0OworCisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoc3RsYy0+aHcsIGRlZmF1bHRfbWFjX2FkZHIpOworCisJcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0bGMtPmh3KTsKKwlpZiAocmV0KSB7CisJCXN0bGM0NXh4X2Vycm9yKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbWFjODAyMTEgaHc6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0bGM0NXh4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic3RsYzQ1eHgiLAorCS5pZAkJPSAtMSwKKworCS8qIGRldmljZSBtb2RlbCBpbnNpc3RzIHRvIGhhdmUgYSByZWxlYXNlIGZ1bmN0aW9uICovCisJLmRldiAgICAgICAgICAgID0geworCQkucmVsZWFzZSA9IHN0bGM0NXh4X2RldmljZV9yZWxlYXNlLAorCX0sCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzdGxjNDV4eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlpbnQgcmV0OworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJLyogbWFjODAyMTEgYWxsb2MgKi8KKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnN0bGMpLCAmc3RsYzQ1eHhfb3BzKTsKKwlpZiAoIWh3KSB7CisJCXN0bGM0NXh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2MgaWVlZTgwMjExX2h3Iik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIG1hYzgwMjExIGNsZWFycyBody0+cHJpdiAqLworCXN0bGMgPSBody0+cHJpdjsKKworCXN0bGMtPmh3ID0gaHc7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgc3RsYyk7CisJc3RsYy0+c3BpID0gc3BpOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpLT5tYXhfc3BlZWRfaHogPSAyNDAwMDAwMDsKKworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKQorCQlzdGxjNDV4eF9lcnJvcigic3BpX3NldHVwIGZhaWxlZCIpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHN0bGM0NXh4X2dwaW9fcG93ZXIsICJzdGxjNDV4eCBwb3dlciIpOworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJwb3dlciBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHN0bGM0NXh4X2dwaW9faXJxLCAic3RsYzQ1eHggaXJxIik7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImlycSBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChzdGxjNDV4eF9ncGlvX3Bvd2VyLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChzdGxjNDV4eF9ncGlvX2lycSk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSksCisJCQkgIHN0bGM0NXh4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgInN0bGM0NXh4IiwKKwkJCSAgc3RsYy0+c3BpKTsKKwlpZiAocmV0IDwgMCkKKwkJLyogRklYTUU6IGhhbmRsZSB0aGUgZXJyb3IgKi8KKwkJc3RsYzQ1eHhfZXJyb3IoInJlcXVlc3RfaXJxKCkgZmFpbGVkIik7CisKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpLAorCQkgICAgIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKworCWRpc2FibGVfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnN0bGM0NXh4X2RldmljZSk7CisJaWYgKHJldCkgeworCQlzdGxjNDV4eF9lcnJvcigiQ291bGRuJ3QgcmVnaXN0ZXIgd2xhbl9vbWFwIGRldmljZS4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCBzdGxjKTsKKworCUlOSVRfV09SSygmc3RsYy0+d29yaywgc3RsYzQ1eHhfd29yayk7CisJSU5JVF9XT1JLKCZzdGxjLT53b3JrX3Jlc2V0LCBzdGxjNDV4eF93b3JrX3Jlc2V0KTsKKwlJTklUX0RFTEFZRURfV09SSygmc3RsYy0+d29ya190eF90aW1lb3V0LCBzdGxjNDV4eF93b3JrX3R4X3RpbWVvdXQpOworCW11dGV4X2luaXQoJnN0bGMtPm11dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJnN0bGMtPmZ3X2NvbXApOworCXNwaW5fbG9ja19pbml0KCZzdGxjLT50eF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc3RsYy0+dHhidWZmZXIpOworCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eF9wZW5kaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmc3RsYy0+dHhfc2VudCk7CisKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQlJRUVFODAyMTFfSFdfTk9JU0VfREJNOworCS8qIGZvdXIgYnl0ZXMgZm9yIHBhZGRpbmcgKi8KKwlody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHNfbG1fZGF0YV9vdXQpICsgNDsKKworCS8qIHVuaXQgdXMgKi8KKwlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CisKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnN0bGM0NXh4X2JhbmRfMmdoejsKKworCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmc3BpLT5kZXYpOworCisJQlVJTERfQlVHX09OKHNpemVvZihkZWZhdWx0X2NhbF9yc3NpKSAhPSBSU1NJX0NBTF9BUlJBWV9MRU4pOworCUJVSUxEX0JVR19PTihzaXplb2YoZGVmYXVsdF9jYWxfY2hhbm5lbHMpICE9IENIQU5ORUxfQ0FMX0FSUkFZX0xFTik7CisKKwlzdGxjLT5jYWxfcnNzaSA9IGttZW1kdXAoZGVmYXVsdF9jYWxfcnNzaSwgUlNTSV9DQUxfQVJSQVlfTEVOLAorCQkJCSBHRlBfS0VSTkVMKTsKKwlzdGxjLT5jYWxfY2hhbm5lbHMgPSBrbWVtZHVwKGRlZmF1bHRfY2FsX2NoYW5uZWxzLAorCQkJCSAgICAgQ0hBTk5FTF9DQUxfQVJSQVlfTEVOLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnN0bGM0NXh4X2RldmljZS5kZXYsICZkZXZfYXR0cl9jYWxfcnNzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSBjYWxfcnNzaSIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnN0bGM0NXh4X2RldmljZS5kZXYsICZkZXZfYXR0cl9jYWxfY2hhbm5lbHMpOworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgY2FsX2NoYW5uZWxzIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX3R4X2J1Zik7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSB0eF9idWYiKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gc3RsYzQ1eHhfcmVnaXN0ZXJfbWFjODAyMTEoc3RsYyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc3RsYzQ1eHhfaW5mbygidiIgRFJJVkVSX1ZFUlNJT04gIiBsb2FkZWQiKTsKKworCXN0bGM0NXh4X2luZm8oImNvbmZpZyBidWZmZXIgMHgleC0weCV4IiwKKwkJICAgICAgRklSTVdBUkVfQ09ORklHX1NUQVJULCBGSVJNV0FSRV9DT05GSUdfRU5EKTsKKwlzdGxjNDV4eF9pbmZvKCJ0eCAweCV4LTB4JXgsIHJ4IDB4JXgtMHgleCIsCisJCSAgICAgIEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJULCBGSVJNV0FSRV9UWEJVRkZFUl9FTkQsCisJCSAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJULCBGSVJNV0FSRV9SWEJVRkZFUl9FTkQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3RsYzQ1eHhfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmc3RsYzQ1eHhfZGV2aWNlKTsKKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHN0bGMtPmh3KTsKKworCWZyZWVfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSwgc3BpKTsKKworCWdwaW9fZnJlZShzdGxjNDV4eF9ncGlvX3Bvd2VyKTsKKwlncGlvX2ZyZWUoc3RsYzQ1eHhfZ3Bpb19pcnEpOworCisJLyogRklYTUU6IGZyZWUgY2FsX2NoYW5uZWxzIGFuZCBjYWxfcnNzaT8gKi8KKworCWtmcmVlKHN0bGMtPmZ3KTsKKworCW11dGV4X2Rlc3Ryb3koJnN0bGMtPm11dGV4KTsKKworCS8qIGZyZWVzIGFsc28gc3RsYyAqLworCWllZWU4MDIxMV9mcmVlX2h3KHN0bGMtPmh3KTsKKwlzdGxjID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBzdGxjNDV4eF9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS8qIHVzZSBjeDMxMTB4IG5hbWUgYmVjYXVzZSBib2FyZC1uODAwLmMgdXNlcyB0aGF0IGZvciB0aGUKKwkJICogU1BJIHBvcnQgKi8KKwkJLm5hbWUJCT0gImN4MzExMHgiLAorCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCisJLnByb2JlCQk9IHN0bGM0NXh4X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3RsYzQ1eHhfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN0bGM0NXh4X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmc3RsYzQ1eHhfc3BpX2RyaXZlcik7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBTUEkgZHJpdmVyOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdGxjNDV4eF9leGl0KHZvaWQpCit7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzdGxjNDV4eF9zcGlfZHJpdmVyKTsKKworCXN0bGM0NXh4X2luZm8oInVubG9hZGVkIik7Cit9CisKK21vZHVsZV9pbml0KHN0bGM0NXh4X2luaXQpOworbW9kdWxlX2V4aXQoc3RsYzQ1eHhfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmggYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzk2YmJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmgKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBzdGxjNDV4eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJzdGxjNDV4eF9sbWFjLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInN0bGM0NXh4IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xLjMiCisKKyNkZWZpbmUgRFJJVkVSX1BSRUZJWCBEUklWRVJfTkFNRSAiOiAiCisKK2VudW0geworCURFQlVHX05PTkUgPSAwLAorCURFQlVHX0ZVTkMgPSAxIDw8IDAsCisJREVCVUdfSVJRID0gMSA8PCAxLAorCURFQlVHX0JIID0gMSA8PCAyLAorCURFQlVHX1JYID0gMSA8PCAzLAorCURFQlVHX1JYX0NPTlRFTlQgPSAxIDw8IDUsCisJREVCVUdfVFggPSAxIDw8IDYsCisJREVCVUdfVFhfQ09OVEVOVCA9IDEgPDwgOCwKKwlERUJVR19UWEJVRkZFUiA9IDEgPDwgOSwKKwlERUJVR19RVUVVRSA9IDEgPDwgMTAsCisJREVCVUdfQk9PVCA9IDEgPDwgMTEsCisJREVCVUdfUFNNID0gMSA8PCAxMiwKKwlERUJVR19BTEwgPSB+MCwKK307CisKKyNkZWZpbmUgREVCVUdfTEVWRUwgREVCVUdfTk9ORQorLyogI2RlZmluZSBERUJVR19MRVZFTCBERUJVR19BTEwgKi8KKy8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX1RYIHwgREVCVUdfUlggfCBERUJVR19JUlEpICovCisvKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19UWCB8IERFQlVHX01FTVJFR0lPTiB8IERFQlVHX1FVRVVFKSAqLworLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfTUVNUkVHSU9OIHwgREVCVUdfUVVFVUUpICovCisKKyNkZWZpbmUgc3RsYzQ1eHhfZXJyb3IoZm10LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgRFJJVkVSX1BSRUZJWCAiRVJST1IgIiBmbXQgIlxuIiwgIyNhcmcpCisKKyNkZWZpbmUgc3RsYzQ1eHhfd2FybmluZyhmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX1BSRUZJWCAiV0FSTklORyAiIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSBzdGxjNDV4eF9pbmZvKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSBzdGxjNDV4eF9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgc3RsYzQ1eHhfZHVtcChsZXZlbCwgYnVmLCBsZW4pCQlcCisJZG8geyBcCisJCWlmIChsZXZlbCAmIERFQlVHX0xFVkVMKSBcCisJCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBcCisJCQkJICAgICAgIDE2LCAxLCBidWYsIGxlbiwgMSk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBNQUMyU1RSKGEpICgoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdKQorI2RlZmluZSBNQUNTVFIgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IgorCisvKiBCaXQgMTUgaXMgcmVhZC93cml0ZSBiaXQ7IE9OID0gUkVBRCwgT0ZGID0gV1JJVEUgKi8KKyNkZWZpbmUgQUREUl9SRUFEX0JJVF8xNSAgMHg4MDAwCisKKyNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMgICAgIDB4MDAKKyNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVF9FTgkgICAgMHgwNAorCisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyAgICAweDA4CisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0VOCSAgICAweDBjCisjZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0FDSwkgICAgMHgxMAorCisjZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzEgICAJICAgIDB4MTQKKyNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMiAgIAkgICAgMHgxOAorCisvKiBoaWdoIHdvcmQgKi8KKyNkZWZpbmUgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCAgICAgIDB4MjYKKworI2RlZmluZSBTUElfQURSU19ETUFfREFUQSAgICAgIAkgICAgMHgyOAorCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMICAgICAweDJjCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9MRU4gICAgICAweDJlCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFICAgICAweDMwCisKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTCAgICAgIDB4MzQKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfTEVOICAgICAgIDB4MzYKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQkFTRSAgICAgIDB4MzgKKworI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgMHg4MDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEICAweDQwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCAgICAgIDB4MjAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQgICAgMHgxMDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9DUFVfRU4gICAweDA4MDAKKworI2RlZmluZSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFICAgMHgwMDAxCisjZGVmaW5lIFNQSV9ETUFfUkVBRF9DVFJMX0VOQUJMRSAgICAweDAwMDEKKyNkZWZpbmUgSE9TVF9BTExPV0VEICAgICAgICAgICAgICAgICgxIDw8IDcpCisKKyNkZWZpbmUgRklSTVdBUkVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAKKworI2RlZmluZSBTUElfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwICAgICAgICAgLyogbXNlYyAqLworCisjZGVmaW5lIFNQSV9NQVhfVFhfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAzMgorCisjZGVmaW5lIFNQSV9NQVhfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAzMjc2NworCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1dBS0VVUCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1NMRUVQICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1JERE9ORSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfQ1RTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfRFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKworI2RlZmluZSBTUElfSE9TVF9JTlRfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTUElfSE9TVF9JTlRfV1JfUkVBRFkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTUElfSE9TVF9JTlRfU1dfVVBEQVRFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTUElfSE9TVF9JTlRfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorCisvKiBjbGVhciB0byBzZW5kICovCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9DVFMJICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworLyogZGF0YSByZWFkeSAqLworI2RlZmluZSBTUElfSE9TVF9JTlRfRFIJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorCisjZGVmaW5lIFNQSV9IT1NUX0lOVFNfREVGQVVMVCBcCisJKFNQSV9IT1NUX0lOVF9SRUFEWSB8IFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKQorCisjZGVmaW5lIFRBUkdFVF9CT09UX1NMRUVQIDUwCisKKy8qIFRoZSBmaXJtd2FyZSBidWZmZXIgaXMgZGl2aWRlZCBpbnRvIHRocmVlIGFyZWFzOgorICoKKyAqIG8gY29uZmlnIGFyZWEgKGZvciBjb250cm9sIGNvbW1hbmRzKQorICogbyB0eCBidWZmZXIKKyAqIG8gcnggYnVmZmVyCisgKi8KKyNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX1NUQVJUIDB4MjAyMDAKKyNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX0VORCAweDI3YzYwCisjZGVmaW5lIEZJUk1XQVJFX0JVRkZFUl9MRU4gKEZJUk1XQVJFX0JVRkZFUl9FTkQgLSBGSVJNV0FSRV9CVUZGRVJfU1RBUlQpCisjZGVmaW5lIEZJUk1XQVJFX01UVSAzMjQwCisjZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19QQVlMT0FEX0xFTiAxMDI0CisjZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19TVEFSVCBGSVJNV0FSRV9CVUZGRVJfU1RBUlQKKyNkZWZpbmUgRklSTVdBUkVfQ09ORklHX0xFTiAoc2l6ZW9mKHN0cnVjdCBzX2xtX2NvbnRyb2wpICsgXAorCQkJICAgICBGSVJNV0FSRV9DT05GSUdfUEFZTE9BRF9MRU4pCisjZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19FTkQgKEZJUk1XQVJFX0NPTkZJR19TVEFSVCArIEZJUk1XQVJFX0NPTkZJR19MRU4gLSAxKQorI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gKDUgKiBGSVJNV0FSRV9NVFUgKyAxMDI0KQorI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX0VORCAtIEZJUk1XQVJFX1JYQlVGRkVSX0xFTikKKyNkZWZpbmUgRklSTVdBUkVfUlhCVUZGRVJfRU5EIChGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCArIFwKKwkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gLSAxKQorI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX1NUQVJUICsgRklSTVdBUkVfQ09ORklHX0xFTikKKyNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfTEVOIChGSVJNV0FSRV9CVUZGRVJfTEVOIC0gRklSTVdBUkVfQ09ORklHX0xFTiAtIFwKKwkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4pCisjZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0VORCAoRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQgKyBcCisJCQkgICAgICAgRklSTVdBUkVfVFhCVUZGRVJfTEVOIC0gMSkKKworI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgMTAwCisjZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX1RSQUlMRVIgNAorCisvKiBGSVhNRTogY29tZSB1cCB3aXRoIGEgcHJvcGVyIHZhbHVlICovCisjZGVmaW5lIE1BWF9GUkFNRV9MRU4gMjUwMAorCisvKiB1bml0IGlzIG1zICovCisjZGVmaW5lIFRYX0ZSQU1FX0xJRkVUSU1FIDIwMDAKKyNkZWZpbmUgVFhfVElNRU9VVCA0MDAwCisKKyNkZWZpbmUgU1VQUE9SVEVEX0NIQU5ORUxTIDEzCisKKy8qIEZJWE1FICovCisvKiAjZGVmaW5lIENIQU5ORUxfQ0FMX0xFTiBvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgYnJhdGVtYXNrKSAtIFwgKi8KKy8qIAlvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgY2hhbm5lbCkgKi8KKyNkZWZpbmUgQ0hBTk5FTF9DQUxfTEVOIDI5MgorI2RlZmluZSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIENIQU5ORUxfQ0FMX0xFTikKKy8qIEZJWE1FICovCisvKiAjZGVmaW5lIFJTU0lfQ0FMX0xFTiBzaXplb2Yoc3RydWN0IHNfbG1vX3NjYW4pIC0gXCAqLworLyogCW9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCByc3NpY2FsKSAqLworI2RlZmluZSBSU1NJX0NBTF9MRU4gOAorI2RlZmluZSBSU1NJX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIFJTU0lfQ0FMX0xFTikKKworc3RydWN0IHNfZG1hX3JlZ3MgeworCXVuc2lnbmVkIHNob3J0IGNtZDsKKwl1bnNpZ25lZCBzaG9ydCBsZW47CisJdW5zaWduZWQgbG9uZyBhZGRyOworfTsKKworc3RydWN0IHN0bGM0NXh4X2llX3RpbSB7CisJdTggZHRpbV9jb3VudDsKKwl1OCBkdGltX3BlcmlvZDsKKwl1OCBibWFwX2NvbnRyb2w7CisJdTggcHZibWFwWzI1MV07Cit9OworCitzdHJ1Y3QgdHhidWZmZXIgeworCS8qIGNhbiBiZSByZW1vdmVkIHdoZW4gc3dpdGNoZWQgdG8gc2tiIHF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OworCisJc3RydWN0IGxpc3RfaGVhZCBidWZmZXJfbGlzdDsKKworCWludCBzdGFydDsKKwlpbnQgZnJhbWVfc3RhcnQ7CisJaW50IGVuZDsKKworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIGhhbmRsZTsKKworCWJvb2wgc3RhdHVzX25lZWRlZDsKKworCWludCBoZWFkZXJfbGVuOworCisJLyogdW5pdCBqaWZmaWVzICovCisJdW5zaWduZWQgbG9uZyBsaWZldGltZTsKK307CisKK2VudW0gZndfc3RhdGUgeworCUZXX1NUQVRFX09GRiwKKwlGV19TVEFURV9CT09USU5HLAorCUZXX1NUQVRFX1JFQURZLAorCUZXX1NUQVRFX1JFU0VULAorCUZXX1NUQVRFX1JFU0VUVElORywKK307CisKK3N0cnVjdCBzdGxjNDV4eCB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19yZXNldDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcmtfdHhfdGltZW91dDsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IGNvbXBsZXRpb24gZndfY29tcDsKKworCisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwlpbnQgY2hhbm5lbDsKKworCXU4ICpjYWxfcnNzaTsKKwl1OCAqY2FsX2NoYW5uZWxzOworCisJZW51bSBmd19zdGF0ZSBmd19zdGF0ZTsKKworCXNwaW5sb2NrX3QgdHhfbG9jazsKKworCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCB0eGJ1ZmZlcjsKKworCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCB0eF9wZW5kaW5nOworCisJLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KKwlpbnQgdHhfcXVldWVfc3RvcHBlZDsKKworCS8qIHByb3RlY3RlZCBieSBtdXRleCAqLworCXN0cnVjdCBsaXN0X2hlYWQgdHhfc2VudDsKKworCWludCB0eF9mcmFtZXM7CisKKwl1OCAqZnc7CisJaW50IGZ3X2xlbjsKKworCWJvb2wgcHNtOworCWJvb2wgYXNzb2NpYXRlZDsKKwlpbnQgYWlkOworCWJvb2wgcHNwb2xsaW5nOworfTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVkYjgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaApAQCAtMCwwICsxLDQzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVGhpcyBpcyB0aGUgTE1BQyBBUEkgaW50ZXJmYWNlIGhlYWRlciBmaWxlIGZvciBTVExDNDU2MC4gICAgICAgIAkqCisqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29uZXhhbnQgU3lzdGVtcywgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAgICAqCisqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgICAqCisqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgkqCisqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqCisqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgkqCisqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqCisqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqCisqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fbG1hY19oX18KKyNkZWZpbmUgX19sbWFjX2hfXworCisjZGVmaW5lIExNX1RPUF9WQVJJQU5UICAgICAgMHgwNTA2CisjZGVmaW5lIExNX0JPVFRPTV9WQVJJQU5UICAgMHgwNTA2CisKKy8qCisgKiBMTUFDIC0gVU1BQyBpbnRlcmZhY2UgZGVmaW5pdGlvbjoKKyAqLworCisjZGVmaW5lIExNX0ZMQUdfQ09OVFJPTCAgICAgMHg4MDAwCisjZGVmaW5lIExNX0ZMQUdfQUxJR04gICAgICAgMHg0MDAwCisKKyNkZWZpbmUgTE1fQ1RSTF9PUFNFVCAgICAgICAweDAwMDEKKworI2RlZmluZSBMTV9PVVRfUFJPTUlTQyAgICAgIDB4MDAwMQorI2RlZmluZSBMTV9PVVRfVElNRVNUQU1QICAgIDB4MDAwMgorI2RlZmluZSBMTV9PVVRfU0VRTlIgICAgICAgIDB4MDAwNAorI2RlZmluZSBMTV9PVVRfQlVSU1QgICAgICAgIDB4MDAxMAorI2RlZmluZSBMTV9PVVRfTk9DQU5DRUwgICAgIDB4MDAyMAorI2RlZmluZSBMTV9PVVRfQ0xFQVJUSU0gICAgIDB4MDA0MAorI2RlZmluZSBMTV9PVVRfSElUQ0hISUtFICAgIDB4MDA4MAorI2RlZmluZSBMTV9PVVRfQ09NUFJFU1MgICAgIDB4MDEwMAorI2RlZmluZSBMTV9PVVRfQ09OQ0FUICAgICAgIDB4MDIwMAorI2RlZmluZSBMTV9PVVRfUENTX0FDQ0VQVCAgIDB4MDQwMAorI2RlZmluZSBMTV9PVVRfV0FJVEVPU1AgICAgIDB4MDgwMAorCisKKyNkZWZpbmUgTE1fQUxPRlRfU1AgICAgICAgICAweDEwCisjZGVmaW5lIExNX0FMT0ZUX0NUUyAgICAgICAgMHgyMAorI2RlZmluZSBMTV9BTE9GVF9SVFMgICAgICAgIDB4NDAKKyNkZWZpbmUgTE1fQUxPRlRfTUFTSyAgICAgICAweDFmCisjZGVmaW5lIExNX0FMT0ZUX1JBVEUgICAgICAgMHgwZgorCisjZGVmaW5lIExNX0lOX0ZDU19HT09EICAgICAgMHgwMDAxCisjZGVmaW5lIExNX0lOX01BVENIX01BQyAgICAgMHgwMDAyCisjZGVmaW5lIExNX0lOX01DQkMgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIExNX0lOX0JFQUNPTiAgICAgICAgMHgwMDA4CisjZGVmaW5lIExNX0lOX01BVENIX0JTUyAgICAgMHgwMDEwCisjZGVmaW5lIExNX0lOX0JDQVNUX0JTUyAgICAgMHgwMDIwCisjZGVmaW5lIExNX0lOX0RBVEEgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIExNX0lOX1RSVU5DQVRFRCAgICAgMHgwMDgwCisKKyNkZWZpbmUgTE1fSU5fVFJBTlNQQVJFTlQgICAweDAyMDAKKworI2RlZmluZSBMTV9RVUVVRV9CRUFDT04gICAgIDAKKyNkZWZpbmUgTE1fUVVFVUVfU0NBTiAgICAgICAxCisjZGVmaW5lIExNX1FVRVVFX01HVCAgICAgICAgMgorI2RlZmluZSBMTV9RVUVVRV9NQ0JDICAgICAgIDMKKyNkZWZpbmUgTE1fUVVFVUVfREFUQSAgICAgICA0CisjZGVmaW5lIExNX1FVRVVFX0RBVEEwICAgICAgNAorI2RlZmluZSBMTV9RVUVVRV9EQVRBMSAgICAgIDUKKyNkZWZpbmUgTE1fUVVFVUVfREFUQTIgICAgICA2CisjZGVmaW5lIExNX1FVRVVFX0RBVEEzICAgICAgNworCisjZGVmaW5lIExNX1NFVFVQX0lORlJBICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBMTV9TRVRVUF9JQlNTICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTE1fU0VUVVBfVFJBTlNQQVJFTlQgICAgMHgwMDA4CisjZGVmaW5lIExNX1NFVFVQX1BST01JU0NVT1VTICAgIDB4MDAxMAorI2RlZmluZSBMTV9TRVRVUF9ISUJFUk5BVEUgICAgICAweDAwMjAKKyNkZWZpbmUgTE1fU0VUVVBfTk9BQ0sgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIExNX1NFVFVQX1JYX0RJU0FCTEVEICAgIDB4MDA4MAorCisjZGVmaW5lIExNX0FOVEVOTkFfMCAgICAgICAgICAgIDAKKyNkZWZpbmUgTE1fQU5URU5OQV8xICAgICAgICAgICAgMQorI2RlZmluZSBMTV9BTlRFTk5BX0RJVkVSU0lUWSAgICAyCisKKyNkZWZpbmUgTE1fVFhfRkFJTEVEICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIExNX1RYX1BTTSAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBMTV9UWF9QU01fQ0FOQ0VMTEVECTB4MDAwNAorCisjZGVmaW5lIExNX1NDQU5fRVhJVCAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBMTV9TQ0FOX1RSQVAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTE1fU0NBTl9BQ1RJVkUgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIExNX1NDQU5fRklMVEVSICAgICAgICAgIDB4MDAwOAorCisjZGVmaW5lIExNX1BTTSAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBMTV9QU01fRFRJTSAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTE1fUFNNX01DQkMgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIExNX1BTTV9DSEVDS1NVTSAgICAgICAgIDB4MDAwOAorI2RlZmluZSBMTV9QU01fU0tJUF9NT1JFX0RBVEEgICAweDAwMTAKKyNkZWZpbmUgTE1fUFNNX0JFQUNPTl9USU1FT1VUICAgMHgwMDIwCisjZGVmaW5lIExNX1BTTV9IRk9TTEVFUCAgICAgICAgIDB4MDA0MAorI2RlZmluZSBMTV9QU01fQVVUT1NXSVRDSF9TTEVFUCAweDAwODAKKyNkZWZpbmUJTE1fUFNNX0xQSVQJCTB4MDEwMAorI2RlZmluZSBMTV9QU01fQkZfVUNBU1RfU0tJUCAgICAweDAyMDAKKyNkZWZpbmUgTE1fUFNNX0JGX01DQVNUX1NLSVAgICAgMHgwNDAwCisKKy8qIGhmb3NsZWVwICovCisjZGVmaW5lIExNX1BTTV9TTEVFUF9PUFRJT05fTUFTSyAoTE1fUFNNX0FVVE9TV0lUQ0hfU0xFRVAgfCBMTV9QU01fSEZPU0xFRVApCisjZGVmaW5lIExNX1BTTV9TTEVFUF9PUFRJT05fU0hJRlQgICAgICAgNgorLyogaGZvc2xlZXBlbmQgKi8KKyNkZWZpbmUgTE1fUFNNX0JGX09QVElPTl9NQVNLIChMTV9QU01fQkZfTUNBU1RfU0tJUCB8IExNX1BTTV9CRl9VQ0FTVF9TS0lQKQorI2RlZmluZSBMTV9QU01fQkZfT1BUSU9OX1NISUZUICA5CisKKworI2RlZmluZSBMTV9QUklWQUNDX1dFUCAgICAgICAgICAweDAxCisjZGVmaW5lIExNX1BSSVZBQ0NfVEtJUCAgICAgICAgIDB4MDIKKyNkZWZpbmUgTE1fUFJJVkFDQ19NSUNIQUVMICAgICAgMHgwNAorI2RlZmluZSBMTV9QUklWQUNDX0NDWF9LUCAgICAgICAweDA4CisjZGVmaW5lIExNX1BSSVZBQ0NfQ0NYX01JQyAgICAgIDB4MTAKKyNkZWZpbmUgTE1fUFJJVkFDQ19BRVNfQ0NNUCAgICAgMHgyMAorCisvKiBzaXplIG9mIHNfbG1fZGVzY3IgaW4gd29yZHMgKi8KKyNkZWZpbmUgTE1fREVTQ1JfU0laRV9XT1JEUyAgICAgMTEKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKK2VudW0geworICAgIExNX01PREVfQ0xJRU5UID0gMCwKKyAgICBMTV9NT0RFX0FQCit9OworCitzdHJ1Y3Qgc19sbV9kZXNjciB7CisgICAgdWludDE2X3QgbW9kZXM7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDMyX3QgYnVmZmVyX3N0YXJ0OworICAgIHVpbnQzMl90IGJ1ZmZlcl9lbmQ7CisgICAgdWludDhfdCBoZWFkZXI7CisgICAgdWludDhfdCB0cmFpbGVyOworICAgIHVpbnQ4X3QgdHhfcXVldWVzOworICAgIHVpbnQ4X3QgdHhfZGVwdGg7CisgICAgdWludDhfdCBwcml2YWN5OworICAgIHVpbnQ4X3Qgcnhfa2V5Y2FjaGU7CisgICAgdWludDhfdCB0aW1fc2l6ZTsKKyAgICB1aW50OF90IHBhZDE7CisgICAgdWludDhfdCByYXRlc1sxNl07CisgICAgdWludDMyX3QgbGluazsKKwl1aW50MTZfdCBtdHU7Cit9OworCisKK3N0cnVjdCBzX2xtX2NvbnRyb2wgeworICAgIHVpbnQxNl90IGZsYWdzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBoYW5kbGU7CisgICAgdWludDE2X3Qgb2lkOworICAgIHVpbnQxNl90IHBhZDsKKyAgICAvKiB1aW50OF90IGRhdGFbXTsgKi8KK307CisKK2VudW0geworICAgIExNX1BSSVZfTk9ORSA9IDAsCisgICAgTE1fUFJJVl9XRVAsCisgICAgTE1fUFJJVl9US0lQLAorICAgIExNX1BSSVZfVEtJUE1JQ0hBRUwsCisgICAgTE1fUFJJVl9DQ1hfV0VQTUlDLAorICAgIExNX1BSSVZfQ0NYX0tQTUlDLAorICAgIExNX1BSSVZfQ0NYX0tQLAorICAgIExNX1BSSVZfQUVTX0NDTVAKK307CisKK2VudW0geworICAgIExNX0RFQ1JZUFRfTk9ORSwKKyAgICBMTV9ERUNSWVBUX09LLAorICAgIExNX0RFQ1JZUFRfTk9LRVksCisgICAgTE1fREVDUllQVF9OT01JQ0hBRUwsCisgICAgTE1fREVDUllQVF9OT0NLSVBNSUMsCisgICAgTE1fREVDUllQVF9GQUlMX1dFUCwKKyAgICBMTV9ERUNSWVBUX0ZBSUxfVEtJUCwKKyAgICBMTV9ERUNSWVBUX0ZBSUxfTUlDSEFFTCwKKyAgICBMTV9ERUNSWVBUX0ZBSUxfQ0tJUEtQLAorICAgIExNX0RFQ1JZUFRfRkFJTF9DS0lQTUlDLAorICAgIExNX0RFQ1JZUFRfRkFJTF9BRVNDQ01QCit9OworCitzdHJ1Y3Qgc19sbV9kYXRhX291dCB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGhhbmRsZTsKKyAgICB1aW50MTZfdCBhaWQ7CisgICAgdWludDhfdCBydHNfcmV0cmllczsKKyAgICB1aW50OF90IHJldHJpZXM7CisgICAgdWludDhfdCBhbG9mdFs4XTsKKyAgICB1aW50OF90IGFsb2Z0X2N0cmw7CisgICAgdWludDhfdCBjcnlwdF9vZmZzZXQ7CisgICAgdWludDhfdCBrZXl0eXBlOworICAgIHVpbnQ4X3Qga2V5bGVuOworICAgIHVpbnQ4X3Qga2V5WzE2XTsKKyAgICB1aW50OF90IHF1ZXVlOworICAgIHVpbnQ4X3QgYmFja2xvZzsKKyAgICB1aW50MTZfdCBkdXJhdGlvbnNbNF07CisgICAgdWludDhfdCBhbnRlbm5hOworICAgIHVpbnQ4X3QgY3RzOworICAgIGludDE2X3QgcG93ZXI7CisgICAgdWludDhfdCBwYWRbMl07CisgICAgLyp1aW50OF90IGRhdGFbXTsqLworfTsKKworI2RlZmluZSBMTV9SQ1BJX0lOVkFMSUQgICAgICAgICAoMHhmZikKKworc3RydWN0IHNfbG1fZGF0YV9pbiB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQxNl90IGZyZXF1ZW5jeTsKKyAgICB1aW50OF90IGFudGVubmE7CisgICAgdWludDhfdCByYXRlOworICAgIHVpbnQ4X3QgcmNwaTsKKyAgICB1aW50OF90IHNxOworICAgIHVpbnQ4X3QgZGVjcnlwdDsKKyAgICB1aW50OF90IHJzc2lfcmF3OworICAgIHVpbnQzMl90IGNsb2NrWzJdOworICAgIC8qdWludDhfdCBkYXRhW107Ki8KK307CisKK3VuaW9uIHVfbG1fZGF0YSB7CisgICAgc3RydWN0IHNfbG1fZGF0YV9vdXQgb3V0OworICAgIHN0cnVjdCBzX2xtX2RhdGFfaW4gaW47Cit9OworCitlbnVtIHsKKyAgICBMTV9PSURfU0VUVVAJPSAwLAorICAgIExNX09JRF9TQ0FOCQk9IDEsCisgICAgTE1fT0lEX1RSQVAJCT0gMiwKKyAgICBMTV9PSURfRURDRgkJPSAzLAorICAgIExNX09JRF9LRVlDQUNIRQk9IDQsCisgICAgTE1fT0lEX1BTTQkJPSA2LAorICAgIExNX09JRF9UWENBTkNFTAk9IDcsCisgICAgTE1fT0lEX1RYCQk9IDgsCisgICAgTE1fT0lEX0JVUlNUCT0gOSwKKyAgICBMTV9PSURfU1RBVFMJPSAxMCwKKyAgICBMTV9PSURfTEVECQk9IDEzLAorICAgIExNX09JRF9USU1FUgk9IDE1LAorICAgIExNX09JRF9OQVYJCT0gMjAsCisgICAgTE1fT0lEX1BDUwkJPSAyMiwKKyAgICBMTV9PSURfQlRfQkFMQU5DRVIgID0gMjgsCisgICAgTE1fT0lEX0dST1VQX0FERFJFU1NfVEFCTEUJPSAzMCwKKyAgICBMTV9PSURfQVJQVEFCTEUgICAgID0gMzEsCisgICAgTE1fT0lEX0JUX09QVElPTlMgPSAzNQorfTsKKworZW51bSB7CisgICAgTE1fRlJPTlRFTkRfVU5LTk9XTiA9IDAsCisgICAgTE1fRlJPTlRFTkRfRFVFVFRFMywKKyAgICBMTV9GUk9OVEVORF9EVUVUVEUyLAorICAgIExNX0ZST05URU5EX0ZSSVNCRUUsCisgICAgTE1fRlJPTlRFTkRfQ1JPU1NCT1csCisgICAgTE1fRlJPTlRFTkRfTE9OR0JPVworfTsKKworCisjZGVmaW5lIElOVkFMSURfTFBGX0JBTkRXSURUSCAgIDB4ZmZmZgorI2RlZmluZSBJTlZBTElEX09TQ19TVEFSVF9ERUxBWSAweGZmZmYKKworc3RydWN0IHNfbG1vX3NldHVwIHsKKyAgICB1aW50MTZfdCBmbGFnczsKKyAgICB1aW50OF90ICBtYWNhZGRyWzZdOworICAgIHVpbnQ4X3QgIGJzc2lkWzZdOworICAgIHVpbnQ4X3QgIGFudGVubmE7CisgICAgdWludDhfdCAgcnhfYWxpZ247CisgICAgdWludDMyX3QgcnhfYnVmZmVyOworICAgIHVpbnQxNl90IHJ4X210dTsKKyAgICB1aW50MTZfdCBmcm9udGVuZDsKKyAgICB1aW50MTZfdCB0aW1lb3V0OworICAgIHVpbnQxNl90IHRydW5jYXRlOworICAgIHVpbnQzMl90IGJyYXRlbWFzazsKKyAgICB1aW50OF90ICBzYnNzX29mZnNldDsKKyAgICB1aW50OF90ICBtY2FzdF93aW5kb3c7CisgICAgdWludDhfdCAgcnhfcnNzaV90aHJlc2hvbGQ7CisgICAgdWludDhfdCAgcnhfZWRfdGhyZXNob2xkOworICAgIHVpbnQzMl90IHJlZl9jbG9jazsKKyAgICB1aW50MTZfdCBscGZfYmFuZHdpZHRoOworICAgIHVpbnQxNl90IG9zY19zdGFydF9kZWxheTsKK307CisKKworc3RydWN0IHNfbG1vX3NjYW4geworICAgIHVpbnQxNl90IGZsYWdzOworICAgIHVpbnQxNl90IGR3ZWxsOworICAgIHVpbnQ4X3QgY2hhbm5lbFsyOTJdOworICAgIHVpbnQzMl90IGJyYXRlbWFzazsKKyAgICB1aW50OF90ICBhbG9mdFs4XTsKKyAgICB1aW50OF90ICByc3NpY2FsWzhdOworfTsKKworCitlbnVtIHsKKyAgICBMTV9UUkFQX1NDQU4gPSAwLAorICAgIExNX1RSQVBfVElNRVIsCisgICAgTE1fVFJBUF9CRUFDT05fVFgsCisgICAgTE1fVFJBUF9GQUFfUkFESU9fT04sCisgICAgTE1fVFJBUF9GQUFfUkFESU9fT0ZGLAorICAgIExNX1RSQVBfUkFEQVIsCisgICAgTE1fVFJBUF9OT19CRUFDT04sCisgICAgTE1fVFJBUF9UQlRULAorICAgIExNX1RSQVBfU0NPX0VOVEVSLAorICAgIExNX1RSQVBfU0NPX0VYSVQKK307CisKK3N0cnVjdCBzX2xtb190cmFwIHsKKyAgICB1aW50MTZfdCBldmVudDsKKyAgICB1aW50MTZfdCBmcmVxdWVuY3k7Cit9OworCitzdHJ1Y3Qgc19sbW9fdGltZXIgeworICAgIHVpbnQzMl90IGludGVydmFsOworfTsKKworc3RydWN0IHNfbG1vX25hdiB7CisgICAgdWludDMyX3QgcGVyaW9kOworfTsKKworCitzdHJ1Y3Qgc19sbW9fZWRjZl9xdWV1ZTsKKworc3RydWN0IHNfbG1vX2VkY2YgeworICAgIHVpbnQ4X3QgIGZsYWdzOworICAgIHVpbnQ4X3QgIHNsb3R0aW1lOworICAgIHVpbnQ4X3QgIHNpZnM7CisgICAgdWludDhfdCAgZW9mcGFkOworICAgIHN0cnVjdCBzX2xtb19lZGNmX3F1ZXVlIHsKKwkgICAgdWludDhfdCAgYWlmczsKKwkgICAgdWludDhfdCAgcGFkMDsKKwkgICAgdWludDE2X3QgY3dtaW47CisJICAgIHVpbnQxNl90IGN3bWF4OworCSAgICB1aW50MTZfdCB0eG9wOworICAgIH0gcXVldWVzWzhdOworICAgIHVpbnQ4X3QgIG1hcHBpbmdbNF07CisgICAgdWludDE2X3QgbWF4YnVyc3Q7CisgICAgdWludDE2X3Qgcm91bmRfdHJpcF9kZWxheTsKK307CisKK3N0cnVjdCBzX2xtb19rZXljYWNoZSB7CisgICAgdWludDhfdCBlbnRyeTsKKyAgICB1aW50OF90IGtleWlkOworICAgIHVpbnQ4X3QgYWRkcmVzc1s2XTsKKyAgICB1aW50OF90IHBhZFsyXTsKKyAgICB1aW50OF90IGtleXR5cGU7CisgICAgdWludDhfdCBrZXlsZW47CisgICAgdWludDhfdCBrZXlbMjRdOworfTsKKworCitzdHJ1Y3Qgc19sbV9pbnRlcnZhbDsKKworc3RydWN0IHNfbG1vX3BzbSB7CisgICAgdWludDE2X3QgICAgZmxhZ3M7CisgICAgdWludDE2X3QgICAgYWlkOworICAgIHN0cnVjdCBzX2xtX2ludGVydmFsIHsKKwkgICAgdWludDE2X3QgaW50ZXJ2YWw7CisJICAgIHVpbnQxNl90IHBlcmlvZHM7CisgICAgfSBpbnRlcnZhbHNbNF07CisgICAgLyogdWludDE2X3QgICAgcGFkOyAqLworICAgIHVpbnQ4X3QgICAgIGJlYWNvbl9yY3BpX3NraXBfbWF4OworICAgIHVpbnQ4X3QgICAgIHJjcGlfZGVsdGFfdGhyZXNob2xkOworICAgIHVpbnQ4X3QgICAgIG5yOworICAgIHVpbnQ4X3QgICAgIGV4Y2x1ZGVbMV07Cit9OworCisjZGVmaW5lIE1DX0ZJTFRFUl9BRERSRVNTX05VTSAgIDQKKworc3RydWN0IHNfbG1vX2dyb3VwX2FkZHJlc3NfdGFibGUgeworICAgIHVpbnQxNl90ICAgIGZpbHRlcl9lbmFibGU7CisgICAgdWludDE2X3QgICAgbnVtX2FkZHJlc3M7CisgICAgdWludDhfdCAgICAgbWFjYWRkcl9saXN0W01DX0ZJTFRFUl9BRERSRVNTX05VTV1bNl07Cit9OworCitzdHJ1Y3Qgc19sbW9fdHhjYW5jZWwgeworICAgIHVpbnQzMl90IGFkZHJlc3NbMV07Cit9OworCisKK3N0cnVjdCBzX2xtb190eCB7CisgICAgdWludDhfdCAgZmxhZ3M7CisgICAgdWludDhfdCAgcmV0cmllczsKKyAgICB1aW50OF90ICByY3BpOworICAgIHVpbnQ4X3QgIHNxOworICAgIHVpbnQxNl90IHNlcWN0cmw7CisgICAgdWludDhfdCAgYW50ZW5uYTsKKyAgICB1aW50OF90ICBwYWQ7Cit9OworCitzdHJ1Y3Qgc19sbW9fYnVyc3QgeworICAgIHVpbnQ4X3QgIGZsYWdzOworICAgIHVpbnQ4X3QgIHF1ZXVlOworICAgIHVpbnQ4X3QgIGJhY2tsb2c7CisgICAgdWludDhfdCAgcGFkOworICAgIHVpbnQxNl90IGR1cmF0aW9uc1szMl07Cit9OworCitzdHJ1Y3Qgc19sbW9fc3RhdHMgeworICAgIHVpbnQzMl90IHZhbGlkOworICAgIHVpbnQzMl90IGZjczsKKyAgICB1aW50MzJfdCBhYm9ydDsKKyAgICB1aW50MzJfdCBwaHlhYm9ydDsKKyAgICB1aW50MzJfdCBydHNfc3VjY2VzczsKKyAgICB1aW50MzJfdCBydHNfZmFpbDsKKyAgICB1aW50MzJfdCB0aW1lc3RhbXA7CisgICAgdWludDMyX3QgdGltZV90eDsKKyAgICB1aW50MzJfdCBub2lzZWZsb29yOworICAgIHVpbnQzMl90IHNhbXBsZV9ub2lzZVs4XTsKKyAgICB1aW50MzJfdCBzYW1wbGVfY2NhOworICAgIHVpbnQzMl90IHNhbXBsZV90eDsKK307CisKKworc3RydWN0IHNfbG1vX2xlZCB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDE2X3QgbWFza1syXTsKKyAgICB1aW50MTZfdCBkZWxheS8qWzJdKi87Cit9OworCisKK3N0cnVjdCBzX2xtb19idF9iYWxhbmNlciB7CisgICAgdWludDE2X3QgcHJpb190aHJlc2g7CisgICAgdWludDE2X3QgYWNsX3RocmVzaDsKK307CisKKworc3RydWN0IHNfbG1vX2FycF90YWJsZSB7CisgICAgdWludDE2X3QgICAgZmlsdGVyX2VuYWJsZTsKKyAgICB1aW50MzJfdCAgICBpcGFkZHI7Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworCisjZW5kaWYgLyogX19sbWFjX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnCmluZGV4IDZlNmNmMGIuLmM1Y2JkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL0tjb25maWcKQEAgLTgsNCArOCw0IEBACiAJICAxMEdiZSBuZXR3b3JrIGNhcmRzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UKLQkgIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzeGcuCisJICBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3hnX25pYy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL01ha2VmaWxlCmluZGV4IGVjNDhmYWEuLjhlMDUzMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQpAQCAtMSArMSwzIEBACi1vYmotJChDT05GSUdfU1hHKQkrPSBzeGcubworb2JqLSQoQ09ORklHX1NYRykJKz0gc3hnX25pYy5vCisKK3N4Z19uaWMteSA6PSBzeGcubyBzeGdfZXRodG9vbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ODY1YmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDg1NCArMCwwIEBACi0jZGVmaW5lIFNBSEFSQV9VQ09ERV9WRVJTX1NUUklORwkiJFJldmlzaW9uOiAxLjEgJCIKLSNkZWZpbmUgU0FIQVJBX1VDT0RFX1ZFUlNfREFURSAgCSIkRGF0ZTogMjAwOC8wNi8yNyAxMjo1ODoyNyAkIgotI2RlZmluZSBTQUhBUkFfVUNPREVfSE9TVElGX0lEICAJMwotCi1zdGF0aWMgdTMyIFNOdW1TZWN0aW9ucyA9IDB4MjsKLXN0YXRpYyB1MzIgU1NlY3Rpb25TaXplW10gPQotewotCTB4MDAwMGUyNzQsIDB4MDAwMDAwMGMsCi19OwotCi1zdGF0aWMgdTMyIFNTZWN0aW9uU3RhcnRbXSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHgwMDAwMWZmZiwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFNhaGFyYVVDb2RlWzJdWzU3OTcyXSA9Ci17Ci17Ci0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHg0ZCwgMHgyOSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGIyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDQwLCAweDJiLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgxZSwgMHg4MCwgMHhlOSwgMHg5YSwKLQkweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4ODAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4NDAsIDB4MDIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg4MCwgMHgwMiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDMsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMywgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAzLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDMsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHg1ZiwgMHgzZiwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweGZmLCAweGZjLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDhhLCAweDExLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweGZkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHhjMCwgMHgwMSwgMHgzMiwKLQkweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDRkLCAweDI4LCAweDFhLAotCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NWYsIDB4MGEsIDB4ZjYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MGUsIDB4ODAsIDB4MTgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhjMCwgMHgyMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDIxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NSwgMHgyMSwgMHg5MCwKLQkweDAwLCAweDAwLCAweDRiLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAyLCAweGMwLCAweDIyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHg5ZCwKLQkweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg5MCwgMHg3MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDAwLCAweGU5LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MWUsIDB4YzAsIDB4ZTcsIDB4OWEsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGI4LCAweDAxLCAweDAwLCAweDk0LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDE3LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NjksIDB4MDUsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYSwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4MTgsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDU3LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgxLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmIsIDB4YmMsCi0JMHgwMiwgMHgwMCwgMHg1NywgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDVhLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGIwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDYwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhmYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHhiZCwKLQkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEzLCAweDQwLCAweDAxLCAweDk5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2NywgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiZCwKLQkweDAwLCAweDAwLCAweDc2LCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCi0JMHg3NiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDZiLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODUsIDB4ODAsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweDYzLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhiOCwgMHhmZiwgMHg4NSwgMHgzMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDIxLCAweGZmLCAweDM4LAotCTB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4NGQsIDB4ODAsIDB4M2EsCi0JMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHgwZCwgMHg4MCwgMHgzYSwKLQkweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ4LCAweDQxLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODYsIDB4OTgsIDB4NjcsIDB4YzAsIDB4ODIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweDhiLCAweDgwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHg4MCwgMHg3MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDkwLCAweDk5LCAweDg2LCAweDJjLCAweDI4LCAweGRlLCAweDgyLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MTgsIDB4YzAsIDB4ODIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHhjNSwgMHg4MiwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGM1LCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg0MCwgMHgwMSwgMHg5OSwKLQkweDA4LCAweDAwLCAweDM4LCAweDAzLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDUsIDB4ODAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDNkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDNhLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4M2EsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHg5MCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg4MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMiwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwZCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDgsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDA0LCAweDA4LCAweDgwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCi0JMHg4NywgMHgwMCwgMHg5NSwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg5ZSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg3ZCwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweDlhLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MGYsIDB4OTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODUsIDB4YjAsCi0JMHgxMCwgMHgwMCwgMHhhNSwgMHgwMCwgMHg4NywgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNiwgMHhiOCwKLQkweDAxLCAweDAwLCAweGE1LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAotCTB4ODcsIDB4MDAsIDB4YWYsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMCwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDk4LCAweGMxLCAweDgyLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4YzEsIDB4ODIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweGE4LCAweDQyLCAweDNkLCAweDcyLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTgsIDB4OTksIDB4YjEsIDB4ZjIsIDB4YzAsIDB4N2MsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YzEsIDB4ODIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4ODAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzIsIDB4Y2QsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweGNkLCAweDg1LCAweDMwLAotCTB4ODAsIDB4MDAsIDB4YzYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCi0JMHhhMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweGZjLCAweGI2LAotCTB4ODcsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhiOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHg2MSwgMHgxNiwgMHgzOCwKLQkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YjgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweGUxLCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjOCwgMHhjMSwgMHg4MiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA4LCAweDAwLCAweDA0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YTgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNywgMHgzOCwKLQkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwOCwgMHg4OSwgMHg4ZCwgMHg3MiwgMHgzMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE5LCAweGRjLCAweDE3LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4OTAsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHg4NiwgMHg4MCwgMHgyMiwgMHgyNCwgMHg3YywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCi0JMHhkMiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCi0JMHgwMCwgMHgwMCwgMHhkZCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKLQkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAotCTB4ZTAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhmNCwgMHgwMCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MjksIDB4YzEsIDB4NzIsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHg5MCwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweGMxLCAweDgyLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDAsIDB4ODAsIDB4OTcsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhhMCwgMHgwNCwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4ODEsIDB4ODAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQ1LCAweDkwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4MDAsIDB4MjgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgxMSwgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDU5LCAweGMwLCAweDZlLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4NzgsIDB4MTksIDB4YzAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwNCwgMHgwMSwgMHhlYywgMHgwNiwgMHhiZCwgMHg5NywgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweGY0LCAweDFlLCAweDQwLCAweGVmLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4MDksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweGMwLCAweDI5LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4M2QsIDB4OTAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmNCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4MywgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDcyLCAweDAwLCAweDJiLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4M2QsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHg3MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDI3LCAweDAxLCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NzIsIDB4MDAsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAotCTB4MjgsIDB4MDEsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhjZCwgMHg4NSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg3MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweGJkLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg4MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDNkLCAweDAxLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4M2MsIDB4MDAsIDB4MTQsIDB4MjgsIDB4ODAsIDB4NzIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHgwNCwgMHgzOCwgMHgwMCwgMHg3OCwgMHhkOSwgMHhjNSwgMHg3MiwgMHhiMCwKLQkweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDk3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgzYywgMHhiOCwgMHgxYywgMHgxNywgMHgzOCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDI4LCAweGMwLCAweDgzLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MmMsIDB4MDgsIDB4YzAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhiOCwgMHhlMCwgMHg4MywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDI5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg3OCwgMHhhMCwgMHg4MSwgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4MDEsIDB4MDYsIDB4M2EsIDB4MDAsIDB4ODAsIDB4YjIsIDB4NWMsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgwMCwgMHg4OSwgMHhjMSwgMHg3MiwgMHgzNywKLQkweDA3LCAweDAwLCAweDUwLCAweDAxLCAweDJiLCAweDAxLCAweDAwLCAweDA0LCAweDc5LCAweDBhLCAweDA0LCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDEsIDB4OTAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHgwMCwgMHgzYSwgMHgwMCwgMHgyYywgMHgwNywgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDJjLCAweGQ3LCAweGUwLCAweDcyLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDY0LCAweDgzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg2MSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDQ5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg0OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDcsIDB4MDAsIDB4NjYsIDB4MDEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4NzksIDB4MGEsIDB4MDIsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MSwgMHg5MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweGEwLCAweDgxLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg2MCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDcxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDczLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzMsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDhjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDEsIDB4MjksIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxMCwgMHgwMCwgMHg4YywgMHgwNywgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4OGMsIDB4ZjcsIDB4ZTAsIDB4ODIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MjcsIDB4ZTQsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg3MiwgMHgwMCwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDg3LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCi0JMHg4MywgMHgwMSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHhmMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDA4LCAweDM4LCAweDgxLCAweDgwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MWUsIDB4NDAsIDB4ZWYsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDNiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGUsIDB4MDEsIDB4YjksIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4M2IsIDB4M2EsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5MiwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgwMCwgMHgzYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YmEsIDB4ODMsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhiZCwgMHg5NywgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGY0LCAweGJkLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4OTcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZSwgMHg4MCwgMHg4MywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDdhLCAweGU4LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZTgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHhjMCwgMHgyOSwgMHgzNywKLQkweDYwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBkLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZTgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhlOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgwOCwgMHg4MCwgMHg3MiwgMHgzMiwKLQkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDU0LCAweGE4LCAweDVjLCAweDE2LCAweDM4LAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmMsIDB4YTgsIDB4ZGMsIDB4MTYsIDB4MzgsCi0JMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4OCwgMHg0ZCwgMHg4NSwgMHgzYSwKLQkweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MTQsIDB4YTksIDB4OWMsIDB4ODcsIDB4ZDksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDcyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgzYywgMHgwMCwgMHgxNCwgMHgxOCwgMHg4MCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweGJiLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHg3OCwgMHhjMCwgMHgyOSwgMHgzNywKLQkweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGEwLCAweDgxLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZDgsIDB4ZTAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGQ4LCAweDYwLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGQwLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjYiwgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHgzMiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGRjLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ODQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweDQwLCAweDg1LCAweDNhLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyOCwgMHgwMCwgMHg4NCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MTQsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODgsIDB4MGQsIDB4ODQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYxLCAweDg1LCAweDNhLAotCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHhkOCwgMHg2MCwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhlYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKLQkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweGMwLCAweDgyLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YjgsIDB4NjAsIDB4ODUsIDB4M2MsCi0JMHgwNCwgMHgwMCwgMHhmMiwgMHgwMSwgMHg4MSwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4OCwgMHhjZCwgMHg3NCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDI4LCAweGY4LCAweGEwLCAweDc1LCAweDNjLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzQsIDB4MDgsIDB4ODAsIDB4NzUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyOCwgMHhmOCwgMHhhMCwgMHg3NSwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA4LCAweGExLCAweDgyLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjIsIDB4NjAsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDdjLCAweDA4LCAweDgwLCAweDc1LCAweDMyLAotCTB4MDksIDB4MDAsIDB4ZjksIDB4MDEsIDB4MDQsIDB4MWEsIDB4MDAsIDB4NzAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4YjAsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHg4NywgMHhjZCwgMHg3NCwgMHgzMSwKLQkweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDMxLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MjgsIDB4NDAsIDB4ODYsIDB4M2EsCi0JMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDgyLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGNkLCAweDg1LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTgsIDB4YTEsIDB4ODIsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHhjMCwgMHg4MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LCAweGUxLCAweDgxLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4MDAsIDB4ODYsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg1OCwgMHgwNywgMHg0MCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDhmLCAweDAxLCAweDAwLCAweDc0LCAweDE4LCAweDQwLCAweDg3LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHhmNywgMHhhMCwgMHg4NiwgMHg5YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweGEwLCAweDg2LCAweDNhLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NTgsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHg0MCwgMHg4NSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDUwLCAweDA3LCAweDgwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHhjNywgMHhlMSwgMHg3NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDc4LCAweGEwLCAweDg0LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZjksIDB4YTEsIDB4ODYsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDU4LCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTgsIDB4YTEsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDYwLCAweDg1LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDU3LCAweDIxLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4NjEsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgxZiwgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4YzAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MjEsIDB4ODAsIDB4M2EsCi0JMHgwNywgMHgwMCwgMHgyNywgMHgwMiwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg3OSwgMHgwYSwgMHgwMiwgMHhiOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTAsIDB4ODEsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHgzYywKLQkweDAwLCAweDAwLCAweDQxLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4NjAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDMyLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDNkLCAweDAyLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4M2EsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweGMwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NGIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzEsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDcxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDIsIDB4OTAsIDB4MTksIDB4MDAsIDB4MDQsIDB4ZTksIDB4NWMsIDB4OTAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA3LCAweDgwLCAweDg2LCAweDMyLAotCTB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4OGMsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhjLCAweDA3LCAweDQwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDUsIDB4OTAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg1YSwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKLQkweDAwLCAweDAwLCAweDViLCAweDAyLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDI3LCAweGU0LCAweDgyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMiwgMHgyNywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweDYwLCAweDNkLCAweGIzLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCi0JMHg1YiwgMHgwMiwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg2NywgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZmQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhmZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDAxLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4MSwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQ1LCAweDgxLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg3MiwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4ZTAsIDB4NmUsIDB4M2EsCi0JMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDMsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4NmUsIDB4YmQsCi0JMHg3NywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHgwZCwgMHg5MCwgMHgzYSwKLQkweDJlLCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgyYiwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDM3LCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MzgsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg0MCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA1LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDA0LCAweDAxLCAweDE0LCAweDU5LCAweGMwLCAweDZlLCAweGQ3LAotCTB4MDIsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MDQsIDB4YjgsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5MSwgMHgwMiwgMHhiNSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDAwLCAweDgwLCAweGEwLCAweDM2LCAweDBiLCAweDZhLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDg1LCAweDJmLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKLQkweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4NmUsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHg1NiwgMHhlMCwgMHg2ZSwgMHg5YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAzLCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzksIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDZlLCAweGQyLAotCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgxNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhkMiwKLQkweDFiLCAweDAwLCAweGFmLCAweDAyLCAweDM4LCAweDAxLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDc5LCAweDBiLCAweDE0LCAweDM4LAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4NWIsIDB4OTEsIDB4ZDksCi0JMHgwMCwgMHgwMCwgMHhiZSwgMHgwMiwgMHgzOCwgMHgyOCwgMHgwMCwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGI2LCAweDAyLCAweDA0LCAweDIxLCAweDAxLCAweDA4LCAweDY5LCAweDI0LCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGJhLCAweDAyLCAweDAyLCAweDMwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YjksIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA1LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDBhLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MGIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwMiwgMHgwNCwgMHgyMSwgMHgwMSwgMHgwOCwgMHg2OSwgMHgyNCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKLQkweDA0LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YzUsIDB4MDIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4MGMsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM5LCAweDAyLCAweDA0LCAweDMxLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgyMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDIxLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4YTQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDIyLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjZiwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDIwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjEsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHhiOSwKLQkweDEwLCAweDAwLCAweGQ0LCAweDAyLCAweGM1LCAweDAxLCAweDAwLCAweGNjLCAweDAyLCAweDIwLCAweDE1LCAweDk4LAotCTB4MDgsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4YjksCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMiwgMHgyMCwgMHgxNSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDdlLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHgwMCwgMHg4MCwgMHhkNywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNSwgMHg4MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ZmEsIDB4ODUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhmYSwgMHg4NSwgMHhiYywKLQkweDAwLCAweDAwLCAweGRmLCAweDAyLCAweDM2LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MGUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHgwMCwgMHhhOSwgMHhkYiwgMHg4NSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDIsIDB4OGMsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg5NCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDk4LCAweDI4LCAweDgwLCAweDZlLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MzgsIDB4MjIsIDB4MTQsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwMiwgMHgwNCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAotCTB4MDUsIDB4MDAsIDB4ZWUsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4NzgsIDB4ZTEsIDB4NmUsIDB4OTksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDc4LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTEsIDB4OTcsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgxNCwgMHgxMCwgMHhmNCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg3MiwgMHhiMCwKLQkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweDAyLCAweGYyLAotCTB4MGQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwOSwgMHgwMCwgMHg4MCwgMHg1MiwgMHhiZCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweGZiLCAweDAyLCAweDMzLCAweDE1LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4NzIsIDB4YjYsCi0JMHgwMSwgMHgwMSwgMHgwOCwgMHgwYSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwZCwgMHg3NCwgMHgzYywKLQkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDBiLCAweDMxLCAweDAwLCAweDdjLCAweDA4LCAweDAwLCAweDc1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4OWYsIDB4ZjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhmYywgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMCwgMHg4OCwgMHgxOCwgMHgwMCwgMHg3NSwgMHg5YywKLQkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDAxLCAweDcyLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4NzUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDc0LCAweDM4LCAweGEyLCAweDc1LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4ODMsIDB4MWIsIDB4MDAsIDB4NzgsIDB4MDgsIDB4YzAsIDB4NzQsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGYyLCAweDAyLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDg3LCAweGI2LAotCTB4MmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4NCwgMHhkMiwKLQkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODcsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHg5ZiwgMHg3OCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDlmLCAweDk5LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDMsIDB4OWYsIDB4NjgsIDB4MDEsIDB4NjQsIDB4ODgsIDB4NWIsIDB4ODYsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4YTQsIDB4YjIsIDB4NWIsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDE3LCAweDAzLCAweDA4LCAweDAxLCAweDAwLCAweDA0LCAweGU4LCAweGE1LCAweDc1LCAweGJjLAotCTB4MGYsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDlmLCAweDk4LCAweDAxLCAweDgwLCAweGMyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDYsIDB4YjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4NWIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzMiwgMHgwMywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAyLCAweGQ0LCAweDAxLCAweDgwLCAweDkyLCAweGZiLCAweDZlLCAweGJjLAotCTB4MTUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgxNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDFjLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NzIsIDB4NjEsIDB4ODAsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDIxLCAweDAzLCAweDA2LCAweGE4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MDQsIDB4YTksIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHgwNCwgMHhhOSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDgwLCAweGJjLAotCTB4MTMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHg5ZiwgMHhhMCwgMHgwMSwgMHg3OCwgMHgyOSwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4NjAsIDB4ODAsIDB4YmMsCi0JMHgwNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhiMiwKLQkweDAwLCAweGMwLCAweDI5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDYsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyOSwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg2MCwgMHg4MCwgMHhiYywKLQkweDA5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MmIsIDB4MDMsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwNywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA4LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg1YiwgMHg4MCwgMHhiYywKLQkweDFmLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MWUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTIsIDB4ZDIsCi0JMHgwZCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhmMiwKLQkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MTAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MjAsIDB4MTUsIDB4YjgsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDFkLCAweDAwLCAweDQ5LCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGUwLCAweDAwLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgxZCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MTQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhOCwgMHgwNSwgMHgyOCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgzNSwgMHgwMCwgMHg1NCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODEsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDJiLCAweDAwLCAweDlkLCAweDA1LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVhLCAweDAzLCAweDFkLCAweDQxLCAweDAyLCAweDVjLCAweGY4LCAweDAxLCAweDY4LCAweGI0LAotCTB4NDEsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4OTEsCi0JMHgzNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweGMwLCAweDg1LCAweGQ3LAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDIsIDB4MDAsIDB4YTksIDB4ZGIsIDB4ODUsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhlMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHhhNCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDJmLCAweDAwLCAweDkzLCAweDA1LCAweGQ3LCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDMsIDB4MDYsIDB4YTksIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDlmLCAweDg4LCAweDAxLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDQsIDB4ZjksIDB4YmEsIDB4NmUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHg2YywgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHhhNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDE5LCAweDgwLCAweDkwLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCi0JMHgzMCwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MTIsIDB4NzAsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgzMSwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwOCwgMHhjMCwgMHg3NCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDgxLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MmIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHg0ZCwgMHg4MSwgMHhkNywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgwMywgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHg1MiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MjUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgyNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweGQ4LCAweDFlLCAweDgwLCAweGVkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDMsIDB4YjcsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGUsIDB4YzAsIDB4ZWQsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgzYiwgMHhlZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDFlLCAweDAwLCAweGVlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MGUsIDB4MDAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MWUsIDB4MDAsIDB4ZWIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NiwgMHhjYywgMHgwMiwgMHg4MCwgMHg2YywgMHgzMiwKLQkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCi0JMHgzNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDk5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGM1LCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgxMiwgMHhjMCwgMHgyYywgMHgzYSwKLQkweDAwLCAweDAwLCAweDk1LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODYsIDB4YzgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwOCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHg5OSwKLQkweDAwLCAweDAwLCAweDlmLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NTUsIDB4MDEsIDB4ODAsIDB4YjIsIDB4MWIsIDB4MmIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1NSwgMHgwMSwgMHg4MCwgMHhiMiwgMHgxYiwgMHgyYiwgMHhiYywKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHgzOSwKLQkweGIwLCAweDAzLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHg5OSwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4YWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA1LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgwMywgMHg4YiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNSwgMHgwMywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyYSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDg1LCAweDAxLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDBjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDYsIDB4MzIsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4YjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxNSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDFkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MzIsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDcwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDFjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgxNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MWEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE5LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4NjQsIDB4MDIsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhmYiwgMHgwMywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg5MCwgMHhiYSwKLQkweDI1LCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGYzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHg4MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDNmLCAweDgwLCAweGZjLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDAsIDB4MzgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDEzLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweGQwLCAweDEyLCAweDAwLCAweDJkLCAweGJjLAotCTB4NTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgxMiwgMHgwMCwgMHgyZCwgMHgzYSwKLQkweDRjLCAweDAwLCAweDFhLCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDJkLCAweGJjLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4YWUsIDB4MGQsIDB4MDIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweGNjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODYsIDB4Y2MsIDB4MDcsIDB4ODAsIDB4MDAsIDB4M2EsCi0JMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDQwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjksIDB4NDAsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgyNiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDk3LCAweGI2LAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZTksIDB4ZTUsIDB4MDAsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDI0LCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDgyLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDJjLCAweDA0LCAweDhlLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MjYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCi0JMHgwZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwZSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDM2LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NzMsIDB4ODAsIDB4OTcsIDB4MzQsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHg4MCwgMHg5NywgMHgzNCwKLQkweDA5LCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4ZmUsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDNiLCAweDA0LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgzYiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDNlLCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMiwgMHgwMCwgMHgzOSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHgyNCwgMHgxNywgMHhiOCwKLQkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4OTcsIDB4YmMsCi0JMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweGZlLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAzLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDQ3LCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwNiwgMHgwMCwgMHg1OSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHg2NCwgMHgxNiwgMHg5OCwKLQkweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgzMywgMHgwMCwgMHg3NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDExLCAweDAwLCAweDc0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MzksIDB4MDAsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHg1YSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg5MCwgMHgzYSwKLQkweDBkLCAweDAwLCAweDdjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDk4LAotCTB4MGQsIDB4MDAsIDB4OGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4OTgsCi0JMHgwZCwgMHgwMCwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKLQkweDAwLCAweDAwLCAweGEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCi0JMHgwMCwgMHgwMCwgMHhiMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGJkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHg5MCwgMHg5ZCwKLQkweDAwLCAweDAwLCAweGQ4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHhkOCwgMHgwMCwgMHhmNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGZmLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGU4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOSwgMHg0MCwgMHg5MCwgMHg5NywKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ODUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDA4LCAweDAwLCAweDE1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDI0LCAweDE2LCAweDk4LAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwZCwgMHgwMCwgMHgzMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKLQkweDAwLCAweDAwLCAweDMzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAotCTB4M2YsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4MDAsIDB4YjAsCi0JMHgwMiwgMHgwMCwgMHg4MCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDZiLCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHhiMCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCi0JMHhiMCwgMHgwMywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDk5LAotCTB4MDAsIDB4MDAsIDB4OTEsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAotCTB4MDIsIDB4MDAsIDB4OTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzEsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyYiwgMHhiYywKLQkweGYxLCAweDBmLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMiwgMHgwMCwgMHg5OCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDliLCAweDA0LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweGIwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDBiLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MWIsIDB4ZTQsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGExLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGIyLAotCTB4MWYsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4OTksCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4ZmMsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDBhLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MGYsIDB4ODEsIDB4ZmMsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg0MiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDQyLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHgwMCwgMHg5MCwgMHgzYywKLQkweDEwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDBlLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDA1LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDBmLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MGYsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDkwLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NDIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDkwLCAweDMyLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg0MCwgMHg5MCwgMHg5YywKLQkweDAwLCAweDAwLCAweGRiLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDQyLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHhlNSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgxMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDFmLCAweDQwLCAweDkwLCAweDljLAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDkwLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGYsIDB4YTQsIDB4OTcsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZSwgMHg4MCwgMHhlZSwgMHg5ZCwKLQkweDAwLCAweDAwLCAweGYyLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgxZSwgMHg0MCwgMHg5MCwgMHg5YywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDkwLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODYsIDB4YzAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHgzOCwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZmEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjQsIDB4ZjYsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgzZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDQwLCAweDgwLCAweGZjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg3OSwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAyLCAweDAwLCAweGZjLCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCi0JMHgxZiwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMSwgMHg0MCwgMHgwMCwgMHg5OSwKLQkweGVhLCAweDA1LCAweDA1LCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDAsIDB4MTUsIDB4MzIsCi0JMHgwMCwgMHhmZSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweGYwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4OTgsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwYiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHg5NSwKLQkweDM2LCAweDIzLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4ODAsIDB4MTQsIDB4MzIsCi0JMHgwMCwgMHhmOCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweGMwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4OTgsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDhmLCAweDRkLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4NjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg3YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE5LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDZmLCAweDgwLCAweGZjLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4OTAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg1ZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MTcsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4NDAsIDB4OTAsIDB4YjAsCi0JMHg4MCwgMHgwMSwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4ZCwgMHhmYywgMHg5MSwKLQkweDAwLCAweDAwLCAweDE5LCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDkwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4N2YsIDB4ODAsIDB4ZmMsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg3ZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDAwLCAweDAwLCAweDFjLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGYsIDB4ODAsIDB4ZmMsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4MCwgMHhmYywgMHgzNCwKLQkweDAwLCAweDAwLCAweDIwLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDQwLCAweDkwLCAweGI2LAotCTB4ZjEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MGUsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxZiwgMHg4MSwgMHhmYywgMHg5NSwKLQkweDBlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MWYsIDB4ODEsIDB4ZmMsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwMiwgMHhmNSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweGY1LCAweGJkLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MjUsIDB4ZjUsIDB4YjUsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgxZiwgMHgyNCwgMHgxNiwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDAwLCAweGY1LCAweDljLAotCTB4ODAsIDB4MDEsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ZmMsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgyYiwgMHgwNSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHhmNSwgMHgzYSwKLQkweDhjLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAzLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwNSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGU0LCAweDZlLCAweDNhLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHg2OSwgMHgwNSwgMHgxNywgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhkMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDUsIDB4MDQsIDB4MTksIDB4ODYsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNSwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKLQkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIyLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzIsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNiwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKLQkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIxLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDMsIDB4MGUsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4ZGMsCi0JMHgwMCwgMHgwMCwgMHg1MiwgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDgxLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgwLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwNSwgMHg4MiwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MGEsIDB4MzIsCi0JMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4NjksIDB4MDUsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4NiwgMHgwNCwgMHgxOSwgMHg4MCwgMHg2YywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDBjLCAweGY3LCAweDdmLCAweDkwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4ODYsIDB4ODAsIDB4NzIsIDB4ODIsIDB4NmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhhOCwgMHg0MiwgMHg4MCwgMHg2YywgMHgzNywKLQkweDAwLCAweDAwLCAweDc4LCAweDA1LCAweDEyLCAweDAwLCAweDcwLCAweDM4LCAweDAyLCAweDAwLCAweDdjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgzMCwgMHgwMiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDM0LCAweDAyLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NmIsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4ODIsIDB4MmEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHgyZiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGEyLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4N2EsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4MywgMHgwNSwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjOCwgMHg0NiwgMHg4MCwgMHgyYSwgMHg5NiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDQ2LCAweDgwLCAweDJhLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMywgMHgwMCwgMHg4MCwgMHgwNSwgMHgyMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODMsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDAwLCAweGMwLCAweGQzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4M2MsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDJmLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4YTIsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHhjMCwgMHhlZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDBlLCAweDgwLCAweDAyLCAweDMyLAotCTB4NDAsIDB4N2UsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MGUsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwZSwgMHg4MCwgMHgwNywgMHgzMiwKLQkweDY0LCAweDAwLCAweDhmLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAotCTB4NjQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZWQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwZSwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweGEwLCAweDhjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBlLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MGUsIDB4YzAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwZSwgMHg4MCwgMHgwMiwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDMzLCAweDdiLCAweGVjLCAweDM5LAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg2ZSwgMHhjMCwgMHhlYywgMHgzNywKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBlLCAweGMwLCAweGVkLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NjUsIDB4MDEsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDFjLCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MmIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCi0JMHgzZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDM1LCAweDAwLCAweDljLCAweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHhjZCwgMHg4MSwgMHgzYywKLQkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDFjLCAweDAxLCAweDE0LCAweDU5LCAweGU0LCAweDZlLCAweGQ5LAotCTB4YTQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTgsIDB4MDEsIDB4ODAsIDB4OTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgyYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4MTQsIDB4NzksIDB4ZTAsIDB4NmUsIDB4ZDksCi0JMHhhNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg4MSwgMHgzYSwKLQkweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhmMywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGZjLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MDUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDE3LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgyOSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDMyLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4M2IsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg0NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDRkLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NTYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg1ZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NzEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg3YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDgzLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4OGMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg5NSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4YTcsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhiMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGI5LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4YzIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhjYiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGQ0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZGQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhlNiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGVmLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDBhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MTMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgxYywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDI1LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MmUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgzNywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NDksIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg1NywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4NTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg1NywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDVjLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NjEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg2NiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDZiLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg3NSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDdhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4N2YsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg4NCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDg5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4OGUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg5MywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDk4LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4OWQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDcxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3OSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGRhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGVhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGMxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDg2LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NzYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGM5LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg0NywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDRiLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEzLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDUxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDY0LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGI1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiNSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGNjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDMxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGI2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDBhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU1LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGU4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhlYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGVhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGMyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhmOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDBmLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwNywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGVmLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDA4LCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDk5LAotCTB4MDgsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4OTksCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDA4LCAweDAwLCAweGE3LCAweDA3LCAweDFkLCAweDE5LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHg5OSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDBmLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHg2ZSwgMHgzNSwKLQkweDU0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCi0JMHhiNCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGMwLCAweDJjLCAweDM3LAotCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGI3LCAweDA3LCAweGI3LCAweDEwLCAweDAyLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODAsIDB4ZmMsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiYiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhmZiwgMHg4MCwgMHhmYywgMHg5NCwKLQkweDAwLCAweDAwLCAweGJjLCAweDA3LCAweDlmLCAweDk5LCAweDAwLCAweDgwLCAweDgyLCAweDFiLCAweGVlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4ZTAsIDB4MGUsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MWMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHg0MCwgMHgwMCwgMHhjMSwgMHgwNywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg5MSwgMHhiYywKLQkweDAwLCAweDQwLCAweGMyLCAweDA3LCAweDAwLCAweDE4LCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDJjLCAweDkyLAotCTB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOSwgMHg4MCwgMHgwMywgMHgzMiwKLQkweDAwLCAweDAwLCAweGM1LCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDgwLCAweDMyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDAsIDB4OTIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDI0LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MjgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkMywgMHgwNywgMHg4MCwgMHgwZSwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiNiwKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDEsIDB4OTIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHg4MCwgMHhkNiwgMHgwMSwgMHg4MCwgMHg0MiwgMHhjMCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDkxLCAweDMyLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgyOCwgMHgwMCwgMHhkZCwgMHgwNywgMHgwMCwgMHgzMiwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweDAxLCAweDAwLCAweDFjLCAweGQ5LCAweGMxLCAweDkxLCAweDM0LAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDM0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwZCwgMHg5MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweGQ5LCAweDA3LCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDQyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCi0JMHgwNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDksIDB4YzEsIDB4OTEsIDB4MzQsCi0JMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHg5MSwgMHgzMiwKLQkweDA0LCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweGU4LCAweDA2LCAweDAwLCAweDM2LCAweDMyLAotCTB4MjAsIDB4MDAsIDB4ZGQsIDB4MDcsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHhlYywgMHg4NiwgMHhjZCwgMHg5MSwgMHgzYSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAyLCAweGU4LCAweDg2LCAweDI0LCAweDkwLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4OTYsIDB4MjQsIDB4MTQsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUzLCAweDA3LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YzAsIDB4MmMsIDB4MzcsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGJmLCAweDk3LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweDgzLCAweDMyLAotCTB4MDEsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhmOSwgMHgwNywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MmMsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDJjLCAweDA5LCAweGMwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZDcsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4NmUsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4YzAsIDB4OTIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweDA2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDNiLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAxLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwZiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZiwgMHg4MCwgMHhmZiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDE3LCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgxLCAweDJmLCAweGI2LAotCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHgwMCwgMHg3OCwgMHhlMSwgMHg2ZSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4NzgsIDB4Y2EsIDB4ZTksIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg5MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4ODIsIDB4MDgsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4MjAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDUwLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGUwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg4MywgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGU1LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDNmLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgzYSwgMHgwOCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDQ2LCAweDA4LCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhlMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4ZjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgxOCwgMHg4MSwgMHg4MywgMHgzNSwKLQkweDAwLCAweDAwLCAweDI4LCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDgsIDB4YTAsIDB4MjgsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDViLCAweDEwLCAweDAwLCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MWQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgwOCwgMHgwMCwgMHg5OCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDYyLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDYyLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1ZSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGUwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDZhLCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDgsIDB4YTAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDc0LCAweDA4LCAweDJhLCAweDVkLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDc0LCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKLQkweDEwLCAweDA0LCAweDc3LCAweDA4LCAweDM3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweGIxLAotCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDdjLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDMsIDB4YmMsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHg2NywgMHhhMSwgMHg3MywgMHgzOSwKLQkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhlMCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDJhLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDA4LCAweDFkLCAweDAwLCAweDAwLCAweDM4LCAweDE4LCAweDgxLCAweDgzLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDgsIDB4MDQsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDA4LCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGFlLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4YWMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKLQkweDQwLCAweDAwLCAweDljLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDkwLCAweGJjLAotCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgwOCwgMHgwMiwgMHhiMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweGE0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4YzAsIDB4NmUsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgwMCwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGI3LCAweDAxLCAweDc4LCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHg0MCwgMHgwMCwgMHhhZSwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4ZmEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzYywgMHgxOCwgMHgyMCwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGIwLCAweDAwLCAweDNjLCAweDg4LCAweGRiLCAweDgzLCAweGJlLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDEsIDB4NzgsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNywgMHgyMCwgMHg3OCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDc4LCAweDAxLCAweGUwLCAweGY2LCAweDIwLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MjUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjgsIDB4NjAsIDB4ODAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDJlLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMywgMHhiYywKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDE4LCAweDAwLCAweDgwLCAweDY3LCAweGExLCAweDczLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4NWMsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4MzIsCi0JMHgzMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHhhMiwgMHg4ZCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGI4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YmIsIDB4MDgsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweGJiLCAweDA4LCAweDA0LCAweGQxLCAweDAxLCAweDgwLCAweDAyLCAweDgwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4MjYsIDB4YzAsIDB4NmUsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGMwLCAweDA4LCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhjMCwgMHgwOCwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDM0LAotCTB4MTAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjNywgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4OWEsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgyZiwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDk3LCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDc3LCAweDEwLCAweDAwLCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDgsIDB4MjMsIDB4MjksIDB4MDIsIDB4MDQsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDA4LCAweDAwLCAweGQ4LCAweDA4LCAweDFkLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4ZDgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwOCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4ODcsIDB4OGQsIDB4ODUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTMsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgxMiwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAxLCAweDc4LCAweDA5LCAweDgwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ZGMsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTcsIDB4OTIsCi0JMHgxMiwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDM1LCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGY2LCAweDA4LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDJmLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4MDgsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDYsIDB4MDksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDBkLCAweDA5LCAweDA4LCAweGM5LCAweDAxLCAweGU4LCAweDA2LCAweGJiLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgzMiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAxLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwZCwgMHgwOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MGQsIDB4MDksIDB4MDgsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YmIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDMyLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDEsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MTcsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDEzLCAweDA5LCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4OTcsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHg0NCwgMHhlMiwgMHgyNSwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4NzksIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDMwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlmLCAweDQxLCAweDAxLCAweDgwLCAweDUyLCAweDIwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDksIDB4OWYsIDB4OTgsIDB4MDEsIDB4ODAsIDB4NTIsIDB4MjAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4MmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHhhYSwgMHgwNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDM0LAotCTB4M2EsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDQ3LCAweDEwLCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkNSwgMHg0MSwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4NzgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzNSwgMHgwOSwgMHgwNCwgMHhkNCwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDE5LCAweDgwLCAweDk3LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4MjUsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDM5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDFhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMiwgMHgwMCwgMHgzZiwgMHgwOSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0MSwgMHgwOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweDQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MiwgMHhiZCwgMHg5NywgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDk5LCAweGIxLCAweGYyLCAweGMwLCAweDdjLCAweDMwLAotCTB4MDAsIDB4YzAsIDB4NDgsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDUwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhhMiwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4ZTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAyLCAweDAwLCAweDU5LCAweDA5LCAweDA0LCAweGI5LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwOSwgMHgxMiwgMHgxOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDU1LCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDk0LAotCTB4MDAsIDB4MjAsIDB4MDAsIDB4NGMsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1YSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1ZCwgMHgwOSwgMHgxMiwgMHgzMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVlLCAweDA5LCAweDEyLCAweDM4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDksIDB4MTIsIDB4NDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgwOSwgMHgxMiwgMHg0OCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDYxLCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4MDksIDB4MTIsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHgwOSwgMHgxMiwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDY0LCAweDA5LCAweDEyLCAweDI4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAzLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4MCwgMHgzZCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NTMsIDB4NjAsIDB4M2QsIDB4YjMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweDZhLCAweDA5LCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweGMwLCAweDc0LCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgxNCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDEwLCAweDAwLCAweDgyLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHhjYSwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHg5NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MmMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDI5LCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MjMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgzYywgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDhjLCAweDA5LCAweDM4LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHg4MiwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4YzAsIDB4OTksIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKLQkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4ZmEsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwOSwgMHgzOCwgMHgwMSwgMHgwMCwgMHgyYywgMHhmOCwgMHgwMSwgMHgwYiwgMHhiNCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA5LCAweDAyLCAweDBkLCAweDAyLCAweDgwLCAweGEyLCAweDViLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzgsIDB4YzEsIDB4ODIsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhhOCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDksIDB4MjcsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHgwMCwgMHgyYywgMHhlOCwgMHhjMCwgMHg4MiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDQwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAotCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGFiLCAweDA5LCAweDIzLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweGIyLAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhZCwgMHgwOSwgMHgxZCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweGIwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MTAsIDB4MDAsIDB4YjYsIDB4MDksIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg4ZSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweGI4LCAweDA5LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDksIDB4OGUsIDB4MzksIDB4MDAsIDB4MDAsIDB4YjcsIDB4YzEsIDB4ODIsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweGJhLCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhjMCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjZSwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxYywgMHg0MCwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHhkNiwgMHgwMSwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweGQyLCAweDAxLCAweDAwLCAweDk0LCAweDFlLCAweDQwLCAweGU5LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGVlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1MSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlNCwgMHgwOSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGUxLCAweDA5LCAweDllLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgyYSwgMHgzMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweDM5LAotCTB4YTQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDBjLCAweDAwLCAweGViLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgwYSwgMHgzOCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDI1LCAweDBhLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MGEsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MTgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHhhNiwgMHgyMCwgMHgwMCwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4ZmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwOCwgMHgwYSwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAotCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2NiwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDBmLCAweDBhLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDgwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDExLCAweDBhLCAweDlmLCAweDAxLCAweDAwLCAweDA0LCAweDY4LCAweDYwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTgsIDB4MjAsIDB4MDAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDE0LCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDBkLCAweDBhLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDYwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDAwLCAweGEwLCAweDBkLCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxZiwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDFmLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGEwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDI3LCAweDBhLCAweDAwLCAweDE4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MmEsIDB4MGEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDNlLCAweDUxLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHg2MCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDdiLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDNhLCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweDAwLCAweGE0LCAweGE4LCAweDYwLCAweDhhLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHhjMCwgMHgzZSwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHgwMCwgMHhhNCwgMHhhOCwgMHg2MCwgMHg4YSwgMHgzYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGEsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDRhLCAweDBhLCAweDFmLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0YSwgMHgwYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHhmNiwgMHg2MCwgMHg4MCwgMHg5YywKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDA4LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDQwLCAweDAyLCAweDE0LCAweDM5LCAweDlhLCAweGZlLCAweGQ4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYSwgMHgyYSwgMHhhOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MiwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4NGYsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg1MiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweGMwLCAweDYxLCAweDBhLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ODIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MTgsIDB4MDAsIDB4NWEsIDB4MGEsIDB4MmUsIDB4NDksIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHg1YiwgMHgwYSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHhlYywgMHg3NiwgMHgwMCwgMHgwMCwgMHg5NCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MjAsIDB4ODAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCi0JMHgxYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDBjLCAweDAwLCAweGExLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDg1LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDllLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDgwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgwYSwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDZlLCAweDBhLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDcyLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MmEsIDB4MDAsIDB4NzgsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NzgsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc4LCAweDBhLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDg1LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHg4MCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDgwLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHg4NiwgMHgwYSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGEsIDB4M2YsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4ZiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweGY4LCAweGYyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGRhLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHgzYywKLQkweDAwLCAweDAwLCAweGIwLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YWUsIDB4MGEsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGE3LCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGE1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGFjLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwYSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGZhLAotCTB4MDAsIDB4MDAsIDB4OTAsIDB4MGEsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGJjLCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDQwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGJhLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhiOCwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhlMCwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGMwLCAweDBhLCAweDA0LCAweDIxLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGEsIDB4MmEsIDB4MTEsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4ZTAsIDB4ODYsIDB4YmEsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweGM2LCAweDBhLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MGEsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwOCwgMHgwMCwgMHhjYSwgMHgwYSwgMHgyMywgMHgxOSwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhiOSwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MGEsIDB4MWQsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjZSwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGQzLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDg4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHgyMCwgMHg2ZSwgMHgzYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweGE1LCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg4OCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGU0LCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlNSwgMHgwYSwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGVhLCAweDBhLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGVjLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweGYzLCAweDBhLCAweDNkLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MGEsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY1LAotCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGY4LCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhmZCwgMHgwYSwgMHgyOSwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHhjMCwgMHgyZCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDIsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDAxLCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4OWMsCi0JMHgyYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4MDUsIDB4MGIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAotCTB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhhOSwgMHg2MCwgMHg4MCwgMHhkOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4MTUsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4MzEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg2MCwgMHg4MCwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyMSwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjAsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgyNiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg2OCwgMHhhMCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHgxNywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweGM3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDJlLCAweDBiLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHg4MCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDNjLCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDM0LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgzYSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOCwgMHg4MCwgMHg4NywgMHhmNSwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGE1LCAweDAyLCAweDIzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgzYywgMHgwMCwgMHhhNSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHg4MiwgMHg0YiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4NWMsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYiwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDUzLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwYiwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDM5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhlMCwgMHgyYywgMHgzOSwKLQkweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDZhLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjMywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDZlLCAweDBiLCAweDFkLCAweDIxLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDcxLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4NzQsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDdhLCAweDBiLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGIsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweDdjLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4NywgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHg3MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDg3LCAweDBiLCAweDlmLCAweGYwLCAweDAxLCAweDgwLCAweDgyLCAweGRiLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4OWYsIDB4ZjgsIDB4MDEsIDB4ODAsIDB4MjIsIDB4MjEsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAxLCAweGUwLCAweDA2LCAweGMwLCAweDg3LCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhkLCAweDBiLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgzYiwgMHgwMCwgMHg4ZCwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MGIsIDB4MjcsIDB4MDksIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4YjIsCi0JMHgwMCwgMHhjMCwgMHg5NSwgMHgwYiwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgyMCwgMHg4MCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHg5MiwKLQkweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDg4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHhjYSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwYiwgMHgxZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGExLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGFlLCAweDBiLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YjYsIDB4MGIsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweGM1LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjZCwgMHgwYiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhjYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHgwYiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweGQxLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgwYiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHhkYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZTYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGI5LCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGIsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGY2LCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHhjMCwgMHhmNywgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZmIsIDB4MGIsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGZmLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDA3LCAweDBjLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweGY2LCAweDYwLCAweDgwLCAweDljLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDA2LCAweDBjLCAweDlmLCAweDMxLCAweDAxLCAweGUwLCAweDk2LCAweDIyLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHgwYywgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDA4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgxNCwgMHgwYywgMHgyMywgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYSwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgxNSwgMHgwYywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDFjLCAweDBjLCAweDNkLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MWMsIDB4MGMsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGMsIDB4MjksIDB4MzEsIDB4MDEsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgyYSwgMHgwMCwgMHhhMiwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGU0LCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyNywgMHgwYywgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweDA5LCAweDQwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweDBjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg3OCwgMHgwYiwgMHgxNiwgMHgzOCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDc4LCAweDBiLCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MzcsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4OCwgMHgwZCwgMHg4YiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGI0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGMsIDB4MDQsIDB4MzEsIDB4MDEsIDB4OTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHg4ZCwgMHg4YSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweGMyLCAweGEyLCAweDJjLCAweDNhLAotCTB4MTgsIDB4MDAsIDB4NDMsIDB4MGMsIDB4ODYsIDB4NDEsIDB4MDIsIDB4NzgsIDB4ODgsIDB4MGQsIDB4NzgsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQxLCAweDAyLCAweDgwLCAweGIyLCAweDNmLCAweDc4LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCi0JMHhiNywgMHgwMCwgMHgzYywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZDgsIDB4NjIsIDB4ODAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHgxYiwgMHg4OSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4OGQsIDB4OGEsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhjMiwgMHhhMiwgMHgyYywgMHgzYSwKLQkweDE4LCAweDAwLCAweDRlLCAweDBjLCAweDg2LCAweDQxLCAweDAyLCAweDc4LCAweDg4LCAweDBkLCAweDc4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ZTIsIDB4OGEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHgzZiwgMHg3OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDQ3LCAweDBjLCAweDlmLCAweDAxLCAweDAwLCAweGE4LCAweDE4LCAweDgwLCAweDhhLCAweGJjLAotCTB4YjcsIDB4MDAsIDB4NDcsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwYywgMHgyOCwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHgzZiwgMHg3OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweGQ4LCAweDYyLCAweDgwLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1NSwgMHgwYywgMHgwMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgxOCwgMHgyMCwgMHg4OSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCi0JMHhiNywgMHgwMCwgMHg0NywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDU4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDkwLCAweDE4LCAweDIwLCAweDg5LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NDgsIDB4NjIsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg0OCwgMHg2MiwgMHg4YiwgMHhiYSwKLQkweDAzLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDA4LCAweDFlLCAweGZmLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjIsIDB4ODAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDhkLCAweDhhLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4YzIsIDB4YTIsIDB4MmMsIDB4M2EsCi0JMHgxOCwgMHgwMCwgMHg4NywgMHgwYywgMHg4NiwgMHg0MCwgMHgwMiwgMHg3OCwgMHg4OCwgMHgwZCwgMHg3OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweGIwLAotCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MWUsIDB4ZmYsIDB4YjgsCi0JMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHg3MiwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAotCTB4MjAsIDB4ODAsIDB4NjQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMSwgMHgwYiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDgxLCAweDBjLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDEsIDB4NzAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDkzLCAweDBjLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDFiLCAweDg5LCAweGJjLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg1YSwgMHgwYywgMHg5ZiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxOCwgMHg4MCwgMHg4YSwgMHhiYywKLQkweGI3LCAweDAwLCAweDVhLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjcsIDB4MDAsIDB4OGMsIDB4MGMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGEyLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGMsIDB4MjMsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YjIsCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDkwLCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMSwgMHg3MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDgsIDB4MDAsIDB4OTcsIDB4MGMsIDB4MjMsIDB4MTksIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4YjksCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDk5LCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OWMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhhZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDgyLCAweGI2LAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDY2LCAweDAwLCAweDAwLCAweDM0LAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4MzksCi0JMHgxYiwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGI2LCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDIsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhiZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDIwLCAweDAwLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQxLCAweDAyLCAweDgwLCAweDA2LCAweGMwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDIyLCAweDBkLCAweDFmLCAweDIwLCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGQsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHgwYywgMHgwNCwgMHgzMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDgsIDB4MDgsIDB4ODAsIDB4NmUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDYxLCAweDgwLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjEsIDB4ODAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDMwLCAweDAxLCAweDQ4LCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MGMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MTgsIDB4YTAsIDB4ODQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGUxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwYywgMHgwNywgMHgwMCwgMHgwMCwgMHg0OCwgMHgxOCwgMHhhMCwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTAsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDUsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YTAsIDB4ZmUsIDB4ZDgsCi0JMHgwNSwgMHgwMCwgMHhkZSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMCwgMHhmZSwgMHg5OCwKLQkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweDE4LCAweGEwLCAweDg0LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NjEsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMSwgMHg4MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCi0JMHgwMywgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgxYSwgMHhmZiwgMHhiOCwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYwLCAweDgwLCAweDM5LAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDEsIDB4MDIsIDB4OGMsIDB4ZTYsIDB4YTEsIDB4OTcsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHg4MCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4ZmUsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweGUwLCAweDJjLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MGQsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDBlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhMCwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDA1LCAweDAwLCAweDFkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGEwLCAweGZlLCAweDk4LAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwNSwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhhMCwgMHhmZSwgMHhkOCwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDFhLCAweDBkLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHg0YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4YjQsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhjMCwgMHgyYywgMHgzNywKLQkweGI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YmYsIDB4OTcsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MmIsIDB4MGQsIDB4YjYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgyMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHhhMiwgMHhjZCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzOSwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4NDMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHgwZCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ODAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MDIsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyYiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAyLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGQsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHgzMSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweDZlLCAweDM0LAotCTB4MmQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGE5LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1NiwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDVhLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDVjLCAweDBkLCAweDA0LCAweDk4LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MTEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDgsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgzMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDZjLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg2YSwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MzYsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NzksIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4N2IsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODIsIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgzMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZDUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDU4LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDgsIDB4NTksIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4OWMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhmYiwgMHg2ZSwgMHgzYSwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4MGQsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDE5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweDMxLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweGMwLCAweGFkLCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDlmLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YjIsIDB4MGQsIDB4M2QsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiMiwgMHgwZCwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKLQkweDM0LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgyYSwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4YmMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAxLCAweDM4LCAweDg4LCAweDFiLCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NDgsIDB4MDEsIDB4MjgsIDB4ODgsIDB4MDQsIDB4NmUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwZCwgMHg4MCwgMHg1ZiwgMHgwMSwgMHg4MCwgMHg3MiwgMHhjMCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGMzLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YzMsIDB4MGQsIDB4ODAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4NjIsIDB4YzAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhhOSwgMHg4MSwgMHg5MiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGM5LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzksIDB4MGQsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweDMwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MmEsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhkMiwgMHgwZCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgwMSwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHhmMCwgMHhlMSwgMHgwZCwgMHgxZCwgMHg0MCwgMHgwMiwgMHgwMCwgMHhhOCwgMHgwZCwgMHg2OCwgMHhiMSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWUsIDB4NDAsIDB4MDIsIDB4ODQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKLQkweDAwLCAweDAwLCAweGRlLCAweDBkLCAweGI2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4YTIsIDB4MGQsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkYSwgMHgwZCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGUxLCAweDBkLCAweGI1LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MzYsIDB4MGIsIDB4NmEsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhlNiwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGU5LCAweDAxLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzksIDB4MGIsIDB4MmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMywgMHg4MSwgMHg5NywgMHgzNCwKLQkweDAwLCAweDAwLCAweGYxLCAweDBkLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweGE0LCAweDAzLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzMsIDB4MGIsIDB4MmYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDI5LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDJjLCAweDMyLAotCTB4ZDksIDB4MDIsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCi0JMHg0NiwgMHgwMywgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZjEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgxOCwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDE4LCAweDBlLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MWYsIDB4NDAsIDB4MDIsIDB4MDgsIDB4YjksIDB4YmYsIDB4NjgsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwOCwgMHgwZSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHg4MSwgMHg2OCwgMHhiNiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDYxLCAweDgwLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMiwgMHg4OCwgMHhlNiwgMHgyMSwgMHg5MSwgMHg3OSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDE5LCAweGEwLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ZmYsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwYywgMHgwZSwgMHgyYywgMHg0MSwgMHgwMiwgMHg3OCwgMHhmOSwgMHg4MSwgMHg2OCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDgxLCAweDk3LCAweDM0LAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHhjMCwgMHg4NSwgMHhkNywKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDI5LCAweDFhLCAweGZmLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4YjksIDB4MWIsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MSwgMHgwMiwgMHg4OCwgMHgxNiwgMHhhMCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDI3LCAweDI0LCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OGEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg3NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MjMsIDB4MGUsIDB4MWUsIDB4MDEsIDB4MDAsIDB4MzQsIDB4NzksIDB4NjEsIDB4ODAsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgzOCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxZiwgMHg0MCwgMHhmNSwgMHhiYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQwLCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDY4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YjksIDB4M2YsIDB4OTAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgyNiwgMHgyNCwgMHg2ZSwgMHgzYSwKLQkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGE0LCAweGZlLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4OTAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg5MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDkwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDIxLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4NjEsIDB4OTMsIDB4NzksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4OTAsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4OTAsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwZSwgMHgwNiwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MCwgMHhiYywKLQkweDI2LCAweDAwLCAweDJlLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHgwMCwgMHgyYywgMHgzYSwKLQkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4OTIsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEwLCAweDAxLCAweDc4LCAweDg5LCAweDFiLCAweDkyLCAweDdhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NzgsIDB4ODksIDB4OWIsIDB4OTcsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwgMHhmOSwgMHhiYSwgMHg2ZSwgMHgzNywKLQkweDAwLCAweDAwLCAweDM5LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweDdjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODAsIDB4MmYsIDB4NzQsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweDMyLAotCTB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4OSwgMHhkMiwKLQkweDAwLCAweDAwLCAweDQyLCAweDBlLCAweDA4LCAweDVkLCAweDAxLCAweGVjLCAweDE2LCAweDQwLCAweDg5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGUsIDB4MGIsIDB4NWQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHg3OCwgMHg4OSwgMHgxYiwgMHg4NywgMHgzYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGExLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHg5ZiwgMHhmMCwgMHgwMSwgMHg4MCwgMHg4MiwgMHhkYiwgMHg4NywgMHhiYywKLQkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDlmLCAweGY4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MSwgMHhiYywKLQkweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4OWIsIDB4OTEsIDB4ZDksCi0JMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDE0LCAweDg5LCAweDBkLCAweDZlLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4ODksIDB4NWIsIDB4OTEsIDB4ZDIsCi0JMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDJkLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGUsIDB4MDQsIDB4MjEsIDB4MDEsIDB4MzAsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5YiwgMHg5MSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDY2LCAweDBlLCAweDFmLCAweDQwLCAweDAyLCAweDI0LCAweDA5LCAweDQwLCAweDY4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWMsIDB4MGUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4NDEsIDB4OTIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhiOSwgMHg3ZiwgMHg5MiwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNjLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTQsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTksIDB4YTQsIDB4ZmUsIDB4ZDgsCi0JMHgwOCwgMHgwMCwgMHg1YywgMHgwZSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHhhNCwgMHhmZSwgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg2YiwgMHgwZSwgMHgzOCwgMHg1MCwgMHgwMSwgMHg3OCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDZiLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MjgsIDB4MDEsIDB4NzgsIDB4ZTksIDB4MjUsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg2OSwgMHhhNCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4MGUsIDB4MzgsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2ZiwgMHgwZSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweDAwLCAweDAwLCAweDc3LCAweDBlLCAweDM4LCAweDUxLCAweDAxLCAweDAwLCAweGE5LCAweDliLCAweDkxLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDcyLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4NjYsIDB4MjQsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHgwZSwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4NTAsIDB4MDEsIDB4ODAsIDB4YTIsIDB4NWIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3ZiwgMHgwZSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgyNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MjQsIDB4MDAsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhlLCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODgsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4ZSwgMHgwZSwgMHg4MCwgMHg0MCwgMHgwMiwgMHg4MCwgMHhmMiwgMHhjMSwgMHg2OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDhjLCAweGI2LCAweGMxLCAweDY4LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5NywgMHhkMiwKLQkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MGUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDBiLCAweDE2LCAweDM4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NzksIDB4MGIsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHhlNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODksIDB4NGQsIDB4OTAsIDB4M2EsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MiwgMHgwZCwgMHg5MSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDEyLCAweGE0LCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OTksIDB4MGUsIDB4ODAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4ZTIsIDB4MDEsIDB4N2MsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHg3OCwgMHhiOSwgMHgzZiwgMHg3YywgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OWIsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MTksIDB4MDAsIDB4OTEsIDB4YmMsCi0JMHhiNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDk0LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGU0LCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4MjQsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHhhNCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxOCwgMHgwMCwgMHhhNSwgMHgwZSwgMHgxZiwgMHg0MSwgMHgwMiwgMHg3OCwgMHg4OCwgMHhjZCwgMHg2OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDAwLCAweDJjLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHhmZiwgMHg2OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MWEsIDB4ZmYsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHhmZiwgMHg2OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAotCTB4MmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwZSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGIzLCAweDBlLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKLQkweDFkLCAweDAwLCAweGI2LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4YTksIDB4NjAsIDB4ODEsIDB4ZDksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhhMCwgMHg4MSwgMHg3YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGMxLCAweDBlLCAweDFiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ZTAsIDB4ODMsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4MzIsCi0JMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHg4NiwgMHg4ZCwgMHgyZiwgMHgzMSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGIzLCAweGU0LCAweDM5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDMwLCAweDMwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4YTUsIDB4MDMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMywgMHgwYiwgMHgyZiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweDc2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGUzLCAweGE1LCAweDAzLCAweDc5LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkOCwgMHgwZSwgMHgyMCwgMHgwMCwgMHgwMSwgMHgyYywgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGQ5LCAweDBlLCAweDAwLCAweDE2LCAweDg2LCAweGNjLCAweDA2LCAweGMwLCAweDkyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODYsIDB4Y2MsIDB4MDYsIDB4YzAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4ZSwgMHg5MiwgMHg1MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkZiwgMHgwZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDk3LCAweGJjLAotCTB4ZGYsIDB4MGUsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAzLCAweDAwLCAweDM4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyNCwgMHhkOCwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweGU0LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweDRkLCAweDgyLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHhkZiwgMHgwZSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDBmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDgsIDB4MDUsIDB4MzAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGY3LCAweDBlLCAweDMyLCAweDBmLCAweDAxLCAweGJjLCAweDA4LCAweGMwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZGMsIDB4MDIsIDB4NDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgxZiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGY2LCAweDBlLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDIwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YTAsIDB4ZWEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHhlYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MjYsIDB4MDEsIDB4NmUsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhmYiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBlLCAweDgyLCAweDMyLAotCTB4MDAsIDB4ZTAsIDB4MDMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4YTIsIDB4MGQsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4MDAsIDB4ODIsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg5LCAweDYwLCAweDM4LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTQsIDB4MTcsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDBhLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYzLCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDA1LCAweDMwLCAweDMwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4YTQsIDB4MDMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhjZSwgMHgyYywgMHgzMiwKLQkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDBkLCAweDkwLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHgzMiwKLQkweDFkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGE0LCAweDE3LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxMCwgMHgwMSwgMHg4MCwgMHgyMiwgMHgwMSwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDE4LCAweDBmLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGYsIDB4MWQsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHhlMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4MjAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4YiwgMHhlYSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweGVhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweDMyLAotCTB4ZWUsIDB4ZmYsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweGVlLCAweGZmLCAweDhhLCAweDExLCAweDA0LCAweDExLCAweDAxLCAweDgwLCAweDgyLCAweDBkLCAweDZlLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OSwgMHg0ZCwgMHgwZCwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDJiLCAweDBmLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgwZiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweDAyLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgzNSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4M2EsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzUsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweDdjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDU4LCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgwZiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg1ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NTksIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2NSwgMHgwZiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDY0LCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg0ZCwgMHgwZiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHg2ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTcsIDB4ZDIsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NzksIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDg0LCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDRkLCAweDBmLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAotCTB4MDAsIDB4MDAsIDB4ODksIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4YTgsIDB4NjAsIDB4OGEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4YSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhkLCAweDBmLCAweDJmLCAweGE4LCAweDAxLCAweDIwLCAweDk5LCAweDIyLCAweDZlLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5MiwgMHgwZiwgMHgyMywgMHgyMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwNCwgMHgyMSwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OWEsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg5OSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MTksIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHg3NSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweGVlLCAweDA1LCAweGFmLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweGY1LCAweGJjLAotCTB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhiMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHgwOSwgMHg5MiwKLQkweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4ODAsIDB4MDksIDB4MzIsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhjMCwgMHg4NywgMHhjZCwgMHgwMCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYwLCAweGMwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHg1MiwgMHg4MSwgMHg5NywgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNhLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDUyLCAweDgyLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDgsIDB4YjEsIDB4MGYsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgwZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ODcsIDB4Y2QsIDB4MDAsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDUyLCAweDgxLCAweDJhLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4M2EsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzNiwKLQkweDAwLCAweDAwLCAweGJiLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDA0LCAweDE5LCAweDQwLCAweDkwLCAweGJjLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZSwgMHg4MCwgMHg5NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4OSwgMHg0ZCwgMHg5MiwgMHgzYywKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDRkLCAweDkyLCAweDM2LAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODksIDB4NGQsIDB4OTIsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOCwgMHg5YiwgMHg4MSwgMHhiMiwgMHhlNCwgMHg3OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDliLCAweDhkLCAweGI3LCAweGU0LCAweDc4LCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGUsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDU5LCAweDAwLCAweDkwLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MGYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHgyOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4ZGQsIDB4MGYsIDB4ODYsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDksIDB4ODAsIDB4MmYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGYsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhlNywgMHgwZiwgMHhjMywgMHgwNywgMHgwMSwgMHhlYywgMHhiNiwgMHhlNCwgMHg2ZSwgMHg5YSwKLQkweDAwLCAweDAwLCAweGU3LCAweDBmLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweGI2LCAweGU0LCAweDZlLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NTIsIDB4ODAsIDB4OTAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwNSwgMHg4MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4OTIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhmYSwgMHg5MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGZhLCAweDkyLCAweGJjLAotCTB4NDQsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4ZDIsCi0JMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDkyLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlYywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ZTgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHhjMCwgMHhlOCwgMHgzMiwKLQkweDAyLCAweDAwLCAweGYxLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmNiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHhmOSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDRhLCAweGQwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MzQsIDB4YjAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweGZkLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDJiLCAweGI3LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4ODQsIDB4YzAsIDB4MzcsIDB4YWMsIDB4YjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDRkLCAweGIwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDY5LCAweDgxLCAweDk3LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4MGIsIDB4MDAsIDB4N2MsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwZSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGU0LCAweGIwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MTMsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDAsIDB4MDAsIDB4MTYsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGQsIDB4NDAsIDB4ZDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDFkLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDM0LCAweGIwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDBkLCAweDQwLCAweGQwLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgxZCwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDg0LCAweGMwLCAweDM3LCAweGFjLCAweGIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHg0ZCwgMHhiMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDI1LCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGIwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4YjAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg2OSwgMHg4MSwgMHg5NywgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDBiLCAweDAwLCAweDdjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4MjUsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHgyYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGIwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg1NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MSwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg5MiwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDkyLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDk3LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4OTIsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDNhLAotCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg5MiwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDM4LCAweDgwLCAweDg3LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2MsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHhlNSwgMHg4MywgMHgzOSwKLQkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQxLCAweDAyLCAweDg0LCAweGU2LCAweGExLCAweDk3LCAweGI5LAotCTB4MDAsIDB4MDAsIDB4NDMsIDB4MTAsIDB4MzYsIDB4NTEsIDB4MDEsIDB4ZTgsIDB4MTYsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgxMCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4MTAsIDB4MzgsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMxLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDcyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkyLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDQwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NDEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NTcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHg5MiwgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE5LCAweGEwLCAweDJjLCAweGQ5LAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTAsIDB4OWQsIDB4MTEsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MSwgMHgxMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweDFjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4MTAsIDB4MmMsIDB4Y2QsIDB4MDEsIDB4MTgsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjOSwgMHhjMSwgMHg5MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDY3LCAweDEwLCAweDNiLCAweDI5LCAweDAyLCAweDA0LCAweDA5LCAweDgwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4ZDYsIDB4MDEsIDB4ODAsIDB4NTIsIDB4YzAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHg1NiwgMHhjMCwgMHg2ZSwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGI5LCAweGMxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4NzcsIDB4MTAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg2YiwgMHgxMCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNywgMHhlMCwgMHg5MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgxMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg5MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg3MSwgMHgxMCwgMHgzOSwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4YzksIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMSwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDc0LCAweDEwLCAweDNiLCAweDIxLCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MDAsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg3OCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDcyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3YiwgMHgxMCwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg5YiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDc4LCAweDI5LCAweDAwLCAweDZlLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4N2IsIDB4MTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4YTUsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDc4LCAweDQ5LCAweDIxLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTksIDB4YTUsIDB4OTAsIDB4M2YsCi0JMHgwMCwgMHgwMCwgMHg4MiwgMHgxMCwgMHgwNCwgMHgyMCwgMHgwMiwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHhiZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDU4LCAweGI4LCAweDliLCAweDkwLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4YTEsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4OCwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5NywgMHg3YywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweDcyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4NTgsIDB4YjgsIDB4OWIsIDB4OTAsIDB4NzYsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhiLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODksIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGIsIDB4MTAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4OTIsCi0JMHgxNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHg2NSwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweDdjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKLQkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGEyLCAweDEwLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4MTAsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGE0LCAweDEwLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDdhLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHg4MCwgMHhhOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MCwKLQkweDAwLCAweDAwLCAweGI3LCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgxMCwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDM0LAotCTB4M2IsIDB4MDAsIDB4YmEsIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGJhLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweGJkLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MzQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweDcwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCi0JMHgzYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCi0JMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MSwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHg3MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjZCwgMHgxMCwgMHgwNCwgMHgzOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDEwLCAweDJlLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODEsIDB4OTIsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhkNSwgMHgxMCwgMHgyNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODAsIDB4OTIsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAwLCAweGU3LCAweGEwLCAweDkyLCAweDc5LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDkwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGRmLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhkYSwgMHgxMCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NzksIDB4MGEsIDB4OTEsIDB4MzksCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzOSwgMHgwYiwgMHg5MSwgMHgzOSwKLQkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDU5LCAweDBhLCAweDkxLCAweDM5LAotCTB4MDksIDB4MDAsIDB4ZTUsIDB4MTAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4NjksIDB4MGIsIDB4OTEsIDB4YjksCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NiwgMHhhOCwgMHg4MiwgMHg4ZCwgMHg2YywgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGUwLCAweDA3LCAweDAwLCAweDkxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHg4MCwgMHhlYiwgMHgxMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyYSwgMHhiYywKLQkweDAwLCAweDAwLCAweGVjLCAweDEwLCAweGUxLCAweDI0LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MjQsIDB4ODYsIDB4YzgsIDB4ODYsIDB4OGQsIDB4MmEsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MTAsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDNjLCAweDAwLCAweDE0LCAweDI4LCAweDgwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZjYsIDB4MTAsIDB4ODAsIDB4MzksIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDAsIDB4ZTAsIDB4ZmQsIDB4MTAsIDB4MDQsIDB4MzgsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4NmUsIDB4YjAsCi0JMHgxMCwgMHgwMCwgMHhmZCwgMHgxMCwgMHg5ZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhlMiwgMHhhNSwgMHgyZiwgMHhiOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGVlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MDAsIDB4MTgsIDB4MDksIDB4MDAsIDB4NmUsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweGE4LCAweDAxLCAweDIwLCAweDA5LCAweDAwLCAweDZlLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweDdjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhiYywgMHgwMCwgMHgxNCwgMHgyOCwgMHg4MCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgwOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHg3MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MGYsIDB4MTEsIDB4MzMsIDB4Y2QsIDB4MDEsIDB4YmMsIDB4MDgsIDB4ODAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0ZSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyOSwgMHgyMiwgMHhlZSwgMHhkYywKLQkweDAwLCAweDAwLCAweDE0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4MDQsIDB4YjgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHg5ZiwgMHg3MSwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGE5LCAweDI0LCAweGVlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4NGUsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTksIDB4ODAsIDB4OTIsIDB4ZGYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDI4LCAweDExLCAweDA2LCAweDgwLCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTAsIDB4YmMsCi0JMHhlZSwgMHgwNSwgMHgyMCwgMHgxMSwgMHgwNiwgMHgwYywgMHgwMiwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDkwLCAweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgxOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4NDAsIDB4M2MsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOSwgMHhhNSwgMHg5MCwgMHg5YSwKLQkweDYwLCAweDg5LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjMsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgyMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTEsIDB4YTgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTksIDB4OGYsIDB4OTAsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhhMSwgMHg4OSwgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHhjMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweGMwLCAweDg5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTEsIDB4MDQsIDB4NzksIDB4MDEsIDB4ODAsIDB4ODIsIDB4MWIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgxMSwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4NzUsCi0JMHgwMCwgMHgwMCwgMHgzYywgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDNjLCAweDExLCAweGQ1LCAweDQxLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MTEsIDB4M2MsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweGMwLCAweDhiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHgzZCwgMHgxMSwgMHg5ZiwgMHg0MSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MCwgMHgyZiwgMHg3NCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4NywgMHhkMiwKLQkweDAwLCAweDAwLCAweDQ3LCAweDExLCAweDlmLCAweGQ4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHg0NywgMHgxMSwgMHg5ZiwgMHhlMCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTEsIDB4OWYsIDB4YjAsIDB4MDEsIDB4ODAsIDB4ZDIsIDB4MjEsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweDAwLCAweDAwLCAweDQ5LCAweDExLCAweDA2LCAweDY4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgxMSwgMHgzNywgMHhiMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4NywgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg1YiwgMHgxMSwgMHgwNCwgMHhjMSwgMHgwMSwgMHg4NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGU4LCAweDg2LCAweDhkLCAweDkyLCAweDM3LAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4OGQsIDB4OTIsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDJjLCAweDg5LCAweDhkLCAweDZlLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4MmMsIDB4YTksIDB4ZGIsIDB4OTIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgyOSwgMHhjMCwgMHg5MiwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDE5LCAweGZiLCAweDkyLCAweDNmLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjksIDB4ODAsIDB4OTIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhhOSwgMHhlNCwgMHg5MiwgMHgzZiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZmLCAweGNjLCAweDAxLCAweGU4LCAweDI2LCAweGZiLCAweDkyLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMiwgMHg4MCwgMHg5MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDI4LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4Y2MsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4Y2QsIDB4MmEsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhiYywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAxLCAweGJjLCAweDg4LCAweGRiLCAweDhiLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4YmMsIDB4ODgsIDB4ZGIsIDB4OGIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg2YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4OCwgMHhlMSwgMHg4YiwgMHhiYywKLQkweDAwLCAweDAwLCAweDZhLCAweDExLCAweDA0LCAweDBjLCAweDAyLCAweDQwLCAweGE4LCAweGRiLCAweDhiLCAweGJlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDQsIDB4ODgsIDB4MWIsIDB4ODQsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHg2OSwgMHgxMSwgMHgwNCwgMHhiMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGMyLCAweDgwLCAweDJmLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4NWIsIDB4ODAsIDB4N2MsCi0JMHgyOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDhiLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHgzOSwKLQkweGVlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweDcxLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhkOSwgMHg0YSwgMHg5MSwgMHgzOSwKLQkweDM5LCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDUsIDB4OTEsIDB4MzAsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHg0ZCwgMHg5MSwgMHgzNiwKLQkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDg5LCAweGNkLCAweDkzLCAweDNjLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4Y2QsIDB4OTMsIDB4MzYsCi0JMHgwNywgMHgwMCwgMHg3OSwgMHgxMSwgMHhmMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4OSwgMHhjZCwgMHg5MywgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDE4LCAweDliLCAweDgxLCAweDAyLCAweGU1LCAweDc4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MTgsIDB4OWIsIDB4OGQsIDB4MDcsIDB4ZTUsIDB4NzgsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZDksIDB4NGEsIDB4OTEsIDB4MzksCi0JMHgzYSwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQ1LCAweDkxLCAweDMwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ODksIDB4NGQsIDB4OTEsIDB4MzYsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHhjZCwgMHg5MywgMHgzYywKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweGNkLCAweDkzLCAweDM2LAotCTB4MDcsIDB4MDAsIDB4ODQsIDB4MTEsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODksIDB4Y2QsIDB4OTMsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOSwgMHg5YiwgMHg4MSwgMHgwMiwgMHhlNSwgMHg3OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDE4LCAweDliLCAweDhkLCAweDA3LCAweGU1LCAweDc4LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBmLCAweDQwLCAweGZiLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MGYsIDB4NDAsIDB4MTgsIDB4MzIsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDVmLCAweGNhLCAweGY5LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDQxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDBmLCAweDgwLCAweDJhLCAweDMyLAotCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHg5OCwgMHgxMSwgMHg5NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwZiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDEsIDB4ODQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHhmYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGZhLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4ZmIsIDB4MzIsCi0JMHgwMSwgMHgwMCwgMHhjZiwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4ZiwgMHg0ZCwgMHhmYiwgMHhiMCwKLQkweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGNkLCAweGIwLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NWIsIDB4Y2EsIDB4YjAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHhmZSwgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YmUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHgwMCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNmLCAweDUyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgxNiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKLQkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4YjksIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHgwZCwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweDBkLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MGEsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4ZmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM5LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhjMCwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NmIsIDB4NDEsIDB4OTAsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM1LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHhjOSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM4LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAyLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGJjLCAweDBmLCAweDI0LCAweDE3LCAweGI4LAotCTB4MDYsIDB4MDAsIDB4YzIsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NjQsIDB4MTYsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHhmYiwgMHhiYywKLQkweDIwLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZiLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhkMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHhmOSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGI3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAzLCAweDMyLAotCTB4NDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkZSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZGUsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUwLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDRjLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweGIzLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4Y2IsIDB4YzEsIDB4YjAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4YjAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweGVmLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDIsIDB4MDAsIDB4ZjIsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGYsIDB4NGQsIDB4ZmIsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MWYsIDB4NDAsIDB4ZmIsIDB4MzUsCi0JMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGIsIDB4YzEsIDB4YjAsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhiYiwgMHgxMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmYSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZhLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4ZjksIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhiNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweGJkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGZmLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweGJjLAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDBjLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGZhLCAweGIyLAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwZSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDFiLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4M2MsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHg4ZSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyOCwgMHhiMiwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4ZiwgMHg0ZCwgMHhmYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGY3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDIwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDgsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDBlLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwYiwgMHgwMCwgMHgxNCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKLQkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDI3LCAweDAwLCAweDE4LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDBmLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgyMCwgMHgwMCwgMHgxZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGZhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg1YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHgzYSwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGFjLCAweDhmLCAweGNkLCAweGY5LCAweDUwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4M2EsCi0JMHgwZiwgMHgwMCwgMHgyYiwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHgyYiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4YzAsIDB4ZjksIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2EsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgzYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDJiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTIsIDB4ODQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHhjMCwgMHhmOSwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NzMsIDB4M2UsIDB4MDAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweDNhLAotCTB4NzAsIDB4MDAsIDB4M2IsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4YzAsIDB4MjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4ZmEsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg3MywgMHg3ZSwgMHhmYSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ODUsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwZSwgMHgwMCwgMHg1MywgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDRkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDNmLCAweGMwLCAweGY5LCAweDlhLAotCTB4MWMsIDB4MDAsIDB4NGQsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmEsIDB4YmMsCi0JMHgwMiwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4ZiwgMHhjZCwgMHhmOSwgMHhkYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDBlLCAweDAwLCAweDViLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg5YSwKLQkweDI2LCAweDAwLCAweDU3LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwZiwgMHg0MCwgMHgyOSwgMHgzMiwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg1NiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDI5LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MTgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4NmIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDZiLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4M2UsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHgzZSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUzLCAweDBhLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MGYsIDB4ODAsIDB4MmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKLQkweDcxLCAweDEyLCAweDk3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDBmLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDcsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NGQsIDB4MjksIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxZiwgMHgwMCwgMHhmYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDgwLCAweDJhLCAweDkyLAotCTB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDg0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MWYsIDB4MDAsIDB4N2EsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4MjksIDB4YmMsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZiwgMHhjZCwgMHhmYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDc2LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4M2EsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDgyLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhhLCAweGZhLCAweGJjLAotCTB4YTIsIDB4NjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHg4MiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGEzLCAweDNlLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YTMsIDB4M2UsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NDAsIDB4MmYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YiwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJmLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmMsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDJkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDJkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4ZmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZiwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAyLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2YsIDB4NTIsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHhmOCwgMHgzMiwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4YzAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDlmLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJiLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OWMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHhmYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAyLCAweDAwLCAweGZiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGIxLCAweDEyLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGI1LCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwZiwgMHg0MCwgMHhmYiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjYiwgMHhjMSwgMHhiMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHhiMCwgMHhkMiwKLQkweDAwLCAweDAwLCAweGJlLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgzNCwgMHhiMCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHhjMCwgMHgzNywgMHhhYywgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDAwLCAweDAwLCAweDMyLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4NGQsIDB4YjAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweGNkLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgxMiwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGQwLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MGQsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4YjgsCi0JMHgwMiwgMHgwMCwgMHhjZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwZiwgMHgyNCwgMHgxNywgMHhiOCwKLQkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDBmLCAweDY0LCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4YzAsIDB4ZmIsIDB4YmMsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLX0sCi17Ci0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLX0sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuYyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKaW5kZXggMWUwY2ZjZC4uMDA1MGEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5jCkBAIC0zMCw2ICszMCw4IEBACiAgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCiAgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCiAgKgorICogUGFydHMgZGV2ZWxvcGVkIGJ5IExpblN5c1NvZnQgU2FoYXJhIHRlYW0KKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC00Niw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNjEsMTAxICs2NCwxMjIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KIAotI2RlZmluZSBTTElDX0RVTVBfRU5BQkxFRAkJMAogI2RlZmluZSBTTElDX0dFVF9TVEFUU19FTkFCTEVECQkwCiAjZGVmaW5lIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCTEKICNkZWZpbmUgU1hHX09GRkxPQURfSVBfQ0hFQ0tTVU0JCTAKICNkZWZpbmUgU1hHX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkwCiAjZGVmaW5lIFZQQ0kJCQkJMAotI2RlZmluZSBEQkcJCQkJMQogI2RlZmluZSBBVEtfREVCVUcJCQkxCisjZGVmaW5lIFNYR19VQ09ERV9ERUJVRwkJMAorCiAKICNpbmNsdWRlICJzeGdfb3MuaCIKICNpbmNsdWRlICJzeGdody5oIgogI2luY2x1ZGUgInN4Z2hpZi5oIgogI2luY2x1ZGUgInN4Zy5oIgogI2luY2x1ZGUgInN4Z2RiZy5oIgotCi0jaW5jbHVkZSAic3hncGh5Y29kZS5oIgotI2luY2x1ZGUgInNhaGFyYWRiZ2Rvd25sb2FkLmgiCisjaW5jbHVkZSAic3hncGh5Y29kZS0xLjIuaCIKIAogc3RhdGljIGludCBzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgU2l6ZSwKLQkJCQkgICAgICBlbnVtIFNYR19CVUZGRVJfVFlQRSBCdWZmZXJUeXBlKTsKLXN0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB2b2lkICpSY3ZCbG9jaywKLQkJCQkJICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCi0JCQkJCSAgIHUzMiBMZW5ndGgpOworCQkJCSAgICAgIGVudW0gc3hnX2J1ZmZlcl90eXBlIEJ1ZmZlclR5cGUpOworc3RhdGljIGludCBzeGdfYWxsb2NhdGVfcmN2YmxvY2tfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQkJCXZvaWQgKlJjdkJsb2NrLAorCQkJCQkJZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJCQl1MzIgTGVuZ3RoKTsKIHN0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCi0JCQkJCSAgICAgc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiAqU3hnU2dsLAorCQkJCQkgICAgIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgKlN4Z1NnbCwKIAkJCQkJICAgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKIAkJCQkJICAgICB1MzIgTGVuZ3RoKTsKIAogc3RhdGljIHZvaWQgc3hnX21jYXN0X2luaXRfY3JjMzIodm9pZCk7Ci0KLXN0YXRpYyBpbnQgc3hnX2VudHJ5X29wZW4ocF9uZXRfZGV2aWNlIGRldik7Ci1zdGF0aWMgaW50IHN4Z19lbnRyeV9oYWx0KHBfbmV0X2RldmljZSBkZXYpOwotc3RhdGljIGludCBzeGdfaW9jdGwocF9uZXRfZGV2aWNlIGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgaW50IHN4Z19zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgcF9uZXRfZGV2aWNlIGRldik7CitzdGF0aWMgaW50IHN4Z19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzeGdfc2Vjb25kX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBzeGdfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc3hnX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCBzeGdfc2VuZF9wYWNrZXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzeGdfdHJhbnNtaXRfcGFja2V0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgc3hnX2R1bWJfc2dsKHN0cnVjdCBTQ0FUVEVSX0dBVEhFUl9MSVNUICpwU2dsLCBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSICpTeGdTZ2wpOworc3RhdGljIGludCBzeGdfZHVtYl9zZ2woc3RydWN0IHN4Z194NjRfc2dsICpwU2dsLAorCQkJCXN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgKlN4Z1NnbCk7CiAKLXN0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50ICp3b3JrX2RvbmUsCisJCQkJCSBpbnQgYnVkZ2V0KTsKK3N0YXRpYyB2b2lkIHN4Z19pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgaW50IHN4Z19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiBzdGF0aWMgaW50IHN4Z19wcm9jZXNzX2lzcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgTWVzc2FnZUlkKTsKLXN0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIFJzc0lkKTsKK3N0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIFJzc0lkLAorCQkJIGludCAqc3hnX25hcGlfY29udGludWUsIGludCAqd29ya19kb25lLCBpbnQgYnVkZ2V0KTsKIHN0YXRpYyB2b2lkIHN4Z19jb21wbGV0ZV9zbG93X3NlbmQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7Ci1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN4Z19zbG93X3JlY2VpdmUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgc3RydWN0IFNYR19FVkVOVCAqRXZlbnQpOworc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCisJCQkJCXN0cnVjdCBzeGdfZXZlbnQgKkV2ZW50KTsKIHN0YXRpYyB2b2lkIHN4Z19wcm9jZXNzX3Jjdl9lcnJvcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgRXJyb3JTdGF0dXMpOwogc3RhdGljIGJvb2wgc3hnX21hY19maWx0ZXIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCSAgIHN0cnVjdCBldGhlcl9oZWFkZXIgKkV0aGVySGRyLCB1c2hvcnQgbGVuZ3RoKTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3hnX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7Cit2b2lkIHN4Z19mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3ZvaWQgc3hnX2ZyZWVfcmN2YmxvY2tzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwordm9pZCBzeGdfZnJlZV9zZ2xfYnVmZmVycyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3ZvaWQgc3hnX3VubWFwX3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3ZvaWQgc3hnX2ZyZWVfbWNhc3RfYWRkcnMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7Cit2b2lkIHN4Z19jb2xsZWN0X3N0YXRpc3RpY3Moc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgaW50IHN4Z19yZWdpc3Rlcl9pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfcmVtb3ZlX2lzcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBzeGdfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLSNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN4Z19nZXRfc3RhdHMocF9uZXRfZGV2aWNlIGRldik7Ci0jZW5kaWYKK3N0YXRpYyB2b2lkIHN4Z193YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgc3hnX3VwZGF0ZV9saW5rX3N0YXR1cyAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogI2RlZmluZSBYWFhUT0RPIDAKIAogI2lmIFhYWFRPRE8KLXN0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhwX25ldF9kZXZpY2UgZGV2LCB2b2lkICpwdHIpOwotc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9saXN0KHBfbmV0X2RldmljZSBkZXYpOworc3RhdGljIGludCBzeGdfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cik7CiAjZW5kaWYKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotc3RhdGljIHZvaWQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKLQotc3RhdGljIHZvaWQgc3hnX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgaW50IHN4Z19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CiAKIHN0YXRpYyBpbnQgc3hnX2luaXRpYWxpemVfYWRhcHRlcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIHN0YXRpYyB2b2lkIHN4Z19zdG9ja19yY3ZfYnVmZmVycyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIHN0YXRpYyB2b2lkIHN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJCQkgICB1bnNpZ25lZCBjaGFyIEluZGV4KTsKK2ludCBzeGdfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9saW5rKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwogc3RhdGljIGludCBzeGdfcGh5X2luaXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CiBzdGF0aWMgdm9pZCBzeGdfbGlua19ldmVudChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIHN0YXRpYyBlbnVtIFNYR19MSU5LX1NUQVRFIHN4Z19nZXRfbGlua19zdGF0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHN4Z19saW5rX3N0YXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIGVudW0gU1hHX0xJTktfU1RBVEUgTGlua1N0YXRlKTsKK3N0YXRpYyB2b2lkIHN4Z19saW5rX3N0YXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCisJCQkJZW51bSBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpOwogc3RhdGljIGludCBzeGdfd3JpdGVfbWRpb19yZWcoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCSAgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyIFZhbHVlKTsKIHN0YXRpYyBpbnQgc3hnX3JlYWRfbWRpb19yZWcoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCSAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgKnBWYWx1ZSk7CitzdGF0aWMgdm9pZCBzeGdfc2V0X21jYXN0X2FkZHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3hnX2ZpcnN0X2luaXQgPSAxOwogc3RhdGljIGNoYXIgKnN4Z19iYW5uZXIgPQotICAgICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyIGFuZCBTdG9yYWdlIDEwR2JlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpXG4iOworICAgICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyIGFuZCBTdG9yYWdlIFwKKwkgMTBHYmUgQWNjZWxlcmF0b3IgKE5vbi1BY2NlbGVyYXRlZClcbiI7CiAKIHN0YXRpYyBpbnQgc3hnX2RlYnVnID0gMTsKIHN0YXRpYyBpbnQgZGVidWcgPSAtMTsKLXN0YXRpYyBwX25ldF9kZXZpY2UgaGVhZF9uZXRkZXZpY2UgPSBOVUxMOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpoZWFkX25ldGRldmljZSA9IE5VTEw7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3hnYmFzZV9kcml2ZXJfdCBzeGdfZ2xvYmFsID0geworc3RhdGljIHN0cnVjdCBzeGdiYXNlX2RyaXZlciBzeGdfZ2xvYmFsID0gewogCS5keW5hbWljX2ludGFnZyA9IDEsCiB9Owogc3RhdGljIGludCBpbnRhZ2dfZGVsYXkgPSAxMDA7CiBzdGF0aWMgdTMyIGR5bmFtaWNfaW50YWdnID0gMDsKIAotI2RlZmluZSBEUlZfTkFNRQkic3hnIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wLjEiCitjaGFyIHN4Z19kcml2ZXJfbmFtZVtdID0gInN4Z19uaWMiOwogI2RlZmluZSBEUlZfQVVUSE9SCSJBbGFjcml0ZWNoLCBJbmMuIEVuZ2luZWVyaW5nIgotI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkFsYWNyaXRlY2ggU0xJQyBUZWNob25vbG9neSh0bSkgTm9uLUFjY2VsZXJhdGVkIDEwR2JlIERyaXZlciIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0IDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKKyNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkJCQkJCVwKKwkiQWxhY3JpdGVjaCBTTElDIFRlY2hvbm9sb2d5KHRtKSBOb24tQWNjZWxlcmF0ZWQgMTBHYmUgRHJpdmVyIgorI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkJCQkJCVwKKwkiQ29weXJpZ2h0IDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKIAogTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpAQCAtMTczLDEyICsxOTcsNiBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc3hnX3BjaV90YmwpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogc3RhdGljIGlubGluZSB2b2lkIHN4Z19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCBib29sIGZsdXNoKQogewogCXdyaXRlbCh2YWx1ZSwgcmVnKTsKQEAgLTIyNSwxNyArMjQzLDE0MyBAQAogfQogCiAvKiBTWEcgR2xvYmFscyAqLwotc3RhdGljIHN0cnVjdCBTWEdfRFJJVkVSIFN4Z0RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3Qgc3hnX2RyaXZlciBTeGdEcml2ZXI7CiAKICNpZmRlZiAgQVRLREJHCi1zdGF0aWMgc3RydWN0IHN4Z190cmFjZV9idWZmZXJfdCBMU3hnVHJhY2VCdWZmZXI7CitzdGF0aWMgc3RydWN0IHN4Z190cmFjZV9idWZmZXIgTFN4Z1RyYWNlQnVmZmVyOwogI2VuZGlmIC8qIEFUS0RCRyAqLwotc3RhdGljIHN0cnVjdCBzeGdfdHJhY2VfYnVmZmVyX3QgKlN4Z1RyYWNlQnVmZmVyID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlciAqU3hnVHJhY2VCdWZmZXIgPSBOVUxMOworCisvKgorICogTVNJIFJlbGF0ZWQgQVBJJ3MKKyAqLworaW50IHN4Z19yZWdpc3Rlcl9pbnRyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOworaW50IHN4Z19lbmFibGVfbXNpX3goc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitpbnQgc3hnX2FkZF9tc2lfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwordm9pZCBzeGdfcmVtb3ZlX21zaXhfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOworaW50IHN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CisKK2ludCBzeGdfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IHJldDsKKworCXJldCA9IHN4Z19lbmFibGVfbXNpX3goYWRhcHRlcik7CisJaWYgKHJldCAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlhZGFwdGVyLT5tc2lfZW5hYmxlZCA9IEZBTFNFOworCQlEQkdfRVJST1IoInN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkgTVNJLVggRGlzYWJsZVxuIik7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+bXNpX2VuYWJsZWQgPSBUUlVFOworCQlEQkdfRVJST1IoInN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkgTVNJLVggRW5hYmxlXG4iKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHN4Z19yZWdpc3Rlcl9pbnRyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoYWRhcHRlci0+bXNpX2VuYWJsZWQpIHsKKwkJcmV0ID0gc3hnX2FkZF9tc2lfaXNyKGFkYXB0ZXIpOworCX0KKwllbHNlIHsKKwkJREJHX0VSUk9SKCJNU0ktWCBFbmFibGUgRmFpbGVkLiBVc2luZyBQaW4gSU5UXG4iKTsKKwkJcmV0ID0gc3hnX3JlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwkJaWYgKHJldCAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQkJREJHX0VSUk9SKCJzeGdfcmVnaXN0ZXJfaW50ZXJydXB0IEZhaWxlZFxuIik7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHN4Z19lbmFibGVfbXNpX3goc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCisJYWRhcHRlci0+bnJfbXNpeF9lbnRyaWVzID0gMTsKKwlhZGFwdGVyLT5tc2lfZW50cmllcyA9ICBrbWFsbG9jKGFkYXB0ZXItPm5yX21zaXhfZW50cmllcyAqCisJCQkJCXNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwdGVyLT5tc2lfZW50cmllcykgeworCQlEQkdfRVJST1IoIiVzOk1TSSBFbnRyaWVzIG1lbW9yeSBhbGxvY2F0aW9uIEZhaWxlZFxuIixfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoYWRhcHRlci0+bXNpX2VudHJpZXMsIDAsIGFkYXB0ZXItPm5yX21zaXhfZW50cmllcyAqCisJCXNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOworCisJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBjaWRldiwgYWRhcHRlci0+bXNpX2VudHJpZXMsCisJCQkJYWRhcHRlci0+bnJfbXNpeF9lbnRyaWVzKTsKKwlpZiAocmV0KSB7CisJCURCR19FUlJPUigiRW5hYmxpbmcgTVNJLVggd2l0aCAlZCB2ZWN0b3JzIGZhaWxlZFxuIiwKKwkJCQlhZGFwdGVyLT5ucl9tc2l4X2VudHJpZXMpOworCQkvKlNob3VsZCB0cnkgd2l0aCBsZXNzIHZlY3RvciByZXR1cm5lZC4qLworCQlrZnJlZShhZGFwdGVyLT5tc2lfZW50cmllcyk7CisJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsgLypNU0ktWCBFbmFibGUgZmFpbGVkLiovCisJfQorCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCitpbnQgc3hnX2FkZF9tc2lfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IHJldCxpOworCisJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlmb3IgKGk9MDsgaTxhZGFwdGVyLT5ucl9tc2l4X2VudHJpZXM7IGkrKykgeworCQkJcmV0ID0gcmVxdWVzdF9pcnEgKGFkYXB0ZXItPm1zaV9lbnRyaWVzW2ldLnZlY3RvciwKKwkJCQkJc3hnX2lzciwKKwkJCQkJSVJRRl9TSEFSRUQsCisJCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkJYWRhcHRlci0+bmV0ZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlEQkdfRVJST1IoInN4ZzogTVNJLVggcmVxdWVzdF9pcnEgKCVzKSAiCisJCQkJCSJGQUlMRUQgWyV4XVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJCQkgcmV0KTsKKwkJCQlyZXR1cm4gKHJldCk7CisJCQl9CisJCX0KKwl9CisJYWRhcHRlci0+bXNpX2VuYWJsZWQgPSBUUlVFOworCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMTsKKwlhZGFwdGVyLT5JbnRSZWdpc3RlcmVkID0gVFJVRTsKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKwordm9pZCBzeGdfcmVtb3ZlX21zaXhfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IGksdmVjdG9yOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlmb3IoaT0wOyBpPCBhZGFwdGVyLT5ucl9tc2l4X2VudHJpZXM7aSsrKQorCXsKKwkJdmVjdG9yID0gYWRhcHRlci0+bXNpX2VudHJpZXNbaV0udmVjdG9yOworCQlEQkdfRVJST1IoIiVzIDogRnJlZWluZyBJUlEgdmVjdG9yIyVkXG4iLF9fRlVOQ1RJT05fXyx2ZWN0b3IpOworCQlmcmVlX2lycSh2ZWN0b3IsbmV0ZGV2KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc3hnX3JlbW92ZV9pc3Ioc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWlmIChhZGFwdGVyLT5tc2lfZW5hYmxlZCkKKwkJc3hnX3JlbW92ZV9tc2l4X2lzcihhZGFwdGVyKTsKKwllbHNlCisJCWZyZWVfaXJxKGFkYXB0ZXItPm5ldGRldi0+aXJxLCBuZXRkZXYpOworfQorCit2b2lkIHN4Z19yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5tc2lfZW5hYmxlZCkgeworCQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBjaWRldik7CisJCWtmcmVlKGFkYXB0ZXItPm1zaV9lbnRyaWVzKTsKKwkJYWRhcHRlci0+bXNpX2VudHJpZXMgPSBOVUxMOworCX0KKwlyZXR1cm47Cit9CiAKIC8qCiAgKiBzeGdfZG93bmxvYWRfbWljcm9jb2RlCiAgKgotICogRG93bmxvYWQgTWljcm9jb2RlIHRvIFNhaGFyYSBhZGFwdGVyCisgKiBEb3dubG9hZCBNaWNyb2NvZGUgdG8gU2FoYXJhIGFkYXB0ZXIgdXNpbmcgdGhlIExpbnV4CisgKiBGaXJtd2FyZSBtb2R1bGUgdG8gZ2V0IHRoZSB1Y29kZS5zeXMgZmlsZS4KICAqCiAgKiBBcmd1bWVudHMgLQogICoJCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQpAQCAtMjQ0LDk4ICszODgsMTQxIEBACiAgKiBSZXR1cm4KICAqCWludAogICovCi1zdGF0aWMgYm9vbCBzeGdfZG93bmxvYWRfbWljcm9jb2RlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIGVudW0gU1hHX1VDT0RFX1NFTCBVY29kZVNlbCkKK3N0YXRpYyBib29sIHN4Z19kb3dubG9hZF9taWNyb2NvZGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQkJCWVudW0gU1hHX1VDT0RFX1NFTCBVY29kZVNlbCkKIHsKLQlzdHJ1Y3QgU1hHX0hXX1JFR1MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IGNoYXIgKmZpbGUgPSAiIjsKKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwlpbnQgcmV0OworCWludCB1Y29kZV9zdGFydDsKIAl1MzIgU2VjdGlvbjsKIAl1MzIgVGhpc1NlY3Rpb25TaXplOwotCXUzMiAqSW5zdHJ1Y3Rpb24gPSBOVUxMOworCXUzMiBpbnN0cnVjdGlvbiA9IDA7CiAJdTMyIEJhc2VBZGRyZXNzLCBBZGRyZXNzT2Zmc2V0LCBBZGRyZXNzOwotLyogICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgRmFpbHVyZTsgKi8KKwkvKiB1MzIgRmFpbHVyZTsgKi8KIAl1MzIgVmFsdWVSZWFkOwogCXUzMiBpOwotCXUzMiBudW1TZWN0aW9ucyA9IDA7CisJdTMyIGluZGV4ID0gMDsKKwl1MzIgbnVtX3NlY3Rpb25zID0gMDsKIAl1MzIgc2VjdGlvblNpemVbMTZdOwogCXUzMiBzZWN0aW9uU3RhcnRbMTZdOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRG5sZFVjb2QiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwotCURCR19FUlJPUigic3hnOiAlcyBFTlRFUlxuIiwgX19mdW5jX18pOwogCi0Jc3dpdGNoIChVY29kZVNlbCkgewotCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToJLyogU2FoYXJhIG9wZXJhdGlvbmFsIHVjb2RlICovCi0JCW51bVNlY3Rpb25zID0gU051bVNlY3Rpb25zOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtU2VjdGlvbnM7IGkrKykgewotCQkJc2VjdGlvblNpemVbaV0gPSBTU2VjdGlvblNpemVbaV07Ci0JCQlzZWN0aW9uU3RhcnRbaV0gPSBTU2VjdGlvblN0YXJ0W2ldOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkgICAgICAgIjogV29haCwgYmlnIGVycm9yIHdpdGggdGhlIG1pY3JvY29kZSFcbiIpOwotCQlicmVhazsKKwkvKgorCSAqICBUaGlzIHJvdXRpbmUgaXMgb25seSBpbXBsZW1lbnRlZCB0byBkb3dubG9hZCB0aGUgbWljcm9jb2RlCisJICogIGZvciB0aGUgUmV2aXNpb24gQiBTYWhhcmEgY2hpcC4gIFJldiBBIGFuZCBEaWFnbm9zdGljCisJICogIG1pY3JvY29kZSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4gIElmIFJldiBBIG9yCisJICogIGRpYWdub3N0aWMgdWNvZGUgaXMgcmVxdWlyZWQsIHRoaXMgcm91dGluZSB3aWxsIG9idmlvdXNseQorCSAqICBuZWVkIHRvIGNoYW5nZS4gIEFsc28sIGV2ZW50dWFsbHkgbmVlZCB0byBhZGQgc3VwcG9ydCBmb3IKKwkgKiAgUmV2IEIgY2hlY2tlZCB2ZXJzaW9uIG9mIHVjb2RlLiAgVGhhdCdzIGVhc3kgZW5vdWdoIG9uY2UKKwkgKiAgdGhlIGZyZWUgdmVyc2lvbiBvZiBSZXYgQiB3b3Jrcy4KKwkgKi8KKwlBU1NFUlQoVWNvZGVTZWwgPT0gU1hHX1VDT0RFX1NZU1RFTSk7CisJQVNTRVJUKGFkYXB0ZXItPmFzaWN0eXBlID09IFNBSEFSQV9SRVZfQik7CisjaWYgU1hHX1VDT0RFX0RFQlVHCisJZmlsZSA9ICJzeGcvc2FoYXJhZGJnZG93bmxvYWRCLnN5cyI7CisjZWxzZQorCWZpbGUgPSAic3hnL3NhaGFyYWRvd25sb2FkQi5zeXMiOworI2VuZGlmCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGUsICZhZGFwdGVyLT5wY2lkZXYtPmRldik7CisJaWYgKHJldCkgeworCQlEQkdfRVJST1IoIiVzIFNYR19OSUM6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzXG4iLCBfX2Z1bmNfXyxmaWxlKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQlEQkdfRVJST1IoInN4ZzogUkVTRVQgVEhFIENBUkRcbiIpOworCS8qCisJICogIFRoZSBtaWNyb2NvZGUgLnN5cyBmaWxlIGNvbnRhaW5zIHN0YXJ0cyB3aXRoIGEgNCBieXRlIHdvcmQgY29udGFpbmluZworCSAqICB0aGUgbnVtYmVyIG9mIHNlY3Rpb25zLiBUaGF0IGlzIGZvbGxvd2VkIGJ5ICJudW1fc2VjdGlvbnMiIDQgYnl0ZQorCSAqICB3b3JkcyBjb250YWluaW5nIGVhY2ggInNlY3Rpb24iIHNpemUuICBUaGF0IGlzIGZvbGxvd2VkIG51bV9zZWN0aW9ucworCSAqICA0IGJ5dGUgd29yZHMgY29udGFpbmluZyBlYWNoIHNlY3Rpb24gInN0YXJ0IiBhZGRyZXNzLgorCSAqCisJICogIEZvbGxvd2luZyB0aGUgYWJvdmUgaGVhZGVyLCB0aGUgLnN5cyBmaWxlIGNvbnRhaW5zIG51bV9zZWN0aW9ucywKKwkgKiAgd2hlcmUgZWFjaCBzZWN0aW9uIHNpemUgaXMgc3BlY2lmaWVkLCBuZXdsaW5lIGRlbGluZWF0ZXRkIDEyIGJ5dGUKKwkgKiAgbWljcm9jb2RlIGluc3RydWN0aW9ucy4KKwkgKi8KKwludW1fc2VjdGlvbnMgPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwlpbmRleCArPSA0OworCUFTU0VSVChudW1fc2VjdGlvbnMgPD0gMyk7CisJZm9yIChpID0gMDsgaSA8IG51bV9zZWN0aW9uczsgaSsrKSB7CisJCXNlY3Rpb25TaXplW2ldID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCWluZGV4ICs9IDQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fc2VjdGlvbnM7IGkrKykgeworCQlzZWN0aW9uU3RhcnRbaV0gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJaW5kZXggKz0gNDsKKwl9CisKIAkvKiBGaXJzdCwgcmVzZXQgdGhlIGNhcmQgKi8KIAlXUklURV9SRUcoSHdSZWdzLT5SZXNldCwgMHhERUFELCBGTFVTSCk7CisJdWRlbGF5KDUwKTsKKwlId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CiAKLQkvKiBEb3dubG9hZCBlYWNoIHNlY3Rpb24gb2YgdGhlIG1pY3JvY29kZSBhcyBzcGVjaWZpZWQgaW4gKi8KLQkvKiBpdHMgZG93bmxvYWQgZmlsZS4gIFRoZSAqZG93bmxvYWQuYyBmaWxlIGlzIGdlbmVyYXRlZCB1c2luZyAqLwotCS8qIHRoZSBzYWhhcmFvYmp0b2MgZmFjaWxpdHkgd2hpY2ggY29udmVydHMgdGhlIG1ldGFzdGVwIC5vYmogKi8KLQkvKiBmaWxlIHRvIGEgLmMgZmlsZSB3aGljaCBjb250YWlucyBhIHR3byBkaW1lbnRpb25hbCBhcnJheS4gKi8KLQlmb3IgKFNlY3Rpb24gPSAwOyBTZWN0aW9uIDwgbnVtU2VjdGlvbnM7IFNlY3Rpb24rKykgewotCQlEQkdfRVJST1IoInN4ZzogU0VDVElPTiAjICVkXG4iLCBTZWN0aW9uKTsKLQkJc3dpdGNoIChVY29kZVNlbCkgewotCQljYXNlIFNYR19VQ09ERV9TQUhBUkE6Ci0JCQlJbnN0cnVjdGlvbiA9ICh1MzIgKikgJiBTYWhhcmFVQ29kZVtTZWN0aW9uXVswXTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KKwkvKgorCSAqIERvd25sb2FkIGVhY2ggc2VjdGlvbiBvZiB0aGUgbWljcm9jb2RlIGFzIHNwZWNpZmllZCBpbgorCSAqIHNlY3Rpb25TaXplW2luZGV4XSB0byBzZWN0aW9uU3RhcnRbaW5kZXhdIGFkZHJlc3MuICBBcworCSAqIGRlc2NyaWJlZCBhYm92ZSwgdGhlIC5zeXMgZmlsZSBjb250YWlucyAxMiBieXRlIHdvcmQKKwkgKiBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb25zLiBUaGUgKmRvd25sb2FkLnN5cyBmaWxlIGlzIGdlbmVyYXRlZAorCSAqIHVzaW5nIHRoZSBvYmp0b3N5cy5leGUgdXRpbGl0eSB0aGF0IHdhcyBidWlsdCBmb3IgU2FoYXJhCisJICogbWljcm9jb2RlLgorCSAqLworCS8qIFNlZSB1c2FnZSBvZiB0aGlzIGJlbG93IHdoZW4gd2UgcmVhZCBiYWNrIGZvciBwYXJpdHkgKi8KKwl1Y29kZV9zdGFydCA9IGluZGV4OworCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJaW5kZXggKz0gNDsKKworCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1fc2VjdGlvbnM7IFNlY3Rpb24rKykgewogCQlCYXNlQWRkcmVzcyA9IHNlY3Rpb25TdGFydFtTZWN0aW9uXTsKLQkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsJLyogU2l6ZSBpbiBpbnN0cnVjdGlvbnMgKi8KKwkJLyogU2l6ZSBpbiBpbnN0cnVjdGlvbnMgKi8KKwkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsKIAkJZm9yIChBZGRyZXNzT2Zmc2V0ID0gMDsgQWRkcmVzc09mZnNldCA8IFRoaXNTZWN0aW9uU2l6ZTsKIAkJICAgICBBZGRyZXNzT2Zmc2V0KyspIHsKKwkJCXUzMiBmaXJzdF9pbnN0ciA9IDA7ICAvKiBTZWUgY29tbWVudCBiZWxvdyAqLworCiAJCQlBZGRyZXNzID0gQmFzZUFkZHJlc3MgKyBBZGRyZXNzT2Zmc2V0OwogCQkJQVNTRVJUKChBZGRyZXNzICYgfk1JQ1JPQ09ERV9BRERSRVNTX01BU0spID09IDApOwotCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyAzMSAtIDAgKi8KLQkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgKkluc3RydWN0aW9uLCBGTFVTSCk7Ci0JCQkvKiBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyICovCi0JCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFNaWRkbGUsICooSW5zdHJ1Y3Rpb24gKyAxKSwKLQkJCQkgIEZMVVNIKTsKLQkJCS8qIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgOTUtNjQgKi8KLQkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUhpZ2gsICooSW5zdHJ1Y3Rpb24gKyAyKSwKLQkJCQkgIEZMVVNIKTsKKwkJCS8qIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgMzEgLSAwIChsb3cpICovCisJCQlmaXJzdF9pbnN0ciA9IGluc3RydWN0aW9uOworCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCBpbnN0cnVjdGlvbiwgRkxVU0gpOworCQkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJCWluZGV4ICs9IDQ7ICAvKiBBZHZhbmNlIHRvIHRoZSAibmV4dCIgaW5zdHJ1Y3Rpb24gKi8KKworCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA2My0zMiAobWlkZGxlKSAqLworCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTWlkZGxlLCBpbnN0cnVjdGlvbiwgRkxVU0gpOworCQkJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJCWluZGV4ICs9IDQ7ICAvKiBBZHZhbmNlIHRvIHRoZSAibmV4dCIgaW5zdHJ1Y3Rpb24gKi8KKworCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA5NS02NCAoaGlnaCkgKi8KKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUhpZ2gsIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsgIC8qIEFkdmFuY2UgdG8gdGhlICJuZXh0IiBpbnN0cnVjdGlvbiAqLworCiAJCQkvKiBXcml0ZSBpbnN0cnVjdGlvbiBhZGRyZXNzIHdpdGggdGhlIFdSSVRFIGJpdCBzZXQgKi8KIAkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwKIAkJCQkgIChBZGRyZXNzIHwgTUlDUk9DT0RFX0FERFJFU1NfV1JJVEUpLCBGTFVTSCk7Ci0JCQkvKiBTYWhhcmEgYnVnIGluIHRoZSB1Y29kZSBkb3dubG9hZCBsb2dpYyAtIHRoZSB3cml0ZSB0byBEYXRhTG93ICovCi0JCQkvKiBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgZ2V0IGNvcnJ1cHRlZC4gIFRvIGF2b2lkIHRoaXMsICovCi0JCQkvKiB3cml0ZSB0byBEYXRhTG93IGFnYWluIGZvciB0aGlzIGluc3RydWN0aW9uICh3aGljaCBtYXkgZ2V0ICovCi0JCQkvKiBjb3JydXB0ZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciksIHRoZW4gaW5jcmVtZW50IHRoZSBhZGRyZXNzICovCi0JCQkvKiBhbmQgd3JpdGUgdGhlIGRhdGEgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIHRvIERhdGFMb3cuICBUaGF0ICovCi0JCQkvKiB3cml0ZSBzaG91bGQgc3VjY2VlZC4gKi8KLQkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgKkluc3RydWN0aW9uLCBUUlVFKTsKLQkJCS8qIEFkdmFuY2UgMyB1MzJTIHRvIHN0YXJ0IG9mIG5leHQgaW5zdHJ1Y3Rpb24gKi8KLQkJCUluc3RydWN0aW9uICs9IDM7CisJCQkvKgorCQkJICogU2FoYXJhIGJ1ZyBpbiB0aGUgdWNvZGUgZG93bmxvYWQgbG9naWMgLSB0aGUgd3JpdGUgdG8gRGF0YUxvdworCQkJICogZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIGNvdWxkIGdldCBjb3JydXB0ZWQuICBUbyBhdm9pZCB0aGlzLAorCQkJICogd3JpdGUgdG8gRGF0YUxvdyBhZ2FpbiBmb3IgdGhpcyBpbnN0cnVjdGlvbiAod2hpY2ggbWF5IGdldAorCQkJICogY29ycnVwdGVkLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIpLCB0aGVuIGluY3JlbWVudCB0aGUgYWRkcmVzcworCQkJICogYW5kIHdyaXRlIHRoZSBkYXRhIGZvciB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0byBEYXRhTG93LiAgVGhhdAorCQkJICogd3JpdGUgc2hvdWxkIHN1Y2NlZWQuCisJCQkgKi8KKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgZmlyc3RfaW5zdHIsIEZMVVNIKTsKIAkJfQogCX0KLQkvKiBOb3cgcmVwZWF0IHRoZSBlbnRpcmUgb3BlcmF0aW9uIHJlYWRpbmcgdGhlIGluc3RydWN0aW9uIGJhY2sgYW5kICovCi0JLyogY2hlY2tpbmcgZm9yIHBhcml0eSBlcnJvcnMgKi8KLQlmb3IgKFNlY3Rpb24gPSAwOyBTZWN0aW9uIDwgbnVtU2VjdGlvbnM7IFNlY3Rpb24rKykgewotCQlEQkdfRVJST1IoInN4ZzogY2hlY2sgU0VDVElPTiAjICVkXG4iLCBTZWN0aW9uKTsKLQkJc3dpdGNoIChVY29kZVNlbCkgewotCQljYXNlIFNYR19VQ09ERV9TQUhBUkE6Ci0JCQlJbnN0cnVjdGlvbiA9ICh1MzIgKikgJiBTYWhhcmFVQ29kZVtTZWN0aW9uXVswXTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KKwkvKgorCSAqIE5vdyByZXBlYXQgdGhlIGVudGlyZSBvcGVyYXRpb24gcmVhZGluZyB0aGUgaW5zdHJ1Y3Rpb24gYmFjayBhbmQKKwkgKiBjaGVja2luZyBmb3IgcGFyaXR5IGVycm9ycworCSAqLworCWluZGV4ID0gdWNvZGVfc3RhcnQ7CisKKwlmb3IgKFNlY3Rpb24gPSAwOyBTZWN0aW9uIDwgbnVtX3NlY3Rpb25zOyBTZWN0aW9uKyspIHsKIAkJQmFzZUFkZHJlc3MgPSBzZWN0aW9uU3RhcnRbU2VjdGlvbl07Ci0JCVRoaXNTZWN0aW9uU2l6ZSA9IHNlY3Rpb25TaXplW1NlY3Rpb25dIC8gMTI7CS8qIFNpemUgaW4gaW5zdHJ1Y3Rpb25zICovCisJCS8qIFNpemUgaW4gaW5zdHJ1Y3Rpb25zICovCisJCVRoaXNTZWN0aW9uU2l6ZSA9IHNlY3Rpb25TaXplW1NlY3Rpb25dIC8gMTI7CiAJCWZvciAoQWRkcmVzc09mZnNldCA9IDA7IEFkZHJlc3NPZmZzZXQgPCBUaGlzU2VjdGlvblNpemU7CiAJCSAgICAgQWRkcmVzc09mZnNldCsrKSB7CiAJCQlBZGRyZXNzID0gQmFzZUFkZHJlc3MgKyBBZGRyZXNzT2Zmc2V0OwpAQCAtMzQ4LDYyICs1MzUsNzAgQEAKIAkJCQlEQkdfRVJST1IoInN4ZzogJXMgUEFSSVRZIEVSUk9SXG4iLAogCQkJCQkgIF9fZnVuY19fKTsKIAotCQkJCXJldHVybiAoRkFMU0UpOwkvKiBQYXJpdHkgZXJyb3IgKi8KKwkJCQlyZXR1cm4gRkFMU0U7CS8qIFBhcml0eSBlcnJvciAqLwogCQkJfQogCQkJQVNTRVJUKChWYWx1ZVJlYWQgJiBNSUNST0NPREVfQUREUkVTU19NQVNLKSA9PSBBZGRyZXNzKTsKIAkJCS8qIFJlYWQgdGhlIGluc3RydWN0aW9uIGJhY2sgYW5kIGNvbXBhcmUgKi8KKwkJCS8qIEZpcnN0IGluc3RydWN0aW9uICovCisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCBWYWx1ZVJlYWQpOwotCQkJaWYgKFZhbHVlUmVhZCAhPSAqSW5zdHJ1Y3Rpb24pIHsKKwkJCWlmIChWYWx1ZVJlYWQgIT0gaW5zdHJ1Y3Rpb24pIHsKIAkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBMT1dcbiIsCiAJCQkJCSAgX19mdW5jX18pOwotCQkJCXJldHVybiAoRkFMU0UpOwkvKiBNaXNjb21wYXJlICovCisJCQkJcmV0dXJuIEZBTFNFOwkvKiBNaXNjb21wYXJlICovCiAJCQl9CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhTWlkZGxlLCBWYWx1ZVJlYWQpOwotCQkJaWYgKFZhbHVlUmVhZCAhPSAqKEluc3RydWN0aW9uICsgMSkpIHsKKwkJCWlmIChWYWx1ZVJlYWQgIT0gaW5zdHJ1Y3Rpb24pIHsKIAkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBNSURETEVcbiIsCiAJCQkJCSAgX19mdW5jX18pOwotCQkJCXJldHVybiAoRkFMU0UpOwkvKiBNaXNjb21wYXJlICovCisJCQkJcmV0dXJuIEZBTFNFOwkvKiBNaXNjb21wYXJlICovCiAJCQl9CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKIAkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhSGlnaCwgVmFsdWVSZWFkKTsKLQkJCWlmIChWYWx1ZVJlYWQgIT0gKihJbnN0cnVjdGlvbiArIDIpKSB7CisJCQlpZiAoVmFsdWVSZWFkICE9IGluc3RydWN0aW9uKSB7CiAJCQkJREJHX0VSUk9SKCJzeGc6ICVzIE1JU0NPTVBBUkUgSElHSFxuIiwKIAkJCQkJICBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIChGQUxTRSk7CS8qIE1pc2NvbXBhcmUgKi8KKwkJCQlyZXR1cm4gRkFMU0U7CS8qIE1pc2NvbXBhcmUgKi8KIAkJCX0KLQkJCS8qIEFkdmFuY2UgMyB1MzJTIHRvIHN0YXJ0IG9mIG5leHQgaW5zdHJ1Y3Rpb24gKi8KLQkJCUluc3RydWN0aW9uICs9IDM7CiAJCX0KIAl9CiAKKwkvKiBkb3dubG9hZCBmaW5pc2hlZCAqLworCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCS8qIEV2ZXJ5dGhpbmcgT0ssIEdvLiAqLwogCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwgTUlDUk9DT0RFX0FERFJFU1NfR08sIEZMVVNIKTsKIAotCS8qIFBvbGwgdGhlIENhcmRVcCByZWdpc3RlciB0byB3YWl0IGZvciBtaWNyb2NvZGUgdG8gaW5pdGlhbGl6ZSAqLwotCS8qIEdpdmUgdXAgYWZ0ZXIgMTAsMDAwIGF0dGVtcHMgKDUwMG1zKS4gKi8KKwkvKgorCSAqIFBvbGwgdGhlIENhcmRVcCByZWdpc3RlciB0byB3YWl0IGZvciBtaWNyb2NvZGUgdG8gaW5pdGlhbGl6ZQorCSAqIEdpdmUgdXAgYWZ0ZXIgMTAsMDAwIGF0dGVtcHMgKDUwMG1zKS4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewogCQl1ZGVsYXkoNTApOwogCQlSRUFEX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ2FyZFVwLCBWYWx1ZVJlYWQpOwogCQlpZiAoVmFsdWVSZWFkID09IDB4Q0FGRSkgewotCQkJREJHX0VSUk9SKCJzeGc6ICVzIEJPTyBZQSAweENBRkVcbiIsIF9fZnVuY19fKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCWlmIChpID09IDEwMDAwKSB7Ci0JCURCR19FUlJPUigic3hnOiAlcyBUSU1FT1VUXG4iLCBfX2Z1bmNfXyk7CisJCURCR19FUlJPUigic3hnOiAlcyBUSU1FT1VUIGJyaW5naW5nIHVwIGNhcmQgLSB2ZXJpZnkgTUlDUk9DT0RFXG4iLCBfX2Z1bmNfXyk7CiAKLQkJcmV0dXJuIChGQUxTRSk7CS8qIFRpbWVvdXQgKi8KKwkJcmV0dXJuIEZBTFNFOwkvKiBUaW1lb3V0ICovCiAJfQotCS8qIE5vdyB3cml0ZSB0aGUgTG9hZFN5bmMgcmVnaXN0ZXIuICBUaGlzIGlzIHVzZWQgdG8gKi8KLQkvKiBzeW5jaHJvbml6ZSB3aXRoIHRoZSBjYXJkIHNvIGl0IGNhbiBzY3JpYmJsZSBvbiB0aGUgbWVtb3J5ICovCi0JLyogdGhhdCBjb250YWluZWQgMHhDQUZFIGZyb20gdGhlICJDYXJkVXAiIHN0ZXAgYWJvdmUgKi8KLQlpZiAoVWNvZGVTZWwgPT0gU1hHX1VDT0RFX1NBSEFSQSkgeworCS8qCisJICogTm93IHdyaXRlIHRoZSBMb2FkU3luYyByZWdpc3Rlci4gIFRoaXMgaXMgdXNlZCB0bworCSAqIHN5bmNocm9uaXplIHdpdGggdGhlIGNhcmQgc28gaXQgY2FuIHNjcmliYmxlIG9uIHRoZSBtZW1vcnkKKwkgKiB0aGF0IGNvbnRhaW5lZCAweENBRkUgZnJvbSB0aGUgIkNhcmRVcCIgc3RlcCBhYm92ZQorCSAqLworCWlmIChVY29kZVNlbCA9PSBTWEdfVUNPREVfU1lTVEVNKSB7CiAJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uTG9hZFN5bmMsIDAsIEZMVVNIKTsKIAl9CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRG5sZFVjZCIsCiAJCSAgYWRhcHRlciwgMCwgMCwgMCk7Ci0JREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKLQogCXJldHVybiAoVFJVRSk7CiB9CiAKQEAgLTQxMSwxOCArNjA2LDE2IEBACiAgKiBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzIC0gQWxsb2NhdGUgbWVtb3J5IGFuZCBsb2NrcwogICoKICAqIEFyZ3VtZW50cyAtCi0gKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCWFkYXB0ZXIJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKgotICogUmV0dXJuCi0gKglpbnQKKyAqIFJldHVybiAtIGludAogICovCiBzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQlpbnQgc3RhdHVzOwotCXUzMiBpOworCWludCBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKIAl1MzIgUnNzSWRzLCBJc3JDb3VudDsKLS8qICAgICAgc3RydWN0IFNYR19YTVRfUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlhtdFJpbmc7ICovCi0vKiAgICAgIHN0cnVjdCBTWEdfUkNWX1JJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSY3ZSaW5nOyAqLworCS8qIHN0cnVjdCBzeGdfeG10X3JpbmcJKlhtdFJpbmc7ICovCisJLyogc3RydWN0IHN4Z19yY3ZfcmluZwkqUmN2UmluZzsgKi8KIAogCURCR19FUlJPUigiJXMgRU5URVJcbiIsIF9fZnVuY19fKTsKIApAQCAtNDMyLDcgKzYyNSw3IEBACiAJLyogV2luZG93cyB0ZWxscyB1cyBob3cgbWFueSBDUFVzIGl0IHBsYW5zIHRvIHVzZSBmb3IgKi8KIAkvKiBSU1MgKi8KIAlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKLQlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCUlzckNvdW50ID0gYWRhcHRlci0+bXNpX2VuYWJsZWQgPyBSc3NJZHMgOiAxOwogCiAJREJHX0VSUk9SKCIlcyBTZXR1cCB0aGUgc3BpbmxvY2tzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTQ0Miw2ICs2MzUsNyBAQAogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkJpdDY0UmVnTG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwlhdG9taWNfc2V0KCZhZGFwdGVyLT5wZW5kaW5nX2FsbG9jYXRpb25zLCAwKTsKIAogCURCR19FUlJPUigiJXMgU2V0dXAgdGhlIGxpc3RzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTQ1MSw2MiArNjQ1LDgyIEBACiAJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlU2dsQnVmZmVycyk7CiAJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKIAotCS8qIE1hcmsgdGhlc2UgYmFzaWMgYWxsb2NhdGlvbnMgZG9uZS4gIFRoaXMgZmxhZ3MgZXNzZW50aWFsbHkgKi8KLQkvKiB0ZWxscyB0aGUgU3hnRnJlZVJlc291cmNlcyByb3V0aW5lIHRoYXQgaXQgY2FuIGdyYWIgc3BpbmxvY2tzICovCi0JLyogYW5kIHJlZmVyZW5jZSBsaXN0aGVhZHMuICovCisJLyoKKwkgKiBNYXJrIHRoZXNlIGJhc2ljIGFsbG9jYXRpb25zIGRvbmUuICBUaGlzIGZsYWdzIGVzc2VudGlhbGx5CisJICogdGVsbHMgdGhlIFN4Z0ZyZWVSZXNvdXJjZXMgcm91dGluZSB0aGF0IGl0IGNhbiBncmFiIHNwaW5sb2NrcworCSAqIGFuZCByZWZlcmVuY2UgbGlzdGhlYWRzLgorCSAqLwogCWFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPSBUUlVFOwotCS8qIE1haW4gYWxsb2NhdGlvbiBsb29wLiAgU3RhcnQgd2l0aCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgKi8KLQkvKiB0aGUgbWljcm9jb2RlIGFuZCBiYWNrIG9mZiBpZiBtZW1vcnkgYWxsb2NhdGlvbiAqLwotCS8qIGZhaWxzLiAgSWYgd2UgaGl0IGEgbWluaW11bSwgZmFpbC4gKi8KKwkvKgorCSAqIE1haW4gYWxsb2NhdGlvbiBsb29wLiAgU3RhcnQgd2l0aCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkKKwkgKiB0aGUgbWljcm9jb2RlIGFuZCBiYWNrIG9mZiBpZiBtZW1vcnkgYWxsb2NhdGlvbgorCSAqIGZhaWxzLiAgSWYgd2UgaGl0IGEgbWluaW11bSwgZmFpbC4KKwkgKi8KIAogCWZvciAoOzspIHsKIAkJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBYbXRSaW5ncyBzaXplWyV4XVxuIiwgX19mdW5jX18sCi0JCQkgICh1bnNpZ25lZCBpbnQpKHNpemVvZihzdHJ1Y3QgU1hHX1hNVF9SSU5HKSAqIDEpKTsKKwkJCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBzeGdfeG10X3JpbmcpICogMSkpOwogCi0JCS8qIFN0YXJ0IHdpdGggYmlnIGl0ZW1zIGZpcnN0IC0gcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MuICBBdCB0aGUgbW9tZW50ICovCi0JCS8qIEknbSBnb2luZyB0byBrZWVwIHRoZSByaW5nIHNpemUgZml4ZWQgYW5kIGFkanVzdCB0aGUgbnVtYmVyIG9mICovCi0JCS8qIFRDQnMgaWYgd2UgZmFpbC4gIExhdGVyIHdlIG1pZ2h0IGNvbnNpZGVyIHJlZHVjaW5nIHRoZSByaW5nIHNpemUgYXMgd2VsbC4uICovCisJCS8qCisJCSAqIFN0YXJ0IHdpdGggYmlnIGl0ZW1zIGZpcnN0IC0gcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MuCisJCSAqIEF0IHRoZSBtb21lbnQgSSdtIGdvaW5nIHRvIGtlZXAgdGhlIHJpbmcgc2l6ZSBmaXhlZCBhbmQKKwkJICogYWRqdXN0IHRoZSBUQ0JzIGlmIHdlIGZhaWwuICBMYXRlciB3ZSBtaWdodAorCQkgKiBjb25zaWRlciByZWR1Y2luZyB0aGUgcmluZyBzaXplIGFzIHdlbGwuLgorCQkgKi8KIAkJYWRhcHRlci0+WG10UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCQkJIHNpemVvZihzdHJ1Y3QgU1hHX1hNVF9SSU5HKSAqCi0JCQkJCQkJIDEsCi0JCQkJCQkJICZhZGFwdGVyLT5QWG10UmluZ3MpOworCQkJCQkJIHNpemVvZihzdHJ1Y3Qgc3hnX3htdF9yaW5nKSAqCisJCQkJCQkgMSwKKwkJCQkJCSAmYWRhcHRlci0+UFhtdFJpbmdzKTsKIAkJREJHX0VSUk9SKCIlcyBYbXRSaW5nc1slcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5YbXRSaW5ncyk7CiAKIAkJaWYgKCFhZGFwdGVyLT5YbXRSaW5ncykgewogCQkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOwogCQl9Ci0JCW1lbXNldChhZGFwdGVyLT5YbXRSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBTWEdfWE1UX1JJTkcpICogMSk7CisJCW1lbXNldChhZGFwdGVyLT5YbXRSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfeG10X3JpbmcpICogMSk7CiAKIAkJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBSY3ZSaW5ncyBzaXplWyV4XVxuIiwgX19mdW5jX18sCi0JCQkgICh1bnNpZ25lZCBpbnQpKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9SSU5HKSAqIDEpKTsKKwkJCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSkpOwogCQlhZGFwdGVyLT5SY3ZSaW5ncyA9CiAJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCSBzaXplb2Yoc3RydWN0IFNYR19SQ1ZfUklORykgKiAxLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSwKIAkJCQkJICZhZGFwdGVyLT5QUmN2UmluZ3MpOwogCQlEQkdfRVJST1IoIiVzIFJjdlJpbmdzWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPlJjdlJpbmdzKTsKIAkJaWYgKCFhZGFwdGVyLT5SY3ZSaW5ncykgewogCQkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOwogCQl9Ci0JCW1lbXNldChhZGFwdGVyLT5SY3ZSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX1JJTkcpICogMSk7CisJCW1lbXNldChhZGFwdGVyLT5SY3ZSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSk7CisJCWFkYXB0ZXItPnVjb2RlX3N0YXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9zdGF0cyksIEdGUF9BVE9NSUMpOworCQlhZGFwdGVyLT5wdWNvZGVfc3RhdHMgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQlhZGFwdGVyLT51Y29kZV9zdGF0cywKKwkJCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzKSwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisvLwkJbWVtc2V0KGFkYXB0ZXItPnVjb2RlX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9zdGF0cykpOwogCQlicmVhazsKIAogCSAgICAgIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ6CiAJCS8qIGFuIGFsbG9jYXRpb24gZmFpbGVkLiAgRnJlZSBhbnkgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9ucy4gKi8KIAkJaWYgKGFkYXB0ZXItPlhtdFJpbmdzKSB7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgU1hHX1hNVF9SSU5HKSAqIDQwOTYsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHN4Z194bXRfcmluZykgKiAxLAogCQkJCQkgICAgYWRhcHRlci0+WG10UmluZ3MsCiAJCQkJCSAgICBhZGFwdGVyLT5QWG10UmluZ3MpOwogCQkJYWRhcHRlci0+WG10UmluZ3MgPSBOVUxMOwogCQl9CiAJCWlmIChhZGFwdGVyLT5SY3ZSaW5ncykgewogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IFNYR19SQ1ZfUklORykgKiA0MDk2LAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSwKIAkJCQkJICAgIGFkYXB0ZXItPlJjdlJpbmdzLAogCQkJCQkgICAgYWRhcHRlci0+UFJjdlJpbmdzKTsKIAkJCWFkYXB0ZXItPlJjdlJpbmdzID0gTlVMTDsKIAkJfQogCQkvKiBMb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLi4uLiAqLworCQlpZiAoYWRhcHRlci0+dWNvZGVfc3RhdHMpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9zdGF0cyksCisJCQkJCWFkYXB0ZXItPnB1Y29kZV9zdGF0cywgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWFkYXB0ZXItPnVjb2RlX3N0YXRzID0gTlVMTDsKKwkJfQorCiAJfQogCiAJREJHX0VSUk9SKCIlcyBJbml0aWFsaXplIFJDViBaRVJPIGFuZCBYTVQgWkVSTyByaW5nc1xuIiwgX19mdW5jX18pOwpAQCAtNTE1LDUzICs3MjksMzcgQEAKIAlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbywgU1hHX1hNVF9SSU5HX1NJWkUpOwogCiAJLyogU2FuaXR5IGNoZWNrIHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmUgZm9ybWF0ICovCi0JQVNTRVJUKChhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUpIHx8Ci0JICAgICAgIChhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0pVTUJPX0JVRkZFUl9TSVpFKSk7Ci0JQVNTRVJUKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSA9PQorCS8qIEFTU0VSVCgoYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUgPT0gU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFKSB8fAorCSAgICAgICAoYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUgPT0gU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRSkpOyAqLworCUFTU0VSVChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jaykgPT0KIAkgICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX1NJWkUpOwogCi0JLyogQWxsb2NhdGUgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXZSBhbGxvY2F0ZSBhIGJsb2NrIG9mIGJ1ZmZlcnMgYW5kICovCi0JLyogYSBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgYmxvY2sgYXQgb25jZS4gIFNlZSBzeGdody5oOlNYR19SQ1ZfQkxPQ0sgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUzsKLQkgICAgIGkgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spIHsKLQkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKLQkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgotCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKLQkJCQkJICAgU1hHX0JVRkZFUl9UWVBFX1JDVik7Ci0JfQotCS8qIE5CTCByZXNvdXJjZSBhbGxvY2F0aW9uIGNhbiBmYWlsIGluIHRoZSAnQWxsb2NhdGVDb21wbGV0ZScgcm91dGluZSwgd2hpY2ggKi8KLQkvKiBkb2Vzbid0IHJldHVybiBzdGF0dXMuICBNYWtlIHN1cmUgd2UgZ290IHRoZSBudW1iZXIgb2YgYnVmZmVycyB3ZSByZXF1ZXN0ZWQgKi8KLQlpZiAoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUykgewotCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y2IiwKLQkJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBTWEdfTUFYX0VOVFJJRVMsCi0JCQkgIDApOwotCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOwotCX0KLQogCURCR19FUlJPUigiJXMgQWxsb2NhdGUgRXZlbnRSaW5ncyBzaXplWyV4XVxuIiwgX19mdW5jX18sCi0JCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBTWEdfRVZFTlRfUklORykgKiBSc3NJZHMpKTsKKwkJICAodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IHN4Z19ldmVudF9yaW5nKSAqIFJzc0lkcykpOwogCiAJLyogQWxsb2NhdGUgZXZlbnQgcXVldWVzLiAqLwogCWFkYXB0ZXItPkV2ZW50UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJCQkgICBzaXplb2Yoc3RydWN0IFNYR19FVkVOVF9SSU5HKSAqCi0JCQkJCQkgICBSc3NJZHMsCi0JCQkJCQkgICAmYWRhcHRlci0+UEV2ZW50UmluZ3MpOworCQkJCQkgICBzaXplb2Yoc3RydWN0IHN4Z19ldmVudF9yaW5nKSAqCisJCQkJCSAgIFJzc0lkcywKKwkJCQkJICAgJmFkYXB0ZXItPlBFdmVudFJpbmdzKTsKIAogCWlmICghYWRhcHRlci0+RXZlbnRSaW5ncykgewotCQkvKiBDYWxsZXIgd2lsbCBjYWxsIFN4Z0ZyZWVBZGFwdGVyIHRvIGNsZWFuIHVwIGFib3ZlIGFsbG9jYXRpb25zICovCisJCS8qIENhbGxlciB3aWxsIGNhbGwgU3hnRnJlZUFkYXB0ZXIgdG8gY2xlYW4gdXAgYWJvdmUKKwkJICogYWxsb2NhdGlvbnMgKi8KIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGOCIsCiAJCQkgIGFkYXB0ZXIsIFNYR19NQVhfRU5UUklFUywgMCwgMCk7CiAJCXN0YXR1cyA9IFNUQVRVU19SRVNPVVJDRVM7CiAJCWdvdG8gcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDsKIAl9Ci0JbWVtc2V0KGFkYXB0ZXItPkV2ZW50UmluZ3MsIDAsIHNpemVvZihzdHJ1Y3QgU1hHX0VWRU5UX1JJTkcpICogUnNzSWRzKTsKKwltZW1zZXQoYWRhcHRlci0+RXZlbnRSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfZXZlbnRfcmluZykgKiBSc3NJZHMpOwogCiAJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBJU1Igc2l6ZVsleF1cbiIsIF9fZnVuY19fLCBJc3JDb3VudCk7CiAJLyogQWxsb2NhdGUgSVNSICovCiAJYWRhcHRlci0+SXNyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAogCQkJCQkgICAgSXNyQ291bnQsICZhZGFwdGVyLT5QSXNyKTsKIAlpZiAoIWFkYXB0ZXItPklzcikgewotCQkvKiBDYWxsZXIgd2lsbCBjYWxsIFN4Z0ZyZWVBZGFwdGVyIHRvIGNsZWFuIHVwIGFib3ZlIGFsbG9jYXRpb25zICovCisJCS8qIENhbGxlciB3aWxsIGNhbGwgU3hnRnJlZUFkYXB0ZXIgdG8gY2xlYW4gdXAgYWJvdmUKKwkJICogYWxsb2NhdGlvbnMgKi8KIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGOSIsCiAJCQkgIGFkYXB0ZXIsIFNYR19NQVhfRU5UUklFUywgMCwgMCk7CiAJCXN0YXR1cyA9IFNUQVRVU19SRVNPVVJDRVM7CkBAIC01ODgsOCArNzg2LDcgQEAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxjUmVzUyIsCiAJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKIAotCURCR19FUlJPUigiJXMgRVhJVFxuIiwgX19mdW5jX18pOwotCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCkBAIC01OTksNyArNzk2LDYgQEAKICAqCiAgKiBBcmd1bWVudHMgLQogICoJCXBjaWRldgkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQotICoKICAqLwogc3RhdGljIHZvaWQgc3hnX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKIHsKQEAgLTYwOSwxMiArODA1LDE5IEBACiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKIAlEQkdfRVJST1IoInN4ZzogJXMgIFBDSSBjb21tYW5kWyU0LjR4XVxuIiwgX19mdW5jX18sIHBjaV9jb21tYW5kKTsKIAkvKiBTZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgKi8KLQluZXdfY29tbWFuZCA9IHBjaV9jb21tYW5kIHwgKFBDSV9DT01NQU5EX01FTU9SWSB8CS8qIE1lbW9yeSBTcGFjZSBFbmFibGUgKi8KLQkJCQkgICAgIFBDSV9DT01NQU5EX01BU1RFUiB8CS8qIEJ1cyBtYXN0ZXIgZW5hYmxlICovCi0JCQkJICAgICBQQ0lfQ09NTUFORF9JTlZBTElEQVRFIHwJLyogTWVtb3J5IHdyaXRlIGFuZCBpbnZhbGlkYXRlICovCi0JCQkJICAgICBQQ0lfQ09NTUFORF9QQVJJVFkgfAkvKiBQYXJpdHkgZXJyb3IgcmVzcG9uc2UgKi8KLQkJCQkgICAgIFBDSV9DT01NQU5EX1NFUlIgfAkvKiBTeXN0ZW0gRVJSICovCi0JCQkJICAgICBQQ0lfQ09NTUFORF9GQVNUX0JBQ0spOwkvKiBGYXN0IGJhY2stdG8tYmFjayAqLworCW5ld19jb21tYW5kID0gcGNpX2NvbW1hbmQgfCAoCisJCQkJICAgICAvKiBNZW1vcnkgU3BhY2UgRW5hYmxlICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9NRU1PUlkgfAorCQkJCSAgICAgLyogQnVzIG1hc3RlciBlbmFibGUgKi8KKwkJCQkgICAgIFBDSV9DT01NQU5EX01BU1RFUiB8CisJCQkgICAgIAkgICAgIC8qIE1lbW9yeSB3cml0ZSBhbmQgaW52YWxpZGF0ZSAqLworCQkJCSAgICAgUENJX0NPTU1BTkRfSU5WQUxJREFURSB8CisJCQkJICAgICAvKiBQYXJpdHkgZXJyb3IgcmVzcG9uc2UgKi8KKwkJCQkgICAgIFBDSV9DT01NQU5EX1BBUklUWSB8CisJCQkJICAgICAvKiBTeXN0ZW0gRVJSICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9TRVJSIHwKKwkJCQkgICAgIC8qIEZhc3QgYmFjay10by1iYWNrICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9GQVNUX0JBQ0spOwogCWlmIChwY2lfY29tbWFuZCAhPSBuZXdfY29tbWFuZCkgewogCQlEQkdfRVJST1IoIiVzIC0tIFVwZGF0aW5nIFBDSSBDT01NQU5EIHJlZ2lzdGVyICU0LjR4LT4lNC40eC5cbiIsCiAJCQkgIF9fZnVuY19fLCBwY2lfY29tbWFuZCwgbmV3X2NvbW1hbmQpOwpAQCAtNjIyLDYgKzgyNSw3NyBAQAogCX0KIH0KIAorLyoKKyAqIHN4Z19yZWFkX2NvbmZpZworICogCUBhZGFwdGVyIDogUG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUgZm9yIHRoZSBjYXJkCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gRUVQUk9NL0ZMQVNICisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN4Z19yZWFkX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCS8qIHN0cnVjdCBzeGdfY29uZmlnCWRhdGE7ICovCisgIAlzdHJ1Y3Qgc3hnX2NvbmZpZwkqY29uZmlnOworCXN0cnVjdCBzd19jZmdfZGF0YQkqZGF0YTsKKwlkbWFfYWRkcl90CQlwX2FkZHI7CisJdW5zaWduZWQgbG9uZwkJc3RhdHVzOworCXVuc2lnbmVkIGxvbmcJCWk7CisgCWNvbmZpZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKyAJCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX2NvbmZpZyksICZwX2FkZHIpOworCisgIAlpZighY29uZmlnKSB7CisJCS8qCisJCSAqIFdlIGNhbnQgZ2V0IGV2ZW4gdGhpcyBtdWNoIG1lbW9yeS4gUmFpc2UgYSBoZWxsCisgCQkgKiBHZXQgb3V0IG9mIGhlcmUKKyAJCSAqLworCQlwcmludGsoS0VSTl9FUlIiJXMgOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciByZWFkaW5nIFwKKwkJCQkgRUVQUk9NXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkYXRhID0gJmNvbmZpZy0+U3dDZmc7CisKKyAgICAvKiBJbml0aWFsaXplIChyZWZsZWN0aXZlIG1lbW9yeSkgc3RhdHVzIHJlZ2lzdGVyICovCisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Db25maWdTdGF0LCBTWEdfQ0ZHX1RJTUVPVVQsIFRSVUUpOworCisgICAgLyogU2VuZCByZXF1ZXN0IHRvIGZldGNoIGNvbmZpZ3VyYXRpb24gZGF0YSAqLworCVdSSVRFX1JFRzY0KGFkYXB0ZXIsIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Db25maWcsIHBfYWRkciwgMCk7CisJZm9yKGk9MDsgaTwxMDAwOyBpKyspIHsKKwkJUkVBRF9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkNvbmZpZ1N0YXQsIHN0YXR1cyk7CisJCWlmIChzdGF0dXMgIT0gU1hHX0NGR19USU1FT1VUKQorCQkJYnJlYWs7CisJCW1kZWxheSgxKTsJCQkvKiBEbyB3ZSByZWFsbHkgbmVlZCB0aGlzICovCisJfQorCisJc3dpdGNoKHN0YXR1cykgeworCS8qIENvbmZpZyByZWFkIGZyb20gRUVQUk9NIHN1Y2NlZWRlZCAqLworCWNhc2UgU1hHX0NGR19MT0FEX0VFUFJPTToKKwkvKiBDb25maWcgcmVhZCBmcm9tIEZsYXNoIHN1Y2NlZWRlZCAqLworCWNhc2UgU1hHX0NGR19MT0FEX0ZMQVNIOgorCQkvKgorCQkgKiBDb3B5IHRoZSBNQUMgYWRkcmVzcyB0byBhZGFwdGVyIHN0cnVjdHVyZQorCQkgKiBUT0RPOiBXZSBhcmUgbm90IGRvaW5nIHRoZSByZW1haW5pbmcgcGFydCA6IEZSVSwgZXRjCisJCSAqLworCQltZW1jcHkoYWRhcHRlci0+bWFjYWRkciwgZGF0YS0+TWFjQWRkclswXS5NYWNBZGRyLAorCQkJc2l6ZW9mKHN0cnVjdCBzeGdfY29uZmlnX21hYykpOworCQlicmVhazsKKwljYXNlIFNYR19DRkdfVElNRU9VVDoKKwljYXNlIFNYR19DRkdfTE9BRF9JTlZBTElEOgorCWNhc2UgU1hHX0NGR19MT0FEX0VSUk9SOgorCWRlZmF1bHQ6CS8qIEZpeCBkZWZhdWx0IGhhbmRsZXIgbGF0ZXIgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyIlcyAgOiBXZSBjb3VsZCBub3QgcmVhZCB0aGUgY29uZmlnIFwKKwkJCXdvcmQuIFN0YXR1cyA9ICVsZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlicmVhazsKKwl9CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIHNpemVvZihzdHJ1Y3Qgc3dfY2ZnX2RhdGEpLCBkYXRhLAorCQkJCXBfYWRkcik7CisJaWYgKGFkYXB0ZXItPm5ldGRldikgeworCQltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+Y3Vycm1hY2FkZHIsIDYpOworCQltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5wZXJtX2FkZHIsIGFkYXB0ZXItPmN1cnJtYWNhZGRyLCA2KTsKKwl9CisJc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBpbnQgc3hnX2VudHJ5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSkKIHsKQEAgLTYzMyw2ICs5MDcsNyBAQAogCXUzMiBzdGF0dXMgPSAwOwogCXVsb25nIG1taW9fc3RhcnQgPSAwOwogCXVsb25nIG1taW9fbGVuID0gMDsKKwl1bnNpZ25lZCBjaGFyIHJldmlzaW9uX2lkOwogCiAJREJHX0VSUk9SKCJzeGc6ICVzIDIuNiBWRVJTSU9OIEVOVEVSIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsCiAJCSAgX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CkBAIC02NTQsOSArOTI5LDExIEBACiAKIAlpZiAoc3hnX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHN4Z19iYW5uZXIpOwotCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgRFJWX1ZFUlNJT04pOworCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgU1hHX0RSVl9WRVJTSU9OKTsKIAl9CiAKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldmlzaW9uX2lkKTsKKwogCWlmICghKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7CiAJCURCR19FUlJPUigicGNpX3NldF9kbWFfbWFzayhETUFfNjRCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CiAJfSBlbHNlIHsKQEAgLTY3MSw3ICs5NDgsNyBAQAogCiAJREJHX0VSUk9SKCJDYWxsIHBjaV9yZXF1ZXN0X3JlZ2lvbnNcbiIpOwogCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2lkZXYsIERSVl9OQU1FKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgc3hnX2RyaXZlcl9uYW1lKTsKIAlpZiAoZXJyKSB7CiAJCURCR19FUlJPUigicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRUQgZXJyWyV4XVxuIiwgZXJyKTsKIAkJcmV0dXJuIGVycjsKQEAgLTY5Miw2ICs5NjksMTUgQEAKIAogCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIG5ldGRldik7CiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaWYgKHJldmlzaW9uX2lkID09IDEpIHsKKwkJYWRhcHRlci0+YXNpY3R5cGUgPSBTQUhBUkFfUkVWX0E7CisJfSBlbHNlIGlmIChyZXZpc2lvbl9pZCA9PSAyKSB7CisJCWFkYXB0ZXItPmFzaWN0eXBlID0gU0FIQVJBX1JFVl9COworCX0gZWxzZSB7CisJCUFTU0VSVCgwKTsKKwkJREJHX0VSUk9SKCIlcyBVbmV4cGVjdGVkIHJldmlzaW9uIElEICV4XG4iLCBfX0ZVTkNUSU9OX18sIHJldmlzaW9uX2lkKTsKKwkJZ290byBlcnJfb3V0X2V4aXRfc3hnX3Byb2JlOworCX0KIAlhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7CiAJYWRhcHRlci0+cGNpZGV2ID0gcGNpZGV2OwogCkBAIC03MDcsMTIgKzk5MywxMiBAQAogCWlmICghbWVtbWFwcGVkX2lvYWRkcikgewogCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCiAJCQkgIF9fZnVuY19fLCBtbWlvX2xlbiwgbW1pb19zdGFydCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbl8wOwogCX0KIAotCURCR19FUlJPUgotCSAgICAoInN4ZzogJXMgZm91bmQgQWxhY3JpdGVjaCBTWEcgUENJLCBNTUlPIGF0ICVwLCBzdGFydFslbHhdIGxlblslbHhdLCBJUlEgJWQuXG4iLAotCSAgICAgX19mdW5jX18sIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7CisJREJHX0VSUk9SKCJzeGc6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU1hHIFBDSSwgTU1JTyBhdCAlcCwgc3RhcnRbJWx4XSBcCisJICAgICAgbGVuWyVseF0sIElSUSAlZC5cbiIsIF9fZnVuY19fLCBtZW1tYXBwZWRfaW9hZGRyLCBtbWlvX3N0YXJ0LAorCQkJCQkgICAgICBtbWlvX2xlbiwgcGNpZGV2LT5pcnEpOwogCiAJYWRhcHRlci0+SHdSZWdzID0gKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyOwogCWFkYXB0ZXItPmJhc2VfYWRkciA9IG1lbW1hcHBlZF9pb2FkZHI7CkBAIC03MjksNyArMTAxNSw3IEBACiAJaWYgKCFtZW1tYXBwZWRfaW9hZGRyKSB7CiAJCURCR19FUlJPUigiJXMgY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwKIAkJCSAgX19mdW5jX18sIG1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CisJCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uXzI7CiAJfQogCiAJREJHX0VSUk9SKCJzeGc6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU1hHIFBDSSwgTU1JTyBhdCAlcCwgIgpAQCAtNzM5LDggKzEwMjUsMTAgQEAKIAlhZGFwdGVyLT5VY29kZVJlZ3MgPSAodm9pZCAqKW1lbW1hcHBlZF9pb2FkZHI7CiAKIAlhZGFwdGVyLT5TdGF0ZSA9IFNYR19TVEFURV9JTklUSUFMSVpJTkc7Ci0JLyogTWFpbnRhaW4gYSBsaXN0IG9mIGFsbCBhZGFwdGVycyBhbmNob3JlZCBieSAqLwotCS8qIHRoZSBnbG9iYWwgU3hnRHJpdmVyIHN0cnVjdHVyZS4gKi8KKwkvKgorCSAqIE1haW50YWluIGEgbGlzdCBvZiBhbGwgYWRhcHRlcnMgYW5jaG9yZWQgYnkKKwkgKiB0aGUgZ2xvYmFsIFN4Z0RyaXZlciBzdHJ1Y3R1cmUuCisJICovCiAJYWRhcHRlci0+TmV4dCA9IFN4Z0RyaXZlci5BZGFwdGVyczsKIAlTeGdEcml2ZXIuQWRhcHRlcnMgPSBhZGFwdGVyOwogCWFkYXB0ZXItPkFkYXB0ZXJJRCA9ICsrU3hnRHJpdmVyLkFkYXB0ZXJJRDsKQEAgLTc1OCwxMCArMTA0NiwxMiBAQAogCQlhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRTsKIAl9CiAKLS8qICAgIHN0YXR1cyA9IFNYR19SRUFEX0VFUFJPTShhZGFwdGVyKTsgKi8KLS8qICAgIGlmICghc3RhdHVzKSB7ICovCi0vKiAgICAgICAgZ290byBzeGdfaW5pdF9iYWQ7ICovCi0vKiAgICB9ICovCisJLyoKKwkgKiAgICBzdGF0dXMgPSBTWEdfUkVBRF9FRVBST00oYWRhcHRlcik7CisJICogICAgaWYgKCFzdGF0dXMpIHsKKwkgKiAgICAgICAgZ290byBzeGdfaW5pdF9iYWQ7CisJICogICAgfQorCSAqLwogCiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19jb25maWdfcGNpXG4iLCBfX2Z1bmNfXyk7CiAJc3hnX2NvbmZpZ19wY2kocGNpZGV2KTsKQEAgLTc3NCwxNiArMTA2NCwxMyBAQAogCWFkYXB0ZXItPnZlbmRpZCA9IHBjaV90YmxfZW50cnktPnZlbmRvcjsKIAlhZGFwdGVyLT5kZXZpZCA9IHBjaV90YmxfZW50cnktPmRldmljZTsKIAlhZGFwdGVyLT5zdWJzeXNpZCA9IHBjaV90YmxfZW50cnktPnN1YmRldmljZTsKLQlhZGFwdGVyLT5idXNudW1iZXIgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOwogCWFkYXB0ZXItPnNsb3RudW1iZXIgPSAoKHBjaWRldi0+ZGV2Zm4gPj4gMykgJiAweDFGKTsKIAlhZGFwdGVyLT5mdW5jdGlvbm51bWJlciA9IChwY2lkZXYtPmRldmZuICYgMHg3KTsKIAlhZGFwdGVyLT5tZW1vcnlsZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CiAJYWRhcHRlci0+aXJxID0gcGNpZGV2LT5pcnE7CiAJYWRhcHRlci0+bmV4dF9uZXRkZXZpY2UgPSBoZWFkX25ldGRldmljZTsKIAloZWFkX25ldGRldmljZSA9IG5ldGRldjsKLS8qICAgICAgYWRhcHRlci0+Y2hpcGlkID0gY2hpcF9pZHg7ICovCiAJYWRhcHRlci0+cG9ydCA9IDA7CS8qYWRhcHRlci0+ZnVuY3Rpb25udW1iZXI7ICovCi0JYWRhcHRlci0+Y2FyZGluZGV4ID0gYWRhcHRlci0+cG9ydDsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBhbmQgb3RoZXIgcmVzb3VyY2VzICovCiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXNcbiIsIF9fZnVuY19fKTsKQEAgLTc5NSwxMCArMTA4MiwxMSBAQAogCX0KIAogCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfZG93bmxvYWRfbWljcm9jb2RlXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKHN4Z19kb3dubG9hZF9taWNyb2NvZGUoYWRhcHRlciwgU1hHX1VDT0RFX1NBSEFSQSkpIHsKKwlpZiAoc3hnX2Rvd25sb2FkX21pY3JvY29kZShhZGFwdGVyLCBTWEdfVUNPREVfU1lTVEVNKSkgewogCQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkclxuIiwKIAkJCSAgX19mdW5jX18pOwotCQlzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKGFkYXB0ZXIpOworCQlzeGdfcmVhZF9jb25maWcoYWRhcHRlcik7CisJCXN0YXR1cyA9IHN4Z19hZGFwdGVyX3NldF9od2FkZHIoYWRhcHRlcik7CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9GQUlMOwogCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CkBAIC04MTEsNDAgKzEwOTksNjMgQEAKIAluZXRkZXYtPnN0b3AgPSBzeGdfZW50cnlfaGFsdDsKIAluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHN4Z19zZW5kX3BhY2tldHM7CiAJbmV0ZGV2LT5kb19pb2N0bCA9IHN4Z19pb2N0bDsKKwluZXRkZXYtPmNoYW5nZV9tdHUgPSBzeGdfY2hhbmdlX210dTsKICNpZiBYWFhUT0RPCiAJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzeGdfbWFjX3NldF9hZGRyZXNzOwotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKKyNlbmRpZgogCW5ldGRldi0+Z2V0X3N0YXRzID0gc3hnX2dldF9zdGF0czsKLSNlbmRpZgogCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc3hnX21jYXN0X3NldF9saXN0OwotI2VuZGlmCisJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJnN4Z19uaWNfZXRodG9vbF9vcHMpOworIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOworCWVyciA9IHN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJaWYgKGVyciAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJREJHX0VSUk9SKCJDYW5ub3QgZW5hYmxlIE1TSS1YIGNhcGFiaWxpdHlcbiIpOwogCiAJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7Ci0vKiAgc3RyY3B5KG5ldGRldi0+bmFtZSwgcGNpX25hbWUocGNpZGV2KSk7ICovCisJLyogIHN0cmNweShuZXRkZXYtPm5hbWUsIHBjaV9uYW1lKHBjaWRldikpOyAqLwogCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpKSB7CiAJCURCR19FUlJPUigiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLiAlc1xuIiwKIAkJCSAgbmV0ZGV2LT5uYW1lKTsKIAkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KIAorCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksCisJCXN4Z19wb2xsLCBTWEdfTkVUREVWX1dFSUdIVCk7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDIgKiBIWjsKKwlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSAmc3hnX3dhdGNoZG9nOworCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKKwlJTklUX1dPUksoJmFkYXB0ZXItPnVwZGF0ZV9saW5rX3N0YXR1cywgc3hnX3VwZGF0ZV9saW5rX3N0YXR1cyk7CisKIAlEQkdfRVJST1IKLQkgICAgKCJzeGc6ICVzIGFkZHIgMHglbHgsIGlycSAlZCwgTUFDIGFkZHIgJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCisJICAgICgic3hnOiAlcyBhZGRyIDB4JWx4LCBpcnEgJWQsIE1BQyBhZGRyIFwKKwkJJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCiAJICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldi0+YmFzZV9hZGRyLCBwY2lkZXYtPmlycSwgbmV0ZGV2LT5kZXZfYWRkclswXSwKIAkgICAgIG5ldGRldi0+ZGV2X2FkZHJbMV0sIG5ldGRldi0+ZGV2X2FkZHJbMl0sIG5ldGRldi0+ZGV2X2FkZHJbM10sCiAJICAgICBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKIAotLypzeGdfaW5pdF9iYWQ6ICovCisJLyogc3hnX2luaXRfYmFkOiAqLwogCUFTU0VSVChzdGF0dXMgPT0gRkFMU0UpOwotLyogICAgICBzeGdfZnJlZV9hZGFwdGVyKGFkYXB0ZXIpOyAqLworCS8qIHN4Z19mcmVlX2FkYXB0ZXIoYWRhcHRlcik7ICovCiAKIAlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzdGF0dXNbJXhdIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fZnVuY19fLAogCQkgIHN0YXR1cywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlyZXR1cm4gc3RhdHVzOwogCiAgICAgICBlcnJfb3V0X3VubWFwOgotCWlvdW5tYXAoKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyKTsKKwlzeGdfZnJlZV9yZXNvdXJjZXMoYWRhcHRlcik7CiAKLSAgICAgIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjoKKyAgICAgIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbl8yOgorCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpOworICAgICAgICBtbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAyKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisgICAgICBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb25fMDoKKworICAgICAgICBtbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisgICAgICAgIG1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAogICAgICAgZXJyX291dF9leGl0X3N4Z19wcm9iZToKQEAgLTg1MiwxMyArMTE2MywxNiBAQAogCURCR19FUlJPUigiJXMgRVhJVCBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLCBfX2Z1bmNfXywgamlmZmllcywKIAkJICBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisgICAgICAgIERCR19FUlJPUigic3hnOiAlcyBkZWFsbG9jYXRlIGRldmljZVxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAga2ZyZWUobmV0ZGV2KTsKKwlwcmludGsoIkV4aXQgJXMsIFN4ZyBkcml2ZXIgbG9hZGluZyBmYWlsZWQuLlxuIiwgX19GVU5DVElPTl9fKTsKKwogCXJldHVybiAtRU5PREVWOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIExJTkUgQkFTRSBJbnRlcnJ1cHQgcm91dGluZXMuLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKKyAqIExJTkUgQkFTRSBJbnRlcnJ1cHQgcm91dGluZXMuLgogICoKICAqIHN4Z19kaXNhYmxlX2ludGVycnVwdAogICoKQEAgLTg3NywxMCArMTE5MSw3IEBACiAJCSAgYWRhcHRlciwgYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQsIDAsIDApOwogCS8qIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cyAqLwogCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKLQlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7Ci0JLyogKi8KIAkvKiBUdXJuIG9mZiBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gdGhlIGljciByZWdpc3Rlci4gKi8KLQkvKiAqLwogCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSWNyLCBTWEdfSUNSKDAsIFNYR19JQ1JfRElTQUJMRSksIFRSVUUpOwogCiAJYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQgPSAwOwpAQCAtODkwLDcgKzEyMDEsNiBAQAogfQogCiAvKgotICoKICAqIHN4Z19lbmFibGVfaW50ZXJydXB0CiAgKgogICogRW5hYmxlSW50ZXJydXB0IEhhbmRsZXIKQEAgLTkwOCwxMCArMTIxOCw3IEBACiAJCSAgYWRhcHRlciwgYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQsIDAsIDApOwogCS8qIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cyAqLwogCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKLQlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7Ci0JLyogKi8KIAkvKiBUdXJuIG9uIGludGVycnVwdHMgYnkgd3JpdGluZyB0byB0aGUgaWNyIHJlZ2lzdGVyLiAqLwotCS8qICovCiAJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9FTkFCTEUpLCBUUlVFKTsKIAogCWFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkID0gMTsKQEAgLTkyMSw1MCArMTIyOCw1MSBAQAogfQogCiAvKgotICoKICAqIHN4Z19pc3IgLSBQcm9jZXNzIGFuIGxpbmUtYmFzZWQgaW50ZXJydXB0CiAgKgogICogQXJndW1lbnRzOgotICogCQlDb250ZXh0CQkJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIAkJQ29udGV4dAkJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKICAqCQlRdWV1ZURlZmF1bHQgCS0gT3V0cHV0IHBhcmFtZXRlciB0byBxdWV1ZSB0byBkZWZhdWx0IENQVQotICoJCVRhcmdldENwdXMJCS0gT3V0cHV0IGJpdG1hcCB0byBzY2hlZHVsZSBEUEMncworICoJCVRhcmdldENwdXMJLSBPdXRwdXQgYml0bWFwIHRvIHNjaGVkdWxlIERQQydzCiAgKgotICogUmV0dXJuIFZhbHVlOgotICogCVRSVUUgaWYgb3VyIGludGVycnVwdAorICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIG91ciBpbnRlcnJ1cHQKICAqLwogc3RhdGljIGlycXJldHVybl90IHN4Z19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXBfbmV0X2RldmljZSBkZXYgPSAocF9uZXRfZGV2aWNlKSBkZXZfaWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7CiAJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopIG5ldGRldl9wcml2KGRldik7Ci0vKiAgICAgIHUzMiAgICAgICAgICAgICAgICAgQ3B1TWFzayA9IDAsIGk7ICovCiAKKwlpZihhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkKKwkJcmV0dXJuIElSUV9OT05FOwogCWFkYXB0ZXItPlN0YXRzLk51bUludHMrKzsKIAlpZiAoYWRhcHRlci0+SXNyWzBdID09IDApIHsKLQkJLyogVGhlIFNMSUMgZHJpdmVyIHVzZWQgdG8gZXhwZXJpZW5jZSBhIG51bWJlciBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzICovCi0JCS8qIGR1ZSB0byB0aGUgZGVsYXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXNraW5nIG9mIHRoZSBpbnRlcnJ1cHQgKi8KLQkJLyogKHdlJ2QgYm91bmNlIGJhY2sgaW4gaGVyZSkuICBJZiB3ZSBzZWUgdGhhdCBhZ2FpbiB3aXRoIFNhaGFyYSwgKi8KLQkJLyogYWRkIGEgUkVBRF9SRUcgb2YgdGhlIEljciByZWdpc3RlciBhZnRlciB0aGUgV1JJVEVfUkVHIGJlbG93LiAqLworCQkvKgorCQkgKiBUaGUgU0xJQyBkcml2ZXIgdXNlZCB0byBleHBlcmllbmNlIGEgbnVtYmVyIG9mIHNwdXJpb3VzCisJCSAqIGludGVycnVwdHMgZHVlIHRvIHRoZSBkZWxheSBhc3NvY2lhdGVkIHdpdGggdGhlIG1hc2tpbmcgb2YKKwkJICogdGhlIGludGVycnVwdCAod2UnZCBib3VuY2UgYmFjayBpbiBoZXJlKS4gIElmIHdlIHNlZSB0aGF0CisJCSAqIGFnYWluIHdpdGggU2FoYXJhLGFkZCBhIFJFQURfUkVHIG9mIHRoZSBJY3IgcmVnaXN0ZXIgYWZ0ZXIKKwkJICogdGhlIFdSSVRFX1JFRyBiZWxvdy4KKwkJICovCiAJCWFkYXB0ZXItPlN0YXRzLkZhbHNlSW50cysrOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQotCS8qICovCi0JLyogTW92ZSB0aGUgSXNyIGNvbnRlbnRzIGFuZCBjbGVhciB0aGUgdmFsdWUgaW4gKi8KLQkvKiBzaGFyZWQgbWVtb3J5LCBhbmQgbWFzayBpbnRlcnJ1cHRzICovCi0JLyogKi8KLQlhZGFwdGVyLT5Jc3JDb3B5WzBdID0gYWRhcHRlci0+SXNyWzBdOwotCWFkYXB0ZXItPklzclswXSA9IDA7Ci0JV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9NQVNLKSwgVFJVRSk7Ci0vKiAgICAgIEFTU0VSVChhZGFwdGVyLT5Jc3JEcGNzUGVuZGluZyA9PSAwKTsgKi8KKwkvKgorCSAqIE1vdmUgdGhlIElzciBjb250ZW50cyBhbmQgY2xlYXIgdGhlIHZhbHVlIGluCisJICogc2hhcmVkIG1lbW9yeSwgYW5kIG1hc2sgaW50ZXJydXB0cworCSAqLworCS8qIEFTU0VSVChhZGFwdGVyLT5Jc3JEcGNzUGVuZGluZyA9PSAwKTsgKi8KICNpZiBYWFhUT0RPCQkJLyogUlNTIFN0dWZmICovCi0JLyogSWYgUlNTIGlzIGVuYWJsZWQgYW5kIHRoZSBJU1Igc3BlY2lmaWVzICovCi0JLyogU1hHX0lTUl9FVkVOVCwgdGhlbiBzY2hlZHVsZSBEUEMncyAqLwotCS8qIGJhc2VkIG9uIGV2ZW50IHF1ZXVlcy4gKi8KKwkvKgorCSAqIElmIFJTUyBpcyBlbmFibGVkIGFuZCB0aGUgSVNSIHNwZWNpZmllcyBTWEdfSVNSX0VWRU5ULCB0aGVuCisJICogc2NoZWR1bGUgRFBDJ3MgYmFzZWQgb24gZXZlbnQgcXVldWVzLgorCSAqLwogCWlmIChhZGFwdGVyLT5Sc3NFbmFibGVkICYmIChhZGFwdGVyLT5Jc3JDb3B5WzBdICYgU1hHX0lTUl9FVkVOVCkpIHsKIAkJZm9yIChpID0gMDsKIAkJICAgICBpIDwgYWRhcHRlci0+UnNzU3lzdGVtSW5mby0+UHJvY2Vzc29ySW5mby5Sc3NDcHVDb3VudDsKIAkJICAgICBpKyspIHsKLQkJCXN0cnVjdCBYR19FVkVOVF9SSU5HICpFdmVudFJpbmcgPSAmYWRhcHRlci0+RXZlbnRSaW5nc1tpXTsKLQkJCXN0cnVjdCBTWEdfRVZFTlQgKkV2ZW50ID0KKwkJCXN0cnVjdCBzeGdfZXZlbnRfcmluZyAqRXZlbnRSaW5nID0KKwkJCQkJCSZhZGFwdGVyLT5FdmVudFJpbmdzW2ldOworCQkJc3RydWN0IHN4Z19ldmVudCAqRXZlbnQgPQogCQkJICAgICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W2ldXTsKIAkJCXVuc2lnbmVkIGNoYXIgQ3B1ID0KIAkJCSAgICBhZGFwdGVyLT5Sc3NTeXN0ZW1JbmZvLT5Sc3NJZFRvQ3B1W2ldOwpAQCAtOTc0LDggKzEyODIsMTAgQEAKIAkJCX0KIAkJfQogCX0KLQkvKiBOb3csIGVpdGhlciBzY2hlZHVsZSB0aGUgQ1BVcyBzcGVjaWZpZWQgYnkgdGhlIENwdU1hc2ssICovCi0JLyogb3IgcXVldWUgZGVmYXVsdCAqLworCS8qCisJICogTm93LCBlaXRoZXIgc2NoZWR1bGUgdGhlIENQVXMgc3BlY2lmaWVkIGJ5IHRoZSBDcHVNYXNrLAorCSAqIG9yIHF1ZXVlIGRlZmF1bHQKKwkgKi8KIAlpZiAoQ3B1TWFzaykgewogCQkqUXVldWVEZWZhdWx0ID0gRkFMU0U7CiAJfSBlbHNlIHsKQEAgLTk4NCwzNCArMTI5NCw0MSBAQAogCX0KIAkqVGFyZ2V0Q3B1cyA9IENwdU1hc2s7CiAjZW5kaWYKLQkvKiAqLwotCS8qICBUaGVyZSBhcmUgbm8gRFBDcyBpbiBMaW51eCwgc28gY2FsbCB0aGUgaGFuZGxlciBub3cgKi8KLQkvKiAqLwotCXN4Z19oYW5kbGVfaW50ZXJydXB0KGFkYXB0ZXIpOworCXN4Z19pbnRlcnJ1cHQoYWRhcHRlcik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBzeGdfaW50ZXJydXB0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0vKiAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBSc3NJZCAgID0gMDsgKi8KLQl1MzIgTmV3SXNyOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSWNyLCBTWEdfSUNSKDAsIFNYR19JQ1JfTUFTSyksIFRSVUUpOwogCi0JaWYgKGFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyIDwgNSkgewotCQlEQkdfRVJST1IoIkVudGVyIHN4Z19oYW5kbGVfaW50ZXJydXB0IElTUlsleF1cbiIsCi0JCQkgIGFkYXB0ZXItPklzckNvcHlbMF0pOworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQorfQorCitzdGF0aWMgdm9pZCBzeGdfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgKndvcmtfZG9uZSwKKwkJCQkJIGludCBidWRnZXQpCit7CisJLyogdW5zaWduZWQgY2hhciAgICAgICAgICAgUnNzSWQgICA9IDA7ICovCisJdTMyIE5ld0lzcjsKKwlpbnQgc3hnX25hcGlfY29udGludWUgPSAxOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkhuZGxJbnRyIiwKIAkJICBhZGFwdGVyLCBhZGFwdGVyLT5Jc3JDb3B5WzBdLCAwLCAwKTsKIAkvKiBGb3Igbm93LCBSU1MgaXMgZGlzYWJsZWQgd2l0aCBsaW5lIGJhc2VkIGludGVycnVwdHMgKi8KIAlBU1NFUlQoYWRhcHRlci0+UnNzRW5hYmxlZCA9PSBGQUxTRSk7Ci0JQVNTRVJUKGFkYXB0ZXItPk1zaUVuYWJsZWQgPT0gRkFMU0UpOwotCUFTU0VSVChhZGFwdGVyLT5Jc3JDb3B5WzBdKTsKLS8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCisKKwlhZGFwdGVyLT5Jc3JDb3B5WzBdID0gYWRhcHRlci0+SXNyWzBdOworCWFkYXB0ZXItPklzclswXSA9IDA7CiAKIAkvKiBBbHdheXMgcHJvY2VzcyB0aGUgZXZlbnQgcXVldWUuICovCi0Jc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoYWRhcHRlciwKLQkJCQkoYWRhcHRlci0+UnNzRW5hYmxlZCA/IC8qUnNzSWQgKi8gMCA6IDApKTsKKwl3aGlsZSAoc3hnX25hcGlfY29udGludWUpCisJeworCQlzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZShhZGFwdGVyLAorCQkJCShhZGFwdGVyLT5Sc3NFbmFibGVkID8gLypSc3NJZCAqLyAwIDogMCksCisJCQkJICZzeGdfbmFwaV9jb250aW51ZSwgd29ya19kb25lLCBidWRnZXQpOworCX0KIAogI2lmIFhYWFRPRE8JCQkvKiBSU1Mgc3R1ZmYgKi8KIAlpZiAoLS1hZGFwdGVyLT5Jc3JEcGNzUGVuZGluZykgewpAQCAtMTAyMiwzMCArMTMzOSwzMSBAQAogCQlyZXR1cm47CiAJfQogI2VuZGlmCi0JLyogKi8KIAkvKiBMYXN0IChvciBvbmx5KSBEUEMgcHJvY2Vzc2VzIHRoZSBJU1IgYW5kIGNsZWFycyB0aGUgaW50ZXJydXB0LiAqLwotCS8qICovCiAJTmV3SXNyID0gc3hnX3Byb2Nlc3NfaXNyKGFkYXB0ZXIsIDApOwotCS8qICovCiAJLyogUmVlbmFibGUgaW50ZXJydXB0cyAqLwotCS8qICovCiAJYWRhcHRlci0+SXNyQ29weVswXSA9IDA7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ2xlYXJJc3IiLAogCQkgIGFkYXB0ZXIsIE5ld0lzciwgMCwgMCk7CiAKLQlpZiAoYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIgPCA1KSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJFeGl0IHN4Z19oYW5kbGVfaW50ZXJydXB0MiBhZnRlciBlbmFibGluZyBpbnRlcnJ1cHRcbiIpOwotCX0KLQotCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSXNyLCBOZXdJc3IsIFRSVUUpOwotCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEhuZGxJbnQiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwogfQorc3RhdGljIGludCBzeGdfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYWRhcHRlcl90LCBuYXBpKTsKKwlpbnQgd29ya19kb25lID0gMDsKKworCXN4Z19oYW5kbGVfaW50ZXJydXB0KGFkYXB0ZXIsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSXNyLCAwLCBUUlVFKTsKKwl9CisJcmV0dXJuIHdvcmtfZG9uZTsKK30KIAogLyoKLSAqCiAgKiBzeGdfcHJvY2Vzc19pc3IgLSBQcm9jZXNzIGFuIGludGVycnVwdC4gIENhbGxlZCBmcm9tIHRoZSBsaW5lLWJhc2VkIGFuZAogICoJCQltZXNzYWdlIGJhc2VkIGludGVycnVwdCBEUEMgcm91dGluZXMKICAqCkBAIC0xMDcyLDI0ICsxMzkwLDI4IEBACiAJCX0KIAkJLyogTm8gaG9zdCBidWZmZXIgKi8KIAkJaWYgKElzciAmIFNYR19JU1JfUk1JU1MpIHsKLQkJCS8qIFRoZXJlIGlzIGEgYnVuY2ggb2YgY29kZSBpbiB0aGUgU0xJQyBkcml2ZXIgd2hpY2ggKi8KLQkJCS8qIGF0dGVtcHRzIHRvIHByb2Nlc3MgbW9yZSByZWNlaXZlIGV2ZW50cyBwZXIgRFBDICovCi0JCQkvKiBpZiB3ZSBzdGFydCB0byBmYWxsIGJlaGluZC4gIFdlJ2xsIHByb2JhYmx5ICovCi0JCQkvKiBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIGhlcmUsIGJ1dCBob2xkICovCi0JCQkvKiBvZmYgZm9yIG5vdy4gIEkgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjb2RlIG1vcmUgKi8KLQkJCS8qIGNvbXBsaWNhdGVkIHRoYW4gc3RyaWN0bHkgbmVlZGVkLiAqLwotCQkJYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIrKzsKLQkJCWlmIChhZGFwdGVyLT5TdGF0cy5SY3ZOb0J1ZmZlciA8IDUpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBhIGJ1bmNoIG9mIGNvZGUgaW4gdGhlIFNMSUMgZHJpdmVyIHdoaWNoCisJCQkgKiBhdHRlbXB0cyB0byBwcm9jZXNzIG1vcmUgcmVjZWl2ZSBldmVudHMgcGVyIERQQworCQkJICogaWYgd2Ugc3RhcnQgdG8gZmFsbCBiZWhpbmQuICBXZSdsbCBwcm9iYWJseWQKKwkJCSAqIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgaGVyZSwgYnV0IGhvbGQKKwkJCSAqIG9mZiBmb3Igbm93LiAgSSBkb24ndCB3YW50IHRvIG1ha2UgdGhlIGNvZGUgbW9yZQorCQkJICogY29tcGxpY2F0ZWQgdGhhbiBzdHJpY3RseSBuZWVkZWQuCisJCQkgKi8KKwkJCWFkYXB0ZXItPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKyAJCQlpZiAoYWRhcHRlci0+c3RhdHMucnhfbWlzc2VkX2Vycm9yczwgNSkgewogCQkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBSTUlTUyEhXG4iLAogCQkJCQkgIF9fZnVuY19fKTsKIAkJCX0KIAkJfQogCQkvKiBDYXJkIGNyYXNoICovCiAJCWlmIChJc3IgJiBTWEdfSVNSX0RFQUQpIHsKLQkJCS8qIFNldCBhc2lkZSB0aGUgY3Jhc2ggaW5mbyBhbmQgc2V0IHRoZSBhZGFwdGVyIHN0YXRlIHRvIFJFU0VUICovCi0JCQlhZGFwdGVyLT5DcmFzaENwdSA9Ci0JCQkgICAgKHVuc2lnbmVkIGNoYXIpKChJc3IgJiBTWEdfSVNSX0NQVSkgPj4KLQkJCQkJICAgIFNYR19JU1JfQ1BVX1NISUZUKTsKKwkJCS8qCisJCQkgKiBTZXQgYXNpZGUgdGhlIGNyYXNoIGluZm8gYW5kIHNldCB0aGUgYWRhcHRlciBzdGF0ZQorIAkJCSAqIHRvIFJFU0VUCisgCQkJICovCisJCQlhZGFwdGVyLT5DcmFzaENwdSA9ICh1bnNpZ25lZCBjaGFyKQorCQkJCSgoSXNyICYgU1hHX0lTUl9DUFUpID4+IFNYR19JU1JfQ1BVX1NISUZUKTsKIAkJCWFkYXB0ZXItPkNyYXNoTG9jYXRpb24gPSAodXNob3J0KSAoSXNyICYgU1hHX0lTUl9DUkFTSCk7CiAJCQlhZGFwdGVyLT5EZWFkID0gVFJVRTsKIAkJCURCR19FUlJPUigiJXM6IElTUl9ERUFEICV4LCBDUFU6ICVkXG4iLCBfX2Z1bmNfXywKQEAgLTEwOTcsMTggKzE0MTksMTggQEAKIAkJfQogCQkvKiBFdmVudCByaW5nIGZ1bGwgKi8KIAkJaWYgKElzciAmIFNYR19JU1JfRVJGVUxMKSB7Ci0JCQkvKiBTYW1lIGlzc3VlIGFzIFJNSVNTLCByZWFsbHkuICBUaGlzIG1lYW5zIHRoZSAqLwotCQkJLyogaG9zdCBpcyBmYWxsaW5nIGJlaGluZCB0aGUgY2FyZC4gIE5lZWQgdG8gaW5jcmVhc2UgKi8KLQkJCS8qIGV2ZW50IHJpbmcgc2l6ZSwgcHJvY2VzcyBtb3JlIGV2ZW50cyBwZXIgaW50ZXJydXB0LCAqLwotCQkJLyogYW5kL29yIHJlZHVjZS9yZW1vdmUgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uLiAqLworCQkJLyoKKwkJCSAqIFNhbWUgaXNzdWUgYXMgUk1JU1MsIHJlYWxseS4gIFRoaXMgbWVhbnMgdGhlCisJCQkgKiBob3N0IGlzIGZhbGxpbmcgYmVoaW5kIHRoZSBjYXJkLiAgTmVlZCB0byBpbmNyZWFzZQorCQkJICogZXZlbnQgcmluZyBzaXplLCBwcm9jZXNzIG1vcmUgZXZlbnRzIHBlciBpbnRlcnJ1cHQsCisJCQkgKiBhbmQvb3IgcmVkdWNlL3JlbW92ZSBpbnRlcnJ1cHQgYWdncmVnYXRpb24uCisJCQkgKi8KIAkJCWFkYXB0ZXItPlN0YXRzLkV2ZW50UmluZ0Z1bGwrKzsKIAkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBFVkVOVCBSSU5HIEZVTEwhIVxuIiwKIAkJCQkgIF9fZnVuY19fKTsKIAkJfQogCQkvKiBUcmFuc21pdCBkcm9wIC0gbm8gRFJBTSBidWZmZXJzIG9yIFhNVCBlcnJvciAqLwogCQlpZiAoSXNyICYgU1hHX0lTUl9YRFJPUCkgewotCQkJYWRhcHRlci0+U3RhdHMuWG10RHJvcHMrKzsKLQkJCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOwogCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIFhEUk9QISFcbiIsIF9fZnVuY19fKTsKIAkJfQogCX0KQEAgLTExMTgsMTggKzE0NDAsMjQgQEAKIAl9CiAJLyogRHVtcCAqLwogCWlmIChJc3IgJiBTWEdfSVNSX1VQQykgewotCQlBU1NFUlQoYWRhcHRlci0+RHVtcENtZFJ1bm5pbmcpOwkvKiBNYXliZSBjaGFuZ2Ugd2hlbiBkZWJ1ZyBpcyBhZGRlZC4uICovCisJCS8qIE1heWJlIGNoYW5nZSB3aGVuIGRlYnVnIGlzIGFkZGVkLi4gKi8KKy8vCQlBU1NFUlQoYWRhcHRlci0+RHVtcENtZFJ1bm5pbmcpOwogCQlhZGFwdGVyLT5EdW1wQ21kUnVubmluZyA9IEZBTFNFOwogCX0KIAkvKiBMaW5rIGV2ZW50ICovCiAJaWYgKElzciAmIFNYR19JU1JfTElOSykgewotCQlzeGdfbGlua19ldmVudChhZGFwdGVyKTsKKwkJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV04pIHsKKwkJCWFkYXB0ZXItPmxpbmtfc3RhdHVzX2NoYW5nZWQgPSAxOworCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dXBkYXRlX2xpbmtfc3RhdHVzKTsKKwkJfQogCX0KIAkvKiBEZWJ1ZyAtIGJyZWFrcG9pbnQgaGl0ICovCiAJaWYgKElzciAmIFNYR19JU1JfQlJFQUspIHsKLQkJLyogQXQgdGhlIG1vbWVudCBBR0RCIGlzbid0IHdyaXR0ZW4gdG8gc3VwcG9ydCBpbnRlcmFjdGl2ZSAqLwotCQkvKiBkZWJ1ZyBzZXNzaW9ucy4gIFdoZW4gaXQgaXMsIHRoaXMgaW50ZXJydXB0IHdpbGwgYmUgdXNlZCAqLwotCQkvKiB0byBzaWduYWwgQUdEQiB0aGF0IGl0IGhhcyBoaXQgYSBicmVha3BvaW50LiAgRm9yIG5vdywgQVNTRVJULiAqLworCQkvKgorCQkgKiBBdCB0aGUgbW9tZW50IEFHREIgaXNuJ3Qgd3JpdHRlbiB0byBzdXBwb3J0IGludGVyYWN0aXZlCisJCSAqIGRlYnVnIHNlc3Npb25zLiAgV2hlbiBpdCBpcywgdGhpcyBpbnRlcnJ1cHQgd2lsbCBiZSB1c2VkIHRvCisJCSAqIHNpZ25hbCBBR0RCIHRoYXQgaXQgaGFzIGhpdCBhIGJyZWFrcG9pbnQuICBGb3Igbm93LCBBU1NFUlQuCisJCSAqLwogCQlBU1NFUlQoMCk7CiAJfQogCS8qIEhlYXJ0YmVhdCByZXNwb25zZSAqLwpAQCAtMTE0Myw3ICsxNDcxLDMzIEBACiB9CiAKIC8qCisgKiBzeGdfcmN2X2NoZWNrc3VtIC0gU2V0IHRoZSBjaGVja3N1bSBmb3IgcmVjZWl2ZWQgcGFja2V0CiAgKgorICogQXJndWVtZW50czoKKyAqIAkJQGFkYXB0ZXIgLSBBZGFwdGVyIHN0cnVjdHVyZSBvbiB3aGljaCBwYWNrZXQgaXMgcmVjZWl2ZWQKKyAqIAkJQHNrYiAtIFBhY2tldCB3aGljaCBpcyByZWNlaWV2ZWQKKyAqIAkJQEV2ZW50IC0gRXZlbnQgcmVhZCBmcm9tIGhhcmR3YXJlCisgKi8KKwordm9pZCBzeGdfcmN2X2NoZWNrc3VtKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgc3RydWN0IHN4Z19ldmVudCAqRXZlbnQpCit7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCWlmIChsaWtlbHkoYWRhcHRlci0+ZmxhZ3MgJiBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRCkpIHsKKwkJaWYgKGxpa2VseShhZGFwdGVyLT5mbGFncyAmIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCkKKwkJCSYmIChFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1RDUElQKSkgeworCQkJaWYoIShFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1RDUEJBRCkpCisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJaWYoIShFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX0lQQkFEKSkKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCX0gZWxzZSBpZihFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX0lQT05MWSkgeworCQkJaWYoIShFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX0lQQkFEKSkKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQl9CisJfQorfQorCisvKgogICogc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUgLSBQcm9jZXNzIG91ciBldmVudCBxdWV1ZQogICoKICAqIEFyZ3VtZW50czoKQEAgLTExNTMsNDYgKzE1MDcsNTIgQEAKICAqIFJldHVybiBWYWx1ZToKICAqIAlOb25lLgogICovCi1zdGF0aWMgdTMyIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiBSc3NJZCkKK3N0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIFJzc0lkLAorCQkJIGludCAqc3hnX25hcGlfY29udGludWUsIGludCAqd29ya19kb25lLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBTWEdfRVZFTlRfUklORyAqRXZlbnRSaW5nID0gJmFkYXB0ZXItPkV2ZW50UmluZ3NbUnNzSWRdOwotCXN0cnVjdCBTWEdfRVZFTlQgKkV2ZW50ID0gJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbUnNzSWRdXTsKKwlzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcgKkV2ZW50UmluZyA9ICZhZGFwdGVyLT5FdmVudFJpbmdzW1Jzc0lkXTsKKwlzdHJ1Y3Qgc3hnX2V2ZW50ICpFdmVudCA9ICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXV07CiAJdTMyIEV2ZW50c1Byb2Nlc3NlZCA9IDAsIEJhdGNoZXMgPSAwOwotCXUzMiBudW1fc2ticyA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKICNpZmRlZiBMSU5VWF9IQU5ETEVTX1JDVl9JTkRJQ0FUSU9OX0xJU1RTCiAJc3RydWN0IHNrX2J1ZmYgKnByZXZfc2tiID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqSW5kaWNhdGlvbkxpc3RbU1hHX1JDVl9BUlJBWVNJWkVdOwogCXUzMiBJbmRleDsKLQlzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgKlJjdkRhdGFCdWZmZXJIZHI7CisJc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICpSY3ZEYXRhQnVmZmVySGRyOwogI2VuZGlmCiAJdTMyIFJldHVyblN0YXR1cyA9IDA7CisJaW50IHN4Z19yY3ZfZGF0YV9idWZmZXJzID0gU1hHX1JDVl9EQVRBX0JVRkZFUlM7CiAKIAlBU1NFUlQoKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9SVU5OSU5HKSB8fAogCSAgICAgICAoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX1BBVVNJTkcpIHx8CiAJICAgICAgIChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfUEFVU0VEKSB8fAogCSAgICAgICAoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX0hBTFRJTkcpKTsKLQkvKiBXZSBtYXkgc3RpbGwgaGF2ZSB1bnByb2Nlc3NlZCBldmVudHMgb24gdGhlIHF1ZXVlIGlmICovCi0JLyogdGhlIGNhcmQgY3Jhc2hlZC4gIERvbid0IHByb2Nlc3MgdGhlbS4gKi8KKwkvKgorCSAqIFdlIG1heSBzdGlsbCBoYXZlIHVucHJvY2Vzc2VkIGV2ZW50cyBvbiB0aGUgcXVldWUgaWYKKwkgKiB0aGUgY2FyZCBjcmFzaGVkLiAgRG9uJ3QgcHJvY2VzcyB0aGVtLgorCSAqLwogCWlmIChhZGFwdGVyLT5EZWFkKSB7CiAJCXJldHVybiAoMCk7CiAJfQotCS8qIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBwcm9jZXNzb3IgdGhhdCAqLwotCS8qIGFjY2Vzc2VzIHRoaXMgcXVldWUsIGFuZCBvbmx5IGF0IGludGVycnVwdC1EUEMgdGltZS4gIFNvICovCi0JLyogd2Ugc2hvdWxkbid0IG5lZWQgYSBsb2NrIGZvciBhbnkgb2YgdGhpcy4gKi8KKwkvKgorCSAqICBJbiB0aGVvcnkgdGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgcHJvY2Vzc29yIHRoYXQKKwkgKiBhY2Nlc3NlcyB0aGlzIHF1ZXVlLCBhbmQgb25seSBhdCBpbnRlcnJ1cHQtRFBDIHRpbWUuICBTby8KKwkgKiB3ZSBzaG91bGRuJ3QgbmVlZCBhIGxvY2sgZm9yIGFueSBvZiB0aGlzLgorCSAqLwogCXdoaWxlIChFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1ZBTElEKSB7CisJCSgqc3hnX25hcGlfY29udGludWUpID0gMTsKIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRXZlbnQiLAogCQkJICBFdmVudCwgRXZlbnQtPkNvZGUsIEV2ZW50LT5TdGF0dXMsCiAJCQkgIGFkYXB0ZXItPk5leHRFdmVudCk7CiAJCXN3aXRjaCAoRXZlbnQtPkNvZGUpIHsKIAkJY2FzZSBFVkVOVF9DT0RFX0JVRkZFUlM6Ci0JCQlBU1NFUlQoIShFdmVudC0+Q29tbWFuZEluZGV4ICYgMHhGRjAwKSk7CS8qIFNYR19SSU5HX0lORk8gSGVhZCAmIFRhaWwgPT0gdW5zaWduZWQgY2hhciAqLwotCQkJLyogKi8KKwkJCS8qIHN0cnVjdCBzeGdfcmluZ19pbmZvIEhlYWQgJiBUYWlsID09IHVuc2lnbmVkIGNoYXIgKi8KKwkJCUFTU0VSVCghKEV2ZW50LT5Db21tYW5kSW5kZXggJiAweEZGMDApKTsKIAkJCXN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyhhZGFwdGVyLAogCQkJCQkJICAgICAgIEV2ZW50LT5Db21tYW5kSW5kZXgpOwotCQkJLyogKi8KIAkJCWJyZWFrOwogCQljYXNlIEVWRU5UX0NPREVfU0xPV1JDVjoKKwkJCSgqd29ya19kb25lKSsrOwogCQkJLS1hZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkOwogCQkJaWYgKChza2IgPSBzeGdfc2xvd19yZWNlaXZlKGFkYXB0ZXIsIEV2ZW50KSkpIHsKIAkJCQl1MzIgcnhfYnl0ZXM7CkBAIC0xMjAwLDUxICsxNTYwLDYxIEBACiAJCQkJLyogQWRkIGl0IHRvIG91ciBpbmRpY2F0aW9uIGxpc3QgKi8KIAkJCQlTWEdfQUREX1JDVl9QQUNLRVQoYWRhcHRlciwgc2tiLCBwcmV2X3NrYiwKIAkJCQkJCSAgIEluZGljYXRpb25MaXN0LCBudW1fc2ticyk7Ci0JCQkJLyogIEluIExpbnV4LCB3ZSBqdXN0IHBhc3MgdXAgZWFjaCBza2IgdG8gdGhlIHByb3RvY29sIGFib3ZlIGF0IHRoaXMgcG9pbnQsICovCi0JCQkJLyogIHRoZXJlIGlzIG5vIGNhcGFiaWxpdHkgb2YgYW4gaW5kaWNhdGlvbiBsaXN0LiAqLworCQkJCS8qCisJCQkJICogTGludXgsIHdlIGp1c3QgcGFzcyB1cCBlYWNoIHNrYiB0byB0aGUKKwkJCQkgKiBwcm90b2NvbCBhYm92ZSBhdCB0aGlzIHBvaW50LCB0aGVyZSBpcyBubworCQkJCSAqIGNhcGFiaWxpdHkgb2YgYW4gaW5kaWNhdGlvbiBsaXN0LgorCQkJCSAqLwogI2Vsc2UKLS8qIENIRUNLICAgICAgICAgICAgc2tiX3B1bGwoc2tiLCBJTklDX1JDVkJVRl9IRUFEU0laRSk7ICovCi0JCQkJcnhfYnl0ZXMgPSBFdmVudC0+TGVuZ3RoOwkvKiAocmN2YnVmLT5sZW5ndGggJiBJUkhERFJfRkxFTl9NU0spOyAqLwotCQkJCXNrYl9wdXQoc2tiLCByeF9ieXRlcyk7CisJCQkJLyogQ0hFQ0sgc2tiX3B1bGwoc2tiLCBJTklDX1JDVkJVRl9IRUFEU0laRSk7ICovCisJCQkJLyogKHJjdmJ1Zi0+bGVuZ3RoICYgSVJIRERSX0ZMRU5fTVNLKTsgKi8KKwkJCQlyeF9ieXRlcyA9IEV2ZW50LT5MZW5ndGg7CiAJCQkJYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJCWFkYXB0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IHJ4X2J5dGVzOwotI2lmIFNYR19PRkZMT0FEX0lQX0NIRUNLU1VNCi0JCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLSNlbmRpZgorCQkJCXN4Z19yY3ZfY2hlY2tzdW0oYWRhcHRlciwgc2tiLCBFdmVudCk7CiAJCQkJc2tiLT5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOwotCQkJCW5ldGlmX3J4KHNrYik7CisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKICNlbmRpZgogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEQkdfRVJST1IoIiVzOiBFUlJPUiAgSW52YWxpZCBFdmVudENvZGUgJWRcbiIsCiAJCQkJICBfX2Z1bmNfXywgRXZlbnQtPkNvZGUpOwotLyogICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKDApOyAqLworCQkvKiBBU1NFUlQoMCk7ICovCiAJCX0KLQkJLyogU2VlIGlmIHdlIG5lZWQgdG8gcmVzdG9jayBjYXJkIHJlY2VpdmUgYnVmZmVycy4gKi8KLQkJLyogVGhlcmUgYXJlIHR3byB0aGluZ3MgdG8gbm90ZSBoZXJlOiAqLwotCQkvKiAgICAgIEZpcnN0IC0gVGhpcyB0ZXN0IGlzIG5vdCBTTVAgc2FmZS4gIFRoZSAqLwotCQkvKiAgICAgICAgICAgICAgYWRhcHRlci0+QnVmZmVyc09uQ2FyZCBmaWVsZCBpcyBwcm90ZWN0ZWQgdmlhIGF0b21pYyBpbnRlcmxvY2tlZCBjYWxscywgYnV0ICovCi0JCS8qICAgICAgICAgICAgICB3ZSBkbyBub3QgcHJvdGVjdCBpdCB3aXRoIHJlc3BlY3QgdG8gdGhlc2UgdGVzdHMuICBUaGUgb25seSB3YXkgdG8gZG8gdGhhdCAqLwotCQkvKiAgICAgIGlzIHdpdGggYSBsb2NrLCBhbmQgSSBkb24ndCB3YW50IHRvIGdyYWIgYSBsb2NrIGV2ZXJ5IHRpbWUgd2UgYWRqdXN0IHRoZSAqLwotCQkvKiAgICAgIEJ1ZmZlcnNPbkNhcmQgY291bnQuICBJbnN0ZWFkLCB3ZSBhbGxvdyB0aGUgYnVmZmVyIHJlcGxlbmlzaG1lbnQgdG8gYmUgb2ZmICovCi0JCS8qICAgICAgb25jZSBpbiBhIHdoaWxlLiAgVGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0aGUgY2FyZCBpcyBnaXZlbiBvbmUgKi8KLQkJLyogICAgICBtb3JlLW9yLWxlc3MgZGVzY3JpcHRvciBibG9jayB0aGFuIHRoZSBhcmJpdHJhcnkgdmFsdWUgd2UndmUgY2hvc2VuLiAqLwotCQkvKiAgICAgIE5vIGJpZyBkZWFsICovCi0JCS8qICAgICAgSW4gc2hvcnQgRE8gTk9UIEFERCBBIExPQ0sgSEVSRSwgT1IgV0hFUkUgUmN2QnVmZmVyc09uQ2FyZCBpcyBhZGp1c3RlZC4gKi8KLQkJLyogICAgICBTZWNvbmQgLSBXZSBleHBlY3QgdGhpcyB0ZXN0IHRvIHJhcmVseSBldmFsdWF0ZSB0byB0cnVlLiAgV2UgYXR0ZW1wdCB0byAqLwotCQkvKiAgICAgIHJlZmlsbCBkZXNjcmlwdG9yIGJsb2NrcyBhcyB0aGV5IGFyZSByZXR1cm5lZCB0byB1cyAqLwotCQkvKiAgICAgIChzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MpLCBzbyBUaGUgb25seSB0aW1lIHRoaXMgc2hvdWxkIGV2YWx1YXRlICovCi0JCS8qICAgICAgdG8gdHJ1ZSBpcyB3aGVuIHN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyBmYWlsZWQgdG8gYWxsb2NhdGUgKi8KLQkJLyogICAgICAgICAgICAgIHJlY2VpdmUgYnVmZmVycy4gKi8KLQkJaWYgKGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPCBTWEdfUkNWX0RBVEFfQlVGRkVSUykgeworCQkvKgorCQkgKiBTZWUgaWYgd2UgbmVlZCB0byByZXN0b2NrIGNhcmQgcmVjZWl2ZSBidWZmZXJzLgorCQkgKiBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0byBub3RlIGhlcmU6CisJCSAqICBGaXJzdCAtIFRoaXMgdGVzdCBpcyBub3QgU01QIHNhZmUuICBUaGUKKwkJICogICAgYWRhcHRlci0+QnVmZmVyc09uQ2FyZCBmaWVsZCBpcyBwcm90ZWN0ZWQgdmlhIGF0b21pYworCQkgKiAgICBpbnRlcmxvY2tlZCBjYWxscywgYnV0IHdlIGRvIG5vdCBwcm90ZWN0IGl0IHdpdGggcmVzcGVjdAorCQkgKiAgICB0byB0aGVzZSB0ZXN0cy4gIFRoZSBvbmx5IHdheSB0byBkbyB0aGF0IGlzIHdpdGggYSBsb2NrLAorCQkgKiAgICBhbmQgSSBkb24ndCB3YW50IHRvIGdyYWIgYSBsb2NrIGV2ZXJ5IHRpbWUgd2UgYWRqdXN0IHRoZQorCQkgKiAgICBCdWZmZXJzT25DYXJkIGNvdW50LiAgSW5zdGVhZCwgd2UgYWxsb3cgdGhlIGJ1ZmZlcgorCQkgKiAgICByZXBsZW5pc2htZW50IHRvIGJlIG9mZiBvbmNlIGluIGEgd2hpbGUuIFRoZSB3b3JzdCB0aGF0CisJCSAqICAgIGNhbiBoYXBwZW4gaXMgdGhlIGNhcmQgaXMgZ2l2ZW4gb24gbW9yZS1vci1sZXNzIGRlc2NyaXB0b3IKKwkJICogICAgYmxvY2sgdGhhbiB0aGUgYXJiaXRyYXJ5IHZhbHVlIHdlJ3ZlIGNob3Nlbi4gTm8gYmlnIGRlYWwKKwkJICogICAgSW4gc2hvcnQgRE8gTk9UIEFERCBBIExPQ0sgSEVSRSwgT1IgV0hFUkUgUmN2QnVmZmVyc09uQ2FyZAorCQkgKiAgICBpcyBhZGp1c3RlZC4KKwkJICogIFNlY29uZCAtIFdlIGV4cGVjdCB0aGlzIHRlc3QgdG8gcmFyZWx5CisJCSAqICAgIGV2YWx1YXRlIHRvIHRydWUuICBXZSBhdHRlbXB0IHRvIHJlZmlsbCBkZXNjcmlwdG9yIGJsb2NrcworCQkgKiAgICBhcyB0aGV5IGFyZSByZXR1cm5lZCB0byB1cyAoc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKQorCQkgKiAgICBzbyBUaGUgb25seSB0aW1lIHRoaXMgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaXMgd2hlbgorCQkgKiAgICBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MgZmFpbGVkIHRvIGFsbG9jYXRlCisJCSAqICAgIHJlY2VpdmUgYnVmZmVycy4KKwkJICovCisJCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQpCisJCQlzeGdfcmN2X2RhdGFfYnVmZmVycyA9IFNYR19KVU1CT19SQ1ZfREFUQV9CVUZGRVJTOworCisJCWlmIChhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkIDwgc3hnX3Jjdl9kYXRhX2J1ZmZlcnMpIHsKIAkJCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKIAkJfQotCQkvKiBJdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3Qgc2V0IHRoaXMgdG8gemVyby4gKi8KLQkJLyogQnV0IGNsZWFyaW5nIHRoZSB0b3AgYml0IHNhdmVzIHBvdGVudGlhbCBkZWJ1ZyBpbmZvLi4uICovCisJCS8qCisJCSAqIEl0J3MgbW9yZSBlZmZpY2llbnQgdG8ganVzdCBzZXQgdGhpcyB0byB6ZXJvLgorCQkgKiBCdXQgY2xlYXJpbmcgdGhlIHRvcCBiaXQgc2F2ZXMgcG90ZW50aWFsIGRlYnVnIGluZm8uLi4KKwkJICovCiAJCUV2ZW50LT5TdGF0dXMgJj0gfkVWRU5UX1NUQVRVU19WQUxJRDsKLQkJLyogQWR2YW5jdCB0byB0aGUgbmV4dCBldmVudCAqLworCQkvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGV2ZW50ICovCiAJCVNYR19BRFZBTkNFX0lOREVYKGFkYXB0ZXItPk5leHRFdmVudFtSc3NJZF0sIEVWRU5UX1JJTkdfU0laRSk7CiAJCUV2ZW50ID0gJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbUnNzSWRdXTsKIAkJRXZlbnRzUHJvY2Vzc2VkKys7CkBAIC0xMjUzLDkgKzE2MjMsMTEgQEAKIAkJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbUnNzSWRdLkV2ZW50UmVsZWFzZSwKIAkJCQkgIEVWRU5UX1JJTkdfQkFUQ0gsIEZBTFNFKTsKIAkJCUV2ZW50c1Byb2Nlc3NlZCA9IDA7Ci0JCQkvKiBJZiB3ZSd2ZSBwcm9jZXNzZWQgb3VyIGJhdGNoIGxpbWl0LCBicmVhayBvdXQgb2YgdGhlICovCi0JCQkvKiBsb29wIGFuZCByZXR1cm4gU1hHX0lTUl9FVkVOVCB0byBhcnJhbmdlIGZvciB1cyB0byAqLwotCQkJLyogYmUgY2FsbGVkIGFnYWluICovCisJCQkvKgorCQkJICogSWYgd2UndmUgcHJvY2Vzc2VkIG91ciBiYXRjaCBsaW1pdCwgYnJlYWsgb3V0IG9mIHRoZQorCQkJICogbG9vcCBhbmQgcmV0dXJuIFNYR19JU1JfRVZFTlQgdG8gYXJyYW5nZSBmb3IgdXMgdG8KKwkJCSAqIGJlIGNhbGxlZCBhZ2FpbgorCQkJICovCiAJCQlpZiAoQmF0Y2hlcysrID09IEVWRU5UX0JBVENIX0xJTUlUKSB7CiAJCQkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsCiAJCQkJCSAgVFJBQ0VfTk9JU1ksICJFdnRMaW1pdCIsIEJhdGNoZXMsCkBAIC0xMjY0LDE2ICsxNjM2LDIyIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJaWYgKCp3b3JrX2RvbmUgPj0gYnVkZ2V0KSB7CisJCQlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzW1Jzc0lkXS5FdmVudFJlbGVhc2UsCisJCQkJICBFdmVudHNQcm9jZXNzZWQsIEZBTFNFKTsKKwkJCUV2ZW50c1Byb2Nlc3NlZCA9IDA7CisJCQkoKnN4Z19uYXBpX2NvbnRpbnVlKSA9IDA7CisJCQlicmVhazsKKwkJfQogCX0KKwlpZiAoIShFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1ZBTElEKSkKKwkJKCpzeGdfbmFwaV9jb250aW51ZSkgPSAwOworCiAjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUwotCS8qICovCiAJLyogSW5kaWNhdGUgYW55IHJlY2VpdmVkIGR1bWItbmljIGZyYW1lcyAqLwotCS8qICovCiAJU1hHX0lORElDQVRFX1BBQ0tFVFMoYWRhcHRlciwgSW5kaWNhdGlvbkxpc3QsIG51bV9za2JzKTsKICNlbmRpZgotCS8qICovCiAJLyogUmVsZWFzZSBldmVudHMgYmFjayB0byB0aGUgY2FyZC4gKi8KLQkvKiAqLwogCWlmIChFdmVudHNQcm9jZXNzZWQpIHsKIAkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAogCQkJICBFdmVudHNQcm9jZXNzZWQsIEZBTFNFKTsKQEAgLTEyODksMjcgKzE2NjcsMzUgQEAKICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCi0KICAqIFJldHVybgogICoJTm9uZQogICovCiBzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfc2xvd19zZW5kKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IFNYR19YTVRfUklORyAqWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKLQlzdHJ1Y3QgU1hHX1JJTkdfSU5GTyAqWG10UmluZ0luZm8gPSAmYWRhcHRlci0+WG10UmluZ1plcm9JbmZvOworCXN0cnVjdCBzeGdfeG10X3JpbmcgKlhtdFJpbmcgPSAmYWRhcHRlci0+WG10UmluZ3NbMF07CisJc3RydWN0IHN4Z19yaW5nX2luZm8gKlhtdFJpbmdJbmZvID0gJmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbzsKIAl1MzIgKkNvbnRleHRUeXBlOwotCXN0cnVjdCBTWEdfQ01EICpYbXRDbWQ7CisJc3RydWN0IHN4Z19jbWQgKlhtdENtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIHNnbF9mbGFncyA9IDA7CisJdW5zaWduZWQgaW50IHByb2Nlc3NlZF9jb3VudCA9IDA7CiAKLQkvKiBOT1RFIC0gVGhpcyBsb2NrIGlzIGRyb3BwZWQgYW5kIHJlZ3JhYmJlZCBpbiB0aGlzIGxvb3AuICovCi0JLyogVGhpcyBtZWFucyB0d28gZGlmZmVyZW50IHByb2Nlc3NvcnMgY2FuIGJvdGggYmUgcnVubmluZyAqLwotCS8qIHRocm91Z2ggdGhpcyBsb29wLiBCZSAqdmVyeSogY2FyZWZ1bC4gKi8KLQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkvKgorCSAqIE5PVEUgLSBUaGlzIGxvY2sgaXMgZHJvcHBlZCBhbmQgcmVncmFiYmVkIGluIHRoaXMgbG9vcC4KKwkgKiBUaGlzIG1lYW5zIHR3byBkaWZmZXJlbnQgcHJvY2Vzc29ycyBjYW4gYm90aCBiZSBydW5uaW5nLworCSAqIHRocm91Z2ggdGhpcyBsb29wLiBCZSAqdmVyeSogY2FyZWZ1bC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKKwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZHMiLAogCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CiAKLQl3aGlsZSAoWG10UmluZ0luZm8tPlRhaWwgIT0gKmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKLQkJLyogTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kICovCi0JCS8qIGFzc29jaWF0ZWQgU0dMLCBhbmQgYWR2YW5jZSB0aGUgdGFpbCAqLworCXdoaWxlICgoWG10UmluZ0luZm8tPlRhaWwgIT0gKmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpCisJCSYmIHByb2Nlc3NlZF9jb3VudCsrIDwgU1hHX0NPTVBMRVRFX1NMT1dfU0VORF9MSU1JVCkgIHsKKwkJLyoKKwkJICogTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kCisJCSAqIGFzc29jaWF0ZWQgU0dMLCBhbmQgYWR2YW5jZSB0aGUgdGFpbAorCQkgKi8KIAkJU1hHX1JFVFVSTl9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgQ29udGV4dFR5cGUpOwogCQlBU1NFUlQoQ29udGV4dFR5cGUpOwogCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBTbmQiLApAQCAtMTMyMSwzMCArMTcwNyw0NSBAQAogCQljYXNlIFNYR19TR0xfRFVNQjoKIAkJCXsKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJCXN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgKlN4Z1NnbCA9CisJCQkJCShzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyICopQ29udGV4dFR5cGU7CisJCQkJZG1hNjRfYWRkcl90IEZpcnN0U2dlQWRkcmVzczsKKwkJCQl1MzIgRmlyc3RTZ2VMZW5ndGg7CisKIAkJCQkvKiBEdW1iLW5pYyBzZW5kLiAgQ29tbWFuZCBjb250ZXh0IGlzIHRoZSBkdW1iLW5pYyBTR0wgKi8KIAkJCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilDb250ZXh0VHlwZTsKKwkJCQlza2IgPSBTeGdTZ2wtPkR1bWJQYWNrZXQ7CisJCQkJRmlyc3RTZ2VBZGRyZXNzID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzOworCQkJCUZpcnN0U2dlTGVuZ3RoID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VMZW5ndGg7CiAJCQkJLyogQ29tcGxldGUgdGhlIHNlbmQgKi8KIAkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKIAkJCQkJICBUUkFDRV9JTVBPUlRBTlQsICJEbVNuZENtcCIsIHNrYiwgMCwKIAkJCQkJICAwLCAwKTsKIAkJCQlBU1NFUlQoYWRhcHRlci0+U3RhdHMuWG10UUxlbik7Ci0JCQkJYWRhcHRlci0+U3RhdHMuWG10UUxlbi0tOwkvKiB3aXRoaW4gWG10WmVyb0xvY2sgKi8KLQkJCQlhZGFwdGVyLT5TdGF0cy5YbXRPaysrOwotCQkJCS8qIE5vdyBkcm9wIHRoZSBsb2NrIGFuZCBjb21wbGV0ZSB0aGUgc2VuZCBiYWNrIHRvICovCi0JCQkJLyogTWljcm9zb2Z0LiAgV2UgbmVlZCB0byBkcm9wIHRoZSBsb2NrIGJlY2F1c2UgKi8KLQkJCQkvKiBNaWNyb3NvZnQgY2FuIGNvbWUgYmFjayB3aXRoIGEgY2hpbW5leSBzZW5kLCB3aGljaCAqLwotCQkJCS8qIHJlc3VsdHMgaW4gYSBkb3VibGUgdHJpcCBpbiBTeGdUY3BPdXB1dCAqLwotCQkJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7Ci0JCQkJU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBza2IpOworCQkJCS8qCisJCQkJICogTm93IGRyb3AgdGhlIGxvY2sgYW5kIGNvbXBsZXRlIHRoZSBzZW5kCisJCQkJICogYmFjayB0byBNaWNyb3NvZnQuICBXZSBuZWVkIHRvIGRyb3AgdGhlIGxvY2sKKwkJCQkgKiBiZWNhdXNlIE1pY3Jvc29mdCBjYW4gY29tZSBiYWNrIHdpdGggYQorCQkJCSAqIGNoaW1uZXkgc2VuZCwgd2hpY2ggcmVzdWx0cyBpbiBhIGRvdWJsZSB0cmlwCisJCQkJICogaW4gU3hnVGNwT3VwdXQKKwkJCQkgKi8KKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCQkmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKKworCQkJCVN4Z1NnbC0+RHVtYlBhY2tldCA9IE5VTEw7CisJCQkJU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBza2IsCisJCQkJCQkJRmlyc3RTZ2VBZGRyZXNzLAorCQkJCQkJCUZpcnN0U2dlTGVuZ3RoKTsKKwkJCQlTWEdfRlJFRV9TR0xfQlVGRkVSKGFkYXB0ZXIsIFN4Z1NnbCwgTlVMTCk7CiAJCQkJLyogYW5kIHJlYWNxdWlyZS4uICovCi0JCQkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUFTU0VSVCgwKTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ21wU25kIiwKIAkJICBhZGFwdGVyLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwsIDApOwogfQpAQCAtMTM1NiwyMiArMTc1NywyNyBAQAogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKglFdmVudAkJLSBSZWNlaXZlIGV2ZW50CiAgKgotICogUmV0dXJuCi0gKgkgc2tiCisgKiBSZXR1cm4gLSBza2IKICAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBTWEdfRVZFTlQgKkV2ZW50KQorc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCisJCQkJCQlzdHJ1Y3Qgc3hnX2V2ZW50ICpFdmVudCkKIHsKLQlzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgKlJjdkRhdGFCdWZmZXJIZHI7CisJdTMyIEJ1ZmZlclNpemUgPSBhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZTsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKlJjdkRhdGFCdWZmZXJIZHI7CiAJc3RydWN0IHNrX2J1ZmYgKlBhY2tldDsKKwlzdGF0aWMgaW50IHJlYWRfY291bnRlciA9IDA7CiAKLQlSY3ZEYXRhQnVmZmVySGRyID0gKHN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiopIEV2ZW50LT5Ib3N0SGFuZGxlOworCVJjdkRhdGFCdWZmZXJIZHIgPSAoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopIEV2ZW50LT5Ib3N0SGFuZGxlOworCWlmKHJlYWRfY291bnRlcisrICYgMHgxMDApCisJeworCQlzeGdfY29sbGVjdF9zdGF0aXN0aWNzKGFkYXB0ZXIpOworCQlyZWFkX2NvdW50ZXIgPSAwOworCX0KIAlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkcik7CiAJQVNTRVJUKFJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID09IFNYR19CVUZGRVJfT05DQVJEKTsKLQlBU1NFUlQoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSA9PQotCSAgICAgICBSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyk7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIlNsb3dSY3YiLCBFdmVudCwKIAkJICBSY3ZEYXRhQnVmZmVySGRyLCBSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSwKLQkJICBSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyk7CisJCSAgLypSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyovIDApOwogCS8qIERyb3AgcmN2IGZyYW1lcyBpbiBub24tcnVubmluZyBzdGF0ZSAqLwogCXN3aXRjaCAoYWRhcHRlci0+U3RhdGUpIHsKIAljYXNlIFNYR19TVEFURV9SVU5OSU5HOgpAQCAtMTM4NSwxNCArMTc5MSwxNiBAQAogCQlnb3RvIGRyb3A7CiAJfQogCisJLyoKKwkgKiBtZW1jcHkoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSwKKwkgKiAJCVJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzLCBFdmVudC0+TGVuZ3RoKTsKKwkgKi8KKwogCS8qIENoYW5nZSBidWZmZXIgc3RhdGUgdG8gVVBTVFJFQU0gKi8KIAlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfVVBTVFJFQU07CiAJaWYgKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfUkNWRVJSKSB7CiAJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkVycm9yIiwKIAkJCSAgRXZlbnQsIEV2ZW50LT5TdGF0dXMsIEV2ZW50LT5Ib3N0SGFuZGxlLCAwKTsKLQkJLyogWFhYVE9ETyAtIFJlbW92ZSB0aGlzIHByaW50IGxhdGVyICovCi0JCURCR19FUlJPUigiU1hHOiBSZWNlaXZlIGVycm9yICV4XG4iLCAqKHUzMiAqKQotCQkJICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKTsKIAkJc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKGFkYXB0ZXIsICoodTMyICopCiAJCQkJICAgICAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTgogCQkJCSAgICAgIChSY3ZEYXRhQnVmZmVySGRyKSk7CkBAIC0xNDAwLDggKzE4MDgsOSBAQAogCX0KICNpZiBYWFhUT0RPCQkJLyogVkxBTiBzdHVmZiAqLwogCS8qIElmIHRoZXJlJ3MgYSBWTEFOIHRhZywgZXh0cmFjdCBpdCBhbmQgdmFsaWRhdGUgaXQgKi8KLQlpZiAoKChzdHJ1Y3QgZXRoZXJfaGVhZGVyKikgKFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkcikpKS0+Ci0JICAgIEV0aGVyVHlwZSA9PSBFVEhFUlRZUEVfVkxBTikgeworCWlmICgoKHN0cnVjdCBldGhlcl9oZWFkZXIgKikKKwkJKFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkcikpKS0+RXRoZXJUeXBlCisJCQkJCQkJPT0gRVRIRVJUWVBFX1ZMQU4pIHsKIAkJaWYgKFN4Z0V4dHJhY3RWbGFuSGVhZGVyKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50KSAhPQogCQkgICAgU1RBVFVTX1NVQ0NFU1MpIHsKIAkJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwKQEAgLTE0MTIsMzMgKzE4MjEsNDEgQEAKIAkJfQogCX0KICNlbmRpZgotCS8qICovCiAJLyogRHVtYi1uaWMgZnJhbWUuICBTZWUgaWYgaXQgcGFzc2VzIG91ciBtYWMgZmlsdGVyIGFuZCB1cGRhdGUgc3RhdHMgKi8KLQkvKiAqLwotCWlmICghc3hnX21hY19maWx0ZXIoYWRhcHRlciwgKHN0cnVjdCBldGhlcl9oZWFkZXIqKQotCQkJICAgIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCi0JCQkgICAgRXZlbnQtPkxlbmd0aCkpIHsKKworCWlmICghc3hnX21hY19maWx0ZXIoYWRhcHRlciwKKwkgICAgKHN0cnVjdCBldGhlcl9oZWFkZXIgKikoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSksCisJICAgIEV2ZW50LT5MZW5ndGgpKSB7CiAJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkZpbHRyIiwKLQkJCSAgRXZlbnQsIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCi0JCQkgIEV2ZW50LT5MZW5ndGgsIDApOwotCQlnb3RvIGRyb3A7CisJCQkgICAgRXZlbnQsIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCisJCQkgICAgRXZlbnQtPkxlbmd0aCwgMCk7CisJICBnb3RvIGRyb3A7CiAJfQogCiAJUGFja2V0ID0gUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldDsKKwlTWEdfQURKVVNUX1JDVl9QQUNLRVQoUGFja2V0LCBSY3ZEYXRhQnVmZmVySGRyLCBFdmVudCk7CisJUGFja2V0LT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKFBhY2tldCwgYWRhcHRlci0+bmV0ZGV2KTsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1iUmN2IiwKIAkJICBSY3ZEYXRhQnVmZmVySGRyLCBQYWNrZXQsIEV2ZW50LT5MZW5ndGgsIDApOwotCS8qICovCiAJLyogTGFzdGx5IGFkanVzdCB0aGUgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoLiAqLwotCS8qICovCi0JU1hHX0FESlVTVF9SQ1ZfUEFDS0VUKFBhY2tldCwgUmN2RGF0YUJ1ZmZlckhkciwgRXZlbnQpOwotCisJUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCA9IE5VTEw7CisJUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzID0gKGRtYV9hZGRyX3QpTlVMTDsKKwlTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyLCBCdWZmZXJTaXplKTsKKwlpZiAoUmN2RGF0YUJ1ZmZlckhkci0+c2tiKQorCXsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJCVNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKKwkJLy8gYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCArKzsKKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwl9CiAJcmV0dXJuIChQYWNrZXQpOwogCiAgICAgICBkcm9wOgogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRyb3BSY3YiLAogCQkgIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50LT5MZW5ndGgsIDAsIDApOwotCWFkYXB0ZXItPlN0YXRzLlJjdkRpc2NhcmRzKys7CisJYWRhcHRlci0+c3RhdHMucnhfZHJvcHBlZCsrOworLy8JYWRhcHRlci0+U3RhdHMuUmN2RGlzY2FyZHMrKzsKIAlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKIAlTWEdfRlJFRV9SQ1ZfREFUQV9CVUZGRVIoYWRhcHRlciwgUmN2RGF0YUJ1ZmZlckhkcik7CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKQEAgLTE0NTMsMTQgKzE4NzAsMTMgQEAKICAqCQlhZGFwdGVyCQktIEFkYXB0ZXIgc3RydWN0dXJlCiAgKgkJRXJyb3JTdGF0dXMJLSA0LWJ5dGUgcmVjZWl2ZSBlcnJvciBzdGF0dXMKICAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKiAJTm9uZQorICogUmV0dXJuIFZhbHVlCQk6IE5vbmUKICAqLwogc3RhdGljIHZvaWQgc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiBFcnJvclN0YXR1cykKIHsKIAl1MzIgRXJyb3I7CiAKLQlhZGFwdGVyLT5TdGF0cy5SY3ZFcnJvcnMrKzsKKwlhZGFwdGVyLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9FUlJPUikgewogCQlFcnJvciA9IEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX01BU0s7CkBAIC0xNTMyLDEzICsxOTQ4LDEzIEBACiAgKgkJcGV0aGVyCQktIEV0aGVybmV0IGhlYWRlcgogICoJCWxlbmd0aAkJLSBGcmFtZSBsZW5ndGgKICAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKiAJVFJVRSBpZiB0aGUgZnJhbWUgaXMgdG8gYmUgYWxsb3dlZAorICogUmV0dXJuIFZhbHVlIDogVFJVRSBpZiB0aGUgZnJhbWUgaXMgdG8gYmUgYWxsb3dlZAogICovCi1zdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICpFdGhlckhkciwKLQkJCSAgIHVzaG9ydCBsZW5ndGgpCitzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAorCQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICpFdGhlckhkciwgdXNob3J0IGxlbmd0aCkKIHsKIAlib29sIEVxdWFsQWRkcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJaWYgKFNYR19NVUxUSUNBU1RfUEFDS0VUKEV0aGVySGRyKSkgewogCQlpZiAoU1hHX0JST0FEQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CkBAIC0xNTQ2LDggKzE5NjIsNiBAQAogCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19CQ0FTVCkgewogCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCY2FzdFBrdHMrKzsKIAkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2QmNhc3RCeXRlcyArPSBsZW5ndGg7Ci0JCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKLQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOwogCQkJCXJldHVybiAoVFJVRSk7CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0xNTU1LDE1ICsxOTY5LDEyIEBACiAJCQlpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX0FMTE1DQVNUKSB7CiAJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdk1jYXN0UGt0cysrOwogCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZNY2FzdEJ5dGVzICs9IGxlbmd0aDsKLQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOwotCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CiAJCQkJcmV0dXJuIChUUlVFKTsKIAkJCX0KIAkJCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfTUNBU1QpIHsKLQkJCQlzdHJ1Y3QgU1hHX01VTFRJQ0FTVF9BRERSRVNTICpNdWx0aWNhc3RBZGRycyA9Ci0JCQkJICAgIGFkYXB0ZXItPk11bHRpY2FzdEFkZHJzOwotCQkJCXdoaWxlIChNdWx0aWNhc3RBZGRycykgewotCQkJCQlFVEhFUl9FUV9BRERSKE11bHRpY2FzdEFkZHJzLT5BZGRyZXNzLAorCQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gZGV2LT5tY19saXN0OworCQkJCXdoaWxlIChtY2xpc3QpIHsKKwkJCQkJRVRIRVJfRVFfQUREUihtY2xpc3QtPmRhX2FkZHIsCiAJCQkJCQkgICAgICBFdGhlckhkci0+ZXRoZXJfZGhvc3QsCiAJCQkJCQkgICAgICBFcXVhbEFkZHIpOwogCQkJCQlpZiAoRXF1YWxBZGRyKSB7CkBAIC0xNTcxLDMyICsxOTgyLDI2IEBACiAJCQkJCQkgICAgRHVtYlJjdk1jYXN0UGt0cysrOwogCQkJCQkJYWRhcHRlci0+U3RhdHMuCiAJCQkJCQkgICAgRHVtYlJjdk1jYXN0Qnl0ZXMgKz0gbGVuZ3RoOwotCQkJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKLQkJCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPQotCQkJCQkJICAgIGxlbmd0aDsKIAkJCQkJCXJldHVybiAoVFJVRSk7CiAJCQkJCX0KLQkJCQkJTXVsdGljYXN0QWRkcnMgPSBNdWx0aWNhc3RBZGRycy0+TmV4dDsKKwkJCQkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OwogCQkJCX0KIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX0RJUkVDVEVEKSB7Ci0JCS8qIE5vdCBicm9hZGNhc3Qgb3IgbXVsdGljYXN0LiAgTXVzdCBiZSBkaXJlY3RlZCBhdCB1cyBvciAqLwotCQkvKiB0aGUgY2FyZCBpcyBpbiBwcm9taXNjdW91cyBtb2RlLiAgRWl0aGVyIHdheSwgY29uc2lkZXIgaXQgKi8KLQkJLyogb3VycyBpZiBNQUNfRElSRUNURUQgaXMgc2V0ICovCisJCS8qCisJCSAqIE5vdCBicm9hZGNhc3Qgb3IgbXVsdGljYXN0LiAgTXVzdCBiZSBkaXJlY3RlZCBhdCB1cyBvcgorCQkgKiB0aGUgY2FyZCBpcyBpbiBwcm9taXNjdW91cyBtb2RlLiAgRWl0aGVyIHdheSwgY29uc2lkZXIgaXQKKwkJICogb3VycyBpZiBNQUNfRElSRUNURUQgaXMgc2V0CisJCSAqLwogCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2VWNhc3RQa3RzKys7CiAJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZVY2FzdEJ5dGVzICs9IGxlbmd0aDsKLQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKLQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKIAkJcmV0dXJuIChUUlVFKTsKIAl9CiAJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19QUk9NSVNDKSB7CiAJCS8qIFdoYXRldmVyIGl0IGlzLCBrZWVwIGl0LiAqLwotCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOwotCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOwogCQlyZXR1cm4gKFRSVUUpOwogCX0KLQlhZGFwdGVyLT5TdGF0cy5SY3ZEaXNjYXJkcysrOwogCXJldHVybiAoRkFMU0UpOwogfQogCkBAIC0xNjI3LDcgKzIwMzIsNiBAQAogCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDE7CiAJCWFkYXB0ZXItPkludFJlZ2lzdGVyZWQgPSBUUlVFOwogCQkvKiBEaXNhYmxlIFJTUyB3aXRoIGxpbmUtYmFzZWQgaW50ZXJydXB0cyAqLwotCQlhZGFwdGVyLT5Nc2lFbmFibGVkID0gRkFMU0U7CiAJCWFkYXB0ZXItPlJzc0VuYWJsZWQgPSBGQUxTRTsKIAkJREJHX0VSUk9SKCJzeGc6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBkZXYtPmlycVsleF1cbiIsCiAJCQkgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5uZXRkZXYtPmlycSk7CkBAIC0xNjYzLDEyICsyMDY3LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgc3hnX2lmX2luaXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQlwX25ldF9kZXZpY2UgZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFTlRFUiBzdGF0ZXNbJWQ6JWQ6JWRdIGZsYWdzWyV4XVxuIiwKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFTlRFUiBzdGF0ZXNbJWQ6JWRdIGZsYWdzWyV4XVxuIiwKIAkJICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkgIGFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCwgYWRhcHRlci0+c3RhdGUsCisJCSAgYWRhcHRlci0+c3RhdGUsCiAJCSAgYWRhcHRlci0+bGlua3N0YXRlLCBkZXYtPmZsYWdzKTsKIAogCS8qIGFkYXB0ZXIgc2hvdWxkIGJlIGRvd24gYXQgdGhpcyBwb2ludCAqLwpAQCAtMTY3OSwzMSArMjA4MywzMSBAQAogCUFTU0VSVChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKTsKIAogCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOwotCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CisJYWRhcHRlci0+TWFjRmlsdGVyID0gTUFDX0RJUkVDVEVEOwogCWlmIChkZXYtPmZsYWdzKSB7CiAJCURCR19FUlJPUigic3hnOiAlcyAoJXMpIFNldCBNQUMgb3B0aW9uczogIiwgX19mdW5jX18sCiAJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgewotCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCQlhZGFwdGVyLT5NYWNGaWx0ZXIgfD0gTUFDX0JDQVNUOwogCQkJREJHX0VSUk9SKCJCQ0FTVCAiKTsKIAkJfQogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJYWRhcHRlci0+TWFjRmlsdGVyIHw9IE1BQ19QUk9NSVNDOwogCQkJREJHX0VSUk9SKCJQUk9NSVNDICIpOwogCQl9CiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKKwkJCWFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfQUxMTUNBU1Q7CiAJCQlEQkdfRVJST1IoIkFMTF9NQ0FTVCAiKTsKIAkJfQogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKLQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOworCQkJYWRhcHRlci0+TWFjRmlsdGVyIHw9IE1BQ19NQ0FTVDsKIAkJCURCR19FUlJPUigiTUNBU1QgIik7CiAJCX0KIAkJREJHX0VSUk9SKCJcbiIpOwogCX0KLQlzdGF0dXMgPSBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOworCXN0YXR1cyA9IHN4Z19yZWdpc3Rlcl9pbnRyKGFkYXB0ZXIpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SKCJzeGdfaWZfaW5pdDogc3hnX3JlZ2lzdGVyX2ludGVycnVwdCBGQUlMRUQgJXhcbiIsCisJCURCR19FUlJPUigic3hnX2lmX2luaXQ6IHN4Z19yZWdpc3Rlcl9pbnRyIEZBSUxFRCAleFxuIiwKIAkJCSAgc3RhdHVzKTsKIAkJc3hnX2RlcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOwogCQlyZXR1cm4gKHN0YXR1cyk7CkBAIC0xNzExLDE4ICsyMTE1LDkwIEBACiAKIAlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX1VQOwogCi0JLyoKLQkgKiAgICBjbGVhciBhbnkgcGVuZGluZyBldmVudHMsIHRoZW4gZW5hYmxlIGludGVycnVwdHMKLQkgKi8KKwkvKiAgICBjbGVhciBhbnkgcGVuZGluZyBldmVudHMsIHRoZW4gZW5hYmxlIGludGVycnVwdHMgKi8KIAlEQkdfRVJST1IoInN4ZzogJXMgRU5BQkxFIGludGVycnVwdHMoc2xpYylcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOwogfQogCi1zdGF0aWMgaW50IHN4Z19lbnRyeV9vcGVuKHBfbmV0X2RldmljZSBkZXYpCit2b2lkIHN4Z19zZXRfaW50ZXJydXB0X2FnZ3JlZ2F0aW9uKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJLyoKKwkgKiBUb3AgYml0IGRpc2FibGVzIGFnZ3JlZ2F0aW9uIG9uIHhtdCAoU1hHX0FHR19YTVRfRElTQUJMRSkuCisJICogTWFrZSBzdXJlIE1heCBpcyBsZXNzIHRoYW4gMHg4MDAwLgorCSAqLworCWFkYXB0ZXItPm1heF9hZ2dyZWdhdGlvbiA9IFNYR19NQVhfQUdHX0RFRkFVTFQ7CisJYWRhcHRlci0+bWluX2FnZ3JlZ2F0aW9uID0gU1hHX01JTl9BR0dfREVGQVVMVDsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkFnZ3JlZ2F0aW9uLAorCQkoKGFkYXB0ZXItPm1heF9hZ2dyZWdhdGlvbiA8PCBTWEdfTUFYX0FHR19TSElGVCkgfAorCQkJYWRhcHRlci0+bWluX2FnZ3JlZ2F0aW9uKSwKKwkJCVRSVUUpOworfQorCitzdGF0aWMgaW50IHN4Z19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopIG5ldGRldl9wcml2KGRldik7CiAJaW50IHN0YXR1czsKKwlzdGF0aWMgaW50IHR1cm47CisJaW50IHN4Z19pbml0aWFsX3Jjdl9kYXRhX2J1ZmZlcnMgPSBTWEdfSU5JVElBTF9SQ1ZfREFUQV9CVUZGRVJTOworCWludCBpOworCisJaWYgKGFkYXB0ZXItPkp1bWJvRW5hYmxlZCA9PSBUUlVFKSB7CisJCXN4Z19pbml0aWFsX3Jjdl9kYXRhX2J1ZmZlcnMgPQorCQkJCQlTWEdfSU5JVElBTF9KVU1CT19SQ1ZfREFUQV9CVUZGRVJTOworCQlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbywKKwkJCQkJU1hHX0pVTUJPX1JDVl9SSU5HX1NJWkUpOworCX0KKworCS8qCisJKiBBbGxvY2F0ZSByZWNlaXZlIGRhdGEgYnVmZmVycy4gIFdlIGFsbG9jYXRlIGEgYmxvY2sgb2YgYnVmZmVycyBhbmQKKwkqIGEgY29ycmVzcG9uZGluZyBkZXNjcmlwdG9yIGJsb2NrIGF0IG9uY2UuICBTZWUgc3hnaHcuaDpTWEdfUkNWX0JMT0NLCisJKi8KKworCWZvciAoaSA9IDA7IGkgPCBzeGdfaW5pdGlhbF9yY3ZfZGF0YV9idWZmZXJzOworCQkJaSArPSBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykKKwl7CisJCXN0YXR1cyA9IHN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KGFkYXB0ZXIsCisJCVNYR19SQ1ZfQkxPQ0tfU0laRShTWEdfUkNWX0RBVEFfSERSX1NJWkUpLAorCQkJCQlTWEdfQlVGRkVSX1RZUEVfUkNWKTsKKwkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCS8qCisJICogTkJMIHJlc291cmNlIGFsbG9jYXRpb24gY2FuIGZhaWwgaW4gdGhlICdBbGxvY2F0ZUNvbXBsZXRlJyByb3V0aW5lLAorCSAqIHdoaWNoIGRvZXNuJ3QgcmV0dXJuIHN0YXR1cy4gIE1ha2Ugc3VyZSB3ZSBnb3QgdGhlIG51bWJlciBvZiBidWZmZXJzCisJICogd2UgcmVxdWVzdGVkCisJICovCisKKwlpZiAoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgc3hnX2luaXRpYWxfcmN2X2RhdGFfYnVmZmVycykgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y2IiwKKwkJCWFkYXB0ZXIsIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgU1hHX01BWF9FTlRSSUVTLAorCQkJMCk7CisJCXJldHVybiAoU1RBVFVTX1JFU09VUkNFUyk7CisJfQorCS8qCisJICogVGhlIG1pY3JvY29kZSBleHBlY3RzIGl0IHRvIGJlIGRvd25sb2FkZWQgb24gZXZlcnkgb3Blbi4KKwkgKi8KKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2Rvd25sb2FkX21pY3JvY29kZVxuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAoc3hnX2Rvd25sb2FkX21pY3JvY29kZShhZGFwdGVyLCBTWEdfVUNPREVfU1lTVEVNKSkgeworCQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkclxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQlzeGdfcmVhZF9jb25maWcoYWRhcHRlcik7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9GQUlMOworCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJCURCR19FUlJPUigic3hnX2Rvd25sb2FkX21pY3JvY29kZSBGQUlMRUQgc3RhdHVzWyV4XVxuIiwKKwkJCQlzdGF0dXMpOworCX0KKwltc2xlZXAoNSk7CisKKwlpZiAodHVybikgeworCQlzeGdfc2Vjb25kX29wZW4oYWRhcHRlci0+bmV0ZGV2KTsKKworCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisJfQorCisJdHVybisrOwogCiAJQVNTRVJUKGFkYXB0ZXIpOwogCURCR19FUlJPUigic3hnOiAlcyBhZGFwdGVyLT5hY3RpdmF0ZWRbJWRdXG4iLCBfX2Z1bmNfXywKQEAgLTE3NjIsNiArMjIzOCw4IEBACiAJCXJldHVybiAoc3RhdHVzKTsKIAl9CiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOQUJMRSBBTEwgSU5URVJSVVBUU1xuIiwgX19mdW5jX18pOworCXN4Z19zZXRfaW50ZXJydXB0X2FnZ3JlZ2F0aW9uKGFkYXB0ZXIpOworCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCiAJU1hHX0VOQUJMRV9BTExfSU5URVJSVVBUUyhhZGFwdGVyKTsKQEAgLTE3NzIsNzEgKzIyNTAsMTYyIEBACiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQogCitpbnQgc3hnX3NlY29uZF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCopIG5ldGRldl9wcml2KGRldik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7CisJbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKyAgICAgICAgYWRhcHRlci0+c3RhdGUgPSBBREFQVF9VUDsKKyAgICAgICAgYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19VUDsKKworCXN0YXR1cyA9IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIoYWRhcHRlcik7CisJc3hnX3NldF9pbnRlcnJ1cHRfYWdncmVnYXRpb24oYWRhcHRlcik7CisJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOworICAgICAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLworICAgICAgICBTWEdfRU5BQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOworCisJc3hnX3JlZ2lzdGVyX2ludHIoYWRhcHRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CisKK30KKwogc3RhdGljIHZvaWQgX19kZXZleGl0IHN4Z19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldikKIHsKLQlwX25ldF9kZXZpY2UgZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7Ci0JdTMyIG1taW9fc3RhcnQgPSAwOwotCXVuc2lnbmVkIGludCBtbWlvX2xlbiA9IDA7CisgICAgICAgIHUzMiBtbWlvX3N0YXJ0ID0gMDsKKyAgICAgICAgdTMyIG1taW9fbGVuID0gMDsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKIAotCUFTU0VSVChhZGFwdGVyKTsKLQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgZGV2WyVwXSBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGRldiwKLQkJICBhZGFwdGVyKTsKLQlzeGdfZGVyZWdpc3Rlcl9pbnRlcnJ1cHQoYWRhcHRlcik7Ci0Jc3hnX3VubWFwX21taW9fc3BhY2UoYWRhcHRlcik7Ci0JREJHX0VSUk9SKCJzeGc6ICVzIHVucmVnaXN0ZXJfbmV0ZGV2XG4iLCBfX2Z1bmNfXyk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCS8qIERlYWxsb2NhdGUgUmVzb3VyY2VzICovCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlzeGdfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisJc3hnX2ZyZWVfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCi0JbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwotCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCUFTU0VSVChhZGFwdGVyKTsKIAotCURCR19FUlJPUigic3hnOiAlcyByZWxfcmVnaW9uKDApIHN0YXJ0WyV4XSBsZW5bJXhdXG4iLCBfX2Z1bmNfXywKLQkJICBtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKyAgICAgICAgbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworICAgICAgICBtbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKIAotCURCR19FUlJPUigic3hnOiAlcyBpb3VubWFwIGRldi0+YmFzZV9hZGRyWyV4XVxuIiwgX19mdW5jX18sCi0JCSAgKHVuc2lnbmVkIGludClkZXYtPmJhc2VfYWRkcik7Ci0JaW91bm1hcCgoY2hhciAqKWRldi0+YmFzZV9hZGRyKTsKKyAgICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIHJlbF9yZWdpb24oMCkgc3RhcnRbJXhdIGxlblsleF1cbiIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgICAgIG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKyAgICAgICAgcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKworICAgICAgICBtbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisgICAgICAgIG1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDIpOworCisgICAgICAgIERCR19FUlJPUigic3hnOiAlcyByZWxfcmVnaW9uKDIpIHN0YXJ0WyV4XSBsZW5bJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICBtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisgICAgICAgIHJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpZGV2KTsKIAogCURCR19FUlJPUigic3hnOiAlcyBkZWFsbG9jYXRlIGRldmljZVxuIiwgX19mdW5jX18pOwogCWtmcmVlKGRldik7CiAJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKIH0KIAotc3RhdGljIGludCBzeGdfZW50cnlfaGFsdChwX25ldF9kZXZpY2UgZGV2KQorc3RhdGljIGludCBzeGdfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzeGdfaHdfcmVncyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCWludCBpOworCXUzMiBSc3NJZHMsIElzckNvdW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKKwlJc3JDb3VudCA9IGFkYXB0ZXItPm1zaV9lbmFibGVkID8gUnNzSWRzIDogMTsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7Ci0JREJHX0VSUk9SKCJzeGc6ICVzICglcykgRU5URVJcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCVNYR19ESVNBQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOwogCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRE9XTjsKIAlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlzeGdfZGVyZWdpc3Rlcl9pbnRlcnJ1cHQoYWRhcHRlcik7CisJV1JJVEVfUkVHKEh3UmVncy0+UmVzZXQsIDB4REVBRCwgRkxVU0gpOworCW1kZWxheSg1MDAwKTsKKworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOworCisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZDbWQsIDAsIHRydWUpOwogCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSAwOwogCURCR19FUlJPUigic3hnOiAlcyAoJXMpIHNldCBhZGFwdGVyWyVwXSBzdGF0ZSB0byBBREFQVF9ET1dOKCVkKVxuIiwKIAkJICBfX2Z1bmNfXywgZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5zdGF0ZSk7CiAKLQlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFWElUXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKLQlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19mdW5jX18pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCS8qIEZyZWUgYWxsIHRoZSBibG9ja3MgYW5kIHRoZSBidWZmZXJzLCBtb3ZlZCBmcm9tIHJlbW92ZSgpIHJvdXRpbmUgKi8KKwlpZiAoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKSkpIHsKKwkJc3hnX2ZyZWVfcmN2YmxvY2tzKGFkYXB0ZXIpOworCX0KKworCisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkFsbFJjdkJsb2Nrcyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlU2dsQnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKKworCWFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA9IDA7CisJYWRhcHRlci0+RnJlZVJjdkJsb2NrQ291bnQgPSAwOworCWFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQgPSAwOworCWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPSAwOworCWFkYXB0ZXItPlBlbmRpbmdSY3ZDb3VudCA9IDA7CisKKwltZW1zZXQoYWRhcHRlci0+UmN2UmluZ3MsIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9yaW5nKSAqIDEpOworCW1lbXNldChhZGFwdGVyLT5FdmVudFJpbmdzLCAwLCBzaXplb2Yoc3RydWN0IHN4Z19ldmVudF9yaW5nKSAqIFJzc0lkcyk7CisJbWVtc2V0KGFkYXB0ZXItPklzciwgMCwgc2l6ZW9mKHUzMikgKiBJc3JDb3VudCk7CisJZm9yIChpID0gMDsgaSA8IFNYR19NQVhfUklOR19TSVpFOyBpKyspCisJCWFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mby5Db250ZXh0W2ldID0gTlVMTDsKKwlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbywgU1hHX1JDVl9SSU5HX1NJWkUpOworCVNYR19JTklUSUFMSVpFX1JJTkcoYWRhcHRlci0+WG10UmluZ1plcm9JbmZvLCBTWEdfWE1UX1JJTkdfU0laRSk7CisKKwlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CisJYWRhcHRlci0+QWxsU2dsQnVmZmVyQ291bnQgPSAwOworCWFkYXB0ZXItPkZyZWVTZ2xCdWZmZXJDb3VudCA9IDA7CisJYWRhcHRlci0+UGVuZGluZ1htdENvdW50ID0gMDsKKwltZW1zZXQoYWRhcHRlci0+WG10UmluZ3MsIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3htdF9yaW5nKSAqIDEpOworCW1lbXNldChhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4LCAwLCBzaXplb2YodTMyKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBTWEdfTUFYX1JTUzsgaSsrKSB7CisJCWFkYXB0ZXItPk5leHRFdmVudFtpXSA9IDA7CisJfQorCWF0b21pY19zZXQoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMsIDApOworCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMDsKKwlzeGdfcmVtb3ZlX2lzcihhZGFwdGVyKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFWElUXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSk7CiAJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CiB9CiAKLXN0YXRpYyBpbnQgc3hnX2lvY3RsKHBfbmV0X2RldmljZSBkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCitzdGF0aWMgaW50IHN4Z19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCUFTU0VSVChycSk7Ci0vKiAgICAgIERCR19FUlJPUigic3hnOiAlcyBjbWRbJXhdIHJxWyVwXSBkZXZbJXBdXG4iLCBfX2Z1bmNfXywgY21kLCBycSwgZGV2KTsgKi8KKy8qICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIGNtZFsleF0gcnFbJXBdIGRldlslcF1cbiIsIF9fZnVuY19fLCBjbWQsIHJxLCBkZXYpOyovCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NTTElDU0VUSU5UQUdHOgogCQl7Ci0vKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsgKi8KKwkJCS8qIHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKQorCQkJICogbmV0ZGV2X3ByaXYoZGV2KTsKKwkJCSAqLwogCQkJdTMyIGRhdGFbN107CiAJCQl1MzIgaW50YWdnOwogCiAJCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKLQkJCQlEQkdfRVJST1IKLQkJCQkgICAgKCJjb3B5X2Zyb21fdXNlciBGQUlMRUQgIGdldHRpbmcgaW5pdGlhbCBwYXJhbXNcbiIpOworCQkJCURCR19FUlJPUigiY29weV9mcm9tX3VzZXIgRkFJTEVEICBnZXR0aW5nIFwKKwkJCQkJIGluaXRpYWwgcGFyYW1zXG4iKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KIAkJCWludGFnZyA9IGRhdGFbMF07CkBAIC0xODQ3LDcgKzI0MTYsNyBAQAogCQl9CiAKIAlkZWZhdWx0OgotLyogICAgICAgICAgICAgIERCR19FUlJPUigic3hnOiAlcyBVTlNVUFBPUlRFRFsleF1cbiIsIF9fZnVuY19fLCBjbWQpOyAqLworCQkvKiBEQkdfRVJST1IoInN4ZzogJXMgVU5TVVBQT1JURURbJXhdXG4iLCBfX2Z1bmNfXywgY21kKTsgKi8KIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE4NTYsMjMgKzI0MjUsMjUgQEAKICNkZWZpbmUgTk9STUFMX0VUSEZSQU1FICAgICAwCiAKIC8qCi0gKgogICogc3hnX3NlbmRfcGFja2V0cyAtIFNlbmQgYSBza2IgcGFja2V0CiAgKgogICogQXJndW1lbnRzOgotICoJCQlza2IgICAgICAgICAgICAgICAgICAgICAtIFRoZSBwYWNrZXQgdG8gc2VuZAotICoJCQlkZXYgICAgICAgICAgICAgICAgICAgICAtIE91ciBsaW51eCBuZXQgZGV2aWNlIHRoYXQgcmVmcyBvdXIgYWRhcHRlcgorICoJCQlza2IgLSBUaGUgcGFja2V0IHRvIHNlbmQKKyAqCQkJZGV2IC0gT3VyIGxpbnV4IG5ldCBkZXZpY2UgdGhhdCByZWZzIG91ciBhZGFwdGVyCiAgKgogICogUmV0dXJuOgogICoJCTAgICByZWdhcmRsZXNzIG9mIG91dGNvbWUgICAgWFhYVE9ETyByZWZlciB0byBlMTAwMCBkcml2ZXIKICAqLwotc3RhdGljIGludCBzeGdfc2VuZF9wYWNrZXRzKHN0cnVjdCBza19idWZmICpza2IsIHBfbmV0X2RldmljZSBkZXYpCitzdGF0aWMgaW50IHN4Z19zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAKLQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX3NlbmRfcGFja2V0cyBza2JbJXBdXG4iLCBfX2Z1bmNfXywKLQkJICBza2IpOworCS8qCisJICogREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19zZW5kX3BhY2tldHMgc2tiWyVwXVxuIiwgX19GVU5DVElPTl9fLAorCSAqCSAgc2tiKTsKKwkgKi8KKwogCS8qIENoZWNrIHRoZSBhZGFwdGVyIHN0YXRlICovCiAJc3dpdGNoIChhZGFwdGVyLT5TdGF0ZSkgewogCWNhc2UgU1hHX1NUQVRFX0lOSVRJQUxJWklORzoKQEAgLTE5MDksMTcgKzI0ODAsMTggQEAKIAkvKiByZWplY3QgJiBjb21wbGV0ZSBhbGwgdGhlIHBhY2tldHMgaWYgdGhleSBjYW50IGJlIHNlbnQgKi8KIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CiAjaWYgWFhYVE9ETwotLyogICAgICBzeGdfc2VuZF9wYWNrZXRzX2ZhaWwoYWRhcHRlciwgc2tiLCBzdGF0dXMpOyAqLworCS8qIHN4Z19zZW5kX3BhY2tldHNfZmFpbChhZGFwdGVyLCBza2IsIHN0YXR1cyk7ICovCiAjZWxzZQogCQlTWEdfRFJPUF9EVU1CX1NFTkQoYWRhcHRlciwgc2tiKTsKIAkJYWRhcHRlci0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAjZW5kaWYKIAl9CiAJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX3NlbmRfcGFja2V0cyBzdGF0dXNbJXhdXG4iLCBfX2Z1bmNfXywKIAkJICBzdGF0dXMpOwogCiAgICAgICB4bWl0X2RvbmU6Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTE5MzEsMzMgKzI1MDMsMzUgQEAKICAqCQlhZGFwdGVyCQkJLSBQb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQogICogICAgICBza2IgICAgICAgICAgICAgLSBUaGUgcGFja2V0IHRvIGJlIHNlbnQKICAqCi0gKiBSZXR1cm4gLQotICogCQlTVEFUVVMgb2Ygc2VuZAorICogUmV0dXJuIC0gU1RBVFVTIG9mIHNlbmQKICAqLwogc3RhdGljIGludCBzeGdfdHJhbnNtaXRfcGFja2V0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IFNDQVRURVJfR0FUSEVSX0xJU1QgKnBTZ2w7Ci0Jc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiAqU3hnU2dsOwotCXZvaWQgKlNnbEJ1ZmZlcjsKLQl1MzIgU2dsQnVmZmVyTGVuZ3RoOworCXN0cnVjdCBzeGdfeDY0X3NnbCAgICAgICAgICpwU2dsOworCXN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgICpTeGdTZ2w7CisJdW5zaWduZWQgbG9uZyBzZ2xfZmxhZ3M7CisJLyogdm9pZCAqU2dsQnVmZmVyOyAqLworCS8qIHUzMiBTZ2xCdWZmZXJMZW5ndGg7ICovCiAKLQkvKiBUaGUgdmFzdCBtYWpvcml0eSBvZiB3b3JrIGlzIGRvbmUgaW4gdGhlIHNoYXJlZCAqLwotCS8qIHN4Z19kdW1iX3NnbCByb3V0aW5lLiAqLworCS8qCisJICogVGhlIHZhc3QgbWFqb3JpdHkgb2Ygd29yayBpcyBkb25lIGluIHRoZSBzaGFyZWQKKwkgKiBzeGdfZHVtYl9zZ2wgcm91dGluZS4KKwkgKi8KIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iU2VuZCIsCiAJCSAgYWRhcHRlciwgc2tiLCAwLCAwKTsKIAogCS8qIEFsbG9jYXRlIGEgU0dMIGJ1ZmZlciAqLwotCVNYR19HRVRfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wpOworCVNYR19HRVRfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wsIDApOwogCWlmICghU3hnU2dsKSB7CiAJCWFkYXB0ZXItPlN0YXRzLk5vU2dsQnVmKys7Ci0JCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOworCQlhZGFwdGVyLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiU25kUGt0RjEiLAogCQkJICBhZGFwdGVyLCBza2IsIDAsIDApOwogCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOwogCX0KIAlBU1NFUlQoU3hnU2dsLT5hZGFwdGVyID09IGFkYXB0ZXIpOwotCVNnbEJ1ZmZlciA9IFNYR19TR0xfQlVGRkVSKFN4Z1NnbCk7Ci0JU2dsQnVmZmVyTGVuZ3RoID0gU1hHX1NHTF9CVUZfU0laRTsKKwkvKlNnbEJ1ZmZlciA9IFNYR19TR0xfQlVGRkVSKFN4Z1NnbCk7CisJU2dsQnVmZmVyTGVuZ3RoID0gU1hHX1NHTF9CVUZfU0laRTsgKi8KIAlTeGdTZ2wtPlZsYW5UYWcuVmxhblRjaSA9IDA7CiAJU3hnU2dsLT5WbGFuVGFnLlZsYW5UcGlkID0gMDsKIAlTeGdTZ2wtPlR5cGUgPSBTWEdfU0dMX0RVTUI7CkBAIC0xOTY1LDkgKzI1MzksNyBAQAogCXBTZ2wgPSBOVUxMOwogCiAJLyogQ2FsbCB0aGUgY29tbW9uIHN4Z19kdW1iX3NnbCByb3V0aW5lIHRvIGNvbXBsZXRlIHRoZSBzZW5kLiAqLwotCXN4Z19kdW1iX3NnbChwU2dsLCBTeGdTZ2wpOwotCS8qIFJldHVybiBzdWNjZXNzICAgc3hnX2R1bWJfc2dsIChvciBzb21ldGhpbmcgbGF0ZXIpIHdpbGwgY29tcGxldGUgaXQuICovCi0JcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CisJcmV0dXJuIChzeGdfZHVtYl9zZ2wocFNnbCwgU3hnU2dsKSk7CiB9CiAKIC8qCkBAIC0xOTc1LDI0ICsyNTQ3LDI3IEBACiAgKgogICogQXJndW1lbnRzOgogICoJCXBTZ2wgICAgIC0KLSAqCQlTeGdTZ2wgICAtIFNYR19TQ0FUVEVSX0dBVEhFUgorICoJCVN4Z1NnbCAgIC0gc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlcgogICoKICAqIFJldHVybiBWYWx1ZToKLSAqIAlOb25lLgorICogCVN0YXR1cyBvZiBzZW5kIG9wZXJhdGlvbi4KICAqLwotc3RhdGljIHZvaWQgc3hnX2R1bWJfc2dsKHN0cnVjdCBTQ0FUVEVSX0dBVEhFUl9MSVNUICpwU2dsLCBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSICpTeGdTZ2wpCitzdGF0aWMgaW50IHN4Z19kdW1iX3NnbChzdHJ1Y3Qgc3hnX3g2NF9zZ2wgKnBTZ2wsCisJCQkJc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqU3hnU2dsKQogewogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBTeGdTZ2wtPmFkYXB0ZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IFN4Z1NnbC0+RHVtYlBhY2tldDsKIAkvKiBGb3Igbm93LCBhbGwgZHVtYi1uaWMgc2VuZHMgZ28gb24gUlNTIHF1ZXVlIHplcm8gKi8KLQlzdHJ1Y3QgU1hHX1hNVF9SSU5HICpYbXRSaW5nID0gJmFkYXB0ZXItPlhtdFJpbmdzWzBdOwotCXN0cnVjdCBTWEdfUklOR19JTkZPICpYbXRSaW5nSW5mbyA9ICZhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm87Ci0Jc3RydWN0IFNYR19DTUQgKlhtdENtZCA9IE5VTEw7Ci0vKiAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCA9IDA7ICovCisJc3RydWN0IHN4Z194bXRfcmluZyAqWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKKwlzdHJ1Y3Qgc3hnX3JpbmdfaW5mbyAqWG10UmluZ0luZm8gPSAmYWRhcHRlci0+WG10UmluZ1plcm9JbmZvOworCXN0cnVjdCBzeGdfY21kICpYbXRDbWQgPSBOVUxMOworCS8qIHUzMiBJbmRleCA9IDA7ICovCiAJdTMyIERhdGFMZW5ndGggPSBza2ItPmxlbjsKLS8qICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZkxlbjsgKi8KLS8qICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIFNnbE9mZnNldDsgKi8KKwkvKiB1bnNpZ25lZCBpbnQgQnVmTGVuOyAqLworCS8qIHUzMiBTZ2xPZmZzZXQ7ICovCiAJdTY0IHBoeXNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgcXVldWVfaWQ9MDsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJTZ2wiLAogCQkgIHBTZ2wsIFN4Z1NnbCwgMCwgMCk7CkBAIC0yMDAxLDI1ICsyNTc2LDY3IEBACiAJU3hnU2dsLT5wU2dsID0gcFNnbDsKIAogCS8qIFNhbml0eSBjaGVjayB0aGF0IG91ciBTR0wgZm9ybWF0IGlzIGFzIHdlIGV4cGVjdC4gKi8KLQlBU1NFUlQoc2l6ZW9mKFNYR19YNjRfU0dFKSA9PSBzaXplb2YoU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCkpOworCUFTU0VSVChzaXplb2Yoc3RydWN0IHN4Z194NjRfc2dlKSA9PSBzaXplb2Yoc3RydWN0IHN4Z194NjRfc2dlKSk7CiAJLyogU2hvdWxkbid0IGJlIGEgdmxhbiB0YWcgb24gdGhpcyBmcmFtZSAqLwogCUFTU0VSVChTeGdTZ2wtPlZsYW5UYWcuVmxhblRjaSA9PSAwKTsKIAlBU1NFUlQoU3hnU2dsLT5WbGFuVGFnLlZsYW5UcGlkID09IDApOwogCi0JLyogRnJvbSBoZXJlIGJlbG93IHdlIHdvcmsgd2l0aCB0aGUgU0dMIHBsYWNlZCBpbiBvdXIgKi8KLQkvKiBidWZmZXIuICovCisJLyoKKwkgKiBGcm9tIGhlcmUgYmVsb3cgd2Ugd29yayB3aXRoIHRoZSBTR0wgcGxhY2VkIGluIG91cgorCSAqIGJ1ZmZlci4KKwkgKi8KIAogCVN4Z1NnbC0+U2dsLk51bWJlck9mRWxlbWVudHMgPSAxOworCS8qCisJICogU2V0IHVjb2RlIFF1ZXVlIElEIGJhc2VkIG9uIGJvdHRvbSBiaXRzIG9mIGRlc3RpbmF0aW9uIFRDUCBwb3J0LgorCSAqIFRoaXMgUXVldWUgSUQgc3BsaXRzIHNsb3dwYXRoL2R1bWItbmljIHBhY2tldCBwcm9jZXNzaW5nIGFjcm9zcworCSAqIG11bHRpcGxlIHRocmVhZHMgb24gdGhlIGNhcmQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4gIEl0IGlzIHNwbGl0CisJICogdXNpbmcgdGhlIFRDUCBwb3J0IHRvIGF2b2lkIG91dC1vZi1vcmRlciBwYWNrZXRzIHRoYXQgY2FuIHJlc3VsdAorICAgICAgICAgKiBmcm9tIG11bHRpdGhyZWFkZWQgcHJvY2Vzc2luZy4gIFdlIHVzZSB0aGUgZGVzdGluYXRpb24gcG9ydCBiZWNhdXNlCisgICAgICAgICAqIHdlIGV4cGVjdCB0byBiZSBydW4gb24gYSBzZXJ2ZXIsIHNvIGluIG5lYXJseSBhbGwgY2FzZXMgdGhlIGxvY2FsCisgICAgICAgICAqIHBvcnQgaXMgbGlrZWx5IHRvIGJlIGNvbnN0YW50ICh3ZWxsLWtub3duIHNlcnZlciBwb3J0KSBhbmQgdGhlCisgICAgICAgICAqIHJlbW90ZSBwb3J0IGlzIGxpa2VseSB0byBiZSByYW5kb20uICBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMgaVNDU0ksCisgICAgICAgICAqIGluIHdoaWNoIGNhc2Ugd2UgdXNlIHRoZSBzcG9ydCBpbnN0ZWFkLiAgTm90ZQorICAgICAgICAgKiB0aGF0IG9yaWdpbmFsIGF0dGVtcHQgYXQgWE9SJ2luZyBzb3VyY2UgYW5kIGRlc3QgcG9ydCByZXN1bHRlZCBpbgorICAgICAgICAgKiBwb29yIGJhbGFuY2Ugb24gTlRUVENQL2lvbWV0ZXIgYXBwbGljYXRpb25zIHNpbmNlIHRoZXkgdGVuZCB0bworICAgICAgICAgKiBsaW5lIHVwIChldmVuLWV2ZW4sIG9kZC1vZGQuLikuCisgICAgICAgICAqLworCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IGlwaGRyICppcDsKKworICAgICAgICAgICAgICAgIGlwID0gaXBfaGRyKHNrYik7CisJCWlmICgoaXAtPnByb3RvY29sID09IElQUFJPVE9fVENQKSYmKERhdGFMZW5ndGggPj0gc2l6ZW9mKAorCQkJCQkJCXN0cnVjdCB0Y3BoZHIpKSl7CisJCQlxdWV1ZV9pZCA9ICgobnRvaHModGNwX2hkcihza2IpLT5kZXN0KSA9PSBJU0NTSV9QT1JUKSA/CisJCQkJCShudG9ocyAodGNwX2hkcihza2IpLT5zb3VyY2UpICYKKwkJCQkJCVNYR19MQVJHRV9TRU5EX1FVRVVFX01BU0spOgorCQkJCQkJKG50b2hzKHRjcF9oZHIoc2tiKS0+ZGVzdCkgJgorCQkJCQkJU1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSykpOworCQl9CisJfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CisJCWlmICgoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkgJiYgKERhdGFMZW5ndGggPj0KKwkJCQkJCSBzaXplb2Yoc3RydWN0IHRjcGhkcikpICkgeworCQkJcXVldWVfaWQgPSAoKG50b2hzKHRjcF9oZHIoc2tiKS0+ZGVzdCkgPT0gSVNDU0lfUE9SVCkgPworCQkJCQkobnRvaHMgKHRjcF9oZHIoc2tiKS0+c291cmNlKSAmCisJCQkJCVNYR19MQVJHRV9TRU5EX1FVRVVFX01BU0spOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudG9ocyh0Y3BfaGRyKHNrYiktPmRlc3QpICYKKwkJCQkJU1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSykpOworCQl9CisJfQogCiAJLyogR3JhYiB0aGUgc3BpbmxvY2sgYW5kIGFjcXVpcmUgYSBjb21tYW5kICovCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJU1hHX0dFVF9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgU3hnU2dsKTsKIAlpZiAoWG10Q21kID09IE5VTEwpIHsKLQkJLyogQ2FsbCBzeGdfY29tcGxldGVfc2xvd19zZW5kIHRvIHNlZSBpZiB3ZSBjYW4gKi8KLQkJLyogZnJlZSB1cCBhbnkgWG10UmluZ1plcm8gZW50cmllcyBhbmQgdGhlbiB0cnkgYWdhaW4gKi8KLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJLyoKKwkJICogQ2FsbCBzeGdfY29tcGxldGVfc2xvd19zZW5kIHRvIHNlZSBpZiB3ZSBjYW4KKwkJICogZnJlZSB1cCBhbnkgWG10UmluZ1plcm8gZW50cmllcyBhbmQgdGhlbiB0cnkgYWdhaW4KKwkJICovCisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKIAkJc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZChhZGFwdGVyKTsKLQkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5YbXRaZXJvTG9jaywgZmxhZ3MpOwogCQlTWEdfR0VUX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBTeGdTZ2wpOwogCQlpZiAoWG10Q21kID09IE5VTEwpIHsKIAkJCWFkYXB0ZXItPlN0YXRzLlhtdFplcm9GdWxsKys7CkBAIC0yMDI5LDggKzI2NDYsOCBAQAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJDbWQiLAogCQkgIFhtdENtZCwgWG10UmluZ0luZm8tPkhlYWQsIFhtdFJpbmdJbmZvLT5UYWlsLCAwKTsKIAkvKiBVcGRhdGUgc3RhdHMgKi8KLQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10UGt0cysrOwotCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRCeXRlcyArPSBEYXRhTGVuZ3RoOworCWFkYXB0ZXItPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlhZGFwdGVyLT5zdGF0cy50eF9ieXRlcyArPSBEYXRhTGVuZ3RoOwogI2lmIFhYWFRPRE8JCQkvKiBTdGF0cyBzdHVmZiAqLwogCWlmIChTWEdfTVVMVElDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKIAkJaWYgKFNYR19CUk9BRENBU1RfUEFDS0VUKEV0aGVySGRyKSkgewpAQCAtMjA0NSw3MCArMjY2Miw5MiBAQAogCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10VWNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOwogCX0KICNlbmRpZgotCS8qIEZpbGwgaW4gdGhlIGNvbW1hbmQgKi8KLQkvKiBDb3B5IG91dCB0aGUgZmlyc3QgU0dFIHRvIHRoZSBjb21tYW5kIGFuZCBhZGp1c3QgZm9yIG9mZnNldCAqLwotCXBoeXNfYWRkciA9Ci0JICAgIHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkvKgorCSAqIEZpbGwgaW4gdGhlIGNvbW1hbmQKKwkgKiBDb3B5IG91dCB0aGUgZmlyc3QgU0dFIHRvIHRoZSBjb21tYW5kIGFuZCBhZGp1c3QgZm9yIG9mZnNldAorCSAqLworCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IFNYR19HRVRfQUREUl9ISUdIKHBoeXNfYWRkcik7Ci0JWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzIDw8IDMyOwotCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9Ci0JICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyB8IFNYR19HRVRfQUREUl9MT1cocGh5c19hZGRyKTsKLS8qICAgICAgWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gU3hnU2dsLT5TZ2wuRWxlbWVudHNbSW5kZXhdLkFkZHJlc3M7ICovCi0vKiAgICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcy5Mb3dQYXJ0ICs9IE1kbE9mZnNldDsgKi8KKworCS8qCisJICogU0FIQVJBIFNHTCBXT1JLQVJPVU5ECisJICogU2VlIGlmIHRoZSBTR0wgc3RyYWRkbGVzIGEgNjRrIGJvdW5kYXJ5LiAgSWYgc28sIHNraXAgdG8KKwkgKiB0aGUgc3RhcnQgb2YgdGhlIG5leHQgNjRrIGJvdW5kYXJ5IGFuZCBjb250aW51ZQorIAkgKi8KKworCWlmICgoYWRhcHRlci0+YXNpY3R5cGUgPT0gU0FIQVJBX1JFVl9BKSAmJgorCQkoU1hHX0lOVkFMSURfU0dMKHBoeXNfYWRkcixza2ItPmRhdGFfbGVuKSkpCisJeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5YbXRaZXJvTG9jaywgZmxhZ3MpOworCQkvKiBTaWxlbnRseSBkcm9wIHRoaXMgcGFja2V0ICovCisJCXByaW50ayhLRVJOX0VNRVJHIkRyb3BwZWQgYSBwYWNrZXQgZm9yIDY0ayBib3VuZGFyeSBwcm9ibGVtXG4iKTsKKwkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworCX0KKwltZW1zZXQoWG10Q21kLCAnXDAnLCBzaXplb2YoKlhtdENtZCkpOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IHBoeXNfYWRkcjsKIAlYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUxlbmd0aCA9IERhdGFMZW5ndGg7Ci0JLyogU2V0IGEgcG9pbnRlciB0byB0aGUgcmVtYWluaW5nIFNHTCBlbnRyaWVzICovCi0vKiAgICAgIFhtdENtZC0+U2dsID0gU3hnU2dsLT5QaHlzaWNhbEFkZHJlc3M7ICovCi0JLyogQWR2YW5jZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgU3hnU2dsIHN0cnVjdHVyZSB0byAqLwotCS8qIHRoZSBzZWNvbmQgU0dFICovCi0vKiAgICAgIFNnbE9mZnNldCA9ICh1MzIpKCh1MzIgKikoJlN4Z1NnbC0+U2dsLkVsZW1lbnRzW0luZGV4KzFdKSAtICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyICopU3hnU2dsKTsgKi8KLS8qICAgICAgWG10Q21kLT5TZ2wuTG93UGFydCArPSBTZ2xPZmZzZXQ7ICovCiAJWG10Q21kLT5CdWZmZXIuU2dlT2Zmc2V0ID0gMDsKLQkvKiBOb3RlIC0gVG90YWxMZW5ndGggbWlnaHQgYmUgb3ZlcndyaXR0ZW4gd2l0aCBNU1MgYmVsb3cuLiAqLwogCVhtdENtZC0+QnVmZmVyLlRvdGFsTGVuZ3RoID0gRGF0YUxlbmd0aDsKLQlYbXRDbWQtPlNnRW50cmllcyA9IDE7CS8qKHVzaG9ydCkoU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyAtIEluZGV4KTsgKi8KKwlYbXRDbWQtPlNnRW50cmllcyA9IDE7CiAJWG10Q21kLT5GbGFncyA9IDA7Ci0JLyogKi8KLQkvKiBBZHZhbmNlIHRyYW5zbWl0IGNtZCBkZXNjcmlwdGVyIGJ5IDEuICovCi0JLyogTk9URSAtIFNlZSBjb21tZW50cyBpbiBTeGdUY3BPdXRwdXQgd2hlcmUgd2Ugd3JpdGUgKi8KLQkvKiB0byB0aGUgWG10Q21kIHJlZ2lzdGVyIHJlZ2FyZGluZyBDUFUgSUQgdmFsdWVzIGFuZC9vciAqLwotCS8qIG11bHRpcGxlIGNvbW1hbmRzLiAqLwotCS8qICovCi0JLyogKi8KLQlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlhtdENtZCwgMSwgVFJVRSk7Ci0JLyogKi8KLQkvKiAqLworCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBzZXQgdGhlIENoZWNrdW0gaW4gSVAgIGhlYWRlciB0byAwLiBUaGlzIGlzCisJCSAqIHJlcXVpcmVkIGJ5IGhhcmR3YXJlLgorCQkgKi8KKwkJaXBfaGRyKHNrYiktPmNoZWNrID0gMHgwOworCQlYbXRDbWQtPkNzdW1GbGFncy5GbGFncyB8PSBTWEdfU0xPV0NNRF9DU1VNX0lQOworCQlYbXRDbWQtPkNzdW1GbGFncy5GbGFncyB8PSBTWEdfU0xPV0NNRF9DU1VNX1RDUDsKKwkJLyogRG9udCBrbm93IGlmIGxlbmd0aCB3aWxsIHJlcXVpcmUgYSBjaGFuZ2UgaW4gY2FzZSBvZiBWTEFOICovCisJCVhtdENtZC0+Q3N1bUZsYWdzLk1hY0xlbiA9IEVUSF9ITEVOOworCQlYbXRDbWQtPkNzdW1GbGFncy5JcEhsID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpID4+CisJCQkJCQkJU1hHX05XX0hEUl9MRU5fU0hJRlQ7CisJfQorCS8qCisJICogQWR2YW5jZSB0cmFuc21pdCBjbWQgZGVzY3JpcHRlciBieSAxLgorCSAqIE5PVEUgLSBTZWUgY29tbWVudHMgaW4gU3hnVGNwT3V0cHV0IHdoZXJlIHdlIHdyaXRlCisJICogdG8gdGhlIFhtdENtZCByZWdpc3RlciByZWdhcmRpbmcgQ1BVIElEIHZhbHVlcyBhbmQvb3IKKwkgKiBtdWx0aXBsZSBjb21tYW5kcy4KKwkgKiBUb3AgMTYgYml0cyBzcGVjaWZ5IHF1ZXVlX2lkLiAgU2VlIGNvbW1lbnRzIGFib3V0IHF1ZXVlX2lkIGFib3ZlCisJICovCisJLyogRm91ciBxdWV1ZXMgYXQgdGhlIG1vbWVudCAqLworCUFTU0VSVCgocXVldWVfaWQgJiB+U1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSykgPT0gMCk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5YbXRDbWQsICgocXVldWVfaWQgPDwgMTYpIHwgMSksIFRSVUUpOwogCWFkYXB0ZXItPlN0YXRzLlhtdFFMZW4rKzsJLyogU3RhdHMgd2l0aGluIGxvY2sgKi8KLQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWER1bVNnbDIiLAogCQkgIFhtdENtZCwgcFNnbCwgU3hnU2dsLCAwKTsKLQlyZXR1cm47CisJcmV0dXJuICBTVEFUVVNfU1VDQ0VTUzsKIAogICAgICAgYWJvcnRjbWQ6Ci0JLyogTk9URSAtIE9ubHkganVtcCB0byB0aGlzIGxhYmVsIEFGVEVSIGdyYWJiaW5nIHRoZSAqLwotCS8qIFhtdFplcm9Mb2NrLCBhbmQgRE8gTk9UIERST1AgSVQgYmV0d2VlbiB0aGUgKi8KLQkvKiBjb21tYW5kIGFsbG9jYXRpb24gYW5kIHRoZSBmb2xsb3dpbmcgYWJvcnQuICovCisJLyoKKwkgKiBOT1RFIC0gT25seSBqdW1wIHRvIHRoaXMgbGFiZWwgQUZURVIgZ3JhYmJpbmcgdGhlCisJICogWG10WmVyb0xvY2ssIGFuZCBETyBOT1QgRFJPUCBJVCBiZXR3ZWVuIHRoZQorCSAqIGNvbW1hbmQgYWxsb2NhdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBhYm9ydC4KKwkgKi8KIAlpZiAoWG10Q21kKSB7CiAJCVNYR19BQk9SVF9DTUQoWG10UmluZ0luZm8pOwogCX0KLQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOwotCi0vKiBmYWlsc2dsOiAqLwotCS8qIEp1bXAgdG8gdGhpcyBsYWJlbCBpZiBmYWlsdXJlIG9jY3VycyBiZWZvcmUgdGhlICovCi0JLyogWG10WmVyb0xvY2sgaXMgZ3JhYmJlZCAqLwotCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOwotCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1TR0ZhbCIsCi0JCSAgcFNnbCwgU3hnU2dsLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwpOwotCi0JU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBTeGdTZ2wtPkR1bWJQYWNrZXQpOwkvKiBTeGdTZ2wtPkR1bWJQYWNrZXQgaXMgdGhlIHNrYiAqLwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBMaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAKIC8qCisgKiBmYWlsc2dsOgorICogCUp1bXAgdG8gdGhpcyBsYWJlbCBpZiBmYWlsdXJlIG9jY3VycyBiZWZvcmUgdGhlCisgKglYbXRaZXJvTG9jayBpcyBncmFiYmVkCisgKi8KKwlhZGFwdGVyLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiRHVtU0dGYWwiLAorCQkgIHBTZ2wsIFN4Z1NnbCwgWG10UmluZ0luZm8tPkhlYWQsIFhtdFJpbmdJbmZvLT5UYWlsKTsKKwkvKiBTeGdTZ2wtPkR1bWJQYWNrZXQgaXMgdGhlIHNrYiAqLworCS8vIFNYR19DT01QTEVURV9EVU1CX1NFTkQoYWRhcHRlciwgU3hnU2dsLT5EdW1iUGFja2V0KTsKKworIAlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Cit9CisKKy8qCisgKiBMaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKgogICogc3hnX2luaXRpYWxpemVfbGluayAtIEluaXRpYWxpemUgdGhlIGxpbmsgc3R1ZmYKICAqCiAgKiBBcmd1bWVudHMgLQpAQCAtMjExOSwxMCArMjc1OCwxMSBAQAogICovCiBzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2xpbmsoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgU1hHX0hXX1JFR1MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKIAl1MzIgVmFsdWU7CiAJdTMyIENvbmZpZ0RhdGE7CiAJdTMyIE1heEZyYW1lOworCXUzMiBBeGdNYWNSZWcxOwogCWludCBzdGF0dXM7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbml0TGluayIsCkBAIC0yMTQwLDE1ICsyNzgwLDE3IEBACiAJLyogUmVzZXQgYWxsIE1BQyBtb2R1bGVzICovCiAJV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMCwgQVhHTUFDX0NGRzBfU1VCX1JFU0VULCBUUlVFKTsKIAotCS8qIExpbmsgYWRkcmVzcyAwICovCi0JLyogWFhYVE9ETyAtIFRoaXMgYXNzdW1lcyB0aGUgTUFDIGFkZHJlc3MgKDBhOjBiOjBjOjBkOjBlOjBmKSAqLwotCS8qIGlzIHN0b3JlZCB3aXRoIHRoZSBmaXJzdCBuaWJibGUgKDBhKSBpbiB0aGUgYnl0ZSAwICovCi0JLyogb2YgdGhlIE1hYyBhZGRyZXNzLiAgUG9zc2libHkgcmV2ZXJzZT8gKi8KLQlWYWx1ZSA9ICoodTMyICopIGFkYXB0ZXItPk1hY0FkZHI7CisJLyoKKwkgKiBMaW5rIGFkZHJlc3MgMAorCSAqIFhYWFRPRE8gLSBUaGlzIGFzc3VtZXMgdGhlIE1BQyBhZGRyZXNzICgwYTowYjowYzowZDowZTowZikKKwkgKiBpcyBzdG9yZWQgd2l0aCB0aGUgZmlyc3QgbmliYmxlICgwYSkgaW4gdGhlIGJ5dGUgMAorCSAqIG9mIHRoZSBNYWMgYWRkcmVzcy4gIFBvc3NpYmx5IHJldmVyc2U/CisJICovCisJVmFsdWUgPSAqKHUzMiAqKSBhZGFwdGVyLT5tYWNhZGRyOwogCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzMExvdywgVmFsdWUsIFRSVUUpOwogCS8qIGFsc28gd3JpdGUgdGhlIE1BQyBhZGRyZXNzIHRvIHRoZSBNQUMuICBFbmRpYW4gaXMgcmV2ZXJzZWQuICovCiAJV1JJVEVfUkVHKEh3UmVncy0+TWFjQWRkcmVzc0xvdywgbnRvaGwoVmFsdWUpLCBUUlVFKTsKLQlWYWx1ZSA9ICgqKHUxNiAqKSAmIGFkYXB0ZXItPk1hY0FkZHJbNF0gJiAweDAwMDBGRkZGKTsKKwlWYWx1ZSA9ICgqKHUxNiAqKSAmIGFkYXB0ZXItPm1hY2FkZHJbNF0gJiAweDAwMDBGRkZGKTsKIAlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczBIaWdoLCBWYWx1ZSB8IExJTktfQUREUkVTU19FTkFCTEUsIFRSVUUpOwogCS8qIGVuZGlhbiBzd2FwIGZvciB0aGUgTUFDIChwdXQgaGlnaCBieXRlcyBpbiBiaXRzIFszMToxNl0sIHN3YXBwZWQpICovCiAJVmFsdWUgPSBudG9obChWYWx1ZSk7CkBAIC0yMTY3LDQ3ICsyODA5LDc2IEBACiAJV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMCwgMCwgVFJVRSk7CiAKIAkvKiBDb25maWd1cmUgTUFDICovCi0JV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMSwgKEFYR01BQ19DRkcxX1hNVF9QQVVTRSB8CS8qIEFsbG93IHNlbmRpbmcgb2YgcGF1c2UgKi8KLQkJCQkgICAgICAgQVhHTUFDX0NGRzFfWE1UX0VOIHwJLyogRW5hYmxlIFhNVCAqLwotCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UgfAkvKiBFbmFibGUgZGV0ZWN0aW9uIG9mIHBhdXNlICovCi0JCQkJICAgICAgIEFYR01BQ19DRkcxX1JDVl9FTiB8CS8qIEVuYWJsZSByZWNlaXZlICovCi0JCQkJICAgICAgIEFYR01BQ19DRkcxX1NIT1JUX0FTU0VSVCB8CS8qIHNob3J0IGZyYW1lIGRldGVjdGlvbiAqLwotCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9DSEVDS19MRU4gfAkvKiBWZXJpZnkgZnJhbWUgbGVuZ3RoICovCi0JCQkJICAgICAgIEFYR01BQ19DRkcxX0dFTl9GQ1MgfAkvKiBHZW5lcmF0ZSBGQ1MgKi8KLQkJCQkgICAgICAgQVhHTUFDX0NGRzFfUEFEXzY0KSwJLyogUGFkIGZyYW1lcyB0byA2NCBieXRlcyAqLwotCQkgIFRSVUUpOworCUF4Z01hY1JlZzEgPSAoICAvKiBFbmFibGUgWE1UICovCisJCQlBWEdNQUNfQ0ZHMV9YTVRfRU4gfAorCQkJLyogRW5hYmxlIHJlY2VpdmUgKi8KKwkJCUFYR01BQ19DRkcxX1JDVl9FTiB8CisJCQkvKiBzaG9ydCBmcmFtZSBkZXRlY3Rpb24gKi8KKwkJCUFYR01BQ19DRkcxX1NIT1JUX0FTU0VSVCB8CisJCQkvKiBWZXJpZnkgZnJhbWUgbGVuZ3RoICovCisJCQlBWEdNQUNfQ0ZHMV9DSEVDS19MRU4gfAorCQkJLyogR2VuZXJhdGUgRkNTICovCisJCQlBWEdNQUNfQ0ZHMV9HRU5fRkNTIHwKKwkJCS8qIFBhZCBmcmFtZXMgdG8gNjQgYnl0ZXMgKi8KKwkJCUFYR01BQ19DRkcxX1BBRF82NCk7CisKKyAJaWYgKGFkYXB0ZXItPlhtdEZjRW5hYmxlZCkgeworCQlBeGdNYWNSZWcxIHw9ICBBWEdNQUNfQ0ZHMV9YTVRfUEFVU0U7ICAvKiBBbGxvdyBzZW5kaW5nIG9mIHBhdXNlICovCisgCX0KKyAJaWYgKGFkYXB0ZXItPlJjdkZjRW5hYmxlZCkgeworCQlBeGdNYWNSZWcxIHw9ICBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0U7ICAvKiBFbmFibGUgZGV0ZWN0aW9uIG9mIHBhdXNlICovCisgCX0KKworIAlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcxLCBBeGdNYWNSZWcxLCBUUlVFKTsKIAogCS8qIFNldCBBWEdNQUMgbWF4IGZyYW1lIGxlbmd0aCBpZiBqdW1iby4gIE5vdCBuZWVkZWQgZm9yIHN0YW5kYXJkIE1UVSAqLwogCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQpIHsKIAkJV1JJVEVfUkVHKEh3UmVncy0+TWFjTWF4RnJhbWVMZW4sIEFYR01BQ19NQVhGUkFNRV9KVU1CTywgVFJVRSk7CiAJfQotCS8qIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLSAqLwotCS8qIFRoZSB2YWx1ZSBwbGFjZWQgaW4gdGhlIEFYR01BQ19BTUlJTV9DRkdfSEFMRl9DTE9DSyBwb3J0aW9uICovCi0JLyogKGJvdHRvbSBiaXRzKSBvZiB0aGlzIHJlZ2lzdGVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSAqLwotCS8qIE1EQyBmcmVxdWVuY3kgYXMgc3BlY2lmaWVkIGluIHRoZSBBLVhHTUFDIERlc2lnbiBEb2N1bWVudC4gKi8KLQkvKiBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIHplcm8uICBUaGUgZm9sbG93aW5nIHZhbHVlICg2MiBvciAweDNFKSAqLwotCS8qIGlzIGJhc2VkIG9uIG91ciBNQUMgdHJhbnNtaXQgY2xvY2sgZnJlcXVlbmN5IChNVENMSykgb2YgMzEyLjUgTUh6LiAqLwotCS8qIEdpdmVuIGEgbWF4aW11bSBNRElPIGNsb2NrIGZyZXF1ZW5jeSBvZiAyLjUgTUh6IChzZWUgdGhlIFBIWSBzcGVjKSwgKi8KLQkvKiB3ZSBnZXQ6ICAzMTIuNS8oMiooWCsxKSkgPCAyLjUgID09PiBYID0gNjIuICovCi0JLyogVGhpcyB2YWx1ZSBoYXBwZW5zIHRvIGJlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHJlZ2lzdGVyLCAqLwotCS8qIHNvIHdlIHJlYWxseSBkb24ndCBoYXZlIHRvIGRvIHRoaXMuICovCi0JV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1Db25maWcsIDB4MDAwMDAwM0UsIFRSVUUpOworCS8qCisJICogQU1JSU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtCisJICogVGhlIHZhbHVlIHBsYWNlZCBpbiB0aGUgQVhHTUFDX0FNSUlNX0NGR19IQUxGX0NMT0NLIHBvcnRpb24KKwkgKiAoYm90dG9tIGJpdHMpIG9mIHRoaXMgcmVnaXN0ZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIE1EQyBmcmVxdWVuY3kKKwkgKiBhcyBzcGVjaWZpZWQgaW4gdGhlIEEtWEdNQUMgRGVzaWduIERvY3VtZW50LiBUaGlzIHZhbHVlIG11c3Qgbm90IGJlCisJICogemVyby4gIFRoZSBmb2xsb3dpbmcgdmFsdWUgKDYyIG9yIDB4M0UpIGlzIGJhc2VkIG9uIG91ciBNQUMgdHJhbnNtaXQKKwkgKiBjbG9jayBmcmVxdWVuY3kgKE1UQ0xLKSBvZiAzMTIuNSBNSHouIEdpdmVuIGEgbWF4aW11bSBNRElPIGNsb2NrCisJICogZnJlcXVlbmN5IG9mIDIuNSBNSHogKHNlZSB0aGUgUEhZIHNwZWMpLCB3ZSBnZXQ6CisJICogCTMxMi41LygyKihYKzEpKSA8IDIuNSAgPT0+IFggPSA2Mi4KKwkgKiBUaGlzIHZhbHVlIGhhcHBlbnMgdG8gYmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcmVnaXN0ZXIsIHNvIHdlCisJICogcmVhbGx5IGRvbid0IGhhdmUgdG8gZG8gdGhpcy4KKwkgKi8KKwlpZiAoYWRhcHRlci0+YXNpY3R5cGUgPT0gU0FIQVJBX1JFVl9CKSB7CisJCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ29uZmlnLCAweDAwMDAwMDFGLCBUUlVFKTsKKwl9IGVsc2UgeworCQlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNvbmZpZywgMHgwMDAwMDAzRSwgVFJVRSk7CisJfQogCiAJLyogUG93ZXIgdXAgYW5kIGVuYWJsZSBQSFkgYW5kIFhBVUkvWEdYUy9TZXJkZXMgbG9naWMgKi8KIAlXUklURV9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLAotCQkgIChMU19QSFlfQ0xSX1JFU0VUIHwKLQkJICAgTFNfWEdYU19FTkFCTEUgfAotCQkgICBMU19YR1hTX0NUTCB8IExTX1BIWV9DTEtfRU4gfCBMU19BVFROX0FMQVJNKSwgVFJVRSk7CisJCSAgIChMU19QSFlfQ0xSX1JFU0VUIHwKKwkJICAgIExTX1hHWFNfRU5BQkxFIHwKKwkJICAgIExTX1hHWFNfQ1RMIHwKKwkJICAgIExTX1BIWV9DTEtfRU4gfAorCQkgICAgTFNfQVRUTl9BTEFSTSksCisJCSAgICBUUlVFKTsKIAlEQkdfRVJST1IoIkFmdGVyIFBvd2VyIFVwIGFuZCBlbmFibGUgUEhZIGluIHN4Z19pbml0aWFsaXplX2xpbmtcbiIpOwogCi0JLyogUGVyIGluZm9ybWF0aW9uIGdpdmVuIGJ5IEFlbHVyb3MsIHdhaXQgMTAwIG1zIGFmdGVyIHJlbW92aW5nIHJlc2V0LiAqLwotCS8qIEl0J3Mgbm90IGVub3VnaCB0byB3YWl0IGZvciB0aGUgc2VsZi1jbGVhcmluZyByZXNldCBiaXQgaW4gcmVnIDAgdG8gY2xlYXIuICovCisJLyoKKwkgKiBQZXIgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgQWVsdXJvcywgd2FpdCAxMDAgbXMgYWZ0ZXIgcmVtb3ZpbmcgcmVzZXQuCisJICogSXQncyBub3QgZW5vdWdoIHRvIHdhaXQgZm9yIHRoZSBzZWxmLWNsZWFyaW5nIHJlc2V0IGJpdCBpbiByZWcgMCB0bworCSAqIGNsZWFyLgorCSAqLwogCW1kZWxheSgxMDApOwogCi0JLyogVmVyaWZ5IHRoZSBQSFkgaGFzIGNvbWUgdXAgYnkgY2hlY2tpbmcgdGhhdCB0aGUgUmVzZXQgYml0IGhhcyBjbGVhcmVkLiAqLwotCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8qIFBIWSBQTUEvUE1EIG1vZHVsZSAqLwotCQkJCSAgIFBIWV9QTUFfQ09OVFJPTDEsCS8qIFBNQS9QTUQgY29udHJvbCByZWdpc3RlciAqLwotCQkJCSAgICZWYWx1ZSk7CisJLyogVmVyaWZ5IHRoZSBQSFkgaGFzIGNvbWUgdXAgYnkgY2hlY2tpbmcgdGhhdCB0aGUgUmVzZXQgYml0IGhhcworCSAqIGNsZWFyZWQuCisJICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwKKwkJCQlNSUlNX0RFVl9QSFlfUE1BLCAvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KKwkJCQlQSFlfUE1BX0NPTlRST0wxLCAvKiBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJCQkmVmFsdWUpOworCURCR19FUlJPUigiQWZ0ZXIgc3hnX3JlYWRfbWRpb19yZWcgVmFsdWVbJXhdIGZhaWw9JXhcbiIsIFZhbHVlLAorCQkJCQkgKFZhbHVlICYgUE1BX0NPTlRST0wxX1JFU0VUKSk7CiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKIAkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CiAJaWYgKFZhbHVlICYgUE1BX0NPTlRST0wxX1JFU0VUKQkvKiByZXNldCBjb21wbGV0ZSBpZiBiaXQgaXMgMCAqLwpAQCAtMjIyOCwxNiArMjg5OSwyNiBAQAogCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAogCS8qIEVuYWJsZSB0aGUgTGluayBBbGFybSAqLwotCXN0YXR1cyA9IHN4Z193cml0ZV9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KLQkJCQkgICAgTEFTSV9DT05UUk9MLAkvKiBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQkJCQkgICAgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKTsJLyogZW5hYmxlIGxpbmsgYWxhcm0gYml0ICovCisKKwkvKiBNSUlNX0RFVl9QSFlfUE1BCQktIFBIWSBQTUEvUE1EIG1vZHVsZQorCSAqIExBU0lfQ09OVFJPTAkJCS0gTEFTSSBjb250cm9sIHJlZ2lzdGVyCisJICogTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFCS0gZW5hYmxlIGxpbmsgYWxhcm0gYml0CisJICovCisJc3RhdHVzID0gc3hnX3dyaXRlX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCisJCQkJICAgIExBU0lfQ09OVFJPTCwKKwkJCQkgICAgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKTsKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAogCS8qIFhYWFRPRE8gLSB0ZW1wb3JhcnkgLSB2ZXJpZnkgYml0IGlzIHNldCAqLwotCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8qIFBIWSBQTUEvUE1EIG1vZHVsZSAqLwotCQkJCSAgIExBU0lfQ09OVFJPTCwJLyogTEFTSSBjb250cm9sIHJlZ2lzdGVyICovCisKKwkvKiBNSUlNX0RFVl9QSFlfUE1BCQktIFBIWSBQTUEvUE1EIG1vZHVsZQorCSAqIExBU0lfQ09OVFJPTAkJCS0gTEFTSSBjb250cm9sIHJlZ2lzdGVyCisJICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkgICBMQVNJX0NPTlRST0wsCiAJCQkJICAgJlZhbHVlKTsKKwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOwogCWlmICghKFZhbHVlICYgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKSkgewpAQCAtMjI1Myw2ICsyOTM0LDExIEBACiAJCSAgICAgIFJDVl9DT05GSUdfVFpJUFY0IHwKIAkJICAgICAgUkNWX0NPTkZJR19IQVNIXzE2IHwKIAkJICAgICAgUkNWX0NPTkZJR19TT0NLRVQgfCBSQ1ZfQ09ORklHX0JVRlNJWkUoTWF4RnJhbWUpKTsKKworCWlmIChhZGFwdGVyLT5hc2ljdHlwZSA9PSBTQUhBUkFfUkVWX0IpIHsKKwkJQ29uZmlnRGF0YSB8PSAoUkNWX0NPTkZJR19ISVBSSUNUTCAgfAorCQkJCVJDVl9DT05GSUdfTkVXU1RBVFVTRk1UKTsKKwl9CiAJV1JJVEVfUkVHKEh3UmVncy0+UmN2Q29uZmlnLCBDb25maWdEYXRhLCBUUlVFKTsKIAogCVdSSVRFX1JFRyhId1JlZ3MtPlhtdENvbmZpZywgWE1UX0NPTkZJR19FTkFCTEUsIFRSVUUpOwpAQCAtMjI3NywyMSArMjk2MywyNSBAQAogc3RhdGljIGludCBzeGdfcGh5X2luaXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKIAl1MzIgVmFsdWU7Ci0Jc3RydWN0IFBIWV9VQ09ERSAqcDsKKwlzdHJ1Y3QgcGh5X3Vjb2RlICpwOwogCWludCBzdGF0dXM7CiAKIAlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQkvKiBSZWFkIGEgcmVnaXN0ZXIgdG8gaWRlbnRpZnkgdGhlIFBIWSB0eXBlICovCi0Jc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJICAgMHhDMjA1LAkvKiBQSFkgSUQgcmVnaXN0ZXIgKD8pICovCi0JCQkJICAgJlZhbHVlKTsJLyogICAgWFhYVE9ETyAtIGFkZCBkZWYgKi8KKwkvKiBNSUlNX0RFVl9QSFlfUE1BIC0gUEhZIFBNQS9QTUQgbW9kdWxlCisJICogMHhDMjA1IC0gUEhZIElEIHJlZ2lzdGVyICg/KQorCSAqICZWYWx1ZSAtIFhYWFRPRE8gLSBhZGQgZGVmCisJICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkgICAweEMyMDUsCisJCQkJICAgJlZhbHVlKTsKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAotCWlmIChWYWx1ZSA9PSAweDAwMTIpIHsJLyogMHgwMDEyID09IEFFTDIwMDVDIFBIWSg/KSAtIFhYWFRPRE8gLSBhZGQgZGVmICovCi0JCURCR19FUlJPUgotCQkgICAgKCJBRUwyMDA1QyBQSFkgZGV0ZWN0ZWQuICBEb3dubG9hZGluZyBQSFkgbWljcm9jb2RlLlxuIik7CisJaWYgKFZhbHVlID09IDB4MDAxMikgeworCQkvKiAweDAwMTIgPT0gQUVMMjAwNUMgUEhZKD8pIC0gWFhYVE9ETyAtIGFkZCBkZWYgKi8KKwkJREJHX0VSUk9SKCJBRUwyMDA1QyBQSFkgZGV0ZWN0ZWQuICBEb3dubG9hZGluZyBQSFkgXAorCQkJCSBtaWNyb2NvZGUuXG4iKTsKIAogCQkvKiBJbml0aWFsaXplIEFFTDIwMDVDIFBIWSBhbmQgZG93bmxvYWQgUEhZIG1pY3JvY29kZSAqLwogCQlmb3IgKHAgPSBQaHlVY29kZTsgcC0+QWRkciAhPSAweEZGRkY7IHArKykgewpAQCAtMjI5OSwxMCArMjk4OSwxMyBAQAogCQkJCS8qIGlmIGFkZHJlc3MgPT0gMCwgZGF0YSA9PSBzbGVlcCB0aW1lIGluIG1zICovCiAJCQkJbWRlbGF5KHAtPkRhdGEpOwogCQkJfSBlbHNlIHsKLQkJCQkvKiB3cml0ZSB0aGUgZ2l2ZW4gZGF0YSB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgKi8KLQkJCQlzdGF0dXMgPSBzeGdfd3JpdGVfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJCQkJICAgIHAtPkFkZHIsCS8qIFBIWSBhZGRyZXNzICovCi0JCQkJCQkJICAgIHAtPkRhdGEpOwkvKiBQSFkgZGF0YSAqLworCQkJLyogd3JpdGUgdGhlIGdpdmVuIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzICovCisJCQkJc3RhdHVzID0gc3hnX3dyaXRlX21kaW9fcmVnKGFkYXB0ZXIsCisJCQkJCQkJTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkJCQkvKiBQSFkgYWRkcmVzcyAqLworCQkJCQkJCSAgICBwLT5BZGRyLAorCQkJCQkJCS8qIFBIWSBkYXRhICovCisJCQkJCQkJICAgIHAtPkRhdGEpOwogCQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCQkJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOwogCQkJfQpAQCAtMjMyNCwxMSArMzAxNywxNCBAQAogICovCiBzdGF0aWMgdm9pZCBzeGdfbGlua19ldmVudChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotCXN0cnVjdCBTWEdfSFdfUkVHUyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXN0cnVjdCBzeGdfaHdfcmVncyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJZW51bSBTWEdfTElOS19TVEFURSBMaW5rU3RhdGU7CiAJaW50IHN0YXR1czsKIAl1MzIgVmFsdWU7CiAKKwlpZiAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTikKKwkJcmV0dXJuOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkxpbmtFdm50IiwKIAkJICBhZGFwdGVyLCAwLCAwLCAwKTsKIAlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7CkBAIC0yMzM2LDM1ICszMDMyLDU3IEBACiAJLyogQ2hlY2sgdGhlIExpbmsgU3RhdHVzIHJlZ2lzdGVyLiAgV2Ugc2hvdWxkIGhhdmUgYSBMaW5rIEFsYXJtLiAqLwogCVJFQURfUkVHKEh3UmVncy0+TGlua1N0YXR1cywgVmFsdWUpOwogCWlmIChWYWx1ZSAmIExTX0xJTktfQUxBUk0pIHsKLQkJLyogV2UgZ290IGEgTGluayBTdGF0dXMgYWxhcm0uICBGaXJzdCwgcGF1c2UgdG8gbGV0IHRoZSAqLwotCQkvKiBsaW5rIHN0YXRlIHNldHRsZSAoaXQgY2FuIGJvdW5jZSBhIG51bWJlciBvZiB0aW1lcykgKi8KKwkJLyoKKwkJICogV2UgZ290IGEgTGluayBTdGF0dXMgYWxhcm0uICBGaXJzdCwgcGF1c2UgdG8gbGV0IHRoZQorCQkgKiBsaW5rIHN0YXRlIHNldHRsZSAoaXQgY2FuIGJvdW5jZSBhIG51bWJlciBvZiB0aW1lcykKKwkJICovCiAJCW1kZWxheSgxMCk7CiAKIAkJLyogTm93IGNsZWFyIHRoZSBhbGFybSBieSByZWFkaW5nIHRoZSBMQVNJIHN0YXR1cyByZWdpc3Rlci4gKi8KLQkJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJCSAgIExBU0lfU1RBVFVTLAkvKiBMQVNJIHN0YXR1cyByZWdpc3RlciAqLworCQkvKiBNSUlNX0RFVl9QSFlfUE1BIC0gUEhZIFBNQS9QTUQgbW9kdWxlICovCisJCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCisJCQkJCS8qIExBU0kgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCSAgIExBU0lfU1RBVFVTLAogCQkJCQkgICAmVmFsdWUpOwogCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CiAJCQlEQkdfRVJST1IoIkVycm9yIHJlYWRpbmcgTEFTSSBTdGF0dXMgTURJTyByZWdpc3RlciFcbiIpOwogCQkJc3hnX2xpbmtfc3RhdGUoYWRhcHRlciwgU1hHX0xJTktfRE9XTik7Ci0vKiAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoMCk7ICovCisJCS8qIEFTU0VSVCgwKTsgKi8KIAkJfQotCQlBU1NFUlQoVmFsdWUgJiBMQVNJX1NUQVRVU19MU19BTEFSTSk7CisJCS8qCisJCSAqIFdlIHVzZWQgdG8gYXNzZXJ0IHRoYXQgdGhlIExBU0lfTFNfQUxBUk0gYml0IHdhcyBzZXQsIGFzCisJCSAqIGl0IHNob3VsZCBiZS4gIEJ1dCB0aGVyZSBhcHBlYXJzIHRvIGJlIGNhc2VzIGR1cmluZworCQkgKiBpbml0aWFsaXphdGlvbiAod2hlbiB0aGUgUEhZIGlzIHJlc2V0IGFuZCByZS1pbml0aWFsaXplZCkKKwkJICogd2hlbiB3ZSBnZXQgYSBsaW5rIGFsYXJtLCBidXQgdGhlIHN0YXR1cyBiaXQgaXMgMCB3aGVuIHdlCisJCSAqIHJlYWQgaXQuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8gYXNzdXJlIHRoaXMgbmV2ZXIgaGFwcGVucworCQkgKiAoYW5kIG52ZXIgYmVpbmcgY2VydGFpbiksIGp1c3QgaWdub3JlIGl0LgorCisJCSAqIEFTU0VSVChWYWx1ZSAmIExBU0lfU1RBVFVTX0xTX0FMQVJNKTsKKwkJICovCiAKIAkJLyogTm93IGdldCBhbmQgc2V0IHRoZSBsaW5rIHN0YXRlICovCiAJCUxpbmtTdGF0ZSA9IHN4Z19nZXRfbGlua19zdGF0ZShhZGFwdGVyKTsKIAkJc3hnX2xpbmtfc3RhdGUoYWRhcHRlciwgTGlua1N0YXRlKTsKIAkJREJHX0VSUk9SKCJTWEc6IExpbmsgQWxhcm0gb2NjdXJyZWQuICBMaW5rIGlzICVzXG4iLAogCQkJICAoKExpbmtTdGF0ZSA9PSBTWEdfTElOS19VUCkgPyAiVVAiIDogIkRPV04iKSk7CisJCWlmIChMaW5rU3RhdGUgPT0gU1hHX0xJTktfVVApIHsKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJfQogCX0gZWxzZSB7Ci0JCS8qIFhYWFRPRE8gLSBBc3N1bWluZyBMaW5rIEF0dGVudGlvbiBpcyBvbmx5IGJlaW5nIGdlbmVyYXRlZCBmb3IgdGhlICovCi0JCS8qIExpbmsgQWxhcm0gcGluIChhbmQgbm90IGZvciBhIFhBVUkgTGluayBTdGF0dXMgY2hhbmdlKSwgdGhlbiBpdCdzICovCi0JCS8qIGltcG9zc2libGUgdG8gZ2V0IGhlcmUuICBZZXQgd2UndmUgZ290dGVuIGhlcmUgdHdpY2UgKHVuZGVyIGV4dHJlbWUgKi8KLQkJLyogY29uZGl0aW9ucyAtIGJvdW5jaW5nIHRoZSBsaW5rIHVwIGFuZCBkb3duIG1hbnkgdGltZXMgYSBzZWNvbmQpLiAqLwotCQkvKiBOZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uICovCisJCS8qCisJIAkgKiBYWFhUT0RPIC0gQXNzdW1pbmcgTGluayBBdHRlbnRpb24gaXMgb25seSBiZWluZyBnZW5lcmF0ZWQKKwkgCSAqIGZvciB0aGUgTGluayBBbGFybSBwaW4gKGFuZCBub3QgZm9yIGEgWEFVSSBMaW5rIFN0YXR1cyBjaGFuZ2UpCisJIAkgKiAsIHRoZW4gaXQncyBpbXBvc3NpYmxlIHRvIGdldCBoZXJlLiAgWWV0IHdlJ3ZlIGdvdHRlbiBoZXJlCisJIAkgKiB0d2ljZSAodW5kZXIgZXh0cmVtZSBjb25kaXRpb25zIC0gYm91bmNpbmcgdGhlIGxpbmsgdXAgYW5kCisJIAkgKiBkb3duIG1hbnkgdGltZXMgYSBzZWNvbmQpLiBOZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCisJIAkgKi8KIAkJREJHX0VSUk9SKCJTWEc6IHN4Z19saW5rX2V2ZW50OiBDYW4ndCBnZXQgaGVyZSFcbiIpOwogCQlEQkdfRVJST1IoIlNYRzogTGluayBTdGF0dXMgPT0gMHglMDhYLlxuIiwgVmFsdWUpOwotLyogICAgICAgICAgICAgIEFTU0VSVCgwKTsgKi8KKwkJLyogQVNTRVJUKDApOyAqLwogCX0KIAlEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fZnVuY19fKTsKIApAQCAtMjM4OSwxMCArMzEwNywxNSBAQAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkdldExpbmsiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwogCi0JLyogUGVyIHRoZSBYZW5wYWsgc3BlYyAoYW5kIHRoZSBJRUVFIDEwR2Igc3BlYz8pLCB0aGUgbGluayBpcyB1cCBpZiAqLwotCS8qIHRoZSBmb2xsb3dpbmcgMyBiaXRzIChmcm9tIDMgZGlmZmVyZW50IE1ESU8gcmVnaXN0ZXJzKSBhcmUgYWxsIHRydWUuICovCi0Jc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJICAgUEhZX1BNQV9SQ1ZfREVULAkvKiBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdCByZWdpc3RlciAqLworCS8qCisJICogUGVyIHRoZSBYZW5wYWsgc3BlYyAoYW5kIHRoZSBJRUVFIDEwR2Igc3BlYz8pLCB0aGUgbGluayBpcyB1cCBpZgorCSAqIHRoZSBmb2xsb3dpbmcgMyBiaXRzIChmcm9tIDMgZGlmZmVyZW50IE1ESU8gcmVnaXN0ZXJzKSBhcmUgYWxsIHRydWUuCisJICovCisKKwkvKiBNSUlNX0RFVl9QSFlfUE1BIC0gIFBIWSBQTUEvUE1EIG1vZHVsZSAqLworCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCisJCQkJLyogUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QgcmVnaXN0ZXIgKi8KKwkJCQkgICBQSFlfUE1BX1JDVl9ERVQsCiAJCQkJICAgJlZhbHVlKTsKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQlnb3RvIGJhZDsKQEAgLTI0MDEsOCArMzEyNCwxMCBAQAogCWlmICghKFZhbHVlICYgUE1BX1JDVl9ERVRFQ1QpKQogCQlyZXR1cm4gKFNYR19MSU5LX0RPV04pOwogCi0Jc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BDUywJLyogUEhZIFBDUyBtb2R1bGUgKi8KLQkJCQkgICBQSFlfUENTXzEwR19TVEFUVVMxLAkvKiBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxIHJlZ2lzdGVyICovCisJLyogTUlJTV9ERVZfUEhZX1BDUyAtIFBIWSBQQ1MgbW9kdWxlICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BDUywKKwkJCQkvKiBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxIHJlZ2lzdGVyICovCisJCQkJICAgUEhZX1BDU18xMEdfU1RBVFVTMSwKIAkJCQkgICAmVmFsdWUpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCWdvdG8gYmFkOwpAQCAtMjQxMSw4ICszMTM2LDkgQEAKIAlpZiAoIShWYWx1ZSAmIFBDU18xMEJfQkxPQ0tfTE9DSykpCiAJCXJldHVybiAoU1hHX0xJTktfRE9XTik7CiAKLQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfWFMsCS8qIFBIWSBYUyBtb2R1bGUgKi8KLQkJCQkgICBQSFlfWFNfTEFORV9TVEFUVVMsCS8qIFhTIExhbmUgU3RhdHVzIHJlZ2lzdGVyICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1hTLC8qIFBIWSBYUyBtb2R1bGUgKi8KKwkJCQkvKiBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciAqLworCQkJCSAgIFBIWV9YU19MQU5FX1NUQVRVUywKIAkJCQkgICAmVmFsdWUpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCWdvdG8gYmFkOwpAQCAtMjQyNyw3ICszMTUzLDcgQEAKIAlyZXR1cm4gKFNYR19MSU5LX1VQKTsKIAogICAgICAgYmFkOgotCS8qIEFuIGVycm9yIG9jY3VycmVkIHJlYWRpbmcgYW4gTURJTyByZWdpc3Rlci4gIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4gKi8KKwkvKiBBbiBlcnJvciBvY2N1cnJlZCByZWFkaW5nIGFuIE1ESU8gcmVnaXN0ZXIuIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4gKi8KIAlEQkdfRVJST1IoIkVycm9yIHJlYWRpbmcgYW4gTURJTyByZWdpc3RlciFcbiIpOwogCUFTU0VSVCgwKTsKIAlyZXR1cm4gKFNYR19MSU5LX0RPV04pOwpAQCAtMjQ0OCw2ICszMTc0LDM3IEBACiB9CiAKIC8qCisgKiBzeGdfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CisgKiAgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqLworaW50IHN4Z19jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICghKChuZXdfbXR1ID09IFNYR19ERUZBVUxUX01UVSkgfHwgKG5ld19tdHUgPT0gU1hHX0pVTUJPX01UVSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmKG5ld19tdHUgPT0gbmV0ZGV2LT5tdHUpCisJCXJldHVybiAwOworCisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJaWYgKG5ld19tdHUgPT0gU1hHX0pVTUJPX01UVSkgeworCQlhZGFwdGVyLT5KdW1ib0VuYWJsZWQgPSBUUlVFOworCQlhZGFwdGVyLT5GcmFtZVNpemUgPSBKVU1CT01BWEZSQU1FOworCQlhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkU7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+SnVtYm9FbmFibGVkID0gRkFMU0U7CisJCWFkYXB0ZXItPkZyYW1lU2l6ZSA9IEVUSEVSTUFYRlJBTUU7CisJCWFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID0gU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFOworCX0KKworCXN4Z19lbnRyeV9oYWx0KG5ldGRldik7CisJc3hnX2VudHJ5X29wZW4obmV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIHN4Z19saW5rX3N0YXRlIC0gU2V0IHRoZSBsaW5rIHN0YXRlIGFuZCBpZiBuZWNlc3NhcnksIGluZGljYXRlLgogICoJVGhpcyByb3V0aW5lIHRoZSBjZW50cmFsIHBvaW50IG9mIHByb2Nlc3NpbmcgZm9yIGFsbCBsaW5rIHN0YXRlIGNoYW5nZXMuCiAgKglOb3RoaW5nIGVsc2UgaW4gdGhlIGRyaXZlciBzaG91bGQgYWx0ZXIgdGhlIGxpbmsgc3RhdGUgb3IgcGVyZm9ybQpAQCAtMjQ2MCwyNyArMzIxNywzMiBAQAogICogUmV0dXJuCiAgKglOb25lCiAgKi8KLXN0YXRpYyB2b2lkIHN4Z19saW5rX3N0YXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIGVudW0gU1hHX0xJTktfU1RBVEUgTGlua1N0YXRlKQorc3RhdGljIHZvaWQgc3hnX2xpbmtfc3RhdGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQllbnVtIFNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZSkKIHsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiTG5rSU5EQ1QiLAogCQkgIGFkYXB0ZXIsIExpbmtTdGF0ZSwgYWRhcHRlci0+TGlua1N0YXRlLCBhZGFwdGVyLT5TdGF0ZSk7CiAKIAlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQkvKiBIb2xkIHRoZSBhZGFwdGVyIGxvY2sgZHVyaW5nIHRoaXMgcm91dGluZS4gIE1heWJlIG1vdmUgKi8KLQkvKiB0aGUgbG9jayB0byB0aGUgY2FsbGVyLiAqLwotCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCS8qCisJICogSG9sZCB0aGUgYWRhcHRlciBsb2NrIGR1cmluZyB0aGlzIHJvdXRpbmUuICBNYXliZSBtb3ZlCisJICogdGhlIGxvY2sgdG8gdGhlIGNhbGxlci4KKwkgKi8KKwkvKiBJTVAgVE9ETyA6IENoZWNrIGlmIHdlIGNhbiBzdXJ2aXZlIHdpdGhvdXQgdGFraW5nIHRoaXMgbG9jayAqLworLy8Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CiAJaWYgKExpbmtTdGF0ZSA9PSBhZGFwdGVyLT5MaW5rU3RhdGUpIHsKIAkJLyogTm90aGluZyBjaGFuZ2VkLi4gKi8KLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKLQkJREJHX0VSUk9SKCJFWElUICMwICVzXG4iLCBfX2Z1bmNfXyk7CisvLwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJREJHX0VSUk9SKCJFWElUICMwICVzLiBMaW5rIHN0YXR1cyA9ICVkXG4iLAorCQkJCQkgX19mdW5jX18sIExpbmtTdGF0ZSk7CiAJCXJldHVybjsKIAl9CiAJLyogU2F2ZSB0aGUgYWRhcHRlciBzdGF0ZSAqLwogCWFkYXB0ZXItPkxpbmtTdGF0ZSA9IExpbmtTdGF0ZTsKIAogCS8qIERyb3AgdGhlIGxvY2sgYW5kIGluZGljYXRlIGxpbmsgc3RhdGUgKi8KLQlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworLy8Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKIAlEQkdfRVJST1IoIkVYSVQgIzEgJXNcbiIsIF9fZnVuY19fKTsKIAogCXN4Z19pbmRpY2F0ZV9saW5rX3N0YXRlKGFkYXB0ZXIsIExpbmtTdGF0ZSk7CkBAIC0yNTAxLDE0ICszMjYzLDE2IEBACiBzdGF0aWMgaW50IHN4Z193cml0ZV9tZGlvX3JlZyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJICAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgVmFsdWUpCiB7Ci0Jc3RydWN0IFNYR19IV19SRUdTICpId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7Ci0JdTMyIEFkZHJPcDsJCS8qIEFkZHJlc3Mgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLwotCXUzMiBXcml0ZU9wOwkJLyogV3JpdGUgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLwotCXUzMiBDbWQ7CQkvKiBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpICovCisJc3RydWN0IHN4Z19od19yZWdzICpId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJLyogQWRkcmVzcyBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCisJdTMyIEFkZHJPcDsKKwkvKiBXcml0ZSBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCisJdTMyIFdyaXRlT3A7CisJdTMyIENtZDsvKiBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpICovCiAJdTMyIFZhbHVlUmVhZDsKIAl1MzIgVGltZW91dDsKIAotLyogIERCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsgKi8KKwkvKiBEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX2Z1bmNfXyk7ICovCiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJXcnRNRElPIiwKIAkJICBhZGFwdGVyLCAwLCAwLCAwKTsKQEAgLTI1NzEsNyArMzMzNSw3IEBACiAJCX0KIAl9IHdoaWxlIChWYWx1ZVJlYWQgJiBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZKTsKIAotLyogIERCR19FUlJPUigiRVhJVCAlc1xuIiwgX19mdW5jX18pOyAqLworCS8qIERCR19FUlJPUigiRVhJVCAlc1xuIiwgX19mdW5jX18pOyAqLwogCiAJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CiB9CkBAIC0yNTgzLDcgKzMzNDcsNyBAQAogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKiAgRGV2QWRkciAgICAgLSBNRElPIGRldmljZSBudW1iZXIgYmVpbmcgYWRkcmVzc2VkCiAgKiAgUmVnQWRkciAgICAgLSByZWdpc3RlciBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIE1ESU8gZGV2aWNlCi0gKiAgcFZhbHVlCQktIHBvaW50ZXIgdG8gd2hlcmUgdG8gcHV0IGRhdGEgcmVhZCBmcm9tIHRoZSBNRElPIHJlZ2lzdGVyCisgKiAgcFZhbHVlCS0gcG9pbnRlciB0byB3aGVyZSB0byBwdXQgZGF0YSByZWFkIGZyb20gdGhlIE1ESU8gcmVnaXN0ZXIKICAqCiAgKiBSZXR1cm4KICAqCXN0YXR1cwpAQCAtMjU5MSwxNiArMzM1NSwxNiBAQAogc3RhdGljIGludCBzeGdfcmVhZF9tZGlvX3JlZyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJICAgICB1MzIgRGV2QWRkciwgdTMyIFJlZ0FkZHIsIHUzMiAqcFZhbHVlKQogewotCXN0cnVjdCBTWEdfSFdfUkVHUyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOwotCXUzMiBBZGRyT3A7CQkvKiBBZGRyZXNzIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KLQl1MzIgUmVhZE9wOwkJLyogUmVhZCBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCi0JdTMyIENtZDsJCS8qIENvbW1hbmQgKHdyaXR0ZW4gdG8gTUlJTSBjb21tYW5kIHJlZykgKi8KKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwl1MzIgQWRkck9wOwkvKiBBZGRyZXNzIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KKwl1MzIgUmVhZE9wOwkvKiBSZWFkIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KKwl1MzIgQ21kOwkvKiBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpICovCiAJdTMyIFZhbHVlUmVhZDsKIAl1MzIgVGltZW91dDsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIldydE1ESU8iLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwotLyogIERCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsgKi8KKwlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJLyogRW5zdXJlIHZhbHVlcyBkb24ndCBleGNlZWQgZmllbGQgd2lkdGggKi8KIAlEZXZBZGRyICY9IDB4MDAxRjsJLyogNS1iaXQgZmllbGQgKi8KQEAgLTI2MzYsNiArMzQwMCw4IEBACiAJCXVkZWxheSgxMDApOwkvKiBUaW1lb3V0IGluIDEwMHVzIHVuaXRzICovCiAJCVJFQURfUkVHKEh3UmVncy0+TWFjQW1paW1JbmRpY2F0b3IsIFZhbHVlUmVhZCk7CiAJCWlmICgtLVRpbWVvdXQgPT0gMCkgeworICAgICAgICAgICAgREJHX0VSUk9SKCJFWElUICVzIHdpdGggU1RBVFVTX0ZBSUxVUkUgMVxuIiwgX19GVU5DVElPTl9fKTsKKwogCQkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CiAJCX0KIAl9IHdoaWxlIChWYWx1ZVJlYWQgJiBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZKTsKQEAgLTI2NTUsNiArMzQyMSw4IEBACiAJCXVkZWxheSgxMDApOwkvKiBUaW1lb3V0IGluIDEwMHVzIHVuaXRzICovCiAJCVJFQURfUkVHKEh3UmVncy0+TWFjQW1paW1JbmRpY2F0b3IsIFZhbHVlUmVhZCk7CiAJCWlmICgtLVRpbWVvdXQgPT0gMCkgeworICAgICAgICAgICAgREJHX0VSUk9SKCJFWElUICVzIHdpdGggU1RBVFVTX0ZBSUxVUkUgMlxuIiwgX19GVU5DVElPTl9fKTsKKwogCQkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CiAJCX0KIAl9IHdoaWxlIChWYWx1ZVJlYWQgJiBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZKTsKQEAgLTI2NjMsNyArMzQzMSw3IEBACiAJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUZpZWxkLCAqcFZhbHVlKTsKIAkqcFZhbHVlICY9IDB4RkZGRjsJLyogZGF0YSBpcyBpbiB0aGUgbG93ZXIgMTYgYml0cyAqLwogCi0vKiAgREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX2Z1bmNfXyk7ICovCisJREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CiB9CkBAIC0yNjcyLDIyICszNDQwLDIxIEBACiAgKiBGdW5jdGlvbnMgdG8gb2J0YWluIHRoZSBDUkMgY29ycmVzcG9uZGluZyB0byB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3MuCiAgKiBUaGlzIGlzIGEgc3RhbmRhcmQgZXRoZXJuZXQgQ1JDIGluIHRoYXQgaXQgaXMgYSAzMi1iaXQsIHJlZmxlY3RlZCBDUkMgdXNpbmcKICAqIHRoZSBwb2x5bm9taWFsOgotICogICB4XjMyICsgeF4yNiArIHheMjMgKyB4XjIyICsgeF4xNiArIHheMTIgKyB4XjExICsgeF4xMCArIHheOCArIHheNyArIHheNSArIHheNCArIHheMiArIHheMS4KKyAqICAgeF4zMiArIHheMjYgKyB4XjIzICsgeF4yMiArIHheMTYgKyB4XjEyICsgeF4xMSArIHheMTAgKyB4XjggKyB4XjcgKyB4XjUKKyAqICAgICsgeF40ICsgeF4yICsgeF4xLgogICoKLSAqIEFmdGVyIHRoZSBDUkMgZm9yIHRoZSA2IGJ5dGVzIGlzIGdlbmVyYXRlZCAoYnV0IGJlZm9yZSB0aGUgdmFsdWUgaXMgY29tcGxlbWVudGVkKSwKLSAqIHdlIG11c3QgdGhlbiB0cmFuc3Bvc2UgdGhlIHZhbHVlIGFuZCByZXR1cm4gYml0cyAzMC0yMy4KLSAqCisgKiBBZnRlciB0aGUgQ1JDIGZvciB0aGUgNiBieXRlcyBpcyBnZW5lcmF0ZWQgKGJ1dCBiZWZvcmUgdGhlIHZhbHVlIGlzCisgKiBjb21wbGVtZW50ZWQpLCB3ZSBtdXN0IHRoZW4gdHJhbnNwb3NlIHRoZSB2YWx1ZSBhbmQgcmV0dXJuIGJpdHMgMzAtMjMuCiAgKi8KLXN0YXRpYyB1MzIgc3hnX2NyY190YWJsZVsyNTZdOwkvKiBUYWJsZSBvZiBDUkMncyBmb3IgYWxsIHBvc3NpYmxlIGJ5dGUgdmFsdWVzICovCitzdGF0aWMgdTMyIHN4Z19jcmNfdGFibGVbMjU2XTsvKiBUYWJsZSBvZiBDUkMncyBmb3IgYWxsIHBvc3NpYmxlIGJ5dGUgdmFsdWVzICovCitzdGF0aWMgdTMyIHN4Z19jcmNfaW5pdDsJLyogSXMgdGFibGUgaW5pdGlhbGl6ZWQgKi8KIAotLyoKLSAqICBDb250cnVjdCB0aGUgQ1JDMzIgdGFibGUKLSAqLworLyogQ29udHJ1Y3QgdGhlIENSQzMyIHRhYmxlICovCiBzdGF0aWMgdm9pZCBzeGdfbWNhc3RfaW5pdF9jcmMzMih2b2lkKQogewotCXUzMiBjOwkJCS8qICBDUkMgc2hpdCByZWcgICAgICAgICAgICAgICAgICovCi0JdTMyIGUgPSAwOwkJLyogIFBvbHkgWC1vciBwYXR0ZXJuICAgICAgICAgICAgKi8KLQlpbnQgaTsJCQkvKiAgY291bnRlciAgICAgICAgICAgICAgICAgICAgICAqLworCXUzMiBjOwkJCS8qICBDUkMgc2hpdCByZWcgKi8KKwl1MzIgZSA9IDA7CQkvKiAgUG9seSBYLW9yIHBhdHRlcm4gKi8KKwlpbnQgaTsJCQkvKiAgY291bnRlciAqLwogCWludCBrOwkJCS8qICBieXRlIGJlaW5nIHNoaWZ0ZWQgaW50byBjcmMgICovCiAKIAlzdGF0aWMgaW50IHBbXSA9IHsgMCwgMSwgMiwgNCwgNSwgNywgOCwgMTAsIDExLCAxMiwgMTYsIDIyLCAyMywgMjYgfTsKQEAgLTI3MDUsOCArMzQ3Miw2IEBACiAJfQogfQogCi0jaWYgWFhYVE9ETwotc3RhdGljIHUzMiBzeGdfY3JjX2luaXQ7CS8qIElzIHRhYmxlIGluaXRpYWxpemVkICovCiAvKgogICogIFJldHVybiB0aGUgTUFDIGhhc3QgYXMgZGVzY3JpYmVkIGFib3ZlLgogICovCkBAIC0yNzM3LDI1ICszNTAyLDMxIEBACiAKIHN0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbWFzayhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotCXN0cnVjdCBTWEdfVUNPREVfUkVHUyAqc3hnX3JlZ3MgPSBhZGFwdGVyLT5VY29kZVJlZ3M7CisJc3RydWN0IHN4Z191Y29kZV9yZWdzICpzeGdfcmVncyA9IGFkYXB0ZXItPlVjb2RlUmVnczsKIAotCURCR19FUlJPUigiJXMgRU5URVIgKCVzKSBtYWNvcHRzWyV4XSBtYXNrWyVsbHhdXG4iLCBfX2Z1bmNfXywKKwlEQkdfRVJST1IoIiVzIEVOVEVSICglcykgTWFjRmlsdGVyWyV4XSBtYXNrWyVsbHhdXG4iLCBfX0ZVTkNUSU9OX18sCiAJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCAodW5zaWduZWQgaW50KWFkYXB0ZXItPk1hY0ZpbHRlciwKIAkJICBhZGFwdGVyLT5NdWx0aWNhc3RNYXNrKTsKIAogCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0MpKSB7Ci0JCS8qIFR1cm4gb24gYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMuIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IgcHJvbWlzY3VvdXMKLQkJICogbW9kZSBhcyB3ZWxsIGFzIEFMTE1DQVNUIG1vZGUuICBJdCBzYXZlcyB0aGUgTWljcm9jb2RlIGZyb20gaGF2aW5nCi0JCSAqIHRvIGtlZXAgc3RhdGUgYWJvdXQgdGhlIE1BQyBjb25maWd1cmF0aW9uLgorCQkvKgorCQkgKiBUdXJuIG9uIGFsbCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBXZSBoYXZlIHRvIGRvIHRoaXMgZm9yCisJCSAqIHByb21pc2N1b3VzIG1vZGUgYXMgd2VsbCBhcyBBTExNQ0FTVCBtb2RlLiAgSXQgc2F2ZXMgdGhlCisJCSAqIE1pY3JvY29kZSBmcm9tIGhhdmluZyBrZWVwIHN0YXRlIGFib3V0IHRoZSBNQUMgY29uZmlndXJhdGlvbgogCQkgKi8KLS8qICAgICAgICAgICAgICBEQkdfRVJST1IoInN4ZzogJXMgbWFjb3B0cyA9IE1BQ19BTExNQ0FTVCB8IE1BQ19QUk9NSVNDXG4gICAgICBTTFVUIE1PREUhISFcbiIsX19mdW5jX18pOyAqLworCQkvKiBEQkdfRVJST1IoInN4ZzogJXMgTWFjRmlsdGVyID0gTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0NcbiBcCisJCSAqIAkJCQlTTFVUIE1PREUhISFcbiIsX19mdW5jX18pOworCQkgKi8KIAkJV1JJVEVfUkVHKHN4Z19yZWdzLT5NY2FzdExvdywgMHhGRkZGRkZGRiwgRkxVU0gpOwogCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0SGlnaCwgMHhGRkZGRkZGRiwgRkxVU0gpOwotLyogICAgICAgIERCR19FUlJPUigiJXMgKCVzKSBXUklURSB0byBzbGljX3JlZ3Mgc2xpY19tY2FzdGxvdyZoaWdoIDB4RkZGRkZGRkZcbiIsX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7ICovCisJCS8qIERCR19FUlJPUigiJXMgKCVzKSBXUklURSB0byBzbGljX3JlZ3Mgc2xpY19tY2FzdGxvdyZoaWdoIFwKKwkJICogMHhGRkZGRkZGRlxuIixfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJICovCiAKIAl9IGVsc2UgewotCQkvKiBDb21taXQgb3VyIG11bHRpY2FzdCBtYXN0IHRvIHRoZSBTTElDIGJ5IHdyaXRpbmcgdG8gdGhlIG11bHRpY2FzdAotCQkgKiBhZGRyZXNzIG1hc2sgcmVnaXN0ZXJzCisJCS8qCisJCSAqIENvbW1pdCBvdXIgbXVsdGljYXN0IG1hc3QgdG8gdGhlIFNMSUMgYnkgd3JpdGluZyB0byB0aGUKKwkJICogbXVsdGljYXN0IGFkZHJlc3MgbWFzayByZWdpc3RlcnMKIAkJICovCiAJCURCR19FUlJPUigiJXMgKCVzKSBXUklURSBtY2FzdGxvd1slbHhdIG1jYXN0aGlnaFslbHhdXG4iLAogCQkJICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLApAQCAtMjc3MSwzOCArMzU0Miw2IEBACiAJfQogfQogCi0vKgotICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCi0gKiAgTGluayBpdCBpbi4KLSAqLwotc3RhdGljIGludCBzeGdfbWNhc3RfYWRkX2xpc3Qoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgY2hhciAqYWRkcmVzcykKLXsKLQlwX21jYXN0X2FkZHJlc3NfdCBtY2FkZHIsIG1saXN0OwotCWJvb2wgZXF1YWxhZGRyOwotCi0JLyogQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCi0JbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwotCXdoaWxlIChtbGlzdCkgewotCQlFVEhFUl9FUV9BRERSKG1saXN0LT5hZGRyZXNzLCBhZGRyZXNzLCBlcXVhbGFkZHIpOwotCQlpZiAoZXF1YWxhZGRyKSB7Ci0JCQlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKLQkJfQotCQltbGlzdCA9IG1saXN0LT5uZXh0OwotCX0KLQotCS8qIERvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIEFsbG9jYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgaXQgKi8KLQltY2FkZHIgPSBrbWFsbG9jKHNpemVvZihtY2FzdF9hZGRyZXNzX3QpLCBHRlBfQVRPTUlDKTsKLQlpZiAobWNhZGRyID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0JbWVtY3B5KG1jYWRkci0+YWRkcmVzcywgYWRkcmVzcywgNik7Ci0KLQltY2FkZHItPm5leHQgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwotCWFkYXB0ZXItPm1jYXN0YWRkcnMgPSBtY2FkZHI7Ci0KLQlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKLX0KLQogc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9iaXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgY2hhciAqYWRkcmVzcykKIHsKIAl1bnNpZ25lZCBjaGFyIGNyY3BvbHk7CkBAIC0yODEwLDcgKzM1NDksOCBAQAogCS8qIEdldCB0aGUgQ1JDIHBvbHlub21pYWwgZm9yIHRoZSBtYWMgYWRkcmVzcyAqLwogCWNyY3BvbHkgPSBzeGdfbWNhc3RfZ2V0X21hY19oYXNoKGFkZHJlc3MpOwogCi0JLyogV2Ugb25seSBoYXZlIHNwYWNlIG9uIHRoZSBTTElDIGZvciA2NCBlbnRyaWVzLiAgTG9wCisJLyoKKwkgKiBXZSBvbmx5IGhhdmUgc3BhY2Ugb24gdGhlIFNMSUMgZm9yIDY0IGVudHJpZXMuICBMb3AKIAkgKiBvZmYgdGhlIHRvcCB0d28gYml0cy4gKDJeNiA9IDY0KQogCSAqLwogCWNyY3BvbHkgJj0gMHgzRjsKQEAgLTI4MTksNzYgKzM1NTksMTE5IEBACiAJYWRhcHRlci0+TXVsdGljYXN0TWFzayB8PSAodTY0KSAxIDw8IGNyY3BvbHk7CiB9CiAKLXN0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbGlzdChwX25ldF9kZXZpY2UgZGV2KQorLyoKKyAqICAgRnVuY3Rpb24gdGFrZXMgTUFDIGFkZHJlc3NlcyBmcm9tIGRldl9tY19saXN0IGFuZCBnZW5lcmF0ZXMgdGhlIE1hc2sKKyAqLworCitzdGF0aWMgdm9pZCBzeGdfc2V0X21jYXN0X2FkZHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKyAgICAgICAgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisgICAgICAgIGludCBpOworCisgICAgICAgIGlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX01DQVNUKSkgeworICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN4Z19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsbWNsaXN0LT5kYV9hZGRyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3hnX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7Ci0JaW50IGk7Ci0JY2hhciAqYWRkcmVzc2VzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKLQlpbnQgbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OwogCiAJQVNTRVJUKGFkYXB0ZXIpOworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCWFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfUFJPTUlTQzsKKyAgICAgICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKQorICAgICAgICAgICAgICAgIGFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfTUNBU1Q7CisgICAgICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorICAgICAgICAgICAgICAgIGFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfQUxMTUNBU1Q7CiAKLQlmb3IgKGkgPSAxOyBpIDw9IG1jX2NvdW50OyBpKyspIHsKLQkJYWRkcmVzc2VzID0gKGNoYXIgKikmbWNfbGlzdC0+ZG1pX2FkZHI7Ci0JCWlmIChtY19saXN0LT5kbWlfYWRkcmxlbiA9PSA2KSB7Ci0JCQlzdGF0dXMgPSBzeGdfbWNhc3RfYWRkX2xpc3QoYWRhcHRlciwgYWRkcmVzc2VzKTsKLQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlzeGdfbWNhc3Rfc2V0X2JpdChhZGFwdGVyLCBhZGRyZXNzZXMpOwotCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKLQl9Ci0KLQlEQkdfRVJST1IoIiVzIGEtPmRldmZsYWdzX3ByZXZbJXhdIGRldi0+ZmxhZ3NbJXhdIHN0YXR1c1sleF1cbiIsCi0JCSAgX19mdW5jX18sIGFkYXB0ZXItPmRldmZsYWdzX3ByZXYsIGRldi0+ZmxhZ3MsIHN0YXR1cyk7Ci0JaWYgKGFkYXB0ZXItPmRldmZsYWdzX3ByZXYgIT0gZGV2LT5mbGFncykgewotCQlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOwotCQlpZiAoZGV2LT5mbGFncykgewotCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSB7Ci0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7Ci0JCQl9Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfUFJPTUlTQzsKLQkJCX0KLQkJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7Ci0JCQl9Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKLQkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKLQkJCX0KLQkJfQotCQlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKLQkJREJHX0VSUk9SKCIlcyBjYWxsIHN4Z19jb25maWdfc2V0IGFkYXB0ZXItPm1hY29wdHNbJXhdXG4iLAotCQkJICBfX2Z1bmNfXywgYWRhcHRlci0+bWFjb3B0cyk7Ci0JCXN4Z19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOwotCX0gZWxzZSB7Ci0JCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXN4Z19tY2FzdF9zZXRfbWFzayhhZGFwdGVyKTsKLQkJfQotCX0KLQlyZXR1cm47CisJLy9YWFggaGFuZGxlIG90aGVyIGZsYWdzIGFzIHdlbGwKKwlzeGdfc2V0X21jYXN0X2FkZHIoYWRhcHRlcik7CiB9Ci0jZW5kaWYKIAotc3RhdGljIHZvaWQgc3hnX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3ZvaWQgc3hnX2ZyZWVfc2dsX2J1ZmZlcnMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLSNpZiBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwotLyogICAgICBpZiAoYWRhcHRlci0+UmVncykgeyAqLwotLyogICAgICAgICAgICAgIGlvdW5tYXAoYWRhcHRlci0+UmVncyk7ICovCi0vKiAgICAgIH0gKi8KLS8qICAgICAgYWRhcHRlci0+c2xpY19yZWdzID0gTlVMTDsgKi8KLSNlbmRpZgorICAgICAgICBzdHJ1Y3QgbGlzdF9lbnRyeSAgICAgICAgICAgICAgICpwbGU7CisgICAgICAgIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgICAgICAgKlNnbDsKKworICAgICAgICB3aGlsZSghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKSkpIHsKKyAJCXBsZSA9IFJlbW92ZUhlYWRMaXN0KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKKyAJCVNnbCA9IGNvbnRhaW5lcl9vZihwbGUsIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIsIEFsbExpc3QpOworIAkJa2ZyZWUoU2dsKTsKKyAgICAgICAgICAgICAgICBhZGFwdGVyLT5BbGxTZ2xCdWZmZXJDb3VudC0tOworICAgICAgICB9CiB9CiAKLSNpZiBYWFhUT0RPCit2b2lkIHN4Z19mcmVlX3JjdmJsb2NrcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCXUzMgkJCQlpOworICAgICAgIAl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0ZW1wX1JjdkJsb2NrOworICAgICAgIAlzdHJ1Y3QgbGlzdF9lbnRyeSAgICAgICAgICAgICAgICpwbGU7CisgICAgICAgCXN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciAgICAgICAgKlJjdkJsb2NrSGRyOworCXN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkcgkqUmN2RGF0YUJ1ZmZlckhkcjsKKyAgICAgICAgQVNTRVJUKChhZGFwdGVyLT5zdGF0ZSA9PSBTWEdfU1RBVEVfSU5JVElBTElaSU5HKSB8fAorICAgICAgICAgICAgICAgICAgICAoYWRhcHRlci0+c3RhdGUgPT0gU1hHX1NUQVRFX0hBTFRJTkcpKTsKKyAgICAgICAgd2hpbGUoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKSkpIHsKKworICAgICAgICAgICAgICAgICBwbGUgPSBSZW1vdmVIZWFkTGlzdCgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKTsKKyAgICAgICAgICAgICAgICAgUmN2QmxvY2tIZHIgPSBjb250YWluZXJfb2YocGxlLCBzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIsIEFsbExpc3QpOworCisgICAgICAgICAgICAgICAgaWYoUmN2QmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX1JjdkJsb2NrID0gUmN2QmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrLCB0ZW1wX1JjdkJsb2NrICs9IFNYR19SQ1ZfREFUQV9IRFJfU0laRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSY3ZEYXRhQnVmZmVySGRyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopdGVtcF9SY3ZCbG9jazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1hHX0ZSRUVfUkNWX1BBQ0tFVChSY3ZEYXRhQnVmZmVySGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1hHX1JDVl9CTE9DS19TSVpFKFNYR19SQ1ZfREFUQV9IRFJfU0laRSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJjdkJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmN2QmxvY2tIZHItPlBoeXNpY2FsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudC0tOworCX0KKwlBU1NFUlQoYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCA9PSAwKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRnJSQmxrIiwKKwkJCWFkYXB0ZXIsIDAsIDAsIDApOworfQordm9pZCBzeGdfZnJlZV9tY2FzdF9hZGRycyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCXN0cnVjdCBzeGdfbXVsdGljYXN0X2FkZHJlc3MgICAgKmFkZHJlc3M7CisgICAgICAgIHdoaWxlKGFkYXB0ZXItPk11bHRpY2FzdEFkZHJzKSB7CisgICAgICAgICAgICAgICAgYWRkcmVzcyA9IGFkYXB0ZXItPk11bHRpY2FzdEFkZHJzOworICAgICAgICAgICAgICAgIGFkYXB0ZXItPk11bHRpY2FzdEFkZHJzID0gYWRkcmVzcy0+TmV4dDsKKwkJa2ZyZWUoYWRkcmVzcyk7CisgICAgICAgICB9CisKKyAgICAgICAgYWRhcHRlci0+TXVsdGljYXN0TWFzaz0gMDsKK30KKwordm9pZCBzeGdfdW5tYXBfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaWYoYWRhcHRlci0+SHdSZWdzKSB7CisgICAgICAgIAlpb3VubWFwKCh2b2lkICopYWRhcHRlci0+SHdSZWdzKTsKKyAgICAgICAgIH0KKyAgICAgICAgaWYoYWRhcHRlci0+VWNvZGVSZWdzKSB7CisJCWlvdW5tYXAoKHZvaWQgKilhZGFwdGVyLT5VY29kZVJlZ3MpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQgPT0gMCk7CisgICAgICAgIFNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGclJCbGsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlciwgMCwgMCwgMCk7Cit9CisKKworCiAvKgotICogU3hnRnJlZVJlc291cmNlcyAtIEZyZWUgZXZlcnl0aGluZyBhbGxvY2F0ZWQgaW4gU3hnQWxsb2NhdGVSZXNvdXJjZXMKKyAqIHN4Z19mcmVlX3Jlc291cmNlcyAtIEZyZWUgZXZlcnl0aGluZyBhbGxvY2F0ZWQgaW4gU3hnQWxsb2NhdGVSZXNvdXJjZXMKICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCkBAIC0yODk2LDk0ICszNjc5LDc2IEBACiAgKiBSZXR1cm4KICAqCW5vbmUKICAqLwotdm9pZCBTeGdGcmVlUmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit2b2lkIHN4Z19mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewogCXUzMiBSc3NJZHMsIElzckNvdW50OwotCVBUQ1BfT0JKRUNUIFRjcE9iamVjdDsKLQl1MzIgaTsKLQlCT09MRUFOIFRpbWVyQ2FuY2VsbGVkOwotCi0JU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRnJlZVJlcyIsCi0JCSAgYWRhcHRlciwgYWRhcHRlci0+TWF4VGNicywgMCwgMCk7Ci0KIAlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKLQlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCUlzckNvdW50ID0gYWRhcHRlci0+bXNpX2VuYWJsZWQgPyBSc3NJZHMgOiAxOwogCiAJaWYgKGFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPT0gRkFMU0UpIHsKLQkJLyogTm8gYWxsb2NhdGlvbnMgaGF2ZSBiZWVuIG1hZGUsIGluY2x1ZGluZyBzcGlubG9ja3MsICovCi0JCS8qIG9yIGxpc3RoZWFkIGluaXRpYWxpemF0aW9ucy4gIFJldHVybi4gKi8KKwkJLyoKKwkJICogTm8gYWxsb2NhdGlvbnMgaGF2ZSBiZWVuIG1hZGUsIGluY2x1ZGluZyBzcGlubG9ja3MsCisJCSAqIG9yIGxpc3RoZWFkIGluaXRpYWxpemF0aW9ucy4gIFJldHVybi4KKwkJICovCiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKSkpIHsKLQkJU3hnRnJlZVJjdkJsb2NrcyhhZGFwdGVyKTsKKwkJc3hnX2ZyZWVfcmN2YmxvY2tzKGFkYXB0ZXIpOwogCX0KIAlpZiAoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsU2dsQnVmZmVycykpKSB7Ci0JCVN4Z0ZyZWVTZ2xCdWZmZXJzKGFkYXB0ZXIpOworCQlzeGdfZnJlZV9zZ2xfYnVmZmVycyhhZGFwdGVyKTsKIAl9Ci0JLyogRnJlZSBldmVudCBxdWV1ZXMuICovCi0JaWYgKGFkYXB0ZXItPkV2ZW50UmluZ3MpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgU1hHX0VWRU5UX1JJTkcpICogUnNzSWRzLAotCQkJCSAgICBhZGFwdGVyLT5FdmVudFJpbmdzLCBhZGFwdGVyLT5QRXZlbnRSaW5ncyk7Ci0JfQotCWlmIChhZGFwdGVyLT5Jc3IpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJICAgIHNpemVvZih1MzIpICogSXNyQ291bnQsCi0JCQkJICAgIGFkYXB0ZXItPklzciwgYWRhcHRlci0+UElzcik7Ci0JfQorCiAJaWYgKGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCiAJCQkJICAgIHNpemVvZih1MzIpLAogCQkJCSAgICBhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4LAogCQkJCSAgICBhZGFwdGVyLT5QWG10UmluZ1plcm9JbmRleCk7CiAJfQotCWlmIChhZGFwdGVyLT5JbmRpcmVjdGlvblRhYmxlKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAotCQkJCSAgICBTWEdfTUFYX1JTU19UQUJMRV9TSVpFLAotCQkJCSAgICBhZGFwdGVyLT5JbmRpcmVjdGlvblRhYmxlLAotCQkJCSAgICBhZGFwdGVyLT5QSW5kaXJlY3Rpb25UYWJsZSk7CisgICAgICAgIGlmIChhZGFwdGVyLT5Jc3IpIHsKKyAgICAgICAgICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1MzIpICogSXNyQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5Jc3IsIGFkYXB0ZXItPlBJc3IpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkYXB0ZXItPkV2ZW50UmluZ3MpIHsKKyAgICAgICAgICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcpICogUnNzSWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+RXZlbnRSaW5ncywgYWRhcHRlci0+UEV2ZW50UmluZ3MpOworICAgICAgICB9CisgICAgICAgIGlmIChhZGFwdGVyLT5SY3ZSaW5ncykgeworICAgICAgICAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHN4Z19yY3ZfcmluZykgKiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5SY3ZSaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+UFJjdlJpbmdzKTsKKyAgICAgICAgICAgICAgICBhZGFwdGVyLT5SY3ZSaW5ncyA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZihhZGFwdGVyLT5YbXRSaW5ncykgeworICAgICAgICAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHN4Z194bXRfcmluZykgKiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5YbXRSaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+UFhtdFJpbmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPlhtdFJpbmdzID0gTlVMTDsKKyAgICAgICAgfQorCisJaWYgKGFkYXB0ZXItPnVjb2RlX3N0YXRzKSB7CisJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LAorCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzKSwKKwkJCQkgYWRhcHRlci0+cHVjb2RlX3N0YXRzLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlhZGFwdGVyLT51Y29kZV9zdGF0cyA9IE5VTEw7CiAJfQogCi0JU1hHX0ZSRUVfUEFDS0VUX1BPT0woYWRhcHRlci0+UGFja2V0UG9vbEhhbmRsZSk7Ci0JU1hHX0ZSRUVfQlVGRkVSX1BPT0woYWRhcHRlci0+QnVmZmVyUG9vbEhhbmRsZSk7CiAKIAkvKiBVbm1hcCByZWdpc3RlciBzcGFjZXMgKi8KLQlTeGdVbm1hcFJlc291cmNlcyhhZGFwdGVyKTsKKwlzeGdfdW5tYXBfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCi0JLyogRGVyZWdpc3RlciBETUEgKi8KLQlpZiAoYWRhcHRlci0+RG1hSGFuZGxlKSB7Ci0JCVNYR19ERVJFR0lTVEVSX0RNQShhZGFwdGVyLT5EbWFIYW5kbGUpOwotCX0KLQkvKiBEZXJlZ2lzdGVyIGludGVycnVwdCAqLwotCVN4Z0RlcmVnaXN0ZXJJbnRlcnJ1cHQoYWRhcHRlcik7Ci0KLQkvKiBQb3NzaWJseSBmcmVlIHN5c3RlbSBpbmZvICg1LjIgb25seSkgKi8KLQlTWEdfUkVMRUFTRV9TWVNURU1fSU5GTyhhZGFwdGVyKTsKLQotCVN4Z0RpYWdGcmVlUmVzb3VyY2VzKGFkYXB0ZXIpOwotCi0JU3hnRnJlZU1DYXN0QWRkcnMoYWRhcHRlcik7Ci0KLQlpZiAoU1hHX1RJTUVSX0FMTE9DQVRFRChhZGFwdGVyLT5SZXNldFRpbWVyKSkgewotCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPlJlc2V0VGltZXIsIFRpbWVyQ2FuY2VsbGVkKTsKLQkJU1hHX0ZSRUVfVElNRVIoYWRhcHRlci0+UmVzZXRUaW1lcik7Ci0JfQotCWlmIChTWEdfVElNRVJfQUxMT0NBVEVEKGFkYXB0ZXItPlJzc1RpbWVyKSkgewotCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPlJzc1RpbWVyLCBUaW1lckNhbmNlbGxlZCk7Ci0JCVNYR19GUkVFX1RJTUVSKGFkYXB0ZXItPlJzc1RpbWVyKTsKLQl9Ci0JaWYgKFNYR19USU1FUl9BTExPQ0FURUQoYWRhcHRlci0+T2ZmbG9hZFRpbWVyKSkgewotCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPk9mZmxvYWRUaW1lciwgVGltZXJDYW5jZWxsZWQpOwotCQlTWEdfRlJFRV9USU1FUihhZGFwdGVyLT5PZmZsb2FkVGltZXIpOwotCX0KKwlzeGdfZnJlZV9tY2FzdF9hZGRycyhhZGFwdGVyKTsKIAogCWFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPSBGQUxTRTsKIAotCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGcmVlUmVzIiwKLQkJICBhZGFwdGVyLCBhZGFwdGVyLT5NYXhUY2JzLCAwLCAwKTsKIH0KLSNlbmRpZgogCiAvKgogICogc3hnX2FsbG9jYXRlX2NvbXBsZXRlIC0KQEAgLTMwMDAsMzEgKzM3NjUsMzQgQEAKICAqIFJldHVybgogICoJTm9uZS4KICAqLwotc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJCSAgdm9pZCAqVmlydHVhbEFkZHJlc3MsCiAJCQkJICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKLQkJCQkgIHUzMiBMZW5ndGgsIGVudW0gU1hHX0JVRkZFUl9UWVBFIENvbnRleHQpCisJCQkJICB1MzIgTGVuZ3RoLCBlbnVtIHN4Z19idWZmZXJfdHlwZSBDb250ZXh0KQogeworCWludCBzdGF0dXMgPSAwOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsbG9jQ21wIiwKIAkJICBhZGFwdGVyLCBWaXJ0dWFsQWRkcmVzcywgTGVuZ3RoLCBDb250ZXh0KTsKLQlBU1NFUlQoYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nKTsKLQktLWFkYXB0ZXItPkFsbG9jYXRpb25zUGVuZGluZzsKKwlBU1NFUlQoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMpKTsKKwlhdG9taWNfZGVjKCZhZGFwdGVyLT5wZW5kaW5nX2FsbG9jYXRpb25zKTsKIAogCXN3aXRjaCAoQ29udGV4dCkgewogCiAJY2FzZSBTWEdfQlVGRkVSX1RZUEVfUkNWOgotCQlzeGdfYWxsb2NhdGVfcmN2YmxvY2tfY29tcGxldGUoYWRhcHRlciwKKwkJc3RhdHVzID0gc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKGFkYXB0ZXIsCiAJCQkJCSAgICAgICBWaXJ0dWFsQWRkcmVzcywKIAkJCQkJICAgICAgIFBoeXNpY2FsQWRkcmVzcywgTGVuZ3RoKTsKIAkJYnJlYWs7CiAJY2FzZSBTWEdfQlVGRkVSX1RZUEVfU0dMOgotCQlzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShhZGFwdGVyLCAoc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiopCisJCXN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlKGFkYXB0ZXIsIChzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyICopCiAJCQkJCQkgVmlydHVhbEFkZHJlc3MsCiAJCQkJCQkgUGh5c2ljYWxBZGRyZXNzLCBMZW5ndGgpOwogCQlicmVhazsKIAl9CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFsb2NDbXAiLAogCQkgIGFkYXB0ZXIsIFZpcnR1YWxBZGRyZXNzLCBMZW5ndGgsIENvbnRleHQpOworCisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKQEAgLTMwNDAsNyArMzgwOCw3IEBACiAgKglpbnQKICAqLwogc3RhdGljIGludCBzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAotCQkJCSAgICAgIHUzMiBTaXplLCBlbnVtIFNYR19CVUZGRVJfVFlQRSBCdWZmZXJUeXBlKQorCQkJCSAgICAgIHUzMiBTaXplLCBlbnVtIHN4Z19idWZmZXJfdHlwZSBCdWZmZXJUeXBlKQogewogCWludCBzdGF0dXM7CiAJdm9pZCAqQnVmZmVyOwpAQCAtMzA0OCwzOSArMzgxNiw0MCBAQAogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxsb2NNZW0iLAogCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIDApOwotCS8qIEdyYWIgdGhlIGFkYXB0ZXIgbG9jayBhbmQgY2hlY2sgdGhlIHN0YXRlLiAqLwotCS8qIElmIHdlJ3JlIGluIGFueXRoaW5nIG90aGVyIHRoYW4gSU5JVElBTElaSU5HIG9yICovCi0JLyogUlVOTklORyBzdGF0ZSwgZmFpbC4gIFRoaXMgaXMgdG8gcHJldmVudCAqLwotCS8qIGFsbG9jYXRpb25zIGluIGFuIGltcHJvcGVyIGRyaXZlciBzdGF0ZSAqLwotCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCS8qCisJICogR3JhYiB0aGUgYWRhcHRlciBsb2NrIGFuZCBjaGVjayB0aGUgc3RhdGUuIElmIHdlJ3JlIGluIGFueXRoaW5nIG90aGVyCisJICogdGhhbiBJTklUSUFMSVpJTkcgb3IgUlVOTklORyBzdGF0ZSwgZmFpbC4gIFRoaXMgaXMgdG8gcHJldmVudAorCSAqIGFsbG9jYXRpb25zIGluIGFuIGltcHJvcGVyIGRyaXZlciBzdGF0ZQorCSAqLwogCi0JLyogSW5jcmVtZW50IHRoZSBBbGxvY2F0aW9uc1BlbmRpbmcgY291bnQgd2hpbGUgaG9sZGluZyAqLwotCS8qIHRoZSBsb2NrLiAgUGF1c2UgcHJvY2Vzc2luZyByZWxpZXMgb24gdGhpcyAqLwotCSsrYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisgCWF0b21pY19pbmMoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMpOwogCi0JLyogQXQgaW5pdGlhbGl6YXRpb24gdGltZSBhbGxvY2F0ZSByZXNvdXJjZXMgc3luY2hyb25vdXNseS4gKi8KLQlCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFNpemUsICZwQnVmZmVyKTsKKwlpZihCdWZmZXJUeXBlICE9IFNYR19CVUZGRVJfVFlQRV9TR0wpCisJCUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgU2l6ZSwgJnBCdWZmZXIpOworCWVsc2UgeworCQlCdWZmZXIgPSBremFsbG9jKFNpemUsIEdGUF9BVE9NSUMpOworCQlwQnVmZmVyID0gKGRtYV9hZGRyX3QpTlVMTDsKKwl9CiAJaWYgKEJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOwotCQkvKiBEZWNyZW1lbnQgdGhlIEFsbG9jYXRpb25zUGVuZGluZyBjb3VudCB3aGlsZSBob2xkaW5nICovCi0JCS8qIHRoZSBsb2NrLiAgUGF1c2UgcHJvY2Vzc2luZyByZWxpZXMgb24gdGhpcyAqLwotCQktLWFkYXB0ZXItPkFsbG9jYXRpb25zUGVuZGluZzsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJLyoKKwkJICogRGVjcmVtZW50IHRoZSBBbGxvY2F0aW9uc1BlbmRpbmcgY291bnQgd2hpbGUgaG9sZGluZworCQkgKiB0aGUgbG9jay4gIFBhdXNlIHByb2Nlc3NpbmcgcmVsaWVzIG9uIHRoaXMKKwkJICovCisgCQlhdG9taWNfZGVjKCZhZGFwdGVyLT5wZW5kaW5nX2FsbG9jYXRpb25zKTsKIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxjTWVtRjEiLAogCQkJICBhZGFwdGVyLCBTaXplLCBCdWZmZXJUeXBlLCAwKTsKIAkJcmV0dXJuIChTVEFUVVNfUkVTT1VSQ0VTKTsKIAl9Ci0Jc3hnX2FsbG9jYXRlX2NvbXBsZXRlKGFkYXB0ZXIsIEJ1ZmZlciwgcEJ1ZmZlciwgU2l6ZSwgQnVmZmVyVHlwZSk7Ci0Jc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJc3RhdHVzID0gc3hnX2FsbG9jYXRlX2NvbXBsZXRlKGFkYXB0ZXIsIEJ1ZmZlciwgcEJ1ZmZlciwgU2l6ZSwgQnVmZmVyVHlwZSk7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxvY01lbSIsCiAJCSAgYWRhcHRlciwgU2l6ZSwgQnVmZmVyVHlwZSwgc3RhdHVzKTsKLQlyZXR1cm4gKHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKLSAqIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZSAtIENvbXBsZXRlIGEgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGFsbG9jYXRpb24KKyAqIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZSAtIENvbXBsZXRlIGEgcmVjZWl2ZSBkZXNjcmlwdG9yCisgKiAJCQkJCWJsb2NrIGFsbG9jYXRpb24KICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKQEAgLTMwODksOSArMzg1OCw4IEBACiAgKglMZW5ndGgJCQkJLSBNZW1vcnkgbGVuZ3RoCiAgKgogICogUmV0dXJuCi0gKgogICovCi1zdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfcmN2YmxvY2tfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKK3N0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkJCSAgIHZvaWQgKlJjdkJsb2NrLAogCQkJCQkgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKIAkJCQkJICAgdTMyIExlbmd0aCkKQEAgLTMwOTksMTEgKzM4NjcsMTEgQEAKIAl1MzIgaTsKIAl1MzIgQnVmZmVyU2l6ZSA9IGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplOwogCXU2NCBQYWRkcjsKLQlzdHJ1Y3QgU1hHX1JDVl9CTE9DS19IRFIgKlJjdkJsb2NrSGRyOwotCXVuc2lnbmVkIGNoYXIgKlJjdkRhdGFCdWZmZXI7Ci0Jc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSICpSY3ZEYXRhQnVmZmVySGRyOwotCXN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgKlJjdkRlc2NyaXB0b3JCbG9jazsKLQlzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiAqUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCXZvaWQgKnRlbXBfUmN2QmxvY2s7CisJc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyICpSY3ZCbG9ja0hkcjsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKlJjdkRhdGFCdWZmZXJIZHI7CisJc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayAqUmN2RGVzY3JpcHRvckJsb2NrOworCXN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyICpSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbFJjdkJsayIsCiAJCSAgYWRhcHRlciwgUmN2QmxvY2ssIExlbmd0aCwgMCk7CkBAIC0zMTEzLDQyICszODgxLDMzIEBACiAJbWVtc2V0KFJjdkJsb2NrLCAwLCBMZW5ndGgpOwogCUFTU0VSVCgoQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUpIHx8CiAJICAgICAgIChCdWZmZXJTaXplID09IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUpKTsKLQlBU1NFUlQoTGVuZ3RoID09IFNYR19SQ1ZfQkxPQ0tfU0laRShCdWZmZXJTaXplKSk7Ci0JLyogRmlyc3QsIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lZCBwb29sIG9mIHJlY2VpdmUgZGF0YSAqLwotCS8qIGJ1ZmZlcnMuICBUaGlzIGluaXRpYWxpemF0aW9uIHJlcXVpcmVzIE5CTC9OQi9NREwgYWxsb2NhdGlvbnMsICovCi0JLyogSWYgYW55IG9mIHRoZW0gZmFpbCwgZnJlZSB0aGUgYmxvY2sgYW5kIHJldHVybiB3aXRob3V0ICovCi0JLyogcXVldWVpbmcgdGhlIHNoYXJlZCBtZW1vcnkgKi8KLQlSY3ZEYXRhQnVmZmVyID0gUmN2QmxvY2s7Ci0jaWYgMAotCWZvciAoaSA9IDAsIFBhZGRyID0gKlBoeXNpY2FsQWRkcmVzczsKLQkgICAgIGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKLQkgICAgIGkrKywgUGFkZHIuTG93UGFydCArPSBCdWZmZXJTaXplLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpCi0jZW5kaWYKLQkJZm9yIChpID0gMCwgUGFkZHIgPSBQaHlzaWNhbEFkZHJlc3M7Ci0JCSAgICAgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOwotCQkgICAgIGkrKywgUGFkZHIgKz0gQnVmZmVyU2l6ZSwgUmN2RGF0YUJ1ZmZlciArPSBCdWZmZXJTaXplKSB7Ci0JCQkvKiAqLwotCQkJUmN2RGF0YUJ1ZmZlckhkciA9Ci0JCQkgICAgKHN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiopIChSY3ZEYXRhQnVmZmVyICsKLQkJCQkJCQlTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQKLQkJCQkJCQkoQnVmZmVyU2l6ZSkpOwotCQkJUmN2RGF0YUJ1ZmZlckhkci0+VmlydHVhbEFkZHJlc3MgPSBSY3ZEYXRhQnVmZmVyOwotCQkJUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzID0gUGFkZHI7Ci0JCQlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfVVBTVFJFQU07CS8qIEZvciBGUkVFIG1hY3JvIGFzc2VydGlvbiAqLwotCQkJUmN2RGF0YUJ1ZmZlckhkci0+U2l6ZSA9Ci0JCQkgICAgU1hHX1JDVl9CVUZGRVJfREFUQV9TSVpFKEJ1ZmZlclNpemUpOworCUFTU0VSVChMZW5ndGggPT0gU1hHX1JDVl9CTE9DS19TSVpFKFNYR19SQ1ZfREFUQV9IRFJfU0laRSkpOworCS8qCisJICogRmlyc3QsIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lZCBwb29sIG9mIHJlY2VpdmUgZGF0YSBidWZmZXJzLgorCSAqIFRoaXMgaW5pdGlhbGl6YXRpb24gcmVxdWlyZXMgTkJML05CL01ETCBhbGxvY2F0aW9ucywgaWYgYW55IG9mIHRoZW0KKwkgKiBmYWlsLCBmcmVlIHRoZSBibG9jayBhbmQgcmV0dXJuIHdpdGhvdXQgcXVldWVpbmcgdGhlIHNoYXJlZCBtZW1vcnkKKwkgKi8KKwkvL1JjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKwl0ZW1wX1JjdkJsb2NrID0gUmN2QmxvY2s7CisJZm9yIChpID0gMDsgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworCQkgaSsrLCB0ZW1wX1JjdkJsb2NrICs9IFNYR19SQ1ZfREFUQV9IRFJfU0laRSkgeworCQlSY3ZEYXRhQnVmZmVySGRyID0gKHN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAqKQorCQkJCQl0ZW1wX1JjdkJsb2NrOworCQkvKiBGb3IgRlJFRSBtYWNybyBhc3NlcnRpb24gKi8KKwkJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX1VQU1RSRUFNOworCQlTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyLCBCdWZmZXJTaXplKTsKKwkJaWYgKFJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQgPT0gTlVMTCkKKwkJCWdvdG8gZmFpbDsKIAotCQkJU1hHX0FMTE9DQVRFX1JDVl9QQUNLRVQoYWRhcHRlciwgUmN2RGF0YUJ1ZmZlckhkcik7Ci0JCQlpZiAoUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCA9PSBOVUxMKQotCQkJCWdvdG8gZmFpbDsKKwl9CiAKLQkJfQorCS8qCisJICogUGxhY2UgdGhpcyBlbnRpcmUgYmxvY2sgb2YgbWVtb3J5IG9uIHRoZSBBbGxSY3ZCbG9ja3MgcXVldWUgc28gaXQKKwkgKiBjYW4gYmUgZnJlZSBsYXRlcgorCSAqLwogCi0JLyogUGxhY2UgdGhpcyBlbnRpcmUgYmxvY2sgb2YgbWVtb3J5IG9uIHRoZSBBbGxSY3ZCbG9ja3MgcXVldWUgc28gaXQgY2FuIGJlICovCi0JLyogZnJlZSBsYXRlciAqLwotCVJjdkJsb2NrSGRyID0KLQkgICAgKHN0cnVjdCBTWEdfUkNWX0JMT0NLX0hEUiopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKLQkJCQkgIFNYR19SQ1ZfQkxPQ0tfSERSX09GRlNFVChCdWZmZXJTaXplKSk7CisJUmN2QmxvY2tIZHIgPSAoc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyICopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKKwkJCVNYR19SQ1ZfQkxPQ0tfSERSX09GRlNFVChTWEdfUkNWX0RBVEFfSERSX1NJWkUpKTsKIAlSY3ZCbG9ja0hkci0+VmlydHVhbEFkZHJlc3MgPSBSY3ZCbG9jazsKIAlSY3ZCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzID0gUGh5c2ljYWxBZGRyZXNzOwogCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwpAQCAtMzE1NiwxNCArMzkxNSwxNSBAQAogCUluc2VydFRhaWxMaXN0KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MsICZSY3ZCbG9ja0hkci0+QWxsTGlzdCk7CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKIAotCS8qIE5vdyBmcmVlIHRoZSBjb250YWluZWQgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMgdGhhdCB3ZSBpbml0aWFsaXplZCBhYm92ZSAqLwotCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKwkvKiBOb3cgZnJlZSB0aGUgY29udGFpbmVkIHJlY2VpdmUgZGF0YSBidWZmZXJzIHRoYXQgd2UKKwkgKiBpbml0aWFsaXplZCBhYm92ZSAqLworCXRlbXBfUmN2QmxvY2sgPSBSY3ZCbG9jazsKIAlmb3IgKGkgPSAwLCBQYWRkciA9IFBoeXNpY2FsQWRkcmVzczsKIAkgICAgIGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKLQkgICAgIGkrKywgUGFkZHIgKz0gQnVmZmVyU2l6ZSwgUmN2RGF0YUJ1ZmZlciArPSBCdWZmZXJTaXplKSB7Ci0JCVJjdkRhdGFCdWZmZXJIZHIgPSAoc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKikgKFJjdkRhdGFCdWZmZXIgKwotCQkJCQkJCSAgICAgICBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQKLQkJCQkJCQkgICAgICAgKEJ1ZmZlclNpemUpKTsKKwkgICAgIGkrKywgUGFkZHIgKz0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFLAorCSAgICAgdGVtcF9SY3ZCbG9jayArPSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpIHsKKwkJUmN2RGF0YUJ1ZmZlckhkciA9CisJCQkoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopdGVtcF9SY3ZCbG9jazsKIAkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CiAJCVNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKIAkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKQEAgLTMxNzEsMTMgKzM5MzEsMTMgQEAKIAogCS8qIExvY2F0ZSB0aGUgZGVzY3JpcHRvciBibG9jayBhbmQgcHV0IGl0IG9uIGEgc2VwYXJhdGUgZnJlZSBxdWV1ZSAqLwogCVJjdkRlc2NyaXB0b3JCbG9jayA9Ci0JICAgIChzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCSAgICAoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayAqKSAoKHVuc2lnbmVkIGNoYXIgKilSY3ZCbG9jayArCiAJCQkJCSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfT0ZGU0VUCi0JCQkJCSAoQnVmZmVyU2l6ZSkpOworCQkJCQkgKFNYR19SQ1ZfREFUQV9IRFJfU0laRSkpOwogCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9Ci0JICAgIChzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKKwkgICAgKHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyICopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKIAkJCQkJICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSX09GRlNFVAotCQkJCQkgICAgIChCdWZmZXJTaXplKSk7CisJCQkJCSAgICAgKFNYR19SQ1ZfREFUQV9IRFJfU0laRSkpOwogCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+VmlydHVhbEFkZHJlc3MgPSBSY3ZEZXNjcmlwdG9yQmxvY2s7CiAJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBQYWRkcjsKIAlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKQEAgLTMxODUsMTcgKzM5NDUsMTUgQEAKIAlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbFJCbGsiLAogCQkgIGFkYXB0ZXIsIFJjdkJsb2NrLCBMZW5ndGgsIDApOwotCXJldHVybjsKLSAgICAgIGZhaWw6CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworZmFpbDoKIAkvKiBGcmVlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCiAJaWYgKFJjdkJsb2NrKSB7Ci0JCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKwkJdGVtcF9SY3ZCbG9jayA9IFJjdkJsb2NrOwogCQlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7Ci0JCSAgICAgaSsrLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpIHsKKwkJICAgICBpKyssIHRlbXBfUmN2QmxvY2sgKz0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFKSB7CiAJCQlSY3ZEYXRhQnVmZmVySGRyID0KLQkJCSAgICAoc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKikgKFJjdkRhdGFCdWZmZXIgKwotCQkJCQkJCVNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAotCQkJCQkJCShCdWZmZXJTaXplKSk7CisJCQkgICAgKHN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAqKXRlbXBfUmN2QmxvY2s7CiAJCQlTWEdfRlJFRV9SQ1ZfUEFDS0VUKFJjdkRhdGFCdWZmZXJIZHIpOwogCQl9CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LApAQCAtMzIwNiw2ICszOTY0LDEwIEBACiAJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LAogCQkgIGFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKIAlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworCS8qIEFzIGFsbG9jYXRpb24gZmFpbGVkLCBmcmVlIGFsbCBwcmV2aW91c2x5IGFsbG9jYXRlZCBibG9ja3MuLiovCisJLy9zeGdfZnJlZV9yY3ZibG9ja3MoYWRhcHRlcik7CisKKwlyZXR1cm4gU1RBVFVTX1JFU09VUkNFUzsKIH0KIAogLyoKQEAgLTMyMTMsNDYgKzM5NzUsNjUgQEAKICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKLSAqCVN4Z1NnbAkJCQktIFNYR19TQ0FUVEVSX0dBVEhFUiBidWZmZXIKKyAqCVN4Z1NnbAkJCQktIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgYnVmZmVyCiAgKglQaHlzaWNhbEFkZHJlc3MJCS0gUGh5c2ljYWwgYWRkcmVzcwogICoJTGVuZ3RoCQkJCS0gTWVtb3J5IGxlbmd0aAogICoKICAqIFJldHVybgotICoKICAqLwogc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKLQkJCQkJICAgICBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSICpTeGdTZ2wsCisJCQkJCSAgICAgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqU3hnU2dsLAogCQkJCQkgICAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAogCQkJCQkgICAgIHUzMiBMZW5ndGgpCiB7CisJdW5zaWduZWQgbG9uZyBzZ2xfZmxhZ3M7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxTZ2xDbXAiLAogCQkgIGFkYXB0ZXIsIFN4Z1NnbCwgTGVuZ3RoLCAwKTsKLQlzcGluX2xvY2soJmFkYXB0ZXItPlNnbFFMb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CiAJYWRhcHRlci0+QWxsU2dsQnVmZmVyQ291bnQrKzsKLQltZW1zZXQoU3hnU2dsLCAwLCBzaXplb2Yoc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiopKTsKLQlTeGdTZ2wtPlBoeXNpY2FsQWRkcmVzcyA9IFBoeXNpY2FsQWRkcmVzczsJLyogKlBoeXNpY2FsQWRkcmVzczsgKi8KLQlTeGdTZ2wtPmFkYXB0ZXIgPSBhZGFwdGVyOwkvKiBJbml0aWFsaXplIGJhY2twb2ludGVyIG9uY2UgKi8KKwkvKiBQaHlzaWNhbEFkZHJlc3M7ICovCisJU3hnU2dsLT5QaHlzaWNhbEFkZHJlc3MgPSBQaHlzaWNhbEFkZHJlc3M7CisJLyogSW5pdGlhbGl6ZSBiYWNrcG9pbnRlciBvbmNlICovCisJU3hnU2dsLT5hZGFwdGVyID0gYWRhcHRlcjsKIAlJbnNlcnRUYWlsTGlzdCgmYWRhcHRlci0+QWxsU2dsQnVmZmVycywgJlN4Z1NnbC0+QWxsTGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPlNnbFFMb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5TZ2xRTG9jaywgc2dsX2ZsYWdzKTsKIAlTeGdTZ2wtPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOwogCVNYR19GUkVFX1NHTF9CVUZGRVIoYWRhcHRlciwgU3hnU2dsLCBOVUxMKTsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxTZ2wiLAogCQkgIGFkYXB0ZXIsIFN4Z1NnbCwgTGVuZ3RoLCAwKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgdGVtcF9tYWNfYWRkcmVzc1s2XSA9Ci0gICAgeyAweDAwLCAweGFiLCAweGNkLCAweGVmLCAweDEyLCAweDY5IH07CiAKLXN0YXRpYyB2b2lkIHN4Z19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3N0YXRpYyBpbnQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotLyogIERCR19FUlJPUiAoIiVzIEVOVEVSIGNhcmQtPmNvbmZpZ19zZXRbJXhdIHBvcnRbJWRdIHBoeXNwb3J0WyVkXSBmdW5jdCNbJWRdXG4iLCBfX2Z1bmNfXywgKi8KLS8qICAgICAgICAgICAgIGNhcmQtPmNvbmZpZ19zZXQsIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXItPnBoeXNwb3J0LCBhZGFwdGVyLT5mdW5jdGlvbm51bWJlcik7ICovCi0vKiAqLwotLyogIHN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCisJLyoKKwkgKiAgREJHX0VSUk9SICgiJXMgRU5URVIgY2FyZC0+Y29uZmlnX3NldFsleF0gcG9ydFslZF0gcGh5c3BvcnRbJWRdIFwKKwkgKiAgZnVuY3QjWyVkXVxuIiwgX19mdW5jX18sIGNhcmQtPmNvbmZpZ19zZXQsCisJICogIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXItPnBoeXNwb3J0LCBhZGFwdGVyLT5mdW5jdGlvbm51bWJlcik7CisJICoKKwkgKiAgc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKwkgKi8KKwkvKiBEQkdfRVJST1IgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwKKwkgKgkgICAJCV9fRlVOQ1RJT05fXyk7CisJICovCiAKLQltZW1jcHkoYWRhcHRlci0+bWFjYWRkciwgdGVtcF9tYWNfYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBTWEdfQ09ORklHX01BQykpOwotLyogICAgICBEQkdfRVJST1IgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwgX19mdW5jX18pOyAqLwotLyogICAgICBzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOyAqLworCS8qIHN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpZighZGV2KQorCXsKKwkJcHJpbnRrKCJzeGc6IERldiBpcyBOdWxsXG4iKTsKKwl9CisKKyAgICAgICAgREJHX0VSUk9SKCIlcyBFTlRFUiAoJXMpXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisKKyAgICAgICAgaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFhZGFwdGVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAgICAgfQorCiAJaWYgKCEoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gfHwKIAkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSB8fAogCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdIHx8CkBAIC0zMjYyLDE0ICs0MDQzLDE2IEBACiAJfQogCWlmIChhZGFwdGVyLT5uZXRkZXYpIHsKIAkJbWVtY3B5KGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPmN1cnJtYWNhZGRyLCA2KTsKKwkJbWVtY3B5KGFkYXB0ZXItPm5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5jdXJybWFjYWRkciwgNik7CiAJfQotLyogIERCR19FUlJPUiAoIiVzIEVYSVQgcG9ydCAlZFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQpOyAqLworCS8qIERCR19FUlJPUiAoIiVzIEVYSVQgcG9ydCAlZFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPnBvcnQpOyAqLwogCXN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7CiAKKwlyZXR1cm4gMDsKIH0KIAogI2lmIFhYWFRPRE8KLXN0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhwX25ldF9kZXZpY2UgZGV2LCB2b2lkICpwdHIpCitzdGF0aWMgaW50IHN4Z19tYWNfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHB0cjsKQEAgLTMzMDAsMzQgKzQwODMsMzQgQEAKIH0KICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKiAgU1hHIERSSVZFUiBGVU5DVElPTlMgIChiZWxvdykgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIC8qCisgKiBTWEcgRFJJVkVSIEZVTkNUSU9OUyAgKGJlbG93KQorICoKICAqIHN4Z19pbml0aWFsaXplX2FkYXB0ZXIgLSBJbml0aWFsaXplIGFkYXB0ZXIKICAqCiAgKiBBcmd1bWVudHMgLQogICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKgotICogUmV0dXJuCi0gKglpbnQKKyAqIFJldHVybiAtIGludAogICovCiBzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKIAl1MzIgUnNzSWRzLCBJc3JDb3VudDsKIAl1MzIgaTsKIAlpbnQgc3RhdHVzOworCWludCBzeGdfcmN2X3Jpbmdfc2l6ZSA9IFNYR19SQ1ZfUklOR19TSVpFOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5pdEFkcHQiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwogCiAJUnNzSWRzID0gMTsJCS8qICBYWFhUT0RPICBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsgKi8KLQlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCUlzckNvdW50ID0gYWRhcHRlci0+bXNpX2VuYWJsZWQgPyBSc3NJZHMgOiAxOwogCi0JLyogU2FuaXR5IGNoZWNrIFNYR19VQ09ERV9SRUdTIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvICovCi0JLyogbWFrZSBzdXJlIHRoZSBsZW5ndGggaXMgY29ycmVjdCAqLwotCUFTU0VSVChzaXplb2Yoc3RydWN0IFNYR19VQ09ERV9SRUdTKSA9PSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVKTsKKwkvKgorCSAqIFNhbml0eSBjaGVjayBTWEdfVUNPREVfUkVHUyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiB0bworCSAqIG1ha2Ugc3VyZSB0aGUgbGVuZ3RoIGlzIGNvcnJlY3QKKwkgKi8KKwlBU1NFUlQoc2l6ZW9mKHN0cnVjdCBzeGdfdWNvZGVfcmVncykgPT0gU1hHX1JFR0lTVEVSX1NJWkVfUEVSX0NQVSk7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlTWEdfRElTQUJMRV9BTExfSU5URVJSVVBUUyhhZGFwdGVyKTsKQEAgLTMzNzAsMTkgKzQxNTMsMjQgQEAKIAkvKiBSZWNlaXZlIHJpbmcgYmFzZSBhbmQgc2l6ZSAqLwogCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCiAJCSAgICBhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmN2QmFzZSwgYWRhcHRlci0+UFJjdlJpbmdzLCAwKTsKLQlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdlNpemUsIFNYR19SQ1ZfUklOR19TSVpFLCBUUlVFKTsKKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkID09IFRSVUUpCisJCXN4Z19yY3ZfcmluZ19zaXplID0gU1hHX0pVTUJPX1JDVl9SSU5HX1NJWkU7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZTaXplLCBzeGdfcmN2X3Jpbmdfc2l6ZSwgVFJVRSk7CiAKIAkvKiBQb3B1bGF0ZSB0aGUgY2FyZCB3aXRoIHJlY2VpdmUgYnVmZmVycyAqLwogCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKIAotCS8qIEluaXRpYWxpemUgY2hlY2tzdW0gb2ZmbG9hZCBjYXBhYmlsaXRpZXMuICBBdCB0aGUgbW9tZW50ICovCi0JLyogd2UgYWx3YXlzIGVuYWJsZSBJUCBhbmQgVENQIHJlY2VpdmUgY2hlY2tzdW1zIG9uIHRoZSBjYXJkLiAqLwotCS8qIERlcGVuZGluZyBvbiB0aGUgY2hlY2tzdW0gY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlICovCi0JLyogdXNlciwgd2UgY2FuIGNob29zZSB0byByZXBvcnQgb3IgaWdub3JlIHRoZSBjaGVja3N1bSAqLwotCS8qIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjYXJkLiAqLworCS8qCisJICogSW5pdGlhbGl6ZSBjaGVja3N1bSBvZmZsb2FkIGNhcGFiaWxpdGllcy4gIEF0IHRoZSBtb21lbnQgd2UgYWx3YXlzCisJICogZW5hYmxlIElQIGFuZCBUQ1AgcmVjZWl2ZSBjaGVja3N1bXMgb24gdGhlIGNhcmQuIERlcGVuZGluZyBvbiB0aGUKKwkgKiBjaGVja3N1bSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSB0aGUgdXNlciwgd2UgY2FuIGNob29zZSB0bworCSAqIHJlcG9ydCBvciBpZ25vcmUgdGhlIGNoZWNrc3VtIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjYXJkLgorCSAqLwogCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmVjZWl2ZUNoZWNrc3VtLAogCQkgIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCB8IFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVELCBUUlVFKTsKIAorCWFkYXB0ZXItPmZsYWdzIHw9IChTWEdfUkNWX1RDUF9DU1VNX0VOQUJMRUQgfCBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRCApOworCiAJLyogSW5pdGlhbGl6ZSB0aGUgTUFDLCBYQVVJICovCiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19pbml0aWFsaXplX2xpbmtcbiIsIF9fZnVuY19fKTsKIAlzdGF0dXMgPSBzeGdfaW5pdGlhbGl6ZV9saW5rKGFkYXB0ZXIpOwpAQCAtMzM5MSwxMCArNDE3OSwxNiBAQAogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKIAkJcmV0dXJuIChzdGF0dXMpOwogCX0KLQkvKiBJbml0aWFsaXplIERlYWQgdG8gRkFMU0UuICovCi0JLyogU2xpY0NoZWNrRm9ySGFuZyBvciBTbGljRHVtcFRocmVhZCB3aWxsIHRha2UgaXQgZnJvbSBoZXJlLiAqLworCS8qCisJICogSW5pdGlhbGl6ZSBEZWFkIHRvIEZBTFNFLgorCSAqIFNsaWNDaGVja0Zvckhhbmcgb3IgU2xpY0R1bXBUaHJlYWQgd2lsbCB0YWtlIGl0IGZyb20gaGVyZS4KKwkgKi8KIAlhZGFwdGVyLT5EZWFkID0gRkFMU0U7CiAJYWRhcHRlci0+UGluZ091dHN0YW5kaW5nID0gRkFMU0U7CisJYWRhcHRlci0+WG10RmNFbmFibGVkID0gVFJVRTsKKwlhZGFwdGVyLT5SY3ZGY0VuYWJsZWQgPSBUUlVFOworCisJYWRhcHRlci0+U3RhdGUgPSBTWEdfU1RBVEVfUlVOTklORzsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhJbml0IiwKIAkJICBhZGFwdGVyLCAwLCAwLCAwKTsKQEAgLTM0MTMsMTUgKzQyMDcsMTQgQEAKICAqCXN0YXR1cwogICovCiBzdGF0aWMgaW50IHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2soc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKLQkJCQkgICAgIHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSCi0JCQkJICAgICAqUmN2RGVzY3JpcHRvckJsb2NrSGRyKQorCSAgICAgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgKlJjdkRlc2NyaXB0b3JCbG9ja0hkcikKIHsKIAl1MzIgaTsKLQlzdHJ1Y3QgU1hHX1JJTkdfSU5GTyAqUmN2UmluZ0luZm8gPSAmYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvOwotCXN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAqUmN2RGF0YUJ1ZmZlckhkcjsKLQlzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLICpSY3ZEZXNjcmlwdG9yQmxvY2s7Ci0Jc3RydWN0IFNYR19DTUQgKlJpbmdEZXNjcmlwdG9yQ21kOwotCXN0cnVjdCBTWEdfUkNWX1JJTkcgKlJpbmdaZXJvID0gJmFkYXB0ZXItPlJjdlJpbmdzWzBdOworCXN0cnVjdCBzeGdfcmluZ19pbmZvICpSY3ZSaW5nSW5mbyA9ICZhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm87CisJc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICpSY3ZEYXRhQnVmZmVySGRyOworCXN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2sgKlJjdkRlc2NyaXB0b3JCbG9jazsKKwlzdHJ1Y3Qgc3hnX2NtZCAqUmluZ0Rlc2NyaXB0b3JDbWQ7CisJc3RydWN0IHN4Z19yY3ZfcmluZyAqUmluZ1plcm8gPSAmYWRhcHRlci0+UmN2UmluZ3NbMF07CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJGaWxCbGsiLAogCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQsCkBAIC0zNDI5LDggKzQyMjIsMTAgQEAKIAogCUFTU0VSVChSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOwogCi0JLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVzb3VyY2VzIHRvIGZpbGwgdGhlIGRlc2NyaXB0b3IgYmxvY2ssICovCi0JLyogcmV0dXJuIGZhaWx1cmUgKi8KKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgdGhlIHJlc291cmNlcyB0byBmaWxsIHRoZSBkZXNjcmlwdG9yIGJsb2NrLAorCSAqIHJldHVybiBmYWlsdXJlCisJICovCiAJaWYgKChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgfHwKIAkgICAgU1hHX1JJTkdfRlVMTChSY3ZSaW5nSW5mbykpIHsKIAkJYWRhcHRlci0+U3RhdHMuTm9NZW0rKzsKQEAgLTM0NDEsMjcgKzQyMzYsNDAgQEAKIAkJICAgIFJjdlJpbmdJbmZvLCBSaW5nRGVzY3JpcHRvckNtZCwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKIAlBU1NFUlQoUmluZ0Rlc2NyaXB0b3JDbWQpOwogCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+U3RhdGUgPSBTWEdfQlVGRkVSX09OQ0FSRDsKLQlSY3ZEZXNjcmlwdG9yQmxvY2sgPQotCSAgICAoc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyopIFJjdkRlc2NyaXB0b3JCbG9ja0hkci0+VmlydHVhbEFkZHJlc3M7CisJUmN2RGVzY3JpcHRvckJsb2NrID0gKHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2sgKikKKwkJCQkgUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzczsKIAogCS8qIEZpbGwgaW4gdGhlIGRlc2NyaXB0b3IgYmxvY2sgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7IGkrKykgewogCQlTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKIAkJQVNTRVJUKFJjdkRhdGFCdWZmZXJIZHIpOworLy8JCUFTU0VSVChSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0KTsKKwkJaWYgKCFSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0KSB7CisJCQlTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyLAorCQkJCQkJYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUpOworCQkJaWYoUmN2RGF0YUJ1ZmZlckhkci0+c2tiKQorCQkJCVJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQgPQorCQkJCQkJUmN2RGF0YUJ1ZmZlckhkci0+c2tiOworCQkJZWxzZQorCQkJCWdvdG8gbm9fbWVtb3J5OworCQl9CiAJCVNYR19SRUlOSUFUSUFMSVpFX1BBQ0tFVChSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0KTsKIAkJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX09OQ0FSRDsKIAkJUmN2RGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yc1tpXS5WaXJ0dWFsQWRkcmVzcyA9Ci0JCSAgICAodm9pZCAqKVJjdkRhdGFCdWZmZXJIZHI7CisJCQkJCSAgICAodm9pZCAqKVJjdkRhdGFCdWZmZXJIZHI7CisKIAkJUmN2RGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yc1tpXS5QaHlzaWNhbEFkZHJlc3MgPQogCQkgICAgUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzOwogCX0KIAkvKiBBZGQgdGhlIGRlc2NyaXB0b3IgYmxvY2sgdG8gcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmcgMCAqLwogCVJpbmdEZXNjcmlwdG9yQ21kLT5TZ2wgPSBSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlBoeXNpY2FsQWRkcmVzczsKIAotCS8qIFJjdkJ1ZmZlcnNPbkNhcmQgaXMgbm90IHByb3RlY3RlZCB2aWEgdGhlIHJlY2VpdmUgbG9jayAoc2VlICovCi0JLyogc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUpIFdlIGRvbid0IHdhbnQgdG8gZ3JhcCBhIGxvY2sgZXZlcnkgdGltZSBhICovCi0JLyogYnVmZmVyIGlzIHJldHVybmVkIHRvIHVzLCBzbyB3ZSB1c2UgYXRvbWljIGludGVybG9ja2VkIGZ1bmN0aW9ucyAqLwotCS8qIGluc3RlYWQuICovCisJLyoKKwkgKiBSY3ZCdWZmZXJzT25DYXJkIGlzIG5vdCBwcm90ZWN0ZWQgdmlhIHRoZSByZWNlaXZlIGxvY2sgKHNlZQorCSAqIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKSBXZSBkb24ndCB3YW50IHRvIGdyYXAgYSBsb2NrIGV2ZXJ5IHRpbWUgYQorCSAqIGJ1ZmZlciBpcyByZXR1cm5lZCB0byB1cywgc28gd2UgdXNlIGF0b21pYyBpbnRlcmxvY2tlZCBmdW5jdGlvbnMKKwkgKiBpbnN0ZWFkLgorCSAqLwogCWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEc2NCbGsiLApAQCAtMzQ3Myw2ICs0MjgxLDIzIEBACiAJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKIAkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOwogCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworbm9fbWVtb3J5OgorCWZvciAoOyBpID49IDAgOyBpLS0pIHsKKwkJaWYgKFJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uVmlydHVhbEFkZHJlc3MpIHsKKwkJCVJjdkRhdGFCdWZmZXJIZHIgPSAoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopCisJCQkJCSAgICBSY3ZEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JzW2ldLgorCQkJCQkJCQlWaXJ0dWFsQWRkcmVzczsKKwkJCVJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uUGh5c2ljYWxBZGRyZXNzID0KKwkJCQkJICAgIChkbWFfYWRkcl90KU5VTEw7CisJCQlSY3ZEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JzW2ldLlZpcnR1YWxBZGRyZXNzPU5VTEw7CisJCX0KKwkJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCX0KKwlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOworCVNYR19SRVRVUk5fQ01EKFJpbmdaZXJvLCBSY3ZSaW5nSW5mbywgUmluZ0Rlc2NyaXB0b3JDbWQsCisJCQlSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCisJcmV0dXJuICgtRU5PTUVNKTsKIH0KIAogLyoKQEAgLTM0ODYsMzQgKzQzMTEsNDIgQEAKICAqLwogc3RhdGljIHZvaWQgc3hnX3N0b2NrX3Jjdl9idWZmZXJzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgKlJjdkRlc2NyaXB0b3JCbG9ja0hkcjsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciAqUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCWludCBzeGdfcmN2X2RhdGFfYnVmZmVycyA9IFNYR19SQ1ZfREFUQV9CVUZGRVJTOworCWludCBzeGdfbWluX3Jjdl9kYXRhX2J1ZmZlcnMgPSBTWEdfTUlOX1JDVl9EQVRBX0JVRkZFUlM7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJTdG9ja0J1ZiIsCiAJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKIAkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOwotCS8qIEZpcnN0LCBzZWUgaWYgd2UndmUgZ290IGxlc3MgdGhhbiBvdXIgbWluaW11bSB0aHJlc2hvbGQgb2YgKi8KLQkvKiByZWNlaXZlIGJ1ZmZlcnMsIHRoZXJlIGlzbid0IGFuIGFsbG9jYXRpb24gaW4gcHJvZ3Jlc3MsIGFuZCAqLwotCS8qIHdlIGhhdmVuJ3QgZXhjZWVkZWQgb3VyIG1heGltdW0uLiBnZXQgYW5vdGhlciBibG9jayBvZiBidWZmZXJzICovCi0JLyogTm9uZSBvZiB0aGlzIG5lZWRzIHRvIGJlIFNNUCBzYWZlLiAgSXQncyByb3VuZCBudW1iZXJzLiAqLwotCWlmICgoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX01JTl9SQ1ZfREFUQV9CVUZGRVJTKSAmJgorCS8qCisJICogRmlyc3QsIHNlZSBpZiB3ZSd2ZSBnb3QgbGVzcyB0aGFuIG91ciBtaW5pbXVtIHRocmVzaG9sZCBvZgorCSAqIHJlY2VpdmUgYnVmZmVycywgdGhlcmUgaXNuJ3QgYW4gYWxsb2NhdGlvbiBpbiBwcm9ncmVzcywgYW5kCisJICogd2UgaGF2ZW4ndCBleGNlZWRlZCBvdXIgbWF4aW11bS4uIGdldCBhbm90aGVyIGJsb2NrIG9mIGJ1ZmZlcnMKKwkgKiBOb25lIG9mIHRoaXMgbmVlZHMgdG8gYmUgU01QIHNhZmUuICBJdCdzIHJvdW5kIG51bWJlcnMuCisJICovCisJaWYgKGFkYXB0ZXItPkp1bWJvRW5hYmxlZCA9PSBUUlVFKQorCQlzeGdfbWluX3Jjdl9kYXRhX2J1ZmZlcnMgPSBTWEdfTUlOX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlM7CisJaWYgKChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBzeGdfbWluX3Jjdl9kYXRhX2J1ZmZlcnMpICYmCiAJICAgIChhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50IDwgU1hHX01BWF9SQ1ZfQkxPQ0tTKSAmJgotCSAgICAoYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nID09IDApKSB7CisJICAgIChhdG9taWNfcmVhZCgmYWRhcHRlci0+cGVuZGluZ19hbGxvY2F0aW9ucykgPT0gMCkpIHsKIAkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKLQkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgotCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKKwkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFCisJCQkJCSAgIChTWEdfUkNWX0RBVEFfSERSX1NJWkUpLAogCQkJCQkgICBTWEdfQlVGRkVSX1RZUEVfUkNWKTsKIAl9CiAJLyogTm93IGdyYWIgdGhlIFJjdlFMb2NrIGxvY2sgYW5kIHByb2NlZWQgKi8KIAlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKLQl3aGlsZSAoYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCA8IFNYR19SQ1ZfREFUQV9CVUZGRVJTKSB7Ci0JCXN0cnVjdCBMSVNUX0VOVFJZICpfcGxlOworCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQpCisJCXN4Z19yY3ZfZGF0YV9idWZmZXJzID0gU1hHX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlM7CisJd2hpbGUgKGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPCBzeGdfcmN2X2RhdGFfYnVmZmVycykgeworCQlzdHJ1Y3QgbGlzdF9lbnRyeSAqX3BsZTsKIAogCQkvKiBHZXQgYSBkZXNjcmlwdG9yIGJsb2NrICovCiAJCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9IE5VTEw7CiAJCWlmIChhZGFwdGVyLT5GcmVlUmN2QmxvY2tDb3VudCkgewogCQkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKIAkJCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9Ci0JCQkgICAgY29udGFpbmVyX29mKF9wbGUsIHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSLAorCQkJICAgIGNvbnRhaW5lcl9vZihfcGxlLCBzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciwKIAkJCQkJIEZyZWVMaXN0KTsKIAkJCWFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LS07CiAJCQlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOwpAQCAtMzU1MywxMCArNDM4NiwxMCBAQAogc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkJCSAgIHVuc2lnbmVkIGNoYXIgSW5kZXgpCiB7Ci0Jc3RydWN0IFNYR19SQ1ZfUklORyAqUmluZ1plcm8gPSAmYWRhcHRlci0+UmN2UmluZ3NbMF07Ci0Jc3RydWN0IFNYR19SSU5HX0lORk8gKlJjdlJpbmdJbmZvID0gJmFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbzsKLQlzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiAqUmN2RGVzY3JpcHRvckJsb2NrSGRyOwotCXN0cnVjdCBTWEdfQ01EICpSaW5nRGVzY3JpcHRvckNtZDsKKwlzdHJ1Y3Qgc3hnX3Jjdl9yaW5nICpSaW5nWmVybyA9ICZhZGFwdGVyLT5SY3ZSaW5nc1swXTsKKwlzdHJ1Y3Qgc3hnX3JpbmdfaW5mbyAqUmN2UmluZ0luZm8gPSAmYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvOworCXN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyICpSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CisJc3RydWN0IHN4Z19jbWQgKlJpbmdEZXNjcmlwdG9yQ21kOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ21wUkJsa3MiLAogCQkgIGFkYXB0ZXIsIEluZGV4LCBSY3ZSaW5nSW5mby0+SGVhZCwgUmN2UmluZ0luZm8tPlRhaWwpOwpAQCAtMzU2NCwxMiArNDM5NywxMyBAQAogCS8qIE5vdyBncmFiIHRoZSBSY3ZRTG9jayBsb2NrIGFuZCBwcm9jZWVkICovCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CiAJQVNTRVJUKEluZGV4ICE9IFJjdlJpbmdJbmZvLT5UYWlsKTsKLQl3aGlsZSAoUmN2UmluZ0luZm8tPlRhaWwgIT0gSW5kZXgpIHsKLQkJLyogKi8KLQkJLyogTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kICovCi0JCS8qIGFzc29jaWF0ZWQgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrLCBhbmQgYWR2YW5jZSAqLwotCQkvKiB0aGUgdGFpbCAqLwotCQkvKiAqLworCXdoaWxlIChzeGdfcmluZ19nZXRfZm9yd2FyZF9kaWZmKFJjdlJpbmdJbmZvLCBJbmRleCwKKwkJCQkJUmN2UmluZ0luZm8tPlRhaWwpID4gMykgeworCQkvKgorCQkgKiBMb2NhdGUgdGhlIGN1cnJlbnQgQ21kIChyaW5nIGRlc2NyaXB0b3IgZW50cnkpLCBhbmQKKwkJICogYXNzb2NpYXRlZCByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2ssIGFuZCBhZHZhbmNlCisJCSAqIHRoZSB0YWlsCisJCSAqLwogCQlTWEdfUkVUVVJOX0NNRChSaW5nWmVybywKIAkJCSAgICAgICBSY3ZSaW5nSW5mbywKIAkJCSAgICAgICBSaW5nRGVzY3JpcHRvckNtZCwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKQEAgLTM1NzksMjMgKzQ0MTMsNjYgQEAKIAogCQkvKiBDbGVhciB0aGUgU0dMIGZpZWxkICovCiAJCVJpbmdEZXNjcmlwdG9yQ21kLT5TZ2wgPSAwOwotCQkvKiBBdHRlbXB0IHRvIHJlZmlsbCBpdCBhbmQgaGFuZCBpdCByaWdodCBiYWNrIHRvIHRoZSAqLwotCQkvKiBjYXJkLiAgSWYgd2UgZmFpbCB0byByZWZpbGwgaXQsIGZyZWUgdGhlIGRlc2NyaXB0b3IgYmxvY2sgKi8KLQkJLyogaGVhZGVyLiAgVGhlIGNhcmQgd2lsbCBiZSByZXN0b2NrZWQgbGF0ZXIgdmlhIHRoZSAqLwotCQkvKiBSY3ZCdWZmZXJzT25DYXJkIHRlc3QgKi8KLQkJaWYgKHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2soYWRhcHRlciwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKSA9PQotCQkgICAgU1RBVFVTX0ZBSUxVUkUpIHsKKwkJLyoKKwkJICogQXR0ZW1wdCB0byByZWZpbGwgaXQgYW5kIGhhbmQgaXQgcmlnaHQgYmFjayB0byB0aGUKKwkJICogY2FyZC4gIElmIHdlIGZhaWwgdG8gcmVmaWxsIGl0LCBmcmVlIHRoZSBkZXNjcmlwdG9yIGJsb2NrCisJCSAqIGhlYWRlci4gIFRoZSBjYXJkIHdpbGwgYmUgcmVzdG9ja2VkIGxhdGVyIHZpYSB0aGUKKwkJICogUmN2QnVmZmVyc09uQ2FyZCB0ZXN0CisJCSAqLworCQlpZiAoc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhhZGFwdGVyLAorCQkJIFJjdkRlc2NyaXB0b3JCbG9ja0hkcikgPT0gU1RBVFVTX0ZBSUxVUkUpCiAJCQlTWEdfRlJFRV9SQ1ZfREVTQ1JJUFRPUl9CTE9DSyhhZGFwdGVyLAogCQkJCQkJICAgICAgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKLQkJfQogCX0KIAlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhDUkJsa3MiLAogCQkgIGFkYXB0ZXIsIEluZGV4LCBSY3ZSaW5nSW5mby0+SGVhZCwgUmN2UmluZ0luZm8tPlRhaWwpOwogfQogCisvKgorICogUmVhZCB0aGUgc3RhdGlzdGljcyB3aGljaCB0aGUgY2FyZCBoYXMgYmVlbiBtYWludGFpbmluZy4KKyAqLwordm9pZCBzeGdfY29sbGVjdF9zdGF0aXN0aWNzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaWYoYWRhcHRlci0+dWNvZGVfc3RhdHMpCisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5HZXRVY29kZVN0YXRzLAorCQkJCWFkYXB0ZXItPnB1Y29kZV9zdGF0cywgMCk7CisJYWRhcHRlci0+c3RhdHMucnhfZmlmb19lcnJvcnMgPSBhZGFwdGVyLT51Y29kZV9zdGF0cy0+RVJEcm9wczsKKwlhZGFwdGVyLT5zdGF0cy5yeF9vdmVyX2Vycm9ycyA9IGFkYXB0ZXItPnVjb2RlX3N0YXRzLT5OQkRyb3BzOworCWFkYXB0ZXItPnN0YXRzLnR4X2ZpZm9fZXJyb3JzID0gYWRhcHRlci0+dWNvZGVfc3RhdHMtPlhEcm9wczsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzeGdfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3hnX2NvbGxlY3Rfc3RhdGlzdGljcyhhZGFwdGVyKTsKKwlyZXR1cm4gKCZhZGFwdGVyLT5zdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z193YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopIGRhdGE7CisKKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgeworCQlzeGdfbGlua19ldmVudChhZGFwdGVyKTsKKwkJLyogUmVzZXQgdGhlIHRpbWVyICovCisJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOworCX0KK30KKworc3RhdGljIHZvaWQgc3hnX3VwZGF0ZV9saW5rX3N0YXR1cyAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKWNvbnRhaW5lcl9vZgorCQkJCSh3b3JrLCBzdHJ1Y3QgYWRhcHRlcl90LCB1cGRhdGVfbGlua19zdGF0dXMpOworCWlmIChsaWtlbHkoYWRhcHRlci0+bGlua19zdGF0dXNfY2hhbmdlZCkpIHsKKwkJc3hnX2xpbmtfZXZlbnQoYWRhcHRlcik7CisJCWFkYXB0ZXItPmxpbmtfc3RhdHVzX2NoYW5nZWQgPSAwOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN4Z19kcml2ZXIgPSB7Ci0JLm5hbWUgPSBEUlZfTkFNRSwKKwkubmFtZSA9IHN4Z19kcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPSBzeGdfcGNpX3RibCwKIAkucHJvYmUgPSBzeGdfZW50cnlfcHJvYmUsCiAJLnJlbW92ZSA9IHN4Z19lbnRyeV9yZW1vdmUsCkBAIC0zNjAzLDcgKzQ0ODAsNyBAQAogCS5zdXNwZW5kID0gc3hncG1fc3VzcGVuZCwKIAkucmVzdW1lID0gc3hncG1fcmVzdW1lLAogI2VuZGlmCi0vKiAgICAuc2h1dGRvd24gICA9ICAgICBzbGljX3NodXRkb3duLCAgTU9PS19JTlZFU1RJR0FURSAqLworCS8qIC5zaHV0ZG93biAgID0gICAgIHNsaWNfc2h1dGRvd24sICBNT09LX0lOVkVTVElHQVRFICovCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzeGdfbW9kdWxlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCmluZGV4IDY1M2NmM2IuLmYwN2FhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaApAQCAtNDIsMzU3ICs0MiwzNjkgQEAKICNpZm5kZWYgX19TWEdfRFJJVkVSX0hfXwogI2RlZmluZSBfX1NYR19EUklWRVJfSF9fCiAKLSNkZWZpbmUgcF9uZXRfZGV2aWNlIHN0cnVjdCBuZXRfZGV2aWNlICoKLS8vIFNYR19TVEFUUyAtIFByb2JhYmx5IG1vdmUgdGhlc2UgdG8gc29tZXBsYWNlIHdoZXJlCi0vLyB0aGUgc2xpY3N0YXQgKHN4Z3N0YXQ/KSBwcm9ncmFtIGNhbiBnZXQgdGhlbS4KLXN0cnVjdCBTWEdfU1RBVFMgewotCS8vIFhtdAotCXUzMgkJCQlYbXROQkw7CQkJCS8vIE9mZmxvYWQgc2VuZCBOQkwgY291bnQKLQl1NjQJCQkJRHVtYlhtdEJ5dGVzOwkJLy8gRHVtYm5pYyBzZW5kIGJ5dGVzCi0JdTY0CQkJCVNsb3dYbXRCeXRlczsJCS8vIFNsb3dwYXRoIHNlbmQgYnl0ZXMKLQl1NjQJCQkJRmFzdFhtdEJ5dGVzOwkJLy8gRmFzdHBhdGggc2VuZCBieXRlcwotCXU2NAkJCQlEdW1iWG10UGt0czsJCS8vIER1bWJuaWMgc2VuZCBwYWNrZXRzCi0JdTY0CQkJCVNsb3dYbXRQa3RzOwkJLy8gU2xvd3BhdGggc2VuZCBwYWNrZXRzCi0JdTY0CQkJCUZhc3RYbXRQa3RzOwkJLy8gRmFzdHBhdGggc2VuZCBwYWNrZXRzCi0gICAgdTY0CQkJCUR1bWJYbXRVY2FzdFBrdHM7CS8vIGRpcmVjdGVkIHBhY2tldHMKLSAgICB1NjQJCQkJRHVtYlhtdE1jYXN0UGt0czsJLy8gTXVsdGljYXN0IHBhY2tldHMKLSAgICB1NjQJCQkJRHVtYlhtdEJjYXN0UGt0czsJLy8gT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDVgotICAgIHU2NAkJCQlEdW1iWG10VWNhc3RCeXRlczsJLy8gT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlUCi0gICAgdTY0CQkJCUR1bWJYbXRNY2FzdEJ5dGVzOwkvLyBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUCi0gICAgdTY0CQkJCUR1bWJYbXRCY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUCi0gICAgdTY0CQkJCVhtdEVycm9yczsJCQkvLyBPSURfR0VOX1hNSVRfRVJST1IKLSAgICB1NjQJCQkJWG10RGlzY2FyZHM7CQkvLyBPSURfR0VOX1hNSVRfRElTQ0FSRFMKLQl1NjQJCQkJWG10T2s7CQkJCS8vIE9JRF9HRU5fWE1JVF9PSwotCXU2NAkJCQlYbXRRTGVuOwkJCS8vIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RICi0JdTY0CQkJCVhtdFplcm9GdWxsOwkJLy8gVHJhbnNtaXQgcmluZyB6ZXJvIGZ1bGwKLQkvLyBSY3YKLQl1MzIJCQkJUmN2TkJMOwkJCQkvLyBPZmZsb2FkIHJlY2lldmUgTkJMIGNvdW50Ci0JdTY0CQkJCUR1bWJSY3ZCeXRlczsJCS8vIGR1bWJuaWMgcmVjdiBieXRlcwotICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2VWNhc3RCeXRlczsJLy8gT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YKLSAgICB1NjQgICAgICAgICAgICAgRHVtYlJjdk1jYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDVgotICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2QmNhc3RCeXRlczsJLy8gT0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWCi0JdTY0CQkJCVNsb3dSY3ZCeXRlczsJCS8vIFNsb3dwYXRoIHJlY3YgYnl0ZXMKLQl1NjQJCQkJRmFzdFJjdkJ5dGVzOwkJLy8gRmFzdHBhdGggcmVjdiBieXRlcwotICAgIHU2NAkJCQlEdW1iUmN2UGt0czsJCS8vIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDVgotCXU2NAkJCQlEdW1iUmN2VGNwUGt0czsJCS8vIFNlZSBTeGdDb2xsZWN0U3RhdHMKLSAgICB1NjQJCQkJRHVtYlJjdlVjYXN0UGt0czsJLy8gZGlyZWN0ZWQgcGFja2V0cwotICAgIHU2NAkJCQlEdW1iUmN2TWNhc3RQa3RzOwkvLyBNdWx0aWNhc3QgcGFja2V0cwotICAgIHU2NAkJCQlEdW1iUmN2QmNhc3RQa3RzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWCi0JdTY0CQkJCVNsb3dSY3ZQa3RzOwkJLy8gT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWCi0gICAgdTY0CQkJCVJjdkVycm9yczsJCQkvLyBPSURfR0VOX1JDVl9FUlJPUgotICAgIHU2NAkJCQlSY3ZEaXNjYXJkczsJCS8vIE9JRF9HRU5fUkNWX0RJU0NBUkRTCi0JdTY0CQkJCVJjdk5vQnVmZmVyOwkJLy8gT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCi0gICAgdTY0IAkJCVBkcUZ1bGw7CQkJLy8gUHJvY2Vzc2VkIERhdGEgUXVldWUgRnVsbAotCXU2NAkJCQlFdmVudFJpbmdGdWxsOwkJLy8gRXZlbnQgcmluZyBmdWxsCi0JLy8gVmVyYm9zZSBzdGF0cwotCXU2NAkJCQlNYXhTZW5kczsJCQkvLyBNYXggc2VuZHMgb3V0c3RhbmRpbmcKLQl1NjQJCQkJTm9TZ2xCdWY7CQkJLy8gU0dMIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWx1cmUKLQl1NjQJCQkJU2dsRmFpbDsJCQkvLyBORElTIFNHTCBmYWlsdXJlCi0JdTY0CQkJCVNnbEFzeW5jOwkJCS8vIE5ESVMgU0dMIGZhaWx1cmUKLQl1NjQJCQkJTm9NZW07CQkJCS8vIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKLQl1NjQJCQkJTnVtSW50czsJCQkvLyBJbnRlcnJ1cHRzCi0JdTY0CQkJCUZhbHNlSW50czsJCQkvLyBJbnRlcnJ1cHQgd2l0aCBJU1IgPT0gMAotCXU2NAkJCQlYbXREcm9wczsJCQkvLyBObyBzYWhhcmEgRFJBTSBidWZmZXIgZm9yIHhtdAotCS8vIFNhaGFyYSByZWNlaXZlIHN0YXR1cwotCXU2NAkJCQlUcmFuc3BvcnRDc3VtOwkJLy8gU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0KLQl1NjQJCQkJVHJhbnNwb3J0VWZsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfVUZMT1cKLQl1NjQJCQkJVHJhbnNwb3J0SGRyTGVuOwkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSERSTEVOCi0JdTY0CQkJCU5ldHdvcmtDc3VtOwkJLy8gU1hHX1JDVl9TVEFUVVNfTkVUV09SS19DU1VNOgotCXU2NAkJCQlOZXR3b3JrVWZsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOgotCXU2NAkJCQlOZXR3b3JrSGRyTGVuOwkJLy8gU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU46Ci0JdTY0CQkJCVBhcml0eTsJCQkJLy8gU1hHX1JDVl9TVEFUVVNfUEFSSVRZCi0JdTY0CQkJCUxpbmtQYXJpdHk7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFk6Ci0JdTY0CQkJCUxpbmtFYXJseTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOgotCXU2NAkJCQlMaW5rQnVmT2Zsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOgotCXU2NAkJCQlMaW5rQ29kZTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREU6Ci0JdTY0CQkJCUxpbmtEcmliYmxlOwkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFOgotCXU2NAkJCQlMaW5rQ3JjOwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDOgotCXU2NAkJCQlMaW5rT2Zsb3c7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzoKLQl1NjQJCQkJTGlua1VmbG93OwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfVUZMT1c6CisjZGVmaW5lIFNMSUNfRFVNUF9FTkFCTEVECQkwCisKKyNkZWZpbmUgU1hHX0RSVl9OQU1FCSJzeGciCQkvKiBUQkQ6IFRoaXMgbWlnaHQgYmUgcmVtb3ZlZCBldmVudHVhbGx5ICovCisjZGVmaW5lIFNYR19EUlZfVkVSU0lPTgkiMS4wLjEiCisKK2V4dGVybiBjaGFyIHN4Z19kcml2ZXJfbmFtZVtdOworCisjZGVmaW5lIFNYR19ORVRERVZfV0VJR0hUIDY0CisKKy8qCisgKiBzdHJ1Y3Qgc3hnX3N0YXRzIC0gUHJvYmFibHkgbW92ZSB0aGVzZSB0byBzb21lcGxhY2Ugd2hlcmUKKyAqIHRoZSBzbGljc3RhdCAoc3hnc3RhdD8pIHByb2dyYW0gY2FuIGdldCB0aGVtLgorICovCitzdHJ1Y3Qgc3hnX3N0YXRzIHsKKwkvKiBYbXQgKi8KKwl1NjQJRHVtYlhtdFVjYXN0UGt0czsJLyogZGlyZWN0ZWQgcGFja2V0cyAqLworCXU2NAlEdW1iWG10TWNhc3RQa3RzOwkvKiBNdWx0aWNhc3QgcGFja2V0cyAqLworCXU2NAlEdW1iWG10QmNhc3RQa3RzOwkvKiBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWICovCisJdTY0CUR1bWJYbXRVY2FzdEJ5dGVzOwkvKiBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQgKi8KKwl1NjQJRHVtYlhtdE1jYXN0Qnl0ZXM7CS8qIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQgKi8KKwl1NjQJRHVtYlhtdEJjYXN0Qnl0ZXM7CS8qIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQgKi8KKwl1NjQJWG10UUxlbjsJCS8qIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RIICovCisJdTY0CVhtdFplcm9GdWxsOwkJLyogVHJhbnNtaXQgcmluZyB6ZXJvIGZ1bGwgKi8KKwkvKiBSY3YgKi8KKwl1NjQgIAlEdW1iUmN2VWNhc3RCeXRlczsJLyogT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YgKi8KKwl1NjQgICAgCUR1bWJSY3ZNY2FzdEJ5dGVzOwkvKiBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1YgKi8KKwl1NjQgICAJRHVtYlJjdkJjYXN0Qnl0ZXM7CS8qIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDViAqLworCXU2NAlEdW1iUmN2VWNhc3RQa3RzOwkvKiBkaXJlY3RlZCBwYWNrZXRzICovCisJdTY0CUR1bWJSY3ZNY2FzdFBrdHM7CS8qIE11bHRpY2FzdCBwYWNrZXRzICovCisJdTY0CUR1bWJSY3ZCY2FzdFBrdHM7CS8qIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YgKi8KKwl1NjQgCVBkcUZ1bGw7CQkvKiBQcm9jZXNzZWQgRGF0YSBRdWV1ZSBGdWxsICovCisJdTY0CUV2ZW50UmluZ0Z1bGw7CQkvKiBFdmVudCByaW5nIGZ1bGwgKi8KKwkvKiBWZXJib3NlIHN0YXRzICovCisJdTY0CU5vU2dsQnVmOwkJLyogU0dMIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KKwl1NjQJTm9NZW07CQkJLyogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAqLworCXU2NAlOdW1JbnRzOwkJLyogSW50ZXJydXB0cyAqLworCXU2NAlGYWxzZUludHM7CQkvKiBJbnRlcnJ1cHQgd2l0aCBJU1IgPT0gMCAqLworCS8qIFNhaGFyYSByZWNlaXZlIHN0YXR1cyAqLworCXU2NAlUcmFuc3BvcnRDc3VtOwkJLyogU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0gKi8KKwl1NjQJVHJhbnNwb3J0VWZsb3c7CQkvKiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfVUZMT1cgKi8KKwl1NjQJVHJhbnNwb3J0SGRyTGVuOwkvKiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSERSTEVOICovCisJdTY0CU5ldHdvcmtDc3VtOwkJLyogU1hHX1JDVl9TVEFUVVNfTkVUV09SS19DU1VNOiAqLworCXU2NAlOZXR3b3JrVWZsb3c7CQkvKiBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOiAqLworCXU2NAlOZXR3b3JrSGRyTGVuOwkJLyogU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU46ICovCisJdTY0CVBhcml0eTsJCQkvKiBTWEdfUkNWX1NUQVRVU19QQVJJVFkgKi8KKwl1NjQJTGlua1Bhcml0eTsJCS8qIFNYR19SQ1ZfU1RBVFVTX0xJTktfUEFSSVRZOiAqLworCXU2NAlMaW5rRWFybHk7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOiAqLworCXU2NAlMaW5rQnVmT2Zsb3c7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOiAqLworCXU2NAlMaW5rQ29kZTsJCS8qIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERTogKi8KKwl1NjQJTGlua0RyaWJibGU7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEU6ICovCisJdTY0CUxpbmtDcmM7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX0NSQzogKi8KKwl1NjQJTGlua09mbG93OwkJLyogU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzogKi8KKwl1NjQJTGlua1VmbG93OwkJLyogU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVzogKi8KIH07CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERVTUItTklDIFNlbmQgcGF0aCBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEVU1CLU5JQyBTZW5kIHBhdGggZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBTWEdfQ09NUExFVEVfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IpIHsgICAgICAgICAgICAgICAgICAgICAJCSAgICAJXAotCUFTU0VSVChfc2tiKTsJCQkJCQkJCQkJCQkJICAgIAkJCVwKLSAgICBkZXZfa2ZyZWVfc2tiX2lycShfc2tiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX0NPTVBMRVRFX0RVTUJfU0VORChfcEFkYXB0LCBfc2tiLCBfcGh5c19hZGRyLCBfc2l6ZSkgewkJXAorCUFTU0VSVChfc2tiKTsJCQkJCQkJCVwKKwlwY2lfdW5tYXBfc2luZ2xlKF9wQWRhcHQtPnBjaWRldiwgX3NpemUsIF9waHlzX2FkZHIsIFBDSV9ETUFfVE9ERVZJQ0UpOwlcCisJZGV2X2tmcmVlX3NrYl9pcnEoX3NrYik7ICAgICAgICAgICAgICAgICAgICAJCQkJXAogfQogCi0jZGVmaW5lIFNYR19EUk9QX0RVTUJfU0VORChfcEFkYXB0LCBfc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgCVwKLQlBU1NFUlQoX3NrYik7CQkJCQkJCQkJCQkJCSAgICAJCQlcCi0gICAgZGV2X2tmcmVlX3NrYihfc2tiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNYR19EUk9QX0RVTUJfU0VORChfcEFkYXB0LCBfc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJQVNTRVJUKF9za2IpOwkJCQkJCQlcCiB9CiAKLS8vIExvY2F0ZSBjdXJyZW50IHJlY2VpdmUgaGVhZGVyIGJ1ZmZlciBsb2NhdGlvbi4gIFVzZSB0aGlzCi0vLyBpbnN0ZWFkIG9mIFJjdkRhdGFIZHItPlZpcnR1YWxBZGRyZXNzIHNpbmNlIHRoZSBkYXRhCi0vLyBtYXkgaGF2ZSBiZWVuIG9mZnNldCBieSBTWEdfQURWQU5DRV9NRExfT0ZGU0VUCisvKgorICogTG9jYXRlIGN1cnJlbnQgcmVjZWl2ZSBoZWFkZXIgYnVmZmVyIGxvY2F0aW9uLiAgVXNlIHRoaXMKKyAqIGluc3RlYWQgb2YgUmN2RGF0YUhkci0+VmlydHVhbEFkZHJlc3Mgc2luY2UgdGhlIGRhdGEKKyAqIG1heSBoYXZlIGJlZW4gb2Zmc2V0IGJ5IFNYR19BRFZBTkNFX01ETF9PRkZTRVQKKyAqLwogI2RlZmluZSBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKF9SY3ZEYXRhSGRyKSAgICAgICAgKF9SY3ZEYXRhSGRyKS0+c2tiLT5kYXRhCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIER1bWItTklDIHJlY2VpdmUgcHJvY2Vzc2luZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vIERlZmluZSBhbiBTWEdfUEFDS0VUIGFzIGFuIE5ESVNfUEFDS0VUCisvKiBEdW1iLU5JQyByZWNlaXZlIHByb2Nlc3NpbmcgKi8KKy8qIERlZmluZSBhbiBTWEdfUEFDS0VUIGFzIGFuIE5ESVNfUEFDS0VUICovCiAjZGVmaW5lIFBTWEdfUEFDS0VUICAgICAgIHN0cnVjdCBza19idWZmICoKLS8vIEluZGljYXRpb25zIGFycmF5IHNpemUKKy8qIEluZGljYXRpb25zIGFycmF5IHNpemUgKi8KICNkZWZpbmUgU1hHX1JDVl9BUlJBWVNJWkUJNjQKIAotI2RlZmluZSBTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChfcEFkYXB0LCBfUmN2RGF0YUJ1ZmZlckhkcikgewkJCQlcCi0Jc3RydWN0IHNrX2J1ZmYgKiBza2I7CQkJCQkJCQkJCQkJICAgIFwKLSAgICBza2IgPSBhbGxvY19za2IoMjA0OCwgR0ZQX0FUT01JQyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHNrYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBza2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc2tiLT5uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUKF9wQWRhcHQsIF9SY3ZEYXRhQnVmZmVySGRyLCBCdWZmZXJTaXplKSB7XAorICAgIHN0cnVjdCBza19idWZmICogc2tiOwkJCQkJCVwKKyAgICBza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKF9wQWRhcHQtPm5ldGRldiwgQnVmZmVyU2l6ZSk7ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAJKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiID0gc2tiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgc2tiLT5uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LFwKKwkgICAgX1JjdkRhdGFCdWZmZXJIZHItPnNrYi0+ZGF0YSwgQnVmZmVyU2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsJXAorCWlmIChTWEdfSU5WQUxJRF9TR0woX1JjdkRhdGFCdWZmZXJIZHItPlBoeXNpY2FsQWRkcmVzcyxCdWZmZXJTaXplKSkgIFwKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIlNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUOiBSQ1YgcGFja2V0IiBcCisJCQkJCSJub24tNjRrIGJvdW5kYXJ5IGFsaWduZWRcbiIpOwlcCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgCShfUmN2RGF0YUJ1ZmZlckhkciktPnNrYiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCiB9CiAKLSNkZWZpbmUgU1hHX0ZSRUVfUkNWX1BBQ0tFVChfUmN2RGF0YUJ1ZmZlckhkcikgewkJCQkJCQlcCi0JaWYoKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiKSB7CQkJCQkJCQkJCQlcCi0JCWRldl9rZnJlZV9za2IoKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiKTsJCQkJCQkgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX0ZSRUVfUkNWX1BBQ0tFVChfUmN2RGF0YUJ1ZmZlckhkcikgewkJCVwKKwlpZigoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IpIHsJCQkJCVwKKwkJZGV2X2tmcmVlX3NrYigoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IpOwkJXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAogfQogCi0vLyBNYWNybyB0byBhZGQgYSBORElTX1BBQ0tFVCB0byBhbiBpbmRpY2F0aW9uIGFycmF5Ci0vLyBJZiB3ZSBmaWxsIHVwIG91ciBhcnJheSBvZiBwYWNrZXQgcG9pbnRlcnMsIHRoZW4gaW5kaWNhdGUgdGhpcwotLy8gYmxvY2sgdXAgbm93IGFuZCBzdGFydCBvbiBhIG5ldyBvbmUuCi0jZGVmaW5lCVNYR19BRERfUkNWX1BBQ0tFVChfcEFkYXB0LCBfUGFja2V0LCBfUHJldlBhY2tldCwgX0luZGljYXRpb25MaXN0LCBfTnVtUGFja2V0cykgeyBcCi0JKF9JbmRpY2F0aW9uTGlzdClbX051bVBhY2tldHNdID0gKF9QYWNrZXQpOwkJCQkJCQkJCQlcCi0JKF9OdW1QYWNrZXRzKSsrOwkJCQkJCQkJCQkJCQkJCQlcCi0JaWYoKF9OdW1QYWNrZXRzKSA9PSBTWEdfUkNWX0FSUkFZU0laRSkgewkJCQkJCQkJCQlcCi0JCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluZGljUmN2IiwJCQkJXAotCQkJCSAgIChfTnVtUGFja2V0cyksIDAsIDAsIDApOwkJCQkJCQkJCQkJXAotICAgICAgICBuZXRpZl9yeCgoX0luZGljYXRpb25MaXN0KSwoX051bVBhY2tldHMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkoX051bVBhY2tldHMpID0gMDsJCQkJCQkJCQkJCQkJCQlcCi0JfQkJCQkJCQkJCQkJCQkJCQkJCQkJXAorLyoKKyAqIE1hY3JvIHRvIGFkZCBhIE5ESVNfUEFDS0VUIHRvIGFuIGluZGljYXRpb24gYXJyYXkKKyAqIElmIHdlIGZpbGwgdXAgb3VyIGFycmF5IG9mIHBhY2tldCBwb2ludGVycywgdGhlbiBpbmRpY2F0ZSB0aGlzCisgKiBibG9jayB1cCBub3cgYW5kIHN0YXJ0IG9uIGEgbmV3IG9uZS4KKyAqLworI2RlZmluZQlTWEdfQUREX1JDVl9QQUNLRVQoX3BBZGFwdCwgX1BhY2tldCwgX1ByZXZQYWNrZXQsIF9JbmRpY2F0aW9uTGlzdCwgXAorCQkJCV9OdW1QYWNrZXRzKSB7IAkJCQlcCisJKF9JbmRpY2F0aW9uTGlzdClbX051bVBhY2tldHNdID0gKF9QYWNrZXQpOwkJCVwKKwkoX051bVBhY2tldHMpKys7CQkJCQkJXAorCWlmKChfTnVtUGFja2V0cykgPT0gU1hHX1JDVl9BUlJBWVNJWkUpIHsJCQlcCisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluZGljUmN2IiwJXAorCQkJCSAgIChfTnVtUGFja2V0cyksIDAsIDAsIDApOwkJXAorICAgICAgICBuZXRpZl9yeCgoX0luZGljYXRpb25MaXN0KSwoX051bVBhY2tldHMpKTsgICAgICAgICAgICAgICAgICAgICAJXAorCQkoX051bVBhY2tldHMpID0gMDsJCQkJCVwKKwl9CQkJCQkJCQlcCiB9CiAKLSNkZWZpbmUgU1hHX0lORElDQVRFX1BBQ0tFVFMoX3BBZGFwdCwgX0luZGljYXRpb25MaXN0LCBfTnVtUGFja2V0cykgewkJCVwKLQlpZihfTnVtUGFja2V0cykgewkJCQkJCQkJCQkJCQkJCVwKLQkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAkJCVwKLQkJCQkgICAoX051bVBhY2tldHMpLCAwLCAwLCAwKTsJCQkJCQkJCQkJXAotICAgICAgICBuZXRpZl9yeCgoX0luZGljYXRpb25MaXN0KSwoX051bVBhY2tldHMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCShfTnVtUGFja2V0cykgPSAwOwkJCQkJCQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorI2RlZmluZSBTWEdfSU5ESUNBVEVfUEFDS0VUUyhfcEFkYXB0LCBfSW5kaWNhdGlvbkxpc3QsIF9OdW1QYWNrZXRzKSB7CVwKKwlpZihfTnVtUGFja2V0cykgewkJCQkJCVwKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAlcCisJCQkJICAgKF9OdW1QYWNrZXRzKSwgMCwgMCwgMCk7CQlcCisgICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgIAlcCisJCShfTnVtUGFja2V0cykgPSAwOwkJCQkJXAorCX0JCQkJCQkJCVwKIH0KIAotI2RlZmluZSBTWEdfUkVJTklBVElBTElaRV9QQUNLRVQoX1BhY2tldCkJCQkJCQkJCQkJXAotCXt9ICAvKl9OZGlzUmVpbml0aWFsaXplUGFja2V0KF9QYWNrZXQpKi8gIC8qICB0aGlzIGlzIG5vdCBuZWNlc3Nhcnkgd2l0aCBhbiBza2IgKi8KKyNkZWZpbmUgU1hHX1JFSU5JQVRJQUxJWkVfUEFDS0VUKF9QYWNrZXQpCQkJCVwKKwl7fSAgLypfTmRpc1JlaW5pdGlhbGl6ZVBhY2tldChfUGFja2V0KSovCisJCSAvKiAgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IHdpdGggYW4gc2tiICovCiAKLS8vIERlZmluaXRpb25zIHRvIGluaXRpYWxpemUgRHVtYi1uaWMgUmVjZWl2ZSBOQkxzCi0jZGVmaW5lIFNYR19SQ1ZfUEFDS0VUX0JVRkZFUl9IRFIoX1BhY2tldCkgKCgoUFNYR19SQ1ZfTkJMX1JFU0VSVkVEKSgoX1BhY2tldCktPk1pbmlwb3J0UmVzZXJ2ZWRFeCkpLT5SY3ZEYXRhQnVmZmVySGRyKQorLyogRGVmaW5pdGlvbnMgdG8gaW5pdGlhbGl6ZSBEdW1iLW5pYyBSZWNlaXZlIE5CTHMgKi8KKyNkZWZpbmUgU1hHX1JDVl9QQUNLRVRfQlVGRkVSX0hEUihfUGFja2V0KSAoKChzdHJ1Y3Qgc3hnX3Jjdl9uYmxfcmVzZXJ2ZWQgKilcCisJCQkoKF9QYWNrZXQpLT5NaW5pcG9ydFJlc2VydmVkRXgpKS0+UmN2RGF0YUJ1ZmZlckhkcikKIAotI2RlZmluZSBTWEdfUkNWX1NFVF9DSEVDS1NVTV9JTkZPKF9QYWNrZXQsIF9DcGkpCVwKLQlORElTX1BFUl9QQUNLRVRfSU5GT19GUk9NX1BBQ0tFVCgoX1BhY2tldCksIFRjcElwQ2hlY2tzdW1QYWNrZXRJbmZvKSA9IChQVk9JRCkoX0NwaSkKKyNkZWZpbmUgU1hHX1JDVl9TRVRfQ0hFQ0tTVU1fSU5GTyhfUGFja2V0LCBfQ3BpKQkJCQlcCisJTkRJU19QRVJfUEFDS0VUX0lORk9fRlJPTV9QQUNLRVQoKF9QYWNrZXQpLCAJCQkJXAorCQkJVGNwSXBDaGVja3N1bVBhY2tldEluZm8pID0gKFBWT0lEKShfQ3BpKQogCiAjZGVmaW5lIFNYR19SQ1ZfU0VUX1RPRVBMSVRaKF9QYWNrZXQsIF9Ub2VwbGl0eiwgX1R5cGUsIF9GdW5jdGlvbikgewkJXAotCU5ESVNfUEFDS0VUX1NFVF9IQVNIX1ZBTFVFKChfUGFja2V0KSwgKF9Ub2VwbGl0eikpOwkJCQkJCVwKLQlORElTX1BBQ0tFVF9TRVRfSEFTSF9UWVBFKChfUGFja2V0KSwgKF9UeXBlKSk7CQkJCQkJCVwKLQlORElTX1BBQ0tFVF9TRVRfSEFTSF9GVU5DVElPTigoX1BhY2tldCksIChfRnVuY3Rpb24pKTsJCQkJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9WQUxVRSgoX1BhY2tldCksIChfVG9lcGxpdHopKTsJCQlcCisJTkRJU19QQUNLRVRfU0VUX0hBU0hfVFlQRSgoX1BhY2tldCksIChfVHlwZSkpOwkJCQlcCisJTkRJU19QQUNLRVRfU0VUX0hBU0hfRlVOQ1RJT04oKF9QYWNrZXQpLCAoX0Z1bmN0aW9uKSk7CQkJXAogfQogCi0jZGVmaW5lIFNYR19SQ1ZfU0VUX1ZMQU5fSU5GTyhfUGFja2V0LCBfVmxhbklkLCBfUHJpb3JpdHkpIHsJCQkJCVwKLQlORElTX1BBQ0tFVF84MDIxUV9JTkZPCV9QYWNrZXQ4MDIxcUluZm87CQkJCQkJCQkJXAotCV9QYWNrZXQ4MDIxcUluZm8uVGFnSGVhZGVyLlZsYW5JZCA9IChfVmxhbklkKTsJCQkJCQkJCVwKLQlfUGFja2V0ODAyMXFJbmZvLlRhZ0hlYWRlci5Vc2VyUHJpb3JpdHkgPSAoX1ByaW9yaXR5KTsJCQkJCQlcCisjZGVmaW5lIFNYR19SQ1ZfU0VUX1ZMQU5fSU5GTyhfUGFja2V0LCBfVmxhbklkLCBfUHJpb3JpdHkpIHsJCQlcCisJTkRJU19QQUNLRVRfODAyMVFfSU5GTwlfUGFja2V0ODAyMXFJbmZvOwkJCQlcCisJX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVmxhbklkID0gKF9WbGFuSWQpOwkJCQlcCisJX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVXNlclByaW9yaXR5ID0gKF9Qcmlvcml0eSk7CQkJXAogCU5ESVNfUEVSX1BBQ0tFVF9JTkZPX0ZST01fUEFDS0VUKChfUGFja2V0KSwgSWVlZTgwMjFRTmV0QnVmZmVyTGlzdEluZm8pID0gCVwKLQkJX1BhY2tldDgwMjFxSW5mby5WYWx1ZTsJCQkJCQkJCQkJCQkJXAorCQlfUGFja2V0ODAyMXFJbmZvLlZhbHVlOwkJCQkJCVwKIH0KIAotI2RlZmluZSBTWEdfQURKVVNUX1JDVl9QQUNLRVQoX1BhY2tldCwgX1JjdkRhdGFCdWZmZXJIZHIsIF9FdmVudCkgewkJCVwKLQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iUmN2IiwJCQlcCi0JCQkgICAoX1JjdkRhdGFCdWZmZXJIZHIpLCAoX1BhY2tldCksCQkJCQkJCQlcCi0JCQkgICAoX0V2ZW50KS0+U3RhdHVzLCAwKTsJICAgICAgICAgICAgICAgICAgICAJCQkJXAotCUFTU0VSVCgoX0V2ZW50KS0+TGVuZ3RoIDw9IChfUmN2RGF0YUJ1ZmZlckhkciktPlNpemUpOwkJCQkJXAotICAgIFBhY2tldC0+bGVuID0gKF9FdmVudCktPkxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX0FESlVTVF9SQ1ZfUEFDS0VUKF9QYWNrZXQsIF9SY3ZEYXRhQnVmZmVySGRyLCBfRXZlbnQpIHsJCVwKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iUmN2IiwJCVwKKwkJCSAgIChfUmN2RGF0YUJ1ZmZlckhkciksIChfUGFja2V0KSwJCQlcCisJCQkgICAoX0V2ZW50KS0+U3RhdHVzLCAwKTsJICAgICAgICAgICAgICAgICAgICAJXAorCS8qIEFTU0VSVCgoX0V2ZW50KS0+TGVuZ3RoIDw9IChfUmN2RGF0YUJ1ZmZlckhkciktPlNpemUpOyAqLwkJXAorCXNrYl9wdXQoUGFja2V0LCAoX0V2ZW50KS0+TGVuZ3RoKTsJCQkJCVwKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gTWFjcm9zIHRvIGZyZWUgYSByZWNlaXZlIGRhdGEgYnVmZmVyIGFuZCByZWNlaXZlIGRhdGEgZGVzY3JpcHRvciBibG9jawotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gTk9URSAtIExvY2sgbXVzdCBiZSBoZWxkIHdpdGggUkNWIG1hY3JvcwotI2RlZmluZSBTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCQkJCQlcCi0Jc3RydWN0IExJU1RfRU5UUlkgICAgIAkJCQkqX3BsZTsJCQkJCQkJCQkJXAotCV9IZHIgPSBOVUxMOwkJCQkJCQkJCQkJCQkJCQlcCi0JaWYoKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQpIHsJCQkJCQkJCQkJCVwKLQkJQVNTRVJUKCEoSXNMaXN0RW1wdHkoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMpKSk7CQkJCQkJXAotCQlfcGxlID0gUmVtb3ZlSGVhZExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMpOwkgICAgCQkJCVwKLQkJKF9IZHIpID0gY29udGFpbmVyX29mKF9wbGUsIHN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiwgRnJlZUxpc3QpOwkgICAgICAgIFwKLQkJKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQtLTsJCQkJCQkJCQkJXAotCQlBU1NFUlQoKF9IZHIpLT5TdGF0ZSA9PSBTWEdfQlVGRkVSX0ZSRUUpOwkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorLyoKKyAqIE1hY3JvcyB0byBmcmVlIGEgcmVjZWl2ZSBkYXRhIGJ1ZmZlciBhbmQgcmVjZWl2ZSBkYXRhIGRlc2NyaXB0b3IgYmxvY2sKKyAqIE5PVEUgLSBMb2NrIG11c3QgYmUgaGVsZCB3aXRoIFJDViBtYWNyb3MKKyAqLworI2RlZmluZSBTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCVwKKwlzdHJ1Y3QgbGlzdF9lbnRyeSAqX3BsZTsJCQkJCQlcCisJX0hkciA9IE5VTEw7CQkJCQkJCQlcCisJaWYoKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQpIHsJCQkJCVwKKwkJQVNTRVJUKCEoSXNMaXN0RW1wdHkoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMpKSk7CQlcCisJCV9wbGUgPSBSZW1vdmVIZWFkTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycyk7CSAgICAJXAorCQkoX0hkcikgPSBjb250YWluZXJfb2YoX3BsZSwgc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyLCAJXAorCQkJCQkJRnJlZUxpc3QpOwkgICAgICAgIAlcCisJCShfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50LS07CQkJCVwKKwkJQVNTRVJUKChfSGRyKS0+U3RhdGUgPT0gU1hHX0JVRkZFUl9GUkVFKTsJCQlcCisJfQkJCQkJCQkJCVwKIH0KIAotI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREFUQV9CVUZGRVIoX3BBZGFwdCwgX0hkcikgewkJCQkJCQlcCi0JU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUnRuREhkciIsCQkJXAotCQkJICAgKF9IZHIpLCAoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCwJCQkJCQlcCi0JCQkgICAoX0hkciktPlN0YXRlLCAoX0hkciktPlZpcnR1YWxBZGRyZXNzKTsJCQkJCQlcCi0vKglTWEdfUkVTVE9SRV9NRExfT0ZGU0VUKF9IZHIpOwkqLwkJCQkJCQkJCQlcCi0JKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQrKzsJCQkJCQkJCQkJXAotCUFTU0VSVCgoKF9wQWRhcHQpLT5BbGxSY3ZCbG9ja0NvdW50ICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spID49IChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50KTsgXAotCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCQkJCQlcCi0JKF9IZHIpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCQkJCQkJXAotCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzLCAmKChfSGRyKS0+RnJlZUxpc3QpKTsJCVwKKyNkZWZpbmUgU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKF9wQWRhcHQsIF9IZHIpIHsJCQkJXAorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJ0bkRIZHIiLAkJXAorCQkJICAgKF9IZHIpLCAoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCwJCVwKKwkJCSAgIChfSGRyKS0+U3RhdGUsIDAvKihfSGRyKS0+VmlydHVhbEFkZHJlc3MqLyk7CQlcCisvKglTWEdfUkVTVE9SRV9NRExfT0ZGU0VUKF9IZHIpOwkqLwkJCQkJXAorCShfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50Kys7CQkJCQlcCisJQVNTRVJUKCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgCVwKKwkJCQk+PSAoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCk7IAkJXAorCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCVwKKwkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzLCAmKChfSGRyKS0+RnJlZUxpc3QpKTsJXAogfQogCi0jZGVmaW5lIFNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKF9wQWRhcHQsIF9IZHIpIHsJCQkJCQlcCi0JQVNTRVJUKChfSGRyKS0+U3RhdGUgIT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKLQkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJCQkJCQlcCi0JKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tDb3VudCsrOwkJCQkJCQkJCQkJXAorI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREVTQ1JJUFRPUl9CTE9DSyhfcEFkYXB0LCBfSGRyKSB7CQkJCVwKKwlBU1NFUlQoKF9IZHIpLT5TdGF0ZSAhPSBTWEdfQlVGRkVSX0ZSRUUpOwkJCQlcCisJKF9IZHIpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCVwKKwkoX3BBZGFwdCktPkZyZWVSY3ZCbG9ja0NvdW50Kys7CQkJCQkJXAogCUFTU0VSVCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tDb3VudCk7CVwKLQlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tzLCAmKF9IZHIpLT5GcmVlTGlzdCk7CQkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCbG9ja3MsICYoX0hkciktPkZyZWVMaXN0KTsJCVwKIH0KIAotLy8gU0dMIG1hY3JvcwotI2RlZmluZSBTWEdfRlJFRV9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wsIF9OQikgewlcCi0Jc3Bpbl9sb2NrKCYoX3BBZGFwdCktPlNnbFFMb2NrKTsJCVwKLQkoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudCsrOwkJXAotCUFTU0VSVCgoX3BBZGFwdCktPkFsbFNnbEJ1ZmZlckNvdW50ID49IChfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50KTtcCi0JQVNTRVJUKCEoKF9TZ2wpLT5TdGF0ZSAmIFNYR19CVUZGRVJfRlJFRSkpOwlcCi0JKF9TZ2wpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCVwKLQlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycywgJihfU2dsKS0+RnJlZUxpc3QpOwlcCi0Jc3Bpbl91bmxvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJXAorLyogU0dMIG1hY3JvcyAqLworI2RlZmluZSBTWEdfRlJFRV9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wsIF9OQikgewkJCQlcCisJc3Bpbl9sb2NrX2lycXNhdmUoJihfcEFkYXB0KS0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CQkJXAorCShfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50Kys7CQkJCQlcCisJQVNTRVJUKChfcEFkYXB0KS0+QWxsU2dsQnVmZmVyQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQpOwlcCisJQVNTRVJUKCEoKF9TZ2wpLT5TdGF0ZSAmIFNYR19CVUZGRVJfRlJFRSkpOwkJCQlcCisJKF9TZ2wpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCVwKKwlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycywgJihfU2dsKS0+RnJlZUxpc3QpOwkJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihfcEFkYXB0KS0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CQlcCiB9CiAKLS8vIEdldCBhbiBTR0wgYnVmZmVyIGZyb20gdGhlIGZyZWUgcXVldWUuICBUaGUgZmlyc3QgcGFydCBvZiB0aGlzIG1hY3JvCi0vLyBhdHRlbXB0cyB0byBrZWVwIGFoZWFkIG9mIGJ1ZmZlciBkZXBsZXRpb24gYnkgYWxsb2NhdGluZyBtb3JlIHdoZW4KLS8vIHdlIGhpdCBhIG1pbmltdW0gdGhyZXNob2xkLiAgTm90ZSB0aGF0IHdlIGRvbid0IGdyYWIgdGhlIGxvY2sKLS8vIHVudGlsIGFmdGVyIHRoYXQuICBXZSdyZSBkZWFsaW5nIHdpdGggcm91bmQgbnVtYmVycyBoZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvLAotLy8gYW5kIG5vdCBncmFiYmluZyBpdCBhdm9pZHMgYSBwb3NzaWJsZSBkb3VibGUtdHJpcC4KLSNkZWZpbmUgU1hHX0dFVF9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wpIHsJCQkJXAotCXN0cnVjdCBMSVNUX0VOVFJZICpfcGxlOwkJCQkJCVwKKy8qCisgKiBHZXQgYW4gU0dMIGJ1ZmZlciBmcm9tIHRoZSBmcmVlIHF1ZXVlLiAgVGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBtYWNybworICogYXR0ZW1wdHMgdG8ga2VlcCBhaGVhZCBvZiBidWZmZXIgZGVwbGV0aW9uIGJ5IGFsbG9jYXRpbmcgbW9yZSB3aGVuCisgKiB3ZSBoaXQgYSBtaW5pbXVtIHRocmVzaG9sZC4gIE5vdGUgdGhhdCB3ZSBkb24ndCBncmFiIHRoZSBsb2NrCisgKiB1bnRpbCBhZnRlciB0aGF0LiAgV2UncmUgZGVhbGluZyB3aXRoIHJvdW5kIG51bWJlcnMgaGVyZSwgc28gd2UgZG9uJ3QgbmVlZCB0bywKKyAqIGFuZCBub3QgZ3JhYmJpbmcgaXQgYXZvaWRzIGEgcG9zc2libGUgZG91YmxlLXRyaXAuCisgKi8KKyNkZWZpbmUgU1hHX0dFVF9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wsIF9pcnEpIHsJCQlcCisJc3RydWN0IGxpc3RfZW50cnkgKl9wbGU7CQkJCQlcCiAJaWYgKChfcEFkYXB0LT5GcmVlU2dsQnVmZmVyQ291bnQgPCBTWEdfTUlOX1NHTF9CVUZGRVJTKSAmJglcCiAJICAgKF9wQWRhcHQtPkFsbFNnbEJ1ZmZlckNvdW50IDwgU1hHX01BWF9TR0xfQlVGRkVSUykgJiYJXAotCSAgIChfcEFkYXB0LT5BbGxvY2F0aW9uc1BlbmRpbmcgPT0gMCkpIHsJCQlcCisJICAgKGF0b21pY19yZWFkKCZfcEFkYXB0LT5wZW5kaW5nX2FsbG9jYXRpb25zKSA9PSAwKSkgewkJXAogCQlzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShfcEFkYXB0LAkJCVwKLQkJCShzaXplb2Yoc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUikgKyBTWEdfU0dMX0JVRl9TSVpFKSxcCisJCQkoc2l6ZW9mKHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIpICsgU1hHX1NHTF9CVUZfU0laRSksXAogCQkJU1hHX0JVRkZFUl9UWVBFX1NHTCk7CQkJCVwKIAl9CQkJCQkJCQlcCiAJX1NnbCA9IE5VTEw7CQkJCQkJCVwKLQlzcGluX2xvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJCQlcCisJaWYoIV9pcnEpCQkJCQkJCVwKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJihfcEFkYXB0KS0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CVwKKwllbHNlCQkJCQkJCQlcCisJCXNwaW5fbG9ja19pcnFzYXZlKCYoX3BBZGFwdCktPlNnbFFMb2NrLCBzZ2xfZmxhZ3MpOwlcCiAJaWYoKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQpIHsJCQkJXAogCQlBU1NFUlQoIShJc0xpc3RFbXB0eSgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycykpKTsJXAogCQlfcGxlID0gUmVtb3ZlSGVhZExpc3QoJihfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlcnMpOwlcCi0JCShfU2dsKSA9IGNvbnRhaW5lcl9vZihfcGxlLCBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSLCBGcmVlTGlzdCk7IFwKKwkJKF9TZ2wpID0gY29udGFpbmVyX29mKF9wbGUsIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIsIAlcCisJCQkJCQlGcmVlTGlzdCk7IAkJXAogICAgICAgICAgICAgKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQtLTsJCQkJXAogCQlBU1NFUlQoKF9TZ2wpLT5TdGF0ZSA9PSBTWEdfQlVGRkVSX0ZSRUUpOwkJXAogCQkoX1NnbCktPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOwkJCVwKIAkJKF9TZ2wpLT5wU2dsID0gTlVMTDsJCQkJCVwKIAl9CQkJCQkJCQlcCi0Jc3Bpbl91bmxvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJCQlcCisJaWYoIV9pcnEpCQkJCQkJCVwKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKF9wQWRhcHQpLT5TZ2xRTG9jaywgc2dsX2ZsYWdzKTtcCisJZWxzZQkJCQkJCQkJXAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoX3BBZGFwdCktPlNnbFFMb2NrLCBzZ2xfZmxhZ3MpO1wKIH0KIAotLy8KLS8vIFNYR19NVUxUSUNBU1RfQUREUkVTUwotLy8KLS8vIExpbmtlZCBsaXN0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMuCi1zdHJ1Y3QgU1hHX01VTFRJQ0FTVF9BRERSRVNTIHsKLQl1bnNpZ25lZCBjaGFyCQkJCQkJCUFkZHJlc3NbNl07Ci0Jc3RydWN0IFNYR19NVUxUSUNBU1RfQUREUkVTUwkqTmV4dDsKKy8qCisgKiBzdHJ1Y3Qgc3hnX211bHRpY2FzdF9hZGRyZXNzCisgKiBMaW5rZWQgbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICovCitzdHJ1Y3Qgc3hnX211bHRpY2FzdF9hZGRyZXNzIHsKKwl1bnNpZ25lZCBjaGFyCQkJQWRkcmVzc1s2XTsKKwlzdHJ1Y3Qgc3hnX211bHRpY2FzdF9hZGRyZXNzCSpOZXh0OwogfTsKIAotLy8gU3RydWN0dXJlIHRvIG1haW50YWluIGNoaW1uZXkgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgcXVldWVzLgotLy8gVGhpcyBzdHJ1Y3R1cmUgbWFpbnRhaW5zIE5FVF9CVUZGRVJfTElTVCBxdWV1ZXMgdGhhdCBhcmUKLS8vIGdpdmVuIHRvIHVzIHZpYSB0aGUgQ2hpbW5leSBNaW5pcG9ydFRjcE9mZmxvYWRTZW5kIGFuZAotLy8gTWluaXBvcnRUY3BPZmZsb2FkUmVjZWl2ZSByb3V0aW5lcy4gIFRoaXMgc3RydWN0dXJlIERPRVMgTk9UCi0vLyBtYW5hZ2Ugb3VyIGRhdGEgYnVmZmVyIHF1ZXVlCi1zdHJ1Y3QgU1hHX0JVRkZFUl9RVUVVRSB7Ci0JdTMyCQkJCQkJVHlwZTsJCQkvLyBTbG93IG9yIGZhc3QgLSBTZWUgYmVsb3cKLQl1MzIJCQkJCQlEaXJlY3Rpb247CQkvLyBYbXQgb3IgUmN2Ci0JdTMyCQkJCQkJQnl0ZXM7CQkJLy8gQnl0ZSBjb3VudAotCXUzMiAqICAgICAgICAJCQlIZWFkOwkJCS8vIFNlbmQgcXVldWUgaGVhZAotCXUzMiAqICAgICAgICAJCQlUYWlsOwkJCS8vIFNlbmQgcXVldWUgdGFpbAotLy8JUE5FVF9CVUZGRVJfTElTVAkJCU5leHROQkw7CQkvLyBTaG9ydCBjdXQgLSBuZXh0IE5CTAotLy8JUE5FVF9CVUZGRVIJCQkJCU5leHROQjsJCQkvLyBTaG9ydCBjdXQgLSBuZXh0IE5CCisvKgorICogU3RydWN0dXJlIHRvIG1haW50YWluIGNoaW1uZXkgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgcXVldWVzLgorICogVGhpcyBzdHJ1Y3R1cmUgbWFpbnRhaW5zIE5FVF9CVUZGRVJfTElTVCBxdWV1ZXMgdGhhdCBhcmUKKyAqIGdpdmVuIHRvIHVzIHZpYSB0aGUgQ2hpbW5leSBNaW5pcG9ydFRjcE9mZmxvYWRTZW5kIGFuZAorICogTWluaXBvcnRUY3BPZmZsb2FkUmVjZWl2ZSByb3V0aW5lcy4gIFRoaXMgc3RydWN0dXJlIERPRVMgTk9UCisgKiBtYW5hZ2Ugb3VyIGRhdGEgYnVmZmVyIHF1ZXVlCisgKi8KK3N0cnVjdCBzeGdfYnVmZmVyX3F1ZXVlIHsKKwl1MzIJVHlwZTsJCQkvKiBTbG93IG9yIGZhc3QgLSBTZWUgYmVsb3cgKi8KKwl1MzIJRGlyZWN0aW9uOwkJLyogWG10IG9yIFJjdiAqLworCXUzMglCeXRlczsJCQkvKiBCeXRlIGNvdW50ICovCisJdTMyICogIAlIZWFkOwkJCS8qIFNlbmQgcXVldWUgaGVhZCAqLworCXUzMiAqICAJVGFpbDsJCQkvKiBTZW5kIHF1ZXVlIHRhaWwgKi8KKy8qCVBORVRfQlVGRkVSX0xJU1QJTmV4dE5CTDsqLwkvKiBTaG9ydCBjdXQgLSBuZXh0IE5CTCAqLworLyoJUE5FVF9CVUZGRVIJCU5leHROQjsJKi8JLyogU2hvcnQgY3V0IC0gbmV4dCBOQiAqLwogfTsKIAogI2RlZmluZQkJU1hHX1NMT1dfU0VORF9CVUZGRVIJMAogI2RlZmluZQkJU1hHX0ZBU1RfU0VORF9CVUZGRVIJMQogI2RlZmluZSAJU1hHX1JFQ0VJVkVfQlVGRkVSCQkyCiAKLSNkZWZpbmUgU1hHX0lOSVRfQlVGRkVSKF9CdWZmZXIsIF9UeXBlKSB7IAkJCQkJCVwKLQkoX0J1ZmZlciktPlR5cGUgPSAoX1R5cGUpOwkJCQkJCQkJCVwKLQlpZigoX1R5cGUpID09IFNYR19SRUNFSVZFX0JVRkZFUikgewkJCQkJCQlcCi0JCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gMDsJCQkJCQkJCVwKLQl9IGVsc2UgewkJCQkJCQkJCQkJCQlcCisjZGVmaW5lIFNYR19JTklUX0JVRkZFUihfQnVmZmVyLCBfVHlwZSkgeyAJCQkJXAorCShfQnVmZmVyKS0+VHlwZSA9IChfVHlwZSk7CQkJCQlcCisJaWYoKF9UeXBlKSA9PSBTWEdfUkVDRUlWRV9CVUZGRVIpIHsJCQkJXAorCQkoX0J1ZmZlciktPkRpcmVjdGlvbiA9IDA7CQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCiAJCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gTkRJU19TR19MSVNUX1dSSVRFX1RPX0RFVklDRTsJXAotCX0JCQkJCQkJCQkJCQkJCQlcCi0JKF9CdWZmZXIpLT5CeXRlcyA9IDA7CQkJCQkJCQkJCVwKLQkoX0J1ZmZlciktPkhlYWQgPSBOVUxMOwkJCQkJCQkJCQlcCi0JKF9CdWZmZXIpLT5UYWlsID0gTlVMTDsJCQkJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwkoX0J1ZmZlciktPkJ5dGVzID0gMDsJCQkJCQlcCisJKF9CdWZmZXIpLT5IZWFkID0gTlVMTDsJCQkJCQlcCisJKF9CdWZmZXIpLT5UYWlsID0gTlVMTDsJCQkJCQlcCiB9CiAKIAotI2RlZmluZSBTWEdfUlNTX0NQVV9DT1VOVChfcEFkYXB0KSAJCQkJCQkJCVwKKyNkZWZpbmUgU1hHX1JTU19DUFVfQ09VTlQoX3BBZGFwdCkgCQkJCQlcCiAJKChfcEFkYXB0KS0+UnNzRW5hYmxlZCAJPyAgTlJfQ1BVUyA6IDEpCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEUklWRVIgYW5kIEFEQVBURVIgc3RydWN0dXJlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEUklWRVIgYW5kIEFEQVBURVIgc3RydWN0dXJlcyAqLwogCi0vLyBBZGFwdGVyIHN0YXRlcyAtIFRoZXNlIHN0YXRlcyBjbG9zZWx5IG1hdGNoIHRoZSBhZGFwdGVyIHN0YXRlcwotLy8gZG9jdW1lbnRlZCBpbiB0aGUgRERLICh3aXRoIGEgZmV3IGV4Y2VwdGlvbnMpLgorLyoKKyAqIEFkYXB0ZXIgc3RhdGVzIC0gVGhlc2Ugc3RhdGVzIGNsb3NlbHkgbWF0Y2ggdGhlIGFkYXB0ZXIgc3RhdGVzCisgKiBkb2N1bWVudGVkIGluIHRoZSBEREsgKHdpdGggYSBmZXcgZXhjZXB0aW9ucykuCisgKi8KIGVudW0gU1hHX1NUQVRFIHsKLQlTWEdfU1RBVEVfSU5JVElBTElaSU5HLAkJCS8vIEluaXRpYWxpemluZwotCVNYR19TVEFURV9CT09URElBRywJCQkJLy8gQm9vdC1EaWFnbm9zdGljIG1vZGUKLQlTWEdfU1RBVEVfUEFVU0lORywJCQkJLy8gUGF1c2luZwotCVNYR19TVEFURV9QQVVTRUQsCQkJCS8vIFBhdXNlZAotCVNYR19TVEFURV9SVU5OSU5HLAkJCQkvLyBSdW5uaW5nCi0JU1hHX1NUQVRFX1JFU0VUVElORywJCQkvLyBSZXNldCBpbiBwcm9ncmVzcwotCVNYR19TVEFURV9TTEVFUCwJCQkJLy8gU2xlZXBpbmcKLQlTWEdfU1RBVEVfRElBRywJCQkJCS8vIERpYWdub3N0aWMgbW9kZQotCVNYR19TVEFURV9IQUxUSU5HLAkJCQkvLyBIYWx0aW5nCi0JU1hHX1NUQVRFX0hBTFRFRCwJCQkJLy8gRG93biBvciBub3QtaW5pdGlhbGl6ZWQKLQlTWEdfU1RBVEVfU0hVVERPV04JCQkJLy8gc2h1dGRvd24KKwlTWEdfU1RBVEVfSU5JVElBTElaSU5HLAkJCS8qIEluaXRpYWxpemluZyAqLworCVNYR19TVEFURV9CT09URElBRywJCQkvKiBCb290LURpYWdub3N0aWMgbW9kZSAqLworCVNYR19TVEFURV9QQVVTSU5HLAkJCS8qIFBhdXNpbmcgKi8KKwlTWEdfU1RBVEVfUEFVU0VELAkJCS8qIFBhdXNlZCAqLworCVNYR19TVEFURV9SVU5OSU5HLAkJCS8qIFJ1bm5pbmcgKi8KKwlTWEdfU1RBVEVfUkVTRVRUSU5HLAkJCS8qIFJlc2V0IGluIHByb2dyZXNzICovCisJU1hHX1NUQVRFX1NMRUVQLAkJCS8qIFNsZWVwaW5nICovCisJU1hHX1NUQVRFX0RJQUcsCQkJCS8qIERpYWdub3N0aWMgbW9kZSAqLworCVNYR19TVEFURV9IQUxUSU5HLAkJCS8qIEhhbHRpbmcgKi8KKwlTWEdfU1RBVEVfSEFMVEVELAkJCS8qIERvd24gb3Igbm90LWluaXRpYWxpemVkICovCisJU1hHX1NUQVRFX1NIVVRET1dOCQkJLyogc2h1dGRvd24gKi8KIH07CiAKLS8vIExpbmsgc3RhdGUKKy8qIExpbmsgc3RhdGUgKi8KIGVudW0gU1hHX0xJTktfU1RBVEUgewogCVNYR19MSU5LX0RPV04sCiAJU1hHX0xJTktfVVAKIH07CiAKLS8vIExpbmsgaW5pdGlhbGl6YXRpb24gdGltZW91dCBpbiAxMDB1cyB1bml0cwotI2RlZmluZSBTWEdfTElOS19USU1FT1VUCTEwMDAwMAkJLy8gMTAgU2Vjb25kcyAtIFJFRFVDRSEKKy8qIExpbmsgaW5pdGlhbGl6YXRpb24gdGltZW91dCBpbiAxMDB1cyB1bml0cyAqLworI2RlZmluZSBTWEdfTElOS19USU1FT1VUCTEwMDAwMAkJLyogMTAgU2Vjb25kcyAtIFJFRFVDRSEgKi8KIAogCi0vLyBNaWNyb2NvZGUgZmlsZSBzZWxlY3Rpb24gY29kZXMKKy8qIE1pY3JvY29kZSBmaWxlIHNlbGVjdGlvbiBjb2RlcyAqLwogZW51bSBTWEdfVUNPREVfU0VMIHsKLQlTWEdfVUNPREVfU0FIQVJBLAkJCQkvLyBTYWhhcmEgdWNvZGUKLQlTWEdfVUNPREVfU0RJQUdDUFUsCQkJCS8vIFNhaGFyYSBDUFUgZGlhZ25vc3RpYyB1Y29kZQotCVNYR19VQ09ERV9TRElBR1NZUwkJCQkvLyBTYWhhcmEgc3lzdGVtIGRpYWdub3N0aWMgdWNvZGUKKwlTWEdfVUNPREVfU1lTVEVNLAkvKiBTeXN0ZW0gKG9wZXJhdGlvbmFsKSB1dWNvZGUgKi8KKwlTWEdfVUNPREVfU0RJQUdDUFUsCS8qIFN5c3RlbSBDUFUgZGlhZ25vc3RpYyB1Y29kZSAqLworCVNYR19VQ09ERV9TRElBR1NZUwkvKiBTeXN0ZW0gZGlhZ25vc3RpYyB1Y29kZSAqLwogfTsKIAogCiAjZGVmaW5lIFNYR19ESVNBQkxFX0FMTF9JTlRFUlJVUFRTKF9wYWRhcHQpIHN4Z19kaXNhYmxlX2ludGVycnVwdChfcGFkYXB0KQogI2RlZmluZSBTWEdfRU5BQkxFX0FMTF9JTlRFUlJVUFRTKF9wYWRhcHQpIHN4Z19lbmFibGVfaW50ZXJydXB0KF9wYWRhcHQpCiAKLS8vIFRoaXMgcHJvYmFibHkgbGl2ZXMgaW4gYSBwcm90by5oIGZpbGUuICBNb3ZlIGxhdGVyCisvKiBUaGlzIHByb2JhYmx5IGxpdmVzIGluIGEgcHJvdG8uaCBmaWxlLiAgTW92ZSBsYXRlciAqLwogI2RlZmluZSBTWEdfTVVMVElDQVNUX1BBQ0tFVChfcGV0aGVyKSAoKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFswXSAmIDB4MDEpCi0jZGVmaW5lIFNYR19CUk9BRENBU1RfUEFDS0VUKF9wZXRoZXIpICgoKih1MzIgKikoX3BldGhlciktPmV0aGVyX2Rob3N0ID09IDB4RkZGRkZGRkYpICYmIFwKLQkJCQkoKih1MTYgKikmKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFs0XSA9PSAweEZGRkYpKQorI2RlZmluZSBTWEdfQlJPQURDQVNUX1BBQ0tFVChfcGV0aGVyKSAJCQkJCVwKKwkJKCgqKHUzMiAqKShfcGV0aGVyKS0+ZXRoZXJfZGhvc3QgPT0gMHhGRkZGRkZGRikgJiYgCVwKKwkJKCoodTE2ICopJihfcGV0aGVyKS0+ZXRoZXJfZGhvc3RbNF0gPT0gMHhGRkZGKSkKIAotLy8gRm9yIERiZ1ByaW50cworLyogRm9yIERiZ1ByaW50cyAqLwogI2RlZmluZSBTWEdfSUQgICAgICBEUEZMVFJfSUhWTkVUV09SS19JRAogI2RlZmluZSBTWEdfRVJST1IgICBEUEZMVFJfRVJST1JfTEVWRUwKIAotLy8KLS8vIFNYR19EUklWRVIgc3RydWN0dXJlIC0KLS8vCi0vLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3hnIGRyaXZlci4gIFRoZXJlIGlzIG9ubHkKLS8vIG9uZSBvZiB0aGVzZSwgYW5kIGl0IGlzIGRlZmluZWQgYXMgYSBnbG9iYWwuCi1zdHJ1Y3QgU1hHX0RSSVZFUiB7Ci0Jc3RydWN0IGFkYXB0ZXJfdAkqQWRhcHRlcnM7CQkvLyBMaW5rZWQgbGlzdCBvZiBhZGFwdGVycwotCXVzaG9ydAkJCQlBZGFwdGVySUQ7CQkvLyBNYWludGFpbiB1bmlxdWUgYWRhcHRlciBJRAorLyoKKyAqIHN0cnVjdCBzeGdfZHJpdmVyIHN0cnVjdHVyZSAtCisgKgorICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN4ZyBkcml2ZXIuICBUaGVyZSBpcyBvbmx5CisgKiBvbmUgb2YgdGhlc2UsIGFuZCBpdCBpcyBkZWZpbmVkIGFzIGEgZ2xvYmFsLgorICovCisKK3N0cnVjdCBzeGdfZHJpdmVyIHsKKwlzdHJ1Y3QgYWRhcHRlcl90CSpBZGFwdGVyczsJLyogTGlua2VkIGxpc3Qgb2YgYWRhcHRlcnMgKi8KKwl1c2hvcnQJCQlBZGFwdGVySUQ7CS8qIE1haW50YWluIHVuaXF1ZSBhZGFwdGVyIElEICovCiB9OwogCiAjaWZkZWYgU1RBVFVTX1NVQ0NFU1MKICN1bmRlZiBTVEFUVVNfU1VDQ0VTUwogI2VuZGlmCiAKKy8qIFRPRE86IFdlIG5lZWQgdG8gdHJ5IGFuZCB1c2UgTkVUREVWX1RYXyogYmVmb3JlIHBvc3RpbmcgdGhpcyBvdXQgKi8KICNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgLTEKQEAgLTQwNCwzNCArNDE2LDM2IEBACiAjZGVmaW5lIFNMSUNfTUFYX0NBUkRTICAgICAgICAgICAgICAzMgogI2RlZmluZSBTTElDX01BWF9QT1JUUyAgICAgICAgICAgICAgNCAgICAgICAgLyogTWF4ICMgb2YgcG9ydHMgcGVyIGNhcmQgICAqLwogI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0vLyBEdW1wIGJ1ZmZlciBzaXplCi0vLwotLy8gVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKLS8vIGdpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KLS8vIE1vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbwotLy8ganVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KLSNkZWZpbmUgRFVNUF9CVUZfU0laRSAgICAgICAgICAgICAgIDB4M0MwMAorCisvKgorICogRHVtcCBidWZmZXIgc2l6ZQorICogVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKKyAqIGdpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KKyAqIE1vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbworICoganVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KKyAqLworI2RlZmluZSBEVU1QX0JVRl9TSVpFCTB4M0MwMAogI2VuZGlmCiAKICNkZWZpbmUgTUlOKGEsIGIpICgodTMyKShhKSA8ICh1MzIpKGIpID8gKGEpIDogKGIpKQogI2RlZmluZSBNQVgoYSwgYikgKCh1MzIpKGEpID4gKHUzMikoYikgPyAoYSkgOiAoYikpCiAKLXN0cnVjdCBtY2FzdF9hZGRyZXNzX3QgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzWzZdOwotICAgIHN0cnVjdCBtY2FzdF9hZGRyZXNzX3QgICAqbmV4dDsKK3N0cnVjdCBtY2FzdF9hZGRyZXNzIHsKKyAgICB1bnNpZ25lZCBjaGFyCSAgIGFkZHJlc3NbNl07CisgICAgc3RydWN0IG1jYXN0X2FkZHJlc3MgICAqbmV4dDsKIH07CiAKLSNkZWZpbmUgQ0FSRF9ET1dOICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIENBUkRfVVAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBDQVJEX0ZBSUwgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0FSRF9ESUFHICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIENBUkRfU0xFRVAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQVJEX0RPV04gICAgICAgIAkJMHgwMDAwMDAwMAorI2RlZmluZSBDQVJEX1VQICAgICAgICAgIAkJMHgwMDAwMDAwMQorI2RlZmluZSBDQVJEX0ZBSUwJICAgICAgICAJMHgwMDAwMDAwMgorI2RlZmluZSBDQVJEX0RJQUcgICAgICAgCQkweDAwMDAwMDAzCisjZGVmaW5lIENBUkRfU0xFRVAgICAgICAgCQkweDAwMDAwMDA0CiAKLSNkZWZpbmUgQURBUFRfRE9XTiAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIEFEQVBUX1VQICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBBREFQVF9GQUlMICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQURBUFRfUkVTRVQgICAgICAgICAgICAweDAzCi0jZGVmaW5lIEFEQVBUX1NMRUVQICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBREFQVF9ET1dOCSAgICAgICAgICAgICAJMHgwMAorI2RlZmluZSBBREFQVF9VUCAgICAgICAgCSAgICAgICAJMHgwMQorI2RlZmluZSBBREFQVF9GQUlMICAgICAgICAgICAgIAkJMHgwMgorI2RlZmluZSBBREFQVF9SRVNFVCAgICAgICAgICAgIAkJMHgwMworI2RlZmluZSBBREFQVF9TTEVFUCAgICAgICAgICAgIAkJMHgwNAogCiAjZGVmaW5lIEFEQVBUX0ZMQUdTX0JPT1RUSU1FICAgICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIEFEQVBUX0ZMQUdTX0lTNjRCSVQgICAgICAgICAgICAgMHgwMDAyCkBAIC00NDMsMjkgKzQ1NywzMCBAQAogI2RlZmluZSBBREFQVF9GTEFHU19TVEFUU19USU1FUl9TRVQgICAgIDB4MDA4MAogI2RlZmluZSBBREFQVF9GTEFHU19SRVNFVF9USU1FUl9TRVQgICAgIDB4MDEwMAogCi0jZGVmaW5lIExJTktfRE9XTiAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBMSU5LX0NPTkZJRyAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTElOS19VUCAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIExJTktfRE9XTgkJCTB4MDAKKyNkZWZpbmUgTElOS19DT05GSUcgIAkJCTB4MDEKKyNkZWZpbmUgTElOS19VUCAgICAJCQkweDAyCiAKLSNkZWZpbmUgTElOS18xME1CICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIExJTktfMTAwTUIgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBMSU5LX0FVVE9TUEVFRCAgICAgICAgIDB4MDIKLSNkZWZpbmUgTElOS18xMDAwTUIgICAgICAgICAgICAweDAzCi0jZGVmaW5lIExJTktfMTAwMDBNQiAgICAgICAgICAgMHgwNAorI2RlZmluZSBMSU5LXzEwTUIgICAgCQkJMHgwMAorI2RlZmluZSBMSU5LXzEwME1CICAgICAgICAgCQkweDAxCisjZGVmaW5lIExJTktfQVVUT1NQRUVEICAJCTB4MDIKKyNkZWZpbmUgTElOS18xMDAwTUIgICAgICAgIAkJMHgwMworI2RlZmluZSBMSU5LXzEwMDAwTUIgICAgICAgICAgCQkweDA0CiAKLSNkZWZpbmUgTElOS19IQUxGRCAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIExJTktfRlVMTEQgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBMSU5LX0FVVE9EICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTElOS19IQUxGRCAgICAgICAJCTB4MDAKKyNkZWZpbmUgTElOS19GVUxMRCAgICAgCQkJMHgwMQorI2RlZmluZSBMSU5LX0FVVE9EIAkJCTB4MDIKIAotI2RlZmluZSBNQUNfRElSRUNURUQgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUFDX0JDQVNUICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1BQ19NQ0FTVCAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfUFJPTUlTQyAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX0xPT1BCQUNLICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE1BQ19BTExNQ0FTVCAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBNQUNfRElSRUNURUQgCQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQUNfQkNBU1QgCQkJMHgwMDAwMDAwMgorI2RlZmluZSBNQUNfTUNBU1QgIAkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFDX1BST01JU0MgIAkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTUFDX0xPT1BCQUNLICAgCQkJMHgwMDAwMDAxMAorI2RlZmluZSBNQUNfQUxMTUNBU1QgIAkJCTB4MDAwMDAwMjAKIAogI2RlZmluZSBTTElDX0RVUExFWCh4KSAgICAoKHg9PUxJTktfRlVMTEQpID8gIkZEWCIgOiAiSERYIikKLSNkZWZpbmUgU0xJQ19TUEVFRCh4KSAgICAgKCh4PT1MSU5LXzEwME1CKSA/ICIxMDBNYiIgOiAoKHg9PUxJTktfMTAwME1CKSA/ICIxMDAwTWIiIDogIiAxME1iIikpCisjZGVmaW5lIFNMSUNfU1BFRUQoeCkgICAgICgoeD09TElOS18xMDBNQikgPyAiMTAwTWIiIDogCQkJXAorCQkJCSgoeD09TElOS18xMDAwTUIpID8gIjEwMDBNYiIgOiAiIDEwTWIiKSkKICNkZWZpbmUgU0xJQ19MSU5LU1RBVEUoeCkgKCh4PT1MSU5LX0RPV04pID8gIkRvd24iIDogIlVwICAiKQogI2RlZmluZSBTTElDX0FEQVBURVJfU1RBVEUoeCkgKCh4PT1BREFQVF9VUCkgPyAiVVAiIDogIkRvd24iKQogI2RlZmluZSBTTElDX0NBUkRfU1RBVEUoeCkgICAgKCh4PT1DQVJEX1VQKSA/ICJVUCIgOiAiRG93biIpCkBAIC00ODEsMzIgKzQ5NiwzNiBAQAogI2RlZmluZSBOVU1fQ0ZHX1NQQUNFUyAgICAgIDIKICNkZWZpbmUgTlVNX0NGR19SRUdTICAgICAgICA2NAogCi1zdHJ1Y3QgcGh5c2NhcmRfdCB7Ci0gICAgc3RydWN0IGFkYXB0ZXJfdCAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOwotICAgIHN0cnVjdCBwaHlzY2FyZF90ICpuZXh0OworLyoKKyAqIFdlIHNwbGl0IExTUyBzZW5kcyBhY3Jvc3MgZm91ciBtaWNyb2NvZGUgcXVldWVzIGRlcml2ZWQgZnJvbQorICogZGVzdGluYXRpb24gVENQIHBvcnQgKGlmIFRDUC9JUCkuCisgKi8KKyNkZWZpbmUgU1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSyAgICAweDMKKyNkZWZpbmUgSVNDU0lfUE9SVCAJICAgICAgICAgICAgIDB4YmMwYyAgICAgICAgICAgICAgICAgIC8qIDMyNjAgKi8KKworc3RydWN0IHBoeXNjYXJkIHsKKyAgICBzdHJ1Y3QgYWRhcHRlcl90CQkqYWRhcHRlcltTTElDX01BWF9QT1JUU107CisgICAgc3RydWN0IHBoeXNjYXJkCQkqbmV4dDsKICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYWRhcHRlcnNfYWxsb2NkOwogfTsKIAotc3RydWN0IHN4Z2Jhc2VfZHJpdmVyX3Qgeworc3RydWN0IHN4Z2Jhc2VfZHJpdmVyIHsKIAlzcGlubG9ja190CWRyaXZlcl9sb2NrOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CS8qIGlycXNhdmUgZm9yIHNwaW5sb2NrICovCiAJdTMyCQludW1fc3hnX2NhcmRzOwogCXUzMgkJbnVtX3N4Z19wb3J0czsKIAl1MzIJCW51bV9zeGdfcG9ydHNfYWN0aXZlOwogCXUzMgkJZHluYW1pY19pbnRhZ2c7Ci0Jc3RydWN0IHBoeXNjYXJkX3QJKnBoeXNfY2FyZDsKKwlzdHJ1Y3QgcGh5c2NhcmQJKnBoeXNfY2FyZDsKIH07CiAKIAogc3RydWN0IGFkYXB0ZXJfdCB7CiAJdm9pZCAqICAgICAgICAgICAgICAgaWZwOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBwb3J0OwotCXN0cnVjdCBwaHlzY2FyZF90ICAgICAgICAqcGh5c2NhcmQ7CisJc3RydWN0IG5hcGlfc3RydWN0IAluYXBpOworCXN0cnVjdCBwaHlzY2FyZCAgICAgICAgKnBoeXNjYXJkOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBwaHlzcG9ydDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgY2FyZGluZGV4OwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBjYXJkX3NpemU7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGNoaXBpZDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYnVzbnVtYmVyOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBzbG90bnVtYmVyOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBmdW5jdGlvbm51bWJlcjsKIAl1c2hvcnQgICAgICAgICAgICAgIHZlbmRpZDsKQEAgLTUxNCwzMiArNTMzLDIzIEBACiAJdXNob3J0ICAgICAgICAgICAgICBzdWJzeXNpZDsKIAl1MzIgICAgICAgICAgICAgaXJxOwogCi0Jdm9pZCAqICAgICAgICAgICAgICAgc3hnX2FkYXB0ZXI7Ci0JdTMyICAgICAgICAgICAgIG5CdXN5U2VuZDsKLQogCXZvaWQgX19pb21lbSAqCWJhc2VfYWRkcjsKIAl1MzIgICAgICAgICAgICAgbWVtb3J5bGVuZ3RoOwogCXUzMiAgICAgICAgICAgICBkcmFtYmFzZTsKIAl1MzIgICAgICAgICAgICAgZHJhbWxlbmd0aDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgcXVldWVzX2luaXRpYWxpemVkOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhbGxvY2F0ZWQ7CisJZW51bSBhc2ljX3R5cGUJYXNpY3R5cGU7ICAgICAgLyogdHlwZSBvZiBBU0lDIChjaGlwKSAqLwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhY3RpdmF0ZWQ7CiAJdTMyICAgICAgICAgICAgIGludHJyZWdpc3RlcmVkOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBpc3BfaW5pdGlhbGl6ZWQ7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGdlbm51bWJlcjsKLQl1MzIgICAgICAgICAgICAgY3VyYWRkcnVwcGVyOwotCXUzMiAgICAgICAgICAgICBpc3Jjb3B5OwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBzdGF0ZTsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua3N0YXRlOwotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3BlZWQ7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtkdXBsZXg7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBtYWNhZGRyWzZdOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBjdXJybWFjYWRkcls2XTsKIAl1MzIgICAgICAgICAgICAgbWFjb3B0czsKIAl1c2hvcnQgICAgICAgICAgICAgIGRldmZsYWdzX3ByZXY7CiAJdTY0ICAgICAgICAgICAgIG1jYXN0bWFzazsKLQlzdHJ1Y3QgbWNhc3RfYWRkcmVzc190ICAgKm1jYXN0YWRkcnM7CisJc3RydWN0IG1jYXN0X2FkZHJlc3MgICAqbWNhc3RhZGRyczsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAgIHBpbmd0aW1lcjsKIAl1MzIgICAgICAgICAgICAgcGluZ3RpbWVyc2V0OwogCXN0cnVjdCB0aW1lcl9saXN0ICAgc3RhdHN0aW1lcjsKQEAgLTU3NCwxMzUgKzU4NCwxNDAgQEAKIAl1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdF95aWVsZHM7CiAJdTMyICAgICAgICAgICAgIGludGFnZ19wZXJpb2Q7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0JdTMyICoJCQkJCU1pbmlwb3J0SGFuZGxlOwkJLy8gT3VyIG1pbmlwb3J0IGhhbmRsZQotCWVudW0gU1hHX1NUQVRFCQkJCQlTdGF0ZTsJCQkJLy8gQWRhcHRlciBzdGF0ZQotCWVudW0gU1hHX0xJTktfU1RBVEUJCQkJTGlua1N0YXRlOwkJCS8vIExpbmsgc3RhdGUKLQl1NjQJCQkJCQlMaW5rU3BlZWQ7CQkJLy8gTGluayBTcGVlZAotCXUzMgkJCQkJCVBvd2VyU3RhdGU7CQkJLy8gTkRJUyBwb3dlciBzdGF0ZQotCXN0cnVjdCBhZGFwdGVyX3QgICAJCSpOZXh0OwkJCQkvLyBMaW5rZWQgbGlzdAotCXVzaG9ydAkJCQkJCUFkYXB0ZXJJRDsJCQkvLyAxLi5uCi0JdW5zaWduZWQgY2hhcgkJCQkJCU1hY0FkZHJbNl07CQkJLy8gT3VyIHBlcm1hbmVudCBIVyBtYWMgYWRkcmVzcwotCXVuc2lnbmVkIGNoYXIJCQkJCQlDdXJyTWFjQWRkcls2XTsJCS8vIE91ciBDdXJyZW50IG1hYyBhZGRyZXNzCi0JcF9uZXRfZGV2aWNlICAgICAgICAgICAgICAgIG5ldGRldjsKLQlwX25ldF9kZXZpY2UgICAgICAgICAgICAgICAgbmV4dF9uZXRkZXZpY2U7Ci0Jc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAqIHBjaWRldjsKKwl1MzIgKgkJCU1pbmlwb3J0SGFuZGxlOwkJLyogT3VyIG1pbmlwb3J0IGhhbmRsZSAqLworCWVudW0gU1hHX1NUQVRFIAkJU3RhdGU7CQkJLyogQWRhcHRlciBzdGF0ZSAqLworCWVudW0gU1hHX0xJTktfU1RBVEUgCUxpbmtTdGF0ZTsJCS8qIExpbmsgc3RhdGUgKi8KKwl1NjQJCQlMaW5rU3BlZWQ7CQkvKiBMaW5rIFNwZWVkICovCisJdTMyCQkJUG93ZXJTdGF0ZTsJCS8qIE5ESVMgcG93ZXIgc3RhdGUgKi8KKwlzdHJ1Y3QgYWRhcHRlcl90ICAJKk5leHQ7CQkJLyogTGlua2VkIGxpc3QgKi8KKwl1c2hvcnQJCQlBZGFwdGVySUQ7CQkvKiAxLi5uICovCisJc3RydWN0IG5ldF9kZXZpY2UgKiAgICAgICAgIG5ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqICAgICAgICAgbmV4dF9uZXRkZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAqcGNpZGV2OwogCi0Jc3RydWN0IFNYR19NVUxUSUNBU1RfQUREUkVTUwkJKk11bHRpY2FzdEFkZHJzOwkJLy8gTXVsdGljYXN0IGxpc3QKLQl1NjQgICAgIAkJCQlNdWx0aWNhc3RNYXNrOwkJLy8gTXVsdGljYXN0IG1hc2sKLQl1MzIgKgkJCQkJSW50ZXJydXB0SGFuZGxlOwkvLyBSZWdpc3RlciBJbnRlcnJ1cHQgaGFuZGxlCi0JdTMyCQkJCQkJSW50ZXJydXB0TGV2ZWw7CQkvLyBGcm9tIFJlc291cmNlIGxpc3QKLQl1MzIJCQkJCQlJbnRlcnJ1cHRWZWN0b3I7CS8vIEZyb20gUmVzb3VyY2UgbGlzdAotCXNwaW5sb2NrX3QJQWRhcHRlckxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgYWRhcHRlciByb3V0aW5lcyAqLwotCXNwaW5sb2NrX3QJQml0NjRSZWdMb2NrOwkvKiBGb3Igd3JpdGluZyA2NC1iaXQgYWRkcmVzc2VzICovCi0Jc3RydWN0IFNYR19IV19SRUdTCQkJKkh3UmVnczsJCQkJLy8gU2FoYXJhIEhXIFJlZ2lzdGVyIE1lbW9yeSAoQkFSMC8xKQotCXN0cnVjdCBTWEdfVUNPREVfUkVHUwkJCSpVY29kZVJlZ3M7CQkJLy8gTWljcm9jb2RlIFJlZ2lzdGVyIE1lbW9yeSAoQkFSMi8zKQotCXN0cnVjdCBTWEdfVENCX1JFR1MJCQkqVGNiUmVnczsJCQkvLyBTYW1lIGFzIFVjb2RlIHJlZ3MgLSBTZWUgc3hnaHcuaAotCXVzaG9ydAkJCQkJCVJlc2V0RHBjQ291bnQ7CQkvLyBGb3IgdGltZW91dAotCXVzaG9ydAkJCQkJCVJzc0RwY0NvdW50OwkJLy8gRm9yIHRpbWVvdXQKLQl1c2hvcnQJCQkJCQlWZW5kb3JJRDsJCQkvLyBWZW5kb3IgSUQKLQl1c2hvcnQJCQkJCQlEZXZpY2VJRDsJCQkvLyBEZXZpY2UgSUQKLQl1c2hvcnQJCQkJCQlTdWJTeXN0ZW1JRDsJCS8vIFN1Yi1TeXN0ZW0gSUQKLQl1c2hvcnQJCQkJCQlGcmFtZVNpemU7CQkJLy8gTWF4aW11bSBmcmFtZSBzaXplCi0JdTMyICoJCQkJCURtYUhhbmRsZTsJCQkvLyBORElTIERNQSBoYW5kbGUKLQl1MzIgKgkJCQkJUGFja2V0UG9vbEhhbmRsZTsJLy8gVXNlZCB3aXRoIE5ESVMgNS4yIG9ubHkuICBEb24ndCBpZmRlZiBvdXQKLQl1MzIgKgkJCQkJQnVmZmVyUG9vbEhhbmRsZTsJLy8gVXNlZCB3aXRoIE5ESVMgNS4yIG9ubHkuICBEb24ndCBpZmRlZiBvdXQKLQl1MzIJCQkJCQlNYWNGaWx0ZXI7CQkJLy8gTkRJUyBNQUMgRmlsdGVyCi0JdXNob3J0CQkJCQkJSXBJZDsJCQkJLy8gRm9yIHNsb3dwYXRoCi0Jc3RydWN0IFNYR19FVkVOVF9SSU5HCQkJKkV2ZW50UmluZ3M7CQkJLy8gSG9zdCBldmVudCByaW5ncy4gIDEvQ1BVIHRvIDE2IG1heAotCWRtYV9hZGRyX3QgICAgICAgICAgICAgIAlQRXZlbnRSaW5nczsJCS8vIFBoeXNpY2FsIGFkZHJlc3MKLQl1MzIJCQkJCQlOZXh0RXZlbnRbU1hHX01BWF9SU1NdOwkvLyBDdXJyZW50IGxvY2F0aW9uIGluIHJpbmcKLQlkbWFfYWRkcl90ICAgICAgICAgIAkJUFRjYkJ1ZmZlcnM7CQkvLyBUQ0IgQnVmZmVycyAtIHBoeXNpY2FsIGFkZHJlc3MKLQlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQVGNiQ29tcEJ1ZmZlcnM7CS8vIFRDQiBDb21wb3NpdGUgQnVmZmVycyAtIHBoeXMgYWRkcgotCXN0cnVjdCBTWEdfWE1UX1JJTkcJCQkJKlhtdFJpbmdzOwkJCS8vIFRyYW5zbWl0IHJpbmdzCi0JZG1hX2FkZHJfdAkJICAgICAgICAgICAgUFhtdFJpbmdzOwkJCS8vIFRyYW5zbWl0IHJpbmdzIC0gcGh5c2ljYWwgYWRkcmVzcwotCXN0cnVjdCBTWEdfUklOR19JTkZPCQkJCVhtdFJpbmdaZXJvSW5mbzsJLy8gVHJhbnNtaXQgcmluZyAwIGluZm8KKwlzdHJ1Y3Qgc3hnX211bHRpY2FzdF9hZGRyZXNzCSpNdWx0aWNhc3RBZGRyczsgLyogTXVsdGljYXN0IGxpc3QgKi8KKwl1NjQgICAgIAkJTXVsdGljYXN0TWFzazsJCS8qIE11bHRpY2FzdCBtYXNrICovCisJdTMyIAkJCSpJbnRlcnJ1cHRIYW5kbGU7CS8qIFJlZ2lzdGVyIEludGVycnVwdCBoYW5kbGUgKi8KKwl1MzIJCQlJbnRlcnJ1cHRMZXZlbDsJCS8qIEZyb20gUmVzb3VyY2UgbGlzdCAqLworCXUzMgkJCUludGVycnVwdFZlY3RvcjsJLyogRnJvbSBSZXNvdXJjZSBsaXN0ICovCisJc3BpbmxvY2tfdAkJQWRhcHRlckxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgYWRhcHRlciByb3V0aW5lcyAqLworCXNwaW5sb2NrX3QJCUJpdDY0UmVnTG9jazsJLyogRm9yIHdyaXRpbmcgNjQtYml0IGFkZHJlc3NlcyAqLworCXN0cnVjdCBzeGdfaHdfcmVncwkqSHdSZWdzOwkvKiBTYWhhcmEgSFcgUmVnaXN0ZXIgTWVtb3J5IChCQVIwLzEpICovCisJc3RydWN0IHN4Z191Y29kZV9yZWdzCSpVY29kZVJlZ3M7CS8qIE1pY3JvY29kZSBSZWdpc3RlciBNZW1vcnkgKEJBUjIvMykgKi8KKwlzdHJ1Y3Qgc3hnX3RjYl9yZWdzCSpUY2JSZWdzOwkvKiBTYW1lIGFzIFVjb2RlIHJlZ3MgLSBTZWUgc3hnaHcuaCAqLworCXVzaG9ydCAgICAgICAgIAlGcmFtZVNpemU7CS8qIE1heGltdW0gZnJhbWUgc2l6ZSAqLworCXUzMiAqCQlEbWFIYW5kbGU7CS8qIE5ESVMgRE1BIGhhbmRsZSAqLworCXUzMiAqCQlQYWNrZXRQb29sSGFuZGxlOwkvKiBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dCAqLworCXUzMiAqCQlCdWZmZXJQb29sSGFuZGxlOwkvKiBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dCAqLworCXUzMgkJTWFjRmlsdGVyOwkJLyogTkRJUyBNQUMgRmlsdGVyICovCisJc3RydWN0IHN4Z19ldmVudF9yaW5nCSpFdmVudFJpbmdzOwkvKiBIb3N0IGV2ZW50IHJpbmdzLiAgMS9DUFUgdG8gMTYgbWF4ICovCisJZG1hX2FkZHJfdCAgICAgICAgICAgICAJUEV2ZW50UmluZ3M7CS8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MzIJCU5leHRFdmVudFtTWEdfTUFYX1JTU107CS8qIEN1cnJlbnQgbG9jYXRpb24gaW4gcmluZyAqLworCWRtYV9hZGRyX3QgICAgIAlQVGNiQnVmZmVyczsJCS8qIFRDQiBCdWZmZXJzIC0gcGh5c2ljYWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QJUFRjYkNvbXBCdWZmZXJzOwkvKiBUQ0IgQ29tcG9zaXRlIEJ1ZmZlcnMgLSBwaHlzIGFkZHIgKi8KKwlzdHJ1Y3Qgc3hnX3htdF9yaW5nCSpYbXRSaW5nczsJLyogVHJhbnNtaXQgcmluZ3MgKi8KKwlkbWFfYWRkcl90CQlQWG10UmluZ3M7CS8qIFRyYW5zbWl0IHJpbmdzIC0gcGh5c2ljYWwgYWRkcmVzcyAqLworCXN0cnVjdCBzeGdfcmluZ19pbmZvCVhtdFJpbmdaZXJvSW5mbzsJLyogVHJhbnNtaXQgcmluZyAwIGluZm8gKi8KKwogCXNwaW5sb2NrX3QJWG10WmVyb0xvY2s7CS8qIFRyYW5zbWl0IHJpbmcgMCBsb2NrICovCi0JdTMyICoJCQkJCVhtdFJpbmdaZXJvSW5kZXg7CS8vIFNoYXJlZCBYTVQgcmluZyAwIGluZGV4Ci0JZG1hX2FkZHJfdCAgICAgICAgICAJCVBYbXRSaW5nWmVyb0luZGV4OwkvLyBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleCAtIHBoeXNpY2FsCi0Jc3RydWN0IExJU1RfRU5UUlkJCQkJCUZyZWVQcm90b2NvbEhlYWRlcnM7Ly8gRnJlZSBwcm90b2NvbCBoZWFkZXJzCi0JdTMyCQkJCQkJRnJlZVByb3RvSGRyQ291bnQ7CS8vIENvdW50Ci0Jdm9pZCAqCQkJCQkJUHJvdG9jb2xIZWFkZXJzOwkvLyBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXIKLQlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQUHJvdG9jb2xIZWFkZXJzOwkvLyBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXJzIC0gcGh5cworCXUzMiAqCQlYbXRSaW5nWmVyb0luZGV4OwkvKiBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleCAqLworCWRtYV9hZGRyX3QgICAgIAlQWG10UmluZ1plcm9JbmRleDsJLyogU2hhcmVkIFhNVCByaW5nIDAgaW5kZXggLSBwaHlzaWNhbCAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVQcm90b2NvbEhlYWRlcnM7LyogRnJlZSBwcm90b2NvbCBoZWFkZXJzICovCisJdTMyCQlGcmVlUHJvdG9IZHJDb3VudDsJLyogQ291bnQgKi8KKwl2b2lkICoJCVByb3RvY29sSGVhZGVyczsJLyogQmxvY2sgb2YgcHJvdG9jb2wgaGVhZGVyICovCisJZG1hX2FkZHJfdAlQUHJvdG9jb2xIZWFkZXJzOwkvKiBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXJzIC0gcGh5cyAqLwogCi0Jc3RydWN0IFNYR19SQ1ZfUklORwkJKlJjdlJpbmdzOwkJCS8vIFJlY2VpdmUgcmluZ3MKLQlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQUmN2UmluZ3M7CQkJLy8gUmVjZWl2ZSByaW5ncyAtIHBoeXNpY2FsIGFkZHJlc3MKLQlzdHJ1Y3QgU1hHX1JJTkdfSU5GTwkJCQlSY3ZSaW5nWmVyb0luZm87CS8vIFJlY2VpdmUgcmluZyAwIGluZm8KKwlzdHJ1Y3Qgc3hnX3Jjdl9yaW5nCSpSY3ZSaW5nczsJLyogUmVjZWl2ZSByaW5ncyAqLworCWRtYV9hZGRyX3QJUFJjdlJpbmdzOwkJLyogUmVjZWl2ZSByaW5ncyAtIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzCSp1Y29kZV9zdGF0czsJCS8qIFVjb2RlIFN0YXRzICAqLworCS8qIFVjb2RlIFN0YXRzIC0gcGh5c2ljYWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QJICAgICAgICBwdWNvZGVfc3RhdHM7CiAKLQl1MzIgKgkJCQkJSXNyOwkJCQkvLyBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyCi0JZG1hX2FkZHJfdAkgICAgICAgICAgICAJUElzcjsJCQkJLy8gSVNSIC0gcGh5c2ljYWwgYWRkcmVzcwotCXUzMgkJCQkJCUlzckNvcHlbU1hHX01BWF9SU1NdOwkvLyBDb3B5IG9mIElTUgotCXVzaG9ydAkJCQkJCUludGVycnVwdHNFbmFibGVkOwkvLyBCaXRtYXNrIG9mIGVuYWJsZWQgdmVjdG9ycwotCXVuc2lnbmVkIGNoYXIgKgkJCQkJCUluZGlyZWN0aW9uVGFibGU7CS8vIFJTUyBpbmRpcmVjdGlvbiB0YWJsZQotCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBJbmRpcmVjdGlvblRhYmxlOwkvLyBQaHlzaWNhbCBhZGRyZXNzCi0JdXNob3J0CQkJCQkJUnNzVGFibGVTaXplOwkJLy8gRnJvbSBORElTX1JFQ0VJVkVfU0NBTEVfUEFSQU1FVEVSUwotCXVzaG9ydAkJCQkJCUhhc2hLZXlTaXplOwkJLy8gRnJvbSBORElTX1JFQ0VJVkVfU0NBTEVfUEFSQU1FVEVSUwotCXVuc2lnbmVkIGNoYXIJCQkJCQlIYXNoU2VjcmV0S2V5WzQwXTsJLy8gcnNzIGtleQotCXUzMgkJCQkJCUhhc2hJbmZvcm1hdGlvbjsKLQkvLyBSZWNlaXZlIGJ1ZmZlciBxdWV1ZXMKLQlzcGlubG9ja190CVJjdlFMb2NrOwkvKiBSZWNlaXZlIFF1ZXVlIExvY2sgKi8KLQlzdHJ1Y3QgTElTVF9FTlRSWQkJCQkJRnJlZVJjdkJ1ZmZlcnM7CQkvLyBGcmVlIFNYR19EQVRBX0JVRkZFUiBxdWV1ZQotCXN0cnVjdCBMSVNUX0VOVFJZCQkJCQlGcmVlUmN2QmxvY2tzOwkJLy8gRnJlZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgUQotCXN0cnVjdCBMSVNUX0VOVFJZCQkJCQlBbGxSY3ZCbG9ja3M7CQkvLyBBbGwgU1hHX1JDVl9CTE9DS3MKLQl1c2hvcnQJCQkJCQlGcmVlUmN2QnVmZmVyQ291bnQ7CS8vIE51bWJlciBvZiBmcmVlIHJjdiBkYXRhIGJ1ZmZlcnMKLQl1c2hvcnQJCQkJCQlGcmVlUmN2QmxvY2tDb3VudDsJLy8gIyBvZiBmcmVlIHJjdiBkZXNjcmlwdG9yIGJsb2NrcwotCXVzaG9ydAkJCQkJCUFsbFJjdkJsb2NrQ291bnQ7CS8vIE51bWJlciBvZiB0b3RhbCByZWNlaXZlIGJsb2NrcwotCXVzaG9ydAkJCQkJCVJlY2VpdmVCdWZmZXJTaXplOwkvLyBTWEdfUkNWX0RBVEEvSlVNQk9fQlVGRkVSX1NJWkUgb25seQotCXUzMgkJCQkJCUFsbG9jYXRpb25zUGVuZGluZzsJLy8gUmVjZWl2ZSBhbGxvY2F0aW9uIHBlbmRpbmcKLQl1MzIJCQkJCQlSY3ZCdWZmZXJzT25DYXJkOwkvLyBTWEdfREFUQV9CVUZGRVJTIG93bmVkIGJ5IGNhcmQKLQkvLyBTR0wgYnVmZmVycworCXN0cnVjdCBzeGdfcmluZ19pbmZvCVJjdlJpbmdaZXJvSW5mbzsJLyogUmVjZWl2ZSByaW5nIDAgaW5mbyAqLworCisJdTMyICoJCUlzcjsJCS8qIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlkbWFfYWRkcl90CVBJc3I7CQkvKiBJU1IgLSBwaHlzaWNhbCBhZGRyZXNzICovCisJdTMyCQlJc3JDb3B5W1NYR19NQVhfUlNTXTsJLyogQ29weSBvZiBJU1IgKi8KKwl1c2hvcnQJCUludGVycnVwdHNFbmFibGVkOwkvKiBCaXRtYXNrIG9mIGVuYWJsZWQgdmVjdG9ycyAqLworCXVuc2lnbmVkIGNoYXIgCSpJbmRpcmVjdGlvblRhYmxlOwkvKiBSU1MgaW5kaXJlY3Rpb24gdGFibGUgKi8KKwlkbWFfYWRkcl90CVBJbmRpcmVjdGlvblRhYmxlOwkvKiBQaHlzaWNhbCBhZGRyZXNzICovCisJdXNob3J0CQlSc3NUYWJsZVNpemU7CQkvKiBGcm9tIE5ESVNfUkVDRUlWRV9TQ0FMRV9QQVJBTUVURVJTICovCisJdXNob3J0CQlIYXNoS2V5U2l6ZTsJCS8qIEZyb20gTkRJU19SRUNFSVZFX1NDQUxFX1BBUkFNRVRFUlMgKi8KKwl1bnNpZ25lZCBjaGFyCUhhc2hTZWNyZXRLZXlbNDBdOwkvKiByc3Mga2V5ICovCisJdTMyCQlIYXNoSW5mb3JtYXRpb247CisJLyogUmVjZWl2ZSBidWZmZXIgcXVldWVzICovCisJc3BpbmxvY2tfdCAgICAgIFJjdlFMb2NrOyAgICAgICAJLyogUmVjZWl2ZSBRdWV1ZSBMb2NrICovCisJc3RydWN0IGxpc3RfZW50cnkJRnJlZVJjdkJ1ZmZlcnM7CQkvKiBGcmVlIFNYR19EQVRBX0JVRkZFUiBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVSY3ZCbG9ja3M7CQkvKiBGcmVlIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBRICovCisJc3RydWN0IGxpc3RfZW50cnkJQWxsUmN2QmxvY2tzOwkJLyogQWxsIFNYR19SQ1ZfQkxPQ0tzICovCisJdXNob3J0CQlGcmVlUmN2QnVmZmVyQ291bnQ7CS8qIE51bWJlciBvZiBmcmVlIHJjdiBkYXRhIGJ1ZmZlcnMgKi8KKwl1c2hvcnQJCUZyZWVSY3ZCbG9ja0NvdW50OwkvKiAjIG9mIGZyZWUgcmN2IGRlc2NyaXB0b3IgYmxvY2tzICovCisJdXNob3J0CQlBbGxSY3ZCbG9ja0NvdW50OwkvKiBOdW1iZXIgb2YgdG90YWwgcmVjZWl2ZSBibG9ja3MgKi8KKwl1c2hvcnQJCVJlY2VpdmVCdWZmZXJTaXplOwkvKiBTWEdfUkNWX0RBVEEvSlVNQk9fQlVGRkVSX1NJWkUgb25seSAqLworCS8qIENvbnZlcnRlZCB0aGlzIHRvIGEgYXRvbWljIHZhcmlhYmxlCisJdTMyCQkJQWxsb2NhdGlvbnNQZW5kaW5nOwkqLworCWF0b21pY190CQlwZW5kaW5nX2FsbG9jYXRpb25zOworCXUzMgkJQWxsb2NhdGlvbnNQZW5kaW5nOwkvKiBSZWNlaXZlIGFsbG9jYXRpb24gcGVuZGluZyAqLworCXUzMgkJUmN2QnVmZmVyc09uQ2FyZDsJLyogU1hHX0RBVEFfQlVGRkVSUyBvd25lZCBieSBjYXJkICovCisJLyogU0dMIGJ1ZmZlcnMgKi8KIAlzcGlubG9ja190CVNnbFFMb2NrOwkvKiBTR0wgUXVldWUgTG9jayAqLwotCXN0cnVjdCBMSVNUX0VOVFJZCQkJCQlGcmVlU2dsQnVmZmVyczsJCS8vIEZyZWUgU1hHX1NDQVRURVJfR0FUSEVSCi0Jc3RydWN0IExJU1RfRU5UUlkJCQkJCUFsbFNnbEJ1ZmZlcnM7CQkvLyBBbGwgU1hHX1NDQVRURVJfR0FUSEVSCi0JdXNob3J0CQkJCQkJRnJlZVNnbEJ1ZmZlckNvdW50OwkvLyBOdW1iZXIgb2YgZnJlZSBTR0wgYnVmZmVycwotCXVzaG9ydAkJCQkJCUFsbFNnbEJ1ZmZlckNvdW50OwkvLyBOdW1iZXIgb2YgdG90YWwgU0dMIGJ1ZmZlcnMKLQl1MzIJCQkJCQlDdXJyZW50VGltZTsJCS8vIFRpY2sgY291bnQKLQl1MzIJCQkJCQlGYXN0cGF0aENvbm5lY3Rpb25zOy8vICMgb2YgZmFzdHBhdGggY29ubmVjdGlvbnMKLQkvLyBWYXJpb3VzIHNpbmdsZS1iaXQgZmxhZ3M6Ci0JdTMyCQkJCQkJQmFzaWNBbGxvY2F0aW9uczoxOwkvLyBMb2NrcyBhbmQgbGlzdGhlYWRzCi0JdTMyCQkJCQkJSW50UmVnaXN0ZXJlZDoxOwkvLyBJbnRlcnJ1cHQgcmVnaXN0ZXJlZAotCXUzMgkJCQkJCVBpbmdPdXRzdGFuZGluZzoxOwkvLyBQaW5nIG91dHN0YW5kaW5nIHRvIGNhcmQKLQl1MzIJCQkJCQlEZWFkOjE7CQkJCS8vIENhcmQgZGVhZAotCXUzMgkJCQkJCUR1bXBEcml2ZXI6MTsJCS8vIE9JRF9TTElDX0RSSVZFUl9EVU1QIHJlcXVlc3QKLQl1MzIJCQkJCQlEdW1wQ2FyZDoxOwkJCS8vIE9JRF9TTElDX0NBUkRfRFVNUCByZXF1ZXN0Ci0JdTMyCQkJCQkJRHVtcENtZFJ1bm5pbmc6MTsJLy8gRHVtcCBjb21tYW5kIGluIHByb2dyZXNzCi0JdTMyCQkJCQkJRGVidWdSdW5uaW5nOjE7CQkvLyBBR0RCIGRlYnVnIGluIHByb2dyZXNzCi0JdTMyCQkJCQkJSnVtYm9FbmFibGVkOjE7CQkvLyBKdW1ibyBmcmFtZXMgZW5hYmxlZAotCXUzMgkJCQkJCU1zaUVuYWJsZWQ6MTsJCS8vIE1TSSBpbnRlcnJ1cHQgZW5hYmxlZAotCXUzMgkJCQkJCVJzc0VuYWJsZWQ6MTsJCS8vIFJTUyBFbmFibGVkCi0JdTMyCQkJCQkJRmFpbE9uQmFkRWVwcm9tOjE7CS8vIEZhaWwgb24gQmFkIEVlcHJvbQotCXUzMgkJCQkJCURpYWdTdGFydDoxOwkJLy8gSW5pdCBhZGFwdGVyIGZvciBkaWFnbm9zdGljIHN0YXJ0Ci0JLy8gU3RhdHMKLQl1MzIJCQkJCQlQZW5kaW5nUmN2Q291bnQ7CS8vIE91dHN0YW5kaW5nIHJjdiBpbmRpY2F0aW9ucwotCXUzMgkJCQkJCVBlbmRpbmdYbXRDb3VudDsJLy8gT3V0c3RhbmRpbmcgc2VuZCByZXF1ZXN0cwotCXN0cnVjdCBTWEdfU1RBVFMJCQkJU3RhdHM7CQkJCS8vIFN0YXRpc3RpY3MKLQl1MzIJCQkJCQlSZWFzc0J1ZnM7CQkJLy8gTnVtYmVyIG9mIHJlYXNzZW1ibHkgYnVmZmVycwotCS8vIENhcmQgQ3Jhc2ggSW5mbwotCXVzaG9ydAkJCQkJCUNyYXNoTG9jYXRpb247CQkvLyBNaWNyb2NvZGUgY3Jhc2ggbG9jYXRpb24KLQl1bnNpZ25lZCBjaGFyCQkJCQkJQ3Jhc2hDcHU7CQkJLy8gU2FoYXJhIENQVSBJRAotCS8vIERpYWdub3N0aWNzCi0JLy8JUERJQUdfQ01ECQkJCQlEaWFnQ21kczsJCQkvLyBMaXN0IG9mIGZyZWUgZGlhZ25vc3RpYyBjb21tYW5kcwotCS8vCVBESUFHX0JVRkZFUgkJCQlEaWFnQnVmZmVyczsJCS8vIExpc3Qgb2YgZnJlZSBkaWFnbm9zdGljIGJ1ZmZlcnMKLQkvLwlQRElBR19SRVEJCQkJCURpYWdSZXFROwkJCS8vIExpc3Qgb2Ygb3V0c3RhbmRpbmcgKGFzeW5jaHJvbm91cykgZGlhZyByZXF1ZXN0cwotCS8vCXUzMgkJCQkJCURpYWdDbWRUaW1lb3V0OwkJLy8gVGltZSBvdXQgZm9yIGRpYWcgY21kcyAoc2Vjb25kcykgWFhYVE9ETyAtIHJlcGxhY2Ugd2l0aCBTWEdfUEFSQU0gdmFyPwotCS8vCXVuc2lnbmVkIGNoYXIJCQkJCQlEaWFnRG1hRGVzY1tETUFfQ1BVX0NUWFNdOwkJLy8gRnJlZSBETUEgZGVzY3JpcHRvcnMgYml0IGZpZWxkICgzMiBDUFUgY3R4ICogOCBETUEgY3R4KQotCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gUHV0IHByZXByb2Nlc3Nvci1jb25kaXRpb25hbCBmaWVsZHMgYXQgdGhlIGVuZCBzbyB3ZSBkb24ndAotCS8vIGhhdmUgdG8gcmVjb21waWxlIHN4Z2RiZyBldmVyeXRpbWUgd2UgcmVjb25maWd1cmUgdGhlIGRyaXZlcgotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCXZvaWQgKgkJCQkJCVBlbmRpbmdTZXRSc3M7CQkvLyBQZW5kaW5nIFJTUyBwYXJhbWV0ZXIgY2hhbmdlCi0JdTMyCQkJCQkJSVB2NEhkclNpemU7CQkvLyBTaGFyZWQgNS4yLzYuMCBlbmNhcCBwYXJhbQotCXVuc2lnbmVkIGNoYXIgKiAgICAgICAgICAJCQlJbnRlcnJ1cHRJbmZvOwkJLy8gQWxsb2NhdGVkIGJ5IHVzIGR1cmluZyBBZGREZXZpY2UKKwlzdHJ1Y3QgbGlzdF9lbnRyeQlGcmVlU2dsQnVmZmVyczsJCS8qIEZyZWUgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUFsbFNnbEJ1ZmZlcnM7CQkvKiBBbGwgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqLworCXVzaG9ydAkJRnJlZVNnbEJ1ZmZlckNvdW50OwkvKiBOdW1iZXIgb2YgZnJlZSBTR0wgYnVmZmVycyAqLworCXVzaG9ydAkJQWxsU2dsQnVmZmVyQ291bnQ7CS8qIE51bWJlciBvZiB0b3RhbCBTR0wgYnVmZmVycyAqLworCXUzMgkJQ3VycmVudFRpbWU7CQkvKiBUaWNrIGNvdW50ICovCisJdTMyCQlGYXN0cGF0aENvbm5lY3Rpb25zOy8qICMgb2YgZmFzdHBhdGggY29ubmVjdGlvbnMgKi8KKwkvKiBWYXJpb3VzIHNpbmdsZS1iaXQgZmxhZ3M6ICovCisJdTMyCQlCYXNpY0FsbG9jYXRpb25zOjE7CS8qIExvY2tzIGFuZCBsaXN0aGVhZHMgKi8KKwl1MzIJCUludFJlZ2lzdGVyZWQ6MTsJLyogSW50ZXJydXB0IHJlZ2lzdGVyZWQgKi8KKwl1MzIJCVBpbmdPdXRzdGFuZGluZzoxOwkvKiBQaW5nIG91dHN0YW5kaW5nIHRvIGNhcmQgKi8KKwl1MzIJCURlYWQ6MTsJCQkJLyogQ2FyZCBkZWFkICovCisJdTMyCQlEdW1wRHJpdmVyOjE7CQkvKiBPSURfU0xJQ19EUklWRVJfRFVNUCByZXF1ZXN0ICovCisJdTMyCQlEdW1wQ2FyZDoxOwkJCS8qIE9JRF9TTElDX0NBUkRfRFVNUCByZXF1ZXN0ICovCisJdTMyCQlEdW1wQ21kUnVubmluZzoxOwkvKiBEdW1wIGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KKwl1MzIJCURlYnVnUnVubmluZzoxOwkJLyogQUdEQiBkZWJ1ZyBpbiBwcm9ncmVzcyAqLworCXUzMgkJSnVtYm9FbmFibGVkOjE7CQkvKiBKdW1ibyBmcmFtZXMgZW5hYmxlZCAqLworCXUzMgkJbXNpX2VuYWJsZWQ6MTsJCS8qIE1TSSBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCXUzMgkJUnNzRW5hYmxlZDoxOwkJLyogUlNTIEVuYWJsZWQgKi8KKwl1MzIJCUZhaWxPbkJhZEVlcHJvbToxOwkvKiBGYWlsIG9uIEJhZCBFZXByb20gKi8KKwl1MzIJCURpYWdTdGFydDoxOwkJLyogSW5pdCBhZGFwdGVyIGZvciBkaWFnbm9zdGljIHN0YXJ0ICovCisgCXUzMiAJCVhtdEZjRW5hYmxlZDoxOworIAl1MzIgCQlSY3ZGY0VuYWJsZWQ6MTsKKwkvKiBTdGF0cyAqLworCXUzMgkJUGVuZGluZ1JjdkNvdW50OwkvKiBPdXRzdGFuZGluZyByY3YgaW5kaWNhdGlvbnMgKi8KKwl1MzIJCVBlbmRpbmdYbXRDb3VudDsJLyogT3V0c3RhbmRpbmcgc2VuZCByZXF1ZXN0cyAqLworCXN0cnVjdCBzeGdfc3RhdHMJU3RhdHM7CQkJCS8qIFN0YXRpc3RpY3MgKi8KKwl1MzIJCVJlYXNzQnVmczsJCQkvKiBOdW1iZXIgb2YgcmVhc3NlbWJseSBidWZmZXJzICovCisJLyogQ2FyZCBDcmFzaCBJbmZvICovCisJdXNob3J0CQlDcmFzaExvY2F0aW9uOwkJLyogTWljcm9jb2RlIGNyYXNoIGxvY2F0aW9uICovCisJdW5zaWduZWQgY2hhcglDcmFzaENwdTsJCQkvKiBTYWhhcmEgQ1BVIElEICovCisJLyogRGlhZ25vc3RpY3MgKi8KKwkvKglQRElBR19DTUQJRGlhZ0NtZHM7ICovCQkJLyogTGlzdCBvZiBmcmVlIGRpYWdub3N0aWMgY29tbWFuZHMgKi8KKwkvKglQRElBR19CVUZGRVIJRGlhZ0J1ZmZlcnM7ICovCQkvKiBMaXN0IG9mIGZyZWUgZGlhZ25vc3RpYyBidWZmZXJzICovCisJLyoJUERJQUdfUkVRCURpYWdSZXFROyAqLwkJCS8qIExpc3Qgb2Ygb3V0c3RhbmRpbmcgKGFzeW5jaHJvbm91cykgZGlhZyByZXF1ZXN0cyAqLworCS8qCXUzMgkJRGlhZ0NtZFRpbWVvdXQ7ICovCQkvKiBUaW1lIG91dCBmb3IgZGlhZyBjbWRzIChzZWNvbmRzKSBYWFhUT0RPIC0gcmVwbGFjZSB3aXRoIFNYR19QQVJBTSB2YXI/ICovCisJLyoJdW5zaWduZWQgY2hhcglEaWFnRG1hRGVzY1tETUFfQ1BVX0NUWFNdOyAqLwkJLyogRnJlZSBETUEgZGVzY3JpcHRvcnMgYml0IGZpZWxkICgzMiBDUFUgY3R4ICogOCBETUEgY3R4KSAqLworCS8qCisJICogUHV0IHByZXByb2Nlc3Nvci1jb25kaXRpb25hbCBmaWVsZHMgYXQgdGhlIGVuZCBzbyB3ZSBkb24ndAorCSAqIGhhdmUgdG8gcmVjb21waWxlIHN4Z2RiZyBldmVyeXRpbWUgd2UgcmVjb25maWd1cmUgdGhlIGRyaXZlcgorCSAqLwogI2lmIGRlZmluZWQoQ09ORklHX1g4NikKLQl1MzIJCQkJCQlBZGRyVXBwZXI7CQkJLy8gVXBwZXIgMzIgYml0cyBvZiA2NC1iaXQgcmVnaXN0ZXIKKwl1MzIJCUFkZHJVcHBlcjsJCQkvKiBVcHBlciAzMiBiaXRzIG9mIDY0LWJpdCByZWdpc3RlciAqLwogI2VuZGlmCi0JLy8jaWYgU1hHX0ZBSUxVUkVfRFVNUAotCS8vCU5ESVNfRVZFTlQJCQkJCUR1bXBUaHJlYWRFdmVudDsJLy8gc3luY3Jvbml6ZSBkdW1wIHRocmVhZAotCS8vCUJPT0xFQU4JCQkJCQlEdW1wVGhyZWFkUnVubmluZzsJLy8gdGVybWluYXRpb24gZmxhZwotCS8vCVBTWEdfRFVNUF9DTUQJCQkJRHVtcEJ1ZmZlcjsJCQkvLyA2OGsgLSBDbWQgYW5kIEJ1ZmZlcgotCS8vCWRtYV9hZGRyX3QJCVBEdW1wQnVmZmVyOwkJLy8gUGh5c2ljYWwgYWRkcmVzcwotCS8vI2VuZGlmIC8vIFNYR19GQUlMVVJFX0RVTVAKLQorCXVuc2lnbmVkIHNob3J0IG1heF9hZ2dyZWdhdGlvbjsKKwl1bnNpZ25lZCBzaG9ydCBtaW5fYWdncmVnYXRpb247CisJLyojaWYgU1hHX0ZBSUxVUkVfRFVNUCAqLworCS8qCU5ESVNfRVZFTlQJRHVtcFRocmVhZEV2ZW50OyAqLwkvKiBzeW5jcm9uaXplIGR1bXAgdGhyZWFkICovCisJLyoJQk9PTEVBTgkJRHVtcFRocmVhZFJ1bm5pbmc7ICovCS8qIHRlcm1pbmF0aW9uIGZsYWcgKi8KKwkvKglQU1hHX0RVTVBfQ01ECUR1bXBCdWZmZXI7ICovCQkJLyogNjhrIC0gQ21kIGFuZCBCdWZmZXIgKi8KKwkvKglkbWFfYWRkcl90CVBEdW1wQnVmZmVyOyAqLwkJLyogUGh5c2ljYWwgYWRkcmVzcyAqLworCS8qI2VuZGlmICovIC8qIFNYR19GQUlMVVJFX0RVTVAgKi8KKwkvKk1TSS1YIHJlbGF0ZWQgZGF0YSBlbGVtZW50cyovCisJdTMyIG5yX21zaXhfZW50cmllczsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpX2VudHJpZXM7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHVwZGF0ZV9saW5rX3N0YXR1czsKKwl1MzIgCWxpbmtfc3RhdHVzX2NoYW5nZWQ7CiB9OwogCiAjaWYgU0xJQ19EVU1QX0VOQUJMRUQKQEAgLTcxMCwxMiArNzI1LDEwIEBACiAjZGVmaW5lIFNMSUNfRFVNUF9JTl9QUk9HUkVTUyAgICAyCiAjZGVmaW5lIFNMSUNfRFVNUF9ET05FICAgICAgICAgICAzCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgorLyoKICAqIE1pY3JvY29kZSBjcmFzaCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuICBUaGlzCiAgKiBzdHJ1Y3R1cmUgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGNhcmQncyBTUkFNIHdoZW4gdGhlIG1pY3JvY29kZSBwYW5pYydzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICovCiBzdHJ1Y3Qgc2xpY19jcmFzaF9pbmZvIHsKICAgICB1c2hvcnQgIGNwdV9pZDsKICAgICB1c2hvcnQgIGNyYXNoX3BjOwpAQCAtNzM4LDIxICs3NTEsMjUgQEAKICAgICAobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKLSNkZWZpbmUgRVRIRVJfRVFfQUREUihfQWRkckEsIF9BZGRyQiwgX1Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9SZXN1bHQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKih1MzIgKikoX0FkZHJBKSAhPSAqKHUzMiAqKShfQWRkckIpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9SZXN1bHQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgqKHUxNiAqKSgmKChfQWRkckEpWzRdKSkgIT0gKih1MTYgKikoJigoX0FkZHJCKVs0XSkpKSAgICAgICAgXAotICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVRIRVJfRVFfQUREUihfQWRkckEsIF9BZGRyQiwgX1Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MzIgKikoX0FkZHJBKSAhPSAqKHUzMiAqKShfQWRkckIpKSAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgqKHUxNiAqKSgmKChfQWRkckEpWzRdKSkgIT0gKih1MTYgKikoJigoX0FkZHJCKVs0XSkpKSAgICAgICAgCVwKKyAgICAgICAgX1Jlc3VsdCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBFVEhFUk1BWEZSQU1FICAgMTUxNAogI2RlZmluZSBKVU1CT01BWEZSQU1FICAgOTAxNAogCisjZGVmaW5lIFNYR19KVU1CT19NVFUgOTAwMAorI2RlZmluZSBTWEdfREVGQVVMVF9NVFUgMTUwMAorCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQogI2RlZmluZSAgIFNYR19HRVRfQUREUl9MT1coX2FkZHIpICAodTMyKSgodTY0KShfYWRkcikgJiAweDAwMDAwMDAwRkZGRkZGRkYpCi0jZGVmaW5lICAgU1hHX0dFVF9BRERSX0hJR0goX2FkZHIpICAodTMyKSgoKHU2NCkoX2FkZHIpID4+IDMyKSAmIDB4MDAwMDAwMDBGRkZGRkZGRikKKyNkZWZpbmUgICBTWEdfR0VUX0FERFJfSElHSChfYWRkcikgIAkJCQkJXAorCQkJKHUzMikoKCh1NjQpKF9hZGRyKSA+PiAzMikgJiAweDAwMDAwMDAwRkZGRkZGRkYpCiAjZWxzZQogI2RlZmluZSAgIFNYR19HRVRfQUREUl9MT1coX2FkZHIpICAgKHUzMilfYWRkcgogI2RlZmluZSAgIFNYR19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikwCkBAIC03NjEsOCArNzc4LDEwIEBACiAjZGVmaW5lIEZMVVNIICAgICAgIFRSVUUKICNkZWZpbmUgRE9OVF9GTFVTSCAgRkFMU0UKIAotI2RlZmluZSBTSU9DU0xJQ0RVTVBDQVJEICAgICAgICAgU0lPQ0RFVlBSSVZBVEUrOQotI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgU0lPQ0RFVlBSSVZBVEUrMTAKLSNkZWZpbmUgU0lPQ1NMSUNUUkFDRURVTVAgICAgICAgIFNJT0NERVZQUklWQVRFKzExCisjZGVmaW5lIFNJT0NTTElDRFVNUENBUkQgICAgICAgICAoU0lPQ0RFVlBSSVZBVEUrOSkKKyNkZWZpbmUgU0lPQ1NMSUNTRVRJTlRBR0cgICAgICAgIChTSU9DREVWUFJJVkFURSsxMCkKKyNkZWZpbmUgU0lPQ1NMSUNUUkFDRURVTVAgICAgICAgIChTSU9DREVWUFJJVkFURSsxMSkKIAorZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBzeGdfbmljX2V0aHRvb2xfb3BzOworI2RlZmluZSBTWEdfQ09NUExFVEVfU0xPV19TRU5EX0xJTUlUCTEyOAogI2VuZGlmIC8qICBfX1NYR19EUklWRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19ldGh0b29sLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19ldGh0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX2V0aHRvb2wuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDggQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHN4Z19ldGh0b29sLmMKKyAqCisgKiBUaGUgZXRodG9vbCBzdXBwb3J0IGZvciBTWEcgZHJpdmVyIGZvciBBbGFjcml0ZWNoJ3MgMTBHYmUgcHJvZHVjdHMuCisgKgorICogTk9URTogVGhpcyBpcyB0aGUgc3RhbmRhcmQsIG5vbi1hY2NlbGVyYXRlZCB2ZXJzaW9uIG9mIEFsYWNyaXRlY2gncworICogICAgICAgSVMtTklDIGRyaXZlci4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJzeGdfb3MuaCIKKyNpbmNsdWRlICJzeGdody5oIgorI2luY2x1ZGUgInN4Z2hpZi5oIgorI2luY2x1ZGUgInN4Zy5oIgorCitzdHJ1Y3Qgc3hnX25pY19zdGF0cyB7CisgICAgICAgIGNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKKyAgICAgICAgaW50IHNpemVvZl9zdGF0OworICAgICAgICBpbnQgc3RhdF9vZmZzZXQ7Cit9OworCisjZGVmaW5lIFNYR19OSUNfU1RBVFMobSkgc2l6ZW9mKCgoc3RydWN0IGFkYXB0ZXJfdCAqKTApLT5tKSwgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBhZGFwdGVyX3QsIG0pCisKKyNkZWZpbmUgVVNFUl9WSUVXQUJMRV9FRVBST01fU0laRQkyOAorCitzdGF0aWMgc3RydWN0IHN4Z19uaWNfc3RhdHMgc3hnX25pY19nc3RyaW5nc19zdGF0c1tdID0geworCXsieG1pdF9yaW5nXzBfZnVsbCIsIFNYR19OSUNfU1RBVFMoU3RhdHMuWG10WmVyb0Z1bGwpfSwKKworCS8qIE1heSBiZSB3aWxsIG5lZWQgaW4gZnV0dXJlICovCisvKgl7ImR1bWJfeG1pdF9icm9hZGNhc3RfcGFja2V0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlhtdEJjYXN0UGt0cyl9LAorCXsiZHVtYl94bWl0X2Jyb2FkY2FzdF9ieXRlcyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlhtdEJjYXN0Qnl0ZXMpfSwKKwl7ImR1bWJfeG1pdF91bmljYXN0X3BhY2tldHMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJYbXRVY2FzdFBrdHMpfSwKKwl7ImR1bWJfeG1pdF91bmljYXN0X2J5dGVzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iWG10VWNhc3RCeXRlcyl9LAorKi8KKwl7InhtaXRfcXVldWVfbGVuZ3RoIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5YbXRRTGVuKX0sCisJeyJtZW1vcnlfYWxsb2NhdGlvbl9mYWlsdXJlIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5Ob01lbSl9LAorCXsiSW50ZXJydXB0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTnVtSW50cyl9LAorCXsiZmFsc2VfaW50ZXJydXB0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRmFsc2VJbnRzKX0sCisJeyJwcm9jZXNzZWRfZGF0YV9xdWV1ZV9mdWxsIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5QZHFGdWxsKX0sCisJeyJldmVudF9yaW5nX2Z1bGwiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkV2ZW50UmluZ0Z1bGwpfSwKKwl7InRyYW5zcG9ydF9jaGVja3N1bV9lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuVHJhbnNwb3J0Q3N1bSl9LAorCXsidHJhbnNwb3J0X3VuZGVyZmxvd19lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuVHJhbnNwb3J0VWZsb3cpfSwKKwl7InRyYW5zcG9ydF9oZWFkZXJfbGVuZ3RoX2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5UcmFuc3BvcnRIZHJMZW4pfSwKKwl7Im5ldHdvcmtfY2hlY2tzdW1fZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLk5ldHdvcmtDc3VtKX0sCisJeyJuZXR3b3JrX3VuZGVyZmxvd19lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTmV0d29ya1VmbG93KX0sCisJeyJuZXR3b3JrX2hlYWRlcl9sZW5ndGhfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLk5ldHdvcmtIZHJMZW4pfSwKKwl7InJlY2VpdmVfcGFyaXR5X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5QYXJpdHkpfSwKKwl7ImxpbmtfcGFyaXR5X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rUGFyaXR5KX0sCisJeyJsaW5rL2RhdGEgZWFybHlfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkxpbmtFYXJseSl9LAorCXsiYnVmZmVyX292ZXJmbG93X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rQnVmT2Zsb3cpfSwKKwl7ImxpbmtfY29kZV9lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTGlua0NvZGUpfSwKKwl7ImRyaWJibGUgbmliYmxlIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rRHJpYmJsZSl9LAorCXsiQ1JDX2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rQ3JjKX0sCisJeyJsaW5rX292ZXJmbG93X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rT2Zsb3cpfSwKKwl7ImxpbmtfdW5kZXJmbG93X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rVWZsb3cpfSwKKworCS8qIE1heSBiZSBuZWVkIGluIGZ1dHVyZSAqLworLyoJeyJkdW1iX3Jjdl9icm9hZGNhc3RfcGFja2V0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlJjdkJjYXN0UGt0cyl9LAorCXsiZHVtYl9yY3ZfYnJvYWRjYXN0X2J5dGVzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iUmN2QmNhc3RCeXRlcyl9LAorKi8JeyJkdW1iX3Jjdl9tdWx0aWNhc3RfcGFja2V0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlJjdk1jYXN0UGt0cyl9LAorCXsiZHVtYl9yY3ZfbXVsdGljYXN0X2J5dGVzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iUmN2TWNhc3RCeXRlcyl9LAorLyoJeyJkdW1iX3Jjdl91bmljYXN0X3BhY2tldHMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJSY3ZVY2FzdFBrdHMpfSwKKwl7ImR1bWJfcmN2X3VuaWNhc3RfYnl0ZXMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJSY3ZVY2FzdEJ5dGVzKX0sCisqLworCXsibm9fc2dsX2J1ZmZlciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTm9TZ2xCdWYpfSwKK307CisKKyNkZWZpbmUgU1hHX05JQ19TVEFUU19MRU4JQVJSQVlfU0laRShzeGdfbmljX2dzdHJpbmdzX3N0YXRzKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3hnX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIGJvb2wgZmx1c2gpCit7CisgICAgICAgIHdyaXRlbCh2YWx1ZSwgcmVnKTsKKyAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICAgICAgICAgIG1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeGdfcmVnNjRfd3JpdGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdm9pZCBfX2lvbWVtICpyZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCB2YWx1ZSwgdTMyIGNwdSkKK3sKKyAgICAgICAgdTMyIHZhbHVlX2hpZ2ggPSAodTMyKSAodmFsdWUgPj4gMzIpOworICAgICAgICB1MzIgdmFsdWVfbG93ID0gKHUzMikgKHZhbHVlICYgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Qml0NjRSZWdMb2NrLCBmbGFncyk7CisgICAgICAgIHdyaXRlbCh2YWx1ZV9oaWdoLCAodm9pZCBfX2lvbWVtICopKCZhZGFwdGVyLT5VY29kZVJlZ3NbY3B1XS5VcHBlcikpOworICAgICAgICB3cml0ZWwodmFsdWVfbG93LCByZWcpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3N4Z19uaWNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgc3hnX2RyaXZlcl9uYW1lLCAzMik7CisJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBTWEdfRFJWX1ZFUlNJT04sIDMyKTsKKy8vCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgU0FIQVJBX1VDT0RFX1ZFUlNfU1RSSU5HLCAzMik7CisJc3RybmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGNpZGV2KSwgMzIpOworCS8qIFRPRE8gOiBSZWFkIHRoZSBtYWpvciBhbmQgbWlub3IgbnVtYmVyIG9mIGZpcm13YXJlLiBJcyB0aGlzCisgCSAqIGZyb20gdGhlIEZMQVNIL0VFUFJPTSBvciBkb3dubG9hZCBmaWxlID8KKyAJICovCisJLyogTElOU1lTIDogQ2hlY2sgaWYgdGhpcyBpcyBjb3JyZWN0IG9yIGlmIG5vdCBmaW5kIHRoZSByaWdodCB2YWx1ZQorIAkgKiBBbHNvIGNoZWNrIHdoYXQgaXMgdGhlIHJpZ2h0IEVFUFJPTSBsZW5ndGggOiBFRVBST01fU0laRV9YRk1SIG9yIEVFUFJPTV9TSVpFX05PX1hGTVIKKyAJICovCit9CisKK3N0YXRpYyBpbnQgc3hnX25pY19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwkvKiBObyBzZXR0aW5ncyBhcmUgYXBwbGljYWJsZSBhcyB3ZSBzdXBwb3J0IG9ubHkgMTBHYi9GSUJSRV9tZWRpYSAqLworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIHZvaWQKK3N4Z19uaWNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwgdTggKiBkYXRhKQoreworCWludCBpbmRleDsKKworCXN3aXRjaChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQlicmVhazsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgU1hHX05JQ19TVEFUU19MRU47IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAJbWVtY3B5KGRhdGEgKyBpbmRleCAqIEVUSF9HU1RSSU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIAlzeGdfbmljX2dzdHJpbmdzX3N0YXRzW2luZGV4XS5zdGF0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJRVRIX0dTVFJJTkdfTEVOKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAorc3hnX25pY19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKiBkYXRhKQoreworICAgICAgICBzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKyAgICAgICAgaW50IGluZGV4OworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBTWEdfTklDX1NUQVRTX0xFTjsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIGNoYXIgKnAgPSAoY2hhciAqKWFkYXB0ZXIgKworCQkJCXN4Z19uaWNfZ3N0cmluZ3Nfc3RhdHNbaW5kZXhdLnN0YXRfb2Zmc2V0OworICAgICAgICAgICAgICAgIGRhdGFbaW5kZXhdID0gKHN4Z19uaWNfZ3N0cmluZ3Nfc3RhdHNbaW5kZXhdLnNpemVvZl9zdGF0ID09CisJCSAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1NjQpKSA/ICoodTY0ICopIHAgOiAqKHUzMiAqKSBwOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgc3hnX25pY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc3NldCkKK3sKKyAgICAgICAgc3dpdGNoIChzc2V0KSB7CisgICAgICAgIGNhc2UgRVRIX1NTX1NUQVRTOgorICAgICAgIAkJcmV0dXJuIFNYR19OSUNfU1RBVFNfTEVOOworCWRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgc3hnX25pY19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKyAgICAgICAgZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbDsKKyAgICAgICAgZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwkJLy9WU1MgY2hlY2sgVGhpcworICAgICAgICBlY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CS8vVlNTIGNoZWNrIFRoaXMKKworCS8qIEZvciBGaWJyZSBDaGFubmVsICovCisJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9GSUJSRTsKKyAgICAgICAgZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VEX0ZJQlJFKTsKKwllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKworCisJLyogTGluayBTcGVlZCAqLworCWlmKGFkYXB0ZXItPkxpbmtTdGF0ZSAmIFNYR19MSU5LX1VQKSB7CisJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CS8vYWRhcHRlci0+TGlua1NwZWVkOworCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgc3hnX25pY19nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiAoKGFkYXB0ZXItPmZsYWdzICYgU1hHX1JDVl9JUF9DU1VNX0VOQUJMRUQpICYmCisJCSAoYWRhcHRlci0+ZmxhZ3MgJiBTWEdfUkNWX1RDUF9DU1VNX0VOQUJMRUQpKTsKK30KKworc3RhdGljIGludCBzeGdfbmljX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmIChkYXRhKQorCQlhZGFwdGVyLT5mbGFncyB8PSBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRDsKKwllbHNlCisJCWFkYXB0ZXItPmZsYWdzICY9IH5TWEdfUkNWX0lQX0NTVU1fRU5BQkxFRDsKKwkvKgorCSAqIFdlIGRvbnQgbmVlZCB0byB3cml0ZSB0byB0aGUgY2FyZCB0byBkbyBjaGVja3N1bXMuCisJICogSXQgZG9lcyBpdCBhbnl3YXlzLgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN4Z19uaWNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChTWEdfSFdSRUdfTUVNU0laRSArIFNYR19VQ09ERVJFR19NRU1TSVpFKTsKK30KKworc3RhdGljIHZvaWQgc3hnX25pY19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwlzdHJ1Y3Qgc3hnX3Vjb2RlX3JlZ3MgKlVjb2RlUmVncyA9IGFkYXB0ZXItPlVjb2RlUmVnczsKKwl1MzIgKmJ1ZmYgPSBwOworCisJbWVtc2V0KHAsIDAsIChzaXplb2Yoc3RydWN0IHN4Z19od19yZWdzKStzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9yZWdzKSkpOworCW1lbWNweShidWZmLCBId1JlZ3MsIHNpemVvZihzdHJ1Y3Qgc3hnX2h3X3JlZ3MpKTsKKwltZW1jcHkoKGJ1ZmYrc2l6ZW9mKHN0cnVjdCBzeGdfaHdfcmVncykpLCBVY29kZVJlZ3MsIHNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3JlZ3MpKTsKK30KKworc3RhdGljIGludCBzeGdfbmljX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIChVU0VSX1ZJRVdBQkxFX0VFUFJPTV9TSVpFKTsKK30KKworc3RhdGljIGludCBzeGdfbmljX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmJ5dGVzKQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzd19jZmdfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBpLCBzdGF0dXM7CisJZG1hX2FkZHJfdCBwX2FkZHI7CisKKwlkYXRhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LCBzaXplb2Yoc3RydWN0IHN3X2NmZ19kYXRhKSwKKwkJCQkJICZwX2FkZHIpOworCWlmKCFkYXRhKSB7CisgICAgICAgICAgICAgICAgLyoKKwkJICogV2UgY2FudCBnZXQgZXZlbiB0aGlzIG11Y2ggbWVtb3J5LiBSYWlzZSBhIGhlbGwKKyAgICAgICAgICAgICAgICAgKiBHZXQgb3V0IG9mIGhlcmUKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIiJXMgOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciByZWFkaW5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUVQUk9NXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Db25maWdTdGF0LCBTWEdfQ0ZHX1RJTUVPVVQsIFRSVUUpOworICAgICAgICBXUklURV9SRUc2NChhZGFwdGVyLCBhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ29uZmlnLCBwX2FkZHIsIDApOworCWZvcihpPTA7IGk8MTAwMDsgaSsrKSB7CisgICAgICAgICAgICAgICAgUkVBRF9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkNvbmZpZ1N0YXQsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBTWEdfQ0ZHX1RJTUVPVVQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBtZGVsYXkoMSk7ICAgICAgLyogRG8gd2UgcmVhbGx5IG5lZWQgdGhpcyAqLworICAgICAgICB9CisKKwltZW1zZXQoYnl0ZXMsIDAsIGVlcHJvbS0+bGVuKTsKKyAgICAgICAgbWVtY3B5KGJ5dGVzLCBkYXRhLT5NYWNBZGRyWzBdLk1hY0FkZHIsIHNpemVvZihzdHJ1Y3Qgc3hnX2NvbmZpZ19tYWMpKTsKKyAgICAgICAgbWVtY3B5KGJ5dGVzKzYsIGRhdGEtPkF0a0ZydS5QYXJ0TnVtLCA2KTsKKyAgICAgICAgbWVtY3B5KGJ5dGVzKzEyLCBkYXRhLT5BdGtGcnUuUmV2aXNpb24sIDIpOworICAgICAgICBtZW1jcHkoYnl0ZXMrMTQsIGRhdGEtPkF0a0ZydS5TZXJpYWwsIDE0KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZXRodG9vbF9vcHMgc3hnX25pY19ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzID0gc3hnX25pY19nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncyA9IHN4Z19uaWNfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyA9IHN4Z19uaWNfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbiA9IHN4Z19uaWNfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncyA9IHN4Z19uaWNfZ2V0X3JlZ3MsCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKy8vCS5nZXRfd29sID0gc3hnX25pY19nZXRfd29sLAorCS5nZXRfZWVwcm9tX2xlbiA9IHN4Z19uaWNfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20gPSBzeGdfbmljX2dldF9lZXByb20sCisvLwkuZ2V0X3BhdXNlcGFyYW0gPSBzeGdfbmljX2dldF9wYXVzZXBhcmFtLAorLy8JLnNldF9wYXVzZXBhcmFtID0gc3hnX25pY19zZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAorCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCisvLwkuZ2V0X3RzbyA9IHN4Z19uaWNfZ2V0X3RzbywKKy8vCS5zZXRfdHNvID0gc3hnX25pY19zZXRfdHNvLAorLy8JLnNlbGZfdGVzdCA9IHN4Z19uaWNfZGlhZ190ZXN0LAorCS5nZXRfc3RyaW5ncyA9IHN4Z19uaWNfZ2V0X3N0cmluZ3MsCisJLmdldF9ldGh0b29sX3N0YXRzID0gc3hnX25pY19nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3NzZXRfY291bnQgPSBzeGdfbmljX2dldF9zc2V0X2NvdW50LAorCS5nZXRfcnhfY3N1bSA9IHN4Z19uaWNfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtID0gc3hnX25pY19zZXRfcnhfY3N1bSwKKy8vCS5nZXRfY29hbGVzY2UgPSBzeGdfbmljX2dldF9pbnRyX2NvYWxlc2NlLAorLy8JLnNldF9jb2FsZXNjZSA9IHN4Z19uaWNfc2V0X2ludHJfY29hbGVzY2UsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfb3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmgKaW5kZXggNmQzZjIzZi4uNjhlMWEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfb3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19vcy5oCkBAIC00NCwzNCArNDQsMzQgQEAKICNkZWZpbmUgRkFMU0UJKDApCiAjZGVmaW5lIFRSVUUJKDEpCiAKLXN0cnVjdCBMSVNUX0VOVFJZIHsKLQlzdHJ1Y3QgTElTVF9FTlRSWSAqbmxlX2ZsaW5rOwotCXN0cnVjdCBMSVNUX0VOVFJZICpubGVfYmxpbms7CitzdHJ1Y3QgbGlzdF9lbnRyeSB7CisJc3RydWN0IGxpc3RfZW50cnkgKm5sZV9mbGluazsKKwlzdHJ1Y3QgbGlzdF9lbnRyeSAqbmxlX2JsaW5rOwogfTsKIAotI2RlZmluZSBJbml0aWFsaXplTGlzdEhlYWQobCkgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBJbml0aWFsaXplTGlzdEhlYWQobCkgICAgICAgICAgICAgICAgICAgCQkJXAogICAgICAgICAobCktPm5sZV9mbGluayA9IChsKS0+bmxlX2JsaW5rID0gKGwpCiAKLSNkZWZpbmUgSXNMaXN0RW1wdHkoaCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgSXNMaXN0RW1wdHkoaCkgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCVwKICAgICAgICAgKChoKS0+bmxlX2ZsaW5rID09IChoKSkKIAotI2RlZmluZSBSZW1vdmVFbnRyeUxpc3QoZSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpiOyAgICAgXAotICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGYgPSAoZSktPm5sZV9mbGluazsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGIgPSAoZSktPm5sZV9ibGluazsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IGY7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGYtPm5sZV9ibGluayA9IGI7ICAgICAgICAgICAgICAgXAorI2RlZmluZSBSZW1vdmVFbnRyeUxpc3QoZSkgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpiOyAgICAgCQkJXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOyAgICAgCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGYgPSAoZSktPm5sZV9mbGluazsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGIgPSAoZSktPm5sZV9ibGluazsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IGY7ICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGYtPm5sZV9ibGluayA9IGI7ICAgICAgICAgICAgICAgCQkJXAogICAgICAgICB9IHdoaWxlICgwKQogCiAvKiBUaGVzZSB0d28gaGF2ZSB0byBiZSBpbmxpbmVkIHNpbmNlIHRoZXkgcmV0dXJuIHRoaW5ncy4gKi8KIAotc3RhdGljIF9faW5saW5lIHN0cnVjdCBMSVNUX0VOVFJZICpSZW1vdmVIZWFkTGlzdChzdHJ1Y3QgTElTVF9FTlRSWSAqbCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfZW50cnkgKlJlbW92ZUhlYWRMaXN0KHN0cnVjdCBsaXN0X2VudHJ5ICpsKQogewotCXN0cnVjdCBMSVNUX0VOVFJZICpmOwotCXN0cnVjdCBMSVNUX0VOVFJZICplOworCXN0cnVjdCBsaXN0X2VudHJ5ICpmOworCXN0cnVjdCBsaXN0X2VudHJ5ICplOwogCiAJZSA9IGwtPm5sZV9mbGluazsKIAlmID0gZS0+bmxlX2ZsaW5rOwpAQCAtODEsMTAgKzgxLDEwIEBACiAJcmV0dXJuIChlKTsKIH0KIAotc3RhdGljIF9faW5saW5lIHN0cnVjdCBMSVNUX0VOVFJZICpSZW1vdmVUYWlsTGlzdChzdHJ1Y3QgTElTVF9FTlRSWSAqbCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfZW50cnkgKlJlbW92ZVRhaWxMaXN0KHN0cnVjdCBsaXN0X2VudHJ5ICpsKQogewotCXN0cnVjdCBMSVNUX0VOVFJZICpiOwotCXN0cnVjdCBMSVNUX0VOVFJZICplOworCXN0cnVjdCBsaXN0X2VudHJ5ICpiOworCXN0cnVjdCBsaXN0X2VudHJ5ICplOwogCiAJZSA9IGwtPm5sZV9ibGluazsKIAliID0gZS0+bmxlX2JsaW5rOwpAQCAtOTQsNTQgKzk0LDU2IEBACiAJcmV0dXJuIChlKTsKIH0KIAotI2RlZmluZSBJbnNlcnRUYWlsTGlzdChsLCBlKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHN0cnVjdCBMSVNUX0VOVFJZICAgICAgICpiOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGIgPSAobCktPm5sZV9ibGluazsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChlKS0+bmxlX2ZsaW5rID0gKGwpOyAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChlKS0+bmxlX2JsaW5rID0gYjsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IChlKTsgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChsKS0+bmxlX2JsaW5rID0gKGUpOyAgICAgICAgICAgXAorI2RlZmluZSBJbnNlcnRUYWlsTGlzdChsLCBlKSAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2VudHJ5ICAgICAgICpiOyAgICAgCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGIgPSAobCktPm5sZV9ibGluazsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2ZsaW5rID0gKGwpOyAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2JsaW5rID0gYjsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIGItPm5sZV9mbGluayA9IChlKTsgICAgICAgICAgICAgCQkJXAorICAgICAgICAgICAgICAgIChsKS0+bmxlX2JsaW5rID0gKGUpOyAgICAgICAgICAgCQkJXAogICAgICAgICB9IHdoaWxlICgwKQogCi0jZGVmaW5lIEluc2VydEhlYWRMaXN0KGwsIGUpICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc3RydWN0IExJU1RfRU5UUlkgICAgICAgKmY7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZiA9IChsKS0+bmxlX2ZsaW5rOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGUpLT5ubGVfZmxpbmsgPSBmOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGUpLT5ubGVfYmxpbmsgPSBsOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZi0+bmxlX2JsaW5rID0gKGUpOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGwpLT5ubGVfZmxpbmsgPSAoZSk7ICAgICAgICAgICBcCisjZGVmaW5lIEluc2VydEhlYWRMaXN0KGwsIGUpICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfZW50cnkgICAgICAgKmY7ICAgICAJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgZiA9IChsKS0+bmxlX2ZsaW5rOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGUpLT5ubGVfZmxpbmsgPSBmOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGUpLT5ubGVfYmxpbmsgPSBsOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgZi0+bmxlX2JsaW5rID0gKGUpOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGwpLT5ubGVfZmxpbmsgPSAoZSk7ICAgICAgICAgICAJCQlcCiAgICAgICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQVRLX0RFQlVHICAxCiAKICNpZiBBVEtfREVCVUcKLSNkZWZpbmUgU0xJQ19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNMSUNfVElNRVNUQU1QKHZhbHVlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgCVwKIH0KICNlbHNlCiAjZGVmaW5lIFNMSUNfVElNRVNUQU1QKHZhbHVlKQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKiogIFNYRyBERUZJTkVTICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNYRyBERUZJTkVTICovCiAKICNpZmRlZiAgQVRLREJHCi0jZGVmaW5lIFNYR19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNYR19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgIHZhbHVlID0gdGltZXYudHZfc2VjKjEwMDAwMDAgKyB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgIAlcCiB9CiAjZWxzZQogI2RlZmluZSBTWEdfVElNRVNUQU1QKHZhbHVlKQogI2VuZGlmCiAKLSNkZWZpbmUgV1JJVEVfUkVHKHJlZyx2YWx1ZSxmbHVzaCkgICAgICAgICAgICAgICAgICBzeGdfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKQotI2RlZmluZSBXUklURV9SRUc2NChhLHJlZyx2YWx1ZSxjcHUpICAgICAgICAgICAgICAgIHN4Z19yZWc2NF93cml0ZSgoYSksKCZyZWcpLCh2YWx1ZSksKGNwdSkpCisjZGVmaW5lIFdSSVRFX1JFRyhyZWcsdmFsdWUsZmx1c2gpCQkJCQlcCisJCQkJc3hnX3JlZzMyX3dyaXRlKCgmcmVnKSwgKHZhbHVlKSwgKGZsdXNoKSkKKyNkZWZpbmUgV1JJVEVfUkVHNjQoYSxyZWcsdmFsdWUsY3B1KQkJCQkJXAorCQkJCXN4Z19yZWc2NF93cml0ZSgoYSksKCZyZWcpLCh2YWx1ZSksKGNwdSkpCiAjZGVmaW5lIFJFQURfUkVHKHJlZyx2YWx1ZSkgICAodmFsdWUpID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKSgmcmVnKSkKIAogI2VuZGlmIC8qIF9TTElDX09TX1NQRUNJRklDX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnZGJnLmgKaW5kZXggYmI1OGRkZi4uZTYxM2E5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2RiZy5oCkBAIC00NCwyMiArNDQsMjMgQEAKICNkZWZpbmUgX1NYR19ERUJVR19IXwogCiAjZGVmaW5lIEFUS0RCRyAgMQotI2RlZmluZSBBVEtfVFJBQ0VfRU5BQkxFRCAxCisjZGVmaW5lIEFUS19UUkFDRV9FTkFCTEVEIDAKIAotI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikJcHJpbnRrKEtFUk5fRU1FUkcgbiwgIyNhcmdzKQorI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikJcHJpbnRrKEtFUk5fV0FSTklORyBuLCAjI2FyZ3MpCiAKICNpZmRlZiBBU1NFUlQKICN1bmRlZiBBU1NFUlQKICNlbmRpZgogCisjZGVmaW5lIFNYR19BU1NFUlRfRU5BQkxFRAogI2lmZGVmIFNYR19BU1NFUlRfRU5BQkxFRAogI2lmbmRlZiBBU1NFUlQKLSNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIERCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsXAotICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIERCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsIFwKKyAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAjZW5kaWYKICNlbHNlCkBAIC03OCw3ICs3OSw3IEBACiBleHRlcm4gdWxvbmcgQVRLVGltZXJEaXY7CiAKIC8qCi0gKiB0cmFjZV9lbnRyeV90IC0KKyAqIHRyYWNlX2VudHJ5IC0KICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGFuIGVudHJ5IGluIHRoZSB0cmFjZSBidWZmZXIuICBUaGUKICAqIGZpcnN0IGZldyBmaWVsZHMgbWVhbiB0aGUgc2FtZSBmcm9tIGVudHJ5IHRvIGVudHJ5LCB3aGlsZQpAQCAtODYsMzQgKzg3LDM0IEBACiAgKiBuZWVkcyBvZiB0aGUgdHJhY2UgZW50cnkuICBUeXBpY2FsbHkgdGhleSBhcmUgZnVuY3Rpb24gY2FsbAogICogcGFyYW1ldGVycy4KICAqLwotc3RydWN0IHRyYWNlX2VudHJ5X3QgewotICAgICAgICBjaGFyICAgICAgbmFtZVs4XTsgICAgICAgIC8qIDggY2hhcmFjdGVyIG5hbWUgLSBsaWtlICdzJ2knbSdiJ2EncidjJ3YnICovCi0gICAgICAgIHUzMiAgIHRpbWU7ICAgICAgICAgICAvKiBDdXJyZW50IGNsb2NrIHRpYyAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBjcHU7ICAgICAgICAgICAgLyogQ3VycmVudCBDUFUgKi8KLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgaXJxbDsgICAgICAgICAgIC8qIEN1cnJlbnQgSVJRTCAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBkcml2ZXI7ICAgICAgICAgLyogVGhlIGRyaXZlciB3aGljaCBhZGRlZCB0aGUgdHJhY2UgY2FsbCAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBwYWQyOyAgICAgICAgICAgLyogcGFkIHRvIDQgYnl0ZSBib3VuZGFyeSAtIHdpbGwgcHJvYmFibHkgZ2V0IHVzZWQgKi8KLSAgICAgICAgdTMyICAgYXJnMTsgICAgICAgICAgIC8qIENhbGxlciBhcmcxICovCi0gICAgICAgIHUzMiAgIGFyZzI7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMiAqLwotICAgICAgICB1MzIgICBhcmczOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzMgKi8KLSAgICAgICAgdTMyICAgYXJnNDsgICAgICAgICAgIC8qIENhbGxlciBhcmc0ICovCitzdHJ1Y3QgdHJhY2VfZW50cnkgeworICAgICAgICBjaGFyICAgICAgCW5hbWVbOF07LyogOCBjaGFyYWN0ZXIgbmFtZSAtIGxpa2UgJ3MnaSdtJ2InYSdyJ2MndicgKi8KKyAgICAgICAgdTMyICAgCQl0aW1lOyAgLyogQ3VycmVudCBjbG9jayB0aWMgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgIGNwdTsgICAvKiBDdXJyZW50IENQVSAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgaXJxbDsgIC8qIEN1cnJlbnQgSVJRTCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgZHJpdmVyOy8qIFRoZSBkcml2ZXIgd2hpY2ggYWRkZWQgdGhlIHRyYWNlIGNhbGwgKi8KKwkvKiBwYWQgdG8gNCBieXRlIGJvdW5kYXJ5IC0gd2lsbCBwcm9iYWJseSBnZXQgdXNlZCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgcGFkMjsKKyAgICAgICAgdTMyCQlhcmcxOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzEgKi8KKyAgICAgICAgdTMyCQlhcmcyOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzIgKi8KKyAgICAgICAgdTMyCQlhcmczOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzMgKi8KKyAgICAgICAgdTMyCQlhcmc0OyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzQgKi8KIH07CiAKLS8qCi0gKiBEcml2ZXIgdHlwZXMgZm9yIGRyaXZlciBmaWVsZCBpbiB0cmFjZV9lbnRyeV90Ci0gKi8KKy8qIERyaXZlciB0eXBlcyBmb3IgZHJpdmVyIGZpZWxkIGluIHN0cnVjdCB0cmFjZV9lbnRyeSAqLwogI2RlZmluZSBUUkFDRV9TWEcgICAgICAgICAgICAgMQogI2RlZmluZSBUUkFDRV9WUENJICAgICAgICAgICAgMgogI2RlZmluZSBUUkFDRV9TTElDICAgICAgICAgICAgMwogCiAjZGVmaW5lIFRSQUNFX0VOVFJJRVMgICAxMDI0CiAKLXN0cnVjdCBzeGdfdHJhY2VfYnVmZmVyX3QgewotICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgLyogYWlkIGZvciB3aW5kYmcgZXh0ZW5zaW9uICovCi0gICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgaW47ICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSB0byBhZGQgKi8KLSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBsZXZlbDsgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgVHJhY2UgbGV2ZWwgKi8KLQlzcGlubG9ja190CWxvY2s7ICAgICAgICAgICAgICAgICAgLyogRm9yIE1QIHRyYWNpbmcgKi8KLSAgICAgICAgc3RydWN0IHRyYWNlX2VudHJ5X3QgICAgICAgICAgIGVudHJpZXNbVFJBQ0VfRU5UUklFU107LyogVGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RydWN0IHN4Z190cmFjZV9idWZmZXIgeworCS8qIGFpZCBmb3Igd2luZGJnIGV4dGVuc2lvbiAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHNpemU7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgaW47ICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSB0byBhZGQgKi8KKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBsZXZlbDsgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgVHJhY2UgbGV2ZWwgKi8KKwlzcGlubG9ja190CQlsb2NrOyAgICAgICAgICAgICAgICAgIC8qIEZvciBNUCB0cmFjaW5nICovCisJc3RydWN0IHRyYWNlX2VudHJ5CWVudHJpZXNbVFJBQ0VfRU5UUklFU107LyogVGhlIGNpcmN1bGFyIGJ1ZmZlciAqLwogfTsKIAogLyoKQEAgLTEyOCwxNSArMTI5LDExIEBACiAjZGVmaW5lIFRSQUNFX05PSVNZICAgICAgICAgICAgIDEwICAvKiBFdmVyeXRoaW5nIGluIHRoZSB3b3JsZCAqLwogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVGhlIG1hY3JvcyB0aGVtc2VsdmVzIC0KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhlIG1hY3JvcyB0aGVtc2VsdmVzICovCiAjaWYgQVRLX1RSQUNFX0VOQUJMRUQKICNkZWZpbmUgU1hHX1RSQUNFX0lOSVQoYnVmZmVyLCB0bGV2ZWwpCQkJCVwKIHsJCQkJCQkJCVwKLQltZW1zZXQoKGJ1ZmZlciksIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlcl90KSk7CVwKKwltZW1zZXQoKGJ1ZmZlciksIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlcikpOwlcCiAJKGJ1ZmZlciktPmxldmVsID0gKHRsZXZlbCk7CQkJCVwKIAkoYnVmZmVyKS0+c2l6ZSA9IFRSQUNFX0VOVFJJRVM7CQkJCVwKIAlzcGluX2xvY2tfaW5pdCgmKGJ1ZmZlciktPmxvY2spOwkJCVwKQEAgLTE0NSw0MCArMTQyLDM4IEBACiAjZGVmaW5lIFNYR19UUkFDRV9JTklUKGJ1ZmZlciwgdGxldmVsKQogI2VuZGlmCiAKLS8qCi0gKiBUaGUgdHJhY2UgbWFjcm8uICBUaGlzIGlzIGFjdGl2ZSBvbmx5IGlmIEFUS19UUkFDRV9FTkFCTEVEIGlzIHNldC4KLSAqLworLypUaGUgdHJhY2UgbWFjcm8uICBUaGlzIGlzIGFjdGl2ZSBvbmx5IGlmIEFUS19UUkFDRV9FTkFCTEVEIGlzIHNldC4gKi8KICNpZiBBVEtfVFJBQ0VfRU5BQkxFRAogI2RlZmluZSBTWEdfVFJBQ0UodGRyaXZlciwgYnVmZmVyLCB0bGV2ZWwsIHRuYW1lLCBhMSwgYTIsIGEzLCBhNCkgeyAgICAgICAgXAotICAgICAgICBpZiAoKGJ1ZmZlcikgJiYgKChidWZmZXIpLT5sZXZlbCA+PSAodGxldmVsKSkpIHsgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHRyYWNlX2lycWwgPSAwOyAgICAvKiA/Pz8/Pz8gRklYIFRISVMgICovICAgIFwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB0cmFjZV9sZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc3RydWN0IHRyYWNlX2VudHJ5X3QJKnRyYWNlX2VudHJ5OwkJCQlcCi0gICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmKGJ1ZmZlciktPmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5ID0gJihidWZmZXIpLT5lbnRyaWVzWyhidWZmZXIpLT5pbl07ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG1lbXNldCh0cmFjZV9lbnRyeS0+bmFtZSwgMCwgOCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfbGVuID0gc3RybGVuKHRuYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9sZW4gPSB0cmFjZV9sZW4gPiA4ID8gOCA6IHRyYWNlX2xlbjsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG1lbWNweSh0cmFjZV9lbnRyeS0+bmFtZSwgKHRuYW1lKSwgdHJhY2VfbGVuKTsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPnRpbWUgPSB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+Y3B1ID0gKHVuc2lnbmVkIGNoYXIpKHNtcF9wcm9jZXNzb3JfaWQoKSAmIDB4RkYpOyAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmRyaXZlciA9ICh0ZHJpdmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+aXJxbCA9IHRyYWNlX2lycWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmcxID0gKHVsb25nKShhMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzIgPSAodWxvbmcpKGEyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMyA9ICh1bG9uZykoYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmc0ID0gKHVsb25nKShhNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyKS0+aW4gPT0gVFJBQ0VfRU5UUklFUykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCYoYnVmZmVyKS0+bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKChidWZmZXIpICYmICgoYnVmZmVyKS0+bGV2ZWwgPj0gKHRsZXZlbCkpKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB0cmFjZV9pcnFsID0gMDsvKiA/Pz8/Pz8gRklYIFRISVMgKi9cCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdHJhY2VfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHN0cnVjdCB0cmFjZV9lbnRyeQkqdHJhY2VfZW50cnk7CQkJICAgIFwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmKHNwaW5fdHJ5bG9jaygmKGJ1ZmZlciktPmxvY2spKQl7CQkgICAgIFwKKwkgICAgICAgICAgICAgICAgdHJhY2VfZW50cnkgPSAmKGJ1ZmZlciktPmVudHJpZXNbKGJ1ZmZlciktPmluXTsgICAgICBcCisgICAgICAgIAkgICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgbWVtc2V0KHRyYWNlX2VudHJ5LT5uYW1lLCAwLCA4KTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIAkgICAgICAgIHRyYWNlX2xlbiA9IHN0cmxlbih0bmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICB0cmFjZV9sZW4gPSB0cmFjZV9sZW4gPiA4ID8gOCA6IHRyYWNlX2xlbjsgICAgICAgICAgIFwKKyAgICAgICAgCSAgICAgICAgbWVtY3B5KHRyYWNlX2VudHJ5LT5uYW1lLCAodG5hbWUpLCB0cmFjZV9sZW4pOyAgICAgICBcCisJICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT50aW1lID0gdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAgXAorCQkJdHJhY2VfZW50cnktPmNwdSA9ICh1bnNpZ25lZCBjaGFyKShzbXBfcHJvY2Vzc29yX2lkKCkgJiAweEZGKTtcCisJICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5kcml2ZXIgPSAodGRyaXZlcik7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAJICAgICAgICB0cmFjZV9lbnRyeS0+aXJxbCA9IHRyYWNlX2lycWw7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzEgPSAodWxvbmcpKGExKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIAkgICAgICAgIHRyYWNlX2VudHJ5LT5hcmcyID0gKHVsb25nKShhMik7ICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMyA9ICh1bG9uZykoYTMpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgCSAgICAgICAgdHJhY2VfZW50cnktPmFyZzQgPSAodWxvbmcpKGE0KTsgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAJICAgICAgICAoYnVmZmVyKS0+aW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAJaWYgKChidWZmZXIpLT5pbiA9PSBUUkFDRV9FTlRSSUVTKSAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlciktPmluID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXNwaW5fdW5sb2NrKCYoYnVmZmVyKS0+bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgICAgCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfQkJCQkJCQkJICAgICBcCiB9CiAjZWxzZQogI2RlZmluZSBTWEdfVFJBQ0UodGRyaXZlciwgYnVmZmVyLCB0bGV2ZWwsIHRuYW1lLCBhMSwgYTIsIGEzLCBhNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2hpZi5oCmluZGV4IGE0ZTk0NjguLmUxOTBkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdoaWYuaApAQCAtMSw0ICsxLDQgQEAKLS8qCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ29weXJpZ2h0IKkgMTk5Ny0yMDA3IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAogICoKICAqICRJZDogc3hnaGlmLmgsdiAxLjUgMjAwOC8wNy8yNCAxOToxODoyMiBjaHJpcyBFeHAgJApAQCAtNywxMjkgKzcsMTM0IEBACiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUKICAqIEFsYWNyaXRlY2ggU2FoYXJhIGhvc3QgaW50ZXJmYWNlCi0gKi8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBVQ09ERSBSZWdpc3RlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IFNYR19VQ09ERV9SRUdTIHsKLQkvLyBBZGRyZXNzIDAgLSAweDNGID0gQ29tbWFuZCBjb2RlcyAwLTE1IGZvciBUQ0IgMC4gIEV4Y29kZSAwCi0JdTMyIEljcjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDAgLSBJbnQgY29udHJvbAotCXUzMiBSc3ZkUmVnMTsJCS8vIENvZGUgPSAxIC0gVE9FIC1OQQotCXUzMiBSc3ZkUmVnMjsJCS8vIENvZGUgPSAyIC0gVE9FIC1OQQotCXUzMiBSc3ZkUmVnMzsJCS8vIENvZGUgPSAzIC0gVE9FIC1OQQotCXUzMiBSc3ZkUmVnNDsJCS8vIENvZGUgPSA0IC0gVE9FIC1OQQotCXUzMiBSc3ZkUmVnNTsJCS8vIENvZGUgPSA1IC0gVE9FIC1OQQotCXUzMiBDYXJkVXA7CQkvLyBDb2RlID0gNiAtIE1pY3JvY29kZSBpbml0aWFsaXplZCB3aGVuIDEKLQl1MzIgUnN2ZFJlZzc7CQkvLyBDb2RlID0gNyAtIFRPRSAtTkEKLQl1MzIgQ29kZU5vdFVzZWRbOF07CS8vIENvZGVzIDgtMTUgbm90IHVzZWQuICBFeENvZGUgPSAwCi0JLy8gVGhpcyBicmluZ3MgdXMgdG8gRXhDb2RlIDEgYXQgYWRkcmVzcyAweDQwID0gSW50ZXJydXB0IHN0YXR1cyBwb2ludGVyCi0JdTMyIElzcDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEKLQl1MzIgUGFkRXgxWzE1XTsJCS8vIENvZGVzIDEtMTUgbm90IHVzZWQgd2l0aCBleHRlbmRlZCBjb2RlcwotCS8vIEV4Q29kZSAyID0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgotCXUzMiBJc3I7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyCisjZGVmaW5lIERCRwkJCQkxCisKKy8qIFVDT0RFIFJlZ2lzdGVycyAqLworc3RydWN0IHN4Z191Y29kZV9yZWdzIHsKKwkvKiBBZGRyZXNzIDAgLSAweDNGID0gQ29tbWFuZCBjb2RlcyAwLTE1IGZvciBUQ0IgMC4gIEV4Y29kZSAwICovCisJdTMyCUljcjsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDAgLSBJbnQgY29udHJvbCAqLworCXUzMglSc3ZkUmVnMTsJLyogQ29kZSA9IDEgLSBUT0UgLU5BICovCisJdTMyCVJzdmRSZWcyOwkvKiBDb2RlID0gMiAtIFRPRSAtTkEgKi8KKwl1MzIJUnN2ZFJlZzM7CS8qIENvZGUgPSAzIC0gVE9FIC1OQSAqLworCXUzMglSc3ZkUmVnNDsJLyogQ29kZSA9IDQgLSBUT0UgLU5BICovCisJdTMyCVJzdmRSZWc1OwkvKiBDb2RlID0gNSAtIFRPRSAtTkEgKi8KKwl1MzIJQ2FyZFVwOwkJLyogQ29kZSA9IDYgLSBNaWNyb2NvZGUgaW5pdGlhbGl6ZWQgd2hlbiAxICovCisJdTMyCVJzdmRSZWc3OwkvKiBDb2RlID0gNyAtIFRPRSAtTkEgKi8KKwl1MzIJQ29uZmlnU3RhdDsgICAgIC8qIENvZGUgPSA4IC0gQ29uZmlndXJhdGlvbiBkYXRhIGxvYWQgc3RhdHVzICovCisJdTMyICAJUnN2ZFJlZzk7CS8qIENvZGUgPSA5IC0gVE9FIC1OQSAqLworCXUzMglDb2RlTm90VXNlZFs2XTsJLyogQ29kZXMgMTAtMTUgbm90IHVzZWQuICBFeENvZGUgPSAwICovCisJLyogVGhpcyBicmluZ3MgdXMgdG8gRXhDb2RlIDEgYXQgYWRkcmVzcyAweDQwID0gSW50ZXJydXB0IHN0YXR1cyBwb2ludGVyICovCisJdTMyCUlzcDsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEgKi8KKwl1MzIJUGFkRXgxWzE1XTsJLyogQ29kZXMgMS0xNSBub3QgdXNlZCB3aXRoIGV4dGVuZGVkIGNvZGVzICovCisJLyogRXhDb2RlIDIgPSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisJdTMyCUlzcjsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIgKi8KIAl1MzIgUGFkRXgyWzE1XTsKLQkvLyBFeENvZGUgMyA9IEV2ZW50IGJhc2UgcmVnaXN0ZXIuICBMb2NhdGlvbiBvZiBldmVudCByaW5ncwotCXUzMiBFdmVudEJhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzCisJLyogRXhDb2RlIDMgPSBFdmVudCBiYXNlIHJlZ2lzdGVyLiAgTG9jYXRpb24gb2YgZXZlbnQgcmluZ3MgKi8KKwl1MzIJRXZlbnRCYXNlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzICovCiAJdTMyIFBhZEV4M1sxNV07Ci0JLy8gRXhDb2RlIDQgPSBFdmVudCByaW5nIHNpemUKLQl1MzIgRXZlbnRTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNAorCS8qIEV4Q29kZSA0ID0gRXZlbnQgcmluZyBzaXplICovCisJdTMyCUV2ZW50U2l6ZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNCAqLwogCXUzMiBQYWRFeDRbMTVdOwotCS8vIEV4Q29kZSA1ID0gVENCIEJ1ZmZlcnMgYmFzZSBhZGRyZXNzCi0JdTMyIFRjYkJhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA1CisJLyogRXhDb2RlIDUgPSBUQ0IgQnVmZmVycyBiYXNlIGFkZHJlc3MgKi8KKwl1MzIJVGNiQmFzZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNSAqLwogCXUzMiBQYWRFeDVbMTVdOwotCS8vIEV4Q29kZSA2ID0gVENCIENvbXBvc2l0ZSBCdWZmZXJzIGJhc2UgYWRkcmVzcwotCXUzMiBUY2JDb21wQmFzZTsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNgorCS8qIEV4Q29kZSA2ID0gVENCIENvbXBvc2l0ZSBCdWZmZXJzIGJhc2UgYWRkcmVzcyAqLworCXUzMglUY2JDb21wQmFzZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNiAqLwogCXUzMiBQYWRFeDZbMTVdOwotCS8vIEV4Q29kZSA3ID0gVHJhbnNtaXQgcmluZyBiYXNlIGFkZHJlc3MKLQl1MzIgWG10QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDcKKwkvKiBFeENvZGUgNyA9IFRyYW5zbWl0IHJpbmcgYmFzZSBhZGRyZXNzICovCisJdTMyCVhtdEJhc2U7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDcgKi8KIAl1MzIgUGFkRXg3WzE1XTsKLQkvLyBFeENvZGUgOCA9IFRyYW5zbWl0IHJpbmcgc2l6ZQotCXUzMiBYbXRTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOAorCS8qIEV4Q29kZSA4ID0gVHJhbnNtaXQgcmluZyBzaXplICovCisJdTMyCVhtdFNpemU7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDggKi8KIAl1MzIgUGFkRXg4WzE1XTsKLQkvLyBFeENvZGUgOSA9IFJlY2VpdmUgcmluZyBiYXNlIGFkZHJlc3MKLQl1MzIgUmN2QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDkKKwkvKiBFeENvZGUgOSA9IFJlY2VpdmUgcmluZyBiYXNlIGFkZHJlc3MgKi8KKwl1MzIJUmN2QmFzZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOSAqLwogCXUzMiBQYWRFeDlbMTVdOwotCS8vIEV4Q29kZSAxMCA9IFJlY2VpdmUgcmluZyBzaXplCi0JdTMyIFJjdlNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMAorCS8qIEV4Q29kZSAxMCA9IFJlY2VpdmUgcmluZyBzaXplICovCisJdTMyCVJjdlNpemU7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEwICovCiAJdTMyIFBhZEV4MTBbMTVdOwotCS8vIEV4Q29kZSAxMSA9IFJlYWQgRUVQUk9NIENvbmZpZwotCXUzMiBDb25maWc7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMQorCS8qIEV4Q29kZSAxMSA9IFJlYWQgRUVQUk9NL0ZsYXNoIENvbmZpZyAqLworCXUzMglDb25maWc7CQkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMSAqLwogCXUzMiBQYWRFeDExWzE1XTsKLQkvLyBFeENvZGUgMTIgPSBNdWx0aWNhc3QgYml0cyAzMTowCi0JdTMyIE1jYXN0TG93OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTIKKwkvKiBFeENvZGUgMTIgPSBNdWx0aWNhc3QgYml0cyAzMTowICovCisJdTMyCU1jYXN0TG93OwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMiAqLwogCXUzMiBQYWRFeDEyWzE1XTsKLQkvLyBFeENvZGUgMTMgPSBNdWx0aWNhc3QgYml0cyA2MzozMgotCXUzMiBNY2FzdEhpZ2g7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMworCS8qIEV4Q29kZSAxMyA9IE11bHRpY2FzdCBiaXRzIDYzOjMyICovCisJdTMyCU1jYXN0SGlnaDsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTMgKi8KIAl1MzIgUGFkRXgxM1sxNV07Ci0JLy8gRXhDb2RlIDE0ID0gUGluZwotCXUzMiBQaW5nOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTQKKwkvKiBFeENvZGUgMTQgPSBQaW5nICovCisJdTMyCVBpbmc7CQkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNCAqLwogCXUzMiBQYWRFeDE0WzE1XTsKLQkvLyBFeENvZGUgMTUgPSBMaW5rIE1UVQotCXUzMiBMaW5rTXR1OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTUKKwkvKiBFeENvZGUgMTUgPSBMaW5rIE1UVSAqLworCXUzMglMaW5rTXR1OwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNSAqLwogCXUzMiBQYWRFeDE1WzE1XTsKLQkvLyBFeENvZGUgMTYgPSBEb3dubG9hZCBzeW5jaHJvbml6YXRpb24KLQl1MzIgTG9hZFN5bmM7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNgorCS8qIEV4Q29kZSAxNiA9IERvd25sb2FkIHN5bmNocm9uaXphdGlvbiAqLworCXUzMglMb2FkU3luYzsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTYgKi8KIAl1MzIgUGFkRXgxNlsxNV07Ci0JLy8gRXhDb2RlIDE3ID0gVXBwZXIgRFJBTSBhZGRyZXNzIGJpdHMgb24gMzItYml0IHN5c3RlbXMKLQl1MzIgVXBwZXI7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNworCS8qIEV4Q29kZSAxNyA9IFVwcGVyIERSQU0gYWRkcmVzcyBiaXRzIG9uIDMyLWJpdCBzeXN0ZW1zICovCisJdTMyCVVwcGVyOwkJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTcgKi8KIAl1MzIgUGFkRXgxN1sxNV07Ci0JLy8gRXhDb2RlIDE4ID0gU2xvd3BhdGggU2VuZCBJbmRleCBBZGRyZXNzCi0JdTMyIFNQU2VuZEluZGV4OwkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxOAorCS8qIEV4Q29kZSAxOCA9IFNsb3dwYXRoIFNlbmQgSW5kZXggQWRkcmVzcyAqLworCXUzMglTUFNlbmRJbmRleDsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTggKi8KIAl1MzIgUGFkRXgxOFsxNV07Ci0JdTMyIFJzdmRYRjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE5CisJLyogRXhDb2RlIDE5ID0gR2V0IHVjb2RlIHN0YXRpc3RpY3MgKi8KKwl1MzIJR2V0VWNvZGVTdGF0czsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTkgKi8KIAl1MzIgUGFkRXgxOVsxNV07Ci0JLy8gRXhDb2RlIDIwID0gQWdncmVnYXRpb24KLQl1MzIgQWdncmVnYXRpb247CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIwCisJLyogRXhDb2RlIDIwID0gQWdncmVnYXRpb24gLSBTZWUgc3hnbWlzYy5jOlN4Z1NldEludGVycnVwdEFnZ3JlZ2F0aW9uICovCisJdTMyCUFnZ3JlZ2F0aW9uOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyMCAqLwogCXUzMiBQYWRFeDIwWzE1XTsKLQkvLyBFeENvZGUgMjEgPSBSZWNlaXZlIE1ETCBwdXNoIHRpbWVyCi0JdTMyIFB1c2hUaWNrczsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIxCisJLyogRXhDb2RlIDIxID0gUmVjZWl2ZSBNREwgcHVzaCB0aW1lciAqLworCXUzMglQdXNoVGlja3M7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIxICovCiAJdTMyIFBhZEV4MjFbMTVdOwotCS8vIEV4Q29kZSAyMiA9IFRPRSBOQQotCXUzMiBBY2tGcmVxdWVuY3k7CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIyCisJLyogRXhDb2RlIDIyID0gQUNLIEZyZXF1ZW5jeSAqLworCXUzMglBY2tGcmVxdWVuY3k7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIyICovCiAJdTMyIFBhZEV4MjJbMTVdOwotCS8vIEV4Q29kZSAyMyA9IFRPRSBOQQorCS8qIEV4Q29kZSAyMyA9IFRPRSBOQSAqLwogCXUzMiBSc3ZkUmVnMjM7CiAJdTMyIFBhZEV4MjNbMTVdOwotCS8vIEV4Q29kZSAyNCA9IFRPRSBOQQorCS8qIEV4Q29kZSAyNCA9IFRPRSBOQSAqLwogCXUzMiBSc3ZkUmVnMjQ7CiAJdTMyIFBhZEV4MjRbMTVdOwotCS8vIEV4Q29kZSAyNSA9IFRPRSBOQQotCXUzMiBSc3ZkUmVnMjU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyNQorCS8qIEV4Q29kZSAyNSA9IFRPRSBOQSAqLworCXUzMglSc3ZkUmVnMjU7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI1ICovCiAJdTMyIFBhZEV4MjVbMTVdOwotCS8vIEV4Q29kZSAyNiA9IFJlY2VpdmUgY2hlY2tzdW0gcmVxdWlyZW1lbnRzCi0JdTMyIFJlY2VpdmVDaGVja3N1bTsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjYKKwkvKiBFeENvZGUgMjYgPSBSZWNlaXZlIGNoZWNrc3VtIHJlcXVpcmVtZW50cyAqLworCXUzMglSZWNlaXZlQ2hlY2tzdW07CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI2ICovCiAJdTMyIFBhZEV4MjZbMTVdOwotCS8vIEV4Q29kZSAyNyA9IFJTUyBSZXF1aXJlbWVudHMKLQl1MzIgUnNzOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjcKKwkvKiBFeENvZGUgMjcgPSBSU1MgUmVxdWlyZW1lbnRzICovCisJdTMyCVJzczsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI3ICovCiAJdTMyIFBhZEV4MjdbMTVdOwotCS8vIEV4Q29kZSAyOCA9IFJTUyBUYWJsZQotCXUzMiBSc3NUYWJsZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI4CisJLyogRXhDb2RlIDI4ID0gUlNTIFRhYmxlICovCisJdTMyCVJzc1RhYmxlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyOCAqLwogCXUzMiBQYWRFeDI4WzE1XTsKLQkvLyBFeENvZGUgMjkgPSBFdmVudCByaW5nIHJlbGVhc2UgZW50cmllcwotCXUzMiBFdmVudFJlbGVhc2U7CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI5CisJLyogRXhDb2RlIDI5ID0gRXZlbnQgcmluZyByZWxlYXNlIGVudHJpZXMgKi8KKwl1MzIJRXZlbnRSZWxlYXNlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyOSAqLwogCXUzMiBQYWRFeDI5WzE1XTsKLQkvLyBFeENvZGUgMzAgPSBOdW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJsaXN0IGNvbW1hbmRzIG9uIHJpbmcgMAotCXUzMiBSY3ZDbWQ7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMAorCS8qIEV4Q29kZSAzMCA9IE51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcmxpc3QgY29tbWFuZHMgb24gcmluZyAwICovCisJdTMyCVJjdkNtZDsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMwICovCiAJdTMyIFBhZEV4MzBbMTVdOwotCS8vIEV4Q29kZSAzMSA9IHNsb3dwYXRoIHRyYW5zbWl0IGNvbW1hbmQgLSBEYXRhWzMxOjBdID0gMQotCXUzMiBYbXRDbWQ7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMQorCS8qIEV4Q29kZSAzMSA9IHNsb3dwYXRoIHRyYW5zbWl0IGNvbW1hbmQgLSBEYXRhWzMxOjBdID0gMSAqLworCXUzMglYbXRDbWQ7CQkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMSAqLwogCXUzMiBQYWRFeDMxWzE1XTsKLQkvLyBFeENvZGUgMzIgPSBEdW1wIGNvbW1hbmQKLQl1MzIgRHVtcENtZDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMyCisJLyogRXhDb2RlIDMyID0gRHVtcCBjb21tYW5kICovCisJdTMyCUR1bXBDbWQ7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMyICovCiAJdTMyIFBhZEV4MzJbMTVdOwotCS8vIEV4Q29kZSAzMyA9IERlYnVnIGNvbW1hbmQKLQl1MzIgRGVidWdDbWQ7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMworCS8qIEV4Q29kZSAzMyA9IERlYnVnIGNvbW1hbmQgKi8KKwl1MzIJRGVidWdDbWQ7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMzICovCiAJdTMyIFBhZEV4MzNbMTVdOwotCS8vIFRoZXJlIGFyZSAxMjggcG9zc2libGUgZXh0ZW5kZWQgY29tbWFuZHMgLSBlYWNoIG9mIGFjY291bnQgZm9yIDE2Ci0JLy8gd29yZHMgKGluY2x1ZGluZyB0aGUgbm9uLXJlbGV2ZW50IGJhc2UgY29tbWFuZCBjb2RlcyAxLTE1KS4KLQkvLyBQYWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlc2UgaGVyZSB0byBicmluZyB1cyB0byB0aGUgbmV4dCBDUFUKLQkvLyBiYXNlLiAgQXMgZXh0ZW5kZWQgY29kZXMgYXJlIGFkZGVkLCByZWR1Y2UgdGhlIGZpcnN0IGFycmF5IHZhbHVlIGluCi0JLy8gdGhlIGZvbGxvd2luZyBmaWVsZAotCXUzMiBQYWRUb05leHRDcHVbOTRdWzE2XTsJLy8gOTQgPSAxMjggLSAzNCAoMzQgPSBFeGNvZGVzIDAgLSAzMykKKwkvKgorCSAqIFRoZXJlIGFyZSAxMjggcG9zc2libGUgZXh0ZW5kZWQgY29tbWFuZHMgLSBlYWNoIG9mIGFjY291bnQgZm9yIDE2CisJICogd29yZHMgKGluY2x1ZGluZyB0aGUgbm9uLXJlbGV2ZW50IGJhc2UgY29tbWFuZCBjb2RlcyAxLTE1KS4KKwkgKiBQYWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlc2UgaGVyZSB0byBicmluZyB1cyB0byB0aGUgbmV4dCBDUFUKKwkgKiBiYXNlLiAgQXMgZXh0ZW5kZWQgY29kZXMgYXJlIGFkZGVkLCByZWR1Y2UgdGhlIGZpcnN0IGFycmF5IHZhbHVlIGluCisJICogdGhlIGZvbGxvd2luZyBmaWVsZAorCSAqLworCXUzMiBQYWRUb05leHRDcHVbOTRdWzE2XTsJLyogOTQgPSAxMjggLSAzNCAoMzQgPSBFeGNvZGVzIDAgLSAzMykqLwogfTsKIAotLy8gSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKDApIHZhbHVlcworLyogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKDApIHZhbHVlcyAqLwogI2RlZmluZSBTWEdfSUNSX0RJU0FCTEUJCQkJCTB4MDAwMDAwMDAKICNkZWZpbmUgU1hHX0lDUl9FTkFCTEUJCQkJCTB4MDAwMDAwMDEKICNkZWZpbmUgU1hHX0lDUl9NQVNLCQkJCQkweDAwMDAwMDAyCkBAIC0xMzksNDcgKzE0NCw2NSBAQAogCSgoKChfTWVzc2FnZUlkKSA8PCBTWEdfSUNSX01TR0lEX1NISUZUKSAmCVwKIAkgIFNYR19JQ1JfTVNHSURfTUFTSykgfCAoX0RhdGEpKQogCi0vLyBUaGUgTWljcm9jb2RlIHN1cHBvcnRzIHVwIHRvIDE2IFJTUyBxdWV1ZXMKLSNkZWZpbmUgU1hHX01BWF9SU1MJCQkJMTYKLSNkZWZpbmUgU1hHX01BWF9SU1NfVEFCTEVfU0laRQkyNTYJLy8gMjU2LWJ5dGUgbWF4CisjZGVmaW5lIFNYR19NSU5fQUdHX0RFRkFVTFQJMHgwMDEwCS8qIE1pbmltdW0gYWdncmVnYXRpb24gZGVmYXVsdCAqLworI2RlZmluZSBTWEdfTUFYX0FHR19ERUZBVUxUCTB4MDA0MAkvKiBNYXhpbXVtIGFnZ3JlZ2F0aW9uIGRlZmF1bHQgKi8KKyNkZWZpbmUgU1hHX01BWF9BR0dfU0hJRlQJMTYJLyogTWF4aW11bSBpbiB0b3AgMTYgYml0cyBvZiByZWdpc3RlciAqLworLyogRGlzYWJsZSBpbnRlcnJ1cHQgYWdncmVnYXRpb24gb24geG10ICovCisjZGVmaW5lIFNYR19BR0dfWE1UX0RJU0FCTEUJMHg4MDAwMDAwMAogCi0jZGVmaW5lIFNYR19SU1NfVENQNgkJCQkweDAwMDAwMDAxCS8vIFJTUyBUQ1Agb3ZlciBJUHY2Ci0jZGVmaW5lIFNYR19SU1NfVENQNAkJCQkweDAwMDAwMDAyCS8vIFJTUyBUQ1Agb3ZlciBJUHY0Ci0jZGVmaW5lIFNYR19SU1NfTEVHQUNZCQkJCTB4MDAwMDAwMDQJLy8gTGluZS1iYXNlIGludGVycnVwdHMKLSNkZWZpbmUgU1hHX1JTU19UQUJMRV9TSVpFCQkJMHgwMDAwRkYwMAkvLyBUYWJsZSBzaXplIG1hc2sKKy8qIFRoZSBNaWNyb2NvZGUgc3VwcG9ydHMgdXAgdG8gMTYgUlNTIHF1ZXVlcyAoUmV2QikgKi8KKyNkZWZpbmUgU1hHX01BWF9SU1MJCQkxNgorI2RlZmluZSBTWEdfTUFYX1JTU19SRVZBCQk4CisKKyNkZWZpbmUgU1hHX01BWF9SU1NfVEFCTEVfU0laRQkyNTYJCS8qIDI1Ni1ieXRlIG1heCAqLworCisjZGVmaW5lIFNYR19SU1NfUkVWQV9UQ1A2CTB4MDAwMDAwMDEJLyogUlNTIFRDUCBvdmVyIElQdjYgKi8KKyNkZWZpbmUgU1hHX1JTU19SRVZBX1RDUDQJMHgwMDAwMDAwMgkvKiBSU1MgVENQIG92ZXIgSVB2NCAqLworI2RlZmluZSBTWEdfUlNTX0lQCQkweDAwMDAwMDAxCS8qIFJTUyBUQ1Agb3ZlciBJUHY2ICovCisjZGVmaW5lIFNYR19SU1NfVENQCQkweDAwMDAwMDAyCS8qIFJTUyBUQ1Agb3ZlciBJUHY0ICovCisjZGVmaW5lIFNYR19SU1NfTEVHQUNZCQkweDAwMDAwMDA0CS8qIExpbmUtYmFzZSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0laRQkweDAwMDBGRjAwCS8qIFRhYmxlIHNpemUgbWFzayAqLworCiAjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0hJRlQJCQk4Ci0jZGVmaW5lCVNYR19SU1NfQkFTRV9DUFUJCQkweDAwRkYwMDAwCS8vIEJhc2UgQ1BVIChub3QgdXNlZCkKKyNkZWZpbmUJU1hHX1JTU19CQVNFX0NQVQkweDAwRkYwMDAwCS8qIEJhc2UgQ1BVIChub3QgdXNlZCkgKi8KICNkZWZpbmUgU1hHX1JTU19CQVNFX1NISUZUCQkJMTYKIAotI2RlZmluZSBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRAkJMHgwMDAwMDAwMQkvLyBFeENvZGUgMjYgKFJlY2VpdmVDaGVja3N1bSkKLSNkZWZpbmUgU1hHX1JDVl9UQ1BfQ1NVTV9FTkFCTEVECTB4MDAwMDAwMDIJLy8gRXhDb2RlIDI2IChSZWNlaXZlQ2hlY2tzdW0pCisjZGVmaW5lIFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVECQkweDAwMDAwMDAxCS8qIEV4Q29kZSAyNiAoUmVjZWl2ZUNoZWNrc3VtKSAqLworI2RlZmluZSBTWEdfUkNWX1RDUF9DU1VNX0VOQUJMRUQJMHgwMDAwMDAwMgkvKiBFeENvZGUgMjYgKFJlY2VpdmVDaGVja3N1bSkgKi8KIAogI2RlZmluZSBTWEdfWE1UX0NQVUlEX1NISUZUCQkJMTYKIAotI2lmIFZQQ0kKLSNkZWZpbmUgU1hHX0NIRUNLX0ZPUl9IQU5HX1RJTUUJCTMwMDAKLSNlbHNlCisvKgorICogU3RhdHVzIHJldHVybmVkIGJ5IHVjb2RlIGluIHRoZSBDb25maWdTdGF0IHJlZyAoc2VlIGFib3ZlKSB3aGVuIGF0dGVtcHRlZAorICogdG8gbG9hZCBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSB0aGUgRUVQUk9NL0ZsYXNoLgorICovCisjZGVmaW5lCVNYR19DRkdfVElNRU9VVAkJMQkvKiBpbml0IHZhbHVlIC0gdGltZW91dCBpZiB1bmNoYW5nZWQgKi8KKyNkZWZpbmUJU1hHX0NGR19MT0FEX0VFUFJPTQkyCS8qIGNvbmZpZyBkYXRhIGxvYWRlZCBmcm9tIEVFUFJPTSAqLworI2RlZmluZQlTWEdfQ0ZHX0xPQURfRkxBU0gJMwkvKiBjb25maWcgZGF0YSBsb2FkZWQgZnJvbSBmbGFzaCAqLworI2RlZmluZQlTWEdfQ0ZHX0xPQURfSU5WQUxJRAk0CS8qIG5vIHZhbGlkIGNvbmZpZyBkYXRhIGZvdW5kICovCisjZGVmaW5lCVNYR19DRkdfTE9BRF9FUlJPUgk1CS8qIGhhcmR3YXJlIGVycm9yICovCisKICNkZWZpbmUgU1hHX0NIRUNLX0ZPUl9IQU5HX1RJTUUJCTUKLSNlbmRpZgogCiAvKgogICogVENCIHJlZ2lzdGVycyAtIFRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIHJlZ2lzdGVyIG1lbW9yeSBhcmVhIGFzIFVDT0RFX1JFR1MKICAqIGFib3ZlLCBidXQgZGVmaW5lZCBkaWZmZXJlbnRseS4gIEJpdHMgMTc6MDYgb2YgdGhlIGFkZHJlc3MgZGVmaW5lIHRoZSBUQ0IsCiAgKiB3aGljaCBtZWFucyBlYWNoIFRDQiBhcmVhIG9jY3VwaWVzIDB4NDAgKDY0KSBieXRlcywgb3IgMTYgdTMyUy4gIFdoYXQgcmVhbGx5CiAgKiBpcyBoYXBwZW5pbmcgaXMgdGhhdCB0aGVzZSByZWdpc3RlcnMgb2NjdXB5IHRoZSAiUGFkRXhbMTVdIiBhcmVhcyBpbiB0aGUKLSAqIFNYR19VQ09ERV9SRUdTIGRlZmluaXRpb24gYWJvdmUKKyAqIHN0cnVjdCBzeGdfdWNvZGVfcmVncyBkZWZpbml0aW9uIGFib3ZlCiAgKi8KLXN0cnVjdCBTWEdfVENCX1JFR1MgewotCXUzMiBFeENvZGU7CQkvKiBFeHRlbmRlZCBjb2RlcyAtIHNlZSBTWEdfVUNPREVfUkVHUyAqLwotCXUzMiBYbXQ7CQkvKiBDb2RlID0gMSAtICMgb2YgWG10IGRlc2NyaXB0b3JzIGFkZGVkIHRvIHJpbmcgKi8KLQl1MzIgUmN2OwkJLyogQ29kZSA9IDIgLSAjIG9mIFJjdiBkZXNjcmlwdG9ycyBhZGRlZCB0byByaW5nICovCi0JdTMyIFJzdmQxOwkJLyogQ29kZSA9IDMgLSBUT0UgTkEgKi8KLQl1MzIgUnN2ZDI7CQkvKiBDb2RlID0gNCAtIFRPRSBOQSAqLwotCXUzMiBSc3ZkMzsJCS8qIENvZGUgPSA1IC0gVE9FIE5BICovCi0JdTMyIEludmFsaWQ7CQkvKiBDb2RlID0gNiAtIFJlc2VydmVkIGZvciAiQ2FyZFVwIiBzZWUgYWJvdmUgKi8KLQl1MzIgUnN2ZDQ7CQkvKiBDb2RlID0gNyAtIFRPRSBOQSAqLwotCXUzMiBSc3ZkNTsJCS8qIENvZGUgPSA4IC0gVE9FIE5BICovCi0JdTMyIFBhZFs3XTsJCS8qIENvZGVzIDgtMTUgLSBOb3QgdXNlZC4gKi8KK3N0cnVjdCBzeGdfdGNiX3JlZ3MgeworCXUzMiBFeENvZGU7CS8qIEV4dGVuZGVkIGNvZGVzIC0gc2VlIFNYR19VQ09ERV9SRUdTICovCisJdTMyIFhtdDsJLyogQ29kZSA9IDEgLSAjIG9mIFhtdCBkZXNjcmlwdG9ycyBhZGRlZCB0byByaW5nICovCisJdTMyIFJjdjsJLyogQ29kZSA9IDIgLSAjIG9mIFJjdiBkZXNjcmlwdG9ycyBhZGRlZCB0byByaW5nICovCisJdTMyIFJzdmQxOwkvKiBDb2RlID0gMyAtIFRPRSBOQSAqLworCXUzMiBSc3ZkMjsJLyogQ29kZSA9IDQgLSBUT0UgTkEgKi8KKwl1MzIgUnN2ZDM7CS8qIENvZGUgPSA1IC0gVE9FIE5BICovCisJdTMyIEludmFsaWQxOwkvKiBDb2RlID0gNiAtIFJlc2VydmVkIGZvciAiQ2FyZFVwIiBzZWUgYWJvdmUgKi8KKwl1MzIgUnN2ZDQ7CS8qIENvZGUgPSA3IC0gVE9FIE5BICovCisJdTMyIEludmFsaWQyOwkvKiBDb2RlID0gOCAtIFJlc2VydmVkIGZvciAiQ29uZmlnU3RhdCIgc2VlIGFib3ZlICovCisJdTMyIFJzdmQ1OwkvKiBDb2RlID0gOSAtIFRPRSBOQSAqLworCXUzMiBQYWRbNl07CS8qIENvZGVzIDEwLTE1IC0gTm90IHVzZWQuICovCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMDYsMjkgKzIyOSwyNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fC0tLXwtQ3B1SWQgb2YgY3Jhc2gKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0vCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTWEdfSVNSX0VSUgkJMHg4MDAwMDAwMAkvLyBFcnJvcgotI2RlZmluZSBTWEdfSVNSX0VWRU5UCQkweDQwMDAwMDAwCS8vIEV2ZW50IHJpbmcgZXZlbnQKLSNkZWZpbmUgU1hHX0lTUl9OT05FMQkJMHgyMDAwMDAwMAkvLyBOb3QgdXNlZAotI2RlZmluZSBTWEdfSVNSX1VQQwkJMHgxMDAwMDAwMAkvLyBEdW1wL2RlYnVnIGNvbW1hbmQgY29tcGxldGUKLSNkZWZpbmUgU1hHX0lTUl9MSU5LCQkweDA4MDAwMDAwCS8vIExpbmsgZXZlbnQKLSNkZWZpbmUgU1hHX0lTUl9QRFFGCQkweDA0MDAwMDAwCS8vIFByb2Nlc3NlZCBkYXRhIHF1ZXVlIGZ1bGwKLSNkZWZpbmUgU1hHX0lTUl9STUlTUwkJMHgwMjAwMDAwMAkvLyBEcm9wIC0gbm8gaG9zdCBidWYKLSNkZWZpbmUgU1hHX0lTUl9CUkVBSwkJMHgwMTAwMDAwMAkvLyBCcmVha3BvaW50IGhpdAotI2RlZmluZSBTWEdfSVNSX1BJTkcJCTB4MDA4MDAwMDAJLy8gSGVhcnRiZWF0IHJlc3BvbnNlCi0jZGVmaW5lIFNYR19JU1JfREVBRAkJMHgwMDQwMDAwMAkvLyBDYXJkIGNyYXNoCi0jZGVmaW5lIFNYR19JU1JfRVJGVUxMCQkweDAwMjAwMDAwCS8vIEV2ZW50IHJpbmcgZnVsbAotI2RlZmluZSBTWEdfSVNSX1hEUk9QCQkweDAwMTAwMDAwCS8vIFhNVCBEcm9wIC0gbm8gRFJBTSBidWZzIG9yIFhNVCBlcnIKLSNkZWZpbmUgU1hHX0lTUl9TUFNFTkQJCTB4MDAwODAwMDAJLy8gU2xvdyBzZW5kIGNvbXBsZXRlCi0jZGVmaW5lIFNYR19JU1JfQ1BVCQkweDAwMDcwMDAwCS8vIERlYWQgQ1BVIG1hc2sKLSNkZWZpbmUgU1hHX0lTUl9DUFVfU0hJRlQJCTE2CS8vIERlYWQgQ1BVIHNoaWZ0Ci0jZGVmaW5lIFNYR19JU1JfQ1JBU0gJCTB4MDAwMEZGRkYJLy8gQ3Jhc2ggYWRkcmVzcyBtYXNrCisjZGVmaW5lIFNYR19JU1JfRVJSCQkweDgwMDAwMDAwCS8qIEVycm9yICovCisjZGVmaW5lIFNYR19JU1JfRVZFTlQJCTB4NDAwMDAwMDAJLyogRXZlbnQgcmluZyBldmVudCAqLworI2RlZmluZSBTWEdfSVNSX05PTkUxCQkweDIwMDAwMDAwCS8qIE5vdCB1c2VkICovCisjZGVmaW5lIFNYR19JU1JfVVBDCQkweDEwMDAwMDAwCS8qIER1bXAvZGVidWcgY29tbWFuZCBjb21wbGV0ZSovCisjZGVmaW5lIFNYR19JU1JfTElOSwkJMHgwODAwMDAwMAkvKiBMaW5rIGV2ZW50ICovCisjZGVmaW5lIFNYR19JU1JfUERRRgkJMHgwNDAwMDAwMAkvKiBQcm9jZXNzZWQgZGF0YSBxdWV1ZSBmdWxsICovCisjZGVmaW5lIFNYR19JU1JfUk1JU1MJCTB4MDIwMDAwMDAJLyogRHJvcCAtIG5vIGhvc3QgYnVmICovCisjZGVmaW5lIFNYR19JU1JfQlJFQUsJCTB4MDEwMDAwMDAJLyogQnJlYWtwb2ludCBoaXQgKi8KKyNkZWZpbmUgU1hHX0lTUl9QSU5HCQkweDAwODAwMDAwCS8qIEhlYXJ0YmVhdCByZXNwb25zZSAqLworI2RlZmluZSBTWEdfSVNSX0RFQUQJCTB4MDA0MDAwMDAJLyogQ2FyZCBjcmFzaCAqLworI2RlZmluZSBTWEdfSVNSX0VSRlVMTAkJMHgwMDIwMDAwMAkvKiBFdmVudCByaW5nIGZ1bGwgKi8KKyNkZWZpbmUgU1hHX0lTUl9YRFJPUAkJMHgwMDEwMDAwMAkvKiBYTVQgRHJvcCAtIG5vIERSQU0gYnVmcyBvciBYTVQgZXJyICovCisjZGVmaW5lIFNYR19JU1JfU1BTRU5ECQkweDAwMDgwMDAwCS8qIFNsb3cgc2VuZCBjb21wbGV0ZSAqLworI2RlZmluZSBTWEdfSVNSX0NQVQkJMHgwMDA3MDAwMAkvKiBEZWFkIENQVSBtYXNrICovCisjZGVmaW5lIFNYR19JU1JfQ1BVX1NISUZUCTE2CQkvKiBEZWFkIENQVSBzaGlmdCAqLworI2RlZmluZSBTWEdfSVNSX0NSQVNICQkweDAwMDBGRkZGCS8qIENyYXNoIGFkZHJlc3MgbWFzayAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRXZlbnQgUmluZyBlbnRyeQogICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgogICogIDMxICAgICAgICAgICAgICAgICAgMTUgICAgICAgICAgICAgICAgIDAKICAqICAuX19fX19fX19fX19fX19fX19fXy5fX19fX19fX19fX19fX19fX19fLgogICogIHw8LS0tLS0tLS0tLS0tICAgIFBhZCAwICAgIC0tLS0tLS0tLS0tLT58CkBAIC0yNzAsMTk2ICsyOTAsMjIzIEBACiAgKiAgICB8fC0tLS0tLS0gSVNUQ1BJUAogICogICAgfC0tLS0tLS0tIFNDRVJSCiAgKgotICovCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI3ByYWdtYSBwYWNrKHB1c2gsIDEpCi1zdHJ1Y3QgU1hHX0VWRU5UIHsKLQl1MzIgUGFkWzFdOwkJLy8gbm90IHVzZWQKLQl1MzIgU25kVW5hOwkJLy8gU25kVW5hIHZhbHVlCi0JdTMyIFJlc2lkOwkJLy8gcmVjZWl2ZSBNREwgcmVzaWQKK3N0cnVjdCBzeGdfZXZlbnQgeworCXUzMgkJCVBhZFsxXTsJCS8qIG5vdCB1c2VkICovCisJdTMyCQkJU25kVW5hOwkJLyogU25kVW5hIHZhbHVlICovCisJdTMyCQkJUmVzaWQ7CQkvKiByZWNlaXZlIE1ETCByZXNpZCAqLwogCXVuaW9uIHsKLQkJdm9pZCAqSG9zdEhhbmRsZTsJLy8gUmVjZWl2ZSBob3N0IGhhbmRsZQotCQl1MzIgUnN2ZDE7CS8vIFRPRSBOQQorCQl2b2lkICoJCUhvc3RIYW5kbGU7CS8qIFJlY2VpdmUgaG9zdCBoYW5kbGUgKi8KKwkJdTMyCQlSc3ZkMTsJCS8qIFRPRSBOQSAqLwogCQlzdHJ1Y3QgewogCQkJdTMyIE5vdFVzZWQ7Ci0JCQl1MzIgUnN2ZDI7CS8vIFRPRSBOQQorCQkJdTMyCVJzdmQyOwkJLyogVE9FIE5BICovCiAJCX0gRmx1c2g7CiAJfTsKLQl1MzIgVG9lcGxpdHo7CQkvLyBSU1MgVG9lcGxpdHogaGFzaAorCXUzMgkJCVRvZXBsaXR6OwkvKiBSU1MgVG9lcGxpdHogaGFzaCAqLwogCXVuaW9uIHsKLQkJdXNob3J0IFJzdmQzOwkvLyBUT0UgTkEKLQkJdXNob3J0IEhkck9mZnNldDsJLy8gU2xvd3BhdGgKKwkJdXNob3J0CQlSc3ZkMzsJCS8qIFRPRSBOQSAqLworCQl1c2hvcnQJCUhkck9mZnNldDsJLyogU2xvd3BhdGggKi8KIAl9OwotCXVzaG9ydCBMZW5ndGg7CQkvLwotCXVuc2lnbmVkIGNoYXIgUnN2ZDQ7CS8vIFRPRSBOQQotCXVuc2lnbmVkIGNoYXIgQ29kZTsJLy8gRXZlbnQgY29kZQotCXVuc2lnbmVkIGNoYXIgQ29tbWFuZEluZGV4OwkvLyBOZXcgcmluZyBpbmRleAotCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvLyBFdmVudCBzdGF0dXMKKwl1c2hvcnQJCQlMZW5ndGg7CisJdW5zaWduZWQgY2hhciAJUnN2ZDQ7CQkvKiBUT0UgTkEgKi8KKwl1bnNpZ25lZCBjaGFyIAlDb2RlOwkJLyogRXZlbnQgY29kZSAqLworCXVuc2lnbmVkIGNoYXIJQ29tbWFuZEluZGV4OwkvKiBOZXcgcmluZyBpbmRleCAqLworCXVuc2lnbmVkIGNoYXIJU3RhdHVzOwkJLyogRXZlbnQgc3RhdHVzICovCiB9OwogI3ByYWdtYSBwYWNrKHBvcCkKIAotLy8gRXZlbnQgY29kZSBkZWZpbml0aW9ucwotI2RlZmluZSBFVkVOVF9DT0RFX0JVRkZFUlMJMHgwMQkvLyBSZWNlaXZlIGJ1ZmZlciBsaXN0IGNvbW1hbmQgKHJpbmcgMCkKLSNkZWZpbmUgRVZFTlRfQ09ERV9TTE9XUkNWCTB4MDIJLy8gU2xvd3BhdGggcmVjZWl2ZQotI2RlZmluZSBFVkVOVF9DT0RFX1VOVVNFRAkweDA0CS8vIFdhcyBzbG93cGF0aCBjb21tYW5kcyBjb21wbGV0ZQorLyogRXZlbnQgY29kZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBFVkVOVF9DT0RFX0JVRkZFUlMJMHgwMQkvKiBSZWNlaXZlIGJ1ZmZlciBsaXN0IGNvbW1hbmQgKHJpbmcgMCkgKi8KKyNkZWZpbmUgRVZFTlRfQ09ERV9TTE9XUkNWCTB4MDIJLyogU2xvd3BhdGggcmVjZWl2ZSAqLworI2RlZmluZSBFVkVOVF9DT0RFX1VOVVNFRAkweDA0CS8qIFdhcyBzbG93cGF0aCBjb21tYW5kcyBjb21wbGV0ZSAqLwogCi0vLyBTdGF0dXMgdmFsdWVzCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19WQUxJRAkweDgwCS8vIEVudHJ5IHZhbGlkCisvKiBTdGF0dXMgdmFsdWVzICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19WQUxJRAkweDgwCS8qIEVudHJ5IHZhbGlkICovCiAKLS8vIFNsb3dwYXRoIHN0YXR1cwotI2RlZmluZSBFVkVOVF9TVEFUVVNfRVJST1IJMHg0MAkvLyBDb21wbGV0ZWQgd2l0aCBlcnJvci4gSW5kZXggaW4gbmV4dCBieXRlCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUDQJMHgyMAkvLyBUQ1BJUHY0IGZyYW1lCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BCQUQJMHgxMAkvLyBCYWQgVENQIGNoZWNrc3VtCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19JUEJBRAkweDA4CS8vIEJhZCBJUCBjaGVja3N1bQotI2RlZmluZSBFVkVOVF9TVEFUVVNfUkNWRVJSCTB4MDQJLy8gU2xvd3BhdGggcmVjZWl2ZSBlcnJvcgotI2RlZmluZSBFVkVOVF9TVEFUVVNfSVBPTkxZCTB4MDIJLy8gSVAgZnJhbWUKLSNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQNgkweDAxCS8vIFRDUElQdjYgZnJhbWUKLSNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQCTB4MjEJLy8gQ29tYmluYXRpb24gb2YgdjQgYW5kIHY2CisvKiBTbG93cGF0aCBzdGF0dXMgKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX0VSUk9SCTB4NDAJLyogQ29tcGxldGVkIHdpdGggZXJyb3IuIEluZGV4IGluIG5leHQgYnl0ZSAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQSVA0CTB4MjAJLyogVENQSVB2NCBmcmFtZSAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQQkFECTB4MTAJLyogQmFkIFRDUCBjaGVja3N1bSAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfSVBCQUQJMHgwOAkvKiBCYWQgSVAgY2hlY2tzdW0gKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1JDVkVSUgkweDA0CS8qIFNsb3dwYXRoIHJlY2VpdmUgZXJyb3IgKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX0lQT05MWQkweDAyCS8qIElQIGZyYW1lICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUDYJMHgwMQkvKiBUQ1BJUHY2IGZyYW1lICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUAkweDIxCS8qIENvbWJpbmF0aW9uIG9mIHY0IGFuZCB2NiAqLwogCi0vLyBFdmVudCByaW5nCi0vLyBTaXplIG11c3QgYmUgcG93ZXIgb2YgMiwgYmV0d2VlbiAxMjggYW5kIDE2awotI2RlZmluZSBFVkVOVF9SSU5HX1NJWkUJCTQwOTYJLy8gPz8KLSNkZWZpbmUgRVZFTlRfUklOR19CQVRDSAkxNgkvLyBIYW5kIGVudHJpZXMgYmFjayAxNiBhdCBhIHRpbWUuCi0jZGVmaW5lIEVWRU5UX0JBVENIX0xJTUlUCTI1NgkvLyBTdG9wIHByb2Nlc3NpbmcgZXZlbnRzIGFmdGVyIDI1NiAoMTYgKiAxNikKKy8qCisgKiBFdmVudCByaW5nCisgKiBTaXplIG11c3QgYmUgcG93ZXIgb2YgMiwgYmV0d2VlbiAxMjggYW5kIDE2aworICovCisjZGVmaW5lIEVWRU5UX1JJTkdfU0laRQkJNDA5NgorI2RlZmluZSBFVkVOVF9SSU5HX0JBVENICTE2CS8qIEhhbmQgZW50cmllcyBiYWNrIDE2IGF0IGEgdGltZS4gKi8KKy8qIFN0b3AgcHJvY2Vzc2luZyBldmVudHMgYWZ0ZXIgNDA5NiAoMjU2ICogMTYpICovCisjZGVmaW5lIEVWRU5UX0JBVENIX0xJTUlUCTI1NgogCi1zdHJ1Y3QgU1hHX0VWRU5UX1JJTkcgewotCXN0cnVjdCBTWEdfRVZFTlQgUmluZ1tFVkVOVF9SSU5HX1NJWkVdOworc3RydWN0IHN4Z19ldmVudF9yaW5nIHsKKwlzdHJ1Y3Qgc3hnX2V2ZW50IFJpbmdbRVZFTlRfUklOR19TSVpFXTsKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUQ0IgQnVmZmVycwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLyBNYXhpbXVtIG51bWJlciBvZiBUQ0JTIHN1cHBvcnRlZCBieSBoYXJkd2FyZS9taWNyb2NvZGUKKy8qIFRDQiBCdWZmZXJzICovCisvKiBNYXhpbXVtIG51bWJlciBvZiBUQ0JTIHN1cHBvcnRlZCBieSBoYXJkd2FyZS9taWNyb2NvZGUgKi8KICNkZWZpbmUgU1hHX01BWF9UQ0IJCTQwOTYKLS8vIE1pbmltdW0gVENCcyBiZWZvcmUgd2UgZmFpbCBpbml0aWFsaXphdGlvbgorLyogTWluaW11bSBUQ0JzIGJlZm9yZSB3ZSBmYWlsIGluaXRpYWxpemF0aW9uICovCiAjZGVmaW5lIFNYR19NSU5fVENCCQk1MTIKLS8vIFRDQiBIYXNoCi0vLyBUaGUgYnVja2V0IGlzIGRldGVybWluZWQgYnkgYml0cyAxMTo0IG9mIHRoZSB0b2VwbGl0eiBpZiB3ZSBzdXBwb3J0IDRrCi0vLyBvZmZsb2FkZWQgY29ubmVjdGlvbnMsIDEwOjQgaWYgd2Ugc3VwcG9ydCAyayBhbmQgc28gb24uCisvKgorICogVENCIEhhc2gKKyAqIFRoZSBidWNrZXQgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIDExOjQgb2YgdGhlIHRvZXBsaXR6IGlmIHdlIHN1cHBvcnQgNGsKKyAqIG9mZmxvYWRlZCBjb25uZWN0aW9ucywgMTA6NCBpZiB3ZSBzdXBwb3J0IDJrIGFuZCBzbyBvbi4KKyAqLwogI2RlZmluZSBTWEdfVENCX0JVQ0tFVF9TSElGVAk0Ci0jZGVmaW5lIFNYR19UQ0JfUEVSX0JVQ0tFVAkJMTYKLSNkZWZpbmUgU1hHX1RDQl9CVUNLRVRfTUFTSwkJMHhGRjAJLy8gQnVja2V0IHBvcnRpb24gb2YgVENCIElECi0jZGVmaW5lIFNYR19UQ0JfRUxFTUVOVF9NQVNLCTB4MDBGCS8vIEVsZW1lbnQgd2l0aGluIGJ1Y2tldAotI2RlZmluZSBTWEdfVENCX0JVQ0tFVFMJCQkyNTYJLy8gMjU2ICogMTYgPSA0aworI2RlZmluZSBTWEdfVENCX1BFUl9CVUNLRVQJMTYKKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRfTUFTSwkweEZGMAkvKiBCdWNrZXQgcG9ydGlvbiBvZiBUQ0IgSUQgKi8KKyNkZWZpbmUgU1hHX1RDQl9FTEVNRU5UX01BU0sJMHgwMEYJLyogRWxlbWVudCB3aXRoaW4gYnVja2V0ICovCisjZGVmaW5lIFNYR19UQ0JfQlVDS0VUUwkJMjU2CQkvKiAyNTYgKiAxNiA9IDRrICovCiAKLSNkZWZpbmUgU1hHX1RDQl9CVUZGRVJfU0laRQk1MTIJLy8gQVNTRVJUIGZvcm1hdCBpcyBjb3JyZWN0CisjZGVmaW5lIFNYR19UQ0JfQlVGRkVSX1NJWkUJNTEyCS8qIEFTU0VSVCBmb3JtYXQgaXMgY29ycmVjdCAqLwogCi0jZGVmaW5lIFNYR19UQ0JfUkNWUV9TSVpFCQk3MzYKKyNkZWZpbmUgU1hHX1RDQl9SQ1ZRX1NJWkUJNzM2CiAKICNkZWZpbmUgU1hHX1RDQl9DT01QT1NJVEVfQlVGRkVSX1NJWkUJMTAyNAogCi0jZGVmaW5lIFNYR19MT0NBVEVfVENQX0ZSQU1FX0hEUihfVGNwT2JqZWN0LCBfSVB2NikJCQkJCQkJXAotCSgoKF9UY3BPYmplY3QpLT5WbGFuSWQpID8JCQkJCQkJCQkJCQlcCi0JICgoX0lQdjYpID8JCS8qIFZsYW4gZnJhbWUgaGVhZGVyID0geWVzICovCQkJCQkJCVwKLQkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXA2LlN4Z1RjcAkJCToJXAotCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcC5TeGdUY3ApCQkJOiAJXAotCSAoKF9JUHY2KSA/CQkvKiBWbGFuIGZyYW1lIGhlYWRlciA9IE5vICovCQkJCQkJCVwKLQkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcDYuU3hnVGNwCQkJCTogCVwKKyNkZWZpbmUgU1hHX0xPQ0FURV9UQ1BfRlJBTUVfSERSKF9UY3BPYmplY3QsIF9JUHY2KQkJCVwKKwkoKChfVGNwT2JqZWN0KS0+VmxhbklkKSA/CQkJCQlcCisJICgoX0lQdjYpID8JCS8qIFZsYW4gZnJhbWUgaGVhZGVyID0geWVzICovCQlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwNi5TeGdUY3A6CVwKKwkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXAuU3hnVGNwKTogCVwKKwkgKChfSVB2NikgPwkJLyogVmxhbiBmcmFtZSBoZWFkZXIgPSBObyAqLwkJXAorCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwNi5TeGdUY3AJOiAJXAogCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwLlN4Z1RjcCkpCiAKLSNkZWZpbmUgU1hHX0xPQ0FURV9JUF9GUkFNRV9IRFIoX1RjcE9iamVjdCkJCQkJCQkJCQlcCi0JKF9UY3BPYmplY3QpLT5WbGFuSWQgPwkJCQkJCQkJCQkJCQlcCi0JJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcC5JcAkJCQk6IAkJXAorI2RlZmluZSBTWEdfTE9DQVRFX0lQX0ZSQU1FX0hEUihfVGNwT2JqZWN0KQkJCQlcCisJKF9UY3BPYmplY3QpLT5WbGFuSWQgPwkJCQkJCVwKKwkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwLklwOiAJCVwKIAkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXAuSXAKIAotI2RlZmluZSBTWEdfTE9DQVRFX0lQNl9GUkFNRV9IRFIoX1RjcE9iamVjdCkJCQkJCQkJCVwKLQkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJCQkJCQkJCVwKLQkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwNi5JcAkJCQk6CQlcCisjZGVmaW5lIFNYR19MT0NBVEVfSVA2X0ZSQU1FX0hEUihUY3BPYmplY3QpCQkJCVwKKwkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJXAorCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXA2LklwOgkJXAogCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcDYuSXAKIAogI2lmIERCRwotLy8gSG9ycmlibGUga2x1ZGdlIHRvIGRpc3Rpbmd1aXNoIGR1bWItbmljLCBzbG93cGF0aCwgYW5kCi0vLyBmYXN0cGF0aCB0cmFmZmljLiAgRGVjcmVtZW50IHRoZSBIb3BMaW1pdCBieSBvbmUKLS8vIGZvciBzbG93cGF0aCwgdHdvIGZvciBmYXN0cGF0aC4gIFRoaXMgYXNzdW1lcyB0aGUgbGltaXQgaXMgbWVhc3VyYWJseQotLy8gZ3JlYXRlciB0aGFuIHR3bywgd2hpY2ggSSB0aGluayBpcyByZWFzb25hYmxlLgotLy8gT2J2aW91c2x5IHRoaXMgaXMgREJHIG9ubHkuICBNYXliZSByZW1vdmUgbGF0ZXIsIG9yICNpZiAwIHNvIHdlCi0vLyBjYW4gc2V0IGl0IHdoZW4gbmVlZGVkCi0jZGVmaW5lIFNYR19EQkdfSE9QX0xJTUlUKF9UY3BPYmplY3QsIF9GYXN0UGF0aCkgewkJCQkJCQkJXAotCVBJUFY2X0hEUgkJX0lwNkZyYW1lSGRyOwkJCQkJCQkJCQkJCVwKLQlpZigoX1RjcE9iamVjdCktPklQdjYpIHsJCQkJCQkJCQkJCQkJXAotCQlfSXA2RnJhbWVIZHIgPSBTWEdfTE9DQVRFX0lQNl9GUkFNRV9IRFIoKF9UY3BPYmplY3QpKTsJCQkJCVwKLQkJaWYoX0Zhc3RQYXRoKSB7CQkJCQkJCQkJCQkJCQkJXAotCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IChfVGNwT2JqZWN0KS0+Q2FjaGVkLlR0bE9ySG9wTGltaXQgLSAyOwlcCi0JCX0gZWxzZSB7CQkJCQkJCQkJCQkJCQkJCVwKLQkJCV9JcDZGcmFtZUhkci0+SG9wTGltaXQgPSAoX1RjcE9iamVjdCktPkNhY2hlZC5UdGxPckhvcExpbWl0IC0gMTsJXAotCQl9CQkJCQkJCQkJCQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorLyoKKyAqIEhvcnJpYmxlIGtsdWRnZSB0byBkaXN0aW5ndWlzaCBkdW1iLW5pYywgc2xvd3BhdGgsIGFuZAorICogZmFzdHBhdGggdHJhZmZpYy4gIERlY3JlbWVudCB0aGUgSG9wTGltaXQgYnkgb25lCisgKiBmb3Igc2xvd3BhdGgsIHR3byBmb3IgZmFzdHBhdGguICBUaGlzIGFzc3VtZXMgdGhlIGxpbWl0IGlzIG1lYXN1cmFibHkKKyAqIGdyZWF0ZXIgdGhhbiB0d28sIHdoaWNoIEkgdGhpbmsgaXMgcmVhc29uYWJsZS4KKyAqIE9idmlvdXNseSB0aGlzIGlzIERCRyBvbmx5LiAgTWF5YmUgcmVtb3ZlIGxhdGVyLCBvciAjaWYgMCBzbyB3ZQorICogY2FuIHNldCBpdCB3aGVuIG5lZWRlZAorICovCisjZGVmaW5lIFNYR19EQkdfSE9QX0xJTUlUKF9UY3BPYmplY3QsIF9GYXN0UGF0aCkgewkJCVwKKwlQSVBWNl9IRFIJCV9JcDZGcmFtZUhkcjsJCQkJXAorCWlmICgoX1RjcE9iamVjdCktPklQdjYpIHsJCQkJCVwKKwkJX0lwNkZyYW1lSGRyID0gU1hHX0xPQ0FURV9JUDZfRlJBTUVfSERSKChfVGNwT2JqZWN0KSk7CVwKKwkJaWYgKF9GYXN0UGF0aCkgewkJCQkJXAorCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IAkJCVwKKwkJCQkoX1RjcE9iamVjdCktPkNhY2hlZC5UdGxPckhvcExpbWl0IC0gMjsJXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCV9JcDZGcmFtZUhkci0+SG9wTGltaXQgPSAJCQlcCisJCQkJKF9UY3BPYmplY3QpLT5DYWNoZWQuVHRsT3JIb3BMaW1pdCAtIDE7CVwKKwkJfQkJCQkJCQlcCisJfQkJCQkJCQkJXAogfQogI2Vsc2UKLS8vIERvIG5vdGhpbmcgd2l0aCBmcmVlIGJ1aWxkCisvKiBEbyBub3RoaW5nIHdpdGggZnJlZSBidWlsZCAqLwogI2RlZmluZSBTWEdfREJHX0hPUF9MSU1JVChfVGNwT2JqZWN0LCBfRmFzdFBhdGgpCiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncyAqLwogI2RlZmluZSBTWEdfTUFYX1JJTkdfU0laRQkyNTYKLSNkZWZpbmUgU1hHX1hNVF9SSU5HX1NJWkUJMTI4CS8vIFN0YXJ0IHdpdGggMTI4Ci0jZGVmaW5lIFNYR19SQ1ZfUklOR19TSVpFCTEyOAkvLyBTdGFydCB3aXRoIDEyOAorI2RlZmluZSBTWEdfWE1UX1JJTkdfU0laRQkxMjgJCS8qIFN0YXJ0IHdpdGggMTI4ICovCisjZGVmaW5lIFNYR19SQ1ZfUklOR19TSVpFCTEyOAkJLyogU3RhcnQgd2l0aCAxMjggKi8KICNkZWZpbmUgU1hHX01BWF9FTlRSSUVTICAgICA0MDk2CisjZGVmaW5lIFNYR19KVU1CT19SQ1ZfUklOR19TSVpFICAgICAgIDMyCiAKLS8vIFN0cnVjdHVyZSBhbmQgbWFjcm9zIHRvIG1hbmFnZSBhIHJpbmcKLXN0cnVjdCBTWEdfUklOR19JTkZPIHsKLQl1bnNpZ25lZCBjaGFyIEhlYWQ7CS8vIFdoZXJlIHdlIGFkZCBlbnRyaWVzIC0gTm90ZSB1bnNpZ25lZCBjaGFyOlJJTkdfU0laRQotCXVuc2lnbmVkIGNoYXIgVGFpbDsJLy8gV2hlcmUgd2UgcHVsbCBvZmYgY29tcGxldGVkIGVudHJpZXMKLQl1c2hvcnQgU2l6ZTsJCS8vIFJpbmcgc2l6ZSAtIE11c3QgYmUgbXVsdGlwbGUgb2YgMgotCXZvaWQgKkNvbnRleHRbU1hHX01BWF9SSU5HX1NJWkVdOwkvLyBTaGFkb3cgcmluZworLyogU3RydWN0dXJlIGFuZCBtYWNyb3MgdG8gbWFuYWdlIGEgcmluZyAqLworc3RydWN0IHN4Z19yaW5nX2luZm8geworCS8qIFdoZXJlIHdlIGFkZCBlbnRyaWVzIC0gTm90ZSB1bnNpZ25lZCBjaGFyOlJJTkdfU0laRSAqLworCXVuc2lnbmVkIGNoYXIgSGVhZDsKKwl1bnNpZ25lZCBjaGFyIFRhaWw7CS8qIFdoZXJlIHdlIHB1bGwgb2ZmIGNvbXBsZXRlZCBlbnRyaWVzICovCisJdXNob3J0CVNpemU7CQkvKiBSaW5nIHNpemUgLSBNdXN0IGJlIG11bHRpcGxlIG9mIDIgKi8KKwl2b2lkICoJQ29udGV4dFtTWEdfTUFYX1JJTkdfU0laRV07CS8qIFNoYWRvdyByaW5nICovCiB9OwogCi0jZGVmaW5lIFNYR19JTklUSUFMSVpFX1JJTkcoX3JpbmcsIF9zaXplKSB7CQkJCQkJCVwKLQkoX3JpbmcpLkhlYWQgPSAwOwkJCQkJCQkJCQkJCVwKLQkoX3JpbmcpLlRhaWwgPSAwOwkJCQkJCQkJCQkJCVwKLQkoX3JpbmcpLlNpemUgPSAoX3NpemUpOwkJCQkJCQkJCQkJXAorI2RlZmluZSBTWEdfSU5JVElBTElaRV9SSU5HKF9yaW5nLCBfc2l6ZSkgewkJCQlcCisJKF9yaW5nKS5IZWFkID0gMDsJCQkJCQlcCisJKF9yaW5nKS5UYWlsID0gMDsJCQkJCQlcCisJKF9yaW5nKS5TaXplID0gKF9zaXplKTsJCQkJCQlcCiB9Ci0jZGVmaW5lIFNYR19BRFZBTkNFX0lOREVYKF9pbmRleCwgX3NpemUpICgoX2luZGV4KSA9ICgoX2luZGV4KSArIDEpICYgKChfc2l6ZSkgLSAxKSkKLSNkZWZpbmUgU1hHX1BSRVZJT1VTX0lOREVYKF9pbmRleCwgX3NpemUpICgoKF9pbmRleCkgLSAxKSAmKChfc2l6ZSkgLSAxKSkKKworI2RlZmluZSBTWEdfQURWQU5DRV9JTkRFWChfaW5kZXgsIF9zaXplKSAJCQkJXAorCQkJKChfaW5kZXgpID0gKChfaW5kZXgpICsgMSkgJiAoKF9zaXplKSAtIDEpKQorI2RlZmluZSBTWEdfUFJFVklPVVNfSU5ERVgoX2luZGV4LCBfc2l6ZSkgCQkJCVwKKwkJCSgoKF9pbmRleCkgLSAxKSAmKChfc2l6ZSkgLSAxKSkKICNkZWZpbmUgU1hHX1JJTkdfRU1QVFkoX3JpbmcpICgoX3JpbmcpLT5IZWFkID09IChfcmluZyktPlRhaWwpCi0jZGVmaW5lIFNYR19SSU5HX0ZVTEwoX3JpbmcpICgoKChfcmluZyktPkhlYWQgKyAxKSAmICgoX3JpbmcpLT5TaXplIC0gMSkpID09IChfcmluZyktPlRhaWwpCi0jZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZykgU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKChfcmluZyktPlNpemUpKQotI2RlZmluZSBTWEdfUklOR19SRVRSRUFUX0hFQUQoX3JpbmcpICgoX3JpbmcpLT5IZWFkID0JCQkJXAotCQkJCQkJCQkJICBTWEdfUFJFVklPVVNfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKF9yaW5nKS0+U2l6ZSkpCi0jZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZykgewkJCQkJCQkJXAotCUFTU0VSVCgoX3JpbmcpLT5UYWlsICE9IChfcmluZyktPkhlYWQpOwkJCQkJCQlcCi0JU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+VGFpbCwgKChfcmluZyktPlNpemUpKTsJCQkJXAorI2RlZmluZSBTWEdfUklOR19GVUxMKF9yaW5nKSAJCQkJCQlcCisJCSgoKChfcmluZyktPkhlYWQgKyAxKSAmICgoX3JpbmcpLT5TaXplIC0gMSkpID09IChfcmluZyktPlRhaWwpCisjZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZykgCQkJCQlcCisJCVNYR19BRFZBTkNFX0lOREVYKChfcmluZyktPkhlYWQsICgoX3JpbmcpLT5TaXplKSkKKyNkZWZpbmUgU1hHX1JJTkdfUkVUUkVBVF9IRUFEKF9yaW5nKSAoKF9yaW5nKS0+SGVhZCA9CQkJXAorCQlTWEdfUFJFVklPVVNfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKF9yaW5nKS0+U2l6ZSkpCisjZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZykgewkJCQkJXAorCUFTU0VSVCgoX3JpbmcpLT5UYWlsICE9IChfcmluZyktPkhlYWQpOwkJCQlcCisJU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+VGFpbCwgKChfcmluZyktPlNpemUpKTsJCVwKIH0KLS8vIFNldCBjbWQgdG8gdGhlIG5leHQgYXZhaWxhYmxlIHJpbmcgZW50cnksIHNldCB0aGUgc2hhZG93IGNvbnRleHQKLS8vIGVudHJ5IGFuZCBhZHZhbmNlIHRoZSByaW5nLgotLy8gVGhlIGFwcHJvcHJpYXRlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIG1hY3JvCi0jZGVmaW5lIFNYR19HRVRfQ01EKF9yaW5nLCBfcmluZ2luZm8sIF9jbWQsIF9jb250ZXh0KSB7CQkJCVwKLQlpZihTWEdfUklOR19GVUxMKF9yaW5naW5mbykpIHsJCQkJCQkJCQlcCi0JCShfY21kKSA9IE5VTEw7CQkJCQkJCQkJCQkJXAotCX0gZWxzZSB7CQkJCQkJCQkJCQkJCQlcCi0JCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+SGVhZF07CQkJXAorLyoKKyAqIFNldCBjbWQgdG8gdGhlIG5leHQgYXZhaWxhYmxlIHJpbmcgZW50cnksIHNldCB0aGUgc2hhZG93IGNvbnRleHQKKyAqIGVudHJ5IGFuZCBhZHZhbmNlIHRoZSByaW5nLgorICogVGhlIGFwcHJvcHJpYXRlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIG1hY3JvCisgKi8KKyNkZWZpbmUgU1hHX0dFVF9DTUQoX3JpbmcsIF9yaW5naW5mbywgX2NtZCwgX2NvbnRleHQpIHsJCQlcCisJaWYoU1hHX1JJTkdfRlVMTChfcmluZ2luZm8pKSB7CQkJCQlcCisJCShfY21kKSA9IE5VTEw7CQkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKF9jbWQpID0gJihfcmluZyktPkRlc2NyaXB0b3JzWyhfcmluZ2luZm8pLT5IZWFkXTsJXAogCQkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+SGVhZF0gPSAodm9pZCAqKShfY29udGV4dCk7XAotCQlTWEdfUklOR19BRFZBTkNFX0hFQUQoX3JpbmdpbmZvKTsJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQkJXAorCQlTWEdfUklOR19BRFZBTkNFX0hFQUQoX3JpbmdpbmZvKTsJCQlcCisJfQkJCQkJCQkJXAogfQogCi0vLyBBYm9ydCB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgY29tbWFuZCBieSByZXRyZWF0aW5nIHRoZSBoZWFkLgotLy8gTk9URSAtIFRoZSBhcHBvcHJpYXRlIGxvY2sgTVVTVCBOT1QgQkUgRFJPUFBFRCBiZXR3ZWVuIHRoZSBTWEdfR0VUX0NNRAotLy8gYW5kIFNYR19BQk9SVF9DTUQgY2FsbHMuCi0jZGVmaW5lIFNYR19BQk9SVF9DTUQoX3JpbmdpbmZvKSB7CQkJCQkJCQkJXAotCUFTU0VSVCghKFNYR19SSU5HX0VNUFRZKF9yaW5naW5mbykpKTsJCQkJCQkJXAotCVNYR19SSU5HX1JFVFJFQVRfSEVBRChfcmluZ2luZm8pOwkJCQkJCQkJXAotCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5IZWFkXSA9IE5VTEw7CQkJCQlcCisvKgorICogQWJvcnQgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGNvbW1hbmQgYnkgcmV0cmVhdGluZyB0aGUgaGVhZC4KKyAqIE5PVEUgLSBUaGUgYXBwb3ByaWF0ZSBsb2NrIE1VU1QgTk9UIEJFIERST1BQRUQgYmV0d2VlbiB0aGUgU1hHX0dFVF9DTUQKKyAqIGFuZCBTWEdfQUJPUlRfQ01EIGNhbGxzLgorICovCisjZGVmaW5lIFNYR19BQk9SVF9DTUQoX3JpbmdpbmZvKSB7CQkJCQlcCisJQVNTRVJUKCEoU1hHX1JJTkdfRU1QVFkoX3JpbmdpbmZvKSkpOwkJCQlcCisJU1hHX1JJTkdfUkVUUkVBVF9IRUFEKF9yaW5naW5mbyk7CQkJCVwKKwkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+SGVhZF0gPSBOVUxMOwkJCVwKIH0KIAotLy8gRm9yIHRoZSBnaXZlbiByaW5nLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0YWlsIGNtZCBhbmQgY29udGV4dCwKLS8vIGNsZWFyIHRoZSBjb250ZXh0IGFuZCBhZHZhbmNlIHRoZSB0YWlsCi0jZGVmaW5lIFNYR19SRVRVUk5fQ01EKF9yaW5nLCBfcmluZ2luZm8sIF9jbWQsIF9jb250ZXh0KSB7CQkJXAotCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+VGFpbF07CQkJCVwKKy8qCisgKiBGb3IgdGhlIGdpdmVuIHJpbmcsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRhaWwgY21kIGFuZCBjb250ZXh0LAorICogY2xlYXIgdGhlIGNvbnRleHQgYW5kIGFkdmFuY2UgdGhlIHRhaWwKKyAqLworI2RlZmluZSBTWEdfUkVUVVJOX0NNRChfcmluZywgX3JpbmdpbmZvLCBfY21kLCBfY29udGV4dCkgewkJXAorCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+VGFpbF07CQlcCiAJKF9jb250ZXh0KSA9IChfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5UYWlsXTsgICAgICAgCVwKLQkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+VGFpbF0gPSBOVUxMOwkJCQkJXAotCVNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZ2luZm8pOwkJCQkJCQkJXAorCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5UYWlsXSA9IE5VTEw7CQkJXAorCVNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZ2luZm8pOwkJCQlcCiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCisvKgorICogRm9yIGEgZ2l2ZW4gcmluZyBmaW5kIG91dCBob3cgbXVjaCB0aGUgZmlyc3QgcG9pbnRlciBpcyBhaGVhZCBvZgorICogdGhlIHNlY29uZCBwb2ludGVyLiAiYWhlYWQiIHJlY29nbmlzZXMgdGhlIGZhY3QgdGhhdCB0aGUgcmluZyBjYW4gd3JhcAorICovCitzdGF0aWMgaW5saW5lIGludCBzeGdfcmluZ19nZXRfZm9yd2FyZF9kaWZmIChzdHJ1Y3Qgc3hnX3JpbmdfaW5mbyAqcmluZ2luZm8sCisJCQkJCQlpbnQgYSwgaW50IGIpIHsKKwlpZiAoKGEgPCAwIHx8IGEgPiByaW5naW5mby0+U2l6ZSApIHx8IChiIDwgMCB8fCBiID4gcmluZ2luZm8tPlNpemUpKQorCQlyZXR1cm4gLTE7CisJaWYgKGEgPiBiKQkvKiBfYSBpcyBsYWdnaW5nIF9iIGFuZCBfYiBoYXMgbm90IHdyYXBwZWQgYXJvdW5kICovCisJCXJldHVybiAoYSAtIGIpOworCWVsc2UKKwkJcmV0dXJuICgocmluZ2luZm8tPlNpemUgLSAoYiAtIGEpKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhvc3QgQ29tbWFuZCBCdWZmZXIgLSBjb21tYW5kcyB0byBJTklDIHZpYSB0aGUgQ21kIFJpbmdzCiAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCiAgKiAgMzEgICAgICAgICAgICAgICAgICAxNSAgICAgICAgICAgICAgICAgMAogICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX19fX19fX18uCiAgKiAgfDwtLS0tLS0tLS0tLS0tLSBTZ2wgTG93IC0tLS0tLS0tLS0tLS0tPnwKQEAgLTQ3OSw0MiArNTI2LDQzIEBACiAgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyNAkJMHgxOAogICogIHw8LS0tLS0gTENudCAtLS0tLS0+fDwtLS0tLSBGbGFncyAtLS0tLT58CiAgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyOAkJMHgxYwotICovCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNwcmFnbWEgcGFjayhwdXNoLCAxKQotc3RydWN0IFNYR19DTUQgewotCWRtYV9hZGRyX3QgU2dsOwkJLy8gUGh5c2ljYWwgYWRkcmVzcyBvZiBTR0wKK3N0cnVjdCBzeGdfY21kIHsKKwlkbWE2NF9hZGRyX3QJU2dsOwkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBTR0wgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlkbWE2NF9hZGRyX3QgRmlyc3RTZ2VBZGRyZXNzOwkvLyBBZGRyZXNzIG9mIGZpcnN0IFNHRQotCQkJdTMyIEZpcnN0U2dlTGVuZ3RoOwkvLyBMZW5ndGggb2YgZmlyc3QgU0dFCisJCQlkbWE2NF9hZGRyX3QgRmlyc3RTZ2VBZGRyZXNzOyAvKiBBZGRyZXNzIG9mIGZpcnN0IFNHRSAqLworCQkJdTMyIAkgICAgIEZpcnN0U2dlTGVuZ3RoOyAgLyogTGVuZ3RoIG9mIGZpcnN0IFNHRSAqLwogCQkJdW5pb24gewotCQkJCXUzMiBSc3ZkMTsJLy8gVE9FIE5BCi0JCQkJdTMyIFNnZU9mZnNldDsJLy8gU2xvd3BhdGggLSAybmQgU0dFIG9mZnNldAotCQkJCXUzMiBSZXNpZDsJLy8gTURMIGNvbXBsZXRpb24gLSBjbG9iYmVycyB1cGRhdGUKKwkJCQl1MzIgIFJzdmQxOwkgICAvKiBUT0UgTkEgKi8KKwkJCQl1MzIgIFNnZU9mZnNldDsgLyogU2xvd3BhdGggLSAybmQgU0dFIG9mZnNldCAqLworCQkJCS8qIE1ETCBjb21wbGV0aW9uIC0gY2xvYmJlcnMgdXBkYXRlICovCisJCQkJdTMyICBSZXNpZDsKIAkJCX07CiAJCQl1bmlvbiB7Ci0JCQkJdTMyIFRvdGFsTGVuZ3RoOwkvLyBUb3RhbCB0cmFuc2ZlciBsZW5ndGgKLQkJCQl1MzIgTXNzOwkvLyBMU08gTVNTCisJCQkJdTMyICBUb3RhbExlbmd0aDsgLyogVG90YWwgdHJhbnNmZXIgbGVuZ3RoICovCisJCQkJdTMyICBNc3M7CSAgLyogTFNPIE1TUyAqLwogCQkJfTsKIAkJfSBCdWZmZXI7CiAJfTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBjaGFyIEZsYWdzOjQ7CS8vIHNsb3dwYXRoIGZsYWdzCi0JCQl1bnNpZ25lZCBjaGFyIElwSGw6NDsJLy8gSXAgaGVhZGVyIGxlbmd0aCAoPj4yKQotCQkJdW5zaWduZWQgY2hhciBNYWNMZW47CS8vIE1hYyBoZWFkZXIgbGVuCisJCQl1bnNpZ25lZCBjaGFyIEZsYWdzOjQ7CS8qIHNsb3dwYXRoIGZsYWdzICovCisJCQl1bnNpZ25lZCBjaGFyIElwSGw6NDsJLyogSXAgaGVhZGVyIGxlbmd0aCAoPj4yKSAqLworCQkJdW5zaWduZWQgY2hhciBNYWNMZW47CS8qIE1hYyBoZWFkZXIgbGVuICovCiAJCX0gQ3N1bUZsYWdzOwogCQlzdHJ1Y3QgewotCQkJdXNob3J0IEZsYWdzOjQ7CS8vIHNsb3dwYXRoIGZsYWdzCi0JCQl1c2hvcnQgVGNwSGRyT2ZmOjc7CS8vIFRDUAotCQkJdXNob3J0IE1hY0xlbjo1OwkvLyBNYWMgaGVhZGVyIGxlbgorCQkJdXNob3J0CUZsYWdzOjQ7CS8qIHNsb3dwYXRoIGZsYWdzICovCisJCQl1c2hvcnQJVGNwSGRyT2ZmOjc7CS8qIFRDUCAqLworCQkJdXNob3J0CU1hY0xlbjo1OwkvKiBNYWMgaGVhZGVyIGxlbiAqLwogCQl9IExzb0ZsYWdzOwotCQl1c2hvcnQgRmxhZ3M7CS8vIGZsYWdzCisJCXVzaG9ydAkJRmxhZ3M7CQkvKiBmbGFncyAqLwogCX07CiAJdW5pb24gewotCQl1c2hvcnQgU2dFbnRyaWVzOwkvLyBTRyBlbnRyeSBjb3VudCBpbmNsdWRpbmcgZmlyc3Qgc2dlCisJCXVzaG9ydAlTZ0VudHJpZXM7CS8qIFNHIGVudHJ5IGNvdW50IGluY2x1ZGluZyBmaXJzdCBzZ2UgKi8KIAkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvLyBDb3BpZWQgZnJvbSBldmVudCBzdGF0dXMKKwkJCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvKiBDb3BpZWQgZnJvbSBldmVudCBzdGF0dXMgKi8KIAkJCXVuc2lnbmVkIGNoYXIgTm90VXNlZDsKIAkJfSBTdGF0dXM7CiAJfTsKQEAgLTUyMiwxMyArNTcwLDEzIEBACiAjcHJhZ21hIHBhY2socG9wKQogCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLXN0cnVjdCBWTEFOX0hEUiB7CitzdHJ1Y3Qgdmxhbl9oZHIgewogCXVzaG9ydCBWbGFuVGNpOwogCXVzaG9ydCBWbGFuVHBpZDsKIH07CiAjcHJhZ21hIHBhY2socG9wKQogCi0vKgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTbG93cGF0aCBGbGFnczoKICAqCiAgKgpAQCAtNTU4LDM2ICs2MDYsMzYgQEAKICAqICB8ICAgICAgTENudCAgICAgICAgIHxNQUMgaGxlbiB8SGxlbnxGbGdzfAogICogIHxfX19fX19fX19fX19fX19fX19ffF9fX198X19fX3xfX19ffF9fX198CiAgKgotICovCi0vLyBTbG93cGF0aCBDTUQgZmxhZ3MKLSNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9JUAkJCTB4MDEJLy8gQ2hlY2tzdW0gSVAKLSNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9UQ1AJCTB4MDIJLy8gQ2hlY2tzdW0gVENQCi0jZGVmaW5lIFNYR19TTE9XQ01EX0xTTwkJCQkweDA0CS8vIExhcmdlIHNlZ21lbnQgc2VuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2xvd3BhdGggQ01EIGZsYWdzICovCisjZGVmaW5lIFNYR19TTE9XQ01EX0NTVU1fSVAJCTB4MDEJLyogQ2hlY2tzdW0gSVAgKi8KKyNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9UQ1AJCTB4MDIJLyogQ2hlY2tzdW0gVENQICovCisjZGVmaW5lIFNYR19TTE9XQ01EX0xTTwkJCTB4MDQJLyogTGFyZ2Ugc2VnbWVudCBzZW5kICovCiAKLXN0cnVjdCBTWEdfWE1UX1JJTkcgewotCXN0cnVjdCBTWEdfQ01EIERlc2NyaXB0b3JzW1NYR19YTVRfUklOR19TSVpFXTsKK3N0cnVjdCBzeGdfeG10X3JpbmcgeworCXN0cnVjdCBzeGdfY21kIERlc2NyaXB0b3JzW1NYR19YTVRfUklOR19TSVpFXTsKIH07CiAKLXN0cnVjdCBTWEdfUkNWX1JJTkcgewotCXN0cnVjdCBTWEdfQ01EIERlc2NyaXB0b3JzW1NYR19SQ1ZfUklOR19TSVpFXTsKK3N0cnVjdCBzeGdfcmN2X3JpbmcgeworCXN0cnVjdCBzeGdfY21kIERlc2NyaXB0b3JzW1NYR19SQ1ZfUklOR19TSVpFXTsKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBTaGFyZSBtZW1vcnkgYnVmZmVyIHR5cGVzIC0gVXNlZCB0byBpZGVudGlmeSBhc3luY2hyb25vdXMKICAqIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWVudW0gU1hHX0JVRkZFUl9UWVBFIHsKLQlTWEdfQlVGRkVSX1RZUEVfUkNWLAkvLyBSZWNlaXZlIGJ1ZmZlcgotCVNYR19CVUZGRVJfVFlQRV9TR0wJLy8gU0dMIGJ1ZmZlcgorICovCitlbnVtIHN4Z19idWZmZXJfdHlwZSB7CisJU1hHX0JVRkZFUl9UWVBFX1JDViwJCS8qIFJlY2VpdmUgYnVmZmVyICovCisJU1hHX0JVRkZFUl9UWVBFX1NHTAkJLyogU0dMIGJ1ZmZlciAqLwogfTsKIAotLy8gU3RhdGUgZm9yIFNYRyBidWZmZXJzCisvKiBTdGF0ZSBmb3IgU1hHIGJ1ZmZlcnMgKi8KICNkZWZpbmUgU1hHX0JVRkZFUl9GUkVFCQkweDAxCiAjZGVmaW5lIFNYR19CVUZGRVJfQlVTWQkJMHgwMgogI2RlZmluZSBTWEdfQlVGRkVSX09OQ0FSRAkweDA0CiAjZGVmaW5lIFNYR19CVUZGRVJfVVBTVFJFQU0JMHgwOAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogUmVjZWl2ZSBkYXRhIGJ1ZmZlcnMKICAqCiAgKiBSZWNlaXZlIGRhdGEgYnVmZmVycyBhcmUgZ2l2ZW4gdG8gdGhlIFNhaGFyYSBjYXJkIDEyOCBhdCBhIHRpbWUuCkBAIC01OTcsMjYyICs2NDUsMzcwIEBACiAgKiBETUEgZGF0YSBpbnRvLCBhbmQgYSB2aXJ0dWFsIGFkZHJlc3MsIHdoaWNoIGlzIGdpdmVuIGJhY2sKICAqIHRvIHRoZSBob3N0IGluIHRoZSAiSG9zdEhhbmRsZSIgcG9ydGlvbiBvZiBhbiBldmVudC4KICAqIFRoZSByZWNlaXZlIGRlc2NyaXB0b3IgZGF0YSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBiZWxvdwotICogYXMgU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1IsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBibG9jawotICogaXMgZGVmaW5lZCBhcyBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0suCisgKiBhcyBzeGdfcmN2X2RhdGFfZGVzY3JpcHRvciwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrCisgKiBpcyBkZWZpbmVkIGFzIHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jay4KICAqCiAgKiBUaGlzIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jayBpcyBnaXZlbiB0byB0aGUgY2FyZCBieSBmaWxsaW5nCi0gKiBpbiB0aGUgU2dsIGZpZWxkIG9mIGEgU1hHX0NNRCBlbnRyeSBmcm9tIHBBZGFwdC0+UmN2UmluZ3NbMF0KKyAqIGluIHRoZSBTZ2wgZmllbGQgb2YgYSBzeGdfY21kIGVudHJ5IGZyb20gcEFkYXB0LT5SY3ZSaW5nc1swXQogICogd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrLgogICoKICAqIEJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9ja3MKICAqIHJlcXVpcmUgYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFpbnRhaW4gdGhlbQogICogb24gYSBmcmVlIHF1ZXVlIGFuZCBjb250YWluIG90aGVyIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgotICogVGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFzIHRoZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUgotICogYW5kIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgcmVzcGVjdGl2ZWx5LgorICogVGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFzIHRoZSBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkcgorICogYW5kIHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgcmVzcGVjdGl2ZWx5LgogICoKICAqIFNpbmNlIGJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jawogICogbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5IHRoZSBjYXJkLCBib3RoIG11c3QgYmUgYWxsb2NhdGVkIG91dCBvZgogICogc2hhcmVkIG1lbW9yeS4gIFRvIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgZGVzY3JpcHRvcgogICogYmxvY2sgYXZhaWxhYmxlIGZvciBldmVyeSAxMjggYnVmZmVycywgd2UgYWxsb2NhdGUgYWxsIG9mCiAgKiB0aGVzZSByZXNvdXJjZXMgdG9nZXRoZXIgaW4gYSBzaW5nbGUgYmxvY2suICBUaGlzIGVudGlyZQotICogYmxvY2sgaXMgbWFuYWdlZCBieSBhIFNYR19SQ1ZfQkxPQ0tfSERSLCB3aG8ncyBzb2xlIHB1cnBvc2UKKyAqIGJsb2NrIGlzIG1hbmFnZWQgYnkgYSBzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIsIHdobydzIHNvbGUgcHVycG9zZQogICogaXMgdG8gbWFpbnRhaW4gYWRkcmVzcyBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoZSBlbnRpcmUgYmxvY2sKICAqIGNhbiBiZSBmcmVlIGxhdGVyLgogICoKICAqIEZ1cnRoZXIgY29tcGxpY2F0aW5nIG1hdHRlcnMgaXMgdGhlIGZhY3QgdGhhdCB0aGUgcmVjZWl2ZQogICogYnVmZmVycyBtdXN0IGJlIHZhcmlhYmxlIGluIGxlbmd0aCBpbiBvcmRlciB0byBhY2NvbW9kYXRlCiAgKiBqdW1ibyBmcmFtZSBjb25maWd1cmF0aW9ucy4gIFdlIGNvbmZpZ3VyZSB0aGUgYnVmZmVyCi0gKiBsZW5ndGggc28gdGhhdCB0aGUgYnVmZmVyIGFuZCBpdCdzIGNvcnJlc3BvbmRpbmcgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIKLSAqIHN0cnVjdHVyZSBhZGQgdXAgdG8gYW4gZXZlbiBib3VuZGFyeS4gIFRoZW4gd2UgcGxhY2UgdGhlCi0gKiByZW1haW5pbmcgZGF0YSBzdHJ1Y3R1cmVzIGFmdGVyIDEyOCBvZiB0aGVtIGFzIHNob3duIGluCi0gKiB0aGUgZm9sbG93aW5nIGRpYWdyYW06CisgKiBsZW5ndGggc28gdGhhdCB0aGUgYnVmZmVyIGFuZCBpdCdzIGNvcnJlc3BvbmRpbmcgc3RydWN0CisgKiBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciBzdHJ1Y3R1cmUgYWRkIHVwIHRvIGFuIGV2ZW4KKyAqIGJvdW5kYXJ5LiAgVGhlbiB3ZSBwbGFjZSB0aGUgcmVtYWluaW5nIGRhdGEgc3RydWN0dXJlcyBhZnRlciAxMjgKKyAqICBvZiB0aGVtIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbToKICAqCiAgKiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAqIHwgICAgVmFyaWFibGUgbGVuZ3RoIHJlY2VpdmUgYnVmZmVyICMxICAgIHwKICAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqIHwgICAgICAgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgIzEgICAgICAgIHwKKyAqIHwgICAgICAgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgIzEgICAgICAgIHwKICAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wgPD09IEV2ZW4gMmsgb3IgMTBrIGJvdW5kYXJ5CiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgKiB8ICAgICAgICAgLi4uIHJlcGVhdCAyLTEyOCAuLiAgICAgICAgICAgICB8CiAgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLICAgICAgICAgICB8Ci0gKiB8ICBDb250YWlucyBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiAqIDEyOCB8CisgKiB8ICAgICAgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayAgICB8CisgKiB8ICBDb250YWlucyBzeGdfcmN2X2RhdGFfZGVzY3JpcHRvciAqIDEyOCB8CiAgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiAgICAgICB8CisgKiB8ICAgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgICB8CiAgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgICAgIFNYR19SQ1ZfQkxPQ0tfSERSICAgICAgICAgICAgICB8CisgKiB8ICAgICAgc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyICAgICAgICAgICB8CiAgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CiAgKgogICogTWVtb3J5IGNvbnN1bXB0aW9uOgogICoJICBOb24tanVtYm86Ci0gKiAgICAgIEJ1ZmZlcnMgYW5kIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSID0gMmsgKiAxMjggPSAyNTZrCi0gKiAgICArIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyA9IDJrCi0gKiAgICArIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgPSB+MzIKLSAqICAgICsgU1hHX1JDVl9CTE9DS19IRFIgPSB+MzIKKyAqICAgICAgQnVmZmVycyBhbmQgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgPSAyayAqIDEyOCA9IDI1NmsKKyAqICAgICsgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayA9IDJrCisgKiAgICArIHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyID0gfjMyCisgKiAgICArIHN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciA9IH4zMgogICogICAgPT4gVG90YWwgPSB+MjU4ay9ibG9jawogICoKICAqCSAgSnVtYm86Ci0gKiAgICAgIEJ1ZmZlcnMgYW5kIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSID0gMTBrICogMTI4ID0gMTI4MGsKLSAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKLSAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgotICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgICBCdWZmZXJzIGFuZCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciA9IDEwayAqIDEyOCA9IDEyODBrCisgKiAgICArIHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2sgPSAyaworICogICAgKyBzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciA9IH4zMgorICogICAgKyBzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIgPSB+MzIKICAqICAgID0+IFRvdGFsID0gfjEyODJrL2Jsb2NrCiAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUlMJCQk0MDk2CS8vIEFtb3VudCB0byBnaXZlIHRvIHRoZSBjYXJkCi0jZGVmaW5lIFNYR19JTklUSUFMX1JDVl9EQVRBX0JVRkZFUlMJODE5MgkvLyBJbml0aWFsIHBvb2wgb2YgYnVmZmVycwotI2RlZmluZSBTWEdfTUlOX1JDVl9EQVRBX0JVRkZFUlMJCTIwNDgJLy8gTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUKLSNkZWZpbmUgU1hHX01BWF9SQ1ZfQkxPQ0tTCQkJCTEyOAkvLyA9IDE2Mzg0IHJlY2VpdmUgYnVmZmVycworICovCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJTCQk4MTkyCS8qIEFtb3VudCB0byBnaXZlIHRvIHRoZSBjYXJkICovCisjZGVmaW5lIFNYR19JTklUSUFMX1JDVl9EQVRBX0JVRkZFUlMJMTYzODQJLyogSW5pdGlhbCBwb29sIG9mIGJ1ZmZlcnMgKi8KKy8qIE1pbmltdW0gYW1vdW50IGFuZCB3aGVuIHRvIGdldCBtb3JlICovCisjZGVmaW5lIFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUwk0MDk2CisjZGVmaW5lIFNYR19NQVhfUkNWX0JMT0NLUwkJMjU2CS8qID0gMzJrIHJlY2VpdmUgYnVmZmVycyAqLworLyogQW1vdW50IHRvIGdpdmUgdG8gdGhlIGNhcmQgaW4gY2FzZSBvZiBqdW1ibyBmcmFtZXMgKi8KKyNkZWZpbmUgU1hHX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlMJCTIwNDgKKy8qIEluaXRpYWwgcG9vbCBvZiBidWZmZXJzIGluIGNhc2Ugb2YganVtYm8gYnVmZmVycyAqLworI2RlZmluZSBTWEdfSU5JVElBTF9KVU1CT19SQ1ZfREFUQV9CVUZGRVJTCTQwOTYKKyNkZWZpbmUgU1hHX01JTl9KVU1CT19SQ1ZfREFUQV9CVUZGRVJTCQkxMDI0CiAKLS8vIFJlY2VpdmUgYnVmZmVyIGhlYWRlcgotc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIHsKLQlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsJLy8gQnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MKLQkvLyBOb3RlIC0gRE8gTk9UIFVTRSB0aGUgVmlydHVhbEFkZHJlc3MgZmllbGQgdG8gbG9jYXRlIGRhdGEuCi0JLy8gVXNlIHRoZSBzeGcuaDpTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OIG1hY3JvIGluc3RlYWQuCi0Jdm9pZCAqVmlydHVhbEFkZHJlc3M7CS8vIFN0YXJ0IG9mIGJ1ZmZlcgotCXN0cnVjdCBMSVNUX0VOVFJZIEZyZWVMaXN0OwkvLyBGcmVlIHF1ZXVlIG9mIGJ1ZmZlcnMKLQlzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgKk5leHQ7CS8vIEZhc3RwYXRoIGRhdGEgYnVmZmVyIHF1ZXVlCi0JdTMyIFNpemU7CQkvLyBCdWZmZXIgc2l6ZQotCXUzMiBCeXRlT2Zmc2V0OwkJLy8gU2VlIFNYR19SRVNUT1JFX01ETF9PRkZTRVQKLQl1bnNpZ25lZCBjaGFyIFN0YXRlOwkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQotCXVuc2lnbmVkIGNoYXIgU3RhdHVzOwkvLyBFdmVudCBzdGF0dXMgKHRvIGxvZyBQVVNIKQotCXN0cnVjdCBza19idWZmICpza2I7CS8vIERvdWJsZSBtYXBwZWQgKG5ibCBhbmQgcGt0KQorLyogUmVjZWl2ZSBidWZmZXIgaGVhZGVyICovCitzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgeworCWRtYTY0X2FkZHJfdAlQaHlzaWNhbEFkZHJlc3M7CS8qIEJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzICovCisJLyoKKwkgKiBOb3RlIC0gRE8gTk9UIFVTRSB0aGUgVmlydHVhbEFkZHJlc3MgZmllbGQgdG8gbG9jYXRlIGRhdGEuCisJICogVXNlIHRoZSBzeGcuaDpTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OIG1hY3JvIGluc3RlYWQuCisJICovCisJc3RydWN0IGxpc3RfZW50cnkJRnJlZUxpc3Q7CS8qIEZyZWUgcXVldWUgb2YgYnVmZmVycyAqLworCXVuc2lnbmVkIGNoYXIJCVN0YXRlOwkJLyogU2VlIFNYR19CVUZGRVIgc3RhdGUgYWJvdmUgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAqIHNrYjsJCS8qIERvdWJsZSBtYXBwZWQgKG5ibCBhbmQgcGt0KSovCiB9OwogCi0vLyBTeGdTbG93UmVjZWl2ZSB1c2VzIHRoZSBQQUNLRVQgKHNrYikgY29udGFpbmVkCi0vLyBpbiB0aGUgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgd2hlbiBpbmRpY2F0aW5nIGR1bWItbmljIGRhdGEKKy8qCisgKiBTeGdTbG93UmVjZWl2ZSB1c2VzIHRoZSBQQUNLRVQgKHNrYikgY29udGFpbmVkCisgKiBpbiB0aGUgc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyIHdoZW4gaW5kaWNhdGluZyBkdW1iLW5pYyBkYXRhCisgKi8KICNkZWZpbmUgU3hnRHVtYlJjdlBhY2tldAkgICAgICAgIHNrYgogCi0jZGVmaW5lIFNYR19SQ1ZfREFUQV9IRFJfU0laRQkJCTI1NgkvLyBTcGFjZSBmb3IgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIKLSNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFCQkyMDQ4CS8vIE5vbiBqdW1ibyA9IDJrIGluY2x1ZGluZyBIRFIKLSNkZWZpbmUgU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRQkJMTAyNDAJLy8ganVtYm8gPSAxMGsgaW5jbHVkaW5nIEhEUgorLyogU3BhY2UgZm9yIHN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAqLworI2RlZmluZSBTWEdfUkNWX0RBVEFfSERSX1NJWkUJCXNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIpCisvKiBOb24ganVtYm8gPSAyayBpbmNsdWRpbmcgSERSICovCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRQkyMDQ4CisvKiBqdW1ibyA9IDEwayBpbmNsdWRpbmcgSERSICovCisjZGVmaW5lIFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUJMTAyNDAKIAotLy8gUmVjZWl2ZSBkYXRhIGRlc2NyaXB0b3IKLXN0cnVjdCBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiB7CisvKiBSZWNlaXZlIGRhdGEgZGVzY3JpcHRvciAqLworc3RydWN0IHN4Z19yY3ZfZGF0YV9kZXNjcmlwdG9yIHsKIAl1bmlvbiB7Ci0JCXN0cnVjdCBza19idWZmICpWaXJ0dWFsQWRkcmVzczsJLy8gSG9zdCBoYW5kbGUKLQkJdTY0IEZvcmNlVG84Qnl0ZXM7CS8vIEZvcmNlIHg4NiB0byA4LWJ5dGUgYm91bmRhcnkKKwkJc3RydWN0IHNrX2J1ZmYgKlZpcnR1YWxBZGRyZXNzOwkvKiBIb3N0IGhhbmRsZSAqLworCQl1NjQJCUZvcmNlVG84Qnl0ZXM7CS8qRm9yY2UgeDg2IHRvIDgtYnl0ZSBib3VuZGFyeSovCiAJfTsKLQlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsKKwlkbWE2NF9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzOwogfTsKIAotLy8gUmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrCisvKiBSZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgKi8KICNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0sJCTEyOAotI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfU0laRQkJMjA0OAkvLyBGb3Igc2FuaXR5IGNoZWNrCisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19TSVpFCQkyMDQ4CS8qIEZvciBzYW5pdHkgY2hlY2sgKi8KIAotc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyB7Ci0Jc3RydWN0IFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SIERlc2NyaXB0b3JzW1NYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLXTsKK3N0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2sgeworCXN0cnVjdCBzeGdfcmN2X2RhdGFfZGVzY3JpcHRvciBEZXNjcmlwdG9yc1tTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DS107CiB9OwogCi0vLyBSZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgaGVhZGVyCi1zdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiB7Ci0Jdm9pZCAqVmlydHVhbEFkZHJlc3M7CS8vIFN0YXJ0IG9mIDJrIGJ1ZmZlcgotCWRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzOwkvLyAuLmFuZCBpdCdzIHBoeXNpY2FsIGFkZHJlc3MKLQlzdHJ1Y3QgTElTVF9FTlRSWSBGcmVlTGlzdDsJLy8gRnJlZSBxdWV1ZSBvZiBkZXNjcmlwdG9yIGJsb2NrcwotCXVuc2lnbmVkIGNoYXIgU3RhdGU7CS8vIFNlZSBTWEdfQlVGRkVSIHN0YXRlIGFib3ZlCisvKiBSZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgaGVhZGVyICovCitzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciB7CisJdm9pZCAJCSpWaXJ0dWFsQWRkcmVzczsJLyogc3RhcnQgb2YgMmsgYnVmZmVyICovCisJZG1hNjRfYWRkcl90CQlQaHlzaWNhbEFkZHJlc3M7LyogYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcyAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVMaXN0Oy8qIGZyZWUgcXVldWUgb2YgZGVzY3JpcHRvciBibG9ja3MgKi8KKwl1bnNpZ25lZCBjaGFyCVN0YXRlOwkvKiBzZWUgc3hnX2J1ZmZlciBzdGF0ZSBhYm92ZSAqLwogfTsKIAotLy8gUmVjZWl2ZSBibG9jayBoZWFkZXIKLXN0cnVjdCBTWEdfUkNWX0JMT0NLX0hEUiB7Ci0Jdm9pZCAqVmlydHVhbEFkZHJlc3M7CS8vIFN0YXJ0IG9mIHZpcnR1YWwgbWVtb3J5Ci0JZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3M7CS8vIC4uYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcwotCXN0cnVjdCBMSVNUX0VOVFJZIEFsbExpc3Q7CS8vIFF1ZXVlIG9mIGFsbCBTWEdfUkNWX0JMT0NLUworLyogUmVjZWl2ZSBibG9jayBoZWFkZXIgKi8KK3N0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciB7CisJdm9pZAkJKlZpcnR1YWxBZGRyZXNzOwkvKiBTdGFydCBvZiB2aXJ0dWFsIG1lbW9yeSAqLworCWRtYTY0X2FkZHJfdAkJUGh5c2ljYWxBZGRyZXNzOy8qIC4uYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcyovCisJc3RydWN0IGxpc3RfZW50cnkJQWxsTGlzdDsJLyogUXVldWUgb2YgYWxsIFNYR19SQ1ZfQkxPQ0tTKi8KIH07CiAKLS8vIE1hY3JvcyB0byBkZXRlcm1pbmUgZGF0YSBzdHJ1Y3R1cmUgb2Zmc2V0cyBpbnRvIHJlY2VpdmUgYmxvY2sKLSNkZWZpbmUgU1hHX1JDVl9CTE9DS19TSVpFKF9CdWZmZXJzaXplKSAJCQkJCVwKKy8qIE1hY3JvcyB0byBkZXRlcm1pbmUgZGF0YSBzdHJ1Y3R1cmUgb2Zmc2V0cyBpbnRvIHJlY2VpdmUgYmxvY2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9CTE9DS19TSVpFKF9CdWZmZXJzaXplKSAJCQkJXAogCSgoKF9CdWZmZXJzaXplKSAqIFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSArCQlcCi0JIChzaXplb2Yoc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpICAgICAgICAgICAgICArCQlcCi0JIChzaXplb2Yoc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpKSAgICAgICAgICArCQlcCi0JIChzaXplb2Yoc3RydWN0IFNYR19SQ1ZfQkxPQ0tfSERSKSkpCisJIChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jaykpICAgICAgICAgICAgICArCVwKKwkgKHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkcikpICAgICAgICAgICsJXAorCSAoc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkcikpKQogI2RlZmluZSBTWEdfUkNWX0JVRkZFUl9EQVRBX1NJWkUoX0J1ZmZlcnNpemUpCQkJCVwKIAkoKF9CdWZmZXJzaXplKSAtIFNYR19SQ1ZfREFUQV9IRFJfU0laRSkKICNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFJfT0ZGU0VUKF9CdWZmZXJzaXplKQkJCVwKIAkoKF9CdWZmZXJzaXplKSAtIFNYR19SQ1ZfREFUQV9IRFJfU0laRSkKLSNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX09GRlNFVChfQnVmZmVyc2l6ZSkJCVwKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX09GRlNFVChfQnVmZmVyc2l6ZSkJCQlcCiAJKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykKLSNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCVwKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQlcCiAJKCgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spICsJCVwKLQkgKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSkpCisJIChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jaykpKQogI2RlZmluZSBTWEdfUkNWX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQkJCVwKIAkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAotCSAoc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spKSAgICAgICAgICAgICAgKwkJXAotCSAoc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSKSkpCisJIChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jaykpICAgICAgICAgICAgICArCVwKKwkgKHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkcikpKQogCi0vLyBVc2UgdGhlIG1pbmlwb3J0IHJlc2VydmVkIHBvcnRpb24gb2YgdGhlIE5CTCB0byBsb2NhdGUKLS8vIG91ciBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiBzdHJ1Y3R1cmUuCi1zdHJ1Y3QgU1hHX1JDVl9OQkxfUkVTRVJWRUQgewotCXN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAqUmN2RGF0YUJ1ZmZlckhkcjsKLQl2b2lkICpBdmFpbGFibGU7CisvKiBTY2F0dGVyIGdhdGhlciBsaXN0IGJ1ZmZlciAqLworI2RlZmluZSBTWEdfSU5JVElBTF9TR0xfQlVGRkVSUwk4MTkyCS8qIEluaXRpYWwgcG9vbCBvZiBTR0wgYnVmZmVycyAqLworI2RlZmluZSBTWEdfTUlOX1NHTF9CVUZGRVJTCTIwNDgJLyogTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUqLworLyogTWF4aW11bSB0byBhbGxvY2F0ZSAobm90ZSBBREFQVDp1c2hvcnQpICovCisjZGVmaW5lIFNYR19NQVhfU0dMX0JVRkZFUlMJMTYzODQKKworLyoKKyAqIFNYR19TR0xfUE9PTF9QUk9QRVJUSUVTIC0gVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYSBwb29sIG9mIFNHTAorICogYnVmZmVycy4gVGhlc2UgYnVmZmVycyBhcmUgYWxsb2NhdGVkIG91dCBvZiBzaGFyZWQgbWVtb3J5IGFuZCB1c2VkIHRvCisgKiBjb250YWluIGEgcGh5c2ljYWwgc2NhdHRlciBnYXRoZXIgbGlzdCBzdHJ1Y3R1cmUgdGhhdCBpcyBzaGFyZWQKKyAqIHdpdGggdGhlIGNhcmQuCisgKgorICogV2Ugc3BsaXQgb3VyIFNHTCBidWZmZXJzIGludG8gbXVsdGlwbGUgcG9vbHMgYmFzZWQgb24gc2l6ZS4gIFRoZSBtb3RpdmF0aW9uCisgKiBpcyB0aGF0IHNvbWUgYXBwbGljYXRpb25zIHBlcmZvcm0gdmVyeSBsYXJnZSBJL09zICgxTUIgZm9yIGV4YW1wbGUpLCBzbworICogd2UgbmVlZCB0byBiZSBhYmxlIHRvIGFsbG9jYXRlIGFuIFNHTCB0byBhY2NvbW1vZGF0ZSBzdWNoIGEgcmVxdWVzdC4KKyAqIEJ1dCBzdWNoIGFuIFNHTCB3b3VsZCByZXF1aXJlIDI1NiAyNC1ieXRlIFNHIGVudHJpZXMgLSB+NmsuCisgKiBHaXZlbiB0aGF0IHRoZSB2YXN0IG1ham9yaXR5IG9mIEkvT3MgYXJlIG11Y2ggc21hbGxlciB0aGFuIDFNLCBhbGxvY2F0aW5nCisgKiBhIHNpbmdsZSBwb29sIG9mIFNHTCBidWZmZXJzIHdvdWxkIGJlIGEgaG9ycmlibHkgaW5lZmZpY2llbnQgdXNlIG9mCisgKiBtZW1vcnkuCisgKgorICogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW5jbHVkZXMgdHdvIGZpZWxkcyByZWxhdGluZyB0byBpdHMgc2l6ZS4KKyAqIFRoZSBOQlNpemUgZmllbGQgc3BlY2lmaWVzIHRoZSBsYXJnZXN0IE5FVF9CVUZGRVIgdGhhdCBjYW4gYmUgaGFuZGxlZAorICogYnkgdGhlIHBhcnRpY3VsYXIgcG9vbC4gIFRoZSBTR0VudHJpZXMgZmllbGQgZGVmaW5lcyB0aGUgc2l6ZSwgaW4KKyAqIGVudHJpZXMsIG9mIHRoZSBTR0wgZm9yIHRoYXQgcG9vbC4gIFRoZSBTR0VudHJpZXMgaXMgZGV0ZXJtaW5lZCBieQorICogZGl2aWRpbmcgdGhlIE5CU2l6ZSBieSB0aGUgZXhwZWN0ZWQgcGFnZSBzaXplICg0ayksIGFuZCB0aGVuIHBhZGRpbmcKKyAqIGl0IGJ5IHNvbWUgYXBwcm9wcmlhdGUgYW1vdW50IGFzIGluc3VyYW5jZSAoMjAlIG9yIHNvLi4/PykuCisgKi8KK3N0cnVjdCBzeGdfc2dsX3Bvb2xfcHJvcGVydGllcyB7CisJdTMyCU5CU2l6ZTsJCS8qIExhcmdlc3QgTkVUX0JVRkZFUiBzaXplIGZvciB0aGlzIHBvb2wgKi8KKwl1c2hvcnQJU0dFbnRyaWVzOwkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiBTR0wgKi8KKwl1c2hvcnQJSW5pdGlhbEJ1ZmZlcnM7CS8qIE51bWJlciB0byBhbGxvY2F0ZSBhdCBpbml0aWFsaXphdGlvbnRpbWUgKi8KKwl1c2hvcnQJTWluQnVmZmVyczsJLyogV2hlbiB0byBnZXQgbW9yZSAqLworCXVzaG9ydAlNYXhCdWZmZXJzOwkvKiBXaGVuIHRvIHN0b3AgKi8KKwl1c2hvcnQJUGVyQ3B1VGhyZXNob2xkOy8qIFNlZSBzeGdoLmg6U1hHX1JFU09VUkNFUyAqLwogfTsKIAotI2RlZmluZSBTWEdfUkNWX05CTF9CVUZGRVJfSERSKF9OQkwpICgoKFBTWEdfUkNWX05CTF9SRVNFUlZFRClORVRfQlVGRkVSX0xJU1RfTUlOSVBPUlRfUkVTRVJWRUQoX05CTCkpLT5SY3ZEYXRhQnVmZmVySGRyKQorLyoKKyAqIEF0IHRoZSBtb21lbnQgSSdtIGdvaW5nIHRvIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSA0IHBvb2xzOgorICoJMTAwayBidWZmZXIgcG9vbDogVGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlIGV4cGVjdGVkIGJ1ZmZlcnMgYXJlIGV4cGVjdGVkCisgKgkJCXRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDBrLiAgQXQgMzAgZW50cmllcyBwZXIgYW5kCisgKiAJCQk4ayBpbml0aWFsIGJ1ZmZlcnMgYW1vdW50cyB0byB+NE1CIG9mIG1lbW9yeQorICogICAgICAgICAgICAgICAgIE5PVEUgLSBUaGlzIHVzZWQgdG8gYmUgNjRLIHdpdGggMjAgZW50cmllcywgYnV0IGR1cmluZworICogICAgICAgICAgICAgICAgICAgICAgICBXSFFMIE5ESVMgNi4wIFRlc3RpbmcgKDJjX21pbmk2c3RyZXNzKSBNUyBkb2VzIHRoZWlyCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgdG8gc2VuZCBhYnN1cmQgTkJMJ3Mgd2l0aCByaWRpY3Vsb3VzIFNHTHMsIHdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgcmVjZWl2ZWQgNDAwYnl0ZSBzZW5kcyBjb250YWluZWQgaW4gU0dMJ3MgdGhhdAorICogICAgICAgICAgICAgICAgICAgICAgICBoYXZlIDI4IGVudHJpZXMKKyAqCSAgMU0gYnVmZmVyIHBvb2w6IEJ1ZmZlcnMgYmV0d2VlbiA2NGsgYW5kIDFNLiAgQWxsb2NhdGUgMjU2IGluaXRpYWwKKyAqCSAgCQkgIGJ1ZmZlcnMgd2l0aCAzMDAgZW50cmllcyBlYWNoID0+IH4yTUIgb2YgbWVtb3J5CisgKgkgIDVNIGJ1ZmZlciBwb29sOiBOb3QgZXhwZWN0ZWQgb2Z0ZW4sIGlmIGF0IGFsbC4gIDMyIGluaXRpYWwgYnVmZmVycworICoJCQkgIGF0IDE1MDAgZW50cmllcyBlYWNoID0+IH4xTUIgb2YgbWVtb3J5CisgKiAxME0gYnVmZmVyIHBvb2w6IE5vdCBleHBlY3RlZCBhdCBhbGwsIGV4Y2VwdCB1bmRlciBwYXRoZWxvZ2ljYWwgY29uZGl0aW9ucy4KKyAqIAkJICAgIEFsbG9jYXRlIG9uZSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLgorICogCQkgIE5vdGUgLSAxME0gaXMgdGhlIGN1cnJlbnQgbGltaXQgb2Ygd2hhdCB3ZSBjYW4gcmVhbGlzdGljYWxseQorICogCQkgIAkgc3VwcG9ydCBkdWUgdG8gdGhlIHNhaGFyYSBTR0wgYnVnIGRlc2NyaWJlZCBpbiB0aGUKKyAqIAkJICAJIFNBSEFSQSBTR0wgV09SS0FST1VORCBiZWxvdy4gV2Ugd2lsbCBsaWtlbHkgYWRqdXN0IHRoZQorICogCQkgIAkgbnVtYmVyIG9mIHBvb2xzIGFuZC9vciBwb29sIHByb3BlcnRpZXMgb3ZlciB0aW1lLgorICovCisjZGVmaW5lIFNYR19OVU1fU0dMX1BPT0xTCTQKKyNkZWZpbmUgSU5JVElBTElaRV9TR0xfUE9PTF9QUk9QRVJUSUVTCQkJCQlcCitzdHJ1Y3Qgc3hnX3NnbF9wb29sX3Byb3BlcnRpZXMgU3hnU2dsUG9vbFByb3BlcnRpZXNbU1hHX05VTV9TR0xfUE9PTFNdID1cCit7IAkJCQkJCQkJCVwKKwl7ICAxMDI0MDAsICAgMzAsIDgxOTIsIDIwNDgsIDE2Mzg0LCAyNTZ9LAkJCVwKKwl7IDEwNDg1NzYsICAzMDAsICAyNTYsICAxMjgsICAxMDI0LCAxNn0sCQkJXAorCXsgNTI1Mjg4MCwgMTUwMCwgICAzMiwgICAxNiwgICA1MTIsIDB9LAkJCQlcCisJezEwNDg1NzYwLCAyNzAwLCAgICAyLCAgICA0LCAgICAzMiwgMH0sCQkJCVwKK307CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNjYXR0ZXIgZ2F0aGVyIGxpc3QgYnVmZmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTWEdfSU5JVElBTF9TR0xfQlVGRkVSUwkJODE5MgkvLyBJbml0aWFsIHBvb2wgb2YgU0dMIGJ1ZmZlcnMKLSNkZWZpbmUgU1hHX01JTl9TR0xfQlVGRkVSUwkJCTIwNDgJLy8gTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUKLSNkZWZpbmUgU1hHX01BWF9TR0xfQlVGRkVSUwkJCTE2Mzg0CS8vIE1heGltdW0gdG8gYWxsb2NhdGUgKG5vdGUgQURBUFQ6dXNob3J0KQorZXh0ZXJuIHN0cnVjdCBzeGdfc2dsX3Bvb2xfcHJvcGVydGllcyBTeGdTZ2xQb29sUHJvcGVydGllc1tdOwogCi0vLyBTZWxmIGlkZW50aWZ5aW5nIHN0cnVjdHVyZSB0eXBlCisjZGVmaW5lIFNYR19NQVhfU0dMX0JVRkZFUl9TSVpFCQkJCQkJXAorCVN4Z1NnbFBvb2xQcm9wZXJ0aWVzW1NYR19OVU1fU0dMX1BPT0xTIC0gMV0uTkJTaXplCisKKy8qCisgKiBTQUhBUkEgU0dMIFdPUktBUk9VTkQhIQorICogVGhlIGN1cnJlbnQgU2FoYXJhIGNhcmQgdXNlcyBhIDE2LWJpdCBjb3VudGVyIHdoZW4gYWR2YW5jaW5nCisgKiBTR0wgYWRkcmVzcyBsb2NhdGlvbnMuICBUaGlzIG1lYW5zIHRoYXQgaWYgYW4gU0dMIGNyb3NzZXMKKyAqIGEgNjRrIGJvdW5kYXJ5LCB0aGUgaGFyZHdhcmUgd2lsbCBhY3R1YWxseSBza2lwIGJhY2sgdG8KKyAqIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgNjRrIGJvdW5kYXJ5LCB3aXRoIG9idmlvdXNseQorICogdW5kZXNpcmFibGUgcmVzdWx0cy4KKyAqCisgKiBXZSBjdXJyZW50bHkgd29ya2Fyb3VuZCB0aGlzIGlzc3VlIGJ5IGFsbG9jYXRpbmcgU0dMIGJ1ZmZlcnMKKyAqIGluIDY0ayBibG9ja3MgYW5kIHNraXBwaW5nIG92ZXIgYnVmZmVycyB0aGF0IHN0cmFkZGxlIHRoZSBib3VuZGFyeS4KKyAqLworI2RlZmluZSBTWEdfSU5WQUxJRF9TR0wocGh5c19hZGRyLGxlbikgXAorCSgoKHBoeXNfYWRkciA+PiAxNikgIT0gKCAocGh5c19hZGRyICsgbGVuKSA+PiAxNiApKSkKKworLyoKKyAqIEFsbG9jYXRlIFNHTHMgaW4gYmxvY2tzIHNvIHdlIGNhbiBza2lwIG92ZXIgaW52YWxpZCBlbnRyaWVzLgorICogV2UgYWxsb2NhdGlvbiA2NGsgd29ydGggb2YgU0dMIGJ1ZmZlcnMsIGluY2x1ZGluZyB0aGUKKyAqIHN0cnVjdCBzeGdfc2dsX2Jsb2NrX2hkciwgcGx1cyBvbmUgZm9yIHBhZGRpbmcKKyAqLworI2RlZmluZSBTWEdfU0dMX0JMT0NLX1NJWkUJCQkJNjU1MzYKKyNkZWZpbmUgU1hHX1NHTF9BTExPQ0FUSU9OX1NJWkUoX1Bvb2wpCQkJCQlcCisJU1hHX1NHTF9CTE9DS19TSVpFICsgU1hHX1NHTF9TSVpFKF9Qb29sKQorCitzdHJ1Y3Qgc3hnX3NnbF9ibG9ja19oZHIgeworCXVzaG9ydAkJCVBvb2w7CQkvKiBBc3NvY2lhdGVkIFNHTCBwb29sICovCisJLyogc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciBibG9ja3MgKi8KKwlzdHJ1Y3QgbGlzdF9lbnRyeQlMaXN0OworCWRtYTY0X2FkZHJfdCAgICAgICAgCVBoeXNpY2FsQWRkcmVzczsvKiBwaHlzaWNhbCBhZGRyZXNzICovCit9OworCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGRlbm90ZXMgdGhlIG1heGltdW0gYmxvY2sgb2YgbWVtb3J5IHRoYXQgdGhlCisgKiBjYXJkIGNhbiBETUEgdG8uSXQgaXMgc3BlY2lmaWVkIGluIHRoZSBjYWxsIHRvIE5kaXNNUmVnaXN0ZXJTY2F0dGVyR2F0aGVyRG1hLgorICogRm9yIG5vdywgdXNlIHRoZSBzYW1lIHZhbHVlIGFzIHVzZWQgaW4gdGhlIFNsaWMvT2FzaXMgZHJpdmVyLCB3aGljaAorICogaXMgMTI4TS4gIFRoYXQgc2hvdWxkIGNvdmVyIGFueSBleHBlY3RlZCBNREwgdGhhdCBJIGNhbiB0aGluayBvZi4KKyAqLworI2RlZmluZSBTWEdfTUFYX1BIWVNfTUFQCSgxMDI0ICogMTAyNCAqIDEyOCkKKworLyogU2VsZiBpZGVudGlmeWluZyBzdHJ1Y3R1cmUgdHlwZSAqLwogZW51bSBTWEdfU0dMX1RZUEUgewotCVNYR19TR0xfRFVNQiwJCS8vIER1bWIgTklDIFNHTAotCVNYR19TR0xfU0xPVywJCS8vIFNsb3dwYXRoIHByb3RvY29sIGhlYWRlciAtIHNlZSBiZWxvdwotCVNYR19TR0xfQ0hJTU5FWQkJLy8gQ2hpbW5leSBvZmZsb2FkIFNHTAorCVNYR19TR0xfRFVNQiwJCS8qIER1bWIgTklDIFNHTCAqLworCVNYR19TR0xfU0xPVywJCS8qIFNsb3dwYXRoIHByb3RvY29sIGhlYWRlciAtIHNlZSBiZWxvdyAqLworCVNYR19TR0xfQ0hJTU5FWQkJLyogQ2hpbW5leSBvZmZsb2FkIFNHTCAqLwogfTsKIAotLy8gTm90ZSAtIHRoZSBkZXNjcmlwdGlvbiBiZWxvdyBpcyBNaWNyb3NvZnQgc3BlY2lmaWMKLS8vCi0vLyBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gc3BlY2lmaWVzIHRoZSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSB0byBhbGxvY2F0ZQotLy8gZm9yIHRoZSBTQ0FUVEVSX0dBVEhFUl9MSVNUIHBvcnRpb24gb2YgdGhlIFNYR19TQ0FUVEVSX0dBVEhFUiBkYXRhIHN0cnVjdHVyZS4KLS8vIFRoZSBmb2xsb3dpbmcgY29uc2lkZXJhdGlvbnMgYXBwbHkgd2hlbiBzZXR0aW5nIHRoaXMgdmFsdWU6Ci0vLyAtIEZpcnN0LCB0aGUgU2FoYXJhIGNhcmQgaXMgZGVzaWduZWQgdG8gcmVhZCB0aGUgTWljcm9zb2Z0IFNHTCBzdHJ1Y3R1cmUKLS8vICAgICAgIHN0cmFpZ2h0IG91dCBvZiBob3N0IG1lbW9yeS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgU0dMIG11c3QgcmVzaWRlIGluCi0vLyAgICAgICBzaGFyZWQgbWVtb3J5LiAgSWYgdGhlIGxlbmd0aCBoZXJlIGlzIHNtYWxsZXIgdGhhbiB0aGUgU0dMIGZvciB0aGUKLS8vICAgICAgIE5FVF9CVUZGRVIsIHRoZW4gTkRJUyB3aWxsIGFsbG9jYXRlIGl0cyBvd24gYnVmZmVyLiAgVGhlIGJ1ZmZlcgotLy8gICAgICAgdGhhdCBORElTIGFsbG9jYXRlcyBpcyBub3QgaW4gc2hhcmVkIG1lbW9yeSwgc28gd2hlbiB0aGlzIGhhcHBlbnMsCi0vLyAgICAgICB0aGUgU0dMIHdpbGwgbmVlZCB0byBiZSBjb3BpZWQgdG8gYSBzZXQgb2YgU1hHX1NDQVRURVJfR0FUSEVSIGJ1ZmZlcnMuCi0vLyAgICAgICBJbiBvdGhlciB3b3Jkcy4uIHdlIGRvbid0IHdhbnQgdGhpcyB2YWx1ZSB0byBiZSB0b28gc21hbGwuCi0vLyAtIE9uIHRoZSBvdGhlciBoYW5kLi4gd2UncmUgYWxsb2NhdGluZyB1cCB0byAxNmsgb2YgdGhlc2UgdGhpbmdzLiAgSWYKLS8vICAgICAgIHdlIG1ha2UgdGhpcyB0b28gYmlnLCB3ZSBzdGFydCB0byBjb25zdW1lIGEgdG9uIG9mIG1lbW9yeS4uCi0vLyBBdCB0aGUgbW9tZW50LCBJJ20gZ29pbmcgdG8gbGltaXQgdGhlIG51bWJlciBvZiBTRyBlbnRyaWVzIHRvIDE1MC4KLS8vIElmIGVhY2ggZW50cnkgbWFwcyByb3VnaGx5IDRrLCB0aGVuIHRoaXMgc2hvdWxkIGNvdmVyIHJvdWdobHkgNjAwa0IKLS8vIE5FVF9CVUZGRVJzLiAgRnVydGhlcm1vcmUsIHNpbmNlIGVhY2ggZW50cnkgaXMgMjQgYnl0ZXMsIHRoZSB0b3RhbAotLy8gU0dFIHBvcnRpb24gb2YgdGhlIHN0cnVjdHVyZSBjb25zdW1lcyAzNjAwIGJ5dGVzLCB3aGljaCBzaG91bGQgYWxsb3cKLS8vIHRoZSBlbnRpcmUgU1hHX1NDQVRURVJfR0FUSEVSIHN0cnVjdHVyZSB0byByZXNpZGUgY29tZm9ydGFibHkgd2l0aGluCi0vLyBhIDRrIGJsb2NrLCBwcm92aWRpbmcgdGhlIHJlbWFpbmluZyBmaWVsZHMgc3RheSB1bmRlciA1MDAgYnl0ZXMuCi0vLwotLy8gU28gd2l0aCAxNTAgZW50cmllcywgdGhlIFNYR19TQ0FUVEVSX0dBVEhFUiBzdHJ1Y3R1cmUgYmVjb21lcyByb3VnaGx5Ci0vLyA0ay4gIEF0IDE2ayBvZiB0aGVtLCB0aGF0IGFtb3VudHMgdG8gNjRNIG9mIHNoYXJlZCBtZW1vcnkuICBBIHRvbiwgYnV0Ci0vLyBtYW5hZ2VhYmxlLgotI2RlZmluZSBTWEdfU0dMX0VOVFJJRVMJCTE1MAotCi0vLyBUaGUgdWNvZGUgZXhwZWN0cyBhbiBORElTIFNHTCBzdHJ1Y3R1cmUgdGhhdAotLy8gaXMgZm9ybWF0dGVkIGZvciBhbiB4NjQgc3lzdGVtLiAgV2hlbiBydW5uaW5nCi0vLyBvbiBhbiB4NjQgc3lzdGVtLCB3ZSBjYW4gc2ltcGx5IGhhbmQgdGhlIE5ESVMgU0dMCi0vLyB0byB0aGUgY2FyZCBkaXJlY3RseS4gIEZvciB4ODYgc3lzdGVtcyB3ZSBtdXN0IHJlY29uc3RydWN0Ci0vLyB0aGUgU0dMLiAgVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbiB4NjQKLS8vIGZvcm1hdHRlZCBTR0wgZW50cnkKLXN0cnVjdCBTWEdfWDY0X1NHRSB7Ci0JZG1hNjRfYWRkcl90IEFkZHJlc3M7CS8vIHNhbWUgYXMgd2RtLmgKLQl1MzIgTGVuZ3RoOwkJLy8gc2FtZSBhcyB3ZG0uaAotCXUzMiBDb21waWxlclBhZDsJLy8gVGhlIGNvbXBpbGVyIHBhZHMgdG8gOC1ieXRlcwotCXU2NCBSZXNlcnZlZDsJCS8vIHUzMiAqIGluIHdkbS5oLiAgRm9yY2UgdG8gOCBieXRlcworLyoKKyAqIFRoZSB1Y29kZSBleHBlY3RzIGFuIE5ESVMgU0dMIHN0cnVjdHVyZSB0aGF0CisgKiBpcyBmb3JtYXR0ZWQgZm9yIGFuIHg2NCBzeXN0ZW0uICBXaGVuIHJ1bm5pbmcKKyAqIG9uIGFuIHg2NCBzeXN0ZW0sIHdlIGNhbiBzaW1wbHkgaGFuZCB0aGUgTkRJUyBTR0wKKyAqIHRvIHRoZSBjYXJkIGRpcmVjdGx5LiAgRm9yIHg4NiBzeXN0ZW1zIHdlIG11c3QgcmVjb25zdHJ1Y3QKKyAqIHRoZSBTR0wuICBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBkZWZpbmVzIGFuIHg2NAorICogZm9ybWF0dGVkIFNHTCBlbnRyeQorICovCitzdHJ1Y3Qgc3hnX3g2NF9zZ2UgeworCWRtYTY0X2FkZHJfdCAgICBBZGRyZXNzOwkvKiBzYW1lIGFzIHdkbS5oICovCisJdTMyCQlMZW5ndGg7CQkvKiBzYW1lIGFzIHdkbS5oICovCisJdTMyCQlDb21waWxlclBhZDsJLyogVGhlIGNvbXBpbGVyIHBhZHMgdG8gOC1ieXRlcyAqLworCXU2NAkJUmVzZXJ2ZWQ7CS8qIHUzMiAqIGluIHdkbS5oLiAgRm9yY2UgdG8gOCBieXRlcyAqLwogfTsKIAotc3RydWN0IFNDQVRURVJfR0FUSEVSX0VMRU1FTlQgewotCWRtYTY0X2FkZHJfdCBBZGRyZXNzOwkvLyBzYW1lIGFzIHdkbS5oCi0JdTMyIExlbmd0aDsJCS8vIHNhbWUgYXMgd2RtLmgKLQl1MzIgQ29tcGlsZXJQYWQ7CS8vIFRoZSBjb21waWxlciBwYWRzIHRvIDgtYnl0ZXMKLQl1NjQgUmVzZXJ2ZWQ7CQkvLyB1MzIgKiBpbiB3ZG0uaC4gIEZvcmNlIHRvIDggYnl0ZXMKLX07Ci0KLXN0cnVjdCBTQ0FUVEVSX0dBVEhFUl9MSVNUIHsKKy8qCisgKiBPdXIgU0dMIHN0cnVjdHVyZSAtIEVzc2VudGlhbGx5IHRoZSBzYW1lIGFzCisgKiB3ZG0uaDpTQ0FUVEVSX0dBVEhFUl9MSVNULiAgTm90ZSB0aGUgdmFyaWFibGUgbnVtYmVyIG9mCisgKiBlbGVtZW50cyBiYXNlZCBvbiB0aGUgcG9vbCBzcGVjaWZpZWQgYWJvdmUKKyAqLworc3RydWN0IHN4Z194NjRfc2dsIHsKIAl1MzIgTnVtYmVyT2ZFbGVtZW50czsKIAl1MzIgKlJlc2VydmVkOwotCXN0cnVjdCBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5UIEVsZW1lbnRzW107CisJc3RydWN0IHN4Z194NjRfc2dlCQlFbGVtZW50c1sxXTsgICAvKiBWYXJpYWJsZSAqLwogfTsKIAotLy8gVGhlIGNhcmQgZG9lc24ndCBjYXJlIGFib3V0IGFueXRoaW5nIGV4Y2VwdCBlbGVtZW50cywgc28KLS8vIHdlIGNhbiBsZWF2ZSB0aGUgdTMyICogcmVzZXJ2ZWQgZmllbGQgYWxvbmUgaW4gdGhlIGZvbGxvd2luZwotLy8gU0dMIHN0cnVjdHVyZS4gIEJ1dCByZWRlZmluZSBmcm9tIHdkbS5oOlNDQVRURVJfR0FUSEVSX0xJU1Qgc28KLS8vIHdlIGNhbiBzcGVjaWZ5IFNYR19YNjRfU0dFIGFuZCBkZWZpbmUgYSBmaXhlZCBudW1iZXIgb2YgZWxlbWVudHMKLXN0cnVjdCBTWEdfWDY0X1NHTCB7Ci0JdTMyIE51bWJlck9mRWxlbWVudHM7Ci0JdTMyICpSZXNlcnZlZDsKLQlzdHJ1Y3QgU1hHX1g2NF9TR0UgRWxlbWVudHNbU1hHX1NHTF9FTlRSSUVTXTsKK3N0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgeworCWVudW0gU1hHX1NHTF9UWVBFCVR5cGU7CQkvKiBGSVJTVCEgRHVtYi1uaWMgb3Igb2ZmbG9hZCAqLworCXVzaG9ydAkJCVBvb2w7CQkvKiBBc3NvY2lhdGVkIFNHTCBwb29sICovCisJdXNob3J0CQkJRW50cmllczsJLyogU0dMIHRvdGFsIGVudHJpZXMgKi8KKwl2b2lkICogICAJCWFkYXB0ZXI7CS8qIEJhY2sgcG9pbnRlciB0byBhZGFwdGVyICovCisJLyogRnJlZSBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyIGJsb2NrcyAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVMaXN0OworCS8qIEFsbCBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyIGJsb2NrcyAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUFsbExpc3Q7CisJZG1hNjRfYWRkcl90CQlQaHlzaWNhbEFkZHJlc3M7LyogcGh5c2ljYWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGNoYXIJCVN0YXRlOwkJLyogU2VlIFNYR19CVUZGRVIgc3RhdGUgYWJvdmUgKi8KKwl1bnNpZ25lZCBjaGFyCQlDbWRJbmRleDsJLyogQ29tbWFuZCByaW5nIGluZGV4ICovCisJc3RydWN0IHNrX2J1ZmYgICAgICAgICAJKkR1bWJQYWNrZXQ7CS8qIEFzc29jaWF0ZWQgUGFja2V0ICovCisJLyogRm9yIGFzeW5jaHJvbm91cyBjb21wbGV0aW9ucyAqLworCXUzMgkJCURpcmVjdGlvbjsKKwl1MzIJCQlDdXJPZmZzZXQ7CS8qIEN1cnJlbnQgU0dMIG9mZnNldCAqLworCXUzMgkJCVNnbFJlZjsJCS8qIFNHTCByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3Qgdmxhbl9oZHIJCVZsYW5UYWc7CS8qIFZMQU4gdGFnIHRvIGJlIGluc2VydGVkIGludG8gU0dMICovCisJc3RydWN0IHN4Z194NjRfc2dsICAgICAJKnBTZ2w7CQkvKiBTR0wgQWRkci4gUG9zc2libHkgJlNnbCAqLworCXN0cnVjdCBzeGdfeDY0X3NnbAlTZ2w7CQkvKiBTR0wgaGFuZGVkIHRvIGNhcmQgKi8KIH07CiAKLXN0cnVjdCBTWEdfU0NBVFRFUl9HQVRIRVIgewotCWVudW0gU1hHX1NHTF9UWVBFIFR5cGU7CS8vIEZJUlNUISBEdW1iLW5pYyBvciBvZmZsb2FkCi0Jdm9pZCAqYWRhcHRlcjsJCS8vIEJhY2sgcG9pbnRlciB0byBhZGFwdGVyCi0Jc3RydWN0IExJU1RfRU5UUlkgRnJlZUxpc3Q7CS8vIEZyZWUgU1hHX1NDQVRURVJfR0FUSEVSIGJsb2NrcwotCXN0cnVjdCBMSVNUX0VOVFJZIEFsbExpc3Q7CS8vIEFsbCBTWEdfU0NBVFRFUl9HQVRIRVIgYmxvY2tzCi0JZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3M7CS8vIHBoeXNpY2FsIGFkZHJlc3MKLQl1bnNpZ25lZCBjaGFyIFN0YXRlOwkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQotCXVuc2lnbmVkIGNoYXIgQ21kSW5kZXg7CS8vIENvbW1hbmQgcmluZyBpbmRleAotCXN0cnVjdCBza19idWZmICpEdW1iUGFja2V0OwkvLyBBc3NvY2lhdGVkIFBhY2tldAotCXUzMiBEaXJlY3Rpb247CQkvLyBGb3IgYXN5bmNocm9ub3VzIGNvbXBsZXRpb25zCi0JdTMyIEN1ck9mZnNldDsJCS8vIEN1cnJlbnQgU0dMIG9mZnNldAotCXUzMiBTZ2xSZWY7CQkvLyBTR0wgcmVmZXJlbmNlIGNvdW50Ci0Jc3RydWN0IFZMQU5fSERSIFZsYW5UYWc7CS8vIFZMQU4gdGFnIHRvIGJlIGluc2VydGVkIGludG8gU0dMCi0Jc3RydWN0IFNDQVRURVJfR0FUSEVSX0xJU1QgKnBTZ2w7CS8vIFNHTCBBZGRyLiBQb3NzaWJseSAmU2dsCi0Jc3RydWN0IFNYR19YNjRfU0dMIFNnbDsJLy8gU0dMIGhhbmRlZCB0byBjYXJkCi19OworLyoKKyAqIE5vdGUgLSB0aGUgIi0gMSIgaXMgYmVjYXVzZSBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyPT5zdHJ1Y3Qgc3hnX3g2NF9zZ2wKKyAqIGluY2x1ZGVzIDEgU0dFLi4KKyAqLworI2RlZmluZSBTWEdfU0dMX1NJWkUoX1Bvb2wpIAkJCQkJCVwKKwkoc2l6ZW9mKHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIpICsJCQkJXAorCSAoKFN4Z1NnbFBvb2xQcm9wZXJ0aWVzW19Qb29sXS5TR0VudHJpZXMgLSAxKSAqIAkJXAorCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX3g2NF9zZ2UpKSkKIAorLyogRm9yY2UgTkRJUyB0byBnaXZlIHVzIGl0J3Mgb3duIGJ1ZmZlciBzbyB3ZSBjYW4gcmVmb3JtYXQgdG8gb3VyIG93biAqLworI2RlZmluZSBTWEdfU0dMX0JVRkZFUihfU3hnU2dsKSAgICAgICAgICAgICAgICAgTlVMTAorI2RlZmluZSBTWEdfU0dMX0JVRkZFUl9MRU5HVEgoX1N4Z1NnbCkgICAgICAgICAgMAorI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLSNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCSgmX1N4Z1NnbC0+U2dsKQotI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFCQkJc2l6ZW9mKHN0cnVjdCBTWEdfWDY0X1NHTCkKKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCSAgICAoJl9TeGdTZ2wtPlNnbCkKKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVJfTEVOR1RIKF9TeGdTZ2wpCSgoX1N4Z1NnbCktPkVudHJpZXMgKiAJCVwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzeGdfeDY0X3NnZSkpCisjZGVmaW5lIFNYR19TR0xfQlVGX1NJWkUJCQkgICAgc2l6ZW9mKHN0cnVjdCBzeGdfeDY0X3NnbCkKICNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKIC8vIEZvcmNlIE5ESVMgdG8gZ2l2ZSB1cyBpdCdzIG93biBidWZmZXIgc28gd2UgY2FuIHJlZm9ybWF0IHRvIG91ciBvd24KLSNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCU5VTEwKKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCSAgICAgICAgTlVMTAorI2RlZmluZSBTWEdfU0dMX0JVRkZFUl9MRU5HVEgoX1N4Z1NnbCkJCTAKICNkZWZpbmUgU1hHX1NHTF9CVUZfU0laRQkJCTAKICNlbHNlCiAjZXJyb3Igc3RhZ2luZzogc3hnOiBkcml2ZXIgaXMgZm9yIFg4NiBvbmx5IQogI2VuZGlmCisqLworLyogTWljcm9jb2RlIHN0YXRpc3RpY3MgKi8KK3N0cnVjdCBzeGdfdWNvZGVfc3RhdHMgeworCXUzMiAgUlBEUU9mbG93OwkJLyogUERRIG92ZXJmbG93ICh1bmZyYW1lZCBpZSBkcSAmIGRyb3AgMXN0KSAqLworCXUzMiAgWERyb3BzOwkJLyogWG10IGRyb3BzIGR1ZSB0byBubyB4bXQgYnVmZmVyICovCisJdTMyICBFUkRyb3BzOwkJLyogUmN2IGRyb3BzIGR1ZSB0byBFUiBmdWxsICovCisJdTMyICBOQkRyb3BzOwkJLyogUmN2IGRyb3BzIGR1ZSB0byBvdXQgb2YgaG9zdCBidWZmZXJzICovCisJdTMyICBQUURyb3BzOwkJLyogUmN2IGRyb3BzIGR1ZSB0byBQRFEgZnVsbCAqLworCS8qIFJjdiBkcm9wcyBkdWUgdG8gYmFkIGZyYW1lOiBubyBsaW5rIGFkZHIgbWF0Y2gsIGZybGVuID4gbWF4ICovCisJdTMyICBCRkRyb3BzOworCXUzMiAgVVBEcm9wczsJCS8qIFJjdiBkcm9wcyBkdWUgdG8gVVBGcSBmdWxsICovCisJdTMyICBYTm9CdWZzOwkJLyogWG10IGRyb3AgZHVlIHRvIG5vIERSQU0gWG1pdCBidWZmZXIgb3IgUHh5QnVmICovCit9OworCisvKgorICogTWFjcm9zIGZvciBoYW5kbGluZyB0aGUgT2ZmbG9hZCBlbmdpbmUgdmFsdWVzCisgKi8KKy8qIE51bWJlciBvZiBwb3NpdGlvbnMgdG8gc2hpZnQgTmV0d29yayBIZWFkZXIgTGVuZ3RoIGJlZm9yZSBwYXNzaW5nIHRvIGNhcmQgKi8KKyNkZWZpbmUgU1hHX05XX0hEUl9MRU5fU0hJRlQJCTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaAppbmRleCBiMGVmZmY5Li44MWY4MWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2h3LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdody5oCkBAIC0xLDQgKzEsNCBAQAotLyoKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDb3B5cmlnaHQgqSAxOTk3LTIwMDcgQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCiAgKgogICogJElkOiBzeGdody5oLHYgMS4yIDIwMDgvMDcvMjQgMTc6MjQ6MjMgY2hyaXMgRXhwICQKQEAgLTcsNjgyICs3LDg5NCBAQAogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlCiAgKiBBbGFjcml0ZWNoIFNhaGFyYSBoYXJkd2FyZQotICovCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvbmZpZ3VyYXRpb24gc3BhY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUENJIENvbmZpZ3VyYXRpb24gc3BhY2UgKi8KIC8qICBQQ0kgVmVuZG9yIElEICovCiAjZGVmaW5lIFNYR19WRU5ET1JfSUQJCQkweDEzOUEJLyogQWxhY3JpdGVjaCdzIFZlbmRvciBJRCAqLwogCi0vLyAgUENJIERldmljZSBJRAorLyogIFBDSSBEZXZpY2UgSUQgKi8KICNkZWZpbmUgU1hHX0RFVklDRV9JRAkJCTB4MDAwOQkvKiBTYWhhcmEgRGV2aWNlIElEICovCiAKLS8vCi0vLyBTdWJzeXN0ZW0gSURzLgotLy8KLS8vIFRoZSBzdWJzeXN0ZW0gSUQgdmFsdWUgaXMgYnJva2VuIGludG8gYml0IGZpZWxkcyBhcyBmb2xsb3dzOgotLy8JCUJpdHMgWzE1OjEyXSAtIEZ1bmN0aW9uCi0vLwkJQml0cyBbMTE6OF0gIC0gT0VNIGFuZC9vciBvcGVyYXRpbmcgc3lzdGVtLgotLy8JCUJpdHMgWzc6MF0gICAtIEJhc2UgU0lELgotLy8KLS8vIFNTSUQgZmllbGQgKGJpdCkgbWFza3MKLSNkZWZpbmUgU1NJRF9CQVNFX01BU0sJCQkJCTB4MDBGRgkvLyBCYXNlIHN1YnN5c3RlbSBJRCBtYXNrCi0jZGVmaW5lIFNTSURfT0VNX01BU0sJCQkJCTB4MEYwMAkvLyBTdWJzeXN0ZW0gT0VNIG1hc2sKLSNkZWZpbmUgU1NJRF9GVU5DX01BU0sJCQkJCTB4RjAwMAkvLyBTdWJzeXN0ZW0gZnVuY3Rpb24gbWFzawogCi0vLyBCYXNlIFNTSUQncwotI2RlZmluZSBTU0lEX1NBSEFSQV9QUk9UTwkJCQkweDAwMTgJLy8gMTAwMDIyIFNhaGFyYSBwcm90b3R5cGUgKFhlblBhaykgYm9hcmQKLSNkZWZpbmUgU1NJRF9TQUhBUkFfRklCRVIJCQkJMHgwMDE5CS8vIDEwMDAyMyBTYWhhcmEgMS1wb3J0IGZpYmVyIGJvYXJkCi0jZGVmaW5lIFNTSURfU0FIQVJBX0NPUFBFUgkJCQkweDAwMUEJLy8gMTAwMDI0IFNhaGFyYSAxLXBvcnQgY29wcGVyIGJvYXJkCisvKiBUeXBlIG9mIEFTSUMgaW4gdXNlICovCitlbnVtIGFzaWNfdHlwZSB7CisJU0FIQVJBX1JFVl9BLAorCVNBSEFSQV9SRVZfQgorfTsKIAotLy8gVXNlZnVsIFNTSUQgbWFjcm9zCi0jZGVmaW5lCVNTSURfQkFTRShzc2lkKQkJCSgoc3NpZCkgJiBTU0lEX0JBU0VfTUFTSykJCS8vIGlzb2xhdGUgYmFzZSBTU0lEIGJpdHMKLSNkZWZpbmUJU1NJRF9PRU0oc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9PRU1fTUFTSykJCS8vIGlzb2xhdGUgU1NJRCBPRU0gYml0cwotI2RlZmluZQlTU0lEX0ZVTkMoc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9GVU5DX01BU0spCQkvLyBpc29sYXRlIFNTSUQgZnVuY3Rpb24gYml0cworLyogVHlwZSBvZiBYY3ZyIGluIGZpYmVyIGNhcmQgKi8KK2VudW0geGN2cl90eXBlIHsKKwlYQ1ZSX1VOS05PV04sCisJWENWUl9OT05FLAorCVhDVlJfU1IsCisJWENWUl9MUiwKKwlYQ1ZSX0xSTSwKKwlYQ1ZSX0NSCit9OworLyoKKyAqIFN1YnN5c3RlbSBJRHMuCisgKgorICogVGhlIHN1YnN5c3RlbSBJRCB2YWx1ZSBpcyBicm9rZW4gaW50byBiaXQgZmllbGRzIGFzIGZvbGxvd3M6CisgKgkJQml0cyBbMTU6MTJdIC0gRnVuY3Rpb24KKyAqCQlCaXRzIFsxMTo4XSAgLSBPRU0gYW5kL29yIG9wZXJhdGluZyBzeXN0ZW0uCisgKgkJQml0cyBbNzowXSAgIC0gQmFzZSBTSUQuCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEhXIFJlZ2lzdGVyIFNwYWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU1hHX0hXUkVHX01FTVNJWkUJMHg0MDAwCQkvLyAxNmsKKy8qIFNTSUQgZmllbGQgKGJpdCkgbWFza3MgKi8KKyNkZWZpbmUgU1NJRF9CQVNFX01BU0sJCTB4MDBGRgkvKiBCYXNlIHN1YnN5c3RlbSBJRCBtYXNrICovCisjZGVmaW5lIFNTSURfT0VNX01BU0sJCTB4MEYwMAkvKiBTdWJzeXN0ZW0gT0VNIG1hc2sgKi8KKyNkZWZpbmUgU1NJRF9GVU5DX01BU0sJCTB4RjAwMAkvKiBTdWJzeXN0ZW0gZnVuY3Rpb24gbWFzayAqLworCisvKiBCYXNlIFNTSUQncyAqLworLyogMTAwMDIyIFNhaGFyYSBwcm90b3R5cGUgKFhlblBhaykgYm9hcmQgKi8KKyNkZWZpbmUgU1NJRF9TQUhBUkFfUFJPVE8JMHgwMDE4CisjZGVmaW5lIFNTSURfU0FIQVJBX0ZJQkVSCTB4MDAxOQkvKiAxMDAwMjMgU2FoYXJhIDEtcG9ydCBmaWJlciBib2FyZCAqLworI2RlZmluZSBTU0lEX1NBSEFSQV9DT1BQRVIJMHgwMDFBCS8qIDEwMDAyNCBTYWhhcmEgMS1wb3J0IGNvcHBlciBib2FyZCAqLworCisvKiBVc2VmdWwgU1NJRCBtYWNyb3MgKi8KKy8qIGlzb2xhdGUgYmFzZSBTU0lEIGJpdHMgKi8KKyNkZWZpbmUJU1NJRF9CQVNFKHNzaWQpCQkoKHNzaWQpICYgU1NJRF9CQVNFX01BU0spCisvKiBpc29sYXRlIFNTSUQgT0VNIGJpdHMgKi8KKyNkZWZpbmUJU1NJRF9PRU0oc3NpZCkJCSgoc3NpZCkgJiBTU0lEX09FTV9NQVNLKQorLyogaXNvbGF0ZSBTU0lEIGZ1bmN0aW9uIGJpdHMgKi8KKyNkZWZpbmUJU1NJRF9GVU5DKHNzaWQpCQkoKHNzaWQpICYgU1NJRF9GVU5DX01BU0spCisKKworLyogSFcgUmVnaXN0ZXIgU3BhY2UgKi8KKyNkZWZpbmUgU1hHX0hXUkVHX01FTVNJWkUJMHg0MDAwCQkvKiAxNmsgKi8KIAogI3ByYWdtYSBwYWNrKHB1c2gsIDEpCi1zdHJ1Y3QgU1hHX0hXX1JFR1MgewotCXUzMgkJUmVzZXQ7CQkJCS8vIFdyaXRlIDB4ZGVhZCB0byBpbnZva2Ugc29mdCByZXNldAotCXUzMgkJUGFkMTsJCQkJLy8gTm8gcmVnaXN0ZXIgZGVmaW5lZCBhdCBvZmZzZXQgNAotCXUzMgkJSW50ZXJydXB0TWFzazA7CQkvLyBEZWFzc2VydCBsZWdhY3kgaW50ZXJydXB0IG9uIGZ1bmN0aW9uIDAKLQl1MzIJCUludGVycnVwdE1hc2sxOwkJLy8gRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAxCi0JdTMyCQlVY29kZURhdGFMb3c7CQkvLyBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyAzMS0wCi0JdTMyCQlVY29kZURhdGFNaWRkbGU7CS8vIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyCi0JdTMyCQlVY29kZURhdGFIaWdoOwkJLy8gU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgOTUtNjQKLQl1MzIJCVVjb2RlQWRkcjsJCQkvLyBTdG9yZSBtaWNyb2NvZGUgYWRkcmVzcyAtIFNlZSBmbGFncyBiZWxvdwotCXUzMgkJUGFkVG8weDgwWzI0XTsJCS8vIFBhZCB0byBYY3YgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLQl1MzIJCU1hY0NvbmZpZzA7CQkJLy8gMHg4MCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKLQl1MzIJCU1hY0NvbmZpZzE7CQkJLy8gMHg4NCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKLQl1MzIJCU1hY0NvbmZpZzI7CQkJLy8gMHg4OCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIKLQl1MzIJCU1hY0NvbmZpZzM7CQkJLy8gMHg4QyAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKLQl1MzIJCU1hY0FkZHJlc3NMb3c7CQkvLyAweDkwIC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgMS00Ci0JdTMyCQlNYWNBZGRyZXNzSGlnaDsJCS8vIDB4OTQgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyA1LTYKLQl1MzIJCU1hY1Jlc2VydmVkMVsyXTsJLy8gMHg5OCAtIEFYR01BQyBSZXNlcnZlZAotCXUzMgkJTWFjTWF4RnJhbWVMZW47CQkvLyAweEEwIC0gQVhHTUFDIE1heGltdW0gRnJhbWUgTGVuZ3RoCi0JdTMyCQlNYWNSZXNlcnZlZDJbMl07CS8vIDB4QTQgLSBBWEdNQUMgUmVzZXJ2ZWQKLQl1MzIJCU1hY1JldmlzaW9uOwkJLy8gMHhBQyAtIEFYR01BQyBSZXZpc2lvbiBMZXZlbCBSZWdpc3RlcgotCXUzMgkJTWFjUmVzZXJ2ZWQzWzRdOwkvLyAweEIwIC0gQVhHTUFDIFJlc2VydmVkCi0JdTMyCQlNYWNBbWlpbUNtZDsJCS8vIDB4QzAgLSBBWEdNQUMgQU1JSU0gQ29tbWFuZCBSZWdpc3RlcgotCXUzMgkJTWFjQW1paW1GaWVsZDsJCS8vIDB4QzQgLSBBWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKLQl1MzIJCU1hY0FtaWltQ29uZmlnOwkJLy8gMHhDOCAtIEFYR01BQyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0JdTMyCQlNYWNBbWlpbUxpbms7CQkvLyAweENDIC0gQVhHTUFDIEFNSUlNIExpbmsgRmFpbCBWZWN0b3IgUmVnaXN0ZXIKLQl1MzIJCU1hY0FtaWltSW5kaWNhdG9yOwkvLyAweEQwIC0gQVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RvcgotCXUzMgkJUGFkVG8weDEwMFsxMV07CQkvLyAweEQ0IC0gMHgxMDAgLSBQYWQKLQl1MzIJCVhtdENvbmZpZzsJCQkvLyAweDEwMCAtIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLQl1MzIJCVJjdkNvbmZpZzsJCQkvLyAweDEwNCAtIFJlY2VpdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCi0JdTMyCQlMaW5rQWRkcmVzczBMb3c7CS8vIDB4MTA4IC0gTGluayBhZGRyZXNzIDAKLQl1MzIJCUxpbmtBZGRyZXNzMEhpZ2g7CS8vIDB4MTBDIC0gTGluayBhZGRyZXNzIDAKLQl1MzIJCUxpbmtBZGRyZXNzMUxvdzsJLy8gMHgxMTAgLSBMaW5rIGFkZHJlc3MgMQotCXUzMgkJTGlua0FkZHJlc3MxSGlnaDsJLy8gMHgxMTQgLSBMaW5rIGFkZHJlc3MgMQotCXUzMgkJTGlua0FkZHJlc3MyTG93OwkvLyAweDExOCAtIExpbmsgYWRkcmVzcyAyCi0JdTMyCQlMaW5rQWRkcmVzczJIaWdoOwkvLyAweDExQyAtIExpbmsgYWRkcmVzcyAyCi0JdTMyCQlMaW5rQWRkcmVzczNMb3c7CS8vIDB4MTIwIC0gTGluayBhZGRyZXNzIDMKLQl1MzIJCUxpbmtBZGRyZXNzM0hpZ2g7CS8vIDB4MTI0IC0gTGluayBhZGRyZXNzIDMKLQl1MzIJCVRvZXBsaXR6S2V5WzEwXTsJLy8gMHgxMjggLSAweDE1MCAtIFRvZXBsaXR6IGtleQotCXUzMgkJU29ja2V0S2V5WzEwXTsJCS8vIDB4MTUwIC0gMHgxNzggLSBTb2NrZXQgS2V5Ci0JdTMyCQlMaW5rU3RhdHVzOwkJCS8vIDB4MTc4IC0gTGluayBzdGF0dXMKLQl1MzIJCUNsZWFyU3RhdHM7CQkJLy8gMHgxN0MgLSBDbGVhciBTdGF0cwotCXUzMgkJWG10RXJyb3JzTG93OwkJLy8gMHgxODAgLSBUcmFuc21pdCBzdGF0cyAtIGVycm9ycwotCXUzMgkJWG10RXJyb3JzSGlnaDsJCS8vIDB4MTg0IC0gVHJhbnNtaXQgc3RhdHMgLSBlcnJvcnMKLQl1MzIJCVhtdEZyYW1lc0xvdzsJCS8vIDB4MTg4IC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAotCXUzMgkJWG10RnJhbWVzSGlnaDsJCS8vIDB4MThDIC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAotCXUzMgkJWG10Qnl0ZXNMb3c7CQkvLyAweDE5MCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudAotCXUzMgkJWG10Qnl0ZXNIaWdoOwkJLy8gMHgxOTQgLSBUcmFuc21pdCBzdGF0cyAtIGJ5dGUgY291bnQKLQl1MzIJCVhtdFRjcFNlZ21lbnRzTG93OwkvLyAweDE5OCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIHNlZ21lbnRzCi0JdTMyCQlYbXRUY3BTZWdtZW50c0hpZ2g7CS8vIDB4MTlDIC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMKLQl1MzIJCVhtdFRjcEJ5dGVzTG93OwkJLy8gMHgxQTAgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBieXRlcwotCXUzMgkJWG10VGNwQnl0ZXNIaWdoOwkvLyAweDFBNCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzCi0JdTMyCQlSY3ZFcnJvcnNMb3c7CQkvLyAweDFBOCAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKLQl1MzIJCVJjdkVycm9yc0hpZ2g7CQkvLyAweDFBQyAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKLQl1MzIJCVJjdkZyYW1lc0xvdzsJCS8vIDB4MUIwIC0gUmVjZWl2ZSBzdGF0cyAtIGZyYW1lIGNvdW50Ci0JdTMyCQlSY3ZGcmFtZXNIaWdoOwkJLy8gMHgxQjQgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQKLQl1MzIJCVJjdkJ5dGVzTG93OwkJLy8gMHgxQjggLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAotCXUzMgkJUmN2Qnl0ZXNIaWdoOwkJLy8gMHgxQkMgLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAotCXUzMgkJUmN2VGNwU2VnbWVudHNMb3c7CS8vIDB4MUMwIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cwotCXUzMgkJUmN2VGNwU2VnbWVudHNIaWdoOwkvLyAweDFDNCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1Agc2VnbWVudHMKLQl1MzIJCVJjdlRjcEJ5dGVzTG93OwkJLy8gMHgxQzggLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzCi0JdTMyCQlSY3ZUY3BCeXRlc0hpZ2g7CS8vIDB4MUNDIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBieXRlcwotCXUzMgkJUGFkVG8weDIwMFsxMl07CQkvLyAweDFEMCAtIDB4MjAwIC0gUGFkCi0JdTMyCQlTb2Z0d2FyZVsxOTIwXTsJCS8vIDB4MjAwIC0gMHgyMDAwIC0gU29mdHdhcmUgZGVmaW5lZCAobm90IHVzZWQpCi0JdTMyCQlNc2l4VGFibGVbMTAyNF07CS8vIDB4MjAwMCAtIDB4MzAwMCAtIE1TSVggVGFibGUKLQl1MzIJCU1zaXhCaXRBcnJheVsxMDI0XTsJLy8gMHgzMDAwIC0gMHg0MDAwIC0gTVNJWCBQZW5kaW5nIEJpdCBBcnJheQorc3RydWN0IHN4Z19od19yZWdzIHsKKwl1MzIJUmVzZXQ7CQkvKiBXcml0ZSAweGRlYWQgdG8gaW52b2tlIHNvZnQgcmVzZXQgKi8KKwl1MzIJUGFkMTsJCS8qIE5vIHJlZ2lzdGVyIGRlZmluZWQgYXQgb2Zmc2V0IDQgKi8KKwl1MzIJSW50ZXJydXB0TWFzazA7CS8qIERlYXNzZXJ0IGxlZ2FjeSBpbnRlcnJ1cHQgb24gZnVuY3Rpb24gMCAqLworCXUzMglJbnRlcnJ1cHRNYXNrMTsJLyogRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAxICovCisJdTMyCVVjb2RlRGF0YUxvdzsJLyogU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgMzEtMCAqLworCXUzMglVY29kZURhdGFNaWRkbGU7CS8qIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyICovCisJdTMyCVVjb2RlRGF0YUhpZ2g7CS8qIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDk1LTY0ICovCisJdTMyCVVjb2RlQWRkcjsJLyogU3RvcmUgbWljcm9jb2RlIGFkZHJlc3MgLSBTZWUgZmxhZ3MgYmVsb3cgKi8KKwl1MzIJUGFkVG8weDgwWzI0XTsJLyogUGFkIHRvIFhjdiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLworCXUzMglNYWNDb25maWcwOwkvKiAweDgwIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworCXUzMglNYWNDb25maWcxOwkvKiAweDg0IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworCXUzMglNYWNDb25maWcyOwkvKiAweDg4IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworCXUzMglNYWNDb25maWczOwkvKiAweDhDIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLworCXUzMglNYWNBZGRyZXNzTG93OwkvKiAweDkwIC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgMS00ICovCisJdTMyCU1hY0FkZHJlc3NIaWdoOwkvKiAweDk0IC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgNS02ICovCisJdTMyCU1hY1Jlc2VydmVkMVsyXTsJLyogMHg5OCAtIEFYR01BQyBSZXNlcnZlZCAqLworCXUzMglNYWNNYXhGcmFtZUxlbjsJLyogMHhBMCAtIEFYR01BQyBNYXhpbXVtIEZyYW1lIExlbmd0aCAqLworCXUzMglNYWNSZXNlcnZlZDJbMl07CS8qIDB4QTQgLSBBWEdNQUMgUmVzZXJ2ZWQgKi8KKwl1MzIJTWFjUmV2aXNpb247CS8qIDB4QUMgLSBBWEdNQUMgUmV2aXNpb24gTGV2ZWwgUmVnaXN0ZXIgKi8KKwl1MzIJTWFjUmVzZXJ2ZWQzWzRdOwkvKiAweEIwIC0gQVhHTUFDIFJlc2VydmVkICovCisJdTMyCU1hY0FtaWltQ21kOwkvKiAweEMwIC0gQVhHTUFDIEFNSUlNIENvbW1hbmQgUmVnaXN0ZXIgKi8KKwl1MzIJTWFjQW1paW1GaWVsZDsJLyogMHhDNCAtIEFYR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlciAqLworCXUzMglNYWNBbWlpbUNvbmZpZzsJLyogMHhDOCAtIEFYR01BQyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJdTMyCU1hY0FtaWltTGluazsJLyogMHhDQyAtIEFYR01BQyBBTUlJTSBMaW5rIEZhaWwgVmVjdG9yIFJlZ2lzdGVyICovCisJdTMyCU1hY0FtaWltSW5kaWNhdG9yOwkvKiAweEQwIC0gQVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RvciAqLworCXUzMglQYWRUbzB4MTAwWzExXTsJCS8qIDB4RDQgLSAweDEwMCAtIFBhZCAqLworCXUzMglYbXRDb25maWc7CS8qIDB4MTAwIC0gVHJhbnNtaXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCXUzMglSY3ZDb25maWc7CS8qIDB4MTA0IC0gUmVjZWl2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKwl1MzIJTGlua0FkZHJlc3MwTG93OwkvKiAweDEwOCAtIExpbmsgYWRkcmVzcyAwICovCisJdTMyCUxpbmtBZGRyZXNzMEhpZ2g7CS8qIDB4MTBDIC0gTGluayBhZGRyZXNzIDAgKi8KKwl1MzIJTGlua0FkZHJlc3MxTG93OwkvKiAweDExMCAtIExpbmsgYWRkcmVzcyAxICovCisJdTMyCUxpbmtBZGRyZXNzMUhpZ2g7CS8qIDB4MTE0IC0gTGluayBhZGRyZXNzIDEgKi8KKwl1MzIJTGlua0FkZHJlc3MyTG93OwkvKiAweDExOCAtIExpbmsgYWRkcmVzcyAyICovCisJdTMyCUxpbmtBZGRyZXNzMkhpZ2g7CS8qIDB4MTFDIC0gTGluayBhZGRyZXNzIDIgKi8KKwl1MzIJTGlua0FkZHJlc3MzTG93OwkvKiAweDEyMCAtIExpbmsgYWRkcmVzcyAzICovCisJdTMyCUxpbmtBZGRyZXNzM0hpZ2g7CS8qIDB4MTI0IC0gTGluayBhZGRyZXNzIDMgKi8KKwl1MzIJVG9lcGxpdHpLZXlbMTBdOwkvKiAweDEyOCAtIDB4MTUwIC0gVG9lcGxpdHoga2V5ICovCisJdTMyCVNvY2tldEtleVsxMF07CQkvKiAweDE1MCAtIDB4MTc4IC0gU29ja2V0IEtleSAqLworCXUzMglMaW5rU3RhdHVzOwkJLyogMHgxNzggLSBMaW5rIHN0YXR1cyAqLworCXUzMglDbGVhclN0YXRzOwkJLyogMHgxN0MgLSBDbGVhciBTdGF0cyAqLworCXUzMglYbXRFcnJvcnNMb3c7CQkvKiAweDE4MCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzICovCisJdTMyCVhtdEVycm9yc0hpZ2g7CQkvKiAweDE4NCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzICovCisJdTMyCVhtdEZyYW1lc0xvdzsJLyogMHgxODggLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50ICovCisJdTMyCVhtdEZyYW1lc0hpZ2g7CS8qIDB4MThDIC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudCAqLworCXUzMglYbXRCeXRlc0xvdzsJLyogMHgxOTAgLSBUcmFuc21pdCBzdGF0cyAtIGJ5dGUgY291bnQgKi8KKwl1MzIJWG10Qnl0ZXNIaWdoOwkvKiAweDE5NCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudCAqLworCXUzMglYbXRUY3BTZWdtZW50c0xvdzsJLyogMHgxOTggLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBzZWdtZW50cyAqLworCXUzMglYbXRUY3BTZWdtZW50c0hpZ2g7CS8qIDB4MTlDIC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMgKi8KKwl1MzIJWG10VGNwQnl0ZXNMb3c7CQkvKiAweDFBMCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzICovCisJdTMyCVhtdFRjcEJ5dGVzSGlnaDsJLyogMHgxQTQgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBieXRlcyAqLworCXUzMglSY3ZFcnJvcnNMb3c7CQkvKiAweDFBOCAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMgKi8KKwl1MzIJUmN2RXJyb3JzSGlnaDsJCS8qIDB4MUFDIC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycyAqLworCXUzMglSY3ZGcmFtZXNMb3c7CQkvKiAweDFCMCAtIFJlY2VpdmUgc3RhdHMgLSBmcmFtZSBjb3VudCAqLworCXUzMglSY3ZGcmFtZXNIaWdoOwkJLyogMHgxQjQgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQgKi8KKwl1MzIJUmN2Qnl0ZXNMb3c7CQkvKiAweDFCOCAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50ICovCisJdTMyCVJjdkJ5dGVzSGlnaDsJCS8qIDB4MUJDIC0gUmVjZWl2ZSBzdGF0cyAtIGJ5dGUgY291bnQgKi8KKwl1MzIJUmN2VGNwU2VnbWVudHNMb3c7CS8qIDB4MUMwIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cyAqLworCXUzMglSY3ZUY3BTZWdtZW50c0hpZ2g7CS8qIDB4MUM0IC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cyAqLworCXUzMglSY3ZUY3BCeXRlc0xvdzsJCS8qIDB4MUM4IC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBieXRlcyAqLworCXUzMglSY3ZUY3BCeXRlc0hpZ2g7CS8qIDB4MUNDIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBieXRlcyAqLworCXUzMglQYWRUbzB4MjAwWzEyXTsJCS8qIDB4MUQwIC0gMHgyMDAgLSBQYWQgKi8KKwl1MzIJU29mdHdhcmVbMTkyMF07CQkvKiAweDIwMCAtIDB4MjAwMCAtIFNvZnR3YXJlIGRlZmluZWQgKG5vdCB1c2VkKSAqLworCXUzMglNc2l4VGFibGVbMTAyNF07CS8qIDB4MjAwMCAtIDB4MzAwMCAtIE1TSVggVGFibGUgKi8KKwl1MzIJTXNpeEJpdEFycmF5WzEwMjRdOwkvKiAweDMwMDAgLSAweDQwMDAgLSBNU0lYIFBlbmRpbmcgQml0IEFycmF5ICovCiB9OwogI3ByYWdtYSBwYWNrKHBvcCkKIAotLy8gTWljcm9jb2RlIEFkZHJlc3MgRmxhZ3MKLSNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfR08JCTB4ODAwMDAwMDAJLy8gU3RhcnQgbWljcm9jb2RlCi0jZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1dSSVRFCQkweDQwMDAwMDAwCS8vIFN0b3JlIG1pY3JvY29kZQotI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19SRUFECQkweDIwMDAwMDAwCS8vIFJlYWQgbWljcm9jb2RlCi0jZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1BBUklUWQkweDEwMDAwMDAwCS8vIFBhcml0eSBlcnJvciBkZXRlY3RlZAotI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19NQVNLCQkweDAwMDAxRkZGCS8vIEFkZHJlc3MgYml0cworLyogTWljcm9jb2RlIEFkZHJlc3MgRmxhZ3MgKi8KKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfR08JCTB4ODAwMDAwMDAJLyogU3RhcnQgbWljcm9jb2RlICovCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1dSSVRFCQkweDQwMDAwMDAwCS8qIFN0b3JlIG1pY3JvY29kZSAqLworI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19SRUFECQkweDIwMDAwMDAwCS8qIFJlYWQgbWljcm9jb2RlICovCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1BBUklUWQkweDEwMDAwMDAwLyogUGFyaXR5IGVycm9yIGRldGVjdGVkICovCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX01BU0sJCTB4MDAwMDFGRkYJLyogQWRkcmVzcyBiaXRzICovCiAKLS8vIExpbmsgQWRkcmVzcyBSZWdpc3RlcnMKLSNkZWZpbmUgTElOS19BRERSRVNTX0VOQUJMRQkJCTB4ODAwMDAwMDAJLy8gQXBwbGllZCB0byBsaW5rIGFkZHJlc3MgaGlnaAorLyogTGluayBBZGRyZXNzIFJlZ2lzdGVycyAqLworLyogQXBwbGllZCB0byBsaW5rIGFkZHJlc3MgaGlnaCAqLworI2RlZmluZSBMSU5LX0FERFJFU1NfRU5BQkxFCTB4ODAwMDAwMDAKIAotLy8gTWljcm9zb2Z0IHJlZ2lzdGVyIHNwYWNlIHNpemUKLSNkZWZpbmUgU1hHX1VDT0RFUkVHX01FTVNJWkUJMHg0MDAwMAkJLy8gMjU2aworLyogTWljcm9zb2Z0IHJlZ2lzdGVyIHNwYWNlIHNpemUgKi8KKyNkZWZpbmUgU1hHX1VDT0RFUkVHX01FTVNJWkUJMHg0MDAwMAkJLyogMjU2ayAqLwogCi0vLyBTYWhhcmEgbWljcm9jb2RlIHJlZ2lzdGVyIGFkZHJlc3MgZm9ybWF0LiAgVGhlIGNvbW1hbmQgY29kZSwKLS8vIGV4dGVuZGVkIGNvbW1hbmQgY29kZSwgYW5kIGFzc29jaWF0ZWQgcHJvY2Vzc29yIGFyZSBlbmNvZGVkIGluCi0vLyB0aGUgYWRkcmVzcyBiaXRzIGFzIGZvbGxvd3MKLSNkZWZpbmUgU1hHX0FERFJFU1NfQ09ERV9TSElGVAkJMgkJCS8vIEJhc2UgY29tbWFuZCBjb2RlCisvKgorICogU2FoYXJhIG1pY3JvY29kZSByZWdpc3RlciBhZGRyZXNzIGZvcm1hdC4gIFRoZSBjb21tYW5kIGNvZGUsCisgKiBleHRlbmRlZCBjb21tYW5kIGNvZGUsIGFuZCBhc3NvY2lhdGVkIHByb2Nlc3NvciBhcmUgZW5jb2RlZCBpbgorICogdGhlIGFkZHJlc3MgYml0cyBhcyBmb2xsb3dzCisgKi8KKyNkZWZpbmUgU1hHX0FERFJFU1NfQ09ERV9TSElGVAkJMgkJLyogQmFzZSBjb21tYW5kIGNvZGUgKi8KICNkZWZpbmUgU1hHX0FERFJFU1NfQ09ERV9NQVNLCQkweDAwMDAwMDNDCi0jZGVmaW5lIFNYR19BRERSRVNTX0VYQ09ERV9TSElGVAk2CQkJLy8gRXh0ZW5kZWQgKG9yIHN1YikgY29tbWFuZCBjb2RlCisvKiBFeHRlbmRlZCAob3Igc3ViKSBjb21tYW5kIGNvZGUgKi8KKyNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX1NISUZUCTYKICNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX01BU0sJCTB4MDAwMDFGQzAKLSNkZWZpbmUJU1hHX0FERFJFU1NfQ1BVSURfU0hJRlQJCTEzCQkJLy8gQ1BVCisjZGVmaW5lCVNYR19BRERSRVNTX0NQVUlEX1NISUZUCQkxMwkJLyogQ1BVICovCiAjZGVmaW5lIFNYR19BRERSRVNTX0NQVUlEX01BU0sJCTB4MDAwM0UwMDAKLSNkZWZpbmUgU1hHX1JFR0lTVEVSX1NJWkVfUEVSX0NQVQkweDAwMDAyMDAwCS8vIFVzZWQgdG8gc2FuaXR5IGNoZWNrIFVDT0RFX1JFR1Mgc3RydWN0dXJlCisvKiBVc2VkIHRvIHNhbml0eSBjaGVjayBVQ09ERV9SRUdTIHN0cnVjdHVyZSAqLworI2RlZmluZSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVCTB4MDAwMDIwMDAKIAotLy8gU2FoYXJhIHJlY2VpdmUgc2VxdWVuY2VyIHN0YXR1cyB2YWx1ZXMKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQVRUTgkJCTB4ODAwMDAwMDAJLy8gQXR0ZW50aW9uCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9NQVNLCQkweDNGMDAwMDAwCS8vIFRyYW5zcG9ydCBtYXNrCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9FUlJPUgkJMHgyMDAwMDAwMAkvLyBUcmFuc3BvcnQgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0JCTB4MjMwMDAwMDAJLy8gVHJhbnNwb3J0IGNrc3VtIGVycm9yCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVwkJMHgyMjAwMDAwMAkvLyBUcmFuc3BvcnQgdW5kZXJmbG93Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4JCTB4MjAwMDAwMDAJLy8gVHJhbnNwb3J0IGhlYWRlciBsZW5ndGgKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0ZMQUdTCQkweDEwMDAwMDAwCS8vIFRyYW5zcG9ydCBmbGFncyBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfT1BUUwkJMHgwODAwMDAwMAkvLyBUcmFuc3BvcnQgb3B0aW9ucyBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfU0VTU19NQVNLCTB4MDcwMDAwMDAJLy8gVHJhbnNwb3J0IEREUAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRERQCQkweDA2MDAwMDAwCS8vIFRyYW5zcG9ydCBERFAKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX2lTQ1NJCQkweDA1MDAwMDAwCS8vIFRyYW5zcG9ydCBpU0NTSQotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTkZTCQkweDA0MDAwMDAwCS8vIFRyYW5zcG9ydCBORlMKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0ZUUAkJMHgwMzAwMDAwMAkvLyBUcmFuc3BvcnQgRlRQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IVFRQCQkweDAyMDAwMDAwCS8vIFRyYW5zcG9ydCBIVFRQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TTUIJCTB4MDEwMDAwMDAJLy8gVHJhbnNwb3J0IFNNQgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01BU0sJCTB4MDBGRjAwMDAJLy8gTmV0d29yayBtYXNrCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IJCTB4MDA4MDAwMDAJLy8gTmV0d29yayBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU0JCTB4MDA4MzAwMDAJLy8gTmV0d29yayBja3N1bSBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XCQkweDAwODIwMDAwCS8vIE5ldHdvcmsgdW5kZXJmbG93IGVycm9yCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfSERSTEVOCQkweDAwODAwMDAwCS8vIE5ldHdvcmsgaGVhZGVyIGxlbmd0aAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09GTE9XCQkweDAwNDAwMDAwCS8vIE5ldHdvcmsgb3ZlcmZsb3cgZGV0ZWN0ZWQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19NQ0FTVAkJMHgwMDIwMDAwMAkvLyBOZXR3b3JrIG11bHRpY2FzdCBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09QVElPTlMJCTB4MDAxMDAwMDAJLy8gTmV0d29yayBvcHRpb25zIGRldGVjdGVkCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZGU0VUCQkweDAwMDgwMDAwCS8vIE5ldHdvcmsgb2Zmc2V0IGRldGVjdGVkCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRlJBR01FTlQJCTB4MDAwNDAwMDAJLy8gTmV0d29yayBmcmFnbWVudCBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1RSQU5TX01BU0sJMHgwMDAzMDAwMAkvLyBOZXR3b3JrIHRyYW5zcG9ydCB0eXBlIG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19VRFAJCTB4MDAwMjAwMDAJLy8gVURQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVENQCQkweDAwMDEwMDAwCS8vIFRDUAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19JUE9OTFkJCQkweDAwMDA4MDAwCS8vIElQLW9ubHkgbm90IFRDUAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19QS1RfUFJJCQkJMHgwMDAwNjAwMAkvLyBSZWNlaXZlIHByaW9yaXR5Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUklfU0hGVAkJCTEzCS8vIFJlY2VpdmUgcHJpb3JpdHkgc2hpZnQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEFSSVRZCQkJMHgwMDAwMTAwMAkvLyBNQUMgUmVjZWl2ZSBSQU0gcGFyaXR5IGVycm9yCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUFTSwkJMHgwMDAwMEYwMAkvLyBMaW5rIGFkZHJlc3MgZGV0ZWN0aW9uIG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19ECQkweDAwMDAwQjAwCS8vIExpbmsgYWRkcmVzcyBECi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQwkJMHgwMDAwMEEwMAkvLyBMaW5rIGFkZHJlc3MgQwotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0IJCTB4MDAwMDA5MDAJLy8gTGluayBhZGRyZXNzIEIKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19BCQkweDAwMDAwODAwCS8vIExpbmsgYWRkcmVzcyBBCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQkNBU1QJCTB4MDAwMDAzMDAJLy8gTGluayBhZGRyZXNzIGJyb2FkY2FzdAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX01DQVNUCQkweDAwMDAwMjAwCS8vIExpbmsgYWRkcmVzcyBtdWx0aWNhc3QKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19DTUNBU1QJCTB4MDAwMDAxMDAJLy8gTGluayBjb250cm9sIG11bHRpY2FzdAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX01BU0sJCTB4MDAwMDAwRkYJLy8gTGluayBzdGF0dXMgbWFzawotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VSUk9SCQkweDAwMDAwMDgwCS8vIExpbmsgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkweDAwMDAwMEZGCS8vIExpbmsgc3RhdHVzIG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFkJCTB4MDAwMDAwODcJLy8gUmN2TWFjUSBwYXJpdHkgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19FQVJMWQkJMHgwMDAwMDA4NgkvLyBEYXRhIGVhcmx5Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQlVGT0ZMT1cJCTB4MDAwMDAwODUJLy8gQnVmZmVyIG92ZXJmbG93Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERQkJMHgwMDAwMDA4NAkvLyBMaW5rIGNvZGUgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFCQkweDAwMDAwMDgzCS8vIERyaWJibGUgbmliYmxlCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDCQkJMHgwMDAwMDA4MgkvLyBDUkMgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVwkJMHgwMDAwMDA4MQkvLyBMaW5rIG92ZXJmbG93Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVUZMT1cJCTB4MDAwMDAwODAJLy8gTGluayB1bmRlcmZsb3cKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS184MDIzCQkweDAwMDAwMDIwCS8vIDgwMi4zCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfU05BUAkJMHgwMDAwMDAxMAkvLyBTbmFwCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVkxBTgkJMHgwMDAwMDAwOAkvLyBWTEFOCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVFlQRV9NQVNLCQkweDAwMDAwMDA3CS8vIE5ldHdvcmsgdHlwZSBtYXNrCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09OVFJPTAkJMHgwMDAwMDAwMwkvLyBDb250cm9sIHBhY2tldAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjYJCTB4MDAwMDAwMDIJLy8gSVB2NiBwYWNrZXQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19JUFY0CQkweDAwMDAwMDAxCS8vIElQdjQgcGFja2V0CisvKiBTYWhhcmEgcmVjZWl2ZSBzZXF1ZW5jZXIgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BVFROCQkJMHg4MDAwMDAwMCAvKiBBdHRlbnRpb24gKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX01BU0sJCTB4M0YwMDAwMDAgLyogVHJhbnNwb3J0IG1hc2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SCQkweDIwMDAwMDAwIC8qIFRyYW5zcG9ydCBlcnJvciAqLworLyogVHJhbnNwb3J0IGNrc3VtIGVycm9yICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9DU1VNCQkweDIzMDAwMDAwCisvKiBUcmFuc3BvcnQgdW5kZXJmbG93ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVwkJMHgyMjAwMDAwMAorIC8qIFRyYW5zcG9ydCBoZWFkZXIgbGVuZ3RoICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4JCTB4MjAwMDAwMDAKKy8qIFRyYW5zcG9ydCBmbGFncyBkZXRlY3RlZCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRkxBR1MJCTB4MTAwMDAwMDAKKyAvKiBUcmFuc3BvcnQgb3B0aW9ucyBkZXRlY3RlZCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfT1BUUwkJMHgwODAwMDAwMAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfU0VTU19NQVNLCTB4MDcwMDAwMDAgLyogVHJhbnNwb3J0IEREUCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRERQCQkweDA2MDAwMDAwIC8qIFRyYW5zcG9ydCBERFAgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX2lTQ1NJCQkweDA1MDAwMDAwIC8qIFRyYW5zcG9ydCBpU0NTSSAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTkZTCQkweDA0MDAwMDAwIC8qIFRyYW5zcG9ydCBORlMgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0ZUUAkJMHgwMzAwMDAwMCAvKiBUcmFuc3BvcnQgRlRQICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IVFRQCQkweDAyMDAwMDAwIC8qIFRyYW5zcG9ydCBIVFRQICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TTUIJCTB4MDEwMDAwMDAgLyogVHJhbnNwb3J0IFNNQiAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01BU0sJCTB4MDBGRjAwMDAgLyogTmV0d29yayBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IJCTB4MDA4MDAwMDAgLyogTmV0d29yayBlcnJvciAqLworLyogTmV0d29yayBja3N1bSBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU0JCTB4MDA4MzAwMDAKKy8qIE5ldHdvcmsgdW5kZXJmbG93IGVycm9yICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1cJCTB4MDA4MjAwMDAKKyAvKiBOZXR3b3JrIGhlYWRlciBsZW5ndGggKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU4JCTB4MDA4MDAwMDAKKyAvKiBOZXR3b3JrIG92ZXJmbG93IGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZMT1cJCTB4MDA0MDAwMDAKKy8qIE5ldHdvcmsgbXVsdGljYXN0IGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUNBU1QJCTB4MDAyMDAwMDAKKy8qIE5ldHdvcmsgb3B0aW9ucyBkZXRlY3RlZCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09QVElPTlMJCTB4MDAxMDAwMDAKKy8qIE5ldHdvcmsgb2Zmc2V0IGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZGU0VUCQkweDAwMDgwMDAwCisvKiBOZXR3b3JrIGZyYWdtZW50IGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRlJBR01FTlQJCTB4MDAwNDAwMDAKKy8qIE5ldHdvcmsgdHJhbnNwb3J0IHR5cGUgbWFzayAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1RSQU5TX01BU0sJMHgwMDAzMDAwMAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VEUAkJMHgwMDAyMDAwMCAvKiBVRFAgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UQ1AJCTB4MDAwMTAwMDAgLyogVENQICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0lQT05MWQkJCTB4MDAwMDgwMDAgLyogSVAtb25seSBub3QgVENQICovCisvKiBSZWNlaXZlIHByaW9yaXR5ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUkkJCQkweDAwMDA2MDAwCisvKiBSZWNlaXZlIHByaW9yaXR5IHNoaWZ0ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUklfU0hGVAkJMTMKKy8qIE1BQyBSZWNlaXZlIFJBTSBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEFSSVRZCQkJMHgwMDAwMTAwMAorLyogTGluayBhZGRyZXNzIGRldGVjdGlvbiBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUFTSwkJMHgwMDAwMEYwMAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTYWhhcmEgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lCVJDVl9DT05GSUdfUkVTRVQJCTB4ODAwMDAwMDAJLy8gUmN2Q29uZmlnIHJlZ2lzdGVyIHJlc2V0Ci0jZGVmaW5lCVJDVl9DT05GSUdfRU5BQkxFCQkweDQwMDAwMDAwCS8vIEVuYWJsZSB0aGUgcmVjZWl2ZSBsb2dpYwotI2RlZmluZQlSQ1ZfQ09ORklHX0VOUEFSU0UJCTB4MjAwMDAwMDAJLy8gRW5hYmxlIHRoZSByZWNlaXZlIHBhcnNlcgotI2RlZmluZQlSQ1ZfQ09ORklHX1NPQ0tFVAkJMHgxMDAwMDAwMAkvLyBFbmFibGUgdGhlIHNvY2tldCBkZXRlY3RvcgotI2RlZmluZQlSQ1ZfQ09ORklHX1JDVkJBRAkJMHgwODAwMDAwMAkvLyBSZWNlaXZlIGFsbCBiYWQgZnJhbWVzCi0jZGVmaW5lCVJDVl9DT05GSUdfQ09OVFJPTAkJMHgwNDAwMDAwMAkvLyBSZWNlaXZlIGFsbCBjb250cm9sIGZyYW1lcwotI2RlZmluZQlSQ1ZfQ09ORklHX1JDVlBBVVNFCQkweDAyMDAwMDAwCS8vIEVuYWJsZSBwYXVzZSB0cmFuc21pdCB3aGVuIGF0dG4KLSNkZWZpbmUJUkNWX0NPTkZJR19UWklQVjYJCTB4MDEwMDAwMDAJLy8gSW5jbHVkZSBUQ1AgcG9ydCB3LyBJUHY2IHRvZXBsaXR6Ci0jZGVmaW5lCVJDVl9DT05GSUdfVFpJUFY0CQkweDAwODAwMDAwCS8vIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NCB0b2VwbGl0egotI2RlZmluZQlSQ1ZfQ09ORklHX0ZMVVNICQkweDAwNDAwMDAwCS8vIEZsdXNoIGJ1ZmZlcnMKLSNkZWZpbmUJUkNWX0NPTkZJR19QUklPUklUWV9NQVNLCTB4MDAzMDAwMDAJLy8gUHJpb3JpdHkgbGV2ZWwKLSNkZWZpbmUJUkNWX0NPTkZJR19IQVNIX01BU0sJCTB4MDAwMzAwMDAJLy8gSGFzaCBkZXB0aAotI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfOAkJMHgwMDAwMDAwMAkvLyBIYXNoIGRlcHRoIDgKLSNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzE2CQkweDAwMDEwMDAwCS8vIEhhc2ggZGVwdGggMTYKLSNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzQJCTB4MDAwMjAwMDAJLy8gSGFzaCBkZXB0aCA0Ci0jZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8yCQkweDAwMDMwMDAwCS8vIEhhc2ggZGVwdGggMgotI2RlZmluZQlSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLCQkweDAwMDBGRkYwCS8vIEJ1ZmZlciBsZW5ndGggYml0cyAxNTo0LiBpZSBtdWx0aXBsZSBvZiAxNi4KLSNkZWZpbmUgUkNWX0NPTkZJR19TS1RfRElTCQkweDAwMDAwMDA4CS8vIERpc2FibGUgc29ja2V0IGRldGVjdGlvbiBvbiBhdHRuCi0vLyBNYWNybyB0byBkZXRlcm1pbmUgUkNWX0NPTkZJR19CVUZMRU4gYmFzZWQgb24gbWF4aW11bSBmcmFtZSBzaXplLgotLy8gV2UgYWRkIDE4IGJ5dGVzIGZvciBTYWhhcmEgcmVjZWl2ZSBzdGF0dXMgYW5kIHBhZGRpbmcsIHBsdXMgNCBieXRlcyBmb3IgQ1JDLAotLy8gYW5kIHJvdW5kIHVwIHRvIG5lYXJlc3QgMTYgYnl0ZSBib3VuZGFyeQotI2RlZmluZSBSQ1ZfQ09ORklHX0JVRlNJWkUoX01heEZyYW1lKSAoKCgoX01heEZyYW1lKSArIDIyKSArIDE1KSAmIFJDVl9DT05GSUdfQlVGTEVOX01BU0spCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfRAkJMHgwMDAwMEIwMCAvKiBMaW5rIGFkZHJlc3MgRCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0MJCTB4MDAwMDBBMDAgLyogTGluayBhZGRyZXNzIEMgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19CCQkweDAwMDAwOTAwIC8qIExpbmsgYWRkcmVzcyBCICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQQkJMHgwMDAwMDgwMCAvKiBMaW5rIGFkZHJlc3MgQSAqLworLyogTGluayBhZGRyZXNzIGJyb2FkY2FzdCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0JDQVNUCQkweDAwMDAwMzAwCisgLyogTGluayBhZGRyZXNzIG11bHRpY2FzdCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX01DQVNUCQkweDAwMDAwMjAwCisvKiBMaW5rIGNvbnRyb2wgbXVsdGljYXN0ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQ01DQVNUCQkweDAwMDAwMTAwCisvKiBMaW5rIHN0YXR1cyBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VSUk9SCQkweDAwMDAwMDgwIC8qIExpbmsgZXJyb3IgKi8KKy8qIExpbmsgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkweDAwMDAwMEZGCisvKiBSY3ZNYWNRIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1BBUklUWQkJMHgwMDAwMDA4NworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZCQkweDAwMDAwMDg2IC8qIERhdGEgZWFybHkgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19CVUZPRkxPVwkJMHgwMDAwMDA4NSAvKiBCdWZmZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DT0RFCQkweDAwMDAwMDg0IC8qIExpbmsgY29kZSBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEUJCTB4MDAwMDAwODMgLyogRHJpYmJsZSBuaWJibGUgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DUkMJCQkweDAwMDAwMDgyIC8qIENSQyBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX09GTE9XCQkweDAwMDAwMDgxIC8qIExpbmsgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVwkJMHgwMDAwMDA4MCAvKiBMaW5rIHVuZGVyZmxvdyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LXzgwMjMJCTB4MDAwMDAwMjAgLyogODAyLjMgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19TTkFQCQkweDAwMDAwMDEwIC8qIFNuYXAgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19WTEFOCQkweDAwMDAwMDA4IC8qIFZMQU4gKi8KKy8qIE5ldHdvcmsgdHlwZSBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVFlQRV9NQVNLCQkweDAwMDAwMDA3CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09OVFJPTAkJMHgwMDAwMDAwMyAvKiBDb250cm9sIHBhY2tldCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjYJCTB4MDAwMDAwMDIgLyogSVB2NiBwYWNrZXQgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19JUFY0CQkweDAwMDAwMDAxIC8qIElQdjQgcGFja2V0ICovCiAKLSNkZWZpbmUJWE1UX0NPTkZJR19SRVNFVAkJMHg4MDAwMDAwMAkvLyBYbXRDb25maWcgcmVnaXN0ZXIgcmVzZXQKLSNkZWZpbmUJWE1UX0NPTkZJR19FTkFCTEUJCTB4NDAwMDAwMDAJLy8gRW5hYmxlIHRyYW5zbWl0IGxvZ2ljCi0jZGVmaW5lCVhNVF9DT05GSUdfTUFDX1BBUklUWQkJMHgyMDAwMDAwMAkvLyBJbmhpYml0IE1BQyBSQU0gcGFyaXR5IGVycm9yCi0jZGVmaW5lCVhNVF9DT05GSUdfQlVGX1BBUklUWQkJMHgxMDAwMDAwMAkvLyBJbmhpYml0IEQyRiBidWZmZXIgcGFyaXR5IGVycm9yCi0jZGVmaW5lCVhNVF9DT05GSUdfTUVNX1BBUklUWQkJMHgwODAwMDAwMAkvLyBJbmhpYml0IDFUIFNSQU0gcGFyaXR5IGVycm9yCi0jZGVmaW5lCVhNVF9DT05GSUdfSU5WRVJUX1BBUklUWQkweDA0MDAwMDAwCS8vIEludmVydCBNQUMgUkFNIHBhcml0eQotI2RlZmluZQlYTVRfQ09ORklHX0lOSVRJQUxfSVBJRAkJMHgwMDAwRkZGRgkvLyBJbml0aWFsIElQSUQKKy8qIFNhaGFyYSByZWNlaXZlIGFuZCB0cmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLworLyogUmN2Q29uZmlnIHJlZ2lzdGVyIHJlc2V0ICovCisjZGVmaW5lCVJDVl9DT05GSUdfUkVTRVQJCTB4ODAwMDAwMDAKKy8qIEVuYWJsZSB0aGUgcmVjZWl2ZSBsb2dpYyAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0VOQUJMRQkJMHg0MDAwMDAwMAorLyogRW5hYmxlIHRoZSByZWNlaXZlIHBhcnNlciAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0VOUEFSU0UJCTB4MjAwMDAwMDAKKy8qIEVuYWJsZSB0aGUgc29ja2V0IGRldGVjdG9yICovCisjZGVmaW5lCVJDVl9DT05GSUdfU09DS0VUCQkweDEwMDAwMDAwCisjZGVmaW5lCVJDVl9DT05GSUdfUkNWQkFECQkweDA4MDAwMDAwIC8qIFJlY2VpdmUgYWxsIGJhZCBmcmFtZXMgKi8KKy8qIFJlY2VpdmUgYWxsIGNvbnRyb2wgZnJhbWVzICovCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OVFJPTAkJMHgwNDAwMDAwMAorLyogRW5hYmxlIHBhdXNlIHRyYW5zbWl0IHdoZW4gYXR0biAqLworI2RlZmluZQlSQ1ZfQ09ORklHX1JDVlBBVVNFCQkweDAyMDAwMDAwCisvKiBJbmNsdWRlIFRDUCBwb3J0IHcvIElQdjYgdG9lcGxpdHogKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19UWklQVjYJCTB4MDEwMDAwMDAKKy8qIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NCB0b2VwbGl0eiAqLworI2RlZmluZQlSQ1ZfQ09ORklHX1RaSVBWNAkJMHgwMDgwMDAwMAorI2RlZmluZQlSQ1ZfQ09ORklHX0ZMVVNICQkweDAwNDAwMDAwIC8qIEZsdXNoIGJ1ZmZlcnMgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19QUklPUklUWV9NQVNLCTB4MDAzMDAwMDAgLyogUHJpb3JpdHkgbGV2ZWwgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19DT05OX01BU0sJCTB4MDAwQzAwMDAgLyogTnVtYmVyIG9mIGNvbm5lY3Rpb25zICovCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OTl80SwkJMHgwMDAwMDAwMCAvKiA0ayBjb25uZWN0aW9ucyAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0NPTk5fMksJCTB4MDAwNDAwMDAgLyogMmsgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19DT05OXzFLCQkweDAwMDgwMDAwIC8qIDFrIGNvbm5lY3Rpb25zICovCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OTl81MTIJCTB4MDAwQzAwMDAgLyogNTEyIGNvbm5lY3Rpb25zICovCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF9NQVNLCQkweDAwMDMwMDAwIC8qIEhhc2ggZGVwdGggKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzgJCTB4MDAwMDAwMDAgLyogSGFzaCBkZXB0aCA4ICovCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8xNgkJMHgwMDAxMDAwMCAvKiBIYXNoIGRlcHRoIDE2ICovCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF80CQkweDAwMDIwMDAwIC8qIEhhc2ggZGVwdGggNCAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfMgkJMHgwMDAzMDAwMCAvKiBIYXNoIGRlcHRoIDIgKi8KKy8qIEJ1ZmZlciBsZW5ndGggYml0cyAxNTo0LiBpZSBtdWx0aXBsZSBvZiAxNi4gKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19CVUZMRU5fTUFTSwkJMHgwMDAwRkZFMAorLyogRGlzYWJsZSBzb2NrZXQgZGV0ZWN0aW9uIG9uIGF0dG4gKi8KKyNkZWZpbmUgUkNWX0NPTkZJR19TS1RfRElTCQkweDAwMDAwMDA4CisjZGVmaW5lIFJDVl9DT05GSUdfSElQUklDVEwgICAgIDB4MDAwMDAwMDIgLyogQ3RybCBmcmFtZXMgb24gaGlnaC1wcmlvaXJ0eSBSY3ZRICovCisjZGVmaW5lIFJDVl9DT05GSUdfTkVXU1RBVFVTRk1UIDB4MDAwMDAwMDEgLyogVXNlIFJldkIgc3RhdHVzIGZvcm1hdCAqLworLyoKKyAqIE1hY3JvIHRvIGRldGVybWluZSBSQ1ZfQ09ORklHX0JVRkxFTiBiYXNlZCBvbiBtYXhpbXVtIGZyYW1lIHNpemUuCisgKiBXZSBhZGQgMTggYnl0ZXMgZm9yIFNhaGFyYSByZWNlaXZlIHN0YXR1cyBhbmQgcGFkZGluZywgcGx1cyA0IGJ5dGVzIGZvciBDUkMsCisgKiBhbmQgcm91bmQgdXAgdG8gbmVhcmVzdCAzMiBieXRlIGJvdW5kYXJ5CisgKi8KKyNkZWZpbmUgUkNWX0NPTkZJR19CVUZTSVpFKF9NYXhGcmFtZSkJCQkJCVwKKwkJKCgoKF9NYXhGcmFtZSkgKyAyMikgKyAzMSkgJiBSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLKQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBBLVhHTUFDIFJlZ2lzdGVycyAtIE9jY3VweSAweDgwIC0gMHhENCBvZiB0aGUgU1hHX0hXX1JFR1MKKy8qIFhtdENvbmZpZyByZWdpc3RlciByZXNldCAqLworI2RlZmluZQlYTVRfQ09ORklHX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lCVhNVF9DT05GSUdfRU5BQkxFCQkweDQwMDAwMDAwIC8qIEVuYWJsZSB0cmFuc21pdCBsb2dpYyAqLworLyogSW5oaWJpdCBNQUMgUkFNIHBhcml0eSBlcnJvciAqLworI2RlZmluZQlYTVRfQ09ORklHX01BQ19QQVJJVFkJCTB4MjAwMDAwMDAKKy8qIEluaGliaXQgRDJGIGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUJWE1UX0NPTkZJR19CVUZfUEFSSVRZCQkweDEwMDAwMDAwCisvKiBJbmhpYml0IDFUIFNSQU0gcGFyaXR5IGVycm9yICovCisjZGVmaW5lCVhNVF9DT05GSUdfTUVNX1BBUklUWQkJMHgwODAwMDAwMAorI2RlZmluZQlYTVRfQ09ORklHX0lOVkVSVF9QQVJJVFkJMHgwNDAwMDAwMCAvKiBJbnZlcnQgTUFDIFJBTSBwYXJpdHkgKi8KKyNkZWZpbmUJWE1UX0NPTkZJR19JTklUSUFMX0lQSUQJCTB4MDAwMEZGRkYgLyogSW5pdGlhbCBJUElEICovCisKKy8qCisgKiBBLVhHTUFDIFJlZ2lzdGVycyAtIE9jY3VweSAweDgwIC0gMHhENCBvZiB0aGUgc3RydWN0IHN4Z19od19yZWdzCiAgKgogICogRnVsbCByZWdpc3RlciBkZXNjcmlwdGlvbnMgY2FuIGJlIGZvdW5kIGluIGF4Z21hYy5wZGYKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQJCTB4ODAwMDAwMDAJCS8vIFN1YiBtb2R1bGUgcmVzZXQKLSNkZWZpbmUgQVhHTUFDX0NGRzBfUkNOVFJMX1JFU0VUCTB4MDA0MDAwMDAJCS8vIFJlY2VpdmUgY29udHJvbCByZXNldAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9SRlVOQ19SRVNFVAkJMHgwMDIwMDAwMAkJLy8gUmVjZWl2ZSBmdW5jdGlvbiByZXNldAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9UQ05UUkxfUkVTRVQJMHgwMDA0MDAwMAkJLy8gVHJhbnNtaXQgY29udHJvbCByZXNldAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9URlVOQ19SRVNFVAkJMHgwMDAyMDAwMAkJLy8gVHJhbnNtaXQgZnVuY3Rpb24gcmVzZXQKLSNkZWZpbmUgQVhHTUFDX0NGRzBfTUlJX1JFU0VUCQkweDAwMDEwMDAwCQkvLyBNSUkgTWFuYWdlbWVudCByZXNldAorICovCisvKiBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQJCTB4ODAwMDAwMDAgLyogU3ViIG1vZHVsZSByZXNldCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMF9SQ05UUkxfUkVTRVQJMHgwMDQwMDAwMCAvKiBSZWNlaXZlIGNvbnRyb2wgcmVzZXQgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzBfUkZVTkNfUkVTRVQJCTB4MDAyMDAwMDAgLyogUmVjZWl2ZSBmdW5jdGlvbiByZXNldCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMF9UQ05UUkxfUkVTRVQJMHgwMDA0MDAwMCAvKiBUcmFuc21pdCBjb250cm9sIHJlc2V0ICovCisjZGVmaW5lIEFYR01BQ19DRkcwX1RGVU5DX1JFU0VUCQkweDAwMDIwMDAwIC8qIFRyYW5zbWl0IGZ1bmN0aW9uIHJlc2V0ICovCisjZGVmaW5lIEFYR01BQ19DRkcwX01JSV9SRVNFVAkJMHgwMDAxMDAwMCAvKiBNSUkgTWFuYWdlbWVudCByZXNldCAqLwogCi0vLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEFsbG93IHRoZSBzZW5kaW5nIG9mIFBhdXNlIGZyYW1lcwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfRU4JCTB4NDAwMDAwMDAJCS8vIEVuYWJsZSB0cmFuc21pdAotI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UJCTB4MjAwMDAwMDAJCS8vIEFsbG93IHRoZSBkZXRlY3Rpb24gb2YgUGF1c2UgZnJhbWVzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9FTgkJMHgxMDAwMDAwMAkJLy8gRW5hYmxlIHJlY2VpdmUKLSNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX1NUQVRFCQkweDA0MDAwMDAwCQkvLyBDdXJyZW50IHRyYW5zbWl0IHN0YXRlIC0gUkVBRCBPTkxZCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVEFURQkJMHgwMTAwMDAwMAkJLy8gQ3VycmVudCByZWNlaXZlIHN0YXRlIC0gUkVBRCBPTkxZCi0jZGVmaW5lIEFYR01BQ19DRkcxX1hPRkZfU0hPUlQJCTB4MDAwMDEwMDAJCS8vIE9ubHkgcGF1c2UgZm9yIDY0IHNsb3Qgb24gWE9GRgotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMQkJMHgwMDAwMDQwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDEgNC1ieXRlIHdvcmQKLSNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzIJCTB4MDAwMDA4MDAJCS8vIERlbGF5IHRyYW5zbWl0IEZDUyAyIDQtYnl0ZSB3b3JkcwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMwkJMHgwMDAwMEMwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDMgNC1ieXRlIHdvcmRzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MxCQkweDAwMDAwMTAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAxIDQtYnl0ZSB3b3JkCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MyCQkweDAwMDAwMjAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAyIDQtYnl0ZSB3b3JkcwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRkNTMwkJMHgwMDAwMDMwMAkJLy8gRGVsYXkgcmVjZWl2ZSBGQ1MgMyA0LWJ5dGUgd29yZHMKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUEtUX09WRVJSSURFCTB4MDAwMDAwODAJCS8vIFBlci1wYWNrZXQgb3ZlcnJpZGUgZW5hYmxlCi0jZGVmaW5lIEFYR01BQ19DRkcxX1NXQVAJCTB4MDAwMDAwNDAJCS8vIEJ5dGUgc3dhcCBlbmFibGUKLSNkZWZpbmUgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUCTB4MDAwMDAwMjAJCS8vIEFTU0VSVCBzcmRycGZybSBvbiBzaG9ydCBmcmFtZSAoPDY0KQotI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfU1RSSUNUCQkweDAwMDAwMDEwCQkvLyBSQ1Ygb25seSA4MDIuM0FFIHdoZW4gQ0xFQVIKLSNkZWZpbmUgQVhHTUFDX0NGRzFfQ0hFQ0tfTEVOCQkweDAwMDAwMDA4CQkvLyBWZXJpZnkgZnJhbWUgbGVuZ3RoCi0jZGVmaW5lIEFYR01BQ19DRkcxX0dFTl9GQ1MJCTB4MDAwMDAwMDQJCS8vIEdlbmVyYXRlIEZDUwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfTUFTSwkJMHgwMDAwMDAwMwkJLy8gTWFzayBmb3IgcGFkIGJpdHMKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY0CQkweDAwMDAwMDAxCQkvLyBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1BBRF9WTEFOCQkweDAwMDAwMDAyCQkvLyBEZXRlY3QgVkxBTiBhbmQgcGFkIHRvIDY4IGJ5dGVzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1BBRF82OAkJMHgwMDAwMDAwMwkJLy8gUGFkIHRvIDY4IGJ5dGVzCisvKiBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworLyogQWxsb3cgdGhlIHNlbmRpbmcgb2YgUGF1c2UgZnJhbWVzICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9QQVVTRQkJMHg4MDAwMDAwMAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfRU4JCTB4NDAwMDAwMDAgLyogRW5hYmxlIHRyYW5zbWl0ICovCisvKiBBbGxvdyB0aGUgZGV0ZWN0aW9uIG9mIFBhdXNlIGZyYW1lcyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UJCTB4MjAwMDAwMDAKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0VOCQkweDEwMDAwMDAwIC8qIEVuYWJsZSByZWNlaXZlICovCisvKiBDdXJyZW50IHRyYW5zbWl0IHN0YXRlIC0gUkVBRCBPTkxZICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9TVEFURQkJMHgwNDAwMDAwMAorLyogQ3VycmVudCByZWNlaXZlIHN0YXRlIC0gUkVBRCBPTkxZICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVEFURQkJMHgwMTAwMDAwMAorLyogT25seSBwYXVzZSBmb3IgNjQgc2xvdCBvbiBYT0ZGICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hPRkZfU0hPUlQJCTB4MDAwMDEwMDAKKy8qIERlbGF5IHRyYW5zbWl0IEZDUyAxIDQtYnl0ZSB3b3JkICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MxCQkweDAwMDAwNDAwCisvKiBEZWxheSB0cmFuc21pdCBGQ1MgMiA0LWJ5dGUgd29yZHMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzIJCTB4MDAwMDA4MDAKKy8qIERlbGF5IHRyYW5zbWl0IEZDUyAzIDQtYnl0ZSB3b3JkcyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMwkJMHgwMDAwMEMwMAorLyogRGVsYXkgcmVjZWl2ZSBGQ1MgMSA0LWJ5dGUgd29yZCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRkNTMQkJMHgwMDAwMDEwMAorLyogRGVsYXkgcmVjZWl2ZSBGQ1MgMiA0LWJ5dGUgd29yZHMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzIJCTB4MDAwMDAyMDAKKy8qIERlbGF5IHJlY2VpdmUgRkNTIDMgNC1ieXRlIHdvcmRzICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MzCQkweDAwMDAwMzAwCisvKiBQZXItcGFja2V0IG92ZXJyaWRlIGVuYWJsZSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QS1RfT1ZFUlJJREUJMHgwMDAwMDA4MAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9TV0FQCQkweDAwMDAwMDQwIC8qIEJ5dGUgc3dhcCBlbmFibGUgKi8KKy8qIEFTU0VSVCBzcmRycGZybSBvbiBzaG9ydCBmcmFtZSAoPDY0KSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9TSE9SVF9BU1NFUlQJMHgwMDAwMDAyMAorLyogUkNWIG9ubHkgODAyLjNBRSB3aGVuIENMRUFSICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVFJJQ1QJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQVhHTUFDX0NGRzFfQ0hFQ0tfTEVOCQkweDAwMDAwMDA4IC8qIFZlcmlmeSBmcmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfR0VOX0ZDUwkJMHgwMDAwMDAwNCAvKiBHZW5lcmF0ZSBGQ1MgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX01BU0sJCTB4MDAwMDAwMDMgLyogTWFzayBmb3IgcGFkIGJpdHMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY0CQkweDAwMDAwMDAxIC8qIFBhZCBmcmFtZXMgdG8gNjQgYnl0ZXMgKi8KKy8qIERldGVjdCBWTEFOIGFuZCBwYWQgdG8gNjggYnl0ZXMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX1ZMQU4JCTB4MDAwMDAwMDIKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY4CQkweDAwMDAwMDAzIC8qIFBhZCB0byA2OCBieXRlcyAqLwogCi0vLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgotI2RlZmluZSBBWEdNQUNfQ0ZHMl9HRU5fUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEdlbmVyYXRlIHNpbmdsZSBwYXVzZSBmcmFtZSAodGVzdCkKLSNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfTUFOVUFMCQkweDA4MDAwMDAwCQkvLyBNYW51YWwgbGluayBmYXVsdCBzZXF1ZW5jZQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9BVVRPCQkweDA0MDAwMDAwCQkvLyBBdXRvIGxpbmsgZmF1bHQgc2VxdWVuY2UKLSNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfUkVNT1RFCQkweDAyMDAwMDAwCQkvLyBSZW1vdGUgbGluayBmYXVsdCAoUkVBRCBPTkxZKQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9MT0NBTAkJMHgwMTAwMDAwMAkJLy8gTG9jYWwgbGluayBmYXVsdCAoUkVBRCBPTkxZKQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfTUFTSwkJMHgwMDFGMDAwMAkJLy8gSW50ZXIgcGFja2V0IGdhcAorLyogQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKy8qIEdlbmVyYXRlIHNpbmdsZSBwYXVzZSBmcmFtZSAodGVzdCkgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzJfR0VOX1BBVVNFCQkweDgwMDAwMDAwCisvKiBNYW51YWwgbGluayBmYXVsdCBzZXF1ZW5jZSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9NQU5VQUwJCTB4MDgwMDAwMDAKKy8qIEF1dG8gbGluayBmYXVsdCBzZXF1ZW5jZSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9BVVRPCQkweDA0MDAwMDAwCisvKiBSZW1vdGUgbGluayBmYXVsdCAoUkVBRCBPTkxZKSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9SRU1PVEUJCTB4MDIwMDAwMDAKKy8qIExvY2FsIGxpbmsgZmF1bHQgKFJFQUQgT05MWSkgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfTE9DQUwJCTB4MDEwMDAwMDAKKyNkZWZpbmUgQVhHTUFDX0NGRzJfSVBHX01BU0sJCTB4MDAxRjAwMDAgLyogSW50ZXIgcGFja2V0IGdhcCAqLwogI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfU0hJRlQJCQkxNgotI2RlZmluZSBBWEdNQUNfQ0ZHMl9QQVVTRV9YTVQJCTB4MDAwMDgwMDAJCS8vIFBhdXNlIHRyYW5zbWl0IG1vZHVsZQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfRVhURU4JCTB4MDAwMDAwMjAJCS8vIEVuYWJsZSBJUEcgZXh0ZW5zaW9uIGFsZ29yaXRobQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdFWF9NQVNLCQkweDAwMDAwMDFGCQkvLyBJUEcgZXh0ZW5zaW9uCisjZGVmaW5lIEFYR01BQ19DRkcyX1BBVVNFX1hNVAkJMHgwMDAwODAwMCAvKiBQYXVzZSB0cmFuc21pdCBtb2R1bGUgKi8KKy8qIEVuYWJsZSBJUEcgZXh0ZW5zaW9uIGFsZ29yaXRobSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfRVhURU4JCTB4MDAwMDAwMjAKKyNkZWZpbmUgQVhHTUFDX0NGRzJfSVBHRVhfTUFTSwkJMHgwMDAwMDAxRiAvKiBJUEcgZXh0ZW5zaW9uICovCiAKLS8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzCi0jZGVmaW5lIEFYR01BQ19DRkczX1JDVl9EUk9QCQkweEZGRkYwMDAwCQkvLyBSZWNlaXZlIGZyYW1lIGRyb3AgZmlsdGVyCi0jZGVmaW5lIEFYR01BQ19DRkczX1JDVl9ET05UX0NBUkUJMHgwMDAwRkZGRgkJLy8gUmVjZWl2ZSBmcmFtZSBkb24ndCBjYXJlIGZpbHRlcgorLyogQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KKy8qIFJlY2VpdmUgZnJhbWUgZHJvcCBmaWx0ZXIgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RST1AJCTB4RkZGRjAwMDAKKy8qIFJlY2VpdmUgZnJhbWUgZG9uJ3QgY2FyZSBmaWx0ZXIgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RPTlRfQ0FSRQkweDAwMDBGRkZGCiAKLS8vIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDEtNAotI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX09ORQkJMHhGRjAwMDAwMAkJLy8gRmlyc3Qgb2N0ZXQKLSNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9UV08JCTB4MDBGRjAwMDAJCS8vIFNlY29uZCBvY3RldAotI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RIUkVFCTB4MDAwMEZGMDAJCS8vIFRoaXJkIG9jdGV0Ci0jZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfRk9VUgkweDAwMDAwMEZGCQkvLyBGb3VydGggb2N0ZXQKKy8qIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDEtNCAqLworI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX09ORQkJMHhGRjAwMDAwMAkvKiBGaXJzdCBvY3RldCAqLworI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RXTwkJMHgwMEZGMDAwMAkvKiBTZWNvbmQgb2N0ZXQgKi8KKyNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9USFJFRQkweDAwMDBGRjAwCS8qIFRoaXJkIG9jdGV0ICovCisjZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfRk9VUgkweDAwMDAwMEZGCS8qIEZvdXJ0aCBvY3RldCAqLwogCi0vLyBBLVhHTUFDIFN0YXRpb24gQWRkcmVzcyBSZWdpc3RlciAtIE9jdGV0cyA1LTYKLSNkZWZpbmUgQVhHTUFDX1NBUkhJR0hfT0NURVRfRklWRQkweEZGMDAwMDAwCQkvLyBGaWZ0aCBvY3RldAotI2RlZmluZSBBWEdNQUNfU0FSSElHSF9PQ1RFVF9TSVgJMHgwMEZGMDAwMAkJLy8gU2l4dGggb2N0ZXQKKy8qIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDUtNiAqLworI2RlZmluZSBBWEdNQUNfU0FSSElHSF9PQ1RFVF9GSVZFCTB4RkYwMDAwMDAJLyogRmlmdGggb2N0ZXQgKi8KKyNkZWZpbmUgQVhHTUFDX1NBUkhJR0hfT0NURVRfU0lYCTB4MDBGRjAwMDAJLyogU2l4dGggb2N0ZXQgKi8KIAotLy8gQS1YR01BQyBNYXhpbXVtIGZyYW1lIGxlbmd0aCByZWdpc3RlcgotI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfWE1UCQkweDNGRkYwMDAwCQkvLyBNYXhpbXVtIHRyYW5zbWl0IGZyYW1lIGxlbmd0aAorLyogQS1YR01BQyBNYXhpbXVtIGZyYW1lIGxlbmd0aCByZWdpc3RlciAqLworLyogTWF4aW11bSB0cmFuc21pdCBmcmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1hNVAkJMHgzRkZGMDAwMAogI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfWE1UX1NISUZUCTE2Ci0jZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9SQ1YJCTB4MDAwMEZGRkYJCS8vIE1heGltdW0gcmVjZWl2ZSBmcmFtZSBsZW5ndGgKLS8vIFRoaXMgcmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gZm9yIHN0YW5kYXJkIE1UVS4KLS8vIEZvciBqdW1ibywgSSdsbCBqdXN0IHN0YXRpY2FsbHkgZGVmaW5lIHRoZSB2YWx1ZSBoZXJlLiAgVGhpcwotLy8gdmFsdWUgc2V0cyB0aGUgcmVjZWl2ZSBieXRlIGNvdW50IHRvIDkwMzYgKDB4MjM0QykgYW5kIHRoZQotLy8gdHJhbnNtaXQgV09SRCBjb3VudCB0byAyMjU5ICgweDhEMykuICBUaGVzZSB2YWx1ZXMgaW5jbHVkZSAyMgotLy8gYnl0ZXMgb2YgcGFkZGluZyBiZXlvbmQgdGhlIGp1bWJvIE1UVSBvZiA5MDE0CisvKiBNYXhpbXVtIHJlY2VpdmUgZnJhbWUgbGVuZ3RoICovCisjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9SQ1YJCTB4MDAwMEZGRkYKKy8qCisgKiBUaGlzIHJlZ2lzdGVyIGRvZXNuJ3QgbmVlZCB0byBiZSB3cml0dGVuIGZvciBzdGFuZGFyZCBNVFUuCisgKiBGb3IganVtYm8sIEknbGwganVzdCBzdGF0aWNhbGx5IGRlZmluZSB0aGUgdmFsdWUgaGVyZS4gIFRoaXMKKyAqIHZhbHVlIHNldHMgdGhlIHJlY2VpdmUgYnl0ZSBjb3VudCB0byA5MDM2ICgweDIzNEMpIGFuZCB0aGUKKyAqIHRyYW5zbWl0IFdPUkQgY291bnQgdG8gMjI1OSAoMHg4RDMpLiAgVGhlc2UgdmFsdWVzIGluY2x1ZGUgMjIKKyAqIGJ5dGVzIG9mIHBhZGRpbmcgYmV5b25kIHRoZSBqdW1ibyBNVFUgb2YgOTAxNAorICovCiAjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9KVU1CTwkJMHgwOEQzMjM0QwogCi0vLyBBLVhHTUFDIFJldmlzaW9uIGxldmVsCi0jZGVmaW5lIEFYR01BQ19SRVZJU0lPTl9NQVNLCQkweDAwMDBGRkZGCQkvLyBSZXZpc2lvbiBsZXZlbAorLyogQS1YR01BQyBSZXZpc2lvbiBsZXZlbCAqLworI2RlZmluZSBBWEdNQUNfUkVWSVNJT05fTUFTSwkJMHgwMDAwRkZGRgkvKiBSZXZpc2lvbiBsZXZlbCAqLwogCi0vLyBBLVhHTUFDIEFNSUlNIENvbW1hbmQgUmVnaXN0ZXIKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9TVEFSVAkJMHgwMDAwMDAwOAkJLy8gQ29tbWFuZCBzdGFydAotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01BU0sJCTB4MDAwMDAwMDcJCS8vIENvbW1hbmQKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfV1JJVEUJCTEJCS8vIDEwLzEwMC8xMDAwIE1icHMgUGh5IFdyaXRlCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTEVHQUNZX1JFQUQJCTIJCS8vIDEwLzEwMC8xMDAwIE1icHMgUGh5IFJlYWQKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX1NJTkdMRQkJMwkJLy8gTW9uaXRvciBzaW5nbGUgUEhZCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTU9OSVRPUl9NVUxUSVBMRQk0CQkvLyBNb25pdG9yIG11bHRpcGxlIGNvbnRpZ3VvdXMgUEhZcwotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT04JCTUJCS8vIFByZXNlbnQgQU1JSU0gRmllbGQgUmVnCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfQ0xFQVJfTElOS19GQUlMCTYJCS8vIENsZWFyIExpbmsgRmFpbCBCaXQgaW4gTUlJTQorLyogQS1YR01BQyBBTUlJTSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfU1RBUlQJCTB4MDAwMDAwMDgJLyogQ29tbWFuZCBzdGFydCAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01BU0sJCTB4MDAwMDAwMDcJLyogQ29tbWFuZCAqLworLyogMTAvMTAwLzEwMDAgTWJwcyBQaHkgV3JpdGUgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfV1JJVEUJCTEKKy8qIDEwLzEwMC8xMDAwIE1icHMgUGh5IFJlYWQgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfUkVBRAkJMgorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01PTklUT1JfU0lOR0xFCQkzCS8qIE1vbml0b3Igc2luZ2xlIFBIWSAqLworLyogTW9uaXRvciBtdWx0aXBsZSBjb250aWd1b3VzIFBIWXMgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX01VTFRJUExFCTQKKy8qIFByZXNlbnQgQU1JSU0gRmllbGQgUmVnICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfMTBHX09QRVJBVElPTgkJNQorLyogQ2xlYXIgTGluayBGYWlsIEJpdCBpbiBNSUlNICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfQ0xFQVJfTElOS19GQUlMCTYKIAotLy8gQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfU1QJCTB4QzAwMDAwMDAJCS8vIDItYml0IFNUIGZpZWxkCisvKiBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVAkJMHhDMDAwMDAwMAkvKiAyLWJpdCBTVCBmaWVsZCAqLwogI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfU1RfU0hJRlQJCTMwCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9PUAkJMHgzMDAwMDAwMAkJLy8gMi1iaXQgT1AgZmllbGQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QCQkweDMwMDAwMDAwCS8qIDItYml0IE9QIGZpZWxkICovCiAjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVAkJMjgKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfQUREUgkweDBGODAwMDAwCQkvLyBQb3J0IGFkZHJlc3MgZmllbGQgKGhzdHBoeWFkeCBpbiBzcGVjKQorLyogUG9ydCBhZGRyZXNzIGZpZWxkIChoc3RwaHlhZHggaW4gc3BlYykgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfQUREUiAJMHgwRjgwMDAwMAogI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVAkJMjMKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSCTB4MDA3QzAwMDAJCS8vIERldmljZSBhZGRyZXNzIGZpZWxkIChoc3RyZWdhZHggaW4gc3BlYykKKy8qIERldmljZSBhZGRyZXNzIGZpZWxkIChoc3RyZWdhZHggaW4gc3BlYykgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSCTB4MDA3QzAwMDAKICNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9TSElGVAkJMTgKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBCQkweDAwMDMwMDAwCQkvLyAyLWJpdCBUQSBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfVEEJCTB4MDAwMzAwMDAJLyogMi1iaXQgVEEgZmllbGQgKi8KICNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUCQkxNgotI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREFUQQkJMHgwMDAwRkZGRgkJLy8gRGF0YSBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREFUQQkJMHgwMDAwRkZGRgkvKiBEYXRhIGZpZWxkICovCiAKLS8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9PUCBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZQlNSUlNX09QX0FERFIJCQkJMAkJLy8gTUlJTSBBZGRyZXNzIHNldCBvcGVyYXRpb24KLSNkZWZpbmUJTUlJTV9PUF9XUklURQkJCQkxCQkvLyBNSUlNIFdyaXRlIHJlZ2lzdGVyIG9wZXJhdGlvbgotI2RlZmluZQlNSUlNX09QX1JFQUQJCQkJMgkJLy8gTUlJTSBSZWFkIHJlZ2lzdGVyIG9wZXJhdGlvbgorLyogVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyICovCisjZGVmaW5lCU1JSU1fT1BfQUREUgkJMAkvKiBNSUlNIEFkZHJlc3Mgc2V0IG9wZXJhdGlvbiAqLworI2RlZmluZQlNSUlNX09QX1dSSVRFCQkxCS8qIE1JSU0gV3JpdGUgcmVnaXN0ZXIgb3BlcmF0aW9uICovCisjZGVmaW5lCU1JSU1fT1BfUkVBRAkJMgkvKiBNSUlNIFJlYWQgcmVnaXN0ZXIgb3BlcmF0aW9uICovCiAjZGVmaW5lCU1JSU1fT1BfQUREUl9TSElGVAkoTUlJTV9PUF9BRERSIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkKIAotLy8gVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfQUREUiBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZQlNSUlNX1BPUlRfTlVNCQkJCTEJCS8vIEFsbCBTYWhhcmEgTUlJTSBtb2R1bGVzIHVzZSBwb3J0IDEKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNCisgKiBGaWVsZCBSZWdpc3RlcgorICovCisjZGVmaW5lCU1JSU1fUE9SVF9OVU0JCTEJLyogQWxsIFNhaGFyYSBNSUlNIG1vZHVsZXMgdXNlIHBvcnQgMSAqLwogCi0vLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX0FERFIgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKLSNkZWZpbmUJTUlJTV9ERVZfUEhZX1BNQQkJCTEJCS8vIFBIWSBQTUEvUE1EIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIKLSNkZWZpbmUJTUlJTV9ERVZfUEhZX1BDUwkJCTMJCS8vIFBIWSBQQ1MgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgotI2RlZmluZQlNSUlNX0RFVl9QSFlfWFMJCQkJNAkJLy8gUEhZIFhTIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIKLSNkZWZpbmUJTUlJTV9ERVZfWEdYUwkJCQk1CQkvLyBYR1hTIE1JSU0gZGV2aWNlIG51bWJlcgorLyoKKyAqIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfQUREUiBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTQorICogRmllbGQgUmVnaXN0ZXIKKyAqLworLyogUEhZIFBNQS9QTUQgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlciAqLworI2RlZmluZQlNSUlNX0RFVl9QSFlfUE1BCTEKKy8qIFBIWSBQQ1MgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlciAqLworI2RlZmluZQlNSUlNX0RFVl9QSFlfUENTCTMKKy8qIFBIWSBYUyBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyICovCisjZGVmaW5lCU1JSU1fREVWX1BIWV9YUwkJNAorI2RlZmluZQlNSUlNX0RFVl9YR1hTCQk1CS8qIFhHWFMgTUlJTSBkZXZpY2UgbnVtYmVyICovCiAKLS8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9UQSBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZQlNSUlNX1RBXzEwR0IJCQkJMgkJLy8gc2V0IHRvIDIgZm9yIDEwIEdCIG9wZXJhdGlvbgorLyoKKyAqIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9UQSBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZAorICogUmVnaXN0ZXIKKyAqLworI2RlZmluZQlNSUlNX1RBXzEwR0IJCTIJLyogc2V0IHRvIDIgZm9yIDEwIEdCIG9wZXJhdGlvbiAqLwogCi0vLyBBLVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NGR19OT1BSRUFNCTB4MDAwMDAwODAJCS8vIEJ5cGFzcyBwcmVhbWJsZSBvZiBtbmdtdCBmcmFtZQotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ0ZHX0hBTEZfQ0xPQ0sJMHgwMDAwMDA3RgkJLy8gaGFsZi1jbG9jayBkdXJhdGlvbiBvZiBNREMgb3V0cHV0CisvKiBBLVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKy8qIEJ5cGFzcyBwcmVhbWJsZSBvZiBtbmdtdCBmcmFtZSAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ0ZHX05PUFJFQU0JMHgwMDAwMDA4MAorLyogaGFsZi1jbG9jayBkdXJhdGlvbiBvZiBNREMgb3V0cHV0ICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DRkdfSEFMRl9DTE9DSwkweDAwMDAwMDdGCiAKLS8vIEEtWEdNQUMgQU1JSU0gSW5kaWNhdG9yIFJlZ2lzdGVyCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX0xJTksJCTB4MDAwMDAwMTAJCS8vIExpbmsgc3RhdHVzIGZyb20gbGVnYWN5IFBIWSBvciBNTUQKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTVBIWQkJMHgwMDAwMDAwOAkJLy8gTXVsdGlwbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcwotI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19TUEhZCQkweDAwMDAwMDA0CQkvLyBTaW5nbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcwotI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19NT04JCTB4MDAwMDAwMDIJCS8vIFNpbmdsZSBvciBtdWx0aXBsZSBtb25pdG9yIGNtZAotI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZCQkweDAwMDAwMDAxCQkvLyBTZXQgdW50aWwgY21kIG9wZXJhdGlvbiBjb21wbGV0ZQorLyogQS1YR01BQyBBTUlJTSBJbmRpY2F0b3IgUmVnaXN0ZXIgKi8KKy8qIExpbmsgc3RhdHVzIGZyb20gbGVnYWN5IFBIWSBvciBNTUQgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTElOSwkJMHgwMDAwMDAxMAorLyogTXVsdGlwbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19NUEhZCQkweDAwMDAwMDA4CisvKiBTaW5nbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19TUEhZCQkweDAwMDAwMDA0CisvKiBTaW5nbGUgb3IgbXVsdGlwbGUgbW9uaXRvciBjbWQgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTU9OCQkweDAwMDAwMDAyCisvKiBTZXQgdW50aWwgY21kIG9wZXJhdGlvbiBjb21wbGV0ZSAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZCQkweDAwMDAwMDAxCiAKLS8vIExpbmsgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyCi0jZGVmaW5lCUxTX1BIWV9DTFJfUkVTRVQJCTB4ODAwMDAwMDAJCS8vIENsZWFyIHJlc2V0IHNpZ25hbCB0byBQSFkKLSNkZWZpbmUJTFNfU0VSREVTX1BPV0VSX0RPV04JCTB4NDAwMDAwMDAJCS8vIFBvd2VyIGRvd24gdGhlIFNhaGFyYSBTZXJkZXMKLSNkZWZpbmUJTFNfWEdYU19FTkFCTEUJCQkweDIwMDAwMDAwCQkvLyBFbmFibGUgdGhlIFhBVUkgWEdYUyBsb2dpYwotI2RlZmluZQlMU19YR1hTX0NUTAkJCTB4MTAwMDAwMDAJCS8vIEhvbGQgWEFVSSBYR1hTIGxvZ2ljIHJlc2V0IHVudGlsIFNlcmRlcyBpcyB1cAotI2RlZmluZQlMU19TRVJERVNfRE9XTgkJCTB4MDgwMDAwMDAJCS8vIFdoZW4gMCwgWEFVSSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlCi0jZGVmaW5lCUxTX1RSQUNFX0RPV04JCQkweDA0MDAwMDAwCQkvLyBXaGVuIDAsIFRyYWNlIFNlcmRlcyBpcyB1cCBhbmQgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUKLSNkZWZpbmUJTFNfUEhZX0NMS18yNU1IWgkJMHgwMjAwMDAwMAkJLy8gU2V0IFBIWSBjbG9jayB0byAyNSBNSHogKGVsc2UgMTU2LjEyNSBNSHopCi0jZGVmaW5lCUxTX1BIWV9DTEtfRU4JCQkweDAxMDAwMDAwCQkvLyBFbmFibGUgY2xvY2sgdG8gUEhZCi0jZGVmaW5lCUxTX1hBVUlfTElOS19VUAkJCTB4MDAwMDAwMTAJCS8vIFhBVUkgbGluayBpcyB1cAotI2RlZmluZQlMU19YQVVJX0xJTktfQ0hORwkJMHgwMDAwMDAwOAkJLy8gWEFVSSBsaW5rIHN0YXR1cyBoYXMgY2hhbmdlZAotI2RlZmluZQlMU19MSU5LX0FMQVJNCQkJMHgwMDAwMDAwNAkJLy8gTGluayBhbGFybSBwaW4KLSNkZWZpbmUJTFNfQVRUTl9DVFJMX01BU0sJCTB4MDAwMDAwMDMJCS8vIE1hc2sgbGluayBhdHRlbnRpb24gY29udHJvbCBiaXRzCi0jZGVmaW5lCUxTX0FUVE5fQUxBUk0JCQkweDAwMDAwMDAwCQkvLyAwMCA9PiBBdHRuIG9uIGxpbmsgYWxhcm0KLSNkZWZpbmUJTFNfQVRUTl9BTEFSTV9PUl9TVEFUX0NITkcJMHgwMDAwMDAwMQkJLy8gMDEgPT4gQXR0biBvbiBsaW5rIGFsYXJtIG9yIHN0YXR1cyBjaGFuZ2UKLSNkZWZpbmUJTFNfQVRUTl9TVEFUX0NITkcJCTB4MDAwMDAwMDIJCS8vIDEwID0+IEF0dG4gb24gbGluayBzdGF0dXMgY2hhbmdlCi0jZGVmaW5lCUxTX0FUVE5fTk9ORQkJCTB4MDAwMDAwMDMJCS8vIDExID0+IG5vIEF0dG4KKy8qIExpbmsgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCUxTX1BIWV9DTFJfUkVTRVQJMHg4MDAwMDAwMAkvKiBDbGVhciByZXNldCBzaWduYWwgdG8gUEhZICovCisjZGVmaW5lCUxTX1NFUkRFU19QT1dFUl9ET1dOCTB4NDAwMDAwMDAJLyogUG93ZXIgZG93biB0aGUgU2FoYXJhIFNlcmRlcyAqLworI2RlZmluZQlMU19YR1hTX0VOQUJMRQkJMHgyMDAwMDAwMAkvKiBFbmFibGUgdGhlIFhBVUkgWEdYUyBsb2dpYyAqLworLyogSG9sZCBYQVVJIFhHWFMgbG9naWMgcmVzZXQgdW50aWwgU2VyZGVzIGlzIHVwICovCisjZGVmaW5lCUxTX1hHWFNfQ1RMCQkweDEwMDAwMDAwCisvKiBXaGVuIDAsIFhBVUkgU2VyZGVzIGlzIHVwIGFuZCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSAqLworI2RlZmluZQlMU19TRVJERVNfRE9XTgkJMHgwODAwMDAwMAorLyogV2hlbiAwLCBUcmFjZSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlICovCisjZGVmaW5lCUxTX1RSQUNFX0RPV04JCTB4MDQwMDAwMDAKKy8qIFNldCBQSFkgY2xvY2sgdG8gMjUgTUh6IChlbHNlIDE1Ni4xMjUgTUh6KSAqLworI2RlZmluZQlMU19QSFlfQ0xLXzI1TUhaCTB4MDIwMDAwMDAKKyNkZWZpbmUJTFNfUEhZX0NMS19FTgkJMHgwMTAwMDAwMAkvKiBFbmFibGUgY2xvY2sgdG8gUEhZICovCisjZGVmaW5lCUxTX1hBVUlfTElOS19VUAkJMHgwMDAwMDAxMAkvKiBYQVVJIGxpbmsgaXMgdXAgKi8KKy8qIFhBVUkgbGluayBzdGF0dXMgaGFzIGNoYW5nZWQgKi8KKyNkZWZpbmUJTFNfWEFVSV9MSU5LX0NITkcJMHgwMDAwMDAwOAorI2RlZmluZQlMU19MSU5LX0FMQVJNCQkweDAwMDAwMDA0CS8qIExpbmsgYWxhcm0gcGluICovCisvKiBNYXNrIGxpbmsgYXR0ZW50aW9uIGNvbnRyb2wgYml0cyAqLworI2RlZmluZQlMU19BVFROX0NUUkxfTUFTSwkweDAwMDAwMDAzCisjZGVmaW5lCUxTX0FUVE5fQUxBUk0JCTB4MDAwMDAwMDAJLyogMDAgPT4gQXR0biBvbiBsaW5rIGFsYXJtICovCisvKiAwMSA9PiBBdHRuIG9uIGxpbmsgYWxhcm0gb3Igc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZQlMU19BVFROX0FMQVJNX09SX1NUQVRfQ0hORwkweDAwMDAwMDAxCisvKiAxMCA9PiBBdHRuIG9uIGxpbmsgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZQlMU19BVFROX1NUQVRfQ0hORwkweDAwMDAwMDAyCisjZGVmaW5lCUxTX0FUVE5fTk9ORQkJMHgwMDAwMDAwMwkvKiAxMSA9PiBubyBBdHRuICovCiAKLS8vIExpbmsgQWRkcmVzcyBIaWdoIFJlZ2lzdGVycwotI2RlZmluZQlMSU5LX0FERFJfRU5BQkxFCQkweDgwMDAwMDAwCQkvLyBFbmFibGUgdGhpcyBsaW5rIGFkZHJlc3MKKy8qIExpbmsgQWRkcmVzcyBIaWdoIFJlZ2lzdGVycyAqLworI2RlZmluZQlMSU5LX0FERFJfRU5BQkxFCTB4ODAwMDAwMDAJLyogRW5hYmxlIHRoaXMgbGluayBhZGRyZXNzICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoKICAqIFhHWFMgWEFVSSBYR01JSSBFeHRlbmRlciByZWdpc3RlcnMKICAqCiAgKiBGdWxsIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gbXhneHMucGRmCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8gWEdYUyBSZWdpc3RlciBNYXAKLSNkZWZpbmUgWEdYU19BRERSRVNTX0NPTlRST0wxCQkweDAwMDAJCQkvLyBYUyBDb250cm9sIDEKLSNkZWZpbmUgWEdYU19BRERSRVNTX1NUQVRVUzEJCTB4MDAwMQkJCS8vIFhTIFN0YXR1cyAxCi0jZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9MT1cJCTB4MDAwMgkJCS8vIFhTIERldmljZSBJRCAobG93KQotI2RlZmluZSBYR1hTX0FERFJFU1NfREVWSURfSElHSAkJMHgwMDAzCQkJLy8gWFMgRGV2aWNlIElEIChoaWdoKQotI2RlZmluZSBYR1hTX0FERFJFU1NfU1BFRUQJCTB4MDAwNAkJCS8vIFhTIFNwZWVkIGFiaWxpdHkKLSNkZWZpbmUgWEdYU19BRERSRVNTX0RFVl9MT1cJCTB4MDAwNQkJCS8vIFhTIERldmljZXMgaW4gcGFja2FnZQotI2RlZmluZSBYR1hTX0FERFJFU1NfREVWX0hJR0gJCTB4MDAwNgkJCS8vIFhTIERldmljZXMgaW4gcGFja2FnZQotI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMgkJMHgwMDA4CQkJLy8gWFMgU3RhdHVzIDIKLSNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX2xPVwkJMHgwMDBFCQkJLy8gWFMgUGFja2FnZSBJZGVudGlmaWVyCi0jZGVmaW5lIFhHWFNfQUREUkVTU19QS0dJRF9ISUdICQkweDAwMEYJCQkvLyBYUyBQYWNrYWdlIElkZW50aWZpZXIKLSNkZWZpbmUgWEdYU19BRERSRVNTX0xBTkVfU1RBVFVTCTB4MDAxOAkJCS8vIDEwRyBYR1hTIExhbmUgU3RhdHVzCi0jZGVmaW5lIFhHWFNfQUREUkVTU19URVNUX0NUUkwJCTB4MDAxOQkJCS8vIDEwRyBYR1hTIFRlc3QgQ29udHJvbAotI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8xCQkweDgwMDAJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMQotI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8yCQkweDgwMDEJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMgotI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkxCQkweDgwMDIJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMQotI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkyCQkweDgwMDMJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMgorICovCisvKiBYR1hTIFJlZ2lzdGVyIE1hcCAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfQ09OVFJPTDEJMHgwMDAwCQkvKiBYUyBDb250cm9sIDEgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1NUQVRVUzEJMHgwMDAxCQkvKiBYUyBTdGF0dXMgMSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfREVWSURfTE9XCTB4MDAwMgkJLyogWFMgRGV2aWNlIElEIChsb3cpICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9ISUdICTB4MDAwMwkJLyogWFMgRGV2aWNlIElEIChoaWdoKSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfU1BFRUQJMHgwMDA0CQkvKiBYUyBTcGVlZCBhYmlsaXR5ICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZfTE9XCTB4MDAwNQkJLyogWFMgRGV2aWNlcyBpbiBwYWNrYWdlICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZfSElHSAkweDAwMDYJCS8qIFhTIERldmljZXMgaW4gcGFja2FnZSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMgkweDAwMDgJCS8qIFhTIFN0YXR1cyAyICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19QS0dJRF9sT1cJMHgwMDBFCQkvKiBYUyBQYWNrYWdlIElkZW50aWZpZXIgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX0hJR0gJMHgwMDBGCQkvKiBYUyBQYWNrYWdlIElkZW50aWZpZXIgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX0xBTkVfU1RBVFVTCTB4MDAxOAkvKiAxMEcgWEdYUyBMYW5lIFN0YXR1cyAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfVEVTVF9DVFJMCTB4MDAxOQkJLyogMTBHIFhHWFMgVGVzdCBDb250cm9sICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9MTzEJMHg4MDAwCQkvKiBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8yCTB4ODAwMQkJLyogVmVuZG9yLVNwZWNpZmljIFJlc2V0IExvIDIgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0hJMQkweDgwMDIJCS8qIFZlbmRvci1TcGVjaWZpYyBSZXNldCBIaSAxICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9ISTIJMHg4MDAzCQkvKiBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMiAqLwogCi0vLyBYUyBDb250cm9sIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lIFhHWFNfQ09OVFJPTDFfUkVTRVQJCTB4ODAwMAkJCS8vIFJlc2V0IC0gc2VsZiBjbGVhcmluZwotI2RlZmluZSBYR1hTX0NPTlRST0wxX0xPT1BCQUNLCQkweDQwMDAJCQkvLyBFbmFibGUgbG9vcGJhY2sKLSNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRDEJCTB4MjAwMAkJCS8vIDAgPSB1bnNwZWNpZmllZCwgMSA9IDEwR2IrCi0jZGVmaW5lIFhHWFNfQ09OVFJPTDFfTE9XUE9XRVIJCTB4MDQwMAkJCS8vIDEgPSBMb3cgcG93ZXIgbW9kZQotI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMgkJMHgwMDQwCQkJLy8gU2FtZSBhcyBTUEVFRDEgKD8pCi0jZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQJCTB4MDAzQwkJCS8vIEV2ZXJ5dGhpbmcgcmVzZXJ2ZWQgZXhjZXB0IHplcm8gKD8pCisvKiBYUyBDb250cm9sIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfUkVTRVQJMHg4MDAwCQkvKiBSZXNldCAtIHNlbGYgY2xlYXJpbmcgKi8KKyNkZWZpbmUgWEdYU19DT05UUk9MMV9MT09QQkFDSwkweDQwMDAJCS8qIEVuYWJsZSBsb29wYmFjayAqLworI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMQkweDIwMDAJCS8qIDAgPSB1bnNwZWNpZmllZCwgMSA9IDEwR2IrICovCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfTE9XUE9XRVIJMHgwNDAwCQkvKiAxID0gTG93IHBvd2VyIG1vZGUgKi8KKyNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRDIJMHgwMDQwCQkvKiBTYW1lIGFzIFNQRUVEMSAoPykgKi8KKy8qIEV2ZXJ5dGhpbmcgcmVzZXJ2ZWQgZXhjZXB0IHplcm8gKD8pICovCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQJMHgwMDNDCiAKLS8vIFhTIFN0YXR1cyAxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZSBYR1hTX1NUQVRVUzFfRkFVTFQJCTB4MDA4MAkJCS8vIEZhdWx0IGRldGVjdGVkCi0jZGVmaW5lIFhHWFNfU1RBVFVTMV9MSU5LCQkweDAwMDQJCQkvLyAxID0gTGluayB1cAotI2RlZmluZSBYR1hTX1NUQVRVUzFfTE9XUE9XRVIJCTB4MDAwMgkJCS8vIDEgPSBMb3cgcG93ZXIgc3VwcG9ydGVkCisvKiBYUyBTdGF0dXMgMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19TVEFUVVMxX0ZBVUxUCTB4MDA4MAkJLyogRmF1bHQgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgWEdYU19TVEFUVVMxX0xJTksJMHgwMDA0CQkvKiAxID0gTGluayB1cCAqLworI2RlZmluZSBYR1hTX1NUQVRVUzFfTE9XUE9XRVIJMHgwMDAyCQkvKiAxID0gTG93IHBvd2VyIHN1cHBvcnRlZCAqLwogCi0vLyBYUyBTcGVlZCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19TUEVFRF8xMEcJCQkweDAwMDEJCQkvLyAxID0gMTBHIGNhcGFibGUKKy8qIFhTIFNwZWVkIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX1NQRUVEXzEwRwkJMHgwMDAxCQkvKiAxID0gMTBHIGNhcGFibGUgKi8KIAotLy8gWFMgRGV2aWNlcyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX0RURQkJMHgwMDIwCQkJLy8gRFRFIFhTIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1BIWQkJMHgwMDEwCQkJLy8gUEhZIFhTIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1BDUwkJMHgwMDA4CQkJLy8gUENTIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1dJUwkJMHgwMDA0CQkJLy8gV0lTIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1BNRAkJMHgwMDAyCQkJLy8gUE1EL1BNQSBQcmVzZW50Ci0jZGVmaW5lIFhHWFNfREVWSUNFU19DTEFVU0UyMgkJMHgwMDAxCQkJLy8gQ2xhdXNlIDIyIHJlZ2lzdGVycyBwcmVzZW50CisvKiBYUyBEZXZpY2VzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfRFRFCTB4MDAyMAkJLyogRFRFIFhTIFByZXNlbnQgKi8KKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BIWQkweDAwMTAJCS8qIFBIWSBYUyBQcmVzZW50ICovCisjZGVmaW5lIFhHWFNfREVWSUNFU19QQ1MJMHgwMDA4CQkvKiBQQ1MgUHJlc2VudCAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfV0lTCTB4MDAwNAkJLyogV0lTIFByZXNlbnQgKi8KKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BNRAkweDAwMDIJCS8qIFBNRC9QTUEgUHJlc2VudCAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfQ0xBVVNFMjIJMHgwMDAxCQkvKiBDbGF1c2UgMjIgcmVnaXN0ZXJzIHByZXNlbnQqLwogCi0vLyBYUyBEZXZpY2VzIEhpZ2ggcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lIFhHWFNfREVWSUNFU19WRU5ET1IyCQkweDgwMDAJCQkvLyBWZW5kb3Igc3BlY2lmaWMgZGV2aWNlIDIKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1ZFTkRPUjEJCTB4NDAwMAkJCS8vIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMQorLyogWFMgRGV2aWNlcyBIaWdoIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfVkVORE9SMgkweDgwMDAJCS8qIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMiAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfVkVORE9SMQkweDQwMDAJCS8qIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMSAqLwogCi0vLyBYUyBTdGF0dXMgMiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9NQVNLCQkweEMwMDAJCQkvLyBEZXZpY2UgcHJlc2VudCBtYXNrCi0jZGVmaW5lIFhHWFNfU1RBVFVTMl9ERVZfUkVTUE9ORAkweDgwMDAJCQkvLyBEZXZpY2UgcmVzcG9uZGluZwotI2RlZmluZSBYR1hTX1NUQVRVUzJfWE1UX0ZBVUxUCQkweDA4MDAJCQkvLyBUcmFuc21pdCBmYXVsdAotI2RlZmluZSBYR1hTX1NUQVRVUzJfUkNWX0ZBVUxUCQkweDA0MDAJCQkvLyBSZWNlaXZlIGZhdWx0CisvKiBYUyBTdGF0dXMgMiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9NQVNLCTB4QzAwMAkJLyogRGV2aWNlIHByZXNlbnQgbWFzayAqLworI2RlZmluZSBYR1hTX1NUQVRVUzJfREVWX1JFU1BPTkQJMHg4MDAwCS8qIERldmljZSByZXNwb25kaW5nICovCisjZGVmaW5lIFhHWFNfU1RBVFVTMl9YTVRfRkFVTFQJMHgwODAwCQkvKiBUcmFuc21pdCBmYXVsdCAqLworI2RlZmluZSBYR1hTX1NUQVRVUzJfUkNWX0ZBVUxUCTB4MDQwMAkJLyogUmVjZWl2ZSBmYXVsdCAqLwogCi0vLyBYUyBQYWNrYWdlIElEIEhpZ2ggcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lIFhHWFNfUEtHSURfSElHSF9PUkcJCTB4RkMwMAkJCS8vIE9yZ2FuaXphdGlvbmFsbHkgVW5pcXVlCi0jZGVmaW5lIFhHWFNfUEtHSURfSElHSF9NRkcJCTB4MDNGMAkJCS8vIE1hbnVmYWN0dXJlciBNb2RlbAotI2RlZmluZSBYR1hTX1BLR0lEX0hJR0hfUkVWCQkweDAwMEYJCQkvLyBSZXZpc2lvbiBOdW1iZXIKKy8qIFhTIFBhY2thZ2UgSUQgSGlnaCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX09SRwkweEZDMDAJCS8qIE9yZ2FuaXphdGlvbmFsbHkgVW5pcXVlICovCisjZGVmaW5lIFhHWFNfUEtHSURfSElHSF9NRkcJMHgwM0YwCQkvKiBNYW51ZmFjdHVyZXIgTW9kZWwgKi8KKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX1JFVgkweDAwMEYJCS8qIFJldmlzaW9uIE51bWJlciAqLwogCi0vLyBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19MQU5FX1BIWQkJCTB4MTAwMAkJCS8vIFBIWS9EVEUgbGFuZSBhbGlnbm1lbnQgc3RhdHVzCi0jZGVmaW5lIFhHWFNfTEFORV9QQVRURVJOCQkweDA4MDAJCQkvLyBQYXR0ZXJuIHRlc3RpbmcgYWJpbGl0eQotI2RlZmluZSBYR1hTX0xBTkVfTE9PUEJBQ0sJCTB4MDQwMAkJCS8vIFBIWSBsb29wYmFjayBhYmlsaXR5Ci0jZGVmaW5lIFhHWFNfTEFORV9TWU5DMwkJCTB4MDAwOAkJCS8vIExhbmUgMyBzeW5jCi0jZGVmaW5lIFhHWFNfTEFORV9TWU5DMgkJCTB4MDAwNAkJCS8vIExhbmUgMiBzeW5jCi0jZGVmaW5lIFhHWFNfTEFORV9TWU5DMQkJCTB4MDAwMgkJCS8vIExhbmUgMSBzeW5jCi0jZGVmaW5lIFhHWFNfTEFORV9TWU5DMAkJCTB4MDAwMQkJCS8vIExhbmUgMCBzeW5jCisvKiBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19MQU5FX1BIWQkJMHgxMDAwCS8qIFBIWS9EVEUgbGFuZSBhbGlnbm1lbnQgc3RhdHVzICovCisjZGVmaW5lIFhHWFNfTEFORV9QQVRURVJOCTB4MDgwMAkJLyogUGF0dGVybiB0ZXN0aW5nIGFiaWxpdHkgKi8KKyNkZWZpbmUgWEdYU19MQU5FX0xPT1BCQUNLCTB4MDQwMAkJLyogUEhZIGxvb3BiYWNrIGFiaWxpdHkgKi8KKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMzCQkweDAwMDgJCS8qIExhbmUgMyBzeW5jICovCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMgkJMHgwMDA0CQkvKiBMYW5lIDIgc3luYyAqLworI2RlZmluZSBYR1hTX0xBTkVfU1lOQzEJCTB4MDAwMgkJLyogTGFuZSAxIHN5bmMgKi8KKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMwCQkweDAwMDEJCS8qIExhbmUgMCBzeW5jICovCiAKLS8vIFhTIFRlc3QgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fRU5BQkxFCTB4MDAwNAkJCS8vIFRlc3QgcGF0dGVybiBlbmFibGVkCi0jZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX01BU0sJCTB4MDAwMwkJCS8vIFRlc3QgcGF0dGVybnMKLSNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fUlNWRAkJMHgwMDAzCQkJLy8gVGVzdCBwYXR0ZXJuIC0gcmVzZXJ2ZWQKLSNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUlYCQkweDAwMDIJCQkvLyBUZXN0IHBhdHRlcm4gLSBtaXhlZAotI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9MT1cJCTB4MDAwMQkJCS8vIFRlc3QgcGF0dGVybiAtIGxvdwotI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9ISUdICQkweDAwMDEJCQkvLyBUZXN0IHBhdHRlcm4gLSBoaWdoCisvKiBYUyBUZXN0IENvbnRyb2wgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX0VOQUJMRQkweDAwMDQJLyogVGVzdCBwYXR0ZXJuIGVuYWJsZWQgKi8KKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUFTSwkweDAwMDMJCS8qIFRlc3QgcGF0dGVybnMgKi8KKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fUlNWRAkweDAwMDMJCS8qIFRlc3QgcGF0dGVybiAtIHJlc2VydmVkICovCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX01JWAkweDAwMDIJCS8qIFRlc3QgcGF0dGVybiAtIG1peGVkICovCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX0xPVwkweDAwMDEJCS8qIFRlc3QgcGF0dGVybiAtIGxvdyAqLworI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9ISUdICTB4MDAwMQkJLyogVGVzdCBwYXR0ZXJuIC0gaGlnaCAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogRXh0ZXJuYWwgTURJTyBCdXMgUmVnaXN0ZXJzCiAgKgogICogRnVsbCByZWdpc3RlciBkZXNjcmlwdGlvbnMgY2FuIGJlIGZvdW5kIGluIFBIWS9YRU5QQUsvSUVFRSBzcGVjcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vIExBU0kgKExpbmsgQWxhcm0gU3RhdHVzIEludGVycnVwdCkgUmVnaXN0ZXJzIChsb2NhdGVkIGluIE1JSU1fREVWX1BIWV9QTUEgZGV2aWNlKQotI2RlZmluZSBMQVNJX1JYX0FMQVJNX0NPTlRST0wJCTB4OTAwMAkJCS8vIExBU0kgUlhfQUxBUk0gQ29udHJvbAotI2RlZmluZSBMQVNJX1RYX0FMQVJNX0NPTlRST0wJCTB4OTAwMQkJCS8vIExBU0kgVFhfQUxBUk0gQ29udHJvbAotI2RlZmluZSBMQVNJX0NPTlRST0wJCQkweDkwMDIJCQkvLyBMQVNJIENvbnRyb2wKLSNkZWZpbmUgTEFTSV9SWF9BTEFSTV9TVEFUVVMJCTB4OTAwMwkJCS8vIExBU0kgUlhfQUxBUk0gU3RhdHVzCi0jZGVmaW5lIExBU0lfVFhfQUxBUk1fU1RBVFVTCQkweDkwMDQJCQkvLyBMQVNJIFRYX0FMQVJNIFN0YXR1cwotI2RlZmluZSBMQVNJX1NUQVRVUwkJCTB4OTAwNQkJCS8vIExBU0kgU3RhdHVzCisgKi8KKy8qCisgKiBMQVNJIChMaW5rIEFsYXJtIFN0YXR1cyBJbnRlcnJ1cHQpIFJlZ2lzdGVycyAobG9jYXRlZCBpbgorICogTUlJTV9ERVZfUEhZX1BNQSBkZXZpY2UpCisgKi8KKyNkZWZpbmUgTEFTSV9SWF9BTEFSTV9DT05UUk9MCTB4OTAwMAkJLyogTEFTSSBSWF9BTEFSTSBDb250cm9sICovCisjZGVmaW5lIExBU0lfVFhfQUxBUk1fQ09OVFJPTAkweDkwMDEJCS8qIExBU0kgVFhfQUxBUk0gQ29udHJvbCAqLworI2RlZmluZSBMQVNJX0NPTlRST0wJCTB4OTAwMgkJLyogTEFTSSBDb250cm9sICovCisjZGVmaW5lIExBU0lfUlhfQUxBUk1fU1RBVFVTCTB4OTAwMwkJLyogTEFTSSBSWF9BTEFSTSBTdGF0dXMgKi8KKyNkZWZpbmUgTEFTSV9UWF9BTEFSTV9TVEFUVVMJMHg5MDA0CQkvKiBMQVNJIFRYX0FMQVJNIFN0YXR1cyAqLworI2RlZmluZSBMQVNJX1NUQVRVUwkJMHg5MDA1CQkvKiBMQVNJIFN0YXR1cyAqLwogCi0vLyBMQVNJX0NPTlRST0wgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lCUxBU0lfQ1RMX1JYX0FMQVJNX0VOQUJMRQkweDAwMDQJCQkvLyBFbmFibGUgUlhfQUxBUk0gaW50ZXJydXB0cwotI2RlZmluZQlMQVNJX0NUTF9UWF9BTEFSTV9FTkFCTEUJMHgwMDAyCQkJLy8gRW5hYmxlIFRYX0FMQVJNIGludGVycnVwdHMKLSNkZWZpbmUJTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFCTB4MDAwMQkJCS8vIEVuYWJsZSBMaW5rIFN0YXR1cyBpbnRlcnJ1cHRzCisvKiBMQVNJX0NPTlRST0wgYml0IGRlZmluaXRpb25zICovCisvKiBFbmFibGUgUlhfQUxBUk0gaW50ZXJydXB0cyAqLworI2RlZmluZQlMQVNJX0NUTF9SWF9BTEFSTV9FTkFCTEUJMHgwMDA0CisvKiBFbmFibGUgVFhfQUxBUk0gaW50ZXJydXB0cyAqLworI2RlZmluZQlMQVNJX0NUTF9UWF9BTEFSTV9FTkFCTEUJMHgwMDAyCisvKiBFbmFibGUgTGluayBTdGF0dXMgaW50ZXJydXB0cyAqLworI2RlZmluZQlMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUJMHgwMDAxCiAKLS8vIExBU0lfU1RBVFVTIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZQlMQVNJX1NUQVRVU19SWF9BTEFSTQkJMHgwMDA0CQkJLy8gUlhfQUxBUk0gc3RhdHVzCi0jZGVmaW5lCUxBU0lfU1RBVFVTX1RYX0FMQVJNCQkweDAwMDIJCQkvLyBUWF9BTEFSTSBzdGF0dXMKLSNkZWZpbmUJTEFTSV9TVEFUVVNfTFNfQUxBUk0JCTB4MDAwMQkJCS8vIExpbmsgU3RhdHVzCisvKiBMQVNJX1NUQVRVUyBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJTEFTSV9TVEFUVVNfUlhfQUxBUk0JMHgwMDA0CQkvKiBSWF9BTEFSTSBzdGF0dXMgKi8KKyNkZWZpbmUJTEFTSV9TVEFUVVNfVFhfQUxBUk0JMHgwMDAyCQkvKiBUWF9BTEFSTSBzdGF0dXMgKi8KKyNkZWZpbmUJTEFTSV9TVEFUVVNfTFNfQUxBUk0JMHgwMDAxCQkvKiBMaW5rIFN0YXR1cyAqLwogCi0vLyBQSFkgcmVnaXN0ZXJzIC0gUE1BL1BNRCAoZGV2aWNlIDEpCi0jZGVmaW5lCVBIWV9QTUFfQ09OVFJPTDEJCTB4MDAwMAkJCS8vIFBNQS9QTUQgQ29udHJvbCAxCi0jZGVmaW5lCVBIWV9QTUFfU1RBVFVTMQkJCTB4MDAwMQkJCS8vIFBNQS9QTUQgU3RhdHVzIDEKLSNkZWZpbmUJUEhZX1BNQV9SQ1ZfREVUCQkJMHgwMDBBCQkJLy8gUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QKLQkJLy8gb3RoZXIgUE1BL1BNRCByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAorLyogUEhZIHJlZ2lzdGVycyAtIFBNQS9QTUQgKGRldmljZSAxKSAqLworI2RlZmluZQlQSFlfUE1BX0NPTlRST0wxCTB4MDAwMAkJLyogUE1BL1BNRCBDb250cm9sIDEgKi8KKyNkZWZpbmUJUEhZX1BNQV9TVEFUVVMxCQkweDAwMDEJCS8qIFBNQS9QTUQgU3RhdHVzIDEgKi8KKyNkZWZpbmUJUEhZX1BNQV9SQ1ZfREVUCQkweDAwMEEJLyogUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QgKi8KKwkJLyogb3RoZXIgUE1BL1BNRCByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZCAqLwogCi0vLyBQSFkgcmVnaXN0ZXJzIC0gUENTIChkZXZpY2UgMykKLSNkZWZpbmUJUEhZX1BDU19DT05UUk9MMQkJMHgwMDAwCQkJLy8gUENTIENvbnRyb2wgMQotI2RlZmluZQlQSFlfUENTX1NUQVRVUzEJCQkweDAwMDEJCQkvLyBQQ1MgU3RhdHVzIDEKLSNkZWZpbmUJUEhZX1BDU18xMEdfU1RBVFVTMQkJMHgwMDIwCQkJLy8gUENTIDEwR0JBU0UtUiBTdGF0dXMgMQotCQkvLyBvdGhlciBQQ1MgcmVnaXN0ZXJzIGV4aXN0IGFuZCBjYW4gYmUgZGVmaW5lZCBhcyBuZWVkZWQKKy8qIFBIWSByZWdpc3RlcnMgLSBQQ1MgKGRldmljZSAzKSAqLworI2RlZmluZQlQSFlfUENTX0NPTlRST0wxCTB4MDAwMAkJLyogUENTIENvbnRyb2wgMSAqLworI2RlZmluZQlQSFlfUENTX1NUQVRVUzEJCTB4MDAwMQkJLyogUENTIFN0YXR1cyAxICovCisjZGVmaW5lCVBIWV9QQ1NfMTBHX1NUQVRVUzEJMHgwMDIwCQkvKiBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxICovCisJCS8qIG90aGVyIFBDUyByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZCAqLwogCi0vLyBQSFkgcmVnaXN0ZXJzIC0gWFMgKGRldmljZSA0KQotI2RlZmluZQlQSFlfWFNfQ09OVFJPTDEJCQkweDAwMDAJCQkvLyBYUyBDb250cm9sIDEKLSNkZWZpbmUJUEhZX1hTX1NUQVRVUzEJCQkweDAwMDEJCQkvLyBYUyBTdGF0dXMgMQotI2RlZmluZQlQSFlfWFNfTEFORV9TVEFUVVMJCTB4MDAxOAkJCS8vIFhTIExhbmUgU3RhdHVzCi0JCS8vIG90aGVyIFhTIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisvKiBQSFkgcmVnaXN0ZXJzIC0gWFMgKGRldmljZSA0KSAqLworI2RlZmluZQlQSFlfWFNfQ09OVFJPTDEJCTB4MDAwMAkJLyogWFMgQ29udHJvbCAxICovCisjZGVmaW5lCVBIWV9YU19TVEFUVVMxCQkweDAwMDEJCS8qIFhTIFN0YXR1cyAxICovCisjZGVmaW5lCVBIWV9YU19MQU5FX1NUQVRVUwkweDAwMTgJCS8qIFhTIExhbmUgU3RhdHVzICovCisJCS8qIG90aGVyIFhTIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkICovCiAKLS8vIFBIWV9QTUFfQ09OVFJPTDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lCVBNQV9DT05UUk9MMV9SRVNFVAkJMHg4MDAwCQkJLy8gUE1BL1BNRCByZXNldAorLyogUEhZX1BNQV9DT05UUk9MMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJUE1BX0NPTlRST0wxX1JFU0VUCTB4ODAwMAkJLyogUE1BL1BNRCByZXNldCAqLwogCi0vLyBQSFlfUE1BX1JDVl9ERVQgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lCVBNQV9SQ1ZfREVURUNUCQkJMHgwMDAxCQkJLy8gUE1BL1BNRCByZWNlaXZlIHNpZ25hbCBkZXRlY3QKKy8qIFBIWV9QTUFfUkNWX0RFVCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJUE1BX1JDVl9ERVRFQ1QJCTB4MDAwMQkvKiBQTUEvUE1EIHJlY2VpdmUgc2lnbmFsIGRldGVjdCAqLwogCi0vLyBQSFlfUENTXzEwR19TVEFUVVMxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZQlQQ1NfMTBCX0JMT0NLX0xPQ0sJCTB4MDAwMQkJCS8vIFBDUyAxMEdCQVNFLVIgbG9ja2VkIHRvIHJlY2VpdmUgYmxvY2tzCisvKiBQSFlfUENTXzEwR19TVEFUVVMxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZQlQQ1NfMTBCX0JMT0NLX0xPQ0sJMHgwMDAxCS8qIFBDUyAxMEdCQVNFLVIgbG9ja2VkIHRvIHJlY2VpdmUgYmxvY2tzICovCiAKLS8vIFBIWV9YU19MQU5FX1NUQVRVUyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUJWFNfTEFORV9BTElHTgkJCTB4MTAwMAkJCS8vIFhTIHRyYW5zbWl0IGxhbmVzIGFsaWduZWQKKy8qIFBIWV9YU19MQU5FX1NUQVRVUyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJWFNfTEFORV9BTElHTgkJMHgxMDAwCQkvKiBYUyB0cmFuc21pdCBsYW5lcyBhbGlnbmVkICovCiAKLS8vIFBIWSBNaWNyb2NvZGUgZG93bmxvYWQgZGF0YSBzdHJ1Y3R1cmUKLXN0cnVjdCBQSFlfVUNPREUgeworI2RlZmluZSBYQ1ZSX1ZFTkRPUl9MRU4JCTE2ICAvKiB4Y3ZyIHZlbmRvciBsZW4gKi8KKyNkZWZpbmUgWENWUl9NT0RFTF9MRU4JCTE2ICAvKiB4Y3ZyIG1vZGVsIGxlbiAqLworCisvKiBQSFkgTWljcm9jb2RlIGRvd25sb2FkIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgcGh5X3Vjb2RlIHsKIAl1c2hvcnQJQWRkcjsKIAl1c2hvcnQJRGF0YTsKIH07CiAKKy8qIFNsb3cgQnVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogTW9kdWxlIDAgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdQSU9fTF9JTgkJMHgxNQkJLyogR1BJTyBpbnB1dCAobG93KSAqLworI2RlZmluZSBHUElPX0xfT1VUCQkweDE2CQkvKiBHUElPIG91dHB1dCAobG93KSAqLworI2RlZmluZSBHUElPX0xfRElSCQkweDE3CQkvKiBHUElPIGRpcmVjdGlvbiAobG93KSAqLworI2RlZmluZSBHUElPX0hfSU4JCTB4MTkJCS8qIEdQSU8gaW5wdXQgKGhpZ2gpICovCisjZGVmaW5lIEdQSU9fSF9PVVQJCTB4MUEJCS8qIEdQSU8gb3V0cHV0IChoaWdoKSAqLworI2RlZmluZSBHUElPX0hfRElSCQkweDFCCQkvKiBHUElPIGRpcmVjdGlvbiAoaGlnaCkgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIG90aGVyIHNsb3cgYnVzIHJlZ2lzdGVycyBjYW4gYmUgYWRkZWQgYXMgbmVlZGVkICovCisKKworLyoKICAqIFRyYW5zbWl0IFNlcXVlbmNlciBDb21tYW5kIERlc2NyaXB0b3IgZGVmaW5pdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy8gVGhpcyBkZXNjcmlwdG9yIG11c3QgYmUgcGxhY2VkIGluIEdSQU0uICBUaGUgYWRkcmVzcyBvZiB0aGlzIGRlc2NyaXB0b3IKLS8vIChhbG9uZyB3aXRoIGEgY291cGxlIG9mIGNvbnRyb2wgYml0cykgaXMgcHVzaGVkIG9udG8gdGhlIFB4aENtZFEgb3IgUHhsQ21kUQotLy8gKFByb3h5IGhpZ2ggb3IgbG93IGNvbW1hbmQgcXVldWUpLiAgVGhpcyBkYXRhIGlzIHJlYWQgYnkgdGhlIFByb3h5IFNlcXVlbmNlciwKLS8vIHdoaWNoIHB1c2hlcyBpdCBvbnRvIHRoZSBYbXRDbWRRLCB3aGljaCBpcyAoZXZlbnR1YWxseSkgcmVhZCBieSB0aGUgVHJhbnNtaXQKLS8vIFNlcXVlbmNlciwgY2F1c2luZyBhIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZC4gIE5vdCBhbGwgZmllbGRzIGFyZSB2YWxpZCBmb3IKLS8vIGFsbCBjb21tYW5kcyAtIHNlZSB0aGUgU2FoYXJhIHNwZWMgZm9yIGRldGFpbHMuICBOb3RlIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMKLS8vIG9ubHkgdmFsaWQgd2hlbiBjb21waWxlZCBvbiBhIGxpdHRsZSBlbmRpYW4gbWFjaGluZS4KKyAqCisgKiBUaGlzIGRlc2NyaXB0b3IgbXVzdCBiZSBwbGFjZWQgaW4gR1JBTS4gIFRoZSBhZGRyZXNzIG9mIHRoaXMgZGVzY3JpcHRvcgorICogKGFsb25nIHdpdGggYSBjb3VwbGUgb2YgY29udHJvbCBiaXRzKSBpcyBwdXNoZWQgb250byB0aGUgUHhoQ21kUSBvciBQeGxDbWRRCisgKiAoUHJveHkgaGlnaCBvciBsb3cgY29tbWFuZCBxdWV1ZSkuICBUaGlzIGRhdGEgaXMgcmVhZCBieSB0aGUgUHJveHkgU2VxdWVuY2VyLAorICogd2hpY2ggcHVzaGVzIGl0IG9udG8gdGhlIFhtdENtZFEsIHdoaWNoIGlzIChldmVudHVhbGx5KSByZWFkIGJ5IHRoZSBUcmFuc21pdAorICogU2VxdWVuY2VyLCBjYXVzaW5nIGEgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkLiAgTm90IGFsbCBmaWVsZHMgYXJlIHZhbGlkIGZvcgorICogYWxsIGNvbW1hbmRzIC0gc2VlIHRoZSBTYWhhcmEgc3BlYyBmb3IgZGV0YWlscy4gIE5vdGUgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcworICogb25seSB2YWxpZCB3aGVuIGNvbXBpbGVkIG9uIGEgbGl0dGxlIGVuZGlhbiBtYWNoaW5lLgorICovCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLXN0cnVjdCBYTVRfREVTQyB7Ci0JdXNob3J0CVhtdExlbjsJCQkvLyB3b3JkIDAsIGJpdHMgWzE1OjBdIC0gIHRyYW5zbWl0IGxlbmd0aAotCXVuc2lnbmVkIGNoYXIJWG10Q3RsOwkJCS8vIHdvcmQgMCwgYml0cyBbMjM6MTZdIC0gdHJhbnNtaXQgY29udHJvbCBieXRlCi0JdW5zaWduZWQgY2hhcglDbWQ7CQkJLy8gd29yZCAwLCBiaXRzIFszMToyNF0gLSB0cmFuc21pdCBjb21tYW5kIHBsdXMgbWlzYy4KLQl1MzIJWG10QnVmSWQ7CQkvLyB3b3JkIDEsIGJpdHMgWzMxOjBdIC0gIHRyYW5zbWl0IGJ1ZmZlciBJRAotCXVuc2lnbmVkIGNoYXIJVGNwU3RydDsJCS8vIHdvcmQgMiwgYml0cyBbNzowXSAtICAgYnl0ZSBhZGRyZXNzIG9mIFRDUCBoZWFkZXIKLQl1bnNpZ25lZCBjaGFyCUlwU3RydDsJCQkvLyB3b3JkIDIsIGJpdHMgWzE1OjhdIC0gIGJ5dGUgYWRkcmVzcyBvZiBJUCBoZWFkZXIKLQl1c2hvcnQJSXBDa1N1bTsJCS8vIHdvcmQgMiwgYml0cyBbMzE6MTZdIC0gcGFydGlhbCBJUCBjaGVja3N1bQotCXVzaG9ydAlUY3BDa1N1bTsJCS8vIHdvcmQgMywgYml0cyBbMTU6MF0gLSAgcGFydGlhbCBUQ1AgY2hlY2tzdW0KLQl1c2hvcnQJUnN2ZDE7CQkJLy8gd29yZCAzLCBiaXRzIFszMToxNl0gLSBQQUQKLQl1MzIJUnN2ZDI7CQkJLy8gd29yZCA0LCBiaXRzIFszMTowXSAtICBQQUQKLQl1MzIJUnN2ZDM7CQkJLy8gd29yZCA1LCBiaXRzIFszMTowXSAtICBQQUQKLQl1MzIJUnN2ZDQ7CQkgICAgLy8gd29yZCA2LCBiaXRzIFszMTowXSAtICBQQUQKLQl1MzIJUnN2ZDU7CQkgICAgLy8gd29yZCA3LCBiaXRzIFszMTowXSAtICBQQUQKK3N0cnVjdCB4bXRfZGVzYyB7CisJdXNob3J0CSAgICAgICAgWG10TGVuOwkgICAgLyogd29yZCAwLCBiaXRzIFsxNTowXSAtICB0cmFuc21pdCBsZW5ndGggKi8KKwkvKiB3b3JkIDAsIGJpdHMgWzIzOjE2XSAtIHRyYW5zbWl0IGNvbnRyb2wgYnl0ZSAqLworCXVuc2lnbmVkIGNoYXIJWG10Q3RsOworCS8qIHdvcmQgMCwgYml0cyBbMzE6MjRdIC0gdHJhbnNtaXQgY29tbWFuZCBwbHVzIG1pc2MuICovCisJdW5zaWduZWQgY2hhcglDbWQ7CisJLyogd29yZCAxLCBiaXRzIFszMTowXSAtICB0cmFuc21pdCBidWZmZXIgSUQgKi8KKwl1MzIJWG10QnVmSWQ7CisJLyogd29yZCAyLCBiaXRzIFs3OjBdIC0gICBieXRlIGFkZHJlc3Mgb2YgVENQIGhlYWRlciAqLworCXVuc2lnbmVkIGNoYXIJVGNwU3RydDsKKwkvKiB3b3JkIDIsIGJpdHMgWzE1OjhdIC0gIGJ5dGUgYWRkcmVzcyBvZiBJUCBoZWFkZXIgKi8KKwl1bnNpZ25lZCBjaGFyCUlwU3RydDsKKwkvKiB3b3JkIDIsIGJpdHMgWzMxOjE2XSAtIHBhcnRpYWwgSVAgY2hlY2tzdW0gKi8KKwl1c2hvcnQJSXBDa1N1bTsKKwkvKiB3b3JkIDMsIGJpdHMgWzE1OjBdIC0gIHBhcnRpYWwgVENQIGNoZWNrc3VtICovCisJdXNob3J0CVRjcENrU3VtOworCXVzaG9ydAlSc3ZkMTsJCSAgICAvKiB3b3JkIDMsIGJpdHMgWzMxOjE2XSAtIFBBRCAqLworCXUzMglSc3ZkMjsJCSAgICAvKiB3b3JkIDQsIGJpdHMgWzMxOjBdIC0gIFBBRCAqLworCXUzMglSc3ZkMzsJCSAgICAvKiB3b3JkIDUsIGJpdHMgWzMxOjBdIC0gIFBBRCAqLworCXUzMglSc3ZkNDsJCSAgICAvKiB3b3JkIDYsIGJpdHMgWzMxOjBdIC0gIFBBRCAqLworCXUzMglSc3ZkNTsJCSAgICAvKiB3b3JkIDcsIGJpdHMgWzMxOjBdIC0gIFBBRCAqLwogfTsKICNwcmFnbWEgcGFjayhwb3ApCiAKLS8vIFhNVF9ERVNDIENtZCBieXRlIGRlZmluaXRpb25zCi0JCS8vIGNvbW1hbmQgY29kZXMKLSNkZWZpbmUgWE1UX0RFU0NfQ01EX1JBV19TRU5ECQkwCQkvLyByYXcgc2VuZCBkZXNjcmlwdG9yCi0jZGVmaW5lIFhNVF9ERVNDX0NNRF9DU1VNX0lOU0VSVAkxCQkvLyBjaGVja3N1bSBpbnNlcnQgZGVzY3JpcHRvcgotI2RlZmluZSBYTVRfREVTQ19DTURfRk9STUFUCQkyCQkvLyBmb3JtYXQgZGVzY3JpcHRvcgotI2RlZmluZSBYTVRfREVTQ19DTURfUFJJTUUJCTMJCS8vIHByaW1lIGRlc2NyaXB0b3IKLSNkZWZpbmUgWE1UX0RFU0NfQ01EX0NPREVfU0hGVAkJNgkJLy8gY29tYW5kIGNvZGUgc2hpZnQgKHNoaWZ0IHRvIGJpdHMgWzMxOjMwXSBpbiB3b3JkIDApCi0JCS8vIHNoaWZ0ZWQgY29tbWFuZCBjb2RlcwotI2RlZmluZSBYTVRfUkFXX1NFTkQJCShYTVRfREVTQ19DTURfUkFXX1NFTkQgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKLSNkZWZpbmUgWE1UX0NTVU1fSU5TRVJUCQkoWE1UX0RFU0NfQ01EX0NTVU1fSU5TRVJUIDw8IFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQpCi0jZGVmaW5lIFhNVF9GT1JNQVQJCQkoWE1UX0RFU0NfQ01EX0ZPUk1BVCAgICAgIDw8IFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQpCi0jZGVmaW5lIFhNVF9QUklNRQkJCShYTVRfREVTQ19DTURfUFJJTUUgICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKy8qIHN0cnVjdCB4bXRfZGVzYyBDbWQgYnl0ZSBkZWZpbml0aW9ucyAqLworCQkvKiBjb21tYW5kIGNvZGVzICovCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9SQVdfU0VORAkJMAkvKiByYXcgc2VuZCBkZXNjcmlwdG9yICovCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9DU1VNX0lOU0VSVAkxCS8qIGNoZWNrc3VtIGluc2VydCBkZXNjcmlwdG9yICovCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9GT1JNQVQJCTIJLyogZm9ybWF0IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgWE1UX0RFU0NfQ01EX1BSSU1FCQkzCS8qIHByaW1lIGRlc2NyaXB0b3IgKi8KKy8qIGNvbWFuZCBjb2RlIHNoaWZ0IChzaGlmdCB0byBiaXRzIFszMTozMF0gaW4gd29yZCAwKSAqLworI2RlZmluZSBYTVRfREVTQ19DTURfQ09ERV9TSEZUCQk2CisJCS8qIHNoaWZ0ZWQgY29tbWFuZCBjb2RlcyAqLworI2RlZmluZSBYTVRfUkFXX1NFTkQJKFhNVF9ERVNDX0NNRF9SQVdfU0VORCAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorI2RlZmluZSBYTVRfQ1NVTV9JTlNFUlQJKFhNVF9ERVNDX0NNRF9DU1VNX0lOU0VSVCA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorI2RlZmluZSBYTVRfRk9STUFUCShYTVRfREVTQ19DTURfRk9STUFUICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX1BSSU1FCShYTVRfREVTQ19DTURfUFJJTUUgICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKIAotLy8gWE1UX0RFU0MgQ29udHJvbCBCeXRlIChYbXRDdGwpIGRlZmluaXRpb25zCi0vLyBOT1RFOiAgVGhlc2UgYml0cyBkbyBub3Qgd29yayBvbiBTYWhhcmEgKFJldiBBKSEKLSNkZWZpbmUJWE1UX0NUTF9QQVVTRV9GUkFNRQkJMHg4MAkvLyBjdXJyZW50IGZyYW1lIGlzIGEgcGF1c2UgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpCi0jZGVmaW5lCVhNVF9DVExfQ09OVFJPTF9GUkFNRQkJMHg0MAkvLyBjdXJyZW50IGZyYW1lIGlzIGEgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpCi0jZGVmaW5lCVhNVF9DVExfUEVSX1BLVF9RVUFMCQkweDIwCS8vIHBlciBwYWNrZXQgcXVhbGlmaWVyCi0jZGVmaW5lCVhNVF9DVExfUEFEX01PREVfTk9ORQkJMHgwMAkvLyBkbyBub3QgcGFkIGZyYW1lCi0jZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjQJCTB4MDgJLy8gcGFkIGZyYW1lIHRvIDY0IGJ5dGVzCi0jZGVmaW5lCVhNVF9DVExfUEFEX01PREVfVkxBTl82OAkweDEwCS8vIHBhZCBmcmFtZSB0byA2NCBieXRlcywgYW5kIFZMQU4gZnJhbWVzIHRvIDY4IGJ5dGVzCi0jZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjgJCTB4MTgJLy8gcGFkIGZyYW1lIHRvIDY4IGJ5dGVzCi0jZGVmaW5lCVhNVF9DVExfR0VOX0ZDUwkJCTB4MDQJLy8gZ2VuZXJhdGUgRkNTIChDUkMpIGZvciB0aGlzIGZyYW1lCi0jZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzAJCTB4MDAJLy8gZG8gbm90IGRlbGF5IEZDUyBjYWxjdXRpb24KLSNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMQkJMHgwMQkvLyBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMSAoNC1ieXRlKSB3b3JkCi0jZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzIJCTB4MDIJLy8gZGVsYXkgRkNTIGNhbGN1bGF0aW9uIGJ5IDIgKDQtYnl0ZSkgd29yZHMKLSNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMwkJMHgwMwkvLyBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMyAoNC1ieXRlKSB3b3JkcworLyoKKyAqIHN0cnVjdCB4bXRfZGVzYyBDb250cm9sIEJ5dGUgKFhtdEN0bCkgZGVmaW5pdGlvbnMKKyAqIE5PVEU6ICBUaGVzZSBiaXRzIGRvIG5vdCB3b3JrIG9uIFNhaGFyYSAoUmV2IEEpIQorICovCisvKiBjdXJyZW50IGZyYW1lIGlzIGEgcGF1c2UgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpICovCisjZGVmaW5lCVhNVF9DVExfUEFVU0VfRlJBTUUJCTB4ODAKKy8qIGN1cnJlbnQgZnJhbWUgaXMgYSBjb250cm9sIGZyYW1lIChmb3Igc3RhdGlzdGljcykgKi8KKyNkZWZpbmUJWE1UX0NUTF9DT05UUk9MX0ZSQU1FCQkweDQwCisjZGVmaW5lCVhNVF9DVExfUEVSX1BLVF9RVUFMCQkweDIwCS8qIHBlciBwYWNrZXQgcXVhbGlmaWVyICovCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfTk9ORQkJMHgwMAkvKiBkbyBub3QgcGFkIGZyYW1lICovCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjQJCTB4MDgJLyogcGFkIGZyYW1lIHRvIDY0IGJ5dGVzICovCisvKiBwYWQgZnJhbWUgdG8gNjQgYnl0ZXMsIGFuZCBWTEFOIGZyYW1lcyB0byA2OCBieXRlcyAqLworI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFX1ZMQU5fNjgJMHgxMAorI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFXzY4CQkweDE4CS8qIHBhZCBmcmFtZSB0byA2OCBieXRlcyAqLworLyogZ2VuZXJhdGUgRkNTIChDUkMpIGZvciB0aGlzIGZyYW1lICovCisjZGVmaW5lCVhNVF9DVExfR0VOX0ZDUwkJCTB4MDQKKyNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMAkJMHgwMAkvKiBkbyBub3QgZGVsYXkgRkNTIGNhbGN1dGlvbiAqLworLyogZGVsYXkgRkNTIGNhbGN1bGF0aW9uIGJ5IDEgKDQtYnl0ZSkgd29yZCAqLworI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18xCQkweDAxCisvKiBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMiAoNC1ieXRlKSB3b3JkcyAqLworI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18yCQkweDAyCisvKiBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMyAoNC1ieXRlKSB3b3JkcyAqLworI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18zCQkweDAzCiAKLS8vIFhNVF9ERVNDIFhtdEJ1ZklkIGRlZmluaXRpb24KLSNkZWZpbmUgWE1UX0JVRl9JRF9TSEZUCQk4CS8vIFRoZSBYbXQgYnVmZmVyIElEIGlzIGZvcm1lZCBieSBkaXZpZGluZwotCQkJCQkvLyB0aGUgYnVmZmVyIChEUkFNKSBhZGRyZXNzIGJ5IDI1NiAob3IgPDwgOCkKKy8qIHN0cnVjdCB4bXRfZGVzYyBYbXRCdWZJZCBkZWZpbml0aW9uICovCisvKgorICogVGhlIFhtdCBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nIHRoZSBidWZmZXIgKERSQU0pIGFkZHJlc3MKKyAqIGJ5IDI1NiAob3IgPDwgOCkKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJlY2VpdmVyIFNlcXVlbmNlciBEZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBYTVRfQlVGX0lEX1NIRlQJCTgKIAotLy8gUmVjZWl2ZSBFdmVudCBRdWV1ZSAocXVldWVzIDMgLSA2KSBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUJUkNWX0VWVFFfUkJGSURfTUFTSwkJMHgwMDAwRkZGRgkvLyBiaXQgbWFzayBmb3IgdGhlIFJlY2VpdmUgQnVmZmVyIElECisvKiBSZWNlaXZlciBTZXF1ZW5jZXIgRGVmaW5pdGlvbnMgKi8KIAotLy8gUmVjZWl2ZSBCdWZmZXIgSUQgZGVmaW5pdGlvbgotI2RlZmluZSBSQ1ZfQlVGX0lEX1NIRlQJCTUJLy8gVGhlIFJjdiBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nCi0JCQkJCS8vIHRoZSBidWZmZXIgKERSQU0pIGFkZHJlc3MgYnkgMzIgKG9yIDw8IDUpCisvKiBSZWNlaXZlIEV2ZW50IFF1ZXVlIChxdWV1ZXMgMyAtIDYpIGJpdCBkZWZpbml0aW9ucyAqLworLyogYml0IG1hc2sgZm9yIHRoZSBSZWNlaXZlIEJ1ZmZlciBJRCAqLworI2RlZmluZQlSQ1ZfRVZUUV9SQkZJRF9NQVNLCTB4MDAwMEZGRkYKIAotLy8gRm9ybWF0IG9mIHRoZSAxOCBieXRlIFJlY2VpdmUgQnVmZmVyIHJldHVybmVkIGJ5IHRoZQotLy8gUmVjZWl2ZSBTZXF1ZW5jZXIgZm9yIHJlY2VpdmVkIHBhY2tldHMKKy8qIFJlY2VpdmUgQnVmZmVyIElEIGRlZmluaXRpb24gKi8KKy8qCisgKiBUaGUgUmN2IGJ1ZmZlciBJRCBpcyBmb3JtZWQgYnkgZGl2aWRpbmcgdGhlIGJ1ZmZlciAoRFJBTSkgYWRkcmVzcworICogYnkgMzIgKG9yIDw8IDUpCisgKi8KKyNkZWZpbmUgUkNWX0JVRl9JRF9TSEZUCQk1CisKKy8qCisgKiBGb3JtYXQgb2YgdGhlIDE4IGJ5dGUgUmVjZWl2ZSBCdWZmZXIgcmV0dXJuZWQgYnkgdGhlCisgKiBSZWNlaXZlIFNlcXVlbmNlciBmb3IgcmVjZWl2ZWQgcGFja2V0cworICovCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLXN0cnVjdCBSQ1ZfQlVGX0hEUiB7Ci0JdTMyCVN0YXR1czsJCQkJLy8gU3RhdHVzIHdvcmQgZnJvbSBSY3YgU2VxIFBhcnNlcgotCXVzaG9ydAlMZW5ndGg7CQkJCS8vIFJjdiBwYWNrZXQgYnl0ZSBjb3VudAorc3RydWN0IHJjdl9idWZfaGRyIHsKKwl1MzIJU3RhdHVzOwkJLyogU3RhdHVzIHdvcmQgZnJvbSBSY3YgU2VxIFBhcnNlciAqLworCXVzaG9ydAlMZW5ndGg7CQkvKiBSY3YgcGFja2V0IGJ5dGUgY291bnQgKi8KIAl1bmlvbiB7Ci0JCXVzaG9ydAkJVGNwQ3N1bTsJLy8gVENQIGNoZWNrc3VtCisJCXVzaG9ydAkJVGNwQ3N1bTsJLyogVENQIGNoZWNrc3VtICovCiAJCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBjaGFyCVRjcENzdW1MOwkvLyBsb3dlciA4IGJpdHMgb2YgdGhlIFRDUCBjaGVja3N1bQotCQkJdW5zaWduZWQgY2hhcglMaW5rSGFzaDsJLy8gTGluayBoYXNoIChtdWx0aWNhc3QgZnJhbWVzIG9ubHkpCisJCQkvKiBsb3dlciA4IGJpdHMgb2YgdGhlIFRDUCBjaGVja3N1bSAqLworCQkJdW5zaWduZWQgY2hhcglUY3BDc3VtTDsKKwkJCS8qIExpbmsgaGFzaCAobXVsdGljYXN0IGZyYW1lcyBvbmx5KSAqLworCQkJdW5zaWduZWQgY2hhcglMaW5rSGFzaDsKIAkJfTsKIAl9OwotCXVzaG9ydAlTa3RIYXNoOwkJCS8vIFNvY2tldCBoYXNoCi0JdW5zaWduZWQgY2hhcglUY3BIZHJPZmZzZXQ7CQkvLyBUQ1AgaGVhZGVyIG9mZnNldCBpbnRvIHBhY2tldAotCXVuc2lnbmVkIGNoYXIJSXBIZHJPZmZzZXQ7CQkvLyBJUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0Ci0JdTMyCVRwekhhc2g7CQkJLy8gVG9lcGxpdHogaGFzaAotCXVzaG9ydAlSZXNlcnZlZDsJCQkvLyBSZXNlcnZlZAorCXVzaG9ydAlTa3RIYXNoOwkJLyogU29ja2V0IGhhc2ggKi8KKwl1bnNpZ25lZCBjaGFyCVRjcEhkck9mZnNldDsJLyogVENQIGhlYWRlciBvZmZzZXQgaW50byBwYWNrZXQgKi8KKwl1bnNpZ25lZCBjaGFyCUlwSGRyT2Zmc2V0OwkvKiBJUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0ICovCisJdTMyCSAgICAgICAJVHB6SGFzaDsJLyogVG9lcGxpdHogaGFzaCAqLworCXVzaG9ydAkgICAgICAgIFJlc2VydmVkOwkvKiBSZXNlcnZlZCAqLwogfTsKICNwcmFnbWEgcGFjayhwb3ApCiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBRdWV1ZSBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUXVldWUgZGVmaW5pdGlvbnMgKi8KIAogLyogSW5ncmVzcyAocmVhZCBvbmx5KSBxdWV1ZSBudW1iZXJzICovCi0jZGVmaW5lIFBYWV9CVUZfUQkJMAkJLyogUHJveHkgQnVmZmVyIFF1ZXVlICovCi0jZGVmaW5lIEhTVF9FVlRfUQkJMQkJLyogSG9zdCBFdmVudCBRdWV1ZSAqLwotI2RlZmluZSBYTVRfQlVGX1EJCTIJCS8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSAqLwotI2RlZmluZSBTS1RfRVZMX1EJCTMJCS8qIFJjdlNxciBTb2NrZXQgRXZlbnQgTG93IFByaW9yaXR5IFF1ZXVlICovCi0jZGVmaW5lIFJDVl9FVkxfUQkJNAkJLyogUmN2U3FyIFJjdiBFdmVudCBMb3cgUHJpb3JpdHkgUXVldWUgKi8KLSNkZWZpbmUgU0tUX0VWSF9RCQk1CQkvKiBSY3ZTcXIgU29ja2V0IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KLSNkZWZpbmUgUkNWX0VWSF9RCQk2CQkvKiBSY3ZTcXIgUmN2IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KLSNkZWZpbmUgRE1BX1JTUF9RCQk3CQkvKiBEbWEgUmVzcG9uc2UgUXVldWUgLSBvbmUgcGVyIENQVSBjb250ZXh0ICovCisjZGVmaW5lIFBYWV9CVUZfUQkwCS8qIFByb3h5IEJ1ZmZlciBRdWV1ZSAqLworI2RlZmluZSBIU1RfRVZUX1EJMQkvKiBIb3N0IEV2ZW50IFF1ZXVlICovCisjZGVmaW5lIFhNVF9CVUZfUQkyCS8qIFRyYW5zbWl0IEJ1ZmZlciBRdWV1ZSAqLworI2RlZmluZSBTS1RfRVZMX1EJMwkvKiBSY3ZTcXIgU29ja2V0IEV2ZW50IExvdyBQcmlvcml0eSBRdWV1ZSAqLworI2RlZmluZSBSQ1ZfRVZMX1EJNAkvKiBSY3ZTcXIgUmN2IEV2ZW50IExvdyBQcmlvcml0eSBRdWV1ZSAqLworI2RlZmluZSBTS1RfRVZIX1EJNQkvKiBSY3ZTcXIgU29ja2V0IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KKyNkZWZpbmUgUkNWX0VWSF9RCTYJLyogUmN2U3FyIFJjdiBFdmVudCBIaWdoIFByaW9yaXR5IFF1ZXVlICovCisjZGVmaW5lIERNQV9SU1BfUQk3CS8qIERtYSBSZXNwb25zZSBRdWV1ZSAtIG9uZSBwZXIgQ1BVIGNvbnRleHQgKi8KIC8qIExvY2FsIChyZWFkL3dyaXRlKSBxdWV1ZSBudW1iZXJzICovCi0jZGVmaW5lIExPQ0FMX0FfUQkJOAkJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KLSNkZWZpbmUgTE9DQUxfQl9RCQk5CQkvKiBTcGFyZSBsb2NhbCBRdWV1ZSAqLwotI2RlZmluZSBMT0NBTF9DX1EJCTEwCQkvKiBTcGFyZSBsb2NhbCBRdWV1ZSAqLwotI2RlZmluZSBGU01fRVZUX1EJCTExCQkvKiBGaW5pdGUtU3RhdGUtTWFjaGluZSBFdmVudCBRdWV1ZSAqLwotI2RlZmluZSBTQkZfUEFMX1EJCTEyCQkvKiBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGxvdykgUXVldWUgKi8KLSNkZWZpbmUgU0JGX1BBSF9RCQkxMwkJLyogU3lzdGVtIEJ1ZmZlciBQaHlzaWNhbCBBZGRyZXNzIChoaWdoKSBRdWV1ZSAqLwotI2RlZmluZSBTQkZfVkFMX1EJCTE0CQkvKiBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAobG93KSBRdWV1ZSAqLwotI2RlZmluZSBTQkZfVkFIX1EJCTE1CQkvKiBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAoaGlnaCkgUXVldWUgKi8KKyNkZWZpbmUgTE9DQUxfQV9RCTgJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KKyNkZWZpbmUgTE9DQUxfQl9RCTkJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KKyNkZWZpbmUgTE9DQUxfQ19RCTEwCS8qIFNwYXJlIGxvY2FsIFF1ZXVlICovCisjZGVmaW5lIEZTTV9FVlRfUQkxMQkvKiBGaW5pdGUtU3RhdGUtTWFjaGluZSBFdmVudCBRdWV1ZSAqLworI2RlZmluZSBTQkZfUEFMX1EJMTIJLyogU3lzdGVtIEJ1ZmZlciBQaHlzaWNhbCBBZGRyZXNzIChsb3cpIFF1ZXVlICovCisjZGVmaW5lIFNCRl9QQUhfUQkxMwkvKiBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGhpZ2gpIFF1ZXVlKi8KKyNkZWZpbmUgU0JGX1ZBTF9RCTE0CS8qIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChsb3cpIFF1ZXVlICovCisjZGVmaW5lIFNCRl9WQUhfUQkxNQkvKiBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAoaGlnaCkgUXVldWUgKi8KIC8qIEVncmVzcyAod3JpdGUgb25seSkgcXVldWUgbnVtYmVycyAqLwotI2RlZmluZSBIMkdfQ01EX1EJCTE2CQkvKiBIb3N0IHRvIEdsYlJhbSBETUEgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBIMkRfQ01EX1EJCTE3CQkvKiBIb3N0IHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgRzJIX0NNRF9RCQkxOAkJLyogR2xiUmFtIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgRzJEX0NNRF9RCQkxOQkJLyogR2xiUmFtIHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgRDJIX0NNRF9RCQkyMAkJLyogRFJBTSB0byBIb3N0IERNQSBDb21tYW5kIFF1ZXVlICovCi0jZGVmaW5lIEQyR19DTURfUQkJMjEJCS8qIERSQU0gdG8gR2xiUmFtIERNQSBDb21tYW5kIFF1ZXVlICovCi0jZGVmaW5lIEQyRF9DTURfUQkJMjIJCS8qIERSQU0gdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBQWExfQ01EX1EJCTIzCQkvKiBMb3cgUHJpb3JpdHkgUHJveHkgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBQWEhfQ01EX1EJCTI0CQkvKiBIaWdoIFByaW9yaXR5IFByb3h5IENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgUlNRX0NNRF9RCQkyNQkJLyogUmVjZWl2ZSBTZXF1ZW5jZXIgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBSQ1ZfQlVGX1EJCTI2CQkvKiBSZWNlaXZlIEJ1ZmZlciBRdWV1ZSAqLworI2RlZmluZSBIMkdfQ01EX1EJMTYJLyogSG9zdCB0byBHbGJSYW0gRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgSDJEX0NNRF9RCTE3CS8qIEhvc3QgdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBHMkhfQ01EX1EJMTgJLyogR2xiUmFtIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgRzJEX0NNRF9RCTE5CS8qIEdsYlJhbSB0byBEUkFNIERNQSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIEQySF9DTURfUQkyMAkvKiBEUkFNIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgRDJHX0NNRF9RCTIxCS8qIERSQU0gdG8gR2xiUmFtIERNQSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIEQyRF9DTURfUQkyMgkvKiBEUkFNIHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUFhMX0NNRF9RCTIzCS8qIExvdyBQcmlvcml0eSBQcm94eSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIFBYSF9DTURfUQkyNAkvKiBIaWdoIFByaW9yaXR5IFByb3h5IENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUlNRX0NNRF9RCTI1CS8qIFJlY2VpdmUgU2VxdWVuY2VyIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUkNWX0JVRl9RCTI2CS8qIFJlY2VpdmUgQnVmZmVyIFF1ZXVlICovCiAKIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIFByb3h5IENvbW1hbmQgcXVldWVzIChQWExfQ01EX1EgYW5kIFBYSF9DTURfUSkgKi8KLSNkZWZpbmUgUFhZX0NPUFlfRU4JCTB4MDAyMDAwMDAJCS8qIGVuYWJsZSBjb3B5IG9mIHhtdCBkZXNjcmlwdG9yIHRvIHhtdCBjb21tYW5kIHF1ZXVlICovCi0jZGVmaW5lIFBYWV9TSVpFXzE2CQkweDAwMDAwMDAwCQkvKiBjb3B5IDE2IGJ5dGVzICovCi0jZGVmaW5lIFBYWV9TSVpFXzMyCQkweDAwMTAwMDAwCQkvKiBjb3B5IDMyIGJ5dGVzICovCisvKiBlbmFibGUgY29weSBvZiB4bXQgZGVzY3JpcHRvciB0byB4bXQgY29tbWFuZCBxdWV1ZSAqLworI2RlZmluZSBQWFlfQ09QWV9FTgkweDAwMjAwMDAwCisjZGVmaW5lIFBYWV9TSVpFXzE2CTB4MDAwMDAwMDAJLyogY29weSAxNiBieXRlcyAqLworI2RlZmluZSBQWFlfU0laRV8zMgkweDAwMTAwMDAwCS8qIGNvcHkgMzIgYnl0ZXMgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTWEcgRUVQUk9NL0ZsYXNoIENvbmZpZ3VyYXRpb24gRGVmaW5pdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNYRyBFRVBST00vRmxhc2ggQ29uZmlndXJhdGlvbiBEZWZpbml0aW9ucyAqLworCisvKiBMb2NhdGlvbiBvZiBjb25maWd1cmF0aW9uIGRhdGEgaW4gRUVQUk9NIG9yIEZsYXNoICovCisvKiBzdGFydCBhZGRyIGZvciBjb25maWcgaW5mbyBpbiBFRVBST00gKi8KKyNkZWZpbmUJRUVQUk9NX0NPTkZJR19TVEFSVF9BRERSCTB4MDAKKy8qIHN0YXJ0IGFkZHIgZm9yIGNvbmZpZyBpbmZvIGluIEZsYXNoICovCisjZGVmaW5lCUZMQVNIX0NPTkZJR19TVEFSVF9BRERSCQkweDgwCisKKy8qIENvbmZpZ3VyYXRpb24gZGF0YSBzZWN0aW9uIGRlZmluZXMgKi8KKyNkZWZpbmUJSFdfQ0ZHX1NFQ1RJT05fU0laRQk1MTIJLyogc2l6ZSBvZiBIL1cgc2VjdGlvbiAqLworI2RlZmluZQlIV19DRkdfU0VDVElPTl9TSVpFX0EJMjU2CS8qIHNpemUgb2YgSC9XIHNlY3Rpb24gKFNhaGFyYSByZXYgQSkgKi8KKy8qIHN0YXJ0aW5nIGxvY2F0aW9uIChvZmZzZXQpIG9mIFMvVyBzZWN0aW9uICovCisjZGVmaW5lCVNXX0NGR19TRUNUSU9OX1NUQVJUCTUxMgorLyogc3RhcnRpbmcgbG9jYXRpb24gKG9mZnNldCkgb2YgUy9XIHNlY3Rpb24gKFNhaGFyYSByZXYgQSkgKi8KKyNkZWZpbmUJU1dfQ0ZHX1NFQ1RJT05fU1RBUlRfQQkyNTYKKyNkZWZpbmUJU1dfQ0ZHX1NFQ1RJT05fU0laRQkxMjgJLyogc2l6ZSBvZiBTL1cgc2VjdGlvbiAqLworLyoKKyAqIEgvVyBjb25maWd1cmF0aW9uIGRhdGEgbWFnaWMgd29yZCBHb2VzIGluIEFkZHIgZmllbGQgb2YgZmlyc3QKKyAqIHN0cnVjdCBod19jZmdfZGF0YSBlbnRyeQorICovCisjZGVmaW5lCUhXX0NGR19NQUdJQ19XT1JECTB4QTVBNQorLyoKKyAqIEgvVyBjb25maWd1cmF0aW9uIGRhdGEgdGVybWluYXRvciAgR29lcyBpbiBBZGRyIGZpZWxkIG9mIGxhc3QKKyAqIHN0cnVjdCBod19jZmdfZGF0YSBlbnRyeQorICovCisjZGVmaW5lCUhXX0NGR19URVJNSU5BVE9SCTB4RkZGRgorCisjZGVmaW5lCVNXX0NGR19NQUdJQ19XT1JECTB4NUE1QQkvKiBTL1cgY29uZmlndXJhdGlvbiBkYXRhIG1hZ2ljIHdvcmQgKi8KKwogI3ByYWdtYSBwYWNrKHB1c2gsIDEpCi0KLS8qICovCi1zdHJ1Y3QgSFdfQ0ZHX0RBVEEgewotCXVzaG9ydAkJQWRkcjsKLQl1bmlvbiB7Ci0JCXVzaG9ydAlEYXRhOwotCQl1c2hvcnQJQ2hlY2tzdW07Ci0JfTsKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIGFuIGVsZW1lbnQgb2YgSC9XIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAqIFJlYWQgYnkgdGhlIFNhaGFyYSBoYXJkd2FyZQorICovCitzdHJ1Y3QgaHdfY2ZnX2RhdGEgeworCXVzaG9ydAlBZGRyOworCXVzaG9ydAlEYXRhOwogfTsKIAotLyogKi8KLSNkZWZpbmUJTlVNX0hXX0NGR19FTlRSSUVTCSgoMTI4L3NpemVvZihzdHJ1Y3QgSFdfQ0ZHX0RBVEEpKSAtIDQpCisvKgorICogTnVtYmVyIG9mIHN0cnVjdCBod19jZmdfZGF0YSBzdHJ1Y3R1cmVzIHRvIHB1dCBpbiB0aGUgY29uZmlndXJhdGlvbiBkYXRhCisgKiBkYXRhIHN0cnVjdHVyZSAoc3RydWN0IHN4Z19jb25maWcgb3Igc3RydWN0IHN4Z19jb25maWdfYSkuICBUaGUgbnVtYmVyIGlzCisgKiBjb21wdXRlZCB0byBmaWxsIHRoZSBlbnRpcmUgSC9XIGNvbmZpZyBzZWN0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUJTlVNX0hXX0NGR19FTlRSSUVTCQkJCQkJXAorCQkJKEhXX0NGR19TRUNUSU9OX1NJWkUgLyBzaXplb2Yoc3RydWN0IGh3X2NmZ19kYXRhKSkKKyNkZWZpbmUJTlVNX0hXX0NGR19FTlRSSUVTX0EJCQkJCQlcCisJCQkoSFdfQ0ZHX1NFQ1RJT05fU0laRV9BIC8gc2l6ZW9mKHN0cnVjdCBod19jZmdfZGF0YSkpCiAKLS8qIE1BQyBhZGRyZXNzICovCi1zdHJ1Y3QgU1hHX0NPTkZJR19NQUMgewotCXVuc2lnbmVkIGNoYXIJCU1hY0FkZHJbNl07CQkJLyogTUFDIEFkZHJlc3MgKi8KKy8qIE1BQyBhZGRyZXNzIHN0cnVjdHVyZSAqLworc3RydWN0IHN4Z19jb25maWdfbWFjIHsKKwl1bnNpZ25lZCBjaGFyCU1hY0FkZHJbNl07CS8qIE1BQyBBZGRyZXNzICovCiB9OwogCi0vKiAqLwotc3RydWN0IEFUS19GUlUgeworLyogRlJVIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgYXRrX2ZydSB7CiAJdW5zaWduZWQgY2hhcgkJUGFydE51bVs2XTsKIAl1bnNpZ25lZCBjaGFyCQlSZXZpc2lvblsyXTsKIAl1bnNpZ25lZCBjaGFyCQlTZXJpYWxbMTRdOwpAQCAtNjk3LDM4ICs5MDksMTEyIEBACiAjZGVmaW5lIEVNQ19GUlVfRk9STUFUCQkweDAwMDUKICNkZWZpbmUgTk9fRlJVX0ZPUk1BVAkJMHhGRkZGCiAKLS8qIEVFUFJPTS9GbGFzaCBGb3JtYXQgKi8KLXN0cnVjdCBTWEdfQ09ORklHIHsKLQkvKiAqLwotCS8qIFNlY3Rpb24gMSAoMTI4IGJ5dGVzKSAqLwotCS8qICovCi0JdXNob3J0CQkJTWFnaWNXb3JkOwkJCS8qIEVFUFJPTS9GTEFTSCBNYWdpYyBjb2RlICdBNUE1JyAqLwotCXVzaG9ydAkJCVNwaUNsa3M7CQkJLyogU1BJIGJ1cyBjbG9jayBkaXZpZGVycyAqLwotCXN0cnVjdCBIV19DRkdfREFUQQkJSHdDZmdbTlVNX0hXX0NGR19FTlRSSUVTXTsKLQkvKiAqLwotCS8qICovCi0JLyogKi8KLQl1c2hvcnQJCQlWZXJzaW9uOwkJCS8qIEVFUFJPTSBmb3JtYXQgdmVyc2lvbiAqLwotCXN0cnVjdCBTWEdfQ09ORklHX01BQwlNYWNBZGRyWzRdOwkJCS8qIHNwYWNlIGZvciA0IE1BQyBhZGRyZXNzZXMgKi8KLQlzdHJ1Y3QgQVRLX0ZSVQkJCUF0a0ZydTsJCQkJLyogRlJVIGluZm9ybWF0aW9uICovCi0JdXNob3J0CQkJT2VtRnJ1Rm9ybWF0OwkJLyogT0VNIEZSVSBmb3JtYXQgdHlwZSAqLwotCXVuc2lnbmVkIGNoYXIJCQlPZW1GcnVbNzZdOwkJCS8qIE9FTSBGUlUgaW5mb3JtYXRpb24gKG9wdGlvbmFsKSAqLwotCXVzaG9ydAkJCUNoZWNrc3VtOwkJCS8qIENoZWNrc3VtIG9mIHNlY3Rpb24gMiAqLwotCS8qIENTIGluZm8gWFhYVE9ETyAqLworI2RlZmluZQlBVEtfT0VNX0FTU1lfU0laRQkxMAkvKiBhc3N5IG51bSBpcyA5IGNoYXJzIHBsdXMgXDAgKi8KKworLyogT0VNIEZSVSBzdHJ1Y3R1cmUgZm9yIEFsYWNyaXRlY2ggKi8KK3N0cnVjdCBhdGtfb2VtIHsKKwl1bnNpZ25lZCBjaGFyIEFzc3lbQVRLX09FTV9BU1NZX1NJWkVdOwogfTsKKworI2RlZmluZQlPRU1fRUVQUk9NX0ZSVVNJWkUJNzQJLyogc2l6ZSBvZiBPRU0gZnJ1IGluZm8gLSBzaXplICovCisvKiBjaG9zZW4gdG8gZmlsbCBvdXQgdGhlIFMvVyBzZWN0aW9uICovCisKK3VuaW9uIG9lbV9mcnUgewkJCS8qIE9FTSBGUlUgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIE9lbUZydVtPRU1fRUVQUk9NX0ZSVVNJWkVdOworCXN0cnVjdCBhdGtfb2VtIEF0a09lbTsKK307CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIHRoZSBTL1cgY29uZmlndXJhdGlvbiBkYXRhLiAqLworc3RydWN0IHN3X2NmZ19kYXRhIHsKKwl1c2hvcnQJCQlNYWdpY1dvcmQ7CS8qIE1hZ2ljIHdvcmQgZm9yIHNlY3Rpb24gMiAqLworCXVzaG9ydAkJCVZlcnNpb247CS8qIEZvcm1hdCB2ZXJzaW9uICovCisJc3RydWN0IHN4Z19jb25maWdfbWFjCU1hY0FkZHJbNF07CS8qIHNwYWNlIGZvciA0IE1BQyBhZGRyZXNzZXMgKi8KKwlzdHJ1Y3QgYXRrX2ZydQkJQXRrRnJ1OwkJLyogRlJVIGluZm9ybWF0aW9uICovCisJdXNob3J0CQkJT2VtRnJ1Rm9ybWF0OwkvKiBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24gb2VtX2ZydQkJT2VtRnJ1OwkJLyogT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXVzaG9ydAkJCUNoZWNrc3VtOwkvKiBDaGVja3N1bSBvZiBzZWN0aW9uIDIgKi8KK307CisKKworLyogRUVQUk9NL0ZsYXNoIEZvcm1hdCAqLworc3RydWN0IHN4Z19jb25maWcgeworCS8qIEgvVyBTZWN0aW9uIC0gUmVhZCBieSBTYWhhcmEgaGFyZHdhcmUgKDUxMiBieXRlcykgKi8KKwlzdHJ1Y3QgaHdfY2ZnX2RhdGEJCUh3Q2ZnW05VTV9IV19DRkdfRU5UUklFU107CisJLyogUy9XIFNlY3Rpb24gLSBPdGhlciBjb25maWd1cmF0aW9uIGRhdGEgKDEyOCBieXRlcykgKi8KKwlzdHJ1Y3Qgc3dfY2ZnX2RhdGEJU3dDZmc7Cit9OworCisjaWZkZWYgV0lORE9XU19DT01QSUxFUgorLyoKKyAqICBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHNvbWV0aGluZyBvZiBhIGtsdWRnZSwgYnV0IGl0IGlzIHRoZSBvbmx5IHdheQorICogdGhhdCBJIGNvdWxkIGZpbmQgdG8gY2F0Y2ggY2VydGFpbiBwcm9ncmFtbWluZyBlcnJvcnMgYXQgY29tcGlsZSB0aW1lLgorICogSWYgdGhlIGFzc2VydGVkIGNvbmRpdGlvbiBpcyB0cnVlLCB0aGVuIG5vdGhpbmcgaGFwcGVucy4gIElmIGZhbHNlLCB0aGVuCisgKiB0aGUgY29tcGlsZXIgdHJpZXMgdG8gdHlwZWRlZiBhbiBhcnJheSB3aXRoIC0xIG1lbWJlcnMsIHdoaWNoIGdlbmVyYXRlcworICogYW4gZXJyb3IuICBVbmZvcnR1bmF0ZWx5LCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBtZWFuaW5nbGVzcywgYnV0IGF0IGxlYXN0CisgKiBpdCBjYXRjaGVzIHRoZSBwcm9ibGVtLiAgVGhpcyBtYWNybyB3b3VsZCBiZSB1bm5lY2Vzc2FyeSBpZiB0aGUgY29tcGlsZXIKKyAqIGFsbG93ZWQgdGhlIHNpemVvZiBhbmQgb2Zmc2V0b2YgbWFjcm9zIHRvIGJlIHVzZWQgaW4gdGhlICNpZiBkaXJlY3RpdmUuCisgKi8KKyNkZWZpbmUgY29tcGlsZV90aW1lX2Fzc2VydChjb25kKSBcCisgICAgdHlwZWRlZiBjaGFyIGNvbXBfZXJyb3JbKGNvbmQpID8gMSA6IC0xXQorCisvKgorICogQSBjb21waWxlciBlcnJvciBvbiBlaXRoZXIgb2YgdGhlIG5leHQgdHdvIGxpbmVzIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3Qgc3hnX2NvbmZpZworICogc3RydWN0dXJlIHdhcyBidWlsdCBpbmNvcnJlY3RseS4gIFVuZm9ydHVuYXRlbHksIHRoZSBlcnJvciBtZXNzYWdlIHByb2R1Y2VkCisgKiBpcyBtZWFuaW5nbGVzcy4gIEJ1dCB0aGlzIGlzIGFwcGFyZW50bHkgdGhlIG9ubHkgd2F5IHRvIGNhdGNoIHRoaXMgcHJvYmxlbQorICogYXQgY29tcGlsZSB0aW1lLgorICovCitjb21waWxlX3RpbWVfYXNzZXJ0IChvZmZzZXRvZihzdHJ1Y3Qgc3hnX2NvbmZpZywgU3dDZmcpID09IFNXX0NGR19TRUNUSU9OX1NUQVJUKTsKK2NvbXBpbGVfdGltZV9hc3NlcnQgKHNpemVvZihzdHJ1Y3Qgc3hnX2NvbmZpZykgPT0gSFdfQ0ZHX1NFQ1RJT05fU0laRQorCQkJCQkJCSsgU1dfQ0ZHX1NFQ1RJT05fU0laRSk7CisKK2NvbXBpbGVfdGltZV9hc3NlcnQgKG9mZnNldG9mKHN0cnVjdCBzeGdfY29uZmlnX2EsIFN3Q2ZnKQorCQkJCQkJID09IFNXX0NGR19TRUNUSU9OX1NUQVJUX0EpOworY29tcGlsZV90aW1lX2Fzc2VydCAoc2l6ZW9mKHN0cnVjdCBzeGdfY29uZmlnX2EpID09IEhXX0NGR19TRUNUSU9OX1NJWkVfQQorCQkJCQkJICsgU1dfQ0ZHX1NFQ1RJT05fU0laRSk7CisjZW5kaWYKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gZHJpdmVyIGFuZCB1c2VyLW1vZGUKKyAqIGNvbnRyb2wgYXBwbGljYXRpb24KKyAqLworc3RydWN0IGFkYXB0X3VzZXJpbmZvIHsKKwlib29sCQkgICAgTGlua1VwOworCS8qIHVzZSBMaW5rVXAgLSBhbnkgbmVlZCBmb3Igb3RoZXIgc3RhdGVzPyAqLworCS8qIHUzMiAgCSAgICBMaW5rU3RhdGU7ICovCisJdTMyIAkJICAgIExpbmtTcGVlZDsJCS8qIG5vdCBjdXJyZW50bHkgbmVlZGVkICovCisJdTMyIAkJICAgIExpbmtEdXBsZXg7CQkvKiBub3QgY3VycmVudGx5IG5lZWRlZCAqLworIAllbnVtIHhjdnJfdHlwZQkgICAgWGN2clR5cGU7CQkvKiB0eXBlIG9mIHhjdnIgb24gZmliZXIgY2FyZCAqLworCS8qIGZpYmVyIGNhcmQgeGN2ciB2ZW5kb3IgKi8KKwl1bnNpZ25lZCBjaGFyCQlYY3ZyVmVuZG9yW1hDVlJfVkVORE9SX0xFTl07CisJdW5zaWduZWQgY2hhcgkJWGN2ck1vZGVbWENWUl9NT0RFTF9MRU5dOworCXUzMiAJCSAgICBQb3J0OwkJLyogbm90IGN1cnJlbnRseSBuZWVkZWQgKi8KKwl1MzIgCQkgICAgUGh5c1BvcnQ7CQkvKiBub3QgY3VycmVudGx5IG5lZWRlZCAqLworCXVzaG9ydAkJICAgIFBjaUxhbmVzOworCXVuc2lnbmVkIGNoYXIJTWFjQWRkcls2XTsKKwl1bnNpZ25lZCBjaGFyICAgQ3Vyck1hY0FkZHJbNl07CisJc3RydWN0IGF0a19mcnUJICAgIEF0a0ZydTsKKwl1c2hvcnQgIAkgICAgT2VtRnJ1Rm9ybWF0OworCXVuaW9uIG9lbV9mcnUJICAgIE9lbUZydTsKK307CisKICNwcmFnbWEgcGFjayhwb3ApCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTWlzY2VsbGFuZW91cyBIYXJkd2FyZSBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTWlzY2VsbGFuZW91cyBIYXJkd2FyZSBkZWZpbml0aW9ucyAqLwogCi0vLyBTYWhhcmEgKEFTSUMgbGV2ZWwpIGRlZmluZXMKLSNkZWZpbmUgU0FIQVJBX0dSQU1fU0laRQkJMHgwMjAwMDAJCS8vIEdSQU0gc2l6ZSAtIDEyOCBLQgotI2RlZmluZSBTQUhBUkFfRFJBTV9TSVpFCQkweDIwMDAwMAkJLy8gRFJBTSBzaXplIC0gMiBNQgotI2RlZmluZSBTQUhBUkFfUVJBTV9TSVpFCQkweDAwNDAwMAkJLy8gUVJBTSBzaXplIC0gMTZLIGVudHJpZXMgKDY0IEtCKQotI2RlZmluZSBTQUhBUkFfV0NTX1NJWkUJCQkweDAwMjAwMAkJLy8gV0NTIC0gOEsgaW5zdHJ1Y3Rpb25zICh4IDEwOCBiaXRzKQorLyogSGFyZHdhcmUgVHlwZSBkZWZpbml0aW9ucyAgKi8KIAotLy8gQXJhYmlhIChib2FyZCBsZXZlbCkgZGVmaW5lcwotI2RlZmluZQlGTEFTSF9TSVpFCQkJMHgwODAwMDAJCS8vIDUxMiBLQiAoNCBNYikKLSNkZWZpbmUJRUVQUk9NX1NJWkVfWEZNUgkJNTEyCQkJLy8gdHJ1ZSBFRVBST00gc2l6ZSAoYnl0ZXMpLCBpbmNsdWRpbmcgeGZtciBhcmVhCi0jZGVmaW5lCUVFUFJPTV9TSVpFX05PX1hGTVIJCTI1NgkJCS8vIEVFUFJPTSBzaXplIGV4Y2x1ZGluZyB4Zm1yIGFyZWEKKy8qIFNhaGFyYSAoQVNJQyBsZXZlbCkgZGVmaW5lcyAqLworI2RlZmluZSBTQUhBUkFfR1JBTV9TSVpFCTB4MDIwMDAwCS8qIEdSQU0gc2l6ZSAtIDEyOCBLQiAqLworI2RlZmluZSBTQUhBUkFfRFJBTV9TSVpFCTB4MjAwMDAwCS8qIERSQU0gc2l6ZSAtIDIgTUIgKi8KKy8qIFFSQU0gc2l6ZSAtIDE2SyBlbnRyaWVzICg2NCBLQikgKi8KKyNkZWZpbmUgU0FIQVJBX1FSQU1fU0laRQkweDAwNDAwMAorLyogV0NTIC0gOEsgaW5zdHJ1Y3Rpb25zICh4IDEwOCBiaXRzKSAqLworI2RlZmluZSBTQUhBUkFfV0NTX1NJWkUJCTB4MDAyMDAwCisKKy8qIEFyYWJpYSAoYm9hcmQgbGV2ZWwpIGRlZmluZXMgKi8KKyNkZWZpbmUJRkxBU0hfU0laRQkJMHgwODAwMDAJLyogNTEyIEtCICg0IE1iKSAqLworLyogRUVQUk9NIHNpemUgKGJ5dGVzKSwgaW5jbHVkaW5nIHhmbXIgYXJlYSAqLworI2RlZmluZQlFRVBST01fU0laRV9YRk1SCTEwMjQKKy8qIEVFUFJPTSBzaXplIGV4Y2x1ZGluZyB4Zm1yIGFyZWEgKDUxMiArIDEyOCkgKi8KKyNkZWZpbmUJRUVQUk9NX1NJWkVfTk9fWEZNUgk2NDAKKy8qIEVFUFJPTSBzaXplIGZvciBTYWhhcmEgcmV2IEEgKi8KKyNkZWZpbmUJRUVQUk9NX1NJWkVfUkVWX0EJNTEyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUtMS4yLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUtMS4yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0NDhiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS0xLjIuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCA/IDE5OTctMjAwOCBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiAkSWQ6IHN4Z3BoeWNvZGUuaCx2IDEuMiAyMDA4LzEwLzAyIDAxOjQ0OjA3IEV4cCAkCisgKgorICogc3hncGh5Y29kZS5oOgorICoKKyAqIFRoaXMgZmlsZSBQSFkgbWljcm9jb2RlIGFuZCByZWdpc3RlciBpbml0aWFsaXphdGlvbiBkYXRhLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQSFkgTWljcm9jb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBUaGUgZm9sbG93aW5nIGNvbnRhaW5zIGJvdGggUEhZIG1pY3JvY29kZSBhbmQgUEhZIHJlZ2lzdGVyCisvLyBpbml0aWFsaXphdGlvbiBkYXRhLiAgSXQgaXMgc3BlY2lmaWMgdG8gYm90aCB0aGUgUEhZIGFuZCB0aGUKKy8vIHR5cGUgb2YgdHJhbnNjZWl2ZXIuCisvLworCisvLyBEb3dubG9hZCBmb3IgQUVMMjAwNUMgUEhZIHdpdGggU1IvTFIgdHJhbnNjZWl2ZXIgKDEwR0JBU0UtU1Igb3IgMTBHQkFTRS1MUikKKy8vIEFFTDIwMDUgU1IgZmlybXdhcmUgcmV2IDE4IChtaWNyb0luaXRfbWRpb19TUl9BRUwyMDA1Q18xOC50eCkuCitzdGF0aWMgc3RydWN0IHBoeV91Y29kZQlQaHlVY29kZVtdID0geworCS8vIE5PVEU6ICBBbiBhZGRyZXNzIG9mIDAgaXMgYSBzcGVjaWFsIGNhc2UuICBXaGVuIHRoZSBkb3dubG9hZCByb3V0aW5lCisJLy8gc2VlcyBhbiBhZGRyZXNzIG9mIDAsIGl0IGRvZXMgbm90IHdyaXRlIHRvIHRoZSBQSFkuICBJbnN0ZWFkLCBpdCBkZWxheXMKKwkvLyB0aGUgZG93bmxvYWQuICBUaGUgbGVuZ3RoIG9mIHRoZSBkZWxheSAoaW4gbXMpIGlzIGdpdmVuIGluIHRoZSBkYXRhIGZpZWxkLgorCS8vIERlbGF5cyBhcmUgcmVxdWlyZWQgYXQgY2VydGFpbiBwb2ludHMuCisKKwkvLyBQbGF0Zm9ybS1zcGVjaWZpYyBNRElPIFBhdGNoZXM6CisJLy8gKGluY2x1ZGUgcGF0Y2hlcyBmb3IgMTBHIFJYIHBvbGFyaXR5IGZsaXAsIDUwTWh6IFN5bnRoLCBldGMpCisJLy8gQWRkcgkJRGF0YQorCXsweGMwMTcsCTB4ZmViMH0sCS8vIGZsaXAgUlhfTE9TIHBvbGFyaXR5IChtYW5kYXRvcnkgcGF0Y2ggZm9yIFNGUCsgYXBwbGljYXRpb25zKQorCXsweEMwMDEsCTB4MDQyOH0sCS8vIGZsaXAgUlggc2VyaWFsIHBvbGFyaXR5CisKKwl7MHhjMDEzLAkweGYzNDF9LAkvLyBpbnZlcnQgbHhtaXQgY2xvY2sgKG1hbmRhdG9yeSBwYXRjaCkKKwl7MHhjMjEwLAkweDgwMDB9LAkvLyByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKQorCXsweGMyMTAsCTB4ODEwMH0sCS8vIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpCisJezB4YzIxMCwJMHg4MDAwfSwJLy8gcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkKKwl7MHhjMjEwLAkweDAwMDB9LAkvLyByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKQorCXsweDAwMDAsCTB4MDAzMn0sCS8vIHdhaXQgZm9yIDUwbXMgZm9yIGRhdGFwYXRoIHJlc2V0IHRvIGNvbXBsZXRlLiAobWFuZGF0b3J5IHBhdGNoKQorCisJLy8gVHJhbnNjZWl2ZXItc3BlY2lmaWMgTURJTyBQYXRjaGVzOgorCXsweGMwMDMsCTB4MDE4MX0sCS8vIChiaXQgNykgZW5hYmxlIHRoZSBDRFIgaW5jIHNldHRpbmcgaW4gMS5DMDA1IChtYW5kYXRvcnkgcGF0Y2ggZm9yIFNSIGNvZGUpCisJezB4YzAxMCwJMHg0NDhhfSwJLy8gKGJpdCAxNCkgbWFzayBvdXQgaGlnaCBCRVIgaW5wdXQgZnJvbSB0aGUgTE9TIHNpZ25hbCBpbiAxLjAwMEEgKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkKKworCS8vIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1pY3JvY29udHJvbGxlciBJbml0aWFsaXphdGlvbjoKKwl7MHhjMDRhLAkweDUyMDB9LAkvLyBhY3RpdmF0ZSBtaWNyb2NvbnRyb2xsZXIgYW5kIHBhdXNlCisJezB4MDAwMCwJMHgwMDMyfSwJLy8gd2FpdCA1MG1zIGZvciBtaWNyb2NvbnRyb2xsZXIgYmVmb3JlIHdyaXRpbmcgaW4gY29kZS4KKworCS8vIGNvZGUgYmxvY2sgc3RhcnRzIGhlcmU6CisJezB4Y2MwMCwJMHgyZmY0fSwJezB4Y2MwMSwJMHgzY2Q0fSwJezB4Y2MwMiwJMHgyMDE1fSwJezB4Y2MwMywJMHgzMTI1fSwKKwl7MHhjYzA0LAkweDY1MjR9LAl7MHhjYzA1LAkweDI3ZmZ9LAl7MHhjYzA2LAkweDMwMGZ9LAl7MHhjYzA3LAkweDJjOGJ9LAorCXsweGNjMDgsCTB4MzAwYn0sCXsweGNjMDksCTB4NDAwOX0sCXsweGNjMGEsCTB4NDAwZX0sCXsweGNjMGIsCTB4MmYxMn0sCisJezB4Y2MwYywJMHgzMDAyfSwJezB4Y2MwZCwJMHgxMDAyfSwJezB4Y2MwZSwJMHgyMTEyfSwJezB4Y2MwZiwJMHgzMDEyfSwKKwl7MHhjYzEwLAkweDEwMDJ9LAl7MHhjYzExLAkweDI1NzJ9LAl7MHhjYzEyLAkweDMwMTJ9LAl7MHhjYzEzLAkweDEwMDJ9LAorCXsweGNjMTQsCTB4ZDAxZX0sCXsweGNjMTUsCTB4Mjc3Mn0sCXsweGNjMTYsCTB4MzAxMn0sCXsweGNjMTcsCTB4MTAwMn0sCisJezB4Y2MxOCwJMHgyMDA0fSwJezB4Y2MxOSwJMHgzYzg0fSwJezB4Y2MxYSwJMHg2NDM2fSwJezB4Y2MxYiwJMHgyMDA3fSwKKwl7MHhjYzFjLAkweDNmODd9LAl7MHhjYzFkLAkweDg2NzZ9LAl7MHhjYzFlLAkweDQwYjd9LAl7MHhjYzFmLAkweGE3NDZ9LAorCXsweGNjMjAsCTB4NDA0N30sCXsweGNjMjEsCTB4NTY3M30sCXsweGNjMjIsCTB4Mjk4Mn0sCXsweGNjMjMsCTB4MzAwMn0sCisJezB4Y2MyNCwJMHgxM2QyfSwJezB4Y2MyNSwJMHg4YmJkfSwJezB4Y2MyNiwJMHgyODAyfSwJezB4Y2MyNywJMHgzMDEyfSwKKwl7MHhjYzI4LAkweDEwMDJ9LAl7MHhjYzI5LAkweDIwMzJ9LAl7MHhjYzJhLAkweDMwMTJ9LAl7MHhjYzJiLAkweDEwMDJ9LAorCXsweGNjMmMsCTB4NWNjM30sCXsweGNjMmQsCTB4MDMxNH0sCXsweGNjMmUsCTB4Mjk0Mn0sCXsweGNjMmYsCTB4MzAwMn0sCisJezB4Y2MzMCwJMHgxMDAyfSwJezB4Y2MzMSwJMHhkMDE5fSwJezB4Y2MzMiwJMHgyZmQyfSwJezB4Y2MzMywJMHgzMDAyfSwKKwl7MHhjYzM0LAkweDEwMDJ9LAl7MHhjYzM1LAkweDJhMDR9LAl7MHhjYzM2LAkweDNjNzR9LAl7MHhjYzM3LAkweDY0MzV9LAorCXsweGNjMzgsCTB4MmZhNH0sCXsweGNjMzksCTB4M2NkNH0sCXsweGNjM2EsCTB4NjYyNH0sCXsweGNjM2IsCTB4NTU2M30sCisJezB4Y2MzYywJMHgyZDQyfSwJezB4Y2MzZCwJMHgzMDAyfSwJezB4Y2MzZSwJMHgxM2QyfSwJezB4Y2MzZiwJMHg0NjRkfSwKKwl7MHhjYzQwLAkweDI4MDJ9LAl7MHhjYzQxLAkweDMwMTJ9LAl7MHhjYzQyLAkweDEwMDJ9LAl7MHhjYzQzLAkweDJmZDJ9LAorCXsweGNjNDQsCTB4MzAwMn0sCXsweGNjNDUsCTB4MTAwMn0sCXsweGNjNDYsCTB4MmZiNH0sCXsweGNjNDcsCTB4M2NkNH0sCisJezB4Y2M0OCwJMHg2NjI0fSwJezB4Y2M0OSwJMHg1NTYzfSwJezB4Y2M0YSwJMHgyZDQyfSwJezB4Y2M0YiwJMHgzMDAyfSwKKwl7MHhjYzRjLAkweDEzZDJ9LAl7MHhjYzRkLAkweDJlNzJ9LAl7MHhjYzRlLAkweDMwMDJ9LAl7MHhjYzRmLAkweDEwMDJ9LAorCXsweGNjNTAsCTB4MmY3Mn0sCXsweGNjNTEsCTB4MzAwMn0sCXsweGNjNTIsCTB4MTAwMn0sCXsweGNjNTMsCTB4MDAwNH0sCisJezB4Y2M1NCwJMHgyOTQyfSwJezB4Y2M1NSwJMHgzMDAyfSwJezB4Y2M1NiwJMHgxMDAyfSwJezB4Y2M1NywJMHgyMDMyfSwKKwl7MHhjYzU4LAkweDMwMTJ9LAl7MHhjYzU5LAkweDEwMDJ9LAl7MHhjYzVhLAkweDVjYzN9LAl7MHhjYzViLAkweDAzMTd9LAorCXsweGNjNWMsCTB4MmYxMn0sCXsweGNjNWQsCTB4MzAwMn0sCXsweGNjNWUsCTB4MTAwMn0sCXsweGNjNWYsCTB4Mjk0Mn0sCisJezB4Y2M2MCwJMHgzMDAyfSwJezB4Y2M2MSwJMHgxMDAyfSwJezB4Y2M2MiwJMHgyMmNkfSwJezB4Y2M2MywJMHgzMDFkfSwKKwl7MHhjYzY0LAkweDI4MDJ9LAl7MHhjYzY1LAkweDMwMTJ9LAl7MHhjYzY2LAkweDEwMDJ9LAl7MHhjYzY3LAkweDIwYjJ9LAorCXsweGNjNjgsCTB4MzAxMn0sCXsweGNjNjksCTB4MTAwMn0sCXsweGNjNmEsCTB4NWFhM30sCXsweGNjNmIsCTB4MmRjMn0sCisJezB4Y2M2YywJMHgzMDAyfSwJezB4Y2M2ZCwJMHgxMzEyfSwJezB4Y2M2ZSwJMHgyZDAyfSwJezB4Y2M2ZiwJMHgzMDAyfSwKKwl7MHhjYzcwLAkweDEwMDJ9LAl7MHhjYzcxLAkweDI4MDd9LAl7MHhjYzcyLAkweDMxYTd9LAl7MHhjYzczLAkweDIwYzR9LAorCXsweGNjNzQsCTB4M2MyNH0sCXsweGNjNzUsCTB4NjcyNH0sCXsweGNjNzYsCTB4MTAwMn0sCXsweGNjNzcsCTB4MjgwN30sCisJezB4Y2M3OCwJMHgzMTg3fSwJezB4Y2M3OSwJMHgyMGM0fSwJezB4Y2M3YSwJMHgzYzI0fSwJezB4Y2M3YiwJMHg2NzI0fSwKKwl7MHhjYzdjLAkweDEwMDJ9LAl7MHhjYzdkLAkweDI1MTR9LAl7MHhjYzdlLAkweDNjNjR9LAl7MHhjYzdmLAkweDY0MzZ9LAorCXsweGNjODAsCTB4ZGZmNH0sCXsweGNjODEsCTB4NjQzNn0sCXsweGNjODIsCTB4MTAwMn0sCXsweGNjODMsCTB4NDBhNH0sCisJezB4Y2M4NCwJMHg2NDNjfSwJezB4Y2M4NSwJMHg0MDE2fSwJezB4Y2M4NiwJMHg4YzZjfSwJezB4Y2M4NywJMHgyYjI0fSwKKwl7MHhjYzg4LAkweDNjMjR9LAl7MHhjYzg5LAkweDY0MzV9LAl7MHhjYzhhLAkweDEwMDJ9LAl7MHhjYzhiLAkweDJiMjR9LAorCXsweGNjOGMsCTB4M2MyNH0sCXsweGNjOGQsCTB4NjQzYX0sCXsweGNjOGUsCTB4NDAyNX0sCXsweGNjOGYsCTB4OGE1YX0sCisJezB4Y2M5MCwJMHgxMDAyfSwJezB4Y2M5MSwJMHgyNmQxfSwJezB4Y2M5MiwJMHgzMDExfSwJezB4Y2M5MywJMHgxMDAxfSwKKwl7MHhjYzk0LAkweGM3YTB9LAl7MHhjYzk1LAkweDAxMDB9LAl7MHhjYzk2LAkweGM1MDJ9LAl7MHhjYzk3LAkweDUzYWN9LAorCXsweGNjOTgsCTB4YzUwM30sCXsweGNjOTksCTB4ZDVkNX0sCXsweGNjOWEsCTB4YzYwMH0sCXsweGNjOWIsCTB4MmE2ZH0sCisJezB4Y2M5YywJMHhjNjAxfSwJezB4Y2M5ZCwJMHgyYTRjfSwJezB4Y2M5ZSwJMHhjNjAyfSwJezB4Y2M5ZiwJMHgwMTExfSwKKwl7MHhjY2EwLAkweGM2MGN9LAl7MHhjY2ExLAkweDU5MDB9LAl7MHhjY2EyLAkweGM3MTB9LAl7MHhjY2EzLAkweDA3MDB9LAorCXsweGNjYTQsCTB4YzcxOH0sCXsweGNjYTUsCTB4MDcwMH0sCXsweGNjYTYsCTB4YzcyMH0sCXsweGNjYTcsCTB4NDcwMH0sCisJezB4Y2NhOCwJMHhjODAxfSwJezB4Y2NhOSwJMHg3ZjUwfSwJezB4Y2NhYSwJMHhjODAyfSwJezB4Y2NhYiwJMHg3NzYwfSwKKwl7MHhjY2FjLAkweGM4MDN9LAl7MHhjY2FkLAkweDdmY2V9LAl7MHhjY2FlLAkweGM4MDR9LAl7MHhjY2FmLAkweDU3MDB9LAorCXsweGNjYjAsCTB4YzgwNX0sCXsweGNjYjEsCTB4NWYxMX0sCXsweGNjYjIsCTB4YzgwNn0sCXsweGNjYjMsCTB4NDc1MX0sCisJezB4Y2NiNCwJMHhjODA3fSwJezB4Y2NiNSwJMHg1N2UxfSwJezB4Y2NiNiwJMHhjODA4fSwJezB4Y2NiNywJMHgyNzAwfSwKKwl7MHhjY2I4LAkweGM4MDl9LAl7MHhjY2I5LAkweDAwMDB9LAl7MHhjY2JhLAkweGM4MjF9LAl7MHhjY2JiLAkweDAwMDJ9LAorCXsweGNjYmMsCTB4YzgyMn0sCXsweGNjYmQsCTB4MDAxNH0sCXsweGNjYmUsCTB4YzgzMn0sCXsweGNjYmYsCTB4MTE4Nn0sCisJezB4Y2NjMCwJMHhjODQ3fSwJezB4Y2NjMSwJMHgxZTAyfSwJezB4Y2NjMiwJMHhjMDEzfSwJezB4Y2NjMywJMHhmMzQxfSwKKwl7MHhjY2M0LAkweGMwMWF9LAl7MHhjY2M1LAkweDA0NDZ9LAl7MHhjY2M2LAkweGMwMjR9LAl7MHhjY2M3LAkweDEwMDB9LAorCXsweGNjYzgsCTB4YzAyNX0sCXsweGNjYzksCTB4MGEwMH0sCXsweGNjY2EsCTB4YzAyNn0sCXsweGNjY2IsCTB4MGMwY30sCisJezB4Y2NjYywJMHhjMDI3fSwJezB4Y2NjZCwJMHgwYzBjfSwJezB4Y2NjZSwJMHhjMDI5fSwJezB4Y2NjZiwJMHgwMGEwfSwKKwl7MHhjY2QwLAkweGMwMzB9LAl7MHhjY2QxLAkweDBhMDB9LAl7MHhjY2QyLAkweGMwM2N9LAl7MHhjY2QzLAkweDAwMWN9LAorCXsweGNjZDQsCTB4YzAwNX0sCXsweGNjZDUsCTB4N2EwNn0sCXsweGNjZDYsCTB4MDAwMH0sCXsweGNjZDcsCTB4MjZkMX0sCisJezB4Y2NkOCwJMHgzMDExfSwJezB4Y2NkOSwJMHgxMDAxfSwJezB4Y2NkYSwJMHhjNjIwfSwJezB4Y2NkYiwJMHgwMDAwfSwKKwl7MHhjY2RjLAkweGM2MjF9LAl7MHhjY2RkLAkweDAwM2Z9LAl7MHhjY2RlLAkweGM2MjJ9LAl7MHhjY2RmLAkweDAwMDB9LAorCXsweGNjZTAsCTB4YzYyM30sCXsweGNjZTEsCTB4MDAwMH0sCXsweGNjZTIsCTB4YzYyNH0sCXsweGNjZTMsCTB4MDAwMH0sCisJezB4Y2NlNCwJMHhjNjI1fSwJezB4Y2NlNSwJMHgwMDAwfSwJezB4Y2NlNiwJMHhjNjI3fSwJezB4Y2NlNywJMHgwMDAwfSwKKwl7MHhjY2U4LAkweGM2Mjh9LAl7MHhjY2U5LAkweDAwMDB9LAl7MHhjY2VhLAkweGM2MmN9LAl7MHhjY2ViLAkweDAwMDB9LAorCXsweGNjZWMsCTB4MDAwMH0sCXsweGNjZWQsCTB4MjgwNn0sCXsweGNjZWUsCTB4M2NiNn0sCXsweGNjZWYsCTB4YzE2MX0sCisJezB4Y2NmMCwJMHg2MTM0fSwJezB4Y2NmMSwJMHg2MTM1fSwJezB4Y2NmMiwJMHg1NDQzfSwJezB4Y2NmMywJMHgwMzAzfSwKKwl7MHhjY2Y0LAkweDY1MjR9LAl7MHhjY2Y1LAkweDAwMGJ9LAl7MHhjY2Y2LAkweDEwMDJ9LAl7MHhjY2Y3LAkweDIxMDR9LAorCXsweGNjZjgsCTB4M2MyNH0sCXsweGNjZjksCTB4MjEwNX0sCXsweGNjZmEsCTB4MzgwNX0sCXsweGNjZmIsCTB4NjUyNH0sCisJezB4Y2NmYywJMHhkZmY0fSwJezB4Y2NmZCwJMHg0MDA1fSwJezB4Y2NmZSwJMHg2NTI0fSwJezB4Y2NmZiwJMHgxMDAyfSwKKwl7MHhjZDAwLAkweDVkZDN9LAl7MHhjZDAxLAkweDAzMDZ9LAl7MHhjZDAyLAkweDJmZjd9LAl7MHhjZDAzLAkweDM4Zjd9LAorCXsweGNkMDQsCTB4NjBiN30sCXsweGNkMDUsCTB4ZGZmZH0sCXsweGNkMDYsCTB4MDAwYX0sCXsweGNkMDcsCTB4MTAwMn0sCisJezB4Y2QwOCwJMHgwMDAwfSwKKwkvLyBlbmQgb2YgY29kZSBibG9jaworCisJLy8gVW5wYXVzZSB0aGUgbWljcm9jb250cm9sbGVyIHRvIHN0YXJ0IHByb2dyYW0KKwl7MHhjYTAwLAkweDAwODB9LAorCXsweGNhMTIsCTB4MDAwMH0sCisJezB4MDAwMCwJMHgwMDBBfSwJLy8gd2FpdCAxMG1zIGp1c3QgdG8gYmUgc2FmZQorCisJLy8gQ29uZmlndXJlIHRoZSBMRUQncworCXsweGMyMTQsCTB4MDA5OX0sCS8vIGNvbmZpZ3VyZSB0aGUgTEVEIGRyaXZlcnMgKGZvciBTYWhhcmEgcmV2IEIpCisJezB4YzIxNiwJMHgwNDAwfSwJLy8gY29uZmlndXJlIHRoZSBvbmUgTEVECisJezB4YzIxNywJMHgwMDAwfSwJLy8gZG9uJ3QgZHJpdmUgdGhlIDJuZCBMRUQgKGlmIGl0IGV4aXN0cykKKworCXsweGZmZmYsCTB4ZmZmZn0JCS8vIHRhYmxlIHRlcm1pbmF0b3IKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjdmMzU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwOCBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKiBzeGdwaHljb2RlLmg6Ci0gKgotICogVGhpcyBmaWxlIFBIWSBtaWNyb2NvZGUgYW5kIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGRhdGEuCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBIWSBNaWNyb2NvZGUKLSAqCi0gKiBUaGUgZm9sbG93aW5nIGNvbnRhaW5zIGJvdGggUEhZIG1pY3JvY29kZSBhbmQgUEhZIHJlZ2lzdGVyCi0gKiBpbml0aWFsaXphdGlvbiBkYXRhLiAgSXQgaXMgc3BlY2lmaWMgdG8gYm90aCB0aGUgUEhZIGFuZCB0aGUKLSAqIHR5cGUgb2YgdHJhbnNjZWl2ZXIuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBEb3dubG9hZCBmb3IgQUVMMjAwNUMgUEhZIHdpdGggU1IvTFIgdHJhbnNjZWl2ZXIgKDEwR0JBU0UtU1Igb3IgMTBHQkFTRS1MUikKLSAqLwotc3RhdGljIHN0cnVjdCBQSFlfVUNPREUgUGh5VWNvZGVbXSA9IHsKLQkvKgotCSAqIE5PVEU6ICBBbiBhZGRyZXNzIG9mIDAgaXMgYSBzcGVjaWFsIGNhc2UuICBXaGVuIHRoZSBkb3dubG9hZCByb3V0aW5lCi0JICogc2VlcyBhbiBhZGRyZXNzIG9mIDAsIGl0IGRvZXMgbm90IHdyaXRlIHRvIHRoZSBQSFkuICBJbnN0ZWFkLCBpdAotCSAqIGRlbGF5cyB0aGUgZG93bmxvYWQuICBUaGUgbGVuZ3RoIG9mIHRoZSBkZWxheSAoaW4gbXMpIGlzIGdpdmVuIGluCi0JICogdGhlIGRhdGEgZmllbGQuCi0JICoKLQkgKiBEZWxheXMgYXJlIHJlcXVpcmVkIGF0IGNlcnRhaW4gcG9pbnRzLgotCSAqLwotCi0JLyoKLQkgKiBQbGF0Zm9ybS1zcGVjaWZpYyBNRElPIFBhdGNoZXM6Ci0JICogKGluY2x1ZGUgcGF0Y2hlcyBmb3IgMTBHIFJYIHBvbGFyaXR5IGZsaXAsIDUwTWh6IFN5bnRoLCBldGMpCi0JICovCi0JLyogQWRkciwgRGF0YSAqLwotCXsweGMwMTcsIDB4ZmViMH0sCS8qIGZsaXAgUlhfTE9TIHBvbGFyaXR5IChtYW5kYXRvcnkgKi8KLQkvKiAgcGF0Y2ggZm9yIFNGUCsgYXBwbGljYXRpb25zKSAqLwotCXsweEMwMDEsIDB4MDQyOH0sCS8qIGZsaXAgUlggc2VyaWFsIHBvbGFyaXR5ICovCi0KLQl7MHhjMDEzLCAweGYzNDF9LAkvKiBpbnZlcnQgbHhtaXQgY2xvY2sgKG1hbmRhdG9yeSBwYXRjaCkgKi8KLQl7MHhjMjEwLCAweDgwMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLwotCXsweGMyMTAsIDB4ODEwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCi0JezB4YzIxMCwgMHg4MDAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KLQl7MHhjMjEwLCAweDAwMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLwotCXsweDAwMDAsIDB4MDAzMn0sCS8qIHdhaXQgZm9yIDUwbXMgZm9yIGRhdGFwYXRoIHJlc2V0IHRvICovCi0JLyogY29tcGxldGUuIChtYW5kYXRvcnkgcGF0Y2gpICovCi0KLQkvKiBDb25maWd1cmUgdGhlIExFRCdzICovCi0JezB4YzIxNCwgMHgwMDk5fSwJLyogY29uZmlndXJlIHRoZSBMRUQgZHJpdmVycyAqLwotCXsweGMyMTYsIDB4NWY1Zn0sCS8qIGNvbmZpZ3VyZSB0aGUgQWN0aXZpdHkgTEVEICovCi0JezB4YzIxNywgMHgzM2ZmfSwJLyogY29uZmlndXJlIHRoZSBMaW5rIExFRCAqLwotCi0JLyogVHJhbnNjZWl2ZXItc3BlY2lmaWMgTURJTyBQYXRjaGVzOiAqLwotCXsweGMwMTAsIDB4NDQ4YX0sCS8qIChiaXQgMTQpIG1hc2sgb3V0IGhpZ2ggQkVSIGlucHV0IGZyb20gdGhlICovCi0JLyogTE9TIHNpZ25hbCBpbiAxLjAwMEEgKi8KLQkvKiAobWFuZGF0b3J5IHBhdGNoIGZvciBTUiBjb2RlKSAqLwotCXsweGMwMDMsIDB4MDE4MX0sCS8qIChiaXQgNykgZW5hYmxlIHRoZSBDRFIgaW5jIHNldHRpbmcgaW4gKi8KLQkvKiAxLkMwMDUgKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkgKi8KLQotCS8qIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1pY3JvY29udHJvbGxlciBJbml0aWFsaXphdGlvbjogKi8KLQl7MHhjMDRhLCAweDUyMDB9LAkvKiBhY3RpdmF0ZSBtaWNyb2NvbnRyb2xsZXIgYW5kIHBhdXNlICovCi0JezB4MDAwMCwgMHgwMDMyfSwJLyogd2FpdCA1MG1zIGZvciBtaWNyb2NvbnRyb2xsZXIgYmVmb3JlICovCi0JLyogd3JpdGluZyBpbiBjb2RlLiAqLwotCi0JLyogY29kZSBibG9jayBzdGFydHMgaGVyZTogKi8KLQl7MHhjYzAwLCAweDIwMDl9LAotCXsweGNjMDEsIDB4MzAwOX0sCi0JezB4Y2MwMiwgMHgyN2ZmfSwKLQl7MHhjYzAzLCAweDMwMGZ9LAotCXsweGNjMDQsIDB4MjAwY30sCi0JezB4Y2MwNSwgMHgzMDBjfSwKLQl7MHhjYzA2LCAweDIwYzR9LAotCXsweGNjMDcsIDB4M2MwNH0sCi0JezB4Y2MwOCwgMHg2NDM3fSwKLQl7MHhjYzA5LCAweDIwYzR9LAotCXsweGNjMGEsIDB4M2MwNH0sCi0JezB4Y2MwYiwgMHg2NDM3fSwKLQl7MHhjYzBjLCAweDI1YzR9LAotCXsweGNjMGQsIDB4M2M1NH0sCi0JezB4Y2MwZSwgMHg2NzI0fSwKLQl7MHhjYzBmLCAweDI1YzR9LAotCXsweGNjMTAsIDB4M2M1NH0sCi0JezB4Y2MxMSwgMHg2NzI0fSwKLQl7MHhjYzEyLCAweDIwNDJ9LAotCXsweGNjMTMsIDB4MzAxMn0sCi0JezB4Y2MxNCwgMHgxMDAyfSwKLQl7MHhjYzE1LCAweDI0ODJ9LAotCXsweGNjMTYsIDB4MzAxMn0sCi0JezB4Y2MxNywgMHgxMDAyfSwKLQl7MHhjYzE4LCAweDJhMzJ9LAotCXsweGNjMTksIDB4MzAwMn0sCi0JezB4Y2MxYSwgMHgxMDAyfSwKLQl7MHhjYzFiLCAweDIwMGR9LAotCXsweGNjMWMsIDB4MzA0ZH0sCi0JezB4Y2MxZCwgMHgyODYyfSwKLQl7MHhjYzFlLCAweDMwMTJ9LAotCXsweGNjMWYsIDB4MTAwMn0sCi0JezB4Y2MyMCwgMHgyOTgyfSwKLQl7MHhjYzIxLCAweDMwMDJ9LAotCXsweGNjMjIsIDB4MTAwMn0sCi0JezB4Y2MyMywgMHg2MjhmfSwKLQl7MHhjYzI0LCAweDIwYTR9LAotCXsweGNjMjUsIDB4MzAwNH0sCi0JezB4Y2MyNiwgMHg2NDM4fSwKLQl7MHhjYzI3LCAweDIwYTR9LAotCXsweGNjMjgsIDB4MzAwNH0sCi0JezB4Y2MyOSwgMHg2NDM4fSwKLQl7MHhjYzJhLCAweDIwMTV9LAotCXsweGNjMmIsIDB4MzAwNX0sCi0JezB4Y2MyYywgMHg1ODUzfSwKLQl7MHhjYzJkLCAweDJiZDJ9LAotCXsweGNjMmUsIDB4MzAwMn0sCi0JezB4Y2MyZiwgMHgxMzQyfSwKLQl7MHhjYzMwLCAweDIwMGN9LAotCXsweGNjMzEsIDB4MzAwY30sCi0JezB4Y2MzMiwgMHgyZmY3fSwKLQl7MHhjYzMzLCAweDMwZjd9LAotCXsweGNjMzQsIDB4MjBjNH0sCi0JezB4Y2MzNSwgMHgzYzA0fSwKLQl7MHhjYzM2LCAweDY3MjR9LAotCXsweGNjMzcsIDB4MjBjNH0sCi0JezB4Y2MzOCwgMHgzYzA0fSwKLQl7MHhjYzM5LCAweDY3MjR9LAotCXsweGNjM2EsIDB4MmQzMn0sCi0JezB4Y2MzYiwgMHgzMDAyfSwKLQl7MHhjYzNjLCAweDEwMDJ9LAotCXsweGNjM2QsIDB4MjAwOH0sCi0JezB4Y2MzZSwgMHgzMDA4fSwKLQl7MHhjYzNmLCAweDVjODN9LAotCXsweGNjNDAsIDB4MmQ1Mn0sCi0JezB4Y2M0MSwgMHgzMDAyfSwKLQl7MHhjYzQyLCAweDEzNTJ9LAotCXsweGNjNDMsIDB4MjAwOH0sCi0JezB4Y2M0NCwgMHgzMDA4fSwKLQl7MHhjYzQ1LCAweDVjODN9LAotCXsweGNjNDYsIDB4MmQzMn0sCi0JezB4Y2M0NywgMHgzMDAyfSwKLQl7MHhjYzQ4LCAweDEzNTJ9LAotCXsweGNjNDksIDB4MjAxY30sCi0JezB4Y2M0YSwgMHgzMDBjfSwKLQl7MHhjYzRiLCAweDIwMGR9LAotCXsweGNjNGMsIDB4MzEwZH0sCi0JezB4Y2M0ZCwgMHgyODYyfSwKLQl7MHhjYzRlLCAweDMwMTJ9LAotCXsweGNjNGYsIDB4MTAwMn0sCi0JezB4Y2M1MCwgMHgyZWQyfSwKLQl7MHhjYzUxLCAweDMwMDJ9LAotCXsweGNjNTIsIDB4MTM0Mn0sCi0JezB4Y2M1MywgMHg2ZjcyfSwKLQl7MHhjYzU0LCAweDEwMDJ9LAotCXsweGNjNTUsIDB4NjI4Zn0sCi0JezB4Y2M1NiwgMHgyNTE0fSwKLQl7MHhjYzU3LCAweDNjNjR9LAotCXsweGNjNTgsIDB4NjQzNn0sCi0JezB4Y2M1OSwgMHgyNTE0fSwKLQl7MHhjYzVhLCAweDNjNjR9LAotCXsweGNjNWIsIDB4NjQzNn0sCi0JezB4Y2M1YywgMHgyZmE0fSwKLQl7MHhjYzVkLCAweDNjZDR9LAotCXsweGNjNWUsIDB4NjYyNH0sCi0JezB4Y2M1ZiwgMHgyZmE0fSwKLQl7MHhjYzYwLCAweDNjZDR9LAotCXsweGNjNjEsIDB4NjYyNH0sCi0JezB4Y2M2MiwgMHgyZjQ1fSwKLQl7MHhjYzYzLCAweDMwMTV9LAotCXsweGNjNjQsIDB4NTY1M30sCi0JezB4Y2M2NSwgMHgyZWIyfSwKLQl7MHhjYzY2LCAweDMwMDJ9LAotCXsweGNjNjcsIDB4MTNkMn0sCi0JezB4Y2M2OCwgMHgyZWQyfSwKLQl7MHhjYzY5LCAweDMwMDJ9LAotCXsweGNjNmEsIDB4MTAwMn0sCi0JezB4Y2M2YiwgMHg2ZjcyfSwKLQl7MHhjYzZjLCAweDEwMDJ9LAotCXsweGNjNmQsIDB4NjI4Zn0sCi0JezB4Y2M2ZSwgMHgyNjAyfSwKLQl7MHhjYzZmLCAweDMwMTJ9LAotCXsweGNjNzAsIDB4MTAwMn0sCi0JezB4Y2M3MSwgMHgyMDBkfSwKLQl7MHhjYzcyLCAweDMyMGR9LAotCXsweGNjNzMsIDB4Mjg2Mn0sCi0JezB4Y2M3NCwgMHgzMDEyfSwKLQl7MHhjYzc1LCAweDEwMDJ9LAotCXsweGNjNzYsIDB4MjVjNH0sCi0JezB4Y2M3NywgMHgzYzU0fSwKLQl7MHhjYzc4LCAweDY0Mzd9LAotCXsweGNjNzksIDB4MjVjNH0sCi0JezB4Y2M3YSwgMHgzYzU0fSwKLQl7MHhjYzdiLCAweDY0Mzd9LAotCXsweGNjN2MsIDB4MjBjNH0sCi0JezB4Y2M3ZCwgMHgzYzA0fSwKLQl7MHhjYzdlLCAweDY3MjR9LAotCXsweGNjN2YsIDB4MjBjNH0sCi0JezB4Y2M4MCwgMHgzYzA0fSwKLQl7MHhjYzgxLCAweDY3MjR9LAotCXsweGNjODIsIDB4NmY3Mn0sCi0JezB4Y2M4MywgMHgxMDAyfSwKLQl7MHhjYzg0LCAweDYyOGZ9LAotCXsweGNjODUsIDB4MjZmMn0sCi0JezB4Y2M4NiwgMHgzMDEyfSwKLQl7MHhjYzg3LCAweDEwMDJ9LAotCXsweGNjODgsIDB4YzUwM30sCi0JezB4Y2M4OSwgMHhkNWQ1fSwKLQl7MHhjYzhhLCAweGM2MDB9LAotCXsweGNjOGIsIDB4MmE2ZH0sCi0JezB4Y2M4YywgMHhjNjAxfSwKLQl7MHhjYzhkLCAweDJhNGN9LAotCXsweGNjOGUsIDB4YzYwMn0sCi0JezB4Y2M4ZiwgMHgwMTExfSwKLQl7MHhjYzkwLCAweGM2MGN9LAotCXsweGNjOTEsIDB4NTkwMH0sCi0JezB4Y2M5MiwgMHhjNzEwfSwKLQl7MHhjYzkzLCAweDA3MDB9LAotCXsweGNjOTQsIDB4YzcxOH0sCi0JezB4Y2M5NSwgMHgwNzAwfSwKLQl7MHhjYzk2LCAweGM3MjB9LAotCXsweGNjOTcsIDB4NDcwMH0sCi0JezB4Y2M5OCwgMHhjODAxfSwKLQl7MHhjYzk5LCAweDdmNTB9LAotCXsweGNjOWEsIDB4YzgwMn0sCi0JezB4Y2M5YiwgMHg3NzYwfSwKLQl7MHhjYzljLCAweGM4MDN9LAotCXsweGNjOWQsIDB4N2ZjZX0sCi0JezB4Y2M5ZSwgMHhjODA0fSwKLQl7MHhjYzlmLCAweDU3MDB9LAotCXsweGNjYTAsIDB4YzgwNX0sCi0JezB4Y2NhMSwgMHg1ZjExfSwKLQl7MHhjY2EyLCAweGM4MDZ9LAotCXsweGNjYTMsIDB4NDc1MX0sCi0JezB4Y2NhNCwgMHhjODA3fSwKLQl7MHhjY2E1LCAweDU3ZTF9LAotCXsweGNjYTYsIDB4YzgwOH0sCi0JezB4Y2NhNywgMHgyNzAwfSwKLQl7MHhjY2E4LCAweGM4MDl9LAotCXsweGNjYTksIDB4MDAwMH0sCi0JezB4Y2NhYSwgMHhjODIxfSwKLQl7MHhjY2FiLCAweDAwMDJ9LAotCXsweGNjYWMsIDB4YzgyMn0sCi0JezB4Y2NhZCwgMHgwMDE0fSwKLQl7MHhjY2FlLCAweGM4MzJ9LAotCXsweGNjYWYsIDB4MTE4Nn0sCi0JezB4Y2NiMCwgMHhjODQ3fSwKLQl7MHhjY2IxLCAweDFlMDJ9LAotCXsweGNjYjIsIDB4YzAxM30sCi0JezB4Y2NiMywgMHhmMzQxfSwKLQl7MHhjY2I0LCAweGMwMWF9LAotCXsweGNjYjUsIDB4MDQ0Nn0sCi0JezB4Y2NiNiwgMHhjMDI0fSwKLQl7MHhjY2I3LCAweDEwMDB9LAotCXsweGNjYjgsIDB4YzAyNX0sCi0JezB4Y2NiOSwgMHgwYTAwfSwKLQl7MHhjY2JhLCAweGMwMjZ9LAotCXsweGNjYmIsIDB4MGMwY30sCi0JezB4Y2NiYywgMHhjMDI3fSwKLQl7MHhjY2JkLCAweDBjMGN9LAotCXsweGNjYmUsIDB4YzAyOX0sCi0JezB4Y2NiZiwgMHgwMGEwfSwKLQl7MHhjY2MwLCAweGMwMzB9LAotCXsweGNjYzEsIDB4MGEwMH0sCi0JezB4Y2NjMiwgMHhjMDNjfSwKLQl7MHhjY2MzLCAweDAwMWN9LAotCXsweGNjYzQsIDB4YzAwNX0sCi0JezB4Y2NjNSwgMHg3YTA2fSwKLQl7MHhjY2M2LCAweDAwMDB9LAotCXsweGNjYzcsIDB4MDAwMH0sCi0JezB4Y2NjOCwgMHg2MjhmfSwKLQl7MHhjY2M5LCAweDI2ZjJ9LAotCXsweGNjY2EsIDB4MzAxMn0sCi0JezB4Y2NjYiwgMHgxMDAyfSwKLQl7MHhjY2NjLCAweGM2MjB9LAotCXsweGNjY2QsIDB4MDAwMH0sCi0JezB4Y2NjZSwgMHhjNjIxfSwKLQl7MHhjY2NmLCAweDAwM2Z9LAotCXsweGNjZDAsIDB4YzYyMn0sCi0JezB4Y2NkMSwgMHgwMDAwfSwKLQl7MHhjY2QyLCAweGM2MjN9LAotCXsweGNjZDMsIDB4MDAwMH0sCi0JezB4Y2NkNCwgMHhjNjI0fSwKLQl7MHhjY2Q1LCAweDAwMDB9LAotCXsweGNjZDYsIDB4YzYyNX0sCi0JezB4Y2NkNywgMHgwMDAwfSwKLQl7MHhjY2Q4LCAweGM2Mjd9LAotCXsweGNjZDksIDB4MDAwMH0sCi0JezB4Y2NkYSwgMHhjNjI4fSwKLQl7MHhjY2RiLCAweDAwMDB9LAotCXsweGNjZGMsIDB4YzYyY30sCi0JezB4Y2NkZCwgMHgwMDAwfSwKLQl7MHhjY2RlLCAweDAwMDB9LAotCXsweGNjZGYsIDB4MDAwMH0sCi0JezB4Y2NlMCwgMHg2MjhmfSwKLQl7MHhjY2UxLCAweGQwMTl9LAotCXsweGNjZTIsIDB4MjZmMn0sCi0JezB4Y2NlMywgMHgzMDEyfSwKLQl7MHhjY2U0LCAweDEwMDJ9LAotCXsweGNjZTUsIDB4YzIxMH0sCi0JezB4Y2NlNiwgMHg4MDAwfSwKLQl7MHhjY2U3LCAweGMyMTB9LAotCXsweGNjZTgsIDB4ODAxMH0sCi0JezB4Y2NlOSwgMHhjMjEwfSwKLQl7MHhjY2VhLCAweDgwMDB9LAotCXsweGNjZWIsIDB4YzIxMH0sCi0JezB4Y2NlYywgMHgwMDAwfSwKLQl7MHhjY2VkLCAweDAwMDB9LAotCXsweGNjZWUsIDB4MDAwMH0sCi0JezB4Y2NlZiwgMHg4MjIxfSwKLQl7MHhjY2YwLCAweDI3NTJ9LAotCXsweGNjZjEsIDB4MzAxMn0sCi0JezB4Y2NmMiwgMHgxMDAyfSwKLQl7MHhjY2YzLCAweDZmNzJ9LAotCXsweGNjZjQsIDB4MTAwMn0sCi0JezB4Y2NmNSwgMHgyODA2fSwKLQl7MHhjY2Y2LCAweDMwMDZ9LAotCXsweGNjZjcsIDB4MjAwN30sCi0JezB4Y2NmOCwgMHgzY2M3fSwKLQl7MHhjY2Y5LCAweGUxNjF9LAotCXsweGNjZmEsIDB4YzE3MX0sCi0JezB4Y2NmYiwgMHg2MTM0fSwKLQl7MHhjY2ZjLCAweDYxMzV9LAotCXsweGNjZmQsIDB4NTQ1M30sCi0JezB4Y2NmZSwgMHgyODU4fSwKLQl7MHhjY2ZmLCAweDMwMTh9LAotCXsweGNkMDAsIDB4MTM0OH0sCi0JezB4Y2QwMSwgMHg2NTI0fSwKLQl7MHhjZDAyLCAweDI3Yjh9LAotCXsweGNkMDMsIDB4MzAxOH0sCi0JezB4Y2QwNCwgMHgxMDA4fSwKLQl7MHhjZDA1LCAweDEwMDJ9LAotCXsweGNkMDYsIDB4NjI4Zn0sCi0JezB4Y2QwNywgMHg1ZGQzfSwKLQl7MHhjZDA4LCAweDI5MDZ9LAotCXsweGNkMDksIDB4MzAxNn0sCi0JezB4Y2QwYSwgMHgxMzA2fSwKLQl7MHhjZDBiLCAweDJmZjd9LAotCXsweGNkMGMsIDB4MzBmN30sCi0JezB4Y2QwZCwgMHg2MGI3fSwKLQl7MHhjZDBlLCAweGRmZmR9LAotCXsweGNkMGYsIDB4MDAwOH0sCi0JezB4Y2QxMCwgMHg2ZjcyfSwKLQl7MHhjZDExLCAweDEwMDJ9LAotCXsweGNkMTIsIDB4MDAwMH0sCi0JezB4Y2RmZiwgMHgwYTAxfSwKLQkvKiBlbmQgb2YgY29kZSBibG9jayAqLwotCi0JLyogVW5wYXVzZSB0aGUgbWljcm9jb250cm9sbGVyIHRvIHN0YXJ0IHByb2dyYW0gKi8KLQl7MHhjYTAwLCAweDAwODB9LAotCXsweGNhMTIsIDB4MDAwMH0sCi0JezB4MDAwMCwgMHgwMDBBfSwJLyogd2FpdCAxMG1zIGp1c3QgdG8gYmUgc2FmZSAqLwotCXsweGZmZmYsIDB4ZmZmZn0JLyogdGFibGUgdGVybWluYXRvciAqLwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTBjNmU3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACitjb25maWcgVVNCX1NFUklBTF9BVEVOMjAxMQorCXRyaXN0YXRlICJBVEVOIDIwMTEgVVNCIHRvIHNlcmlhbCBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEFURU4gMjAxMSBkdWFsIHBvcnQgVVNCIHRvIHNlcmlhbAorCSAgYWRhcHRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgYXRlbjIwMTEuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWMxOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfVVNCX1NFUklBTF9BVEVOMjAxMSkJKz0gYXRlbjIwMTEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODlhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL1RPRE8KQEAgLTAsMCArMSw3IEBACitUT0RPOgorCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gcmVtb3ZlIGRlYWQgYW5kIHVzZWxlc3MgY29kZSAoYXVkaXRpbmcgdGhlIHR0eSBpb2N0bHMgdG8KKwkgIHZlcmlmeSB0aGF0IHRoZXkgcmVhbGx5IGFyZSBjb3JyZWN0IGFuZCBuZWVkZWQuKQorCitQbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQKK1J1c3NlbGwgTGFuZyA8Z3N2aWV3QGdob3N0Z3VtLmNvbS5hdT4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL2F0ZW4yMDExLmMgYi9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL2F0ZW4yMDExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViNzA1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvYXRlbjIwMTEuYwpAQCAtMCwwICsxLDI0NTIgQEAKKy8qCisgKiBBdGVuIDIwMTEgVVNCIHNlcmlhbCBkcml2ZXIgZm9yIDQgcG9ydCBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEluc2lkZSBPdXQgTmV0d29ya3MKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA5IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm92ZWxsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CisKKworI2RlZmluZSBaTFBfUkVHMQkJMHgzQQkvKiBaZXJvX0ZsYWdfUmVnMSA1OCAqLworI2RlZmluZSBaTFBfUkVHMgkJMHgzQgkvKiBaZXJvX0ZsYWdfUmVnMiA1OSAqLworI2RlZmluZSBaTFBfUkVHMwkJMHgzQwkvKiBaZXJvX0ZsYWdfUmVnMyA2MCAqLworI2RlZmluZSBaTFBfUkVHNAkJMHgzRAkvKiBaZXJvX0ZsYWdfUmVnNCA2MSAqLworI2RlZmluZSBaTFBfUkVHNQkJMHgzRQkvKiBaZXJvX0ZsYWdfUmVnNSA2MiAqLworCisvKiBJbnRlcnJ1cHQgUm90aW51ZSBEZWZpbmVzCSovCisjZGVmaW5lIFNFUklBTF9JSVJfUkxTCQkweDA2CisjZGVmaW5lIFNFUklBTF9JSVJfUkRBCQkweDA0CisjZGVmaW5lIFNFUklBTF9JSVJfQ1RJCQkweDBjCisjZGVmaW5lIFNFUklBTF9JSVJfVEhSCQkweDAyCisjZGVmaW5lIFNFUklBTF9JSVJfTVMJCTB4MDAKKworLyogRW11bGF0aW9uIG9mIHRoZSBiaXQgbWFzayBvbiB0aGUgTElORSBTVEFUVVMgUkVHSVNURVIuICAqLworI2RlZmluZSBTRVJJQUxfTFNSX0RSCQkweDAwMDEKKyNkZWZpbmUgU0VSSUFMX0xTUl9PRQkJMHgwMDAyCisjZGVmaW5lIFNFUklBTF9MU1JfUEUJCTB4MDAwNAorI2RlZmluZSBTRVJJQUxfTFNSX0ZFCQkweDAwMDgKKyNkZWZpbmUgU0VSSUFMX0xTUl9CSQkJMHgwMDEwCisjZGVmaW5lIFNFUklBTF9MU1JfVEhSRQkJMHgwMDIwCisjZGVmaW5lIFNFUklBTF9MU1JfVEVNVAkJMHgwMDQwCisjZGVmaW5lIFNFUklBTF9MU1JfRklGT0VSUgkweDAwODAKKworLyogTVNSIGJpdCBkZWZpbmVzKHBsYWNlIGhvbGRlcnMpICovCisjZGVmaW5lIEFURU5fTVNSX0RFTFRBX0NUUwkweDEwCisjZGVmaW5lIEFURU5fTVNSX0RFTFRBX0RTUgkweDIwCisjZGVmaW5lIEFURU5fTVNSX0RFTFRBX1JJCTB4NDAKKyNkZWZpbmUgQVRFTl9NU1JfREVMVEFfQ0QJMHg4MAorCisvKiBTZXJpYWwgUG9ydCByZWdpc3RlciBBZGRyZXNzICovCisjZGVmaW5lIFJFQ0VJVkVfQlVGRkVSX1JFR0lTVEVSCQkoKF9fdTE2KSgweDAwKSkKKyNkZWZpbmUgVFJBTlNNSVRfSE9MRElOR19SRUdJU1RFUgkoKF9fdTE2KSgweDAwKSkKKyNkZWZpbmUgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUgkoKF9fdTE2KSgweDAxKSkKKyNkZWZpbmUgSU5URVJSVVBUX0lERU5UX1JFR0lTVEVSCSgoX191MTYpKDB4MDIpKQorI2RlZmluZSBGSUZPX0NPTlRST0xfUkVHSVNURVIJCSgoX191MTYpKDB4MDIpKQorI2RlZmluZSBMSU5FX0NPTlRST0xfUkVHSVNURVIJCSgoX191MTYpKDB4MDMpKQorI2RlZmluZSBNT0RFTV9DT05UUk9MX1JFR0lTVEVSCQkoKF9fdTE2KSgweDA0KSkKKyNkZWZpbmUgTElORV9TVEFUVVNfUkVHSVNURVIJCSgoX191MTYpKDB4MDUpKQorI2RlZmluZSBNT0RFTV9TVEFUVVNfUkVHSVNURVIJCSgoX191MTYpKDB4MDYpKQorI2RlZmluZSBTQ1JBVENIX1BBRF9SRUdJU1RFUgkJKChfX3UxNikoMHgwNykpCisjZGVmaW5lIERJVklTT1JfTEFUQ0hfTFNCCQkoKF9fdTE2KSgweDAwKSkKKyNkZWZpbmUgRElWSVNPUl9MQVRDSF9NU0IJCSgoX191MTYpKDB4MDEpKQorCisjZGVmaW5lIFNQMV9SRUdJU1RFUgkJCSgoX191MTYpKDB4MDApKQorI2RlZmluZSBDT05UUk9MMV9SRUdJU1RFUgkJKChfX3UxNikoMHgwMSkpCisjZGVmaW5lIENMS19NVUxUSV9SRUdJU1RFUgkJKChfX3UxNikoMHgwMikpCisjZGVmaW5lIENMS19TVEFSVF9WQUxVRV9SRUdJU1RFUgkoKF9fdTE2KSgweDAzKSkKKyNkZWZpbmUgRENSMV9SRUdJU1RFUgkJCSgoX191MTYpKDB4MDQpKQorI2RlZmluZSBHUElPX1JFR0lTVEVSCQkJKChfX3UxNikoMHgwNykpCisKKyNkZWZpbmUgU0VSSUFMX0xDUl9ETEFCCQkJKChfX3UxNikoMHgwMDgwKSkKKworLyoKKyAqIFVSQiBQT09MIHJlbGF0ZWQgZGVmaW5lcworICovCisjZGVmaW5lIE5VTV9VUkJTCQkJMTYJLyogVVJCIENvdW50ICovCisjZGVmaW5lIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRQkzMgkvKiBVUkIgU2l6ZSAgKi8KKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FURU5JTlRMCQkweDA1NTcKKyNkZWZpbmUgQVRFTklOVExfREVWSUNFX0lEXzIwMTEJCTB4MjAxMQorI2RlZmluZSBBVEVOSU5UTF9ERVZJQ0VfSURfNzgyMAkJMHg3ODIwCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfMjAxMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEXzc4MjApIH0sCisJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIG9mIHRoZSBsb2NhbCBwb3J0IGluZm9ybWF0aW9uICovCitzdHJ1Y3QgQVRFTklOVExfcG9ydCB7CisJaW50CQlwb3J0X251bTsgICAgICAgICAgLypBY3R1YWwgcG9ydCBudW1iZXIgaW4gdGhlIGRldmljZSgxLDIsZXRjKSovCisJX191OAkJYnVsa19vdXRfZW5kcG9pbnQ7ICAgCS8qIHRoZSBidWxrIG91dCBlbmRwb2ludCBoYW5kbGUgKi8KKwl1bnNpZ25lZCBjaGFyCSpidWxrX291dF9idWZmZXI7ICAgICAJLyogYnVmZmVyIHVzZWQgZm9yIHRoZSBidWxrIG91dCBlbmRwb2ludCAqLworCXN0cnVjdCB1cmIJKndyaXRlX3VyYjsJICAgICAJLyogd3JpdGUgVVJCIGZvciB0aGlzIHBvcnQgKi8KKwlfX3U4CQlidWxrX2luX2VuZHBvaW50OwkvKiB0aGUgYnVsayBpbiBlbmRwb2ludCBoYW5kbGUgKi8KKwl1bnNpZ25lZCBjaGFyCSpidWxrX2luX2J1ZmZlcjsJLyogdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkqcmVhZF91cmI7CSAgICAgCS8qIHJlYWQgVVJCIGZvciB0aGlzIHBvcnQgKi8KKwlfX3U4CQlzaGFkb3dMQ1I7CQkvKiBsYXN0IExDUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTgJCXNoYWRvd01DUjsJCS8qIGxhc3QgTUNSIHZhbHVlIHJlY2VpdmVkICovCisJY2hhcgkJb3BlbjsKKwljaGFyCQljaGFzZVJlc3BvbnNlUGVuZGluZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2NoYXNlOwkJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGNoYXNlIHRvIGZpbmlzaCAqLworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY29tbWFuZDsJCS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZSB3YWl0aW5nIGZvciBjb21tYW5kIHRvIGZpbmlzaCAqLworCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQ7CQkJLyogbG9vcCBiYWNrIHRvIHRoZSBvd25lciBvZiB0aGlzIG9iamVjdCAqLworCS8qT2Zmc2V0cyovCisJX191OAkJU3BSZWdPZmZzZXQ7CisJX191OAkJQ29udHJvbFJlZ09mZnNldDsKKwlfX3U4CQlEY3JSZWdPZmZzZXQ7CisJLyogZm9yIHByb2Nlc3NpbmcgY29udHJvbCBVUkJTIGluIGludGVycnVwdCBjb250ZXh0ICovCisJc3RydWN0IHVyYiAJKmNvbnRyb2xfdXJiOworCWNoYXIJCSpjdHJsX2J1ZjsKKwlpbnQJCU1zckxzcjsKKworCXN0cnVjdCB1cmIJKndyaXRlX3VyYl9wb29sW05VTV9VUkJTXTsKKwkvKiB3ZSBwYXNzIGEgcG9pbnRlciB0byB0aGlzIGFzIHRoZSBhcmd1ZW1lbnQgc2VudCB0byBjeXByZXNzX3NldF90ZXJtaW9zIG9sZF90ZXJtaW9zICovCisJc3RydWN0IGt0ZXJtaW9zCXRtcF90ZXJtaW9zOyAgICAgICAgLyogc3RvcmVzIHRoZSBvbGQgdGVybWlvcyBzZXR0aW5ncyAqLworCXNwaW5sb2NrX3QgCWxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIHByaXZhdGUgbG9jayAqLworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIHNlcmlhbCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBBVEVOSU5UTF9zZXJpYWwgeworCV9fdTgJCWludGVycnVwdF9pbl9lbmRwb2ludDsJCS8qIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaGFuZGxlICovCisJdW5zaWduZWQgY2hhcgkqaW50ZXJydXB0X2luX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgd2UgdXNlIGZvciB0aGUgaW50ZXJydXB0IGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkqaW50ZXJydXB0X3JlYWRfdXJiOwkvKiBvdXIgaW50ZXJydXB0IHVyYiAqLworCV9fdTgJCWJ1bGtfaW5fZW5kcG9pbnQ7CS8qIHRoZSBidWxrIGluIGVuZHBvaW50IGhhbmRsZSAqLworCXVuc2lnbmVkIGNoYXIJKmJ1bGtfaW5fYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJc3RydWN0IHVyYiAJKnJlYWRfdXJiOwkJLyogb3VyIGJ1bGsgcmVhZCB1cmIgKi8KKwlfX3U4CQlidWxrX291dF9lbmRwb2ludDsJLyogdGhlIGJ1bGsgb3V0IGVuZHBvaW50IGhhbmRsZSAqLworCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWw7CS8qIGxvb3AgYmFjayB0byB0aGUgb3duZXIgb2YgdGhpcyBvYmplY3QgKi8KKwlpbnQJQVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzOyAJLyogdGhpcyBzYXlzIHRoZSBudW1iZXIgb2YgcG9ydHMgaW4gdGhlIGRldmljZSAqLworCS8qIEluZGljYXRlcyBhYm91dCB0aGUgbm8ub2Ygb3BlbmVkIHBvcnRzIG9mIGFuIGluZGl2aWR1YWwgVVNCLXNlcmlhbCBhZGFwYXRlci4gKi8KKwl1bnNpZ25lZCBpbnQJTm9PZk9wZW5Qb3J0czsKKwkvKiBhIGZsYWcgZm9yIFN0YXR1cyBlbmRwb2ludCBwb2xsaW5nICovCisJdW5zaWduZWQgY2hhcglzdGF0dXNfcG9sbGluZ19zdGFydGVkOworfTsKKworc3RhdGljIHZvaWQgQVRFTjIwMTFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCBBVEVOMjAxMV9jaGFuZ2VfcG9ydF9zZXR0aW5ncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkgIHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0LAorCQkJCQkgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQml0IGRlZmluaXRpb25zIGZvciBlYWNoIHJlZ2lzdGVyICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBMQ1JfQklUU181CQkweDAwCS8qIDUgYml0cy9jaGFyICovCisjZGVmaW5lIExDUl9CSVRTXzYJCTB4MDEJLyogNiBiaXRzL2NoYXIgKi8KKyNkZWZpbmUgTENSX0JJVFNfNwkJMHgwMgkvKiA3IGJpdHMvY2hhciAqLworI2RlZmluZSBMQ1JfQklUU184CQkweDAzCS8qIDggYml0cy9jaGFyICovCisjZGVmaW5lIExDUl9CSVRTX01BU0sJCTB4MDMJLyogTWFzayBmb3IgYml0cy9jaGFyIGZpZWxkICovCisKKyNkZWZpbmUgTENSX1NUT1BfMQkJMHgwMAkvKiAxIHN0b3AgYml0ICovCisjZGVmaW5lIExDUl9TVE9QXzFfNQkJMHgwNAkvKiAxLjUgc3RvcCBiaXRzIChpZiA1ICAgYml0cy9jaGFyKSAqLworI2RlZmluZSBMQ1JfU1RPUF8yCQkweDA0CS8qIDIgc3RvcCBiaXRzICAgKGlmIDYtOCBiaXRzL2NoYXIpICovCisjZGVmaW5lIExDUl9TVE9QX01BU0sJCTB4MDQJLyogTWFzayBmb3Igc3RvcCBiaXRzIGZpZWxkICovCisKKyNkZWZpbmUgTENSX1BBUl9OT05FCQkweDAwCS8qIE5vIHBhcml0eSAqLworI2RlZmluZSBMQ1JfUEFSX09ERAkJMHgwOAkvKiBPZGQgcGFyaXR5ICovCisjZGVmaW5lIExDUl9QQVJfRVZFTgkJMHgxOAkvKiBFdmVuIHBhcml0eSAqLworI2RlZmluZSBMQ1JfUEFSX01BUksJCTB4MjgJLyogRm9yY2UgcGFyaXR5IGJpdCB0byAxICovCisjZGVmaW5lIExDUl9QQVJfU1BBQ0UJCTB4MzgJLyogRm9yY2UgcGFyaXR5IGJpdCB0byAwICovCisjZGVmaW5lIExDUl9QQVJfTUFTSwkJMHgzOAkvKiBNYXNrIGZvciBwYXJpdHkgZmllbGQgKi8KKworI2RlZmluZSBMQ1JfU0VUX0JSRUFLCQkweDQwCS8qIFNldCBCcmVhayBjb25kaXRpb24gKi8KKyNkZWZpbmUgTENSX0RMX0VOQUJMRQkJMHg4MAkvKiBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2ggKi8KKworI2RlZmluZSBNQ1JfRFRSCQkJMHgwMQkvKiBBc3NlcnQgRFRSICovCisjZGVmaW5lIE1DUl9SVFMJCQkweDAyCS8qIEFzc2VydCBSVFMgKi8KKyNkZWZpbmUgTUNSX09VVDEJCTB4MDQJLyogTG9vcGJhY2sgb25seTogU2V0cyBzdGF0ZSBvZiBSSSAqLworI2RlZmluZSBNQ1JfTUFTVEVSX0lFCQkweDA4CS8qIEVuYWJsZSBpbnRlcnJ1cHQgb3V0cHV0cyAqLworI2RlZmluZSBNQ1JfTE9PUEJBQ0sJCTB4MTAJLyogU2V0IGludGVybmFsIChkaWdpdGFsKSBsb29wYmFjayBtb2RlICovCisjZGVmaW5lIE1DUl9YT05fQU5ZCQkweDIwCS8qIEVuYWJsZSBhbnkgY2hhciB0byBleGl0IFhPRkYgbW9kZSAqLworCisjZGVmaW5lIEFURU4yMDExX01TUl9DVFMJMHgxMAkvKiBDdXJyZW50IHN0YXRlIG9mIENUUyAqLworI2RlZmluZSBBVEVOMjAxMV9NU1JfRFNSCTB4MjAJLyogQ3VycmVudCBzdGF0ZSBvZiBEU1IgKi8KKyNkZWZpbmUgQVRFTjIwMTFfTVNSX1JJCQkweDQwCS8qIEN1cnJlbnQgc3RhdGUgb2YgUkkgKi8KKyNkZWZpbmUgQVRFTjIwMTFfTVNSX0NECQkweDgwCS8qIEN1cnJlbnQgc3RhdGUgb2YgQ0QgKi8KKworCitzdGF0aWMgaW50IGRlYnVnOworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIyLjAiCisjZGVmaW5lIERSSVZFUl9ERVNDICJBVEVOSU5UTCAyMDExIFVTQiBTZXJpYWwgQWRhcHRlciIKKworLyoKKyAqIERlZmluZXMgdXNlZCBmb3Igc2VuZGluZyBjb21tYW5kcyB0byBwb3J0CisgKi8KKworI2RlZmluZSBBVEVOX1dEUl9USU1FT1VUCSg1MCkJLyogZGVmYXVsdCB1cmIgdGltZW91dCAqLworCisvKiBSZXF1ZXN0cyAqLworI2RlZmluZSBBVEVOX1JEX1JUWVBFCQkweEMwCisjZGVmaW5lIEFURU5fV1JfUlRZUEUJCTB4NDAKKyNkZWZpbmUgQVRFTl9SRFJFUQkJMHgwRAorI2RlZmluZSBBVEVOX1dSUkVRCQkweDBFCisjZGVmaW5lIEFURU5fQ1RSTF9USU1FT1VUCTUwMAorI2RlZmluZSBWRU5ET1JfUkVBRF9MRU5HVEgJKDB4MDEpCisKKy8qIHNldCB0byAxIGZvciBSUzQ4NSBtb2RlIGFuZCAwIGZvciBSUzIzMiBtb2RlICovCisvKiBGSVhNRSBtYWtlIHRoaXMgc29tZWhvdyBkeW5hbWljIGFuZCBub3QgYnVpbGQgdGltZSBzcGVjaWZpYyAqLworc3RhdGljIGludCBSUzQ4NW1vZGU7CisKK3N0YXRpYyBpbnQgc2V0X3JlZ19zeW5jKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IHJlZywgX191MTYgdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwl2YWwgPSB2YWwgJiAweDAwZmY7CisKKwlkYmcoIiVzOiBpcyAleCwgdmFsdWUgJXgiLCBfX2Z1bmNfXywgcmVnLCB2YWwpOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBBVEVOX1dSUkVRLAorCQkJICAgICAgIEFURU5fV1JfUlRZUEUsIHZhbCwgcmVnLCBOVUxMLCAwLAorCQkJICAgICAgIEFURU5fV0RSX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW50IGdldF9yZWdfc3luYyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3UxNiByZWcsIF9fdTE2ICp2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgQVRFTl9SRFJFUSwKKwkJCSAgICAgIEFURU5fUkRfUlRZUEUsIDAsIHJlZywgdmFsLCBWRU5ET1JfUkVBRF9MRU5HVEgsCisJCQkgICAgICBBVEVOX1dEUl9USU1FT1VUKTsKKwlkYmcoIiVzOiBvZmZzZXQgaXMgJXgsIHJldHVybiB2YWwgJXgiLCBfX2Z1bmNfXywgcmVnLCAqdmFsKTsKKwkqdmFsID0gKCp2YWwpICYgMHgwMGZmOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VhcnRfcmVnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IHJlZywgX191MTYgdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICphX3NlcmlhbDsKKwlfX3UxNiBtaW5vcjsKKworCWFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCW1pbm9yID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJbWlub3IgPSAwOworCXZhbCA9IHZhbCAmIDB4MDBmZjsKKworCS8qCisJICogRm9yIHRoZSBVQVJUIGNvbnRyb2wgcmVnaXN0ZXJzLAorCSAqIHRoZSBhcHBsaWNhdGlvbiBudW1iZXIgbmVlZCB0byBiZSBPcidlZAorCSAqLworCWlmIChhX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09IDQpCisJCXZhbCB8PSAoKChfX3UxNilwb3J0LT5udW1iZXIgLSBtaW5vcikgKyAxKSA8PCA4OworCWVsc2UgeworCQlpZiAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0gbWlub3IpID09IDApCisJCQl2YWwgfD0gKCgoX191MTYpcG9ydC0+bnVtYmVyIC0gbWlub3IpICsgMSkgPDwgODsKKwkJZWxzZQorCQkJdmFsIHw9ICgoKF9fdTE2KXBvcnQtPm51bWJlciAtIG1pbm9yKSArIDIpIDw8IDg7CisJfQorCWRiZygiJXM6IGFwcGxpY2F0aW9uIG51bWJlciBpcyAleCIsIF9fZnVuY19fLCB2YWwpOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBBVEVOX1dSUkVRLAorCQkJICAgICAgIEFURU5fV1JfUlRZUEUsIHZhbCwgcmVnLCBOVUxMLCAwLAorCQkJICAgICAgIEFURU5fV0RSX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW50IGdldF91YXJ0X3JlZyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3UxNiByZWcsIF9fdTE2ICp2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWludCByZXQgPSAwOworCV9fdTE2IHd2YWw7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqYV9zZXJpYWw7CisJX191MTYgbWlub3IgPSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJYV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJaWYgKG1pbm9yID09IFNFUklBTF9UVFlfTk9fTUlOT1IpCisJCW1pbm9yID0gMDsKKworCS8qIHd2YWwgaXMgc2FtZSBhcyBhcHBsaWNhdGlvbiBudW1iZXIgKi8KKwlpZiAoYV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PSA0KQorCQl3dmFsID0gKCgoX191MTYpcG9ydC0+bnVtYmVyIC0gbWlub3IpICsgMSkgPDwgODsKKwllbHNlIHsKKwkJaWYgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIG1pbm9yKSA9PSAwKQorCQkJd3ZhbCA9ICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSBtaW5vcikgKyAxKSA8PCA4OworCQllbHNlCisJCQl3dmFsID0gKCgoX191MTYpIHBvcnQtPm51bWJlciAtIG1pbm9yKSArIDIpIDw8IDg7CisJfQorCWRiZygiJXM6IGFwcGxpY2F0aW9uIG51bWJlciBpcyAleCIsIF9fZnVuY19fLCB3dmFsKTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgQVRFTl9SRFJFUSwKKwkJCSAgICAgIEFURU5fUkRfUlRZUEUsIHd2YWwsIHJlZywgdmFsLCBWRU5ET1JfUkVBRF9MRU5HVEgsCisJCQkgICAgICBBVEVOX1dEUl9USU1FT1VUKTsKKwkqdmFsID0gKCp2YWwpICYgMHgwMGZmOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX25ld01zcihzdHJ1Y3QgQVRFTklOVExfcG9ydCAqcG9ydCwgX191OCBuZXdNc3IpCit7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OworCUFURU4yMDExX3BvcnQgPSBwb3J0OworCWljb3VudCA9ICZBVEVOMjAxMV9wb3J0LT5pY291bnQ7CisJaWYgKG5ld01zciAmCisJICAgIChBVEVOX01TUl9ERUxUQV9DVFMgfCBBVEVOX01TUl9ERUxUQV9EU1IgfCBBVEVOX01TUl9ERUxUQV9SSSB8CisJICAgICBBVEVOX01TUl9ERUxUQV9DRCkpIHsKKwkJaWNvdW50ID0gJkFURU4yMDExX3BvcnQtPmljb3VudDsKKworCQkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLworCQlpZiAobmV3TXNyICYgQVRFTl9NU1JfREVMVEFfQ1RTKQorCQkJaWNvdW50LT5jdHMrKzsKKwkJaWYgKG5ld01zciAmIEFURU5fTVNSX0RFTFRBX0RTUikKKwkJCWljb3VudC0+ZHNyKys7CisJCWlmIChuZXdNc3IgJiBBVEVOX01TUl9ERUxUQV9DRCkKKwkJCWljb3VudC0+ZGNkKys7CisJCWlmIChuZXdNc3IgJiBBVEVOX01TUl9ERUxUQV9SSSkKKwkJCWljb3VudC0+cm5nKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX25ld0xzcihzdHJ1Y3QgQVRFTklOVExfcG9ydCAqcG9ydCwgX191OCBuZXdMc3IpCit7CisJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OworCisJZGJnKCIlcyAtICUwMngiLCBfX2Z1bmNfXywgbmV3THNyKTsKKworCWlmIChuZXdMc3IgJiBTRVJJQUxfTFNSX0JJKSB7CisJCS8qCisJCSAqIFBhcml0eSBhbmQgRnJhbWluZyBlcnJvcnMgb25seSBjb3VudCBpZiB0aGV5IG9jY3VyIGV4Y2x1c2l2ZQorCQkgKiBvZiBhIGJyZWFrIGJlaW5nIHJlY2VpdmVkLgorCQkgKi8KKwkJbmV3THNyICY9IChfX3U4KSAoU0VSSUFMX0xTUl9PRSB8IFNFUklBTF9MU1JfQkkpOworCX0KKworCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCisJaWNvdW50ID0gJnBvcnQtPmljb3VudDsKKwlpZiAobmV3THNyICYgU0VSSUFMX0xTUl9CSSkKKwkJaWNvdW50LT5icmsrKzsKKwlpZiAobmV3THNyICYgU0VSSUFMX0xTUl9PRSkKKwkJaWNvdW50LT5vdmVycnVuKys7CisJaWYgKG5ld0xzciAmIFNFUklBTF9MU1JfUEUpCisJCWljb3VudC0+cGFyaXR5Kys7CisJaWYgKG5ld0xzciAmIFNFUklBTF9MU1JfRkUpCisJCWljb3VudC0+ZnJhbWUrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9jb250cm9sX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCV9fdTggcmVndmFsID0gMHgwOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlBVEVOMjAxMV9wb3J0ID0gKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyB1cmIgYnVmZmVyIHNpemUgaXMgJWQiLCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlkYmcoIiVzIEFURU4yMDExX3BvcnQtPk1zckxzciBpcyAlZCBwb3J0ICVkIiwgX19mdW5jX18sCisJCUFURU4yMDExX3BvcnQtPk1zckxzciwgQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0pOworCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlyZWd2YWwgPSAoX191OCkgZGF0YVswXTsKKwlkYmcoIiVzIGRhdGEgaXMgJXgiLCBfX2Z1bmNfXywgcmVndmFsKTsKKwlpZiAoQVRFTjIwMTFfcG9ydC0+TXNyTHNyID09IDApCisJCWhhbmRsZV9uZXdNc3IoQVRFTjIwMTFfcG9ydCwgcmVndmFsKTsKKwllbHNlIGlmIChBVEVOMjAxMV9wb3J0LT5Nc3JMc3IgPT0gMSkKKwkJaGFuZGxlX25ld0xzcihBVEVOMjAxMV9wb3J0LCByZWd2YWwpOworCitleGl0OgorCXJldHVybjsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9nZXRfcmVnKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOLCBfX3UxNiBXdmFsLCBfX3UxNiByZWcsCisJCQkgICAgX191MTYgKnZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gQVRFTi0+cG9ydC0+c2VyaWFsLT5kZXY7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHIgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJYnVmZmVyID0gKF9fdTggKikgQVRFTi0+Y3RybF9idWY7CisKKwlkciA9ICh2b2lkICopKGJ1ZmZlciArIDIpOworCWRyLT5iUmVxdWVzdFR5cGUgPSBBVEVOX1JEX1JUWVBFOworCWRyLT5iUmVxdWVzdCA9IEFURU5fUkRSRVE7CisJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KFd2YWwpOworCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNihyZWcpOworCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMik7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihBVEVOLT5jb250cm9sX3VyYiwgZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilkciwgYnVmZmVyLCAyLAorCQkJICAgICBBVEVOMjAxMV9jb250cm9sX2NhbGxiYWNrLCBBVEVOKTsKKwlBVEVOLT5jb250cm9sX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDI7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIoQVRFTi0+Y29udHJvbF91cmIsIEdGUF9BVE9NSUMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2ludGVycnVwdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKkFURU4yMDExX3NlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCV9fdTE2IERhdGE7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlfX3U4IHNwWzVdLCBzdDsKKwlpbnQgaTsKKwlfX3UxNiB3dmFsOworCWludCBtaW5vcjsKKworCWRiZygiJXMiLCAiIDogRW50ZXJpbmciKTsKKworCUFURU4yMDExX3NlcmlhbCA9IChzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICopdXJiLT5jb250ZXh0OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisJbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCXNlcmlhbCA9IEFURU4yMDExX3NlcmlhbC0+c2VyaWFsOworCisJLyogQVRFTklOVEwgZ2V0IDUgYnl0ZXMKKwkgKiBCeXRlIDEgSUlSIFBvcnQgMSAocG9ydC5udW1iZXIgaXMgMCkKKwkgKiBCeXRlIDIgSUlSIFBvcnQgMiAocG9ydC5udW1iZXIgaXMgMSkKKwkgKiBCeXRlIDMgSUlSIFBvcnQgMyAocG9ydC5udW1iZXIgaXMgMikKKwkgKiBCeXRlIDQgSUlSIFBvcnQgNCAocG9ydC5udW1iZXIgaXMgMykKKwkgKiBCeXRlIDUgRklGTyBzdGF0dXMgZm9yIGJvdGggKi8KKworCWlmIChsZW5ndGggJiYgbGVuZ3RoID4gNSkgeworCQlkYmcoIiVzIiwgIldyb25nIGRhdGEgISEhIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBNQVRSSVggKi8KKwlpZiAoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0gNCkgeworCQlzcFswXSA9IChfX3U4KSBkYXRhWzBdOworCQlzcFsxXSA9IChfX3U4KSBkYXRhWzFdOworCQlzcFsyXSA9IChfX3U4KSBkYXRhWzJdOworCQlzcFszXSA9IChfX3U4KSBkYXRhWzNdOworCQlzdCA9IChfX3U4KSBkYXRhWzRdOworCX0gZWxzZSB7CisJCXNwWzBdID0gKF9fdTgpIGRhdGFbMF07CisJCXNwWzFdID0gKF9fdTgpIGRhdGFbMl07CisJCS8qIHNwWzJdPShfX3U4KWRhdGFbMl07ICovCisJCS8qIHNwWzNdPShfX3U4KWRhdGFbM107ICovCisJCXN0ID0gKF9fdTgpIGRhdGFbNF07CisKKwl9CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQltaW5vciA9IHNlcmlhbC0+bWlub3I7CisJCWlmIChtaW5vciA9PSBTRVJJQUxfVFRZX05PX01JTk9SKQorCQkJbWlub3IgPSAwOworCQlpZiAoKEFURU4yMDExX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09IDIpCisJCSAgICAmJiAoaSAhPSAwKSkKKwkJCXd2YWwgPQorCQkJICAgICgoKF9fdTE2KSBzZXJpYWwtPnBvcnRbaV0tPm51bWJlciAtCisJCQkgICAgICAoX191MTYpIChtaW5vcikpICsgMikgPDwgODsKKwkJZWxzZQorCQkJd3ZhbCA9CisJCQkgICAgKCgoX191MTYpIHNlcmlhbC0+cG9ydFtpXS0+bnVtYmVyIC0KKwkJCSAgICAgIChfX3UxNikgKG1pbm9yKSkgKyAxKSA8PCA4OworCQlpZiAoQVRFTjIwMTFfcG9ydC0+b3BlbiAhPSAwKSB7CisJCQlpZiAoc3BbaV0gJiAweDAxKSB7CisJCQkJZGJnKCJTUCVkIE5vIEludGVycnVwdCAhISEiLCBpKTsKKwkJCX0gZWxzZSB7CisJCQkJc3dpdGNoIChzcFtpXSAmIDB4MGYpIHsKKwkJCQljYXNlIFNFUklBTF9JSVJfUkxTOgorCQkJCQlkYmcoIlNlcmlhbCBQb3J0ICVkOiBSZWNlaXZlciBzdGF0dXMgZXJyb3Igb3IgYWRkcmVzcyBiaXQgZGV0ZWN0ZWQgaW4gOS1iaXQgbW9kZSIsIGkpOworCQkJCQlBVEVOMjAxMV9wb3J0LT5Nc3JMc3IgPSAxOworCQkJCQlBVEVOMjAxMV9nZXRfcmVnKEFURU4yMDExX3BvcnQsIHd2YWwsCisJCQkJCQkJIExJTkVfU1RBVFVTX1JFR0lTVEVSLAorCQkJCQkJCSAmRGF0YSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU0VSSUFMX0lJUl9NUzoKKwkJCQkJZGJnKCJTZXJpYWwgUG9ydCAlZDogTW9kZW0gc3RhdHVzIGNoYW5nZSIsIGkpOworCQkJCQlBVEVOMjAxMV9wb3J0LT5Nc3JMc3IgPSAwOworCQkJCQlBVEVOMjAxMV9nZXRfcmVnKEFURU4yMDExX3BvcnQsIHd2YWwsCisJCQkJCQkJIE1PREVNX1NUQVRVU19SRUdJU1RFUiwKKwkJCQkJCQkgJkRhdGEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCX0KK2V4aXQ6CisJaWYgKEFURU4yMDExX3NlcmlhbC0+c3RhdHVzX3BvbGxpbmdfc3RhcnRlZCA9PSAwKQorCQlyZXR1cm47CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYlxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfYnVsa19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICpBVEVOMjAxMV9zZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIm5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlBVEVOMjAxMV9wb3J0ID0gKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopQVRFTjIwMTFfcG9ydC0+cG9ydDsKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlkYmcoIiVzIiwgIkVudGVyaW5nLi4uIik7CisKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJQVRFTjIwMTFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZBVEVOMjAxMV9wb3J0LT5wb3J0LT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0KKworCQlBVEVOMjAxMV9wb3J0LT5pY291bnQucnggKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlkYmcoIkFURU4yMDExX3BvcnQtPmljb3VudC5yeCBpcyAlZDoiLAorCQkJQVRFTjIwMTFfcG9ydC0+aWNvdW50LnJ4KTsKKwl9CisKKwlpZiAoIUFURU4yMDExX3BvcnQtPnJlYWRfdXJiKSB7CisJCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISEiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQlBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKQorCQkJZGJnKCJ1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQiLCBzdGF0dXMpOworCX0KK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfYnVsa19vdXRfZGF0YV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIm5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6JWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlBVEVOMjAxMV9wb3J0ID0gKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4iKTsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJkFURU4yMDExX3BvcnQtPnBvcnQtPnBvcnQpOworCisJaWYgKHR0eSAmJiBBVEVOMjAxMV9wb3J0LT5vcGVuKSB7CisJCS8qIHRlbGwgdGhlIHR0eSBkcml2ZXIgdGhhdCBzb21ldGhpbmcgaGFzIGNoYW5nZWQgKi8KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOworCX0KKworCS8qIHNjaGVkdWxlX3dvcmsoJkFURU4yMDExX3BvcnQtPnBvcnQtPndvcmspOyAqLworCXR0eV9rcmVmX3B1dCh0dHkpOworCit9CisKKyNpZmRlZiBBVEVOU2VyaWFsUHJvYmUKK3N0YXRpYyBpbnQgQVRFTjIwMTFfc2VyaWFsX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKworCS8qbmVlZCB0byBpbXBsZW1lbnQgdGhlIG1vZGVfcmVnIHJlYWRpbmcgYW5kIHVwZGF0aW5nXAorCSAgIHN0cnVjdHVyZXMgdXNiX3NlcmlhbF8gZGV2aWNlX3R5cGVcCisJICAgKGkuZSBudW1fcG9ydHMsIG51bV9idWxraW4sYnVsa291dCBldGMpICovCisJLyogQWxzbyB3ZSBjYW4gdXBkYXRlIHRoZSBjaGFuZ2VzICBhdHRhY2ggKi8KKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IEFURU4yMDExX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmVzcG9uc2U7CisJaW50IGo7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJX191MTYgRGF0YTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKkFURU4yMDExX3NlcmlhbDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7CisJaW50IG1pbm9yOworCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJQVRFTjIwMTFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCWlmIChBVEVOMjAxMV9zZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBpbmNyZW1lbnQgdGhlIG51bWJlciBvZiBvcGVuZWQgcG9ydHMgY291bnRlciBoZXJlICovCisJQVRFTjIwMTFfc2VyaWFsLT5Ob09mT3BlblBvcnRzKys7CisKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+d3JpdGVfdXJiLT5waXBlKTsKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJLyogSW5pdGlhbGlzaW5nIHRoZSB3cml0ZSB1cmIgcG9vbCAqLworCWZvciAoaiA9IDA7IGogPCBOVU1fVVJCUzsgKytqKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJCUFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOworCisJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9CisJCSAgICBrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJY29udGludWU7CisJCX0KKwl9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdGlhbGl6ZSBBVEVOMjAxMSAtLSBXcml0ZSBJbml0IHZhbHVlcyB0byBjb3JyZXNwb25kaW5nIFJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVyIEluZGV4CisgKiAxIDogSUVSCisgKiAyIDogRkNSCisgKiAzIDogTENSCisgKiA0IDogTUNSCisgKgorICogMHgwOCA6IFNQMS8yIENvbnRyb2wgUmVnCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE5FRUQgdG8gY2hlY2sgdGhlIGZhbGxvd2luZyBCbG9jayAqLworCisJRGF0YSA9IDB4MDsKKwlzdGF0dXMgPSBnZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQsICZEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIlJlYWRpbmcgU3ByZWcgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJRGF0YSB8PSAweDgwOworCXN0YXR1cyA9IHNldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJ3cml0aW5nIFNwcmVnIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJRGF0YSAmPSB+MHg4MDsKKwlzdGF0dXMgPSBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygid3JpdGluZyBTcHJlZyBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworLyogRW5kIG9mIGJsb2NrIHRvIGJlIGNoZWNrZWQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKkNIRUNLKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKFJTNDg1bW9kZSA9PSAwKQorCQlEYXRhID0gMHhDMDsKKwllbHNlCisJCURhdGEgPSAweDAwOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBTQ1JBVENIX1BBRF9SRUdJU1RFUiwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJXcml0aW5nIFNDUkFUQ0hfUEFEX1JFR0lTVEVSIGZhaWxlZCBzdGF0dXMtMHgleCIsIHN0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UKKwkJZGJnKCJTQ1JBVENIX1BBRF9SRUdJU1RFUiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLCBzdGF0dXMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKipDSEVDSyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIlJlYWRpbmcgQ29udHJvbHJlZyBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlEYXRhIHw9IDB4MDg7CQkvKiBEcml2ZXIgZG9uZSBiaXQgKi8KKwlEYXRhIHw9IDB4MjA7CQkvKiByeF9kaXNhYmxlICovCisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPQorCSAgICBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJ3cml0aW5nIENvbnRyb2xyZWcgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJLyoKKwkgKiBkbyByZWdpc3RlciBzZXR0aW5ncyBoZXJlCisJICogU2V0IGFsbCByZWdzIHRvIHRoZSBkZXZpY2UgZGVmYXVsdCB2YWx1ZXMuCisJICogRmlyc3QgRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4KKwkgKi8KKworCURhdGEgPSAweDAwOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoImRpc2FibGVpbmcgaW50ZXJydXB0cyBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBTZXQgRklGT19DT05UUk9MX1JFR0lTVEVSIHRvIHRoZSBkZWZhdWx0IHZhbHVlICovCisJRGF0YSA9IDB4MDA7CisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJXcml0aW5nIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiAgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlEYXRhID0gMHhjZjsJCS8qIGNoayAqLworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBGSUZPX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygiV3JpdGluZyBGSUZPX0NPTlRST0xfUkVHSVNURVIgIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJRGF0YSA9IDB4MDM7CQkvKiBMQ1JfQklUU184ICovCisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSID0gRGF0YTsKKworCURhdGEgPSAweDBiOwkJLyogTUNSX0RUUnxNQ1JfUlRTfE1DUl9NQVNURVJfSUUgKi8KKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSID0gRGF0YTsKKworI2lmZGVmIENoZWNrCisJRGF0YSA9IDB4MDA7CisJc3RhdHVzID0gZ2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgJkRhdGEpOworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiA9IERhdGE7CisKKwlEYXRhIHw9IFNFUklBTF9MQ1JfRExBQjsJLyogZGF0YSBsYXRjaCBlbmFibGUgaW4gTENSIDB4ODAgKi8KKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCURhdGEgPSAweDBjOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX0xTQiwgRGF0YSk7CisKKwlEYXRhID0gMHgwOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX01TQiwgRGF0YSk7CisKKwlEYXRhID0gMHgwMDsKKwlzdGF0dXMgPSBnZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCAmRGF0YSk7CisKKy8qICAgICAgRGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUjsgKi8JLyogZGF0YSBsYXRjaCBkaXNhYmxlICovCisJRGF0YSA9IERhdGEgJiB+U0VSSUFMX0xDUl9ETEFCOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiA9IERhdGE7CisjZW5kaWYKKwkvKiBjbGVhcmluZyBCdWxraW4gYW5kIEJ1bGtvdXQgRmlmbyAqLworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCAmRGF0YSk7CisKKwlEYXRhID0gRGF0YSB8IDB4MGM7CisJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKworCURhdGEgPSBEYXRhICYgfjB4MGM7CisJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKwkvKiBGaW5hbGx5IGVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCURhdGEgPSAweDA7CisJRGF0YSA9IDB4MGM7CisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIElOVEVSUlVQVF9FTkFCTEVfUkVHSVNURVIsIERhdGEpOworCisJLyogY2xlYXJpbmcgcnhfZGlzYWJsZSAqLworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwlEYXRhID0gRGF0YSAmIH4weDIwOworCXN0YXR1cyA9IHNldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCBEYXRhKTsKKworCS8qIHJ4X25lZ2F0ZSAqLworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwlEYXRhID0gRGF0YSB8IDB4MTA7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgKgorCSAqIHRoZSBkYXRhIHRocm91Z2gsb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggICAgICAqCisJICogaGlnaCBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuICAgICAgICovCisKKwlpZiAodHR5KQorCQl0dHktPmxvd19sYXRlbmN5ID0gMTsKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBzZXQgdXAgb3VyIGVuZHBvaW50IGluZm8geWV0CisJICogKGNhbid0IHNldCBpdCB1cCBpbiBBVEVOMjAxMV9zdGFydHVwIGFzIHRoZSBzdHJ1Y3R1cmVzCisJICogd2VyZSBub3Qgc2V0IHVwIGF0IHRoYXQgdGltZS4pCisJICovCisJaWYgKEFURU4yMDExX3NlcmlhbC0+Tm9PZk9wZW5Qb3J0cyA9PSAxKSB7CisJCS8qIHN0YXJ0IHRoZSBzdGF0dXMgcG9sbGluZyBoZXJlICovCisJCUFURU4yMDExX3NlcmlhbC0+c3RhdHVzX3BvbGxpbmdfc3RhcnRlZCA9IDE7CisJCS8qIElmIG5vdCB5ZXQgc2V0LCBTZXQgaGVyZSAqLworCQlBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIgPQorCQkgICAgc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fYnVmZmVyOworCQlBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9pbl9lbmRwb2ludCA9CisJCSAgICBzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CisJCUFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiID0KKwkJICAgIHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYjsKKworCQkvKiBzZXQgdXAgaW50ZXJydXB0IHVyYiAqLworCQl1c2JfZmlsbF9pbnRfdXJiKEFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLAorCQkJCSBzZXJpYWwtPmRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQlBVEVOMjAxMV9zZXJpYWwtPgorCQkJCQkJaW50ZXJydXB0X2luX2VuZHBvaW50KSwKKwkJCQkgQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAorCQkJCSBBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYi0+CisJCQkJIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJIEFURU4yMDExX2ludGVycnVwdF9jYWxsYmFjaywgQVRFTjIwMTFfc2VyaWFsLAorCQkJCSBBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYi0+aW50ZXJ2YWwpOworCisJCS8qIHN0YXJ0IGludGVycnVwdCByZWFkIGZvciBBVEVOMjAxMSAgICAgICAgICAgICAgICoKKwkJICogd2lsbCBjb250aW51ZSBhcyBsb25nIGFzIEFURU4yMDExIGlzIGNvbm5lY3RlZCAgKi8KKworCQlyZXNwb25zZSA9CisJCSAgICB1c2Jfc3VibWl0X3VyYihBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwKKwkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3BvbnNlKSB7CisJCQlkYmcoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwKKwkJCQlfX2Z1bmNfXywgcmVzcG9uc2UpOworCQl9CisKKwl9CisKKwkvKgorCSAqIFNlZSBpZiB3ZSd2ZSBzZXQgdXAgb3VyIGVuZHBvaW50IGluZm8geWV0CisJICogKGNhbid0IHNldCBpdCB1cCBpbiBBVEVOMjAxMV9zdGFydHVwIGFzIHRoZQorCSAqIHN0cnVjdHVyZXMgd2VyZSBub3Qgc2V0IHVwIGF0IHRoYXQgdGltZS4pCisJICovCisKKwlkYmcoInBvcnQgbnVtYmVyIGlzICVkIiwgcG9ydC0+bnVtYmVyKTsKKwlkYmcoInNlcmlhbCBudW1iZXIgaXMgJWQiLCBwb3J0LT5zZXJpYWwtPm1pbm9yKTsKKwlkYmcoIkJ1bGtpbiBlbmRwb2ludCBpcyAlZCIsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKKwlkYmcoIkJ1bGtPdXQgZW5kcG9pbnQgaXMgJWQiLCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpOworCWRiZygiSW50ZXJydXB0IGVuZHBvaW50IGlzICVkIiwKKwkJcG9ydC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyk7CisJZGJnKCJwb3J0J3MgbnVtYmVyIGluIHRoZSBkZXZpY2UgaXMgJWQiLCBBVEVOMjAxMV9wb3J0LT5wb3J0X251bSk7CisJQVRFTjIwMTFfcG9ydC0+YnVsa19pbl9idWZmZXIgPSBwb3J0LT5idWxrX2luX2J1ZmZlcjsKKwlBVEVOMjAxMV9wb3J0LT5idWxrX2luX2VuZHBvaW50ID0gcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CisJQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwlBVEVOMjAxMV9wb3J0LT5idWxrX291dF9lbmRwb2ludCA9IHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKKworCW1pbm9yID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJbWlub3IgPSAwOworCisJLyogc2V0IHVwIG91ciBidWxrIGluIHVyYiAqLworCWlmICgoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0gMikKKwkgICAgJiYgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIChfX3UxNikgKG1pbm9yKSkgIT0gMCkpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkJICAocG9ydC0+CisJCQkJCQkgICBidWxrX2luX2VuZHBvaW50QWRkcmVzcyArCisJCQkJCQkgICAyKSksIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLAorCQkJCSAgQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPgorCQkJCSAgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgIEFURU4yMDExX2J1bGtfaW5fY2FsbGJhY2ssIEFURU4yMDExX3BvcnQpOworCX0gZWxzZQorCQl1c2JfZmlsbF9idWxrX3VyYihBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYiwKKwkJCQkgIHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkJICBwb3J0LT4KKwkJCQkJCSAgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgcG9ydC0+YnVsa19pbl9idWZmZXIsCisJCQkJICBBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYi0+CisJCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgQVRFTjIwMTFfYnVsa19pbl9jYWxsYmFjaywgQVRFTjIwMTFfcG9ydCk7CisKKwlkYmcoIkFURU4yMDExX29wZW46IGJ1bGtpbiBlbmRwb2ludCBpcyAlZCIsCisJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKKwlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzcG9uc2UpIHsKKwkJZXJyKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLCBfX2Z1bmNfXywKKwkJICAgIHJlc3BvbnNlKTsKKwl9CisKKwkvKiBpbml0aWFsaXplIG91ciB3YWl0IHF1ZXVlcyAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJkFURU4yMDExX3BvcnQtPndhaXRfY2hhc2UpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJkFURU4yMDExX3BvcnQtPndhaXRfY29tbWFuZCk7CisKKwkvKiBpbml0aWFsaXplIG91ciBpY291bnQgc3RydWN0dXJlICovCisJbWVtc2V0KCYoQVRFTjIwMTFfcG9ydC0+aWNvdW50KSwgMHgwMCwgc2l6ZW9mKEFURU4yMDExX3BvcnQtPmljb3VudCkpOworCisJLyogaW5pdGlhbGl6ZSBvdXIgcG9ydCBzZXR0aW5ncyAqLworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IE1DUl9NQVNURVJfSUU7CS8qIE11c3Qgc2V0IHRvIGVuYWJsZSBpbnRzISAqLworCUFURU4yMDExX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gMDsKKwkvKiBzZW5kIGEgb3BlbiBwb3J0IGNvbW1hbmQgKi8KKwlBVEVOMjAxMV9wb3J0LT5vcGVuID0gMTsKKwkvKiBBVEVOMjAxMV9jaGFuZ2VfcG9ydF9zZXR0aW5ncyhBVEVOMjAxMV9wb3J0LG9sZF90ZXJtaW9zKTsgKi8KKwkvKiBTZXR1cCB0ZXJtaW9zICovCisJQVRFTjIwMTFfc2V0X3Rlcm1pb3ModHR5LCBwb3J0LCAmdG1wX3Rlcm1pb3MpOworCUFURU4yMDExX3BvcnQtPmljb3VudC50eCA9IDA7CisJQVRFTjIwMTFfcG9ydC0+aWNvdW50LnJ4ID0gMDsKKworCWRiZygidXNiX3NlcmlhbCBzZXJpYWw6JXggICAgICAgQVRFTjIwMTFfcG9ydDoleFxuQVRFTjIwMTFfc2VyaWFsOiV4ICAgICAgdXNiX3NlcmlhbF9wb3J0IHBvcnQ6JXgiLAorCSAgICAgKHVuc2lnbmVkIGludClzZXJpYWwsICh1bnNpZ25lZCBpbnQpQVRFTjIwMTFfcG9ydCwKKwkgICAgICh1bnNpZ25lZCBpbnQpQVRFTjIwMTFfc2VyaWFsLCAodW5zaWduZWQgaW50KXBvcnQpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgaTsKKwlpbnQgY2hhcnMgPSAwOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCisJLyogZGJnKCIlcyIsIiBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXI6ZW50ZXJpbmcgLi4uLi4uLi4uLi4iKTsgKi8KKworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkgeworCQlkYmcoIiVzIiwgIkFURU4yMDExX2JyZWFrOmxlYXZpbmcgLi4uLi4uLi4uLi4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKQorCQlpZiAoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCQljaGFycyArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworCit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2Jsb2NrX3VudGlsX3R4X2VtcHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCSAgc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQpCit7CisJaW50IHRpbWVvdXQgPSBIWiAvIDEwOworCWludCB3YWl0ID0gMzA7CisJaW50IGNvdW50OworCisJd2hpbGUgKDEpIHsKKwkJY291bnQgPSBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIodHR5KTsKKworCQkvKiBDaGVjayBmb3IgQnVmZmVyIHN0YXR1cyAqLworCQlpZiAoY291bnQgPD0gMCkKKwkJCXJldHVybjsKKworCQkvKiBCbG9jayB0aGUgdGhyZWFkIGZvciBhIHdoaWxlICovCisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmQVRFTjIwMTFfcG9ydC0+d2FpdF9jaGFzZSwKKwkJCQkJICAgICAgIHRpbWVvdXQpOworCisJCS8qIE5vIGFjdGl2aXR5Li4gY291bnQgZG93biBzZWN0aW9uICovCisJCXdhaXQtLTsKKwkJaWYgKHdhaXQgPT0gMCkgeworCQkJZGJnKCIlcyAtIFRJTUVPVVQiLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQkvKiBSZXNldCB0aW1vdXQgdmFsdWUgYmFjayB0byBzZWNvbmRzICovCisJCQl3YWl0ID0gMzA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKkFURU4yMDExX3NlcmlhbDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlpbnQgbm9fdXJiczsKKwlfX3UxNiBEYXRhOworCisJZGJnKCIlcyIsICJBVEVOMjAxMV9jbG9zZTplbnRlcmluZy4uLiIpOworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCS8qIHRha2UgdGhlIEFkcGF0ZXIgYW5kIHBvcnQncyBwcml2YXRlIGRhdGEgKi8KKwlBVEVOMjAxMV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoKEFURU4yMDExX3NlcmlhbCA9PSBOVUxMKSB8fCAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCS8qIGZsdXNoIGFuZCBibG9jayh3YWl0KSB1bnRpbCB0eCBpcyBlbXB0eSAqLworCQlBVEVOMjAxMV9ibG9ja191bnRpbF90eF9lbXB0eSh0dHksIEFURU4yMDExX3BvcnQpOworCX0KKwkvKiBraWxsIHRoZSBwb3J0cyBVUkIncyAqLworCWZvciAobm9fdXJicyA9IDA7IG5vX3VyYnMgPCBOVU1fVVJCUzsgbm9fdXJicysrKQorCQl1c2Jfa2lsbF91cmIoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbbm9fdXJic10pOworCS8qIEZyZWVpbmcgV3JpdGUgVVJCcyAqLworCWZvciAobm9fdXJicyA9IDA7IG5vX3VyYnMgPCBOVU1fVVJCUzsgKytub191cmJzKSB7CisJCWtmcmVlKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW25vX3VyYnNdLT50cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbbm9fdXJic10pOworCX0KKwkvKiBXaGlsZSBjbG9zaW5nIHBvcnQsIHNodXRkb3duIGFsbCBidWxrIHJlYWQsIHdyaXRlICAqCisJICogYW5kIGludGVycnVwdCByZWFkIGlmIHRoZXkgZXhpc3RzICAgICAgICAgICAgICAgICAgKi8KKwlpZiAoc2VyaWFsLT5kZXYpIHsKKwkJaWYgKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYikgeworCQkJZGJnKCIlcyIsICJTaHV0ZG93biBidWxrIHdyaXRlIik7CisJCQl1c2Jfa2lsbF91cmIoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiKTsKKwkJfQorCQlpZiAoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIpIHsKKwkJCWRiZygiJXMiLCAiU2h1dGRvd24gYnVsayByZWFkIik7CisJCQl1c2Jfa2lsbF91cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIpOworCQl9CisJCWlmICgoJkFURU4yMDExX3BvcnQtPmNvbnRyb2xfdXJiKSkgeworCQkJZGJnKCIlcyIsICJTaHV0ZG93biBjb250cm9sIHJlYWQiKTsKKwkJCS8qIHVzYl9raWxsX3VyYiAoQVRFTjIwMTFfcG9ydC0+Y29udHJvbF91cmIpOyAqLworCisJCX0KKwl9CisJLyogaWYoQVRFTjIwMTFfcG9ydC0+Y3RybF9idWYgIT0gTlVMTCkgKi8KKwkJLyoga2ZyZWUoQVRFTjIwMTFfcG9ydC0+Y3RybF9idWYpOyAqLworCS8qIGRlY3JlbWVudCB0aGUgbm8ub2Ygb3BlbiBwb3J0cyBjb3VudGVyIG9mIGFuIGluZGl2aWR1YWwgVVNCLXNlcmlhbCBhZGFwdGVyLiAqLworCUFURU4yMDExX3NlcmlhbC0+Tm9PZk9wZW5Qb3J0cy0tOworCWRiZygiTm9PZk9wZW5Qb3J0cyBpbiBjbG9zZSVkOmluIHBvcnQlZCIsCisJCUFURU4yMDExX3NlcmlhbC0+Tm9PZk9wZW5Qb3J0cywgcG9ydC0+bnVtYmVyKTsKKwlpZiAoQVRFTjIwMTFfc2VyaWFsLT5Ob09mT3BlblBvcnRzID09IDApIHsKKwkJLyogc3RvcCB0aGUgc3R1cyBwb2xsaW5nIGhlcmUgKi8KKwkJQVRFTjIwMTFfc2VyaWFsLT5zdGF0dXNfcG9sbGluZ19zdGFydGVkID0gMDsKKwkJaWYgKEFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiKSB7CisJCQlkYmcoIiVzIiwgIlNodXRkb3duIGludGVycnVwdF9yZWFkX3VyYiIpOworCQkJLyogQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyPU5VTEw7ICovCisJCQkvKiB1c2Jfa2lsbF91cmIgKEFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiKTsgKi8KKwkJfQorCX0KKwlpZiAoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiKSB7CisJCS8qIGlmIHRoaXMgdXJiIGhhZCBhIHRyYW5zZmVyIGJ1ZmZlciBhbHJlYWR5IChvbGQgdHgpIGZyZWUgaXQgKi8KKwkJa2ZyZWUoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiKTsKKwl9CisKKwkvKiBjbGVhciB0aGUgTUNSICYgSUVSICovCisJRGF0YSA9IDB4MDA7CisJc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCURhdGEgPSAweDAwOworCXNldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKKworCUFURU4yMDExX3BvcnQtPm9wZW4gPSAwOworCWRiZygiJXMiLCAiTGVhdmluZyAuLi4uLi4uLi4uLi4iKTsKKworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9ibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkJc3RydWN0IEFURU5JTlRMX3BvcnQKKwkJCQkJCSpBVEVOMjAxMV9wb3J0KQoreworCWludCB0aW1lb3V0ID0gMSAqIEhaOworCWludCB3YWl0ID0gMTA7CisJaW50IGNvdW50OworCisJd2hpbGUgKDEpIHsKKwkJY291bnQgPSBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIodHR5KTsKKworCQkvKiBDaGVjayBmb3IgQnVmZmVyIHN0YXR1cyAqLworCQlpZiAoY291bnQgPD0gMCkgeworCQkJQVRFTjIwMTFfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSAwOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQmxvY2sgdGhlIHRocmVhZCBmb3IgYSB3aGlsZSAqLworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJkFURU4yMDExX3BvcnQtPndhaXRfY2hhc2UsCisJCQkJCSAgICAgICB0aW1lb3V0KTsKKwkJLyogTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duIHNlY3Rpb24gKi8KKwkJd2FpdC0tOworCQlpZiAod2FpdCA9PSAwKSB7CisJCQlkYmcoIiVzIC0gVElNRU9VVCIsIF9fZnVuY19fKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCS8qIFJlc2V0IHRpbW91dCB2YWx1ZSBiYWNrIHRvIHNlY29uZHMgKi8KKwkJCXdhaXQgPSAxMDsKKwkJfQorCX0KKworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgY2hhciBkYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqQVRFTjIwMTFfc2VyaWFsOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uLiIpOworCWRiZygiQVRFTjIwMTFfYnJlYWs6IFN0YXJ0Iik7CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlBVEVOMjAxMV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmICgoQVRFTjIwMTFfc2VyaWFsID09IE5VTEwpIHx8IChBVEVOMjAxMV9wb3J0ID09IE5VTEwpKQorCQlyZXR1cm47CisKKwkvKiBmbHVzaCBhbmQgY2hhc2UgKi8KKwlBVEVOMjAxMV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IDE7CisKKwlpZiAoc2VyaWFsLT5kZXYpIHsKKwkJLyogZmx1c2ggYW5kIGJsb2NrIHVudGlsIHR4IGlzIGVtcHR5ICovCisJCUFURU4yMDExX2Jsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKHR0eSwgQVRFTjIwMTFfcG9ydCk7CisJfQorCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKQorCQlkYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSIHwgTENSX1NFVF9CUkVBSzsKKwllbHNlCisJCWRhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgJiB+TENSX1NFVF9CUkVBSzsKKworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiA9IGRhdGE7CisJZGJnKCJBVEVOMjAxMV9icmVhayBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgaXMgJXgiLAorCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IpOworCXNldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWludCBpOworCWludCByb29tID0gMDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkgeworCQlkYmcoIiVzIiwgIkFURU4yMDExX2JyZWFrOmxlYXZpbmcgLi4uLi4uLi4uLi4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKQorCQlpZiAoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCQlyb29tICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIHJvb20pOworCXJldHVybiByb29tOworCit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQoreworCWludCBzdGF0dXM7CisJaW50IGk7CisJaW50IGJ5dGVzX3NlbnQgPSAwOworCWludCB0cmFuc2Zlcl9zaXplOworCWludCBtaW5vcjsKKworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqQVRFTjIwMTFfc2VyaWFsOworCXN0cnVjdCB1cmIgKnVyYjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyZW50X3Bvc2l0aW9uID0gZGF0YTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhMTsKKwlkYmcoIiVzIiwgImVudGVyaW5nIC4uLi4uLi4uLi4uIik7CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpIHsKKwkJZGJnKCIlcyIsICJBVEVOMjAxMV9wb3J0IGlzIE5VTEwiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCUFURU4yMDExX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlpZiAoQVRFTjIwMTFfc2VyaWFsID09IE5VTEwpIHsKKwkJZGJnKCIlcyIsICJBVEVOMjAxMV9zZXJpYWwgaXMgTlVMTCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogdHJ5IHRvIGZpbmQgYSBmcmVlIHVyYiBpbiB0aGUgbGlzdCAqLworCXVyYiA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCXVyYiA9IEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldOworCQkJZGJnKCJVUkI6JWQiLCBpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHVyYiA9PSBOVUxMKSB7CisJCWRiZygiJXMgLSBubyBtb3JlIGZyZWUgdXJicyIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0KKwkJICAgIGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJZXJyKCIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisJdHJhbnNmZXJfc2l6ZSA9IG1pbihjb3VudCwgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFKTsKKworCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9wb3NpdGlvbiwgdHJhbnNmZXJfc2l6ZSk7CisJLyogdXNiX3NlcmlhbF9kZWJ1Z19kYXRhIChfX0ZJTEVfXywgX19mdW5jX18sIHRyYW5zZmVyX3NpemUsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsgKi8KKworCS8qIGZpbGwgdXJiIHdpdGggZGF0YSBhbmQgc3VibWl0ICAqLworCW1pbm9yID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJbWlub3IgPSAwOworCWlmICgoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0gMikKKwkgICAgJiYgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIChfX3UxNikgKG1pbm9yKSkgIT0gMCkpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBBVEVOMjAxMV9zZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKEFURU4yMDExX3NlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQkgIChwb3J0LT4KKwkJCQkJCSAgIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcykgKworCQkJCQkJICAyKSwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJICB0cmFuc2Zlcl9zaXplLAorCQkJCSAgQVRFTjIwMTFfYnVsa19vdXRfZGF0YV9jYWxsYmFjaywKKwkJCQkgIEFURU4yMDExX3BvcnQpOworCX0gZWxzZQorCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwKKwkJCQkgIEFURU4yMDExX3NlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUoQVRFTjIwMTFfc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJCSAgcG9ydC0+CisJCQkJCQkgIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdHJhbnNmZXJfc2l6ZSwKKwkJCQkgIEFURU4yMDExX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssCisJCQkJICBBVEVOMjAxMV9wb3J0KTsKKworCWRhdGExID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJZGJnKCJidWxrb3V0IGVuZHBvaW50IGlzICVkIiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKwkvKiBmb3IoaT0wO2kgPCB1cmItPmFjdHVhbF9sZW5ndGg7aSsrKSAqLworCQkvKiBkYmcoIkRhdGEgaXMgJWMgIixkYXRhMVtpXSk7ICovCisKKwkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisJaWYgKHN0YXR1cykgeworCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWQiLAorCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CisJCWdvdG8gZXhpdDsKKwl9CisJYnl0ZXNfc2VudCA9IHRyYW5zZmVyX3NpemU7CisJQVRFTjIwMTFfcG9ydC0+aWNvdW50LnR4ICs9IHRyYW5zZmVyX3NpemU7CisJZGJnKCJBVEVOMjAxMV9wb3J0LT5pY291bnQudHggaXMgJWQ6IiwgQVRFTjIwMTFfcG9ydC0+aWNvdW50LnR4KTsKKworZXhpdDoKKwlyZXR1cm4gYnl0ZXNfc2VudDsKK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlpbnQgc3RhdHVzOworCisJZGJnKCItIHBvcnQgJWQiLCBwb3J0LT5udW1iZXIpOworCisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghQVRFTjIwMTFfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIiwgInBvcnQgbm90IG9wZW5lZCIpOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uICIpOworCisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdG9wIGNoYXJhY3RlciAqLworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgPSBTVE9QX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gQVRFTjIwMTFfd3JpdGUodHR5LCBwb3J0LCAmc3RvcF9jaGFyLCAxKTsKKwkJaWYgKHN0YXR1cyA8PSAwKQorCQkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgUlRTL0NUUywgdG9nZ2xlIHRoYXQgbGluZSAqLworCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiAmPSB+TUNSX1JUUzsKKwkJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCQkJICAgICAgQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm47CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghQVRFTjIwMTFfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uICIpOworCisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdGFydCBjaGFyYWN0ZXIgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gQVRFTjIwMTFfd3JpdGUodHR5LCBwb3J0LCAmc3RhcnRfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHRvZ2dsZSB0aGF0IGxpbmUgKi8KKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgfD0gTUNSX1JUUzsKKwkJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCQkJICAgICAgQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm47CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IEFURU4yMDExX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXVuc2lnbmVkIGludCByZXN1bHQ7CisJX191MTYgbXNyOworCV9fdTE2IG1jcjsKKwkvKiB1bnNpZ25lZCBpbnQgbWNyOyAqLworCWludCBzdGF0dXMgPSAwOworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdGF0dXMgPSBnZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fU1RBVFVTX1JFR0lTVEVSLCAmbXNyKTsKKwlzdGF0dXMgPSBnZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgJm1jcik7CisJLyogbWNyID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOyAqLworCS8qIENPTU1FTlQyOiB0aGUgRmFsbG93aW5nIHRocmVlIGxpbmUgYXJlIGNvbW1lbnRlZCBmb3IgdXBkYXRpbmcgb25seSBNU1IgdmFsdWVzICovCisJcmVzdWx0ID0gKChtY3IgJiBNQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCisJICAgIHwgKChtY3IgJiBNQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJICAgIHwgKChtY3IgJiBNQ1JfTE9PUEJBQ0spID8gVElPQ01fTE9PUCA6IDApCisJICAgIHwgKChtc3IgJiBBVEVOMjAxMV9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCisJICAgIHwgKChtc3IgJiBBVEVOMjAxMV9NU1JfQ0QpID8gVElPQ01fQ0FSIDogMCkKKwkgICAgfCAoKG1zciAmIEFURU4yMDExX01TUl9SSSkgPyBUSU9DTV9SSSA6IDApCisJICAgIHwgKChtc3IgJiBBVEVOMjAxMV9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOworCisJZGJnKCIlcyAtIDB4JTA0WCIsIF9fZnVuY19fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXVuc2lnbmVkIGludCBtY3I7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltY3IgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQltY3IgJj0gfk1DUl9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQltY3IgJj0gfk1DUl9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fTE9PUCkKKwkJbWNyICY9IH5NQ1JfTE9PUEJBQ0s7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQltY3IgfD0gTUNSX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQltY3IgfD0gTUNSX0RUUjsKKwlpZiAoc2V0ICYgVElPQ01fTE9PUCkKKwkJbWNyIHw9IE1DUl9MT09QQkFDSzsKKworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IG1jcjsKKworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBtY3IpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygic2V0dGluZyBNT0RFTV9DT05UUk9MX1JFR0lTVEVSIEZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKworCWRiZygiQVRFTjIwMTFfc2V0X3Rlcm1pb3M6IFNUQVJUIik7CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCFBVEVOMjAxMV9wb3J0LT5vcGVuKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgInNldHRpbmcgdGVybWlvcyAtICIpOworCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwlpZiAoIWNmbGFnKSB7CisJCWRiZygiJXMgJXMiLCBfX2Z1bmNfXywgImNmbGFnIGlzIE5VTEwiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcodHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PQorCQkgICAgIFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXMiLCAiTm90aGluZyB0byBjaGFuZ2UiKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWRiZygiJXMgLSBjbGZhZyAlMDh4IGlmbGFnICUwOHgiLCBfX2Z1bmNfXywKKwkgICAgdHR5LT50ZXJtaW9zLT5jX2NmbGFnLCBSRUxFVkFOVF9JRkxBRyh0dHktPnRlcm1pb3MtPmNfaWZsYWcpKTsKKworCWlmIChvbGRfdGVybWlvcykgeworCQlkYmcoIiVzIC0gb2xkIGNsZmFnICUwOHggb2xkIGlmbGFnICUwOHgiLCBfX2Z1bmNfXywKKwkJICAgIG9sZF90ZXJtaW9zLT5jX2NmbGFnLCBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpOworCX0KKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBjaGFuZ2UgdGhlIHBvcnQgc2V0dGluZ3MgdG8gdGhlIG5ldyBvbmVzIHNwZWNpZmllZCAqLworCisJQVRFTjIwMTFfY2hhbmdlX3BvcnRfc2V0dGluZ3ModHR5LCBBVEVOMjAxMV9wb3J0LCBvbGRfdGVybWlvcyk7CisKKwlpZiAoIUFURU4yMDExX3BvcnQtPnJlYWRfdXJiKSB7CisJCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISEhISIpOworCQlyZXR1cm47CisJfQorCisJaWYgKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCUFURU4yMDExX3BvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcKKwkJCSAgICAoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQiLAorCQkJICAgICBzdGF0dXMpOworCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBnZXRfbHNyX2luZm8oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0LAorCQkJdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCit7CisJaW50IGNvdW50OworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCisJY291bnQgPSBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIodHR5KTsKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0tIEVtcHR5IiwgX19mdW5jX18pOworCQlyZXN1bHQgPSBUSU9DU0VSX1RFTVQ7CisJfQorCisJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfbnVtYmVyX2J5dGVzX2F2YWlsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJICBzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydCwKKwkJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCisJaWYgKCF0dHkpCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisKKwlyZXN1bHQgPSB0dHktPnJlYWRfY250OworCisJZGJnKCIlcyglZCkgPSAlZCIsIF9fZnVuY19fLCBBVEVOMjAxMV9wb3J0LT5wb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X21vZGVtX2luZm8oc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCBtY3I7CisJdW5zaWduZWQgaW50IGFyZzsKKwlfX3UxNiBEYXRhOworCWludCBzdGF0dXM7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKUFURU4yMDExX3BvcnQtPnBvcnQ7CisKKwltY3IgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZywgdmFsdWUsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01CSVM6CisJCWlmIChhcmcgJiBUSU9DTV9SVFMpCisJCQltY3IgfD0gTUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0RUUikKKwkJCW1jciB8PSBNQ1JfUlRTOworCQlpZiAoYXJnICYgVElPQ01fTE9PUCkKKwkJCW1jciB8PSBNQ1JfTE9PUEJBQ0s7CisJCWJyZWFrOworCisJY2FzZSBUSU9DTUJJQzoKKwkJaWYgKGFyZyAmIFRJT0NNX1JUUykKKwkJCW1jciAmPSB+TUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0RUUikKKwkJCW1jciAmPSB+TUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0xPT1ApCisJCQltY3IgJj0gfk1DUl9MT09QQkFDSzsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NNU0VUOgorCQkvKiB0dXJuIG9mZiB0aGUgUlRTIGFuZCBEVFIgYW5kIExPT1BCQUNLCisJCSAqIGFuZCB0aGVuIG9ubHkgdHVybiBvbiB3aGF0IHdhcyBhc2tlZCB0byAqLworCQltY3IgJj0gfihNQ1JfUlRTIHwgTUNSX0RUUiB8IE1DUl9MT09QQkFDSyk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX1JUUykgPyBNQ1JfUlRTIDogMCk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX0RUUikgPyBNQ1JfRFRSIDogMCk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX0xPT1ApID8gTUNSX0xPT1BCQUNLIDogMCk7CisJCWJyZWFrOworCX0KKworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IG1jcjsKKworCURhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7CisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygic2V0dGluZyBNT0RFTV9DT05UUk9MX1JFR0lTVEVSIEZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X21vZGVtX2luZm8oc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsCisJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCV9fdTE2IG1zcjsKKwl1bnNpZ25lZCBpbnQgbWNyID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBnZXRfdWFydF9yZWcoQVRFTjIwMTFfcG9ydC0+cG9ydCwgTU9ERU1fU1RBVFVTX1JFR0lTVEVSLCAmbXNyKTsKKwlyZXN1bHQgPSAoKG1jciAmIE1DUl9EVFIpID8gVElPQ01fRFRSIDogMCkJLyogMHgwMDIgKi8KKwkgICAgfCgobWNyICYgTUNSX1JUUykgPyBUSU9DTV9SVFMgOiAwKQkvKiAweDAwNCAqLworCSAgICB8KChtc3IgJiBBVEVOMjAxMV9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCS8qIDB4MDIwICovCisJICAgIHwoKG1zciAmIEFURU4yMDExX01TUl9DRCkgPyBUSU9DTV9DQVIgOiAwKQkvKiAweDA0MCAqLworCSAgICB8KChtc3IgJiBBVEVOMjAxMV9NU1JfUkkpID8gVElPQ01fUkkgOiAwKQkvKiAweDA4MCAqLworCSAgICB8KChtc3IgJiBBVEVOMjAxMV9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOwkvKiAweDEwMCAqLworCisJZGJnKCIlcyAtLSAleCIsIF9fZnVuY19fLCByZXN1bHQpOworCisJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsCisJCQkgICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnJldGluZm8pCit7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFyZXRpbmZvKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CisKKwl0bXAudHlwZSA9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lID0gQVRFTjIwMTFfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAodG1wLmxpbmUgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJdG1wLmxpbmUgPSAwOworCXRtcC5wb3J0ID0gQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyOworCXRtcC5pcnEgPSAwOworCXRtcC5mbGFncyA9IEFTWU5DX1NLSVBfVEVTVCB8IEFTWU5DX0FVVE9fSVJROworCXRtcC54bWl0X2ZpZm9fc2l6ZSA9IE5VTV9VUkJTICogVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworCXRtcC5iYXVkX2Jhc2UgPSA5NjAwOworCXRtcC5jbG9zZV9kZWxheSA9IDUgKiBIWjsKKwl0bXAuY2xvc2luZ193YWl0ID0gMzAgKiBIWjsKKworCWlmIChjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IEFURU4yMDExX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKKwlzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCBpY291bnQ7CisJaW50IEFURU5yZXQgPSAwOworCXVuc2lnbmVkIGludCBfX3VzZXIgKnVzZXJfYXJnID0gKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmc7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCA9IDB4JXgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwkJLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgKi8KKworCWNhc2UgVElPQ0lOUToKKwkJZGJnKCIlcyAoJWQpIFRJT0NJTlEiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIGdldF9udW1iZXJfYnl0ZXNfYXZhaWwodHR5LCBBVEVOMjAxMV9wb3J0LCB1c2VyX2FyZyk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DT1VUUToKKwkJZGJnKCIlcyAoJWQpIFRJT0NPVVRRIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBwdXRfdXNlcihBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIodHR5KSwgdXNlcl9hcmcpOworCQlicmVhazsKKworCWNhc2UgVElPQ1NFUkdFVExTUjoKKwkJZGJnKCIlcyAoJWQpIFRJT0NTRVJHRVRMU1IiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIGdldF9sc3JfaW5mbyh0dHksIEFURU4yMDExX3BvcnQsIHVzZXJfYXJnKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRJT0NNQklTOgorCWNhc2UgVElPQ01CSUM6CisJY2FzZSBUSU9DTVNFVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNU0VUL1RJT0NNQklDL1RJT0NNU0VUIiwgX19mdW5jX18sCisJCSAgICBwb3J0LT5udW1iZXIpOworCQlBVEVOcmV0ID0gc2V0X21vZGVtX2luZm8oQVRFTjIwMTFfcG9ydCwgY21kLCB1c2VyX2FyZyk7CisJCXJldHVybiBBVEVOcmV0OworCisJY2FzZSBUSU9DTUdFVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNR0VUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBnZXRfbW9kZW1faW5mbyhBVEVOMjAxMV9wb3J0LCB1c2VyX2FyZyk7CisKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlkYmcoIiVzICglZCkgVElPQ0dTRVJJQUwiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIGdldF9zZXJpYWxfaW5mbyhBVEVOMjAxMV9wb3J0LAorCQkJCSAgICAgICAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopYXJnKTsKKworCWNhc2UgVElPQ1NTRVJJQUw6CisJCWRiZygiJXMgKCVkKSBUSU9DU1NFUklBTCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCQlicmVhazsKKworCWNhc2UgVElPQ01JV0FJVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNSVdBSVQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJY3ByZXYgPSBBVEVOMjAxMV9wb3J0LT5pY291bnQ7CisJCXdoaWxlICgxKSB7CisJCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCWNub3cgPSBBVEVOMjAxMV9wb3J0LT5pY291bnQ7CisJCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJgorCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpCisJCQkJcmV0dXJuIC1FSU87CS8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLworCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKKwkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgJiYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJY3ByZXYgPSBjbm93OworCQl9CisJCS8qIE5PVFJFQUNIRUQgKi8KKwkJYnJlYWs7CisKKwljYXNlIFRJT0NHSUNPVU5UOgorCQljbm93ID0gQVRFTjIwMTFfcG9ydC0+aWNvdW50OworCQlpY291bnQuY3RzID0gY25vdy5jdHM7CisJCWljb3VudC5kc3IgPSBjbm93LmRzcjsKKwkJaWNvdW50LnJuZyA9IGNub3cucm5nOworCQlpY291bnQuZGNkID0gY25vdy5kY2Q7CisJCWljb3VudC5yeCA9IGNub3cucng7CisJCWljb3VudC50eCA9IGNub3cudHg7CisJCWljb3VudC5mcmFtZSA9IGNub3cuZnJhbWU7CisJCWljb3VudC5vdmVycnVuID0gY25vdy5vdmVycnVuOworCQlpY291bnQucGFyaXR5ID0gY25vdy5wYXJpdHk7CisJCWljb3VudC5icmsgPSBjbm93LmJyazsKKwkJaWNvdW50LmJ1Zl9vdmVycnVuID0gY25vdy5idWZfb3ZlcnJ1bjsKKworCQlkYmcoIiVzICglZCkgVElPQ0dJQ09VTlQgUlg9JWQsIFRYPSVkIiwgX19mdW5jX18sCisJCSAgICBwb3J0LT5udW1iZXIsIGljb3VudC5yeCwgaWNvdW50LnR4KTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpY291bnQsIHNpemVvZihpY291bnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfY2FsY19iYXVkX3JhdGVfZGl2aXNvcihpbnQgYmF1ZFJhdGUsIGludCAqZGl2aXNvciwKKwkJCQkJICAgX191MTYgKmNsa19zZWxfdmFsKQoreworCWRiZygiJXMgLSAlZCIsIF9fZnVuY19fLCBiYXVkUmF0ZSk7CisKKwlpZiAoYmF1ZFJhdGUgPD0gMTE1MjAwKSB7CisJCSpkaXZpc29yID0gMTE1MjAwIC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4MDsKKwl9CisJaWYgKChiYXVkUmF0ZSA+IDExNTIwMCkgJiYgKGJhdWRSYXRlIDw9IDIzMDQwMCkpIHsKKwkJKmRpdmlzb3IgPSAyMzA0MDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHgxMDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDIzMDQwMCkgJiYgKGJhdWRSYXRlIDw9IDQwMzIwMCkpIHsKKwkJKmRpdmlzb3IgPSA0MDMyMDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHgyMDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDQwMzIwMCkgJiYgKGJhdWRSYXRlIDw9IDQ2MDgwMCkpIHsKKwkJKmRpdmlzb3IgPSA0NjA4MDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHgzMDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDQ2MDgwMCkgJiYgKGJhdWRSYXRlIDw9IDgwNjQwMCkpIHsKKwkJKmRpdmlzb3IgPSA4MDY0MDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHg0MDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDgwNjQwMCkgJiYgKGJhdWRSYXRlIDw9IDkyMTYwMCkpIHsKKwkJKmRpdmlzb3IgPSA5MjE2MDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHg1MDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDkyMTYwMCkgJiYgKGJhdWRSYXRlIDw9IDE1NzI4NjQpKSB7CisJCSpkaXZpc29yID0gMTU3Mjg2NCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDYwOworCX0gZWxzZSBpZiAoKGJhdWRSYXRlID4gMTU3Mjg2NCkgJiYgKGJhdWRSYXRlIDw9IDMxNDU3MjgpKSB7CisJCSpkaXZpc29yID0gMzE0NTcyOCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDcwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9zZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUoc3RydWN0IEFURU5JTlRMX3BvcnQKKwkJCQkJICAgICAqQVRFTjIwMTFfcG9ydCwgaW50IGJhdWRSYXRlKQoreworCWludCBkaXZpc29yID0gMDsKKwlpbnQgc3RhdHVzOworCV9fdTE2IERhdGE7CisJdW5zaWduZWQgY2hhciBudW1iZXI7CisJX191MTYgY2xrX3NlbF92YWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlpbnQgbWlub3I7CisKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKilBVEVOMjAxMV9wb3J0LT5wb3J0OworCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uICIpOworCisJbWlub3IgPSBBVEVOMjAxMV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCWlmIChtaW5vciA9PSBTRVJJQUxfVFRZX05PX01JTk9SKQorCQltaW5vciA9IDA7CisJbnVtYmVyID0gQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyIC0gbWlub3I7CisKKwlkYmcoIiVzIC0gcG9ydCA9ICVkLCBiYXVkID0gJWQiLCBfX2Z1bmNfXywKKwkgICAgQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyLCBiYXVkUmF0ZSk7CisJLyogcmVzZXQgY2xrX3VhcnRfc2VsIGluIHNwcmVnT2Zmc2V0ICovCisJaWYgKGJhdWRSYXRlID4gMTE1MjAwKSB7CisjaWZkZWYgSFdfZmxvd19jb250cm9sCisJCS8qCisJCSAqIE5PVEU6IG5lZWQgdG8gc2VlIHRoZSBwdGhlciByZWdpc3RlciB0byBtb2RpZnkKKwkJICogc2V0dGluZyBoL3cgZmxvdyBjb250cm9sIGJpdCB0byAxOworCQkgKi8KKwkJLyogRGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd01DUjsgKi8KKwkJRGF0YSA9IDB4MmI7CisJCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IERhdGE7CisJCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBzcHJlZyBmYWlsZWQgaW4gc2V0X3NlcmlhbF9iYXVkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKyNlbmRpZgorCisJfSBlbHNlIHsKKyNpZmRlZiBIV19mbG93X2NvbnRyb2wKKwkJLyogc2V0dGluZyBoL3cgZmxvdyBjb250cm9sIGJpdCB0byAwOyAqLworCQkvKiBEYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOyAqLworCQlEYXRhID0gMHhiOworCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgPSBEYXRhOworCQlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgc3ByZWcgZmFpbGVkIGluIHNldF9zZXJpYWxfYmF1ZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisjZW5kaWYKKworCX0KKworCWlmICgxKQkJCS8qIGJhdWRSYXRlIDw9IDExNTIwMCkgKi8geworCQljbGtfc2VsX3ZhbCA9IDB4MDsKKwkJRGF0YSA9IDB4MDsKKwkJc3RhdHVzID0KKwkJICAgIEFURU4yMDExX2NhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IoYmF1ZFJhdGUsICZkaXZpc29yLAorCQkJCQkJICAgICZjbGtfc2VsX3ZhbCk7CisJCXN0YXR1cyA9IGdldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCwgJkRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJyZWFkaW5nIHNwcmVnIGZhaWxlZCBpbiBzZXRfc2VyaWFsX2JhdWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlEYXRhID0gKERhdGEgJiAweDhmKSB8IGNsa19zZWxfdmFsOworCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQsIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJXcml0aW5nIHNwcmVnIGZhaWxlZCBpbiBzZXRfc2VyaWFsX2JhdWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKiBDYWxjdWxhdGUgdGhlIERpdmlzb3IgKi8KKworCQlpZiAoc3RhdHVzKSB7CisJCQllcnIoIiVzIC0gYmFkIGJhdWQgcmF0ZSIsIF9fZnVuY19fKTsKKwkJCWRiZygiJXMiLCAiYmFkIGJhdWQgcmF0ZSIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQkvKiBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2ggKi8KKwkJRGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiB8IFNFUklBTF9MQ1JfRExBQjsKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSID0gRGF0YTsKKwkJc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwkJLyogV3JpdGUgdGhlIGRpdmlzb3IgKi8KKwkJRGF0YSA9ICh1bnNpZ25lZCBjaGFyKShkaXZpc29yICYgMHhmZik7CisJCWRiZygic2V0X3NlcmlhbF9iYXVkIFZhbHVlIHRvIHdyaXRlIERMTCBpcyAleCIsIERhdGEpOworCQlzZXRfdWFydF9yZWcocG9ydCwgRElWSVNPUl9MQVRDSF9MU0IsIERhdGEpOworCisJCURhdGEgPSAodW5zaWduZWQgY2hhcikoKGRpdmlzb3IgJiAweGZmMDApID4+IDgpOworCQlkYmcoInNldF9zZXJpYWxfYmF1ZCBWYWx1ZSB0byB3cml0ZSBETE0gaXMgJXgiLCBEYXRhKTsKKwkJc2V0X3VhcnRfcmVnKHBvcnQsIERJVklTT1JfTEFUQ0hfTVNCLCBEYXRhKTsKKworCQkvKiBEaXNhYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCisJCURhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgJiB+U0VSSUFMX0xDUl9ETEFCOworCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOworCQlzZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2NoYW5nZV9wb3J0X3NldHRpbmdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCSAgc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsCisJCQkJCSAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlpbnQgYmF1ZDsKKwl1bnNpZ25lZCBjZmxhZzsKKwl1bnNpZ25lZCBpZmxhZzsKKwlfX3U4IGxEYXRhOworCV9fdTggbFBhcml0eTsKKwlfX3U4IGxTdG9wOworCWludCBzdGF0dXM7CisJX191MTYgRGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKilBVEVOMjAxMV9wb3J0LT5wb3J0OworCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyKTsKKworCWlmICghQVRFTjIwMTFfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKCghdHR5KSB8fCAoIXR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uICIpOworCisJbERhdGEgPSBMQ1JfQklUU184OworCWxTdG9wID0gTENSX1NUT1BfMTsKKwlsUGFyaXR5ID0gTENSX1BBUl9OT05FOworCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CisKKwkvKiBDaGFuZ2UgdGhlIG51bWJlciBvZiBiaXRzICovCisKKwkvKiBDT01NRU5UMTogdGhlIGJlbG93IExpbmUiaWYoY2ZsYWcgJiBDU0laRSkiIGlzIGFkZGVkIGZvciB0aGUgZXJyb3JzIHdlIGdldCBmb3Igc2VyaWFsIGxvb3AgZGF0YSB0ZXN0IGkuZSBzZXJpYWxfbG9vcGJhY2sucGwgLXYgKi8KKwkvKiBpZihjZmxhZyAmIENTSVpFKSAqLworCXsKKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCWNhc2UgQ1M1OgorCQkJbERhdGEgPSBMQ1JfQklUU181OworCQkJYnJlYWs7CisKKwkJY2FzZSBDUzY6CisJCQlsRGF0YSA9IExDUl9CSVRTXzY7CisJCQlicmVhazsKKworCQljYXNlIENTNzoKKwkJCWxEYXRhID0gTENSX0JJVFNfNzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIENTODoKKwkJCWxEYXRhID0gTENSX0JJVFNfODsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qIENoYW5nZSB0aGUgUGFyaXR5IGJpdCAqLworCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCWxQYXJpdHkgPSBMQ1JfUEFSX09ERDsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX2Z1bmNfXyk7CisJCX0gZWxzZSB7CisJCQlsUGFyaXR5ID0gTENSX1BBUl9FVkVOOworCQkJZGJnKCIlcyAtIHBhcml0eSA9IGV2ZW4iLCBfX2Z1bmNfXyk7CisJCX0KKworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBwYXJpdHkgPSBub25lIiwgX19mdW5jX18pOworCX0KKworCWlmIChjZmxhZyAmIENNU1BBUikKKwkJbFBhcml0eSA9IGxQYXJpdHkgfCAweDIwOworCisJLyogQ2hhbmdlIHRoZSBTdG9wIGJpdCAqLworCWlmIChjZmxhZyAmIENTVE9QQikgeworCQlsU3RvcCA9IExDUl9TVE9QXzI7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19mdW5jX18pOworCX0gZWxzZSB7CisJCWxTdG9wID0gTENSX1NUT1BfMTsKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX2Z1bmNfXyk7CisJfQorCisJLyogVXBkYXRlIHRoZSBMQ1Igd2l0aCB0aGUgY29ycmVjdCB2YWx1ZSAqLworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiAmPQorCSAgICB+KExDUl9CSVRTX01BU0sgfCBMQ1JfU1RPUF9NQVNLIHwgTENSX1BBUl9NQVNLKTsKKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgfD0gKGxEYXRhIHwgbFBhcml0eSB8IGxTdG9wKTsKKworCWRiZworCSAgICAoIkFURU4yMDExX2NoYW5nZV9wb3J0X3NldHRpbmdzIEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiBpcyAleCIsCisJICAgICBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IpOworCS8qIERpc2FibGUgSW50ZXJydXB0cyAqLworCURhdGEgPSAweDAwOworCXNldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKKworCURhdGEgPSAweDAwOworCXNldF91YXJ0X3JlZyhwb3J0LCBGSUZPX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJRGF0YSA9IDB4Y2Y7CisJc2V0X3VhcnRfcmVnKHBvcnQsIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwkvKiBTZW5kIHRoZSB1cGRhdGVkIExDUiB2YWx1ZSB0byB0aGUgQVRFTjIwMTEgKi8KKwlEYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSOworCisJc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwlEYXRhID0gMHgwMGI7CisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSID0gRGF0YTsKKwlzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJRGF0YSA9IDB4MDBiOworCXNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCS8qIHNldCB1cCB0aGUgTUNSIHJlZ2lzdGVyIGFuZCBzZW5kIGl0IHRvIHRoZSBBVEVOMjAxMSAqLworCisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSID0gTUNSX01BU1RFUl9JRTsKKwlpZiAoY2ZsYWcgJiBDQkFVRCkKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSIHw9IChNQ1JfRFRSIHwgTUNSX1JUUyk7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgfD0gKE1DUl9YT05fQU5ZKTsKKwllbHNlCisJCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiAmPSB+KE1DUl9YT05fQU5ZKTsKKworCURhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7CisJc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJLyogRGV0ZXJtaW5lIGRpdmlzb3IgYmFzZWQgb24gYmF1ZCByYXRlICovCisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisKKwlpZiAoIWJhdWQpIHsKKwkJLyogcGljayBhIGRlZmF1bHQsIGFueSBkZWZhdWx0Li4uICovCisJCWRiZygiJXMiLCAiUGlja2VkIGRlZmF1bHQgYmF1ZC4uLiIpOworCQliYXVkID0gOTYwMDsKKwl9CisKKwlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CisJc3RhdHVzID0gQVRFTjIwMTFfc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlKEFURU4yMDExX3BvcnQsIGJhdWQpOworCisJLyogRW5hYmxlIEludGVycnVwdHMgKi8KKwlEYXRhID0gMHgwYzsKKwlzZXRfdWFydF9yZWcocG9ydCwgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiwgRGF0YSk7CisKKwlpZiAoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcKKwkJCSAgICAoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQiLAorCQkJICAgICBzdGF0dXMpOworCQl9CisJfQorCWRiZworCSAgICAoIkFURU4yMDExX2NoYW5nZV9wb3J0X3NldHRpbmdzIEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiBpcyBFbmQgJXgiLAorCSAgICAgQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCisJX191MTYgRGF0YSA9IDB4MDA7CisJaW50IHJldCA9IDA7CisJaW50IEFURU4yMDExXzJvcjRwb3J0czsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgICBBVEVOX1JEUkVRLCBBVEVOX1JEX1JUWVBFLCAwLCBHUElPX1JFR0lTVEVSLAorCQkJICAgICAgJkRhdGEsIFZFTkRPUl9SRUFEX0xFTkdUSCwgQVRFTl9XRFJfVElNRU9VVCk7CisKKy8qIGdob3N0Z3VtOiBoZXJlIGlzIHdoZXJlIHRoZSBwcm9ibGVtIGFwcGVhcnMgdG8gYmV0ICovCisvKiBXaGljaCBvZiB0aGUgZm9sbG93aW5nIGFyZSBuZWVkZWQ/ICovCisvKiBHcmVnIHVzZWQgdGhlIHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzPTIgKi8KKy8qIEJ1dCB0aGUgY29kZSBpbiB0aGUgQVRFTjIwMTFfb3BlbiByZWxpZXMgb24gc2VyaWFsLT5udW1fcG9ydHM9MiAqLworCWlmICgoRGF0YSAmIDB4MDEpID09IDApIHsKKwkJQVRFTjIwMTFfMm9yNHBvcnRzID0gMjsKKwkJc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgPSAyOworCQlzZXJpYWwtPm51bV9wb3J0cyA9IDI7CisJfQorCS8qIGVsc2UgaWYoc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMgPT0gOSkgKi8KKwllbHNlIHsKKwkJQVRFTjIwMTFfMm9yNHBvcnRzID0gNDsKKwkJc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgPSA0OworCQlzZXJpYWwtPm51bV9wb3J0cyA9IDQ7CisKKwl9CisKKwlyZXR1cm4gQVRFTjIwMTFfMm9yNHBvcnRzOworfQorCitzdGF0aWMgaW50IEFURU4yMDExX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICpBVEVOMjAxMV9zZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlpbnQgaSwgc3RhdHVzOworCWludCBtaW5vcjsKKworCV9fdTE2IERhdGE7CisJZGJnKCIlcyIsICIgQVRFTjIwMTFfc3RhcnR1cCA6ZW50ZXJpbmcuLi4uLi4uLi4uIik7CisKKwlpZiAoIXNlcmlhbCkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgSGFuZGxlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGV2ID0gc2VyaWFsLT5kZXY7CisKKwlkYmcoIiVzIiwgIkVudGVyaW5nLi4uIik7CisKKwkvKiBjcmVhdGUgb3VyIHByaXZhdGUgc2VyaWFsIHN0cnVjdHVyZSAqLworCUFURU4yMDExX3NlcmlhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBBVEVOSU5UTF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoQVRFTjIwMTFfc2VyaWFsID09IE5VTEwpIHsKKwkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHJlc2V0dGluZyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgZmllbGQgdmFsdWVzIHRvIHplcm8gKi8KKwltZW1zZXQoQVRFTjIwMTFfc2VyaWFsLCAwLCBzaXplb2Yoc3RydWN0IEFURU5JTlRMX3NlcmlhbCkpOworCisJQVRFTjIwMTFfc2VyaWFsLT5zZXJpYWwgPSBzZXJpYWw7CisJLyogaW5pdGlsaXplIHN0YXR1cyBwb2xsaW5nIGZsYWcgdG8gMCAqLworCUFURU4yMDExX3NlcmlhbC0+c3RhdHVzX3BvbGxpbmdfc3RhcnRlZCA9IDA7CisKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgQVRFTjIwMTFfc2VyaWFsKTsKKwlBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9CisJICAgIEFURU4yMDExX2NhbGNfbnVtX3BvcnRzKHNlcmlhbCk7CisJLyogd2Ugc2V0IHVwIHRoZSBwb2ludGVycyB0byB0aGUgZW5kcG9pbnRzIGluIHRoZSBBVEVOMjAxMV9vcGVuICoKKwkgKiBmdW5jdGlvbiwgYXMgdGhlIHN0cnVjdHVyZXMgYXJlbid0IGNyZWF0ZWQgeWV0LiAgICAgICAgICAgICAqLworCisJLyogc2V0IHVwIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJQVRFTjIwMTFfcG9ydCA9CisJCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgQVRFTklOVExfcG9ydCksIEdGUF9LRVJORUwpOworCQlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKSB7CisJCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKKwkJCWtmcmVlKEFURU4yMDExX3NlcmlhbCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoQVRFTjIwMTFfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBBVEVOSU5UTF9wb3J0KSk7CisKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBhbGwgcG9ydCBpbnRlcnJ1cHQgZW5kIHBvaW50IHRvIHBvcnQgMAorCQkgKiBpbnQgZW5kcG9pbnQuIE91ciBkZXZpY2UgaGFzIG9ubHkgb25lIGludGVycnVwdCBlbmQgcG9pbnQKKwkJICogY29tbWFuIHRvIGFsbCBwb3J0CisJCSAqLworCQkvKiBzZXJpYWwtPnBvcnRbaV0tPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7ICovCisKKwkJQVRFTjIwMTFfcG9ydC0+cG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgQVRFTjIwMTFfcG9ydCk7CisKKwkJbWlub3IgPSBzZXJpYWwtPnBvcnRbaV0tPnNlcmlhbC0+bWlub3I7CisJCWlmIChtaW5vciA9PSBTRVJJQUxfVFRZX05PX01JTk9SKQorCQkJbWlub3IgPSAwOworCQlBVEVOMjAxMV9wb3J0LT5wb3J0X251bSA9CisJCSAgICAoKHNlcmlhbC0+cG9ydFtpXS0+bnVtYmVyIC0gbWlub3IpICsgMSk7CisKKwkJaWYgKEFURU4yMDExX3BvcnQtPnBvcnRfbnVtID09IDEpIHsKKwkJCUFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0ID0gMHgwOworCQkJQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCA9IDB4MTsKKwkJCUFURU4yMDExX3BvcnQtPkRjclJlZ09mZnNldCA9IDB4NDsKKwkJfSBlbHNlIGlmICgoQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0gPT0gMikKKwkJCSAgICYmIChBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PQorCQkJICAgICAgIDQpKSB7CisJCQlBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCA9IDB4ODsKKwkJCUFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQgPSAweDk7CisJCQlBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDE2OworCQl9IGVsc2UgaWYgKChBVEVOMjAxMV9wb3J0LT5wb3J0X251bSA9PSAyKQorCQkJICAgJiYgKEFURU4yMDExX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09CisJCQkgICAgICAgMikpIHsKKwkJCUFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0ID0gMHhhOworCQkJQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCA9IDB4YjsKKwkJCUFURU4yMDExX3BvcnQtPkRjclJlZ09mZnNldCA9IDB4MTk7CisJCX0gZWxzZSBpZiAoKEFURU4yMDExX3BvcnQtPnBvcnRfbnVtID09IDMpCisJCQkgICAmJiAoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0KKwkJCSAgICAgICA0KSkgeworCQkJQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQgPSAweGE7CisJCQlBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0ID0gMHhiOworCQkJQVRFTjIwMTFfcG9ydC0+RGNyUmVnT2Zmc2V0ID0gMHgxOTsKKwkJfSBlbHNlIGlmICgoQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0gPT0gNCkKKwkJCSAgICYmIChBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PQorCQkJICAgICAgIDQpKSB7CisJCQlBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCA9IDB4YzsKKwkJCUFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQgPSAweGQ7CisJCQlBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDFjOworCQl9CisKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgQVRFTjIwMTFfcG9ydCk7CisKKwkJLyogZW5hYmxlIHJ4X2Rpc2FibGUgYml0IGluIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKworCQlzdGF0dXMgPSBnZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCSAgICAgIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiUmVhZGluZyBDb250cm9sUmVnIGZhaWxlZCBzdGF0dXMtMHgleCIsCisJCQkJc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZworCQkJICAgICgiQ29udHJvbFJlZyBSZWFkaW5nIHN1Y2Nlc3MgdmFsIGlzICV4LCBzdGF0dXMlZCIsCisJCQkgICAgIERhdGEsIHN0YXR1cyk7CisJCURhdGEgfD0gMHgwODsJLyogc2V0dGluZyBkcml2ZXIgZG9uZSBiaXQgKi8KKwkJRGF0YSB8PSAweDA0OwkvKiBzcDFfYml0IHRvIGhhdmUgY3RzIGNoYW5nZSByZWZsZWN0IGluIG1vZGVtIHN0YXR1cyByZWcgKi8KKworCQkvKiBEYXRhIHw9IDB4MjA7ICovCS8qIHJ4X2Rpc2FibGUgYml0ICovCisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJICAgICAgQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcKKwkJCSAgICAoIldyaXRpbmcgQ29udHJvbFJlZyBmYWlsZWQocnhfZGlzYWJsZSkgc3RhdHVzLTB4JXgiLAorCQkJICAgICBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJZGJnCisJCQkgICAgKCJDb250cm9sUmVnIFdyaXRpbmcgc3VjY2VzcyhyeF9kaXNhYmxlKSBzdGF0dXMlZCIsCisJCQkgICAgIHN0YXR1cyk7CisKKwkJLyoKKwkJICogV3JpdGUgZGVmYXVsdCB2YWx1ZXMgaW4gRENSIChpLmUgMHgwMSBpbiBEQ1IwLCAweDA1IGluIERDUjIKKwkJICogYW5kIDB4MjQgaW4gRENSMworCQkgKi8KKwkJRGF0YSA9IDB4MDE7CisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJICAgICAgKF9fdTE2KShBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgKyAwKSwKKwkJCQkgICAgICBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBEQ1IwIGZhaWxlZCBzdGF0dXMtMHgleCIsIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcoIkRDUjAgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkIiwgc3RhdHVzKTsKKworCQlEYXRhID0gMHgwNTsKKwkJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFtpXSwKKwkJCQkgICAgICAoX191MTYpKEFURU4yMDExX3BvcnQtPkRjclJlZ09mZnNldCArIDEpLAorCQkJCSAgICAgIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJXcml0aW5nIERDUjEgZmFpbGVkIHN0YXR1cy0weCV4Iiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiRENSMSBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLCBzdGF0dXMpOworCisJCURhdGEgPSAweDI0OworCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCSAgICAgIChfX3UxNikoQVRFTjIwMTFfcG9ydC0+RGNyUmVnT2Zmc2V0ICsgMiksCisJCQkJICAgICAgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgRENSMiBmYWlsZWQgc3RhdHVzLTB4JXgiLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJZGJnKCJEQ1IyIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsIHN0YXR1cyk7CisKKwkJLyogd3JpdGUgdmFsdWVzIGluIGNsa3N0YXJ0MHgwIGFuZCBjbGttdWx0aSAweDIwICovCisJCURhdGEgPSAweDA7CisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sIENMS19TVEFSVF9WQUxVRV9SRUdJU1RFUiwKKwkJCQkgICAgICBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZworCQkJICAgICgiV3JpdGluZyBDTEtfU1RBUlRfVkFMVUVfUkVHSVNURVIgZmFpbGVkIHN0YXR1cy0weCV4IiwKKwkJCSAgICAgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZworCQkJICAgICgiQ0xLX1NUQVJUX1ZBTFVFX1JFR0lTVEVSIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsCisJCQkgICAgIHN0YXR1cyk7CisKKwkJRGF0YSA9IDB4MjA7CisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sIENMS19NVUxUSV9SRUdJU1RFUiwKKwkJCQkgICAgICBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZworCQkJICAgICgiV3JpdGluZyBDTEtfTVVMVElfUkVHSVNURVIgZmFpbGVkIHN0YXR1cy0weCV4IiwKKwkJCSAgICAgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiQ0xLX01VTFRJX1JFR0lTVEVSIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsCisJCQkJc3RhdHVzKTsKKworCQkvKiBaZXJvIExlbmd0aCBmbGFnIHJlZ2lzdGVyICovCisJCWlmICgoQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0gIT0gMSkKKwkJICAgICYmIChBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PSAyKSkgeworCisJCQlEYXRhID0gMHhmZjsKKwkJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCSAgICAgIChfX3UxNikoWkxQX1JFRzEgKyAoKF9fdTE2KUFURU4yMDExX3BvcnQtPnBvcnRfbnVtKSksCisJCQkJCSAgICAgIERhdGEpOworCQkJZGJnKCJaTElQIG9mZnNldCV4IiwKKwkJCQkoX191MTYpIChaTFBfUkVHMSArCisJCQkJCSAoKF9fdTE2KSBBVEVOMjAxMV9wb3J0LT5wb3J0X251bSkpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGJnCisJCQkJICAgICgiV3JpdGluZyBaTFBfUkVHJWQgZmFpbGVkIHN0YXR1cy0weCV4IiwKKwkJCQkgICAgIGkgKyAyLCBzdGF0dXMpOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJZGJnKCJaTFBfUkVHJWQgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkIiwKKwkJCQkJaSArIDIsIHN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQlEYXRhID0gMHhmZjsKKwkJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCSAgICAgIChfX3UxNikoWkxQX1JFRzEgKyAoKF9fdTE2KUFURU4yMDExX3BvcnQtPnBvcnRfbnVtKSAtIDB4MSksCisJCQkJCSAgICAgIERhdGEpOworCQkJZGJnKCJaTElQIG9mZnNldCV4IiwKKwkJCQkoX191MTYpIChaTFBfUkVHMSArCisJCQkJCSAoKF9fdTE2KSBBVEVOMjAxMV9wb3J0LT5wb3J0X251bSkgLQorCQkJCQkgMHgxKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRiZworCQkJCSAgICAoIldyaXRpbmcgWkxQX1JFRyVkIGZhaWxlZCBzdGF0dXMtMHgleCIsCisJCQkJICAgICBpICsgMSwgc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCWRiZygiWkxQX1JFRyVkIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsCisJCQkJCWkgKyAxLCBzdGF0dXMpOworCisJCX0KKwkJQVRFTjIwMTFfcG9ydC0+Y29udHJvbF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCQlBVEVOMjAxMV9wb3J0LT5jdHJsX2J1ZiA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCisJfQorCisJLyogWmVybyBMZW5ndGggZmxhZyBlbmFibGUgKi8KKwlEYXRhID0gMHgwZjsKKwlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0WzBdLCBaTFBfUkVHNSwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJXcml0aW5nIFpMUF9SRUc1IGZhaWxlZCBzdGF0dXMtMHgleCIsIHN0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UKKwkJZGJnKCJaTFBfUkVHNSBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLCBzdGF0dXMpOworCisJLyogc2V0dGluZyBjb25maWd1cmF0aW9uIGZlYXR1cmUgdG8gb25lICovCisJdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJKF9fdTgpIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIE5VTEwsIDB4MDAsIDUgKiBIWik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisKKwkvKiBjaGVjayBmb3IgdGhlIHBvcnRzIHRvIGJlIGNsb3NlZCxjbG9zZSB0aGUgcG9ydHMgYW5kIGRpc2Nvbm5lY3QgKi8KKworCS8qIGZyZWUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciBzZXJpYWwgcG9ydCAgKgorCSAqIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgICAgICAgICAgICAgICAgKi8KKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKKwkJa2ZyZWUoQVRFTjIwMTFfcG9ydC0+Y3RybF9idWYpOworCQl1c2Jfa2lsbF91cmIoQVRFTjIwMTFfcG9ydC0+Y29udHJvbF91cmIpOworCQlrZnJlZShBVEVOMjAxMV9wb3J0KTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorCisJLyogZnJlZSBwcml2YXRlIHN0cnVjdHVyZSBhbGxvY2F0ZWQgZm9yIHNlcmlhbCBkZXZpY2UgKi8KKworCWtmcmVlKHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSk7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGF0ZW5fc2VyaWFsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJImF0ZW4yMDExIiwKKwkJfSwKKwkuZGVzY3JpcHRpb24gPQkJRFJJVkVSX0RFU0MsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5vcGVuID0JCQlBVEVOMjAxMV9vcGVuLAorCS5jbG9zZSA9CQlBVEVOMjAxMV9jbG9zZSwKKwkud3JpdGUgPQkJQVRFTjIwMTFfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJQVRFTjIwMTFfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JQVRFTjIwMTFfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQlBVEVOMjAxMV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlBVEVOMjAxMV91bnRocm90dGxlLAorCS5jYWxjX251bV9wb3J0cyA9CUFURU4yMDExX2NhbGNfbnVtX3BvcnRzLAorCisJLmlvY3RsID0JCUFURU4yMDExX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlBVEVOMjAxMV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCUFURU4yMDExX2JyZWFrLAorCS50aW9jbWdldCA9CQlBVEVOMjAxMV90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJQVRFTjIwMTFfdGlvY21zZXQsCisJLmF0dGFjaCA9CQlBVEVOMjAxMV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQlBVEVOMjAxMV9zaHV0ZG93biwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JQVRFTjIwMTFfYnVsa19pbl9jYWxsYmFjaywKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQlBVEVOMjAxMV9pbnRlcnJ1cHRfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRlbl9kcml2ZXIgPSB7CisJLm5hbWUgPQkJImF0ZW4yMDExIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRlbl9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHVzYiBzZXJpYWwgKi8KKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZhdGVuX3NlcmlhbF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisKKwkvKiBSZWdpc3RlciB3aXRoIHRoZSB1c2IgKi8KKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmF0ZW5fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmF0ZW5fc2VyaWFsX2RyaXZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRlbl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmF0ZW5fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmF0ZW5fc2VyaWFsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF0ZW5faW5pdCk7Cittb2R1bGVfZXhpdChhdGVuX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKaW5kZXggMmViNjEzNy4uMWM3MTA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKIAotCXByaXYgPSBrbWVtX2NhY2hlX2FsbG9jKHN0dWJfcHJpdl9jYWNoZSwgR0ZQX0FUT01JQyk7CisJcHJpdiA9IGttZW1fY2FjaGVfemFsbG9jKHN0dWJfcHJpdl9jYWNoZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFwcml2KSB7CiAJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAiYWxsb2Mgc3R1Yl9wcml2XG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CkBAIC0zNDIsOCArMzQyLDYgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9wcml2KSk7Ci0KIAlwcml2LT5zZXFudW0gPSBwZHUtPmJhc2Uuc2VxbnVtOwogCXByaXYtPnNkZXYgPSBzZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYwppbmRleCAwZmQzM2E2Li5lNGM3MTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKQEAgLTMxLDggKzMxLDcgQEAKIAljaGFyICpzID0gb3V0OwogCWludCBpID0gMDsKIAotCWlmICghdGhlX2NvbnRyb2xsZXIgfHwgIW91dCkKLQkJQlVHKCk7CisJQlVHX09OKCF0aGVfY29udHJvbGxlciB8fCAhb3V0KTsKIAogCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3NfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzX2YuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzM2I1YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3NfZi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotI2lmbmRlZiBfX1dJTkJPTkRfQlNTX0ZfSAotI2RlZmluZSBfX1dJTkJPTkRfQlNTX0ZfSAotCi0jaW5jbHVkZSAiY29yZS5oIgotCi1zdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudDsKLQotLy8KLS8vIEJTUyBkZXNjcmlwdG9yIERhdGFCYXNlIG1hbmFnZW1lbnQgZ2xvYmFsIGZ1bmN0aW9uCi0vLwotCi12b2lkIHZCU1NkZXNjcmlwdGlvbkluaXQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIHZCU1Nmb3VuZExpc3Qoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci11OCBib0NoYW5GaWx0ZXIoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTggQ2hhbk5vKTsKLXUxNiB3QlNTYWxsb2NhdGVFbnRyeShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyKTsKLXUxNiB3QlNTR2V0RW50cnkoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIHZTaW1wbGVIb3VzZUtlZXBpbmcoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci11MTYgd0JTU2hvdXNlS2VlcGluZyhzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyKTsKLXZvaWQgQ2xlYXJCU1NkZXNjcHQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTE2IGkpOwotdTE2IHdCU1NmaW5kQnNzSUQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTggKnBiQnNzaWQpOwotdTE2IHdCU1NmaW5kRGVkaWNhdGVDYW5kaWRhdGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgc3RydWN0IFNTSURfRWxlbWVudCAqcHNTc2lkLCB1OCAqcGJCc3NpZCk7Ci11MTYgd0JTU2ZpbmRNQUNhZGRyKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHU4ICpwYk1hY0FkZHIpOwotdTE2IHdCU1NzZWFyY2hNQUNhZGRyKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHU4ICpwYk1hY0FkZHIsIHU4IGJhbmQpOwotdTE2IHdCU1NhZGRTY2FuRGF0YShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiwgdTE2LCBwc1JYREFUQSk7Ci11MTYgd0JTU1VwZGF0ZVNjYW5EYXRhKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHUxNiB3QnNzSWR4LCBwc1JYREFUQSBwc1JjdkRhdGEpOwotdTE2IHdCU1NjcmVhdGVJQlNTZGF0YShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKLXZvaWQgRGVzaXJlZFJhdGUyQlNTZGVzY3JpcHRvcihzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhLAotCQkJCQkJCSB1OCAqcEJhc2ljUmF0ZVNldCwgdTggQmFzaWNSYXRlQ291bnQsCi0JCQkJCQkJIHU4ICpwT3BlcmF0aW9uUmF0ZVNldCwgdTggT3BlcmF0aW9uUmF0ZUNvdW50KTsKLXZvaWQgRGVzaXJlZFJhdGUySW5mb0VsZW1lbnQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTgJKmFkZHIsIHUxNiAqaUZpbGRPZmZzZXQsCi0JCQkJCQkJIHU4ICpwQmFzaWNSYXRlU2V0LCB1OCBCYXNpY1JhdGVDb3VudCwKLQkJCQkJCQkgdTggKnBPcGVyYXRpb25SYXRlU2V0LCB1OCBPcGVyYXRpb25SYXRlQ291bnQpOwotdm9pZCBCU1NBZGRJQlNTZGF0YShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKLXVuc2lnbmVkIGNoYXIgYm9DbXBNYWNBZGRyKCB1OCAqLCB1OCAqKTsKLXVuc2lnbmVkIGNoYXIgYm9DbXBTU0lEKHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU1NJRDEsIHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU1NJRDIpOwotdTE2IHdCU1NmaW5kU1NJRChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBzdHJ1Y3QgU1NJRF9FbGVtZW50ICpwc1NzaWQpOwotdTE2IHdSb2FtaW5nUXVlcnkoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIHZSYXRlVG9CaXRtYXAoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTE2IGluZGV4KTsKLXU4IGJSYXRlVG9CaXRtYXBJbmRleChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1OCBiUmF0ZSk7Ci11OCBiQml0bWFwVG9SYXRlKHU4IGkpOwotdW5zaWduZWQgY2hhciBib0lzRVJQc3RhKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHUxNiBpKTsKLXVuc2lnbmVkIGNoYXIgYm9DaGVja0Nvbm5lY3Qoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci11bnNpZ25lZCBjaGFyIGJvQ2hlY2tTaWduYWwoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIEFkZElCU1NJZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLFBXQl9CU1NERVNDUklQVElPTiBwc0Rlc0RhdGEgKTsvL2FkZGVkIGJ5IHdzIGZvciBXUEFfTm9uZTA2LzAxLzA0Ci12b2lkIEJzc1NjYW5VcFRvRGF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyKTsKLXZvaWQgQnNzVXBUb0RhdGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIFJhdGVTb3J0KHU4ICpSYXRlQXJyYXksIHU4IG51bSwgdTggbW9kZSk7Ci12b2lkIFJhdGVSZVNvcnRGb3JTUmF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1OCAqUmF0ZUFycmF5LCB1OCBudW0pOwotdm9pZCBBc3NlbWJsZV9JRShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1MTYgd0Jzc0lkeCk7Ci12b2lkIFNldE1heFR4UmF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyKTsKLQotdm9pZCBDcmVhdGVXcGFJRShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1MTYqIGlGaWxkT2Zmc2V0LCB1OCAqbXNnLCBzdHJ1Y3QgIE1hbmFnZW1lbnRfRnJhbWUqIG1zZ0hlYWRlciwKLQkJCQkgc3RydWN0IEFzc29jaWF0aW9uX1JlcXVlc3RfRnJhbWVfQm9keSogbXNnQm9keSwgdTE2IGlNU2luZGV4KTsgLy9hZGRlZCBieSBXUyAwNS8xNC8wNQotCi0jaWZkZWYgX1dQQTJfCi12b2lkIENyZWF0ZVJzbklFKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHUxNiogaUZpbGRPZmZzZXQsIHU4ICptc2csIHN0cnVjdCAgTWFuYWdlbWVudF9GcmFtZSogbXNnSGVhZGVyLAotCQkJCSBzdHJ1Y3QgQXNzb2NpYXRpb25fUmVxdWVzdF9GcmFtZV9Cb2R5KiBtc2dCb2R5LCB1MTYgaU1TaW5kZXgpOy8vYWRkZWQgYnkgV1MgMDUvMTQvMDUKLQotdTE2IFNlYXJjaFBta2lkKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHN0cnVjdCAgTWFuYWdlbWVudF9GcmFtZSogbXNnSGVhZGVyLAotCQkJCSAgIHN0cnVjdCBQTUtJRF9JbmZvcm1hdGlvbl9FbGVtZW50ICogQXNzb1JlcV9QTUtJRCApOwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzZHNjcHQuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc2RzY3B0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNzFkNGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzZHNjcHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0jaWZuZGVmIF9fV0lOQk9ORF9CU1NEU0NQVF9ICi0jZGVmaW5lIF9fV0lOQk9ORF9CU1NEU0NQVF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSAibWRzX3MuaCIKLSNpbmNsdWRlICJtbG1lX3MuaCIKLQotLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotLy8JYnNzZHNjcHQuYwotLy8JCUJTUyBkZXNjcmlwdG9yIGRhdGEgYmFzZQotLy8JaGlzdG9yeSA6Ci0vLwotLy8JRGVzY3JpcHRpb246Ci0vLwkJQlNTIGRlc2NyaXB0b3IgZGF0YSBiYXNlIHdpbGwgc3RvcmUgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBzdGF0aW9ucyBhdCB0aGUKLS8vCQlzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gVGhlIGZpcnN0IGVudHJ5KCBwc0JTUygwKSApIHdpbGwgbm90IGJlIHVzZWQgYW5kIHRoZQotLy8JCXNlY29uZCBvbmUoIHBzQlNTKDEpICkgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuCi0vLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0KLS8vI2RlZmluZSBNQVhfQUNDX1JTU0lfQ09VTlQJCTEwCi0jZGVmaW5lIE1BWF9BQ0NfUlNTSV9DT1VOVAkJNgotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBCU1MgRGVzY3JpcHRpb24gc2V0IEVsZW1lbnQgLCB0byBzdG9yZSBzY2FuIHJlY2VpdmVkIEJlYWNvbiBpbmZvcm1hdGlvbgotLy8KLS8vIE91cidzIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSB0aGUgc3BlY3MuIFRoZSBzcGVjaWZ5IGEgUEhZX1BhcmFtZXRlcl9TZXQuCi0vLyBTaW5jZSB3ZSdyZSBvbmx5IGRvaW5nIGEgRFMgZGVzaWduIHJpZ2h0IG5vdywgd2UganVzdCBoYXZlIGEgRFMgc3RydWN0dXJlLgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10eXBlZGVmIHN0cnVjdCBCU1NEZXNjcmlwdGlvbkVsZW1lbnQKLXsKLQl1MzIJCVNsb3RWYWxpZDsKLQl1MzIJCVBvd2VyU2F2ZU1vZGU7Ci0JUlhMQVlFUjEJUnhMYXllcjE7Ci0KLSAgICB1OAkJYWJQZWVyQWRkcmVzc1sgTUFDX0FERFJfTEVOR1RIICsgMiBdOyAvLyBwZWVyIE1BQyBBZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uIDYtT0NURVQgdmFsdWUKLSAgICB1MzIJCWR3QmdTY2FuU3RhbXA7CQkvLyBCZ1NjYW4gU2VxdWVuY2UgQ291bnRlciBzdGFtcCwgcmVjb3JkIHBzUk9BTS0+ZHdTY2FuQ291bnRlci4KLQotCXUxNgkJQmVhY29uX1BlcmlvZDsKLQl1MTYJCXdBVElNX1dpbmRvdzsKLQotICAgIHU4CQlhYkJzc0lEWyBNQUNfQUREUl9MRU5HVEggKyAyIF07CQkJCS8vIDZCCi0KLSAgICB1OAkJYkJzc1R5cGU7Ci0gICAgdTgJCURUSU1fUGVyaW9kOyAgICAgICAgLy8gMSBvY3RldCB1c3VhbGx5IGZyb20gVElNIGVsZW1lbnQsIGlmIHByZXNlbnQKLQl1OAkJYm9JblRpbWVySGFuZGxlcjsKLQl1OAkJYm9FUlA7CQkJLy8gYW5hbHlzaXMgRVJQIG9yIChleHRlbmRlZCkgc3VwcG9ydGVkIHJhdGUgZWxlbWVudAotCi0JdTgJCVRpbWVzdGFtcFs4XTsKLQl1OAkJQmFzaWNSYXRlWzMyXTsKLQl1OAkJT3BlcmF0aW9uYWxSYXRlWzMyXTsKLQl1MzIJCWR3QmFzaWNSYXRlQml0bWFwOwkJCS8vYml0IG1hcCwgcmV0cmlldmUgZnJvbSBTdXBwb3J0ZWRSYXRlU2V0Ci0JdTMyCQlkd09wZXJhdGlvbmFsUmF0ZUJpdG1hcDsJLy9iaXQgbWFwLCByZXRyaWV2ZSBmcm9tIFN1cHBvcnRlZFJhdGVTZXQgYW5kCi0JCQkJCQkJCQkJLy8gRXh0ZW5kZWRTdXBwb3J0ZWRSYXRlU2V0Ci0JLy8gRm9yIFJTU0kgY2FsY3VsYXRpbmcKLQl1MzIJCUhhbFJzc2lbTUFYX0FDQ19SU1NJX0NPVU5UXTsgLy8gRW5jb2RlLiBJdCBtdXN0IHVzZSBNQUNSTyBvZiBIQUwgdG8gZ2V0IHRoZSBMTkEgYW5kIEFHQyBkYXRhCi0JdTMyCQlIYWxSc3NpSW5kZXg7Ci0KLQkvLy8vRnJvbSBiZWFjb24vcHJvYmUgcmVzcG9uc2UKLSAgICBzdHJ1Y3QgU1NJRF9FbGVtZW50IFNTSUQ7CQkJCS8vIDM0QgotCXU4CXJlc2VydmVkXzFbIDIgXTsKLQotICAgIHN0cnVjdCBDYXBhYmlsaXR5X0luZm9ybWF0aW9uX0VsZW1lbnQgICBDYXBhYmlsaXR5SW5mb3JtYXRpb247ICAvLyAyQgotCXU4CXJlc2VydmVkXzJbIDIgXTsKLQotICAgIHN0cnVjdCBDRl9QYXJhbWV0ZXJfU2V0X0VsZW1lbnQgICAgQ0ZfUGFyYW1ldGVyX1NldDsJCS8vIDhCCi0gICAgc3RydWN0IElCU1NfUGFyYW1ldGVyX1NldF9FbGVtZW50ICBJQlNTX1BhcmFtZXRlcl9TZXQ7CQkvLyA0QgotICAgIHN0cnVjdCBUSU1fRWxlbWVudCAgICAgICAgICAgICAgICAgVElNX0VsZW1lbnRfU2V0OyAJCQkvLyAyNTZCCi0KLSAgICBzdHJ1Y3QgRFNfUGFyYW1ldGVyX1NldF9FbGVtZW50ICAgIERTX1BhcmFtZXRlcl9TZXQ7CQkvLyAzQgotCXU4CXJlc2VydmVkXzM7Ci0KLQlzdHJ1Y3QgRVJQX0luZm9ybWF0aW9uX0VsZW1lbnQJCUVSUF9JbmZvcm1hdGlvbl9TZXQ7CS8vIDNCCi0JdTgJcmVzZXJ2ZWRfNDsKLQotICAgIHN0cnVjdCBTdXBwb3J0ZWRfUmF0ZXNfRWxlbWVudCAgICAgU3VwcG9ydGVkUmF0ZVNldDsJCQkvLyAxMEIKLQl1OAlyZXNlcnZlZF81WzJdOwotCi0Jc3RydWN0IEV4dGVuZGVkX1N1cHBvcnRlZF9SYXRlc19FbGVtZW50CUV4dGVuZGVkU3VwcG9ydGVkUmF0ZVNldDsJLy8gMjU3QgotCXU4CXJlc2VydmVkXzZbM107Ci0KLQl1OAliYW5kOwotCXU4CXJlc2VydmVkXzdbM107Ci0KLQkvLyBmb3IgTUxNRSBtb2R1bGUKLSAgICB1MTYJCXdTdGF0ZTsJCQkvLyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtCi0JdTE2CQl3SW5kZXg7CQkJLy8gVEhJUyBCU1MgZWxlbWVudCBlbnRyeSBpbmRleAotCi0Jdm9pZCoJcHNhZGFwdGVyOwkJLy8gcG9pbnRlciB0byBUSElTIGFkYXB0ZXIKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsgIC8vIE1MTUUgdGltZXIKLQotICAgIC8vIEF1dGhlbnRpY2F0aW9uCi0gICAgdTE2CQl3QXV0aEFsZ287ICAgICAgLy8gcGVlciBNQUMgTUxNRSB1c2UgQXV0aCBhbGdvcml0aG0sIGRlZmF1bHQgT1BFTl9BVVRICi0gICAgdTE2CQl3QXV0aFNlcU51bTsgICAgLy8gY3VycmVudCBsb2NhbCBNQUMgc2VuZG91dCBBdXRoUmVxIHNlcXVlbmNlIG51bWJlcgotCi0JdTgJCWF1dGhfY2hhbGxlbmdlVGV4dFsxMjhdOwotCi0JLy8vL0ZvciBYUDoKLSAgICB1MzIJCWllc19sZW47CQkvLyBpbmZvcm1hdGlvbiBlbGVtZW50IGxlbmd0aAotICAgIHU4CQlpZXNbMjU2XTsJCS8vIGluZm9ybWF0aW9uIGVsZW1lbnQKLQotCS8vLy9Gb3IgV1BBCi0JdTgJUnNuSWVfVHlwZVsyXTsJCS8vYWRkZWQgYnkgd3MgZm9yIGRpc3Rpbmd1aXNoIFdQQSBhbmQgV1BBMiAwNS8xNC8wNAotCXU4CVJzbkllX2xlbjsKLSAgICB1OAlSc25fTnVtOwotCi0gICAgLy8gdG8gcmVjb3JkIHRoZSByc24gY2lwaGVyIHN1aXRlcyxhZGRkZWQgYnkgd3MgMDkvMDUvMDQKLQlTVUlURV9TRUxFQ1RPUgkJCWdyb3VwX2NpcGhlcjsgLy8gNEIKLQlTVUlURV9TRUxFQ1RPUgkJCXBhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVzW1dMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVF07Ci0JU1VJVEVfU0VMRUNUT1IJCQlhdXRoX2tleV9tZ3Rfc3VpdGVzW1dMQU5fTUFYX0FVVEhfS0VZX01HVF9TVUlURV9MSVNUX0NPVU5UXTsKLQotCXUxNgkJCQkJcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9jb3VudDsKLQl1MTYJCQkJCWF1dGhfa2V5X21ndF9zdWl0ZV9jb3VudDsKLQotCXU4CQkJCQlwYWlyd2lzZV9rZXlfY2lwaGVyX3N1aXRlX3NlbGVjdGVkOwotCXU4CQkJCQlhdXRoX2tleV9tZ3Rfc3VpdGVfc2VsZWN0ZWQ7Ci0JdTgJCQkJCXJlc2VydmVkXzhbMl07Ci0KLQlzdHJ1Y3QgUlNOX0NhcGFiaWxpdHlfRWxlbWVudCAgcnNuX2NhcGFiaWxpdGllczsgLy8gMkIKLQl1OAkJCQkJcmVzZXJ2ZWRfOVsyXTsKLQotICAgIC8vdG8gcmVjb3JkIHRoZSByc24gY2lwaGVyIHN1aXRlcyBmb3IgV1BBMgotICAgICNpZmRlZiBfV1BBMl8KLQl1MzIJCQkJCXByZV9hdXRoOwkJLy9hZGRlZCBieSBXUyBmb3IgZGlzdGluZ3Vpc2ggZm9yIDA1LzA0LzA0Ci0gICAgU1VJVEVfU0VMRUNUT1IJCQl3cGEyX2dyb3VwX2NpcGhlcjsgLy8gNEIKLQlTVUlURV9TRUxFQ1RPUgkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZXNbV0xBTl9NQVhfUEFJUldJU0VfQ0lQSEVSX1NVSVRFX0NPVU5UXTsKLQlTVUlURV9TRUxFQ1RPUgkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlc1tXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVF07Ci0KLQl1MTYJCQkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9jb3VudDsKLQl1MTYJCQkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlX2NvdW50OwotCi0JdTgJCQkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9zZWxlY3RlZDsKLQl1OAkJCQkJd3BhMl9hdXRoX2tleV9tZ3Rfc3VpdGVfc2VsZWN0ZWQ7Ci0JdTgJCQkJCXJlc2VydmVkXzEwWzJdOwotCi0Jc3RydWN0IFJTTl9DYXBhYmlsaXR5X0VsZW1lbnQgIHdwYTJfcnNuX2NhcGFiaWxpdGllczsgLy8gMkIKLQl1OAkJCQkJcmVzZXJ2ZWRfMTFbMl07Ci0gICAgI2VuZGlmIC8vZW5kaWYgX1dQQTJfCi0KLQkvL0ZvciBSZXBsYXkgcHJvdGVjdGlvbgotLy8JdTgJCVBhaXJ3aXNlVFNDWzZdOwotLy8JdTgJCUdyb3VwVFNDWzZdOwotCi0JLy8vL0ZvciB1cC10by1kYXRlCi0JdTMyCQlTY2FuVGltZVN0YW1wOwkvL2ZvciB0aGUgZGVjaXNpb24gd2hldGhlciB0aGUgc3RhdGlvbi9BUChtYXkgZXhpc3QgYXQKLQkJCQkJCQkvL2RpZmZlcmVudCBjaGFubmVscykgaGFzIGxlZnQuIEl0IG11c3QgYmUgZGV0ZWN0ZWQgYnkKLQkJCQkJCQkvL3NjYW5uaW5nLiBMb2NhbCBkZXZpY2UgbWF5IGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQuCi0JdTMyCQlCc3NUaW1lU3RhbXA7CS8vT25seSBmb3IgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdGhlIHN0YXRpb24vQVAoZXhpc3QgaW4KLQkJCQkJCQkvL3RoZSBzYW1lIGNoYW5uZWwsIGFuZCBubyBzY2FubmluZykgaWYgbG9jYWwgZGV2aWNlIGhhcwotCQkJCQkJCS8vY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4KLQotCS8vIDIwMDYxMTA4IEFkZCBmb3Igc3RvcmluZyBXUFNfSUUuIFtFIGlkXVtMZW5ndGhdW09VSV1bRGF0YV0KLQl1OAkJV1BTX0lFX0RhdGFbTUFYX0lFX0FQUEVORF9TSVpFXTsKLQl1MTYJCVdQU19JRV9sZW5ndGg7Ci0JdTE2CQlXUFNfSUVfbGVuZ3RoX3RtcDsgLy8gRm9yIHZlcmlmeSB0aGVyZSBpcyBhbiBXUFNfSUUgaW4gQmVhY29uIG9yIHByb2JlIHJlc3BvbnNlCi0KLX0gV0JfQlNTREVTQ1JJUFRJT04sICpQV0JfQlNTREVTQ1JJUFRJT047Ci0KLSNkZWZpbmUgd0JTU0Nvbm5lY3RlZFNUQShhZGFwdGVyKSAgICAgICAgICAgICBcCi0gICAgKCh1MTYpKGFkYXB0ZXIpLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleCkKLQotI2RlZmluZSBwc0JTUyhpKQkJCSgmKGFkYXB0ZXItPmFzQlNTRGVzY3JpcHRFbGVtZW50WyhpKV0pKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZDk2MDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vLwotLy8gY29tbW9uLmgKLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIE9TIGRlcGVuZGFudCBkZWZpbml0aW9uIGFuZCBmdW5jdGlvbi4KLS8vIEV2ZXJ5IE9TIGhhcyB0aGlzIGZpbGUgaW5kaXZpZHVhbC4KLS8vCi0KLSNkZWZpbmUgRGVidWdVc2JkU3RhdHVzSW5mb3JtYXRpb24oIF9BICkKLQotI2lmbmRlZiBDT01NT05fREVGCi0jZGVmaW5lIENPTU1PTl9ERUYKLQotLy8jZGVmaW5lIERFQlVHX0VOQUJMRUQgIDEKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQ29tbW9uIGZ1bmN0aW9uIGRlZmluaXRpb24KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgREVCVUdfRU5BQkxFRAotI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MJNgotI2lmZGVmIERFQlVHX0VOQUJMRUQKLSNkZWZpbmUgV0JERUJVRyggX00gKQlwcmludGsgX00KLSNlbHNlCi0jZGVmaW5lIFdCREVCVUcoIF9NICkJMAotI2VuZGlmCi0KLSNlbmRpZiAvLyBDT01NT05fREVGCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvcmUuaAppbmRleCBmZTE0MmExLi5lYjRjMDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9jb3JlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29yZS5oCkBAIC0zLDkgKzMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KIAotI2luY2x1ZGUgImJzc2RzY3B0LmgiCi0jaW5jbHVkZSAibXRvLmgiCisjaW5jbHVkZSAibWxtZV9zLmgiCiAjaW5jbHVkZSAid2JoYWxfcy5oIgorI2luY2x1ZGUgIm10by5oIgogCiAjZGVmaW5lIFdCTElOVVhfUEFDS0VUX0FSUkFZX1NJWkUgKEVUSEVSTkVUX1RYX0RFU0NSSVBUT1JTKjQpCiAKQEAgLTE1LDEyICsxNSwxMSBAQAogCXUzMiBhZGFwdGVySW5kZXg7CS8vIDIwMDYwNzAzLjQgQWRkIGZvciB1c2luZyBwYWRhcHRlckNvbnRleHQgZ2xvYmFsIGFkYXB0ZXIgcG9pbnQKIAogCVdCX0xPQ0FMREVTQ1JJUFQgc0xvY2FsUGFyYTsJLy8gTXlzZWxmIGNvbm5lY3RlZCBwYXJhbWV0ZXJzCi0JUFdCX0JTU0RFU0NSSVBUSU9OIGFzQlNTRGVzY3JpcHRFbGVtZW50OwogCiAJTUxNRV9GUkFNRSBzTWxtZUZyYW1lOwkvLyBjb25uZWN0IHRvIHBlZXJTVEEgcGFyYW1ldGVycwogCiAJTVRPX1BBUkFNRVRFUlMgc010b1BhcmE7CS8vIE1UT19zdHJ1Y3QgLi4uCi0JaHdfZGF0YV90IHNId0RhdGE7CS8vRm9yIEhBTAorCXN0cnVjdCBod19kYXRhIHNId0RhdGE7CS8vRm9yIEhBTAogCU1EUyBNZHM7CiAKIAlzcGlubG9ja190IFNwaW5Mb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZHNfdGtpcC5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZHNfdGtpcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzVjNGU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSNpZm5kZWYgX19XSU5CT05EX0RTX1RLSVBfSAotI2RlZmluZSBfX1dJTkJPTkRfRFNfVEtJUF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vLyBSb3RhdGlvbiBmdW5jdGlvbnMgb24gMzIgYml0IHZhbHVlcwotI2RlZmluZSBST0wzMiggQSwgbiApIFwKLSAgICAoICgoQSkgPDwgKG4pKSB8ICggKChBKT4+KDMyLShuKSkpICAmICggKDFVTCA8PCAobikpIC0gMSApICkgKQotCi0jZGVmaW5lIFJPUjMyKCBBLCBuICkgICBST0wzMiggKEEpLCAzMi0obikgKQotCi0KLXR5cGVkZWYgc3RydWN0IHRraXAKLXsKLSAgICB1MzIJSzAsIEsxOwkJLy8gS2V5Ci0JdW5pb24KLQl7Ci0JCXN0cnVjdCAvLyBDdXJyZW50IHN0YXRlCi0JCXsKLQkJCXUzMglMOwotCQkJdTMyCVI7Ci0JCX07Ci0JCXU4CUxSWzhdOwotCX07Ci0JdW5pb24KLQl7Ci0JCXUzMglNOwkJLy8gTWVzc2FnZSBhY2N1bXVsYXRvciAoc2luZ2xlIHdvcmQpCi0JCXU4CU1iWzRdOwotCX07Ci0JczMyCQlieXRlc19pbl9NOwkvLyAjIGJ5dGVzIGluIE0KLX0gdGtpcF90OwotCi0vL3ZvaWQgX2FwcGVuZF9kYXRhKCB1OCAqcERhdGEsIHUxNiBzaXplLCB0a2lwX3QgKnAgKTsKLXZvaWQgTWRzX01pY0dldCggIHZvaWQqIGFkYXB0ZXIsICB2b2lkKiBwUnhMYXllcjEsICB1OCAqcEtleSwgIHU4ICpwTWljICk7Ci12b2lkIE1kc19NaWNGaWxsKCAgdm9pZCogYWRhcHRlciwgIHZvaWQqIHBEZXMsICB1OCAqWG1pdEJ1ZkFkZHJlc3MgKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9nbF84MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZ2xfODAyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyNDRjNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9nbF84MDIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSNpZm5kZWYgX19HTF84MDIxMV9IX18KLSNkZWZpbmUgX19HTF84MDIxMV9IX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qKioqKioqKioqKioqKioqKiogQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBCU1MgVHlwZSAqLwotZW51bSB7Ci0gICAgV0xBTl9CU1NUWVBFX0lORlJBU1RSVUNUVVJFICAgICAgICAgPSAwLAotICAgIFdMQU5fQlNTVFlQRV9JTkRFUEVOREVOVCwKLSAgICBXTEFOX0JTU1RZUEVfQU5ZX0JTUywKLX07Ci0KLQotCi0vKiBQcmVhbWJsZV9UeXBlLCBzZWUgPFNGUy04MDIuMTFHLU1JQi0yMDM+ICovCi10eXBlZGVmIGVudW0gcHJlYW1ibGVfdHlwZSB7Ci0gICAgV0xBTl9QUkVBTUJMRV9UWVBFX1NIT1JULAotICAgIFdMQU5fUFJFQU1CTEVfVFlQRV9MT05HLAotfSAgICBwcmVhbWJsZV90eXBlX2U7Ci0KLQotLyogU2xvdF9UaW1lX1R5cGUsIHNlZSA8U0ZTLTgwMi4xMUctTUlCLTIwOD4gKi8KLXR5cGVkZWYgZW51bSBzbG90X3RpbWVfdHlwZSB7Ci0gICAgV0xBTl9TTE9UX1RJTUVfVFlQRV9MT05HLAotICAgIFdMQU5fU0xPVF9USU1FX1RZUEVfU0hPUlQsCi19ICAgIHNsb3RfdGltZV90eXBlX2U7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogRW5jcnlwdGlvbiBNb2RlICovCi10eXBlZGVmIGVudW0gewotICAgIFdFUF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCi0gICAgV0VQXzY0LAotICAgIFdFUF8xMjgsCi0KLSAgICBFTkNSWVBUX0RJU0FCTEUsCi0gICAgRU5DUllQVF9XRVAsCi0gICAgRU5DUllQVF9XRVBfTk9LRVksCi0gICAgRU5DUllQVF9US0lQLAotICAgIEVOQ1JZUFRfVEtJUF9OT0tFWSwKLSAgICBFTkNSWVBUX0NDTVAsCi0gICAgRU5DUllQVF9DQ01QX05PS0VZLAotfSAgICBlbmNyeXB0aW9uX21vZGVfZTsKLQotdHlwZWRlZiBlbnVtIF9XTEFOX1JBRElPIHsKLSAgICBXTEFOX1JBRElPX09OLAotICAgIFdMQU5fUkFESU9fT0ZGLAotICAgIFdMQU5fUkFESU9fTUFYLCAvLyBub3QgYSByZWFsIHR5cGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKLX0gV0xBTl9SQURJTzsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fUkFESU9fU1RBVFVTIHsKLQlXTEFOX1JBRElPIEhXU3RhdHVzOwotCVdMQU5fUkFESU8gU1dTdGF0dXM7Ci19IFdMQU5fUkFESU9fU1RBVFVTOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIDIwMDQxMDIxIDEuMS44MS4xMDAwIHliamlhbmcKLS8vIGFkZCBmb3IgcmFkaW8gbm90aWZpY2F0aW9uCi10eXBlZGVmCi12b2lkICgqUkFESU9fTk9USUZJQ0FUSU9OX0hBTkRMRVIpKAotCXZvaWQgKkRhdGEsCi0Jdm9pZCAqUmFkaW9TdGF0dXNCdWZmZXIsCi0JdTMyIFJhZGlvU3RhdHVzQnVmZmVyTGVuCi0JKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fUkFESU9fTk9USUZJQ0FUSU9OCi17Ci0gICAgUkFESU9fTk9USUZJQ0FUSU9OX0hBTkRMRVIgUmFkaW9DaGFuZ2VIYW5kbGVyOwotICAgIHZvaWQgKkRhdGE7Ci19IFdMQU5fUkFESU9fTk9USUZJQ0FUSU9OOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIDIwMDQxMTAyIDEuMS45MS4xMDAwIHliamlhbmcKLS8vIGFkZCBmb3IgT0lEXzgwMl8xMV9DVVNUX1JFR0lPTl9DQVBBQklMSVRJRVMgYW5kIE9JRF84MDJfMTFfT0lEX1JFR0lPTgotdHlwZWRlZiBlbnVtIF9XTEFOX1JFR0lPTl9DT0RFCi17Ci0JV0xBTl9SRUdJT05fVU5LTk9XTiwKLQlXTEFOX1JFR0lPTl9FVVJPUEUsCi0JV0xBTl9SRUdJT05fSkFQQU4sCi0JV0xBTl9SRUdJT05fVVNBLAotCVdMQU5fUkVHSU9OX0ZSQU5DRSwKLQlXTEFOX1JFR0lPTl9TUEFJTiwKLQlXTEFOX1JFR0lPTl9JU1JBRUwsCi0JV0xBTl9SRUdJT05fTUFYLCAvLyBub3QgYSByZWFsIHR5cGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKLX0gV0xBTl9SRUdJT05fQ09ERTsKLQotI2RlZmluZSBSRUdJT05fTkFNRV9NQVhfTEVOR1RIICAgMjU2Ci0KLXR5cGVkZWYgc3RydWN0IF9XTEFOX1JFR0lPTl9DSEFOTkVMUwotewotCXUzMiBMZW5ndGg7Ci0JdTMyIE5hbWVMZW5ndGg7Ci0JdTggTmFtZVtSRUdJT05fTkFNRV9NQVhfTEVOR1RIXTsKLQlXTEFOX1JFR0lPTl9DT0RFIENvZGU7Ci0JdTMyIEZyZXF1ZW5jeVsxXTsKLX0gV0xBTl9SRUdJT05fQ0hBTk5FTFM7Ci0KLXR5cGVkZWYgc3RydWN0IF9XTEFOX1JFR0lPTl9DQVBBQklMSVRJRVMKLXsKLQl1MzIgTnVtYmVyT2ZJdGVtczsKLQlXTEFOX1JFR0lPTl9DSEFOTkVMUyBSZWdpb25bMV07Ci19IFdMQU5fUkVHSU9OX0NBUEFCSUxJVElFUzsKLQotdHlwZWRlZiBzdHJ1Y3QgX3JlZ2lvbl9uYW1lX21hcCB7Ci0JV0xBTl9SRUdJT05fQ09ERSByZWdpb247Ci0JdTggKm5hbWU7Ci0JdTMyICpjaGFubmVsczsKLX0gcmVnaW9uX25hbWVfbWFwOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgTUFDMlNUUihhKSAoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdCi0jZGVmaW5lIE1BQ1NUUiAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgiCi0KLS8vIFRPRE86IDA2Mjcga2V2aW4KLSNkZWZpbmUgTUlDMlNUUihhKSAoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdLCAoYSlbNl0sIChhKVs3XQotI2RlZmluZSBNSUNTVFIgIiUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCIKLQotI2RlZmluZSBNSUNLRVkyU1RSKGEpICAgTUlDMlNUUihhKQotI2RlZmluZSBNSUNLRVlTVFIgICAgICAgTUlDU1RSCi0KLQotI2VuZGlmIC8qIF9fR0xfODAyMTFfSF9fICovCi0vKioqIGVuZCBvZiBmaWxlICoqKi8KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9pb2N0bHMuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2lvY3Rscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGIzNWRjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2lvY3Rscy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjc4ICswLDAgQEAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gIElPQ1RMUy5IIC0KLS8vCi0vLyAgRGVzY3JpcHRpb246Ci0vLyAgICBEZWZpbmUgdGhlIElPQ1RMIGNvZGVzLgotLy8KLS8vICBSZXZpc2lvbiBoaXN0b3J5OgotLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmbmRlZiBfSU9DVExTX0gKLSNkZWZpbmUgX0lPQ1RMU19ICi0KLS8vIFBENDMgS2VlcCBpdCAtIFVzZWQgd2l0aCB0aGUgV2luMzMgYXBwbGljYXRpb24KLS8vICNpbmNsdWRlIDx3aW5pb2N0bC5oPgotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyAyMDA0MDEwOCBBREQgdGhlIGZvbGxvdyBmb3IgdGVzdAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotI2RlZmluZSBJTkZPUk1BVElPTl9MRU5HVEggc2l6ZW9mKHVuc2lnbmVkIGludCkKLQotI2RlZmluZSBXQjMyX0lPQ1RMX0lOREVYICAweDA5MDAgLy/CrcOXwqfEj8S9SMWkS8W5xbDFvWUvLwotCi0jZGVmaW5lIFdiMzJfUmVnaXN0ZXJSZWFkCQkJQ1RMX0NPREUoCVwKLQkJCUZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAwLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzMl9SZWdpc3RlcldyaXRlCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzMl9TZW5kUGFja2V0CQkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMiwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzJfUXVlcnlTZW5kUmVzdWx0CQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDMsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjMyX1NldEZyYWdtZW50VGhyZXNob2xkCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNCwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzJfU2V0TGlua1N0YXR1cwkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA1LAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzMl9TZXRCdWxrSW4JCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDYsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjMyX0xvb3BiYWNrVGVzdAkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNywJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzVfRUVQcm9tUmVhZAkJCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDgsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X0VFUHJvbVdyaXRlCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA5LAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzNV9GbGFzaFJlYWREYXRhCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxMCwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzVfRmxhc2hXcml0ZQkJCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDExLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzNV9GbGFzaFdyaXRlQnVyc3QJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTIsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X1R4QnVyc3RTdGFydAkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTMsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X1R4QnVyc3RTdG9wCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxNCwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzVfVHhCdXJzdFN0YXR1cwkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTUsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gRm9yIElPQ1RMIGludGVyZmFjZQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgTElOS05BTUVfU1RSSU5HICAgICAiXFxEb3NEZXZpY2VzXFxXMzVVTkQiCi0jZGVmaW5lIE5UREVWSUNFX1NUUklORyAgICAgIlxcRGV2aWNlXFxXMzVVTkQiCi0jZGVmaW5lIEFQUExJQ0FUSU9OX0xJTksJIlxcXFwuXFxXMzVVTkQiCi0KLSNkZWZpbmUgV0JfSU9DVExfSU5ERVggICAgICAweDA4MDAKLSNkZWZpbmUgV0JfSU9DVExfVFNfSU5ERVggICBXQl9JT0NUTF9JTkRFWCArIDYwCi0jZGVmaW5lIFdCX0lPQ1RMX0RVVF9JTkRFWCAgV0JfSU9DVExfVFNfSU5ERVggKyA0MAotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBJT0NUTFMgZGVmaW5lZCBmb3IgRFVUIChEZXZpY2UgVW5kZXIgVGVzdCkKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9NQUNfQUREUkVTUwotLy8gUXVlcnk6IFJldHVybiB0aGUgZG90MTFTdGF0aW9uSUQKLS8vIFNldCAgOiBTZXQgdGhlIGRvdDExU3RhdGlvbklELiBEZW1vIG9ubHkuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19BRERSRVNTICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMSwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9CU1NfREVTQ1JJUFRJT04KLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGluZm8uIG9mIHRoZSBjdXJyZW50IGNvbm5lY3RlZCBCU1MuCi0vLyBTZXQgIDogTm9uZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTX0RFU0NSSVBUSU9OICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMiwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURQotLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCB0cmFuc21pc3Npb24gcmF0ZS4KLS8vIFNldCAgOiBTZXQgdGhlIHRyYW5zbWlzc2lvbiByYXRlIG9mIHRoZSBUeCBwYWNrZXRzLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9UWF9SQVRFICAgICAgICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0NVUlJFTlRfU1RBX1NUQVRFCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBjdXJyZW50IFNUQSBzdGF0ZS4gKFdCX1NUQVNUQVRFIHR5cGUpCi0vLyBTZXQgIDogTm9uZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1VSUkVOVF9TVEFfU1RBVEUgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8vLy8vLy8vLy8gMTAvMzEvMDInIEFkZGVkIC8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1NUQVJUX0lCU1NfUkVRVUVTVAotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogU3RhcnQgYSBuZXcgSUJTUwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TVEFSVF9JQlNTX1JFUVVFU1QgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0pPSU5fUkVRVUVTVAotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogU3luY2hyb25pemUgd2l0aCB0aGUgc2VsZWN0ZWQgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0pPSU5fUkVRVUVTVCAgICAgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVVUSEVOX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IEF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBCU1MKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVVUSEVOX1JFUVVFU1QgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9ERUFVVEhFTl9SRVFVRVNUCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOiBEZUF1dGhlbnRpY2F0ZSB3aXRoZSB0aGUgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0RFQVVUSEVOX1JFUVVFU1QgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVNTT0NfUkVRVUVTVAotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogQXNzb2NpYXRlIHdpdGhlIHRoZSBCU1MKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVNTT0NfUkVRVUVTVCAgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDksICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9SRUFTU09DX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IFJlQXNzb2NpYXRlIHdpdGhlIHRoZSBCU1MKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVBU1NPQ19SRVFVRVNUICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEwLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0RJU0FTU09DX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IERpc0Fzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0RJU0FTU09DX1JFUVVFU1QgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRlJBR19USFJFU0hPTEQKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGRvdDExRnJhZ21lbnRUaHJlc2hvbGQKLS8vIFNldCAgOiBTZXQgdGhlIGRvdDExRnJhZ21lbnRUaHJlc2hvbGQKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRlJBR19USFJFU0hPTEQgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9SVFNfVEhSRVNIT0xECi0vLyBRdWVyeTogUmV0dXJuIHRoZSBkb3QxMVJUU1RocmVzaG9sZAotLy8gU2V0ICA6IFNldCB0aGUgZG90MTFSVFNUaHJlc29sZAotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9SVFNfVEhSRVNIT0xEICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTMsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1dFUF9LRVlNT0RFCi0vLyBRdWVyeTogR2V0IHRoZSBXRVAga2V5IG1vZGUuCi0vLyBTZXQgIDogU2V0IHRoZSBXRVAga2V5IG1vZGU6IGRpc2FibGUvNjQgYml0cy8xMjggYml0cwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZTU9ERSAgICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTQsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1dFUF9LRVlWQUxVRQotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogZmlsbCBpbiB0aGUgV0VQIGtleSB2YWx1ZQotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZVkFMVUUgICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTUsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1JFU0VUCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOiBSZXNldCBTL1cgYW5kIEgvVwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9SRVNFVCAgICAgICAgICBDVExfQ09ERSggICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTYsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1BPV0VSX1NBVkUKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IFNldCBQb3dlciBTYXZlIE1vZGUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUE9XRVJfU0FWRSAgICBDVExfQ09ERSggICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE3LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9CU1NJRF9MSVNUX1NDQU4KLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6Ci0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1RfU0NBTiBDVExfQ09ERSggICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxOCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVAotLy8gUXVlcnk6IFJldHVybiB0aGUgQlNTIGluZm8gb2YgQlNTcyBpbiB0aGUgbGFzdCBzY2FubmluZyBwcm9jZXNzCi0vLyBTZXQgIDogTm9uZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVCAgICBDVExfQ09ERSggICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE5LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9TVEFUSVNUSUNTCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBzdGF0aXN0aWNzIG9mIFR4L1J4LgotLy8gU2V0ICA6IE5vbmUuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1NUQVRJU1RJQ1MgICAgQ1RMX0NPREUoICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyMCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQUNDRVBUX0JFQUNPTgotLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCBtb2RlIHRvIGFjY2VwdCBiZWFjb24gb3Igbm90LgotLy8gU2V0ICA6IEVuYWJsZSBvciBkaXNhYmxlIGFsbG93aW5nIHRoZSBIVy1NQUMgdG8gcGFzcyB0aGUgYmVhY29uIHRvIHRoZSBTVy1NQUMKLS8vIEFyZ3VtZW50czogdW5zaWduZWQgY2hhcgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BQ0NFUFRfQkVBQ09OICBDVExfQ09ERSggICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjEsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1JPQU1JTkcKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHJvYW1pbmcgZnVuY3Rpb24gc3RhdHVzCi0vLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIHJvYW1pbmcgZnVuY3Rpb24uCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUk9BTUlORyAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9EVE8KLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIERUTyhEYXRhIFRocm91Z2hwdXQgT3B0aW1pemF0aW9uKQotLy8gICAgICAgIGZ1bmN0aW9uIHN0YXR1cyAoVFJVRSBvciBGQUxTRSkKLS8vIFNldCAgOiBFbmFibGUvRGlzYWJsZSB0aGUgRFRPIGZ1bmN0aW9uLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9EVE8gICAgICAgICAgICBDVExfQ09ERSggICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjMsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FOVEVOTkFfRElWRVJTSVRZCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBhbnRlbm5hIGRpdmVyc2l0eSBzdGF0dXMuIChUUlVFL09OIG9yIEZBTFNFL09GRikKLS8vIFNldCAgOiBFbmFibGUvRGlzYWJsZSB0aGUgYW50ZW5uYSBkaXZlcnNpdHkuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FOVEVOTkFfRElWRVJTSVRZIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vLS0tLS0tLS0tLS0tLS0gbmV3IGFkZGVkIGZvciBhK2IrZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX09QRVJBVElPTl9NT0RFCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBNQUMgb3BlcmF0aW9uIG1vZGUuIChNT0RFXzgwMl8xMV9CRywgTU9ERV84MDJfMTFfQSwKLS8vCQkJIE1PREVfODAyXzExX0FCRywgTU9ERV84MDJfMTFfQkdfSUJTUykKLS8vIFNldCAgOiBTZXQgdGhlIE1BQyBvcGVyYXRpb24gbW9kZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX09QRVJBVElPTl9NT0RFIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9SRURFRklORUQKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgdHggcmF0ZSB3aGljaCBmb2xsb3dzIHRoZSBkZWZpbml0aW9uIGluIHNwZWMuIChmb3IKLS8vCQkJZXhhbXBsZSwgNS41TSA9PiAweDBiKQotLy8gU2V0ICA6IE5vbmUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9SRURFRklORUQgQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI2LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9QUkVBTUJMRV9NT0RFCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBwcmVhbWJsZSBtb2RlLiAoYXV0byBvciBsb25nKQotLy8gU2V0ICA6IFNldCB0aGUgcHJlYW1ibGUgbW9kZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUFJFQU1CTEVfTU9ERSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjcsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1NMT1RfVElNRV9NT0RFCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBzbG90IHRpbWUgbW9kZS4gKGF1dG8gb3IgbG9uZykKLS8vIFNldCAgOiBTZXQgdGhlIHNsb3QgdGltZSBtb2RlLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TTE9UX1RJTUVfTU9ERSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjgsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUwotLy8gUXVlcnk6Ci0vLyBTZXQgIDogTk9ORQotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUyBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjksICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfTU9ERQotLy8gUXVlcnk6IFJldHVybiB0aGUgdHggcmF0ZSBtb2RlLiAoUkFURV9BVVRPLCBSQVRFXzFNLCAuLiwgUkFURV81NE0sIFJBVEVfTUFYKQotLy8gU2V0ICA6IFNldCB0aGUgdHggcmF0ZSBtb2RlLiAgKFJBVEVfQVVUTywgUkFURV8xTSwgLi4sIFJBVEVfNTRNLCBSQVRFX01BWCkKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9NT0RFIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPX1BBUkEKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIERUTyBwYXJhbWV0ZXJzCi0vLyBTZXQgIDogU2V0IHRoZSBEVE8gcGFyYW1ldGVycwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9EVE9fUEFSQSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzEsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0VWRU5UX0xPRwotLy8gUXVlcnk6IFJldHVybiBldmVudCBsb2cKLS8vIFNldCAgOiBSZXNldCBldmVudCBsb2cKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRVZFTlRfTE9HIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMiwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNSU4KLS8vIFF1ZXJ5OiBOT05FKEl0IHdpbGwgYmUgb2J0YWluZWQgYnkgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUykKLS8vIFNldCAgOiBTZXQgQ1dNaW4gdmFsdWUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNSU4gQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9DV01BWAotLy8gUXVlcnk6IE5PTkUoSXQgd2lsbCBiZSBvYnRhaW5lZCBieSBJT0NUTF9XQl84MDJfMTFfRFVUX0FEVkFOQ0VfU1RBVFVTKQotLy8gU2V0ICA6IFNldCBDV01heCB2YWx1ZQotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9DV01BWCBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzQsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gSU9DVExzIGZvciBUZXN0aW5nCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfQ1hYX1JFRwotLy8gUXVlcnk6IE5vbmUKLS8vIFNldCAgOiBXcml0ZSB0aGUgdmFsdWUgdG8gb25lIG9mIEN4eCByZWdpc3Rlci4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfQ1hYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX1RTX0dFVF9DWFhfUkVHCi0vLyBRdWVyeTogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgQ3h4IHJlZ2lzdGVyLgotLy8gU2V0ICA6IFdyaXRlIHRoZSByZWcgbm8uICgweDAwLCAweDA0LCAweDA4IGV0YykKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfQ1hYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX1RTX1NFVF9EWFhfUkVHCi0vLyBRdWVyeTogTm9uZQotLy8gU2V0ICA6IFdyaXRlIHRoZSB2YWx1ZSB0byBvbmUgb2YgRHh4IHJlZ2lzdGVyLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1NFVF9EWFhfUkVHICBDVExfQ09ERSggICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfVFNfR0VUX0RYWF9SRUcKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBEeHggcmVnaXN0ZXIuCi0vLyBTZXQgIDogV3JpdGUgdGhlIHJlZyBuby4gKDB4MDAsIDB4MDQsIDB4MDggZXRjKQotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0dFVF9EWFhfUkVHICBDVExfQ09ERSggICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gW1RTXQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19UWF9SQVRFICAgICAgICAgICAgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDQsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0NVUlJFTlRfQ0hBTk5FTCAgICAgIENUTF9DT0RFKCAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgNSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRU5BQkxFX1NFUU5PICAgICAgICAgQ1RMX0NPREUoICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19FTkFMQkVfQUNLRURQQUNLRVQgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDcsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0lOSElCSVRfQ1JDICAgICAgICAgIENUTF9DT0RFKCAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgOCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUkVTRVRfUkNWX0NPVU5URVIgICAgQ1RMX0NPREUoICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfVFhfVFJJR0dFUiAgICAgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEwLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0ZBSUxFRF9UWF9DT1VOVCAgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTEsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gW1RTMV0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1RYX1BPV0VSICAgICAgICAgICAgIENUTF9DT0RFKCAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfTU9ERV9FTkFCTEUJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01PREVfRElTQUJMRQkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQU5URU5OQQkJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0FEQVBURVJfSU5GTwkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfTUFDX0FERFJFU1MJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE3LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0JTU0lECQkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTgsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUkZfUEFSQU1FVEVSCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxOSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19GSUxURVIJCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMCwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19DQUxJQlJBVElPTgkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQlNTX01PREUJCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMiwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfU1NJRAkJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDIzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0lCU1NfQ0hBTk5FTAkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gc2V0L3F1ZXJ5IHRoZSBzbG90IHRpbWUgdmFsdWUoc2hvcnQgb3IgbG9uZyBzbG90IHRpbWUpCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TTE9UX1RJTUUJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1NMT1RfVElNRQkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjUsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUlhfU1RBVElTVElDUwkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyNiwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZW5kaWYgIC8vICNpZm5kZWYgX0lPQ1RMU19ICi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYwppbmRleCBlNDMxNDA2Li5jN2FmMDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYwpAQCAtMSw5ICsxLDcgQEAKLSNpbmNsdWRlICJkc190a2lwLmgiCi0jaW5jbHVkZSAiZ2xfODAyMTEuaCIKICNpbmNsdWRlICJtZHNfZi5oIgogI2luY2x1ZGUgIm1sbWV0eHJ4X2YuaCIKLSNpbmNsdWRlICJtdG9fZi5oIgotI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgIm10by5oIgorI2luY2x1ZGUgInN5c2RlZi5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKICNpbmNsdWRlICJ3YmxpbnV4X2YuaCIKIApAQCAtMzc0LDcgKzM3Miw3IEBACiAKIAlwRGVzLT5UeFJhdGUgPSBjdG1wMTsKIAkjaWZkZWYgX1BFX1RYX0RVTVBfCi0JV0JERUJVRygoIlR4IHJhdGUgPSV4XG4iLCBjdG1wMSkpOworCXByaW50aygiVHggcmF0ZSA9JXhcbiIsIGN0bXAxKTsKIAkjZW5kaWYKIAogCXBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgPSAoY3RtcDElMykgPyAwIDogMTsKQEAgLTQxOCwxNCArNDE2LDE0IEBACiB2b2lkCiBNZHNfVHgoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcikKIHsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKIAlQTURTCQlwTWRzID0gJmFkYXB0ZXItPk1kczsKIAlERVNDUklQVE9SCVR4RGVzOwogCVBERVNDUklQVE9SCXBUeERlcyA9ICZUeERlczsKIAl1OAkJKlhtaXRCdWZBZGRyZXNzOwogCXUxNgkJWG1pdEJ1ZlNpemUsIFBhY2tldFNpemUsIHN0bXAsIEN1cnJlbnRTaXplLCBGcmFnbWVudFRocmVzaG9sZDsKIAl1OAkJRmlsbEluZGV4LCBUeERlc0luZGV4LCBGcmFnbWVudENvdW50LCBGaWxsQ291bnQ7Ci0JdW5zaWduZWQgY2hhcglCdWZmZXJGaWxsZWQgPSBmYWxzZSwgTUlDQWRkID0gMDsKKwl1bnNpZ25lZCBjaGFyCUJ1ZmZlckZpbGxlZCA9IGZhbHNlOwogCiAKIAlpZiAocE1kcy0+VHhQYXVzZSkKQEAgLTQ0Miw3ICs0NDAsNyBAQAogCQlGaWxsSW5kZXggPSBwTWRzLT5UeEZpbGxJbmRleDsKIAkJaWYgKHBNZHMtPlR4T3duZXJbRmlsbEluZGV4XSkgeyAvLyBJcyBvd25lZCBieSBzb2Z0d2FyZSAwOlllcyAxOk5vCiAjaWZkZWYgX1BFX1RYX0RVTVBfCi0JCQlXQkRFQlVHKCgiW01kc19UeF0gVHggT3duZXIgaXMgSC9XLlxuIikpOworCQkJcHJpbnRrKCJbTWRzX1R4XSBUeCBPd25lciBpcyBIL1cuXG4iKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCX0KQEAgLTQ4OCw3ICs0ODYsNyBAQAogCQkJLy8gRm9yIHNwZWVkIHVwIEtleSBzZXR0aW5nCiAJCQlpZiAocFR4RGVzLT5FYXBGaXgpIHsKICNpZmRlZiBfUEVfVFhfRFVNUF8KLQkJCQlXQkRFQlVHKCgiMzU6IEVQQSA0dGggZnJhbWUgZGV0ZWN0ZWQuIFNpemUgPSAlZFxuIiwgUGFja2V0U2l6ZSkpOworCQkJCXByaW50aygiMzU6IEVQQSA0dGggZnJhbWUgZGV0ZWN0ZWQuIFNpemUgPSAlZFxuIiwgUGFja2V0U2l6ZSk7CiAjZW5kaWYKIAkJCQlwSHdEYXRhLT5Jc0tleVByZVNldCA9IDE7CiAJCQl9CkBAIC00OTksMTIgKzQ5Nyw2IEBACiAJCQkvLyBTZXQgUlRTL0NUUyBhbmQgTm9ybWFsIGR1cmF0aW9uIGZpZWxkIGludG8gYnVmZmVyCiAJCQlNZHNfRHVyYXRpb25TZXQoYWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyk7CiAKLQkJCS8vCi0JCQkvLyBDYWxjdWxhdGlvbiBNSUMgZnJvbSBidWZmZXIgd2hpY2ggbWF5YmUgZnJhZ21lbnQsIHRoZW4gZmlsbCBpbnRvIHRlbXBvcmFyeSBhZGRyZXNzIDggYnl0ZQotCQkJLy8gOTMxMTMwLjUuZQotCQkJaWYgKE1JQ0FkZCkKLQkJCQlNZHNfTWljRmlsbCggYWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyApOwotCiAJCQkvL1NoaWZ0IHRvIHRoZSBuZXh0IGFkZHJlc3MKIAkJCVhtaXRCdWZTaXplICs9IEN1cnJlbnRTaXplOwogCQkJWG1pdEJ1ZkFkZHJlc3MgKz0gQ3VycmVudFNpemU7CkBAIC01NjEsNyArNTUzLDcgQEAKIE1kc19TZW5kQ29tcGxldGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgUFQwMl9ERVNDUklQVE9SIHBUMDIpCiB7CiAJUE1EUwlwTWRzID0gJmFkYXB0ZXItPk1kczsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKIAl1OAlQYWNrZXRJZCA9ICh1OClwVDAyLT5UMDJfVHhfUGt0SUQ7CiAJdW5zaWduZWQgY2hhcglTZW5kT0sgPSB0cnVlOwogCXU4CVJldHJ5Q291bnQsIFR4UmF0ZTsKQEAgLTU4NSw3ICs1NzcsNyBAQAogCQkJCWVsc2UKIAkJCQkJcEh3RGF0YS0+dHhfcmV0cnlfY291bnRbN10gKz0gUmV0cnlDb3VudDsKIAkJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCi0JCQkJV0JERUJVRygoImR0b190eF9yZXRyeV9jb3VudCA9JWRcbiIsIHBId0RhdGEtPmR0b190eF9yZXRyeV9jb3VudCkpOworCQkJCXByaW50aygiZHRvX3R4X3JldHJ5X2NvdW50ID0lZFxuIiwgcEh3RGF0YS0+ZHRvX3R4X3JldHJ5X2NvdW50KTsKIAkJCQkjZW5kaWYKIAkJCQlNVE9fU2V0VHhDb3VudChhZGFwdGVyLCBUeFJhdGUsIFJldHJ5Q291bnQpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKaW5kZXggZWJmNjFlMy4uOWZmZWMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCkBAIC05LDYgKzksMTIgQEAKICNpbmNsdWRlICJtYWNfc3RydWN0dXJlcy5oIgogI2luY2x1ZGUgInNjYW5fcy5oIgogCisvKiBQcmVhbWJsZV9UeXBlLCBzZWUgPFNGUy04MDIuMTFHLU1JQi0yMDM+ICovCitlbnVtIHsKKwlXTEFOX1BSRUFNQkxFX1RZUEVfU0hPUlQsCisJV0xBTl9QUkVBTUJMRV9UWVBFX0xPTkcsCit9OworCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2RlZmluZSBNQVhfVVNCX1RYX0RFU0NSSVBUT1IJCTE1CQkvLyBJUzg5QzM1IGFiaWxpdHkKICNkZWZpbmUgTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSCTQJCS8vIFZpcnR1YWwgcHJlLWJ1ZmZlciBudW1iZXIgb2YgTUFYX1VTQl9UWF9CVUZGRVIKQEAgLTE3LDI2ICsyMyw4IEBACiAjZGVmaW5lIEFVVEhfUkVRVUVTVF9QQUlSV0lTRV9FUlJPUgkJCTAJCS8vIF9GIGZsYWcgc2V0dGluZwogI2RlZmluZSBBVVRIX1JFUVVFU1RfR1JPVVBfRVJST1IJCQkxCQkvLyBfRiBmbGFnIHNldHRpbmcKIAotLy8gRm9yIHZhcmlhYmxlIHNldHRpbmcKLSNkZWZpbmUgQ1VSUkVOVF9CU1NfVFlQRQkJCQlwc0JTUyhwc0xPQ0FMLT53Q29ubmVjdGVkU1RBaW5kZXgpLT5iQnNzVHlwZQotI2RlZmluZSBDVVJSRU5UX1dFUF9NT0RFCQkJCXBzU01FLT5fZG90MTFQcml2YWN5SW52b2tlZAotI2RlZmluZSBDVVJSRU5UX0JTU0lECQkJCQlwc0JTUyhwc0xPQ0FMLT53Q29ubmVjdGVkU1RBaW5kZXgpLT5hYkJzc0lECi0jZGVmaW5lIENVUlJFTlRfREVTSVJFRF9XUEFfRU5BQkxFCQkoKHBzU01FLT5iRGVzaXJlZEF1dGhNb2RlPT1XUEFfQVVUSCl8fChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBUFNLX0FVVEgpKQotI2lmZGVmIF9XUEEyXwotI2RlZmluZSBDVVJSRU5UX0RFU0lSRURfV1BBMl9FTkFCTEUJCSgocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQTJfQVVUSCl8fChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBMlBTS19BVVRIKSkKLSNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCi0jZGVmaW5lIENVUlJFTlRfUEFJUldJU0VfS0VZX09LCQkJcHNTTUUtPnBhaXJ3aXNlX2tleV9vawotLy9bMjAwNDA3MTIgV1NdCi0jZGVmaW5lIENVUlJFTlRfR1JPVVBfS0VZX09LCQkJcHNTTUUtPmdyb3VwX2tleV9vawotI2RlZmluZSBDVVJSRU5UX1BBSVJXSVNFX0tFWQkJCXBzU01FLT50eF9taWNfa2V5Ci0jZGVmaW5lIENVUlJFTlRfR1JPVVBfS0VZCQkJCXBzU01FLT5ncm91cF90eF9taWNfa2V5Ci0jZGVmaW5lIENVUlJFTlRfRU5DUllQVF9TVEFUVVMJCQlwc1NNRS0+ZW5jcnlwdF9zdGF0dXMKLSNkZWZpbmUgQ1VSUkVOVF9XRVBfSUQJCQkJCWFkYXB0ZXItPnNTbWVQYXJhLl9kb3QxMVdFUERlZmF1bHRLZXlJRAotI2RlZmluZSBDVVJSRU5UX0NPTlRST0xfUE9SVF9CTE9DSwkJKCBwc1NNRS0+d3BhX29rIT0xIHx8IChhZGFwdGVyLT5NZHMuYm9Db3VudGVyTWVhc3VyZUJsb2NrPT0xICYmIChDVVJSRU5UX0VOQ1JZUFRfU1RBVFVTPT1FTkNSWVBUX1RLSVApKSApCiAjZGVmaW5lIENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xECQkoYWRhcHRlci0+TWRzLlR4RnJhZ21lbnRUaHJlc2hvbGQgJiB+MHgxKQogI2RlZmluZSBDVVJSRU5UX1BSRUFNQkxFX01PREUJCQlwc0xPQ0FMLT5ib1Nob3J0UHJlYW1ibGU/V0xBTl9QUkVBTUJMRV9UWVBFX1NIT1JUOldMQU5fUFJFQU1CTEVfVFlQRV9MT05HCi0jZGVmaW5lIENVUlJFTlRfVFhfUkFURQkJCQkJYWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhSYXRlCi0jZGVmaW5lIENVUlJFTlRfRkFMTF9CQUNLX1RYX1JBVEUJCWFkYXB0ZXItPnNMb2NhbFBhcmEuQ3VycmVudFR4RmFsbGJhY2tSYXRlCiAjZGVmaW5lIENVUlJFTlRfVFhfUkFURV9GT1JfTU5HCQkJYWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhSYXRlRm9yTW5nCiAjZGVmaW5lIENVUlJFTlRfUFJPVEVDVF9NRUNIQU5JU00JCXBzTE9DQUwtPmJvUHJvdGVjdE1lY2hhbmlzbQogI2RlZmluZSBDVVJSRU5UX1JUU19USFJFU0hPTEQJCQlhZGFwdGVyLT5NZHMuVHhSVFNUaHJlc2hvbGQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfbWliLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX21pYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTg5MjJlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfbWliLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vICBNTE1FTUlCLkggLQotLy8KLS8vICBEZXNjcmlwdGlvbjoKLS8vICAgIEdldCBhbmQgU2V0IHNvbWUgb2YgTUxNRSBNSUIgYXR0cmlidXRlcy4KLS8vCi0vLyAgUmV2aXNpb24gaGlzdG9yeToKLS8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gICAgICAgICAgIDIwMDMwMTE3ICBQRDQzIEF1c3RpbiBMaXUKLS8vICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCByZWxlYXNlCi0vLwotLy8gIENvcHlyaWdodCAoYykgMjAwMyBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmbmRlZiBfTUxNRV9NSUJfSAotI2RlZmluZSBfTUxNRV9NSUJfSAotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIE1MTUVTZXRFeGNsdWRlVW5lbmNyeXB0ZWQgLS0KLS8vCi0vLyBEZXNjcmlwdGlvbjoKLS8vICAgU2V0IHRoZSBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KLS8vCi0vLyBBcmd1bWVudHM6Ci0vLyAgIGFkYXB0ZXIgICAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KLS8vICAgRXhVbmVuY3J5cHRlZCAgLSB1bnNpZ25lZCBjaGFyIHR5cGUuIFRoZSB2YWx1ZSB0byBiZSBzZXQuCi0vLwotLy8gUmV0dXJuIHZhbHVlczoKLS8vICAgTm9uZS4KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotI2RlZmluZSBNTE1FU2V0RXhjbHVkZVVuZW5jcnlwdGVkKGFkYXB0ZXIsIEV4VW5lbmNyeXB0ZWQpICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGFkYXB0ZXIpLT5zTG9jYWxQYXJhLkV4Y2x1ZGVVbmVuY3J5cHRlZCA9IEV4VW5lbmNyeXB0ZWQ7ICAgICAgICAgICAgIFwKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBNTE1FR2V0RXhjbHVkZVVuZW5jcnlwdGVkIC0tCi0vLwotLy8gRGVzY3JpcHRpb246Ci0vLyAgIEdldCB0aGUgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCi0vLwotLy8gQXJndW1lbnRzOgotLy8gICBhZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCi0vLwotLy8gUmV0dXJuIHZhbHVlczoKLS8vICAgdW5zaWduZWQgY2hhciB0eXBlLiBUaGUgY3VycmVudCBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotI2RlZmluZSBNTE1FR2V0RXhjbHVkZVVuZW5jcnlwdGVkKGFkYXB0ZXIpICgodW5zaWduZWQgY2hhcikgKGFkYXB0ZXIpLT5zTG9jYWxQYXJhLkV4Y2x1ZGVVbmVuY3J5cHRlZCkKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lIC0tCi0vLwotLy8gRGVzY3JpcHRpb246Ci0vLyAgIFNldCB0aGUgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCi0vLwotLy8gQXJndW1lbnRzOgotLy8gICBhZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCi0vLyAgIFJlY2VpdmVMaWZlVGltZS0gdTMyIHR5cGUuIFRoZSB2YWx1ZSB0byBiZSBzZXQuCi0vLwotLy8gUmV0dXJuIHZhbHVlczoKLS8vICAgTm9uZS4KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotI2RlZmluZSBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lKGFkYXB0ZXIsIFJlY2VpdmVMaWZlVGltZSkgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoYWRhcHRlciktPk1kcy5NYXhSZWNlaXZlVGltZSA9IFJlY2VpdmVMaWZlVGltZTsgICAgICAgICAgICAgICAgXAotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIE1MTUVTZXRNYXhSZWNlaXZlTGlmZVRpbWUgLS0KLS8vCi0vLyBEZXNjcmlwdGlvbjoKLS8vICAgR2V0IHRoZSBkb3QxMU1heFJlY2VpdmVMaWZlVGltZSB2YWx1ZS4KLS8vCi0vLyBBcmd1bWVudHM6Ci0vLyAgIGFkYXB0ZXIgICAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KLS8vCi0vLyBSZXR1cm4gdmFsdWVzOgotLy8gICB1MzIgdHlwZS4gVGhlIGN1cnJlbnQgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgTUxNRUdldE1heFJlY2VpdmVMaWZlVGltZShhZGFwdGVyKSAoKHUzMikgKGFkYXB0ZXIpLT5NZHMuTWF4UmVjZWl2ZVRpbWUpCi0KLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeC5jCmluZGV4IDA3ODAyYWYuLjY0M2NlYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnguYwpAQCAtMTUsNyArMTUsNyBAQAogLy8KIC8vICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMiBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNpbmNsdWRlICJvc19jb21tb24uaCIKKyNpbmNsdWRlICJzeXNkZWYuaCIKIAogI2luY2x1ZGUgIm1kc19mLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKaW5kZXggZGUxMWEwNS4uOTRhMDYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKQEAgLTIyLDkgKzIyLDggQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgotI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgInN5c2RlZi5oIgogI2luY2x1ZGUgInNtZV9hcGkuaCIKLSNpbmNsdWRlICJnbF84MDIxMS5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKIAogLy8gRGVjbGFyZSBTUTMgdG8gcmF0ZSBhbmQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgdGFibGUKQEAgLTUxLDIwICs1MCwxNCBAQAogc3RhdGljIGludCBQZXJpb2RUb3RhbFR4UGt0ID0gMDsKIHN0YXRpYyBpbnQgUGVyaW9kVG90YWxUeFBrdFJldHJ5ID0gMDsKIAotdHlwZWRlZiBzdHJ1Y3QKLXsKLQlzMzIgUlNTSTsKLQl1OCAgVHhSYXRlOwotfVJTU0kyUkFURTsKLQogc3RhdGljIHU4IGJvU3BhcnNlVHhUcmFmZmljID0gZmFsc2U7CiAKLXZvaWQgTVRPX0luaXQoTVRPX0ZVTkNfSU5QVVQpOwotdm9pZCBUeFJhdGVSZWR1Y3Rpb25DdHJsKE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgTVRPX0luaXQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKTsKK3ZvaWQgVHhSYXRlUmVkdWN0aW9uQ3RybChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpOwogLyoqIDEuMS4zMS4xMDAwIFR1cmJvIG1vZGlmeSAqLwotdm9pZCBNVE9fU2V0VHhDb3VudChNVE9fRlVOQ19JTlBVVCwgdTggdDAsIHU4IGluZGV4KTsKLXZvaWQgTVRPX1R4RmFpbGVkKE1UT19GVU5DX0lOUFVUKTsKLXZvaWQgaGFsX2dldF9kdG9fcGFyYShNVE9fRlVOQ19JTlBVVCwgY2hhciAqYnVmZmVyKTsKK3ZvaWQgTVRPX1NldFR4Q291bnQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCB1OCB0MCwgdTggaW5kZXgpOwordm9pZCBNVE9fVHhGYWlsZWQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKTsKK3ZvaWQgaGFsX2dldF9kdG9fcGFyYShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsIGNoYXIgKmJ1ZmZlcik7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyAgTVRPX0luaXQgLS0KQEAgLTgwLDEwICs3Myw5IEBACiAvLyAgUmV0dXJuIFZhbHVlOgogLy8gICAgTm9uZQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIE1UT19Jbml0KE1UT19GVU5DX0lOUFVUKQordm9pZCBNVE9fSW5pdChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpCiB7CiAgICAgaW50IGk7Ci0JLy9XQkRFQlVHKCgiW01UT10gLT4gTVRPX0luaXQoKVxuIikpOwogCS8vW1dLQ0hFTl1wTVRPY29yZV9kYXRhID0gcGNvcmVfZGF0YTsKIC8vIDIwMDQwNTEwIFR1cmJvIGFkZCBmb3IgZ2xvYmFsIHZhcmlhYmxlCiAgICAgTVRPX1RNUl9DTlQoKSAgICAgICA9IDA7CkBAIC0xOTYsNyArMTg4LDcgQEAKIC8vICAgICAgSWYgd2UgZW5hYmxlIERUTywgd2Ugd2lsbCBpZ25vcmUgdGhlIHR4IGNvdW50IHdpdGggZGlmZmVyZW50IHR4IHJhdGUgZnJvbQogLy8gICAgICBEVE8gcmF0ZS4gVGhpcyBpcyBiZWNhdXNlIHdoZW4gd2UgYWRqdXN0IERUTyB0eCByYXRlLCB0aGVyZSBjb3VsZCBiZSBzb21lCiAvLyAgICAgIHBhY2tldHMgaW4gdGhlIHR4IHF1ZXVlIHdpdGggcHJldmlvdXMgdHggcmF0ZQotdm9pZCBNVE9fU2V0VHhDb3VudChNVE9fRlVOQ19JTlBVVCwgdTggdHhfcmF0ZSwgdTggaW5kZXgpCit2b2lkIE1UT19TZXRUeENvdW50KHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciwgdTggdHhfcmF0ZSwgdTggaW5kZXgpCiB7CiAJTVRPX1RYRkxPV0NPVU5UKCkrKzsKIAlpZiAoKE1UT19FTkFCTEU9PTEpICYmIChNVE9fUkFURV9DSEFOR0VfRU5BQkxFKCk9PTEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaAppbmRleCAwZDM3NzVlLi41NmYyNDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaApAQCAtMTMsNiArMTMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorc3RydWN0IHdic29mdF9wcml2OworCiAjZGVmaW5lIE1UT19ERUZBVUxUX1RIX0NOVCAgICAgICAgICAgICAgNQogI2RlZmluZSBNVE9fREVGQVVMVF9USF9TUTMgICAgICAgICAgICAgIDExMiAgLy9PTEQgSVMgMTMgcmVmZXJlbmNlIEpvaG5YdQogI2RlZmluZSBNVE9fREVGQVVMVF9USF9JRExFX1NMT1QgICAgICAgIDE1CkBAIC0xMzEsOCArMTMzLDYgQEAKIH0gTVRPX1BBUkFNRVRFUlMsICpQTVRPX1BBUkFNRVRFUlM7CiAKIAotI2RlZmluZSBNVE9fRlVOQ19JTlBVVCAgICAgICAgICAgICAgc3RydWN0IHdic29mdF9wcml2ICoJYWRhcHRlcgotI2RlZmluZSBNVE9fRlVOQ19JTlBVVF9EQVRBICAgICAgICAgYWRhcHRlcgogI2RlZmluZSBNVE9fREFUQSgpICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnNNdG9QYXJhKQogI2RlZmluZSBNVE9fSEFMKCkgICAgICAgICAgICAgICAgICAgKCZhZGFwdGVyLT5zSHdEYXRhKQogI2RlZmluZSBNVE9fU0VUX1BSRUFNQkxFX1RZUEUoeCkgICAgLy8gMjAwNDA1MTEgVHVyYm8gbWFyayBMTV9QUkVBTUJMRV9UWVBFKCZwY29yZV9kYXRhLT5sbV9kYXRhKSA9ICh4KQpAQCAtMTQwLDcgKzE0MCw2IEBACiAjZGVmaW5lIE1UT19UWFBPV0VSX0ZST01fRUVQUk9NCQkoYWRhcHRlci0+c0h3RGF0YS5Qb3dlckluZGV4RnJvbUVFUFJPTSkKICNkZWZpbmUgTE9DQUxfQU5URU5OQV9OTygpCQkJKGFkYXB0ZXItPnNMb2NhbFBhcmEuYkFudGVubmFObykKICNkZWZpbmUgTE9DQUxfSVNfQ09OTkVDVEVEKCkJCShhZGFwdGVyLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleCAhPSAwKQotI2RlZmluZSBMT0NBTF9JU19JQlNTX01PREUoKQkJKGFkYXB0ZXItPmFzQlNTRGVzY3JpcHRFbGVtZW50W2FkYXB0ZXItPnNMb2NhbFBhcmEud0Nvbm5lY3RlZFNUQWluZGV4XS5iQnNzVHlwZSA9PSBJQlNTX05FVCkKICNkZWZpbmUgTVRPX0lOSVRUWFJBVEVfTU9ERQkJCShhZGFwdGVyLT5zSHdEYXRhLlNvZnR3YXJlU2V0JjB4MikJLy9iaXQgMQogLy8gMjAwNDA1MTAgVHVyYm8gYWRkCiAjZGVmaW5lIE1UT19UTVJfQ05UKCkgICAgICAgICAgICAgICBNVE9fREFUQSgpLlRtckNudApAQCAtMjU5LDYgKzI1OCwxMyBAQAogCXMzMiAgIEFudGVubmE7CiB9IFNUQVRJU1RJQ1NfSU5GTywgKlBTVEFUSVNUSUNTX0lORk87CiAKK2V4dGVybiB2b2lkIE1UT19Jbml0KHN0cnVjdCB3YnNvZnRfcHJpdiAqKTsKK2V4dGVybiB2b2lkIE1UT19QZXJpb2RpY1RpbWVyRXhwaXJlZChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKik7CitleHRlcm4gdm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKHN0cnVjdCB3YnNvZnRfcHJpdiAqLCB1OCAqLCB1OCk7CitleHRlcm4gdTggTVRPX0dldFR4UmF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsIHUzMiBmcGR1X2xlbik7CitleHRlcm4gdTggTVRPX0dldFR4RmFsbGJhY2tSYXRlKHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBNVE9fU2V0VHhDb3VudChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsIHU4IHQwLCB1OCBpbmRleCk7CisKICNlbmRpZiAvL19fTVRPX0hfXwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210b19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG9fZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWY1OTEzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210b19mLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIF9fV0lOQk9ORF9NVE9fRl9ICi0jZGVmaW5lIF9fV0lOQk9ORF9NVE9fRl9ICi0KLSNpbmNsdWRlICJjb3JlLmgiCi0KLWV4dGVybiB2b2lkIE1UT19Jbml0KHN0cnVjdCB3YnNvZnRfcHJpdiAqKTsKLWV4dGVybiB2b2lkIE1UT19QZXJpb2RpY1RpbWVyRXhwaXJlZChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKik7Ci1leHRlcm4gdm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKHN0cnVjdCB3YnNvZnRfcHJpdiAqLCB1OCAqLCB1OCk7Ci1leHRlcm4gdTggTVRPX0dldFR4UmF0ZShNVE9fRlVOQ19JTlBVVCwgdTMyIGZwZHVfbGVuKTsKLWV4dGVybiB1OCBNVE9fR2V0VHhGYWxsYmFja1JhdGUoTVRPX0ZVTkNfSU5QVVQpOwotZXh0ZXJuIHZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHQwLCB1OCBpbmRleCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvb3NfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9vc19jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMyNzZlMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9vc19jb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI2luY2x1ZGUgInN5c2RlZi5oIgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCmluZGV4IDY3ODI1NTIuLmFmOGMwMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KIAogLyoqKioqKioqKioqKioqKioqKiBJTkNMVURFIEZJTEVTIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAib3NfY29tbW9uLmgiCisjaW5jbHVkZSAic3lzZGVmLmgiCiAjaW5jbHVkZSAicGh5X2NhbGlicmF0aW9uLmgiCiAjaW5jbHVkZSAid2JoYWxfZi5oIgogCkBAIC0zNyw4ICszNyw4IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqIExPQ0FMIEZVTkNUSU9OIERFQ0xBUkFUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKi8KLS8vdm9pZCAgICBfcGh5X3JmX3dyaXRlX2RlbGF5KGh3X2RhdGFfdCAqcGh3X2RhdGEpOwotLy92b2lkICAgIHBoeV9pbml0X3JmKGh3X2RhdGFfdCAqcGh3X2RhdGEpOworLy92b2lkICAgIF9waHlfcmZfd3JpdGVfZGVsYXkoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKTsKKy8vdm9pZCAgICBwaHlfaW5pdF9yZihzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEpOwogCiAvKioqKioqKioqKioqKioqKioqIEZVTkNUSU9OIERFRklOSVRJT04gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMzQxLDcgKzM0MSw3IEBACiB9CiAKIAotdm9pZCBfcmVzZXRfcnhfY2FsKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit2b2lkIF9yZXNldF9yeF9jYWwoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCXUzMiAgICAgdmFsOwogCkBAIC0zNjYsNyArMzY2LDcgQEAKIC8vCiAvLwogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi12b2lkIF9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3ZvaWQgX3J4YWRjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCiB7CiAgICAgdTMyICAgICByZWdfYWdjX2N0cmwzOwogICAgIHUzMiAgICAgcmVnX2FfYWNxX2N0cmw7CkBAIC00NjUsNyArNDY1LDcgQEAKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXZvaWQgX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3ZvaWQgX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CkBAIC02MDAsNyArNjAwLDcgQEAKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdm9pZCBfdHhxZGFjX2RjX29mZnNldF9jYWNlbGxhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit2b2lkIF90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CkBAIC03MjYsNyArNzI2LDcgQEAKIH0KIAogLy8yMDA2MDYxMi4xLmEgMjAwNjA3MTguMSBNb2RpZnkKLXU4IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwKK3U4IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLAogCQkJCQkJICAgczMyIGFfMl90aHJlc2hvbGQsCiAJCQkJCQkgICBzMzIgYl8yX3RocmVzaG9sZCkKIHsKQEAgLTEwMzIsNyArMTAzMiw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQgX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3ZvaWQgX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKICNpZmRlZiBfREVCVUcKQEAgLTExOTUsNyArMTE5NSw3IEBACiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi11OCBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUxNiBmYWN0b3IsIHUzMiBmcmVxdWVuY3kpCit1OCBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwgdTE2IGZhY3RvciwgdTMyIGZyZXF1ZW5jeSkKIHsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CiAJczMyICAgICBpcWNhbF90b25lX2k7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdm9pZCBfcnhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQordm9pZCBfcnhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCiB7CiAvLyBmaWdvIDIwMDUwNTIzIG1hcmtlZCB0aHNpIGZsYWcgZm9yIGNhbid0IGNvbXBpbGUgZm9yIHJlbGVzYXNlCiAjaWZkZWYgX0RFQlVHCkBAIC0xNTc5LDcgKzE1NzksNyBAQAogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3ZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQogewogCXUzMiAgICAgcmVnX21vZGVfY3RybDsKIAl1MzIgICAgIGlxX2FscGhhOwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAKIH0KIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXZvaWQgcGh5X3NldF9yZl9kYXRhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICkKK3ZvaWQgcGh5X3NldF9yZl9kYXRhKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICkKIHsKICAgIHUzMiBsdG1wPTA7CiAKQEAgLTE2NjAsNyArMTY2MCw3IEBACiB9CiAKIC8vIDIwMDYwNzE3IG1vZGlmeSBhcyBCcnVjZSdzIG1haWwKLXVuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3Vuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCWludCBpbml0X3R4dmdhID0gMDsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCmluZGV4IDAzYjgyMGMuLjUxYzhmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCkBAIC0xMDEsNyArMTAxLDcgQEAKIC8vI2RlZmluZSBNQVNLX0lRQ0FMX0lNQUdFX1EgICAgICAgICAweDAzRkZFMDAwCiAvLyNkZWZpbmUgU0hJRlRfSVFDQUxfSU1BR0VfUSh4KSAgICAgKCh4KT4+MTMpCiAKLXZvaWQgcGh5X3NldF9yZl9kYXRhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICk7Cit2b2lkIHBoeV9zZXRfcmZfZGF0YSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApOwogI2RlZmluZSBwaHlfaW5pdF9yZiggX0EgKQkvL1JGU3ludGhlc2l6ZXJfaW5pdGlhbCggX0EgKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKaW5kZXggY2QyMTI3Mi4uZDkxNWNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSAib3NfY29tbW9uLmgiCisjaW5jbHVkZSAic3lzZGVmLmgiCiAjaW5jbHVkZSAid2JoYWxfZi5oIgogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTkxNSw3ICs5MTUsNyBAQAogLy8gICAgVGhlIGFkZHJlc3MgaXMgc3RvcmVkIGluIEV0aGVybmV0SURBZGRyLgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB2b2lkCi1VeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSApCitVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJdTMyCWx0bXA7CiAKQEAgLTk0OCwxNCArOTQ4LDEzIEBACiAvLyAgUmV0dXJuIFZhbHVlOgogLy8gICAgTm9uZS4KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXZvaWQgQ2FyZEdldE11bHRpY2FzdEJpdCggICB1OCBBZGRyZXNzW0VUSF9MRU5HVEhfT0ZfQUREUkVTU10sCi0JCQkJCQkgICB1OCAqQnl0ZSwgIHU4ICpWYWx1ZSApCit2b2lkIENhcmRHZXRNdWx0aWNhc3RCaXQoIHU4IEFkZHJlc3NbRVRIX0FMRU5dLCB1OCAqQnl0ZSwgdTggKlZhbHVlICkKIHsKICAgICB1MzIgQ3JjOwogICAgIHUzMiBCaXROdW1iZXI7CiAKICAgICAvLyBGaXJzdCBjb21wdXRlIHRoZSBDUkMuCi0gICAgQ3JjID0gQ2FyZENvbXB1dGVDcmMoQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKyAgICBDcmMgPSBDYXJkQ29tcHV0ZUNyYyhBZGRyZXNzLCBFVEhfQUxFTik7CiAKIAkvLyBUaGUgY29tcHV0ZWQgQ1JDIGlzIGJpdDB+MzEgZnJvbSBsZWZ0IHRvIHJpZ2h0CiAJLy9BdCBmaXJzdCB3ZSBzaG91bGQgZG8gcmlnaHQgc2hpZnQgMjViaXRzLCBhbmQgcmVhZCA3Yml0cyBieSB1c2luZyAnJicsIDJeNz0xMjgKQEAgLTk2NSw3ICs5NjQsNyBAQAogCSpWYWx1ZSA9ICh1OCkgKCh1OCkxIDw8IChCaXROdW1iZXIgJSA4KSk7CiB9CiAKLXZvaWQgVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApCit2b2lkIFV4eF9wb3dlcl9vbl9wcm9jZWR1cmUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXUzMglsdG1wLCBsb29wOwogCkBAIC0xMDA5LDcgKzEwMDgsNyBAQAogCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZjgsIDB4N2ZmICk7CiB9CiAKLXZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzI0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgKnBsdG1wICxjaGFyIG51bWJlcikKK3ZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzI0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1MzIgKnBsdG1wICxjaGFyIG51bWJlcikKIHsKIAl1OAlpOwogCkBAIC0xMDIwLDcgKzEwMTksNyBAQAogCX0KIH0KIAotdm9pZCBTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfNTAoICBwaHdfZGF0YV90IHBId0RhdGEsIHUzMiAqcGx0bXAsIGNoYXIgbnVtYmVyKQordm9pZCBTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfNTAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHUzMiAqcGx0bXAsIGNoYXIgbnVtYmVyKQogewogCXU4CWk7CiAKQEAgLTEwMzYsNyArMTAzNSw3IEBACiAvLyBSRlN5bnRoZXNpemVyX2luaXRpYWwgLS0KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogdm9pZAotUkZTeW50aGVzaXplcl9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK1JGU3ludGhlc2l6ZXJfaW5pdGlhbChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7CiAJdTMyCWFsdG1wWzMyXTsKIAl1MzIgKglwbHRtcCA9IGFsdG1wOwpAQCAtMTExNSw3ICsxMTE0LDcgQEAKIAkJLy9TdGFydCB0byBmaWxsIFJGIHBhcmFtZXRlcnMsIFBMTF9PTiBzaG91bGQgYmUgcHVsbGVkIGxvdy4KIAkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDAwMCApOwogI2lmZGVmIF9QRV9TVEFURV9EVU1QXwotCQlXQkRFQlVHKCgiKiBQTExfT04gICAgbG93XG4iKSk7CisJCXByaW50aygiKiBQTExfT04gICAgbG93XG4iKTsKICNlbmRpZgogCiAJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV8yNCkvc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzI0WzBdKTsKQEAgLTEyMjQsNyArMTIyMyw3IEBACiAJCQkvL3B1bGxlZCBoaWdoCiAJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDgwICk7CiAJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCi0JCQlXQkRFQlVHKCgiKiBQTExfT04gICAgaGlnaFxuIikpOworCQkJcHJpbnRrKCIqIFBMTF9PTiAgICBoaWdoXG4iKTsKIAkJCSNlbmRpZgogCiAJCQkvLzIuNEdIegpAQCAtMTI0NCw3ICsxMjQzLDcgQEAKIAkJCS8vNUdIegogCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDAwMCApOwogCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXwotCQkJV0JERUJVRygoIiogUExMX09OICAgIGxvd1xuIikpOworCQkJcHJpbnRrKCIqIFBMTF9PTiAgICBsb3dcbiIpOwogCQkJI2VuZGlmCiAKIAkJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV81MCkvc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwWzBdKTsKQEAgLTEyNTYsNyArMTI1NSw3IEBACiAKIAkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwODAgKTsKIAkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQkJCVdCREVCVUcoKCIqIFBMTF9PTiAgICBoaWdoXG4iKSk7CisJCQlwcmludGsoIiogUExMX09OICAgIGhpZ2hcbiIpOwogCQkJI2VuZGlmCiAKIAkJCS8vbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDEyQkFDRjsKQEAgLTEyNzIsNyArMTI3MSw3IEBACiAJCQltc2xlZXAoNSk7CiAKIAkJCS8vV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDA4MCApOwotCQkJLy9XQkRFQlVHKCgiKiBQTExfT04gICAgaGlnaFxuIikpOworCQkJLy9wcmludGsoIiogUExMX09OICAgIGhpZ2hcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBSRl9XQl8yNDI6CkBAIC0xNDE0LDcgKzE0MTMsNyBAQAogCX0KIH0KIAotdm9pZCBCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMCggIHBod19kYXRhX3QgcEh3RGF0YSkKK3ZvaWQgQkJQcm9jZXNzb3JfQUw3MjMwXzI0MDAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMglwbHRtcFsxMl07CkBAIC0xNDU2LDcgKzE0NTUsNyBAQAogCiB9CiAKLXZvaWQgQkJQcm9jZXNzb3JfQUw3MjMwXzUwMDAoICBwaHdfZGF0YV90IHBId0RhdGEpCit2b2lkIEJCUHJvY2Vzc29yX0FMNzIzMF81MDAwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIJcGx0bXBbMTJdOwpAQCAtMTUxMCw3ICsxNTA5LDcgQEAKIC8vICAgIE5vbmUuCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIHZvaWQKLUJCUHJvY2Vzc29yX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKQorQkJQcm9jZXNzb3JfaW5pdGlhbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMglpLCBwbHRtcFsxMl07CkBAIC0xODI0LDEyICsxODIzLDEyIEBACiAJCXJlZy0+U1EzX2ZpbHRlcltpXSA9IDB4MmY7IC8vIGhhbGYgb2YgQml0IDAgfiA2CiB9CiAKLXZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX21heDI4MjkoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfbWF4MjgyOSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwpCiB7CiAJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsgLy8gMjAwNjA2MjAuMSBNb2RpZnkKIH0KIAotdm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWwyMjMwKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApCit2b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDIyMzAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICkKIHsKIAl1OAlpbmRleCA9IDEwMDsKIApAQCAtMTgzOSw3ICsxODM4LDcgQEAKIAlSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoIHBId0RhdGEsIGluZGV4ICk7CiB9CiAKLXZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX2FsNzIzMCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwpCit2b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDcyMzAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQogewogCXU4CWksIGluZGV4ID0gMTAwOwogCkBAIC0xODY5LDcgKzE4NjgsNyBAQAogCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgaW5kZXggKTsKIH0KIAotdm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfd2IyNDIoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfd2IyNDIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQogewogCXU4CWluZGV4ID0gMTAwOwogCkBAIC0xOTAyLDcgKzE5MDEsNyBAQAogLy8gICBOb25lLgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB2b2lkCi1SRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICkKK1JGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIJcGx0bXBbMTZdOyAvLyBUaGUgMTYgaXMgdGhlIG1heGltdW0gY2FwYWJpbGl0eSBvZiBoYXJkd2FyZQpAQCAtMjAxMiw3ICsyMDExLDcgQEAKIAogCQkJLy9TdGFydCB0byBmaWxsIFJGIHBhcmFtZXRlcnMsIFBMTF9PTiBzaG91bGQgYmUgcHVsbGVkIGxvdy4KIAkJCS8vV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDAwICk7Ci0JCQkvL1dCREVCVUcoKCIqIFBMTF9PTiAgICBsb3dcbiIpKTsKKwkJCS8vcHJpbnRrKCIqIFBMTF9PTiAgICBsb3dcbiIpOwogCiAJCQkvL0NoYW5uZWwgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzCiAJCQlpZiggQ2hhbm5lbC5iYW5kICE9IHBId0RhdGEtPmJhbmQpCkBAIC0yMDM3LDcgKzIwMzYsNyBAQAogCQkJCS8vIFdyaXRlIHRvIHJlZ2lzdGVyLiBudW1iZXIgbXVzdCBsZXNzIGFuZCBlcXVhbCB0aGFuIDE2CiAJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCBudW1iZXIsIE5PX0lOQ1JFTUVOVCApOwogCQkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQkJCQlXQkRFQlVHKCgiQmFuZCBjaGFuZ2VkXG4iKSk7CisJCQkJcHJpbnRrKCJCYW5kIGNoYW5nZWRcbiIpOwogCQkJCSNlbmRpZgogCQkJfQogCkBAIC0yMTMwLDcgKzIxMjksNyBAQAogfQogCiAvL1NldCB0aGUgdHggcG93ZXIgZGlyZWN0bHkgZnJvbSBEVVQgR1VJLCBub3QgZnJvbSB0aGUgRUVQUk9NLiBSZXR1cm4gdGhlIGN1cnJlbnQgc2V0dGluZwotdTggUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBQb3dlckluZGV4ICkKIHsKIAl1MzIJQmFuZCA9IHBId0RhdGEtPmJhbmQ7CiAJdTgJaW5kZXg9MDsKQEAgLTIxODgsNyArMjE4Nyw3IEBACiB9CiAKIC8vLS0gU3ViIGZ1bmN0aW9uCi11OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF8yNFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF8yNFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBpbmRleCApCiB7CiAJdTMyCQlQb3dlckRhdGE7CiAJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKQEAgLTIxOTcsNyArMjE5Niw3IEBACiAJcmV0dXJuIGluZGV4OwogfQogLy8tLQotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CkBAIC0yMjA2LDcgKzIyMDUsNyBAQAogCXJldHVybiBpbmRleDsKIH0KIC8vLS0KLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IGluZGV4ICkKIHsKIAl1MzIJCVBvd2VyRGF0YTsKIAlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOwpAQCAtMjIxNSw3ICsyMjE0LDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAvLy0tCi11OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBpbmRleCApCiB7CiAJdTMyCQlQb3dlckRhdGE7CiAJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKQEAgLTIyMjQsNyArMjIyMyw3IEBACiAJcmV0dXJuIGluZGV4OwogfQogLy8tLQotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CkBAIC0yMjMzLDcgKzIyMzIsNyBAQAogCXJldHVybiBpbmRleDsKIH0KIC8vLS0KLXU4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhMjIzMFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCXU4CQlpLGNvdW50OwpAQCAtMjI1Miw3ICsyMjUxLDcgQEAKIAlyZXR1cm4gaTsKIH0KIC8vLS0KLXU4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCXU4CQlpLGNvdW50OwpAQCAtMjI3MSw3ICsyMjcwLDcgQEAKIAlyZXR1cm4gaTsKIH0KIAotdTggUkZTeW50aGVzaXplcl9TZXRXaW5ib25kMjQyUG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3U4IFJGU3ludGhlc2l6ZXJfU2V0V2luYm9uZDI0MlBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBpbmRleCApCiB7CiAJdTMyCQlQb3dlckRhdGE7CiAJdTgJCWksY291bnQ7CkBAIC0yMzEyLDcgKzIzMTEsNyBAQAogLy8JCUluaXRpYWwgdGhlIGhhcmR3YXJlIHNldHRpbmcgYW5kIG1vZHVsZSB2YXJpYWJsZQogCS8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIER4eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgRHh4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtMjMyNiw3ICsyMzI1LDcgQEAKIAlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwNDAwLCByZWctPkQwMF9EbWFDb250cm9sICk7CiB9CiAKLXZvaWQgTXh4X2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKQordm9pZCBNeHhfaW5pdGlhbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMgkJdG1wOwpAQCAtMjQxNyw3ICsyNDE2LDcgQEAKIH0KIAogCi12b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgVXh4X3Bvd2VyX29mZl9wcm9jZWR1cmUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCS8vIFNXLCBQTVUgcmVzZXQgYW5kIHR1cm4gb2ZmIGNsb2NrCiAJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiMCwgMyApOwpAQCAtMjQyNSw3ICsyNDI0LDcgQEAKIH0KIAogLy9EZWNpZGUgdGhlIFR4VmdhIG9mIGV2ZXJ5IGNoYW5uZWwKLXZvaWQgR2V0VHhWZ2FGcm9tRUVQUk9NKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgR2V0VHhWZ2FGcm9tRUVQUk9NKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAl1MzIJCWksIGosIGx0bXA7CiAJdTE2CQlWYWx1ZVtNQVhfVFhWR0FfRUVQUk9NXTsKQEAgLTI0NzksNyArMjQ3OCw3IEBACiAvLyBvciBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXggYmUgY2FsbGVkLCBuZXcgVHhWZ2Egd2lsbCB0YWtlIGVmZmVjdC4KIC8vIFR4VmdhU2V0dGluZ0luRUVQUk9NIG9mIHNId0RhdGEgaXMgYW4gdTggYXJyYXkgcG9pbnQgdG8gRUVQUk9NIGNvbnRhaW4gZm9yIElTODlDMzUKIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgZGVmYXVsdCBUeFZnYVNldHRpbmdJbkVFUFJPTSBkYXRhIHRvIGNhbGN1bGF0ZSBuZXcgVHhWZ2EuCi12b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkgLy8gMjAwNjA2MTkuNSBBZGQKK3ZvaWQgRUVQUk9NVHhWZ2FBZGp1c3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKSAvLyAyMDA2MDYxOS41IEFkZAogewogCXU4CSoJcFR4VmdhID0gcEh3RGF0YS0+VHhWZ2FTZXR0aW5nSW5FRVBST007CiAJczE2CQlpLCBzdG1wOwpAQCAtMjYxMiwxNCArMjYxMSwxNCBAQAogCX0KIAogCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQlXQkRFQlVHKCgiIFR4VmdhRm9yMjQgOiBcbiIpKTsKKwlwcmludGsoIiBUeFZnYUZvcjI0IDogXG4iKTsKIAlEYXRhRG1wKCh1OCAqKXBId0RhdGEtPlR4VmdhRm9yMjQsIDE0ICwwKTsKLQlXQkRFQlVHKCgiIFR4VmdhRm9yNTAgOiBcbiIpKTsKKwlwcmludGsoIiBUeFZnYUZvcjUwIDogXG4iKTsKIAlEYXRhRG1wKCh1OCAqKXBId0RhdGEtPlR4VmdhRm9yNTAsIDcwICwwKTsKIAkjZW5kaWYKIH0KIAotdm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICkgLy8gMjAwNjA2MTMuMQordm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCByYXRlICkgLy8gMjAwNjA2MTMuMQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1bnNpZ25lZCBjaGFyCQlJczExYlJhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmgKaW5kZXggMTg4YTI1My4uNTQ5ODc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaApAQCAtMTcsOSArMTcsNiBAQAogCiAjaW5jbHVkZSAibG9jYWxwYXJhLmgiCiAKLS8qKioqKioqKioqKioqKioqKiogSU5DTFVERSBGSUxFUyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8jaW5jbHVkZSAiR0xcZ2xfY29yZS5oIgotCiAvKioqKioqKioqKioqKioqKioqIENPTlNUQU5UIEFORCBNQUNSTyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgX0lOTElORSAgICAgIF9faW5saW5lCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmQxMThmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotI2lmbmRlZiBfX1dJTkJPTkRfU01FX1NfSAotI2RlZmluZSBfX1dJTkJPTkRfU01FX1NfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgIm1hY19zdHJ1Y3R1cmVzLmgiCi0jaW5jbHVkZSAibG9jYWxwYXJhLmgiCi0KLS8vCi0vLyBTTUVfUy5IIC0KLS8vIFNNRSB0YXNrIGdsb2JhbCBDT05TVEFOVFMsIFNUUlVDVFVSRVMsIHZhcmlhYmxlcwotLy8KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vZGVmaW5lIHRoZSBtc2cgdHlwZSBvZiBTTUUgbW9kdWxlCi0vLyAweDAwfjB4MUYgOiBNU0cgZnJvbSBHVUkgZGlzcGF0Y2gKLS8vIDB4MjB+MHgzRiA6IE1TRyBmcm9tIE1MTUUKLS8vIDB4NDB+MHg1RiA6IE1TRyBmcm9tIFNDQU4KLS8vIDB4NjB+MHg2RiA6IE1TRyBmcm9tIFRYL1JYCi0vLyAweDcwfjB4N0YgOiBNU0cgZnJvbSBST0FNSU5HCi0vLyAweDgwfjB4OEYgOiBNU0cgZnJvbSBJU1IKLS8vIDB4OTAJCSA6IE1TRyBUaW1lT3V0Ci0KLS8vIGZyb20gR1VJCi0jZGVmaW5lIFNNRU1TR19TQ0FOX1JFUQkJCQkJMHgwMQotLy8jZGVmaW5lIFNNRU1TR19QQVNTSVZFX1NDQU5fUkVRCQkJMHgwMgotI2RlZmluZSBTTUVNU0dfSk9JTl9SRVEJCQkJCTB4MDMKLSNkZWZpbmUgU01FTVNHX1NUQVJUX0lCU1MJCQkJMHgwNAotI2RlZmluZSBTTUVNU0dfRElTQ09OTkVDVF9SRVEJCQkweDA1Ci0jZGVmaW5lIFNNRU1TR19BVVRIRU5fUkVRCQkJCTB4MDYKLSNkZWZpbmUgU01FTVNHX0RFQVVUSEVOX1JFUQkJCQkweDA3Ci0jZGVmaW5lIFNNRU1TR19BU1NPQ19SRVEJCQkJMHgwOAotI2RlZmluZSBTTUVNU0dfUkVBU1NPQ19SRVEJCQkJMHgwOQotI2RlZmluZSBTTUVNU0dfRElTQVNTT0NfUkVRCQkJCTB4MGEKLSNkZWZpbmUgU01FTVNHX1BPV0VSU0FWRV9SRVEJCQkweDBiCi0KLQotLy8gZnJvbSBNTE1FCi0jZGVmaW5lIFNNRU1TR19BVVRIRU5fQ0ZNCQkJCTB4MjEKLSNkZWZpbmUgU01FTVNHX0FVVEhFTl9JTkQJCQkJMHgyMgotI2RlZmluZSBTTUVNU0dfQVNTT0NfQ0ZNCQkJCTB4MjMKLSNkZWZpbmUgU01FTVNHX0RFQVVUSEVOX0lORAkJCQkweDI0Ci0jZGVmaW5lIFNNRU1TR19ESVNBU1NPQ19JTkQJCQkJMHgyNQotLy8gZnJvbSBTQ0FOCi0jZGVmaW5lIFNNRU1TR19TQ0FOX0NGTQkJCQkJMHg0MQotI2RlZmluZSBTTUVNU0dfU1RBUlRfSUJTU19DRk0JCQkweDQyCi0vLyBmcm9tIE1UTywgZnVuY3Rpb24gY2FsbCB0byBzZXQgU01FIHBhcmFtZXRlcnMKLQotLy8gMHg2MH4weDZGIDogTVNHIGZyb20gVFgvUlgKLS8vI2RlZmluZSBTTUVNU0dfSUJTU19KT0lOX1VQREFURV9CU1NJRAkweDYxCi0jZGVmaW5lIFNNRU1TR19DT1VOVEVSTUVBU1VSRV9NSUNGQUlMX1RJTUVPVVQJCTB4NjIKLSNkZWZpbmUgU01FTVNHX0NPVU5URVJNRUFTVVJFX0JMT0NLX1RJTUVPVVQJMHg2MwotLy8gZnJvbSBST0FNSU5HCi0jZGVmaW5lIFNNRU1TR19IQU5ET1ZFUl9KT0lOX1JFUQkJMHg3MQotI2RlZmluZSBTTUVNU0dfRU5EX1JPQU1JTkcJCQkJMHg3MgotI2RlZmluZSBTTUVNU0dfU0NBTl9KT0lOX1JFUQkJCTB4NzMKLS8vIGZyb20gSVNSCi0jZGVmaW5lIFNNRU1TR19UU0ZfU1lOQ19JTkQJCQkJMHg4MQotLy8gZnJvbSBUaW1lT3V0Ci0jZGVmaW5lIFNNRU1TR19USU1FT1VUCQkJCQkweDkxCi0KLQotCi0jZGVmaW5lIE1BWF9QTUtJRF9BY2N1bnQgICAgICAgICAgICAgICAgMTYKLS8vQGFkZGVkIGJ5IHdzIDA0LzIyLzA1Ci0jZGVmaW5lIENpcGhlcl9EaXNhYmxlZCAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDaXBoZXJfV2VwICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQ2lwaGVyX1RraXAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIENpcGhlcl9DY21wICAgICAgICAgICAgICAgICAgICAgNAotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy9Db25zdGFudHMKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vL0dsb2JhbCBkYXRhIHN0cnVjdHVyZXMKLQotI2RlZmluZSBOVU1PRldFUEVOVFJJRVMgICAgIDY0Ci0KLXR5cGVkZWYgZW51bSBfV0VQS2V5TW9kZQotewotICAgIFdFUEtFWV9ESVNBQkxFRCA9IDAsCi0gICAgV0VQS0VZXzY0ICAgICAgID0gMSwKLSAgICBXRVBLRVlfMTI4ICAgICAgPSAyCi0KLX0gV0VQS0VZTU9ERSwgKnBXRVBLRVlNT0RFOwotCi0jaWZkZWYgX1dQQTJfCi0KLXR5cGVkZWYgc3RydWN0IF9CU1NJbmZvCi17Ci0gIHU4ICAgICAgICBQcmVBdXRoQnNzSURbNl07Ci0gIFBNS0lEICAgICAgICBwbWtpZF92YWx1ZTsKLX1CU1NJRF9JbmZvOwotCi10eXBlZGVmIHN0cnVjdCBfUE1LSURfVGFibGUgLy9hZGRlZCBieSB3cyAwNS8wNS8wNAotewotICAgdTMyICBMZW5ndGg7Ci0gICB1MzIgIEJTU0lESW5mb0NvdW50OwotICAgQlNTSURfSW5mbyBCU1NJREluZm9bMTZdOwotCi19IFBNS0lEX1RhYmxlOwotCi0jZW5kaWYgLy9lbmQgZGVmIF9XUEEyXwotCi0jZGVmaW5lIE1BWF9CQVNJQ19SQVRFX1NFVCAgICAgICAgICAxNQotI2RlZmluZSBNQVhfT1BUX1JBVEVfU0VUICAgICAgICAgICAgTUFYX0JBU0lDX1JBVEVfU0VUCi0KLQotdHlwZWRlZiBzdHJ1Y3QgX1NNRV9QQVJBTUVURVJTCi17Ci0gICAgdTE2CQkJCXdTdGF0ZTsKLQl1OAkJCQlib0RVVG1vZGU7Ci0JdTgJCQkJYkRlc2lyZWRQb3dlclNhdmU7Ci0KLQkvLyBTTUUgdGltZXIgYW5kIHRpbWVvdXQgdmFsdWUKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQotCXU4CQkJCWJvSW5UaW1lckhhbmRsZXI7Ci0JdTggCQkJCWJvQXV0aFJldHJ5QWN0aXZlOwotCXU4CQkJCXJlc2VydmVkXzBbMl07Ci0KLQl1MzIJCQkJQXV0aGVuUmV0cnlUaW1lclZhbDsJLy8gTk9URTogQXNzb2MgZG9uJ3QgZmFpbCB0aW1lb3V0Ci0JdTMyCQkJCUpvaW5GYWlsVGltZXJWYWw7CQkvLyAxMCpCZWFjb24tSW50ZXJ2YWwKLQotCS8vUmF0ZXMKLQl1OAkJCQlCU1NCYXNpY1JhdGVTZXRbKE1BWF9CQVNJQ19SQVRFX1NFVCArIDMpICYgfjB4MDMgXTsgICAgLy8gQlNTIGJhc2ljIHJhdGUgc2V0Ci0JdTgJCQkJT3BlcmF0aW9uYWxSYXRlU2V0WyhNQVhfT1BUX1JBVEVfU0VUICsgMykgJiB+MHgwMyBdOyAvLyBPcGVyYXRpb25hbCByYXRlIHNldAotCi0JdTgJCQkJTnVtT2ZCU1NCYXNpY1JhdGU7Ci0JdTgJCQkJTnVtT2ZPcGVyYXRpb25hbFJhdGU7Ci0JdTgJCQkJcmVzZXJ2ZWRfMVsyXTsKLQotCXUzMgkJCQlCYXNpY1JhdGVCaXRtYXA7Ci0JdTMyCQkJCU9wUmF0ZUJpdG1hcDsKLQotCS8vIFN5c3RlbSBwYXJhbWV0ZXJzIFNldCBieSBHVUkKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXJ0IElCU1MgcGFyYW1ldGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0JdTMyCQkJCWJvU3RhcnRJQlNTOwkJCS8vU3RhcnQgSUJTUyB0b2dnbGUKLQotCXUxNgkJCQl3QmVhY29uUGVyaW9kOwotCXUxNgkJCQl3QVRJTV9XaW5kb3c7Ci0KLQlDaGFuSW5mbwkJCUlic3NDaGFuOyAvLyAyQgkvL2NoYW5uZWwgc2V0dGluZyB3aGVuIHN0YXJ0IElCU1MKLQl1OAkJCQlyZXNlcnZlZF8yWzJdOwotCi0gICAgLy8gSm9pbiByZWxhdGVkCi0JdTE2CQkJCXdEZXNpcmVkSm9pbkJTUzsJCS8vIEJTUyBpbmRleCB3aGljaCBkZXNpcmUgdG8gam9pbgotCXU4CQkJCWJvSm9pblJlcTsJCQkJLy9Kb2luIHJlcXVlc3QgdG9nZ2xlCi0JdTgJCQkJYkRlc2lyZWRCU1NUeXBlOwkJLy9mb3IgSm9pbiByZXF1ZXN0Ci0KLSAgICB1MTYJCQkJd0NhcGFiaWxpdHlJbmZvOyAgICAgICAgLy8gVXNlZCB3aGVuIGludm9raW5nIHRoZSBNTE1FX0Fzc29jaWF0ZV9yZXF1ZXN0KCkuCi0JdTE2CQkJCXdOb25FUlBjYXBhYmlsaXR5SW5mbzsKLQotICAgIHN0cnVjdCBTU0lEX0VsZW1lbnQgc0Rlc2lyZWRTU0lEOyAvLyAzNCBCCi0JdTgJCQkJcmVzZXJ2ZWRfM1syXTsKLQotCXU4ICAgIAkJCWFiRGVzaXJlZEJTU0lEW01BQ19BRERSX0xFTkdUSCArIDJdOwotCi0JdTgJCQkJYkpvaW5TY2FuQ291bnQ7CQkJLy8gdGhlIHRpbWUgb2Ygc2Nhbi1qb2luIGFjdGlvbiBuZWVkIHRvIGRvCi0JdTgJCQkJYkRlc2lyZWRBdXRoTW9kZTsgICAgICAgLy8gQVVUSF9PUEVOX1NZU1RFTSBvciBBVVRIX1NIQVJFRF9LRVkKLQl1OAkJCQlyZXNlcnZlZF80WzJdOwotCi0gICAgLy8gRW5jcnlwdGlvbiBwYXJhbWV0ZXJzCi0JdTggICAgIAkJCV9kb3QxMVByaXZhY3lJbnZva2VkOwotICAgIHU4ICAgICAgICAgICAgIAlfZG90MTFQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQ7Ci0JdTgJCQkJcmVzZXJ2ZWRfNVsyXTsKLQotICAgIC8vQCB3cyBhZGRlZAotICAgIHU4CQkJCURlc2lyZWRFbmNyeXB0OwotCXU4CQkJCWVuY3J5cHRfc3RhdHVzOwkvL0VOQ1JZUFRfRElTQUJMRSwgRU5DUllQVF9XRVAsIEVOQ1JZUFRfV0VQX05PS0VZLCBFTkNSWVBUX1RLSVAsIC4uLgotCXU4CQkJCWtleV9sZW5ndGg7Ci0JdTgJCQkJcGFpcndpc2Vfa2V5X29rOwotCi0JdTgJCQkJZ3JvdXBfa2V5X29rOwotICAgIHU4CQkJCXdwYV9vazsgICAgICAgICAgICAgLy8gaW5kaWNhdGUgdGhlIGNvbnRyb2wgcG9ydCBvZiA4MDIuMXggaXMgb3BlbiBvciBjbG9zZQotCXU4CQkJCXBhaXJ3aXNlX2tleV90eXBlOwotCXU4CQkJCWdyb3VwX2tleV90eXBlOwotCi0gICAgdTMyICAgICAgICAgICAgICAgX2RvdDExV0VQRGVmYXVsdEtleUlEOwotCi0JdTggICAgICAgICAgICAgIAl0eF9taWNfa2V5WzhdOyAgICAgIC8vIFRPRE86IDA2Mjcga2V2aW4tVEtJUAotCXU4ICAgICAgICAgICAgICAJcnhfbWljX2tleVs4XTsgICAgICAvLyBUT0RPOiAwNjI3IGtldmluLVRLSVAKLQl1OAkJCQlncm91cF90eF9taWNfa2V5WzhdOwotCXU4CQkJCWdyb3VwX3J4X21pY19rZXlbOF07Ci0KLS8vCSNpZmRlZiBfV1BBXwotCXU4CQkJCUFzc29jUmVxVmFySUVbMjAwXTsKLQl1OAkJCQlBc3NvY1Jlc3BWYXJJRVsyMDBdOwotCi0JdTE2CQkJCUFzc29jUmVxVmFyTGVuOwotCXUxNgkJCQlBc3NvY1Jlc3BWYXJMZW47Ci0JdTgJCQkJYm9SZWFzc29jOwkJCQkvL3VzZSBhc3NvYy4gb3IgcmVhc3NvYy4KLQl1OAkJCQlyZXNlcnZlZF82WzNdOwotCXUxNgkJCQlBc3NvY1Jlc3BDYXBhYmlsaXR5OwotCXUxNgkJCQlBc3NvY1Jlc3BTdGF0dXM7Ci0vLwkjZW5kaWYKLQotCSNpZmRlZiBfV1BBMl8KLSAgICB1OCAgICAgICAgICAgICAgIFBta0lkVGFibGVbMjU2XTsKLSAgICB1MzIgICAgICAgICAgICAgICBQbWtpZFRhYmxlSW5kZXg7Ci0JI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KLQotfSBTTUVfUEFSQU1FVEVSUywgKlBTTUVfUEFSQU1FVEVSUzsKLQotI2RlZmluZSBwc1NNRQkJCSgmKGFkYXB0ZXItPnNTbWVQYXJhKSkKLQotI2RlZmluZSB3U01FR2V0Q3VycmVudFNUQVN0YXRlKGFkYXB0ZXIpCQkoKHUxNikoYWRhcHRlciktPnNTbWVQYXJhLndTdGF0ZSkKLQotCi0KLS8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLS8vCVNtZU1vZHVsZS5oCi0vLwkJRGVmaW5lIHRoZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIFNNRSBtb2R1bGUKLS8vCWhpc3RvcnkgLS0gMDEvMTQvMDMnIGNyZWF0ZWQKLS8vCi0vLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0KLS8vRGVmaW5lIHRoZSBzdGF0ZSBvZiBTTUUgbW9kdWxlCi0jZGVmaW5lIERJU0FCTEVECQkJCQkJMAotI2RlZmluZSBJTklUX1NDQU4JCQkJCQkxCi0jZGVmaW5lIFNDQU5fUkVBRFkJCQkJCQkyCi0jZGVmaW5lIFNUQVJUX0lCU1MJCQkJCQkzCi0jZGVmaW5lIEpPSU5fUEVORElORwkJCQkJNAotI2RlZmluZSBKT0lOX0NGTQkJCQkJCTUKLSNkZWZpbmUgQVVUSEVOVElDQVRFX1BFTkRJTkcJCQk2Ci0jZGVmaW5lIEFVVEhFTlRJQ0FURUQJCQkJCTcKLSNkZWZpbmUgQ09OTkVDVEVECQkJCQkJOAotLy8jZGVmaW5lIEVBUF9TVEFSVElORwkJCQkJOQotLy8jZGVmaW5lIEVBUE9MX0FVVEhFTl9QRU5ESU5HCQkJMTAKLS8vI2RlZmluZSBTRUNVUkVfQ09OTkVDVEVECQkJCTExCi0KLQotLy8gU3RhdGljIGZ1bmN0aW9uCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNV92ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MzNiYzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNV92ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vCi0vLyBPbmx5IGRlZmluZSBvbmUgb2YgZm9sbG93Ci0vLwotCi0jaWZkZWYgV0JfV0lOCi0JI2RlZmluZSBWRVJfRklMRVZFUlNJT04gICAgICAgICAgICAgMSwwMCw0NywwMAotCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OX1NUUiAgICAgICAgICIxLjAwLjQ3LjAwIgotCSNkZWZpbmUgV0IzMl9EUklWRVJfTUFKT1JfVkVSU0lPTiAgIDB4MDEwMAotCSNkZWZpbmUgV0IzMl9EUklWRVJfTUlOT1JfVkVSU0lPTiAgIDB4NDcwMAotI2VuZGlmCi0KLSNpZmRlZiBXQl9DRQotCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OICAgICAgICAgICAgIDIsMDAsNDcsMDAKLQkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTl9TVFIgICAgICAgICAiMi4wMC40Ny4wMCIKLQkjZGVmaW5lIFdCMzJfRFJJVkVSX01BSk9SX1ZFUlNJT04gICAweDAyMDAKLQkjZGVmaW5lIFdCMzJfRFJJVkVSX01JTk9SX1ZFUlNJT04gICAweDQ3MDAKLSNlbmRpZgotCi0jaWZkZWYgV0JfTElOVVgKLQkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTiAgICAgICAgICAgICAzLDAwLDQ3LDAwCi0JI2RlZmluZSBWRVJfRklMRVZFUlNJT05fU1RSICAgICAgICAgIjMuMDAuNDcuMDAiCi0JI2RlZmluZSBXQjMyX0RSSVZFUl9NQUpPUl9WRVJTSU9OICAgMHgwMzAwCi0JI2RlZmluZSBXQjMyX0RSSVZFUl9NSU5PUl9WRVJTSU9OICAgMHg0NzAwCi0jZW5kaWYKLQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWcuYwppbmRleCBjNzRiM2ZkLi5mNTYwOGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJlZy5jCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKLWV4dGVybiB2b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpOworZXh0ZXJuIHZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KTsKIAogLy8gdHJ1ZSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKIC8vIGZhbHNlIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKQEAgLTEzLDcgKzEzLDcgQEAKIC8vIEZsYWcgOiBBVVRPX0lOQ1JFTUVOVCAtIFJlZ2lzdGVyTm8gd2lsbCBhdXRvIGluY3JlbWVudCA0CiAvLwkJICBOT19JTkNSRU1FTlQgLSBGdW5jdGlvbiB3aWxsIHdyaXRlIGRhdGEgaW50byB0aGUgc2FtZSByZWdpc3RlcgogdW5zaWduZWQgY2hhcgotV2IzNVJlZ19CdXJzdFdyaXRlKHBod19kYXRhX3QgcEh3RGF0YSwgdTE2IFJlZ2lzdGVyTm8sIHUzMiAqIHBSZWdpc3RlckRhdGEsIHU4IE51bWJlck9mRGF0YSwgdTggRmxhZykKK1diMzVSZWdfQnVyc3RXcml0ZShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCB1MzIgKiBwUmVnaXN0ZXJEYXRhLCB1OCBOdW1iZXJPZkRhdGEsIHU4IEZsYWcpCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXN0cnVjdCB1cmIJKnVyYiA9IE5VTEw7CkBAIC03Myw3ICs3Myw3IEBACiB9CiAKIHZvaWQKLVdiMzVSZWdfVXBkYXRlKHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUpCitXYjM1UmVnX1VwZGF0ZShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzd2l0Y2ggKFJlZ2lzdGVyTm8pIHsKQEAgLTExOCw3ICsxMTgsNyBAQAogLy8gdHJ1ZSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKIC8vIGZhbHNlIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKIHVuc2lnbmVkIGNoYXIKLVdiMzVSZWdfV3JpdGVTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApCitXYjM1UmVnX1dyaXRlU3luYyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlpbnQgcmV0ID0gLTE7CkBAIC0xNDksNyArMTQ5LDcgQEAKIAogCWlmIChyZXQgPCAwKSB7CiAJCSNpZmRlZiBfUEVfUkVHX0RVTVBfCi0JCVdCREVCVUcoKCJFUDAgV3JpdGUgcmVnaXN0ZXIgdXNiIG1lc3NhZ2Ugc2VuZGluZyBlcnJvclxuIikpOworCQlwcmludGsoIkVQMCBXcml0ZSByZWdpc3RlciB1c2IgbWVzc2FnZSBzZW5kaW5nIGVycm9yXG4iKTsKIAkJI2VuZGlmCiAKIAkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOyAvLyAyMDA2MDcwNC4yCkBAIC0xNjIsNyArMTYyLDcgQEAKIC8vIHRydWUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CiAvLyBmYWxzZSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CiB1bnNpZ25lZCBjaGFyCi1XYjM1UmVnX1dyaXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApCitXYjM1UmVnX1dyaXRlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAvLyB0cnVlICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQogLy8gZmFsc2UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAogdW5zaWduZWQgY2hhcgotV2IzNVJlZ19Xcml0ZVdpdGhDYWxsYmFja1ZhbHVlKCBwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCB1MzIgUmVnaXN0ZXJWYWx1ZSwKK1diMzVSZWdfV3JpdGVXaXRoQ2FsbGJhY2tWYWx1ZSggc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgdTMyIFJlZ2lzdGVyVmFsdWUsCiAJCQkJczggKnBWYWx1ZSwgczggTGVuKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKQEAgLTI4MSw3ICsyODEsNyBAQAogLy8gZmFsc2UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAogLy8gcFJlZ2lzdGVyVmFsdWUgOiBJdCBtdXN0IGJlIGEgcmVzaWRlbnQgYnVmZmVyIGR1ZSB0byBhc3luY2hyb25vdXMgcmVhZCByZWdpc3Rlci4KIHVuc2lnbmVkIGNoYXIKLVdiMzVSZWdfUmVhZFN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICB1MzIgKiBwUmVnaXN0ZXJWYWx1ZSApCitXYjM1UmVnX1JlYWRTeW5jKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIgKglwbHRtcCA9IHBSZWdpc3RlclZhbHVlOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAKIAlpZiAocmV0IDwgMCkgewogCQkjaWZkZWYgX1BFX1JFR19EVU1QXwotCQlXQkRFQlVHKCgiRVAwIFJlYWQgcmVnaXN0ZXIgdXNiIG1lc3NhZ2Ugc2VuZGluZyBlcnJvclxuIikpOworCQlwcmludGsoIkVQMCBSZWFkIHJlZ2lzdGVyIHVzYiBtZXNzYWdlIHNlbmRpbmcgZXJyb3JcbiIpOwogCQkjZW5kaWYKIAogCQlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7IC8vIDIwMDYwNzA0LjIKQEAgLTMzMCw3ICszMzAsNyBAQAogLy8gZmFsc2UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAogLy8gcFJlZ2lzdGVyVmFsdWUgOiBJdCBtdXN0IGJlIGEgcmVzaWRlbnQgYnVmZmVyIGR1ZSB0byBhc3luY2hyb25vdXMgcmVhZCByZWdpc3Rlci4KIHVuc2lnbmVkIGNoYXIKLVdiMzVSZWdfUmVhZChwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKQorV2IzNVJlZ19SZWFkKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTE2IFJlZ2lzdGVyTm8sICB1MzIgKiBwUmVnaXN0ZXJWYWx1ZSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKiBkcjsKQEAgLTM4NSw3ICszODUsNyBAQAogCiAKIHZvaWQKLVdiMzVSZWdfRVAwVk1fc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKQorV2IzNVJlZ19FUDBWTV9zdGFydCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC0zOTcsNyArMzk3LDcgQEAKIH0KIAogdm9pZAotV2IzNVJlZ19FUDBWTShwaHdfZGF0YV90IHBId0RhdGEgKQorV2IzNVJlZ19FUDBWTShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzdHJ1Y3QgdXJiCSp1cmI7CkBAIC00NDEsNyArNDQxLDcgQEAKIAogCWlmIChyZXQgPCAwKSB7CiAjaWZkZWYgX1BFX1JFR19EVU1QXwotCQlXQkRFQlVHKCgiRVAwIElycCBzZW5kaW5nIGVycm9yXG4iKSk7CisJCXByaW50aygiRVAwIElycCBzZW5kaW5nIGVycm9yXG4iKTsKICNlbmRpZgogCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtNDU3LDcgKzQ1Nyw3IEBACiB2b2lkCiBXYjM1UmVnX0VQMFZNX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlwaHdfZGF0YV90ICBwSHdEYXRhID0gKHBod19kYXRhX3QpdXJiLT5jb250ZXh0OworCXN0cnVjdCBod19kYXRhICogIHBId0RhdGEgPSAoc3RydWN0IGh3X2RhdGEgKil1cmItPmNvbnRleHQ7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXN0cnVjdCB3YjM1X3JlZ19xdWV1ZSAqcmVnX3F1ZXVlOwogCkBAIC00ODAsOCArNDgwLDcgQEAKIAogCQlpZiAocmVnLT5FUDBWTV9zdGF0dXMpIHsKICNpZmRlZiBfUEVfUkVHX0RVTVBfCi0JCQlXQkRFQlVHKCgiRVAwIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIikpOwotCQkJRGVidWdVc2JkU3RhdHVzSW5mb3JtYXRpb24oIHJlZy0+RVAwVk1fc3RhdHVzICk7CisJCQlwcmludGsoIkVQMCBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpOwogI2VuZGlmCiAJCQlyZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKIAkJCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsKQEAgLTUwMCw3ICs0OTksNyBAQAogCiAKIHZvaWQKLVdiMzVSZWdfZGVzdHJveShwaHdfZGF0YV90IHBId0RhdGEpCitXYjM1UmVnX2Rlc3Ryb3koc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzdHJ1Y3QgdXJiCSp1cmI7CkBAIC01MzAsNyArNTI5LDcgQEAKIAkJCWtmcmVlKHJlZ19xdWV1ZSk7CiAJCX0gZWxzZSB7CiAJCQkjaWZkZWYgX1BFX1JFR19EVU1QXwotCQkJV0JERUJVRygoIkVQMCBxdWV1ZSByZWxlYXNlIGVycm9yXG4iKSk7CisJCQlwcmludGsoIkVQMCBxdWV1ZSByZWxlYXNlIGVycm9yXG4iKTsKIAkJCSNlbmRpZgogCQl9CiAJCXNwaW5fbG9ja19pcnEoICZyZWctPkVQMFZNX3NwaW5fbG9jayApOwpAQCAtNTQzLDcgKzU0Miw3IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gVGhlIGZ1bmN0aW9uIGNhbiBiZSBydW4gaW4gcGFzc2l2ZS1sZXZlbCBvbmx5LgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXVuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZz0mcEh3RGF0YS0+cmVnOwogCXUzMiBsdG1wOwpAQCAtNTk5LDcgKzU5OCw3IEBACiAJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmUmVnaW9uX1NjYW5JbnRlcnZhbCApOwogCiAJLy8gVXBkYXRlIEV0aGVybmV0IGFkZHJlc3MKLQltZW1jcHkoIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MgKTsKKwltZW1jcHkoIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzLCBFVEhfQUxFTiApOwogCiAJLy8gVXBkYXRlIHNvZnR3YXJlIHZhcmlhYmxlCiAJcEh3RGF0YS0+U29mdHdhcmVTZXQgPSAodTE2KShTb2Z0d2FyZVNldCAmIDB4ZmZmZik7CkBAIC03MjMsNyArNzIyLDcgQEAKIAlyZXR1cm4gZHdEYXRhOwogfQogCi12b2lkIFdiMzVSZWdfcGh5X2NhbGlicmF0aW9uKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgV2IzNVJlZ19waHlfY2FsaWJyYXRpb24oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXUzMiBCQjNjLCBCQjU0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCmluZGV4IGQ5NzIxNWEuLjMwZjViNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCkBAIC02LDQ3ICs2LDQ3IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gSW50ZXJmYWNlIGZ1bmN0aW9uIGRlY2xhcmUKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBVeHhfcG93ZXJfb25fcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIFV4eF9SZWFkRXRoZXJuZXRBZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIER4eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIE14eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIFJGU3ludGhlc2l6ZXJfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwotLy92b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHM4IENoYW5uZWwgKTsKLXZvaWQgUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApOwotdm9pZCBCQlByb2Nlc3Nvcl9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIEJCUHJvY2Vzc29yX1JhdGVDaGFuZ2luZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IHJhdGUgKTsgLy8gMjAwNjA2MTMuMQotLy92b2lkIFJGX1JhdGVDaGFuZ2luZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IHJhdGUgKTsgLy8gMjAwNjA2MjYuNS5jIEFkZAotdTggUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfMjRQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfMjRQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfNTBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGEyMjMwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKLXU4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Ci11OCBSRlN5bnRoZXNpemVyX1NldFdpbmJvbmQyNDJQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdm9pZCBHZXRUeFZnYUZyb21FRVBST00oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgRUVQUk9NVHhWZ2FBZGp1c3QoICBwaHdfZGF0YV90IHBId0RhdGEgKTsgLy8gMjAwNjA2MTkuNSBBZGQKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIFV4eF9wb3dlcl9vbl9wcm9jZWR1cmUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgVXh4X3Bvd2VyX29mZl9wcm9jZWR1cmUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgRHh4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgTXh4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgUkZTeW50aGVzaXplcl9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CisvL3ZvaWQgUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgczggQ2hhbm5lbCApOwordm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICk7Cit2b2lkIEJCUHJvY2Vzc29yX2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggcmF0ZSApOyAvLyAyMDA2MDYxMy4xCisvL3ZvaWQgUkZfUmF0ZUNoYW5naW5nKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggcmF0ZSApOyAvLyAyMDA2MDYyNi41LmMgQWRkCit1OCBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF8yNFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF81MFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN18yNFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyNVBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggIHN0cnVjdCBod19kYXRhICosICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGE3MjMwUG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqLCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0V2luYm9uZDI0MlBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit2b2lkIEdldFR4VmdhRnJvbUVFUFJPTSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBFRVBST01UeFZnYUFkanVzdCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOyAvLyAyMDA2MDYxOS41IEFkZAogCiAjZGVmaW5lIFJGV3JpdGVDb250cm9sRGF0YSggX0EsIF9WICkgV2IzNVJlZ19Xcml0ZSggX0EsIDB4MDg2NCwgX1YgKQogCi12b2lkIFdiMzVSZWdfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX2Rlc3Ryb3koICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKIAotdW5zaWduZWQgY2hhciBXYjM1UmVnX1JlYWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICB1MzIgKiBwUmVnaXN0ZXJWYWx1ZSApOwotdW5zaWduZWQgY2hhciBXYjM1UmVnX1JlYWRTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZVN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVXaXRoQ2FsbGJhY2tWYWx1ZSggIHBod19kYXRhX3QgcEh3RGF0YSwKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkU3luYyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIHUzMiAqIHBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVTeW5jKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsCiAJCQkJCQkJCSB1MTYgUmVnaXN0ZXJObywKIAkJCQkJCQkJIHUzMiBSZWdpc3RlclZhbHVlLAogCQkJCQkJCQkgczggKnBWYWx1ZSwKIAkJCQkJCQkJIHM4IExlbik7Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfQnVyc3RXcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyICogcFJlZ2lzdGVyRGF0YSwgIHU4IE51bWJlck9mRGF0YSwgIHU4IEZsYWcgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19CdXJzdFdyaXRlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgKiBwUmVnaXN0ZXJEYXRhLCAgdTggTnVtYmVyT2ZEYXRhLCAgdTggRmxhZyApOwogCi12b2lkIFdiMzVSZWdfRVAwVk0oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgV2IzNVJlZ19FUDBWTV9zdGFydCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX0VQMFZNKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIFdiMzVSZWdfRVAwVk1fc3RhcnQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKIHZvaWQgV2IzNVJlZ19FUDBWTV9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpOwogCiB1MzIgQml0UmV2ZXJzZSggdTMyIGR3RGF0YSwgdTMyIERhdGFMZW5ndGgpOwpAQCAtNTQsOCArNTQsOCBAQAogdm9pZCBDYXJkR2V0TXVsdGljYXN0Qml0KCAgIHU4IEFkZHJlc3NbTUFDX0FERFJfTEVOR1RIXSwgIHU4ICpCeXRlLCAgdTggKlZhbHVlICk7CiB1MzIgQ2FyZENvbXB1dGVDcmMoICB1OCAqIEJ1ZmZlciwgIHUzMiBMZW5ndGggKTsKIAotdm9pZCBXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbiggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBXYjM1UmVnX1VwZGF0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19waHlfY2FsaWJyYXRpb24oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19VcGRhdGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIGFkanVzdF9UWFZHQV9mb3JfaXFfbWFnKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnguYwppbmRleCA3ZjhiNmQ3Li4zZThjZjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnguYwpAQCAtODIsOSArODIsOSBAQAogc3RhdGljIHUxNiBXYjM1UnhfaW5kaWNhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CiAJREVTQ1JJUFRPUglSeERlczsKLQlQV0IzNVJYCXBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAl1OCAqCQlwUnhCdWZmZXJBZGRyZXNzOwogCXUxNgkJUGFja2V0U2l6ZTsKIAl1MTYJCXN0bXAsIEJ1ZmZlclNpemUsIHN0bXAyID0gMDsKQEAgLTExOCw3ICsxMTgsNyBAQAogCQkJLy8gQmFzaWMgY2hlY2sgZm9yIFJ4IGxlbmd0aC4gSXMgbGVuZ3RoIHZhbGlkPwogCQkJaWYgKFBhY2tldFNpemUgPiBNQVhfUEFDS0VUX1NJWkUpIHsKIAkJCQkjaWZkZWYgX1BFX1JYX0RVTVBfCi0JCQkJV0JERUJVRygoIlNlcmlvdXMgRVJST1IgOiBSeCBkYXRhIHNpemUgdG9vIGxvbmcsIHNpemUgPSVkXG4iLCBQYWNrZXRTaXplKSk7CisJCQkJcHJpbnRrKCJTZXJpb3VzIEVSUk9SIDogUnggZGF0YSBzaXplIHRvbyBsb25nLCBzaXplID0lZFxuIiwgUGFja2V0U2l6ZSk7CiAJCQkJI2VuZGlmCiAKIAkJCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CkBAIC0xNjEsOCArMTYxLDggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlwaHdfZGF0YV90IHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKLQlQV0IzNVJYCQlwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAJdTggKgkJcFJ4QnVmZmVyQWRkcmVzczsKIAl1MzIJCVNpemVDaGVjazsKIAl1MTYJCUJ1bGtMZW5ndGg7CkBAIC0xOTQsOCArMTk0LDcgQEAKIAkvLyBUaGUgVVJCIGlzIGNvbXBsZXRlZCwgY2hlY2sgdGhlIHJlc3VsdAogCWlmIChwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgIT0gMCkgewogCQkjaWZkZWYgX1BFX1VTQl9TVEFURV9EVU1QXwotCQlXQkRFQlVHKCgiRVAzIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIikpOwotCQlEZWJ1Z1VzYmRTdGF0dXNJbmZvcm1hdGlvbiggcFdiMzVSeC0+RVAzVk1fc3RhdHVzICk7CisJCXByaW50aygiRVAzIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIik7CiAJCSNlbmRpZgogCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CiAJCWdvdG8gZXJyb3I7CkBAIC0yMzksOCArMjM4LDggQEAKIHN0YXRpYyB2b2lkIFdiMzVSeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlwaHdfZGF0YV90IHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKLQlQV0IzNVJYCXBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAl1OCAqCXBSeEJ1ZmZlckFkZHJlc3M7CiAJc3RydWN0IHVyYiAqdXJiID0gcFdiMzVSeC0+UnhVcmI7CiAJaW50CXJldHY7CkBAIC0yNjAsNyArMjU5LDcgQEAKIAlpZiAoIXBXYjM1UngtPlJ4T3duZXJbUnhCdWZmZXJJZF0pIHsKIAkJLy8gSXQncyBpbXBvc3NpYmxlIHRvIHJ1biBoZXJlLgogCQkjaWZkZWYgX1BFX1JYX0RVTVBfCi0JCVdCREVCVUcoKCJSeCBkcml2ZXIgZmlmbyB1bmF2YWlsYWJsZVxuIikpOworCQlwcmludGsoIlJ4IGRyaXZlciBmaWZvIHVuYXZhaWxhYmxlXG4iKTsKIAkJI2VuZGlmCiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMzAyLDggKzMwMSw4IEBACiB2b2lkIFdiMzVSeF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlwaHdfZGF0YV90IHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKLQlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAogCS8vIEFsbG93IG9ubHkgb25lIHRocmVhZCB0byBydW4gaW50byB0aGUgV2IzNVJ4KCkgZnVuY3Rpb24KIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBXYjM1UngtPlJ4RmlyZUNvdW50ZXIpID09IDEpIHsKQEAgLTMxNCw5ICszMTMsOSBAQAogfQogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyB2b2lkIFdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3N0YXRpYyB2b2lkIFdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKLQlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAl1MzIJaTsKIAogCXBXYjM1UngtPkJ5dGVSZWNlaXZlZCA9IDA7CkBAIC0zMzAsOSArMzI5LDkgQEAKIAkJcFdiMzVSeC0+UnhPd25lcltpXSA9IDE7CiB9CiAKLXVuc2lnbmVkIGNoYXIgV2IzNVJ4X2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKQordW5zaWduZWQgY2hhciBXYjM1UnhfaW5pdGlhbChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAKIAkvLyBJbml0aWFsIHRoZSBCdWZmZXIgUXVldWUKIAlXYjM1UnhfcmVzZXRfZGVzY3JpcHRvciggcEh3RGF0YSApOwpAQCAtMzQxLDIzICszNDAsMjMgQEAKIAlyZXR1cm4gKCEhcFdiMzVSeC0+UnhVcmIpOwogfQogCi12b2lkIFdiMzVSeF9zdG9wKHBod19kYXRhX3QgcEh3RGF0YSkKK3ZvaWQgV2IzNVJ4X3N0b3Aoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewotCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJc3RydWN0IHdiMzVfcnggKnBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OwogCiAJLy8gQ2FuY2VsaW5nIHRoZSBJcnAgaWYgYWxyZWFkeSBzZW5kcyBpdCBvdXQuCiAJaWYgKHBXYjM1UngtPkVQM3ZtX3N0YXRlID09IFZNX1JVTk5JTkcpIHsKIAkJdXNiX3VubGlua191cmIoIHBXYjM1UngtPlJ4VXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVSeF9kZXN0cm95IHRvIGZyZWUgdGhlbQogCQkjaWZkZWYgX1BFX1JYX0RVTVBfCi0JCVdCREVCVUcoKCJFUDMgUnggc3RvcFxuIikpOworCQlwcmludGsoIkVQMyBSeCBzdG9wXG4iKTsKIAkJI2VuZGlmCiAJfQogfQogCiAvLyBOZWVkcyBwcm9jZXNzIGNvbnRleHQKLXZvaWQgV2IzNVJ4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQordm9pZCBXYjM1UnhfZGVzdHJveShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAKIAlkbyB7CiAJCW1zbGVlcCgxMCk7IC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmEKQEAgLTM2Nyw3ICszNjYsNyBAQAogCWlmIChwV2IzNVJ4LT5SeFVyYikKIAkJdXNiX2ZyZWVfdXJiKCBwV2IzNVJ4LT5SeFVyYiApOwogCSNpZmRlZiBfUEVfUlhfRFVNUF8KLQlXQkRFQlVHKCgiV2IzNVJ4X2Rlc3Ryb3kgT0tcbiIpKTsKKwlwcmludGsoIldiMzVSeF9kZXN0cm95IE9LXG4iKTsKIAkjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeF9mLmgKaW5kZXggZDk5MzA0MS4uOThhY2NlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X2YuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnhfZi5oCkBAIC03LDkgKzcsOSBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdW5zaWduZWQgY2hhcgkJV2IzNVJ4X2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQJCVdiMzVSeF9kZXN0cm95KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkCQlXYjM1Unhfc3RvcCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordW5zaWduZWQgY2hhcgkJV2IzNVJ4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQJCVdiMzVSeF9kZXN0cm95KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkCQlXYjM1Unhfc3RvcCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwogdm9pZAkJV2IzNVJ4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnhfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X3MuaAppbmRleCBmMTgzNTBiLi40YjAzMjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnhfcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeF9zLmgKQEAgLTE1LDggKzE1LDcgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBJbnRlcm5hbCB2YXJpYWJsZSBmb3IgbW9kdWxlCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdHlwZWRlZiBzdHJ1Y3QgX1dCMzVSWAoteworc3RydWN0IHdiMzVfcnggewogCXUzMgkJCUJ5dGVSZWNlaXZlZDsvLyBGb3IgY2FsY3VsYXRpbmcgdGhyb3VnaHB1dCBvZiBCdWxrSW4KIAlhdG9taWNfdAkJUnhGaXJlQ291bnRlcjsvLyBEb2VzIFdiMzVSeCBtb2R1bGUgZmlyZT8KIApAQCAtNDIsNyArNDEsNCBAQAogCiAJaW50CQlFUDNWTV9zdGF0dXM7CiAJdTggKglwRFJ4OwotCi19IFdCMzVSWCwgKlBXQjM1Ulg7Ci0KLQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKaW5kZXggYjliNDQ1Ni4uMWU0MTY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlICJzeXNkZWYuaCIKIAogdW5zaWduZWQgY2hhcgotV2IzNVR4X2dldF90eF9idWZmZXIocGh3X2RhdGFfdCBwSHdEYXRhLCB1OCAqKnBCdWZmZXIpCitXYjM1VHhfZ2V0X3R4X2J1ZmZlcihzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4ICoqcEJ1ZmZlcikKIHsKLQlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCXN0cnVjdCB3YjM1X3R4ICpwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKIAogCSpwQnVmZmVyID0gcFdiMzVUeC0+VHhCdWZmZXJbMF07CiAJcmV0dXJuIHRydWU7CkBAIC0yOCw4ICsyOCw4IEBACiBzdGF0aWMgdm9pZCBXYjM1VHhfY29tcGxldGUoc3RydWN0IHVyYiAqIHBVcmIpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyID0gcFVyYi0+Y29udGV4dDsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKLQlQV0IzNVRYCQlwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAJUE1EUwkJcE1kcyA9ICZhZGFwdGVyLT5NZHM7CiAKIAlwcmludGsoIndiMzU6IHR4IGNvbXBsZXRlXG4iKTsKQEAgLTY0LDggKzY0LDggQEAKIAogc3RhdGljIHZvaWQgV2IzNVR4KHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlcikKIHsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKLQlQV0IzNVRYCQlwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAJdTgJCSpwVHhCdWZmZXJBZGRyZXNzOwogCVBNRFMJCXBNZHMgPSAmYWRhcHRlci0+TWRzOwogCXN0cnVjdCB1cmIgKglwVXJiID0gKHN0cnVjdCB1cmIgKilwV2IzNVR4LT5UeDRVcmI7CkBAIC0xMTUsOCArMTE1LDggQEAKIAogdm9pZCBXYjM1VHhfc3RhcnQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKQogewotCXBod19kYXRhX3QgcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCiAJLy8gQWxsb3cgb25seSBvbmUgdGhyZWFkIHRvIHJ1biBpbnRvIGZ1bmN0aW9uCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwV2IzNVR4LT5UeEZpcmVDb3VudGVyKSA9PSAxKSB7CkBAIC0xMjYsOSArMTI2LDkgQEAKIAkJYXRvbWljX2RlYygmcFdiMzVUeC0+VHhGaXJlQ291bnRlcik7CiB9CiAKLXVuc2lnbmVkIGNoYXIgV2IzNVR4X2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKQordW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAlwV2IzNVR4LT5UeDRVcmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmICghcFdiMzVUeC0+VHg0VXJiKQpAQCAtMTQ1LDI5ICsxNDUsMjkgQEAKIH0KIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXZvaWQgV2IzNVR4X3N0b3AocGh3X2RhdGFfdCBwSHdEYXRhKQordm9pZCBXYjM1VHhfc3RvcChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAkvLyBUcnlpbmcgdG8gY2FuY2VsaW5nIHRoZSBUcnAgb2YgRVAyCiAJaWYgKHBXYjM1VHgtPkVQMnZtX3N0YXRlID09IFZNX1JVTk5JTkcpCiAJCXVzYl91bmxpbmtfdXJiKCBwV2IzNVR4LT5UeDJVcmIgKTsgLy8gT25seSB1c2UgdW5saW5rLCBsZXQgV2IzNVR4X2Rlc3Ryb3QgdG8gZnJlZSB0aGVtCiAJI2lmZGVmIF9QRV9UWF9EVU1QXwotCVdCREVCVUcoKCJFUDIgVHggc3RvcFxuIikpOworCXByaW50aygiRVAyIFR4IHN0b3BcbiIpOwogCSNlbmRpZgogCiAJLy8gVHJ5aW5nIHRvIGNhbmNlbGluZyB0aGUgSXJwIG9mIEVQNAogCWlmIChwV2IzNVR4LT5FUDR2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKQogCQl1c2JfdW5saW5rX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVUeF9kZXN0cm90IHRvIGZyZWUgdGhlbQogCSNpZmRlZiBfUEVfVFhfRFVNUF8KLQlXQkRFQlVHKCgiRVA0IFR4IHN0b3BcbiIpKTsKKwlwcmludGsoIkVQNCBUeCBzdG9wXG4iKTsKIAkjZW5kaWYKIH0KIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXZvaWQgV2IzNVR4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQordm9pZCBXYjM1VHhfZGVzdHJveShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAkvLyBXYWl0IGZvciBWTSBzdG9wCiAJZG8gewpAQCAtMTgyLDE0ICsxODIsMTQgQEAKIAkJdXNiX2ZyZWVfdXJiKCBwV2IzNVR4LT5UeDJVcmIgKTsKIAogCSNpZmRlZiBfUEVfVFhfRFVNUF8KLQlXQkRFQlVHKCgiV2IzNVR4X2Rlc3Ryb3kgT0tcbiIpKTsKKwlwcmludGsoIldiMzVUeF9kZXN0cm95IE9LXG4iKTsKIAkjZW5kaWYKIH0KIAogdm9pZCBXYjM1VHhfQ3VycmVudFRpbWUoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCB1MzIgVGltZUNvdW50KQogewotCXBod19kYXRhX3QgcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCXVuc2lnbmVkIGNoYXIgVHJpZ2dlciA9IGZhbHNlOwogCiAJaWYgKHBXYjM1VHgtPlR4VGltZXIgPiBUaW1lQ291bnQpCkBAIC0yMDgsOSArMjA4LDkgQEAKIHN0YXRpYyB2b2lkIFdiMzVUeF9FUDJWTV9jb21wbGV0ZShzdHJ1Y3QgdXJiICogcFVyYikKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIgPSBwVXJiLT5jb250ZXh0OwotCXBod19kYXRhX3QJcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOworCXN0cnVjdCBod19kYXRhICoJcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwogCVQwMl9ERVNDUklQVE9SCVQwMiwgVFNUQVRVUzsKLQlQV0IzNVRYCQlwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAJdTMyICoJCXBsdG1wID0gKHUzMiAqKXBXYjM1VHgtPkVQMl9idWY7CiAJdTMyCQlpOwogCXUxNgkJSW50ZXJydXB0SW5MZW5ndGg7CkBAIC0yMjksNyArMjI5LDcgQEAKIAogCS8vVGhlIFVyYiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQKIAlpZiAocFdiMzVUeC0+RVAyVk1fc3RhdHVzICE9IDApIHsKLQkJV0JERUJVRygoIkVQMiBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpKTsKKwkJcHJpbnRrKCJFUDIgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKTsKIAkJcFdiMzVUeC0+RVAydm1fc3RhdGU9IFZNX1NUT1A7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMjU2LDggKzI1Niw4IEBACiAKIHN0YXRpYyB2b2lkIFdiMzVUeF9FUDJWTShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpCiB7Ci0JcGh3X2RhdGFfdAlwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAJc3RydWN0IHVyYiAqCXBVcmIgPSAoc3RydWN0IHVyYiAqKXBXYjM1VHgtPlR4MlVyYjsKIAl1MzIgKglwbHRtcCA9ICh1MzIgKilwV2IzNVR4LT5FUDJfYnVmOwogCWludAkJcmV0djsKQEAgLTI3OSw3ICsyNzksNyBAQAogCiAJaWYgKHJldHYgPCAwKSB7CiAJCSNpZmRlZiBfUEVfVFhfRFVNUF8KLQkJV0JERUJVRygoIkVQMiBUeCBJcnAgc2VuZGluZyBlcnJvclxuIikpOworCQlwcmludGsoIkVQMiBUeCBJcnAgc2VuZGluZyBlcnJvclxuIik7CiAJCSNlbmRpZgogCQlnb3RvIGVycm9yOwogCX0KQEAgLTI5Miw4ICsyOTIsOCBAQAogCiB2b2lkIFdiMzVUeF9FUDJWTV9zdGFydChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpCiB7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gZnVuY3Rpb24KIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQpID09IDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHhfZi5oCmluZGV4IDQyMjJmYTguLmE3YWY5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9mLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X2YuaApAQCAtNywxNCArNywxNCBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbCgJIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBXYjM1VHhfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdW5zaWduZWQgY2hhciBXYjM1VHhfZ2V0X3R4X2J1ZmZlciggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICoqcEJ1ZmZlciApOwordW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbCgJIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBXYjM1VHhfZGVzdHJveSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordW5zaWduZWQgY2hhciBXYjM1VHhfZ2V0X3R4X2J1ZmZlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICoqcEJ1ZmZlciApOwogCiB2b2lkIFdiMzVUeF9FUDJWTV9zdGFydChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpOwogCiB2b2lkIFdiMzVUeF9zdGFydChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpOwotdm9pZCBXYjM1VHhfc3RvcCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfc3RvcCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwogCiB2b2lkIFdiMzVUeF9DdXJyZW50VGltZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsICB1MzIgVGltZUNvdW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9zLmgKaW5kZXggMzk2MDI3Ni4uZjcwZjQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHhfcy5oCkBAIC0xOCw4ICsxOCw3IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKLXR5cGVkZWYgc3RydWN0IF9XQjM1VFgKLXsKK3N0cnVjdCB3YjM1X3R4IHsKIAkvLyBGb3IgVHggYnVmZmVyCiAJdTgJVHhCdWZmZXJbIE1BWF9VU0JfVFhfQlVGRkVSX05VTUJFUiBdWyBNQVhfVVNCX1RYX0JVRkZFUiBdOwogCkBAIC00Myw3ICs0Miw2IEBACiAKIAl1MzIJVHhGaWxsQ291bnQ7IC8vIDIwMDYwOTI4CiAJdTMyCVR4VGltZXI7IC8vIDIwMDYwOTI4IEFkZCBpZiBzZW5kaW5nIHBhY2tldCBub3QgZ3JlYXQgdGhhbiAxMwotCi19IFdCMzVUWCwgKlBXQjM1VFg7Cit9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbC5jCmluZGV4IDhhOWQyMWMuLmM5ODVhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWwuYwpAQCAtMSwxNCArMSwxNCBAQAotI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgInN5c2RlZi5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKICNpbmNsdWRlICJ3YmxpbnV4X2YuaCIKIAotdm9pZCBoYWxfc2V0X2V0aGVybmV0X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgdTggKmN1cnJlbnRfYWRkcmVzcyApCit2b2lkIGhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCAqY3VycmVudF9hZGRyZXNzICkKIHsKIAl1MzIgbHRtcFsyXTsKIAogCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKIAotCW1lbWNweSggcEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MsIGN1cnJlbnRfYWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTICk7CisJbWVtY3B5KCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgY3VycmVudF9hZGRyZXNzLCBFVEhfQUxFTiApOwogCiAJbHRtcFswXT0gY3B1X3RvX2xlMzIoICoodTMyICopcEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MgKTsKIAlsdG1wWzFdPSBjcHVfdG9fbGUzMiggKih1MzIgKikocEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MgKyA0KSApICYgMHhmZmZmOwpAQCAtMTYsNyArMTYsNyBAQAogCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwM2U4LCBsdG1wLCAyLCBBVVRPX0lOQ1JFTUVOVCApOwogfQogCi12b2lkIGhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgdTggKnBldGhlcm5ldF9hZGRyZXNzICkKK3ZvaWQgaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyggc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCAqcGV0aGVybmV0X2FkZHJlc3MgKQogewogCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKIApAQCAtMjYsNyArMjYsNyBAQAogc3RhdGljIHZvaWQgaGFsX2xlZF9jb250cm9sKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIgPSAoc3RydWN0IHdic29mdF9wcml2ICopIGRhdGE7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMglMRURTZXQgPSAocEh3RGF0YS0+U29mdHdhcmVTZXQgJiBIQUxfTEVEX1NFVF9NQVNLKSA+PiBIQUxfTEVEX1NFVF9TSElGVDsKIAl1OAlMRURncmF5WzIwXSA9IHsgMCwzLDQsNiw4LDEwLDExLDEyLDEzLDE0LDE1LDE0LDEzLDEyLDExLDEwLDgsNiw0LDIgfTsKQEAgLTMxMSw3ICszMTEsNyBAQAogdTggaGFsX2luaXRfaGFyZHdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CiAJdTE2IFNvZnR3YXJlU2V0OwogCiAJLy8gSW5pdGlhbCB0aGUgdmFyaWFibGUKQEAgLTM1Niw3ICszNTYsNyBAQAogfQogCiAKLXZvaWQgaGFsX2hhbHQocGh3X2RhdGFfdCBwSHdEYXRhLCB2b2lkICpwcGFfZGF0YSkKK3ZvaWQgaGFsX2hhbHQoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB2b2lkICpwcGFfZGF0YSkKIHsKIAlzd2l0Y2goIHBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSApCiAJewpAQCAtMzcwLDcgKzM3MCw3IEBACiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICkKK3ZvaWQgaGFsX3NldF9iZWFjb25fcGVyaW9kKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IGJlYWNvbl9wZXJpb2QgKQogewogCXUzMgl0bXA7CiAKQEAgLTM4Myw3ICszODMsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApCitzdGF0aWMgdm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtMzk2LDcgKzM5Niw3IEBACiAJcEh3RGF0YS0+Q2hhbm5lbCA9IGNoYW5uZWwuQ2hhbk5vOwogCXBId0RhdGEtPmJhbmQgPSBjaGFubmVsLmJhbmQ7CiAJI2lmZGVmIF9QRV9TVEFURV9EVU1QXwotCVdCREVCVUcoKCJTZXQgY2hhbm5lbCBpcyAlZCwgYmFuZCA9JWRcbiIsIHBId0RhdGEtPkNoYW5uZWwsIHBId0RhdGEtPmJhbmQpKTsKKwlwcmludGsoIlNldCBjaGFubmVsIGlzICVkLCBiYW5kID0lZFxuIiwgcEh3RGF0YS0+Q2hhbm5lbCwgcEh3RGF0YS0+YmFuZCk7CiAJI2VuZGlmCiAJcmVnLT5NMjhfTWFjQ29udHJvbCAmPSB+MHhmZjsgLy8gQ2xlYW4gY2hhbm5lbCBpbmZvcm1hdGlvbiBmaWVsZAogCXJlZy0+TTI4X01hY0NvbnRyb2wgfD0gY2hhbm5lbC5DaGFuTm87CkBAIC00MDQsMTIgKzQwNCwxMiBAQAogCQkJCQkoczggKikmY2hhbm5lbCwgc2l6ZW9mKENoYW5JbmZvKSk7CiB9CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQordm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQogewogCWhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KCBwSHdEYXRhLCBjaGFubmVsICk7CiB9CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBoYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKQordm9pZCBoYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNDI0LDcgKzQyNCw3IEBACiB9CiAKIC8vZm9yIHdlcCBrZXkgZXJyb3IgZGV0ZWN0aW9uLCB3ZSBuZWVkIHRvIGFjY2VwdCBicm9hZGNhc3QgcGFja2V0cyB0byBiZSByZWNlaXZlZCB0ZW1wb3JhcnkuCi12b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUpCit2b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUpCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC00MzgsNyArNDM4LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICkKK3ZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggZW5hYmxlICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTQ0OSw3ICs0NDksNyBAQAogCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcmVnLT5NMDBfTWFjQ29udHJvbCApOwogfQogCi12b2lkIGhhbF9zZXRfYWNjZXB0X2JlYWNvbiggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApCit2b2lkIGhhbF9zZXRfYWNjZXB0X2JlYWNvbiggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IGVuYWJsZSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC00NjcsNyArNDY3LDcgQEAKIH0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgaGFsX3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKQordm9pZCBoYWxfc3RvcCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC00ODEsMTAgKzQ4MSwxMCBAQAogCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDQwMCwgcmVnLT5EMDBfRG1hQ29udHJvbCApOwogfQogCi11bnNpZ25lZCBjaGFyIGhhbF9pZGxlKHBod19kYXRhX3QgcEh3RGF0YSkKK3Vuc2lnbmVkIGNoYXIgaGFsX2lkbGUoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKLQlQV0JVU0IJcFdiVXNiID0gJnBId0RhdGEtPldiVXNiOworCXN0cnVjdCB3Yl91c2IgKnBXYlVzYiA9ICZwSHdEYXRhLT5XYlVzYjsKIAogCWlmKCAhcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgJiYgKCBwV2JVc2ItPkRldGVjdENvdW50IHx8IHJlZy0+RVAwdm1fc3RhdGUhPVZNX1NUT1AgKSApCiAJCXJldHVybiBmYWxzZTsKQEAgLTQ5MiwxMiArNDkyLDEyIEBACiAJcmV0dXJuIHRydWU7CiB9CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBoYWxfc2V0X3BoeV90eXBlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUGh5VHlwZSApCit2b2lkIGhhbF9zZXRfcGh5X3R5cGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBQaHlUeXBlICkKIHsKIAlwSHdEYXRhLT5waHlfdHlwZSA9IFBoeVR5cGU7CiB9CiAKLXZvaWQgaGFsX3NldF9yYWRpb19tb2RlKCBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHJhZGlvX29mZikKK3ZvaWQgaGFsX3NldF9yYWRpb19tb2RlKCBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHJhZGlvX29mZikKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTUxNiw3ICs1MTYsNyBAQAogCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgyNCwgcmVnLT5NMjRfTWFjQ29udHJvbCApOwogfQogCi11OCBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3U4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNTI4LDcgKzUyOCw3IEBACiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8wIDogcmFkaW8gb247IDE6IHJhZGlvIG9mZgotdTggaGFsX2dldF9od19yYWRpb19vZmYoICBwaHdfZGF0YV90IHBId0RhdGEgKQordTggaGFsX2dldF9od19yYWRpb19vZmYoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNTQ1LDE0ICs1NDUsMTQgQEAKIAl9CiB9CiAKLXVuc2lnbmVkIGNoYXIgaGFsX2dldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiAqIHBWYWx1ZSApCit1bnNpZ25lZCBjaGFyIGhhbF9nZXRfZHh4X3JlZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgKiBwVmFsdWUgKQogewogCWlmKCBudW1iZXIgPCAweDEwMDAgKQogCQludW1iZXIgKz0gMHgxMDAwOwogCXJldHVybiBXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCBudW1iZXIsIHBWYWx1ZSApOwogfQogCi11bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgdmFsdWUgKQordW5zaWduZWQgY2hhciBoYWxfc2V0X2R4eF9yZWcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyIHZhbHVlICkKIHsKIAl1bnNpZ25lZCBjaGFyCXJldDsKIApAQCAtNTYyLDcgKzU2Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBoYWxfc2V0X3JmX3Bvd2VyKHBod19kYXRhX3QgcEh3RGF0YSwgdTggUG93ZXJJbmRleCkKK3ZvaWQgaGFsX3NldF9yZl9wb3dlcihzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IFBvd2VySW5kZXgpCiB7CiAJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmgKaW5kZXggZTgwNWY0MC4uZWZjYWVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX2YuaApAQCAtMTAsNTYgKzEwLDU2IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIGhhbF9yZW1vdmVfbWFwcGluZ19rZXkoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcG1hY19hZGRyICk7Ci12b2lkIGhhbF9yZW1vdmVfZGVmYXVsdF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgaW5kZXggKTsKLXVuc2lnbmVkIGNoYXIgaGFsX3NldF9tYXBwaW5nX2tleSggIHBod19kYXRhX3QgYWRhcHRlciwgIHU4ICpwbWFjX2FkZHIsICB1OCBudWxsX2tleSwgIHU4IHdlcF9vbiwgIHU4ICpwdHhfdHNjLCAgdTggKnByeF90c2MsICB1OCBrZXlfdHlwZSwgIHU4IGtleV9sZW4sICB1OCAqcGtleV9kYXRhICk7Ci11bnNpZ25lZCBjaGFyIGhhbF9zZXRfZGVmYXVsdF9rZXkoICBwaHdfZGF0YV90IGFkYXB0ZXIsICB1OCBpbmRleCwgIHU4IG51bGxfa2V5LCAgdTggd2VwX29uLCAgdTggKnB0eF90c2MsICB1OCAqcHJ4X3RzYywgIHU4IGtleV90eXBlLCAgdTgga2V5X2xlbiwgIHU4ICpwa2V5X2RhdGEgKTsKLXZvaWQgaGFsX2NsZWFyX2FsbF9kZWZhdWx0X2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBoYWxfY2xlYXJfYWxsX2dyb3VwX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBoYWxfY2xlYXJfYWxsX21hcHBpbmdfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIGhhbF9jbGVhcl9hbGxfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIGhhbF9nZXRfZXRoZXJuZXRfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpjdXJyZW50X2FkZHJlc3MgKTsKLXZvaWQgaGFsX3NldF9ldGhlcm5ldF9hZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKmN1cnJlbnRfYWRkcmVzcyApOwotdm9pZCBoYWxfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKnBldGhlcm5ldF9hZGRyZXNzICk7Cit2b2lkIGhhbF9yZW1vdmVfbWFwcGluZ19rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqcG1hY19hZGRyICk7Cit2b2lkIGhhbF9yZW1vdmVfZGVmYXVsdF9rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MzIgaW5kZXggKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9tYXBwaW5nX2tleSggIHN0cnVjdCBod19kYXRhICogYWRhcHRlciwgIHU4ICpwbWFjX2FkZHIsICB1OCBudWxsX2tleSwgIHU4IHdlcF9vbiwgIHU4ICpwdHhfdHNjLCAgdTggKnByeF90c2MsICB1OCBrZXlfdHlwZSwgIHU4IGtleV9sZW4sICB1OCAqcGtleV9kYXRhICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfZGVmYXVsdF9rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIGFkYXB0ZXIsICB1OCBpbmRleCwgIHU4IG51bGxfa2V5LCAgdTggd2VwX29uLCAgdTggKnB0eF90c2MsICB1OCAqcHJ4X3RzYywgIHU4IGtleV90eXBlLCAgdTgga2V5X2xlbiwgIHU4ICpwa2V5X2RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9kZWZhdWx0X2tleSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX2dyb3VwX2tleSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX21hcHBpbmdfa2V5KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfa2V5KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIGhhbF9nZXRfZXRoZXJuZXRfYWRkcmVzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpjdXJyZW50X2FkZHJlc3MgKTsKK3ZvaWQgaGFsX3NldF9ldGhlcm5ldF9hZGRyZXNzKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggKmN1cnJlbnRfYWRkcmVzcyApOwordm9pZCBoYWxfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggKnBldGhlcm5ldF9hZGRyZXNzICk7CiB1OCBoYWxfaW5pdF9oYXJkd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIGhhbF9zZXRfcG93ZXJfc2F2ZV9tb2RlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBwb3dlcl9zYXZlLCAgdW5zaWduZWQgY2hhciB3YWtldXAsICB1bnNpZ25lZCBjaGFyIGR0aW0gKTsKLXZvaWQgaGFsX2dldF9wb3dlcl9zYXZlX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICAgdTggKnBpbl9wd3Jfc2F2ZSApOwotdm9pZCBoYWxfc2V0X3Nsb3RfdGltZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IHR5cGUgKTsKK3ZvaWQgaGFsX3NldF9wb3dlcl9zYXZlX21vZGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHBvd2VyX3NhdmUsICB1bnNpZ25lZCBjaGFyIHdha2V1cCwgIHVuc2lnbmVkIGNoYXIgZHRpbSApOwordm9pZCBoYWxfZ2V0X3Bvd2VyX3NhdmVfbW9kZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgICB1OCAqcGluX3B3cl9zYXZlICk7Cit2b2lkIGhhbF9zZXRfc2xvdF90aW1lKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggdHlwZSApOwogI2RlZmluZSBoYWxfc2V0X2F0aW1fd2luZG93KCBfQSwgX0FUTSApCi12b2lkIGhhbF9zdGFydF9ic3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBtYWNfb3BfbW9kZSApOwotdm9pZCBoYWxfam9pbl9yZXF1ZXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggYnNzX3R5cGUgKTsgLy8gMDpCU1MgU1RBIDE6SUJTUyBTVEEvLwotdm9pZCBoYWxfc3RvcF9zeW5jX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBoYWxfcmVzdW1lX3N5bmNfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhKTsKLXZvaWQgaGFsX3NldF9haWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYWlkICk7Ci12b2lkIGhhbF9zZXRfYnNzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcGJzc2lkICk7Ci12b2lkIGhhbF9nZXRfYnNzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcGJzc2lkICk7Ci12b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICk7Ci12b2lkIGhhbF9zZXRfbGlzdGVuX2ludGVydmFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGxpc3Rlbl9pbnRlcnZhbCApOwotdm9pZCBoYWxfc2V0X2NhcF9pbmZvKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGNhcGFiaWxpdHlfaW5mbyApOwotdm9pZCBoYWxfc2V0X3NzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcHNzaWQsICB1OCBzc2lkX2xlbiApOwotdm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKTsKLXZvaWQgaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICk7Ci12b2lkIGhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApOwotdm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKTsKLXZvaWQgaGFsX3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgaGFsX2hhbHQoICBwaHdfZGF0YV90IHBId0RhdGEsIHZvaWQgKnBwYV9kYXRhICk7Ci12b2lkIGhhbF9zdGFydF90eDAoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgaGFsX3NldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBoeVR5cGUgKTsKK3ZvaWQgaGFsX3N0YXJ0X2JzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IG1hY19vcF9tb2RlICk7Cit2b2lkIGhhbF9qb2luX3JlcXVlc3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBic3NfdHlwZSApOyAvLyAwOkJTUyBTVEEgMTpJQlNTIFNUQS8vCit2b2lkIGhhbF9zdG9wX3N5bmNfYnNzKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIGhhbF9yZXN1bWVfc3luY19ic3MoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpOwordm9pZCBoYWxfc2V0X2FpZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBhaWQgKTsKK3ZvaWQgaGFsX3NldF9ic3NpZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpwYnNzaWQgKTsKK3ZvaWQgaGFsX2dldF9ic3NpZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpwYnNzaWQgKTsKK3ZvaWQgaGFsX3NldF9iZWFjb25fcGVyaW9kKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IGJlYWNvbl9wZXJpb2QgKTsKK3ZvaWQgaGFsX3NldF9saXN0ZW5faW50ZXJ2YWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgbGlzdGVuX2ludGVydmFsICk7Cit2b2lkIGhhbF9zZXRfY2FwX2luZm8oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgY2FwYWJpbGl0eV9pbmZvICk7Cit2b2lkIGhhbF9zZXRfc3NpZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpwc3NpZCwgIHU4IHNzaWRfbGVuICk7Cit2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApOwordm9pZCBoYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUgKTsKK3ZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggZW5hYmxlICk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X2JlYWNvbiggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IGVuYWJsZSApOwordm9pZCBoYWxfc3RvcCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfaGFsdCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdm9pZCAqcHBhX2RhdGEgKTsKK3ZvaWQgaGFsX3N0YXJ0X3R4MCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfc2V0X3BoeV90eXBlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggUGh5VHlwZSApOwogI2RlZmluZSBoYWxfZ2V0X2N3bWluKCBfQSApICggKF9BKS0+Y3dtaW4gKQotdm9pZCBoYWxfc2V0X2N3bWF4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGN3aW5fbWF4ICk7Cit2b2lkIGhhbF9zZXRfY3dtYXgoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgY3dpbl9tYXggKTsKICNkZWZpbmUgaGFsX2dldF9jd21heCggX0EgKSAoIChfQSktPmN3bWF4ICkKLXZvaWQgaGFsX3NldF9yc25fd3BhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyICogUlNOX0lFX0JpdG1hcCAsIHUzMiAqIFJTTl9PVUlfdHlwZSAsIHVuc2lnbmVkIGNoYXIgYkRlc2lyZWRBdXRoTW9kZSk7Ci12b2lkIGhhbF9zZXRfY29ubmVjdF9pbmZvKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBib0Nvbm5lY3QgKTsKLXU4IGhhbF9nZXRfZXN0X3NxMyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IENvdW50ICk7Ci12b2lkIGhhbF9zZXRfcmZfcG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7IC8vIDIwMDYwNjIxIE1vZGlmeQotdm9pZCBoYWxfc2V0X3JhZGlvX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIGJvVmFsdWUpOwotdm9pZCBoYWxfZGVzY3JpcHRvcl9pbmRpY2F0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBERVNDUklQVE9SIHBEZXMgKTsKLXU4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXUzMiBoYWxfZ2V0X2Jzc19wa19jbnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3NldF9yc25fd3BhKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTMyICogUlNOX0lFX0JpdG1hcCAsIHUzMiAqIFJTTl9PVUlfdHlwZSAsIHVuc2lnbmVkIGNoYXIgYkRlc2lyZWRBdXRoTW9kZSk7Cit2b2lkIGhhbF9zZXRfY29ubmVjdF9pbmZvKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBib0Nvbm5lY3QgKTsKK3U4IGhhbF9nZXRfZXN0X3NxMyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IENvdW50ICk7Cit2b2lkIGhhbF9zZXRfcmZfcG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7IC8vIDIwMDYwNjIxIE1vZGlmeQordm9pZCBoYWxfc2V0X3JhZGlvX21vZGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIGJvVmFsdWUpOwordm9pZCBoYWxfZGVzY3JpcHRvcl9pbmRpY2F0ZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3U4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3UzMiBoYWxfZ2V0X2Jzc19wa19jbnQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKICNkZWZpbmUgaGFsX2dldF9yZWdpb25fZnJvbV9FRVBST00oIF9BICkgKCAoX0EpLT5yZWcuRUVQUk9NUmVnaW9uICkKLXZvaWQgaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMJCSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzCQkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUpOwogI2RlZmluZSBoYWxfZ2V0X3R4X2J1ZmZlciggX0EsIF9CICkgV2IzNVR4X2dldF90eF9idWZmZXIoIF9BLCBfQiApCi11OCBoYWxfZ2V0X2h3X3JhZGlvX29mZgkJCSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordTggaGFsX2dldF9od19yYWRpb19vZmYJCQkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKICNkZWZpbmUgaGFsX3NvZnR3YXJlX3NldCggX0EgKQkJKF9BLT5Tb2Z0d2FyZVNldCkKICNkZWZpbmUgaGFsX2RyaXZlcl9pbml0X09LKCBfQSApCShfQS0+SXNJbml0T0spCiAjZGVmaW5lIGhhbF9yc3NpX2JvdW5kYXJ5X2hpZ2goIF9BICkgKF9BLT5SU1NJX2hpZ2gpCkBAIC02OCw4ICs2OCw4IEBACiAKICNkZWZpbmUgUEhZX0RFQlVHKCBtc2csIGFyZ3MuLi4gKQogCi11bnNpZ25lZCBjaGFyIGhhbF9nZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgKiBwVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgaGFsX3NldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiB2YWx1ZSApOwordW5zaWduZWQgY2hhciBoYWxfZ2V0X2R4eF9yZWcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyICogcFZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgdmFsdWUgKTsKICNkZWZpbmUgaGFsX2dldF90aW1lX2NvdW50KCBfUCApCShfUC0+dGltZV9jb3VudC8xMCkJLy8gcmV0dXJuIDEwMG1zIGNvdW50CiAjZGVmaW5lIGhhbF9kZXRlY3RfZXJyb3IoIF9QICkJCShfUC0+V2JVc2IuRGV0ZWN0Q291bnQpCiAKQEAgLTgyLDcgKzgyLDcgQEAKICNkZWZpbmUgaGFsX2dldF9jbGVhcl9pbnRlcnJ1cHQoX0EpCiAjZGVmaW5lIGhhbF9pYnNzX2Rpc2Nvbm5lY3QoX0EpIGhhbF9zdG9wX3N5bmNfYnNzKF9BKQogI2RlZmluZSBoYWxfam9pbl9yZXF1ZXN0X3N0b3AoX0EpCi11bnNpZ25lZCBjaGFyCWhhbF9pZGxlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit1bnNpZ25lZCBjaGFyCWhhbF9pZGxlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiAjZGVmaW5lIGh3X2dldF9jeHhfcmVnKCBfQSwgX0IsIF9DICkKICNkZWZpbmUgaHdfc2V0X2N4eF9yZWcoIF9BLCBfQiwgX0MgKQogI2RlZmluZSBod19nZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApCWhhbF9nZXRfZHh4X3JlZyggX0EsIF9CLCAodTMyICopX0MgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfcy5oCmluZGV4IDI3NmQyYjEuLmFjZmViZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmgKQEAgLTIsOCArMiw3IEBACiAjZGVmaW5lIF9fV0lOQk9ORF9XQkhBTF9TX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPiAvKiBmb3IgRVRIX0FMRU4gKi8KIAogLy9bMjAwNDA3MjIgV0tdCiAjZGVmaW5lIEhBTF9MRURfU0VUX01BU0sJCTB4MDAxYwkvLzIwMDYwOTAxIEV4dGVuZApAQCAtODYsMTkgKzg1LDYgQEAKIAlWTV9DT01QTEVURUQKIH07CiAKLS8vIEJlIHVzZWQgZm9yIDgwMi4xMSBtYWMgaGVhZGVyCi10eXBlZGVmIHN0cnVjdCBfTUFDX0ZSQU1FX0NPTlRST0wgewotCXU4CW1hY19mcmFtZV9pbmZvOyAvLyB0aGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHByb3RvdmwgdmVyc2lvbiwgdHlwZSBhbmQgc3VidHlwZQotCXU4CXRvX2RzOjE7Ci0JdTgJZnJvbV9kczoxOwotCXU4CW1vcmVfZnJhZzoxOwotCXU4CXJldHJ5OjE7Ci0JdTgJcHdyX21ndDoxOwotCXU4CW1vcmVfZGF0YToxOwotCXU4CVdFUDoxOwotCXU4CW9yZGVyOjE7Ci19IE1BQ19GUkFNRV9DT05UUk9MLCAqUE1BQ19GUkFNRV9DT05UUk9MOwotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBOb3JtYWwgS2V5IHRhYmxlIGZvcm1hdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA2LDI4ICs5Miw2IEBACiAjZGVmaW5lIE1BWF9LRVlfVEFCTEUJCQkJMjQJLy8gMjQgZW50cnkgZm9yIHN0b3Jpbmcga2V5IGRhdGEKICNkZWZpbmUgR1JPVVBfS0VZX1NUQVJUX0lOREVYCQk0CiAjZGVmaW5lIE1BUFBJTkdfS0VZX1NUQVJUX0lOREVYCQk4Ci10eXBlZGVmIHN0cnVjdCBfS0VZX1RBQkxFCi17Ci0JdTMyCURXMF9WYWxpZDoxOwotCXUzMglEVzBfTnVsbEtleToxOwotCXUzMglEVzBfU2VjdXJpdHlfTW9kZToyOy8vMDpXRVAgNDAgYml0IDE6V0VQIDEwNCBiaXQgMjpUS0lQIDEyOCBiaXQgMzpDQ01QIDEyOCBiaXQKLQl1MzIJRFcwX1dFUE9OOjE7Ci0JdTMyCURXMF9SRVNFUlZFRDoxMTsKLQl1MzIJRFcwX0FkZHJlc3MxOjE2OwotCi0JdTMyCURXMV9BZGRyZXNzMjsKLQotCXUzMglEVzJfUnhTZXF1ZW5jZUNvdW50MTsKLQotCXUzMglEVzNfUnhTZXF1ZW5jZUNvdW50MjoxNjsKLQl1MzIJRFczX1JFU0VSVkVEOjE2OwotCi0JdTMyCURXNF9UeFNlcXVlbmNlQ291bnQxOwotCi0JdTMyCURXNV9UeFNlcXVlbmNlQ291bnQyOjE2OwotCXUzMglEVzVfUkVTRVJWRUQ6MTY7Ci0KLX0gS0VZX1RBQkxFLCAqUEtFWV9UQUJMRTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gCQkJIERlc2NyaXB0b3IKQEAgLTQxMyw4ICszNzcsOCBAQAogI2RlZmluZSBNQVhfUkZfUEFSQU1FVEVSCTMyCiAKIHR5cGVkZWYgc3RydWN0IF9UWFZHQV9GT1JfNTAgewotCXU4CUNoYW5ObzsKLQl1OAlUeFZnYVZhbHVlOworCXU4ICAgICAgQ2hhbk5vOworCXU4ICAgICAgVHhWZ2FWYWx1ZTsKIH0gVFhWR0FfRk9SXzUwOwogCiAKQEAgLTQyNywxMCArMzkxLDggQEAKICNpbmNsdWRlICJ3YjM1dHhfcy5oIgogI2luY2x1ZGUgIndiMzVyeF9zLmgiCiAKLQogLy8gRm9yIEhhbCB1c2luZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXR5cGVkZWYgc3RydWN0IF9IV19EQVRBX1QKLXsKK3N0cnVjdCBod19kYXRhIHsKIAkvLyBGb3IgY29tcGF0aWJsZSB3aXRoIDMzCiAJdTMyCXJldmlzaW9uOwogCXUzMglCQjNjX2NhbDsgLy8gVGhlIHZhbHVlIGZvciBUeCBjYWxpYnJhdGlvbiBjb21lcyBmcm9tIEVFUFJPTQpAQCAtNDUyLDggKzQxNCw4IEBACiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCS8vIERlZmluaXRpb24gZm9yIE1BQyBhZGRyZXNzCiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCXU4CQlQZXJtYW5lbnRNYWNBZGRyZXNzW0VUSF9MRU5HVEhfT0ZfQUREUkVTUyArIDJdOyAvLyBUaGUgRW50aGVybmV0IGFkZHIgdGhhdCBhcmUgc3RvcmVkIGluIEVFUFJPTS4gICsgMiB0byA4LWJ5dGUgYWxpZ25tZW50Ci0JdTgJCUN1cnJlbnRNYWNBZGRyZXNzW0VUSF9MRU5HVEhfT0ZfQUREUkVTUyArIDJdOyAvLyBUaGUgRW50aGVybmV0IGFkZHIgdGhhdCBhcmUgaW4gdXNlZC4gICsgMiB0byA4LWJ5dGUgYWxpZ25tZW50CisJdTgJCVBlcm1hbmVudE1hY0FkZHJlc3NbRVRIX0FMRU4gKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIHN0b3JlZCBpbiBFRVBST00uICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCXU4CQlDdXJyZW50TWFjQWRkcmVzc1tFVEhfQUxFTiArIDJdOyAvLyBUaGUgRW50aGVybmV0IGFkZHIgdGhhdCBhcmUgaW4gdXNlZC4gICsgMiB0byA4LWJ5dGUgYWxpZ25tZW50CiAKIAkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCS8vIERlZmluaXRpb24gZm9yIDgwMi4xMQpAQCAtNTAyLDEwICs0NjQsMTAgQEAKIAkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCS8vIFZhcmlhYmxlIGZvciBlYWNoIG1vZHVsZQogCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JV0JVU0IJCVdiVXNiOyAvLyBOZWVkIFdiVXNiLmgKKwlzdHJ1Y3Qgd2JfdXNiCVdiVXNiOyAvLyBOZWVkIFdiVXNiLmgKIAlzdHJ1Y3Qgd2IzNV9yZWcJcmVnOyAvLyBOZWVkIFdiMzVSZWcuaAotCVdCMzVUWAkJV2IzNVR4OyAvLyBOZWVkIFdiMzVUeC5oCi0JV0IzNVJYCQlXYjM1Ung7IC8vIE5lZWQgV2IzNVJ4LmgKKwlzdHJ1Y3Qgd2IzNV90eAlXYjM1VHg7IC8vIE5lZWQgV2IzNVR4LmgKKwlzdHJ1Y3Qgd2IzNV9yeAlXYjM1Ung7IC8vIE5lZWQgV2IzNVJ4LmgKIAogCXN0cnVjdCB0aW1lcl9saXN0CUxFRFRpbWVyOy8vIEZvciBMRUQKIApAQCAtNTc4LDM1ICs1NDAsNiBAQAogCS8vIDIwMDYwODI4LjEgZm9yIGF2b2lkIEFQIGRpc2Nvbm5lY3QKIAl1MzIJCU51bGxQYWNrZXRDb3VudDsKIAotfSBod19kYXRhX3QsICpwaHdfZGF0YV90OwotCi0vLyBUaGUgbWFwcGluZyBvZiBSeCBhbmQgVHggZGVzY3JpcHRvciBmaWVsZAotdHlwZWRlZiBzdHJ1Y3QgX0hBTF9SQVRFCi17Ci0JLy8gRFNTUwotCXUzMglSRVNFUlZFRF8wOwotCXUzMiAgIE51bVJhdGUyTVM7Ci0JdTMyICAgTnVtUmF0ZTU1TVM7Ci0JdTMyICAgTnVtUmF0ZTExTVM7Ci0KLQl1MzIJUkVTRVJWRURfMVs0XTsKLQotCXUzMiAgIE51bVJhdGUxTTsKLQl1MzIgICBOdW1SYXRlMk1MOwotCXUzMiAgIE51bVJhdGU1NU1MOwotCXUzMiAgIE51bVJhdGUxMU1MOwotCi0JdTMyCVJFU0VSVkVEXzJbNF07Ci0KLQkvLyBPRkRNCi0JdTMyICAgTnVtUmF0ZTZNOwotCXUzMiAgIE51bVJhdGU5TTsKLQl1MzIgICBOdW1SYXRlMTJNOwotCXUzMiAgIE51bVJhdGUxOE07Ci0JdTMyICAgTnVtUmF0ZTI0TTsKLQl1MzIgICBOdW1SYXRlMzZNOwotCXUzMiAgIE51bVJhdGU0OE07Ci0JdTMyICAgTnVtUmF0ZTU0TTsKLX0gSEFMX1JBVEUsICpQSEFMX1JBVEU7Cit9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCmluZGV4IGY3MTZiMmUuLjljM2Y5NDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgIm1kc19mLmgiCiAjaW5jbHVkZSAibWxtZXR4cnhfZi5oIgotI2luY2x1ZGUgIm10b19mLmgiCisjaW5jbHVkZSAibXRvLmgiCiAjaW5jbHVkZSAid2JoYWxfZi5oIgogI2luY2x1ZGUgIndibGludXhfZi5oIgogCkBAIC0xNDksMTkgKzE0OSwxOSBAQAogCWhhbF9zZXRfY3VycmVudF9jaGFubmVsKCZwcml2LT5zSHdEYXRhLCBjaCk7CiAJaGFsX3NldF9iZWFjb25fcGVyaW9kKCZwcml2LT5zSHdEYXRhLCBjb25mLT5iZWFjb25faW50KTsKIC8vCWhhbF9zZXRfY2FwX2luZm8oJnByaXYtPnNId0RhdGEsID8/ICk7Ci0vLyBoYWxfc2V0X3NzaWQocGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKiBwc3NpZCwgIHU4IHNzaWRfbGVuKTsgPz8KKy8vIGhhbF9zZXRfc3NpZChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqIHBzc2lkLCAgdTggc3NpZF9sZW4pOyA/PwogCWhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCgmcHJpdi0+c0h3RGF0YSwgMSk7CiAJaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMoJnByaXYtPnNId0RhdGEsICAxKTsKIAloYWxfc2V0X2FjY2VwdF9tdWx0aWNhc3QoJnByaXYtPnNId0RhdGEsICAxKTsKIAloYWxfc2V0X2FjY2VwdF9iZWFjb24oJnByaXYtPnNId0RhdGEsICAxKTsKIAloYWxfc2V0X3JhZGlvX21vZGUoJnByaXYtPnNId0RhdGEsICAwKTsKLQkvL2hhbF9zZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IG51bWJlciApCi0JLy9oYWxfc2V0X3JmX3Bvd2VyKHBod19kYXRhX3QgcEh3RGF0YSwgdTggUG93ZXJJbmRleCkKKwkvL2hhbF9zZXRfYW50ZW5uYV9udW1iZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IG51bWJlciApCisJLy9oYWxfc2V0X3JmX3Bvd2VyKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggUG93ZXJJbmRleCkKIAogCiAvLwloYWxfc3RhcnRfYnNzKCZwcml2LT5zSHdEYXRhLCBXTEFOX0JTU1RZUEVfSU5GUkFTVFJVQ1RVUkUpOwk/PwogCi0vL3ZvaWQgaGFsX3NldF9yYXRlcyhwaHdfZGF0YV90IHBId0RhdGEsIHU4ICogcGJzc19yYXRlcywKKy8vdm9pZCBoYWxfc2V0X3JhdGVzKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggKiBwYnNzX3JhdGVzLAogLy8JCSAgIHU4IGxlbmd0aCwgdW5zaWduZWQgY2hhciBiYXNpY19yYXRlX3NldCkKIAogCXJldHVybiAwOwpAQCAtMTk5LDcgKzE5OSw3IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YjM1X2h3X2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdAlwSHdEYXRhOworCXN0cnVjdCBod19kYXRhICoJcEh3RGF0YTsKIAl1OAkJKnBNYWNBZGRyOwogCXU4CQkqcE1hY0FkZHIyOwogCXUzMgkJSW5pdFN0ZXAgPSAwOwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJLy9nZXQgY3VycmVudCBhbnRlbm5hCiAJcHJpdi0+c0xvY2FsUGFyYS5iQW50ZW5uYU5vID0gaGFsX2dldF9hbnRlbm5hX251bWJlcihwSHdEYXRhKTsKICNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQlXQkRFQlVHKCgiRHJpdmVyIGluaXQsIGFudGVubmEgbm8gPSAlZFxuIiwgcHNMT0NBTC0+YkFudGVubmFObykpOworCXByaW50aygiRHJpdmVyIGluaXQsIGFudGVubmEgbm8gPSAlZFxuIiwgcHNMT0NBTC0+YkFudGVubmFObyk7CiAjZW5kaWYKIAloYWxfZ2V0X2h3X3JhZGlvX29mZiggcEh3RGF0YSApOwogCkBAIC0zMTIsNyArMzEyLDcgQEAKIAogc3RhdGljIGludCB3YjM1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfdGFibGUpCiB7Ci0JUFdCVVNCCQlwV2JVc2I7CisJc3RydWN0IHdiX3VzYiAqcFdiVXNiOwogICAgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKIAl1MzIJbHRtcDsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJU0VUX0lFRUU4MDIxMV9ERVYoZGV2LCAmdWRldi0+ZGV2KTsKIAl7Ci0JCXBod19kYXRhX3QgcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOworCQlzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKIAkJdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsKIAkJaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyhwSHdEYXRhLCBkZXZfYWRkcik7CiAJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgZGV2X2FkZHIpOwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJLy8gVHVybiBvZmYgUnggYW5kIFR4IGhhcmR3YXJlIGFiaWxpdHkKIAloYWxfc3RvcCggJmFkYXB0ZXItPnNId0RhdGEgKTsKICNpZmRlZiBfUEVfVVNCX0lOSV9EVU1QXwotCVdCREVCVUcoKCJbdzM1dW5kXSBIYWxfc3RvcCBPLksuXG4iKSk7CisJcHJpbnRrKCJbdzM1dW5kXSBIYWxfc3RvcCBPLksuXG4iKTsKICNlbmRpZgogCW1zbGVlcCgxMDApOy8vIFdhaXRpbmcgSXJwIGNvbXBsZXRlZAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYl9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYl9zLmgKaW5kZXggMWRlOTM2MC4uMGM3ZTZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2Jfcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiX3MuaApAQCAtMTYsMjIgKzE2LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFJXX0NPTlRFWFQgLS0KLS8vCi0vLyAgVXNlZCB0byB0cmFjayBkcml2ZXItZ2VuZXJhdGVkIGlvIGlycHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIHN0cnVjdCBfUldfQ09OVEVYVAotewotCXZvaWQqCQkJcEh3RGF0YTsKLQlzdHJ1Y3QgdXJiCQkqdXJiOwotCXZvaWQqCQkJcENhbGxCYWNrRnVuY3Rpb25QYXJhbWV0ZXI7Ci19IFJXX0NPTlRFWFQsICpQUldfQ09OVEVYVDsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dCVVNCIHsKK3N0cnVjdCB3Yl91c2IgewogCXUzMglJc1VzYjIwOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXUzMglEZXRlY3RDb3VudDsKLX0gV0JVU0IsICpQV0JVU0I7Cit9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL1JFQURNRQppbmRleCA5YzEwZGJiLi4wMjhjMjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FCkBAIC00LDQgKzQsNiBAQAogCS0gTGluZGVudCBjbGVhbnVwcwogCS0gbW92ZSB0byB1c2UgdGhlIGluLWtlcm5lbCB3aXJlbGVzcyBzdGFjawogCi1QbGVhc2Ugc2VuZCBhbGwgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgb3IgY29tcGxhaW50cyBhYm91dCB0aGlzIGRyaXZlciB0byBHcmVnCitLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIGRvbid0IGJvdGhlciB0aGUgdXBzdHJlYW0gd2lyZWxlc3MKK2tlcm5lbCBkZXZlbG9wZXJzIGFib3V0IGl0LCB0aGV5IHdhbnQgbm90aGluZyB0byBkbyB3aXRoIGl0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCmluZGV4IDliNzQ2NjUuLmYzZTg3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmgKQEAgLTU2LDc1ICs1NiwzNyBAQAogI2lmbmRlZiBfSEZBMzg0eF9ICiAjZGVmaW5lIF9IRkEzODR4X0gKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorI2RlZmluZSBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oYSwgYiwgYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKIAotI2RlZmluZSBIRkEzODR4X0xFVkVMX1RPX2RCbSh2KSAgICgweDEwMCArICh2KSAqIDEwMCAvIDI1NSAtIDEwMCkKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCi0vKi0tLS0tLSBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0gTWlucyAmIE1heHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURfQUxMT0NfTEVOX01JTgkoKHUxNik0KQotI2RlZmluZQkJSEZBMzg0eF9DTURfQUxMT0NfTEVOX01BWAkoKHUxNikyNDAwKQotI2RlZmluZQkJSEZBMzg0eF9CQVBfREFUQUxFTl9NQVgJCSgodTE2KTQwOTYpCi0jZGVmaW5lCQlIRkEzODR4X0JBUF9PRkZTRVRfTUFYCQkoKHUxNik0MDk2KQogI2RlZmluZQkJSEZBMzg0eF9QT1JUSURfTUFYCQkoKHUxNik3KQogI2RlZmluZQkJSEZBMzg0eF9OVU1QT1JUU19NQVgJCSgodTE2KShIRkEzODR4X1BPUlRJRF9NQVgrMSkpCi0jZGVmaW5lCQlIRkEzODR4X1BEUl9MRU5fTUFYCQkoKHUxNik1MTIpCS8qIGluIGJ5dGVzLCBmcm9tIEVLICovCi0jZGVmaW5lCQlIRkEzODR4X1BEQV9SRUNTX01BWAkJKCh1MTYpMjAwKQkvKiBhIGd1ZXNzICovCi0jZGVmaW5lCQlIRkEzODR4X1BEQV9MRU5fTUFYCQkoKHUxNikxMDI0KQkvKiBpbiBieXRlcywgZnJvbSBFSyAqLworI2RlZmluZQkJSEZBMzg0eF9QRFJfTEVOX01BWAkJKCh1MTYpNTEyKSAvKiBpbiBieXRlcywgZnJvbSBFSyAqLworI2RlZmluZQkJSEZBMzg0eF9QREFfTEVOX01BWAkJKCh1MTYpMTAyNCkgLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KICNkZWZpbmUJCUhGQTM4NHhfU0NBTlJFU1VMVF9NQVgJCSgodTE2KTMxKQogI2RlZmluZQkJSEZBMzg0eF9IU0NBTlJFU1VMVF9NQVgJCSgodTE2KTMxKQogI2RlZmluZQkJSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYCSgodTE2KTE2KQotI2RlZmluZQkJSEZBMzg0eF9EUlZSX0ZJRFNUQUNLTEVOX01BWAkoMTApCi0jZGVmaW5lCQlIRkEzODR4X0RSVlJfVFhCVUZfTUFYCQkoc2l6ZW9mKGhmYTM4NHhfdHhfZnJhbWVfdCkgKyBcCi0JCQkJCQlXTEFOX0RBVEFfTUFYTEVOIC0gXAotCQkJCQkJV0xBTl9XRVBfSVZfTEVOIC0gXAotCQkJCQkJV0xBTl9XRVBfSUNWX0xFTiArIDIpCi0jZGVmaW5lCQlIRkEzODR4X0RSVlJfTUFHSUMJCSgweDRhMmQpCi0jZGVmaW5lCQlIRkEzODR4X0lORk9EQVRBX01BWExFTgkJKHNpemVvZihoZmEzODR4X2luZm9kYXRhX3QpKQotI2RlZmluZQkJSEZBMzg0eF9JTkZPRlJNX01BWExFTgkJKHNpemVvZihoZmEzODR4X0luZkZyYW1lX3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfR1VFU1NJTkdfTUFYTEVOCTIwNDggIC8qIEknbSBub3QgcmVhbGx5IHN1cmUgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgkyMDQ4CS8qIEknbSBub3QgcmVhbGx5IHN1cmUgKi8KICNkZWZpbmUJCUhGQTM4NHhfUklEREFUQV9NQVhMRU4JCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgogI2RlZmluZQkJSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOCTIwNDgKIAogLyotLS0gU3VwcG9ydCBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9CQVBfUFJPQwkJCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X0JBUF9pbnQJCQkJKCh1MTYpMSkKICNkZWZpbmUJCUhGQTM4NHhfUE9SVFRZUEVfSUJTUwkJCSgodTE2KTApCiAjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0JTUwkJCSgodTE2KTEpCi0jZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX1dEUwkJCSgodTE2KTIpCiAjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX1BTVUVET0lCU1MJCSgodTE2KTMpCi0jZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0hPU1RBUCAgICAJCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX1BSSVZJTlZPS0VECQkoKHUxNilCSVQwKQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19FWENMVURFCQkoKHUxNilCSVQxKQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQJKCh1MTYpQklUNCkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9SWENSWVBUCSgodTE2KUJJVDcpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FMTE9XX01JWEVEIAkoKHUxNilCSVQxMSkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfaW50RVJWQUwxCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19JVl9pbnRFUlZBTDEwCQkoKHUxNilCSVQ1KQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19JVl9pbnRFUlZBTDUwCQkoKHUxNilCSVQ2KQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19JVl9pbnRFUlZBTDEwMAkJKCh1MTYpKEJJVDUgfCBCSVQ2KSkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRklSTVdBUkVfV1BBICAJCSgodTE2KUJJVDgpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0hPU1RfTUlDICAgICAgCQkoKHUxNilCSVQ5KQotI2RlZmluZSAJSEZBMzg0eF9ST0FNTU9ERV9GV1NDQU5fRldST0FNCQkoKHUxNikxKQotI2RlZmluZSAJSEZBMzg0eF9ST0FNTU9ERV9GV1NDQU5fSE9TVFJPQU0JKCh1MTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfUFJJVklOVk9LRUQJCSgodTE2KUJJVCgwKSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERQkJKCh1MTYpQklUKDEpKQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQJKCh1MTYpQklUKDQpKQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1JYQ1JZUFQJKCh1MTYpQklUKDcpKQogI2RlZmluZSAJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTQkoKHUxNikzKQogI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0RJU0FCTEVECQkoKHUxNikxKQotI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0lOSVRTUkNICQkoKHUxNikyKQotI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fSUJTUwkJKCh1MTYpMykKLSNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19DT05OX0VTUwkJKCh1MTYpNCkKLSNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19PT1JfRVNTCQkoKHUxNik1KQotI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fV0RTCQkoKHUxNik2KQotI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0hPU1RBUAkJKCh1MTYpOCkKICNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8xCQkJKCh1MTYpMSkKICNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8yCQkJKCh1MTYpMikKICNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF81ZG90NQkJCSgodTE2KTQpCiAjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMTEJCQkoKHUxNik4KQogCi0vKi0tLSBKdXN0IHNvbWUgc3ltYm9saWMgbmFtZXMgZm9yIGxlZ2liaWxpdHkgLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1RYQ01EX05PUkVDTAkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfVFhDTURfUkVDTAkJKCh1MTYpMSkKLQogLyotLS0gTUFDIEludGVybmFsIG1lbW9yeSBjb25zdGFudHMgYW5kIG1hY3JvcyAtLS0tLS0qLwogLyogbWFza3MgYW5kIG1hY3JvcyB1c2VkIHRvIG1hbmlwdWxhdGUgTUFDIGludGVybmFsIG1lbW9yeSBhZGRyZXNzZXMuICovCiAvKiBNQUMgaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMjMgYml0IHF1YW50aXRpZXMuICBUaGUgTUFDIHVzZXMKQEAgLTEzOSw1OSArMTAxLDI4IEBACiAgKiBtYWNyb3MgYmVsb3cgaGVscCBoYW5kbGUgc29tZSBvZiB0aGlzLgogICovCiAKLS8qIEhhbmR5IGNvbnN0YW50ICovCi0jZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX09GRl9NQVgJKCh1MTYpMHgwMDdmKQotCiAvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIGEgZmxhdCBhZGRyZXNzICovCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfRkxBVF9BVVhfUEFHRV9NQVNLCSgweDAwN2ZmZjgwKQogI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQVVYX09GRl9NQVNLCSgweDAwMDAwMDdmKQogI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQ01EX1BBR0VfTUFTSwkoMHhmZmZmMDAwMCkKICNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0NNRF9PRkZfTUFTSwkoMHgwMDAwZmZmZikKIAotLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBBVVggZm9ybWF0IDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCisvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIEFVWCBmb3JtYXQKKyAgIDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSwkoMHhmZmZmKQogI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSwkoMHgwMDdmKQogCi0vKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIENNRCBmb3JtYXQgMTYtYml0IGFkZHJlc3MgcGFydHMgKi8KLSNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfUEFHRV9NQVNLCSgweDAwN2YpCi0jZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX09GRl9NQVNLCSgweGZmZmYpCi0KIC8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQVVYIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCi0jZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LRkxBVChwLG8pCVwKLQkJKCgodTMyKSgoKHUxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDw3KSB8IFwKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9BVVhfTUtGTEFUKHAsIG8pCVwKKwkJKCgodTMyKSgoKHUxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDwgNykgfCBcCiAJCSgodTMyKSgoKHUxNikobykpJkhGQTM4NHhfQUREUl9BVVhfT0ZGX01BU0spKQogCi0vKiBNYWtlIGEgMzItYml0IGZsYXQgYWRkcmVzcyBmcm9tIENNRCBmb3JtYXQgMTYtYml0IHBhZ2UgYW5kIG9mZnNldCAqLwotI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9NS0ZMQVQocCxvKQlcCi0JCSgoKHUzMikoKCh1MTYpKHApKSZIRkEzODR4X0FERFJfQ01EX1BBR0VfTUFTSykpIDw8MTYpIHwgXAotCQkoKHUzMikoKCh1MTYpKG8pKSZIRkEzODR4X0FERFJfQ01EX09GRl9NQVNLKSkKLQotLyogTWFrZSBBVVggZm9ybWF0IG9mZnNldCBhbmQgcGFnZSBmcm9tIGEgMzItYml0IGZsYXQgYWRkcmVzcyAqLwotI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9NS1BBR0UoZikgXAotCQkoKHUxNikoKCgodTMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQVVYX1BBR0VfTUFTSyk+PjcpKQotI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9NS09GRihmKSBcCi0JCSgodTE2KSgoKHUzMikoZikpJkhGQTM4NHhfQUREUl9GTEFUX0FVWF9PRkZfTUFTSykpCi0KIC8qIE1ha2UgQ01EIGZvcm1hdCBvZmZzZXQgYW5kIHBhZ2UgZnJvbSBhIDMyLWJpdCBmbGF0IGFkZHJlc3MgKi8KICNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGYpIFwKIAkJKCh1MTYpKCgoKHUzMikoZikpJkhGQTM4NHhfQUREUl9GTEFUX0NNRF9QQUdFX01BU0spPj4xNikpCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX01LT0ZGKGYpIFwKIAkJKCh1MTYpKCgodTMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQ01EX09GRl9NQVNLKSkKIAotLyotLS0gQXV4IHJlZ2lzdGVyIG1hc2tzL3Rlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogU29tZSBvZiB0aGUgdXBwZXIgYml0cyBvZiB0aGUgQVVYIG9mZnNldCByZWdpc3RlciBhcmUgdXNlZCB0byAqLwotLyogIHNlbGVjdCBhZGRyZXNzIHNwYWNlLiAqLwotI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX0VYVERTCSgweDAwKQotI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX05WCSgweDAxKQotI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX1BIWQkoMHgwMikKLSNkZWZpbmUJCUhGQTM4NHhfQVVYX0NUTF9JQ1NSQU0JKDB4MDMpCi0KLS8qIE1ha2UgQVVYIHJlZ2lzdGVyIG9mZnNldCBhbmQgcGFnZSB2YWx1ZXMgZnJvbSBhIGZsYXQgYWRkcmVzcyAqLwotI2RlZmluZQkJSEZBMzg0eF9BVVhfTUtPRkYoZiwgYykgXAotCShIRkEzODR4X0FERFJfQVVYX01LT0ZGKGYpIHwgKCgodTE2KShjKSk8PDEyKSkKLSNkZWZpbmUJCUhGQTM4NHhfQVVYX01LUEFHRShmKQlIRkEzODR4X0FERFJfQVVYX01LUEFHRShmKQotCi0KIC8qLS0tIENvbnRyb2xsZXIgTWVtb3J5IGFkZHJlc3NlcyAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUJCUhGQTM4NDJfUERBX0JBU0UJKDB4MDA3ZjAwMDBVTCkKICNkZWZpbmUJCUhGQTM4NDFfUERBX0JBU0UJKDB4MDAzZjAwMDBVTCkKQEAgLTIwMSwxMjQgKzEzMiwyNSBAQAogI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVECQkwCiAjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRAkJMQogI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRAkJMgotI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIV1JJVFRFTgkJMwotI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIV1JJVEVQRU5ESU5HCTQKLSNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9HRU5FU0lTIAkJNQotCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9PRkYJCQkoMHgwMCkKLSNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wX09GRgkJKDB4MDQpCi0jZGVmaW5lCQlIRkEzODR4X1BBUkFNMV9PRkYJCSgweDA4KQotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTJfT0ZGCQkoMHgwYykKLSNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX09GRgkJKDB4MTApCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AwX09GRgkJKDB4MTQpCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AxX09GRgkJKDB4MTgpCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AyX09GRgkJKDB4MWMpCi0jZGVmaW5lCQlIRkEzODR4X0lORk9GSURfT0ZGCQkoMHgyMCkKLSNkZWZpbmUJCUhGQTM4NHhfUlhGSURfT0ZGCQkoMHg0MCkKLSNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSURfT0ZGCQkoMHg0NCkKLSNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRF9PRkYJCSgweDQ4KQotI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QwX09GRgkJKDB4MzApCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVDBfT0ZGCQkoMHgzOCkKLSNkZWZpbmUJCUhGQTM4NHhfREFUQTBfT0ZGCQkoMHg2YykKLSNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMV9PRkYJCSgweDM0KQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxX09GRgkJKDB4M2MpCi0jZGVmaW5lCQlIRkEzODR4X0RBVEExX09GRgkJKDB4NzApCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9PRkYJCSgweDYwKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9PRkYJCSgweDY0KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19PRkYJCSgweDY4KQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX09GRgkJKDB4MjgpCi0jZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCQkoMHg1MCkKLSNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMV9PRkYJCSgweDU0KQotI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgkJKDB4NTgpCi0jZGVmaW5lCQlIRkEzODR4X0FVWFBBR0VfT0ZGCQkoMHg3NCkKLSNkZWZpbmUJCUhGQTM4NHhfQVVYT0ZGU0VUX09GRgkJKDB4NzgpCi0jZGVmaW5lCQlIRkEzODR4X0FVWERBVEFfT0ZGCQkoMHg3YykKLSNkZWZpbmUJCUhGQTM4NHhfUENJQ09SX09GRgkJKDB4NGMpCi0jZGVmaW5lCQlIRkEzODR4X1BDSUhDUl9PRkYJCSgweDVjKQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkhfT0ZGCSgweDgwKQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkxfT0ZGCSgweDg0KQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfTEVOX09GRgkJKDB4ODgpCi0jZGVmaW5lCQlIRkEzODR4X1BDSV9NMF9DVExfT0ZGCQkoMHg4YykKLSNkZWZpbmUJCUhGQTM4NHhfUENJX1NUQVRVU19PRkYJCSgweDk4KQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkhfT0ZGCSgweGEwKQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkxfT0ZGCSgweGE0KQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfTEVOX09GRgkJKDB4YTgpCi0jZGVmaW5lCQlIRkEzODR4X1BDSV9NMV9DVExfT0ZGCQkoMHhhYykKIAogLyotLS0gUmVnaXN0ZXIgRmllbGQgTWFza3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURfQlVTWQkJKCh1MTYpQklUMTUpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GTwkJKCh1MTYpKEJJVDE0IHwgQklUMTMgfCBCSVQxMiB8IEJJVDExIHwgQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUCQkoKHUxNikoQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9SRUNMCQkoKHUxNilCSVQ4KQotI2RlZmluZQkJSEZBMzg0eF9DTURfV1JJVEUJCSgodTE2KUJJVDgpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERQkJKCh1MTYpKEJJVDkgfCBCSVQ4KSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0NNRENPREUJCSgodTE2KShCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSB8IEJJVDApKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk8JCSgodTE2KShCSVQoMTQpIHwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoMTEpIHwgQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUCQkoKHUxNikoQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERQkJKCh1MTYpKEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFCQkoKHUxNikoQklUKDUpIHwgQklUKDQpIHwgQklUKDMpIHwgQklUKDIpIHwgQklUKDEpIHwgQklUKDApKSkKIAotI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUCQkoKHUxNikoQklUMTQgfCBCSVQxMyB8IEJJVDEyIHwgQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKLSNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX0NNRENPREUJCSgodTE2KShCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSB8IEJJVDApKQotCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9CVVNZCQkoKHUxNilCSVQxNSkKLSNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0VSUgkJKCh1MTYpQklUMTQpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGCQkoKHUxNikoQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4IHwgQklUNyB8IEJJVDYgfCBCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSkpCi0KLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1RJQ0sJCSgodTE2KUJJVDE1KQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfV1RFUlIJCSgodTE2KUJJVDE0KQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSU5GRFJPUAkJKCh1MTYpQklUMTMpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JTkZPCQkoKHUxNilCSVQ3KQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfRFRJTQkJKCh1MTYpQklUNSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0NNRAkJKCh1MTYpQklUNCkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0FMTE9DCQkoKHUxNilCSVQzKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfVFhFWEMJCSgodTE2KUJJVDIpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9UWAkJKCh1MTYpQklUMSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1JYCQkoKHUxNilCSVQwKQotCi0jZGVmaW5lICAgICAgICAgSEZBMzg0eF9pbnRfQkFQX09QICAgICAgICAgICAoSEZBMzg0eF9FVlNUQVRfSU5GT3xIRkEzODR4X0VWU1RBVF9SWHxIRkEzODR4X0VWU1RBVF9UWHxIRkEzODR4X0VWU1RBVF9UWEVYQykKLQotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfaW50X05PUk1BTCAgICAgICAgICAgKEhGQTM4NHhfRVZTVEFUX0lORk98SEZBMzg0eF9FVlNUQVRfUlh8SEZBMzg0eF9FVlNUQVRfVFh8SEZBMzg0eF9FVlNUQVRfVFhFWEN8SEZBMzg0eF9FVlNUQVRfSU5GRFJPUHxIRkEzODR4X0VWU1RBVF9BTExPQ3xIRkEzODR4X0VWU1RBVF9EVElNKQotCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1RJQ0sJCSgodTE2KUJJVDE1KQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9XVEVSUgkJKCh1MTYpQklUMTQpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lORkRST1AJCSgodTE2KUJJVDEzKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JTkZPCQkoKHUxNilCSVQ3KQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9EVElNCQkoKHUxNilCSVQ1KQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9DTUQJCSgodTE2KUJJVDQpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0FMTE9DCQkoKHUxNilCSVQzKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9UWEVYQwkJKCh1MTYpQklUMikKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fVFgJCSgodTE2KUJJVDEpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1JYCQkoKHUxNilCSVQwKQotCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RJQ0sJCSgodTE2KUJJVDE1KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19XVEVSUgkJKCh1MTYpQklUMTQpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1AJCSgodTE2KUJJVDEzKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPCQkoKHUxNilCSVQ3KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19EVElNCQkoKHUxNilCSVQ1KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTUQJCSgodTE2KUJJVDQpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DCQkoKHUxNilCSVQzKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQwkJKCh1MTYpQklUMikKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFgJCSgodTE2KUJJVDEpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYCQkoKHUxNilCSVQwKQotCi0jZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYRU4JCSgodTE2KShCSVQxNSB8IEJJVDE0KSkKLQorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUCQkoKHUxNikoQklUKDE0KSB8IEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDExKSB8IEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpKQogCiAvKi0tLSBDb21tYW5kIENvZGUgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tIENvbnRyb2xsZXIgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0lOSVQJCSgodTE2KTB4MDApCiAjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRU5BQkxFCQkoKHUxNikweDAxKQogI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0RJU0FCTEUJCSgodTE2KTB4MDIpCi0jZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRElBRwkJKCh1MTYpMHgwMykKLQotLyotLS0gQnVmZmVyIE1nbXQgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FMTE9DCQkoKHUxNikweDBBKQotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX1RYCQkoKHUxNikweDBCKQotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0NMUlBSU1QJCSgodTE2KTB4MTIpCiAKIC8qLS0tIFJlZ3VsYXRlIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9OT1RJRlkJCSgodTE2KTB4MTApCiAjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfSU5RCQkoKHUxNikweDExKQogCiAvKi0tLSBDb25maWd1cmUgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FDQ0VTUwkJKCh1MTYpMHgyMSkKICNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9ET1dOTEQJCSgodTE2KTB4MjIpCiAKIC8qLS0tIERlYnVnZ2luZyBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMjcsOSArMTU5LDYgQEAKICNkZWZpbmUJCUhGQTM4NHhfTU9OSVRPUl9ESVNBQkxFCQkoKHUxNikoMHgwZikpCiAKIC8qLS0tIFJlc3VsdCBDb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1NVQ0NFU1MJCQkoKHUxNikoMHgwMCkpCi0jZGVmaW5lCQlIRkEzODR4X0NBUkRfRkFJTAkJKCh1MTYpKDB4MDEpKQotI2RlZmluZQkJSEZBMzg0eF9OT19CVUZGCQkJKCh1MTYpKDB4MDUpKQogI2RlZmluZQkJSEZBMzg0eF9DTURfRVJSCQkJKCh1MTYpKDB4N0YpKQogCiAvKi0tLSBQcm9ncmFtbWluZyBNb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQzLDE2ICsxNzIsNiBAQAogI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9OVgkJKCh1MTYpMHgwMikKICNkZWZpbmUJCUhGQTM4NHhfUFJPR01PREVfTlZXUklURQkoKHUxNikweDAzKQogCi0vKi0tLSBBVVggcmVnaXN0ZXIgZW5hYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQVVYUFcwCQkJKCh1MTYpMHhmZTAxKQotI2RlZmluZQkJSEZBMzg0eF9BVVhQVzEJCQkoKHUxNikweGRjMjMpCi0jZGVmaW5lCQlIRkEzODR4X0FVWFBXMgkJCSgodTE2KTB4YmE0NSkKLQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9JU0RJU0FCTEVECSgodTE2KTB4MDAwMCkKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhfSVNFTkFCTEVECSgodTE2KTB4YzAwMCkKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhfRE9FTkFCTEUJKCh1MTYpMHg4MDAwKQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9ET0RJU0FCTEUJKCh1MTYpMHg0MDAwKQotCiAvKi0tLSBSZWNvcmQgSUQgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbmZpZ3VyYXRpb24gUklEczogTmV0d29yayBQYXJhbWV0ZXJzLCBTdGF0aWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcwpAQCAtMzYyLDEzMyArMTgxLDI1IEBACiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRAkoKHUxNikweEZDMDIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMCSgodTE2KTB4RkMwMykKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSUQJCSgodTE2KTB4RkMwNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkFUSU1XSU4JKCh1MTYpMHhGQzA1KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1lTU0NBTEUJCSgodTE2KTB4RkMwNikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4JKCh1MTYpMHhGQzA3KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUgkJKCh1MTYpMHhGQzA4KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVECSgodTE2KTB4RkMwOSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBNRVBTCQkoKHUxNikweEZDMEEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNVUxUSUNBU1RSWAkoKHUxNikweEZDMEIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUgkoKHUxNikweEZDMEMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVIJKCh1MTYpMHhGQzBEKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTkFNRQkJKCh1MTYpMHhGQzBFKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUgkoKHUxNikweEZDMTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMQkJKCh1MTYpMHhGQzExKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjIJCSgodTE2KTB4RkMxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIzCQkoKHUxNikweEZDMTMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNAkJKCh1MTYpMHhGQzE0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjUJCSgodTE2KTB4RkMxNSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI2CQkoKHUxNikweEZDMTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRgkoKHUxNikweEZDMTcpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbmZpZ3VyYXRpb24gUklEIGxlbmd0aHM6IE5ldHdvcmsgUGFyYW1zLCBTdGF0aWMgQ29uZmlnIEVudGl0aWVzCiAgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKICAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVE9ETzogZmlsbCBpbiB0aGUgcmVzdCBvZiB0aGVzZSAqLwotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEVfTEVOCSgodTE2KTIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTgkoKHUxNik2KQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOCSgodTE2KTM0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTF9MRU4JKCh1MTYpMikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOCSgodTE2KTM0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQVRJTVdJTl9MRU4JKCh1MTYpMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNZU1NDQUxFX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTl9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFJfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVOQUJMRURfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVQU19MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1VTFRJQ0FTVFJYX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYU0xFRVBEVVJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05OQU1FX0xFTgkoKHUxNikzNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMV9MRU4JKCh1MTYpNikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIyX0xFTgkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjNfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNF9MRU4JKCh1MTYpNikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI1X0xFTgkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjZfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRl9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0xFTiAoKHUxNilzaXplb2YodTE2KSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWFNMRUVQRFVSX0xFTgkoKHUxNikwKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb25maWd1cmF0aW9uIFJJRHM6IE5ldHdvcmsgUGFyYW1ldGVycywgRHluYW1pYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9HUk9VUEFERFIJCSgodTE2KTB4RkM4MCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NSRUFURUlCU1MJCSgodTE2KTB4RkM4MSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gJCSgodTE2KTB4RkM4MikKICNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSAkJKCh1MTYpMHhGQzgzKQogI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTAkJKCh1MTYpMHhGQzg0KQogI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREUJCSgodTE2KTB4RkM4NSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gwCQkoKHUxNikweEZDOTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMQkJKCh1MTYpMHhGQzkxKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDIJCSgodTE2KTB4RkM5MikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gzCQkoKHUxNikweEZDOTMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINAkJKCh1MTYpMHhGQzk0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDUJCSgodTE2KTB4RkM5NSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g2CQkoKHUxNikweEZDOTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gwCQkoKHUxNikweEZDOTcpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxCQkoKHUxNikweEZDOTgpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gyCQkoKHUxNikweEZDOTkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gzCQkoKHUxNikweEZDOUEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0CQkoKHUxNikweEZDOUIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g1CQkoKHUxNikweEZDOUMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g2CQkoKHUxNikweEZDOUQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMAkJKCh1MTYpMHhGQzlFKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDEJCSgodTE2KTB4RkM5RikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwyCQkoKHUxNikweEZDQTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMwkJKCh1MTYpMHhGQ0ExKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDQJCSgodTE2KTB4RkNBMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw1CQkoKHUxNikweEZDQTMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNgkJKCh1MTYpMHhGQ0E0KQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db25maWd1cmF0aW9uIFJJRCBMZW5ndGhzOiBOZXR3b3JrIFBhcmFtLCBEeW5hbWljIENvbmZpZyBFbnRpdGllcwotICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90Ci0gIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRPRE86IGZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlc2UgKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX0dST1VQQUREUl9MRU4JKCh1MTYpMTYgKiBXTEFOX0FERFJfTEVOKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1JFQVRFSUJTU19MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0hfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0hfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMX0xFTgkoKHUxNik0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREVfTEVOCSgodTE2KTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMF9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gxX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIM19MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g0X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDVfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINl9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDBfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMl9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDNfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINV9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDZfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMF9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwxX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMM19MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw0X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDVfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNl9MRU4JKCh1MTYpMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29uZmlndXJhdGlvbiBSSURzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9JVElDS1RJTUUJCSgodTE2KTB4RkNFMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29uZmlndXJhdGlvbiBSSUQgTGVuZ3RoczogQmVoYXZpb3IgUGFyYW1ldGVycwotICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90Ci0gIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX0lUSUNLVElNRV9MRU4JKCh1MTYpMikKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBSSURzOiBOSUMgSW5mb3JtYXRpb24KQEAgLTUwMiw0MSArMjEzLDE3IEBACiAjZGVmaW5lCQlIRkEzODR4X1JJRF9OSUNJREVOVElUWQkJKCh1MTYpMHhGRDBCKQogI2RlZmluZQkJSEZBMzg0eF9SSURfTUZJU1VQUkFOR0UJCSgodTE2KTB4RkQwQykKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSVNVUFJBTkdFCQkoKHUxNikweEZEMEQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMTElTVAkJKCh1MTYpMHhGRDEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlMJKCh1MTYpMHhGRDExKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVEVNUFRZUEUJCSgodTE2KTB4RkQxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NJUwkJCSgodTE2KTB4RkQxMykKICNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQUlERU5USVRZCQkoKHUxNikweEZEMjApCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFTVVBSQU5HRQkJKCh1MTYpMHhGRDIxKQogI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBX01GSUFDVFJBTkdFUwkoKHUxNikweEZEMjIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFfQ0ZJQUNUUkFOR0VTCSgodTE2KTB4RkQyMykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0JVSUxEU0VRCQkoKHUxNikweEZGRkUpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GV0lECQkoKHUxNikweEZGRkYpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gUklEIExlbmd0aHM6IE5JQyBJbmZvcm1hdGlvbgogICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CiAgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX01BWExPQURUSU1FX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QUklJREVOVElUWV9MRU4JCSgodTE2KTgpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QUklTVVBSQU5HRV9MRU4JCSgodTE2KTEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTX0xFTgkJKCh1MTYpMTApCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOCQkoKHUxNikxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ0lERU5USVRZX0xFTgkJKCh1MTYpOCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX01GSVNVUFJBTkdFX0xFTgkJKCh1MTYpMTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DRklTVVBSQU5HRV9MRU4JCSgodTE2KTEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTExJU1RfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlNfTEVOCSgodTE2KTEyKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVEVNUFRZUEVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0lTX0xFTgkJCSgodTE2KTQ4MCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQUlERU5USVRZX0xFTgkJKCh1MTYpOCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQVNVUFJBTkdFX0xFTgkJKCh1MTYpMTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NRklBQ1RSQU5HRVNfTEVOCQkoKHUxNikxMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSUFDVFJBTkdFUzJfTEVOCQkoKHUxNikxMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0JVSUxEU0VRX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfQnVpbGRTZXFfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GV0lEX0xFTgkJCSgodTE2KXNpemVvZihoZmEzODR4X0ZXSURfdCkpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEluZm9ybWF0aW9uIFJJRHM6ICBNQUMgSW5mb3JtYXRpb24KQEAgLTU0NCw4NyArMjMxLDI1IEBACiAjZGVmaW5lCQlIRkEzODR4X1JJRF9QT1JUU1RBVFVTCQkoKHUxNikweEZENDApCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRAkJKCh1MTYpMHhGRDQxKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lECSgodTE2KTB4RkQ0MikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NPTU1TUVVBTElUWQkoKHUxNikweEZENDMpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFCSgodTE2KTB4RkQ0NCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCQ05pbnQJKCh1MTYpMHhGRDQ1KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNDQUxFVEhSRVNICSgodTE2KTB4RkQ0NikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BST1RPQ09MUlNQVElNRQkoKHUxNikweEZENDcpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9TSE9SVFJFVFJZTElNSVQJKCh1MTYpMHhGRDQ4KQogI2RlZmluZQkJSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQJKCh1MTYpMHhGRDQ5KQogI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYVFhMSUZFVElNRQkoKHUxNikweEZENEEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhSWExJRkVUSU1FCSgodTE2KTB4RkQ0QikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NGUE9MTEFCTEUJCSgodTE2KTB4RkQ0QykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhBTEdPUklUSE1TCSgodTE2KTB4RkQ0RCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSVZBQ1lPUFRJTVAJKCh1MTYpMHhGRDRGKQogI2RlZmluZQkJSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZCSgodTE2KTB4RkQ1MSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUxCSgodTE2KTB4RkQ4MCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUyCSgodTE2KTB4RkQ4MSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUzCSgodTE2KTB4RkQ4MikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU0CSgodTE2KTB4RkQ4MykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU1CSgodTE2KTB4RkQ4NCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU2CSgodTE2KTB4RkQ4NSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX09XTk1BQ0FERFJFU1MJKCh1MTYpMHhGRDg2KQotLy8gI2RlZmluZQlIRkEzODR4X1JJRF9QQ0ZJTkZPCQkoKHUxNikweEZEODcpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9TQ0FOUkVTVUxUUyAgICAgICAJKCh1MTYpMHhGRDg4KSAvLyBORVcKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0hPU1RTQ0FOUkVTVUxUUyAgIAkoKHUxNikweEZEODkpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfQVVUSEVOVElDQVRJT05VU0VECSgodTE2KTB4RkQ4QSkgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9BU1NPQ0lBVEVGQUlMVVJFICAJKCh1MTYpMHhGRDhEKSAvLyAxLjguMAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBSSUQgTGVuZ3RoczogIE1BQyBJbmZvcm1hdGlvbgogICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CiAgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BPUlRTVEFUVVNfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSURfTEVOCQkoKHUxNikzNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRF9MRU4JCSgodTE2KVdMQU5fQlNTSURfTEVOKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfY29tbXNxdWFsaXR5X3QpKQogI2RlZmluZQkJSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5X3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURV9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQkNOaW50X0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQUNVUlNDQUxFVEhSRVNIX0xFTgkoKHUxNikxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0FQQ1VSU0NBTEVUSFJFU0hfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QUk9UT0NPTFJTUFRJTUVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlUX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlUX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFRYTElGRVRJTUVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYUlhMSUZFVElNRV9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DRlBPTExBQkxFX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhBTEdPUklUSE1TX0xFTgkJKCh1MTYpNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSVZBQ1lPUFRJTVBfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTFfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTJfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTNfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTRfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTZfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfT1dOTUFDQUREUkVTU19MRU4JCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QQ0ZJTkZPX0xFTgkJCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOCQkoKHUxNilzaXplb2YoaGZhMzg0eF9QQ0ZJbmZvX2RhdGFfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9TQ0FOUkVRVUVTVF9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X1NjYW5SZXF1ZXN0X2RhdGFfdCkpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIRU5USUNBVEVTVEFfTEVOCQkoKHUxNilzaXplb2YoaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMSU5GT1JFUVVFU1RfTEVOCSgodTE2KXNpemVvZihoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhX3QpKQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBSSURzOiAgTW9kZW0gSW5mb3JtYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BIWVRZUEUJCSgodTE2KTB4RkRDMCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMCSgodTE2KTB4RkRDMSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRQT1dFUlNUQVRFCSgodTE2KTB4RkRDMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NDQU1PREUJCSgodTE2KTB4RkRDMykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NVUFBPUlRFRERBVEFSQVRFUwkoKHUxNikweEZEQzYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9MRk9TVEFUVVMgICAgICAgICAgICgodTE2KTB4RkRDNykgLy8gMS43LjEKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSW5mb3JtYXRpb24gUklEIExlbmd0aHM6ICBNb2RlbSBJbmZvcm1hdGlvbgotICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90Ci0gIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BIWVRZUEVfTEVOCQkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRQT1dFUlNUQVRFX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0NBTU9ERV9MRU4JCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfU1VQUE9SVEVEREFUQVJBVEVTX0xFTgkoKHUxNikxMCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQVBJIEVOSEFOQ0VNRU5UUyAoTk9UIEFMUkVBRFkgSU1QTEVNRU5URUQpCkBAIC02MzUsNTcgKzI2MCwyMiBAQAogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTIJKCh1MTYpMHhGQzI2KQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTMJKCh1MTYpMHhGQzI3KQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MJCSgodTE2KTB4RkMyOCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUEtFWU1BUFRBQkxFCSgodTE2KTB4RkMyOSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OCSgodTE2KTB4RkMyQSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWEFTU09DU1RBVElPTlMJKCh1MTYpMHhGQzJCKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVFhDT05UUk9MCSgodTE2KTB4RkMyQykKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFCSgodTE2KTB4RkMyRCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkhPU1RBVVRIQVNTT0MJKCh1MTYpMHhGQzJFKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUkNWQ1JDRVJST1IJKCh1MTYpMHhGQzMwKQotLy8gI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTU1MSUZFCQkoKHUxNikweEZDMzEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBTFRSRVRSWUNOVAkoKHUxNikweEZDMzIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBUEJDTmludAkJKCh1MTYpMHhGQzMzKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPCSgodTE2KTB4RkMzNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNUQVBDRklORk8JKCh1MTYpMHhGQzM1KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUFJJT1JJVFlRVVNBR0UJKCh1MTYpMHhGQzM3KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVElNQ1RSTAkJKCh1MTYpMHhGQzQwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVEhJUlRZMlRBTExZCSgodTE2KTB4RkM0MikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkVOSFNFQ1VSSVRZCSgodTE2KTB4RkM0MykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkRCTUFESlVTVCAgCSgodTE2KTB4RkM0NikgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXUEFEQVRBICAgICAgIAkoKHUxNikweEZDNDgpIC8vIDEuNy4wCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQUk9QT0dBVElPTkRFTEFZCSgodTE2KTB4RkM0OSkgLy8gMS43LjYKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNIT1JUUFJFQU1CTEUJKCh1MTYpMHhGQ0IwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRVhDTE9OR1BSRUFNQkxFCSgodTE2KTB4RkNCMSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhSU1BUSU1FT1VUCSgodTE2KTB4RkNCMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkRCTUFESlVTVCAgCSgodTE2KTB4RkM0NikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldQQURBVEEgICAgICAgCSgodTE2KTB4RkM0OCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMJKCh1MTYpMHhGQ0IzKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTCSgodTE2KTB4RkNCNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkZBTExCQUNLQ1RSTAkoKHUxNikweEZDQjUpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfV0VQS0VZU1RBVFVTICAgCSgodTE2KTB4RkNCNikgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9XRVBLRVlNQVBJTkRFWCAJKCh1MTYpMHhGQ0I3KSAvLyBORVcKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0JST0FEQ0FTVEtFWUlEIAkoKHUxNikweEZDQjgpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfRU5UU0VDRkxBR0VZSUQgCSgodTE2KTB4RkNCOSkgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQQVNTSVZFU0NBTkNUUkwJKCh1MTYpMHhGQ0JBKSAvLyBORVcgU1RBCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXUEFIQU5ETElORwkoKHUxNikweEZDQkIpIC8vIDEuNy4wCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NRENDT05UUk9MICAgICAgICAJKCh1MTYpMHhGQ0JDKSAvLyAxLjcuMC8xLjQuMAotI2RlZmluZQkJSEZBMzg0eF9SSURfTURDQ09VTlRSWSAgICAgICAgCSgodTE2KTB4RkNCRCkgLy8gMS43LjAvMS40LjAKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUE9XRVJNQVggICAgICAgIAkoKHUxNikweEZDQkUpIC8vIDEuNy4wLzEuNC4wCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZMRk9FTkJMRUQgICAgICAJKCh1MTYpMHhGQ0JGKSAvLyAxLjYuMwotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0NBUElORk8gICAgICAgICAgICAgKCh1MTYpMHhGQ0MwKSAvLyAxLjcuMC8xLjMuNwotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0xJU1RFTmludEVSVkFMICAgICAgKCh1MTYpMHhGQ0MxKSAvLyAxLjcuMC8xLjMuNwotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0RJVkVSU0lUWUVOQUJMRUQgICAgKCh1MTYpMHhGQ0MyKSAvLyAxLjcuMC8xLjMuNwotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0xFRF9DT05UUk9MICAgICAgICAgKCh1MTYpMHhGQ0M0KSAvLyAxLjcuNgotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0hGT19ERUxBWSAgICAgICAgICAgKCh1MTYpMHhGQ0M1KSAvLyAxLjcuNgotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0RJU1NBTE9XRURCU1NJRCAgICAgKCh1MTYpMHhGQ0M2KSAvLyAxLjguMAotI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFUVVFU1QJCSgodTE2KTB4RkNFMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTAkoKHUxNikweEZDQkEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFBPV0VSTUFYICAgICAgICAJKCh1MTYpMHhGQ0JFKQogI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QJCSgodTE2KTB4RkNFMikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FURVNUQQkoKHUxNikweEZDRTMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMSU5GT1JFUVVFU1QJKCh1MTYpMHhGQ0U0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfSE9TVFNDQU4gICAgICAgICAgCSgodTE2KTB4RkNFNSkgLy8gTkVXIFNUQQotI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFU1RBCSgodTE2KTB4RkNFNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0hPU1RTQ0FOICAgICAgICAgIAkoKHUxNikweEZDRTUpCiAKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlfTEVOCSgodTE2KTYpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVAxMjhERUZBVUxUS0VZX0xFTgkoKHUxNikxNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBSSU9RVVNBR0VfTEVOCQkoKHUxNik0KQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBQRCBSZWNvcmQgY29kZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTY5NywyMiArMjg3LDExIEBACiAjZGVmaW5lIEhGQTM4NHhfUERSX01GSVNVUFJBTkdFCQkoKHUxNikweDAwMDYpCiAjZGVmaW5lIEhGQTM4NHhfUERSX0NGSVNVUFJBTkdFCQkoKHUxNikweDAwMDcpCiAjZGVmaW5lIEhGQTM4NHhfUERSX05JQ0lECQkoKHUxNikweDAwMDgpCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfUkVGREFDX01FQVNVUkVNRU5UUwkoKHUxNikweDAwMTApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfTUVBU1VSRU1FTlRTCSgodTE2KTB4MDAyMCkKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX01FQVNVUkVNRU5UUwkoKHUxNikweDAwMzApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfTU9ERU1fVFJJTURBQ19NRUFTVVJFTUVOVFMJKCh1MTYpMHgwMDQwKQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX0NPUkVHQV9IQUNLCQkoKHUxNikweDAwZmYpCiAjZGVmaW5lIEhGQTM4NHhfUERSX01BQ19BRERSRVNTCQkoKHUxNikweDAxMDEpCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfTUtLX0NBTExOQU1FCSgodTE2KTB4MDEwMikKICNkZWZpbmUgSEZBMzg0eF9QRFJfUkVHRE9NQUlOCQkoKHUxNikweDAxMDMpCiAjZGVmaW5lIEhGQTM4NHhfUERSX0FMTE9XRURfQ0hBTk5FTAkoKHUxNikweDAxMDQpCiAjZGVmaW5lIEhGQTM4NHhfUERSX0RFRkFVTFRfQ0hBTk5FTAkoKHUxNikweDAxMDUpCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfUFJJVkFDWV9PUFRJT04JKCh1MTYpMHgwMTA2KQogI2RlZmluZSBIRkEzODR4X1BEUl9URU1QVFlQRQkJKCh1MTYpMHgwMTA3KQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX1JFRkRBQ19TRVRVUAkoKHUxNikweDAxMTApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfU0VUVVAJCSgodTE2KTB4MDEyMCkKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX1NFVFVQCSgodTE2KTB4MDEzMCkKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9UUklNREFDX1NFVFVQCSgodTE2KTB4MDE0MCkKICNkZWZpbmUgSEZBMzg0eF9QRFJfSUZSX1NFVFRJTkcJCSgodTE2KTB4MDIwMCkKICNkZWZpbmUgSEZBMzg0eF9QRFJfUkZSX1NFVFRJTkcJCSgodTE2KTB4MDIwMSkKICNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9CQVNFTElORQkoKHUxNikweDAyMDIpCkBAIC03MjksNyArMzA4LDYgQEAKICNkZWZpbmUgSEZBMzg0eF9QRFJfUENJX1BNQ09ORgkJKCh1MTYpMHgwNDA0KQogI2RlZmluZSBIRkEzODR4X1BEUl9SRkVOUkdZCQkoKHUxNikweDA0MDYpCiAjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9QT1dFUl9UWVBFICAgICAgKCh1MTYpMHgwNDA3KQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX1VOS05PV040MDgJCSgodTE2KTB4MDQwOCkKICNkZWZpbmUgSEZBMzg0eF9QRFJfVVNCX01BWF9QT1dFUgkoKHUxNikweDA0MDkpCiAjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9NQU5VRkFDVFVSRVIJKCh1MTYpMHgwNDEwKQogI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfUFJPRFVDVCAgCSgodTE2KTB4MDQxMSkKQEAgLTc0MSw4MzEgKzMxOSwxMjIgQEAKICNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9NQU5GX1RFU1RJCSgodTE2KTB4MDkwMSkKICNkZWZpbmUgSEZBMzg0eF9QRFJfRU5EX09GX1BEQQkJKCh1MTYpMHgwMDAwKQogCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKi0tLSBSZWdpc3RlciBJRCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZQkJSEZBMzg0eF9DTUQJCUhGQTM4NHhfQ01EX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTAJCUhGQTM4NHhfUEFSQU0wX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTEJCUhGQTM4NHhfUEFSQU0xX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTIJCUhGQTM4NHhfUEFSQU0yX09GRgotI2RlZmluZQkJSEZBMzg0eF9TVEFUVVMJCUhGQTM4NHhfU1RBVFVTX09GRgotI2RlZmluZQkJSEZBMzg0eF9SRVNQMAkJSEZBMzg0eF9SRVNQMF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfUkVTUDEJCUhGQTM4NHhfUkVTUDFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AyCQlIRkEzODR4X1JFU1AyX09GRgotI2RlZmluZQkJSEZBMzg0eF9JTkZPRklECQlIRkEzODR4X0lORk9GSURfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1JYRklECQlIRkEzODR4X1JYRklEX09GRgotI2RlZmluZQkJSEZBMzg0eF9BTExPQ0ZJRAlIRkEzODR4X0FMTE9DRklEX09GRgotI2RlZmluZQkJSEZBMzg0eF9UWENPTVBMRklECUhGQTM4NHhfVFhDT01QTEZJRF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMAkJSEZBMzg0eF9TRUxFQ1QwX09GRgotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQwCQlIRkEzODR4X09GRlNFVDBfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0RBVEEwCQlIRkEzODR4X0RBVEEwX09GRgotI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QxCQlIRkEzODR4X1NFTEVDVDFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVDEJCUhGQTM4NHhfT0ZGU0VUMV9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfREFUQTEJCUhGQTM4NHhfREFUQTFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVAkJSEZBMzg0eF9FVlNUQVRfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOCQlIRkEzODR4X0lOVEVOX09GRgotI2RlZmluZQkJSEZBMzg0eF9FVkFDSwkJSEZBMzg0eF9FVkFDS19PRkYKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTAkJSEZBMzg0eF9DT05UUk9MX09GRgotI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQwCUhGQTM4NHhfU1dTVVBQT1JUMF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMQlIRkEzODR4X1NXU1VQUE9SVDFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDIJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgotI2RlZmluZQkJSEZBMzg0eF9BVVhQQUdFCQlIRkEzODR4X0FVWFBBR0VfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0FVWE9GRlNFVAlIRkEzODR4X0FVWE9GRlNFVF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfQVVYREFUQQkJSEZBMzg0eF9BVVhEQVRBX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQ0lDT1IJCUhGQTM4NHhfUENJQ09SX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQ0lIQ1IJCUhGQTM4NHhfUENJSENSX09GRgotCi0KIC8qLS0tIFJlZ2lzdGVyIFRlc3QvR2V0L1NldCBGaWVsZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZQkJSEZBMzg0eF9DTURfSVNCVVNZKHZhbHVlKQkJKCh1MTYpKCgodTE2KXZhbHVlKSAmIEhGQTM4NHhfQ01EX0JVU1kpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk9fR0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9BSU5GTykgPj4gOCkpCiAjZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpCQkoKHUxNikoKHUxNikodmFsdWUpIDw8IDgpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVF9HRVQodmFsdWUpCQkoKHUxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKCh1MTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX01BQ1BPUlQpKSkKICNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKHZhbHVlKQkJKCh1MTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTUkVDTCh2YWx1ZSkJCSgodTE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKHUxNikodmFsdWUpICYgSEZBMzg0eF9DTURfUkVDTCkpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTF9TRVQodmFsdWUpCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX0dFVCh2YWx1ZSkJCSgodTE2KSgoKCh1MTYpKHZhbHVlKSkmKCh1MTYpMHgzMDAwKSkgPj4gMTIpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX1NFVCh2YWx1ZSkJCSgodTE2KSgoKCh1MTYpKHZhbHVlKSkgPDwgMTIpICYgMHgzMDAwKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTV1JJVEUodmFsdWUpCQkoKHUxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKCh1MTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1dSSVRFKSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9XUklURV9TRVQodmFsdWUpCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKHUxNil2YWx1ZSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9HRVQodmFsdWUpCQkoKHUxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKCh1MTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1BST0dNT0RFKSkpCiAjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9TRVQodmFsdWUpCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKHUxNil2YWx1ZSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFX0dFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfQ01EX0NNRENPREUpKQogI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQodmFsdWUpCQkoKHUxNikodmFsdWUpKQogCi0jZGVmaW5lCQlIRkEzODR4X1NUQVRVU19SRVNVTFRfR0VUKHZhbHVlKQkoKHUxNikoKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9TVEFUVVNfUkVTVUxUKSA+PiA4KSkKICNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVF9TRVQodmFsdWUpCSgoKHUxNikodmFsdWUpKSA8PCA4KQotI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfQ01EQ09ERV9HRVQodmFsdWUpCSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfU1RBVFVTX0NNRENPREUpCi0jZGVmaW5lCQlIRkEzODR4X1NUQVRVU19DTURDT0RFX1NFVCh2YWx1ZSkJKCh1MTYpKHZhbHVlKSkKLQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfQlVTWSkpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9JU0VSUih2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfT0ZGU0VUX0VSUikpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGX0dFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfREFUQU9GRikpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGX1NFVCh2YWx1ZSkJKCh1MTYpKHZhbHVlKSkKLQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNUSUNLKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVElDSykpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1dURVJSKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfV1RFUlIpKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNJTkZEUk9QKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfSU5GRFJPUCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0lORk8odmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9JTkZPKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTRFRJTSh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0RUSU0pKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNDTUQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9DTUQpKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNBTExPQyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0FMTE9DKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTVFhFWEModmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9UWEVYQykpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1RYKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVFgpKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNSWCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1JYKSkKLQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNCQVBfT1AodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X2ludF9CQVBfT1ApKQotCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTVElDSyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fVElDSykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1RJQ0tfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDE1KSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNXVEVSUih2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fV1RFUlIpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9XVEVSUl9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTQpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU0lORkRST1AodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0lORkRST1ApKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JTkZEUk9QX1NFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDEzKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNJTkZPKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9JTkZPKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSU5GT19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgNykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTRFRJTSh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fRFRJTSkpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0RUSU1fU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDUpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU0NNRCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fQ01EKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fQ01EX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCA0KSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNBTExPQyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fQUxMT0MpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9BTExPQ19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTVFhFWEModmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1RYRVhDKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fVFhFWENfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDIpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU1RYKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9UWCkpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1RYX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAxKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNSWCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fUlgpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9SWF9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMCkpCi0KLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUSUNLKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19USUNLKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVElDS19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTUpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1dURVJSKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19XVEVSUikpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1dURVJSX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAxNCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTSU5GRFJPUCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfSU5GRFJPUCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1BfU0VUKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTMpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0lORk8odmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0lORk8pKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCA3KSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNEVElNKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19EVElNKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfRFRJTV9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgNSkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTQ01EKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19DTUQpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTURfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDQpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0FMTE9DKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19BTExPQykpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAzKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUWEVYQyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfVFhFWEMpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQ19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMikpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTVFgodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1RYKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFhfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDEpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1JYKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19SWCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAwKSkKLQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWEVOX1NFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDE0KSkKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhFTl9HRVQodmFsdWUpCSgodTE2KSgoKHUxNikodmFsdWUpKSA+PiAxNCkpCi0KLS8qIEJ5dGUgT3JkZXIgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIGhmYTM4NHgyaG9zdF8xNihuKQkoX19sZTE2X3RvX2NwdSgodTE2KShuKSkpCi0jZGVmaW5lIGhmYTM4NHgyaG9zdF8zMihuKQkoX19sZTMyX3RvX2NwdSgodTMyKShuKSkpCi0jZGVmaW5lIGhvc3QyaGZhMzg0eF8xNihuKQkoX19jcHVfdG9fbGUxNigodTE2KShuKSkpCi0jZGVmaW5lIGhvc3QyaGZhMzg0eF8zMihuKQkoX19jcHVfdG9fbGUzMigodTMyKShuKSkpCi0jZW5kaWYKIAogLyogSG9zdCBNYWludGFpbmVkIFN0YXRlIEluZm8gKi8KICNkZWZpbmUgSEZBMzg0eF9TVEFURV9QUkVJTklUCTAKICNkZWZpbmUgSEZBMzg0eF9TVEFURV9JTklUCTEKICNkZWZpbmUgSEZBMzg0eF9TVEFURV9SVU5OSU5HCTIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIFR5cGVzIGFuZCB0aGVpciByZWxhdGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgSEZBMzg0eF9IT1NUQVVUSEFTU09DX0hPU1RBVVRIICAgQklUMAotI2RlZmluZSBIRkEzODR4X0hPU1RBVVRIQVNTT0NfSE9TVEFTU09DICBCSVQxCi0KLSNkZWZpbmUgSEZBMzg0eF9XSEFIQU5ETElOR19ESVNBQkxFRCAgICAgMAotI2RlZmluZSBIRkEzODR4X1dIQUhBTkRMSU5HX1BBU1NUSFJPVUdIICBCSVQxCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBDb21tb25seSB1c2VkIGJhc2ljIHR5cGVzICovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2J5dGVzdHIKLXsKLQl1MTYJbGVuOwotCXU4CWRhdGFbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYnl0ZXN0cl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ieXRlc3RyIHsKKwl1MTYgbGVuOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2J5dGVzdHJfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ieXRlc3RyMzIKLXsKLQl1MTYJbGVuOwotCXU4CWRhdGFbMzJdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2J5dGVzdHIzMl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ieXRlc3RyMzIgeworCXUxNiBsZW47CisJdTggZGF0YVszMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2J5dGVzdHIzMl90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb25maWd1cmF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOgogCU5ldHdvcmsgUGFyYW1ldGVycywgU3RhdGljIENvbmZpZ3VyYXRpb24gRW50aXRpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByb3RvdHlwZSBzdHJ1Y3R1cmU6IGFsbCBjb25maWd1cmF0aW9uIHJlY29yZCBzdHJ1Y3R1cmVzIHN0YXJ0IHdpdGgKLXRoZXNlIG1lbWJlcnMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yZWNvcmQKLXsKLQl1MTYJcmVjbGVuOwotCXUxNglyaWQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcmVjX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcmVjb3JkMTYKLXsKLQl1MTYJcmVjbGVuOwotCXUxNglyaWQ7Ci0JdTE2CXZhbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9yZWMxNl90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JlY29yZDMyCi17Ci0JdTE2CXJlY2xlbjsKLQl1MTYJcmlkOwotCXUzMgl2YWw7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcmVjMzI7CiAKIC8qLS0gSGFyZHdhcmUvRmlybXdhcmUgQ29tcG9uZW50IEluZm9ybWF0aW9uIC0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jb21waWRlbnQKLXsKLQl1MTYJaWQ7Ci0JdTE2CXZhcmlhbnQ7Ci0JdTE2CW1ham9yOwotCXUxNgltaW5vcjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jb21waWRlbnRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY29tcGlkZW50IHsKKwl1MTYgaWQ7CisJdTE2IHZhcmlhbnQ7CisJdTE2IG1ham9yOworCXUxNiBtaW5vcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfY29tcGlkZW50X3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY2FwbGV2ZWwKLXsKLQl1MTYJcm9sZTsKLQl1MTYJaWQ7Ci0JdTE2CXZhcmlhbnQ7Ci0JdTE2CWJvdHRvbTsKLQl1MTYJdG9wOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NhcGxldmVsX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZlBvcnRUeXBlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUG9ydFR5cGUKLXsKLQl1MTYJY25mUG9ydFR5cGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mUG9ydFR5cGVfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duTUFDQWRkcmVzcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bk1BQ0FkZHJlc3MKLXsKLQl1OAljbmZPd25NQUNBZGRyZXNzWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bk1BQ0FkZHJlc3NfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mRGVzaXJlZFNTSUQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZEZXNpcmVkU1NJRAotewotCXU4CWNuZkRlc2lyZWRTU0lEWzM0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZEZXNpcmVkU1NJRF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25DaGFubmVsIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duQ2hhbm5lbAotewotCXUxNgljbmZPd25DaGFubmVsOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkNoYW5uZWxfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duU1NJRCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93blNTSUQKLXsKLQl1OAljbmZPd25TU0lEWzM0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25TU0lEX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bkFUSU1XaW5kb3cgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25BVElNV2luZG93Ci17Ci0JdTE2CWNuZk93bkFUSU1XaW5kb3c7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duQVRJTVdpbmRvd190OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZTeXN0ZW1TY2FsZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlN5c3RlbVNjYWxlCi17Ci0JdTE2CWNuZlN5c3RlbVNjYWxlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlN5c3RlbVNjYWxlX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk1heERhdGFMZW5ndGggLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNYXhEYXRhTGVuZ3RoCi17Ci0JdTE2CWNuZk1heERhdGFMZW5ndGg7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTWF4RGF0YUxlbmd0aF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZXRFNBZGRyZXNzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mV0RTQWRkcmVzcwotewotCXU4CWNuZldEU0FkZHJlc3NbNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mV0RTQWRkcmVzc190OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUVuYWJsZWQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZQTUVuYWJsZWQKLXsKLQl1MTYJY25mUE1FbmFibGVkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNRW5hYmxlZF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUVQUyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBNRVBTCi17Ci0JdTE2CWNuZlBNRVBTOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNRVBTX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk11bHRpY2FzdFJlY2VpdmUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNdWx0aWNhc3RSZWNlaXZlCi17Ci0JdTE2CWNuZk11bHRpY2FzdFJlY2VpdmU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTXVsdGljYXN0UmVjZWl2ZV90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jYXBsZXZlbCB7CisJdTE2IHJvbGU7CisJdTE2IGlkOworCXUxNiB2YXJpYW50OworCXUxNiBib3R0b207CisJdTE2IHRvcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfY2FwbGV2ZWxfdDsKIAogLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mQXV0aGVudGljYXRpb24gLS0qLwogI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX09QRU5TWVNURU0JMHgwMDAxCiAjZGVmaW5lIEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZCTB4MDAwMgogI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX0xFQVAgICAgIAkweDAwMDQKIAotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mTWF4U2xlZXBEdXJhdGlvbiAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk1heFNsZWVwRHVyYXRpb24KLXsKLQl1MTYJY25mTWF4U2xlZXBEdXJhdGlvbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZNYXhTbGVlcER1cmF0aW9uX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZlBNSG9sZG92ZXJEdXJhdGlvbiAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBNSG9sZG92ZXJEdXJhdGlvbgotewotCXUxNgljbmZQTUhvbGRvdmVyRHVyYXRpb247Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mUE1Ib2xkb3ZlckR1cmF0aW9uX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bk5hbWUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25OYW1lCi17Ci0JdTgJY25mT3duTmFtZVszNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duTmFtZV90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25EVElNUGVyaW9kIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duRFRJTVBlcmlvZAotewotCXUxNgljbmZPd25EVElNUGVyaW9kOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkRUSU1QZXJpb2RfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mV0RTQWRkcmVzcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZldEU0FkZHJlc3NOCi17Ci0JdTgJY25mV0RTQWRkcmVzc1s2XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZXRFNBZGRyZXNzTl90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk11bHRpY2FzdFBNQnVmZmVyaW5nCi17Ci0JdTE2CWNuZk11bHRpY2FzdFBNQnVmZmVyaW5nOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk11bHRpY2FzdFBNQnVmZmVyaW5nX3Q7Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbmZpZ3VyYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6CiAJTmV0d29yayBQYXJhbWV0ZXJzLCBEeW5hbWljIENvbmZpZ3VyYXRpb24gRW50aXRpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogR3JvdXBBZGRyZXNzZXMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Hcm91cEFkZHJlc3NlcwotewotCXU4CU1BQ0FkZHJlc3NbMTZdWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0dyb3VwQWRkcmVzc2VzX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IENyZWF0ZUlCU1MgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DcmVhdGVJQlNTCi17Ci0JdTE2CUNyZWF0ZUlCU1M7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3JlYXRlSUJTU190OwotCiAjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOQ1JFQVRFSUJTUyAgICAgICAgICAwCi0jZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5DUkVBVEVJQlNTICAxCi0jZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOSUJTUyAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5JQlNTICAgICAgICAzCi0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEZyYWdtZW50YXRpb25UaHJlc2hvbGQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9GcmFnbWVudGF0aW9uVGhyZXNob2xkCi17Ci0JdTE2CUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfRnJhZ21lbnRhdGlvblRocmVzaG9sZF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBSVFNUaHJlc2hvbGQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9SVFNUaHJlc2hvbGQKLXsKLQl1MTYJUlRTVGhyZXNob2xkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1JUU1RocmVzaG9sZF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBUeFJhdGVDb250cm9sIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfVHhSYXRlQ29udHJvbAotewotCXUxNglUeFJhdGVDb250cm9sOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1R4UmF0ZUNvbnRyb2xfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogUHJvbWlzY3VvdXNNb2RlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJvbWlzY3VvdXNNb2RlCi17Ci0JdTE2CVByb21pc2N1b3VzTW9kZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcm9taXNjdW91c01vZGVfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogU2NhblJlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXF1ZXN0X2RhdGEKLXsKLQl1MTYJY2hhbm5lbExpc3Q7Ci0JdTE2CXR4UmF0ZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhX3Q7CiAKIC8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEhvc3RTY2FuUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGEKLXsKLQl1MTYJY2hhbm5lbExpc3Q7Ci0JdTE2CXR4UmF0ZTsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGEgeworCXUxNiBjaGFubmVsTGlzdDsKKwl1MTYgdHhSYXRlOwogCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90OwogCiAvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBKb2luUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YQotewotCXU4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKLQl1MTYJY2hhbm5lbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGEgeworCXU4IGJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwl1MTYgY2hhbm5lbDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90OwogCiAvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBhdXRoZW50aWNhdGVTdGF0aW9uIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGEKLXsKLQl1OAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOwotCXUxNglzdGF0dXM7Ci0JdTE2CWFsZ29yaXRobTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogYXNzb2NpYXRlU3RhdGlvbiAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfYXNzb2NpYXRlU3RhdGlvbl9kYXRhCi17Ci0JdTgJYWRkcmVzc1tXTEFOX0FERFJfTEVOXTsKLQl1MTYJc3RhdHVzOwotCXUxNgl0eXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2Fzc29jaWF0ZVN0YXRpb25fZGF0YV90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBDaGFubmVsSW5mb1JlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhCi17Ci0JdTE2CWNoYW5uZWxMaXN0OwotCXUxNgljaGFubmVsRHdlbGxUaW1lOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFdFUEtleU1hcHBpbmcgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1dFUEtleU1hcHBpbmcKLXsKLQl1OAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOwotCXUxNglrZXlfaW5kZXg7Ci0JdTggCWtleVsxNl07Ci0JdTggCW1pY190cmFuc21pdF9rZXlbNF07Ci0JdTggCW1pY19yZWNlaXZlX2tleVs0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9XRVBLZXlNYXBwaW5nX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2F1dGhlbnRpY2F0ZVN0YXRpb25fZGF0YSB7CisJdTggYWRkcmVzc1tFVEhfQUxFTl07CisJdTE2IHN0YXR1czsKKwl1MTYgYWxnb3JpdGhtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdDsKIAogLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogV1BBRGF0YSAgICAgICAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfV1BBRGF0YQotewotCXUxNglkYXRhbGVuOwotICAgICAgICB1OCAJZGF0YVswXTsgLy8gbWF4IDgwCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfV1BBRGF0YV90OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db25maWd1cmF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFRpY2tUaW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfVGlja1RpbWUKLXsKLQl1MTYJVGlja1RpbWU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVGlja1RpbWVfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfV1BBRGF0YSB7CisJdTE2IGRhdGFsZW47CisJdTggZGF0YVswXTsJCS8vIG1heCA4MAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9XUEFEYXRhX3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEluZm9ybWF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBOSUMgSW5mb3JtYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heExvYWRUaW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4TG9hZFRpbWUKLXsKLQl1MTYJTWF4TG9hZFRpbWU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4TG9hZFRpbWVfdDsKLQogLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IERvd25Mb2FkQnVmZmVyIC0tKi8KIC8qIE5PVEU6IFRoZSBwYWdlIGFuZCBvZmZzZXQgYXJlIGluIEFVWCBmb3JtYXQgKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfZG93bmxvYWRidWZmZXIKLXsKLQl1MTYJcGFnZTsKLQl1MTYJb2Zmc2V0OwotCXUxNglsZW47Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBSSUlkZW50aXR5IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUFJJSWRlbnRpdHkKLXsKLQl1MTYJUFJJQ29tcElEOwotCXUxNglQUklWYXJpYW50OwotCXUxNglQUklNYWpvclZlcnNpb247Ci0JdTE2CVBSSU1pbm9yVmVyc2lvbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QUklJZGVudGl0eV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUFJJU3VwUmFuZ2UgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QUklTdXBSYW5nZQotewotCXUxNglQUklSb2xlOwotCXUxNglQUklJRDsKLQl1MTYJUFJJVmFyaWFudDsKLQl1MTYJUFJJQm90dG9tOwotCXUxNglQUklUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFJJU3VwUmFuZ2VfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGSUFjdFJhbmdlcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NGSUFjdFJhbmdlcwotewotCXUxNglDRklSb2xlOwotCXUxNglDRklJRDsKLQl1MTYJQ0ZJVmFyaWFudDsKLQl1MTYJQ0ZJQm90dG9tOwotCXUxNglDRklUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZJQWN0UmFuZ2VzX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBOSUNTZXJpYWxOdW1iZXIgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9OSUNTZXJpYWxOdW1iZXIKLXsKLQl1OAlOSUNTZXJpYWxOdW1iZXJbMTJdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X05JQ1NlcmlhbE51bWJlcl90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTklDSWRlbnRpdHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9OSUNJZGVudGl0eQotewotCXUxNglOSUNDb21wSUQ7Ci0JdTE2CU5JQ1ZhcmlhbnQ7Ci0JdTE2CU5JQ01ham9yVmVyc2lvbjsKLQl1MTYJTklDTWlub3JWZXJzaW9uOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X05JQ0lkZW50aXR5X3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNRklTdXBSYW5nZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X01GSVN1cFJhbmdlCi17Ci0JdTE2CU1GSVJvbGU7Ci0JdTE2CU1GSUlEOwotCXUxNglNRklWYXJpYW50OwotCXUxNglNRklCb3R0b207Ci0JdTE2CU1GSVRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NRklTdXBSYW5nZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0ZJU3VwUmFuZ2UgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRklTdXBSYW5nZQotewotCXUxNglDRklSb2xlOwotCXUxNglDRklJRDsKLQl1MTYJQ0ZJVmFyaWFudDsKLQl1MTYJQ0ZJQm90dG9tOwotCXUxNglDRklUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZJU3VwUmFuZ2VfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEJVSUxEU0VROkJ1aWxkU2VxIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQnVpbGRTZXEgewotCXUxNglwcmltYXJ5OwotCXUxNglzZWNvbmRhcnk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQnVpbGRTZXFfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEZXSUQgLS0qLwotI2RlZmluZSBIRkEzODR4X0ZXSURfTEVOCTE0Ci10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0ZXSUQgewotCXU4CXByaW1hcnlbSEZBMzg0eF9GV0lEX0xFTl07Ci0JdTgJc2Vjb25kYXJ5W0hGQTM4NHhfRldJRF9MRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0ZXSURfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENoYW5uZWxMaXN0IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hhbm5lbExpc3QKLXsKLQl1MTYJQ2hhbm5lbExpc3Q7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ2hhbm5lbExpc3RfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFJlZ3VsYXRvcnlEb21haW5zIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUmVndWxhdG9yeURvbWFpbnMKLXsKLQl1OAlSZWd1bGF0b3J5RG9tYWluc1sxMl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUmVndWxhdG9yeURvbWFpbnNfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFRlbXBUeXBlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfVGVtcFR5cGUKLXsKLQl1MTYJVGVtcFR5cGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVGVtcFR5cGVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENJUyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NJUwotewotCXU4CUNJU1s0ODBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NJU190OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU1RBSWRlbnRpdHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TVEFJZGVudGl0eQotewotCXUxNglTVEFDb21wSUQ7Ci0JdTE2CVNUQVZhcmlhbnQ7Ci0JdTE2CVNUQU1ham9yVmVyc2lvbjsKLQl1MTYJU1RBTWlub3JWZXJzaW9uOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NUQUlkZW50aXR5X3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTVEFTdXBSYW5nZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NUQVN1cFJhbmdlCi17Ci0JdTE2CVNUQVJvbGU7Ci0JdTE2CVNUQUlEOwotCXUxNglTVEFWYXJpYW50OwotCXUxNglTVEFCb3R0b207Ci0JdTE2CVNUQVRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TVEFTdXBSYW5nZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTUZJQWN0UmFuZ2VzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTUZJQWN0UmFuZ2VzCi17Ci0JdTE2CU1GSVJvbGU7Ci0JdTE2CU1GSUlEOwotCXUxNglNRklWYXJpYW50OwotCXUxNglNRklCb3R0b207Ci0JdTE2CU1GSVRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NRklBY3RSYW5nZXNfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfZG93bmxvYWRidWZmZXIgeworCXUxNiBwYWdlOworCXUxNiBvZmZzZXQ7CisJdTE2IGxlbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE5JQyBJbmZvcm1hdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUG9ydFN0YXR1cyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BvcnRTdGF0dXMKLXsKLQl1MTYJUG9ydFN0YXR1czsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qb3J0U3RhdHVzX3Q7Ci0KLSNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0RJU0FCTEVECSgodTE2KTEpCi0jZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19TRUFSQ0hJTkcJKCh1MTYpMikKICNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUwkoKHUxNikzKQotI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfQ09OTl9FU1MJKCh1MTYpNCkKLSNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX09VVE9GUkFOR0UJKCh1MTYpNSkKLSNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fV0RTCSgodTE2KTYpCi0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50U1NJRCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRTU0lECi17Ci0JdTgJQ3VycmVudFNTSURbMzRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRTU0lEX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50QlNTSUQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50QlNTSUQKLXsKLQl1OAlDdXJyZW50QlNTSURbNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudEJTU0lEX3Q7CiAKIC8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBjb21tc3F1YWxpdHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jb21tc3F1YWxpdHkKLXsKLQl1MTYJQ1FfY3VyckJTUzsKLQl1MTYJQVNMX2N1cnJCU1M7Ci0JdTE2CUFOTF9jdXJyRkM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY29tbXNxdWFsaXR5X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NvbW1zcXVhbGl0eSB7CisJdTE2IENRX2N1cnJCU1M7CisJdTE2IEFTTF9jdXJyQlNTOworCXUxNiBBTkxfY3VyckZDOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9jb21tc3F1YWxpdHlfdDsKIAogLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IGRtYmNvbW1zcXVhbGl0eSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2RibWNvbW1zcXVhbGl0eQotewotCXUxNglDUWRibV9jdXJyQlNTOwotCXUxNglBU0xkYm1fY3VyckJTUzsKLQl1MTYJQU5MZGJtX2N1cnJGQzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9kYm1jb21tc3F1YWxpdHlfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRUeFJhdGUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50VHhSYXRlCi17Ci0JdTE2CUN1cnJlbnRUeFJhdGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFR4UmF0ZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudEJlYWNvbkludGVydmFsIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudEJlYWNvbkludGVydmFsCi17Ci0JdTE2CUN1cnJlbnRCZWFjb25JbnRlcnZhbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50QmVhY29uSW50ZXJ2YWxfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRTY2FsZVRocmVzaG9sZHMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50U2NhbGVUaHJlc2hvbGRzCi17Ci0JdTE2CUVuZXJneURldGVjdFRocmVzaG9sZDsKLQl1MTYJQ2FycmllckRldGVjdFRocmVzaG9sZDsKLQl1MTYJRGVmZXJEZXRlY3RUaHJlc2hvbGQ7Ci0JdTE2CUNlbGxTZWFyY2hUaHJlc2hvbGQ7IC8qIFN0YXRpb25zIG9ubHkgKi8KLQl1MTYJRGVhZFNwb3RUaHJlc2hvbGQ7IC8qIFN0YXRpb25zIG9ubHkgKi8KLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50U2NhbGVUaHJlc2hvbGRzX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQcm90b2NvbFJzcFRpbWUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcm90b2NvbFJzcFRpbWUKLXsKLQl1MTYJUHJvdG9jb2xSc3BUaW1lOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1Byb3RvY29sUnNwVGltZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU2hvcnRSZXRyeUxpbWl0IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2hvcnRSZXRyeUxpbWl0Ci17Ci0JdTE2CVNob3J0UmV0cnlMaW1pdDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TaG9ydFJldHJ5TGltaXRfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IExvbmdSZXRyeUxpbWl0IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTG9uZ1JldHJ5TGltaXQKLXsKLQl1MTYJTG9uZ1JldHJ5TGltaXQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTG9uZ1JldHJ5TGltaXRfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heFRyYW5zbWl0TGlmZXRpbWUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NYXhUcmFuc21pdExpZmV0aW1lCi17Ci0JdTE2CU1heFRyYW5zbWl0TGlmZXRpbWU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4VHJhbnNtaXRMaWZldGltZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTWF4UmVjZWl2ZUxpZmV0aW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4UmVjZWl2ZUxpZmV0aW1lCi17Ci0JdTE2CU1heFJlY2VpdmVMaWZldGltZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NYXhSZWNlaXZlTGlmZXRpbWVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGUG9sbGFibGUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRlBvbGxhYmxlCi17Ci0JdTE2CUNGUG9sbGFibGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZQb2xsYWJsZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQXV0aGVudGljYXRpb25BbGdvcml0aG1zIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zCi17Ci0JdTE2CUF1dGhlbnRpY2F0aW9uVHlwZTsKLQl1MTYJVHlwZUVuYWJsZWQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMKLShkYXRhIG9ubHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoZW50aWNhdGlvbkFsZ29yaXRobXNfZGF0YQotewotCXUxNglBdXRoZW50aWNhdGlvblR5cGU7Ci0JdTE2CVR5cGVFbmFibGVkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc19kYXRhX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQKLXsKLQl1MTYJUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1ByaXZhY3lPcHRpb25JbXBsZW1lbnRlZF90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogT3duTUFDQWRkcmVzcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X093bk1BQ0FkZHJlc3MKLXsKLQl1OAlPd25NQUNBZGRyZXNzWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X093bk1BQ0FkZHJlc3NfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBDRkluZm8gLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QQ0ZJbmZvCi17Ci0JdTE2CU1lZGl1bU9jY3VwYW5jeUxpbWl0OwotCXUxNglDRlBQZXJpb2Q7Ci0JdTE2CUNGUE1heER1cmF0aW9uOwotCXUxNglDRlBGbGFnczsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QQ0ZJbmZvX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQQ0ZJbmZvIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QQ0ZJbmZvX2RhdGEKLXsKLQl1MTYJTWVkaXVtT2NjdXBhbmN5TGltaXQ7Ci0JdTE2CUNGUFBlcmlvZDsKLQl1MTYJQ0ZQTWF4RHVyYXRpb247Ci0JdTE2CUNGUEZsYWdzOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BDRkluZm9fZGF0YV90OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JbmZvcm1hdGlvbiBSZWNvcmQgU3RydWN0dXJlczogTW9kZW0gSW5mb3JtYXRpb24gUmVjb3JkcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUEhZVHlwZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BIWVR5cGUKLXsKLQl1MTYJUEhZVHlwZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QSFlUeXBlX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50Q2hhbm5lbCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRDaGFubmVsCi17Ci0JdTE2CUN1cnJlbnRDaGFubmVsOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRDaGFubmVsX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50UG93ZXJTdGF0ZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRQb3dlclN0YXRlCi17Ci0JdTE2CUN1cnJlbnRQb3dlclN0YXRlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRQb3dlclN0YXRlX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDQ0FNb2RlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0NBTW9kZQotewotCXUxNglDQ0FNb2RlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NDQU1vZGVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFN1cHBvcnRlZERhdGFSYXRlcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1N1cHBvcnRlZERhdGFSYXRlcwotewotCXU4CVN1cHBvcnRlZERhdGFSYXRlc1sxMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU3VwcG9ydGVkRGF0YVJhdGVzX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMRk9TdGF0dXMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MRk9TdGF0dXMKLXsKLQl1MTYgIFRlc3RSZXN1bHRzOwotCXUxNiAgTEZPUmVzdWx0OwotCXUxNiAgVlJIRk9SZXN1bHQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTEZPU3RhdHVzX3Q7Ci0KLSNkZWZpbmUgSEZBMzg0eF9URVNUUkVTVUxUX0FMTFBBU1NFRCAgICBCSVQwCi0jZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9MRk9fRkFJTCAgICAgQklUMQotI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfVlJfSEYwX0ZBSUwgIEJJVDIKLSNkZWZpbmUgSEZBMzg0eF9IT1NUX0ZJUk1fQ09PUkRJTkFURSAgICBCSVQ3Ci0jZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9DT09SRElOQVRFICAgQklUMTUKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IExFRENvbnRyb2wgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MRURDb250cm9sCi17Ci0JdTE2ICBzZWFyY2hpbmdfb247Ci0JdTE2ICBzZWFyY2hpbmdfb2ZmOwotCXUxNiAgYXNzb2Nfb247Ci0JdTE2ICBhc3NvY19vZmY7Ci0JdTE2ICBhY3Rpdml0eTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9MRURDb250cm9sX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgRlJBTUUgREVTQ1JJUFRPUlMgQU5EIEZSQU1FIFNUUlVDVFVSRVMKLQotRlJBTUUgREVTQ1JJUFRPUlM6IE9mZnNldHMKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29udHJvbCBJbmZvIChvZmZzZXQgNDQtNTEpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1NUQVRVU19PRkYJCQkoKHUxNikweDQ0KQotI2RlZmluZQkJSEZBMzg0eF9GRF9USU1FX09GRgkJCSgodTE2KTB4NDYpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1NXU1VQUE9SVF9PRkYJCSgodTE2KTB4NEEpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1NJTEVOQ0VfT0ZGCQkJKCh1MTYpMHg0QSkKLSNkZWZpbmUJCUhGQTM4NHhfRkRfU0lHTkFMX09GRgkJCSgodTE2KTB4NEIpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1JBVEVfT0ZGCQkJKCh1MTYpMHg0QykKLSNkZWZpbmUJCUhGQTM4NHhfRkRfUlhGTE9XX09GRgkJCSgodTE2KTB4NEQpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1JFU0VSVkVEX09GRgkJCSgodTE2KTB4NEUpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1RYQ09OVFJPTF9PRkYJCSgodTE2KTB4NTApCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi04MDIuMTEgSGVhZGVyIChvZmZzZXQgNTItNkIpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0ZSQU1FQ09OVFJPTF9PRkYJCSgodTE2KTB4NTIpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0RVUkFUSU9OSURfT0ZGCQkoKHUxNikweDU0KQotI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTMV9PRkYJCQkoKHUxNikweDU2KQotI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTMl9PRkYJCQkoKHUxNikweDVDKQotI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTM19PRkYJCQkoKHUxNikweDYyKQotI2RlZmluZQkJSEZBMzg0eF9GRF9TRVFDT05UUk9MX09GRgkJKCh1MTYpMHg2OCkKLSNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzRfT0ZGCQkJKCh1MTYpMHg2QSkKLSNkZWZpbmUJCUhGQTM4NHhfRkRfREFUQUxFTl9PRkYJCQkoKHUxNikweDcwKQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotODAyLjMgSGVhZGVyIChvZmZzZXQgNzItN0YpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0RFU1RBRERSRVNTX09GRgkJKCh1MTYpMHg3MikKLSNkZWZpbmUJCUhGQTM4NHhfRkRfU1JDQUREUkVTU19PRkYJCSgodTE2KTB4NzgpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0RBVEFMRU5HVEhfT0ZGCQkoKHUxNikweDdFKQordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9kYm1jb21tc3F1YWxpdHkgeworCXUxNiBDUWRibV9jdXJyQlNTOworCXUxNiBBU0xkYm1fY3VyckJTUzsKKwl1MTYgQU5MZGJtX2N1cnJGQzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5X3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEZSQU1FIFNUUlVDVFVSRVM6IENvbW11bmljYXRpb24gRnJhbWVzCkBAIC0xNTczLDUxICs0NDIsNDYgQEAKIENvbW11bmljYXRpb24gRnJhbWVzOiBUcmFuc21pdCBGcmFtZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0gQ29tbXVuaWNhdGlvbiBGcmFtZTogVHJhbnNtaXQgRnJhbWUgU3RydWN0dXJlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUKLXsKLQl1MTYJc3RhdHVzOwotCXUxNglyZXNlcnZlZDE7Ci0JdTE2CXJlc2VydmVkMjsKLQl1MzIJc3dfc3VwcG9ydDsKLQl1OAl0eF9yZXRyeWNvdW50OwotCXU4ICAgdHhfcmF0ZTsKLQl1MTYJdHhfY29udHJvbDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUgeworCXUxNiBzdGF0dXM7CisJdTE2IHJlc2VydmVkMTsKKwl1MTYgcmVzZXJ2ZWQyOworCXUzMiBzd19zdXBwb3J0OworCXU4IHR4X3JldHJ5Y291bnQ7CisJdTggdHhfcmF0ZTsKKwl1MTYgdHhfY29udHJvbDsKIAogCS8qLS0gODAyLjExIEhlYWRlciBJbmZvcm1hdGlvbiAtLSovCiAKLQl1MTYJZnJhbWVfY29udHJvbDsKLQl1MTYJZHVyYXRpb25faWQ7Ci0JdTgJYWRkcmVzczFbNl07Ci0JdTgJYWRkcmVzczJbNl07Ci0JdTgJYWRkcmVzczNbNl07Ci0JdTE2CXNlcXVlbmNlX2NvbnRyb2w7Ci0JdTgJYWRkcmVzczRbNl07Ci0JdTE2CWRhdGFfbGVuOyAvKiBsaXR0bGUgZW5kaWFuIGZvcm1hdCAqLworCXUxNiBmcmFtZV9jb250cm9sOworCXUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyZXNzMVs2XTsKKwl1OCBhZGRyZXNzMls2XTsKKwl1OCBhZGRyZXNzM1s2XTsKKwl1MTYgc2VxdWVuY2VfY29udHJvbDsKKwl1OCBhZGRyZXNzNFs2XTsKKwl1MTYgZGF0YV9sZW47CQkvKiBsaXR0bGUgZW5kaWFuIGZvcm1hdCAqLwogCiAJLyotLSA4MDIuMyBIZWFkZXIgSW5mb3JtYXRpb24gLS0qLwogCi0JdTgJZGVzdF9hZGRyWzZdOwotCXU4CXNyY19hZGRyWzZdOwotCXUxNglkYXRhX2xlbmd0aDsgLyogYmlnIGVuZGlhbiBmb3JtYXQgKi8KLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF90eF9mcmFtZV90OworCXU4IGRlc3RfYWRkcls2XTsKKwl1OCBzcmNfYWRkcls2XTsKKwl1MTYgZGF0YV9sZW5ndGg7CS8qIGJpZyBlbmRpYW4gZm9ybWF0ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3R4X2ZyYW1lX3Q7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb21tdW5pY2F0aW9uIEZyYW1lczogRmllbGQgTWFza3MgZm9yIFRyYW5zbWl0IEZyYW1lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLSBTdGF0dXMgRmllbGQgLS0qLwotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BQ0tFUlIJCQkoKHUxNilCSVQ1KQotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSCQkoKHUxNilCSVQzKQotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19ESVNDT04JCQkoKHUxNilCSVQyKQotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BR0VERVJSCQkoKHUxNilCSVQxKQotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUgkJKCh1MTYpQklUMCkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSCQkJKCh1MTYpQklUKDUpKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSCQkoKHUxNilCSVQoMykpCisjZGVmaW5lCQlIRkEzODR4X1RYU1RBVFVTX0RJU0NPTgkJCSgodTE2KUJJVCgyKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUgkJKCh1MTYpQklUKDEpKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUgkJKCh1MTYpQklUKDApKQogLyotLSBUcmFuc21pdCBDb250cm9sIEZpZWxkIC0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfVFhfQ0ZQT0xMCQkJKCh1MTYpQklUMTIpCi0jZGVmaW5lCQlIRkEzODR4X1RYX1BSU1QJCQkJKCh1MTYpQklUMTEpCi0jZGVmaW5lCQlIRkEzODR4X1RYX01BQ1BPUlQJCQkoKHUxNikoQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X1RYX05PRU5DUllQVAkJCSgodTE2KUJJVDcpCi0jZGVmaW5lCQlIRkEzODR4X1RYX1JFVFJZU1RSQVQJCQkoKHUxNikoQklUNiB8IEJJVDUpKQotI2RlZmluZQkJSEZBMzg0eF9UWF9TVFJVQ1RZUEUJCQkoKHUxNikoQklUNCB8IEJJVDMpKQotI2RlZmluZQkJSEZBMzg0eF9UWF9UWEVYCQkJCSgodTE2KUJJVDIpCi0jZGVmaW5lCQlIRkEzODR4X1RYX1RYT0sJCQkJKCh1MTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfTUFDUE9SVAkJCSgodTE2KShCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfU1RSVUNUWVBFCQkJKCh1MTYpKEJJVCg0KSB8IEJJVCgzKSkpCisjZGVmaW5lCQlIRkEzODR4X1RYX1RYRVgJCQkJKCh1MTYpQklUKDIpKQorI2RlZmluZQkJSEZBMzg0eF9UWF9UWE9LCQkJCSgodTE2KUJJVCgxKSkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbW11bmljYXRpb24gRnJhbWVzOiBUZXN0L0dldC9TZXQgRmllbGQgVmFsdWVzIGZvciBUcmFuc21pdCBGcmFtZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE2MjgsODMgKzQ5Miw1MyBAQAogCUhGQTM4NHhfVFhTVEFUVVNfRElTQ09OfEhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUnxcCiAJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUikpCiAKLSNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0FDS0VSUih2KQkoKHUxNikoKCh1MTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSKSkKLSNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0ZPUk1FUlIodikJKCh1MTYpKCgodTE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0ZPUk1FUlIpKQotI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTRElTQ09OKHYpCSgodTE2KSgoKHUxNikodikpICYgSEZBMzg0eF9UWFNUQVRVU19ESVNDT04pKQotI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTQUdFREVSUih2KQkoKHUxNikoKCh1MTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUikpCi0jZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNSRVRSWUVSUih2KQkoKHUxNikoKCh1MTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIpKQorI2RlZmluZQlIRkEzODR4X1RYX1NFVCh2LCBtLCBzKQkJKCgoKHUxNikodikpPDwoKHUxNikocykpKSYoKHUxNikobSkpKQogCi0jZGVmaW5lCUhGQTM4NHhfVFhfR0VUKHYsbSxzKQkJKCgoKHUxNikodikpJigodTE2KShtKSkpPj4oKHUxNikocykpKQotI2RlZmluZQlIRkEzODR4X1RYX1NFVCh2LG0scykJCSgoKCh1MTYpKHYpKTw8KCh1MTYpKHMpKSkmKCh1MTYpKG0pKSkKLQotI2RlZmluZQlIRkEzODR4X1RYX0NGUE9MTF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9DRlBPTEwsMTIpCi0jZGVmaW5lCUhGQTM4NHhfVFhfQ0ZQT0xMX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX0NGUE9MTCwxMikKLSNkZWZpbmUJSEZBMzg0eF9UWF9QUlNUX0dFVCh2KQkJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9QUlNULDExKQotI2RlZmluZQlIRkEzODR4X1RYX1BSU1RfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1BSU1QsMTEpCi0jZGVmaW5lCUhGQTM4NHhfVFhfTUFDUE9SVF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9NQUNQT1JULCA4KQogI2RlZmluZQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfTUFDUE9SVCwgOCkKLSNkZWZpbmUJSEZBMzg0eF9UWF9OT0VOQ1JZUFRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfTk9FTkNSWVBULCA3KQotI2RlZmluZQlIRkEzODR4X1RYX05PRU5DUllQVF9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9OT0VOQ1JZUFQsIDcpCi0jZGVmaW5lCUhGQTM4NHhfVFhfUkVUUllTVFJBVF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9SRVRSWVNUUkFULCA1KQotI2RlZmluZQlIRkEzODR4X1RYX1JFVFJZU1RSQVRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfUkVUUllTVFJBVCwgNSkKLSNkZWZpbmUJSEZBMzg0eF9UWF9TVFJVQ1RZUEVfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfU1RSVUNUWVBFLCAzKQogI2RlZmluZQlIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9TVFJVQ1RZUEUsIDMpCi0jZGVmaW5lCUhGQTM4NHhfVFhfVFhFWF9HRVQodikJCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfVFhFWCwgMikKICNkZWZpbmUJSEZBMzg0eF9UWF9UWEVYX1NFVCh2KQkJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9UWEVYLCAyKQotI2RlZmluZQlIRkEzODR4X1RYX1RYT0tfR0VUKHYpCQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1RYT0ssIDEpCiAjZGVmaW5lCUhGQTM4NHhfVFhfVFhPS19TRVQodikJCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfVFhPSywgMSkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbW11bmljYXRpb24gRnJhbWVzOiBSZWNlaXZlIEZyYW1lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLSBDb21tdW5pY2F0aW9uIEZyYW1lOiBSZWNlaXZlIEZyYW1lIFN0cnVjdHVyZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3J4X2ZyYW1lCi17Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3J4X2ZyYW1lIHsKIAkvKi0tIE1BQyByeCBkZXNjcmlwdG9yIChoZmEzODR4IGJ5dGUgb3JkZXIpIC0tKi8KLQl1MTYJc3RhdHVzOwotCXUzMgl0aW1lOwotCXU4CXNpbGVuY2U7Ci0JdTgJc2lnbmFsOwotCXU4CXJhdGU7Ci0JdTgJcnhfZmxvdzsKLQl1MTYJcmVzZXJ2ZWQxOwotCXUxNglyZXNlcnZlZDI7CisJdTE2IHN0YXR1czsKKwl1MzIgdGltZTsKKwl1OCBzaWxlbmNlOworCXU4IHNpZ25hbDsKKwl1OCByYXRlOworCXU4IHJ4X2Zsb3c7CisJdTE2IHJlc2VydmVkMTsKKwl1MTYgcmVzZXJ2ZWQyOwogCiAJLyotLSA4MDIuMTEgSGVhZGVyIEluZm9ybWF0aW9uICg4MDIuMTEgYnl0ZSBvcmRlcikgLS0qLwotCXUxNglmcmFtZV9jb250cm9sOwotCXUxNglkdXJhdGlvbl9pZDsKLQl1OAlhZGRyZXNzMVs2XTsKLQl1OAlhZGRyZXNzMls2XTsKLQl1OAlhZGRyZXNzM1s2XTsKLQl1MTYJc2VxdWVuY2VfY29udHJvbDsKLQl1OAlhZGRyZXNzNFs2XTsKLQl1MTYJZGF0YV9sZW47IC8qIGhmYTM4NHggKGxpdHRsZSBlbmRpYW4pIGZvcm1hdCAqLworCXUxNiBmcmFtZV9jb250cm9sOworCXUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyZXNzMVs2XTsKKwl1OCBhZGRyZXNzMls2XTsKKwl1OCBhZGRyZXNzM1s2XTsKKwl1MTYgc2VxdWVuY2VfY29udHJvbDsKKwl1OCBhZGRyZXNzNFs2XTsKKwl1MTYgZGF0YV9sZW47CQkvKiBoZmEzODR4IChsaXR0bGUgZW5kaWFuKSBmb3JtYXQgKi8KIAogCS8qLS0gODAyLjMgSGVhZGVyIEluZm9ybWF0aW9uIC0tKi8KLQl1OAlkZXN0X2FkZHJbNl07Ci0JdTgJc3JjX2FkZHJbNl07Ci0JdTE2CWRhdGFfbGVuZ3RoOyAvKiBJRUVFPyAoYmlnIGVuZGlhbikgZm9ybWF0ICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcnhfZnJhbWVfdDsKKwl1OCBkZXN0X2FkZHJbNl07CisJdTggc3JjX2FkZHJbNl07CisJdTE2IGRhdGFfbGVuZ3RoOwkvKiBJRUVFPyAoYmlnIGVuZGlhbikgZm9ybWF0ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3J4X2ZyYW1lX3Q7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb21tdW5pY2F0aW9uIEZyYW1lczogRmllbGQgTWFza3MgZm9yIFJlY2VpdmUgRnJhbWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tIE9mZnNldHMgLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SWF9EQVRBX0xFTl9PRkYJCQkoKHUxNik0NCkKLSNkZWZpbmUJCUhGQTM4NHhfUlhfODAyMTFIRFJfT0ZGCQkJKCh1MTYpMTQpCi0jZGVmaW5lCQlIRkEzODR4X1JYX0RBVEFfT0ZGCQkJKCh1MTYpNjApCiAKIC8qLS0gU3RhdHVzIEZpZWxkcyAtLSovCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEUJCSgodTE2KShCSVQxNSB8IEJJVDE0IHwgQklUMTMpKQotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUCQkoKHUxNikoQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX1VOREVDUgkJCSgodTE2KUJJVDEpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUgkJCSgodTE2KUJJVDApCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQJCSgodTE2KShCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfRkNTRVJSCQkJKCh1MTYpQklUKDApKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRlc3QvR2V0L1NldCBGaWVsZCBWYWx1ZXMgZm9yIFJlY2VpdmUgRnJhbWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEVfR0VUKHZhbHVlKQkoKHUxNikoKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFKSA+PiAxMykpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEVfU0VUKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTMpKQogI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh2YWx1ZSkJKCh1MTYpKCgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVCkgPj4gOCkpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfU0VUKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgOCkpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTVU5ERUNSKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX1VOREVDUikpCiAjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUikpCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRlJBTUUgU1RSVUNUVVJFUzogSW5mb3JtYXRpb24gVHlwZXMgYW5kIEluZm9ybWF0aW9uIEZyYW1lIFN0cnVjdHVyZXMKQEAgLTE3MTIsNyArNTQ2LDYgQEAKIEluZm9ybWF0aW9uIFR5cGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lCQlIRkEzODR4X0lUX0hBTkRPVkVSQUREUgkJCSgodTE2KTB4RjAwMFVMKQotI2RlZmluZQkJSEZBMzg0eF9JVF9IQU5ET1ZFUkRFQVVUSEFERFJFU1MJKCh1MTYpMHhGMDAxVUwpLy9BUCAxLjMuNwogI2RlZmluZQkJSEZBMzg0eF9JVF9DT01NVEFMTElFUwkJCSgodTE2KTB4RjEwMFVMKQogI2RlZmluZQkJSEZBMzg0eF9JVF9TQ0FOUkVTVUxUUwkJCSgodTE2KTB4RjEwMVVMKQogI2RlZmluZQkJSEZBMzg0eF9JVF9DSElORk9SRVNVTFRTCQkoKHUxNikweEYxMDJVTCkKQEAgLTE3MzAsMTI4ICs1NjMsMTEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBGcmFtZXM6IE5vdGlmaWNhdGlvbiBGcmFtZSBTdHJ1Y3R1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tICBOb3RpZmljYXRpb24gRnJhbWUsTUFDIE1nbXQ6IEhhbmRvdmVyIEFkZHJlc3MgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IYW5kb3ZlckFkZHIKLXsKLQl1MTYJZnJhbWVsZW47Ci0JdTE2CWluZm90eXBlOwotCXU4CWhhbmRvdmVyX2FkZHJbV0xBTl9CU1NJRF9MRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0hhbmRvdmVyQWRkcl90OwogCiAvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogQ29tbXVuaWNhdGlvbiBUYWxsaWVzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ29tbVRhbGxpZXMxNgotewotCXUxNgl0eHVuaWNhc3RmcmFtZXM7Ci0JdTE2CXR4bXVsdGljYXN0ZnJhbWVzOwotCXUxNgl0eGZyYWdtZW50czsKLQl1MTYJdHh1bmljYXN0b2N0ZXRzOwotCXUxNgl0eG11bHRpY2FzdG9jdGV0czsKLQl1MTYJdHhkZWZlcnJlZHRyYW5zOwotCXUxNgl0eHNpbmdsZXJldHJ5ZnJhbWVzOwotCXUxNgl0eG11bHRpcGxlcmV0cnlmcmFtZXM7Ci0JdTE2CXR4cmV0cnlsaW1pdGV4Y2VlZGVkOwotCXUxNgl0eGRpc2NhcmRzOwotCXUxNglyeHVuaWNhc3RmcmFtZXM7Ci0JdTE2CXJ4bXVsdGljYXN0ZnJhbWVzOwotCXUxNglyeGZyYWdtZW50czsKLQl1MTYJcnh1bmljYXN0b2N0ZXRzOwotCXUxNglyeG11bHRpY2FzdG9jdGV0czsKLQl1MTYJcnhmY3NlcnJvcnM7Ci0JdTE2CXJ4ZGlzY2FyZHNub2J1ZmZlcjsKLQl1MTYJdHhkaXNjYXJkc3dyb25nc2E7Ci0JdTE2CXJ4ZGlzY2FyZHN3ZXB1bmRlY3I7Ci0JdTE2CXJ4bXNnaW5tc2dmcmFnOwotCXUxNglyeG1zZ2luYmFkbXNnZnJhZzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Db21tVGFsbGllczE2X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMTYgeworCXUxNiB0eHVuaWNhc3RmcmFtZXM7CisJdTE2IHR4bXVsdGljYXN0ZnJhbWVzOworCXUxNiB0eGZyYWdtZW50czsKKwl1MTYgdHh1bmljYXN0b2N0ZXRzOworCXUxNiB0eG11bHRpY2FzdG9jdGV0czsKKwl1MTYgdHhkZWZlcnJlZHRyYW5zOworCXUxNiB0eHNpbmdsZXJldHJ5ZnJhbWVzOworCXUxNiB0eG11bHRpcGxlcmV0cnlmcmFtZXM7CisJdTE2IHR4cmV0cnlsaW1pdGV4Y2VlZGVkOworCXUxNiB0eGRpc2NhcmRzOworCXUxNiByeHVuaWNhc3RmcmFtZXM7CisJdTE2IHJ4bXVsdGljYXN0ZnJhbWVzOworCXUxNiByeGZyYWdtZW50czsKKwl1MTYgcnh1bmljYXN0b2N0ZXRzOworCXUxNiByeG11bHRpY2FzdG9jdGV0czsKKwl1MTYgcnhmY3NlcnJvcnM7CisJdTE2IHJ4ZGlzY2FyZHNub2J1ZmZlcjsKKwl1MTYgdHhkaXNjYXJkc3dyb25nc2E7CisJdTE2IHJ4ZGlzY2FyZHN3ZXB1bmRlY3I7CisJdTE2IHJ4bXNnaW5tc2dmcmFnOworCXUxNiByeG1zZ2luYmFkbXNnZnJhZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfQ29tbVRhbGxpZXMxNl90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMzIKLXsKLQl1MzIJdHh1bmljYXN0ZnJhbWVzOwotCXUzMgl0eG11bHRpY2FzdGZyYW1lczsKLQl1MzIJdHhmcmFnbWVudHM7Ci0JdTMyCXR4dW5pY2FzdG9jdGV0czsKLQl1MzIJdHhtdWx0aWNhc3RvY3RldHM7Ci0JdTMyCXR4ZGVmZXJyZWR0cmFuczsKLQl1MzIJdHhzaW5nbGVyZXRyeWZyYW1lczsKLQl1MzIJdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOwotCXUzMgl0eHJldHJ5bGltaXRleGNlZWRlZDsKLQl1MzIJdHhkaXNjYXJkczsKLQl1MzIJcnh1bmljYXN0ZnJhbWVzOwotCXUzMglyeG11bHRpY2FzdGZyYW1lczsKLQl1MzIJcnhmcmFnbWVudHM7Ci0JdTMyCXJ4dW5pY2FzdG9jdGV0czsKLQl1MzIJcnhtdWx0aWNhc3RvY3RldHM7Ci0JdTMyCXJ4ZmNzZXJyb3JzOwotCXUzMglyeGRpc2NhcmRzbm9idWZmZXI7Ci0JdTMyCXR4ZGlzY2FyZHN3cm9uZ3NhOwotCXUzMglyeGRpc2NhcmRzd2VwdW5kZWNyOwotCXUzMglyeG1zZ2lubXNnZnJhZzsKLQl1MzIJcnhtc2dpbmJhZG1zZ2ZyYWc7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ29tbVRhbGxpZXMzMl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Db21tVGFsbGllczMyIHsKKwl1MzIgdHh1bmljYXN0ZnJhbWVzOworCXUzMiB0eG11bHRpY2FzdGZyYW1lczsKKwl1MzIgdHhmcmFnbWVudHM7CisJdTMyIHR4dW5pY2FzdG9jdGV0czsKKwl1MzIgdHhtdWx0aWNhc3RvY3RldHM7CisJdTMyIHR4ZGVmZXJyZWR0cmFuczsKKwl1MzIgdHhzaW5nbGVyZXRyeWZyYW1lczsKKwl1MzIgdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOworCXUzMiB0eHJldHJ5bGltaXRleGNlZWRlZDsKKwl1MzIgdHhkaXNjYXJkczsKKwl1MzIgcnh1bmljYXN0ZnJhbWVzOworCXUzMiByeG11bHRpY2FzdGZyYW1lczsKKwl1MzIgcnhmcmFnbWVudHM7CisJdTMyIHJ4dW5pY2FzdG9jdGV0czsKKwl1MzIgcnhtdWx0aWNhc3RvY3RldHM7CisJdTMyIHJ4ZmNzZXJyb3JzOworCXUzMiByeGRpc2NhcmRzbm9idWZmZXI7CisJdTMyIHR4ZGlzY2FyZHN3cm9uZ3NhOworCXUzMiByeGRpc2NhcmRzd2VwdW5kZWNyOworCXUzMiByeG1zZ2lubXNnZnJhZzsKKwl1MzIgcnhtc2dpbmJhZG1zZ2ZyYWc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0NvbW1UYWxsaWVzMzJfdDsKIAogLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IFNjYW4gUmVzdWx0cyAmIFN1YmZpZWxkcy0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdFN1YgotewotCXUxNgljaGlkOwotCXUxNglhbmw7Ci0JdTE2CXNsOwotCXU4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKLQl1MTYJYmNuaW50OwotCXUxNgljYXBpbmZvOwotCWhmYTM4NHhfYnl0ZXN0cjMyX3QJc3NpZDsKLQl1OAlzdXBwcmF0ZXNbMTBdOyAvKiA4MDIuMTEgaW5mbyBlbGVtZW50ICovCi0JdTE2CXByb2JlcmVzcF9yYXRlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXN1bHRTdWJfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdFN1YiB7CisJdTE2IGNoaWQ7CisJdTE2IGFubDsKKwl1MTYgc2w7CisJdTggYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCXUxNiBiY25pbnQ7CisJdTE2IGNhcGluZm87CisJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOworCXU4IHN1cHByYXRlc1sxMF07CS8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KKwl1MTYgcHJvYmVyZXNwX3JhdGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X1NjYW5SZXN1bHRTdWJfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TY2FuUmVzdWx0Ci17Ci0JdTE2CXJzdmQ7Ci0JdTE2CXNjYW5yZWFzb247Ci0JaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3QKLQkJcmVzdWx0W0hGQTM4NHhfU0NBTlJFU1VMVF9NQVhdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXN1bHRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdCB7CisJdTE2IHJzdmQ7CisJdTE2IHNjYW5yZWFzb247CisJIGhmYTM4NHhfU2NhblJlc3VsdFN1Yl90IHJlc3VsdFtIRkEzODR4X1NDQU5SRVNVTFRfTUFYXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfU2NhblJlc3VsdF90OwogCiAvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogQ2hJbmZvIFJlc3VsdHMgJiBTdWJmaWVsZHMtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoSW5mb1Jlc3VsdFN1YgotewotCXUxNgljaGlkOwotCXUxNglhbmw7Ci0JdTE2CXBubDsKLQl1MTYJYWN0aXZlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWIgeworCXUxNiBjaGlkOworCXUxNiBhbmw7CisJdTE2IHBubDsKKwl1MTYgYWN0aXZlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdDsKIAotI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUJQklUMAotI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9QQ0ZBQ1RJVkUJQklUMQorI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUJQklUKDApCisjZGVmaW5lIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRQlCSVQoMSkKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaEluZm9SZXN1bHQKLXsKLQl1MTYJc2NhbmNoYW5uZWxzOwotCWhmYTM4NHhfQ2hJbmZvUmVzdWx0U3ViX3QKLQkJcmVzdWx0W0hGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ2hJbmZvUmVzdWx0X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoSW5mb1Jlc3VsdCB7CisJdTE2IHNjYW5jaGFubmVsczsKKwkgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdCByZXN1bHRbSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfQ2hJbmZvUmVzdWx0X3Q7CiAKIC8qLS0gIElucXVpcnkgRnJhbWUsIERpYWdub3NlOiBIb3N0IFNjYW4gUmVzdWx0cyAmIFN1YmZpZWxkcy0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSFNjYW5SZXN1bHRTdWIKLXsKLQl1MTYJY2hpZDsKLQl1MTYJYW5sOwotCXUxNglzbDsKLQl1OAlic3NpZFtXTEFOX0JTU0lEX0xFTl07Ci0JdTE2CWJjbmludDsKLQl1MTYJY2FwaW5mbzsKLQloZmEzODR4X2J5dGVzdHIzMl90CXNzaWQ7Ci0JdTgJc3VwcHJhdGVzWzEwXTsgLyogODAyLjExIGluZm8gZWxlbWVudCAqLwotCXUxNglwcm9iZXJlc3BfcmF0ZTsKLQl1MTYJYXRpbTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IU2NhblJlc3VsdFN1Yl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IU2NhblJlc3VsdFN1YiB7CisJdTE2IGNoaWQ7CisJdTE2IGFubDsKKwl1MTYgc2w7CisJdTggYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCXUxNiBiY25pbnQ7CisJdTE2IGNhcGluZm87CisJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOworCXU4IHN1cHByYXRlc1sxMF07CS8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KKwl1MTYgcHJvYmVyZXNwX3JhdGU7CisJdTE2IGF0aW07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0hTY2FuUmVzdWx0U3ViX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSFNjYW5SZXN1bHQKLXsKLQl1MTYJbnJlc3VsdDsKLQl1MTYJcnN2ZDsKLQloZmEzODR4X0hTY2FuUmVzdWx0U3ViX3QKLQkJcmVzdWx0W0hGQTM4NHhfSFNDQU5SRVNVTFRfTUFYXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IU2NhblJlc3VsdF90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IU2NhblJlc3VsdCB7CisJdTE2IG5yZXN1bHQ7CisJdTE2IHJzdmQ7CisJIGhmYTM4NHhfSFNjYW5SZXN1bHRTdWJfdCByZXN1bHRbSEZBMzg0eF9IU0NBTlJFU1VMVF9NQVhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9IU2NhblJlc3VsdF90OwogCiAvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IExpbmtTdGF0dXMgLS0qLwogCkBAIC0xODYzLDEwMCArNjc4LDY3IEBACiAjZGVmaW5lIEhGQTM4NHhfTElOS19BUF9JTlJBTkdFCQkoKHUxNik1KQogI2RlZmluZSBIRkEzODR4X0xJTktfQVNTT0NGQUlMCQkoKHUxNik2KQogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0xpbmtTdGF0dXMKLXsKLQl1MTYJbGlua3N0YXR1czsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9MaW5rU3RhdHVzX3Q7Ci0KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTGlua1N0YXR1cyB7CisJdTE2IGxpbmtzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0xpbmtTdGF0dXNfdDsKIAogLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBBc3NvY2lhdGlvblN0YXR1cyAoLS0qLwogCiAjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfU1RBQVNTT0MJKCh1MTYpMSkKICNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19SRUFTU09DCSgodTE2KTIpCi0jZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfRElTQVNTT0MJKCh1MTYpMykKLSNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19BU1NPQ0ZBSUwJKCh1MTYpNCkKICNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTAkoKHUxNik1KQogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0Fzc29jU3RhdHVzCi17Ci0JdTE2CWFzc29jc3RhdHVzOwotCXU4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Bc3NvY1N0YXR1cyB7CisJdTE2IGFzc29jc3RhdHVzOworCXU4IHN0YV9hZGRyW0VUSF9BTEVOXTsKIAkvKiBvbGRfYXBfYWRkciBpcyBvbmx5IHZhbGlkIGlmIGFzc29jc3RhdHVzID09IDIgKi8KLQl1OAlvbGRfYXBfYWRkcltXTEFOX0FERFJfTEVOXTsKLQl1MTYJcmVhc29uOwotCXUxNglyZXNlcnZlZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Bc3NvY1N0YXR1c190OworCXU4IG9sZF9hcF9hZGRyW0VUSF9BTEVOXTsKKwl1MTYgcmVhc29uOworCXUxNiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfQXNzb2NTdGF0dXNfdDsKIAogLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBBdXRoUmVxdWVzdCAoQVAgT25seSkgLS0qLwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0F1dGhSZXF1ZXN0Ci17Ci0JdTgJc3RhX2FkZHJbV0xBTl9BRERSX0xFTl07Ci0JdTE2CWFsZ29yaXRobTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9BdXRoUmVxX3Q7Ci0KLS8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogQXNzb2NSZXF1ZXN0IChBUCBPbmx5KSAtLSovCi0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXNzb2NSZXF1ZXN0Ci17Ci0JdTgJc3RhX2FkZHJbV0xBTl9BRERSX0xFTl07Ci0JdTE2CXR5cGU7Ci0JdTggICB3cGFfZGF0YVs4MF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXNzb2NSZXFfdDsKLQotCi0jZGVmaW5lIEhGQTM4NHhfQVNTT0NSRVFfVFlQRV9BU1NPQyAgICAgMAotI2RlZmluZSBIRkEzODR4X0FTU09DUkVRX1RZUEVfUkVBU1NPQyAgIDEKLQotLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBNSUMgRmFpbHVyZSAgKEFQIE9ubHkpIC0tKi8KLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NaWNGYWlsdXJlCi17Ci0JdTgJc2VuZGVyW1dMQU5fQUREUl9MRU5dOwotCXU4CWRlc3RbV0xBTl9BRERSX0xFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWljRmFpbHVyZV90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoUmVxdWVzdCB7CisJdTggc3RhX2FkZHJbRVRIX0FMRU5dOworCXUxNiBhbGdvcml0aG07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0F1dGhSZXFfdDsKIAogLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBQU1VzZXJDb3VudCAoQVAgT25seSkgLS0qLwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BTVXNlckNvdW50Ci17Ci0JdTE2CXVzZXJjbnQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFNVc2VyQ291bnRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUFNVc2VyQ291bnQgeworCXUxNiB1c2VyY250OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9QU1VzZXJDb3VudF90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0tleUlEQ2hhbmdlZAotewotCXU4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOwotCXUxNglrZXlpZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9LZXlJRENoYW5nZWRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfS2V5SURDaGFuZ2VkIHsKKwl1OCBzdGFfYWRkcltFVEhfQUxFTl07CisJdTE2IGtleWlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9LZXlJRENoYW5nZWRfdDsKIAogLyotLSAgQ29sbGVjdGlvbiBvZiBhbGwgSW5mIGZyYW1lcyAtLS0tLS0tLS0tLS0tLS0qLwogdHlwZWRlZiB1bmlvbiBoZmEzODR4X2luZm9kYXRhIHsKLQloZmEzODR4X0NvbW1UYWxsaWVzMTZfdAljb21tdGFsbGllczE2OwotCWhmYTM4NHhfQ29tbVRhbGxpZXMzMl90CWNvbW10YWxsaWVzMzI7Ci0JaGZhMzg0eF9TY2FuUmVzdWx0X3QJc2NhbnJlc3VsdDsKLQloZmEzODR4X0NoSW5mb1Jlc3VsdF90CWNoaW5mb3Jlc3VsdDsKLQloZmEzODR4X0hTY2FuUmVzdWx0X3QJaHNjYW5yZXN1bHQ7Ci0JaGZhMzg0eF9MaW5rU3RhdHVzX3QJbGlua3N0YXR1czsKLQloZmEzODR4X0Fzc29jU3RhdHVzX3QJYXNzb2NzdGF0dXM7Ci0JaGZhMzg0eF9BdXRoUmVxX3QJYXV0aHJlcTsKLQloZmEzODR4X1BTVXNlckNvdW50X3QJcHN1c2VyY250OwotCWhmYTM4NHhfS2V5SURDaGFuZ2VkX3QgIGtleWlkY2hhbmdlZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9pbmZvZGF0YV90OworCWhmYTM4NHhfQ29tbVRhbGxpZXMxNl90IGNvbW10YWxsaWVzMTY7CisJaGZhMzg0eF9Db21tVGFsbGllczMyX3QgY29tbXRhbGxpZXMzMjsKKwloZmEzODR4X1NjYW5SZXN1bHRfdCBzY2FucmVzdWx0OworCWhmYTM4NHhfQ2hJbmZvUmVzdWx0X3QgY2hpbmZvcmVzdWx0OworCWhmYTM4NHhfSFNjYW5SZXN1bHRfdCBoc2NhbnJlc3VsdDsKKwloZmEzODR4X0xpbmtTdGF0dXNfdCBsaW5rc3RhdHVzOworCWhmYTM4NHhfQXNzb2NTdGF0dXNfdCBhc3NvY3N0YXR1czsKKwloZmEzODR4X0F1dGhSZXFfdCBhdXRocmVxOworCWhmYTM4NHhfUFNVc2VyQ291bnRfdCBwc3VzZXJjbnQ7CisJaGZhMzg0eF9LZXlJRENoYW5nZWRfdCBrZXlpZGNoYW5nZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2luZm9kYXRhX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSW5mRnJhbWUKLXsKLQl1MTYJCQlmcmFtZWxlbjsKLQl1MTYJCQlpbmZvdHlwZTsKLQloZmEzODR4X2luZm9kYXRhX3QJaW5mbzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9JbmZGcmFtZV90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9JbmZGcmFtZSB7CisJdTE2IGZyYW1lbGVuOworCXUxNiBpbmZvdHlwZTsKKwloZmEzODR4X2luZm9kYXRhX3QgaW5mbzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfSW5mRnJhbWVfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVVNCIFBhY2tldCBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIFNob3VsZCBiZSBzZW50IHRvIHRoZSBjdHJsb3V0IGVuZHBvaW50ICovCi0jZGVmaW5lIEhGQTM4NHhfVVNCX0VOQlVMS0lOCTYKLQogLyogU2hvdWxkIGJlIHNlbnQgdG8gdGhlIGJ1bGtvdXQgZW5kcG9pbnQgKi8KICNkZWZpbmUgSEZBMzg0eF9VU0JfVFhGUk0JMAogI2RlZmluZSBIRkEzODR4X1VTQl9DTURSRVEJMQpAQCAtMTk2Niw3ICs3NDgsNiBAQAogI2RlZmluZSBIRkEzODR4X1VTQl9STUVNUkVRCTUKIAogLyogUmVjZWl2ZWQgZnJvbSB0aGUgYnVsa2luIGVuZHBvaW50ICovCi0jZGVmaW5lIEhGQTM4NHhfVVNCX0lTRlJNKGEpCSghKChhKSAmIDB4ODAwMCkpCiAjZGVmaW5lIEhGQTM4NHhfVVNCX0lTVFhGUk0oYSkJKCgoYSkgJiAweDkwMDApID09IDB4MTAwMCkKICNkZWZpbmUgSEZBMzg0eF9VU0JfSVNSWEZSTShhKQkoISgoYSkgJiAweDkwMDApKQogI2RlZmluZSBIRkEzODR4X1VTQl9JTkZPRlJNCTB4ODAwMApAQCAtMTk4MiwzODAgKzc2MywxMzUgQEAKIC8qIFJlcXVlc3QgKGJ1bGsgT1VUKSBwYWNrZXQgY29udGVudHMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfdHhmcm0gewotCWhmYTM4NHhfdHhfZnJhbWVfdAlkZXNjOwotCXU4CQkJZGF0YVtXTEFOX0RBVEFfTUFYTEVOXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfdHhmcm1fdDsKKwloZmEzODR4X3R4X2ZyYW1lX3QgZGVzYzsKKwl1OCBkYXRhW1dMQU5fREFUQV9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2JfdHhmcm1fdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfY21kcmVxIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQljbWQ7Ci0JdTE2CQlwYXJtMDsKLQl1MTYJCXBhcm0xOwotCXUxNgkJcGFybTI7Ci0JdTgJCXBhZFs1NF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2NtZHJlcV90OworCXUxNiB0eXBlOworCXUxNiBjbWQ7CisJdTE2IHBhcm0wOworCXUxNiBwYXJtMTsKKwl1MTYgcGFybTI7CisJdTggcGFkWzU0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiX2NtZHJlcV90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl93cmlkcmVxIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQlmcm1sZW47Ci0JdTE2CQlyaWQ7Ci0JdTgJCWRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3dyaWRyZXFfdDsKKwl1MTYgdHlwZTsKKwl1MTYgZnJtbGVuOworCXUxNiByaWQ7CisJdTggZGF0YVtIRkEzODR4X1JJRERBVEFfTUFYTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiX3dyaWRyZXFfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfcnJpZHJlcSB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZnJtbGVuOwotCXUxNgkJcmlkOwotCXU4CQlwYWRbNThdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ycmlkcmVxX3Q7CisJdTE2IHR5cGU7CisJdTE2IGZybWxlbjsKKwl1MTYgcmlkOworCXU4IHBhZFs1OF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9ycmlkcmVxX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3dtZW1yZXEgewotCXUxNgkJdHlwZTsKLQl1MTYJCWZybWxlbjsKLQl1MTYJCW9mZnNldDsKLQl1MTYJCXBhZ2U7Ci0JdTgJCWRhdGFbSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfd21lbXJlcV90OworCXUxNiB0eXBlOworCXUxNiBmcm1sZW47CisJdTE2IG9mZnNldDsKKwl1MTYgcGFnZTsKKwl1OCBkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl93bWVtcmVxX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JtZW1yZXEgewotCXUxNgkJdHlwZTsKLQl1MTYJCWZybWxlbjsKLQl1MTYJCW9mZnNldDsKLQl1MTYJCXBhZ2U7Ci0JdTgJCXBhZFs1Nl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3JtZW1yZXFfdDsKKwl1MTYgdHlwZTsKKwl1MTYgZnJtbGVuOworCXUxNiBvZmZzZXQ7CisJdTE2IHBhZ2U7CisJdTggcGFkWzU2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiX3JtZW1yZXFfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUmVzcG9uc2UgKGJ1bGsgSU4pIHBhY2tldCBjb250ZW50cyAqLwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9yeGZybSB7Ci0JaGZhMzg0eF9yeF9mcmFtZV90CWRlc2M7Ci0JdTgJCQlkYXRhW1dMQU5fREFUQV9NQVhMRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9yeGZybV90OworCWhmYTM4NHhfcnhfZnJhbWVfdCBkZXNjOworCXU4IGRhdGFbV0xBTl9EQVRBX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9yeGZybV90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9pbmZvZnJtIHsKLQl1MTYJCQl0eXBlOwotCWhmYTM4NHhfSW5mRnJhbWVfdAlpbmZvOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9pbmZvZnJtX3Q7CisJdTE2IHR5cGU7CisJaGZhMzg0eF9JbmZGcmFtZV90IGluZm87Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9pbmZvZnJtX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3N0YXR1c3Jlc3AgewotCXUxNgkJdHlwZTsKLQl1MTYJCXN0YXR1czsKLQl1MTYJCXJlc3AwOwotCXUxNgkJcmVzcDE7Ci0JdTE2CQlyZXNwMjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfY21kcmVzcF90OworCXUxNiB0eXBlOworCXUxNiBzdGF0dXM7CisJdTE2IHJlc3AwOworCXUxNiByZXNwMTsKKwl1MTYgcmVzcDI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9jbWRyZXNwX3Q7CiAKIHR5cGVkZWYgaGZhMzg0eF91c2JfY21kcmVzcF90IGhmYTM4NHhfdXNiX3dyaWRyZXNwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQlmcm1sZW47Ci0JdTE2CQlyaWQ7Ci0JdTgJCWRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3JyaWRyZXNwX3Q7CisJdTE2IHR5cGU7CisJdTE2IGZybWxlbjsKKwl1MTYgcmlkOworCXU4IGRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9ycmlkcmVzcF90OwogCiB0eXBlZGVmIGhmYTM4NHhfdXNiX2NtZHJlc3BfdCBoZmEzODR4X3VzYl93bWVtcmVzcF90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9ybWVtcmVzcCB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZnJtbGVuOwotCXU4CQlkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3JtZW1yZXNwX3Q7CisJdTE2IHR5cGU7CisJdTE2IGZybWxlbjsKKwl1OCBkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9ybWVtcmVzcF90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9idWZhdmFpbCB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZnJtbGVuOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9idWZhdmFpbF90OworCXUxNiB0eXBlOworCXUxNiBmcm1sZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9idWZhdmFpbF90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9lcnJvciB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZXJyb3J0eXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9lcnJvcl90OworCXUxNiB0eXBlOworCXUxNiBlcnJvcnR5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9lcnJvcl90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogVW5pb25zIGZvciBwYWNrYWdpbmcgYWxsIHRoZSBrbm93biBwYWNrZXQgdHlwZXMgdG9nZXRoZXIgKi8KIAogdHlwZWRlZiB1bmlvbiBoZmEzODR4X3VzYm91dCB7Ci0JdTE2CQkJdHlwZTsKLQloZmEzODR4X3VzYl90eGZybV90CXR4ZnJtOwotCWhmYTM4NHhfdXNiX2NtZHJlcV90CWNtZHJlcTsKLQloZmEzODR4X3VzYl93cmlkcmVxX3QJd3JpZHJlcTsKLQloZmEzODR4X3VzYl9ycmlkcmVxX3QJcnJpZHJlcTsKLQloZmEzODR4X3VzYl93bWVtcmVxX3QJd21lbXJlcTsKLQloZmEzODR4X3VzYl9ybWVtcmVxX3QJcm1lbXJlcTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JvdXRfdDsKKwl1MTYgdHlwZTsKKwloZmEzODR4X3VzYl90eGZybV90IHR4ZnJtOworCWhmYTM4NHhfdXNiX2NtZHJlcV90IGNtZHJlcTsKKwloZmEzODR4X3VzYl93cmlkcmVxX3Qgd3JpZHJlcTsKKwloZmEzODR4X3VzYl9ycmlkcmVxX3QgcnJpZHJlcTsKKwloZmEzODR4X3VzYl93bWVtcmVxX3Qgd21lbXJlcTsKKwloZmEzODR4X3VzYl9ybWVtcmVxX3Qgcm1lbXJlcTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNib3V0X3Q7CiAKIHR5cGVkZWYgdW5pb24gaGZhMzg0eF91c2JpbiB7Ci0JdTE2CQkJdHlwZTsKLQloZmEzODR4X3VzYl9yeGZybV90CXJ4ZnJtOwotCWhmYTM4NHhfdXNiX3R4ZnJtX3QJdHhmcm07Ci0JaGZhMzg0eF91c2JfaW5mb2ZybV90CWluZm9mcm07Ci0JaGZhMzg0eF91c2JfY21kcmVzcF90CWNtZHJlc3A7Ci0JaGZhMzg0eF91c2Jfd3JpZHJlc3BfdAl3cmlkcmVzcDsKLQloZmEzODR4X3VzYl9ycmlkcmVzcF90CXJyaWRyZXNwOwotCWhmYTM4NHhfdXNiX3dtZW1yZXNwX3QJd21lbXJlc3A7Ci0JaGZhMzg0eF91c2Jfcm1lbXJlc3BfdAlybWVtcmVzcDsKLQloZmEzODR4X3VzYl9idWZhdmFpbF90CWJ1ZmF2YWlsOwotCWhmYTM4NHhfdXNiX2Vycm9yX3QJdXNiZXJyb3I7Ci0JdTgJCQlib2d1c3BhZFszMDAwXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jpbl90OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QRCByZWNvcmQgc3RydWN0dXJlcy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcGNiX3BhcnRudW0KLXsKLQl1OAludW1bOF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3BjYl9wYXJ0bnVtX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3BjYl90cmFjZW51bQotewotCXU4CW51bVs4XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcGNiX3RyYWNlbnVtX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX25pY19zZXJpYWwKLXsKLQl1OAludW1bMTJdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNfc2VyaWFsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21ra19tZWFzdXJlbWVudHMKLXsKLQlkb3VibGUJY2Fycmllcl9mcmVxOwotCWRvdWJsZQlvY2N1cGllZF9iYW5kOwotCWRvdWJsZQlwb3dlcl9kZW5zaXR5OwotCWRvdWJsZQl0eF9zcHVyX2YxOwotCWRvdWJsZQl0eF9zcHVyX2YyOwotCWRvdWJsZQl0eF9zcHVyX2YzOwotCWRvdWJsZQl0eF9zcHVyX2Y0OwotCWRvdWJsZQl0eF9zcHVyX2wxOwotCWRvdWJsZQl0eF9zcHVyX2wyOwotCWRvdWJsZQl0eF9zcHVyX2wzOwotCWRvdWJsZQl0eF9zcHVyX2w0OwotCWRvdWJsZQlyeF9zcHVyX2YxOwotCWRvdWJsZQlyeF9zcHVyX2YyOwotCWRvdWJsZQlyeF9zcHVyX2wxOwotCWRvdWJsZQlyeF9zcHVyX2wyOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX25pY19yYW1zaXplCi17Ci0JdTgJc2l6ZVsxMl07IC8qIHVuaXRzIG9mIEtCICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX25pY19yYW1zaXplX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21maXN1cHJhbmdlCi17Ci0JdTE2CWlkOwotCXUxNgl2YXJpYW50OwotCXUxNglib3R0b207Ci0JdTE2CXRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWZpc3VwcmFuZ2VfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2UKLXsKLQl1MTYJaWQ7Ci0JdTE2CXZhcmlhbnQ7Ci0JdTE2CWJvdHRvbTsKLQl1MTYJdG9wOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9jZmlzdXByYW5nZV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNpZAotewotCXUxNglpZDsKLQl1MTYJdmFyaWFudDsKLQl1MTYJbWFqb3I7Ci0JdTE2CW1pbm9yOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNpZF90OwotCi0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZmRhY19tZWFzdXJlbWVudHMKLXsKLQl1MTYJdmFsdWVbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZmRhY19tZWFzdXJlbWVudHNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzCi17Ci0JdTE2CXZhbHVlWzBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl92Z2RhY19tZWFzdXJlbWVudHNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbGV2ZWxfY29tcF9tZWFzdXJlbWVudHMKLXsKLQl1MTYJdmFsdWVbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2xldmVsX2NvbXBjX21lYXN1cmVtZW50c190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9tYWNfYWRkcmVzcwotewotCXU4CWFkZHJbNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX21hY19hZGRyZXNzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21ra19jYWxsbmFtZQotewotCXU4CWNhbGxuYW1lWzhdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9ta2tfY2FsbG5hbWVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcmVnZG9tYWluCi17Ci0JdTE2CW51bWRvbWFpbnM7Ci0JdTE2CWRvbWFpbls1XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmVnZG9tYWluX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbAotewotCXUxNgljaF9iaXRtYXA7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbF90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9kZWZhdWx0X2NoYW5uZWwKLXsKLQl1MTYJY2hhbm5lbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfZGVmYXVsdF9jaGFubmVsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ByaXZhY3lfb3B0aW9uCi17Ci0JdTE2CWF2YWlsYWJsZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcHJpdmFjeV9vcHRpb25fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdGVtcHR5cGUKLXsKLQl1MTYJdHlwZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdGVtcHR5cGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcmVmZGFjX3NldHVwCi17Ci0JdTE2CWNoX3ZhbHVlWzE0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmVmZGFjX3NldHVwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ZnZGFjX3NldHVwCi17Ci0JdTE2CWNoX3ZhbHVlWzE0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdmdkYWNfc2V0dXBfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbGV2ZWxfY29tcF9zZXR1cAotewotCXUxNgljaF92YWx1ZVsxNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXBfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdHJpbWRhY19zZXR1cAotewotCXUxNgl0cmltaWRhYzsKLQl1MTYJdHJpbXFkYWM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXBfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaWZyX3NldHRpbmcKLXsKLQl1MTYJdmFsdWVbM107Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3Jmcl9zZXR0aW5nCi17Ci0JdTE2CXZhbHVlWzNdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9yZnJfc2V0dGluZ190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2Jhc2VsaW5lCi17Ci0JdTE2CXZhbHVlWzUwXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvdwotewotCXUzMgl2YWx1ZVszMl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfc2hhZG93X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZgotewotCXUzMgl2YWx1ZVsyMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZl90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3AKLXsKLQl1MTYJdmFsdWVbMTRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3BfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGkKLXsKLQl1MTYJdmFsdWVbMTddOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2FsaV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX25pY19jb25maWcKLXsKLQl1MTYJY29uZmlnX2JpdG1hcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljX2NvbmZpZ190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZm9fZGVsYXkKLXsKLQl1OCAgIGhmb19kZWxheTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9oZm9fZGVsYXlfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RzcAotewotCXUxNgl2YWx1ZVszMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0c3BfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpCi17Ci0JdTE2CXZhbHVlWzMwXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfZW5kX29mX3BkYQotewotCXUxNgljcmM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2VuZF9vZl9wZGFfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJlYwotewotCXUxNglsZW47IC8qIGluIHdvcmRzICovCi0JdTE2CWNvZGU7Ci0JdW5pb24gcGRyIHsKLQloZmEzODR4X3Bkcl9wY2JfcGFydG51bV90CXBjYl9wYXJ0bnVtOwotCWhmYTM4NHhfcGRyX3BjYl90cmFjZW51bV90CXBjYl90cmFjZW51bTsKLQloZmEzODR4X3Bkcl9uaWNfc2VyaWFsX3QJbmljX3NlcmlhbDsKLQloZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzX3QJbWtrX21lYXN1cmVtZW50czsKLQloZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZV90CW5pY19yYW1zaXplOwotCWhmYTM4NHhfcGRyX21maXN1cHJhbmdlX3QJbWZpc3VwcmFuZ2U7Ci0JaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2VfdAljZmlzdXByYW5nZTsKLQloZmEzODR4X3Bkcl9uaWNpZF90CQluaWNpZDsKLQloZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzX3QJcmVmZGFjX21lYXN1cmVtZW50czsKLQloZmEzODR4X3Bkcl92Z2RhY19tZWFzdXJlbWVudHNfdAl2Z2RhY19tZWFzdXJlbWVudHM7Ci0JaGZhMzg0eF9wZHJfbGV2ZWxfY29tcGNfbWVhc3VyZW1lbnRzX3QJbGV2ZWxfY29tcGNfbWVhc3VyZW1lbnRzOwotCWhmYTM4NHhfcGRyX21hY19hZGRyZXNzX3QJbWFjX2FkZHJlc3M7Ci0JaGZhMzg0eF9wZHJfbWtrX2NhbGxuYW1lX3QJbWtrX2NhbGxuYW1lOwotCWhmYTM4NHhfcGRyX3JlZ2RvbWFpbl90CQlyZWdkb21haW47Ci0JaGZhMzg0eF9wZHJfYWxsb3dlZF9jaGFubmVsX3QJYWxsb3dlZF9jaGFubmVsOwotCWhmYTM4NHhfcGRyX2RlZmF1bHRfY2hhbm5lbF90CWRlZmF1bHRfY2hhbm5lbDsKLQloZmEzODR4X3Bkcl9wcml2YWN5X29wdGlvbl90CXByaXZhY3lfb3B0aW9uOwotCWhmYTM4NHhfcGRyX3RlbXB0eXBlX3QJCXRlbXB0eXBlOwotCWhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cF90CXJlZmRhY19zZXR1cDsKLQloZmEzODR4X3Bkcl92Z2RhY19zZXR1cF90CXZnZGFjX3NldHVwOwotCWhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXBfdAlsZXZlbF9jb21wX3NldHVwOwotCWhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXBfdAl0cmltZGFjX3NldHVwOwotCWhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nX3QJaWZyX3NldHRpbmc7Ci0JaGZhMzg0eF9wZHJfcmZyX3NldHRpbmdfdAlyZnJfc2V0dGluZzsKLQloZmEzODR4X3Bkcl9oZmEzODYxX2Jhc2VsaW5lX3QJaGZhMzg2MV9iYXNlbGluZTsKLQloZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvd190CWhmYTM4NjFfc2hhZG93OwotCWhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZl90CWhmYTM4NjFfaWZyZjsKLQloZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3BfdAloZmEzODYxX2NoY2Fsc3A7Ci0JaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGlfdAloZmEzODYxX2NoY2FsaTsKLQloZmEzODR4X3Bkcl9uaWNfY29uZmlnX3QJbmljX2NvbmZpZzsKLQloZmEzODR4X2hmb19kZWxheV90ICAgICAgICAgICAgIGhmb19kZWxheTsKLQloZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdHNwX3QJaGZhMzg2MV9tYW5mX3Rlc3RzcDsKLQloZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdGlfdAloZmEzODYxX21hbmZfdGVzdGk7Ci0JaGZhMzg0eF9wZHJfZW5kX29mX3BkYV90CWVuZF9vZl9wZGE7Ci0KLQl9IGRhdGE7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyZWNfdDsKLQorCXUxNiB0eXBlOworCWhmYTM4NHhfdXNiX3J4ZnJtX3Qgcnhmcm07CisJaGZhMzg0eF91c2JfdHhmcm1fdCB0eGZybTsKKwloZmEzODR4X3VzYl9pbmZvZnJtX3QgaW5mb2ZybTsKKwloZmEzODR4X3VzYl9jbWRyZXNwX3QgY21kcmVzcDsKKwloZmEzODR4X3VzYl93cmlkcmVzcF90IHdyaWRyZXNwOworCWhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgcnJpZHJlc3A7CisJaGZhMzg0eF91c2Jfd21lbXJlc3BfdCB3bWVtcmVzcDsKKwloZmEzODR4X3VzYl9ybWVtcmVzcF90IHJtZW1yZXNwOworCWhmYTM4NHhfdXNiX2J1ZmF2YWlsX3QgYnVmYXZhaWw7CisJaGZhMzg0eF91c2JfZXJyb3JfdCB1c2JlcnJvcjsKKwl1OCBib2d1c3BhZFszMDAwXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiaW5fdDsKIAogI2lmZGVmIF9fS0VSTkVMX18KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tLSAgTUFDIHN0YXRlIHN0cnVjdHVyZSwgYXJndW1lbnQgdG8gYWxsIGZ1bmN0aW9ucyAtLQogLS0tICBBbHNvLCBhIGNvbGxlY3Rpb24gb2Ygc3VwcG9ydCB0eXBlcyAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9zdGF0dXNyZXN1bHQKLXsKLQl1MTYJc3RhdHVzOwotCXUxNglyZXNwMDsKLQl1MTYJcmVzcDE7Ci0JdTE2CXJlc3AyOwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9zdGF0dXNyZXN1bHQgeworCXUxNiBzdGF0dXM7CisJdTE2IHJlc3AwOworCXUxNiByZXNwMTsKKwl1MTYgcmVzcDI7CiB9IGhmYTM4NHhfY21kcmVzdWx0X3Q7CiAKIC8qIFVTQiBDb250cm9sIEV4Y2hhbmdlIChDVExYKToKQEAgLTIzNjUsMjAgKzkwMSwxNiBAQAogLyogVGhlIGZvbGxvd2luZyBoZmEzODR4Xyogc3RydWN0dXJlcyBhcmUgYXJndW1lbnRzIHRvCiAgKiB0aGUgdXNlcmNiKCkgZm9yIHRoZSBkaWZmZXJlbnQgQ1RMWCB0eXBlcy4KICAqLwotdHlwZWRlZiBoZmEzODR4X2NtZHJlc3VsdF90IGhmYTM4NHhfd3JpZHJlc3VsdF90OwotdHlwZWRlZiBoZmEzODR4X2NtZHJlc3VsdF90IGhmYTM4NHhfd21lbXJlc3VsdF90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JyaWRyZXN1bHQKLXsKLQl1MTYJCXJpZDsKLQljb25zdCB2b2lkCSpyaWRkYXRhOwotCXVuc2lnbmVkIGludAkJcmlkZGF0YV9sZW47Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JyaWRyZXN1bHQgeworCXUxNiByaWQ7CisJY29uc3Qgdm9pZCAqcmlkZGF0YTsKKwl1bnNpZ25lZCBpbnQgcmlkZGF0YV9sZW47CiB9IGhmYTM4NHhfcnJpZHJlc3VsdF90OwogCiBlbnVtIGN0bHhfc3RhdGUgewotCUNUTFhfU1RBUlQgPSAwLAkvKiBTdGFydCBzdGF0ZSwgbm90IHF1ZXVlZCAqLworCUNUTFhfU1RBUlQgPSAwLAkJLyogU3RhcnQgc3RhdGUsIG5vdCBxdWV1ZWQgKi8KIAotCUNUTFhfQ09NUExFVEUsCS8qIENUTFggc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCAqLworCUNUTFhfQ09NUExFVEUsCQkvKiBDVExYIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgKi8KIAlDVExYX1JFUV9GQUlMRUQsCS8qIE9VVCBVUkIgY29tcGxldGVkIHcvIGVycm9yICovCiAKIAlDVExYX1BFTkRJTkcsCQkvKiBRdWV1ZWQsIGRhdGEgdmFsaWQgKi8KQEAgLTIzODYsMTE0ICs5MTgsOTggQEAKIAlDVExYX1JFUV9DT01QTEVURSwJLyogT1VUIFVSQiBjb21wbGV0ZSAqLwogCUNUTFhfUkVTUF9DT01QTEVURQkvKiBJTiBVUkIgcmVjZWl2ZWQgKi8KIH07Ci10eXBlZGVmIGVudW0gY3RseF9zdGF0ZSAgQ1RMWF9TVEFURTsKK3R5cGVkZWYgZW51bSBjdGx4X3N0YXRlIENUTFhfU1RBVEU7CiAKIHN0cnVjdCBoZmEzODR4X3VzYmN0bHg7CiBzdHJ1Y3QgaGZhMzg0eDsKIAotdHlwZWRlZiB2b2lkICgqY3RseF9jbWRjYl90KSggc3RydWN0IGhmYTM4NHgqLCBjb25zdCBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4KiApOwordHlwZWRlZiB2b2lkICgqY3RseF9jbWRjYl90KSAoc3RydWN0IGhmYTM4NHggKiwgY29uc3Qgc3RydWN0IGhmYTM4NHhfdXNiY3RseCAqKTsKIAotdHlwZWRlZiB2b2lkICgqY3RseF91c2VyY2JfdCkoCi0Jc3RydWN0IGhmYTM4NHgJKmh3LAotCXZvaWQJCSpjdGx4cmVzdWx0LAotCXZvaWQJCSp1c2VyY2JfZGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpjdGx4X3VzZXJjYl90KSAoc3RydWN0IGhmYTM4NHggKmh3LAorCQkJICAgICAgIHZvaWQgKmN0bHhyZXN1bHQsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4Ci17Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKLQlzaXplX3QJCQlvdXRidWZzaXplOwotCWhmYTM4NHhfdXNib3V0X3QJb3V0YnVmOwkJLyogcGt0IGJ1ZiBmb3IgT1VUICovCi0JaGZhMzg0eF91c2Jpbl90CQlpbmJ1ZjsJCS8qIHBrdCBidWYgZm9yIElOKGEgY29weSkgKi8KKwlzaXplX3Qgb3V0YnVmc2l6ZTsKKwloZmEzODR4X3VzYm91dF90IG91dGJ1ZjsJLyogcGt0IGJ1ZiBmb3IgT1VUICovCisJaGZhMzg0eF91c2Jpbl90IGluYnVmOwkvKiBwa3QgYnVmIGZvciBJTihhIGNvcHkpICovCiAKLQlDVExYX1NUQVRFCQlzdGF0ZTsJCS8qIFRyYWNrcyBydW5uaW5nIHN0YXRlICovCisJQ1RMWF9TVEFURSBzdGF0ZTsJLyogVHJhY2tzIHJ1bm5pbmcgc3RhdGUgKi8KIAotCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7Ci0Jdm9sYXRpbGUgaW50CQlyZWFwYWJsZTsJLyogRm9vZCBmb3IgdGhlIHJlYXBlciB0YXNrICovCisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwl2b2xhdGlsZSBpbnQgcmVhcGFibGU7CS8qIEZvb2QgZm9yIHRoZSByZWFwZXIgdGFzayAqLwogCi0JY3RseF9jbWRjYl90CQljbWRjYjsJCS8qIEFzeW5jIGNvbW1hbmQgY2FsbGJhY2sgKi8KLQljdGx4X3VzZXJjYl90CQl1c2VyY2I7CQkvKiBBc3luYyB1c2VyIGNhbGxiYWNrLCAqLwotCXZvaWQJCQkqdXNlcmNiX2RhdGE7CS8qICBhdCBDVExYIGNvbXBsZXRpb24gICovCisJY3RseF9jbWRjYl90IGNtZGNiOwkvKiBBc3luYyBjb21tYW5kIGNhbGxiYWNrICovCisJY3RseF91c2VyY2JfdCB1c2VyY2I7CS8qIEFzeW5jIHVzZXIgY2FsbGJhY2ssICovCisJdm9pZCAqdXNlcmNiX2RhdGE7CS8qICBhdCBDVExYIGNvbXBsZXRpb24gICovCiAKLQlpbnQJCQl2YXJpYW50OwkvKiBJZGVudGlmaWVzIGNtZCB2YXJpYW50ICovCisJaW50IHZhcmlhbnQ7CQkvKiBJZGVudGlmaWVzIGNtZCB2YXJpYW50ICovCiB9IGhmYTM4NHhfdXNiY3RseF90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYmN0bHhxCi17Ci0Jc3BpbmxvY2tfdAkJbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXBlbmRpbmc7Ci0Jc3RydWN0IGxpc3RfaGVhZAlhY3RpdmU7Ci0Jc3RydWN0IGxpc3RfaGVhZAljb21wbGV0aW5nOwotCXN0cnVjdCBsaXN0X2hlYWQJcmVhcGFibGU7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYmN0bHhxIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQgY29tcGxldGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlYXBhYmxlOwogfSBoZmEzODR4X3VzYmN0bHhxX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTQ4NHhfbWV0YWNtZAotewotCXUxNgkJY21kOwordHlwZWRlZiBzdHJ1Y3QgaGZhNDg0eF9tZXRhY21kIHsKKwl1MTYgY21kOwogCi0JdTE2ICAgICAgICAgIHBhcm0wOwotCXUxNiAgICAgICAgICBwYXJtMTsKLQl1MTYgICAgICAgICAgcGFybTI7CisJdTE2IHBhcm0wOworCXUxNiBwYXJtMTsKKwl1MTYgcGFybTI7CiAKIAloZmEzODR4X2NtZHJlc3VsdF90IHJlc3VsdDsKIH0gaGZhMzg0eF9tZXRhY21kX3Q7CiAKLSNkZWZpbmUJTUFYX1BSSVNNMl9HUlBfQUREUgkxNgogI2RlZmluZQlNQVhfR1JQX0FERFIJCTMyCi0jZGVmaW5lIFdMQU5fQ09NTUVOVF9NQVgJODAgIC8qIE1heC4gbGVuZ3RoIG9mIHVzZXIgY29tbWVudCBzdHJpbmcuICovCisjZGVmaW5lIFdMQU5fQ09NTUVOVF9NQVgJODAJLyogTWF4LiBsZW5ndGggb2YgdXNlciBjb21tZW50IHN0cmluZy4gKi8KIAotI2RlZmluZSBNTV9TQVRfUENGCQkoQklUMTQpCi0jZGVmaW5lIE1NX0dDU0RfUENGCQkoQklUMTUpCi0jZGVmaW5lIE1NX0dDU0RfUENGX0VCCQkoQklUMTQgfCBCSVQxNSkKLQotI2RlZmluZSBXTEFOX1NUQVRFX1NUT1BQRUQJMCAgIC8qIE5ldHdvcmsgaXMgbm90IGFjdGl2ZS4gKi8KLSNkZWZpbmUgV0xBTl9TVEFURV9TVEFSVEVECTEgICAvKiBOZXR3b3JrIGhhcyBiZWVuIHN0YXJ0ZWQuICovCi0KLSNkZWZpbmUgV0xBTl9BVVRIX01BWCAgICAgICAgICAgNjAgIC8qIE1heC4gIyBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19NQVgJCTYwICAvKiBNYXguICMgb2Ygc3RhdGlvbnMgaW4gYW4gYWNjZXNzIGxpc3QuICovCi0jZGVmaW5lIFdMQU5fQUNDRVNTX05PTkUJMCAgIC8qIE5vIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19BTEwJCTEgICAvKiBBbGwgc3RhdGlvbnMgbWF5IGJlIGF1dGhlbnRpY2F0ZWQuICovCi0jZGVmaW5lIFdMQU5fQUNDRVNTX0FMTE9XCTIgICAvKiBBdXRoZW50aWNhdGUgb25seSAiYWxsb3dlZCIgc3RhdGlvbnMuICovCi0jZGVmaW5lIFdMQU5fQUNDRVNTX0RFTlkJMyAgIC8qIERvIG5vdCBhdXRoZW50aWNhdGUgImRlbmllZCIgc3RhdGlvbnMuICovCisjZGVmaW5lIFdMQU5fQVVUSF9NQVggICAgICAgICAgIDYwCS8qIE1heC4gIyBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19NQVgJCTYwCS8qIE1heC4gIyBvZiBzdGF0aW9ucyBpbiBhbiBhY2Nlc3MgbGlzdC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfTk9ORQkwCS8qIE5vIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTEwJCTEJLyogQWxsIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTExPVwkyCS8qIEF1dGhlbnRpY2F0ZSBvbmx5ICJhbGxvd2VkIiBzdGF0aW9ucy4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfREVOWQkzCS8qIERvIG5vdCBhdXRoZW50aWNhdGUgImRlbmllZCIgc3RhdGlvbnMuICovCiAKIC8qIFhYWCBUaGVzZSBhcmUgZ29pbmcgYXdheSBBU0FQICovCi10eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYXV0aGxpc3QKLXsKLQl1bnNpZ25lZCBpbnQJY250OwotCXU4CWFkZHJbV0xBTl9BVVRIX01BWF1bV0xBTl9BRERSX0xFTl07Ci0JdTgJYXNzb2NbV0xBTl9BVVRIX01BWF07Cit0eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYXV0aGxpc3QgeworCXVuc2lnbmVkIGludCBjbnQ7CisJdTggYWRkcltXTEFOX0FVVEhfTUFYXVtFVEhfQUxFTl07CisJdTggYXNzb2NbV0xBTl9BVVRIX01BWF07CiB9IHByaXNtMnN0YV9hdXRobGlzdF90OwogCi10eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYWNjZXNzbGlzdAotewotCXVuc2lnbmVkIGludAltb2RpZnk7Ci0JdW5zaWduZWQgaW50CWNudDsKLQl1OAlhZGRyW1dMQU5fQUNDRVNTX01BWF1bV0xBTl9BRERSX0xFTl07Ci0JdW5zaWduZWQgaW50CWNudDE7Ci0JdTgJYWRkcjFbV0xBTl9BQ0NFU1NfTUFYXVtXTEFOX0FERFJfTEVOXTsKK3R5cGVkZWYgc3RydWN0IHByaXNtMnN0YV9hY2Nlc3NsaXN0IHsKKwl1bnNpZ25lZCBpbnQgbW9kaWZ5OworCXVuc2lnbmVkIGludCBjbnQ7CisJdTggYWRkcltXTEFOX0FDQ0VTU19NQVhdW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBpbnQgY250MTsKKwl1OCBhZGRyMVtXTEFOX0FDQ0VTU19NQVhdW0VUSF9BTEVOXTsKIH0gcHJpc20yc3RhX2FjY2Vzc2xpc3RfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eAotewordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eCB7CiAJLyogVVNCIHN1cHBvcnQgZGF0YSAqLwotCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7Ci0Jc3RydWN0IHVyYgkJcnhfdXJiOwotCXN0cnVjdCBza19idWZmCQkqcnhfdXJiX3NrYjsKLQlzdHJ1Y3QgdXJiCQl0eF91cmI7Ci0Jc3RydWN0IHVyYgkJY3RseF91cmI7Ci0JaGZhMzg0eF91c2JvdXRfdAl0eGJ1ZmY7Ci0JaGZhMzg0eF91c2JjdGx4cV90CWN0bHhxOwotCXN0cnVjdCB0aW1lcl9saXN0CXJlcXRpbWVyOwotCXN0cnVjdCB0aW1lcl9saXN0CXJlc3B0aW1lcjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiOworCXN0cnVjdCB1cmIgcnhfdXJiOworCXN0cnVjdCBza19idWZmICpyeF91cmJfc2tiOworCXN0cnVjdCB1cmIgdHhfdXJiOworCXN0cnVjdCB1cmIgY3RseF91cmI7CisJaGZhMzg0eF91c2JvdXRfdCB0eGJ1ZmY7CisJaGZhMzg0eF91c2JjdGx4cV90IGN0bHhxOworCXN0cnVjdCB0aW1lcl9saXN0IHJlcXRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHJlc3B0aW1lcjsKIAotCXN0cnVjdCB0aW1lcl9saXN0CXRocm90dGxlOworCXN0cnVjdCB0aW1lcl9saXN0IHRocm90dGxlOwogCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CXJlYXBlcl9iaDsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJY29tcGxldGlvbl9iaDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcmVhcGVyX2JoOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBjb21wbGV0aW9uX2JoOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0CXVzYl93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB1c2Jfd29yazsKIAotCXVuc2lnbmVkIGxvbmcJCXVzYl9mbGFnczsKKwl1bnNpZ25lZCBsb25nIHVzYl9mbGFnczsKICNkZWZpbmUgVEhST1RUTEVfUlgJMAogI2RlZmluZSBUSFJPVFRMRV9UWAkxCiAjZGVmaW5lIFdPUktfUlhfSEFMVAkyCkBAIC0yNTAxLDI5MiArMTAxNywxNjggQEAKICNkZWZpbmUgV09SS19SWF9SRVNVTUUJNAogI2RlZmluZSBXT1JLX1RYX1JFU1VNRQk1CiAKLQl1bnNpZ25lZCBzaG9ydAkJcmVxX3RpbWVyX2RvbmU6MTsKLQl1bnNpZ25lZCBzaG9ydAkJcmVzcF90aW1lcl9kb25lOjE7CisJdW5zaWduZWQgc2hvcnQgcmVxX3RpbWVyX2RvbmU6MTsKKwl1bnNpZ25lZCBzaG9ydCByZXNwX3RpbWVyX2RvbmU6MTsKIAotCWludCAgICAgICAgICAgICAgICAgICAgIGVuZHBfaW47Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgZW5kcF9vdXQ7CisJaW50IGVuZHBfaW47CisJaW50IGVuZHBfb3V0OwogCi0JaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfZmNzOwotCWludCAgICAgICAgICAgICAgICAgICAgIHNuaWZmX2NoYW5uZWw7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfdHJ1bmNhdGU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZoZHI7CisJaW50IHNuaWZmX2ZjczsKKwlpbnQgc25pZmZfY2hhbm5lbDsKKwlpbnQgc25pZmZfdHJ1bmNhdGU7CisJaW50IHNuaWZmaGRyOwogCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgY21kcTsJICAgICAgICAvKiB3YWl0IHF1ZXVlIGl0c2VsZiAqLworCXdhaXRfcXVldWVfaGVhZF90IGNtZHE7CS8qIHdhaXQgcXVldWUgaXRzZWxmICovCiAKIAkvKiBDb250cm9sbGVyIHN0YXRlICovCi0JdTMyCQlzdGF0ZTsKLQl1MzIJCWlzYXA7Ci0JdTgJCXBvcnRfZW5hYmxlZFtIRkEzODR4X05VTVBPUlRTX01BWF07CisJdTMyIHN0YXRlOworCXUzMiBpc2FwOworCXU4IHBvcnRfZW5hYmxlZFtIRkEzODR4X05VTVBPUlRTX01BWF07CiAKIAkvKiBEb3dubG9hZCBzdXBwb3J0ICovCi0JdW5zaWduZWQgaW50CQkJCWRsc3RhdGU7Ci0JaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90CWJ1ZmluZm87Ci0JdTE2CQkJCWRsdGltZW91dDsKKwl1bnNpZ25lZCBpbnQgZGxzdGF0ZTsKKwloZmEzODR4X2Rvd25sb2FkYnVmZmVyX3QgYnVmaW5mbzsKKwl1MTYgZGx0aW1lb3V0OwogCi0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZmxhZzsgICAgLyogdG8gc2lnbmFsIHNjYW4gY29tbGV0ZSAqLwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9hcDsgICAgICAgIC8qIGFyZSB3ZSBqb2luZWQgdG8gYSBzcGVjaWZpYyBhcCAqLwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9yZXRyaWVzOyAgIC8qIG51bWJlciBvZiBqb2luIHJldHJpZXMgdGlsbCB3ZSBmYWlsICovCi0JaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QgICBqb2lucmVxOyAgICAgICAgLyogam9pbiByZXF1ZXN0IHNhdmVkIGRhdGEgKi8KKwlpbnQgc2NhbmZsYWc7CQkvKiB0byBzaWduYWwgc2NhbiBjb21sZXRlICovCisJaW50IGpvaW5fYXA7CQkvKiBhcmUgd2Ugam9pbmVkIHRvIGEgc3BlY2lmaWMgYXAgKi8KKwlpbnQgam9pbl9yZXRyaWVzOwkvKiBudW1iZXIgb2Ygam9pbiByZXRyaWVzIHRpbGwgd2UgZmFpbCAqLworCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7CS8qIGpvaW4gcmVxdWVzdCBzYXZlZCBkYXRhICovCiAKLQl3bGFuZGV2aWNlX3QgICAgICAgICAgICAqd2xhbmRldjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXY7CiAJLyogVGltZXIgdG8gYWxsb3cgZm9yIHRoZSBkZWZlcnJlZCBwcm9jZXNzaW5nIG9mIGxpbmtzdGF0dXMgbWVzc2FnZXMgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgCWxpbmtfYmg7CisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfYmg7CiAKLSAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICAgICAgY29tbXNxdWFsX2JoOwotCWhmYTM4NHhfY29tbXNxdWFsaXR5X3QgIHF1YWw7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJY29tbXNxdWFsX3RpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjb21tc3F1YWxfYmg7CisJaGZhMzg0eF9jb21tc3F1YWxpdHlfdCBxdWFsOworCXN0cnVjdCB0aW1lcl9saXN0IGNvbW1zcXVhbF90aW1lcjsKIAogCXUxNiBsaW5rX3N0YXR1czsKIAl1MTYgbGlua19zdGF0dXNfbmV3OwotCXN0cnVjdCBza19idWZmX2hlYWQgICAgICAgIGF1dGhxOworCXN0cnVjdCBza19idWZmX2hlYWQgYXV0aHE7CiAKIAkvKiBBbmQgaGVyZSB3ZSBoYXZlIHN0dWZmIHRoYXQgdXNlZCB0byBiZSBpbiBwcml2ICovCiAKIAkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KLQl1bnNpZ25lZCBpbnQJCXByZXNuaWZmX3BvcnRfdHlwZTsKLQl1MTYJCXByZXNuaWZmX3dlcGZsYWdzOwotCXUzMgkJZG90MTFfZGVzaXJlZF9ic3NfdHlwZTsKKwl1bnNpZ25lZCBpbnQgcHJlc25pZmZfcG9ydF90eXBlOworCXUxNiBwcmVzbmlmZl93ZXBmbGFnczsKKwl1MzIgZG90MTFfZGVzaXJlZF9ic3NfdHlwZTsKIAotCWludCAgICAgICAgICAgICBkYm1hZGp1c3Q7CisJaW50IGRibWFkanVzdDsKIAogCS8qIEdyb3VwIEFkZHJlc3NlcyAtIHJpZ2h0IG5vdywgdGhlcmUgYXJlIHVwIHRvIGEgdG90YWwKLQlvZiBNQVhfR1JQX0FERFIgZ3JvdXAgYWRkcmVzc2VzICovCi0JdTgJCWRvdDExX2dycF9hZGRyW01BWF9HUlBfQUREUl1bV0xBTl9BRERSX0xFTl07Ci0JdW5zaWduZWQgaW50CQlkb3QxMV9ncnBjbnQ7CisJICAgb2YgTUFYX0dSUF9BRERSIGdyb3VwIGFkZHJlc3NlcyAqLworCXU4IGRvdDExX2dycF9hZGRyW01BWF9HUlBfQUREUl1bRVRIX0FMRU5dOworCXVuc2lnbmVkIGludCBkb3QxMV9ncnBjbnQ7CiAKIAkvKiBDb21wb25lbnQgSWRlbnRpdGllcyAqLwotCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfbmljOwotCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfcHJpX2Z3OwotCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfc3RhX2Z3OwotCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfYXBfZnc7Ci0JdTE2CQkJbW1fbW9kczsKKwloZmEzODR4X2NvbXBpZGVudF90IGlkZW50X25pYzsKKwloZmEzODR4X2NvbXBpZGVudF90IGlkZW50X3ByaV9mdzsKKwloZmEzODR4X2NvbXBpZGVudF90IGlkZW50X3N0YV9mdzsKKwloZmEzODR4X2NvbXBpZGVudF90IGlkZW50X2FwX2Z3OworCXUxNiBtbV9tb2RzOwogCiAJLyogU3VwcGxpZXIgY29tcGF0aWJpbGl0eSByYW5nZXMgKi8KLQloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9tZmk7Ci0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfY2ZpOwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX3ByaTsKLQloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9zdGE7Ci0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfYXA7CisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9zdXBfbWZpOworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfc3VwX2NmaTsKKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX3N1cF9wcmk7CisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9zdXBfc3RhOworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfc3VwX2FwOwogCiAJLyogQWN0b3IgY29tcGF0aWJpbGl0eSByYW5nZXMgKi8KLQloZmEzODR4X2NhcGxldmVsX3QJY2FwX2FjdF9wcmlfY2ZpOyAvKiBwcmkgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCi0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3Rfc3RhX2NmaTsgLyogc3RhIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X3N0YV9tZmk7IC8qIHN0YSBmL3cgdG8gbW9kZW0gaW50ZXJmYWNlICovCi0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfYXBfY2ZpOyAgLyogYXAgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCi0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfYXBfbWZpOyAgLyogYXAgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X3ByaV9jZmk7CS8qIHByaSBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9zdGFfY2ZpOwkvKiBzdGEgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3Rfc3RhX21maTsJLyogc3RhIGYvdyB0byBtb2RlbSBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9hcF9jZmk7CS8qIGFwIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X2FwX21maTsJLyogYXAgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLwogCi0JdTMyCQkJcHN1c2VyY291bnQ7ICAvKiBQb3dlciBzYXZlIHVzZXIgY291bnQuICovCi0JaGZhMzg0eF9Db21tVGFsbGllczMyX3QJdGFsbGllczsgICAgICAvKiBDb21tdW5pY2F0aW9uIHRhbGxpZXMuICovCi0JdTgJCQljb21tZW50W1dMQU5fQ09NTUVOVF9NQVgrMV07IC8qIFVzZXIgY29tbWVudCAqLworCXUzMiBwc3VzZXJjb3VudDsJLyogUG93ZXIgc2F2ZSB1c2VyIGNvdW50LiAqLworCWhmYTM4NHhfQ29tbVRhbGxpZXMzMl90IHRhbGxpZXM7CS8qIENvbW11bmljYXRpb24gdGFsbGllcy4gKi8KKwl1OCBjb21tZW50W1dMQU5fQ09NTUVOVF9NQVggKyAxXTsJLyogVXNlciBjb21tZW50ICovCiAKIAkvKiBDaGFubmVsIEluZm8gcmVxdWVzdCByZXN1bHRzIChBUCBvbmx5KSAqLwogCXN0cnVjdCB7Ci0JCWF0b21pY190CQlkb25lOwotCQl1OAkJCWNvdW50OwotCQloZmEzODR4X0NoSW5mb1Jlc3VsdF90CXJlc3VsdHM7CisJCWF0b21pY190IGRvbmU7CisJCXU4IGNvdW50OworCQloZmEzODR4X0NoSW5mb1Jlc3VsdF90IHJlc3VsdHM7CiAJfSBjaGFubmVsX2luZm87CiAKLQloZmEzODR4X0luZkZyYW1lX3QgICAgICAqc2NhbnJlc3VsdHM7CisJaGZhMzg0eF9JbmZGcmFtZV90ICpzY2FucmVzdWx0czsKIAotCi0gICAgICAgIHByaXNtMnN0YV9hdXRobGlzdF90CWF1dGhsaXN0OyAgICAgLyogQXV0aGVudGljYXRlZCBzdGF0aW9uIGxpc3QuICovCi0JdW5zaWduZWQgaW50CQkJYWNjZXNzbW9kZTsgICAvKiBBY2Nlc3MgbW9kZS4gKi8KLSAgICAgICAgcHJpc20yc3RhX2FjY2Vzc2xpc3RfdAlhbGxvdzsgICAgICAgIC8qIEFsbG93ZWQgc3RhdGlvbiBsaXN0LiAqLwotICAgICAgICBwcmlzbTJzdGFfYWNjZXNzbGlzdF90CWRlbnk7ICAgICAgICAgLyogRGVuaWVkIHN0YXRpb24gbGlzdC4gKi8KKwlwcmlzbTJzdGFfYXV0aGxpc3RfdCBhdXRobGlzdDsJLyogQXV0aGVudGljYXRlZCBzdGF0aW9uIGxpc3QuICovCisJdW5zaWduZWQgaW50IGFjY2Vzc21vZGU7CS8qIEFjY2VzcyBtb2RlLiAqLworCXByaXNtMnN0YV9hY2Nlc3NsaXN0X3QgYWxsb3c7CS8qIEFsbG93ZWQgc3RhdGlvbiBsaXN0LiAqLworCXByaXNtMnN0YV9hY2Nlc3NsaXN0X3QgZGVueTsJLyogRGVuaWVkIHN0YXRpb24gbGlzdC4gKi8KIAogfSBoZmEzODR4X3Q7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXZvaWQKLWhmYTM4NHhfY3JlYXRlKAotCWhmYTM4NHhfdCAqaHcsCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYik7Ci0KK3ZvaWQgaGZhMzg0eF9jcmVhdGUoaGZhMzg0eF90ICpodywgc3RydWN0IHVzYl9kZXZpY2UgKnVzYik7CiB2b2lkIGhmYTM4NHhfZGVzdHJveShoZmEzODR4X3QgKmh3KTsKIAogaW50Ci1oZmEzODR4X2NvcmVyZXNldCggaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpOwotaW50Ci1oZmEzODR4X2RydnJfY2hpbmZvcmVzdWx0cyggaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyggaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKLWludAotaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkKiBidWYsIHUzMiBsZW4pOwotaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbik7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9oYW5kb3ZlciggaGZhMzg0eF90ICpodywgdTggKmFkZHIpOwotaW50Ci1oZmEzODR4X2RydnJfaG9zdHNjYW5yZXN1bHRzKCBoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX2xvd19sZXZlbChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKTsKLWludAotaGZhMzg0eF9kcnZyX21taV9yZWFkKGhmYTM4NHhfdCAqaHcsIHUzMiBhZGRyZXNzLCB1MzIgKnJlc3VsdCk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9tbWlfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGFkZHJlc3MsIHUzMiBkYXRhKTsKLWludAotaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MzIgZXhlYWRkcik7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkKiBidWYsIHUzMiBsZW4pOwotaW50Ci1oZmEzODR4X2RydnJfcmVhZHBkYShoZmEzODR4X3QgKmh3LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwotaW50Ci1oZmEzODR4X2RydnJfc2NhbnJlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOworaGZhMzg0eF9jb3JlcmVzZXQoaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpOworaW50IGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyhoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7CitpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7CitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcpOworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOworaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUzMiBleGVhZGRyKTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOworaW50IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqaHcsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CitpbnQgaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpidWYsIHUxNiBsZW4pOwogCi1pbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKLQotc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICp2YWwpCitzdGF0aWMgaW5saW5lIGludCBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqdmFsKQogewotCWludAkJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCByaWQsIHZhbCwgc2l6ZW9mKHUxNikpOwotCWlmICggcmVzdWx0ID09IDAgKSB7Ci0JCSooKHUxNiopdmFsKSA9IGhmYTM4NHgyaG9zdF8xNigqKCh1MTYqKXZhbCkpOwotCX0KKwlpZiAocmVzdWx0ID09IDApCisJCSooKHUxNiAqKSB2YWwpID0gbGUxNl90b19jcHUoKigodTE2ICopIHZhbCkpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnMzIoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqdmFsKQorc3RhdGljIGlubGluZSBpbnQgaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHUxNiB2YWwpCiB7Ci0JaW50CQlyZXN1bHQgPSAwOwotCi0JcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgcmlkLCB2YWwsIHNpemVvZih1MzIpKTsKLQlpZiAoIHJlc3VsdCA9PSAwICkgewotCQkqKCh1MzIqKXZhbCkgPSBoZmEzODR4Mmhvc3RfMzIoKigodTMyKil2YWwpKTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHUxNiB2YWwpCi17Ci0JdTE2IHZhbHVlID0gaG9zdDJoZmEzODR4XzE2KHZhbCk7Ci0JcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWczMihoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB1MzIgdmFsKQotewotCXUzMiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8zMih2YWwpOworCXUxNiB2YWx1ZSA9IGNwdV90b19sZTE2KHZhbCk7CiAJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKIH0KIAogaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAgICAgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICAgICAgICByaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgKnVzZXJjYl9kYXRhKTsKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICpodywKKwkJCSAgICAgdTE2IHJpZCwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogaW50CiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgcmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpOworCQkJICAgICB1MTYgcmlkLAorCQkJICAgICB2b2lkICpidWYsCisJCQkgICAgIHUxNiBsZW4sIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdTE2IHZhbCkKIHsKLQl1MTYgdmFsdWUgPSBob3N0MmhmYTM4NHhfMTYodmFsKTsKKwl1MTYgdmFsdWUgPSBjcHVfdG9fbGUxNih2YWwpOwogCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKLQkJCQkJICAgIE5VTEwgLCBOVUxMKTsKKwkJCQkJICAgIE5VTEwsIE5VTEwpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kcnZyX3NldGNvbmZpZzMyX2FzeW5jKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHUzMiB2YWwpCi17Ci0JdTMyIHZhbHVlID0gaG9zdDJoZmEzODR4XzMyKHZhbCk7Ci0JcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpLAotCQkJCQkgICAgTlVMTCAsIE5VTEwpOwotfQoraW50IGhmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwordm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIAotCitpbnQgaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOworaW50IGhmYTM4NHhfY21kX2Rpc2FibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOworaW50IGhmYTM4NHhfY21kX2FsbG9jYXRlKGhmYTM4NHhfdCAqaHcsIHUxNiBsZW4pOworaW50IGhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICpodywgdTE2IGVuYWJsZSk7CiBpbnQKLWhmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Ci12b2lkCi1oZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLQotaW50Ci1oZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOwotaW50Ci1oZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKLWludAotaGZhMzg0eF9jbWRfZGlhZ25vc2UoaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfY21kX2FsbG9jYXRlKGhmYTM4NHhfdCAqaHcsIHUxNiBsZW4pOwotaW50Ci1oZmEzODR4X2NtZF90cmFuc21pdChoZmEzODR4X3QgKmh3LCB1MTYgcmVjbGFpbSwgdTE2IHFvcywgdTE2IGZpZCk7Ci1pbnQKLWhmYTM4NHhfY21kX2NsZWFycGVyc2lzdChoZmEzODR4X3QgKmh3LCB1MTYgZmlkKTsKLWludAotaGZhMzg0eF9jbWRfYWNjZXNzKGhmYTM4NHhfdCAqaHcsIHUxNiB3cml0ZSwgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKLWludAotaGZhMzg0eF9jbWRfbW9uaXRvcihoZmEzODR4X3QgKmh3LCB1MTYgZW5hYmxlKTsKLWludAotaGZhMzg0eF9jbWRfZG93bmxvYWQoCi0JaGZhMzg0eF90ICpodywKLQl1MTYgbW9kZSwKLQl1MTYgbG93YWRkciwKLQl1MTYgaGlnaGFkZHIsCi0JdTE2IGNvZGVsZW4pOwotaW50Ci1oZmEzODR4X2NtZF9hdXhfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIGludCBmb3JjZSk7Ci1pbnQKLWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2NvcHlfZnJvbV9iYXAoCi0JaGZhMzg0eF90ICpodywKLQl1MTYJYmFwLAotCXUxNglpZCwKLQl1MTYJb2Zmc2V0LAotCXZvaWQJKmJ1ZiwKLQl1bnNpZ25lZCBpbnQJbGVuKTsKLWludAotaGZhMzg0eF9jb3B5X3RvX2JhcCgKLQloZmEzODR4X3QgKmh3LAotCXUxNgliYXAsCi0JdTE2CWlkLAotCXUxNglvZmZzZXQsCi0Jdm9pZAkqYnVmLAotCXVuc2lnbmVkIGludAlsZW4pOwotdm9pZAotaGZhMzg0eF9jb3B5X2Zyb21fYXV4KAotCWhmYTM4NHhfdCAqaHcsCi0JdTMyCWNhcmRhZGRyLAotCXUzMglhdXhjdGwsCi0Jdm9pZAkqYnVmLAotCXVuc2lnbmVkIGludAlsZW4pOwotdm9pZAotaGZhMzg0eF9jb3B5X3RvX2F1eCgKLQloZmEzODR4X3QgKmh3LAotCXUzMgljYXJkYWRkciwKLQl1MzIJYXV4Y3RsLAotCXZvaWQJKmJ1ZiwKLQl1bnNpZ25lZCBpbnQJbGVuKTsKK2hmYTM4NHhfY21kX2Rvd25sb2FkKGhmYTM4NHhfdCAqaHcsCisJCSAgICAgdTE2IG1vZGUsIHUxNiBsb3dhZGRyLCB1MTYgaGlnaGFkZHIsIHUxNiBjb2RlbGVuKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotI2VuZGlmICAvKiBfSEZBMzg0eF9IICovCisjZW5kaWYgLyogX0hGQTM4NHhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKaW5kZXggOGE3NWI1MC4uODg4MTk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCkBAIC0xMTAsMTAgKzExMCw2IEBACiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0jZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCi0KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEzMCw4ICsxMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CiAKICNkZWZpbmUgU1VCTUlUX1VSQih1LGYpICB1c2Jfc3VibWl0X3VyYih1LGYpCiAKQEAgLTE1MCw2OSArMTQ1LDQzIEBACiAjaW5jbHVkZSAiaGZhMzg0eC5oIgogI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIENvbnN0YW50cyAqLwotCi1lbnVtIGNtZF9tb2RlCi17Ci0gIERPV0FJVCA9IDAsCi0gIERPQVNZTkMKK2VudW0gY21kX21vZGUgeworCURPV0FJVCA9IDAsCisJRE9BU1lOQwogfTsKIHR5cGVkZWYgZW51bSBjbWRfbW9kZSBDTURfTU9ERTsKIAogI2RlZmluZSBUSFJPVFRMRV9KSUZGSUVTCShIWi84KQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCisjZGVmaW5lIFVSQl9BU1lOQ19VTkxJTksgMAorI2RlZmluZSBVU0JfUVVFVUVfQlVMSyAwCiAKICNkZWZpbmUgUk9VTkRVUDY0KGEpICgoKGEpKzYzKSZ+NjMpCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCi1leHRlcm4gaW50IHByaXNtMl9kZWJ1ZzsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCiAjaWZkZWYgREVCVUdfVVNCCi1zdGF0aWMgdm9pZAotZGJwcmludF91cmIoc3RydWN0IHVyYiogdXJiKTsKK3N0YXRpYyB2b2lkIGRicHJpbnRfdXJiKHN0cnVjdCB1cmIgKnVyYik7CiAjZW5kaWYKIAogc3RhdGljIHZvaWQKLWhmYTM4NHhfaW50X3J4bW9uaXRvcigKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsCi0JaGZhMzg0eF91c2Jfcnhmcm1fdCAqcnhmcm0pOworaGZhMzg0eF9pbnRfcnhtb25pdG9yKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jfcnhmcm1fdCAqcnhmcm0pOwogCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQKLXN1Ym1pdF9yeF91cmIoaGZhMzg0eF90ICpodywgZ2ZwX3QgZmxhZ3MpOworc3RhdGljIGludCBzdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IGZsYWdzKTsKIAotc3RhdGljIGludAotc3VibWl0X3R4X3VyYihoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXJiICp0eF91cmIsIGdmcF90IGZsYWdzKTsKK3N0YXRpYyBpbnQgc3VibWl0X3R4X3VyYihoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXJiICp0eF91cmIsIGdmcF90IGZsYWdzKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogQ2FsbGJhY2tzICovCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkCi1oZmEzODR4X2N0bHhvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYm91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKIHN0YXRpYyB2b2lkCiBoZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2Jpbik7CiAKIHN0YXRpYyB2b2lkCiBoZmEzODR4X3VzYm91dF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCk7CkBAIC0yMjMsMTIzICsxOTIsOTQgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBwcmlzbTIgdXNiIGNvbW1hbmQgcXVldWUgKi8KIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiY3RseHFfcnVuKGhmYTM4NHhfdCAqaHcpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90ICpodyk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiY3RseF9yZXNwdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpOwogCi1zdGF0aWMgaW50Ci1oZmEzODR4X3VzYmN0bHhfc3VibWl0KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKK3N0YXRpYyBpbnQgaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CiAKLXN0YXRpYyB2b2lkCi11bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKK3N0YXRpYyB2b2lkIHVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOwogCi1zdHJ1Y3QgdXNiY3RseF9jb21wbGV0b3IKLXsKLQlpbnQgKCpjb21wbGV0ZSkoc3RydWN0IHVzYmN0bHhfY29tcGxldG9yKik7CitzdHJ1Y3QgdXNiY3RseF9jb21wbGV0b3IgeworCWludCAoKmNvbXBsZXRlKSAoc3RydWN0IHVzYmN0bHhfY29tcGxldG9yICopOwogfTsKIHR5cGVkZWYgc3RydWN0IHVzYmN0bHhfY29tcGxldG9yIHVzYmN0bHhfY29tcGxldG9yX3Q7CiAKIHN0YXRpYyBpbnQKIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgKmNvbXBsZXRvcik7CisJCQkgICAgICBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCwKKwkJCSAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgKmNvbXBsZXRvcik7CiAKIHN0YXRpYyBpbnQKIHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfY2JfcnJpZChoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CitzdGF0aWMgdm9pZCBoZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOwogCiBzdGF0aWMgaW50CiB1c2JjdGx4X2dldF9zdGF0dXMoY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90ICpjbWRyZXNwLAotICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCk7CisJCSAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCk7CiAKIHN0YXRpYyB2b2lkCiB1c2JjdGx4X2dldF9ycmlkcmVzdWx0KGNvbnN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgKnJyaWRyZXNwLAotICAgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3JyaWRyZXN1bHRfdCAqcmVzdWx0KTsKKwkJICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBMb3cgbGV2ZWwgcmVxL3Jlc3AgQ1RMWCBmb3JtYXR0ZXJzIGFuZCBzdWJtaXR0ZXJzICovCiBzdGF0aWMgaW50Ci1oZmEzODR4X2RvY21kKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQloZmEzODR4X21ldGFjbWRfdCAqY21kLAotCWN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSk7CitoZmEzODR4X2RvY21kKGhmYTM4NHhfdCAqaHcsCisJICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICBoZmEzODR4X21ldGFjbWRfdCAqY21kLAorCSAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogc3RhdGljIGludAotaGZhMzg0eF9kb3JyaWQoCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglyaWQsCi0Jdm9pZAkqcmlkZGF0YSwKLQl1bnNpZ25lZCBpbnQJcmlkZGF0YWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpOworaGZhMzg0eF9kb3JyaWQoaGZhMzg0eF90ICpodywKKwkgICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICAgdTE2IHJpZCwKKwkgICAgICAgdm9pZCAqcmlkZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogc3RhdGljIGludAotaGZhMzg0eF9kb3dyaWQoCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglyaWQsCi0Jdm9pZAkqcmlkZGF0YSwKLQl1bnNpZ25lZCBpbnQJcmlkZGF0YWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpOworaGZhMzg0eF9kb3dyaWQoaGZhMzg0eF90ICpodywKKwkgICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICAgdTE2IHJpZCwKKwkgICAgICAgdm9pZCAqcmlkZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogc3RhdGljIGludAotaGZhMzg0eF9kb3JtZW0oCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglwYWdlLAotCXUxNglvZmZzZXQsCi0Jdm9pZAkqZGF0YSwKLQl1bnNpZ25lZCBpbnQJbGVuLAotCWN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSk7CitoZmEzODR4X2Rvcm1lbShoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcGFnZSwKKwkgICAgICAgdTE2IG9mZnNldCwKKwkgICAgICAgdm9pZCAqZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpOwogCiBzdGF0aWMgaW50Ci1oZmEzODR4X2Rvd21lbSgKLQloZmEzODR4X3QgKmh3LAotCUNNRF9NT0RFIG1vZGUsCi0JdTE2CXBhZ2UsCi0JdTE2CW9mZnNldCwKLQl2b2lkCSpkYXRhLAotCXVuc2lnbmVkIGludAlsZW4sCi0JY3RseF9jbWRjYl90IGNtZGNiLAotCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAotCXZvaWQJKnVzZXJjYl9kYXRhKTsKK2hmYTM4NHhfZG93bWVtKGhmYTM4NHhfdCAqaHcsCisJICAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgIHUxNiBwYWdlLAorCSAgICAgICB1MTYgb2Zmc2V0LAorCSAgICAgICB2b2lkICpkYXRhLAorCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCSAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKLXN0YXRpYyBpbnQKLWhmYTM4NHhfaXNnb29kX3BkcmNvZGUodTE2IHBkcmNvZGUpOworc3RhdGljIGludCBoZmEzODR4X2lzZ29vZF9wZHJjb2RlKHUxNiBwZHJjb2RlKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGN0bHhzdHIoQ1RMWF9TVEFURSBzKQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpjdGx4c3RyKENUTFhfU1RBVEUgcykKIHsKLQlzdGF0aWMgY29uc3QgY2hhciogY3RseF9zdHJbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqY3RseF9zdHJbXSA9IHsKIAkJIkluaXRpYWwgc3RhdGUiLAogCQkiQ29tcGxldGUiLAogCQkiUmVxdWVzdCBmYWlsZWQiLApAQCAtMzUyLDM2ICsyOTIsMzYgQEAKIAlyZXR1cm4gY3RseF9zdHJbc107CiB9OwogCi0KLXN0YXRpYyBpbmxpbmUgaGZhMzg0eF91c2JjdGx4X3QqCi1nZXRfYWN0aXZlX2N0bHgoaGZhMzg0eF90ICpodykKK3N0YXRpYyBpbmxpbmUgaGZhMzg0eF91c2JjdGx4X3QgKmdldF9hY3RpdmVfY3RseChoZmEzODR4X3QgKmh3KQogewogCXJldHVybiBsaXN0X2VudHJ5KGh3LT5jdGx4cS5hY3RpdmUubmV4dCwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOwogfQogCi0KICNpZmRlZiBERUJVR19VU0IKLXZvaWQKLWRicHJpbnRfdXJiKHN0cnVjdCB1cmIqIHVyYikKK3ZvaWQgZGJwcmludF91cmIoc3RydWN0IHVyYiAqdXJiKQogewotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+cGlwZT0weCUwOHhcbiIsIHVyYi0+cGlwZSk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGF0dXM9MHglMDh4XG4iLCB1cmItPnN0YXR1cyk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9mbGFncz0weCUwOHhcbiIsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dHJhbnNmZXJfYnVmZmVyPTB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCl1cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPTB4JTA4eFxuIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmFjdHVhbF9sZW5ndGg9MHglMDh4XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+YmFuZHdpZHRoPTB4JTA4eFxuIiwgdXJiLT5iYW5kd2lkdGgpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c2V0dXBfcGFja2V0KGN0bCk9MHglMDh4XG4iLCAodW5zaWduZWQgaW50KXVyYi0+c2V0dXBfcGFja2V0KTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnN0YXJ0X2ZyYW1lKGlzby9pcnEpPTB4JTA4eFxuIiwgdXJiLT5zdGFydF9mcmFtZSk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5pbnRlcnZhbChpcnEpPTB4JTA4eFxuIiwgdXJiLT5pbnRlcnZhbCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5lcnJvcl9jb3VudChpc28pPTB4JTA4eFxuIiwgdXJiLT5lcnJvcl9jb3VudCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT50aW1lb3V0PTB4JTA4eFxuIiwgdXJiLT50aW1lb3V0KTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmNvbnRleHQ9MHglMDh4XG4iLCAodW5zaWduZWQgaW50KXVyYi0+Y29udGV4dCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5jb21wbGV0ZT0weCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpdXJiLT5jb21wbGV0ZSk7CisJcHJfZGVidWcoInVyYi0+cGlwZT0weCUwOHhcbiIsIHVyYi0+cGlwZSk7CisJcHJfZGVidWcoInVyYi0+c3RhdHVzPTB4JTA4eFxuIiwgdXJiLT5zdGF0dXMpOworCXByX2RlYnVnKCJ1cmItPnRyYW5zZmVyX2ZsYWdzPTB4JTA4eFxuIiwgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJcHJfZGVidWcoInVyYi0+dHJhbnNmZXJfYnVmZmVyPTB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludCl1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJcHJfZGVidWcoInVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0weCUwOHhcbiIsCisJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJcHJfZGVidWcoInVyYi0+YWN0dWFsX2xlbmd0aD0weCUwOHhcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJcHJfZGVidWcoInVyYi0+YmFuZHdpZHRoPTB4JTA4eFxuIiwgdXJiLT5iYW5kd2lkdGgpOworCXByX2RlYnVnKCJ1cmItPnNldHVwX3BhY2tldChjdGwpPTB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludCl1cmItPnNldHVwX3BhY2tldCk7CisJcHJfZGVidWcoInVyYi0+c3RhcnRfZnJhbWUoaXNvL2lycSk9MHglMDh4XG4iLAorCSAgICAgICB1cmItPnN0YXJ0X2ZyYW1lKTsKKwlwcl9kZWJ1ZygidXJiLT5pbnRlcnZhbChpcnEpPTB4JTA4eFxuIiwgdXJiLT5pbnRlcnZhbCk7CisJcHJfZGVidWcoInVyYi0+ZXJyb3JfY291bnQoaXNvKT0weCUwOHhcbiIsIHVyYi0+ZXJyb3JfY291bnQpOworCXByX2RlYnVnKCJ1cmItPnRpbWVvdXQ9MHglMDh4XG4iLCB1cmItPnRpbWVvdXQpOworCXByX2RlYnVnKCJ1cmItPmNvbnRleHQ9MHglMDh4XG4iLCAodW5zaWduZWQgaW50KXVyYi0+Y29udGV4dCk7CisJcHJfZGVidWcoInVyYi0+Y29tcGxldGU9MHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KXVyYi0+Y29tcGxldGUpOwogfQogI2VuZGlmCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHN1Ym1pdF9yeF91cmIKICoKQEAgLTM5OCwxNCArMzM4LDExIEBACiAqIENhbGwgY29udGV4dDoKICoJQW55CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXN1Ym1pdF9yeF91cmIoaGZhMzg0eF90ICpodywgZ2ZwX3QgbWVtZmxhZ3MpCitzdGF0aWMgaW50IHN1Ym1pdF9yeF91cmIoaGZhMzg0eF90ICpodywgZ2ZwX3QgbWVtZmxhZ3MpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgcmVzdWx0OwogCi0JREJGRU5URVI7Ci0KIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihoZmEzODR4X3VzYmluX3QpKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKQEAgLTQxNCwyMSArMzUxLDIyIEBACiAKIAkvKiBQb3N0IHRoZSBJTiB1cmIgKi8KIAl1c2JfZmlsbF9idWxrX3VyYigmaHctPnJ4X3VyYiwgaHctPnVzYiwKLQkgICAgICAgICAgICAgIGh3LT5lbmRwX2luLAotCSAgICAgICAgICAgICAgc2tiLT5kYXRhLCBzaXplb2YoaGZhMzg0eF91c2Jpbl90KSwKLQkgICAgICAgICAgICAgIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2ssIGh3LT53bGFuZGV2KTsKKwkJCSAgaHctPmVuZHBfaW4sCisJCQkgIHNrYi0+ZGF0YSwgc2l6ZW9mKGhmYTM4NHhfdXNiaW5fdCksCisJCQkgIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2ssIGh3LT53bGFuZGV2KTsKIAogCWh3LT5yeF91cmJfc2tiID0gc2tiOwogCiAJcmVzdWx0ID0gLUVOT0xJTks7Ci0JaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJiAhdGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYgIXRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCXJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5yeF91cmIsIG1lbWZsYWdzKTsKIAogCQkvKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gcmVzZXQgdGhlIFJYIHBpcGUgKi8KIAkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJCSAgICAgICAgICAgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7Ci0JCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKQogCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJCX0KIAl9CkBAIC00MzksOSArMzc3LDcgQEAKIAkJaHctPnJ4X3VyYl9za2IgPSBOVUxMOwogCX0KIAotIGRvbmU6Ci0KLQlEQkZFWElUOworZG9uZToKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NjMsMjQgKzM5OSwyMyBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCUFueQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50Ci1zdWJtaXRfdHhfdXJiKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCB1cmIgKnR4X3VyYiwgZ2ZwX3QgbWVtZmxhZ3MpCitzdGF0aWMgaW50IHN1Ym1pdF90eF91cmIoaGZhMzg0eF90ICpodywgc3RydWN0IHVyYiAqdHhfdXJiLCBnZnBfdCBtZW1mbGFncykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaHctPndsYW5kZXYtPm5ldGRldjsKIAlpbnQgcmVzdWx0OwogCi0JREJGRU5URVI7Ci0KIAlyZXN1bHQgPSAtRU5PTElOSzsKLQlpZiAoIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSApIHsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAKLQkJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJiAhdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSB7CisJCWlmICghaHctPndsYW5kZXYtPmh3cmVtb3ZlZAorCQkgICAgJiYgIXRlc3RfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCQlyZXN1bHQgPSBTVUJNSVRfVVJCKHR4X3VyYiwgbWVtZmxhZ3MpOwogCiAJCQkvKiBUZXN0IHdoZXRoZXIgd2UgbmVlZCB0byByZXNldCB0aGUgVFggcGlwZSAqLwogCQkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKLQkJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkJICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKIAkJCQlzZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOwogCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAwKSB7CkBAIC00ODksOCArNDI0LDYgQEAKIAkJfQogCX0KIAotCURCRkVYSVQ7Ci0KIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MTAsMjcgKzQ0MywyMiBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MgKGJ5IGRlc2lnbikKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKIAloZmEzODR4X3QgKmh3ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoZmEzODR4LCB1c2Jfd29yayk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGh3LT53bGFuZGV2LT5uZXRkZXY7CiAKLQlEQkZFTlRFUjsKLQogCS8qIERvbid0IGJvdGhlciB0cnlpbmcgdG8gcmVzZXQgYW55dGhpbmcgaWYgdGhlIHBsdWcKIAkgKiBoYXMgYmVlbiBwdWxsZWQgLi4uCiAJICovCi0JaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkgewotCQlEQkZFWElUOworCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKQogCQlyZXR1cm47Ci0JfQogCiAJLyogUmVjZXB0aW9uIGhhcyBzdG9wcGVkOiB0cnkgdG8gcmVzZXQgdGhlIGlucHV0IHBpcGUgKi8KIAlpZiAodGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKIAkJaW50IHJldDsKIAotCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOyAgLyogQ2Fubm90IGJlIGhvbGRpbmcgc3BpbmxvY2shICovCisJCXVzYl9raWxsX3VyYigmaHctPnJ4X3VyYik7CS8qIENhbm5vdCBiZSBob2xkaW5nIHNwaW5sb2NrISAqLwogCiAJCXJldCA9IHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX2luKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC01MzksMTQgKzQ2NywxNCBAQAogCQkJICAgICAgIG5ldGRldi0+bmFtZSwgcmV0KTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzIHJ4IHBpcGUgcmVzZXQgY29tcGxldGUuXG4iLAotCQkJICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUpOworCQkJICAgICAgIG5ldGRldi0+bmFtZSk7CiAJCQljbGVhcl9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CiAJCQlzZXRfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncyk7CiAJCX0KIAl9CiAKIAkvKiBSZXN1bWUgcmVjZWl2aW5nIGRhdGEgYmFjayBmcm9tIHRoZSBkZXZpY2UuICovCi0JaWYgKCB0ZXN0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpICkgeworCWlmICh0ZXN0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCWludCByZXQ7CiAKIAkJcmV0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0tFUk5FTCk7CkBAIC01NzAsNyArNDk4LDcgQEAKIAkJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlcyB0eCBwaXBlIHJlc2V0IGNvbXBsZXRlLlxuIiwKLQkJCSAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQkJY2xlYXJfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOwogCQkJc2V0X2JpdChXT1JLX1RYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpOwogCkBAIC01ODMsMTQgKzUxMSwxMCBAQAogCX0KIAogCS8qIFJlc3VtZSB0cmFuc21pdHRpbmcuICovCi0JaWYgKCB0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSApIHsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfVFhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykpCiAJCW5ldGlmX3dha2VfcXVldWUoaHctPndsYW5kZXYtPm5ldGRldik7Ci0JfQotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jcmVhdGUKICoKQEAgLTYxMiwxMSArNTM2LDggQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQKLWhmYTM4NHhfY3JlYXRlKCBoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQordm9pZCBoZmEzODR4X2NyZWF0ZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQogewotCURCRkVOVEVSOwotCiAJbWVtc2V0KGh3LCAwLCBzaXplb2YoaGZhMzg0eF90KSk7CiAJaHctPnVzYiA9IHVzYjsKIApAQCAtNjM4LDExICs1NTksOSBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmh3LT5hdXRocSk7CiAKIAl0YXNrbGV0X2luaXQoJmh3LT5yZWFwZXJfYmgsCi0JICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzaywKLQkgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHcpOworCQkgICAgIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzaywgKHVuc2lnbmVkIGxvbmcpaHcpOwogCXRhc2tsZXRfaW5pdCgmaHctPmNvbXBsZXRpb25fYmgsCi0JICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2ssCi0JICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWh3KTsKKwkJICAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrLCAodW5zaWduZWQgbG9uZylodyk7CiAJSU5JVF9XT1JLKCZody0+bGlua19iaCwgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIpOwogCUlOSVRfV09SSygmaHctPnVzYl93b3JrLCBoZmEzODR4X3VzYl9kZWZlcik7CiAKQEAgLTY2NSwxNSArNTg0LDEyIEBACiAJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKIAlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX0lOSVQ7CiAKLSAgICAgICAgSU5JVF9XT1JLKCZody0+Y29tbXNxdWFsX2JoLCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKTsKKwlJTklUX1dPUksoJmh3LT5jb21tc3F1YWxfYmgsIHByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIpOwogCWluaXRfdGltZXIoJmh3LT5jb21tc3F1YWxfdGltZXIpOwotCWh3LT5jb21tc3F1YWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBodzsKKwlody0+Y29tbXNxdWFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylodzsKIAlody0+Y29tbXNxdWFsX3RpbWVyLmZ1bmN0aW9uID0gcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcjsKLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZGVzdHJveQogKgpAQCAtNjk2LDE2ICs2MTIsMTIgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQKLWhmYTM4NHhfZGVzdHJveSggaGZhMzg0eF90ICpodykKK3ZvaWQgaGZhMzg0eF9kZXN0cm95KGhmYTM4NHhfdCAqaHcpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCURCRkVOVEVSOwotCi0JaWYgKCBody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HICkgeworCWlmIChody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HKQogCQloZmEzODR4X2RydnJfc3RvcChodyk7Ci0JfQogCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUFJFSU5JVDsKIAogCWlmIChody0+c2NhbnJlc3VsdHMpIHsKQEAgLTcxNCwyMyArNjI2LDE2IEBACiAJfQogCiAJLyogTm93IHRvIGNsZWFuIG91dCB0aGUgYXV0aCBxdWV1ZSAqLwotICAgICAgICB3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkgKSB7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOwotICAgICAgICB9Ci0KLQlEQkZFWElUOworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmh3LT5hdXRocSkpKQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBoZmEzODR4X3VzYmN0bHhfdCogdXNiY3RseF9hbGxvYyh2b2lkKQorc3RhdGljIGhmYTM4NHhfdXNiY3RseF90ICp1c2JjdGx4X2FsbG9jKHZvaWQpCiB7CiAJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKIAljdGx4ID0ga21hbGxvYyhzaXplb2YoKmN0bHgpLCBpbl9pbnRlcnJ1cHQoKSA/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMKTsKLQlpZiAoY3RseCAhPSBOVUxMKQotCXsKKwlpZiAoY3RseCAhPSBOVUxMKSB7CiAJCW1lbXNldChjdGx4LCAwLCBzaXplb2YoKmN0bHgpKTsKIAkJaW5pdF9jb21wbGV0aW9uKCZjdGx4LT5kb25lKTsKIAl9CkBAIC03MzgsNzAgKzY0Myw1OCBAQAogCXJldHVybiBjdGx4OwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludAogdXNiY3RseF9nZXRfc3RhdHVzKGNvbnN0IGhmYTM4NHhfdXNiX2NtZHJlc3BfdCAqY21kcmVzcCwKLSAgICAgICAgICAgICAgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpCisJCSAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCkKIHsKLQlEQkZFTlRFUjsKKwlyZXN1bHQtPnN0YXR1cyA9IGxlMTZfdG9fY3B1KGNtZHJlc3AtPnN0YXR1cyk7CisJcmVzdWx0LT5yZXNwMCA9IGxlMTZfdG9fY3B1KGNtZHJlc3AtPnJlc3AwKTsKKwlyZXN1bHQtPnJlc3AxID0gbGUxNl90b19jcHUoY21kcmVzcC0+cmVzcDEpOworCXJlc3VsdC0+cmVzcDIgPSBsZTE2X3RvX2NwdShjbWRyZXNwLT5yZXNwMik7CiAKLQlyZXN1bHQtPnN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihjbWRyZXNwLT5zdGF0dXMpOwotCXJlc3VsdC0+cmVzcDAgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+cmVzcDApOwotCXJlc3VsdC0+cmVzcDEgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+cmVzcDEpOwotCXJlc3VsdC0+cmVzcDIgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+cmVzcDIpOworCXByX2RlYnVnKCJjbWRyZXN1bHQ6c3RhdHVzPTB4JTA0eCAiCisJICAgICAgICJyZXNwMD0weCUwNHggcmVzcDE9MHglMDR4IHJlc3AyPTB4JTA0eFxuIiwKKwkgICAgICAgcmVzdWx0LT5zdGF0dXMsIHJlc3VsdC0+cmVzcDAsIHJlc3VsdC0+cmVzcDEsIHJlc3VsdC0+cmVzcDIpOwogCi0JV0xBTl9MT0dfREVCVUcoNCwgImNtZHJlc3VsdDpzdGF0dXM9MHglMDR4ICIKLQkgICAgICAgICAgICAgICAgICAicmVzcDA9MHglMDR4IHJlc3AxPTB4JTA0eCByZXNwMj0weCUwNHhcbiIsCi0JICAgICAgICAgICAgICAgIHJlc3VsdC0+c3RhdHVzLAotCSAgICAgICAgICAgICAgICByZXN1bHQtPnJlc3AwLAotCSAgICAgICAgICAgICAgICByZXN1bHQtPnJlc3AxLAotCSAgICAgICAgICAgICAgICByZXN1bHQtPnJlc3AyKTsKLQotCURCRkVYSVQ7Ci0JcmV0dXJuIChyZXN1bHQtPnN0YXR1cyAmIEhGQTM4NHhfU1RBVFVTX1JFU1VMVCk7CisJcmV0dXJuIHJlc3VsdC0+c3RhdHVzICYgSEZBMzg0eF9TVEFUVVNfUkVTVUxUOwogfQogCiBzdGF0aWMgdm9pZAogdXNiY3RseF9nZXRfcnJpZHJlc3VsdChjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9ycmlkcmVzdWx0X3QgKnJlc3VsdCkKKwkJICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpCiB7Ci0JREJGRU5URVI7Ci0KLQlyZXN1bHQtPnJpZCA9IGhmYTM4NHgyaG9zdF8xNihycmlkcmVzcC0+cmlkKTsKKwlyZXN1bHQtPnJpZCA9IGxlMTZfdG9fY3B1KHJyaWRyZXNwLT5yaWQpOwogCXJlc3VsdC0+cmlkZGF0YSA9IHJyaWRyZXNwLT5kYXRhOwotCXJlc3VsdC0+cmlkZGF0YV9sZW4gPSAoKGhmYTM4NHgyaG9zdF8xNihycmlkcmVzcC0+ZnJtbGVuKSAtIDEpICogMik7CisJcmVzdWx0LT5yaWRkYXRhX2xlbiA9ICgobGUxNl90b19jcHUocnJpZHJlc3AtPmZybWxlbikgLSAxKSAqIDIpOwogCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQ29tcGxldG9yIG9iamVjdDoKICogVGhpcyBjb21wbGV0b3IgbXVzdCBiZSBwYXNzZWQgdG8gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoKQogKiB3aGVuIHByb2Nlc3NpbmcgYSBDVExYIHRoYXQgcmV0dXJucyBhIGhmYTM4NHhfY21kcmVzdWx0X3Qgc3RydWN0dXJlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdHJ1Y3QgdXNiY3RseF9jbWRfY29tcGxldG9yCi17Ci0JdXNiY3RseF9jb21wbGV0b3JfdAloZWFkOworc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvciB7CisJdXNiY3RseF9jb21wbGV0b3JfdCBoZWFkOwogCi0JY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90CSpjbWRyZXNwOwotCWhmYTM4NHhfY21kcmVzdWx0X3QJKnJlc3VsdDsKKwljb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3A7CisJaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0OwogfTsKIHR5cGVkZWYgc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvciB1c2JjdGx4X2NtZF9jb21wbGV0b3JfdDsKIAogc3RhdGljIGludCB1c2JjdGx4X2NtZF9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKIHsKLQl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9jbWRfY29tcGxldG9yX3QqKWhlYWQ7CisJdXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfY21kX2NvbXBsZXRvcl90ICopIGhlYWQ7CiAJcmV0dXJuIHVzYmN0bHhfZ2V0X3N0YXR1cyhjb21wbGV0ZS0+Y21kcmVzcCwgY29tcGxldGUtPnJlc3VsdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKLWluaXRfY21kX2NvbXBsZXRvcih1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldG9yLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX2NtZHJlc3BfdCAqY21kcmVzcCwKLSAgICAgICAgICAgICAgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpCitzdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QgKmluaXRfY21kX2NvbXBsZXRvcih1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqCisJCQkJCQkgICAgICBjb21wbGV0b3IsCisJCQkJCQkgICAgICBjb25zdAorCQkJCQkJICAgICAgaGZhMzg0eF91c2JfY21kcmVzcF90ICoKKwkJCQkJCSAgICAgIGNtZHJlc3AsCisJCQkJCQkgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICoKKwkJCQkJCSAgICAgIHJlc3VsdCkKIHsKIAljb21wbGV0b3ItPmhlYWQuY29tcGxldGUgPSB1c2JjdGx4X2NtZF9jb21wbGV0b3JfZm47CiAJY29tcGxldG9yLT5jbWRyZXNwID0gY21kcmVzcDsKQEAgLTgxNCw0NCArNzA3LDQxIEBACiAqIFRoaXMgY29tcGxldG9yIG11c3QgYmUgcGFzc2VkIHRvIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKCkKICogd2hlbiBwcm9jZXNzaW5nIGEgQ1RMWCB0aGF0IHJlYWRzIGEgUklELgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdHJ1Y3QgdXNiY3RseF9ycmlkX2NvbXBsZXRvcgotewotCXVzYmN0bHhfY29tcGxldG9yX3QJaGVhZDsKK3N0cnVjdCB1c2JjdGx4X3JyaWRfY29tcGxldG9yIHsKKwl1c2JjdGx4X2NvbXBsZXRvcl90IGhlYWQ7CiAKLQljb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90CSpycmlkcmVzcDsKLQl2b2lkCQkJKnJpZGRhdGE7Ci0JdW5zaWduZWQgaW50CQkJcmlkZGF0YWxlbjsKKwljb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcDsKKwl2b2lkICpyaWRkYXRhOworCXVuc2lnbmVkIGludCByaWRkYXRhbGVuOwogfTsKIHR5cGVkZWYgc3RydWN0IHVzYmN0bHhfcnJpZF9jb21wbGV0b3IgdXNiY3RseF9ycmlkX2NvbXBsZXRvcl90OwogCiBzdGF0aWMgaW50IHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKIHsKLQl1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCopaGVhZDsKKwl1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCAqKSBoZWFkOwogCWhmYTM4NHhfcnJpZHJlc3VsdF90IHJyaWRyZXN1bHQ7CiAKIAl1c2JjdGx4X2dldF9ycmlkcmVzdWx0KGNvbXBsZXRlLT5ycmlkcmVzcCwgJnJyaWRyZXN1bHQpOwogCiAJLyogVmFsaWRhdGUgdGhlIGxlbmd0aCwgbm90ZSBib2R5IGxlbiBjYWxjdWxhdGlvbiBpbiBieXRlcyAqLwotCWlmICggcnJpZHJlc3VsdC5yaWRkYXRhX2xlbiAhPSBjb21wbGV0ZS0+cmlkZGF0YWxlbiApIHsKLQkJV0xBTl9MT0dfV0FSTklORygKLQkJCSJSSUQgbGVuIG1pc21hdGNoLCByaWQ9MHglMDR4IGhsZW49JWQgZndsZW49JWRcbiIsCi0JCSAgICAgICAgcnJpZHJlc3VsdC5yaWQsCi0JCSAgICAgICAgY29tcGxldGUtPnJpZGRhdGFsZW4sCi0JCSAgICAgICAgcnJpZHJlc3VsdC5yaWRkYXRhX2xlbik7CisJaWYgKHJyaWRyZXN1bHQucmlkZGF0YV9sZW4gIT0gY29tcGxldGUtPnJpZGRhdGFsZW4pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlJJRCBsZW4gbWlzbWF0Y2gsIHJpZD0weCUwNHggaGxlbj0lZCBmd2xlbj0lZFxuIiwKKwkJICAgICAgIHJyaWRyZXN1bHQucmlkLAorCQkgICAgICAgY29tcGxldGUtPnJpZGRhdGFsZW4sIHJyaWRyZXN1bHQucmlkZGF0YV9sZW4pOwogCQlyZXR1cm4gLUVOT0RBVEE7CiAJfQogCi0JbWVtY3B5KGNvbXBsZXRlLT5yaWRkYXRhLAotCSAgICAgICBycmlkcmVzdWx0LnJpZGRhdGEsCi0JICAgICAgIGNvbXBsZXRlLT5yaWRkYXRhbGVuKTsKKwltZW1jcHkoY29tcGxldGUtPnJpZGRhdGEsIHJyaWRyZXN1bHQucmlkZGF0YSwgY29tcGxldGUtPnJpZGRhdGFsZW4pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QqCi1pbml0X3JyaWRfY29tcGxldG9yKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCAqY29tcGxldG9yLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmlkZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4pCitzdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QgKmluaXRfcnJpZF9jb21wbGV0b3IodXNiY3RseF9ycmlkX2NvbXBsZXRvcl90CisJCQkJCQkgICAgICAgKmNvbXBsZXRvciwKKwkJCQkJCSAgICAgICBjb25zdAorCQkJCQkJICAgICAgIGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgKgorCQkJCQkJICAgICAgIHJyaWRyZXNwLCB2b2lkICpyaWRkYXRhLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuKQogewogCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfZm47CiAJY29tcGxldG9yLT5ycmlkcmVzcCA9IHJyaWRyZXNwOwpAQCAtODc4LDMwICs3NjgsMjkgQEAKICogQ29tcGxldG9yIG9iamVjdDoKICogSW50ZXJwcmV0cyB0aGUgcmVzdWx0cyBvZiBhIHN5bmNocm9ub3VzIG1lbW9yeS1yZWFkCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yCi17Ci0gICAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgICAgICAgICAgIGhlYWQ7CitzdHJ1Y3QgdXNiY3RseF9ybWVtX2NvbXBsZXRvciB7CisJdXNiY3RseF9jb21wbGV0b3JfdCBoZWFkOwogCi0gICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgICpybWVtcmVzcDsKLSAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGE7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuOworCWNvbnN0IGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgKnJtZW1yZXNwOworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgaW50IGxlbjsKIH07CiB0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yIHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdDsKIAogc3RhdGljIGludCB1c2JjdGx4X3JtZW1fY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCiB7Ci0JdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QqKWhlYWQ7CisJdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgKikgaGVhZDsKIAotCVdMQU5fTE9HX0RFQlVHKDQsInJtZW1yZXNwOmxlbj0lZFxuIiwgY29tcGxldGUtPnJtZW1yZXNwLT5mcm1sZW4pOworCXByX2RlYnVnKCJybWVtcmVzcDpsZW49JWRcbiIsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZnJtbGVuKTsKIAltZW1jcHkoY29tcGxldGUtPmRhdGEsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZGF0YSwgY29tcGxldGUtPmxlbik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKLWluaXRfcm1lbV9jb21wbGV0b3IodXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0b3IsCi0gICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgKnJtZW1yZXNwLAotICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSB1c2JjdGx4X2NvbXBsZXRvcl90ICppbml0X3JtZW1fY29tcGxldG9yKHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdAorCQkJCQkJICAgICAgICpjb21wbGV0b3IsCisJCQkJCQkgICAgICAgaGZhMzg0eF91c2Jfcm1lbXJlc3BfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpybWVtcmVzcCwgdm9pZCAqZGF0YSwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfZm47CiAJY29tcGxldG9yLT5ybWVtcmVzcCA9IHJtZW1yZXNwOwpAQCAtOTMxLDI4ICs4MjAsMjMgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLWhmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQorc3RhdGljIHZvaWQgaGZhMzg0eF9jYl9zdGF0dXMoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCiB7Ci0JREJGRU5URVI7Ci0KLQlpZiAoIGN0bHgtPnVzZXJjYiAhPSBOVUxMICkgeworCWlmIChjdGx4LT51c2VyY2IgIT0gTlVMTCkgewogCQloZmEzODR4X2NtZHJlc3VsdF90IGNtZHJlc3VsdDsKIAogCQlpZiAoY3RseC0+c3RhdGUgIT0gQ1RMWF9DT01QTEVURSkgewogCQkJbWVtc2V0KCZjbWRyZXN1bHQsIDAsIHNpemVvZihjbWRyZXN1bHQpKTsKLQkJCWNtZHJlc3VsdC5zdGF0dXMgPSBIRkEzODR4X1NUQVRVU19SRVNVTFRfU0VUKEhGQTM4NHhfQ01EX0VSUik7CisJCQljbWRyZXN1bHQuc3RhdHVzID0KKwkJCSAgICBIRkEzODR4X1NUQVRVU19SRVNVTFRfU0VUKEhGQTM4NHhfQ01EX0VSUik7CiAJCX0gZWxzZSB7CiAJCQl1c2JjdGx4X2dldF9zdGF0dXMoJmN0bHgtPmluYnVmLmNtZHJlc3AsICZjbWRyZXN1bHQpOwogCQl9CiAKIAkJY3RseC0+dXNlcmNiKGh3LCAmY21kcmVzdWx0LCBjdGx4LT51c2VyY2JfZGF0YSk7CiAJfQotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jYl9ycmlkCiAqCkBAIC05NzMsMTMyICs4NTcsMTE0IEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCitzdGF0aWMgdm9pZCBoZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCiB7Ci0JREJGRU5URVI7Ci0KLQlpZiAoIGN0bHgtPnVzZXJjYiAhPSBOVUxMICkgeworCWlmIChjdGx4LT51c2VyY2IgIT0gTlVMTCkgewogCQloZmEzODR4X3JyaWRyZXN1bHRfdCBycmlkcmVzdWx0OwogCiAJCWlmIChjdGx4LT5zdGF0ZSAhPSBDVExYX0NPTVBMRVRFKSB7CiAJCQltZW1zZXQoJnJyaWRyZXN1bHQsIDAsIHNpemVvZihycmlkcmVzdWx0KSk7Ci0JCQlycmlkcmVzdWx0LnJpZCA9IGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpOworCQkJcnJpZHJlc3VsdC5yaWQgPQorCQkJICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCk7CiAJCX0gZWxzZSB7Ci0JCQl1c2JjdGx4X2dldF9ycmlkcmVzdWx0KCZjdGx4LT5pbmJ1Zi5ycmlkcmVzcCwgJnJyaWRyZXN1bHQpOworCQkJdXNiY3RseF9nZXRfcnJpZHJlc3VsdCgmY3RseC0+aW5idWYucnJpZHJlc3AsCisJCQkJCSAgICAgICAmcnJpZHJlc3VsdCk7CiAJCX0KIAogCQljdGx4LT51c2VyY2IoaHcsICZycmlkcmVzdWx0LCBjdGx4LT51c2VyY2JfZGF0YSk7CiAJfQotCi0JREJGRVhJVDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZG9jbWRfd2FpdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQorc3RhdGljIGlubGluZSBpbnQgaGZhMzg0eF9kb2NtZF93YWl0KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPV0FJVCwgY21kLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGhmYTM4NHhfZG9jbWRfYXN5bmMoaGZhMzg0eF90ICpodywKLSAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKLSAgICAgICAgICAgICAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAotICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCisJCSAgICBoZmEzODR4X21ldGFjbWRfdCAqY21kLAorCQkgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPQVNZTkMsIGNtZCwKLQkgICAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CisJcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPQVNZTkMsIGNtZCwgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kb3JyaWRfd2FpdChoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpyaWRkYXRhLCB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbikKK2hmYTM4NHhfZG9ycmlkX3dhaXQoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwKKwkJICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuKQogewogCXJldHVybiBoZmEzODR4X2RvcnJpZChodywgRE9XQUlULAotCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGhmYTM4NHhfZG9ycmlkX2FzeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICB1MTYgcmlkLCB2b2lkICpyaWRkYXRhLCB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbiwKLSAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKLSAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCisJCSAgICAgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJCSAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorCQkgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3JyaWQoaHcsIERPQVNZTkMsCi0JICAgICAgICAgICAgICAgICAgICAgIHJpZCwgcmlkZGF0YSwgcmlkZGF0YWxlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworCQkJICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCQkJICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kb3dyaWRfd2FpdChoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpyaWRkYXRhLCB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbikKK2hmYTM4NHhfZG93cmlkX3dhaXQoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwKKwkJICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuKQogewogCXJldHVybiBoZmEzODR4X2Rvd3JpZChodywgRE9XQUlULAotCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGhmYTM4NHhfZG93cmlkX2FzeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICB1MTYgcmlkLCB2b2lkICpyaWRkYXRhLCB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbiwKLSAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKLSAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCisJCSAgICAgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJCSAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorCQkgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3dyaWQoaHcsIERPQVNZTkMsCi0JICAgICAgICAgICAgICAgICAgICAgIHJpZCwgcmlkZGF0YSwgcmlkZGF0YWxlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworCQkJICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCQkJICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAogaGZhMzg0eF9kb3JtZW1fd2FpdChoZmEzODR4X3QgKmh3LAotICAgICAgICAgICAgICAgICAgICB1MTYgcGFnZSwgdTE2IG9mZnNldCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKKwkJICAgIHUxNiBwYWdlLCB1MTYgb2Zmc2V0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXJldHVybiBoZmEzODR4X2Rvcm1lbShodywgRE9XQUlULAotCSAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQkgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBoZmEzODR4X2Rvcm1lbV9hc3luYyhoZmEzODR4X3QgKmh3LAotICAgICAgICAgICAgICAgICAgICAgdTE2IHBhZ2UsIHUxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCi0gICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQorCQkgICAgIHUxNiBwYWdlLCB1MTYgb2Zmc2V0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKwkJICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG9ybWVtKGh3LCBET0FTWU5DLAotCSAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworCQkJICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJCQkgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2Rvd21lbV93YWl0KAotICAgICAgICBoZmEzODR4X3QgKmh3LAotICAgICAgICB1MTYgIHBhZ2UsCi0gICAgICAgIHUxNiAgb2Zmc2V0LAotICAgICAgICB2b2lkICAgICpkYXRhLAotICAgICAgICB1bnNpZ25lZCBpbnQgICAgbGVuKQoraGZhMzg0eF9kb3dtZW1fd2FpdChoZmEzODR4X3QgKmh3LAorCQkgICAgdTE2IHBhZ2UsIHUxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG93bWVtKGh3LCBET1dBSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCSAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZG93bWVtX2FzeW5jKAotICAgICAgICBoZmEzODR4X3QgKmh3LAotICAgICAgICB1MTYgIHBhZ2UsCi0gICAgICAgIHUxNiAgb2Zmc2V0LAotICAgICAgICB2b2lkICAgICpkYXRhLAotICAgICAgICB1bnNpZ25lZCBpbnQgICAgbGVuLAotICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCi0gICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAotICAgICAgICB2b2lkICAgICp1c2VyY2JfZGF0YSkKK2hmYTM4NHhfZG93bWVtX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisJCSAgICAgdTE2IHBhZ2UsCisJCSAgICAgdTE2IG9mZnNldCwKKwkJICAgICB2b2lkICpkYXRhLAorCQkgICAgIHVuc2lnbmVkIGludCBsZW4sCisJCSAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorCQkgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3dtZW0oaHcsIERPQVNZTkMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CisJCQkgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKKwkJCSAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTIwLDE2ICs5ODYsMTIgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShoZmEzODR4X3QgKmh3KQoraW50IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodykKIHsKLQlpbnQJcmVzdWx0ID0gMDsKLQlpbnQJaTsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgaTsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQotCiAJY21kLmNtZCA9IEhGQTM4NHhfQ01EQ09ERV9JTklUOwogCWNtZC5wYXJtMCA9IDA7CiAJY21kLnBhcm0xID0gMDsKQEAgLTExMzcsMjcgKzk5OSwyMSBAQAogCiAJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKIAotCi0JV0xBTl9MT0dfREVCVUcoMywiY21kcmVzcC5pbml0OiAiCi0JCSJzdGF0dXM9MHglMDR4LCByZXNwMD0weCUwNHgsICIKLQkJInJlc3AxPTB4JTA0eCwgcmVzcDI9MHglMDR4XG4iLAotCQljbWQucmVzdWx0LnN0YXR1cywKLQkJY21kLnJlc3VsdC5yZXNwMCwKLQkJY21kLnJlc3VsdC5yZXNwMSwKLQkJY21kLnJlc3VsdC5yZXNwMik7Ci0JaWYgKCByZXN1bHQgPT0gMCApIHsKLQkJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X05VTVBPUlRTX01BWDsgaSsrKSB7CisJcHJfZGVidWcoImNtZHJlc3AuaW5pdDogIgorCSAgICAgICAic3RhdHVzPTB4JTA0eCwgcmVzcDA9MHglMDR4LCAiCisJICAgICAgICJyZXNwMT0weCUwNHgsIHJlc3AyPTB4JTA0eFxuIiwKKwkgICAgICAgY21kLnJlc3VsdC5zdGF0dXMsCisJICAgICAgIGNtZC5yZXN1bHQucmVzcDAsIGNtZC5yZXN1bHQucmVzcDEsIGNtZC5yZXN1bHQucmVzcDIpOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykKIAkJCWh3LT5wb3J0X2VuYWJsZWRbaV0gPSAwOwotCQl9CiAJfQogCi0gICAgICAgIGh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jbWRfZGlzYWJsZQogKgpAQCAtMTE4MCwyNCArMTAzNiwyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9jbWRfZGlzYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCkKIHsKLQlpbnQJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQogCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRElTQUJMRSkgfAotCQkgIEhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKG1hY3BvcnQpOworCSAgICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKIAljbWQucGFybTAgPSAwOwogCWNtZC5wYXJtMSA9IDA7CiAJY21kLnBhcm0yID0gMDsKIAogCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfY21kX2VuYWJsZQogKgpAQCAtMTIyMCwyMCArMTA3MiwxNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KQogewotCWludAlyZXN1bHQgPSAwOworCWludCByZXN1bHQgPSAwOwogCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKIAotCURCRkVOVEVSOwotCiAJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9FTkFCTEUpIHwKLQkJICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKKwkgICAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CiAJY21kLnBhcm0wID0gMDsKIAljbWQucGFybTEgPSAwOwogCWNtZC5wYXJtMiA9IDA7CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjY4LDI0ICsxMTE3LDIwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIHUxNiBlbmFibGUpCiB7Ci0JaW50CXJlc3VsdCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CiAJaGZhMzg0eF9tZXRhY21kX3QgY21kOwogCi0JREJGRU5URVI7Ci0KIAljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX01PTklUT1IpIHwKLQkJSEZBMzg0eF9DTURfQUlORk9fU0VUKGVuYWJsZSk7CisJICAgIEhGQTM4NHhfQ01EX0FJTkZPX1NFVChlbmFibGUpOwogCWNtZC5wYXJtMCA9IDA7CiAJY21kLnBhcm0xID0gMDsKIAljbWQucGFybTIgPSAwOwogCiAJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jbWRfZG93bmxvYWQKICoKQEAgLTEzMjUsMTUgKzExNzAsMTQgQEAKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9jbWRfZG93bmxvYWQoaGZhMzg0eF90ICpodywgdTE2IG1vZGUsIHUxNiBsb3dhZGRyLAotCQkJCXUxNiBoaWdoYWRkciwgdTE2IGNvZGVsZW4pCisJCQkgdTE2IGhpZ2hhZGRyLCB1MTYgY29kZWxlbikKIHsKLQlpbnQJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRyg1LAotCQkibW9kZT0lZCwgbG93YWRkcj0weCUwNHgsIGhpZ2hhZGRyPTB4JTA0eCwgY29kZWxlbj0lZFxuIiwKLQkJbW9kZSwgbG93YWRkciwgaGlnaGFkZHIsIGNvZGVsZW4pOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJtb2RlPSVkLCBsb3dhZGRyPTB4JTA0eCwgaGlnaGFkZHI9MHglMDR4LCBjb2RlbGVuPSVkXG4iLAorCSAgICAgICBtb2RlLCBsb3dhZGRyLCBoaWdoYWRkciwgY29kZWxlbik7CiAKIAljbWQuY21kID0gKEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9ET1dOTEQpIHwKIAkJICAgSEZBMzg0eF9DTURfUFJPR01PREVfU0VUKG1vZGUpKTsKQEAgLTEzNDQsNzkgKzExODgsOSBAQAogCiAJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogaGZhMzg0eF9jb3B5X2Zyb21fYXV4Ci0qCi0qIENvcGllcyBhIGNvbGxlY3Rpb24gb2YgYnl0ZXMgZnJvbSB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKLSogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgotKgotKiBBcmd1bWVudHM6Ci0qCWh3CQlkZXZpY2Ugc3RydWN0dXJlCi0qCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKLSoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAotKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgotKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCWJ1ZiBjb250YWlucyB0aGUgZGF0YSBjb3BpZWQKLSoKLSogQ2FsbCBjb250ZXh0OgotKglwcm9jZXNzCi0qCWludGVycnVwdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkCi1oZmEzODR4X2NvcHlfZnJvbV9hdXgoCi0JaGZhMzg0eF90ICpodywgdTMyIGNhcmRhZGRyLCB1MzIgYXV4Y3RsLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JREJGRU5URVI7Ci0JV0xBTl9MT0dfRVJST1IoIm5vdCB1c2VkIGluIFVTQi5cbiIpOwotCURCRkVYSVQ7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIGhmYTM4NHhfY29weV90b19hdXgKLSoKLSogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyB0byB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKLSogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgotKgotKiBBcmd1bWVudHM6Ci0qCWh3CQlkZXZpY2Ugc3RydWN0dXJlCi0qCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKLSoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAotKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgotKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCUNvbnRyb2xsZXIgbWVtb3J5IG5vdyBjb250YWlucyBhIGNvcHkgb2YgYnVmCi0qCi0qIENhbGwgY29udGV4dDoKLSoJcHJvY2VzcwotKglpbnRlcnJ1cHQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZAotaGZhMzg0eF9jb3B5X3RvX2F1eCgKLQloZmEzODR4X3QgKmh3LCB1MzIgY2FyZGFkZHIsIHUzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKLXsKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19FUlJPUigibm90IHVzZWQgaW4gVVNCLlxuIik7Ci0JREJGRVhJVDsKLX0KLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jb3JlcmVzZXQKICoKQEAgLTE0NDIsMjAgKzEyMTYsMTcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfY29yZXJlc2V0KGhmYTM4NHhfdCAqaHcsIGludCBob2xkdGltZSwgaW50IHNldHRsZXRpbWUsIGludCBnZW5lc2lzKQogewotCWludCAJCQlyZXN1bHQgPSAwOworCWludCByZXN1bHQgPSAwOwogCi0JREJGRU5URVI7Ci0KLQlyZXN1bHQ9dXNiX3Jlc2V0X2RldmljZShody0+dXNiKTsKLQlpZihyZXN1bHQ8MCkgewotCQlXTEFOX0xPR19FUlJPUigidXNiX3Jlc2V0X2RldmljZSgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIixyZXN1bHQpOworCXJlc3VsdCA9IHVzYl9yZXNldF9kZXZpY2UoaHctPnVzYik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JfcmVzZXRfZGV2aWNlKCkgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLAorCQkgICAgICAgcmVzdWx0KTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jCiAqCkBAIC0xNDg3LDggKzEyNTgsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlc3VsdDsKIAotCURCRkVOVEVSOwotCiAJcmVzdWx0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjdGx4LT5kb25lKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwpAQCAtMTQ5NywxNCArMTI2NiwxMSBAQAogCSAqIFdlIGNhbiBvbmx5IGhhbmRsZSB0aGUgQ1RMWCBpZiB0aGUgVVNCIGRpc2Nvbm5lY3QKIAkgKiBmdW5jdGlvbiBoYXMgbm90IHJ1biB5ZXQgLi4uCiAJICovCi0JY2xlYW51cDoKLQlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQotCXsKK2NsZWFudXA6CisJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKLQl9Ci0JZWxzZSBpZiAoIHJlc3VsdCAhPSAwICkKLQl7CisJfSBlbHNlIGlmIChyZXN1bHQgIT0gMCkgewogCQlpbnQgcnVucXVldWUgPSAwOwogCiAJCS8qCkBAIC0xNTE2LDggKzEyODIsNyBAQAogCQkgKiBOT1RFOiBXZSBjYW4gb25seSBkZWxldGUgdGhlIHRpbWVycyBhbmQKIAkJICogICAgICAgdGhlIFVSQiBpZiB0aGlzIENUTFggaXMgYWN0aXZlLgogCQkgKi8KLQkJaWYgKGN0bHggPT0gZ2V0X2FjdGl2ZV9jdGx4KGh3KSkKLQkJeworCQlpZiAoY3RseCA9PSBnZXRfYWN0aXZlX2N0bHgoaHcpKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCiAJCQlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZody0+cmVxdGltZXIpOwpAQCAtMTUzNCw3ICsxMjk5LDcgQEAKIAkJCSAqIFRoaXMgc2NlbmFyaW8gaXMgc28gdW5saWtlbHkgdGhhdCBJJ20KIAkJCSAqIGhhcHB5IHdpdGggYSBncnViYnkgImdvdG8iIHNvbHV0aW9uIC4uLgogCQkJICovCi0JCQlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCQkJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpCiAJCQkJZ290byBjbGVhbnVwOwogCQl9CiAKQEAgLTE1NTUsOSArMTMyMCw5IEBACiAJCWlmIChjdGx4LT5zdGF0ZSA9PSBDVExYX0NPTVBMRVRFKSB7CiAJCQlyZXN1bHQgPSBjb21wbGV0b3ItPmNvbXBsZXRlKGNvbXBsZXRvcik7CiAJCX0gZWxzZSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCJDVExYWyVkXSBlcnJvcjogc3RhdGUoJXMpXG4iLAotCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAotCQkJICAgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDVExYWyVkXSBlcnJvcjogc3RhdGUoJXMpXG4iLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CiAJCQlyZXN1bHQgPSAtRUlPOwogCQl9CiAKQEAgLTE1NjYsNyArMTMzMSw2IEBACiAJCWtmcmVlKGN0bHgpOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTYwMywzOSArMTM2NywzMiBAQAogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG9jbWQoCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCWhmYTM4NHhfbWV0YWNtZF90ICpjbWQsCi0JY3RseF9jbWRjYl90CWNtZGNiLAotCWN0bHhfdXNlcmNiX3QJdXNlcmNiLAotCXZvaWQJKnVzZXJjYl9kYXRhKQoraGZhMzg0eF9kb2NtZChoZmEzODR4X3QgKmh3LAorCSAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKwkgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKLQlpbnQJCQlyZXN1bHQ7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJaW50IHJlc3VsdDsKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKIAotCURCRkVOVEVSOwogCWN0bHggPSB1c2JjdGx4X2FsbG9jKCk7Ci0JaWYgKCBjdGx4ID09IE5VTEwgKSB7CisJaWYgKGN0bHggPT0gTlVMTCkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLwotCWN0bHgtPm91dGJ1Zi5jbWRyZXEudHlwZSA9IAlob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfQ01EUkVRKTsKLQljdGx4LT5vdXRidWYuY21kcmVxLmNtZCA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPmNtZCk7Ci0JY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMCA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPnBhcm0wKTsKLQljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0xID0JaG9zdDJoZmEzODR4XzE2KGNtZC0+cGFybTEpOwotCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTIgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5wYXJtMik7CisJY3RseC0+b3V0YnVmLmNtZHJlcS50eXBlID0gY3B1X3RvX2xlMTYoSEZBMzg0eF9VU0JfQ01EUkVRKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLmNtZCA9IGNwdV90b19sZTE2KGNtZC0+Y21kKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0wID0gY3B1X3RvX2xlMTYoY21kLT5wYXJtMCk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMSA9IGNwdV90b19sZTE2KGNtZC0+cGFybTEpOworCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTIgPSBjcHVfdG9fbGUxNihjbWQtPnBhcm0yKTsKIAogCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLmNtZHJlcSk7CiAKLQlXTEFOX0xPR19ERUJVRyg0LCAiY21kcmVxOiBjbWQ9MHglMDR4ICIKLQkJInBhcm0wPTB4JTA0eCBwYXJtMT0weCUwNHggcGFybTI9MHglMDR4XG4iLAotCQljbWQtPmNtZCwKLQkJY21kLT5wYXJtMCwKLQkJY21kLT5wYXJtMSwKLQkJY21kLT5wYXJtMik7CisJcHJfZGVidWcoImNtZHJlcTogY21kPTB4JTA0eCAiCisJICAgICAgICJwYXJtMD0weCUwNHggcGFybTE9MHglMDR4IHBhcm0yPTB4JTA0eFxuIiwKKwkgICAgICAgY21kLT5jbWQsIGNtZC0+cGFybTAsIGNtZC0+cGFybTEsIGNtZC0+cGFybTIpOwogCiAJY3RseC0+cmVhcGFibGUgPSBtb2RlOwogCWN0bHgtPmNtZGNiID0gY21kY2I7CkBAIC0xNjQ4LDE4ICsxNDA1LDIwIEBACiAJfSBlbHNlIGlmIChtb2RlID09IERPV0FJVCkgewogCQl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CiAKLQkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCi0JCSAgICAgICAgICAgICBodywgY3RseCwgaW5pdF9jbWRfY29tcGxldG9yKCZjb21wbGV0b3IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5jbWRyZXNwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLT5yZXN1bHQpICk7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhodywgY3RseCwKKwkJCQkJCSAgaW5pdF9jbWRfY29tcGxldG9yKCZjb21wbGV0b3IsCisJCQkJCQkJCSAgICAgJmN0bHgtPgorCQkJCQkJCQkgICAgIGluYnVmLgorCQkJCQkJCQkgICAgIGNtZHJlc3AsCisJCQkJCQkJCSAgICAgJmNtZC0+CisJCQkJCQkJCSAgICAgcmVzdWx0KSk7CiAJfQogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kb3JyaWQKICoKQEAgLTE2OTcsMzEgKzE0NTYsMjcgQEAKICoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG9ycmlkKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcmlkLAotCXZvaWQJKnJpZGRhdGEsCi0JdW5zaWduZWQgaW50CXJpZGRhdGFsZW4sCi0gICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSkKK2hmYTM4NHhfZG9ycmlkKGhmYTM4NHhfdCAqaHcsCisJICAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgIHUxNiByaWQsCisJICAgICAgIHZvaWQgKnJpZGRhdGEsCisJICAgICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuLAorCSAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKLQlpbnQJCQlyZXN1bHQ7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJaW50IHJlc3VsdDsKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKIAotCURCRkVOVEVSOwogCWN0bHggPSB1c2JjdGx4X2FsbG9jKCk7Ci0JaWYgKCBjdGx4ID09IE5VTEwgKSB7CisJaWYgKGN0bHggPT0gTlVMTCkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLwotCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLnR5cGUgPSAgIGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9SUklEUkVRKTsKKwljdGx4LT5vdXRidWYucnJpZHJlcS50eXBlID0gY3B1X3RvX2xlMTYoSEZBMzg0eF9VU0JfUlJJRFJFUSk7CiAJY3RseC0+b3V0YnVmLnJyaWRyZXEuZnJtbGVuID0KLQkJaG9zdDJoZmEzODR4XzE2KHNpemVvZihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpKTsKLQljdGx4LT5vdXRidWYucnJpZHJlcS5yaWQgPSAgICBob3N0MmhmYTM4NHhfMTYocmlkKTsKKwkgICAgY3B1X3RvX2xlMTYoc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCkpOworCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCA9IGNwdV90b19sZTE2KHJpZCk7CiAKIAljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ycmlkcmVxKTsKIApAQCAtMTczNywxOSArMTQ5MiwxOCBAQAogCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKIAkJdXNiY3RseF9ycmlkX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKIAotCQlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygKLQkJICAgICAgICAgICBodywgY3RseCwgaW5pdF9ycmlkX2NvbXBsZXRvcigmY29tcGxldG9yLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5ycmlkcmVzcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWRkYXRhLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZGRhdGFsZW4pICk7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhodywgY3RseCwKKwkJCQkJCSAgaW5pdF9ycmlkX2NvbXBsZXRvcgorCQkJCQkJICAoJmNvbXBsZXRvciwKKwkJCQkJCSAgICZjdGx4LT5pbmJ1Zi5ycmlkcmVzcCwKKwkJCQkJCSAgIHJpZGRhdGEsIHJpZGRhdGFsZW4pKTsKIAl9CiAKIGRvbmU6Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2Rvd3JpZAogKgpAQCAtMTc4MywzOCArMTUzNywzNCBAQAogKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludAotaGZhMzg0eF9kb3dyaWQoCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglyaWQsCi0Jdm9pZAkqcmlkZGF0YSwKLQl1bnNpZ25lZCBpbnQJcmlkZGF0YWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpCitoZmEzODR4X2Rvd3JpZChoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcmlkLAorCSAgICAgICB2b2lkICpyaWRkYXRhLAorCSAgICAgICB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JaW50CQkJcmVzdWx0OwotCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCWludCByZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKLQlEQkZFTlRFUjsKIAljdGx4ID0gdXNiY3RseF9hbGxvYygpOwotCWlmICggY3RseCA9PSBOVUxMICkgeworCWlmIChjdGx4ID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KLQljdGx4LT5vdXRidWYud3JpZHJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfV1JJRFJFUSk7Ci0JY3RseC0+b3V0YnVmLndyaWRyZXEuZnJtbGVuID0gaG9zdDJoZmEzODR4XzE2KAotCQkJCQkoc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLnJpZCkgKwotCQkJCQlyaWRkYXRhbGVuICsgMSkgLyAyKTsKLQljdGx4LT5vdXRidWYud3JpZHJlcS5yaWQgPSAgICBob3N0MmhmYTM4NHhfMTYocmlkKTsKKwljdGx4LT5vdXRidWYud3JpZHJlcS50eXBlID0gY3B1X3RvX2xlMTYoSEZBMzg0eF9VU0JfV1JJRFJFUSk7CisJY3RseC0+b3V0YnVmLndyaWRyZXEuZnJtbGVuID0gY3B1X3RvX2xlMTYoKHNpemVvZgorCQkJCQkJICAgICAgIChjdGx4LT5vdXRidWYud3JpZHJlcS4KKwkJCQkJCQlyaWQpICsgcmlkZGF0YWxlbiArCisJCQkJCQkgICAgICAgMSkgLyAyKTsKKwljdGx4LT5vdXRidWYud3JpZHJlcS5yaWQgPSBjcHVfdG9fbGUxNihyaWQpOwogCW1lbWNweShjdGx4LT5vdXRidWYud3JpZHJlcS5kYXRhLCByaWRkYXRhLCByaWRkYXRhbGVuKTsKIAogCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEudHlwZSkgKwotCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEuZnJtbGVuKSArCi0JICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5yaWQpICsKLQkgICAgICAgICAgICAgICAgICAgcmlkZGF0YWxlbjsKKwkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLmZybWxlbikgKworCSAgICBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEucmlkKSArIHJpZGRhdGFsZW47CiAKIAljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CiAJY3RseC0+Y21kY2IgPSBjbWRjYjsKQEAgLTE4MjksMTYgKzE1NzksMTUgQEAKIAkJdXNiY3RseF93cmlkX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKIAkJaGZhMzg0eF9jbWRyZXN1bHRfdCB3cmlkcmVzdWx0OwogCi0JCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAotCQkgICAgICAgICAgICAgICBodywKLQkJICAgICAgICAgICAgICAgY3RseCwKLQkJICAgICAgICAgICAgICAgaW5pdF93cmlkX2NvbXBsZXRvcigmY29tcGxldG9yLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi53cmlkcmVzcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JpZHJlc3VsdCkgKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsCisJCQkJCQkgICAgICAgY3RseCwKKwkJCQkJCSAgICAgICBpbml0X3dyaWRfY29tcGxldG9yCisJCQkJCQkgICAgICAgKCZjb21wbGV0b3IsCisJCQkJCQkJJmN0bHgtPmluYnVmLndyaWRyZXNwLAorCQkJCQkJCSZ3cmlkcmVzdWx0KSk7CiAJfQogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTg3Niw0NyArMTYyNSw0MSBAQAogKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludAotaGZhMzg0eF9kb3JtZW0oCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglwYWdlLAotCXUxNglvZmZzZXQsCi0Jdm9pZAkqZGF0YSwKLQl1bnNpZ25lZCBpbnQJbGVuLAotCWN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSkKK2hmYTM4NHhfZG9ybWVtKGhmYTM4NHhfdCAqaHcsCisJICAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgIHUxNiBwYWdlLAorCSAgICAgICB1MTYgb2Zmc2V0LAorCSAgICAgICB2b2lkICpkYXRhLAorCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCSAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKLQlpbnQJCQlyZXN1bHQ7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJaW50IHJlc3VsdDsKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKIAotCURCRkVOVEVSOwogCWN0bHggPSB1c2JjdGx4X2FsbG9jKCk7Ci0JaWYgKCBjdGx4ID09IE5VTEwgKSB7CisJaWYgKGN0bHggPT0gTlVMTCkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLwotCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUgPSAgICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfUk1FTVJFUSk7Ci0JY3RseC0+b3V0YnVmLnJtZW1yZXEuZnJtbGVuID0gIGhvc3QyaGZhMzg0eF8xNigKLQkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCkgKwotCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSkgKwotCQkJCQlsZW4pOwotCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCA9CWhvc3QyaGZhMzg0eF8xNihvZmZzZXQpOwotCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UgPQlob3N0MmhmYTM4NHhfMTYocGFnZSk7CisJY3RseC0+b3V0YnVmLnJtZW1yZXEudHlwZSA9IGNwdV90b19sZTE2KEhGQTM4NHhfVVNCX1JNRU1SRVEpOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiA9CisJICAgIGNwdV90b19sZTE2KHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQpICsKKwkJCSAgICBzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSkgKyBsZW4pOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldCk7CisJY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSA9IGNwdV90b19sZTE2KHBhZ2UpOwogCiAJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcSk7CiAKLQlXTEFOX0xPR19ERUJVRyg0LAotCQkidHlwZT0weCUwNHggZnJtbGVuPSVkIG9mZnNldD0weCUwNHggcGFnZT0weCUwNHhcbiIsCi0JCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUsCi0JCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiwKLQkJY3RseC0+b3V0YnVmLnJtZW1yZXEub2Zmc2V0LAotCQljdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAidHlwZT0weCUwNHggZnJtbGVuPSVkIG9mZnNldD0weCUwNHggcGFnZT0weCUwNHhcbiIsCisJICAgICAgIGN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUsCisJICAgICAgIGN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiwKKwkgICAgICAgY3RseC0+b3V0YnVmLnJtZW1yZXEub2Zmc2V0LCBjdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlKTsKIAotCVdMQU5fTE9HX0RFQlVHKDQsInBrdHNpemU9JXpkXG4iLAotCQlST1VORFVQNjQoc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxKSkpOworCXByX2RlYnVnKCJwa3RzaXplPSV6ZFxuIiwKKwkgICAgICAgUk9VTkRVUDY0KHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcSkpKTsKIAogCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKIAljdGx4LT5jbWRjYiA9IGNtZGNiOwpAQCAtMTkyNiwyMyArMTY2OSwyMSBAQAogCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQlrZnJlZShjdGx4KTsKLQl9IGVsc2UgaWYgKCBtb2RlID09IERPV0FJVCApIHsKLSAgICAgICAgICAgICAgICB1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgY29tcGxldG9yOworCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKKwkJdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKIAotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfcm1lbV9jb21wbGV0b3IoJmNvbXBsZXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5ybWVtcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pICk7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhodywgY3RseCwKKwkJCQkJCSAgaW5pdF9ybWVtX2NvbXBsZXRvcgorCQkJCQkJICAoJmNvbXBsZXRvciwKKwkJCQkJCSAgICZjdGx4LT5pbmJ1Zi5ybWVtcmVzcCwgZGF0YSwKKwkJCQkJCSAgIGxlbikpOwogCX0KIAogZG9uZToKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kb3dtZW0KICoKQEAgLTE5NzcsNDUgKzE3MTgsMzkgQEAKICoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG93bWVtKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcGFnZSwKLQl1MTYJb2Zmc2V0LAotCXZvaWQJKmRhdGEsCi0JdW5zaWduZWQgaW50CWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpCitoZmEzODR4X2Rvd21lbShoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcGFnZSwKKwkgICAgICAgdTE2IG9mZnNldCwKKwkgICAgICAgdm9pZCAqZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JaW50CQkJcmVzdWx0OwotCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCWludCByZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRyg1LCAicGFnZT0weCUwNHggb2Zmc2V0PTB4JTA0eCBsZW49JWRcbiIsCi0JCXBhZ2Usb2Zmc2V0LGxlbik7CisJcHJfZGVidWcoInBhZ2U9MHglMDR4IG9mZnNldD0weCUwNHggbGVuPSVkXG4iLAorCSAgICAgICBwYWdlLCBvZmZzZXQsIGxlbik7CiAKIAljdGx4ID0gdXNiY3RseF9hbGxvYygpOwotCWlmICggY3RseCA9PSBOVUxMICkgeworCWlmIChjdGx4ID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KLQljdGx4LT5vdXRidWYud21lbXJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfV01FTVJFUSk7Ci0JY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuID0gaG9zdDJoZmEzODR4XzE2KAotCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCi0JCQkJCXNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArCi0JCQkJCWxlbik7Ci0JY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0ID0gaG9zdDJoZmEzODR4XzE2KG9mZnNldCk7Ci0JY3RseC0+b3V0YnVmLndtZW1yZXEucGFnZSA9ICAgaG9zdDJoZmEzODR4XzE2KHBhZ2UpOworCWN0bHgtPm91dGJ1Zi53bWVtcmVxLnR5cGUgPSBjcHVfdG9fbGUxNihIRkEzODR4X1VTQl9XTUVNUkVRKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5mcm1sZW4gPQorCSAgICBjcHVfdG9fbGUxNihzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCisJCQkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UpICsgbGVuKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOworCWN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UgPSBjcHVfdG9fbGUxNihwYWdlKTsKIAltZW1jcHkoY3RseC0+b3V0YnVmLndtZW1yZXEuZGF0YSwgZGF0YSwgbGVuKTsKIAogCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEudHlwZSkgKwotCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuKSArCi0JICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQpICsKLQkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UpICsKLQkgICAgICAgICAgICAgICAgICAgbGVuOworCSAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuKSArCisJICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQpICsKKwkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UpICsgbGVuOwogCiAJY3RseC0+cmVhcGFibGUgPSBtb2RlOwogCWN0bHgtPmNtZGNiID0gY21kY2I7CkBAIC0yMDI1LDI0ICsxNzYwLDIyIEBACiAJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChodywgY3RseCk7CiAJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCWtmcmVlKGN0bHgpOwotCX0gZWxzZSBpZiAoIG1vZGUgPT0gRE9XQUlUICkgewotICAgICAgICAgICAgICAgIHVzYmN0bHhfd21lbV9jb21wbGV0b3JfdCBjb21wbGV0b3I7Ci0gICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCB3bWVtcmVzdWx0OworCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKKwkJdXNiY3RseF93bWVtX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKKwkJaGZhMzg0eF9jbWRyZXN1bHRfdCB3bWVtcmVzdWx0OwogCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RseCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3dtZW1fY29tcGxldG9yKCZjb21wbGV0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYud21lbXJlc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd21lbXJlc3VsdCkgKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsCisJCQkJCQkgICAgICAgY3RseCwKKwkJCQkJCSAgICAgICBpbml0X3dtZW1fY29tcGxldG9yCisJCQkJCQkgICAgICAgKCZjb21wbGV0b3IsCisJCQkJCQkJJmN0bHgtPmluYnVmLndtZW1yZXNwLAorCQkJCQkJCSZ3bWVtcmVzdWx0KSk7CiAJfQogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzCiAqCkBAIC0yMDYwLDEyICsxNzkzLDEwIEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKCBoZmEzODR4X3QgKmh3ICkKK2ludCBoZmEzODR4X2RydnJfY29tbXRhbGxpZXMoaGZhMzg0eF90ICpodykKIHsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQogCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5ROwogCWNtZC5wYXJtMCA9IEhGQTM4NHhfSVRfQ09NTVRBTExJRVM7CiAJY21kLnBhcm0xID0gMDsKQEAgLTIwNzMsMTEgKzE4MDQsOSBAQAogCiAJaGZhMzg0eF9kb2NtZF9hc3luYyhodywgJmNtZCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfZGlzYWJsZQogKgpAQCAtMjEwMiwyNCArMTgzMSwyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpCiB7Ci0JaW50CXJlc3VsdCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CiAKLQlEQkZFTlRFUjsKIAlpZiAoKCFody0+aXNhcCAmJiBtYWNwb3J0ICE9IDApIHx8CiAJICAgIChody0+aXNhcCAmJiAhKG1hY3BvcnQgPD0gSEZBMzg0eF9QT1JUSURfTUFYKSkgfHwKLQkgICAgIShody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSApeworCSAgICAhKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pKSB7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZGlzYWJsZShodywgbWFjcG9ydCk7Ci0JCWlmICggcmVzdWx0ID09IDAgKSB7CisJCWlmIChyZXN1bHQgPT0gMCkKIAkJCWh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0gPSAwOwotCQl9CiAJfQotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2VuYWJsZQogKgpAQCAtMjE0NCwyNCArMTg2OSwyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCkKIHsKLQlpbnQJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAotCURCRkVOVEVSOwogCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKIAkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAotCSAgICAoaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSkgKXsKKwkgICAgKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pKSB7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZW5hYmxlKGh3LCBtYWNwb3J0KTsKLQkJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJaWYgKHJlc3VsdCA9PSAwKQogCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDE7Ci0JCX0KIAl9Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUKICoKQEAgLTIxODUsNDUgKzE5MDYsNDMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KQogewotCWludAkJcmVzdWx0ID0gMDsKLQlpbnQJCWk7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGk7CiAKLQlEQkZFTlRFUjsKIAkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KLQlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7Ci0JCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsImNhbGxlZCB3aGVuIHBvcnQgZW5hYmxlZC5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgeworCQlpZiAoaHctPnBvcnRfZW5hYmxlZFtpXSkgeworCQkJcHJfZGVidWcoImNhbGxlZCB3aGVuIHBvcnQgZW5hYmxlZC5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKIAkvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgKi8KLQlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRCApIHsKKwlpZiAoaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAkvKiBSZXRyaWV2ZSB0aGUgYnVmZmVyIGxvYyZzaXplIGFuZCB0aW1lb3V0ICovCi0JaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsCi0JCQkJJihody0+YnVmaW5mbyksIHNpemVvZihody0+YnVmaW5mbykpKSApIHsKKwlpZiAoKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAorCQkJCQkgICAgICYoaHctPmJ1ZmluZm8pLAorCQkJCQkgICAgIHNpemVvZihody0+YnVmaW5mbykpKSkgewogCQlyZXR1cm4gcmVzdWx0OwogCX0KLQlody0+YnVmaW5mby5wYWdlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLnBhZ2UpOwotCWh3LT5idWZpbmZvLm9mZnNldCA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5vZmZzZXQpOwotCWh3LT5idWZpbmZvLmxlbiA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5sZW4pOwotCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfTUFYTE9BRFRJTUUsCi0JCQkJJihody0+ZGx0aW1lb3V0KSkpICkgeworCWh3LT5idWZpbmZvLnBhZ2UgPSBsZTE2X3RvX2NwdShody0+YnVmaW5mby5wYWdlKTsKKwlody0+YnVmaW5mby5vZmZzZXQgPSBsZTE2X3RvX2NwdShody0+YnVmaW5mby5vZmZzZXQpOworCWh3LT5idWZpbmZvLmxlbiA9IGxlMTZfdG9fY3B1KGh3LT5idWZpbmZvLmxlbik7CisJaWYgKChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAorCQkJCQkgICAgICAgJihody0+ZGx0aW1lb3V0KSkpKSB7CiAJCXJldHVybiByZXN1bHQ7CiAJfQotCWh3LT5kbHRpbWVvdXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmRsdGltZW91dCk7CisJaHctPmRsdGltZW91dCA9IGxlMTZfdG9fY3B1KGh3LT5kbHRpbWVvdXQpOwogCi0JV0xBTl9MT0dfREVCVUcoMSwiZmxhc2hkbF9lbmFibGVcbiIpOworCXByX2RlYnVnKCJmbGFzaGRsX2VuYWJsZVxuIik7CiAKIAlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQ7Ci0JREJGRVhJVDsKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUKICoKQEAgLTIyNDUsMjQgKzE5NjQsMjAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKIHsKLQlEQkZFTlRFUjsKIAkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCi0JaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQlXTEFOX0xPR19ERUJVRygxLCJmbGFzaGRsX2VuYWJsZVxuIik7CisJcHJfZGVidWcoImZsYXNoZGxfZW5hYmxlXG4iKTsKIAogCS8qIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQsIHNvIEkgZG9uJ3QgKi8KIAkvKiAgYm90aGVyICB3LyB0aGUgcmV0dXJuIHZhbHVlICovCi0JaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCAsIDApOworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAsIDApOwogCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUKICoKQEAgLTIyOTIsNDggKzIwMDcsNDIgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoCi0JaGZhMzg0eF90CSpodywKLQl1MzIJCWRhZGRyLAotCXZvaWQJCSpidWYsCi0JdTMyCQlsZW4pCitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pCiB7Ci0JaW50CQlyZXN1bHQgPSAwOwotCXUzMgkJZGxidWZhZGRyOwotCWludAkJbmJ1cm5zOwotCXUzMgkJYnVybmxlbjsKLQl1MzIJCWJ1cm5kYWRkcjsKLQl1MTYJCWJ1cm5sbzsKLQl1MTYJCWJ1cm5oaTsKLQlpbnQJCW53cml0ZXM7Ci0JdTgJCSp3cml0ZWJ1ZjsKLQl1MTYJCXdyaXRlcGFnZTsKLQl1MTYJCXdyaXRlb2Zmc2V0OwotCXUzMgkJd3JpdGVsZW47Ci0JaW50CQlpOwotCWludAkJajsKKwlpbnQgcmVzdWx0ID0gMDsKKwl1MzIgZGxidWZhZGRyOworCWludCBuYnVybnM7CisJdTMyIGJ1cm5sZW47CisJdTMyIGJ1cm5kYWRkcjsKKwl1MTYgYnVybmxvOworCXUxNiBidXJuaGk7CisJaW50IG53cml0ZXM7CisJdTggKndyaXRlYnVmOworCXUxNiB3cml0ZXBhZ2U7CisJdTE2IHdyaXRlb2Zmc2V0OworCXUzMiB3cml0ZWxlbjsKKwlpbnQgaTsKKwlpbnQgajsKIAotCURCRkVOVEVSOwotCVdMQU5fTE9HX0RFQlVHKDUsImRhZGRyPTB4JTA4eCBsZW49JWRcbiIsIGRhZGRyLCBsZW4pOworCXByX2RlYnVnKCJkYWRkcj0weCUwOHggbGVuPSVkXG4iLCBkYWRkciwgbGVuKTsKIAogCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlICovCi0JaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQlXTEFOX0xPR19JTkZPKCJEb3dubG9hZCAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKwlwcmludGsoS0VSTl9JTkZPICJEb3dubG9hZCAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKIAogCS8qIENvbnZlcnQgdG8gZmxhdCBhZGRyZXNzIGZvciBhcml0aG1ldGljICovCiAJLyogTk9URTogZGxidWZmZXIgUklEIHN0b3JlcyB0aGUgYWRkcmVzcyBpbiBBVVggZm9ybWF0ICovCi0JZGxidWZhZGRyID0gSEZBMzg0eF9BRERSX0FVWF9NS0ZMQVQoCi0JCQlody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQpOwotCVdMQU5fTE9HX0RFQlVHKDUsCi0JCSJkbGJ1Zi5wYWdlPTB4JTA0eCBkbGJ1Zi5vZmZzZXQ9MHglMDR4IGRsYnVmYWRkcj0weCUwOHhcbiIsCi0JCWh3LT5idWZpbmZvLnBhZ2UsIGh3LT5idWZpbmZvLm9mZnNldCwgZGxidWZhZGRyKTsKKwlkbGJ1ZmFkZHIgPQorCSAgICBIRkEzODR4X0FERFJfQVVYX01LRkxBVChody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJkbGJ1Zi5wYWdlPTB4JTA0eCBkbGJ1Zi5vZmZzZXQ9MHglMDR4IGRsYnVmYWRkcj0weCUwOHhcbiIsCisJICAgICAgIGh3LT5idWZpbmZvLnBhZ2UsIGh3LT5idWZpbmZvLm9mZnNldCwgZGxidWZhZGRyKTsKIAogI2lmIDAKLVdMQU5fTE9HX1dBUk5JTkcoImRsYnVmQDB4JTA2bHggbGVuPSVkIHRvPSVkXG4iLCBkbGJ1ZmFkZHIsIGh3LT5idWZpbmZvLmxlbiwgaHctPmRsdGltZW91dCk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiZGxidWZAMHglMDZseCBsZW49JWQgdG89JWRcbiIsIGRsYnVmYWRkciwKKwkgICAgICAgaHctPmJ1ZmluZm8ubGVuLCBody0+ZGx0aW1lb3V0KTsKICNlbmRpZgogCS8qIENhbGN1bGF0aW9ucyB0byBkZXRlcm1pbmUgaG93IG1hbnkgZmlsbHMgb2YgdGhlIGRsYnVmZmVyIHRvIGRvCiAJICogYW5kIGhvdyBtYW55IFVTQiB3bWVtcmVxJ3MgdG8gZG8gZm9yIGVhY2ggZmlsbC4gIEF0IHRoaXMgcG9pbnQKQEAgLTIzNTEsNzQgKzIwNjAsNjAgQEAKIAlud3JpdGVzICs9IChody0+YnVmaW5mby5sZW4gJSBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pID8gMSA6IDA7CiAKIAkvKiBGb3IgZWFjaCBidXJuICovCi0JZm9yICggaSA9IDA7IGkgPCBuYnVybnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBuYnVybnM7IGkrKykgewogCQkvKiBHZXQgdGhlIGRlc3QgYWRkcmVzcyBhbmQgbGVuICovCiAJCWJ1cm5sZW4gPSAobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKSA+IGh3LT5idWZpbmZvLmxlbiA/Ci0JCQkJaHctPmJ1ZmluZm8ubGVuIDoKLQkJCQkobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKTsKKwkJICAgIGh3LT5idWZpbmZvLmxlbiA6IChsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpOwogCQlidXJuZGFkZHIgPSBkYWRkciArIChody0+YnVmaW5mby5sZW4gKiBpKTsKIAkJYnVybmxvID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihidXJuZGFkZHIpOwogCQlidXJuaGkgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShidXJuZGFkZHIpOwogCi0JCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gZmxhc2ggQDB4JTA2eFxuIiwKLQkJCWJ1cm5sZW4sIGJ1cm5kYWRkcik7CisJCXByaW50ayhLRVJOX0lORk8gIldyaXRpbmcgJWQgYnl0ZXMgdG8gZmxhc2ggQDB4JTA2eFxuIiwKKwkJICAgICAgIGJ1cm5sZW4sIGJ1cm5kYWRkcik7CiAKIAkJLyogU2V0IHRoZSBkb3dubG9hZCBtb2RlICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX05WLAotCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiZG93bmxvYWQoTlYsbG89JXgsaGk9JXgsbGVuPSV4KSAiCi0JCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAotCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOworCQkJCQkgICAgICBidXJubG8sIGJ1cm5oaSwgYnVybmxlbik7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZG93bmxvYWQoTlYsbG89JXgsaGk9JXgsbGVuPSV4KSAiCisJCQkgICAgICAgImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAorCQkJICAgICAgIGJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOwogCQkJZ290byBleGl0X3Byb2M7CiAJCX0KIAogCQkvKiBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaCBkb3dubG9hZCBidWZmZXIgKi8KLQkJZm9yICggaj0wOyBqIDwgbndyaXRlczsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBud3JpdGVzOyBqKyspIHsKIAkJCXdyaXRlYnVmID0gYnVmICsKLQkJCQkoaSpody0+YnVmaW5mby5sZW4pICsKLQkJCQkoaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQkJICAgIChpICogaHctPmJ1ZmluZm8ubGVuKSArCisJCQkgICAgKGogKiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOwogCi0JCQl3cml0ZXBhZ2UgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRSgKLQkJCQkJZGxidWZhZGRyICsKLQkJCQkJKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSk7Ci0JCQl3cml0ZW9mZnNldCA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoCi0JCQkJCWRsYnVmYWRkciArCi0JCQkJCShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikpOworCQkJd3JpdGVwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZGxidWZhZGRyICsKKwkJCQkJCQkgICAgKGogKgorCQkJCQkJCSAgICAgSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSk7CisJCQl3cml0ZW9mZnNldCA9CisJCQkgICAgSEZBMzg0eF9BRERSX0NNRF9NS09GRihkbGJ1ZmFkZHIgKworCQkJCQkJICAgKGogKgorCQkJCQkJICAgIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikpOwogCi0JCQl3cml0ZWxlbiA9IGJ1cm5sZW4tKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKLQkJCXdyaXRlbGVuID0gd3JpdGVsZW4gID4gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOID8KLQkJCQkJSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOIDoKLQkJCQkJd3JpdGVsZW47CisJCQl3cml0ZWxlbiA9IGJ1cm5sZW4gLSAoaiAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisJCQl3cml0ZWxlbiA9IHdyaXRlbGVuID4gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOID8KKwkJCSAgICBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4gOiB3cml0ZWxlbjsKIAotCQkJcmVzdWx0ID0gaGZhMzg0eF9kb3dtZW1fd2FpdCggaHcsCi0JCQkJCXdyaXRlcGFnZSwKLQkJCQkJd3JpdGVvZmZzZXQsCi0JCQkJCXdyaXRlYnVmLAotCQkJCQl3cml0ZWxlbiApOwotI2lmIDAKLQotQ29tbWVudCBvdXQgZm9yIGRlYnVnZ2luZywgYXNzdW1lIHRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bC4KLQkJCWlmIChyZXN1bHQpIHsKLQkJCQlXTEFOX0xPR19FUlJPUigKLQkJCQkJIldyaXRlIHRvIGRsIGJ1ZmZlciBmYWlsZWQsICIKLQkJCQkJInJlc3VsdD0weCUwNHguIEFib3J0aW5nLlxuIiwKLQkJCQkJcmVzdWx0KTsKLQkJCQlnb3RvIGV4aXRfcHJvYzsKLQkJCX0KLSNlbmRpZgotCisJCQlyZXN1bHQgPSBoZmEzODR4X2Rvd21lbV93YWl0KGh3LAorCQkJCQkJICAgICB3cml0ZXBhZ2UsCisJCQkJCQkgICAgIHdyaXRlb2Zmc2V0LAorCQkJCQkJICAgICB3cml0ZWJ1Ziwgd3JpdGVsZW4pOwogCQl9CiAKIAkJLyogc2V0IHRoZSBkb3dubG9hZCAnd3JpdGUgZmxhc2gnIG1vZGUgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsCi0JCQkJSEZBMzg0eF9QUk9HTU9ERV9OVldSSVRFLAotCQkJCTAsMCwwKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigKLQkJCQkiZG93bmxvYWQoTlZXUklURSxsbz0leCxoaT0leCxsZW49JXgpICIKLQkJCQkiY21kIGZhaWxlZCwgcmVzdWx0PSVkLiBBYm9ydGluZyBkL2xcbiIsCi0JCQkJYnVybmxvLCBidXJuaGksIGJ1cm5sZW4sIHJlc3VsdCk7CisJCQkJCSAgICAgIEhGQTM4NHhfUFJPR01PREVfTlZXUklURSwKKwkJCQkJICAgICAgMCwgMCwgMCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJkb3dubG9hZChOVldSSVRFLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJICAgICAgICJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCSAgICAgICBidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKIAkJCWdvdG8gZXhpdF9wcm9jOwogCQl9CiAKQEAgLTI0MzEsMTEgKzIxMjYsOSBAQAogCS8qICBhY3R1YWxseSBkaXNhYmxlIHByb2dyYW1taW5nIG1vZGUuICBSZW1lbWJlciwgdGhhdCB3aWxsIGNhdXNlIHRoZSAqLwogCS8qICB0aGUgZmlybXdhcmUgdG8gZWZmZWN0aXZlbHkgcmVzZXQgaXRzZWxmLiAqLwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfZ2V0Y29uZmlnCiAqCkBAIC0yNDYzLDEyICsyMTU2LDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbikKIHsKLQlpbnQgCQkJcmVzdWx0OwotCURCRkVOVEVSOworCWludCByZXN1bHQ7CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RvcnJpZF93YWl0KGh3LCByaWQsIGJ1ZiwgbGVuKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjUwMCwxNCArMjE5MSwxMSBAQAogICogICAgICAgQW55CiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQKLWhmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMoCi0gICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcsCi0gICAgICAgICB1MTYgICAgICAgICAgICAgICAgICByaWQsCi0gICAgICAgICBjdGx4X3VzZXJjYl90ICAgICAgICAgICB1c2VyY2IsCi0gICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqdXNlcmNiX2RhdGEpCitoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisJCQkgICAgIHUxNiByaWQsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKLSAgICAgICAgIHJldHVybiBoZmEzODR4X2RvcnJpZF9hc3luYyhodywgcmlkLCBOVUxMLCAwLAotCQkJCSAgICAgaGZhMzg0eF9jYl9ycmlkLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKKwlyZXR1cm4gaGZhMzg0eF9kb3JyaWRfYXN5bmMoaHcsIHJpZCwgTlVMTCwgMCwKKwkJCQkgICAgaGZhMzg0eF9jYl9ycmlkLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNTM0LDcxICsyMjIyLDE2IEBACiAgKiAgICAgICBwcm9jZXNzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoCi0gICAgICAgICBoZmEzODR4X3QgICAgICAgKmh3LAotICAgICAgICAgdTE2ICAgICAgICAgIHJpZCwKLSAgICAgICAgIHZvaWQgICAgICAgICAgICAqYnVmLAotICAgICAgICAgdTE2ICAgICAgICAgIGxlbiwKLSAgICAgICAgIGN0bHhfdXNlcmNiX3QgICB1c2VyY2IsCi0gICAgICAgICB2b2lkICAgICAgICAgICAgKnVzZXJjYl9kYXRhKQoraGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhoZmEzODR4X3QgKmh3LAorCQkJICAgICB1MTYgcmlkLAorCQkJICAgICB2b2lkICpidWYsCisJCQkgICAgIHUxNiBsZW4sIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3dyaWRfYXN5bmMoaHcsIHJpZCwgYnVmLCBsZW4sCiAJCQkJICAgIGhmYTM4NHhfY2Jfc3RhdHVzLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIGhmYTM4NHhfZHJ2cl9oYW5kb3ZlcgotKgotKiBTZW5kcyBhIGhhbmRvdmVyIG5vdGlmaWNhdGlvbiB0byB0aGUgTUFDLgotKgotKiBBcmd1bWVudHM6Ci0qCWh3CQlkZXZpY2Ugc3RydWN0dXJlCi0qCWFkZHIJCWFkZHJlc3Mgb2Ygc3RhdGlvbiB0aGF0J3MgbGVmdAotKgotKiBSZXR1cm5zOgotKgl6ZXJvCQlzdWNjZXNzLgotKgktRVJFU1RBUlRTWVMJcmVjZWl2ZWQgc2lnbmFsIHdoaWxlIHdhaXRpbmcgZm9yIHNlbWFwaG9yZS4KLSoJLUVJTwkJZmFpbGVkIHRvIHdyaXRlIHRvIGJhcCwgb3IgZmFpbGVkIGluIGNtZC4KLSoKLSogU2lkZSBlZmZlY3RzOgotKgotKiBDYWxsIGNvbnRleHQ6Ci0qCXByb2Nlc3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IGhmYTM4NHhfZHJ2cl9oYW5kb3ZlciggaGZhMzg0eF90ICpodywgdTggKmFkZHIpCi17Ci0gICAgICAgIERCRkVOVEVSOwotCVdMQU5fTE9HX0VSUk9SKCJOb3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBVU0IhXG4iKTsKLQlEQkZFWElUOwotCXJldHVybiAtRUlPOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogaGZhMzg0eF9kcnZyX2xvd19sZXZlbAotKgotKiBXcml0ZSB0ZXN0IGNvbW1hbmRzIHRvIHRoZSBjYXJkLiAgU29tZSB0ZXN0IGNvbW1hbmRzIGRvbid0IG1ha2UKLSogc2Vuc2Ugd2l0aG91dCBwcmlvciBzZXQtdXAuICBGb3IgZXhhbXBsZSwgY29udGlub3VzIFRYIGlzbid0IHZlcnkKLSogdXNlZnVsIHVudGlsIHlvdSBzZXQgdGhlIGNoYW5uZWwuICBUaGF0IGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlCi0qCi0qIFNpZGUgZWZmZWN0czoKLSoKLSogQ2FsbCBjb250ZXh0OgotKiAgICAgIHByb2Nlc3MgdGhyZWFkCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBoZmEzODR4X2RydnJfbG93X2xldmVsKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpCi17Ci0JaW50ICAgICAgICAgICAgIHJlc3VsdDsKLQlEQkZFTlRFUjsKLQotCS8qIERvIGkgbmVlZCBhIGhvc3QyaGZhLi4uIGNvbnZlcnNpb24gPyAqLwotCi0JcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCBjbWQpOwotCi0JREJGRVhJVDsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUKICoKICogRW5kcyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLgpAQCAtMjYxNiwyNyArMjI0OSwyMiBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50Ci1oZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KQoraW50IGhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpCiB7Ci0JREJGRU5URVI7CiAJLyogQ2hlY2sgdGhhdCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBkb3dubG9hZCBzdGF0ZSAqLwotCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQgKSB7CisJaWYgKGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQlXTEFOX0xPR19ERUJVRygzLCJyYW1kbF9kaXNhYmxlKClcbiIpOworCXByX2RlYnVnKCJyYW1kbF9kaXNhYmxlKClcbiIpOwogCiAJLyogVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCwgc28gSSBkb24ndCAqLwogCS8qICBib3RoZXIgIHcvIHRoZSByZXR1cm4gdmFsdWUgKi8KLQloZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9ESVNBQkxFLCAwLCAwICwgMCk7CisJaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCwgMCk7CiAJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQ7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlCiAqCkBAIC0yNjYxLDU1ICsyMjg5LDQ5IEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQKLWhmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaGZhMzg0eF90ICpodywgdTMyIGV4ZWFkZHIpCitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MzIgZXhlYWRkcikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JdTE2CQlsb3dhZGRyOwotCXUxNgkJaGlhZGRyOwotCWludAkJaTsKLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwl1MTYgbG93YWRkcjsKKwl1MTYgaGlhZGRyOworCWludCBpOworCiAJLyogQ2hlY2sgdGhhdCBhIHBvcnQgaXNuJ3QgYWN0aXZlICovCi0JZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgewotCQlpZiAoIGh3LT5wb3J0X2VuYWJsZWRbaV0gKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigKLQkJCQkiQ2FuJ3QgZG93bmxvYWQgd2l0aCBhIG1hY3BvcnQgZW5hYmxlZC5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgeworCQlpZiAoaHctPnBvcnRfZW5hYmxlZFtpXSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkNhbid0IGRvd25sb2FkIHdpdGggYSBtYWNwb3J0IGVuYWJsZWQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCiAJLyogQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlICovCi0JaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkRvd25sb2FkIHN0YXRlIG5vdCBkaXNhYmxlZC5cbiIpOworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEb3dubG9hZCBzdGF0ZSBub3QgZGlzYWJsZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JV0xBTl9MT0dfREVCVUcoMywicmFtZGxfZW5hYmxlLCBleGVhZGRyPTB4JTA4eFxuIiwgZXhlYWRkcik7CisJcHJfZGVidWcoInJhbWRsX2VuYWJsZSwgZXhlYWRkcj0weCUwOHhcbiIsIGV4ZWFkZHIpOwogCiAJLyogQ2FsbCB0aGUgZG93bmxvYWQoMSxhZGRyKSBmdW5jdGlvbiAqLwogCWxvd2FkZHIgPSBIRkEzODR4X0FERFJfQ01EX01LT0ZGKGV4ZWFkZHIpOwotCWhpYWRkciA9ICBIRkEzODR4X0FERFJfQ01EX01LUEFHRShleGVhZGRyKTsKKwloaWFkZHIgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShleGVhZGRyKTsKIAogCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX1JBTSwKLQkJCWxvd2FkZHIsIGhpYWRkciwgMCk7CisJCQkJICAgICAgbG93YWRkciwgaGlhZGRyLCAwKTsKIAotCWlmICggcmVzdWx0ID09IDApIHsKKwlpZiAocmVzdWx0ID09IDApIHsKIAkJLyogU2V0IHRoZSBkb3dubG9hZCBzdGF0ZSAqLwogCQlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEOwogCX0gZWxzZSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkiY21kX2Rvd25sb2FkKDB4JTA0eCwgMHglMDR4KSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCi0JCQlsb3dhZGRyLAotCQkJaGlhZGRyLAotCQkJcmVzdWx0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJjbWRfZG93bmxvYWQoMHglMDR4LCAweCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwKKwkJICAgICAgIGxvd2FkZHIsIGhpYWRkciwgcmVzdWx0KTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZQogKgpAQCAtMjczNiw1NyArMjM1OCw1NCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50Ci1oZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkKiBidWYsIHUzMiBsZW4pCitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBkYWRkciwgdm9pZCAqYnVmLCB1MzIgbGVuKQogewotCWludAkJcmVzdWx0ID0gMDsKLQlpbnQJCW53cml0ZXM7Ci0JdTgJCSpkYXRhID0gYnVmOwotCWludAkJaTsKLQl1MzIJCWN1cnJhZGRyOwotCXUxNgkJY3VycnBhZ2U7Ci0JdTE2CQljdXJyb2Zmc2V0OwotCXUxNgkJY3VycmxlbjsKLQlEQkZFTlRFUjsKLQkvKiBDaGVjayB0aGF0IHdlJ3JlIGluIHRoZSByYW0gZG93bmxvYWQgc3RhdGUgKi8KLQlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaW50IHJlc3VsdCA9IDA7CisJaW50IG53cml0ZXM7CisJdTggKmRhdGEgPSBidWY7CisJaW50IGk7CisJdTMyIGN1cnJhZGRyOworCXUxNiBjdXJycGFnZTsKKwl1MTYgY3Vycm9mZnNldDsKKwl1MTYgY3VycmxlbjsKIAotCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gcmFtIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJhbSBkb3dubG9hZCBzdGF0ZSAqLworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmludGsoS0VSTl9JTkZPICJXcml0aW5nICVkIGJ5dGVzIHRvIHJhbSBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKIAogCS8qIEhvdyBtYW55IGRvd21lbSBjYWxscz8gICovCiAJbndyaXRlcyA9IGxlbiAvIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKIAlud3JpdGVzICs9IGxlbiAlIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA/IDEgOiAwOwogCiAJLyogRG8gYmxvY2tpbmcgd21lbSdzICovCi0JZm9yKGk9MDsgaSA8IG53cml0ZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBud3JpdGVzOyBpKyspIHsKIAkJLyogbWFrZSBhZGRyZXNzIGFyZ3MgKi8KIAkJY3VycmFkZHIgPSBkYWRkciArIChpICogSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKIAkJY3VycnBhZ2UgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShjdXJyYWRkcik7CiAJCWN1cnJvZmZzZXQgPSBIRkEzODR4X0FERFJfQ01EX01LT0ZGKGN1cnJhZGRyKTsKIAkJY3VycmxlbiA9IGxlbiAtIChpICogSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKLQkJaWYgKCBjdXJybGVuID4gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSB7CisJCWlmIChjdXJybGVuID4gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKQogCQkJY3VycmxlbiA9IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKLQkJfQogCi0JIAkvKiBEbyBibG9ja2luZyBjdGx4ICovCi0JCXJlc3VsdCA9IGhmYTM4NHhfZG93bWVtX3dhaXQoIGh3LAotCQkJCWN1cnJwYWdlLAotCQkJCWN1cnJvZmZzZXQsCi0JCQkJZGF0YSArIChpKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiksCi0JCQkJY3VycmxlbiApOworCQkvKiBEbyBibG9ja2luZyBjdGx4ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZG93bWVtX3dhaXQoaHcsCisJCQkJCSAgICAgY3VycnBhZ2UsCisJCQkJCSAgICAgY3Vycm9mZnNldCwKKwkJCQkJICAgICBkYXRhICsKKwkJCQkJICAgICAoaSAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiksCisJCQkJCSAgICAgY3Vycmxlbik7CiAKLQkJaWYgKHJlc3VsdCkgYnJlYWs7CisJCWlmIChyZXN1bHQpCisJCQlicmVhazsKIAogCQkvKiBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgYSByZWFkYmFjay4gKi8KIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9yZWFkcGRhCiAqCkBAIC0yODIwLDEwMSArMjQzOSw4OSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludAkJcmVzdWx0ID0gMDsKLQl1MTYJCSpwZGEgPSBidWY7Ci0JaW50CQlwZGFvayA9IDA7Ci0JaW50CQltb3JlcGRycyA9IDE7Ci0JaW50CQljdXJycGRyID0gMDsJLyogd29yZCBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgcGRyICovCi0Jc2l6ZV90CQlpOwotCXUxNgkJcGRybGVuOwkJLyogcGRyIGxlbmd0aCBpbiBieXRlcywgaG9zdCBvcmRlciAqLwotCXUxNgkJcGRyY29kZTsJLyogcGRyIGNvZGUsIGhvc3Qgb3JkZXIgKi8KLQl1MTYJCWN1cnJwYWdlOwotCXUxNgkJY3Vycm9mZnNldDsKKwlpbnQgcmVzdWx0ID0gMDsKKwl1MTYgKnBkYSA9IGJ1ZjsKKwlpbnQgcGRhb2sgPSAwOworCWludCBtb3JlcGRycyA9IDE7CisJaW50IGN1cnJwZHIgPSAwOwkvKiB3b3JkIG9mZnNldCBvZiB0aGUgY3VycmVudCBwZHIgKi8KKwlzaXplX3QgaTsKKwl1MTYgcGRybGVuOwkJLyogcGRyIGxlbmd0aCBpbiBieXRlcywgaG9zdCBvcmRlciAqLworCXUxNiBwZHJjb2RlOwkJLyogcGRyIGNvZGUsIGhvc3Qgb3JkZXIgKi8KKwl1MTYgY3VycnBhZ2U7CisJdTE2IGN1cnJvZmZzZXQ7CiAJc3RydWN0IHBkYWxvYyB7Ci0JCXUzMgljYXJkYWRkcjsKLQkJdTE2CWF1eGN0bDsKLQl9IHBkYWxvY1tdID0KLQl7Ci0JCXsgSEZBMzg0Ml9QREFfQkFTRSwJCTB9LAotCQl7IEhGQTM4NDFfUERBX0JBU0UsCQkwfSwKLQkJeyBIRkEzODQxX1BEQV9CT0dVU19CQVNFLAkwfQorCQl1MzIgY2FyZGFkZHI7CisJCXUxNiBhdXhjdGw7CisJfSBwZGFsb2NbXSA9IHsKKwkJeworCQlIRkEzODQyX1BEQV9CQVNFLCAwfSwgeworCQlIRkEzODQxX1BEQV9CQVNFLCAwfSwgeworCQlIRkEzODQxX1BEQV9CT0dVU19CQVNFLCAwfQogCX07CiAKLQlEQkZFTlRFUjsKLQogCS8qIFJlYWQgdGhlIHBkYSBmcm9tIGVhY2gga25vd24gYWRkcmVzcy4gICovCi0JZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYWxvYyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYWxvYyk7IGkrKykgewogCQkvKiBNYWtlIGFkZHJlc3MgKi8KIAkJY3VycnBhZ2UgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShwZGFsb2NbaV0uY2FyZGFkZHIpOwogCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihwZGFsb2NbaV0uY2FyZGFkZHIpOwogCi0JCXJlc3VsdCA9IGhmYTM4NHhfZG9ybWVtX3dhaXQoaHcsCi0JCQljdXJycGFnZSwKLQkJCWN1cnJvZmZzZXQsCi0JCQlidWYsCi0JCQlsZW4pOwkJLyogdW5pdHMgb2YgYnl0ZXMgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kb3JtZW1fd2FpdChodywgY3VycnBhZ2UsIGN1cnJvZmZzZXQsIGJ1ZiwgbGVuKTsJLyogdW5pdHMgb2YgYnl0ZXMgKi8KIAogCQlpZiAocmVzdWx0KSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKAotCQkJCQkgICJSZWFkIGZyb20gaW5kZXggJXpkIGZhaWxlZCwgY29udGludWluZ1xuIiwKLQkJCQlpICk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIlJlYWQgZnJvbSBpbmRleCAlemQgZmFpbGVkLCBjb250aW51aW5nXG4iLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogVGVzdCBmb3IgZ2FyYmFnZSAqLwogCQlwZGFvayA9IDE7CS8qIGluaXRpYWxseSBhc3N1bWUgZ29vZCAqLwogCQltb3JlcGRycyA9IDE7Ci0JCXdoaWxlICggcGRhb2sgJiYgbW9yZXBkcnMgKSB7Ci0JCQlwZHJsZW4gPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHJdKSAqIDI7Ci0JCQlwZHJjb2RlID0gaGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyKzFdKTsKKwkJd2hpbGUgKHBkYW9rICYmIG1vcmVwZHJzKSB7CisJCQlwZHJsZW4gPSBsZTE2X3RvX2NwdShwZGFbY3VycnBkcl0pICogMjsKKwkJCXBkcmNvZGUgPSBsZTE2X3RvX2NwdShwZGFbY3VycnBkciArIDFdKTsKIAkJCS8qIFRlc3QgdGhlIHJlY29yZCBsZW5ndGggKi8KLQkJCWlmICggcGRybGVuID4gSEZBMzg0eF9QRFJfTEVOX01BWCB8fCBwZHJsZW4gPT0gMCkgewotCQkJCVdMQU5fTE9HX0VSUk9SKCJwZHJsZW4gaW52YWxpZD0lZFxuIiwKLQkJCQkJcGRybGVuKTsKKwkJCWlmIChwZHJsZW4gPiBIRkEzODR4X1BEUl9MRU5fTUFYIHx8IHBkcmxlbiA9PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJwZHJsZW4gaW52YWxpZD0lZFxuIiwgcGRybGVuKTsKIAkJCQlwZGFvayA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBUZXN0IHRoZSBjb2RlICovCi0JCQlpZiAoICFoZmEzODR4X2lzZ29vZF9wZHJjb2RlKHBkcmNvZGUpICkgewotCQkJCVdMQU5fTE9HX0VSUk9SKCJwZHJjb2RlIGludmFsaWQ9JWRcbiIsCi0JCQkJCXBkcmNvZGUpOworCQkJaWYgKCFoZmEzODR4X2lzZ29vZF9wZHJjb2RlKHBkcmNvZGUpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJwZHJjb2RlIGludmFsaWQ9JWRcbiIsCisJCQkJICAgICAgIHBkcmNvZGUpOwogCQkJCXBkYW9rID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCS8qIFRlc3QgZm9yIGNvbXBsZXRpb24gKi8KLQkJCWlmICggcGRyY29kZSA9PSBIRkEzODR4X1BEUl9FTkRfT0ZfUERBKSB7CisJCQlpZiAocGRyY29kZSA9PSBIRkEzODR4X1BEUl9FTkRfT0ZfUERBKQogCQkJCW1vcmVwZHJzID0gMDsKLQkJCX0KIAogCQkJLyogTW92ZSB0byB0aGUgbmV4dCBwZHIgKGlmIG5lY2Vzc2FyeSkgKi8KLQkJCWlmICggbW9yZXBkcnMgKSB7CisJCQlpZiAobW9yZXBkcnMpIHsKIAkJCQkvKiBub3RlIHRoZSBhY2Nlc3MgdG8gcGRhW10sIG5lZWQgd29yZHMgaGVyZSAqLwotCQkJCWN1cnJwZHIgKz0gaGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyXSkgKyAxOworCQkJCWN1cnJwZHIgKz0gbGUxNl90b19jcHUocGRhW2N1cnJwZHJdKSArIDE7CiAJCQl9CiAJCX0KLQkJaWYgKCBwZGFvayApIHsKLQkJCVdMQU5fTE9HX0lORk8oCi0JCQkJIlBEQSBSZWFkIGZyb20gMHglMDh4IGluICVzIHNwYWNlLlxuIiwKLQkJCQlwZGFsb2NbaV0uY2FyZGFkZHIsCi0JCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAwID8gIkVYVERTIiA6Ci0JCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAxID8gIk5WIiA6Ci0JCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAyID8gIlBIWSIgOgotCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMyA/ICJJQ1NSQU0iIDoKLQkJCQkiPGJvZ3VzIGF1eGN0bD4iKTsKKwkJaWYgKHBkYW9rKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIlBEQSBSZWFkIGZyb20gMHglMDh4IGluICVzIHNwYWNlLlxuIiwKKwkJCSAgICAgICBwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQkgICAgICAgcGRhbG9jW2ldLmF1eGN0bCA9PSAwID8gIkVYVERTIiA6CisJCQkgICAgICAgcGRhbG9jW2ldLmF1eGN0bCA9PSAxID8gIk5WIiA6CisJCQkgICAgICAgcGRhbG9jW2ldLmF1eGN0bCA9PSAyID8gIlBIWSIgOgorCQkJICAgICAgIHBkYWxvY1tpXS5hdXhjdGwgPT0gMyA/ICJJQ1NSQU0iIDoKKwkJCSAgICAgICAiPGJvZ3VzIGF1eGN0bD4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCXJlc3VsdCA9IHBkYW9rID8gMCA6IC1FTk9EQVRBOwogCi0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDMsIkZhaWx1cmU6IHBkYSBpcyBub3Qgb2theVxuIik7Ci0JfQorCWlmIChyZXN1bHQpCisJCXByX2RlYnVnKCJGYWlsdXJlOiBwZGEgaXMgbm90IG9rYXlcbiIpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfc2V0Y29uZmlnCiAqCkBAIC0yOTYzLDkgKzI1NzAsOCBAQAogCiBpbnQgaGZhMzg0eF9kcnZyX3N0YXJ0KGhmYTM4NHhfdCAqaHcpCiB7Ci0JaW50CQlyZXN1bHQsIHJlc3VsdDEsIHJlc3VsdDI7Ci0JdTE2CQlzdGF0dXM7Ci0JREJGRU5URVI7CisJaW50IHJlc3VsdCwgcmVzdWx0MSwgcmVzdWx0MjsKKwl1MTYgc3RhdHVzOwogCiAJbWlnaHRfc2xlZXAoKTsKIApAQCAtMjk3NCwyNyArMjU4MCwyMyBAQAogCSAqIGJhZGx5IGlmIGEgY2xlYXJfaGFsdCBpcyBjYWxsZWQgd2hlbiB0aGUgZW5kcG9pbnQgaXMgYWxyZWFkeQogCSAqIG9rCiAJICovCi0JcmVzdWx0ID0gdXNiX2dldF9zdGF0dXMoaHctPnVzYiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBody0+ZW5kcF9pbiwgJnN0YXR1cyk7CisJcmVzdWx0ID0KKwkgICAgdXNiX2dldF9zdGF0dXMoaHctPnVzYiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBody0+ZW5kcF9pbiwgJnN0YXR1cyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkiQ2Fubm90IGdldCBidWxrIGluIGVuZHBvaW50IHN0YXR1cy5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBnZXQgYnVsayBpbiBlbmRwb2ludCBzdGF0dXMuXG4iKTsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHN0YXR1cyA9PSAxKSAmJiB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9pbikpIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkiRmFpbGVkIHRvIHJlc2V0IGJ1bGsgaW4gZW5kcG9pbnQuXG4iKTsKLQl9CisJaWYgKChzdGF0dXMgPT0gMSkgJiYgdXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfaW4pKQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXNldCBidWxrIGluIGVuZHBvaW50LlxuIik7CiAKLQlyZXN1bHQgPSB1c2JfZ2V0X3N0YXR1cyhody0+dXNiLCBVU0JfUkVDSVBfRU5EUE9JTlQsIGh3LT5lbmRwX291dCwgJnN0YXR1cyk7CisJcmVzdWx0ID0KKwkgICAgdXNiX2dldF9zdGF0dXMoaHctPnVzYiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBody0+ZW5kcF9vdXQsICZzdGF0dXMpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkNhbm5vdCBnZXQgYnVsayBvdXQgZW5kcG9pbnQgc3RhdHVzLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGdldCBidWxrIG91dCBlbmRwb2ludCBzdGF0dXMuXG4iKTsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHN0YXR1cyA9PSAxKSAmJiB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkZhaWxlZCB0byByZXNldCBidWxrIG91dCBlbmRwb2ludC5cbiIpOwotCX0KKwlpZiAoKHN0YXR1cyA9PSAxKSAmJiB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpKQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXNldCBidWxrIG91dCBlbmRwb2ludC5cbiIpOwogCiAJLyogU3luY2hyb25vdXMgdW5saW5rLCBpbiBjYXNlIHdlJ3JlIHRyeWluZyB0byByZXN0YXJ0IHRoZSBkcml2ZXIgKi8KIAl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOwpAQCAtMzAwMiw5ICsyNjA0LDggQEAKIAkvKiBQb3N0IHRoZSBJTiB1cmIgKi8KIAlyZXN1bHQgPSBzdWJtaXRfcnhfdXJiKGh3LCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0ICE9IDApIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkiRmF0YWwsIGZhaWxlZCB0byBzdWJtaXQgUlggVVJCLCByZXN1bHQ9JWRcbiIsCi0JCQlyZXN1bHQpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJGYXRhbCwgZmFpbGVkIHRvIHN1Ym1pdCBSWCBVUkIsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMzAyMywzMiArMjYyNCwzMyBAQAogCXJlc3VsdCA9IHJlc3VsdDIgPSBoZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKIAlpZiAocmVzdWx0MSAhPSAwKSB7CiAJCWlmIChyZXN1bHQyICE9IDApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKAotCQkJCSJjbWRfaW5pdGlhbGl6ZSgpIGZhaWxlZCBvbiB0d28gYXR0ZW1wdHMsIHJlc3VsdHMgJWQgYW5kICVkXG4iLAotCQkJCXJlc3VsdDEsIHJlc3VsdDIpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImNtZF9pbml0aWFsaXplKCkgZmFpbGVkIG9uIHR3byBhdHRlbXB0cywgcmVzdWx0cyAlZCBhbmQgJWRcbiIsCisJCQkgICAgICAgcmVzdWx0MSwgcmVzdWx0Mik7CiAJCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOwogCQkJZ290byBkb25lOwogCQl9IGVsc2UgewotCQkJV0xBTl9MT0dfREVCVUcoMCwgIkZpcnN0IGNtZF9pbml0aWFsaXplKCkgZmFpbGVkIChyZXN1bHQgJWQpLFxuIiwKLQkJCQlyZXN1bHQxKTsKLQkJCVdMQU5fTE9HX0RFQlVHKDAsICJidXQgc2Vjb25kIGF0dGVtcHQgc3VjY2VlZGVkLiBBbGwgc2hvdWxkIGJlIG9rXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkZpcnN0IGNtZF9pbml0aWFsaXplKCkgZmFpbGVkIChyZXN1bHQgJWQpLFxuIiwKKwkJCSAgICAgICByZXN1bHQxKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImJ1dCBzZWNvbmQgYXR0ZW1wdCBzdWNjZWVkZWQuIEFsbCBzaG91bGQgYmUgb2tcbiIpOwogCQl9CiAJfSBlbHNlIGlmIChyZXN1bHQyICE9IDApIHsKLQkJV0xBTl9MT0dfV0FSTklORygKLQkJCSJGaXJzdCBjbWRfaW5pdGlhbGl6ZSgpIHN1Y2NlZWRlZCwgYnV0IHNlY29uZCBhdHRlbXB0IGZhaWxlZCAocmVzdWx0PSVkKVxuIiwKLQkJCXJlc3VsdDIpOwotCQlXTEFOX0xPR19XQVJOSU5HKCJNb3N0IGxpa2VseSB0aGUgY2FyZCB3aWxsIGJlIGZ1bmN0aW9uYWxcbiIpOwotCQkJZ290byBkb25lOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiRmlyc3QgY21kX2luaXRpYWxpemUoKSBzdWNjZWVkZWQsIGJ1dCBzZWNvbmQgYXR0ZW1wdCBmYWlsZWQgKHJlc3VsdD0lZClcbiIsCisJCSAgICAgICByZXN1bHQyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk1vc3QgbGlrZWx5IHRoZSBjYXJkIHdpbGwgYmUgZnVuY3Rpb25hbFxuIik7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1JVTk5JTkc7CiAKIGRvbmU6Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfc3RvcAogKgpAQCAtMzA2OCwxOSArMjY3MCwxNyBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50Ci1oZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KQoraW50IGhmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpCiB7Ci0JaW50CXJlc3VsdCA9IDA7Ci0JaW50CWk7Ci0JREJGRU5URVI7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGk7CiAKIAltaWdodF9zbGVlcCgpOwogCiAJLyogVGhlcmUncyBubyBuZWVkIGZvciBzcGlubG9ja3MgaGVyZS4gVGhlIFVTQiAiZGlzY29ubmVjdCIKIAkgKiBmdW5jdGlvbiBzZXRzIHRoaXMgInJlbW92ZWQiIGZsYWcgYW5kIHRoZW4gY2FsbHMgdXMuCiAJICovCi0JaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApIHsKKwlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKIAkJLyogQ2FsbCBpbml0aWFsaXplIHRvIGxlYXZlIHRoZSBNQUMgaW4gaXRzICdyZXNldCcgc3RhdGUgKi8KIAkJaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CiAKQEAgLTMwOTQsMTEgKzI2OTQsOSBAQAogCWRlbF90aW1lcl9zeW5jKCZody0+Y29tbXNxdWFsX3RpbWVyKTsKIAogCS8qIENsZWFyIGFsbCB0aGUgcG9ydCBzdGF0dXMgKi8KLQlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfTlVNUE9SVFNfTUFYOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykKIAkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7Ci0JfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTIzLDE4ICsyNzIxLDE3IEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCi0KK2ludCBoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCSBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQogewotCWludAkJdXNicGt0bGVuID0gc2l6ZW9mKGhmYTM4NHhfdHhfZnJhbWVfdCk7Ci0JaW50CQlyZXN1bHQ7Ci0JaW50CQlyZXQ7Ci0JY2hhcgkJKnB0cjsKLQotCURCRkVOVEVSOworCWludCB1c2Jwa3RsZW4gPSBzaXplb2YoaGZhMzg0eF90eF9mcmFtZV90KTsKKwlpbnQgcmVzdWx0OworCWludCByZXQ7CisJY2hhciAqcHRyOwogCiAJaWYgKGh3LT50eF91cmIuc3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQlXTEFOX0xPR19XQVJOSU5HKCJUWCBVUkIgYWxyZWFkeSBpbiB1c2VcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJUWCBVUkIgYWxyZWFkeSBpbiB1c2VcbiIpOwogCQlyZXN1bHQgPSAzOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMzE0NCw3ICsyNzQxLDcgQEAKIAltZW1zZXQoJmh3LT50eGJ1ZmYudHhmcm0uZGVzYywgMCwgc2l6ZW9mKGh3LT50eGJ1ZmYudHhmcm0uZGVzYykpOwogCiAJLyogU2V0dXAgdGhlIHVzYiB0eXBlIGZpZWxkICovCi0JaHctPnR4YnVmZi50eXBlID0gaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1RYRlJNKTsKKwlody0+dHhidWZmLnR5cGUgPSBjcHVfdG9fbGUxNihIRkEzODR4X1VTQl9UWEZSTSk7CiAKIAkvKiBTZXQgdXAgdGhlIHN3X3N1cHBvcnQgZmllbGQgdG8gaWRlbnRpZnkgdGhpcyBmcmFtZSAqLwogCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy5zd19zdXBwb3J0ID0gMHgwMTIzOwpAQCAtMzE1MiwzMyArMjc0OSwzMyBAQAogLyogVHggY29tcGxldGUgYW5kIFR4IGV4Y2VwdGlvbiBkaXNhYmxlIHBlciBkbGVhY2guICBNaWdodCBiZSBjYXVzaW5nCiAgKiBidWYgZGVwbGV0aW9uCiAgKi8KLS8vI2RlZmluZSBET0VYQyAgU0xQIC0tIGRvYm90aCBicmVha3MgaG9ycmlibHkgdW5kZXIgbG9hZCwgZG9leGMgbGVzcyBzby4KKy8qICNkZWZpbmUgRE9FWEMgIFNMUCAtLSBkb2JvdGggYnJlYWtzIGhvcnJpYmx5IHVuZGVyIGxvYWQsIGRvZXhjIGxlc3Mgc28uICovCiAjaWYgZGVmaW5lZChET0JPVEgpCiAJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQotCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKLQkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMSk7CisJICAgIEhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCSAgICBIRkEzODR4X1RYX1RYRVhfU0VUKDEpIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgxKTsKICNlbGlmIGRlZmluZWQoRE9FWEMpCiAJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQotCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKLQkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CisJICAgIEhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCSAgICBIRkEzODR4X1RYX1RYRVhfU0VUKDEpIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgwKTsKICNlbHNlCiAJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQotCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKLQkJSEZBMzg0eF9UWF9UWEVYX1NFVCgwKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CisJICAgIEhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCSAgICBIRkEzODR4X1RYX1RYRVhfU0VUKDApIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgwKTsKICNlbmRpZgogCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KLQkJaG9zdDJoZmEzODR4XzE2KGh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sKTsKKwkgICAgY3B1X3RvX2xlMTYoaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wpOwogCiAJLyogY29weSB0aGUgaGVhZGVyIG92ZXIgdG8gdGhlIHR4ZGVzYyAqLwotCW1lbWNweSgmKGh3LT50eGJ1ZmYudHhmcm0uZGVzYy5mcmFtZV9jb250cm9sKSwgcDgwMjExX2hkciwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCW1lbWNweSgmKGh3LT50eGJ1ZmYudHhmcm0uZGVzYy5mcmFtZV9jb250cm9sKSwgcDgwMjExX2hkciwKKwkgICAgICAgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOwogCiAJLyogaWYgd2UncmUgdXNpbmcgaG9zdCBXRVAsIGluY3JlYXNlIHNpemUgYnkgSVYrSUNWICovCiAJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKLQkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKzgpOwotCQkvLyBody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCB8PSBIRkEzODR4X1RYX05PRU5DUllQVF9TRVQoMSk7Ci0JCXVzYnBrdGxlbis9ODsKKwkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4gKyA4KTsKKwkJdXNicGt0bGVuICs9IDg7CiAJfSBlbHNlIHsKLQkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKTsKKwkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOwogCX0KIAogCXVzYnBrdGxlbiArPSBza2ItPmxlbjsKQEAgLTMxODcsNTkgKzI3ODQsNTEgQEAKIAlwdHIgPSBody0+dHhidWZmLnR4ZnJtLmRhdGE7CiAJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKIAkJbWVtY3B5KHB0ciwgcDgwMjExX3dlcC0+aXYsIHNpemVvZihwODAyMTFfd2VwLT5pdikpOwotCQlwdHIrPSBzaXplb2YocDgwMjExX3dlcC0+aXYpOworCQlwdHIgKz0gc2l6ZW9mKHA4MDIxMV93ZXAtPml2KTsKIAkJbWVtY3B5KHB0ciwgcDgwMjExX3dlcC0+ZGF0YSwgc2tiLT5sZW4pOwogCX0gZWxzZSB7CiAJCW1lbWNweShwdHIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCX0KIAkvKiBjb3B5IG92ZXIgdGhlIHBhY2tldCBkYXRhICovCi0JcHRyKz0gc2tiLT5sZW47CisJcHRyICs9IHNrYi0+bGVuOwogCiAJLyogY29weSBvdmVyIHRoZSBXRVAgSUNWIGlmIHdlIGFyZSB1c2luZyBob3N0IFdFUCAqLwotCWlmIChwODAyMTFfd2VwLT5kYXRhKSB7CisJaWYgKHA4MDIxMV93ZXAtPmRhdGEpCiAJCW1lbWNweShwdHIsIHA4MDIxMV93ZXAtPmljdiwgc2l6ZW9mKHA4MDIxMV93ZXAtPmljdikpOwotCX0KIAogCS8qIFNlbmQgdGhlIFVTQiBwYWNrZXQgKi8KLQl1c2JfZmlsbF9idWxrX3VyYiggJihody0+dHhfdXJiKSwgaHctPnVzYiwKLQkgICAgICAgICAgICAgICBody0+ZW5kcF9vdXQsCi0JICAgICAgICAgICAgICAgJihody0+dHhidWZmKSwgUk9VTkRVUDY0KHVzYnBrdGxlbiksCi0JICAgICAgICAgICAgICAgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2ssIGh3LT53bGFuZGV2ICk7CisJdXNiX2ZpbGxfYnVsa191cmIoJihody0+dHhfdXJiKSwgaHctPnVzYiwKKwkJCSAgaHctPmVuZHBfb3V0LAorCQkJICAmKGh3LT50eGJ1ZmYpLCBST1VORFVQNjQodXNicGt0bGVuKSwKKwkJCSAgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2ssIGh3LT53bGFuZGV2KTsKIAlody0+dHhfdXJiLnRyYW5zZmVyX2ZsYWdzIHw9IFVTQl9RVUVVRV9CVUxLOwogCiAJcmVzdWx0ID0gMTsKIAlyZXQgPSBzdWJtaXRfdHhfdXJiKGh3LCAmaHctPnR4X3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCByZXQgIT0gMCApIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkic3VibWl0X3R4X3VyYigpIGZhaWxlZCwgZXJyb3I9JWRcbiIsIHJldCk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAic3VibWl0X3R4X3VyYigpIGZhaWxlZCwgZXJyb3I9JWRcbiIsIHJldCk7CiAJCXJlc3VsdCA9IDM7CiAJfQogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIGhmYTM4NHhfdHhfdGltZW91dCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaGZhMzg0eF90CSpodyA9IHdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURCRkVOVEVSOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKLQlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCi0JICAgICAvKiBOb3RlIHRoZSBiaXR3aXNlIE9SLCBub3QgdGhlIGxvZ2ljYWwgT1IuICovCi0JICAgICAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHwKLQkgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSApCi0JeworCWlmICghaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJgorCSAgICAvKiBOb3RlIHRoZSBiaXR3aXNlIE9SLCBub3QgdGhlIGxvZ2ljYWwgT1IuICovCisJICAgICghdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSB8CisJICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkpIHsKIAkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwotCi0JREJGRVhJVDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjU3LDEyICsyODQ2LDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaGZhMzg0eF90CSpodyA9IChoZmEzODR4X3QqKWRhdGE7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0KLQlEQkZFTlRFUjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKQEAgLTMyNzAsNyArMjg1Nyw3IEBACiAJICogaGFzIHVucGx1Z2dlZCB0aGUgYWRhcHRlci4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRlbXAsICZody0+Y3RseHEucmVhcGFibGUpIHsKLQkJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OwogCiAJCWN0bHggPSBsaXN0X2VudHJ5KGVudHJ5LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7CiAJCWxpc3RfZGVsKCZjdGx4LT5saXN0KTsKQEAgLTMyNzksNyArMjg2Niw2IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCi0JREJGRVhJVDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjk4LDE1ICsyODg0LDEzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKQogewotCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAJc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaW50IHJlYXAgPSAwOwogCi0JREJGRU5URVI7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAogCS8qIFRoaXMgbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIGVtcHR5IGlmIHNvbWVvbmUKQEAgLTMzMjAsNyArMjkwNCw3IEBACiAJCS8qIENhbGwgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gdGhhdCB0aGlzCiAJCSAqIGNvbW1hbmQgd2FzIGFzc2lnbmVkLCBhc3N1bWluZyBpdCBoYXMgb25lLgogCQkgKi8KLQkJaWYgKCBjdGx4LT5jbWRjYiAhPSBOVUxMICkgeworCQlpZiAoY3RseC0+Y21kY2IgIT0gTlVMTCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJCWN0bHgtPmNtZGNiKGh3LCBjdGx4KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwpAQCAtMzMzMyw4ICsyOTE3LDcgQEAKIAkJCS8qIERpZCBzb21lb25lIHlhbmsgdGhlIGFkYXB0ZXIgb3V0CiAJCQkgKiB3aGlsZSBvdXIgbGlzdCB3YXMgKGJyaWVmbHkpIHVubG9ja2VkPwogCQkJICovCi0JCQlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQotCQkJeworCQkJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKIAkJCQlyZWFwID0gMDsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTMzNDUsNyArMjkyOCw3IEBACiAJCSAqIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBkaWUuIEhlbmNlIHRoZXkgbXVzdAogCQkgKiBiZSBkZWxpdmVyZWQgdG8gVGhlIFJlYXBlciEKIAkJICovCi0JCWlmICggY3RseC0+cmVhcGFibGUgKSB7CisJCWlmIChjdGx4LT5yZWFwYWJsZSkgewogCQkJLyogTW92ZSB0aGUgQ1RMWCBvZmYgdGhlICJjb21wbGV0aW5nIiBsaXN0IChob3BlZnVsbHkpCiAJCQkgKiBvbiB0byB0aGUgInJlYXBhYmxlIiBsaXN0IHdoZXJlIHRoZSByZWFwZXIgdGFzawogCQkJICogY2FuIGZpbmQgaXQuIEFuZCAicmVhcGFibGUiIG1lYW5zIHRoYXQgdGhpcyBDVExYCkBAIC0zMzYxLDggKzI5NDQsNiBAQAogCiAJaWYgKHJlYXApCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmh3LT5yZWFwZXJfYmgpOwotCi0JREJGRVhJVDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMzgyLDEyICsyOTYzLDExIEBACiAqIENhbGwgY29udGV4dDoKICoJRWl0aGVyIHByb2Nlc3Mgb3IgaW50ZXJydXB0LCBidXQgcHJlc3VtYWJseSBpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3N0YXRpYyBpbnQgdW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaGZhMzg0eF90ICpodywKKwkJCQkJIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQogewogCWludCByZXQ7CiAKLQlEQkZFTlRFUjsKLQogCS8qCiAJICogVHJ5IHRvIGRlbGV0ZSB0aGUgVVJCIGNvbnRhaW5pbmcgb3VyIHJlcXVlc3QgcGFja2V0LgogCSAqIElmIHdlIHN1Y2NlZWQsIHRoZW4gaXRzIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIGJlCkBAIC0zNDA4LDggKzI5ODgsNiBAQAogCQlyZXQgPSAwOwogCX0KIAotCURCRkVYSVQ7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDM3LDggKzMwMTUsNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCB1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQogewotCURCRkVOVEVSOwotCiAJLyogVGltZXJzIGhhdmUgYmVlbiBzdG9wcGVkLCBhbmQgY3RseCBzaG91bGQgYmUgaW4KIAkgKiBhIHRlcm1pbmFsIHN0YXRlLiBSZXRpcmUgaXQgZnJvbSB0aGUgImFjdGl2ZSIKIAkgKiBxdWV1ZS4KQEAgLTM0NTMsMTMgKzMwMjksMTEgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXTEFOX0xPR19FUlJPUigiQ1RMWFslZF0gbm90IGluIGEgdGVybWluYXRpbmcgc3RhdGUoJXMpXG4iLAotCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAotCQkgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCXByaW50ayhLRVJOX0VSUiAiQ1RMWFslZF0gbm90IGluIGEgdGVybWluYXRpbmcgc3RhdGUoJXMpXG4iLAorCQkgICAgICAgbGUxNl90b19jcHUoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOwogCQlicmVhazsKLQl9IC8qIHN3aXRjaCAqLwotCi0JREJGRVhJVDsKKwl9CQkJLyogc3dpdGNoICovCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQ3OCwxMSArMzA1Miw5IEBACiAqIENhbGwgY29udGV4dDoKICoJYW55CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhxX3J1bihoZmEzODR4X3QJKmh3KQorc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90ICpodykKIHsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlEQkZFTlRFUjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogYWNxdWlyZSBsb2NrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CkBAIC0zNDk0LDI4ICszMDY2LDI2IEBACiAJICogRG9uJ3QgdG91Y2ggYW55IG9mIHRoZXNlIENUTFhzIGlmIHRoZSBoYXJkd2FyZQogCSAqIGhhcyBiZWVuIHJlbW92ZWQgb3IgdGhlIFVTQiBzdWJzeXN0ZW0gaXMgc3RhbGxlZC4KIAkgKi8KLQlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSB8fAotCSAgICAgdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgfHwKLQkgICAgIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCWlmICghbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgfHwKKwkgICAgdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgfHwgaHctPndsYW5kZXYtPmh3cmVtb3ZlZCkKIAkJZ290byB1bmxvY2s7CiAKLQl3aGlsZSAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEucGVuZGluZykgKSB7Ci0JCWhmYTM4NHhfdXNiY3RseF90CSpoZWFkOwotCQlpbnQJCQlyZXN1bHQ7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZody0+Y3RseHEucGVuZGluZykpIHsKKwkJaGZhMzg0eF91c2JjdGx4X3QgKmhlYWQ7CisJCWludCByZXN1bHQ7CiAKIAkJLyogVGhpcyBpcyB0aGUgZmlyc3QgcGVuZGluZyBjb21tYW5kICovCiAJCWhlYWQgPSBsaXN0X2VudHJ5KGh3LT5jdGx4cS5wZW5kaW5nLm5leHQsCi0JCSAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF90LAotCQkgICAgICAgICAgICAgICAgICBsaXN0KTsKKwkJCQkgIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKIAogCQkvKiBXZSBuZWVkIHRvIHNwbGl0IHRoaXMgb2ZmIHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gKi8KIAkJbGlzdF9tb3ZlX3RhaWwoJmhlYWQtPmxpc3QsICZody0+Y3RseHEuYWN0aXZlKTsKIAogCQkvKiBGaWxsIHRoZSBvdXQgcGFja2V0ICovCi0JCXVzYl9maWxsX2J1bGtfdXJiKCAmKGh3LT5jdGx4X3VyYiksIGh3LT51c2IsCi0JCSAgICAgICAgICAgICAgICAgICBody0+ZW5kcF9vdXQsCi0JCSAgICAgICAgICAgICAgICAgICAmKGhlYWQtPm91dGJ1ZiksIFJPVU5EVVA2NChoZWFkLT5vdXRidWZzaXplKSwKLQkJICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjaywgaHcpOworCQl1c2JfZmlsbF9idWxrX3VyYigmKGh3LT5jdGx4X3VyYiksIGh3LT51c2IsCisJCQkJICBody0+ZW5kcF9vdXQsCisJCQkJICAmKGhlYWQtPm91dGJ1ZiksIFJPVU5EVVA2NChoZWFkLT5vdXRidWZzaXplKSwKKwkJCQkgIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjaywgaHcpOwogCQlody0+Y3RseF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVNCX1FVRVVFX0JVTEs7CiAKIAkJLyogTm93IHN1Ym1pdCB0aGUgVVJCIGFuZCB1cGRhdGUgdGhlIENUTFgncyBzdGF0ZQpAQCAtMzUzMSw3ICszMTAxLDcgQEAKIAogCQkJLyogU3RhcnQgdGhlIElOIHdhaXQgdGltZXIgKi8KIAkJCWh3LT5yZXNwX3RpbWVyX2RvbmUgPSAwOwotCQkJaHctPnJlc3B0aW1lci5leHBpcmVzID0gamlmZmllcyArIDIqSFo7CisJCQlody0+cmVzcHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMiAqIEhaOwogCQkJYWRkX3RpbWVyKCZody0+cmVzcHRpbWVyKTsKIAogCQkJYnJlYWs7CkBAIC0zNTQyLDggKzMxMTIsOSBAQAogCQkJICogdGhpcyBDVExYIGJhY2sgaW4gdGhlICJwZW5kaW5nIiBxdWV1ZQogCQkJICogYW5kIHNjaGVkdWxlIGEgcmVzZXQgLi4uCiAJCQkgKi8KLQkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJCSAgICAgICAgICAgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKIAkJCWxpc3RfbW92ZSgmaGVhZC0+bGlzdCwgJmh3LT5jdGx4cS5wZW5kaW5nKTsKIAkJCXNldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CiAJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwpAQCAtMzU1MSwyMyArMzEyMiwyMCBAQAogCQl9CiAKIAkJaWYgKHJlc3VsdCA9PSAtRVNIVVRET1dOKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB1cmIgc2h1dGRvd24hXG4iLAotCQkJCQkgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyB1cmIgc2h1dGRvd24hXG4iLAorCQkJICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHN1Ym1pdCBDVExYWyVkXTogZXJyb3I9JWRcbiIsCi0JCSAgICAgICAgICAgICAgIGhmYTM4NHgyaG9zdF8xNihoZWFkLT5vdXRidWYudHlwZSksIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHN1Ym1pdCBDVExYWyVkXTogZXJyb3I9JWRcbiIsCisJCSAgICAgICBsZTE2X3RvX2NwdShoZWFkLT5vdXRidWYudHlwZSksIHJlc3VsdCk7CiAJCXVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaHcsIGhlYWQpOwotCX0gLyogd2hpbGUgKi8KKwl9CQkJLyogd2hpbGUgKi8KIAotCXVubG9jazoKK3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2Jpbl9jYWxsYmFjawogKgpAQCAtMzU4NiwxMyArMzE1NCwxMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OwotCWhmYTM4NHhfdAkJKmh3OwotCWhmYTM4NHhfdXNiaW5fdAkJKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAqc2tiID0gTlVMTDsKLQlpbnQJCQlyZXN1bHQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgdXJiX3N0YXR1czsKLQl1MTYJCQl0eXBlOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IHVyYi0+Y29udGV4dDsKKwloZmEzODR4X3QgKmh3OworCWhmYTM4NHhfdXNiaW5fdCAqdXNiaW4gPSAoaGZhMzg0eF91c2Jpbl90ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCWludCByZXN1bHQ7CisJaW50IHVyYl9zdGF0dXM7CisJdTE2IHR5cGU7CiAKIAllbnVtIFVTQklOX0FDVElPTiB7CiAJCUhBTkRMRSwKQEAgLTM2MDAsMTEgKzMxNjgsNyBAQAogCQlBQk9SVAogCX0gYWN0aW9uOwogCi0JREJGRU5URVI7Ci0KLQlpZiAoICF3bGFuZGV2IHx8Ci0JICAgICAhd2xhbmRldi0+bmV0ZGV2IHx8Ci0JICAgICB3bGFuZGV2LT5od3JlbW92ZWQgKQorCWlmICghd2xhbmRldiB8fCAhd2xhbmRldi0+bmV0ZGV2IHx8IHdsYW5kZXYtPmh3cmVtb3ZlZCkKIAkJZ290byBleGl0OwogCiAJaHcgPSB3bGFuZGV2LT5wcml2OwpAQCAtMzYxMiw5ICszMTc2LDggQEAKIAkJZ290byBleGl0OwogCiAJc2tiID0gaHctPnJ4X3VyYl9za2I7Ci0JaWYgKCFza2IgfHwgKHNrYi0+ZGF0YSAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcikpIHsKLQkJQlVHKCk7Ci0JfQorCUJVR19PTighc2tiIHx8IChza2ItPmRhdGEgIT0gdXJiLT50cmFuc2Zlcl9idWZmZXIpKTsKKwogCWh3LT5yeF91cmJfc2tiID0gTlVMTDsKIAogCS8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zIHdpdGhpbiB0aGUgVVJCICovCkBAIC0zNjIzLDcgKzMxODYsNyBAQAogCQlhY3Rpb24gPSBIQU5ETEU7CiAKIAkJLyogQ2hlY2sgZm9yIHNob3J0IHBhY2tldCAqLwotCQlpZiAoIHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwICkgeworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDApIHsKIAkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CiAJCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKTsKIAkJCWFjdGlvbiA9IFJFU1VCTUlUOwpAQCAtMzYzMSw5ICszMTk0LDkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIC1FUElQRToKLQkJV0xBTl9MT0dfV0FSTklORygiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAotCQkgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7Ci0JCWlmICggIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyByeCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCSAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpCiAJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwogCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9lcnJvcnMpOwogCQlhY3Rpb24gPSBBQk9SVDsKQEAgLTM2NDIsOCArMzIwNSw4IEBACiAJY2FzZSAtRUlMU0VROgogCWNhc2UgLUVUSU1FRE9VVDoKIAljYXNlIC1FUFJPVE86Ci0JCWlmICggIXRlc3RfYW5kX3NldF9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgotCQkgICAgICF0aW1lcl9wZW5kaW5nKCZody0+dGhyb3R0bGUpICkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgorCQkgICAgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkpIHsKIAkJCW1vZF90aW1lcigmaHctPnRocm90dGxlLCBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CiAJCX0KIAkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKQEAgLTM2NTcsMTkgKzMyMjAsMjAgQEAKIAogCWNhc2UgLUVOT0RFVjoKIAljYXNlIC1FU0hVVERPV046Ci0JCVdMQU5fTE9HX0RFQlVHKDMsInN0YXR1cz0lZCwgZGV2aWNlIHJlbW92ZWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCXByX2RlYnVnKCJzdGF0dXM9JWQsIGRldmljZSByZW1vdmVkLlxuIiwgdXJiLT5zdGF0dXMpOwogCQlhY3Rpb24gPSBBQk9SVDsKIAkJYnJlYWs7CiAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRUNPTk5SRVNFVDoKLQkJV0xBTl9MT0dfREVCVUcoMywic3RhdHVzPSVkLCB1cmIgZXhwbGljaXRseSB1bmxpbmtlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJcHJfZGVidWcoInN0YXR1cz0lZCwgdXJiIGV4cGxpY2l0bHkgdW5saW5rZWQuXG4iLAorCQkgICAgICAgdXJiLT5zdGF0dXMpOwogCQlhY3Rpb24gPSBBQk9SVDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXTEFOX0xPR19ERUJVRygzLCJ1cmIgc3RhdHVzPSVkLCB0cmFuc2ZlciBmbGFncz0weCV4XG4iLAotCQkgICAgICAgICAgICAgICAgIHVyYi0+c3RhdHVzLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwkJcHJfZGVidWcoInVyYiBzdGF0dXM9JWQsIHRyYW5zZmVyIGZsYWdzPTB4JXhcbiIsCisJCSAgICAgICB1cmItPnN0YXR1cywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CiAJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CiAJCWFjdGlvbiA9IFJFU1VCTUlUOwogCQlicmVhazsKQEAgLTM2ODIsOSArMzI0Niw5IEBACiAJCXJlc3VsdCA9IHN1Ym1pdF9yeF91cmIoaHcsIEdGUF9BVE9NSUMpOwogCiAJCWlmIChyZXN1bHQgIT0gMCkgewotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJIkZhdGFsLCBmYWlsZWQgdG8gcmVzdWJtaXQgcnhfdXJiLiBlcnJvcj0lZFxuIiwKLQkJCQlyZXN1bHQpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkZhdGFsLCBmYWlsZWQgdG8gcmVzdWJtaXQgcnhfdXJiLiBlcnJvcj0lZFxuIiwKKwkJCSAgICAgICByZXN1bHQpOwogCQl9CiAJfQogCkBAIC0zNjkyLDcgKzMyNTYsNyBAQAogCS8qIE5vdGU6IHRoZSBjaGVjayBvZiB0aGUgc3dfc3VwcG9ydCBmaWVsZCwgdGhlIHR5cGUgZmllbGQgZG9lc24ndAogCSAqICAgICAgIGhhdmUgYml0IDEyIHNldCBsaWtlIHRoZSBkb2NzIHN1Z2dlc3QuCiAJICovCi0JdHlwZSA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+dHlwZSk7CisJdHlwZSA9IGxlMTZfdG9fY3B1KHVzYmluLT50eXBlKTsKIAlpZiAoSEZBMzg0eF9VU0JfSVNSWEZSTSh0eXBlKSkgewogCQlpZiAoYWN0aW9uID09IEhBTkRMRSkgewogCQkJaWYgKHVzYmluLT50eGZybS5kZXNjLnN3X3N1cHBvcnQgPT0gMHgwMTIzKSB7CkBAIC0zNzI4LDMwICszMjkyLDI4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBIRkEzODR4X1VTQl9CVUZBVkFJTDoKLQkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgQlVGQVZBSUwgcGFja2V0LCBmcm1sZW49JWRcbiIsCi0JCQl1c2Jpbi0+YnVmYXZhaWwuZnJtbGVuKTsKKwkJcHJfZGVidWcoIlJlY2VpdmVkIEJVRkFWQUlMIHBhY2tldCwgZnJtbGVuPSVkXG4iLAorCQkgICAgICAgdXNiaW4tPmJ1ZmF2YWlsLmZybWxlbik7CiAJCWJyZWFrOwogCiAJY2FzZSBIRkEzODR4X1VTQl9FUlJPUjoKLQkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgVVNCX0VSUk9SIHBhY2tldCwgZXJyb3J0eXBlPSVkXG4iLAotCQkJdXNiaW4tPnVzYmVycm9yLmVycm9ydHlwZSk7CisJCXByX2RlYnVnKCJSZWNlaXZlZCBVU0JfRVJST1IgcGFja2V0LCBlcnJvcnR5cGU9JWRcbiIsCisJCSAgICAgICB1c2Jpbi0+dXNiZXJyb3IuZXJyb3J0eXBlKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXTEFOX0xPR19ERUJVRygzLCJVbnJlY29nbml6ZWQgVVNCSU4gcGFja2V0LCB0eXBlPSV4LCBzdGF0dXM9JWRcbiIsCi0JCQl1c2Jpbi0+dHlwZSwgdXJiX3N0YXR1cyk7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiVW5yZWNvZ25pemVkIFVTQklOIHBhY2tldCwgdHlwZT0leCwgc3RhdHVzPSVkXG4iLAorCQkgICAgICAgdXNiaW4tPnR5cGUsIHVyYl9zdGF0dXMpOwogCQlicmVhazsKLQl9IC8qIHN3aXRjaCAqLworCX0JCQkvKiBzd2l0Y2ggKi8KIAogZXhpdDoKIAogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNiaW5fY3RseAogKgpAQCAtMzc3NSwxMSArMzMzNyw5IEBACiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2N0bHgoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2Jpbl90ICp1c2JpbiwKIAkJCSAgICAgICBpbnQgdXJiX3N0YXR1cykKIHsKLQloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKLQlpbnQJCQlydW5fcXVldWUgPSAwOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCi0JREJGRU5URVI7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CisJaW50IHJ1bl9xdWV1ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogcmV0cnk6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CkBAIC0zNzg4LDkgKzMzNDgsOCBAQAogCSAqIGF0IGFueSBvbmUgdGltZSwgYW5kIHRoaXMgaXMgdGhlIENUTFggdGhhdCB0aGUKIAkgKiB0aW1lcnMgYXJlIHdhaXRpbmcgZm9yLgogCSAqLwotCWlmICggbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKSB7CisJaWYgKGxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpKQogCQlnb3RvIHVubG9jazsKLQl9CiAKIAkvKiBSZW1vdmUgdGhlICJyZXNwb25zZSB0aW1lb3V0Ii4gSXQncyBwb3NzaWJsZSB0aGF0CiAJICogd2UgYXJlIGFscmVhZHkgdG9vIGxhdGUsIGFuZCB0aGF0IHRoZSB0aW1lb3V0IGlzCkBAIC0zODAzLDggKzMzNjIsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CiAJfQogCkBAIC0zODE5LDE1ICszMzc3LDE2IEBACiAJCWlmICh1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCkKIAkJCXJ1bl9xdWV1ZSA9IDE7CiAJfSBlbHNlIHsKLQkJY29uc3QgdTE2IGludHlwZSA9ICh1c2Jpbi0+dHlwZSZ+aG9zdDJoZmEzODR4XzE2KDB4ODAwMCkpOworCQljb25zdCB1MTYgaW50eXBlID0gKHVzYmluLT50eXBlICYgfmNwdV90b19sZTE2KDB4ODAwMCkpOwogCiAJCS8qCiAJCSAqIENoZWNrIHRoYXQgb3VyIG1lc3NhZ2UgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgLi4uCiAJCSAqLwogCQlpZiAoY3RseC0+b3V0YnVmLnR5cGUgIT0gaW50eXBlKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCJFeHBlY3RlZCBJTlslZF0sIHJlY2VpdmVkIElOWyVkXSAtIGlnbm9yZWQuXG4iLAotCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAotCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoaW50eXBlKSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIkV4cGVjdGVkIElOWyVkXSwgcmVjZWl2ZWQgSU5bJWRdIC0gaWdub3JlZC5cbiIsCisJCQkgICAgICAgbGUxNl90b19jcHUoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGludHlwZSkpOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIApAQCAtMzg0MSw3ICszNDAwLDggQEAKIAkJCSAqIG91ciByZXF1ZXN0IGhhcyBiZWVuIGFja25vd2xlZGdlZC4gT2RkLAogCQkJICogYnV0IG91ciBPVVQgVVJCIGlzIHN0aWxsIGFsaXZlLi4uCiAJCQkgKi8KLQkJCVdMQU5fTE9HX0RFQlVHKDAsICJDYXVzYWxpdHkgdmlvbGF0aW9uOiBwbGVhc2UgcmVib290IFVuaXZlcnNlLCBvciBlbWFpbCBsaW51eC13bGFuLWRldmVsQGxpc3RzLmxpbnV4LXdsYW4uY29tXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkNhdXNhbGl0eSB2aW9sYXRpb246IHBsZWFzZSByZWJvb3QgVW5pdmVyc2UsIG9yIGVtYWlsIGxpbnV4LXdsYW4tZGV2ZWxAbGlzdHMubGludXgtd2xhbi5jb21cbiIpOwogCQkJY3RseC0+c3RhdGUgPSBDVExYX1JFU1BfQ09NUExFVEU7CiAJCQlicmVhazsKIApAQCAtMzg2MCwxNCArMzQyMCwxNSBAQAogCQkJLyoKIAkJCSAqIFRocm93IHRoaXMgQ1RMWCBhd2F5IC4uLgogCQkJICovCi0JCQlXTEFOX0xPR19FUlJPUigiTWF0Y2hlZCBJTiBVUkIsIENUTFhbJWRdIGluIGludmFsaWQgc3RhdGUoJXMpLiIKLQkJCSAgICAgICAgICAgICAgICIgRGlzY2FyZGVkLlxuIiwKLQkJCSAgICAgICAgICAgICAgIGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYudHlwZSksCi0JCQkgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTWF0Y2hlZCBJTiBVUkIsIENUTFhbJWRdIGluIGludmFsaWQgc3RhdGUoJXMpLiIKKwkJCSAgICAgICAiIERpc2NhcmRlZC5cbiIsCisJCQkgICAgICAgbGUxNl90b19jcHUoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKIAkJCWlmICh1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCkKIAkJCQlydW5fcXVldWUgPSAxOwogCQkJYnJlYWs7Ci0JCX0gLyogc3dpdGNoICovCisJCX0JCS8qIHN3aXRjaCAqLwogCX0KIAogdW5sb2NrOgpAQCAtMzg3NSwxMSArMzQzNiw4IEBACiAKIAlpZiAocnVuX3F1ZXVlKQogCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmluX3R4Y29tcGwKICoKQEAgLTM4OTcsMjUgKzM0NTUsMjAgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl90eGNvbXBsKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2JpbikKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICBoZmEzODR4X3VzYmluX3QgKnVzYmluKQogewotCXUxNgkJCXN0YXR1czsKLQlEQkZFTlRFUjsKKwl1MTYgc3RhdHVzOwogCi0Jc3RhdHVzID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT50eXBlKTsgLyogeWVhaCBJIGtub3cgaXQgc2F5cyB0eXBlLi4uKi8KKwlzdGF0dXMgPSBsZTE2X3RvX2NwdSh1c2Jpbi0+dHlwZSk7CS8qIHllYWggSSBrbm93IGl0IHNheXMgdHlwZS4uLiAqLwogCiAJLyogV2FzIHRoZXJlIGFuIGVycm9yPyAqLwotCWlmIChIRkEzODR4X1RYU1RBVFVTX0lTRVJST1Ioc3RhdHVzKSkgeworCWlmIChIRkEzODR4X1RYU1RBVFVTX0lTRVJST1Ioc3RhdHVzKSkKIAkJcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXYsIHN0YXR1cyk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXByaXNtMnN0YV9ldl90eCh3bGFuZGV2LCBzdGF0dXMpOwotCX0KLQkvLyBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmluX3J4CiAqCkBAIC0zOTM1LDM0ICszNDg4LDI5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWhmYTM4NHhfdXNiaW5fdCAgICAgICAgICp1c2JpbiA9IChoZmEzODR4X3VzYmluX3QgKikgc2tiLT5kYXRhOwotCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IHdsYW5kZXYtPnByaXY7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgaGRybGVuOwotCXA4MDIxMV9yeG1ldGFfdCAgICAgICAgICpyeG1ldGE7Ci0JdTE2ICAgICAgICAgICAgICAgICAgZGF0YV9sZW47Ci0JdTE2ICAgICAgICAgICAgICAgICAgZmM7Ci0KLQlEQkZFTlRFUjsKKwloZmEzODR4X3VzYmluX3QgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSBza2ItPmRhdGE7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IGhkcmxlbjsKKwlwODAyMTFfcnhtZXRhX3QgKnJ4bWV0YTsKKwl1MTYgZGF0YV9sZW47CisJdTE2IGZjOwogCiAJLyogQnl0ZSBvcmRlciBjb252ZXJ0IG9uY2UgdXAgZnJvbnQuICovCi0JdXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzID0KLQkJaGZhMzg0eDJob3N0XzE2KHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cyk7Ci0JdXNiaW4tPnJ4ZnJtLmRlc2MudGltZSA9Ci0JCWhmYTM4NHgyaG9zdF8zMih1c2Jpbi0+cnhmcm0uZGVzYy50aW1lKTsKKwl1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMgPSBsZTE2X3RvX2NwdSh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpOworCXVzYmluLT5yeGZybS5kZXNjLnRpbWUgPSBsZTMyX3RvX2NwdSh1c2Jpbi0+cnhmcm0uZGVzYy50aW1lKTsKIAogCS8qIE5vdyBoYW5kbGUgZnJhbWUgYmFzZWQgb24gcG9ydCMgKi8KLQlzd2l0Y2goIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApCi0JeworCXN3aXRjaCAoSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpKSB7CiAJY2FzZSAwOgotCQlmYyA9IGllZWUyaG9zdDE2KHVzYmluLT5yeGZybS5kZXNjLmZyYW1lX2NvbnRyb2wpOworCQlmYyA9IGxlMTZfdG9fY3B1KHVzYmluLT5yeGZybS5kZXNjLmZyYW1lX2NvbnRyb2wpOwogCiAJCS8qIElmIGV4Y2x1ZGUgYW5kIHdlIHJlY2VpdmUgYW4gdW5lbmNyeXB0ZWQsIGRyb3AgaXQgKi8KLQkJaWYgKCAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKSAmJgotCQkgICAgICFXTEFOX0dFVF9GQ19JU1dFUChmYykpeworCQlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkgJiYKKwkJICAgICFXTEFOX0dFVF9GQ19JU1dFUChmYykpIHsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCi0JCWRhdGFfbGVuID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT5yeGZybS5kZXNjLmRhdGFfbGVuKTsKKwkJZGF0YV9sZW4gPSBsZTE2X3RvX2NwdSh1c2Jpbi0+cnhmcm0uZGVzYy5kYXRhX2xlbik7CiAKIAkJLyogSG93IG11Y2ggaGVhZGVyIGRhdGEgZG8gd2UgaGF2ZT8gKi8KIAkJaGRybGVuID0gcDgwMjExX2hlYWRlcmxlbihmYyk7CkBAIC0zOTc0LDggKzM1MjIsNyBAQAogCQkgKiB3aXRoIGFuICJvdmVybGFwcGluZyIgY29weQogCQkgKi8KIAkJbWVtbW92ZShza2JfcHVzaChza2IsIGhkcmxlbiksCi0JCSAgICAgICAgJnVzYmluLT5yeGZybS5kZXNjLmZyYW1lX2NvbnRyb2wsCi0JCSAgICAgICAgaGRybGVuKTsKKwkJCSZ1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sLCBoZHJsZW4pOwogCiAJCXNrYi0+ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OwogCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CkBAIC00MDAxLDI0ICszNTQ4LDI0IEBACiAJCWJyZWFrOwogCiAJY2FzZSA3OgotCQlpZiAoICEgSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUih1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpICkgeworCQlpZiAoIUhGQTM4NHhfUlhTVEFUVVNfSVNGQ1NFUlIodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSkgewogCQkJLyogQ29weSB0byB3bGFuc25pZiBza2IgKi8KLQkJCWhmYTM4NHhfaW50X3J4bW9uaXRvciggd2xhbmRldiwgJnVzYmluLT5yeGZybSk7CisJCQloZmEzODR4X2ludF9yeG1vbml0b3Iod2xhbmRldiwgJnVzYmluLT5yeGZybSk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCX0gZWxzZSB7Ci0JCQlXTEFOX0xPR19ERUJVRygzLCJSZWNlaXZlZCBtb25pdG9yIGZyYW1lOiBGQ1NlcnIgc2V0XG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIlJlY2VpdmVkIG1vbml0b3IgZnJhbWU6IEZDU2VyciBzZXRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfV0FSTklORygiUmVjZWl2ZWQgZnJhbWUgb24gdW5zdXBwb3J0ZWQgcG9ydD0lZFxuIiwKLQkJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWNlaXZlZCBmcmFtZSBvbiB1bnN1cHBvcnRlZCBwb3J0PSVkXG4iLAorCQkgICAgICAgSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpKTsKIAkJZ290byBkb25lOwogCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTQwNDMsOTcgKzM1OTAsOTMgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfcnhtb25pdG9yKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiX3J4ZnJtX3QgKnJ4ZnJtKQorc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfcnhtb25pdG9yKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgIGhmYTM4NHhfdXNiX3J4ZnJtX3QgKnJ4ZnJtKQogewotCWhmYTM4NHhfcnhfZnJhbWVfdCAgICAgICAgICAgICAgKnJ4ZGVzYyA9ICYocnhmcm0tPmRlc2MpOwotCXVuc2lnbmVkIGludAkJCQloZHJsZW4gPSAwOwotCXVuc2lnbmVkIGludAkJCQlkYXRhbGVuID0gMDsKLQl1bnNpZ25lZCBpbnQJCQkJc2tibGVuID0gMDsKLQl1OAkJCQkqZGF0YXA7Ci0JdTE2CQkJCWZjOwotCXN0cnVjdCBza19idWZmCQkJKnNrYjsKLQloZmEzODR4X3QJCSAgICAgICAgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X3J4X2ZyYW1lX3QgKnJ4ZGVzYyA9ICYocnhmcm0tPmRlc2MpOworCXVuc2lnbmVkIGludCBoZHJsZW4gPSAwOworCXVuc2lnbmVkIGludCBkYXRhbGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgc2tibGVuID0gMDsKKwl1OCAqZGF0YXA7CisJdTE2IGZjOworCXN0cnVjdCBza19idWZmICpza2I7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAKLQotCURCRkVOVEVSOwogCS8qIERvbid0IGZvcmdldCB0aGUgc3RhdHVzLCB0aW1lLCBhbmQgZGF0YV9sZW4gZmllbGRzIGFyZSBpbiBob3N0IG9yZGVyICovCiAJLyogRmlndXJlIG91dCBob3cgYmlnIHRoZSBmcmFtZSBpcyAqLwotCWZjID0gaWVlZTJob3N0MTYocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKKwlmYyA9IGxlMTZfdG9fY3B1KHJ4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CiAJaGRybGVuID0gcDgwMjExX2hlYWRlcmxlbihmYyk7Ci0JZGF0YWxlbiA9IGhmYTM4NHgyaG9zdF8xNihyeGRlc2MtPmRhdGFfbGVuKTsKKwlkYXRhbGVuID0gbGUxNl90b19jcHUocnhkZXNjLT5kYXRhX2xlbik7CiAKIAkvKiBBbGxvY2F0ZSBhbiBpbmQgbWVzc2FnZStmcmFtZXNpemUgc2tiICovCi0Jc2tibGVuID0gc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkgKwotCQloZHJsZW4gKyBkYXRhbGVuICsgV0xBTl9DUkNfTEVOOworCXNrYmxlbiA9IHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsgaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKIAogCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCi0JaWYgKCBza2JsZW4gPgotCSAgICAgKHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsKLQkgICAgICBXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKSApIHsKLQkJV0xBTl9MT0dfREVCVUcoMSwgIm92ZXJsZW4gZnJtOiBsZW49JXpkXG4iLAotCQkJICAgICAgIHNrYmxlbiAtIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwlpZiAoc2tibGVuID4KKwkgICAgKHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsKKwkgICAgIFdMQU5fSERSX0E0X0xFTiArIFdMQU5fREFUQV9NQVhMRU4gKyBXTEFOX0NSQ19MRU4pKSB7CisJCXByX2RlYnVnKCJvdmVybGVuIGZybTogbGVuPSV6ZFxuIiwKKwkJICAgICAgIHNrYmxlbiAtIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKIAl9CiAKLQlpZiAoIChza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbikpID09IE5VTEwgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJhbGxvY19za2IgZmFpbGVkIHRyeWluZyB0byBhbGxvY2F0ZSAlZCBieXRlc1xuIiwgc2tibGVuKTsKKwlpZiAoKHNrYiA9IGRldl9hbGxvY19za2Ioc2tibGVuKSkgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJhbGxvY19za2IgZmFpbGVkIHRyeWluZyB0byBhbGxvY2F0ZSAlZCBieXRlc1xuIiwKKwkJICAgICAgIHNrYmxlbik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBvbmx5IHByZXBlbmQgdGhlIHByaXNtIGhlYWRlciBpZiBpbiB0aGUgcmlnaHQgbW9kZSAqLwogCWlmICgod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyMTFfUFJJU00pICYmCiAJICAgIChody0+c25pZmZoZHIgIT0gMCkpIHsKLQkJcDgwMjExX2NhcGhkcl90CQkqY2FwaGRyOworCQlwODAyMTFfY2FwaGRyX3QgKmNhcGhkcjsKIAkJLyogVGhlIE5FVyBoZWFkZXIgZm9ybWF0ISAqLwogCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7Ci0JCWNhcGhkciA9IChwODAyMTFfY2FwaGRyX3QqKSBkYXRhcDsKKwkJY2FwaGRyID0gKHA4MDIxMV9jYXBoZHJfdCAqKSBkYXRhcDsKIAotCQljYXBoZHItPnZlcnNpb24gPQlodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOwotCQljYXBoZHItPmxlbmd0aCA9CWh0b25sKHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKLQkJY2FwaGRyLT5tYWN0aW1lID0JX19jcHVfdG9fYmU2NChyeGRlc2MtPnRpbWUpICogMTAwMDsKLQkJY2FwaGRyLT5ob3N0dGltZSA9CV9fY3B1X3RvX2JlNjQoamlmZmllcyk7Ci0JCWNhcGhkci0+cGh5dHlwZSA9CWh0b25sKDQpOyAvKiBkc3NfZG90MTFfYiAqLwotCQljYXBoZHItPmNoYW5uZWwgPQlodG9ubChody0+c25pZmZfY2hhbm5lbCk7Ci0JCWNhcGhkci0+ZGF0YXJhdGUgPQlodG9ubChyeGRlc2MtPnJhdGUpOwotCQljYXBoZHItPmFudGVubmEgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLwotCQljYXBoZHItPnByaW9yaXR5ID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KLQkJY2FwaGRyLT5zc2lfdHlwZSA9CWh0b25sKDMpOyAvKiByc3NpX3JhdyAqLwotCQljYXBoZHItPnNzaV9zaWduYWwgPQlodG9ubChyeGRlc2MtPnNpZ25hbCk7Ci0JCWNhcGhkci0+c3NpX25vaXNlID0JaHRvbmwocnhkZXNjLT5zaWxlbmNlKTsKLQkJY2FwaGRyLT5wcmVhbWJsZSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCi0JCWNhcGhkci0+ZW5jb2RpbmcgPQlodG9ubCgxKTsgLyogY2NrICovCisJCWNhcGhkci0+dmVyc2lvbiA9IGh0b25sKFA4MDIxMUNBUFRVUkVfVkVSU0lPTik7CisJCWNhcGhkci0+bGVuZ3RoID0gaHRvbmwoc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkpOworCQljYXBoZHItPm1hY3RpbWUgPSBfX2NwdV90b19iZTY0KHJ4ZGVzYy0+dGltZSkgKiAxMDAwOworCQljYXBoZHItPmhvc3R0aW1lID0gX19jcHVfdG9fYmU2NChqaWZmaWVzKTsKKwkJY2FwaGRyLT5waHl0eXBlID0gaHRvbmwoNCk7CS8qIGRzc19kb3QxMV9iICovCisJCWNhcGhkci0+Y2hhbm5lbCA9IGh0b25sKGh3LT5zbmlmZl9jaGFubmVsKTsKKwkJY2FwaGRyLT5kYXRhcmF0ZSA9IGh0b25sKHJ4ZGVzYy0+cmF0ZSk7CisJCWNhcGhkci0+YW50ZW5uYSA9IGh0b25sKDApOwkvKiB1bmtub3duICovCisJCWNhcGhkci0+cHJpb3JpdHkgPSBodG9ubCgwKTsJLyogdW5rbm93biAqLworCQljYXBoZHItPnNzaV90eXBlID0gaHRvbmwoMyk7CS8qIHJzc2lfcmF3ICovCisJCWNhcGhkci0+c3NpX3NpZ25hbCA9IGh0b25sKHJ4ZGVzYy0+c2lnbmFsKTsKKwkJY2FwaGRyLT5zc2lfbm9pc2UgPSBodG9ubChyeGRlc2MtPnNpbGVuY2UpOworCQljYXBoZHItPnByZWFtYmxlID0gaHRvbmwoMCk7CS8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5lbmNvZGluZyA9IGh0b25sKDEpOwkvKiBjY2sgKi8KIAl9CiAKIAkvKiBDb3B5IHRoZSA4MDIuMTEgaGVhZGVyIHRvIHRoZSBza2IgKGN0bCBmcmFtZXMgbWF5IGJlIGxlc3MgdGhhbiBhIGZ1bGwgaGVhZGVyKSAqLwogCWRhdGFwID0gc2tiX3B1dChza2IsIGhkcmxlbik7Ci0JbWVtY3B5KCBkYXRhcCwgJihyeGRlc2MtPmZyYW1lX2NvbnRyb2wpLCBoZHJsZW4pOworCW1lbWNweShkYXRhcCwgJihyeGRlc2MtPmZyYW1lX2NvbnRyb2wpLCBoZHJsZW4pOwogCiAJLyogSWYgYW55LCBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIHNrYiAqLwotCWlmICggZGF0YWxlbiA+IDAgKQotCXsKKwlpZiAoZGF0YWxlbiA+IDApIHsKIAkJZGF0YXAgPSBza2JfcHV0KHNrYiwgZGF0YWxlbik7CiAJCW1lbWNweShkYXRhcCwgcnhmcm0tPmRhdGEsIGRhdGFsZW4pOwogCiAJCS8qIGNoZWNrIGZvciB1bmVuY3J5cHRlZCBzdHVmZiBpZiBXRVAgYml0IHNldC4gKi8KLQkJaWYgKCooZGF0YXAgLSBoZHJsZW4gKyAxKSAmIDB4NDApIC8vIHdlcCBzZXQKLQkJICBpZiAoKCooZGF0YXApID09IDB4YWEpICYmICgqKGRhdGFwKzEpID09IDB4YWEpKQotCQkgICAgKihkYXRhcCAtIGhkcmxlbiArIDEpICY9IDB4YmY7IC8vIGNsZWFyIHdlcDsgaXQncyB0aGUgODAyLjIgaGVhZGVyIQorCQlpZiAoKihkYXRhcCAtIGhkcmxlbiArIDEpICYgMHg0MCkJLyogd2VwIHNldCAqLworCQkJaWYgKCgqKGRhdGFwKSA9PSAweGFhKSAmJiAoKihkYXRhcCArIDEpID09IDB4YWEpKQorCQkJCSooZGF0YXAgLSBoZHJsZW4gKyAxKSAmPSAweGJmOwkvLyBjbGVhciB3ZXA7IGl0J3MgdGhlIDgwMi4yIGhlYWRlciEKIAl9CiAKIAlpZiAoaHctPnNuaWZmX2ZjcykgewogCQkvKiBTZXQgdGhlIEZDUyAqLwogCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pOwotCQltZW1zZXQoIGRhdGFwLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCQltZW1zZXQoZGF0YXAsIDB4ZmYsIFdMQU5fQ1JDX0xFTik7CiAJfQogCiAJLyogcGFzcyBpdCBiYWNrIHVwICovCiAJcHJpc20yc3RhX2V2X3J4KHdsYW5kZXYsIHNrYik7CiAKLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmluX2luZm8KICoKQEAgLTQxNTEsMTggKzM2OTQsMTMgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2JpbikKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKiB1c2JpbikKIHsKLQlEQkZFTlRFUjsKLQotCXVzYmluLT5pbmZvZnJtLmluZm8uZnJhbWVsZW4gPSBoZmEzODR4Mmhvc3RfMTYodXNiaW4tPmluZm9mcm0uaW5mby5mcmFtZWxlbik7CisJdXNiaW4tPmluZm9mcm0uaW5mby5mcmFtZWxlbiA9CisJICAgIGxlMTZfdG9fY3B1KHVzYmluLT5pbmZvZnJtLmluZm8uZnJhbWVsZW4pOwogCXByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXYsICZ1c2Jpbi0+aW5mb2ZybS5pbmZvKTsKLQotCURCRkVYSVQ7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2JvdXRfY2FsbGJhY2sKICoKQEAgLTQxODEsNDggKzM3MTksNDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewotCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSB1cmItPmNvbnRleHQ7Ci0JaGZhMzg0eF91c2JvdXRfdAkqdXNib3V0ID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JREJGRU5URVI7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OworCWhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCiAjaWZkZWYgREVCVUdfVVNCCiAJZGJwcmludF91cmIodXJiKTsKICNlbmRpZgogCi0JaWYgKCB3bGFuZGV2ICYmCi0JICAgICB3bGFuZGV2LT5uZXRkZXYgKSB7CisJaWYgKHdsYW5kZXYgJiYgd2xhbmRldi0+bmV0ZGV2KSB7CiAKLQkJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CisJCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAkJY2FzZSAwOgogCQkJaGZhMzg0eF91c2JvdXRfdHgod2xhbmRldiwgdXNib3V0KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgLUVQSVBFOgotCQl7Ci0JCQloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJCSAgICAgICAgICAgICAgICAgd2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKLQkJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKQotCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7Ci0JCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy50eF9lcnJvcnMpOwotCQkJYnJlYWs7Ci0JCX0KKwkJCXsKKwkJCQloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0CisJCQkJICAgIChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkKKwkJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy50eF9lcnJvcnMpOworCQkJCWJyZWFrOworCQkJfQogCiAJCWNhc2UgLUVQUk9UTzoKIAkJY2FzZSAtRVRJTUVET1VUOgogCQljYXNlIC1FSUxTRVE6Ci0JCXsKLQkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCQkJeworCQkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwogCi0JCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykKLQkJCSAgICAgJiYgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkgKSB7Ci0JCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsCi0JCQkJICAgICAgICAgIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQKKwkJCQkgICAgKFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykKKwkJCQkgICAgJiYgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkpIHsKKwkJCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsCisJCQkJCQkgIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJCQl9CisJCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy50eF9lcnJvcnMpOwotCQkJbmV0aWZfc3RvcF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwotCQkJYnJlYWs7Ci0JCX0KIAogCQljYXNlIC1FTk9FTlQ6CiAJCWNhc2UgLUVTSFVURE9XTjoKQEAgLTQyMzAsMTYgKzM3NjksMTQgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlXTEFOX0xPR19JTkZPKCJ1bmtub3duIHVyYi0+c3RhdHVzPSVkXG4iLCB1cmItPnN0YXR1cyk7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1bmtub3duIHVyYi0+c3RhdHVzPSVkXG4iLAorCQkJICAgICAgIHVyYi0+c3RhdHVzKTsKIAkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CiAJCQlicmVhazsKLQkJfSAvKiBzd2l0Y2ggKi8KKwkJfQkJLyogc3dpdGNoICovCiAJfQotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrCiAqCkBAIC00MjU4LDIyICszNzk1LDE5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0JaGZhMzg0eF90CSpodyA9IHVyYi0+Y29udGV4dDsKLQlpbnQgICAgICAgICAgICAgZGVsZXRlX3Jlc3B0aW1lciA9IDA7Ci0JaW50ICAgICAgICAgICAgIHRpbWVyX29rID0gMTsKLQlpbnQJCXJ1bl9xdWV1ZSA9IDA7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKKwloZmEzODR4X3QgKmh3ID0gdXJiLT5jb250ZXh0OworCWludCBkZWxldGVfcmVzcHRpbWVyID0gMDsKKwlpbnQgdGltZXJfb2sgPSAxOworCWludCBydW5fcXVldWUgPSAwOworCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEQkZFTlRFUjsKLQotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c3RhdHVzPSVkXG4iLCB1cmItPnN0YXR1cyk7CisJcHJfZGVidWcoInVyYi0+c3RhdHVzPSVkXG4iLCB1cmItPnN0YXR1cyk7CiAjaWZkZWYgREVCVUdfVVNCCiAJZGJwcmludF91cmIodXJiKTsKICNlbmRpZgotCWlmICggKHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHx8Ci0JICAgICAodXJiLT5zdGF0dXMgPT0gLUVOT0RFVikgfHwKLQkgICAgIChodyA9PSBOVUxMKSApCisJaWYgKCh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB8fAorCSAgICAodXJiLT5zdGF0dXMgPT0gLUVOT0RFVikgfHwgKGh3ID09IE5VTEwpKQogCQlnb3RvIGRvbmU7CiAKIHJldHJ5OgpAQCAtNDI4NSw3ICszODE5LDcgQEAKIAkgKiByZWx5IG9uIHRoZSBkaXNjb25uZWN0IGZ1bmN0aW9uIHRvIGNsZWFuIGV2ZXJ5dGhpbmcKIAkgKiB1cCBpZiBzb21lb25lIHVucGx1Z2dlZCB0aGUgYWRhcHRlci4KIAkgKi8KLQlpZiAoIGxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpICkgeworCWlmIChsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtNDMwNCwxNiArMzgzOCwxNSBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJaHctPnJlcV90aW1lcl9kb25lID0gMTsKIAl9CiAKIAljdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKIAotCWlmICggdXJiLT5zdGF0dXMgPT0gMCApIHsKKwlpZiAodXJiLT5zdGF0dXMgPT0gMCkgewogCQkvKiBSZXF1ZXN0IHBvcnRpb24gb2YgYSBDVExYIGlzIHN1Y2Nlc3NmdWwgKi8KLQkJc3dpdGNoICggY3RseC0+c3RhdGUgKSB7CisJCXN3aXRjaCAoY3RseC0+c3RhdGUpIHsKIAkJY2FzZSBDVExYX1JFUV9TVUJNSVRURUQ6CiAJCQkvKiBUaGlzIE9VVC1BQ0sgcmVjZWl2ZWQgYmVmb3JlIElOICovCiAJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0NPTVBMRVRFOwpAQCAtNDMzMCwxOCArMzg2MywxOSBAQAogCiAJCWRlZmF1bHQ6CiAJCQkvKiBUaGlzIGlzIE5PVCBhIHZhbGlkIENUTFggInN1Y2Nlc3MiIHN0YXRlISAqLwotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkgICAgIklsbGVnYWwgQ1RMWFslZF0gc3VjY2VzcyBzdGF0ZSglcywgJWQpIGluIE9VVCBVUkJcbiIsCi0JCQkgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJCSAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSwgdXJiLT5zdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIklsbGVnYWwgQ1RMWFslZF0gc3VjY2VzcyBzdGF0ZSglcywgJWQpIGluIE9VVCBVUkJcbiIsCisJCQkgICAgICAgbGUxNl90b19jcHUoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpLCB1cmItPnN0YXR1cyk7CiAJCQlicmVhazsKLQkJfSAvKiBzd2l0Y2ggKi8KKwkJfQkJLyogc3dpdGNoICovCiAJfSBlbHNlIHsKIAkJLyogSWYgdGhlIHBpcGUgaGFzIHN0YWxsZWQgdGhlbiB3ZSBuZWVkIHRvIHJlc2V0IGl0ICovCi0JCWlmICggKHVyYi0+c3RhdHVzID09IC1FUElQRSkgJiYKLQkJICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkgICAgICAgICAgICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQlpZiAoKHVyYi0+c3RhdHVzID09IC1FUElQRSkgJiYKKwkJICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKIAkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJCX0KIApAQCAtNDM1NCw3ICszODg4LDcgQEAKIAkJcnVuX3F1ZXVlID0gMTsKIAl9CiAKLSBkZWxyZXNwOgorZGVscmVzcDoKIAlpZiAoZGVsZXRlX3Jlc3B0aW1lcikgewogCQlpZiAoKHRpbWVyX29rID0gZGVsX3RpbWVyKCZody0+cmVzcHRpbWVyKSkgIT0gMCkgewogCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CkBAIC00MzYzLDcgKzM4OTcsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAotCWlmICggIXRpbWVyX29rICYmIChody0+cmVzcF90aW1lcl9kb25lID09IDApICkgeworCWlmICghdGltZXJfb2sgJiYgKGh3LT5yZXNwX3RpbWVyX2RvbmUgPT0gMCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAJCWdvdG8gZGVscmVzcDsKIAl9CkBAIC00MzcxLDExICszOTA1LDEwIEBACiAJaWYgKHJ1bl9xdWV1ZSkKIAkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOwogCi0gZG9uZToKLQlEQkZFWElUOworZG9uZToKKwk7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNiY3RseF9yZXF0aW1lcmZuCiAqCkBAIC00Mzk0LDEyICszOTI3LDEwIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaGZhMzg0eF90CSpodyA9IChoZmEzODR4X3QqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyAgIGZsYWdzOwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCkBAIC00NDA4LDE1ICszOTM5LDEzIEBACiAJLyogUmVtb3ZpbmcgdGhlIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgZW1wdGllcwogCSAqIHRoZSBhY3RpdmUgbGlzdCAuLi4KIAkgKi8KLQlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApCi0JeworCWlmICghbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkpIHsKIAkJLyoKIAkJICogV2UgbXVzdCBlbnN1cmUgdGhhdCBvdXIgVVJCIGlzIHJlbW92ZWQgZnJvbQogCQkgKiB0aGUgc3lzdGVtLCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBleHBpcmVkLgogCQkgKi8KIAkJaHctPmN0bHhfdXJiLnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7Ci0JCWlmICh1c2JfdW5saW5rX3VyYigmaHctPmN0bHhfdXJiKSA9PSAtRUlOUFJPR1JFU1MpCi0JCXsKKwkJaWYgKHVzYl91bmxpbmtfdXJiKCZody0+Y3RseF91cmIpID09IC1FSU5QUk9HUkVTUykgewogCQkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHggPSBnZXRfYWN0aXZlX2N0bHgoaHcpOwogCiAJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0ZBSUxFRDsKQEAgLTQ0MzYsMTEgKzM5NjUsOCBAQAogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4KICoKQEAgLTQ0NTksMTMgKzM5ODUsMTAgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiY3RseF9yZXNwdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQogewotCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90KilkYXRhOwotCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKLQotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCkBAIC00NDc0LDEyICszOTk3LDEwIEBACiAJLyogVGhlIGFjdGl2ZSBsaXN0IHdpbGwgYmUgZW1wdHkgaWYgdGhlCiAJICogYWRhcHRlciBoYXMgYmVlbiB1bnBsdWdnZWQgLi4uCiAJICovCi0JaWYgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKQotCXsKKwlpZiAoIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpKSB7CiAJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKIAotCQlpZiAoIHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGh3LCBjdGx4KSA9PSAwICkKLQkJeworCQlpZiAodW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaHcsIGN0bHgpID09IDApIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAJCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CiAJCQlnb3RvIGRvbmU7CkBAIC00NDg4LDggKzQwMDksOSBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAotIGRvbmU6Ci0JREJGRVhJVDsKK2RvbmU6CisJOworCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDUwNywxMyArNDAyOSwxMCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCUludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKLQl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0KLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIApAQCAtNDUyMSwyNSArNDA0MCwyMCBAQAogCSAqIFdlIG5lZWQgdG8gY2hlY2sgQk9USCB0aGUgUlggYW5kIHRoZSBUWCB0aHJvdHRsZSBjb250cm9scywKIAkgKiBzbyB3ZSB1c2UgdGhlIGJpdHdpc2UgT1IgaW5zdGVhZCBvZiB0aGUgbG9naWNhbCBPUi4KIAkgKi8KLQlXTEFOX0xPR19ERUJVRygzLCAiZmxhZ3M9MHglbHhcbiIsIGh3LT51c2JfZmxhZ3MpOwotCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYKLQkgICAgICgKLQkgICAgICAgKHRlc3RfYW5kX2NsZWFyX2JpdChUSFJPVFRMRV9SWCwgJmh3LT51c2JfZmxhZ3MpICYmCi0JICAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykpCi0JICAgICAgIHwKLQkgICAgICAgKHRlc3RfYW5kX2NsZWFyX2JpdChUSFJPVFRMRV9UWCwgJmh3LT51c2JfZmxhZ3MpICYmCi0JICAgICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKQotCSAgICAgKSApCi0JeworCXByX2RlYnVnKCJmbGFncz0weCVseFxuIiwgaHctPnVzYl9mbGFncyk7CisJaWYgKCFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCisJICAgICgodGVzdF9hbmRfY2xlYXJfYml0KFRIUk9UVExFX1JYLCAmaHctPnVzYl9mbGFncykgJiYKKwkgICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKQorCSAgICAgfAorCSAgICAgKHRlc3RfYW5kX2NsZWFyX2JpdChUSFJPVFRMRV9UWCwgJmh3LT51c2JfZmxhZ3MpICYmCisJICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkKKwkgICAgKSkgewogCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmN0bHhfc3VibWl0CiAqCkBAIC00NTU4LDE2ICs0MDcyLDExIEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcyBvciBpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotaGZhMzg0eF91c2JjdGx4X3N1Ym1pdCgKLQloZmEzODR4X3QJCSpodywKLQloZmEzODR4X3VzYmN0bHhfdAkqY3RseCkKK3N0YXRpYyBpbnQgaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlEQkZFTlRFUjsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCiAJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKQEAgLTQ1ODIsMTEgKzQwOTEsOSBAQAogCQlyZXQgPSAwOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJldDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2JvdXRfdHgKICoKQEAgLTQ2MDgsMTEgKzQxMTUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYm91dF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCkKIHsKLQlEQkZFTlRFUjsKLQogCXByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2KTsKLQotCURCRkVYSVQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDYzMSwxMCArNDEzNCw5IEBACiAqCiAqIENhbGwgY29udGV4dDoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotaGZhMzg0eF9pc2dvb2RfcGRyY29kZSh1MTYgcGRyY29kZSkKK3N0YXRpYyBpbnQgaGZhMzg0eF9pc2dvb2RfcGRyY29kZSh1MTYgcGRyY29kZSkKIHsKLQlzd2l0Y2gocGRyY29kZSkgeworCXN3aXRjaCAocGRyY29kZSkgewogCWNhc2UgSEZBMzg0eF9QRFJfRU5EX09GX1BEQToKIAljYXNlIEhGQTM4NHhfUERSX1BDQl9QQVJUTlVNOgogCWNhc2UgSEZBMzg0eF9QRFJfUERBVkVSOgpAQCAtNDY2OCwyMyArNDE3MCwyMCBAQAogCQlyZXR1cm4gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWYgKCBwZHJjb2RlIDwgMHgxMDAwICkgeworCQlpZiAocGRyY29kZSA8IDB4MTAwMCkgewogCQkJLyogY29kZSBpcyBPSywgYnV0IHdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGlzICovCi0JCQlXTEFOX0xPR19ERUJVRygzLAotCQkJCSJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCAiCi0JCQkJImFzc3VtaW5nIGl0J3Mgb2suXG4iLAotCQkJCXBkcmNvZGUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiRW5jb3VudGVyZWQgdW5rbm93biBQRFIjPTB4JTA0eCwgIgorCQkJICAgICAgICJhc3N1bWluZyBpdCdzIG9rLlxuIiwgcGRyY29kZSk7CiAJCQlyZXR1cm4gMTsKIAkJfSBlbHNlIHsKIAkJCS8qIGJhZCBjb2RlICovCi0JCQlXTEFOX0xPR19ERUJVRygzLAotCQkJCSJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCAiCi0JCQkJIig+PTB4MTAwMCksIGFzc3VtaW5nIGl0J3MgYmFkLlxuIiwKLQkJCQlwZHJjb2RlKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkVuY291bnRlcmVkIHVua25vd24gUERSIz0weCUwNHgsICIKKwkJCSAgICAgICAiKD49MHgxMDAwKSwgYXNzdW1pbmcgaXQncyBiYWQuXG4iLCBwZHJjb2RlKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsgLyogYXZvaWQgY29tcGlsZXIgd2FybmluZ3MgKi8KKwlyZXR1cm4gMDsJCS8qIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzICovCiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwppbmRleCBkZmM3YjNhLi4yYWJjZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCkBAIC00OCwxMCArNDgsOCBAQAogKiA4MDIuMTEgZnJhbWUgY29udmVyc2lvbnMuCiAqCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotCisqCisqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC02MywxNCArNjEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCi0KICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgogI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKQEAgLTgwLDMwICs3NCw4IEBACiAjaW5jbHVkZSAicDgwMjExaW9jdGwuaCIKICNpbmNsdWRlICJwODAyMTFyZXEuaCIKIAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgQ29uc3RhbnRzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBNYWNyb3MgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgVHlwZXMgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCi0KLXN0YXRpYyB1OAlvdWlfcmZjMTA0MltdID0gezB4MDAsIDB4MDAsIDB4MDB9Owotc3RhdGljIHU4CW91aV84MDIxaFtdID0gezB4MDAsIDB4MDAsIDB4Zjh9OwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCitzdGF0aWMgdTggb3VpX3JmYzEwNDJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCB9Oworc3RhdGljIHU4IG91aV84MDIxaFtdID0geyAweDAwLCAweDAwLCAweGY4IH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFwYl9ldGhlcl90b184MDIxMQpAQCAtMTMwLDM1ICsxMDIsMzYgQEAKICogQ2FsbCBjb250ZXh0OgogKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHNrYl9ldGhlcl90b19wODAyMTEoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGV0aGNvbnYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKK2ludCBza2JfZXRoZXJfdG9fcDgwMjExKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCisJCQlwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQogewogCi0JdTE2ICAgICAgICAgIGZjOwotCXUxNiAgICAgICAgICBwcm90bzsKLQl3bGFuX2V0aGhkcl90ICAgZV9oZHI7Ci0Jd2xhbl9sbGNfdCAgICAgICplX2xsYzsKLQl3bGFuX3NuYXBfdCAgICAgKmVfc25hcDsKKwl1MTYgZmM7CisJdTE2IHByb3RvOworCXdsYW5fZXRoaGRyX3QgZV9oZHI7CisJd2xhbl9sbGNfdCAqZV9sbGM7CisJd2xhbl9zbmFwX3QgKmVfc25hcDsKIAlpbnQgZm9vOwogCi0JREJGRU5URVI7CiAJbWVtY3B5KCZlX2hkciwgc2tiLT5kYXRhLCBzaXplb2YoZV9oZHIpKTsKIAogCWlmIChza2ItPmxlbiA8PSAwKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsICJ6ZXJvLWxlbmd0aCBza2IhXG4iKTsKKwkJcHJfZGVidWcoInplcm8tbGVuZ3RoIHNrYiFcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoIGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WX0VOQ0FQICkgeyAvKiBzaW1wbGVzdCBjYXNlICovCi0JICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiRU5DQVAgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCWlmIChldGhjb252ID09IFdMQU5fRVRIQ09OVl9FTkNBUCkgewkvKiBzaW1wbGVzdCBjYXNlICovCisJCXByX2RlYnVnKCJFTkNBUCBsZW46ICVkXG4iLCBza2ItPmxlbik7CiAJCS8qIGhlcmUsIHdlIGRvbid0IGNhcmUgd2hhdCBraW5kIG9mIGV0aGVyIGZybS4gSnVzdCBzdGljayBpdCAqLwogCQkvKiAgaW4gdGhlIDgwMjExIHBheWxvYWQgKi8KIAkJLyogd2hpY2ggaXMgdG8gc2F5LCBsZWF2ZSB0aGUgc2tiIGFsb25lLiAqLwogCX0gZWxzZSB7CiAJCS8qIHN0ZXAgMTogY2xhc3NpZnkgZXRoZXIgZnJhbWUsIERJWCBvciA4MDIuMz8gKi8KIAkJcHJvdG8gPSBudG9ocyhlX2hkci50eXBlKTsKLQkJaWYgKCBwcm90byA8PSAxNTAwICkgewotCQkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMyBsZW46ICVkXG4iLCBza2ItPmxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlcyA8PSAxNTAwIHJlc2VydmVkIGZvciA4MDIuMyBsZW5ndGhzICovCisJCWlmIChwcm90byA8PSAxNTAwKSB7CisJCQlwcl9kZWJ1ZygiODAyLjMgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCQkJLyogY29kZXMgPD0gMTUwMCByZXNlcnZlZCBmb3IgODAyLjMgbGVuZ3RocyAqLwogCQkJLyogaXQncyA4MDIuMywgcGFzcyBldGhlciBwYXlsb2FkIHVuY2hhbmdlZCwgICovCiAKIAkJCS8qIHRyaW0gb2ZmIGV0aGVybmV0IGhlYWRlciAqLwpAQCAtMTY3LDIzICsxNDAsMjggQEAKIAkJCS8qICAgbGVhdmUgb2ZmIGFueSBQQUQgb2N0ZXRzLiAgKi8KIAkJCXNrYl90cmltKHNrYiwgcHJvdG8pOwogCQl9IGVsc2UgewotCQkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICJESVhJSSBsZW46ICVkXG4iLCBza2ItPmxlbik7CisJCQlwcl9kZWJ1ZygiRElYSUkgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOwogCQkJLyogaXQncyBESVhJSSwgdGltZSBmb3Igc29tZSBjb252ZXJzaW9uICovCiAKIAkJCS8qIHRyaW0gb2ZmIGV0aGVybmV0IGhlYWRlciAqLwogCQkJc2tiX3B1bGwoc2tiLCBXTEFOX0VUSEhEUl9MRU4pOwogCiAJCQkvKiB0YWNrIG9uIFNOQVAgKi8KLQkJCWVfc25hcCA9ICh3bGFuX3NuYXBfdCAqKSBza2JfcHVzaChza2IsIHNpemVvZih3bGFuX3NuYXBfdCkpOworCQkJZV9zbmFwID0KKwkJCSAgICAod2xhbl9zbmFwX3QgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yod2xhbl9zbmFwX3QpKTsKIAkJCWVfc25hcC0+dHlwZSA9IGh0b25zKHByb3RvKTsKLQkJCWlmICggZXRoY29udiA9PSBXTEFOX0VUSENPTlZfODAyMWggJiYgcDgwMjExX3N0dF9maW5kcHJvdG8ocHJvdG8pICkgewotCQkJCW1lbWNweSggZV9zbmFwLT5vdWksIG91aV84MDIxaCwgV0xBTl9JRUVFX09VSV9MRU4pOworCQkJaWYgKGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WXzgwMjFoCisJCQkgICAgJiYgcDgwMjExX3N0dF9maW5kcHJvdG8ocHJvdG8pKSB7CisJCQkJbWVtY3B5KGVfc25hcC0+b3VpLCBvdWlfODAyMWgsCisJCQkJICAgICAgIFdMQU5fSUVFRV9PVUlfTEVOKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbWVtY3B5KCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKTsKKwkJCQltZW1jcHkoZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLAorCQkJCSAgICAgICBXTEFOX0lFRUVfT1VJX0xFTik7CiAJCQl9CiAKIAkJCS8qIHRhY2sgb24gbGxjICovCi0JCQllX2xsYyA9ICh3bGFuX2xsY190ICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKwkJCWVfbGxjID0KKwkJCSAgICAod2xhbl9sbGNfdCAqKSBza2JfcHVzaChza2IsIHNpemVvZih3bGFuX2xsY190KSk7CiAJCQllX2xsYy0+ZHNhcCA9IDB4QUE7CS8qIFNOQVAsIHNlZSBJRUVFIDgwMiAqLwogCQkJZV9sbGMtPnNzYXAgPSAweEFBOwogCQkJZV9sbGMtPmN0bCA9IDB4MDM7CkBAIC0xOTMsNjIgKzE3MSw2MSBAQAogCiAJLyogU2V0IHVwIHRoZSA4MDIuMTEgaGVhZGVyICovCiAJLyogSXQncyBhIGRhdGEgZnJhbWUgKi8KLQlmYyA9IGhvc3QyaWVlZTE2KCBXTEFOX1NFVF9GQ19GVFlQRShXTEFOX0ZUWVBFX0RBVEEpIHwKLQkJCSAgV0xBTl9TRVRfRkNfRlNUWVBFKFdMQU5fRlNUWVBFX0RBVEFPTkxZKSk7CisJZmMgPSBjcHVfdG9fbGUxNihXTEFOX1NFVF9GQ19GVFlQRShXTEFOX0ZUWVBFX0RBVEEpIHwKKwkJCSBXTEFOX1NFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfREFUQU9OTFkpKTsKIAotCXN3aXRjaCAoIHdsYW5kZXYtPm1hY21vZGUgKSB7CisJc3dpdGNoICh3bGFuZGV2LT5tYWNtb2RlKSB7CiAJY2FzZSBXTEFOX01BQ01PREVfSUJTU19TVEE6Ci0JCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTMsIHdsYW5kZXYtPmJzc2lkLCBFVEhfQUxFTik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6Ci0JCWZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX1RPRFMoMSkpOwotCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuZGFkZHIsIFdMQU5fQUREUl9MRU4pOworCQlmYyB8PSBjcHVfdG9fbGUxNihXTEFOX1NFVF9GQ19UT0RTKDEpKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmExLCB3bGFuZGV2LT5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTIsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuZGFkZHIsIEVUSF9BTEVOKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgotCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19GUk9NRFMoMSkpOwotCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgV0xBTl9BRERSX0xFTik7Ci0JCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+YnNzaWQsIFdMQU5fQUREUl9MRU4pOwotCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTMsICZlX2hkci5zYWRkciwgV0xBTl9BRERSX0xFTik7CisJCWZjIHw9IGNwdV90b19sZTE2KFdMQU5fU0VUX0ZDX0ZST01EUygxKSk7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuc2FkZHIsIEVUSF9BTEVOKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfRVJST1IoIkVycm9yOiBDb252ZXJ0aW5nIGV0aCB0byB3bGFuIGluIHVua25vd24gbW9kZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJFcnJvcjogQ29udmVydGluZyBldGggdG8gd2xhbiBpbiB1bmtub3duIG1vZGUuXG4iKTsKIAkJcmV0dXJuIDE7CiAJCWJyZWFrOwogCX0KIAogCXA4MDIxMV93ZXAtPmRhdGEgPSBOVUxMOwogCi0JaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VOQ1JZUFQpKSB7Ci0JCS8vIFhYWFggbmVlZCB0byBwaWNrIGtleW51bSBvdGhlciB0aGFuIGRlZmF1bHQ/CisJaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkKKwkgICAgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VOQ1JZUFQpKSB7CisJCS8qIFhYWFggbmVlZCB0byBwaWNrIGtleW51bSBvdGhlciB0aGFuIGRlZmF1bHQ/ICovCiAKLSNpZiAxCiAJCXA4MDIxMV93ZXAtPmRhdGEgPSBrbWFsbG9jKHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKLSNlbHNlCi0JCXA4MDIxMV93ZXAtPmRhdGEgPSBza2ItPmRhdGE7Ci0jZW5kaWYKIAogCQlpZiAoKGZvbyA9IHdlcF9lbmNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSwgcDgwMjExX3dlcC0+ZGF0YSwKIAkJCQkgICAgICAgc2tiLT5sZW4sCi0JCQkJKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyksCi0JCQkJcDgwMjExX3dlcC0+aXYsIHA4MDIxMV93ZXAtPmljdikpKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCJIb3N0IGVuLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLCBmb28pOworCQkJCSAgICAgICAod2xhbmRldi0+CisJCQkJCWhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyksCisJCQkJICAgICAgIHA4MDIxMV93ZXAtPml2LCBwODAyMTFfd2VwLT5pY3YpKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJIb3N0IGVuLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLAorCQkJICAgICAgIGZvbyk7CiAJCQlyZXR1cm4gMjsKIAkJfQotCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CisJCWZjIHw9IGNwdV90b19sZTE2KFdMQU5fU0VUX0ZDX0lTV0VQKDEpKTsKIAl9CiAKLQotCS8vCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOworCS8qICAgICAgc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7ICovCiAKIAlwODAyMTFfaGRyLT5hMy5mYyA9IGZjOwogCXA4MDIxMV9oZHItPmEzLmR1ciA9IDA7CiAJcDgwMjExX2hkci0+YTMuc2VxID0gMDsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1NiwyMiArMjMzLDI0IEBACiBzdGF0aWMgdm9pZCBvcmlub2NvX3NweV9nYXRoZXIod2xhbmRldmljZV90ICp3bGFuZGV2LCBjaGFyICptYWMsCiAJCQkgICAgICAgcDgwMjExX3J4bWV0YV90ICpyeG1ldGEpCiB7Ci0gICAgICAgIGludCBpOworCWludCBpOwogCi0gICAgICAgIC8qIEdhdGhlciB3aXJlbGVzcyBzcHkgc3RhdGlzdGljczogZm9yIGVhY2ggcGFja2V0LCBjb21wYXJlIHRoZQotICAgICAgICAgKiBzb3VyY2UgYWRkcmVzcyB3aXRoIG91dCBsaXN0LCBhbmQgaWYgbWF0Y2gsIGdldCB0aGUgc3RhdHMuLi4gKi8KKwkvKiBHYXRoZXIgd2lyZWxlc3Mgc3B5IHN0YXRpc3RpY3M6IGZvciBlYWNoIHBhY2tldCwgY29tcGFyZSB0aGUKKwkgKiBzb3VyY2UgYWRkcmVzcyB3aXRoIG91dCBsaXN0LCBhbmQgaWYgbWF0Y2gsIGdldCB0aGUgc3RhdHMuLi4gKi8KIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2xhbmRldi0+c3B5X251bWJlcjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHdsYW5kZXYtPnNweV9udW1iZXI7IGkrKykgewogCi0gICAgICAgICAgICAgICAgaWYgKCFtZW1jbXAod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIG1hYywgRVRIX0FMRU4pKSB7CisJCWlmICghbWVtY21wKHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKSkgewogCQkJbWVtY3B5KHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLmxldmVsID0gcnhtZXRhLT5zaWduYWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5ub2lzZSA9IHJ4bWV0YS0+bm9pc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5xdWFsID0gKHJ4bWV0YS0+c2lnbmFsID4gcnhtZXRhLT5ub2lzZSkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyeG1ldGEtPnNpZ25hbCAtIHJ4bWV0YS0+bm9pc2UpIDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLnVwZGF0ZWQgPSAweDc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJCQl3bGFuZGV2LT5zcHlfc3RhdFtpXS5sZXZlbCA9IHJ4bWV0YS0+c2lnbmFsOworCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0ubm9pc2UgPSByeG1ldGEtPm5vaXNlOworCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0ucXVhbCA9CisJCQkgICAgKHJ4bWV0YS0+c2lnbmFsID4KKwkJCSAgICAgcnhtZXRhLT5ub2lzZSkgPyAocnhtZXRhLT5zaWduYWwgLQorCQkJCQkgICAgICAgcnhtZXRhLT5ub2lzZSkgOiAwOworCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0udXBkYXRlZCA9IDB4NzsKKwkJfQorCX0KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTMsNDMgKzI3Miw0MiBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgc2tiX3A4MDIxMV90b19ldGhlciggd2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgZXRoY29udiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBza2JfcDgwMjExX3RvX2V0aGVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCW5ldGRldmljZV90ICAgICAqbmV0ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OwotCXUxNiAgICAgICAgICBmYzsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwYXlsb2FkX29mZnNldDsKLQl1OAkJZGFkZHJbV0xBTl9FVEhBRERSX0xFTl07Ci0JdTgJCXNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwotCXA4MDIxMV9oZHJfdCAgICAqd19oZHI7Ci0Jd2xhbl9ldGhoZHJfdCAgICplX2hkcjsKLQl3bGFuX2xsY190ICAgICAgKmVfbGxjOwotCXdsYW5fc25hcF90ICAgICAqZV9zbmFwOworCW5ldGRldmljZV90ICpuZXRkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisJdTE2IGZjOworCXVuc2lnbmVkIGludCBwYXlsb2FkX2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9vZmZzZXQ7CisJdTggZGFkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJdTggc2FkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJcDgwMjExX2hkcl90ICp3X2hkcjsKKwl3bGFuX2V0aGhkcl90ICplX2hkcjsKKwl3bGFuX2xsY190ICplX2xsYzsKKwl3bGFuX3NuYXBfdCAqZV9zbmFwOwogCiAJaW50IGZvbzsKIAotCURCRkVOVEVSOwotCiAJcGF5bG9hZF9sZW5ndGggPSBza2ItPmxlbiAtIFdMQU5fSERSX0EzX0xFTiAtIFdMQU5fQ1JDX0xFTjsKIAlwYXlsb2FkX29mZnNldCA9IFdMQU5fSERSX0EzX0xFTjsKIAogCXdfaGRyID0gKHA4MDIxMV9oZHJfdCAqKSBza2ItPmRhdGE7CiAKLSAgICAgICAgLyogc2V0dXAgc29tZSB2YXJzIGZvciBjb252ZW5pZW5jZSAqLwotCWZjID0gaWVlZTJob3N0MTYod19oZHItPmEzLmZjKTsKLQlpZiAoIChXTEFOX0dFVF9GQ19UT0RTKGZjKSA9PSAwKSAmJiAoV0xBTl9HRVRfRkNfRlJPTURTKGZjKSA9PSAwKSApIHsKKwkvKiBzZXR1cCBzb21lIHZhcnMgZm9yIGNvbnZlbmllbmNlICovCisJZmMgPSBsZTE2X3RvX2NwdSh3X2hkci0+YTMuZmMpOworCWlmICgoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkpIHsKIAkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTEsIFdMQU5fRVRIQUREUl9MRU4pOwogCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMiwgV0xBTl9FVEhBRERSX0xFTik7Ci0JfSBlbHNlIGlmKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMSkgKSB7CisJfSBlbHNlIGlmICgoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMSkpIHsKIAkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTEsIFdMQU5fRVRIQUREUl9MRU4pOwogCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMywgV0xBTl9FVEhBRERSX0xFTik7Ci0JfSBlbHNlIGlmKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMSkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkgKSB7CisJfSBlbHNlIGlmICgoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMSkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkpIHsKIAkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTMsIFdMQU5fRVRIQUREUl9MRU4pOwogCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMiwgV0xBTl9FVEhBRERSX0xFTik7CiAJfSBlbHNlIHsKIAkJcGF5bG9hZF9vZmZzZXQgPSBXTEFOX0hEUl9BNF9MRU47CiAJCWlmIChwYXlsb2FkX2xlbmd0aCA8IFdMQU5fSERSX0E0X0xFTiAtIFdMQU5fSERSX0EzX0xFTikgewotCQkJV0xBTl9MT0dfRVJST1IoIkE0IGZyYW1lIHRvbyBzaG9ydCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJBNCBmcmFtZSB0b28gc2hvcnQhXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCXBheWxvYWRfbGVuZ3RoIC09IChXTEFOX0hEUl9BNF9MRU4gLSBXTEFOX0hEUl9BM19MRU4pOwpAQCAtMzM4LDE4ICszMTYsMjIgQEAKIAl9CiAKIAkvKiBwZXJmb3JtIGRlLXdlcCBpZiBuZWNlc3NhcnkuLiAqLwotCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpICYmIFdMQU5fR0VUX0ZDX0lTV0VQKGZjKSAmJiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVDUllQVCkpIHsKKwlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSAmJiBXTEFOX0dFVF9GQ19JU1dFUChmYykKKwkgICAgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpKSB7CiAJCWlmIChwYXlsb2FkX2xlbmd0aCA8PSA4KSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiV0VQIGZyYW1lIHRvbyBzaG9ydCAoJXUpLlxuIiwKLQkJCQkJc2tiLT5sZW4pOworCQkJcHJpbnRrKEtFUk5fRVJSICJXRVAgZnJhbWUgdG9vIHNob3J0ICgldSkuXG4iLAorCQkJICAgICAgIHNrYi0+bGVuKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmICgoZm9vID0gd2VwX2RlY3J5cHQod2xhbmRldiwgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyA0LAogCQkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCAtIDgsIC0xLAogCQkJCSAgICAgICBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCwKLQkJCQkgICAgICAgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyBwYXlsb2FkX2xlbmd0aCAtIDQpKSkgeworCQkJCSAgICAgICBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArCisJCQkJICAgICAgIHBheWxvYWRfbGVuZ3RoIC0gNCkpKSB7CiAJCQkvKiBkZS13ZXAgZmFpbGVkLCBkcm9wIHNrYi4gKi8KLQkJCVdMQU5fTE9HX0RFQlVHKDEsICJIb3N0IGRlLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLCBmb28pOworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiSG9zdCBkZS1XRVAgZmFpbGVkLCBkcm9wcGluZyBmcmFtZSAoJWQpLlxuIiwKKwkJCSAgICAgICBmb28pOwogCQkJd2xhbmRldi0+cnguZGVjcnlwdF9lcnIrKzsKIAkJCXJldHVybiAyOwogCQl9CkBAIC0zNjcsMjEgKzM0OSwyMiBAQAogCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0KTsKIAogCWVfbGxjID0gKHdsYW5fbGxjX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0KTsKLQllX3NuYXAgPSAod2xhbl9zbmFwX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKwllX3NuYXAgPQorCSAgICAod2xhbl9zbmFwX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKIAogCS8qIFRlc3QgZm9yIHRoZSB2YXJpb3VzIGVuY29kaW5ncyAqLwotCWlmICggKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2V0aGhkcl90KSkgJiYKLQkgICAgICggZV9sbGMtPmRzYXAgIT0gMHhhYSB8fCBlX2xsYy0+c3NhcCAhPSAweGFhICkgJiYKLQkgICAgICgobWVtY21wKGRhZGRyLCBlX2hkci0+ZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApIHx8CisJaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9ldGhoZHJfdCkpICYmCisJICAgIChlX2xsYy0+ZHNhcCAhPSAweGFhIHx8IGVfbGxjLT5zc2FwICE9IDB4YWEpICYmCisJICAgICgobWVtY21wKGRhZGRyLCBlX2hkci0+ZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApIHx8CiAJICAgICAobWVtY21wKHNhZGRyLCBlX2hkci0+c2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApKSkgewotCQlXTEFOX0xPR19ERUJVRygzLCAiODAyLjMgRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQlwcl9kZWJ1ZygiODAyLjMgRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOwogCQkvKiA4MDIuMyBFbmNhcHN1bGF0ZWQgKi8KIAkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLwotCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gKG5ldGRldi0+bXR1ICsgV0xBTl9FVEhIRFJfTEVOKSkgeworCQlpZiAocGF5bG9hZF9sZW5ndGggPiAobmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pKSB7CiAJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gZW5jYXAnZC4gKi8KIAkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KLQkJCVdMQU5fTE9HX0VSUk9SKCJFTkNBUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAotCQkJCXBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSArIFdMQU5fRVRISERSX0xFTik7CisJCQlwcmludGsoS0VSTl9FUlIgIkVOQ0FQIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQkgICAgICAgcGF5bG9hZF9sZW5ndGgsIG5ldGRldi0+bXR1ICsgV0xBTl9FVEhIRFJfTEVOKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTM5MCwyNSArMzczLDI1IEBACiAJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOwogCi0JfSBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkgJiYKLQkJICAgKGVfbGxjLT5kc2FwID09IDB4YWEpICYmCi0JCSAgIChlX2xsYy0+c3NhcCA9PSAweGFhKSAmJgotCQkgICAoZV9sbGMtPmN0bCA9PSAweDAzKSAmJgotCQkgICAoKChtZW1jbXAoIGVfc25hcC0+b3VpLCBvdWlfcmZjMTA0MiwgV0xBTl9JRUVFX09VSV9MRU4pPT0wKSAmJgotCQkgICAgKGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WXzgwMjFoKSAmJgotCQkgICAgKHA4MDIxMV9zdHRfZmluZHByb3RvKGllZWUyaG9zdDE2KGVfc25hcC0+dHlwZSkpKSkgfHwKLQkJICAgIChtZW1jbXAoIGVfc25hcC0+b3VpLCBvdWlfcmZjMTA0MiwgV0xBTl9JRUVFX09VSV9MRU4pIT0wKSkpCi0JewotCQlXTEFOX0xPR19ERUJVRygzLCAiU05BUCtSRkMxMDQyIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9sbGNfdCkgKyBzaXplb2Yod2xhbl9zbmFwX3QpKQorCQkgICAmJiAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYgKGVfbGxjLT5zc2FwID09IDB4YWEpCisJCSAgICYmIChlX2xsYy0+Y3RsID09IDB4MDMpCisJCSAgICYmCisJCSAgICgoKG1lbWNtcChlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKSA9PSAwKQorCQkgICAgICYmIChldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaCkKKwkJICAgICAmJiAocDgwMjExX3N0dF9maW5kcHJvdG8obGUxNl90b19jcHUoZV9zbmFwLT50eXBlKSkpKQorCQkgICAgfHwgKG1lbWNtcChlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKSAhPQorCQkJMCkpKSB7CisJCXByX2RlYnVnKCJTTkFQK1JGQzEwNDIgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOwogCQkvKiBpdCdzIGEgU05BUCArIFJGQzEwNDIgZnJhbWUgJiYgcHJvdG9jb2wgaXMgaW4gU1RUICovCiAJCS8qIGJ1aWxkIDgwMi4zICsgUkZDMTA0MiAqLwogCiAJCS8qIFRlc3QgZm9yIGFuIG92ZXJsZW5ndGggZnJhbWUgKi8KLQkJaWYgKCBwYXlsb2FkX2xlbmd0aCA+IG5ldGRldi0+bXR1ICkgeworCQlpZiAocGF5bG9hZF9sZW5ndGggPiBuZXRkZXYtPm10dSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCi0JCQlXTEFOX0xPR19FUlJPUigiU05BUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAotCQkJCXBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSk7CisJCQlwcmludGsoS0VSTl9FUlIgIlNOQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKKwkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtNDI0LDExICs0MDcsMTAgQEAKIAkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KIAkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CiAKLQl9ICBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkgJiYKLQkJICAgIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJgotCQkgICAgKGVfbGxjLT5zc2FwID09IDB4YWEpICYmCi0JCSAgICAoZV9sbGMtPmN0bCA9PSAweDAzKSApIHsKLQkJV0xBTl9MT0dfREVCVUcoMywgIjgwMi4xaC9SRkMxMDQyIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9sbGNfdCkgKyBzaXplb2Yod2xhbl9zbmFwX3QpKQorCQkgICAmJiAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYgKGVfbGxjLT5zc2FwID09IDB4YWEpCisJCSAgICYmIChlX2xsYy0+Y3RsID09IDB4MDMpKSB7CisJCXByX2RlYnVnKCI4MDIuMWgvUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CiAJCS8qIGl0J3MgYW4gODAyLjFoIGZyYW1lIHx8IChhbiBSRkMxMDQyICYmIHByb3RvY29sIGlzIG5vdCBpbiBTVFQpICovCiAJCS8qIGJ1aWxkIGEgRElYSUkgKyBSRkM4OTQgKi8KIApAQCAtNDM3LDEwICs0MTksOSBAQAogCQkgICAgPiBuZXRkZXYtPm10dSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCi0JCQlXTEFOX0xPR19FUlJPUigiRElYSUkgZnJhbWUgdG9vIGxhcmdlICglbGQgPiAlZClcbiIsCi0JCQkJCShsb25nIGludCkgKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHdsYW5fbGxjX3QpIC0KLQkJCQkJCSAgICBzaXplb2Yod2xhbl9zbmFwX3QpKSwKLQkJCQkJbmV0ZGV2LT5tdHUpOworCQkJcHJpbnRrKEtFUk5fRVJSICJESVhJSSBmcmFtZSB0b28gbGFyZ2UgKCVsZCA+ICVkKVxuIiwKKwkJCSAgICAgICAobG9uZyBpbnQpKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHdsYW5fbGxjX3QpIC0KKwkJCQkJICBzaXplb2Yod2xhbl9zbmFwX3QpKSwgbmV0ZGV2LT5tdHUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtNDYyLDE5ICs0NDMsMTggQEAKIAkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KIAkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CiAJfSBlbHNlIHsKLQkJV0xBTl9MT0dfREVCVUcoMywgIk5PTi1FTkNBUCBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCXByX2RlYnVnKCJOT04tRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOwogCQkvKiBhbnkgTk9OLUVOQ0FQICovCiAJCS8qIGl0J3MgYSBnZW5lcmljIDgwMjExK0xMQyBvciBJUFggJ1JhdyA4MDIuMycgKi8KIAkJLyogIGJ1aWxkIGFuIDgwMi4zIGZyYW1lICovCiAJCS8qIGFsbG9jYXRlIHNwYWNlIGFuZCBzZXR1cCBob3N0YnVmICovCiAKIAkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLwotCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gbmV0ZGV2LT5tdHUgKSB7CisJCWlmIChwYXlsb2FkX2xlbmd0aCA+IG5ldGRldi0+bXR1KSB7CiAJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KIAkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KLQkJCVdMQU5fTE9HX0VSUk9SKCJPVEhFUiBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAotCQkJCXBheWxvYWRfbGVuZ3RoLAotCQkJCW5ldGRldi0+bXR1KTsKKwkJCXByaW50ayhLRVJOX0VSUiAiT1RIRVIgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKKwkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtNDkyLDI2ICs0NzIsMjYgQEAKIAogCX0KIAotICAgICAgICAvKgotICAgICAgICAgKiBOb3RlIHRoYXQgZXRoX3R5cGVfdHJhbnMoKSBleHBlY3RzIGFuIHNrYiB3LyBza2ItPmRhdGEgcG9pbnRpbmcKLSAgICAgICAgICogYXQgdGhlIE1BQyBoZWFkZXIsIGl0IHRoZW4gc2V0cyB0aGUgZm9sbG93aW5nIHNrYiBtZW1iZXJzOgotICAgICAgICAgKiBza2ItPm1hY19oZWFkZXIsCi0gICAgICAgICAqIHNrYi0+ZGF0YSwgYW5kCi0gICAgICAgICAqIHNrYi0+cGt0X3R5cGUuCi0gICAgICAgICAqIEl0IHRoZW4gX3JldHVybnNfIHRoZSB2YWx1ZSB0aGF0IF93ZSdyZV8gc3VwcG9zZWQgdG8gc3R1ZmYgaW4KLSAgICAgICAgICogc2tiLT5wcm90b2NvbC4gIFRoaXMgaXMgbnV0cy4KLSAgICAgICAgICovCisJLyoKKwkgKiBOb3RlIHRoYXQgZXRoX3R5cGVfdHJhbnMoKSBleHBlY3RzIGFuIHNrYiB3LyBza2ItPmRhdGEgcG9pbnRpbmcKKwkgKiBhdCB0aGUgTUFDIGhlYWRlciwgaXQgdGhlbiBzZXRzIHRoZSBmb2xsb3dpbmcgc2tiIG1lbWJlcnM6CisJICogc2tiLT5tYWNfaGVhZGVyLAorCSAqIHNrYi0+ZGF0YSwgYW5kCisJICogc2tiLT5wa3RfdHlwZS4KKwkgKiBJdCB0aGVuIF9yZXR1cm5zXyB0aGUgdmFsdWUgdGhhdCBfd2UncmVfIHN1cHBvc2VkIHRvIHN0dWZmIGluCisJICogc2tiLT5wcm90b2NvbC4gIFRoaXMgaXMgbnV0cy4KKwkgKi8KIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCi0gICAgICAgIC8qIGprcmllZ2w6IHByb2Nlc3Mgc2lnbmFsIGFuZCBub2lzZSBhcyBzZXQgaW4gaGZhMzg0eF9pbnRfcngoKSAqLworCS8qIGprcmllZ2w6IHByb2Nlc3Mgc2lnbmFsIGFuZCBub2lzZSBhcyBzZXQgaW4gaGZhMzg0eF9pbnRfcngoKSAqLwogCS8qIGprcmllZ2w6IG9ubHkgcHJvY2VzcyBzaWduYWwvbm9pc2UgaWYgcmVxdWVzdGVkIGJ5IGl3c3B5ICovCi0gICAgICAgIGlmICh3bGFuZGV2LT5zcHlfbnVtYmVyKQotICAgICAgICAgICAgICAgIG9yaW5vY29fc3B5X2dhdGhlcih3bGFuZGV2LCBldGhfaGRyKHNrYiktPmhfc291cmNlLCBQODAyMTFTS0JfUlhNRVRBKHNrYikpOworCWlmICh3bGFuZGV2LT5zcHlfbnVtYmVyKQorCQlvcmlub2NvX3NweV9nYXRoZXIod2xhbmRldiwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwKKwkJCQkgICBQODAyMTFTS0JfUlhNRVRBKHNrYikpOwogCiAJLyogRnJlZSB0aGUgbWV0YWRhdGEgKi8KIAlwODAyMTFza2JfcnhtZXRhX2RldGFjaChza2IpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM2LDExICs1MTYsMTEgQEAKIAkvKiBBbHdheXMgcmV0dXJuIGZvdW5kIGZvciBub3cuICBUaGlzIGlzIHRoZSBiZWhhdmlvciB1c2VkIGJ5IHRoZSAqLwogCS8qICBab29tIFdpbjk1IGRyaXZlciB3aGVuIDgwMi4xaCBtb2RlIGlzIHNlbGVjdGVkICovCiAJLyogVE9ETzogSWYgbmVjZXNzYXJ5LCBhZGQgYW4gYWN0dWFsIHNlYXJjaCB3ZSdsbCBwcm9iYWJseQotCQkgbmVlZCB0aGlzIHRvIG1hdGNoIHRoZSBDTUFDJ3Mgd2F5IG9mIGRvaW5nIHRoaW5ncy4KLQkJIE5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nIHRvIGNvbmZpcm0uCi0JKi8KKwkgICBuZWVkIHRoaXMgdG8gbWF0Y2ggdGhlIENNQUMncyB3YXkgb2YgZG9pbmcgdGhpbmdzLgorCSAgIE5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nIHRvIGNvbmZpcm0uCisJICovCiAKLQlpZiAocHJvdG8gPT0gMHg4MGYzKSAgLyogQVBQTEVUQUxLICovCisJaWYgKHByb3RvID09IDB4ODBmMykJLyogQVBQTEVUQUxLICovCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC01NjEsMjYgKzU0MSwyNCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkCi1wODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBwODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXA4MDIxMV9yeG1ldGFfdAkJKnJ4bWV0YTsKLQlwODAyMTFfZnJtbWV0YV90CSpmcm1tZXRhOworCXA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhOworCXA4MDIxMV9mcm1tZXRhX3QgKmZybW1ldGE7CiAKLQlEQkZFTlRFUjsKIAkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKCBza2I9PU5VTEwgKSB7CQkJLyogYmFkIHNrYiAqLwotCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIG51bGwgc2tiLlxuIik7CisJaWYgKHNrYiA9PSBOVUxMKSB7CS8qIGJhZCBza2IgKi8KKwkJcHJfZGVidWcoIkNhbGxlZCB3LyBudWxsIHNrYi5cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCWZybW1ldGEgPSBQODAyMTFTS0JfRlJNTUVUQShza2IpOwotCWlmICggZnJtbWV0YSA9PSBOVUxMICkgeyAJCS8qIG5vIG1hZ2ljICovCi0JCVdMQU5fTE9HX0RFQlVHKDEsICJDYWxsZWQgdy8gYmFkIGZybW1ldGEgbWFnaWMuXG4iKTsKKwlpZiAoZnJtbWV0YSA9PSBOVUxMKSB7CS8qIG5vIG1hZ2ljICovCisJCXByX2RlYnVnKCJDYWxsZWQgdy8gYmFkIGZybW1ldGEgbWFnaWMuXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAlyeG1ldGEgPSBmcm1tZXRhLT5yeDsKLQlpZiAoIHJ4bWV0YSA9PSBOVUxMICkgewkJCS8qIGJhZCBtZXRhIHB0ciAqLwotCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIGJhZCByeG1ldGEgcHRyLlxuIik7CisJaWYgKHJ4bWV0YSA9PSBOVUxMKSB7CS8qIGJhZCBtZXRhIHB0ciAqLworCQlwcl9kZWJ1ZygiQ2FsbGVkIHcvIGJhZCByeG1ldGEgcHRyLlxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTU5MCw3ICs1NjgsNiBAQAogCS8qIENsZWFyIHNrYi0+Y2IgKi8KIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIGV4aXQ6Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTYxMCwxOSArNTg3LDE2IEBACiAqIENhbGwgY29udGV4dDoKICoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50CQkJcmVzdWx0ID0gMDsKLQlwODAyMTFfcnhtZXRhX3QJCSpyeG1ldGE7Ci0JcDgwMjExX2ZybW1ldGFfdAkqZnJtbWV0YTsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCXA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhOworCXA4MDIxMV9mcm1tZXRhX3QgKmZybW1ldGE7CiAKIAkvKiBJZiB0aGVzZSBhbHJlYWR5IGhhdmUgbWV0YWRhdGEsIHdlIGVycm9yIG91dCEgKi8KIAlpZiAoUDgwMjExU0tCX1JYTUVUQShza2IpICE9IE5VTEwpIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiBSWG1ldGEgYWxyZWFkeSBhdHRhY2hlZCFcbiIsCi0JCQkJd2xhbmRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJYbWV0YSBhbHJlYWR5IGF0dGFjaGVkIVxuIiwKKwkJICAgICAgIHdsYW5kZXYtPm5hbWUpOwogCQlyZXN1bHQgPSAwOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNjMwLDkgKzYwNCw5IEBACiAJLyogQWxsb2NhdGUgdGhlIHJ4bWV0YSAqLwogCXJ4bWV0YSA9IGttYWxsb2Moc2l6ZW9mKHA4MDIxMV9yeG1ldGFfdCksIEdGUF9BVE9NSUMpOwogCi0JaWYgKCByeG1ldGEgPT0gTlVMTCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcnhtZXRhLlxuIiwKLQkJCQl3bGFuZGV2LT5uYW1lKTsKKwlpZiAocnhtZXRhID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHJ4bWV0YS5cbiIsCisJCSAgICAgICB3bGFuZGV2LT5uYW1lKTsKIAkJcmVzdWx0ID0gMTsKIAkJZ290byBleGl0OwogCX0KQEAgLTY0NCwxMSArNjE4LDEwIEBACiAKIAkvKiBPdmVybGF5IGEgZnJtbWV0YV90IG9udG8gc2tiLT5jYiAqLwogCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2YocDgwMjExX2ZybW1ldGFfdCkpOwotCWZybW1ldGEgPSAocDgwMjExX2ZybW1ldGFfdCopKHNrYi0+Y2IpOworCWZybW1ldGEgPSAocDgwMjExX2ZybW1ldGFfdCAqKSAoc2tiLT5jYik7CiAJZnJtbWV0YS0+bWFnaWMgPSBQODAyMTFfRlJNTUVUQV9NQUdJQzsKIAlmcm1tZXRhLT5yeCA9IHJ4bWV0YTsKIGV4aXQ6Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC02NjgsMTkgKzY0MSwxNSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkCi1wODAyMTFza2JfZnJlZShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgcDgwMjExc2tiX2ZyZWUoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcDgwMjExX2ZybW1ldGFfdAkqbWV0YTsKLQlEQkZFTlRFUjsKLQltZXRhID0gUDgwMjExU0tCX0ZSTU1FVEEoc2tiKTsKLQlpZiAoIG1ldGEgJiYgbWV0YS0+cngpIHsKLQkJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKLQl9IGVsc2UgewotCQlXTEFOX0xPR19FUlJPUigiRnJlZWluZyBhbiBza2IgKCVwKSB3LyBubyBmcm1tZXRhLlxuIiwgc2tiKTsKLQl9CisJcDgwMjExX2ZybW1ldGFfdCAqbWV0YTsKIAorCW1ldGEgPSBQODAyMTFTS0JfRlJNTUVUQShza2IpOworCWlmIChtZXRhICYmIG1ldGEtPnJ4KQorCQlwODAyMTFza2JfcnhtZXRhX2RldGFjaChza2IpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJGcmVlaW5nIGFuIHNrYiAoJXApIHcvIG5vIGZybW1ldGEuXG4iLCBza2IpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlEQkZFWElUOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaAppbmRleCA1MzhlOWJkLi42ZmUxNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCkBAIC01MywxMzQgKzUzLDEwOSBAQAogI2lmbmRlZiBfTElOVVhfUDgwMjExQ09OVl9ICiAjZGVmaW5lIF9MSU5VWF9QODAyMTFDT05WX0gKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCiAjZGVmaW5lIFdMQU5fRVRIQUREUl9MRU4JNgogI2RlZmluZSBXTEFOX0lFRUVfT1VJX0xFTgkzCiAKICNkZWZpbmUgV0xBTl9FVEhDT05WX0VOQ0FQCTEKLSNkZWZpbmUgV0xBTl9FVEhDT05WX1JGQzEwNDIJMgogI2RlZmluZSBXTEFOX0VUSENPTlZfODAyMWgJMwogCi0jZGVmaW5lIFdMQU5fTUlOX0VUSEZSTV9MRU4JNjAKLSNkZWZpbmUgV0xBTl9NQVhfRVRIRlJNX0xFTgkxNTE0CiAjZGVmaW5lIFdMQU5fRVRISERSX0xFTgkJMTQKIAogI2RlZmluZSBQODAyMTFDQVBUVVJFX1ZFUlNJT04JMHg4MDIxMTAwMQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KICNkZWZpbmUJUDgwMjExX0ZSTU1FVEFfTUFHSUMJCTB4ODAyMTEwCiAKICNkZWZpbmUgUDgwMjExU0tCX0ZSTU1FVEEocykgXAotCSgoKCgocDgwMjExX2ZybW1ldGFfdCopKChzKS0+Y2IpKS0+bWFnaWMpPT1QODAyMTFfRlJNTUVUQV9NQUdJQykgPyBcCi0JCSgocDgwMjExX2ZybW1ldGFfdCopKChzKS0+Y2IpKSA6IFwKKwkoKCgoKHA4MDIxMV9mcm1tZXRhX3QgKikoKHMpLT5jYikpLT5tYWdpYykgPT0gUDgwMjExX0ZSTU1FVEFfTUFHSUMpID8gXAorCQkoKHA4MDIxMV9mcm1tZXRhX3QgKikoKHMpLT5jYikpIDogXAogCQkoTlVMTCkpCiAKICNkZWZpbmUgUDgwMjExU0tCX1JYTUVUQShzKSBcCi0JKFA4MDIxMVNLQl9GUk1NRVRBKChzKSkgPyAgUDgwMjExU0tCX0ZSTU1FVEEoKHMpKS0+cnggOiAoKHA4MDIxMV9yeG1ldGFfdCopKE5VTEwpKSkKKwkoUDgwMjExU0tCX0ZSTU1FVEEoKHMpKSA/ICBQODAyMTFTS0JfRlJNTUVUQSgocykpLT5yeCA6ICgocDgwMjExX3J4bWV0YV90ICopKE5VTEwpKSkKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX3J4bWV0YQotewotCXN0cnVjdCB3bGFuZGV2aWNlCSp3bGFuZGV2OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX3J4bWV0YSB7CisJc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXY7CiAKLQl1NjQJbWFjdGltZTsJLyogSGktcmV6IE1BQy1zdXBwbGllZCB0aW1lIHZhbHVlICovCi0JdTY0CWhvc3R0aW1lOwkvKiBCZXN0LXJleiBob3N0IHN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KKwl1NjQgbWFjdGltZTsJCS8qIEhpLXJleiBNQUMtc3VwcGxpZWQgdGltZSB2YWx1ZSAqLworCXU2NCBob3N0dGltZTsJCS8qIEJlc3QtcmV6IGhvc3Qgc3VwcGxpZWQgdGltZSB2YWx1ZSAqLwogCi0JdW5zaWduZWQgaW50CXJ4cmF0ZTsJCS8qIFJlY2VpdmUgZGF0YSByYXRlIGluIDEwMGticHMgKi8KLQl1bnNpZ25lZCBpbnQJcHJpb3JpdHk7CS8qIDAtMTUsIDA9Y29udGVudGlvbiwgNj1DRiAqLwotCWludAlzaWduYWw7CQkvKiBBbiBTU0ksIHNlZSBwODAyMTFuZXRkZXYuaCAqLwotCWludAlub2lzZTsJCS8qIEFuIFNTSSwgc2VlIHA4MDIxMW5ldGRldi5oICovCi0JdW5zaWduZWQgaW50CWNoYW5uZWw7CS8qIFJlY2VpdmUgY2hhbm5lbCAobW9zdGx5IGZvciBzbmlmcykgKi8KLQl1bnNpZ25lZCBpbnQJcHJlYW1ibGU7CS8qIFA4MDIxMUVOVU1fcHJlYW1ibGV0eXBlXyogKi8KLQl1bnNpZ25lZCBpbnQJZW5jb2Rpbmc7CS8qIFA4MDIxMUVOVU1fZW5jb2RpbmdfKiAqLworCXVuc2lnbmVkIGludCByeHJhdGU7CS8qIFJlY2VpdmUgZGF0YSByYXRlIGluIDEwMGticHMgKi8KKwl1bnNpZ25lZCBpbnQgcHJpb3JpdHk7CS8qIDAtMTUsIDA9Y29udGVudGlvbiwgNj1DRiAqLworCWludCBzaWduYWw7CQkvKiBBbiBTU0ksIHNlZSBwODAyMTFuZXRkZXYuaCAqLworCWludCBub2lzZTsJCS8qIEFuIFNTSSwgc2VlIHA4MDIxMW5ldGRldi5oICovCisJdW5zaWduZWQgaW50IGNoYW5uZWw7CS8qIFJlY2VpdmUgY2hhbm5lbCAobW9zdGx5IGZvciBzbmlmcykgKi8KKwl1bnNpZ25lZCBpbnQgcHJlYW1ibGU7CS8qIFA4MDIxMUVOVU1fcHJlYW1ibGV0eXBlXyogKi8KKwl1bnNpZ25lZCBpbnQgZW5jb2Rpbmc7CS8qIFA4MDIxMUVOVU1fZW5jb2RpbmdfKiAqLwogCiB9IHA4MDIxMV9yeG1ldGFfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2ZybW1ldGEKLXsKLQl1bnNpZ25lZCBpbnQJCQltYWdpYzsKLQlwODAyMTFfcnhtZXRhX3QJCSpyeDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1tZXRhIHsKKwl1bnNpZ25lZCBpbnQgbWFnaWM7CisJcDgwMjExX3J4bWV0YV90ICpyeDsKIH0gcDgwMjExX2ZybW1ldGFfdDsKIAogdm9pZCBwODAyMTFza2JfZnJlZShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBwODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KIC8qCiAgKiBGcmFtZSBjYXB0dXJlIGhlYWRlci4gIChTZWUgZG9jL2NhcHR1cmVmcm0udHh0KQogICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFfY2FwaGRyCi17Ci0JdTMyCQl2ZXJzaW9uOwotCXUzMgkJbGVuZ3RoOwotCXU2NAkJbWFjdGltZTsKLQl1NjQJCWhvc3R0aW1lOwotCXUzMgkJcGh5dHlwZTsKLQl1MzIJCWNoYW5uZWw7Ci0JdTMyCQlkYXRhcmF0ZTsKLQl1MzIJCWFudGVubmE7Ci0JdTMyCQlwcmlvcml0eTsKLQl1MzIJCXNzaV90eXBlOwotCXMzMgkJc3NpX3NpZ25hbDsKLQlzMzIJCXNzaV9ub2lzZTsKLQl1MzIJCXByZWFtYmxlOwotCXUzMgkJZW5jb2Rpbmc7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFfY2FwaGRyIHsKKwl1MzIgdmVyc2lvbjsKKwl1MzIgbGVuZ3RoOworCXU2NCBtYWN0aW1lOworCXU2NCBob3N0dGltZTsKKwl1MzIgcGh5dHlwZTsKKwl1MzIgY2hhbm5lbDsKKwl1MzIgZGF0YXJhdGU7CisJdTMyIGFudGVubmE7CisJdTMyIHByaW9yaXR5OworCXUzMiBzc2lfdHlwZTsKKwlzMzIgc3NpX3NpZ25hbDsKKwlzMzIgc3NpX25vaXNlOworCXUzMiBwcmVhbWJsZTsKKwl1MzIgZW5jb2Rpbmc7CiB9IHA4MDIxMV9jYXBoZHJfdDsKIAogLyogYnVmZmVyIGZyZWUgbWV0aG9kIHBvaW50ZXIgdHlwZSAqLwotdHlwZWRlZiB2b2lkICgqIGZyZWVidWZfbWV0aG9kX3QpKHZvaWQgKmJ1ZiwgaW50IHNpemUpOwordHlwZWRlZiB2b2lkICgqZnJlZWJ1Zl9tZXRob2RfdCkgKHZvaWQgKmJ1ZiwgaW50IHNpemUpOwogCiB0eXBlZGVmIHN0cnVjdCBwODAyMTFfbWV0YXdlcCB7Ci0Jdm9pZCAgKmRhdGE7CisJdm9pZCAqZGF0YTsKIAl1OCBpdls0XTsKIAl1OCBpY3ZbNF07CiB9IHA4MDIxMV9tZXRhd2VwX3Q7CiAKIC8qIGxvY2FsIGV0aGVyIGhlYWRlciB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2V0aGhkcgotewotCXU4CWRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwotCXU4CXNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwotCXUxNgl0eXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2V0aGhkcl90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9ldGhoZHIgeworCXU4IGRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCXU4IHNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCXUxNiB0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9ldGhoZHJfdDsKIAogLyogbG9jYWwgbGxjIGhlYWRlciB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2xsYwotewotCXU4CWRzYXA7Ci0JdTgJc3NhcDsKLQl1OAljdGw7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5fbGxjX3Q7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2xsYyB7CisJdTggZHNhcDsKKwl1OCBzc2FwOworCXU4IGN0bDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5fbGxjX3Q7CiAKIC8qIGxvY2FsIHNuYXAgaGVhZGVyIHR5cGUgKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fc25hcAotewotCXU4CW91aVtXTEFOX0lFRUVfT1VJX0xFTl07Ci0JdTE2CXR5cGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5fc25hcF90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9zbmFwIHsKKwl1OCBvdWlbV0xBTl9JRUVFX09VSV9MRU5dOworCXUxNiB0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9zbmFwX3Q7CiAKIC8qIENpcmN1bGFyIGluY2x1ZGUgdHJpY2sgKi8KIHN0cnVjdCB3bGFuZGV2aWNlOwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRXh0ZXJucyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLypGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQotaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoIHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCB1MzIgZXRoY29udiwKLQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBza2JfZXRoZXJfdG9fcDgwMjExKCBzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCi0JCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAotCQkJIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXAgKTsKK2ludCBza2JfcDgwMjExX3RvX2V0aGVyKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCB1MzIgZXRoY29udiwKKwkJCXN0cnVjdCBza19idWZmICpza2IpOworaW50IHNrYl9ldGhlcl90b19wODAyMTEoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHUzMiBldGhjb252LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CiAKIGludCBwODAyMTFfc3R0X2ZpbmRwcm90byh1MTYgcHJvdG8pOwotaW50IHA4MDIxMV9zdHRfYWRkcHJvdG8odTE2IHByb3RvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oCmluZGV4IDcyZjEyYWYuLmRlZDQ3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oCkBAIC02Myw0MyArNjMsMjMgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpZm5kZWYgIF9XTEFOX0NPTVBBVF9ICi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKLSNlbmRpZgogCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDb25zdGFudHMgKi8KIAogLyotLS0gU2l6ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBXTEFOX0FERFJfTEVOCQkJNgogI2RlZmluZSBXTEFOX0NSQ19MRU4JCQk0CiAjZGVmaW5lIFdMQU5fQlNTSURfTEVOCQkJNgotI2RlZmluZSBXTEFOX0JTU19UU19MRU4JCQk4CiAjZGVmaW5lIFdMQU5fSERSX0EzX0xFTgkJCTI0CiAjZGVmaW5lIFdMQU5fSERSX0E0X0xFTgkJCTMwCiAjZGVmaW5lIFdMQU5fU1NJRF9NQVhMRU4JCTMyCiAjZGVmaW5lIFdMQU5fREFUQV9NQVhMRU4JCTIzMTIKLSNkZWZpbmUgV0xBTl9BM0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIFdMQU5fREFUQV9NQVhMRU4gKyBXTEFOX0NSQ19MRU4pCi0jZGVmaW5lIFdMQU5fQTRGUl9NQVhMRU4JCShXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKQotI2RlZmluZSBXTEFOX0JFQUNPTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAzMzQpCi0jZGVmaW5lIFdMQU5fQVRJTV9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAwKQotI2RlZmluZSBXTEFOX0RJU0FTU09DX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDIpCi0jZGVmaW5lIFdMQU5fQVNTT0NSRVFfRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgNDgpCi0jZGVmaW5lIFdMQU5fQVNTT0NSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgMTYpCi0jZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDU0KQotI2RlZmluZSBXTEFOX1JFQVNTT0NSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgMTYpCi0jZGVmaW5lIFdMQU5fUFJPQkVSRVFfRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgNDQpCi0jZGVmaW5lIFdMQU5fUFJPQkVSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgNzgpCi0jZGVmaW5lIFdMQU5fQVVUSEVOX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDI2MSkKLSNkZWZpbmUgV0xBTl9ERUFVVEhFTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyKQotI2RlZmluZSBXTEFOX1dFUF9OS0VZUwkJCTQKLSNkZWZpbmUgV0xBTl9XRVBfTUFYS0VZTEVOCQkxMwotI2RlZmluZSBXTEFOX0NIQUxMRU5HRV9JRV9MRU4JCTEzMAotI2RlZmluZSBXTEFOX0NIQUxMRU5HRV9MRU4JCTEyOAogI2RlZmluZSBXTEFOX1dFUF9JVl9MRU4JCQk0CiAjZGVmaW5lIFdMQU5fV0VQX0lDVl9MRU4JCTQKIApAQCAtMTQzLDcgKzEyMyw2IEBACiAjZGVmaW5lIFdMQU5fRlNUWVBFX0NGUE9MTAkJMHgwNgogI2RlZmluZSBXTEFOX0ZTVFlQRV9DRkFDS19DRlBPTEwJMHgwNwogCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBNYWNyb3MgKi8KIApAQCAtMTY2LDk3ICsxNDUsNTEgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0ZDX0ZTVFlQRShXTEFOX0ZTVFlQRV9SVFMpICk7ICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBXTEFOX0dFVF9GQ19QVkVSKG4pCSAoKCh1MTYpKG4pKSAmIChCSVQwIHwgQklUMSkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZUWVBFKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQyIHwgQklUMykpID4+IDIpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZTVFlQRShuKQkoKCgodTE2KShuKSkgJiAoQklUNHxCSVQ1fEJJVDZ8QklUNykpID4+IDQpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1RPRFMobikgCSgoKCh1MTYpKG4pKSAmIChCSVQ4KSkgPj4gOCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfRlJPTURTKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQ5KSkgPj4gOSkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfTU9SRUZSQUcobikgKCgoKHUxNikobikpICYgKEJJVDEwKSkgPj4gMTApCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1JFVFJZKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQxMSkpID4+IDExKQotI2RlZmluZSBXTEFOX0dFVF9GQ19QV1JNR1QobikJKCgoKHUxNikobikpICYgKEJJVDEyKSkgPj4gMTIpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVEQVRBKG4pICgoKCh1MTYpKG4pKSAmIChCSVQxMykpID4+IDEzKQotI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKQkoKCgodTE2KShuKSkgJiAoQklUMTQpKSA+PiAxNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfT1JERVIobikJKCgoKHUxNikobikpICYgKEJJVDE1KSkgPj4gMTUpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0ZUWVBFKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQoMikgfCBCSVQoMykpKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikJKCgoKHUxNikobikpICYgKEJJVCg0KXxCSVQoNSl8QklUKDYpfEJJVCg3KSkpID4+IDQpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1RPRFMobikgCSgoKCh1MTYpKG4pKSAmIChCSVQoOCkpKSA+PiA4KQorI2RlZmluZSBXTEFOX0dFVF9GQ19GUk9NRFMobikJKCgoKHUxNikobikpICYgKEJJVCg5KSkpID4+IDkpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0lTV0VQKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQoMTQpKSkgPj4gMTQpCiAKLSNkZWZpbmUgV0xBTl9TRVRfRkNfUFZFUihuKQkoKHUxNikobikpCiAjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZUWVBFKG4pCSgoKHUxNikobikpIDw8IDIpCiAjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZTVFlQRShuKQkoKCh1MTYpKG4pKSA8PCA0KQogI2RlZmluZSBXTEFOX1NFVF9GQ19UT0RTKG4pIAkoKCh1MTYpKG4pKSA8PCA4KQogI2RlZmluZSBXTEFOX1NFVF9GQ19GUk9NRFMobikJKCgodTE2KShuKSkgPDwgOSkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfTU9SRUZSQUcobikgKCgodTE2KShuKSkgPDwgMTApCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX1JFVFJZKG4pCSgoKHUxNikobikpIDw8IDExKQotI2RlZmluZSBXTEFOX1NFVF9GQ19QV1JNR1QobikJKCgodTE2KShuKSkgPDwgMTIpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX01PUkVEQVRBKG4pICgoKHUxNikobikpIDw8IDEzKQogI2RlZmluZSBXTEFOX1NFVF9GQ19JU1dFUChuKQkoKCh1MTYpKG4pKSA8PCAxNCkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfT1JERVIobikJKCgodTE2KShuKSkgPDwgMTUpCiAKLS8qLS0tIER1cmF0aW9uIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIE1hY3JvcyB0byBnZXQvc2V0IHRoZSBiaXRmaWVsZHMgb2YgdGhlIER1cmF0aW9uIEZpZWxkICAgICAgKi8KLS8qICAtIHRoZSBkdXJhdGlvbiB2YWx1ZSBpcyBvbmx5IHZhbGlkIHdoZW4gYml0MTUgaXMgemVybyAgICAgKi8KLS8qICAtIHRoZSBmaXJtd2FyZSBoYW5kbGVzIHRoZXNlIHZhbHVlcywgc28gSSdtIG5vdCBnb2luZyAgICAgKi8KLS8qICAgIHRoZXNlIG1hY3JvcyByaWdodCBub3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0gU2VxdWVuY2UgQ29udHJvbCAgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogTWFjcm9zIHRvIGdldC9zZXQgdGhlIGJpdGZpZWxkcyBvZiB0aGUgU2VxdWVuY2UgQ29udHJvbCAgICAqLwotLyogRmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJHTlVNKG4pICgoKHUxNikobikpICYgKEJJVDB8QklUMXxCSVQyfEJJVDMpKQotI2RlZmluZSBXTEFOX0dFVF9TRVFfU0VRTlVNKG4pICgoKCh1MTYpKG4pKSAmICh+KEJJVDB8QklUMXxCSVQyfEJJVDMpKSkgPj4gNCkKLQotLyotLS0gRGF0YSBwdHIgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogQ3JlYXRlcyBhIHU4KiB0byB0aGUgZGF0YSBwb3J0aW9uIG9mIGEgZnJhbWUgICAgICAgICAgICAqLwotLyogQXNzdW1lcyB5b3UncmUgcGFzc2luZyBpbiBhIHB0ciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZHIqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBXTEFOX0hEUl9BM19EQVRBUChwKSAoKCh1OCopKHApKSArIFdMQU5fSERSX0EzX0xFTikKLSNkZWZpbmUgV0xBTl9IRFJfQTRfREFUQVAocCkgKCgodTgqKShwKSkgKyBXTEFOX0hEUl9BNF9MRU4pCi0KLSNkZWZpbmUgRE9UMTFfUkFURTVfSVNCQVNJQ19HRVQocikgICAgICgoKHU4KShyKSkgJiBCSVQ3KQorI2RlZmluZSBET1QxMV9SQVRFNV9JU0JBU0lDX0dFVChyKSAgICAgKCgodTgpKHIpKSAmIEJJVCg3KSkKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFR5cGVzICovCiAKLS8qIEJTUyBUaW1lc3RhbXAgKi8KLXR5cGVkZWYgdTggd2xhbl9ic3NfdHNfdFtXTEFOX0JTU19UU19MRU5dOwotCiAvKiBHZW5lcmljIDgwMi4xMSBIZWFkZXIgdHlwZXMgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2hkcl9hMwotewotCXUxNglmYzsKLQl1MTYJZHVyOwotCXU4CWExW1dMQU5fQUREUl9MRU5dOwotCXU4CWEyW1dMQU5fQUREUl9MRU5dOwotCXU4CWEzW1dMQU5fQUREUl9MRU5dOwotCXUxNglzZXE7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMV9oZHJfYTNfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTMgeworCXUxNiBmYzsKKwl1MTYgZHVyOworCXU4IGExW0VUSF9BTEVOXTsKKwl1OCBhMltFVEhfQUxFTl07CisJdTggYTNbRVRIX0FMRU5dOworCXUxNiBzZXE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFfaGRyX2EzX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTQKLXsKLQl1MTYJZmM7Ci0JdTE2CWR1cjsKLQl1OAlhMVtXTEFOX0FERFJfTEVOXTsKLQl1OAlhMltXTEFOX0FERFJfTEVOXTsKLQl1OAlhM1tXTEFOX0FERFJfTEVOXTsKLQl1MTYJc2VxOwotCXU4CWE0W1dMQU5fQUREUl9MRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX2E0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFfaGRyX2E0IHsKKwl1MTYgZmM7CisJdTE2IGR1cjsKKwl1OCBhMVtFVEhfQUxFTl07CisJdTggYTJbRVRIX0FMRU5dOworCXU4IGEzW0VUSF9BTEVOXTsKKwl1MTYgc2VxOworCXU4IGE0W0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMV9oZHJfYTRfdDsKIAotdHlwZWRlZiB1bmlvbiBwODAyMTFfaGRyCi17Ci0JcDgwMjExX2hkcl9hM190CQlhMzsKLQlwODAyMTFfaGRyX2E0X3QJCWE0OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX3Q7Cit0eXBlZGVmIHVuaW9uIHA4MDIxMV9oZHIgeworCXA4MDIxMV9oZHJfYTNfdCBhMzsKKwlwODAyMTFfaGRyX2E0X3QgYTQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFfaGRyX3Q7CiAKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLS8qIEZyYW1lIGFuZCBoZWFkZXIgbGVuZ2h0IG1hY3JvcyAqLworLyogRnJhbWUgYW5kIGhlYWRlciBsZW5ndGggbWFjcm9zICovCiAKICNkZWZpbmUgV0xBTl9DVExfRlJBTUVMRU4oZnN0eXBlKSAoXAogCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0JMT0NLQUNLUkVRCT8gMjQgOiBcCkBAIC0yNzEsMjMgKzIwNCwyMiBAQAogI2RlZmluZSBXTEFOX0ZDU19MRU4JCQk0CiAKIC8qIGZ0Y2wgaW4gSE9TVCBvcmRlciAqLwotaW5saW5lIHN0YXRpYyB1MTYgcDgwMjExX2hlYWRlcmxlbih1MTYgZmN0bCkKK3N0YXRpYyBpbmxpbmUgdTE2IHA4MDIxMV9oZWFkZXJsZW4odTE2IGZjdGwpCiB7CiAJdTE2IGhkcmxlbiA9IDA7CiAKLQlzd2l0Y2ggKCBXTEFOX0dFVF9GQ19GVFlQRShmY3RsKSApIHsKKwlzd2l0Y2ggKFdMQU5fR0VUX0ZDX0ZUWVBFKGZjdGwpKSB7CiAJY2FzZSBXTEFOX0ZUWVBFX01HTVQ6CiAJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0ZUWVBFX0RBVEE6CiAJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKLQkJaWYgKCBXTEFOX0dFVF9GQ19UT0RTKGZjdGwpICYmIFdMQU5fR0VUX0ZDX0ZST01EUyhmY3RsKSApIHsKLQkJCWhkcmxlbiArPSBXTEFOX0FERFJfTEVOOwotCQl9CisJCWlmIChXTEFOX0dFVF9GQ19UT0RTKGZjdGwpICYmIFdMQU5fR0VUX0ZDX0ZST01EUyhmY3RsKSkKKwkJCWhkcmxlbiArPSBFVEhfQUxFTjsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0ZUWVBFX0NUTDoKIAkJaGRybGVuID0gV0xBTl9DVExfRlJBTUVMRU4oV0xBTl9HRVRfRkNfRlNUWVBFKGZjdGwpKSAtCi0JCQlXTEFOX0ZDU19MRU47CisJCSAgICBXTEFOX0ZDU19MRU47CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCmluZGV4IGFkNjdiNjkuLjY0Y2E3ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaW9jdGwuaApAQCAtNjAsMTQgKzYwLDkgQEAKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAKLQogI2lmbmRlZiBfUDgwMjExSU9DVExfSAogI2RlZmluZSBfUDgwMjExSU9DVExfSAogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogQ29uc3RhbnRzICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBwODAyMTEgaW9jdGwgInJlcXVlc3QiIGNvZGVzLiAgU2VlIGFyZ3VtZW50IDIgb2YgaW9jdGwoMikuICovCiAKICNkZWZpbmUgUDgwMjExX0lGVEVTVAkJKFNJT0NERVZQUklWQVRFICsgMCkKQEAgLTc5LDQ1ICs3NCwxNiBAQAogI2RlZmluZSBQODAyMTFfSU9DVExfTUFHSUMJKDB4NGEyZDQ2NGRVTCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIE5ldGxpbmsgcHJvdG9jb2wgbnVtYmVycyBmb3IgdGhlIGluZGljYXRpb24gaW50ZXJmYWNlICovCi0KLSNkZWZpbmUgUDgwMjExX05MX1NPQ0tfSU5ECU5FVExJTktfVVNFUlNPQ0sKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIE5ldGxpbmsgbXVsdGljYXN0IGJpdHMgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBtZXNzYWdlcyAqLwotCi0jZGVmaW5lIFA4MDIxMV9OTF9NQ0FTVF9HUlBfTUxNRQlCSVQwCS8qIExvY2FsIHN0YXRpb24gbWVzc2FnZXMgKi8KLSNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9TTklGRglCSVQxCS8qIFNuaWZmZXIgbWVzc2FnZXMgKi8KLSNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9ESVNUCUJJVDIJLyogRGlzdHJpYnV0aW9uIHN5c3RlbSBtZXNzYWdlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBBIHB0ciB0byB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0eXBlIGlzIHBhc3NlZCBhcyB0aGUgdGhpcmQgKi8KIC8qICBhcmd1bWVudCB0byB0aGUgaW9jdGwgc3lzdGVtIGNhbGwgd2hlbiBpc3N1aW5nIGEgcmVxdWVzdCB0byAqLwogLyogIHRoZSBwODAyMTEgbW9kdWxlLiAqLwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpb2N0bF9yZXEKLXsKLQljaGFyIAluYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaW9jdGxfcmVxIHsKKwljaGFyIG5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CiAJY2FkZHJfdCBkYXRhOwotCXUzMgltYWdpYzsKLQl1MTYJbGVuOwotCXUzMglyZXN1bHQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWlvY3RsX3JlcV90OwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCisJdTMyIG1hZ2ljOworCXUxNiBsZW47CisJdTMyIHJlc3VsdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWlvY3RsX3JlcV90OwogCiAjZW5kaWYgLyogX1A4MDIxMUlPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaAppbmRleCA4YjYxZTVmLi4yZjNjOWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCkBAIC01OCw1MCArNTgsOCBAQAogI2RlZmluZSBfUDgwMjExTUVUQV9ICiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KIAotI2lmbmRlZiBfV0xBTl9DT01QQVRfSAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0jZW5kaWYKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIE1hY3JvcyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgbmFtaW5nICovCi0vKiAgY29udmVudGlvbnMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIGxpc3RzLiAqLwotCi0jZGVmaW5lIE1LUkVRTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIHJlcSAjIyBfICMjIG5hbWUKLSNkZWZpbmUgTUtJTkRNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgaW5kICMjIF8gIyMgbmFtZQotI2RlZmluZSBNS01JQk1FVEFOQU1FKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBtaWIgIyMgXyAjIyBuYW1lCi0jZGVmaW5lIE1LR1JQTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGdycCAjIyBfICMjIG5hbWUKLQotI2RlZmluZSBNS1JFUU1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyByZXEgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQotI2RlZmluZSBNS0lORE1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBpbmQgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQotI2RlZmluZSBNS01JQk1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBtaWIgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQotI2RlZmluZSBNS0dSUE1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBncnAgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQotCi0jZGVmaW5lIEdFVE1FVEFTSVpFKGFwdHIpCQkoKiooKHUzMioqKShhcHRyKSkpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgZm9sbG93aW5nIGlmZGVmIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBkZWZpbmVzOiAqLwotLyogIFA4MDIxMV9OT0lOQ0xVREVTVFJJTkdTIC0gaWYgZGVmaW5lZCwgYWxsIG1ldGFkYXRhIG5hbWUgZmllbGRzICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZW1wdHkgc3RyaW5ncyAqLwotCi0jaWZkZWYgUDgwMjExX05PSU5DTFVERVNUUklOR1MKLQkjZGVmaW5lCU1LSVRFTU5BTUUocykJKCIiKQotI2Vsc2UKLQkjZGVmaW5lCU1LSVRFTU5BTUUocykJKHMpCi0jZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFR5cGVzICovCkBAIC0xMTEsNTkgKzY5LDI5IEBACiAvKiByZXByZXNlbnRhdGlvbiBvZiBjYXRlZ29yeSBsaXN0IG1ldGFkYXRhLCBncm91cCBsaXN0IG1ldGFkYXRhLCAqLwogLyogYW5kIGRhdGEgaXRlbSBtZXRhZGF0YSBmb3IgYm90aCBNaWIgYW5kIE1lc3NhZ2VzLiAqLwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtZXRhCi17Ci0JY2hhcgkJCSpuYW1lOwkJLyogZGF0YSBpdGVtIG5hbWUgKi8KLQl1MzIJCQlkaWQ7CQkvKiBwYXJ0aWFsIGRpZCAqLwotCXUzMgkJCWZsYWdzOwkJLyogc2V0IG9mIHZhcmlvdXMgZmxhZyBiaXRzICovCi0JdTMyCQkJbWluOwkJLyogbWluIHZhbHVlIG9mIGEgQk9VTkRFRGludCAqLwotCXUzMgkJCW1heDsJCS8qIG1heCB2YWx1ZSBvZiBhIEJPVU5ERURpbnQgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1ldGEgeworCWNoYXIgKm5hbWU7CQkvKiBkYXRhIGl0ZW0gbmFtZSAqLworCXUzMiBkaWQ7CQkvKiBwYXJ0aWFsIGRpZCAqLworCXUzMiBmbGFnczsJCS8qIHNldCBvZiB2YXJpb3VzIGZsYWcgYml0cyAqLworCXUzMiBtaW47CQkvKiBtaW4gdmFsdWUgb2YgYSBCT1VOREVEaW50ICovCisJdTMyIG1heDsJCS8qIG1heCB2YWx1ZSBvZiBhIEJPVU5ERURpbnQgKi8KIAotCXUzMgkJCW1heGxlbjsJCS8qIG1heGxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KLQl1MzIJCQltaW5sZW47CQkvKiBtaW5sZW4gb2YgYSBPQ1RFVFNUUiBvciBESVNQTEFZU1RSICovCi0JcDgwMjExZW51bV90CQkqZW51bXB0cjsJLyogcHRyIHRvIHRoZSBlbnVtIHR5cGUgZm9yIEVOVU1pbnQgKi8KLQlwODAyMTFfdG90ZXh0X3QJCXRvdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCi0JcDgwMjExX2Zyb210ZXh0X3QJZnJvbXRleHRwdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLwotCXA4MDIxMV92YWxpZF90CQl2YWxpZGZ1bnB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJdTMyIG1heGxlbjsJCS8qIG1heGxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KKwl1MzIgbWlubGVuOwkJLyogbWlubGVuIG9mIGEgT0NURVRTVFIgb3IgRElTUExBWVNUUiAqLworCXA4MDIxMWVudW1fdCAqZW51bXB0cjsJLyogcHRyIHRvIHRoZSBlbnVtIHR5cGUgZm9yIEVOVU1pbnQgKi8KKwlwODAyMTFfdG90ZXh0X3QgdG90ZXh0cHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KKwlwODAyMTFfZnJvbXRleHRfdCBmcm9tdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJcDgwMjExX3ZhbGlkX3QgdmFsaWRmdW5wdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLwogfSBwODAyMTFtZXRhX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGdycGxpc3RpdGVtCi17Ci0JY2hhcgkJKm5hbWU7Ci0JcDgwMjExbWV0YV90CSppdGVtbGlzdDsKK3R5cGVkZWYgc3RydWN0IGdycGxpc3RpdGVtIHsKKwljaGFyICpuYW1lOworCXA4MDIxMW1ldGFfdCAqaXRlbWxpc3Q7CiB9IGdycGxpc3RpdGVtX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGNhdGxpc3RpdGVtCi17Ci0JY2hhcgkJKm5hbWU7Ci0JZ3JwbGlzdGl0ZW1fdAkqZ3JwbGlzdDsKK3R5cGVkZWYgc3RydWN0IGNhdGxpc3RpdGVtIHsKKwljaGFyICpuYW1lOworCWdycGxpc3RpdGVtX3QgKmdycGxpc3Q7CiB9IGNhdGxpc3RpdGVtX3Q7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotdTMyIHA4MDIxMV90ZXh0MmRpZChjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBjaGFyICpjYXRuYW1lLCBjaGFyICpncnBuYW1lLCBjaGFyICppdGVtbmFtZSk7Ci11MzIgcDgwMjExX3RleHQyY2F0ZGlkKGNhdGxpc3RpdGVtX3QgKmxpc3QsIGNoYXIgKm5hbWUgKTsKLXUzMiBwODAyMTFfdGV4dDJncnBkaWQoZ3JwbGlzdGl0ZW1fdCAqbGlzdCwgY2hhciAqbmFtZSApOwotdTMyIHA4MDIxMV90ZXh0Mml0ZW1kaWQocDgwMjExbWV0YV90ICpsaXN0LCBjaGFyICpuYW1lICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfY2F0ZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfZ3JwZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfaXRlbWRpZCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgdTMyIGRpZCApOwotY2F0bGlzdGl0ZW1fdCAqcDgwMjExX2RpZDJjYXQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIHUzMiBkaWQgKTsKLWdycGxpc3RpdGVtX3QgKnA4MDIxMV9kaWQyZ3JwKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci1wODAyMTFtZXRhX3QgKnA4MDIxMV9kaWQyaXRlbSggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgdTMyIGRpZCApOwotdTMyIHA4MDIxMWl0ZW1fbWF4ZGF0YWxlbiggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCApOwotdTMyIHA4MDIxMV9tZXRhbmFtZTJkaWQoc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgY2hhciAqaXRlbW5hbWUpOwotdTMyIHA4MDIxMWl0ZW1fZ2V0b2Zmc2V0KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkICk7Ci1pbnQgcDgwMjExaXRlbV9nZXR0eXBlKHA4MDIxMW1ldGFfdCAqbWV0YSk7Ci0KICNlbmRpZiAvKiBfUDgwMjExTUVUQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmgKaW5kZXggY2U0ZmRkNS4uYTI5ZDZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaApAQCAtNDcsMjAgKzQ3LDkgQEAKICNpZm5kZWYgX1A4MDIxMU1LTUVUQURFRl9ICiAjZGVmaW5lIF9QODAyMTFNS01FVEFERUZfSAogCi0KLSNkZWZpbmUgRElEbXNnX2NhdF9kb3QxMXJlcSBcCi0JCQlQODAyMTFESURfTUtTRUNUSU9OKDEpCiAjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJnZXQgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYmdldF9taWJhdHRyaWJ1dGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWliZ2V0X3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWlic2V0IFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMikpCkBAIC03NSw1NzkgKzY0LDQ4IEBACiAjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX2Jzc3R5cGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9ic3NpZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3NzaWQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9zY2FudHlwZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Byb2JlZGVsYXkgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9jaGFubmVsbGlzdCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX21pbmNoYW5uZWx0aW1lIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fbWF4Y2hhbm5lbHRpbWUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fbnVtYnNzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX2FwcGVuZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYnNzaW5kZXggXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3NpZ25hbCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfbm9pc2UgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jzc2lkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zc2lkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ic3N0eXBlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iZWFjb25wZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2R0aW1wZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3RpbWVzdGFtcCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2xvY2FsdGltZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoZHdlbGx0aW1lIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhob3BzZXQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGhvcHBhdHRlcm4gXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGhvcGluZGV4IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZHNjaGFubmVsIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwY291bnQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBwZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBtYXhkdXJhdGlvbiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcGR1cnJlbWFpbmluZyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2lic3NhdGltd2luZG93IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2Zwb2xsYWJsZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcG9sbHJlcSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3ByaXZhY3kgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGUxIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlMiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTMgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU0IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI4KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTYgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU3IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlOCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlMSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlMiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlMyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlNCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlNSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzNykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlNiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlNyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlOCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0MCkgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnQgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxMykpCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9zc2lkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9ic3N0eXBlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iZWFjb25wZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2R0aW1wZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcHBlcmlvZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2ZwbWF4ZHVyYXRpb24gXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2ZoZHdlbGx0aW1lIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9maGhvcHNldCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZmhob3BwYXR0ZXJuIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9kc2NoYW5uZWwgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9pYnNzYXRpbXdpbmRvdyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X3Byb2JlZGVsYXkgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9jZnBvbGxhYmxlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2Zwb2xscmVxIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlMSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGUzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU2IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTggXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGUxIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlMiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTMgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU0IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTYgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI4KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU3IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlOCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19jYXRfZG90MTFpbmQgXAotCQkJUDgwMjExRElEX01LU0VDVElPTigyKQogI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlX2F1dGhlbnRpY2F0aW9udHlwZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kZWF1dGhlbnRpY2F0ZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfcmVhc29uY29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGVfYWlkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV9haWQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfb2xkYXBhZGRyZXNzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGlzYXNzb2NpYXRlX3BlZXJzdGFhZGRyZXNzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV9yZWFzb25jb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2NhdF9sbnhyZXEgXAotCQkJUDgwMjExRElEX01LU0VDVElPTigzKQogI2RlZmluZSBESURtc2dfbG54cmVxX2lmc3RhdGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlX2lmc3RhdGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2lmc3RhdGVfcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMikpCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX2VuYWJsZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX2NoYW5uZWwgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9wcmlzbWhlYWRlciBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3dsYW5oZWFkZXIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9rZWVwd2VwZmxhZ3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9zdHJpcGZjcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3BhY2tldF90cnVuYyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXAgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXBfZGVjcnlwdCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfaG9zdHdlcF9lbmNyeXB0IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHkgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X2RibSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X2xpbmsgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9sZXZlbCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X25vaXNlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbiBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQotI2RlZmluZSBESURtc2dfbG54cmVxX2F1dG9qb2luX3NzaWQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2F1dG9qb2luX2F1dGh0eXBlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2NhdF9wMnJlcSBcCi0JCQlQODAyMTFESURfTUtTRUNUSU9OKDUpCiAjZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkcGRhIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMikpCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkcGRhX3BkYSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkcGRhX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxMSkpCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9lbmFibGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlX2V4ZWFkZHIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMTIpKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfYWRkciBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfbGVuIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZV9kYXRhIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZV9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMTMpKQotI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV9lbmFibGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfYWRkciBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV9sZW4gXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfZGF0YSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1pYl9jYXRfZG90MTFzbXQgXAogCQkJUDgwMjExRElEX01LU0VDVElPTigxKQogI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlIFwKQEAgLTY4NCw4ICsxNDIsNiBAQAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKIAkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDE4MDAwMDAwKQotI2RlZmluZSBESURtaWJfY2F0X2RvdDExbWFjIFwKLQkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMikKICNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtaWIuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtaWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkNzJlZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbWliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyogcDgwMjExbWV0YW1pYi5oCi0qCi0qIE1hY3JvcywgY29uc3QsIHR5cGVzLCBhbmQgZnVuY3MgZm9yIHA4MDIxMSBtaWIgbWV0YWRhdGEKLSoKLSogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogbGludXgtd2xhbgotKgotKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCi0qICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSoKLSogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKLSogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0qICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCi0qICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoKLSogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAotKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0qICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKLSogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KLSogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCi0qICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCi0qIG1hZGUgZGlyZWN0bHkgdG86Ci0qCi0qIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCi0qIGluZm9AbGludXgtd2xhbi5jb20KLSogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQotKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogVGhpcyBmaWxlIGRlY2xhcmVzIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB2YXJpb3VzCi0qIHBhcnRzIG9mIHRoZSBsaW51eC13bGFuIHN5c3RlbS4KLSoKLSogTm90ZXM6Ci0qICAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuCi0qCi0qIEFsbCBmdW5jdGlvbnMgYW5kIHN0YXRpY3MgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExdHlwZXMuYwotKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmIF9QODAyMTFNRVRBTUlCX0gKLSNkZWZpbmUgX1A4MDIxMU1FVEFNSUJfSAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCi0KLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGV4dGVybmFsIGRlY2xhcmF0aW9uIGZvciB0aGUgbWliICovCi0vKiBjYXRlZ29yeSBtZXRhZGF0YSBsaXN0ICovCi0KLWV4dGVybiBjYXRsaXN0aXRlbV90IG1pYl9jYXRsaXN0W107Ci1leHRlcm4gdTMyIG1pYl9jYXRsaXN0X3NpemU7Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotI2VuZGlmIC8qIF9QODAyMTFNRVRBTUlCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtc2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU2NTllYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyogcDgwMjExbWV0YW1zZy5oCi0qCi0qIE1hY3JvcywgY29uc3QsIHR5cGVzLCBhbmQgZnVuY3MgZm9yIHA4MDIxMSBtc2cgbWV0YWRhdGEKLSoKLSogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogbGludXgtd2xhbgotKgotKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCi0qICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSoKLSogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKLSogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0qICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCi0qICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoKLSogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAotKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0qICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKLSogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KLSogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCi0qICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCi0qIG1hZGUgZGlyZWN0bHkgdG86Ci0qCi0qIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCi0qIGluZm9AbGludXgtd2xhbi5jb20KLSogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQotKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogVGhpcyBmaWxlIGRlY2xhcmVzIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB2YXJpb3VzCi0qIHBhcnRzIG9mIHRoZSBsaW51eC13bGFuIHN5c3RlbS4KLSoKLSogTm90ZXM6Ci0qICAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuCi0qCi0qIEFsbCBmdW5jdGlvbnMgYW5kIHN0YXRpY3MgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExdHlwZXMuYwotKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmIF9QODAyMTFNRVRBTVNHX0gKLSNkZWZpbmUgX1A4MDIxMU1FVEFNU0dfSAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCi0KLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGV4dGVybmFsIGRlY2xhcmF0aW9uIGZvciB0aGUgbWVzc2FnZSAqLwotLyogY2F0ZWdvcnkgbWV0YWRhdGEgbGlzdCAqLwotCi1leHRlcm4gY2F0bGlzdGl0ZW1fdCBtc2dfY2F0bGlzdFtdOwotZXh0ZXJuIHUzMiBtc2dfY2F0bGlzdF9zaXplOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLSNlbmRpZiAvKiBfUDgwMjExTUVUQU1TR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKaW5kZXggZDIyNThiMC4uZGIxMjcxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFzdHJ1Y3QuaApAQCAtNDcsMjM5ICs0NywyMjMgQEAKICNpZm5kZWYgX1A4MDIxMU1LTUVUQVNUUlVDVF9ICiAjZGVmaW5lIF9QODAyMTFNS01FVEFTVFJVQ1RfSAogCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0IHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91bmszOTJfdCBtaWJhdHRyaWJ1dGU7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0Ci17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdW5rMzkyX3QJbWliYXR0cmlidXRlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0IHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91bmszOTJfdCBtaWJhdHRyaWJ1dGU7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0Ci17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdW5rMzkyX3QJbWliYXR0cmlidXRlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2NhbiB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYnNzdHlwZTsKKwlwODAyMTFpdGVtX3BzdHI2X3QgYnNzaWQ7CisJdTggcGFkXzBDWzFdOworCXA4MDIxMWl0ZW1fcHN0cjMyX3Qgc3NpZDsKKwl1OCBwYWRfMURbM107CisJcDgwMjExaXRlbV91aW50MzJfdCBzY2FudHlwZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHByb2JlZGVsYXk7CisJcDgwMjExaXRlbV9wc3RyMTRfdCBjaGFubmVsbGlzdDsKKwl1OCBwYWRfMkNbMV07CisJcDgwMjExaXRlbV91aW50MzJfdCBtaW5jaGFubmVsdGltZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1heGNoYW5uZWx0aW1lOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG51bWJzczsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGFwcGVuZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzdHlwZQk7Ci0JcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKLQl1OAlwYWRfMENbMV0JOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7Ci0JdTgJcGFkXzFEWzNdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXNjYW50eXBlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXByb2JlZGVsYXkJOwotCXA4MDIxMWl0ZW1fcHN0cjE0X3QJY2hhbm5lbGxpc3QJOwotCXU4CXBhZF8yQ1sxXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAltaW5jaGFubmVsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAltYXhjaGFubmVsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW51bWJzcwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlhcHBlbmQJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYnNzaW5kZXg7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc2lnbmFsOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgbm9pc2U7CisJcDgwMjExaXRlbV9wc3RyNl90IGJzc2lkOworCXU4IHBhZF8zQ1sxXTsKKwlwODAyMTFpdGVtX3BzdHIzMl90IHNzaWQ7CisJdTggcGFkXzREWzNdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYnNzdHlwZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJlYWNvbnBlcmlvZDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGR0aW1wZXJpb2Q7CisJcDgwMjExaXRlbV91aW50MzJfdCB0aW1lc3RhbXA7CisJcDgwMjExaXRlbV91aW50MzJfdCBsb2NhbHRpbWU7CisJcDgwMjExaXRlbV91aW50MzJfdCBmaGR3ZWxsdGltZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGZoaG9wc2V0OworCXA4MDIxMWl0ZW1fdWludDMyX3QgZmhob3BwYXR0ZXJuOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZmhob3BpbmRleDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGRzY2hhbm5lbDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcGNvdW50OworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2ZwcGVyaW9kOworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2ZwbWF4ZHVyYXRpb247CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBkdXJyZW1haW5pbmc7CisJcDgwMjExaXRlbV91aW50MzJfdCBpYnNzYXRpbXdpbmRvdzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcG9sbGFibGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBvbGxyZXE7CisJcDgwMjExaXRlbV91aW50MzJfdCBwcml2YWN5OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlMTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTI7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGUzOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTU7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTg7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTE7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTI7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTM7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTQ7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTU7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTY7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTc7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlic3NpbmRleAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXNpZ25hbAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlub2lzZQk7Ci0JcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKLQl1OAlwYWRfM0NbMV0JOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7Ci0JdTgJcGFkXzREWzNdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmVhY29ucGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWR0aW1wZXJpb2QJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJdGltZXN0YW1wCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWxvY2FsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGR3ZWxsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHNldAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHBhdHRlcm4JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BpbmRleAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlkc2NoYW5uZWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwY291bnQJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwcGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG1heGR1cmF0aW9uCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcGR1cnJlbWFpbmluZwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlpYnNzYXRpbXdpbmRvdwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxhYmxlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbHJlcQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlwcml2YWN5CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUzCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTQJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU2CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTcJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlOAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGUyCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlMwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTQJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU1CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlNgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTcJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU4CTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0IHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV9wc3RyMzJfdCBzc2lkOworCXU4IHBhZF8xMkRbM107CisJcDgwMjExaXRlbV91aW50MzJfdCBic3N0eXBlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmVhY29ucGVyaW9kOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZHRpbXBlcmlvZDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcHBlcmlvZDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcG1heGR1cmF0aW9uOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZmhkd2VsbHRpbWU7CisJcDgwMjExaXRlbV91aW50MzJfdCBmaGhvcHNldDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGZoaG9wcGF0dGVybjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGRzY2hhbm5lbDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGlic3NhdGltd2luZG93OworCXA4MDIxMWl0ZW1fdWludDMyX3QgcHJvYmVkZWxheTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcG9sbGFibGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBvbGxyZXE7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGUxOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlMjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTM7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU0OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTY7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU3OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlODsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTE7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGUyOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgb3BlcmF0aW9uYWxyYXRlMzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTQ7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGU1OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgb3BlcmF0aW9uYWxyYXRlNjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTc7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGU4OworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9zdGFydF90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnQKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKLQl1OAlwYWRfMTJEWzNdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmVhY29ucGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWR0aW1wZXJpb2QJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwcGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG1heGR1cmF0aW9uCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWZoZHdlbGx0aW1lCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9wc2V0CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9wcGF0dGVybgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlkc2NoYW5uZWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJaWJzc2F0aW13aW5kb3cJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJvYmVkZWxheQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxhYmxlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbHJlcQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUyCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTMJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU1CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTYJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU4CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZSB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgaWZzdGF0ZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJaWZzdGF0ZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZiB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZW5hYmxlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2hhbm5lbDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHByaXNtaGVhZGVyOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgd2xhbmhlYWRlcjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGtlZXB3ZXBmbGFnczsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHN0cmlwZmNzOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcGFja2V0X3RydW5jOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpc21oZWFkZXIJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJd2xhbmhlYWRlcgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlrZWVwd2VwZmxhZ3MJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3RyaXBmY3MJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcGFja2V0X3RydW5jCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZGVjcnlwdDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGVuY3J5cHQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlkZWNyeXB0CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWVuY3J5cHQJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5IHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZGJtOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbGluazsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGxldmVsOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgbm9pc2U7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eQotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZGJtCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWxpbmsJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJbGV2ZWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbiB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fcHN0cjMyX3Qgc3NpZDsKKwl1OCBwYWRfMTlEWzNdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYXV0aHR5cGU7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7Ci0JdTgJcGFkXzE5RFszXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlhdXRodHlwZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VuazEwMjRfdCBwZGE7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91bmsxMDI0X3QJcGRhCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmVhZHBkYV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCBlbmFibGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBleGVhZGRyOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGUKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAllbmFibGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZXhlYWRkcgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGUgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGFkZHI7CisJcDgwMjExaXRlbV91aW50MzJfdCBsZW47CisJcDgwMjExaXRlbV91bms0MDk2X3QgZGF0YTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOwotCXA4MDIxMWl0ZW1fdW5rNDA5Nl90CWRhdGEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGUgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGVuYWJsZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZQotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWxlbgk7Ci0JcDgwMjExaXRlbV91bms0MDk2X3QJZGF0YQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCBhZGRyOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbGVuOworCXA4MDIxMWl0ZW1fdW5rNDA5Nl90IGRhdGE7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfdDsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKaW5kZXggNmNjMTZjMy4uNjIzNWZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1nbXQuaApAQCAtMTAxLDE0ICsxMDEsOCBAQAogI2RlZmluZSBfUDgwMjExTUdNVF9ICiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KIAotI2lmbmRlZiAgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCiAKICNpZm5kZWYgIF9QODAyMTFIRFJfSAogI2luY2x1ZGUgInA4MDIxMWhkci5oIgpAQCAtMTYwLDggKzE1NCw2IEBACiAjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX05PUEJDQwkyMAogI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9OT0FHSUxJVFkJMjEKIAotCi0KIC8qLS0gQXV0aCBBbGdvcml0aG0gRmllbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUgV0xBTl9BVVRIX0FMR19PUEVOU1lTVEVNCQkwCiAjZGVmaW5lIFdMQU5fQVVUSF9BTEdfU0hBUkVES0VZCQkJMQpAQCAtMjExLDIwICsyMDMsMTYgQEAKIAogI2RlZmluZSBXTEFOX0RFQVVUSEVOX09GRl9SRUFTT04JCTAKIAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KIC8qLS0gQ2FwYWJpbGl0eSBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0VTUyhuKQkJKChuKSAmIEJJVDApCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fSUJTUyhuKQkJKCgobikgJiBCSVQxKSA+PiAxKQotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUobikJKCgobikgJiBCSVQyKSA+PiAyKQotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShuKQkoKChuKSAmIEJJVDMpID4+IDMpCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fUFJJVkFDWShuKQkoKChuKSAmIEJJVDQpID4+IDQpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fRVNTKG4pCQkoKG4pICYgQklUKDApKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0lCU1MobikJCSgoKG4pICYgQklUKDEpKSA+PiAxKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUobikJKCgobikgJiBCSVQoMikpID4+IDIpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQ0ZQT0xMUkVRKG4pCSgoKG4pICYgQklUKDMpKSA+PiAzKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BSSVZBQ1kobikJKCgobikgJiBCSVQoNCkpID4+IDQpCiAgIC8qIHA4MDIxMWIgYWRkaXRpb25zICovCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fU0hPUlQobikJCSgoKG4pICYgQklUNSkgPj4gNSkKLSNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKChuKSAmIEJJVDYpID4+IDYpCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQUdJTElUWShuKQkoKChuKSAmIEJJVDcpID4+IDcpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fU0hPUlQobikJCSgoKG4pICYgQklUKDUpKSA+PiA1KQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BCQ0MobikJCSgoKG4pICYgQklUKDYpKSA+PiA2KQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0FHSUxJVFkobikJKCgobikgJiBCSVQoNykpID4+IDcpCiAKICNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19FU1MobikJCShuKQogI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0lCU1MobikJCSgobikgPDwgMSkKQEAgLTIzNiwxNDMgKzIyNCwxMjYgQEAKICNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKG4pIDw8IDYpCiAjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fQUdJTElUWShuKQkoKG4pIDw8IDcpCiAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KIC8qLS0gSW5mb3JtYXRpb24gRWxlbWVudCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBwcm90b3R5cGUgc3RydWN0dXJlLCBhbGwgSUVzIHN0YXJ0IHdpdGggdGhlc2UgbWVtYmVycyAqLwogCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZSB7CisJdTggZWlkOworCXU4IGxlbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5faWVfdDsKIAogLyotLSBTZXJ2aWNlIFNldCBJZGVudGl0eSAoU1NJRCkgIC0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfc3NpZAotewotCXU4CWVpZDsKLQl1OAlsZW47Ci0JdTgJc3NpZFsxXTsgIC8qIG1heSBiZSB6ZXJvLCBwdHJzIG1heSBvdmVybGFwICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfc3NpZF90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zc2lkIHsKKwl1OCBlaWQ7CisJdTggbGVuOworCXU4IHNzaWRbMV07CQkvKiBtYXkgYmUgemVybywgcHRycyBtYXkgb3ZlcmxhcCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV9zc2lkX3Q7CiAKIC8qLS0gU3VwcG9ydGVkIFJhdGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX3N1cHBfcmF0ZXMKLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXU4CXJhdGVzWzFdOyAgLyogaGFkIGJldHRlciBiZSBhdCBMRUFTVCBvbmUhICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfc3VwcF9yYXRlc190OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zdXBwX3JhdGVzIHsKKwl1OCBlaWQ7CisJdTggbGVuOworCXU4IHJhdGVzWzFdOwkJLyogaGFkIGJldHRlciBiZSBhdCBMRUFTVCBvbmUhICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX3N1cHBfcmF0ZXNfdDsKIAogLyotLSBGSCBQYXJhbWV0ZXIgU2V0ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfZmhfcGFybXMKLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXUxNglkd2VsbDsKLQl1OAlob3BzZXQ7Ci0JdTgJaG9wcGF0dGVybjsKLQl1OAlob3BpbmRleDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9maF9wYXJtc190OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9maF9wYXJtcyB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1MTYgZHdlbGw7CisJdTggaG9wc2V0OworCXU4IGhvcHBhdHRlcm47CisJdTggaG9waW5kZXg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2ZoX3Bhcm1zX3Q7CiAKIC8qLS0gRFMgUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX2RzX3Bhcm1zCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLQl1OAljdXJyX2NoOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2RzX3Bhcm1zX3Q7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2RzX3Bhcm1zIHsKKwl1OCBlaWQ7CisJdTggbGVuOworCXU4IGN1cnJfY2g7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2RzX3Bhcm1zX3Q7CiAKIC8qLS0gQ0YgUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfY2ZfcGFybXMKLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXU4CWNmcF9jbnQ7Ci0JdTgJY2ZwX3BlcmlvZDsKLQl1MTYJY2ZwX21heGR1cjsKLQl1MTYJY2ZwX2R1cnJlbWFpbmluZzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9jZl9wYXJtc190OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9jZl9wYXJtcyB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1OCBjZnBfY250OworCXU4IGNmcF9wZXJpb2Q7CisJdTE2IGNmcF9tYXhkdXI7CisJdTE2IGNmcF9kdXJyZW1haW5pbmc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2NmX3Bhcm1zX3Q7CiAKIC8qLS0gVElNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX3RpbQotewotCXU4CWVpZDsKLQl1OAlsZW47Ci0JdTgJZHRpbV9jbnQ7Ci0JdTgJZHRpbV9wZXJpb2Q7Ci0JdTgJYml0bWFwX2N0bDsKLQl1OAl2aXJ0X2JtWzFdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX3RpbV90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV90aW0geworCXU4IGVpZDsKKwl1OCBsZW47CisJdTggZHRpbV9jbnQ7CisJdTggZHRpbV9wZXJpb2Q7CisJdTggYml0bWFwX2N0bDsKKwl1OCB2aXJ0X2JtWzFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV90aW1fdDsKIAogLyotLSBJQlNTIFBhcmFtZXRlciBTZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfaWJzc19wYXJtcwotewotCXU4CWVpZDsKLQl1OAlsZW47Ci0JdTE2CWF0aW1fd2luOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2lic3NfcGFybXNfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfaWJzc19wYXJtcyB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1MTYgYXRpbV93aW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2lic3NfcGFybXNfdDsKIAogLyotLSBDaGFsbGVuZ2UgVGV4dCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfY2hhbGxlbmdlCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLQl1OAljaGFsbGVuZ2VbMV07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfY2hhbGxlbmdlX3Q7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2NoYWxsZW5nZSB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1OCBjaGFsbGVuZ2VbMV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2NoYWxsZW5nZV90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogIEZyYW1lIFR5cGVzICAqLwogCiAvKiBwcm90b3R5cGUgc3RydWN0dXJlLCBhbGwgbWdtdCBmcmFtZSB0eXBlcyB3aWxsIHN0YXJ0IHdpdGggdGhlc2UgbWVtYmVycyAqLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9tZ210Ci17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47CS8qIERPRVMgTk9UIGluY2x1ZGUgQ1JDICEhISEqLwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX21nbXQgeworCXUxNiB0eXBlOworCXUxNiBsZW47CQkvKiBET0VTIE5PVCBpbmNsdWRlIENSQyAhISEhICovCisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KIH0gd2xhbl9mcl9tZ210X3Q7CiAKIC8qLS0gQmVhY29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2JlYWNvbgotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2JlYWNvbiB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTY0CQkJKnRzOwotCXUxNgkJCSpiY25faW50OwotCXUxNgkJCSpjYXBfaW5mbzsKKwl1NjQgKnRzOworCXUxNiAqYmNuX2ludDsKKwl1MTYgKmNhcF9pbmZvOwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7Ci0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7Ci0Jd2xhbl9pZV9maF9wYXJtc190CSpmaF9wYXJtczsKLQl3bGFuX2llX2RzX3Bhcm1zX3QJKmRzX3Bhcm1zOwotCXdsYW5faWVfY2ZfcGFybXNfdAkqY2ZfcGFybXM7Ci0Jd2xhbl9pZV9pYnNzX3Bhcm1zX3QJKmlic3NfcGFybXM7Ci0Jd2xhbl9pZV90aW1fdAkJKnRpbTsKKwl3bGFuX2llX3NzaWRfdCAqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdCAqc3VwcF9yYXRlczsKKwl3bGFuX2llX2ZoX3Bhcm1zX3QgKmZoX3Bhcm1zOworCXdsYW5faWVfZHNfcGFybXNfdCAqZHNfcGFybXM7CisJd2xhbl9pZV9jZl9wYXJtc190ICpjZl9wYXJtczsKKwl3bGFuX2llX2lic3NfcGFybXNfdCAqaWJzc19wYXJtczsKKwl3bGFuX2llX3RpbV90ICp0aW07CiAKIH0gd2xhbl9mcl9iZWFjb25fdDsKIAotCiAvKi0tIElCU1MgQVRJTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9pYnNzYXRpbQotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4KgkJCWJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2lic3NhdGltIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KQEAgLTM4MiwxOTQgKzM1MywxNzYgQEAKIH0gd2xhbl9mcl9pYnNzYXRpbV90OwogCiAvKi0tIERpc2Fzc29jaWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9kaXNhc3NvYwotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2Rpc2Fzc29jIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1MTYJCQkqcmVhc29uOworCXUxNiAqcmVhc29uOwogCiAJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwogCiB9IHdsYW5fZnJfZGlzYXNzb2NfdDsKIAogLyotLSBBc3NvY2lhdGlvbiBSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXEKLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OCoJCQlidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3JlcSB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTE2CQkJKmNhcF9pbmZvOwotCXUxNgkJCSpsaXN0ZW5faW50OworCXUxNiAqY2FwX2luZm87CisJdTE2ICpsaXN0ZW5faW50OwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7Ci0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9zc2lkX3QgKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CiAKIH0gd2xhbl9mcl9hc3NvY3JlcV90OwogCiAvKi0tIEFzc29jaWF0aW9uIFJlc3BvbnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3Jlc3AKLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3Jlc3AgeworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXUxNgkJCSpjYXBfaW5mbzsKLQl1MTYJCQkqc3RhdHVzOwotCXUxNgkJCSphaWQ7CisJdTE2ICpjYXBfaW5mbzsKKwl1MTYgKnN0YXR1czsKKwl1MTYgKmFpZDsKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CiAKIH0gd2xhbl9mcl9hc3NvY3Jlc3BfdDsKIAogLyotLSBSZWFzc29jaWF0aW9uIFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfcmVhc3NvY3JlcQotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXEgeworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXUxNgkJCSpjYXBfaW5mbzsKLQl1MTYJCQkqbGlzdGVuX2ludDsKLQl1OAkJCSpjdXJyX2FwOworCXUxNiAqY2FwX2luZm87CisJdTE2ICpsaXN0ZW5faW50OworCXU4ICpjdXJyX2FwOwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7Ci0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9zc2lkX3QgKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CiAKIH0gd2xhbl9mcl9yZWFzc29jcmVxX3Q7CiAKIC8qLS0gUmVhc3NvY2lhdGlvbiBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXNwCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgJCQkqYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfcmVhc3NvY3Jlc3AgeworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXUxNgkJCSpjYXBfaW5mbzsKLQl1MTYJCQkqc3RhdHVzOwotCXUxNgkJCSphaWQ7CisJdTE2ICpjYXBfaW5mbzsKKwl1MTYgKnN0YXR1czsKKwl1MTYgKmFpZDsKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CiAKIH0gd2xhbl9mcl9yZWFzc29jcmVzcF90OwogCiAvKi0tIFByb2JlIFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9wcm9iZXJlcQotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3Byb2JlcmVxIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zc2lkX3QJCSpzc2lkOwotCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCXdsYW5faWVfc3NpZF90ICpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190ICpzdXBwX3JhdGVzOwogCiB9IHdsYW5fZnJfcHJvYmVyZXFfdDsKIAogLyotLSBQcm9iZSBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfcHJvYmVyZXNwCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgJCQkqYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfcHJvYmVyZXNwIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1NjQJCQkqdHM7Ci0JdTE2CQkJKmJjbl9pbnQ7Ci0JdTE2CQkJKmNhcF9pbmZvOworCXU2NCAqdHM7CisJdTE2ICpiY25faW50OworCXUxNiAqY2FwX2luZm87CiAJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwotCXdsYW5faWVfc3NpZF90CQkqc3NpZDsKLQl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKLQl3bGFuX2llX2ZoX3Bhcm1zX3QJKmZoX3Bhcm1zOwotCXdsYW5faWVfZHNfcGFybXNfdAkqZHNfcGFybXM7Ci0Jd2xhbl9pZV9jZl9wYXJtc190CSpjZl9wYXJtczsKLQl3bGFuX2llX2lic3NfcGFybXNfdAkqaWJzc19wYXJtczsKKwl3bGFuX2llX3NzaWRfdCAqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdCAqc3VwcF9yYXRlczsKKwl3bGFuX2llX2ZoX3Bhcm1zX3QgKmZoX3Bhcm1zOworCXdsYW5faWVfZHNfcGFybXNfdCAqZHNfcGFybXM7CisJd2xhbl9pZV9jZl9wYXJtc190ICpjZl9wYXJtczsKKwl3bGFuX2llX2lic3NfcGFybXNfdCAqaWJzc19wYXJtczsKIH0gd2xhbl9mcl9wcm9iZXJlc3BfdDsKIAogLyotLSBBdXRoZW50aWNhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXV0aGVuCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgJCQkqYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXV0aGVuIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1MTYJCQkqYXV0aF9hbGc7Ci0JdTE2CQkJKmF1dGhfc2VxOwotCXUxNgkJCSpzdGF0dXM7CisJdTE2ICphdXRoX2FsZzsKKwl1MTYgKmF1dGhfc2VxOworCXUxNiAqc3RhdHVzOwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX2NoYWxsZW5nZV90CSpjaGFsbGVuZ2U7CisJd2xhbl9pZV9jaGFsbGVuZ2VfdCAqY2hhbGxlbmdlOwogCiB9IHdsYW5fZnJfYXV0aGVuX3Q7CiAKIC8qLS0gRGVhdXRoZW5pY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfZGVhdXRoZW4KLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9kZWF1dGhlbiB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTE2CQkJKnJlYXNvbjsKKwl1MTYgKnJlYXNvbjsKIAogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KIAogfSB3bGFuX2ZyX2RlYXV0aGVuX3Q7CiAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLXZvaWQgd2xhbl9tZ210X2VuY29kZV9iZWFjb24oIHdsYW5fZnJfYmVhY29uX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfYmVhY29uKCB3bGFuX2ZyX2JlYWNvbl90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX2Rpc2Fzc29jKCB3bGFuX2ZyX2Rpc2Fzc29jX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGlzYXNzb2MoIHdsYW5fZnJfZGlzYXNzb2NfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9hc3NvY3JlcSggd2xhbl9mcl9hc3NvY3JlcV90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVxKCB3bGFuX2ZyX2Fzc29jcmVxX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXNwKCB3bGFuX2ZyX2Fzc29jcmVzcF90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVzcCggd2xhbl9mcl9hc3NvY3Jlc3BfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVxKCB3bGFuX2ZyX3JlYXNzb2NyZXFfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVxKCB3bGFuX2ZyX3JlYXNzb2NyZXFfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVzcCggd2xhbl9mcl9yZWFzc29jcmVzcF90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX3JlYXNzb2NyZXNwKCB3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXEoIHdsYW5fZnJfcHJvYmVyZXFfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlcSggd2xhbl9mcl9wcm9iZXJlcV90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVzcCggd2xhbl9mcl9wcm9iZXJlc3BfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlc3AoIHdsYW5fZnJfcHJvYmVyZXNwX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXV0aGVuKCB3bGFuX2ZyX2F1dGhlbl90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2F1dGhlbiggd2xhbl9mcl9hdXRoZW5fdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9kZWF1dGhlbiggd2xhbl9mcl9kZWF1dGhlbl90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2RlYXV0aGVuKCB3bGFuX2ZyX2RlYXV0aGVuX3QgICpmICk7Ci0KK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9iZWFjb24od2xhbl9mcl9iZWFjb25fdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfYmVhY29uKHdsYW5fZnJfYmVhY29uX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Rpc2Fzc29jKHdsYW5fZnJfZGlzYXNzb2NfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGlzYXNzb2Mod2xhbl9mcl9kaXNhc3NvY190ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9hc3NvY3JlcSh3bGFuX2ZyX2Fzc29jcmVxX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVxKHdsYW5fZnJfYXNzb2NyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXNwKHdsYW5fZnJfYXNzb2NyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVzcCh3bGFuX2ZyX2Fzc29jcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVxKHdsYW5fZnJfcmVhc3NvY3JlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVxKHdsYW5fZnJfcmVhc3NvY3JlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVzcCh3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX3JlYXNzb2NyZXNwKHdsYW5fZnJfcmVhc3NvY3Jlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXEod2xhbl9mcl9wcm9iZXJlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlcSh3bGFuX2ZyX3Byb2JlcmVxX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVzcCh3bGFuX2ZyX3Byb2JlcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlc3Aod2xhbl9mcl9wcm9iZXJlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXV0aGVuKHdsYW5fZnJfYXV0aGVuX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2F1dGhlbih3bGFuX2ZyX2F1dGhlbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kZWF1dGhlbih3bGFuX2ZyX2RlYXV0aGVuX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2RlYXV0aGVuKHdsYW5fZnJfZGVhdXRoZW5fdCAqZik7CiAKICNlbmRpZiAvKiBfUDgwMjExTUdNVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCmluZGV4IDNhNTc1ZDguLmYxNWE1ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCkBAIC00OSw1NCArNDksMTggQEAKICNkZWZpbmUgX1A4MDIxMU1TR19ICiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KIAotI2lmbmRlZiBfV0xBTl9DT01QQVRfSAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0jZW5kaWYKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCi0jZGVmaW5lIE1TR19CVUZGX0xFTgkJNDAwMAogI2RlZmluZSBXTEFOX0RFVk5BTUVMRU5fTUFYCTE2CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyotLS0tLSBNZXNzYWdlIFN0cnVjdHVyZSBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJvdG90eXBlIG1zZyB0eXBlICovCiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZwotewotCXUzMgltc2djb2RlOwotCXUzMgltc2dsZW47Ci0JdTgJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2cgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ190OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dkCi17Ci0JdTMyCW1zZ2NvZGU7Ci0JdTMyCW1zZ2xlbjsKLQl1OAlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwotCXU4CWFyZ3NbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ2RfdDsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLSNlbmRpZiAgLyogX1A4MDIxMU1TR19IICovCi0KKyNlbmRpZiAvKiBfUDgwMjExTVNHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKaW5kZXggNTllNWFkMS4uYjJhNjA2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKQEAgLTQ5LDEzICs0OSw3IEBACiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwogCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTcwLDkgKzY0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaWZkZWYgU0lPQ0VUSFRPT0wKQEAgLTg1LDcgKzgwLDYgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgogI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCiAjaW5jbHVkZSAicDgwMjExaGRyLmgiCiAjaW5jbHVkZSAicDgwMjExY29udi5oIgpAQCAtOTcsMzMgKzkxLDIyIEBACiAjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgogI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIENvbnN0YW50cyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFR5cGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQogLyogU3VwcG9ydCBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIHA4MDIxMW5ldGRldl9yeF9iaCh1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIG5ldGRldmljZSBtZXRob2QgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdCggbmV0ZGV2aWNlX3QgKm5ldGRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIHA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzKG5ldGRldmljZV90ICpuZXRkZXYpOwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X29wZW4oIG5ldGRldmljZV90ICpuZXRkZXYpOwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AoIG5ldGRldmljZV90ICpuZXRkZXYgKTsKLXN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2luaXQobmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzKG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X29wZW4obmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfc3RvcChuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIG5ldGRldmljZV90ICpuZXRkZXYpOwogc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2aWNlX3QgKmRldik7Ci1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfZG9faW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2RvX2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLAorCQkJCSAgaW50IGNtZCk7CiBzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzKG5ldGRldmljZV90ICpkZXYsIHZvaWQgKmFkZHIpOwogc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl90eF90aW1lb3V0KG5ldGRldmljZV90ICpuZXRkZXYpOwotc3RhdGljIGludCBwODAyMTFfcnhfdHlwZWRyb3AoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IGZjKTsKK3N0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IGZjKTsKIAogaW50IHdsYW5fd2F0Y2hkb2cgPSA1MDAwOwogbW9kdWxlX3BhcmFtKHdsYW5fd2F0Y2hkb2csIGludCwgMDY0NCk7CkBAIC0xMzMsMTUgKzExNiw2IEBACiBtb2R1bGVfcGFyYW0od2xhbl93ZXh0X3dyaXRlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3bGFuX3dleHRfd3JpdGUsICJlbmFibGUgd3JpdGUgd2lyZWxlc3MgZXh0ZW5zaW9ucyIpOwogCi0jaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCi1pbnQgd2xhbl9kZWJ1Zz0wOwotbW9kdWxlX3BhcmFtKHdsYW5fZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHdsYW5fZGVidWcsICJwODAyMTEgZGVidWcgbGV2ZWwiKTsKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfaW5pdAogKgpAQCAtMTU0LDE4ICsxMjgsMTUgQEAKICogUmV0dXJuczoKICoJbm90aGluZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdCggbmV0ZGV2aWNlX3QgKm5ldGRldikKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9pbml0KG5ldGRldmljZV90ICpuZXRkZXYpCiB7Ci0JREJGRU5URVI7CiAJLyogQ2FsbGVkIGluIHJlc3BvbnNlIHRvIHJlZ2lzdGVyX25ldGRldiAqLwogCS8qIFRoaXMgaXMgdXN1YWxseSB0aGUgcHJvYmUgZnVuY3Rpb24sIGJ1dCB0aGUgcHJvYmUgaGFzICovCiAJLyogYWxyZWFkeSBiZWVuIGRvbmUgYnkgdGhlIE1TRCBhbmQgdGhlIGNyZWF0ZV9rZGV2ICovCiAJLyogZnVuY3Rpb24uICBBbGwgd2UgZG8gaGVyZSBpcyByZXR1cm4gc3VjY2VzcyAqLwotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzCiAqCkBAIC0xODAsMjAgKzE1MSwxNiBAQAogKiBSZXR1cm5zOgogKgl0aGUgYWRkcmVzcyBvZiB0aGUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKgotcDgwMjExa25ldGRldl9nZXRfc3RhdHMobmV0ZGV2aWNlX3QgKm5ldGRldikKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcDgwMjExa25ldGRldl9nZXRfc3RhdHMobmV0ZGV2aWNlX3QgKm5ldGRldikKIHsKLQl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7Ci0JREJGRU5URVI7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwogCiAJLyogVE9ETzogcmV2aWV3IHRoZSBNSUIgc3RhdHMgZm9yIGl0ZW1zIHRoYXQgY29ycmVzcG9uZCB0bwotCQlsaW51eCBzdGF0cyAqLworCSAgIGxpbnV4IHN0YXRzICovCiAKLQlEQkZFWElUOwogCXJldHVybiAmKHdsYW5kZXYtPmxpbnV4X3N0YXRzKTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcDgwMjExa25ldGRldl9vcGVuCiAqCkBAIC0yMDgsMjIgKzE3NSwxOSBAQAogKiBSZXR1cm5zOgogKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfb3BlbiggbmV0ZGV2aWNlX3QgKm5ldGRldiApCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfb3BlbihuZXRkZXZpY2VfdCAqbmV0ZGV2KQogewotCWludCAJCXJlc3VsdCA9IDA7IC8qIHN1Y2Nlc3MgKi8KLQl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsJCS8qIHN1Y2Nlc3MgKi8KKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7CiAKIAkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIE1TRCBpcyBydW5uaW5nICovCi0JaWYgKCB3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9SVU5OSU5HICkgeworCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9SVU5OSU5HKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAKIAkvKiBUZWxsIHRoZSBNU0QgdG8gb3BlbiAqLwotCWlmICggd2xhbmRldi0+b3BlbiAhPSBOVUxMKSB7CisJaWYgKHdsYW5kZXYtPm9wZW4gIT0gTlVMTCkgewogCQlyZXN1bHQgPSB3bGFuZGV2LT5vcGVuKHdsYW5kZXYpOwotCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQlpZiAocmVzdWx0ID09IDApIHsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CiAJCQl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX09QRU47CiAJCX0KQEAgLTIzMSwxMSArMTk1LDkgQEAKIAkJcmVzdWx0ID0gLUVBR0FJTjsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfc3RvcAogKgpAQCAtMjQ4LDIxICsyMTAsMTcgQEAKICogUmV0dXJuczoKICoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AoIG5ldGRldmljZV90ICpuZXRkZXYgKQorc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AobmV0ZGV2aWNlX3QgKm5ldGRldikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OworCWludCByZXN1bHQgPSAwOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKIAotCURCRkVOVEVSOwotCi0JaWYgKCB3bGFuZGV2LT5jbG9zZSAhPSBOVUxMICkgeworCWlmICh3bGFuZGV2LT5jbG9zZSAhPSBOVUxMKQogCQlyZXN1bHQgPSB3bGFuZGV2LT5jbG9zZSh3bGFuZGV2KTsKLQl9CiAKIAluZXRpZl9zdG9wX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CiAJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9DTE9TRUQ7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI3OSwxNyArMjM3LDEzIEBACiAqIFNpZGUgZWZmZWN0czoKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZAotcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiApCit2b2lkIHA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JREJGRU5URVI7Ci0KIAkvKiBFbnF1ZXVlIGZvciBwb3N0LWlycSBwcm9jZXNzaW5nICovCiAJc2tiX3F1ZXVlX3RhaWwoJndsYW5kZXYtPm5zZF9yeHEsIHNrYik7CiAKIAl0YXNrbGV0X3NjaGVkdWxlKCZ3bGFuZGV2LT5yeF9iaCk7CiAKLSAgICAgICAgREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTMxMCwxOSArMjY0LDE3IEBACiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSBhcmc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JbmV0ZGV2aWNlX3QgICAgICpkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisJbmV0ZGV2aWNlX3QgKmRldiA9IHdsYW5kZXYtPm5ldGRldjsKIAlwODAyMTFfaGRyX2EzX3QgKmhkcjsKIAl1MTYgZmM7CiAKLSAgICAgICAgREJGRU5URVI7Ci0KIAkvKiBMZXQncyBlbXB0eSBvdXIgb3VyIHF1ZXVlICovCi0Jd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJndsYW5kZXYtPm5zZF9yeHEpKSApIHsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bGFuZGV2LT5uc2RfcnhxKSkpIHsKIAkJaWYgKHdsYW5kZXYtPnN0YXRlID09IFdMQU5fREVWSUNFX09QRU4pIHsKIAogCQkJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKIAkJCQkvKiBSQVcgZnJhbWU7IHdlIHNob3VsZG4ndCBjb252ZXJ0IGl0ICovCi0JCQkJLy8gWFhYIEFwcGVuZCB0aGUgUHJpc20gSGVhZGVyIGhlcmUgaW5zdGVhZC4KKwkJCQkvKiBYWFggQXBwZW5kIHRoZSBQcmlzbSBIZWFkZXIgaGVyZSBpbnN0ZWFkLiAqLwogCiAJCQkJLyogc2V0IHVwIHZhcmlvdXMgZGF0YSBmaWVsZHMgKi8KIAkJCQlza2ItPmRldiA9IGRldjsKQEAgLTMzNyw4ICsyODksOCBAQAogCQkJCW5ldGlmX3J4X25pKHNrYik7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgewotCQkJCWhkciA9IChwODAyMTFfaGRyX2EzX3QgKilza2ItPmRhdGE7Ci0JCQkJZmMgPSBpZWVlMmhvc3QxNihoZHItPmZjKTsKKwkJCQloZHIgPSAocDgwMjExX2hkcl9hM190ICopIHNrYi0+ZGF0YTsKKwkJCQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZmMpOwogCQkJCWlmIChwODAyMTFfcnhfdHlwZWRyb3Aod2xhbmRldiwgZmMpKSB7CiAJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCQkJY29udGludWU7CkBAIC0zNDcsNyArMjk5LDkgQEAKIAkJCQkvKiBwZXJmb3JtIG1jYXN0IGZpbHRlcmluZyAqLwogCQkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCQkJCS8qIGFsbG93IG15IGxvY2FsIGFkZHJlc3MgdGhyb3VnaCAqLwotCQkJCQlpZiAobWVtY21wKGhkci0+YTEsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQUREUl9MRU4pICE9IDApIHsKKwkJCQkJaWYgKG1lbWNtcAorCQkJCQkgICAgKGhkci0+YTEsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsCisJCQkJCSAgICAgRVRIX0FMRU4pICE9IDApIHsKIAkJCQkJCS8qIGJ1dCByZWplY3QgYW55dGhpbmcgZWxzZSB0aGF0IGlzbid0IG11bHRpY2FzdCAqLwogCQkJCQkJaWYgKCEoaGRyLT5hMVswXSAmIDB4MDEpKSB7CiAJCQkJCQkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMzU2LDIzICszMTAsMjIgQEAKIAkJCQkJfQogCQkJCX0KIAotCQkJCWlmICggc2tiX3A4MDIxMV90b19ldGhlcih3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IpID09IDAgKSB7CisJCQkJaWYgKHNrYl9wODAyMTFfdG9fZXRoZXIKKwkJCQkgICAgKHdsYW5kZXYsIHdsYW5kZXYtPmV0aGNvbnYsIHNrYikgPT0gMCkgewogCQkJCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQkJd2xhbmRldi0+bGludXhfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9CisJCQkJCSAgICBza2ItPmxlbjsKIAkJCQkJbmV0aWZfcnhfbmkoc2tiKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQotCQkJCVdMQU5fTE9HX0RFQlVHKDEsICJwODAyMTFfdG9fZXRoZXIgZmFpbGVkLlxuIik7CisJCQkJcHJfZGVidWcoInA4MDIxMV90b19ldGhlciBmYWlsZWQuXG4iKTsKIAkJCX0KIAkJfQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQotCi0gICAgICAgIERCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0CiAqCkBAIC0zOTIsMjEgKzM0NSwxOSBAQAogKiBSZXR1cm5zOgogKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldmljZV90ICpuZXRkZXYpCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBuZXRkZXZpY2VfdCAqbmV0ZGV2KQogewotCWludAkJcmVzdWx0ID0gMDsKLQlpbnQJCXR4cmVzdWx0ID0gLTE7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwotCXA4MDIxMV9oZHJfdCAgICBwODAyMTFfaGRyOworCWludCByZXN1bHQgPSAwOworCWludCB0eHJlc3VsdCA9IC0xOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKKwlwODAyMTFfaGRyX3QgcDgwMjExX2hkcjsKIAlwODAyMTFfbWV0YXdlcF90IHA4MDIxMV93ZXA7CiAKLQlEQkZFTlRFUjsKLQotCWlmIChza2IgPT0gTlVMTCkgeworCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JfQogCi0gICAgICAgIGlmICh3bGFuZGV2LT5zdGF0ZSAhPSBXTEFOX0RFVklDRV9PUEVOKSB7CisJaWYgKHdsYW5kZXYtPnN0YXRlICE9IFdMQU5fREVWSUNFX09QRU4pIHsKIAkJcmVzdWx0ID0gMTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtNDE0LDggKzM2NSw4IEBACiAJbWVtc2V0KCZwODAyMTFfaGRyLCAwLCBzaXplb2YocDgwMjExX2hkcl90KSk7CiAJbWVtc2V0KCZwODAyMTFfd2VwLCAwLCBzaXplb2YocDgwMjExX21ldGF3ZXBfdCkpOwogCi0JaWYgKCBuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsICJjYWxsZWQgd2hlbiBxdWV1ZSBzdG9wcGVkLlxuIik7CisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkgeworCQlwcl9kZWJ1ZygiY2FsbGVkIHdoZW4gcXVldWUgc3RvcHBlZC5cbiIpOwogCQlyZXN1bHQgPSAxOwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC00MjMsNyArMzc0LDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKIAkvKiBDaGVjayB0byBzZWUgdGhhdCBhIHZhbGlkIG1vZGUgaXMgc2V0ICovCi0Jc3dpdGNoKCB3bGFuZGV2LT5tYWNtb2RlICkgeworCXN3aXRjaCAod2xhbmRldi0+bWFjbW9kZSkgewogCWNhc2UgV0xBTl9NQUNNT0RFX0lCU1NfU1RBOgogCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6CiAJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgpAQCAtNDMzLDEwICszODQsMTAgQEAKIAkJICogYW5kIHJldHVybiBzdWNjZXNzIC4KIAkJICogVE9ETzogd2UgbmVlZCBhIHNhbmVyIHdheSB0byBoYW5kbGUgdGhpcwogCQkgKi8KLQkJaWYoc2tiLT5wcm90b2NvbCAhPSBFVEhfUF84MDIxMV9SQVcpIHsKKwkJaWYgKHNrYi0+cHJvdG9jb2wgIT0gRVRIX1BfODAyMTFfUkFXKSB7CiAJCQluZXRpZl9zdGFydF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwotCQkJV0xBTl9MT0dfTk9USUNFKAotCQkJCSJUeCBhdHRlbXB0IHByaW9yIHRvIGFzc29jaWF0aW9uLCBmcmFtZSBkcm9wcGVkLlxuIik7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSAgICAgICAiVHggYXR0ZW1wdCBwcmlvciB0byBhc3NvY2lhdGlvbiwgZnJhbWUgZHJvcHBlZC5cbiIpOwogCQkJd2xhbmRldi0+bGludXhfc3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmVzdWx0ID0gMDsKIAkJCWdvdG8gZmFpbGVkOwpAQCAtNDQ1LDcgKzM5Niw3IEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIHJhdyB0cmFuc21pdHMgKi8KLQlpZihza2ItPnByb3RvY29sID09IEVUSF9QXzgwMjExX1JBVykgeworCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QXzgwMjExX1JBVykgewogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKIAkJCXJlc3VsdCA9IDE7CiAJCQlnb3RvIGZhaWxlZDsKQEAgLTQ1NCwxNSArNDA1LDE3IEBACiAJCW1lbWNweSgmcDgwMjExX2hkciwgc2tiLT5kYXRhLCBzaXplb2YocDgwMjExX2hkcl90KSk7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOwogCX0gZWxzZSB7Ci0JCWlmICggc2tiX2V0aGVyX3RvX3A4MDIxMSh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IsICZwODAyMTFfaGRyLCAmcDgwMjExX3dlcCkgIT0gMCApIHsKKwkJaWYgKHNrYl9ldGhlcl90b19wODAyMTEKKwkJICAgICh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IsICZwODAyMTFfaGRyLAorCQkgICAgICZwODAyMTFfd2VwKSAhPSAwKSB7CiAJCQkvKiBjb252ZXJ0IGZhaWxlZCAqLwotCQkJV0xBTl9MT0dfREVCVUcoMSwgImV0aGVyX3RvXzgwMjExKCVkKSBmYWlsZWQuXG4iLAotCQkJCQl3bGFuZGV2LT5ldGhjb252KTsKKwkJCXByX2RlYnVnKCJldGhlcl90b184MDIxMSglZCkgZmFpbGVkLlxuIiwKKwkJCSAgICAgICB3bGFuZGV2LT5ldGhjb252KTsKIAkJCXJlc3VsdCA9IDE7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCX0KLQlpZiAoIHdsYW5kZXYtPnR4ZnJhbWUgPT0gTlVMTCApIHsKKwlpZiAod2xhbmRldi0+dHhmcmFtZSA9PSBOVUxMKSB7CiAJCXJlc3VsdCA9IDE7CiAJCWdvdG8gZmFpbGVkOwogCX0KQEAgLTQ3NSwyOCArNDI4LDI4IEBACiAKIAl0eHJlc3VsdCA9IHdsYW5kZXYtPnR4ZnJhbWUod2xhbmRldiwgc2tiLCAmcDgwMjExX2hkciwgJnA4MDIxMV93ZXApOwogCi0JaWYgKCB0eHJlc3VsdCA9PSAwKSB7CisJaWYgKHR4cmVzdWx0ID09IDApIHsKIAkJLyogc3VjY2VzcyBhbmQgbW9yZSBidWYgKi8KIAkJLyogYXZhaWwsIHJlOiBod190eGRhdGEgKi8KIAkJbmV0aWZfd2FrZV9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwogCQlyZXN1bHQgPSAwOwotCX0gZWxzZSBpZiAoIHR4cmVzdWx0ID09IDEgKSB7CisJfSBlbHNlIGlmICh0eHJlc3VsdCA9PSAxKSB7CiAJCS8qIHN1Y2Nlc3MsIG5vIG1vcmUgYXZhaWwgKi8KLQkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgc3VjY2Vzcywgbm8gbW9yZSBidWZzXG4iKTsKKwkJcHJfZGVidWcoInR4ZnJhbWUgc3VjY2Vzcywgbm8gbW9yZSBidWZzXG4iKTsKIAkJLyogbmV0ZGV2LT50YnVzeSA9IDE7ICBkb24ndCBzZXQgaGVyZSwgaXJxaGRsciAqLwogCQkvKiAgIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBpdCAqLwogCQlyZXN1bHQgPSAwOwotCX0gZWxzZSBpZiAoIHR4cmVzdWx0ID09IDIgKSB7CisJfSBlbHNlIGlmICh0eHJlc3VsdCA9PSAyKSB7CiAJCS8qIGFsbG9jIGZhaWx1cmUsIGRyb3AgZnJhbWUgKi8KLQkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgcmV0dXJuZWQgYWxsb2NfZmFpbFxuIik7CisJCXByX2RlYnVnKCJ0eGZyYW1lIHJldHVybmVkIGFsbG9jX2ZhaWxcbiIpOwogCQlyZXN1bHQgPSAxOwogCX0gZWxzZSB7CiAJCS8qIGJ1ZmZlciBmdWxsIG9yIHF1ZXVlIGJ1c3ksIGRyb3AgZnJhbWUuICovCi0JCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHJldHVybmVkIGZ1bGwgb3IgYnVzeVxuIik7CisJCXByX2RlYnVnKCJ0eGZyYW1lIHJldHVybmVkIGZ1bGwgb3IgYnVzeVxuIik7CiAJCXJlc3VsdCA9IDE7CiAJfQogCi0gZmFpbGVkOgorZmFpbGVkOgogCS8qIEZyZWUgdXAgdGhlIFdFUCBidWZmZXIgaWYgaXQncyBub3QgdGhlIHNhbWUgYXMgdGhlIHNrYiAqLwogCWlmICgocDgwMjExX3dlcC5kYXRhKSAmJiAocDgwMjExX3dlcC5kYXRhICE9IHNrYi0+ZGF0YSkpCiAJCWtmcmVlKHA4MDIxMV93ZXAuZGF0YSk7CkBAIC01MDUsMTEgKzQ1OCw5IEBACiAJaWYgKCFyZXN1bHQpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QKICoKQEAgLTUyNCwxNiArNDc1LDEzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0KG5ldGRldmljZV90ICpkZXYpCiB7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCi0JREJGRU5URVI7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCiAJLyogVE9ETzogIHJlYWwgbXVsdGljYXN0IHN1cHBvcnQgYXMgd2VsbCAqLwogCiAJaWYgKHdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCkKIAkJd2xhbmRldi0+c2V0X211bHRpY2FzdF9saXN0KHdsYW5kZXYsIGRldik7CiAKLQlEQkZFWElUOwogfQogCiAjaWZkZWYgU0lPQ0VUSFRPT0wKQEAgLTU1OCw5ICs1MDYsNiBAQAogCQlzbnByaW50ZihpbmZvLnZlcnNpb24sIHNpemVvZihpbmZvLnZlcnNpb24pLCAiJXMiLAogCQkJIFdMQU5fUkVMRUFTRSk7CiAKLQkJLy8gaW5mby5md192ZXJzaW9uCi0JCS8vIGluZm8uYnVzX2luZm8KLQogCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKQEAgLTU3Niw3ICs1MjEsNyBAQAogCQl9CiAKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmVkYXRhLCBzaXplb2YoZWRhdGEpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZgpAQCAtNjE1LDQ1ICs1NjAsNDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2RvX2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewotCWludAkJCXJlc3VsdCA9IDA7Ci0JcDgwMjExaW9jdGxfcmVxX3QJKnJlcSA9IChwODAyMTFpb2N0bF9yZXFfdCopaWZyOwotCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JdTgJCQkqbXNnYnVmOwotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCXA4MDIxMWlvY3RsX3JlcV90ICpyZXEgPSAocDgwMjExaW9jdGxfcmVxX3QgKikgaWZyOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKKwl1OCAqbXNnYnVmOwogCi0JV0xBTl9MT0dfREVCVUcoMiwgInJ4J2QgaW9jdGwsIGNtZD0lZCwgbGVuPSVkXG4iLCBjbWQsIHJlcS0+bGVuKTsKKwlwcl9kZWJ1ZygicngnZCBpb2N0bCwgY21kPSVkLCBsZW49JWRcbiIsIGNtZCwgcmVxLT5sZW4pOworCisJbXV0ZXhfbG9jaygmd2xhbmRldi0+aW9jdGxfbG9jayk7CiAKICNpZmRlZiBTSU9DRVRIVE9PTAogCWlmIChjbWQgPT0gU0lPQ0VUSFRPT0wpIHsKLQkJcmVzdWx0ID0gcDgwMjExbmV0ZGV2X2V0aHRvb2wod2xhbmRldiwgKHZvaWQgX191c2VyICopIGlmci0+aWZyX2RhdGEpOworCQlyZXN1bHQgPQorCQkgICAgcDgwMjExbmV0ZGV2X2V0aHRvb2wod2xhbmRldiwgKHZvaWQgX191c2VyICopaWZyLT5pZnJfZGF0YSk7CiAJCWdvdG8gYmFpbDsKIAl9CiAjZW5kaWYKIAogCS8qIFRlc3QgdGhlIG1hZ2ljLCBhc3N1bWUgaWZyIGlzIGdvb2QgaWYgaXQncyB0aGVyZSAqLwotCWlmICggcmVxLT5tYWdpYyAhPSBQODAyMTFfSU9DVExfTUFHSUMgKSB7CisJaWYgKHJlcS0+bWFnaWMgIT0gUDgwMjExX0lPQ1RMX01BR0lDKSB7CiAJCXJlc3VsdCA9IC1FTk9TWVM7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlpZiAoIGNtZCA9PSBQODAyMTFfSUZURVNUICkgeworCWlmIChjbWQgPT0gUDgwMjExX0lGVEVTVCkgewogCQlyZXN1bHQgPSAwOwogCQlnb3RvIGJhaWw7Ci0JfSBlbHNlIGlmICggY21kICE9IFA4MDIxMV9JRlJFUSApIHsKKwl9IGVsc2UgaWYgKGNtZCAhPSBQODAyMTFfSUZSRVEpIHsKIAkJcmVzdWx0ID0gLUVOT1NZUzsKIAkJZ290byBiYWlsOwogCX0KIAogCS8qIEFsbG9jYXRlIGEgYnVmIG9mIHNpemUgcmVxLT5sZW4gKi8KLQlpZiAoKG1zZ2J1ZiA9IGttYWxsb2MoIHJlcS0+bGVuLCBHRlBfS0VSTkVMKSkpIHsKLQkJaWYgKCBjb3B5X2Zyb21fdXNlciggbXNnYnVmLCAodm9pZCBfX3VzZXIgKikgcmVxLT5kYXRhLCByZXEtPmxlbikgKSB7CisJaWYgKChtc2didWYgPSBrbWFsbG9jKHJlcS0+bGVuLCBHRlBfS0VSTkVMKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKG1zZ2J1ZiwgKHZvaWQgX191c2VyICopcmVxLT5kYXRhLCByZXEtPmxlbikpCiAJCQlyZXN1bHQgPSAtRUZBVUxUOwotCQl9IGVsc2UgewotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCggd2xhbmRldiwgbXNnYnVmKTsKLQkJfQorCQllbHNlCisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIG1zZ2J1Zik7CiAKLQkJaWYgKCByZXN1bHQgPT0gMCApIHsKLQkJCWlmICggY29weV90b191c2VyKCAodm9pZCBfX3VzZXIgKikgcmVxLT5kYXRhLCBtc2didWYsIHJlcS0+bGVuKSkgeworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIKKwkJCSAgICAoKHZvaWQgX191c2VyICopcmVxLT5kYXRhLCBtc2didWYsIHJlcS0+bGVuKSkgewogCQkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQl9CiAJCX0KQEAgLTY2Miw5ICs2MDksOSBAQAogCQlyZXN1bHQgPSAtRU5PTUVNOwogCX0KIGJhaWw6Ci0JREJGRVhJVDsKKwltdXRleF91bmxvY2soJndsYW5kZXYtPmlvY3RsX2xvY2spOwogCi0JcmV0dXJuIHJlc3VsdDsgLyogSWYgYWxsb2NhdGUsY29weWZyb20gb3IgY29weXRvIGZhaWxzLCByZXR1cm4gZXJybm8gKi8KKwlyZXR1cm4gcmVzdWx0OwkJLyogSWYgYWxsb2NhdGUsY29weWZyb20gb3IgY29weXRvIGZhaWxzLCByZXR1cm4gZXJybm8gKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02OTQsMjIgKzY0MSwyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzKG5ldGRldmljZV90ICpkZXYsIHZvaWQgKmFkZHIpCiB7Ci0Jc3RydWN0IHNvY2thZGRyCQkJKm5ld19hZGRyID0gYWRkcjsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJZG90MTFyZXE7Ci0JcDgwMjExaXRlbV91bmszOTJfdAkJKm1pYmF0dHI7Ci0JcDgwMjExaXRlbV9wc3RyNl90CQkqbWFjYWRkcjsKLQlwODAyMTFpdGVtX3VpbnQzMl90CQkqcmVzdWx0Y29kZTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKm5ld19hZGRyID0gYWRkcjsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgZG90MTFyZXE7CisJcDgwMjExaXRlbV91bmszOTJfdCAqbWliYXR0cjsKKwlwODAyMTFpdGVtX3BzdHI2X3QgKm1hY2FkZHI7CisJcDgwMjExaXRlbV91aW50MzJfdCAqcmVzdWx0Y29kZTsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCURCRkVOVEVSOwogCS8qIElmIHdlJ3JlIHJ1bm5pbmcsIHdlIGRvbid0IGFsbG93IE1BQyBhZGRyZXNzIGNoYW5nZXMgKi8KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKLQl9CiAKIAkvKiBTZXQgdXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycy4gKi8KIAltaWJhdHRyID0gJmRvdDExcmVxLm1pYmF0dHJpYnV0ZTsKLQltYWNhZGRyID0gKHA4MDIxMWl0ZW1fcHN0cjZfdCopJm1pYmF0dHItPmRhdGE7CisJbWFjYWRkciA9IChwODAyMTFpdGVtX3BzdHI2X3QgKikmbWliYXR0ci0+ZGF0YTsKIAlyZXN1bHRjb2RlID0gJmRvdDExcmVxLnJlc3VsdGNvZGU7CiAKIAkvKiBTZXQgdXAgYSBkb3QxMXJlcV9taWJzZXQgKi8KQEAgLTcxNyw4ICs2NjIsNyBAQAogCWRvdDExcmVxLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwogCWRvdDExcmVxLm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QpOwogCW1lbWNweShkb3QxMXJlcS5kZXZuYW1lLAotCQkoKHdsYW5kZXZpY2VfdCAqKWRldi0+bWxfcHJpdiktPm5hbWUsCi0JCVdMQU5fREVWTkFNRUxFTl9NQVggLSAxKTsKKwkgICAgICAgKCh3bGFuZGV2aWNlX3QgKikgZGV2LT5tbF9wcml2KS0+bmFtZSwgV0xBTl9ERVZOQU1FTEVOX01BWCAtIDEpOwogCiAJLyogU2V0IHVwIHRoZSBtaWJhdHRyaWJ1dGUgYXJndW1lbnQgKi8KIAltaWJhdHRyLT5kaWQgPSBESURtc2dfZG90MTFyZXFfbWlic2V0X21pYmF0dHJpYnV0ZTsKQEAgLTcyOCw4ICs2NzIsOCBAQAogCW1hY2FkZHItPmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTUFDQWRkcmVzczsKIAltYWNhZGRyLT5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJbWFjYWRkci0+bGVuID0gc2l6ZW9mKG1hY2FkZHItPmRhdGEpOwotCW1hY2FkZHItPmRhdGEubGVuID0gV0xBTl9BRERSX0xFTjsKLQltZW1jcHkoJm1hY2FkZHItPmRhdGEuZGF0YSwgbmV3X2FkZHItPnNhX2RhdGEsIFdMQU5fQUREUl9MRU4pOworCW1hY2FkZHItPmRhdGEubGVuID0gRVRIX0FMRU47CisJbWVtY3B5KCZtYWNhZGRyLT5kYXRhLmRhdGEsIG5ld19hZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAKIAkvKiBTZXQgdXAgdGhlIHJlc3VsdGNvZGUgYXJndW1lbnQgKi8KIAlyZXN1bHRjb2RlLT5kaWQgPSBESURtc2dfZG90MTFyZXFfbWlic2V0X3Jlc3VsdGNvZGU7CkBAIC03NDMsMzYgKzY4NywzMCBAQAogCS8qIElmIHRoZSByZXF1ZXN0IHdhc24ndCBzdWNjZXNzZnVsLCByZXBvcnQgYW4gZXJyb3IgYW5kIGRvbid0CiAJICogY2hhbmdlIHRoZSBuZXRkZXYgYWRkcmVzcwogCSAqLwotCWlmICggcmVzdWx0ICE9IDAgfHwgcmVzdWx0Y29kZS0+ZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgewotCQlXTEFOX0xPR19FUlJPUigKLQkJIkxvdy1sZXZlbCBkcml2ZXIgZmFpbGVkIGRvdDExcmVxX21pYnNldChkb3QxMU1BQ0FkZHJlc3MpLlxuIik7CisJaWYgKHJlc3VsdCAhPSAwIHx8IHJlc3VsdGNvZGUtPmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTG93LWxldmVsIGRyaXZlciBmYWlsZWQgZG90MTFyZXFfbWlic2V0KGRvdDExTUFDQWRkcmVzcykuXG4iKTsKIAkJcmVzdWx0ID0gLUVBRERSTk9UQVZBSUw7CiAJfSBlbHNlIHsKIAkJLyogZXZlcnl0aGluZydzIG9rLCBjaGFuZ2UgdGhlIGFkZHIgaW4gbmV0ZGV2ICovCiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCBuZXdfYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IHdsYW5fY2hhbmdlX210dShuZXRkZXZpY2VfdCAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlEQkZFTlRFUjsKLQkvLyAyMzEyIGlzIG1heCA4MDIuMTEgcGF5bG9hZCwgMjAgaXMgb3ZlcmhlYWQsIChldGhlciArIGxsYyArc25hcCkKLQkvLyBhbmQgYW5vdGhlciA4IGZvciB3ZXAuCi0gICAgICAgIGlmICggKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiAoMjMxMiAtIDIwIC0gOCkpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCS8qIDIzMTIgaXMgbWF4IDgwMi4xMSBwYXlsb2FkLCAyMCBpcyBvdmVyaGVhZCwgKGV0aGVyICsgbGxjICtzbmFwKQorCSAgIGFuZCBhbm90aGVyIDggZm9yIHdlcC4gKi8KKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiAoMjMxMiAtIDIwIC0gOCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgICBkZXYtPm10dSA9IG5ld19tdHU7CisJZGV2LT5tdHUgPSBuZXdfbXR1OwogCi0JREJGRVhJVDsKLQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiB3bGFuX3NldHVwCiAqCkBAIC03OTcsMTAgKzczNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JbmV0ZGV2aWNlX3QJKmRldjsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCW5ldGRldmljZV90ICpkZXY7CiAKIAkvKiBTZXQgdXAgdGhlIHdsYW5kZXYgKi8KIAl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX0NMT1NFRDsKQEAgLTgxMCwyOCArNzQ2LDI2IEBACiAJLyogU2V0IHVwIHRoZSByeCBxdWV1ZSAqLwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJndsYW5kZXYtPm5zZF9yeHEpOwogCXRhc2tsZXRfaW5pdCgmd2xhbmRldi0+cnhfYmgsCi0JCSAgICAgcDgwMjExbmV0ZGV2X3J4X2JoLAotCQkgICAgICh1bnNpZ25lZCBsb25nKXdsYW5kZXYpOworCQkgICAgIHA4MDIxMW5ldGRldl9yeF9iaCwgKHVuc2lnbmVkIGxvbmcpd2xhbmRldik7CiAKIAkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IGRldmljZSAqLwotCWRldiA9IGFsbG9jX25ldGRldigwLCJ3bGFuJWQiLGV0aGVyX3NldHVwKTsKLQlpZiAoIGRldiA9PSBOVUxMICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIGFsbG9jIG5ldGRldi5cbiIpOworCWRldiA9IGFsbG9jX25ldGRldigwLCAid2xhbiVkIiwgZXRoZXJfc2V0dXApOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvYyBuZXRkZXYuXG4iKTsKIAkJcmVzdWx0ID0gMTsKIAl9IGVsc2UgewogCQl3bGFuZGV2LT5uZXRkZXYgPSBkZXY7CiAJCWRldi0+bWxfcHJpdiA9IHdsYW5kZXY7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0JcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQ7Ci0JCWRldi0+Z2V0X3N0YXRzID0JcDgwMjExa25ldGRldl9nZXRfc3RhdHM7Ci0jaWZkZWYgSEFWRV9QUklWQVRFX0lPQ1RMCi0JCWRldi0+ZG9faW9jdGwgPSAJcDgwMjExa25ldGRldl9kb19pb2N0bDsKLSNlbmRpZgotI2lmZGVmIEhBVkVfTVVMVElDQVNUCi0JCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0jZW5kaWYKLQkJZGV2LT5pbml0ID0JCXA4MDIxMWtuZXRkZXZfaW5pdDsKLQkJZGV2LT5vcGVuID0JCXA4MDIxMWtuZXRkZXZfb3BlbjsKLQkJZGV2LT5zdG9wID0JCXA4MDIxMWtuZXRkZXZfc3RvcDsKKwkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBwODAyMTFrbmV0ZGV2X2hhcmRfc3RhcnRfeG1pdDsKKwkJZGV2LT5nZXRfc3RhdHMgPSBwODAyMTFrbmV0ZGV2X2dldF9zdGF0czsKKwkJZGV2LT5pbml0ID0gcDgwMjExa25ldGRldl9pbml0OworCQlkZXYtPm9wZW4gPSBwODAyMTFrbmV0ZGV2X29wZW47CisJCWRldi0+c3RvcCA9IHA4MDIxMWtuZXRkZXZfc3RvcDsKKworCQltdXRleF9pbml0KCZ3bGFuZGV2LT5pb2N0bF9sb2NrKTsKKwkJLyogYmxvY2sgaW9jdGxzIHVudGlsIGZ1bGx5IGluaXRpYWxpc2VkLiBEb24ndCBmb3JnZXQgdG8gY2FsbAorCQkgICBhbGxvd19pb2N0bHMgYXQgc29tZSBwb2ludCEqLworCQltdXRleF9sb2NrKCZ3bGFuZGV2LT5pb2N0bF9sb2NrKTsKIAogI2lmIChXSVJFTEVTU19FWFQgPCAyMSkKIAkJZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0czsKQEAgLTgzOSwyMCArNzczLDkgQEAKIAkJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZwODAyMTF3ZXh0X2hhbmRsZXJfZGVmOwogCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSNpZmRlZiBIQVZFX0NIQU5HRV9NVFUKLQkJZGV2LT5jaGFuZ2VfbXR1ID0gd2xhbl9jaGFuZ2VfbXR1OwotI2VuZGlmCi0jaWZkZWYgSEFWRV9TRVRfTUFDX0FERFIKLQkJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPQlwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzczsKLSNlbmRpZgotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotCQlkZXYtPnR4X3RpbWVvdXQgICAgICA9ICAmcDgwMjExa25ldGRldl90eF90aW1lb3V0OwotCQlkZXYtPndhdGNoZG9nX3RpbWVvICA9ICAod2xhbl93YXRjaGRvZyAqIEhaKSAvIDEwMDA7Ci0jZW5kaWYKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg3OSwyNiArODAyLDIxIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCWludAkJcmVzdWx0ID0gMDsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOwogCiAJdGFza2xldF9raWxsKCZ3bGFuZGV2LT5yeF9iaCk7CiAKLQlpZiAod2xhbmRldi0+bmV0ZGV2ID09IE5VTEwgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJjYWxsZWQgd2l0aG91dCB3bGFuZGV2LT5uZXRkZXYgc2V0LlxuIik7CisJaWYgKHdsYW5kZXYtPm5ldGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FsbGVkIHdpdGhvdXQgd2xhbmRldi0+bmV0ZGV2IHNldC5cbiIpOwogCQlyZXN1bHQgPSAxOwogCX0gZWxzZSB7CiAJCWZyZWVfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CiAJCXdsYW5kZXYtPm5ldGRldiA9IE5VTEw7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiByZWdpc3Rlcl93bGFuZGV2CiAqCkBAIC05MjAsMTkgKzgzOCwxNSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaW50CQlpID0gMDsKLQotCURCRkVOVEVSOworCWludCBpID0gMDsKIAogCWkgPSByZWdpc3Rlcl9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKIAlpZiAoaSkKIAkJcmV0dXJuIGk7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiB1bnJlZ2lzdGVyX3dsYW5kZXYKICoKQEAgLTk1NCwyMCArODY4LDE1IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCURCRkVOVEVSOwotCiAJdW5yZWdpc3Rlcl9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKIAogCS8qIE5vdyB0byBjbGVhbiBvdXQgdGhlIHJ4IHF1ZXVlICovCi0Jd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJndsYW5kZXYtPm5zZF9yeHEpKSApIHsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bGFuZGV2LT5uc2RfcnhxKSkpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQl9CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFuZXRkZXZfaHdyZW1vdmVkCiAqCkBAIC0xMDAwLDE4ICs5MDksMTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlEQkZFTlRFUjsKIAl3bGFuZGV2LT5od3JlbW92ZWQgPSAxOwotCWlmICggd2xhbmRldi0+c3RhdGUgPT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCWlmICh3bGFuZGV2LT5zdGF0ZSA9PSBXTEFOX0RFVklDRV9PUEVOKQogCQluZXRpZl9zdG9wX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7Ci0JfQogCiAJbmV0aWZfZGV2aWNlX2RldGFjaCh3bGFuZGV2LT5uZXRkZXYpOwotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcDgwMjExX3J4X3R5cGVkcm9wCiAqCkBAIC0xMDMzLDI4ICs5MzcsMjcgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwODAyMTFfcnhfdHlwZWRyb3AoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IGZjKQorc3RhdGljIGludCBwODAyMTFfcnhfdHlwZWRyb3Aod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MTYgZmMpCiB7Ci0JdTE2CWZ0eXBlOwotCXUxNglmc3R5cGU7Ci0JaW50CWRyb3AgPSAwOworCXUxNiBmdHlwZTsKKwl1MTYgZnN0eXBlOworCWludCBkcm9wID0gMDsKIAkvKiBDbGFzc2lmeSBmcmFtZSwgaW5jcmVtZW50IGNvdW50ZXIgKi8KIAlmdHlwZSA9IFdMQU5fR0VUX0ZDX0ZUWVBFKGZjKTsKIAlmc3R5cGUgPSBXTEFOX0dFVF9GQ19GU1RZUEUoZmMpOwogI2lmIDAKLQlXTEFOX0xPR19ERUJVRyg0LAotCQkicnhfdHlwZWRyb3AgOiBmdHlwZT0lZCBmc3R5cGU9JWQuXG4iLCBmdHlwZSwgZnN0eXBlKTsKKwlwcl9kZWJ1ZygicnhfdHlwZWRyb3AgOiBmdHlwZT0lZCBmc3R5cGU9JWQuXG4iLCBmdHlwZSwgZnN0eXBlKTsKICNlbmRpZgotCXN3aXRjaCAoIGZ0eXBlICkgeworCXN3aXRjaCAoZnR5cGUpIHsKIAljYXNlIFdMQU5fRlRZUEVfTUdNVDoKIAkJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8Ci0JCQkod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJICAgICh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkJZHJvcCA9IDE7CiAJCQlicmVhazsKIAkJfQotCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBtZ210OlxuIik7CisJCXByX2RlYnVnKCJyeCdkIG1nbXQ6XG4iKTsKIAkJd2xhbmRldi0+cngubWdtdCsrOwotCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJc3dpdGNoIChmc3R5cGUpIHsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9BU1NPQ1JFUToKIAkJCS8qIHByaW50aygiYXNzb2NyZXEiKTsgKi8KIAkJCXdsYW5kZXYtPnJ4LmFzc29jcmVxKys7CkBAIC0xMTEwLDEzICsxMDEzLDEzIEBACiAKIAljYXNlIFdMQU5fRlRZUEVfQ1RMOgogCQlpZiAoKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwKLQkJCSh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQkgICAgKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCQlkcm9wID0gMTsKIAkJCWJyZWFrOwogCQl9Ci0JCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGN0bDpcbiIpOworCQlwcl9kZWJ1ZygicngnZCBjdGw6XG4iKTsKIAkJd2xhbmRldi0+cnguY3RsKys7Ci0JCXN3aXRjaCggZnN0eXBlICkgeworCQlzd2l0Y2ggKGZzdHlwZSkgewogCQljYXNlIFdMQU5fRlNUWVBFX1BTUE9MTDoKIAkJCS8qIHByaW50aygicHNwb2xsIik7ICovCiAJCQl3bGFuZGV2LT5yeC5wc3BvbGwrKzsKQEAgLTExNTIsNyArMTA1NSw3IEBACiAKIAljYXNlIFdMQU5fRlRZUEVfREFUQToKIAkJd2xhbmRldi0+cnguZGF0YSsrOwotCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJc3dpdGNoIChmc3R5cGUpIHsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9EQVRBT05MWToKIAkJCXdsYW5kZXYtPnJ4LmRhdGFvbmx5Kys7CiAJCQlicmVhazsKQEAgLTExNjYsMTkgKzEwNjksMTkgQEAKIAkJCXdsYW5kZXYtPnJ4LmRhdGFfX2NmYWNrX2NmcG9sbCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9GU1RZUEVfTlVMTDoKLQkJCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGRhdGE6bnVsbFxuIik7CisJCQlwcl9kZWJ1ZygicngnZCBkYXRhOm51bGxcbiIpOwogCQkJd2xhbmRldi0+cngubnVsbCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZBQ0s6Ci0JCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmYWNrXG4iKTsKKwkJCXByX2RlYnVnKCJyeCdkIGRhdGE6Y2ZhY2tcbiIpOwogCQkJd2xhbmRldi0+cnguY2ZhY2srKzsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRlNUWVBFX0NGUE9MTDoKLQkJCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGRhdGE6Y2Zwb2xsXG4iKTsKKwkJCXByX2RlYnVnKCJyeCdkIGRhdGE6Y2Zwb2xsXG4iKTsKIAkJCXdsYW5kZXYtPnJ4LmNmcG9sbCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZBQ0tfQ0ZQT0xMOgotCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpjZmFja19jZnBvbGxcbiIpOworCQkJcHJfZGVidWcoInJ4J2QgZGF0YTpjZmFja19jZnBvbGxcbiIpOwogCQkJd2xhbmRldi0+cnguY2ZhY2tfY2Zwb2xsKys7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTExOTIsMTggKzEwOTUsMjAgQEAKIAlyZXR1cm4gZHJvcDsKIH0KIAotc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl90eF90aW1lb3V0KCBuZXRkZXZpY2VfdCAqbmV0ZGV2KQorc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl90eF90aW1lb3V0KG5ldGRldmljZV90ICpuZXRkZXYpCiB7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwotCURCRkVOVEVSOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKIAogCWlmICh3bGFuZGV2LT50eF90aW1lb3V0KSB7CiAJCXdsYW5kZXYtPnR4X3RpbWVvdXQod2xhbmRldik7CiAJfSBlbHNlIHsKLQkJV0xBTl9MT0dfV0FSTklORygiSW1wbGVtZW50IHR4X3RpbWVvdXQgZm9yICVzXG4iLAotCQkJCSB3bGFuZGV2LT5uc2RuYW1lKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW1wbGVtZW50IHR4X3RpbWVvdXQgZm9yICVzXG4iLAorCQkgICAgICAgd2xhbmRldi0+bnNkbmFtZSk7CiAJCW5ldGlmX3dha2VfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKIAl9Cit9CiAKLQlEQkZFWElUOwordm9pZCBwODAyMTFfYWxsb3dfaW9jdGxzKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwltdXRleF91bmxvY2soJndsYW5kZXYtPmlvY3RsX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaAppbmRleCA5NDAxNDZmLi5iOTYwOTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaApAQCAtNTUsMTAgKzU1LDE2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29uc3RhbnRzICovCiAKKyN1bmRlZiBuZXRkZXZpY2VfdAordHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZSBuZXRkZXZpY2VfdDsKKworI2RlZmluZSBXTEFOX1JFTEVBU0UJIjAuMy4wLXN0YWdpbmciCisKICNkZWZpbmUgV0xBTl9ERVZJQ0VfQ0xPU0VECTAKICNkZWZpbmUgV0xBTl9ERVZJQ0VfT1BFTgkxCiAKQEAgLTY4LDggKzc0LDYgQEAKICNkZWZpbmUgV0xBTl9NQUNNT0RFX0VTU19BUAkzCiAKIC8qIE1TRCBTdGF0ZXMgKi8KLSNkZWZpbmUgV0xBTl9NU0RfU1RBUlQJCQktMQotI2RlZmluZSBXTEFOX01TRF9EUklWRVJMT0FERUQJCTAKICNkZWZpbmUgV0xBTl9NU0RfSFdQUkVTRU5UX1BFTkRJTkcJMQogI2RlZmluZSBXTEFOX01TRF9IV0ZBSUwJCQkyCiAjZGVmaW5lIFdMQU5fTVNEX0hXUFJFU0VOVAkJMwpAQCAtNzksNzkgKzgzLDY2IEBACiAjZGVmaW5lIFdMQU5fTVNEX1JVTk5JTkcJCTcKIAogI2lmbmRlZiBFVEhfUF9FQ09ORVQKLSNkZWZpbmUgRVRIX1BfRUNPTkVUICAgMHgwMDE4ICAgIC8qIG5lZWRlZCBmb3IgMi4yLngga2VybmVscyAqLworI2RlZmluZSBFVEhfUF9FQ09ORVQgICAweDAwMTgJLyogbmVlZGVkIGZvciAyLjIueCBrZXJuZWxzICovCiAjZW5kaWYKIAogI2RlZmluZSBFVEhfUF84MDIxMV9SQVcgICAgICAgIChFVEhfUF9FQ09ORVQgKyAxKQogCiAjaWZuZGVmIEFSUEhSRF9JRUVFODAyMTEKLSNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMSA4MDEgICAgIC8qIGtlcm5lbCAyLjQuNiAqLworI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExIDgwMQkvKiBrZXJuZWwgMi40LjYgKi8KICNlbmRpZgogCi0jaWZuZGVmIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gIC8qIGtlcm5lbCAyLjQuMTggKi8KKyNpZm5kZWYgQVJQSFJEX0lFRUU4MDIxMV9QUklTTQkvKiBrZXJuZWwgMi40LjE4ICovCiAjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gODAyCiAjZW5kaWYKIAogLyotLS0gTlNEIENhcGFiaWxpdGllcyBGbGFncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX0hBUkRXQVJFV0VQICAgICAgICAgICAweDAxICAvKiBoYXJkd2FyZSB3ZXAgZW5naW5lICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfVElFRFdFUCAgICAgICAgICAgICAgIDB4MDIgIC8qIGNhbid0IGRlY291cGxlIGVuL2RlICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfTk9IT1NUV0VQICAgICAgICAgICAgIDB4MDQgIC8qIG11c3QgdXNlIGhhcmR3YXJlIHdlcCAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX1BCQ0MgICAgICAgICAgICAgICAgICAweDA4ICAvKiBoYXJkd2FyZSBzdXBwb3J0cyBQQkNDICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfU0hPUlRfUFJFQU1CTEUgICAgICAgIDB4MTAgIC8qIGhhcmR3YXJlIHN1cHBvcnRzICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfQUdJTElUWSAgICAgICAgICAgICAgIDB4MjAgIC8qIGhhcmR3YXJlIHN1cHBvcnRzICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVBfUkVUUkFOU01JVCAgICAgICAgIDB4NDAgIC8qIG5zZCBoYW5kbGVzIHJldHJhbnNtaXRzICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCAgICAgICAgICAgIDB4ODAgIC8qIG5zZCBoYW5kbGVzIGZyYWcvZGVmcmFnICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVVUT0pPSU4gICAgICAgICAgICAgIDB4MTAwICAvKiBuc2QgZG9lcyBhdXRvam9pbiAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX05PU0NBTiAgICAgICAgICAgICAgICAweDIwMCAgLyogbnNkIGNhbiBzY2FuICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfSEFSRFdBUkVXRVAgICAgICAgICAgIDB4MDEJLyogaGFyZHdhcmUgd2VwIGVuZ2luZSAqLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX1NIT1JUX1BSRUFNQkxFICAgICAgICAweDEwCS8qIGhhcmR3YXJlIHN1cHBvcnRzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCAgICAgICAgICAgIDB4ODAJLyogbnNkIGhhbmRsZXMgZnJhZy9kZWZyYWcgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9BVVRPSk9JTiAgICAgICAgICAgICAgMHgxMDAJLyogbnNkIGRvZXMgYXV0b2pvaW4gKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9OT1NDQU4gICAgICAgICAgICAgICAgMHgyMDAJLyogbnNkIGNhbiBzY2FuICovCiAKIC8qIFJlY2VpdmVkIGZyYW1lIHN0YXRpc3RpY3MgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1yeF90Ci17Ci0JdTMyCW1nbXQ7Ci0JdTMyCWFzc29jcmVxOwotCXUzMglhc3NvY3Jlc3A7Ci0JdTMyCXJlYXNzb2NyZXE7Ci0JdTMyCXJlYXNzb2NyZXNwOwotCXUzMglwcm9iZXJlcTsKLQl1MzIJcHJvYmVyZXNwOwotCXUzMgliZWFjb247Ci0JdTMyCWF0aW07Ci0JdTMyCWRpc2Fzc29jOwotCXUzMglhdXRoZW47Ci0JdTMyCWRlYXV0aGVuOwotCXUzMgltZ210X3Vua25vd247Ci0JdTMyCWN0bDsKLQl1MzIJcHNwb2xsOwotCXUzMglydHM7Ci0JdTMyCWN0czsKLQl1MzIJYWNrOwotCXUzMgljZmVuZDsKLQl1MzIJY2ZlbmRjZmFjazsKLQl1MzIJY3RsX3Vua25vd247Ci0JdTMyCWRhdGE7Ci0JdTMyCWRhdGFvbmx5OwotCXUzMglkYXRhX2NmYWNrOwotCXUzMglkYXRhX2NmcG9sbDsKLQl1MzIJZGF0YV9fY2ZhY2tfY2Zwb2xsOwotCXUzMgludWxsOwotCXUzMgljZmFjazsKLQl1MzIJY2Zwb2xsOwotCXUzMgljZmFja19jZnBvbGw7Ci0JdTMyCWRhdGFfdW5rbm93bjsKLQl1MzIgIGRlY3J5cHQ7Ci0JdTMyICBkZWNyeXB0X2VycjsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1yeF90IHsKKwl1MzIgbWdtdDsKKwl1MzIgYXNzb2NyZXE7CisJdTMyIGFzc29jcmVzcDsKKwl1MzIgcmVhc3NvY3JlcTsKKwl1MzIgcmVhc3NvY3Jlc3A7CisJdTMyIHByb2JlcmVxOworCXUzMiBwcm9iZXJlc3A7CisJdTMyIGJlYWNvbjsKKwl1MzIgYXRpbTsKKwl1MzIgZGlzYXNzb2M7CisJdTMyIGF1dGhlbjsKKwl1MzIgZGVhdXRoZW47CisJdTMyIG1nbXRfdW5rbm93bjsKKwl1MzIgY3RsOworCXUzMiBwc3BvbGw7CisJdTMyIHJ0czsKKwl1MzIgY3RzOworCXUzMiBhY2s7CisJdTMyIGNmZW5kOworCXUzMiBjZmVuZGNmYWNrOworCXUzMiBjdGxfdW5rbm93bjsKKwl1MzIgZGF0YTsKKwl1MzIgZGF0YW9ubHk7CisJdTMyIGRhdGFfY2ZhY2s7CisJdTMyIGRhdGFfY2Zwb2xsOworCXUzMiBkYXRhX19jZmFja19jZnBvbGw7CisJdTMyIG51bGw7CisJdTMyIGNmYWNrOworCXUzMiBjZnBvbGw7CisJdTMyIGNmYWNrX2NmcG9sbDsKKwl1MzIgZGF0YV91bmtub3duOworCXUzMiBkZWNyeXB0OworCXUzMiBkZWNyeXB0X2VycjsKIH0gcDgwMjExX2ZybXJ4X3Q7CiAKIC8qIGNhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLXN0cnVjdCBpd19zdGF0aXN0aWNzKiBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqZGV2KTsKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqIGRldik7CiAvKiB3aXJlbGVzcyBleHRlbnNpb25zJyBpb2N0bHMgKi8KLWludCBwODAyMTF3ZXh0X3N1cHBvcnRfaW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwogZXh0ZXJuIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBwODAyMTF3ZXh0X2hhbmRsZXJfZGVmOwogaW50IHA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgaW50IGFzc29jKTsKIApAQCAtMTU5LDk2ICsxNTAsOTkgQEAKICNkZWZpbmUgTlVNX1dFUEtFWVMgNAogI2RlZmluZSBNQVhfS0VZTEVOIDMyCiAKLSNkZWZpbmUgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0sgKEJJVDF8QklUMCkKLSNkZWZpbmUgSE9TVFdFUF9ERUNSWVBUICBCSVQ0Ci0jZGVmaW5lIEhPU1RXRVBfRU5DUllQVCAgQklUNQotI2RlZmluZSBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEIEJJVDYKLSNkZWZpbmUgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgQklUNworI2RlZmluZSBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyAoQklUKDEpfEJJVCgwKSkKKyNkZWZpbmUgSE9TVFdFUF9ERUNSWVBUICBCSVQoNCkKKyNkZWZpbmUgSE9TVFdFUF9FTkNSWVBUICBCSVQoNSkKKyNkZWZpbmUgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCBCSVQoNikKKyNkZWZpbmUgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgQklUKDcpCiAKIGV4dGVybiBpbnQgd2xhbl93YXRjaGRvZzsKIGV4dGVybiBpbnQgd2xhbl93ZXh0X3dyaXRlOwogCiAvKiBXTEFOIGRldmljZSB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuZGV2aWNlCi17Ci0Jc3RydWN0IHdsYW5kZXZpY2UJKm5leHQ7CQkvKiBsaW5rIGZvciBsaXN0IG9mIGRldmljZXMgKi8KLQl2b2lkCQkJKnByaXY7CQkvKiBwcml2YXRlIGRhdGEgZm9yIE1TRCAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbmRldmljZSB7CisJc3RydWN0IHdsYW5kZXZpY2UgKm5leHQ7CS8qIGxpbmsgZm9yIGxpc3Qgb2YgZGV2aWNlcyAqLworCXZvaWQgKnByaXY7CQkvKiBwcml2YXRlIGRhdGEgZm9yIE1TRCAqLwogCiAJLyogU3Vic3lzdGVtIFN0YXRlICovCi0JY2hhcgkJbmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsgLyogRGV2IG5hbWUsIGZyb20gcmVnaXN0ZXJfd2xhbmRldigpKi8KLQljaGFyCQkqbnNkbmFtZTsKKwljaGFyIG5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CS8qIERldiBuYW1lLCBmcm9tIHJlZ2lzdGVyX3dsYW5kZXYoKSAqLworCWNoYXIgKm5zZG5hbWU7CiAKLQl1MzIgICAgICAgICAgc3RhdGU7ICAgICAgICAgIC8qIERldmljZSBJL0Ygc3RhdGUgKG9wZW4vY2xvc2VkKSAqLwotCXUzMgkJbXNkc3RhdGU7CS8qIHN0YXRlIG9mIHVuZGVybHlpbmcgZHJpdmVyICovCi0JdTMyCQlod3JlbW92ZWQ7CS8qIEhhcyB0aGUgaHcgYmVlbiB5YW5rZWQgb3V0PyAqLworCXUzMiBzdGF0ZTsJCS8qIERldmljZSBJL0Ygc3RhdGUgKG9wZW4vY2xvc2VkKSAqLworCXUzMiBtc2RzdGF0ZTsJCS8qIHN0YXRlIG9mIHVuZGVybHlpbmcgZHJpdmVyICovCisJdTMyIGh3cmVtb3ZlZDsJCS8qIEhhcyB0aGUgaHcgYmVlbiB5YW5rZWQgb3V0PyAqLwogCiAJLyogSGFyZHdhcmUgY29uZmlnICovCi0JdW5zaWduZWQgaW50CQlpcnE7Ci0JdW5zaWduZWQgaW50CQlpb2Jhc2U7Ci0JdW5zaWduZWQgaW50CQltZW1iYXNlOwotCXUzMiAgICAgICAgICBuc2RjYXBzOyAgLyogTlNEIENhcGFiaWxpdGllcyBmbGFncyAqLworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgbWVtYmFzZTsKKwl1MzIgbnNkY2FwczsJCS8qIE5TRCBDYXBhYmlsaXRpZXMgZmxhZ3MgKi8KIAogCS8qIENvbmZpZyB2YXJzICovCi0JdW5zaWduZWQgaW50CQlldGhjb252OworCXVuc2lnbmVkIGludCBldGhjb252OwogCiAJLyogZGV2aWNlIG1ldGhvZHMgKGluaXQgYnkgTVNELCB1c2VkIGJ5IHA4MDIxMSAqLwotCWludAkJKCpvcGVuKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7Ci0JaW50CQkoKmNsb3NlKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7Ci0Jdm9pZAkJKCpyZXNldCkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYgKTsKLQlpbnQJCSgqdHhmcmFtZSkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Ci0JaW50CQkoKm1sbWVyZXF1ZXN0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7Ci0JaW50ICAgICAgICAgICAgICgqc2V0X211bHRpY2FzdF9saXN0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwKLQkJCQkJICAgICAgbmV0ZGV2aWNlX3QgKmRldik7Ci0Jdm9pZAkJKCp0eF90aW1lb3V0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50ICgqb3BlbikgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwlpbnQgKCpjbG9zZSkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwl2b2lkICgqcmVzZXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50ICgqdHhmcmFtZSkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CisJaW50ICgqbWxtZXJlcXVlc3QpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CisJaW50ICgqc2V0X211bHRpY2FzdF9saXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsCisJCQkJICAgbmV0ZGV2aWNlX3QgKmRldik7CisJdm9pZCAoKnR4X3RpbWVvdXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CiAKIAkvKiA4MDIuMTEgU3RhdGUgKi8KLQl1OAkJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOwotCXA4MDIxMXBzdHIzMl90CXNzaWQ7Ci0JdTMyCQltYWNtb2RlOwotCWludCAgICAgICAgICAgICBsaW5rc3RhdHVzOworCXU4IGJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlwODAyMTFwc3RyMzJfdCBzc2lkOworCXUzMiBtYWNtb2RlOworCWludCBsaW5rc3RhdHVzOwogCiAJLyogV0VQIFN0YXRlICovCiAJdTggd2VwX2tleXNbTlVNX1dFUEtFWVNdW01BWF9LRVlMRU5dOwogCXU4IHdlcF9rZXlsZW5zW05VTV9XRVBLRVlTXTsKLQlpbnQgICBob3N0d2VwOworCWludCBob3N0d2VwOwogCiAJLyogUmVxdWVzdC9Db25maXJtIGkvZiBzdGF0ZSAodXNlZCBieSBwODAyMTEpICovCi0JdW5zaWduZWQgbG9uZwkJcmVxdWVzdF9wZW5kaW5nOyAvKiBmbGFnLCBhY2Nlc3MgYXRvbWljYWxseSAqLworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdF9wZW5kaW5nOwkvKiBmbGFnLCBhY2Nlc3MgYXRvbWljYWxseSAqLwogCiAJLyogbmV0bGluayBzb2NrZXQgKi8KIAkvKiBxdWV1ZSBmb3IgaW5kaWNhdGlvbnMgd2FpdGluZyBmb3IgY21kIGNvbXBsZXRpb24gKi8KIAkvKiBMaW51eCBuZXRkZXZpY2UgYW5kIHN1cHBvcnQgKi8KLQluZXRkZXZpY2VfdAkJKm5ldGRldjsJLyogcHRyIHRvIGxpbnV4IG5ldGRldmljZSAqLworCW5ldGRldmljZV90ICpuZXRkZXY7CS8qIHB0ciB0byBsaW51eCBuZXRkZXZpY2UgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBsaW51eF9zdGF0czsKIAogCS8qIFJ4IGJvdHRvbSBoYWxmICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CXJ4X2JoOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF9iaDsKIAotCXN0cnVjdCBza19idWZmX2hlYWQJbnNkX3J4cTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG5zZF9yeHE7CiAKIAkvKiA4MDIuMTEgZGV2aWNlIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgcDgwMjExX2ZybXJ4X3QJcng7CisJc3RydWN0IHA4MDIxMV9mcm1yeF90IHJ4OwogCi0Jc3RydWN0IGl3X3N0YXRpc3RpY3MJd3N0YXRzOworCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKIAogCS8qIGprcmllZ2w6IGl3c3B5IGZpZWxkcyAqLwotICAgICAgICB1OAkJCXNweV9udW1iZXI7Ci0gICAgICAgIGNoYXIJCQlzcHlfYWRkcmVzc1tJV19NQVhfU1BZXVtFVEhfQUxFTl07Ci0gICAgICAgIHN0cnVjdCBpd19xdWFsaXR5ICAgICAgIHNweV9zdGF0W0lXX01BWF9TUFldOworCXU4IHNweV9udW1iZXI7CisJY2hhciBzcHlfYWRkcmVzc1tJV19NQVhfU1BZXVtFVEhfQUxFTl07CisJc3RydWN0IGl3X3F1YWxpdHkgc3B5X3N0YXRbSVdfTUFYX1NQWV07CisKKwlzdHJ1Y3QgbXV0ZXggaW9jdGxfbG9jazsKIH0gd2xhbmRldmljZV90OwogCiAvKiBXRVAgc3R1ZmYgKi8KLWludCB3ZXBfY2hhbmdlX2tleSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBrZXludW0sIHU4KiBrZXksIGludCBrZXlsZW4pOwotaW50IHdlcF9kZWNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKmJ1ZiwgdTMyIGxlbiwgaW50IGtleV9vdmVycmlkZSwgdTggKml2LCB1OCAqaWN2KTsKLWludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICpidWYsIHU4ICpkc3QsIHUzMiBsZW4sIGludCBrZXludW0sIHU4ICppdiwgdTggKmljdik7CitpbnQgd2VwX2NoYW5nZV9rZXkod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQga2V5bnVtLCB1OCAqa2V5LCBpbnQga2V5bGVuKTsKK2ludCB3ZXBfZGVjcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICpidWYsIHUzMiBsZW4sIGludCBrZXlfb3ZlcnJpZGUsCisJCXU4ICppdiwgdTggKmljdik7CitpbnQgd2VwX2VuY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqYnVmLCB1OCAqZHN0LCB1MzIgbGVuLCBpbnQga2V5bnVtLAorCQl1OCAqaXYsIHU4ICppY3YpOwogCi12b2lkCXA4MDIxMW5ldGRldl9zdGFydHVwKHZvaWQpOwotdm9pZAlwODAyMTFuZXRkZXZfc2h1dGRvd24odm9pZCk7Ci1pbnQJd2xhbl9zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotaW50CXdsYW5fdW5zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotaW50CXJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLWludAl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXZvaWQJcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkCXA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLQoraW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQgdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkIHA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkIHA4MDIxMV9hbGxvd19pb2N0bHMod2xhbmRldmljZV90ICp3bGFuZGV2KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwppbmRleCA2ZTIwYmZmLi4xNWVjYmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwpAQCAtNTAsMTEgKzUwLDYgQEAKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNjcsMTEgKzYyLDYgQEAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KIAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCi0KICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgogI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKQEAgLTgzLDMwICs3MywxMCBAQAogI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKICNpbmNsdWRlICJwODAyMTFyZXEuaCIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIENvbnN0YW50cyAqLwotCi0vKiBNYXhpbXVtIGFtb3VudCBvZiB0aW1lIHdlJ2xsIHdhaXQgZm9yIGEgcmVxdWVzdCB0byBjb21wbGV0ZSAqLwotI2RlZmluZSBQODAyMTFSRVFfTUFYVElNRQkzKkhaCS8qIDMgc2Vjb25kcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQotc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyggd2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKLXN0YXRpYyBpbnQgcDgwMjExcmVxX21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2csIGludCBpc2dldCk7Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLwotCitzdGF0aWMgdm9pZCBwODAyMTFyZXFfaGFuZGxlbXNnKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CitzdGF0aWMgaW50IHA4MDIxMXJlcV9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2csCisJCQkJICAgaW50IGlzZ2V0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMXJlcV9kb3JlcXVlc3QKQEAgLTEyNCwzMyArOTQsMzAgQEAKICoJUG90ZW50aWFsbHkgYmxvY2tzIHRoZSBjYWxsZXIsIHNvIGl0J3MgYSBnb29kIGlkZWEgdG8KICoJbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgcDgwMjExcmVxX2RvcmVxdWVzdCggd2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqbXNnYnVmKQoraW50IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqbXNnYnVmKQogewotCWludAkJcmVzdWx0ID0gMDsKLQlwODAyMTFtc2dfdAkqbXNnID0gKHA4MDIxMW1zZ190Kiltc2didWY7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlwODAyMTFtc2dfdCAqbXNnID0gKHA4MDIxMW1zZ190ICopIG1zZ2J1ZjsKIAogCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgTVNEIGlzIHJ1bm5pbmcgKi8KLQlpZiAoCi0JISgod2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfSFdQUkVTRU5UICYmCi0JbXNnLT5tc2djb2RlID09IERJRG1zZ19sbnhyZXFfaWZzdGF0ZSkgfHwKLQl3bGFuZGV2LT5tc2RzdGF0ZSA9PSBXTEFOX01TRF9SVU5OSU5HIHx8Ci0Jd2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfRldMT0FEKSApIHsKKwlpZiAoISgod2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfSFdQUkVTRU5UICYmCisJICAgICAgIG1zZy0+bXNnY29kZSA9PSBESURtc2dfbG54cmVxX2lmc3RhdGUpIHx8CisJICAgICAgd2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfUlVOTklORyB8fAorCSAgICAgIHdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0ZXTE9BRCkpIHsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogQ2hlY2sgUGVybWlzc2lvbnMgKi8KLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikgJiYKLQkgICAgKG1zZy0+bXNnY29kZSAhPSBESURtc2dfZG90MTFyZXFfbWliZ2V0KSkgewotCQlXTEFOX0xPR19FUlJPUigiJXM6IG9ubHkgZG90MTFyZXFfbWliZ2V0IGFsbG93ZWQgZm9yIG5vbi1yb290LlxuIiwgd2xhbmRldi0+bmFtZSk7CisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pICYmIChtc2ctPm1zZ2NvZGUgIT0gRElEbXNnX2RvdDExcmVxX21pYmdldCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IG9ubHkgZG90MTFyZXFfbWliZ2V0IGFsbG93ZWQgZm9yIG5vbi1yb290LlxuIiwKKwkJICAgICAgIHdsYW5kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAogCS8qIENoZWNrIGZvciBidXN5IHN0YXR1cyAqLwotCWlmICggdGVzdF9hbmRfc2V0X2JpdCgxLCAmKHdsYW5kZXYtPnJlcXVlc3RfcGVuZGluZykpKSB7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKSkKIAkJcmV0dXJuIC1FQlVTWTsKLQl9CiAKIAkvKiBBbGxvdyBwODAyMTEgdG8gbG9vayBhdCBtc2cgYW5kIGhhbmRsZSBpZiBkZXNpcmVkLiAqLwogCS8qIFNvIGZhciwgYWxsIHA4MDIxMSBtc2dzIGFyZSBpbW1lZGlhdGUsIG5vIHdhaXRxL3RpbWVyIG5lY2Vzc2FyeSAqLwpAQCAtMTU4LDEyICsxMjUsMTEgQEAKIAlwODAyMTFyZXFfaGFuZGxlbXNnKHdsYW5kZXYsIG1zZyk7CiAKIAkvKiBQYXNzIGl0IGRvd24gdG8gd2xhbmRldiB2aWEgd2xhbmRldi0+bWxtZXJlcXVlc3QgKi8KLQlpZiAoIHdsYW5kZXYtPm1sbWVyZXF1ZXN0ICE9IE5VTEwgKQorCWlmICh3bGFuZGV2LT5tbG1lcmVxdWVzdCAhPSBOVUxMKQogCQl3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCBtc2cpOwogCi0JY2xlYXJfYml0KCAxLCAmKHdsYW5kZXYtPnJlcXVlc3RfcGVuZGluZykpOwotCURCRkVYSVQ7Ci0JcmV0dXJuIHJlc3VsdDsJLyogaWYgcmVzdWx0PT0wLCBtc2ctPnN0YXR1cyBzdGlsbCBtYXkgY29udGFpbiBhbiBlcnIgKi8KKwljbGVhcl9iaXQoMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKTsKKwlyZXR1cm4gcmVzdWx0OyAvKiBpZiByZXN1bHQ9PTAsIG1zZy0+c3RhdHVzIHN0aWxsIG1heSBjb250YWluIGFuIGVyciAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4NCwzNCArMTUwLDMyIEBACiAqIENhbGwgY29udGV4dDoKICoJUHJvY2VzcyB0aHJlYWQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyggd2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQorc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCiB7Ci0gICAgICAgIERCRkVOVEVSOwotCiAJc3dpdGNoIChtc2ctPm1zZ2NvZGUpIHsKIAotCWNhc2UgRElEbXNnX2xueHJlcV9ob3N0d2VwOiB7Ci0JCXA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90ICpyZXEgPSAocDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3QqKSBtc2c7Ci0JCXdsYW5kZXYtPmhvc3R3ZXAgJj0gfihIT1NUV0VQX0RFQ1JZUFR8SE9TVFdFUF9FTkNSWVBUKTsKLQkJaWYgKHJlcS0+ZGVjcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKLQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9ERUNSWVBUOwotCQlpZiAocmVxLT5lbmNyeXB0LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQotCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX0VOQ1JZUFQ7CisJY2FzZSBESURtc2dfbG54cmVxX2hvc3R3ZXA6eworCQkJcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3QgKnJlcSA9CisJCQkgICAgKHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90ICopIG1zZzsKKwkJCXdsYW5kZXYtPmhvc3R3ZXAgJj0KKwkJCSAgICB+KEhPU1RXRVBfREVDUllQVCB8IEhPU1RXRVBfRU5DUllQVCk7CisJCQlpZiAocmVxLT5kZWNyeXB0LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9ERUNSWVBUOworCQkJaWYgKHJlcS0+ZW5jcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfRU5DUllQVDsKIAotCQlicmVhazsKLQl9CisJCQlicmVhazsKKwkJfQogCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYmdldDoKLQljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQ6IHsKLQkJaW50IGlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKLQkJcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICAqbWliX21zZyA9IChwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKikgbXNnOwotCQlwODAyMTFyZXFfbWlic2V0X21pYmdldCAod2xhbmRldiwgbWliX21zZywgaXNnZXQpOwotCX0KKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQ6eworCQkJaW50IGlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKKwkJCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqbWliX21zZyA9CisJCQkgICAgKHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqKSBtc2c7CisJCQlwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2LCBtaWJfbXNnLCBpc2dldCk7CisJCX0KIAlkZWZhdWx0OgotCQkvLyBYWFggZG8gbm90aGluZyEKIAkJOwotCX0gLyogc3dpdGNoIG1zZy0+bXNnY29kZSAqLwotCi0JREJGRVhJVDsKKwl9CQkJLyogc3dpdGNoIG1zZy0+bXNnY29kZSAqLwogCiAJcmV0dXJuOwogfQpAQCAtMjIwLDgxICsxODQsODIgQEAKIAkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2csCiAJCQkJICAgaW50IGlzZ2V0KQogewotCXA4MDIxMWl0ZW1kX3QgICAqbWliaXRlbSA9IChwODAyMTFpdGVtZF90ICopIG1pYl9tc2ctPm1pYmF0dHJpYnV0ZS5kYXRhOwotCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBtaWJpdGVtLT5kYXRhOworCXA4MDIxMWl0ZW1kX3QgKm1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtaWJfbXNnLT5taWJhdHRyaWJ1dGUuZGF0YTsKKwlwODAyMTFwc3RyZF90ICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgbWliaXRlbS0+ZGF0YTsKIAl1OCAqa2V5ID0gbWliaXRlbS0+ZGF0YSArIHNpemVvZihwODAyMTFwc3RyZF90KTsKIAotCURCRkVOVEVSOwotCiAJc3dpdGNoIChtaWJpdGVtLT5kaWQpIHsKLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDogewotCQlpZiAoIWlzZ2V0KQotCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMCwga2V5LCBwc3RyLT5sZW4pOwotCQlicmVhazsKLQl9Ci0JY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE6IHsKLQkJaWYgKCFpc2dldCkKLQkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDEsIGtleSwgcHN0ci0+bGVuKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOiB7Ci0JCWlmICghaXNnZXQpCi0JCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAyLCBrZXksIHBzdHItPmxlbik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MzogewotCQlpZiAoIWlzZ2V0KQotCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMywga2V5LCBwc3RyLT5sZW4pOwotCQlicmVhazsKLQl9Ci0JY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQ6IHsKLQkJdTMyICpkYXRhID0gKHUzMiAqKSBtaWJpdGVtLT5kYXRhOworCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOnsKKwkJCWlmICghaXNnZXQpCisJCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMCwga2V5LCBwc3RyLT5sZW4pOworCQkJYnJlYWs7CisJCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTp7CisJCQlpZiAoIWlzZ2V0KQorCQkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDEsIGtleSwgcHN0ci0+bGVuKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI6eworCQkJaWYgKCFpc2dldCkKKwkJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAyLCBrZXksIHBzdHItPmxlbik7CisJCQlicmVhazsKKwkJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOnsKKwkJCWlmICghaXNnZXQpCisJCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMywga2V5LCBwc3RyLT5sZW4pOworCQkJYnJlYWs7CisJCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRDp7CisJCQl1MzIgKmRhdGEgPSAodTMyICopIG1pYml0ZW0tPmRhdGE7CiAKLQkJaWYgKGlzZ2V0KSB7Ci0JCQkqZGF0YSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSzsKKwkJCWlmIChpc2dldCkgeworCQkJCSpkYXRhID0KKwkJCQkgICAgd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOwogCQkJfSBlbHNlIHsKIAkJCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spOwogCi0JCQkJd2xhbmRldi0+aG9zdHdlcCB8PSAoKmRhdGEgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyk7CisJCQkJd2xhbmRldi0+aG9zdHdlcCB8PQorCQkJCSAgICAoKmRhdGEgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyk7CiAJCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkOiB7Ci0JCXUzMiAqZGF0YSA9ICh1MzIgKikgbWliaXRlbS0+ZGF0YTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZDp7CisJCQl1MzIgKmRhdGEgPSAodTMyICopIG1pYml0ZW0tPmRhdGE7CiAKLQkJaWYgKGlzZ2V0KSB7Ci0JCQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpCi0JCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7Ci0JCQllbHNlCi0JCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOwotCQl9IGVsc2UgeworCQkJaWYgKGlzZ2V0KSB7CisJCQkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKQorCQkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwkJCQllbHNlCisJCQkJCSpkYXRhID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwkJCX0gZWxzZSB7CiAJCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpOwogCQkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCi0JCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9QUklWQUNZSU5WT0tFRDsKKwkJCQkJd2xhbmRldi0+aG9zdHdlcCB8PQorCQkJCQkgICAgSE9TVFdFUF9QUklWQUNZSU5WT0tFRDsKKwkJCX0KKwkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZDogewotCQl1MzIgKmRhdGEgPSAodTMyICopIG1pYml0ZW0tPmRhdGE7CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQ6eworCQkJdTMyICpkYXRhID0gKHUzMiAqKSBtaWJpdGVtLT5kYXRhOwogCi0JCWlmIChpc2dldCkgewotCQkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkKLQkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKLQkJCWVsc2UKLQkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpOwotCQkJaWYgKCpkYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKLQkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEOworCQkJaWYgKGlzZ2V0KSB7CisJCQkJaWYgKHdsYW5kZXYtPgorCQkJCSAgICBob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpCisJCQkJCSpkYXRhID0gUDgwMjExRU5VTV90cnV0aF90cnVlOworCQkJCWVsc2UKKwkJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQl3bGFuZGV2LT5ob3N0d2VwICY9CisJCQkJICAgIH4oSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpOworCQkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0KKwkJCQkJICAgIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEOworCQkJfQorCQkJYnJlYWs7CiAJCX0KLQkJYnJlYWs7Ci0JfQogCWRlZmF1bHQ6Ci0JCS8vIFhYWFggZG8gbm90aGluZyEKIAkJOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKaW5kZXggNDk3YTRkNi4uYTk1YTQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKQEAgLTQ4LDIxICs0OCw2IEBACiAjaWZuZGVmIF9MSU5VWF9QODAyMTFSRVFfSAogI2RlZmluZSBfTElOVVhfUDgwMjExUkVRX0gKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRXh0ZXJucyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLWludAlwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKm1zZ2J1Zik7CitpbnQgcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICptc2didWYpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCmluZGV4IDViZTY3MzcuLmEyMjQzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaApAQCAtNTgsMzcgKzU4LDkgQEAKICNkZWZpbmUgX1A4MDIxMVRZUEVTX0gKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBwODAyMTEgZGF0YSB0eXBlIGNvZGVzIHVzZWQgZm9yIE1JQiBpdGVtcyBhbmQgbWVzc2FnZSAqLwotLyogYXJndW1lbnRzLiBUaGUgdmFyaW91cyBtZXRhZGF0YSBzdHJ1Y3R1cmVzIHByb3ZpZGUgYWRkaXRpb25hbCAqLwotLyogaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMuICovCi0KLSNkZWZpbmUgUDgwMjExX1RZUEVfT0NURVRTVFIJCTEJLyogcGFzY2FsIGFycmF5IG9mIGJ5dGVzICovCi0jZGVmaW5lIFA4MDIxMV9UWVBFX0RJU1BMQVlTVFIJCTIJLyogcGFzY2FsIGFycmF5IG9mIGJ5dGVzIGNvbnRhaW5pbmcgYXNjaWkgKi8KLSNkZWZpbmUgUDgwMjExX1RZUEVfaW50CQkJNAkvKiB1MzIgbWluIGFuZCBtYXggbGltaXRlZCBieSAzMiBiaXRzICovCi0jZGVmaW5lIFA4MDIxMV9UWVBFX0VOVU1pbnQJCTUJLyogdTMyIGhvbGRpbmcgYSBudW1lcmljCi0JCQkJCQkgICBjb2RlIHRoYXQgY2FuIGJlIG1hcHBlZAotCQkJCQkJICAgdG8gYSB0ZXh0dWFsIG5hbWUgKi8KLSNkZWZpbmUgUDgwMjExX1RZUEVfVU5LREFUQQkJNgkvKiBEYXRhIGl0ZW0gY29udGFpbmluZyBhbgotCQkJCQkJICAgdW5rbm93biBkYXRhIHR5cGUgKi8KLSNkZWZpbmUgUDgwMjExX1RZUEVfaW50QVJSQVkJCTcJLyogQXJyYXkgb2YgMzItYml0IGludGVnZXJzLiAqLwotI2RlZmluZSBQODAyMTFfVFlQRV9CSVRBUlJBWQkJOAkvKiBBcnJheSBvZiBiaXRzLiAqLwotI2RlZmluZSBQODAyMTFfVFlQRV9NQUNBUlJBWQkJOQkvKiBBcnJheSBvZiBNQUMgYWRkcmVzc2VzLiAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGluZGV4ZXMgaW50byB0aGUgTWliIENhdGVnb3J5IExpc3QgKi8KQEAgLTEwNiwyNSArNzgsNiBAQAogLyogTWVzc2FnZSBDYXRlZ29yeSBMaXN0ICovCiAjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExUkVRCQkxCiAjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExSU5ECQkyCi0vKiAjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExQ0ZNCQkzIChkb2Vzbid0IGV4aXN0IGF0IHRoaXMgdGltZSkgKi8KLQotI2RlZmluZSBQODAyMTFTRUNfRE9UMTFSRVEJCVA4MDIxMV9NU0dfQ0FUX0RPVDExUkVRCi0jZGVmaW5lIFA4MDIxMVNFQ19ET1QxMUlORAkJUDgwMjExX01TR19DQVRfRE9UMTFJTkQKLS8qICNkZWZpbmUgUDgwMjExU0VDX0RPVDExQ0ZNCQlQODAyMTFfTVNHX0NBVF9ET1QxMUNGTSAgKGRvZXNuJ3QgZXhpc3QgYXQgdGhpcyB0aW1lICovCi0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogcDgwMjExIERJRCBmaWVsZCBjb2RlcyB0aGF0IHJlcHJlc2VudCBhY2Nlc3MgdHlwZSBhbmQgKi8KLS8qIGlzX3RhYmxlIHN0YXR1cy4gKi8KLQotI2RlZmluZSBQODAyMTFESURfQUNDRVNTX1JFQUQJCTB4MTAwMDAwMDAKLSNkZWZpbmUgUDgwMjExRElEX0FDQ0VTU19XUklURQkJMHgwODAwMDAwMAotI2RlZmluZSBQODAyMTFESURfV1JJVEVPTkxZCQkweDAwMDAwMDAxCi0jZGVmaW5lIFA4MDIxMURJRF9SRUFET05MWQkJMHgwMDAwMDAwMgotI2RlZmluZSBQODAyMTFESURfUkVBRFdSSVRFCQkweDAwMDAwMDAzCi0jZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFX0ZBTFNFCQkwCi0jZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFX1RSVUUJCTEKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIHA4MDIxMSBlbnVtZXJhdGlvbiBjb25zdGFudHMuICBUaGUgdmFsdWUgdG8gdGV4dCBtYXBwaW5ncyBmb3IgKi8KQEAgLTEzMiwxMDQgKzg1LDMwIEBACiAvKiAgZnJvbSB0aGUgbWFwcGluZ3MuICovCiAKIC8qIGVycm9yIGNvZGVzIGZvciBsb29rdXBzICovCi0jZGVmaW5lIFA4MDIxMUVOVU1fQkFECQkJCTB4ZmZmZmZmZmZVTAotI2RlZmluZSBQODAyMTFFTlVNX0JBRFNUUgkJCSJQODAyMTFFTlVNX0JBRCIKIAogI2RlZmluZSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlCQkJMAogI2RlZmluZSBQODAyMTFFTlVNX3RydXRoX3RydWUJCQkxCiAjZGVmaW5lIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlCQkwCiAjZGVmaW5lIFA4MDIxMUVOVU1faWZzdGF0ZV9md2xvYWQJCTEKICNkZWZpbmUgUDgwMjExRU5VTV9pZnN0YXRlX2VuYWJsZQkJMgotI2RlZmluZSBQODAyMTFFTlVNX3Bvd2VybWdtdF9hY3RpdmUJCTEKLSNkZWZpbmUgUDgwMjExRU5VTV9wb3dlcm1nbXRfcG93ZXJzYXZlCQkyCiAjZGVmaW5lIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZQkxCiAjZGVmaW5lIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudAkJMgogI2RlZmluZSBQODAyMTFFTlVNX2Jzc3R5cGVfYW55CQkJMwogI2RlZmluZSBQODAyMTFFTlVNX2F1dGhhbGdfb3BlbnN5c3RlbQkJMQogI2RlZmluZSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5CQkyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcGh5dHlwZV9maHNzCQkJMQotI2RlZmluZSBQODAyMTFFTlVNX3BoeXR5cGVfZHNzcwkJCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9waHl0eXBlX2lyYmFzZWJhbmQJCTMKLSNkZWZpbmUgUDgwMjExRU5VTV90ZW1wdHlwZV9jb21tZXJjaWFsCQkxCi0jZGVmaW5lIFA4MDIxMUVOVU1fdGVtcHR5cGVfaW5kdXN0cmlhbAkJMgotI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9mY2MJCTE2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2RvYwkJMzIKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZXRzaQkJNDgKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fc3BhaW4JCTQ5Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2ZyYW5jZQkJNTAKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fbWtrCQk2NAotI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfZWRvbmx5CQkxCi0jZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9jc29ubHkJCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2VkYW5kY3MJCTQKLSNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2Nzd2l0aHRpbWVyCQk4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9ocmNzYW5kZWQJCTE2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fZGl2ZXJzaXR5X2ZpeGVkbGlzdAkJMQotI2RlZmluZSBQODAyMTFFTlVNX2RpdmVyc2l0eV9ub3RzdXBwb3J0ZWQJMgotI2RlZmluZSBQODAyMTFFTlVNX2RpdmVyc2l0eV9keW5hbWljCQkzCiAjZGVmaW5lIFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlCQkxCi0jZGVmaW5lIFA4MDIxMUVOVU1fc2NhbnR5cGVfcGFzc2l2ZQkJMgotI2RlZmluZSBQODAyMTFFTlVNX3NjYW50eXBlX2JvdGgJCTMKICNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MJCTEKICNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVycwkyCiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkCTMKLSNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3RpbWVvdXQJCTQKLSNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3Rvb19tYW55X3JlcQk1CiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkCQk2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ic3NfYWxyZWFkeQk3Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX2FjY2Vzcwk4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX21pYmF0dHJpYnV0ZQk5CiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9jYW50X3NldF9yZWFkb25seV9taWIJMTAKICNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmUJMTEKICNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfZ2V0X3dyaXRlb25seV9taWIJMTIKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fdW5zcGVjX3JlYXNvbgkJMQotI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9hdXRoX25vdF92YWxpZAkyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2RlYXV0aF9sdl9zcwkJMwotI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9pbmFjdGl2aXR5CQk0Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2FwX292ZXJsb2FkCQk1Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2NsYXNzMjNfZXJyCQk2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2NsYXNzM19lcnIJCTcKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fZGlzYXNfbHZfc3MJCTgKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fYXNvY19ub3RfYXV0aAkJOQogI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsCQkwCiAjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3BlY19mYWlsdXJlCTEKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfY2FwCQkxMAotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19yZWFzb2Nfbm9fYXNvYwkxMQotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19mYWlsX290aGVyCQkxMgotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnNwdF9hbGcJCTEzCi0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2F1dGhfc2VxX2ZhaWwJCTE0Ci0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2NobG5nX2ZhaWwJCTE1Ci0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2F1dGhfdGltZW91dAkJMTYKICNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfYXBfZnVsbAkJMTcKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfcmF0ZQkJMTgKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfc2hvcnRwcmVhbWJsZQkxOQotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9wYmNjCQkyMAotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9hZ2lsaXR5CQkyMQogI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sJCTAKICNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZQkJMQotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfaXRlbW5hbWUJMgotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfaXRlbWRhdGEJMwotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX21pc3NpbmdfaXRlbWRhdGEJNAotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2luY29tcGxldGVfaXRlbWRhdGEJNQotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfbXNnX2RpZAk2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9taWJfZGlkCTcKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX2NvbnZfZnVuYwk4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfc3RyaW5nX3Rvb19sb25nCTkKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX291dF9vZl9yYW5nZQkxMAotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX3N0cmluZ190b29fc2hvcnQJMTEKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX3ZhbGlkX2Z1bmMJMTIKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c191bmtub3duCQkxMwotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfZGlkCQkxNAotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX21pc3NpbmdfcHJpbnRfZnVuYwkxNQotCi0jZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fdW5rbm93biAgICAgICAgMAotI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX2JlYWNvbiAgICAgICAgIDEKLSNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl9zaWduYWwgICAgICAgICAyCi0jZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fdHhyZXRyeSAgICAgICAgMwotI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX25vdGpvaW5lZCAgICAgIDQKLQotI2RlZmluZSBQODAyMTFFTlVNX3AycHJlYW1ibGVfbG9uZyAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUDgwMjExRU5VTV9wMnByZWFtYmxlX3Nob3J0ICAgICAgICAgICAgICAyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcDJwcmVhbWJsZV9taXhlZCAgICAgICAgICAgICAgMwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogcDgwMjExIG1heCBsZW5ndGggY29uc3RhbnRzIGZvciB0aGUgZGlmZmVyZW50IHBhc2NhbCBzdHJpbmdzLiAqLwpAQCAtMjQzLDQ2ICsxMjIsNiBAQAogCQkJCQkvKiBpcyBhIERJRC1MRU4tREFUQSB0cmlwbGUgKi8KIAkJCQkJLyogd2l0aCBhIG1heCBzaXplIG9mIDQrNCszODQgKi8KIAotI2RlZmluZSBQODAyMTFfU0VUX2ludChpdGVtLCB2YWx1ZSkgZG8geyBcCi0JKGl0ZW0pLmRhdGEgICA9ICh2YWx1ZSk7IFwKLQkoaXRlbSkuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOyBcCi0JfSB3aGlsZSgwKQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHN0cmluZyBjb25zdGFudHMgKi8KLQotI2RlZmluZSBOT1RfU0VUCQkJIk5PVF9TRVQiCi0jZGVmaW5lIE5PVF9TVVBQT1JURUQJCSJOT1RfU1VQUE9SVEVEIgotI2RlZmluZSBVTktOT1dOX0RBVEEJCSJVTktOT1dOX0RBVEEiCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAgTWV0YWRhdGEgZmxhZ3MgICovCi0KLS8qIE1TTTogRG8gdGhlc2UgYmVsb25nIGluIHA4MDIxMW1ldGEuaD8gSSdtIG5vdCBzdXJlLiAqLwotCi0jZGVmaW5lIElTUkVRVUlSRUQJCSgweDgwMDAwMDAwVUwpCi0jZGVmaW5lIElTUkVRVUVTVAkJKDB4NDAwMDAwMDBVTCkKLSNkZWZpbmUgSVNDT05GSVJNCQkoMHgyMDAwMDAwMFVMKQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSAnZmxhZ3MnIGZpZWxkIGluICAgKi8KLS8qICB0aGUgbWV0YWRhdGEuICBUaGVzZSBhcmUgb25seSB1c2VkIHdoZW4gdGhlIG1ldGFkYXRhIGlzIGZvciAgICAgICAqLwotLyogIGNvbW1hbmQgYXJndW1lbnRzIHRvIGRldGVybWluZSBpZiB0aGUgZGF0YSBpdGVtIGlzIHJlcXVpcmVkLCBhbmQgICovCi0vKiAgd2hldGhlciB0aGUgbWV0YWRhdGEgaXRlbSBpcyBmb3IgYSByZXF1ZXN0IGNvbW1hbmQsIGNvbmZpcm0gICAgICAgKi8KLS8qICBjb21tYW5kIG9yIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBNU006IERvIHRoZXNlIGJlbG9uZyBpbiBwODAyMTFtZXRhLmg/ICBJJ20gbm90IHN1cmUgKi8KLQotI2RlZmluZSBQODAyMTFJVEVNX1NFVEZMQUdTKHEsIHIsIGMpCSggcSB8IHIgfCBjICkKLQotI2RlZmluZSBQODAyMTFJVEVNX0lTUkVRVUlSRUQoZmxhZ3MpCSgoKHUzMikoZmxhZ3MgJiBJU1JFUVVJUkVEKSkgPj4gMzEgKQotI2RlZmluZSBQODAyMTFJVEVNX0lTUkVRVUVTVChmbGFncykJKCgodTMyKShmbGFncyAmIElTUkVRVUVTVCkpID4+IDMwICkKLSNkZWZpbmUgUDgwMjExSVRFTV9JU0NPTkZJUk0oZmxhZ3MpCSgoKHUzMikoZmxhZ3MgJiBJU0NPTkZJUk0pKSA+PiAyOSApCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBUaGUgZm9sbG93aW5nIG1hY3JvIGNyZWF0ZXMgYSBuYW1lIGZvciBhbiBlbnVtICovCiAKQEAgLTMwMiw5ICsxNDEsNiBAQAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIC0gVW51c2VkCiAqLwogCi0jZGVmaW5lIFA4MDIxMURJRF9JTlZBTElECQkweGZmZmZmZmZmVUwKLSNkZWZpbmUgUDgwMjExRElEX1ZBTElECQkJMHgwMDAwMDAwMFVMCi0KICNkZWZpbmUgUDgwMjExRElEX0xTQl9TRUNUSU9OCQkoMCkKICNkZWZpbmUgUDgwMjExRElEX0xTQl9HUk9VUAkJKDYpCiAjZGVmaW5lIFA4MDIxMURJRF9MU0JfSVRFTQkJKDEyKQpAQCAtMzE5LDM1ICsxNTUsMzIgQEAKICNkZWZpbmUgUDgwMjExRElEX01BU0tfSVNUQUJMRQkJKDB4MDAwMDAwMDFVTCkKICNkZWZpbmUgUDgwMjExRElEX01BU0tfQUNDRVNTIAkJKDB4MDAwMDAwMDNVTCkKIAotCi0jZGVmaW5lIFA4MDIxMURJRF9NSyhhLG0sbCkJKCgoKHUzMikoYSkpICYgKG0pKSA8PCAobCkpCisjZGVmaW5lIFA4MDIxMURJRF9NSyhhLCBtLCBsKQkoKCgodTMyKShhKSkgJiAobSkpIDw8IChsKSkKIAogI2RlZmluZSBQODAyMTFESURfTUtTRUNUSU9OKGEpCVA4MDIxMURJRF9NSyhhLCBcCiAJCQkJCVA4MDIxMURJRF9NQVNLX1NFQ1RJT04sIFwKLQkJCQkJUDgwMjExRElEX0xTQl9TRUNUSU9OICkKKwkJCQkJUDgwMjExRElEX0xTQl9TRUNUSU9OKQogI2RlZmluZSBQODAyMTFESURfTUtHUk9VUChhKQlQODAyMTFESURfTUsoYSwgXAogCQkJCQlQODAyMTFESURfTUFTS19HUk9VUCwgXAotCQkJCQlQODAyMTFESURfTFNCX0dST1VQICkKKwkJCQkJUDgwMjExRElEX0xTQl9HUk9VUCkKICNkZWZpbmUgUDgwMjExRElEX01LSVRFTShhKQlQODAyMTFESURfTUsoYSwgXAogCQkJCQlQODAyMTFESURfTUFTS19JVEVNLCBcCi0JCQkJCVA4MDIxMURJRF9MU0JfSVRFTSApCisJCQkJCVA4MDIxMURJRF9MU0JfSVRFTSkKICNkZWZpbmUgUDgwMjExRElEX01LSU5ERVgoYSkJUDgwMjExRElEX01LKGEsIFwKIAkJCQkJUDgwMjExRElEX01BU0tfSU5ERVgsIFwKLQkJCQkJUDgwMjExRElEX0xTQl9JTkRFWCApCisJCQkJCVA4MDIxMURJRF9MU0JfSU5ERVgpCiAjZGVmaW5lIFA4MDIxMURJRF9NS0lTVEFCTEUoYSkJUDgwMjExRElEX01LKGEsIFwKIAkJCQkJUDgwMjExRElEX01BU0tfSVNUQUJMRSwgXAotCQkJCQlQODAyMTFESURfTFNCX0lTVEFCTEUgKQotCisJCQkJCVA4MDIxMURJRF9MU0JfSVNUQUJMRSkKIAogI2RlZmluZSBQODAyMTFESURfTUtJRChzLGcsaSxuLHQsYSkJKFA4MDIxMURJRF9NS1NFQ1RJT04ocykgfCBcCiAJCQkJCQlQODAyMTFESURfTUtHUk9VUChnKSB8IFwKIAkJCQkgCQlQODAyMTFESURfTUtJVEVNKGkpIHwgXAogCQkJCSAJCVA4MDIxMURJRF9NS0lOREVYKG4pIHwgXAogCQkJCQkJUDgwMjExRElEX01LSVNUQUJMRSh0KSB8IFwKLQkJCQkJCShhKSApCisJCQkJCQkoYSkpCiAKLQotI2RlZmluZSBQODAyMTFESURfR0VUKGEsbSxsKQkoKCgodTMyKShhKSkgPj4gKGwpKSAmIChtKSkKKyNkZWZpbmUgUDgwMjExRElEX0dFVChhLCBtLCBsKQkoKCgodTMyKShhKSkgPj4gKGwpKSAmIChtKSkKIAogI2RlZmluZSBQODAyMTFESURfU0VDVElPTihhKQlQODAyMTFESURfR0VUKGEsIFwKIAkJCQkJUDgwMjExRElEX01BU0tfU0VDVElPTiwgXApAQCAtMzY4LDIzICsyMDEsMTggQEAKIAkJCQkJUDgwMjExRElEX01BU0tfQUNDRVNTLCBcCiAJCQkJCVA4MDIxMURJRF9MU0JfQUNDRVNTKQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogVHlwZXMgKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGVzIGFyZSB1c2VkIGZvciB0aGUgcmVwcmVzZW5hdGlvbiAqLwogLyogIG9mIEVOVU1pbnQgdHlwZSBtZXRhZGF0YS4gKi8KIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bXBhaXIKLXsKLQl1MzIJCQl2YWw7Ci0JY2hhcgkJCSpuYW1lOwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bXBhaXIgeworCXUzMiB2YWw7CisJY2hhciAqbmFtZTsKIH0gcDgwMjExZW51bXBhaXJfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bQotewotCWludAkJCW5pdGVtczsKLQlwODAyMTFlbnVtcGFpcl90CSpsaXN0OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bSB7CisJaW50IG5pdGVtczsKKwlwODAyMTFlbnVtcGFpcl90ICpsaXN0OwogfSBwODAyMTFlbnVtX3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zOTIsMTQwICsyMjAsMTIzIEBACiAvKiAgbWVzc2FnZXMuICovCiAKIC8qIFRlbXBsYXRlIHBhc2NhbCBzdHJpbmcgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIKLXsKLQl1OAkJbGVuOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyIHsKKwl1OCBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFwc3RyX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHJkCi17Ci0JdTgJCWxlbjsKLQl1OAkJZGF0YVswXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cmRfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHJkIHsKKwl1OCBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMXBzdHJkX3Q7CiAKIC8qIE1heGltdW0gcGFzY2FsIHN0cmluZyAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjI1NQotewotCXU4CQlsZW47Ci0JdTgJCWRhdGFbTUFYTEVOX1BTVFIyNTVdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyMjU1X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMjU1IHsKKwl1OCBsZW47CisJdTggZGF0YVtNQVhMRU5fUFNUUjI1NV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFwc3RyMjU1X3Q7CiAKIC8qIHBhc2NhbCBzdHJpbmcgZm9yIG1hY2FkZHJlc3MgYW5kIGJzc2lkICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyNgotewotCXU4CQlsZW47Ci0JdTgJCWRhdGFbTUFYTEVOX1BTVFI2XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjZfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHI2IHsKKwl1OCBsZW47CisJdTggZGF0YVtNQVhMRU5fUFNUUjZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExcHN0cjZfdDsKIAogLyogcGFzY2FsIHN0cmluZyBmb3IgY2hhbm5lbCBsaXN0ICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMTQKLXsKLQl1OAkJbGVuOwotCXU4CQlkYXRhW01BWExFTl9QU1RSMTRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyMTRfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIxNCB7CisJdTggbGVuOworCXU4IGRhdGFbTUFYTEVOX1BTVFIxNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFwc3RyMTRfdDsKIAogLyogcGFzY2FsIHN0cmluZyBmb3Igc3NpZCAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjMyCi17Ci0JdTgJCWxlbjsKLQl1OAkJZGF0YVtNQVhMRU5fUFNUUjMyXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjMyX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMzIgeworCXU4IGxlbjsKKwl1OCBkYXRhW01BWExFTl9QU1RSMzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExcHN0cjMyX3Q7CiAKIC8qIE1BQyBhZGRyZXNzIGFycmF5ICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtYWNhcnJheQotewotCXUzMgkJY250OwotCXU4CQlkYXRhWzFdW01BWExFTl9QU1RSNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1hY2FycmF5X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtYWNhcnJheSB7CisJdTMyIGNudDsKKwl1OCBkYXRhWzFdW01BWExFTl9QU1RSNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtYWNhcnJheV90OwogCiAvKiBwcm90b3R5cGUgdGVtcGxhdGUgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW0KLXsKLQl1MzIJCWRpZDsKLQl1MTYJCXN0YXR1czsKLQl1MTYJCWxlbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbSB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3Q7CiAKIC8qIHByb3RvdHlwZSB0ZW1wbGF0ZSB3LyBkYXRhIGl0ZW0gKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1kCi17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JdTgJCWRhdGFbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1kX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtZCB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWl0ZW1kX3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBpbnQsIEJPVU5ERURJTlQsIEVOVU1JTlQgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdWludDMyCi17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JdTMyCQlkYXRhOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VpbnQzMl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV91aW50MzIgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXUzMiBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV91aW50MzJfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHI2Ci17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JcDgwMjExcHN0cjZfdAlkYXRhOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHI2X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHI2IHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwlwODAyMTFwc3RyNl90IGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3BzdHI2X3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBPQ1RFVFNUUiwgRElTUExBWVNUUiAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMTQKLXsKLQl1MzIJCQlkaWQ7Ci0JdTE2CQkJc3RhdHVzOwotCXUxNgkJCWxlbjsKLQlwODAyMTFwc3RyMTRfdAkJZGF0YTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMTRfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjE0IHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwlwODAyMTFwc3RyMTRfdCBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV9wc3RyMTRfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIzMgotewotCXUzMgkJCWRpZDsKLQl1MTYJCQlzdGF0dXM7Ci0JdTE2CQkJbGVuOwotCXA4MDIxMXBzdHIzMl90CQlkYXRhOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHIzMl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMzIgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXA4MDIxMXBzdHIzMl90IGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3BzdHIzMl90OwogCiAvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjI1NQotewotCXUzMgkJCWRpZDsKLQl1MTYJCQlzdGF0dXM7Ci0JdTE2CQkJbGVuOwotCXA4MDIxMXBzdHIyNTVfdAkJZGF0YTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMjU1X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIyNTUgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXA4MDIxMXBzdHIyNTVfdCBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV9wc3RyMjU1X3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBVTksgMzkyLCBuYW1lbHkgbWliIGl0ZW1zICovCi10eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bmszOTIKLXsKLQl1MzIJCWRpZDsKLQl1MTYJCXN0YXR1czsKLQl1MTYJCWxlbjsKLQl1OAkJZGF0YVtNQVhMRU5fTUlCQVRUUklCVVRFXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bmszOTJfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdW5rMzkyIHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwl1OCBkYXRhW01BWExFTl9NSUJBVFRSSUJVVEVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV91bmszOTJfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyAxMDI1LCBuYW1lbHkgcDIgcGRhcyAqLwotdHlwZWRlZiBzdHJ1Y3QgIHA4MDIxMWl0ZW1fdW5rMTAyNAotewotCXUzMgkJZGlkOwotCXUxNgkJc3RhdHVzOwotCXUxNgkJbGVuOwotCXU4CQlkYXRhWzEwMjRdOwotfSAgX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bmsxMDI0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3VuazEwMjQgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXU4IGRhdGFbMTAyNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3VuazEwMjRfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyA0MDk2LCBuYW1lbHkgcDIgZG93bmxvYWQgY2h1bmtzICovCi10eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bms0MDk2Ci17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JdTgJCWRhdGFbNDA5Nl07Ci19ICBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VuazQwOTZfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdW5rNDA5NiB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47CisJdTggZGF0YVs0MDk2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWl0ZW1fdW5rNDA5Nl90OwogCiBzdHJ1Y3QgY2F0bGlzdGl0ZW07CiAKQEAgLTUzNCwxMyArMzQ1LDExIEBACiAvKiAgbWV0YWRhdGEgaXRlbXMuICBTb21lIGNvbXBvbmVudHMgbWF5IGNob29zZSB0byB1c2UgbW9yZSwgKi8KIC8qICBsZXNzIG9yIGRpZmZlcmVudCBtZXRhZGF0YSBpdGVtcy4gKi8KIAotdHlwZWRlZiB2b2lkICgqcDgwMjExX3RvdGV4dF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4KiBpdGVtYnVmLCBjaGFyICp0ZXh0YnVmKTsKLXR5cGVkZWYgdm9pZCAoKnA4MDIxMV9mcm9tdGV4dF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4KiBpdGVtYnVmLCBjaGFyICp0ZXh0YnVmKTsKLXR5cGVkZWYgdTMyICgqcDgwMjExX3ZhbGlkX3QpKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTgqIGl0ZW1idWYpOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCit0eXBlZGVmIHZvaWQgKCpwODAyMTFfdG90ZXh0X3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKml0ZW1idWYsCisJCQkJIGNoYXIgKnRleHRidWYpOwordHlwZWRlZiB2b2lkICgqcDgwMjExX2Zyb210ZXh0X3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKml0ZW1idWYsCisJCQkJICAgY2hhciAqdGV4dGJ1Zik7Cit0eXBlZGVmIHUzMigqcDgwMjExX3ZhbGlkX3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKml0ZW1idWYpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRW51bWVyYXRpb24gTGlzdHMgKi8KQEAgLTU2OCwxMDggKzM3Nyw0IEBACiAKIGV4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShwMnByZWFtYmxlKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSAqLwotLyogIHA4MDIxMWVudW1fdCB0eXBlLiAqLwotCi11MzIgcDgwMjExZW51bV90ZXh0MmludChwODAyMTFlbnVtX3QgKmVwLCBjaGFyICp0ZXh0KTsKLXUzMiBwODAyMTFlbnVtX2ludDJ0ZXh0KHA4MDIxMWVudW1fdCAqZXAsIHUzMiB2YWwsIGNoYXIgKnRleHQpOwotdm9pZCBwODAyMTFfZXJyb3IydGV4dChpbnQgZXJyX2NvZGUsIGNoYXIgKmVycl9zdHIpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSAqLwotLyogIHA4MDIxMWl0ZW1fdCBhbmQgcDgwMjExbWV0YV90IHR5cGVzLiAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gdmFsaWRhdGlvbiBhbmQgICAgKi8KLS8qIHRleHQgdG8gYmluYXJ5IGNvbnZlcnNpb25zIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBmb3IgaW50ZXJmYWNlICovCi0vKiBhbmQgTUlCIGRhdGEgaXRlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLSBESVNQTEFZU1RSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBwc3RyID09PiBjc3RyICovCi12b2lkIHA4MDIxMV90b3RleHRfZGlzcGxheXN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogY3N0ciA9PT4gcHN0ciAqLwotdm9pZCBwODAyMTFfZnJvbXRleHRfZGlzcGxheXN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBkaXNwbGF5c3RyIGJpbmFyeSB2YWx1ZSAqLwotdTMyIHA4MDIxMV9pc3ZhbGlkX2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gT0NURVRTVFIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogcHN0ciA9PT4gInh4Onh4Oi4uLi4iICovCi12b2lkIHA4MDIxMV90b3RleHRfb2N0ZXRzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qICJ4eDp4eDouLi4uIiA9PT4gcHN0ciAqLwotdm9pZCBwODAyMTFfZnJvbXRleHRfb2N0ZXRzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIG9jdGV0c3RyIGJpbmFyeSB2YWx1ZSAqLwotdTMyIHA4MDIxMV9pc3ZhbGlkX29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIGludCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHUzMiA9PT4gJWQgKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qICVkID09PiB1MzIgKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X2ludCggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYW4gaW50J3MgYmluYXJ5IHZhbHVlIChhbHdheXMgc3VjY2Vzc2Z1bCkgKi8KLXUzMiBwODAyMTFfaXN2YWxpZF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gRU5VTWludCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogdTMyID09PiA8dmFsdWVuYW1lPiAqLwotdm9pZCBwODAyMTFfdG90ZXh0X2VudW1pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIDx2YWx1ZW5hbWU+ID09PiB1MzIgKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X2VudW1pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGVudW0ncyBiaW5hcnkgdmFsdWUgKi8KLXUzMiBwODAyMTFfaXN2YWxpZF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIGludEFSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHUzMltdID0+ICVkLCVkLCVkLC4uLiAqLwotdm9pZCBwODAyMTFfdG90ZXh0X2ludGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiAlZCwlZCwlZCwuLi4gPT0+IHUzMltdICovCi12b2lkIHA4MDIxMV9mcm9tdGV4dF9pbnRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYW4gaW50ZWdlciBhcnJheSdzIHZhbHVlICovCi11MzIgcDgwMjExX2lzdmFsaWRfaW50YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gQklUQVJSQVkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogdTMyID09PiAlZCwlZCwlZCwuLi4gKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9iaXRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogJWQsJWQsJWQsLi4uID09PiB1MzIgKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X2JpdGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhIGJpdCBhcnJheSdzIHZhbHVlICovCi11MzIgcDgwMjExX2lzdmFsaWRfYml0YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gTUFDQVJSQVkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBwODAyMTFfdG90ZXh0X21hY2FycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi12b2lkIHA4MDIxMV9mcm9tdGV4dF9tYWNhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBNQUMgYWRkcmVzcyBhcnJheSdzIHZhbHVlICovCi11MzIgcDgwMjExX2lzdmFsaWRfbWFjYXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gTUlCQVRUUklVQlRFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiA8bWlidmFsdWU+ID09PiA8dGV4dHVhbCByZXByZXNlbnRhdGlvbiBpZGVudGlmaWVkIGluIE1JQiBtZXRhZGF0YT4gKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9nZXRtaWJhdHRyaWJ1dGUoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci12b2lkIHA4MDIxMV90b3RleHRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0KLS8qIDx0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGlkZW50aWZpZWQgaW4gTUlCIG1ldGFkYXRhPiA9PT4gPG1pYnZhbHVlPiAqLwotdm9pZCBwODAyMTFfZnJvbXRleHRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotdm9pZCBwODAyMTFfZnJvbXRleHRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhIG1pYml0ZW0ncyBiaW5hcnkgdmFsdWUgKi8KLXUzMiBwODAyMTFfaXN2YWxpZF9nZXRtaWJhdHRyaWJ1dGUoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCiAjZW5kaWYgLyogX1A4MDIxMVRZUEVTX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXAuYwppbmRleCA0NmEyYTZiLi40MDVjZTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXAuYwpAQCAtNTUsOCArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotCi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogLy8gI2RlZmluZSBXRVBfREVCVUcKIApAQCAtNzIsMTggKzcxLDkgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBMb2NhbCBDb25zdGFudHMgKi8KIAotI2RlZmluZSBTU1dBUChhLGIpIHt1OCB0bXAgPSBzW2FdOyBzW2FdID0gc1tiXTsgc1tiXSA9IHRtcDt9CiAjZGVmaW5lIFdFUF9LRVkoeCkgICAgICAgKCgoeCkgJiAweEMwKSA+PiA2KQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFR5cGVzICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLwogCiBzdGF0aWMgY29uc3QgdTMyIHdlcF9jcmMzMl90YWJsZVsyNTZdID0gewpAQCAtMjExLDcgKzIwMSw3IEBACiAJaiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCWogPSAoaiArIHNbaV0gKyBrZXlbaSAlIGtleWxlbl0pICYgMHhmZjsKLQkJU1NXQVAoaSxqKTsKKwkJc3dhcChpLGopOwogCX0KIAogCS8qIEFwcGx5IHRoZSBSQzQgdG8gdGhlIGRhdGEsIHVwZGF0ZSB0aGUgQ1JDMzIgKi8KQEAgLTIyMCw3ICsyMTAsNyBAQAogCWZvciAoayA9IDA7IGsgPCBsZW47IGsrKykgewogCQlpID0gKGkrMSkgJiAweGZmOwogCQlqID0gKGorc1tpXSkgJiAweGZmOwotCQlTU1dBUChpLGopOworCQlzd2FwKGksaik7CiAJCWJ1ZltrXSBePSBzWyhzW2ldICsgc1tqXSkgJiAweGZmXTsKIAkJY3JjID0gd2VwX2NyYzMyX3RhYmxlWyhjcmMgXiBidWZba10pICYgMHhmZl0gXiAoY3JjID4+IDgpOwogCX0KQEAgLTIzNSw3ICsyMjUsNyBAQAogCWZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKIAkJaSA9IChpICsgMSkgJiAweGZmOwogCQlqID0gKGorc1tpXSkgJiAweGZmOwotCQlTU1dBUChpLGopOworCQlzd2FwKGksaik7CiAJCWlmICgoY19jcmNba10gXiBzWyhzW2ldICsgc1tqXSkgJiAweGZmXSkgIT0gaWN2W2tdKQogCQkJcmV0dXJuIC0oNCB8IChrIDw8IDQpKSA7IC8qIElDViBtaXNtYXRjaCAqLwogCX0KQEAgLTI4Myw3ICsyNzMsNyBAQAogCWogPSAwOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQlqID0gKGogKyBzW2ldICsga2V5W2kgJSBrZXlsZW5dKSAmIDB4ZmY7Ci0JCVNTV0FQKGksaik7CisJCXN3YXAoaSxqKTsKIAl9CiAKIAkvKiBVcGRhdGUgQ1JDMzIgdGhlbiBhcHBseSBSQzQgdG8gdGhlIGRhdGEgKi8KQEAgLTI5Myw3ICsyODMsNyBAQAogCQljcmMgPSB3ZXBfY3JjMzJfdGFibGVbKGNyYyBeIGJ1ZltrXSkgJiAweGZmXSBeIChjcmMgPj4gOCk7CiAJCWkgPSAoaSsxKSAmIDB4ZmY7CiAJCWogPSAoaitzW2ldKSAmIDB4ZmY7Ci0JCVNTV0FQKGksaik7CisJCXN3YXAoaSxqKTsKIAkJZHN0W2tdID0gYnVmW2tdIF4gc1soc1tpXSArIHNbal0pICYgMHhmZl07CiAJfQogCWNyYyA9IH5jcmM7CkBAIC0zMDcsNyArMjk3LDcgQEAKIAlmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7CiAJCWkgPSAoaSArIDEpICYgMHhmZjsKIAkJaiA9IChqK3NbaV0pICYgMHhmZjsKLQkJU1NXQVAoaSxqKTsKKwkJc3dhcChpLGopOwogCQlpY3Zba10gXj0gc1soc1tpXSArIHNbal0pICYgMHhmZl07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMKaW5kZXggMGQ1NzBmMS4uOTYwNzhiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYwpAQCAtNTEsMTIgKzUxLDEyIEBACiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotCiAjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKICNpbmNsdWRlICJwODAyMTFoZHIuaCIKICNpbmNsdWRlICJwODAyMTFjb252LmgiCkBAIC03NywxNiArNzcsMTQgQEAKIAogc3RhdGljIHU4IHA4MDIxMV9taHpfdG9fY2hhbm5lbCh1MTYgbWh6KQogewotCWlmIChtaHogPj0gNTAwMCkgewotCQlyZXR1cm4gKChtaHogLSA1MDAwKSAvIDUpOwotCX0KKwlpZiAobWh6ID49IDUwMDApCisJCXJldHVybiAobWh6IC0gNTAwMCkgLyA1OwogCiAJaWYgKG1oeiA9PSAyNDgyKQogCQlyZXR1cm4gMTQ7CiAKLQlpZiAobWh6ID49IDI0MDcpIHsKLQkJcmV0dXJuICgobWh6IC0gMjQwNykgLyA1KTsKLQl9CisJaWYgKG1oeiA+PSAyNDA3KQorCQlyZXR1cm4gKG1oeiAtIDI0MDcpIC8gNTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAwLDE5ICs5OCwxNSBAQAogCQlyZXR1cm4gMDsKIAogCS8qIDVHICovCi0KLQlpZiAoZG90MTFhKSB7Ci0JCXJldHVybiAoNTAwMCArICg1ICogY2gpKTsKLQl9CisJaWYgKGRvdDExYSkKKwkJcmV0dXJuIDUwMDAgKyAoNSAqIGNoKTsKIAogCS8qIDIuNEcgKi8KLQogCWlmIChjaCA9PSAxNCkKIAkJcmV0dXJuIDI0ODQ7CiAKLQlpZiAoKGNoIDwgMTQpICYmIChjaCA+IDApKSB7Ci0JCXJldHVybiAoMjQwNyArICg1ICogY2gpKTsKLQl9CisJaWYgKChjaCA8IDE0KSAmJiAoY2ggPiAwKSkKKwkJcmV0dXJuIDI0MDcgKyAoNSAqIGNoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIyLDU0ICsxMTYsNDYgQEAKIAkyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAogCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQKIH07CisKICNkZWZpbmUgTlVNX0NIQU5ORUxTIEFSUkFZX1NJWkUocDgwMjExd2V4dF9jaGFubmVsX2ZyZXEpCiAKLS8qIHN0ZWFsIGEgc3BhcmUgYml0IHRvIHN0b3JlIHRoZSBzaGFyZWQvb3BlbnN5c3RlbXMgc3RhdGUuIHNob3VsZCBkZWZhdWx0IHRvIG9wZW4gaWYgbm90IHNldCAqLwotI2RlZmluZSBIT1NUV0VQX1NIQVJFREtFWSBCSVQzCisvKiBzdGVhbCBhIHNwYXJlIGJpdCB0byBzdG9yZSB0aGUgc2hhcmVkL29wZW5zeXN0ZW1zIHN0YXRlLgorICAgc2hvdWxkIGRlZmF1bHQgdG8gb3BlbiBpZiBub3Qgc2V0ICovCisjZGVmaW5lIEhPU1RXRVBfU0hBUkVES0VZIEJJVCgzKQogCi0KLS8qKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgPT09PT09PT09PT09PT09ICovCi0KLXN0YXRpYyBpbnQgcXVhbF9hc19wZXJjZW50KGludCBzbnIgKSB7Ci0gIGlmICggc25yIDw9IDAgKQotICAgIHJldHVybiAwOwotICBpZiAoIHNuciA8PSA0MCApCi0gICAgcmV0dXJuIHNucio1LzI7Ci0gIHJldHVybiAxMDA7CitzdGF0aWMgaW50IHF1YWxfYXNfcGVyY2VudChpbnQgc25yKQoreworCWlmIChzbnIgPD0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHNuciA8PSA0MCkKKwkJcmV0dXJuIHNuciAqIDUgLyAyOworCXJldHVybiAxMDA7CiB9CiAKLQotCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgZGlkLCB1MzIgZGF0YSkKIHsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJbXNnOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJCW1pYml0ZW07Ci0JaW50CXJlc3VsdDsKLQotCURCRkVOVEVSOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCWludCByZXN1bHQ7CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CiAJbWliaXRlbS5kaWQgPSBkaWQ7CiAJbWliaXRlbS5kYXRhID0gZGF0YTsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9hdXRvam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90ICAgICBtc2c7Ci0Jc3RydWN0IGl3X3BvaW50CQkJZGF0YTsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgbXNnOworCXN0cnVjdCBpd19wb2ludCBkYXRhOwogCWNoYXIgc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CiAKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAkvKiBHZXQgRVNTSUQgKi8KIAlyZXN1bHQgPSBwODAyMTF3ZXh0X2dpd2Vzc2lkKHdsYW5kZXYtPm5ldGRldiwgTlVMTCwgJmRhdGEsIHNzaWQpOwogCkBAIC0xNzgsMjMgKzE2NCwyMiBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JaWYgKCB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgKQotCSAgbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkpCisJCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKIAllbHNlCi0JICBtc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOworCQltc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2F1dG9qb2luOwogCiAJLyogVHJpbSB0aGUgbGFzdCAnXDAnIHRvIGZpdCB0aGUgU1NJRCBmb3JtYXQgKi8KIAotCWlmIChkYXRhLmxlbmd0aCAmJiBzc2lkW2RhdGEubGVuZ3RoLTFdID09ICdcMCcpIHsKKwlpZiAoZGF0YS5sZW5ndGggJiYgc3NpZFtkYXRhLmxlbmd0aCAtIDFdID09ICdcMCcpCiAJCWRhdGEubGVuZ3RoID0gZGF0YS5sZW5ndGggLSAxOwotCX0KIAogCW1lbWNweShtc2cuc3NpZC5kYXRhLmRhdGEsIHNzaWQsIGRhdGEubGVuZ3RoKTsKIAltc2cuc3NpZC5kYXRhLmxlbiA9IGRhdGEubGVuZ3RoOwogCi0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0yMDMsMjIgKzE4OCwyMCBAQAogCiBleGl0OgogCi0JREJGRVhJVDsKIAlyZXR1cm4gZXJyOwogCiB9CiAKIC8qIGNhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLXN0cnVjdCBpd19zdGF0aXN0aWNzKiBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyAobmV0ZGV2aWNlX3QgKmRldikKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqIGRldikKIHsKLQlwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICBxdWFsaXR5OworCXA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QgcXVhbGl0eTsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MqIHdzdGF0cyA9ICZ3bGFuZGV2LT53c3RhdHM7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZ3bGFuZGV2LT53c3RhdHM7CiAJaW50IHJldHZhbDsKIAotCURCRkVOVEVSOwogCS8qIENoZWNrICovCi0JaWYgKCAod2xhbmRldiA9PSBOVUxMKSB8fCAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORykgKQorCWlmICgod2xhbmRldiA9PSBOVUxMKSB8fCAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORykpCiAJCXJldHVybiBOVUxMOwogCiAJLyogWFhYIE9ubHkgdmFsaWQgaW4gc3RhdGlvbiBtb2RlICovCkBAIC0yMzAsMjYgKzIxMywyNCBAQAogCXF1YWxpdHkuZGJtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAogCS8qIHNlbmQgbWVzc2FnZSB0byBuc2QgKi8KLQlpZiAoIHdsYW5kZXYtPm1sbWVyZXF1ZXN0ID09IE5VTEwgKQorCWlmICh3bGFuZGV2LT5tbG1lcmVxdWVzdCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHZhbCA9IHdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIChwODAyMTFtc2dfdCopICZxdWFsaXR5KTsKKwlyZXR2YWwgPSB3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCAocDgwMjExbXNnX3QgKikmcXVhbGl0eSk7CiAKLQl3c3RhdHMtPnF1YWwucXVhbCA9IHF1YWxfYXNfcGVyY2VudChxdWFsaXR5LmxpbmsuZGF0YSk7ICAgIC8qIG92ZXJhbGwgbGluayBxdWFsaXR5ICovCi0Jd3N0YXRzLT5xdWFsLmxldmVsID0gcXVhbGl0eS5sZXZlbC5kYXRhOyAgLyogaW5zdGFudCBzaWduYWwgbGV2ZWwgKi8KLQl3c3RhdHMtPnF1YWwubm9pc2UgPSBxdWFsaXR5Lm5vaXNlLmRhdGE7ICAvKiBpbnN0YW50IG5vaXNlIGxldmVsICovCisJd3N0YXRzLT5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQocXVhbGl0eS5saW5rLmRhdGEpOwkvKiBvdmVyYWxsIGxpbmsgcXVhbGl0eSAqLworCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHF1YWxpdHkubGV2ZWwuZGF0YTsJLyogaW5zdGFudCBzaWduYWwgbGV2ZWwgKi8KKwl3c3RhdHMtPnF1YWwubm9pc2UgPSBxdWFsaXR5Lm5vaXNlLmRhdGE7CS8qIGluc3RhbnQgbm9pc2UgbGV2ZWwgKi8KIAogCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwogCXdzdGF0cy0+ZGlzY2FyZC5jb2RlID0gd2xhbmRldi0+cnguZGVjcnlwdF9lcnI7CiAJd3N0YXRzLT5kaXNjYXJkLm53aWQgPSAwOwogCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKIAotCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7ICAvLyBpbmNvbXBsZXRlIGZyYWdtZW50cwotCXdzdGF0cy0+ZGlzY2FyZC5yZXRyaWVzID0gMDsgICAvLyB0eCByZXRyaWVzLgorCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7CS8qIGluY29tcGxldGUgZnJhZ21lbnRzICovCisJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgPSAwOwkvKiB0eCByZXRyaWVzLiAqLwogCXdzdGF0cy0+bWlzcy5iZWFjb24gPSAwOwogCi0JREJGRVhJVDsKLQogCXJldHVybiB3c3RhdHM7CiB9CiAKQEAgLTI2MSw4ICsyNDIsNiBAQAogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCXJlc3VsdCA9IHA4MDIxMXdleHRfZ2l3cmF0ZShkZXYsIE5VTEwsICZyYXRlLCBOVUxMKTsKIAogCWlmIChyZXN1bHQpIHsKQEAgLTI4MSw3ICsyNjAsNiBAQAogCQlicmVhazsKIAl9CiBleGl0OgotCURCRkVYSVQ7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjkwLDE3ICsyNjgsMTUgQEAKIAkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTMxOCw4ICsyOTQsNyBAQAogCWZyZXEtPmUgPSAxOwogCWZyZXEtPm0gPSBwODAyMTFfY2hhbm5lbF90b19taHoobWliaXRlbS5kYXRhLCAwKSAqIDEwMDAwMDsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzI4LDEzICszMDMsMTEgQEAKIAkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CiAJCWdvdG8gZXhpdDsKQEAgLTM0NCwyMSArMzE3LDIwIEBACiAJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbDsKIAltaWJpdGVtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAotCWlmICggKGZyZXEtPmUgPT0gMCkgJiYgKGZyZXEtPm0gPD0gMTAwMCkgKQorCWlmICgoZnJlcS0+ZSA9PSAwKSAmJiAoZnJlcS0+bSA8PSAxMDAwKSkKIAkJbWliaXRlbS5kYXRhID0gZnJlcS0+bTsKIAllbHNlCiAJCW1pYml0ZW0uZGF0YSA9IHA4MDIxMV9taHpfdG9fY2hhbm5lbChmcmVxLT5tKTsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzY4LDggKzM0MCw2IEBACiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCi0JREJGRU5URVI7Ci0KIAlzd2l0Y2ggKHdsYW5kZXYtPm1hY21vZGUpIHsKIAljYXNlIFdMQU5fTUFDTU9ERV9JQlNTX1NUQToKIAkJKm1vZGUgPSBJV19NT0RFX0FESE9DOwpAQCAtMzg1LDcgKzM1NSw2IEBACiAJCSptb2RlID0gSVdfTU9ERV9BVVRPOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5NCwxMiArMzYzLDEwIEBACiAJCQkgICAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKLQlpbnQgCXJlc3VsdDsKLQlpbnQgICAgIGVyciA9IDA7Ci0KLQlEQkZFTlRFUjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOwogCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKQEAgLTQyOCw3ICszOTUsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBOb3Qgc2V0IHlldC4gKi8KLQkJV0xBTl9MT0dfSU5GTygiT3BlcmF0aW9uIG1vZGU6ICVkIG5vdCBzdXBwb3J0XG4iLCAqbW9kZSk7CisJCXByaW50ayhLRVJOX0lORk8gIk9wZXJhdGlvbiBtb2RlOiAlZCBub3Qgc3VwcG9ydFxuIiwgKm1vZGUpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC00MzcsMzMgKzQwNCwyOCBAQAogCW1pYml0ZW0uZGlkID0gRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGU7CiAJbWliaXRlbS5kYXRhID0gKCptb2RlID09IElXX01PREVfQURIT0MpID8gMCA6IDE7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkKIAkJZXJyID0gLUVGQVVMVDsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKLQorZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYW5nZShuZXRkZXZpY2VfdCAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKIHsKLSAgICAgICAgc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKIAlpbnQgaSwgdmFsOwogCi0JREJGRU5URVI7Ci0KLQkvLyBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSBzZXQgc2l6ZSAmIHplcm8gZXZlcnl0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kCisJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgc2V0IHNpemUgYW5kIHplcm8gZXZlcnl0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kICovCiAJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKCpyYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLDAsc2l6ZW9mKCpyYW5nZSkpOworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOwogCiAJcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IElXX1RYUE9XX0RCTTsKLQkvLyBYWFggd2hhdCBhYm91dCBtaW4vbWF4X3BtcCwgbWluL21heF9wbXQsIGV0Yy4KKwkvKiBYWFggd2hhdCBhYm91dCBtaW4vbWF4X3BtcCwgbWluL21heF9wbXQsIGV0Yy4gKi8KIAogCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwogCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDEzOwpAQCAtNDczLDE4ICs0MzUsMTggQEAKIAlyYW5nZS0+bWluX3JldHJ5ID0gMDsKIAlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwogCi0gICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzBdID0gKElXX0VWRU5UX0NBUEFfS18wIHwgIC8vbW9kZS9mcmVxL3NzaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1NDQU4pKTsKLSAgICAgICAgcmFuZ2UtPmV2ZW50X2NhcGFbMV0gPSBJV19FVkVOVF9DQVBBX0tfMTsgIC8vZW5jb2RlCi0gICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzRdID0gKElXX0VWRU5UX0NBUEFfTUFTSyhJV0VWUVVBTCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV19FVkVOVF9DQVBBX01BU0soSVdFVkNVU1RPTSkgKTsKKwlyYW5nZS0+ZXZlbnRfY2FwYVswXSA9IChJV19FVkVOVF9DQVBBX0tfMCB8CS8qIG1vZGUvZnJlcS9zc2lkICovCisJCQkJSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkgfAorCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXU0NBTikpOworCXJhbmdlLT5ldmVudF9jYXBhWzFdID0gSVdfRVZFTlRfQ0FQQV9LXzE7CS8qIGVuY29kZSAqLworCXJhbmdlLT5ldmVudF9jYXBhWzRdID0gKElXX0VWRU5UX0NBUEFfTUFTSyhJV0VWUVVBTCkgfAorCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhJV0VWQ1VTVE9NKSk7CiAKIAlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOwogCiAJLyogWFhYIG5lZWQgdG8gZmlsdGVyIGFnYWluc3QgdGhlIHJlZ3VsYXRvcnkgZG9tYWluICZ8IGFjdGl2ZSBzZXQgKi8KIAl2YWwgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFMgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFbdmFsXS5pID0gaSArIDE7CiAJCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxW2ldICogMTAwMDAwOwogCQlyYW5nZS0+ZnJlcVt2YWxdLmUgPSAxOwpAQCAtNDk4LDcgKzQ2MCw3IEBACiAJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKIAlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOwogCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7Ci0JLy8gWFhYIHRoZXNlIG5lZWQgdG8gYmUgbnNkLXNwZWNpZmljIQorCS8qIFhYWCB0aGVzZSBuZWVkIHRvIGJlIG5zZC1zcGVjaWZpYyEgKi8KIAogCXJhbmdlLT5taW5fcnRzID0gMDsKIAlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7CkBAIC01MTAsMTQgKzQ3MiwxMyBAQAogCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKIAlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOwogCi0JLy8gWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/CisJLyogWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/ICovCiAJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDA7CiAKIAkvKiBlc3RpbWF0ZWQgbWF4IHRocm91Z2hwdXQgKi8KLQkvLyBYWFggbmVlZCB0byBjYXAgaXQgaWYgd2UncmUgcnVubmluZyBhdCB+Mk1icHMuLgorCS8qIFhYWCBuZWVkIHRvIGNhcCBpdCBpZiB3ZSdyZSBydW5uaW5nIGF0IH4yTWJwcy4uICovCiAJcmFuZ2UtPnRocm91Z2hwdXQgPSA1NTAwMDAwOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTI4LDEyICs0ODksOSBAQAogCiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCi0JREJGRU5URVI7Ci0KIAltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKIAlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC01NDUsOCArNTAzLDYgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCURCRkVOVEVSOwotCiAJaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CiAJZXJxLT5mbGFncyA9IDA7CiAKQEAgLTU3Niw4ICs1MzIsNyBAQAogCWVycS0+bGVuZ3RoID0gd2xhbmRldi0+d2VwX2tleWxlbnNbaV07CiAJbWVtY3B5KGtleSwgd2xhbmRldi0+d2VwX2tleXNbaV0sIGVycS0+bGVuZ3RoKTsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNTg2LDMyICs1NDEsMzMgQEAKIAkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJbXNnOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJCXBzdHI7CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKKwlwODAyMTFpdGVtX3BzdHIzMl90IHBzdHI7CiAKIAlpbnQgZXJyID0gMDsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgaTsKIAotCURCRkVOVEVSOwogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAkvKiBDaGVjayB0aGUgS2V5IGluZGV4IGZpcnN0LiAqLwotCWlmKChpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpKSkgeworCWlmICgoaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSkpIHsKIAogCQlpZiAoKGkgPCAxKSB8fCAoaSA+IE5VTV9XRVBLRVlTKSkgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXhpdDsKLQkJfQotCQllbHNlCisJCX0gZWxzZQogCQkJaS0tOwogCiAJCS8qIFNldCBjdXJyZW50IGtleSBudW1iZXIgb25seSBpZiBubyBrZXlzIGFyZSBnaXZlbiAqLwogCQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgewotCQkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELCBpKTsKKwkJCXJlc3VsdCA9CisJCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsCisJCQkJCQkgaSk7CiAKIAkJCWlmIChyZXN1bHQpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwpAQCAtNjIwLDEyICs1NzYsMTIgQEAKIAkJfQogCiAJfSBlbHNlIHsKLQkJLy8gVXNlIGRlZmF1bHRrZXkgaWYgbm8gS2V5IEluZGV4CisJCS8qIFVzZSBkZWZhdWx0a2V5IGlmIG5vIEtleSBJbmRleCAqLwogCQlpID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOwogCX0KIAogCS8qIENoZWNrIGlmIHRoZXJlIGlzIG5vIGtleSBpbmZvcm1hdGlvbiBpbiB0aGUgaXdjb25maWcgcmVxdWVzdCAqLwotCWlmKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX05PS0VZKSA9PSAwICkgeworCWlmICgoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgPT0gMCkgewogCiAJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCSAqIElmIHRoZXJlIGlzIFdFUCBLZXkgZm9yIHNldHRpbmcsIGNoZWNrIHRoZSBLZXkgSW5mb3JtYXRpb24KQEAgLTY0MiwzMiArNTk4LDM1IEBACiAJCQltZW1jcHkocHN0ci5kYXRhLmRhdGEsIGtleSwgZXJxLT5sZW5ndGgpOwogCQkJcHN0ci5kYXRhLmxlbiA9IGVycS0+bGVuZ3RoOwogCi0JCQlzd2l0Y2goaSkKLQkJCXsKLQkJCQljYXNlIDA6Ci0JCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOwotCQkJCQlicmVhazsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOgorCQkJCXBzdHIuZGlkID0KKwkJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQkJCWJyZWFrOwogCi0JCQkJY2FzZSAxOgotCQkJCQlwc3RyLmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTsKLQkJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJcHN0ci5kaWQgPQorCQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7CisJCQkJYnJlYWs7CiAKLQkJCQljYXNlIDI6Ci0JCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOwotCQkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlwc3RyLmRpZCA9CisJCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKKwkJCQlicmVhazsKIAotCQkJCWNhc2UgMzoKLQkJCQkJcHN0ci5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7Ci0JCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCXBzdHIuZGlkID0KKwkJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQkJCWJyZWFrOwogCi0JCQkJZGVmYXVsdDoKLQkJCQkJZXJyID0gLUVJTlZBTDsKLQkJCQkJZ290byBleGl0OworCQkJZGVmYXVsdDoKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAogCQkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwogCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZwc3RyLCBzaXplb2YocHN0cikpOwotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCQkJaWYgKHJlc3VsdCkgewogCQkJCWVyciA9IC1FRkFVTFQ7CkBAIC02NzksOSArNjM4LDE1IEBACiAKIAkvKiBDaGVjayB0aGUgUHJpdmFjeUludm9rZWQgZmxhZyAqLwogCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwkJcmVzdWx0ID0KKwkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKKwkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwogCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCQlyZXN1bHQgPQorCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAorCQkJCQkgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKIAl9CiAKIAlpZiAocmVzdWx0KSB7CkBAIC02OTAsMTcgKzY1NSwyMiBAQAogCX0KIAogCS8qICBUaGUgIHNlY3VyaXR5ICBtb2RlICBtYXkgIGJlIG9wZW4gb3IgcmVzdHJpY3RlZCwgYW5kIGl0cyBtZWFuaW5nCi0JICAgIGRlcGVuZHMgb24gdGhlIGNhcmQgdXNlZC4gV2l0aCAgbW9zdCAgY2FyZHMsICBpbiAgb3BlbiAgbW9kZSAgbm8KLQkgICAgYXV0aGVudGljYXRpb24gIGlzICB1c2VkICBhbmQgIHRoZSAgY2FyZCAgbWF5ICBhbHNvICBhY2NlcHQgbm9uLQotCSAgICBlbmNyeXB0ZWQgc2Vzc2lvbnMsIHdoZXJlYXMgaW4gcmVzdHJpY3RlZCAgbW9kZSAgb25seSAgZW5jcnlwdGVkCi0JICAgIHNlc3Npb25zICBhcmUgIGFjY2VwdGVkICBhbmQgdGhlIGNhcmQgd2lsbCB1c2UgYXV0aGVudGljYXRpb24gaWYKLQkgICAgYXZhaWxhYmxlLgotCSovCisJICAgZGVwZW5kcyBvbiB0aGUgY2FyZCB1c2VkLiBXaXRoICBtb3N0ICBjYXJkcywgIGluICBvcGVuICBtb2RlICBubworCSAgIGF1dGhlbnRpY2F0aW9uICBpcyAgdXNlZCAgYW5kICB0aGUgIGNhcmQgIG1heSAgYWxzbyAgYWNjZXB0IG5vbi0KKwkgICBlbmNyeXB0ZWQgc2Vzc2lvbnMsIHdoZXJlYXMgaW4gcmVzdHJpY3RlZCAgbW9kZSAgb25seSAgZW5jcnlwdGVkCisJICAgc2Vzc2lvbnMgIGFyZSAgYWNjZXB0ZWQgIGFuZCB0aGUgY2FyZCB3aWxsIHVzZSBhdXRoZW50aWNhdGlvbiBpZgorCSAgIGF2YWlsYWJsZS4KKwkgKi8KIAlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKLQl9Ci0JZWxzZSBpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSB7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJCXJlc3VsdCA9CisJCSAgICBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LAorCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorCQkJCQkgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwl9IGVsc2UgaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgeworCQlyZXN1bHQgPQorCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwKKwkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwogCX0KIAogCWlmIChyZXN1bHQpIHsKQEAgLTcwOCw5ICs2NzgsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0gZXhpdDoKK2V4aXQ6CiAKLQlEQkZFWElUOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTcyMCw4ICs2ODksNiBAQAogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAotCURCRkVOVEVSOwotCiAJaWYgKHdsYW5kZXYtPnNzaWQubGVuKSB7CiAJCWRhdGEtPmxlbmd0aCA9IHdsYW5kZXYtPnNzaWQubGVuOwogCQlkYXRhLT5mbGFncyA9IDE7CkBAIC03MzEsMTIgKzY5OCwxMSBAQAogCQlkYXRhLT5sZW5ndGgrKzsKICNlbmRpZgogCX0gZWxzZSB7Ci0JICAJbWVtc2V0KGVzc2lkLCAwLCBzaXplb2Yod2xhbmRldi0+c3NpZC5kYXRhKSk7CisJCW1lbXNldChlc3NpZCwgMCwgc2l6ZW9mKHdsYW5kZXYtPnNzaWQuZGF0YSkpOwogCQlkYXRhLT5sZW5ndGggPSAwOwogCQlkYXRhLT5mbGFncyA9IDA7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ1LDU1ICs3MTEsNDkgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgICAgIG1zZzsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgbXNnOwogCiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgbGVuZ3RoID0gZGF0YS0+bGVuZ3RoOwogCi0JREJGRU5URVI7Ci0KIAlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0KLQlpZiAoIHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWSApCi0JICBtc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXk7CisJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWSkKKwkJbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OwogCWVsc2UKLQkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CisJCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47CiAKICNpZiAoV0lSRUxFU1NfRVhUIDwgMjEpCi0JaWYgKGxlbmd0aCkgbGVuZ3RoLS07CisJaWYgKGxlbmd0aCkKKwkJbGVuZ3RoLS07CiAjZW5kaWYKIAogCS8qIFRyaW0gdGhlIGxhc3QgJ1wwJyB0byBmaXQgdGhlIFNTSUQgZm9ybWF0ICovCi0KLQlpZiAobGVuZ3RoICYmIGVzc2lkW2xlbmd0aC0xXSA9PSAnXDAnKSB7Ci0JICBsZW5ndGgtLTsKLQl9CisJaWYgKGxlbmd0aCAmJiBlc3NpZFtsZW5ndGggLSAxXSA9PSAnXDAnKQorCQlsZW5ndGgtLTsKIAogCW1lbWNweShtc2cuc3NpZC5kYXRhLmRhdGEsIGVzc2lkLCBsZW5ndGgpOwogCW1zZy5zc2lkLmRhdGEubGVuID0gbGVuZ3RoOwogCi0JV0xBTl9MT0dfREVCVUcoMSwiYXV0b2pvaW5fc3NpZCBmb3IgJXMgXG4iLGVzc2lkKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7Ci0gICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsImF1dG9qb2luX3NzaWQgJWRcbiIscmVzdWx0KTsKKwlwcl9kZWJ1ZygiYXV0b2pvaW5fc3NpZCBmb3IgJXMgXG4iLCBlc3NpZCk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKKwlwcl9kZWJ1ZygiYXV0b2pvaW5fc3NpZCAlZFxuIiwgcmVzdWx0KTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3Y29tbWl0KG5ldGRldmljZV90ICpkZXYsCiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQpAQCAtODAxLDggKzc2MSw2IEBACiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CkBAIC04MTEsMjggKzc2OSwyNCBAQAogCS8qIEF1dG8gSm9pbiAqLwogCWVyciA9IHA4MDIxMXdleHRfYXV0b2pvaW4od2xhbmRldik7CiAKLSBleGl0OgotIAlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYXRlKG5ldGRldmljZV90ICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OwogCW1pYml0ZW0uZGlkID0gRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC04NDEsNyArNzk1LDcgQEAKIAogCW1lbWNweSgmbWliaXRlbSwgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgc2l6ZW9mKG1pYml0ZW0pKTsKIAotCXJycS0+Zml4ZWQgPSAwOyAgIC8qIGNhbiBpdCBjaGFuZ2U/ICovCisJcnJxLT5maXhlZCA9IDA7CQkvKiBjYW4gaXQgY2hhbmdlPyAqLwogCXJycS0+ZGlzYWJsZWQgPSAwOwogCXJycS0+dmFsdWUgPSAwOwogCkBAIC04NjYsOCArODIwLDcgQEAKIAlkZWZhdWx0OgogCQllcnIgPSAtRUlOVkFMOwogCX0KLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg3NiwxNyArODI5LDE1IEBACiAJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTg5OSwyNCArODUwLDIwIEBACiAJcnRzLT5kaXNhYmxlZCA9IChydHMtPnZhbHVlID09IDIzNDcpOwogCXJ0cy0+Zml4ZWQgPSAxOwogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdydHMobmV0ZGV2aWNlX3QgKmRldiwKIAkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKIAkJZ290byBleGl0OwpAQCAtOTMwLDE1ICs4NzcsMTQgQEAKIAkJbWliaXRlbS5kYXRhID0gcnRzLT52YWx1ZTsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTQ3LDE3ICs4OTMsMTYgQEAKIAkJCSAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7Ci0JbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CisJbWliaXRlbS5kaWQgPQorCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtOTcwLDggKzkxNSw3IEBACiAJZnJhZy0+ZGlzYWJsZWQgPSAoZnJhZy0+dmFsdWUgPT0gMjM0Nik7CiAJZnJhZy0+Zml4ZWQgPSAxOwogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05ODAsMjAgKzkyNCwxOSBAQAogCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7Ci0JbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CisJbWliaXRlbS5kaWQgPQorCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CiAKIAlpZiAoZnJhZy0+ZGlzYWJsZWQpCiAJCW1pYml0ZW0uZGF0YSA9IDIzNDY7CkBAIC0xMDAxLDE1ICs5NDQsMTQgQEAKIAkJbWliaXRlbS5kYXRhID0gZnJhZy0+dmFsdWU7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEwMjYsMTkgKzk2OCwxNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAJdTE2IHNob3J0cmV0cnksIGxvbmdyZXRyeSwgbGlmZXRpbWU7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0OwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMTA1Miw3ICs5OTIsNyBAQAogCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdDsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTEwNjMsMTAgKzEwMDMsMTEgQEAKIAogCWxvbmdyZXRyeSA9IG1pYml0ZW0uZGF0YTsKIAotCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKwltaWJpdGVtLmRpZCA9CisJICAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWU7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMDk0LDggKzEwMzUsNyBAQAogCQl9CiAJfQogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogCiB9CkBAIC0xMTA1LDEzICsxMDQ1LDExIEBACiAJCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKIAkJZ290byBleGl0OwpAQCAtMTEyNSwxMSArMTA2MywxMiBAQAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKIAogCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7Ci0JCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKLQkJbWliaXRlbS5kYXRhID0gIHJycS0+dmFsdWUgLz0gMTAyNDsKKwkJbWliaXRlbS5kaWQgPQorCQkgICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKwkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZSAvPSAxMDI0OwogCiAJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJCWlmIChyZXN1bHQpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMTM3LDExICsxMDc2LDEzIEBACiAJCX0KIAl9IGVsc2UgewogCQlpZiAocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpIHsKLQkJCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdDsKKwkJCW1pYml0ZW0uZGlkID0KKwkJCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0OwogCQkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZTsKIAotCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLAorCQkJICAgICAgIHNpemVvZihtaWJpdGVtKSk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJCQlpZiAocmVzdWx0KSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKQEAgLTExNTAsMTEgKzEwOTEsMTMgQEAKIAkJfQogCiAJCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfU0hPUlQpIHsKLQkJCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQ7CisJCQltaWJpdGVtLmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQ7CiAJCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOwogCi0JCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sCisJCQkgICAgICAgc2l6ZW9mKG1pYml0ZW0pKTsKKwkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAkJCWlmIChyZXN1bHQpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwpAQCAtMTE2Myw0NiArMTEwNiw0MyBAQAogCQl9CiAJfQogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogCiB9CiAKIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXd0eHBvdyhuZXRkZXZpY2VfdCAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLSAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKLSAgICAgICAgaW50IHJlc3VsdDsKLSAgICAgICAgaW50IGVyciA9IDA7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKIAotICAgICAgICBEQkZFTlRFUjsKKwlpZiAoIXdsYW5fd2V4dF93cml0ZSkgeworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICAgICAgaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSAoLUVPUE5PVFNVUFApOwotICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfQotCi0gICAgICAgIG1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKLQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWw7CisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1pYml0ZW0uZGlkID0KKwkgICAgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbDsKIAlpZiAocnJxLT5maXhlZCA9PSAwKQotCSAgbWliaXRlbS5kYXRhID0gMzA7CisJCW1pYml0ZW0uZGF0YSA9IDMwOwogCWVsc2UKLQkgIG1pYml0ZW0uZGF0YSA9IHJycS0+dmFsdWU7Ci0gICAgICAgIG1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLSAgICAgICAgcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCi0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfQorCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KIAotIGV4aXQ6Ci0gICAgICAgIERCRkVYSVQ7Ci0gICAgICAgIHJldHVybiBlcnI7CitleGl0OgorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXd0eHBvdyhuZXRkZXZpY2VfdCAqZGV2LApAQCAtMTIxMCwxOCArMTE1MCwxNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKLQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWw7CisJbWliaXRlbS5kaWQgPQorCSAgICBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsOwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMTIzMCwxNSArMTE2OSwxNCBAQAogCiAJbWVtY3B5KCZtaWJpdGVtLCAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCBzaXplb2YobWliaXRlbSkpOwogCi0JLy8gWFhYIGhhbmRsZSBPRkYgYnkgc2V0dGluZyBkaXNhYmxlZCA9IDE7CisJLyogWFhYIGhhbmRsZSBPRkYgYnkgc2V0dGluZyBkaXNhYmxlZCA9IDE7ICovCiAKLQlycnEtPmZsYWdzID0gMDsgLy8gSVdfVFhQT1dfREJNOworCXJycS0+ZmxhZ3MgPSAwOwkJLyogSVdfVFhQT1dfREJNOyAqLwogCXJycS0+ZGlzYWJsZWQgPSAwOwogCXJycS0+Zml4ZWQgPSAwOwogCXJycS0+dmFsdWUgPSBtaWJpdGVtLmRhdGE7CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEyNDcsMzMgKzExODUsMzIgQEAKIAkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyIGFkZHJlc3NbSVdfTUFYX1NQWV07Ci0gICAgICAgIGludCBudW1iZXIgPSBzcnEtPmxlbmd0aDsKLSAgICAgICAgaW50IGk7Ci0KLQlEQkZFTlRFUjsKKwlzdHJ1Y3Qgc29ja2FkZHIgYWRkcmVzc1tJV19NQVhfU1BZXTsKKwlpbnQgbnVtYmVyID0gc3JxLT5sZW5ndGg7CisJaW50IGk7CiAKIAkvKiBDb3B5IHRoZSBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciAqLwotCW1lbWNweShhZGRyZXNzLCBleHRyYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqbnVtYmVyKTsKKwltZW1jcHkoYWRkcmVzcywgZXh0cmEsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICogbnVtYmVyKTsKIAotICAgICAgICB3bGFuZGV2LT5zcHlfbnVtYmVyID0gMDsKKwl3bGFuZGV2LT5zcHlfbnVtYmVyID0gMDsKIAotICAgICAgICBpZiAobnVtYmVyID4gMCkgeworCWlmIChudW1iZXIgPiAwKSB7CiAKLSAgICAgICAgICAgICAgICAvKiBleHRyYWN0IHRoZSBhZGRyZXNzZXMgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKKwkJLyogZXh0cmFjdCB0aGUgYWRkcmVzc2VzICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIGFkZHJlc3NbaV0uc2FfZGF0YSwgRVRIX0FMRU4pOworCQkJbWVtY3B5KHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBhZGRyZXNzW2ldLnNhX2RhdGEsCisJCQkgICAgICAgRVRIX0FMRU4pOwogCQl9CiAKLSAgICAgICAgICAgICAgICAvKiByZXNldCBzdGF0cyAqLwotICAgICAgICAgICAgICAgIG1lbXNldCh3bGFuZGV2LT5zcHlfc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSAqIElXX01BWF9TUFkpOworCQkvKiByZXNldCBzdGF0cyAqLworCQltZW1zZXQod2xhbmRldi0+c3B5X3N0YXQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpICogSVdfTUFYX1NQWSk7CiAKLSAgICAgICAgICAgICAgICAvKiBzZXQgbnVtYmVyIG9mIGFkZHJlc3NlcyAqLwotICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9udW1iZXIgPSBudW1iZXI7Ci0gICAgICAgIH0KKwkJLyogc2V0IG51bWJlciBvZiBhZGRyZXNzZXMgKi8KKwkJd2xhbmRldi0+c3B5X251bWJlciA9IG51bWJlcjsKKwl9CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC0xMjg0LDc0ICsxMjIxLDcyIEBACiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCi0gICAgICAgIHN0cnVjdCBzb2NrYWRkciBhZGRyZXNzW0lXX01BWF9TUFldOwotICAgICAgICBzdHJ1Y3QgaXdfcXVhbGl0eSBzcHlfc3RhdFtJV19NQVhfU1BZXTsKLSAgICAgICAgaW50IG51bWJlcjsKLSAgICAgICAgaW50IGk7CisJc3RydWN0IHNvY2thZGRyIGFkZHJlc3NbSVdfTUFYX1NQWV07CisJc3RydWN0IGl3X3F1YWxpdHkgc3B5X3N0YXRbSVdfTUFYX1NQWV07CisJaW50IG51bWJlcjsKKwlpbnQgaTsKIAotCURCRkVOVEVSOworCW51bWJlciA9IHdsYW5kZXYtPnNweV9udW1iZXI7CiAKLSAgICAgICAgbnVtYmVyID0gd2xhbmRldi0+c3B5X251bWJlcjsKKwlpZiAobnVtYmVyID4gMCkgewogCi0gICAgICAgIGlmIChudW1iZXIgPiAwKSB7Ci0KLSAgICAgICAgICAgICAgICAvKiBwb3B1bGF0ZSBhZGRyZXNzIGFuZCBzcHkgc3RydWN0J3MgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShhZGRyZXNzW2ldLnNhX2RhdGEsIHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzW2ldLnNhX2ZhbWlseSA9IEFGX1VOSVg7Ci0gICAgICAgICAgICAgICAgCW1lbWNweSgmc3B5X3N0YXRbaV0sICZ3bGFuZGV2LT5zcHlfc3RhdFtpXSwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSk7Ci0gICAgICAgICAgICAgICAgfQorCQkvKiBwb3B1bGF0ZSBhZGRyZXNzIGFuZCBzcHkgc3RydWN0J3MgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CisJCQltZW1jcHkoYWRkcmVzc1tpXS5zYV9kYXRhLCB3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwKKwkJCSAgICAgICBFVEhfQUxFTik7CisJCQlhZGRyZXNzW2ldLnNhX2ZhbWlseSA9IEFGX1VOSVg7CisJCQltZW1jcHkoJnNweV9zdGF0W2ldLCAmd2xhbmRldi0+c3B5X3N0YXRbaV0sCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSk7CisJCX0KIAogCQkvKiByZXNldCB1cGRhdGUgZmxhZyAqLwotICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgbnVtYmVyOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS51cGRhdGVkID0gMDsKLSAgICAgICAgfQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspCisJCQl3bGFuZGV2LT5zcHlfc3RhdFtpXS51cGRhdGVkID0gMDsKKwl9CiAKLSAgICAgICAgLyogcHVzaCBzdHVmZiB0byB1c2VyIHNwYWNlICovCi0gICAgICAgIHNycS0+bGVuZ3RoID0gbnVtYmVyOwotCW1lbWNweShleHRyYSwgYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqbnVtYmVyKTsKLQltZW1jcHkoZXh0cmErc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqbnVtYmVyLCBzcHlfc3RhdCwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSpudW1iZXIpOworCS8qIHB1c2ggc3R1ZmYgdG8gdXNlciBzcGFjZSAqLworCXNycS0+bGVuZ3RoID0gbnVtYmVyOworCW1lbWNweShleHRyYSwgYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKiBudW1iZXIpOworCW1lbWNweShleHRyYSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICogbnVtYmVyLCBzcHlfc3RhdCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSAqIG51bWJlcik7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHByaXNtMl9yZXN1bHQyZXJyIChpbnQgcHJpc20yX3Jlc3VsdCkKK3N0YXRpYyBpbnQgcHJpc20yX3Jlc3VsdDJlcnIoaW50IHByaXNtMl9yZXN1bHQpCiB7CiAJaW50IGVyciA9IDA7CiAKIAlzd2l0Y2ggKHByaXNtMl9yZXN1bHQpIHsKLQkJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOgotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOgotCQkJZXJyID0gLUVJTzsKLQkJCWJyZWFrOwotCQljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOgotCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVyciA9IDA7Ci0JCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM6CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU6CisJCWVyciA9IC1FSU87CisJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ6CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAwOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3c2NhbihuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90CW1zZzsKKwlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCWludCBpID0gMDsKIAotCURCRkVOVEVSOwotCiAJaWYgKHdsYW5kZXYtPm1hY21vZGUgPT0gV0xBTl9NQUNNT0RFX0VTU19BUCkgewotCQlXTEFOX0xPR19FUlJPUigiQ2FuJ3Qgc2NhbiBpbiBBUCBtb2RlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzY2FuIGluIEFQIG1vZGVcbiIpOwogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMTM2MCwzNiArMTI5NSwzNCBAQAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX3NjYW47CiAJbXNnLmJzc3R5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYnNzdHlwZV9hbnk7CiAKLQltZW1zZXQoJihtc2cuYnNzaWQuZGF0YSksIDB4RkYsIHNpemVvZiAocDgwMjExaXRlbV9wc3RyNl90KSk7CisJbWVtc2V0KCYobXNnLmJzc2lkLmRhdGEpLCAweEZGLCBzaXplb2YocDgwMjExaXRlbV9wc3RyNl90KSk7CiAJbXNnLmJzc2lkLmRhdGEubGVuID0gNjsKIAogCW1zZy5zY2FudHlwZS5kYXRhID0gUDgwMjExRU5VTV9zY2FudHlwZV9hY3RpdmU7CiAJbXNnLnByb2JlZGVsYXkuZGF0YSA9IDA7CiAKIAlmb3IgKGkgPSAxOyBpIDw9IDE0OyBpKyspCi0JCW1zZy5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaS0xXSA9IGk7CisJCW1zZy5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaSAtIDFdID0gaTsKIAltc2cuY2hhbm5lbGxpc3QuZGF0YS5sZW4gPSAxNDsKIAogCW1zZy5tYXhjaGFubmVsdGltZS5kYXRhID0gMjUwOwogCW1zZy5taW5jaGFubmVsdGltZS5kYXRhID0gMjAwOwogCi0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIgKG1zZy5yZXN1bHRjb2RlLmRhdGEpOworCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVycihtc2cucmVzdWx0Y29kZS5kYXRhKTsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotCiAvKiBIZWxwZXIgdG8gdHJhbnNsYXRlIHNjYW4gaW50byBXaXJlbGVzcyBFeHRlbnNpb25zIHNjYW4gcmVzdWx0cy4KICAqIEluc3BpcmVkIGJ5IHRoZSBwcmlzbTU0IGNvZGUsIHdoaWNoIHdhcyBpbiB0dXJuIGluc3BpcmVkIGJ5IHRoZQogICogYWlybyBkcml2ZXIgY29kZS4KICAqLwotc3RhdGljIGNoYXIgKgotd2V4dF90cmFuc2xhdGVfYnNzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmN1cnJlbnRfZXYsCi0JCSAgIGNoYXIgKmVuZF9idWYsIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqYnNzKQorc3RhdGljIGNoYXIgKndleHRfdHJhbnNsYXRlX2JzcyhzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpjdXJyZW50X2V2LAorCQkJCWNoYXIgKmVuZF9idWYsCisJCQkJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICpic3MpCiB7CiAJc3RydWN0IGl3X2V2ZW50IGl3ZTsJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwogCkBAIC0xMzk3LDcgKzEzMzAsOSBAQAogCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQuZGF0YS5kYXRhLCBXTEFOX0JTU0lEX0xFTik7CiAJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCWN1cnJlbnRfZXYgPQorCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCSBJV19FVl9BRERSX0xFTik7CiAKIAkvKiBUaGUgZm9sbG93aW5nIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHNhbWUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCiAKQEAgLTE0MDYsMzMgKzEzNDEsMzkgQEAKIAkJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOwogCQlpbnQgc2l6ZTsKIAotCQlzaXplID0gd2xhbl9taW4oSVdfRVNTSURfTUFYX1NJWkUsIGJzcy0+c3NpZC5kYXRhLmxlbik7Ci0JCW1lbXNldCgmZXNzaWQsIDAsIHNpemVvZiAoZXNzaWQpKTsKKwkJc2l6ZSA9CisJCSAgICBtaW5fdCh1bnNpZ25lZCBzaG9ydCwgSVdfRVNTSURfTUFYX1NJWkUsCisJCQkgIGJzcy0+c3NpZC5kYXRhLmxlbik7CisJCW1lbXNldCgmZXNzaWQsIDAsIHNpemVvZihlc3NpZCkpOwogCQltZW1jcHkoJmVzc2lkLCBic3MtPnNzaWQuZGF0YS5kYXRhLCBzaXplKTsKLQkJV0xBTl9MT0dfREVCVUcoMSwgIiBlc3NpZCBzaXplID0gJWRcbiIsIHNpemUpOworCQlwcl9kZWJ1ZygiIGVzc2lkIHNpemUgPSAlZFxuIiwgc2l6ZSk7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gc2l6ZTsKIAkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CiAJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAmZXNzaWRbMF0pOwotCQlXTEFOX0xPR19ERUJVRygxLCAiIGVzc2lkIHNpemUgT0suXG4iKTsKKwkJY3VycmVudF9ldiA9CisJCSAgICBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkgJmVzc2lkWzBdKTsKKwkJcHJfZGVidWcoIiBlc3NpZCBzaXplIE9LLlxuIik7CiAJfQogCiAJc3dpdGNoIChic3MtPmJzc3R5cGUuZGF0YSkgewotCQljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZToKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLQkJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV9ic3N0eXBlX2luZnJhc3RydWN0dXJlOgorCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWJyZWFrOwogCi0JCWNhc2UgUDgwMjExRU5VTV9ic3N0eXBlX2luZGVwZW5kZW50OgotCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0JCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDoKKwkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWJyZWFrOwogCi0JCWRlZmF1bHQ6Ci0JCQlpd2UudS5tb2RlID0gMDsKLQkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWl3ZS51Lm1vZGUgPSAwOworCQlicmVhazsKIAl9CiAJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwogCWlmIChpd2UudS5tb2RlKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCQljdXJyZW50X2V2ID0KKwkJICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCSBJV19FVl9VSU5UX0xFTik7CiAKIAkvKiBFbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KIAlpZiAoYnNzLT5wcml2YWN5LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQpAQCAtMTQ0MSwxMyArMTM4MiwxNiBAQAogCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKIAlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgTlVMTCk7CisJY3VycmVudF9ldiA9CisJICAgIGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIE5VTEwpOwogCiAJLyogQWRkIGZyZXF1ZW5jeS4gKHNob3J0KSBic3MtPmNoYW5uZWwgaXMgdGhlIGZyZXF1ZW5jeSBpbiBNSHogKi8KIAlpd2UudS5mcmVxLm0gPSBic3MtPmRzY2hhbm5lbC5kYXRhOwogCWl3ZS51LmZyZXEuZSA9IDA7CiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJY3VycmVudF9ldiA9CisJICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJIElXX0VWX0ZSRVFfTEVOKTsKIAogCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KIAlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5zaWduYWwuZGF0YTsKQEAgLTE0NTUsMjYgKzEzOTksMjUgQEAKIAkvKiBkbyBhIHNpbXBsZSBTTlIgZm9yIHF1YWxpdHkgKi8KIAlpd2UudS5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQoYnNzLT5zaWduYWwuZGF0YSAtIGJzcy0+bm9pc2UuZGF0YSk7CiAJaXdlLmNtZCA9IElXRVZRVUFMOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisJY3VycmVudF9ldiA9CisJICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJIElXX0VWX1FVQUxfTEVOKTsKIAogCXJldHVybiBjdXJyZW50X2V2OwogfQogCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdzY2FuKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdAltc2c7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190IG1zZzsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgaSA9IDA7CiAJaW50IHNjYW5fZ29vZCA9IDA7CiAJY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOwogCi0JREJGRU5URVI7Ci0KIAkvKiBTaW5jZSB3aXJlbGVzcyB0b29scyBkb2Vzbid0IHJlYWxseSBoYXZlIGEgd2F5IG9mIHBhc3NpbmcgaG93CiAJICogbWFueSBzY2FuIHJlc3VsdHMgcmVzdWx0cyB0aGVyZSB3ZXJlIGJhY2sgaGVyZSwga2VlcCBncmFiYmluZyB0aGVtCiAJICogdW50aWwgd2UgZmFpbC4KQEAgLTE0ODQsMTEwICsxNDI3LDExNSBAQAogCQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHM7CiAJCW1zZy5ic3NpbmRleC5kYXRhID0gaTsKIAotCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAJCWlmICgocmVzdWx0ICE9IDApIHx8CiAJCSAgICAobXNnLnJlc3VsdGNvZGUuZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykpIHsKIAkJCWJyZWFrOwogCQl9CiAKLQkJY3VycmVudF9ldiA9IHdleHRfdHJhbnNsYXRlX2JzcyhpbmZvLCBjdXJyZW50X2V2LCBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZtc2cpOworCQljdXJyZW50X2V2ID0KKwkJICAgIHdleHRfdHJhbnNsYXRlX2JzcyhpbmZvLCBjdXJyZW50X2V2LAorCQkJCSAgICAgICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZtc2cpOwogCQlzY2FuX2dvb2QgPSAxOwogCQlpKys7CiAJfSB3aGlsZSAoaSA8IElXX01BWF9BUCk7CiAKIAlzcnEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOwotCXNycS0+ZmxhZ3MgPSAwOwkvKiB0b2RvICovCisJc3JxLT5mbGFncyA9IDA7CQkvKiB0b2RvICovCiAKIAlpZiAocmVzdWx0ICYmICFzY2FuX2dvb2QpCi0JCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyIChtc2cucmVzdWx0Y29kZS5kYXRhKTsKKwkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIobXNnLnJlc3VsdGNvZGUuZGF0YSk7CiAKLQlEQkZFWElUOwogCXJldHVybiBlcnI7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vZXh0cmEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBzdHVmZiB0byBzdXBwb3J0IE5ldHdvcmtNYW5hZ2VyIChJIGhvcGUpCisvKiBleHRyYSB3aXJlbGVzcyBleHRlbnNpb25zIHN0dWZmIHRvIHN1cHBvcnQgTmV0d29ya01hbmFnZXIgKEkgaG9wZSkgKi8KIAogLyogU0lPQ1NJV0VOQ09ERUVYVCAqLwogc3RhdGljIGludCBwODAyMTF3ZXh0X3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLSAgd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CW1zZzsKLQlwODAyMTFpdGVtX3BzdHIzMl90CQkqcHN0cjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CisJcDgwMjExaXRlbV9wc3RyMzJfdCAqcHN0cjsKIAotICBpbnQgcmVzdWx0ID0gMDsKLSAgc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKLSAgaW50IGlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworCWludCBpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CiAKLSAgV0xBTl9MT0dfREVCVUcoMSwic2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIixleHQtPmV4dF9mbGFncywoaW50KWV4dC0+YWxnLChpbnQpZXh0LT5rZXlfbGVuKTsKKwlwcl9kZWJ1Zygic2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIiwKKwkgICAgICAgZXh0LT5leHRfZmxhZ3MsIChpbnQpZXh0LT5hbGcsIChpbnQpZXh0LT5rZXlfbGVuKTsKIAorCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZKSB7CisJCS8qIHNldCBkZWZhdWx0IGtleSA/IEknbSBub3Qgc3VyZSBpZiB0aGlzIHRoZSB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBoZXJlICovCiAKLSAgaWYgKCBleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZICkgewotICAgIC8vIHNldCBkZWZhdWx0IGtleSA/IEknbSBub3Qgc3VyZSBpZiB0aGlzIHRoZSB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBoZXJlCisJCWlmIChpZHgpIHsKKwkJCWlmIChpZHggPCAxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCWlkeC0tOworCQl9CisJCXByX2RlYnVnKCJzZXR0aW5nIGRlZmF1bHQga2V5ICglZClcbiIsIGlkeCk7CisJCXJlc3VsdCA9CisJCSAgICBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LAorCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELAorCQkJCQkgaWR4KTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KIAotICAgIGlmICggaWR4ICkgewotICAgICAgaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpIHsKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICAgIH0gZWxzZQotCWlkeC0tOwotICAgIH0KLSAgICBXTEFOX0xPR19ERUJVRygxLCJzZXR0aW5nIGRlZmF1bHQga2V5ICglZClcbiIsaWR4KTsKLSAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsIGlkeCk7Ci0gICAgaWYgKCByZXN1bHQgKQotICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gIH0KKwlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpIHsKKwkJaWYgKCEoZXh0LT5hbGcgJiBJV19FTkNPREVfQUxHX1dFUCkpIHsKKwkJCXByX2RlYnVnKCJhc2tlZCB0byBzZXQgYSBub24gd2VwIGtleSA6KCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGlkeCkgeworCQkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllbHNlCisJCQkJaWR4LS07CisJCX0KKwkJcHJfZGVidWcoIlNldCBXRVAga2V5ICglZClcbiIsIGlkeCk7CisJCXdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF0gPSBleHQtPmtleV9sZW47CisJCW1lbWNweSh3bGFuZGV2LT53ZXBfa2V5c1tpZHhdLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKIAotCi0gIGlmICggZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkgKSB7Ci0gICAgaWYgKCEoZXh0LT5hbGcgJiBJV19FTkNPREVfQUxHX1dFUCkpIHsKLSAgICAgIFdMQU5fTE9HX0RFQlVHKDEsImFza2VkIHRvIHNldCBhIG5vbiB3ZXAga2V5IDooIik7Ci0gICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgaWYgKGlkeCkgewotICAgICAgaWYgKGlkeCA8MSB8fCBpZHggPiBOVU1fV0VQS0VZUykKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICAgIGVsc2UKLQlpZHgtLTsKLSAgICB9Ci0gICAgV0xBTl9MT0dfREVCVUcoMSwiU2V0IFdFUCBrZXkgKCVkKVxuIixpZHgpOwotICAgIHdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF0gPSBleHQtPmtleV9sZW47Ci0gICAgbWVtY3B5KHdsYW5kZXYtPndlcF9rZXlzW2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwotCi0gICAgbWVtc2V0KCAmbXNnLDAsc2l6ZW9mKG1zZykpOwotICAgIHBzdHIgPSAocDgwMjExaXRlbV9wc3RyMzJfdCopJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKLSAgICBtZW1jcHkocHN0ci0+ZGF0YS5kYXRhLCBleHQtPmtleSxleHQtPmtleV9sZW4pOwotICAgIHBzdHItPmRhdGEubGVuID0gZXh0LT5rZXlfbGVuOwotICAgIHN3aXRjaCAoaWR4KSB7Ci0gICAgY2FzZSAwOgotICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7Ci0gICAgcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCh1OCopJm1zZyk7Ci0gICAgV0xBTl9MT0dfREVCVUcoMSwicmVzdWx0ICglZClcbiIscmVzdWx0KTsKLSAgfQotICByZXR1cm4gcmVzdWx0OworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCQlwc3RyID0gKHA4MDIxMWl0ZW1fcHN0cjMyX3QgKikmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOworCQltZW1jcHkocHN0ci0+ZGF0YS5kYXRhLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKKwkJcHN0ci0+ZGF0YS5sZW4gPSBleHQtPmtleV9sZW47CisJCXN3aXRjaCAoaWR4KSB7CisJCWNhc2UgMDoKKwkJCXBzdHItPmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBzdHItPmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBzdHItPmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBzdHItPmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CisJCXByX2RlYnVnKCJyZXN1bHQgKCVkKVxuIiwgcmVzdWx0KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogU0lPQ0dJV0VOQ09ERUVYVCAqLwogc3RhdGljIGludCBwODAyMTF3ZXh0X2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CkBAIC0xNTk3LDI0ICsxNTQ1LDI0IEBACiAJaW50IG1heF9sZW47CiAJaW50IGlkeDsKIAotCURCRkVOVEVSOwotCi0JV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIixleHQtPmV4dF9mbGFncywoaW50KWV4dC0+YWxnLChpbnQpZXh0LT5rZXlfbGVuKTsKLQorCXByX2RlYnVnKCJnZXRfZW5jb2RlX2V4dCBmbGFnc1slZF0gYWxnWyVkXSBrZXlsZW5bJWRdXG4iLAorCSAgICAgICBleHQtPmV4dF9mbGFncywgKGludClleHQtPmFsZywgKGludClleHQtPmtleV9sZW4pOwogCiAJbWF4X2xlbiA9IGVuY29kaW5nLT5sZW5ndGggLSBzaXplb2YoKmV4dCk7Ci0JaWYgKCBtYXhfbGVuIDw9IDApIHsKLQkJV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2VuY29kZWV4dCBtYXhfbGVuIFslZF0gaW52YWxpZFxuIixtYXhfbGVuKTsKKwlpZiAobWF4X2xlbiA8PSAwKSB7CisJCXByX2RlYnVnKCJnZXRfZW5jb2RlZXh0IG1heF9sZW4gWyVkXSBpbnZhbGlkXG4iLAorCQkgICAgICAgbWF4X2xlbik7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCWdvdG8gZXhpdDsKIAl9CiAJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwogCi0JV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2VuY29kZV9leHQgaW5kZXggWyVkXVxuIixpZHgpOworCXByX2RlYnVnKCJnZXRfZW5jb2RlX2V4dCBpbmRleCBbJWRdXG4iLCBpZHgpOwogCiAJaWYgKGlkeCkgewotCQlpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUyApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGludmFsaWQga2V5IGluZGV4IFslZF1cbiIsaWR4KTsKKwkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImdldF9lbmNvZGVfZXh0IGludmFsaWQga2V5IGluZGV4IFslZF1cbiIsIGlkeCk7CiAJCQlyZXN1bHQgPSAtRUlOVkFMOwogCQkJZ290byBleGl0OwogCQl9CkBAIC0xNjI1LDIwMyArMTU3MywyMDcgQEAKIAl9CiAKIAllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOwotCW1lbXNldChleHQsMCxzaXplb2YoKmV4dCkpOworCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7CiAKIAlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfV0VQOwogCWV4dC0+a2V5X2xlbiA9IHdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF07Ci0JbWVtY3B5KCBleHQtPmtleSwgd2xhbmRldi0+d2VwX2tleXNbaWR4XSAsIGV4dC0+a2V5X2xlbiApOworCW1lbWNweShleHQtPmtleSwgd2xhbmRldi0+d2VwX2tleXNbaWR4XSwgZXh0LT5rZXlfbGVuKTsKIAogCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKIGV4aXQ6Ci0JREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBTSU9DU0lXQVVUSCAqLworc3RhdGljIGludCBwODAyMTFfd2V4dF9zZXRfaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJaW50IHJlc3VsdCA9IDA7CisKKwlwcl9kZWJ1Zygic2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsCisJICAgICAgIChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCk7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKwkJcHJfZGVidWcoImRyb3BfdW5lbmNyeXB0ZWQgJWRcbiIsIHBhcmFtLT52YWx1ZSk7CisJCWlmIChwYXJhbS0+dmFsdWUpCisJCQlyZXN1bHQgPQorCQkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorCQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9CisJCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisJCQkJCQkgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKwkJcHJfZGVidWcoInByaXZhY3kgaW52b2tlZCAlZFxuIiwgcGFyYW0tPnZhbHVlKTsKKwkJaWYgKHBhcmFtLT52YWx1ZSkKKwkJCXJlc3VsdCA9CisJCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKKwkJCQkJCSBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCQllbHNlCisJCQlyZXN1bHQgPQorCQkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisJCQkJCQkgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkgeworCQkJcHJfZGVidWcoInNldCBvcGVuX3N5c3RlbVxuIik7CisJCQl3bGFuZGV2LT5ob3N0d2VwICY9IH5IT1NUV0VQX1NIQVJFREtFWTsKKwkJfSBlbHNlIGlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7CisJCQlwcl9kZWJ1Zygic2V0IHNoYXJlZCBrZXlcbiIpOworCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX1NIQVJFREtFWTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRvbid0IGtub3cgd2hhdCB0byBkbyBrbm93ICAqLworCQkJcHJfZGVidWcoInVua25vd24gQVVUSF9BTEcgKCVkKVxuIiwKKwkJCSAgICAgICBwYXJhbS0+dmFsdWUpOworCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyogU0lPQ1NJV0FVVEggKi8KLXN0YXRpYyBpbnQgcDgwMjExX3dleHRfc2V0X2l3YXV0aCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQorc3RhdGljIGludCBwODAyMTFfd2V4dF9nZXRfaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0gIHdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLSAgc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKLSAgaW50IHJlc3VsdCA9MDsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwlpbnQgcmVzdWx0ID0gMDsKIAotICBXTEFOX0xPR19ERUJVRygxLCJzZXRfaXdhdXRoIGZsYWdzWyVkXVxuIiwoaW50KXBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVggKTsKKwlwcl9kZWJ1ZygiZ2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsCisJICAgICAgIChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCk7CiAKLSAgc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0gIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotICAgIFdMQU5fTE9HX0RFQlVHKDEsImRyb3BfdW5lbmNyeXB0ZWQgJWRcbiIscGFyYW0tPnZhbHVlKTsKLSAgICBpZiAocGFyYW0tPnZhbHVlKQotICAgICAgcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOwotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7Ci0gICAgYnJlYWs7CisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCXBhcmFtLT52YWx1ZSA9CisJCSAgICB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgPyAxIDogMDsKKwkJYnJlYWs7CiAKLSAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLSAgICBXTEFOX0xPR19ERUJVRygxLCJwcml2YWN5IGludm9rZWQgJWRcbiIscGFyYW0tPnZhbHVlKTsKLSAgICBpZiAoIHBhcmFtLT52YWx1ZSkKLSAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOwotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQlwYXJhbS0+dmFsdWUgPQorCQkgICAgd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgPyAxIDogMDsKKwkJYnJlYWs7CiAKLSAgICBicmVhazsKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCXBhcmFtLT52YWx1ZSA9CisJCSAgICB3bGFuZGV2LT4KKwkJICAgIGhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWSA/IElXX0FVVEhfQUxHX1NIQVJFRF9LRVkgOgorCQkgICAgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CisJCWJyZWFrOwogCi0gIGNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLSAgICBpZiAoIHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNICkgewotICAgICAgV0xBTl9MT0dfREVCVUcoMSwic2V0IG9wZW5fc3lzdGVtXG4iKTsKLSAgICAgIHdsYW5kZXYtPmhvc3R3ZXAgJj0gfkhPU1RXRVBfU0hBUkVES0VZOwotICAgIH0gZWxzZSBpZiAoIHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpIHsKLSAgICAgIFdMQU5fTE9HX0RFQlVHKDEsInNldCBzaGFyZWQga2V5XG4iKTsKLSAgICAgIHdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9TSEFSRURLRVk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGRvbid0IGtub3cgd2hhdCB0byBkbyBrbm93IDooICovCi0gICAgICBXTEFOX0xPR19ERUJVRygxLCJ1bmtub3duIEFVVEhfQUxHICglZClcbiIscGFyYW0tPnZhbHVlKTsKLSAgICAgIHJlc3VsdCA9IC1FSU5WQUw7Ci0gICAgfQotICAgIGJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAotICBkZWZhdWx0OgotICAgIGJyZWFrOwotICB9Ci0KLQotCi0gIHJldHVybiByZXN1bHQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAotLyogU0lPQ1NJV0FVVEggKi8KLXN0YXRpYyBpbnQgcDgwMjExX3dleHRfZ2V0X2l3YXV0aCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0gIHN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07Ci0gIGludCByZXN1bHQgPTA7Ci0KLSAgV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsKGludClwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYICk7Ci0KLSAgc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0gIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotICAgIHBhcmFtLT52YWx1ZSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRD8xOjA7Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLSAgICBwYXJhbS0+dmFsdWUgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRD8xOjA7Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotICAgIHBhcmFtLT52YWx1ZSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWT9JV19BVVRIX0FMR19TSEFSRURfS0VZOklXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwotICAgIGJyZWFrOwotCi0KLSAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotCi0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaXdfaGFuZGxlciBwODAyMTF3ZXh0X2hhbmRsZXJzW10gPSAgewotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2NvbW1pdCwJCS8qIFNJT0NTSVdDT01NSVQgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXduYW1lLAkJLyogU0lPQ0dJV05BTUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV05XSUQgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV05XSUQgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdmcmVxLCAgCQkvKiBTSU9DU0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2ZyZXEsICAJCS8qIFNJT0NHSVdGUkVRICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3bW9kZSwgICAgICAgCQkvKiBTSU9DU0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd21vZGUsICAgICAgIAkJLyogU0lPQ0dJV01PREUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV1NFTlMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgCQkvKiBTSU9DR0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBub3QgdXNlZCAqLyAgICAgCQkvKiBTSU9DU0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyYW5nZSwgICAgICAJCS8qIFNJT0NHSVdSQU5HRSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBub3QgdXNlZCAqLyAgICAgCQkvKiBTSU9DU0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBrZXJuZWwgY29kZSAqLyAgIAkJLyogU0lPQ0dJV1BSSVYgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgIAkJLyogU0lPQ1NJV1NUQVRTICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsIC8qIGtlcm5lbCBjb2RlICovICAgCQkvKiBTSU9DR0lXU1RBVFMgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdzcHksCQkJLyogU0lPQ1NJV1NQWSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NweSwJCQkvKiBTSU9DR0lXU1BZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgCQkvKiBTSU9DU0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdhcCwgICAgICAgICAJCS8qIFNJT0NHSVdBUCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgCQkvKiBTSU9DR0lXQVBMSVNUICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c2NhbiwJCS8qIFNJT0NTSVdTQ0FOICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c2NhbiwJCS8qIFNJT0NHSVdTQ0FOICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZXNzaWQsICAJCS8qIFNJT0NTSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLCAgICAgIAkJLyogU0lPQ0dJV0VTU0lEICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdOSUNLTiAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLCAgICAgIAkJLyogU0lPQ0dJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmF0ZSwgICAgICAJCS8qIFNJT0NHSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cnRzLCAgCQkvKiBTSU9DU0lXUlRTICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cnRzLCAgICAgICAgCQkvKiBTSU9DR0lXUlRTICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJhZywgICAgICAJCS8qIFNJT0NTSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZnJhZywgICAJCS8qIFNJT0NHSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3dHhwb3csICAgICAgICAgICAJLyogU0lPQ1NJV1RYUE9XICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3dHhwb3csICAJCS8qIFNJT0NHSVdUWFBPVyAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3JldHJ5LCAgICAgCQkvKiBTSU9DU0lXUkVUUlkgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyZXRyeSwgIAkJLyogU0lPQ0dJV1JFVFJZICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZW5jb2RlLCAgICAgCQkvKiBTSU9DU0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZW5jb2RlLCAgCQkvKiBTSU9DR0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdQT1dFUiAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV1BPV0VSICovCitzdGF0aWMgaXdfaGFuZGxlciBwODAyMTF3ZXh0X2hhbmRsZXJzW10gPSB7CisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3Y29tbWl0LAkvKiBTSU9DU0lXQ09NTUlUICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bmFtZSwJLyogU0lPQ0dJV05BTUUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV05XSUQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV05XSUQgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdmcmVxLAkvKiBTSU9DU0lXRlJFUSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2ZyZXEsCS8qIFNJT0NHSVdGUkVRICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3bW9kZSwJLyogU0lPQ1NJV01PREUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdtb2RlLAkvKiBTSU9DR0lXTU9ERSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXU0VOUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DR0lXU0VOUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBub3QgdXNlZCAqLy8qIFNJT0NTSVdSQU5HRSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JhbmdlLAkvKiBTSU9DR0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogbm90IHVzZWQgKi8vKiBTSU9DU0lXUFJJViAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBrZXJuZWwgY29kZSAqLy8qIFNJT0NHSVdQUklWICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIG5vdCB1c2VkICovLyogU0lPQ1NJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIGtlcm5lbCBjb2RlICovLyogU0lPQ0dJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c3B5LAkvKiBTSU9DU0lXU1BZICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c3B5LAkvKiBTSU9DR0lXU1BZICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXQVAgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdhcCwJLyogU0lPQ0dJV0FQICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV0FQTElTVCAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3NjYW4sCS8qIFNJT0NTSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c2NhbiwJLyogU0lPQ0dJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlc3NpZCwJLyogU0lPQ1NJV0VTU0lEICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZXNzaWQsCS8qIFNJT0NHSVdFU1NJRCAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXTklDS04gKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlc3NpZCwJLyogU0lPQ0dJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXUkFURSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JhdGUsCS8qIFNJT0NHSVdSQVRFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cnRzLAkvKiBTSU9DU0lXUlRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cnRzLAkvKiBTSU9DR0lXUlRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJhZywJLyogU0lPQ1NJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmFnLAkvKiBTSU9DR0lXRlJBRyAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3R4cG93LAkvKiBTSU9DU0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXd0eHBvdywJLyogU0lPQ0dJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cmV0cnksCS8qIFNJT0NTSVdSRVRSWSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JldHJ5LAkvKiBTSU9DR0lXUkVUUlkgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlbmNvZGUsCS8qIFNJT0NTSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlbmNvZGUsCS8qIFNJT0NHSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1BPV0VSICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdQT1dFUiAqLwogLyogV1BBIG9wZXJhdGlvbnMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsIC8qIFNJT0NTSVdHRU5JRQlzZXQgZ2VuZXJpYyBJRSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBTSU9DR0lXR0VOSUUJZ2V0IGdlbmVyaWMgSUUgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExX3dleHRfc2V0X2l3YXV0aCwgLyogU0lPQ1NJV0FVVEgJc2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMV93ZXh0X2dldF9pd2F1dGgsIC8qIFNJT0NHSVdBVVRICWdldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV0dFTklFICAgICAgc2V0IGdlbmVyaWMgSUUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV0dFTklFICAgICAgZ2V0IGdlbmVyaWMgSUUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExX3dleHRfc2V0X2l3YXV0aCwJLyogU0lPQ1NJV0FVVEggICAgIHNldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLworCShpd19oYW5kbGVyKSBwODAyMTFfd2V4dF9nZXRfaXdhdXRoLAkvKiBTSU9DR0lXQVVUSCAgICAgZ2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCiAKLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zZXRfZW5jb2RlZXh0LCAvKiBTSU9DU0lXRU5DT0RFRVhUICBzZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2V0X2VuY29kZWV4dCwgLyogU0lPQ0dJV0VOQ09ERUVYVCAgZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBTSU9DU0lXUE1LU0EJUE1LU0EgY2FjaGUgb3BlcmF0aW9uICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2V0X2VuY29kZWV4dCwJLyogU0lPQ1NJV0VOQ09ERUVYVCAgc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dldF9lbmNvZGVleHQsCS8qIFNJT0NHSVdFTkNPREVFWFQgIGdldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1BNS1NBICAgICAgUE1LU0EgY2FjaGUgb3BlcmF0aW9uICovCiB9OwogCiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZiA9IHsKIAkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShwODAyMTF3ZXh0X2hhbmRsZXJzKSwKIAkubnVtX3ByaXZhdGUgPSAwLAogCS5udW1fcHJpdmF0ZV9hcmdzID0gMCwKLSAgICAgICAgLnN0YW5kYXJkID0gcDgwMjExd2V4dF9oYW5kbGVycywKKwkuc3RhbmRhcmQgPSBwODAyMTF3ZXh0X2hhbmRsZXJzLAogCS5wcml2YXRlID0gTlVMTCwKIAkucHJpdmF0ZV9hcmdzID0gTlVMTCwKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMKIH07CiAKLQogaW50IHA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBhc3NvYykKIHsKLSAgICAgICAgdW5pb24gaXdyZXFfZGF0YSBkYXRhOworCXVuaW9uIGl3cmVxX2RhdGEgZGF0YTsKIAotICAgICAgICBEQkZFTlRFUjsKKwkvKiBTZW5kIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBmaXJzdCAqLworCWRhdGEuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJaWYgKGFzc29jKQorCQltZW1jcHkoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1zZXQoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKIAotICAgICAgICAvKiBTZW5kIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBmaXJzdCAqLwotICAgICAgICBkYXRhLmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotICAgICAgICBpZiAoYXNzb2MpIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1zZXQoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIDAsIFdMQU5fQUREUl9MRU4pOwotICAgICAgICB9CisJaWYgKHdsYW5fd2V4dF93cml0ZSkKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudCh3bGFuZGV2LT5uZXRkZXYsIFNJT0NHSVdBUCwgJmRhdGEsIE5VTEwpOwogCi0gICAgICAgIGlmICh3bGFuX3dleHRfd3JpdGUpCi0gICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudCh3bGFuZGV2LT5uZXRkZXYsIFNJT0NHSVdBUCwgJmRhdGEsIE5VTEwpOworCWlmICghYXNzb2MpCisJCWdvdG8gZG9uZTsKIAotICAgICAgICBpZiAoIWFzc29jKSBnb3RvIGRvbmU7CisJLyogWFhYIHNlbmQgYXNzb2NpYXRpb24gZGF0YSwgbGlrZSBJRXMsIGV0YyBldGMuICovCiAKLSAgICAgICAgLy8gWFhYIHNlbmQgYXNzb2NpYXRpb24gZGF0YSwgbGlrZSBJRXMsIGV0YyBldGMuCi0KLSBkb25lOgotICAgICAgICBEQkZFWElUOwotICAgICAgICByZXR1cm4gMDsKK2RvbmU6CisJcmV0dXJuIDA7CiB9Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYwppbmRleCBmMTcyN2JhLi5lN2E3OTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCkBAIC01NywxMSArNTcsNiBAQAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZwotCi0KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTc2LDggKzcxLDcgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogUHJvamVjdCBJbmNsdWRlcyAqLwpAQCAtOTQsMTAgKzg4LDEwIEBACiAjaW5jbHVkZSAicHJpc20ybWdtdC5oIgogCiAvKiBDb252ZXJ0cyA4MDIuMTEgZm9ybWF0IHJhdGUgc3BlY2lmaWNhdGlvbnMgdG8gcHJpc20yICovCi0jZGVmaW5lIHA4MDIxMXJhdGVfdG9fcDJiaXQobikJKCgoKG4pJn5CSVQ3KSA9PSAyKSA/IEJJVDAgOiBcCi0JCQkJICgoKG4pJn5CSVQ3KSA9PSA0KSA/IEJJVDEgOiBcCi0JCQkJICgoKG4pJn5CSVQ3KSA9PSAxMSkgPyBCSVQyIDogXAotCQkJCSAoKChuKSZ+QklUNykgPT0gMjIpID8gQklUMyA6IDApCisjZGVmaW5lIHA4MDIxMXJhdGVfdG9fcDJiaXQobikJKCgoKG4pJn5CSVQoNykpID09IDIpID8gQklUKDApIDogIFwKKwkJCQkgKCgobikmfkJJVCg3KSkgPT0gNCkgPyBCSVQoMSkgOiBcCisJCQkJICgoKG4pJn5CSVQoNykpID09IDExKSA/IEJJVCgyKSA6IFwKKwkJCQkgKCgobikmfkJJVCg3KSkgPT0gMjIpID8gQklUKDMpIDogMCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfc2NhbgpAQCAtMTI1LDE4MyArMTE5LDE4OCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQlpbnQgCQkJcmVzdWx0ID0gMDsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdAkqbXNnID0gbXNncDsKLSAgICAgICAgdTE2ICAgICAgICAgICAgICAgICAgcm9hbWluZ21vZGUsIHdvcmQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgaSwgdGltZW91dDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBpc3RtcGVuYWJsZSA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdCAqbXNnID0gbXNncDsKKwl1MTYgcm9hbWluZ21vZGUsIHdvcmQ7CisJaW50IGksIHRpbWVvdXQ7CisJaW50IGlzdG1wZW5hYmxlID0gMDsKIAotICAgICAgICBoZmEzODR4X0hvc3RTY2FuUmVxdWVzdF9kYXRhX3QgIHNjYW5yZXE7CisJaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90IHNjYW5yZXE7CiAKLQlEQkZFTlRFUjsKLQotICAgICAgICAvKiBnYXRla2VlcGVyIGNoZWNrICovCi0gICAgICAgIGlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAotICAgICAgICAgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsMywyKSkgewotCQlXTEFOX0xPR19FUlJPUigiSG9zdFNjYW4gbm90IHN1cHBvcnRlZCB3aXRoIGN1cnJlbnQgZmlybXdhcmUgKDwxLjMuMikuXG4iKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAxOwotICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJLyogZ2F0ZWtlZXBlciBjaGVjayAqLworCWlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCisJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsIDMsIDIpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkhvc3RTY2FuIG5vdCBzdXBwb3J0ZWQgd2l0aCBjdXJyZW50IGZpcm13YXJlICg8MS4zLjIpLlxuIik7CisJCXJlc3VsdCA9IDE7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLSAgICAgICAgbWVtc2V0KCZzY2FucmVxLCAwLCBzaXplb2Yoc2NhbnJlcSkpOworCW1lbXNldCgmc2NhbnJlcSwgMCwgc2l6ZW9mKHNjYW5yZXEpKTsKIAotICAgICAgICAvKiBzYXZlIGN1cnJlbnQgcm9hbWluZyBtb2RlICovCi0gICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKLSAgICAgICAgICAgICAgICAgICAgICAgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLCAmcm9hbWluZ21vZGUpOwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigiZ2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKwkvKiBzYXZlIGN1cnJlbnQgcm9hbWluZyBtb2RlICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAorCQkJCQkgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJCQkgICZyb2FtaW5nbW9kZSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgImdldGNvbmZpZyhST0FNTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJZ290byBleGl0OworCX0KIAotICAgICAgICAvKiBkcm9wIGludG8gbW9kZSAzIGZvciB0aGUgc2NhbiAqLwotICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKLQkJCUhGQTM4NHhfUk9BTU1PREVfSE9TVFNDQU5fSE9TVFJPQU0pOwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFJPQU1JTkdNT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKwkvKiBkcm9wIGludG8gbW9kZSAzIGZvciB0aGUgc2NhbiAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQkJICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKKwkJCQkJICBIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2V0Y29uZmlnKFJPQU1JTkdNT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJICAgICAgIHJlc3VsdCk7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICAgICAgIC8qIGFjdGl2ZSBvciBwYXNzaXZlPyAqLwotICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpID4KLSAgICAgICAgICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDUsMCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobXNnLT5zY2FudHlwZS5kYXRhICE9IFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3JkID0gaG9zdDJoZmEzODR4XzE2KG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTCwgd29yZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0xPR19XQVJOSU5HKCJQYXNzaXZlIHNjYW4gbm90IHN1cHBvcnRlZCB3aXRoICIKLQkJCQkJICAiY3VycmVudCBmaXJtd2FyZS4gICg8MS41LjEpXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBhY3RpdmUgb3IgcGFzc2l2ZT8gKi8KKwlpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAorCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA+CisJICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLCA1LCAwKSkgeworCQlpZiAobXNnLT5zY2FudHlwZS5kYXRhICE9IFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlKQorCQkJd29yZCA9IGNwdV90b19sZTE2KG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YSk7CisJCWVsc2UKKwkJCXdvcmQgPSAwOworCisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTCwKKwkJCQkJICAgICB3b3JkKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUGFzc2l2ZSBzY2FuIG5vdCBzdXBwb3J0ZWQgd2l0aCAiCisJCQkgICAgICAgImN1cnJlbnQgZmlybXdhcmUuICAoPDEuNS4xKVxuIik7CisJCX0KKwl9CiAKIAkvKiBzZXQgdXAgdGhlIHR4cmF0ZSB0byBiZSAyTUJQUy4gU2hvdWxkIGJlIGZhc3Rlc3QgYmFzaWNyYXRlLi4uICovCiAJd29yZCA9IEhGQTM4NHhfUkFURUJJVF8yOwotCXNjYW5yZXEudHhSYXRlID0gaG9zdDJoZmEzODR4XzE2KHdvcmQpOworCXNjYW5yZXEudHhSYXRlID0gY3B1X3RvX2xlMTYod29yZCk7CiAKLSAgICAgICAgLyogc2V0IHVwIHRoZSBjaGFubmVsIGxpc3QgKi8KLSAgICAgICAgd29yZCA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtc2ctPmNoYW5uZWxsaXN0LmRhdGEubGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICB1OCBjaGFubmVsID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWwgPiAxNCkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgLyogY2hhbm5lbCAxIGlzIEJJVDAgLi4uIGNoYW5uZWwgMTQgaXMgQklUMTMgKi8KLSAgICAgICAgICAgICAgICB3b3JkIHw9ICgxIDw8IChjaGFubmVsLTEpKTsKLSAgICAgICAgfQotICAgICAgICBzY2FucmVxLmNoYW5uZWxMaXN0ID0gaG9zdDJoZmEzODR4XzE2KHdvcmQpOworCS8qIHNldCB1cCB0aGUgY2hhbm5lbCBsaXN0ICovCisJd29yZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5sZW47IGkrKykgeworCQl1OCBjaGFubmVsID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaV07CisJCWlmIChjaGFubmVsID4gMTQpCisJCQljb250aW51ZTsKKwkJLyogY2hhbm5lbCAxIGlzIEJJVCAwIC4uLiBjaGFubmVsIDE0IGlzIEJJVCAxMyAqLworCQl3b3JkIHw9ICgxIDw8IChjaGFubmVsIC0gMSkpOworCX0KKwlzY2FucmVxLmNoYW5uZWxMaXN0ID0gY3B1X3RvX2xlMTYod29yZCk7CiAKLSAgICAgICAgLyogc2V0IHVwIHRoZSBzc2lkLCBpZiBwcmVzZW50LiAqLwotICAgICAgICBzY2FucmVxLnNzaWQubGVuID0gaG9zdDJoZmEzODR4XzE2KG1zZy0+c3NpZC5kYXRhLmxlbik7Ci0gICAgICAgIG1lbWNweShzY2FucmVxLnNzaWQuZGF0YSwgbXNnLT5zc2lkLmRhdGEuZGF0YSwgbXNnLT5zc2lkLmRhdGEubGVuKTsKKwkvKiBzZXQgdXAgdGhlIHNzaWQsIGlmIHByZXNlbnQuICovCisJc2NhbnJlcS5zc2lkLmxlbiA9IGNwdV90b19sZTE2KG1zZy0+c3NpZC5kYXRhLmxlbik7CisJbWVtY3B5KHNjYW5yZXEuc3NpZC5kYXRhLCBtc2ctPnNzaWQuZGF0YS5kYXRhLCBtc2ctPnNzaWQuZGF0YS5sZW4pOwogCiAJLyogRW5hYmxlIHRoZSBNQUMgcG9ydCBpZiBpdCdzIG5vdCBhbHJlYWR5IGVuYWJsZWQgICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLCAmd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJnZXRjb25maWcoUE9SVFNUQVRVUykgZmFpbGVkLiAiCi0JCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ2V0Y29uZmlnKFBPUlRTVEFUVVMpIGZhaWxlZC4gIgorCQkgICAgICAgInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJZ290byBleGl0OwogCX0KIAlpZiAod29yZCA9PSBIRkEzODR4X1BPUlRTVEFUVVNfRElTQUJMRUQpIHsKIAkJdTE2IHdvcmRidWZbMTddOwogCiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKLQkJCUhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAotCQkJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQkJCQkgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJCQkJICBIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQkvKiBDb25zdHJ1Y3QgYSBib2d1cyBTU0lEIGFuZCBhc3NpZ24gaXQgdG8gT3duU1NJRCBhbmQKIAkJICogRGVzaXJlZFNTSUQKIAkJICovCi0JCXdvcmRidWZbMF0gPSBob3N0MmhmYTM4NHhfMTYoV0xBTl9TU0lEX01BWExFTik7CisJCXdvcmRidWZbMF0gPSBjcHVfdG9fbGUxNihXTEFOX1NTSURfTUFYTEVOKTsKIAkJZ2V0X3JhbmRvbV9ieXRlcygmd29yZGJ1ZlsxXSwgV0xBTl9TU0lEX01BWExFTik7Ci0JCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZPV05TU0lELAotCQkJCXdvcmRidWYsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBPd25TU0lELlxuIik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCisJCQkJCQl3b3JkYnVmLAorCQkJCQkJSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgT3duU1NJRC5cbiIpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9Ci0JCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKLQkJCQl3b3JkYnVmLCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IERlc2lyZWRTU0lELlxuIik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAorCQkJCQkJd29yZGJ1ZiwKKwkJCQkJCUhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBEZXNpcmVkU1NJRC5cbiIpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9CiAJCS8qIGJzc3R5cGUgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCUhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAotCQkJCUhGQTM4NHhfUE9SVFRZUEVfSUJTUyk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ05GUE9SVFRZUEUuXG4iKTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCisJCQkJCQkgIEhGQTM4NHhfUE9SVFRZUEVfSUJTUyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBDTkZQT1JUVFlQRS5cbiIpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9CiAJCS8qIGlic3Mgb3B0aW9ucyAqLwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJSEZBMzg0eF9SSURfQ1JFQVRFSUJTUywKLQkJCQlIRkEzODR4X0NSRUFURUlCU1NfSk9JTkNSRUFURUlCU1MpOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IENSRUFURUlCU1MuXG4iKTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ1JFQVRFSUJTUywKKwkJCQkJCSAgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5DUkVBVEVJQlNTKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENSRUFURUlCU1MuXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiZHJ2cl9lbmFibGUoMCkgZmFpbGVkLiAiCi0JCQkJCSJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZHJ2cl9lbmFibGUoMCkgZmFpbGVkLiAiCisJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9CiAJCWlzdG1wZW5hYmxlID0gMTsKIAl9CiAKLSAgICAgICAgLyogRmlndXJlIG91dCBvdXIgdGltZW91dCBmaXJzdCBLdXMsIHRoZW4gSFogKi8KLSAgICAgICAgdGltZW91dCA9IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5sZW4gKiBtc2ctPm1heGNoYW5uZWx0aW1lLmRhdGE7Ci0JdGltZW91dCA9ICh0aW1lb3V0ICogSFopLzEwMDA7CisJLyogRmlndXJlIG91dCBvdXIgdGltZW91dCBmaXJzdCBLdXMsIHRoZW4gSFogKi8KKwl0aW1lb3V0ID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmxlbiAqIG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YTsKKwl0aW1lb3V0ID0gKHRpbWVvdXQgKiBIWikgLyAxMDAwOwogCi0gICAgICAgIC8qIElzc3VlIHRoZSBzY2FuIHJlcXVlc3QgKi8KLSAgICAgICAgaHctPnNjYW5mbGFnID0gMDsKKwkvKiBJc3N1ZSB0aGUgc2NhbiByZXF1ZXN0ICovCisJaHctPnNjYW5mbGFnID0gMDsKIAotCVdMQU5fSEVYX0RVTVAoNSwiaHNjYW5yZXEiLCAmc2NhbnJlcSwgc2l6ZW9mKHNjYW5yZXEpKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LAorCQkJCQlIRkEzODR4X1JJRF9IT1NUU0NBTiwgJnNjYW5yZXEsCisJCQkJCXNpemVvZihoZmEzODR4X0hvc3RTY2FuUmVxdWVzdF9kYXRhX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2V0Y29uZmlnKFNDQU5SRVFVRVNUKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJICAgICAgIHJlc3VsdCk7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAotICAgICAgICAgICAgICAgICAgICAgICAgSEZBMzg0eF9SSURfSE9TVFNDQU4sICZzY2FucmVxLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdCkpOwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFNDQU5SRVFVRVNUKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBzbGVlcCB1bnRpbCBpbmZvIGZyYW1lIGFycml2ZXMgKi8KLSAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaHctPmNtZHEsIGh3LT5zY2FuZmxhZywgdGltZW91dCk7CisJLyogc2xlZXAgdW50aWwgaW5mbyBmcmFtZSBhcnJpdmVzICovCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaHctPmNtZHEsIGh3LT5zY2FuZmxhZywgdGltZW91dCk7CiAKIAltc2ctPm51bWJzcy5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJaWYgKGh3LT5zY2FuZmxhZyA9PSAtMSkKQEAgLTMwOSwxNiArMzA4LDE2IEBACiAKIAltc2ctPm51bWJzcy5kYXRhID0gaHctPnNjYW5mbGFnOwogCi0gICAgICAgIGh3LT5zY2FuZmxhZyA9IDA7CisJaHctPnNjYW5mbGFnID0gMDsKIAogCS8qIERpc2FibGUgcG9ydCBpZiB3ZSB0ZW1wb3JhcmlseSBlbmFibGVkIGl0LiAqLwogCWlmIChpc3RtcGVuYWJsZSkgewogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoImRydnJfZGlzYWJsZSgwKSBmYWlsZWQuICIKLQkJCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkcnZyX2Rpc2FibGUoMCkgZmFpbGVkLiAiCisJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMzI2LDI1ICszMjUsMjMgQEAKIAkvKiByZXN0b3JlIG9yaWdpbmFsIHJvYW1pbmcgbW9kZSAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsCiAJCQkJCSAgcm9hbWluZ21vZGUpOwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJICAgICAgIHJlc3VsdCk7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJcmVzdWx0ID0gMDsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCi0gZXhpdDoKK2V4aXQ6CiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMKICoKQEAgLTM2NywzMiArMzY0LDMyIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X3NjYW5fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaW50IAkJCXJlc3VsdCA9IDA7Ci0gICAgICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAgICAgICAqcmVxOwotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKnJlcTsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKIAloZmEzODR4X0hTY2FuUmVzdWx0U3ViX3QgKml0ZW0gPSBOVUxMOwogCiAJaW50IGNvdW50OwogCi0JREJGRU5URVI7Ci0KLSAgICAgICAgcmVxID0gKHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqKSBtc2dwOworCXJlcSA9IChwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKikgbXNncDsKIAogCXJlcS0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAKLQlpZiAoISBody0+c2NhbnJlc3VsdHMpIHsKLQkJV0xBTl9MT0dfRVJST1IoImRvdDExcmVxX3NjYW5fcmVzdWx0cyBjYW4gb25seSBiZSB1c2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkb3QxMXJlcV9zY2FuLlxuIik7CisJaWYgKCFody0+c2NhbnJlc3VsdHMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZG90MTFyZXFfc2Nhbl9yZXN1bHRzIGNhbiBvbmx5IGJlIHVzZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRvdDExcmVxX3NjYW4uXG4iKTsKIAkJcmVzdWx0ID0gMjsKIAkJcmVxLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0gICAgICAgIGNvdW50ID0gKGh3LT5zY2FucmVzdWx0cy0+ZnJhbWVsZW4gLSAzKSAvIDMyOwotCWlmIChjb3VudCA+IDMyKSAgY291bnQgPSAzMjsKKwljb3VudCA9IChody0+c2NhbnJlc3VsdHMtPmZyYW1lbGVuIC0gMykgLyAzMjsKKwlpZiAoY291bnQgPiAzMikKKwkJY291bnQgPSAzMjsKIAogCWlmIChyZXEtPmJzc2luZGV4LmRhdGEgPj0gY291bnQpIHsKLQkJV0xBTl9MT0dfREVCVUcoMCwgInJlcXVlc3RlZCBpbmRleCAoJWQpIG91dCBvZiByYW5nZSAoJWQpXG4iLAotCQkJCXJlcS0+YnNzaW5kZXguZGF0YSwgY291bnQpOworCQlwcl9kZWJ1ZygicmVxdWVzdGVkIGluZGV4ICglZCkgb3V0IG9mIHJhbmdlICglZClcbiIsCisJCSAgICAgICByZXEtPmJzc2luZGV4LmRhdGEsIGNvdW50KTsKIAkJcmVzdWx0ID0gMjsKIAkJcmVxLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOwogCQlnb3RvIGV4aXQ7CkBAIC00MDIsOCArMzk5LDggQEAKIAkvKiBzaWduYWwgYW5kIG5vaXNlICovCiAJcmVxLT5zaWduYWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCXJlcS0+bm9pc2Uuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCXJlcS0+c2lnbmFsLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+c2wpOwotCXJlcS0+bm9pc2UuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5hbmwpOworCXJlcS0+c2lnbmFsLmRhdGEgPSBsZTE2X3RvX2NwdShpdGVtLT5zbCk7CisJcmVxLT5ub2lzZS5kYXRhID0gbGUxNl90b19jcHUoaXRlbS0+YW5sKTsKIAogCS8qIEJTU0lEICovCiAJcmVxLT5ic3NpZC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CkBAIC00MTIsMTMgKzQwOSwxMyBAQAogCiAJLyogU1NJRCAqLwogCXJlcS0+c3NpZC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JcmVxLT5zc2lkLmRhdGEubGVuID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPnNzaWQubGVuKTsKKwlyZXEtPnNzaWQuZGF0YS5sZW4gPSBsZTE2X3RvX2NwdShpdGVtLT5zc2lkLmxlbik7CiAJbWVtY3B5KHJlcS0+c3NpZC5kYXRhLmRhdGEsIGl0ZW0tPnNzaWQuZGF0YSwgcmVxLT5zc2lkLmRhdGEubGVuKTsKIAogCS8qIHN1cHBvcnRlZCByYXRlcyAqLwotICAgICAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCAxMCA7IGNvdW50KyspCi0gICAgICAgICAgICAgICAgaWYgKGl0ZW0tPnN1cHByYXRlc1tjb3VudF0gPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDEwOyBjb3VudCsrKQorCQlpZiAoaXRlbS0+c3VwcHJhdGVzW2NvdW50XSA9PSAwKQorCQkJYnJlYWs7CiAKICNkZWZpbmUgUkVRQkFTSUNSQVRFKE4pIFwKIAlpZiAoKGNvdW50ID49IE4pICYmIERPVDExX1JBVEU1X0lTQkFTSUNfR0VUKGl0ZW0tPnN1cHByYXRlc1soTiktMV0pKSB7IFwKQEAgLTQ1Miw3ICs0NDksNyBAQAogCiAJLyogYmVhY29uIHBlcmlvZCAqLwogCXJlcS0+YmVhY29ucGVyaW9kLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQlyZXEtPmJlYWNvbnBlcmlvZC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmJjbmludCk7CisJcmVxLT5iZWFjb25wZXJpb2QuZGF0YSA9IGxlMTZfdG9fY3B1KGl0ZW0tPmJjbmludCk7CiAKIAkvKiB0aW1lc3RhbXBzICovCiAJcmVxLT50aW1lc3RhbXAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwpAQCAtNDYyLDE0ICs0NTksMTQgQEAKIAogCS8qIGF0aW0gd2luZG93ICovCiAJcmVxLT5pYnNzYXRpbXdpbmRvdy5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JcmVxLT5pYnNzYXRpbXdpbmRvdy5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmF0aW0pOworCXJlcS0+aWJzc2F0aW13aW5kb3cuZGF0YSA9IGxlMTZfdG9fY3B1KGl0ZW0tPmF0aW0pOwogCiAJLyogQ2hhbm5lbCAqLwogCXJlcS0+ZHNjaGFubmVsLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQlyZXEtPmRzY2hhbm5lbC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmNoaWQpOworCXJlcS0+ZHNjaGFubmVsLmRhdGEgPSBsZTE2X3RvX2NwdShpdGVtLT5jaGlkKTsKIAogCS8qIGNhcGluZm8gYml0cyAqLwotCWNvdW50ID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmNhcGluZm8pOworCWNvdW50ID0gbGUxNl90b19jcHUoaXRlbS0+Y2FwaW5mbyk7CiAKIAkvKiBwcml2YWN5IGZsYWcgKi8KIAlyZXEtPnByaXZhY3kuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwpAQCAtNDg0LDI1ICs0ODEsMTQgQEAKIAlyZXEtPmNmcG9sbHJlcS5kYXRhID0gV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19DRlBPTExSRVEoY291bnQpOwogCiAJLyogYnNzdHlwZSAqLwotCXJlcS0+YnNzdHlwZS5zdGF0dXMgPSAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+YnNzdHlwZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJcmVxLT5ic3N0eXBlLmRhdGEgPSAoV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19FU1MoY291bnQpKSA/Ci0JCVA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZSA6Ci0JCVA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDsKLQotCS8vIGl0ZW0tPnByb2JlcmVzcF9yYXRlCi0vKgotCXJlcS0+Zmhkd2VsbHRpbWUKLQlyZXEtPmZoaG9wc2V0Ci0JcmVxLT5maGhvcHBhdHRlcm4KLQlyZXEtPmZoaG9waW5kZXgKLSAgICAgICAgcmVxLT5jZnBkdXJyZW1haW5pbmcKLSovCisJICAgIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZSA6IFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDsKIAogCXJlc3VsdCA9IDA7CiAJcmVxLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTI3LDE1ICs1MTMsMTQgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfc3RhcnQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewotCWludCAJCQlyZXN1bHQgPSAwOwotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdAkqbXNnID0gbXNncDsKKwlpbnQgcmVzdWx0ID0gMDsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdCAqbXNnID0gbXNncDsKIAotCXA4MDIxMXBzdHJkX3QJCSpwc3RyOwotCXU4CQkJYnl0ZWJ1Zls4MF07Ci0JaGZhMzg0eF9ieXRlc3RyX3QJKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCopYnl0ZWJ1ZjsKLQl1MTYJCQl3b3JkOwotCURCRkVOVEVSOworCXA4MDIxMXBzdHJkX3QgKnBzdHI7CisJdTggYnl0ZWJ1Zls4MF07CisJaGZhMzg0eF9ieXRlc3RyX3QgKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCAqKSBieXRlYnVmOworCXUxNiB3b3JkOwogCiAJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9OT05FOwogCkBAIC01NDcsNyArNTMyLDcgQEAKIAlpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCiAJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAogCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA8Ci0JICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigwLDgsMykpIHsKKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDAsIDgsIDMpKSB7CiAJCS8qIEFkLUhvYyBub3QgcXVpdGUgc3VwcG9ydGVkIG9uIFByaXNtMiAqLwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOwpAQCAtNTU5LDE4ICs1NDQsMTkgQEAKIAkvKioqIFNUQVRJT04gKioqLwogCS8qIFNldCB0aGUgUkVRVUlSRUQgY29uZmlnIGl0ZW1zICovCiAJLyogU1NJRCAqLwotCXBzdHIgPSAocDgwMjExcHN0cmRfdCopJihtc2ctPnNzaWQuZGF0YSk7CisJcHN0ciA9IChwODAyMTFwc3RyZF90ICopJihtc2ctPnNzaWQuZGF0YSk7CiAJcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIocDJieXRlc3RyLCBwc3RyKTsKLQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKLQkJCQkJIGJ5dGVidWYsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ25mT3duU1NJRFxuIik7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKKwkJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENuZk93blNTSURcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9Ci0JcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAotCQkJCQkgYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ25mRGVzaXJlZFNTSURcbiIpOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAorCQkJCQlieXRlYnVmLAorCQkJCQlIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENuZkRlc2lyZWRTU0lEXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC01ODEsODQgKzU2Nyw4NCBAQAogCS8qIGJlYWNvbiBwZXJpb2QgKi8KIAl3b3JkID0gbXNnLT5iZWFjb25wZXJpb2QuZGF0YTsKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkFQQkNOaW50LCB3b3JkKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgYmVhY29uIHBlcmlvZD0lZC5cbiIsIHdvcmQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IGJlYWNvbiBwZXJpb2Q9JWQuXG4iLCB3b3JkKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZHNjaGFubmVsICovCiAJd29yZCA9IG1zZy0+ZHNjaGFubmVsLmRhdGE7CiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCB3b3JkKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgY2hhbm5lbD0lZC5cbiIsIHdvcmQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IGNoYW5uZWw9JWQuXG4iLCB3b3JkKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCS8qIEJhc2ljIHJhdGVzICovCiAJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUxLmRhdGEpOwotCWlmICggbXNnLT5iYXNpY3JhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJaWYgKG1zZy0+YmFzaWNyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUyLmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUzLmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU0LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU1LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU2LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU3LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU4LmRhdGEpOwotCX0KKwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUywgd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGJhc2ljcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBiYXNpY3JhdGVzPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIE9wZXJhdGlvbmFsIHJhdGVzIChzdXBwcmF0ZXMgYW5kIHR4cmF0ZWNvbnRyb2wpICovCiAJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUxLmRhdGEpOwotCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUyLmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUzLmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU0LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU1LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU2LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU3LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU4LmRhdGEpOwotCX0KKwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCB3b3JkKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgc3VwcHJhdGVzPSVkLlxuIiwgd29yZCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgc3VwcHJhdGVzPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfVFhSQVRFQ05UTCwgd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHR4cmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCB0eHJhdGVzPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIFNldCB0aGUgbWFjbW9kZSBzbyB0aGUgZnJhbWUgc2V0dXAgY29kZSBrbm93cyB3aGF0IHRvIGRvICovCi0JaWYgKCBtc2ctPmJzc3R5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQgKSB7CisJaWYgKG1zZy0+YnNzdHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudCkgewogCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0lCU1NfU1RBOwogCQkvKiBsZXRzIGV4dGVuZCB0aGUgZGF0YSBsZW5ndGggYSBiaXQgKi8KIAkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZNQVhEQVRBTEVOLCAyMzA0KTsKQEAgLTY2Niw4ICs2NTIsOCBAQAogCiAJLyogRW5hYmxlIHRoZSBQb3J0ICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJFbmFibGUgbWFjcG9ydCBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVuYWJsZSBtYWNwb3J0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC02NzUsMTMgKzY2MSwxMiBAQAogCiAJZ290byBkb25lOwogZmFpbGVkOgotCVdMQU5fTE9HX0RFQlVHKDEsICJGYWlsZWQgdG8gc2V0IGEgY29uZmlnIG9wdGlvbiwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCXByX2RlYnVnKCJGYWlsZWQgdG8gc2V0IGEgY29uZmlnIG9wdGlvbiwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOwogCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAogZG9uZToKIAlyZXN1bHQgPSAwOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MDUsNDAgKzY5MCwzNSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9yZWFkcGRhKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdAkqbXNnID0gbXNncDsKLQlpbnQJCQkJcmVzdWx0OwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3QgKm1zZyA9IG1zZ3A7CisJaW50IHJlc3VsdDsKIAogCS8qIFdlIG9ubHkgc3VwcG9ydCBjb2xsZWN0aW5nIHRoZSBQREEgd2hlbiBpbiB0aGUgRldMT0FECiAJICogc3RhdGUuCiAJICovCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJQREEgbWF5IG9ubHkgYmUgcmVhZCAiCi0JCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJQREEgbWF5IG9ubHkgYmUgcmVhZCAiICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJfSBlbHNlIHsKIAkJLyogIENhbGwgZHJ2cl9yZWFkcGRhKCksIGl0IGhhbmRsZXMgdGhlIGF1eHBvcnQgZW5hYmxlCiAJCSAqICBhbmQgdmFsaWRhdGluZyB0aGUgcmV0dXJuZWQgUERBLgogCQkgKi8KLQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3JlYWRwZGEoCi0JCQlodywKLQkJCW1zZy0+cGRhLmRhdGEsCi0JCQlIRkEzODR4X1BEQV9MRU5fTUFYKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3JlYWRwZGEoaHcsCisJCQkJCSAgICAgIG1zZy0+cGRhLmRhdGEsCisJCQkJCSAgICAgIEhGQTM4NHhfUERBX0xFTl9NQVgpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlXTEFOX0xPR19FUlJPUigKLQkJCQkiaGZhMzg0eF9kcnZyX3JlYWRwZGEoKSBmYWlsZWQsICIKLQkJCQkicmVzdWx0PSVkXG4iLAotCQkJCXJlc3VsdCk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiaGZhMzg0eF9kcnZyX3JlYWRwZGEoKSBmYWlsZWQsICIKKwkJCSAgICAgICAicmVzdWx0PSVkXG4iLCByZXN1bHQpOwogCiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0KLQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCQlEQkZFWElUOworCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAkJCXJldHVybiAwOwogCQl9CiAJCW1zZy0+cGRhLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKQEAgLTc0Niw3ICs3MjYsNiBAQAogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc3NywzMCArNzU2LDI5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3QJKm1zZyA9IG1zZ3A7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3QgKm1zZyA9IG1zZ3A7CiAKIAlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJInJhbWRsX3N0YXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCi0JCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyYW1kbF9zdGF0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgorCQkgICAgICAgImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQkJREJGRVhJVDsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyoKLQkqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKLQkqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgotCSovCisJICoqIE5vdGU6IEludGVycnVwdHMgYXJlIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhbiBBUCBhbmQgYXJlIE5PVAorCSAqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgorCSAqLwogCiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQlpZiAgKCBtc2ctPmVuYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSApIHsKLQkJaWYgKCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGh3LCBtc2ctPmV4ZWFkZHIuZGF0YSkgKSB7Ci0JCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCWlmIChtc2ctPmVuYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkgeworCQlpZiAoaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShodywgbXNnLT5leGVhZGRyLmRhdGEpKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCX0gZWxzZSB7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQl9CkBAIC04MDksMTEgKzc4Nyw5IEBACiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9yYW1kbF93cml0ZQogKgpAQCAtODM2LDQ1ICs4MTIsNDEgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfcmFtZGxfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdAkqbXNnID0gbXNncDsKLQl1MzIJCQlhZGRyOwotCXUzMgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlX3QgKm1zZyA9IG1zZ3A7CisJdTMyIGFkZHI7CisJdTMyIGxlbjsKKwl1OCAqYnVmOwogCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJyYW1kbF93cml0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgotCQkJImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicmFtZGxfd3JpdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJICAgICAgICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCURCRkVYSVQ7CiAJCXJldHVybiAwOwogCX0KIAogCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJLyogZmlyc3QgdmFsaWRhdGUgdGhlIGxlbmd0aCAqLwotCWlmICAoIG1zZy0+bGVuLmRhdGEgPiBzaXplb2YobXNnLT5kYXRhLmRhdGEpICkgewotCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwlpZiAobXNnLT5sZW4uZGF0YSA+IHNpemVvZihtc2ctPmRhdGEuZGF0YSkpIHsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogY2FsbCB0aGUgaGZhMzg0eCBmdW5jdGlvbiB0byBkbyB0aGUgd3JpdGUgKi8KIAlhZGRyID0gbXNnLT5hZGRyLmRhdGE7CiAJbGVuID0gbXNnLT5sZW4uZGF0YTsKIAlidWYgPSBtc2ctPmRhdGEuZGF0YTsKLQlpZiAoIGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZShodywgYWRkciwgYnVmLCBsZW4pICkgeworCWlmIChoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaHcsIGFkZHIsIGJ1ZiwgbGVuKSkKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZDsKIAotCX0KIAltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9mbGFzaGRsX3N0YXRlCiAqCkBAIC05MDIsMzEgKzg3NCwzMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9mbGFzaGRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQlpbnQJCQlyZXN1bHQgPSAwOwotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90CSptc2cgPSBtc2dwOwotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3QgKm1zZyA9IG1zZ3A7CiAKIAlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJImZsYXNoZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKLQkJCSJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImZsYXNoZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJICAgICAgICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCURCRkVYSVQ7CiAJCXJldHVybiAwOwogCX0KIAogCS8qCi0JKiogTm90ZTogSW50ZXJydXB0cyBhcmUgbG9ja2VkIG91dCBpZiB0aGlzIGlzIGFuIEFQIGFuZCBhcmUgTk9UCi0JKiogbG9ja2VkIG91dCBpZiB0aGlzIGlzIGEgc3RhdGlvbi4KLQkqLworCSAqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKKwkgKiogbG9ja2VkIG91dCBpZiB0aGlzIGlzIGEgc3RhdGlvbi4KKwkgKi8KIAogCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JaWYgICggbXNnLT5lbmFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgKSB7Ci0JCWlmICggaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGh3KSApIHsKLQkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJaWYgKG1zZy0+ZW5hYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSB7CisJCWlmIChoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaHcpKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCX0gZWxzZSB7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQl9CkBAIC05NDMsMTkgKzkxNCwxNyBAQAogCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKIAkJcmVzdWx0ID0gcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Z3bG9hZCk7CiAJCWlmIChyZXN1bHQgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJwcmlzbTJzdGFfaWZzdGF0ZShmd2xvYWQpIGZhaWxlZCwiCi0JCQkJIlA4MDIxMUVOVU1fcmVzdWx0Y29kZT0lZFxuIiwgcmVzdWx0KTsKKwkJCXByaW50ayhLRVJOX0VSUiAicHJpc20yc3RhX2lmc3RhdGUoZndsb2FkKSBmYWlsZWQsIgorCQkJICAgICAgICJQODAyMTFFTlVNX3Jlc3VsdGNvZGU9JWRcbiIsIHJlc3VsdCk7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCQlyZXN1bHQgPSAtMTsKIAkJfQogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZQogKgpAQCAtOTc2LDQ3ICs5NDUsNDMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3QJKm1zZyA9IG1zZ3A7Ci0JdTMyCQkJYWRkcjsKLQl1MzIJCQlsZW47Ci0JdTgJCQkqYnVmOwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3QgKm1zZyA9IG1zZ3A7CisJdTMyIGFkZHI7CisJdTMyIGxlbjsKKwl1OCAqYnVmOwogCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJmbGFzaGRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCi0JCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJmbGFzaGRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCSAgICAgICAiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCQlEQkZFWElUOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgotCSoqIE5vdGU6IEludGVycnVwdHMgYXJlIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhbiBBUCBhbmQgYXJlIE5PVAotCSoqIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhIHN0YXRpb24uCi0JKi8KKwkgKiogTm90ZTogSW50ZXJydXB0cyBhcmUgbG9ja2VkIG91dCBpZiB0aGlzIGlzIGFuIEFQIGFuZCBhcmUgTk9UCisJICoqIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhIHN0YXRpb24uCisJICovCiAKIAltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCS8qIGZpcnN0IHZhbGlkYXRlIHRoZSBsZW5ndGggKi8KLQlpZiAgKCBtc2ctPmxlbi5kYXRhID4gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKSApIHsKKwlpZiAobXNnLT5sZW4uZGF0YSA+IHNpemVvZihtc2ctPmRhdGEuZGF0YSkpIHsKIAkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGNhbGwgdGhlIGhmYTM4NHggZnVuY3Rpb24gdG8gZG8gdGhlIHdyaXRlICovCiAJYWRkciA9IG1zZy0+YWRkci5kYXRhOwogCWxlbiA9IG1zZy0+bGVuLmRhdGE7CiAJYnVmID0gbXNnLT5kYXRhLmRhdGE7Ci0JaWYgKCBoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShodywgYWRkciwgYnVmLCBsZW4pICkgeworCWlmIChoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShodywgYWRkciwgYnVmLCBsZW4pKQogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkOwogCi0JfQogCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC0xMDQxLDE1ICsxMDA2LDE0IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X2F1dG9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCQkqaHcgPSB3bGFuZGV2LT5wcml2OwotCWludCAJCQlyZXN1bHQgPSAwOwotCXUxNgkJCXJlZzsKLQl1MTYJCQlwb3J0X3R5cGU7Ci0JcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90CSptc2cgPSBtc2dwOwotCXA4MDIxMXBzdHJkX3QJCSpwc3RyOwotCXU4CQkJYnl0ZWJ1ZlsyNTZdOwotCWhmYTM4NHhfYnl0ZXN0cl90CSpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKWJ5dGVidWY7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IHJlc3VsdCA9IDA7CisJdTE2IHJlZzsKKwl1MTYgcG9ydF90eXBlOworCXA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW5fdCAqbXNnID0gbXNncDsKKwlwODAyMTFwc3RyZF90ICpwc3RyOworCXU4IGJ5dGVidWZbMjU2XTsKKwloZmEzODR4X2J5dGVzdHJfdCAqcDJieXRlc3RyID0gKGhmYTM4NHhfYnl0ZXN0cl90ICopIGJ5dGVidWY7CiAKIAl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CiAKQEAgLTEwNjQsMzkgKzEwMjgsMjEgQEAKIAloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIDB4MDAwZik7CiAKIAkvKiBTZXQgdGhlIGF1dGggdHlwZSAqLwotCWlmICggbXNnLT5hdXRodHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXkgKSB7CisJaWYgKG1zZy0+YXV0aHR5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5KQogCQlyZWcgPSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX1NIQVJFREtFWTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmVnID0gSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9PUEVOU1lTVEVNOwotCX0KKwogCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sIHJlZyk7CiAKIAkvKiBTZXQgdGhlIHNzaWQgKi8KIAltZW1zZXQoYnl0ZWJ1ZiwgMCwgMjU2KTsKLQlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCXBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSYobXNnLT5zc2lkLmRhdGEpOwogCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7Ci0gICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoCi0JCQlodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCi0JCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOwotI2lmIDAKLQkvKiB3ZSBjYW4gdXNlIHRoZSBuZXctZmFuZ2xlZCBhdXRvLXVua25vd24gbW9kZSBpZiB0aGUgZmlybXdhcmUKLQkgICBpcyAxLjMuMyBvciBuZXdlciAqLwotCWlmIChIRkEzODR4X0ZJUk1BUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAotCQkJCSAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAotCQkJCSAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpID49Ci0JICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDMsMykpIHsKLQkJLyogU2V0IHVwIHRoZSBJQlNTIG9wdGlvbnMgKi8KLQkJcmVnID0gIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5DUkVBVEVJQlNTOwotCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NSRUFURUlCU1MsIHJlZyk7Ci0KLQkJLyogU2V0IHRoZSBQb3J0VHlwZSAqLwotCQlwb3J0X3R5cGUgPSBIRkEzODR4X1BPUlRUWVBFX0lCU1M7Ci0JfSBlbHNlIHsKLQkJcG9ydF90eXBlID0gSEZBMzg0eF9QT1JUVFlQRV9CU1M7Ci0JfQotI2Vsc2UKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCQkJYnl0ZWJ1ZiwKKwkJCQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKIAlwb3J0X3R5cGUgPSBIRkEzODR4X1BPUlRUWVBFX0JTUzsKLSNlbmRpZgogCS8qIFNldCB0aGUgUG9ydFR5cGUgKi8KIAloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCBwb3J0X3R5cGUpOwogCkBAIC0xMTA3LDExICsxMDUzLDkgQEAKIAltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfd2xhbnNuaWZmCiAqCkBAIC0xMTMzLDM4ICsxMDc3LDM2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X3dsYW5zbmlmZih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaW50IAkJCXJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmZfdAkqbXNnID0gbXNncDsKKwlpbnQgcmVzdWx0ID0gMDsKKwlwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90ICptc2cgPSBtc2dwOwogCi0JaGZhMzg0eF90CQkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQl1MTYJCQl3b3JkOwotCi0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJdTE2IHdvcmQ7CiAKIAltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCXN3aXRjaCAobXNnLT5lbmFibGUuZGF0YSkKLQl7CisJc3dpdGNoIChtc2ctPmVuYWJsZS5kYXRhKSB7CiAJY2FzZSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOgogCQkvKiBDb25maXJtIHRoYXQgd2UncmUgaW4gbW9uaXRvciBtb2RlICovCi0JCWlmICggd2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUiApIHsKLQkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOwogCQkJcmVzdWx0ID0gMDsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQkvKiBEaXNhYmxlIG1vbml0b3IgbW9kZSAqLwogCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9tb25pdG9yKGh3LCBIRkEzODR4X01PTklUT1JfRElTQUJMRSk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkiZmFpbGVkIHRvIGRpc2FibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCi0JCQkJcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIGRpc2FibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCS8qIERpc2FibGUgcG9ydCAwICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLAotCQkJImZhaWxlZCB0byBkaXNhYmxlIHBvcnQgMCBhZnRlciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAotCQkJcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAwIGFmdGVyIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCS8qIENsZWFyIHRoZSBkcml2ZXIgc3RhdGUgKi8KQEAgLTExNzIsMzIgKzExMTQsMzQgQEAKIAogCQkvKiBSZXN0b3JlIHRoZSB3ZXBmbGFncyAqLwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCi0JCQkJaHctPnByZXNuaWZmX3dlcGZsYWdzKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLAotCQkJImZhaWxlZCB0byByZXN0b3JlIHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAotCQkJaHctPnByZXNuaWZmX3dlcGZsYWdzLAotCQkJcmVzdWx0KTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCisJCQkJCQkgIGh3LT5wcmVzbmlmZl93ZXBmbGFncyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImZhaWxlZCB0byByZXN0b3JlIHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAorCQkJICAgICAgIGh3LT5wcmVzbmlmZl93ZXBmbGFncywgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKIAkJLyogU2V0IHRoZSBwb3J0IHRvIGl0cyBwcmlvciB0eXBlIGFuZCBlbmFibGUgKGlmIG5lY2Vzc2FyeSkgKi8KLQkJaWYgKGh3LT5wcmVzbmlmZl9wb3J0X3R5cGUgIT0gMCApIHsKKwkJaWYgKGh3LT5wcmVzbmlmZl9wb3J0X3R5cGUgIT0gMCkgewogCQkJd29yZCA9IGh3LT5wcmVzbmlmZl9wb3J0X3R5cGU7CiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHdvcmQpOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkiZmFpbGVkIHRvIHJlc3RvcmUgcG9ydHR5cGUsIHJlc3VsdD0lZFxuIiwKLQkJCQlyZXN1bHQpOworCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCisJCQkJCQkJICB3b3JkKTsKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiZmFpbGVkIHRvIHJlc3RvcmUgcG9ydHR5cGUsIHJlc3VsdD0lZFxuIiwKKwkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KIAogCQkJLyogRW5hYmxlIHRoZSBwb3J0ICovCiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKLQkJCWlmICggcmVzdWx0ICkgewotCQkJCVdMQU5fTE9HX0RFQlVHKDEsICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgdG8gcHJlc25pZmYgc2V0dGluZywgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJaWYgKHJlc3VsdCkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgdG8gcHJlc25pZmYgc2V0dGluZywgcmVzdWx0PSVkXG4iLAorCQkJCSAgICAgICByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMTIwNSw0NiArMTE0OSw1MiBAQAogCiAJCX0KIAotCQlXTEFOX0xPR19JTkZPKCJtb25pdG9yIG1vZGUgZGlzYWJsZWRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJtb25pdG9yIG1vZGUgZGlzYWJsZWRcbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQlyZXN1bHQgPSAwOwogCQlnb3RvIGV4aXQ7CiAJCWJyZWFrOwogCWNhc2UgUDgwMjExRU5VTV90cnV0aF90cnVlOgogCQkvKiBEaXNhYmxlIHRoZSBwb3J0IChpZiBlbmFibGVkKSwgb25seSBjaGVjayBQb3J0IDAgKi8KLQkJaWYgKCBody0+cG9ydF9lbmFibGVkWzBdKSB7CisJCWlmIChody0+cG9ydF9lbmFibGVkWzBdKSB7CiAJCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewogCQkJCS8qIFNhdmUgbWFjcG9ydCAwIHN0YXRlICovCiAJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAogCQkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAotCQkJCQkJCQkgICYoaHctPnByZXNuaWZmX3BvcnRfdHlwZSkpOwotCQkJCWlmICggcmVzdWx0ICkgewotCQkJCQlXTEFOX0xPR19ERUJVRygxLCJmYWlsZWQgdG8gcmVhZCBwb3J0dHlwZSwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJCQkJCQkgICYoaHctPgorCQkJCQkJCQkgICAgcHJlc25pZmZfcG9ydF90eXBlKSk7CisJCQkJaWYgKHJlc3VsdCkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImZhaWxlZCB0byByZWFkIHBvcnR0eXBlLCByZXN1bHQ9JWRcbiIsCisJCQkJCSAgICAgICByZXN1bHQpOwogCQkJCQlnb3RvIGZhaWxlZDsKIAkJCQl9CiAJCQkJLyogU2F2ZSB0aGUgd2VwZmxhZ3Mgc3RhdGUgKi8KIAkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsCiAJCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCi0JCQkJCQkJCSAgJihody0+cHJlc25pZmZfd2VwZmxhZ3MpKTsKLQkJCQlpZiAoIHJlc3VsdCApIHsKLQkJCQkJV0xBTl9MT0dfREVCVUcoMSwiZmFpbGVkIHRvIHJlYWQgd2VwZmxhZ3MsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJCQkJCQkJICAmKGh3LT4KKwkJCQkJCQkJICAgIHByZXNuaWZmX3dlcGZsYWdzKSk7CisJCQkJaWYgKHJlc3VsdCkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImZhaWxlZCB0byByZWFkIHdlcGZsYWdzLCByZXN1bHQ9JWRcbiIsCisJCQkJCSAgICAgICByZXN1bHQpOwogCQkJCQlnb3RvIGZhaWxlZDsKIAkJCQl9CiAJCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOwogCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zdGFydChodyk7Ci0JCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJCQkgICAgICAgImZhaWxlZCB0byByZXN0YXJ0IHRoZSBjYXJkIGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAotCQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJaWYgKHJlc3VsdCkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImZhaWxlZCB0byByZXN0YXJ0IHRoZSBjYXJkIGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQkJZ290byBmYWlsZWQ7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkvKiBEaXNhYmxlIHRoZSBwb3J0ICovCiAJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2Rpc2FibGUoaHcsIDApOwotCQkJCWlmICggcmVzdWx0ICkgewotCQkJCQlXTEFOX0xPR19ERUJVRygxLAotCQkJCQkJICAgICAgICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgZm9yIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCi0JCQkJCQkgICAgICAgcmVzdWx0KTsKKwkJCQlpZiAocmVzdWx0KSB7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQkJZ290byBmYWlsZWQ7CiAJCQkJfQogCQkJfQpAQCAtMTI1NSwxNCArMTIwNSwxNCBAQAogCQkvKiBTZXQgdGhlIGNoYW5uZWwgd2Ugd2lzaCB0byBzbmlmZiAgKi8KIAkJd29yZCA9IG1zZy0+Y2hhbm5lbC5kYXRhOwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJCQkgIEhGQTM4NHhfUklEX0NORk9XTkNIQU5ORUwsIHdvcmQpOwotCQlody0+c25pZmZfY2hhbm5lbD13b3JkOworCQkJCQkJICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLAorCQkJCQkJICB3b3JkKTsKKwkJaHctPnNuaWZmX2NoYW5uZWwgPSB3b3JkOwogCi0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgY2hhbm5lbCAlZCwgcmVzdWx0PSVkXG4iLAotCQkJCQkgICAgICAgd29yZCwKLQkJCQkgICAgICAgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIHNldCBjaGFubmVsICVkLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgd29yZCwgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKQEAgLTEyNzEsMzkgKzEyMjEsNDYgQEAKIAkJCS8qIFNldCB0aGUgcG9ydCB0eXBlIHRvIHBJYnNzICovCiAJCQl3b3JkID0gSEZBMzg0eF9QT1JUVFlQRV9QU1VFRE9JQlNTOwogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHdvcmQpOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IHBvcnR0eXBlICVkLCByZXN1bHQ9JWRcbiIsCi0JCQkJCSAgICAgICB3b3JkLAotCQkJCQkgICAgICAgcmVzdWx0KTsKKwkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAorCQkJCQkJCSAgd29yZCk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgcG9ydHR5cGUgJWQsIHJlc3VsdD0lZFxuIiwKKwkJCQkgICAgICAgd29yZCwgcmVzdWx0KTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KLQkJCWlmICgobXNnLT5rZWVwd2VwZmxhZ3Muc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+a2VlcHdlcGZsYWdzLmRhdGEgIT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQkJaWYgKChtc2ctPmtlZXB3ZXBmbGFncy5zdGF0dXMgPT0KKwkJCSAgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQorCQkJICAgICYmIChtc2ctPmtlZXB3ZXBmbGFncy5kYXRhICE9CisJCQkJUDgwMjExRU5VTV90cnV0aF90cnVlKSkgewogCQkJCS8qIFNldCB0aGUgd2VwZmxhZ3MgZm9yIG5vIGRlY3J5cHRpb24gKi8KIAkJCQl3b3JkID0gSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQgfAotCQkJCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVDsKLQkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCB3b3JkKTsKKwkJCQkgICAgSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1JYQ1JZUFQ7CisJCQkJcmVzdWx0ID0KKwkJCQkgICAgaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCQkJCSAgICAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCisJCQkJCQkJICAgICB3b3JkKTsKIAkJCX0KIAotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAotCQkJCQkgICAgICAgd29yZCwKLQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgd2VwZmxhZ3M9MHglMDR4LCByZXN1bHQ9JWRcbiIsCisJCQkJICAgICAgIHdvcmQsIHJlc3VsdCk7CiAJCQkJZ290byBmYWlsZWQ7CiAJCQl9CiAJCX0KIAogCQkvKiBEbyB3ZSB3YW50IHRvIHN0cmlwIHRoZSBGQ1MgaW4gbW9uaXRvciBtb2RlPyAqLwotCQlpZiAoKG1zZy0+c3RyaXBmY3Muc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+c3RyaXBmY3MuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CisJCWlmICgobXNnLT5zdHJpcGZjcy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQorCQkgICAgJiYgKG1zZy0+c3RyaXBmY3MuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CiAJCQlody0+c25pZmZfZmNzID0gMDsKIAkJfSBlbHNlIHsKIAkJCWh3LT5zbmlmZl9mY3MgPSAxOwogCQl9CiAKIAkJLyogRG8gd2Ugd2FudCB0byB0cnVuY2F0ZSB0aGUgcGFja2V0cz8gKi8KLQkJaWYgKG1zZy0+cGFja2V0X3RydW5jLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spIHsKKwkJaWYgKG1zZy0+cGFja2V0X3RydW5jLnN0YXR1cyA9PQorCQkgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSB7CiAJCQlody0+c25pZmZfdHJ1bmNhdGUgPSBtc2ctPnBhY2tldF90cnVuYy5kYXRhOwogCQl9IGVsc2UgewogCQkJaHctPnNuaWZmX3RydW5jYXRlID0gMDsKQEAgLTEzMTEsMzEgKzEyNjgsMzUgQEAKIAogCQkvKiBFbmFibGUgdGhlIHBvcnQgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCSJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgZm9yIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCi0JCQlyZXN1bHQpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgZm9yIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCS8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfbW9uaXRvcihodywgSEZBMzg0eF9NT05JVE9SX0VOQUJMRSk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCSJmYWlsZWQgdG8gZW5hYmxlIG1vbml0b3IgbW9kZSwgcmVzdWx0PSVkXG4iLAotCQkJcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBtb25pdG9yIG1vZGUsIHJlc3VsdD0lZFxuIiwKKwkJCSAgICAgICByZXN1bHQpOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAotCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewotCQkJV0xBTl9MT0dfSU5GTygibW9uaXRvciBtb2RlIGVuYWJsZWRcbiIpOwotCQl9CisJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibW9uaXRvciBtb2RlIGVuYWJsZWRcbiIpOwogCiAJCS8qIFNldCB0aGUgZHJpdmVyIHN0YXRlICovCiAJCS8qIERvIHdlIHdhbnQgdGhlIHByaXNtMiBoZWFkZXI/ICovCi0JCWlmICgobXNnLT5wcmlzbWhlYWRlci5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT5wcmlzbWhlYWRlci5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKKwkJaWYgKChtc2ctPnByaXNtaGVhZGVyLnN0YXR1cyA9PQorCQkgICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKKwkJICAgICYmIChtc2ctPnByaXNtaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgewogCQkJaHctPnNuaWZmaGRyID0gMDsKIAkJCXdsYW5kZXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUFJJU007Ci0JCX0gZWxzZSBpZiAoKG1zZy0+d2xhbmhlYWRlci5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT53bGFuaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQl9IGVsc2UKKwkJICAgIGlmICgobXNnLT53bGFuaGVhZGVyLnN0YXR1cyA9PQorCQkJIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKKwkJCSYmIChtc2ctPndsYW5oZWFkZXIuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CiAJCQlody0+c25pZmZoZHIgPSAxOwogCQkJd2xhbmRldi0+bmV0ZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTTsKIAkJfSBlbHNlIHsKQEAgLTEzNTcsNyArMTMxOCw1IEBACiAJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZDsKIAlyZXN1bHQgPSAwOwogZXhpdDoKLQotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaAppbmRleCBjYWY4MDhkLi4wN2VlY2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCkBAIC02MCw0MyArNjAsMTYgQEAKICNpZm5kZWYgX1BSSVNNMk1HTVRfSAogI2RlZmluZSBfUFJJU00yTUdNVF9ICiAKK2V4dGVybiBpbnQgcHJpc20yX3Jlc2V0X2hvbGR0aW1lOworZXh0ZXJuIGludCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit1MzIgcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgaWZzdGF0ZSk7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gVHlwZXMgYW5kIHRoZWlyIHJlbGF0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIFN0YXRpYyB2YXJpYWJsZSBleHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWV4dGVybiBpbnQJcHJpc20yX2RlYnVnOwotZXh0ZXJuIGludCAgICAgIHByaXNtMl9yZXNldF9ob2xkdGltZTsKLWV4dGVybiBpbnQgICAgICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZTsKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotdTMyCi1wcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBpZnN0YXRlKTsKLQotdm9pZAotcHJpc20yc3RhX2V2X2R0aW0od2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXZvaWQKLXByaXNtMnN0YV9ldl9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci12b2lkCi1wcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXZvaWQKLXByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpOwotdm9pZAotcHJpc20yc3RhX2V2X3R4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IHN0YXR1cyk7Ci12b2lkCi1wcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQKLXByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZCBwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3ZvaWQgcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IHN0YXR1cyk7Cit2b2lkIHByaXNtMnN0YV9ldl90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpOwordm9pZCBwcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiAKIGludCBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKIGludCBwcmlzbTJtZ210X3NjYW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKQEAgLTEyMiwzNCArOTUsMTYgQEAKIHZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwogdm9pZCBwcmlzbTJtZ210X2J5dGVzdHIycHN0cihoZmEzODR4X2J5dGVzdHJfdCAqYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqcHN0cik7CiAKLS8qIGludGVnZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KLXZvaWQgcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHUxNiAqcHJpc20yaW50LCB1MzIgKndsYW5pbnQpOwotdm9pZCBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQodTE2ICpwcmlzbTJpbnQsIHUzMiAqd2xhbmludCk7Ci0KLS8qIGVudW1lcmF0ZWQgaW50ZWdlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqLwotdm9pZCBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bSh1MTYgKnByaXNtMmVudW0sIHUzMiAqd2xhbmVudW0sIHUxNiByaWQpOwotdm9pZCBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bSh1MTYgKnByaXNtMmVudW0sIHUzMiAqd2xhbmVudW0sIHUxNiByaWQpOwotCi0vKiBmdW5jdGlvbnMgdG8gY29udmVydCBhIGJpdCBhcmVhIHRvL2Zyb20gYW4gT3BlcmF0aW9uYWwgUmF0ZSBTZXQgKi8KLXZvaWQgcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KHUxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cik7Ci12b2lkIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldCh1MTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwotCiAvKiBmdW5jdGlvbnMgdG8gY29udmVydCBHcm91cCBBZGRyZXNzZXMgKi8KLXZvaWQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcih1MzIgZGlkLAotCXA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdiApOwordm9pZCBwcmlzbTJtZ210X2dldF9ncnBhZGRyKHUzMiBkaWQsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdik7CiBpbnQgcHJpc20ybWdtdF9zZXRfZ3JwYWRkcih1MzIgZGlkLAotCXU4ICpwcmlzbTJidWYsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdiApOwotaW50IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgoIHUzMiBkaWQgKTsKKwkJCSAgIHU4ICpwcmlzbTJidWYsIHA4MDIxMXBzdHJkX3QgKnBzdHIsCisJCQkgICBoZmEzODR4X3QgKnByaXYpOworaW50IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgodTMyIGRpZCk7CiAKIHZvaWQgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKIAogdm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CiB2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9ucyAoaWYgc3VwcG9ydGVkKSAtLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCmluZGV4IDUzOWM0NDcuLjVhNmJhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCkBAIC01MCwxMiArNTAsNyBAQAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZwotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTYzLDEzICs1OCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgpAQCAtODIsMTk2ICs3NSwxNjkgQEAKICNpbmNsdWRlICJoZmEzODR4LmgiCiAjaW5jbHVkZSAicHJpc20ybWdtdC5oIgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgQ29uc3RhbnRzICovCisjZGVmaW5lIE1JQl9UTVBfTUFYTEVOICAgIDIwMAkvKiBNYXggbGVuZ3RoIG9mIFJJRCByZWNvcmQgKGluIGJ5dGVzKS4gKi8KIAotI2RlZmluZSBNSUJfVE1QX01BWExFTiAgICAyMDAgICAgLyogTWF4IGxlbmd0aCBvZiBSSUQgcmVjb3JkIChpbiBieXRlcykuICovCisjZGVmaW5lICBGX1NUQSAgICAgICAgMHgxCS8qIE1JQiBpcyBzdXBwb3J0ZWQgb24gc3RhdGlvbnMuICovCisjZGVmaW5lICBGX1JFQUQgICAgICAgMHgyCS8qIE1JQiBtYXkgYmUgcmVhZC4gKi8KKyNkZWZpbmUgIEZfV1JJVEUgICAgICAweDQJLyogTUlCIG1heSBiZSB3cml0dGVuLiAqLwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgVHlwZXMgKi8KLQotI2RlZmluZSAgRl9TVEEgICAgICAgIDB4MSAgICAgICAgLyogTUlCIGlzIHN1cHBvcnRlZCBvbiBzdGF0aW9ucy4gKi8KLSNkZWZpbmUgIEZfUkVBRCAgICAgICAweDIgICAgICAgIC8qIE1JQiBtYXkgYmUgcmVhZC4gKi8KLSNkZWZpbmUgIEZfV1JJVEUgICAgICAweDQgICAgICAgIC8qIE1JQiBtYXkgYmUgd3JpdHRlbi4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgbWlicmVjCi17Ci0gICAgdTMyICAgZGlkOwotICAgIHUxNiAgIGZsYWc7Ci0gICAgdTE2ICAgcGFybTE7Ci0gICAgdTE2ICAgcGFybTI7Ci0gICAgdTE2ICAgcGFybTM7Ci0gICAgaW50ICAgICAgKCpmdW5jKShzdHJ1Y3QgbWlicmVjICAgICAgICAgICAgICAgICptaWIsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotICAgICAgICAgICAgICAgICAgICAgd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLSAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotICAgICAgICAgICAgICAgICAgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7Cit0eXBlZGVmIHN0cnVjdCBtaWJyZWMgeworCXUzMiBkaWQ7CisJdTE2IGZsYWc7CisJdTE2IHBhcm0xOworCXUxNiBwYXJtMjsKKwl1MTYgcGFybTM7CisJaW50ICgqZnVuYykgKHN0cnVjdCBtaWJyZWMgKm1pYiwKKwkJICAgICBpbnQgaXNnZXQsCisJCSAgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkgICAgIGhmYTM4NHhfdCAqaHcsCisJCSAgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpOwogfSBtaWJyZWNfdDsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cihtaWJyZWNfdCAqbWliLAorCQkJCSAgIGludCBpc2dldCwKKwkJCQkgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgaGZhMzg0eF90ICpodywKKwkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMihtaWJyZWNfdCAqbWliLAorCQkJICAgIGludCBpc2dldCwKKwkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCSAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcobWlicmVjX3QgKm1pYiwKKwkJCSAgaW50IGlzZ2V0LAorCQkJICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkgIGhmYTM4NHhfdCAqaHcsCisJCQkgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZygKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK3N0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkobWlicmVjX3QgKm1pYiwKKwkJCQkgICBpbnQgaXNnZXQsCisJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIGhmYTM4NHhfdCAqaHcsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZChtaWJyZWNfdCAqbWliLAorCQkJCSAgICBpbnQgaXNnZXQsCisJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZCgKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK3N0YXRpYyBpbnQgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZChtaWJyZWNfdCAqbWliLAorCQkJCQlpbnQgaXNnZXQsCisJCQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJaGZhMzg0eF90ICpodywKKwkJCQkJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJCXZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CitzdGF0aWMgaW50IHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkKG1pYnJlY190ICptaWIsCisJCQkJCSAgICBpbnQgaXNnZXQsCisJCQkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCSAgICBoZmEzODR4X3QgKmh3LAorCQkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJCSAgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCgKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKLQotc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdihtaWJyZWNfdCAqbWliLAorCQkJICBpbnQgaXNnZXQsCisJCQkgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCSAgaGZhMzg0eF90ICpodywKKwkJCSAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpOwogCiBzdGF0aWMgbWlicmVjX3QgbWlidGFiW10gPSB7CiAKLSAgICAvKiBkb3QxMXNtdCBNSUIncyAqLwotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwLAotICAgICAgICAgIEZfU1RBIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMCwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxLAotICAgICAgICAgIEZfU1RBIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMSwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyLAotICAgICAgICAgIEZfU1RBIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMiwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzLAotICAgICAgICAgIEZfU1RBIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMywgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAotICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCBIRkEzODR4X1dFUEZMQUdTX1BSSVZJTlZPS0VELCAwLAotICAgICAgICAgIHByaXNtMm1pYl9wcml2YWN5aW52b2tlZCB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgSEZBMzg0eF9XRVBGTEFHU19FWENMVURFLCAwLAotICAgICAgICAgIHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQgfSwKKwkvKiBkb3QxMXNtdCBNSUIncyAqLworCXtESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTAsCisJIEZfU1RBIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTAsIDAsIDAsCisJIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5fSwKKwl7RElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxLAorCSBGX1NUQSB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkxLCAwLCAwLAorCSBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleX0sCisJe0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MiwKKwkgRl9TVEEgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMiwgMCwgMCwKKwkgcHJpc20ybWliX3dlcGRlZmF1bHRrZXl9LAorCXtESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTMsCisJIEZfU1RBIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTMsIDAsIDAsCisJIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5fSwKKwl7RElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIEhGQTM4NHhfV0VQRkxBR1NfUFJJVklOVk9LRUQsIDAsCisJIHByaXNtMm1pYl9wcml2YWN5aW52b2tlZH0sCisJe0RJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKKwkgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAorCXtESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIEhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERSwgMCwKKwkgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZH0sCiAKLSAgICAvKiBkb3QxMW1hYyBNSUIncyAqLworCS8qIGRvdDExbWFjIE1JQidzICovCiAKLSAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTUFDQWRkcmVzcywKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCi0gICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKLSAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAotICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCi0gICAgICAgICAgSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlULCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKLSAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCi0gICAgICAgICAgSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAotICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNILCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCi0gICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAotICAgICAgICAgIEhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCXtESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1BQ0FkZHJlc3MsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCisJIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyfSwKKwl7RElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfUlRTVEhSRVNILCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKKwl7RElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQsCisJIEZfU1RBIHwgRl9SRUFELAorCSBIRkEzODR4X1JJRF9TSE9SVFJFVFJZTElNSVQsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAorCXtESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0LAorCSBGX1NUQSB8IEZfUkVBRCwKKwkgSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAorCXtESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfRlJBR1RIUkVTSCwgMCwgMCwKKwkgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGR9LAorCXtESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lLAorCSBGX1NUQSB8IEZfUkVBRCwKKwkgSEZBMzg0eF9SSURfTUFYVFhMSUZFVElNRSwgMCwgMCwKKwkgcHJpc20ybWliX3VpbnQzMn0sCiAKLSAgICAvKiBkb3QxMXBoeSBNSUIncyAqLworCS8qIGRvdDExcGh5IE1JQidzICovCiAKLSAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAotICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKLSAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWwsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAotICAgICAgICAgIEhGQTM4NHhfUklEX1RYUE9XRVJNQVgsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCXtESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCwKKwkgRl9TVEEgfCBGX1JFQUQsCisJIEhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMLCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKKwl7RElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCwKKwkgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9UWFBPV0VSTUFYLCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKIAotICAgIC8qIHAyU3RhdGljIE1JQidzICovCisJLyogcDJTdGF0aWMgTUlCJ3MgKi8KIAotICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGUsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAotICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKwl7RElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGUsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAogCi0gICAgLyogcDJNQUMgTUlCJ3MgKi8KKwkvKiBwMk1BQyBNSUIncyAqLwogCi0gICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAotICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCXtESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlLAorCSBGX1NUQSB8IEZfUkVBRCwKKwkgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURSwgMCwgMCwKKwkgcHJpc20ybWliX3VpbnQzMn0sCiAKLSAgICAvKiBBbmQgZmluYWxseSwgbG54IG1pYnMgKi8KLSAgICB7IERJRG1pYl9sbnhfbG54Q29uZmlnVGFibGVfbG54UlNOQUlFLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCi0gICAgeyAwLCAwLCAwLCAwLCAwLCBOVUxMfX07Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCS8qIEFuZCBmaW5hbGx5LCBsbnggbWlicyAqLworCXtESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRSwKKwkgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLCAwLCAwLAorCSBwcmlzbTJtaWJfcHJpdn0sCisJezAsIDAsIDAsIDAsIDAsIE5VTEx9Cit9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0CkBAIC0yOTUsMzIgKzI2MSwzMCBAQAogCiBpbnQgcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JaW50CQkJcmVzdWx0LCBpc2dldDsKLQltaWJyZWNfdAkJKm1pYjsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQgcmVzdWx0LCBpc2dldDsKKwltaWJyZWNfdCAqbWliOwogCi0JdTE2CQkJd2hpY2g7CisJdTE2IHdoaWNoOwogCi0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CSptc2cgPSBtc2dwOwotCXA4MDIxMWl0ZW1kX3QJCQkqbWliaXRlbTsKLQotCURCRkVOVEVSOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnID0gbXNncDsKKwlwODAyMTFpdGVtZF90ICptaWJpdGVtOwogCiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCiAJLyoKLQkqKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBBY2Nlc3MgUG9pbnQgb3IgYSBzdGF0aW9uLgotCSovCisJICoqIERldGVybWluZSBpZiB0aGlzIGlzIGFuIEFjY2VzcyBQb2ludCBvciBhIHN0YXRpb24uCisJICovCiAKIAl3aGljaCA9IEZfU1RBOwogCiAJLyoKLQkqKiBGaW5kIHRoZSBNSUIgaW4gdGhlIE1JQiB0YWJsZS4gIE5vdGUgdGhhdCBhIE1JQiBtYXkgYmUgaW4gdGhlCi0JKiogdGFibGUgdHdpY2UuLi5vbmNlIGZvciBhbiBBUCBhbmQgb25jZSBmb3IgYSBzdGF0aW9uLiAgTWFrZSBzdXJlCi0JKiogdG8gZ2V0IHRoZSBjb3JyZWN0IG9uZS4gIE5vdGUgdGhhdCBESUQ9MCBtYXJrcyB0aGUgZW5kIG9mIHRoZQotCSoqIE1JQiB0YWJsZS4KLQkqLworCSAqKiBGaW5kIHRoZSBNSUIgaW4gdGhlIE1JQiB0YWJsZS4gIE5vdGUgdGhhdCBhIE1JQiBtYXkgYmUgaW4gdGhlCisJICoqIHRhYmxlIHR3aWNlLi4ub25jZSBmb3IgYW4gQVAgYW5kIG9uY2UgZm9yIGEgc3RhdGlvbi4gIE1ha2Ugc3VyZQorCSAqKiB0byBnZXQgdGhlIGNvcnJlY3Qgb25lLiAgTm90ZSB0aGF0IERJRD0wIG1hcmtzIHRoZSBlbmQgb2YgdGhlCisJICoqIE1JQiB0YWJsZS4KKwkgKi8KIAogCW1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtc2ctPm1pYmF0dHJpYnV0ZS5kYXRhOwogCkBAIC0zMzQsNTggKzI5OCw1NSBAQAogCX0KIAogCS8qCi0JKiogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSAibWliZ2V0IiBvciBhICJtaWJzZXQiLiAgSWYgdGhpcyBpcyBhCi0JKiogIm1pYmdldCIsIHRoZW4gbWFrZSBzdXJlIHRoYXQgdGhlIE1JQiBtYXkgYmUgcmVhZC4gIE90aGVyd2lzZSwKLQkqKiB0aGlzIGlzIGEgIm1pYnNldCIgc28gbWFrZSBtYWtlIHN1cmUgdGhhdCB0aGUgTUlCIG1heSBiZSB3cml0dGVuLgotCSovCisJICoqIERldGVybWluZSBpZiB0aGlzIGlzIGEgIm1pYmdldCIgb3IgYSAibWlic2V0Ii4gIElmIHRoaXMgaXMgYQorCSAqKiAibWliZ2V0IiwgdGhlbiBtYWtlIHN1cmUgdGhhdCB0aGUgTUlCIG1heSBiZSByZWFkLiAgT3RoZXJ3aXNlLAorCSAqKiB0aGlzIGlzIGEgIm1pYnNldCIgc28gbWFrZSBtYWtlIHN1cmUgdGhhdCB0aGUgTUlCIG1heSBiZSB3cml0dGVuLgorCSAqLwogCiAJaXNnZXQgPSAobXNnLT5tc2djb2RlID09IERJRG1zZ19kb3QxMXJlcV9taWJnZXQpOwogCiAJaWYgKGlzZ2V0KSB7CiAJCWlmICghKG1pYi0+ZmxhZyAmIEZfUkVBRCkpIHsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9nZXRfd3JpdGVvbmx5X21pYjsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9nZXRfd3JpdGVvbmx5X21pYjsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghKG1pYi0+ZmxhZyAmIEZfV1JJVEUpKSB7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfc2V0X3JlYWRvbmx5X21pYjsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9zZXRfcmVhZG9ubHlfbWliOwogCQkJZ290byBkb25lOwogCQl9CiAJfQogCiAJLyoKLQkqKiBFeGVjdXRlIHRoZSBNSUIgZnVuY3Rpb24uICBJZiB0aGluZ3Mgd29ya2VkIG9rYXksIHRoZW4gbWFrZQotCSoqIHN1cmUgdGhhdCB0aGUgTUlCIGZ1bmN0aW9uIGFsc28gd29ya2VkIG9rYXkuICBJZiBzbywgYW5kIHRoaXMKLQkqKiBpcyBhICJtaWJnZXQiLCB0aGVuIHRoZSBzdGF0dXMgdmFsdWUgbXVzdCBiZSBzZXQgZm9yIGJvdGggdGhlCi0JKiogIm1pYmF0dHJpYnV0ZSIgcGFyYW1ldGVyIGFuZCB0aGUgbWliIGl0ZW0gd2l0aGluIHRoZSBkYXRhCi0JKiogcG9ydGlvbiBvZiB0aGUgIm1pYmF0dHJpYnV0ZSIuCi0JKi8KKwkgKiogRXhlY3V0ZSB0aGUgTUlCIGZ1bmN0aW9uLiAgSWYgdGhpbmdzIHdvcmtlZCBva2F5LCB0aGVuIG1ha2UKKwkgKiogc3VyZSB0aGF0IHRoZSBNSUIgZnVuY3Rpb24gYWxzbyB3b3JrZWQgb2theS4gIElmIHNvLCBhbmQgdGhpcworCSAqKiBpcyBhICJtaWJnZXQiLCB0aGVuIHRoZSBzdGF0dXMgdmFsdWUgbXVzdCBiZSBzZXQgZm9yIGJvdGggdGhlCisJICoqICJtaWJhdHRyaWJ1dGUiIHBhcmFtZXRlciBhbmQgdGhlIG1pYiBpdGVtIHdpdGhpbiB0aGUgZGF0YQorCSAqKiBwb3J0aW9uIG9mIHRoZSAibWliYXR0cmlidXRlIi4KKwkgKi8KIAotCXJlc3VsdCA9IG1pYi0+ZnVuYyhtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLAotCQkJICAgKHZvaWQgKikgbWliaXRlbS0+ZGF0YSk7CisJcmVzdWx0ID0gbWliLT5mdW5jKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csICh2b2lkICopbWliaXRlbS0+ZGF0YSk7CiAKIAlpZiAobXNnLT5yZXN1bHRjb2RlLmRhdGEgPT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKIAkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLCAiZ2V0L3NldCBmYWlsdXJlLCByZXN1bHQ9JWRcbiIsCi0JCQkJCXJlc3VsdCk7CisJCQlwcl9kZWJ1ZygiZ2V0L3NldCBmYWlsdXJlLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQkgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCX0gZWxzZSB7CiAJCQlpZiAoaXNnZXQpIHsKIAkJCQltc2ctPm1pYmF0dHJpYnV0ZS5zdGF0dXMgPQotCQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAkJCQltaWJpdGVtLT5zdGF0dXMgPQotCQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAkJCX0KIAkJfQogCX0KIAogZG9uZToKLQlEQkZFWElUOwotCi0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQxMywzMSArMzc0LDI5IEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cihtaWJyZWNfdCAqbWliLAorCQkJCSAgIGludCBpc2dldCwKKwkJCQkgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgaGZhMzg0eF90ICpodywKKwkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkgICB2b2lkICpkYXRhKQogewotCWludCAgICAgICAgICAgIHJlc3VsdDsKLQlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgZGF0YTsKLQl1OCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CisJdTggYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CiAKIAlpZiAoaXNnZXQpIHsKLQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbWliLT5wYXJtMik7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKIAkJcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKGJ5dGVidWYsIHBzdHIsIG1pYi0+cGFybTIpOwogCX0gZWxzZSB7CiAJCW1lbXNldChieXRlYnVmLCAwLCBtaWItPnBhcm0yKTsKIAkJcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKGJ5dGVidWYsIHBzdHIpOwotCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwkJcmVzdWx0ID0KKwkJICAgIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIG1pYi0+cGFybTIpOwogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjUsMzcgKzQyNCwyNiBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyKG1pYnJlY190ICptaWIsCisJCQkgICAgaW50IGlzZ2V0LAorCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCSAgICBoZmEzODR4X3QgKmh3LAorCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKQogewotCWludCAgICAgcmVzdWx0OwotCXUzMiAgKnVpbnQzMiA9ICh1MzIqKSBkYXRhOwotCXU4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07Ci0JdTE2ICAqd29yZGJ1ZiA9ICh1MTYqKSBieXRlYnVmOwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdDsKKwl1MzIgKnVpbnQzMiA9ICh1MzIgKikgZGF0YTsKKwl1OCBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwl1MTYgKndvcmRidWYgPSAodTE2ICopIGJ5dGVidWY7CiAKIAlpZiAoaXNnZXQpIHsKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKIAkJKnVpbnQzMiA9ICp3b3JkYnVmOwotCQkvKiBbTVNNXSBSZW1vdmVkLCBnZXRjb25maWcxNiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBob3N0IG9yZGVyLgotCQkgKiBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZiwgdWludDMyKTsKLQkJICovCiAJfSBlbHNlIHsKLQkJLyogW01TTV0gUmVtb3ZlZCwgc2V0Y29uZmlnMTYgZXhwZWN0cyBob3N0IG9yZGVyLgotCQkgKiBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZiwgdWludDMyKTsKLQkJICovCiAJCSp3b3JkYnVmID0gKnVpbnQzMjsKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CiAJfQogCi0JREJGRVhJVDsKLQlyZXR1cm4ocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUyMyw0NiArNDcxLDM2IEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZygKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZyhtaWJyZWNfdCAqbWliLAorCQkJICBpbnQgaXNnZXQsCisJCQkgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCSAgaGZhMzg0eF90ICpodywKKwkJCSAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpCiB7Ci0JaW50ICAgICByZXN1bHQ7Ci0JdTMyICAqdWludDMyID0gKHUzMiopIGRhdGE7Ci0JdTggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKLQl1MTYgICp3b3JkYnVmID0gKHUxNiopIGJ5dGVidWY7Ci0JdTMyICBmbGFnczsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CisJdTMyICp1aW50MzIgPSAodTMyICopIGRhdGE7CisJdTggYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJdTE2ICp3b3JkYnVmID0gKHUxNiAqKSBieXRlYnVmOworCXUzMiBmbGFnczsKIAogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CiAJaWYgKHJlc3VsdCA9PSAwKSB7Ci0JCS8qIFtNU01dIFJlbW92ZWQsIGdldGNvbmZpZzE2IHJldHVybnMgdGhlIHZhbHVlIGluIGhvc3Qgb3JkZXIuCi0JCSAqIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmLCAmZmxhZ3MpOwotCQkgKi8KIAkJZmxhZ3MgPSAqd29yZGJ1ZjsKIAkJaWYgKGlzZ2V0KSB7CiAJCQkqdWludDMyID0gKGZsYWdzICYgbWliLT5wYXJtMikgPwotCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCQkgICAgUDgwMjExRU5VTV90cnV0aF90cnVlIDogUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKIAkJfSBlbHNlIHsKIAkJCWlmICgoKnVpbnQzMikgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQogCQkJCWZsYWdzIHw9IG1pYi0+cGFybTI7CiAJCQllbHNlCiAJCQkJZmxhZ3MgJj0gfm1pYi0+cGFybTI7Ci0JCQkvKiBbTVNNXSBSZW1vdmVkLCBzZXRjb25maWcxNiBleHBlY3RzIGhvc3Qgb3JkZXIuCi0JCQkgKiBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZiwgJmZsYWdzKTsKLQkJCSAqLwogCQkJKndvcmRidWYgPSBmbGFnczsKLQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgKndvcmRidWYpOworCQkJcmVzdWx0ID0KKwkJCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKIAkJfQogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01OTAsMzMgKzUyOCwyOSBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3N0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkobWlicmVjX3QgKm1pYiwKKwkJCQkgICBpbnQgaXNnZXQsCisJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIGhmYTM4NHhfdCAqaHcsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgdm9pZCAqZGF0YSkKIHsKLQlpbnQgICAgICAgICAgICByZXN1bHQ7Ci0JcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7Ci0JdTggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07Ci0JdTE2ICAgICAgICAgbGVuOwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgZGF0YTsKKwl1OCBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwl1MTYgbGVuOwogCiAJaWYgKGlzZ2V0KSB7Ci0JCXJlc3VsdCA9IDA7ICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4uICovCisJCXJlc3VsdCA9IDA7CS8qIFNob3VsZCBuZXZlciBoYXBwZW4uICovCiAJfSBlbHNlIHsKIAkJbGVuID0gKHBzdHItPmxlbiA+IDUpID8gSEZBMzg0eF9SSURfQ05GV0VQMTI4REVGQVVMVEtFWV9MRU4gOgotCQkJCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZX0xFTjsKKwkJICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlfTEVOOwogCQltZW1zZXQoYnl0ZWJ1ZiwgMCwgbGVuKTsKIAkJcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKGJ5dGVidWYsIHBzdHIpOwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBsZW4pOwogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02NDQsMTcgKzU3OCwxNCBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3ByaXZhY3lpbnZva2VkKAotbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKLXdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCi1oZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKLXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKLXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZChtaWJyZWNfdCAqbWliLAorCQkJCSAgICBpbnQgaXNnZXQsCisJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgIHZvaWQgKmRhdGEpCiB7Ci0JaW50ICAgICByZXN1bHQ7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0OwogCiAJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpIHsKIAkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpCkBAIC02NjUsOCArNTk2LDcgQEAKIAogCXJlc3VsdCA9IHByaXNtMm1pYl9mbGFnKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOwogCi0JREJGRVhJVDsKLQlyZXR1cm4ocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY5NCwyMiArNjI0LDE4IEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKAotbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKLXdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCi1oZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKLXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKLXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCitzdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQobWlicmVjX3QgKm1pYiwKKwkJCQkJaW50IGlzZ2V0LAorCQkJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCWhmYTM4NHhfdCAqaHcsCisJCQkJCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCQl2b2lkICpkYXRhKQogewotCWludCAgICAgcmVzdWx0OwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdDsKIAogCXJlc3VsdCA9IHByaXNtMm1pYl9mbGFnKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOwogCi0JREJGRVhJVDsKLQlyZXR1cm4ocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTczNywzMSArNjYzLDI4IEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCgKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZChtaWJyZWNfdCAqbWliLAorCQkJCQkgICAgaW50IGlzZ2V0LAorCQkJCQkgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCQkgICAgdm9pZCAqZGF0YSkKIHsKLQlpbnQgICAgIHJlc3VsdDsKLQl1MzIgICp1aW50MzIgPSAodTMyKikgZGF0YTsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CisJdTMyICp1aW50MzIgPSAodTMyICopIGRhdGE7CiAKIAlpZiAoIWlzZ2V0KQogCQlpZiAoKCp1aW50MzIpICUgMikgewotCQkJV0xBTl9MT0dfV0FSTklORygiQXR0ZW1wdCB0byBzZXQgb2RkIG51bWJlciAiCi0JCQkJCSAgIkZyYWdtZW50YXRpb25UaHJlc2hvbGRcbiIpOwotCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKLQkJCXJldHVybigwKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkF0dGVtcHQgdG8gc2V0IG9kZCBudW1iZXIgIgorCQkJICAgICAgICJGcmFnbWVudGF0aW9uVGhyZXNob2xkXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJCXJldHVybiAwOwogCQl9CiAKIAlyZXN1bHQgPSBwcmlzbTJtaWJfdWludDMyKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOwogCi0JREJGRVhJVDsKLQlyZXR1cm4ocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc4OSw0MyArNzEyLDQzIEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdihtaWJyZWNfdCAqbWliLAorCQkJICBpbnQgaXNnZXQsCisJCQkgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCSAgaGZhMzg0eF90ICpodywKKwkJCSAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpCiB7Ci0JcDgwMjExcHN0cmRfdCAgICAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJcDgwMjExcHN0cmRfdCAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CiAKLQlpbnQgIHJlc3VsdDsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CiAKIAlzd2l0Y2ggKG1pYi0+ZGlkKSB7Ci0JY2FzZSBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRTogewotCQloZmEzODR4X1dQQURhdGFfdCB3cGE7Ci0JCWlmIChpc2dldCkgewotCQkJaGZhMzg0eF9kcnZyX2dldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORldQQURBVEEsCi0JCQkJCQkodTggKikgJndwYSwgc2l6ZW9mKHdwYSkpOwotCQkJcHN0ci0+bGVuID0gaGZhMzg0eDJob3N0XzE2KHdwYS5kYXRhbGVuKTsKLQkJCW1lbWNweShwc3RyLT5kYXRhLCB3cGEuZGF0YSwgcHN0ci0+bGVuKTsKLQkJfSBlbHNlIHsKLQkJCXdwYS5kYXRhbGVuID0gaG9zdDJoZmEzODR4XzE2KHBzdHItPmxlbik7Ci0JCQltZW1jcHkod3BhLmRhdGEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7CisJY2FzZSBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRTp7CisJCQloZmEzODR4X1dQQURhdGFfdCB3cGE7CisJCQlpZiAoaXNnZXQpIHsKKwkJCQloZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAorCQkJCQkJICAgICAgIEhGQTM4NHhfUklEX0NORldQQURBVEEsCisJCQkJCQkgICAgICAgKHU4ICopJndwYSwKKwkJCQkJCSAgICAgICBzaXplb2Yod3BhKSk7CisJCQkJcHN0ci0+bGVuID0gbGUxNl90b19jcHUod3BhLmRhdGFsZW4pOworCQkJCW1lbWNweShwc3RyLT5kYXRhLCB3cGEuZGF0YSwgcHN0ci0+bGVuKTsKKwkJCX0gZWxzZSB7CisJCQkJd3BhLmRhdGFsZW4gPSBjcHVfdG9fbGUxNihwc3RyLT5sZW4pOworCQkJCW1lbWNweSh3cGEuZGF0YSwgcHN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKIAotCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKLQkJCQkodTggKikgJndwYSwgc2l6ZW9mKHdwYSkpOworCQkJCXJlc3VsdCA9CisJCQkJICAgIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsCisJCQkJCQkJICAgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKKwkJCQkJCQkgICAodTggKikmd3BhLAorCQkJCQkJCSAgIHNpemVvZih3cGEpKTsKKwkJCX0KKwkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCX0KIAlkZWZhdWx0OgotCQlXTEFOX0xPR19FUlJPUigiVW5oYW5kbGVkIERJRCAweCUwOHhcbiIsIG1pYi0+ZGlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmhhbmRsZWQgRElEIDB4JTA4eFxuIiwgbWliLT5kaWQpOwogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg0NSwxNCArNzY4LDEwIEBACiAKIHZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCiB7Ci0JREJGRU5URVI7Ci0KLQlieXRlc3RyLT5sZW4gPSBob3N0MmhmYTM4NHhfMTYoKHUxNikocHN0ci0+bGVuKSk7CisJYnl0ZXN0ci0+bGVuID0gY3B1X3RvX2xlMTYoKHUxNikgKHBzdHItPmxlbikpOwogCW1lbWNweShieXRlc3RyLT5kYXRhLCBwc3RyLT5kYXRhLCBwc3RyLT5sZW4pOwotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYQogKgpAQCAtODcwLDEzICs3ODksOSBAQAogCiB2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYSh1OCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCiB7Ci0JREJGRU5URVI7Ci0KIAltZW1jcHkoYnl0ZWFyZWEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7Ci0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIKICoKQEAgLTg5NCwxNCArODA5LDEwIEBACiAKIHZvaWQgcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCiB7Ci0JREJGRU5URVI7Ci0KLQlwc3RyLT5sZW4gPSAodTgpKGhmYTM4NHgyaG9zdF8xNigodTE2KShieXRlc3RyLT5sZW4pKSk7CisJcHN0ci0+bGVuID0gKHU4KSAobGUxNl90b19jcHUoKHUxNikgKGJ5dGVzdHItPmxlbikpKTsKIAltZW1jcHkocHN0ci0+ZGF0YSwgYnl0ZXN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIKICoKQEAgLTkxOSwyMTcgKzgzMCwxMSBAQAogCiB2b2lkIHByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cih1OCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGludCBsZW4pCiB7Ci0JREJGRU5URVI7Ci0KLQlwc3RyLT5sZW4gPSAodTgpbGVuOworCXBzdHItPmxlbiA9ICh1OCkgbGVuOwogCW1lbWNweShwc3RyLT5kYXRhLCBieXRlYXJlYSwgbGVuKTsKLQlEQkZFWElUOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQKLSoKLSogQ29udmVydCBhbiBoZmEzODR4IGludGVnZXIgaW50byBhIHdsYW4gaW50ZWdlcgotKgotKiBBcmd1bWVudHM6Ci0qCXByaXNtMmVudW0JcG9pbnRlciB0byBoZmEzODR4IGludGVnZXIKLSoJd2xhbmVudW0JcG9pbnRlciB0byBwODAyMTEgaW50ZWdlcgotKgotKiBSZXR1cm5zOgotKglOb3RoaW5nCi0qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdm9pZCBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQodTE2ICpwcmlzbTJpbnQsIHUzMiAqd2xhbmludCkKLXsKLQlEQkZFTlRFUjsKLQotCSp3bGFuaW50ID0gKHUzMiloZmEzODR4Mmhvc3RfMTYoKnByaXNtMmludCk7Ci0JREJGRVhJVDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50Ci0qCi0qIENvbnZlcnQgYSB3bGFuIGludGVnZXIgaW50byBhbiBoZmEzODR4IGludGVnZXIKLSoKLSogQXJndW1lbnRzOgotKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCi0qCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKLSoKLSogUmV0dXJuczoKLSoJTm90aGluZwotKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZvaWQgcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHUxNiAqcHJpc20yaW50LCB1MzIgKndsYW5pbnQpCi17Ci0JREJGRU5URVI7Ci0KLQkqcHJpc20yaW50ID0gaG9zdDJoZmEzODR4XzE2KCh1MTYpKCp3bGFuaW50KSk7Ci0JREJGRVhJVDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20ybWdtdF9wcmlzbTJlbnVtMnA4MDIxMWVudW0KLSoKLSogQ29udmVydCB0aGUgaGZhMzg0eCBlbnVtZXJhdGVkIGludCBpbnRvIGEgcDgwMjExIGVudW1lcmF0ZWQgaW50Ci0qCi0qIEFyZ3VtZW50czoKLSoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgotKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCi0qCXJpZAkJaGZhMzg0eCByZWNvcmQgaWQKLSoKLSogUmV0dXJuczoKLSoJTm90aGluZwotKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkIHByaXNtMm1nbXRfcHJpc20yZW51bTJwODAyMTFlbnVtKHUxNiAqcHJpc20yZW51bSwgdTMyICp3bGFuZW51bSwgdTE2IHJpZCkKLXsKLQlEQkZFTlRFUjsKLQotCS8qIEF0IHRoZSBtb21lbnQsIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzbid0Ci0JcHJlc2VudGVkIGl0c2VsZi4gQWxsIHRoZSB3bGFuIGVudW1lcmF0ZWQgdmFsdWVzIGFyZQotCWEgMS10by0xIG1hdGNoIGFnYWluc3QgdGhlIFByaXNtMiBlbnVtZXJhdGVkIHZhbHVlcyovCi0JREJGRVhJVDsKLQlyZXR1cm47Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIHByaXNtMm1nbXRfcDgwMjExZW51bTJwcmlzbTJlbnVtCi0qCi0qIENvbnZlcnQgdGhlIHA4MDIxMSBlbnVtZXJhdGVkIGludCBpbnRvIGFuIGhmYTM4NHggZW51bWVyYXRlZCBpbnQKLSoKLSogQXJndW1lbnRzOgotKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCi0qCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKLSoJcmlkCQloZmEzODR4IHJlY29yZCBpZAotKgotKiBSZXR1cm5zOgotKglOb3RoaW5nCi0qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcHJpc20ybWdtdF9wODAyMTFlbnVtMnByaXNtMmVudW0odTE2ICpwcmlzbTJlbnVtLCB1MzIgKndsYW5lbnVtLCB1MTYgcmlkKQotewotCURCRkVOVEVSOwotCi0JLyogQXQgdGhlIG1vbWVudCwgdGhlIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXNuJ3QKLQlwcmVzZW50ZWQgaXRzZWxmLiBBbGwgdGhlIHdsYW4gZW51bWVyYXRlZCB2YWx1ZXMgYXJlCi0JYSAxLXRvLTEgbWF0Y2ggYWdhaW5zdCB0aGUgUHJpc20yIGVudW1lcmF0ZWQgdmFsdWVzKi8KLQlEQkZFWElUOwotCXJldHVybjsKIH0KIAogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJtZ210X2dldF9vcHJhdGVzZXQKLSoKLSogQ29udmVydCB0aGUgaGZhMzg0eCBiaXQgYXJlYSBpbnRvIGEgd2xhbiBvY3RldCBzdHJpbmcuCi0qCi0qIEFyZ3VtZW50czoKLSoJcmF0ZQkJUHJpc20yIGJpdCBhcmVhCi0qCXBzdHIJCXdsYW4gb2N0ZXQgc3RyaW5nCi0qCi0qIFJldHVybnM6Ci0qCU5vdGhpbmcKLSoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBwcmlzbTJtZ210X2dldF9vcHJhdGVzZXQodTE2ICpyYXRlLCBwODAyMTFwc3RyZF90ICpwc3RyKQotewotCXU4CWxlbjsKLQl1OAkqZGF0YXJhdGU7Ci0KLQlEQkZFTlRFUjsKLQotCWxlbiA9IDA7Ci0JZGF0YXJhdGUgPSBwc3RyLT5kYXRhOwotCi0gCS8qIDEgTWJwcyAqLwotCWlmICggQklUMCAmICgqcmF0ZSkgKSB7Ci0JCWxlbiArPSAodTgpMTsKLQkJKmRhdGFyYXRlID0gKHU4KTI7Ci0JCWRhdGFyYXRlKys7Ci0JfQotCi0gCS8qIDIgTWJwcyAqLwotCWlmICggQklUMSAmICgqcmF0ZSkgKSB7Ci0JCWxlbiArPSAodTgpMTsKLQkJKmRhdGFyYXRlID0gKHU4KTQ7Ci0JCWRhdGFyYXRlKys7Ci0JfQotCi0gCS8qIDUuNSBNYnBzICovCi0JaWYgKCBCSVQyICYgKCpyYXRlKSApIHsKLQkJbGVuICs9ICh1OCkxOwotCQkqZGF0YXJhdGUgPSAodTgpMTE7Ci0JCWRhdGFyYXRlKys7Ci0JfQotCi0gCS8qIDExIE1icHMgKi8KLQlpZiAoIEJJVDMgJiAoKnJhdGUpICkgewotCQlsZW4gKz0gKHU4KTE7Ci0JCSpkYXRhcmF0ZSA9ICh1OCkyMjsKLQkJZGF0YXJhdGUrKzsKLQl9Ci0KLQlwc3RyLT5sZW4gPSBsZW47Ci0KLQlEQkZFWElUOwotCXJldHVybjsKLX0KIAogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJtZ210X3NldF9vcHJhdGVzZXQKLSoKLSogQ29udmVydCB0aGUgd2xhbiBvY3RldCBzdHJpbmcgaW50byBhbiBoZmEzODR4IGJpdCBhcmVhLgotKgotKiBBcmd1bWVudHM6Ci0qCXJhdGUJCVByaXNtMiBiaXQgYXJlYQotKglwc3RyCQl3bGFuIG9jdGV0IHN0cmluZwotKgotKiBSZXR1cm5zOgotKglOb3RoaW5nCi0qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcHJpc20ybWdtdF9zZXRfb3ByYXRlc2V0KHUxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cikKLXsKLQl1OAkqZGF0YXJhdGU7Ci0JaW50CWk7Ci0KLQlEQkZFTlRFUjsKLQotCSpyYXRlID0gMDsKLQotCWRhdGFyYXRlID0gcHN0ci0+ZGF0YTsKLQotCWZvciAoIGk9MDsgaSA8IHBzdHItPmxlbjsgaSsrLCBkYXRhcmF0ZSsrICkgewotCQlzd2l0Y2ggKCpkYXRhcmF0ZSkgewotCQljYXNlIDI6IC8qIDEgTWJwcyAqLwotCQkJKnJhdGUgfD0gQklUMDsKLQkJCWJyZWFrOwotCQljYXNlIDQ6IC8qIDIgTWJwcyAqLwotCQkJKnJhdGUgfD0gQklUMTsKLQkJCWJyZWFrOwotCQljYXNlIDExOiAvKiA1LjUgTWJwcyAqLwotCQkJKnJhdGUgfD0gQklUMjsKLQkJCWJyZWFrOwotCQljYXNlIDIyOiAvKiAxMSBNYnBzICovCi0JCQkqcmF0ZSB8PSBCSVQzOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXTEFOX0xPR19ERUJVRygxLCAiVW5yZWNvZ2luemVkIFJhdGUgb2YgJWRcbiIsCi0JCQkJKmRhdGFyYXRlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JREJGRVhJVDsKLQlyZXR1cm47Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCmluZGV4IGIyNzljOTcuLjlkNTdmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCkBAIC01MCwxMCArNTAsNiBAQAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZwotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC02NSwxMyArNjEsMTUgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotCi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogUHJvamVjdCBJbmNsdWRlcyAqLwpAQCAtODgsMTExICs4Niw3OCBAQAogI2luY2x1ZGUgImhmYTM4NHguaCIKICNpbmNsdWRlICJwcmlzbTJtZ210LmgiCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBDb25zdGFudHMgKi8KKyNkZWZpbmUgd2xhbl9oZXhjaGFyKHgpICgoKHgpIDwgMHgwYSkgPyAoJzAnICsgKHgpKSA6ICgnYScgKyAoKHgpIC0gMHgwYSkpKQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisvKiBDcmVhdGUgYSBzdHJpbmcgb2YgcHJpbnRhYmxlIGNoYXJzIGZyb20gc29tZXRoaW5nIHRoYXQgbWlnaHQgbm90IGJlICovCisvKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHN0ciBiZSA0KmxlbiArIDEgYnl0ZXMgbG9uZyAqLworI2RlZmluZSB3bGFuX21rcHJpbnRzdHIoYnVmLCBidWZsZW4sIHN0ciwgc3RybGVuKSBcCit7IFwKKwlpbnQgaSA9IDA7IFwKKwlpbnQgaiA9IDA7IFwKKwltZW1zZXQoc3RyLCAwLCAoc3RybGVuKSk7IFwKKwlmb3IgKGkgPSAwOyBpIDwgKGJ1Zmxlbik7IGkrKykgeyBcCisJCWlmIChpc3ByaW50KChidWYpW2ldKSkgeyBcCisJCQkoc3RyKVtqXSA9IChidWYpW2ldOyBcCisJCQlqKys7IFwKKwkJfSBlbHNlIHsgXAorCQkJKHN0cilbal0gPSAnXFwnOyBcCisJCQkoc3RyKVtqKzFdID0gJ3gnOyBcCisJCQkoc3RyKVtqKzJdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4ZjApID4+IDQpOyBcCisJCQkoc3RyKVtqKzNdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4MGYpKTsgXAorCQkJaiArPSA0OyBcCisJCX0gXAorCX0gXAorfQogCiBzdGF0aWMgY2hhciAqZGV2X2luZm8gPSAicHJpc20yX3VzYiI7Ci0KIHN0YXRpYyB3bGFuZGV2aWNlX3QgKmNyZWF0ZV93bGFuKHZvaWQpOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogLS1Nb2R1bGUgUGFyYW1ldGVycyAqLworaW50IHByaXNtMl9yZXNldF9ob2xkdGltZSA9IDMwOwkvKiBSZXNldCBob2xkIHRpbWUgaW4gbXMgKi8KK2ludCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSA9IDEwMDsJLyogUmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMgKi8KIAotaW50ICAgICAgcHJpc20yX3Jlc2V0X2hvbGR0aW1lPTMwOwkvKiBSZXNldCBob2xkIHRpbWUgaW4gbXMgKi8KLWludAkgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWU9MTAwOwkvKiBSZXNldCBzZXR0bGUgdGltZSBpbiBtcyAqLworc3RhdGljIGludCBwcmlzbTJfZG9yZXNldCA9IDA7CS8qIERvIGEgcmVzZXQgYXQgaW5pdD8gKi8KIAotc3RhdGljIGludAlwcmlzbTJfZG9yZXNldD0wOwkJLyogRG8gYSByZXNldCBhdCBpbml0PyAqLwotCi0jaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCi1pbnQgcHJpc20yX2RlYnVnPTA7Ci1tb2R1bGVfcGFyYW0oIHByaXNtMl9kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocHJpc20yX2RlYnVnLCAicHJpc20yIGRlYnVnZ2luZyIpOwotI2VuZGlmCi0KLW1vZHVsZV9wYXJhbSggcHJpc20yX2RvcmVzZXQsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0ocHJpc20yX2RvcmVzZXQsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9kb3Jlc2V0LCAiSXNzdWUgYSByZXNldCBvbiBpbml0aWFsaXphdGlvbiIpOwogCi1tb2R1bGVfcGFyYW0oIHByaXNtMl9yZXNldF9ob2xkdGltZSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9yZXNldF9ob2xkdGltZSwgInJlc2V0IGhvbGQgdGltZSBpbiBtcyIpOwotbW9kdWxlX3BhcmFtKCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCAicmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMiKTsKK21vZHVsZV9wYXJhbShwcmlzbTJfcmVzZXRfaG9sZHRpbWUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9yZXNldF9ob2xkdGltZSwgInJlc2V0IGhvbGQgdGltZSBpbiBtcyIpOworbW9kdWxlX3BhcmFtKHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgInJlc2V0IHNldHRsZSB0aW1lIGluIG1zIik7CiAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworc3RhdGljIGludCBwcmlzbTJzdGFfb3Blbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludCBwcmlzbTJzdGFfY2xvc2Uod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludCBwcmlzbTJzdGFfdHhmcmFtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCSAgICAgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CitzdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworc3RhdGljIGludCBwcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQgcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgaW50IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBuZXRkZXZpY2VfdCAqZGV2KTsKIAotc3RhdGljIGludAlwcmlzbTJzdGFfb3Blbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotc3RhdGljIGludAlwcmlzbTJzdGFfY2xvc2Uod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYgKTsKLXN0YXRpYyBpbnQgICAgICBwcmlzbTJzdGFfdHhmcmFtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Ci1zdGF0aWMgaW50CXByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOwotc3RhdGljIGludAlwcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXN0YXRpYyBpbnQJcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci1zdGF0aWMgaW50ICAgICAgcHJpc20yc3RhX3NldG11bHRpY2FzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCi0JCQkJICAgICAgIG5ldGRldmljZV90ICpkZXYpOwotCi1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX3RhbGxpZXMoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkICAgICBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cygKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9zY2FucmVzdWx0cygKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9jaGluZm9yZXN1bHRzKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfYXV0aHJlcSgKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCgKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIGRtcG1lbQotKgotKiBEZWJ1ZyB1dGlsaXR5IGZ1bmN0aW9uIHRvIGR1bXAgbWVtb3J5IHRvIHRoZSBrZXJuZWwgZGVidWcgbG9nLgotKgotKiBBcmd1bWVudHM6Ci0qCWJ1ZglwdHIgZGF0YSB3ZSB3YW50IGR1bXBlZAotKglsZW4JbGVuZ3RoIG9mIGRhdGEKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKiBTaWRlIGVmZmVjdHM6Ci0qCi0qIENhbGwgY29udGV4dDoKLSoJcHJvY2VzcyB0aHJlYWQKLSoJaW50ZXJydXB0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWlubGluZSB2b2lkIGRtcG1lbSh2b2lkICpidWYsIGludCBuKQotewotCWludCBjOwotCWZvciAoIGM9IDA7IGMgPCBuOyBjKyspIHsKLQkJaWYgKCAoYyAlIDE2KSA9PSAwICkgcHJpbnRrKEtFUk5fREVCVUciZG1wWyVkXTogIiwgYyk7Ci0JCXByaW50aygiJTAyeCAiLCAoKHU4KilidWYpW2NdKTsKLQkJaWYgKCAoYyAlIDE2KSA9PSAxNSApIHByaW50aygiXG4iKTsKLQl9Ci0JaWYgKCAoYyAlIDE2KSAhPSAwICkgcHJpbnRrKCJcbiIpOwotfQotCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfbGlua3N0YXR1cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2F1dGhyZXEod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9wc3VzZXJjbnQod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfb3BlbgpAQCAtMjE3LDggKzE4Miw2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgcHJpc20yc3RhX29wZW4od2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCURCRkVOVEVSOwotCiAJLyogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgZWxzZS4KIAkgKiBUaGUgc2V0dXAgb2YgdGhlIE1BQyBzaG91bGQgYmUgc3Vic2VxdWVudGx5IGNvbXBsZXRlZCB2aWEKIAkgKiB0aGUgbWxtZSBjb21tYW5kcy4KQEAgLTIyNywxMSArMTkwLDkgQEAKIAkgKiBmcmFtZXMgYmVjYXVzZSBvZiBkZXYtPmZsYWdzJklGRl9VUCBpcyB0cnVlLgogCSAqLwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2Nsb3NlCiAqCkBAIC0yNTUsMTkgKzIxNiwxNSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9jbG9zZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JREJGRU5URVI7Ci0KIAkvKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSB0byBkbyBhbnl0aGluZyBlbHNlLgogCSAqIEhpZ2hlciBsYXllcnMga25vdyB3ZSdyZSBub3QgcmVhZHkgZnJvbSBkZXYtPnN0YXJ0PT0wIGFuZAogCSAqIGRldi0+dGJ1c3k9PTEuICBPdXIgcnggcGF0aCBrbm93cyB0byBub3QgcGFzcyB1cCByZWNlaXZlZAogCSAqIGZyYW1lcyBiZWNhdXNlIG9mIGRldi0+ZmxhZ3MmSUZGX1VQIGlzIGZhbHNlLgogCSAqLwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX3Jlc2V0CiAqCkBAIC0yODUsMTQgKzI0MiwxMSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MgdGhyZWFkCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYgKQorc3RhdGljIHZvaWQgcHJpc20yc3RhX3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlEQkZFTlRFUjsKLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX3R4ZnJhbWUKICoKQEAgLTMxOCwyMiArMjcyLDIwIEBACiAJCQkgICAgIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKIAkJCSAgICAgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKIHsKLQloZmEzODR4X3QJCSpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCWludAkJCXJlc3VsdDsKLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCWludCByZXN1bHQ7CiAKIAkvKiBJZiBuZWNlc3NhcnksIHNldCB0aGUgODAyLjExIFdFUCBiaXQgKi8KLQlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiAoSE9TVFdFUF9QUklWQUNZSU5WT0tFRCB8IEhPU1RXRVBfRU5DUllQVCkpID09IEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpIHsKLQkJcDgwMjExX2hkci0+YTMuZmMgfD0gaG9zdDJpZWVlMTYoV0xBTl9TRVRfRkNfSVNXRVAoMSkpOworCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIChIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEIHwgSE9TVFdFUF9FTkNSWVBUKSkgPT0KKwkgICAgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgeworCQlwODAyMTFfaGRyLT5hMy5mYyB8PSBjcHVfdG9fbGUxNihXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CiAJfQogCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaHcsIHNrYiwgcDgwMjExX2hkciwgcDgwMjExX3dlcCk7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9tbG1lcmVxdWVzdAogKgpAQCAtMzYwLDEwOSArMzEyLDExMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CiAKIAlpbnQgcmVzdWx0ID0gMDsKLQlEQkZFTlRFUjsKIAotCXN3aXRjaCggbXNnLT5tc2djb2RlICkKLQl7Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfbWliZ2V0IDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWliZ2V0IHJlcXVlc3RcbiIpOworCXN3aXRjaCAobXNnLT5tc2djb2RlKSB7CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWliZ2V0OgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWliZ2V0IHJlcXVlc3RcbiIpOwogCQlyZXN1bHQgPSBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0IDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWlic2V0IHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYnNldDoKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1pYnNldCByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwotCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW4gOgotCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBzY2FuIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW46CisJCXByX2RlYnVnKCJSZWNlaXZlZCBzY2FuIHJlcXVlc3RcbiIpOwogCQlyZXN1bHQgPSBwcmlzbTJtZ210X3NjYW4od2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgc2Nhbl9yZXN1bHRzIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0czoKKwkJcHJfZGVidWcoIlJlY2VpdmVkIHNjYW5fcmVzdWx0cyByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfc3RhcnQgOgotCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHN0YXJ0IHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3N0YXJ0OgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBzdGFydCByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9zdGFydCh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQkvKgotCSAqIFByaXNtMiBzcGVjaWZpYyBtZXNzYWdlcwotCSAqLwotICAgICAgIAljYXNlIERJRG1zZ19wMnJlcV9yZWFkcGRhIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByZWFkcGRhIHJlcXVlc3RcbiIpOworCQkvKgorCQkgKiBQcmlzbTIgc3BlY2lmaWMgbWVzc2FnZXMKKwkJICovCisJY2FzZSBESURtc2dfcDJyZXFfcmVhZHBkYToKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1sbWUgcmVhZHBkYSByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9yZWFkcGRhKHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwotCWNhc2UgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByYW1kbF9zdGF0ZSByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZToKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1sbWUgcmFtZGxfc3RhdGUgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfc3RhdGUod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGUgOgotCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJhbWRsX3dyaXRlIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlOgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSByYW1kbF93cml0ZSByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3N0YXRlIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGU6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIGZsYXNoZGxfc3RhdGUgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3dyaXRlIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGU6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIGZsYXNoZGxfd3JpdGUgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQkvKgotCSAqIExpbnV4IHNwZWNpZmljIG1lc3NhZ2VzCi0JICovCi0JY2FzZSBESURtc2dfbG54cmVxX2hvc3R3ZXAgOgotCQlicmVhazsgICAvLyBpZ25vcmUgbWUuCi0gICAgICAgIGNhc2UgRElEbXNnX2xueHJlcV9pZnN0YXRlIDoKKwkJLyoKKwkJICogTGludXggc3BlY2lmaWMgbWVzc2FnZXMKKwkJICovCisJY2FzZSBESURtc2dfbG54cmVxX2hvc3R3ZXA6CisJCWJyZWFrOwkJLyogaWdub3JlIG1lLiAqLworCWNhc2UgRElEbXNnX2xueHJlcV9pZnN0YXRlOgogCQl7Ci0JCXA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90CSppZnN0YXRlbXNnOwotICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgaWZzdGF0ZSByZXF1ZXN0XG4iKTsKLQkJaWZzdGF0ZW1zZyA9IChwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdCopbXNnOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIGlmc3RhdGVtc2ctPmlmc3RhdGUuZGF0YSk7Ci0JCWlmc3RhdGVtc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0KLQkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQkJaWZzdGF0ZW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gcmVzdWx0OwotCQlyZXN1bHQgPSAwOworCQkJcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3QgKmlmc3RhdGVtc2c7CisJCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBpZnN0YXRlIHJlcXVlc3RcbiIpOworCQkJaWZzdGF0ZW1zZyA9IChwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdCAqKSBtc2c7CisJCQlyZXN1bHQgPQorCQkJICAgIHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsCisJCQkJCSAgICAgIGlmc3RhdGVtc2ctPmlmc3RhdGUuZGF0YSk7CisJCQlpZnN0YXRlbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9CisJCQkgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJaWZzdGF0ZW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gcmVzdWx0OworCQkJcmVzdWx0ID0gMDsKIAkJfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmIDoKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHdsYW5zbmlmZiByZXF1ZXN0XG4iKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwcmlzbTJtZ210X3dsYW5zbmlmZih3bGFuZGV2LCBtc2cpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCWNhc2UgRElEbXNnX2xueHJlcV9hdXRvam9pbiA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgYXV0b2pvaW4gcmVxdWVzdFxuIik7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2xueHJlcV93bGFuc25pZmY6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIHdsYW5zbmlmZiByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfbG54cmVxX2F1dG9qb2luOgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBhdXRvam9pbiByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXRvam9pbih3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQljYXNlIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5OiB7Ci0JCXA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QgKnF1YWxtc2c7CisJY2FzZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eTp7CisJCQlwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICpxdWFsbXNnOwogCi0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIGNvbW1zcXVhbGl0eSByZXF1ZXN0XG4iKTsKKwkJCXByX2RlYnVnKCJSZWNlaXZlZCBjb21tc3F1YWxpdHkgcmVxdWVzdFxuIik7CiAKLQkJcXVhbG1zZyA9IChwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90KikgbXNnOworCQkJcXVhbG1zZyA9IChwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICopIG1zZzsKIAotCQlxdWFsbXNnLT5saW5rLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQkJcXVhbG1zZy0+bGV2ZWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCQlxdWFsbXNnLT5ub2lzZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQlxdWFsbXNnLT5saW5rLnN0YXR1cyA9CisJCQkgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJcXVhbG1zZy0+bGV2ZWwuc3RhdHVzID0KKwkJCSAgICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQlxdWFsbXNnLT5ub2lzZS5zdGF0dXMgPQorCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAorCQkJcXVhbG1zZy0+bGluay5kYXRhID0KKwkJCSAgICBsZTE2X3RvX2NwdShody0+cXVhbC5DUV9jdXJyQlNTKTsKKwkJCXF1YWxtc2ctPmxldmVsLmRhdGEgPQorCQkJICAgIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFTTF9jdXJyQlNTKTsKKwkJCXF1YWxtc2ctPm5vaXNlLmRhdGEgPQorCQkJICAgIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFOTF9jdXJyRkMpOwogCi0JCXF1YWxtc2ctPmxpbmsuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5DUV9jdXJyQlNTKTsKLQkJcXVhbG1zZy0+bGV2ZWwuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BU0xfY3VyckJTUyk7Ci0JCXF1YWxtc2ctPm5vaXNlLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQU5MX2N1cnJGQyk7Ci0KLQkJYnJlYWs7Ci0JfQorCQkJYnJlYWs7CisJCX0KIAlkZWZhdWx0OgotCQlXTEFOX0xPR19XQVJOSU5HKCJVbmtub3duIG1nbXQgcmVxdWVzdCBtZXNzYWdlIDB4JTA4eCIsIG1zZy0+bXNnY29kZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gbWdtdCByZXF1ZXN0IG1lc3NhZ2UgMHglMDh4IiwKKwkJICAgICAgIG1zZy0+bXNnY29kZSk7CiAJCWJyZWFrOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2lmc3RhdGUKICoKQEAgLTQ4NiwxNiArNDQyLDE0IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHUzMiBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBpZnN0YXRlKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQl1MzIgCQkJcmVzdWx0OwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJdTMyIHJlc3VsdDsKIAogCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCi0JV0xBTl9MT0dfREVCVUcoMiwgIkN1cnJlbnQgTVNEIHN0YXRlKCVkKSwgcmVxdWVzdGluZyglZClcbiIsCi0JICAgICAgICAgICAgICAgICAgd2xhbmRldi0+bXNkc3RhdGUsIGlmc3RhdGUpOwotCXN3aXRjaCAoaWZzdGF0ZSkKLQl7CisJcHJfZGVidWcoIkN1cnJlbnQgTVNEIHN0YXRlKCVkKSwgcmVxdWVzdGluZyglZClcbiIsCisJICAgICAgIHdsYW5kZXYtPm1zZHN0YXRlLCBpZnN0YXRlKTsKKwlzd2l0Y2ggKGlmc3RhdGUpIHsKIAljYXNlIFA4MDIxMUVOVU1faWZzdGF0ZV9md2xvYWQ6CiAJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKIAkJY2FzZSBXTEFOX01TRF9IV1BSRVNFTlQ6CkBAIC01MDQsMTIgKzQ1OCwxMiBAQAogCQkJICogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlK2RyaXZlciBzdWZmaWNpZW50bHkKIAkJCSAqIGZvciBmaXJtd2FyZSBsb2FkaW5nLgogCQkJICovCi0JCQlpZiAoKHJlc3VsdD1oZmEzODR4X2RydnJfc3RhcnQoaHcpKSkgewotCQkJCVdMQU5fTE9HX0VSUk9SKAotCQkJCQkiaGZhMzg0eF9kcnZyX3N0YXJ0KCkgZmFpbGVkLCIKLQkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJaWYgKChyZXN1bHQgPSBoZmEzODR4X2RydnJfc3RhcnQoaHcpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGZhMzg0eF9kcnZyX3N0YXJ0KCkgZmFpbGVkLCIKKwkJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOwogCQkJCXJlc3VsdCA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNTIxLDkgKzQ3NSw5IEBACiAJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fTVNEX1JVTk5JTkc6Ci0JCQlXTEFOX0xPR19XQVJOSU5HKAotCQkJCSJDYW5ub3QgZW50ZXIgZndsb2FkIHN0YXRlIGZyb20gZW5hYmxlIHN0YXRlLCIKLQkJCQkieW91IG11c3QgZGlzYWJsZSBmaXJzdC5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJDYW5ub3QgZW50ZXIgZndsb2FkIHN0YXRlIGZyb20gZW5hYmxlIHN0YXRlLCIKKwkJCSAgICAgICAieW91IG11c3QgZGlzYWJsZSBmaXJzdC5cbiIpOwogCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKQEAgLTU0OCwzMiArNTAyLDMyIEBACiAJCQkgKiBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3RhdGUKIAkJCSAqIG9mIHRoZSBoYXJkd2FyZSBvciBhIHByZXZpb3VzIGZpcm13YXJlIGxvYWQuCiAJCQkgKi8KLQkJCWlmICgocmVzdWx0PWhmYTM4NHhfZHJ2cl9zdGFydChodykpKSB7Ci0JCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJCSJoZmEzODR4X2RydnJfc3RhcnQoKSBmYWlsZWQsIgotCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQlpZiAoKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zdGFydChodykpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJoZmEzODR4X2RydnJfc3RhcnQoKSBmYWlsZWQsIgorCQkJCSAgICAgICAicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CiAJCQkJcmVzdWx0ID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWlmICgocmVzdWx0PXByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2KSkpIHsKLQkJCQlXTEFOX0xPR19FUlJPUigKLQkJCQkJInByaXNtMnN0YV9nZXRjYXJkaW5mbygpIGZhaWxlZCwiCi0JCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCWlmICgocmVzdWx0ID0gcHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXYpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAicHJpc20yc3RhX2dldGNhcmRpbmZvKCkgZmFpbGVkLCIKKwkJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOwogCQkJCXJlc3VsdCA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKIAkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWlmICgocmVzdWx0PXByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2KSkpIHsKLQkJCQlXTEFOX0xPR19FUlJPUigKLQkJCQkJInByaXNtMnN0YV9nbG9iYWxzZXR1cCgpIGZhaWxlZCwiCi0JCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCWlmICgocmVzdWx0ID0gcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXYpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAicHJpc20yc3RhX2dsb2JhbHNldHVwKCkgZmFpbGVkLCIKKwkJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOwogCQkJCXJlc3VsdCA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKIAkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKIAkJCQlicmVhazsKQEAgLTU4NCw3ICs1MzgsNyBAQAogCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgotCQkJLyogRG8gbm90aGluZywgd2UncmUgYWxyZWFkeSBpbiB0aGlzIHN0YXRlLiovCisJCQkvKiBEbyBub3RoaW5nLCB3ZSdyZSBhbHJlYWR5IGluIHRoaXMgc3RhdGUuICovCiAJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKQEAgLTU5OSw3ICs1NTMsNyBAQAogCWNhc2UgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGU6CiAJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKIAkJY2FzZSBXTEFOX01TRF9IV1BSRVNFTlQ6Ci0JCQkvKiBEbyBub3RoaW5nLCB3ZSdyZSBhbHJlYWR5IGluIHRoaXMgc3RhdGUuKi8KKwkJCS8qIERvIG5vdGhpbmcsIHdlJ3JlIGFscmVhZHkgaW4gdGhpcyBzdGF0ZS4gKi8KIAkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9NU0RfRldMT0FEOgpAQCAtNjM0LDExICs1ODgsOSBAQAogCQlicmVhazsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9nZXRjYXJkaW5mbwogKgpAQCAtNjYwLDI2OSArNjEyLDI4NCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaW50IAkJCXJlc3VsdCA9IDA7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCXUxNiAgICAgICAgICAgICAgICAgIHRlbXA7Ci0JdTgJCQlzbnVtW0hGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU5dOwotCWNoYXIJCQlwc3RyWyhIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOICogNCkgKyAxXTsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJdTE2IHRlbXA7CisJdTggc251bVtIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOXTsKKwljaGFyIHBzdHJbKEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4gKiA0KSArIDFdOwogCiAJLyogQ29sbGVjdCB2ZXJzaW9uIGFuZCBjb21wYXRpYmlsaXR5IGluZm8gKi8KIAkvKiAgU29tZSBhcmUgY3JpdGljYWwsIHNvbWUgYXJlIG5vdCAqLwogCS8qIE5JQyBpZGVudGl0eSAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX05JQ0lERU5USVRZLAotCQkJJmh3LT5pZGVudF9uaWMsIHNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgTklDSURFTlRJVFlcbiIpOworCQkJCQkmaHctPmlkZW50X25pYywKKwkJCQkJc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIE5JQ0lERU5USVRZXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgbmljIGlkIGZpZWxkcyBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KLQlody0+aWRlbnRfbmljLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9uaWMuaWQpOwotCWh3LT5pZGVudF9uaWMudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLnZhcmlhbnQpOwotCWh3LT5pZGVudF9uaWMubWFqb3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy5tYWpvcik7Ci0JaHctPmlkZW50X25pYy5taW5vciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLm1pbm9yKTsKKwlody0+aWRlbnRfbmljLmlkID0gbGUxNl90b19jcHUoaHctPmlkZW50X25pYy5pZCk7CisJaHctPmlkZW50X25pYy52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmlkZW50X25pYy52YXJpYW50KTsKKwlody0+aWRlbnRfbmljLm1ham9yID0gbGUxNl90b19jcHUoaHctPmlkZW50X25pYy5tYWpvcik7CisJaHctPmlkZW50X25pYy5taW5vciA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9uaWMubWlub3IpOwogCi0JV0xBTl9MT0dfSU5GTyggImlkZW50OiBuaWMgaC93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCi0JCQlody0+aWRlbnRfbmljLmlkLCBody0+aWRlbnRfbmljLm1ham9yLAotCQkJaHctPmlkZW50X25pYy5taW5vciwgaHctPmlkZW50X25pYy52YXJpYW50KTsKKwlwcmludGsoS0VSTl9JTkZPICJpZGVudDogbmljIGgvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCSAgICAgICBody0+aWRlbnRfbmljLmlkLCBody0+aWRlbnRfbmljLm1ham9yLAorCSAgICAgICBody0+aWRlbnRfbmljLm1pbm9yLCBody0+aWRlbnRfbmljLnZhcmlhbnQpOwogCiAJLyogUHJpbWFyeSBmL3cgaWRlbnRpdHkgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9QUklJREVOVElUWSwKLQkJCSZody0+aWRlbnRfcHJpX2Z3LCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSUlERU5USVRZXG4iKTsKKwkJCQkJJmh3LT5pZGVudF9wcmlfZncsCisJCQkJCXNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBQUklJREVOVElUWVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIHByaXZhdGUgZncgaWQgZmllbGRzIGluIGhvc3QgYnl0ZSBvcmRlciAqLwotCWh3LT5pZGVudF9wcmlfZncuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy5pZCk7Ci0JaHctPmlkZW50X3ByaV9mdy52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncudmFyaWFudCk7Ci0JaHctPmlkZW50X3ByaV9mdy5tYWpvciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3Lm1ham9yKTsKLQlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncubWlub3IpOworCWh3LT5pZGVudF9wcmlfZncuaWQgPSBsZTE2X3RvX2NwdShody0+aWRlbnRfcHJpX2Z3LmlkKTsKKwlody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQgPSBsZTE2X3RvX2NwdShody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOworCWh3LT5pZGVudF9wcmlfZncubWFqb3IgPSBsZTE2X3RvX2NwdShody0+aWRlbnRfcHJpX2Z3Lm1ham9yKTsKKwlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yID0gbGUxNl90b19jcHUoaHctPmlkZW50X3ByaV9mdy5taW5vcik7CiAKLQlXTEFOX0xPR19JTkZPKCAiaWRlbnQ6IHByaSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKLQkJCWh3LT5pZGVudF9wcmlfZncuaWQsIGh3LT5pZGVudF9wcmlfZncubWFqb3IsCi0JCQlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yLCBody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOworCXByaW50ayhLRVJOX0lORk8gImlkZW50OiBwcmkgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJICAgICAgIGh3LT5pZGVudF9wcmlfZncuaWQsIGh3LT5pZGVudF9wcmlfZncubWFqb3IsCisJICAgICAgIGh3LT5pZGVudF9wcmlfZncubWlub3IsIGh3LT5pZGVudF9wcmlfZncudmFyaWFudCk7CiAKIAkvKiBTdGF0aW9uIChTZWNvbmRhcnk/KSBmL3cgaWRlbnRpdHkgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFJREVOVElUWSwKLQkJCSZody0+aWRlbnRfc3RhX2Z3LCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQUlERU5USVRZXG4iKTsKKwkJCQkJJmh3LT5pZGVudF9zdGFfZncsCisJCQkJCXNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFJREVOVElUWVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCWlmIChody0+aWRlbnRfbmljLmlkIDwgMHg4MDAwKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGQVRBTDogQ2FyZCBpcyBub3QgYW4gSW50ZXJzaWwgUHJpc20yLzIuNS8zXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiRkFUQUw6IENhcmQgaXMgbm90IGFuIEludGVyc2lsIFByaXNtMi8yLjUvM1xuIik7CiAJCXJlc3VsdCA9IC0xOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBzdGF0aW9uIGZ3IGlkIGZpZWxkcyBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KLQlody0+aWRlbnRfc3RhX2Z3LmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncuaWQpOwotCWh3LT5pZGVudF9zdGFfZncudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOwotCWh3LT5pZGVudF9zdGFfZncubWFqb3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy5tYWpvcik7Ci0JaHctPmlkZW50X3N0YV9mdy5taW5vciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3Lm1pbm9yKTsKKwlody0+aWRlbnRfc3RhX2Z3LmlkID0gbGUxNl90b19jcHUoaHctPmlkZW50X3N0YV9mdy5pZCk7CisJaHctPmlkZW50X3N0YV9mdy52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwlody0+aWRlbnRfc3RhX2Z3Lm1ham9yID0gbGUxNl90b19jcHUoaHctPmlkZW50X3N0YV9mdy5tYWpvcik7CisJaHctPmlkZW50X3N0YV9mdy5taW5vciA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9zdGFfZncubWlub3IpOwogCiAJLyogc3RyaXAgb3V0IHRoZSAnc3BlY2lhbCcgdmFyaWFudCBiaXRzICovCi0JaHctPm1tX21vZHMgPSBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgJiAoQklUMTQgfCBCSVQxNSk7Ci0JaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICY9IH4oKHUxNikoQklUMTQgfCBCSVQxNSkpOworCWh3LT5tbV9tb2RzID0gaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICYgKEJJVCgxNCkgfCBCSVQoMTUpKTsKKwlody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgJj0gfigodTE2KSAoQklUKDE0KSB8IEJJVCgxNSkpKTsKIAotCWlmICAoIGh3LT5pZGVudF9zdGFfZncuaWQgPT0gMHgxZiApIHsKLQkJV0xBTl9MT0dfSU5GTygKLQkJCSJpZGVudDogc3RhIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAotCQkJaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKLQkJCWh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJaWYgKGh3LT5pZGVudF9zdGFfZncuaWQgPT0gMHgxZikgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiaWRlbnQ6IHN0YSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJICAgICAgIGh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCSAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOwogCX0gZWxzZSB7Ci0JCVdMQU5fTE9HX0lORk8oCi0JCQkiaWRlbnQ6ICBhcCBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKLQkJCWh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCi0JCQlody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOwotCQlXTEFOX0xPR19FUlJPUigiVW5zdXBwb3J0ZWQgVGVydGlhcnkgQVAgZmlybWVhcmUgbG9hZGVkIVxuIik7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJpZGVudDogIGFwIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkgICAgICAgaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJICAgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJCXByaW50ayhLRVJOX0VSUiAiVW5zdXBwb3J0ZWQgVGVydGlhcnkgQVAgZmlybWVhcmUgbG9hZGVkIVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIE1vZGVtIHN1cHBsaWVyICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfTUZJU1VQUkFOR0UsCi0JCQkmaHctPmNhcF9zdXBfbWZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgTUZJU1VQUkFOR0VcbiIpOworCQkJCQkmaHctPmNhcF9zdXBfbWZpLAorCQkJCQlzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBNRklTVVBSQU5HRVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIG1vZGVtIGludGVyZmFjZSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9zdXBfbWZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLnJvbGUpOwotCWh3LT5jYXBfc3VwX21maS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkuaWQpOwotCWh3LT5jYXBfc3VwX21maS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS52YXJpYW50KTsKLQlody0+Y2FwX3N1cF9tZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS5ib3R0b20pOwotCWh3LT5jYXBfc3VwX21maS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9tZmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX21maS5yb2xlKTsKKwlody0+Y2FwX3N1cF9tZmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9tZmkuaWQpOworCWh3LT5jYXBfc3VwX21maS52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX21maS5ib3R0b20gPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9tZmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9tZmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfbWZpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiTUZJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX21maS5yb2xlLCBody0+Y2FwX3N1cF9tZmkuaWQsCi0JCWh3LT5jYXBfc3VwX21maS52YXJpYW50LCBody0+Y2FwX3N1cF9tZmkuYm90dG9tLAotCQlody0+Y2FwX3N1cF9tZmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJNRkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9zdXBfbWZpLnJvbGUsIGh3LT5jYXBfc3VwX21maS5pZCwKKwkgICAgICAgaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX21maS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfc3VwX21maS50b3ApOwogCiAJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgQ29udHJvbGxlciBzdXBwbGllciAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NGSVNVUFJBTkdFLAotCQkJJmh3LT5jYXBfc3VwX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIENGSVNVUFJBTkdFXG4iKTsKKwkJCQkJJmh3LT5jYXBfc3VwX2NmaSwKKwkJCQkJc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgQ0ZJU1VQUkFOR0VcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBjb250cm9sbGVyIGludGVyZmFjZSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9zdXBfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLnJvbGUpOwotCWh3LT5jYXBfc3VwX2NmaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkuaWQpOwotCWh3LT5jYXBfc3VwX2NmaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS52YXJpYW50KTsKLQlody0+Y2FwX3N1cF9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS5ib3R0b20pOwotCWh3LT5jYXBfc3VwX2NmaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9jZmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX2NmaS5yb2xlKTsKKwlody0+Y2FwX3N1cF9jZmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9jZmkuaWQpOworCWh3LT5jYXBfc3VwX2NmaS52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX2NmaS5ib3R0b20gPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9jZmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9jZmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfY2ZpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiQ0ZJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX2NmaS5yb2xlLCBody0+Y2FwX3N1cF9jZmkuaWQsCi0JCWh3LT5jYXBfc3VwX2NmaS52YXJpYW50LCBody0+Y2FwX3N1cF9jZmkuYm90dG9tLAotCQlody0+Y2FwX3N1cF9jZmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJDRkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9zdXBfY2ZpLnJvbGUsIGh3LT5jYXBfc3VwX2NmaS5pZCwKKwkgICAgICAgaHctPmNhcF9zdXBfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX2NmaS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfc3VwX2NmaS50b3ApOwogCiAJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgUHJpbWFyeSBmL3cgc3VwcGxpZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9QUklTVVBSQU5HRSwKLQkJCSZody0+Y2FwX3N1cF9wcmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQUklTVVBSQU5HRVxuIik7CisJCQkJCSZody0+Y2FwX3N1cF9wcmksCisJCQkJCXNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIFBSSVNVUFJBTkdFXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmaXJtd2FyZSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9zdXBfcHJpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnJvbGUpOwotCWh3LT5jYXBfc3VwX3ByaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkuaWQpOwotCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS52YXJpYW50KTsKLQlody0+Y2FwX3N1cF9wcmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS5ib3R0b20pOwotCWh3LT5jYXBfc3VwX3ByaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9wcmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX3ByaS5yb2xlKTsKKwlody0+Y2FwX3N1cF9wcmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9wcmkuaWQpOworCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfcHJpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX3ByaS5ib3R0b20gPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9wcmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9wcmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfcHJpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiUFJJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX3ByaS5yb2xlLCBody0+Y2FwX3N1cF9wcmkuaWQsCi0JCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50LCBody0+Y2FwX3N1cF9wcmkuYm90dG9tLAotCQlody0+Y2FwX3N1cF9wcmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJQUkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9zdXBfcHJpLnJvbGUsIGh3LT5jYXBfc3VwX3ByaS5pZCwKKwkgICAgICAgaHctPmNhcF9zdXBfcHJpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX3ByaS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfc3VwX3ByaS50b3ApOwogCiAJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgU3RhdGlvbiBmL3cgc3VwcGxpZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFTVVBSQU5HRSwKLQkJCSZody0+Y2FwX3N1cF9zdGEsIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFTVVBSQU5HRVxuIik7CisJCQkJCSZody0+Y2FwX3N1cF9zdGEsCisJCQkJCXNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIFNUQVNVUFJBTkdFXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhdGlvbiBmaXJtd2FyZSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9zdXBfc3RhLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLnJvbGUpOwotCWh3LT5jYXBfc3VwX3N0YS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEuaWQpOwotCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS52YXJpYW50KTsKLQlody0+Y2FwX3N1cF9zdGEuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS5ib3R0b20pOwotCWh3LT5jYXBfc3VwX3N0YS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9zdGEucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX3N0YS5yb2xlKTsKKwlody0+Y2FwX3N1cF9zdGEuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9zdGEuaWQpOworCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX3N0YS5ib3R0b20gPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9zdGEuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9zdGEudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfc3RhLnRvcCk7CiAKLQlpZiAoIGh3LT5jYXBfc3VwX3N0YS5pZCA9PSAweDA0ICkgewotCQlXTEFOX0xPR19JTkZPKAotCQkiU1RBOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX3N0YS5yb2xlLCBody0+Y2FwX3N1cF9zdGEuaWQsCi0JCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAotCQlody0+Y2FwX3N1cF9zdGEudG9wKTsKKwlpZiAoaHctPmNhcF9zdXBfc3RhLmlkID09IDB4MDQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIlNUQTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQkgICAgICAgaHctPmNhcF9zdXBfc3RhLnJvbGUsIGh3LT5jYXBfc3VwX3N0YS5pZCwKKwkJICAgICAgIGh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAorCQkgICAgICAgaHctPmNhcF9zdXBfc3RhLnRvcCk7CiAJfSBlbHNlIHsKLQkJV0xBTl9MT0dfSU5GTygKLQkJIkFQOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX3N0YS5yb2xlLCBody0+Y2FwX3N1cF9zdGEuaWQsCi0JCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAotCQlody0+Y2FwX3N1cF9zdGEudG9wKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkFQOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCSAgICAgICBody0+Y2FwX3N1cF9zdGEucm9sZSwgaHctPmNhcF9zdXBfc3RhLmlkLAorCQkgICAgICAgaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQsIGh3LT5jYXBfc3VwX3N0YS5ib3R0b20sCisJCSAgICAgICBody0+Y2FwX3N1cF9zdGEudG9wKTsKIAl9CiAKIAkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBwcmltYXJ5IGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfUFJJX0NGSUFDVFJBTkdFUywKLQkJCSZody0+Y2FwX2FjdF9wcmlfY2ZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgUFJJX0NGSUFDVFJBTkdFU1xuIik7CisJCQkJCSZody0+Y2FwX2FjdF9wcmlfY2ZpLAorCQkJCQlzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBQUklfQ0ZJQUNUUkFOR0VTXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmL3cgYWN0b3IsIENGSSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSk7Ci0JaHctPmNhcF9hY3RfcHJpX2NmaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLmlkKTsKLQlody0+Y2FwX2FjdF9wcmlfY2ZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50KTsKLQlody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSk7Ci0JaHctPmNhcF9hY3RfcHJpX2NmaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS50b3ApOworCSAgIGZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLmlkID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3RfcHJpX2NmaS5pZCk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50ID0KKwkgICAgbGUxNl90b19jcHUoaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50KTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSA9CisJICAgIGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3ByaV9jZmkudG9wKTsKIAotCVdMQU5fTE9HX0lORk8oCi0JCSJQUkktQ0ZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSwgaHctPmNhcF9hY3RfcHJpX2NmaS5pZCwKLQkJaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50LCBody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSwKLQkJaHctPmNhcF9hY3RfcHJpX2NmaS50b3ApOworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgIlBSSS1DRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlLCBody0+Y2FwX2FjdF9wcmlfY2ZpLmlkLAorCSAgICAgICBody0+Y2FwX2FjdF9wcmlfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tLAorCSAgICAgICBody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCk7CiAKIAkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGEgZi93IGFjdG9yLCBDRkkgc3VwcGxpZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFfQ0ZJQUNUUkFOR0VTLAotCQkJJmh3LT5jYXBfYWN0X3N0YV9jZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFfQ0ZJQUNUUkFOR0VTXG4iKTsKKwkJCQkJJmh3LT5jYXBfYWN0X3N0YV9jZmksCisJCQkJCXNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9DRklBQ1RSQU5HRVNcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyCi0JZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KLQlody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlKTsKLQlody0+Y2FwX2FjdF9zdGFfY2ZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkuaWQpOwotCWh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQpOwotCWh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tKTsKLQlody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfY2ZpLmlkKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQgPQorCSAgICBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tID0KKwkgICAgbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX2NmaS5ib3R0b20pOworCWh3LT5jYXBfYWN0X3N0YV9jZmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX2NmaS50b3ApOwogCi0JV0xBTl9MT0dfSU5GTygKLQkJIlNUQS1DRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKLQkJaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlLCBody0+Y2FwX2FjdF9zdGFfY2ZpLmlkLAotCQlody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tLAotCQlody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCk7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiU1RBLUNGSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCSAgICAgICBody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9jZmkuaWQsCisJICAgICAgIGh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX2NmaS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfYWN0X3N0YV9jZmkudG9wKTsKIAogCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YSBmL3cgYWN0b3IsIE1GSSBzdXBwbGllciAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1NUQV9NRklBQ1RSQU5HRVMsCi0JCQkmaHctPmNhcF9hY3Rfc3RhX21maSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9NRklBQ1RSQU5HRVNcbiIpOworCQkJCQkmaHctPmNhcF9hY3Rfc3RhX21maSwKKwkJCQkJc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgU1RBX01GSUFDVFJBTkdFU1xuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YXRpb24gZi93IGFjdG9yLCBNRkkgc3VwcGxpZXIKLQlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLwotCWh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUpOwotCWh3LT5jYXBfYWN0X3N0YV9tZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5pZCk7Ci0JaHctPmNhcF9hY3Rfc3RhX21maS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCk7Ci0JaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20pOwotCWh3LT5jYXBfYWN0X3N0YV9tZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkudG9wKTsKKwkgICBmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSk7CisJaHctPmNhcF9hY3Rfc3RhX21maS5pZCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCA9CisJICAgIGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCk7CisJaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20gPQorCSAgICBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfbWZpLmJvdHRvbSk7CisJaHctPmNhcF9hY3Rfc3RhX21maS50b3AgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiU1RBLU1GSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAotCQlody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQsCi0JCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20sCi0JCWh3LT5jYXBfYWN0X3N0YV9tZmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJTVEEtTUZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJICAgICAgIGh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSwgaHctPmNhcF9hY3Rfc3RhX21maS5pZCwKKwkgICAgICAgaHctPmNhcF9hY3Rfc3RhX21maS52YXJpYW50LCBody0+Y2FwX2FjdF9zdGFfbWZpLmJvdHRvbSwKKwkgICAgICAgaHctPmNhcF9hY3Rfc3RhX21maS50b3ApOwogCiAJLyogU2VyaWFsIE51bWJlciAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUiwKLQkJCXNudW0sIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4pOwotCWlmICggIXJlc3VsdCApIHsKKwkJCQkJc251bSwgSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTik7CisJaWYgKCFyZXN1bHQpIHsKIAkJd2xhbl9ta3ByaW50c3RyKHNudW0sIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4sCiAJCQkJcHN0ciwgc2l6ZW9mKHBzdHIpKTsKLQkJV0xBTl9MT0dfSU5GTygiUHJpc20yIGNhcmQgU046ICVzXG4iLCBwc3RyKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUHJpc20yIGNhcmQgU046ICVzXG4iLCBwc3RyKTsKIAl9IGVsc2UgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFByaXNtMiBDYXJkIFNOXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgUHJpc20yIENhcmQgU05cbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBDb2xsZWN0IHRoZSBNQUMgYWRkcmVzcyAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIsCi0JCXdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQUREUl9MRU4pOwotCWlmICggcmVzdWx0ICE9IDAgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgbWFjIGFkZHJlc3NcbiIpOworCQkJCQl3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIG1hYyBhZGRyZXNzXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC05MzksMTAgKzkwNiwxMCBAQAogCWh3LT5kYm1hZGp1c3QgPSB0ZW1wOwogCiAJLyogT25seSBlbmFibGUgc2NhbiBieSBkZWZhdWx0IG9uIG5ld2VyIGZpcm13YXJlICovCi0gICAgICAgIGlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAotCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSw1LDUpKSB7CisJaWYgKEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKwkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAorCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSwgNSwgNSkpIHsKIAkJd2xhbmRldi0+bnNkY2FwcyB8PSBQODAyMTFfTlNEQ0FQX05PU0NBTjsKIAl9CiAKQEAgLTk1MCwxMyArOTE3LDExIEBACiAKIAlnb3RvIGRvbmU7CiBmYWlsZWQ6Ci0JV0xBTl9MT0dfRVJST1IoIkZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2dsb2JhbHNldHVwCiAqCkBAIC05NzcsNDMgKzk0MiwzMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKIAogCS8qIFNldCB0aGUgbWF4aW11bSBmcmFtZSBzaXplICovCiAJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0RBVEFfTUFYTEVOKTsKKwkJCQkJV0xBTl9EQVRBX01BWExFTik7CiB9CiAKIHN0YXRpYyBpbnQgcHJpc20yc3RhX3NldG11bHRpY2FzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIG5ldGRldmljZV90ICpkZXYpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKIAotCXUxNiAgcHJvbWlzYzsKLQotCURCRkVOVEVSOworCXUxNiBwcm9taXNjOwogCiAJLyogSWYgd2UncmUgbm90IHJlYWR5LCB3aGF0J3MgdGhlIHBvaW50PyAqLwotCWlmICggaHctPnN0YXRlICE9IEhGQTM4NHhfU1RBVEVfUlVOTklORyApCisJaWYgKGh3LT5zdGF0ZSAhPSBIRkEzODR4X1NUQVRFX1JVTk5JTkcpCiAJCWdvdG8gZXhpdDsKIAotCWlmICggKGRldi0+ZmxhZ3MgJiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSAhPSAwICkKKwlpZiAoKGRldi0+ZmxhZ3MgJiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSAhPSAwKQogCQlwcm9taXNjID0gUDgwMjExRU5VTV90cnV0aF90cnVlOwogCWVsc2UKIAkJcHJvbWlzYyA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CiAKLQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaHcsIEhGQTM4NHhfUklEX1BST01JU0NNT0RFLCBwcm9taXNjKTsKLQotCS8qIFhYWCBUT0RPOiBjb25maWd1cmUgdGhlIG11bHRpY2FzdCBsaXN0ICovCi0JLy8gQ0xFQVJfSFdfTVVMVElDQVNUX0xJU1QKLQkvLyBzdHJ1Y3QgZGV2X21jX2xpc3QgZWxlbWVudCA9IGRldi0+bWNfbGlzdDsKLQkvLyB3aGlsZSAoZWxlbWVudCAhPSBudWxsKSB7Ci0JLy8gIEhXX0FERF9NVUxUSUNBU1RfQUREUihlbGVtZW50LT5kbWlfYWRkciwgZG1pX2FkZHJsZW4pCi0JLy8gIGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0OwotCS8vIH0KLQotIGV4aXQ6Ci0JREJGRVhJVDsKKwlyZXN1bHQgPQorCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaHcsIEhGQTM4NHhfUklEX1BST01JU0NNT0RFLAorCQkJCQkgICBwcm9taXNjKTsKK2V4aXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTAzNSwxNSArOTkwLDEzIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfaGFuZG92ZXIod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfaGFuZG92ZXIod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotCURCRkVOVEVSOwotCVdMQU5fTE9HX0RFQlVHKDIsInJlY2VpdmVkIGluZm9mcmFtZTpIQU5ET1ZFUiAodW5oYW5kbGVkKVxuIik7Ci0JREJGRVhJVDsKKwlwcl9kZWJ1ZygicmVjZWl2ZWQgaW5mb2ZyYW1lOkhBTkRPVkVSICh1bmhhbmRsZWQpXG4iKTsKIAlyZXR1cm47CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9pbmZfdGFsbGllcwogKgpAQCAtMTA2MSwzNyArMTAxNCwzNCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCWludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfdGFsbGllcyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0JdTE2CQkJKnNyYzE2OwotCXUzMgkJCSpkc3Q7Ci0JdTMyCQkJKnNyYzMyOwotCWludAkJCWk7Ci0JaW50CQkJY250OwotCi0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwl1MTYgKnNyYzE2OworCXUzMiAqZHN0OworCXUzMiAqc3JjMzI7CisJaW50IGk7CisJaW50IGNudDsKIAogCS8qCi0JKiogRGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSAxNi1iaXQgb3IgMzItYml0IHRhbGxpZXMsIGJhc2VkIG9uIHRoZQotCSoqIHJlY29yZCBsZW5ndGggb2YgdGhlIGluZm8gcmVjb3JkLgotCSovCisJICoqIERldGVybWluZSBpZiB0aGVzZSBhcmUgMTYtYml0IG9yIDMyLWJpdCB0YWxsaWVzLCBiYXNlZCBvbiB0aGUKKwkgKiogcmVjb3JkIGxlbmd0aCBvZiB0aGUgaW5mbyByZWNvcmQuCisJICovCiAKIAljbnQgPSBzaXplb2YoaGZhMzg0eF9Db21tVGFsbGllczMyX3QpIC8gc2l6ZW9mKHUzMik7CiAJaWYgKGluZi0+ZnJhbWVsZW4gPiAyMikgewotCQlkc3QgICA9ICh1MzIgKikgJmh3LT50YWxsaWVzOwotCQlzcmMzMiA9ICh1MzIgKikgJmluZi0+aW5mby5jb21tdGFsbGllczMyOworCQlkc3QgPSAodTMyICopJmh3LT50YWxsaWVzOworCQlzcmMzMiA9ICh1MzIgKikmaW5mLT5pbmZvLmNvbW10YWxsaWVzMzI7CiAJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzMyKyspCi0JCQkqZHN0ICs9IGhmYTM4NHgyaG9zdF8zMigqc3JjMzIpOworCQkJKmRzdCArPSBsZTMyX3RvX2NwdSgqc3JjMzIpOwogCX0gZWxzZSB7Ci0JCWRzdCAgID0gKHUzMiAqKSAmaHctPnRhbGxpZXM7Ci0JCXNyYzE2ID0gKHUxNiAqKSAmaW5mLT5pbmZvLmNvbW10YWxsaWVzMTY7CisJCWRzdCA9ICh1MzIgKikmaHctPnRhbGxpZXM7CisJCXNyYzE2ID0gKHUxNiAqKSZpbmYtPmluZm8uY29tbXRhbGxpZXMxNjsKIAkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBkc3QrKywgc3JjMTYrKykKLQkJCSpkc3QgKz0gaGZhMzg0eDJob3N0XzE2KCpzcmMxNik7CisJCQkqZHN0ICs9IGxlMTZfdG9fY3B1KCpzcmMxNik7CiAJfQogCi0JREJGRVhJVDsKLQogCXJldHVybjsKIH0KIApAQCAtMTExNiw0NCArMTA2Niw0MCBAQAogCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewogCi0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCWludAkJCW5ic3M7Ci0JaGZhMzg0eF9TY2FuUmVzdWx0X3QJKnNyID0gJihpbmYtPmluZm8uc2NhbnJlc3VsdCk7Ci0JaW50CQkJaTsKLQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdAlqb2lucmVxOwotCWludAkJCXJlc3VsdDsKLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCWludCBuYnNzOworCWhmYTM4NHhfU2NhblJlc3VsdF90ICpzciA9ICYoaW5mLT5pbmZvLnNjYW5yZXN1bHQpOworCWludCBpOworCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7CisJaW50IHJlc3VsdDsKIAogCS8qIEdldCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMsIGZpcnN0IGluIGJ5dGVzLCB0aGVuIGluIHJlc3VsdHMgKi8KIAluYnNzID0gKGluZi0+ZnJhbWVsZW4gKiBzaXplb2YodTE2KSkgLQotCQlzaXplb2YoaW5mLT5pbmZvdHlwZSkgLQotCQlzaXplb2YoaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbik7CisJICAgIHNpemVvZihpbmYtPmluZm90eXBlKSAtIHNpemVvZihpbmYtPmluZm8uc2NhbnJlc3VsdC5zY2FucmVhc29uKTsKIAluYnNzIC89IHNpemVvZihoZmEzODR4X1NjYW5SZXN1bHRTdWJfdCk7CiAKIAkvKiBQcmludCBlbSAqLwotCVdMQU5fTE9HX0RFQlVHKDEsInJ4IHNjYW5yZXN1bHRzLCByZWFzb249JWQsIG5ic3M9JWQ6XG4iLAotCQlpbmYtPmluZm8uc2NhbnJlc3VsdC5zY2FucmVhc29uLCBuYnNzKTsKLQlmb3IgKCBpID0gMDsgaSA8IG5ic3M7IGkrKykgewotCQlXTEFOX0xPR19ERUJVRygxLCAiY2hpZD0lZCBhbmw9JWQgc2w9JWQgYmNuaW50PSVkXG4iLAotCQkJc3ItPnJlc3VsdFtpXS5jaGlkLAotCQkJc3ItPnJlc3VsdFtpXS5hbmwsCi0JCQlzci0+cmVzdWx0W2ldLnNsLAotCQkJc3ItPnJlc3VsdFtpXS5iY25pbnQpOwotCQlXTEFOX0xPR19ERUJVRygxLCAiICBjYXBpbmZvPTB4JTA0eCBwcm9iZXJlc3BfcmF0ZT0lZFxuIiwKLQkJCXNyLT5yZXN1bHRbaV0uY2FwaW5mbywKLQkJCXNyLT5yZXN1bHRbaV0ucHJvYmVyZXNwX3JhdGUpOworCXByX2RlYnVnKCJyeCBzY2FucmVzdWx0cywgcmVhc29uPSVkLCBuYnNzPSVkOlxuIiwKKwkgICAgICAgaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbiwgbmJzcyk7CisJZm9yIChpID0gMDsgaSA8IG5ic3M7IGkrKykgeworCQlwcl9kZWJ1ZygiY2hpZD0lZCBhbmw9JWQgc2w9JWQgYmNuaW50PSVkXG4iLAorCQkgICAgICAgc3ItPnJlc3VsdFtpXS5jaGlkLAorCQkgICAgICAgc3ItPnJlc3VsdFtpXS5hbmwsCisJCSAgICAgICBzci0+cmVzdWx0W2ldLnNsLCBzci0+cmVzdWx0W2ldLmJjbmludCk7CisJCXByX2RlYnVnKCIgIGNhcGluZm89MHglMDR4IHByb2JlcmVzcF9yYXRlPSVkXG4iLAorCQkgICAgICAgc3ItPnJlc3VsdFtpXS5jYXBpbmZvLCBzci0+cmVzdWx0W2ldLnByb2JlcmVzcF9yYXRlKTsKIAl9CiAJLyogaXNzdWUgYSBqb2luIHJlcXVlc3QgKi8KIAlqb2lucmVxLmNoYW5uZWwgPSBzci0+cmVzdWx0WzBdLmNoaWQ7Ci0JbWVtY3B5KCBqb2lucmVxLmJzc2lkLCBzci0+cmVzdWx0WzBdLmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7Ci0JcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCi0JCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKLQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCW1lbWNweShqb2lucmVxLmJzc2lkLCBzci0+cmVzdWx0WzBdLmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywKKwkJCQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QsCisJCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOwogCWlmIChyZXN1bHQpIHsKLQkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhqb2lucmVxKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJzZXRjb25maWcoam9pbnJlcSkgZmFpbGVkLCByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC0xMTc3LDE4ICsxMTIzLDE2IEBACiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCWludAkJCW5ic3M7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwlpbnQgbmJzczsKIAogCW5ic3MgPSAoaW5mLT5mcmFtZWxlbiAtIDMpIC8gMzI7Ci0JV0xBTl9MT0dfREVCVUcoMSwgIlJlY2VpdmVkICVkIGhvc3RzY2FuIHJlc3VsdHNcbiIsIG5ic3MpOworCXByX2RlYnVnKCJSZWNlaXZlZCAlZCBob3N0c2NhbiByZXN1bHRzXG4iLCBuYnNzKTsKIAogCWlmIChuYnNzID4gMzIpCiAJCW5ic3MgPSAzMjsKIAotCWlmIChody0+c2NhbnJlc3VsdHMpCi0JCWtmcmVlKGh3LT5zY2FucmVzdWx0cyk7CisJa2ZyZWUoaHctPnNjYW5yZXN1bHRzKTsKIAogCWh3LT5zY2FucmVzdWx0cyA9IGttYWxsb2Moc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCksIEdGUF9BVE9NSUMpOwogCW1lbWNweShody0+c2NhbnJlc3VsdHMsIGluZiwgc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCkpOwpAQCAtMTE5NiwxMSArMTE0MCw5IEBACiAJaWYgKG5ic3MgPT0gMCkKIAkJbmJzcyA9IC0xOwogCi0gICAgICAgIC8qIE5vdGlmeS93YWtlIHRoZSBzbGVlcGluZyBjYWxsZXIuICovCi0gICAgICAgIGh3LT5zY2FuZmxhZyA9IG5ic3M7Ci0gICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmaHctPmNtZHEpOwotCi0JREJGRVhJVDsKKwkvKiBOb3RpZnkvd2FrZSB0aGUgc2xlZXBpbmcgY2FsbGVyLiAqLworCWh3LT5zY2FuZmxhZyA9IG5ic3M7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZody0+Y21kcSk7CiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyMjMsNTUgKzExNjUsNjAgQEAKIHN0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQl1bnNpZ25lZCBpbnQJCWksIG47CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgaSwgbjsKIAotCURCRkVOVEVSOwogCWh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5zY2FuY2hhbm5lbHMgPQotCQloZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5zY2FuY2hhbm5lbHMpOwotI2lmIDAKLQltZW1jcHkoJmluZi0+aW5mby5jaGluZm9yZXN1bHQsICZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMsIHNpemVvZihoZmEzODR4X0NoSW5mb1Jlc3VsdF90KSk7Ci0jZW5kaWYKKwkgICAgbGUxNl90b19jcHUoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5zY2FuY2hhbm5lbHMpOwogCi0JZm9yIChpPTAsIG49MDsgaTxIRkEzODR4X0NISU5GT1JFU1VMVF9NQVg7IGkrKykgewotCQlpZiAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyAmICgxPDxpKSkgewotCQkJaW50IAljaGFubmVsPWhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5jaGlkKS0xOwotCQkJaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdCAqY2hpbmZvcmVzdWx0PSZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdOwotCQkJY2hpbmZvcmVzdWx0LT5jaGlkICAgPSBjaGFubmVsOwotCQkJY2hpbmZvcmVzdWx0LT5hbmwgICAgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uYW5sKTsKLQkJCWNoaW5mb3Jlc3VsdC0+cG5sICAgID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLnBubCk7Ci0JCQljaGluZm9yZXN1bHQtPmFjdGl2ZSA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5hY3RpdmUpOwotCQkJV0xBTl9MT0dfREVCVUcoMiwgImNoaW5mbzogY2hhbm5lbCAlZCwgJXMgbGV2ZWwgKGF2Zy9wZWFrKT0lZC8lZCBkQiwgcGNmICVkXG4iLAotCQkJCQljaGFubmVsKzEsCi0JCQkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlICYKLQkJCQkJSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFID8gInNpZ25hbCIgOiAibm9pc2UiLAotCQkJCQljaGluZm9yZXN1bHQtPmFubCwgY2hpbmZvcmVzdWx0LT5wbmwsCi0JCQkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFID8gMSA6IDAKLQkJCSk7CisJZm9yIChpID0gMCwgbiA9IDA7IGkgPCBIRkEzODR4X0NISU5GT1JFU1VMVF9NQVg7IGkrKykgeworCQlpZiAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyAmICgxIDw8IGkpKSB7CisJCQlpbnQgY2hhbm5lbCA9CisJCQkgICAgbGUxNl90b19jcHUoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uCisJCQkJCSAgICBjaGlkKSAtIDE7CisJCQloZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90ICpjaGluZm9yZXN1bHQgPQorCQkJICAgICZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdOworCQkJY2hpbmZvcmVzdWx0LT5jaGlkID0gY2hhbm5lbDsKKwkJCWNoaW5mb3Jlc3VsdC0+YW5sID0KKwkJCSAgICBsZTE2X3RvX2NwdShpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS4KKwkJCQkJICAgIGFubCk7CisJCQljaGluZm9yZXN1bHQtPnBubCA9CisJCQkgICAgbGUxNl90b19jcHUoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uCisJCQkJCSAgICBwbmwpOworCQkJY2hpbmZvcmVzdWx0LT5hY3RpdmUgPQorCQkJICAgIGxlMTZfdG9fY3B1KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLgorCQkJCQkgICAgYWN0aXZlKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImNoaW5mbzogY2hhbm5lbCAlZCwgJXMgbGV2ZWwgKGF2Zy9wZWFrKT0lZC8lZCBkQiwgcGNmICVkXG4iLAorCQkJICAgICAgIGNoYW5uZWwgKyAxLAorCQkJICAgICAgIGNoaW5mb3Jlc3VsdC0+CisJCQkgICAgICAgYWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFID8KKwkJCSAgICAgICAic2lnbmFsIiA6ICJub2lzZSIsIGNoaW5mb3Jlc3VsdC0+YW5sLAorCQkJICAgICAgIGNoaW5mb3Jlc3VsdC0+cG5sLAorCQkJICAgICAgIGNoaW5mb3Jlc3VsdC0+CisJCQkgICAgICAgYWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFID8gMSA6IDApOwogCQkJbisrOwogCQl9CiAJfQogCWF0b21pY19zZXQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSwgMik7CiAKIAlody0+Y2hhbm5lbF9pbmZvLmNvdW50ID0gbjsKLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAogdm9pZCBwcmlzbTJzdGFfcHJvY2Vzc2luZ19kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGxpbmtfYmgpOwotCXdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CisJaGZhMzg0eF90ICpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgbGlua19iaCk7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CiAJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOwotCWludAkJCXJlc3VsdDsKKwlpbnQgcmVzdWx0OwogCi0JREJGRU5URVI7CiAJLyogRmlyc3QgbGV0J3MgcHJvY2VzcyB0aGUgYXV0aCBmcmFtZXMgKi8KIAl7Ci0JCXN0cnVjdCBza19idWZmICAgICAgICAgICpza2I7CisJCXN0cnVjdCBza19idWZmICpza2I7CiAJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mOwogCi0JCXdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZody0+YXV0aHEpKSApIHsKKwkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkpIHsKIAkJCWluZiA9IChoZmEzODR4X0luZkZyYW1lX3QgKikgc2tiLT5kYXRhOwogCQkJcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXYsIGluZik7CiAJCX0KQEAgLTEyODQsNyArMTIzMSw3IEBACiAKIAlody0+bGlua19zdGF0dXMgPSBody0+bGlua19zdGF0dXNfbmV3OwogCi0Jc3dpdGNoKGh3LT5saW5rX3N0YXR1cykgeworCXN3aXRjaCAoaHctPmxpbmtfc3RhdHVzKSB7CiAJY2FzZSBIRkEzODR4X0xJTktfTk9UQ09OTkVDVEVEOgogCQkvKiBJJ20gY3VycmVudGx5IGFzc3VtaW5nIHRoYXQgdGhpcyBpcyB0aGUgaW5pdGlhbCBsaW5rCiAJCSAqIHN0YXRlLiAgSXQgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaW1tZWRpYXRlbHkKQEAgLTEyOTQsNyArMTI0MSw3IEBACiAJCSAqLwogCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOwogCi0JCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9Tk9UQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibGlua3N0YXR1cz1OT1RDT05ORUNURUQgKHVuaGFuZGxlZClcbiIpOwogCQlicmVhazsKIAogCWNhc2UgSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRDoKQEAgLTEzMTEsNTMgKzEyNTgsNTYgQEAKIAkJbmV0aWZfY2Fycmllcl9vbih3bGFuZGV2LT5uZXRkZXYpOwogCiAJCS8qIElmIHdlIGFyZSBqb2luaW5nIGEgc3BlY2lmaWMgQVAsIHNldCBvdXIgc3RhdGUgYW5kIHJlc2V0IHJldHJpZXMgKi8KLQkJaWYoaHctPmpvaW5fYXAgPT0gMSkKKwkJaWYgKGh3LT5qb2luX2FwID09IDEpCiAJCQlody0+am9pbl9hcCA9IDI7CiAJCWh3LT5qb2luX3JldHJpZXMgPSA2MDsKIAogCQkvKiBEb24ndCBjYWxsIHRoaXMgaW4gbW9uaXRvciBtb2RlICovCi0JCWlmICggd2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUiApIHsKLQkJCXUxNgkJCXBvcnRzdGF0dXM7CisJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7CisJCQl1MTYgcG9ydHN0YXR1czsKIAotCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1DT05ORUNURURcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAibGlua3N0YXR1cz1DT05ORUNURURcbiIpOwogCiAJCQkvKiBGb3Igbm9uLXVzYiBkZXZpY2VzLCB3ZSBjYW4gdXNlIHRoZSBzeW5jIHZlcnNpb25zICovCiAJCQkvKiBDb2xsZWN0IHRoZSBCU1NJRCwgYW5kIHNldCBzdGF0ZSB0byBhbGxvdyB0eCAqLwogCiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwKLQkJCQkJCQl3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCQkJCQkJCXdsYW5kZXYtPmJzc2lkLAorCQkJCQkJCVdMQU5fQlNTSURfTEVOKTsKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQogCiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAogCQkJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQogCQkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCi0JCQkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7CisJCQkJCQkocDgwMjExcHN0cmRfdCAqKSZ3bGFuZGV2LT4KKwkJCQkJCXNzaWQpOwogCiAJCQkvKiBDb2xsZWN0IHRoZSBwb3J0IHN0YXR1cyAqLwogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAotCQkJCQkJCSAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgJnBvcnRzdGF0dXMpOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJCQkgICAgICAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgcmVzdWx0KTsKKwkJCQkJCQkgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsCisJCQkJCQkJICAmcG9ydHN0YXR1cyk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJICAgICAgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsIHJlc3VsdCk7CiAJCQkJZ290byBmYWlsZWQ7CiAJCQl9CiAJCQl3bGFuZGV2LT5tYWNtb2RlID0KLQkJCQkocG9ydHN0YXR1cyA9PSBIRkEzODR4X1BTVEFUVVNfQ09OTl9JQlNTKSA/Ci0JCQkJV0xBTl9NQUNNT0RFX0lCU1NfU1RBIDogV0xBTl9NQUNNT0RFX0VTU19TVEE7CisJCQkgICAgKHBvcnRzdGF0dXMgPT0gSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUykgPworCQkJICAgIFdMQU5fTUFDTU9ERV9JQlNTX1NUQSA6IFdMQU5fTUFDTU9ERV9FU1NfU1RBOwogCiAJCQkvKiBHZXQgdGhlIGJhbGwgcm9sbGluZyBvbiB0aGUgY29tbXMgcXVhbGl0eSBzdHVmZiAqLwogCQkJcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcigmaHctPmNvbW1zcXVhbF9iaCk7CkBAIC0xMzc0LDE4ICsxMzI0LDIwIEBACiAJCSAqIEluZGljYXRlIERlYXV0aGVudGljYXRpb24KIAkJICogQmxvY2sgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKIAkJICovCi0JCWlmKGh3LT5qb2luX2FwID09IDIpCi0JCXsKLQkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90ICAgICAgam9pbnJlcTsKKwkJaWYgKGh3LT5qb2luX2FwID09IDIpIHsKKwkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7CiAJCQlqb2lucmVxID0gaHctPmpvaW5yZXE7CiAJCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KLQkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAotCQkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAotCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOwotCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOworCQkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywKKwkJCQkJICAgICAgIEhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJCQkgICAgICAgJmpvaW5yZXEsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJsaW5rc3RhdHVzPURJU0NPTk5FQ1RFRCAocmUtc3VibWl0dGluZyBqb2luKVxuIik7CiAJCX0gZWxzZSB7CiAJCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikKLQkJCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPURJU0NPTk5FQ1RFRCAodW5oYW5kbGVkKVxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHVuaGFuZGxlZClcbiIpOwogCQl9CiAJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKIApAQCAtMTQwOCwzMCArMTM2MCwyOSBAQAogCQkgKiBJbmRpY2F0ZSBSZWFzc29jaWF0aW9uCiAJCSAqIEVuYWJsZSBUcmFuc21pdHMsIFJlY2VpdmVzIGFuZCBwYXNzIHVwIGRhdGEgZnJhbWVzCiAJCSAqLwotCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX0NIQU5HRVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImxpbmtzdGF0dXM9QVBfQ0hBTkdFXG4iKTsKIAogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELAogCQkJCQkJd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLAotCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKLQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAogCQkJCQkJJnNzaWQsIHNpemVvZihzc2lkKSk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCi0JCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCi0JCQkJCShwODAyMTFwc3RyZF90ICopICZ3bGFuZGV2LT5zc2lkKTsKLQorCQkJCQkocDgwMjExcHN0cmRfdCAqKSZ3bGFuZGV2LT5zc2lkKTsKIAogCQlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOwogCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CkBAIC0xNDUwLDcgKzE0MDEsNyBAQAogCQkgKiBSZXNwb25zZToKIAkJICogQmxvY2sgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKIAkJICovCi0JCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVBfT1VUT0ZSQU5HRSAodW5oYW5kbGVkKVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImxpbmtzdGF0dXM9QVBfT1VUT0ZSQU5HRSAodW5oYW5kbGVkKVxuIik7CiAKIAkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKIApAQCAtMTQ2Myw3ICsxNDE0LDcgQEAKIAkJICogUmVzcG9uc2U6CiAJCSAqIEVuYWJsZSBUcmFuc21pdHMsIFJlY2VpdmVzIGFuZCBwYXNzIHVwIGRhdGEgZnJhbWVzCiAJCSAqLwotCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX0lOUkFOR0VcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJsaW5rc3RhdHVzPUFQX0lOUkFOR0VcbiIpOwogCiAJCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19DT05ORUNURUQ7CiAJCW5ldGlmX2NhcnJpZXJfb24od2xhbmRldi0+bmV0ZGV2KTsKQEAgLTE0NzksMTcgKzE0MzAsMTggQEAKIAkJICogUmVzcG9uc2U6CiAJCSAqIERpc2FibGUgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKIAkJICovCi0JCWlmKGh3LT5qb2luX2FwICYmIC0taHctPmpvaW5fcmV0cmllcyA+IDApCi0JCXsKLQkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90ICAgICAgam9pbnJlcTsKKwkJaWYgKGh3LT5qb2luX2FwICYmIC0taHctPmpvaW5fcmV0cmllcyA+IDApIHsKKwkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7CiAJCQlqb2lucmVxID0gaHctPmpvaW5yZXE7CiAJCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KLQkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAotCQkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAotCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOwotCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOworCQkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywKKwkJCQkJICAgICAgIEhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJCQkgICAgICAgJmpvaW5yZXEsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJsaW5rc3RhdHVzPUFTU09DRkFJTCAocmUtc3VibWl0dGluZyBqb2luKVxuIik7CiAJCX0gZWxzZSB7Ci0JCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFTU09DRkFJTCAodW5oYW5kbGVkKVxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPICJsaW5rc3RhdHVzPUFTU09DRkFJTCAodW5oYW5kbGVkKVxuIik7CiAJCX0KIAogCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOwpAQCAtMTQ5OCw4ICsxNDUwLDggQEAKIAogCWRlZmF1bHQ6CiAJCS8qIFRoaXMgaXMgYmFkLCBJTyBwb3J0IHByb2JsZW1zPyAqLwotCQlXTEFOX0xPR19XQVJOSU5HKAotCQkJInVua25vd24gbGlua3N0YXR1cz0weCUwMnhcbiIsIGh3LT5saW5rX3N0YXR1cyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJ1bmtub3duIGxpbmtzdGF0dXM9MHglMDJ4XG4iLCBody0+bGlua19zdGF0dXMpOwogCQlnb3RvIGZhaWxlZDsKIAkJYnJlYWs7CiAJfQpAQCAtMTUwOSw4ICsxNDYxLDggQEAKIAlwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldiwgd2xhbmRldi0+bGlua3N0YXR1cyk7CiAjZW5kaWYKIAotIGZhaWxlZDoKLQlEQkZFWElUOworZmFpbGVkOgorCXJldHVybjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTMzLDE1ICsxNDg1LDEyIEBACiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CiAKLQlEQkZFTlRFUjsKLQotCWh3LT5saW5rX3N0YXR1c19uZXcgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmxpbmtzdGF0dXMubGlua3N0YXR1cyk7CisJaHctPmxpbmtfc3RhdHVzX25ldyA9IGxlMTZfdG9fY3B1KGluZi0+aW5mby5saW5rc3RhdHVzLmxpbmtzdGF0dXMpOwogCiAJc2NoZWR1bGVfd29yaygmaHctPmxpbmtfYmgpOwogCi0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTE1NjYsNDUgKzE1MTUsNDMgQEAKIHN0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQloZmEzODR4X0Fzc29jU3RhdHVzX3QJcmVjOwotCWludAkJCWk7Ci0KLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfQXNzb2NTdGF0dXNfdCByZWM7CisJaW50IGk7CiAKIAltZW1jcHkoJnJlYywgJmluZi0+aW5mby5hc3NvY3N0YXR1cywgc2l6ZW9mKHJlYykpOwotCXJlYy5hc3NvY3N0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihyZWMuYXNzb2NzdGF0dXMpOwotCXJlYy5yZWFzb24gICAgICA9IGhmYTM4NHgyaG9zdF8xNihyZWMucmVhc29uKTsKKwlyZWMuYXNzb2NzdGF0dXMgPSBsZTE2X3RvX2NwdShyZWMuYXNzb2NzdGF0dXMpOworCXJlYy5yZWFzb24gPSBsZTE2X3RvX2NwdShyZWMucmVhc29uKTsKIAogCS8qCi0JKiogRmluZCB0aGUgYWRkcmVzcyBpbiB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAgSWYgaXQgd2Fzbid0Ci0JKiogZm91bmQsIHRoZW4gdGhpcyBhZGRyZXNzIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGF1dGhlbnRpY2F0ZWQgYW5kCi0JKiogc29tZXRoaW5nIHdlaXJkIGhhcyBoYXBwZW5lZCBpZiB0aGlzIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYW4KLQkqKiAiYXV0aGVudGljYXRpb24gZmFpbGVkIiBtZXNzYWdlLiAgSWYgdGhlIGFkZHJlc3Mgd2FzIGZvdW5kLCB0aGVuCi0JKiogc2V0IHRoZSAiYXNzb2NpYXRlZCIgZmxhZyBmb3IgdGhhdCBzdGF0aW9uLCBiYXNlZCBvbiB3aGV0aGVyIHRoZQotCSoqIHN0YXRpb24gaXMgYXNzb2NpYXRpbmcgb3IgbG9zaW5nIGl0cyBhc3NvY2lhdGlvbi4gIFNvbWV0aGluZyB3ZWlyZAotCSoqIGhhcyBhbHNvIGhhcHBlbmVkIGlmIHdlIGZpbmQgdGhlIGFkZHJlc3MgaW4gdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZAotCSoqIHN0YXRpb25zIGJ1dCB3ZSBhcmUgZ2V0dGluZyBhbiAiYXV0aGVudGljYXRpb24gZmFpbGVkIiBtZXNzYWdlLgotCSovCisJICoqIEZpbmQgdGhlIGFkZHJlc3MgaW4gdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gIElmIGl0IHdhc24ndAorCSAqKiBmb3VuZCwgdGhlbiB0aGlzIGFkZHJlc3MgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgYXV0aGVudGljYXRlZCBhbmQKKwkgKiogc29tZXRoaW5nIHdlaXJkIGhhcyBoYXBwZW5lZCBpZiB0aGlzIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYW4KKwkgKiogImF1dGhlbnRpY2F0aW9uIGZhaWxlZCIgbWVzc2FnZS4gIElmIHRoZSBhZGRyZXNzIHdhcyBmb3VuZCwgdGhlbgorCSAqKiBzZXQgdGhlICJhc3NvY2lhdGVkIiBmbGFnIGZvciB0aGF0IHN0YXRpb24sIGJhc2VkIG9uIHdoZXRoZXIgdGhlCisJICoqIHN0YXRpb24gaXMgYXNzb2NpYXRpbmcgb3IgbG9zaW5nIGl0cyBhc3NvY2lhdGlvbi4gIFNvbWV0aGluZyB3ZWlyZAorCSAqKiBoYXMgYWxzbyBoYXBwZW5lZCBpZiB3ZSBmaW5kIHRoZSBhZGRyZXNzIGluIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQKKwkgKiogc3RhdGlvbnMgYnV0IHdlIGFyZSBnZXR0aW5nIGFuICJhdXRoZW50aWNhdGlvbiBmYWlsZWQiIG1lc3NhZ2UuCisJICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQotCQlpZiAobWVtY21wKHJlYy5zdGFfYWRkciwgaHctPmF1dGhsaXN0LmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pID09IDApCisJCWlmIChtZW1jbXAocmVjLnN0YV9hZGRyLCBody0+YXV0aGxpc3QuYWRkcltpXSwgRVRIX0FMRU4pID09IDApCiAJCQlicmVhazsKIAogCWlmIChpID49IGh3LT5hdXRobGlzdC5jbnQpIHsKIAkJaWYgKHJlYy5hc3NvY3N0YXR1cyAhPSBIRkEzODR4X0FTU09DU1RBVFVTX0FVVEhGQUlMKQotCQkJV0xBTl9MT0dfV0FSTklORygiYXNzb2NzdGF0dXMgaW5mbyBmcmFtZSByZWNlaXZlZCBmb3Igbm9uLWF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhc3NvY3N0YXR1cyBpbmZvIGZyYW1lIHJlY2VpdmVkIGZvciBub24tYXV0aGVudGljYXRlZCBzdGF0aW9uLlxuIik7CiAJfSBlbHNlIHsKIAkJaHctPmF1dGhsaXN0LmFzc29jW2ldID0KLQkJCShyZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19TVEFBU1NPQyB8fAotCQkJIHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX1JFQVNTT0MpOworCQkgICAgKHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX1NUQUFTU09DIHx8CisJCSAgICAgcmVjLmFzc29jc3RhdHVzID09IEhGQTM4NHhfQVNTT0NTVEFUVVNfUkVBU1NPQyk7CiAKIAkJaWYgKHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX0FVVEhGQUlMKQotCQkJV0xBTl9MT0dfV0FSTklORygiYXV0aGZhaWwgYXNzb2NzdGF0dXMgaW5mbyBmcmFtZSByZWNlaXZlZCBmb3IgYXV0aGVudGljYXRlZCBzdGF0aW9uLlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImF1dGhmYWlsIGFzc29jc3RhdHVzIGluZm8gZnJhbWUgcmVjZWl2ZWQgZm9yIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOwogCX0KIAotCURCRkVYSVQ7Ci0KIAlyZXR1cm47CiB9CiAKQEAgLTE2MzAsMTEgKzE1NzcsOSBAQAogc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlEQkZFTlRFUjsKLQogCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCppbmYpKTsKIAlpZiAoc2tiKSB7CiAJCXNrYl9wdXQoc2tiLCBzaXplb2YoKmluZikpOwpAQCAtMTY0MiwxMzIgKzE1ODcsMTI5IEBACiAJCXNrYl9xdWV1ZV90YWlsKCZody0+YXV0aHEsIHNrYik7CiAJCXNjaGVkdWxlX3dvcmsoJmh3LT5saW5rX2JoKTsKIAl9Ci0KLQlEQkZFWElUOwogfQogCiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2F1dGhyZXFfZGVmZXIod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCQloZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0JaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdCAgcmVjOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdCByZWM7CiAKLQlpbnQgICAgaSwgYWRkZWQsIHJlc3VsdCwgY250OwotCXU4ICAqYWRkcjsKLQotCURCRkVOVEVSOworCWludCBpLCBhZGRlZCwgcmVzdWx0LCBjbnQ7CisJdTggKmFkZHI7CiAKIAkvKgotCSoqIEJ1aWxkIHRoZSBBdXRoZW50aWNhdGVTdGF0aW9uIHJlY29yZC4gIEluaXRpYWxpemUgaXQgZm9yIGRlbnlpbmcKLQkqKiBhdXRoZW50aWNhdGlvbi4KLQkqLworCSAqKiBCdWlsZCB0aGUgQXV0aGVudGljYXRlU3RhdGlvbiByZWNvcmQuICBJbml0aWFsaXplIGl0IGZvciBkZW55aW5nCisJICoqIGF1dGhlbnRpY2F0aW9uLgorCSAqLwogCi0JbWVtY3B5KHJlYy5hZGRyZXNzLCBpbmYtPmluZm8uYXV0aHJlcS5zdGFfYWRkciwgV0xBTl9BRERSX0xFTik7CisJbWVtY3B5KHJlYy5hZGRyZXNzLCBpbmYtPmluZm8uYXV0aHJlcS5zdGFfYWRkciwgRVRIX0FMRU4pOwogCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZTsKIAogCS8qCi0JKiogQXV0aGVudGljYXRlIGJhc2VkIG9uIHRoZSBhY2Nlc3MgbW9kZS4KLQkqLworCSAqKiBBdXRoZW50aWNhdGUgYmFzZWQgb24gdGhlIGFjY2VzcyBtb2RlLgorCSAqLwogCiAJc3dpdGNoIChody0+YWNjZXNzbW9kZSkgewotCQljYXNlIFdMQU5fQUNDRVNTX05PTkU6CisJY2FzZSBXTEFOX0FDQ0VTU19OT05FOgogCi0JCQkvKgotCQkJKiogRGVueSBhbGwgbmV3IGF1dGhlbnRpY2F0aW9ucy4gIEhvd2V2ZXIsIGlmIGEgc3RhdGlvbgotCQkJKiogaXMgQUxSRUFEWSBhdXRoZW50aWNhdGVkLCB0aGVuIGFjY2VwdCBpdC4KLQkJCSovCisJCS8qCisJCSAqKiBEZW55IGFsbCBuZXcgYXV0aGVudGljYXRpb25zLiAgSG93ZXZlciwgaWYgYSBzdGF0aW9uCisJCSAqKiBpcyBBTFJFQURZIGF1dGhlbnRpY2F0ZWQsIHRoZW4gYWNjZXB0IGl0LgorCQkgKi8KIAotCQkJZm9yIChpID0gMDsgaSA8IGh3LT5hdXRobGlzdC5jbnQ7IGkrKykKLQkJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBody0+YXV0aGxpc3QuYWRkcltpXSwKLQkJCQkJCVdMQU5fQUREUl9MRU4pID09IDApIHsKLQkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0FDQ0VTU19BTEw6Ci0KLQkJCS8qCi0JCQkqKiBBbGxvdyBhbGwgYXV0aGVudGljYXRpb25zLgotCQkJKi8KLQotCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fQUNDRVNTX0FMTE9XOgotCi0JCQkvKgotCQkJKiogT25seSBhbGxvdyB0aGUgYXV0aGVudGljYXRpb24gaWYgdGhlIE1BQyBhZGRyZXNzCi0JCQkqKiBpcyBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIGFkZHJlc3Nlcy4KLQkJCSoqCi0JCQkqKiBTaW5jZSB0aGlzIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UgbWF5IGJlIGhlcmUKLQkJCSoqIHdoaWxlIHRoZSBhY2Nlc3MgbGlzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nCi0JCQkqKiB1cGRhdGVkLiAgQ2hvb3NlIHRoZSBsaXN0IHdoaWNoIGlzIGN1cnJlbnRseSBva2F5LgotCQkJKiogU2VlICJwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdygpIiBmb3IgZGV0YWlscy4KLQkJCSovCi0KLQkJCWlmIChody0+YWxsb3cubW9kaWZ5ID09IDApIHsKLQkJCQljbnQgID0gaHctPmFsbG93LmNudDsKLQkJCQlhZGRyID0gaHctPmFsbG93LmFkZHJbMF07Ci0JCQl9IGVsc2UgewotCQkJCWNudCAgPSBody0+YWxsb3cuY250MTsKLQkJCQlhZGRyID0gaHctPmFsbG93LmFkZHIxWzBdOworCQlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQorCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sCisJCQkJICAgRVRIX0FMRU4pID09IDApIHsKKwkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKwkJCQlicmVhazsKIAkJCX0KIAotCQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBhZGRyICs9IFdMQU5fQUREUl9MRU4pCi0JCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgYWRkciwgV0xBTl9BRERSX0xFTikgPT0gMCkgewotCQkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQorCQlicmVhazsKIAotCQkJYnJlYWs7CisJY2FzZSBXTEFOX0FDQ0VTU19BTEw6CiAKLQkJY2FzZSBXTEFOX0FDQ0VTU19ERU5ZOgorCQkvKgorCQkgKiogQWxsb3cgYWxsIGF1dGhlbnRpY2F0aW9ucy4KKwkJICovCiAKLQkJCS8qCi0JCQkqKiBBbGxvdyB0aGUgYXV0aGVudGljYXRpb24gVU5MRVNTIHRoZSBNQUMgYWRkcmVzcyBpcwotCQkJKiogaW4gdGhlIGxpc3Qgb2YgZGVuaWVkIGFkZHJlc3Nlcy4KLQkJCSoqCi0JCQkqKiBTaW5jZSB0aGlzIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UgbWF5IGJlIGhlcmUKLQkJCSoqIHdoaWxlIHRoZSBhY2Nlc3MgbGlzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nCi0JCQkqKiB1cGRhdGVkLiAgQ2hvb3NlIHRoZSBsaXN0IHdoaWNoIGlzIGN1cnJlbnRseSBva2F5LgotCQkJKiogU2VlICJwcmlzbTJtaWJfcHJpdl9hY2Nlc3NkZW55KCkiIGZvciBkZXRhaWxzLgotCQkJKi8KKwkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCWJyZWFrOwogCi0JCQlpZiAoaHctPmRlbnkubW9kaWZ5ID09IDApIHsKLQkJCQljbnQgID0gaHctPmRlbnkuY250OwotCQkJCWFkZHIgPSBody0+ZGVueS5hZGRyWzBdOwotCQkJfSBlbHNlIHsKLQkJCQljbnQgID0gaHctPmRlbnkuY250MTsKLQkJCQlhZGRyID0gaHctPmRlbnkuYWRkcjFbMF07CisJY2FzZSBXTEFOX0FDQ0VTU19BTExPVzoKKworCQkvKgorCQkgKiogT25seSBhbGxvdyB0aGUgYXV0aGVudGljYXRpb24gaWYgdGhlIE1BQyBhZGRyZXNzCisJCSAqKiBpcyBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIGFkZHJlc3Nlcy4KKwkJICoqCisJCSAqKiBTaW5jZSB0aGlzIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UgbWF5IGJlIGhlcmUKKwkJICoqIHdoaWxlIHRoZSBhY2Nlc3MgbGlzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nCisJCSAqKiB1cGRhdGVkLiAgQ2hvb3NlIHRoZSBsaXN0IHdoaWNoIGlzIGN1cnJlbnRseSBva2F5LgorCQkgKiogU2VlICJwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdygpIiBmb3IgZGV0YWlscy4KKwkJICovCisKKwkJaWYgKGh3LT5hbGxvdy5tb2RpZnkgPT0gMCkgeworCQkJY250ID0gaHctPmFsbG93LmNudDsKKwkJCWFkZHIgPSBody0+YWxsb3cuYWRkclswXTsKKwkJfSBlbHNlIHsKKwkJCWNudCA9IGh3LT5hbGxvdy5jbnQxOworCQkJYWRkciA9IGh3LT5hbGxvdy5hZGRyMVswXTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgYWRkciArPSBFVEhfQUxFTikKKwkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGFkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOworCQlicmVhazsKIAotCQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBhZGRyICs9IFdMQU5fQUREUl9MRU4pCi0JCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgYWRkciwgV0xBTl9BRERSX0xFTikgPT0gMCkgewotCQkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfdW5zcGVjX2ZhaWx1cmU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwljYXNlIFdMQU5fQUNDRVNTX0RFTlk6CiAKLQkJCWJyZWFrOworCQkvKgorCQkgKiogQWxsb3cgdGhlIGF1dGhlbnRpY2F0aW9uIFVOTEVTUyB0aGUgTUFDIGFkZHJlc3MgaXMKKwkJICoqIGluIHRoZSBsaXN0IG9mIGRlbmllZCBhZGRyZXNzZXMuCisJCSAqKgorCQkgKiogU2luY2UgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG1heSBiZSBoZXJlCisJCSAqKiB3aGlsZSB0aGUgYWNjZXNzIGxpc3QgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZworCQkgKiogdXBkYXRlZC4gIENob29zZSB0aGUgbGlzdCB3aGljaCBpcyBjdXJyZW50bHkgb2theS4KKwkJICoqIFNlZSAicHJpc20ybWliX3ByaXZfYWNjZXNzZGVueSgpIiBmb3IgZGV0YWlscy4KKwkJICovCisKKwkJaWYgKGh3LT5kZW55Lm1vZGlmeSA9PSAwKSB7CisJCQljbnQgPSBody0+ZGVueS5jbnQ7CisJCQlhZGRyID0gaHctPmRlbnkuYWRkclswXTsKKwkJfSBlbHNlIHsKKwkJCWNudCA9IGh3LT5kZW55LmNudDE7CisJCQlhZGRyID0gaHctPmRlbnkuYWRkcjFbMF07CisJCX0KKworCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGFkZHIgKz0gRVRIX0FMRU4pCisJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBhZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZTsKKwkJCQlicmVhazsKKwkJCX0KKworCQlicmVhazsKIAl9CiAKIAkvKgotCSoqIElmIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBva2F5LCB0aGVuIGFkZCB0aGUgTUFDIGFkZHJlc3MgdG8gdGhlIGxpc3QKLQkqKiBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAgRG9uJ3QgYWRkIHRoZSBhZGRyZXNzIGlmIGl0IGlzIGFscmVhZHkgaW4KLQkqKiB0aGUgbGlzdC4gICg4MDIuMTFiIGRvZXMgbm90IHNlZW0gdG8gZGlzYWxsb3cgYSBzdGF0aW9uIGZyb20gaXNzdWluZwotCSoqIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qgd2hlbiB0aGUgc3RhdGlvbiBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuCi0JKiogRG9lcyB0aGlzIHNvcnQgb2YgdGhpbmcgZXZlciBoYXBwZW4/ICBXZSBtaWdodCBhcyB3ZWxsIGRvIHRoZSBjaGVjawotCSoqIGp1c3QgaW4gY2FzZS4pCi0JKi8KKwkgKiogSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGlzIG9rYXksIHRoZW4gYWRkIHRoZSBNQUMgYWRkcmVzcyB0byB0aGUgbGlzdAorCSAqKiBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAgRG9uJ3QgYWRkIHRoZSBhZGRyZXNzIGlmIGl0IGlzIGFscmVhZHkgaW4KKwkgKiogdGhlIGxpc3QuICAoODAyLjExYiBkb2VzIG5vdCBzZWVtIHRvIGRpc2FsbG93IGEgc3RhdGlvbiBmcm9tIGlzc3VpbmcKKwkgKiogYW4gYXV0aGVudGljYXRpb24gcmVxdWVzdCB3aGVuIHRoZSBzdGF0aW9uIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZC4KKwkgKiogRG9lcyB0aGlzIHNvcnQgb2YgdGhpbmcgZXZlciBoYXBwZW4/ICBXZSBtaWdodCBhcyB3ZWxsIGRvIHRoZSBjaGVjaworCSAqKiBqdXN0IGluIGNhc2UuKQorCSAqLwogCiAJYWRkZWQgPSAwOwogCiAJaWYgKHJlYy5zdGF0dXMgPT0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bCkgewogCQlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQotCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pID09IDApCisJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBody0+YXV0aGxpc3QuYWRkcltpXSwgRVRIX0FMRU4pCisJCQkgICAgPT0gMCkKIAkJCQlicmVhazsKIAogCQlpZiAoaSA+PSBody0+YXV0aGxpc3QuY250KSB7CkBAIC0xNzc1LDcgKzE3MTcsNyBAQAogCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19hcF9mdWxsOwogCQkJfSBlbHNlIHsKIAkJCQltZW1jcHkoaHctPmF1dGhsaXN0LmFkZHJbaHctPmF1dGhsaXN0LmNudF0sCi0JCQkJCXJlYy5hZGRyZXNzLCBXTEFOX0FERFJfTEVOKTsKKwkJCQkgICAgICAgcmVjLmFkZHJlc3MsIEVUSF9BTEVOKTsKIAkJCQlody0+YXV0aGxpc3QuY250Kys7CiAJCQkJYWRkZWQgPSAxOwogCQkJfQpAQCAtMTc4MywyNyArMTcyNSwyNiBAQAogCX0KIAogCS8qCi0JKiogU2VuZCBiYWNrIHRoZSByZXN1bHRzIG9mIHRoZSBhdXRoZW50aWNhdGlvbi4gIElmIHRoaXMgZG9lc24ndCB3b3JrLAotCSoqIHRoZW4gbWFrZSBzdXJlIHRvIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSBhdXRoZW50aWNhdGVkIGxpc3QgaWYKLQkqKiBpdCB3YXMgYWRkZWQuCi0JKi8KKwkgKiogU2VuZCBiYWNrIHRoZSByZXN1bHRzIG9mIHRoZSBhdXRoZW50aWNhdGlvbi4gIElmIHRoaXMgZG9lc24ndCB3b3JrLAorCSAqKiB0aGVuIG1ha2Ugc3VyZSB0byByZW1vdmUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgYXV0aGVudGljYXRlZCBsaXN0IGlmCisJICoqIGl0IHdhcyBhZGRlZC4KKwkgKi8KIAotCXJlYy5zdGF0dXMgPSBob3N0MmhmYTM4NHhfMTYocmVjLnN0YXR1cyk7CisJcmVjLnN0YXR1cyA9IGNwdV90b19sZTE2KHJlYy5zdGF0dXMpOwogCXJlYy5hbGdvcml0aG0gPSBpbmYtPmluZm8uYXV0aHJlcS5hbGdvcml0aG07CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9BVVRIRU5USUNBVEVTVEEsCi0JCQkJCQkJJnJlYywgc2l6ZW9mKHJlYykpOworCQkJCQkmcmVjLCBzaXplb2YocmVjKSk7CiAJaWYgKHJlc3VsdCkgewotCQlpZiAoYWRkZWQpIGh3LT5hdXRobGlzdC5jbnQtLTsKLQkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhhdXRoZW50aWNhdGVzdGF0aW9uKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJaWYgKGFkZGVkKQorCQkJaHctPmF1dGhsaXN0LmNudC0tOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJzZXRjb25maWcoYXV0aGVudGljYXRlc3RhdGlvbikgZmFpbGVkLCByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOwogCX0KLQotCURCRkVYSVQ7Ci0KIAlyZXR1cm47CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9pbmZfcHN1c2VyY250CiAqCkBAIC0xODI1LDc0ICsxNzY2LDE0IEBACiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OwogCi0JREJGRU5URVI7Ci0KLQlody0+cHN1c2VyY291bnQgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLnBzdXNlcmNudC51c2VyY250KTsKLQotCURCRkVYSVQ7CisJaHctPnBzdXNlcmNvdW50ID0gbGUxNl90b19jcHUoaW5mLT5pbmZvLnBzdXNlcmNudC51c2VyY250KTsKIAogCXJldHVybjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIHByaXNtMnN0YV9ldl9kdGltCi0qCi0qIEhhbmRsZXMgdGhlIERUSU0gZWFybHkgd2FybmluZyBldmVudC4KLSoKLSogQXJndW1lbnRzOgotKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCi0qIENhbGwgY29udGV4dDoKLSoJaW50ZXJydXB0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcHJpc20yc3RhX2V2X2R0aW0od2xhbmRldmljZV90ICp3bGFuZGV2KQotewotI2lmIDAKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0jZW5kaWYKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRygzLCAiRFRJTSBldmVudCwgY3VycmVudGx5IHVuaGFuZGxlZC5cbiIpOwotCURCRkVYSVQ7Ci0JcmV0dXJuOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJzdGFfZXZfaW5mZHJvcAotKgotKiBIYW5kbGVzIHRoZSBJbmZEcm9wIGV2ZW50LgotKgotKiBBcmd1bWVudHM6Ci0qCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQotKgotKiBSZXR1cm5zOgotKglub3RoaW5nCi0qCi0qIFNpZGUgZWZmZWN0czoKLSoKLSogQ2FsbCBjb250ZXh0OgotKglpbnRlcnJ1cHQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBwcmlzbTJzdGFfZXZfaW5mZHJvcCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCi17Ci0jaWYgMAotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLSNlbmRpZgotCURCRkVOVEVSOwotCVdMQU5fTE9HX0RFQlVHKDMsICJJbmZvIGZyYW1lIGRyb3BwZWQgZHVlIHRvIGNhcmQgbWVtIGxvdy5cbiIpOwotCURCRkVYSVQ7Ci0JcmV0dXJuOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfZXZfaW5mbwogKgogKiBIYW5kbGVzIHRoZSBJbmZvIGV2ZW50LgpAQCAtMTkxMSw1NiArMTc5Miw1MyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCiB7Ci0JREJGRU5URVI7Ci0JaW5mLT5pbmZvdHlwZSA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm90eXBlKTsKKwlpbmYtPmluZm90eXBlID0gbGUxNl90b19jcHUoaW5mLT5pbmZvdHlwZSk7CiAJLyogRGlzcGF0Y2ggKi8KLQlzd2l0Y2ggKCBpbmYtPmluZm90eXBlICkgewotCQljYXNlIEhGQTM4NHhfSVRfSEFORE9WRVJBRERSOgotCQkJcHJpc20yc3RhX2luZl9oYW5kb3Zlcih3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSEZBMzg0eF9JVF9DT01NVEFMTElFUzoKLQkJCXByaXNtMnN0YV9pbmZfdGFsbGllcyh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICBjYXNlIEhGQTM4NHhfSVRfSE9TVFNDQU5SRVNVTFRTOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMod2xhbmRldiwgaW5mKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfU0NBTlJFU1VMVFM6Ci0JCQlwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzKHdsYW5kZXYsIGluZik7Ci0JCQlicmVhazsKLQkJY2FzZSBIRkEzODR4X0lUX0NISU5GT1JFU1VMVFM6Ci0JCQlwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfTElOS1NUQVRVUzoKLQkJCXByaXNtMnN0YV9pbmZfbGlua3N0YXR1cyh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSEZBMzg0eF9JVF9BU1NPQ1NUQVRVUzoKLQkJCXByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfQVVUSFJFUToKLQkJCXByaXNtMnN0YV9pbmZfYXV0aHJlcSh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSEZBMzg0eF9JVF9QU1VTRVJDTlQ6Ci0JCQlwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JICAgICAgICBjYXNlIEhGQTM4NHhfSVRfS0VZSURDSEFOR0VEOgotCQkJV0xBTl9MT0dfV0FSTklORygiVW5oYW5kbGVkIElUX0tFWUlEQ0hBTkdFRFxuIik7Ci0JCQlicmVhazsKLQkgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9BU1NPQ1JFUToKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIlVuaGFuZGxlZCBJVF9BU1NPQ1JFUVxuIik7Ci0JCQlicmVhazsKLQkgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9NSUNGQUlMVVJFOgotCQkJV0xBTl9MT0dfV0FSTklORygiVW5oYW5kbGVkIElUX01JQ0ZBSUxVUkVcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXTEFOX0xPR19XQVJOSU5HKAotCQkJCSJVbmtub3duIGluZm8gdHlwZT0weCUwMnhcbiIsIGluZi0+aW5mb3R5cGUpOwotCQkJYnJlYWs7CisJc3dpdGNoIChpbmYtPmluZm90eXBlKSB7CisJY2FzZSBIRkEzODR4X0lUX0hBTkRPVkVSQUREUjoKKwkJcHJpc20yc3RhX2luZl9oYW5kb3Zlcih3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfQ09NTVRBTExJRVM6CisJCXByaXNtMnN0YV9pbmZfdGFsbGllcyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfSE9TVFNDQU5SRVNVTFRTOgorCQlwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfU0NBTlJFU1VMVFM6CisJCXByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMod2xhbmRldiwgaW5mKTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X0lUX0NISU5GT1JFU1VMVFM6CisJCXByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfTElOS1NUQVRVUzoKKwkJcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKHdsYW5kZXYsIGluZik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9BU1NPQ1NUQVRVUzoKKwkJcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfQVVUSFJFUToKKwkJcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXYsIGluZik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9QU1VTRVJDTlQ6CisJCXByaXNtMnN0YV9pbmZfcHN1c2VyY250KHdsYW5kZXYsIGluZik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9LRVlJRENIQU5HRUQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuaGFuZGxlZCBJVF9LRVlJRENIQU5HRURcbiIpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfQVNTT0NSRVE6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuaGFuZGxlZCBJVF9BU1NPQ1JFUVxuIik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9NSUNGQUlMVVJFOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmhhbmRsZWQgSVRfTUlDRkFJTFVSRVxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJVbmtub3duIGluZm8gdHlwZT0weCUwMnhcbiIsIGluZi0+aW5mb3R5cGUpOworCQlicmVhazsKIAl9Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9ldl90eGV4YwogKgpAQCAtMTk4MiwxNSArMTg2MCwxMSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpCiB7Ci0JREJGRU5URVI7CisJcHJfZGVidWcoIlR4RXhjIHN0YXR1cz0weCV4LlxuIiwgc3RhdHVzKTsKIAotCVdMQU5fTE9HX0RFQlVHKDMsICJUeEV4YyBzdGF0dXM9MHgleC5cbiIsIHN0YXR1cyk7Ci0KLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2V2X3R4CiAqCkBAIC0yMDA5LDE1ICsxODgzLDEyIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHZvaWQgcHJpc20yc3RhX2V2X3R4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IHN0YXR1cykKIHsKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRyg0LCAiVHggQ29tcGxldGUsIHN0YXR1cz0weCUwNHhcbiIsIHN0YXR1cyk7CisJcHJfZGVidWcoIlR4IENvbXBsZXRlLCBzdGF0dXM9MHglMDR4XG4iLCBzdGF0dXMpOwogCS8qIHVwZGF0ZSBsaW51eCBuZXR3b3JrIHN0YXRzICovCiAJd2xhbmRldi0+bGludXhfc3RhdHMudHhfcGFja2V0cysrOwotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfZXZfcngKICoKQEAgLTIwMzYsMTEgKzE5MDcsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHByaXNtMnN0YV9ldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JREJGRU5URVI7Ci0KIAlwODAyMTFuZXRkZXZfcngod2xhbmRldiwgc2tiKTsKLQotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC0yMDYyLDExICsxOTI5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCURCRkVOVEVSOwotCiAJbmV0aWZfd2FrZV9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwotCi0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTIwOTEsMTcgKzE5NTQsMTcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHdsYW5kZXZpY2VfdCAqY3JlYXRlX3dsYW4odm9pZCkKIHsKLSAgICAgICAgd2xhbmRldmljZV90ICAgICp3bGFuZGV2ID0gTlVMTDsKLQloZmEzODR4X3QJKmh3ID0gTlVMTDsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBOVUxMOworCWhmYTM4NHhfdCAqaHcgPSBOVUxMOwogCi0gICAgICAJLyogQWxsb2Mgb3VyIHN0cnVjdHVyZXMgKi8KLQl3bGFuZGV2ID0Ja21hbGxvYyhzaXplb2Yod2xhbmRldmljZV90KSwgR0ZQX0tFUk5FTCk7Ci0JaHcgPQkJa21hbGxvYyhzaXplb2YoaGZhMzg0eF90KSwgR0ZQX0tFUk5FTCk7CisJLyogQWxsb2Mgb3VyIHN0cnVjdHVyZXMgKi8KKwl3bGFuZGV2ID0ga21hbGxvYyhzaXplb2Yod2xhbmRldmljZV90KSwgR0ZQX0tFUk5FTCk7CisJaHcgPSBrbWFsbG9jKHNpemVvZihoZmEzODR4X3QpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghd2xhbmRldiB8fCAhaHcpIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgZGV2X2luZm8pOwotCQlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7Ci0JCWlmIChodykJCWtmcmVlKGh3KTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJa2ZyZWUod2xhbmRldik7CisJCWtmcmVlKGh3KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMTIxLDI0ICsxOTg0LDIxIEBACiAJd2xhbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcHJpc20yc3RhX3NldG11bHRpY2FzdDsKIAl3bGFuZGV2LT50eF90aW1lb3V0ID0gaGZhMzg0eF90eF90aW1lb3V0OwogCi0Jd2xhbmRldi0+bnNkY2FwcyA9IFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCB8Ci0JICAgICAgICAgICAgICAgICAgIFA4MDIxMV9OU0RDQVBfQVVUT0pPSU47CisJd2xhbmRldi0+bnNkY2FwcyA9IFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCB8IFA4MDIxMV9OU0RDQVBfQVVUT0pPSU47CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgcHJpdmF0ZSBkYXRhIHN0dWN0dXJlLiAqLwotICAgICAgICBody0+ZG90MTFfZGVzaXJlZF9ic3NfdHlwZSA9IDE7CisJaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGUgPSAxOwogCiAJcmV0dXJuIHdsYW5kZXY7CiB9CiAKIHZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGNvbW1zcXVhbF9iaCk7Ci0gICAgICAgIHdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CisJaGZhMzg0eF90ICpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgY29tbXNxdWFsX2JoKTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBody0+d2xhbmRldjsKIAloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKQogCQlnb3RvIGRvbmU7CiAKQEAgLTIxNTUsNTggKzIwMTUsNDkgQEAKIAkJCQkJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4pOwogCiAJCWlmIChyZXN1bHQpIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJlcnJvciBmZXRjaGluZyBjb21tc3F1YWxcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBmZXRjaGluZyBjb21tc3F1YWxcbiIpOwogCQkJZ290byBkb25lOwogCQl9CiAKLQkJLy8gcXVhbC5DUV9jdXJyQlNTOyAvLyBsaW5rCi0JCS8vIEFTTF9jdXJyQlNTOyAgLy8gbGV2ZWwKLQkJLy8gcXVhbC5BTkxfY3VyckZDOyAvLyBub2lzZQotCi0JCVdMQU5fTE9HX0RFQlVHKDMsICJjb21tc3F1YWwgJWQgJWQgJWRcbiIsCi0JCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkNRX2N1cnJCU1MpLAotCQkJICAgICAgIGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BU0xfY3VyckJTUyksCi0JCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkFOTF9jdXJyRkMpKTsKKwkJcHJfZGVidWcoImNvbW1zcXVhbCAlZCAlZCAlZFxuIiwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkNRX2N1cnJCU1MpLAorCQkgICAgICAgbGUxNl90b19jcHUoaHctPnF1YWwuQVNMX2N1cnJCU1MpLAorCQkgICAgICAgbGUxNl90b19jcHUoaHctPnF1YWwuQU5MX2N1cnJGQykpOwogCX0KIAogCS8qIExhc3RseSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIEJTU0lEIGRpZG4ndCBjaGFuZ2Ugb24gdXMgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsCiAJCQkJCXdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCi0JCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsCiAJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19ERUJVRygxLAotCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCi0JCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOwotCisJCQkJKHA4MDIxMXBzdHJkX3QgKikmd2xhbmRldi0+c3NpZCk7CiAKIAkvKiBSZXNjaGVkdWxlIHRpbWVyICovCiAJbW9kX3RpbWVyKCZody0+Y29tbXNxdWFsX3RpbWVyLCBqaWZmaWVzICsgSFopOwogCi0gZG9uZToKLQlEQkZFWElUOworZG9uZToKKwk7CiB9CiAKIHZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKLQotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CiAKIAlzY2hlZHVsZV93b3JrKCZody0+Y29tbXNxdWFsX2JoKTsKLQotCURCRkVYSVQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCmluZGV4IDhmN2IxZjIuLmQ4YTEyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCkBAIC0xMSw0NCArMTEsNzAgQEAKIAl7UFJJU01fVVNCX0RFVklDRSgweDA0YmIsIDB4MDkyMiwgIklPRGF0YSBBaXJQb3J0IFdOLUIxMS9VU0JTIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDdhYSwgMHgwMDEyLCAiQ29yZWdhIFdpcmVsZXNzIExBTiBVU0IgU3RpY2stMTEiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwOWFhLCAweDM2NDIsICJQcmlzbTIueCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4MDQwOCwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4MDQyMSwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDE5MTUsIDB4MjIzNiwgIkxpbmtzeXMgV1VTQjExdjMuMCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMiwgIkxpbmtzeXMgV1VTQjExdjIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMywgIkxpbmtzeXMgV1VTQjEydjEuMSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA2N2MsIDB4MTAyMiwgIlNpZW1lbnMgU3BlZWRTdHJlYW0gMTAyMiAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMywgIkNvbXBhcS9JbnRlbCBXMTAwIFBSTy9XaXJlbGVzcyAxMU1icHMgbXVsdGlwb3J0IFdMQU4gQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA0MTEsIDB4MDAxNiwgIk1lbGNvIFdMSS1VU0ItUzExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwOGRlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHg4MDg2LCAweDExMTEsICJJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIgTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGQ4ZSwgMHg3YTAxLCAiUFJJU00yNSBJRUVFIDgwMi4xMSBNaW5pIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMDZlLCAiTWljcm9zb2Z0IE1ONTEwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDE2NjgsIDB4MDQwOCwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgxNjY4LCAweDA0MjEsICJBY3Rpb250ZWMgUHJpc20yLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MTkxNSwgMHgyMjM2LCAiTGlua3N5cyBXVVNCMTF2My4wIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA2NmIsIDB4MjIxMiwgIkxpbmtzeXMgV1VTQjExdjIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNjZiLCAweDIyMTMsICJMaW5rc3lzIFdVU0IxMnYxLjEgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDY3YywgMHgxMDIyLCAiU2llbWVucyBTcGVlZFN0cmVhbSAxMDIyIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA0OWYsIDB4MDAzMywKKwkgICJDb21wYXEvSW50ZWwgVzEwMCBQUk8vV2lyZWxlc3MgMTFNYnBzIG11bHRpcG9ydCBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDQxMSwgMHgwMDE2LCAiTWVsY28gV0xJLVVTQi1TMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwOGRlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4ODA4NiwgMHgxMTExLCAiSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCIExBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwZDhlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDQ1ZSwgMHgwMDZlLCAiTWljcm9zb2Z0IE1ONTEwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDk2NywgMHgwMjA0LCAiQWNlciBXYXJwbGluayBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwMiwgIlotQ29tIDcyNS83MjYgUHJpc20yLjUgVVNCL1VTQiBJbnRlZ3JhdGVkIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA1LCAiWi1Db20gWGw3MzUgV2lyZWxlc3MgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDQxM2MsIDB4ODEwMCwgIkRlbGwgVHJ1ZU1vYmlsZSAxMTgwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGIzYiwgMHgxNjAxLCAiQUxMTkVUIDAxOTMgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwYjNiLCAweDE2MDIsICJaeVhFTCBaeUFJUiBCMjAwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGJhZiwgMHgwMGViLCAiVVNSb2JvdGljcyBVU1IxMTIwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDQxMSwgMHgwMDI3LCAiTWVsY28gV0xJLVVTQi1LUzExRyAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAotICAgICAgICB7UFJJU01fVVNCX0RFVklDRSgweDA0ZjEsIDB4MzAwOSwgIkpWQyBNUC1YUDcyNTAgQnVpbHRpbiBVU0IgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDBjZGUsIDB4MDAwMiwgIlotQ29tIDcyNS83MjYgUHJpc20yLjUgVVNCL1VTQiBJbnRlZ3JhdGVkIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDBjZGUsIDB4MDAwNSwgIlotQ29tIFhsNzM1IFdpcmVsZXNzIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4NDEzYywgMHg4MTAwLCAiRGVsbCBUcnVlTW9iaWxlIDExODAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MGIzYiwgMHgxNjAxLCAiQUxMTkVUIDAxOTMgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MGIzYiwgMHgxNjAyLCAiWnlYRUwgWnlBSVIgQjIwMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwYmFmLCAweDAwZWIsICJVU1JvYm90aWNzIFVTUjExMjAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDQxMSwgMHgwMDI3LCAiTWVsY28gV0xJLVVTQi1LUzExRyAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA0ZjEsIDB4MzAwOSwgIkpWQyBNUC1YUDcyNTAgQnVpbHRpbiBVU0IgV0xBTiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDg0NiwgMHg0MTEwLCAiTmV0R2VhciBNQTExMSIpfSwKLSAgICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwM2YzLCAweDAwMjAsICJBZGFwdGVjIEFXTi04MDIwIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCi0vLwl7UFJJU01fVVNCX0RFVklDRSgweDBhY2UsIDB4MTIwMSwgIlp5REFTIFpEMTIwMSBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDAzZjMsIDB4MDAyMCwgIkFkYXB0ZWMgQVdOLTgwMjAgVVNCIFdMQU4gQWRhcHRlciIpfSwKKy8qICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMDEsICJaeURBUyBaRDEyMDEgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sICovCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyODIxLCAweDMzMDAsICJBU1VTLVdMMTQwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAwLCAiRFdMLTEyMiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDIwMDEsIDB4MzcwMiwgIkRXTC0xMjAgUmV2IEYgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MjAwMSwgMHgzNzAyLCAiRFdMLTEyMCBSZXYgRiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDUwYzIsIDB4NDAxMywgIkF2ZXJhdGVjIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyYzAyLCAweDE0ZWEsICJQbGFuZXggR1ctVVMxMUggV0xBTiBVU0IgQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDEyNGEsIDB4MTY4YiwgIkFpcnZhc3QgUFJJU00zIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwODNhLCAweDM1MDMsICJULVNpbnVzIDExMSBVU0IgV0xBTiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MjgyMSwgMHgzMzAwLCAiSGF3a2luZyBIaWdoREIgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwNDExLCAweDAwNDQsICJNZWxjbyBXTEktVVNCLUtCMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNDExLCAweDAwNDQsICJNZWxjbyBXTEktVVNCLUtCMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4NjEwNiwgIlJPUEVYIEZyZWVMYW4gODAyLjExYiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDEyNGEsIDB4NDAxNywgIlBoZWVuZXQgV0wtNTAzSUEgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgxMjRhLCAweDQwMTcsICJQaGVlbmV0IFdMLTUwM0lBIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwYmIyLCAweDAzMDIsICJBbWJpdCBNaWNyb3N5c3RlbXMgQ29ycC4iKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHg5MDE2LCAweDE4MmQsICJTaXRlY29tIFdMLTAyMiA4MDIuMTFiIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDU0MywgMHgwZjAxLCAiVmlld1NvbmljIEFpcnN5bmMgVVNCIEFkYXB0ZXIgMTFNYnBzIChQcmlzbTIuNSkiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4OTAxNiwgMHgxODJkLCAiU2l0ZWNvbSBXTC0wMjIgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNTQzLCAweDBmMDEsICJWaWV3U29uaWMgQWlyc3luYyBVU0IgQWRhcHRlciAxMU1icHMgKFByaXNtMi41KSIpfSwKIAl7IC8qIHRlcm1pbmF0b3IgKi8gfQogfTsKIApAQCAtNzUsMjkgKzEwMSwyNiBAQAogKglJJ20gbm90IHN1cmUsIGFzc3VtZSBpdCdzIGludGVycnVwdC4KICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwcmlzbTJzdGFfcHJvYmVfdXNiKAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBwcmlzbTJzdGFfcHJvYmVfdXNiKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CiAKLQl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSBOVUxMOwotCWhmYTM4NHhfdAkqaHcgPSBOVUxMOwotCWludCAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKLQotCURCRkVOVEVSOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90ICpodyA9IE5VTEw7CisJaW50IHJlc3VsdCA9IDA7CiAKIAlkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CiAKIAlpZiAoKHdsYW5kZXYgPSBjcmVhdGVfd2xhbigpKSA9PSBOVUxMKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKIAkJcmVzdWx0ID0gLUVJTzsKIAkJZ290byBmYWlsZWQ7CiAJfQogCWh3ID0gd2xhbmRldi0+cHJpdjsKIAotCWlmICggd2xhbl9zZXR1cCh3bGFuZGV2KSAhPSAwICkgewotCQlXTEFOX0xPR19FUlJPUigiJXM6IHdsYW5fc2V0dXAoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJaWYgKHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOwogCQlyZXN1bHQgPSAtRUlPOwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC0xMTQsMTUgKzEzNywxNCBAQAogCS8qIERvIGEgY2hpcC1sZXZlbCByZXNldCBvbiB0aGUgTUFDICovCiAJaWYgKHByaXNtMl9kb3Jlc2V0KSB7CiAJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAotCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKLQkJCQlwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCQkJCSAgIHByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQkJICAgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOwogCQlpZiAocmVzdWx0ICE9IDApIHsKIAkJCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKIAkJCWhmYTM4NHhfZGVzdHJveShodyk7CiAJCQlyZXN1bHQgPSAtRUlPOwotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJIiVzOiBoZmEzODR4X2NvcmVyZXNldCgpIGZhaWxlZC5cbiIsCi0JCQkJZGV2X2luZm8pOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBoZmEzODR4X2NvcmVyZXNldCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJfQpAQCAtMTMxLDMwICsxNTMsMjggQEAKIAogCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOwogCi0gICAgICAgIGlmICggcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KSAhPSAwICkgewotCQlXTEFOX0xPR19FUlJPUigiJXM6IHJlZ2lzdGVyX3dsYW5kZXYoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJaWYgKHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldikgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWdpc3Rlcl93bGFuZGV2KCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOwogCQlyZXN1bHQgPSAtRUlPOwogCQlnb3RvIGZhaWxlZDsKLSAgICAgICAgfQorCX0KIAogLyogZW5hYmxlIHRoZSBjYXJkICovCiAJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2VuYWJsZSk7CiAKIAlnb3RvIGRvbmU7CiAKLSBmYWlsZWQ6Ci0JaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOwotCWlmIChodykJCWtmcmVlKGh3KTsKK2ZhaWxlZDoKKwlrZnJlZSh3bGFuZGV2KTsKKwlrZnJlZShodyk7CiAJd2xhbmRldiA9IE5VTEw7CiAKLSBkb25lOgotCURCRkVYSVQ7Ci0KK2RvbmU6CisJcDgwMjExX2FsbG93X2lvY3Rscyh3bGFuZGV2KTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgd2xhbmRldik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiCiAqCkBAIC0xNzQsMjIgKzE5NCwxOSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLXByaXNtMnN0YV9kaXNjb25uZWN0X3VzYihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQorc3RhdGljIHZvaWQgcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7Ci0Jd2xhbmRldmljZV90CQkqd2xhbmRldjsKLQotICAgICAgICBEQkZFTlRFUjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXY7CiAKIAl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAKLQlpZiAoIHdsYW5kZXYgIT0gTlVMTCApIHsKKwlpZiAod2xhbmRldiAhPSBOVUxMKSB7CiAJCUxJU1RfSEVBRChjbGVhbmxpc3QpOwotCQlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeTsKLQkJc3RydWN0IGxpc3RfaGVhZAkqdGVtcDsKLQkJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCQlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAKIAkJaWYgKCFodykKIAkJCWdvdG8gZXhpdDsKQEAgLTIzMSw3ICsyNDgsNyBAQAogCQkgKiByZXNwb25zZXMgdGhhdCB3ZSBoYXZlIHNodXQgZG93bi4KIAkJICovCiAJCWxpc3RfZm9yX2VhY2goZW50cnksICZjbGVhbmxpc3QpIHsKLQkJCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCQkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKIAkJCWN0bHggPSBsaXN0X2VudHJ5KGVudHJ5LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7CiAJCQljb21wbGV0ZSgmY3RseC0+ZG9uZSk7CkBAIC0yNjQsMTMgKzI4MSwxMCBAQAogCQlrZnJlZSh3bGFuZGV2KTsKIAl9CiAKLSBleGl0OgotCitleGl0OgogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQlEQkZFWElUOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwcmlzbTJfdXNiX2RyaXZlciA9IHsKIAkubmFtZSA9ICJwcmlzbTJfdXNiIiwKIAkucHJvYmUgPSBwcmlzbTJzdGFfcHJvYmVfdXNiLApAQCAtMjgxLDIxICsyOTUsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgcHJpc20ydXNiX2luaXQodm9pZCkKIHsKLSAgICAgICAgREJGRU5URVI7Ci0KIAkvKiBUaGlzIGNhbGwgd2lsbCByZXN1bHQgaW4gY2FsbHMgdG8gcHJpc20yc3RhX3Byb2JlX3VzYi4gKi8KIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZwcmlzbTJfdXNiX2RyaXZlcik7Ci0KLQlEQkZFWElUOwogfTsKIAogc3RhdGljIHZvaWQgX19leGl0IHByaXNtMnVzYl9jbGVhbnVwKHZvaWQpCiB7Ci0gICAgICAgIERCRkVOVEVSOwotCiAJdXNiX2RlcmVnaXN0ZXIoJnByaXNtMl91c2JfZHJpdmVyKTsKLQotCURCRkVYSVQ7CiB9OwogCiBtb2R1bGVfaW5pdChwcmlzbTJ1c2JfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvd2xhbl9jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI4YTUxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qIHdsYW5fY29tcGF0LmgKLSoKLSogVHlwZXMgYW5kIG1hY3JvcyB0byBhaWQgaW4gcG9ydGFiaWxpdHkKLSoKLSogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogbGludXgtd2xhbgotKgotKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCi0qICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSoKLSogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKLSogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0qICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCi0qICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoKLSogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAotKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0qICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKLSogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KLSogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCi0qICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCi0qIG1hZGUgZGlyZWN0bHkgdG86Ci0qCi0qIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCi0qIGluZm9AbGludXgtd2xhbi5jb20KLSogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQotKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNkZWZpbmUgX1dMQU5fQ09NUEFUX0gKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIEJpdCBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jZGVmaW5lIEJJVDAJMHgwMDAwMDAwMQotI2RlZmluZSBCSVQxCTB4MDAwMDAwMDIKLSNkZWZpbmUgQklUMgkweDAwMDAwMDA0Ci0jZGVmaW5lIEJJVDMJMHgwMDAwMDAwOAotI2RlZmluZSBCSVQ0CTB4MDAwMDAwMTAKLSNkZWZpbmUgQklUNQkweDAwMDAwMDIwCi0jZGVmaW5lIEJJVDYJMHgwMDAwMDA0MAotI2RlZmluZSBCSVQ3CTB4MDAwMDAwODAKLSNkZWZpbmUgQklUOAkweDAwMDAwMTAwCi0jZGVmaW5lIEJJVDkJMHgwMDAwMDIwMAotI2RlZmluZSBCSVQxMAkweDAwMDAwNDAwCi0jZGVmaW5lIEJJVDExCTB4MDAwMDA4MDAKLSNkZWZpbmUgQklUMTIJMHgwMDAwMTAwMAotI2RlZmluZSBCSVQxMwkweDAwMDAyMDAwCi0jZGVmaW5lIEJJVDE0CTB4MDAwMDQwMDAKLSNkZWZpbmUgQklUMTUJMHgwMDAwODAwMAotI2RlZmluZSBCSVQxNgkweDAwMDEwMDAwCi0jZGVmaW5lIEJJVDE3CTB4MDAwMjAwMDAKLSNkZWZpbmUgQklUMTgJMHgwMDA0MDAwMAotI2RlZmluZSBCSVQxOQkweDAwMDgwMDAwCi0jZGVmaW5lIEJJVDIwCTB4MDAxMDAwMDAKLSNkZWZpbmUgQklUMjEJMHgwMDIwMDAwMAotI2RlZmluZSBCSVQyMgkweDAwNDAwMDAwCi0jZGVmaW5lIEJJVDIzCTB4MDA4MDAwMDAKLSNkZWZpbmUgQklUMjQJMHgwMTAwMDAwMAotI2RlZmluZSBCSVQyNQkweDAyMDAwMDAwCi0jZGVmaW5lIEJJVDI2CTB4MDQwMDAwMDAKLSNkZWZpbmUgQklUMjcJMHgwODAwMDAwMAotI2RlZmluZSBCSVQyOAkweDEwMDAwMDAwCi0jZGVmaW5lIEJJVDI5CTB4MjAwMDAwMDAKLSNkZWZpbmUgQklUMzAJMHg0MDAwMDAwMAotI2RlZmluZSBCSVQzMQkweDgwMDAwMDAwCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBDb21waWxlciBQb3J0YWJpbGl0eSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgX19XTEFOX0FUVFJJQl9QQUNLX18JCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gT1MgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpZm5kZWYgV0xBTl9EQlZBUgotI2RlZmluZSBXTEFOX0RCVkFSCXdsYW5fZGVidWcKLSNlbmRpZgotCi0jZGVmaW5lIFdMQU5fUkVMRUFTRQkiMC4zLjAtbGttbCIKLQotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLQotI2RlZmluZSBXTEFOX0xPR19FUlJPUih4LGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgeCAsIF9fZnVuY19fICwgIyNhcmdzKTsKLQotI2RlZmluZSBXTEFOX0xPR19XQVJOSU5HKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgeCAsIF9fZnVuY19fICwgIyNhcmdzKTsKLQotI2RlZmluZSBXTEFOX0xPR19OT1RJQ0UoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiIHggLCBfX2Z1bmNfXyAsICMjYXJncyk7Ci0KLSNkZWZpbmUgV0xBTl9MT0dfSU5GTyhhcmdzLi4uICkgcHJpbnRrKEtFUk5fSU5GTyBhcmdzKQotCi0jaWYgZGVmaW5lZChXTEFOX0lOQ0xVREVfREVCVUcpCi0JI2RlZmluZSBXTEFOX0hFWF9EVU1QKCBsLCB4LCBwLCBuKQlpZiggV0xBTl9EQlZBUiA+PSAobCkgKXsgXAotCQlpbnQgX19pX187IFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgeCAiOiIpOyBcCi0JCWZvciggX19pX189MDsgX19pX18gPCAobik7IF9faV9fKyspIFwKLQkJCXByaW50ayggIiAlMDJ4IiwgKCh1OCopKHApKVtfX2lfX10pOyBcCi0JCXByaW50aygiXG4iKTsgfQotCSNkZWZpbmUgREJGRU5URVIgeyBpZiAoIFdMQU5fREJWQVIgPj0gNSApeyBXTEFOX0xPR19ERUJVRygzLCItLS0tPlxuIik7IH0gfQotCSNkZWZpbmUgREJGRVhJVCAgeyBpZiAoIFdMQU5fREJWQVIgPj0gNSApeyBXTEFOX0xPR19ERUJVRygzLCI8LS0tLVxuIik7IH0gfQotCi0JI2RlZmluZSBXTEFOX0xPR19ERUJVRyhsLHgsYXJncy4uLikgaWYgKCBXTEFOX0RCVkFSID49IChsKSkgcHJpbnRrKEtFUk5fREVCVUcgIiVzKCVsdSk6ICIgeCAsICBfX2Z1bmNfXywgKHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfTUFTSyksICMjYXJncyApOwotI2Vsc2UKLQkjZGVmaW5lIFdMQU5fSEVYX0RVTVAoIGwsIHMsIHAsIG4pCi0JI2RlZmluZSBEQkZFTlRFUgotCSNkZWZpbmUgREJGRVhJVAotCi0JI2RlZmluZSBXTEFOX0xPR19ERUJVRyhsLCBzLCBhcmdzLi4uKQotI2VuZGlmCi0KLSN1bmRlZiBuZXRkZXZpY2VfdAotdHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZSBuZXRkZXZpY2VfdDsKLQotI2RlZmluZSBVUkJfQVNZTkNfVU5MSU5LIDAKLSNkZWZpbmUgVVNCX1FVRVVFX0JVTEsgMAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gSGFyZHdhcmUgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNkZWZpbmUgaWVlZTJob3N0MTYobikJX19sZTE2X3RvX2NwdShuKQotI2RlZmluZSBpZWVlMmhvc3QzMihuKQlfX2xlMzJfdG9fY3B1KG4pCi0jZGVmaW5lIGhvc3QyaWVlZTE2KG4pCV9fY3B1X3RvX2xlMTYobikKLSNkZWZpbmUgaG9zdDJpZWVlMzIobikJX19jcHVfdG9fbGUzMihuKQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0gR2VuZXJhbCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNkZWZpbmUgd2xhbl9tYXgoYSwgYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQotI2RlZmluZSB3bGFuX21pbihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCi0KLSNkZWZpbmUgd2xhbl9pc3ByaW50KGMpCSgoKGMpID4gKDB4MTkpKSAmJiAoKGMpIDwgKDB4N2YpKSkKLQotI2RlZmluZSB3bGFuX2hleGNoYXIoeCkgKCgoeCkgPCAweDBhKSA/ICgnMCcgKyAoeCkpIDogKCdhJyArICgoeCkgLSAweDBhKSkpCi0KLS8qIENyZWF0ZSBhIHN0cmluZyBvZiBwcmludGFibGUgY2hhcnMgZnJvbSBzb21ldGhpbmcgdGhhdCBtaWdodCBub3QgYmUgKi8KLS8qIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3RyIGJlIDQqbGVuICsgMSBieXRlcyBsb25nICovCi0jZGVmaW5lIHdsYW5fbWtwcmludHN0cihidWYsIGJ1Zmxlbiwgc3RyLCBzdHJsZW4pIFwKLXsgXAotCWludCBpID0gMDsgXAotCWludCBqID0gMDsgXAotCW1lbXNldChzdHIsIDAsIChzdHJsZW4pKTsgXAotCWZvciAoaSA9IDA7IGkgPCAoYnVmbGVuKTsgaSsrKSB7IFwKLQkJaWYgKCB3bGFuX2lzcHJpbnQoKGJ1ZilbaV0pICkgeyBcCi0JCQkoc3RyKVtqXSA9IChidWYpW2ldOyBcCi0JCQlqKys7IFwKLQkJfSBlbHNlIHsgXAotCQkJKHN0cilbal0gPSAnXFwnOyBcCi0JCQkoc3RyKVtqKzFdID0gJ3gnOyBcCi0JCQkoc3RyKVtqKzJdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4ZjApID4+IDQpOyBcCi0JCQkoc3RyKVtqKzNdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4MGYpKTsgXAotCQkJaiArPSA0OyBcCi0JCX0gXAotCX0gXAotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0gVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpZmRlZiBXTEFOX0lOQ0xVREVfREVCVUcKLWV4dGVybiBpbnQgd2xhbl9kZWJ1ZzsKLSNlbmRpZgotCi1leHRlcm4gaW50IHdsYW5fZXRoY29udjsJCS8qIFdoYXQncyB0aGUgZGVmYXVsdCBldGhjb252PyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZW5kaWYgLyogX1dMQU5fQ09NUEFUX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKaW5kZXggYjY0ODNkZC4uOWNmOWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCkBAIC02MjYsNyArNjI2LDcgQEAKIAkJZ290byBlcnJfZndfY29ycnVwdGVkOwogCiAJLyoKLQkgKiBTdGFydCB0byB1cGxvYWQgZm9ybXdhcmUgOiBzZW5kIHJlc2V0CisJICogU3RhcnQgdG8gdXBsb2FkIGZpcm13YXJlIDogc2VuZCByZXNldAogCSAqLwogCXZhbHVlID0gMTsKIAlyZXQgPSB1ZWFfc2VuZF9tb2RlbV9jbWQodXNiLCBGODA1MV9VU0JDUywgc2l6ZW9mKHZhbHVlKSwgJnZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggNzcwYjNlYS4uMDgwYmIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTM5Miw3ICszOTIsNyBAQAogCSAgIGNvbnRyb2xsZXJzIGhhdmluZyBRRSBvciBDUE0yLCBnaXZlbiBtaW5vciB0d2Vha3MuCiAKIAkgICBTZXQgQ09ORklHX1VTQl9HQURHRVQgdG8gIm0iIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFzIGEKLQkgICBkeW5taWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJmc2xfcWVfdWRjIi4KKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiZnNsX3FlX3VkYyIuCiAKIGNvbmZpZyBVU0JfRlNMX1FFCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKaW5kZXggYzIyZmFiMS4uNTYzZDU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKQEAgLTMxOSw3ICszMTksNyBAQAogCiBzdGF0aWMgaW50IHZidXNfaXNfcHJlc2VudChzdHJ1Y3QgdXNiYV91ZGMgKnVkYykKIHsKLQlpZiAodWRjLT52YnVzX3BpbiAhPSAtMSkKKwlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkKIAkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHVkYy0+dmJ1c19waW4pOwogCiAJLyogTm8gVmJ1cyBkZXRlY3Rpb246IEFzc3VtZSBhbHdheXMgcHJlc2VudCAqLwpAQCAtMTgyMSw3ICsxODIxLDcgQEAKIAlEQkcoREJHX0dBREdFVCwgInJlZ2lzdGVyZWQgZHJpdmVyIGAlcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiAJdWRjLT52YnVzX3ByZXYgPSAwOwotCWlmICh1ZGMtPnZidXNfcGluICE9IC0xKQorCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+dmJ1c19waW4pKQogCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHVkYy0+dmJ1c19waW4pKTsKIAogCS8qIElmIFZidXMgaXMgcHJlc2VudCwgZW5hYmxlIHRoZSBjb250cm9sbGVyIGFuZCB3YWl0IGZvciByZXNldCAqLwpAQCAtMTg1Miw3ICsxODUyLDcgQEAKIAlpZiAoZHJpdmVyICE9IHVkYy0+ZHJpdmVyIHx8ICFkcml2ZXItPnVuYmluZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodWRjLT52YnVzX3BpbiAhPSAtMSkKKwlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkKIAkJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEodWRjLT52YnVzX3BpbikpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTkxMCw3ICsxOTEwLDcgQEAKIAl1ZGMtPnBkZXYgPSBwZGV2OwogCXVkYy0+cGNsayA9IHBjbGs7CiAJdWRjLT5oY2xrID0gaGNsazsKLQl1ZGMtPnZidXNfcGluID0gLTE7CisJdWRjLT52YnVzX3BpbiA9IC1FTk9ERVY7CiAKIAlyZXQgPSAtRU5PTUVNOwogCXVkYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CkBAIC0xOTk2LDcgKzE5OTYsNyBAQAogCQlnb3RvIGVycl9kZXZpY2VfYWRkOwogCX0KIAotCWlmIChwZGF0YS0+dmJ1c19waW4gPj0gMCkgeworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT52YnVzX3BpbikpIHsKIAkJaWYgKCFncGlvX3JlcXVlc3QocGRhdGEtPnZidXNfcGluLCAiYXRtZWxfdXNiYV91ZGMiKSkgewogCQkJdWRjLT52YnVzX3BpbiA9IHBkYXRhLT52YnVzX3BpbjsKIApAQCAtMjAwNSw3ICsyMDA1LDcgQEAKIAkJCQkJImF0bWVsX3VzYmFfdWRjIiwgdWRjKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlncGlvX2ZyZWUodWRjLT52YnVzX3Bpbik7Ci0JCQkJdWRjLT52YnVzX3BpbiA9IC0xOworCQkJCXVkYy0+dmJ1c19waW4gPSAtRU5PREVWOwogCQkJCWRldl93YXJuKCZ1ZGMtPnBkZXYtPmRldiwKIAkJCQkJICJmYWlsZWQgdG8gcmVxdWVzdCB2YnVzIGlycTsgIgogCQkJCQkgImFzc3VtaW5nIGFsd2F5cyBvblxuIik7CkBAIC0yMDUxLDcgKzIwNTEsNyBAQAogCQl1c2JhX2VwX2NsZWFudXBfZGVidWdmcygmdXNiYV9lcFtpXSk7CiAJdXNiYV9jbGVhbnVwX2RlYnVnZnModWRjKTsKIAotCWlmICh1ZGMtPnZidXNfcGluICE9IC0xKQorCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+dmJ1c19waW4pKQogCQlncGlvX2ZyZWUodWRjLT52YnVzX3Bpbik7CiAKIAlmcmVlX2lycSh1ZGMtPmlycSwgdWRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9DaGFuZ2VMb2cuaGlzdG9yeSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9DaGFuZ2VMb2cuaGlzdG9yeQppbmRleCBjMWIyNzk5Li5mMTNmZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvQ2hhbmdlTG9nLmhpc3RvcnkKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0NoYW5nZUxvZy5oaXN0b3J5CkBAIC03MTUsNyArNzE1LDcgQEAKIAogIDAuMiAoMDEvMzAvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCiAJTWlsZXN0b25lIDEgcmVsZWFzZS4KLQlEZXZpY2UgaXMgZm91bmQgYnkgVVNCIHN1YnN5c3RlbSwgZW51bWVyYXRlZCwgZmltd2FyZSBpcyBkb3dubG9hZGVkCisJRGV2aWNlIGlzIGZvdW5kIGJ5IFVTQiBzdWJzeXN0ZW0sIGVudW1lcmF0ZWQsIGZpcm13YXJlIGlzIGRvd25sb2FkZWQKIAlhbmQgdGhlIGRlc2NyaXB0b3JzIGFyZSBwcmludGVkIHRvIHRoZSBkZWJ1ZyBsb2csIGNvbmZpZyBpcyBzZXQsIGFuZAogCWdyZWVuIGxpZ2h0IHN0YXJ0cyB0byBibGluay4gT3BlbiBwb3J0IHdvcmtzLCBhbmQgZGF0YSBjYW4gYmUgc2VudAogCWFuZCByZWNlaXZlZCBhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZiB0aGUgVUFSVC4gTG9vcGJhY2sgY29ubmVjdG9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IGE2NWY5MTkuLmM0ODBlYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC01MTgsOCArNTE4LDggQEAKIAloZWxwCiAJICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBTaWVycmEgV2lyZWxlc3MgZGV2aWNlcy4KIAotCSAgTWFueSBkZXZpZWNzIGhhdmUgYSBmZWF0dXJlIGtub3duIGFzIFRSVS1JbnN0YWxsLCBmb3IgdGhvc2UgZGV2aWNlcwotCSAgdG8gd29yayBwcm9wZXJseSB0aGUgVVNCIFN0b3JhZ2UgU2llcnJhIGZlYXR1cmUgbXVzdCBiZSBlbmFibGVkLgorCSAgTWFueSBkZXZpY2VzIGhhdmUgYSBmZWF0dXJlIGtub3duIGFzIFRSVS1JbnN0YWxsLiBGb3IgdGhvc2UgZGV2aWNlcworCSAgdG8gd29yayBwcm9wZXJseSwgdGhlIFVTQiBTdG9yYWdlIFNpZXJyYSBmZWF0dXJlIG11c3QgYmUgZW5hYmxlZC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2llcnJhLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKaW5kZXggODgyYzU3Yi4uZmRiYTJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCkBAIC0zMjgsNyArMzI5LDcgQEAKIAogc3RydWN0IGlzZDIwMF9pbmZvIHsKIAlzdHJ1Y3QgaW5xdWlyeV9kYXRhIElucXVpcnlEYXRhOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZDsKKwl1MTYgKmlkOwogCXN0cnVjdCBpc2QyMDBfY29uZmlnIENvbmZpZ0RhdGE7CiAJdW5zaWduZWQgY2hhciAqUmVnc0J1ZjsKIAl1bnNpZ25lZCBjaGFyIEFUQVJlZ3NbOF07CkBAIC00MTksMTkgKzQyMCwxOSBAQAogCQlidWYtPkZsYWdzID0gVU5JVF9BVFRFTlRJT047CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZSA9IDA7CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZVF1YWxpZmllciA9IDA7Ci0JfSBlbHNlIGlmKGVycm9yICYgTUNSX0VSUikgeworCX0gZWxzZSBpZiAoZXJyb3IgJiBBVEFfTUNSKSB7CiAJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOwogCQlidWYtPkZsYWdzID0gIFVOSVRfQVRURU5USU9OOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGUgPSAwOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXIgPSAwOwotCX0gZWxzZSBpZihlcnJvciAmIFRSSzBfRVJSKSB7CisJfSBlbHNlIGlmIChlcnJvciAmIEFUQV9UUkswTkYpIHsKIAkJYnVmLT5FcnJvckNvZGUgPSAweDcwIHwgU0VOU0VfRVJSQ09ERV9WQUxJRDsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VMZW5ndGggPSAweGI7CiAJCWJ1Zi0+RmxhZ3MgPSAgTk9UX1JFQURZOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGUgPSAwOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXIgPSAwOwotCX0gZWxzZSBpZihlcnJvciAmIEVDQ19FUlIpIHsKKwl9IGVsc2UgaWYgKGVycm9yICYgQVRBX1VOQykgewogCQlidWYtPkVycm9yQ29kZSA9IDB4NzAgfCBTRU5TRV9FUlJDT0RFX1ZBTElEOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUxlbmd0aCA9IDB4YjsKIAkJYnVmLT5GbGFncyA9ICBEQVRBX1BST1RFQ1Q7CkBAIC01NDcsMTYgKzU0OCwxNiBAQAogCQlhdGEuZ2VuZXJpYy5BY3Rpb25TZWxlY3QgPSBBQ1RJT05fU0VMRUNUXzF8QUNUSU9OX1NFTEVDVF81OwogCQlhdGEuZ2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19ERVZJQ0VfSEVBRCB8IFJFR19DT01NQU5EOwogCQlhdGEud3JpdGUuRGV2aWNlSGVhZEJ5dGUgPSBpbmZvLT5EZXZpY2VIZWFkOwotCQlhdGEud3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fU1JTVDsKKwkJYXRhLndyaXRlLkNvbW1hbmRCeXRlID0gQVRBX0NNRF9ERVZfUkVTRVQ7CiAJCWlzZDIwMF9zZXRfc3JiKGluZm8sIERNQV9OT05FLCBOVUxMLCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFDVElPTl9JREVOVElGWToKIAkJVVNfREVCVUdQKCIgICBpc2QyMDBfYWN0aW9uKElERU5USUZZKVxuIik7CiAJCWF0YS5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0NPTU1BTkQ7Ci0JCWF0YS53cml0ZS5Db21tYW5kQnl0ZSA9IFdJTl9JREVOVElGWTsKKwkJYXRhLndyaXRlLkNvbW1hbmRCeXRlID0gQVRBX0NNRF9JRF9BVEE7CiAJCWlzZDIwMF9zZXRfc3JiKGluZm8sIERNQV9GUk9NX0RFVklDRSwgaW5mby0+aWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSk7CisJCQkJQVRBX0lEX1dPUkRTICogMik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTk0NCwyMiArOTQ1LDIyIEBACiAJCQlicmVhazsKIAogCQlpZiAoIWRldGVjdCkgewotCQkJaWYgKHJlZ3NbQVRBX1JFR19TVEFUVVNfT0ZGU0VUXSAmIEJVU1lfU1RBVCkgeworCQkJaWYgKHJlZ3NbQVRBX1JFR19TVEFUVVNfT0ZGU0VUXSAmIEFUQV9CVVNZKSB7CiAJCQkJVVNfREVCVUdQKCIgICAlcyBzdGF0dXMgaXMgc3RpbGwgQlNZLCB0cnkgYWdhaW4uLi5cbiIsbXN0cik7CiAJCQl9IGVsc2UgewogCQkJCVVTX0RFQlVHUCgiICAgJXMgc3RhdHVzICFCU1ksIGNvbnRpbnVlIHdpdGggbmV4dCBvcGVyYXRpb25cbiIsbXN0cik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJLyogY2hlY2sgZm9yIEJVU1lfU1RBVCBhbmQgKi8KLQkJLyogV1JFUlJfU1RBVCAod29ya2Fyb3VuZCBBVEEgWmlwIGRyaXZlKSBhbmQgKi8gCi0JCS8qIEVSUl9TVEFUICh3b3JrYXJvdW5kIGZvciBBcmNob3MgQ0QtUk9NKSAqLworCQkvKiBjaGVjayBmb3IgQVRBX0JVU1kgYW5kICovCisJCS8qIEFUQV9ERiAod29ya2Fyb3VuZCBBVEEgWmlwIGRyaXZlKSBhbmQgKi8KKwkJLyogQVRBX0VSUiAod29ya2Fyb3VuZCBmb3IgQXJjaG9zIENELVJPTSkgKi8KIAkJZWxzZSBpZiAocmVnc1tBVEFfUkVHX1NUQVRVU19PRkZTRVRdICYKLQkJCSAoQlVTWV9TVEFUIHwgV1JFUlJfU1RBVCB8IEVSUl9TVEFUICkpIHsKKwkJCSAoQVRBX0JVU1kgfCBBVEFfREYgfCBBVEFfRVJSKSkgewogCQkJVVNfREVCVUdQKCIgICBTdGF0dXMgaW5kaWNhdGVzIGl0IGlzIG5vdCByZWFkeSwgdHJ5IGFnYWluLi4uXG4iKTsKIAkJfQogCQkvKiBjaGVjayBmb3IgRFJEWSwgQVRBIGRldmljZXMgc2V0IERSRFkgYWZ0ZXIgU1JTVCAqLwotCQllbHNlIGlmIChyZWdzW0FUQV9SRUdfU1RBVFVTX09GRlNFVF0gJiBSRUFEWV9TVEFUKSB7CisJCWVsc2UgaWYgKHJlZ3NbQVRBX1JFR19TVEFUVVNfT0ZGU0VUXSAmIEFUQV9EUkRZKSB7CiAJCQlVU19ERUJVR1AoIiAgIElkZW50aWZpZWQgQVRBIGRldmljZVxuIik7CiAJCQlpbmZvLT5EZXZpY2VGbGFncyB8PSBERl9BVEFfREVWSUNFOwogCQkJaW5mby0+RGV2aWNlSGVhZCA9IG1hc3Rlcl9zbGF2ZTsKQEAgLTEwNTMsMTAzICsxMDU0LDUwIEBACiAJcmV0dXJuKHJldFN0YXR1cyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzZDIwMF9maXhfZHJpdmVpZCAoc3RydWN0IGhkX2RyaXZlaWQgKmlkKQorc3RhdGljIHZvaWQgaXNkMjAwX2ZpeF9kcml2ZWlkKHUxNiAqaWQpCiB7CiAjaWZuZGVmIF9fTElUVExFX0VORElBTgogIyBpZmRlZiBfX0JJR19FTkRJQU4KIAlpbnQgaTsKLQl1MTYgKnN0cmluZ2Nhc3Q7CiAKLQlpZC0+Y29uZmlnICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jb25maWcpOwotCWlkLT5jeWxzICAgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmN5bHMpOwotCWlkLT5yZXNlcnZlZDIgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnJlc2VydmVkMik7Ci0JaWQtPmhlYWRzICAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+aGVhZHMpOwotCWlkLT50cmFja19ieXRlcyAgICA9IF9fbGUxNl90b19jcHUoaWQtPnRyYWNrX2J5dGVzKTsKLQlpZC0+c2VjdG9yX2J5dGVzICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5zZWN0b3JfYnl0ZXMpOwotCWlkLT5zZWN0b3JzICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnNlY3RvcnMpOwotCWlkLT52ZW5kb3IwICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnZlbmRvcjApOwotCWlkLT52ZW5kb3IxICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnZlbmRvcjEpOwotCWlkLT52ZW5kb3IyICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnZlbmRvcjIpOwotCXN0cmluZ2Nhc3QgPSAodTE2ICopJmlkLT5zZXJpYWxfbm9bMF07Ci0JZm9yIChpID0gMDsgaSA8ICgyMC8yKTsgaSsrKQotCQlzdHJpbmdjYXN0W2ldID0gX19sZTE2X3RvX2NwdShzdHJpbmdjYXN0W2ldKTsKLQlpZC0+YnVmX3R5cGUgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5idWZfdHlwZSk7Ci0JaWQtPmJ1Zl9zaXplICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+YnVmX3NpemUpOwotCWlkLT5lY2NfYnl0ZXMgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmVjY19ieXRlcyk7Ci0Jc3RyaW5nY2FzdCA9ICh1MTYgKikmaWQtPmZ3X3JldlswXTsKLQlmb3IgKGkgPSAwOyBpIDwgKDgvMik7IGkrKykKLQkJc3RyaW5nY2FzdFtpXSA9IF9fbGUxNl90b19jcHUoc3RyaW5nY2FzdFtpXSk7Ci0Jc3RyaW5nY2FzdCA9ICh1MTYgKikmaWQtPm1vZGVsWzBdOwotCWZvciAoaSA9IDA7IGkgPCAoNDAvMik7IGkrKykKLQkJc3RyaW5nY2FzdFtpXSA9IF9fbGUxNl90b19jcHUoc3RyaW5nY2FzdFtpXSk7Ci0JaWQtPmR3b3JkX2lvICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+ZHdvcmRfaW8pOwotCWlkLT5yZXNlcnZlZDUwICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnJlc2VydmVkNTApOwotCWlkLT5maWVsZF92YWxpZCAgICA9IF9fbGUxNl90b19jcHUoaWQtPmZpZWxkX3ZhbGlkKTsKLQlpZC0+Y3VyX2N5bHMgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jdXJfY3lscyk7Ci0JaWQtPmN1cl9oZWFkcyAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y3VyX2hlYWRzKTsKLQlpZC0+Y3VyX3NlY3RvcnMgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jdXJfc2VjdG9ycyk7Ci0JaWQtPmN1cl9jYXBhY2l0eTAgID0gX19sZTE2X3RvX2NwdShpZC0+Y3VyX2NhcGFjaXR5MCk7Ci0JaWQtPmN1cl9jYXBhY2l0eTEgID0gX19sZTE2X3RvX2NwdShpZC0+Y3VyX2NhcGFjaXR5MSk7Ci0JaWQtPmxiYV9jYXBhY2l0eSAgID0gX19sZTMyX3RvX2NwdShpZC0+bGJhX2NhcGFjaXR5KTsKLQlpZC0+ZG1hXzF3b3JkICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5kbWFfMXdvcmQpOwotCWlkLT5kbWFfbXdvcmQgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmRtYV9td29yZCk7Ci0JaWQtPmVpZGVfcGlvX21vZGVzID0gX19sZTE2X3RvX2NwdShpZC0+ZWlkZV9waW9fbW9kZXMpOwotCWlkLT5laWRlX2RtYV9taW4gICA9IF9fbGUxNl90b19jcHUoaWQtPmVpZGVfZG1hX21pbik7Ci0JaWQtPmVpZGVfZG1hX3RpbWUgID0gX19sZTE2X3RvX2NwdShpZC0+ZWlkZV9kbWFfdGltZSk7Ci0JaWQtPmVpZGVfcGlvICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+ZWlkZV9waW8pOwotCWlkLT5laWRlX3Bpb19pb3JkeSA9IF9fbGUxNl90b19jcHUoaWQtPmVpZGVfcGlvX2lvcmR5KTsKLQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQotCQlpZC0+d29yZHM2OV83MFtpXSA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzNjlfNzBbaV0pOwotCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCi0JCWlkLT53b3JkczcxXzc0W2ldID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHM3MV83NFtpXSk7Ci0JaWQtPnF1ZXVlX2RlcHRoICAgID0gX19sZTE2X3RvX2NwdShpZC0+cXVldWVfZGVwdGgpOwotCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCi0JCWlkLT53b3Jkczc2Xzc5W2ldID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHM3Nl83OVtpXSk7Ci0JaWQtPm1ham9yX3Jldl9udW0gID0gX19sZTE2X3RvX2NwdShpZC0+bWFqb3JfcmV2X251bSk7Ci0JaWQtPm1pbm9yX3Jldl9udW0gID0gX19sZTE2X3RvX2NwdShpZC0+bWlub3JfcmV2X251bSk7Ci0JaWQtPmNvbW1hbmRfc2V0XzEgID0gX19sZTE2X3RvX2NwdShpZC0+Y29tbWFuZF9zZXRfMSk7Ci0JaWQtPmNvbW1hbmRfc2V0XzIgID0gX19sZTE2X3RvX2NwdShpZC0+Y29tbWFuZF9zZXRfMik7Ci0JaWQtPmNmc3NlICAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y2Zzc2UpOwotCWlkLT5jZnNfZW5hYmxlXzEgICA9IF9fbGUxNl90b19jcHUoaWQtPmNmc19lbmFibGVfMSk7Ci0JaWQtPmNmc19lbmFibGVfMiAgID0gX19sZTE2X3RvX2NwdShpZC0+Y2ZzX2VuYWJsZV8yKTsKLQlpZC0+Y3NmX2RlZmF1bHQgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jc2ZfZGVmYXVsdCk7Ci0JaWQtPmRtYV91bHRyYSAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+ZG1hX3VsdHJhKTsKLQlpZC0+dHJzZXVjICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT50cnNldWMpOwotCWlkLT50cnNFdWMgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnRyc0V1Yyk7Ci0JaWQtPkN1ckFQTXZhbHVlcyAgID0gX19sZTE2X3RvX2NwdShpZC0+Q3VyQVBNdmFsdWVzKTsKLQlpZC0+bXByYyAgICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5tcHJjKTsKLQlpZC0+aHdfY29uZmlnICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5od19jb25maWcpOwotCWlkLT5hY291c3RpYyAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmFjb3VzdGljKTsKLQlpZC0+bXNycXMgICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5tc3Jxcyk7Ci0JaWQtPnN4ZmVydCAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+c3hmZXJ0KTsKLQlpZC0+c2FsICAgICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5zYWwpOwotCWlkLT5zcGcgICAgICAgICAgICA9IF9fbGUzMl90b19jcHUoaWQtPnNwZyk7Ci0JaWQtPmxiYV9jYXBhY2l0eV8yID0gX19sZTY0X3RvX2NwdShpZC0+bGJhX2NhcGFjaXR5XzIpOwotCWZvciAoaSA9IDA7IGkgPCAyMjsgaSsrKQotCQlpZC0+d29yZHMxMDRfMTI1W2ldICAgPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkczEwNF8xMjVbaV0pOwotCWlkLT5sYXN0X2x1biAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmxhc3RfbHVuKTsKLQlpZC0+d29yZDEyNyAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkMTI3KTsKLQlpZC0+ZGxmICAgICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5kbGYpOwotCWlkLT5jc2ZvICAgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmNzZm8pOwotCWZvciAoaSA9IDA7IGkgPCAyNjsgaSsrKQotCQlpZC0+d29yZHMxMzBfMTU1W2ldID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHMxMzBfMTU1W2ldKTsKLQlpZC0+d29yZDE1NiAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkMTU2KTsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlpZC0+d29yZHMxNTdfMTU5W2ldID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHMxNTdfMTU5W2ldKTsKLQlpZC0+Y2ZhX3Bvd2VyICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jZmFfcG93ZXIpOwotCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKQotCQlpZC0+d29yZHMxNjFfMTc1W2ldID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHMxNjFfMTc1W2ldKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzE7IGkrKykKLQkJaWQtPndvcmRzMTc2XzIwNVtpXSA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzMTc2XzIwNVtpXSk7Ci0JZm9yIChpID0gMDsgaSA8IDQ4OyBpKyspCi0JCWlkLT53b3JkczIwNl8yNTRbaV0gPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkczIwNl8yNTRbaV0pOwotCWlkLT5pbnRlZ3JpdHlfd29yZCAgPSBfX2xlMTZfdG9fY3B1KGlkLT5pbnRlZ3JpdHlfd29yZCk7CisJZm9yIChpID0gMDsgaSA8IEFUQV9JRF9XT1JEUzsgaSsrKQorCQlpZFtpXSA9IF9fbGUxNl90b19jcHUoaWRbaV0pOwogIyBlbHNlCiAjICBlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKICMgZW5kaWYKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBpc2QyMDBfZHVtcF9kcml2ZWlkKHUxNiAqaWQpCit7CisJVVNfREVCVUdQKCIgICBJZGVudGlmeSBEYXRhIFN0cnVjdHVyZTpcbiIpOworCVVTX0RFQlVHUCgiICAgICAgY29uZmlnID0gMHgleFxuIiwJICBpZFtBVEFfSURfQ09ORklHXSk7CisJVVNfREVCVUdQKCIgICAgICBjeWxzID0gMHgleFxuIiwJICBpZFtBVEFfSURfQ1lMU10pOworCVVTX0RFQlVHUCgiICAgICAgaGVhZHMgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9IRUFEU10pOworCVVTX0RFQlVHUCgiICAgICAgdHJhY2tfYnl0ZXMgPSAweCV4XG4iLAkgIGlkWzRdKTsKKwlVU19ERUJVR1AoIiAgICAgIHNlY3Rvcl9ieXRlcyA9IDB4JXhcbiIsICBpZFs1XSk7CisJVVNfREVCVUdQKCIgICAgICBzZWN0b3JzID0gMHgleFxuIiwJICBpZFtBVEFfSURfU0VDVE9SU10pOworCVVTX0RFQlVHUCgiICAgICAgc2VyaWFsX25vWzBdID0gMHgleFxuIiwgICooY2hhciAqKSZpZFtBVEFfSURfU0VSTk9dKTsKKwlVU19ERUJVR1AoIiAgICAgIGJ1Zl90eXBlID0gMHgleFxuIiwJICBpZFsyMF0pOworCVVTX0RFQlVHUCgiICAgICAgYnVmX3NpemUgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9CVUZfU0laRV0pOworCVVTX0RFQlVHUCgiICAgICAgZWNjX2J5dGVzID0gMHgleFxuIiwJICBpZFsyMl0pOworCVVTX0RFQlVHUCgiICAgICAgZndfcmV2WzBdID0gMHgleFxuIiwJICAqKGNoYXIgKikmaWRbQVRBX0lEX0ZXX1JFVl0pOworCVVTX0RFQlVHUCgiICAgICAgbW9kZWxbMF0gPSAweCV4XG4iLAkgICooY2hhciAqKSZpZFtBVEFfSURfUFJPRF0pOworCVVTX0RFQlVHUCgiICAgICAgbWF4X211bHRzZWN0ID0gMHgleFxuIiwgIGlkW0FUQV9JRF9NQVhfTVVMVFNFQ1RdICYgMHhmZik7CisJVVNfREVCVUdQKCIgICAgICBkd29yZF9pbyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0RXT1JEX0lPXSk7CisJVVNfREVCVUdQKCIgICAgICBjYXBhYmlsaXR5ID0gMHgleFxuIiwJICBpZFtBVEFfSURfQ0FQQUJJTElUWV0gPj4gOCk7CisJVVNfREVCVUdQKCIgICAgICB0UElPID0gMHgleFxuIiwJICBpZFtBVEFfSURfT0xEX1BJT19NT0RFU10gPj4gOCk7CisJVVNfREVCVUdQKCIgICAgICB0RE1BID0gMHgleFxuIiwJICBpZFtBVEFfSURfT0xEX0RNQV9NT0RFU10gPj4gOCk7CisJVVNfREVCVUdQKCIgICAgICBmaWVsZF92YWxpZCA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSk7CisJVVNfREVCVUdQKCIgICAgICBjdXJfY3lscyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0NVUl9DWUxTXSk7CisJVVNfREVCVUdQKCIgICAgICBjdXJfaGVhZHMgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9DVVJfSEVBRFNdKTsKKwlVU19ERUJVR1AoIiAgICAgIGN1cl9zZWN0b3JzID0gMHgleFxuIiwJICBpZFtBVEFfSURfQ1VSX1NFQ1RPUlNdKTsKKwlVU19ERUJVR1AoIiAgICAgIGN1cl9jYXBhY2l0eSA9IDB4JXhcbiIsICBhdGFfaWRfdTMyKGlkLCA1NykpOworCVVTX0RFQlVHUCgiICAgICAgbXVsdHNlY3QgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9NVUxUU0VDVF0gJiAweGZmKTsKKwlVU19ERUJVR1AoIiAgICAgIGxiYV9jYXBhY2l0eSA9IDB4JXhcbiIsICBhdGFfaWRfdTMyKGlkLCBBVEFfSURfTEJBX0NBUEFDSVRZKSk7CisJVVNfREVCVUdQKCIgICAgICBjb21tYW5kX3NldF8xID0gMHgleFxuIiwgaWRbQVRBX0lEX0NPTU1BTkRfU0VUXzFdKTsKKwlVU19ERUJVR1AoIiAgICAgIGNvbW1hbmRfc2V0XzIgPSAweCV4XG4iLCBpZFtBVEFfSURfQ09NTUFORF9TRVRfMl0pOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhCkBAIC0xMTYzLDcgKzExMTEsNyBAQAogewogCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CiAJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGluZm8tPmlkOworCXUxNiAqaWQgPSBpbmZvLT5pZDsKIAogCVVTX0RFQlVHUCgiRW50ZXJpbmcgaXNkMjAwX2dldF9pbnF1aXJ5X2RhdGFcbiIpOwogCkBAIC0xMTgwLDggKzExMjgsNyBAQAogCQkJLyogdGhpcyBtdXN0IGJlIGFuIEFUQSBkZXZpY2UgKi8KIAkJCS8qIHBlcmZvcm0gYW4gQVRBIENvbW1hbmQgSWRlbnRpZnkgKi8KIAkJCXRyYW5zZmVyU3RhdHVzID0gaXNkMjAwX2FjdGlvbiggdXMsIEFDVElPTl9JREVOVElGWSwKLQkJCQkJCQlpZCwgCi0JCQkJCQkJc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSApOworCQkJCQkJCWlkLCBBVEFfSURfV09SRFMgKiAyKTsKIAkJCWlmICh0cmFuc2ZlclN0YXR1cyAhPSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QpIHsKIAkJCQkvKiBFcnJvciBpc3N1aW5nIEFUQSBDb21tYW5kIElkZW50aWZ5ICovCiAJCQkJVVNfREVCVUdQKCIgICBFcnJvciBpc3N1aW5nIEFUQSBDb21tYW5kIElkZW50aWZ5XG4iKTsKQEAgLTExOTEsMzUgKzExMzgsOSBAQAogCQkJCWludCBpOwogCQkJCV9fYmUxNiAqc3JjOwogCQkJCV9fdTE2ICpkZXN0OwotCQkJCWlzZDIwMF9maXhfZHJpdmVpZChpZCk7CiAKLQkJCQlVU19ERUJVR1AoIiAgIElkZW50aWZ5IERhdGEgU3RydWN0dXJlOlxuIik7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjb25maWcgPSAweCV4XG4iLCBpZC0+Y29uZmlnKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGN5bHMgPSAweCV4XG4iLCBpZC0+Y3lscyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBoZWFkcyA9IDB4JXhcbiIsIGlkLT5oZWFkcyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICB0cmFja19ieXRlcyA9IDB4JXhcbiIsIGlkLT50cmFja19ieXRlcyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBzZWN0b3JfYnl0ZXMgPSAweCV4XG4iLCBpZC0+c2VjdG9yX2J5dGVzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIHNlY3RvcnMgPSAweCV4XG4iLCBpZC0+c2VjdG9ycyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBzZXJpYWxfbm9bMF0gPSAweCV4XG4iLCBpZC0+c2VyaWFsX25vWzBdKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGJ1Zl90eXBlID0gMHgleFxuIiwgaWQtPmJ1Zl90eXBlKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGJ1Zl9zaXplID0gMHgleFxuIiwgaWQtPmJ1Zl9zaXplKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGVjY19ieXRlcyA9IDB4JXhcbiIsIGlkLT5lY2NfYnl0ZXMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgZndfcmV2WzBdID0gMHgleFxuIiwgaWQtPmZ3X3JldlswXSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBtb2RlbFswXSA9IDB4JXhcbiIsIGlkLT5tb2RlbFswXSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBtYXhfbXVsdHNlY3QgPSAweCV4XG4iLCBpZC0+bWF4X211bHRzZWN0KTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGR3b3JkX2lvID0gMHgleFxuIiwgaWQtPmR3b3JkX2lvKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGNhcGFiaWxpdHkgPSAweCV4XG4iLCBpZC0+Y2FwYWJpbGl0eSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICB0UElPID0gMHgleFxuIiwgaWQtPnRQSU8pOwotCQkJCVVTX0RFQlVHUCgiICAgICAgdERNQSA9IDB4JXhcbiIsIGlkLT50RE1BKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGZpZWxkX3ZhbGlkID0gMHgleFxuIiwgaWQtPmZpZWxkX3ZhbGlkKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9jeWxzID0gMHgleFxuIiwgaWQtPmN1cl9jeWxzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9oZWFkcyA9IDB4JXhcbiIsIGlkLT5jdXJfaGVhZHMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY3VyX3NlY3RvcnMgPSAweCV4XG4iLCBpZC0+Y3VyX3NlY3RvcnMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY3VyX2NhcGFjaXR5ID0gMHgleFxuIiwgKGlkLT5jdXJfY2FwYWNpdHkxIDw8IDE2KSArIGlkLT5jdXJfY2FwYWNpdHkwICk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBtdWx0c2VjdCA9IDB4JXhcbiIsIGlkLT5tdWx0c2VjdCk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBsYmFfY2FwYWNpdHkgPSAweCV4XG4iLCBpZC0+bGJhX2NhcGFjaXR5KTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGNvbW1hbmRfc2V0XzEgPSAweCV4XG4iLCBpZC0+Y29tbWFuZF9zZXRfMSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjb21tYW5kX3NldF8yID0gMHgleFxuIiwgaWQtPmNvbW1hbmRfc2V0XzIpOworCQkJCWlzZDIwMF9maXhfZHJpdmVpZChpZCk7CisJCQkJaXNkMjAwX2R1bXBfZHJpdmVpZChpZCk7CiAKIAkJCQltZW1zZXQoJmluZm8tPklucXVpcnlEYXRhLCAwLCBzaXplb2YoaW5mby0+SW5xdWlyeURhdGEpKTsKIApAQCAtMTIyOSwzMCArMTE1MCwzMCBAQAogCQkJCS8qIFRoZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAzNiAoNSArIDMxKSAqLwogCQkJCWluZm8tPklucXVpcnlEYXRhLkFkZGl0aW9uYWxMZW5ndGggPSAweDFGOwogCi0JCQkJaWYgKGlkLT5jb21tYW5kX3NldF8xICYgQ09NTUFORFNFVF9NRURJQV9TVEFUVVMpIHsKKwkJCQlpZiAoaWRbQVRBX0lEX0NPTU1BTkRfU0VUXzFdICYgQ09NTUFORFNFVF9NRURJQV9TVEFUVVMpIHsKIAkJCQkJLyogc2V0IHRoZSByZW1vdmFibGUgYml0ICovCiAJCQkJCWluZm8tPklucXVpcnlEYXRhLkRldmljZVR5cGVNb2RpZmllciA9IERFVklDRV9SRU1PVkFCTEU7CiAJCQkJCWluZm8tPkRldmljZUZsYWdzIHw9IERGX1JFTU9WQUJMRV9NRURJQTsKIAkJCQl9CiAKIAkJCQkvKiBGaWxsIGluIHZlbmRvciBpZGVudGlmaWNhdGlvbiBmaWVsZHMgKi8KLQkJCQlzcmMgPSAoX19iZTE2KilpZC0+bW9kZWw7CisJCQkJc3JjID0gKF9fYmUxNiAqKSZpZFtBVEFfSURfUFJPRF07CiAJCQkJZGVzdCA9IChfX3UxNiopaW5mby0+SW5xdWlyeURhdGEuVmVuZG9ySWQ7CiAJCQkJZm9yIChpPTA7aTw0O2krKykKIAkJCQkJZGVzdFtpXSA9IGJlMTZfdG9fY3B1KHNyY1tpXSk7CiAKLQkJCQlzcmMgPSAoX19iZTE2KikoaWQtPm1vZGVsKzgpOworCQkJCXNyYyA9IChfX2JlMTYgKikmaWRbQVRBX0lEX1BST0QgKyA4LzJdOwogCQkJCWRlc3QgPSAoX191MTYqKWluZm8tPklucXVpcnlEYXRhLlByb2R1Y3RJZDsKIAkJCQlmb3IgKGk9MDtpPDg7aSsrKQogCQkJCQlkZXN0W2ldID0gYmUxNl90b19jcHUoc3JjW2ldKTsKIAotCQkJCXNyYyA9IChfX2JlMTYqKWlkLT5md19yZXY7CisJCQkJc3JjID0gKF9fYmUxNiAqKSZpZFtBVEFfSURfRldfUkVWXTsKIAkJCQlkZXN0ID0gKF9fdTE2KilpbmZvLT5JbnF1aXJ5RGF0YS5Qcm9kdWN0UmV2aXNpb25MZXZlbDsKIAkJCQlmb3IgKGk9MDtpPDI7aSsrKQogCQkJCQlkZXN0W2ldID0gYmUxNl90b19jcHUoc3JjW2ldKTsKIAogCQkJCS8qIGRldGVybWluZSBpZiBpdCBzdXBwb3J0cyBNZWRpYSBTdGF0dXMgTm90aWZpY2F0aW9uICovCi0JCQkJaWYgKGlkLT5jb21tYW5kX3NldF8yICYgQ09NTUFORFNFVF9NRURJQV9TVEFUVVMpIHsKKwkJCQlpZiAoaWRbQVRBX0lEX0NPTU1BTkRfU0VUXzJdICYgQ09NTUFORFNFVF9NRURJQV9TVEFUVVMpIHsKIAkJCQkJVVNfREVCVUdQKCIgICBEZXZpY2Ugc3VwcG9ydHMgTWVkaWEgU3RhdHVzIE5vdGlmaWNhdGlvblxuIik7CiAKIAkJCQkJLyogSW5kaWNhdGUgdGhhdCBpdCBpcyBlbmFibGVkLCBldmVuIHRob3VnaCBpdCBpcyBub3QKQEAgLTEzMDEsNyArMTIyMiw3IEBACiAJCQkgICAgICB1bmlvbiBhdGFfY2RiICogYXRhQ2RiKQogewogCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7Ci0Jc3RydWN0IGhkX2RyaXZlaWQgKmlkID0gaW5mby0+aWQ7CisJdTE2ICppZCA9IGluZm8tPmlkOwogCWludCBzZW5kVG9UcmFuc3BvcnQgPSAxOwogCXVuc2lnbmVkIGNoYXIgc2VjdG51bSwgaGVhZDsKIAl1bnNpZ25lZCBzaG9ydCBjeWxpbmRlcjsKQEAgLTEzNjksMTMgKzEyOTAsMTIgQEAKIAogCQlVU19ERUJVR1AoIiAgIEFUQSBPVVQgLSBTQ1NJT1BfUkVBRF9DQVBBQ0lUWVxuIik7CiAKLQkJaWYgKGlkLT5jYXBhYmlsaXR5ICYgQ0FQQUJJTElUWV9MQkEgKSB7Ci0JCQljYXBhY2l0eSA9IGlkLT5sYmFfY2FwYWNpdHkgLSAxOwotCQl9IGVsc2UgewotCQkJY2FwYWNpdHkgPSAoaWQtPmhlYWRzICoKLQkJCQkgICAgaWQtPmN5bHMgKgotCQkJCSAgICBpZC0+c2VjdG9ycykgLSAxOwotCQl9CisJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpCisJCQljYXBhY2l0eSA9IGF0YV9pZF91MzIoaWQsIEFUQV9JRF9MQkFfQ0FQQUNJVFkpIC0gMTsKKwkJZWxzZQorCQkJY2FwYWNpdHkgPSAoaWRbQVRBX0lEX0hFQURTXSAqIGlkW0FUQV9JRF9DWUxTXSAqCisJCQkJICAgIGlkW0FUQV9JRF9TRUNUT1JTXSkgLSAxOworCiAJCXJlYWRDYXBhY2l0eURhdGEuTG9naWNhbEJsb2NrQWRkcmVzcyA9IGNwdV90b19iZTMyKGNhcGFjaXR5KTsKIAkJcmVhZENhcGFjaXR5RGF0YS5CeXRlc1BlckJsb2NrID0gY3B1X3RvX2JlMzIoMHgyMDApOwogCkBAIC0xMzkyLDE2ICsxMzEyLDE2IEBACiAJCWxiYSA9IGJlMzJfdG9fY3B1KCooX19iZTMyICopJnNyYi0+Y21uZFsyXSk7CiAJCWJsb2NrQ291bnQgPSAodW5zaWduZWQgbG9uZylzcmItPmNtbmRbN108PDggfCAodW5zaWduZWQgbG9uZylzcmItPmNtbmRbOF07CiAKLQkJaWYgKGlkLT5jYXBhYmlsaXR5ICYgQ0FQQUJJTElUWV9MQkEpIHsKKwkJaWYgKGF0YV9pZF9oYXNfbGJhKGlkKSkgewogCQkJc2VjdG51bSA9ICh1bnNpZ25lZCBjaGFyKShsYmEpOwogCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYT4+OCk7CiAJCQloZWFkID0gQVRBX0FERFJFU1NfREVWSEVBRF9MQkFfTU9ERSB8ICh1bnNpZ25lZCBjaGFyKShsYmE+PjI0ICYgMHgwRik7CiAJCX0gZWxzZSB7Ci0JCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKChsYmEgJSBpZC0+c2VjdG9ycykgKyAxKTsKLQkJCWN5bGluZGVyID0gKHVuc2lnbmVkIHNob3J0KShsYmEgLyAoaWQtPnNlY3RvcnMgKgotCQkJCQkJCSAgIGlkLT5oZWFkcykpOwotCQkJaGVhZCA9ICh1bnNpZ25lZCBjaGFyKSgobGJhIC8gaWQtPnNlY3RvcnMpICUKLQkJCQkJICAgICAgIGlkLT5oZWFkcyk7CisJCQlzZWN0bnVtID0gKHU4KSgobGJhICUgaWRbQVRBX0lEX1NFQ1RPUlNdKSArIDEpOworCQkJY3lsaW5kZXIgPSAodTE2KShsYmEgLyAoaWRbQVRBX0lEX1NFQ1RPUlNdICoKKwkJCQkJaWRbQVRBX0lEX0hFQURTXSkpOworCQkJaGVhZCA9ICh1OCkoKGxiYSAvIGlkW0FUQV9JRF9TRUNUT1JTXSkgJQorCQkJCQlpZFtBVEFfSURfSEVBRFNdKTsKIAkJfQogCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKIAkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CkBAIC0xNDE1LDcgKzEzMzUsNyBAQAogCQlhdGFDZGItPndyaXRlLkN5bGluZGVySGlnaEJ5dGUgPSAodW5zaWduZWQgY2hhcikoY3lsaW5kZXI+PjgpOwogCQlhdGFDZGItPndyaXRlLkN5bGluZGVyTG93Qnl0ZSA9ICh1bnNpZ25lZCBjaGFyKWN5bGluZGVyOwogCQlhdGFDZGItPndyaXRlLkRldmljZUhlYWRCeXRlID0gKGhlYWQgfCBBVEFfQUREUkVTU19ERVZIRUFEX1NURCk7Ci0JCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fUkVBRDsKKwkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DTURfUElPX1JFQUQ7CiAJCWJyZWFrOwogCiAJY2FzZSBXUklURV8xMDoKQEAgLTE0MjQsMTQgKzEzNDQsMTYgQEAKIAkJbGJhID0gYmUzMl90b19jcHUoKihfX2JlMzIgKikmc3JiLT5jbW5kWzJdKTsKIAkJYmxvY2tDb3VudCA9ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs3XTw8OCB8ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs4XTsKIAotCQlpZiAoaWQtPmNhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xCQSkgeworCQlpZiAoYXRhX2lkX2hhc19sYmEoaWQpKSB7CiAJCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKGxiYSk7CiAJCQljeWxpbmRlciA9ICh1bnNpZ25lZCBzaG9ydCkobGJhPj44KTsKIAkJCWhlYWQgPSBBVEFfQUREUkVTU19ERVZIRUFEX0xCQV9NT0RFIHwgKHVuc2lnbmVkIGNoYXIpKGxiYT4+MjQgJiAweDBGKTsKIAkJfSBlbHNlIHsKLQkJCXNlY3RudW0gPSAodW5zaWduZWQgY2hhcikoKGxiYSAlIGlkLT5zZWN0b3JzKSArIDEpOwotCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYSAvIChpZC0+c2VjdG9ycyAqIGlkLT5oZWFkcykpOwotCQkJaGVhZCA9ICh1bnNpZ25lZCBjaGFyKSgobGJhIC8gaWQtPnNlY3RvcnMpICUgaWQtPmhlYWRzKTsKKwkJCXNlY3RudW0gPSAodTgpKChsYmEgJSBpZFtBVEFfSURfU0VDVE9SU10pICsgMSk7CisJCQljeWxpbmRlciA9ICh1MTYpKGxiYSAvIChpZFtBVEFfSURfU0VDVE9SU10gKgorCQkJCQlpZFtBVEFfSURfSEVBRFNdKSk7CisJCQloZWFkID0gKHU4KSgobGJhIC8gaWRbQVRBX0lEX1NFQ1RPUlNdKSAlCisJCQkJCWlkW0FUQV9JRF9IRUFEU10pOwogCQl9CiAJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMCA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kOwogCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKQEAgLTE0NDUsNyArMTM2Nyw3IEBACiAJCWF0YUNkYi0+d3JpdGUuQ3lsaW5kZXJIaWdoQnl0ZSA9ICh1bnNpZ25lZCBjaGFyKShjeWxpbmRlcj4+OCk7CiAJCWF0YUNkYi0+d3JpdGUuQ3lsaW5kZXJMb3dCeXRlID0gKHVuc2lnbmVkIGNoYXIpY3lsaW5kZXI7CiAJCWF0YUNkYi0+d3JpdGUuRGV2aWNlSGVhZEJ5dGUgPSAoaGVhZCB8IEFUQV9BRERSRVNTX0RFVkhFQURfU1REKTsKLQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IFdJTl9XUklURTsKKwkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DTURfUElPX1dSSVRFOwogCQlicmVhazsKIAogCWNhc2UgQUxMT1dfTUVESVVNX1JFTU9WQUw6CkBAIC0xNDU5LDcgKzEzODEsNyBAQAogCQkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMTsKIAkJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOwogCQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IChzcmItPmNtbmRbNF0gJiAweDEpID8KLQkJCQlXSU5fRE9PUkxPQ0sgOiBXSU5fRE9PUlVOTE9DSzsKKwkJCQlBVEFfQ01EX01FRElBX0xPQ0sgOiBBVEFfQ01EX01FRElBX1VOTE9DSzsKIAkJCWlzZDIwMF9zcmJfc2V0X2J1ZmZsZW4oc3JiLCAwKTsKIAkJfSBlbHNlIHsKIAkJCVVTX0RFQlVHUCgiICAgTm90IHJlbW92ZWFibGUgbWVkaWEsIGp1c3QgcmVwb3J0IG9rYXlcbiIpOwpAQCAtMTUzOSw4ICsxNDYxLDcgQEAKIAlpZiAoIWluZm8pCiAJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKIAllbHNlIHsKLQkJaW5mby0+aWQgPSAoc3RydWN0IGhkX2RyaXZlaWQgKikKLQkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgaGRfZHJpdmVpZCksIEdGUF9LRVJORUwpOworCQlpbmZvLT5pZCA9IGt6YWxsb2MoQVRBX0lEX1dPUkRTICogMiwgR0ZQX0tFUk5FTCk7CiAJCWluZm8tPlJlZ3NCdWYgPSAodW5zaWduZWQgY2hhciAqKQogCQkJCWttYWxsb2Moc2l6ZW9mKGluZm8tPkFUQVJlZ3MpLCBHRlBfS0VSTkVMKTsKIAkJaW5mby0+c3JiLnNlbnNlX2J1ZmZlciA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKaW5kZXggZjBhYWMwYy4uMzg2ZWFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwpAQCAtNDcxLDcgKzQ3MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHd1c2JoY19rZWVwX2FsaXZlX3J1bihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5ZWRfd29yayh3cyk7CiAJc3RydWN0IHd1c2JoYyAqd3VzYmhjID0JY29udGFpbmVyX29mKGR3LCBzdHJ1Y3Qgd3VzYmhjLCBrZWVwX2FsaXZlX3RpbWVyKTsKIAogCW11dGV4X2xvY2soJnd1c2JoYy0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKaW5kZXggODExOGRiNy4uYjJmMTQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCkBAIC01NjIsNyArNTYyLDcgQEAKIAkJc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldjsKIAogCQl3dXNiX2RldiA9IHd1c2JoYy0+cG9ydFtwXS53dXNiX2RldjsKLQkJaWYgKCF3dXNiX2RldiB8fCAhd3VzYl9kZXYtPnVzYl9kZXYgfCAhd3VzYl9kZXYtPnVzYl9kZXYtPmF1dGhlbnRpY2F0ZWQpCisJCWlmICghd3VzYl9kZXYgfHwgIXd1c2JfZGV2LT51c2JfZGV2IHx8ICF3dXNiX2Rldi0+dXNiX2Rldi0+YXV0aGVudGljYXRlZCkKIAkJCWNvbnRpbnVlOwogCiAJCXVzYl9maWxsX2NvbnRyb2xfdXJiKHd1c2JfZGV2LT5zZXRfZ3RrX3VyYiwgd3VzYl9kZXYtPnVzYl9kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9LY29uZmlnIGIvZHJpdmVycy91d2IvS2NvbmZpZwppbmRleCBjYTc4MzEyLi5iYWM4ZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXdiL0tjb25maWcKQEAgLTQ4LDEwICs0OCwxMCBAQAogICAgICAgICBoZWxwCiAgICAgICAgICAgVGhpcyBkcml2ZXIgZW5hYmxlcyB0aGUgcmFkaW8gY29udHJvbGxlciBmb3IgV0hDSSBjYXJkcy4KIAotICAgICAgICAgIFdIQ0kgaXMgYW4gc3BlY2lmaWNhdGlvbiBkZXZlbG9wZWQgYnkgSW50ZWwKKyAgICAgICAgICBXSENJIGlzIGEgc3BlY2lmaWNhdGlvbiBkZXZlbG9wZWQgYnkgSW50ZWwKICAgICAgICAgICAoaHR0cDovL3d3dy5pbnRlbC5jb20vdGVjaG5vbG9neS9jb21tcy93dXNiL3doY2kuaHRtKSBtdWNoCiAgICAgICAgICAgaW4gdGhlIHNwaXJpdCBvZiBVU0IncyBFSENJLCBidXQgZm9yIFVXQiBhbmQgV2lyZWxlc3MgVVNCCi0gICAgICAgICAgcmFkaW8vaG9zdCBjb250cm9sbGVycyBjb25uZWN0ZWQgdmlhIG1lbW1vcnkgbWFwcGluZyAoZWc6CisgICAgICAgICAgcmFkaW8vaG9zdCBjb250cm9sbGVycyBjb25uZWN0ZWQgdmlhIG1lbW9yeSBtYXBwaW5nIChlZzoKICAgICAgICAgICBQQ0kpLiBNb3N0IG9mIHRoZXNlIGNhcmRzIGNvbWUgYWxzbyB3aXRoIGEgV2lyZWxlc3MgVVNCIGhvc3QKICAgICAgICAgICBjb250cm9sbGVyLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfc2V0dXAuYwppbmRleCBkOTYyN2I1Li4xMzVhZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3NldHVwLmMKQEAgLTM2Miw2ICszNjIsNyBAQAogCWNhc2UgMHgwMTg2OgogCWNhc2UgMHgwMTg3OgogCWNhc2UgMHgwMThEOgorCWNhc2UgMHgwMUQ3OgogCWNhc2UgMHgwMjI4OgogCWNhc2UgMHgwMjg2OgogCWNhc2UgMHgwMjhDOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9pby5jIGIvZHJpdmVycy93MS93MV9pby5jCmluZGV4IDQ0MmJkOGIuLjNlYmU5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzFfaW8uYworKysgYi9kcml2ZXJzL3cxL3cxX2lvLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAkJcmV0dXJuIHcxX3JlYWRfYml0KGRldik7CiAJZWxzZSB7CiAJCXcxX3dyaXRlX2JpdChkZXYsIDApOwotCQlyZXR1cm4oMCk7CisJCXJldHVybiAwOwogCX0KIH0KIApAQCAtMTg0LDE3ICsxODQsMTcgQEAKICAqLwogdTggdzFfdHJpcGxldChzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIGludCBiZGlyKQogewotCWlmICggZGV2LT5idXNfbWFzdGVyLT50cmlwbGV0ICkKLQkJcmV0dXJuKGRldi0+YnVzX21hc3Rlci0+dHJpcGxldChkZXYtPmJ1c19tYXN0ZXItPmRhdGEsIGJkaXIpKTsKKwlpZiAoZGV2LT5idXNfbWFzdGVyLT50cmlwbGV0KQorCQlyZXR1cm4gZGV2LT5idXNfbWFzdGVyLT50cmlwbGV0KGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgYmRpcik7CiAJZWxzZSB7CiAJCXU4IGlkX2JpdCAgID0gdzFfdG91Y2hfYml0KGRldiwgMSk7CiAJCXU4IGNvbXBfYml0ID0gdzFfdG91Y2hfYml0KGRldiwgMSk7CiAJCXU4IHJldHZhbDsKIAotCQlpZiAoIGlkX2JpdCAmJiBjb21wX2JpdCApCi0JCQlyZXR1cm4oMHgwMyk7ICAvKiBlcnJvciAqLworCQlpZiAoaWRfYml0ICYmIGNvbXBfYml0KQorCQkJcmV0dXJuIDB4MDM7ICAvKiBlcnJvciAqLwogCi0JCWlmICggIWlkX2JpdCAmJiAhY29tcF9iaXQgKSB7CisJCWlmICghaWRfYml0ICYmICFjb21wX2JpdCkgewogCQkJLyogQm90aCBiaXRzIGFyZSB2YWxpZCwgdGFrZSB0aGUgZGlyZWN0aW9uIGdpdmVuICovCiAJCQlyZXR2YWwgPSBiZGlyID8gMHgwNCA6IDA7CiAJCX0gZWxzZSB7CkBAIC0yMDMsMTEgKzIwMywxMSBAQAogCQkJcmV0dmFsID0gaWRfYml0ID8gMHgwNSA6IDB4MDI7CiAJCX0KIAotCQlpZiAoIGRldi0+YnVzX21hc3Rlci0+dG91Y2hfYml0ICkKKwkJaWYgKGRldi0+YnVzX21hc3Rlci0+dG91Y2hfYml0KQogCQkJdzFfdG91Y2hfYml0KGRldiwgYmRpcik7CiAJCWVsc2UKIAkJCXcxX3dyaXRlX2JpdChkZXYsIGJkaXIpOwotCQlyZXR1cm4ocmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL0tjb25maWcgYi9kcml2ZXJzL3hlbi9LY29uZmlnCmluZGV4IDUyNjE4N2MuLjhhYzljZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL0tjb25maWcKKysrIGIvZHJpdmVycy94ZW4vS2NvbmZpZwpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgVGhlIG9sZCB4ZW5zdG9yZSB1c2Vyc3BhY2UgdG9vbHMgZXhwZWN0IHRvIGZpbmQgInhlbmJ1cyIKICAgICAgICAgIHVuZGVyIC9wcm9jL3hlbiwgYnV0ICJ4ZW5idXMiIGlzIG5vdyBmb3VuZCBhdCB0aGUgcm9vdCBvZiB0aGUKICAgICAgICAgIHhlbmZzIGZpbGVzeXN0ZW0uICBTZWxlY3RpbmcgdGhpcyBjYXVzZXMgdGhlIGtlcm5lbCB0byBjcmVhdGUKLSAgICAgICAgIHRoZSBjb21wYXRpYmlsdHkgbW91bnQgcG9pbnQgL3Byb2MveGVuIGlmIGl0IGlzIHJ1bm5pbmcgb24KKyAgICAgICAgIHRoZSBjb21wYXRpYmlsaXR5IG1vdW50IHBvaW50IC9wcm9jL3hlbiBpZiBpdCBpcyBydW5uaW5nIG9uCiAgICAgICAgICBhIHhlbiBwbGF0Zm9ybS4KICAgICAgICAgIElmIGluIGRvdWJ0LCBzYXkgeWVzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9jcHVfaG90cGx1Zy5jIGIvZHJpdmVycy94ZW4vY3B1X2hvdHBsdWcuYwppbmRleCA5NzRmNTZkLi41ZjU0YzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9jcHVfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMveGVuL2NwdV9ob3RwbHVnLmMKQEAgLTEwLDcgKzEwLDcgQEAKIAlpZiAoIWNwdV9wcmVzZW50KGNwdSkpCiAJCWFyY2hfcmVnaXN0ZXJfY3B1KGNwdSk7CiAKLQljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKKwlzZXRfY3B1X3ByZXNlbnQoY3B1LCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzYWJsZV9ob3RwbHVnX2NwdShpbnQgY3B1KQpAQCAtMTgsNyArMTgsNyBAQAogCWlmIChjcHVfcHJlc2VudChjcHUpKQogCQlhcmNoX3VucmVnaXN0ZXJfY3B1KGNwdSk7CiAKLQljcHVfY2xlYXIoY3B1LCBjcHVfcHJlc2VudF9tYXApOworCXNldF9jcHVfcHJlc2VudChjcHUsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgdmNwdV9ob3RwbHVnKHVuc2lnbmVkIGludCBjcHUpCmRpZmYgLS1naXQgYS9maXJtd2FyZS8zY29tLzNDMzU5LmJpbi5paGV4IGIvZmlybXdhcmUvM2NvbS8zQzM1OS5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODFiYWMzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvM2NvbS8zQzM1OS5iaW4uaWhleApAQCAtMCwwICsxLDE1NzMgQEAKKzoxMDAwMDAwMEZFM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDAwNDAwMDAwMDAwMDAwMDAwMDMwMzMyRjMwMzIyRjM5MzkyMDMxQ0EKKzoxMDAwNTAwMDM3M0EzMTMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMDAwNjAwMDMwMzEzMjMzMzQzNTM2MzczODM5NDE0MjQzNDQ0NTQ2RUUKKzoxMDAwNzAwMDAwMDAwN0ZGMDIwMEZFOUYwNjAwMDA3QzQ4MDAwMDcwQTEKKzoxMDAwODAwMDgyMDBGRkZGODYwMEZGRkY4ODAwRkZGRjlBMDBGRkZGNEUKKzoxMDAwOTAwMEZGRkYxMTAwQzAwMEZGRkZGRkZGMTEyMjMzNDQ1NTY2MzAKKzoxMDAwQTAwMDMzNDM0RjREMjA0MjQxNDI0NTExNDBDMDAwRkZGRkZGMDYKKzoxMDAwQjAwMEZGMTEyMjMzNDQ1NTY2NTM3NDYxNzI3NDIwNkY2NjIwQjkKKzoxMDAwQzAwMDRDNEM0MzIwNjY3MjYxNkQ2NTJFMjAyMDU0NkY3NDYxMjQKKzoxMDAwRDAwMDZDMjA2NDYxNzQ2MTIwNzM2OTdBNjUyMDY5NzMyMDc4OEIKKzoxMDAwRTAwMDc4NzgyMDIwMjA0MjQxNDI0NUU4RDIwMTgzM0VGNzM0MEYKKzoxMDAwRjAwMDAwNzUyMUU4NDEwMDgzM0VGNzM0MDA3NTE3RTg4MjAwNUYKKzoxMDAxMDAwMDgzM0VGNzM0MDA3NTBERThCRjAwODMzRUY3MzQwMDc1NzkKKzoxMDAxMTAwMDAzRTg0MTAyQzMxRUI4MDBGMDhFRDgzM0Y2QjkwMDgwNjAKKzoxMDAxMjAwMDMzREJBRDAzRDhFMkZCMUZCODAwMDA4M0ZCMDA3NDAzOTAKKzoxMDAxMzAwMEI4MjIwMEEzRjczNEMzRkFCQTU2MDBCMEZGRUUzM0MwQkEKKzoxMDAxNDAwMDhFQzAzM0Y2QjlGRjdGODMzRUZGMzQwMDc0MDg4RDNFQzYKKzoxMDAxNTAwMDMwNjFEMUVGMkJDRjI2OEIxQzI2QzcwNEZGRkYyNjgzRUYKKzoxMDAxNjAwMDNDRkY3NTE3MjZDNzA0MDAwMDI2ODMzQzAwNzUwQzI2NEIKKzoxMDAxNzAwMDg5MUM0NjQ2RTJFMEI4MDAwMEVCMDNCODI0MDBBM0Y3NzAKKzoxMDAxODAwMDM0QzNGQUI0RDc5RTczM0E3NTM4NzkzNjdCMzQ5RkIxNEQKKzoxMDAxOTAwMDA1RDJFQzczMkRCMDQwRDBFMDcxMjc3OTI1RDBFMDczMDMKKzoxMDAxQTAwMDIxN0IxRjMyQzA3NTFCMzJFNDlFNzIxNjc0MTQ3ODEyQzQKKzoxMDAxQjAwMDdBMTA5RkQyRUM3MjBCRDBFNDcwMDc3NTA1QjgwMDAwN0UKKzoxMDAxQzAwMEVCMDNCODI2MDBBM0Y3MzRDM0ZBQkE1QTAwMzNDMEVGRTIKKzoxMDAxRDAwMEVGRUZFRkIwMDBFNjU2QjAwMEU2NTRCQTUyMDBCODAxQjcKKzoxMDAxRTAwMDAxRUZFOENBMDAzQzAxNzU3RkU4ODMwMEJBNTIwMEI4MEQKKzoxMDAxRjAwMDAyMDJFRkU4QjkwMDNDMDI3NTZFRTg3QTAwQkE1MjAwREMKKzoxMDAyMDAwMEI4MDQwNEVGRThBODAwM0MwNDc1NURFODcxMDBCQTUyMzgKKzoxMDAyMTAwMDAwQjgwODA4RUZFODk3MDAzQzA4NzU0Q0U4NjgwMEJBOTkKKzoxMDAyMjAwMDUyMDBCODEwMTBFRkU4ODYwMDNDMTA3NTNCRTg1RjAwMDQKKzoxMDAyMzAwMEJBNTIwMEI4MjAyMEVGRTg3NTAwM0MyMDc1MkFFODU2MzUKKzoxMDAyNDAwMDAwQkE1MjAwQjg0MDQwRUZFODY0MDAzQzQwNzUxOUU4M0QKKzoxMDAyNTAwMDREMDBCQTUyMDBCODgwODBFRkU4NTMwMDNDODA3NTA4MkEKKzoxMDAyNjAwMEU4NDQwMEI4MDAwMEVCMDNCODI4MDBBM0Y3MzRDM0JBOTEKKzoxMDAyNzAwMDVBMDBCODAwODBFRkMzQkE1QTAwQjgwMTgwRUZDM0JBODEKKzoxMDAyODAwMDVBMDBCODAyODBFRkMzQkE1QTAwQjgwMzgwRUZDM0JBNkQKKzoxMDAyOTAwMDVBMDBCODA0ODBFRkMzQkE1QTAwQjgwNTgwRUZDM0JBNTkKKzoxMDAyQTAwMDVBMDBCODA2ODBFRkMzQkE1QTAwQjgwNzgwRUZDM0I5NDYKKzoxMDAyQjAwMEZGRkZFNDU4RTQ1NDNDMDA3NTAzNDk3NUY3QzNGQTMyNzQKKzoxMDAyQzAwMEMwRTY1NkU0NTYzQzAwNzQwM0U5ODIwMEIwRkZFNjU2RUYKKzoxMDAyRDAwMEU0NTYzQ0ZGNzU3OEJBNTIwMEI4RkZGRkVGRUQzQ0ZGRTMKKzoxMDAyRTAwMDc1NkNCODAwRkZFRkVEM0MwMDc1NjNCMEZGRTY1NEU0QjkKKzoxMDAyRjAwMDU0M0NGRjc1NTkzMkMwRTY1NEU0NTQzQzAwNzU0RkIwOEQKKzoxMDAzMDAwMDBGRTY1MEU0NTAyNDBGM0MwRjc1NDNCMDAwRTY1MEU0NzQKKzoxMDAzMTAwMDUwMjQwRjNDMDA3NTM3OENDODhFQzBCRTcwMDAyNjhCRjEKKzoxMDAzMjAwMDE0MjY4QjVDMDJCODAwMDBFRkVEMjNDMzNEMDAwMDc1N0UKKzoxMDAzMzAwMDFEQjhGRkZGMjNDM0VGOEJDOEVEMjNDMzNCQzE3NTBFNzAKKzoxMDAzNDAwMDgzQzYwNDI2ODMzQ0ZGNzVENUI4MDAwMEVCMDNCODJBQUEKKzoxMDAzNTAwMDAwQTNGNzM0QzNGQTMzQzBCRjAwMjBCOTE3MDBGM0FCRDIKKzoxMDAzNjAwMEJGMDAzMEI5MTcwMEYzQUJCRjAwMjJCOTQwMDBGM0FCQjgKKzoxMDAzNzAwMEJGMDAzMkI5NDAwMEYzQUJGQzFFOENDODhFRDgzM0MwMkUKKzoxMDAzODAwMDhFQzBCRTkyMDBCRjAwMjBCOTE3MDBGM0E0QkVBOTAwMjIKKzoxMDAzOTAwMEJGMDAyMkI5NDAwMEYzQTQxRkM3MDZGQjM0NjQwMEJBQjMKKzoxMDAzQTAwMDA4MDBCODBGMDBFRkU4ODIwMUU4OUIwMTcyMERDNzA2NTQKKzoxMDAzQjAwMEY3MzQyQzAwQzcwNkY5MzQwNDAwQzNCQTBBMDAzM0MwNkUKKzoxMDAzQzAwMEVGRTg5ODAxRThCNTAxQjgxNzAwQkE5QzAwRUZCODAwNTMKKzoxMDAzRDAwMDEwQkE5QTAwRUZCODE3MDBBOTAxMDA3NDAxNDBCQThDNTYKKzoxMDAzRTAwMDAwRUZCODAwMThCQTg2MDBFRkI4MEMwMEJBODIwMEVGMzAKKzoxMDAzRjAwMEJBMDIwMEVEMjVGOUZGMEQwMjAwRUZCQTA2MDAzM0MwODYKKzoxMDA0MDAwMEVGQkEwNDAwQjg2MDAwRUZCQTAwMDBCODE4MDBFRkJBMDUKKzoxMDA0MTAwMDgwMDBCOUZGRkZFREE5MDEwMDc1MDRFMkY4RUIzRUJBRDgKKzoxMDA0MjAwMDBBMDBFREE5MDA0MDc0MzVBOTAwMjA3NDMwMzNDMEVGRjQKKzoxMDA0MzAwMDUxQjlDODAwRTJGRTU5MUUwNjFGMjY4QjBFMDIzMDgzRkEKKzoxMDA0NDAwMEY5MTc3NTE4NDk0OUJFMDIyMEJGMDYzMEYzQTYxRjIzQ0QKKzoxMDA0NTAwMEM5NzUwQUZGMEVGQjM0NzQxMkU5NERGRjFGQjgyQzAwNUEKKzoxMDA0NjAwMEJCMDAwMEEzRjczNDg5MUVGOTM0QzNDNzA2RkIzNDY0MEMKKzoxMDA0NzAwMDAwRThEMzAwNzIwREM3MDZGNzM0MkMwMEM3MDZGOTM0MjQKKzoxMDA0ODAwMDA0MDBDM0U4RDYwMEU4RjMwMEI4MDMwMEJBODIwMEVGMjYKKzoxMDA0OTAwMEI4NDA4MEJBOTgwMEVGQjgwMDExQkE5NjAwRUZCODQwQTMKKzoxMDA0QTAwMDAwQTkwMTAwNzQwMTQwQkE5MjAwRUZCODAwMTlCQThFOTkKKzoxMDA0QjAwMDAwRUZCQTAyMDBFRDI1RjlGRjBEMDYwMEVGQkEwNjAwQzUKKzoxMDA0QzAwMDMzQzBFRkJBMDAwMEI4MTgwMEVGQkE4MDAwQjlGRkZGRTAKKzoxMDA0RDAwMEVEQTkyMDAwNzUwNEUyRjhFQjQzQkEwQTAwRURBOTAwOEIKKzoxMDA0RTAwMDQwNzQzQUE5MDAyMDc0MzUzM0MwRUY1MUI5QzgwMEUyMTYKKzoxMDA0RjAwMEZFNTkxRTA2MUYyNjhCMEUwMjMyODNGOTQwNzUxRDQ5RDgKKzoxMDA1MDAwMDQ5QkUwMjIyQkYwNjMyRjNBNjFGMjNDOTc1MEZGRjBFOTQKKzoxMDA1MTAwMEZCMzQ3NDAzRTk1QUZGQjgwMDAwRUIwQjFGQjgyQzAwNDIKKzoxMDA1MjAwMEJCMDIwMDg5MUVGOTM0QTNGNzM0QzNCQTAyMDBCODAwMzUKKzoxMDA1MzAwMDlDRUZCQTAwMDBCODAwODRFRjMzQzBFRkJBMEEwMEVGQjYKKzoxMDA1NDAwMEJBMEUwMDMzQzBFRkMzQkEwQTAwQjlGRkZGRUQyNTAwQjEKKzoxMDA1NTAwMDYwM0QwMDYwNzQwNEUyRjVGOEMzRjlDM0IwMDBFNjU2RUMKKzoxMDA1NjAwMEI4MDBGRkJBNTIwMEVGQjlGRkZGQkE1ODAwRUQyNUVGMEYKKzoxMDA1NzAwMDAwNzQwOEJBNUEwMDMzQzBFRkUyRUZDM0JBODAwMEVENEUKKzoxMDA1ODAwMEJBODQwMEVGQkE4MDAwRURDMzAwMDAwMDAwMDAwMDAwNTQKKzoxMDA1OTAwMEM2MDZFQzM0MTUzM0MwOEVEODhFQzAxRThDQzhCRTQwNDMKKzoxMDA1QTAwMDU0QkY2MEZFOEVEOEI5MTAwMEYzQTQxRkM3MDY4MDM2NzIKKzoxMDA1QjAwMDEwMzVDNzA2OEMzNjMwMzU4RDA2MzgzNUEzMzAzNUEzNTcKKzoxMDA1QzAwMDMyMzUwNTMzMDFBMzM0MzVDNzA2MzYzNTUwMDFDNzA2MjkKKzoxMDA1RDAwMDg0MzY4MEZFQzcwNjg4MzZDMEZFQzYwNkMyRkVGRkM2NDkKKzoxMDA1RTAwMDA2OTMzNjgwQzYwNjkyMzYwMEM2MDY4MEZFODBDNzA2OTEKKzoxMDA1RjAwMDgyRkU1NDUwQzcwNjg0RkUyQjRERTVDRUE5MDIwMDc1M0QKKzoxMDA2MDAwMDA4QzYwNjgxRkUyM0U5MDUwMEM2MDY4MUZFMjJBMUY3ODEKKzoxMDA2MTAwMDM0QTM4NkZFQjg0ODM0ODZFMEEzODhGRThEMDY0RTM0QTcKKzoxMDA2MjAwMDg2RTBBMzhBRkVCODU4MzQ4NkUwQTM4Q0ZFQjg5QzM0REEKKzoxMDA2MzAwMDg2RTBBMzhFRkU4RDA2MjAwMzg2RTBBMzkwRkUzM0MwRTUKKzoxMDA2NDAwMEJBNzIwMEVGMzNDMEJBNzQwMEVGQkE3NjAwRUZCODgwMjgKKzoxMDA2NTAwMEZFODZFMEJBNzIwMEVGRThCRjA3QkEwQzAxQjg0MDQwNkUKKzoxMDA2NjAwMEVGRURCQTZBMDBCODAzMDBDMUUwMDgwRDAzMDBFRkI5NkUKKzoxMDA2NzAwMDBBMDBFODk0MDBCQTZBMDBCODAzMDBDMUUwMDhFRkExREMKKzoxMDA2ODAwMDMyMzRBM0EyMzNDNzA2QTYzMzA0MDA4RDA2QTAzM0MxQkIKKzoxMDA2OTAwMEU4MDRDRDM5QzcwNjkwMzZGRkZGRTlFMzAwNjMwRDY2MzUKKzoxMDA2QTAwMDBENjYwRDhBMERFNjBFNzUxMjJFMEYwMzBGNTAwRjYwQUEKKzoxMDA2QjAwMDBENjAwRDYwMERFRDBGRTkxMjYwMEQ2MDBENjAwRDYwQjUKKzoxMDA2QzAwMDBENjAwRDIyMTA2MDBENjAwRDYwMEQ2MDBERkUxMDYwNUMKKzoxMDA2RDAwMDBENjAwRDYwMEQ2MDBENjAwRDYwMERBRjBGMzIxMDM3QjUKKzoxMDA2RTAwMDBENjAwRDYwMEQ2MDBENjAwRDYwMEQ2MDBENjAwRDYwQTIKKzoxMDA2RjAwMDBENjAwRDYwMEQ2MDBENjAwRDYwMEQ2MDBENjAwRDYwOTIKKzoxMDA3MDAwMDBENjQwRTAwMEY5NTA5NjAwQTQ5QkJGRkZGQkE2QTAwMkQKKzoxMDA3MTAwMEVEQTkwMDIwNzQzODgwM0U4MEZFMTI3NTMxRTg0QTAwNTEKKzoxMDA3MjAwMEExMzIzNEEzQTIzM0M3MDZBNjMzMDQwMDhEMDZBMDMzM0EKKzoxMDA3MzAwMEMxRTgwNENEMzlFODIyMDBDNzA2RjMzNDQ2MDBDNzA2RjUKKzoxMDA3NDAwMEY1MzRGRkZGQzcwNjkwMzZGRkZGNThFOTMyMDA0QjgzQjAKKzoxMDA3NTAwMEZCMDA3NUI5ODNGOTAwNzVCMEMzNTJCQTZBMDBCODAzREIKKzoxMDA3NjAwMDAwQzFFMDA4MEQwMzAwRUY1QUMzNTJCQTZBMDBCODAzOTMKKzoxMDA3NzAwMDAwQzFFMDA4RUY1QUMzMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMDA3ODAwMDY4ODAwN0ExOTAzNkNEMzU4QjM2MjQwMjJFRkZBNDM1MjQKKzoxMDA3OTAwMDBBRkE4QTI2OTQzNjg4MjZFODM0QzYwNjk0MzYwMEZCODAKKzoxMDA3QTAwMDIyRTQ3NTAxQzNGNkM0MjA3NDdERjZDNDA4NzQwNTgwODQKKzoxMDA3QjAwMDBFOTIzNjA0ODAyNkU4MzREN0M0MUU4NDM2MjY4QjM3NDIKKzoxMDA3QzAwMDgxRTZGRjAwODNGRTIwNzYwNUIwMDFFOTI4MDA1MzA2OEMKKzoxMDA3RDAwMEQxRTYyRUZGOTQ5RDA2MDc1QjI2ODg0NzAyM0NGRjc0RjYKKzoxMDA3RTAwMDA3M0NGRTc1MTFFOTNCMDBGNjA2OTIzNjA4NzUzNEY2QjMKKzoxMDA3RjAwMDA2OTIzNjA0NzQyRDgwMjY5MjM2RjM4MDNFOTUzNjAwOUMKKzoxMDA4MDAwMDc1MjEyNjgwM0YwNTc1MTNDNjA2OTUzNjAwMjY4MDdGMjQKKzoxMDA4MTAwMDA2MDA3NDA3MjY4QjQ3MDRBMjk1MzZCQTBDMDFCODQwMkYKKzoxMDA4MjAwMDQwRUZFRDhBMjZFODM0RjZDNDEwNzUwM0U5NUIwMEY2NjQKKzoxMDA4MzAwMEM0MDQ3NDA1ODAwRTkyMzYwMTgwMjZFODM0RUJDNDNFNzEKKzoxMDA4NDAwMDg4MzYyNjhCMzU4M0U2N0Y4M0ZFMTI3MjA4MjZDNjQ1REUKKzoxMDA4NTAwMDAyMDFFOTI0MDA4M0M2MjBEMUU2MkVGRjk0OUQwNkM0NDAKKzoxMDA4NjAwMDNFODgzNjI2ODg0NTAyM0NGRjc1MEVGNjA2OTIzNjAxMTQKKzoxMDA4NzAwMDc0MTRGNjA2OTIzNjAyNzUwRDgwMjY5MjM2RkNCQTBDNzgKKzoxMDA4ODAwMDAxQjgyMDIwRUZFRDhBMjZFODM0RjZDNDA4NzQyMjgwRUYKKzoxMDA4OTAwMDI2RTgzNEY3ODAwRTkyMzYwNEY2MDY5MjM2MDg3NDExNzQKKzoxMDA4QTAwMDgwMjY5MjM2RjNCQTBDMDFCODQwNDBFRkVEOEEyNkU4NzQKKzoxMDA4QjAwMDM0RjZDNDA0NzQyMjgwMjZFODM0RkI4MDBFOTIzNjAxOUMKKzoxMDA4QzAwMEY2MDY5MjM2MDI3NTExODAyNjkyMzZGRUJBMEMwMUI4RjEKKzoxMDA4RDAwMDIwMjBFRkVEOEEyNkU4MzRGNkM0MDE3NDY3ODAyNkU4MEMKKzoxMDA4RTAwMDM0RkU4MDNFRThGRjAwNzQzOTgwM0VFOEZGMDQ3NDMyMzUKKzoxMDA4RjAwMDgwM0VFOEZGMDE3NTIxRTU4MEE5MDAwNzc0MEFCQTlFRDEKKzoxMDA5MDAwMDAwQjgwMDAyRUZFOUVGRkZDNjA2RThGRjAzQkEwQzAxRUEKKzoxMDA5MTAwMEI4MDgwOEVGRURFOTI4MDA4MDNFRThGRjAzNzQwNkU5MTcKKzoxMDA5MjAwMDFFMDBFOTAwMDBCQTEwMDFCODAyMDJFRkVERTUwMDBENkIKKzoxMDA5MzAwMDE4MDBFNzAwRTU4MjBEMDIwMEU3ODJDNjA2RThGRjA0MjIKKzoxMDA5NDAwMDhBMjZFODM0RjZDNDAyNzQwRDgwMjZFODM0RkQ4MDI2MzkKKzoxMDA5NTAwMDkyMzZCRkU4NEYwQkZBQTBFODM0MDgwNjk0MzZDNjA2NzQKKzoxMDA5NjAwMEU4MzQwMEZCQzNFOEU3MEZDNDFFODQzNjJFRkYxNjAxRUYKKzoxMDA5NzAwMDA3MjY4ODQ3MDJFOTdFRkVFODJEMTBDNDFFODQzNjJFMjUKKzoxMDA5ODAwMEZGMTYwMzA3MjY4ODQ3MDJFOTZCRkU4RTA2MjYwMjJFMTUKKzoxMDA5OTAwMEZGMTYwNzA3QzNDMzgzM0VGNTM0MDA3NDBGRkYwRUYzNDEKKzoxMDA5QTAwMDM0NzUwOUU4QzRGREM3MDZGNTM0MDAwMEY2MDY5MzM2MzEKKzoxMDA5QjAwMDIwNzQzMEExQzIzNDNCMDZFOTM0QTNFOTM0NzQyNDgwQTYKKzoxMDA5QzAwMDNFOTUzNjAwNzUxREY3MDZFNjM0MjAwMDc0MTJBOTIwMDYKKzoxMDA5RDAwMDAwNzQwRDgzMjZDMjM0REY4MzI2RTkzNERGRTkwMzAwODcKKzoxMDA5RTAwMEU4REQwOUJBMDYwMUVEOEJEMDgxRTIwMEMwQzFFQTBFNTQKKzoxMDA5RjAwMDAzMTY3NDM0QzFFMDAyMTEwNjcyMzQ3MzA0RkYwNjc0RTYKKzoxMDBBMDAwMDM0QkEwMjAxRUQ4QkQwODFFMjAwQzBDMUVBMEUwMzE2QjgKKzoxMDBBMTAwMDcwMzRDMUUwMDIxMTA2NkUzNDczMDRGRjA2NzAzNEM3RUYKKzoxMDBBMjAwMDA2QTYzMzA0MDBDNzA2QUEzMzAwMDA4RDA2QTAzM0MxMTIKKzoxMDBBMzAwMEU4MDRDRDM5QzM5NTA5OTUwOTY1MDk3ODA5OTUwOTk1QTMKKzoxMDBBNDAwMDA5OTEwNzk1MDk5NjA5OEIwOTk1MDk5NTA5OTUwOTk1QzUKKzoxMDBBNTAwMDA5OTUwOTk1MDk4QkMwOEJDMDhCQzA4QkMwOEJDMDkwNEEKKzoxMDBBNjAwMEY2MDY5MzM2MjA3NTAzRTlDQzAwOENDMDQwOEVDMDI2NzQKKzoxMDBBNzAwMDhCMEUwNjAwODZFOTI2ODkwRTA2MDA4Q0MyQzFFMjA0QjAKKzoxMDBBODAwMEJFMEUwMDI2QTEwNDAwRDBFMDI0QzA4QUUwQzBFQzA0MjEKKzoxMDBBOTAwMDBBQzQyNkEyMDUwMDI2QTEwODAwQTkwMEMwNzQwM0U5MjMKKzoxMDBBQTAwMDlFMDAyNkY2MDYxMDAwODA3NTAzRTkwQTAwMjZBMDE2QUYKKzoxMDBBQjAwMDAwMjQxRjMyRTQwM0YwODAzRUVDMzQwNjcyNUM4MDNFN0EKKzoxMDBBQzAwMDk1MzYwMDc1NjY4QkZBMzNEQjhFQzMyNjg5MUQyNjg4MjIKKzoxMDBBRDAwMDVEMDQ1MTUwQzQxRThDMzZCOTBGMDAzM0MwRTgyMTA5QTMKKzoxMDBBRTAwMDU4NTkwQkRCNzQzNEZFMEVFNjNBMjZDNjA3ODEyNkM2M0IKKzoxMDBBRjAwMDQ3MDEwMDI2QzY0NzAyRkYyNkM3NDcwNDAwMDAyNjg5OTMKKzoxMDBCMDAwMDRGMEE4NkYyMjY4OTU3MDYyNjg5NzcwODI2QzY0NzA5OUUKKzoxMDBCMTAwMDAwMjZDNjQ3MEMwMkU4OEMwOUMzRkYwNkVDMzM4Q0MwRTQKKzoxMDBCMjAwMDQ4OEVDMEZBRTg5NzEwRkJFOUVCRkY4Q0MwNDg4RUMwRjYKKzoxMDBCMzAwMEZBRTg4QTEwRkJDMzhDQzA4RUMwRkFFODgwMTBGQkMzQjEKKzoxMDBCNDAwMDgwM0U5NTM2MDA3NTAzRTlDMjAwQkYwODAwMjZGNjA2MTAKKzoxMDBCNTAwMDEwMDA4MDc1MDUwM0ZFRTkwQzAwMjZBMDE2MDAyNDFGNzYKKzoxMDBCNjAwMDMyRTQwM0YwMDNGRUEwOTUzNjNDMDA3NTAzRTk5QzAwRDcKKzoxMDBCNzAwMDNDMDE3NDBCM0MwMjc0MTQzQzAzNzQxREU5OEQwMEM2RTcKKzoxMDBCODAwMDA2OTYzNjAxRTgzQzAxNzIyN0U5ODAwMEM2MDY5NjM2RDMKKzoxMDBCOTAwMDAyRTg4MzAwNzIxQUU5NzMwMEM2MDY5NjM2MDFFODIyNUQKKzoxMDBCQTAwMDAxNzIwREM2MDY5NjM2MDJFODZDMDA3MjAzRTk1QzAwMUQKKzoxMDBCQjAwMDUzMDY1MEM0MUU4QzM2QjkwQjAwMzNDMEU4NDIwODU4QTcKKzoxMDBCQzAwMDI2QzYwNzgyMjZDNjQ3MDJGRjhEMDZFMEZFODZDNDI2OUIKKzoxMDBCRDAwMDg5NDcwNkEwOTYzNjI2ODg0NzA4RThDODA4MDc1QjgzMzkKKzoxMDBCRTAwMDI2QUQzNkZFQTFBRDM2RTcwNEJBMTAwMUI4ODA4MEVGMUQKKzoxMDBCRjAwMEVEQkExMDAxQjgwMjAyRUZFRDUyQkFFMDAwQjg0MTEwQjAKKzoxMDBDMDAwMEVGNUFCODlDMDNDRDM5QzYwNjk1MzYwMDhDQzA0ODhFODUKKzoxMDBDMTAwMEMwRkFFOEE5MEZGQkMzMUUwNjFGMDYzM0MwOEVDMDhCQTcKKzoxMDBDMjAwMEYwOEQzRTIwRjM1MUIxMEEyNjgzN0QwQzAxNzUyQTU3QzEKKzoxMDBDMzAwMDI2ODM3RDBFMDA3NDA2RTgyRjAwRTkwMzAwRTg2NjA3QUUKKzoxMDBDNDAwMDVGNzMxNjMzQzA4RUQ4MjY4QjREMTI4RDc1MjA4RDNFNjYKKzoxMDBDNTAwMEUwRkVGM0E0NTkwNzFGRjlDM0ZFQzk3NDA3ODFDNzIwM0EKKzoxMDBDNjAwMDAxRTlDNEZGNTkwNzFGRjhDMzUxNTA1MzU2NTI1NzMzNzcKKzoxMDBDNzAwMERCMjY4QTVEMEUyNjhCNEQxMjhEN0QyMDVBODdENzI2NjYKKzoxMDBDODAwMDhBNDUxNDg3RDc0MjMyRkY4MEZGMDg3NTA4RkVDQjIyQzEKKzoxMDBDOTAwMERCNzVFQTMzREIyM0RCNzQwNkZFQzdEMEM4NzMwQzUwNjgKKzoxMDBDQTAwMDI2OEEwNTM4MDQ1ODc0MDNFOTBBMDA0OTQ2NDcyM0M5Q0YKKzoxMDBDQjAwMDc0MEFFOUQzRkY1QTVFNUI1ODU5RjhDMzVBNUU1QjU4MTEKKzoxMDBDQzAwMDU5RjlDMzFFMDYxRjA2MzNDMDhFQzA4NkNEMkJDRThCQUUKKzoxMDBDRDAwMEY3OEJDMTMzQzk4MDNDRkY3NDE2ODBGOTA2NzMwOTMyNjMKKzoxMDBDRTAwMEM5NDY0ODc0MkVFOUVERkYzRDYwMDA3MzBDRTkyMzAwMEUKKzoxMDBDRjAwMEZFQzE0NjQ4NzQxREU5RENGRkI4MTAwMDhEM0UxODM0NzMKKzoxMDBEMDAwMDMyRURCMTA2RjNBNjc0MDNFOTA4MDA0ODIzQzA3NDA3NjYKKzoxMDBEMTAwMEU5RTlGRjA3MUZGOEMzOEQzNjE4MzQzM0MwOEVEODhEMkMKKzoxMDBEMjAwMDNFRTBGRUI4MTAwMEI5MDYwMDU2RjNBNDVFNDgzRDAwNTAKKzoxMDBEMzAwMDAwNzVGMzA3MUZGOUMzRkYwNkU0MzNDNjA2RUIzNDAwNjIKKzoxMDBENDAwMDI2OEI0NTA2ODZFMEMxRTgwNDQ4MDY4RUMwRkUwNkU2MEUKKzoxMDBENTAwMDNBRkFFODY5MEVGQjA3QjBGRkMzMDAwMDAwMDAwMDAwOEMKKzoxMDBENjAwMEIwMDFDM0IwMDBDM0Y2MDY5MzM2MjA3NTAzQjAwNEMzQzgKKzoxMDBENzAwMDhCMEU5NzM2ODFFMTgwMzAyNjhCNDcwNDI1N0ZDRjBCODEKKzoxMDBEODAwMEMxQTM5NzM2QTNFNjM0QjAwMEMzRjYwNjkzMzYyMDc0QTkKKzoxMDBEOTAwMDAzQjAwM0MzMjY4QjQ3MDhBMzk3MzZBM0U2MzQyNjhBRkQKKzoxMDBEQTAwMDQ3MjBBMkZEMzQzQzAxNzUwNkM3MDZBMTM2MDAwMDI2ODcKKzoxMDBEQjAwMDhBNDcyMUEyRkUzNDI2OEI0NzBBQTMxODM0QTM1ODM0NEQKKzoxMDBEQzAwMDI2OEI0NzBDQTMxQTM0QTM1QTM0MjY4QjQ3MEVBMzFDMzgKKzoxMDBERDAwMDM0QTM1QzM0QzYwNjJBMzRDMDI2OEI0NzE0MjU3RkZGMTMKKzoxMDBERTAwMDA5MDYyQzM0MjY4QjQ3MTYyNUZGRkUyNUZGRkMwOTA2MzUKKzoxMDBERjAwMDJFMzRDNjA2MDAzNEMwMjY4QjQ3MTBBMzAyMzQyNjhCM0YKKzoxMDBFMDAwMDQ3MTJBMzA0MzQwNjUzRTg4NDBBNUIwNzNEMDAwMDc1Q0IKKzoxMDBFMTAwMDA3ODAwRTkyMzYwOEIwRkVDM0I5MDAwMUExQUMzMzMzOEYKKzoxMDBFMjAwMEQyRjdGOUEzQUUzMzkxNDkzM0QyRjdFOTA1MDAzQkEzREEKKzoxMDBFMzAwMDQ2MzRCRjAwM0I4OTNFNDQzNEJBNjgwMEI4RTBFMEVGNzYKKzoxMDBFNDAwMEExQUUzM0U3NjJBMUFFMzNCQTA4MDFFRkExNDQzNEU3QTMKKzoxMDBFNTAwMDY0QTE0NDM0QkEwQTAxRUZCODAwMDEyRDA0MDAwRDAwNkEKKzoxMDBFNjAwMDEwRTc5MkMzM0QwMDAwNzQwQTI2ODk0NzA3RTg4MzNBRDkKKzoxMDBFNzAwMEIwMDdDM0ExQUUzMzI2ODk0NzJCQTE0NDM0MjY4OTQ3NDYKKzoxMDBFODAwMDJEQTE0NjM0MjY4OTQ3MkY4MDBFOTMzNjIwQTE4ODM2MUYKKzoxMDBFOTAwMDg2RTAyNjg5NDcwOEExODQzNjg2RTAyNjg5NDcwQUExOEMKKzoxMDBFQTAwMDgwMzY4NkUwMjY4OTQ3MENCODYwRkU4NkUwMjY4OTQ3QjIKKzoxMDBFQjAwMDBFQTBBMTM2MjY4ODQ3MTA4QjM2ODgzNjI2QzY0NDAyRjcKKzoxMDBFQzAwMEZGRTU5RUE5MDAwODc0MENCQTg0MDBFRDBEMDgwMEVGNDAKKzoxMDBFRDAwMEJBOEUwMEVGRTUwMjI1RjlGRkU3MDJCQTEwMDFCODAyNjkKKzoxMDBFRTAwMDAyRUZFREIwMDBDM0Y2MDY5MzM2MjA3NTAzQjAwMUMzRTAKKzoxMDBFRjAwMDgwMjY5MzM2OUZFODhEMEE4MDBFOTIzNjA4QjBGRUMzOTYKKzoxMDBGMDAwMEIwMDBDM0Y2MDY5MzM2MjA3NTAzQjAwNEMzQzYwNjJBQTQKKzoxMDBGMTAwMDM0QzAyNjhCNDcwNjI1N0ZGRkEzMkMzNDI2OEI0NzA4MzkKKzoxMDBGMjAwMDI1RkZGRTI1RkZGQ0EzMkUzNENENTJCMDAwQzNGNjA2RUMKKzoxMDBGMzAwMDkzMzYyMDc1MDNCMDA0QzNDNjA2MDAzNEMwMjY4QjQ3MjEKKzoxMDBGNDAwMDA2QTMwMjM0MjY4QjQ3MDhBMzA0MzRDRDUyQjAwMEMzNTUKKzoxMDBGNTAwMEY2MDY5MzM2MjA3NTAzQjAwNEMzNTc4RDdGMDY1MUI5NEEKKzoxMDBGNjAwMDA3MDAzM0MwRjNBQjU5OEQ3RjA2QTE3QTM0MDMwNjM5RUQKKzoxMDBGNzAwMDM3MjY4ODA1QTE5NTM3MjY4ODQ1MDJBMTgwMzQwMzA2QzcKKzoxMDBGODAwMDc2MzQyNjg4NDUwN0ExQzYzNDI2ODg0NTA5QTFEODMzN0EKKzoxMDBGOTAwMDI2ODg0NTBBMzNDMEEzN0EzNEEzMzkzN0EzOTUzN0EzRUIKKzoxMDBGQTAwMDgwMzRBMzc2MzRBM0M2MzRBM0Q4MzM1RkIwMDBDM0Y2MkQKKzoxMDBGQjAwMDA2OTMzNjIwNzUwM0IwMDRDMzI2OEI0RjA0ODNGOTA2Q0QKKzoxMDBGQzAwMDc0MTI4M0Y5MDQ3NDBEODNGOTAwNzQwODgzRjkwMjc0QjAKKzoxMDBGRDAwMDAzQjAwMUMzODkwRUU4M0E4MzI2QUIzNkY5MDkwRUFCOUMKKzoxMDBGRTAwMDM2RTUwMjI1RjlGRjBCQzFFNzAyQjAwMEMzRjYwNjkzMTAKKzoxMDBGRjAwMDM2MjA3NTAzQjAwNEMzMjY4QjRGMDQ4MEY5RkY3NDA4QjQKKzoxMDEwMDAwMDgwRjkwMDc0MTBCMDAxQzM4MzBFQUQzNjAyQTFBRDM2NzUKKzoxMDEwMTAwMEU3MDRFOTBBMDA4MzI2QUQzNkZEQTFBRDM2RTcwNEIwNEEKKzoxMDEwMjAwMDAwQzNGNjA2OTMzNjIwNzUwM0IwMDRDM0U4RDUwNEIwQjgKKzoxMDEwMzAwMDAwQzNGNjA2OTMzNjgwNzUwM0IwMDFDMzI2ODM3RjA2OEUKKzoxMDEwNDAwMDA1NzUwM0U5OUQwMDI2OEI1NzA0MjY4QjQ3MDgyNjgxRUEKKzoxMDEwNTAwMDdGMDYwMDgwNzUwOEVEMjY4OTQ3MEFFOTlEMDAyNjgzRjIKKzoxMDEwNjAwMDdGMDYwMTc1MDRFRkU5OTIwMDI2ODE3RjA2MDE4MDc1RjUKKzoxMDEwNzAwMDA5RUZFRDI2ODk0NzBBRTk4MTAwMjY4MzdGMDYwMjc1N0MKKzoxMDEwODAwMDA3MjYyMTQ3MDRFOTczMDAyNjgxN0YwNjAyODA3NTBDM0MKKzoxMDEwOTAwMDI2MjE0NzA0RUQyNjg5NDcwQUU5NUYwMDI2ODM3RjA2NUIKKzoxMDEwQTAwMDAzNzUwNzI2MDk0NzA0RTk1MTAwMjY4MTdGMDYwMzgwNUUKKzoxMDEwQjAwMDc1MEMyNjA5NDcwNEVEMjY4OTQ3MEFFOTNEMDAyNjgzNzkKKzoxMDEwQzAwMDdGMDYwNDc1MDcyNjMxNDcwNEU5MkYwMDI2ODE3RjA2MzUKKzoxMDEwRDAwMDA0ODA3NTBDMjYzMTQ3MDRFRDI2ODk0NzBBRTkxQjAwNzgKKzoxMDEwRTAwMEIwMDFDM0ZBNTMyNjhCNEYwODBCQzk3NDBDOEQxRUUwNTgKKzoxMDEwRjAwMEZFRTg1MkZGODNDMzA4RTJGODVCRkJCMDAwQzNGNjA2Q0MKKzoxMDExMDAwMDkzMzY4MDc1MEFGNjA2OTMzNjIwNzUwM0IwMDFDMzhEQjkKKzoxMDExMTAwMDNFRTBGRUU1MDAyNjg5MDVFNTAyMjY4OTQ1MDJBMUFERUYKKzoxMDExMjAwMDM2MjY4OTQ1MDRFNTA2MjY4OTQ1MDZFNTA4MjY4OTQ1Q0IKKzoxMDExMzAwMDA4RTUwQTI2ODk0NTBBRTUwRTI2ODk0NTBDRTU0ODI2NzQKKzoxMDExNDAwMDg5NDUwRUU1NEEyNjg5NDUxMEU1NEMyNjg5NDUxMkExQjgKKzoxMDExNTAwMEI3MzYyNjg5NDUxNEU1NTAyNjg5NDUxNkU1NTIyNjg5NzUKKzoxMDExNjAwMDQ1MThFNTU0MjY4OTQ1MUFFNTU2MjY4OTQ1MUNFNTU4NTMKKzoxMDExNzAwMDI2ODk0NTFFRTU2MjI2ODk0NTIwRTU2NDI2ODk0NTIyQTMKKzoxMDExODAwMEU1NjYyNjg5NDUyNEU1NjgyNjg5NDUyNkU1NkEyNjg5OTcKKzoxMDExOTAwMDQ1MjhFNTZDMjY4OTQ1MkFFNTcwMjY4OTQ1MkNFNTcyQTcKKzoxMDExQTAwMDI2ODk0NTJFRTU3NDI2ODk0NTMwRTU3NjI2ODk0NTMyMUYKKzoxMDExQjAwMEU1N0MyNjg5NDUzNEU1N0UyNjg5NDUzNkU1ODAyNjg5MDUKKzoxMDExQzAwMDQ1MzhFNTgyMjY4OTQ1M0FFNTg2MjY4OTQ1M0NFNTg4MDUKKzoxMDExRDAwMDI2ODk0NTNFRTU5QTI2ODk0NTQwRTU5RTI2ODk0NTQyNzEKKzoxMDExRTAwMEU1Q0MyNjg5NDU0NEU1Q0UyNjg5NDU0NkU1RDAyNjg5QzUKKzoxMDExRjAwMDQ1NDhFNUQyMjY4OTQ1NEFCQTAwMDFFRDExMDY2NjM0MTQKKzoxMDEyMDAwMDczMDRGRjA2NjgzNDI2ODk0NTRDQkEwMjAxRURDMUUwM0IKKzoxMDEyMTAwMDAyMTEwNjZFMzQ3MzA0RkYwNjcwMzQyNjg5NDU0RUJBRjcKKzoxMDEyMjAwMDA0MDFFRDExMDY2QTM0NzMwNEZGMDY2QzM0MjY4OTQ1MDcKKzoxMDEyMzAwMDUwQkEwNjAxRURDMUUwMDIxMTA2NzIzNDczMDRGRjA2RDQKKzoxMDEyNDAwMDc0MzQyNjg5NDU1MkJBMDgwMUVEMjY4OTQ1NTRCQTBBRjQKKzoxMDEyNTAwMDAxRUQyNjg5NDU1NkJBMEMwMUVEMjY4OTQ1NThCQTBFOEUKKzoxMDEyNjAwMDAxRUQwMTA2N0EzNDI2ODk0NTVFQkExMDAxRUQyNjg5MjIKKzoxMDEyNzAwMDQ1NUNCMDAwQzNGNjA2OTMzNjgwNzQwN0Y2MDY5MzM2RDUKKzoxMDEyODAwMDIwNzUwM0IwMDFDMzI2ODA3RjA2MDA3NTMwODAzRTk1MkYKKzoxMDEyOTAwMDM2MDA3NDUyQzYwNjk1MzYwMDgzMjZBRDM2RkVBMUFERTMKKzoxMDEyQTAwMDM2RTcwNEJBMTAwMUI4ODA4MEVGRURCQTEwMDFCODAyMzkKKzoxMDEyQjAwMDAyRUZFREJBRTAwMEI4MDAxMEVGQjAwMEMzMjY4QjQ3OTQKKzoxMDEyQzAwMDA0M0QwMDAwNzQyMDNEMDMwMDc3MUJCQTEwMDFCODAyRjIKKzoxMDEyRDAwMDAwRUZCQUUwMDBCODAxMTBFRjgzMEVBRDM2MDFBMUFEMEEKKzoxMDEyRTAwMDM2RTcwNEIwMDBDM0IwMDZDM0Y2MDY5MzM2ODA3NTAzMzQKKzoxMDEyRjAwMEIwMDFDMzI2ODM3RjA0MDE3NDBBMjY4MzdGMDQwMjc0MkQKKzoxMDEzMDAwMDE5QjAwNkMzMjY4MzdGMDYwQzc3RjYyNjgzN0YwQTYwMTIKKzoxMDEzMTAwMDc3RUZFODEwMDA3MjBCQjA0NkMzRTg0RTAwNzIwM0IwREUKKzoxMDEzMjAwMDQ2QzNCMDAwQzM1MUIxMEE4QjNFMjBGMzI2ODM3RDBDMjcKKzoxMDEzMzAwMDAyNzUwM0U5MEUwMEZFQzk3NDA3ODFDNzIwMDFFOUVCQkQKKzoxMDEzNDAwMEZGNTlGOEMzNTc4RDdEMEU4RDc3MDZCOTEyMDBGM0E0QUYKKzoxMDEzNTAwMDhEN0QyMDhEMzZFMEZFMjY4QjREMTJGM0E0RkYwNjAxMTUKKzoxMDEzNjAwMDM1NUYyNkM3NDUwQzAxMDA1OUY5QzM1MUIxMEE4RDNFQkUKKzoxMDEzNzAwMDIwRjM4RDM2RTBGRTI2ODM3RDBDMDE3NTFCNTdFODI1OTIKKzoxMDEzODAwMDAwNUY3MzE0MzNDMEI5MjAwMUYzQUEyNkM3NDUwQzAyQ0QKKzoxMDEzOTAwMDAwRkYwRTAxMzU1OUY5QzNGRUM5NzQwNzgxQzcyMDAxNEEKKzoxMDEzQTAwMEU5RDNGRjU5RjhDMzUxMjY4QjREMTI4RDdEMjBGM0E2NEEKKzoxMDEzQjAwMDc0MDM1OUY4QzM1OUY5QzMwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDEzQzAwMDgwM0VFQzM0MDY3MjMzRkYwNkYwMzM1MEM0MUU4QzM2NzgKKzoxMDEzRDAwMEI5MEYwMDMzQzBFODI5MDA1ODgxMjZDMjM0REY3RjgxNkQKKzoxMDEzRTAwMDI2RTkzNERGN0YwQkRCNzQxMTI2QzYwNzg0MjZDNjQ3NDcKKzoxMDEzRjAwMDAyRkYyNjg5NDcwNkU4QUMwMEMzRkYwNkVBMzNFOUY1OTkKKzoxMDE0MDAwMEZGNTcyNjhCM0YwM0Y5MjYzQjdGMDI3NDE2MjYzQjdGNEUKKzoxMDE0MTAwMDA0N0MyQTNEMDAwMDc1MTM4RDdGMDgwM0Y5MjYzQjdGNkQKKzoxMDE0MjAwMDAyN0MxNEZGMDZERTMzMzNEQjVGQzMyNjhCN0YwMjI2OEMKKzoxMDE0MzAwMDg5M0YwM0Y5RTkwNjAwMjY4OTNGMjYyOTBGMjZDNzA1QkIKKzoxMDE0NDAwMEZGRkYyNjg3M0YyNjg5MEQ4RDVEMDI1MDhCRkI4M0U5QzgKKzoxMDE0NTAwMDAyMzNDMEYzQUE1OEZFMEVFQzM0NUZDMzhCN0MwMjNCMTAKKzoxMDE0NjAwMDNDNzQyRjgzM0RGRjc1MEI4RDdDMDg4OTdDMDI4MzNEODYKKzoxMDE0NzAwMEZGNzQxRThBNDUwMjNDODE3NTBDODAzRUVCMzQwMDc0N0IKKzoxMDE0ODAwMDA1MzNDMEU5MEIwMDhCMEQwMTRDMDI4RDc1MDI4M0U5MTkKKzoxMDE0OTAwMDAyQzM4MDNFRUMzNDA2NzIwNTMzQzBFOUYzRkZGRjA2NTkKKzoxMDE0QTAwMEVFMzNFOUJFRkZGNjA2OTIzNjQwNzQwMUMzNTc1NjUxM0IKKzoxMDE0QjAwMDUyOEIzNjhDMzZFOEE0RkY3NTAzRTkxQTAwRTkxQzAwNEMKKzoxMDE0QzAwMEZFMDZFQzM0QzQzRTgwMzZGM0E0ODAwRTkyMzY0MEJBNTkKKzoxMDE0RDAwMDBDMDFCODgwODBFRkVENUE1OTVFNUZDM0ZGMDZFMDMzMjAKKzoxMDE0RTAwMDgwM0M4MTc1MENGRjA2RTIzM0M2MDZFQjM0MDFFOUNGODAKKzoxMDE0RjAwMEZGODAzQzg0NzUwN0ZGMDZFNjMzRTlDM0ZGRkYwNkU4N0IKKzoxMDE1MDAwMDMzRTlCQ0ZGOEQzRUUwRkVBMTcyMzRDNzA2NzIzNDAwQTEKKzoxMDE1MTAwMDAwODkwNUExNzQzNEM3MDY3NDM0MDAwMDg5NDUwMkJBRjUKKzoxMDE1MjAwMDA0MDFFRDg5NDUwNEM3NDUwNjAwMDBBMTZFMzRDNzA2RDUKKzoxMDE1MzAwMDZFMzQwMDAwODk0NTA4QTE3MDM0QzcwNjcwMzQwMDAwN0QKKzoxMDE1NDAwMDg5NDUwQUJBMDAwMUVEODk0NTBDQzc0NTBFMDAwMDMyRjUKKzoxMDE1NTAwMEU0QkEwRTAxRUM4OTQ1MTBBMTdFMzRDNzA2N0UzNDAwNDIKKzoxMDE1NjAwMDAwODk0NTEyQTE4QzM0QzcwNjhDMzQwMDAwODk0NTE0Q0IKKzoxMDE1NzAwMEExOEEzNEM3MDY4QTM0MDAwMDg5NDUxNkExN0MzNEM3ODUKKzoxMDE1ODAwMDA2N0MzNDAwMDA4OTQ1MThBMTg4MzRDNzA2ODgzNDAwRDkKKzoxMDE1OTAwMDAwODk0NTFBQTFDQTMzQzcwNkNBMzMwMDAwODk0NTFDMTEKKzoxMDE1QTAwMEExNzgzNEM3MDY3ODM0MDAwMDg5NDUxRUExQzYzNEM3MjcKKzoxMDE1QjAwMDA2QzYzNDAwMDA4OTQ1MjBDMzAwMDAwMDAwMDAwMDAwN0EKKzoxMDE1QzAwMEZBMzNDMDhFRDg4RUMwQjhBMDAxQzFFODA0OEVEMDhEODkKKzoxMDE1RDAwMDI2ODAwMEU4MDAwMUU4MTBFQjhCMUVGNzM0OEIxNkY5MkIKKzoxMDE1RTAwMDM0OEIzNkZGMzQzM0MwQjlFRkZGOEQzRTE0MDAyQkNGNjAKKzoxMDE1RjAwMDJCQ0VEMUU5RjNBQjg5MUVGNzM0ODkxNkY5MzQ4M0ZFN0IKKzoxMDE2MDAwMDAwNzQwQ0I5RUZGRkJGODBGRTJCQ0ZEMUU5RjNBQkI5NkIKKzoxMDE2MTAwMEZGRkY4MUU5MDAzQjgzRkUwMDc0MDNFOTFCMDA1MTFFQkMKKzoxMDE2MjAwMEI4MDBFMDhFRDgzM0Y2OEQzRTAwRDhCOTAwMENGM0E1OTMKKzoxMDE2MzAwMDFGNTlCRUZGRkY4MUVFMDBEODJCQ0U4MUUxMDBGRjg5NEMKKzoxMDE2NDAwMDBFQUMzMzhEMDYyMDAyQzFFODA0QTMzMjM0OEVEMDM2QUUKKzoxMDE2NTAwMEM3MDYxRTAwODAxODM2QzcwNjIyMDBGRjdGMzZDNzA2NjEKKzoxMDE2NjAwMDBBMDBGRkZGMzZDNzA2MUMwMDgwMDA4RDA2QTAwMkMxREQKKzoxMDE2NzAwMEU4MDRBMzMwMzQ4RUQwMzZDNzA2MUUwMDUwMjgzNkM3ODMKKzoxMDE2ODAwMDA2MEEwMEZGRkYzNkM3MDYxQzAwODAwMEI4QTAwMUMxOTMKKzoxMDE2OTAwMEU4MDRBMzM0MzRBM0YyMzM4RUQwOEQyNjgwMDBCODAwNDIKKzoxMDE2QTAwMDkwRTcwMjhEM0U3MDAxOEJDN0MxRTgwNEI5MDMwMDg5NDEKKzoxMDE2QjAwMDQ1MEU4OTQ1MDJDNzA1RkZGRjgzQzcxMDA1MDEwMEUyRkIKKzoxMDE2QzAwMEVFRTg1QjAxRTVDRUEzQjUzNkU4MjEwMEU4NDUwMUExQ0YKKzoxMDE2RDAwMDMyMzQ4Q0NCQ0QzNzBFNThBOTAwRjA3NDA3MzNGNjg5MUQKKzoxMDE2RTAwMDM2RkYzNEMzOEQzNjMwNjE4OTM2RkYzNEMzMzNDMDhCNDcKKzoxMDE2RjAwMEQwOEJGMkI5NjgwMDJFODBCQ0FDMTc4MDc1MDFFRjgzRTcKKzoxMDE3MDAwMEMyMDI0NkUyRjFCODAyMDBFNzUwQjk1QTAwMzNGRkM3RkYKKzoxMDE3MTAwMDA1NjUxODhDNEQwMjgzQzcwNEUyRjQzM0MwOEVDMDhDN0IKKzoxMDE3MjAwMEM4OEVEODhEM0U4MDAwOEQzNjlDMTdCOTA4MDBFODM3RUEKKzoxMDE3MzAwMDAwOEQzNjIwMjE4RDNFQzAwMEI5MEQwMEU4MjkwMDhEQjYKKzoxMDE3NDAwMDNFNDAwMUI5MEEwMEU4MUYwMEU4NEIwRTMzQzA4RUQ4QjYKKzoxMDE3NTAwMEM3MDY0RTM3NkYxN0U3NDhFNzRDQjg0MDlDRTc0QUU1QTUKKzoxMDE3NjAwMDQ4OTBCODAwNzBFNzQ4QzNBNTgzQzcwMkUyRkFDM0U1MTIKKzoxMDE3NzAwMDRDQzM1MDUxNTY1NzUyMDYxRTMzQzA4RUQ4RTU1OEQxMkYKKzoxMDE3ODAwMEUwNzMxMThCRjBEMUU2MzNDMDhFRDg4QkI0ODAwMDgzMjgKKzoxMDE3OTAwMEM2MEJGRkU2MUYwNzVBNUY1RTU5NThDRjU4MUNFNDFDNjIKKzoxMDE3QTAwMDZDMUM4RTFBQzAxRjQwMUE0NDFDNjUxODgwODA4MEZGNzQKKzoxMDE3QjAwMDgwMDMwMjgwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzAKKzoxMDE3QzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjkKKzoxMDE3RDAwMDgwMDMwMzQzODA4MDAyODA0MjAzMDJGRjAzMDEwMzAxNzAKKzoxMDE3RTAwMDAxMDMwMjAzRkZGRkZGRkZGRkZGRkZGRjAyMDMwMTAzRUYKKzoxMDE3RjAwMDAzRkYwMTAxRkYwMUZGMDEwMTAzMDMwM0ZGRkZGRkZGREYKKzoxMDE4MDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTgKKzoxMDE4MTAwMEZGRkZGRjAyQjgwRjAwRTc4NEI4MEZGOEU3ODJDM0I5RjMKKzoxMDE4MjAwMDA4MDA4OTBFRTYzQThEMDYyMDAzOEJEMEMxRTgwNEEzOTgKKzoxMDE4MzAwMDkwMDE4QkMyOEJEOEMxRTgwNDhFQzAwNTYxMDAyNkEzM0QKKzoxMDE4NDAwMDAwMDBBMTMwMzQyNkEzMDIwMDgzQzMxNEQxRUIyNjg5MDMKKzoxMDE4NTAwMDFFMDgwMDgxQzIxMDA2RTJEOTI2QzcwNjAwMDBGRkZGNUQKKzoxMDE4NjAwMDhDMDY5MjAxQzM1MDUxNTY1NzUyMDYxRTMzQzA4RUQ4NzMKKzoxMDE4NzAwMEU3NUFGRjA2QkUzM0JBRDIwMEVEQ0YwMDAwMDAwMDAwRTkKKzoxMDE4ODAwMDhDQ0JBMTMwMzRDRDM3RTkwNkVEQjgzMjAwQzNFODhDRkIKKzoxMDE4OTAwMDAxRkUwNkUyMzRFODIxMDE3NUYwRTg1MzBFODEwRUFGMzcKKzoxMDE4QTAwMDM2MDBDMEM3MDZBRDM2NjAwMEY3MDZFNjM0ODAwMDc1MjYKKzoxMDE4QjAwMDFBRjcwNkU2MzQwMDA4NzQwOUM3MDZBQjM2MEIwMEU5RDAKKzoxMDE4QzAwMDBGMDBDNzA2QUIzNjAzMDBFOTA2MDBDNzA2QUIzNjExQUEKKzoxMDE4RDAwMDlDQzcwNkE5MzYxODAwRjcwNkU2MzQ4MDAwNzUwREY3OTgKKzoxMDE4RTAwMDA2QjUzNjAyMDA3NDA1ODMwRUE5MzYyMEExQTkzNkU3OTUKKzoxMDE4RjAwMDAwQTFBQjM2RTcwMkY3MDZFNjM0ODAwMDc0MkVFOEYyNkEKKzoxMDE5MDAwMDJGMzNDMDBENDEwMEU3NTZBMUIxMzYwRDAwMTBFNzA4OTYKKzoxMDE5MTAwMEExQjMzNkU3MEFBMUFGMzZFNzA2Qjg0MDAwRTc0RTMzNzkKKzoxMDE5MjAwMEMwRTcwRUM3MDYyNjAyMDAwMEU5MjMwMEM3MDY0RTM3QUYKKzoxMDE5MzAwMDNGMjA4RTA2MzAzNDI2RjcwNjBBMDAwMDgwNzQwNzI2MDIKKzoxMDE5NDAwMDgxMEUwODAwMDA4MEM2MDZFMDM0MDFCODAwMDBDM0ZFMjYKKzoxMDE5NTAwMDA2RTEzNEM2MDZFMDM0MDBBMTI2MDIwQkMwNzQwMUMzQzAKKzoxMDE5NjAwMEU4MDQwMEI4MDAwMEMzQTFBOTM2RTcwMDhCMUVBQjM2MUYKKzoxMDE5NzAwMDgzRTMwNkU1MDIyNUY5RkYwQkMzMEQxMDAwRTcwMkExODIKKzoxMDE5ODAwMEFEMzZFNzA0QzNCODBBMDBFNzg0RkUwNkU1MzRDNjA2QjAKKzoxMDE5OTAwMEUzMzQwMThFMDYzMDM0MjZGNzA2MEEwMDAwNDA3NDA3NEYKKzoxMDE5QTAwMDI2ODEwRTA4MDAwMDQwQzNDNzA2NEUzNzZGMTdGRTA2OUIKKzoxMDE5QjAwMEU0MzRDNjA2RTMzNDAwQzNDM0Y2MDYxODM0ODA3NTBENUMKKzoxMDE5QzAwMEExMTgzNDBCMDYxQTM0MEIwNjFDMzQ3NTAxQzNBMTJFNjIKKzoxMDE5RDAwMDM0MjVGRkZFOEIxNkU3MzY4MUUyMDAwMTBCQzJBMzJFRjEKKzoxMDE5RTAwMDM0OEQxNjEwMDBCRjAwMDBCOTA4MDA4Qjg1MDAzNEVGNUQKKzoxMDE5RjAwMDgzQzIxMDhCODUwMjM0RUY4M0MyMTA4Qjg1MDQzNEVGRDEKKzoxMDFBMDAwMDgzQzJFMjgzQzcwNjQ5NzVFMkI4MDAwMDhFQzBCRTAwRkIKKzoxMDFBMTAwMDM0QkZCOTM2QjkxODAwRjNBNUI4MDAwMEMzMzNDMDhFN0YKKzoxMDFBMjAwMEMwOEQzRUIwMzNCOTA4MDBGM0FCOEQzRTNFMzRCOTAzRjAKKzoxMDFBMzAwMDAwRjNBQkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDFBNDAwMDUwNTE1NjU3NTIwNjFFMzNDMDhFRDhFNzVBRkYwNkJBNzkKKzoxMDFBNTAwMDMzRTU1NjBEMjAwMEU3NTZCQTdBMDBFRDA4MjY5NDM2OTUKKzoxMDFBNjAwMDMzQzBCMTA4MzJFRDA2OEVDMDhEM0VFMEZGRjNBQThFODIKKzoxMDFBNzAwMDA2MzIzNDI2ODEwRTA4MDAwMDAyMDdFNTU2MjVERkZGRjYKKzoxMDFBODAwMEU3NTZFOUY4RkMwMEJEMUIxMDFCRDkxQUYzMUE1MDUxOTgKKzoxMDFBOTAwMDU2NTc1MjA2MUUzM0MwOEVEOEU3NUFGRjA2QjYzMzUzNDgKKzoxMDFBQTAwMDA2NTFFNTgwQTNCNDMzOEJEODhCQzgyNTEwMDBBM0VENzUKKzoxMDFBQjAwMDM0MEJDMDc0MTRGRjA2ODAzNDgwM0VGRTM0MDA3NDAzN0YKKzoxMDFBQzAwMEU5MDYwMEI4ODAwMEU4OUQwNDgzRTMwM0QxRTMyRUZGMUMKKzoxMDFBRDAwMDk3ODYxQTU5MDc1QkU5QTRGQ0JBMjAwMDhFMDYzQzM0QUQKKzoxMDFBRTAwMDgzM0UzQzM0MDA3NTAzRTlGMDAwQzcwNjNDMzQwMDAwMzcKKzoxMDFBRjAwMEU5MkEwMEJBMTAwMDhFMDYzQTM0ODMzRTNBMzQwMDc1NjMKKzoxMDFCMDAwMDAzRTlENUZGQzcwNjNBMzQwMDAwRTgxMDAwRTlDOUZGMzEKKzoxMDFCMTAwMEJBMTAwMDhFMDYzQTM0QzcwNjNBMzQwMDAwMjZBMTE0RTMKKzoxMDFCMjAwMDAwMjZBMzBDMDAyNkExMTYwMDI2QTMwRTAwMjZDNjA2M0EKKzoxMDFCMzAwMDBBMDAwMEMxRUEwMjIzRDE3NDFDQkEyMDAwMjZDNzA2OUQKKzoxMDFCNDAwMDBFMDBFQTA1MjYwQjE2MEMwMDI2ODkxNjBDMDBGRjA2NkYKKzoxMDFCNTAwMDg2MzRGRjA2REMzMzI2QTEwQzAwQTkwMDM3NzQxNjI2NTQKKzoxMDFCNjAwMEM2MDYwQTAwMDJBOTAwMzA3NDA0RkYwNjdBMzRGRjA2OTQKKzoxMDFCNzAwMERBMzNFOTQ5MDBDMEVDMDc4MzE2OEEzNDAwMjQwNzNDQjUKKzoxMDFCODAwMDA3NzUwNEZGMDY4QzM0RkYwNjdFMzRBMTMwMzQ4Q0MzMDUKKzoxMDFCOTAwMDhFQzA4RURCMjY4MzBFMDgwMDQwOENEODI2ODcwNjE2NjIKKzoxMDFCQTAwMDAwMjY4MzNFMTQwMEZGNzQwQThFQzAyNjhDMUUwMDAwOUYKKzoxMDFCQjAwMEU5MDUwMDI2OEMxRTE0MDAzM0MwOEVEOEMzQzM4Q0MwMjgKKzoxMDFCQzAwMDg3MDY5MjAxM0RGRkZGNzQwRDhFRDg4QzA2MDAwMDMzMEUKKzoxMDFCRDAwMEMwOEVEOEU5MDQwMDhDMDY5MDAxRTgwMTAwQzMwNjgzOUEKKzoxMDFCRTAwMDNFOTAwMUZGNzQyOTgzM0UzQTM0MDA3NTExQkE4NjAwOTUKKzoxMDFCRjAwMEU4MUUwMDhDMDYzQTM0ODMzRTkwMDFGRjc0MTE4MzNFNDgKKzoxMDFDMDAwMDNDMzQwMDc1MEFCQTg4MDBFODA2MDA4QzA2M0MzNDA3QUMKKzoxMDFDMTAwMEMzQTE5MDAxOEVDMDI2QTEwODAwRUYyNkExMDAwMDI2RDYKKzoxMDFDMjAwMEM3MDYwMDAwRkZGRkEzOTAwMTNERkZGRjc1MDNBMzkyQ0QKKzoxMDFDMzAwMDAxODMzRUVEMzQwMDc0MEJCODEwMDBFNzg0QzcwNkVENTUKKzoxMDFDNDAwMDM0MDAwMEMzNTA1MTU2NTc1MjA2MUUzM0MwOEVEOEU3OTkKKzoxMDFDNTAwMDVBRkYwNkJDMzNFOTI1RkI1MDUxNTY1NzUyMDYxRTMzMzYKKzoxMDFDNjAwMEMwOEVEOEU3NUFGRjA2QjAzM0U5MTFGQjUwNTE1NjU3RTIKKzoxMDFDNzAwMDUyMDYxRTMzQzA4RUQ4RTc1QUZGMDZCNDMzMDZGRjA2NUQKKzoxMDFDODAwMDc2MzQ4MDNFRkUzNDAwNzQwNDA3RTlGMEZBQjg4MDAwMzAKKzoxMDFDOTAwMEU4RDMwMjA3RTlFNkZBMDAwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMDFDQTAwMEM2MUQwODFEOTExRTVEMUU3MzFFODkxRTkxMUVBODFENTYKKzoxMDFDQjAwMDkxMUU5MTFFQUYxRUFGMUUxNTFEMTUxRDkxMUU5OTFGNjEKKzoxMDFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDIwMDAwMEUKKzoxMDFDRDAwMDAwMDEwMDEwMDAwMTAwNDAwMDAwMDAwMDAwMDEwMDAwQjEKKzoxMDFDRTAwMDA3RTk5OUZBNTA1MTU2NTc1MjA2MUUzM0MwOEVEOEU3NkQKKzoxMDFDRjAwMDVBRkYwNkIyMzMwNjY4RjYxQ0U1MDZBM0IyMzM4QkYwMzIKKzoxMDFEMDAwMDgzRTYxRTJFRkZBNEEwMUNFNTBDQTk4MDAwNzQwNkU4NDMKKzoxMDFEMTAwMEE0MDFFNTA2QzM1M0U1MEM4QkQ4QTkwMTAwNzQxNDgzMTQKKzoxMDFEMjAwMDNFRTAzQTAwNzQwRDhFMDYzODM0RThCRjA2QzcwNkUwODAKKzoxMDFEMzAwMDNBMDAwMEU1MDAwRDE4MDBFNzAwRTUwMjBEMTEwMEU3OEMKKzoxMDFENDAwMDAyOEJDMzVCQTkwMTAwNzQwMUMzOEJEMEI4MDAwOEU3MDQKKzoxMDFENTAwMDg0OEJDMjhFMDYzODM0MjZBMzBDMDA4QkQwQzFFMDAzREUKKzoxMDFENjAwMDgzMTY4ODM0MDBGRjA2N0MzNDI2ODMzRTA2MDAwQTc1RkQKKzoxMDFENzAwMDIxOEJDMjI1NDAxODNENDAwMDc0MEMzRDAwMTA3NTEyQTcKKzoxMDFEODAwMDI2RkUwRTBBMDA3NDBCRjcwNkVGMzQyMDAwNzUwM0U5RjcKKzoxMDFEOTAwMDVBMDY4Q0MwMjY4RTA2MDIwMDI2ODMwRTA4MDAyMDI2RDYKKzoxMDFEQTAwMEEzMTIwMDI2QTMxMDAwQzNGRjA2QzQzM0U1MENBOTAxNEIKKzoxMDFEQjAwMDAwNzUwMUMzQTlGMDA3NzQwMUMzRkYwNkQ0MzNFNTAwMjEKKzoxMDFEQzAwMDBEMTgwMEU3MDBDM0ZGMDZDQTMzODAzRUEwMzYwODc1MzEKKzoxMDFERDAwMDE0OEUwNjMwMzQyNkY3MDYwQTAwMDAwODc0MDcyNjgxQTAKKzoxMDFERTAwMDBFMDgwMDAwMDhFNTgyMjVGREZGRTc4MkU1MEM1MEU1QkUKKzoxMDFERjAwMDgwMjUwMDA3QTNFNDNBRTU4QzI1MDA4MEEzRTIzQTU4NDkKKzoxMDFFMDAwMEE5MDIwMDc1MjU4MzNFRTIzQTAwNzUxRTgzM0VFNDNBM0UKKzoxMDFFMTAwMDAwNzUxN0U1MDgwRDAwMDQyNUZGMDRFNzA4RTg2QTAxQ0UKKzoxMDFFMjAwMEU1ODIwRDAyMDBFNzgyRTkyMTAwRTgxQTA2ODAzRUU4MUIKKzoxMDFFMzAwMEZGMDA3NDBBODAzRUU4RkYwNDc0MDNFOTBEMDBDNjA2NDMKKzoxMDFFNDAwMEU4RkYwMUJBMEMwMUI4MDgwOEVGRUQ4MDNFOUYzNjA2QTYKKzoxMDFFNTAwMDc1MDU4MzBFOTkzNjQwQjgwMDAxRTkwOTAxRkYwNkNDRUIKKzoxMDFFNjAwMDMzODEyNkFGMzZGRkY3QTFBRjM2RTcwNkZGMDZDNjM0NEIKKzoxMDFFNzAwMEU5MUUwMEZGMDZDRTMzRkYwNjk1Mzc4MTI2QUYzNkZGRjkKKzoxMDFFODAwMEVGQTFBRjM2RTcwNkU5MDgwMEZGMDZEMDMzRkYwNjdBNzgKKzoxMDFFOTAwMDM0RkYwNkQyMzNEMUU2OEUwNjMwMzQyRThCODRDMDFDM0MKKzoxMDFFQTAwMDI2MDkwNjA4MDAyRThCODRDMjFDMDkwNjY2MzdDM0U1ODYKKzoxMDFFQjAwMDBDQTk4MDAwNzQ1NjUwRThGMDAwNThBOTAwMDE3NTA3N0QKKzoxMDFFQzAwMEZGMDZDNjMzRTkwODAwRkYwNjc4MzRGRjA2QzgzM0U1OEQKKzoxMDFFRDAwMDgyMjVGREZGRTc4MkU4NkUwNUJBMTAwMUVEODAzRUU4M0QKKzoxMDFFRTAwMEZGMDA3NDBBODAzRUU4RkYwNDc0MDNFOTFEMDBDNjA2ODMKKzoxMDFFRjAwMEU4RkYwMUJBMEMwMUI4MDgwOEVGRURFOTBEMDBDNjA2Q0QKKzoxMDFGMDAwMEU4RkYwM0JBMEMwMUI4MDgwOEVGRURDM0E5MDEwMDc0OUIKKzoxMDFGMTAwMDFDRTgyQzAwODMzRUUwM0EwMDc0MEYwNjhFMDYzODM0MkQKKzoxMDFGMjAwMEU4QzkwNEM3MDZFMDNBMDAwMDA3RTk1RDAwOEJEMDhFREYKKzoxMDFGMzAwMDA2MzgzNDI2QTMwQzAwRTgwNjAwNjg2OTFERTk0QTAwNEIKKzoxMDFGNDAwMEE5MDAwNDc0MEFCODAwMDRGRjA2RDgzM0U5MTcwMEE5RjEKKzoxMDFGNTAwMDAwMDE3NDBBRkYwNjM5MzdCODAwMDFFOTA4MDBBOTEwMkEKKzoxMDFGNjAwMDAwQjgxMDAwNzQxRDA5MDY2NjM3OENDMDhFMDYzMDM0MjgKKzoxMDFGNzAwMDI2RjcwNjBBMDAwMDAxNzQwNzI2ODEwRTA4MDAwMDAxRkEKKzoxMDFGODAwMDhFQzBDM0ZGMDZDMjMzRTlGOEZGRTUwMDBEMTgwMEU3NzUKKzoxMDFGOTAwMDAwRTUwMjBEMTEwMEU3MDJDMzU4RTk0M0ZERTUwODBEMTUKKzoxMDFGQTAwMDAwMDQyNUZGMDRFNzA4RTlFMEZGRTUwRUE5MDAwODc1MzUKKzoxMDFGQjAwMDAxQzNFOUY1RkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDFGQzAwMDUwNTE1NjU3NTIwNjFFMzNDMDhFRDhFNzVBRkYwNkI4RjYKKzoxMDFGRDAwMDMzRTU0ODA2NTM1N0ZGMTY0RTM3NUY1QjgzM0U4MDAxNUIKKzoxMDFGRTAwMEZGNzQ1ODhFMDY4MDAxMjZGRjBFMDgwMDc1NEQyNkExNEQKKzoxMDFGRjAwMDAwMDBBMzgwMDEyNkM3MDYwMDAwRkZGRjhDQzAyNjhFQ0MKKzoxMDIwMDAwMDA2MDIwMDI2ODEwRTA4MDA4MDAwOEJEMDI2ODcwNjFBNjMKKzoxMDIwMTAwMDAwMjY4MzNFMTgwMEZGNzQwQThFQzAyNjg5MTYwMDAwMzEKKzoxMDIwMjAwMEU5MDUwMDI2ODkxNjE4MDA4MzNFODAwMUZGNzQwQzhFOTYKKzoxMDIwMzAwMDA2ODAwMTI2ODMzRTA4MDAwMDc0QjMwN0U5M0VGN0U1RjkKKzoxMDIwNDAwMDRDOTBFNTAyQTkwMDIwNzQwRDI1RkZERjBEMDEwMEU3OEIKKzoxMDIwNTAwMDAyMEQwMDIwRTcwMkU1MEE4QkQ4QTNGNDMzMjVDMzU3MEQKKzoxMDIwNjAwMDBEMDAxMEU3MEFGNzA2OUIzNjAwODA3NDM3RjdDMzAwQUYKKzoxMDIwNzAwMDgwNzQwNkY3QzMwMDA4NzQ1RDgxMjZDMjM0N0ZGRkM3RjEKKzoxMDIwODAwMDA2MzUzNzA1MDBCODgwMDNDRDM5ODEyNjlCMzZGRjdGQTIKKzoxMDIwOTAwMEM3MDYwRjM3MDQwMEY3MDY5QjM2NDAwMDc1MDZDNzA2RDMKKzoxMDIwQTAwMDBGMzcwMzAwRjcwNjlCMzYwMDIwNzQyQUY3QzMwMDA4OTkKKzoxMDIwQjAwMDc0MjQ4MDNFOUQzNjA2N0MxREZGMDY5NDM0ODMwRTY2OTQKKzoxMDIwQzAwMDM3MjA4RTA2MzAzNDI2RjcwNjBBMDAwMDAxNzQwNzI2RjIKKzoxMDIwRDAwMDgxMEUwODAwMDAwMUY3QzMwMDIwNzUzQkY3MDY5QTM3MTAKKzoxMDIwRTAwMDgwMDA3NDBCRkYwNjg5MzczM0MwRTcwRUU5MDQwMEZGNTgKKzoxMDIwRjAwMDA2M0IzN0Y3MDY5QjM2MDAyMDc0MUM4MDI2OUUzNkZGNzEKKzoxMDIxMDAwMDc1MTU4RTA2MzAzNDI2RjcwNjBBMDAwMDA4NzQwNzI2NzcKKzoxMDIxMTAwMDgxMEUwODAwMDAwOEMzQzMwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMDIxMjAwMDAyMjMwMjIzMDIyMzAyMjMwMzIzREQyMjAyMjNGRDIxQjMKKzoxMDIxMzAwMDAyMjNBNDI0RjMyNDAyMjM4RDIyN0EyMzAyMjM5NzI0NEEKKzoxMDIxNDAwMDFCMjQ3NTI0MDIyMzAyMjM4RTI1RkI4RTA2N0UwMUZCQjEKKzoxMDIxNTAwMDI2ODMzRTAwMDBGRjc0RjIyNjhFMDYwMDAwRkEyNjhCQ0UKKzoxMDIxNjAwMDFFMDgwMDI2MjMxRTBBMDA3NEU1OENDMDhFRDAyNjhCMjQKKzoxMDIxNzAwMDI2MDIwMDhDMTZGMjMzMjJGRjc1NkEyNkExMUMwMDhBMDMKKzoxMDIxODAwMEUzOEFEQzIyRDg3NTBERDBFODI0RjgwQUMwNzVGMkIwRDUKKzoxMDIxOTAwMDgwRTlFREZGRDBFODI0RjgwQUMwNzUwMkIwODAzMkU0OEYKKzoxMDIxQTAwMDI2QTMxQzAwRjdDMzA4MDA3NTQ3MkU4QTlGQzUyNTJFNUQKKzoxMDIxQjAwMDhCQkZDNTI2ODBDMzEwMjY4RTFEMjY4QzFFMDYwMDhCNjUKKzoxMDIxQzAwMDE2MDAwMEM3MDYwMDAwRkZGRjI2ODkxNTgzRkFGRjc1NzkKKzoxMDIxRDAwMDBBMkU4Qjk3Q0QyNjI2MjExNjA4MDAzM0MwOEVEODI2Q0UKKzoxMDIxRTAwMDg5MUUwNDAwQzM4QURGQjcwMDJFOEE5RkM1MjVFOUUwNTcKKzoxMDIxRjAwMEZGMjY4MzI2MDgwMEY3ODNDMzEwRTlERUZGNjAwNjFFNzIKKzoxMDIyMDAwMDY4ODcyNTZBMDAxRjhFMDZGMjMzOEIwRTM0MzQzOTBFMzAKKzoxMDIyMTAwMEYyMzM3NDBFMjY4MTBFMEEwMDAwMDIyNjgxMEUwODAwOTkKKzoxMDIyMjAwMDAwMDIyNjg5MjYwMjAwQTNGMjMzOEVEMDhEMjY4MDAwN0MKKzoxMDIyMzAwMDM2ODkyNjAyMDAzNjg5MUUyMDAwMzZDNzA2MDgwMDAwQUYKKzoxMDIyNDAwMDAwQjkwNDAwQkUwMDAwMkU4QkJDQzUyNjM2QzcwNUZGQjIKKzoxMDIyNTAwMEZGMzZDNzQ1MDJGRkZGODNDNjAyRTJFQjhFMDY3RTAxMTIKKzoxMDIyNjAwMDM2OEIwRTIyMDA4Q0MwMjY4MzNFMDAwMEZGMjY4RTA2OTEKKzoxMDIyNzAwMDAwMDA3NDA3MjYzQjBFMjIwMDdERUEzNjhDMDYwMDAwMjMKKzoxMDIyODAwMDhFQzAyNjhDMTYwMDAwRkIzNkZGMkUxRTAwMDYxRTY4MzAKKzoxMDIyOTAwMDhCMjU2QTAwMUYyNjA5MzYwODAwRjdDNjAwRkY3NDAxNjcKKzoxMDIyQTAwMEMzNTY1MjJFOEJCNEM1MjU4MUU2RkYwMDJFOEJCNEM1RDQKKzoxMDIyQjAwMDI2OENDMjhFQzAyNkM3MDYwMDAwRkZGRjhFQzIyNjgzNzIKKzoxMDIyQzAwMDNDRkY3NDBGOEJEMDI2ODc1NDAyOEVDMjI2QTMwMDAwRDkKKzoxMDIyRDAwMEU5MDcwMDI2ODk0NDAyMjY4OTA0NUE1RUMzMDYxRTY4NUYKKzoxMDIyRTAwMDhCMjU2QTAwMUY4RTA2RjIzMzI2QTMwQTAwMjY4OTI2NTQKKzoxMDIyRjAwMDAyMDBBMTM0MzQ4RUQwOEQyNjgwMDA4QzE2RjIzM0U5OTIKKzoxMDIzMDAwMDRERkVDRjUwMUU1MjUzMzNDMDhFRDgyNjgzM0UwNDAwNUMKKzoxMDIzMTAwMEZGMjZDNzA2MDQwMDAwMDA3NDAzRTkxQTAwODMzRUU2QTYKKzoxMDIzMjAwMDNBMDI3NjEzRkYwNkQ2MzM4Q0MwOEUwNjMyMzRCRTQwOTYKKzoxMDIzMzAwMDAwNjgzQTIzRTk1RUZGRTg4NEY4NUI1QTFGNThDRkU4NEIKKzoxMDIzNDAwMEUxMDAyNkM2MDYxODAwMTAyNjhBMUUyOTAwODgxRTFCREEKKzoxMDIzNTAwMDM3MjZDNzA2MEMwMEZGN0YyNkExMEUwMEU3OUMyNkExQUEKKzoxMDIzNjAwMDA4MDBFNzlBRTUwMDgwRkIwODc0MDkwRDE4QUNFNzAwNDcKKzoxMDIzNzAwMDA3MUY1OENGMEQxODAwRTlGNEZGNTAxRTA2MzNDMDhFMUEKKzoxMDIzODAwMEQ4ODMzRUExMzYwMDc1QjcyNjhCMzYwNjAwMkVGRjk0MDMKKzoxMDIzOTAwMERDMjMwNzFGNThDRkU4OEEwMEU1MDAwRDE4MDBFNzAwOEUKKzoxMDIzQTAwMEU4NDkwMEMzNTNGNzA2RUYzNDIwMDA3NTJERTU4QzI1NkUKKzoxMDIzQjAwMDAwNzA4QkQ4RTU4QzI1MDA3MDNCQzM3NDA1OEJEOEU5ODEKKzoxMDIzQzAwMEYyRkYzRDAwMzA3NTEwRTUwMjI1RUZGRkU3MDJDNzA2N0EKKzoxMDIzRDAwMEUwM0FGRkZGRTkwMzAwRTgxMjAwNUJDM0EzMjM5NjIzNjIKKzoxMDIzRTAwMEE0MjNBNDIzOTYyM0E0MjM5NjIzOTYyMzI2QTAyOTAwN0UKKzoxMDIzRjAwMEEyMUIzNzI2QzcwNjBDMDBGRjdGMjZBMTBFMDBFNzlDMTQKKzoxMDI0MDAwMDI2QTEwODAwRTc5QUU1MDAyNUZGNTMyNjhCMzYwNjAwMzMKKzoxMDI0MTAwMDgzRTYwRTJFMEI4NEFEMjVFNzAwQzMwNjFFNjg4QjI1RDAKKzoxMDI0MjAwMDZBMDAxRjgzMEVFRjM0MjA4MzBFOUIzNjA4RTUwMDI1REIKKzoxMDI0MzAwMEVGRkYwRDA4MDBFNzAwRTUwMEE5MTAwMDc1MDFDM0U1RjYKKzoxMDI0NDAwMDAwQTkxMDAwNzVGOUMzNTA1MzUxNTYwNjFFMzNDMDhFQjMKKzoxMDI0NTAwMEQ4QjgwNTAwRTc4NEU1MDgwRDAwMDQyNUZGMDRFNzA4NjcKKzoxMDI0NjAwMEU1MDAwRDE4MDBFNzAwRTUwMjBEMTEwMEU3MDIxRjA3NjcKKzoxMDI0NzAwMDVFNTk1QjU4QzM1MDFFMzNDMDhFRDhDNzA2RUYzNDAwNzgKKzoxMDI0ODAwMDAwODMyNjlCMzZGN0U1MDAwRDE4MDBFNzAwRTUwMjBERjYKKzoxMDI0OTAwMDExMDBFNzAyMUY1OENGNjAwNjFFNjg4NzI1NkEwMDFGREIKKzoxMDI0QTAwMEU4MTZGNUMzMDYxRTY4OEIyNTZBMDAxRjhFQzAyNjgzQkEKKzoxMDI0QjAwMDNFMEEwMDAwNzQwM0U4NDMwMDI2QzcwNjBBMDBGRkZGMzcKKzoxMDI0QzAwMDI2OEIxNjA2MDA4RTFFOEUwMThDRDg4QkNBODMzRTAwOEEKKzoxMDI0RDAwMDAwRkY4RTFFMDAwMDc0MEEyQjE2MDgwMDczRUIyOTBFRjUKKzoxMDI0RTAwMDA4MDAyNjg5MEUwODAwMjY4QzFFMDAwMDhFRDg4QzA2NTcKKzoxMDI0RjAwMDAwMDBDMzYwMDYxRTY4ODcyNTZBMDAxRjhFQzA4QkM4NTcKKzoxMDI1MDAwMDhFMUU4RTAxMjZDNzA2MEEwMDAwMDA4Q0Q4ODMzRTAwNkUKKzoxMDI1MTAwMDAwRkY3NDI1M0IwRTAwMDA4RTFFMDAwMDc1RUQ4RUQ4NjYKKzoxMDI1MjAwMDI2QTEwMDAwQTMwMDAwM0RGRkZGNzQ1NjhFRDgyNkExMEYKKzoxMDI1MzAwMDA4MDAwMTA2MDgwMEU5NDkwMDI2OEUxRTAyMDBCRTE4QTgKKzoxMDI1NDAwMDAwODMzQ0ZGNzQzQzM5MEM3NDE5OEUxQ0JFMDAwMDgzNjAKKzoxMDI1NTAwMDNFMDAwMEZGNzQyQzM5MEUwMDAwNzQwNzhFMUUwMDAwMzAKKzoxMDI1NjAwMEU5RUNGRjI2QTEwMDAwODkwNDMzQzk4RUQ5M0RGRkZGQTUKKzoxMDI1NzAwMDc1MTA4M0ZFMTg3NTBCMjY4RTFFMDIwMDgxMjYwODAwM0EKKzoxMDI1ODAwMDdGRkYzM0MwOEVEOEMzMUYwNzYxQ0YxRjA3Q0Y2MDA2MDAKKzoxMDI1OTAwMDFFNjg4NzI1NkEwMDFGRTUwNjI1MUUwMDNEMUUwMDc1ODIKKzoxMDI1QTAwMEY2QjkwODAwRTU1OEU3NUEyM0MwRTBGOEMzMDAwMDAwNzgKKzoxMDI1QjAwMDAwMDAwMDAwMDAwMEFDMDAwMDAwQTgwMDhDMDIwNDAwMzUKKzoxMDI1QzAwMDAwMDgxMDIwMDBGRjBFMEMwQzBBMEEwQTBBMDgwODA4NkUKKzoxMDI1RDAwMDA4MDgwODA4MDgwNjA2MDYwNjA2MDYwNjA2MDYwNjA2OTEKKzoxMDI1RTAwMDA2MDYwNjA2MDYwNDA0MDQwNDA0MDQwNDA0MDQwNDA0QTEKKzoxMDI1RjAwMDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0OUIKKzoxMDI2MDAwMDA0MDQwNDA0MDQwMjAyMDIwMjAyMDIwMjAyMDIwMjAyQTAKKzoxMDI2MTAwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyOUEKKzoxMDI2MjAwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyOEEKKzoxMDI2MzAwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyN0EKKzoxMDI2NDAwMDAyMDIwMjAyMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDI2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDI2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMDI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKKzoxMDI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMDI2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMDI2QzAwMDAwMDAwMDAwMDAxODAwMTQwMDEwMDAwQzAwRkY3RkZGNDUKKzoxMDI2RDAwMEJGRkZERkZGRUZGRkY3RkZGQkZGRkRGRkZFN0ZGRkJGNDkKKzoxMDI2RTAwMEZGREZGRkVGRkZGN0ZGRkJGRkZERkZGRUZGMDAwMDAwMzYKKzoxMDI2RjAwMDgwM0VFMjM0MDE3NjAzRTlBNTAwQjgwMDAwRTc0RUI5NTgKKzoxMDI3MDAwMDI4MDBFMkZFQzYwNjQ1MzcwMkJGM0YyODJFOEI0NTA4NEIKKzoxMDI3MTAwMEU3NEVCOTI4MDBFMkZFMkU4QjFEQzcwNkIzMzY0MDExRTYKKzoxMDI3MjAwMEM3MDZCMTM2MjcwMEM3MDY0NjM3MDIwMEM3MDY0ODM3MzYKKzoxMDI3MzAwMDY0MDBGNzA2QjUzNjAyMDA3NTFDMkUwQjVEMDI4MTI2N0IKKzoxMDI3NDAwMEIzMzZGRkZFQzcwNkIxMzY5QzAwQzcwNjQ2MzcwODAwMDEKKzoxMDI3NTAwMEM3MDY0ODM3OTAwMTg5MUVCNzM2ODkxRUZFMzNCRTIwNTIKKzoxMDI3NjAwMDAwOEJDM0U3NEVCOTI4MDBFMkZFMkU4QjQ1MDRFNzRFRUUKKzoxMDI3NzAwMEI5MjgwMEUyRkVFNTRFOEJDQjJFMjM0NTA2MkUyMzRERDUKKzoxMDI3ODAwMDA2M0FDMTc0MzY0RTc1RDk4MDNFNDUzNzAwNzQwQkM2ODMKKzoxMDI3OTAwMDA2NDUzNzAwQkYyRjI4RTk3MkZGQzYwNjQ1MzcwMUY3MDcKKzoxMDI3QTAwMDA2QjUzNjAyMDA3NDE0RTVDRTI1RkRGRkU3Q0VFODQzRkEKKzoxMDI3QjAwMDAwRTVDRTBEMDIwMEU3Q0VFODM5MDA4MDNFRTIzNDAxQUMKKzoxMDI3QzAwMDc2MDFDM0I4RUEwNUU3OENGQUU4MTJGNEZCOEQwNkQwNkYKKzoxMDI3RDAwMDM5OEJEOEMxRTgwNEEzMzgzNDhFQzBBMTMwMzQyNkEzODUKKzoxMDI3RTAwMDAyMDAyNkM3MDYwMDAwRkZGRjgzQzMxOEQxRUIyNjg5MkQKKzoxMDI3RjAwMDFFMDgwMEMzRTUwMjBEMDA0MEU3MDJFNTAwMEQwNDAwREQKKzoxMDI4MDAwMEU3MDBCODAwMDBFNzBBRTUwQUE5MDA4MDc1MTRFNTA4QUEKKzoxMDI4MTAwMDBEMDAxMEU3MDhFNTBBMEQwMDA4QjkwNTAwRTcwQUUyMTcKKzoxMDI4MjAwMEZDQzNFNTA4MEQwMDEwQjkwNTAwRTcwOEUyRkNDMzA0OEQKKzoxMDI4MzAwMDBDMjAwMDAxMEM3RUZGMDAwQzAyMDAxMDAwNDAwMDBDNzgKKzoxMDI4NDAwMEM2MDEwMDAwQzBGN0ZGMDBDMDAyMDAxMDAwNDAwMDAwRjkKKzoxMDI4NTAwMDMzQzA4RUQ4OEQzRTcyNDk4RDM2QjAzN0I5MTQwMDhCOTcKKzoxMDI4NjAwMDFFMzAzNDg5NUMwMjJFOEI0NTAyODk0NDA2MkU4QjA1NkUKKzoxMDI4NzAwMDg5NDQwNDgzQzcwNDgzQzYxMEUyRThDNjA2OUUzNjBFNjgKKzoxMDI4ODAwMEU4RkQyNjY4ODMyOEExQUEwMkNEMzU4MzNFQTEzNjAwNDMKKzoxMDI4OTAwMDc0MDNFOTNCMjczM0ZGOEUwNkE2MDI4QjM2QTQwMjJFNzMKKzoxMDI4QTAwMEZGQTQyRTMwODMwRTk5MzYwNEM3MDYzNzM3MDEwMEM2QzEKKzoxMDI4QjAwMDA2Q0EzNDAxRTk3RDE5ODAzRUEwMzYwODc0RTY4MDI2RjgKKzoxMDI4QzAwMDlFMzZGRjc1MUFGNzA2OUIzNjAwMjA3NDEyRjcwNjlCOUEKKzoxMDI4RDAwMDM2MDMwMDc1MEE4MzBFNjYzNzEwQzYwNkEwMzYwOEU5NkYKKzoxMDI4RTAwMEZCMDE4MDNFOUUzNjAyNzVDRUM2MDZBMDM2MDZFOUVDOTgKKzoxMDI4RjAwMDAxQzNFOUU4MDEyNkM3MDYwQTAwMDAwMDI2RkYyNjA0RjYKKzoxMDI5MDAwMDAwQTFEMTM2MjYzOTA2MUEwMDc1MjJBMUQzMzYyNjM5MDAKKzoxMDI5MTAwMDA2MUMwMDc1MThBMUQ1MzYyNjM5MDYxRTAwNzUwRTI2MzAKKzoxMDI5MjAwMEY3MDYwQzAwNDAwMDc0MDU4MzBFNjYzNzQwODEwRUFGMzkKKzoxMDI5MzAwMDM2MDAxMEExQUYzNkU3MDY4MDNFOUQzNjAyNzUwNkNEMDMKKzoxMDI5NDAwMDM0RTlBMjFBQzNGNzA2OUIzNjEwMDA3NTU0MjZGNjA2MjIKKzoxMDI5NTAwMDBBMDBGRjc1NEMyNkEwMTkwMDI0QzAzQzQwNzUxMTgwNjgKKzoxMDI5NjAwMDNFOTUzNjAwNzQzQjI2QzcwNjA0MDBGRkZGRTkzMTAwQTAKKzoxMDI5NzAwMEU4RjEwNEY3MDY5QjM2MDMwMDc0MkY4QkQ4Qjg3RDAzNkIKKzoxMDI5ODAwMENEM0E4QkMzQzYwNkEwMzYwNkY3MDY5QjM2MDIwMDc1MDUKKzoxMDI5OTAwMDA1QzYwNkEwMzYwNDgxMEU5QjM2ODAwMDgzMjY5QjM2MzIKKzoxMDI5QTAwMEZDRTkyMzAxRTg4NzFERTkzMzAxNTAyNkExMEMwMDI1MkQKKzoxMDI5QjAwMDA3MDAzRDA3MDA3NTAzRTk4NDAwM0QwNTAwNzUwM0U5NDQKKzoxMDI5QzAwMDdDMDA4MzNFRTgzQTA0NzQ3NTgzM0VFODNBMDI3NDZFRjQKKzoxMDI5RDAwMEY3MDZFNjM0MTg4MDc1MDNFOTZBMDBGNzA2RTYzNDAwNjYKKzoxMDI5RTAwMDgwNzQzNTI2ODAzRTI5MDAwMjc1MkQ1MTU2NTc4RDM2NEMKKzoxMDI5RjAwMDNFMzQ4RDNFMjAwMEI5MDYwMEYzQTY1RjVFNTk3NDQ1NTMKKzoxMDJBMDAwMDI2QTEyMDAwQTMzRTM0MjZBMTIyMDBBMzQwMzQyNkExMDMKKzoxMDJBMTAwMDI0MDBBMzQyMzRFOTI2MDBGNzA2RTYzNDA4MDA3NDBCQ0MKKzoxMDJBMjAwMDI2ODAzRTE5MDAwMDc0MDNFOTEzMDBGNzA2RTYzNDEwMEYKKzoxMDJBMzAwMDAwNzQxMjI2QTAyODAwQzBFODA0MjJDMDc0MDcyNkM3MkMKKzoxMDJBNDAwMDA2MDQwMEZGRkY1ODIzQzA3NDAzRTk1N0ZGODEyNjlCNEIKKzoxMDJBNTAwMDM2RkZGRTgzRkUwNjdGMjQyNkExMjAwMDNCMDZEMTM2RUEKKzoxMDJBNjAwMDc1MUEyNkExMjIwMDNCMDZEMzM2NzUxMDI2QTEyNDAwMzQKKzoxMDJBNzAwMDNCMDZENTM2NzUwNjgxMEU5QjM2MDAwMTI2QTEyMDAwNDcKKzoxMDJBODAwMDI1N0ZGRkEzQjgzNDI2QTEyMjAwQTNCQTM0MjZBMTI0QUYKKzoxMDJBOTAwMDAwQTNCQzM0OEJDNjg2QzRBM0MwMzREMUU2ODBGQzA5MzUKKzoxMDJBQTAwMDc0MDNFOEFBMUM4QkM2MkVGRkE0MzA0OTI2QTEwQzAwOTMKKzoxMDJBQjAwMDNERkY3Rjc0MEYyNkZGMjYwNDAwOEUwNjM4MzRFODM2NkIKKzoxMDJBQzAwMDA2Q0Q1MEMzRTkxNjAwQ0QzNEU5MTEwMENEMzQ4OTM2NjYKKzoxMDJBRDAwMDNEMzdBMTlEMzZBMzNGMzdDNjA2QTAzNjBDRTg4RTAwRDEKKzoxMDJBRTAwMEExOUYzNjIyRTQ3NTMyRjcwNjRDMzcwMTAwNzUyQUY2QUQKKzoxMDJBRjAwMDA2OUQzNjgwNzQwNzg4MjY5RTM2RTkzMTAwM0EwNjlEODkKKzoxMDJCMDAwMDM2QTM5RDM2NzQyODhCRjAyRUZGQTQwRDJCNDQyOUVFOUUKKzoxMDJCMTAwMDQyMTk0NENENDQyRjQ1NUE0NTNBMjY5RTM2NzUwMUMzODUKKzoxMDJCMjAwMDMyQzA4NkM0OEJGMEEyOUUzNjJFRkZBNDIwNDk4QjJFODUKKzoxMDJCMzAwMDk5MzYyM0VENzUwMUMzQkYwMTAwQkUwMDAwODVGRDc1MDgKKzoxMDJCNDAwMDFBNDZEMUU3RTlGNkZGMkEwMDI5MDAyODAwMjcwMDI1QzgKKzoxMDJCNTAwMDAwMDUwMDA3MDAyNjAwMDYwMDIwMDBGN0Q3MjEzRTk5NTcKKzoxMDJCNjAwMDM2RDFFNjJFOEJCNDQ3MkJFOTRGRkZFOTU2RkY4MDI2N0UKKzoxMDJCNzAwMDlFMzZGRjc1MTdGNzA2NEMzNzAxMDA3NTBGRjYwNjlENTgKKzoxMDJCODAwMDM2ODA3NDA4RjcwNjY2MzdGRkZGNzUwN0M3MDY2NjM3OTUKKzoxMDJCOTAwMDAwMDBDM0Y3MDY0MTM3MDEwMDc1MEJCODdGMDNDRDM5M0MKKzoxMDJCQTAwMEM3MDY0MTM3MDEwMDMzRjZCODAwNDA4NTA2NjYzNzc0MjIKKzoxMDJCQjAwMDIxODBCQzU0MzdGRjc0MDRGRTg0NTQzNzgwQkM5NjM0QTMKKzoxMDJCQzAwMEZGNzQwNEZFODQ5NjM0MzEwNjY2Mzc4MzNFNjYzNzAwMTAKKzoxMDJCRDAwMDc0MDU0NkQxRTg3M0Q0QzNBMUY0MzNBOTAwODg3NDBCRkIKKzoxMDJCRTAwMEE5MDAxMDc1MDk4QjFFNDMzN0ZGRTNFOUQ3MDBDNzA2MUMKKzoxMDJCRjAwMDM1MzcwNTAwQzcwNjQzMzcxRTJDRjcwNkY0MzMwMDA4QTcKKzoxMDJDMDAwMDc0MDZDNzA2NDMzNzEwMkNCODgwMDNDRDM5RTlDREZFRDIKKzoxMDJDMTAwMEE5MDAwODc0RDlGRjBFMzUzNzc1RURFOTY2MDBBOTAwRTMKKzoxMDJDMjAwMDA4NzVDQkZGMEUzNTM3NzVERjgxMEVDMjM0QzAwMEY2NTQKKzoxMDJDMzAwMDA2OUQzNjgwNzQ0ODgxMEU5QjM2MDA4MEY3MDY5QjM2RDEKKzoxMDJDNDAwMDAxMDA3NDFFQjg3RDAzQ0QzQTgxMEU5QjM2ODAwMDgzNEYKKzoxMDJDNTAwMDI2OUIzNkZFQzcwNjBGMzcwMjAwQzYwNkEwMzYwNEU5REIKKzoxMDJDNjAwMDdCRkU4MDNFQTAzNjA0NzUwNzgzM0UwRjM3MDE3NTA1NTUKKzoxMDJDNzAwMEM2MDZBMDM2MDZDNzA2MEYzNzAyMDBFOTVGRkVCRTAyOTEKKzoxMDJDODAwMDAwRTk0QUZFODAyNjlFMzZGRjc1M0FGNjA2OUQzNjgwOUMKKzoxMDJDOTAwMDc0MkRGNzA2OUIzNjAwMjA3NTJCQzYwNkEwMzYwNkZGNUUKKzoxMDJDQTAwMDA2OTQzNDgzMEU2NjM3MjA4RTA2MzAzNDI2RjcwNjBBRTMKKzoxMDJDQjAwMDAwMDAwMTc0MDcyNjgxMEUwODAwMDAwMUU5MDYwMEJFMkQKKzoxMDJDQzAwMDA0MDBFOTA5RkU4MTBFQUYzNjAwMDhBMUFGMzZFNzA2MjEKKzoxMDJDRDAwMEU1MEFBOTAwODA3NDBFODEyNkFGMzZGRkY3QTFBRjM2NTIKKzoxMDJDRTAwMEU3MDZFOTA5RkZFOUY1RkRDNzA2NDEzNzAwMDA4MzBFNTUKKzoxMDJDRjAwMDk5MzYwMkU5RTdGRDgwMjY5RTM2RkY3NTFERjcwNjlCOTMKKzoxMDJEMDAwMDM2MDA0MDc1MDU4MzBFOTkzNjA4ODMwRTk5MzYyMDgxNkEKKzoxMDJEMTAwMDI2OUIzNkZGQkZCODg1MDNDRDM5RTlDMEZEODAzRTlFQjYKKzoxMDJEMjAwMDM2MDY3NDA3ODAzRTlFMzYwQTc1MzRGNjA2OUQzNjgwNTgKKzoxMDJEMzAwMDc1MDZCRTA3MDBFOTk2RkRDNjA2QTAzNjA0ODMzRTBGNjEKKzoxMDJENDAwMDM3MDI3NDFCQzcwNjBGMzcwNDAwODAzRTlFMzYwNjc1OTcKKzoxMDJENTAwMDBFRjcwNjlCMzY0MDAwNzUwNkM3MDYwRjM3MDMwMEU5REQKKzoxMDJENjAwMDdCRkQ4MDNFOUQzNjA0NzUxMjgxMEVDMjM0MDA0MEZGMEIKKzoxMDJENzAwMDA2OTIzNEM2MDZBMDM2MDZFOTYyRkRCRTA1MDBFOTREOUUKKzoxMDJEODAwMEZERjYwNjlEMzY4MDc1MTk4MzBFQzIzNDA0QkUwNjAwMUEKKzoxMDJEOTAwMEU5M0JGRDgwMjY5RTM2RkY3NUM1RkYwNjMxMzdFOTAwMDkKKzoxMDJEQTAwMDAwODMyNkMyMzRCRkM2MDZBMDM2MDZFOTJGRkRFNTBBMTkKKzoxMDJEQjAwMDUwMjVDM0JGRTcwQTU4ODAyNjlFMzZGRjc1MERBOTAwMkYKKzoxMDJEQzAwMDQwNzUwOEM2MDZBMDM2MDZFOTEyRkRCODgzMDNDRDM5NjIKKzoxMDJERDAwMEMzQjg3QzAzQ0QzOUY3MDZGNDMzMDAxMDc1MDlDNzA2NzQKKzoxMDJERTAwMDMzMzcwMjAwRTlGNkZDRkYwRTMzMzc3NDAzRTlFREZDREMKKzoxMDJERjAwMEZGMDY4RTM0RThGNzE5ODMwRUMyMzQwOEJFMDMwMEU5REIKKzoxMDJFMDAwMENDRkMwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDQwNDA1RTkKKzoxMDJFMTAwMDA0MDQwNDAwMDMwMDAzMDMwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDJFMjAwMDAwMDQwMDA4MDgwNTA4MDgwODAwMDMwMDAzMDMwMDAwNjgKKzoxMDJFMzAwMDAyMDQwNDA0MDQwMDAwMDgwMDAwMEExNDAwMDAxQTAwNDAKKzoxMDJFNDAwMDFDMDAxRTIwMDAwMDA0NDEwNjBCMDhDMkZGRTcwNDAzMUIKKzoxMDJFNTAwMDA2MDQwNDA1MDQwNjA0ODcwNDAzMDYwNDA0ODU0RUEyNDAKKzoxMDJFNjAwMDA0Q0YwNENEQzcwNkEyMzcwMDAwQzcwNkE2MzcwMDAwNkUKKzoxMDJFNzAwMDI2QTEyMDAwMjU3RkZGQTNGNTM2MjZBMTIyMDBBM0Y3NzcKKzoxMDJFODAwMDM2MjZBMTI0MDBBM0Y5MzZFODNCMTk4QkYwMjY4QjBFRDkKKzoxMDJFOTAwMDBFMDAyQkM4ODNFOTBFQjgwMTgwODNGOTA0N0M1MTI2MEIKKzoxMDJFQTAwMDhBNTQyODg4MTYxQzM3NDAyNjhCNkMyNjg2Q0QzQkNENEQKKzoxMDJFQjAwMDg2Q0Q4OTBFQTQzNzc1Mzg0MDMyRkYyNjhBNUMyOTgwN0EKKzoxMDJFQzAwMEZCMTU3NzI1ODBGQjBBNzQyMDgwRkIwMTc0MUJCODA0NzYKKzoxMDJFRDAwMDgwMkUzQTk3MDIyRTc0MDcyRTNBOTcxODJFNzUxMTMzQ0EKKzoxMDJFRTAwMEMwODBGQjA5NzU0RjhCRjNDMzI2QzcwNjA0MDBGRkZGQTQKKzoxMDJFRjAwMDUwNTJBMUE0Mzc4NkM0MjYzQjA2MjYwMDdDMzIyNjgxODgKKzoxMDJGMDAwMDNFMjYwMDAwMDQ3RTI5OEQ3NDJBMjY4QjE0MjJEMjc0NUEKKzoxMDJGMTAwMDFGODBFNkJGODBGRTA5NzUxN0M3MDZBMjM3MDEwMDgwMzMKKzoxMDJGMjAwMEZBMDQ3NTBDMjY4QjQ0MDJBMzAzMzc4NkM0QTNEMDM0NUQKKzoxMDJGMzAwMDVBNThFOUIxRkZCRDcyMzcyRThBODcyRTJFMjJDMDc0RUYKKzoxMDJGNDAwMDE2MDU0NDJFOEJGODJFOEIwNTNFODk0NjAwODNDNTAyNUMKKzoxMDJGNTAwMDgzQzcwMjIyRTQ3REVGOEQ3NDJBODNFOTA0NzUwM0U5QjcKKzoxMDJGNjAwMEExMDAyNjhCMTQyMkQyNzUwM0U5N0MwMEM3MDZBNjM3ODAKKzoxMDJGNzAwMDAxMDBCRjcyMzc4QjA1ODNDNzAyODBFNkJGODBFNDNGNDQKKzoxMDJGODAwMDgwRkUwOTc1MjI4MEZBMDQ3NTVFQzcwNkEyMzcwMTAwMkIKKzoxMDJGOTAwMDI2OEI0NDAyQTMwMzM3ODZDNEEzRDAzNDg2QzRDNzA2NTUKKzoxMDJGQTAwMEE2MzcwMDAwRTk0NzAwM0JGRDdFMTUyNjhCMDRBODQwQUMKKzoxMDJGQjAwMDc0MDZCODA3ODBFOTM4RkYzMkMwMjY4QjA0RTkyRTAwN0EKKzoxMDJGQzAwMDNBRjQ3NUIxQzc0NUZFMDAwMDgwRkUyMjc1MEQzQUQwNzcKKzoxMDJGRDAwMDc3MTZDNzA2QTYzNzAwMDBFOTEzMDAzQUQwNzUwOUM3NkYKKzoxMDJGRTAwMDA2QTYzNzAwMDBFOTA2MDBCODA1ODBFOTAyRkYzMkY2QzAKKzoxMDJGRjAwMDAzRjIyQkNBQjgwNTgwMjNDOTc2MDNFOTY0RkY3NDAzODIKKzoxMDMwMDAwMEU5RURGRTMzQzBCRjcyMzc4QjE1NDc0NzNCRkQ3RjFCOTEKKzoxMDMwMTAwMEY2QzY4MDc0MTZGNzA2QTYzNzAxMDA3NDA2QjgwODgwNTUKKzoxMDMwMjAwMEU5QzNGRUY2QzY0MDc0RTBCODA3ODBFOUI4RkU3RDQyMDkKKzoxMDMwMzAwMEEzNDU0NDI5NDQyOUI3MjhFMjI4RUUyQkYyMjhGNTI4OTUKKzoxMDMwNDAwMDAxMjlBQzJBNDQyOTQ0Mjk0NDI5NDQyOTQ0MjkwMDAwNUYKKzoxMDMwNTAwMDczMzYwMDAwMDMzNkM1MzU4MzM1NDUzNTA3MzVEMjM0MjAKKzoxMDMwNjAwMDQ1MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDMwNzAwMDAwMDBBNjM4MDAwMEUwMzgwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDMwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDMwOTAwMEYyMzMwMDAwQTYzMzYwMzNGRDMyQkMzMjc3MzIzQzMyNkIKKzoxMDMwQTAwMEZCMzE2QTMxMEEzMUUwRTAxMDEwMTBFMEUwRTBFMDAwQUUKKzoxMDMwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDMwQzAwMDAwMDAwMDAwMDAwMEUwMDBFMEUwRTBFMEUwRTBFMEUwMjAKKzoxMDMwRDAwMEUwMzNGRjI2RjYwNjFBMDA4MDc0MUIyNjgwMjYxQTAwQUQKKzoxMDMwRTAwMDdGMjY4QjNFMjYwMDgzRTcxRjc0MEIyNjgwMEUyMDAwNzAKKzoxMDMwRjAwMDgwMjYwMTNFMEUwMEMzNjAyRThCODRBNjMwMjZBMzE4QzYKKzoxMDMxMDAwMDAwRDFFNjJFRkY5NDUwMzA2MUMzMjZDNzA2MDQwMEM0RTgKKzoxMDMxMTAwMDJBMjZDNzA2MEUwMDE2MDAyNkM3MDYwNjAwMDYwMDI2NDkKKzoxMDMxMjAwMEM2MDYxOTAwMDBFOEJGMDVFODk4MDUyNkM3MDYyNjAwNzAKKzoxMDMxMzAwMDAwMDgyNkM2MDYyODAwNDAyNkM2MDYyOTAwMkFCRjJBRkYKKzoxMDMxNDAwMDAwMjZDNjA1MDQyNkM2NDUwMTJBQTE5MzM3MzNEQkE5MEMKKzoxMDMxNTAwMDQwMDA3NTAyQjMwMUE5MDAxMDc0MDJCNzg4QTkwMDA4RTUKKzoxMDMxNjAwMDc0MDM4MENGNDQyNjg5NUQwMkMzODMwRUMyMzQyMDI2QjcKKzoxMDMxNzAwMEM3MDYwNDAwNkIyQjI2QzcwNjBFMDAzMDAwMjZDNzA2QzQKKzoxMDMxODAwMDA2MDAwQTAwMjZDNzA2MEEwMDA0MDAyNkM2MDYxOTAwMjMKKzoxMDMxOTAwMDAwRTg2OTA1RTgyQzA1MjZDNzA2MjYwMDAwMjIyNkM2OTkKKzoxMDMxQTAwMDA2MjgwMDYwMjZDNjA2MjkwMDI5QkYyQTAwMjZDNjA1NzMKKzoxMDMxQjAwMDA4MjZDNjQ1MDEyRDhEN0QwMkJFNTQzN0I5MDMwMEYzQTQKKzoxMDMxQzAwMEE1MjZDNjA1MDgyNkM2NDUwMTJFOEQ3RDAyQkU1QTM3QTYKKzoxMDMxRDAwMEI5MDMwMEYzQTVFOEQ0MDVFODY0MDVCOTA2MDBCRTU0QjgKKzoxMDMxRTAwMDM3OEQyRTJDMDAyNjhCNDYwMDI5MDQ4M0M2MDI4M0M1MEEKKzoxMDMxRjAwMDAyODNGOTA0NzUwMjQ1NDVFMkVCQzMyNkM3MDYwNDAwQzUKKzoxMDMyMDAwMEM0MkEyNkM3MDYwRTAwMjQwMDI2QzcwNjA2MDAwNjAwQUMKKzoxMDMyMTAwMDI2QzYwNjE5MDAwMEU4RTQwNEU4QTcwNDI2QzcwNjI2MjcKKzoxMDMyMjAwMDAwMDAxNjI2QzYwNjI4MDA2MDI2QzYwNjI5MDAyOEJGMEMKKzoxMDMyMzAwMDJBMDBFODVCMDZFODc0MDVFODA0MDVDMzI2QzcwNjA0MEYKKzoxMDMyNDAwMDAwQzQyQTI2QzcwNjBFMDAxQTAwMjZDNzA2MDYwMDA2NzYKKzoxMDMyNTAwMDAwMjZDNjA2MTkwMDAwRThBMzA0RTg2NjA0MjZDNzA2OEYKKzoxMDMyNjAwMDI2MDAwMDBDMjZDNjA2MjgwMDYwMjZDNjA2MjkwMDI3NzAKKzoxMDMyNzAwMEJGMkEwMEU4MjEwNUMzMjZDNzA2MDQwMEM0MkEyNkM3QzIKKzoxMDMyODAwMDA2MEUwMDIwMDAyNkM3MDYwNjAwMEEwMDI2QzcwNjBBMEEKKzoxMDMyOTAwMDAwMDQwMDI2QzYwNjE5MDAwMEU4NEIwNEU4MjQwNDI2QjIKKzoxMDMyQTAwMEM3MDYyNjAwMDAxMjI2QzYwNjI4MDA0MDI2QzYwNjI5QTQKKzoxMDMyQjAwMDAwMjZCRjJBMDBFOEY0MDRFODg0MDRDMzI2QzcwNjA0RjUKKzoxMDMyQzAwMDAwQzQyQTI2QzcwNjBFMDAzNDAwMjZDNzA2MDYwMDA2REMKKzoxMDMyRDAwMDAwMjZDNjA2MTkwMDAwRTgwRDA0RThFNjAzMjZDNzA2MjYKKzoxMDMyRTAwMDI2MDAwMDI2MjZDNjA2MjgwMDQwMjZDNjA2MjkwMDI1RjgKKzoxMDMyRjAwMEJGMkEwMEU4QjYwNEU4NDYwNEU4RkEwNEMzMjZDNzA2NzUKKzoxMDMzMDAwMDA0MDBDNDJBMjZDNzA2MEUwMDM4MDBBMUEyMzc1MDBCQkQKKzoxMDMzMTAwMEMwNzUwNzI2QzcwNjBFMDAzNDAwMjZDNzA2MDYwMDA2M0QKKzoxMDMzMjAwMDAwMjZDNjA2MTkwMDAwRTg5OTAzRThBNEZEMjZDNzQ1NTMKKzoxMDMzMzAwMDI2MDAyQTU4MEJDMDc1MDYyNkM3NDUyNjAwMjZBMTFDNjQKKzoxMDMzNDAwMDM3QzFFMDA0MjY4ODQ1MjgyNkM2NDUyOTI0ODNDNzJBOTQKKzoxMDMzNTAwMEU4MjkwNEU4QTAwNEU4MjIwNUU4RjgwM0U4MDkwNEMzMjIKKzoxMDMzNjAwMDI2QzcwNjA0MDBDNDJBMjZDNzA2MEUwMDMyMDAyNkM3NTgKKzoxMDMzNzAwMDA2MDYwMDA2MDAyNkM2MDYxOTAwMDBFODQ1MDNFODUwQzgKKzoxMDMzODAwMEZEMjZDNzQ1MjYwMDI0QTExQzM3QzFFMDA0MjY4ODQ1MzgKKzoxMDMzOTAwMDI4MjZDNjQ1MjkyMzgzQzcyQUU4RTAwM0U4NkMwNEU4MDkKKzoxMDMzQTAwMDhBMDRFODlDMDRDMzI2QzcwNjA0MDBDNDJBMjZDNzA2NkMKKzoxMDMzQjAwMDBFMDAzNDAwMjZDNzA2MDYwMDA2MDAyNkM2MDYxOTAwQzEKKzoxMDMzQzAwMDAwRThGRjAyRTgwQUZEMjZDNzQ1MjYwMDI2QTExQzM3QjMKKzoxMDMzRDAwMEMxRTAwNDI2ODg0NTI4MjZDNjQ1MjkyMjgzQzcyQUU4NTUKKzoxMDMzRTAwMDlBMDNFOEM3MDNFODU3MDNFOEY4MDNFODc4MDRFODhBOTMKKzoxMDMzRjAwMDA0QzMyNkM3MDYwNDAwNzQ0NTI2QzcwNjBFMDAzRTAwMTcKKzoxMDM0MDAwMDI2QzcwNjA2MDAwNjAwMjZDNzA2MEEwMDA0MDAyNkM2RDAKKzoxMDM0MTAwMDA2MTkwMDAwRThGQzAyRThBOTAyODMzRThEMzcwMzc1MTcKKzoxMDM0MjAwMDAxOTAyNkM3MDYyNjAwMDAzMDI2QzYwNjI4MDA1MDI2MzIKKzoxMDM0MzAwMEM2MDYyOTAwMjBCRjJBMDBFOEQwMDNFODAxMDNFOEI1NEEKKzoxMDM0NDAwMDAzRTg5RjAzQzMyNkM3MDYwNDAwNjE0M0I5RjAwMDgzNjUKKzoxMDM0NTAwMEU5MDIyNjg5MEUwRTAwMjZDNzA2MDYwMDAyMDAyNkM2Q0YKKzoxMDM0NjAwMDA2MTkwMDAwMjZDNzA2MUEwMDAwMDAyNkM3MDYxQzAwMjEKKzoxMDM0NzAwMDAwMDAyNkM3MDYxRTAwMDAwMEU4NDcwMjgzRTkwRTg2MEEKKzoxMDM0ODAwMENEMjY4OTBFMjYwMDg2Q0QyNkM2MDYyODAwMDAyNkM2MzMKKzoxMDM0OTAwMDA2MjkwMDA4QkYyQTAwODNFOTA0MjY4OTBEMjZDNjQ1QUYKKzoxMDM0QTAwMDAxMjY4RDdEMDI4M0U5MDJCQjAxMDBCODMwMzA0Qjc1RTcKKzoxMDM0QjAwMDE3QkIwQTAwOEFDNDI2ODgwNUIwMzE4MEM0MDE4MEZDOEQKKzoxMDM0QzAwMDNBNzUwQUI0NjFFOTA1MDAyNjg4MDUwNDAxNDc0OTc1ODMKKzoxMDM0RDAwMEREQzMyNkM3MDYwNDAwMDQ0NTI2QzcwNjBFMDAxMjAwRjkKKzoxMDM0RTAwMDI2QzcwNjA2MDAwNjAwMjZDNjA2MTkwMDAxRThFNTAxMDMKKzoxMDM0RjAwMEU4RDAwMTI2QzcwNjI2MDAwMDA0MjZDNjA2MjgwMDAwREMKKzoxMDM1MDAwMDI2QzYwNjI5MDAwN0MzMjZDNzA2MDQwMEM0MkEyNkM3MDQKKzoxMDM1MTAwMDA2MEUwMDIwMDAyNkM3MDYwNjAwMDYwMDI2QzYwNjE5NkQKKzoxMDM1MjAwMDAwMDZFODA0MDJFODlCMDEyNkM3MDYyNjAwMDAxMjI2RDIKKzoxMDM1MzAwMEM2MDYyODAwMDAyNkM2MDYyOTAwMDZCRjJBMDBFODZCM0EKKzoxMDM1NDAwMDAyRThGQjAxQzMyNkM3MDYwNDAwQzQyQTI2QzcwNjBFRUMKKzoxMDM1NTAwMDAwMjAwMDI2QzcwNjA2MDAwNjAwMjZDNjA2MTkwMDA1M0MKKzoxMDM1NjAwMEU4QzYwMUU4NUQwMTI2QzcwNjI2MDAwMDEyMjZDNjA2NDkKKzoxMDM1NzAwMDI4MDAwMDI2QzYwNjI5MDAwNUJGMkEwMEU4MkQwMkU4MUIKKzoxMDM1ODAwMEJEMDFDM0ZGMDY4MjM0MjZDNzA2MDQwMDNENDEyNkM3OUQKKzoxMDM1OTAwMDA2MEUwMDIwMDAyNkM3MDYwNjAwMEUwMDI2QzYwNjE5RTUKKzoxMDM1QTAwMDAwMDRFODg0MDFFODFCMDEyNkM3MDYyNjAwMDAxMjI2NTUKKzoxMDM1QjAwMEM2MDYyODAwMDAyNkM2MDYyOTAwMDRCRjJBMDBFOEVCM0MKKzoxMDM1QzAwMDAxRTg3QjAxQzMyNkM3MDYwNDAwNjc0MjI2QzcwNjBFMzIKKzoxMDM1RDAwMDAwMjAwMDI2QzcwNjA2MDAwODAwMjZDNjA2MTkwMDAzQkMKKzoxMDM1RTAwMEU4NDYwMUU4REQwMDI2QzcwNjI2MDAwMDEyMjZDNjA2Q0EKKzoxMDM1RjAwMDI4MDAwMDI2QzYwNjI5MDAwM0JGMkEwMEU4QUQwMUU4MUUKKzoxMDM2MDAwMDNEMDFDM0ZGMDY4NDM0MjZDNzA2MDQwMDY3NDIyNkM3NkYKKzoxMDM2MTAwMDA2MEUwMDI0MDAyNkM3MDYwNjAwMDgwMDI2QzYwNjE5NjYKKzoxMDM2MjAwMDAwMDJFODA0MDFFODlCMDAyNkM3MDYyNjAwMDAxNjI2RDMKKzoxMDM2MzAwMEM2MDYyODAwMDAyNkM2MDYyOTAwMDJCRjJBMDAyNkM2QTQKKzoxMDM2NDAwMDA1MDQyNkM2NDUwMTAxQTEwRjM3ODZFMEY2MDY2RjM3NEYKKzoxMDM2NTAwMDAxNzUwRjM5MDZDQzM0NzQwOThCRDhCODg5MDNDRDM5N0MKKzoxMDM2NjAwMDhCQzNBM0NDMzQyNjg5NDUwMjhEN0QwNEU4M0QwMUU4NTcKKzoxMDM2NzAwMENEMDBDMzI2QzcwNjA0MDBDNDJBMjZDNzA2MEUwMDFDQjgKKzoxMDM2ODAwMDAwQTFBMjM3NTAwQkMwNzUwNzI2QzcwNjBFMDAxODAwMTAKKzoxMDM2OTAwMDI2QzcwNjA2MDAwNjAwMjZDNjA2MTkwMDAwRTgyMzAwMTUKKzoxMDM2QTAwMEU4MkVGQTI2Qzc0NTI2MDAwRTU4MEJDMDc1MDYyNkM3MTkKKzoxMDM2QjAwMDQ1MjYwMDBBMjZDNjQ1MjkwMDgzQzcyQUU4QkQwMEU4M0EKKzoxMDM2QzAwMEZGMDBDMzU2NTc1MUI5MDMwMEJFRDEzNkJGMjAwMEYzRTcKKzoxMDM2RDAwMEE1NTk1RjVFQzM1NjU3NTFCOTAzMDBCRUQxMzZCRjFBMTQKKzoxMDM2RTAwMDAwRjNBNTU5NUY1RUMzMjZDNzA2MUEwMEMwMDAyNkM3QUYKKzoxMDM2RjAwMDA2MUMwMDAwMDAyNkM3MDYxRTAwMDAxMEMzMjZDNzA2RDEKKzoxMDM3MDAwMDFBMDBDMDAwMjZDNzA2MUMwMDAwMDAyNkM3MDYxRTAwQkYKKzoxMDM3MTAwMDAwMDhDMzI2QzcwNjFBMDBDMDAwMjZDNzA2MUMwMDAwMDIKKzoxMDM3MjAwMDAwMjZDNzA2MUUwMDAwMDJDMzI2QzcwNjFBMDBDMDAwRjYKKzoxMDM3MzAwMDI2QzcwNjFDMDBGRkZGMjZDNzA2MUUwMEZGRkZDMzI2ODQKKzoxMDM3NDAwMEM2MDUwODI2QzY0NTAxMDI4RDdEMDJCRTA1MzdCOTAzQjAKKzoxMDM3NTAwMDAwRjNBNUMzMjZDNjA1MDQyNkM2NDUwMTA2QTEwRDM3RkMKKzoxMDM3NjAwMDI2ODk0NTAyOEQ3RDA0QzMyNkM2MDUwNDI2QzY0NTAxNkIKKzoxMDM3NzAwMDA3QTEwQjM3MjY4OTQ1MDI4M0M3MDRDM0ExQTIzNzBCRDMKKzoxMDM3ODAwMEMwNzQxMzI2QzYwNTA0MjZDNjQ1MDEwOUExMDMzNzI2QzEKKzoxMDM3OTAwMDg5NDUwMjgzQzcwNEMzMjZDNjA1MDgyNkM2NDUwMTAyMUIKKzoxMDM3QTAwMDhEN0QwMkJFMDUzN0I5MDMwMEYzQTVDMzI2QzYwNTA2MDUKKzoxMDM3QjAwMDI2QzY0NTAxMEI4RDdEMDJCRUVGMzZCOTAyMDBGM0E1OEEKKzoxMDM3QzAwMEMzMjZDNjA1MDYyNkM2NDUwMTIwQTE2ODM3MjY4OTQ1QjkKKzoxMDM3RDAwMDAyQTE2QTM3MjY4ODY1MDVDMUUwMDQyNjg4NDUwNDgzNkUKKzoxMDM3RTAwMEM3MDZDMzI2QzYwNTA0MjZDNjQ1MDEyMTI2Qzc0NTAyQ0QKKzoxMDM3RjAwMDAwMDA4M0M3MDRDMzI2QzYwNTE0MjZDNjQ1MDEyMjhERDIKKzoxMDM4MDAwMDdEMDJCRTFGMzdCOTA5MDBGM0E1QzMyNkM2MDUwQzI2RTUKKzoxMDM4MTAwMEM2NDUwMTIzOEQ3RDAyMUUwRTFGOEQzNjQwNTRCOTAzMEYKKzoxMDM4MjAwMDAwRjNBNTMzQzBCOTAyMDBGM0FCMUZDMzI2QzYwNTA4RDkKKzoxMDM4MzAwMDI2QzY0NTAxMjg4RDdEMDJCRUQxMzZCOTAzMDBGM0E1MDkKKzoxMDM4NDAwMEMzMjZDNjA1MDgyNkM2NDUwMTI5QTFDMjM0ODZFMDI2M0UKKzoxMDM4NTAwMDg5NDUwMkExOUIzNjI2ODk0NTA0MjY4ODQ1MDYyNjg4ODcKKzoxMDM4NjAwMDQ1MDc4RDdEMDhDMzI2QzYwNTA2MjZDNjQ1MDEyQjhENTYKKzoxMDM4NzAwMDdEMDJCRUJCMzZCOTAyMDBGM0E1QzMyNkM2MDUwNjI2RTcKKzoxMDM4ODAwMEM2NDUwMTJDOEQ3RDAyQkVFNTM2QjkwMjAwRjNBNUMzMDUKKzoxMDM4OTAwMDI2QzYwNTA0MjZDNjQ1MDEzMEExMzczNzg2RTAyNjg5QUQKKzoxMDM4QTAwMDQ1MDI4RDdEMDRDMzI2QzcwNjBFMDAxRTAwMjZDNzA2RUUKKzoxMDM4QjAwMDA2MDAwMjAwMjZDNjA2MTkwMDAwRTg2Q0ZFRTgwM0ZFQkEKKzoxMDM4QzAwMDI2QzcwNjI2MDAwMDEwMjZDNjA2MjgwMDMwMjZDNjA2OTMKKzoxMDM4RDAwMDI5MDAxMUJGMkEwMEU4MzUwMEU4NDUwMEU4NTUwMEMzN0IKKzoxMDM4RTAwMDI2QzcwNjBFMDAxMjAwMjZDNzA2MDYwMDAyMDAyNkM2REUKKzoxMDM4RjAwMDA2MTkwMDAwRTgzMkZFRThDOUZEMjZDNzA2MjYwMDAwQ0EKKzoxMDM5MDAwMDA0MjZDNjA2MjgwMDMwMjZDNjA2MjkwMDEzQzMyNkM2OEMKKzoxMDM5MTAwMDA1MDQyNkM2NDUwMTBDMjZDNzQ1MDIwMDAxODNDNzA0REQKKzoxMDM5MjAwMEMzMjZDNjA1MDQyNkM2NDUwMTBFMjZDNzQ1MDIwMDAyNjkKKzoxMDM5MzAwMDgzQzcwNEMzMjZDNjA1MDQyNkM2NDUwMTIxMjZDNzQ1RkMKKzoxMDM5NDAwMDAyMDAwMDgzQzcwNEMzMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDM5NTAwMEIzMzlDOTM5ODMzQUIzMzlCMzM5QjMzOTFDM0ExQzNBNEMKKzoxMDM5NjAwMEEzQjYzNEExRTkzNkEzMTEzN0EzRDIzNEExRUIzNkEzMTEKKzoxMDM5NzAwMDEzMzdBM0Q0MzRBMUVEMzZBMzE1MzdBM0Q2MzRBMTAxNTAKKzoxMDM5ODAwMDM3QTNDRTM0QTFGNzM2QTMxNzM3QTNEQzM0QTFGOTM2MTkKKzoxMDM5OTAwMEEzMTkzN0EzREUzNEY3MDY5QjM2MDIwMDc1MEMzM0MwM0IKKzoxMDM5QTAwMEEwOUUzNjhCRjAyRUZGQTQ1MDM5RTkwRjAxQkUwNzAwMTAKKzoxMDM5QjAwMEU5MTlGMUY2MDY5RDM2ODA3NEYzQzYwNkEwMzYwMkM2RjQKKzoxMDM5QzAwMDA2NkUzNzA4QzYwNjcwMzcwMkI4ODgwM0NEMzlGNjA2OEEKKzoxMDM5RDAwMDZGMzcwMTc1NEFBMUQxMzYzQTA2RTkzNjc1NDEzQTI2NjQKKzoxMDM5RTAwMEVBMzY3NTNCQTFEMzM2M0EwNkVCMzY3NTMyM0EyNkVDMDkKKzoxMDM5RjAwMDM2NzUyQ0ExRDUzNjNBMDZFRDM2NzUyMzNBMjZFRTM2QzUKKzoxMDNBMDAwMDc1MURDNjA2NzAzNzAyRkUwRTZFMzc3NTBGQjg4ODAzMzcKKzoxMDNBMTAwMENEM0E4MzBFOUIzNjEyQzYwNkEwMzYwQ0U5QThGMEExNUIKKzoxMDNBMjAwMDA1MzcyNjNCMDYyMDAwNzU0MEExMDczNzI2M0IwNjIyQjYKKzoxMDNBMzAwMDAwNzUzNkExMDkzNzI2M0IwNjI0MDA3NTJDQTA5RTM2NUEKKzoxMDNBNDAwMDNDMDI3NTA4MjZGNjA2MTgwMDA4NzU0N0M2MDY2RTM3NEMKKzoxMDNBNTAwMDA4RkUwRTcwMzc3NTFDQzYwNjcwMzcwMkU1MDIwRDAxQjAKKzoxMDNBNjAwMDA0MjVFRkZGRTcwMkU5NUVGMEM2MDY3MDM3MDJDNjA2REUKKzoxMDNBNzAwMDZFMzcwOEU1MDIyNUZGRkIwRDAxMDAyNUVGRkZFNzAyODkKKzoxMDNBODAwMEU5NDRGMEY3MDY5QjM2MDAwMTc0MjUyNkY2MDYxODAwNzcKKzoxMDNBOTAwMDA4NzVFRDgxMjY5QjM2N0ZGRkI4ODkwM0NEM0FCODg0M0YKKzoxMDNBQTAwMDAzQ0QzQUM2MDZBMDM2MDY4MzI2QzIzNEFGRTkxN0YwMjYKKzoxMDNBQjAwMEExMDEzNzNBMjYwRjM3N0ZDN0U5RjdGRTgzMjY5QjM2RTkKKzoxMDNBQzAwMEVDRTgyQTBEODEwRTlCMzY4MDAwQkJGRjdGQ0Q1M0M2RUMKKzoxMDNBRDAwMDA2QTAzNjAyRTlGMEVGODMwRTlCMzYxMUM2MDZBMDM2MkIKKzoxMDNBRTAwMDBDRTlGOUVGNDQzQjJDM0JDNzJBNkIzQjQ0M0JDNzJBMEMKKzoxMDNBRjAwMEM3MkFDNzJBQTNCNjM0ODEwRUMyMzQwMDIwRjcwNjQxNzQKKzoxMDNCMDAwMDM3MDEwMDc0MUI4Q0MzQzcwNjQxMzcwMDAwQjg3RjAzMjAKKzoxMDNCMTAwMENEM0EzM0MwOEVDMEJGNTQzN0I5MDYwMEYzQUI4RUMzNjUKKzoxMDNCMjAwMDMzQzBBMDlFMzY4QkYwMkVGRkE0RTQzQUY3MDY5QjM2RjYKKzoxMDNCMzAwMDAwMDE3NTIxODMyNkMyMzRCRkExQTkzNkU3MDBBMTlCRUQKKzoxMDNCNDAwMDM2RTkwOTAwQTE5QjM2ODEyNjlCMzZGRkRGQTkwMDIwQkMKKzoxMDNCNTAwMDc1MDZFOTZFMDBFOTZGRUY4MzBFOTkzNjA0QzcwNjM3RTQKKzoxMDNCNjAwMDM3MDEwMEM2MDZDQTM0MDFFOTU4MDA4MzBFOUIzNjQwNkYKKzoxMDNCNzAwMEU4NTgwMEExMDUzNzNCMDZFOTM2NzUzN0ExMDczNzNCMDIKKzoxMDNCODAwMDA2RUIzNjc1MkVBMTA5MzczQjA2RUQzNjc1MjVGRTBFODAKKzoxMDNCOTAwMDcxMzc3NTFDQjg4NzAzQ0QzQTgzMEU5OTM2MTBBMTUwNDIKKzoxMDNCQTAwMDM3QzcwNjUwMzcwMDAwMDkwNjk5MzZDNjA2QTAzNjA4MDIKKzoxMDNCQjAwMEU5MTRFRjgzMEU5OTM2MDRDNzA2MzczNzAzMDBDNjA2QUIKKzoxMDNCQzAwMENBMzQwM0M2MDZBMDM2MEFFOUZDRUVBMUQxMzYyNjNCNkMKKzoxMDNCRDAwMDA2MjAwMDc1MTVBMUQzMzYyNjNCMDYyMjAwNzUxMkExREEKKzoxMDNCRTAwMEQ1MzYyNjNCMDYyNDAwNzUwRkMzOEQzNjIwMDBFOTBCMjEKKzoxMDNCRjAwMDAwOEQzNjIyMDBFOTA0MDA4RDM2MjQwMDgzQzQwMkY3Q0MKKzoxMDNDMDAwMDA2RTYzNDAxMDA3NDE1MjYzQTA0NzcwODcyMEUyNjNBNDcKKzoxMDNDMTAwMDY0MDE3MjA4QzYwNkEwMzYwNkU5QUJFRUU4N0MwQThDQTEKKzoxMDNDMjAwMEMwM0RGRkZGNzQxQjI2QzYwNjE4MDAxMDI2QzcwNjA0RjkKKzoxMDNDMzAwMDAwNDkzQzI2QzcwNjA2MDAwQzAwQ0Q1MEI5NEUwMEUyRjQKKzoxMDNDNDAwMEZFQzYwNkEwMzYwQUU5OTRFRUU5N0JFRThGM0MwNjNERkYKKzoxMDNDNTAwMDA2M0QwNjNERDIzQ0VBM0MwNjNEMDYzREEzQjYzNDgxMTYKKzoxMDNDNjAwMDI2QzIzNEFGREZDNzA2NEMzNzAwMDBCODhBMDNDRDNBMEUKKzoxMDNDNzAwMDgwM0U5RDM2MDQ3NTBDODAzRTlFMzYwNjc0MDVDNjA2NTEKKzoxMDNDODAwMDlGMzYwNjMzQzBBMDlFMzY4QkYwMkVGRkE0NEMzQ0Y3MjcKKzoxMDNDOTAwMDA2OUIzNjAwMjA3NTBFODEyNjlCMzZGRkJGQjg4QjAzMkUKKzoxMDNDQTAwMENEM0FFOTU0MDBGNzA2OUIzNjAwMDE3NDAzRTkxN0VFOUMKKzoxMDNDQjAwMEM3MDYzNzM3MDIwMEM2MDZDQTM0MDI4MzBFOTkzNjA0OTcKKzoxMDNDQzAwMDgzMEU1MDM3MDRGNjA2OUQzNjgwNzUyQUU4MUYwQkU5RUYKKzoxMDNDRDAwMDI3MDBGNzA2OUIzNjAwMDE3NUQzQzcwNjM3MzcwMjAwNjkKKzoxMDNDRTAwMEM2MDZDQTM0MDI4MzBFOTkzNjA0QzYwNkEwMzYwMEY2MEMKKzoxMDNDRjAwMDA2OUQzNjgwNzQwM0U4REUwQTgxMjY5QjM2N0NGRkJCNzYKKzoxMDNEMDAwMEZGRkZDRDUzQ0Q1NEU5QkVFREEzQjYzNEU4QUQwMUI4MDUKKzoxMDNEMTAwMDg2MDNDRDM5QzcwNjRDMzcwMDAwODEyNkMyMzRBRkRGOTkKKzoxMDNEMjAwMEY2MDY5RDM2ODA3NDM0RjcwNjlCMzYwMDIwNzQ1NkY3RUQKKzoxMDNEMzAwMDA2OUIzNjAwMDE3NDI3RTgzNTAxNzIxQ0JFMDA0MDg1RTEKKzoxMDNENDAwMDM2QzIzNDc1MDgwOTM2QzIzNEZGMDY5MjM0RTg4QjAxNTYKKzoxMDNENTAwMDczMDY4MTBFOTkzNjgwMDBFOTZDRURFOUI1MDBDNzA2NUYKKzoxMDNENjAwMDM3MzcwMjAwQzYwNkNBMzQwMjgzMEU5OTM2MDQ4MzBFMjIKKzoxMDNENzAwMDUwMzcwNDgwM0U5RTM2MDg3NDAzRTg1QTBBRThFRjAwODQKKzoxMDNEODAwMDcyRDZFOUM4RkY4MDNFOUUzNjBBNzUxMkM2MDZBMDM2NzYKKzoxMDNEOTAwMDAwRjcwNjlCMzYwODAwNzQwMkNENTRFODM5MEE4MTI2RTQKKzoxMDNEQTAwMDlCMzZGRkJGRThDODAwNzJBRkI4OEIwM0NEMzlFOTlDRTIKKzoxMDNEQjAwMEZGRjYwNjlFMzZGRjc1NThBM0I2MzRFOEZFMDA4MTI2NEUKKzoxMDNEQzAwMEMyMzRGRkJGRjYwNjlEMzY4MDc0NDhGNzA2OUIzNjAwNjYKKzoxMDNERDAwMDIwNzQyMkY3MDY5QjM2MDA0MDc1MDhFODkxMDA3MjMwODcKKzoxMDNERTAwMEU5MjIwMDI2QTEwQzAwQTk2MDAwNzUyNDgxMEU2NjM3MjcKKzoxMDNERjAwMDAwMDhFOUQyRUNDNzA2NEMzNzAwMDBFODcxMDA3MjEwRTkKKzoxMDNFMDAwMEI4OEIwM0NEMzlFOEQzMDA3MzA2ODEwRTk5MzY4MDAwNTQKKzoxMDNFMTAwMEU5QjRFQzgwM0U5RDM2MDQ3NTBDODAzRTlFMzYwNjc0RjcKKzoxMDNFMjAwMDQ2QzYwNjlGMzYwNkY3MDY5QjM2MDAwMTc0MEM4MDNFOTgKKzoxMDNFMzAwMDlEMzYwODc1MDVDNjA2OUYzNjBBRTgzMjAwNzJEMUU4M0QKKzoxMDNFNDAwMDk5MDA4MDNFOUQzNjA4NzUxMzgxMEU5OTM2ODAwMEY3RTMKKzoxMDNFNTAwMDA2OUIzNjAwMjA3NTA4Qjg4QjAzQ0QzOUU5NjhFQ0M2OUYKKzoxMDNFNjAwMDA2OUYzNjBBRTk2MEVDQjg4NjAzQ0QzQUU5NThFQzI2OUQKKzoxMDNFNzAwMEExMEMwMEE5NjAwMDc0MDg4MTI2QzIzNEZGQkZGOUMzRjkKKzoxMDNFODAwMEY3MDY5QjM2MDA0MDc0MTM4MTBFNjYzNzAwMDhFODRBMzcKKzoxMDNFOTAwMDAwNzMwNjgxMEU5OTM2ODAwMEY5QzM4MTBFOUIzNjAwQUYKKzoxMDNFQTAwMDQwODAyNjZGMzdGRTgxMjY5QjM2N0ZGRkM2MDZBMDM2RjAKKzoxMDNFQjAwMDAwRjhDMzgxMEU5OTM2MDAwMUU5MjFFQzI2QTEyMDAwMEIKKzoxMDNFQzAwMEEzRkIzNkEzQUEzNDI2QTEyMjAwQTNGRDM2QTNBQzM0NUIKKzoxMDNFRDAwMDI2QTEyNDAwQTNGRjM2QTNBRTM0QzNBMTA1MzcyNjNCOTkKKzoxMDNFRTAwMDA2MjAwMDc1MTlBMTA3MzcyNjNCMDYyMjAwNzUwRkExOTEKKzoxMDNFRjAwMDA5MzcyNjNCMDYyNDAwNzUwNUU4MDIwMEY4QzM1MTFFNjkKKzoxMDNGMDAwMDA2OEJDNzhEMzYyMDAwQkYwNTM3QjkwMzAwMUUwNjFGN0MKKzoxMDNGMTAwMDA3RjNBNThCRjg4RDM2MjAwMEJGQTAzNEI5MDMwMEYzNUEKKzoxMDNGMjAwMEE1MDcxRjU5OEJGOEExMDczN0EzQTYzNEExMDkzN0EzMEEKKzoxMDNGMzAwMEE4MzRGOUMzQzYwNkI2MzQwMUU5OEJFQkU4ODcwODhCRDEKKzoxMDNGNDAwMEYwMDUxMjAwMjYyOTA2MEUwMDI2OEI0NDJBMjYzQTA2ODIKKzoxMDNGNTAwMDBFMDA3NTVCMjY4MzJFMEUwMDAyODBGQzI3NzU1MDI2MEUKKzoxMDNGNjAwMDhCNDQyQ0E5RkZGRjc1NDc4QkZFMzNDMDI2RjY0NTNDREEKKzoxMDNGNzAwMDgwNzQwNjI2OEE0NTNBMjQxRjAzRjgyNjgwN0Q0NTA5NjkKKzoxMDNGODAwMDc1MkQ4Q0MyOEUwNjM4MzQ4RURBOEIwRTBFMDAyNjg5ODMKKzoxMDNGOTAwMDBFMEUwMDhENzQyQ0JGMTgwMEYzQTQzM0MwOEVEODI2RUIKKzoxMDNGQTAwMEM3MDYwNDAwQjUzRjI2QzcwNjA2MDAwNjAwQ0Q1MEI4NzgKKzoxMDNGQjAwMDA2ODBFOUVGRTkyNkExMEMwMEEzOTMzNzgzMEU5OTM2MUEKKzoxMDNGQzAwMDAxRTkwMEVCMjY4MDNFMUMwMEZGNzUyRjI2ODAzRTFFNzcKKzoxMDNGRDAwMDAwRkY3NTI3MjZGNzA2MEMwMDQwMDA3NTFCQTFEMTM2OUYKKzoxMDNGRTAwMDI2QTMxQTAwQTFEMzM2MjZBMzFDMDBBMUQ1MzYyNkEzRUEKKzoxMDNGRjAwMDFFMDBCODBBODBFODM2MDdFOUUyRUFGRjA2OTAzNEJFMDAKKzoxMDQwMDAwMDBBMDBDNjA2QjYzNDAxRjYwNjlEMzY4MDc1MDU4MzBFOTUKKzoxMDQwMTAwMEMyMzQwMUU5QjZFQTgwM0U5RDM2MEE3NTBGMjZBMTBDMkUKKzoxMDQwMjAwMDAwMjUwNzAwM0QwNDAwNzUwM0U4NzkwMEExRjMzNjg2RkEKKzoxMDQwMzAwMEUwRTcxRUEzRTMzNjgxMjYwQjM3MDAwMzgxMjYwRDM3MDgKKzoxMDQwNDAwMDdCN0Y4MzBFMEQzNzQ4RTgxRTAwMjZBMTBDMDAyNTA3NTQKKzoxMDQwNTAwMDAwM0QwNDAwNzQwOTI2RjcwNjBDMDAyMDAwNzUwNkI4MjAKKzoxMDQwNjAwMDAxMDBFOTNGRTlFOTVGRUFDNzA2NDEzNzAwMDBCODdGOTAKKzoxMDQwNzAwMDAzQ0QzQUExMUQzN0EzQzQzNDg2RTA2ODdGMDMxRkEzOTQKKzoxMDQwODAwMDA2MDAzM0MwOEVEOEExMEIzN0EzQjIzNEExMEQzN0EzREQKKzoxMDQwOTAwMEI0MzRBMUYzMzZBM0M4MzRBMUVGMzZBMzlDMzRBMUYxMDQKKzoxMDQwQTAwMDM2QTM5RTM0QzM4MDBFOUQzNjgwQkUwMDAwRThCNDA3NjAKKzoxMDQwQjAwMEI4N0IwM0NEM0FCODdDMDNDRDM5QzcwNjMzMzcwMjAwNEQKKzoxMDQwQzAwMEExRTUzNkU3MkVBMUU3MzZFNzNFQjg4MjAzQ0QzQUY3MDEKKzoxMDQwRDAwMDA2OUIzNjAwMjA3NTAzRThGRDA2QTFEMzM2QTNFRjM2MTQKKzoxMDQwRTAwMEEzOUMzNEExRDUzNkEzRjEzNkEzOUUzNEMzRjYwNjlEMTYKKzoxMDQwRjAwMDM2ODA3NDMxQkUyMjAwRTkxNzAwRjYwNjlEMzY4MDc0QzIKKzoxMDQxMDAwMDI0QkUyMzAwRTkwQTAwRjYwNjlEMzY4MDc0MTdCRTI0RkIKKzoxMDQxMTAwMDAwNTZFOEE4MDU4Q0MwM0RGRkZGNUU3NDA1RThEN0VGQTgKKzoxMDQxMjAwMENENTBFOTFGRThFOTlGRTkwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDQxMzAwMEI4ODQwM0NEM0FCODhBMDNDRDM5RTlGNzAwODAzRUEwQjAKKzoxMDQxNDAwMDM2MDg3NTJFQTlEMDA3NzUyQ0ExQjEzNjBEMDAwNEU3RUQKKzoxMDQxNTAwMDA4RTUwMDI1RkY3M0U3MDBCODhBMDNDRDNBRThDMzA2RjcKKzoxMDQxNjAwMDMzQzBFNzBFRTUwQTI1QzMxN0U3MEFDRDU0QzYwNkEwRkIKKzoxMDQxNzAwMDM2MDBFOTY4RTlCRTA0MDBFOTNGRTk4MzI2OUIzNkJGQzMKKzoxMDQxODAwMEM2MDY3MTM3MDNCODg2MDNDRDNBQjg4ODAzQ0QzQUI4NkUKKzoxMDQxOTAwMDgzMDNDRDNBQjg4NzAzQ0QzOTgxMEVDMjM0MDAyMEU5QkMKKzoxMDQxQTAwMDkyMDBFODQ5MDZCODg3MDNDRDM5QkJGRjdGQ0Q1M0I4RUQKKzoxMDQxQjAwMDg0MDNDRDNBQjg4ODAzQ0QzQUI4OEIwM0NEM0FCODgzOUYKKzoxMDQxQzAwMDAzQ0QzQUI4ODYwM0NEM0FCODg1MDNDRDNBQzNFNTAwQUUKKzoxMDQxRDAwMDI1RkY1M0U3MDA4MzBFQzIzNDQwODMyNkMyMzRFRkU4NDQKKzoxMDQxRTAwMDBDMDZCQkZGN0ZDRDUzQjg4QTAzQ0QzQUI4ODUwM0NEMEIKKzoxMDQxRjAwMDNBQjg4NjAzQ0QzQUI4ODMwM0NEM0FCODg3MDNDRDNBQUYKKzoxMDQyMDAwMEI4OEIwM0NEM0FCODg0MDNDRDNBQjg4OTAzQ0QzQUMzMEQKKzoxMDQyMTAwMDgzMEVDMjM0NTBFODE4MDRFOEQzMDVGNjA2NkYzNzAxNjAKKzoxMDQyMjAwMDc1MTJCODg5MDNDRDM5ODMzRTBGMzcwMDc1MDZDNzA2NkUKKzoxMDQyMzAwMDBGMzcwNDAwQTE5RDM2ODBGQzA4NzQwNUI4ODQwM0NEQjcKKzoxMDQyNDAwMDM5RTUwMjBEMDEwODI1RUZGRkU3MDJBMTlEMzY4NkUwNjIKKzoxMDQyNTAwMDMyRTQ4QkYwRDFFRTMzQzAwRDIwMDAwOTA2QUQzNkExNUIKKzoxMDQyNjAwMEFEMzZFNzA0RTk1M0U4RTk1QUU4MzNDMEEwMUIzN0QxN0IKKzoxMDQyNzAwMEUwM0EwNkEwMzY3NTAzRTlCQUZGRTk2MEU4QzcwNjQxRUYKKzoxMDQyODAwMDM3MDAwMEU4QzFFMUU4NkEwNjMzQzAwRDQxMDBFNzU2OTcKKzoxMDQyOTAwMEExQjEzNjBEMDAxMEU3MDhFNTAyMjVGOUZGMEQwMzAwNzYKKzoxMDQyQTAwMEU3MDJBMUIzMzZFNzBBQTFBRjM2RTcwNkExQUQzNkU3Q0MKKzoxMDQyQjAwMDA0RTg3QzAzRTg5RjAzQzcwNjFEMzcwMEM4QzcwNjBCNDgKKzoxMDQyQzAwMDM3MDAwM0M3MDYwRDM3N0I3RjMzQzBBMzk5MzZBMzlCMDYKKzoxMDQyRDAwMDM2QTM5RDM2QTM5RjM2QTM0QzM3QTNGMzM2QTNFRjM2MDAKKzoxMDQyRTAwMEEzRjEzNkU4ODJGREM2MDY5RjM2MDJFOUVGRTdFNTAyNTQKKzoxMDQyRjAwMDBEMDE4ODI1RUZGRjBEMDA0MDBEMDAwNEU3MDJFOEYyRjQKKzoxMDQzMDAwMDA1RTUwQTBENDAwMEU3MEEzM0MwQTM4MTM3QTM4NTM3Q0UKKzoxMDQzMTAwMEEzODMzN0EzODczN0EzODkzN0U1MDAwRDAwODRFNzAwMUYKKzoxMDQzMjAwMEI4OEMwM0NEMzlCODgwMDBDRDM1QzcwNkFBMDJGRkZGOEYKKzoxMDQzMzAwMEU1MDAyNUZGN0JFNzAwODEwRTlBMzc4MDAwQjg3RTAzRjkKKzoxMDQzNDAwMENEMzkzM0MwRTcwRUJFMDgwMDhFMDYzODM0RThBN0VEM0QKKzoxMDQzNTAwMDgzMjZFRjM0REZGRjA2ODEzN0NENTA4MzBFRUYzNDIwMDQKKzoxMDQzNjAwMEMzRjcwNjlBMzc4MDAwNzQzREE5RDAwNzc0MTBBOTAwREUKKzoxMDQzNzAwMDA0NzQxMjMzQzBFNzBFRkYwNjg3MzdFOUQyRkZGRjA2NDkKKzoxMDQzODAwMDg1MzdFOUNCRkZGRjA2ODMzN0U5QzRGRjgzMjY5QTM3RDkKKzoxMDQzOTAwMDdGQTE4OTM3MDMwNjg3MzczRDA1MDA3RjAxQzNCQkZGMzcKKzoxMDQzQTAwMDdGQ0Q1M0U5MDAwMEU1MDIyNUZGRkIyNUVGRkYwRDAxNUUKKzoxMDQzQjAwMDAwRTcwMkExODMzNzNCMDY0NjM3N0YyQUExODUzNzNCQkEKKzoxMDQzQzAwMDA2NDgzNzdDMjFBMTg5MzcwMzA2ODczNzNEMDUwMDdGRTIKKzoxMDQzRDAwMDE1QzYwNjlGMzYwNEU1MDIyNUZGRjcwRDAxMDAyNUVGRkYKKzoxMDQzRTAwMEZGRTcwMkU5RjdFNkJFMDEwMEY3MDY5QjM2MDMwMDc0MUIKKzoxMDQzRjAwMDBBODMyNjlCMzZGQzgzMEVDMjM0MDRFOUQwRTZCODdCRTAKKzoxMDQ0MDAwMDAzQ0QzOUU1MDIwRDAxNjAyNUVGRkZFNzAyQzcwNkYxOTQKKzoxMDQ0MTAwMDM0MjAwM0I4OEUwM0NEMzlDMzgxMjZDMjM0N0ZGRjgwOTgKKzoxMDQ0MjAwMDBFNkYzNzAxRjcwNjlCMzYwMzAwNzREMkI4N0IwM0NEQkQKKzoxMDQ0MzAwMDNBQjg3RDAzQ0QzOTgzMjY5QjM2RUYzM0MwQjA4QUEyQ0MKKzoxMDQ0NDAwMDlGMzZBMjlEMzZDNzA2NEMzNzAxMDBDNzA2MEYzNzA0QkEKKzoxMDQ0NTAwMDAwRjcwNjlCMzY0MDAwNzUwNkM3MDYwRjM3MDMwMEI4MDUKKzoxMDQ0NjAwMDhEMDNDRDM5RTgwMEQ1RTUwMjBEMDE0MDI1RUZGRjhCMjYKKzoxMDQ0NzAwMEQ4Qjg3QzAzQ0QzOUM3MDYzMzM3MDIwMDhCQzMwRDAwOTMKKzoxMDQ0ODAwMDIwMjVGOUZGMEIwNkU4M0FFNzAyQzNGRjBFRjEzNDc1NjkKKzoxMDQ0OTAwMDAxQzNFNTRFQTkwMTAwNzUxMkU1MDBBOTAwMDQ3NTA1RTgKKzoxMDQ0QTAwMDBEMDAwNEU3MDBCODhFMDNDRDM5QzNFNTAwQTkwMDA0NzAKKzoxMDQ0QjAwMDc0RjMyNUZGRkJFNzAwRTlFQkZGQzYwNkEwMzYwNDgzOTMKKzoxMDQ0QzAwMDI2OUIzNkZDODEwRTlCMzY4MDAwRTkxMEU2Qjg4RTAzRjEKKzoxMDQ0RDAwMENEM0FDRDU0ODEwRUFGMzYwMDE4QTFBRjM2RTcwNkI4RkQKKzoxMDQ0RTAwMDdCMDNDRDM5QTFEMzM2QTM4RjM3QTFENTM2QTM5MTM3MUUKKzoxMDQ0RjAwMEM3MDY4QjM3MDIwMEM3MDY4RDM3MDIwMDgzMEU5OTM2MzgKKzoxMDQ1MDAwMDQwRTlEOUU1ODAzRTlGMzYwNjc1MTVBOUQwMDc3NUVDQzAKKzoxMDQ1MTAwMDI1MDAxODc1MEVGRjBFOEIzNzc1RTFDNjA2OUYzNjA4MEQKKzoxMDQ1MjAwMEU5QkFFNUZGMEU4RDM3NzVEM0JFMDgwMEU5OUZFNUI4RkYKKzoxMDQ1MzAwMDdCMDNDRDM5RjcwNjlCMzYwMDIwNzQwOEM2MDY5RjM2RUMKKzoxMDQ1NDAwMDBBRTkwRDAwRjcwNjlCMzYwMDQwNzQwQkI4OEIwM0NEQ0IKKzoxMDQ1NTAwMDM5ODEwRTk5MzY4MDAwRTk4M0U1Qjg3QjAzQ0QzOUM3RjAKKzoxMDQ1NjAwMDA2OEIzNzA0MDBDNzA2OEQzNzA0MDA4MTBFOTkzNjAwOEMKKzoxMDQ1NzAwMDAyRTk2OUU1RjYwNjlEMzY4MDc1MUJBOUQwMDc3NUVCNDMKKzoxMDQ1ODAwMEE5MDAxODc1MENGRjBFOEQzNzc1RTBFODE3RkJFOTRDOTQKKzoxMDQ1OTAwMEU1Qjg4MjAzQ0QzOUMzRkYwRThCMzc3NUNFQkUwOTAwNTcKKzoxMDQ1QTAwMEU5MkJFNUM3MDYzRDM3MDAwMEM3MDY5QjM2MDAwMEU4NEIKKzoxMDQ1QjAwMDNDMDI4MTI2QUYzNkZGRTdBMUFGMzZFNzA2ODEyNjlCOTYKKzoxMDQ1QzAwMDM2RkY3RkU1MDIwRDAxMDAyNUVGRkYyNUZGREZFNzAyNDMKKzoxMDQ1RDAwMEJCRkY3RkNENTMzM0MwQTM5RDM2QTM5RjM2RTg1MDAwNjkKKzoxMDQ1RTAwMEU4NzMwMEI4ODEwM0NEMzlDM0Y3MDY5QjM2MDMwMDc0MjYKKzoxMDQ1RjAwMDBEQzYwNjlGMzYwMkM2MDZBMDM2MDBFOURGRTQ4MzBFMkMKKzoxMDQ2MDAwMDlCMzYxMEM3MDY5OTM2MDAwMEU4RTcwMkU1NTYwRDAyMTIKKzoxMDQ2MTAwMDAwRTc1NkM3MDZBODAyMDAwMDhCMzYzRDM3RTg0NDAyODMKKzoxMDQ2MjAwMEM2MDZBMDM2MEVFOUI1RTQwMDAwMDAwMDAwMDAwMDAwNTgKKzoxMDQ2MzAwMDA2Qjg4QTAzQ0QzQUI4ODUwM0NEM0FCODg2MDNDRDNBOTkKKzoxMDQ2NDAwMEI4ODMwM0NEM0FCODg3MDNDRDNBQjg4QjAzQ0QzQUI4RDcKKzoxMDQ2NTAwMDg4MDNDRDNBMDdDMzA2Qjg4ODAzQ0QzQUI4N0IwM0NEQUIKKzoxMDQ2NjAwMDNBQjg4MjAzQ0QzQUI4N0YwM0NEM0FCODdDMDNDRDNBNEQKKzoxMDQ2NzAwMEI4N0UwM0NEM0FCODgwMDNDRDNBQjg4MTAzQ0QzQUI4QkQKKzoxMDQ2ODAwMDg0MDNDRDNBQjg4OTAzQ0QzQUI4N0QwM0NEM0FCODhEQ0QKKzoxMDQ2OTAwMDAzQ0QzQUM3MDY0MTM3MDAwMDA3QzMwNjhFMDYzODM0RkIKKzoxMDQ2QTAwMDFGOEIwRTBFMDAyNjg5MEUwRTAwQkUxODAwQkYxODAwQ0MKKzoxMDQ2QjAwMEYzQTQwNjFFMDdDRDM0MDczM0MwOEVEOEMzMjZGNjA2RjIKKzoxMDQ2QzAwMDIwMDA4MDc0NDQzM0MwMjZBMDI2MDAyNDFGOEJGMDI2Q0YKKzoxMDQ2RDAwMDhCNUMyODg5MUU2QTM3MDY4RTA2MzgzNDFGQzBFMzA0QjcKKzoxMDQ2RTAwMDI2ODg1QzI4OEJDNkI5MDYwMEJFMjAwMEJGMUEwMEYzREUKKzoxMDQ2RjAwMEE0OEJDODgzQzcwNkYzQTQyNjgxMjYyNjAwMUY4MDI2MjQKKzoxMDQ3MDAwMDgxMzYyNjAwMDA4MEU5QTlGRjI2OEIxRTI4MDA4OTFFMUQKKzoxMDQ3MTAwMDZBMzcwNjhFMDYzODM0MUZDMEUzMDQyNjg4MUUyODAwMzgKKzoxMDQ3MjAwMEI5MDYwMEJFMjAwMEJGMUEwMEYzQTRFOTg0RkY4NkM0QzYKKzoxMDQ3MzAwMEEzNjgzN0U4ODdGRkY3MDY2QTM3MEYwMDc0MTA4MDNFREEKKzoxMDQ3NDAwMDlFMzYwMDc1MDlCRTAwMDBFOEFDRTlDRDUwQzNDMzUwRTkKKzoxMDQ3NTAwMDU2MDYzM0MwMjZGNjA2MjAwMDgwNzQwNjI2QTAyNjAwRTIKKzoxMDQ3NjAwMDI0MUY4QkYwMjY4QjVDMjY4NkZCODNFQjA0NzQ0RjgzMUYKKzoxMDQ3NzAwMEM2MkE4Q0MwOEVEOEI5MDcwMDMzQzA4RUMwQkY3MjM3MkUKKzoxMDQ3ODAwMEYzQUIzM0M5OEEwQzgwRjkwMDc1MDNFOTMwMDAzQkQ5REIKKzoxMDQ3OTAwMDczMDNFOTI5MDAyQkQ5OEE0NDAxMjUzRjAwNzQxOTNEOTAKKzoxMDQ3QTAwMDBCMDA3RDE0RDFFMDhCRjgyRThCQkQ1QzQ5OEQ3NDAyMUIKKzoxMDQ3QjAwMDgzRTkwMkYzQTRFOTAyMDAwM0YxMjNEQjc1QzQzM0MwRUIKKzoxMDQ3QzAwMDhFRDgwNzVFNThDMzMzQzAyNkY2MDYyMDAwODA3NDA2RDQKKzoxMDQ3RDAwMDI2QTAyNjAwMjQxRkMzRTUwQTI1QzNCRkU3MEFCODg2MjIKKzoxMDQ3RTAwMDAzQ0QzOUI4ODMwM0NEMzk4MTI2OUIzNjdDREZCODg1NkMKKzoxMDQ3RjAwMDAzQ0QzQUU1MDIyNUZGRjMwRDAxMDAyNUVGRkZFNzAyQTcKKzoxMDQ4MDAwMEU1MDAyNUZGNTNFNzAwQTFFNzM2MjVGRkZFQTNFNzM2QzUKKzoxMDQ4MTAwMEU3M0U4MzI2OTkzNkNGODEwRUFGMzYwMDEwQTFBRjM2MjIKKzoxMDQ4MjAwMEU3MDZDM0U1MDIwRDAxMEMyNUVGRkZFNzAyQTFFNzM2MUQKKzoxMDQ4MzAwMDBEMDAwMUU3M0VBM0U3MzY4MTBFOUIzNjAwMjA4MzBFNzQKKzoxMDQ4NDAwMDk5MzYyMDgxMjY5QjM2N0NCRjgxMEVBRjM2MDAxMEExQTEKKzoxMDQ4NTAwMEFGMzZFNzA2Qjg4NjAzQ0QzOUI4ODUwM0NEMzlCODgzQkUKKzoxMDQ4NjAwMDAzQ0QzQUMzMEJGNjc1NDkwNjhFMDYzMjM0ODAzRUUwMUUKKzoxMDQ4NzAwMDM0MDE3NTFCMjY4OTM2MDYwMDhFMDYzMjM0MjZGNzA2NkIKKzoxMDQ4ODAwMDBBMDAwMDIwNzQwNzI2ODEwRTA4MDAwMDIwMDdDMzgwNUMKKzoxMDQ4OTAwMDNFRTMzNDAxNzUxOTI2ODkzNjA2MDA4RTA2MzIzNDI2MjkKKzoxMDQ4QTAwMEY3MDYwQTAwMDAxMDc0MDcyNjgxMEUwODAwMDAxMDA3QTIKKzoxMDQ4QjAwMEMzRTlCNEZGNTA1MTU3MzNDMEI5MDYwMDhFQzBCRkQxMTEKKzoxMDQ4QzAwMDM2RjNBRTVGNzQwQzI2RjYwNjAwMDBDMDc1MDRGODU5ODYKKzoxMDQ4RDAwMDU4QzNGOUU5RjlGRjhCMDUwQjQ1MDIwQjQ1MDRDMzUyOTgKKzoxMDQ4RTAwMDUwRTUwNjI1MUUwMDNEMUUwMDc1RjZCODAxODBFNzVBMEEKKzoxMDQ4RjAwMDU4NUFDM0U4RTlGRjUwRTUwMjI1RkY3RjBEMDEwMDI1NjYKKzoxMDQ5MDAwMEVGRkZFNzAyMEQwMDgwRTcwMkExQUQzNkU3MDRBMUFGOUIKKzoxMDQ5MTAwMDM2RTcwNjU4QzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDQ5MjAwMDJFMkJDRTQxMTA0MjdCNDEzMDQxQTI0MUFGNDU0NDI5NUMKKzoxMDQ5MzAwMEM3MkFDNzJBNjAzOUY0M0E1QzNDMDkzREIxM0QzNDNGOEYKKzoxMDQ5NDAwMEM3MkEzQzNGQzcyQUM0M0YxNjQwMTY0MEVENDBGQTQwRjQKKzoxMDQ5NTAwMDA3NDFDNzJBQzcyQUM3MkFDNzJBRDY1MjAwMDAwMTM3RUIKKzoxMDQ5NjAwMEU5MzZGMzM2RUYzNjFEMzcwRDM3MEIzNzlDMzcwMzM3RjMKKzoxMDQ5NzAwMEZCMzY2MjJENDAwNkQxMkRGNDAxQkE0NDQwMDY4QzQzMkIKKzoxMDQ5ODAwMDY0MDBFODJDQzgwMEQ4MkIwNTAwRTk0NTUwMDA5NzQ1ODUKKzoxMDQ5OTAwMEZBMDBBRTJEMDQwMTZBNDIwMjAwRjYyQ0JDMDI5MzJERUYKKzoxMDQ5QTAwMERDMDUxRDJENjQwMEExMkQxNDAwRDczQTA4MDc4MTJEQzgKKzoxMDQ5QjAwMDY0MDBCMzNFMDIwMDMwNDM2NDAwQzUyQ0Y0MDE4QjQ0MTQKKzoxMDQ5QzAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDQ5RDAwMDgwM0VGRDM0MDI3NDBDRTgyMDA1QzcwNkExMzYwMDAwQjUKKzoxMDQ5RTAwMEU5OUFGOEZGMDZDMDMzRTgxMDA1OEIzNjNEMzdFODczQzcKKzoxMDQ5RjAwMEZFQzNDRDM0RTlFODA1QzcwNkEzMzYwMDAwQzcwNjQxNkIKKzoxMDRBMDAwMDM3MDAwMEU4RURGRTMzQzAwRDQxMDBFNzU2QTFCMTM2OTYKKzoxMDRBMTAwMDBEMDAxMEU3MDhBMUIzMzZFNzBBQTFBRjM2RTcwNkExRkIKKzoxMDRBMjAwMEFEMzZFNzA0RTgyQjA5QzcwNjFEMzcwMEM4QzcwNjBCREIKKzoxMDRBMzAwMDM3MDAwM0M3MDYwRDM3N0I3RjMzQzBBMzlCMzZBMzlEOEEKKzoxMDRBNDAwMDM2QzcwNjRDMzcwMTAwQzYwNjlFMzZGRkM3MDYwNTM3MzcKKzoxMDRBNTAwMDAwMDBDNzA2MDczNzAwMDBDNzA2MDkzNzAwMDBBM0YzQTgKKzoxMDRBNjAwMDM2QTNFRjM2QTNGMTM2RThGRUY1RTUwMjI1RjlGRjBEOTIKKzoxMDRBNzAwMDAzMDAwRDAwODgyNUVGRkYwRDAwNDAwRDAwMDRFNzAyNDQKKzoxMDRBODAwMEI4OEYwM0NEMzlCODgwMDBDRDM1QzcwNkFBMDJGRkZGMjUKKzoxMDRBOTAwMEExQTkzNkEzQTczNjBEMDBBNDBEMDAwOEU3MDBBM0E5MUQKKzoxMDRBQTAwMDM2QzcwNkEzMzYwMTAwQzcwNkE1MzYwQzAwODMzRUE1MEYKKzoxMDRBQjAwMDM2MDA3NTA5QzcwNjNEMzcwNTAwRTkxM0ZGRkYwRUE1NEYKKzoxMDRBQzAwMDM2QkUxMTAwRTgyMjA1Qjg5MDAzQ0QzOUMzODMzRUEzNUEKKzoxMDRBRDAwMDM2MDE3NEQ5QzNCODkwMDNDRDNBMjZBMDJCMDAyNjhCOUIKKzoxMDRBRTAwMDFFMkMwMENEMzQ4MzNFQTMzNjAxNzQwM0U5RjAwNDNDNTAKKzoxMDRBRjAwMDBGNzUxRTgxRkIwMDAyNzUxODI2QTEyMDAwQTMwNTM3NDMKKzoxMDRCMDAwMDI2QTEyMjAwQTMwNzM3MjZBMTI0MDBBMzA5MzdFOTA5MUIKKzoxMDRCMTAwMDAwQzcwNjNEMzcwMTAwRTlCNkZFQzcwNkEzMzYwMjAwMEUKKzoxMDRCMjAwMEM2MDY5RTM2RkZFOENCRkRFODFDRDkzM0MwQTM4NTM3MDcKKzoxMDRCMzAwMEEzODMzN0EzODczN0EzODkzN0I4OTEwM0NEMzlCODgwQ0EKKzoxMDRCNDAwMDAwQ0QzNUM3MDZBQTAyRkZGRkU1MDAyNUZGNTNFNzAwQTkKKzoxMDRCNTAwMDgxMEU5QTM3ODAwMEI4OTIwM0NEMzkzM0MwRTcwRUJFN0MKKzoxMDRCNjAwMDA4MDA4RTA2MzgzNEU4OEVFNTI2QzcwNjA0MDA3RDRCMjMKKzoxMDRCNzAwMDgzMjZFRjM0REZDRDUwODMwRUVGMzQyMEMzRjcwNjlBM0YKKzoxMDRCODAwMDM3ODAwMDc0MzJBOUQwMDc3NDBDQTkwMDA0NzQwRTMzNjYKKzoxMDRCOTAwMEMwRTcwRUU5REFGRkZGMDY4NTM3RTlEM0ZGRkYwNjgzOUEKKzoxMDRCQTAwMDM3RTlDQ0ZGQzcwNjNEMzcwMTAwRTkzNkZFODMyNjlBNzgKKzoxMDRCQjAwMDM3N0ZCQkZGN0ZDRDUzRTUwMDBEMDBBQ0U3MDBFNTAyN0EKKzoxMDRCQzAwMDI1RkZGQjI1RUZGRjI1RkZGNzBEMDEwMEU3MDJBMTgzN0QKKzoxMDRCRDAwMDM3M0IwNjQ2Mzc3RkNEQTE4NTM3M0IwNjQ4Mzc3Q0M0MzcKKzoxMDRCRTAwMEM3MDZBMzM2MDMwMEJFMTMwMEU4RkQwM0I4OTMwM0NENDgKKzoxMDRCRjAwMDM5Qjg5NDAzQ0QzOUI4OTYwM0NEMzlCODk1MDNDRDM5N0EKKzoxMDRDMDAwMEJFMDYwMEU4RTMwM0U5RDYwMzgzM0VBMzM2MDM3NDAxM0UKKzoxMDRDMTAwMEMzQkUxMzAwRThEMjAzQjg5NDAzQ0QzOUMzQjg5NDAzREMKKzoxMDRDMjAwMENEM0EyNkEwMkIwMDI2OEIxRTJDMDBDRDM0ODMzRUEzMkMKKzoxMDRDMzAwMDM2MDM3NDAzRTlBODAzM0MwRDc1M0U4M0ZCMDA3NTM5MDgKKzoxMDRDNDAwMEU1MDIwRDAwMjBFNzAyQjg5MzAzQ0QzQUM3MDZBMzM2NkMKKzoxMDRDNTAwMDA0MDBCRTAwMDBFODBDRkNDNjA2OUQzNjgwQzYwNjlFMTkKKzoxMDRDNjAwMDM2MDBDNzA2MzMzNzAyMDBCODlBMDNDRDM5RThGQzAwOTYKKzoxMDRDNzAwMEM3MDY0QzM3MDAwMEU5NjYwM0M3MDYzRDM3MDgwMEU5NjAKKzoxMDRDODAwMDYxRkQ4MzNFQTMzNjAzNzUwOUM3MDYzRDM3MDUwMEU5N0MKKzoxMDRDOTAwMDUxRkRFOTRBMDM4MzNFQTMzNjA0NzQxMjgzM0VBMzM2RDIKKzoxMDRDQTAwMDA1NzQwQkNEMzRDNzA2M0QzNzA3MDBFOTM1RkRDNzA2NEYKKzoxMDRDQjAwMEEzMzYwNjAwQzYwNjlFMzZGRkI4OUEwM0NEM0FCODk5QzkKKzoxMDRDQzAwMDAzQ0QzQUI4OTYwM0NEM0FCODk3MDNDRDM5Qjg5ODAzRDcKKzoxMDRDRDAwMENEMzlCODlCMDNDRDM5RTkxOEZEQ0QzNDgzM0VBMzM2RDkKKzoxMDRDRTAwMDA0NzcxODgzM0VBMzM2MDM3NTA4RjcwNjlCMzYwMDAxNDgKKzoxMDRDRjAwMDc1MDlDNzA2M0QzNzAxMDBFOUU4RkNFOUUxMDJDRDM0NUEKKzoxMDREMDAwMDgzM0VBMzM2MDI3NzA5QzcwNjNEMzcwMTAwRTlEM0ZDOEQKKzoxMDREMTAwMDgzM0VBMzM2MDQ3NzA1Qjg5NjAzQ0QzOUU5QzAwMjgzRjQKKzoxMDREMjAwMDNFQTMzNjAzNzUxMDI2QTEwQzAwMjUwNzAwNTAzRDA0NTQKKzoxMDREMzAwMDAwNzUwM0U4MzYwMEExRjMzNjg2RTBFNzFFQTNFMzM2RUMKKzoxMDRENDAwMDgxMjYwQjM3MDAwMzgxMjYwRDM3N0I3RjgzMEUwRDM3QkQKKzoxMDRENTAwMDQ4RTgxNEYzNTgzRDA0MDA3NDA5MjZGNzA2MEMwMDIwQjcKKzoxMDRENjAwMDAwNzUwNkI4MDEwMEU5N0EwMkU5ODZGQ0ExRTUzNkU3OUMKKzoxMDRENzAwMDJFQTFFNzM2RTczRUExRDMzNkEzOUMzNEExRDUzNkEzQjYKKzoxMDREODAwMDlFMzRDMzI2ODAzRTFDMDBGRjc1MkYyNjgwM0UxRTAwRTkKKzoxMDREOTAwMEZGNzUyNzI2RjcwNjBDMDA0MDAwNzUxQkExRDEzNjI2QUIKKzoxMDREQTAwMEEzMUEwMEExRDMzNjI2QTMxQzAwQTFENTM2MjZBMzFFMjQKKzoxMDREQjAwMDAwQjgwQTgwRTkyQzAyRTkzOEZDRkYwNjkwMzRCRTBBRUMKKzoxMDREQzAwMDAwQzYwNkI2MzQwMUY2MDY5RDM2ODA3NTA1ODMwRUMyMTAKKzoxMDRERDAwMDM0MDFDRDM0RTkwQ0ZDODMzRUEzMzYwMzc1MDlDNzA2QzQKKzoxMDRERTAwMDNEMzcwNTAwRTlGQ0ZCRTUwMjBEMDMwMDBEMDA4ODBERDEKKzoxMDRERjAwMDAwNDAwRDAwMDRFNzAyQzcwNkEzMzYwNTAwQzYwNjlFNjQKKzoxMDRFMDAwMDM2RkZCRTAyMDBFOEUxMDFCODg5MDNDRDNBQjg5QTAzNDMKKzoxMDRFMTAwMENEM0FCODk5MDNDRDM5Qjg5NzAzQ0QzOUI4OTgwM0NEQjkKKzoxMDRFMjAwMDM5RTlCQjAxODMzRUEzMzYwMzc0MEE4MzNFQTMzNjA0RUIKKzoxMDRFMzAwMDc0MDNFOUFBMDFCRTA2MDBFOEFFMDFCODk1MDNDRDM5QjYKKzoxMDRFNDAwMEU5OUMwMTgzM0VBMzM2MDU3NDAzRTk5MjAxQkUwMjAwOEEKKzoxMDRFNTAwMEU4OTYwMUI4OTkwM0NEMzlFOTg0MDFDNzA2MEYzNzA1RjMKKzoxMDRFNjAwMDAwRTk3QjAxRTUwMjI1RkZERkU3MDJDNzA2QTMzNjA3NUQKKzoxMDRFNzAwMDAwQzcwNjBGMzcwNTAwRTk2NTAxRThENTA0QzYwNjlEQTEKKzoxMDRFODAwMDM2MDBDNzA2OUIzNjAwMDBDNzA2MEYzNzA1MDBDNzA2NjkKKzoxMDRFOTAwMEE4MDIwMDAwQzcwNjRDMzcwMTAwRTUwMjI1RjlGRjBEMDYKKzoxMDRFQTAwMDAzMDAwRDAwODgyNUVGRkYwRDAwNDAwRDAwMDRFNzAyMTAKKzoxMDRFQjAwMEU5NjdGQ0I4OUEwM0NEMzlGNzA2RjQzMzAwMTA3NTA5OTkKKzoxMDRFQzAwMEM3MDYzMzM3MDIwMEU5MTYwMUZGMEUzMzM3NzQwM0U5RDIKKzoxMDRFRDAwMDBEMDFGRjA2OEUzNDgzMEVDMjM0MDhDNzA2M0QzNzAzMkEKKzoxMDRFRTAwMDAwRTlGRkZBQzM1MjUwQkFFMDAwQjgwMDEwRUY1ODVBNzgKKzoxMDRFRjAwMEMzQzcwNjNEMzcwMDAwRTlFOUZBRkFFODU0MDRCODgwNzAKKzoxMDRGMDAwMDAzOEVDMDI2QzcwNjA0MDBEODJCQjg3RjAzOEVDMDI2QTgKKzoxMDRGMTAwMEM3MDYwNDAwRTgyQzMzQzA4RUMwQTFBNzM2QTNBOTM2NkIKKzoxMDRGMjAwMEExQTkzNkU3MDBBMUFCMzZFNzAyQzcwNjA1MzcwMDAwQTYKKzoxMDRGMzAwMEM3MDYwNzM3MDAwMEM3MDYwOTM3MDAwMEM2MDY5RDM2QkEKKzoxMDRGNDAwMDAwQzYwNjlFMzZGRkM3MDY5QjM2MDAwMEM3MDZBMzM2N0UKKzoxMDRGNTAwMDAwMDBDNzA2MEYzNzAwMDBDNzA2QTgwMjAwMDBDNzA2RkEKKzoxMDRGNjAwMDRDMzcwMTAwODEyNkFGMzZGRkU3QTFBRjM2RTcwNkJCMUQKKzoxMDRGNzAwMEZGN0ZDRDUzRTg3Q0Y5RTU1NjBEMDIwMEU3NTZGQkMzRjEKKzoxMDRGODAwMDhEM0VDMDUzOEQzNkYwMzhCOTBFMDA4QjFFMzAzNDg5RkIKKzoxMDRGOTAwMDVDMDIyRThCNDUwMjg5NDQwNjJFOEIwNTg5NDQwNDgzQ0UKKzoxMDRGQTAwMEM3MDQ4M0M2MTBFMkU4Qjg4MDAzOEVDMDI2QzcwNjA0OTMKKzoxMDRGQjAwMDAwRTI1MUI4N0YwMzhFQzAyNkM3MDYwNDAwQjI1MjMzMDgKKzoxMDRGQzAwMEMwOEVDMEM3MDZBMTM2MDEwMEM3MDYwRjM3MDUwMEMzNTMKKzoxMDRGRDAwMDMzRkY4RTA2QTYwMjhCMzZBNDAyMkVGRkE0QTA1M0U4NTAKKzoxMDRGRTAwMDhDREJDM0U4NDhGN0U5RjZGRjhFMDYzODM0RTgwN0UxQzIKKzoxMDRGRjAwMDI2QzcwNjA0MDBERjRGQ0Q1MEMzMjZDNzA2MEEwMDAwQUYKKzoxMDUwMDAwMDAwMjZGRjI2MDQwMENEMzRFOUQ0RkZBMUQxMzYyNjM5OEQKKzoxMDUwMTAwMDA2MUEwMDc1MjJBMUQzMzYyNjM5MDYxQzAwNzUxOEExODAKKzoxMDUwMjAwMEQ1MzYyNjM5MDYxRTAwNzUwRTI2RjcwNjBDMDA0MDAwMDAKKzoxMDUwMzAwMDc0MDU4MzBFNjYzNzQwODEwRUFGMzYwMDEwQTFBRjM2N0YKKzoxMDUwNDAwMEU3MDY4MzNFQTMzNjAyNzUwNUNEMzRFOTU2RkI4MzNFNjEKKzoxMDUwNTAwMEEzMzYwMDc0QjE4MzNFQTMzNjA1NzdBQTI2RjYwNjBBNjYKKzoxMDUwNjAwMDAwRkY3NUEyRThGRERENTBGNjA2OTMzNjIwNzUwM0U5RDIKKzoxMDUwNzAwMDhDMDAyNkExMEMwMDI1MDcwMDNEMDcwMDc1MDNFOTc2OEEKKzoxMDUwODAwMDAwM0QwNTAwNzUwM0U5NkUwMEY3MDZFNjM0MTg4MDc1RUIKKzoxMDUwOTAwMDAzRTk2QTAwRjcwNkU2MzQwMDgwNzQzNTI2ODAzRTI5NkQKKzoxMDUwQTAwMDAwMDI3NTJENTE1NjU3OEQzNjNFMzQ4RDNFMjAwMEI5ODUKKzoxMDUwQjAwMDA2MDBGM0E2NUY1RTU5NzU0NTI2QTEyMDAwQTMzRTM0ODUKKzoxMDUwQzAwMDI2QTEyMjAwQTM0MDM0MjZBMTI0MDBBMzQyMzRFOTI2Q0QKKzoxMDUwRDAwMDAwRjcwNkU2MzQwODAwNzQwQjI2ODAzRTE5MDAwMDc0QzEKKzoxMDUwRTAwMDAzRTkxMzAwRjcwNkU2MzQxMDAwNzQxMjI2QTAyODAwMjYKKzoxMDUwRjAwMEMwRTgwNDIyQzA3NDA3MjZDNzA2MDQwMEZGRkY1ODIzMzcKKzoxMDUxMDAwMEMwNzQwM0U5RERGRTgxMjY5QjM2RkZGRTI2QTEyMDAwNDgKKzoxMDUxMTAwMDNCMDZEMTM2NzUxQTI2QTEyMjAwM0IwNkQzMzY3NTEwMDAKKzoxMDUxMjAwMDI2QTEyNDAwM0IwNkQ1MzY3NTA2ODEwRTlCMzYwMDAxNkMKKzoxMDUxMzAwMDI2QTEyMDAwMjU3RkZGQTNCODM0MjZBMTIyMDBBM0JBMTAKKzoxMDUxNDAwMDM0MjZBMTI0MDBBM0JDMzQ4QkM2ODZDNEEzQzAzNEQxQUEKKzoxMDUxNTAwMEU2ODBGQzA5NzQwM0U4RjZGNUExMDUzNzBCMDYwNzM3NkUKKzoxMDUxNjAwMDBCMDYwOTM3NzQzRTI2QTEyMDAwM0IwNjA1Mzc3NTE3NEMKKzoxMDUxNzAwMDI2QTEyMjAwM0IwNjA3Mzc3NTBEMjZBMTI0MDAzQjA2MTkKKzoxMDUxODAwMDA5Mzc3NTAzRTkxRDAwMjZBMDI4MDAyNDBGM0MwMzc0OEQKKzoxMDUxOTAwMDFCM0MwMDc1MEY4MzNFQTMzNjA0NzQxMEY3MDY5QjM2NDQKKzoxMDUxQTAwMDAwMDE3NDA4MkVGRjk0Rjg1M0U5MzNGRUNEMzRDNzA2OEUKKzoxMDUxQjAwMDNEMzcwMTAwRTkyQ0Y4ODMzRUEzMzYwNTc0MTA4MzNFODkKKzoxMDUxQzAwMEEzMzYwMTdFMDk4M0VFMTYyRUZGOTQyNDU0QzNDRDM0RkEKKzoxMDUxRDAwMEMzMjZBMTBDMDAzREZGN0Y3NDA1MjZGRjI2MDQwMEU5Q0QKKzoxMDUxRTAwMEZERkRBMUY0MzNBOTAwODg3NDBCQTkwMDEwNzUwOThCOEIKKzoxMDUxRjAwMDFFNDMzN0ZGRTNFOTk3MDBDNzA2MzUzNzA1MDBDNzA2QUEKKzoxMDUyMDAwMDQzMzcyODUyRjcwNkY0MzMwMDA4NzQwNkM3MDY0MzM3QkQKKzoxMDUyMTAwMDFBNTJCODgwMDNDRDM5RTlDNUZEQTkwMDA4NzREOUZGMzkKKzoxMDUyMjAwMDBFMzUzNzc1RURFOTMwMDBBOTAwMDg3NUNCRkYwRTM1NTYKKzoxMDUyMzAwMDM3NzVERjgxMEVDMjM0QzAwMEY2MDY5RDM2ODA3NDBGQ0MKKzoxMDUyNDAwMDgxMEU5QjM2MDA4MEM3MDYwRjM3MDIwMEU5OTBGREM3MkMKKzoxMDUyNTAwMDA2M0QzNzAyMDBFOThCRjc4MDI2OUUzNkZGNzUzMEY2NTMKKzoxMDUyNjAwMDA2OUQzNjgwNzQyMEZGMDY5NDM0ODMwRTY2MzcyMDhFQTgKKzoxMDUyNzAwMDA2MzAzNDI2RjcwNjBBMDAwMDAxNzQwNzI2ODEwRTA4NUUKKzoxMDUyODAwMDAwMDAwMUU5MDkwMEM3MDYzRDM3MDQwMEU5NTRGNzgxMzEKKzoxMDUyOTAwMDBFQUYzNjAwMDhBMUFGMzZFNzA2RTUwQUE5MDA4MDc0MTQKKzoxMDUyQTAwMDBFODEyNkFGMzZGRkY3QTFBRjM2RTcwNkU5NDlGRkU5RTEKKzoxMDUyQjAwMDJERkRDNzA2NDEzNzAwMDBCRTI5MDBFODJCRkRFOTFFODEKKzoxMDUyQzAwMEZEQ0QzNDgzM0VBMzM2MDQ3NzA5QzcwNjNEMzcwMTAwODAKKzoxMDUyRDAwMEU5MTBGN0U5MDlGRENEMzRDM0M3MDY5QjM2MDAwMEU4QTUKKzoxMDUyRTAwMDBDRjU4MTI2QUYzNkZGRTdBMUFGMzZFNzA2ODEyNjlCOTYKKzoxMDUyRjAwMDM2RkY3RkU1MDIwRDAxMDAyNUVGRkYyNUZGREZFNzAyMDYKKzoxMDUzMDAwMEJCRkY3RkNENTMzM0MwQTM5RDM2QTM5RjM2RTgyMEYzNjgKKzoxMDUzMTAwMEU4NDNGMzgzMEU5QjM2MTBDNzA2OTkzNjAwMDBFOEQyQTcKKzoxMDUzMjAwMEY1RTU1NjBEMDIwMEU3NTZDNzA2QTgwMjAwMDBCRTAwQ0MKKzoxMDUzMzAwMDAwRTgzMEY1QzYwNkEwMzYwRUI4OUMwM0NEMzlCODgwMUIKKzoxMDUzNDAwMDAwQ0QzNUM3MDZBQTAyRkZGRkM3MDZBMTM2MDEwMEU5NTYKKzoxMDUzNTAwMEE1RjYwNkI4OEYwM0NEM0FCODkwMDNDRDNBQjg5MTAzQkQKKzoxMDUzNjAwMENEM0FCODkyMDNDRDNBQjg5MzAzQ0QzQUI4OTQwM0NENzEKKzoxMDUzNzAwMDNBQjg5NTAzQ0QzQUI4OTYwM0NEM0FCODk3MDNDRDNBRUIKKzoxMDUzODAwMEI4OTgwM0NEM0FCODk5MDNDRDNBQjg5QTAzQ0QzQUI4NTQKKzoxMDUzOTAwMDlCMDNDRDNBQjg3RjAzQ0QzQUI4ODAwM0NEM0EwN0MzMUIKKzoxMDUzQTAwMEY3NDlGMTRFREY0RkRGNEZERjRGREY0RkY4NTFERjRGNEYKKzoxMDUzQjAwMEZBNEYwQjUwRDE1MURGNEZERjRGREY0RkRGNEZERjRGNDEKKzoxMDUzQzAwMEU0NEUwNjAwQ0Q0QTA0MDBFNDRFMTkwMEFENEJGQTAwNEQKKzoxMDUzRDAwMDgyNEMwODA3MDk0QzE0MDAyNDRFNjQwMEQ3NERGNDAxOTgKKzoxMDUzRTAwMDY0NEVCQzAyN0E0RUU4MDM0MzRFMDIwMEIzNEVGNDAxMTEKKzoxMDUzRjAwMDVCNEVGNDAxRTU0RTE0MDAwNjUwMDY1MDk1NENDMTUyMjgKKzoxMDU0MDAwMEMxNTJGRTRDREE0QzA2NTAwNjUwMDY1MDA2NTBCNzUxQjkKKzoxMDU0MTAwMEI3NTFCNzUxQjc1MUI3NTFCNzUxMDY1MEQ1NEEwNjUwOTkKKzoxMDU0MjAwMDFENEMwNjUwODM0RDFGNEQxRjRERUQ0MEZBNDAwNzQxNjYKKzoxMDU0MzAwMDM3MzcyRTM3MzcyMDIwNzk3OTJGNzk3OTJGNzk3OTIwQ0UKKzoxMDU0NDAwMDMwMzEyRTM5MzAyMDIwMzAzMjJGMzEzNzJGMzkzOTIwNkEKKzoxMDU0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMDU0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKKzoxMDU0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDU0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKKzoxMDU0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDU0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDU0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDU0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDU0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDU0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKKzoxMDU1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMDU1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDU1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKKzoxMDU1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMDU1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMDU1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKKzoxMDU1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDU1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKKzoxMDU1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMDU1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKKzoxMDU1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDU1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMDU1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKKzoxMDU1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMDU2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKKzoxMDU2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDU2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDU2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMDU2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKKzoxMDU2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMDU2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMDU2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMDU2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMDU2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKKzoxMDU2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMDU2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMDU2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKKzoxMDU2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKKzoxMDU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDU3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMDU3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDU3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDU3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDU3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDU3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDU3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDU3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDU3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMDU3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDU3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMDU3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDU3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDU3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMDU4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDU4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDU4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMDU4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKKzoxMDU4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDU4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDU4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMDU4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDU4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMDU4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMDU4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMDU4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMDU4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDU4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDU5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDU5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDU5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMDU5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDU5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKKzoxMDU5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDU5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDU5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDU5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMDU5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDU5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDU5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKKzoxMDU5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMDU5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMDVBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDVBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDVBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDVBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDVBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDVBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMDVBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDVBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDVBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMDVBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDVBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDVBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDVBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDVBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMDVCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDVCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDVCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDVCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDVCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDVCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDVCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDVCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDVCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDVCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDVCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMDVCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDVCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDVCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMDVDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDVDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMDVDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDVDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDVDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDVDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDVDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDVDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMDVDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDVDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDVDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDVDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMDVDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDVDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDVEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDVEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDVEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDVENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDVENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDVENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDVENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDVEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDVEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDVEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDVEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDVERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDVERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDVERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDVFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMDVFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDVFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDVFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDVFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDVFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDVFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDVFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDVFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDVFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDVFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDVFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDVFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDVFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDVGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDVGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDVGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDVGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDVGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDVGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDVGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDVGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDVGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDVGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDVGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDVGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDVGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDVGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDYwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDYwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDYwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDYwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDYwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDYwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDYwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDYwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDYwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDYwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDYwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDYwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDYwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDYxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDYxMjAwMDkwRUFDMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAxMzA2MDcKKzowMDAwMDAwMUZGCisvKgorICogVGhlIGZpcm13YXJlIHRoaXMgZHJpdmVyIGRvd25sb2FkcyBpbnRvIHRoZSB0b2tlbnJpbmcgY2FyZCBpcyBhCisgKiBzZXBhcmF0ZSBwcm9ncmFtIGFuZCBpcyBub3QgR1BMJ2Qgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoZSBMaW51eAorICogc2lkZSBkcml2ZXIgYW5kIHRoZSByb3V0aW5lIHRoYXQgbG9hZHMgdGhpcyBkYXRhIGludG8gdGhlIGNhcmQgYXJlLgorICoKKyAqIFRoaXMgZmlybXdhcmUgaXMgbGljZW5zZWQgdG8geW91IHN0cmljdGx5IGZvciB1c2UgaW4gY29uanVuY3Rpb24KKyAqIHdpdGggdGhlIHVzZSBvZiAzQ29tIDNDMzU5IFRva2VuUmluZyBhZGFwdGVycy4gVGhlcmUgaXMgbm8KKyAqIHdhcmFudHkgZXhwcmVzc2VkIG9yIGltcGxpZWQgYWJvdXQgaXRzIGZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLgorICovCisKKy8qIDNjMzU5X21pY3JvY29kZS5tYWM6IDNDb20gM0MzNTkgVG9rZW5yaW5nIG1pY3JvY29kZS4KKyAqCisgKiBOb3RlczoKKyAqICAtIExvYWRlZCBmcm9tIHhsX2luaXQgdXBvbiBhZGFwdGVyIGluaXRpYWxpemF0aW9uLgorICoKKyAqIEF2YWlsYWJsZSBmcm9tIDNDb20gYXMgcGFydCBvZiB0aGVpciBzdGFuZGFyZCAzQzM1OSBkcml2ZXIuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL01ha2VmaWxlIGIvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggYzZhZjYxYi4uMTY2NjQ4OSAxMDA2NDQKLS0tIGEvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAKIGVsc2UKIGFjZW5pYy1vYmpzIDo9IGFjZW5pYy90ZzEuYmluIGFjZW5pYy90ZzIuYmluCiBlbmRpZgorZnctc2hpcHBlZC0kKENPTkZJR18zQzM1OSkgKz0gM2NvbS8zQzM1OS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQUNFTklDKSArPSAkKGFjZW5pYy1vYmpzKQogZnctc2hpcHBlZC0kKENPTkZJR19BREFQVEVDX1NUQVJGSVJFKSArPSBhZGFwdGVjL3N0YXJmaXJlX3J4LmJpbiBcCiAJCQkJCSBhZGFwdGVjL3N0YXJmaXJlX3R4LmJpbgpAQCAtMzksNiArNDAsNyBAQAogZnctc2hpcHBlZC0kKENPTkZJR19EVkJfVFRVU0JfQlVER0VUKSArPSB0dHVzYi1idWRnZXQvZHNwYm9vdGNvZGUuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0UxMDApICs9IGUxMDAvZDEwMW1fdWNvZGUuYmluIGUxMDAvZDEwMXNfdWNvZGUuYmluIFwKIAkJCSAgICAgZTEwMC9kMTAyZV91Y29kZS5iaW4KK2Z3LXNoaXBwZWQtJChDT05GSUdfUENNQ0lBX1NNQzkxQzkyKSArPSBvc2l0ZWNoL1hpbGlueDdPRC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfU01DVFIpICs9IHRyX3NtY3RyLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19TTkRfS09SRzEyMTIpICs9IGtvcmcvazEyMTIuZHNwCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NORF9NQUVTVFJPMykgKz0gZXNzL21hZXN0cm8zX2Fzc3Bfa2VybmVsLmZ3IFwKQEAgLTQ3LDYgKzQ5LDEyIEBACiAJCQkJICAgICBzYjE2L2ltYV9hZHBjbV9pbml0LmNzcCBcCiAJCQkJICAgICBzYjE2L2ltYV9hZHBjbV9wbGF5YmFjay5jc3AgXAogCQkJCSAgICAgc2IxNi9pbWFfYWRwY21fY2FwdHVyZS5jc3AKK2Z3LXNoaXBwZWQtJChDT05GSUdfU0xJQ09TUykgKz0gc2xpY29zcy9nYmRvd25sb2FkLnN5cyBzbGljb3NzL2dicmN2dWNvZGUuc3lzIFwKKwkJCQlzbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzIFwKKwkJCQlzbGljb3NzL29hc2lzZG93bmxvYWQuc3lzIFwKKwkJCQlzbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzCitmdy1zaGlwcGVkLSQoQ09ORklHX1NYRykgKz0gc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMgXAorCQkJCXN4Zy9zYWhhcmFkYmdkb3dubG9hZEIuc3lzCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NORF9ZTUZQQ0kpICs9IHlhbWFoYS9kczFfY3RybC5mdyB5YW1haGEvZHMxX2RzcC5mdyBcCiAJCQkJICAgeWFtYWhhL2RzMWVfY3RybC5mdwogZnctc2hpcHBlZC0kKENPTkZJR19URUhVVEkpICs9IHRlaHV0aS9iZHguYmluCkBAIC05MSw2ICs5OSw3IEBACiBmdy1zaGlwcGVkLSQoQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NKSArPSBrZXlzcGFuX3BkYS94aXJjb21fcGdzLmZ3CiBmdy1zaGlwcGVkLSQoQ09ORklHX1VTQl9WSUNBTSkgKz0gdmljYW0vZmlybXdhcmUuZncKIGZ3LXNoaXBwZWQtJChDT05GSUdfVklERU9fQ1BJQTIpICs9IGNwaWEyL3N0djA2NzJfdnA0LmJpbgorZnctc2hpcHBlZC0kKENPTkZJR19ZQU0pICs9IHlhbS8xMjAwLmJpbiB5YW0vOTYwMC5iaW4KIAogZnctc2hpcHBlZC1hbGwgOj0gJChmdy1zaGlwcGVkLXkpICQoZnctc2hpcHBlZC1tKSAkKGZ3LXNoaXBwZWQtKQogCmRpZmYgLS1naXQgYS9maXJtd2FyZS9XSEVOQ0UgYi9maXJtd2FyZS9XSEVOQ0UKaW5kZXggMDBiNmUzYy4uZDZjMjI3ZCAxMDA2NDQKLS0tIGEvZmlybXdhcmUvV0hFTkNFCisrKyBiL2Zpcm13YXJlL1dIRU5DRQpAQCAtMzY0LDYgKzM2NCw1OSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitEcml2ZXI6IFNMSUNPU1MgLSBBbGFjcml0ZWNoIElTLU5JQyBwcm9kdWN0cworCitGaWxlOiBzbGljb3NzL2diZG93bmxvYWQuc3lzLmloZXgKK0ZpbGU6IHNsaWNvc3MvZ2JyY3Z1Y29kZS5zeXMuaWhleAorRmlsZTogc2xpY29zcy9vYXNpc2RiZ2Rvd25sb2FkLnN5cy5paGV4CitGaWxlOiBzbGljb3NzL29hc2lzZG93bmxvYWQuc3lzLmloZXgKK0ZpbGU6IHNsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5zeXMuaWhleAorCitMaWNlbmNlOgorCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwOSBBbGFjcml0ZWNoLCBJbmMuCisKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZQorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQKKwlBbGFjcml0ZWNoJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZQorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aAorCUFsYWNyaXRlY2ggaGFyZHdhcmUuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogU1hHIC0gQWxhY3JpdGVjaCBJUy1OSUMgcHJvZHVjdHMKKworRmlsZTogc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMuaWhleAorRmlsZTogc3hnL3NhaGFyYWRiZ2Rvd25sb2FkQi5zeXMuaWhleAorCitMaWNlbmNlOgorCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwOSBBbGFjcml0ZWNoLCBJbmMuCisKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZQorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQKKwlBbGFjcml0ZWNoJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZQorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aAorCUFsYWNyaXRlY2ggaGFyZHdhcmUuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIERyaXZlcjogY3hnYjMgLSBDaGVsc2lvIFRlcm1pbmF0b3IgMyAxRy8xMEcgRXRoZXJuZXQgYWRhcHRlcgogCiBGaWxlOiBjeGdiMy90M2JfcHNyYW0tMS4xLjAuYmluLmloZXgKQEAgLTQ5MywzICs1NDYsNTMgQEAKIEZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogWUFNIC0gWUFNIGRyaXZlciBmb3IgQVguMjUKKworRmlsZTogeWFtLzEyMDAuYmluCitGaWxlOiB5YW0vOTYwMC5iaW4KKworTGljZW5jZToKKyAqIChDKSBGNkZCQiAxOTk4CisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogM0MzNTkgLSAzQ29tIDNDMzU5IFRva2VuIExpbmsgVmVsb2NpdHkgWEwgYWRhcHRlcgorCitGaWxlOiAzY29tLzNDMzU5LmJpbgorCitMaWNlbmNlOgorLyoKKyAqIFRoZSBmaXJtd2FyZSB0aGlzIGRyaXZlciBkb3dubG9hZHMgaW50byB0aGUgdG9rZW5yaW5nIGNhcmQgaXMgYQorICogc2VwYXJhdGUgcHJvZ3JhbSBhbmQgaXMgbm90IEdQTCdkIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGUgTGludXgKKyAqIHNpZGUgZHJpdmVyIGFuZCB0aGUgcm91dGluZSB0aGF0IGxvYWRzIHRoaXMgZGF0YSBpbnRvIHRoZSBjYXJkIGFyZS4KKyAqCisgKiBUaGlzIGZpcm13YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdSBzdHJpY3RseSBmb3IgdXNlIGluIGNvbmp1bmN0aW9uCisgKiB3aXRoIHRoZSB1c2Ugb2YgM0NvbSAzQzM1OSBUb2tlblJpbmcgYWRhcHRlcnMuIFRoZXJlIGlzIG5vCisgKiB3YXJhbnR5IGV4cHJlc3NlZCBvciBpbXBsaWVkIGFib3V0IGl0cyBmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4KKyAqLworLyogM2MzNTlfbWljcm9jb2RlLm1hYzogM0NvbSAzQzM1OSBUb2tlbnJpbmcgbWljcm9jb2RlLgorICoKKyAqIE5vdGVzOgorICogIC0gTG9hZGVkIGZyb20geGxfaW5pdCB1cG9uIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24uCisgKgorICogQXZhaWxhYmxlIGZyb20gM0NvbSBhcyBwYXJ0IG9mIHRoZWlyIHN0YW5kYXJkIDNDMzU5IGRyaXZlci4KKyAqLworCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IFBDTUNJQV9TTUM5MUM5MiAtIFNNQyA5MUN4eCBQQ01DSUEKKworRmlsZTogb3NpdGVjaC9YaWxpbng3T0QuYmluCisKK0xpY2VuY2U6IEFsbGVnZWRseSBHUEwsIGJ1dCBubyBzb3VyY2UgdmlzaWJsZS4gTWFya2VkOgorICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZmlybXdhcmUgb2YgU2V2ZW4gb2YgRGlhbW9uZHMgZnJvbSBPU0lURUNILgorICAgIChTcGVjaWFsIHRoYW5rcyB0byBLZXZpbiBNYWNQaGVyc29uIG9mIE9TSVRFQ0gpCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9maXJtd2FyZS9vc2l0ZWNoL1hpbGlueDdPRC5iaW4uaWhleCBiL2Zpcm13YXJlL29zaXRlY2gvWGlsaW54N09ELmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTgwODUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9vc2l0ZWNoL1hpbGlueDdPRC5iaW4uaWhleApAQCAtMCwwICsxLDE3NyBAQAorOjEwMDAwMDAwRkYwNEEwMzZGM0VDRkZGRkZGREZGQkZGRjNGRkZGRkY3MgorOjEwMDAxMDAwRUYzRkZGRjdGRkZGRkZGRkVGN0ZGRUZGQ0VGRUZFRkU4RAorOjEwMDAyMDAwRkVERUJERERGREZGRkRDRkY3QkY3RkZGN0YzRkZFQkZFMworOjEwMDAzMDAwRkZGRkZGQkNGRkZGQkRCNTdGN0ZCRkJGN0ZGRkVGRkZBRgorOjEwMDA0MDAwRkZGRkZCRkZGN0Y3RkZGRkZGRkZGRURFRkVGRUZBREUxRQorOjEwMDA1MDAwQkRGREVERkRGRENGRUZFRkVGRUZDN0RGREZERkRGREY1MgorOjEwMDA2MDAwRkY3RUZFRkQ3RDZERUVGRTdDRkJGNEZCQ0ZEQkRGRkY1NAorOjEwMDA3MDAwRkZCQjdGRkY3RkZGRjdGRjlFQkYzQkJGQkY3RjdGN0Y0MQorOjEwMDA4MDAwN0U2RkRGRUZGNUY2RkRGNkY1RURFQkZGRUZFRkVGN0VDMAorOjEwMDA5MDAwN0Y3RjZGN0ZGRkZFRkVGRUZFRkVFRkJGRkZGRkZGRkZENQorOjEwMDBBMDAwRkZGRkZGRkZGRkZGQkMxRjFGRUVGRkJDQjdGRkRGRkYxRgorOjEwMDBCMDAwREZFRjNCRTNEM0ZGRkJGRkZGREZGRkZGRkZCQUJGMkQwNworOjEwMDBDMDAwREJCREZEREJERkZBRkJGRkVGRkJEQkYzRkZERkZEN0ZEQgorOjEwMDBEMDAwRUZGQkZGRkZCRUJGMjdCQUZFRkJERkZGRjZGRkZGRUYyMAorOjEwMDBFMDAwRkJEQkYzRDk5QTNGRkZBRkJGRkZGRkJFM0YzN0JEOTZBMworOjEwMDBGMDAwRkZGRkZGRkZGRkZGQUVGQkYzRjNFQkZGRkZGRkZGRkY5MQorOjEwMDEwMDAwRkZGN0ZBQkNBRUZFQkVGRUJCN0ZGREZGN0ZFRkY3RkI0NQorOjEwMDExMDAwQkJEN0Y3N0ZGRkY3RkZGRkY3QkNFREZEQkQ5RDdEN0JGNAorOjEwMDEyMDAwRkI3QjdCRkJBRkZGRkVGREZERkVGRUZGRkZGRkZGRjc0RQorOjEwMDEzMDAwQUFCOUJGOEZCRkRGRkY3RkZGRkY3RkNGRkJFQkNCRUIwQQorOjEwMDE0MDAwRUVGRkZGRDdGRkZGRkYzRTMzM0YxQzdDRkNGRkZGRkZBRQorOjEwMDE1MDAwRkZGRkNGRDNGM0UzRjNGQkZGRkZGRkZGRkZFQkZFMzUyMgorOjEwMDE2MDAwM0YzREZERkRGRkZGRkZCRkZGRUY2RkUzRTNFM0VGRkY2OQorOjEwMDE3MDAwRkZERkZGRkZGN0ZFM0U1RUZFRkZGRkZGRkZGREZGRkYxRAorOjEwMDE4MDAwQUZDRkYyQ0JDRjhFRkZGRkZGRkZGRkZERkMzRTFGOUVFOAorOjEwMDE5MDAwQURGREZGRkZCRkZGRkZFRkZGQjNGN0U3RjdGQUZGRkY4QworOjEwMDFBMDAwRkZGRkZGRUVFQkFCQUY5RkUzN0ZGRkRFRkY3RkVFRkZENgorOjEwMDFCMDAwRkZGQjNBRkFGRkYyNzdGRkZGRjdGRUZGRkVCREFFREU3MAorOjEwMDFDMDAwN0Q3REZERkZCRkVFRkZGREZGREJGQkZGRjdFRkZCRkZEQworOjEwMDFEMDAwRkZGRUZGMkRBRkI5RkQ3OUZCRkFGRkJGRUZGRkZGOTFFNworOjEwMDFFMDAwRkFGQkRGRjdGN0ZGRkZGRkZDQ0YzN0JGQkZGRjdGN0ZEMworOjEwMDFGMDAwRkZGRkZGQUZGRkZGRjNGQkZCRkZGNUVGRkZGRkY3RkE5QQorOjEwMDIwMDAwRkZGRkVFRkFGRUZCNTVEREZGN0ZBRkZFRkZGQkZCRjVDOAorOjEwMDIxMDAwRkZGN0VGRkZGRkZGQkVCREJEQkRCRDdEN0I3QjdCN0JFMQorOjEwMDIyMDAwRkJBRUZGRkRGRUZGRkZGRkZGRkZGRkZGRjdEQUI3NjE0OQorOjEwMDIzMDAwRkZCOTU5RjM3M0YzREY3RjZGREZFRkY3RUJFQkQ3RkYxNgorOjEwMDI0MDAwRDdGRkZGRjdGRTdGRkIzRTM4NzNGNjdGRkNGRkZGQ0Y0MworOjEwMDI1MDAwRkZCN0ZCQjNCMzY3RkZFN0ZERkZFRkY2N0ZCN0JDRjU3MgorOjEwMDI2MDAwN0JGNkY3RjVGRkZGRUZGRkY3RkZGN0NFRTdGRjlGRkYwNgorOjEwMDI3MDAwRkZGNUZFN0RGRjVGRkZGRkZGRkZGRkZGRkZFRkZGRjZENAorOjEwMDI4MDAwQ0JEQkVFRkVGRkRGRkZGRkZGRkU3RkJFMUUzRUZFRkY2RAorOjEwMDI5MDAwN0RGRUZGRkZFRkJGRTdGRkUzRTNGRkRGRTdGRkZGRkZDOQorOjEwMDJBMDAwQjhFRkI3MkZFRUZGREZGRkJGRkY3RkVGRUJCRkEzRDNBQQorOjEwMDJCMDAwRkY3RkZGRkZGRkZGRjdCRUZEM0ZDRkZERkJGRkZGRkYwRgorOjEwMDJDMDAwRkZGRkFGRkJCRkJCQkZEQkZERkJGRkZGRkZGRjNFRkU0MgorOjEwMDJEMDAwM0ZCQUJBRkVGRkZGRkZFRkZGRUZDMzdGQjI5QkZGRkYwNgorOjEwMDJFMDAwRkZGRkZFRkZGRjNDRkYzRjNDRkZGRUZGRkZGRkZGRkY2NgorOjEwMDJGMDAwQUZGM0ZFRjNFM0VCRkZGRkZGRkJGRkY3OUFGRUFGOUVDQQorOjEwMDMwMDAwQkVGRUZGREZGRkZGN0JFRkY3QkZGQkZCRkJGRkZGN0ZDNworOjEwMDMxMDAwRkZGRkZGQkNCREZEQkRERDdEN0I3QjdCN0JGQkFFRkZCRgorOjEwMDMyMDAwRkZGRkZFRkVGRkZERkZGRkZGRjc5QUZGOUZGRkFGRUYwRQorOjEwMDMzMDAwRkZGRkZGRkY3RkNGRjNGRkVCRkZFQkZGRkZCRkZGRkZGMQorOjEwMDM0MDAwRUZGRUZGMzdGQ0JGRkZGRkZGRkZGRkZGQ0ZFRkZERjMyNworOjEwMDM1MDAwRkZFRUZFRkZGRkZGRkZGRjZFRkQyRkZERkZGREZGRkYyNgorOjEwMDM2MDAwRkZGRkZGRUZDRkZGRjNCRjY5RkZGRkZGRkZGRkZGRkVDMAorOjEwMDM3MDAwRkI5RkZGQkZGREZGRkZGRkZGRkZFRjg3RkVEQUVGQ0YyMQorOjEwMDM4MDAwRkZGRkZGRkZGRkZGRkVFRkJGRUZFRkZERkZGRkZGRkZGMAorOjEwMDM5MDAwRkZFRkZERkY3QkZGRUJGRUZGRkZGRkZGRUJGOEZGRUY0MworOjEwMDNBMDAwQUZGRkZGQkRGRkZGRkY3RkVFN0ZFRkZGQkJGRkJGRkI5OAorOjEwMDNCMDAwRkZGRkZGRjdGNkZCQkRGRERERjVGRkZGRkZGRkZGQUYyMgorOjEwMDNDMDAwRkY1RkY1REZGRjdGRkZGRkZGRkZGRkY2RjNGRkRFRkVCRQorOjEwMDNEMDAwRUZGREZGRkZGRkZGRUZGRkRFREY1RkRGRkRGRkZGRkY1MgorOjEwMDNFMDAwRkZGRkZFRkZGRkZFRkVGRkZERkZGRkZGRkZBRkZGRkY3MgorOjEwMDNGMDAwRUZFREZGREZGRkZGRkJGRkZGREFCREJFQUVGRTdGRkRDRgorOjEwMDQwMDAwREZGRkZGN0ZFRkZGRkJGQkZCN0ZGN0ZGRkZGRkZGRjc0OAorOjEwMDQxMDAwQkNGREJEQkRCREZEN0I3QjdCN0JGQkFFRkZGRkZERkY2MAorOjEwMDQyMDAwRkZGRkZERkZGRkZGRkZGQTlGQkZCRkNGN0ZGRkZGRkY3MworOjEwMDQzMDAwRkZGRkFGRkZFQkVCRUJGRkQ3RkVGRkZGQkZFN0ZFQkYxQQorOjEwMDQ0MDAwN0ZGQ0ZGRkZFREZGRkZGRkZGNEZGRkZCRkJGRkZGREQyQgorOjEwMDQ1MDAwRkZGRkZGRkZGRkZFQkRERjlERkRERkI5RkZGRkZGRkZEOQorOjEwMDQ2MDAwRUZGRkZCRUZFQkZGREVGRkZGRkZGRkZGRjY5RkZGRkM2MQorOjEwMDQ3MDAwRkVGQkZERkZGRkZGRkZFRkRGRkFDRENGQkY5RkZGRkZDQQorOjEwMDQ4MDAwRkZGRkY3RkVCRkZGREZFRjVGRkZGRkZGRkY3RjZGRkZBNQorOjEwMDQ5MDAwQkJGREZGRkZGRkZGRkZGRkZGRkY3RUZGNUZGRkJGQkY1MworOjEwMDRBMDAwRjlGRkZGRkY3RjZFN0JGRkVGRkRFQkRGRkZGRkZGRkYzRAorOjEwMDRCMDAwRjdCNjNFRkNGREJGN0VGQkZGRkZGRkY3RUZGN0YzRjc1QworOjEwMDRDMDAwRkZGQkZGRkZGRkZGRkZGRjZFMzU3OUZGQkZGQ0ZGRkY2NAorOjEwMDREMDAwRkZGRkZGRUZGQjUzREZGRkVCQkZGRkZGRkZGRkZGQkNBMworOjEwMDRFMDAwRkZGRkZGQkZGRkZERkZGRkZGRkZBRkY1RkZGN0ZGRkJDNAorOjEwMDRGMDAwRkZGRkZGRkZGRkZGQkFBQUVFRkUzRjdERkRGRkZGRkZGQworOjEwMDUwMDAwN0ZBRjc3RkJGQkZGRkJGN0ZGRkZGRkZGRjdCRUJEQkQzNAorOjEwMDUxMDAwQkRCREZEN0I3QjdCN0JGQkFFRkZFRkZGRkZGRkZGRkNFOQorOjEwMDUyMDAwRkZGRkZGRkY5QUQ5QjhGRkZGNzlGRkZGRkZGRkZGQ0Y2MworOjEwMDUzMDAwRkJGRkVCRkZFQkQ3RkZGRkZGRkZFN0RFRjhGQkZFM0YyNAorOjEwMDU0MDAwRkJGREZGRkZGRkZGQ0ZBREJGRkFGRjczREZGRkZGRkYzNAorOjEwMDU1MDAwRkZGRjNBRjVCN0ZDM0ZGOUZERkZGRkZGN0ZFRkYzRkYyOQorOjEwMDU2MDAwQkZGRUYzOUZGRUZGRkZGRkY3M0VGRkZGRkZCRkZGRkY1MgorOjEwMDU3MDAwRkZGRkZGRkZBRkQzRkVEQkZGREJERkZGRkZGRkZGRkY3MAorOjEwMDU4MDAwM0VGRkJGRkY3RkZGRkRGRkZGRkZGRjhGRjNGRkVERkY4QworOjEwMDU5MDAwRjdGQkZGRkZGRkZGRUZGNjNDRkVGRkZGRkZGRkZGRkY1NAorOjEwMDVBMDAwRkY5RkVGRUZEMUZGRkZGRkZGRkZGRkZGRkZGRjdFQkZDQQorOjEwMDVCMDAwRkRGRkZGRkZGRkZGRkZGRkJCRUZERkYxRkZGRkZGRkZDRgorOjEwMDVDMDAwRkZGRkZGRkZGRkVFM0VGRUZGRkZGRkZGRkZGRkZGQkY0RQorOjEwMDVEMDAwRUZGREMzRkZGRkZGRkZGRkZGRkZCRkZGRkMzRUZFRkY3RQorOjEwMDVFMDAwRkZGRkZGRkZGRkZGRkYyRUVGRjNGRkZGRkZGRkZGRkYwOAorOjEwMDVGMDAwRkZGRkY3QkFCRUZFRkZGRkZGRkZGRkZGRkY3RkFGRkI2RQorOjEwMDYwMDAwRkJGREZGRkZGRkZFRkZGRkZGRjJENkVEQkRCREJEN0Q5MQorOjEwMDYxMDAwN0I3QjdCN0JGQkFGREZGRkZGRkZGRkZGRkZGRkZGRkY2RQorOjEwMDYyMDAwRkY5MkJGRkZGRkZGRkZGRkZGRkZGRjdGQUZFQkVCRkY3RgorOjEwMDYzMDAwRkZGRkZGRkZGRkZGRkZFN0ZFMkVGRUZGRkZGRkZGRkZCNQorOjEwMDY0MDAwRkZGRkZGNEZFRkYzRkZGRkZGRkZGRkZGRkZGRkZGRkU4NworOjEwMDY1MDAwM0NGRUZGRkZGRkZGRkZGRkZGRkZFRkNFQzNGREZGRkZFRAorOjEwMDY2MDAwRkZGRkZGRkZGRkZGRkU1REZGRkZGRkZGRkZGRkZGRkYzRAorOjEwMDY3MDAwRkZFRkNGRUJGRkZGRkZGRkZGRkZGRkZGRjdFRTNFRkZCOAorOjEwMDY4MDAwRkZGRkZGRkZGRkZGRkY3RkVGREZFMkZGRkZGRkZCRkY0QgorOjEwMDY5MDAwRkZGRkZGRkZGNkJFRkNGRkZGRkZGRkZGRkZGRjdGRUU0OAorOjEwMDZBMDAwNUZFNkZGRkZGRkZGRkZGRkZGRkZGRjNFN0RGRkZGRkY1NgorOjEwMDZCMDAwRkZGRkZGRkZGRkZGRUZGM0ZCRkZGRkZGRkZGRkZGRkY2QQorOjEwMDZDMDAwQkZGNzM2QkVGRUZGRkZGRkZGRkZGRkZGRkZFRkQzRjZEMgorOjEwMDZEMDAwRkVGRkZGRkZGRkZGRkZGRkZGRkM3RkVFRkZGRkZGRkZCRgorOjEwMDZFMDAwRkZGRkZGRkZBRkVGRUJGRkZGRkZGRkZGRkZGRkZGRkY4RQorOjEwMDZGMDAwQkFCRUZFRkZGRkZGRkZGRkZGRkZGRkVFRkJGQUZGRkZBQgorOjEwMDcwMDAwRkZGRkZGRkZGRkZGRjdENkZEQkRCREJEN0Q3QjdCN0IwMAorOjEwMDcxMDAwN0JGQkFFRkY3RUZGRkZGRkZGRkZGRkZGRkZGN0JBQkZEMAorOjEwMDcyMDAwRkZGRkZGRkZGRkZGRkZGRjdGRUZFQjZCRkZGRkZGRkYxMQorOjEwMDczMDAwRkZGRkZGRkZGN0ZFQkVGRUZGRkZGRkZGRkZGRkZGRkYxNAorOjEwMDc0MDAwNEZFRkY3RkZGRkZGRkZGRkZGRkZGRkVGM0U2RUZDRkZFNgorOjEwMDc1MDAwRkZGRkZGRkZGRkZGRkZFRkMzQzlGRkZGRkZGRkZGRkYyQgorOjEwMDc2MDAwRkZGRkZGM0VCRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkJBRQorOjEwMDc3MDAwRDVGRkZGRkZGRkZGRkZGRkZGRkZGRUZFRkVGRkZGRkZCNgorOjEwMDc4MDAwRkZGRkZGRkZGRjZGRUZGQkZGRkZGRkZCRkZGRkZGRkYyMQorOjEwMDc5MDAwRkZGNkRGRkZGRkZGRkZGRkZGRkY3RkZFRUZGRkZGRkYyMworOjEwMDdBMDAwRkZGRkZGRkZGRkZGRTdGRkZFRkZGN0ZGRkZGRkZGRkY3QQorOjEwMDdCMDAwRkY3RkZBRUZCRkZGRkZGRkZGRkZGRkZGRkZFN0ZGRkUzNworOjEwMDdDMDAwRkZGRkZGRkZGRkZGRkZGRjdGRkVFRkJGRkZGRkZGRkYwQQorOjEwMDdEMDAwRkZGRkZGRkZBN0ZGRkNGN0ZGRkZGRkZGRkZGRkZGN0YwQworOjEwMDdFMDAwRkVBRUZGRkZGREZGRkZGRkZGRkZGRkU3RjdGQUZGRkQ5NAorOjEwMDdGMDAwRkZGRkZGRkZGRkZGRkY3RkFGRkZGRkZGRkZGRkZGRkZEOQorOjEwMDgwMDAwRkZGRkZGRjdCRUJEQkRCREJEN0Q3QjdCN0I3QkZCQUYyRgorOjEwMDgxMDAwN0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkNBRkZGRkZGRkY5RAorOjEwMDgyMDAwRkZGRkZGRkZGRjdGNkZGRkZGRkZGRkZGRkZGRkZGRkZFOAorOjEwMDgzMDAwRkZFN0ZFRkZGRkZGRkZGRkZGRkZGRkZGRkZDRkZFRkYxMgorOjEwMDg0MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkVERkZGRkZGRkZGRkZEOQorOjEwMDg1MDAwRkZGRkZGRkZFRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZCOQorOjEwMDg2MDAwRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZBOQorOjEwMDg3MDAwRkZGRkZGRkZGRkZGRjdGRUZGRkZGRkZGRkZGRkZGRkY5MQorOjEwMDg4MDAwRkZGRkVGRkZGRUZGRkZGRkZCRkZGRkZGRkZFN0YyRkNCNQorOjEwMDg5MDAwRUZGRkZGRkZGRkZGRkZGRjdGQUVFRkZGRkZGRkZGRkY1OQorOjEwMDhBMDAwRkZGRkZGRkZGNzdFRkRGRkZGRkZGRkZGRkZGRkZGRkZFMworOjEwMDhCMDAwRUZGRkZFRkZGRkZGQkZGRkZGRkZCRkZGRkVGRUZGRkZEQgorOjEwMDhDMDAwRkZGRkZGRkZGRkZGREZFRkRERkVGRkZGRkZGRkZGRkY4QgorOjEwMDhEMDAwRkZGRkZGRkVGRUZGRkZGRkZGRkZGRkZGRkZGRkFGRUY4QQorOjEwMDhFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZCQUZFRkZGRkZGRkY1RQorOjEwMDhGMDAwRkZGRkZGRkZGRkVGRkFGRUZGRkZGRkZGRkZGRkZGRkYxRQorOjEwMDkwMDAwRjY5Q0JEQkRCREJEN0Q3QjdCN0I3QkZCQUVGRkZGRkY1MgorOjEwMDkxMDAwRkZGRkZGRkZGRkZGRkZGNzdBRkZGRkZGRkZERkZGRkY5NAorOjEwMDkyMDAwRkZGRjZGRUZGN0ZGRkZGRkRGRkZGRkZGRkZGRkY3RkVBOAorOjEwMDkzMDAwRkVGRkZGRkZERkZGRkZGRkZGRkZDRkVCRkZGRkZGRkYyQworOjEwMDk0MDAwRkZGRkZGRkZGRkVGOUVGQ0ZGRkZGRkZGRkZGRkZGRkYyQgorOjEwMDk1MDAwRkZFRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZDOAorOjEwMDk2MDAwRkZGRkZGRkZGRkZGRkY3RkVGQ0JGRkZGRkZGRkZGRkQ1RAorOjEwMDk3MDAwRkZGRkZGRkZCRUZERkZGRkZGRkZGRkZGRkZGRkZGRUZEQQorOjEwMDk4MDAwRUZGRkZGRkZERkZGRkZGRkZGRkZGRkY4RkZGRkZGRkZBRQorOjEwMDk5MDAwQkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZCNworOjEwMDlBMDAwRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkJBRjdGRkYyQworOjEwMDlCMDAwRkZGRkRGRkZGRkZGRkZGRkZGRkVFRkZGRkZGRkZGRkY3OAorOjEwMDlDMDAwRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkJGRkY4NworOjEwMDlEMDAwRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkFFRkZGRkZGRkY3OQorOjEwMDlFMDAwRkZGRkZGRkZGRkZGRjdGQUZGRkZGRkZGRkZGRkZGRkYyNAorOjEwMDlGMDAwRkY3RkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0JDQkQyNAorOjEwMEEwMDAwQkRCREJEN0Q3QjdCN0I3QkZCQUZGRkZGRkZGRkZGRkZBMgorOjEwMEExMDAwRkZGRkZGRkZGN0ZBRkZGRkZGRkZGRkZGRkZGRkZGN0Y3MworOjEwMEEyMDAwQUY3RkZGRkZGRkZGRkZGRkZGRkZGRkVGRkVGRkZGRkZCNworOjEwMEEzMDAwRkZGRkZGRkZGRkZGRkZDRkZGRkZGRkZGRkZGRkZGRkZGNgorOjEwMEE0MDAwRkZGRkZGRkVGRkZGRkZGRkZGRkZGQkZGRkZGRkVGRkZDQgorOjEwMEE1MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZBNworOjEwMEE2MDAwRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGQkZGRkZGRkZFNgorOjEwMEE3MDAwRkZGQ0ZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkY5OQorOjEwMEE4MDAwRkZGRkZCRkZGRkZGRkZFRkZFRkY5RjlGOUYzRjNGM0ZFQgorOjEwMEE5MDAwM0YzRkZGRUZERkRGREZERkNGQjdCRkJGQkZCRkZGQkMzMQorOjEwMEFBMDAwQjk5REJEQkQ3RDdCN0I3QjdCRkJFRkQ3RjVGM0YxRDFBMgorOjEwMEFCMDAwNjVFM0UzRTNBM0ZGRkU3RkZFREVERUZGQkRCREJEQkQ1QworOjEwMEFDMDAwREZFRkZCRjdGM0YzRjNFN0U3RTdFN0U3RkJGRUZGRkYxMworOjBBMEFEMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkYyNgorOjAwMDAwMDAxRkYKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgZmlybXdhcmUgb2YgU2V2ZW4gb2YgRGlhbW9uZHMgZnJvbSBPU0lURUNILgorKFNwZWNpYWwgdGhhbmtzIHRvIEtldmluIE1hY1BoZXJzb24gb2YgT1NJVEVDSCkKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3NsaWNvc3MvZ2Jkb3dubG9hZC5zeXMuaWhleCBiL2Zpcm13YXJlL3NsaWNvc3MvZ2Jkb3dubG9hZC5zeXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzE3ZTYzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvc2xpY29zcy9nYmRvd25sb2FkLnN5cy5paGV4CkBAIC0wLDAgKzEsNjE0OCBAQAorOjEwMDAwMDAwMDIwMDAwMDAwMDgwMDAwMDAwMDAwMTAwMDAwMDAwMDA2RAorOjEwMDAxMDAwMDA4MDAwMDAxMjAwMDA0MDgxQjIwMDAwMTgwMDAwNDA4MworOjEwMDAyMDAwODFCMjAwMDAxRTAwMDA0MDgxQjIwMDAwMDMwMDAwNDBDOQorOjEwMDAzMDAwODFCMjAwMDAwMDAwMDBBODk4QjAwMTAwMDQ4MEEyNDAzNgorOjEwMDA0MDAwRkQ3RjAwMDAwOTAwQTI0OUREN0QwMDAwMDAwMDAwNEM5QQorOjEwMDA1MDAwODBCMjAxMDAwNzAwMDA0MEQxQjEwMDAwMDAwMDAwNEM1OAorOjEwMDA2MDAwODBCMjAxMDAwOTAwQTI0MDc1N0QwMDAwNjAwMDAwNDBFMAorOjEwMDA3MDAwNjE5OTAxMDAwQjAwQThCMTdFMzEwMDAwMDkwMDAwNDAyOQorOjEwMDA4MDAwODFCMjAwMDAxMTAwMDA0MDgxQjIwMDAwMDA4MDFGRTkzMQorOjEwMDA5MDAwMTgzMTAwMDAwMDAwNDFFOTgwQjIwMTAwMEYwMDQwRTk4MgorOjEwMDBBMDAwODBCMjAwMDAwMDAwMDA0MEE1OTkwMTAwMTYwMDI5NDAyMAorOjEwMDBCMDAwODEzMjAwMDAxNjAwMTRCQzgwMzIwMDAwMEYwMDkzQkM5NworOjEwMDBDMDAwODAzMjAwMDAwMDAwNTA0MDgxQjIwMTAwMDA4MDAwNDBGQQorOjEwMDBEMDAwODFCMjAwMDAxMDAwMDA0MEE1OTkwMTAwMUMwMDI5NDBEOQorOjEwMDBFMDAwODEzMjAwMDAxQzAwMTRCQzgwMzIwMDAwMTEwMDkzQkM1RgorOjEwMDBGMDAwODAzMjAwMDAwMDAwNTA0MDgxQjIwMTAwMDE4MDAwNDBDOQorOjEwMDEwMDAwODFCMjAwMDAyMDAwMDA0MEE1OTkwMTAwMjIwMDI5NDA5MgorOjEwMDExMDAwODEzMjAwMDAyMjAwMTRCQzgwMzIwMDAwMEUwMDkzQkMyQgorOjEwMDEyMDAwODAzMjAwMDAwMDAwMDA0OUREODEwMTAwMkIwMTAwNDAwOQorOjEwMDEzMDAwODEzMjAxMDAzQzAxMDA0MDgxMzIwMTAwMjcwMDE0QkNFMworOjEwMDE0MDAwODAzMjAwMDAxNDAxMTNCQzgwMzIwMDAwNTQ5NTAwNDAzRQorOjEwMDE1MDAwNDU5OTAxMDBGRkZGMDA0MEU1OTkwMTAwMDAwMDJGNDA5NAorOjEwMDE2MDAwNDlCMTAxMDAwMDAwMDA0MEUxQjEwMTAwMDAwMDAwNEI3NgorOjEwMDE3MDAwQjdCMzAxMDAwMDAwMDA0MEI1QjMwMTAwRDkwMDAwNDA1MgorOjEwMDE4MDAwQjMzMzAxMDAwMDAwMDA0MEI2RDMwMTAwMzIwMDk1RTgwRgorOjEwMDE5MDAwODAzMjAwMDBGRkZGMDBFODgwODgwMTAwQjgwMDI2NDBBMAorOjEwMDFBMDAwODEzMjAwMDAwMDAwMDA0MEZEQjMwMTAwMDAwMDAwNDA2QgorOjEwMDFCMDAwRkZCMzAxMDAzQzAwMjI1MDgzNkMwMDAwMDAwMDAwNDVBQQorOjEwMDFDMDAwRkQ5MzAxMDBBNUE1MDBBNkI0QTcwMTAwM0MwMEEyNTAyNAorOjEwMDFEMDAwQjU3MzAwMDAwMDAxMDA0MDgxMzIwMTAwM0MwMEEyNDVERgorOjEwMDFFMDAwODAzMjAwMDAwMDAwMDA0NkZEOTMwMTAwNDEwMDAwNDAwNQorOjEwMDFGMDAwODFCMjAwMDA3RjAwMDAyMEY1Q0YwMTAwMUMwMTAwRkE1MQorOjEwMDIwMDAwQjMzMzAxMDBBNUE1MDBEQUI1QUIwMTAwOTkwMEEyNTBGNworOjEwMDIxMDAwQjU2MzAwMDAwMDAwMDA0NEZEOTMwMTAwRDUwMDAwNDREOAorOjEwMDIyMDAwQjMzMzAxMDAwMDAwMDA0MEQ1OTkwMTAwMDAwMDAwREE1RQorOjEwMDIzMDAwRDdCMTAxMDBGRkZGMDBEQUVEOEIwMTAwRDUwMDAwNDZDOQorOjEwMDI0MDAwQjMzMzAxMDAwODAwMDA0MEQ1OTkwMTAwMDAwMDAwREEzNgorOjEwMDI1MDAwRDdCMTAxMDBGRjAwMDBEQUVGOEIwMTAwRkYwMDAwREFFOAorOjEwMDI2MDAwRTM4RjAxMDBENTAwMDA0OEIzMzMwMTAwM0MwMDAwNDA5QgorOjEwMDI3MDAwRDU5OTAxMDBGRjAwMDBEQUQ3OEQwMTAwRkZGRjAwREFGOQorOjEwMDI4MDAwRjFEQjAxMDBGRjAwMDBEQUU5OEIwMTAwMDAwMDAwNDgwQgorOjEwMDI5MDAwRTlFMzAxMDBENTAwMDA0QkIzMzMwMTAwMkMwMDAwNDAxRQorOjEwMDJBMDAwRDU5OTAxMDAwMDAwMDBEQUQ3QjEwMTAwRDUwMDAwNEM1QgorOjEwMDJCMDAwQjMzMzAxMDBGRkZGMDBEQUVCREIwMTAwRDUwMDAwNEU5NQorOjEwMDJDMDAwQjMzMzAxMDAwMzAwMDBEQTgxODgwMTAwMDAwMDAwNUMwNAorOjEwMDJEMDAwODFFMDAxMDBGRkZGMDBEQUI1REIwMTAwNUMwMDI2NDA5MQorOjEwMDJFMDAwODEzMjAwMDAwMTAwMDBEQUI1Q0YwMTAwMDBGMDAwQTc2NAorOjEwMDJGMDAwQjQ4NzAxMDAwMDAwMDBEQTgxOTQwMTAwMDAwMDAwNDA5MgorOjEwMDMwMDAwRDhCMTAxMDBENTAwMDA1MEIzMzMwMTAwRkZGRjAwREE3RgorOjEwMDMxMDAwQjU4QjAxMDA2MjAwMjY0Q0I1NjMwMDAwMDEwMDAwREFENQorOjEwMDMyMDAwQjVDRjAxMDAwMDAwMDBEQURGQjEwMTAwRDUwMDAwNTJCNgorOjEwMDMzMDAwQjMzMzAxMDBGRjAwMDBEQTRCODkwMTAwMDgwMDAwREE0NgorOjEwMDM0MDAwREZGNzAxMDBGRjAwMDBFRkRGOEIwMTAwNjkwMDIyNDBCMgorOjEwMDM1MDAwREY3RjAwMDAwMDAwMDA0N0ZEOTMwMTAwMjAwMDAwNDAwNworOjEwMDM2MDAwQjM5QjAxMDBENTAwMDA0MDgxMzIwMTAwMDYwMDAwNDAyRgorOjEwMDM3MDAwRDU5OTAxMDAwODAwMDBEQUQ3RTUwMTAwRjgwMDAwREE5RAorOjEwMDM4MDAwQjM4QjAxMDAzNDAwMDA0MEQ1OTkwMTAwMDAwMDAwRDk3MgorOjEwMDM5MDAwRDdCMTAxMDAwMjAwMDBEOUQ1QzkwMTAwMDAwMDAwREE4MAorOjEwMDNBMDAwRDdCMTAxMDAyMjAwMDA0MEIzOUIwMTAwRDUwMDAwNDBGRQorOjEwMDNCMDAwODEzMjAxMDAwMDAwMDA0OEI1RjMwMTAwMDMwMDAwREFCQgorOjEwMDNDMDAwN0I4OTAxMDAwMDAxMDA0MEREOUIwMTAwRDUwMDAwNUQzQworOjEwMDNEMDAwQjMzMzAxMDBGRkZGMDBEQUU3OEIwMTAwOEEwMDI2NDBGQgorOjEwMDNFMDAwODEzMjAwMDAwMDAwMDA0MUZEOTMwMTAwMDAwMDAwNTAzOAorOjEwMDNGMDAwRTdFMzAxMDAwMDAxMDA0MEQ1OTkwMTAwMDAwMDAwRjY4QworOjEwMDQwMDAwRTc5NzAxMDAwMDAwMDBGM0Q3QjEwMTAwRDUwMDAwNUVCRQorOjEwMDQxMDAwQjMzMzAxMDBGRjAwMDBEQUU1OEIwMTAwMDAwMDAwNDg2MworOjEwMDQyMDAwRTVFMzAxMDAwODAxMDA0MEQ1OTkwMTAwRkYwMDAwREE3MgorOjEwMDQzMDAwQjU4RjAxMDAwMDAwMDBGN0I1OTcwMTAwMDAwMDAwREE1OQorOjEwMDQ0MDAwRDdCMTAxMDAzQzAxMDA0MEQ1OTkwMTAwMDAwMDAwRjgzRgorOjEwMDQ1MDAwRTU5NzAxMDAwMDAwMDBGMkQ3QjEwMTAwMDAwMjAwNDA2MgorOjEwMDQ2MDAwREQ5QjAxMDA5NjAwMjJGNTgxMzIwMDAwMDAwMDAwNDI3MQorOjEwMDQ3MDAwRkQ5MzAxMDAwMDAwMDBFRUQ1QjEwMTAwMDAwMDAwRjY4MAorOjEwMDQ4MDAwRUI5NzAxMDAwMDAwMDBGNUQ3QjEwMTAwMDgwMDAwRUE3OQorOjEwMDQ5MDAwRDRDOTAxMDAwMDAwMDBGN0UzOTcwMTAwMDAwMDAwRjE1QgorOjEwMDRBMDAwRDdCMTAxMDAzQzAwMDBFRUREQ0IwMTAwMDAwMDAwRUUwMgorOjEwMDRCMDAwRDVCMTAxMDAwMDAwMDBGOEU5OTcwMTAwMDAwMDAwRjQ0OAorOjEwMDRDMDAwRDdCMTAxMDBENTAwMDA0QUIzMzMwMTAwRkZGRjAwREFDNQorOjEwMDREMDAwREQ4OTAxMDBCNzAwMDA0MDgxQjIwMDAwMDAwMDAwNDA0QgorOjEwMDRFMDAwRDU5OTAxMDAwNTAwMDBBNkQ2QjEwMTAwOUExMzAwRUJEMgorOjEwMDRGMDAwRDY5OTAxMDAwODAwMDA0MEQ1OTkwMTAwMDAwMjAwQTYyRAorOjEwMDUwMDAwRDZCMTAxMDAwMTAwMDBFQkQ2OTkwMTAwMkMwMDAwNDA5QgorOjEwMDUxMDAwRDU5OTAxMDAwNTAwMDBBNkQ2QjEwMTAwOUExMzAwRUJBMQorOjEwMDUyMDAwRDY5OTAxMDAzQzAxMDA0MEQ1OTkwMTAwMDAwMjAwNDAyRAorOjEwMDUzMDAwRDc5OTAxMDAwMDAwMDA0MkZEOTMwMTAwM0MwMDAwNDBGQgorOjEwMDU0MDAwRDU5OTAxMDAwMDAwMDBBNkQ2QjEwMTAwMDAwMTAwRUIyMgorOjEwMDU1MDAwRDY5OTAxMDAwMDAxMDA0MEQ1OTkwMTAwMDYwMDAwQTZDRgorOjEwMDU2MDAwRDZCMTAxMDA5QTEzMDBFQkQ2OTkwMTAwMDgwMTAwNDBCMgorOjEwMDU3MDAwRDU5OTAxMDAwMDAyMDBBNkQ2QjEwMTAwMDEwMDAwRUJGMAorOjEwMDU4MDAwRDY5OTAxMDAwMDAwMDA0MEQ5QjEwMTAwMDAwMDAwNDBGMAorOjEwMDU5MDAwREZCMTAxMDAwNjAwMDA0MEQ1OTkwMTAwQTAwMDAwQTZDRgorOjEwMDVBMDAwRDZCMTAxMDA2NDAwMDA0MDRCOTkwMTAwMDAwMDAwNDBGQQorOjEwMDVCMDAwN0I5OTAxMDAwMjA0MDA0MEREOTkwMTAwQjcwMDEzQkNFMworOjEwMDVDMDAwODAzMjAwMDAwMjA4MDA0MEREOTkwMTAwMDAwMDAwNEM2QworOjEwMDVEMDAwREQ5MTAxMDBCODAwOTVFODg0MzAwMDAwMDAwMDJGRTlBQgorOjEwMDVFMDAwRkFCMzAxMDAwMDAwMDA0MEQxQjEwMTAwRkYwMDAwNDI1OQorOjEwMDVGMDAwODA4ODAxMDAzNDAwMDA0MDgwQ0UwMTAwQjgwMEE2NDA5MQorOjEwMDYwMDAwODEzMjAwMDBDMTAwMDA0MDgxMzIwMTAwMDI4MDIyNDA5RQorOjEwMDYxMDAwODAzMjAwMDBCODAwMDA0MDgxQjIwMDAwMDAwMDAwNEZBRQorOjEwMDYyMDAwODFCMDAxMDBDQTAwMDlGOTgxMzIwMDAwQzgwMDA4Rjk1MAorOjEwMDYzMDAwODEzMjAwMDBENDAwMUZGREY5MzMwMDAwQzcwMDlFRkQ4OQorOjEwMDY0MDAwODEzMjAwMDAwMDAwMDA0QUYzOTMwMTAwMDAwMDgwNDg1RQorOjEwMDY1MDAwRjM5MzAxMDAwMDAwMDBGREY3QjMwMTAwMDAwMDgwNDlBMgorOjEwMDY2MDAwRjM5MzAxMDAwMDAwMDBGQzE5QjEwMTAwQ0YwMDBBRjk2QQorOjEwMDY3MDAwODEzMjAwMDAwMDAwNDBGQjgxQjIwMTAwMDAwMDQxRkQxQQorOjEwMDY4MDAwODFCMjAxMDAwMDA3ODBGOUYzOEYwMTAwMDAwNzQyRjlGMQorOjEwMDY5MDAwRjM4RjAxMDBEMzAwQTJGRkY3NkYwMDAwMDAwMDQzNDA3QQorOjEwMDZBMDAwODFCMjAxMDAwMDAwQTJGRkZCRUYwMDAwMDAwMDgwRkMwRgorOjEwMDZCMDAwRTFCMTAxMDAwMDAwODA0MDgxQjAwMTAwRDgwMDA2RkVEOQorOjEwMDZDMDAwODEzMjAwMDAwMDAwMDA0MUIzRTMwMTAwMUMwMTAwRkE4OAorOjEwMDZEMDAwQjNDMzAwMDBEQTAwMDA0MjhEQjAwMDAwMDAwMDAwNDEwQQorOjEwMDZFMDAwOERCMDAxMDAwMDA0MDA0MDgzOTgwMTAwRUIwMDAwNDA0MQorOjEwMDZGMDAwODEzMjAxMDAwMDAwMDA1MDgzQjAwMTAwMDAwMDg0OTZBOAorOjEwMDcwMDAwODBCMjAwMDAyNjAxMDA0MDgxMzIwMTAwMjUwMTAwNDAzNgorOjEwMDcxMDAwMkQxMTAxMDAwMDAwMDA0MDJEODEwMTAwMDAwMDAwREFEMQorOjEwMDcyMDAwQjVFQjAxMDBFNDAwODQ5NjgwMzIwMDAwRTUwMDAwNDA1MworOjEwMDczMDAwQjU5MzAwMDAwMDAwMDA0MEI1ODMwMTAwREUwMEEyNDEzNworOjEwMDc0MDAwODM1MDAwMDAwMDAwMDA0MjJEODEwMTAwMjYwMTAwNDE3RAorOjEwMDc1MDAwMkQwMTAxMDAwMDAwMDA0MUIzQzMwMTAwREEwMEEyNDFGNQorOjEwMDc2MDAwOEQ1MDAwMDAwMDAwODBEQUI1QkYwMTAwMDAwMDAwNEI5MgorOjEwMDc3MDAwODFCMDAxMDAwMDAwMDBEQjgxRDAwMTAwMDAwMDAwRDk0MQorOjEwMDc4MDAwQjlCMzAxMDAwMDAwMDA0MEI4RTMwMTAwMDAwMDAwREM0NAorOjEwMDc5MDAwQjlFQjAxMDAwMDAwMDA0MUI4OTcwMTAwMTUwMDAwREMzMgorOjEwMDdBMDAwQjlFNzAxMDAwMDAwMDA0MTJEODEwMTAwMDAwMDAwREJERAorOjEwMDdCMDAwODFCMDAxMDAyNzAxMDA0MjJEMTEwMTAwMjUwMTAwNDBGOAorOjEwMDdDMDAwMkQxMTAxMDAyODAxMDA0MDJEMDEwMTAwMDAwMDAwNDExMQorOjEwMDdEMDAwMkQ5MTAxMDAyNjAxMDA0MDgxMzIwMTAwMjUwMTAwNDBEOQorOjEwMDdFMDAwMkQxMTAxMDAwMDAwMDA0MDJEODEwMTAwMDAwMEEyNDFGOAorOjEwMDdGMDAwODFEMDAwMDAwMDAwODQ5NjgwMzIwMTAwRkYwMEEwREM2MAorOjEwMDgwMDAwQjk2QjAwMDBGODAwMDA0MTJEOTEwMDAwRjgwMDAwNDE5NAorOjEwMDgxMDAwMkQ4MTAwMDBEODAwMDA0MEIzMzMwMTAwMDAwMDkwREFDMQorOjEwMDgyMDAwOEJCMDAwMDAxMTAwMDA0NTg4RjQwMTAwNDAwMDAwNDQzNgorOjEwMDgzMDAwODBDRTAxMDAwMDAwQTQ0MDgxQjIwMDAwMDAwMEEzNDQ2QgorOjEwMDg0MDAwODlFQzAwMDAwMDAwMDA0Mjg5RDAwMTAwMDAwMDAwNDI1NQorOjEwMDg1MDAwODdCMDAxMDBEOTAwMDA0M0IyMzMwMTAwMDAwMDAwNTAwRQorOjEwMDg2MDAwQjVGMzAxMDAwQzAxQTBEQThCNDAwMDAwMDAwMDAwNDE0QworOjEwMDg3MDAwOEJDMDAxMDAwMDAwMDA0MTg3QzAwMTAwMDgwMUEyNDFCNworOjEwMDg4MDAwODk1MDAwMDBGRkZGMDA0NTg4ODgwMTAwMTAwMDAwNDVFNgorOjEwMDg5MDAwOEFGNDAxMDAxMjAxOTA0NDhBNDAwMDAwMDAwMDAwNDFFNworOjEwMDhBMDAwOEJDMDAxMDBGRkZGMDA0NThBQTgwMTAwMDAwMDgwNTBCNgorOjEwMDhCMDAwOEJFMDAxMDAwMDgwMDA0MEY5OUIwMTAwMDBDMDAwNDA3NworOjEwMDhDMDAwQjNDRjAxMDAxQzAxMDBGQzE5MzEwMTAwMUMwMTQwREEwQQorOjEwMDhEMDAwODEzMjAxMDAwMDAwNDFEQTgxQjIwMTAwMDAwMDAwNDFENAorOjEwMDhFMDAwRjlDMzAxMDAxNjAxOUZEQTgxMzIwMDAwMDI4MDAwNDA0NgorOjEwMDhGMDAwODFCMjAwMDAwMDAwMDA0NDkxQjAwMTAwMDAwMDAwRDk2NgorOjEwMDkwMDAwMkJCMTAxMDAxRTAxOUY5NDgwMzIwMDAwMTgwMDAwOTQ1QQorOjEwMDkxMDAwOTJFNDAxMDAwMDAwMDA0OEI1RjMwMTAwMDAwMDAwNDkyNgorOjEwMDkyMDAwQjQ5NzAxMDAwMDAwMDA0MUIzQzMwMTAwMUQwMUEyNDFDMgorOjEwMDkzMDAwOTE1MDAwMDAwMDAwODA0MDJCQjEwMTAwMjkwMTAwNTFCRQorOjEwMDk0MDAwOTNCMDAwMDAyOTAxMDA0RDkzQjAwMDAwMjkwMTAwNDkzNworOjEwMDk1MDAwOTNCMDAwMDAwMDAwMDA0MjkzQjAwMTAwMjkwMUEyNDFDMQorOjEwMDk2MDAwOTM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDAwMDEwNDA2MAorOjEwMDk3MDAwODFCMjAxMDAwMDAwMTE0MDgxQjIwMTAwMDAwMDEyNDA2QworOjEwMDk4MDAwODFCMjAxMDAwMDAwMTM0MDgxQjIwMTAwMDAwMDE0NDA1OAorOjEwMDk5MDAwODFCMjAxMDAwMDAwMTU0MDgxQjIwMTAwMDAwMDE2NDA0NAorOjEwMDlBMDAwODFCMjAxMDAwMDAwMTc0MDgxQjIwMTAwMDAwMDE4NDAzMAorOjEwMDlCMDAwODFCMjAxMDAwMDAwMTk0MDgxQjIwMTAwMDAwMDFBNDAxQworOjEwMDlDMDAwODFCMjAxMDAwMDAwMUI0MDgxQjIwMTAwMDAwMDFDNDAwOAorOjEwMDlEMDAwODFCMjAxMDAwMDAwMUQ0MDgxQjIwMTAwMDAwMDFFNDBGNAorOjEwMDlFMDAwODFCMjAxMDAwMDAwMUY0MDgxQjIwMTAwMDAwMDgwNDA4MAorOjEwMDlGMDAwODFCMjAxMDAwMDA0MDA0MEExOTkwMTAwMDAwMDAwNTBGNAorOjEwMEEwMDAwQTFEMTAxMDAwMDAwMDA0MDFCQjAwMTAwMDAwMDAwNDAyNworOjEwMEExMDAwMTlCMDAxMDAwMDAwMDA0MDE3QjAwMTAwMDAwMDAwNDBDNAorOjEwMEEyMDAwMTVCMDAxMDAwMDAwMDA0MDEzQjAwMTAwMDAwMDAwNDBCQworOjEwMEEzMDAwMTFCMDAxMDAwMDAwMDA0MDBGQjAwMTAwMDAwMDAwNDBCNAorOjEwMEE0MDAwMERCMDAxMDAwMDAwMDA0MDBCQjAwMTAwMDAwMDAwNDBBQworOjEwMEE1MDAwMDlCMDAxMDAwMDAwMDA0MDA3QjAwMTAwMDAwMDAwNDBBNAorOjEwMEE2MDAwMDVCMDAxMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDA5QworOjEwMEE3MDAwMDFCMDAxMDA0NDAxMjA0OEExNTEwMDAwMDAwMDgwNDA2NQorOjEwMEE4MDAwODFCMjAxMDA1MDAxMjI0Qjc0N0QwMDAwMDAwMDgwNDBDMworOjEwMEE5MDAwODFCMjAxMDA2MDAwMDA0QjYwOTkwMTAwMDAwMDAwQjFDQworOjEwMEFBMDAwN0VCMTAxMDA1MTAxQTg0MDgxMzIwMDAwNEUwMTAwNDA5QQorOjEwMEFCMDAwODFCMjAwMDAwNDAwODA0MDk3OTgwMTAwMDAwMDAwNThCNworOjEwMEFDMDAwMDc5MDAxMDBGMzlGMDA0MDgxQjIwMDAwMDAwMDAwNDQ0NQorOjEwMEFEMDAwQTVCMzAxMDBBRjAyMDA0MDgxMzIwMTAwQzUwMjAwNDAxMQorOjEwMEFFMDAwODEzMjAxMDAwMDAwMDA1QzA3OTAwMTAwRjM5RjAwNDA4QworOjEwMEFGMDAwQkZCMzAwMDA1RjAxMjJDQzg1N0YwMDAwMDAwMDAwNTFFMQorOjEwMEIwMDAwMDc5MDAxMDBGMzlGMDA0MDgxQjIwMDAwMDAwMDAwNDAwOAorOjEwMEIxMDAwNDlCMTAxMDBBRTAzMDBDQkEzQzkwMTAwRDAxNDAwNDBDRAorOjEwMEIyMDAwQTE5QjAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwNDgyOAorOjEwMEIzMDAwRjFCMTAxMDAwMDAwMDBEMEYxQjEwMTAwMDAwMDAwQ0FENQorOjEwMEI0MDAwRjFCMTAxMDAwMDAwMDBENUUxQjEwMTAwMDcwMDAwNDA1MworOjEwMEI1MDAwNjE5OTAxMDAyMDAwMDAyMDYyREQwMTAwNjgwMUE4NDBDOQorOjEwMEI2MDAwODEzMjAwMDAwMDAwMDBDQzg1OTMwMTAwQzUwMjAwNDBFNgorOjEwMEI3MDAwODEzMjAxMDBEMDE0MDA0MDQzOTkwMTAwMDAwMDAwRkFDNgorOjEwMEI4MDAwQkFCMzAxMDAwMDAwMDBGQUE0QjMwMTAwMDAwMDAwRjhBRAorOjEwMEI5MDAwQkNCMzAxMDAwMDE0MkY0MDgxQjAwMTAwMDAwMDAwRTc0OQorOjEwMEJBMDAwQTdCMzAxMDAwMDAwMDBEOEE5QjMwMTAwRkYwMDAwREREOQorOjEwMEJCMDAwODE4ODAxMDAwMjAwMDA0MDgwRjQwMTAwNzgwMTAwNDBCQgorOjEwMEJDMDAwODBDODAxMDA4ODAxMDBERDgxMzIwMDAwMDAwMDAwNDA4MworOjEwMEJEMDAwMTBCMTAwMDA4OTAxMDA0MDgxQjIwMDAwOEEwMTAwNDA4QworOjEwMEJFMDAwODFCMjAwMDA4QjAxMDA0MDgxQjIwMDAwOEMwMTAwNDAwNgorOjEwMEJGMDAwODFCMjAwMDA4RDAxMDA0MDgxQjIwMDAwOEYwMTAwNDBGMQorOjEwMEMwMDAwODFCMjAwMDA5MTAxMDA0MDgxQjIwMDAwNTUwMTAwNDAxNgorOjEwMEMxMDAwODFCMjAwMDBEMjAxMDA0MDgxQjIwMDAwNTUwMTAwNDBDNQorOjEwMEMyMDAwODFCMjAwMDBFMDAxMDA0MDgxQjIwMDAwRTEwMTAwNDAxQgorOjEwMEMzMDAwODFCMjAwMDA3RjAyMDA0MDgxQjIwMDAwODAwMjAwNDBDQgorOjEwMEM0MDAwODFCMjAwMDBGMTlGMDA0MDgxQjIwMDAwRjI5RjAwNDA5RAorOjEwMEM1MDAwODFCMjAwMDA3NzAxMDA0MTgxQzAxQTAwNUEwMTUxNDA2MQorOjEwMEM2MDAwODFCMjFBMDA1QTAxNTI0MDgxQjIxQTAwNUEwMTU1NDAwRAorOjEwMEM3MDAwODFCMjFBMDA1QTAxNTY0MDgxQjIxQTAwNTUwMTkxODE4MQorOjEwMEM4MDAwODAzMDFBMDA1QTAxNDU0MDgxQjIxQTAwNTUwMTkxODIwNAorOjEwMEM5MDAwODAzMDFBMDA1QTAxNDY0MDgxQjIwMDAwMDAwMDAwNDAzNgorOjEwMENBMDAwODlCMDAxMDAwMDAwMkY0MDgxQjAwMTAwMDAxNDAwNDAxNQorOjEwMENCMDAwNDk5OTAxMDBCNTAxMjJERUUxNkQwMDAwMDAwMDAwNEMwMQorOjEwMENDMDAwNDlDMTAxMDAwMDAwMDA0MTgxQzAwMTAwOTQwMUEyNDQxQgorOjEwMENEMDAwODE2QzAwMDAwMDAwMDA0QzQ5RDEwMTAwOUMwMTIyNDBDMQorOjEwMENFMDAwRTE2RDAwMDA5ODAxQTI0MTgxNTAwMDAwNTUwMTAwNDFEMgorOjEwMENGMDAwQkZCMzAwMDAwMDAwMDA0MkJGQjMwMTAwNTUwMUEwMEZDOAorOjEwMEQwMDAwQkQ2RjAwMDAwMDAwMDBERUUxQjEwMTAwMDAwMDAwNDQwMgorOjEwMEQxMDAwNDlDMTAxMDBCNzAxMDA0MDE5OTkwMTAwMDAwMDQyNDA5QgorOjEwMEQyMDAwODFCMjAxMDAwMDAwNDNGRjg1QjAwMTAwMDAwMDAwREUzOQorOjEwMEQzMDAwMTlCMTAxMDAwMDAwNDJGRjg3QjAwMTAwMDAwMDQzRkYyRAorOjEwMEQ0MDAwRTFCMTAxMDAwMDAwMDA0NDQ5QzEwMTAwMDAwMDJGRkY5MworOjEwMEQ1MDAwRTFCMTAxMDAwODE0MDBBNDgwQ0MwMTAwQUMwMTI2NDBFMAorOjEwMEQ2MDAwODEzMjAwMDAwMDAwMDA0MTg1QzAwMTAwQUEwMUEyNENCMAorOjEwMEQ3MDAwODE1MDAwMDBCNjAxMjJEMjgxMzIwMDAwQjEwMTIyNDEyRgorOjEwMEQ4MDAwQTU2RjAwMDA1NTAxQTJFMDgxMzIwMDAwMDAwMDAwRDJGMgorOjEwMEQ5MDAwQzFCMzAxMDAwMDAwMDA1Qzg5OTAwMTAwMDAwMDQwNDJFNgorOjEwMERBMDAwODBCMjAxMDAwMDAwNDE0MzgwQjIwMTAwMDAwMDAwRjA2OQorOjEwMERCMDAwODg5NDAxMDA1QTAxMDA0NEUwQjEwMDAwQjMwMTAwNDhFQQorOjEwMERDMDAwNDlDMTAwMDBCMTAxMDA1Qjg5OTAwMDAwQjA5RjAwQTAwNAorOjEwMEREMDAwOUVCMDAwMDAwMDAwMDA0RDgxQjAwMTAwMDAwMDAwNDMwMworOjEwMERFMDAwQ0I4MzAxMDAwMDAwNDU0MDgxQjIwMTAwQkEwMUEyNDE1RAorOjEwMERGMDAwODE1MDAwMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDQ1NDBFNAorOjEwMEUwMDAwODFCMjAxMDBDNDAxOTE4MjgyMzAwMDAwMDAwMDAwOEE5QQorOjEwMEUxMDAwODBCMDAxMDBCNjlGMDA0MDgwQ0UwMTAwQzMwMUE2NDAxMworOjEwMEUyMDAwODEzMjAwMDBDNDAxNTY0MDgxQjIwMDAwMDAwMDAwNTMyRQorOjEwMEUzMDAwNkY5MzAxMDBGMzlGMDA1MjZGOTMwMDAwMDAwMDAwNEQ3QworOjEwMEU0MDAwODFCMDAxMDAwMDAwMDA0MkNEODMwMTAwMDAwMDQ2NDA1NworOjEwMEU1MDAwODFCMjAxMDBDNzAxQTI0MTgxNTAwMDAwMDAwMDQ2NDA1QworOjEwMEU2MDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwRDEwMTkxODFCMAorOjEwMEU3MDAwODIzMDAwMDAwMDAwMDA4OTgwQjAwMTAwQjY5RjAwNDA3MQorOjEwMEU4MDAwODBDRTAxMDBEMDAxQTY0MDgxMzIwMDAwRDEwMTU1NDA0MgorOjEwMEU5MDAwODFCMjAwMDAwMDAwMDA1MjZGOTMwMTAwRjM5RjAwNTNFNQorOjEwMEVBMDAwNkY5MzAwMDAwMDAwMDA0MDgzQjAwMTAwMDAxNDAwNDA3OAorOjEwMEVCMDAwNDk5OTAxMDAwMDAwMjM0MDgxQjAwMTAwREEwMTIyREVERgorOjEwMEVDMDAwRTE2RDAwMDAwMDAwMDA0QzQ5QzEwMTAwMDAwMDAwNDEzQworOjEwMEVEMDAwODFDMDAxMDBENTAxQTI0NDgxNkMwMDAwNTUwMTAwNDM4RQorOjEwMEVFMDAwQkZCMzAwMDAwMDAwMDBGODE4QjEwMTAwMDAwMDQwRjg5NgorOjEwMEVGMDAwODBCMjAxMDAwMDAwNDFGMDgwQjIwMTAwMDAwMDAwNDAxQgorOjEwMEYwMDAwRjFCMTAxMDAwMDAwMDA0MEYxQjEwMTAwNUEwMTAwNDBDMAorOjEwMEYxMDAwRTFCMTAwMDBFMjAxMDA0MDkxQjAwMDAwMDAwMDAwNDE5QQorOjEwMEYyMDAwOTFCMDAxMDBEMDE0MkU0MDQ5QjEwMTAwMDUwMDAwNDBFRAorOjEwMEYzMDAwQTM5QjAxMDAwODAwMDBERDgxRjQwMTAwRTcwMTAwNDBFRgorOjEwMEY0MDAwODBDODAxMDAwMDAwMDA0MDEwQjEwMDAwRUQwMTAwNDAyOQorOjEwMEY1MDAwODFCMDAwMDA1ODAxMDBERUExQjMwMDAwRkYwMTAwNDA5NQorOjEwMEY2MDAwODFCMjAwMDAwMTAyMDA0MDgxQjAwMDAwMDcwMjAwNDA5MQorOjEwMEY3MDAwODFCMjAwMDA1NzAxMDBERkUxQjEwMDAwMDAwMDAwRDBBNQorOjEwMEY4MDAwQkFCMzAxMDAwMDAwMDBERUExQjEwMTAwMDIwMDAwRDJFRQorOjEwMEY5MDAwQTVFNzAxMDAwMDAwMDBEMkMxQjMwMTAwMDAwMDAwMDA3RAorOjEwMEZBMDAwRjBCMTAxMDBGNzAxMjI0NEMxNTMwMDAwRjYwMTg0NDE3MQorOjEwMEZCMDAwODE0MDAwMDBGQTAxMDA0MDgxMzIwMTAwMDAwMDAwRDBCMQorOjEwMEZDMDAwNDVCMTAxMDBGMTAxMDA0MUExQzEwMDAwQjEwMjAwNDBBMgorOjEwMEZEMDAwODEzMjAxMDBDNTAyMDA0MDgxMzIwMTAwNUEwMTAwREQ2QQorOjEwMEZFMDAwQTFCMTAwMDAwMDAwMDA0MDgxQjAwMTAwNDAwMDAwNDBCRAorOjEwMEZGMDAwQTU5QjAxMDBCMTAyMDA0MDgxMzIwMTAwNDAwMDAwRDNGNgorOjEwMTAwMDAwQTdDQjAxMDBDNTAyMDBFMEE1QjMwMDAwMDMwMDAwNDAyQgorOjEwMTAxMDAwQTM5QjAxMDA1ODAxMDBERUExQjMwMDAwMDAwMDAwNDRDMgorOjEwMTAyMDAwQkZCMzAxMDAwMDAwMDBERTgxOTAwMTAwNTUwMUEyQkFBQgorOjEwMTAzMDAwODAwNDAwMDA2MDAwMDBERTYxOTkwMTAwMDQwMkE4QjE5NAorOjEwMTA0MDAwODAzMDAwMDA1NzAxMDA0MEUwQjEwMDAwMDAwMDAwRDBGNworOjEwMTA1MDAwQkFCMzAxMDA2ODAyMDA0MDgxOTgwMTAwNUQwMjAwNERCMgorOjEwMTA2MDAwODMzMDAxMDAwMDAwMDA0NEUxQjMwMTAwMDAwMDAwNDRBRgorOjEwMTA3MDAwRTNCMzAxMDAwMDAwMDA0NEU1QjMwMTAwMDAwMDAwNDRCOAorOjEwMTA4MDAwRTlCMzAxMDAwMDAwMDA0NEVCQjMwMTAwMDAwMDAwNDQ5QworOjEwMTA5MDAwRjVCMzAxMDAwMDAwMDA0NEY3QjMwMTAwMDAwMDAwNDQ3NAorOjEwMTBBMDAwRjlCMzAxMDAxNTAyMjI0MDhGNkYwMDAwNzUwMjAwNDA2NQorOjEwMTBCMDAwODE5ODAxMDA1RDAyMDBDNzgzMzAwMTAwN0QwMjAwNDA3RAorOjEwMTBDMDAwODE5ODAxMDA1RDAyMDA0MjgzMzAwMTAwMDAwMDAwRThDOQorOjEwMTBEMDAwRjFCMTAxMDAwMDAwMDBFOUYxQjEwMTAwMDAwMDAwRUFGNworOjEwMTBFMDAwRjFCMTAxMDAwMDAwMDBFQkYxQjEwMTAwMDAwMDAwODU0QQorOjEwMTBGMDAwRjBCMTAxMDAwMDAwMDBFQ0YxQjEwMTAwMDAwMDAwRUREMgorOjEwMTEwMDAwRjFCMTAxMDAwMDAwMDBCMkYwQjEwMTAwRTA5RjAwNDAyOQorOjEwMTExMDAwODEzMjAxMDAwMDAwMDA0MEYwQjEwMTAwMDAwMDAwNDBGOQorOjEwMTEyMDAwRjFCMTAxMDAwMDAwMDBBQkYwQjEwMTAwMDAwMDAwQjgxNworOjEwMTEzMDAwRjBCMTAxMDAwMDAwMDBCOUYwQjEwMTAwMDAwMDAwQkFGOAorOjEwMTE0MDAwRjBCMTAxMDAwMDAwMDBCQkYwQjEwMTAwMjkwMkI4NDA3RAorOjEwMTE1MDAwODEzMDAwMDAwMDAwMDA0MDgxOTAwMTAwMkIwMkI5NDA2NgorOjEwMTE2MDAwODEzMjAwMDAwMDAwMDA0MTgxOTAwMTAwMkQwMkJBNDA1MAorOjEwMTE3MDAwODEzMjAwMDAwMDAwMDA0MjgxOTAwMTAwMkYwMkJCNDAzQworOjEwMTE4MDAwODEzMjAwMDAwMDAwMDA0MzgxOTAwMTAwMzEwMkJDNDAyOAorOjEwMTE5MDAwODEzMjAwMDAwMDAwMDA0NDgxOTAwMTAwMzMwMkJENDAxNAorOjEwMTFBMDAwODEzMjAwMDAwMDAwMDA0NTgxOTAwMTAwMzUwMkJFNDAwMAorOjEwMTFCMDAwODEzMjAwMDAwMDAwMDA0NjgxOTAwMTAwMzcwMkJGNDBFQworOjEwMTFDMDAwODEzMjAwMDAwMDAwMDA0NzgxOTAwMTAwMzkwMkM4NDBEMAorOjEwMTFEMDAwODEzMjAwMDAwMDAwMDA0ODgxOTAwMTAwM0IwMkM5NDBCQworOjEwMTFFMDAwODEzMjAwMDAwMDAwMDA0OTgxOTAwMTAwM0QwMkNBNDBBOAorOjEwMTFGMDAwODEzMjAwMDAwMDAwMDA0QTgxOTAwMTAwM0YwMkNCNDA5NAorOjEwMTIwMDAwODEzMjAwMDAwMDAwMDA0QjgxOTAwMTAwNDEwMkNDNDA3RgorOjEwMTIxMDAwODEzMjAwMDAwMDAwMDA0QzgxOTAwMTAwNDMwMkNENDA2QgorOjEwMTIyMDAwODEzMjAwMDAwMDAwMDA0RDgxOTAwMTAwNDUwMkNFNDA1NworOjEwMTIzMDAwODEzMjAwMDAwMDAwMDA0RTgxOTAwMTAwNDcwMkNGNDA0MworOjEwMTI0MDAwODEzMjAwMDAwMDAwMDA0RjgxOTAwMTAwMDAwMDAwNDA0QQorOjEwMTI1MDAwRjBCMTAxMDA0MDAwMDA0MEE1OUIwMTAwQUYwMjAwNDAzQQorOjEwMTI2MDAwODEzMjAxMDBDNTAyMDA0MDgxMzIwMTAwRDAxNDJFMDZGNworOjEwMTI3MDAwQTVCMzAxMDA0MDAwMDBEM0E3Q0IwMTAwMDAwMDAwRjA5RgorOjEwMTI4MDAwRjFCMTAxMDAwMDAwMDBGMUYxQjEwMTAwMDAwMDAwRjIzNQorOjEwMTI5MDAwRjFCMTAxMDAwMDAwMDBGNEYxQjEwMTAwMDAwMDAwRjUxRgorOjEwMTJBMDAwRjFCMTAxMDAwMDAwMDBGQUYxQjEwMTAwMDAwMDAwRkIwMworOjEwMTJCMDAwRjFCMTAxMDAwMDAwMDBGQ0YxQjEwMTAwMDAwMDAwRUIwMQorOjEwMTJDMDAwRjFCMTAxMDAwMDAwMDBFRUYxQjEwMTAwMDAwMDAwRUZGQgorOjEwMTJEMDAwRjFCMTAxMDAwMDAwMDBGM0YxQjEwMTAwMDAwMDAwRjZERgorOjEwMTJFMDAwRjFCMTAxMDAwMDAwMDBGREYxQjEwMTAwRjcwMTAwQzdGQworOjEwMTJGMDAwRTFCMTAwMDAwMDAwODA0MDgxQjIwMTAwNjMwMjAwNDhCQgorOjEwMTMwMDAwODAzMjAwMDAwMDAwNTE0MDFBQjEwMTAwMDAwMDRENDA0MQorOjEwMTMxMDAwODFCMjAxMDAwMDAwNDU0MDgxQjIwMTAwNjAwMkEyNDE5QgorOjEwMTMyMDAwODM1MDAwMDA1QzAyNDk0MDgxQjIwMDAwMDAwMDUyNDAzRQorOjEwMTMzMDAwMUNCMTAxMDAwMDAwNEU0MDgxQjIwMTAwMDAwMDQ2NDA5NworOjEwMTM0MDAwODFCMjAxMDA2NTAyQTI0MTgzNTAwMDAwNUMwMjRBNDA2NAorOjEwMTM1MDAwODFCMjAwMDAwMDAwMDBBMDlFQjAwMTAwMDAwMDAwODBFQgorOjEwMTM2MDAwRDhCMzAxMDAwMDAwMDBBMUQwQjMwMTAwMDAwMDAwQTIyQQorOjEwMTM3MDAwRDJCMzAxMDAwMDAwMDBBNEQ0QjMwMTAwMDAwMDAwRDBFQgorOjEwMTM4MDAwRDZCMzAxMDAwMDAwMDBEMURDQjMwMTAwMDAwMDAwRDJBMAorOjEwMTM5MDAwREVCMzAxMDAwMDAwMDA4OERBQjMwMTAwMDAwMDAwRDREMQorOjEwMTNBMDAwOEVCMzAxMDAwMDAwMDBEM0U2QjMwMTAwMDAwMDAwQUNFMgorOjEwMTNCMDAwRUNCMzAxMDAwMDAwMDA5OUZBQjMwMTAwMDAwMDAwRDU3MQorOjEwMTNDMDAwRTBCMzAxMDAwMDAwMDBENUUyQjMwMTAwMDAwMDAwRDU0OQorOjEwMTNEMDAwRTRCMzAxMDAwMDAwMDBENUU4QjMwMTAwMDAwMDAwRDUyRgorOjEwMTNFMDAwRUFCMzAxMDAwMDAwMDBENUY0QjMwMTAwMDAwMDAwRDUwRAorOjEwMTNGMDAwRjZCMzAxMDAwMDAwMDBENUY4QjMwMTAwMDAwMDAwQzdGQgorOjEwMTQwMDAwQTlCMTAxMDAwMDAwMDA0RjQwQjEwMTAwODEwMjAwNDA3RAorOjEwMTQxMDAwOTFCMDAwMDAwMDAwMDA0MTkxQjAwMTAwMDcwMDAwNDBDMQorOjEwMTQyMDAwQTM5QjAxMDAwODAwMDBERDgxRjQwMTAwODUwMjAwNDA1QgorOjEwMTQzMDAwODBDODAxMDAwMDAwMDA0MDEwQjEwMDAwOEEwMjAwNDA5NgorOjEwMTQ0MDAwODFCMjAwMDA5NTAyMDA0MDgxQjIwMDAwOTUwMjAwNDY4MgorOjEwMTQ1MDAwQTNCMzAwMDA5ODAyMDA0MDgxQjIwMDAwOUUwMjAwNDA0OQorOjEwMTQ2MDAwODFCMjAwMDA4QzAyMjM1MEE1NkYwMDAwMDAwMDAwNTBFNAorOjEwMTQ3MDAwQTVCMzAxMDBCQzAyMDA0MkE1NjMwMTAwQzUwMjAwNDAwMworOjEwMTQ4MDAwODEzMjAxMDBEMDE0MkQ0MDQ5QjEwMTAwMDAwMDAwRDA4QworOjEwMTQ5MDAwQkFCMzAxMDAwMDAwMDBERUExQjEwMTAwMDAwMDAwRjhCNQorOjEwMTRBMDAwMDBCMDAxMDA5NDAyMjI0NEE1NTMwMDAwOTEwMjAwNDFDMworOjEwMTRCMDAwQTFDMTAwMDA1QTAxMDBEREExQjEwMDAwQkMwMjAwREVBNAorOjEwMTRDMDAwQTEzMzAxMDBDNTAyMDA0MDgxMzIwMTAwNUEwMTAwNDBGMQorOjEwMTREMDAwODFCMjAwMDAwMDAwMDA0NUJGQjMwMTAwNTUwMUEyRDI1NworOjEwMTRFMDAwNzc3RDAwMDAwMDAwMDBEMjYxQjEwMTAwMDAwMDAwREU0NQorOjEwMTRGMDAwNjNCMTAxMDA5QjAyQTg0MDgxMzIwMDAwNUEwMTAwNDAwNAorOjEwMTUwMDAwODFCMjAwMDBCQzAyMDA1NEE1MzMwMTAwQzUwMjAwNDBCNgorOjEwMTUxMDAwODEzMjAxMDBEMDE0MkQ0MDQ5QjEwMTAwMDAwMDAwRjhEMworOjEwMTUyMDAwRDBCMzAxMDAwMDAwMDBGOEQyQjMwMTAwMDAwMDAwRjhDMQorOjEwMTUzMDAwRDRCMzAxMDAwMDAwMDBGOEQ2QjMwMTAwMDAwMDAwRjhBOQorOjEwMTU0MDAwMDhCMTAxMDBBOTAyMDA0MDgxOTgwMTAwNUQwMjAwNDYzNworOjEwMTU1MDAwODMzMDAxMDA1QTAxMDA0MDgxQjIwMDAwMDAwMDAwQTA2OQorOjEwMTU2MDAwOUVCMDAxMDAwMDAwMDBFODQzQjEwMTAwMDAwMDAwRTk2NgorOjEwMTU3MDAwNDVCMTAxMDAwMDAwMDBFQTQ5QjEwMTAwMDAwMDAwRUJBNAorOjEwMTU4MDAwQTFCMTAxMDAwMDAwMDA0RjQwQjEwMTAwMDAwMDAwRTdFMAorOjEwMTU5MDAwQTdCMzAxMDAwMDAwMDBEOEE5QjMwMTAwMDAwMDAwNDA3QgorOjEwMTVBMDAwNDlCMTAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjAzNworOjEwMTVCMDAwNDZCMTAxMDAwMDAwMDBEMkYxQjEwMTAwMDAwMDAwRDNFQgorOjEwMTVDMDAwRjFCMTAxMDAwMDAwMDBENEYxQjEwMTAwMDAwMDAwRDAzMQorOjEwMTVEMDAwRTFCMTAxMDAwMDAwMDBEMTYxQjEwMTAwMjAwMDAwMjA1NAorOjEwMTVFMDAwNjJERDAxMDBCOTAyQTg0MDgxMzIwMDAwMDAwMDgwQ0MxOQorOjEwMTVGMDAwODU5MzAxMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDhCOAorOjEwMTYwMDAwQTlCMzAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0JDNgorOjEwMTYxMDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDI3MworOjEwMTYyMDAwRjFCMTAxMDAwMDAwMDBEMEYxQjEwMTAwMDAwMDAwRDNEMQorOjEwMTYzMDAwRjFCMTAxMDBCODAyMDBENEUxQjEwMDAwMDAwMEEyQ0M3OQorOjEwMTY0MDAwODVGRjAwMDAwMDAwMDA1MDgxQjAwMTAwQzcwMkEyNDFFOAorOjEwMTY1MDAwODE1MDAwMDBDNjAyQTJGMjgwMzAwMDAwMDAwMDgwQ0M2MQorOjEwMTY2MDAwODU4MzAxMDAwMDAwMDA0MDgxQjAwMTAwQ0IwMjgwQTUwRAorOjEwMTY3MDAwODAzMjAwMDBDQzAyMDBBNTgwMzIwMDAwMDAwMDAwNDE1MgorOjEwMTY4MDAwODFDMDAxMDBDRDAyODBBNTgwMzIwMDAwODAwMTAwNDBCMQorOjEwMTY5MDAwODM5ODAxMDBENjAyMjA0RjgxNkMwMDAwMDAwMTAwNDBCOQorOjEwMTZBMDAwODM5ODAxMDBENjAyMjA0QjgxNkMwMDAwODAwMDAwNDAyRQorOjEwMTZCMDAwODM5ODAxMDBENjAyMjA0NzgxNkMwMDAwMDAwMDAwNDBBMgorOjEwMTZDMDAwODM5ODAxMDAwMDAwMDA0MTgyREMwMTAwMDM5MDAwNDE4QQorOjEwMTZEMDAwMjA5OTAxMDAwMDAwMDA0MDQ5QjEwMTAwMDAxNDJGNEM4NgorOjEwMTZFMDAwODNCMDAxMDAwMDAwMDA0MEYxQjEwMTAwREEwMkEyNDEyNAorOjEwMTZGMDAwODM1MDAwMDAwMjAwMDBBNTgwQzgwMTAwREQwMkEyQTUwMQorOjEwMTcwMDAwODA2QzAwMDAyMDAwMDA5MDIwOTkwMTAwMDAwMDAwNUYyNAorOjEwMTcxMDAwMjM5MTAxMDBFMDAyMUY5MTgwMzIwMDAwMzAwMDAwOTAxMAorOjEwMTcyMDAwMjA5OTAxMDAwMDAwMDA1RjIzOTEwMTAwRTMwMjFGOTE1NgorOjEwMTczMDAwODAzMjAwMDA3MDAwMDA5MDIwQTkwMTAwMDAwMDAwNUZDRQorOjEwMTc0MDAwMjM5MTAxMDBFNjAyMUY5MTgwMzIwMDAwMDAwMDAwNUYzQgorOjEwMTc1MDAwMjM5MTAxMDBFODAyMUY5MTgwMzIwMDAwNDA2ODAwOTA1MAorOjEwMTc2MDAwMjBBOTAxMDBFMDAwMDA0MDYxOTkwMTAwMjEwMDAwNDAzMworOjEwMTc3MDAwNjE5OTAxMDAyMjAwMDA0MDYxOTkwMTAwMjMwMDAwNDBBRQorOjEwMTc4MDAwNjE5OTAxMDAyNDAwMDA0MDYxOTkwMTAwMjUwMDAwNDA5QQorOjEwMTc5MDAwNjE5OTAxMDAyNjAwMDA0MDYxOTkwMTAwMjcwMDAwNDA4NgorOjEwMTdBMDAwNjE5OTAxMDBDMDAwMDA0MDYxOTkwMTAwRDAxNDAwNDAxRgorOjEwMTdCMDAwNDU5OTAxMDAwMjAxMDBBNjgwQjAwMTAwMDQwMzAwNDAyOQorOjEwMTdDMDAwODA5ODAxMDAwNjA1MDBBNjgyQjAwMTAwMDgwNzAwNDFDQworOjEwMTdEMDAwODI5ODAxMDAwMDAwMDA0MEYwQjEwMTAwMDAwMDAwNDFDQgorOjEwMTdFMDAwRTBCMTAxMDAzMDAzMDA0MDg1MzAwMTAwMzkwMzAwNDBDMgorOjEwMTdGMDAwODEzMjAxMDBEODE0MDA0MDQzOTkwMTAwRkYwMkEyRjg5MQorOjEwMTgwMDAwODA2QzAwMDAwMDAzMjJGMDgyNkMwMDAwMDAwMDAwNDJBNworOjEwMTgxMDAwMjE5MTAxMDBEMDE0MjA0MEUxQjEwMTAwMzAwMzAwMENGRgorOjEwMTgyMDAwODUzMDAxMDAzMDAzMDA0RDg1MTAwMTAwMzAwMzAwNEU2QgorOjEwMTgzMDAwODUxMDAxMDBEMDE0MjA0RkUxQjEwMTAwMzAwMzAwNEZBQQorOjEwMTg0MDAwODUxMDAxMDAzOTAzMDAwQzg1MzAwMTAwRDgxNDIwNDNCNQorOjEwMTg1MDAwODFCMDAxMDAwRjAzMjJGMDlFNkUwMDAwMzkwMzAwNEQ5RAorOjEwMTg2MDAwODUxMDAxMDBEODE0MjA0MjgxQjAwMTAwMEYwMzIyRjAzRQorOjEwMTg3MDAwOUU2RTAwMDAzOTAzMDA0RTg1MTAwMTAwRDgxNDIwNDFFRgorOjEwMTg4MDAwODFCMDAxMDAxMTAzQTJGMDlFNkUwMDAwMDAwMDAwNDkyQgorOjEwMTg5MDAwODFFMDAxMDAwMDAwMDA0MDIwOTUwMTAwMDMwMDAwOTA1RAorOjEwMThBMDAwMjA4RDAxMDAwMDAwMDA0MzIxOTUwMTAwMDAwMDAwMUI3NQorOjEwMThCMDAwODlCMDAxMDBEMDE0MjA0MEUxQjEwMTAwMzAwMzAwMTdDRAorOjEwMThDMDAwODUzMDAxMDAzMDAzMDA1ODg1MTAwMTAwMzAwMzAwNTlCNQorOjEwMThEMDAwODUxMDAxMDBEMDE0MjA0RkUxQjEwMTAwMzAwMzAwNUFGRgorOjEwMThFMDAwODUxMDAxMDAzOTAzMDAxNzg1MzAwMTAwRDgxNDIwNDAwRAorOjEwMThGMDAwODFCMDAxMDAyMzAzMjJGMDlFNkUwMDAwMzkwMzAwNThERQorOjEwMTkwMDAwODUxMDAxMDBEODE0MjA0MTgxQjAwMTAwMjMwMzIyRjA4QQorOjEwMTkxMDAwOUU2RTAwMDAzOTAzMDA1OTg1MTAwMTAwRDgxNDIwNDI0MgorOjEwMTkyMDAwODFCMDAxMDAyNzAzQTJGMDlFNkUwMDAwMDMwMDAwOTAyQQorOjEwMTkzMDAwMjA4RDAxMDAwMDAwMDA0MDIwOTUwMTAwMDAwMDAwMThFQgorOjEwMTk0MDAwODlCMDAxMDAwMDAwMDA0MDg4RTAwMTAwMkYwM0EyNDI5RQorOjEwMTk1MDAwMjE3RDAwMDBBNUE1MDA0MDgxOTgwMTAwRDAxNDIwNDAwMQorOjEwMTk2MDAwRTBCMTAxMDAzMDAzMDA0NDg0MzAwMTAwMzkwMzAwNDAzRAorOjEwMTk3MDAwODEzMjAxMDBEODE0MjA0MDgxQjIwMTAwMkYwM0EyRjA2RgorOjEwMTk4MDAwODA2QzAwMDAwMDAwMDA0MTg5RTAwMTAwRTAwMDgwNDAyMAorOjEwMTk5MDAwNjE5OTAxMDA3MDE1MDA0MDQ3OTkwMTAwMDAwMDAwNDg1RQorOjEwMTlBMDAwRjFCMTAxMDAwMDAwMDA0MkYwQjEwMTAwRDAxNDAwNDA4QworOjEwMTlCMDAwRjE5OTAxMDAwMDAwMDA1NTg3QjQwMTAwMDQwMDAwNDBDNworOjEwMTlDMDAwNjE5OTAxMDA3MDE1MDA0MzYyOTkwMTAwMzYwM0E4NDAzNworOjEwMTlEMDAwODEzMjAwMDA0MTAzMDA0MDgxQjIwMDAwNzAxNTAwNDBEOAorOjEwMTlFMDAwNDc5OTAxMDAwMDAwMDA0OEYxQjEwMTAwRDgxNDAwNDBGRgorOjEwMTlGMDAwRjE5OTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAwMDAwNTUyMworOjEwMUEwMDAwODdCNDAxMDAwMjAwMDA0MDYxOTkwMTAwNzAxNTAwNDM5NQorOjEwMUExMDAwNjI5OTAxMDAzRjAzQTg0MDgxMzIwMDAwMDAwMDAwNDhBNQorOjEwMUEyMDAwODdCMDAxMDA0MjAzQTI0MTg3NTAwMDAwMDAwMEEyRjJFQgorOjEwMUEzMDAwODZCMDAwMDAxMDAwMDBGMTg2RjQwMTAwNDEwMzI2NDA0QQorOjEwMUE0MDAwODEzMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDAwMDAwNDcyNQorOjEwMUE1MDAwODRCMDAxMDAwMDAwQTI0ODg0ODQwMDAwMDAwMDAwNUYwMAorOjEwMUE2MDAwNjFCMTAxMDAwMDAwMDA1QzhGOTAwMTAwMDAwMDAwNDdBMAorOjEwMUE3MDAwNjJCMTAxMDA0OTAzQTg0MDgxMzIwMDAwRjU5RjAwNDc5MAorOjEwMUE4MDAwOTgzMDAxMDAwMDA4MDA0NzhFQzgwMTAwNDcwMzAwNUM0MQorOjEwMUE5MDAwOEY4MDAwMDBFMDAwMDA0MDYxOTkwMTAwNTgxNTJENDA0MgorOjEwMUFBMDAwOERCMDAxMDBEMDE0MkRGMDg4QjAwMTAwMDAwMDAwRkFDNAorOjEwMUFCMDAwOEFCMDAxMDAwMDAwMDA0NTgxQjAwMTAwMDcwMDAwNDUyOAorOjEwMUFDMDAwODI4ODAxMDAwMDAwMDA0MzhCRjAwMTAwMDAwMDAwNDgwNAorOjEwMUFEMDAwODNFMDAxMDAwMDAwMDA0NjgyOTQwMTAwMjAwMDAwNDFFNAorOjEwMUFFMDAwNjA5OTAxMDAwMDAwMDA0MThEQzAwMTAwNjQwMzIyNUY4NQorOjEwMUFGMDAwOEQ2QzAwMDA1NTAzQTI0MTgxNTAwMDAwNTMwMzAwNDA0QgorOjEwMUIwMDAwODFCMjAwMDAwODAwMDA0MDg1OTgwMTAwMDAwMDAwNDRGOAorOjEwMUIxMDAwODJCMDAxMDAwMDAwMDA0MTg2QjAwMTAwMDAxQzAwNDNCQgorOjEwMUIyMDAwODZEODAxMDAwMDAwQTY0MTg1NTAwMTAwNjAwMzAwNDFGNQorOjEwMUIzMDAwODNFMDAwMDA1RTAzMDA0MDgxMzIwMTAwMDAwMDAwNDhBNQorOjEwMUI0MDAwODVFMDAxMDBEMDE0MkY0Njg0OTQwMTAwMjAwMDAwNDI1QgorOjEwMUI1MDAwNjA5OTAxMDBDMDAwMDA0MDYxOTkwMTAwMDAwMDgwNDBEMAorOjEwMUI2MDAwODFCMjAxMDAwNzAwMDA0NTgwODgwMTAwMDAwMDAwNDNBOQorOjEwMUI3MDAwOEJGMDAxMDAwMDA0MDA0MDgzOTgwMTAwNkYwM0EwNDEzNgorOjEwMUI4MDAwODE1MDAwMDA2RDAzMDA0MTgyRTgwMDAwMDAwMDgwNDFBOAorOjEwMUI5MDAwOEVDMDAxMDBBRTAzMDA0MEEzOTkwMTAwMDAwMDAwNTQ3NAorOjEwMUJBMDAwODFCMDAxMDA2MDE1MDA0MDg1OTgwMTAwMDgwMDAwNDBFOAorOjEwMUJCMDAwNDBFNDAxMDAwMDAwMDA1QTQxOTQwMTAwMDAwMDAwNTA4MAorOjEwMUJDMDAwNDFFMDAxMDAwMDAwMDA0MjQwOTQwMTAwMDAwMDAwNDE5QgorOjEwMUJEMDAwODFDMDAxMDAwMDAwQTM1NTgxNkMwMTAwMDAwMDAwNDE5QworOjEwMUJFMDAwQTNDMTAxMDA3MzAzMDA1MDg1QzAwMDAwMDAwMDAwNDA0NQorOjEwMUJGMDAwNDlCMTAxMDAwMDAyMDA0MDgzOTgwMTAwMDAxNjAwNDAzNgorOjEwMUMwMDAwNDU5OTAxMDAwMDAwMDA0MEYxQjEwMTAwN0UwM0EyNDFBRQorOjEwMUMxMDAwODM1MDAwMDAwMDAwMDA0MDg1QjAwMTAwMEIwMDAwNDQyQworOjEwMUMyMDAwODJGNDAxMDAxQTE1MDBBNjg2QjAwMTAwNzAxNTAwNDA2QworOjEwMUMzMDAwNDU5OTAxMDAwMDA4MDA0MEYxOTkwMTAwMDAwMDAwNDJCMAorOjEwMUM0MDAwRjBCMTAxMDAwMDE2MDA0MEUxOTkwMTAwMDQwMDAwNDBERAorOjEwMUM1MDAwNjE5OTAxMDA3MDE1MDA0MzYyOTkwMTAwODgwM0E4NDA1MgorOjEwMUM2MDAwODEzMjAwMDA4QTAzMjI1QTczN0QwMDAwN0EwMDAwNDAwRQorOjEwMUM3MDAwNjE5OTAxMDA4QjAzQThCMTdFMzEwMDAwMDAwODAwNDI4OQorOjEwMUM4MDAwODRDODAxMDA4MzAzQTI0MTgzNTAwMDAwMDAwMDgwNDAwQgorOjEwMUM5MDAwODFCMjAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMUNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMUNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMUNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMUNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMUNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMUNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMUQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMUQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMUQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMUQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMUQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMUQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMUQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMUQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMUQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMURBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMURCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMURDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMUREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMURFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMURGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMUUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMUUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMUUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMUUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMUU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMUU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMUU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMUU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMUU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMUU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMUVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMUVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMUVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMUVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMUVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMUVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMUYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMUYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMUYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMUYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMUY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMUY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMUY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMUZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMUZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMUZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMUZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMUZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMUZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMjAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMjAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMjAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMjAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMjA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMjA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMjA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMjA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMjA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMjA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMjBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMjBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMjBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMjBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMjExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMjEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMjEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMjE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMjE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMjE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMjE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMjE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMjE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMjFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMjFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMjFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMjFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMjFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMjFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMjIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMjIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMjIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMjIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMjI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMjI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMjI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMjI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMjI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMjI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMjJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMjJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMjJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMjMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMjMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMjMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMjMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMjM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMjM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMjM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMjM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMjM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMjM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMjNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMjNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMjNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMjNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMjQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMjQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMjQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMjQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMjQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMjQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMjQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMjRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMjRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMjRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMjREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMjRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMjRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMjUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMjUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMjUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMjUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMjU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMjU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMjU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMjU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMjU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMjU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMjVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMjVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMjVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMjVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMjYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMjYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMjYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMjY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMjY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMjY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMjZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMjZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMjZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMjZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMjZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMjZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMjcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMjcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMjcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMjczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMjc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMjc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMjc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMjdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMjdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMjdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMjdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMjgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMjgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMjgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMjg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMjg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMjg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMjg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMjg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMjg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMjhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMjhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMjhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMjhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMjhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMjhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMjkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwMjkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMjkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMjkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMjk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMjk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMjk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMjk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMjlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMjlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMjlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMkExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwMkEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMkEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMkE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwMkE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwMkE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwMkE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwMkE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwMkE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwMkFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwMkFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwMkFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwMkFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwMkFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwMkFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwMkIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwMkIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwMkIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwMkIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwMkI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwMkI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwMkI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwMkI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwMkI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwMkI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwMkJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwMkJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwMkJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwMkJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwMkJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMkJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwMkMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwMkMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwMkMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwMkMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwMkM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwMkM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwMkM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwMkM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwMkM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwMkM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMkNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMkNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMkNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMkNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMkQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMkQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMkQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMkQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMkQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMkQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMkQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMkQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMkQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMkRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMkRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMkRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMkREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMkRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMkRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMkUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMkUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMkUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMkUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMkU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMkU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMkU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMkU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMkU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMkU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMkVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMkVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMkVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMkVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMkVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMkVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMkYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMkYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMkYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMkYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMkY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMkY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMkY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMkY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMkZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMkZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMkZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMkZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMkZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMkZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMzAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMzAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMzAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMzAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMzA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMzA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMzA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMzA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMzA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMzA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMzBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMzBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMzBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMzBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMzBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMzEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMzExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMzEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMzEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMzE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMzE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMzE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMzE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMzE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMzE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMzFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMzFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMzFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMzFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMzFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMzFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMzIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMzIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMzIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMzIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMzI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMzI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMzI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMzI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMzI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMzI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMzJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMzJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMzJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMzJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMzJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMzJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMzMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMzMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMzMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMzMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMzM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMzM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMzM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMzM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMzM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMzM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMzNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMzNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMzNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMzNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMzNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMzNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMzQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMzQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMzQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMzQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMzQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMzQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMzQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMzRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMzRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMzRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMzREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMzRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMzRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMzUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMzUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMzUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMzUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMzU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMzU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMzU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMzU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMzU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMzU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMzVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMzVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMzVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMzVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMzVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMzYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMzYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMzYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMzY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMzY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMzY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMzY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMzY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMzY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMzZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMzZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMzZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMzZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMzZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMzZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMzcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMzcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMzcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMzczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMzc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMzc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMzc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMzc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMzc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMzc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMzdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMzdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMzdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMzdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMzdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMzdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMzgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMzgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMzgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMzgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMzg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMzg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMzg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMzg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMzg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMzg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMzhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMzhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMzhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMzhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMzhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMzhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMzkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMzkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMzkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMzkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMzk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMzk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMzk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMzk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMzk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMzk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMzlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMzlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMzlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMzlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMzlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMzlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwM0EwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwM0ExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwM0EyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwM0EzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwM0E0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwM0E1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwM0E2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwM0E3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwM0E4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwM0E5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwM0FBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwM0FCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwM0FDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwM0FEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwM0FFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwM0FGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwM0IwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwM0IxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwM0IyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwM0IzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwM0I0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwM0I1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwM0I2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwM0I3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwM0I4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwM0I5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwM0JBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwM0JCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwM0JDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwM0JEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwM0JFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwM0JGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwM0MwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwM0MxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwM0MyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwM0MzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwM0M0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwM0M1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwM0M2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwM0M3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwM0M4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwM0M5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwM0NBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwM0NCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwM0NDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwM0NEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwM0NFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwM0NGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwM0QwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwM0QxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwM0QyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwM0QzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwM0Q0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwM0Q1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwM0Q2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwM0Q3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwM0Q4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwM0Q5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwM0RBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwM0RCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwM0RDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwM0REMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwM0RFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwM0RGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwM0UwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwM0UxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwM0UyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwM0UzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwM0U0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwM0U1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwM0U2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwM0U3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwM0U4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwM0U5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwM0VBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwM0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwM0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwM0VEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwM0VFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwM0VGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwM0YwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwM0YxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwM0YyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwM0YzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwM0Y0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwM0Y1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwM0Y2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwM0Y3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwM0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwM0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwM0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwM0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwM0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwM0ZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwM0ZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwM0ZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNDAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwNDAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwNDAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwNDAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwNDA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwNDA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwNDA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwNDA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwNDA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwNDA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwNDBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwNDBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwNDBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwNDBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwNDBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwNDBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNDEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwNDExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwNDEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwNDEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwNDE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwNDE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwNDE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwNDE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwNDE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwNDE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwNDFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwNDFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwNDFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwNDFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNDFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwNDFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwNDIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwNDIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwNDIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNDIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwNDI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwNDI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwNDI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwNDI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwNDI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwNDI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwNDJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwNDJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwNDJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwNDJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwNDJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwNDJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwNDMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwNDMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwNDMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNDMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNDM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNDM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwNDM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwNDM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwNDM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwNDM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwNDNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNDNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNDNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNDNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwNDNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwNDNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwNDQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwNDQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwNDQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwNDQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwNDQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwNDQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwNDQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNDQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNDQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNDQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwNDRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwNDRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwNDRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwNDREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwNDRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNDRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNDUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNDUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwNDUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwNDUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwNDU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwNDU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwNDU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwNDU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwNDU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwNDU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwNDVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwNDVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwNDVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwNDVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwNDVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwNDVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwNDYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwNDYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwNDYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwNDYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwNDY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwNDY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwNDY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwNDY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwNDY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwNDY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwNDZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwNDZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwNDZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwNDZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwNDZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwNDZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwNDcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwNDcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwNDcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwNDczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwNDc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwNDc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwNDc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwNDc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwNDc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwNDc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwNDdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwNDdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwNDdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwNDdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwNDdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwNDdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwNDgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwNDgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwNDgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwNDgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwNDg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwNDg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwNDg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwNDg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwNDg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwNDg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwNDhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwNDhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwNDhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwNDhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwNDhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwNDhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwNDkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwNDkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwNDkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwNDkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwNDk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwNDk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwNDk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwNDk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwNDk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwNDk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwNDlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwNDlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwNDlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwNDlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwNDlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwNDlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwNEEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwNEExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwNEEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwNEEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwNEE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwNEE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNEE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwNEE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwNEE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwNEE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwNEFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwNEFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwNEFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwNEFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwNEFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwNEFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwNEIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwNEIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwNEIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwNEIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwNEI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwNEI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwNEI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwNEI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwNEI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwNEI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwNEJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwNEJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwNEJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwNEJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwNEJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwNEJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwNEMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwNEMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwNEMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwNEMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwNEM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwNEM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwNEM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwNEM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwNEM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwNEM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwNENBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwNENCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwNENDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwNENEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwNENFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwNENGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwNEQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwNEQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwNEQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwNEQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwNEQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwNEQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwNEQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwNEQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwNEQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwNEQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwNERBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwNERCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwNERDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwNEREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwNERFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwNERGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwNEUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwNEUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwNEUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwNEUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwNEU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwNEU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwNEU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwNEU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwNEU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwNEU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwNEVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwNEVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwNEVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwNEVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwNEVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwNEVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwNEYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwNEYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwNEYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwNEYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwNEY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwNEY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwNEY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwNEY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwNEY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwNEY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwNEZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwNEZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwNEZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwNEZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwNEZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNEZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwNTAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwNTAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwNTAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwNTAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwNTA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwNTA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwNTA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwNTA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwNTA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwNTA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwNTBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwNTBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwNTBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwNTBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwNTBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNTBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwNTEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwNTExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwNTEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwNTEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwNTE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwNTE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwNTE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwNTE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwNTE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwNTE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwNTFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwNTFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwNTFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNTFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwNTFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwNTFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwNTIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwNTIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNTIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwNTIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwNTI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwNTI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwNTI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwNTI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwNTI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwNTI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwNTJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwNTJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwNTJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwNTJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwNTJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwNTJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwNTMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwNTMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNTMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNTMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNTM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwNTM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwNTM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwNTM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwNTM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwNTM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNTNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNTNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNTNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwNTNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwNTNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwNTNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwNTQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwNTQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwNTQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwNTQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwNTQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwNTQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNTQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNTQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNTQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwNTQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwNTRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwNTRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwNTRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwNTREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNTRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNTRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwNTUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwNTUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwNTUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwNTUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwNTU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwNTU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwNTU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwNTU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwNTU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwNTU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwNTVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwNTVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwNTVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwNTVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwNTVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwNTVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNTYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwNTYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwNTYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwNTYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwNTY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwNTY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwNTY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwNTY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwNTY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwNTY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwNTZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwNTZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwNTZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwNTZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwNTZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwNTZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwNTcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwNTcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwNTcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwNTczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwNTc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwNTc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwNTc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwNTc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwNTc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwNTc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwNTdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwNTdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwNTdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwNTdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwNTdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwNTdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwNTgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwNTgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwNTgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwNTgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwNTg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwNTg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwNTg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwNTg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwNTg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwNTg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwNThBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwNThCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwNThDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwNThEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwNThFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwNThGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwNTkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwNTkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwNTkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwNTkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwNTk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwNTk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwNTk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwNTk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwNTk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwNTk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwNTlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwNTlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwNTlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwNTlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwNTlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwNTlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwNUEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwNUExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwNUEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwNUEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwNUE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNUE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwNUE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwNUE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwNUE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwNUE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwNUFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwNUFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwNUFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwNUFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwNUFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwNUFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwNUIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwNUIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwNUIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwNUIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwNUI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwNUI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwNUI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwNUI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwNUI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwNUI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwNUJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwNUJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwNUJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwNUJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwNUJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwNUJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwNUMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwNUMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwNUMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwNUMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwNUM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwNUM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwNUM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwNUM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwNUM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwNUM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwNUNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwNUNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwNUNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwNUNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwNUNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwNUNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwNUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwNUQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwNUQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwNUQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwNUQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwNUQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwNUQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwNUQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwNUQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwNUQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwNURBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwNURCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwNURDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwNUREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwNURFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwNURGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwNUUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwNUUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwNUUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwNUUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwNUU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwNUU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwNUU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwNUU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwNUU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwNUU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwNUVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwNUVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwNUVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwNUVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwNUVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwNUVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwNUYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwNUYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwNUYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwNUYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwNUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwNUY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwNUY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwNUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwNUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwNUY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwNUZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwNUZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwNUZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwNUZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNUZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwNUZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwNjAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwNjAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwNjAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwNjAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwNjA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwNjA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwNjA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwNjA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwNjA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwNjA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwNjBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwNjBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwNjBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwNjBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwNjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwNjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwNjExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwNjEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwNjEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwNjE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwNjE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwNjE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwNjE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwNjE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwNjE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwNjFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwNjFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNjFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwNjFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwNjFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwNjFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwNjIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNjIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwNjIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwNjIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwNjI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwNjI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwNjI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwNjI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwNjI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwNjI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwNjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwNjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwNjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwNjJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwNjJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwNjJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwNjMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNjMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNjMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNjMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwNjM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwNjM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwNjM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwNjM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwNjM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNjM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNjNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNjNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwNjNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwNjNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwNjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwNjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwNjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwNjQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwNjQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwNjQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwNjQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNjQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNjQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwNjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwNjQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwNjRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwNjRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwNjRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNjREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNjRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwNjRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwNjUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwNjUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwNjUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwNjUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwNjU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwNjU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwNjU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwNjU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwNjU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwNjU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwNjVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwNjVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwNjVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwNjVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwNjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwNjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwNjYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwNjYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwNjYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwNjY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwNjY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwNjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwNjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwNjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwNjY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwNjZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwNjZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwNjZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwNjZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwNjZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwNjZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwNjcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwNjcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwNjcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwNjczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwNjc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwNjc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwNjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwNjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwNjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwNjc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwNjdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwNjdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwNjdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwNjdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwNjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwNjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwNjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwNjgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwNjgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwNjgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwNjg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwNjg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwNjg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwNjg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwNjg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwNjg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwNjhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwNjhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwNjhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwNjhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwNjhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwNjhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwNjkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwNjkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwNjkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwNjkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwNjk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwNjk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwNjk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwNjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwNjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwNjk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwNjlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwNjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwNjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwNjlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwNjlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwNjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwNkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwNkExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwNkEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwNkEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNkE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwNkE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwNkE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwNkE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwNkE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwNkE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwNkFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwNkFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwNkFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwNkFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwNkFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwNkFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwNkIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwNkIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwNkIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwNkIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwNkI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwNkI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwNkI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwNkI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwNkI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwNkI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwNkJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwNkJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwNkJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwNkJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwNkJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwNkJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwNkMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwNkMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwNkMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwNkMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwNkM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwNkM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwNkM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwNkM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwNkM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwNkM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwNkNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwNkNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwNkNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwNkNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwNkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwNkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwNkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwNkQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwNkQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwNkQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwNkQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwNkQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwNkQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwNkQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwNkQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwNkQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwNkRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwNkRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwNkRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwNkREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwNkRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwNkRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwNkUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwNkUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwNkUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwNkUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwNkU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwNkU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwNkU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwNkU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwNkU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwNkU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwNkVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwNkVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwNkVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwNkVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwNkVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwNkVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwNkYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwNkYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwNkYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwNkYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwNkY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwNkY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwNkY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwNkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwNkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwNkY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwNkZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwNkZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwNkZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNkZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwNkZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwNkZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwNzAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwNzAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwNzAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwNzAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwNzA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwNzA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwNzA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwNzA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwNzA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwNzA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwNzBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwNzBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwNzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNzBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwNzBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwNzBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwNzEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwNzExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwNzEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwNzEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwNzE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwNzE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwNzE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwNzE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwNzE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwNzE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwNzFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNzFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwNzFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwNzFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwNzFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwNzFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwNzIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwNzIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwNzIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwNzIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwNzI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwNzI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwNzI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwNzI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwNzI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwNzI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwNzJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwNzJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwNzJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwNzJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwNzJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwNzJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNzMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNzMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNzMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwNzMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwNzM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwNzM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwNzM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwNzM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNzM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNzM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNzNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwNzNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwNzNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwNzNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwNzNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwNzNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNzQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwNzQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwNzQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwNzQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNzQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNzQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwNzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwNzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwNzQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwNzRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwNzRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNzRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNzREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwNzRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwNzRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwNzUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwNzUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwNzUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwNzUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwNzU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwNzU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwNzU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwNzU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwNzU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwNzU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwNzVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwNzVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwNzVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwNzVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNzVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwNzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwNzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwNzYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwNzYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwNzYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwNzY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwNzY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwNzY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwNzY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwNzY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwNzY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwNzZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwNzZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwNzZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwNzZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwNzZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwNzZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwNzcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwNzcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwNzcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwNzczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwNzc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwNzc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwNzc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwNzc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwNzc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwNzc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwNzdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwNzdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwNzdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwNzdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwNzdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwNzdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwNzgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwNzgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwNzgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwNzgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwNzg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwNzg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwNzg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwNzg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwNzg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwNzg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwNzhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwNzhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwNzhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwNzhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwNzhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwNzhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwNzkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwNzkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwNzkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwNzkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwNzk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwNzk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwNzk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwNzk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwNzk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwNzk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwNzlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwNzlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwNzlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwNzlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwNzlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwNzlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwN0EwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwN0ExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwN0EyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwN0EzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwN0E0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwN0E1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwN0E2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwN0E3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwN0E4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwN0E5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwN0FBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwN0FCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwN0FDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwN0FEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwN0FFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwN0FGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwN0IwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwN0IxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwN0IyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwN0IzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwN0I0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwN0I1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwN0I2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwN0I3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwN0I4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwN0I5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwN0JBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwN0JCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwN0JDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwN0JEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwN0JFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwN0JGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwN0MwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwN0MxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwN0MyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwN0MzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwN0M0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwN0M1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwN0M2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwN0M3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwN0M4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwN0M5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwN0NBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwN0NCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwN0NDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwN0NEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwN0NFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwN0NGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwN0QwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwN0QxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwN0QyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwN0QzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwN0Q0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwN0Q1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwN0Q2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwN0Q3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwN0Q4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwN0Q5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwN0RBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwN0RCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwN0RDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwN0REMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwN0RFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwN0RGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwN0UwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwN0UxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwN0UyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwN0UzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwN0U0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwN0U1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwN0U2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwN0U3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwN0U4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwN0U5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwN0VBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwN0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwN0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwN0VEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwN0VFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwN0VGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwN0YwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwN0YxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwN0YyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwN0YzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwN0Y0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwN0Y1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwN0Y2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwN0Y3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwN0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwN0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwN0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwN0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwN0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwRjcwRjAwQkM0NQorOjEwN0ZEMDAwODBCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBCNgorOjEwN0ZFMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBBNQorOjEwN0ZGMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDA5NQorOjEwODAwMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDA4NAorOjEwODAxMDAwODFCMjAwMDAzMTgwMDA0MDgxQjIwMDAwMzQ4MDAwNDAxNQorOjEwODAyMDAwODFCMjAwMDAzNTgwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwODAzMDAwODFCMjAwMDAxQjgwODE4MDgwMzIwMDAwRUM4OUEyNDA2OAorOjEwODA0MDAwOTE2RjAwMDAwMDAwMDA0QzkwQjMwMTAwNUM5NTJFQTJERgorOjEwODA1MDAwODBCMDAxMDBGRjAwMDA4MEY0ODkwMTAwOTA5NTJBQzhEQgorOjEwODA2MDAwRTVCMTAxMDAwMDAwMDBBMUYwQjEwMTAwMDAwMDAwNDBGNgorOjEwODA3MDAwRjBCMTAxMDAwMDAwMDBBNEYwQjEwMTAwMDAwMDAwRDA0OAorOjEwODA4MDAwRjBCMTAxMDAwMDAwMDBEMUYwQjEwMTAwMDAwMDAwRDIwOQorOjEwODA5MDAwRjBCMTAxMDAwMDAwMDA0Q0YwQjEwMTAwMDAwMDAwRDQ3QworOjEwODBBMDAwRjBCMTAxMDAwMDAwMDBEM0YwQjEwMTAwMDAwMDAwRUVDQgorOjEwODBCMDAwRjBCMTAxMDAwMDAwMDA0RUYwQjEwMTAwMDAwMDAwNDBFRQorOjEwODBDMDAwNDRCMTAxMDAxODgwMTE4MTk4MzAwMDAwMDAwMDUxNDAzNworOjEwODBEMDAwODFCMjAxMDAxQTgwMTE4Mjk4MzAwMDAwMDAwMDUyNDBFNQorOjEwODBFMDAwODFCMjAxMDBFQzg5MDA0OEZEOTMwMDAwQjYwMzAwNDAxNgorOjEwODBGMDAwQTE5OTAxMDAyMzgwQTI0MkZEN0YwMDAwMjA4MDAwODAyMgorOjEwODEwMDAwODAzMjAwMDAyMjgwMTE4MTgyMzAwMDAwMjI4MDUxNDBBNAorOjEwODExMDAwODFCMjAwMDAyMjgwMTE4MjgyMzAwMDAwMjI4MDUyNDAxMQorOjEwODEyMDAwODFCMjAwMDAyQzgwMDA0OEZEOTMwMDAwMjc4MDAwODA3MQorOjEwODEzMDAwODAzMjAwMDAyNjgwQTI1MzA3N0MwMDAwMDAwMDUxNTNDQgorOjEwODE0MDAwMDc5MDAxMDAyQTgwMDA1MjA3OTAwMDAwMjk4MEEyNTI2NworOjEwODE1MDAwMDc3QzAwMDAwMDAwNTI1MjA3OTAwMTAwMDAwMDAwNTMwRAorOjEwODE2MDAwMDc5MDAxMDAwMDAwMDA0OEZEOTMwMTAwMDAwMDAwNDU1OQorOjEwODE3MDAwRjM5MzAxMDA1Qzk1MkVBMjUyQjMwMTAwRkYwMDAwODAzMgorOjEwODE4MDAwRjQ4OTAxMDAwMDAwMDA0Q0U0QjEwMTAwMDAwMDAwQTlFNgorOjEwODE5MDAwNDVCMTAxMDAzMDgwMDA0QzgwQjIwMDAwMDAwMDQ1NDAzNQorOjEwODFBMDAwODFCMjAxMDAwMDAwNTU0MDgxQjIwMTAwMUI4NDA1NDBFRQorOjEwODFCMDAwNDlCMTAwMDAxQjg0MDU0MDQ5QjEwMDAwMDAwMDA1NDBBMgorOjEwODFDMDAwNDlCMTAxMDBFMTgwMDA0MDgxMzIwMTAwMDAwMDAwNEIxNAorOjEwODFEMDAwREVCMjAxMDA3NzAwMDA0MDRCOTkwMTAwMDAwMDAwNDAzMgorOjEwODFFMDAwRkQ5MzAxMDAwMDAwMDA0OEZEODMwMTAwMDIwMDAwNDBGMworOjEwODFGMDAwOUI5QjAxMDAwMDAwMDBBNTlDQjMwMTAwRjY5OTAwNDA4NAorOjEwODIwMDAwODEzMjAxMDA1ODk1MjA0NEUwQjEwMTAwMDBDMDAwQTY3MQorOjEwODIxMDAwMzZCMTAxMDBEMDE0MDA0MDQ3OTkwMTAwMDUwMDAwNDAyQworOjEwODIyMDAwRjU5OTAxMDAwMDM4MDA0MEY1OTkwMTAwMDAwNjAwNDA3MgorOjEwODIzMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDUxODAwNDA4MworOjEwODI0MDAwRjU5OTAxMDAwMjA5MDA0MEY1OTkwMTAwMDQwMDAwNDA4MQorOjEwODI1MDAwRjU5OTAxMDA1MDAzMDA0MDgxMzIwMTAwN0IwMzAwNDA4QQorOjEwODI2MDAwODEzMjAxMDBFMDgzMDA0MDgxMzIwMTAwMTA4NDAwNDAyRgorOjEwODI3MDAwODEzMjAxMDAwODg0MDA0MDgxMzIwMTAwNjA5NTIwNDA3NQorOjEwODI4MDAwRTFCMTAxMDA3MDk1MjA0MEUxQjEwMTAwMDAwMDAwNDkxQQorOjEwODI5MDAwREQ5MTAxMDAwMDAwMDA0MDkxQjMwMTAwMDAwMDAwNDBBQQorOjEwODJBMDAwODVCMzAxMDA1Qzk1MjA0MEUxQjEwMTAwMUE4MjAwNDBENQorOjEwODJCMDAwODEzMjAxMDA3MTgzMDA0MDgxMzIwMTAwMDIwMDAwOTc4OQorOjEwODJDMDAwODA5ODAxMDAwMDAwMDA0MDJFQjEwMTAwMDIwMDAwNDAzMworOjEwODJEMDAwMkVERDAxMDA5MDAxMDA0MDkzOTgwMTAwMjkwMTAwNDAyQgorOjEwODJFMDAwODEzMjAxMDA1QzgxMDA0MEFGMzMwMTAwNzk5OTAwNDA4OAorOjEwODJGMDAwODEzMjAxMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDU1NDA3QworOjEwODMwMDAwODFCMjAxMDA0OTg0MDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwODMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwODMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwODMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwODM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwODM1MDAwODFCMjAwMDA3NzAxMDA0MTgxQzAwMDAwNzE4MDUxNDA2RQorOjEwODM2MDAwODFCMjAwMDA3MjgwNTI0MDgxQjIwMDAwNzM4MDU1NDA5QgorOjEwODM3MDAwODFCMjAwMDA3NDgwNTY0MDgxQjIwMDAwNTUwMTkxODFBNQorOjEwODM4MDAwODAzMDAwMDA1QTAxNDU0MDgxQjIwMDAwNTUwMTkxODJDMQorOjEwODM5MDAwODAzMDAwMDA1QTAxNDY0MDgxQjIwMDAwNUEwMTAwNDg3NgorOjEwODNBMDAwRkQ5MzAwMDA1QTAxMDA0OEZEOTMwMDAwNUEwMTAwNDk2NgorOjEwODNCMDAwRkQ4MzAwMDA1QTAxMDA0QUZEODMwMDAwMDAwMDAwNDBEOAorOjEwODNDMDAwNDlCMTAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjBBOQorOjEwODNEMDAwNDZCMTAxMDAwMDAwMDBEMkYxQjEwMTAwMDAwMDAwRDM1RAorOjEwODNFMDAwRjFCMTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAwMDAwNDVDMQorOjEwODNGMDAwNjFCMTAxMDAyMDAwMDAyMDYyREQwMTAwMDAwMEE4RDA3MgorOjEwODQwMDAwRTFCMTAwMDA3QzgwMDA0MDgxQjIwMDAwMDAwMDAwQThDMworOjEwODQxMDAwOThCMDAxMDAwNDgwMDA0MDhCQjMwMDAwQjEwMzAwNDAxRAorOjEwODQyMDAwQTE5OTAxMDA4NDgwQTI0MTk3NkYwMDAwMDAwMDAwNDVERgorOjEwODQzMDAwQTFDMTAxMDAwMDAwMDAwMDgwQjAwMTAwMDAwMEEyMDQwMgorOjEwODQ0MDAwODA5NDAwMDA4MDE1M0Y0Mjk3RTMwMTAwMDAwMDAwNDA0NworOjEwODQ1MDAwNDlCMTAxMDAwMDAwNjAwMzAyOTQwMTAwMDAwMDAwNDBFNworOjEwODQ2MDAwMDdCMDAxMDAwNDAwMDBDQjk5Q0IwMTAwMDAwMDAwQ0M1NAorOjEwODQ3MDAwRjM4MzAxMDA4RTgwQTI0MTk3NkYwMDAwMDAwMDAwQ0JDMworOjEwODQ4MDAwRjM5MzAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjA1QworOjEwODQ5MDAwNDRCMTAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwMDBGRgorOjEwODRBMDAwRjBCMTAxMDAwMDAwMDAwNEYwQjEwMTAwMDAwMDAwQTFFMworOjEwODRCMDAwRTBCMTAxMDAwNTAwMDA0MDYxOTkwMTAwMjAwMDAwMjBBQQorOjEwODRDMDAwNjJERDAxMDA5NTgwQTg0MDgxMzIwMDAwQzYwMjAwMjBENAorOjEwODREMDAwNDIzMTAxMDAwMDAwQTI0MTA1NkMwMTAwMDAwMDgwQ0I4OAorOjEwODRFMDAwREI5MTAxMDAwMDAwMTk0MThCQjMwMTAwNjAwMDAwNDBFNgorOjEwODRGMDAwNjE5OTAxMDA5QjgwQThCMThDMzMwMDAwNjAwMDAwNDBBRQorOjEwODUwMDAwNjE5OTAxMDA5RDgwQThCMTk0MzMwMDAwQTM4MDE0QzYzNgorOjEwODUxMDAwODEzMjAwMDAxODAwMDBDNjgzRjQwMTAwNkE4NDIyNEZGMworOjEwODUyMDAwODMwNDAwMDA3RjgwMDA0MDgxQjIwMDAwRkYwMTAwQzY4QworOjEwODUzMDAwODE4ODAxMDAwMDAwMDBDNjk3QTMwMTAwN0Y4MDFGNUNCNgorOjEwODU0MDAwOTc1MzAwMDA5RTgzMURDNjgxMzIwMDAwMDAwMDJGNDMxOAorOjEwODU1MDAwODFGMDAxMDBBOTgwMDA0MDEwQzkwMDAwMDU4MTAwNDBBMQorOjEwODU2MDAwODFCMjAwMDAzNjgxMDA0MDgxQjIwMDAwREE4MTAwQ0E4OQorOjEwODU3MDAwNjNCMzAwMDAyRDgxMDA0MDgxQjIwMDAwMTQ4MTAwNERFMgorOjEwODU4MDAwODNCMDAwMDAxRTgxMDA0RTYxQjEwMDAwMEQ4MTAwNDBFQgorOjEwODU5MDAwODVCMDAwMDAxNDgxMDA0QzgzQjAwMDAwRjA4MDAwNDBFMgorOjEwODVBMDAwODVCMDAwMDA5MTgxMDA0MDQ5QjEwMDAwM0Q4MTAwNDA0QworOjEwODVCMDAwQzFCMTAwMDA4RDgxMDA0MDgxQjIwMDAwMEQ4MTAwNDBGQQorOjEwODVDMDAwODVCMDAwMDBERDgxMDA0MDQ5QjEwMDAwNkE4NDAwQ0EyNgorOjEwODVEMDAwOUJCMzAwMDA0NjgxMDA0MEMxQjEwMDAwNEU4MTAwNDBDNQorOjEwODVFMDAwQzFCMTAwMDA1NTgxMDA0MEMxQjEwMDAwNTY4MTAwNDA3QQorOjEwODVGMDAwQzFCMTAwMDA1NzgxMDA0MEMxQjEwMDAwNTg4MTAwNDA2NgorOjEwODYwMDAwQzFCMTAwMDA1OTgxMDA0MDgxQjAwMDAwNTk4MTAwNDE5MgorOjEwODYxMDAwODFCMDAwMDBDRTgxMDA0MDgxQjIwMDAwREQ4MzAwQkI0QworOjEwODYyMDAwQUJCMzAwMDBEQjgxMDBDQUNGQjMwMDAwRDM4MDAwNDBCMQorOjEwODYzMDAwNDlCMTAwMDBERjgwMDA0MDgxQjIwMDAwREM4MTAwNDBEMQorOjEwODY0MDAwODFCMjAwMDA2QTg0MDA0MDgxQjIwMDAwREE4MDAwNDBGQworOjEwODY1MDAwODFCMjAwMDA2QTg0MDBDQTc3QjMwMDAwMTU4MTAwNEQyMgorOjEwODY2MDAwODNCMDAwMDAxQzgxMDA0RTYxQjEwMDAwMEQ4MTAwQkI5MQorOjEwODY3MDAwODVCMDAwMDAxNTgxMDA0QzgzQjAwMDAwMEQ4MTAwQkI2NworOjEwODY4MDAwODVCMDAwMDBGMDgwMDBCQjg1QjAwMDAwRTI4MDAwNDBCMworOjEwODY5MDAwODFCMjAwMDA2QTg0MDBDQTREQjMwMDAwNjQ4MjAwNDBDOQorOjEwODZBMDAwNDlCMTAwMDA4RjgyMDA0MDQ5QjEwMDAwQzgxNDJFQkJDMAorOjEwODZCMDAwODVCMDAxMDAwMDAwMDBFRTgyQjAwMTAwMDAwMDAwNDEyMgorOjEwODZDMDAwRTBCMTAxMDBGRjdGMDBBMkEwOEIwMTAwMDAwMDAwNDQ4OAorOjEwODZEMDAwQTVCMzAxMDA3NTgwMDBDQUE3MzMwMTAwMDI4MTAwNDBFNAorOjEwODZFMDAwODFCMjAwMDA0RTAxMDA0RDkzMzAwMTAwNEUwMTAwNEU1QQorOjEwODZGMDAwOTMzMDAxMDA0RTAxMDA0QzkzMzAwMTAwMDg4NDAwNDA4QgorOjEwODcwMDAwODEzMjAxMDA2QTg0MDA0MDgxQjIwMDAwNTQ5NTAwNDAyQgorOjEwODcxMDAwNDU5OTAxMDA2QTg0MDBDQUU1QjEwMDAwMDAwMDgwNDA2QworOjEwODcyMDAwOTdCMDAxMDBFODgwMjI0MjhGNkYwMDAwRUE4MDIyNDE2QQorOjEwODczMDAwOEY2RjAwMDBFQzgwMUVDQTgxMzIwMDAwRUU4MDFGQ0FERAorOjEwODc0MDAwODEzMjAwMDAwMDAwMDBDQUM5QjEwMTAwNkE4NDAwNDIwMQorOjEwODc1MDAwOEZCMzAwMDAwMDAwMDBDQUNEQjEwMTAwNkE4NDAwNDE1RgorOjEwODc2MDAwOEZCMzAwMDAwMDAwMDBDQUNGQjEwMTAwNkE4NDAwNDA0RQorOjEwODc3MDAwOEZCMzAwMDAwMDgxMDBBNkM2QjEwMTAwNkE4NDAwNDBFQQorOjEwODc4MDAwODFCMjAwMDAwMDgwMDBBNkM2QjEwMTAwNkE4NDAwNDBFQQorOjEwODc5MDAwOEZCMzAwMDA3ODE4MDA0MDQ5OTkwMTAwMTAwMDJGOUMwOQorOjEwODdBMDAwODlCMDAxMDAwNzgxMDA0MDM5MzMwMTAwMTgwMDJGOUI3OAorOjEwODdCMDAwODlCMDAxMDAwNzgxMDA0MDM3MzMwMTAwMDAwMDJGOUE4MworOjEwODdDMDAwODlCMDAxMDAwNzgxMDA0MDM1MzMwMTAwMDgwMDJGOTk2RQorOjEwODdEMDAwODlCMDAxMDAwNzgxMDA0MDMzMzMwMTAwMDA4MDAwQUUwMgorOjEwODdFMDAwNDdDOTAxMDA4MDAwMDA0MEYxOTkwMTAwMDAwMDAwQ0E2MworOjEwODdGMDAwRjFCMTAxMDAwMDAwMDA0MkYwQjEwMTAwNDAxODAwNDA1QQorOjEwODgwMDAwRTE5OTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwQUVDNworOjEwODgxMDAwNjNERDAxMDAwMjgxMjg0MDgxMzIwMDAwRkY4MDAwNDBCQQorOjEwODgyMDAwODFCMjAwMDAwMjgxNDI0MDgxMzIwMDAwMDAwMDAwNUMwMQorOjEwODgzMDAwNjk5MzAxMDA2QTg0MUE0NDkzOTMwMDAwMDU4MTQyNDBDMQorOjEwODg0MDAwODEzMjAwMDAwNDgxMDA1ODY5OTMwMDAwMDAwMDAwNDQ1OAorOjEwODg1MDAwRjBEMTAxMDAwMDAwQTQ0MDgxQjIwMDAwMEM4MUEyNDBEMAorOjEwODg2MDAwRTE2RDAwMDAwMDAwMDA0NDQ1RDEwMTAwMDAwMDgwNDA5RgorOjEwODg3MDAwRTFCMTAxMDAwMDAwODA0MUUxRDEwMTAwMEQ4MTM3NUNEMAorOjEwODg4MDAwNjEzMTAwMDAwMDAwMDA0MjYyQjEwMTAwMTE4MTI4NDAwNgorOjEwODg5MDAwODEzMjAwMDAwRTgxMDA0MDgxQjIwMDAwMDAwMDAwQ0E1OQorOjEwODhBMDAwNjNCMTAxMDAxMTgxQTg0MDgxMzIwMDAwNkE4NDE3NDA0MQorOjEwODhCMDAwODFCMjAwMDAxNjgxMDA0MDgxQjAwMDAwMTY4MTAwQkIyQgorOjEwODhDMDAwODFCMDAwMDAwMDAwMDA0MTYwQjEwMTAwMDAwMDAwNDBFNAorOjEwODhEMDAwNjJCMTAxMDAxNzgxQTg0MDgxMzIwMDAwMDAwMDAwQ0E4NworOjEwODhFMDAwNjNCMTAxMDA2QTg0Mjg0MDgxMzIwMDAwMTk4MTAwNDA5MAorOjEwODhGMDAwODFCMjAwMDA1MDk1MDA0MDQ3OTkwMTAwMUY4MTAwQkJFNAorOjEwODkwMDAwODdCMDAwMDA1MDk1MkY0MDg3QjAwMTAwMjE4MTIyNDBBMAorOjEwODkxMDAwOTU3RjAwMDA2QTg0NjA0MDk1ODMwMDAwMDIwMDJERjA3RQorOjEwODkyMDAwODRCMDAxMDAyMjgxMzY0MDgxMzIwMDAwMDAwMDAwNDIwNAorOjEwODkzMDAwNjJCMTAxMDAyMzgxQTg0MDgxMzIwMDAwMDAwMDAwNDNBMQorOjEwODk0MDAwNjJCMTAxMDAyNTgxQTg0MDgxMzIwMDAwMDAwMDAwQ0EwOAorOjEwODk1MDAwNjNCMTAxMDAyNzgxQTg0MDgxMzIwMDAwMDAwMDE2NDA2OQorOjEwODk2MDAwODFCMjAxMDA2QTg0MjI0MTQzNTEwMDAwMDAwODAwQ0ExQworOjEwODk3MDAwOTVDQjAxMDAyMjgxMDA0MTg1QzAwMDAwMkY4MUEyNDJEOQorOjEwODk4MDAwNjc2RjAwMDAwMDAwMDA0MTY3QjMwMTAwMkY4MTQyNDA4MworOjEwODk5MDAwODEzMjAwMDAwMDAwMDA0MDY1QjMwMTAwMDAwMDAwNDA4QgorOjEwODlBMDAwOTM4MzAxMDAwMDAwMUFDQTY5OTcwMTAwNkE4NDI2NDA3NworOjEwODlCMDAwODEzMjAwMDAzNDgxNDI0MDgxMzIwMDAwNkE4NDFBNDRDRQorOjEwODlDMDAwOTM5MzAwMDA2QTg0MjA0Mzk1NkYwMDAwNkE4NDgwQ0FGNAorOjEwODlEMDAwNjczMzAwMDA2QTg0MjI0MDY1NkYwMDAwNkE4NDAwNkY3QworOjEwODlFMDAwREI5MTAwMDBDMTAwMDA0MDgxMzIwMTAwMzU4MDIyNDA0RgorOjEwODlGMDAwODAzMjAwMDA2QTg0MDA0MDgxQjIwMDAwMDAwMDAwNUYwNQorOjEwOEEwMDAwOTU5MzAxMDA0MjgxQTI0NDIxNkYwMDAwMDAwMDAwNUZBNQorOjEwOEExMDAwOTU4MzAxMDAwMDAwMDA1RTk1OTMwMTAwMDAwMDAwNTc1RgorOjEwOEEyMDAwOTU5MzAxMDAwMDAwMDBDQUMzQjEwMTAwNDU4MTIyNUI5QgorOjEwOEEzMDAwOTU3RjAwMDAwMDAwMDA0QkZEOTMwMTAwNkE4NDAwNDAxOAorOjEwOEE0MDAwODFCMjAwMDA0OTgxMjI0MEFGNkYwMDAwMUJGNTAwQ0FDRgorOjEwOEE1MDAwOTU5QjAxMDA0QTgxMDA0MDgxQjIwMDAwMUJGRDAwQ0FDNQorOjEwOEE2MDAwOTU5QjAxMDAwMDAwMDBDQTdGQjMwMTAwMjYwMTAwQ0FFNworOjEwOEE3MDAwQzUzMTAxMDAwMDAwMDA1Rjk1ODMwMTAwNkE4NDAwQ0FDRgorOjEwOEE4MDAwQzVCMTAwMDBERjZGMDBDQTk1OUIwMTAwMDAwMDAwNTVEMgorOjEwOEE5MDAwOTU5MzAxMDAwMDAwMDBDQUM3QjEwMTAwNkE4NDIyNUZGQgorOjEwOEFBMDAwOTU3RjAwMDAyNjAxMDA0MDgxMzIwMTAwMDAwMDAwNUYzOAorOjEwOEFCMDAwOTU4MzAxMDA2QTg0MDBDQUM3QjEwMDAwNkE4NDAwQ0FCNQorOjEwOEFDMDAwQzlCMTAwMDA2QTg0MDBDQUNCQjEwMDAwNkE4NDAwQ0E0MAorOjEwOEFEMDAwQ0RCMTAwMDA2QTg0MDBDQUNGQjEwMDAwMDAwMDJFNDI3MAorOjEwOEFFMDAwODFFMDAxMDA5ODE0MDA0MDQ4QzkwMTAwNkE4NDAwQ0E2RQorOjEwOEFGMDAwRTFCMTAwMDAwMDAwMDA0MDA5QjEwMTAwMjAwMDAwQTYyMworOjEwOEIwMDAwODJCMDAxMDA1RTgxQTI1RTBCN0QwMDAwMDA4MDAwNDEwQQorOjEwOEIxMDAwMDg5OTAxMDA2MDgxQTI1RTBCN0QwMDAwMjA4MDAwQTYwNAorOjEwOEIyMDAwMDhCMTAxMDA2MjgxOUY4NTgyMzAwMDAwNjE4MUEyNEZGRgorOjEwOEIzMDAwMEI3RDAwMDAwMDAwMDA0MTIxQjMwMTAwMDI4MDAwQTY2RgorOjEwOEI0MDAwODJCMDAxMDBDOTgxMDA0MDgxMzIwMTAwMTAwMDAwNDE2MworOjEwOEI1MDAwODRFNDAxMDAwMzgwMDBBNjgyQjAwMTAwQzk4MTAwNDBDNgorOjEwOEI2MDAwODEzMjAxMDBGMEZGMDA0MTg2ODgwMTAwMDAwMDAwNDNDRgorOjEwOEI3MDAwODQ5NDAxMDAwRjAwMDBBNjg2QjAwMTAwMTBDNDAwNDNEOQorOjEwOEI4MDAwODY5ODAxMDA3NTgxQTI0Mzg0NkMwMDAwMDAwMDAwNDNCOAorOjEwOEI5MDAwMjFCMzAxMDAyMDAwMDBBNjgyQjAwMTAwMUMwMDAwNDFBQQorOjEwOEJBMDAwODJEQzAxMDA3MjgxQTI1RTBCN0QwMDAwMDQwMDAwNDFBNgorOjEwOEJCMDAwMDg5OTAxMDA3RTgxMDA0MDgxQjIwMDAwNDEwMTAwQTZCOQorOjEwOEJDMDAwODZCMDAxMDA1MDBDMDA0Mzg2OTgwMTAwN0E4MUEyNDNEMAorOjEwOEJEMDAwODQ2QzAwMDAwMDAwMDA0MTIxQjMwMTAwN0U4MTAwNDA1MAorOjEwOEJFMDAwODFCMjAwMDA0MTAxMDBBNjg2QjAwMTAwNjAwQzAwNDM4NAorOjEwOEJGMDAwODY5ODAxMDA3RTgxQTI0Mzg0NkMwMDAwMDAwMDAwNDI0MAorOjEwOEMwMDAwMjFCMzAxMDAyMDAwMDBBNjgyQjAwMTAwN0Y4MUEyNUU5NgorOjEwOEMxMDAwMEI3RDAwMDA0MDEzMDA0MTA4OTkwMTAwODc4MTIyNDMyOQorOjEwOEMyMDAwMjE2RjAwMDAyMDAwMDBBNjgyQjAwMTAwMTIwMDAwNDE2OAorOjEwOEMzMDAwODJEQzAxMDA4NDgxQTI1RTBCN0QwMDAwMDAwNDAwNDEwMworOjEwOEM0MDAwMDg5OTAxMDA4QzgxMDA0MDgxQjIwMDAwMjAwMDAwQTYzQworOjEwOEM1MDAwODJCMDAxMDAxOTAwMDA0MTgyREMwMTAwODk4MUEyNUUxRQorOjEwOEM2MDAwMEI3RDAwMDAwMEEwMDA0MTA4OTkwMTAwOEM4MTAwNDBBQworOjEwOEM3MDAwODFCMjAwMDAwMDAwODA0MDgxQjIwMTAwMjAwMDAwQTYwNworOjEwOEM4MDAwODBCMDAxMDAwMDAwMDBDQTgxOTQwMTAwOEY4MUEyNUVDMworOjEwOEM5MDAwMEI3RDAwMDA2QTg0MDA0MDA4QjEwMDAwQzgxNDJFQkJBMAorOjEwOENBMDAwODVCMDAxMDA5MjgxQTI1RTBCN0QwMDAwMDAwMDAwNDBCMworOjEwOENCMDAwODdCMDAxMDBBMTgxMjI0MzIxNkYwMDAwQjA4MTIyNDRDRQorOjEwOENDMDAwMjE2RjAwMDAxMTgwMDBBNjgyQjAwMTAwQzk4MTAwNDAyMAorOjEwOENEMDAwODEzMjAxMDBCODgxMjI0QTgzN0MwMDAwMDAwMDAwNDBGQworOjEwOENFMDAwODc5MDAxMDA5QzgxMjI0RDgzN0MwMDAwMDAwMDAwNDFBMAorOjEwOENGMDAwODc5MDAxMDA5RTgxMjI0RjgzN0MwMDAwMDAwMDAwNDM4QQorOjEwOEQwMDAwODc5MDAxMDBBMDgxMjI0RTgzN0MwMDAwMDAwMDAwNDI3OQorOjEwOEQxMDAwODc5MDAxMDBCODgxMDA0MDgxQjIwMDAwMDE4MDAwQTY2OAorOjEwOEQyMDAwODJCMDAxMDBDOTgxMDA0MDgxMzIwMTAwMDE4MDAwQTZBQgorOjEwOEQzMDAwODJCMDAxMDBDOTgxMDA0MDgxMzIwMTAwQjg4MTIyNDIyNQorOjEwOEQ0MDAwODM3QzAwMDAwMDAwMDA0MDg3OTAwMTAwMUM4MDAwQTY4QQorOjEwOEQ1MDAwODJCMDAxMDBDOTgxMDA0MDgxMzIwMTAwQUI4MTIyNDUwRgorOjEwOEQ2MDAwODM3QzAwMDAwMDAwMDA0MTg3OTAwMTAwQUQ4MTIyNDQxNworOjEwOEQ3MDAwODM3QzAwMDAwMDAwMDA0Mzg3OTAwMTAwQUY4MTIyNDMwNAorOjEwOEQ4MDAwODM3QzAwMDAwMDAwMDA0Mjg3OTAwMTAwQjg4MTAwNDAxMQorOjEwOEQ5MDAwODFCMjAwMDAwMTgwMDBBNjgyQjAwMTAwQzk4MTAwNDBCQworOjEwOERBMDAwODEzMjAxMDAwMTgwMDBBNjgyQjAwMTAwQzk4MTAwNDAyQgorOjEwOERCMDAwODEzMjAxMDBCODgxMjI0MjgzN0MwMDAwMDAwMDAwNDAyMworOjEwOERDMDAwODc5MDAxMDAwMDAwMDA0Mzg3OTAwMTAwMDAwMDAwNDFFRgorOjEwOEREMDAwODc5MDAxMDAwMDgwMDBBNjgyQjAwMTAwQzk4MTAwNDA5OAorOjEwOERFMDAwODEzMjAxMDBCQzgxMjI0QjgzN0MwMDAwMDAwMDAwNDBFNgorOjEwOERGMDAwODc4MDAxMDAwMDAwMDA0M0UwQjEwMTAwMDAwMDAwNDA1NgorOjEwOEUwMDAwQUZCMzAxMDBDNTgxMjI0MDg3N0MwMDAwQzU4MUEyNDEyQgorOjEwOEUxMDAwODc3QzAwMDAwMDAwMDA0MUFFQjMwMTAwMDAwMDAwNDA2QworOjEwOEUyMDAwODFCMzAxMDBDNDgxMjI0Mjg3N0MwMDAwQzU4MTAwMEIxMAorOjEwOEUzMDAwN0RCMzAwMDAwMDAwMDAwRjdEQjMwMTAwRkY3RjAwQTJBMgorOjEwOEU0MDAwQTA4QjAxMDAwMDAwMDA0NEE1QjMwMTAwNzU4MDAwQ0E5QQorOjEwOEU1MDAwQTczMzAxMDAwMjgxMDA0MDgxQjIwMDAwMjAwMDAwNDFFMAorOjEwOEU2MDAwODJEQzAxMDBDQTgxQTI1RTBCN0QwMDAwMDAwMDAwNDE4RgorOjEwOEU3MDAwMDhCMTAxMDBDQzgxOUY4NTgyMzAwMDAwMDAwMDgwNDA1NQorOjEwOEU4MDAwODFCMjAxMDBEMTgxMTRGNzgxMzAwMDAwRDE4MUEyNDk2MworOjEwOEU5MDAwRkQ3RjAwMDAwMDAwMDA0OEZEOTMwMTAwRDQ4MTE1RjgxQgorOjEwOEVBMDAwODExNDAwMDBENDgxQTI0QUZEN0YwMDAwMDAwMDAwNDgyOAorOjEwOEVCMDAwRkQ5MzAxMDBENjgxQTJDODgxMzIwMDAwNDAwMDAwNDAyRAorOjEwOEVDMDAwODBEQzAxMDAwMDEwMDA0MDgwREMwMTAwMDAwMDAwNDA1OAorOjEwOEVEMDAwRUZCMzAxMDBEODgxNDI0MEYxMzMwMDAwMDQ4MTAwNDAyQgorOjEwOEVFMDAwNjg5NzAwMDA2QTg0MDBCQjZCQjMwMDAwNkE4NDAwQkIxMworOjEwOEVGMDAwQjFCMzAwMDA2QTg0MDA0MDgxQjIwMDAwQ0MxNDJFNDA1RgorOjEwOEYwMDAwODdCMDAxMDBGRjdGMDBBMkEwOEIwMTAwRDgwMDAwNDNDMgorOjEwOEYxMDAwQjIzMzAxMDAwMDAwNjhEQTg5QjAwMTAwN0MwMDAwNDAzMworOjEwOEYyMDAwOEI5ODAxMDAwMDAwMDA1MDg5RjAwMTAwMDAwMDAwNDExMgorOjEwOEYzMDAwODlEMDAxMDAwMzAwMDA0NDg4OEMwMTAwMDAwMDAwNDIzOQorOjEwOEY0MDAwODdDMDAxMDAwMDAwMDA0MUE1QjMwMTAwRDgwMDAwNDMyNAorOjEwOEY1MDAwQjIzMzAxMDAwMDAwMDBEQUYxQjEwMTAwMDAwMDAwNDI2QworOjEwOEY2MDAwODdDMDAxMDAwMDAwMDA0MUE1QzMwMTAwRjg4MTIyNDQzMAorOjEwOEY3MDAwODk1MDAwMDBGODgxMjI0NDhCNTAwMDAwRTc4MUEyNTAwNAorOjEwOEY4MDAwQTU2RjAwMDAwMDAwMDA0MkE1RTMwMTAwMDAwMDAwQ0EzOAorOjEwOEY5MDAwQTdCMzAxMDA3NTgwMDBCQjg1MzAwMTAwQ0MxNDJFRDIzMAorOjEwOEZBMDAwOTVDMzAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjA1RgorOjEwOEZCMDAwNDJCMTAxMDAwMDAwMDA1MDgxQjAwMTAwRjU4MUEyNDFFMgorOjEwOEZDMDAwODE1MDAwMDBGNDgxQTJGMjgwMzAwMDAwRTc4MTAwNDA2RgorOjEwOEZEMDAwQTVCMzAwMDAwMDAwMDA0MkE1RTMwMTAwMDAwMDAwQ0FBNAorOjEwOEZFMDAwQTdCMzAxMDA3NTgwMDBCQjg1MzAwMTAwMDI4MTAwNDBGRAorOjEwOEZGMDAwODFCMjAwMDBEOTAwMDA0MUIzNzMwMTAwMDAwMDgwNTAyRAorOjEwOTAwMDAwQjVGMzAxMDBEODAwMDA0MUIzRjMwMDAwMDAwMDAwRDkxRgorOjEwOTAxMDAwQjNGQjAxMDAwMDMwMDBBNkI4QjMwMTAwRjIwMDAwNDAyRAorOjEwOTAyMDAwODEzMjAxMDAyNTAxMDA0MjJEMDEwMTAwMDAwMjAwNDBCMworOjEwOTAzMDAwODM5ODAxMDBFQjAwMDA0MDgxMzIwMTAwMDAwMDAwNTBFNQorOjEwOTA0MDAwODFCMDAxMDAyNjAxMDA0MDgxMzIwMTAwMDk4MjEwREE1RQorOjEwOTA1MDAwQjU2QjAwMDAwQTgyMDA0MTJEODEwMDAwMDAwMDAwNDEzNAorOjEwOTA2MDAwMkQ5MTAxMDAyODAxMDA0MDgxMzIwMTAwMjUwMTAwNDBCRQorOjEwOTA3MDAwMkQxMTAxMDAwMDAwMDA0MDJEODEwMTAwMDY4MkEyNDE1NworOjEwOTA4MDAwODE1MDAwMDAyNjAxMDA0MjJEMDEwMTAwMjUwMTAwNDAxMQorOjEwOTA5MDAwODEzMjAxMDAyNjAxMDA0MjJEMTEwMTAwMjUwMTAwNDAwRQorOjEwOTBBMDAwMkQxMTAxMDAxNTgyMDQ0MDJEMDEwMDAwMjUwMTAwNDAxMgorOjEwOTBCMDAwODEzMjAxMDAxMTgyMDA0MDgxQjIwMDAwMjgwMTAwNDA4RAorOjEwOTBDMDAwODEzMjAxMDAyNTAxMDA0MjJEMDEwMTAwRjIwMDAwNDAyMworOjEwOTBEMDAwQjkzMzAxMDAwMDAwMDA0MjJEODEwMTAwMDAwMDgwNDFGMQorOjEwOTBFMDAwMkQ4MTAxMDAwMDAwODA0MDgxQjIwMTAwMDAwMzAwNDA5QQorOjEwOTBGMDAwODE5ODAxMDAwMDAwMDA0MDE4QjEwMTAwODAwMDAwNDA4QworOjEwOTEwMDAwODM5ODAxMDAwMDE5MDA0MDQ1OTkwMTAwMDAwMDQyNDA4OQorOjEwOTExMDAwODFCMjAxMDAwMDAwNDNGRkYxQjEwMTAwMDAwMDAwRkYzNworOjEwOTEyMDAwRjFCMTAxMDAwMDAwMDA0MTgxQzAwMTAwMDAwMDAwNDBEOQorOjEwOTEzMDAwMThCMTAxMDAxRjgyQTI0MTgzNTAwMDAwMDAxNjAwNDBCOAorOjEwOTE0MDAwNDU5OTAxMDAwMDE5MDA0MDQzOTkwMTAwMDAwMDAwNDdDMworOjEwOTE1MDAwNDNDMTAxMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwRjNBMworOjEwOTE2MDAwODBCMDAxMDAwMDAwMDA1QjgxRDAwMTAwMDAwMDAwNDFFMAorOjEwOTE3MDAwODBEMDAxMDAwMDAwMDA0MEY2QjEwMTAwMDAwMDAwNUI1QgorOjEwOTE4MDAwNDNDMTAxMDAwMDAwMDA0MTgzQzAwMTAwMjk4MkEyNTRCNAorOjEwOTE5MDAwODM2QzAwMDAwMDAwMDA0MEY3QjEwMTAwMDAwMDAwNDFCNgorOjEwOTFBMDAwODNDMDAxMDAzMDgyQTIwNjgzNkMwMDAwMDAwMDgwNDA3MgorOjEwOTFCMDAwODFCMjAxMDAwMDAwODAwNzkxQjAwMTAwRTE4MDAwNDAxMQorOjEwOTFDMDAwODEzMjAxMDAzOTgyQTI0MDk3NkMwMDAwMjgwMDAwNDBFMworOjEwOTFEMDAwQjM5QjAxMDAzQTgyMDA0MDgxQjIwMDAwMjgwMDAwNDBBOQorOjEwOTFFMDAwQjM5QjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDAwREFFNQorOjEwOTFGMDAwRjVCMTAxMDBGQzgxMDA0MkIzNDMwMTAwMDAwMDAwREEzOAorOjEwOTIwMDAwRjVCMTAxMDBGQzgxMDA0MkIzNDMwMTAwMDAwMDAwREEyNworOjEwOTIxMDAwRjVCMTAxMDA0RTAwMDA0MEIzOUIwMTAwRkM4MTAwNDAwRAorOjEwOTIyMDAwODEzMjAxMDAwODAwMDBEQUY3RjUwMTAwNTAwMDAwNDAyQgorOjEwOTIzMDAwOTE5ODAxMDAwMDAwMDA0NzhGQjAwMTAwRkM4MTAwNDhCOAorOjEwOTI0MDAwQjIzMzAxMDAwMDAwMDBEQUY3QjEwMTAwMDgwMDAwREFEMworOjEwOTI1MDAwRjdGNTAxMDAwMDAwMDA0MjkxQzAwMTAwNDU4MkEyNDFFMworOjEwOTI2MDAwOEY1MDAwMDAwMDAwMDA0MTQ1RDEwMTAwMDgwMDAwNDA3RgorOjEwOTI3MDAwQjM5QjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDAwREE1NAorOjEwOTI4MDAwRkRCMTAxMDAwQTAwMDA0MEIzOUIwMTAwRkM4MTAwNDBEOQorOjEwOTI5MDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMTgwMDAwNDAzOQorOjEwOTJBMDAwQjM5QjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDAwREEyNAorOjEwOTJCMDAwRkRCMTAxMDAxNjAwMDA0MEIzOUIwMTAwRkM4MTAwNDA5RAorOjEwOTJDMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMzQ4MjAwNDA2QgorOjEwOTJEMDAwODEzMjAxMDAxRTAwMDA0OEIyQ0IwMTAwRkM4MTAwNDAzOQorOjEwOTJFMDAwODEzMjAxMDAwMDAwMDBEQTkxQzAwMTAwMDAwMDAwNDg1NgorOjEwOTJGMDAwQjJDQjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDZFREEzNworOjEwOTMwMDAwOEZCMDAxMDAwMjAwMDA0OEIyQ0IwMTAwRkM4MTAwNDA5OAorOjEwOTMxMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMDQwMDAwNDhDNAorOjEwOTMyMDAwQjJDQjAxMDBGQzgxMDA0MDgxMzIwMTAwMDAwMDgwREFGNAorOjEwOTMzMDAwRkRCMTAxMDA2RjgyMjI1MEZEN0YwMDAwNkY4MjIyNDU0NworOjEwOTM0MDAwRkQ3RjAwMDA0MDE2MDA0MDQ1OTkwMTAwMzU4MjAwNDAzNQorOjEwOTM1MDAwNDkzMTAxMDAwODAwMDA0OEIyQ0IwMTAwRkU4MTAwNDAwNQorOjEwOTM2MDAwODEzMjAxMDA2RDgyQTI0MDhGNkMwMDAwNzI4MjIyMjA0NworOjEwOTM3MDAwQjU2RjAwMDA2RjgyMDA0MDgxQjIwMDAwREI4MjAwNDBDOAorOjEwOTM4MDAwODEzMjAxMDA3MjgyMjI0MDk3NkMwMDAwNkY4MjQyNDA1RAorOjEwOTM5MDAwODEzMjAwMDAwMDAwMDA0RjY5OTMwMTAwMDQ4MTAwNThGMQorOjEwOTNBMDAwNjk5MzAwMDA1NDE2MDA0MDQ3OTkwMTAwMDAwMDAwRkUzOAorOjEwOTNCMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU5NQorOjEwOTNDMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU4NQorOjEwOTNEMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU3NQorOjEwOTNFMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU2NQorOjEwOTNGMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU1NQorOjEwOTQwMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU0NAorOjEwOTQxMDAwRjRCMTAxMDA0NjAwMDA0MEIzOUIwMTAwRkM4MTAwNDAxNAorOjEwOTQyMDAwODEzMjAxMDAwODAwMDBEQUY3RjUwMTAwNDgwMDAwNDAzMQorOjEwOTQzMDAwOTU5ODAxMDAwMDAwMDA0NDk3QjAwMTAwRkM4MTAwNEFBQgorOjEwOTQ0MDAwQjIzMzAxMDAwMDAwMDBEQUY3QjEwMTAwMDgwMDAwREFEMQorOjEwOTQ1MDAwRjdGNTAxMDAwMDAwMDA0Mjk1QzAwMTAwODU4MkEyNDE5RAorOjEwOTQ2MDAwOTc1MDAwMDAyQTAwMDA0MEE1OUIwMTAwNDAxNjAwNDBENAorOjEwOTQ3MDAwQTE5QjAxMDAwMDAwMDBDQUE3QjMwMTAwNzU4MDAwQkJEQQorOjEwOTQ4MDAwODUzMDAxMDAwMjgxMDA0MDgxQjIwMDAwQTc4MjIyNDVBMAorOjEwOTQ5MDAwRkQ3RjAwMDBFMDE1MDA0MDQ3OTkwMTAwMUEwMDAwQTI3RQorOjEwOTRBMDAwODBEQzAxMDAwMDAwMDA1MEYxQjEwMTAwRjAxNTAwNDAyNworOjEwOTRCMDAwRjE5OTAxMDAwMDAwMDBDQUYxQjEwMTAwMDcwMDAwNDA2RAorOjEwOTRDMDAwNjE5OTAxMDBBMDAwMDA0MDYyREQwMTAwOTY4MkE4QkIwNgorOjEwOTREMDAwRTEzMTAwMDAwMDAwMDA1MDgzQjAwMTAwOTk4MkEyNDFGOAorOjEwOTRFMDAwODM1MDAwMDA5ODgyQTJGMjgyMzAwMDAwRTE4MDAwNDBBOAorOjEwOTRGMDAwODEzMjAxMDA5RjgyQTI0MDk3NkMwMDAwMjgwMDAwNDA0QQorOjEwOTUwMDAwQjM5QjAxMDBBMDgyMDA0MDgxQjIwMDAwMjgwMDAwNDAwRgorOjEwOTUxMDAwQjM5QjAxMDBGMDE1MDA0MDQzOTkwMTAwRkM4MTAwNDAxRAorOjEwOTUyMDAwODEzMjAxMDBBNzgyQTJGQUI0NkYwMDAwRkM4MTAwNDJFMAorOjEwOTUzMDAwQjM0MzAxMDBBNzgyQTJGQUI0NkYwMDAwRkM4MTAwNDI4RAorOjEwOTU0MDAwQjM0MzAxMDBBQTgyMjJGQUI0NkYwMDAwQTc4MjQyNDAwRQorOjEwOTU1MDAwODEzMjAwMDAwMDAwMDA0RTY5OTMwMTAwMDQ4MTAwNTgzMAorOjEwOTU2MDAwNjk5MzAwMDA0MDE2MDA0MDQ1OTkwMTAwMzU4MjAwNDA5MworOjEwOTU3MDAwNDkzMTAxMDBGNjE1MDA0MDQzOTkwMTAwNUMxNjAwNDA5NgorOjEwOTU4MDAwNDU5OTAxMDAwMDAwNkVGQThFQjAwMTAwMDAwMDAwNDAxNQorOjEwOTU5MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDBCMworOjEwOTVBMDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDBBMworOjEwOTVCMDAwODFCMjAxMDAwMDAwMDBGMEI0QjMwMTAwQjg4MkEyNDAwMworOjEwOTVDMDAwOEY2QzAwMDBGQzE1MjAyMEUxQjEwMTAwQkQ4MjAwNDAzRAorOjEwOTVEMDAwODFCMjAwMDBEQjgyMDA0MDgxMzIwMTAwQkQ4MjIyNDA2NgorOjEwOTVFMDAwOTc2QzAwMDBCQTgyNDI0MDgxMzIwMDAwMDAwMDAwNEZCOAorOjEwOTVGMDAwNjk5MzAxMDAwNDgxMDA1ODY5OTMwMDAwMzQ4MjAwNDA5RgorOjEwOTYwMDAwODEzMjAxMDAxRTAwMDA0OEIyQ0IwMTAwRkM4MTAwNDAwNQorOjEwOTYxMDAwODEzMjAxMDBDMjgyMjI1MEI1NkYwMDAwMDAwMDAwNTA2QworOjEwOTYyMDAwOTFDMDAxMDAwMDAwMDA0OEIyQ0IwMTAwRjYxNTAwNDBENworOjEwOTYzMDAwNDM5OTAxMDBGRjgxMDBGMkI0MzMwMTAwMDIwMDAwNDhBOQorOjEwOTY0MDAwQjJDQjAxMDBGODE1MDA0MDQzOTkwMTAwRkY4MTAwRjIwMAorOjEwOTY1MDAwQjQzMzAxMDAwNDAwMDA0OEIyQ0IwMTAwRkExNTAwNDAwOQorOjEwOTY2MDAwNDM5OTAxMDBGRjgxMDBGMkI0MzMwMTAwMDgwMDAwNDg3MworOjEwOTY3MDAwQjJDQjAxMDBGQzE1MDA0MDQzOTkwMTAwMDAwMDAwRjA0RQorOjEwOTY4MDAwOTRCMDAxMDBGRkZGMDA0QUI0OEIwMTAwRkY4MTAwNDA0RAorOjEwOTY5MDAwODEzMjAxMDAwQTAwMDA0OEIyQ0IwMTAwMTAwMDAwNEFFQworOjEwOTZBMDAwQjRGNzAxMDBGRjgxMDA0MDgxMzIwMTAwMzQ4MjAwNDBBNAorOjEwOTZCMDAwODEzMjAxMDAxRTAwMDA0OEIyQ0IwMTAwRkM4MTAwNDA1NQorOjEwOTZDMDAwODEzMjAxMDBEODgyMjI1MEI1NkYwMDAwRDk4MjAwNTA0QgorOjEwOTZEMDAwQjVCMzAwMDAwMDAwMDA0MEI1QjMwMTAwRkY4MTAwNDBCOQorOjEwOTZFMDAwODEzMjAxMDAwMjgxMDA0MDgxQjIwMDAwMDAxNjAwNDA3QQorOjEwOTZGMDAwNDc5OTAxMDAzMDMxMDA0MEY1OTkwMTAwMzIzMzAwNDBCNAorOjEwOTcwMDAwRjU5OTAxMDAzNDM1MDA0MEY1OTkwMTAwMzYzNzAwNDBFNQorOjEwOTcxMDAwRjU5OTAxMDAzODM5MDA0MEY1OTkwMTAwNDE0MjAwNDBCNworOjEwOTcyMDAwRjU5OTAxMDA0MzQ0MDA0MEY1OTkwMTAwNDU0NjAwNDA4OQorOjEwOTczMDAwRjU5OTAxMDA0NzQ4MDA0MEY1OTkwMTAwNDk0QTAwNDA2OQorOjEwOTc0MDAwRjU5OTAxMDAyQzAwMDA0MDgzOTgwMTAwMDAwMDAwNDBDMgorOjEwOTc1MDAwRjdCMTAxMDBFNzgyQTI0MTgzNTAwMDAwODAxNjJFMDY3NworOjEwOTc2MDAwODNCMDAxMDAzNjAwMDBGQkY2QTkwMTAwRUE4MkEyNDFBNQorOjEwOTc3MDAwODM1MDAwMDAyMjAwMDA0MDgzOTgwMTAwMDAwMDAwRkI5RAorOjEwOTc4MDAwRjZCMTAxMDBFRDgyQTI0MTgzNTAwMDAwNjIwMDAwNDA2QQorOjEwOTc5MDAwOTU5ODAxMDAwMDgzMDA0MDgxMzIwMTAwMDAxNjJEMDZEQgorOjEwOTdBMDAwODNCMDAxMDA4MDE2MDA0MDQ1OTkwMTAwNUMwMDAwRkI3OQorOjEwOTdCMDAwRjZBOTAxMDBGMzgyQTI0MTgzNTAwMDAwMDAwMDAwNzA2RQorOjEwOTdDMDAwRjlCMTAxMDAwMDAwMDA3MUY5QjEwMTAwMDAwMDAwNzI2MAorOjEwOTdEMDAwRjlCMTAxMDAwMDAwMDA3M0Y5QjEwMTAwMDAwMDAwNzQ0QworOjEwOTdFMDAwRjlCMTAxMDA1NDAwMDA0MDk1OTgwMTAwMDA4MzAwNDA0OQorOjEwOTdGMDAwODEzMjAxMDAwMDAwMDA3MDk1QjAwMTAwRkY4MjIyNzBFQworOjEwOTgwMDAwQjU2RjAwMDAwMDAwODA0MTk3QjAwMTAwMDAwMDgwNDA2QgorOjEwOTgxMDAwOTdCMDAxMDA0NTY3MDBBNkUwQjIwMTAwMDEyMzAwNzA4NworOjEwOTgyMDAwRTE5QTAxMDBDREVGMDBBNkUyQjIwMTAwODlBQjAwNzEyMAorOjEwOTgzMDAwRTM5QTAxMDBCQTk4MDBBNkU0QjIwMTAwRkVEQzAwNzJDRgorOjEwOTg0MDAwRTU5QTAxMDAzMjEwMDBBNkU2QjIwMTAwNzY1NDAwNzNEQQorOjEwOTg1MDAwRTc5QTAxMDBEMkMzMDBBNkU4QjIwMTAwRjBFMTAwNzQ2QgorOjEwOTg2MDAwRTk5QTAxMDA4MDE2MDA0QTQ0QzkwMTAwMDAwMDAwMDc3RgorOjEwOTg3MDAwODFCMDAxMDAwMDAwMDA0QTgwRDAwMTAwMDAwMDAwNDBEQgorOjEwOTg4MDAwRjdCMTAxMDAwRDgzQTI0MTgxNTAwMDAwODAxNjAwNEEwQgorOjEwOTg5MDAwNDRDOTAxMDBGQzE2MkE0N0U3QjUwMTAwMDMwMDAwNEE0RAorOjEwOThBMDAwRThFNTAxMDAwMDAwMDA0MDhEQjAwMTAwNTAwMzAwNDBEOQorOjEwOThCMDAwQTM5OTAxMDA4MDE2M0Q0NjhERTAwMTAwMDAwMDAwNTA5NAorOjEwOThDMDAwODlCMDAxMDAwMDAwMDBGQzQwQjAwMTAwMDAwMDAwNDEzMAorOjEwOThEMDAwQTNDMTAxMDAxNjgzQTI0MTg5NTAwMDAwMDAwMDAwNzA1RQorOjEwOThFMDAwRUJCMjAxMDAwMDAwMDA3MUVEQjIwMTAwMDAwMDAwNzI1NworOjEwOThGMDAwRUZCMjAxMDAwMDAwMDA3M0YxQjIwMTAwMDAwMDAwNzQzQgorOjEwOTkwMDAwRjNCMjAxMDAwMDAwMDA0MDgzQjAwMTAwMEYwMDAwNDFFRAorOjEwOTkxMDAwODA4ODAxMDA1MDAzMDA0MEEyQzkwMTAwMzM4M0EwNTA5OQorOjEwOTkyMDAwODM2QzAwMDAwRDAwMDA0MDk4QzgwMTAwMDAwMDAwNEY0QgorOjEwOTkzMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjBERQorOjEwOTk0MDAwODZCMDAxMDAwODAwMDA0MDk4QzgwMTAwMDAwMDAwNEZFOAorOjEwOTk1MDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjBCRQorOjEwOTk2MDAwODZBNDAxMDAwMjAwMDA0MDk4QzgwMTAwMDAwMDAwNEZEQQorOjEwOTk3MDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA5RQorOjEwOTk4MDAwODZBNDAxMDA1MDAzMDA0MEEyQzkwMTAwMDAwMDAwNDM2QQorOjEwOTk5MDAwNDBBNDAxMDAwMTAwMDAyMDg4RTQwMTAwMDAwMDAwNUZGNQorOjEwOTlBMDAwNDFGMDAxMDAwMDAwMDA0NDQwOTQwMTAwMDUwMDAwNzVGMgorOjEwOTlCMDAwODlFNDAxMDAxQjAwMDA3NTg1RjQwMTAwMDAwMDAwNDRFQgorOjEwOTlDMDAwODQ5NDAxMDAzRDgzQTM1MzgzNkMwMDAwMDAwMDAwNzY2MworOjEwOTlEMDAwODlCMDAxMDAwMDAwMDA3Nzg5ODQwMTAwMDAwMDAwNzY1MgorOjEwOTlFMDAwOEJCMDAxMDAwMDAwMDAyMDhCQTQwMTAwMDAwMDAwNzg3MworOjEwOTlGMDAwOEI4NDAxMDA0QzgzMDA0NTg4OTQwMDAwMjcwMDAwNDFCRgorOjEwOUEwMDAwODBDRTAxMDA0MjgzQUE0MDgxMzIwMDAwMDAwMDAwNzYyRgorOjEwOUExMDAwODlCMDAxMDAwMDAwMDA3Nzg5QTQwMTAwNEM4MzAwNzgyMAorOjEwOUEyMDAwODlBNDAwMDAzQjAwMDA0MTgwQ0UwMTAwM0Y4M0FBNDA5MgorOjEwOUEzMDAwODEzMjAwMDAwMDAwMDA3Njg5QjAwMTAwMDAwMDAwNzc0QworOjEwOUE0MDAwODk4NDAxMDAwMDAwMDA3NjhCQjAwMTAwMDAwMDAwNzhERQorOjEwOUE1MDAwOEI4NDAxMDAwMDAwMDA0NTg4OTQwMTAwMDAwMDAwNzcxRAorOjEwOUE2MDAwOEJCMDAxMDAwMDAwMDA3ODhCODQwMTAwNEM4MzAwNDUxRQorOjEwOUE3MDAwODg5NDAwMDAwMDAwMDA0NDg0QzAwMTAwMDAwMDAwNzlDOAorOjEwOUE4MDAwODVDMDAxMDAwMDAwMDAyMDg0QzAwMTAwNTM4M0EzNTM1RgorOjEwOUE5MDAwODM2QzAwMDA4MjVBMDBBNjg0QzAwMTAwOTk3OTAwNDJCQworOjEwOUFBMDAwODRDODAxMDA2MDgzMDA0MDgxQjIwMDAwMjcwMDAwNDFBQgorOjEwOUFCMDAwODBDRTAxMDA1ODgzQUE0MDgxMzIwMDAwRDk2RTAwQTZGMgorOjEwOUFDMDAwODRDMDAxMDBBMUVCMDA0Mjg0QzgwMTAwNjA4MzAwNDAxMworOjEwOUFEMDAwODFCMjAwMDAzQjAwMDA0MTgwQ0UwMTAwNUQ4M0FBNDBCRQorOjEwOUFFMDAwODEzMjAwMDAxQjhGMDBBNjg0QzAwMTAwRENCQzAwNDI1NAorOjEwOUFGMDAwODRDODAxMDA2MDgzMDA0MDgxQjIwMDAwNjJDQTAwQTZGMQorOjEwOUIwMDAwODRDMDAxMDBENkMxMDA0Mjg0QzgwMTAwNjA4MzAwNDBDNworOjEwOUIxMDAwODFCMjAwMDAwMDAwMDA3OEYzQjIwMTAwMDAwMDAwNzc3RAorOjEwOUIyMDAwRjFCMjAxMDAxRTAwMDA3Njg5RTQwMTAwMDIwMDAwNzYxNworOjEwOUIzMDAwRUZGNjAxMDAwMDAwMDA0NEVFOTYwMTAwMDAwMDAwNzUwMQorOjEwOUI0MDAwRURCMjAxMDAwMDAwMDA0MkVBQjIwMTAwMDAwMDAwNDE1NQorOjEwOUI1MDAwODNDMDAxMDA0RjAwMDA0MTgwQ0UwMTAwMUY4MzJBNDBENgorOjEwOUI2MDAwODEzMjAwMDAwMDAwMDA3NUUxQzIwMTAwMDAwMDAwNzZCMworOjEwOUI3MDAwRTNDMjAxMDAwMDAwMDA3N0U1QzIwMTAwMDAwMDAwNzhBOAorOjEwOUI4MDAwRTdDMjAxMDAwMDAwMDA3OUU5QzIwMTAwMTM4MzgxNDFBRQorOjEwOUI5MDAwOEQ0MDAwMDAwMDAwODA0MDgxQjIwMTAwOUQ4M0EyNEJGNworOjEwOUJBMDAwQjc2RjAwMDA5RDgzQTI0MTJGN0QwMDAwMDAwMDAwNTA5MAorOjEwOUJCMDAwRkQ5MzAxMDA0MDE2MDA0MDQ1OTkwMTAwMzU4MjAwNDBBOAorOjEwOUJDMDAwNDkzMTAxMDA5QzgzMjI0MDhGNkMwMDAwMDgwMDAwNDg0RQorOjEwOUJEMDAwQjJDQjAxMDBGRTgxMDA0MDgxMzIwMTAwREI4MjAwNDBGNworOjEwOUJFMDAwODEzMjAxMDA5QzgzQTI0MDk3NkMwMDAwNUUxNjAwNDAwOQorOjEwOUJGMDAwNDM5OTAxMDA3QzE2MjBGNkUwQjEwMTAwMDAwMDAwNDAwRQorOjEwOUMwMDAwMzFCMzAxMDA4MDgzMjI0RjhGN0MwMDAwMDAwMDAwNTE5RgorOjEwOUMxMDAwRkQ5MzAxMDA4MjgzMjI0MDhGN0MwMDAwODY4MzAwNTRFNAorOjEwOUMyMDAwRkQ5MzAwMDA4NDgzMjI0MjhGN0MwMDAwMDAwMDAwNTJEQworOjEwOUMzMDAwRkQ5MzAxMDA4NjgzMjI0MThGN0MwMDAwMDAwMDAwNTNDOQorOjEwOUM0MDAwRkQ5MzAxMDA5QTgzMjI1MUZEN0YwMDAwMzQ4MjAwNDA4MQorOjEwOUM1MDAwODEzMjAxMDAwQzAwMDA0OEIyQ0IwMTAwRkM4MTAwNDBDMQorOjEwOUM2MDAwODEzMjAxMDA5NTgzQTI0MEI1NkYwMDAwMUUwMDAwNDhCQworOjEwOUM3MDAwQjJDQjAxMDBGQzgxMDA0ODk2MzAwMTAwMDAwMDAwREEwMAorOjEwOUM4MDAwOTdDMDAxMDAwNDAwMDA0QkIyQ0IwMTAwRkM4MTAwNDBGMgorOjEwOUM5MDAwODEzMjAxMDAwRTAwMDA0OEIyQ0IwMTAwRkY4MTAwNDA3QworOjEwOUNBMDAwODEzMjAxMDAwQzAwMDA0OEIyQ0IwMTAwMDAwMDAwMzBGRQorOjEwOUNCMDAwQjVCMzAxMDBGRjgxMDA0MDgxMzIwMTAwMEUwMDAwNDg3MQorOjEwOUNDMDAwQjJDQjAxMDBGQzgxMDA0MDgxMzIwMTAwOTk4MzIyNDAyNworOjEwOUNEMDAwQjU2RjAwMDA5RDgzMDA1NEZEOTMwMDAwMDAwMDAwNTEwQgorOjEwOUNFMDAwRkQ4MzAxMDAxQzAwMDBGRTdGRDkwMTAwOUQ4M0E2NDA3QQorOjEwOUNGMDAwODEzMjAwMDAwMDAwMDA1NUZEOTMwMTAwMDAwMDgwNDAwQgorOjEwOUQwMDAwODFCMjAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDJGNDE3QgorOjEwOUQxMDAwOTlCMzAxMDBBODgzMjI0NDgxNkMwMDAwQjA4MzIyNDhEQgorOjEwOUQyMDAwODE2QzAwMDBBQTgzMjI0QzgxNkMwMDAwQjQ4MzIyNTAxNQorOjEwOUQzMDAwODE2QzAwMDBCNTgzMjI1NDgxNkMwMDAwQjc4MzIyNThFNworOjEwOUQ0MDAwODE2QzAwMDBCQzgzMjI1QzgxNkMwMDAwNTUwMTAwNDBFNgorOjEwOUQ1MDAwODFCMjAwMDAwMDAwMDBCQzA5QjAwMTAwNkE4NDAwQ0FBMgorOjEwOUQ2MDAwMDFCMDAwMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDEwRAorOjEwOUQ3MDAwRjM4MzAxMDBBRTgzQTI0MjA1NkMwMDAwMDAwMDAwNDFBNQorOjEwOUQ4MDAwMDVCMDAxMDA2QTg0MjJDQTA3MTQwMDAwNkE4NDAwNDVGNQorOjEwOUQ5MDAwRjM5MzAwMDA2QTg0MjA0Mzk1NkYwMDAwNkE4NDgwQ0FCMAorOjEwOURBMDAwMDUzMDAwMDA2QTg0MjIwMTgwMzAwMDAwNkE4NDAwQ0IwNAorOjEwOURCMDAwREI5MTAwMDA1QzAxMDBCQ0FCQjMwMDAwMDAwMDAwQkMwNAorOjEwOURDMDAwQjFCMzAxMDA2QTg0MDBDQUNGQjMwMDAwRkYwMDAwQ0EyQgorOjEwOUREMDAwODE4ODAxMDA2QTg0QTI0MDc0N0QwMDAwNjAwMDIwNDBGOAorOjEwOURFMDAwNjA5OTAxMDBCOTgzQThCMTgyMzAwMDAwQjg4MzAwNDBCNworOjEwOURGMDAwODFCMjAwMDA2QTg0MDBDQTc5QjMwMDAwMDAwMDAwNEVGRQorOjEwOUUwMDAwODFCMDAxMDAwMDAwMDA0M0NCODMwMTAwMDAwMDQ1NDAwOQorOjEwOUUxMDAwODFCMjAxMDBCRjgzQTI0MTgxNTAwMDAwMDAwMDQ1NDA5MworOjEwOUUyMDAwODFCMjAxMDAwMDAwNDU0MDgxQjIwMTAwQ0E4MzkxODJFNQorOjEwOUUzMDAwODIzMDAwMDAwMDAwMDA4QTgwQjAwMTAwQjY5RjAwNDAyMAorOjEwOUU0MDAwODBDRTAxMDBDODgzQTY0MDgxMzIwMDAwQ0E4MzU2NDBGQworOjEwOUU1MDAwODFCMjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTM0OAorOjEwOUU2MDAwMDc5MDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTJENAorOjEwOUU3MDAwMDc5MDAxMDBGMzlGMDA0MThCQjMwMDAwMDAwMDAwNEVFQgorOjEwOUU4MDAwODFCMDAxMDAwMDAwMDA0MkNEODMwMTAwMDAwMDQ2NDA4NworOjEwOUU5MDAwODFCMjAxMDBDRjgzQTI0MTgxNTAwMDAwMDAwMDQ2NDAwMgorOjEwOUVBMDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwREE4MzkxODE1NQorOjEwOUVCMDAwODIzMDAwMDAwMDAwMDA4OTgwQjAwMTAwQjY5RjAwNDBBMQorOjEwOUVDMDAwODBDRTAxMDBEODgzQTY0MDgxMzIwMDAwREE4MzU1NDA1RAorOjEwOUVEMDAwODFCMjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTJDOQorOjEwOUVFMDAwMDc5MDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTM1MworOjEwOUVGMDAwMDc5MDAxMDBGMzlGMDA0MThCQjMwMDAwQjEwMzAwNDBDNQorOjEwOUYwMDAwQTE5OTAxMDBDNDE0MkY0MDk5QjMwMTAwNUMwMTAwNDBFNQorOjEwOUYxMDAwNDlCMTAwMDA1ODE1MkQ0MDhEQjAwMTAwRDAxNDJERjAyRQorOjEwOUYyMDAwODhCMDAxMDAwMDAwMDA0MDhGQjAwMTAwMDEwMDAwQTZEMQorOjEwOUYzMDAwOTBCMDAxMDAwMEY4MDA0ODkwOTgwMTAwMDAwMDAwNDUzMgorOjEwOUY0MDAwOTNCMDAxMDAwMDAwMDBGQThBQjAwMTAwNkEwMzAwNDBFQgorOjEwOUY1MDAwODEzMjAxMDAwMjAwMDBBNjgwQjAwMTAwRUM4MzIyNDBBMworOjEwOUY2MDAwODI2QzAwMDBGMDgzMDA0MDgxMzIwMTAwNDcwMzAwNDAxMgorOjEwOUY3MDAwODEzMjAxMDAwMDAwMDA0MThEQzAwMTAwRjU4MzIyNUZBNQorOjEwOUY4MDAwOEQ2QzAwMDBFNzgzQTI0MTkzNTAwMDAwRTU4MzAwNDAwMAorOjEwOUY5MDAwODFCMjAwMDBGRjA3MDA0Nzg0ODgwMTAwMDAwMEE2NDA0RQorOjEwOUZBMDAwODFCMjAwMDBGNTlGMDA0NzgwMzAwMTAwMDAwMjAwNDdBOQorOjEwOUZCMDAwOEVDODAxMDBGMDgzMDA0MDgxQjIwMDAwMDAwMDAwNDQyMAorOjEwOUZDMDAwNTBCMzAxMDBGQjgzMjAxODg5NkMwMDAwMDQwMDAwQTYzOAorOjEwOUZEMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDBGRgorOjEwOUZFMDAwNTU5QjAxMDBGRTgzMDA0MDgxQjIwMDAwMDQwMDAwQTZFMgorOjEwOUZGMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDBERgorOjEwQTAwMDAwNTU5QjAxMDAwMDAwMDA0MjUwRDMwMTAwMDAwMDAwQTg1MQorOjEwQTAxMDAwNEZCMzAxMDAwMDAwMDA0MzRFRDMwMTAwNUUwMzAwNDAzNworOjEwQTAyMDAwODEzMjAxMDA2QzAzMDA0MjgwMzAwMTAwRjA4MzAwNDA2NworOjEwQTAzMDAwODEzMjAxMDAwNzg0MjJBNzhGNkMwMDAwNDkwMzAwNDA5MQorOjEwQTA0MDAwODEzMjAxMDAwNDg0MDA0MDgxQjIwMDAwMDAwMDgwNDBBMQorOjEwQTA1MDAwODFCMjAxMDBBMDk0MkU0Mzk3QjAwMTAwMDAwMDAwNDA5RgorOjEwQTA2MDAwRjFCMTAxMDAwOTg0QTI0MTk3NTAwMDAwNTA5NTIwNDBCMQorOjEwQTA3MDAwRTFCMTAxMDBBQzk0MkU0Mzk3QjAwMTAwMDAwMDAwNDAxNAorOjEwQTA4MDAwRjFCMTAxMDAwRDg0QTI0MTk3NTAwMDAwMDAwMDgwNDAxMgorOjEwQTA5MDAwODFCMjAxMDBBRTAzMDA0MEEzOTkwMTAwMDAwMDAwNDAxRQorOjEwQTBBMDAwODFCMDAxMDA2MDE1MDA0MDg1OTgwMTAwMDgwMDAwNDA2MworOjEwQTBCMDAwNDBFNDAxMDAwMDAwMDA1OTQxOTQwMTAwMDAwMDAwNTBGQworOjEwQTBDMDAwNDFFMDAxMDAwMDAwMDA0MjQwOTQwMTAwMDAwMDAwNDExNgorOjEwQTBEMDAwODFDMDAxMDAwMDAwQTM0MTgxNkMwMTAwMDAwMDAwNDEyQgorOjEwQTBFMDAwQTNDMTAxMDAxMzg0MDA1MDg1QzAwMDAwNDk4NEEyNDEyRgorOjEwQTBGMDAwMDE3RDAwMDAyMTg0MjI1ODczN0QwMDAwNzgwMDAwNDAxQgorOjEwQTEwMDAwNjE5OTAxMDAxQzg0QThCMTlDMzAwMDAwMzAwMDM4NDVFMgorOjEwQTExMDAwOURFMDAxMDAwMTAwMDAwRTEwQzkwMDAwMjE4NDMzQzQzRAorOjEwQTEyMDAwODEzMDAwMDAyNDg0QTFBRDlEMjAwMDAwMUI4NDEzNDBEOQorOjEwQTEzMDAwODFCMjAwMDAwMDAwMTM0RTVBODMwMTAwMzAwMDM4NDUwMAorOjEwQTE0MDAwOURFMDAxMDAyQzg0MjJBQjgwMDQwMDAwMkE4NEEyNDAwMAorOjEwQTE1MDAwMDE3RDAwMDAyQzg0MjI1RjU3N0QwMDAwMjc4QTAwNDA4QgorOjEwQTE2MDAwODFCMjAwMDAyQzg0MjI1RTU3N0QwMDAwOEE4QTAwNDA2NAorOjEwQTE3MDAwODFCMjAwMDAzMTg0MjI1NDczN0QwMDAwNzQwMDAwNDBERAorOjEwQTE4MDAwNjE5OTAxMDAyQzg0QThCMTAwMzAwMDAwMDA4NkEyNUYxNAorOjEwQTE5MDAwMDE3QzAwMDA2Mjg5MDA0MDgxQjIwMDAwMzM4NEEyNUYyQworOjEwQTFBMDAwNTkyNzAwMDAzNTg0QTI1QzczN0QwMDAwM0M4NEEyNUVDOAorOjEwQTFCMDAwNzM3RDAwMDA0Njg0MjI1QzczN0QwMDAwNDc4NDM3NDAzNQorOjEwQTFDMDAwODEzMjAwMDA3QzAwMDA0MDYxOTkwMTAwMzY4NEE4QjExMgorOjEwQTFEMDAwMzYzMDAwMDA3QzAwMDA0MDYxOTkwMTAwMzg4NEE4QjE0RAorOjEwQTFFMDAwMDAzMDAwMDAxRjAwMDAwMDAyODgwMTAwMkY4NjE3NDA4OQorOjEwQTFGMDAwODFCMjAwMDA0Nzg0MzQ0MDgxMzIwMDAwN0UwMDAwNDA3QworOjEwQTIwMDAwNjE5OTAxMDAzRDg0QThCMTEyMzAwMDAwNDQ4NDUyMjFCQworOjEwQTIxMDAwMTMwNDAwMDAwMDAwMTQ0MTJGQzMwMTAwRkYzRjAwMDk5OAorOjEwQTIyMDAwMDA4QzAxMDAwMDAwMDA0MzAxRjAwMTAwODc4NDAwMzQyRAorOjEwQTIzMDAwMTM4NDAwMDBGRjNGMTQwOTAwOEMwMTAwRTc4NDAwNDNGMQorOjEwQTI0MDAwMDFGMDAwMDAwMDAwMDA0MDgxQjIwMTAwNDc4NDMzNDA2QgorOjEwQTI1MDAwODEzMjAwMDAxQjg0MTM0RTVBOTMwMDAwRUM4OUEyNDhGRgorOjEwQTI2MDAwRkQ3RjAwMDA0RTg0MjI1OTczN0QwMDAwNzkwMDAwNDA3QworOjEwQTI3MDAwNjE5OTAxMDA0QTg0MjhCMTdFMzEwMDAwNEI4NDAwNDA3RQorOjEwQTI4MDAwODFCMjAwMDA1Mjg0MjFBQzlDMjAwMDAwMDAwMDAwNDFGQgorOjEwQTI5MDAwMUZDMzAxMDAwNDAwQTA1RjlENkMwMDAwMDAwMDAwNEU4MQorOjEwQTJBMDAwNTg5MTAxMDA1Njg0MjI1QTczN0QwMDAwN0EwMDAwNDBDNAorOjEwQTJCMDAwNjE5OTAxMDA1Mzg0QThCMTdFMzEwMDAwMDEwMDAwQ0ZGNAorOjEwQTJDMDAwMTFDOTAwMDA1Qzg0QTI0MDkzN0YwMDAwNUM4NDIyNDQ5QQorOjEwQTJEMDAwOTM3RjAwMDA1ODg0NDJBNTgwMzAwMDAwNUI4NEEyNDAzOAorOjEwQTJFMDAwOTM3RjAwMDA3MTg0MUE0MDkzOTMwMDAwMDAwMDFBNDA4RAorOjEwQTJGMDAwODFCMjAxMDA5QTgwQTI0MDczN0QwMDAwQTE4OTIyNDRBRQorOjEwQTMwMDAwMjE2RjAwMDA5ODg5MjI0MDY1N0QwMDAwQTY4OUEyNUIyQworOjEwQTMxMDAwNzM3RDAwMDAwNDAwQTI0OTMzN0QwMDAwNjY4NDIyNDg1QQorOjEwQTMyMDAwMzM3RDAwMDBGRjAxMDA5OTgwRDgwMTAwMDAwMDAwNTAzQgorOjEwQTMzMDAwODFFMDAxMDBBODk4MkY0MDMzQjEwMTAwMDAwMDAwNDBFNworOjEwQTM0MDAwRTBDMTAxMDA2OTg0MjI0MEFGNkYwMDAwNjk4NDIyNDBBRgorOjEwQTM1MDAwODE2RjAwMDBGNTg5MUZBNTgyNkYwMDAwNDk4NDAwNDBDRAorOjEwQTM2MDAwODFCMjAwMDAxQjg0MDA0MDhCQjMwMDAwMDAwMDAwNTg0NQorOjEwQTM3MDAwNjFCMTAxMDAwMDAwMDA0RTYyQjEwMTAwMUI4NDI4NDA2MQorOjEwQTM4MDAwODEzMjAwMDA2Qzg0MDA0MDgxQjIwMDAwNkY4NDMzNDA1MQorOjEwQTM5MDAwMUYzMDAwMDAxQjg0MTM0RTVBOTMwMDAwNzM4NEEwQ0UxQworOjEwQTNBMDAwODE1MDAwMDA4NTg0QTBDRDgxNkMwMDAwMDAwMDAwQTVENAorOjEwQTNCMDAwOUNCMzAxMDAwMDAwMDBCMTgxQjAwMTAwODU4NDIyQjU4QQorOjEwQTNDMDAwODExNDAwMDA4MDE1MkY0MDQ5QjEwMTAwNzc4NDQyNDA3QworOjEwQTNEMDAwODEzMjAwMDAwMDAwNjBCNDY1OTcwMTAwRDAxNTJFNDA2NgorOjEwQTNFMDAwNjlCMzAxMDAwMDAwMUE0NDkzODMwMTAwMUEwMDAwQTIxRgorOjEwQTNGMDAwODBEQzAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwQjE2OAorOjEwQTQwMDAwRjFCMTAxMDAwMDAwMDBCNUYxQjEwMTAwMDUwMDAwNDAwQworOjEwQTQxMDAwNjE5OTAxMDAwMDAwMDA0MDYyQjEwMTAwODA4NEE4QTFBMAorOjEwQTQyMDAwRTAzMTAwMDA1Qzg0MDA4ODlFQjMwMDAwNUM4NEEyNDE5RgorOjEwQTQzMDAwNjc2RjAwMDA1Qzg0MDA2RkRCOTEwMDAwODU4NDQyNDAwMAorOjEwQTQ0MDAwODEzMjAwMDA1Qzg0MUE0MDkzODMwMDAwMDA5OTAwMDk2NworOjEwQTQ1MDAwNDZDOTAxMDAzRjAwMDBGMzBDODgwMTAwOTA4NEE2NDIyOQorOjEwQTQ2MDAwMTM2MDAwMDA1NTk3MDA5NTAzMzAwMTAwOEI4NDQ1NDAzMAorOjEwQTQ3MDAwODEzMjAwMDA3NTAwMDA0MDYxOTkwMTAwOEM4NEE4QjExMAorOjEwQTQ4MDAwMEMzMDAwMDA1Qzk3MUQxMDk0MzAwMTAwOTE4NDAwNTgzRQorOjEwQTQ5MDAwMUY5MDAwMDA0RTk3MDA5NTAzMzAwMTAwMUI4NDAwODgzOAorOjEwQTRBMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDQwMDJERjA5NQorOjEwQTRCMDAwMkVCMDAxMDBFRTA3MDA0MDk3OTgwMTAwOTg4NDIzNEJDRQorOjEwQTRDMDAwRTQ2RDAwMDA5ODg0MjI0QkZEN0YwMDAwMDAwMDAwNDBGNgorOjEwQTREMDAwMUY5MDAxMDAyMjAwMkY0MDgxQjIwMTAwOUI4NDgzMTc0RQorOjEwQTRFMDAwODAzMjAwMDAyNjAwMDA0MDQ3OTkwMTAwOUQ4NDg1MTdCNgorOjEwQTRGMDAwODAzMjAwMDAwMDAwMDA0ODQ3QzEwMTAwQTM4NDIyNTVCQgorOjEwQTUwMDAwMkY3QzAwMDAwMDAwMDA0MjQzRDEwMTAwMEYwMDAwRkE0MAorOjEwQTUxMDAwOTY4ODAxMDAwMDAwMDA0Mjk3RTAwMTAwMDAwMDAwNDIyMAorOjEwQTUyMDAwOTdEMDAxMDBBNDg0MDA0QjQ0QzEwMDAwMTIwMDAwQTI5NworOjEwQTUzMDAwNDRDOTAxMDAyODAwMDBGNjAyQ0MwMTAwMEEwMDAwQTE3NQorOjEwQTU0MDAwNDJDOTAxMDAwMDAwMDBGODE2QjAwMTAwMDAwMDI4RjAyOAorOjEwQTU1MDAwMTBCMDAxMDAwMDAwMDBGMDFBQjAwMTAwMDAwMDAwQTJERAorOjEwQTU2MDAwMkFCMDAxMDBDMDI4M0M0NjBERTAwMTAwMDAwMDJENDQ0NworOjEwQTU3MDAwOTVCMDAxMDBCMDg0QTJGODBFMzAwMDAwQzA4NDIyNDFFMgorOjEwQTU4MDAwOTU1MDAwMDAwMDAwMkQ1MDQ5QzEwMTAwQUM4NDAwNDBFRQorOjEwQTU5MDAwODFCMjAwMDBBRDg0QTJGODE2NkMwMDAwQUQ4NEEyRjg3MAorOjEwQTVBMDAwMTA2QzAwMDBBRDg0QTJGMDFBNkMwMDAwQkU4NDIyNTgyQQorOjEwQTVCMDAwMUY3QzAwMDAwMDk5M0Y0MjEzRjAwMTAwQjU4NDQ3NDAyMgorOjEwQTVDMDAwODEzMjAwMDBCOTg0QTJGMzc0MDYwMDAwMDAwMDAwMDY4NgorOjEwQTVEMDAwRTY5NTAxMDBCRTg0MUY0MDgxQjIwMDAwMDAwMDAwMDYyNQorOjEwQTVFMDAwOTZCMDAxMDAzRjAwMUZGMzBDODgwMTAwMDAwMDAwNTVFOQorOjEwQTVGMDAwNjFCMTAxMDAwMDAwMDA0QjYyQjEwMTAwQkM4NEE4NDBDMQorOjEwQTYwMDAwODEzMjAwMDBCRTg0NDc0MDgxMzIwMDAwQzY4NDFGNDE3MQorOjEwQTYxMDAwMkRDMzAwMDBDNDg0MjI1ODFGN0MwMDAwMDAwMDAwNTU5OAorOjEwQTYyMDAwNjFCMTAxMDAwMDAwMDAwNjYyQjEwMTAwQzI4NEE4NDBDRgorOjEwQTYzMDAwODEzMjAwMDBDNDg0NDc0MDgxMzIwMDAwRUU4NDFGNDExMworOjEwQTY0MDAwMkRDMzAwMDAwMzAwMDAwNzFBRjQwMTAwMjE5NjAwMDc0MworOjEwQTY1MDAwMTYzMDAxMDBENTg0MjI0MTgxNkMwMDAwQ0M4NDIyNDI1NgorOjEwQTY2MDAwODE2QzAwMDAxQjg0MDA4ODFDQjAwMDAwRDQ4NDIyNUYzMQorOjEwQTY3MDAwMEY3QzAwMDAxNTk3MDA1RjAxMTAwMTAwRDI4NDIyNDA3QQorOjEwQTY4MDAwOTU2QzAwMDAwNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjI0NAorOjEwQTY5MDAwMDJCMDAxMDA4QTk2MDA1Mjk1MzAwMTAwOTE5NjAwNEI1RAorOjEwQTZBMDAwMDJCMDAwMDA2Nzk3MDAwOTk2MzAwMTAwMDU4QTAwNDA1QgorOjEwQTZCMDAwMEZCMDAwMDBERDg0QTI1QTFGN0MwMDAwOUI5NTAwNDA3MworOjEwQTZDMDAwODEzMjAxMDBERDg0MjIyMDg1NkMwMDAwREE4NDlDMEYzOQorOjEwQTZEMDAwODAzMjAwMDAxQjg0MDA4ODFDQjAwMDAwN0M5NjAwNUM2NworOjEwQTZFMDAwMUYwMDAxMDA5Qjk4MDA0MjYxMzEwMTAwMUI4NDAwODgxQgorOjEwQTZGMDAwMUNCMDAwMDBFNjk5MDAwNzk2MzAwMTAwMDAwMDJEMDUwRgorOjEwQTcwMDAwNDhCMTAxMDBFMDg0ODJGMDE4MzAwMDAwNkM4QjAwNDVGNQorOjEwQTcxMDAwOEZCMDAwMDAyODIwMDBBNjk2QjAwMTAwRTQ4NDIyMTcyNAorOjEwQTcyMDAwOTYwNDAwMDAwQjk4MDA0Qjk1MzAwMTAwNkM4QjAwNEI5OQorOjEwQTczMDAwOEZCMDAwMDAyMTk3MDAwMzQ4MzEwMTAwRkM5NDAwNDBENQorOjEwQTc0MDAwODEzMDAxMDA2QzhCMDA0MDgxQjIwMDAwMDAwMDJFMTBBRgorOjEwQTc1MDAwNDhCMTAxMDAwMDAwNjg1MDAzQjAwMTAwMDAwMDAwMDM5MAorOjEwQTc2MDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTBFMgorOjEwQTc3MDAwNjJCMTAxMDBFQjg0QTgwMEUwMzEwMDAwMUI4NDAwODg3NgorOjEwQTc4MDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDAwMDAwNDA5MworOjEwQTc5MDAwMEZCMDAxMDAwMDAwMDBGODJFQjAwMTAwMDAwMDAwRjIzMAorOjEwQTdBMDAwMDJCMDAxMDAwMDAwMDA0MDE3QjAwMTAwMDA0MTAwQTYwNworOjEwQTdCMDAwOTZCMDAxMDBFRTA3MkU0Nzk3OTAwMTAwMDE4NTIyMTcwMQorOjEwQTdDMDAwOTYwNDAwMDBGRjg0MjI0QkZEN0YwMDAwRkY4NDIzQTIzQgorOjEwQTdEMDAwMDI2QzAwMDA4QTk2MDA1Mjk1MzAwMTAwMDQwMDIyNDE2QworOjEwQTdFMDAwOTc1MDAwMDAwQzAwMkQwMDEyQjAwMTAwMDAwMDAwRjA5NgorOjEwQTdGMDAwMDBCMDAxMDAwMDAwMDA1QzAxODAwMTAwOTE5NjAwNEI1OAorOjEwQTgwMDAwMDJCMDAwMDAwMDAwMDAwOTAwQjAwMTAwMDAwMDAwNTA4QworOjEwQTgxMDAwMDNCMDAxMDAxRTg1MDA1QzE3OTAwMDAwMTM4NTIyNDNFMQorOjEwQTgyMDAwMkY3QzAwMDAwMDAwMDA0NTFGOTAwMTAwMEM4NTIyNUY3NgorOjEwQTgzMDAwMkY3QzAwMDAwMDAwMkUxMDQ4QjEwMTAwMDAwMDAwNThERAorOjEwQTg0MDAwRjFCMTAxMDAxMDAwMDAwM0YwQzkwMTAwMTAwMDAwMDA4OAorOjEwQTg1MDAwRTBDOTAxMDAwODg1NDU0MjYxMzEwMDAwMDAwMDAwMTA5OAorOjEwQTg2MDAwNjJCMTAxMDAwOTg1QTg0MDgxMzIwMDAwMUI4NDFEODg2NworOjEwQTg3MDAwMUNCMDAwMDAyMDAwMkQwMzQ4QjEwMTAwRkYwRjAwRjZCRQorOjEwQTg4MDAwODA4ODAxMDAxMDg1QTJBNjgxNkMwMDAwMTM4NTAwRjI2QgorOjEwQTg5MDAwM0FCMDAwMDBGRDg1QTI0QkZEN0YwMDAwRTI5NTAwNDAyQworOjEwQThBMDAwODEzMjAxMDAxQjhBMDA0MDgxQjIwMDAwMUU4NTIyNEFDRAorOjEwQThCMDAwMkY3QzAwMDAxRTg1MjI0ODJGN0MwMDAwMEEwMDJEMDNGQgorOjEwQThDMDAwNDhCMTAxMDAzRjAwMDBGMjg2ODgwMTAwMUYwMDAwNDNFQworOjEwQThEMDAwODQ4ODAxMDAwNTAwMDA0MzgwRjQwMTAwOTg5NDNENDIwMworOjEwQThFMDAwODFFMDAxMDAxRTg1QTI0MkUwN0QwMDAwRkQ4NUEyNEJCMworOjEwQThGMDAwRkQ3RjAwMDBFMjk1MDA0MDgxMzIwMTAwMUI4QTAwNDA4QworOjEwQTkwMDAwODFCMjAwMDAxRTg1NDc0MDgxMzIwMDAwMDAwMDAwQTM5NAorOjEwQTkxMDAwMDlCMDAxMDAwMDAwMUY0MTQ3QzMwMTAwMjQ4NTIyQTFBNgorOjEwQTkyMDAwMDk2QzAwMDA2Qjg0MDA4ODFDQjAwMDAwMjE4NTAwMDNDNgorOjEwQTkzMDAwNDhCMTAwMDA1RTg1QTM5MjAzNkMwMDAwMEE5OTAwNDBCNAorOjEwQTk0MDAwOTUzMDAxMDAwMDAwMDA0MTQzQzMwMTAwMDAwMDAwMTZFMworOjEwQTk1MDAwODBCMjAxMDAxQjhBMjcwODgwMzIwMDAwMkI4NTIyNUMxMAorOjEwQTk2MDAwMTc3QzAwMDAyQzg1MDAwMDJBQjAwMDAwMTIwMDAwMDBCNworOjEwQTk3MDAwMkFDODAxMDAwMjAwMDAwODgwQzgwMTAwMzA4NUEyNDNGNworOjEwQTk4MDAwMkY3QzAwMDAwRTk4MDA0MDgxMzIwMTAwNEM4NTAwNUU1MworOjEwQTk5MDAwMTc5MDAwMDAwNDAwMDAwMThDQ0MwMTAwMEU5ODAwNENDMAorOjEwQTlBMDAwMDMzMDAxMDAwMDAwMkU0NjAyQjAwMTAwMTAwMDAwMTAyQworOjEwQTlCMDAwNDhDOTAxMDAwQzAwMDAwMUYwQ0QwMTAwMkMwMDAwNDA0RQorOjEwQTlDMDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMTAwMDAwMTVGMAorOjEwQTlEMDAwRTBDOTAxMDAwMDAwMDA0MzYxQjEwMTAwQTAwMDAwQTQzMworOjEwQTlFMDAwNjJERDAxMDAzOTg1QTg1NDE3MTAwMDAwNEM4NTAwNUUxNworOjEwQTlGMDAwMTc5MDAwMDAxMjAwMDAwMDJBQzgwMTAwNEI4NTIyNDM3NgorOjEwQUEwMDAwMkY3QzAwMDAwNDAwMDAwMThDQ0MwMTAwMDAwMDAwNENGMQorOjEwQUExMDAwMDNCMDAxMDAyRjk4MDA0MzYxMzEwMTAwMDAwMDJFNDY3MQorOjEwQUEyMDAwMDJCMDAxMDAxMDAwMDAxMDQ4QzkwMTAwMEMwMDAwMDEzNAorOjEwQUEzMDAwRjBDRDAxMDAwQzAwMDAwOUYwQzkwMTAwMDAwMDAwMTg3MQorOjEwQUE0MDAwRjBCMTAxMDAxMDAwMDAxNUUwQzkwMTAwMDAwMDAwNDM1MgorOjEwQUE1MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNEM4NTI4NTQxMgorOjEwQUE2MDAwMTcxMDAwMDA0ODg1MDA0MDgxQjIwMDAwMkY5ODAwNDM3NQorOjEwQUE3MDAwNjEzMTAxMDA0RTg1MjI1MDJGN0MwMDAwMDAwMDAwNTZGRAorOjEwQUE4MDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwNTE4NUEyNDEyNgorOjEwQUE5MDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwMDAwMDAwNDM3MQorOjEwQUFBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNTI4NUE4NDA0NAorOjEwQUFCMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMTY5ODAwNDAwMgorOjEwQUFDMDAwODEzMjAxMDA1OTg1MjI0MzJGN0MwMDAwMTY4MDAwMDM0QgorOjEwQUFEMDAwNDRDOTAxMDAwMDAwMDAxREU0QjEwMTAwQjc5NzAwNUUwOQorOjEwQUFFMDAwMDUxMDAxMDA1Qzg1QTI1RjJGN0MwMDAwQ0U5NDAwMDE2MAorOjEwQUFGMDAwMzg0MzAxMDBFMjk1MDA0MDgxMzIwMTAwMUI4QTAwNDA4QQorOjEwQUIwMDAwODFCMjAwMDA2MDg1QTI0QkZEN0YwMDAwRkE4NTAwNDEwNAorOjEwQUIxMDAwNDNDMzAwMDAwMDAwMDA0MDI3QjAwMTAwMDAwMDAwNDBENworOjEwQUIyMDAwMkRCMDAxMDAwMDAwMDA0MDExQjAwMTAwNjM4NTM1MDEyNworOjEwQUIzMDAwODYzMDAwMDA2RDAwMDA0MDYxOTkwMTAwNkI4NTI4QjFFRQorOjEwQUI0MDAwMzAzMDAwMDA2NDg1MjI0RDc1N0QwMDAwMDAwMDAwMTY0NQorOjEwQUI1MDAwODBCMjAxMDBFQTg1QTc0MDExNkMwMDAwMDAwMDAwNDFBRQorOjEwQUI2MDAwNDNDMzAxMDBGOTg1MDA0MDgxQjIwMDAwNkQwMDAwNDA0MAorOjEwQUI3MDAwNjE5OTAxMDA2Qjg1QThCMTEyMzAwMDAwMDAwMDAwMTYzOQorOjEwQUI4MDAwODBCMjAxMDA3NTg1QTc0MDExNkMwMDAwMDAwMDAwNDFGMworOjEwQUI5MDAwNDNDMzAxMDAwMDAwMDAwOTEwQjAwMTAwMDAwMDAwMThDQworOjEwQUJBMDAwMkNCMDAxMDBERTA3MDA0MzgwQ0UwMTAwNjQ4NUFBNDA3RQorOjEwQUJCMDAwODEzMjAwMDA3QTg1MDA0MDgxQjIwMDAwNDAwMDNFNDNBRgorOjEwQUJDMDAwMjdFMDAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMThCQQorOjEwQUJEMDAwRTBCMTAxMDAwMDAwMDA0MTI3QzAwMTAwNjQ4NUEzMEIyMworOjEwQUJFMDAwODc1MDAwMDAwMDAwMTU0MDFCQjAwMTAwMDAwMDAwNDAyRAorOjEwQUJGMDAwMjNCMDAxMDAxMjAwMDAwMDJBQzgwMTAwNDAwMDJENDBDRgorOjEwQUMwMDAwMzlCMDAxMDA4Mjg1QTI0MDI3NkMwMDAwMjIwMDAwMDhCNAorOjEwQUMxMDAwMTJDODAxMDBERTA3MDA0MDI1OTgwMTAwODU4NTAwNDAyQworOjEwQUMyMDAwODFCMjAwMDAwMDAwMDBGODEyQjAwMTAwMDAwMDAwRjA0NgorOjEwQUMzMDAwMzBCMDAxMDAwMDAwMDAwQjI1QjAwMTAwMDAwMDAwMTA0MgorOjEwQUM0MDAwMzJCMDAxMDAxNDAwMjAwMUUwQjEwMTAwRUUwNzAwNDAyNQorOjEwQUM1MDAwMzc5ODAxMDA4QTg1MjMwMTM2NkMwMDAwMDAwMDAwMDE0RQorOjEwQUM2MDAwMzZCMDAxMDA5NTg1ODI0MTIzNDAwMDAwMjA4MDAwMTAwRAorOjEwQUM3MDAwNDJDOTAxMDA5MTg1MjI0MEUzNkQwMDAwMDAwMDAwNDNCRAorOjEwQUM4MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOEU4NUE4NDAyNgorOjEwQUM5MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDE5NjAwNDMzNAorOjEwQUNBMDAwMjMzMDAxMDAwMDAwMDAxMDMyQjAwMTAwMDAwMDAwNDExQworOjEwQUNCMDAwMjNCMDAxMDAwMDAwMDAwMzQ4QjEwMTAwMDA4MDAwMTkyQQorOjEwQUNDMDAwNDRDOTAxMDBBNDg1MjI0NTFGN0MwMDAwMDAwMDAwNENGRgorOjEwQUNEMDAwRjFCMTAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMTgwRQorOjEwQUNFMDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTkzMworOjEwQUNGMDAwNjJERDAxMDA5Qjg1QTgxNUUwMzEwMDAwMDAwMDAwNTBENgorOjEwQUQwMDAwMDNEMDAxMDAwMDAwMDA1MDMzQzAwMTAwMDAwMDAwNENERgorOjEwQUQxMDAwMjVEMDAxMDAwQzAwMkQ0QzEzQzAwMTAwMDAwMDAwNTA5NAorOjEwQUQyMDAwMzdEMDAxMDAwMDAwMDA1MDJCQzAwMTAwOEE4NTAwNDU4QgorOjEwQUQzMDAwMUY4MDAwMDBBNjg1QTMxMjM2NkMwMDAwQTc4NTY4MUI0MworOjEwQUQ0MDAwMjhCMDAwMDAwMDAwNjgxMjI4QjAwMTAwMDAwMDAwMDlDRgorOjEwQUQ1MDAwRjBCMTAxMDAwMDAwMDAxOEYwQjEwMTAwMDAwMDAwNDM1NAorOjEwQUQ2MDAwNjFCMTAxMDAyMDAwMDAxOTYyREQwMTAwQUE4NUE4MTU2QgorOjEwQUQ3MDAwRTAzMTAwMDBEMDg1MjIxNDAyNTAwMDAwMDAwMDAwNTA5NQorOjEwQUQ4MDAwMzNDMDAxMDAwMDAwMDAxNDI0RDAwMTAwMEMwMDJEMTQ3OQorOjEwQUQ5MDAwMTJDMDAxMDBDOTg1QTIxNDM2NTAwMDAwQkE4NTIyNUM5OQorOjEwQURBMDAwMUY3QzAwMDAzMDgwMDAxMDQyQzkwMTAwQjg4NTIyNDA5RAorOjEwQURCMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMTA5RQorOjEwQURDMDAwNjJERDAxMDBCNTg1QTg0MDgxMzIwMDAwMUI4NDAwODg0NworOjEwQUREMDAwMUNCMDAwMDAwMDAwMDAwMzQ4QjEwMTAwMEMwMDJENUMxNQorOjEwQURFMDAwMUY4MDAxMDAxMDAwMDBGMDJBQzgwMTAwMDAwMDAwNUM3NAorOjEwQURGMDAwMkI4MDAxMDBGMDA3MDA0MDM3OTgwMTAwQkY4NTIzMDEzOAorOjEwQUUwMDAwMzY2QzAwMDAwMDAwMDAwMTM2QjAwMTAwQ0E4NTIyMUIyQworOjEwQUUxMDAwMDI2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMDAwMDJFNUNFOAorOjEwQUUyMDAwMUY5MDAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM3QworOjEwQUUzMDAwRjBCMTAxMDBGRjA3MDAxNUUwOEQwMTAwMDAwMDAwNDJBNQorOjEwQUU0MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwQzY4NUE4NDAzOAorOjEwQUU1MDAwODEzMjAwMDBDQTg1MDAwMzQ4QjEwMDAwMDAwMDAwMTRFMAorOjEwQUU2MDAwMkFDMDAxMDA4QTg1QTI0MDI1NkMwMDAwMDAwMDAwNDEzNAorOjEwQUU3MDAwMzlDMDAxMDA0MDAwM0Q0MzM5RTAwMTAwMDAwMDAwMEJGMworOjEwQUU4MDAwMjVCMDAxMDAwMDAwMDBGODEyQjAwMTAwOEE4NTAwRjAzMgorOjEwQUU5MDAwMzBCMDAwMDAwMDgwMDAxOTQyQzkwMTAwRDY4NTIyNDA3MAorOjEwQUVBMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTlBMworOjEwQUVCMDAwNjJERDAxMDBEMzg1QTg0MDgxMzIwMDAwMUI4NDAwODgzOAorOjEwQUVDMDAwMUNCMDAwMDAwMTk2MDA0MDJCMzAwMTAwMTgwMDJFMDMzQQorOjEwQUVEMDAwNDhCMTAxMDBEQTg1MjI1MDJGN0MwMDAwMDAwMDAwNTZBNgorOjEwQUVFMDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwREQ4NUEyNDEzNgorOjEwQUVGMDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwRTA4NTIyNDM4NgorOjEwQUYwMDAwMkY3QzAwMDAwMDAwMDA1NDE3OTAwMTAwMTYwMDIwMUQ0NworOjEwQUYxMDAwRTRCMTAxMDBFMjg1QTM0MDI3NkMwMDAwRTQ4NTYwNUY5NgorOjEwQUYyMDAwMTc5MDAwMDAwMDg0MDAwQjE2REMwMTAwMDAwMDYwMTM4NQorOjEwQUYzMDAwMTY5NDAxMDBCNzk3MDA1RTA1MTAwMTAwMUI4QUEyNUZGRQorOjEwQUY0MDAwMkY3QzAwMDAxNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjJDMQorOjEwQUY1MDAwMDJCMDAxMDBDRTk0MDAwMTM4NDMwMTAwMUI4QTAwNDA3QQorOjEwQUY2MDAwODFCMjAwMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwNERFRAorOjEwQUY3MDAwNjFCMTAxMDAwMDAwMDAxNjYyQjEwMTAwRUM4NUE4NDAzQgorOjEwQUY4MDAwODEzMjAwMDAwMDAwMDAwODYyQjEwMTAwRUU4NUE4NDA5NworOjEwQUY5MDAwODEzMjAwMDBGOTg1MjIxMzgyNkMwMDAwNDAwMDNENDM5RAorOjEwQUZBMDAwODNFMDAxMDAwMDAwMDBGODEwQjAwMTAwMDAwMDAwRjA5NAorOjEwQUZCMDAwMkNCMDAxMDAwMDAwMDAxNjYyQjEwMTAwRjQ4NUE4NDAyOQorOjEwQUZDMDAwODEzMjAwMDAwMDAwMDAwODYyQjEwMTAwRjY4NUE4NDA0RgorOjEwQUZEMDAwODEzMjAwMDBGMDg1MDA0MTgzQzAwMDAwMDAwMDE1NDA3MAorOjEwQUZFMDAwODFCMjAxMDAwMDgyMDBBNjA0QjAwMTAwQTA5ODAwNDBEOAorOjEwQUZGMDAwNDc5OTAxMDBFOTg5MDA0MTg5MzAwMTAwOEE5NjAwNTI5MQorOjEwQjAwMDAwOTUzMDAxMDA5MTk2MDA0QjAyQjAwMDAwMUI4QTAwNDA3MQorOjEwQjAxMDAwMEZCMDAwMDAwMDAwMDA1RjAxODAwMTAwMTAwMDAwMDA4MAorOjEwQjAyMDAwMEVGNDAxMDAzRjAwMDAwMDAwODgwMTAwMDMwMDAwMDc0QgorOjEwQjAzMDAwMUFGNDAxMDAyMTk2MDAwNzE2MzAwMTAwMEI4NjIyNDEwOAorOjEwQjA0MDAwODE2QzAwMDAwOTg2MjI0MjgxNkMwMDAwMUI4NDAwODgwQworOjEwQjA1MDAwMUNCMDAwMDAwQTg2MjI1RjBGN0MwMDAwMDU4QTAwNDBCOQorOjEwQjA2MDAwMEZCMDAwMDAxMzg2QTI1QTFGN0MwMDAwOUI5NTAwNDA4MQorOjEwQjA3MDAwODEzMjAxMDAxMzg2MjIyMDg1NkMwMDAwMTA4NjlDMEYwRgorOjEwQjA4MDAwODAzMjAwMDAxQjg0MDA4ODFDQjAwMDAwN0M5NjAwNUNBRAorOjEwQjA5MDAwMUYwMDAxMDA5Qjk4MDA0MjYxMzEwMTAwMUI4NDAwODg2MQorOjEwQjBBMDAwMUNCMDAwMDBFNjk5MDAwNzk2MzAwMTAwMDAwMDJEMDU1NQorOjEwQjBCMDAwNDhCMTAxMDAwMDAwMDBGMDE4QjAwMTAwMTk4NjIyM0FFMgorOjEwQjBDMDAwMDE2QzAwMDAwMDAwMDAwMDhFQjAwMTAwNkM4QjAwNDA5RAorOjEwQjBEMDAwMDFCMDAwMDAwMDAwMDA0MDgxQjIwMTAwMkUwMDJEMDVFQgorOjEwQjBFMDAwNDhCMTAxMDAxRDg2QTI0MEU3NkQwMDAwMEEwMDAwNDA0MworOjEwQjBGMDAwOEY5ODAxMDA2QzhCMDA0MDAxQjAwMDAwNjY5NTAwNDAwNQorOjEwQjEwMDAwODEzMjAxMDA0RTk3MDA5NTAzMzAwMTAwMUI4NDAwODhCNgorOjEwQjExMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMjIwMDJERjBGQQorOjEwQjEyMDAwMkVCMDAxMDAyODIwMDBBNjk2QjAwMTAwMjY4NjIyMTcyNgorOjEwQjEzMDAwOTYwNDAwMDAwQjk4MDA0Qjk1MzAwMTAwNkM4QjAwNEM3RQorOjEwQjE0MDAwOEZCMDAwMDAyODg2ODMxNzgwMzIwMDAwMDAwMDAwNDQ4MgorOjEwQjE1MDAwNDNDMTAxMDAyQTg2ODUxNzgwMzIwMDAwMDAwMDAwNDhBNAorOjEwQjE2MDAwNDNDMTAxMDAyODAwMDBGNjAyQ0MwMTAwMTIwMDAwQTEzQQorOjEwQjE3MDAwMkFDODAxMDAyMTk3MDA0MDgxMzIwMTAwRkM5NDAwNDE1RgorOjEwQjE4MDAwODEzMDAxMDA2QzhCMDA0MDgxQjIwMDAwMDAwMDAwMDFBMgorOjEwQjE5MDAwMDBEMDAxMDAwMDAwMkUxMDQ4QjEwMTAwMjgwMDAwNDAzRQorOjEwQjFBMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDA2RgorOjEwQjFCMDAwRjBCMTAxMDAzNDg2NDY0NzYxMzEwMDAwMDAwMDAwMTAwNAorOjEwQjFDMDAwNjJCMTAxMDAzNTg2QTgxQkUwMzEwMDAwMUI4NDFFODg5NworOjEwQjFEMDAwMUNCMDAwMDAwMDAwMDA0NTAzRTAwMTAwMDgwMDJEMDM0MgorOjEwQjFFMDAwNDhCMTAxMDA1QTg2MDFGQjA4MzAwMDAwQUQ4Njg3RkI5QworOjEwQjFGMDAwMjIzMDAwMDAwMDAwMDBGQTBFQjAwMTAwMDAwMDAwRjg0QworOjEwQjIwMDAwMTRCMDAxMDAwMzAwMDAwNzFBRjQwMTAwMjE5NjAwMDdBMgorOjEwQjIxMDAwMTYzMDAxMDA1MDg2MjI0MTgxNkMwMDAwNDQ4NjIyNDI5MworOjEwQjIyMDAwODE2QzAwMDAxQjg0MDA4ODFDQjAwMDAwNEY4NjIyNUZFOAorOjEwQjIzMDAwMEY3QzAwMDAzODAwMDAwNDdFODkwMTAwNDg4NkE2NUY2QworOjEwQjI0MDAwMEYwMDAwMDA3NDk1MDA0MDA1MzAwMTAwNEQ4NjAwNDA1RAorOjEwQjI1MDAwODFCMjAwMDAxMzAwMDA0MDg3OTgwMTAwMDAwMDJEMDMxOAorOjEwQjI2MDAwNDhCMTAxMDAwQzAwMkRGMDgyQjAwMTAwMDAwMDAwRjA5OAorOjEwQjI3MDAwODRCMDAxMDAwMDk3MDA0MDA1MzAwMTAwMDAwMDAwNUMzMAorOjEwQjI4MDAwMUY5MDAxMDAwNThBMDA0MDBGQjAwMDAwNTg4NkEyNUFBNgorOjEwQjI5MDAwMUY3QzAwMDA5Qjk1MDA0MDgxMzIwMTAwNTg4NjIyMjBDRgorOjEwQjJBMDAwODU2QzAwMDA1NTg2OUMwRjgwMzIwMDAwMUI4NDAwODg0RQorOjEwQjJCMDAwMUNCMDAwMDA3Qzk2MDA1QzFGMDAwMTAwOUI5ODAwNDJCRgorOjEwQjJDMDAwNjEzMTAxMDAxQjg0MDA4ODFDQjAwMDAwRTY5OTAwMDc3MgorOjEwQjJEMDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjA4QgorOjEwQjJFMDAwMThCMDAxMDA1Qzg2MjEwNDgwMjAwMDAwNUQ4NjAwNDBDQgorOjEwQjJGMDAwMTBDOTAwMDBBRThBMDA0QjgxQjAwMDAwN0M4NjAwNDM3QworOjEwQjMwMDAwODFCMDAwMDA4MDg2MDBGQjIyQjAwMDAwQUU4QTAwNDFDMAorOjEwQjMxMDAwODFCMDAwMDA2QzhCMDA0RThGQjAwMDAwNzg4NjAwNUEyMAorOjEwQjMyMDAwOEZCMDAwMDA2NTg2MDA0NzhGQjAwMDAwQUU4QTAwNTNFMgorOjEwQjMzMDAwODFCMDAwMDBBRThBMDA1NjgxQjAwMDAwMzIwMDJEMDVCOQorOjEwQjM0MDAwNDhCMTAxMDA2QzhCQTAwQUU0NkQwMDAwNkI4NkEyNDEzRAorOjEwQjM1MDAwMTk3QzAwMDA2QTg2MjIwQTgwMzIwMDAwNkM4QjAwNTM0MAorOjEwQjM2MDAwOEZCMDAwMDA2QzhCMDA1NDhGQjAwMDAwNzQ4NjIyMEFFRQorOjEwQjM3MDAwODAzMjAwMDA2RTg2QTIwQUU0NkQwMDAwNkM4QjAwNURENgorOjEwQjM4MDAwOEZCMDAwMDAwMDAwMDBGMjgwQjAwMTAwMDAwMDAwMEE1MQorOjEwQjM5MDAwODBEMDAxMDA3Mjg2QTA5MTgxNkMwMDAwNkM4QjAwNUVGMQorOjEwQjNBMDAwOEZCMDAwMDAyNTAwMDA0MDhGOTgwMTAwNkM4QjAwNDA5QQorOjEwQjNCMDAwODFCMjAwMDA3Njg2MjA5MUU1NkQwMDAwNkM4QjAwNTQxMAorOjEwQjNDMDAwOEZCMDAwMDAyMTAwMDA0MDhGOTgwMTAwNkM4QjAwNDA3RQorOjEwQjNEMDAwODFCMjAwMDAzMjAwMkQwNTQ4QjEwMTAwNkM4QkEwMEEzQgorOjEwQjNFMDAwRTQ2RDAwMDAyNDAwMDA0MDhGOTgwMTAwNkM4QjAwNDA0OQorOjEwQjNGMDAwODFCMjAwMDAzNzAwMkQwNTQ4QjEwMTAwMDQwMDAwRjNDMAorOjEwQjQwMDAwODJGNDAxMDBBRThBQTA0MjgzNkMwMDAwQUU4QTAwNTQzMAorOjEwQjQxMDAwODFCMDAwMDAwMDAwMDBGMjBFQjAwMTAwMDMwMDAwMDc0MAorOjEwQjQyMDAwMUFGNDAxMDAwMEI1MDAwRDQyQzkwMTAwMDcwMDAwMDczMQorOjEwQjQzMDAwMTY4ODAxMDA4OTg2MjIwQkU2N0QwMDAwMEEwMDAwNDA4NAorOjEwQjQ0MDAwODc5ODAxMDA1NTk5MDA0MDgxMzIwMTAwMDAwMDAwNDBCQQorOjEwQjQ1MDAwMEZCMDAxMDAwNThBMDA1QzFGOTAwMDAwOUI4NjIyNTBGRgorOjEwQjQ2MDAwRkQ3RjAwMDA5Njg2QTI1NEZEN0YwMDAwOEU4NjIyNTU0NworOjEwQjQ3MDAwRkQ3RjAwMDA4MjAwMDA0MDg3OTgwMTAwODY4NjAwNDAyMgorOjEwQjQ4MDAwODFCMjAwMDA4Njg2MjI1M0ZEN0YwMDAwMTQ4MDAwMDNGNQorOjEwQjQ5MDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMTAwMDAwNEIwRQorOjEwQjRBMDAwODBGNDAxMDAwQ0JDMDA0MDg3OTgwMTAwOTY4NjIyNDM3RQorOjEwQjRCMDAwODA2QzAwMDBGRkZGMDA0QjgwODgwMTAwODY4NkEyNDM1RAorOjEwQjRDMDAwODA2QzAwMDA3Qzk2MDA0MDQ3OTkwMTAwOTc4NjQzNDBCRAorOjEwQjREMDAwODEzMjAwMDA5QTg2QTBGMDMwNkYwMDAwOEM4NjFCNDBGRAorOjEwQjRFMDAwODFCMjAwMDAwMDAwMUI0MTMxQzMwMTAwQTU5NTAwNDA1RQorOjEwQjRGMDAwMjUzMDAxMDA5Rjg2OUMwRjgwMzIwMDAwMUI4NDAwODg0RAorOjEwQjUwMDAwMUNCMDAwMDA3Qzk2MDA1QzFGMDAwMTAwMTQ4MDAwMDM0QQorOjEwQjUxMDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMDAwMDJGMDVCNAorOjEwQjUyMDAwNDhCMTAxMDAxMDAwMDAwNzE4RTQwMTAwMDAwODAwMENGOQorOjEwQjUzMDAwRTA5OTAxMDBFNjk5MDAwNzk2MzAwMTAwMDBCNTAwMEQ4MgorOjEwQjU0MDAwNDZDOTAxMDBBNjg2MzA0MDgxMzIwMDAwMDAwMDAwMEI5MQorOjEwQjU1MDAwRTY5MTAxMDAwMDAyMDBBMTQ2QzkwMTAwMDAwMDAwMEJCNQorOjEwQjU2MDAwRTY5MTAxMDAwNDAwMkUwNTQ4QjEwMTAwMDAwMDEwNDBFMgorOjEwQjU3MDAwRTFCMTAxMDBBRThBMDA0MDgxQjAwMDAwMDAwMDAwRkI5NAorOjEwQjU4MDAwMjhCMDAxMDAwMDAwMDBGQjg2QjAwMTAwMDAwMDAwRjhCOAorOjEwQjU5MDAwMTRCMDAxMDBCNzg2MjI0NjIzN0MwMDAwQjM4NjIyNDAwNworOjEwQjVBMDAwODc3QzAwMDAwMDAwMDA0ODFGOTAwMTAwQjU4NjIyNDEwMgorOjEwQjVCMDAwODc3QzAwMDAwMDAwMDA0NzFGOTAwMTAwQjc4NjIyNDJGMAorOjEwQjVDMDAwODc3QzAwMDAwMDAwMDA0NTFGOTAwMTAwQjc4NjQ3MUJFNAorOjEwQjVEMDAwMkMzMDAwMDAwMDAwMDBBMDEzQjAwMTAwMDAwMDFGNDE0QgorOjEwQjVFMDAwNDFDMzAxMDBFNjg2MjM5MjE1NkMwMDAwRTY4NkEyNDU2MQorOjEwQjVGMDAwMUY3QzAwMDBFQTg2MjI0QkZEN0YwMDAwMTcwMDAwRDA3MAorOjEwQjYwMDAwQTJDOTAxMDAwMDAwMDA0MDI3QjAwMTAwMDIwMDAwMEFBQQorOjEwQjYxMDAwMjRDODAxMDBERDk1MDA0MDBGMzAwMTAwRTQ4NjIyMDhCNworOjEwQjYyMDAwNDAzMDAwMDAwMDAwMDA0MUEzQzEwMTAwRjAwNzAwMTJGQgorOjEwQjYzMDAwMjRDQzAxMDBDMDg2QUE0MTI3NDAwMDAwMDEwMDAwMTM2RAorOjEwQjY0MDAwODBDQzAxMDBFMDg2MjY0MDIzMzAwMDAwMDAwMDAwNDA0RQorOjEwQjY1MDAwODNCMDAxMDA2MDAwMDAwMzg0QzgwMTAwMTAwMDAwMTBFNgorOjEwQjY2MDAwNDhDRDAxMDAxNzAwMDBEMEEyQzkwMTAwQ0Q4NkEyNDAzQworOjEwQjY3MDAwODM2QzAwMDBEOTg2MDA0MTgzQjAwMDAwMDA4MDAwNDI0NgorOjEwQjY4MDAwNDQ5OTAxMDAwMDAwNjgyMTM4OTYwMTAwMDAwMDJFNTAwNgorOjEwQjY5MDAwNDlDMTAxMDBEMjg2QTI0NDIzNkMwMDAwMzAwMDAwMDM5RgorOjEwQjZBMDAwNDhDOTAxMDAwMDAwMDA0NEYxQjEwMTAwMEMwMDAwMjA3NQorOjEwQjZCMDAwRjBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTQzNQorOjEwQjZDMDAwNjJERDAxMDBENTg2QTg0MkUwMzEwMDAwMDAwMDAwNDRBMAorOjEwQjZEMDAwODVDMDAxMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDFCRQorOjEwQjZFMDAwQTNDMTAxMDBDQjg2QTI0MTgxNTAwMDAwRTA4NjIyNDAyOAorOjEwQjZGMDAwMjM2QzAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTAxNAorOjEwQjcwMDAwNjJERDAxMDBERDg2QTg0MDgxMzIwMDAwMUI4NDAwODhENAorOjEwQjcxMDAwMUNCMDAwMDAwMDAwMDAwMzQ4QjEwMTAwRUUwNzAwNDAyQgorOjEwQjcyMDAwMjU5ODAxMDAxNzAwMDBEMDJBQzgwMTAwRjM4NjAwMTdGMQorOjEwQjczMDAwMTBCMDAwMDBDMDk3MDA0MDgxMzIwMTAwRUE4NjAwNDA0RQorOjEwQjc0MDAwODFCMjAwMDBERDk1MDA5MjI1MzAwMTAwMDAwMDAwNDAyQworOjEwQjc1MDAwMzFCMDAxMDBFQTg2MjIwODJFMzAwMDAwRjM4NjAwNDE1NQorOjEwQjc2MDAwMjdCMDAwMDA4MDgwMDBBNjA0QjAwMTAwMDYwMDAwNDA2MQorOjEwQjc3MDAwODc5ODAxMDA1NTk5MDAwQThDMzAwMTAwMDAwMDAwNDBCNAorOjEwQjc4MDAwMEZCMDAxMDAwMDAwMDA1QzFGOTAwMTAwRjI4NjIyOUZCNAorOjEwQjc5MDAwMTM2QzAwMDAwMjAwMDA4ODFDQ0MwMTAwNkI4NDAwNDA4OAorOjEwQjdBMDAwODFCMjAwMDAwNThBMDA0MTNGQzMwMDAwMDAwMDAwNDA1NAorOjEwQjdCMDAwMEZCMDAxMDAyODAwMDAwMTgwQ0UwMTAwMDc4NzJBNDA1OQorOjEwQjdDMDAwODEzMDAwMDAwMDgwMDAxMDQ0QzkwMTAwNDAwMDAwNDBBQQorOjEwQjdEMDAwODE5ODAxMDBGQzg2QTI0ODFGN0MwMDAwRkM4NkEyNDdERAorOjEwQjdFMDAwMUY3QzAwMDBGQzg2QTMwNzAzNkMwMDAwODAwMDAwNDA2MworOjEwQjdGMDAwODE5ODAxMDBGRjg2QTM0MDAyNkMwMDAwMjgwMDAwMDEzMAorOjEwQjgwMDAwRjBDRDAxMDAwMTg3MDA0MDBGQjAwMDAwMjgwMDAwNDA4QgorOjEwQjgxMDAwRjBDRDAxMDAwNDAwMDA0MDBFQ0MwMTAwMjgwMDAwMDMyMAorOjEwQjgyMDAwRjBDOTAxMDAyODAwMDAwMEYwQzkwMTAwMDAwMDAwMTY2NgorOjEwQjgzMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwMTBFQworOjEwQjg0MDAwNjJERDAxMDAwNTg3QTg1QzFGMTAwMDAwMDAwMDAwNDBCOQorOjEwQjg1MDAwNDM5OTAxMDAwMDAwMDBGMDA4QjAwMTAwQTAwMTJENDA1NAorOjEwQjg2MDAwMDBDMDAxMDBFRDg4MjIwRjQyMDUwMDAwMTg4NzlDMEZFMAorOjEwQjg3MDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTA4QQorOjEwQjg4MDAwNDJDOTAxMDAxMzg3MjI0MEUzNkQwMDAwMDAwMDAwNDcxOQorOjEwQjg5MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMTA4N0E4NDA4NgorOjEwQjhBMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMTg4NzIyMDcyQQorOjEwQjhCMDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDdEOAorOjEwQjhDMDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUYxNAorOjEwQjhEMDAwRTE5MTAxMDBENzg3QTI0NTFGN0MwMDAwMTAwMDAwMDMwMgorOjEwQjhFMDAwNDhDOTAxMDAwMDAwMkQ1NDI5QzAwMTAwMDAwMDAwRjhFMworOjEwQjhGMDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjhEQQorOjEwQjkwMDAwMEVCMDAxMDA0MjAwMDAwMzBBQzgwMTAwMEMwMDAwQTRCMAorOjEwQjkxMDAwMENDODAxMDAwMDAwMDA0MDE3QjAwMTAwMDAwMDAwMTQzNgorOjEwQjkyMDAwMDJCMDAxMDAwMDAwMDAxNDI0RDAwMTAwMDAwMDAwMTQ0NworOjEwQjkzMDAwMTBDMDAxMDAxMjAwMDAwODEwQzgwMTAwMDAwMDAwNDAwMworOjEwQjk0MDAwMjNCMDAxMDBGRTdGMDAwNTQ0QzkwMTAwMjk4NzIwOTQyRgorOjEwQjk1MDAwMTU2QzAwMDAyQTg3MDA5NEU1QjEwMDAwMDAwMDAwMEE4MQorOjEwQjk2MDAwRTRCMTAxMDA0Mzg3MjIwMTgwMzIwMDAwMDAwMDNDNDQyMgorOjEwQjk3MDAwMjNFMDAxMDAwMDAwMkVBNDgwQjAwMTAwMDAwMDAwMTBCMAorOjEwQjk4MDAwNDhDMTAxMDAzMDg3QTMwNzAyNkMwMDAwMzE4NzY4MDFCRAorOjEwQjk5MDAwMUFCMDAwMDAwMDAwNjgwNzFBQjAwMTAwMDAwMDAwMEQ5NgorOjEwQjlBMDAwMDJEMDAxMDAwMDAwMDAwNUYwQjEwMTAwMDAwMDAwMEMxMQorOjEwQjlCMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMEQ0NAorOjEwQjlDMDAwMEFDMDAxMDAzRDg3MjI0MDAzNkMwMDAwM0Q4NzIyNDJFRgorOjEwQjlEMDAwMjM2QzAwMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDc2QworOjEwQjlFMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNjU4NzI4NDA2QworOjEwQjlGMDAwODEzMjAwMDAzQTg3MDA0MDgxQjIwMDAwMDAwMDAwMTA1MAorOjEwQkEwMDAwODBDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDA1QgorOjEwQkExMDAwNjJCMTAxMDAzRjg3QTg0MDIzMzAwMDAwMUI4NDAwODhFQQorOjEwQkEyMDAwMUNCMDAwMDA2NTg3MDA0MDgxQjIwMDAwMDAwMDNDNDQ2QgorOjEwQkEzMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTBFOQorOjEwQkE0MDAwNDhDMTAxMDA0ODg3QTMxMjBFNkMwMDAwNDk4NzY4MDdBRgorOjEwQkE1MDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwNEM4NzgwMDg3QworOjEwQkE2MDAwRjAzMTAwMDAwMTAwMDAxMTk4QzgwMTAwMDAwMDAwNENGNgorOjEwQkE3MDAwMUU5MDAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDI2NworOjEwQkE4MDAwRTBCMTAxMDAwMDAwMDAxMDg2QzAwMTAwMDAwMDAwNDY4NworOjEwQkE5MDAwNjFCMTAxMDAwMTFGMDA0MzYyREQwMTAwNTA4N0E4NUMxNQorOjEwQkFBMDAwMUYxMDAwMDA4Mzg3MjIwRDE0NkMwMDAwNTY4NzIyMERBMgorOjEwQkFCMDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwNUE4NzAwMEQyQQorOjEwQkFDMDAwMjREMDAwMDAwMDAwMDA0MTJCQzAwMTAwMDAwMDAwMTU0MAorOjEwQkFEMDAwQTJCMTAxMDAxMDAwMDAyMDEwQzgwMTAwRjAwNzAwNDBEMgorOjEwQkFFMDAwMjU5ODAxMDA1Qzg3MjI0MjIzNkMwMDAwNjU4NzAwNDE5NQorOjEwQkFGMDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTBCQQorOjEwQkIwMDAwNjJERDAxMDA1RDg3QTg1QzFGMDAwMDAwMUI4NDAwODhDNworOjEwQkIxMDAwMUNCMDAwMDAwMDAwMDAxMDQ4QjEwMTAwNjM4NzIyNDdGQworOjEwQkIyMDAwMUY3QzAwMDAxMTk2MDA0MzIzMzAwMTAwMEUwMDAwMEYxRgorOjEwQkIzMDAwMUU4QzAxMDAwMDAwMDA0MDIzQjAwMTAwODM4NzIyMEQwRAorOjEwQkI0MDAwMTQ1MDAwMDA4Mjg3QTIwRDBFNTAwMDAwNzE4NzIyNDYxQgorOjEwQkI1MDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTBBNAorOjEwQkI2MDAwNDJDOTAxMDA2Rjg3MjI0MEUzNkQwMDAwMDAwMDAwNDdEQQorOjEwQkI3MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNkM4N0E4NDA0NworOjEwQkI4MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMjA4MDAwMDM2QworOjEwQkI5MDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDAwMDJEMDZDMAorOjEwQkJBMDAwNDhCMTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjhFMgorOjEwQkJCMDAwMDRCMDAxMDA3Njg3MUZGMDBFMzAwMDAwMkE4NzAwNEM4OQorOjEwQkJDMDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwMkE4NzIzMDdCMAorOjEwQkJEMDAwMTQ2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMjQwMDAwNDAyRgorOjEwQkJFMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDAyNQorOjEwQkJGMDAwRjBCMTAxMDAwMDAwMDAxNkYwQjEwMTAwMjQwMDAwMDBDNworOjEwQkMwMDAwMDBDODAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTRDRAorOjEwQkMxMDAwNjJERDAxMDA3Rjg3QTg0NjFGMTAwMDAwMkE4NzAwMDMwRAorOjEwQkMyMDAwMENCMDAwMDAyQTg3MDAwRDE4QzAwMDAwMDQwMDJFMTQ3QworOjEwQkMzMDAwMEFEMDAxMDAxMjAwMDAwNTQ4Q0QwMTAwRkU3RjAwMDU3QQorOjEwQkM0MDAwNDJDOTAxMDAwQzAwMkFGMkUwQjEwMTAwODk4NzIyNDBCQworOjEwQkM1MDAwMzE2QzAwMDAwMDAwNjAxODM4OTYwMTAwMUUwMDAwNDBBMgorOjEwQkM2MDAwNDM5OTAxMDAwMDgxMDBGNjgwQ0UwMTAwOEQ4N0E2NDAzNworOjEwQkM3MDAwODEzMjAwMDAwMDAwMDA0NDQzQzEwMTAwOEY4NzIyMEI4NQorOjEwQkM4MDAwRUQ2RDAwMDAwODAwMDBBMTQyQzkwMTAwMDIwMDAwQTEwMgorOjEwQkM5MDAwNDZDOTAxMDAwRjAwMDBGQTk0ODgwMTAwMDIwMDAwNEEyMgorOjEwQkNBMDAwODZFNDAxMDAwMDAwMDBGNjBFQjAwMTAwOTc4NzIyNDdFRAorOjEwQkNCMDAwMUY3QzAwMDAwNDAwMUY0MzBFNTAwMDAwOTc4N0EwNDYyMQorOjEwQkNDMDAwMEY0MDAwMDAwMDAwMDA0MTBGQzAwMTAwOUI4NzIyNDg4OAorOjEwQkNEMDAwMUY3QzAwMDAwMDAwMDA0MDkxQjAwMTAwMDQwMDBGQTI5MgorOjEwQkNFMDAwNDIzMTAwMDA5RTg3MDA0MDg5QjAwMDAwMEMwMDAwQTI5NQorOjEwQkNGMDAwNDJDOTAxMDAwMDAwMDA0Mzg5QjAwMTAwMDAwMDAwNDM3OAorOjEwQkQwMDAwOTVEMDAxMDAwMDAwMDBGQzgyQjAwMTAwQTE4N0EwNDE5NQorOjEwQkQxMDAwOTA0MDAwMDAwMDAwMDA0MTkxQzAwMTAwQTY4NzIyNDcyQQorOjEwQkQyMDAwMUY3QzAwMDBBNjg3QTA0Mzg5NkMwMDAwQTY4NzIwNDVFMQorOjEwQkQzMDAwODk2QzAwMDBBNjg3QTA0MTBFNDAwMDAwMDAwMDAwNDE3MQorOjEwQkQ0MDAwMEZDMDAxMDAwMDAwMDA0MTg5QzAwMTAwOUU4N0EyNDE5MAorOjEwQkQ1MDAwOTU1MDAwMDBBRjg3MjI0ODFGN0MwMDAwMTAwMDAwNDg2QgorOjEwQkQ2MDAwOTJGNDAxMDBGRkZGMDA0ODkwODgwMTAwQUQ4NzkwNDhFMQorOjEwQkQ3MDAwOTI0MDAwMDAwMDAwMDA0MTkzQzAwMTAwMEEwMDAwQTJCMAorOjEwQkQ4MDAwNDRDOTAxMDAwMDAwNjYyMDkzQTQwMTAwMzA4MDAwMTAyNworOjEwQkQ5MDAwNDRDOTAxMDAxMjAwMDAxNEYwQzkwMTAwMDAwMDAwMTc5RQorOjEwQkRBMDAwRjBCMTAxMDAxMjAwMDAwNUUwQ0QwMTAwMzAwMDAwMTBFQworOjEwQkRCMDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDA4MworOjEwQkRDMDAwNjJERDAxMDBCNTg3QTg0MDgxMzIwMDAwQzI4NzIyNUM5NQorOjEwQkREMDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTAwNworOjEwQkRFMDAwNDhDMTAxMDBCRjg3MjI0MEUzNkQwMDAwMDAwMDAwNDYwQgorOjEwQkRGMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQkM4N0E4NDA3NQorOjEwQkUwMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwQzI4Nzg3NUM2MAorOjEwQkUxMDAwMUYwMDAwMDAwMDAwMDAxMDQ4QjEwMTAwMTE5NjAwNDExMQorOjEwQkUyMDAwMjM0MDAxMDBDNDg3QTI0NzFGN0MwMDAwNTg4OTAwMTdFNworOjEwQkUzMDAwMTBCMDAwMDAwMDAwMkYwMzQ4QjEwMTAwQzc4N0EwMDcyMQorOjEwQkU0MDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDAwMEI3OAorOjEwQkU1MDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwQ0I4NzkwRjIyMAorOjEwQkU2MDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjBERAorOjEwQkU3MDAwMTdBNDAxMDAxMDAwMDAxNDJBQzgwMTAwMDAwMDAwNTA5RgorOjEwQkU4MDAwMkJFMDAxMDAwMDAwMDBGMjJBOTQwMTAwMzA4MDAwMTAzNQorOjEwQkU5MDAwNDJDOTAxMDBENTg3MjI0MEUzNkQwMDAwMDAwMDAwNDQ0NAorOjEwQkVBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRDI4N0E4NDBBRQorOjEwQkVCMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDA4MDAwMTc0NQorOjEwQkVDMDAwMTBEQzAxMDA1ODg5MDA0MDgxQjIwMDAwQTU5NTAwNDBCNworOjEwQkVEMDAwODEzMjAxMDBEQjg3MjI1QzFGN0MwMDAwMUI4NDAwODgwQworOjEwQkVFMDAwMUNCMDAwMDA3Qzk2MDA1QzFGMDAwMTAwMDA4MDAwMDU3MworOjEwQkVGMDAwNDRDOTAxMDAwMDAwMDA0MEUxQjEwMTAwMDQwMDJEMDMyRAorOjEwQkYwMDAwNDhCMTAxMDAwMDAwMDBGMDNDQjAwMTAwMjgwMDAwMTQxRQorOjEwQkYxMDAwMDJDODAxMDAwMDAwMDAwMTM0QjAwMTAwMDAwMDJEMDUzRQorOjEwQkYyMDAwMzJCMDAxMDAyMjAwMDAwNTBBQzgwMTAwMTAwMDAwMDMyMQorOjEwQkYzMDAwNDhDOTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjgzNgorOjEwQkY0MDAwMDRCMDAxMDAwMDAwMDBGODBFQjAwMTAwMEMwMDAwQTRENQorOjEwQkY1MDAwMENDODAxMDAwMDAwMDA0MDE3QjAwMTAwMDAwMDAwNDBDNAorOjEwQkY2MDAwMjNCMDAxMDAyMTg4MjIwMTgwMzIwMDAwMDAwMDNDNDRGRgorOjEwQkY3MDAwMjNFMDAxMDAwMDAwMkVBNDgwQjAwMTAwMDAwMDAwMTBBQQorOjEwQkY4MDAwNDhDMTAxMDBGMDg3QTMwNzAyNkMwMDAwRjE4NzY4MDEzNworOjEwQkY5MDAwMUFCMDAwMDAwMDAwNjgwNzFBQjAwMTAwMDAwMDAwMEQ5MAorOjEwQkZBMDAwMDJEMDAxMDAwMDAwMDAwNUYwQjEwMTAwMDAwMDAwMEMwQgorOjEwQkZCMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMEQzRQorOjEwQkZDMDAwMEFDMDAxMDAwMzg4MjI0MDAzNkMwMDAwRkQ4NzIyNDI2MgorOjEwQkZEMDAwMjM2QzAwMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDc2NgorOjEwQkZFMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwM0Q4ODI4NDA4RAorOjEwQkZGMDAwODEzMjAwMDBGQTg3MDA0MDgxQjIwMDAwMDAwMDAwMTA4QQorOjEwQzAwMDAwODBDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDA1NQorOjEwQzAxMDAwNjJCMTAxMDBGRjg3QTg0MDIzMzAwMDAwMUI4NDAwODgyNAorOjEwQzAyMDAwMUNCMDAwMDAzRDg4MDA0MDgxQjIwMDAwMDAwMDAwMTBGQworOjEwQzAzMDAwODBDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDAyNQorOjEwQzA0MDAwNjJCMTAxMDAwNTg4QTg0MDIzMzAwMDAwMUI4NDAwODhFRAorOjEwQzA1MDAwMUNCMDAwMDAyMjAwMDAxOTQ4QzkwMTAwMDAwMDJEMTQ4NgorOjEwQzA2MDAwNDhDMTAxMDAwRjAwMDBGMjNBODgwMTAwMDAwMDAwNDJDMAorOjEwQzA3MDAwM0JFMDAxMDAwRTAwMDAxNDAyQzgwMTAwMDAwMDAwMUQ5QQorOjEwQzA4MDAwMDJDMDAxMDAxMTg4MjMxQTAyNTAwMDAwMDAwMDAwNDY3RgorOjEwQzA5MDAwMDNDMDAxMDAzRDg4MDAwMTM0QzAwMDAwMEMwMDJEMURDQworOjEwQzBBMDAwNDhDMTAxMDBGMDAwMDBGMjMwODgwMTAwMDAwMDAwNDJBOQorOjEwQzBCMDAwMzFGMDAxMDAwMDAwMDAxNDAyQjAwMTAwMDAwMDAwMUQ3QQorOjEwQzBDMDAwMDJDMDAxMDAwMDAwMDAxODAyQzAwMTAwMTk4ODIyMUFGNQorOjEwQzBEMDAwMDI1MDAwMDAzRDg4MDAwMTM0QzAwMDAwMjIwMDAwMTkxOQorOjEwQzBFMDAwNDhDOTAxMDAwMjAwMkQxNDQ4QzEwMTAwMDAwMDAwRjZGQgorOjEwQzBGMDAwMTRCMDAxMDAwMDAwMDAxRDE0RDAwMTAwMDAwMDAwMTg2MQorOjEwQzEwMDAwMTREMDAxMDAwMDAwMDAxRTI0QjAwMTAwMTIwMDAwMTcyRQorOjEwQzExMDAwMTBDODAxMDAzRDg4MDAxQTEwQzAwMDAwMDAwMDNDNDQxNworOjEwQzEyMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTBGMgorOjEwQzEzMDAwNDhDMTAxMDAyNjg4QTMxMjBFNkMwMDAwMjc4ODY4MDdGQQorOjEwQzE0MDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwMkE4ODgwMDhBNgorOjEwQzE1MDAwRjAzMTAwMDAwMTAwMDAxMTk4QzgwMTAwMDAwMDAwNENGRgorOjEwQzE2MDAwMUU5MDAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDI3MAorOjEwQzE3MDAwRTBCMTAxMDAwMDAwMDAxMDg2QzAwMTAwMDAwMDAwNDY5MAorOjEwQzE4MDAwNjFCMTAxMDAwMTFGMDA0MzYyREQwMTAwMkU4OEE4NUMzRgorOjEwQzE5MDAwMUYxMDAwMDA1QTg4MjIwRDE0NTAwMDAwNUE4ODIyMERFQQorOjEwQzFBMDAwMjQ1MDAwMDAwMDAwMDAwRDEwQzAwMTAwMzU4ODIyNDIxQworOjEwQzFCMDAwMjM2QzAwMDAzRDg4MDA0MTIzQzAwMDAwMDAwMDAwNDZDMQorOjEwQzFDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMzY4OEE4NUMwQQorOjEwQzFEMDAwMUYwMDAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMTAzRAorOjEwQzFFMDAwNDhCMTAxMDAxMTk2MDA0MzIzMzAwMTAwMEUwMDAwMEZGQQorOjEwQzFGMDAwMUU4QzAxMDAwMDAwMDA0MDIzQjAwMTAwNTk4OEEyMERGMAorOjEwQzIwMDAwMEU1MDAwMDA0ODg4MjI0NjFGN0MwMDAwMDAwMDAwNDZCNworOjEwQzIxMDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwNDY4ODIyNDA4MgorOjEwQzIyMDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTAxNAorOjEwQzIzMDAwNjJERDAxMDA0Mzg4QTg0MDgxMzIwMDAwMUI4NDAwODgzMQorOjEwQzI0MDAwMUNCMDAwMDAyMDgwMDAwMzQ2OTkwMTAwMDAwMDAwNUY0MAorOjEwQzI1MDAwRTE5MTAxMDAwMDAwMkQwNjQ4QjEwMTAwMDAwMDAwRjg0NgorOjEwQzI2MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwNEQ4ODFGRjA3NAorOjEwQzI3MDAwMEUzMDAwMDBFQTg3MDA0QzBEQzAwMDAwMDAwMDJFNUY2OQorOjEwQzI4MDAwMEY4MDAxMDBFQTg3MjMwNzE0NkMwMDAwMzAwMDAwMTBDMworOjEwQzI5MDAwNDhDOTAxMDAyNDAwMDA0MEYxOTkwMTAwMDAwMDAwMDM5QQorOjEwQzJBMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTYzNAorOjEwQzJCMDAwRjBCMTAxMDAyNDAwMDAwMDAwQzgwMTAwMDAwMDAwNDdBOAorOjEwQzJDMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNTY4OEE4NDYwQgorOjEwQzJEMDAwMUYxMDAwMDBFQTg3MDAwMzBDQjAwMDAwRUE4NzAwMEQ4MQorOjEwQzJFMDAwMThDMDAwMDA3Nzg4QTI0NDFGN0MwMDAwMDAwMDAwMTlERAorOjEwQzJGMDAwMEFCMDAxMDAyMjAwMDAwNTQ4QzkwMTAwMEEwMDJEMTRGRgorOjEwQzMwMDAwNDhDMTAxMDAwMjAwMjA0MEU1QjEwMTAwMDQwMDIwNDBDNgorOjEwQzMxMDAwRTVCMTAxMDAwRDAwMkQxRDQ4QzEwMTAwMDkwMDAwRjMyOQorOjEwQzMyMDAwMzg4ODAxMDAwRDAwMjA1MEU3QjEwMTAwMDQwMDJENDBDNQorOjEwQzMzMDAwM0ZCMDAxMDAwMDAwMDBGNDMyQjAwMTAwMDQwMDIwNDBEMgorOjEwQzM0MDAwRTFCMTAxMDAyMjAwMDAwNTQ4QzkwMTAwMDAwMDJEMTRFMAorOjEwQzM1MDAwNDhDMTAxMDAwMjAwMDAxRDk0RjQwMTAwMDAwMDAwNDBFQgorOjEwQzM2MDAwOTFCMDAxMDA2Qzg4QTBGQzkwNDAwMDAwMDAwMDAwNDFFQQorOjEwQzM3MDAwOTFDMDAxMDA2QTg4QTI0MTk1NTAwMDAwMDQ4MDAwMDUyOAorOjEwQzM4MDAwNDRDOTAxMDAwMDAwMDA0OEYwQjEwMTAwMDAwMDAwMTg5RAorOjEwQzM5MDAwNDhDMTAxMDAwMjAwMDAxODk0RjQwMTAwMDAwMDJEMThBQgorOjEwQzNBMDAwOTBCMDAxMDA3NDg4QTBGQzkwNDAwMDAwMDAwMDAwNDFBMworOjEwQzNCMDAwOTFDMDAxMDA3Mjg4QTI0MTk1NTAwMDAwMDAwMDAwNDgyMQorOjEwQzNDMDAwRTBCMTAxMDAxMDAwMjA0MEU1QjEwMTAwMjIwMDAwMDVBRAorOjEwQzNEMDAwNDhDOTAxMDAwMDAwMDAxNDQ4QzEwMTAwMDQ4MDAwMDVBNAorOjEwQzNFMDAwNDJDOTAxMDAwMDAwMDBGODgwQjAwMTAwMDAwMDAwRjAyOAorOjEwQzNGMDAwMTZDMDAxMDA3Qzg4NDIzMDNEMDcwMDAwMDAwMDAwOUUwRQorOjEwQzQwMDAwODVCMDAxMDAwMDAwMUE0MTNEQzMwMTAwMDQwMDIwNDIzNAorOjEwQzQxMDAwRUNCMTAxMDAwMDAwMDAxRTgyQjAwMTAwMDIwMDJFMURFMAorOjEwQzQyMDAwODJDMDAxMDAwMDAwNjYxODgyQzAwMTAwMDAwMDAwNDJDNgorOjEwQzQzMDAwODBDMDAxMDA4Njg4QTA0MTgwNDQwMDAwMDAwMDAwNDFDNworOjEwQzQ0MDAwODFDMDAxMDAxMDAwMDA0MDkyRjQwMTAwMEEwMDJFMzA2QgorOjEwQzQ1MDAwODE4NDAxMDA4QTg4OTA0MDkyNDAwMDAwMDAwMDAwNDFFMQorOjEwQzQ2MDAwOTNDMDAxMDAwMDAwNjYyMDkzQTQwMTAwMDAwMDAwMUQ5RAorOjEwQzQ3MDAwNDhDMTAxMDAwNDAwMjAxOUU4QjEwMTAwMDAwMDAwMUVCRAorOjEwQzQ4MDAwMTZDMDAxMDA5MDg4QTAxOTE2NDQwMDAwMDAwMDAwNDE2OQorOjEwQzQ5MDAwMTdDMDAxMDAwRDAwMkYxRTMyQzAwMTAwOTU4OEEyNDA3OAorOjEwQzRBMDAwMTU2QzAwMDA5NDg4QTAxQzE2NDAwMDAwMDAwMDAwNDE5QworOjEwQzRCMDAwMTdDMDAxMDAwMDAwNjNGMzM4OTQwMTAwMTAwMDAwMDU2QworOjEwQzRDMDAwNDhDOTAxMDAwNDAwMkUxRTk4QjAwMTAwMDAwMDYwMUE0NworOjEwQzREMDAwOThDMDAxMDAwQzAwMjA0MEUxQjEwMTAwQTM4ODIyNDY3MQorOjEwQzRFMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTAwQgorOjEwQzRGMDAwNDJDOTAxMDBBMTg4MjI0MEUzNkQwMDAwMDAwMDAwNDcwRQorOjEwQzUwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOUU4OEE4NDA3QQorOjEwQzUxMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMjA4MDAwMDNEMgorOjEwQzUyMDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMzA4MDAwMTA5OQorOjEwQzUzMDAwNDRDOTAxMDAxMjAwMDAxQUYwQzkwMTAwMDAwMDAwMTdGMAorOjEwQzU0MDAwRjBCMTAxMDAxMDAwMDAwNUUwQzkwMTAwMzAwMDAwMTA0QQorOjEwQzU1MDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDBEQgorOjEwQzU2MDAwNjJERDAxMDBBOTg4QTg0MDgxMzIwMDAwQjc4ODIyNUMwMgorOjEwQzU3MDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTA1RgorOjEwQzU4MDAwNDhDMTAxMDBCMzg4MjI0MEUzNkQwMDAwMDAwMDAwNDY2RQorOjEwQzU5MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQjA4OEE4NDBEOAorOjEwQzVBMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwNUM4OQorOjEwQzVCMDAwMUY4MDAxMDAwMDAwMDAxMDQ4QjEwMTAwMTE5NjAwNDFFOQorOjEwQzVDMDAwMjM0MDAxMDAwRTAwMDAwRjFFOEMwMTAwMjAwMDJGMDVFQgorOjEwQzVEMDAwNDhCMTAxMDAwMDAwMDAwQkU0QjEwMTAwMDAwMDAwNTA3MAorOjEwQzVFMDAwMTdGMDAxMDBCQzg4OTBGMjE2NDAwMDAwMDAwMDAwNDFFNgorOjEwQzVGMDAwMTdDMDAxMDAwMDAwNjYyMDE3QTQwMTAwMTAwMDAwMTRGRAorOjEwQzYwMDAwMkFDODAxMDAwMDAwMDAxRDJBQzAwMTAwMDAwMDAwNTBERgorOjEwQzYxMDAwMkJFMDAxMDAwMDAwMDBGMjJBOTQwMTAwMzA4MDAwMTA5RAorOjEwQzYyMDAwNDJDOTAxMDBDNzg4MjI0MEUzNkQwMDAwMDAwMDAwNDRCOQorOjEwQzYzMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQzQ4OEE4NDAyMworOjEwQzY0MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDA4MDAwMTdBRAorOjEwQzY1MDAwMTBEQzAxMDBFNDg4MjI0MDE1NkMwMDAwQ0Y4OEEyNDQ2MQorOjEwQzY2MDAwMUY3QzAwMDAwMDAwMDA0NDFGOTAwMTAwQ0U4ODIyOUYyNAorOjEwQzY3MDAwMTM2QzAwMDAwMjAwMDA4ODFDQ0MwMTAwNkI4NDAwNDA5OQorOjEwQzY4MDAwODFCMjAwMDAwMDAwMDA0MTNGQzMwMTAwNjY5OTAwNDBGNAorOjEwQzY5MDAwODEzMjAxMDBEMjg4QTI0MTg3N0MwMDAwMDAwMDAwMUU4OAorOjEwQzZBMDAwM0VDMDAxMDBFNDg4MjI0MDE1NkMwMDAwRDU4ODIwMUVBMQorOjEwQzZCMDAwMTQ2QzAwMDAwMDAwMDAwQTNDQjAwMTAwREQ5NTAwMUU3MworOjEwQzZDMDAwMjQzMDAxMDBEQTg4MjIwODJFMzAwMDAwMDAwMDAwNTJEOQorOjEwQzZEMDAwMTFDMDAxMDAwMDAwMDAxQTEwQzAwMTAwM0Q4ODAwNDA5OAorOjEwQzZFMDAwMTdCMDAwMDA2Qjg0MDA4ODFDQjAwMDAwREQ5NTAwNDA4RQorOjEwQzZGMDAwODEzMjAxMDBENzg4QTIwODJFMzAwMDAwODA4MDAwQTY3OQorOjEwQzcwMDAwMDRCMDAxMDAwNjAwMDA0MDg3OTgwMTAwMDA4MDAwMDM4QgorOjEwQzcxMDAwNDQ5OTAxMDAwNDAwMjIwNEUwMzEwMDAwNTU5OTAwMUZGMworOjEwQzcyMDAwOEMzMDAxMDAwMDAwMDA0MDBGQjAwMTAwMDU4QTAwNUM2MQorOjEwQzczMDAwMUY5MDAwMDAwMDgwMDAwMzQ0OTkwMTAwMDQwMDIyMDRCRgorOjEwQzc0MDAwRTAzMTAwMDA2Njk5MDA0MDgxMzIwMTAwRTk4OEEyNDE5MQorOjEwQzc1MDAwODc3QzAwMDBFQTg4MDAxRTNFQzAwMDAwMDAwMDAwMUYyOQorOjEwQzc2MDAwOENCMDAxMDAwMDAwMDA0MDA1QjAwMTAwNTU5OTAwNDA2OAorOjEwQzc3MDAwMEYzMDAxMDAwNThBMDA1QzFGOTAwMDAwRjU4ODlDMEZCNworOjEwQzc4MDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTA2QgorOjEwQzc5MDAwNDJDOTAxMDBGNTg4MjI0MEUzNkQwMDAwMDAwMDAwNDcxNworOjEwQzdBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRjI4OEE4NDA4NAorOjEwQzdCMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwRkE4ODIyMDcyOAorOjEwQzdDMDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDdCOQorOjEwQzdEMDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUZGNQorOjEwQzdFMDAwRTE5MTAxMDAwNDAwMkUwMzQ4QjEwMTAwRkQ4ODIwOTQ2RQorOjEwQzdGMDAwMTU2QzAwMDBGRTg4MDA5NEUxQjEwMDAwMDAwMDAwMEEwMgorOjEwQzgwMDAwRTBCMTAxMDAwMTg5MjI0MDMxNkMwMDAwMEMwMDAwNDBDMQorOjEwQzgxMDAwNDU5OTAxMDAwMDAwNjAxODM4OTYwMTAwMDAwMDJFMTBCNAorOjEwQzgyMDAwNDhCMTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDgxMworOjEwQzgzMDAwRjBCMTAxMDAwMDAwMDAwM0UwQjEwMTAwMDAwMDAwNDQ3RAorOjEwQzg0MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwMDY4OUE4NDAzQQorOjEwQzg1MDAwMjMzMDAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDJENTIxMworOjEwQzg2MDAwMTFDMDAxMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwRjhEOQorOjEwQzg3MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjg0QQorOjEwQzg4MDAwMEVCMDAxMDAwQzAwMDBBNDBDQzgwMTAwMDAwMDNDNDRFNAorOjEwQzg5MDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTA3QgorOjEwQzhBMDAwNDhDMTAxMDAxNDg5QTMxMjBFNkMwMDAwMTU4OTY4MDdBNQorOjEwQzhCMDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwMDAwMDAwMTA1OQorOjEwQzhDMDAwODZDMDAxMDAwMDAwMDAwOEYwQjEwMTAwMDAwMDAwMEM2QgorOjEwQzhEMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwNDZEQworOjEwQzhFMDAwNjFCMTAxMDAwMTFGMDA0MzYyREQwMTAwMUE4OUE4NUNFQgorOjEwQzhGMDAwMUYxMDAwMDA0Qjg5MjIwRDE0NkMwMDAwMjA4OTIyMERBRQorOjEwQzkwMDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwMjQ4OTAwMERGRgorOjEwQzkxMDAwMjREMDAwMDAwMDAwMDA0MTJCQzAwMTAwMDAwMDAwMTVFMQorOjEwQzkyMDAwQTJCMTAxMDAxMDAwMDAyMDEwQzgwMTAwRjAwNzAwNDA3MworOjEwQzkzMDAwMjU5ODAxMDAyNjg5MjI0MjIzNkMwMDAwMkQ4OTAwNDFBMAorOjEwQzk0MDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA1QgorOjEwQzk1MDAwNjJERDAxMDAyNzg5QTg1QzFGMDAwMDAwMUI4NDAwODg5RAorOjEwQzk2MDAwMUNCMDAwMDAwMDAwMDAxMDQ4QjEwMTAwRDc5NDAwNDM0MworOjEwQzk3MDAwMjMzMDAxMDAwMDAwMDA0MDIzQjAwMTAwMDQwMDIyMEQxQworOjEwQzk4MDAwMTQ1MDAwMDA0QTg5QTIwRDBFNTAwMDAwMzk4OTIyNDYzOQorOjEwQzk5MDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTA1NgorOjEwQzlBMDAwNDJDOTAxMDAzNzg5MjI0MEUzNkQwMDAwMDAwMDAwNDdDMgorOjEwQzlCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMzQ4OUE4NDAyRgorOjEwQzlDMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMjA4MDAwMDMxRQorOjEwQzlEMDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDAwMDJEMDY3MgorOjEwQzlFMDAwNDhCMTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjg5NAorOjEwQzlGMDAwMDRCMDAxMDAzRTg5MUZGMDBFMzAwMDAwMEY4OTAwNEM4QQorOjEwQ0EwMDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwMEY4OTIzMDc3QQorOjEwQ0ExMDAwMTQ2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMjQwMDAwNDBFMAorOjEwQ0EyMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDBENgorOjEwQ0EzMDAwRjBCMTAxMDAwMDAwMDAxNkYwQjEwMTAwMjQwMDAwMDA3OAorOjEwQ0E0MDAwMDBDODAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQ3RgorOjEwQ0E1MDAwNjJERDAxMDA0Nzg5QTg0NjFGMTAwMDAwMEY4OTAwMDMwRQorOjEwQ0E2MDAwMENCMDAwMDAwRjg5MDAwRDE4QzAwMDAwNTQ4OTIyNUMzMgorOjEwQ0E3MDAwMUY3QzAwMDAwMDAwMDA1QzFGODAwMTAwMDAwMDNDNDQ5RgorOjEwQ0E4MDAwMjNFMDAxMDAwMDAwMkQxMDQ4QzEwMTAwNTQ4OTIyNDAxQworOjEwQ0E5MDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA5RAorOjEwQ0FBMDAwNjJERDAxMDA1MTg5QTg0MDgxMzIwMDAwMUI4NDAwODhBQQorOjEwQ0FCMDAwMUNCMDAwMDAwMDAwMDAxMDQ4QjEwMTAwRDc5NDAwNDFGNAorOjEwQ0FDMDAwMjM0MDAxMDAwMDAwMDAxNzEwQjAwMTAwNTg4OTAwNDAwOQorOjEwQ0FEMDAwMkJCMDAwMDAwMDgwMDAwMzQ0OTkwMTAwMDAwMDAwMDQxNgorOjEwQ0FFMDAwRTBCMTAxMDA1RDg5MjI5RjEzNkMwMDAwMDIwMDAwODgwNAorOjEwQ0FGMDAwMUNDQzAxMDA2Qjg0MDA0MDgxQjIwMDAwNjY5OTAwNDFBQgorOjEwQ0IwMDAwM0Y0MzAxMDAwMDAwMDA0MDhEQjAwMTAwMDAwMDAwNDBFNAorOjEwQ0IxMDAwMDVCMDAxMDA1NTk5MDA0MDBGMzAwMTAwMUI4QTAwNUNGMAorOjEwQ0IyMDAwMUY5MDAwMDAxMDAwMDAwMDBFRjQwMTAwMDAwMDAwM0EwOQorOjEwQ0IzMDAwMDE4NDAxMDAwMzAwMDAwNzFBRjQwMTAwMjE5NjAwMDc5OAorOjEwQ0I0MDAwMTYzMDAxMDA2Qzg5MjI0MTgxNkMwMDAwNkE4OTIyNDIwMgorOjEwQ0I1MDAwODE2QzAwMDAxQjg0MDA4ODFDQjAwMDAwNkI4OTIyNUY4MAorOjEwQ0I2MDAwMEY3QzAwMDAwNThBMDA0MDBGQjAwMDAwNzQ4OUEyNUFCMworOjEwQ0I3MDAwMUY3QzAwMDA5Qjk1MDA0MDgxMzIwMTAwNzQ4OTIyMjBCNworOjEwQ0I4MDAwODU2QzAwMDA3MTg5OUMwRjgwMzIwMDAwMUI4NDAwODgzNgorOjEwQ0I5MDAwMUNCMDAwMDA3Qzk2MDA1QzFGMDAwMTAwOUI5ODAwNDJDNgorOjEwQ0JBMDAwNjEzMTAxMDAxQjg0MDA4ODFDQjAwMDAwRTY5OTAwMDc3OQorOjEwQ0JCMDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjA5MgorOjEwQ0JDMDAwMThCMDAxMDAwMDAwMDAwMDgwQjAwMTAwQUU4QUEyNUYzMgorOjEwQ0JEMDAwODE2QzAwMDBBODAwMkQ0MzE5ODAwMTAwMzcwMDJERjA2MgorOjEwQ0JFMDAwMjRCMDAxMDAwNDAwMDBGMzhFRjQwMTAwMEYwMDAwRjNGNAorOjEwQ0JGMDAwOTA4ODAxMDA4Mzg5MjI0ODhFNkMwMDAwMzYwMDAwNDAzNgorOjEwQ0MwMDAwNDM5OTAxMDA1ODAwM0Q0M0U3RTEwMTAwODM4OTFGRjA4QgorOjEwQ0MxMDAwMjQ2QzAwMDA4Mjg5MjM0MThGNkMwMDAwQUU4QTAwNDc5QgorOjEwQ0MyMDAwODFCMDAwMDBBRThBMDA0ODgxQjAwMDAwNDAwMDAwNDBBMgorOjEwQ0MzMDAwNDM5OTAxMDBCMDAwMkRGMDE0QjAwMTAwODg4OTIyMEE0OAorOjEwQ0M0MDAwOTA0MDAwMDAzOTk5MDA0MDkxMzAwMTAwQUU4QUEyNDAyNgorOjEwQ0M1MDAwODAzMjAwMDBCMDAwMkQ0NTgxQjAwMTAwOTQ4OTIyRjA5RgorOjEwQ0M2MDAwMkMzMDAwMDBBMzAwMkQzMDgzQjAwMTAwQUMwMDJERjM2OAorOjEwQ0M3MDAwODJFMDAxMDA4RTg5QTM0MTJDNkMwMDAwMDAwMDAwMTZBOAorOjEwQ0M4MDAwODJCMDAxMDA5ODAwMkRGMDgyQzAwMTAwODgwMDJERjBENAorOjEwQ0M5MDAwODJEMDAxMDAwMDAwMDBGMjk4RTgwMTAwQUU4QTIwNEMyQQorOjEwQ0NBMDAwODI2QzAwMDA3QzAwMkQ0MTk4RTgwMTAwQUU4QTIwRjBFMworOjEwQ0NCMDAwOTg2QzAwMDAwNThBMjIwQTgwMzIwMDAwNDAwMjAwMENCNQorOjEwQ0NDMDAwN0U4OTAxMDAwNThBQTY0MDgxMzIwMDAwQUU4QTAwNDlCMworOjEwQ0NEMDAwODFCMDAwMDAyMDAwMDBBNjgwQjAwMTAwOUM4OTIyNDNBMgorOjEwQ0NFMDAwMjE2RjAwMDAxMzgwMDA0MDgwREMwMTAwOUQ4OTAwNDAxRQorOjEwQ0NGMDAwODFCMjAwMDAxQTgwMDA0MDgwREMwMTAwOUQ4OUEyNUVBNAorOjEwQ0QwMDAwMEI3RDAwMDAwMDAwMDA0MDA4QjEwMTAwOUY4OTlGODU1NQorOjEwQ0QxMDAwODAzMjAwMDBBMzg5MDA0MDgxQjIwMDAwNUY4NDIyNDA3RAorOjEwQ0QyMDAwNTc3RDAwMDAwMTAwMDA0MDU3OTkwMTAwQTM4OTQyNDA0RgorOjEwQ0QzMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwNDk4NDFBNUI5MworOjEwQ0Q0MDAwNjk5MzAwMDA3QjAwMDA0MDYxOTkwMTAwQTY4OUE4QjFBOQorOjEwQ0Q1MDAwODAzMDAwMDBDRjg5MUQ0MDgwMzIwMDAwQzA4OTIyNDAxMQorOjEwQ0Q2MDAwQUY2RjAwMDBDMDg5MjI1QjgxN0MwMDAwMDQwMDIyNUQ1RgorOjEwQ0Q3MDAwNzM3RDAwMDA3RDAwMDA0MDYxOTkwMTAwQUM4OUE4QjE3RAorOjEwQ0Q4MDAwOTQzMDAwMDAwMDAwMDA1RjYxQjEwMTAwMDAwMDAwNEEyMworOjEwQ0Q5MDAwNjJCMTAxMDBBRjg5QTg0MDgxMzIwMDAwQjE4OTQzNDBFRgorOjEwQ0RBMDAwODEzMjAwMDBCRjg5MjI1NzczN0QwMDAwNzcwMDAwNDA2OAorOjEwQ0RCMDAwNjE5OTAxMDBCMzg5QThCMTk0MzAwMDAwNzcwMDAwNDA2OAorOjEwQ0RDMDAwNjE5OTAxMDBCNTg5QThCMTk2MzAwMDAwMDAwMDAwNDhDMworOjEwQ0REMDAwNjFCMTAxMDAwMDAwMDA0QTYyQjEwMTAwQjg4OUE4NEFBRgorOjEwQ0RFMDAwODAzMzAwMDBCRDg5MjI1Rjk1N0MwMDAwMDAwMDAwNEI2RAorOjEwQ0RGMDAwNjJCMTAxMDBCQjg5QTg0QkFDMzMwMDAwMDAwMDFCQTU0OQorOjEwQ0UwMDAwODJCMzAxMDBDMDg5MDBCRTgzQzMwMDAwMDAwMDFCNDA0NAorOjEwQ0UxMDAwODFCMzAxMDA0MDE4MDA0MDQ5OTkwMTAwMDQwMDAwQTZCOAorOjEwQ0UyMDAwODZCMDAxMDBDRDg5QTI0MDg2MDQwMDAwMUI4NDlDNDA4RQorOjEwQ0UzMDAwODAzMjAwMDBGRkZGMDA0MDg4ODgwMTAwRTk4OTAwNTAyRgorOjEwQ0U0MDAwNDczMTAxMDAzNjAwMDA0NDg4Q0MwMTAwQzk4OTUyNDBCNgorOjEwQ0U1MDAwODEzMjAwMDBFOTg5MDA0MDQ3MzEwMTAwMDAwMDAwNDFCMworOjEwQ0U2MDAwODlCMDAxMDBFOTg5MDA0ODQ3MzEwMTAwRTk4OTAwMDVERQorOjEwQ0U3MDAwNDczMTAxMDAxQjg0MDA0MDgxQjIwMDAwMjgwMDAwNDBCRgorOjEwQ0U4MDAwNDc5OTAxMDAxQjg0MDA0MUUxQzEwMDAwNzgxODAwNDA2RgorOjEwQ0U5MDAwNDk5OTAxMDBENjg5MjI1NDgxN0MwMDAwRDE4OTQyNDAwMQorOjEwQ0VBMDAwODEzMjAwMDAwMDgyMDBCNDY5REYwMTAwMDAwMDFBNDRGMgorOjEwQ0VCMDAwOTM5MzAxMDAyODAwMDA0MDQ3OTkwMTAwRTk4OTAwNDE0RgorOjEwQ0VDMDAwODkzMDAxMDBFNDg5MEY0MDgwMzIwMDAwRkY3RjAwNDA3QworOjEwQ0VEMDAwODg4ODAxMDBFOTg5MDA1MDQ3MzEwMTAwMzYwMDAwNDQ4QworOjEwQ0VFMDAwODhDQzAxMDBEQzg5OTk0MDgwMzIwMDAwMDAwMDAwNDhCNQorOjEwQ0VGMDAwODlEMDAxMDBERTg5OUI0MDgwMzIwMDAwMDAwMDAwNEM5OAorOjEwQ0YwMDAwODlEMDAxMDBFMDg5MUY0NDgwMzIwMDAwRTk4OTAwNDA5NworOjEwQ0YxMDAwNDczMTAxMDAwMDAwMDA0MTg5QjAwMTAwRTk4OTAwNDg2MworOjEwQ0YyMDAwNDczMTAxMDBFOTg5MDA1ODQ3MzEwMTAwMUI4NDAwNDA2NgorOjEwQ0YzMDAwODFCMjAwMDAxMDAwMDA0MDg2RjQwMTAwNkYwMDAwNDM0MQorOjEwQ0Y0MDAwODY4ODAxMDAxQjg0MjYwNTQ3MzEwMDAwRTk4OTAwNDFERAorOjEwQ0Y1MDAwODkzMDAxMDAxQjg0MDA0MDgxQjIwMDAwMDAwMEEwNDQyMQorOjEwQ0Y2MDAwRjA0MTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDgwNDE1QQorOjEwQ0Y3MDAwRTFDMTAxMDAwNDAwMDBDQjgxQzgwMTAwRUY4OTIyNDAxQgorOjEwQ0Y4MDAwRjI3RjAwMDA4MTgwMDA2Rjk3MzMwMTAwRjE4OTIyNDAxOQorOjEwQ0Y5MDAwNzM3RDAwMDA5QjgwMDA0MThCQjMwMDAwRUM4OTIyNTkxNworOjEwQ0ZBMDAwNzM3RDAwMDA3OTAwMDA0MDYxOTkwMTAwRUM4OTI4QjE4RgorOjEwQ0ZCMDAwN0UzMTAwMDBGMjg5MDA0MDgxQjIwMDAwMDQwMDIyQzBFRQorOjEwQ0ZDMDAwOTUzMDAwMDAwMDAwMDBENjk3QjAwMTAwRkE4OTIyNUQ3QworOjEwQ0ZEMDAwNzM3RDAwMDA3RDAwMDA0MDYxOTkwMTAwRjg4OUE4QjFDRgorOjEwQ0ZFMDAwODAzMDAwMDAwMDAwMDA1RTdGODMwMTAwMDAwMDAwQkY3MQorOjEwQ0ZGMDAwQzVCMTAxMDAwNDAwMDA0MDgxOTgwMTAwMjUwMTAwNDBGNgorOjEwRDAwMDAwODEzMjAxMDBGRDg5QTI0MTgxNTAwMDAwRkY4OTQzNUYwOAorOjEwRDAxMDAwN0YxMzAwMDAyNjAxMDBCRkM1MzEwMTAwMDAwMDAwNUY0MgorOjEwRDAyMDAwN0Y4MzAxMDAwMDAwMDA1RTdGOTMwMTAwOEI5ODAwQkZBQQorOjEwRDAzMDAwQzUzMTAxMDAxQjg0MDA0MDgxQjIwMDAwMEM4QTlDMEZBNgorOjEwRDA0MDAwODAzMjAwMDAwMDgwMDAxMDQyQzkwMTAwMEM4QTIyNDA5QQorOjEwRDA1MDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTBEOAorOjEwRDA2MDAwNjJERDAxMDAwOThBQTg0MDgxMzIwMDAwMUI4NDAwODgyQgorOjEwRDA3MDAwMUNCMDAwMDA3Nzk1MjIwMjgwMzIwMDAwMEQ4QTQyNDBFOQorOjEwRDA4MDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwNzc5NTFBMDI1QQorOjEwRDA5MDAwNjg5NzAwMDAxNzhBOUMwRjgwMzIwMDAwMDA4MDAwMTAwMworOjEwRDBBMDAwNDJDOTAxMDAxNzhBMjI0MEUzNkQwMDAwMDAwMDAwNDVEQworOjEwRDBCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMTQ4QUE4NDA0NworOjEwRDBDMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwODE5NTIyMDI4MAorOjEwRDBEMDAwODAzMjAwMDAxODhBNDI0MDgxMzIwMDAwMDAwMDAwNDQ4MworOjEwRDBFMDAwOTM5MzAxMDA4MTk1MUEwMjY4OTcwMDAwMjI4QTlDMEY5MQorOjEwRDBGMDAwODAzMjAwMDAwMDgwMDAxMDQyQzkwMTAwMjI4QTIyNDBENAorOjEwRDEwMDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAyNworOjEwRDExMDAwNjJERDAxMDAxRjhBQTg0MDgxMzIwMDAwMUI4NDAwODg2NAorOjEwRDEyMDAwMUNCMDAwMDA2Rjg0MjIwMjgwMzIwMDAwMjM4QTQyNDAzQgorOjEwRDEzMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBMDJCNQorOjEwRDE0MDAwNjg5NzAxMDA2Rjg0MDA0MDA1QjAwMDAwMDA4MDAwQTZEMQorOjEwRDE1MDAwNTZCMTAxMDA1Njk1MkY0MDA1QjAwMTAwNzM4QUEyNDBEOAorOjEwRDE2MDAwRTc2RDAwMDBCODk0Mjk0MUU3QjEwMTAwMDAwMDAwNTRDOAorOjEwRDE3MDAwRUY5MzAxMDAwMDAwMDBGMjBFQjAwMTAwMjkwMDAwNDAxMgorOjEwRDE4MDAwMEQ5ODAxMDAwOTAwMDAwNzEyRTQwMTAwMDAwMDAwQTc0QgorOjEwRDE5MDAwMTNDMDAxMDAwMzAwMDAwNzFBRjQwMTAwMDcwMDAwMDc5NAorOjEwRDFBMDAwMTY4ODAxMDBGRkZGMDAxMDM0RDgwMTAwMDAwMDAwMDNDMgorOjEwRDFCMDAwMzQ5NDAxMDAwMDAwMDA0MDIzQjAwMTAwMjAxODAwNDAxQQorOjEwRDFDMDAwMTE5ODAxMDAwMEI1MDAwRDQyQzkwMTAwNTc4QTIyMEJEOQorOjEwRDFEMDAwRTY3RDAwMDAzODhBNDQ0MDgxMzIwMDAwRkZGRjAwMDdFRQorOjEwRDFFMDAwODQ4OTAxMDAzRjhBMDVDMjI0MzAwMDAwNjc5ODAwNDAwRQorOjEwRDFGMDAwODEzMjAxMDAwMDAwMkQwNTQ4QjEwMTAwNzQ4QTFDRjA0NQorOjEwRDIwMDAwMTgzMDAxMDA1NzhBMDA0MDgxQjIwMDAwMDAwMDFDNDAyNQorOjEwRDIxMDAwODFCMjAxMDA0RThBQTA0ODIzNkMwMDAwMDAwMDAwNTAzQgorOjEwRDIyMDAwMzVEMDAxMDAwMDgwMDAxQTQyQzkwMTAwNDg4QTIyNDAxRQorOjEwRDIzMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMUFFRgorOjEwRDI0MDAwNjJERDAxMDA0NThBQTg0MDgxMzIwMDAwMUI4NDAwODgwRAorOjEwRDI1MDAwMUNCMDAwMDAyMDk4MDA0MDQzOTkwMTAwNzQ4QTAwRjgzNworOjEwRDI2MDAwMTgzMDAxMDA0OThBQTI0MTIzNTAwMDAwRkZGRjAwMTAzRQorOjEwRDI3MDAwMzREODAxMDAwMDAwMDAwMzM0OTQwMTAwMjAxODAwNDA1RAorOjEwRDI4MDAwMTE5ODAxMDAwMDAwMkUxQTQ4QjEwMTAwMDAwMDAwNDQ2RQorOjEwRDI5MDAwRjFCMTAxMDAwMDAwMDAwOEYwQjEwMTAwMDAwMDAwNDJGRgorOjEwRDJBMDAwNjFCMTAxMDAyMDAwMDAxQTYyREQwMTAwNTI4QUE4MDk2NAorOjEwRDJCMDAwRTAzMTAwMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNTBFOAorOjEwRDJDMDAwMzVDMDAxMDAwMDAwMDA0NDExQzAwMTAwNjM4QTIyNDEwMgorOjEwRDJEMDAwMEQ1MDAwMDAwMDAwMDA0MTBGQzAwMTAwNUY4QUEwQUFBRAorOjEwRDJFMDAwMEY2QzAwMDAwMDAwMDA0MTBGQjAwMTAwMDkwMDAwMDdCMgorOjEwRDJGMDAwMTJFNDAxMDAwMDAwMDBBNzEzQzAwMTAwMDAwMDAwNDA3QworOjEwRDMwMDAwMUJCMDAxMDAzNjhBMDA0MTE3QjAwMDAwMDAwMjAwMDk3RQorOjEwRDMxMDAwMTJDODAxMDAzNjhBODM0MTE3NDAwMDAwMDAwMDAwNDAxNworOjEwRDMyMDAwMTdCMDAxMDAzNjhBMDA0MTFCQzAwMDAwNkU4QTIzNDBGRQorOjEwRDMzMDAwMjM2QzAwMDAwMDAwMDA1MDM1RDAwMTAwMDA4MDAwMUE2RQorOjEwRDM0MDAwNDJDOTAxMDA2QjhBMjI0MEUzNkQwMDAwMDAwMDAwNDJFOAorOjEwRDM1MDAwNjFCMTAxMDA0MDAwMDAxQTYyREQwMTAwNjg4QUE4NDA0NgorOjEwRDM2MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMjA5ODAwNDAxRgorOjEwRDM3MDAwNDM5OTAxMDA3NDhBMDBGODE4MzAwMTAwNkM4QUEyNDFCOAorOjEwRDM4MDAwMjM1MDAwMDAwMDAwMDA0MTBGQzAwMTAwNzE4QUEwQUFENAorOjEwRDM5MDAwMEY2QzAwMDAwMDAwMDA0MTBGQjAwMTAwQjg5NDIwMDc5RQorOjEwRDNBMDAwRTRCMTAxMDA1Njk1MjA0MEU3QjEwMTAwMDU4QTAwNDAzNAorOjEwRDNCMDAwMEZCMDAwMDBGRkZGMDAwQzgwRDgwMTAwQzAwMjAwMEM3RAorOjEwRDNDMDAwN0U4OTAxMDA4NjhBMjY1NDYxMzEwMDAwN0M4QTg3MENBMAorOjEwRDNEMDAwODAzMjAwMDAwRjAwMDA0MDYyOTkwMTAwN0M4QTI4NDBFMgorOjEwRDNFMDAwODEzMjAwMDA3QzhBQTI1NDc3N0QwMDAwNzg4QTAwNDA1OAorOjEwRDNGMDAwODFCMjAwMDA4MThBMjI0NjE5N0MwMDAwMEQwMDAwNDBBNQorOjEwRDQwMDAwNjI5OTAxMDAwMDAwQTg0MDgxQjIwMDAwMDAwMEEyNTQwRgorOjEwRDQxMDAwNzc3RDAxMDA3RDhBMDA0MDgxQjIwMDAwODY4QTIyNDkyMgorOjEwRDQyMDAwMTk3QzAwMDAwRTAwMDA0MDYyOTkwMTAwMDAwMEE4NDAzNQorOjEwRDQzMDAwODFCMjAwMDAwMDAwQTI1NDc3N0QwMTAwODE4QTAwNDA4MworOjEwRDQ0MDAwODFCMjAwMDAxMDAwMDA0MDYyOTkwMTAwMDAwMEE4NDA3NQorOjEwRDQ1MDAwODFCMjAwMDAwMDAwQTI1NDc3N0QwMTAwODY4QTAwNDA1RQorOjEwRDQ2MDAwODFCMjAwMDAzMDk0MkY1NUYxOTMwMTAwMDA0MDAwQTZENgorOjEwRDQ3MDAwNTZCMTAxMDA2Rjg0QTI0MUU1NTEwMDAwNjQwMDAwNDBGNAorOjEwRDQ4MDAwRTU5OTAxMDA4RThBNDI0MDgxMzIwMDAwOTE4QUEyOTM4MAorOjEwRDQ5MDAwNTc2RjAwMDAwMDAwMDA0MTU3QzMwMTAwMDAwMDFBQUJBNQorOjEwRDRBMDAwMjdCMzAxMDA2Rjg0MjI1MEZEN0YwMDAwNkY4NDIyNTE1QQorOjEwRDRCMDAwRkQ3RjAwMDA2Rjg0QTI0MTFENTMwMDAwNTA0NjAwNDBENAorOjEwRDRDMDAwMUQ5QjAxMDAzNDgyMDA0MDgxMzIwMTAwMEUwMDAwNDhBMworOjEwRDREMDAwQjJDQjAxMDBGQzgxMDA0MDQ5MzEwMTAwOUQ4QTIyNDAwRAorOjEwRDRFMDAwQjU2RjAwMDAwRTAwMDA0OEIyQ0IwMTAwRkY4MTAwNDE4MworOjEwRDRGMDAwQjU1MzAxMDA2Rjg0MDA0MDgxQjIwMDAwMDAwMDAwNTE2QworOjEwRDUwMDAwRkQ4MzAxMDA0MDE2MDA0MDQ1OTkwMTAwMzU4MjAwNDAyRQorOjEwRDUxMDAwNDkzMTAxMDAxRTAwMDA0OEIyQ0IwMTAwRkM4MTAwNDBFRgorOjEwRDUyMDAwODEzMjAxMDAwMDAwMDBEQTkxQzAwMTAwMDQwMDAwNDhDRgorOjEwRDUzMDAwQjJDQjAxMDBGRjgxMDA0MEI1MzMwMTAwNjAxNjIwNDBFRQorOjEwRDU0MDAwRTVCMTAxMDBEQjgyMDA0MEI1MzMwMTAwMDgwMDAwNDg2RQorOjEwRDU1MDAwQjJDQjAxMDBGRkZGMDA0QUI0OEIwMTAwRkY4MTAwNDAwNQorOjEwRDU2MDAwODEzMjAxMDAwQTAwMDA0OEIyQ0IwMTAwMTAwMDAwNEFERAorOjEwRDU3MDAwQjRGNzAxMDBGRjgxMDA0MDgxMzIwMTAwNkY4NDAwNDA1OAorOjEwRDU4MDAwODFCMjAwMDAwNTAwMDA0MDQzOTkwMTAwMDAwMDAwRjM1MworOjEwRDU5MDAwMDhCMDAxMDAwNDAwMjA0MEU2QjEwMTAwMDMwMDAwNDA5MworOjEwRDVBMDAwOTZFNDAxMDAwMDAwMDAwNDk2QzAwMTAwQjQ4QTAwNEIxQworOjEwRDVCMDAwMTBDOTAwMDBENzhEMDA0MTA5QjAwMDAwMDQwMDAwMjAxMAorOjEwRDVDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5NQorOjEwRDVEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4NQorOjEwRDVFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3NQorOjEwRDVGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMEI4RTAwNDFBRgorOjEwRDYwMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEQQorOjEwRDYxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0NAorOjEwRDYyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzNAorOjEwRDYzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyNAorOjEwRDY0MDAwOEZCMDAwMDAzRDhFMDA0NTA5QjAwMDAwM0Q4RTAwNDVDMgorOjEwRDY1MDAwMDlCMDAwMDAzRDhFMDA0NTA5QjAwMDAwM0Q4RTAwNDUzOAorOjEwRDY2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3QQorOjEwRDY3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFNAorOjEwRDY4MDAwOEZCMDAwMDA3QzhFMDA0MzA5QjAwMDAwQTU4RTAwNDNERgorOjEwRDY5MDAwMDlCMDAwMDBBOThFMDA0NDA5QjAwMDAwMTE5MDAwNDVCNworOjEwRDZBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzQQorOjEwRDZCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBNAorOjEwRDZDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQjU4RTAwNDMzMgorOjEwRDZEMDAwMDlCMDAwMDBCNDhFMDA0MzA5QjAwMDAwRDU4RDAwNDVBQworOjEwRDZFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGQQorOjEwRDZGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2NAorOjEwRDcwMDAwOEZCMDAwMDA3NThGMDA0MjA5QjAwMDAwNzU4RjAwNDM5NAorOjEwRDcxMDAwMDlCMDAwMDA3NThGMDA0NDA5QjAwMDAwRDU4RDAwNDVBOAorOjEwRDcyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCOQorOjEwRDczMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyMworOjEwRDc0MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQTE4RjAwNDNDNAorOjEwRDc1MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDUwNgorOjEwRDc2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3OQorOjEwRDc3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFMworOjEwRDc4MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQkY4RjAwNDM2NgorOjEwRDc5MDAwMDlCMDAwMDBCRjhGMDA0NDA5QjAwMDAwRDU4RDAwNDVERQorOjEwRDdBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzOQorOjEwRDdCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBMworOjEwRDdDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQkY4RjAwNDIyNworOjEwRDdEMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDU4NgorOjEwRDdFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGOQorOjEwRDdGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2MworOjEwRDgwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTc4RjAwNDRCQworOjEwRDgxMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDU0NQorOjEwRDgyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCOAorOjEwRDgzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyMgorOjEwRDg0MDAwOEZCMDAwMDBENThEMDA0MjA5QjAwMDAwRjg4RjAwNDU3MAorOjEwRDg1MDAwMDlCMDAwMDBGODhGMDA0NTA5QjAwMDAwRDU4RDAwNDVFMworOjEwRDg2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3OAorOjEwRDg3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFMgorOjEwRDg4MDAwOEZCMDAwMDBGQThGMDA0MjA5QjAwMDAwRkE4RjAwNDMwOQorOjEwRDg5MDAwMDlCMDAwMDBGQThGMDA0NDA5QjAwMDAwRkE4RjAwNDU3QgorOjEwRDhBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzOAorOjEwRDhCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBMgorOjEwRDhDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5MgorOjEwRDhEMDAwOEZCMDAwMDAwMjkwMDA0NDA5QjAwMDAwRDU4RDAwNDVEMworOjEwRDhFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGOAorOjEwRDhGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2MgorOjEwRDkwMDAwOEZCMDAwMDAxMzkwMDA0MjA5QjAwMDAwMDM5MDAwNDM2NAorOjEwRDkxMDAwMDlCMDAwMDAxMzkwMDA0NDA5QjAwMDAwRDU4RDAwNDUwNworOjEwRDkyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCNworOjEwRDkzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyMQorOjEwRDk0MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMTQ5MDAwNDM0RQorOjEwRDk1MDAwMDlCMDAwMDAwQTkwMDA0NDA5QjAwMDAwRDU4RDAwNDVEMAorOjEwRDk2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3NworOjEwRDk3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDE2MgorOjEwRDk4MDAwMDlCMDAwMDA3MzhGMDA0MjA5QjAwMDAwNzM4RjAwNDM5QworOjEwRDk5MDAwMDlCMDAwMDA3MzhGMDA0NDA5QjAwMDAwRDU4RDAwNDUyOAorOjEwRDlBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzNworOjEwRDlCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDEyMgorOjEwRDlDMDAwMDlCMDAwMDAxNTkwMDA0MjA5QjAwMDAwMTU5MDAwNDMxNgorOjEwRDlEMDAwMDlCMDAwMDAxNTkwMDA0NDA5QjAwMDAwRDU4RDAwNDU0NQorOjEwRDlFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGNworOjEwRDlGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2MQorOjEwREEwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1MAorOjEwREExMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMUM5MDAwNDU3MworOjEwREEyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCNgorOjEwREEzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMUU5MDAwNDI1NAorOjEwREE0MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5NgorOjEwREE1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwMAorOjEwREE2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGMAorOjEwREE3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFMAorOjEwREE4MDAwOEZCMDAwMDAyQTkwMDA0MzA5QjAwMDAwOTM5MDAwNDMzQgorOjEwREE5MDAwMDlCMDAwMDBBOThFMDA0NDA5QjAwMDAwMTE5MDAwNDVCMworOjEwREFBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzNgorOjEwREFCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBMAorOjEwREFDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwOUI5MDAwNDM0NgorOjEwREFEMDAwMDlCMDAwMDBBOThFMDA0NDA5QjAwMDAwMTE5MDAwNDU3MworOjEwREFFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGNgorOjEwREFGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2MAorOjEwREIwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQUM5MDAwNDNGNAorOjEwREIxMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRDU4RDAwNDU0MgorOjEwREIyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCNQorOjEwREIzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxRgorOjEwREI0MDAwOEZCMDAwMDA3OThFMDA0MzA5QjAwMDAwOTc5MDAwNDMyOQorOjEwREI1MDAwMDlCMDAwMDBBOThFMDA0NDA5QjAwMDAwMTE5MDAwNDVGMgorOjEwREI2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3NQorOjEwREI3MDAwOEZCMDAwMDAwNzAwMkQwNTQ4QjEwMTAwMDAwMDAwRjM0MAorOjEwREI4MDAwMDhCMDAxMDAwNjAwMjA0N0U2QjEwMTAwMDQwMDAwNDc4QworOjEwREI5MDAwOTZFNDAxMDAwMDAwMDA0Nzk2RDAwMTAwMDAwMDAwNDcxNQorOjEwREJBMDAwOTZEMDAxMDAwMDAwMDAwNDk2QzAwMTAwNzQ4QjAwNEI2OQorOjEwREJCMDAwMTBDOTAwMDBDNDkwMDA0OTA5QjAwMDAwMDQwMDAwMjAxMgorOjEwREJDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMworOjEwREJEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MworOjEwREJFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MworOjEwREJGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MworOjEwREMwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MgorOjEwREMxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MgorOjEwREMyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRkQ5MDAwNDI5NworOjEwREMzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRQorOjEwREM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMgorOjEwREM1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMgorOjEwREM2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMgorOjEwREM3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMgorOjEwREM4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMgorOjEwREM5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDM5MTAwNDYxQworOjEwRENBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRQorOjEwRENCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMgorOjEwRENDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMgorOjEwRENEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MgorOjEwRENFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwRENGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MgorOjEwREQwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MQorOjEwREQxMDAwODVCMDAwMDAxMTkxMDA0MjA5QjAwMDAwMDQwMDAwMjAwRAorOjEwREQyMDAwODVCMDAwMDAzMzkxMDA0MjA5QjAwMDAwMDQwMDAwMjBEQgorOjEwREQzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMQorOjEwREQ0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMQorOjEwREQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkU5MTAwNEEyQworOjEwREQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3RAorOjEwREQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMQorOjEwREQ4MDAwODVCMDAwMDAzNjkxMDA0MzA5QjAwMDAwMDQwMDAwMjA3NworOjEwREQ5MDAwODVCMDAwMDA4RjkxMDA0NDA5QjAwMDAwMDQwMDAwMjAwRAorOjEwRERBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMQorOjEwRERCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMQorOjEwRERDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOEU5MTAwNEI1QgorOjEwREREMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwRAorOjEwRERFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MTAwNDFDRAorOjEwRERGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MTAwNDMzNworOjEwREUwMDAwMDlCMDAwMDAwNjkxMDA0NDA5QjAwMDAwMDY5MTAwNDVFOQorOjEwREUxMDAwMDlCMDAwMDAwNjkxMDA0NjA5QjAwMDAwMDY5MTAwNDdENQorOjEwREUyMDAwMDlCMDAwMDAwNjkxMDA0ODA5QjAwMDAwMDY5MTAwNDlDMQorOjEwREUzMDAwMDlCMDAwMDAwNjkxMDA0QTA5QjAwMDAwMDY5MTAwNEJBRAorOjEwREU0MDAwMDlCMDAwMDAwNjkxMDA0QzA5QjAwMDAwMDY5MTAwNEQ5OQorOjEwREU1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4QworOjEwREU2MDAwODVCMDAwMDBFRTkxMDA0MjA5QjAwMDAwMDQwMDAwMjBERgorOjEwREU3MDAwODVCMDAwMDBFRTkxMDA0NDA5QjAwMDAwMDQwMDAwMjBDRAorOjEwREU4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwREU5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMAorOjEwREVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRUU5MTAwNEIxQQorOjEwREVCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQworOjEwREVDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMAorOjEwREVEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MjAwNDVENworOjEwREVFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQworOjEwREVGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MAorOjEwREYwMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjAwOQorOjEwREYxMDAwODVCMDAwMDBGQTkxMDA0NTA5QjAwMDAwMDQwMDAwMjAxRgorOjEwREYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0M5NDAwNDYwRAorOjEwREYzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBQgorOjEwREY0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRgorOjEwREY1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMzM5MTAwNDYyOQorOjEwREY2MDAwMDlCMDAwMDAxMTkxMDA0NjA5QjAwMDAwMkM5MTAwNDc1MworOjEwREY3MDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjAwNgorOjEwREY4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBERgorOjEwREY5MDAwODVCMDAwMDAyRTkxMDA0QTA5QjAwMDAwMDQwMDAwMjA2NgorOjEwREZBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCRgorOjEwREZCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRgorOjEwREZDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOEY5MTAwNDU1RQorOjEwREZEMDAwMDlCMDAwMDAzNjkxMDA0MzA5QjAwMDAwMkM5MTAwNDdDMQorOjEwREZFMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA5NgorOjEwREZGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2RgorOjEwRTAwMDAwODVCMDAwMDA4RTkxMDA0QzA5QjAwMDAwMDQwMDAwMjA5MworOjEwRTAxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0RQorOjEwRTAyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRQorOjEwRTAzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjM5MjAwNDQ1OQorOjEwRTA0MDAwMDlCMDAwMDAyMzkyMDA0MjA5QjAwMDAwQzA4RDAwNDdEMworOjEwRTA1MDAwMDlCMDAwMDBDMDhEMDA0ODA5QjAwMDAwMDQwMDAwMjA5NQorOjEwRTA2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGRQorOjEwRTA3MDAwODVCMDAwMDAyMzkyMDA0QjA5QjAwMDAwMDQwMDAwMjA4RQorOjEwRTA4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MTAwNDEyQQorOjEwRTA5MDAwMDlCMDAwMDA0NjkyMDA0NzA5QjAwMDAwMDQwMDAwMjBDQgorOjEwRTBBMDAwODVCMDAwMDAyRTkyMDA0NzA5QjAwMDAwMDQwMDAwMjA1NworOjEwRTBCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRQorOjEwRTBDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RQorOjEwRTBEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkU5MjAwNDdBQgorOjEwRTBFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwRTBGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2RQorOjEwRTEwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1RAorOjEwRTExMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkU5MjAwNDc2QQorOjEwRTEyMDAwMDlCMDAwMDA0NjkyMDA0NzA5QjAwMDAwMkM5MTAwNDc1QQorOjEwRTEzMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA0NAorOjEwRTE0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRAorOjEwRTE1MDAwODVCMDAwMDAyRTkyMDA0NzA5QjAwMDAwMDQwMDAwMjBBNgorOjEwRTE2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGRAorOjEwRTE3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFRAorOjEwRTE4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBERAorOjEwRTE5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTU5MjAwNDdDMworOjEwRTFBMDAwMDlCMDAwMDA1NTkyMDA0ODA5QjAwMDAwMDQwMDAwMjBBQQorOjEwRTFCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRAorOjEwRTFDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RAorOjEwRTFEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQjg5MjAwNDAyNworOjEwRTFFMDAwMDlCMDAwMDBENjkyMDA0NzA5QjAwMDAwQ0E5MjAwNDg2QQorOjEwRTFGMDAwMDlCMDAwMDAyNjkyMDA0NzA5QjAwMDAwMjY5MjAwNDdBRgorOjEwRTIwMDAwMDlCMDAwMDBENjkyMDA0NzA5QjAwMDAwREQ5MjAwNDczNworOjEwRTIxMDAwMDlCMDAwMDBERDkyMDA0ODA5QjAwMDAwMDQwMDAwMjBCMQorOjEwRTIyMDAwODVCMDAwMDBDQTkyMDA0ODA5QjAwMDAwMjY5MjAwNDc1RAorOjEwRTIzMDAwMDlCMDAwMDAyNjkyMDA0NzA5QjAwMDAwQ0E5MjAwNDhDOQorOjEwRTI0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OAorOjEwRTI1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRUU5MTAwNDM2RQorOjEwRTI2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRUU5MTAwNDVEOAorOjEwRTI3MDAwMDlCMDAwMDBFRTkxMDA0NjA5QjAwMDAwMkM5MTAwNDc2MworOjEwRTI4MDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjBGMworOjEwRTI5MDAwODVCMDAwMDBFRTkxMDA0QTA5QjAwMDAwMDQwMDAwMjBBMworOjEwRTJBMDAwODVCMDAwMDBFRTkxMDA0QzA5QjAwMDAwMDQwMDAwMjA5MQorOjEwRTJCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBQworOjEwRTJDMDAwODVCMDAwMDA0NTkyMDA0NzA5QjAwMDAwMzk5MjAwNDgyRgorOjEwRTJEMDAwMDlCMDAwMDAyRDkyMDA0NzA5QjAwMDAwMkQ5MjAwNDdDMAorOjEwRTJFMDAwMDlCMDAwMDA0NTkyMDA0NzA5QjAwMDAwQzA4RDAwNDcwQQorOjEwRTJGMDAwMDlCMDAwMDBDMDhEMDA0ODA5QjAwMDAwMDQwMDAwMjBGMworOjEwRTMwMDAwODVCMDAwMDAzOTkyMDA0ODA5QjAwMDAwMkQ5MjAwNDcwNgorOjEwRTMxMDAwMDlCMDAwMDAyRDkyMDA0NzA5QjAwMDAwMzk5MjAwNDg3MgorOjEwRTMyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCNworOjEwRTMzMDAwODVCMDAwMDBERjkyMDA0MjA5QjAwMDAwMDQwMDAwMjAxOAorOjEwRTM0MDAwODVCMDAwMDBERjkyMDA0NDA5QjAwMDAwMDQwMDAwMjAwNgorOjEwRTM1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwQgorOjEwRTM2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQgorOjEwRTM3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREY5MjAwNEI1MworOjEwRTM4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NworOjEwRTM5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQgorOjEwRTNBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREY5MjAwNDMyQgorOjEwRTNCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREY5MjAwNDU5NQorOjEwRTNDMDAwMDlCMDAwMDBERjkyMDA0NjA5QjAwMDAwREY5MjAwNDc2QworOjEwRTNEMDAwMDlCMDAwMDBERjkyMDA0ODA5QjAwMDAwMDQwMDAwMjBFRQorOjEwRTNFMDAwODVCMDAwMDBERjkyMDA0QTA5QjAwMDAwMDQwMDAwMjA2MAorOjEwRTNGMDAwODVCMDAwMDBERjkyMDA0QzA5QjAwMDAwREY5MjAwNENCNQorOjEwRTQwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENgorOjEwRTQxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRkE5MjAwNDY5QworOjEwRTQyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCNgorOjEwRTQzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQQorOjEwRTQ0MDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjBDNAorOjEwRTQ1MDAwODVCMDAwMDBGQTkyMDA0NjA5QjAwMDAwMDQwMDAwMjBEOAorOjEwRTQ2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwRTQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFQQorOjEwRTQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5NDAwNDYxRQorOjEwRTQ5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NgorOjEwRTRBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCQQorOjEwRTRCMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjA1NAorOjEwRTRDMDAwODVCMDAwMDAwNjk0MDA0NjA5QjAwMDAwMDQwMDAwMjA1QQorOjEwRTREMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5NDAwNDZDRQorOjEwRTRFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGNgorOjEwRTRGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2QQorOjEwRTUwMDAwODVCMDAwMDAyQjk0MDA0MjA5QjAwMDAwMDQwMDAwMjBGOAorOjEwRTUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OQorOjEwRTUyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOQorOjEwRTUzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkE5NDAwNEE0NQorOjEwRTU0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NQorOjEwRTU1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwOQorOjEwRTU2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGOQorOjEwRTU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkI5NDAwNDYwOAorOjEwRTU4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkM5MTAwNDc3NQorOjEwRTU5MDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjBFMAorOjEwRTVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCOQorOjEwRTVCMDAwODVCMDAwMDAyQTk0MDA0QTA5QjAwMDAwMDQwMDAwMjA0MQorOjEwRTVDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OQorOjEwRTVEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OQorOjEwRTVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3OQorOjEwRTVGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OQorOjEwRTYwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRUE5MjAwNDFCRgorOjEwRTYxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDNAorOjEwRTYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOAorOjEwRTYzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyOAorOjEwRTY0MDAwODVCMDAwMDBGNzkyMDA0MjA5QjAwMDAwMDQwMDAwMjBFRAorOjEwRTY1MDAwODVCMDAwMDBGNzkyMDA0NDA5QjAwMDAwMDQwMDAwMjBEQgorOjEwRTY2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGOAorOjEwRTY3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFOAorOjEwRTY4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRjc5MjAwNEIyOAorOjEwRTY5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NAorOjEwRTZBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCOAorOjEwRTZCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRjc5MjAwNDMwMAorOjEwRTZDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRjc5MjAwNDU2QQorOjEwRTZEMDAwMDlCMDAwMDBGNzkyMDA0NjA5QjAwMDAwRjc5MjAwNDcyOQorOjEwRTZFMDAwMDlCMDAwMDBGNzkyMDA0ODA5QjAwMDAwMDQwMDAwMjBDMworOjEwRTZGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwRTcwMDAwODVCMDAwMDBGNzkyMDA0QzA5QjAwMDAwMDQwMDAwMjAyMgorOjEwRTcxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NworOjEwRTcyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDY5MjAwNEM3NworOjEwRTczMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMworOjEwRTc0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNworOjEwRTc1MDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjBCMQorOjEwRTc2MDAwODVCMDAwMDBGQTkxMDA0QzA5QjAwMDAwMDQwMDAwMjBDMAorOjEwRTc3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q5NDAwNDY2NAorOjEwRTc4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MworOjEwRTc5MDAwODVCMDAwMDA3MTk0MDA0MjA5QjAwMDAwMDQwMDAwMjAyMAorOjEwRTdBMDAwODVCMDAwMDA3MTk0MDA0NDA5QjAwMDAwMDQwMDAwMjAwRQorOjEwRTdCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBNworOjEwRTdDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NworOjEwRTdEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzE5NDAwNEI1QgorOjEwRTdFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMworOjEwRTdGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2NworOjEwRTgwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NgorOjEwRTgxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzE5NDAwNDUyMAorOjEwRTgyMDAwMDlCMDAwMDA3MTk0MDA0NjA5QjAwMDAwMkM5MTAwNDcyNworOjEwRTgzMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjAzRAorOjEwRTg0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNgorOjEwRTg1MDAwODVCMDAwMDA3MTk0MDA0QzA5QjAwMDAwMDQwMDAwMjA1NQorOjEwRTg2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGNgorOjEwRTg3MDAwODVCMDAwMDBGQTkxMDA0MjA5QjAwMDAwN0M5NDAwNDY4NworOjEwRTg4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MgorOjEwRTg5MDAwODVCMDAwMDBGQTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA5NQorOjEwRThBMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjA2MAorOjEwRThCMDAwODVCMDAwMDA3Qzk0MDA0NjA5QjAwMDAwMDQwMDAwMjBGMAorOjEwRThDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0M5NDAwNDY2NAorOjEwRThEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMgorOjEwRThFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwODA5NDAwNDM0MworOjEwRThGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMgorOjEwRTkwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NQorOjEwRTkxMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjBFRgorOjEwRTkyMDAwODVCMDAwMDA4MDk0MDA0MzA5QjAwMDAwMDQwMDAwMjA3RQorOjEwRTkzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwODA5NDAwNERFOAorOjEwRTk0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MQorOjEwRTk1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNQorOjEwRTk2MDAwODVCMDAwMDA5Mjk0MDA0MzA5QjAwMDAwMDQwMDAwMjAyQworOjEwRTk3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFNQorOjEwRTk4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENQorOjEwRTk5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkY5NDAwNEE5QworOjEwRTlBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMQorOjEwRTlCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBNQorOjEwRTlDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NQorOjEwRTlEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOTI5NDAwNDM0MAorOjEwRTlFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkM5MTAwNDcxMQorOjEwRTlGMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA3QworOjEwRUEwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NAorOjEwRUExMDAwODVCMDAwMDA2Rjk0MDA0QTA5QjAwMDAwMDQwMDAwMjA5NworOjEwRUEyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzNAorOjEwRUEzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQTQ5NDAwNDNDRAorOjEwRUE0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MAorOjEwRUE1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNAorOjEwRUE2MDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjA5RQorOjEwRUE3MDAwODVCMDAwMDBBNDk0MDA0MzA5QjAwMDAwMDQwMDAwMjAwOQorOjEwRUE4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQTQ5NDAwNEQ3MworOjEwRUE5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MAorOjEwRUFBMDAwODVCMDAwMDAxMTkxMDA0MjA5QjAwMDAwMDQwMDAwMjA3MAorOjEwRUFCMDAwODVCMDAwMDAzMzkxMDA0MjA5QjAwMDAwMDQwMDAwMjAzRQorOjEwRUFDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NAorOjEwRUFEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NAorOjEwRUFFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQzM5NDAwNDJGRgorOjEwRUFGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwRUIwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MworOjEwRUIxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MworOjEwRUIyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMzM5MTAwNDY0RAorOjEwRUIzMDAwMDlCMDAwMDAxMTkxMDA0NjA5QjAwMDAwMkM5MTAwNDc3NworOjEwRUI0MDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjAyQQorOjEwRUI1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMworOjEwRUI2MDAwODVCMDAwMDBDMzk0MDA0NjA5QjAwMDAwMDQwMDAwMjBGNgorOjEwRUI3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMworOjEwRUI4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQzU5NDAwNEE1NAorOjEwRUI5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRgorOjEwRUJBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMworOjEwRUJCMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjA0RAorOjEwRUJDMDAwODVCMDAwMDBDNTk0MDA0QTA5QjAwMDAwMDQwMDAwMjA5MAorOjEwRUJEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5NDAwNDY1MAorOjEwRUJFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFRgorOjEwRUJGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5NDAwNDYzMAorOjEwRUMwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDRQorOjEwRUMxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MgorOjEwRUMyMDAwODVCMDAwMDAxRDkyMDA0NzA5QjAwMDAwMDQwMDAwMjBEQworOjEwRUMzMDAwODVCMDAwMDA3RDk0MDA0NjA5QjAwMDAwMDQwMDAwMjA2QgorOjEwRUM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5NDAwNDZERgorOjEwRUM1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3RQorOjEwRUM2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMgorOjEwRUM3MDAwODVCMDAwMDBDQjk0MDA0MjA5QjAwMDAwMDQwMDAwMjBFMQorOjEwRUM4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMgorOjEwRUM5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMgorOjEwRUNBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkY5NDAwNEE4OQorOjEwRUNCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRQorOjEwRUNDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MgorOjEwRUNEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwRUNFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0I5NDAwNDZGMQorOjEwRUNGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMkM5MTAwNDdGRQorOjEwRUQwMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA2OAorOjEwRUQxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MQorOjEwRUQyMDAwODVCMDAwMDA2Rjk0MDA0QTA5QjAwMDAwMDQwMDAwMjA4NAorOjEwRUQzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMQorOjEwRUQ0MDAwODVCMDAwMDAzNjkxMDA0RDA5QjAwMDAwMDQwMDAwMjA5RAorOjEwRUQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMQorOjEwRUQ2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMQorOjEwRUQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMQorOjEwRUQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMQorOjEwRUQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMQorOjEwRURBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMQorOjEwRURCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMQorOjEwRURDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MQorOjEwRUREMDAwODVCMDAwMDAzNjkxMDA0RDA5QjAwMDAwMkM5MTAwNDcyRAorOjEwRURFMDAwMDlCMDAwMDAyQzkxMDA0ODA5QjAwMDAwMDQwMDAwMjA4OAorOjEwRURGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MQorOjEwRUUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MAorOjEwRUUxMDAwODVCMDAwMDAwNzAwMkU0QjE5OTAwMTAwMTA4QTAwMDRGNQorOjEwRUUyMDAwRTZCMTAwMDBDMDhEMjI0MjE5N0MwMDAwQzU5NzAwM0E2RgorOjEwRUUzMDAwODEzMDAxMDBDMDhEMDA0MDgxQjIwMDAwQzA4RDIyNDJBRgorOjEwRUU0MDAwMTk3QzAwMDBGRjFGMDAwRjFFOEMwMTAwMzc5NzAwNDA0NworOjEwRUU1MDAwODEzMjAxMDBEMDhEOUMwRjgwMzIwMDAwMDAwMDAwNUNFOAorOjEwRUU2MDAwMUY4MDAxMDAwMDgwMDAxMDQyQzkwMTAwRDA4RDIyNDBBNworOjEwRUU3MDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTA5QQorOjEwRUU4MDAwNjJERDAxMDBDRDhEQTg0MDgxMzIwMDAwMUI4NDAwODgyNgorOjEwRUU5MDAwMUNCMDAwMDAxOTg2MjIwMjgwMzIwMDAwRDE4RDQyNDA1MQorOjEwRUVBMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBMDIyOAorOjEwRUVCMDAwNjg5NzAxMDAxOTg2MDA0MDA1QjAwMDAwMDUwMDJFNEI0MAorOjEwRUVDMDAwMTk5MDAxMDAxMDhBMDAwNEU2QjEwMDAwMDAwMDAwNDAyMworOjEwRUVEMDAwODdCMDAxMDAwMDAwMDA0MDhEQjAwMTAwMDA4MDAwMDNGOQorOjEwRUVFMDAwNDJDOTAxMDA0MDAwMDBBMTQ0QzkwMTAwMDAwMDAwRjAzNworOjEwRUVGMDAwRTBCMTAxMDA1NTk5MDAwNjA3NDAwMTAwMDAwMDAwMDYzRQorOjEwRUYwMDAwMDdEMDAxMDBENDAwMkU1QzFGOTAwMTAwMDAwMDAwMDcxNAorOjEwRUYxMDAwRjBCMTAxMDAwQzgwMDAwMzQyQzkwMTAwMDAwMDAwRjBDNAorOjEwRUYyMDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkVDRAorOjEwRUYzMDAwOTZCMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAwMDAwRjA0NQorOjEwRUY0MDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkVBRAorOjEwRUY1MDAwOTZDMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAwMDAwRjAxNQorOjEwRUY2MDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkE5MQorOjEwRUY3MDAwOTZDMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAzMDAwNEI2QQorOjEwRUY4MDAwOTQ4ODAxMDAwMDAwMDA0Njk1RjAwMTAwMDAwMDAwNEE0RQorOjEwRUY5MDAwOTZDMDAxMDA1RTAxMkUzNDk3ODQwMTAwMDIwMDAwNEJGMAorOjEwRUZBMDAwRTRFNTAxMDA2NDAxMjA0MEUxQjEwMTAwMDkwMDAwMDcyRgorOjEwRUZCMDAwODZFNDAxMDAwMDAwMkVBNzg3QzAwMTAwMTAwMDAwMTBBOQorOjEwRUZDMDAwNDhDOTAxMDAxMDAwMDA0MEYxOTkwMTAwNTgwMTAwNDNCOAorOjEwRUZEMDAwRjBDOTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDQyQgorOjEwRUZFMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwRkE4REE4NDAxQgorOjEwRUZGMDAwODEzMjAwMDAwMDAwMDAwNTQ4QjEwMTAwMUEwMDAwNDAwNQorOjEwRjAwMDAwOTc5ODAxMDAwODAwMkU0MDk1QjAwMTAwMDI4RTIwNEIxOQorOjEwRjAxMDAwOTQ2QzAwMDAwMDAwMDA0MEYxQjEwMTAwRkY4RDAwNDE0MAorOjEwRjAyMDAwOTVDMDAwMDAxMDgwMDAxMDQyQzkwMTAwMDk4RTIyNDBFNgorOjEwRjAzMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBEOQorOjEwRjA0MDAwNjJERDAxMDAwNThFQTg0MDgxMzIwMDAwMUI4NDAwODgyQgorOjEwRjA1MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwQzU5NzAwNDA0OQorOjEwRjA2MDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwMEM4MDAwMDM4QQorOjEwRjA3MDAwNDJDOTAxMDAwMDAwMDBGODg2QjAwMTAwMDAwMDAwRjg1RAorOjEwRjA4MDAwODhCMDAxMDAwRThFNDI0MDgxMzIwMDAwMTE4RUEyNENFOQorOjEwRjA5MDAwRkQ3RjAwMDAxMjhFMDA0Q0ZEOTMwMDAwMTM4RTIwRjBDNworOjEwRjBBMDAwNTY2RjAwMDAwMDAwMDBGMDU2QjMwMTAwMDAwMDFBNDA0NworOjEwRjBCMDAwODFCMjAxMDAwMDgwMDAxMDQ0QzkwMTAwNjQwMDAwNDBEQQorOjEwRjBDMDAwRjE5OTAxMDA3MDAwMDAwNUYwQzkwMTAwMDAwMDAwNDM0MworOjEwRjBEMDAwRjBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwMTAwNAorOjEwRjBFMDAwNjJERDAxMDAxOThFQTg0NEUwMzEwMDAwMTAwMDAwMTAxQworOjEwRjBGMDAwOENDODAxMDAwMDgwMDA0NjQ0QzkwMTAwNDAwMDAwNDA2NworOjEwRjEwMDAwRjE5OTAxMDA2ODAxMDAwNUYwQzkwMTAwNjQwMDAwNDNBNQorOjEwRjExMDAwRjBDOTAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDY5NQorOjEwRjEyMDAwNjJCMTAxMDAyMThFQTg0NEUwMzEwMDAwMUI4NDAwODhGOAorOjEwRjEzMDAwMUNCMDAwMDAwOTAwMDAwNzg2RTQwMTAwMzgwMDJFQTc3QgorOjEwRjE0MDAwODdDMDAxMDA4QjAwMkQwNTQ4QjEwMTAwMjk4RTIyNDNBNAorOjEwRjE1MDAwRTc3RDAwMDAwMDAwMDA0NDQ1QzEwMTAwMkM4RTIyNDRFMAorOjEwRjE2MDAwRTc3RDAwMDAwMDAwMDA0QzQ1QzEwMTAwMDAwMDAwNEE5RQorOjEwRjE3MDAwMTk5MDAxMDA2ODAxMjBBMkU0QjEwMTAwODgwMDAwNDA1QworOjEwRjE4MDAwNDM5OTAxMDAzMDhFMjMwQkU1NkQwMDAwMDAwMDAwNDEyMworOjEwRjE5MDAwMTk5MDAxMDAwMDgwMDAxMDQ0QzkwMTAwNTAwMDAwNDA5NworOjEwRjFBMDAwRjE5OTAxMDA1ODAxMDA0M0YwQzkwMTAwNTgwMTAwMDUyMAorOjEwRjFCMDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTAzRQorOjEwRjFDMDAwNjJCMTAxMDAzNThFQTg0MDgxMzIwMDAwMUI4NDAwODhBNgorOjEwRjFEMDAwMUNCMDAwMDA1QzAwMkUwNTQ4QjEwMTAwMDA4MDAwMDM1NworOjEwRjFFMDAwNDJDOTAxMDAwMDAwNjBGMDk2QjAwMTAwQzU5NzAwNDFERgorOjEwRjFGMDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwNDA4RUEyNDlDRgorOjEwRjIwMDAwMTk3QzAwMDA4NjAwMDA0MDQ3OTkwMTAwNDQ4RTAwNDBCMAorOjEwRjIxMDAwRTVCMTAwMDA4NjAwMkY0OTE5ODAwMTAwNDQ4RUEyRjI1QQorOjEwRjIyMDAwODAzMjAwMDA4QjAwMDA0MDQ3OTkwMTAwMDAwMDAwNDIzRQorOjEwRjIzMDAwRTc5MTAxMDA0NzhFQTI0NjE5N0MwMDAwQTAwMDAwNDAyMworOjEwRjI0MDAwNDc5OTAxMDA0QjhFMDA0MEU1QjEwMDAwQTAwMDJGNDYxOQorOjEwRjI1MDAwMTk4MDAxMDA0QjhFQTJGMjgwMzIwMDAwOEIwMDAwNDAyQQorOjEwRjI2MDAwNDc5OTAxMDAwMDAwMDA0MUU3OTEwMTAwQTgwMDAwNDAxQgorOjEwRjI3MDAwNDM5OTAxMDAzNDAwMkRGMDI0QjAwMTAwMDAwMDAwRkI5MAorOjEwRjI4MDAwMENCMDAxMDAwMDAwMDBGQjEwQjAwMTAwMDAwMDAwRkIwQQorOjEwRjI5MDAwMTJCMDAxMDAwRjAwMDBGMzE2ODgwMTAwMDQwMDAwRjMxMworOjEwRjJBMDAwMTRGNDAxMDA3NjhFMjY0MDgxMzIwMDAwNUU4RTIyMEEyMAorOjEwRjJCMDAwMTY2QzAwMDA1ODAwM0Q0MzEzRTAwMTAwMDAwMDAwRjgwOAorOjEwRjJDMDAwODJCMDAxMDAwNDAwMjJGMDg0MzAwMDAwRkQ5ODAwNDA2QworOjEwRjJEMDAwODEzMjAxMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMDU4MgorOjEwRjJFMDAwNDhCMTAxMDAwMDAwMDA0MTEzQzAwMTAwNUQ4RUEwNDM0MQorOjEwRjJGMDAwMTM2QzAwMDAwMDAwMDA0MDEzQjAwMTAwNTM4RTAwNDE2OQorOjEwRjMwMDAwMTVEMDAwMDA3NjhFMjIwQTgwMzIwMDAwNTgwMDNENDM1RQorOjEwRjMxMDAwMTNFMDAxMDAwMDAwMDBGODgyQjAwMTAwMDQwMDIyRjBCOAorOjEwRjMyMDAwODQzMDAwMDBGRDk4MDA0MDgxMzIwMTAwNDAwMDIwNDAwMAorOjEwRjMzMDAwRTFCMTAxMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMDU0MgorOjEwRjM0MDAwNDhCMTAxMDA3NjhFMjI0MTE1NTAwMDAwMDAwMDAwNDFCNgorOjEwRjM1MDAwMTFDMDAxMDA2QThFQTA0MzExNkMwMDAwMDAwMDAwNDA0MworOjEwRjM2MDAwMTFCMDAxMDA1ODAwM0Q0MzExRTAwMTAwMDAwMDAwRjgxOQorOjEwRjM3MDAwMzZCMDAxMDAwNDAwMjJGMDAwMzAwMDAwMDAwMDAwNTAxMAorOjEwRjM4MDAwODNCMDAxMDAwNDk4MDA0NzYxMzEwMTAwMUI4NDAwODhBQworOjEwRjM5MDAwMUNCMDAwMDA3NDk1MDAwNTQ4MzEwMTAwMDAwMDAwNDVENAorOjEwRjNBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNzI4RUE4NDBEMgorOjEwRjNCMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwNjY4RTAwMDVBRQorOjEwRjNDMDAwNDhCMTAwMDAzNzAwMjA0MEU3QjEwMTAwMzY5ODAwNTFGNQorOjEwRjNEMDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwMzQwMDJFNDEwMworOjEwRjNFMDAwRjVCMTAxMDAwMDExMDA0MEU1OTkwMTAwN0U4RTAwNDg1MgorOjEwRjNGMDAwMTk5MDAwMDAzNDAwMkU0MUY1QjEwMTAwMDAxMTAwNDBDOQorOjEwRjQwMDAwRTU5OTAxMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjhGNgorOjEwRjQxMDAwOTRCMDAxMDA4MzhFMjI0NTIzN0MwMDAwQjAwMDJGRjBDMQorOjEwRjQyMDAwOENCMDAxMDAwMDAwNjBGMDhDQzAwMTAwOTAwMDAwNDAzMgorOjEwRjQzMDAwNDM5OTAxMDAzNTAwMkRGMDhDQjAwMTAwNTgwMDNFNDM4NworOjEwRjQ0MDAwRTdFMTAxMDA4ODhFMjI0ODE5N0MwMDAwMDAwMDAwNDE5RAorOjEwRjQ1MDAwOERDMDAxMDAwMDAwNjgwQThDQzAwMTAwMzgwMDJBNEFGMworOjEwRjQ2MDAwRTBCMTAxMDAyODAwMDAwMEUwQzkwMTAwM0MwMDIwMUJDMQorOjEwRjQ3MDAwRTBCMTAxMDAxMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjg2MworOjEwRjQ4MDAwMzhCMDAxMDAwMDAwMDBGODI2QjAwMTAwMDQwMDIyRjhBNgorOjEwRjQ5MDAwMDIzMDAwMDA5NjhFMjMwMTE0NkMwMDAwMDAwMDAwRjg3QQorOjEwRjRBMDAwODBCMDAxMDAwMDAwMDBGODgyQjAwMTAwNEMwMDIwRjBBNAorOjEwRjRCMDAwRTRCMTAxMDA0NDAwMjA0MEUwQjEwMTAwNDgwMDIwNDFENworOjEwRjRDMDAwRTBCMTAxMDBBODAwMkQxMDMyQjAwMTAwMzk5OTAwRjAyMAorOjEwRjREMDAwMjQzMDAxMDA5RjhFQTI0NDgxNkMwMDAwOUQ4RTIyNDE0OQorOjEwRjRFMDAwMTk3QzAwMDBBMDk2MDA0MDNCMzAwMTAwQzM4RUEyMDhBQQorOjEwRjRGMDAwM0MzMDAwMDA5RjhFMDA0MDgxQjIwMDAwREQ5NTAwNDA0RQorOjEwRjUwMDAwODEzMjAxMDBDMzhFQTIwODNDMzAwMDAwNTAwMDIwMUM1NAorOjEwRjUxMDAwRTBCMTAxMDA1NDAwMjAxM0UwQjEwMTAwNEUwMDIwMDFEMQorOjEwRjUyMDAwRTRCMTAxMDA0MDAwMjAwQUUwQjEwMTAwMzY5ODAwNUYxQworOjEwRjUzMDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwMzcwMDAwNDBDRAorOjEwRjU0MDAwNDc5OTAxMDA3Rjk2MDBGMzk0MzAwMTAwN0U4RTIyNEE5NQorOjEwRjU1MDAwODAzMjAwMDBBQjhFMDA0MDgxQjIwMDAwMzcwMDAwNDBENgorOjEwRjU2MDAwNDc5OTAxMDA3Rjk2MDBGMzk0MzAwMTAwNTgwMDNFNDMxNAorOjEwRjU3MDAwOTdFMDAxMDAwMDAwMDAxQkYwQjEwMTAwMUYwMDYwMDBENworOjEwRjU4MDAwMDA4QzAxMDBENThEODUxMTgwMzIwMDAwMDQ4MDAwMDNCRAorOjEwRjU5MDAwNDJDOTAxMDBCMDAwMkZGMDhDQjAwMTAwMDAwMDYwRjAwMworOjEwRjVBMDAwOENDMDAxMDAzNjk4MDA1RjgxMzAwMTAwRDU4RDAwNDA4RAorOjEwRjVCMDAwODFCMjAwMDBCNThFMDA0OTE5ODAwMDAwQkE4RTIyNDE0OAorOjEwRjVDMDAwMTk3QzAwMDBBMDk2MDA0MDNCMzAwMTAwQkU4RUEyMDhDRQorOjEwRjVEMDAwM0MzMDAwMDAzNjk4MDA1RjgxMzAwMTAwRDU4RDAwNDAzRQorOjEwRjVFMDAwODFCMjAwMDBERDk1MDA0MDgxMzIwMTAwQkU4RUEyMDg4QworOjEwRjVGMDAwM0MzMDAwMDAzNjk4MDA1RjgxMzAwMTAwRDU4RDAwNDAxRQorOjEwRjYwMDAwODFCMjAwMDA1MDAwMkQxMDMyQjAwMTAwNTQwMDJERjBFNgorOjEwRjYxMDAwMzhCMDAxMDA0RTAwMkRGMDI2QjAwMTAwNDAwMDJERjI2MAorOjEwRjYyMDAwMDJCMDAxMDAwMDAwMDBGMDE0QjAwMTAwMzAwMDAwMTAzMgorOjEwRjYzMDAwOENDODAxMDAwMDgwMDA0NjQ0QzkwMTAwNjgwMTJENDRDNworOjEwRjY0MDAwNjFCMTAxMDAxMDAwNjhGMjgwQzgwMTAwMDAwMDAwMDhFQworOjEwRjY1MDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwMEJGNQorOjEwRjY2MDAwMzdCMDAxMDAwMDAwMDA0MDM2RDAwMTAwNUMwMTJFNDBBMAorOjEwRjY3MDAwMTBDMDAxMDAwMDAwMDAwNjgwQzAwMTAwMDAwMDAwNTIyMAorOjEwRjY4MDAwODFEMDAxMDBEMThFMjA5NDgxNkMwMDAwQ0I5NzAwOTQzMgorOjEwRjY5MDAwRTUzMTAxMDBEMjhFMDA0MDgxQjIwMDAwQ0I5NzAwNDBERQorOjEwRjZBMDAwRTQzMTAxMDAyMDAwMDA0NjYyREQwMTAwRDI4RUE4NDA1NgorOjEwRjZCMDAwMjMzMDAwMDAwRTAwMDAwRjFFOEMwMTAwRTI4RTgyNDFGQworOjEwRjZDMDAwMjM0MDAwMDAyMDgwMDAxMDQyQzkwMTAwREM4RTIyNDA0RgorOjEwRjZEMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTAzMQorOjEwRjZFMDAwNjJERDAxMDBEOThFQTg0MDgxMzIwMDAwMUI4NDAwODhCMQorOjEwRjZGMDAwMUNCMDAwMDAwMDAwMDAxMDQ4QjEwMTAwMTE5NjAwNDM0QQorOjEwRjcwMDAwMjMzMDAxMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMTA5NgorOjEwRjcxMDAwMzJCMDAxMDAwMDAwMDA0MTIzQjAwMTAwMEUwMDAwMEZENAorOjEwRjcyMDAwMUU4QzAxMDAwMDgwMDAxOTQ0QzkwMTAwRUE4RTIyNDFBQworOjEwRjczMDAwMTk3QzAwMDBFNjhFQTMwMTBDNkMwMDAwRTc4RTAwMDYyOQorOjEwRjc0MDAwMDRCMDAwMDAwMDAwMDAwMTA0QjAwMTAwRTk4RTIwMDJCNgorOjEwRjc1MDAwMzY2QzAwMDAwMDAwMDAxQjA0QjAwMTAwRUQ4RTAwMDJCQQorOjEwRjc2MDAwRjBCMTAwMDBFQzhFQTMwMTBDNkMwMDAwRUQ4RTY4MDY3OQorOjEwRjc3MDAwMDRCMDAwMDAwMDAwNjgwMTA0QjAwMTAwRUY4RTgwMDhCMgorOjEwRjc4MDAwRjAzMTAwMDAwMDAwMDAxMTFFOTAwMTAwMDAwMDAwMUM3QworOjEwRjc5MDAwRjBCMTAxMDAwMDAwMDA0NjYxQjEwMTAwMDExRjAwMTkzNQorOjEwRjdBMDAwNjJERDAxMDBGMThFQTgxM0UwMzEwMDAwMjg4RjIyMDJGMworOjEwRjdCMDAwMTQ1MDAwMDA0NDAwMkQwMjBDRDAwMTAwMTg4RkEyMDI0QQorOjEwRjdDMDAwMDI1MDAwMDBGRjhFMjI1QzFGN0MwMDAwMjA4MDAwMDM5RQorOjEwRjdEMDAwNDJDOTAxMDBGRThFMjI0MEUzNkQwMDAwMDAwMDAwNDc5OAorOjEwRjdFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRkE4RUE4NDAwNgorOjEwRjdGMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMDU1RQorOjEwRjgwMDAwNDhCMTAxMDA0NDAwMkQ1QzFGODAwMTAwNDgwMDJERjAyQworOjEwRjgxMDAwMzhCMDAxMDA0QzAwMkRGMDI2QjAwMTAwMzgwMDJGRjI2NgorOjEwRjgyMDAwMDJCMDAxMDAxOThGMjIwMTE0NkMwMDAwMEM4RjIyNDZENworOjEwRjgzMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMjAwMDJEMDNGNworOjEwRjg0MDAwNDhCMTAxMDAwQjhGMjI0MEUzNkQwMDAwMDAwMDAwNDQyRQorOjEwRjg1MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMDg4RkE4NDA4NgorOjEwRjg2MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMzgwMDJGMDU4NgorOjEwRjg3MDAwNDhCMTAxMDAwMDAwMDBGODk0QjAwMTAwMzgwMDJERjBGQworOjEwRjg4MDAwOTZCMDAxMDAwMDAwMDA0Q0UxQzEwMTAwMjAwMDAwMDMxRgorOjEwRjg5MDAwNDhDOTAxMDAwMDAwMjI0QUYxQjEwMTAwNDQwMDAwMDVGRQorOjEwRjhBMDAwRjBDOTAxMDAwMDAwMDA0QUYwQjEwMTAwMDAwMDAwNEI2NworOjEwRjhCMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQxOAorOjEwRjhDMDAwNjJERDAxMDAxNThGQTg1QzFGMTAwMDAwMTk4RjAwMDU3NAorOjEwRjhEMDAwNDhCMTAwMDAwMDAwMDAwMjM4QzAwMTAwMjM4RjIyMDY1QQorOjEwRjhFMDAwODAzMjAwMDAwMDAwMDA1MDMzQzAwMTAwMjE4RkEyMDJDRQorOjEwRjhGMDAwMzY2QzAwMDAwNDAwOEYwRDQyMzEwMDAwMTAwMDAwRjg0QgorOjEwRjkwMDAwMTBDODAxMDAwMDAwMDA1QzExODAwMTAwRjAwNzAwNDBGOQorOjEwRjkxMDAwMzc5ODAxMDBENThFMDBBMTFBQjAwMDAwMDAwMDAwMDI0NworOjEwRjkyMDAwMTBDMDAxMDBENThFMDAwMjM2RDAwMDAwNTAwMDIwMUMwRgorOjEwRjkzMDAwRTBCMTAxMDA1NDAwMjAxM0UwQjEwMTAwNEUwMDIwMDFBRAorOjEwRjk0MDAwRTRCMTAxMDA0MDAwMjAwQUUwQjEwMTAwMkQ4RjAwNUYwQQorOjEwRjk1MDAwMDFCMDAwMDAzNzAwMkQ0NjAxQjAwMTAwMDQwMDAwRjNBMworOjEwRjk2MDAwODBGNDAxMDAyQzhGQTA0MzgxNkMwMDAwMDAwMDAwNTU0MgorOjEwRjk3MDAwMDFCMDAxMDA0MDAwMjA0MEUxQjEwMTAwMDA4MDAwMTkwOQorOjEwRjk4MDAwNDJDOTAxMDAzMzhGMjI0MEUzNkQwMDAwMDAwMDAwNDZCMQorOjEwRjk5MDAwNjFCMTAxMDA0MDAwMDAxOTYyREQwMTAwMzA4RkE4NDAxNAorOjEwRjlBMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMTE5NjAwMTBGQQorOjEwRjlCMDAwNDgzMTAxMDAzMDgwMDAxMDQyQzkwMTAwM0E4RjIyNDBENgorOjEwRjlDMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA0MAorOjEwRjlEMDAwNjJERDAxMDAzNzhGQTg0MDgxMzIwMDAwMUI4NDAwODg1RgorOjEwRjlFMDAwMUNCMDAwMDA2MDAxMkYwNTQ4QjEwMTAwMDAwMDAwMEJCMQorOjEwRjlGMDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwM0Y4RjkwRjJDOQorOjEwRkEwMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjAwMQorOjEwRkExMDAwMTdBNDAxMDAzMjAwMDBBNjJBQzAwMTAwMDAwMDAwRjI3NQorOjEwRkEyMDAwMkE5NDAxMDA0ODhGMjI0OTFGN0MwMDAwMDAwMDAwNDlGMQorOjEwRkEzMDAwMUY4MDAxMDAwMDAwMDA0MDA1QjAwMTAwMDBGMDAwMEMzNAorOjEwRkE0MDAwMTg4QzAxMDAwQjk4MDA0Qzk1MzAwMTAwNTg4RjAwMDA3NQorOjEwRkE1MDAwOTJCMDAwMDA0RjhGMjI0MEFGNkYwMDAwMDBDMDAwMUUyOAorOjEwRkE2MDAwOTREQzAxMDAwMDAwMDAxNTk2QjAwMTAwODg5ODAwNDA2OQorOjEwRkE3MDAwMDUzMDAxMDA0RThGQTI0MDk3NkMwMDAwNjE4RjAwNDc1NworOjEwRkE4MDAwMTk4MDAwMDA1ODhGMDAwMDkyQjAwMDAwNEY4RjQzNDg0QgorOjEwRkE5MDAwNjEzMTAwMDAwMEQwMDAxRTYyREQwMTAwNTQ4RjI4NDA1QgorOjEwRkFBMDAwMDUzMDAwMDA1MDhGMjI0ODc3N0QwMDAwNTc4RjAwNDBCRQorOjEwRkFCMDAwODFCMjAwMDAwMDAwMDAxNTYyQjEwMTAwNjA4RjI4NDA5MworOjEwRkFDMDAwODEzMjAwMDA1NDhGMDA0MDgxQjIwMDAwMDAwMDFCMDAxMgorOjEwRkFEMDAwOTJCMDAxMDA1RDhGMjI0MTE5N0MwMDAwMDA4MDAwMDM3QworOjEwRkFFMDAwNDJDOTAxMDBFMjk1MDBGODAwMzAwMTAwNUE4RkEyNDE5RQorOjEwRkFGMDAwM0I1MDAwMDA2MThGMDA0OTAwQjAwMDAwRkYwNzAwMUU2RQorOjEwRkIwMDAwMDA4QzAxMDBFMjk1MDA0MDgxMzIwMTAwNjE4RjAwNDlDNAorOjEwRkIxMDAwMDBCMDAwMDAwMDAwMUI0NzE5ODAwMTAwNjQ4RjIyNUZDNQorOjEwRkIyMDAwMDE2QzAwMDA2Mzk5MDA0MDgxMzIwMTAwQjA4QTAwMDAzRQorOjEwRkIzMDAwODBCMDAwMDA2QjhGMjI1QzFGN0MwMDAwMjA4MDAwMDNERgorOjEwRkI0MDAwNDJDOTAxMDA2QjhGMjI0MEUzNkQwMDAwMDAwMDAwNDdCNgorOjEwRkI1MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNjg4RkE4NDAyMworOjEwRkI2MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwNkI4RjQwMDVCMAorOjEwRkI3MDAwNDgzMTAwMDBGRkZGMDAwNzk0ODkwMTAwNzE4Rjg1Q0E5QQorOjEwRkI4MDAwOTQzMDAwMDA2Mzk5MTg1QzFGMDAwMTAwMEUwMDAwMEYwNAorOjEwRkI5MDAwMUU4QzAxMDA3ODg5MDA0MDgxQjIwMDAwMzY5ODE4MDA2MAorOjEwRkJBMDAwODAzMDAxMDBENThEMDA0NzE5ODAwMDAwMDAwMDAwNDAyMgorOjEwRkJCMDAwMTk4MDAxMDBENThEMjI0NzE5N0MwMDAwREQ5NTAwNDA5OQorOjEwRkJDMDAwODEzMjAxMDA3ODhGQTIwODgwMzIwMDAwRDU4RDAwNDA3QworOjEwRkJEMDAwODFCMjAwMDBDQjk3MDA0MDBEMzAwMTAwOUMwMTAwNDAzNQorOjEwRkJFMDAwNDU5OTAxMDBGRkZGMDAwQjk4ODgwMTAwOEIwMDJENTAwNAorOjEwRkJGMDAwMTdGMDAxMDA3RThGOTA0QzE2NDAwMDAwMDAwMDAwNDE3RAorOjEwRkMwMDAwMTdDMDAxMDA4MDhGMjI0M0U3N0QwMDAwMDAwMDAwNDQwMAorOjEwRkMxMDAwNDVDMTAxMDAwMDAwNjYyMDE3QTQwMTAwNjgwMTAwNDBGMgorOjEwRkMyMDAwNDM5OTAxMDA1QzAxMkVGMjgwQjAwMTAwM0UwMDAwNDBDQgorOjEwRkMzMDAwODBDRTAxMDA4NzhGMjQ0MDgxMzIwMDAwMDAwMDAwNDYwMgorOjEwRkM0MDAwODFDMDAxMDA4ODhGMDA5NEU1QjEwMDAwMDIwMDYyNDA4RAorOjEwRkM1MDAwN0VDRDAxMDAwMDAwMDA1NzgxQzAwMTAwMDAwMDJFMTA4MQorOjEwRkM2MDAwNDhCMTAxMDAwMzAwMDA0MEYwOEQwMTAwMDAwMDAwMDhEMQorOjEwRkM3MDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDQ5NgorOjEwRkM4MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwOEU4RkE4NDAzOAorOjEwRkM5MDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwMDAwMDAwMDVCOQorOjEwRkNBMDAwNDhCMTAxMDA5QThGMjI0MEFGNkYwMDAwMDA0MDAwMDg2OQorOjEwRkNCMDAwOTREQzAxMDA4ODk4MDA0MDgxMzIwMTAwOTg4RjIyNDAzNgorOjEwRkNDMDAwOTc2QzAwMDBFMjk1MDAwODAwMzAwMTAwRDU4RDAwNDBERgorOjEwRkNEMDAwODFCMjAwMDAwMDAwMDA0MDA1QjAwMTAwRDU4RDAwNDc1MgorOjEwRkNFMDAwMTk4MDAwMDA5QThGNDM0ODYxMzEwMDAwMDA1MDAwMDhERAorOjEwRkNGMDAwNjJERDAxMDBBMDhGMjg0MDA1MzAwMDAwOUI4RjIyNDg2NAorOjEwRkQwMDAwNzc3RDAwMDBFMjk1MUIwODAwMzAwMTAwRDU4RDAwNDA5MgorOjEwRkQxMDAwODFCMjAwMDBENThEMUI0NzE5ODAwMDAwMzUwMDAwNDBERQorOjEwRkQyMDAwNDc5OTAxMDAwMTAwNjNGMzg0QzgwMTAwQTU4RkEwNDMzNworOjEwRkQzMDAwODU2QzAwMDAwMDAwNjM0MDg1QjAwMTAwQTgwMDAwNDAxMQorOjEwRkQ0MDAwNDM5OTAxMDAzNzAwMkZGMDI0QjAwMTAwMDEwMDYzRjM1NAorOjEwRkQ1MDAwODJDQzAxMDBCMDhGQTI0MTlFMDYwMDAwRDU4RDIyNDRDNgorOjEwRkQ2MDAwODM3MDAwMDAzNjAwMDA0MDQzOTkwMTAwNTgwMDNENDM3NQorOjEwRkQ3MDAwRTdFMTAxMDBENThEMUZGMDI0NkMwMDAwNjM5OTAwNDg3NQorOjEwRkQ4MDAwODEzMDAxMDBCMDhBMjM0MTgzNkMwMDAwQjA4QTAwNDdCMworOjEwRkQ5MDAwODFCMDAwMDA1ODAwM0Q0Mzg1RTAwMTAwMDAwMDAwRjhGQworOjEwRkRBMDAwMzZCMDAxMDAwMDAwMDBGMDAwQjAwMTAwMjgwMDAwNDA2MworOjEwRkRCMDAwODM5ODAxMDAwNDk4MDA0NzYxMzEwMTAwMUI4NDAwODg4QQorOjEwRkRDMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDgwMDJERjAxOAorOjEwRkREMDAwOTRCMDAxMDAwMDAwMDBGODhFQjAwMTAwOTAwMDJERjBGQQorOjEwRkRFMDAwMTRCMDAxMDAwMDAwMDAwNTQ4QjEwMTAwODQ4RUEyNDA1QgorOjEwRkRGMDAwOEY3QzAwMDBCRThGMjI0NzhGN0MwMDAwODQ4RTAwNDhERAorOjEwRkUwMDAwMTk5MDAwMDAyRDkwMDA0MDgxQjIwMDAwMzYwMDJENUQ1OQorOjEwRkUxMDAwMDVCNDAxMDAzNzAwMkRGMzgwQjAwMTAwMDAwMDAwRjNBRAorOjEwRkUyMDAwOEVCMDAxMDA1QzAwM0Q0MzgxRTAwMTAwQTgwMDJERjA5MAorOjEwRkUzMDAwOTRCMDAxMDAwMDAwMDBGMDI0QjAwMTAwMjAwMDAwMTA4OAorOjEwRkU0MDAwODZEQzAxMDA0MDgwMDAwMzQ0QzkwMTAwRTM5NDAwNEFCRAorOjEwRkU1MDAwRjAzMTAxMDAzNjAwMkY1QzFGOTAwMTAwQ0M4RkEyNTBDMgorOjEwRkU2MDAwOEY1MDAwMDAzNDAwMjA0MEUxQjEwMTAwRDU4RDAwNDBFQQorOjEwRkU3MDAwODFCMjAwMDAwMDAwNjM0MTgxQzAwMTAwQ0Y4RkEwNDMyOAorOjEwRkU4MDAwODE2QzAwMDAwMDAwNjM0MDgxQjAwMTAwMzcwMDIwNDcxMgorOjEwRkU5MDAwRTZCMTAxMDBENThEMjI0NzgwMzIwMDAwMDQwMDAwNDcwMgorOjEwRkVBMDAwMENGNDAxMDAwMDAwMDA0RjhGODQwMTAwRTQ4RjIyNDcxMgorOjEwRkVCMDAwMEM2QzAwMDA1ODAwM0Q0MzgxRTAwMTAwRTQ4RjFGRjAwRQorOjEwRkVDMDAwMjQ2QzAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTAxNgorOjEwRkVEMDAwNDJDOTAxMDBERDhGMjI0MEUzNkQwMDAwMDAwMDAwNDVCMworOjEwRkVFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwREE4RkE4NDAxRQorOjEwRkVGMDAwODEzMjAwMDAxQjg0MDA4ODFDQjAwMDAwREQ4RjQyNDA2RQorOjEwRkYwMDAwMDUzMDAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBNUREQQorOjEwRkYxMDAwNjk5MzAxMDBFMjhGMjM0MTBENkMwMDAwQkY4RjAwMDU0MworOjEwRkYyMDAwNDhCMTAwMDA2Mzk5MDAwNTQ4MzEwMTAwQjA4QTAwNDhEQgorOjEwRkYzMDAwODFCMDAwMDBENThEMjI0MDhGNkMwMDAwMzY5ODAwNUZBNAorOjEwRkY0MDAwODEzMDAxMDBENThEMDA0MDgxQjIwMDAwQTIwMDAwNDA0OAorOjEwRkY1MDAwNDM5OTAxMDAwMDAwMDBGMzg0QjAwMTAwQTYwMDJENDk4MAorOjEwRkY2MDAwMTk5MDAxMDAwMjAwMDBGMjgwRjQwMTAwQjgwMDJENDA1OQorOjEwRkY3MDAwODFCMjAxMDAwMDAwMDBGMjgwQzAwMTAwMDAwMDAwNDBEQQorOjEwRkY4MDAwODJGODAxMDAxOTAwMDA0MDgxOTgwMTAwRjM4RkEwNDAyMQorOjEwRkY5MDAwODI2QzAwMDAyQzAxMDA0MDgxOTgwMTAwRjM4RkEzNDA4NworOjEwRkZBMDAwODI2QzAwMDAwMDAwMDA0MTgwQjAwMTAwRjU4RjIwNEMwMQorOjEwRkZCMDAwODU2QzAwMDAwMDAwMDA0MTg1QzAwMTAwODYwMDIwNDBFMworOjEwRkZDMDAwRTRCMTAxMDBBMjAwMjA0MkU2QjEwMTAwRDU4RDAwNDA1RAorOjEwRkZEMDAwODFCMjAwMDBDNTk3MDA1MDgxMzAwMTAwRDU4RDAwNDBFRQorOjEwRkZFMDAwODFCMjAwMDAwNDgwMDAwMzQyQzkwMTAwMDQwMDIyRjAzNQorOjEwRkZGMDAwODAzMDAwMDAwMDAwMDA0MDhEQjAwMTAwNTU5OTAwNDBBNQorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDA4NzMwMDEwMEIwMDAyRjVDMUY5MDAxMDAwMDAwNjBGMEZECis6MTAwMDEwMDA4MEMwMDEwMDM2OTgwMDVGODEzMDAxMDBENThEMDA0MDFFCis6MTAwMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDBENThEMjI0NjVDCis6MTAwMDMwMDAxOTdDMDAwMEEwMDAwMDQwNDc5OTAxMDAwMTAwNjJGMjE1Cis6MTAwMDQwMDA5NkNDMDEwMEQ1OERBNjQwODEzMjAwMDAzNjk4MDA0QTNBCis6MTAwMDUwMDA4MTMwMDEwMDBCOTgwMDQ2OTUzMDAxMDBENThEMDA0MDlECis6MTAwMDYwMDA4MUIyMDAwMEQ1OEQyMjQ5MTk3QzAwMDA4NjAwMDA0MDM1Cis6MTAwMDcwMDA0Nzk5MDEwMDAxMDA2MkYyODBDQzAxMDBENThEQTY0MEI1Cis6MTAwMDgwMDA4MTMyMDAwMDM2OTgwMDRBODEzMDAxMDAwQjk4MDA0NzA5Cis6MTAwMDkwMDA5NTMwMDEwMEQ1OEQwMDQwODFCMjAwMDA3NDk1MDA0MDdDCis6MTAwMEEwMDA4MTMyMDEwMEQ1OEQwMDVDMUY5MDAwMDBENThEMDA0MDhECis6MTAwMEIwMDA4MUIyMDAwMEQ1OEQwMDQwODFCMjAwMDBCQTAwMDA0MDNFCis6MTAwMEMwMDA0Nzk5MDEwMDAxMDA2MkYyODBDODAxMDAxOTkwOTA0MDM4Cis6MTAwMEQwMDA4MDMyMDAwMEZGRkY2MjQwODE5ODAxMDBBNDAwMDA0MEQwCis6MTAwMEUwMDA0Nzk5MDEwMEQ1OEQyMjQwRTU2RDAwMDBENThEMDA0MTc2Cis6MTAwMEYwMDBFNUMxMDAwMEM1OTcwMDREODEzMDAxMDBENThEMDA0MDVECis6MTAwMTAwMDA4MUIyMDAwMDVDMDAwMDQwNDc5OTAxMDAwNDAwMjJGMDI5Cis6MTAwMTEwMDA5NjMwMDAwMDAwMDAwMDQwRTFCMTAxMDAwMDgwMDAwM0MzCis6MTAwMTIwMDA0NEM5MDEwMDAwMDAwMDRCRTBCMTAxMDAwMDAwMDA0MEE0Cis6MTAwMTMwMDA4REIwMDEwMDU1OTkwMDQwODczMDAxMDA4QjAwMDA0MEQwCis6MTAwMTQwMDA0Nzk5MDEwMDI5OTA4MEYzOTYzMDAwMDAwMDAwMDA0MDlDCis6MTAwMTUwMDBFNzgxMDEwMDAwMDAwMDQ3MTk5MDAxMDBENThEMDA1Qzg3Cis6MTAwMTYwMDAxRjkwMDAwMDM0MDAwMDQwNDU5OTAxMDAwMTAwMDA0MDRDCis6MTAwMTcwMDBGNTk5MDEwMDAwMTEwMDQwRTU5OTAxMDBERDk1MDA0MDZFCis6MTAwMTgwMDA4MTMyMDEwMDNFOTBBMjA4ODAzMjAwMDAzNzAwMDA0MDFBCis6MTAwMTkwMDA0Nzk5MDEwMDAwMDAwMEYzODJCMDAxMDAwMDAwNjM1MUE0Cis6MTAwMUEwMDA4M0QwMDEwMDM0MDAwMDQwNDc5OTAxMDAwMTAwNjNGMzRGCis6MTAwMUIwMDA4NENDMDEwMDM2OTA5RjQyODAzMjAwMDAwMDAwNjM0MkYwCis6MTAwMUMwMDA4NUIwMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMUJGCis6MTAwMUQwMDAwMEMwMDEwMDM4OTAzNzVDNjEzMTAwMDAwMDAwMDAxQjU2Cis6MTAwMUUwMDA2MkIxMDEwMDM5OTBBODRCMTkxMDAwMDAwMDAwMDAwMDE2Cis6MTAwMUYwMDA2MkIxMDEwMDNCOTBBODQwODEzMjAwMDAwNThBMTc0MDlGCis6MTAwMjAwMDA4MUIyMDAwMDAwODAwMDAzNDJDOTAxMDA5MDAwMkRGMDdGCis6MTAwMjEwMDA5NEIwMDEwMEFDMDAyREYwMzBCMDAxMDAzNTAwMkRGMDlECis6MTAwMjIwMDAyOEIwMDEwMDU4MDAzRTQzRTdFMTAxMDAwMTAwMDAxODNBCis6MTAwMjMwMDBGMEM5MDEwMDAwMDAwMDRBRTBCMTAxMDAzODAwMjAwMEQwCis6MTAwMjQwMDBFMEIxMDEwMDNDMDAyMDFCRTBCMTAxMDA0MDAwMjA0MDczCis6MTAwMjUwMDBFMUIxMDEwMDAwMDAwMDQwMkJCMDAxMDAxQTk4MDA0MEZECis6MTAwMjYwMDAwRDMwMDEwMDAwMDAwMDE4MTZDMDAxMDA0RDkwQTAxNEQwCis6MTAwMjcwMDAxNjQ0MDAwMDAwMDAwMDQxMTdDMDAxMDAwRTAwMDBBMjVCCis6MTAwMjgwMDA0NEM5MDEwMDAwMDAwMDE4RjhCMTAxMDBCMDAwMkQxNEFECis6MTAwMjkwMDBGOEIxMDEwMDEwNTAwMDQwODc5ODAxMDA1NjkwMjI0QUEyCis6MTAwMkEwMDAxOTdDMDAwMDAwMzAwMDQzODZDODAxMDAwMDMwMDAwQkJDCis6MTAwMkIwMDAxNkM4MDEwMDU2OTBBNDQwODEzMjAwMDAwMDAwMDA0MUExCis6MTAwMkMwMDAxN0MwMDEwMDAxMDA2RTQzODY5ODAxMDA1MTk4MDAzMDZDCis6MTAwMkQwMDA4MTMwMDEwMDVBOTBBMDQxMTc0MDAwMDAwMDAwMDA0MTA5Cis6MTAwMkUwMDAxN0MwMDEwMDYxOTAyMjRBMTk3QzAwMDAwODAwMDBBMjlBCis6MTAwMkYwMDA0NEM5MDEwMENDMDAyREFCRjlCMTAxMDAwMDAwMDBBQkY2Cis6MTAwMzAwMDAxN0MwMDEwMDYwOTBBMEYwMTY0NDAwMDAwMDAwMDA0MUZBCis6MTAwMzEwMDAxN0MwMDEwMDAwMDA2NEYwODJCMDAxMDA5MDAwMDA0MEFFCis6MTAwMzIwMDA0NTk5MDEwMDAwMDA2MDQxMzFDMDAxMDBCQzAwMDA0MDVGCis6MTAwMzMwMDA0Mzk5MDEwMDY3OTAwNjBDODAzMjAwMDBBMDAwMjBGMjczCis6MTAwMzQwMDBFNEIxMDEwMDA0MDAwOTQ2MTkxMDAwMDA5QzAxMDA0MEJFCis6MTAwMzUwMDA0NTk5MDEwMEZGRkYwMDBCOTg4ODAxMDA4QjAwMkQ1MDhDCis6MTAwMzYwMDAxN0YwMDEwMDZDOTA5MDRDMTY0MDAwMDAwMDAwMDA0MTE2Cis6MTAwMzcwMDAxN0MwMDEwMDZFOTAyMjQzRTc3RDAwMDAwMDAwMDA0NDlBCis6MTAwMzgwMDA0NUMxMDEwMDAwMDA2NjIwMTdBNDAxMDA2ODAxMDA0MDdCCis6MTAwMzkwMDA0Mzk5MDEwMDVDMDEyRUYyODBCMDAxMDAzRTAwMDA0MDU0Cis6MTAwM0EwMDA4MENFMDEwMDc1OTAyNDQwODEzMjAwMDAwMDAwMDA0NjlDCis6MTAwM0IwMDA4MUMwMDEwMDc2OTAwMDk0RTVCMTAwMDAwMjAwNjI0MDI3Cis6MTAwM0MwMDA3RUNEMDEwMDAwMDAwMDU3ODFDMDAxMDAwMDAwMkUxMDBBCis6MTAwM0QwMDA0OEIxMDEwMDAzMDAwMDQwRjA4RDAxMDAwMDAwMDAwODVBCis6MTAwM0UwMDBGMEIxMDEwMDU4MDEwMDA1RTBDOTAxMDAwMDAwMDA0NDFGCis6MTAwM0YwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA3QzkwQTg0MEQyCis6MTAwNDAwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTQxCis6MTAwNDEwMDA0OEIxMDEwMDg2OTAyMjQwQUY2RjAwMDAwMDQwMDAwODA0Cis6MTAwNDIwMDA5NERDMDEwMDg4OTgwMDQwODEzMjAxMDA4MTkwQTI0MDU0Cis6MTAwNDMwMDA5NzZDMDAwMDM1MDAwMDQwNDc5OTAxMDA4QTkwMDA0MDA5Cis6MTAwNDQwMDAwNUIwMDAwMDg2OTA0MzQ4NjEzMTAwMDAwMDUwMDAwODZDCis6MTAwNDUwMDA2MkREMDEwMDg3OTBBODQwMDUzMDAwMDAzNTAwMUI0MDk4Cis6MTAwNDYwMDA0Nzk5MDEwMDAxMDA2M0YzODRDODAxMDA4RDkwQTA0MzA3Cis6MTAwNDcwMDA4NTZDMDAwMDAwMDA2MzQwODVCMDAxMDAzNzAwMDA0MDNCCis6MTAwNDgwMDA0Nzk5MDEwMDAxMDA2M0YzODJDQzAxMDA4QjAwMDA0MDFBCis6MTAwNDkwMDA0Nzk5MDEwMDAwMDAwMDQ1RTc5MTAxMDAzNjk4MDA1RjkwCis6MTAwNEEwMDA4MTMwMDEwMEQ1OEQwMDQwODFCMjAwMDAzNzAwMDA0MDRFCis6MTAwNEIwMDA0Nzk5MDEwMDdGOTYwMEYzOTQzMDAxMDAyRDkwMjI0QTY1Cis6MTAwNEMwMDA4MDMyMDAwMEFCOEUwMDQwODFCMjAwMDAzNzAwMDA0MDU3Cis6MTAwNEQwMDA0Nzk5MDEwMDdGOTYwMEYzOTQzMDAxMDA3QjhFMjI0QUY5Cis6MTAwNEUwMDA4MDMyMDAwMEFCOEUwMDQwODFCMjAwMDAzNjAwMDA0MDM4Cis6MTAwNEYwMDA0Mzk5MDEwMDAwMDAwMEZCMTJCMDAxMDAwRjAwMDBGMzVGCis6MTAwNTAwMDA5MDg4MDEwMDA0MDAwMEYzMENGNDAxMDBBNThFMjIwNjdGCis6MTAwNTEwMDA5MDZDMDAwMDVDMDAzRDQzMTNFMDAxMDBBODAwMkRGMDRBCis6MTAwNTIwMDA5NEIwMDEwMDM3MDAyRkYwMjRCMDAxMDAzNjAwMkE1MEFCCis6MTAwNTMwMDBFN0QxMDEwMDAwMDA2MzQxMTNDMDAxMDBBNzkwQTA0MzcwCis6MTAwNTQwMDAxMzZDMDAwMDAwMDAwMDQwRTdCMTAxMDBFMTk0MDAxMENFCis6MTAwNTUwMDA4NjMwMDEwMDFCODQwMDg4MUNCMDAwMDBBOTkwNDIwNTcxCis6MTAwNTYwMDA0ODMxMDAwMDAwMDAwMDQ0OTM5MzAxMDBBNThFMUE1REZECis6MTAwNTcwMDA2OTkzMDAwMDM2MDAyRDEwODZCMDAxMDA1QzAwM0Q0M0Y5Cis6MTAwNTgwMDBFN0UxMDEwMEE4MDAyREYwOTRCMDAxMDAzNTAwMkZGMDQ0Cis6MTAwNTkwMDAyNEIwMDEwMDAxMDA2QkZCODRDODAxMDBCNDkwQTA0M0FCCis6MTAwNUEwMDA4NTZDMDAwMDM1MDAyMDQwRTdCMTAxMDAwMDAwMDA0MEVDCis6MTAwNUIwMDA4MUIyMDEwMDAxMDA2M0YzMTJDODAxMDBCNzkwQTA0M0FCCis6MTAwNUMwMDAxMzZDMDAwMDAwMDAwMDQwRTdCMTAxMDA0MDgwMDAwMzEwCis6MTAwNUQwMDA0NEM5MDEwMEUzOTQwMDRBRjAzMTAxMDAxQjg0MDA4ODAzCis6MTAwNUUwMDAxQ0IwMDAwMEJBOTA0MjA1NDgzMTAwMDAwMDAwMDA0NEYxCis6MTAwNUYwMDA5MzkzMDEwMDAwMDAxQTVENjk5MzAxMDAzNzAwMDA0MEU5Cis6MTAwNjAwMDA0Nzk5MDEwMDExMDA2M0YzODJDQzAxMDBBOThGMjI0MUI4Cis6MTAwNjEwMDA5RTA2MDAwMDM1MDAwMDQwNDM5OTAxMDA1ODAwM0Q0MzBDCis6MTAwNjIwMDBFN0UxMDEwMDAwMDAwMEY4MzZCMDAxMDBCMzhGMDBGMEYwCis6MTAwNjMwMDAwMEIwMDAwMDVFMDEyRDA1NDhCMTAxMDBDNTkwNDdGMkYxCis6MTAwNjQwMDAxMjMwMDAwMDAwOTkzRjQyMTNGMDAxMDBDQTkwMjI0Nzg3Cis6MTAwNjUwMDBFNzdEMDAwMDZCODQxRjg4MUNCMDAwMDBDNDkwMDA0MDQwCis6MTAwNjYwMDA4MUIyMDAwMDAwMDAwMDQ3RTc5MTAxMDAwMDAwMUY0MjM2Cis6MTAwNjcwMDAxOTkwMDEwMDc1MDAwMDQwNjE5OTAxMDBDQzkwQThCMTZCCis6MTAwNjgwMDAwQzMwMDAwMDVDOTcwMDEwOTQzMDAxMDAxQjg0MDA4ODNGCis6MTAwNjkwMDAxQ0IwMDAwMDVFMDEyRTA1NDhCMTAxMDBDMEE4M0Q0NjE3Cis6MTAwNkEwMDAwREUwMDEwMDAwMDAwMDQwOTdCMDAxMDBENjkwMjI0MDBDCis6MTAwNkIwMDBFMTZEMDAwMDA0MDAwMjQxOTc0MDAwMDBEMzkwMDA1MDFCCis6MTAwNkMwMDA0M0MxMDAwMEUyOTAyMjRCODAzMjAwMDAwMDAwNjI0QkU4Cis6MTAwNkQwMDAxMjk0MDEwMDA5MDAwMDA3OTZFNDAxMDAwMDAwMDBBNzQxCis6MTAwNkUwMDA5N0MwMDEwMDMwMDAwMDEwOTRDODAxMDAwMDgwMDA0QTRCCis6MTAwNkYwMDA0NDk5MDEwMDAwMDAwMDQyRjFCMTAxMDA1RTAxMDA0QjhECis6MTAwNzAwMDBGMEM5MDEwMDVFMDEwMDA1RTBDOTAxMDAwMDAwMDA0NERECis6MTAwNzEwMDA2MUIxMDEwMDIwMDAwMDRBNjJERDAxMDBFMDkwQTg0MEM0Cis6MTAwNzIwMDA4MTMyMDAwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MDI4Cis6MTAwNzMwMDBGMUIxMDEwMDA0MDAwMDA5OTZFNDAxMDAwMDAwNjhBODdFCis6MTAwNzQwMDA5N0MwMDEwMEQ0MDAwMDA1RTBDOTAxMDAwMDAwMDA0NDhBCis6MTAwNzUwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDBFODkwQTg0MDAyCis6MTAwNzYwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDk5M0Y0MkM5Cis6MTAwNzcwMDAxM0YwMDEwMEVDOTA0NzQwODEzMjAwMDAzRjAwMDBGMzhECis6MTAwNzgwMDA5Njg4MDEwMDAwMDAwMDQwRTdCMTAxMDAwMDAwMUY1NUZECis6MTAwNzkwMDA2MUIxMDEwMDAwMDAwMDA2NjJCMTAxMDBGMDkwQTg0MEM0Cis6MTAwN0EwMDA4MTMyMDAwMEY1OTAyMjRCODAzMjAwMDAwMDAwMDA0QkE3Cis6MTAwN0IwMDA2MkIxMDEwMEYzOTBBODQwODEzMjAwMDAwMDAwMDA5NzcwCis6MTAwN0MwMDAxM0IwMDEwMDAwMDAwMDk2OTdCMDAxMDBGQjkwMjAwOUQzCis6MTAwN0QwMDA5NjZDMDAwMEZCOTAxRjA5OTYyNDAwMDA2Qjg0MDA4ODMzCis6MTAwN0UwMDAxQ0IwMDAwMEY2OTAwMDQwODFCMjAwMDBDNTk3MDA1NzkxCis6MTAwN0YwMDA4MTMwMDEwMEMwOEQwMDA1NDhCMTAwMDAyRTAwMDA0MDhFCis6MTAwODAwMDA0Mzk5MDEwMDAxOTEyMkYzODAzMjAwMDBDNTk3MDA0MjE0Cis6MTAwODEwMDA4MTMwMDEwMDA1OEEwMDQwODFCMjAwMDAzNjk4MDA1MjA0Cis6MTAwODIwMDA4MTMwMDEwMEMwOEQwMDQyMTk4MDAwMDBDNTk3MDAzQTU4Cis6MTAwODMwMDA4MTMwMDEwMDM2OTgwMDUyODEzMDAxMDBDMDhEMDA0MEE3Cis6MTAwODQwMDA4MUIyMDAwMDAwMDAwMDQwMDVCMDAxMDBERjk2MDA0MENBCis6MTAwODUwMDA5NTMwMDEwMEMwOEQyMjQwOTU2QzAwMDAwQzkxQTI0MEEzCis6MTAwODYwMDAxRjdDMDAwMEUyOTUwMDQwODEzMjAxMDAwNThBMDA0MEIzCis6MTAwODcwMDA4MUIyMDAwMDA0ODAwMDAzNDJDOTAxMDAwMDAwMDBGMkMwCis6MTAwODgwMDAwMkIwMDEwMDhBOTYwMDUyOTUzMDAxMDA5MTk2MDA0QjBCCis6MTAwODkwMDAwMkIwMDAwMDA1OEEwMDQwODFCMjAwMDAwQTk5MDA0MEMxCis6MTAwOEEwMDA5NTMwMDEwMDE4OTFBMjA4ODAzMjAwMDAxODkxQTIxNjFDCis6MTAwOEIwMDA4MDMyMDAwMDA1OEEyMjQyMTk3QzAwMDAwMDAwMDA0QkIzCis6MTAwOEMwMDAxOTkwMDEwMEM1OTcwMDNBODEzMDAxMDAwNThBMDA0MDY3Cis6MTAwOEQwMDA4MUIyMDAwMDAwMjMwMEE2MTZCMDAxMDAxQjkxODMxRTA4Cis6MTAwOEUwMDA4MDMyMDAwMDAwMDgwMDBCMTZEQzAxMDAwMDAwMDAwMDUwCis6MTAwOEYwMDAyQUMwMDEwMDBFOTgwMDA4ODAzMDAxMDAxRjkxMDA1RUEwCis6MTAwOTAwMDAxNzkwMDAwMDJGOTgwMDQzNjEzMTAxMDBFRjk0MDA0MEUwCis6MTAwOTEwMDA4RDMwMDEwMDE2OTgwMDA3MTYxNDAxMDAwMDgwMDAxMEE5Cis6MTAwOTIwMDA0MkM5MDEwMDI3OTEyMjQwRTM2RDAwMDAwMDAwMDA0MzBFCis6MTAwOTMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAyNDkxQTg0MDc3Cis6MTAwOTQwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDBCNzk3MDA1RTU1Cis6MTAwOTUwMDAwNTEwMDEwMEUyOTUwMDQwODEzMjAxMDAyQjkxMjIwOTJGCis6MTAwOTYwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDBDNThEMDAwNTJFCis6MTAwOTcwMDA0OEIxMDAwMDBGOTcwMDQwODEzMjAxMDBDMDhEMDA0MDU3Cis6MTAwOTgwMDA4MUIyMDAwMDAwMDAwMDRBMUY5MDAxMDAzMjkxMjI0MzEyCis6MTAwOTkwMDAzRDdDMDAwMDAwMDAwMDQ0MTk5MDAxMDAwMDAwMDA0MzZECis6MTAwOUEwMDAzRDgwMDEwMDMzOTEwMDQyMTk5MDAwMDAxNDAwMkQ0NTU0Cis6MTAwOUIwMDAxRjkwMDEwMDhGOTE4MzFFODAzMjAwMDA4RjkxMDA0NEIwCis6MTAwOUMwMDAxOTkwMDAwMEQ0OTUwMDQwODEzMjAxMDA0NzkxQTIwODlGCis6MTAwOUQwMDA4MDMyMDAwMDQ3OTFBMjE2ODAzMjAwMDA0MzkxQTI0MjZCCis6MTAwOUUwMDAxOTdDMDAwMDAwODIwMDAyMDREQzAxMDBBMDk4MDA0MDk1Cis6MTAwOUYwMDA0Nzk5MDEwMEU5ODkwMDQxODkzMDAxMDA0MDkxQTI0MUY1Cis6MTAwQTAwMDAxOTdDMDAwMEUyOTUwMDQwODEzMjAxMDAwNThBMDA0MDE3Cis6MTAwQTEwMDA4MUIyMDAwMDhBOTYwMDE1OTQzMDAxMDA5MTk2MDA0QjM3Cis6MTAwQTIwMDAwMkIwMDAwMDA1OEEwMDQwODFCMjAwMDAwRjk3MDA0MDJDCis6MTAwQTMwMDA4MTMyMDEwMDAwMDAwMDRCMTk5MDAxMDBDNTk3MDAzQTc3Cis6MTAwQTQwMDA4MTMwMDEwMDA1OEEwMDQwODFCMjAwMDA0QTkxMjI0MkIzCis6MTAwQTUwMDAxOTdDMDAwMDBGOTcwMDQwODEzMjAxMDA0QjkxMDA0MDRCCis6MTAwQTYwMDA4MUIyMDAwMERGOTYwMDQwODEzMjAxMDA3NzkxMjI0MTdGCis6MTAwQTcwMDAxOTdDMDAwMEMwMDAwMDE1OThDODAxMDA3NzkxQTAwQkY4Cis6MTAwQTgwMDA5OTZDMDAwMDMwMDAwMDEwODBDODAxMDAwMDgwMDA0MDE4Cis6MTAwQTkwMDA0NDk5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzgyCis6MTAwQUEwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDA0MDBGCis6MTAwQUIwMDA2MkIxMDEwMDUzOTFBODAwRTAzMTAwMDAxQjg0MDA4ODVFCis6MTAwQUMwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDBDMDAwMDAxNTg2Cis6MTAwQUQwMDA5OEM4MDEwMDMwMDAyRTBCOTlEMDAxMDAwMDAwNkE1MDI4Cis6MTAwQUUwMDA5OUMwMDEwMEMwMDA2MjAxODBDQzAxMDAwQzgwMDAwM0FECis6MTAwQUYwMDA0MkM5MDEwMDJEMDAyREYwMjJCMDAxMDAwMDAwMDA0QzgxCis6MTAwQjAwMDA4MEMwMDEwMDAwMDAwMDVDMjM4MDAxMDBENDAwM0Y0MTUwCis6MTAwQjEwMDBFN0UxMDEwMDBCMDAwMDExRTRGNTAxMDAyRjAwMjA0NzgwCis6MTAwQjIwMDBFN0I1MDEwMDY0OTEyMzBCODE2QzAwMDAwMDAwMDA0RkM5Cis6MTAwQjMwMDBFNTkxMDEwMDAwMDAwMDA4ODBCMDAxMDAwMDAwMDAwQkZBCis6MTAwQjQwMDAwM0IwMDEwMDAwMDAwMDE1MDJEMDAxMDAwRTk4MDAwMDYzCis6MTAwQjUwMDAyQTQwMDEwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDg0Cis6MTAwQjYwMDA2MkREMDEwMDY5OTFBODQwODEzMjAwMDAxQjg0MDA4ODg5Cis6MTAwQjcwMDAxQ0IwMDAwMEUyOTUwMDA1NDgzMTAxMDBDMDAwMDAwMUYyCis6MTAwQjgwMDA4MENFMDEwMDc1OTEyNjExMDAzMDAwMDAxMDAwMDAwMDk5Cis6MTAwQjkwMDAyQUM4MDEwMDAwMDAwMDA4ODBCMDAxMDAwMDAwMDAwMTI4Cis6MTAwQkEwMDA4MEMwMDEwMEMwMDAwMDQwOTk5ODAxMDAwMDAwMDAwMUQxCis6MTAwQkIwMDA5OEQwMDEwMDBFOTgwMDRDMDIzMDAxMDBDMDAwMDA0MEE3Cis6MTAwQkMwMDAwMzk4MDEwMDdDOTEwMDQwODFCMjAwMDAzMDAwMkYwOEEyCis6MTAwQkQwMDA4MEIwMDEwMEMwMDAwMDE1RjRDOTAxMDBDMDAwMDAwMTkwCis6MTAwQkUwMDBFNENEMDEwMEMwMDAwMDQwMDM5ODAxMDAwRTk4MDAwMDExCis6MTAwQkYwMDAyQTQwMDEwMDgxOTEyMjQ0MUY3QzAwMDBBQzAwMkY0MDVDCis6MTAwQzAwMDAxM0IwMDEwMDAwMDAwMDAxRTBDMTAxMDBCMDAwMDA0MDhECis6MTAwQzEwMDA0Nzk5MDEwMDgyOTEwMDAxRTBEMTAwMDBFRjk0MDA0MDZCCis6MTAwQzIwMDA4RDMwMDEwMDgwNjMwMEE2MTZCMDAxMDAxNjk4MDAwNzAxCis6MTAwQzMwMDAxNjE0MDEwMDAwODAwMDEwNDJDOTAxMDA4QTkxMjI0MDcwCis6MTAwQzQwMDBFMzZEMDAwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMEFFCis6MTAwQzUwMDA2MkREMDEwMDg3OTFBODQwODEzMjAwMDAxQjg0MDA4ODdBCis6MTAwQzYwMDAxQ0IwMDAwMEI3OTcwMDVFMDUxMDAxMDA4RDkxMjIwOUFECis6MTAwQzcwMDA4MDMwMDAwMDM2OTgwMDQwODEzMjAxMDBDMDhEMDAwNUIwCis6MTAwQzgwMDA0OEIxMDAwMDhGOTEwMDRBMUY5MDAwMDAwMDAwMDAwMDUyCis6MTAwQzkwMDAxMEIwMDEwMDI0MDAyRDE1MTBDMDAxMDAyODAwMkRGMDE3Cis6MTAwQ0EwMDAxNkIwMDEwMDIyMDAyREYwMjZCMDAxMDAxNDAwMkZGMjMyCis6MTAwQ0IwMDAwQ0IwMDEwMDAwMDAwMDAxRTBEMTAxMDAwMDAwMDAxMEI0Cis6MTAwQ0MwMDAzMkIwMDEwMDAwMDAwMDBCMUJCMDAxMDAwNDAwMUYxNTMyCis6MTAwQ0QwMDAxQTUwMDAwMDAwMDAwMDQwMjNCMDAxMDAwMDAwMDAwMTk1Cis6MTAwQ0UwMDAyQUIwMDEwMDcxOTcwMDQwMzVCMDAwMDAyRjAwMjA0MDZECis6MTAwQ0YwMDBFN0IxMDEwMEQzOTFBMjQ1MUY3QzAwMDAyNDAwMjAwQjI2Cis6MTAwRDAwMDBFMEIxMDEwMDI4MDAyMDEzRTBCMTAxMDAyMjAwMjAwNjFDCis6MTAwRDEwMDBFNEIxMDEwMEE5OTEyMjVDMUY3QzAwMDAwMDAwMDA1QzhFCis6MTAwRDIwMDAxRjgwMDEwMDMwODAwMDEwNDJDOTAxMDBBOTkxMjI0MEJCCis6MTAwRDMwMDBFMzZEMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMEI5Cis6MTAwRDQwMDA2MkREMDEwMEE1OTFBODQwODEzMjAwMDAxQjg0MDA4ODZCCis6MTAwRDUwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwMDgwMDAxOTJGCis6MTAwRDYwMDA0MkM5MDEwMENDOTEyMjQwRTM2RDAwMDBCQTkxMjI0MkI5Cis6MTAwRDcwMDAxOTdDMDAwMDM3OTcwMDQwODEzMjAxMDA4OTk1MDA0MEJFCis6MTAwRDgwMDA4MTMyMDEwMEM3OTEyMjRCODAzMjAwMDAwMDAwMDA0M0Y1Cis6MTAwRDkwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBCMDkxQTg0MDg3Cis6MTAwREEwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDBCNjkxMjI0MUYzCis6MTAwREIwMDAxOTdDMDAwMEY4OTUwMDQwMTEzMDAxMDBCNzkxMDAwNTQyCis6MTAwREMwMDA0OEIxMDAwMEUyOTUwMDQwODEzMjAxMDBCOTkxMjIwOTRBCis6MTAwREQwMDA4MDMwMDAwMDM2OTgwMDQwODEzMjAxMDA2Rjg0MDA0MDZFCis6MTAwREUwMDAwNUIwMDAwMDM3OTcwMDQwODEzMjAxMDA4NTk1MDA0MDMyCis6MTAwREYwMDA4MTMyMDEwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDk5Cis6MTAwRTAwMDA2MkREMDEwMEJEOTFBODQwODEzMjAwMDAxQjg0MDA4ODkyCis6MTAwRTEwMDAxQ0IwMDAwMEMzOTEyMjQxMTk3QzAwMDBGODk1MDA0MEVECis6MTAwRTIwMDAxMTMwMDEwMEM0OTEwMDA1NDhCMTAwMDBFMjk1MDA0MDc2Cis6MTAwRTMwMDA4MTMyMDEwMEM2OTEyMjA5ODAzMDAwMDAzNjk4MDA0MEJFCis6MTAwRTQwMDA4MTMyMDEwMDZGODQwMDQwMDVCMDAwMDAwMDAwMDA0M0MzCis6MTAwRTUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBDODkxQTg0MEFFCis6MTAwRTYwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUQ3Cis6MTAwRTcwMDA0OEIxMDEwMENGOTEyMjQxMTk3QzAwMDBGODk1MDA0MDUzCis6MTAwRTgwMDAxMTMwMDEwMEQwOTEwMDA1NDhCMTAwMDBFMjk1MDA0MDBBCis6MTAwRTkwMDA4MTMyMDEwMEQyOTEyMjA5ODAzMDAwMDAzNjk4MDA0MDUyCis6MTAwRUEwMDAxMzMwMDEwMEM1OEQwMDQwMDVCMDAwMDAwMDgwMDAxOTFFCis6MTAwRUIwMDA0MkM5MDEwMERBOTEyMjQwRTM2RDAwMDAwMDAwMDA0M0M2Cis6MTAwRUMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBENjkxQTg0MDMwCis6MTAwRUQwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTY3Cis6MTAwRUUwMDA0OEIxMDEwMDAwMDAwMDQwMDVCMDAxMDBERTkxMjI0MTQwCis6MTAwRUYwMDAxOTdDMDAwMEY4OTUwMDQwMTEzMDAxMDBERjkxMDAwNUQ5Cis6MTAwRjAwMDA0OEIxMDAwMEUyOTUwMDQwODEzMjAxMDAwODAwMkQwQTNFCis6MTAwRjEwMDA4NEIwMDEwMDAwMDAwMEYwODJCMDAxMDAxNDAwMjA0MDA1Cis6MTAwRjIwMDBFMUIxMDEwMEU0OTEwMzFFODAzMjAwMDBFNTkxMDA0MTJGCis6MTAwRjMwMDA4N0IwMDAwMDIxMDAwMDQwODc5ODAxMDAwMDk3MDA0MDIyCis6MTAwRjQwMDA4MTMyMDEwMDAwMDAwMDVDMUY5MDAxMDBFOTkxMjIwOTNDCis6MTAwRjUwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDBFQzkxMjI0NEFDCis6MTAwRjYwMDAxOTdDMDAwMDM2OTgwMDRGODEzMDAxMDAwMDAwMDA0NEQ5Cis6MTAwRjcwMDAxOTgwMDEwMEMwOERBMjRBMUY3QzAwMDBDNThEMDA0MDcxCis6MTAwRjgwMDA4MUIyMDAwMEJBMDAyMDQwRTVCMTAxMDBGMjkxOUMxNzQ3Cis6MTAwRjkwMDA4MDMyMDAwMENDMDAwMDQwNDM5OTAxMDAxMzk5MDA0MENBCis6MTAwRkEwMDA4MTMyMDEwMEEzOTgwMDQwMTMzMDAxMDBDMDAwMDA0MENFCis6MTAwRkIwMDA0Mzk5MDEwMEM0MDAyREYwODJCMDAxMDBFRTk4MDBGMENBCis6MTAwRkMwMDA4NDMwMDEwMEUyOTUwMDQwODEzMjAxMDBDNThEMjIwOTg0Cis6MTAwRkQwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDBDNThEMDA0MDdECis6MTAwRkUwMDA4MUIyMDAwMDJFMDAwMDQwNDM5OTAxMDBGRTkxMjI0MDkyCis6MTAwRkYwMDBFNzZEMDAwMDMyMDAwMDQwNDM5OTAxMDAwNjkyQTI0MEQ0Cis6MTAxMDAwMDBFNTZEMDAwMENDOTYwMDQwODEzMjAxMDAyNDAwMjAwQkU5Cis6MTAxMDEwMDBFMEIxMDEwMDI4MDAyMDEzRTBCMTAxMDAyMjAwMjAwNjA5Cis6MTAxMDIwMDBFNEIxMDEwMDE0MDAyMDBBRTBCMTAxMDBDNThEMjIwOURECis6MTAxMDMwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDBDNThEMDA0MDFDCis6MTAxMDQwMDA4MUIyMDAwMENDOTYwMDQwODEzMjAxMDA4NTk2MDA0MEJDCis6MTAxMDUwMDA4MTMyMDEwMDE0OTIyMjQxMTk3QzAwMDAwMDAwMDAwQjMzCis6MTAxMDYwMDA5OUIwMDEwMDA0MDAxRjE1OTg1MDAwMDAxNDkyMjAwMTRGCis6MTAxMDcwMDA5ODZDMDAwMDcwMDAwMDAzNDhDOTAxMDAwMDAwMkU0NjczCis6MTAxMDgwMDAxRjkwMDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwM0JBCis6MTAxMDkwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDBBMDAwMDBBNDE1Cis6MTAxMEEwMDA2MkREMDEwMDExOTJBODAwRTAzMTAwMDAwMDAwMDAwNTlGCis6MTAxMEIwMDA0OEIxMDEwMEFDMDAyRjAwMTBCMDAxMDAwMDAwMDAwMTk5Cis6MTAxMEMwMDBFMEMxMDEwMDE0MDAyRjE1MTBDMDAxMDAwMDAwMDAwQTRCCis6MTAxMEQwMDA4MEIwMDEwMDAwMDA2MDAxODBEMDAxMDAwMDAwMDA0N0U2Cis6MTAxMEUwMDAxOTkwMDEwMDk2OTEyMjA5ODAzMjAwMDAzNjk4MDAwOTdCCis6MTAxMEYwMDA4MDMwMDEwMDk2OTEwMDQwMTNCMDAwMDAwMDgwMDAwMzkyCis6MTAxMTAwMDA0MkM5MDEwMDAwMDAwMEYwODJCMDAxMDAxMzAwMDA0MDVECis6MTAxMTEwMDA4Nzk4MDEwMDAwMDAwMDRDNDNDMTAxMDAwMDk3MDBGMEQ3Cis6MTAxMTIwMDA4NDMwMDEwMEMwOEQwMDVDMUY5MDAwMDAyQzAwMjA0MDI2Cis6MTAxMTMwMDBFN0IxMDEwMDJEMDAyMDQwRTdCMTAxMDBDMDhEMDA0MjYxCis6MTAxMTQwMDAxOTgwMDAwMEYyOTYwMDQwODEzMjAxMDAwQjk4MDA0ODlGCis6MTAxMTUwMDA5NTMwMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDIxCis6MTAxMTYwMDA2MkREMDEwMDI5OTJBODQwMTMzMDAwMDAxQjg0MDA4ODMyCis6MTAxMTcwMDAxQ0IwMDAwMDJGOTIwMDA1NDhCMTAwMDAyRTkyMDA0MEU0Cis6MTAxMTgwMDAxM0IwMDAwMDAwMDAwMDAwMTJCMDAxMDAwODAwMDA0MDkxCis6MTAxMTkwMDA0Mzk5MDEwMDE0MDAyREYwODJCMDAxMDAwNDAwMjJGMEY4Cis6MTAxMUEwMDA4NDMwMDAwMDEzMDAwMDQwODc5ODAxMDAwMDk3MDA0MDQxCis6MTAxMUIwMDA4MTMyMDEwMDAwMDAwMDVDMUY5MDAxMDA0NzkyMDAwOThECis6MTAxMUMwMDAwMEIwMDAwMEMwOEQ4NzQyMTkxMDAwMDA4QjAwMkY0NzJGCis6MTAxMUQwMDAxOTgwMDEwMEMwOEQwMDQwRTc5MTAwMDAyRjAwMDA0MDAxCis6MTAxMUUwMDA0Nzk5MDEwMDQ1OTIyMjQ3RTc3RDAwMDA2Njk1MDA0MDNGCis6MTAxMUYwMDBFNzMxMDEwMDQ1OTIyMjAwODAzMjAwMDA0MDkyQTI0MDc3Cis6MTAxMjAwMDAxRjdDMDAwMEUyOTUwMDQwODEzMjAxMDA0NTkyMDA0MEMxCis6MTAxMjEwMDA4MUIyMDAwMDMwMDAwMDQwNDM5OTAxMDAzMjAwMkRGMkZECis6MTAxMjIwMDA5NEIwMDEwMDhBOTYwMEYyMDIzMDAxMDA5MTk2MDA0QkMyCis6MTAxMjMwMDAwMkIwMDAwMDAwMDAwMDA1NDhCMTAxMDA0NjkyMDA0MEU1Cis6MTAxMjQwMDAwMUIwMDAwMDAwMDAwMDQwMDVCMDAxMDA0QzkyMjIwMEY3Cis6MTAxMjUwMDA4MDMyMDAwMDRCOTJBMjQyMTk3QzAwMDBERjk2MDA0MEQxCis6MTAxMjYwMDA4MTMyMDEwMDRDOTIwMDQwODFCMjAwMDAwRjk3MDA0MDkzCis6MTAxMjcwMDA4MTMyMDEwMEQ4OTIyMjVDMUY3QzAwMDAwMDAwMDA1Q0RCCis6MTAxMjgwMDAxRjgwMDEwMDAwODAwMDEwNDJDOTAxMDA1NDkyMjI0MERBCis6MTAxMjkwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDU2Cis6MTAxMkEwMDA2MkREMDEwMDUxOTJBODQwODEzMjAwMDAxQjg0MDA4ODU5Cis6MTAxMkIwMDAxQ0IwMDAwMEQ4OTIwMDA1NDhCMTAwMDBENDk1MDA0MDUxCis6MTAxMkMwMDA4MTMyMDEwMDVCOTJBMjA4ODAzMjAwMDA1QjkyQTIxNjdDCis6MTAxMkQwMDA4MDMyMDAwMEM1OTcwMDREODEzMDAxMDAwMDgyMDAwMjdECis6MTAxMkUwMDAwNERDMDEwMDA1OEEwMDQwODFCMjAwMDA3NDAwMDA0MDY3Cis6MTAxMkYwMDA0Mzk5MDEwMDAwMDAwMEY4ODJCMDAxMDAwMDAwMDBGMEY2Cis6MTAxMzAwMDA4NEIwMDEwMDAwMDAwMDQxOTZCMDAxMDA2OTkyMjI0MkMxCis6MTAxMzEwMDA5NjE0MDAwMDAwODAwMDEwNDRDOTAxMDA2NDAwNjg0MDc5Cis6MTAxMzIwMDA5Nzk4MDEwMDAwMDAwMDQxRjBCMTAxMDAwMDAwMDA0MjY4Cis6MTAxMzMwMDBGMEIxMDEwMDcwMDAwMDA1RTBDOTAxMDAwMDAwMDA0NUE3Cis6MTAxMzQwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDA2NjkyQTg0MDNBCis6MTAxMzUwMDA4MTMyMDAwMDAwMDAwMDVDMUY5MDAxMDAwMDAwMDA0NTg5Cis6MTAxMzYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA2QTkyQTg1Q0RBCis6MTAxMzcwMDAxRjAwMDAwMDFCODQwMDg4MUNCMDAwMDA1RTAxMkQwNUNBCis6MTAxMzgwMDA0OEIxMDEwMDZFOTI0N0YyMTIzMDAwMDAwMDk5M0Y0MkNFCis6MTAxMzkwMDAxM0YwMDEwMDczOTIyMjQ3RTc3RDAwMDA2Qjg0MUY4OEUxCis6MTAxM0EwMDAxQ0IwMDAwMDZEOTIwMDQwODFCMjAwMDAwMDAwMDA0N0I4Cis6MTAxM0IwMDBFNzkxMDEwMDA0MDAxRjA5OTZFNDAxMDAwMDgwMDAxMDdECis6MTAxM0MwMDA0NEM5MDEwMDAwMDAwMDQ0RjFCMTAxMDAwMDAwNjhBODE4Cis6MTAxM0QwMDA5N0MwMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDgwMDAwMzlECis6MTAxM0UwMDA0NDk5MDEwMDAwMDAwMDQ0NjFCMTAxMDAwMDAwMDAxMEI4Cis6MTAxM0YwMDA2MkIxMDEwMDdCOTJBODQwRTEzMTAwMDAxQjg0MDA4OEFCCis6MTAxNDAwMDAxQ0IwMDAwMDAwOTkzRjQyMTNGMDAxMDA3RjkyNDcwNTk1Cis6MTAxNDEwMDA0ODMxMDAwMDNGMDAwMEYzOTY4ODAxMDAwMDAwMDA0MEMyCis6MTAxNDIwMDBFN0IxMDEwMDAwMDAxRjQwODFCMjAxMDA4NzkyMjI0QjBBCis6MTAxNDMwMDA4MDMyMDAwMDAwMDAwMDU1NjFCMTAxMDAwMDAwMDA0QjQ3Cis6MTAxNDQwMDA2MkIxMDEwMDg1OTJBODQwODEzMjAwMDAwMDAwMDAwN0NGCis6MTAxNDUwMDAxNkIwMDEwMDAwNjIwMDBCMTZEQzAxMDA2Njk1MDA0MDJBCis6MTAxNDYwMDA4MTMyMDEwMDlGOTIyMjAwODAzMjAwMDAxNTk3MDA1RkI4Cis6MTAxNDcwMDAwMTEwMDEwMDg5OTIyMjQwOTU2QzAwMDAwMDgwMDAxMDRDCis6MTAxNDgwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzU4Cis6MTAxNDkwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMDQ1Cis6MTAxNEEwMDA2MkIxMDEwMDkxOTJBODAwRTAzMTAwMDAxQjg0MDA4ODI1Cis6MTAxNEIwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwNDgwMDAwM0RBCis6MTAxNEMwMDA0MkM5MDEwMDAwMDAwMEYyMDJCMDAxMDA4QTk2MDA1MkY5Cis6MTAxNEQwMDA5NTMwMDEwMEUyOTUwMDQwODEzMjAxMDA4OTkyMjI0MTVECis6MTAxNEUwMDA5NzUwMDAwMDBDODAwMDAzNDJDOTAxMDAwMDAwMDBGMDhBCis6MTAxNEYwMDAwMEIwMDEwMDAwMDAwMDVDMDE4MDAxMDA5MTk2MDA0QkVCCis6MTAxNTAwMDAwMkIwMDAwMDg5OTIwMDA1NDhCMTAwMDAxNjk4MDA0MDIyCis6MTAxNTEwMDAwMzMwMDEwMDE3ODAwMDAzNDRDOTAxMDAwMEYwMDAwQ0YzCis6MTAxNTIwMDA5Njg4MDEwMDAwMDA2MzRDOTdGMDAxMDAxMDgwMDAwM0QyCis6MTAxNTMwMDA0NEM5MDEwMDAwMDAwMEFCRTFCMTAxMDBCNzk3MDA1RUIzCis6MTAxNTQwMDAwNTEwMDEwMDAzMDAwMDA3MUFGNDAxMDAwNzAwMDAwNzVFCis6MTAxNTUwMDAxNjg4MDEwMDAwQjUwMDBENDZDOTAxMDBBOTkyMzA0MDZGCis6MTAxNTYwMDA4MTMyMDAwMDAwMDAwMDBCRTY4MTAxMDAwMEI3MDAwRDkxCis6MTAxNTcwMDA0NkM5MDEwMDAwMDAwMDBCRTY4MTAxMDAxMDAwMTAwRkI5Cis6MTAxNTgwMDA5NEY0MDEwMEU5OTkwMDVGOTUwNDAxMDA2Qjk2MDA0MDE2Cis6MTAxNTkwMDA4MTMyMDEwMEIzOTIyMjUwRkQ3RjAwMDBCMTkyNDM0MDlFCis6MTAxNUEwMDA4MTMyMDAwMDAwMDAxQjQxMzFEMzAxMDAwMDAwMkUwNUY0Cis6MTAxNUIwMDA0OEIxMDEwMDAwMDAwMDQwRTFCMTAxMDAwMDAwMDA0MDFFCis6MTAxNUMwMDAwRkIwMDEwMENEOTUwMDQxODEzMDAxMDAwNThBMDA0MDM3Cis6MTAxNUQwMDA4MUIyMDAwMEQ0OTUwMDQwODEzMjAxMDBDNTkyQTIwODdBCis6MTAxNUUwMDA4MDMyMDAwMEM1OTJBMjE2ODAzMjAwMDAwMDgyMDAwMjA0Cis6MTAxNUYwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMUQwCis6MTAxNjAwMDAwMEMwMDEwMEJFOTIzNzVDNjEzMTAwMDAwMDAwMDAxQjg5Cis6MTAxNjEwMDA2MkIxMDEwMEMyOTIyODQwODEzMjAwMDBCRjkyMDA0MEI2Cis6MTAxNjIwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDBDMjkyQTg0MDM3Cis6MTAxNjMwMDA4MTMyMDAwMDA1OEExNzQwODFCMjAwMDA3NDAwMjI0MDA4Cis6MTAxNjQwMDBGMUIxMDEwMDAwMDAwMDQwRTFCMTAxMDAwQjk4MDA0QTM3Cis6MTAxNjUwMDA5NTMwMDEwMEYyOTYwMDVDMUYxMDAxMDA1QjkyMDA0MDgzCis6MTAxNjYwMDA4MUIyMDAwMDJGMDAwMDQwNDc5OTAxMDBENjkyMjI0NzI2Cis6MTAxNjcwMDBFNzdEMDAwMDY2OTUwMDQwRTczMTAxMDBENjkyMjIwMDI4Cis6MTAxNjgwMDA4MDMyMDAwMEQxOTJBMjQwMUY3QzAwMDBFMjk1MDA0MDExCis6MTAxNjkwMDA4MTMyMDEwMEQ2OTIwMDQwODFCMjAwMDAzMDAwMDA0MDRCCis6MTAxNkEwMDA0Mzk5MDEwMDMyMDAyREYyOTRCMDAxMDA4QTk2MDBGMkI1Cis6MTAxNkIwMDAwMjMwMDEwMDkxOTYwMDRCMDJCMDAwMDAwMDAwMDAwNUNFCis6MTAxNkMwMDA0OEIxMDEwMDBCOTgwMDQ4OTUzMDAxMDBGMjk2MDA1QzhCCis6MTAxNkQwMDAxRjEwMDEwMERCOTI4NzQyMTkxMDAwMDA4QjAwMkY0NzdBCis6MTAxNkUwMDAxOTgwMDEwMDAwMDAwMDQwRTc5MTAxMDAzNjk4MDA0Mjk3Cis6MTAxNkYwMDA4MTMwMDEwMEMwOEQwMDQwODFCMjAwMDBGMjk2MDA0MEIwCis6MTAxNzAwMDA4MTMyMDEwMEMwOEQwMDVDMUY5MDAwMDBCQTAwMjA0MEIzCis6MTAxNzEwMDBFNUIxMDEwMEEzOTgwMDQwODEzMjAxMDBDMDAwMDA0MDAzCis6MTAxNzIwMDA0Mzk5MDEwMEM0MDAyREYwODJCMDAxMDBFRTk4MDBGMDUyCis6MTAxNzMwMDA4NDMwMDEwMEUyOTUwMDQwODEzMjAxMDAzNjk4MDA0NTc2Cis6MTAxNzQwMDA4MTMwMDEwMEMwOEQyMjQyMTk3QzAwMDBDNTk3MDAzQTBCCis6MTAxNzUwMDA4MTMwMDEwMEMwOEQwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAxNzYwMDA4MUIyMDAwMEQ0OTUwMDQwODEzMjAxMDBGMDkyQTIwOEJECis6MTAxNzcwMDA4MDMyMDAwMEYwOTJBMjE2ODAzMjAwMDBDNTk3MDA0NzI4Cis6MTAxNzgwMDA4MDMwMDEwMDAwODIwMDAyMDREQzAxMDAwNThBMDA0MDc0Cis6MTAxNzkwMDA4MUIyMDAwMDEwODAwMDAzNDRDOTAxMDAwMEUxMDBBNkVFCis6MTAxN0EwMDA4NEIwMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0MEUxCis6MTAxN0IwMDBGMUIxMDEwMDAwMDA2MDA3ODQ5NDAxMDBCNzk3MDA1RTVBCis6MTAxN0MwMDAwNTEwMDEwMEMwOEQwMDQwODFCMjAwMDA4QTAwMDA0MDc5Cis6MTAxN0QwMDA0Nzk5MDEwMEUyOTUwMDQxRTc0MTAxMDBDNThEMDA0MEI1Cis6MTAxN0UwMDA4MUIyMDAwMENDOTYwMDQwODEzMjAxMDA4NTk2MDA0MDE1Cis6MTAxN0YwMDA4MTMyMDEwMDAwMDAwMDAxMkNCMDAxMDAwMDAwMDAxNTQyCis6MTAxODAwMDAxMEIwMDEwMDAwMDAwMDAwMTBDMDAxMDAwNDAwMUYwQTE5Cis6MTAxODEwMDAyQzUwMDAwMDAwMDAwMDEwMzJCMDAxMDAwNzAwMDAwQjQ3Cis6MTAxODIwMDA5Njg4MDEwMDBDOTMyNjQ3OTcyNDAwMDAwMDAwMDA0MTkxCis6MTAxODMwMDA5N0MwMDEwMDBDOTMyMzRCMEM2QzAwMDA0OTk4MDA0QjlGCis6MTAxODQwMDAwNDMwMDEwMDAwMDAwMDUwMzNDMDAxMDAwMDAwMDAwMjFECis6MTAxODUwMDAxMEMwMDEwMDAwMDAwMDAyMTZDMDAxMDAwMDAwMDAwNkQ4Cis6MTAxODYwMDAwNEIwMDEwMDQ5OTgwMDRCMDQ1MDAxMDAwRDkzMDA0MDYyCis6MTAxODcwMDA4MUIyMDAwMDQ5OTgwMDA2MDQzMDAxMDAxMzkzQTI0ODg5Cis6MTAxODgwMDAxRjdDMDAwMDExOTM4NDQ4MUYxMDAwMDBBQzAwMDA0MDMyCis6MTAxODkwMDA0Nzk5MDEwMDEzOTMwMDBBRTBDMTAwMDAwMDAwMDAwQTBDCis6MTAxOEEwMDAwMkIwMDEwMEVGOTQwMDAxOEMzMDAxMDAwMDAwMDA0MzAxCis6MTAxOEIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxNDkzQTg0MEY2Cis6MTAxOEMwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTZECis6MTAxOEQwMDA0OEIxMDEwMDAwMDAwMDAyMTBDMDAxMDAyMTkzMjIwNjVGCis6MTAxOEUwMDAxNDUwMDAwMDNBOTcwMDQ1MUYwMDAxMDAwMDkzMjI1QzRECis6MTAxOEYwMDAxRjdDMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMEEzCis6MTAxOTAwMDA2MkREMDEwMDFEOTNBODVDMUYwMDAwMDAxQjg0MDA4ODlECis6MTAxOTEwMDAxQ0IwMDAwMDAwOTMwMDA1NDhCMTAwMDAwMDAwMDAwQjVGCis6MTAxOTIwMDAxQkIwMDEwMDA4MDAyRDQwODVCMDAxMDAwMDAwMDBGMDUwCis6MTAxOTMwMDA4MkIwMDEwMDAwMDAwMDQwMDVCMDAxMDAwMDk3MDA0MUE2Cis6MTAxOTQwMDA4NzMwMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDM3Cis6MTAxOTUwMDA2MkREMDEwMDI3OTNBODQwODEzMjAwMDAxQjg0MDA4OENCCis6MTAxOTYwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAyRDkzMjIwOUMxCis6MTAxOTcwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDAzMTkzMjI0NDNCCis6MTAxOTgwMDAxOTdDMDAwMDM2OTgwMDRGODEzMDAxMDAzMTkzQTI0NzQ2Cis6MTAxOTkwMDAxRjdDMDAwMDAwMDAwMDQ0MTk4MDAxMDBGRjA3MDAwOEMwCis6MTAxOUEwMDAwMDhDMDEwMDNGOTMyMjRBMUY3QzAwMDAzNzkzQTIxNjRGCis6MTAxOUIwMDAwMjMwMDAwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MEZCCis6MTAxOUMwMDBFN0IxMDEwMEMwOEQwMDQwODFCMjAwMDAyRDAwMkQwODVDCis6MTAxOUQwMDAyQUIwMDEwMDNCOTMyMjQyMTk3QzAwMDAwRjk3MDA0MDdGCis6MTAxOUUwMDA4MTMyMDEwMDNDOTMwMDQwODFCMjAwMDBERjk2MDA0MDRDCis6MTAxOUYwMDA4MTMyMDEwMDMwMDAyRTAwMkFEMDAxMDAzMjAwMkExNTY5Cis6MTAxQTAwMDBFNEIxMDEwMEMwOEQwMDE2RTRCMTAwMDA1MjkzMjIxNjJCCis6MTAxQTEwMDAwMjMwMDAwMDAwMDAwMDA4MkFCMDAxMDAwQTk5MDA0MENFCis6MTAxQTIwMDA5NTMwMDEwMDQ0OTNBMjQwMTE2QzAwMDA1MzkzMjI0MDcyCis6MTAxQTMwMDAyRDZDMDAwMEFDMDAwMDQwNDc5OTAxMDBCMDAwMkIwMTY0Cis6MTAxQTQwMDBFMEMxMDEwMDAwMkIwMEE2MTZCMDAxMDAwMDAwMDAwMTVCCis6MTAxQTUwMDBFMEQxMDEwMDBFOTgwMDA4ODAzMDAxMDA0QjkzMDA1RTM5Cis6MTAxQTYwMDAxNzkwMDAwMDJGOTgwMDQzNjEzMTAxMDAwMDAwMDA0M0VGCis6MTAxQTcwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA0QzkzQTg0MEZDCis6MTAxQTgwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUFCCis6MTAxQTkwMDA0OEIxMDEwMDE2OTgwMDA3MTYxNDAxMDBCNzk3MDA1RUMwCis6MTAxQUEwMDAwNTEwMDEwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MDI2Cis6MTAxQUIwMDBFN0IxMDEwMEM1OEQwMDQwODFCMjAwMDAwMDAwMDAwQkJECis6MTAxQUMwMDAxQkIwMDEwMDA0MDAxRjE1MUE1MDAwMDA2MDkzMjAxNjdGCis6MTAxQUQwMDAxQTZDMDAwMDcwMDAwMDAzNDhDOTAxMDAwMDAwMjI1MDg5Cis6MTAxQUUwMDBGMUIxMDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMEFFCis6MTAxQUYwMDBFMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDBBMDAwMDBBNEJCCis6MTAxQjAwMDA2MkREMDEwMDVEOTNBODQ2MUYxMDAwMDAwMDAwMDAwNTgzCis6MTAxQjEwMDA0OEIxMDEwMDAwMDAwMDAwMTBCMDAxMDAwMDAwMDAxNUY1Cis6MTAxQjIwMDAxMEMwMDEwMDAwMDAwMDBBMkFCMDAxMDAwMDAwMDAwQUY1Cis6MTAxQjMwMDAyQ0QwMDEwMEFDMDAyRjQwMjNCMDAxMDA2NzkzODQ0NUY2Cis6MTAxQjQwMDAxRjEwMDAwMDY4OTMwMDBBRTBDMTAwMDAwMDAwMDAwQUI2Cis6MTAxQjUwMDAwMkIwMDEwMDcxOTcwMDQwMzVCMDAwMDAwMDgwMDAxOTBDCis6MTAxQjYwMDA0MkM5MDEwMDcwOTMyMjQwRTM2RDAwMDAwMDAwMDA0MzcxCis6MTAxQjcwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA2QzkzQTg0MERCCis6MTAxQjgwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUFBCis6MTAxQjkwMDA0OEIxMDEwMDgwOTNBMjAyMUE1MDAwMDA4MTkzMjI0MEI0Cis6MTAxQkEwMDAyRDZDMDAwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEFFCis6MTAxQkIwMDBGMUIxMDEwMDAwMDAwMDAzRjBCMTAxMDBGRjA3MDAwOENGCis6MTAxQkMwMDBFMDhEMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMDQyCis6MTAxQkQwMDA2MkIxMDEwMDc3OTNBODQwODEzMjAwMDAxQjg0MDA4ODI1Cis6MTAxQkUwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAyRjAwMjA0Nzk0Cis6MTAxQkYwMDBFN0I1MDEwMDBDODAwMDAzNDJDOTAxMDAxMDAwMDBGMEFECis6MTAxQzAwMDAxMEM4MDEwMEYwMDcwMDQwMUI5ODAxMDA4MTkzMDA1Q0EwCis6MTAxQzEwMDAxMTgwMDAwMDAwMDAwMDAyMTBDMDAxMDBGODk1MDA0MDkzCis6MTAxQzIwMDAxRjAwMDEwMDAwMDAwMDA1NDhCMTAxMDA4NTkzMjMwRDRECis6MTAxQzMwMDAyQzZDMDAwMDAwMDAwMDQwMUY5MDAxMDA4RTkzMjI0NjkzCis6MTAxQzQwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDA3MDgwMDAwMzIwCis6MTAxQzUwMDA0MkM5MDEwMDhFOTMyMjQwRTM2RDAwMDAwMDAwMDA0MjYzCis6MTAxQzYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA4QTkzQTg0MENDCis6MTAxQzcwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUI5Cis6MTAxQzgwMDA0OEIxMDEwMDA4MDAyRDQwODVCMDAxMDAwMDAwMDBGMEJGCis6MTAxQzkwMDA4MkIwMDEwMDAwMDAwMDQwMDVCMDAxMDAwMDk3MDA0MTQzCis6MTAxQ0EwMDA4NzMwMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMEQ0Cis6MTAxQ0IwMDA2MkREMDEwMDkzOTNBODQwODEzMjAwMDAxQjg0MDA4OEZDCis6MTAxQ0MwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDA5OTkzMjIwOUYyCis6MTAxQ0QwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDA5RDkzMjI0NDZDCis6MTAxQ0UwMDAxOTdDMDAwMDM2OTgwMDRGODEzMDAxMDA5RDkzQTI0Nzc3Cis6MTAxQ0YwMDAxRjdDMDAwMDAwMDAwMDQ0MTk4MDAxMDBGRjA3MDAwODVECis6MTAxRDAwMDAwMDhDMDEwMEIyOTMyMjRBMUY3QzAwMDBBMzkzQTIxNjBDCis6MTAxRDEwMDAwMjMwMDAwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MDk3Cis6MTAxRDIwMDBFN0IxMDEwMEMwOEQwMDQwODFCMjAwMDAyRDAwMkQwOEY4Cis6MTAxRDMwMDAyQUIwMDEwMEFFOTMyMjQyMTk3QzAwMDBBNzkzQTJGM0JGCis6MTAxRDQwMDA4NDMwMDAwMDAwMDAwMEE1ODVCMDAxMDAwMDAwMDA0MUMzCis6MTAxRDUwMDA4NUQwMDEwMEQ0MDAzRTQxODVFMDAxMDBBQjkzMjI0MEQ0Cis6MTAxRDYwMDAxRjdDMDAwMDAwMDAwMDVBMTE5MDAxMDAwQjAwMDAwOEM5Cis6MTAxRDcwMDBFNEY1MDEwMDBGOTcwMDQwODEzMjAxMDBBRjkzMDA0MDZECis6MTAxRDgwMDA4MUIyMDAwMERGOTYwMDQwODEzMjAxMDAzMDAwMkUwMDU5Cis6MTAxRDkwMDAyQUQwMDEwMDMyMDAyQTE1RTRCMTAxMDBDMDhEMDAxNkRFCis6MTAxREEwMDBFNEIxMDAwMEI1OTNBMjE2MDIzMDAwMDBFMjk1MDA0MEI1Cis6MTAxREIwMDA4MTMyMDEwMDA0OTQwMDQwODFCMjAwMDAyRDAwMkQwODAyCis6MTAxREMwMDAyQUIwMDEwMEMzOTMyMjQ3MUY3QzAwMDBCRjkzMjI0MjI4Cis6MTAxREQwMDAxOTdDMDAwMEJBOTNBMkYzODQzMDAwMDAwMDAwMDBBNTMzCis6MTAxREUwMDA4NUIwMDEwMDAwMDAwMDQxODVEMDAxMDBENDAwM0U0MUQzCis6MTAxREYwMDA4NUUwMDEwMEJFOTMyMjQwMUY3QzAwMDAwMDAwMDA1QUQ1Cis6MTAxRTAwMDAxMTkwMDEwMDBCMDAwMDA4RTRGNTAxMDA1ODAxMkQwMEJECis6MTAxRTEwMDAyQUQwMDEwMDYwMDEyREYwMTBCMDAxMDAwMDAwMDBGMDk4Cis6MTAxRTIwMDAyQ0IwMDEwMDQ3OTEwMDQwODFCMjAwMDAwQTk5MDA0MUE2Cis6MTAxRTMwMDA5NTMwMDEwMENCOTNBMjA4ODAzMjAwMDBDQjkzQTIxNjBDCis6MTAxRTQwMDA4MDMyMDAwMDAwMDAwMDQxOTdCMDAxMDBDOTkzMjMwRENCCis6MTAxRTUwMDAwMjZDMDAwMDAwMDAwMDQxOTdDMDAxMDA5MTk2MDA0QjA5Cis6MTAxRTYwMDAwMkIwMDAwMDA0OTQwMDA1NDhCMTAwMDBBQzAwMkYwMTRFCis6MTAxRTcwMDAxNEIwMDEwMEIwMDAyQjAxRTBDMTAxMDAwMDJCMDBBNjRFCis6MTAxRTgwMDAxNkIwMDEwMDAwMDAwMDAxRTBEMTAxMDBEQjkzMjMwRDNBCis6MTAxRTkwMDAwMjZDMDAwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEU2Cis6MTAxRUEwMDBGMUIxMDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDA0MkE4Cis6MTAxRUIwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDBENDkzQTgwMERDCis6MTAxRUMwMDBFMDMxMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTA5Cis6MTAxRUQwMDA0OEIxMDEwMDBDODAwMDAzNDJDOTAxMDAxMDAwMDBGMDZECis6MTAxRUUwMDAyMkM4MDEwMDAwMDAwMDVDMjM4MDAxMDAwMDAwMDAwMTA2Cis6MTAxRUYwMDA4NEIwMDEwMERFOTMyMzBEMDI2QzAwMDAwMDAwMDAwRDkxCis6MTAxRjAwMDAwMkIwMDEwMDAwMDAwMDA4ODBCMDAxMDBFMzkzMjI0MDBECis6MTAxRjEwMDAxQjZDMDAwMDBFOTgwMDAxODQ1MDAxMDBFQjkzMjI0MERFCis6MTAxRjIwMDA4NTZDMDAwMDAwMDAwMDAxODBDMDAxMDAxMDgwMDAxMERFCis6MTAxRjMwMDA0NkM5MDEwMDAwMDAwMDRGNDM4MTAxMDAwMDAwMDA0MjNCCis6MTAxRjQwMDBGMEIxMDEwMDIwMDAwMDQwRjBDOTAxMDAwMDAwMDAxNkJGCis6MTAxRjUwMDBGMEIxMDEwMDAwMDAwMDQzNjFCMTAxMDBBMDAwMDBBMTQ4Cis6MTAxRjYwMDA2MkREMDEwMEU5OTNBODExRTAzMTAwMDBGQTkzMDA1RTAwCis6MTAxRjcwMDAxNzkwMDAwMEVFOTMyMzBEMDI2QzAwMDAwMDAwMDAwRDhFCis6MTAxRjgwMDAwMkIwMDEwMDAwMDAwMDAxODREMDAxMDBGMzkzMjI0MDYwCis6MTAxRjkwMDAxQjZDMDAwMDJGOTgwMDQzNjEzMTAxMDBGQTkzMjI0MDJFCis6MTAxRkEwMDA4NTZDMDAwMDAwMDAwMDAxMTJDMDAxMDAxMDgwMDAxMENDCis6MTAxRkIwMDA0NkM5MDEwMDAwMDAwMDRGNDM4MTAxMDAwMDAwMDA0MkJCCis6MTAxRkMwMDBGMEIxMDEwMDAwMDAwMDA5RjBCMTAxMDAwMDAwMDAxOEFDCis6MTAxRkQwMDBGMEIxMDEwMEEwMDAwMEExNjJERDAxMDBGODkzQTgxMTlBCis6MTAxRkUwMDBFMDMxMDAwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDNBCis6MTAxRkYwMDA2MkREMDEwMEZCOTNBODBBMDIzMDAwMDAxQjg0MDA4ODA4Cis6MTAyMDAwMDAxQ0IwMDAwMEUyOTUwMDA1NDgzMTAxMDAwMjk0MjMwRDQ4Cis6MTAyMDEwMDAwMjZDMDAwMEZGMDcwMDExMDA4QzAxMDBFMjk1MDA0MEY3Cis6MTAyMDIwMDA4MTMyMDEwMDE2OTgwMDA3MTYxNDAxMDBCNzk3MDA1RTcwCis6MTAyMDMwMDAwNTEwMDEwMDJGMDAyMDQwRTdCMTAxMDBDNThEMDA0MEQwCis6MTAyMDQwMDA4MUIyMDAwMDAwODAwMDAzNDJDOTAxMDAwMDAwMDBGOEQ2Cis6MTAyMDUwMDA4MkIwMDEwMDAwMDAwMEY4OENCMDAxMDAwMDAwMDBGMDI4Cis6MTAyMDYwMDA4RUIwMDEwMEM5OTYwMDQwMTMzMDAxMDAwMDAwMDA0MDBFCis6MTAyMDcwMDA4NUIwMDEwMDAwOTcwMDQxODczMDAxMDA4NTk2MDA0MDNGCis6MTAyMDgwMDA4MTMyMDEwMDAwODAwMDEwNDJDOTAxMDAxNTk0MjI0MEY1Cis6MTAyMDkwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDQ4Cis6MTAyMEEwMDA2MkREMDEwMDExOTRBODQwODEzMjAwMDAxQjg0MDA4ODg5Cis6MTAyMEIwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAxNzk0MjIwOTdGCis6MTAyMEMwMDA4MDMwMDAwMDM2OTgwMDQwMTMzMDAxMDAwMDAwMDAwQjAzCis6MTAyMEQwMDAxQkIwMDEwMDAwMDAwMDE1MUFEMDAxMDAxRTk0QTI0MTlGCis6MTAyMEUwMDAxOTdDMDAwMDBBOTkwMDQwOTUzMDAxMDAwMDAwMDAxNjlDCis6MTAyMEYwMDA4MEIyMDEwMDI3OTQyNzA4ODAzMjAwMDA0NDkzMDAwMDNBCis6MTAyMTAwMDAyQUMwMDAwMDBBOTkwMDQxOTUzMDAxMDAwMDAwMDAxNjI1Cis6MTAyMTEwMDA4MEIyMDEwMDIyOTQyNzA4ODAzMjAwMDBDQjkzMDAwMDk3Cis6MTAyMTIwMDAyQUMwMDAwMDAwMDAwMDQxOTdCMDAxMDAyNTk0MjMwRDUzCis6MTAyMTMwMDAwMjZDMDAwMDAwMDAwMDQxOTdDMDAxMDA5MTk2MDA0QjI2Cis6MTAyMTQwMDAwMkIwMDAwMDAwMDAwMDA1NDhCMTAxMDBDMDhEMjI0MjJECis6MTAyMTUwMDAxOTdDMDAwMEM1OTcwMDNBODEzMDAxMDBDMDhEMDA0MDE1Cis6MTAyMTYwMDA4MUIyMDAwMDJCOTQwMDRBMUY5MDAwMDAwQTk2MDAwMEU0Cis6MTAyMTcwMDAxMDMwMDEwMDAwMDAwMDE1MTBDMDAxMDAwMDAwMDAxMDI4Cis6MTAyMTgwMDAzMkIwMDEwMDA3MDAwMDBCOTY4ODAxMDAzOTk0MjY0NzAxCis6MTAyMTkwMDA5NzI0MDAwMDAwMDAwMDQxOTdDMDAxMDAzOTk0MjM0QkIwCis6MTAyMUEwMDAwQzZDMDAwMDQ5OTgwMDRCMDQzMDAxMDAwMDAwMDA1MDA2Cis6MTAyMUIwMDAzM0MwMDEwMDAwMDAwMDAyMTBDMDAxMDAwMDAwMDAwMjU2Cis6MTAyMUMwMDAxNkMwMDEwMDAwMDAwMDA2MDRCMDAxMDA0OTk4MDA0QjUxCis6MTAyMUQwMDAwNDUwMDEwMDNBOTQwMDQwODFCMjAwMDA0OTk4MDAwNjgyCis6MTAyMUUwMDAwNDMwMDEwMDNGOTRBMjQ0MUY3QzAwMDAwMDAwMDAwQjVCCis6MTAyMUYwMDAxQkIwMDEwMDAwMDAwMDBBMkNEMDAxMDAwMDAwMDAwQTAyCis6MTAyMjAwMDAwMkIwMDEwMEVGOTQwMDAxOEMzMDAxMDAwMDgwMDAxOTQxCis6MTAyMjEwMDA0MkM5MDEwMDQ2OTQyMjQwRTM2RDAwMDAwMDAwMDA0M0UzCis6MTAyMjIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA0Mjk0QTg0MDRECis6MTAyMjMwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUYzCis6MTAyMjQwMDA0OEIxMDEwMDAwMDAwMDAyMTBDMDAxMDA0Rjk0MjIwNkI2Cis6MTAyMjUwMDAxNDUwMDAwMDNBOTcwMDQ1MUYwMDAxMDAyRDk0MjI1Q0E1Cis6MTAyMjYwMDAxRjdDMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMDI5Cis6MTAyMjcwMDA2MkREMDEwMDRCOTRBODVDMUYwMDAwMDAxQjg0MDA4OEY1Cis6MTAyMjgwMDAxQ0IwMDAwMDJEOTQwMDA1NDhCMTAwMDAwODAwMkQ0MDRFCis6MTAyMjkwMDA4NUIwMDEwMDAwMDAwMEYwODJCMDAxMDAwMDAwMDA0MEE1Cis6MTAyMkEwMDAwNUIwMDEwMDAwOTcwMDQxODczMDAxMDAwMDAwMDA0NUEzCis6MTAyMkIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA1NDk0QTg0MEFCCis6MTAyMkMwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTYzCis6MTAyMkQwMDA0OEIxMDEwMDVBOTQyMjA5ODAzMDAwMDAzNjk4MDA0MDJECis6MTAyMkUwMDAxMzMwMDEwMDVEOTQyMjQ0MTk3QzAwMDAzNjk4MDA0RkExCis6MTAyMkYwMDA4MTMwMDEwMDAwMDAwMDQ0MTk4MDAxMDBGRjA3MDAwODQwCis6MTAyMzAwMDAwMDhDMDEwMDZCOTQyMjRBMUY3QzAwMDA2Mzk0QTIxNjhCCis6MTAyMzEwMDAwMjMwMDAwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MDkxCis6MTAyMzIwMDBFN0IxMDEwMEMwOEQwMDQwODFCMjAwMDAyRDAwMkQwOEYyCis6MTAyMzMwMDAyQUIwMDEwMDY3OTQyMjQyMTk3QzAwMDAwRjk3MDA0MEU4Cis6MTAyMzQwMDA4MTMyMDEwMDY4OTQwMDQwODFCMjAwMDBERjk2MDA0MEI1Cis6MTAyMzUwMDA4MTMyMDEwMDMwMDAyRTAwMkFEMDAxMDAzMjAwMkExNUZGCis6MTAyMzYwMDBFNEIxMDEwMEMwOEQwMDE2RTRCMTAwMDA0MDkzQTIxNjU0Cis6MTAyMzcwMDAwMjMwMDAwMEUyOTUwMDQwODEzMjAxMDAyRjAwMjA0MDMxCis6MTAyMzgwMDBFN0IxMDEwMEM1OEQwMDQwODFCMjAwMDAwQTk2MDA0QTA1Cis6MTAyMzkwMDAxRjEwMDEwMDU1OTMwMDEwMzJCMDAwMDA4QTAwMjA0MDQ5Cis6MTAyM0EwMDBFN0IxMDEwMDc1OTRBMjQxMTk3QzAwMDBFMjk1MDA0MDVDCis6MTAyM0IwMDA4MTMyMDEwMDc4OTQwMDQwODFCMjAwMDA4QTk2MDAxNUI1Cis6MTAyM0MwMDA5NDMwMDEwMDkxOTYwMDRCMDJCMDAwMDAwMDAwMDAwNTFGCis6MTAyM0QwMDA0OEIxMDEwMDdBOTQyMjQyMTk3QzAwMDBDNTk3MDAzQTY2Cis6MTAyM0UwMDA4MTMwMDEwMDM2OTgwMDQ1ODEzMDAxMDBDMDhEMDA0MEU5Cis6MTAyM0YwMDA4MUIyMDAwMDA2OTIwMDQ1MUY5MDAwMDBDQzk2MDA0MDdDCis6MTAyNDAwMDA4MTMyMDEwMDg1OTYwMDQwODEzMjAxMDA1NTkzMDAwMTIwCis6MTAyNDEwMDAyQ0IwMDAwMEQ0OTUwMDQwODEzMjAxMDA4RDk0QTIwOEI4Cis6MTAyNDIwMDA4MDMyMDAwMDhEOTRBMjE2ODAzMjAwMDAwMDgyMDAwMkVCCis6MTAyNDMwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMTgxCis6MTAyNDQwMDAwMEMwMDEwMDg2OTQzNzVDNjEzMTAwMDAwMDAwMDAxQjcxCis6MTAyNDUwMDA2MkIxMDEwMDhBOTQyODQwODEzMjAwMDA4Nzk0MDA0MEQ0Cis6MTAyNDYwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDA4QTk0QTg0MDFGCis6MTAyNDcwMDA4MTMyMDAwMDA1OEExNzQwODFCMjAwMDA1ODAxMjAwODBGCis6MTAyNDgwMDBFMEIxMDEwMDYwMDEyMDE2RTBCMTAxMDBDQzk2MDA0N0U4Cis6MTAyNDkwMDAxRjEwMDEwMDg1OTYwMDQwODEzMjAxMDA1NTkzMDAwMTE0Cis6MTAyNEEwMDAyQ0IwMDAwMEQ0OTUwMDQ3MUYxMDAxMDBBMDk0QTIwODkyCis6MTAyNEIwMDA4MDMyMDAwMEEwOTRBMjE2ODAzMjAwMDA5Qzk0QTI0MkI4Cis6MTAyNEMwMDAxOTdDMDAwMDAwODIwMDAyMDREQzAxMDBBMDk4MDA0MDlBCis6MTAyNEQwMDA0Nzk5MDEwMEU5ODkwMDQxODkzMDAxMDA4QTk2MDAxNTc5Cis6MTAyNEUwMDA5NDMwMDEwMDkxOTYwMDRCMDJCMDAwMDAwNThBMDA0MDM0Cis6MTAyNEYwMDA4MUIyMDAwMDBGOTcwMDQwODEzMjAxMDAwMDAwMDA0QkM0Cis6MTAyNTAwMDAxOTkwMDEwMEM1OTcwMDNBODEzMDAxMDAwNThBMDA0MDBBCis6MTAyNTEwMDA4MUIyMDAwMDU4MDEyMDA4RTBCMTAxMDA2MDAxMjAxNkRFCis6MTAyNTIwMDBFMEIxMDEwMDBBOTYwMDEwMzIzMDAxMDA1NTkzMDA0MERFCis6MTAyNTMwMDAxM0IwMDAwMEQ0OTUwMDQwODEzMjAxMDBCMTk0QTIwODhDCis6MTAyNTQwMDA4MDMyMDAwMEIxOTRBMjE2ODAzMjAwMDAwMDgyMDAwMkE2Cis6MTAyNTUwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMTYwCis6MTAyNTYwMDAwMEMwMDEwMEFBOTQzNzVDNjEzMTAwMDAwMDAwMDAxQjJDCis6MTAyNTcwMDA2MkIxMDEwMEFFOTQyODQwODEzMjAwMDBBQjk0MDA0MDZCCis6MTAyNTgwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDBBRTk0QTg0MERBCis6MTAyNTkwMDA4MTMyMDAwMDA1OEExNzQwODFCMjAwMDAwMDgwMDAwM0VDCis6MTAyNUEwMDA0MkM5MDEwMDAwMDAwMEY4ODJCMDAxMDAwMDAwMDBGOEZDCis6MTAyNUIwMDA4Q0IwMDEwMDAwMDAwMEYwOEVCMDAxMDBDOTk2MDA0MDEwCis6MTAyNUMwMDAxMzMwMDEwMDAwMDAwMDQwODVCMDAxMDAwMDk3MDA0MTc5Cis6MTAyNUQwMDA4NzMwMDEwMDg1OTYwMDQwODEzMjAxMDAwMDgwMDAxMEE0Cis6MTAyNUUwMDA0MkM5MDEwMEMwOTQyMjQwRTM2RDAwMDAwMDAwMDA0NTk0Cis6MTAyNUYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBCQzk0QTg0MDAwCis6MTAyNjAwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTFGCis6MTAyNjEwMDA0OEIxMDEwMDQ3OTEyMjA5ODAzMDAwMDAzNjk4MDA0MEZGCis6MTAyNjIwMDAxMzMwMDEwMDQ3OTEwMDQwODFCMjAwMDAxNDAwMkQ0NTk1Cis6MTAyNjMwMDAxRjkwMDEwMDhGOTEwMDQ0MTk5MDAwMDBDODk0QTI0MTlFCis6MTAyNjQwMDAxOTdDMDAwMDAwMDAwMDRBMUY5MDAxMDBGQTkyMDA0MDJGCis6MTAyNjUwMDA4MUIyMDAwMENDOTYwMDRBMUYxMDAxMDA4NTk2MDA0MDEwCis6MTAyNjYwMDA4MTMyMDEwMDU1OTMwMDAxMkNCMDAwMDAwQTk2MDA0MDExCis6MTAyNjcwMDA4MTMyMDEwMDU1OTMwMDEwMzJCMDAwMDAwNjkyMDA0NUVGCis6MTAyNjgwMDAxRjkwMDAwMDAwMDAwMDQxMzdDMzAxMDAwMDAwMDA0MTFFCis6MTAyNjkwMDAzM0MzMDEwMDM2MDAwMDAxMDJDQzAxMDAwMDAwRDI0MDJCCis6MTAyNkEwMDA4MUIyMDAwMEQ0OTQ4NTE3ODAzMjAwMDAwMDAwOUY0ODVBCis6MTAyNkIwMDAwM0QwMDAwMEQ2OTQ5QzE3ODAzMjAwMDAwMDAwOUY0QzhECis6MTAyNkMwMDAwM0QwMDAwMDAwMDA4MDAxMzRDMzAxMDAwMjAwMkQxMTdFCis6MTAyNkQwMDAxMEMxMDAwMERCOTQwMDQwNDNDMTAwMDBEQjk0MDA1MEI3Cis6MTAyNkUwMDA0M0MxMDAwMDIwMDAwMEExNDJDOTAxMDBERjk0MjI0MDQ0Cis6MTAyNkYwMDBFNTZEMDAwMDA0MDBBMjQwRTU3RDAwMDAwMDAwMDA0MDAwCis6MTAyNzAwMDAyM0IwMDEwMDAwMDA4MDQ5MUY5MDAxMDAwMDAwQTI0MTk5Cis6MTAyNzEwMDAyM0QwMDAwMERCOTQwMDUwNDNEMTAwMDA0MDgwMDAwMzMwCis6MTAyNzIwMDA0NEM5MDEwMDAwMDAwMDRBRjBCMTAxMDAwMDAwMDA0MDZGCis6MTAyNzMwMDBGMUIxMDEwMDAwMDAwMDEyRjBCMTAxMDBFNjk1MDA0MTg2Cis6MTAyNzQwMDBFMTMxMDEwMDAwODAwMDQzNDRDOTAxMDAxMDAwMDA0MDU1Cis6MTAyNzUwMDBGMTk5MDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OUJCCis6MTAyNzYwMDBGMEIxMDEwMDQwMDAwMDAzRTBDOTAxMDAwMDAwMDA0NTk1Cis6MTAyNzcwMDA2MUIxMDEwMDAwMDAwMDQzNjJCMTAxMDAwMDAwQTg0MDA3Cis6MTAyNzgwMDA4MUIyMDAwMEVDOTQwMDQwODFCMjAwMDBCQTAwMjA0MDA5Cis6MTAyNzkwMDBFNUIxMDEwMEIwMDAyRjAxOENEMDAxMDAwMDAwMDA0NjFGCis6MTAyN0EwMDBFMEMxMDEwMEFDMDAyRjQwMTNCMDAxMDBDQzAwMkQwMUFFCis6MTAyN0IwMDBFMEMxMDEwMEY2OTQ5QzE3ODAzMjAwMDAxMzk5MDA0MDlDCis6MTAyN0MwMDA4MTMyMDEwMEY4OTQyMjQ3MTk3QzAwMDAwMDAwMDA1RjZDCis6MTAyN0QwMDAxMzkwMDEwMEEzOTgwMDQ3MTkxMDAxMDBDMDAwMkQ0NDc4Cis6MTAyN0UwMDAxRjkwMDEwMEM0MDAyREYwODJCMDAxMDBFRTk4MDBGMEFGCis6MTAyN0YwMDA4NEIwMDAwMDkwMDAyRDA1NDhCMTAxMDAwRDk1QTI0QjVBCis6MTAyODAwMDAxRjdDMDAwMDYwOTVBMjRDMUY3QzAwMDAwRDk1MUYxQ0QyCis6MTAyODEwMDBFMDZEMDAwMDEwOTVBMjAxODAzMjAwMDBBODAwMkQ0NjU2Cis6MTAyODIwMDA4RkIwMDEwMDA2OTUxRjFDRTA2RDAwMDBCNDAwMDA0MDUxCis6MTAyODMwMDA0Mzk5MDEwMDA4OTUyMkYwM0E2QzAwMDA1RDk1MUZGMDY1Cis6MTAyODQwMDAzQTZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0RkZGCis6MTAyODUwMDA4RkIwMDEwMDhBMDAwMDQwNDM5OTAxMDA1RTk1MjA0MjNDCis6MTAyODYwMDBFNzZEMDAwMDBDOTUyMjQwODAzMjAwMDAwMDAwODA1OTg2Cis6MTAyODcwMDA4RkIwMDEwMDAwMDA4MDU4OEZCMDAxMDAwRjk1MjI0MEZBCis6MTAyODgwMDA4MDMyMDAwMDAwMDA4MDVDOEZCMDAxMDAwMDAwODA1QjlGCis6MTAyODkwMDA4RkIwMDEwMEFDMDAwMDQwNDM5OTAxMDBCMDAwMkRGMDYyCis6MTAyOEEwMDA4NEIwMDEwMDE0OTVBMjQyMjQ2QzAwMDAxRDk1MjNGMDExCis6MTAyOEIwMDAwMjZDMDAwMDFBOTVBMkYwODAzMjAwMDA1Rjk1QTI0MkRGCis6MTAyOEMwMDAyNDZDMDAwMDVGOTVBMjQxMDM2QzAwMDAxOTk1QTI0MEEyCis6MTAyOEQwMDA4MDMyMDAwMDAwMDA4MDUxOEZCMDAxMDAwMDAwODA1MjYzCis6MTAyOEUwMDA4RkIwMDEwMDVGOTUxRjEyODQ1MDAwMDA1Rjk1QTAwMTFBCis6MTAyOEYwMDA4NDZDMDAwMDBEOTUwMDQwODFCMjAwMDA4QjAwMDA0MDA4Cis6MTAyOTAwMDA0Mzk5MDEwMDQ4OTVBMjQ2RTc3RDAwMDAxNDAwMDA0MDZECis6MTAyOTEwMDA0Mzk5MDEwMDNBOTUyMkYwMTQzMDAwMDAyNjk1MjAwQUQwCis6MTAyOTIwMDAwMjZDMDAwMDM3OTUwMzFFODAzMjAwMDAyNTk1QTI0MEZFCis6MTAyOTMwMDA4MDMyMDAwMDAwMDA4MDQ0OEZCMDAxMDAwMDAwODA0OTE4Cis6MTAyOTQwMDA4RkIwMDEwMDJCOTUyMjBBMDI2QzAwMDAyRTk1QTI0MTQ3Cis6MTAyOTUwMDAxOTdDMDAwMDJBOTVBMjQwODAzMjAwMDAwMDAwODA1NUJBCis6MTAyOTYwMDA4RkIwMDEwMDAwMDA4MDU2OEZCMDAxMDAyRDk1QTI0MDZECis6MTAyOTcwMDA4MDMyMDAwMDAwMDA4MDQzOEZCMDAxMDAwMDAwODA0OERBCis6MTAyOTgwMDA4RkIwMDEwMDAwMDAwMDAxODJCMDAxMDAwMDAwMDAwQUM5Cis6MTAyOTkwMDA4MkQwMDEwMDM0OTUyMDkxODM2QzAwMDAzMzk1QTI0MEQxCis6MTAyOUEwMDA4MDMyMDAwMDI2MDA4MDQwOEY5ODAxMDAyNzAwODA0MDgwCis6MTAyOUIwMDA4Rjk4MDEwMDM2OTVBMjQwODAzMjAwMDAxRjAwODA0MEIxCis6MTAyOUMwMDA4Rjk4MDEwMDIwMDA4MDQwOEY5ODAxMDAzOTk1QTI0MDI3Cis6MTAyOUQwMDA4MDMyMDAwMDIyMDA4MDQwOEY5ODAxMDAyMzAwODA0MDU4Cis6MTAyOUUwMDA4Rjk4MDEwMDg4MDAyRDQ0OEZCMDAxMDA0Mzk1QTI0MUNCCis6MTAyOUYwMDAxOTdDMDAwMDQwOTVBMjQzM0Q3QzAwMDA0MDk1QTJGMjY2Cis6MTAyQTAwMDAwMjZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0OTdCCis6MTAyQTEwMDA4RkIwMDEwMDQyOTVBMjQwODAzMjAwMDAwMDAwODA0MzQ4Cis6MTAyQTIwMDA4RkIwMDEwMDAwMDA4MDQ4OEZCMDAxMDA0MDk1QTA5MTU4Cis6MTAyQTMwMDAwMzZDMDAwMDNFOTUyMjQzM0Q3QzAwMDA0Nzk1QTI0MDc4Cis6MTAyQTQwMDA4MDMyMDAwMDI4MDA4MDQwOEY5ODAxMDAyOTAwODA0MERCCis6MTAyQTUwMDA4Rjk4MDEwMDE0MDAwMDQwNDM5OTAxMDA1MTk1QTJGMEE1Cis6MTAyQTYwMDAxNDMwMDAwMDg4MDAyRDQ0OEZCMDAxMDA0RTk1QTJGMjcyCis6MTAyQTcwMDAwMjZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0OTBCCis6MTAyQTgwMDA4RkIwMDEwMDQwOTUyMjQxMTk3QzAwMDAzRTk1MjA5MUI1Cis6MTAyQTkwMDAwMzZDMDAwMDQwOTUwMDQwODFCMjAwMDA1NTk1MjAwQTZCCis6MTAyQUEwMDAwMjZDMDAwMDU0OTVBMjQwODAzMjAwMDAwMDAwODA0NDc3Cis6MTAyQUIwMDA4RkIwMDEwMDAwMDA4MDQ5OEZCMDAxMDA1QTk1MjIwQUIyCis6MTAyQUMwMDAwMjZDMDAwMDJFOTVBMjQxMTk3QzAwMDA1OTk1QTI0MDhECis6MTAyQUQwMDA4MDMyMDAwMDAwMDA4MDU1OEZCMDAxMDAwMDAwODA1NjU5Cis6MTAyQUUwMDA4RkIwMDEwMDVDOTVBMjQwODAzMjAwMDAwMDAwODA0MzVFCis6MTAyQUYwMDA4RkIwMDEwMDAwMDA4MDQ4OEZCMDAxMDA2Mjk1MDA0MzU0Cis6MTAyQjAwMDA5NUIwMDAwMDYyOTUwMDQxOTVCMDAwMDA2Mjk1MDA0MkNBCis6MTAyQjEwMDA5NUIwMDAwMDYyOTUwMDQ0OTVCMDAwMDA2Mjk1MDA0Q0FECis6MTAyQjIwMDA5NUIwMDAwMDBCOTgwMDQwODEzMjAxMDA2NTk1QTI0MEVECis6MTAyQjMwMDA4MDMyMDAwMDAwMDA4MDRCOEZCMDAxMDAwMDAwODA0QzBDCis6MTAyQjQwMDA4RkIwMDEwMDJEMDAwMDQwNDM5OTAxMDAyRTAwMkZGM0FCCis6MTAyQjUwMDA4NEIwMDEwMDZBOTVBMkYzOTYzMDAwMDAwMDAwODA0MDI2Cis6MTAyQjYwMDAwMUIwMDEwMDJEMDAyQTQxRTdEMTAxMDBENDAwM0Q0MTEwCis6MTAyQjcwMDA4NUUwMDEwMDBCMDAwMEYyMDBFNDAxMDA3MDk1MjI1QThDCis6MTAyQjgwMDAwMTdDMDAwMDAwMDAwMDQwMUY5MDAxMDA3MTk1MDA1QTc4Cis6MTAyQjkwMDAwMTgwMDAwMDAwMDAwMDQwMUY4MDAxMDAwMDAwNjM0MTMwCis6MTAyQkEwMDA4NUMwMDEwMDAwMDBBMEE1ODU2QzAxMDAwMDAwRTM0MDg1Cis6MTAyQkIwMDA4NUIwMDEwMDBDODAwMDAzNDJDOTAxMDAxMjAwMDA0MEYyCis6MTAyQkMwMDA4Nzk4MDEwMDU1OTkwMEYwOENCMDAwMDA3RTk1MjI0MDU2Cis6MTAyQkQwMDAwRjZDMDAwMDAwMDAyRjA1NDhCMTAxMDA3Qjk1QTI0QjRGCis6MTAyQkUwMDAxOTdDMDAwMDdDOTUyMkYwMTg2QzAwMDAwMDAwNjA0QkZFCis6MTAyQkYwMDAxOTkwMDEwMDQ4OTYwMDA3MTAzMDAxMDA2Rjg0MDA0MEQyCis6MTAyQzAwMDAwNUIwMDAwMDgwOTUyMjVBMUY3QzAwMDBDRDk1MDA0MDQxCis6MTAyQzEwMDA4MTMwMDEwMDZGODQwMDQwMDVCMDAwMDAwMDAwMkYwNUU2Cis6MTAyQzIwMDA0OEIxMDEwMDAwMDA2MDRCMTk5MDAxMDA0ODk2MDAwNzcwCis6MTAyQzMwMDAxMDMwMDEwMDZGODQwMDQwMDVCMDAwMDAwMDAwMkYwNTM3Cis6MTAyQzQwMDA0OEIxMDEwMDAwMDA2MDRCMTk5MDAxMDA0ODk2MDAwNzUwCis6MTAyQzUwMDAxMDMwMDEwMDAwMDA4MDQwMDVCMDAxMDA4OTk1MzM0MDJDCis6MTAyQzYwMDA4MTMyMDAwMDhDOTVBMUFEOTUyMDAwMDA5QTk1MTM0MDBCCis6MTAyQzcwMDA4MUIyMDAwMDAwMDAxMzRBNUE4MzAxMDAzMDAwMzk0NTM4Cis6MTAyQzgwMDA5NUUwMDEwMDFGMDAwMDBGNUVEODAxMDAwMDAwMDA1QTBGCis6MTAyQzkwMDA1RjkwMDEwMDAwMDAwMDQwNDVCMDAxMDAwMDAwMDAwNDBBCis6MTAyQ0EwMDA0OEIwMDEwMDAwMDAwMDA1NEFCMDAxMDAwMDAwMDAwQzFGCis6MTAyQ0IwMDA1OEIwMDEwMDAwMDAwMDA3NEVCMDAxMDAxODg2MDA0MDI3Cis6MTAyQ0MwMDA1RDk4MDEwMDAwMDAwMDU4NjFCMTAxMDAwMDAwMDA0QTU5Cis6MTAyQ0QwMDA2MkIxMDEwMDAwMDBBODQxOTdCMDAwMDA5Nzk1MDA0MDQ0Cis6MTAyQ0UwMDA4MUIyMDAwMDAwMDA4MDQwOTdCMDAxMDA5Qjk1NDQwNzJFCis6MTAyQ0YwMDA5NjMwMDAwMEZGRkYwMDRCODQ4OTAxMDAwMDAwMUNDMkQ5Cis6MTAyRDAwMDAyNEIwMDEwMEE1OTVBMjQ1MjU3QzAwMDA5Rjk1MzEyMEE3Cis6MTAyRDEwMDA4NTMwMDAwMEE2OTUyMjEyNDg3RjAwMDA2Nzk4MTExMkE2Cis6MTAyRDIwMDA0ODAzMDEwMDEwMDAwMDEyOTZFNDAxMDAwMDAwMDA0QjZGCis6MTAyRDMwMDAxRTk0MDEwMDAwMDA4MDVBMUY5MDAxMDBBNTk1MzE0MEFCCis6MTAyRDQwMDA4MTMyMDAwMDAwMDAwMEI0MjRCMDAxMDBBNjk1MjIxMkQ4Cis6MTAyRDUwMDA0ODdGMDAwMDY3OTgwMDQwODEzMjAxMDAwMDAwMkYwNTg1Cis6MTAyRDYwMDA0OEIxMDEwMEIzOTUwQkYwODQzMDAwMDAwMDAwMTExMjRGCis6MTAyRDcwMDA0ODgzMDEwMEIwOTUyMjUwODU3MDAwMDA1RTAxMDA0MDNDCis6MTAyRDgwMDA0Mzk5MDEwMDY3OTcwMEYyOTYzMDAxMDBFOTk5MDAxMjFCCis6MTAyRDkwMDA5NDMwMDEwMDAwMDAwMDVBMUY5MDAxMDAxMDAwMDAxMjQyCis6MTAyREEwMDA5NkU0MDEwMDAwMDA4MDRCMUU5NDAxMDAxMDAwMDA0MkQ4Cis6MTAyREIwMDAxMEY0MDEwMDAwQjczRjQzMTFGMDAxMDAwNzAwMDAwOEM0Cis6MTAyREMwMDA4QTg4MDEwMEI2OTUzMEExMEMzMDAwMDBCOTk1MjI0NUUzCis6MTAyREQwMDBFNjdEMDAwMEE2OTUxMDQwODFCMjAwMDAwMDAwMkE0NTYzCis6MTAyREUwMDBFNjkxMDEwMDAwMDAxMDEyNDg4MzAxMDAwMDAwMTE0MDJDCis6MTAyREYwMDA4MUIyMDEwMDAwMDA2MDRCODU4MDAxMDA1RTAxMDA0MDRGCis6MTAyRTAwMDA0Mzk5MDEwMDY3OTcwMEYyOTYzMDAxMDAwMDgwMDAxMDlFCis6MTAyRTEwMDA0NEM5MDEwMEQ4MDAwMDQwODE5ODAxMDAyRTAwMkQwNTEyCis6MTAyRTIwMDA0OEIxMDEwMEM0OTUyMjQwRTc2RDAwMDA4MDAwMDA0MEQ5Cis6MTAyRTMwMDA4MEM4MDEwMDAwMDAwMDQwRjBCMTAxMDAwOTAwMDAwODU2Cis6MTAyRTQwMDA4NkU0MDEwMDAwMDA2OEE3ODdDMDAxMDAwMDAwMDA0NDdDCis6MTAyRTUwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDBDODk1QTgwNTMxCis6MTAyRTYwMDBFMDMxMDAwMDEwMDAwMDEyOTZFNDAxMDAwMDE0MDA0QjU1Cis6MTAyRTcwMDA5NkRDMDEwMDAwMDA4MDRCMUU5NDAxMDAxMDAwMDAwRjQyCis6MTAyRTgwMDA4NEY0MDEwMDFGMDAwMDQyODQ4ODAxMDBEMTk1MjI0MDkzCis6MTAyRTkwMDA4MDMyMDAwMEQyOTUwMDQyNjhCMTAwMDAwMDAwMDA0MjdDCis6MTAyRUEwMDA2QUIxMDEwMEQyOTUzMTVBMUYwMDAwMDAwMDAwOTE0MjIyCis6MTAyRUIwMDA0ODkzMDEwMEQ0OTUzNTQwODEzMjAwMDA2RDAwMDA0MEY4Cis6MTAyRUMwMDA2MTk5MDEwMERBOTUyOEIxMkMzMDAwMDBENTk1MjI0RDhBCis6MTAyRUQwMDA3NTdEMDAwMDAwMDAwMDQwMkRCMDAxMDAwMDAwOTU0MDBECis6MTAyRUUwMDAxMUIwMDEwMDZEMDAwMDQwNjE5OTAxMDBEQTk1QThCMUIwCis6MTAyRUYwMDAxMDMwMDAwMDAwMDA5NTQwODFCMjAxMDA3RjAwMDA0MENBCis6MTAyRjAwMDA2MTk5MDEwMEUxOTUyOEIxMTAzMDAwMDBERDk1OUZCQTZDCis6MTAyRjEwMDA4MDMyMDAwMDAwMDA4MDQwMTFCMDAxMDAwMDAwODAyNEQ5Cis6MTAyRjIwMDAxMTg0MDEwMDAwMDAwMDVGNjFCMTAxMDAwMDEwMDAwMDg5Cis6MTAyRjMwMDA2MkREMDEwMDAwMDBBODQwODFCMjAwMDBFMzk1MDA0MDdFCis6MTAyRjQwMDA4MUIyMDAwMEFDOTQwMDQwNDc5OTAxMDBFNzk1MzI0MEZGCis6MTAyRjUwMDA4MTMyMDAwMEVEOTUyMkY4OTYzMDAwMDAwMDAwMDBGODY0Cis6MTAyRjYwMDA5MEIwMDEwMDAwMDAwMEYwOTJCMDAxMDAwMTAwMDA0QkExCis6MTAyRjcwMDBGMENEMDEwMDIwMDA5MjQ4RTBDOTAxMDA2QzAwMDA0MDQzCis6MTAyRjgwMDA2MTk5MDEwMEYxOTUyOEIxOTIzMDAwMDBFRDk1MjI0QzM1Cis6MTAyRjkwMDA3NTdEMDAwMDA0MDAxMjQwOTFCMDAwMDA2QzAwMDA0MEZDCis6MTAyRkEwMDA2MTk5MDEwMEYxOTVBOEIxOTAzMDAwMDBGRjAwMDA0ODQwCis6MTAyRkIwMDA5Njg4MDEwMDAwMDAwMDRCOTBEMDAxMDAwMTAwMDA0QkZBCis6MTAyRkMwMDBGMENEMDEwMDIwMDAwMDQ4RjBDOTAxMDAwMDAwOTI0OTQ2Cis6MTAyRkQwMDBFMEIxMDEwMDBDMDAyRDEwNDhCMTAxMDBGRjA3MDAwODBFCis6MTAyRkUwMDA4MjhDMDEwMEZGMDcwMEYwMDA4QzAxMDAwMDAwQTI0MTZDCis6MTAyRkYwMDAwMEVDMDAwMEZFOTUyMjFBMDA2QzAwMDBFMjk1MDAwMDMzCis6MTAzMDAwMDAzNDMwMDEwMDAwMDAwMDUwNDlDMTAxMDBGQTk1QTI0MThFCis6MTAzMDEwMDAyMzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwQzAwMkQxMDAwCis6MTAzMDIwMDA0OEIxMDEwMEZGMDcwMDE1ODI4QzAxMDBGRjA3MDBGMDg2Cis6MTAzMDMwMDAwMDhDMDEwMDAwMDBBMjQxMDBFQzAwMDAwNzk2MjIwRDY4Cis6MTAzMDQwMDAwMDZDMDAwMEUyOTUwMDAwMUEzMDAxMDAwMDAwMDA1MDAyCis6MTAzMDUwMDA0OUMxMDEwMDAzOTZBMjQxMjM1MDAwMDAwMDAwODA0MEI2Cis6MTAzMDYwMDA4MUIyMDEwMDBDOTY4MzFFODAzMjAwMDAwMDAwMDA0NEYzCis6MTAzMDcwMDAxOTkwMDEwMDI0MDAyRDAxMkNCMDAxMDAyODAwMkRGMDMyCis6MTAzMDgwMDAxNkIwMDEwMDIyMDAyREYwMjZCMDAxMDAxNDAwMkZGMjJFCis6MTAzMDkwMDAwQ0IwMDEwMDAwMDA4MDQwRTFCMTAxMDAwMjAwMkQxMUUwCis6MTAzMEEwMDAxMEMxMDAwMDE1OTYwMDQwNDNDMTAwMDAxNTk2MDA1MDY1Cis6MTAzMEIwMDA0M0MxMDAwMDIwMDAwMEExNDJDOTAxMDAxQTk2MjI0MDJECis6MTAzMEMwMDBGNTZEMDAwMDAwMDAwMDQyNDNEMTAxMDAwNDAwQTI0MDYxCis6MTAzMEQwMDBFNTdEMDAwMDAwMDAwMDQwMjNCMDAxMDAwMDAwODA0OUIxCis6MTAzMEUwMDAxRjkwMDEwMDFEOTYyMjExMUU3QzAwMDAxRjk2QTBGMDZCCis6MTAzMEYwMDAxNjQwMDAwMDFGOTYwMDQxMTdDMDAwMDAxRjk2QTBGNDY0Cis6MTAzMTAwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwQTI0MTZECis6MTAzMTEwMDAyM0QwMDAwMDE1OTYwMDUyNDNEMTAwMDAwMEI1MDAwREU5Cis6MTAzMTIwMDA0MkM5MDEwMDIyOTYzMDQ3MTcwNDAwMDAyNTk2QTIwQkUxCis6MTAzMTMwMDBFNjdEMDAwMDAwMDA5MDQyODFCMDAxMDAwMEI3MDAwRDY0Cis6MTAzMTQwMDA0NkM5MDEwMDI5OTZBMjBCRTY3RDAwMDAwMDAwMDAwQjk1Cis6MTAzMTUwMDBFNjkxMDEwMDAwMDA5MDQxODFCMDAxMDAwMDAwMTA0MEE0Cis6MTAzMTYwMDA4MUIyMDEwMDJBOTY0MDA3OTYzMDAwMDBGMzk5MDA0MDkyCis6MTAzMTcwMDA4MTMyMDEwMDM0OTZBMjQ1OTU3QzAwMDAwMTk3M0Y0MUMxCis6MTAzMTgwMDA5NUUwMDEwMDAwMDAwMEYzOTZCMDAxMDAwMDAwMDA0RTQxCis6MTAzMTkwMDBFNkIxMDEwMDQwOTczRTQwOTdFMDAxMDAwMDAwMDA0RTdDCis6MTAzMUEwMDBFNkIxMDEwMDQwOTczRTQwOURFMDAxMDA0Nzk2MDAzQjlDCis6MTAzMUIwMDBFN0IxMDAwMDM0OTYzMDQwODEzMjAwMDAzRTk2QTIwQjA5Cis6MTAzMUMwMDBFNjdEMDAwMDAwQjUwMDBENDZDOTAxMDAzQTk2QTIwQjRECis6MTAzMUQwMDBFNjdEMDAwMDAwMDAxMDQwODFCMjAxMDAwMDAwOTg0MjJFCis6MTAzMUUwMDA4MUIwMDEwMDAwQjcwMDBENDZDOTAxMDAwMDAwMDAwQkNFCis6MTAzMUYwMDBFNjkxMDEwMDAwMDAxMDQwODFCMjAxMDAwMDAwOTg0MUZBCis6MTAzMjAwMDA4MUIwMDEwMDA0MDAyMUEyOTUyMDAwMDAwMDAwMTA0QUI2Cis6MTAzMjEwMDA0NDgzMDEwMDAwOTczRTQxOTVFMDAxMDAwMDAwMDA0RTBDCis6MTAzMjIwMDBGNkIxMDEwMDAwMDAwMDRFRTZCMTAxMDA0MDk3M0U0MEJCCis6MTAzMjMwMDA5REUwMDEwMDAwMDAwMDNCRTdCMTAxMDAwMDAwMDA0QUYyCis6MTAzMjQwMDA5MEIxMDEwMEZGRkYwMDA3OTI4OTAxMDAwMDAwOTg0MDQzCis6MTAzMjUwMDA4MUIwMDEwMDAzMDAwMDA4ODZGNDAxMDAwMEI3MDA0M0JDCis6MTAzMjYwMDA0NkM5MDEwMDA3MDAwMDA4ODI4ODAxMDA0Qjk2NDAwODBCCis6MTAzMjcwMDA5NjMwMDAwMEYzOTkwMDQwODEzMjAxMDA1Nzk2MjI0NUI0Cis6MTAzMjgwMDA5NTdDMDAwMDUzOTYyMjVBMUY3QzAwMDAxMDAwMDAwRjBFCis6MTAzMjkwMDA5NkY0MDEwMDUwOTYzMTVGOTcwNDAwMDAwMDAwMTE0QjM2Cis6MTAzMkEwMDA0ODkzMDEwMDAwMDAwMDRCNkFCMTAxMDA1Mzk2MzA0MDgyCis6MTAzMkIwMDA4MTMyMDAwMDAwMDAwMDQxRTY4MTAxMDAwMDAwMTA0MDYyCis6MTAzMkMwMDA4MUIyMDEwMDAwMDA5ODQwODFCMjAxMDAwMDk3M0Y0MUE3Cis6MTAzMkQwMDA5NUUwMDEwMDAwMDAwMEYzOTZCMDAxMDA0MDk3M0Q0MEVBCis6MTAzMkUwMDA5N0UwMDEwMDAwMDA2M0YzODhCMDAxMDA1Rjk2QTIzQjA1Cis6MTAzMkYwMDA4OTZDMDAwMDAwMDAwMDRBOTBCMTAxMDAwMTAwMDBBNkE2Cis6MTAzMzAwMDA5MkIxMDEwMDYwOTYxODRBNDQ5MzAwMDAwMDAwMTg0MEYyCis6MTAzMzEwMDA4MUIyMDEwMDMwMDAzOTQ1OTdFMDAxMDA2NTk2MjI1QURDCis6MTAzMzIwMDAxRjdDMDAwMDFGMDQwMDBGOThEODAxMDAwMDAwMDA0QzEzCis6MTAzMzMwMDA1RTk0MDEwMDY3OTYwMDA1NEFCMDAwMDAxRjA0MDBBN0Q0Cis6MTAzMzQwMDA1RTg0MDEwMDAwMDAwMDQwNEJCMDAxMDAwMDAwMDA1ODA2Cis6MTAzMzUwMDA2MUIxMDEwMDAwMDAwMDRCNjJCMTAxMDAwMDAwQTg0MDEzCis6MTAzMzYwMDA4MUIyMDAwMDY4OTYwMDQwODFCMjAwMDA2Qjk2NDAwNzcxCis6MTAzMzcwMDA5NjMwMDAwMEYzOTkwMDQwODEzMjAxMDA2Rjk2MjI0NTlCCis6MTAzMzgwMDA5NTdDMDAwMDAwMDA5ODQwODFCMjAxMDBGMTk5MDA0QTRDCis6MTAzMzkwMDA0NDEzMDEwMDAwOTczRjQxOTVFMDAxMDAwMDAwMDBGMzU1Cis6MTAzM0EwMDA5NkIwMDEwMDQwOTczRDQwOTdFMDAxMDAwMDAwNjNGM0I0Cis6MTAzM0IwMDA4OEIwMDEwMDMwMDAzODQ1OTdFMDAxMDAwMDAwMDA1RjUwCis6MTAzM0MwMDAwRjkwMDEwMDAwMDAwMDU4NjFCMTAxMDAwMDAwMDA0QkE3Cis6MTAzM0QwMDA2MkIxMDEwMDc3OTZBODQwODEzMjAwMDA3MDk2QTIzQjRFCis6MTAzM0UwMDA4OTZDMDAwMDMwMDAzODQ1OURFMDAxMDAwMDAwOTg0MEU1Cis6MTAzM0YwMDA4MUIyMDEwMEU5OTkwMDEyOTQzMDAxMDA0ODk2MDA1QTA4Cis6MTAzNDAwMDAxRjAwMDEwMDAwMDA4MDVBMUY5MDAxMDAxMTAwMDA0QUI3Cis6MTAzNDEwMDBFNkM5MDEwMDM0MDAyRjRGOTU4NDAxMDAwMDAwMDBGMzNECis6MTAzNDIwMDA5NkIwMDEwMDAxMDA2MzRCODRDODAxMDAwMDAwQTA0Mzc2Cis6MTAzNDMwMDA4NTZDMDEwMDAwMDBFMzQwODVCMDAxMDAzMDAwMkQ0NEEwCis6MTAzNDQwMDAxRjkwMDEwMDMyMDAyREYyMkFCMDAxMDAwNDAwMjJGMjg4Cis6MTAzNDUwMDAwMjMwMDAwMDY2OTUwMDEwMzIzMDAxMDAzMjAwQTA0MEJBCis6MTAzNDYwMDBFNUIxMDEwMDAwMDAwMDQwOTdCMDAxMDBGMDA3MDA0MDA2Cis6MTAzNDcwMDA5OTk4MDEwMDAwMDAwMDRBMDJDMDAxMDAwMDAwMDA1MEJECis6MTAzNDgwMDAwM0QwMDEwMDAwMDAwMDQxOTdDMDAxMDAwMDAwQTM0Q0UwCis6MTAzNDkwMDAwMkQwMDAwMDhFOTYwMDQwODFCMjAwMDAwMDAwMDBBODFCCis6MTAzNEEwMDAzNkIwMDEwMDlFOTYyMjQxMDM1MDAwMDAwMDgwMDAxMEJCCis6MTAzNEIwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDA3MDAwMDAwMzk4Cis6MTAzNEMwMDBGMEM5MDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMERECis6MTAzNEQwMDA2MkIxMDEwMDk3OTZBODAwRTAzMTAwMDAxQjg0MDA4OENCCis6MTAzNEUwMDAxQ0IwMDAwMEUyOTUwMDQwODEzMjAxMDA3QzgwMDAwM0E2Cis6MTAzNEYwMDA0MkM5MDEwMDAwMDAwMEYwMDBCMDAxMDA5Mjk2MDA1QzlCCis6MTAzNTAwMDAwMTgwMDAwMEUyOTUwMDQwODEzMjAxMDAwMDAwMDAxQkI0Cis6MTAzNTEwMDAxMEIxMDAwMDY4MDEyRDA2ODJCMDAxMDAwMDAwMDBGMjI5Cis6MTAzNTIwMDA4MkMwMDEwMDAwODAwMDAzNDZDOTAxMDBERDk1MDA0MDEzCis6MTAzNTMwMDA4MTMyMDEwMEM1OTYyMjQwMTE2QzAwMDAwMDAwNjgwODJECis6MTAzNTQwMDAzODk2MDEwMEYwMDcwMDQxODJDQzAxMDBBMzk2QUE0MTAxCis6MTAzNTUwMDAzQjQwMDAwMDAwMDAwMEY4MTBCMDAxMDAwMDAwMDA1Q0RCCis6MTAzNTYwMDAxMTgwMDEwMDAxMDAwMDFEMDRDQzAxMDBDNDk2MjY0NjE0Cis6MTAzNTcwMDAyMzMwMDAwMDA4MDAwMDAzMTJDODAxMDA2NDAxMjBGMDlECis6MTAzNTgwMDBFMEIxMDEwMEMzOTYyMjQxMDU1MDAwMDAyMDAwMDAwMzc1Cis6MTAzNTkwMDA0OEM5MDEwMDBDMDAwMEY4ODZDODAxMDAwMDAwMjI0NDYwCis6MTAzNUEwMDBGMUIxMDEwMDAwMDAwMDQzRjBCMTAxMDAwMDAwMDAwOThBCis6MTAzNUIwMDBFMEIxMDEwMDAwMDAwMDQ0NjFCMTAxMDBBMDAwMDBBNERFCis6MTAzNUMwMDA2MkREMDEwMEI1OTZBODQ2MUYxMDAwMDBDMjk2MjI0MTk4Cis6MTAzNUQwMDAwNTUwMDAwMEMwOTZBMjQxMjM1MDAwMDAwMDAwMDBBMTQ5Cis6MTAzNUUwMDAxQUIwMDEwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMDY5Cis6MTAzNUYwMDA2MkREMDEwMEJCOTZBODQ2MjMzMDAwMDAxQjg0MDA4OEQyCis6MTAzNjAwMDAxQ0IwMDAwMDEwMDAwMDAzNDhDOTAxMDAwMDAwMDAwREJDCis6MTAzNjEwMDA0MkIxMDEwMDAwMDAwMDQ0MTNDMDAxMDBCMDk2MDA1MDA4Cis6MTAzNjIwMDA0OUMxMDAwMDAwMDAwMDA1NDhCMTAxMDAwNDgwMDAwMzBBCis6MTAzNjMwMDAxQUM4MDEwMDAwMDA4MDQwODFCMjAxMDBDNDk2MjI0MEY3Cis6MTAzNjQwMDAzQjZDMDAwMDAwMDAwMEY4MDBCMDAxMDBFMjk1MDA1QzU3Cis6MTAzNjUwMDAwMTAwMDEwMEM1OTYwMDQxM0JEMDAwMDAwMDAwOEQ0N0VECis6MTAzNjYwMDA4MDMyMDEwMEIwMDAyRjVGMTNCMDAxMDAwMDAwRTBGMEQ1Cis6MTAzNjcwMDA4Q0MwMDEwMDAwODAwMDAzNDJDOTAxMDAwMDAwMDBGODc2Cis6MTAzNjgwMDA5NEIwMDEwMDAwMDAwMEY4OENCMDAxMDBEMTk2OENGOEQ1Cis6MTAzNjkwMDA4RTMwMDAwMDAwMDAwMDQ0MTk5MDAxMDAwNDAwMjJGODYwCis6MTAzNkEwMDAxNDMwMDAwMDAwMDAwMEY4MTZCMDAxMDAwMDAwMDBGODFGCis6MTAzNkIwMDAyNkIwMDEwMDA4MDAyRUY4MENCMDAxMDAwQzAwMkE0QUM4Cis6MTAzNkMwMDBFMEIxMDEwMDI4MDAwMDAwRTBDOTAxMDAxMDAwMjAxQjRCCis6MTAzNkQwMDBFMEIxMDEwMERFOTYyMDBBMEM2QzAwMDAwMDAwMDBGODRBCis6MTAzNkUwMDA5NEIwMDEwMDAwMDAwMEY4OTZCMDAxMDAyMDAwMjBGMDI2Cis6MTAzNkYwMDBFNEIxMDEwMDE4MDAyMDRBRTBCMTAxMDAxQzAwMjA0Qjk5Cis6MTAzNzAwMDBFMEIxMDEwMEM5OTYwMDQwMTNCMDAwMDAyQzAwMkQ0MjJBCis6MTAzNzEwMDAxOTkwMDEwMDJFMDAyRkYzODJCMDAxMDAwMDAwMDBGMzg5Cis6MTAzNzIwMDA5NkIwMDEwMEU0OTZBMkE1OTc2QzAwMDAwMDAwODA0MUNECis6MTAzNzMwMDA5NUIwMDEwMEU3OTZBMjQwOTc2QzAwMDAwMDAwMDA0MEExCis6MTAzNzQwMDA4M0IwMDEwMDJEMDAyMDQwRTdCMTAxMDAwMDAwNjM0MTdCCis6MTAzNzUwMDA5N0MwMDEwMEQ0MDAzRTQxODNFMDAxMDAwMDAwMDA0MTE5Cis6MTAzNzYwMDA4M0MwMDEwMEVDOTZBMEE1ODM2QzAwMDAwMDAwMDA0MDFGCis6MTAzNzcwMDA4M0IwMDEwMDJDMDAyMDQxRTZCMTAxMDBGMTk2MjI0MDA3Cis6MTAzNzgwMDAxRjdDMDAwMDAwMDQwMDAwOThEQzAxMDAwQjAwMDA0Q0NFCis6MTAzNzkwMDBFNEY1MDEwMDAwMDA4MDQwMUY4MDAxMDAwQjAwODAwMDY0Cis6MTAzN0EwMDBFNEY1MDEwMEU2OTUwMDQwODEzMjAxMDAwNDgwMDAwMzQ5Cis6MTAzN0IwMDA0NEM5MDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0MEQ4Cis6MTAzN0MwMDBGMUIxMDEwMDAwMDA2MDQxODdCMDAxMDAwMDgwMDAxMEVECis6MTAzN0QwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDA0OEEwCis6MTAzN0UwMDBGMEIxMDEwMDAwMDAwMDQ5RjBCMTAxMDAwMDAwMDAwMzQ5Cis6MTAzN0YwMDBFMEIxMDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDAxMEFGCis6MTAzODAwMDA2MkREMDEwMDAwMDBBODVEMDU5MDAwMDBGRDk2MDA0MDBCCis6MTAzODEwMDA4MUIyMDAwMEU2OTUwMDQwODEzMjAxMDAwMDgwMDAwMzgzCis6MTAzODIwMDA0NEM5MDEwMDAwMDAwMDQxRjBCMTAxMDAwMDAwMDA0MjY1Cis6MTAzODMwMDBGMEIxMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0M0MwCis6MTAzODQwMDBGMEIxMDEwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEU4Cis6MTAzODUwMDBGMUIxMDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OTkyCis6MTAzODYwMDBGMEIxMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDAwMDA0NURDCis6MTAzODcwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTg1REMwCis6MTAzODgwMDAwNTkwMDAwMDBDOTcwMDQwODFCMjAwMDAyRDAwMDA0MDIwCis6MTAzODkwMDA0Mzk5MDEwMDJFMDAyRkYzODRCMDAxMDAwMTAwNjNGMzZGCis6MTAzOEEwMDA5NkM4MDEwMDE0OTc5RjQxODU1MDAwMDAwMTAwMDBBNUIzCis6MTAzOEIwMDA4NUNDMDEwMDJEMDBBMDQyRTZCMTAxMDA1RTAxMkQwMDgzCis6MTAzOEMwMDA4MEIwMDEwMDE5OTc1MjQzODE2MDAwMDAwMjAwMDBGMkFECis6MTAzOEQwMDA4MkY0MDEwMDFBOTcwMDQxODA5NDAwMDAwMDAwMDA1RjBDCis6MTAzOEUwMDA4MTkwMDEwMDAwMDAwMDVFNjFCMTAxMDAwMDAwMDA0MDE1Cis6MTAzOEYwMDA2MkIxMDEwMDAwMDBBODQwOTVCMDAwMDAxQjk3OUVCQjdDCis6MTAzOTAwMDA4MDMyMDAwMDIwOTdBMjQwMUY3QzAwMDBFMjk1MDA0MDFBCis6MTAzOTEwMDA4MUIyMDAwMDAwMDA4MDQxOTVCMDAxMDAwNDAwMDAxNTU0Cis6MTAzOTIwMDA0MkM5MDEwMDAwMDAwMDU0MkJDMDAxMDAwMDAwMDBGQzRGCis6MTAzOTMwMDAyNEIwMDEwMDAwMDAwMEZDMzhCMDAxMDAwMDAwMDBGRUNGCis6MTAzOTQwMDAzQ0IwMDEwMDAwMDAwMEZFM0FCMDAxMDAzNTk3OUMxNzIyCis6MTAzOTUwMDA4MDMyMDAwMDJBOTdBMjRBMTk3QzAwMDAwMDAwODA0Q0E3Cis6MTAzOTYwMDAxRjkwMDEwMDBDMDAwMDFFOThGNDAxMDAyOTk3QTI0ODQ2Cis6MTAzOTcwMDA5OTZDMDAwMDAwMDAwMDE1NDJCMTAxMDAyOTk3QTI4QTRECis6MTAzOTgwMDBGMTZEMDAwMDBDMDAwMDAxMDJDQzAxMDAwMDAwMDBGQzAxCis6MTAzOTkwMDAzRUIwMDEwMDAxMDAwMEY0MjhDQzAxMDBDQzAwMkQwNTUwCis6MTAzOUEwMDA0OEIxMDEwMDM0OTcyMEYwM0U2QzAwMDAwMDAwMDA0QjRECis6MTAzOUIwMDAxRjkwMDEwMDAwMDAwMDRDMkJDMDAxMDBCRjAwMkQwNTJFCis6MTAzOUMwMDA0OEIxMDEwMDAwMDA4MEYzM0FFMDAxMDAwMDAwMkU0QkY2Cis6MTAzOUQwMDAxOTkwMDEwMDA3MDAyQTBDRTRCMTAxMDAwMDAwODAwNEU2Cis6MTAzOUUwMDBFNkIxMDEwMDE4MDAwMDQwNDM5OTAxMDAxQzAwMkRGMEQxCis6MTAzOUYwMDAxNkIwMDEwMDIwMDAyREYwMjZCMDAxMDAwQzAwMkZGMkJGCis6MTAzQTAwMDAwQ0IwMDEwMDAwMDBBMjA2MTRFQzAwMDA0MTk3MjI0NTEyCis6MTAzQTEwMDAxRjdDMDAwMDAwMDBBMzA2MkFFQzAwMDAwMDAwMDBGODU0Cis6MTAzQTIwMDA5NEIwMDEwMDAwMDAwMEYwOTZCMDAxMDAwQzAwMkQ0MEExCis6MTAzQTMwMDA4MUIyMDEwMDAwMDAyQTRDRTFDMTAxMDAzMDAwMDAxMEY5Cis6MTAzQTQwMDA0OEM5MDEwMDBBMDAwMDQwRjE5OTAxMDAxODAwMDAwNTcyCis6MTAzQTUwMDBGMEM5MDEwMDAwMDAwMDRBRjBCMTAxMDAwMDAwMDA0Qjc1Cis6MTAzQTYwMDBFMEIxMDEwMDAwMDAwMDQ3NjFCMTAxMDBBMDAwMDBBNDI2Cis6MTAzQTcwMDA2MkREMDEwMDRCOTdBODVDMUYxMDAwMDAwMDAwODAwNTZDCis6MTAzQTgwMDA0OEIxMDEwMDAwMDAyRTEwNDhCMTAxMDAwMDAwNjgwMTlCCis6MTAzQTkwMDA5NkIwMDEwMDAwMDAwMDAzRjBCMTAxMDA1MTk3NDU0MkNCCis6MTAzQUEwMDA2MTMxMDAwMDAwMDAwMDEwNjJCMTAxMDA1Mjk3QTgwMENGCis6MTAzQUIwMDBFMDMxMDAwMDAwMDA5RDQwODFCMjAxMDAwMDAwMkUxMEE2Cis6MTAzQUMwMDA0OEIxMDEwMDAwMDA2ODAxOTZCMDAxMDAwMDAwMDAwMzQ5Cis6MTAzQUQwMDBGMEIxMDEwMDU4OTc0NTQyNjEzMTAwMDAyMDAwMDAxMDBDCis6MTAzQUUwMDA2MkREMDEwMDU5OTdBODAwRTAzMTAwMDAwMDAwOUQ0MDEwCis6MTAzQUYwMDA4MUIyMDEwMDMwODAwMDRBNDRDOTAxMDAwMDAwMDAwNjg0Cis6MTAzQjAwMDBGMUIxMDEwMEMwQTgzRDQ2MERFMDAxMDBGRjdGMDBBMTFBCis6MTAzQjEwMDBGMDg5MDEwMDAyMDAwMDA5OTZGNDAxMDAwMDAwMDA0NjRGCis6MTAzQjIwMDA5N0UwMDEwMDAwMDA2MEE4OTdDMDAxMDA2Mzk3NDY0MjNCCis6MTAzQjMwMDA2MTMxMDAwMDMwMDAwMDRBNjJDOTAxMDA2NDk3QTg0MDZBCis6MTAzQjQwMDA4MTMyMDAwMDAwMDA5RTQwODFCMjAxMDAwMDk5M0Y0Mjk2Cis6MTAzQjUwMDA5N0YwMDEwMDY4OTc0NzQwODEzMjAwMDA3MDk3MjJGMzg4Cis6MTAzQjYwMDA3NDA2MDAwMDNGMDAwMEYzOTQ4ODAxMDAwMDAwMDAwNzg1Cis6MTAzQjcwMDBFNzg1MDEwMDAwMDAxRjU1NjFCMTAxMDAwMDAwMDA0QTA3Cis6MTAzQjgwMDA2MkIxMDEwMDAwMDBBODQwODFCMjAwMDA2RDk3MDA0MEMyCis6MTAzQjkwMDA4MUIyMDAwMDAwMDA5RjQwODFCMjAxMDAwMDAwMDBBODM3Cis6MTAzQkEwMDAzNkIwMDEwMDgwOTc4MjQxMjM0MDAwMDA3NTk3QTI0NEZGCis6MTAzQkIwMDAxRjdDMDAwMEVGOTQwMDAxOEMzMDAxMDAyMDgwMDAxMDc5Cis6MTAzQkMwMDA0MkM5MDEwMDdCOTcyMjQwRTM2RDAwMDAwMDAwMDA0M0UyCis6MTAzQkQwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA3ODk3QTg0MDRCCis6MTAzQkUwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDA0MUVFCis6MTAzQkYwMDAyM0IwMDEwMDAwMDAwMDEwMzJCMDAxMDA4MDk3MjI0MTg0Cis6MTAzQzAwMDAxOTdDMDAwMEY4OTUwMDQzMjMzMDAxMDAwMDAwMDA0MUJBCis6MTAzQzEwMDAyM0IwMDEwMDgyOTdBMzE1MEM2QzAwMDA4Mzk3MDAwNjY3Cis6MTAzQzIwMDAwNEIwMDAwMDAwMDAwMDE1MDRCMDAxMDA4NTk3MjAwMkQ4Cis6MTAzQzMwMDAxQTZDMDAwMDAwMDAwMDBEMDRCMDAxMDAwNzAwMDAwQjJBCis6MTAzQzQwMDA5Njg4MDEwMDhBOTcyNjQ3OTcyNDAwMDAwMDAwMDA0MUNCCis6MTAzQzUwMDA5N0MwMDEwMDhBOTcyMzRCMDQ2QzAwMDAwMDAwMDA0QkMyCis6MTAzQzYwMDAwNEIwMDEwMDQ5OTgwMDA1NDgzMTAxMDBCNDk3MjIwMkQwCis6MTAzQzcwMDAxNDUwMDAwMDhFOTdBMjAyMkE1MDAwMDBCNDk3QTI0NTZCCis6MTAzQzgwMDAxRjdDMDAwMDkwOTcyMjAyMEM1MDAwMDA5OTk3MDAwMkMwCis6MTAzQzkwMDAxNkMwMDAwMDk4OTcyMjVDMUY3QzAwMDAzMDgwMDAxMDQ2Cis6MTAzQ0EwMDA0MkM5MDEwMDk4OTcyMjQwRTM2RDAwMDAwMDAwMDA0N0UwCis6MTAzQ0IwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA5NDk3QTg0MDRFCis6MTAzQ0MwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTQ5Cis6MTAzQ0QwMDA0OEIxMDEwMDNBOTcwMDVDMUYwMDAxMDBCNDk3MjIxNTFCCis6MTAzQ0UwMDA4MDMyMDAwMDAwMDAwMDUwMzNDMDAxMDBCMzk3QTIwMkYwCis6MTAzQ0YwMDAxQTUwMDAwMEE1OTcyMjQ2MUY3QzAwMDA3MDgwMDAwMzI4Cis6MTAzRDAwMDA0MkM5MDEwMDAwMDAwMDQ2MUY4MDAxMDBBNTk3MjI0MDIzCis6MTAzRDEwMDBFMzZEMDAwMDAwMDAwMDQyNjFCMTAxMDA0MDAwMDAxMEFFCis6MTAzRDIwMDA2MkREMDEwMEExOTdBODQwODEzMjAwMDAxQjg0MDA4ODU5Cis6MTAzRDMwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwQzgwMDAwMzI5Cis6MTAzRDQwMDA0MkM5MDEwMDEwMDAwMEYwMTBDODAxMDAyRjAwMkY1Q0Q0Cis6MTAzRDUwMDAxMTgwMDEwMDAwMDAwMDQ3RTc5MTAxMDBGMDA3MDA0MERBCis6MTAzRDYwMDAxQjk4MDEwMDcyOTcyMDE1MUE2QzAwMDA3MDAwMDAwMzY4Cis6MTAzRDcwMDA0OEM5MDEwMDAwMDAyMjUwRjFCMTAxMDAwMDAwMDAwMzE5Cis6MTAzRDgwMDBGMEIxMDEwMEZGMDcwMDA4RTA4RDAxMDAwMDAwMDA0MkQzCis6MTAzRDkwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDBCMDk3QTg0NjU3Cis6MTAzREEwMDAxRjEwMDAwMDcyOTcwMDA1NDhCMTAwMDA3Mjk3MDAwMkQyCis6MTAzREIwMDAxMEMwMDAwMEI2OTdBMjQ0MUY3QzAwMDBFRjk0MDAwMUUxCis6MTAzREMwMDA4QzMwMDEwMDAwMDAwMDFCMTBCMTAwMDAwMDgwMDAxMENBCis6MTAzREQwMDA0NEM5MDEwMDBDMDAwMDQwRjE5OTAxMDAxMDAwMDAwOEU2Cis6MTAzREUwMDBGMEM5MDEwMDAwMDAwMDE2RjBCMTAxMDAxMDAwMDAwMzRFCis6MTAzREYwMDBFMEM5MDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDAxMDkxCis6MTAzRTAwMDA2MkREMDEwMDAwMDBBODVDMUY5MDAwMDBCRDk3MDA0MDJCCis6MTAzRTEwMDA4MUIyMDAwMDE3MDAwMEQwQTJDOTAxMDAwMDAwQTI0MDNBCis6MTAzRTIwMDAyN0VDMDAwMDAwMDAwMDIwMDBCMDAxMDBFMjk1MDA0MUY2Cis6MTAzRTMwMDBBMzQxMDEwMEMxOTcwMDQxMjdEMDAwMDAxMDAwMDAwN0Y2Cis6MTAzRTQwMDA5NkU0MDEwMDAwMDAwMDRCODA5NDAxMDAwMDAwMDA1NDQzCis6MTAzRTUwMDA2MUIxMDEwMDAwODAwMDQwNjJERDAxMDAwMDAwQTg0MDY3Cis6MTAzRTYwMDA4MUIyMDAwMEM4OTcwMDQwODFCMjAwMDAxQTk4MDA0MDVCCis6MTAzRTcwMDAyQjMwMDEwMEFDMDAyRDA2MTZDMDAxMDA5MDAwMkRGMDgzCis6MTAzRTgwMDAxNkM0MDEwMEQwOTdBMEYwMTY0NDAwMDAwMDAwMDA0MUM1Cis6MTAzRTkwMDAxN0MwMDEwMDBFMDAwMEEyNDRDOTAxMDAwMDAwNkNGMDMwCis6MTAzRUEwMDAzMEIwMDEwMEFDMDAyRDQwODdCMDAxMDAwMDAwNkNGMDg0Cis6MTAzRUIwMDAyOEIwMDEwMEQ5OTcyMjRBMTk3QzAwMDAwMDMwMDA0MzQ1Cis6MTAzRUMwMDA4NkM4MDEwMDAwMzAwMDBCMTZDODAxMDBEOTk3QTQ0MDM1Cis6MTAzRUQwMDA4MTMyMDAwMDAwMDAwMDQxMTdDMDAxMDBGQTk3MjIwNjVECis6MTAzRUUwMDA4MDMyMDAwMEU2OTdBMjA2MTQ2QzAwMDBFMzk3MjI0ODk3Cis6MTAzRUYwMDAxOTdDMDAwMERFOTdBMDQxMTc0MDAwMDAwMDAwMDA0MTNGCis6MTAzRjAwMDAxN0MwMDEwMDAwMDAwMDQxMzFDMDAxMDA5MDAwMjAxOERFCis6MTAzRjEwMDBFMEIxMDEwMDhCMDAyRDQ4MTk4MDAxMDA4QjAwMjA0NTg1Cis6MTAzRjIwMDBFNzkxMDEwMEU2OTcwMDQwODc5MDAwMDAwODAwMDA0M0Y5Cis6MTAzRjMwMDA4Njk4MDEwMEU2OTdBMDQ4MTc0MDAwMDAwMDAwMDA0MTY1Cis6MTAzRjQwMDAxN0MwMDEwMEIwMDAwMDQwNDM5OTAxMDAxMDUwMDA0MzI5Cis6MTAzRjUwMDBGQ0M5MDEwMDUxOTgwMDMwODEzMDAxMDAwMDAwMDA0MDkwCis6MTAzRjYwMDBFNUIxMDEwMEYxOTcyMjRBMTk3QzAwMDAwODAwMDBBMjg3Cis6MTAzRjcwMDA0NEM5MDEwMENDMDAyREFCRjlCMTAxMDAwMDAwMDBBQjM5Cis6MTAzRjgwMDAxN0MwMDEwMEYwOTdBMEYwMTY0NDAwMDAwMDAwMDA0MUE3Cis6MTAzRjkwMDAxN0MwMDEwMEY1OTc2NEYwODJCMDAwMDBBNDAwMDA0MDUzCis6MTAzRkEwMDA0Nzk5MDEwMEY1OTdBMkYyODAzMjAwMDAwMDAwMDA0MTFECis6MTAzRkIwMDBFNUIxMDEwMDhDMDAyMDE4RTBCMTAxMDA5MDAwMDA0MDQ0Cis6MTAzRkMwMDA0NTk5MDEwMDAwMDA2MDA2MzBDMDAxMDAwMDAwODYwQzI5Cis6MTAzRkQwMDA4MEIyMDAwMEJDMDAyRDQ2MTk5MDAxMDBBMDAwQTBGMkE0Cis6MTAzRkUwMDBFNEIxMDEwMEIwMDAwMDQwNDM5OTAxMDAxMDUwMDA0M0NCCis6MTAzRkYwMDBGQ0M5MDEwMDUxOTgwMDMwODEzMDAxMDAwMDAwQTI0QTQ0Cis6MTA0MDAwMDAxOUZDMDAwMDA4MDAwMEEyNDRDOTAxMDBDQzAwMkRBQjNGCis6MTA0MDEwMDBGOUIxMDEwMDAwMDAwMEFCMTdDMDAxMDAwMzk4QTBGMDQ3Cis6MTA0MDIwMDAxNjQ0MDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwRTRGMDQ5Cis6MTA0MDMwMDA4MkIwMDEwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA0MTZFCis6MTA0MDQwMDBGMEIxMDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMDI5Cis6MTA0MDUwMDBGMEIxMDEwMDAwMDAwMDEwNjJCMTAxMDAwMDAwQTgxQkQ3Cis6MTA0MDYwMDBFMEIxMDAwMDA4OTgwMDQwODFCMjAwMDAwMEYwMDAwQ0IwCis6MTA0MDcwMDA3RTg5MDEwMDAwMDBBNjRDOTU2MDAxMDAwMDAwODA0QTg2Cis6MTA0MDgwMDAxODk0MDEwMDAwODAwMDEwNDRDOTAxMDAwNDAwMjIwMUJFCis6MTA0MDkwMDBGMDMxMDAwMDIwMDAwMDQwRjBDOTAxMDAwMDAwMDAxNkNGCis6MTA0MEEwMDBGMEIxMDEwMDAwMDAwMDQzNjFCMTAxMDAyMDAwMDAxMEU4Cis6MTA0MEIwMDA2MkREMDEwMDAwMDBBODE1RTBCMTAwMDAxMzk4MDA0MDg3Cis6MTA0MEMwMDA4MUIyMDAwMDEwODAwMDAzNDRDOTAxMDAwMDAwMDAwNjE2Cis6MTA0MEQwMDBGMEIxMDEwMDAwMDAwMDAxRjBCMTAxMDAwMDAwRTg1RjU0Cis6MTA0MEUwMDAxNzkwMDEwMDcwMDAwMDQwNDM5OTAxMDA3QTAxMkVGRUY0Cis6MTA0MEYwMDA5MkIwMDEwMDhCMDAyREY2MTZCMDAxMDAyMDk4MjI0M0VCCis6MTA0MTAwMDBFNzdEMDAwMDAwMDAwMDQ0NDVDMTAxMDAwNDAwMDBBNjU2Cis6MTA0MTEwMDAyQUIwMDEwMDI4MDA2RTA2ODJDODAxMDAyNDk4MjI0QUI1Cis6MTA0MTIwMDAxOTdDMDAwMDAwMDAwMDQyNDVEMTAxMDAwMDAwNkU0Q0U3Cis6MTA0MTMwMDA4M0MwMDEwMDAwMDAwMDQxOTJDMDAxMDAyNTk4NDIzMDc4Cis6MTA0MTQwMDAzRDA3MDAwMDAwMDA2NjlFODNCMDAxMDAwMDAwMUE0MTk4Cis6MTA0MTUwMDAzREMzMDEwMDAwMDAwMDQxOTJDMDAxMDAwNjAwMDBBMjIyCis6MTA0MTYwMDA0NEM5MDEwMDEwMDAwMDQ5OThGNDAxMDAyRTk4MjYzMDNGCis6MTA0MTcwMDA5MzA0MDAwMDJFOTg5MDRDOTI0MDAwMDAwMDAwMDA0MUYzCis6MTA0MTgwMDA5M0MwMDEwMEZGRkY4MDQ5RUNBOTAxMDAwMDgwMDAxMEVFCis6MTA0MTkwMDA0NEM5MDEwMDA0MDAyMjAxRjAzMTAwMDAwMDAwMDAwOUMwCis6MTA0MUEwMDBGMEIxMDEwMDAwMDAwMDE4RjBCMTAxMDAyMDAwMDAxMDgzCis6MTA0MUIwMDA2MkREMDEwMDAwMDBBODE1RTBCMTAwMDAzMzk4MDA0MDY2Cis6MTA0MUMwMDA4MUIyMDAwMDQwOTgyMjVGODE3QzAwMDAzRjk4QTI0MEFECis6MTA0MUQwMDAxOTdDMDAwMDAwMDAwMDQwMTk5MDAxMDAwMDAwMDA1NDBDCis6MTA0MUUwMDA2MUIxMDEwMDEwMDAwMDA3OTZFNDAxMDAwMDAwMDA0RkRCCis6MTA0MUYwMDA5Nzk0MDEwMDAwMDAwMDRCNjJCMTAxMDAzRjk4Mjg0MEY1Cis6MTA0MjAwMDA4MTMyMDAwMDNDOTgwMDQwODFCMjAwMDAwMDAwQTIyMUYxCis6MTA0MjEwMDA4MTg0MDAwMDQzOThBMjVGODE2QzAwMDAwMDAwQTI0M0VCCis6MTA0MjIwMDAxOTdDMDEwMDAwMDAwMDQzMTk5MDAxMDAwMDAwMDA1NEI3Cis6MTA0MjMwMDA2MUIxMDEwMDEwMDAwMDA3OTZFNDAxMDAwMDAwMDA0MDk5Cis6MTA0MjQwMDA5Njk0MDEwMDAwMDAwMDRCNjJCMTAxMDAwMDAwQTg0MEZDCis6MTA0MjUwMDA4MUIyMDAwMDQ2OTgwMDQwODFCMjAwMDAwMDgwMDAxOTQxCis6MTA0MjYwMDA0NEM5MDEwMDA0MDAyMjAyRjAzMTAwMDAwMDAwMDAwQkVDCis6MTA0MjcwMDBGMEIxMDEwMDAwMDAwMDEzRjBCMTAxMDAwMDAwMDA0M0E0Cis6MTA0MjgwMDA2MUIxMDEwMDIwMDAwMDE5NjJERDAxMDAwMDAwQTgwOEYyCis6MTA0MjkwMDBFMEIxMDAwMDRFOTgwMDQwODFCMjAwMDA3QzAwMkRGMDlCCis6MTA0MkEwMDA4NEIwMDEwMDAyMDAwMEYwOThGNDAxMDA1Nzk4MjA0Q0ZGCis6MTA0MkIwMDA4NDZDMDAwMDg4MDAwMDQwNDM5OTAxMDA1Nzk4MjBGMjY4Cis6MTA0MkMwMDA4NDZDMDAwMDAwMDAwMDQwODVCMDAxMDA5ODAwMkQxNEFGCis6MTA0MkQwMDA4MkIwMDEwMDAwMDAwMEYwOThCMDAxMDBBMzAwMkQxNDhFCis6MTA0MkUwMDA5OEQwMDEwMDVDOTgyMDRDODQ2QzAwMDAwMDAwMDA0Q0M5Cis6MTA0MkYwMDA4NEIwMDEwMDAwMDAwMEYzODBFMDAxMDA1Rjk4MjM0MERCCis6MTA0MzAwMDA4NDZDMDAwMDAwMDAwMDQwODRCMDAxMDBEMDAwMjAxNDQ0Cis6MTA0MzEwMDBFMEIxMDEwMDk4MDAyNTQyODBCMDAxMDAwMDAwNkVGMzdBCis6MTA0MzIwMDA4MEYwMDEwMDAwMDBBNjQyODJDMDAwMDA2NTk4QTA0MDE1Cis6MTA0MzMwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwOUZGMDdGCis6MTA0MzQwMDA4MkVDMDAwMDk4MDBBMDQxRTBCMTAxMDA2ODk4MDAxMkUyCis6MTA0MzUwMDAxMEM5MDAwMDAwNDg4MDQwMEI5ODAxMDBDMDQ5ODA0MDBGCis6MTA0MzYwMDAwQjk4MDEwMDgwNEI4MDQwMEI5ODAxMDA0MDREODA0MDJECis6MTA0MzcwMDAwQjk4MDEwMDAwNEY4MDQwMEI5ODAxMDBDMDUwODA0MDE2Cis6MTA0MzgwMDAwQjk4MDEwMDgwNTI4MDQwMEI5ODAxMDA0MDU0ODA0MEZGCis6MTA0MzkwMDAwQjk4MDEwMDAwNTY4MDQwMEI5ODAxMDBDMDU3ODA0MEU4Cis6MTA0M0EwMDAwQjk4MDEwMDgwNTk4MDQwMEI5ODAxMDA0MDVCODA0MEQxCis6MTA0M0IwMDAwQjk4MDEwMDAwNUQ4MDQwMEI5ODAxMDBDMDVFODA0MEJBCis6MTA0M0MwMDAwQjk4MDEwMDgwNjA4MDQwMEI5ODAxMDA0MDYyODA0MEEzCis6MTA0M0QwMDAwQjk4MDEwMDAwNjQ4MDQwMEI5ODAxMDBDMDY1ODA0MDhDCis6MTA0M0UwMDAwQjk4MDEwMDgwNjc4MDQwMEI5ODAxMDA0MDY5ODA0MDc1Cis6MTA0M0YwMDAwQjk4MDEwMDAwNkI4MDQwMEI5ODAxMDBDMDZDODA0MDVFCis6MTA0NDAwMDAwQjk4MDEwMDgwNkU4MDQwMEI5ODAxMDA0MDcwODA0MDQ2Cis6MTA0NDEwMDAwQjk4MDEwMDAwNzI4MDQwMEI5ODAxMDBDMDczODA0MDJGCis6MTA0NDIwMDAwQjk4MDEwMDgwNzU4MDQwMEI5ODAxMDA0MDc3ODA0MDE4Cis6MTA0NDMwMDAwQjk4MDEwMDAwNzk4MDQwMEI5ODAxMDBDMDdBODA0MDAxCis6MTA0NDQwMDAwQjk4MDEwMDgwN0M4MDQwMEI5ODAxMDA0MDdFODA0MEVBCis6MTA0NDUwMDAwQjk4MDEwMDg4OTg0MzU3NjEzMTAwMDA5NDk4QTI1NzQ3Cis6MTA0NDYwMDA3MzdEMDAwMDk0OThBMjQwODE2RjAwMDAwMDAwMDA0ODE2Cis6MTA0NDcwMDA2MUIxMDEwMDAwMTAwMDRBNjJERDAxMDA4Qzk4QTg0QTc5Cis6MTA0NDgwMDA4MDMzMDAwMDkxOTgyMjVGOTU3QzAwMDAwMDAwMDA0QjczCis6MTA0NDkwMDA2MkIxMDEwMDhGOThBODRCQUMzMzAwMDAwMDAwMUJBNTRGCis6MTA0NEEwMDA4MkIzMDEwMDAwMDAwMEJFODNDMzAxMDAwMDAwODA0MDExCis6MTA0NEIwMDA5N0IwMDEwMDAwMTAwMDRBNjJERDAxMDA5ODk4Mjg0MDgyCis6MTA0NEMwMDA4MTMyMDAwMDk0OTgyMjU3Nzc3RDAwMDAwMDAwOUIyMEU1Cis6MTA0NEQwMDA5N0IwMDEwMDAwMDAwMDRCNjJCMTAxMDA5ODk4QTg0MDFECis6MTA0NEUwMDA4MTMyMDAwMDAwMDA5QjQwOTdCMDAxMDAwMDAwMkUxMEI4Cis6MTA0NEYwMDA0OEIxMDEwMEE4MDEwMDQwRjE5OTAxMDAwMDAwMDAwNTQ5Cis6MTA0NTAwMDBGMEIxMDEwMDA5MDAwMDA3OTZFNDAxMDAwMDAwNjBBNzc3Cis6MTA0NTEwMDA5N0MwMDEwMDAwMDAwMDEwNjJCMTAxMDAwMDAwQTg0MDM3Cis6MTA0NTIwMDA4MUIyMDAwMEEwOTgwMDQwODFCMjAwMDBBODAwMkQxQ0JDCis6MTA0NTMwMDA4QUIwMDEwMDAwMDA5RkYwOEFEMDAwMDAwMDAwQTI0MDc1Cis6MTA0NTQwMDA4QkVDMDAwMDhBMDAyMDQwRTdCMTAxMDBCNDAwMDA0MDdECis6MTA0NTUwMDA0Nzk5MDEwMEE0MDAyRDQ1RTBEMTAxMDBBRDk4OUMxN0JBCis6MTA0NTYwMDA4MDMyMDAwMEJFMDAyRkFCODNCMDAxMDAxNzk5MDAxNDA5Cis6MTA0NTcwMDA4MjUwMDEwMEIyOTgwMDQwODFCMjAwMDBCMjk4MjJGMjRECis6MTA0NTgwMDA4MjMwMDAwMDhDMDAwMDQwNDM5OTAxMDBCMjk4OUYxQ0NCCis6MTA0NTkwMDBFMDZEMDAwMEJFMDAwMDQwNDc5OTAxMDAxNzk5MDA0MEZGCis6MTA0NUEwMDA4MTMyMDEwMEE4MDAyMDFDRTBCMTAxMDA5QzAwMkQzMEU4Cis6MTA0NUIwMDA4MUIwMDEwMDg4MDAyREYwODRCMDAxMDA5NDAwMkRGMjNDCis6MTA0NUMwMDA4NkIwMDEwMERDOTgyM0YwODQ2QzAwMDAwQzAwMDA0MkVGCis6MTA0NUQwMDA4OEY0MDEwMERDOTgyMDUwODk2QzAwMDBDQjk4QTM5MkVECis6MTA0NUUwMDA4NzZDMDAwMEJCOTgwMDQ0MTBDOTAwMDBEQzk4MDAwQUVBCis6MTA0NUYwMDA4N0IwMDAwMERDOTgwMDA5ODdCMDAwMDBEQzk4MDAwODU0Cis6MTA0NjAwMDA4N0IwMDAwMERDOTgwMDA3ODdCMDAwMDBEQzk4MDAwNzQ2Cis6MTA0NjEwMDA4N0IwMDAwMERDOTgwMDA3ODdCMDAwMDBEQzk4MDAwNjM3Cis6MTA0NjIwMDA4N0IwMDAwMERDOTgwMDA2ODdCMDAwMDBEQzk4MDAwNjI4Cis6MTA0NjMwMDA4N0IwMDAwMERDOTgwMDA2ODdCMDAwMDBEQzk4MDAwNjE4Cis6MTA0NjQwMDA4N0IwMDAwMERDOTgwMDA1ODdCMDAwMDBEQzk4MDAwNTBBCis6MTA0NjUwMDA4N0IwMDAwMERDOTgwMDA1ODdCMDAwMDBEQzk4MDAwNUZBCis6MTA0NjYwMDA4N0IwMDAwMERDOTgwMDA1ODdCMDAwMDBDQzk4MDA0NEJCCis6MTA0NjcwMDAxMEM5MDAwMERDOTgwMDBGODdCMDAwMDBEQzk4MDAwRTI1Cis6MTA0NjgwMDA4N0IwMDAwMERDOTgwMDBEODdCMDAwMDBEQzk4MDAwQ0JCCis6MTA0NjkwMDA4N0IwMDAwMERDOTgwMDBDODdCMDAwMDBEQzk4MDAwQ0FDCis6MTA0NkEwMDA4N0IwMDAwMERDOTgwMDBDODdCMDAwMDBEQzk4MDAwQzlDCis6MTA0NkIwMDA4N0IwMDAwMERDOTgwMDBDODdCMDAwMDBEQzk4MDAwQjhECis6MTA0NkMwMDA4N0IwMDAwMERDOTgwMDBCODdCMDAwMDBEQzk4MDAwQjdFCis6MTA0NkQwMDA4N0IwMDAwMERDOTgwMDBCODdCMDAwMDBEQzk4MDAwQjZFCis6MTA0NkUwMDA4N0IwMDAwMERDOTgwMDBCODdCMDAwMDBEQzk4MDAwQjVFCis6MTA0NkYwMDA4N0IwMDAwMEJGMDAyRDQzODRDMDAxMDA5MDAwMkRGMzVGCis6MTA0NzAwMDA4MEUwMDEwMEUxOTgyMzQwODQ2QzAwMDA5NDAwMjA5RDJCCis6MTA0NzEwMDBFMUIxMDEwMDAwMDAwMDQwODRCMDAxMDBFNTk4QTJGMDgyCis6MTA0NzIwMDAzODZDMDAwMDlDMDAyMDQyRTBCMTAxMDAwMDAwMDA1RkY2Cis6MTA0NzMwMDAxMzk0MDEwMDAwMDA4MDQ2MTk4MDAxMDA5QzAwMjA0MjczCis6MTA0NzQwMDBFMEIxMDEwMDM3MDAwMDQwNDM5OTAxMDAwNDAwMDBGMzhDCis6MTA0NzUwMDA4MEY0MDEwMDBGMDAwMEYzODI4ODAxMDBFQjk4MjM0MUYwCis6MTA0NzYwMDA4MDZDMDAwMDAwMDAwMDVGMTM5NDAxMDAwMDAwODkwQ0MxCis6MTA0NzcwMDA4MEIyMDAwMEJDMDAwMDQwNDM5OTAxMDBBMDAwQTBGMkZDCis6MTA0NzgwMDBFNEIxMDEwMDAwMDA5RjQxMjRFQzAwMDBGNTk4QTY0MDMwCis6MTA0NzkwMDA4MTMyMDAwMDAwMDA5RjQyMzhFQzAwMDBGNTk4QTY0MEVFCis6MTA0N0EwMDA4MTMyMDAwMEI0MDAwMDQwNDM5OTAxMDBGNzk4QTNGMDYzCis6MTA0N0IwMDAzQTZDMDAwMDAwMDA4MDQwODFCMjAxMDBCNDAwMDA0MDZCCis6MTA0N0MwMDA0Mzk5MDEwMEZCOTgyMkYwM0E2QzAwMDBCNDAwMjAxREQwCis6MTA0N0QwMDBFMEIxMDEwMDgwMDAyRDVGMTM5NDAxMDBGQjk4MjNGMEVECis6MTA0N0UwMDAzQTZDMDAwMDgwMDAyMDFERTBCMTAxMDBDMDAwMjAxMkUyCis6MTA0N0YwMDBFMEIxMDEwMEM0MDBBMDFDRTBCMTAxMDAwMDgwMDAwMzkyCis6MTA0ODAwMDA0NEM5MDEwMDAwMDAwMDQyRTBCMTAxMDAxMjAwMDA0MDc0Cis6MTA0ODEwMDA4Nzk4MDEwMDA0OTk5RjQxMjQ2QzAwMDAwMDAwMDA0MTJBCis6MTA0ODIwMDA4Q0IwMDEwMDAwMDAwMDEyOENEMDAxMDAwNTk5MDA0MUZECis6MTA0ODMwMDAyNEIwMDAwMDAwMDAwMDQwOERCMDAxMDA1NTk5MDA0MEY4Cis6MTA0ODQwMDA4MTMyMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDBDCis6MTA0ODUwMDA2MkREMDEwMDAwMDBBODQwODFCMjAwMDAwNzk5MDA0MDFECis6MTA0ODYwMDA4MUIyMDAwMEQ0OTUwMDQwODEzMjAxMDAwMDAwMDAxNkEyCis6MTA0ODcwMDA4MEIyMDEwMDAwMDBBNzA4ODAzMjAxMDAwRjk5QTI0MDE5Cis6MTA0ODgwMDA5NTZDMDAwMEUyOTUwMDQwODEzMjAxMDAwMDgyMDBBNjk0Cis6MTA0ODkwMDAwNEIwMDEwMDAwMDAwMDQwMkRCMDAxMDBBMDk4MkY0MDlFCis6MTA0OEEwMDAxMUIwMDEwMEU5ODkwMDQxODlCMDAwMDAwMDAwOUZGOEMzCis6MTA0OEIwMDAzRUVDMDAwMDAwMDA5RjEyRTBFRDAwMDBDODAwMjBBQkJECis6MTA0OEMwMDBFMUIxMDEwMENDMDBBMDFGRTBCMTAxMDAxOTk5QTM1Rjg0Cis6MTA0OEQwMDBFNzZEMDAwMDAwMDAwMDQxRTdDMTAxMDBBNjAwMDA0MEI0Cis6MTA0OEUwMDA0Nzk5MDEwMDJEOTkyMkYyODYzMDAwMDAwMzAwMDA0MzExCis6MTA0OEYwMDA4NEY0MDEwMDAxMDAwMDQxODBDQzAxMDBCODAwMkQ0Mjg5Cis6MTA0OTAwMDA4MEQwMDEwMDAwMDA2MjQwODZDMDAxMDAyMTk5MUY0MzUxCis6MTA0OTEwMDA4MDMyMDAwMDIyOTlBMjQwODc2QzAwMDAwMDAwNjI0MUIyCis6MTA0OTIwMDA4N0IwMDEwMDI2OTk5RjQwODAzMjAwMDAwMDAwMDA0MEJGCis6MTA0OTMwMDA4NUIwMDEwMDAwMDAwMDQwODREMDAxMDAwMDAwMDA0MjZBCis6MTA0OTQwMDA4MEIwMDEwMDAwMDAwMEYyODhCMDAxMDAwMjAwMDA0NEM1Cis6MTA0OTUwMDA4NEY0MDEwMEI4MDAyRTQyODBEMDAxMDAwMDAwNjI0MEMzCis6MTA0OTYwMDA4OEMwMDEwMDJDOTkxRjQ0ODAzMjAwMDAzMDk5QTI0MDc5Cis6MTA0OTcwMDA4OTZDMDAwMDMwOTk2MjQxODlCMDAwMDAwMzAwNjI0MUY3Cis6MTA0OTgwMDA4NkU0MDEwMEI4MDAwMDQwNDU5OTAxMDAwMTAwNjI0MTQxCis6MTA0OTkwMDA4OEU0MDEwMEE0MDAyMDQwRTVCMTAxMDBBMjAwMjA0MDBECis6MTA0OUEwMDBFN0IxMDEwMEJDMDAyRTQzODdGMDAxMDAwMDAwMDA0NDg1Cis6MTA0OUIwMDA4NkMwMDEwMDM2OTkyMDQzODc2QzAwMDAwMDAwODA0M0M4Cis6MTA0OUMwMDBFNUIxMDEwMDQwMDEwMDQzODBDRTAxMDAwMDAwQTQ0Mzk2Cis6MTA0OUQwMDBFNDMxMDEwMDQwMDFFMjQwODc5ODAxMDA4ODAwMkQ0NDQ1Cis6MTA0OUUwMDA4MUIwMDEwMDkwMDAyREYyMkVCMDAxMDA5QzAwMkRGMDRFCis6MTA0OUYwMDA4NkIwMDEwMDkwMDAyREYwODJCMDAxMDBCQTAwMkRGMEM5Cis6MTA0QTAwMDA5OEIwMDEwMDQzOTlBMjEyOTg2QzAwMDBCQzAwMkRGMkVFCis6MTA0QTEwMDA5OEIwMDEwMDQzOTlBMEYyOTg2QzAwMDAwMDAwMDAxN0M0Cis6MTA0QTIwMDA4MkIwMDEwMDlDMDAyMDQxRTBCMTAxMDBCNDAwMkQxMkQxCis6MTA0QTMwMDA4NkQwMDEwMDQ2OTlBMzQxRTA2RDAwMDA0Nzk5MDBGMDNGCis6MTA0QTQwMDA4NEIwMDAwMDAwMDAwMDQxODRCMDAxMDA4MDAwMkQ0M0NDCis6MTA0QTUwMDA4NEQwMDEwMDRBOTk5RjQyODAzMjAwMDAwMDAwMDA0MDRCCis6MTA0QTYwMDA4NUIwMDEwMDRDOTlBMzQyMTQ2QzAwMDA0RDk5MDAwQUQ2Cis6MTA0QTcwMDAwQ0IwMDAwMDAwMDAwMDQyMENCMDAxMDA0Rjk5QTAxN0RDCis6MTA0QTgwMDAwQzZDMDAwMDAwMDA4MDE3MENCMDAxMDA1NDk5MjI0MDBCCis6MTA0QTkwMDAwRDZDMDAwMDAwMDBBMDBBMENFQzAwMDAwMTAwMDBGMDBBCis6MTA0QUEwMDA4MkY0MDEwMDU0OTlBMDQxMEM2QzAwMDAwMDAwQTJGMEI3Cis6MTA0QUIwMDA4MDMyMDEwMDAwMDA4MDQwODFCMDAxMDBFNjk1MDA0MDk2Cis6MTA0QUMwMDA4MTMyMDEwMDA0ODAwMDAzNDRDOTAxMDAwMDAwMDA0NjU3Cis6MTA0QUQwMDBGMEIxMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwNjA0MUIwCis6MTA0QUUwMDA4Nzk0MDEwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEJDCis6MTA0QUYwMDBGMUIxMDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OUUwCis6MTA0QjAwMDBGMEIxMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDAwMDA0NTI5Cis6MTA0QjEwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTg1RDBECis6MTA0QjIwMDAwNTkwMDAwMDYwOTkwMDQwODFCMjAwMDAwMDAwMkU0QjBCCis6MTA0QjMwMDAxOTkwMDEwMDA1MDAyQTBDRTRCMTAxMDAwMDAwODAwNDc2Cis6MTA0QjQwMDBFNkIxMDEwMDZBOTkyMjQ5MUY3QzAwMDA0MjAwMDA0MDQyCis6MTA0QjUwMDA4Nzk4MDEwMDAwMDAwMDQ5MUY4MDAxMDBDMDk3MDA0MEI1Cis6MTA0QjYwMDA4REIwMDAwMDcwOTkyMjQwQUY2RjAwMDAwMDAwMDAxNTZBCis6MTA0QjcwMDA5NkIwMDEwMDg4OTgwMDA4OTQzMDAxMDA2Rjk5MjI0MDk3Cis6MTA0QjgwMDA5NzZDMDAwMEMwOTcwMDQ2ODdCMDAwMDAwMDAwODA0MDhFCis6MTA0QjkwMDA4N0IwMDEwMDcwOTk0MzQ4NjEzMTAwMDAwMDEwMDAwODlGCis6MTA0QkEwMDA2MkREMDEwMDc1OTkyODQwODczMDAwMDA3MTk5MjI0ODI0Cis6MTA0QkIwMDA3NzdEMDAwMEMwOTcxQjQ2ODdCMDAwMDA3ODk5MjI1RjgwCis6MTA0QkMwMDAxMTdDMDAwMDA0MDAyMjE1NjIzMTAwMDA3Njk5QTg0MDkzCis6MTA0QkQwMDA4MTMyMDAwMDAwMDA5QjQwODFCMjAxMDAwMDAwMDA0MEQzCis6MTA0QkUwMDA0OUIxMDEwMDMwMDAwMDQwQTE5OTAxMDAwMDAwMDA0MERGCis6MTA0QkYwMDA5M0IwMDEwMDAwMDAwMDQwMUZCMDAxMDBDOTk5MDA0OUI2Cis6MTA0QzAwMDA5NjMwMDEwMDA3MDAwMDQ5MDZFNDAxMDAwMDM5MDAwMzY2Cis6MTA0QzEwMDAwNkM4MDEwMDAwMDAwMDQwMDVCMDAxMDAyMDAwMDBEMERGCis6MTA0QzIwMDBBMEM5MDEwMDAwMDAwMDQxOTNDMDAxMDA3RDk5QTA1NDdCCis6MTA0QzMwMDA5MzZDMDAwMDAwMDAyRTA1OTdCMDAxMDAwMDQ4MDA0MDcyCis6MTA0QzQwMDA0OTk5MDEwMDAwMDAwMDQwRTFCMTAxMDBDMDAxMDBBMjRCCis6MTA0QzUwMDA0NEM5MDEwMDg2OTlBMjQxOTc1MDAwMDAwMDAwMDAyMDNECis6MTA0QzYwMDA0OUIzMDEwMENFOTkwMDQwNDkzMTAxMDAwMEI1MkUwODNBCis6MTA0QzcwMDA5N0IwMDEwMDAwMDAwMDQwRjFCMTAxMDA4Qzk5QTI0MTAxCis6MTA0QzgwMDA5NzUwMDAwMDE4MDAwMDQwOTc5ODAxMDAwMDk3MkU0MEIwCis6MTA0QzkwMDA4MUIyMDEwMDAwMDAwMDQwRjFCMTAxMDA5MDk5QTI0MUYxCis6MTA0Q0EwMDA5NzUwMDAwMDAwMDAwMDQwNDlCMTAxMDA0MDE4MkUwNTU3Cis6MTA0Q0IwMDA5N0IwMDEwMDAwMDAwMDQwRjFCMTAxMDA5NDk5QTI0MUI5Cis6MTA0Q0MwMDA5NzUwMDAwMDU3OTUyMDQwRTdCMTAxMDAzMDk0MDA0MDE0Cis6MTA0Q0QwMDA0NTk5MDEwMDY0MDAwMDQwRTU5OTAxMDA1Njk1MjA0MDg3Cis6MTA0Q0UwMDBFN0IxMDEwMEI4OTQyMDQxRTVCMTAxMDBCQTk0MjA0MTM4Cis6MTA0Q0YwMDBFNUIxMDEwMDk4OTQwMDQwNDU5OTAxMDAwMjAwMDA0MDkwCis6MTA0RDAwMDA5Nzk4MDEwMDAwMDAwMDQwRjFCMTAxMDA5RTk5QTI0MTc2Cis6MTA0RDEwMDA5NzUwMDAwMDAwMDAwMDQwOTdCMDAxMDAwMDAwMDA0MEU0Cis6MTA0RDIwMDA2RkIxMDEwMDAwMDAwMDRCNjhCMTAxMDBBMjk5ODU0MUZDCis6MTA0RDMwMDA5NzQwMDAwMERCOTkwMDQwODEzMjAxMDAwMDAwMDA0MEY0Cis6MTA0RDQwMDAzOUIzMDEwMDAwMDAwMDQwMzdCMzAxMDAwMDAwMDA0MDBCCis6MTA0RDUwMDAzNUIzMDEwMDAwMDAwMDQwMzNCMzAxMDAwMDAwMDA0MDAzCis6MTA0RDYwMDA0MUIzMDEwMDAwMDAwMDQwM0ZCMzAxMDAzQzAwMDA0MDlGCis6MTA0RDcwMDAyOTlCMDEwMEVFMDUwMDQwMjU5QjAxMDA0MjAwMDA0MEY4Cis6MTA0RDgwMDA0QjlCMDEwMDAwMDAwMDQwMkZCMzAxMDAwMDAwMDA0MEQ5Cis6MTA0RDkwMDAyREIzMDEwMDAwMDAwMDQwNDdCMzAxMDAwMDAwMDA0MEI3Cis6MTA0REEwMDA0M0IzMDEwMDYwMDAwMDQwMkI5QjAxMDAwMDAwMDA1NDUxCis6MTA0REIwMDBFRjkzMDEwMDAwMDAwMDU1RjE5MzAxMDBGRkZGMDBBNUYzCis6MTA0REMwMDAzQzhCMDEwMDAwMDAwMDJDNUJCMzAxMDAwMDAwMDAyQ0I0Cis6MTA0REQwMDA0NUIzMDEwMDAwMDAwMDQwNTlCMzAxMDAwMDAwMDA0MDRECis6MTA0REUwMDA1N0IzMDEwMDAwMDAwMDQwMjdCMzAxMDAwMDAwMDA0MDVECis6MTA0REYwMDA1M0IzMDEwMEJGOTlBMjUwRkQ3RjAwMDBCRjk5QTI1MTlCCis6MTA0RTAwMDBGRDdGMDAwMEMwOTkwMDQwMURCMzAwMDA1MDQ2MDA0MEU3Cis6MTA0RTEwMDAxRDlCMDEwMDAwQzAwMEE2ODhCMzAxMDBGRjNGMDBBNjUzCis6MTA0RTIwMDAzQUIzMDEwMDAwQzAwMDlEM0I5QjAxMDBCNDA1MDA0MDY3Cis6MTA0RTMwMDAyMzlCMDEwMDAwMDAwMDQwNERCMzAxMDAwODBBMDBBNkJBCis6MTA0RTQwMDAxNEIzMDEwMDAxMDEwMDhBMTU5QjAxMDAwMDgwMDBBNjM3Cis6MTA0RTUwMDA1NkIxMDEwMDAwMDA4MDVFNTdCNTAxMDAxODAwMDA0QkZDCis6MTA0RTYwMDAyMEU0MDEwMDA2MDAwMDRCOTZFNDAxMDAwMDQzMDA0QkUzCis6MTA0RTcwMDA5NkM4MDEwMDE4MDAwMDEwMjBEQzAxMDAwMDAwODA0QkUzCis6MTA0RTgwMDAyMDk0MDEwMDAwOTkyRTBBOTdCMDAxMDAwMDAwMDA0MDE0Cis6MTA0RTkwMDBGMUIxMDEwMENGOTlBMjQxOTc1MDAwMDAwMDAzMDA0MEZBCis6MTA0RUEwMDA5Nzk4MDEwMDAwQTkwMDQwNDU5OTAxMDAwMDAwMDA0MENBCis6MTA0RUIwMDBGMUIxMDEwMEQzOTlBMjQxOTc1MDAwMDAzMDAwMDA0MEE5Cis6MTA0RUMwMDA5Nzk4MDEwMDAwMDAwMDU1NjFCMTAxMDAwMDAwMDA0QkZGCis6MTA0RUQwMDA2MkIxMDEwMEQ3OTlBODQwODEzMjAwMDBENzk5QTI0MTYwCis6MTA0RUUwMDA5NzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwMDAwMDA0MEE3Cis6MTA0RUYwMDA4N0IxMDEwMDAwMDAwMDQwOTdCMDAxMDAwMDAwMDA0QkE2Cis6MTA0RjAwMDA4MEIxMDEwMDAxMDAwMEE2ODJCMTAxMDBERDk5ODU0MTU4Cis6MTA0RjEwMDA5NzQwMDAwMDAwMDAwMDQwOTdCMTAxMDAwMDAwMDA0MEYxCis6MTA0RjIwMDA5N0IwMDEwMDAwMDAwMDRCOTBCMTAxMDAwMTAwMDBBNjA1Cis6MTA0RjMwMDA5MkIxMDEwMEUyOTk4NTQxOTc0MDAwMDAwMDAwODA0MDU1Cis6MTA0RjQwMDA4MUIyMDEwMEU2OTk0NDQwODEzMjAwMDAwMDAwMDAxMjY1Cis6MTA0RjUwMDA4MEIxMDEwMEZGRkY5QzRCODI4OTAxMDBFOTk5NDQ0MDI4Cis6MTA0RjYwMDA4MTMyMDAwMDAwMDAwMDRBODBCMTAxMDAwMTAwOUNBNkNGCis6MTA0RjcwMDA4MkIxMDEwMEVDOTk0NDQwODEzMjAwMDBGRkZGMDA0QkY4Cis6MTA0RjgwMDA4NDg5MDEwMDAwMDA5Q0MyMjRCMDAxMDAwMDAwMDA0QTk2Cis6MTA0RjkwMDA5MEIxMDEwMEZGRkY4MDRCOTI4OTAxMDAwMDAwMDA0QUEwCis6MTA0RkEwMDA5MEIxMDEwMDAxMDA4MEE2OTJCMTAxMDBGRkZGMDA0QjBCCis6MTA0RkIwMDA5NDg5MDEwMDAwMDA4MENBOTRCMDAxMDAwMDAwODA0MDg0Cis6MTA0RkMwMDA4MUIyMDEwMDAwMDAwMDQwODFCMDAxMDBGNzk5ODBBNTg2Cis6MTA0RkQwMDA4MDMyMDAwMEY4OTkwMEE1ODAzMjAwMDAwMDAwMDA0MUY2Cis6MTA0RkUwMDA4MUMwMDEwMEY5OTk4MEE1ODAzMjAwMDA4MDAxMDA0MDU1Cis6MTA0RkYwMDA4Mzk4MDEwMDAyOUEyMDRGODE2QzAwMDAwMDAxMDA0MDVDCis6MTA1MDAwMDA4Mzk4MDEwMDAyOUEyMDRCODE2QzAwMDA4MDAwMDA0MEQwCis6MTA1MDEwMDA4Mzk4MDEwMDAyOUEyMDQ3ODE2QzAwMDAwMDAwMDA0MDQ0Cis6MTA1MDIwMDA4Mzk4MDEwMDAwMDAwMDQxODJEQzAxMDAwMzkwMDA0MUYwCis6MTA1MDMwMDAyMDk5MDEwMDAwMDAwMDQwNDlCMTAxMDAwMDE0MkY0Q0VDCis6MTA1MDQwMDA4M0IwMDEwMDAwMDAwMDQwRjFCMTAxMDAwNjlBQTI0MUM2Cis6MTA1MDUwMDA4MzUwMDAwMDY0MDAwMEE1ODBDODAxMDAwOTlBQTJBNTQxCis6MTA1MDYwMDA4MDZDMDAwMDIwMDAwMDkwMjA5OTAxMDAwMDAwMDA1RjhCCis6MTA1MDcwMDAyMzkxMDEwMDBDOUExRjkxODAzMjAwMDAzMDAwMDA5MEIzCis6MTA1MDgwMDAyMDk5MDEwMDAwMDAwMDVGMjM5MTAxMDAwRjlBMUY5MUY5Cis6MTA1MDkwMDA4MDMyMDAwMDcwMDAwMDkwMjBBOTAxMDAwMDAwMDA1RjM1Cis6MTA1MEEwMDAyMzkxMDEwMDEyOUExRjkxODAzMjAwMDAwMDAwMDA1RkRFCis6MTA1MEIwMDAyMzkxMDEwMDE0OUExRjkxODAzMjAwMDA0MDY4MDA5MEYzCis6MTA1MEMwMDAyMEE5MDEwMEUwMDAwMDQwNjE5OTAxMDAyMTAwMDA0MDlBCis6MTA1MEQwMDA2MTk5MDEwMDIyMDAwMDQwNjE5OTAxMDAyMzAwMDA0MDE1Cis6MTA1MEUwMDA2MTk5MDEwMDI0MDAwMDQwNjE5OTAxMDAyNTAwMDA0MDAxCis6MTA1MEYwMDA2MTk5MDEwMDI2MDAwMDQwNjE5OTAxMDAyNzAwMDA0MEVECis6MTA1MTAwMDA2MTk5MDEwMEMwMDAwMDQwNjE5OTAxMDBEMDE0MDA0MDg1Cis6MTA1MTEwMDA0NTk5MDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0MDhECis6MTA1MTIwMDBFMUIxMDEwMDMwMDMwMDQwODUzMDAxMDBEMDE0MDA0MDlGCis6MTA1MTMwMDA0NTk5MDEwMDAyMDEwMEE2ODBCMDAxMDAwNDAzMDA0MDZGCis6MTA1MTQwMDA4MDk4MDEwMDA2MDUwMEE2ODJCMDAxMDAwODA3MDA0MTEyCis6MTA1MTUwMDA4Mjk4MDEwMDAwMDAwMDQwRjBCMTAxMDAwMDAwMDA0MTExCis6MTA1MTYwMDBFMEIxMDEwMDA4MDAwMDQwODU5ODAxMDAzMDAzMDA0MEQ0Cis6MTA1MTcwMDA4MTMyMDEwMDM5MDMwMDQwODEzMjAxMDBEODE0MDA0MDFGCis6MTA1MTgwMDA0Mzk5MDEwMEZGMDJBMkY4ODA2QzAwMDAwMDAzMjJGMEE2Cis6MTA1MTkwMDA4MjZDMDAwMEZGMDIwMDQwODFCMjAwMDBEMDE0MkU0MDVCCis6MTA1MUEwMDA0OUIxMDEwMDA1MDAwMDQwQTM5QjAxMDAwMDAwMDA0MDQwCis6MTA1MUIwMDBDMUIzMDEwMDA4MDAwMEREODFGNDAxMDAzNjlBMDA0MDBGCis6MTA1MUMwMDAxMEM5MDAwMDNDOUEwMDA1ODFCMDAwMDA1NTAxMDA0MDY0Cis6MTA1MUQwMDA4MUIyMDAwMDQ0OUEwMDA1ODFCMDAwMDA1NTAxMDA0MEYyCis6MTA1MUUwMDA4MUIyMDAwMDQ5OUEwMDQ0QTVCMzAwMDA0QjlBMDA0NEU0Cis6MTA1MUYwMDBBNUIzMDAwMDAyMDAwMDQwQTRFNzAxMDAwMDAwMDBFMEE5Cis6MTA1MjAwMDA4MUIxMDEwMEZGRkYwMEMxRjA4OTAxMDA0MTlBMjI0MUY0Cis6MTA1MjEwMDA4MTUwMDAwMDNEOUEwMDQxQzFDMzAwMDBCMTAyMDA0MDJFCis6MTA1MjIwMDA4MTMyMDEwMEM1MDIwMDQwODEzMjAxMDA1QTAxMDA0MDc0Cis6MTA1MjMwMDA4MUIyMDAwMDAyMDAwMDQwQTRFNzAxMDAwMDAwMDBFMDhECis6MTA1MjQwMDA5MUIxMDEwMEZGRkYwMEM5RjA4OTAxMDA0MTlBMjI0MTlDCis6MTA1MjUwMDA4MTUwMDAwMDQ1OUEwMDQxQzFDMzAwMDBGRkZGMDBERUZECis6MTA1MjYwMDA4NTg5MDEwMDQxOUEwMEMyRTBCMTAwMDBGRkZGMDBERTI1Cis6MTA1MjcwMDA5NTg5MDEwMDQxOUEwMENBRTBCMTAwMDAwNDAwMDBDQjBBCis6MTA1MjgwMDA4MUM4MDEwMDZBODQwMDQwRjI5MzAwMDAwNDAwMDA0MERECis6MTA1MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA1MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA1MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA1MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA1MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA1MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA1MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA1MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA1MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA1MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA1MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA1MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA1MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA1MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA1MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA1MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA1MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA1M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA1M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA1M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA1M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA1M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA1M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA1NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA1NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA1NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA1NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA1NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA1NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA1NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA1NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA1NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA1NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA1NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA1NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA1NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA1NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA1NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA1NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA1NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA1NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA1NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA1NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA1NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA1NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA1NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA1NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA1NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA1NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA1NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA1NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA1NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA1NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA1NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA1NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA1NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA1NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA1NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA1NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA1NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA1NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA1NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA1NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA1NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA1NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA1NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA1NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA1NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA1NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA1NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA1NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA1NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA1NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA1NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA1NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA1NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA1NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA1NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA1NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA1NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA1NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA1N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA1N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA1N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA1N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA1N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA1N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA1ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA1ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA1ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA1ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA1ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA1ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA1ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA1ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA1ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA1ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA1OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA1OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA1OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA1OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA1OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA1OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA1OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA1OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA1OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA1OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA1OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA1OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA1OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA1OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA1OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA1OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA1OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA1OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA1OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA1OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA1OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA1OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA1QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA1QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA1QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA1QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA1QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA1QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA1QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA1QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA1QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA1QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA1QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA1QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA1QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA1QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA1QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA1QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA1QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA1QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA1QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA1QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA1QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA1QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA1QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA1QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA1QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA1QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA1QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA1QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA1QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA1QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA1QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA1QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA1QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA1QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA1QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA1QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA1QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA1QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA1QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA1QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA1QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA1QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA1Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA1Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA1Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA1Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA1Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA1Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA1RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTA1RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTA1RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA1RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA1RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA1RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA1RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA1RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA1RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA1RDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA1REEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA1REIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTA1REMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTA1REQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTA1REUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTA1REYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA1RTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA1RTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA1RTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTA1RTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTA1RTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTA1RTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTA1RTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTA1RTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTA1RTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTA1RTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTA1RUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTA1RUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTA1RUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTA1RUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTA1RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTA1RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTA1RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA1RjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA1RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA1RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTA1RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA1RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA1RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA1RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA1RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA1RjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA1RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA1RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTA1RkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTA1RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA1RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTA1RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA2MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTA2MDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTA2MDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTA2MDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTA2MDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTA2MDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTA2MDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTA2MDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTA2MDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTA2MDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTA2MEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTA2MEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTA2MEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTA2MEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA2MEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTA2MEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTA2MTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTA2MTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTA2MTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTA2MTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTA2MTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTA2MTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTA2MTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTA2MTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTA2MTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTA2MTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTA2MUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTA2MUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA2MUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTA2MUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTA2MUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTA2MUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA2MjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA2MjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTA2MjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTA2MjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTA2MjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTA2MjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTA2MjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTA2MjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTA2MjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA2MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA2MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA2MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA2MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA2MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA2MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA2MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTA2MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA2MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA2MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA2MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA2MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA2MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA2MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA2MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA2MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA2MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA2M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA2M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA2M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA2M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA2M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA2M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA2NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA2NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA2NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA2NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA2NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA2NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA2NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA2NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA2NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA2NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA2NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA2NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA2NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA2NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA2NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA2NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA2NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA2NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA2NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA2NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA2NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA2NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA2NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA2NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA2NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA2NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA2NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA2NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA2NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA2NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA2NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA2NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA2NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA2NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA2NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA2NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA2NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA2NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA2NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA2NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA2NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA2NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA2NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA2NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA2NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA2NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA2NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA2NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA2NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA2NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA2NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA2NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA2NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA2NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA2NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA2NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA2NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA2NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA2N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA2N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA2N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA2N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA2N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA2N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA2ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA2ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA2ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA2ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA2ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA2ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA2ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA2ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA2ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA2ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA2OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA2OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA2OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA2OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA2OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA2OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA2OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA2OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA2OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA2OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA2OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA2OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA2OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA2OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA2OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA2OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA2OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA2OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA2OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA2OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA2OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA2OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA2QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA2QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA2QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA2QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA2QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA2QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA2QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA2QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA2QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA2QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA2QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA2QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA2QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA2QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA2QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA2QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA2QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA2QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA2QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA2QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA2QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA2QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA2QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA2QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA2QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA2QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA2QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA2QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA2QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA2QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA2QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA2QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA2QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA2QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA2QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA2QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA2QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA2QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA2QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA2QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA2QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA2QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA2Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA2Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA2Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA2Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA2Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA2Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA2RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTA2RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA2RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA2RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA2RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA2RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA2RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA2RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA2RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA2RDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA2REEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTA2REIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTA2REMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTA2REQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTA2REUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA2REYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTA2RTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA2RTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTA2RTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTA2RTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTA2RTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTA2RTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTA2RTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTA2RTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTA2RTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTA2RTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTA2RUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTA2RUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTA2RUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTA2RUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTA2RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTA2RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA2RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA2RjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA2RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTA2RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA2RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA2RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA2RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA2RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA2RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA2RjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA2RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTA2RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTA2RkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA2RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTA2RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA2RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA3MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTA3MDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTA3MDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTA3MDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTA3MDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTA3MDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTA3MDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTA3MDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTA3MDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTA3MDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTA3MEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTA3MEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTA3MEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA3MEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTA3MEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTA3MEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTA3MTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTA3MTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTA3MTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTA3MTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTA3MTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTA3MTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTA3MTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTA3MTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTA3MTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTA3MTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTA3MUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA3MUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTA3MUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTA3MUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTA3MUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA3MUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTA3MjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTA3MjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTA3MjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTA3MjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTA3MjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTA3MjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTA3MjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTA3MjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA3MjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA3MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA3MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA3MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA3MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA3MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA3MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTA3MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA3MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA3MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA3MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA3MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA3MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA3MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA3MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA3MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA3MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA3MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA3M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA3M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA3M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA3M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA3M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA3M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA3NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA3NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA3NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA3NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA3NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA3NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA3NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA3NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA3NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA3NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA3NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA3NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA3NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA3NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA3NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA3NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA3NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA3NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA3NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA3NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA3NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA3NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA3NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA3NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA3NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA3NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA3NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA3NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA3NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA3NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA3NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA3NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA3NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA3NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA3NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA3NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA3NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA3NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA3NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA3NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA3NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA3NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA3NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA3NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA3NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA3NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA3NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA3NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA3NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA3NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA3NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA3NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA3NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA3NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA3NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA3NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA3NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA3NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA3N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA3N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA3N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA3N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA3N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA3N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA3ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA3ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA3ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA3ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA3ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA3ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA3ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA3ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA3ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA3ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA3OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA3OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA3OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA3OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA3OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA3OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA3OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA3OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA3OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA3OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA3OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA3OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA3OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA3OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA3OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA3OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA3OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA3OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA3OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA3OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA3OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA3OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA3QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA3QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA3QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA3QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA3QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA3QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA3QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA3QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA3QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA3QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA3QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA3QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA3QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA3QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA3QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA3QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA3QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA3QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA3QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA3QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA3QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA3QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA3QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA3QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA3QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA3QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA3QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA3QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA3QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA3QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA3QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA3QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA3QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA3QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA3QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA3QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA3QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA3QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA3QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA3QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA3QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA3QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA3Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA3Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA3Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA3Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA3Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA3Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA3RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA3RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA3RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA3RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA3RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA3RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA3RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA3RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA3RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA3RDkwMDA4MUIyMDAwMEI2OUYwMDg4OUFCMDAwMDBCNjlGMDA4OEFDCis6MTA3REEwMDA5QUIwMDAwMEI2OUYwMDg4OUFCMDAwMDBCNjlGMDA4ODg1Cis6MTA3REIwMDA5QUIwMDAwMEI2OUYwMDg4OUFCMDAwMDAwMDAwMDA4OENBCis6MTA3REMwMDA5QUIwMDEwMEI2OUY0MTQwODEzMjAwMDBCOTlGMjI0MDI1Cis6MTA3REQwMDA3QjZGMDAwMEI2OUYxOTQwODFCMjAwMDAwMDAwMTk0MTdFCis6MTA3REUwMDA3QkIzMDEwMDAwMDAwMEE0QzRCMzAxMDAwMDAwMDBBMUE3Cis6MTA3REYwMDBDNkIzMDEwMDAwMDAyRkEyQzhCMzAxMDAwODE0MDA0MDYwCis6MTA3RTAwMDA0OTk5MDEwMEIwOUYwMDREOUFDQzAxMDBDMjlGMjY0MEM1Cis6MTA3RTEwMDA4MTMyMDAwMDAwMDAwMDRDNDlDMTAxMDBDMDlGQTI0MTE2Cis6MTA3RTIwMDA5QjUwMDAwMEM2OUY4MDgwODAzMjAwMDAwMDAwNTI0OUI1Cis6MTA3RTMwMDBGRDkzMDEwMDAwMDAwMDRBRkQ5MzAxMDBDOTlGMDA0MjJDCis6MTA3RTQwMDBDRDkzMDAwMDAwMDA1MTRBRkQ5MzAxMDAwMDAwMDA0OTVECis6MTA3RTUwMDBGRDkzMDEwMEM5OUYwMDQzQ0I5MzAwMDAwMDAwNTA0MEY4Cis6MTA3RTYwMDA4MUIyMDEwMEQ5OUYwMDQwMTk5OTAxMDAwMDAwMDBGMDgzCis6MTA3RTcwMDA5QUIwMDEwMDAwMDAwMDQ0NDlEMTAxMDAwMDAwNDBGMDI4Cis6MTA3RTgwMDA4MEIyMDEwMDAwMDA0MTREODBCMjAxMDBEMTlGMDA0MDRFCis6MTA3RTkwMDAxOTk5MDEwMDAwMDA0QzQwODFCMjAxMDAwMDAwMDA0NDJCCis6MTA3RUEwMDA0OUQxMDEwMDAwMDAwMEYwOUFCMDAxMDAwMDAwMDA0RDJGCis6MTA3RUIwMDAxMEIxMDAwMDAwMDAwMEUyNDlCMTAxMDAwMDAwMDBFMzQxCis6MTA3RUMwMDA0M0IxMDEwMDAwMDAwMEU0NDVCMTAxMDAwMDAwMDA0MEEyCis6MTA3RUQwMDA3QkIzMDEwMDAwMDA0ODRGNDBCMTAxMDBEOTlGMDA0MDMyCis6MTA3RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA3RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA3RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA3RjEwMDA4MUIyMDAwMDAwMDA4MDQwODFCMDAxMDAwNDAwMDA0MEY4Cis6MTA3RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA3RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA3RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA3RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA3RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA3RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA3RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA3RjkwMDA4MUIyMDAwMDZBODQwMDQwODFCMjAwMDAzMTlBMDA0MDQyCis6MTA3RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDA0RDlBMDA0MDAwCis6MTA3RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwMDAwODA0MDU3Cis6MTA3RkMwMDA4MUIyMDEwMDAwMDAwMEE4MTBCMTAwMDAwNDAwMDA0MEQwCis6MTA3RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA3RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA3RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA4MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MDQ4MDEwMDA4MUIyMDAwMDM5Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvc2xpY29zcy9nYnJjdnVjb2RlLnN5cy5paGV4IGIvZmlybXdhcmUvc2xpY29zcy9nYnJjdnVjb2RlLnN5cy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjN2E4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9zbGljb3NzL2dicmN2dWNvZGUuc3lzLmloZXgKQEAgLTAsMCArMSwxNjIgQEAKKzoxMDAwMDAwMDAwMDIwMDAwNDc3NTAxMDAwNEEwMTMwMTAwMUNCNzVCNEIKKzoxMDAwMTAwMDA5MzAwMEI2NUYwMTAwMUMwMDAwMDAyMDE4M0I3ODNBNTAKKzoxMDAwMjAwMDAwMUNBMjc3MDEwMDFDMDcxRDAxNzAxOEFEN0JGMUZGQjkKKzoxMDAwMzAwMDFDQjM3QkE5QUExRUI0N0IwMTBDMUNCNTdCMjkwNjFDMzIKKzoxMDAwNDAwMDAwMDA1MDY0MDgwQzMxNUE3MDA0MEMzMTVBODAwNDBDQzIKKzoxMDAwNTAwMDMxNEU5MDA0MEMzMTRBQTAwMDA5MjU1NUMwMDQwQzMxRTIKKzoxMDAwNjAwMDUyQjAwMEU5MjQ1NUMwMDRDQ0IzMDAxQzFDRUIyRDAxOTgKKzoxMDAwNzAwMDAwMUMwNjU2NTJENDA4MDc5RDAwMDAxQzdCQjcwMjAwRTYKKzoxMDAwODAwMDEwQTAwRjUxNTQwOTA2NTY1RUMwMDRBMDMwNzQwMzAwM0UKKzoxMDAwOTAwMEFDMzA3NTAzMDBDRDAzM0EwMDFDN0JCNzAyMDAxQzYwMzYKKzoxMDAwQTAwMDhFNTE1NDA5MjkyNTc1MDMwMDgwOEU1MTU0MDk4QzMwRDYKKzoxMDAwQjAwMDkxMDAwNDQ3MUMwMTAwMUNBMDBGNTE1NDA5MDAwMDY0NkEKKzoxMDAwQzAwMDAwMDQ0NzFDNjVDMDA0NDcxQzc1MDMwMDZDMzAwMTAwMjgKKzoxMDAwRDAwMDFDNEQzNDAyMDAxQzdCQjcwMjAwMUNBMDBGNTE1NDA5QjgKKzoxMDAwRTAwMEM4ODMzNzAwMUM4MDAxMDAwMDFDMDAwMDY0MDAwNEEwQ0QKKzoxMDAwRjAwMDBGNTA1NDA5MDAwMDc0QzMwNDdCRkJGMjAwMUNDQzMzODYKKzoxMDAxMDAwMDBEMDAxQ0I0N0JGRDAzMUM4MDBFNTA1NDA5RTBGQjA1NjAKKzoxMDAxMTAwMDAwMUMwMDAwQUMwMzAwQjMwRjUxNTQwOTAwMDBFQzcwNDgKKzoxMDAxMjAwMDA0MDAwMEVDODAwNDAwMDBBQzkzMDA2MTc2QURDMzA0RDEKKzoxMDAxMzAwMEMwOEQ1MTU0MDlFMDdCMDBDMDFGQTBGREM1MDEwMENDNUIKKzoxMDAxNDAwMDMzMDUwMDFDRDQwMzAwM0MxQ0Q0RDMxQjAwMUNDMEQzQkIKKzoxMDAxNTAwMDUyMDAxQzAwMDA3QzEzMDQ4RThFNTI1NDA5NUI4MDdFN0EKKzoxMDAxNjAwMDEzMDQwMDAwMDAwMDFDMDAwMDk0MDEwMEEwMEY1MTU0NzMKKzoxMDAxNzAwMDA5QTAwRjUxNTQwOUMwMDNGQzdGMUNBMDAxQTAwMTAwN0QKKzoxMDAxODAwMDAwMDBBNDAxMDBBMDBGNTE1NDA5QzAwM0ZDMDMxQ0Y1OUEKKzoxMDAxOTAwMDc3MDEwMDFDMjY3QTAyMDYxQ0EwMEY1MTU0MDlCMzBGRTgKKzoxMDAxQTAwMDUxNTQwOUI1MDIwMjAwMUNBMDBGNTE1NDA5N0E3RTAyNzUKKzoxMDAxQjAwMDAwMUNCNTAyMDIwMDFDNTMwRjUyNTQwOUFGMDMwMTAwOEEKKzoxMDAxQzAwMDFDN0EwRTUyNTQwOUI1MDIwMjAwMUMwMDAwMDIwMDFDRTkKKzoxMDAxRDAwMEEwM0RBQTExMDQwMDAwQUMxMTA0RDREMzUyMDAxQ0I1RjgKKzoxMDAxRTAwMDNFQjIwMTAwMjBGQkZERkYxRjgwMkM4QzAzMDBCOTNBQkEKKzoxMDAxRjAwMDlFMDEwMDc1M0IwMjAwMUNBNzFDMDEwMDEwREI4MzE2NEEKKzoxMDAyMDAwMDAwMUNDNzFEMjFDMTA0QjkzQjhEQzEwNDhCMkMwMTAwMEEKKzoxMDAyMTAwMDFDNkIyQzM1QzEwNDAwMDA3ODExMDBDQjJDNzlDMTA0NzMKKzoxMDAyMjAwMEEwMEY1MTU0MDlBMDBGNTE1NDA5NTREMDAyMDAxQzQ5ODkKKzoxMDAyMzAwMDI1QjEwMTAwQUIyQzgxQzEwNEE3MUQ3NTAzMDBDQzMzOEYKKzoxMDAyNDAwMDA5MDAxQ0VCMkQwMTAwMUNFQTI5MDEwMDFDQTAwRjUxMjQKKzoxMDAyNTAwMDU0MDlBRTBGNTE1NDA5QTAwRjUxNTQwOUQ0MDdGQzAzOUYKKzoxMDAyNjAwMDFDOTkzQTAyMDAxQ0JCMzgwMjAwMUMwMDM4MDAwMDFDMUMKKzoxMDAyNzAwMDAwMDBGQzAxMDREQjNCN0UwMDFDQzcxRDAxMDAxQzI2QTYKKzoxMDAyODAwMDdBMTYwNjFDMjcxRDAxMDAxQ0IzMEY1MTU0MDk3QTBFNjMKKzoxMDAyOTAwMDUyNTQwOTUzMEY1MjU0MDk3QTBFNTI1NDA5NTMwRjUyQjMKKzoxMDAyQTAwMDU0MDk3QTBFNTI1NDA5NTMwRjUyNTQwOUEwMEY1MTU0NTUKKzoxMDAyQjAwMDA5N0EwNjAyMDAxQzUzMEY1MjU0MDlBRjAzMDEwMDFDQjcKKzoxMDAyQzAwMDdBMEU1MjU0MDk1MzBGNTI1NDA5N0EwRTUyNTQwOTUzNUMKKzoxMDAyRDAwMDBGNTI1NDA5N0EwRTUyNTQwOTUzMEY1MjU0MDk3QTBFOTAKKzoxMDAyRTAwMDUyNTQwOTAwM0QwMjAwMUMwMDAwNTgxMjAwQ0IyQzAxQTIKKzoxMDAyRjAwMDAwMUM3NTNCMDIwMDFDQTcxQzAxMDAxMEE2N0JGRDA1MUQKKzoxMDAzMDAwMDFDMDAwMDkwQzIwNEE2N0JGRDA1MUMwMDAwQThDMjA0Q0UKKzoxMDAzMTAwMENCMkYwNTAwMUM2MDJDMDAwMDFDQzcxQ0U5MDIwMEEwQUMKKzoxMDAzMjAwMDBGNTE1NDA5NTMwNzAyMDAxQ0MwODNGMTMyMUMwMDAwMTYKKzoxMDAzMzAwMDYwMDIwNDQ2N0FFNjA1MUM3QTBFNTI1NDA5QzA4M0YxMjUKKzoxMDAzNDAwMDMyMUMwMDAwNjgwMjA0NDBGQTE1MDAxQzAwMDBBODAyREMKKzoxMDAzNTAwMDA0NDY3QUU2MDUxQ0EwMEY1MTU0MDlBMDBGNTE1NDA5MTgKKzoxMDAzNjAwMEEwMEY1MTU0MDlBMDBGNTE1NDA5QjM3QjAxQzAxRjc0NTEKKzoxMDAzNzAwMDBFNTA1NDA5QzAwMzlDMDAxQzgwMDBGODAyMDAwMDAwQ0QKKzoxMDAzODAwMEY4MDIwNDAwMDBDQzEyMDUwNzFEMDEwMDFDRDREMzJCNzkKKzoxMDAzOTAwMDAwMUNENEQzNTIwMDFDODA3NjlEMTMwNDAwMDAwMDAzN0YKKzoxMDAzQTAwMDAwQTY3QkI1MDMxMEM3OUMwMDAwMUM4MDJDMDAwMDFDMUQKKzoxMDAzQjAwMDAwMDA3QzAyMDQwMDAwNzRDMzA0QUIyREY5MTIwNTA3OTEKKzoxMDAzQzAwMDFERDVDMjA0OEIyRDAxMDAxQzY5MjUwMTAwMUNBNjdCRDQKKzoxMDAzRDAwMEI1MDMxMENCMkYwOTAwMUM2MDJDMDAwMDFDMDAwMDY4MjYKKzoxMDAzRTAwMDAzMDA1MzBGNTI1NDA5NDY3QUU2MDUxQzdBMEU1MjU0MDQKKzoxMDAzRjAwMDA5NDBGQTE1MDAxQzAwMDAzMDAzMDQ0NjdBRTYwNTFDOEIKKzoxMDA0MDAwMEI1MEY1MTU0MDlBMDBGNTE1NDA5NzNFQzRBMDMwNDYwMEQKKzoxMDA0MTAwMDJDMDAwMDFDMDAwMDQ4MDMwMEM3MUMwMTAwMUMwMDAwNDkKKzoxMDA0MjAwMDQ4MTMwNTA3MUQwMTAwMUNDMEQ3MjIwMDFDNzU1NjlFRUQKKzoxMDA0MzAwMDEzMDQ2MDJDMDAwMDFDRTcxQzY1MDMwNEU3OUMwMDAwMEIKKzoxMDA0NDAwMDFDQTY3QkI1MDMxMDgwMkMwMDAwMUMwMDAwMTgwMzA0QzAKKzoxMDA0NTAwMDAwMDA3NEMzMDRCOTdCMDEwMDFDMDAwMEFDQzMwNENCRDIKKzoxMDA0NjAwMEFGRkMwNzFDQ0IyRjAxMDQxQ0M3OUY4MDAzMUMwMDAwOUUKKzoxMDA0NzAwMEFDQzMwNENCQUZGQzA3MUNDQjJGMEQwNDFDQzc5RjgwNjMKKzoxMDA0ODAwMDAzMUMwMDAwQUNDMzA0Q0JBRjAwRjgxRENCMkYwMTAwNTAKKzoxMDA0OTAwMDFEQTY3QkI1MDMxQ0M3OUNBQ0MzMDQwMDAwQUMxMzA1QjAKKzoxMDA0QTAwMDA3MUQwMTAwMUNDMDFERkNEMzA4Mjc5RDA0MDQwMEEwRUIKKzoxMDA0QjAwMEVFNjZENDAwRkI3NTI5MTQwNDIwN0IwNjAwMUNDMDFDQ0EKKzoxMDA0QzAwMDNDMDQwMDAwMDBEMEQzMDgwMDAwMjBGNDAwQzBFRkYyOEMKKzoxMDA0RDAwMDAwMUMyMDI1N0MxNDA0NjBCN0YyMDMwMDAwMDAyQzE1REEKKzoxMDA0RTAwMDAwQ0NCM0ZDMDMxQ0NDMzMwNTAyMUMwMDAwMkNDNTA0NUIKKzoxMDA0RjAwMDYwQjcyRTA1MDQwMDAwMkMxNTA0MDAwMDdDQzQwNEMwNjUKKzoxMDA1MDAwMDFEQjhGMzA0MDAwMDg4QzQwNDA3OUQwMDAwMUMxQjc0ODAKKzoxMDA1MTAwMDFERjQwNEE2N0IxMTA0MUNBMDBGODk1NDA5RTA3QjAwODQKKzoxMDA1MjAwMEZDMUYzOTdGMDIwMDFDMDcxREJEQzMwNEE2N0JDRDAzNDEKKzoxMDA1MzAwMDFDMDAwMDg4QzQwNEUwMUMwMDAwMUMwMDAwQzQwMzA0NkMKKzoxMDA1NDAwMENCQUYwMEY4MURDQjJGMDExMDFEMDAwMENDQzMwNDAwNjEKKzoxMDA1NTAwMDAwQ0MwMzA0Q0JBRjAwRjgxRENCMkYwMTE4MURDNzlGQTMKKzoxMDA1NjAwMDAwMEIxQzAwMDBDQ0MzMDRGQjc1MDEwMDFDMDcxRDAxMUYKKzoxMDA1NzAwMDAwMUNDQ0IzRkMwMzFDQ0MzMzAxMDIxQzAwMDBDQ0MzMTgKKzoxMDA1ODAwMDA0QTAxQzAwMDAxQ0EwRUVDMjAzMDRDQkFGRkMwNzFDOUYKKzoxMDA1OTAwMENCMkYwOTA0MUNGQjc1MDEwMDFDMDAwMENDQzMwNENDNEMKKzoxMDA1QTAwMEIzRkMwMzFDQ0MzMzAxMDIxQzAwMDAyQ0M1MDQwMDAwNkEKKzoxMDA1QjAwMDk4MzQwNUNDQjNGQzAzMUNDQzMzMTUwMjFDNDc5RDc0NDYKKzoxMDA1QzAwMEM0MDQwMDAwOTg0NDAwODAxRDlDNTQwNDg3MURBRDA0QTEKKzoxMDA1RDAwMDAwQ0U3NjAxMDAxQ0VGNzZCREM0MDRBNDc3QUQyNDA5REIKKzoxMDA1RTAwMEU0NzYwMTAwMUNDNDc2MDEwMDFDMDAwMEI4NTQwNEQ3NTYKKzoxMDA1RjAwMDc2MDE1MDE4RjY3NjAxMDAxQzAwMDAwMDMwMTgwMDAwNEIKKzoxMDA2MDAwMDAwMDAxMENDMzA2MUM1MDRFQjJEMDEwMDFDRUEyOTAxNkIKKzoxMDA2MTAwMDAwMUNDMDU5MDEwMDFDRjU3NzQ5QzUwNEUwMzBGQzA0RkEKKzoxMDA2MjAwMDAwMDA0Q0QwMDQwMDIwNEMxNDA1MDAwMDAwMDgwNTAwMTgKKzoxMDA2MzAwMENDQjNGQzAzMUNDQzMzMDkwMjFDRUIyREQ1QzQwNENDNzkKKzoxMDA2NDAwMEIzRkMwMzFDQ0MzMzE5MDIxQ0VCMkRENUM0MDRDQ0IzNzIKKzoxMDA2NTAwMEZDMDMxQ0NDMzMwRDAyMUNFQjJERDVDNDA0Q0NCM0ZDMjUKKzoxMDA2NjAwMDAzMUNDQzMzMTEwMjFDRUIyREQ1QzQwNDAwN0IwMDgwOEQKKzoxMDA2NzAwMDFDQUU3NzYxMDUwMDAwMDAwNEMwMDREMzhCMDBGQzFGOTIKKzoxMDA2ODAwMDYwN0EzQzAwMUM2MDRDRTAwNDAwQzAyRjIwMDUxRkUwOTUKKzoxMDA2OTAwMDMwRDAwNDAwODAyNUQwMDQwMEI1NUJEMTA0MDQ2OTI2NjUKKzoxMDA2QTAwMDAxMDAxQzZBMkIwMTAwMUM4MDFEMDAwMDFDQTkyNTYxOTMKKzoxMDA2QjAwMDA1MDBFRTMwMDAwMDFDQUY3NzIxMDUwMEI0NUYwMTQwNUIKKzoxMDA2QzAwMDE4MDc5RDY0NTUwNEI3NzYwMTAwMUM5Njc2MDEwMDFDM0UKKzoxMDA2RDAwMDQ3MUQwMTAwMUNBNDMzMDE2MDE4QTQyRjAxNjAxODY0OTkKKzoxMDA2RTAwMDc3MDE2MDE4MjQ3NzAxNjAxODQ0NzcwMTAwMUM2NDg4NDIKKzoxMDA2RjAwMDAzMDAxQ0E0M0YwMTAwMUNBNDNCMDEwMDFDNTM3QjAwMTEKKzoxMDA3MDAwMEMwMUNEM0NGMUIwMDFDNTM0RjAyMDAxQ0RBQ0YwMEMwMEIKKzoxMDA3MTAwMDFGRDU1NzBGMDAxQ0QzRDMzNzAwMUNENDUzMEYwMDFDMTgKKzoxMDA3MjAwMEUwMjkwMDAwMUNGNUQ1Q0MwNTAwMDAwMEI4NTUwNDc3ODEKKzoxMDA3MzAwMDU2MDEwMDFDNTY1MzAxMDAxQzAwMDAwMDEwMTgwMDAwNTgKKzoxMDA3NDAwMDA0QzAwNEY1NTUwMTAwMUMwMDAwRDA1NTA0Nzc1NjAxODMKKzoxMDA3NTAwMDAwMUM1NjUzMDEwMDFDMDAwMDAwMTAxODAwMDAwNEMwQ0IKKzoxMDA3NjAwMDA0Q0IyRjAxMTgxMENCMkYwMTEwMTBDQjJGMDEwODEwMzQKKzoxMDA3NzAwMENCMkYwMTA4MTBDQjJGMDEyMDEwQ0IyRjAxMDAxMENCNjUKKzoxMDA3ODAwMDJGMDEyODEwODkyNTcxQzIwNDAwMDAwQ0MzMDQwMDAwNDkKKzoxMDA3OTAwMDc0QzMwNDAwMDA3NEMzMDQwMDAwNzRDMzA0MDAwMDcwMzgKKzoxMDA3QTAwMEMyMDQwMDAwMENDMzA0MDAwMDc0QzMwNDAwMDA3NEMzM0UKKzoxMDA3QjAwMDA0MDAwMDc0QzMwNDQwMUM2Q0MwMDQ0MDFDOUNDMDA0QjIKKzoxMDA3QzAwMEE3Nzc3NUMzMDQwMDAwQzRDMDA0MjcxREYxQzAwNDAwNEUKKzoxMDA3RDAwMDAwNzRDMzA0MDAwMDc0QzMwNDAwMDA3NEMzMDQwMDAwNjgKKzoxMDA3RTAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4OEIKKzoxMDA3RjAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2RkQKKzoxMDA4MDAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0QUUKKzoxMDA4MTAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwQTIKKzoxMDA4MjAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwOTIKKzoxMDA4MzAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4M0EKKzoxMDA4NDAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2QUMKKzoxMDA4NTAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0NUUKKzoxMDA4NjAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwNTIKKzoxMDA4NzAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDIKKzoxMDA4ODAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4RUEKKzoxMDA4OTAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2NUMKKzoxMDA4QTAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MEUKKzoxMDA4QjAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDIKKzoxMDA4QzAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwRjIKKzoxMDA4RDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4OUEKKzoxMDA4RTAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MEMKKzoxMDA4RjAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0QkUKKzoxMDA5MDAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwQjEKKzoxMDA5MTAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwQTEKKzoxMDA5MjAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4NDkKKzoxMDA5MzAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2QkIKKzoxMDA5NDAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0NkQKKzoxMDA5NTAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwNjEKKzoxMDA5NjAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNTEKKzoxMDA5NzAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4RjkKKzoxMDA5ODAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2NkIKKzoxMDA5OTAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MUQKKzoxMDA5QTAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMTEKKzoxMDA5QjAwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwMDEKKzoxMDA5QzAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QTkKKzoxMDA5RDAwMEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MUIKKzoxMDA5RTAwMDA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0Q0QKKzoxMDA5RjAwMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwQzEKKzowNDBBMDAwMDAwNDhDNjA0RTAKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzLmloZXggYi9maXJtd2FyZS9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiMzc2YQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5zeXMuaWhleApAQCAtMCwwICsxLDUxMjQgQEAKKzoxMDAwMDAwMDAyMDAwMDAwMDA0MDAwMDAwMDAwMDEwMDAwMDAwMDAwQUQKKzoxMDAwMTAwMDAwODAwMDAwMTUwMDAwNDA4MUIyMDAwMDFCMDAwMDQwN0QKKzoxMDAwMjAwMDgxQjIwMDAwMjEwMDAwNDA4MUIyMDAwMDAzMDAwMDQwQzYKKzoxMDAwMzAwMDgxQjIwMDAwMDAwMDAwQTg5OEIwMDEwMDA0ODBBMjQwMzYKKzoxMDAwNDAwMEZEN0YwMDAwMDkwMEEyNDlERDdEMDAwMDAwMDAwMDRDOUEKKzoxMDAwNTAwMDgwQjIwMTAwMDcwMDAwNDBEMUIxMDAwMDAwMDAwMDRDNTgKKzoxMDAwNjAwMDgwQjIwMTAwMDkwMEEyNDA3NTdEMDAwMDYwMDAwMDQwRTAKKzoxMDAwNzAwMDYxOTkwMTAwMEIwMEE4QjE3RTMxMDAwMDA5MDAwMDQwMjkKKzoxMDAwODAwMDgxQjIwMDAwMDA4MDhGOTgxODMxMDAwMDEwMDAwMDk4QTUKKzoxMDAwOTAwMDgwRTQwMTAwMDAwMDQxOTg4MDk0MDEwMDAwMDAwMDQwQ0QKKzoxMDAwQTAwMDgxQjIwMTAwMTAwMDAwOTg4MEU0MDEwMDBFMDA0MDk4MjkKKzoxMDAwQjAwMDgwOTQwMDAwMTEwMDAwNDA4MUIyMDAwMDAwMDAwMDQwNjgKKzoxMDAwQzAwMEE1OTkwMTAwMTkwMDI5NDA4MTMyMDAwMDE5MDAxNEJDRDMKKzoxMDAwRDAwMDgwMzIwMDAwMEUwMDkzQkM4MDMyMDAwMDAwMDA1MDQwQ0YKKzoxMDAwRTAwMDgxQjIwMTAwMDA4MDAwNDA4MUIyMDAwMDEwMDAwMDQwOTkKKzoxMDAwRjAwMEE1OTkwMTAwMUYwMDI5NDA4MTMyMDAwMDFGMDAxNEJDOTcKKzoxMDAxMDAwMDgwMzIwMDAwMTIwMDkzQkM4MDMyMDAwMDAwMDA1MDQwOUEKKzoxMDAxMTAwMDgxQjIwMTAwMDE4MDAwNDA4MUIyMDAwMDIwMDAwMDQwNTcKKzoxMDAxMjAwMEE1OTkwMTAwMjUwMDI5NDA4MTMyMDAwMDI1MDAxNEJDNUEKKzoxMDAxMzAwMDgwMzIwMDAwMTQwMDkzQkM4MDMyMDAwMDAwMDAwMDQ5QUYKKzoxMDAxNDAwMEREODEwMTAwMTIwMTAwNDA4MTMyMDEwMDMzMDEwMDQwRDUKKzoxMDAxNTAwMDgxMzIwMTAwMkEwMDE0QkM4MDMyMDAwMEZFMDAxM0JDNzIKKzoxMDAxNjAwMDgwMzIwMDAwNTQ5NTAwNDA0NTk5MDEwMEZGRkYwMDQwOTcKKzoxMDAxNzAwMEU1OTkwMTAwMDAwMDJGNDA0OUIxMDEwMDAwMDAwMDQwNTYKKzoxMDAxODAwMEUxQjEwMTAwMDAwMDAwNDBGREIzMDEwMDAwMDAwMDQwQUIKKzoxMDAxOTAwMEZGQjMwMTAwMzMwMDE4RUU4MDMyMDAwMDAwMDAwMDUwNzEKKzoxMDAxQTAwMDg5QjAwMTAwMzIwMEEyNDE4OTUwMDAwMDk5MDAwMDQwNEUKKzoxMDAxQjAwMDgxMzIwMTAwMzA5NDAwNDA0Mzk5MDEwMDAwMDAwMEY4QjIKKzoxMDAxQzAwMDIwQjEwMTAwMDAwMDAwRkFFMEIzMDEwMDM5MDA5OEVFMTAKKzoxMDAxRDAwMDgwMzIwMDAwMDAwMDAwRkI4MEIwMDEwMDNCMDA4MEYzOTMKKzoxMDAxRTAwMERFMzMwMDAwMDAwMDAwNDdGRDkzMDEwMDNFMDA4M0YzNzIKKzoxMDAxRjAwMDgwMzIwMDAwRjAwMDAwRjM4MDg4MDEwMDAxODAwMDQwQTAKKzoxMDAyMDAwMDJFREQwMTAwMDA5NDAwNDA0Mzk5MDEwMDAwMDAwMDQ2RUIKKzoxMDAyMTAwMDQzQzEwMTAwMDAwMDAwRkEyNEIxMDEwMDdDMDAxOEVFODcKKzoxMDAyMjAwMDgwMzIwMDAwNDUwMDk1RTg4MDMyMDAwMEZGRkYwMEU4QzIKKzoxMDAyMzAwMDgwODgwMTAwN0MwMDI2NDA4MTMyMDAwMDAwMDAwMDQwRTAKKzoxMDAyNDAwMEQ1OTkwMTAwMDAwMDAwRjJFQ0IzMDEwMDAwMDAwMEY4QjUKKzoxMDAyNTAwMEQ2QjEwMTAwMDgwMDAwNDBENTk5MDEwMDAwMDAwMEYwNkYKKzoxMDAyNjAwMEQ2QjEwMTAwRkYwMDAwRjhFRThCMDEwMDA4MDEwMDQwNEMKKzoxMDAyNzAwMEQ1OTkwMTAwRkYwMDAwRjA4MDhDMDEwMDAwMDAwMEY3MUMKKzoxMDAyODAwMDgxOTQwMTAwMDAwMDAwNDBENkIxMDEwMEZGMDAwMEY4OTkKKzoxMDAyOTAwMDgwODgwMTAwM0MwMDAwNDBENTk5MDEwMEZGMDAwMEYwN0IKKzoxMDAyQTAwMEQ2OEQwMTAwRkZGRjAwRjBGMERCMDEwMDAwMDAwMDQ4RTgKKzoxMDAyQjAwMDgxRTAwMTAwMDAwMDAwRjg4MTk0MDEwMDNDMDEwMDQwNTEKKzoxMDAyQzAwMEQ1OTkwMTAwMDAwMDAwNDBENkIxMDEwMEZGMDAwMEY4MDAKKzoxMDAyRDAwMDgwODgwMTAwMDAwMDAwNDg4MUUwMDEwMDAwMDAwMEY4NzMKKzoxMDAyRTAwMDgxOTQwMTAwM0MwMjAwNDBENTk5MDEwMDAwMDAwMDQwQ0IKKzoxMDAyRjAwMEQ2QjEwMTAwMkMwMDAwNDBENTk5MDEwMDAwMDAwMEY4QTMKKzoxMDAzMDAwMEQ2QjEwMTAwMUUwMDAwRjA4MkY0MDEwMEZGM0YwMEY4QUEKKzoxMDAzMTAwMDgwRDgwMTAwNjQwMDI2NDA4MTMyMDAwMDAwMDAwMDQxQzYKKzoxMDAzMjAwMDgxRDAwMTAwRkZGRjAwNDA4MEQ4MDEwMDAwMDAwMDQxQTMKKzoxMDAzMzAwMDgwOTQwMTAwMDAwMDAwNDBEOEIxMDEwMDY4MDAyMkZBNUEKKzoxMDAzNDAwMDgwMzAwMDAwMDAwMDAwNEM4MUUwMDEwMDAxMDAwMDQwMEUKKzoxMDAzNTAwMDgwQ0MwMTAwMDAwMDAwNDBERUIxMDEwMDAwMDEwMDQwM0YKKzoxMDAzNjAwMEQ1OTkwMTAwMTAwMDAwRkE4MEU0MDEwMDAwMDAwMEY2QjkKKzoxMDAzNzAwMDgxOTQwMTAwMDAwMDAwNDBENkIxMDEwMDAwMDIwMDQwNUQKKzoxMDAzODAwMEQ1OTkwMTAwMTAwMDAwRkE4MEU0MDEwMDAwMDAwMEY2OTkKKzoxMDAzOTAwMDgxOTQwMTAwMDAwMDAwNDBENkIxMDEwMDA2MDAwMDQwMzkKKzoxMDAzQTAwMEQ1OTkwMTAwMTAwMDAwRkJENkU1MDEwMDA3MDAwMDQwRDAKKzoxMDAzQjAwMEQ1OTkwMTAwMTgwMDAwRkJENkU1MDEwMDQ4MDAwMDQwNzcKKzoxMDAzQzAwMEQ1OTkwMTAwMTAwMDAwRkFENkU1MDEwMDUwMDAwMDQwNjgKKzoxMDAzRDAwMEQ1OTkwMTAwMTAwMDAwRkJENkU1MDEwMDAzMDAwMEZCRTkKKzoxMDAzRTAwMDdBODkwMTAwMDAwMDAwRjBEQ0IxMDEwMDdDMDAwMDRDQzMKKzoxMDAzRjAwMEREOTEwMDAwN0MwMDk1RTg4NDMwMDAwMDAwMDAyRkU5Q0EKKzoxMDA0MDAwMEZBQjMwMTAwMDAwMDAwNDBEMUIxMDEwMEZGMDAwMDQyM0EKKzoxMDA0MTAwMDgwODgwMTAwMzQwMDAwNDA4MENFMDEwMDdDMDBBNjQwQUUKKzoxMDA0MjAwMDgxMzIwMDAwODUwMDAwNDA4MTMyMDEwMDAyODAyMjQwQkMKKzoxMDA0MzAwMDgwMzIwMDAwN0MwMDAwNDA4MUIyMDAwMDAwMDAwMDRGQ0MKKzoxMDA0NDAwMDgxQjAwMTAwOEUwMDA5Rjk4MTMyMDAwMDhDMDAwOEY5QUEKKzoxMDA0NTAwMDgxMzIwMDAwOTgwMDFGRkRGOTMzMDAwMDhCMDA5RUZERTMKKzoxMDA0NjAwMDgxMzIwMDAwMDAwMDAwNEFGMzkzMDEwMDAwMDA4MDQ4NDAKKzoxMDA0NzAwMEYzOTMwMTAwMDAwMDAwRkRGN0IzMDEwMDAwMDA4MDQ5ODQKKzoxMDA0ODAwMEYzOTMwMTAwMDAwMDAwRkMxOUIxMDEwMDkzMDAwQUY5ODgKKzoxMDA0OTAwMDgxMzIwMDAwMDAwMDQwRkI4MUIyMDEwMDAwMDA0MUZERkMKKzoxMDA0QTAwMDgxQjIwMTAwMDAwNzgwRjlGMzhGMDEwMDAwMDc0MkY5RDMKKzoxMDA0QjAwMEYzOEYwMTAwOTcwMEEyRkZGNzZGMDAwMDAwMDA0MzQwOTgKKzoxMDA0QzAwMDgxQjIwMTAwMDAwMEEyRkZGQkVGMDAwMDAwMDA4MEZDRjEKKzoxMDA0RDAwMEUxQjEwMTAwMDAwMDgwNDA4MUIwMDEwMDAwOTQwMDQwQzMKKzoxMDA0RTAwMDQ3OTkwMTAwQkIwMDAwNDA4MTMyMDEwMDAwMDBBMjQ2OTQKKzoxMDA0RjAwMEZEN0YwMTAwMDA5NDAwNDA0Nzk5MDEwMENFMDAwMDQwQkMKKzoxMDA1MDAwMDgxMzIwMTAwMDAwMEEyNDRGRDdGMDEwMDAwOTQwMDQwMDAKKzoxMDA1MTAwMDQ1OTkwMTAwMDAwMDAwNDBGMUIxMDEwMEZGN0YwMDQwNUIKKzoxMDA1MjAwMEY1OTkwMTAwRkY3RjAwNDBGNTk5MDEwMDlBMTMwMDQwMDIKKzoxMDA1MzAwMEY1OTkwMTAwMDcwMDAwNDBGNTk5MDEwMDAxMDAwMDQwMTUKKzoxMDA1NDAwMEY1OTkwMTAwMDAwMjAwNDBGNTk5MDEwMDAyMDAwMDQwMDkKKzoxMDA1NTAwMEY1OTkwMTAwMDAwMjAwNDBGNTk5MDEwMDAzMDEwMDQwRjcKKzoxMDA1NjAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDlBMTMwMDQwNDAKKzoxMDA1NzAwMEY1OTkwMTAwMEIwMDAwNDBGNTk5MDEwMDgwMDAwMDQwNTIKKzoxMDA1ODAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDAwMDAwMDQwQ0QKKzoxMDA1OTAwMEY1OTkwMTAwMDcwMDAwNDBGNTk5MDEwMDA4MDAwMDQwQUUKKzoxMDA1QTAwMEY1OTkwMTAwQjAwMjAwNDBGNTk5MDEwMDAwMDAwMDQwRkIKKzoxMDA1QjAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDAyMjkwMDQwNzIKKzoxMDA1QzAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDAwNjcwMDQwMjYKKzoxMDA1RDAwMEY1OTkwMTAwMDAwMDAwNDBGNTk5MDEwMDgwMDAwMDQwRkQKKzoxMDA1RTAwMEY1OTkwMTAwMDAwMDgwNDBGNTk5MDEwMDAwMDAwMDQ1RTgKKzoxMDA1RjAwMEZEODMwMTAwMDAwMDAwNDZGRDgzMDEwMEZGN0YwMDQwRjUKKzoxMDA2MDAwMDI1OTkwMTAwQzQwMDAwNDA4MTMyMDEwMDAwMDBBMjQ0OEQKKzoxMDA2MTAwMDgwQjIwMDAwMDAwMDAwNDVGRDkzMDEwMEUyMDAwMDQwQjAKKzoxMDA2MjAwMDgzMzAwMTAwMDAwMEEyNDU4MDMyMDEwMDAwMDA4MDQ2QjYKKzoxMDA2MzAwMEZEOTMwMTAwMDAxMDAwNDA4Mzk4MDEwMEREMDAwMDQwQTAKKzoxMDA2NDAwMDJCMzEwMTAwMDAwMEEyNDY4OEIwMDAwMDAwMDAwMDQxRUMKKzoxMDA2NTAwMDg5QjAwMTAwMDAwMDAwOTQ4Q0IwMDEwMEZGRkYwMDQ2NEIKKzoxMDA2NjAwMDgwODgwMTAwQTVBNUEyNDA4MENFMDAwMDAwMDAwMDQ4QkYKKzoxMDA2NzAwMDhERjAwMTAwQzkwMDgyNDE4OTQwMDAwMDAwMDA4MDQwRTcKKzoxMDA2ODAwMDg5QjAwMTAwMDAwMDAwNDRGRDgzMDEwMEQ0MDAwMDQwNTcKKzoxMDA2OTAwMDgxMzIwMTAwMDAwMEEyNDQ4MEIyMDAwMEUyMDAwMDA4QTQKKzoxMDA2QTAwMDgzMzAwMTAwMDAwMEEyNDU4MDMyMDEwMDAwMDA4MDQ0MzgKKzoxMDA2QjAwMEZEOTMwMTAwMDAzMDAwMDg4Mzk4MDEwMDgwMDAwMDQwOTUKKzoxMDA2QzAwMDJCOTkwMTAwREIwMDAwNDA4OTMwMDEwMDAwMDBBMjQ2QTgKKzoxMDA2RDAwMDgwQjIwMDAwRkZGRjAwOTQ4MDg4MDEwMEE1QTVBMjQwMjEKKzoxMDA2RTAwMDgwNEUwMTAwMDAwMDgwNDM4OUIwMDEwMDAzODQwMDQxNzYKKzoxMDA2RjAwMDJDOTkwMTAwREUwMDAwNDA4MUIyMDAwMDAzODgwMDQxMTcKKzoxMDA3MDAwMDJDOTkwMTAwMDAwMDAwMjA4REIwMDEwMDAwMDA5Rjk2OTAKKzoxMDA3MTAwMDgwQjIwMDAwREYwMEEyNDE4RDUwMDAwMDAwMDA4MDQwNDgKKzoxMDA3MjAwMDgxQjIwMTAwRkY3RjAwNDAyNTk5MDEwMDAwMDAwMDRDQ0MKKzoxMDA3MzAwMDg5RTAwMTAwREQwMDAwNDQ4MjE0MDEwMDAwMDA5MDk0NzMKKzoxMDA3NDAwMDhBQjAwMDAwMDAwMDAwNDVGMEIxMDEwMDEwMDAwMDQ1MzMKKzoxMDA3NTAwMDg4RjQwMTAwMDAwMDAwNDQ4OUQwMDEwMEREMDAwMDQ0NUQKKzoxMDA3NjAwMDJCNDEwMTAwRUMwMDA4NDE4MDMyMDAwMEVEMDAwMDk0QjQKKzoxMDA3NzAwMDI0QjEwMDAwMTAwMDAwOTQyNEY1MDEwMDAwMDAwMDk0NTIKKzoxMDA3ODAwMEYwQjEwMTAwRjIwMEEwNDQ4OTUwMDAwMEREMDAwMDQ0RjcKKzoxMDA3OTAwMDJCNDEwMTAwMDAwMDAwOTRGMEIxMDEwMEVGMDAyMDQ0NjMKKzoxMDA3QTAwMDg5NTAwMDAwMTAwMDAwNDU4OEY0MDEwMDAwMDAwMEZBQTQKKzoxMDA3QjAwMDhBQjAwMTAwMDAwMEEzNDI4OUQwMDAwMEY3MDBBMEZBMkYKKzoxMDA3QzAwMDhBNDAwMDAwMDAwMDAwNDE4QkMwMDEwMEY1MDBBMzQyRjgKKzoxMDA3RDAwMDg5NTAwMDAwRkZGRjAwNDU4ODg4MDEwMDEwMDAwMDQ1OTcKKzoxMDA3RTAwMDhBRjQwMTAwRkMwMDkwNDQ4QTQwMDAwMDAwMDAwMDQxQUYKKzoxMDA3RjAwMDhCQzAwMTAwRkZGRjAwNDU4QUE4MDEwMDAwMDA4MDUwNjcKKzoxMDA4MDAwMDhCRTAwMTAwRkY3RjAwNDAyNTk5MDEwMDdDMDAwMDQwNDMKKzoxMDA4MTAwMDJCOTkwMTAwMDAzMDAwNDA4Mzk4MDEwMEREMDAwMDA4QTIKKzoxMDA4MjAwMDgzMTQwMTAwMDAwMDAwOTQyQUIxMDEwMDAwODAwMDQwMDAKKzoxMDA4MzAwMEY5OUIwMTAwREQwMDAwRkMxOTMxMDEwMDAwMDA0MDk0MkIKKzoxMDA4NDAwMDgwQjIwMTAwREQwMDAwNDQyQjQxMDEwMDAwMDA0MTk0MTIKKzoxMDA4NTAwMDgwQjIwMTAwMDAwMDAwNDFGOUMzMDEwMDAwMDAwMDQ0MjMKKzoxMDA4NjAwMDJCQzEwMTAwMDQwMTlGOTQ4MDMyMDAwMDAyODAwMDQwRUYKKzoxMDA4NzAwMDgxQjIwMDAwMTAwMTAwNTE5M0IwMDAwMDEwMDEwMDRENDIKKzoxMDA4ODAwMDkzQjAwMDAwMTAwMTAwNDk5M0IwMDAwMDAwMDAwMDQyNDYKKzoxMDA4OTAwMDkzQjAwMTAwMTAwMUEyNDE5MzUwMDAwMDAwMDA4MDQwN0QKKzoxMDA4QTAwMDgxQjIwMTAwMDAwMDEwNDA4MUIyMDEwMDAwMDAxMTQwM0YKKzoxMDA4QjAwMDgxQjIwMTAwMDAwMDEyNDA4MUIyMDEwMDAwMDAxMzQwMkIKKzoxMDA4QzAwMDgxQjIwMTAwMDAwMDE0NDA4MUIyMDEwMDAwMDAxNTQwMTcKKzoxMDA4RDAwMDgxQjIwMTAwMDAwMDE2NDA4MUIyMDEwMDAwMDAxNzQwMDMKKzoxMDA4RTAwMDgxQjIwMTAwMDAwMDE4NDA4MUIyMDEwMDAwMDAxOTQwRUYKKzoxMDA4RjAwMDgxQjIwMTAwMDAwMDFBNDA4MUIyMDEwMDAwMDAxQjQwREIKKzoxMDA5MDAwMDgxQjIwMTAwMDAwMDFDNDA4MUIyMDEwMDAwMDAxRDQwQzYKKzoxMDA5MTAwMDgxQjIwMTAwMDAwMDFFNDA4MUIyMDEwMDAwMDAxRjQwQjIKKzoxMDA5MjAwMDgxQjIwMTAwMDAwMDcwNDA4MUIyMDEwMDAwMDA3MTQwRkUKKzoxMDA5MzAwMDgxQjIwMTAwMDAwMDcyNDA4MUIyMDEwMDAwMDA3MzQwRUEKKzoxMDA5NDAwMDgxQjIwMTAwMDAwMDc0NDA4MUIyMDEwMDAwMDA3NTQwRDYKKzoxMDA5NTAwMDgxQjIwMTAwMDAwMDc2NDA4MUIyMDEwMDAwMDA3NzQwQzIKKzoxMDA5NjAwMDgxQjIwMTAwMDAwMDc4NDA4MUIyMDEwMDAwMDA3OTQwQUUKKzoxMDA5NzAwMDgxQjIwMTAwMDAwMDdBNDA4MUIyMDEwMDAwMDA3QjQwOUEKKzoxMDA5ODAwMDgxQjIwMTAwMDAwMDdDNDA4MUIyMDEwMDAwMDA3RDQwODYKKzoxMDA5OTAwMDgxQjIwMTAwMDAwMDdFNDA4MUIyMDEwMDAwMDA3RjQwNzIKKzoxMDA5QTAwMDgxQjIwMTAwMDAwMDgwNDA4MUIyMDEwMDAwMDQwMDQwREIKKzoxMDA5QjAwMEExOTkwMTAwMDAwMDAwNTBBMUQxMDEwMDAwMDAwMDQwRjkKKzoxMDA5QzAwMDFCQjAwMTAwMDAwMDAwNDAxOUIwMDEwMDAwMDAwMDQwMTEKKzoxMDA5RDAwMDE3QjAwMTAwMDAwMDAwNDAxNUIwMDEwMDAwMDAwMDQwMDkKKzoxMDA5RTAwMDEzQjAwMTAwMDAwMDAwNDAxMUIwMDEwMDAwMDAwMDQwMDEKKzoxMDA5RjAwMDBGQjAwMTAwMDAwMDAwNDAwREIwMDEwMDAwMDAwMDQwRjkKKzoxMDBBMDAwMDBCQjAwMTAwMDAwMDAwNDAwOUIwMDEwMDAwMDAwMDQwRjAKKzoxMDBBMTAwMDA3QjAwMTAwMDAwMDAwNDAwNUIwMDEwMDAwMDAwMDQwRTgKKzoxMDBBMjAwMDAzQjAwMTAwMDAwMDAwNDAwMUIwMDEwMDNCMDEyMDQ4N0MKKzoxMDBBMzAwMEExNTEwMDAwMDAwMDgwNDA4MUIyMDEwMDQ3MDEyMjRCMUIKKzoxMDBBNDAwMDc0N0QwMDAwMDAwMDgwNDA4MUIyMDEwMDYwMDAwMDRCMTYKKzoxMDBBNTAwMDYwOTkwMTAwMDAwMDAwQjE3RUIxMDEwMDQ4MDFBODQwOEEKKzoxMDBBNjAwMDgxMzIwMDAwNDUwMTAwNDA4MUIyMDAwMDA1MDA4MDQwNTUKKzoxMDBBNzAwMDk3OTgwMTAwMTgwMDAwQUE5Njg4MDEwMDAwMDA4MDQzQTIKKzoxMDBBODAwMDk3RjAwMTAwMDcwMDAwQUE5Njg4MDEwMDAwMDA4MDQwNEUKKzoxMDBBOTAwMDgxQjIwMTAwMDAwMDAwNTgwNzkwMDEwMEQ4OUYwMDQwN0IKKzoxMDBBQTAwMDgxQjIwMDAwMDAwMDAwNDRBNUIzMDEwMEQ4MDIwMDQwNUMKKzoxMDBBQjAwMDgxMzIwMTAwRjgwMjAwNDA4MTMyMDEwMDAwMDAwMDVDMzgKKzoxMDBBQzAwMDA3OTAwMTAwRDg5RjAwNDBCRkIzMDAwMDVBMDEyMkNDMUMKKzoxMDBBRDAwMDg1N0YwMDAwMDAwMDAwNTEwNzkwMDEwMEQ4OUYwMDQwNzIKKzoxMDBBRTAwMDgxQjIwMDAwMDAwMDAwNDA0OUIxMDEwMEFFMDMwMENCMUMKKzoxMDBBRjAwMEEzQzkwMTAwRDAxNDAwNDBBMTlCMDEwMDAwMDAwMDIwMDgKKzoxMDBCMDAwMDQ2QjEwMTAwMDAwMDAwNDhGMUIxMDEwMDAwMDAwMEQwMzIKKzoxMDBCMTAwMEYxQjEwMTAwMDAwMDAwQ0FGMUIxMDEwMDAwMDAwMEQ1RjAKKzoxMDBCMjAwMEUxQjEwMTAwMDcwMDAwNDA2MTk5MDEwMDIwMDAwMDIwQjAKKzoxMDBCMzAwMDYyREQwMTAwNjMwMUE4NDA4MTMyMDAwMDAwMDAwMENDQUEKKzoxMDBCNDAwMDg1OTMwMTAwRjgwMjAwNDA4MTMyMDEwMEQwMTQwMDQwN0EKKzoxMDBCNTAwMDQzOTkwMTAwMDAwMDAwRkFCQUIzMDEwMDAwMDAwMEZBNTYKKzoxMDBCNjAwMEE0QjMwMTAwMDAwMDAwRjhCQ0IzMDEwMDAwMTQyRjQwNDIKKzoxMDBCNzAwMDgxQjAwMTAwMDAwMDAwRTdBN0IzMDEwMDAwMDAwMEQ4MjkKKzoxMDBCODAwMEE5QjMwMTAwRkYwMDAwREQ4MTg4MDEwMDAyMDAwMDQwRTAKKzoxMDBCOTAwMDgwRjQwMTAwNzMwMTAwNDA4MEM4MDEwMDg2MDEwMEREN0YKKzoxMDBCQTAwMDgxMzIwMDAwMDAwMDAwNDAxMEIxMDAwMDg3MDEwMDQwQzkKKzoxMDBCQjAwMDgxQjIwMDAwODgwMTAwNDA4MUIyMDAwMDg5MDEwMDQwM0MKKzoxMDBCQzAwMDgxQjIwMDAwOEEwMTAwNDA4MUIyMDAwMDhCMDEwMDQwMjgKKzoxMDBCRDAwMDgxQjIwMDAwOEQwMTAwNDA4MUIyMDAwMDhGMDEwMDQwMTEKKzoxMDBCRTAwMDgxQjIwMDAwNTAwMTAwNDA4MUIyMDAwMEI2MDEwMDQwMTcKKzoxMDBCRjAwMDgxQjIwMDAwNTAwMTAwNDA4MUIyMDAwMEM0MDEwMDQwRjkKKzoxMDBDMDAwMDgxQjIwMDAwQzUwMTAwNDA4MUIyMDAwMDgyMDIwMDQwQjQKKzoxMDBDMTAwMDgxQjIwMDAwODMwMjAwNDA4MUIyMjgwMEI4MDIwMDQwODcKKzoxMDBDMjAwMDgxQjIyODAwRDQ5RjAwNDA4MUIyMjgwMEQ1OUYwMDQwQTcKKzoxMDBDMzAwMDgxQjIyODAwRDY5RjAwNDA4MUIyMjgwMEQ3OUYwMDQwOTMKKzoxMDBDNDAwMDgxQjIyODAwNzIwMTAwNDE4MUMwMjgwMDU1MDE1MTQ5M0MKKzoxMDBDNTAwMEZEOTMyODAwNTUwMTUyNEFGRDkzMkEwMDU1MDE1NTQ5M0MKKzoxMDBDNjAwMEZEODMyQTAwNTUwMTU2NEFGRDgzMkEwMDUwMDE5MTgxRDcKKzoxMDBDNzAwMDgwMzAyQTAwNTUwMTQ1NDA4MUIyMkEwMDUwMDE5MTgyRkUKKzoxMDBDODAwMDgwMzAyQTAwNTUwMTQ2NDA4MUIyMkEwMDAwMDAwMDQwMTEKKzoxMDBDOTAwMDg5QjAyQjAwMDAwMDJGNDA4MUIwMDEwMDAwMTQwMDQwRkIKKzoxMDBDQTAwMDQ5OTkwMTAwQjMwMTIyREVFMTZEMDAwMDAwMDAwMDRDMTMKKzoxMDBDQjAwMDQ5QzEwMTAwMDAwMDAwNDE4MUMwMDEwMDkyMDFBMjQ0MkQKKzoxMDBDQzAwMDgxNkMwMDAwMDAwMDAwNEM0OUQxMDEwMDlBMDEyMjQwRDMKKzoxMDBDRDAwMEUxNkQwMDAwOTYwMUEyNDE4MTUwMDAwMDUwMDEwMDQxRTkKKzoxMDBDRTAwMEJGQjMwMDAwMDAwMDAwNDJCRkIzMDEwMDUwMDFBMDBGREQKKzoxMDBDRjAwMEJENkYwMDAwMDAwMDAwREVFMUIxMDEwMDAwMDAwMDQ0MTMKKzoxMDBEMDAwMDQ5QzEwMTAwQjUwMTAwNDAxOTk5MDEwMDAwMDA0MjQwQUQKKzoxMDBEMTAwMDgxQjIwMTAwMDAwMDQzRkY4NUIwMDEwMDAwMDAwMERFNDkKKzoxMDBEMjAwMDE5QjEwMTAwMDAwMDQyRkY4N0IwMDEwMDAwMDA0M0ZGM0QKKzoxMDBEMzAwMEUxQjEwMTAwMDAwMDAwNDQ0OUMxMDEwMDAwMDAyRkZGQTMKKzoxMDBENDAwMEUxQjEwMTAwMDgxNDAwQTQ4MENDMDEwMEFBMDEyNjQwRjIKKzoxMDBENTAwMDgxMzIwMDAwMDAwMDAwNDE4NUMwMDEwMEE4MDFBMjRDQzIKKzoxMDBENjAwMDgxNTAwMDAwQjQwMTIyRDI4MTMyMDAwMEFGMDEyMjQxNDMKKzoxMDBENzAwMEE1NkYwMDAwNTAwMUEyRTA4MTMyMDAwMDAwMDAwMEQyMDcKKzoxMDBEODAwMEMxQjMwMTAwMDAwMDAwNUM4OTkwMDEwMDAwMDA0MDQyRjYKKzoxMDBEOTAwMDgwQjIwMTAwMDAwMDQxNDM4MEIyMDEwMDAwMDAwMEYwNzkKKzoxMDBEQTAwMDg4OTQwMTAwNTUwMTAwNDRFMEIxMDAwMEIxMDEwMDQ4MDEKKzoxMDBEQjAwMDQ5QzEwMDAwQUYwMTAwNUI4OTkwMDAwMEE4OUYwMEEwMUUKKzoxMDBEQzAwMDlFQjAwMDAwMDAwMDAwNDA4M0IwMDEwMDAwMTQwMDQwMEQKKzoxMDBERDAwMDQ5OTkwMTAwMDAwMDIzNDA4MUIwMDEwMEJFMDEyMkRFREMKKzoxMDBERTAwMEUxNkQwMDAwMDAwMDAwNEM0OUMxMDEwMDAwMDAwMDQxMUQKKzoxMDBERjAwMDgxQzAwMTAwQjkwMUEyNDQ4MTZDMDAwMDUwMDEwMDQzOTAKKzoxMDBFMDAwMEJGQjMwMDAwMDAwMDAwRjgxOEIxMDEwMDAwMDA0MEY4NzYKKzoxMDBFMTAwMDgwQjIwMTAwMDAwMDQxRjA4MEIyMDEwMDAwMDAwMDQwRkIKKzoxMDBFMjAwMEYxQjEwMTAwMDAwMDAwNDBGMUIxMDEwMDU1MDEwMDQwQTYKKzoxMDBFMzAwMEUxQjEwMDAwQzYwMTAwNDA5MUIwMDAwMDAwMDAwMDQxOTcKKzoxMDBFNDAwMDkxQjAwMTAwRDAxNDJFNDA0OUIxMDEwMDA1MDAwMDQwQ0UKKzoxMDBFNTAwMEEzOUIwMTAwMDgwMDAwREQ4MUY0MDEwMENCMDEwMDQwRUMKKzoxMDBFNjAwMDgwQzgwMTAwMDAwMDAwNDAxMEIxMDAwMEQxMDEwMDQwMjYKKzoxMDBFNzAwMDgxQjAwMDAwNTMwMTAwREVBMUIzMDAwMEUzMDEwMDQwOTcKKzoxMDBFODAwMDgxQjIwMDAwRTUwMTAwNDA4MUIwMDAwMEVCMDEwMDQwQUMKKzoxMDBFOTAwMDgxQjIwMDAwNTIwMTAwREZFMUIxMDAwMDAwMDAwMEQwOEIKKzoxMDBFQTAwMEJBQjMwMTAwMDAwMDAwREVBMUIxMDEwMDAyMDAwMEQyQ0YKKzoxMDBFQjAwMEE1RTcwMTAwMDAwMDAwRDJDMUIzMDEwMDAwMDAwMDAwNUUKKzoxMDBFQzAwMEYwQjEwMTAwREIwMTIyNDRDMTUzMDAwMERBMDE4NDQxOEEKKzoxMDBFRDAwMDgxNDAwMDAwREUwMTAwNDA4MTMyMDEwMDAwMDAwMEQwQUUKKzoxMDBFRTAwMDQ1QjEwMTAwRDUwMTAwNDFBMUMxMDAwMERBMDIwMDQwNzYKKzoxMDBFRjAwMDgxMzIwMTAwRjgwMjAwNDA4MTMyMDEwMDU1MDEwMEREMUQKKzoxMDBGMDAwMEExQjEwMDAwMDAwMDAwNDA4MUIwMDEwMDQwMDAwMDQwOUQKKzoxMDBGMTAwMEE1OUIwMTAwREEwMjAwNDA4MTMyMDEwMDQwMDAwMEQzQUQKKzoxMDBGMjAwMEE3Q0IwMTAwRjgwMjAwRTBBNUIzMDAwMDAzMDAwMDQwRDkKKzoxMDBGMzAwMEEzOUIwMTAwNTMwMTAwREVBMUIzMDAwMDAwMDAwMDQ0QTgKKzoxMDBGNDAwMEJGQjMwMTAwMDAwMDAwREU4MTkwMDEwMDUwMDFBMkJBOTEKKzoxMDBGNTAwMDgwMDQwMDAwNjAwMDAwREU2MTk5MDEwMEU4MDFBOEIxOTIKKzoxMDBGNjAwMDgwMzAwMDAwNTIwMTAwNDBFMEIxMDAwMDAwMDAwMEQwREQKKzoxMDBGNzAwMEJBQjMwMTAwNkIwMjAwNDA4MTk4MDEwMDYwMDIwMDREOEQKKzoxMDBGODAwMDgzMzAwMTAwMDAwMDAwNDRFMUIzMDEwMDAwMDAwMDQ0OTAKKzoxMDBGOTAwMEUzQjMwMTAwMDAwMDAwNDRFNUIzMDEwMDAwMDAwMDQ0OTkKKzoxMDBGQTAwMEU5QjMwMTAwMDAwMDAwNDRFQkIzMDEwMDAwMDAwMDQ0N0QKKzoxMDBGQjAwMEY1QjMwMTAwMDAwMDAwNDRGN0IzMDEwMDAwMDAwMDQ0NTUKKzoxMDBGQzAwMEY5QjMwMTAwRjkwMTIyNDA4RjZGMDAwMDc4MDIwMDQwNjAKKzoxMDBGRDAwMDgxOTgwMTAwNjAwMjAwQzc4MzMwMDEwMDgwMDIwMDQwNTgKKzoxMDBGRTAwMDgxOTgwMTAwNjAwMjAwNDI4MzMwMDEwMDAwMDAwMEU4QTcKKzoxMDBGRjAwMEYxQjEwMTAwMDAwMDAwRTlGMUIxMDEwMDAwMDAwMEVBRDgKKzoxMDEwMDAwMEYxQjEwMTAwMDAwMDAwRUJGMUIxMDEwMDAwMDAwMDg1MkEKKzoxMDEwMTAwMEYwQjEwMTAwMDAwMDAwRUNGMUIxMDEwMDAwMDAwMEVEQjIKKzoxMDEwMjAwMEYxQjEwMTAwMDAwMDAwQjJGMEIxMDEwMDAwMDAwMEE5MjAKKzoxMDEwMzAwMEYwQjEwMTAwMDAwMDAwQUNGMEIxMDEwMDAwMDAwMEFCMTUKKzoxMDEwNDAwMEYwQjEwMTAwMDAwMDAwQjhGMEIxMDEwMDAwMDAwMEI5RUIKKzoxMDEwNTAwMEYwQjEwMTAwMDAwMDAwQkFGMEIxMDEwMDAwMDAwMEJCRDcKKzoxMDEwNjAwMEYwQjEwMTAwMEMwMkI4NDA4MTMwMDAwMDAwMDAwMDQwRTcKKzoxMDEwNzAwMDgxOTAwMTAwMEUwMkI5NDA4MTMyMDAwMDAwMDAwMDQxNjEKKzoxMDEwODAwMDgxOTAwMTAwMTAwMkJBNDA4MTMyMDAwMDAwMDAwMDQyNEQKKzoxMDEwOTAwMDgxOTAwMTAwMTIwMkJCNDA4MTMyMDAwMDAwMDAwMDQzMzkKKzoxMDEwQTAwMDgxOTAwMTAwMTQwMkJDNDA4MTMyMDAwMDAwMDAwMDQ0MjUKKzoxMDEwQjAwMDgxOTAwMTAwMTYwMkJENDA4MTMyMDAwMDAwMDAwMDQ1MTEKKzoxMDEwQzAwMDgxOTAwMTAwMTgwMkJFNDA4MTMyMDAwMDAwMDAwMDQ2RkQKKzoxMDEwRDAwMDgxOTAwMTAwMUEwMkJGNDA4MTMyMDAwMDAwMDAwMDQ3RTkKKzoxMDEwRTAwMDgxOTAwMTAwMUMwMkM4NDA4MTMyMDAwMDAwMDAwMDQ4Q0QKKzoxMDEwRjAwMDgxOTAwMTAwMUUwMkM5NDA4MTMyMDAwMDAwMDAwMDQ5QjkKKzoxMDExMDAwMDgxOTAwMTAwMjAwMkNBNDA4MTMyMDAwMDAwMDAwMDRBQTQKKzoxMDExMTAwMDgxOTAwMTAwMjIwMkNCNDA4MTMyMDAwMDAwMDAwMDRCOTAKKzoxMDExMjAwMDgxOTAwMTAwMjQwMkNDNDA4MTMyMDAwMDAwMDAwMDRDN0MKKzoxMDExMzAwMDgxOTAwMTAwMjYwMkNENDA4MTMyMDAwMDAwMDAwMDRENjgKKzoxMDExNDAwMDgxOTAwMTAwMjgwMkNFNDA4MTMyMDAwMDAwMDAwMDRFNTQKKzoxMDExNTAwMDgxOTAwMTAwMkEwMkNGNDA4MTMyMDAwMDAwMDAwMDRGNDAKKzoxMDExNjAwMDgxOTAwMTAwMkMwMkYwNDA4MTMyMDAwMDAwMDAwMDUwMEMKKzoxMDExNzAwMDgxOTAwMTAwMkUwMkYxNDA4MTMyMDAwMDAwMDAwMDUxRjgKKzoxMDExODAwMDgxOTAwMTAwMzAwMkYyNDA4MTMyMDAwMDAwMDAwMDUyRTQKKzoxMDExOTAwMDgxOTAwMTAwMzIwMkYzNDA4MTMyMDAwMDAwMDAwMDUzRDAKKzoxMDExQTAwMDgxOTAwMTAwMzQwMkY0NDA4MTMyMDAwMDAwMDAwMDU0QkMKKzoxMDExQjAwMDgxOTAwMTAwMzYwMkY1NDA4MTMyMDAwMDAwMDAwMDU1QTgKKzoxMDExQzAwMDgxOTAwMTAwMzgwMkY2NDA4MTMyMDAwMDAwMDAwMDU2OTQKKzoxMDExRDAwMDgxOTAwMTAwM0EwMkY3NDA4MTMyMDAwMDAwMDAwMDU3ODAKKzoxMDExRTAwMDgxOTAwMTAwM0MwMkY4NDA4MTMyMDAwMDAwMDAwMDU4NkMKKzoxMDExRjAwMDgxOTAwMTAwM0UwMkY5NDA4MTMyMDAwMDAwMDAwMDU5NTgKKzoxMDEyMDAwMDgxOTAwMTAwNDAwMkZBNDA4MTMyMDAwMDAwMDAwMDVBNDMKKzoxMDEyMTAwMDgxOTAwMTAwNDIwMkZCNDA4MTMyMDAwMDAwMDAwMDVCMkYKKzoxMDEyMjAwMDgxOTAwMTAwNDQwMkZDNDA4MTMyMDAwMDAwMDAwMDVDMUIKKzoxMDEyMzAwMDgxOTAwMTAwNDYwMkZENDA4MTMyMDAwMDAwMDAwMDVEMDcKKzoxMDEyNDAwMDgxOTAwMTAwNDgwMkZFNDA4MTMyMDAwMDAwMDAwMDVFRjMKKzoxMDEyNTAwMDgxOTAwMTAwNEEwMkZGNDA4MTMyMDAwMDAwMDAwMDVGREYKKzoxMDEyNjAwMDgxOTAwMTAwMDAwMDAwNDBGMEIxMDEwMDQwMDAwMDQwMEEKKzoxMDEyNzAwMEE1OUIwMTAwRDgwMjAwNDA4MTMyMDEwMEY4MDIwMDQwMjUKKzoxMDEyODAwMDgxMzIwMTAwRDAxNDJFMDZBNUIzMDEwMDQwMDAwMEQzMjYKKzoxMDEyOTAwMEE3Q0IwMTAwMDAwMDAwRjBGMUIxMDEwMDAwMDAwMEYxNTcKKzoxMDEyQTAwMEYxQjEwMTAwMDAwMDAwRjJGMUIxMDEwMDAwMDAwMEY0MTIKKzoxMDEyQjAwMEYxQjEwMTAwMDAwMDAwRjVGMUIxMDEwMDAwMDAwMEZBRjkKKzoxMDEyQzAwMEYxQjEwMTAwMDAwMDAwRkJGMUIxMDEwMDAwMDAwMEZDRTEKKzoxMDEyRDAwMEYxQjEwMTAwMDAwMDAwRUJGMUIxMDEwMDAwMDAwMEVFRUYKKzoxMDEyRTAwMEYxQjEwMTAwMDAwMDAwRUZGMUIxMDEwMDAwMDAwMEYzRDYKKzoxMDEyRjAwMEYxQjEwMTAwMDAwMDAwRjZGMUIxMDEwMDAwMDAwMEZEQjUKKzoxMDEzMDAwMEYxQjEwMTAwREIwMTAwQzdFMUIxMDAwMDAwMDA4MDQwNDUKKzoxMDEzMTAwMDgxQjIwMTAwNjYwMjAwNDg4MDMyMDAwMDAwMDA1MTQwQTYKKzoxMDEzMjAwMDFBQjEwMTAwMDAwMDRENDA4MUIyMDEwMDAwMDA0NTQwQUIKKzoxMDEzMzAwMDgxQjIwMTAwNjMwMkEyNDE4MzUwMDAwMDVGMDI0OTQwNzQKKzoxMDEzNDAwMDgxQjIwMDAwMDAwMDUyNDAxQ0IxMDEwMDAwMDA0RTQwN0MKKzoxMDEzNTAwMDgxQjIwMTAwMDAwMDQ2NDA4MUIyMDEwMDY4MDJBMjQxNTIKKzoxMDEzNjAwMDgzNTAwMDAwNUYwMjRBNDA4MUIyMDAwMDAwMDAwMEEwRUMKKzoxMDEzNzAwMDlFQjAwMTAwMDAwMDAwODBEOEIzMDEwMDAwMDAwMEExNzEKKzoxMDEzODAwMEQwQjMwMTAwMDAwMDAwQTJEMkIzMDEwMDAwMDAwMEE0MEQKKzoxMDEzOTAwMEQ0QjMwMTAwMDAwMDAwRDBENkIzMDEwMDAwMDAwMEQxOUEKKzoxMDEzQTAwMERDQjMwMTAwMDAwMDAwRDJERUIzMDEwMDAwMDAwMDg4QzEKKzoxMDEzQjAwMERBQjMwMTAwMDAwMDAwRDQ4RUIzMDEwMDAwMDAwMEQzQjYKKzoxMDEzQzAwMEU2QjMwMTAwMDAwMDAwQUNFQ0IzMDEwMDAwMDAwMDk5OUUKKzoxMDEzRDAwMEZBQjMwMTAwMDAwMDAwRDVFMEIzMDEwMDAwMDAwMEQ1MjEKKzoxMDEzRTAwMEUyQjMwMTAwMDAwMDAwRDVFNEIzMDEwMDAwMDAwMEQ1MjUKKzoxMDEzRjAwMEU4QjMwMTAwMDAwMDAwRDVFQUIzMDEwMDAwMDAwMEQ1MDkKKzoxMDE0MDAwMEY0QjMwMTAwMDAwMDAwRDVGNkIzMDEwMDAwMDAwMEQ1RTAKKzoxMDE0MTAwMEY4QjMwMTAwMDAwMDAwQzdBOUIxMDEwMDAwMDAwMDRGQUYKKzoxMDE0MjAwMDQwQjEwMTAwODQwMjAwNDA5MUIwMDAwMDAwMDAwMDQxODIKKzoxMDE0MzAwMDkxQjAwMTAwMDcwMDAwNDBBMzlCMDEwMDA4MDAwMERERkYKKzoxMDE0NDAwMDgxRjQwMTAwODgwMjAwNDA4MEM4MDEwMDAwMDAwMDQwRDMKKzoxMDE0NTAwMDEwQjEwMDAwOEQwMjAwNDA4MUIyMDAwMDk4MDIwMDQwRUYKKzoxMDE0NjAwMDgxQjIwMDAwOTgwMjAwNDZBM0IzMDAwMDlCMDIwMDQwMzYKKzoxMDE0NzAwMDgxQjIwMDAwQTEwMjAwNDA4MUIyMDAwMDhGMDIyMzUwMUYKKzoxMDE0ODAwMEE1NkYwMDAwMDAwMDAwNTBBNUIzMDEwMEU4MDIwMDQyNzMKKzoxMDE0OTAwMEE1NjMwMTAwRjgwMjAwNDA4MTMyMDEwMEQwMTQyRDQwMDQKKzoxMDE0QTAwMDQ5QjEwMTAwMDAwMDAwRDBCQUIzMDEwMDAwMDAwMERFMjUKKzoxMDE0QjAwMEExQjEwMTAwMDAwMDAwRjgwMEIwMDEwMDk3MDIyMjQ0MzEKKzoxMDE0QzAwMEE1NTMwMDAwOTQwMjAwNDFBMUMxMDAwMDU1MDEwMEREQjgKKzoxMDE0RDAwMEExQjEwMDAwRTgwMjAwREVBMTMzMDEwMEY4MDIwMDQwRTMKKzoxMDE0RTAwMDgxMzIwMTAwNTUwMTAwNDA4MUIyMDAwMDAwMDAwMDQ1M0EKKzoxMDE0RjAwMEJGQjMwMTAwNTAwMUEyRDI3NzdEMDAwMDAwMDAwMEQyRUUKKzoxMDE1MDAwMDYxQjEwMTAwMDAwMDAwREU2M0IxMDEwMDlFMDJBODQwNEQKKzoxMDE1MTAwMDgxMzIwMDAwNTUwMTAwNDA4MUIyMDAwMEU4MDIwMDU0MTEKKzoxMDE1MjAwMEE1MzMwMTAwRjgwMjAwNDA4MTMyMDEwMEQwMTQyRDQwQTMKKzoxMDE1MzAwMDQ5QjEwMTAwMDAwMDAwRjhEMEIzMDEwMDAwMDAwMEY4M0MKKzoxMDE1NDAwMEQyQjMwMTAwMDAwMDAwRjhENEIzMDEwMDAwMDAwMEY4OUQKKzoxMDE1NTAwMEQ2QjMwMTAwMDAwMDAwRjgwOEIxMDEwMEFDMDIwMDQwNjEKKzoxMDE1NjAwMDgxOTgwMTAwNjAwMjAwNDY4MzMwMDEwMDU1MDEwMDQwNkYKKzoxMDE1NzAwMDgxQjIwMDAwMDAwMDAwQTA5RUIwMDEwMDAwMDAwMEU4NjEKKzoxMDE1ODAwMDQzQjEwMTAwMDAwMDAwRTk0NUIxMDEwMDAwMDAwMEVBOUMKKzoxMDE1OTAwMDQ5QjEwMTAwMDAwMDAwRUJBMUIxMDEwMDAwMDAwMDRGQzMKKzoxMDE1QTAwMDQwQjEwMTAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDE1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDE1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDE1RDAwMDgxQjIwMDAwRDAxNDJFNDA0OUIxMDEwMDA1MDAwMDQwNDYKKzoxMDE1RTAwMEEzOUIwMTAwMDAwMDAwNDBDMUIzMDEwMDA4MDAwMEREMjIKKzoxMDE1RjAwMDgxRjQwMTAwQkQwMjAwNDAxMEM5MDAwMEMzMDIwMDA1RDMKKzoxMDE2MDAwMDgxQjAwMDAwNTAwMTAwNDA4MUIyMDAwMENCMDIwMDA1MTMKKzoxMDE2MTAwMDgxQjAwMDAwNTAwMTAwNDA4MUIyMDAwMEQwMDIwMDQ0QkYKKzoxMDE2MjAwMEE1QjMwMDAwRDIwMjAwNDRBNUIzMDAwMDAyMDAwMDQwQjAKKzoxMDE2MzAwMEE0RTcwMTAwMDAwMDAwRTA4MUIxMDEwMEZGRkYwMEMxNEMKKzoxMDE2NDAwMEYwODkwMTAwQzgwMjIyNDE4MTUwMDAwMEM0MDIwMDQxMUIKKzoxMDE2NTAwMEMxQzMwMDAwREEwMjAwNDA4MTMyMDEwMEY4MDIwMDQwRkMKKzoxMDE2NjAwMDgxMzIwMTAwNTUwMTAwNDA4MUIyMDAwMDAyMDAwMDQwQkIKKzoxMDE2NzAwMEE0RTcwMTAwMDAwMDAwRTA5MUIxMDEwMEZGRkYwMEM5RjQKKzoxMDE2ODAwMEYwODkwMTAwQzgwMjIyNDE4MTUwMDAwMENDMDIwMDQxRDMKKzoxMDE2OTAwMEMxQzMwMDAwRkZGRjAwREU4NTg5MDEwMEM4MDIwMEMyNEYKKzoxMDE2QTAwMEUwQjEwMDAwRkZGRjAwREU5NTg5MDEwMEM4MDIwMENBMUEKKzoxMDE2QjAwMEUwQjEwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDE2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDE2RDAwMDgxQjIwMDAwMDAwMDAwRTdBN0IzMDEwMDAwMDAwMEQ4QkQKKzoxMDE2RTAwMEE5QjMwMTAwMDAwMDAwNDA0OUIxMDEwMEFFMDMwMENCRTYKKzoxMDE2RjAwMEEzQzkwMTAwMDAwMDAwMjA0NkIxMDEwMDAwMDAwMEQyOTMKKzoxMDE3MDAwMEYxQjEwMTAwMDAwMDAwRDNGMUIxMDEwMDAwMDAwMEQ0RUMKKzoxMDE3MTAwMEYxQjEwMTAwMDAwMDAwRDBFMUIxMDEwMDAwMDAwMEQxRjIKKzoxMDE3MjAwMDYxQjEwMTAwMjAwMDAwMjA2MkREMDEwMEUyMDJBODQwNUEKKzoxMDE3MzAwMDgxMzIwMDAwMDAwMDgwQ0M4NTkzMDEwMDA0MDAwMDQwNEQKKzoxMDE3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDE3NTAwMDgxQjIwMDAwMDAwMDAwRTdBN0IzMDEwMDAwMDAwMEQ4M0MKKzoxMDE3NjAwMEE5QjMwMTAwMDAwMDAwNDA0OUIxMDEwMEFFMDMwMENCNjUKKzoxMDE3NzAwMEEzQzkwMTAwMDAwMDAwMjA0NkIxMDEwMDAwMDAwMEQyMTIKKzoxMDE3ODAwMEYxQjEwMTAwMDAwMDAwRDBGMUIxMDEwMDAwMDAwMEQzNzAKKzoxMDE3OTAwMEYxQjEwMTAwRTEwMjAwRDRFMUIxMDAwMDA0MDAwMDQwMTkKKzoxMDE3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDE3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDE3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDE3RDAwMDgxQjIwMDAwMDAwMEEyQ0M4NUZGMDAwMDAwMDAwMDUwOTQKKzoxMDE3RTAwMDgxQjAwMTAwRkEwMkEyNDE4MTUwMDAwMEY5MDJBMkYyODgKKzoxMDE3RjAwMDgwMzAwMDAwMDAwMDgwQ0M4NTgzMDEwMDA0MDAwMDQwQTAKKzoxMDE4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDE4MTAwMDgxQjIwMDAwQjUwMzAwNDBBMTk5MDEwMDAwMDAyRjQxRjIKKzoxMDE4MjAwMDk5QjMwMTAwMEEwMzIyNDQ4MTZDMDAwMDEyMDMyMjQ4OEMKKzoxMDE4MzAwMDgxNkMwMDAwMEMwMzIyNEM4MTZDMDAwMDE2MDMyMjUwQzYKKzoxMDE4NDAwMDgxNkMwMDAwMTcwMzIyNTQ4MTZDMDAwMDE5MDMyMjU4OTgKKzoxMDE4NTAwMDgxNkMwMDAwMUUwMzIyNUM4MTZDMDAwMDUwMDEwMDQwN0UKKzoxMDE4NjAwMDgxQjIwMDAwMDAwMDAwQkMwOUIwMDEwMEREOUYwMENBODkKKzoxMDE4NzAwMDAxQjAwMDAwMDAwMDAwNDAwM0IwMDEwMDAwMDAwMDQxODIKKzoxMDE4ODAwMEYzODMwMTAwMTAwM0EyNDIwNTZDMDAwMDAwMDAwMDQxMzgKKzoxMDE4OTAwMDA1QjAwMTAwREQ5RjIyQ0EwNzE0MDAwMEREOUYwMDQ1NEUKKzoxMDE4QTAwMEYzOTMwMDAwREQ5RjIwNDM5NTZGMDAwMEREOUY4MENBMDkKKzoxMDE4QjAwMDA1MzAwMDAwREQ5RjIyMDE4MDMwMDAwMEREOUYwMENCNUQKKzoxMDE4QzAwMERCOTEwMDAwNTcwMTAwQkNBQkIzMDAwMDAwMDAwMEJDN0UKKzoxMDE4RDAwMEIxQjMwMTAwREQ5RjAwQ0FDRkIzMDAwMEZGMDAwMENBMTIKKzoxMDE4RTAwMDgxODgwMTAwREQ5RkEyNDA3NDdEMDAwMDYwMDAyMDQwREYKKzoxMDE4RjAwMDYwOTkwMTAwMUIwM0E4QjE4MjMwMDAwMDFBMDMwMDQwNjgKKzoxMDE5MDAwMDgxQjIwMDAwREQ5RjAwQ0E3OUIzMDAwMDA0MDAwMDQwRUUKKzoxMDE5MTAwMDgxQjIwMDAwMDAwMDAwNEU4MUIwMDEwMDAwMDAwMDQzRDEKKzoxMDE5MjAwMENCODMwMTAwMDAwMDQ1NDA4MUIyMDEwMDIyMDNBMjQxQTcKKzoxMDE5MzAwMDgxNTAwMDAwMDAwMDQ1NDA4MUIyMDEwMDAwMDA0NTQwOTgKKzoxMDE5NDAwMDgxQjIwMTAwMkQwMzkxODI4MjMwMDAwMDAwMDAwMDhBRTQKKzoxMDE5NTAwMDgwQjAwMTAwQUU5RjAwNDA4MENFMDEwMDJCMDNBNjQwNjYKKzoxMDE5NjAwMDgxMzIwMDAwMkQwMzU2NDA4MUIyMDAwMEI1MDMwMDQwRDMKKzoxMDE5NzAwMEExOTkwMTAwMDAwMDAwNTMwNzkwMDEwMEI1MDMwMDQwNDkKKzoxMDE5ODAwMEExOTkwMTAwMDAwMDAwNTIwNzkwMDEwMEQ4OUYwMDQxN0EKKzoxMDE5OTAwMDhCQjMwMDAwMDAwMDAwNEU4MUIwMDEwMDAwMDAwMDQyNDcKKzoxMDE5QTAwMENEODMwMTAwMDAwMDQ2NDA4MUIyMDEwMDMyMDNBMjQxMTQKKzoxMDE5QjAwMDgxNTAwMDAwMDAwMDQ2NDA4MUIyMDEwMDAwMDA0NjQwMTYKKzoxMDE5QzAwMDgxQjIwMTAwM0QwMzkxODE4MjMwMDAwMDAwMDAwMDg5NTYKKzoxMDE5RDAwMDgwQjAwMTAwQUU5RjAwNDA4MENFMDEwMDNCMDNBNjQwRDYKKzoxMDE5RTAwMDgxMzIwMDAwM0QwMzU1NDA4MUIyMDAwMEI1MDMwMDQwNDQKKzoxMDE5RjAwMEExOTkwMTAwMDAwMDAwNTIwNzkwMDEwMEI1MDMwMDQwQ0EKKzoxMDFBMDAwMEExOTkwMTAwMDAwMDAwNTMwNzkwMDEwMEQ4OUYwMDQxRjgKKzoxMDFBMTAwMDhCQjMwMDAwQjAwMzAwNDBBMTk5MDEwMEM0MTQyRjQwMTMKKzoxMDFBMjAwMDk5QjMwMTAwNTcwMTAwNDA0OUIxMDAwMDA0MDAwMDQwOTMKKzoxMDFBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDFBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDFBNTAwMDgxQjIwMDAwMzA5NDAwNDA0Mzk5MDEwMDAwOTAwMEY4RUEKKzoxMDFBNjAwMDgwOTgwMTAwMTAwMDAwRjI4OEU0MDEwMDIwMDAwMDQwOEUKKzoxMDFBNzAwMDIwOTkwMTAwMDAwMDAwNUYyMzkxMDEwMDREMDMxRjkxOTgKKzoxMDFBODAwMDgwMzIwMDAwMzAwMDAwNDAyMDk5MDEwMDAwMDAwMDVGMUIKKzoxMDFBOTAwMDIzOTEwMTAwNTAwMzFGOTE4MDMyMDAwMDQwMDAwMDQwNUMKKzoxMDFBQTAwMDIwOTkwMTAwMDAwMDAwNUYyMzkxMDEwMDUzMDMxRjkxNjIKKzoxMDFBQjAwMDgwMzIwMDAwMDAwMDAwNUYyMzkxMDEwMDU1MDMxRjkxNTgKKzoxMDFBQzAwMDgwMzIwMDAwMDAwODgwNDAyMDk5MDEwMDA0MDAwMDQwOUUKKzoxMDFBRDAwMDgxQjIwMDAwMDAwMDAwNDc4NEIwMDEwMDAwMDBBMjQ4NkQKKzoxMDFBRTAwMDg0ODQwMDAwMDAwMDAwNUY2MUIxMDEwMDAwMDAwMDVDMjAKKzoxMDFBRjAwMDhGOTAwMTAwMDAwMDAwNDc2MkIxMDEwMDVBMDNBODQwMjYKKzoxMDFCMDAwMDgxMzIwMDAwMDAwODAwNDc4RUM4MDEwMDU4MDMwMDVDQzUKKzoxMDFCMTAwMDhGODAwMDAwRTAwMDAwNDA2MTk5MDEwMDU4MTUyRDQwQzEKKzoxMDFCMjAwMDhEQjAwMTAwRDAxNDJERjA4OEIwMDEwMDAwMDAwMEZBNDMKKzoxMDFCMzAwMDhBQjAwMTAwMDAwMDAwNDU4MUIwMDEwMDA3MDAwMDQ1QTcKKzoxMDFCNDAwMDgyODgwMTAwMDAwMDAwNDM4QkYwMDEwMDAwMDAwMDQ4ODMKKzoxMDFCNTAwMDgzRTAwMTAwMDAwMDAwNDY4Mjk0MDEwMDIwMDAwMDQxNjMKKzoxMDFCNjAwMDYwOTkwMTAwMDAwMDAwNDE4REMwMDEwMDc0MDMyMjVGRjQKKzoxMDFCNzAwMDhENkMwMDAwNjUwM0EyNDE4MTUwMDAwMDYzMDMwMDQwQUEKKzoxMDFCODAwMDgxQjIwMDAwMDgwMDAwNDA4NTk4MDEwMDAwMDAwMDQ0NzgKKzoxMDFCOTAwMDgyQjAwMTAwMDAwMDAwNDE4NkIwMDEwMDAwMUMwMDQzM0IKKzoxMDFCQTAwMDg2RDgwMTAwMDAwMEE2NDE4NTUwMDEwMDcwMDMwMDQxNjUKKzoxMDFCQjAwMDgzRTAwMDAwNkUwMzAwNDA4MTMyMDEwMDAwMDAwMDQ4MTUKKzoxMDFCQzAwMDg1RTAwMTAwRDAxNDJGNDY4NDk0MDEwMDIwMDAwMDQyREIKKzoxMDFCRDAwMDYwOTkwMTAwQzAwMDAwNDA2MTk5MDEwMDAwMDA4MDQwNTAKKzoxMDFCRTAwMDgxQjIwMTAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDFCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDFDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDFDMTAwMDgxQjIwMDAwMDcwMDAwNDU4MDg4MDEwMDAwMDAwMDQzRjkKKzoxMDFDMjAwMDhCRjAwMTAwMDAwNDAwNDA4Mzk4MDEwMDg1MDNBMDQxNkYKKzoxMDFDMzAwMDgxNTAwMDAwODMwMzAwNDE4MkU4MDAwMDAwMDA4MDQxRTEKKzoxMDFDNDAwMDhFQzAwMTAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDFDNTAwMDgxQjIwMDAwMDAwMDAwNDA0OUIxMDEwMDAwMDIwMDQwRDQKKzoxMDFDNjAwMDgzOTgwMTAwMDAzOTAwNDA0NTk5MDEwMDAwMDAwMDQwQzAKKzoxMDFDNzAwMEYxQjEwMTAwOEIwM0EyNDE4MzUwMDAwMDAwMDAwMDQwM0QKKzoxMDFDODAwMDg1QjAwMTAwMEIwMDAwNDQ4MkY0MDEwMDFBMTUwMEE2ODMKKzoxMDFDOTAwMDg2QjAwMTAwNzAxNTAwNDA0NTk5MDEwMDAwMDgwMDQwMjEKKzoxMDFDQTAwMEYxOTkwMTAwMDAwMDAwNDJGMEIxMDEwMDAwMzkwMDQwNEMKKzoxMDFDQjAwMEUxOTkwMTAwMDQwMDAwNDA2MTk5MDEwMDcwMTUwMDQzQTIKKzoxMDFDQzAwMDYyOTkwMTAwOTUwM0E4NDA4MTMyMDAwMDk3MDMyMjVBQ0YKKzoxMDFDRDAwMDczN0QwMDAwN0EwMDAwNDA2MTk5MDEwMDk4MDNBOEIxNkIKKzoxMDFDRTAwMDdFMzEwMDAwMDAwODAwNDI4NEM4MDEwMDkwMDNBMjQxMzgKKzoxMDFDRjAwMDgzNTAwMDAwMDAwMDgwNDA4MUIyMDEwMDA0MDAwMDQwRDkKKzoxMDFEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTUKKzoxMDFEMTAwMDgxQjIwMDAwNTgxNTJENDA4REIwMDEwMEQwMTQyREYwNzcKKzoxMDFEMjAwMDg4QjAwMTAwMDAwMDAwNDA4RkIwMDEwMDAxMDAwMEE2NTMKKzoxMDFEMzAwMDkwQjAwMTAwMDBGODAwNDg5MDk4MDEwMDAwMDAwMDQ1QjQKKzoxMDFENDAwMDkzQjAwMTAwMDAwMDAwRkE4QUIwMDEwMDgwMDMwMDQwNTcKKzoxMDFENTAwMDgxMzIwMTAwMDIwMDAwQTY4MEIwMDEwMEFDMDMyMjQwRTUKKzoxMDFENjAwMDgyNkMwMDAwQjAwMzAwNDA4MTMyMDEwMDU4MDMwMDQwNDMKKzoxMDFENzAwMDgxMzIwMTAwMDAwMDAwNDE4REMwMDEwMEI1MDMyMjVGRTcKKzoxMDFEODAwMDhENkMwMDAwQTcwM0EyNDE5MzUwMDAwMEE1MDMwMDQwMDIKKzoxMDFEOTAwMDgxQjIwMDAwRkYwNzAwNDc4NDg4MDEwMDAwMDBBNjQwRDAKKzoxMDFEQTAwMDgxQjIwMDAwRUQ5RjAwNDc4MDMwMDEwMDAwMDIwMDQ3MzMKKzoxMDFEQjAwMDhFQzgwMTAwQjAwMzAwNDA4MUIyMDAwMDAwMDAwMDQ0NjIKKzoxMDFEQzAwMDUwQjMwMTAwQkIwMzIwMTg4OTZDMDAwMDA0MDAwMEE2N0EKKzoxMDFERDAwMDg0QjAwMTAwMjAwMDAwQTY4NkIwMDEwMDAwMTAwMDQwODEKKzoxMDFERTAwMDU1OUIwMTAwQkUwMzAwNDA4MUIyMDAwMDA0MDAwMEE2MjQKKzoxMDFERjAwMDg0QjAwMTAwMjAwMDAwQTY4NkIwMDEwMDAwMTAwMDQwNjEKKzoxMDFFMDAwMDU1OUIwMTAwMDAwMDAwNDI1MEQzMDEwMDAwMDAwMEE4RDMKKzoxMDFFMTAwMDRGQjMwMTAwMDAwMDAwNDM0RUQzMDEwMDZFMDMwMDQwQTkKKzoxMDFFMjAwMDgxMzIwMTAwODIwMzAwNDI4MDMwMDEwMEIwMDMwMDQwOTMKKzoxMDFFMzAwMDgxMzIwMTAwQzcwMzIyQTc4RjZDMDAwMDVBMDMwMDQwQzMKKzoxMDFFNDAwMDgxMzIwMTAwQzQwMzAwNDA4MUIyMDAwMDAwMDA4MDQwRTQKKzoxMDFFNTAwMDgxQjIwMTAwQzgxNDJFQkI4NUIwMDEwMDAwMDAwMEVFNjUKKzoxMDFFNjAwMDgyQjAwMTAwMDAwMDAwNDFFMEIxMDEwMDAwMDAwMEEyQ0EKKzoxMDFFNzAwMEEwQjMwMTAwMDAwMDAwNDRBNUIzMDEwMEUxOUYwMENBMjcKKzoxMDFFODAwMEE3MzMwMTAwRTA5RjAwNDA4MUIyMDAwMDA0MDAwMDQwNDEKKzoxMDFFOTAwMDgxQjIwMDAwRDYwMzIyNDI3NTZGMDAwMEQ4MDMyMjQxQjAKKzoxMDFFQTAwMDc1NkYwMDAwREEwMzFFQ0E4MTMyMDAwMERDMDMxRkNBMEUKKzoxMDFFQjAwMDgxMzIwMDAwMDAwMDAwQ0FDOUIxMDEwMEREOUYwMDQyNkMKKzoxMDFFQzAwMDc1QjMwMDAwMDAwMDAwQ0FDREIxMDEwMEREOUYwMDQxRTQKKzoxMDFFRDAwMDc1QjMwMDAwMDAwMDAwQ0FDRkIxMDEwMEREOUYwMDQwRDMKKzoxMDFFRTAwMDc1QjMwMDAwMDA4MTAwQTZDNkIxMDEwMEREOUYwMDQwNkYKKzoxMDFFRjAwMDgxQjIwMDAwMDA4MDAwQTZDNkIxMDEwMEREOUYwMDQwNTUKKzoxMDFGMDAwMDc1QjMwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDFGMTAwMDgxQjIwMDAwNDUwMTAwNEQ5MzMwMDEwMDQ1MDEwMDRFQTMKKzoxMDFGMjAwMDkzMzAwMTAwNDUwMTAwNEM5MzMwMDEwMEVDOUYwMDQwQ0MKKzoxMDFGMzAwMDgxMzIwMTAwREQ5RjAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDFGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDFGNTAwMDgxQjIwMDAwNTQ5NTAwNDA0NTk5MDEwMEREOUYwMENBMDAKKzoxMDFGNjAwMEU1QjEwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDFGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDFGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDFGOTAwMDgxQjIwMDAwQ0MxNDJFNDA4N0IwMDEwMDAwMDAwMEEyRTYKKzoxMDFGQTAwMEEwQjMwMTAwMTUwNDAwNDNCMjMzMDEwMDAwMDA2OERBNTkKKzoxMDFGQjAwMDg5QjAwMTAwN0MwMDAwNDA4Qjk4MDEwMDAwMDAwMDUwQjcKKzoxMDFGQzAwMDg5RjAwMTAwMDAwMDAwNDE4OUQwMDEwMDAzMDAwMDQ0QjUKKzoxMDFGRDAwMDg4OEMwMTAwMDAwMDAwNDQ4N0MwMDEwMDAwMDAwMDQxMUYKKzoxMDFGRTAwMEE1QjMwMTAwMTUwNDAwNDNCMjMzMDEwMDAwMDAwMERBN0MKKzoxMDFGRjAwMEYxQjEwMTAwMDAwMDAwNDQ4N0MwMDEwMDAwMDAwMDQxNzEKKzoxMDIwMDAwMEE1QzMwMTAwMEIwNDIyNDQ4OTUwMDAwMDBCMDQyMjQ0QTQKKzoxMDIwMTAwMDhCNTAwMDAwRkEwM0EyNTBBNTZGMDAwMDAwMDAwMDQyQTAKKzoxMDIwMjAwMEE1RTMwMTAwMDAwMDAwQ0FBN0IzMDEwMEUxOUYwMEJCQzcKKzoxMDIwMzAwMDg1MzAwMTAwQ0MxNDJFRDI5NUMzMDEwMEFFMDMwMENCMzUKKzoxMDIwNDAwMEEzQzkwMTAwMDAwMDAwMjA0MkIxMDEwMDAwMDAwMDUwQkYKKzoxMDIwNTAwMDgxQjAwMTAwMDgwNEEyNDE4MTUwMDAwMDA3MDRBMkYyRUYKKzoxMDIwNjAwMDgwMzAwMDAwRkEwMzAwNDBBNUIzMDAwMDAwMDAwMDQyRTkKKzoxMDIwNzAwMEE1RTMwMTAwMDAwMDAwQ0FBN0IzMDEwMEUxOUYwMEJCNzcKKzoxMDIwODAwMDg1MzAwMTAwRTA5RjAwNDA4MUIyMDAwMDA0MDAwMDQwNjQKKzoxMDIwOTAwMDgxQjIwMDAwMDAwMDAwRDkyQkIxMDEwMDAwMTAwMDQwMDcKKzoxMDIwQTAwMDgzOTgwMTAwREIwMDAwNDA4MTMyMDEwMEZGRkYwMDk0QjMKKzoxMDIwQjAwMEI0OEIwMTAwMDAwMDgwNDA4MUIyMDEwMDAwMDAwMEQ5MTMKKzoxMDIwQzAwMDJCQjEwMTAwMDAxMDAwNDA4Mzk4MDEwMEREMDAwMDQwQUEKKzoxMDIwRDAwMDgxMzIwMTAwMDAwMDgwOTRCNEIzMDEwMDA0MDAwMDQwOEMKKzoxMDIwRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDIKKzoxMDIwRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjIKKzoxMDIxMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTEKKzoxMDIxMTAwMDgxQjIwMDAwMDAwMDAwRDkyQkIxMDEwMDAwMDAwMERBRkMKKzoxMDIxMjAwMDI3QjEwMTAwMDZDMDAwNDAyRDk5MDEwMERFMDAwMDQwRUIKKzoxMDIxMzAwMDgxMzIwMTAwMDAxMDAwNDA4Mzk4MDEwMDAyQzQwMDQxNzgKKzoxMDIxNDAwMDJDOTkwMTAwREUwMDAwNDA4MTMyMDEwMDAwNDAwMDQwNzcKKzoxMDIxNTAwMDgzOTgwMTAwMDU4MjAwNDEyQzk5MDEwMERFMDAwMDQwQjcKKzoxMDIxNjAwMDgxMzIwMTAwMkQwNDgwOTQ4MDMyMDAwMDBDMDEwMDQwNzcKKzoxMDIxNzAwMDgxMzIwMTAwMjgwNDAwNDA4MUIyMDAwMDA0ODAwMDQwNDgKKzoxMDIxODAwMDJEOTkwMTAwREUwMDAwNDA4MTMyMDEwMDAwMDA4MDQwRjYKKzoxMDIxOTAwMDgxQjIwMTAwMzEwNDAwMTIxMEM5MDAwMDAwNDg4MDQwRTMKKzoxMDIxQTAwMDBCOTgwMTAwQzA0OTgwNDAwQjk4MDEwMDgwNEI4MDQwOTMKKzoxMDIxQjAwMDBCOTgwMTAwNDA0RDgwNDAwQjk4MDEwMDAwNEY4MDQwN0IKKzoxMDIxQzAwMDBCOTgwMTAwQzA1MDgwNDAwQjk4MDEwMDgwNTI4MDQwNjUKKzoxMDIxRDAwMDBCOTgwMTAwNDA1NDgwNDAwQjk4MDEwMDAwNTY4MDQwNEQKKzoxMDIxRTAwMDBCOTgwMTAwQzA1NzgwNDAwQjk4MDEwMDgwNTk4MDQwMzcKKzoxMDIxRjAwMDBCOTgwMTAwNDA1QjgwNDAwQjk4MDEwMDAwNUQ4MDQwMUYKKzoxMDIyMDAwMDBCOTgwMTAwQzA1RTgwNDAwQjk4MDEwMDgwNjA4MDQwMDgKKzoxMDIyMTAwMDBCOTgwMTAwNDA2MjgwNDAwQjk4MDEwMDAwNjQ4MDQwRjAKKzoxMDIyMjAwMDBCOTgwMTAwQzA2NTgwNDAwQjk4MDEwMDgwNjc4MDQwREEKKzoxMDIyMzAwMDBCOTgwMTAwNDA2OTgwNDAwQjk4MDEwMDAwNkI4MDQwQzIKKzoxMDIyNDAwMDBCOTgwMTAwQzA2QzgwNDAwQjk4MDEwMDgwNkU4MDQwQUMKKzoxMDIyNTAwMDBCOTgwMTAwNDA3MDgwNDAwQjk4MDEwMDAwNzI4MDQwOTQKKzoxMDIyNjAwMDBCOTgwMTAwQzA3MzgwNDAwQjk4MDEwMDgwNzU4MDQwN0UKKzoxMDIyNzAwMDBCOTgwMTAwNDA3NzgwNDAwQjk4MDEwMDAwNzk4MDQwNjYKKzoxMDIyODAwMDBCOTgwMTAwQzA3QTgwNDAwQjk4MDEwMDgwN0M4MDQwNTAKKzoxMDIyOTAwMDBCOTgwMTAwNDA3RTgwNDAwQjk4MDEwMDA0MDAwMDQwMzQKKzoxMDIyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDAKKzoxMDIyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzAKKzoxMDIyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDIyRDAwMDgxQjIwMDAwNTkwNDAwMTIxMEM5MDAwMDAwODA4MDQwNDMKKzoxMDIyRTAwMDBCOTgwMTAwMDA4MjgwNDAwQjk4MDEwMDAwODQ4MDQwMjAKKzoxMDIyRjAwMDBCOTgwMTAwMDA4NjgwNDAwQjk4MDEwMDAwODg4MDQwMDgKKzoxMDIzMDAwMDBCOTgwMTAwMDA4QTgwNDAwQjk4MDEwMDAwOEM4MDQwRUYKKzoxMDIzMTAwMDBCOTgwMTAwMDA4RTgwNDAwQjk4MDEwMDAwOTA4MDQwRDcKKzoxMDIzMjAwMDBCOTgwMTAwMDA5MjgwNDAwQjk4MDEwMDAwOTQ4MDQwQkYKKzoxMDIzMzAwMDBCOTgwMTAwMDA5NjgwNDAwQjk4MDEwMDAwOTg4MDQwQTcKKzoxMDIzNDAwMDBCOTgwMTAwMDA5QTgwNDAwQjk4MDEwMDAwOUM4MDQwOEYKKzoxMDIzNTAwMDBCOTgwMTAwMDA5RTgwNDAwQjk4MDEwMDAwQTA4MDQwNzcKKzoxMDIzNjAwMDBCOTgwMTAwMDBBMjgwNDAwQjk4MDEwMDAwQTQ4MDQwNUYKKzoxMDIzNzAwMDBCOTgwMTAwMDBBNjgwNDAwQjk4MDEwMDAwQTg4MDQwNDcKKzoxMDIzODAwMDBCOTgwMTAwMDBBQTgwNDAwQjk4MDEwMDAwQUM4MDQwMkYKKzoxMDIzOTAwMDBCOTgwMTAwMDBBRTgwNDAwQjk4MDEwMDAwQjA4MDQwMTcKKzoxMDIzQTAwMDBCOTgwMTAwMDBCMjgwNDAwQjk4MDEwMDAwQjQ4MDQwRkYKKzoxMDIzQjAwMDBCOTgwMTAwMDBCNjgwNDAwQjk4MDEwMDAwQjg4MDQwRTcKKzoxMDIzQzAwMDBCOTgwMTAwMDBCQTgwNDAwQjk4MDEwMDAwQkM4MDQwQ0YKKzoxMDIzRDAwMDBCOTgwMTAwMDBCRTgwNDAwQjk4MDEwMDA0MDAwMDQwRjMKKzoxMDIzRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDIzRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDI0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDI0MTAwMDgxQjIwMDAwMDAwMDAwNDA4N0IxMDEwMDAwMDAwMDQwRDAKKzoxMDI0MjAwMDk3QjAwMTAwMDAwMDAwNEI4MEIxMDEwMDAxMDAwMEE2NDAKKzoxMDI0MzAwMDgyQjEwMTAwODIwNDg1NDE5NzQwMDAwMDAwMDAwMDQwMDUKKzoxMDI0NDAwMDk3QjEwMTAwMDAwMDAwNDA5N0IwMDEwMDAwMDAwMDRCNzAKKzoxMDI0NTAwMDkwQjEwMTAwMDEwMDAwQTY5MkIxMDEwMDg3MDQ4NTQxRkUKKzoxMDI0NjAwMDk3NDAwMDAwMDAwMDgwNDA4MUIyMDEwMDA0MDAwMDQwNUQKKzoxMDI0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDI0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDI0OTAwMDgxQjIwMDAwOTAwNDYwNDA4MTMyMDAwMDAwMDAwMDEyMTAKKzoxMDI0QTAwMDgwQjEwMTAwRkZGRkYwNEI4Mjg5MDEwMDkzMDQ2MDQwN0UKKzoxMDI0QjAwMDgxMzIwMDAwMDAwMDAwNEE4MEIxMDEwMDAxMDBGMEE2NTYKKzoxMDI0QzAwMDgyQjEwMTAwOTYwNDYwNDA4MTMyMDAwMEZGRkYwMDRCQTIKKzoxMDI0RDAwMDg0ODkwMTAwMDAwMEYwQzIyNEIwMDEwMDAwMDAwMDRBMUQKKzoxMDI0RTAwMDkwQjEwMTAwRkZGRjgwNEI5Mjg5MDEwMDAwMDAwMDRBN0IKKzoxMDI0RjAwMDkwQjEwMTAwMDEwMDgwQTY5MkIxMDEwMEZGRkYwMDRCRTYKKzoxMDI1MDAwMDk0ODkwMTAwMDAwMDgwQ0E5NEIwMDEwMDA0MDAwMDQwREEKKzoxMDI1MTAwMDgxQjIwMDAwMTAwMDAwNEU5OEU0MDEwMDAwMDAwMDA3QTYKKzoxMDI1MjAwMDk4OTQwMTAwMDAwMDAwNDM5OUUwMDEwMDAwMDAwMDgwNDEKKzoxMDI1MzAwMDk4OTQwMTAwMDAwMDAwNDk5OUUwMDEwMDAwMDAwMDRDNUYKKzoxMDI1NDAwMDg4OTQwMTAwQTYwNDQ3NDA4MTMyMDAwMEFEMDQyMjIwOTcKKzoxMDI1NTAwMDg3NkYwMDAwMDAwMDFGNDA4MUIyMDEwMDAwMDAwMDQwQjIKKzoxMDI1NjAwMDgxQjIwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMDQwODMKKzoxMDI1NzAwMDgxQjIwMTAwQTYwNDAwNDA4MUIyMDAwMDAwMDAxRjgwNkIKKzoxMDI1ODAwMDg2QjMwMTAwQjAwNDIyNEY3NzdEMDAwMEMwMDQwMDQwRjQKKzoxMDI1OTAwMDgxMzIwMTAwMDAwMDAwNEY2MUIxMDEwMDAwMDAwMDQ0RTEKKzoxMDI1QTAwMDYyQjEwMTAwQjEwNEE4NDA4MTMyMDAwMEI4MDQyMjRCOUUKKzoxMDI1QjAwMDg5N0MwMDAwQjYwNDIyNEY3NzdEMDAwMEMwMDQwMDQwRjMKKzoxMDI1QzAwMDgxMzIwMTAwMDAwMDAwNDU2MkIxMDEwMEI2MDRBODQwNUMKKzoxMDI1RDAwMDgxMzIwMDAwMDAwMDgwMjA4N0IzMDEwMDA0MDAwMDQwMjkKKzoxMDI1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDI1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDI2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDI2MTAwMDgxQjIwMDAwMDAwMDAwNTA5OUIwMDEwMDZGMDAwMDQwM0UKKzoxMDI2MjAwMDYxOTkwMTAwQzEwNEE4QjE1MjMzMDAwMEM2MDQyMjRCRDUKKzoxMDI2MzAwMDUzN0YwMDAwNkYwMDAwNDA2MTk5MDEwMEM0MDRBOEIxRkQKKzoxMDI2NDAwMDdFMzEwMDAwQzEwNEEyNDE5OTUwMDAwMDAwMDBBMjRGNTkKKzoxMDI2NTAwMDc3RkQwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDI2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDI2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDI2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDI2OTAwMDgxQjIwMDAwMTAwMDAwNEU5OEU0MDEwMDAwMDAwMDA3MjUKKzoxMDI2QTAwMDk4OTQwMTAwMDAwMDAwNDM5OUUwMDEwMDAwMDAwMDgwQzAKKzoxMDI2QjAwMDk4OTQwMTAwMDAwMDAwNDg5OUUwMDEwMEQ2MDQwMDRDMDUKKzoxMDI2QzAwMDg4OTQwMDAwRDYwNDQ3NDA4MTMyMDAwMEREMDQyMjIwQjcKKzoxMDI2RDAwMDg3NkYwMDAwMDAwMDFGNDA4MUIyMDEwMDAwMDAwMDQwMzEKKzoxMDI2RTAwMDgxQjIwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMDQwMDIKKzoxMDI2RjAwMDgxQjIwMTAwRDYwNDAwNDA4MUIyMDAwMDAwMDAxRjgwQkEKKzoxMDI3MDAwMDg2QjMwMTAwRTAwNDIyNEY3NzdEMDAwMEYwMDQwMDQwMTIKKzoxMDI3MTAwMDgxMzIwMTAwMDAwMDAwNEY2MUIxMDEwMDAwMDAwMDQ0NUYKKzoxMDI3MjAwMDYyQjEwMTAwRTEwNEE4NDA4MTMyMDAwMEU4MDQyMjRBQkQKKzoxMDI3MzAwMDg5N0MwMDAwRTYwNDIyNEY3NzdEMDAwMEYwMDQwMDQwMTEKKzoxMDI3NDAwMDgxMzIwMTAwMDAwMDAwNDU2MkIxMDEwMEU2MDRBODQwQUEKKzoxMDI3NTAwMDgxMzIwMDAwMDAwMDgwMjA4N0IzMDEwMDA0MDAwMDQwQTcKKzoxMDI3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDI3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDI3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDI3OTAwMDgxQjIwMDAwMDAwMDAwNTA5OUIwMDEwMDZGMDAwMDQwQkQKKzoxMDI3QTAwMDYxOTkwMTAwRjEwNEE4QjE1MjMzMDAwMEY2MDQyMjRBRjUKKzoxMDI3QjAwMDUzN0YwMDAwNkYwMDAwNDA2MTk5MDEwMEY0MDRBOEIxNEMKKzoxMDI3QzAwMDdFMzEwMDAwRjEwNEEyNDE5OTUwMDAwMDAwMDBBMjRGQTgKKzoxMDI3RDAwMDc3RkQwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDI3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDI3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDI4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDI4MTAwMDgxQjIwMDAwN0IwMDAwNDA2MTk5MDEwMDAwMDVBOEIxNzEKKzoxMDI4MjAwMDgwMzAwMDAwMTIwNTFENDA4MDMyMDAwMDQwMTgwMDQwM0EKKzoxMDI4MzAwMDQ5OTkwMTAwMDQwMDAwQTY4NkIwMDEwMDEwMDVBMjQwREQKKzoxMDI4NDAwMDg2MDQwMDAwREU5RjlDNDA4MDMyMDAwMEZGRkYwMDQwQjUKKzoxMDI4NTAwMDg4ODgwMTAwMzAwNTAwNTA0NzMxMDEwMDM2MDAwMDQ0RUYKKzoxMDI4NjAwMDg4Q0MwMTAwMEMwNTUyNDA4MTMyMDAwMDMwMDUwMDQwNDgKKzoxMDI4NzAwMDQ3MzEwMTAwMDAwMDAwNDE4OUIwMDEwMDMwMDUwMDQ4RTcKKzoxMDI4ODAwMDQ3MzEwMTAwMzAwNTAwMDU0NzMxMDEwMERFOUYwMDQwNUYKKzoxMDI4OTAwMDgxQjIwMDAwMjgwMDAwNDA0Nzk5MUIwMERFOUYwMDQxRTQKKzoxMDI4QTAwMEUxQzExQTAwNzgxODAwNDA0OTk5MUIwMDE5MDUyMjU0MEIKKzoxMDI4QjAwMDgxN0MxQTAwMTQwNTQyNDA4MTMyMUEwMDAwODIwMEIzNjQKKzoxMDI4QzAwMDY3REYxQjAwMDAwMDFBNDQ5MzkzMUIwMDI4MDAwMDQwQTAKKzoxMDI4RDAwMDQ3OTkxQjAwMzAwNTAwNDE4OTMwMDEwMDI3MDUwRjQwNTIKKzoxMDI4RTAwMDgwMzIwMDAwRkY3RjAwNDA4ODg4MDEwMDMwMDUwMDUwRTIKKzoxMDI4RjAwMDQ3MzEwMTAwMzYwMDAwNDQ4OENDMDEwMDFGMDU5OTQwOTMKKzoxMDI5MDAwMDgwMzIwMDAwMDAwMDAwNDg4OUQwMDEwMDIxMDU5QjQwNzIKKzoxMDI5MTAwMDgwMzIwMDAwMDAwMDAwNEM4OUQwMDEwMDIzMDUxRjQ0RDQKKzoxMDI5MjAwMDgwMzIwMDAwMzAwNTAwNDA0NzMxMDEwMDAwMDAwMDQxQzYKKzoxMDI5MzAwMDg5QjAwMTAwMzAwNTAwNDg0NzMxMDEwMDMwMDUwMDU4REEKKzoxMDI5NDAwMDQ3MzEwMTAwREU5RjAwNDA4MUIyMDAwMDEwMDAwMDQwQ0UKKzoxMDI5NTAwMDg2RjQwMTAwNkYwMDAwNDM4Njg4MDEwMERFOUYyNjA1OTMKKzoxMDI5NjAwMDQ3MzEwMDAwMzAwNTAwNDE4OTMwMDEwMERFOUYwMDQwMDIKKzoxMDI5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDI5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDI5OTAwMDgxQjIwMDAwMDAwMEEwNDRGMDQxMDEwMDAwMDAwMDQwQUUKKzoxMDI5QTAwMDgxQjIwMTAwMDAwMDgwNDFFMUMxMDEwMDA0MDAwMDQwNEIKKzoxMDI5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDI5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDI5RDAwMDgxQjIwMDAwNEMwMTAwMDc5MTMwMDEwMDAwMDBBMjQwQ0MKKzoxMDI5RTAwMDk3RUMwMDAwMDAwMDgwMDU5MUMwMDEwMDA0MDAwMDQwNDkKKzoxMDI5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDJBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDJBMTAwMDgxQjIwMDAwNEMwMTAwNDA4MTMyMDEwMDQ0MDVBMjQwMTcKKzoxMDJBMjAwMDk3NkMwMDAwM0EwMDAwNDBCMzlCMDEwMDQ1MDUwMDQwNTAKKzoxMDJBMzAwMDgxQjIwMDAwNDAwMDAwNDBCMzlCMDEwMDEwMDQwMDQwNDAKKzoxMDJBNDAwMDgxMzIwMTAwMDAwMDAwREFGNUIxMDEwMDEwMDQwMDQyRkIKKzoxMDJBNTAwMEIzNDMwMTAwMDAwMDAwREFGNUIxMDEwMDEwMDQwMDQyQTgKKzoxMDJBNjAwMEIzNDMwMTAwMDAwMDAwREFGNUIxMDEwMDRFMDAwMDQwNjAKKzoxMDJBNzAwMEIzOUIwMTAwMTAwNDAwNDA4MTMyMDEwMDA4MDAwMERBMUQKKzoxMDJBODAwMEY3RjUwMTAwNTAwMDAwNDA5MTk4MDEwMDAwMDAwMDQ3NTgKKzoxMDJBOTAwMDhGQjAwMTAwMTAwNDAwNDhCMjMzMDEwMDAwMDAwMERBREEKKzoxMDJBQTAwMEY3QjEwMTAwMDgwMDAwREFGN0Y1MDEwMDAwMDAwMDQyNkMKKzoxMDJBQjAwMDkxQzAwMTAwNTAwNUEyNDE4RjUwMDAwMDAwMDAwMDQxNkMKKzoxMDJBQzAwMDQ1RDEwMTAwMDgwMDAwNDBCMzlCMDEwMDEwMDQwMDQwMDQKKzoxMDJBRDAwMDgxMzIwMTAwMDAwMDAwREFGREIxMDEwMDBBMDAwMDQwNkYKKzoxMDJBRTAwMEIzOUIwMTAwMTAwNDAwNDA4MTMyMDEwMDAwMDAwMERBQjUKKzoxMDJBRjAwMEZEQjEwMTAwMUEwMDAwNDBCMzlCMDEwMDEwMDQwMDQwMkEKKzoxMDJCMDAwMDgxMzIwMTAwMDAwMDAwREFGREIxMDEwMDE4MDAwMDQwMzAKKzoxMDJCMTAwMEIzOUIwMTAwMTAwNDAwNDA4MTMyMDEwMDAwMDAwMERBODQKKzoxMDJCMjAwMEZEQjEwMTAwMzgwNTAwNDA4MTMyMDEwMDFFMDAwMDQ4NUYKKzoxMDJCMzAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMDAwMDAwMERBMzUKKzoxMDJCNDAwMDkxQzAwMTAwMDAwMDAwNDhCMkNCMDEwMDEwMDQwMDQwMTkKKzoxMDJCNTAwMDgxMzIwMTAwMDAwMDZFREE4RkIwMDEwMDAyMDAwMDQ4RUYKKzoxMDJCNjAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMDAwMDAwMERBMDUKKzoxMDJCNzAwMEZEQjEwMTAwMDQwMDAwNDhCMkNCMDEwMDEwMDQwMDQwODgKKzoxMDJCODAwMDgxMzIwMTAwMDAwMDgwREFGREIxMDEwMDA0MDAwMDQwNDQKKzoxMDJCOTAwMDgxQjIwMDAwN0EwNTIyNDVGRDdGMDAwMDQwMTYwMDQwMEEKKzoxMDJCQTAwMDQ1OTkwMTAwREI5RjAwNDA0OTMxMDEwMDA4MDAwMDQ4QzEKKzoxMDJCQjAwMEIyQ0IwMTAwMTUwNDAwNDA4MTMyMDEwMDc4MDVBMjQwMkIKKzoxMDJCQzAwMDhGNkMwMDAwN0QwNTIyMjBCNTZGMDAwMDdBMDUwMDQwNjMKKzoxMDJCRDAwMDgxQjIwMDAwREE5RjAwNDA4MTMyMUYwMDdEMDUyMjQwNTMKKzoxMDJCRTAwMDk3NkMxRTAwN0EwNTQyNDA4MTMyMUUwMDAwMDAwMDRGQTMKKzoxMDJCRjAwMDY3OTMxRjAwREY5RjAwNTg2NzkzMUUwMDU0MTYwMDQwMjQKKzoxMDJDMDAwMDQ3OTkxRjAwMDAwMDAwRkVGNEIxMUYwMDAwMDAwMDQwQzMKKzoxMDJDMTAwMDgxQjIxRjAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwN0UKKzoxMDJDMjAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwOEMKKzoxMDJDMzAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwN0MKKzoxMDJDNDAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwNkMKKzoxMDJDNTAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDAwMDAwMDQwNUMKKzoxMDJDNjAwMDgxQjIwMTAwMDAwMDAwRkVGNEIxMDEwMDQ2MDAwMDQwMDYKKzoxMDJDNzAwMEIzOUIwMTAwMTAwNDAwNDA4MTMyMDEwMDA4MDAwMERBMUIKKzoxMDJDODAwMEY3RjUwMTAwNDgwMDAwNDA5NTk4MDEwMDAwMDAwMDQ0NUQKKzoxMDJDOTAwMDk3QjAwMTAwMTAwNDAwNEFCMjMzMDEwMDAwMDAwMERBQ0UKKzoxMDJDQTAwMEY3QjEwMTAwMDgwMDAwREFGN0Y1MDEwMDAwMDAwMDQyNkEKKzoxMDJDQjAwMDk1QzAwMTAwOTAwNUEyNDE5NzUwMDAwMDJBMDAwMDQwRjUKKzoxMDJDQzAwMEE1OUIwMTAwNDAxNjAwNDBBMTlCMDEwMDAwMDAwMENBMjYKKzoxMDJDRDAwMEE3QjMwMTAwRTE5RjAwQkI4NTMwMDEwMEUwOUYwMDQwRTkKKzoxMDJDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDJDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDJEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDUKKzoxMDJEMTAwMDgxQjIwMDAwQjgwNTIyNDVGRDdGMDAwMEUwMTUwMDQwQUIKKzoxMDJEMjAwMDQ3OTkwMTAwMUEwMDAwQTI4MERDMDEwMDAwMDAwMDUwNTkKKzoxMDJEMzAwMEYxQjEwMTAwRjAxNTAwNDBGMTk5MDEwMDAwMDAwMENBNTYKKzoxMDJENDAwMEYxQjEwMTAwMDcwMDAwNDA2MTk5MDEwMDIwMDAwMDQwM0UKKzoxMDJENTAwMDYyREQwMTAwQTcwNUE4QkJFMTMxMDAwMDAwMDAwMDUwQzIKKzoxMDJENjAwMDgzQjAwMTAwQUEwNUEyNDE4MzUwMDAwMEE5MDVBMkYyODgKKzoxMDJENzAwMDgyMzAwMDAwNEMwMTAwNDA4MTMyMDEwMEIwMDVBMjQwQzkKKzoxMDJEODAwMDk3NkMwMDAwM0EwMDAwNDBCMzlCMDEwMEIxMDUwMDQwODEKKzoxMDJEOTAwMDgxQjIwMDAwNDAwMDAwNDBCMzlCMDEwMEYwMTUwMDQwRUMKKzoxMDJEQTAwMDQzOTkwMTAwMTAwNDAwNDA4MTMyMDEwMEI4MDVBMkZBRTUKKzoxMDJEQjAwMEI0NkYwMDAwMTAwNDAwNDJCMzQzMDEwMEI4MDVBMkZBNEEKKzoxMDJEQzAwMEI0NkYwMDAwMTAwNDAwNDJCMzQzMDEwMEJCMDUyMkZBQjcKKzoxMDJERDAwMEI0NkYwMDAwQjgwNTQyNDA4MTMyMjAwMDAwMDAwMDRFNzAKKzoxMDJERTAwMDY3OTMyMTAwREY5RjAwNTg2NzkzMjAwMDQwMTYwMDQwNDIKKzoxMDJERjAwMDQ1OTkyMTAwREI5RjAwNDA0OTMxMjEwMEY2MTUwMDQwMzQKKzoxMDJFMDAwMDQzOTkyMTAwNUMxNjAwNDA0NTk5MjEwMDAwMDA2RUZBQUMKKzoxMDJFMTAwMDhFQjAyMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZFRTEKKzoxMDJFMjAwMEY0QjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZFOEEKKzoxMDJFMzAwMEY0QjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEYwODgKKzoxMDJFNDAwMEI0QjMwMTAwQzkwNUEyNDA4RjZDMDAwMEZDMTUyMDIwMUUKKzoxMDJFNTAwMEUxQjEwMTAwQ0UwNTAwNDA4MUIyMjQwMERBOUYwMDQwQkMKKzoxMDJFNjAwMDgxMzIyNTAwQ0UwNTIyNDA5NzZDMjQwMENCMDU0MjQwREMKKzoxMDJFNzAwMDgxMzIyNDAwMDAwMDAwNEY2NzkzMjUwMERGOUYwMDU4MzcKKzoxMDJFODAwMDY3OTMyNDAwMzgwNTAwNDA4MTMyMjUwMDFFMDAwMDQ4NjkKKzoxMDJFOTAwMEIyQ0IyNTAwMTAwNDAwNDA4MTMyMDEwMEQzMDUyMjUwM0UKKzoxMDJFQTAwMEI1NkYwMDAwMDAwMDAwNTA5MUMwMDEwMDAwMDAwMDQ4MTQKKzoxMDJFQjAwMEIyQ0IwMTAwRjYxNTAwNDA0Mzk5MDEwMDIwMDQwMEYyNTYKKzoxMDJFQzAwMEI0MzMwMTAwMDIwMDAwNDhCMkNCMDEwMEY4MTUwMDQwMDUKKzoxMDJFRDAwMDQzOTkwMTAwMjAwNDAwRjJCNDMzMDEwMDA0MDAwMDQ4Q0IKKzoxMDJFRTAwMEIyQ0IwMTAwRkExNTAwNDA0Mzk5MDEwMDIwMDQwMEYyMjIKKzoxMDJFRjAwMEI0MzMwMTAwMDgwMDAwNDhCMkNCMDEwMEZDMTUwMDQwQ0IKKzoxMDJGMDAwMDQzOTkwMTAwMDAwMDAwRjA5NEIwMDEwMEZGRkYwMDRBNjcKKzoxMDJGMTAwMEI0OEIwMTAwMjAwNDAwNDA4MTMyMDEwMDBBMDAwMDQ4MDcKKzoxMDJGMjAwMEIyQ0IwMTAwMTAwMDAwNEFCNEY3MDEwMDIwMDQwMDQwQjkKKzoxMDJGMzAwMDgxMzIwMTAwMzgwNTAwNDA4MTMyMDEwMDFFMDAwMDQ4NDYKKzoxMDJGNDAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMEU5MDUyMjUwOUIKKzoxMDJGNTAwMEI1NkYwMDAwRUEwNTAwNTBCNUIzMDAwMDAwMDAwMDQwNjYKKzoxMDJGNjAwMEI1QjMwMTAwMjAwNDAwNDA4MTMyMDEwMEUwOUYwMDQwMjEKKzoxMDJGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDJGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDJGOTAwMDgxQjIwMDAwMDAxNjAwNDA0Nzk5MDEwMDMwMzEwMDQwMjYKKzoxMDJGQTAwMEY1OTkwMTAwMzIzMzAwNDBGNTk5MDEwMDM0MzUwMDQwQjUKKzoxMDJGQjAwMEY1OTkwMTAwMzYzNzAwNDBGNTk5MDEwMDM4MzkwMDQwOTUKKzoxMDJGQzAwMEY1OTkwMTAwNDE0MjAwNDBGNTk5MDEwMDQzNDQwMDQwNTkKKzoxMDJGRDAwMEY1OTkwMTAwNDU0NjAwNDBGNTk5MDEwMDQ3NDgwMDQwMzkKKzoxMDJGRTAwMEY1OTkwMTAwNDk0QTAwNDBGNTk5MDEwMDJDMDAwMDQwODQKKzoxMDJGRjAwMDgzOTgwMTAwMDAwMDAwNDBGN0IxMDEwMEZDMDVBMjQxRTgKKzoxMDMwMDAwMDgzNTAwMDAwODAxNjJFMDY4M0IwMDEwMDM2MDAwMEZCQkUKKzoxMDMwMTAwMEY2QTkwMTAwRkYwNUEyNDE4MzUwMDAwMDIyMDAwMDQwRjQKKzoxMDMwMjAwMDgzOTgwMTAwMDAwMDAwRkJGNkIxMDEwMDAyMDZBMjQxRjYKKzoxMDMwMzAwMDgzNTAwMDAwNjIwMDAwNDA5NTk4MDEwMERDOUYwMDQwMzIKKzoxMDMwNDAwMDgxMzIwMTAwMDAxNjJEMDY4M0IwMDEwMDgwMTYwMDQwNzkKKzoxMDMwNTAwMDQ1OTkwMTAwNUMwMDAwRkJGNkE5MDEwMDA4MDZBMjQxQTkKKzoxMDMwNjAwMDgzNTAwMDAwMDAwMDAwNzBGOUIxMDEwMDAwMDAwMDcxMDEKKzoxMDMwNzAwMEY5QjEwMTAwMDAwMDAwNzJGOUIxMDEwMDAwMDAwMDczMTUKKzoxMDMwODAwMEY5QjEwMTAwMDAwMDAwNzRGOUIxMDEwMDU0MDAwMDQwRTIKKzoxMDMwOTAwMDk1OTgwMTAwREM5RjAwNDA4MTMyMDEwMDAwMDAwMDcwMjMKKzoxMDMwQTAwMDk1QjAwMTAwMTQwNjIyNzBCNTZGMDAwMDAwMDA4MDQxNDkKKzoxMDMwQjAwMDk3QjAwMTAwMDAwMDgwNDA5N0IwMDEwMDA0MDAwMDQwN0MKKzoxMDMwQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTIKKzoxMDMwRDAwMDgxQjIwMDAwNDU2NzAwQTZFMEIyMDEwMDAxMjMwMDcwNDQKKzoxMDMwRTAwMEUxOUEwMTAwQ0RFRjAwQTZFMkIyMDEwMDg5QUIwMDcxQzgKKzoxMDMwRjAwMEUzOUEwMTAwQkE5ODAwQTZFNEIyMDEwMEZFREMwMDcyNzcKKzoxMDMxMDAwMEU1OUEwMTAwMzIxMDAwQTZFNkIyMDEwMDc2NTQwMDczODEKKzoxMDMxMTAwMEU3OUEwMTAwRDJDMzAwQTZFOEIyMDEwMEYwRTEwMDc0MTIKKzoxMDMxMjAwMEU5OUEwMTAwODAxNjAwNEE0NEM5MDEwMDAwMDAwMDA3MjYKKzoxMDMxMzAwMDgxQjAwMTAwMDAwMDAwNEE4MEQwMDEwMDAwMDAwMDQwODIKKzoxMDMxNDAwMEY3QjEwMTAwMjUwNkEyNDE4MTUwMDAwMDgwMTYwMDRBMTcKKzoxMDMxNTAwMDQ0QzkwMTAwRkMxNjJBNDdFN0I1MDEwMDAzMDAwMDRBRjQKKzoxMDMxNjAwMEU4RTUwMTAwMDAwMDAwNDA4REIwMDEwMDUwMDMwMDQwODAKKzoxMDMxNzAwMEEzOTkwMTAwODAxNjNENDY4REUwMDEwMDAwMDAwMDUwM0IKKzoxMDMxODAwMDg5QjAwMTAwMDAwMDAwRkM0MEIwMDEwMDAwMDAwMDQxRDcKKzoxMDMxOTAwMEEzQzEwMTAwMkUwNkEyNDE4OTUwMDAwMDAwMDAwMDcwNkEKKzoxMDMxQTAwMEVCQjIwMTAwMDAwMDAwNzFFREIyMDEwMDAwMDAwMDcyRkUKKzoxMDMxQjAwMEVGQjIwMTAwMDAwMDAwNzNGMUIyMDEwMDAwMDAwMDc0RTIKKzoxMDMxQzAwMEYzQjIwMTAwMDAwMDAwNDA4M0IwMDEwMDBGMDAwMDQxOTUKKzoxMDMxRDAwMDgwODgwMTAwNTAwMzAwNDBBMkM5MDEwMDRCMDZBMDUwQTYKKzoxMDMxRTAwMDgzNkMwMDAwMEQwMDAwNDA5OEM4MDEwMDAwMDAwMDRGRjMKKzoxMDMxRjAwMDk5ODQwMTAwNTAwMzAwNENBMkM5MDEwMDAwMDAwMDIwODYKKzoxMDMyMDAwMDg2QjAwMTAwMDgwMDAwNDA5OEM4MDEwMDAwMDAwMDRGOEYKKzoxMDMyMTAwMDk5ODQwMTAwNTAwMzAwNENBMkM5MDEwMDAwMDAwMDIwNjUKKzoxMDMyMjAwMDg2QTQwMTAwMDIwMDAwNDA5OEM4MDEwMDAwMDAwMDRGODEKKzoxMDMyMzAwMDk5ODQwMTAwNTAwMzAwNENBMkM5MDEwMDAwMDAwMDIwNDUKKzoxMDMyNDAwMDg2QTQwMTAwNTAwMzAwNDBBMkM5MDEwMDAwMDAwMDQzMTEKKzoxMDMyNTAwMDQwQTQwMTAwMDEwMDAwMjA4OEU0MDEwMDAwMDAwMDVGOUMKKzoxMDMyNjAwMDQxRjAwMTAwMDAwMDAwNDQ0MDk0MDEwMDA1MDAwMDc1OTkKKzoxMDMyNzAwMDg5RTQwMTAwMUIwMDAwNzU4NUY0MDEwMDAwMDAwMDQ0OTIKKzoxMDMyODAwMDg0OTQwMTAwNTUwNkEzNTM4MzZDMDAwMDAwMDAwMDc2NkYKKzoxMDMyOTAwMDg5QjAwMTAwMDAwMDAwNzc4OTg0MDEwMDAwMDAwMDc2RjkKKzoxMDMyQTAwMDhCQjAwMTAwMDAwMDAwMjA4QkE0MDEwMDAwMDAwMDc4MUEKKzoxMDMyQjAwMDhCODQwMTAwNjQwNjAwNDU4ODk0MDAwMDI3MDAwMDQxQ0IKKzoxMDMyQzAwMDgwQ0UwMTAwNUEwNkFBNDA4MTMyMDAwMDAwMDAwMDc2M0MKKzoxMDMyRDAwMDg5QjAwMTAwMDAwMDAwNzc4OUE0MDEwMDY0MDYwMDc4MkQKKzoxMDMyRTAwMDg5QTQwMDAwM0IwMDAwNDE4MENFMDEwMDU3MDZBQTQwOUYKKzoxMDMyRjAwMDgxMzIwMDAwMDAwMDAwNzY4OUIwMDEwMDAwMDAwMDc3RjQKKzoxMDMzMDAwMDg5ODQwMTAwMDAwMDAwNzY4QkIwMDEwMDAwMDAwMDc4ODUKKzoxMDMzMTAwMDhCODQwMTAwMDAwMDAwNDU4ODk0MDEwMDAwMDAwMDc3QzQKKzoxMDMzMjAwMDhCQjAwMTAwMDAwMDAwNzg4Qjg0MDEwMDY0MDYwMDQ1MkEKKzoxMDMzMzAwMDg4OTQwMDAwMDAwMDAwNDQ4NEMwMDEwMDAwMDAwMDc5NkYKKzoxMDMzNDAwMDg1QzAwMTAwMDAwMDAwMjA4NEMwMDEwMDZCMDZBMzUzNkIKKzoxMDMzNTAwMDgzNkMwMDAwODI1QTAwQTY4NEMwMDEwMDk5NzkwMDQyNjMKKzoxMDMzNjAwMDg0QzgwMTAwNzgwNjAwNDA4MUIyMDAwMDI3MDAwMDQxQjcKKzoxMDMzNzAwMDgwQ0UwMTAwNzAwNkFBNDA4MTMyMDAwMEQ5NkUwMEE2RkUKKzoxMDMzODAwMDg0QzAwMTAwQTFFQjAwNDI4NEM4MDEwMDc4MDYwMDQwMUYKKzoxMDMzOTAwMDgxQjIwMDAwM0IwMDAwNDE4MENFMDEwMDc1MDZBQTQwQ0EKKzoxMDMzQTAwMDgxMzIwMDAwMUI4RjAwQTY4NEMwMDEwMERDQkMwMDQyRkIKKzoxMDMzQjAwMDg0QzgwMTAwNzgwNjAwNDA4MUIyMDAwMDYyQ0EwMEE2RkQKKzoxMDMzQzAwMDg0QzAwMTAwRDZDMTAwNDI4NEM4MDEwMDc4MDYwMDQwRDQKKzoxMDMzRDAwMDgxQjIwMDAwMDAwMDAwNzhGM0IyMDEwMDAwMDAwMDc3MjUKKzoxMDMzRTAwMEYxQjIwMTAwMUUwMDAwNzY4OUU0MDEwMDAyMDAwMDc2QkYKKzoxMDMzRjAwMEVGRjYwMTAwMDAwMDAwNDRFRTk2MDEwMDAwMDAwMDc1QTkKKzoxMDM0MDAwMEVEQjIwMTAwMDAwMDAwNDJFQUIyMDEwMDAwMDAwMDQxRkMKKzoxMDM0MTAwMDgzQzAwMTAwNEYwMDAwNDE4MENFMDEwMDM3MDYyQTQwRTIKKzoxMDM0MjAwMDgxMzIwMDAwMDAwMDAwNzVFMUMyMDEwMDAwMDAwMDc2NUEKKzoxMDM0MzAwMEUzQzIwMTAwMDAwMDAwNzdFNUMyMDEwMDAwMDAwMDc4NEYKKzoxMDM0NDAwMEU3QzIwMTAwMDAwMDAwNzlFOUMyMDEwMDJCMDY4MTQxQkEKKzoxMDM0NTAwMDhENDAwMDAwMDAwMDgwNDA4MUIyMDEwMDA0MDAwMDQwNjcKKzoxMDM0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDM0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDM0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDM0OTAwMDgxQjIwMDAwMDAwMDAwNTBGRDkzMDEwMDQwMTYwMDQwODIKKzoxMDM0QTAwMDQ1OTkwMTAwREI5RjAwNDA0OTMxMDEwMDA4MDAwMDQ4QjgKKzoxMDM0QjAwMEIyQ0IwMTAwMTUwNDAwNDA4MTMyMDEwMEI5MDYyMjQwNjAKKzoxMDM0QzAwMDhGNkMwMDAwREE5RjAwNDA4MTMyMDEwMEI5MDZBMjQwRjMKKzoxMDM0RDAwMDk3NkMwMDAwNUUxNjAwNDA0Mzk5MDEwMDdDMTYyMEY2QjAKKzoxMDM0RTAwMEUwQjEwMTAwMDAwMDAwNDAzMUIzMDEwMDlEMDYyMjRGMTEKKzoxMDM0RjAwMDhGN0MwMDAwMDAwMDAwNTFGRDkzMDEwMDlGMDYyMjQwRDgKKzoxMDM1MDAwMDhGN0MwMDAwQTMwNjAwNTRGRDkzMDAwMEExMDYyMjQyMTgKKzoxMDM1MTAwMDhGN0MwMDAwMDAwMDAwNTJGRDkzMDEwMEEzMDYyMjQxQjEKKzoxMDM1MjAwMDhGN0MwMDAwMDAwMDAwNTNGRDkzMDEwMEI3MDYyMjUxN0MKKzoxMDM1MzAwMEZEN0YwMDAwMzgwNTAwNDA4MTMyMDEwMDBDMDAwMDQ4OEEKKzoxMDM1NDAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMEIyMDZBMjQwNUIKKzoxMDM1NTAwMEI1NkYwMDAwMUUwMDAwNDhCMkNCMDEwMDEwMDQwMDQ4MDcKKzoxMDM1NjAwMDk2MzAwMTAwMDAwMDAwREE5N0MwMDEwMDA0MDAwMDRCMTMKKzoxMDM1NzAwMEIyQ0IwMTAwMTAwNDAwNDA4MTMyMDEwMDBFMDAwMDQ4NkYKKzoxMDM1ODAwMEIyQ0IwMTAwMjAwNDAwNDA4MTMyMDEwMDBDMDAwMDQ4NTEKKzoxMDM1OTAwMEIyQ0IwMTAwMDAwMDAwMzBCNUIzMDEwMDIwMDQwMDQwQjAKKzoxMDM1QTAwMDgxMzIwMTAwMEUwMDAwNDhCMkNCMDEwMDEwMDQwMDQwM0YKKzoxMDM1QjAwMDgxMzIwMTAwQjYwNjIyNDBCNTZGMDAwMEJBMDYwMDU0MDEKKzoxMDM1QzAwMEZEOTMwMDAwMDAwMDAwNTFGRDgzMDEwMDFDMDAwMEZFN0YKKzoxMDM1RDAwMDdGRDkwMTAwQkEwNkE2NDA4MTMyMDAwMDAwMDAwMDU1RTQKKzoxMDM1RTAwMEZEOTMwMTAwMDAwMDgwNDA4MUIyMDEwMDA0MDAwMDQwMTIKKzoxMDM1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDM2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDM2MTAwMDgxQjIwMDAwRTc5RjAwNDA4MTMyMDEwMEM0MDYyMjVDQjUKKzoxMDM2MjAwMDFGN0MwMDAwRTM5RjAwODgxQ0IwMDAwMEU5OUYwMDVDNDUKKzoxMDM2MzAwMDFGMDAwMTAwMDAwMDJFMDU0OEIxMDEwMDAwMDAwMDQwRkQKKzoxMDM2NDAwMEUxQjEwMTAwMDQwMDJEMDM0OEIxMDEwMDAwMDAwMEYwQzkKKzoxMDM2NTAwMDNDQjAwMTAwMjgwMDAwMTQwMkM4MDEwMDAwMDAwMDAxNzUKKzoxMDM2NjAwMDM0QjAwMTAwMDAwMDJEMDUzMkIwMDEwMDIyMDAwMDA1MzkKKzoxMDM2NzAwMDBBQzgwMTAwMTAwMDAwMDM0OEM5MDEwMDAwMDAwMEY4NUEKKzoxMDM2ODAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDAwMDAwMEY4Q0MKKzoxMDM2OTAwMDBFQjAwMTAwMEMwMDAwQTQwQ0M4MDEwMEVBOUYwMDQwMUQKKzoxMDM2QTAwMDgxMzIwMTAwMDAwMDAwNDAyM0IwMDEwMDBBMDcyMjAxMUUKKzoxMDM2QjAwMDgwMzIwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAyRUE0MDIKKzoxMDM2QzAwMDgwQjAwMTAwMDAwMDAwMTA0OEMxMDEwMEQ5MDZBMzA3MjYKKzoxMDM2RDAwMDAyNkMwMDAwREEwNjY4MDExQUIwMDAwMDAwMDA2ODA3RkEKKzoxMDM2RTAwMDFBQjAwMTAwMDAwMDAwMEQwMkQwMDEwMDAwMDAwMDA1MkEKKzoxMDM2RjAwMEYwQjEwMTAwMDAwMDAwMENGMEIxMDEwMDAwMDAwMDAyNzgKKzoxMDM3MDAwMEUwQjEwMTAwMDAwMDAwMEQwQUMwMDEwMEVDMDYyMjQwRkIKKzoxMDM3MTAwMDAzNkMwMDAwRTYwNjIyNDIyMzZDMDAwMDAwMDAwMDQxMUEKKzoxMDM3MjAwMDIzQzAwMTAwMDAwMDAwNDc2MUIxMDEwMDIwMDAwMEE0OTcKKzoxMDM3MzAwMDYyREQwMTAwMjMwNzI4NDA4MTMyMDAwMEUzMDYwMDQwREIKKzoxMDM3NDAwMDgxQjIwMDAwMDAwMDAwMTA4MEMwMDEwMDAwMDAwMDQ3QUUKKzoxMDM3NTAwMDYxQjEwMTAwMDAwMDAwNDA2MkIxMDEwMEU4MDZBODQwMkMKKzoxMDM3NjAwMDIzMzAwMDAwRTM5RjAwODgxQ0IwMDAwMDIzMDcwMDQwQzYKKzoxMDM3NzAwMDgxQjIwMDAwMDAwMDAwMTA4MEMwMDEwMDAwMDAwMDQ3N0UKKzoxMDM3ODAwMDYxQjEwMTAwMDAwMDAwNDA2MkIxMDEwMEVFMDZBODQwRjYKKzoxMDM3OTAwMDIzMzAwMDAwRTM5RjAwODgxQ0IwMDAwMDIyMDAwMDE5QzUKKzoxMDM3QTAwMDQ4QzkwMTAwMDAwMDJEMTQ0OEMxMDEwMDBGMDAwMEYyQkIKKzoxMDM3QjAwMDNBODgwMTAwMDAwMDAwNDIzQkUwMDEwMDBFMDAwMDE0QzYKKzoxMDM3QzAwMDAyQzgwMTAwMDAwMDAwMUQwMkMwMDEwMEZBMDYyMzFBMTEKKzoxMDM3RDAwMDAyNTAwMDAwMDAwMDAwNDYwM0MwMDEwMDIzMDcwMDAxNjIKKzoxMDM3RTAwMDM0QzAwMDAwMEMwMDJEMUQ0OEMxMDEwMEYwMDAwMEYyQTMKKzoxMDM3RjAwMDMwODgwMTAwMDAwMDAwNDIzMUYwMDEwMDAwMDAwMDE0OTgKKzoxMDM4MDAwMDAyQjAwMTAwMDAwMDAwMUQwMkMwMDEwMDAwMDAwMDE4MEQKKzoxMDM4MTAwMDAyQzAwMTAwMDIwNzIyMUEwMjUwMDAwMDIzMDcwMDAxMjMKKzoxMDM4MjAwMDM0QzAwMDAwMjIwMDAwMTk0OEM5MDEwMDAyMDAyRDE0MTQKKzoxMDM4MzAwMDQ4QzEwMTAwMDAwMDAwRjYxNEIwMDEwMDAwMDAwMDFEQTYKKzoxMDM4NDAwMDE0RDAwMTAwMDAwMDAwMTgxNEQwMDEwMDAwMDAwMDFFNzgKKzoxMDM4NTAwMDI0QjAwMTAwMTIwMDAwMTcxMEM4MDEwMDIzMDcwMDFBNEQKKzoxMDM4NjAwMDEwQzAwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAwMEE0NjAKKzoxMDM4NzAwMDg2QjAwMTAwMDAwMDJFMTA0OEMxMDEwMDBGMDdBMzEyRkUKKzoxMDM4ODAwMDBFNkMwMDAwMTAwNzYwMDcxQUIwMDAwMDAwMDA2MDEyMDQKKzoxMDM4OTAwMDFBQjAwMTAwMDAwMDY4MEQxNjk0MDEwMEZGRkYwMDBCMzQKKzoxMDM4QTAwMDE2RDgwMTAwMDAwMDAwMDhGMEIxMDEwMDAwMDAwMDBDNzMKKzoxMDM4QjAwMEYwQjEwMTAwMDAwMDAwMDJFMEIxMDEwMDAwMDAwMDEwQzIKKzoxMDM4QzAwMDg2QzAwMTAwMDAwMDAwNDY2MUIxMDEwMDIwMDAwMDQzRjUKKzoxMDM4RDAwMDYyREQwMTAwMTcwN0E4NUMxRjEwMDAwMDQwMDcyMjBERTEKKzoxMDM4RTAwMDE0NTAwMDAwNDAwNzIyMEQyNDUwMDAwMDAwMDAwMDBEN0QKKzoxMDM4RjAwMDEwQzAwMTAwMUUwNzIyNDIyMzZDMDAwMDIzMDcwMDQxNzQKKzoxMDM5MDAwMDIzQzAwMDAwMDAwMDAwNDY2MUIxMDEwMDQwMDAwMDEwMkIKKzoxMDM5MTAwMDYyREQwMTAwMUYwN0E4NUMxRjAwMDAwMEUzOUYwMDg4MTQKKzoxMDM5MjAwMDFDQjAwMDAwMDAwMDAwNDAyM0IwMDEwMDNGMDdBMjBEQzIKKzoxMDM5MzAwMDBFNTAwMDAwMkUwNzIyNDYxRjdDMDAwMDAwMDAwMDQ2QUIKKzoxMDM5NDAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMDJDMDcyMkYyQzQKKzoxMDM5NTAwMDY0MDYwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNTMKKzoxMDM5NjAwMDYyREQwMTAwMjkwN0E4NDA4MTMyMDAwMEUzOUYwMDg4NDIKKzoxMDM5NzAwMDFDQjAwMDAwMjA4MDAwMDM0Njk5MDEwMDAwMDAwMDVGOTkKKzoxMDM5ODAwMEUxOTEwMTAwMDAwMDJEMDY0OEIxMDEwMDAwMDAwMEY4OUYKKzoxMDM5OTAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDMzMDcxRkYwNjgKKzoxMDM5QTAwMDBFMzAwMDAwRDMwNjAwNEMwREMwMDAwMDAwMDAyRTVGNUEKKzoxMDM5QjAwMDBGODAwMTAwRDMwNjIzMDcxNDZDMDAwMDMwMDAwMDEwQjQKKzoxMDM5QzAwMDQ4QzkwMTAwMjQwMDAwNDBGMTk5MDEwMDAwMDAwMDAzRjMKKzoxMDM5RDAwMEYwQjEwMTAwMDAwMDAwMDBGMEIxMDEwMDAwMDAwMDE2OEQKKzoxMDM5RTAwMEYwQjEwMTAwMjQwMDAwMDAwMEM4MDEwMDAwMDAwMDQ3MDEKKzoxMDM5RjAwMDYxQjEwMTAwMjAwMDAwQTQ2MkREMDEwMDNDMDdBODQ2N0YKKzoxMDNBMDAwMDFGMTAwMDAwRDMwNjAwMDMwQ0IwMDAwMEQzMDYwMDBEMDkKKzoxMDNBMTAwMDE4QzAwMDAwNUYwN0EyNDQxRjdDMDAwMDAwMDAwMDE5Q0UKKzoxMDNBMjAwMDBBQjAwMTAwMjIwMDAwMDU0OEM5MDEwMDBBMDAyRDE0NTcKKzoxMDNBMzAwMDQ4QzEwMTAwMDIwMDIwNDBFNUIxMDEwMDA0MDAyMDQwMUYKKzoxMDNBNDAwMEU1QjEwMTAwMEQwMDJEMUQ0OEMxMDEwMDA5MDAwMEYzODIKKzoxMDNBNTAwMDM4ODgwMTAwMEQwMDIwNTBFN0IxMDEwMDA0MDAyRDQwMUUKKzoxMDNBNjAwMDNGQjAwMTAwMDAwMDAwRjQzMkIwMDEwMDA0MDAyMDQwMkIKKzoxMDNBNzAwMEUxQjEwMTAwMjIwMDAwMDU0OEM5MDEwMDAwMDAyRDE0MzkKKzoxMDNBODAwMDQ4QzEwMTAwMDIwMDAwMUQ5NEY0MDEwMDAwMDAwMDQwNDQKKzoxMDNBOTAwMDkxQjAwMTAwNTIwN0EwRkM5MDQwMDAwMDAwMDAwMDQxREUKKzoxMDNBQTAwMDkxQzAwMTAwNTAwN0EyNDE5NTUwMDAwMDAwMDAwMEE0MDEKKzoxMDNBQjAwMDk2QjAwMTAwMDQwMDJFMDU0OEIxMDEwMDAwMDAwMDQ4NDYKKzoxMDNBQzAwMEYwQjEwMTAwMDAwMDAwNEI0OEIxMDEwMDAwMDAwMDE4RjcKKzoxMDNBRDAwMDQ4QzEwMTAwMDIwMDAwMTg5NEY0MDEwMDAwMDAyRDE4RjQKKzoxMDNBRTAwMDkwQjAwMTAwNUMwN0EwRkM5MDQwMDAwMDAwMDAwMDQxODUKKzoxMDNBRjAwMDkxQzAwMTAwNUEwN0EyNDE5NTUwMDAwMDAwMDAwMDQ4MDMKKzoxMDNCMDAwMEUwQjEwMTAwMTAwMDIwNDBFNUIxMDEwMDA0MDAyRDA1RTYKKzoxMDNCMTAwMDQ4QjEwMTAwMDAwMDAwRjg4MEIwMkQwMDAwMDAwMEYwNjYKKzoxMDNCMjAwMDE2QjAyRDAwMjIwMDAwMDU0OEM5MkQwMDAwMDAwMDE0MjkKKzoxMDNCMzAwMDQ4QzEyRDAwNjQwNzQzMzAzRDA3MkMwMDAwMDAwMDlFNjMKKzoxMDNCNDAwMDg1QjAyRDAwMDAwMDFCNDEzREMzMkQwMDA0MDAyMDQyMjQKKzoxMDNCNTAwMEVDQjEyRDAwMDAwMDAwMUU4MkIwMDEwMDAyMDAyRTFERkQKKzoxMDNCNjAwMDgyQzAwMTAwMDAwMDY2MTg4MkMwMDEwMDAwMDAwMDQyMEYKKzoxMDNCNzAwMDgwQzAwMTAwNkUwN0EwNDE4MDQ0MDAwMDAwMDAwMDQxQTkKKzoxMDNCODAwMDgxQzAwMTAwMTAwMDAwNDA5MkY0MDEwMDBBMDAyRTMwQjQKKzoxMDNCOTAwMDgxODQwMTAwNzIwNzkwNDA5MjQwMDAwMDAwMDAwMDQxQzMKKzoxMDNCQTAwMDkzQzAwMTAwMDAwMDY2MjA5M0E0MDEwMDAwMDAwMDFERTYKKzoxMDNCQjAwMDQ4QzEwMTAwMDQwMDIwMTlFOEIxMDEwMDAwMDAwMDFFMDYKKzoxMDNCQzAwMDE2QzAwMTAwNzgwN0EwMTkxNjQ0MDAwMDAwMDAwMDQxNEIKKzoxMDNCRDAwMDE3QzAwMTAwMEQwMDJGMUUzMkMwMDEwMDdEMDdBMjQwNUEKKzoxMDNCRTAwMDE1NkMwMDAwN0MwN0EwMUMxNjQwMDAwMDAwMDAwMDQxN0UKKzoxMDNCRjAwMDE3QzAwMTAwMDAwMDYzRjMzODk0MDEwMDEwMDAwMDA1QjUKKzoxMDNDMDAwMDQ4QzkwMTAwMDQwMDJFMUU5OEIwMDEwMDAwMDA2MDFBOEYKKzoxMDNDMTAwMDk4QzAwMTAwMEMwMDIwNDBFMUIxMDEwMDhCMDcyMjQ2NTIKKzoxMDNDMjAwMDFGN0MwMDAwMDAwMDAwNDYxRjgwMDEwMDMwODAwMDEwNTMKKzoxMDNDMzAwMDQyQzkwMTAwODkwNzIyRjI2NDA2MDAwMDAwMDAwMDQ3MjMKKzoxMDNDNDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDg2MDdBODQwNUMKKzoxMDNDNTAwMDgxMzIwMDAwRTM5RjAwODgxQ0IwMDAwMDIwODAwMDAzMzgKKzoxMDNDNjAwMDQ2OTkwMTAwMDAwMDAwNUZFMTkxMDEwMDMwODAwMDEwRTIKKzoxMDNDNzAwMDQ0QzkwMTAwMTIwMDAwMUFGMEM5MDEwMDAwMDAwMDE3MzkKKzoxMDNDODAwMEYwQjEwMTAwMTAwMDAwMDVFMEM5MDEwMDMwMDAwMDEwOTMKKzoxMDNDOTAwMDgwQzgwMTAwMDAwMDAwNDQ2MUIxMDEwMDIwMDAwMDQwMjQKKzoxMDNDQTAwMDYyREQwMTAwOTEwN0E4NDA4MTMyMDAwMDlCMDcyMjVDODEKKzoxMDNDQjAwMDFGN0MwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAyRDEwQTgKKzoxMDNDQzAwMDQ4QzEwMTAwOUIwNzIyRjI2NDA2MDAwMDAwMDAwMDQ2ODQKKzoxMDNDRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDk4MDdBODQwQkEKKzoxMDNDRTAwMDgxMzIwMDAwRTM5RjAwODgxQ0IwMDAwMEVCOUYwMDVDNjUKKzoxMDNDRjAwMDFGMDAwMTAwMjAwMDJGMDU0OEIxMDEwMDAwMDAwMDBCNEIKKzoxMDNEMDAwMEU0QjEwMTAwMDAwMDAwNTAxN0YwMDEwMEExMDc5MEYyOUIKKzoxMDNEMTAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDA2NjIwQUUKKzoxMDNEMjAwMDE3QTQwMTAwMTAwMDAwMTQyQUM4MDEwMDAwMDAwMDFEQTMKKzoxMDNEMzAwMDJBQzAwMTAwMDAwMDAwNTAyQkUwMDEwMDAwMDAwMEYyNEEKKzoxMDNENDAwMDJBOTQwMTAwMzA4MDAwMTA0MkM5MDEwMEFDMDcyMkYyMjEKKzoxMDNENTAwMDY0MDYwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwNTIKKzoxMDNENjAwMDYyREQwMTAwQTkwN0E4NDA4MTMyMDAwMEUzOUYwMDg4QkUKKzoxMDNENzAwMDFDQjAwMDAwMDA4MDAwMTcxMERDMDEwMEM5MDcyMjQwQzEKKzoxMDNEODAwMDE1NkMwMDAwQjQwN0EyNDQxRjdDMDAwMDAwMDAwMDQ0MzIKKzoxMDNEOTAwMDFGOTAwMTAwQjMwNzIyOUYxMzZDMDAwMDAyMDAwMDg4RUYKKzoxMDNEQTAwMDFDQ0MwMTAwRTQ5RjAwNDA4MUIyMDAwMDAwMDAwMDQxRjMKKzoxMDNEQjAwMDNGQzMwMTAwRTY5RjAwNDA4MTMyMDEwMEI3MDdBMjQxRTYKKzoxMDNEQzAwMDg3N0MwMDAwMDAwMDAwMUUzRUMwMDEwMEM5MDcyMjQwQTEKKzoxMDNERDAwMDE1NkMwMDAwQkEwNzIwMUUxNDZDMDAwMDAwMDAwMDBBRDkKKzoxMDNERTAwMDNDQjAwMTAwRTU5RjAwMUUyNDMwMDEwMEJGMDcyMjA4RkYKKzoxMDNERjAwMDJFMzAwMDAwMDAwMDAwNTIxMUMwMDEwMDAwMDAwMDFBMjcKKzoxMDNFMDAwMDEwQzAwMTAwMjMwNzAwNDAxN0IwMDAwMEU0OUYwMDg4QTUKKzoxMDNFMTAwMDFDQjAwMDAwRTU5RjAwNDA4MTMyMDEwMEJDMDdBMjA4RjEKKzoxMDNFMjAwMDJFMzAwMDAwODA4MDAwQTYwNEIwMDEwMDA2MDAwMDQwOTMKKzoxMDNFMzAwMDg3OTgwMTAwMDA4MDAwMDM0NDk5MDEwMDA0MDAyMjA0RDcKKzoxMDNFNDAwMEUwMzEwMDAwRTg5RjAwMUY4QzMwMDEwMDAwMDAwMDQwQkUKKzoxMDNFNTAwMDBGQjAwMTAwRTI5RjAwNUMxRjkwMDAwMDAwODAwMDAzOTMKKzoxMDNFNjAwMDQ0OTkwMTAwMDQwMDIyMDRFMDMxMDAwMEU2OUYwMDQwNzQKKzoxMDNFNzAwMDgxMzIwMTAwQ0UwN0EyNDE4NzdDMDAwMENGMDcwMDFFREYKKzoxMDNFODAwMDNFQzAwMDAwMDAwMDAwMUY4Q0IwMDEwMDAwMDAwMDQwOTgKKzoxMDNFOTAwMDA1QjAwMTAwRTg5RjAwNDAwRjMwMDEwMEUyOUYwMDVDODgKKzoxMDNFQTAwMDFGOTAwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDNFQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTQKKzoxMDNFQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDQKKzoxMDNFRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjQKKzoxMDNFRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTQKKzoxMDNFRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDQKKzoxMDNGMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzMKKzoxMDNGMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjMKKzoxMDNGMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDNGMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTMKKzoxMDNGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODMKKzoxMDNGNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDNGNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDNGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDNGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDMKKzoxMDNGOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDNGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDNGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDNGQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMEY3MDcwMEJDOEQKKzoxMDNGRDAwMDgwQjIwMDAwMDM4MDAwNDA4MUIyMDAwMDAzODAwMDQwRjYKKzoxMDNGRTAwMDgxQjIwMDAwMDM4MDAwNDA4MUIyMDAwMDAzODAwMDQwRTUKKzoxMDNGRjAwMDgxQjIwMDAwMDM4MDAwNDA4MUIyMDAwMDAzODAwMDQwRDUKKzoxMDQwMDAwMDgxQjIwMDAwMDM4MDAwNDA4MUIyMDAwMDAzODAwMDQwQzQKKzoxMDQwMTAwMDgxQjIwMDAwMzE4MDAwNDA4MUIyMDAwMDM0ODAwMDQwNTUKKzoxMDQwMjAwMDgxQjIwMDAwMzU4MDAwNDA4MUIyMDAwMDA0MDAwMDQwRjEKKzoxMDQwMzAwMDgxQjIwMDAwMUI4MDgxODA4MDMyMDAwMEU3ODdBMjQwQUYKKzoxMDQwNDAwMDkxNkYwMDAwMDAwMDAwNEM5MEIzMDEwMDVDOTUyRUEyMUYKKzoxMDQwNTAwMDgwQjAwMTAwRkYwMDAwODBGNDg5MDEwMDkwOTUyQUM4MUIKKzoxMDQwNjAwMEU1QjEwMTAwMDAwMDAwQTFGMEIxMDEwMDAwMDAwMDQwMzYKKzoxMDQwNzAwMEYwQjEwMTAwMDAwMDAwQTRGMEIxMDEwMDAwMDAwMEQwODgKKzoxMDQwODAwMEYwQjEwMTAwMDAwMDAwRDFGMEIxMDEwMDAwMDAwMEQyNDkKKzoxMDQwOTAwMEYwQjEwMTAwMDAwMDAwNENGMEIxMDEwMDAwMDAwMEQ0QkMKKzoxMDQwQTAwMEYwQjEwMTAwMDAwMDAwRDNGMEIxMDEwMDAwMDAwMEVFMEIKKzoxMDQwQjAwMEYwQjEwMTAwMDAwMDAwNEVGMEIxMDEwMDAwMDAwMDQwMkUKKzoxMDQwQzAwMDQ0QjEwMTAwMTg4MDExODE5ODMwMDAwMDAwMDA1MTQwNzcKKzoxMDQwRDAwMDgxQjIwMTAwMUE4MDExODI5ODMwMDAwMDAwMDA1MjQwMjUKKzoxMDQwRTAwMDgxQjIwMTAwRTc4NzAwNDhGRDkzMDAwMEI2MDMwMDQwNUQKKzoxMDQwRjAwMEExOTkwMTAwMjM4MEEyNDJGRDdGMDAwMDIwODAwMDgwNjIKKzoxMDQxMDAwMDgwMzIwMDAwMjI4MDExODE4MjMwMDAwMDIyODA1MTQwRTQKKzoxMDQxMTAwMDgxQjIwMDAwMjI4MDExODI4MjMwMDAwMDIyODA1MjQwNTEKKzoxMDQxMjAwMDgxQjIwMDAwMkM4MDAwNDhGRDkzMDAwMDI3ODAwMDgwQjEKKzoxMDQxMzAwMDgwMzIwMDAwMjY4MEEyNTMwNzdDMDAwMDAwMDA1MTUzMEIKKzoxMDQxNDAwMDA3OTAwMTAwMkE4MDAwNTIwNzkwMDAwMDI5ODBBMjUyQTcKKzoxMDQxNTAwMDA3N0MwMDAwMDAwMDUyNTIwNzkwMDEwMDAwMDAwMDUzNEQKKzoxMDQxNjAwMDA3OTAwMTAwMDAwMDAwNDhGRDkzMDEwMDAwMDAwMDQ2OTgKKzoxMDQxNzAwMEYzOTMwMTAwNUM5NTJFQTI1MkIzMDEwMEZGMDAwMDgwNzIKKzoxMDQxODAwMEY0ODkwMTAwMDAwMDAwNENFNEIxMDEwMDAwMDAwMEE5MjYKKzoxMDQxOTAwMDQ1QjEwMTAwMzA4MDAwNEM4MEIyMDAwMDAwMDA0NTQwNzUKKzoxMDQxQTAwMDgxQjIwMTAwMDAwMDU1NDA4MUIyMDEwMEM2ODIwNTQwODUKKzoxMDQxQjAwMDQ5QjEwMDAwQzY4MjA1NDA0OUIxMDAwMDAwMDAwNTQwMzkKKzoxMDQxQzAwMDQ5QjEwMTAwNEMwMTAwNDA4MTMyMDEwMDAwMDAwMDRCNjgKKzoxMDQxRDAwMERFQjIwMTAwMDAwMDAwNDBGRDkzMDEwMDAwMDAwMDQ4MzUKKzoxMDQxRTAwMEZEODMwMTAwMDIwMDAwNDA5QjlCMDEwMDAwMDAwMEE1MzAKKzoxMDQxRjAwMDlDQjMwMTAwNDgwMzAwNDA4MTMyMDEwMDU4OTUyMDQ0REYKKzoxMDQyMDAwMEUwQjEwMTAwMDQ5NDAwNDA0Mzk5MDEwMDAwMDAwMEYyNzUKKzoxMDQyMTAwMDI0QjEwMTAwMDAwQzAwRUU5Njg4MDEwMDAwMDAwMDRBNjUKKzoxMDQyMjAwMDk3RjAwMTAwNDQ4MEEyNDM5NzZDMDAwMDAwMDAwMDQyMTgKKzoxMDQyMzAwMEZEOTMwMTAwMDBDMDAwQTYzNkIxMDEwMEQwMTQwMDQwN0IKKzoxMDQyNDAwMDQ3OTkwMTAwMDUwMDAwNDBGNTk5MDEwMDAwMzgwMDQwNDEKKzoxMDQyNTAwMEY1OTkwMTAwMDAwNjAwNDBGNTk5MDEwMDAzMDAwMDQwQjcKKzoxMDQyNjAwMEY1OTkwMTAwMDUxMDAwNDBGNTk5MDEwMDAyMDkwMDQwOTAKKzoxMDQyNzAwMEY1OTkwMTAwMDQwMDAwNDBGNTk5MDEwMDYwMDMwMDQwMzkKKzoxMDQyODAwMDgxMzIwMTAwODgwMzAwNDA4MTMyMDEwMEEwMDMwMDQwMTgKKzoxMDQyOTAwMDgxMzIwMTAwQjk4MjAwNDA4MTMyMDEwMEIxODIwMDQwQzgKKzoxMDQyQTAwMDgxMzIwMTAwNjA5NTIwNDBFMUIxMDEwMDcwOTUyMDQwMEQKKzoxMDQyQjAwMEUxQjEwMTAwMDAwMDAwNDlERDkxMDEwMDAwMDAwMDQwNzMKKzoxMDQyQzAwMDkxQjMwMTAwMDAwMDAwNDA3QkIzMDEwMEEwOTgwMDQwQzIKKzoxMDQyRDAwMDgxMzIwMTAwMDAwMDAwNDA4NUIzMDEwMDVDOTUyMDQwNjAKKzoxMDQyRTAwMEUxQjEwMTAwM0M4MjAwNDA4MTMyMDEwMDkwMDYwMDQwQjMKKzoxMDQyRjAwMDgxMzIwMTAwMDAwMDAwNUYyRjgxMDEwMEEyODEwMDQwOTcKKzoxMDQzMDAwMDgxMzIwMTAwQTU5ODAwNDA4MTMyMDEwMDAwMDA0NTQwNDMKKzoxMDQzMTAwMDgxQjIwMTAwMDAwMDU1NDA4MUIyMDEwMDAxODMwMDQwREMKKzoxMDQzMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDQzMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDQzNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDQzNTAwMDgxQjIwMDAwMjgwMDAwNDA0Nzk5MDEwMEM2ODIwMDQxNTgKKzoxMDQzNjAwMEUxQzEwMDAwNzgxODAwNDA0OTk5MDEwMDE5MDUyMjU0NjQKKzoxMDQzNzAwMDgxN0MwMDAwNkM4MDQyNDA4MTMyMDAwMDAwODIwMEI0RTkKKzoxMDQzODAwMDY5REYwMTAwMDAwMDFBNDQ5MzkzMDEwMDI4MDAwMDQwRjcKKzoxMDQzOTAwMDQ3OTkwMTAwMTgwNTAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDQzQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDQzQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDQzQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDQzRDAwMDgxQjIwMDAwNTU4MjAwNDA4MTMyMDEwMDdEODAyMjQwODAKKzoxMDQzRTAwMDk3NkMwMDAwN0E4MDQyNDA4MTMyMDAwMDAwMDAwMDRGNEMKKzoxMDQzRjAwMDY5OTMwMTAwNDM4MTAwNTg2OTkzMDAwMDU0MTYwMDQwRkUKKzoxMDQ0MDAwMDQ3OTkwMTAwMDAwMDAwRkVGNEIxMDEwMDgwMDUwMDQwNjIKKzoxMDQ0MTAwMDgxQjIwMDAwODA4MDQyNDA4MTMyMDAwMDAwMDAwMDRFRTYKKzoxMDQ0MjAwMDY5OTMwMTAwNDM4MTAwNTg2OTkzMDAwMDQwMTYwMDQwRTEKKzoxMDQ0MzAwMDQ1OTkwMTAwNDAwNTAwNDA0OTMxMDEwMEY2MTUwMDQwNTIKKzoxMDQ0NDAwMDQzOTkwMTAwNUMxNjAwNDA0NTk5MDEwMDAwMDA2RUZBOTYKKzoxMDQ0NTAwMDhFQjAwMTAwQzEwNTAwNDA4MUIyMDAwMDA0MDAwMDQwQTAKKzoxMDQ0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDQ0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDQ0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDQ0OTAwMDgxQjIwMDAwOTY4MDAwNDA4MUIyMDAwMDU1ODIwMDQwNDkKKzoxMDQ0QTAwMDgxMzIwMTAwOTY4MDIyNDA5NzZDMDAwMDkzODA0MjQwNDgKKzoxMDQ0QjAwMDgxMzIwMDAwMDAwMDAwNEY2OTkzMDEwMDQzODEwMDU4RTEKKzoxMDQ0QzAwMDY5OTMwMDAwMzgwNTAwNDA4MTMyMDEwMDFFMDAwMDQ4NTkKKzoxMDQ0RDAwMEIyQ0IwMTAwRDAwNTAwNDA4MUIyMDAwMDA0MDAwMDQwRDIKKzoxMDQ0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDQ0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDQ1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDQ1MTAwMDgxQjIwMDAwODMwMjAwNDA4MUIyMDAwMEI4MDIwMDQwNzYKKzoxMDQ1MjAwMDgxQjIwMDAwRDQ5RjAwNDA4MUIyMDAwMEQ1OUYwMDQwQkUKKzoxMDQ1MzAwMDgxQjIwMDAwRDY5RjAwNDA4MUIyMDAwMEQ3OUYwMDQwQUEKKzoxMDQ1NDAwMDgxQjIwMDAwNzIwMTAwNDE4MUMwMDAwMDU1MDE1MTQ5NTMKKzoxMDQ1NTAwMEZEOTMwMDAwNTUwMTUyNEFGRDkzMDAwMDU1MDE1NTQ5NTUKKzoxMDQ1NjAwMEZEODMwMDAwNTUwMTU2NEFGRDgzMDAwMDUwMDE5MTgxRjIKKzoxMDQ1NzAwMDgwMzAwMDAwNTUwMTQ1NDA4MUIyMDAwMDUwMDE5MTgyMTkKKzoxMDQ1ODAwMDgwMzAwMDAwNTUwMTQ2NDA4MUIyMDAwMDAwMDAwMDQwMkMKKzoxMDQ1OTAwMDg5QjAwMTAwMDAwMDAwRjg4MEIwMDEwMDAwMDAwMEYwQzgKKzoxMDQ1QTAwMDE2QjAwMTAwMjIwMDAwMDU0OEM5MDEwMDAwMDAwMDE0RjcKKzoxMDQ1QjAwMDQ4QzEwMTAwQjQ4MDQzMzAzRDA3MDAwMDAwMDAwMDlFNjgKKzoxMDQ1QzAwMDg1QjAwMTAwMDAwMDFCNDEzREMzMDEwMDA0MDAyMDQyRjIKKzoxMDQ1RDAwMEVDQjEwMTAwMDAwMEEyNDA5MTZGMDEwMDAwMDAwMDQwMUEKKzoxMDQ1RTAwMDQ5QjEwMTAwQUUwMzAwQ0JBM0M5MDEwMDAwMDAwMDIwQzcKKzoxMDQ1RjAwMDQ2QjEwMTAwQzQ4MEEyNDBFMTZEMDAwMDAwMDAwMEQyN0QKKzoxMDQ2MDAwMEYxQjEwMTAwMDAwMDAwRDNGMUIxMDEwMDAwMDAwMDQyNEYKKzoxMDQ2MTAwMEYwQjEwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDIwNjAKKzoxMDQ2MjAwMDYyREQwMTAwMDAwMEE4RDBFMUIxMDAwMEMxODAwMDQwQkYKKzoxMDQ2MzAwMDgxQjIwMDAwMDAwMDAwQTg5OEIwMDEwMDA0ODAwMDQwOTIKKzoxMDQ2NDAwMDhCQjMwMDAwQjEwMzAwNDBBMTk5MDEwMEM5ODBBMjQyRDAKKzoxMDQ2NTAwMDk3NkYwMDAwMDAwMDAwNDVBMUMxMDEwMDAwMDAwMDAwQUMKKzoxMDQ2NjAwMDgwQjAwMTAwMDAwMEEyMDQ4MDk0MDAwMDgwMTUzRjQyNDkKKzoxMDQ2NzAwMDk3RTMwMTAwMDAwMDAwNDA0OUIxMDEwMDAwMDA2MDAzMjEKKzoxMDQ2ODAwMDAyOTQwMTAwMDAwMDAwNDAwN0IwMDEwMDA0MDAwMENCQ0MKKzoxMDQ2OTAwMDk5Q0IwMTAwMDAwMDAwQ0NGMzgzMDEwMEQzODBBMjQyM0IKKzoxMDQ2QTAwMDk3NkYwMDAwMDAwMDAwQ0JGMzkzMDEwMEFFMDMwMENCMzYKKzoxMDQ2QjAwMEEzQzkwMTAwMDAwMDAwMjA0NEIxMDEwMDAwMDAwMDQ0MzMKKzoxMDQ2QzAwMEYxQjEwMTAwMDAwMDAwMDBGMEIxMDEwMDAwMDAwMDA0QTEKKzoxMDQ2RDAwMEYwQjEwMTAwMDAwMDAwQTFFMEIxMDEwMDA1MDAwMDQwQzAKKzoxMDQ2RTAwMDYxOTkwMTAwMjAwMDAwMjA2MkREMDEwMERBODBBODQwMEQKKzoxMDQ2RjAwMDgxMzIwMDAwRjkwMjAwMjA0MjMxMDEwMDAwMDBBMjQxOTUKKzoxMDQ3MDAwMDA1NkMwMTAwMDAwMDgwQ0JEQjkxMDEwMDAwMDAxOTQxMjUKKzoxMDQ3MTAwMDhCQjMwMTAwNjAwMDAwNDA2MTk5MDEwMEUwODBBOEIxMDYKKzoxMDQ3MjAwMDhDMzMwMDAwNjAwMDAwNDA2MTk5MDEwMEUyODBBOEIxNzQKKzoxMDQ3MzAwMDk0MzMwMDAwRTg4MDE0QzY4MTMyMDAwMDE4MDAwMEM2REYKKzoxMDQ3NDAwMDgzRjQwMTAwMjI4MzIyNEY4MzA0MDAwMEM0ODAwMDQwRDAKKzoxMDQ3NTAwMDgxQjIwMDAwRkYwMTAwQzY4MTg4MDEwMDAwMDAwMEM2OTAKKzoxMDQ3NjAwMDk3QTMwMTAwQzQ4MDFGNUM5NzUzMDAwMDZEODIxRUM2OTIKKzoxMDQ3NzAwMDgxMzIwMDAwRjI4MDIyNDhGRDdGMDAwMEYyODAyMjU4NDIKKzoxMDQ3ODAwMDgxNkMwMDAwRjI4MDIyNDg4MTZDMDAwMEMwMDAwMDQwNzMKKzoxMDQ3OTAwMDg0Q0MwMTAwRjI4MDlGNDI4MDMyMDAwMDIyODMwMDQwREUKKzoxMDQ3QTAwMDgxQjIwMDAwQzQ4MEEyQzY4RjA2MDAwMEM0ODAxRUM2NkQKKzoxMDQ3QjAwMDgxMzIwMDAwMDAwMDJGNDM4MUYwMDEwMEY2ODAwMDQwQUMKKzoxMDQ3QzAwMDEwQzkwMDAwNDQ4MTAwNDA4MUIyMDAwMDdFODEwMDQwOTkKKzoxMDQ3RDAwMDgxQjIwMDAwMzk4MjAwQ0E2M0IzMDAwMDc1ODEwMDQwRDUKKzoxMDQ3RTAwMDgxQjIwMDAwNTU4MTAwNEQ4M0IwMDAwMDYwODEwMDRFMTEKKzoxMDQ3RjAwMDYxQjEwMDAwNEM4MTAwNDA4NUIwMDAwMDU1ODEwMDRDNDMKKzoxMDQ4MDAwMDgzQjAwMDAwMkU4MTAwNDA4NUIwMDAwMEY4ODEwMDQwOTgKKzoxMDQ4MTAwMDQ5QjEwMDAwODY4MTAwNDBDMUIxMDAwMEY0ODEwMDQwMzAKKzoxMDQ4MjAwMDgxQjIwMDAwNEM4MTAwNDA4NUIwMDAwMEYwMDMwMDQwRTAKKzoxMDQ4MzAwMDQ5QjEwMDAwMjI4MzAwQ0E5QkIzMDAwMDkwODEwMDQwNzAKKzoxMDQ4NDAwMEMxQjEwMDAwOTQ4MTAwNDBDMUIxMDAwMDlCODEwMDQwRDMKKzoxMDQ4NTAwMEMxQjEwMDAwOUM4MTAwNDBDMUIxMDAwMDlEODEwMDQwQjkKKzoxMDQ4NjAwMEMxQjEwMDAwOUU4MTAwNDBDMUIxMDAwMDlGODEwMDQwQTUKKzoxMDQ4NzAwMDgxQjAwMDAwOUY4MTAwNDE4MUIwMDAwMDJEODIwMDQwODYKKzoxMDQ4ODAwMDgxQjIwMDAwQUU4MjAwQkJBQkIzMDAwMDNBODIwMENBMjYKKzoxMDQ4OTAwMENGQjMwMDAwQzgwMzAwNDA0OUIxMDAwMEU4MDMwMDQwNjYKKzoxMDQ4QTAwMDgxQjIwMDAwQzQ4MDAwNDA4MUIyMDAwMDIyODMwMDQwMzkKKzoxMDQ4QjAwMDgxQjIwMDAwRTAwMzAwNDA4MUIyMDAwMDIyODMwMENBMDAKKzoxMDQ4QzAwMDc3QjMwMDAwNTY4MTAwNEQ4M0IwMDAwMDVFODEwMDRFM0EKKzoxMDQ4RDAwMDYxQjEwMDAwNEM4MTAwQkI4NUIwMDAwMDU2ODEwMDRDRTYKKzoxMDQ4RTAwMDgzQjAwMDAwNEM4MTAwQkI4NUIwMDAwMDJFODEwMEJCNkUKKzoxMDQ4RjAwMDg1QjAwMDAwMjA4MTAwNDA4MUIyMDAwMDIyODMwMENBMDAKKzoxMDQ5MDAwMDREQjMwMDAwNzAwNTAwNDA0OUIxMDAwMEEwMDUwMDQwMTMKKzoxMDQ5MTAwMDQ5QjEwMDAwMjY4MTIyNDI4RjZGMDAwMDI4ODEyMjQxODgKKzoxMDQ5MjAwMDhGNkYwMDAwMkE4MTFFQ0E4MTMyMDAwMDJDODExRkNBQUQKKzoxMDQ5MzAwMDgxMzIwMDAwMDAwMDAwQ0FDOUIxMDEwMDIyODMwMDQyOTgKKzoxMDQ5NDAwMDhGQjMwMDAwMDAwMDAwQ0FDREIxMDEwMDIyODMwMDQxRjYKKzoxMDQ5NTAwMDhGQjMwMDAwMDAwMDAwQ0FDRkIxMDEwMDIyODMwMDQwRTUKKzoxMDQ5NjAwMDhGQjMwMDAwMDA4MTAwQTZDNkIxMDEwMDIyODMwMDQwODEKKzoxMDQ5NzAwMDgxQjIwMDAwMDA4MDAwQTZDNkIxMDEwMDIyODMwMDQwODEKKzoxMDQ5ODAwMDhGQjMwMDAwNzgxODAwNDA0OTk5MDEwMDEwMDAyRjlDNTcKKzoxMDQ5OTAwMDg5QjAwMTAwNDY4MTAwNDAzOTMzMDEwMDE4MDAyRjlCODcKKzoxMDQ5QTAwMDg5QjAwMTAwNDY4MTAwNDAzNzMzMDEwMDAwMDAyRjlBOTIKKzoxMDQ5QjAwMDg5QjAwMTAwNDY4MTAwNDAzNTMzMDEwMDA4MDAyRjk5N0QKKzoxMDQ5QzAwMDg5QjAwMTAwNDY4MTAwNDAzMzMzMDEwMDAwODAwMEFFMTEKKzoxMDQ5RDAwMDQ3QzkwMTAwQzQ4MEEyNDBFMTZEMDAwMDgwMDAwMDQwOTIKKzoxMDQ5RTAwMEYxOTkwMTAwMDAwMDAwQ0FGMUIxMDEwMDAwMDAwMDQyOEQKKzoxMDQ5RjAwMEYwQjEwMTAwNDAxODAwNDBFMTk5MDEwMDAwMDAwMDQ1QkQKKzoxMDRBMDAwMDYxQjEwMTAwMjAwMDAwQUU2M0REMDEwMDQxODEyODQwNUEKKzoxMDRBMTAwMDgxMzIwMDAwM0U4MTAwNDA4MUIyMDAwMDQxODE0MjQwNkQKKzoxMDRBMjAwMDgxMzIwMDAwMDAwMDAwNUM2OTkzMDEwMDIyODMxQTQ0NzcKKzoxMDRBMzAwMDkzOTMwMDAwNDQ4MTQyNDA4MTMyMDAwMDQzODEwMDU4M0EKKzoxMDRBNDAwMDY5OTMwMDAwMDAwMDAwNDRGMEQxMDEwMDAwMDBBNDQwODAKKzoxMDRBNTAwMDgxQjIwMDAwNEI4MUEyNDBFMTZEMDAwMDAwMDAwMDQ0RTMKKzoxMDRBNjAwMDQ1RDEwMTAwMDAwMDgwNDBFMUIxMDEwMDAwMDA4MDQxMUIKKzoxMDRBNzAwMEUxRDEwMTAwNEM4MTM3NUM2MTMxMDAwMDAwMDAwMDQyNEYKKzoxMDRBODAwMDYyQjEwMTAwNTI4MTI4NDA4MTMyMDAwMDREODEyMjVDRDgKKzoxMDRBOTAwMDc3N0QwMDAwQzQ4MDE3NDA4MUIyMDAwMDREODEwMDQwNDYKKzoxMDRBQTAwMDgxQjIwMDAwMDAwMDAwQ0E2M0IxMDEwMDUyODFBODQwMzkKKzoxMDRBQjAwMDgxMzIwMDAwMjI4MzE3NDA4MUIyMDAwMDU3ODEwMDQwRkMKKzoxMDRBQzAwMDgxQjAwMDAwNTc4MTAwQkI4MUIwMDAwMDAwMDAwMDQxQjAKKzoxMDRBRDAwMDYwQjEwMTAwQzQ4MEEyNDE3NjdEMDAwMDAwMDAwMDQwNkEKKzoxMDRBRTAwMDYyQjEwMTAwNTk4MUE4NDA4MTMyMDAwMDAwMDAwMENBNzMKKzoxMDRBRjAwMDYzQjEwMTAwMjI4MzI4NDA4MTMyMDAwMDVCODEwMDQwQzUKKzoxMDRCMDAwMDgxQjIwMDAwNTA5NTAwNDA0Nzk5MDEwMDYxODEwMEJCQ0YKKzoxMDRCMTAwMDg3QjAwMDAwNTA5NTJGNDA4N0IwMDEwMDY1ODEyMjQwOEEKKzoxMDRCMjAwMDk1N0YwMDAwQzQ4MEEyNDBFMTZEMDAwMEM0ODAyMjQwNTcKKzoxMDRCMzAwMDk1NkYwMDAwMjI4MzYwNDA5NTgzMDAwMDAyMDAyREYwRjUKKzoxMDRCNDAwMDg0QjAwMTAwQzQ4MDIyNDA4NTZDMDAwMEM0ODBBMjQwNzMKKzoxMDRCNTAwMDg1N0MwMDAwQzQ4MEEyNEU3NzdEMDAwMDY5ODEzNjQwQ0MKKzoxMDRCNjAwMDgxMzIwMDAwMDAwMDAwNDI2MkIxMDEwMDZBODFBODQwNjkKKzoxMDRCNzAwMDgxMzIwMDAwMDAwMDAwNDM2MkIxMDEwMDZDODFBODQwNTYKKzoxMDRCODAwMDgxMzIwMDAwMDAwMDAwQ0E2M0IxMDEwMDZFODFBODQwQkMKKzoxMDRCOTAwMDgxMzIwMDAwMDAwMDE2NDA4MUIyMDEwMDc0ODEyMjQxODAKKzoxMDRCQTAwMDQzNTEwMDAwMDAwODAwQ0E5NUNCMDEwMDY4ODEwMDQxMTQKKzoxMDRCQjAwMDg1QzAwMDAwMjI4MzAwNDBFMUIxMDAwMDc3ODFBMjQyNUQKKzoxMDRCQzAwMDY3NkYwMDAwMDAwMDAwNDE2N0IzMDEwMDc3ODE0MjQwMzkKKzoxMDRCRDAwMDgxMzIwMDAwMDAwMDAwNDA2NUIzMDEwMDAwMDAwMDQwODkKKzoxMDRCRTAwMDkzODMwMTAwMDAwMDFBQ0E2OTk3MDEwMDIyODMyNjQwQkUKKzoxMDRCRjAwMDgxMzIwMDAwN0M4MTQyNDA4MTMyMDAwMDIyODMxQTQ0Q0QKKzoxMDRDMDAwMDkzOTMwMDAwQzQ4MDIwNDM5NTZGMDAwMDIyODM4MENBRTQKKzoxMDRDMTAwMDY3MzMwMDAwMjI4MzIyNDA2NTZGMDAwMEM0ODBBMjQ4RjEKKzoxMDRDMjAwMERCN0QwMDAwMjI4MzAwNkZEQjkxMDAwMDg1MDAwMDQwRTcKKzoxMDRDMzAwMDgxMzIwMTAwMzU4MDIyNDA4MDMyMDAwMDIyODMwMDQwMTIKKzoxMDRDNDAwMDgxQjIwMDAwMDAwMDAwNTg5NTkzMDEwMDAwMDAwMDVGNTEKKzoxMDRDNTAwMDk1OTMwMTAwOEM4MUEyNDQyMTZGMDAwMDAwMDAwMDVGNDkKKzoxMDRDNjAwMDk1ODMwMTAwMDAwMDAwNUU5NTkzMDEwMDAwMDAwMDU3NEQKKzoxMDRDNzAwMDk1OTMwMTAwMDAwMDAwQ0FDM0IxMDEwMDhGODEyMjVCM0YKKzoxMDRDODAwMDk1N0YwMDAwMDAwMDAwNEJGRDkzMDEwMDIyODMwMDQwNEYKKzoxMDRDOTAwMDgxQjIwMDAwMUJGRDAwQ0E5NTlCMDEwMDBEMDEwMENBRjYKKzoxMDRDQTAwMEM1MzEwMTAwMDAwMDAwNUY5NTgzMDEwMDIyODMwMENBMjYKKzoxMDRDQjAwMEM1QjEwMDAwREY2RjAwQ0E5NTlCMDEwMDAwMDAwMDU1RTAKKzoxMDRDQzAwMDk1OTMwMTAwMDAwMDAwQ0FDN0IxMDEwMDIyODMyMjVGNTIKKzoxMDRDRDAwMDk1N0YwMDAwMEQwMTAwNDA4MTMyMDEwMDAwMDAwMDVGNUYKKzoxMDRDRTAwMDk1ODMwMTAwMjI4MzAwQ0FDN0IxMDAwMDIyODMwMENBNTUKKzoxMDRDRjAwMEM5QjEwMDAwMjI4MzAwQ0FDQkIxMDAwMDIyODMwMENBRTAKKzoxMDREMDAwMENEQjEwMDAwMjI4MzAwQ0FDRkIxMDAwMDAwMDAyRTQyQzYKKzoxMDREMTAwMDgxRTAwMTAwOTgxNDAwNDA0OEM5MDEwMDIyODMwMENBQzQKKzoxMDREMjAwMEUxQjEwMDAwMDAwMDAwNDAwOUIxMDEwMDIwMDAwMEE2MzAKKzoxMDREMzAwMDgyQjAwMTAwQTQ4MUEyNUUwQjdEMDAwMDAwODAwMDQxRDIKKzoxMDRENDAwMDA4OTkwMTAwQTY4MUEyNUUwQjdEMDAwMDIwODAwMEE2Q0MKKzoxMDRENTAwMDA4QjEwMTAwQTg4MTlGODU4MjMwMDAwMDAwMDAwMDMwNkEKKzoxMDRENjAwMDgzODQwMTAwREQ4MTIyMzA4MzZDMDAwMEE3ODFBMjRGODMKKzoxMDRENzAwMDBCN0QwMDAwMDAwMDAwNDEyMUIzMDEwMDAyODAwMEE2NkQKKzoxMDREODAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDEwMDAwMDQxMDEKKzoxMDREOTAwMDg0RTQwMTAwMDM4MDAwQTY4MkIwMDEwMDI4ODIwMDQwNjQKKzoxMDREQTAwMDgxMzIwMTAwRjBGRjAwNDE4Njg4MDEwMDAwMDAwMDQzQ0QKKzoxMDREQjAwMDg0OTQwMTAwMEYwMDAwQTY4NkIwMDEwMDEwQzQwMDQzRDcKKzoxMDREQzAwMDg2OTgwMTAwQkQ4MUEyNDM4NDZDMDAwMDAwMDAwMDQzNkUKKzoxMDRERDAwMDIxQjMwMTAwMjAwMDAwQTY4MkIwMDEwMDFDMDAwMDQxQTgKKzoxMDRERTAwMDgyREMwMTAwQkE4MUEyNUUwQjdEMDAwMDA0MDAwMDQxNUMKKzoxMDRERjAwMDA4OTkwMTAwQ0Y4MTAwNDA4MUIyMDAwMDQxMDEwMEE2NjYKKzoxMDRFMDAwMDg2QjAwMTAwNTAwQzAwNDM4Njk4MDEwMEMyODFBMjQzODUKKzoxMDRFMTAwMDg0NkMwMDAwMDAwMDAwNDEyMUIzMDEwMENGODEwMDQwRkMKKzoxMDRFMjAwMDgxQjIwMDAwNDEwMTAwQTY4NkIwMDEwMDYwMEMwMDQzODEKKzoxMDRFMzAwMDg2OTgwMTAwQ0Y4MUEyNDM4NDZDMDAwMDAwMDAwMDQyRUMKKzoxMDRFNDAwMDIxQjMwMTAwMTg4MDAwQTY4MkIwMDEwMDI4ODIwMDQwMzIKKzoxMDRFNTAwMDgxMzIwMTAwRkZGRjAwNDE4Mjg4MDEwMDAwNzcwMDQxOUMKKzoxMDRFNjAwMDgyOEMwMTAwMDEwMjAwNDE4Mjk4MDEwMDIwMDAwMDQxNzMKKzoxMDRFNzAwMDgyREMwMTAwMTgwMDAwNDE4MkRDMDEwMENEODFBMjVFQ0QKKzoxMDRFODAwMDBCN0QwMDAwMDAwMDAwNDEwOEIxMDEwMDIwMDAwMEE2RDkKKzoxMDRFOTAwMDgyQjAwMTAwRDA4MUEyNUUwQjdEMDAwMDQwMTMwMDQxNzIKKzoxMDRFQTAwMDA4OTkwMTAwRDg4MTIyNDMyMTZGMDAwMDIwMDAwMEE2NEMKKzoxMDRFQjAwMDgyQjAwMTAwMTIwMDAwNDE4MkRDMDEwMEQ1ODFBMjVFQjcKKzoxMDRFQzAwMDBCN0QwMDAwMDAwNDAwNDEwODk5MDEwMEYzODEwMDQwQkYKKzoxMDRFRDAwMDgxQjIwMDAwMjAwMDAwQTY4MkIwMDEwMDE5MDAwMDQxNEMKKzoxMDRFRTAwMDgyREMwMTAwREE4MUEyNUUwQjdEMDAwMDAwQTAwMDQxOUYKKzoxMDRFRjAwMDA4OTkwMTAwRjM4MTAwNDA4MUIyMDAwMDAwMDAwMDQ0RTUKKzoxMDRGMDAwMDIxQjMwMTAwMDAwMDAwNDA4M0IwMDEwMDAwMDAwMDVGRjkKKzoxMDRGMTAwMDgzOTAwMTAwMDAwMDAwNUU4MzkwMDEwMDAwMDAwMDU3QjQKKzoxMDRGMjAwMDgzOTAwMTAwMDAwMDAwNDFDMkIxMDEwMDBDMDEwMDQwNkIKKzoxMDRGMzAwMDgxMzIwMTAwMDAwMDAwNUY4MzgwMDEwMDAwMDAwMDQxMTkKKzoxMDRGNDAwMEMyQjEwMTAwMEMwMTAwNDA4MTMyMDEwMDIwMDAwMEE2MjYKKzoxMDRGNTAwMDgyQjAwMTAwMDQwMDAwNDE4MkRDMDEwMDIwMDAwMDQxMTkKKzoxMDRGNjAwMDA4OTkwMTAwMjAwMDAwQTY4MkIwMDEwMDExMDAwMDQxNTQKKzoxMDRGNzAwMDgyREMwMTAwRUM4MUEyNUUwQjdEMDAwMDAxMDAwMDQxOUIKKzoxMDRGODAwMDA4OTkwMTAwMjAwMDAwQTY4MkIwMDEwMEVGODFBMjVFMTYKKzoxMDRGOTAwMDBCN0QwMDAwNDAxMzAwNDEwODk5MDEwMDAxMDAwMEE2QUMKKzoxMDRGQTAwMDgyQjAwMTAwNDAwMDAwNDEyRTk5MDEwMDAwMDA4MDQwQzUKKzoxMDRGQjAwMDgxQjIwMTAwMjAwMDAwQTY4MEIwMDEwMDAwMDAwMENBRkMKKzoxMDRGQzAwMDgxOTQwMTAwRjY4MUEyNUUwQjdEMDAwMDIyODMwMDQwRTcKKzoxMDRGRDAwMDA4QjEwMDAwQzgxNDJFQkI4NUIwMDEwMEY5ODFBMjVFQTMKKzoxMDRGRTAwMDBCN0QwMDAwMDAwMDAwNDA4N0IwMDEwMDA4ODIyMjQzRDIKKzoxMDRGRjAwMDIxNkYwMDAwMTc4MjIyNDQyMTZGMDAwMDExODAwMEE2NUIKKzoxMDUwMDAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDFGODIyMjRBQzIKKzoxMDUwMTAwMDgzN0MwMDAwMDAwMDAwNDA4NzkwMDEwMDAzODIyMjRENDUKKzoxMDUwMjAwMDgzN0MwMDAwMDAwMDAwNDE4NzkwMDEwMDA1ODIyMjRGMzAKKzoxMDUwMzAwMDgzN0MwMDAwMDAwMDAwNDM4NzkwMDEwMDA3ODIyMjRFMUQKKzoxMDUwNDAwMDgzN0MwMDAwMDAwMDAwNDI4NzkwMDEwMDFGODIwMDQwMjYKKzoxMDUwNTAwMDgxQjIwMDAwMDE4MDAwQTY4MkIwMDEwMDI4ODIwMDQwRDkKKzoxMDUwNjAwMDgxMzIwMTAwMDE4MDAwQTY4MkIwMDEwMDI4ODIwMDQwNDgKKzoxMDUwNzAwMDgxMzIwMTAwMUY4MjIyNDI4MzdDMDAwMDAwMDAwMDQwMzgKKzoxMDUwODAwMDg3OTAwMTAwMUM4MDAwQTY4MkIwMDEwMDI4ODIwMDQwQTkKKzoxMDUwOTAwMDgxMzIwMTAwMTI4MjIyNDU4MzdDMDAwMDAwMDAwMDQxMjEKKzoxMDUwQTAwMDg3OTAwMTAwMTQ4MjIyNDQ4MzdDMDAwMDAwMDAwMDQzQUEKKzoxMDUwQjAwMDg3OTAwMTAwMTY4MjIyNDM4MzdDMDAwMDAwMDAwMDQyOUEKKzoxMDUwQzAwMDg3OTAwMTAwMUY4MjAwNDA4MUIyMDAwMDAxODAwMEE2OEQKKzoxMDUwRDAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDAxODAwMEE2RDgKKzoxMDUwRTAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDFGODIyMjQyRUEKKzoxMDUwRjAwMDgzN0MwMDAwMDAwMDAwNDA4NzkwMDEwMDAwMDAwMDQzMTYKKzoxMDUxMDAwMDg3OTAwMTAwMDAwMDAwNDE4NzkwMDEwMDAwODAwMEE2MDgKKzoxMDUxMTAwMDgyQjAwMTAwMjg4MjAwNDA4MTMyMDEwMDIzODIyMjRCQUMKKzoxMDUxMjAwMDgzN0MwMDAwMDAwMDAwNDA4NzgwMDEwMDAwMDAwMDQzRjUKKzoxMDUxMzAwMEUwQjEwMTAwRkY3RjAwQTJBMDhCMDEwMDAwMDAwMDQ0NEQKKzoxMDUxNDAwMEE1QjMwMTAwQjg4MDAwQ0FBNzMzMDEwMDQxODEwMDQwMjcKKzoxMDUxNTAwMDgxQjIwMDAwMjAwMDAwNDE4MkRDMDEwMDI5ODJBMjVFQjEKKzoxMDUxNjAwMDBCN0QwMDAwMDAwMDAwNDEwOEIxMDEwMDJCODI5Rjg1RUIKKzoxMDUxNzAwMDgyMzAwMDAwMDAwMDgwNDA4MUIyMDEwMDMwODIxNEY3Q0MKKzoxMDUxODAwMDgxMzAwMDAwMzA4MkEyNDlGRDdGMDAwMDAwMDAwMDQ4MEQKKzoxMDUxOTAwMEZEOTMwMTAwMzM4MjE1Rjg4MTE0MDAwMDMzODJBMjRBODYKKzoxMDUxQTAwMEZEN0YwMDAwMDAwMDAwNDhGRDkzMDEwMDM1ODJBMkM4ODkKKzoxMDUxQjAwMDgxMzIwMDAwNDAwMDAwNDA4MERDMDEwMDAwMTAwMDQwMEYKKzoxMDUxQzAwMDgwREMwMTAwMDAwMDAwNDBFRkIzMDEwMDM3ODI0MjQwNjQKKzoxMDUxRDAwMEYxMzMwMDAwNDM4MTAwNDA2ODk3MDAwMDIyODMwMEJCNDgKKzoxMDUxRTAwMDZCQjMwMDAwMjI4MzAwQkJCMUIzMDAwMDIyODMwMDQwRjgKKzoxMDUxRjAwMDgxQjIwMDAwMDAwMzAwNDA4MTk4MDEwMDAwMDAwMDQwREYKKzoxMDUyMDAwMDE4QjEwMTAwODAwMDAwNDA4Mzk4MDEwMDAwMTkwMDQwOUYKKzoxMDUyMTAwMDQ1OTkwMTAwMDAwMDQyNDA4MUIyMDEwMDAwMDA0M0ZGQjcKKzoxMDUyMjAwMEYxQjEwMTAwMDAwMDAwRkZGMUIxMDEwMDAwMDAwMDQxRjgKKzoxMDUyMzAwMDgxQzAwMTAwMDAwMDAwNDAxOEIxMDEwMDQwODJBMjQxN0QKKzoxMDUyNDAwMDgzNTAwMDAwMDAxNjAwNDA0NTk5MDEwMDAwMTkwMDQwRkQKKzoxMDUyNTAwMDQzOTkwMTAwMDAwMDAwNDc0M0MxMDEwMDAwMDAwMDQwRTUKKzoxMDUyNjAwMDgzQjAwMTAwMDAwMDAwRjM4MEIwMDEwMDAwMDAwMDVCOEIKKzoxMDUyNzAwMDgxRDAwMTAwMDAwMDAwNDE4MEQwMDEwMDAwMDAwMDQwMEEKKzoxMDUyODAwMEY2QjEwMTAwMDAwMDAwNUI0M0MxMDEwMDAwMDAwMDQxRDUKKzoxMDUyOTAwMDgzQzAwMTAwNEE4MkEyNTQ4MzZDMDAwMDAwMDAwMDQwRDkKKzoxMDUyQTAwMEY3QjEwMTAwMDAwMDAwNDE4M0MwMDEwMDUxODJBMjA2NTUKKzoxMDUyQjAwMDgzNkMwMDAwMDAwMDgwNDA4MUIyMDEwMDAwMTYwMDQwQjUKKzoxMDUyQzAwMDQzOTkwMTAwODAxNjJFMDY4M0IwMDEwMDM2MDAwMEZCRDIKKzoxMDUyRDAwMEY2QTkwMTAwNTc4MkEyNDE4MzUwMDAwMDIyMDAwMDQwM0QKKzoxMDUyRTAwMDgzOTgwMTAwMDAwMDAwRkJGNkIxMDEwMDVBODJBMjQxNDAKKzoxMDUyRjAwMDgzNTAwMDAwNjIwMDAwNDA5NTk4MDEwMERDOUYwMDQwNTAKKzoxMDUzMDAwMDgxMzIwMTAwMDAxNjJEMDY4M0IwMDEwMDgwMTYwMDQwOTYKKzoxMDUzMTAwMDQ1OTkwMTAwNUMwMDAwRkJGNkE5MDEwMDYwODJBMjQxRjIKKzoxMDUzMjAwMDgzNTAwMDAwMDAwMDAwNzBGOUIxMDEwMDAwMDAwMDcxMUUKKzoxMDUzMzAwMEY5QjEwMTAwMDAwMDAwNzJGOUIxMDEwMDAwMDAwMDczMzIKKzoxMDUzNDAwMEY5QjEwMTAwMDAwMDAwNzRGOUIxMDEwMDU0MDAwMDQwRkYKKzoxMDUzNTAwMDk1OTgwMTAwREM5RjAwNDA4MTMyMDEwMDAwMDAwMDcwNDAKKzoxMDUzNjAwMDk1QjAwMTAwNkM4MjIyNzBCNTZGMDAwMDAwMDA4MDQxOTIKKzoxMDUzNzAwMDk3QjAwMTAwMDAwMDgwNDA5N0IwMDEwMEM0ODBBMjQyQjUKKzoxMDUzODAwMDk3NkYwMDAwQjYwMzAwNDBBMTk5MDEwMDAwMDAyRjQyNzIKKzoxMDUzOTAwMDk5QjMwMTAwNzg4MjIyNDQ4MTZDMDAwMDgwODIyMjQ4MDcKKzoxMDUzQTAwMDgxNkMwMDAwN0E4MjIyNEM4MTZDMDAwMDg1ODIyMjUwNDAKKzoxMDUzQjAwMDgxNkMwMDAwODY4MjIyNTQ4MTZDMDAwMDg4ODIyMjU4MTEKKzoxMDUzQzAwMDgxNkMwMDAwOEQ4MjIyNUM4MTZDMDAwMDUwMDEwMDQwRTUKKzoxMDUzRDAwMDgxQjIwMDAwMDAwMDAwQkMwOUIwMDEwMDIyODMwMENBQjUKKzoxMDUzRTAwMDAxQjAwMDAwMDAwMDAwNDAwM0IwMDEwMDAwMDAwMDQxRDcKKzoxMDUzRjAwMEYzODMwMTAwN0U4MkEyNDIwNTZDMDAwMDAwMDAwMDQxQTAKKzoxMDU0MDAwMDA1QjAwMTAwMjI4MzIyQ0EwNzE0MDAwMDIyODMwMDQ2NEYKKzoxMDU0MTAwMEYzOTMwMDAwMjI4MzIwNDM5NTZGMDAwMDIyODM4MENBMEIKKzoxMDU0MjAwMDA1MzAwMDAwMjI4MzIyMDE4MDMwMDAwMEM0ODBBMjQ4QTEKKzoxMDU0MzAwMERCN0QwMDAwMjI4MzAwQ0JEQjkxMDAwMDU3MDEwMEJDMjQKKzoxMDU0NDAwMEFCQjMwMDAwMDAwMDAwQkNCMUIzMDEwMDIyODMwMENBNkUKKzoxMDU0NTAwMENGQjMwMDAwRkYwMDAwQ0E4MTg4MDEwMDIyODNBMjQwNzAKKzoxMDU0NjAwMDc0N0QwMDAwNjAwMDIwNDA2MDk5MDEwMDhBODJBOEIxMkMKKzoxMDU0NzAwMDgyMzAwMDAwODk4MjAwNDA4MUIyMDAwMDIyODMwMENBOEQKKzoxMDU0ODAwMDc5QjMwMDAwMDAwMDAwNEU4MUIwMDEwMDAwMDAwMDQzMkQKKzoxMDU0OTAwMENCODMwMTAwMDAwMDQ1NDA4MUIyMDEwMDkwODJBMjQxMEYKKzoxMDU0QTAwMDgxNTAwMDAwMDAwMDQ1NDA4MUIyMDEwMDAwMDA0NTQwRUQKKzoxMDU0QjAwMDgxQjIwMTAwOUI4MjkxODI4MjMwMDAwMDAwMDAwMDhBNEMKKzoxMDU0QzAwMDgwQjAwMTAwQUU5RjAwNDA4MENFMDEwMDk5ODJBNjQwQ0UKKzoxMDU0RDAwMDgxMzIwMDAwOUI4MjU2NDA4MUIyMDAwMEI2MDMwMDQwM0EKKzoxMDU0RTAwMEExOTkwMTAwMDAwMDAwNTMwNzkwMDEwMEI2MDMwMDQwOUQKKzoxMDU0RjAwMEExOTkwMTAwMDAwMDAwNTIwNzkwMDEwMEQ4OUYwMDQxQ0YKKzoxMDU1MDAwMDhCQjMwMDAwMDAwMDAwNEU4MUIwMDEwMDAwMDAwMDQyOUIKKzoxMDU1MTAwMENEODMwMTAwMDAwMDQ2NDA4MUIyMDEwMEEwODJBMjQxN0IKKzoxMDU1MjAwMDgxNTAwMDAwMDAwMDQ2NDA4MUIyMDEwMDAwMDA0NjQwNkEKKzoxMDU1MzAwMDgxQjIwMTAwQUI4MjkxODE4MjMwMDAwMDAwMDAwMDg5QkQKKzoxMDU1NDAwMDgwQjAwMTAwQUU5RjAwNDA4MENFMDEwMEE5ODJBNjQwM0QKKzoxMDU1NTAwMDgxMzIwMDAwQUI4MjU1NDA4MUIyMDAwMEI2MDMwMDQwQUEKKzoxMDU1NjAwMEExOTkwMTAwMDAwMDAwNTIwNzkwMDEwMEI2MDMwMDQwMUQKKzoxMDU1NzAwMEExOTkwMTAwMDAwMDAwNTMwNzkwMDEwMEQ4OUYwMDQxNEQKKzoxMDU1ODAwMDhCQjMwMDAwQjEwMzAwNDBBMTk5MDEwMEM0MTQyRjQwNjcKKzoxMDU1OTAwMDk5QjMwMTAwNTcwMTAwNDA0OUIxMDAwMEEwOTQyRTQzODcKKzoxMDU1QTAwMDk3QjAwMTAwMDAwMDAwNDBGMUIxMDEwMEIyODJBMjQxQjkKKzoxMDU1QjAwMDk3NTAwMDAwNTA5NTIwNDBFMUIxMDEwMEFDOTQyRTQzN0IKKzoxMDU1QzAwMDk3QjAwMTAwMDAwMDAwNDBGMUIxMDEwMEI2ODJBMjQxOTUKKzoxMDU1RDAwMDk3NTAwMDAwMDAwMDgwNDA4MUIyMDEwMEFFMDMwMDQwRkYKKzoxMDU1RTAwMEEzOTkwMTAwMDAwMDAwNDA4MUIwMDEwMDYwMTUwMDQwNTcKKzoxMDU1RjAwMDg1OTgwMTAwMDgwMDAwNDA0MEU0MDEwMDAwMDAwMDU5QzcKKzoxMDU2MDAwMDQxOTQwMTAwMDAwMDAwNTA0MUUwMDEwMDAwMDAwMDQyMTAKKzoxMDU2MTAwMDQwOTQwMTAwMDAwMDAwNTc0MTkwMDEwMDAwMDAwMDQxNEIKKzoxMDU2MjAwMDgxQzAwMTAwMDAwMEEzNDI4MTZDMDEwMDAwMDAwMDQxMjQKKzoxMDU2MzAwMEEzQzEwMTAwQkM4MkEwNDI4MTZDMDAwMEJDODIwMDUwNkEKKzoxMDU2NDAwMDg1QzAwMDAwMDE4M0EyNDEwMTdEMDAwMENGODIyMjU4NjUKKzoxMDU2NTAwMDczN0QwMDAwNzgwMDAwNDA2MTk5MDEwMEM3ODJBOEIxMDUKKzoxMDU2NjAwMDlDMzAwMDAwMzAwMDM4NDU5REUwMDEwMDA0MDBBMjVGM0UKKzoxMDU2NzAwMDFGN0MwMDAwMDQwMDIyNUUxRjdDMDAwMDAwQzAwMEE2MEEKKzoxMDU2ODAwMDFFQTQwMTAwMDEwMDAwMEUxMEM5MDAwMENGODIzM0M0MjcKKzoxMDU2OTAwMDgxMzAwMDAwRDI4MkExQUQ5RDIwMDAwMEM2ODIxMzQwNUYKKzoxMDU2QTAwMDgxQjIwMDAwMDAwMDEzNEU1QTgzMDEwMDMwMDAzODQ1REIKKzoxMDU2QjAwMDlERTAwMTAwMDQwMEEyNUYxRjdDMDAwMDA0MDBBMjVFQzgKKzoxMDU2QzAwMDFGN0MwMDAwMDQwMEEyNDAwNTZDMDAwMEREODIyMkFCQkMKKzoxMDU2RDAwMDgwMDQwMDAwREI4MkEyNDAwMTdEMDAwMEREODIyMjVGQTkKKzoxMDU2RTAwMDU3N0QwMDAwMTI4ODAwNUYxRkI0MDAwMEREODIyMjVFM0IKKzoxMDU2RjAwMDU3N0QwMDAwODA4ODAwNUYxRkI0MDAwMEUzODIyMjU0QzEKKzoxMDU3MDAwMDczN0QwMDAwNzQwMDAwNDA2MTk5MDEwMEREODJBOEIxNDIKKzoxMDU3MTAwMDAwMzAwMDAwMDAwMDAwNUYxRkI0MDEwMEY3ODRBMjVGQUEKKzoxMDU3MjAwMDAxN0MwMDAwOTU4NzAwNDA4MUIyMDAwMEU1ODJBMjVGMDUKKzoxMDU3MzAwMDU5MjcwMDAwRTc4MkEyNUM3MzdEMDAwMEVFODJBMjVFMjIKKzoxMDU3NDAwMDczN0QwMDAwRkE4MjIyNUM3MzdEMDAwMEZCODIzNzQwOEIKKzoxMDU3NTAwMDgxMzIwMDAwN0MwMDAwNDA2MTk5MDEwMEU4ODJBOEIxMUMKKzoxMDU3NjAwMDM2MzAwMDAwN0MwMDAwNDA2MTk5MDEwMEVBODJBOEIxNTcKKzoxMDU3NzAwMDAwMzAwMDAwMUYwMDAwMDAwMjg4MDEwMDM3ODUxNzVGMUQKKzoxMDU3ODAwMDFGQjQwMDAwRkI4MjM0NDA4MTMyMDAwMDdFMDAwMDQwRTQKKzoxMDU3OTAwMDYxOTkwMTAwRUY4MkE4QjExMjMwMDAwMEY3ODI1MjIxMTYKKzoxMDU3QTAwMDEzMDQwMDAwMDAwMDE0NDEyRkMzMDEwMDAwMDAwMDVGM0IKKzoxMDU3QjAwMDFGQjQwMTAwRkYzRjAwMDkwMDhDMDEwMDAwMDAwMDQzRkUKKzoxMDU3QzAwMDAxRjAwMTAwNEY4MzAwMzQxMzg0MDAwMEZGM0YxNDA5RUYKKzoxMDU3RDAwMDAwOEMwMTAwMDAwMDAwNUYxRkI0MDEwMEM0ODMwMDQzN0YKKzoxMDU3RTAwMDAxRjAwMDAwMDAwMDAwNDA4MUIyMDEwMEZCODIzMzQwNjQKKzoxMDU3RjAwMDgxMzIwMDAwMDQwMEEyNEU1QTdGMDAwMDA3MDAwMDRFRDQKKzoxMDU4MDAwMDgwRTQwMTAwMDAzOTAwNDA4MEM4MDEwMDA0MDBBMjQwOEIKKzoxMDU4MTAwMDA2NkMwMDAwQzY4MjEzNEU1QTkzMDAwMEU3ODdBMjQ4MjgKKzoxMDU4MjAwMEZEN0YwMDAwMDU4MzAyRTY4MTMyMDAwMDA2ODM4M0U1RTgKKzoxMDU4MzAwMDgxMzIwMDAwOEU4MjAwNDI5N0IzMDAwMDlFODIwMDQyQjcKKzoxMDU4NDAwMDk3QjMwMDAwMDk4MzIyNDZGMzdGMDAwMDBDODNBMjQxMzYKKzoxMDU4NTAwMEYzN0YwMDAwQzY4MDAwNDI5NzMzMDEwMDBDODMyMjQ0OEUKKzoxMDU4NjAwMEYzN0YwMDAwMEM4M0EyNDFGMzdGMDAwMEM2ODAwMDZGMkQKKzoxMDU4NzAwMDk3MzMwMTAwMDQwMEEyQUM4MDMyMDAwMDExODMyMjVBNDkKKzoxMDU4ODAwMDczN0QwMDAwN0EwMDAwNDA2MTk5MDEwMDBFODNBOEIxODkKKzoxMDU4OTAwMDdFMzEwMDAwMDEwMDAwQ0YxMUM5MDAwMDE3ODNBMjQwMzMKKzoxMDU4QTAwMDkzN0YwMDAwMTc4MzIyNDQ5MzdGMDAwMDEzODM0MkE1NTcKKzoxMDU4QjAwMDgwMzAwMDAwMTY4M0EyNDA5MzdGMDAwMDM4ODMxQTQwOTYKKzoxMDU4QzAwMDkzOTMwMDAwMDAwMDFBNDA4MUIyMDEwMERGODBBMjQwRTMKKzoxMDU4RDAwMDczN0QwMDAwRTI4NzIyNDQyMTZGMDAwMEQ5ODcyMjQwQjcKKzoxMDU4RTAwMDY1N0QwMDAwMDAwNUEyNUI3MzdEMDAwMDA0MDBBMjQ5RjUKKzoxMDU4RjAwMDMzN0QwMDAwMjE4MzIyNDgzMzdEMDAwMEZGMDEwMDk5QTEKKzoxMDU5MDAwMDgwRDgwMTAwMDAwMDAwNTA4MUUwMDEwMEE4OTgyRjQwREQKKzoxMDU5MTAwMDMzQjEwMTAwMDAwMDAwNDBFMEMxMDEwMDAxODMwMDQwRkMKKzoxMDU5MjAwMDgxQjIwMDAwQzY4MjAwNDA4QkIzMDAwMDA0MDBBMjVFN0EKKzoxMDU5MzAwMDFGN0MwMDAwMDQwMDIyNUYxRjdDMDAwMDAwMDAwMDVFNEUKKzoxMDU5NDAwMDFGOTAwMTAwQzY4MjAwNUYxRjgwMDAwMDA0MDBBMjVFNUQKKzoxMDU5NTAwMDFGN0MwMDAwMDQwMDIyNUYxRjdDMDAwMDAwMDAwMDVFMkUKKzoxMDU5NjAwMDFGOTAwMTAwMDAwMDAwNUYxRjgwMDEwMDAwMDAwMDU4MzAKKzoxMDU5NzAwMDYxQjEwMTAwMDAwMDAwNEU2MkIxMDEwMEM2ODIyODQwMDIKKzoxMDU5ODAwMDgxMzIwMDAwMkM4MzAwNDA4MUIyMDAwMDAwMDAwMDQwMDIKKzoxMDU5OTAwMDBGQjAwMTAwMDQwMEEyNUUxRjdDMDAwMDA0MDAyMjVGMjMKKzoxMDU5QTAwMDFGN0MwMDAwMzI4MzMzNDAxRjMwMDAwMDA0MDBBMjRFRjEKKzoxMDU5QjAwMDVBN0YwMDAwMDcwMDAwNEU4MEU0MDEwMDAwMzkwMDQwREIKKzoxMDU5QzAwMDgwQzgwMTAwMDQwMEEyNDAwNjZDMDAwMEM2ODIxMzRFOEQKKzoxMDU5RDAwMDVBOTMwMDAwM0E4M0EwQ0U4MTUwMDAwMDREODNBMENEQTEKKzoxMDU5RTAwMDgxNkMwMDAwMDAwMDAwQTU5Q0IzMDEwMDAwMDAwMEIxMjQKKzoxMDU5RjAwMDgxQjAwMTAwNEQ4MzIyQjU4MTE0MDAwMDgwMTUyRjQwMzUKKzoxMDVBMDAwMDQ5QjEwMTAwM0U4MzQyNDA4MTMyMDAwMDAwMDA2MEI0OTEKKzoxMDVBMTAwMDY1OTcwMTAwRDAxNTJFNDA2OUIzMDEwMDAwMDAxQTQ0QkIKKzoxMDVBMjAwMDkzODMwMTAwMDQwMDIyNDBFMTZEMDAwMDFBMDAwMEEyRUYKKzoxMDVBMzAwMDgwREMwMTAwMDAwMDAwNDRGMUIxMDEwMDAwMDAwMEIxNzEKKzoxMDVBNDAwMEYxQjEwMTAwMDAwMDAwQjVGMUIxMDEwMDA1MDAwMDQwMTYKKzoxMDVBNTAwMDYxOTkwMTAwODAwMDAwNDA2MkREMDEwMDQ4ODNBOEExMzcKKzoxMDVBNjAwMEUwMzEwMDAwMTc4MzAwODg5RUIzMDAwMDE3ODNBMjQxMzUKKzoxMDVBNzAwMDY3NkYwMDAwMTc4MzAwNkZEQjkxMDAwMDREODM0MjQwODkKKzoxMDVBODAwMDgxMzIwMDAwMTc4MzFBNDA5MzgzMDAwMDAwMDQwMDQwMTUKKzoxMDVBOTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDA0MDBBMjVBODcKKzoxMDVBQTAwMDAxN0MwMDAwMDQwMDIyNDAwMTZDMDAwMDAwOTkwMDA5MDQKKzoxMDVBQjAwMDQ2QzkwMTAwM0YwMDAwRjMwQzg4MDEwMDVDODNBNjQyNDgKKzoxMDVBQzAwMDEzNjAwMDAwOUI5NjAwOTUwMzMwMDEwMDU3ODM2MTQwRUUKKzoxMDVBRDAwMDgxMzIwMDAwNzUwMDAwNDA2MTk5MDEwMDU4ODNBOEIxMkYKKzoxMDVBRTAwMDBDMzAwMDAwQTk5NjcxMTA5NDMwMDEwMDVEODMwMDU4QkQKKzoxMDVBRjAwMDFGOTAwMDAwOEQ5NjAwOTUwMzMwMDEwMDIzODMwMDg4REQKKzoxMDVCMDAwMDFDQjAwMDAwMDAwMDJEMDM0OEIxMDEwMDA0MDAyREYwN0UKKzoxMDVCMTAwMDJFQjAwMTAwODAwNDAwMTc5Njg4MDEwMDA0MDBBNjQwMDIKKzoxMDVCMjAwMDgxMzIwMDAwNEFDMTAwMTc5NkQ4MDEwMDA0MDBBNjQwNDcKKzoxMDVCMzAwMDgxMzIwMDAwRUUwNzAwNDA5Nzk4MDEwMDY4ODMyMzRCRjQKKzoxMDVCNDAwMEU0NkQwMDAwNjg4MzIyNEJGRDdGMDAwMDAwMDAwMDQwRjAKKzoxMDVCNTAwMDFGOTAwMTAwMjIwMDJGNDA4MUIyMDEwMDZCODM4MzE3NDgKKzoxMDVCNjAwMDgwMzIwMDAwMjYwMDAwNDA0Nzk5MDEwMDZEODM4NTE3QjAKKzoxMDVCNzAwMDgwMzIwMDAwMDAwMDAwNDg0N0MxMDEwMDczODMyMjU1QjUKKzoxMDVCODAwMDJGN0MwMDAwMDAwMDAwNDI0M0QxMDEwMDBGMDAwMEZBMEEKKzoxMDVCOTAwMDk2ODgwMTAwMDAwMDAwNDI5N0UwMDEwMDAwMDAwMDQyRUEKKzoxMDVCQTAwMDk3RDAwMTAwNzQ4MzAwNEI0NEMxMDAwMDEyMDAwMEEyOTIKKzoxMDVCQjAwMDQ0QzkwMTAwMjgwMDAwRjYwMkNDMDEwMDBBMDAwMEExM0YKKzoxMDVCQzAwMDQyQzkwMTAwMDAwMDAwRjgxNkIwMDEwMDAwMDAyOEYwRjIKKzoxMDVCRDAwMDEwQjAwMTAwMDAwMDAwRjAxQUIwMDEwMDAwMDAwMEEyQTcKKzoxMDVCRTAwMDJBQjAwMTAwQzAyODNDNDYwREUwMDEwMDAwMDAyRDQ0MTEKKzoxMDVCRjAwMDk1QjAwMTAwODA4M0EyRjgwRTMwMDAwMDkwODMyMjQxMEUKKzoxMDVDMDAwMDk1NTAwMDAwMDAwMDJENTA0OUMxMDEwMDdDODMwMDQwRTgKKzoxMDVDMTAwMDgxQjIwMDAwN0Q4M0EyRjgxNjZDMDAwMDdEODNBMkY4OUIKKzoxMDVDMjAwMDEwNkMwMDAwN0Q4M0EyRjAxQTZDMDAwMDhFODMyMjU4NTUKKzoxMDVDMzAwMDFGN0MwMDAwMDA5OTNGNDIxM0YwMDEwMDg1ODM2NTQwRkUKKzoxMDVDNDAwMDgxMzIwMDAwODk4M0EyRjM3NDA2MDAwMDAwMDAwMDA2ODAKKzoxMDVDNTAwMEU2OTUwMTAwOEU4Mzc1NDA4MUIyMDAwMDAwMDAwMDA2QzkKKzoxMDVDNjAwMDk2QjAwMTAwM0YwMDc1RjMwQzg4MDEwMDAwMDAwMDU1NUMKKzoxMDVDNzAwMDYxQjEwMTAwMDAwMDAwNEI2MkIxMDEwMDhDODNBODQwQkIKKzoxMDVDODAwMDgxMzIwMDAwOEU4MzY3NDA4MTMyMDAwMDk2ODM3NzQxMjUKKzoxMDVDOTAwMDJEQzMwMDAwOTQ4MzIyNTgxRjdDMDAwMDAwMDAwMDU1OTMKKzoxMDVDQTAwMDYxQjEwMTAwMDAwMDAwMDY2MkIxMDEwMDkyODNBODQwQ0EKKzoxMDVDQjAwMDgxMzIwMDAwOTQ4MzY3NDA4MTMyMDAwMEQ1ODM3NzQxQjAKKzoxMDVDQzAwMDJEQzMwMDAwMDMwMDAwMDcxQUY0MDEwMDE4OTUwMDA3MTcKKzoxMDVDRDAwMDE2MzAwMTAwQTg4MzIyNDE4MTZDMDAwMDlDODMyMjQyN0YKKzoxMDVDRTAwMDgxNkMwMDAwMjM4MzAwODgxQ0IwMDAwMEE3ODMyMjVGMjIKKzoxMDVDRjAwMDBGN0MwMDAwNEU5NjAwNUYwMTEwMDEwMEEyODMyMjQwM0QKKzoxMDVEMDAwMDk1NkMwMDAwMDQ4MDAwMDM0MkM5MDEwMDAwMDAwMEYyMEQKKzoxMDVEMTAwMDAyQjAwMTAwQTU5NTAwNTI5NTMwMDEwMEFDOTUwMDRCRjIKKzoxMDVEMjAwMDAyQjAwMDAwMDAwMDAwNUYwRjgwMDEwMDAxMDQwMDQwOEQKKzoxMDVEMzAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMEI0OTYwMDA5OTEKKzoxMDVENDAwMDk2MzAwMTAwRjA4NzAwNDAwRkIwMDAwMEI3ODNBMjVBRTAKKzoxMDVENTAwMDFGN0MwMDAwMDQwMEEyNUExRjdDMDAwMDAwQjUwMDBENEIKKzoxMDVENjAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDAwQjcwMDBEQ0YKKzoxMDVENzAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDcwOTQwMDQwM0YKKzoxMDVEODAwMDgxMzIwMTAwQjc4MzIyMjA4NTZDMDAwMEIyODM5QzBGMTIKKzoxMDVEOTAwMDgwMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDhEOTUwMDVDRDkKKzoxMDVEQTAwMDFGMDAwMTAwQzg5NzAwNDI2MTMxMDEwMDIzODMwMDg4NzEKKzoxMDVEQjAwMDFDQjAwMDAwOTAwNDAwMDc5NjMwMDEwMDAwMDAyRDA1ODMKKzoxMDVEQzAwMDQ4QjEwMTAwMDQwMEEyNEJFMTdEMDAwMDA0MDBBMjVDODgKKzoxMDVERDAwMDFGN0MwMDAwMDAwMDJEMDU0OEIxMDEwMEJCODM4MkYwNEMKKzoxMDVERTAwMDE4MzAwMDAwNkM4OTAwNDU4RkIwMDAwMDI4MjAwMEE2MDQKKzoxMDVERjAwMDk2QjAwMTAwQzE4MzIyMTc5NjA0MDAwMDM0MDQwMDQwQ0QKKzoxMDVFMDAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDVCOTcwMDRCRDYKKzoxMDVFMTAwMDk1MzAwMTAwNkM4OTAwNEI4RkIwMDAwMDVEOTYwMDAzNDcKKzoxMDVFMjAwMDQ4MzEwMTAwQUY5MzAwNDA4MTMwMDEwMDZDODkwMDQwOEYKKzoxMDVFMzAwMDgxQjIwMDAwMDAwMDAwNDAwRkIwMDEwMDAwMDQwMDQwRUIKKzoxMDVFNDAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDA0MDAyMjQwNkQKKzoxMDVFNTAwMDAxNkMwMDAwMDAwMDJFMTA0OEIxMDEwMDAwMDA2ODUwRTUKKzoxMDVFNjAwMDAzQjAwMTAwMDAwMDAwMDNGMEIxMDEwMDQwMDAwMDAwOTkKKzoxMDVFNzAwMEUwQzkwMTAwMDAwMDJFNTA0OUMxMDEwMDAwMDAwMDUwOUYKKzoxMDVFODAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDQyODgKKzoxMDVFOTAwMDYxQjEwMTAwMjAwMDAwMTA2MkREMDEwMEQwODNBODQwNDQKKzoxMDVFQTAwMDgxMzIwMDAwMTAwMDAwMTA2MkM5MDEwMEQyODNBODAwRjYKKzoxMDVFQjAwMEUwMzEwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAyRDAzQTcKKzoxMDVFQzAwMDQ4QjEwMTAwMDAwMDAwNDAwRkIwMDEwMDAwMDAwMEY4RTAKKzoxMDVFRDAwMDJFQjAwMTAwMDAwMDAwRjIwMkIwMDEwMDAwMDAwMDQwRkUKKzoxMDVFRTAwMDE3QjAwMTAwMDA0MTAwQTY5NkIwMDEwMEVFMDcyRTQ3NTIKKzoxMDVFRjAwMDk3OTAwMTAwRTg4MzIyMTc5NjA0MDAwMEU2ODMyMjRCNjYKKzoxMDVGMDAwMEZEN0YwMDAwRTY4MzIzQTIwMjZDMDAwMEE1OTUwMDUyRUQKKzoxMDVGMTAwMDk1MzAwMTAwMDQwMDIyNDE5NzUwMDAwMDBDMDAyRDAwMzQKKzoxMDVGMjAwMDEyQjAwMTAwMDAwMDAwRjAwMEIwMDEwMDAwMDAwMDVDQjEKKzoxMDVGMzAwMDAxODAwMTAwQUM5NTAwNEIwMkIwMDAwMDAwMDAwMDA5OTgKKzoxMDVGNDAwMDAwQjAwMTAwMDAwMDAwNTAwM0IwMDEwMDA1ODQwMDVDQjcKKzoxMDVGNTAwMDE3OTAwMDAwRkE4MzIyNDMyRjdDMDAwMDAwMDAwMDQ1QzgKKzoxMDVGNjAwMDFGOTAwMTAwRjM4MzIyNUYyRjdDMDAwMDAwMDAyRTEwQTEKKzoxMDVGNzAwMDQ4QjEwMTAwMDAwMDAwNThGMUIxMDEwMDEwMDAwMDAzMTkKKzoxMDVGODAwMEYwQzkwMTAwMTAwMDAwMDBFMEM5MDEwMEVGODM2MjQyODcKKzoxMDVGOTAwMDYxMzEwMDAwMDAwMDAwMTA2MkIxMDEwMEYwODNBODQwRjAKKzoxMDVGQTAwMDgxMzIwMDAwMjM4MzcyODgxQ0IwMDAwMDIwMDAyRDAzODIKKzoxMDVGQjAwMDQ4QjEwMTAwRkYwRjAwRjY4MDg4MDEwMEY3ODNBMkE2MTgKKzoxMDVGQzAwMDgxNkMwMDAwRkE4MzAwRjIzQUIwMDAwMEY0ODRBMjRCMjYKKzoxMDVGRDAwMEZEN0YwMDAwQzk5NDAwNDA4MTMyMDEwMDA2ODgwMDQwMjYKKzoxMDVGRTAwMDgxQjIwMDAwMDU4NDIyNEEyRjdDMDAwMDA1ODQyMjQ4RUIKKzoxMDVGRjAwMDJGN0MwMDAwMEEwMDJEMDM0OEIxMDEwMDNGMDAwMEYyOTEKKzoxMDYwMDAwMDg2ODgwMTAwMUYwMDAwNDM4NDg4MDEwMDA1MDAwMDQzQ0EKKzoxMDYwMTAwMDgwRjQwMTAwOTg5NDNENDI4MUUwMDEwMDA1ODRBMjQyOTEKKzoxMDYwMjAwMEUwN0QwMDAwRjQ4NEEyNEJGRDdGMDAwMEM5OTQwMDQwOTUKKzoxMDYwMzAwMDgxMzIwMTAwMDY4ODAwNDA4MUIyMDAwMDAyMDQwMDQwNjUKKzoxMDYwNDAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDA3ODQ2OTQwOUQKKzoxMDYwNTAwMDgxMzIwMDAwMDAwMDAwQTMwOUIwMDEwMDAwMDA3OTQxNzYKKzoxMDYwNjAwMDQ3QzMwMTAwMDQwMEEwQTEwOTZDMDAwMDBFODQyMkExMTYKKzoxMDYwNzAwMDA5NkMwMDAwMjc4MzAwODgxQ0IwMDAwMDBBODQwMDAzMUMKKzoxMDYwODAwMDQ4QjEwMDAwNDg4NEEzOTIwMzZDMDAwMDJCOTgwMDQwQTQKKzoxMDYwOTAwMDk1MzAwMTAwMDAwMDAwNDE0M0MzMDEwMDAwMDAwMDE2REMKKzoxMDYwQTAwMDgwQjIwMTAwMDY4ODI3MDg4MDMyMDAwMDE1ODQyMjVDMzcKKzoxMDYwQjAwMDE3N0MwMDAwMTY4NDAwMDAyQUIwMDAwMDEyMDAwMDAwQzcKKzoxMDYwQzAwMDJBQzgwMTAwMDIwMDAwMDg4MEM4MDEwMDFBODRBMjQzMDcKKzoxMDYwRDAwMDJGN0MwMDAwNUU5NzAwNDA4MTMyMDEwMDM2ODQwMDVFMTQKKzoxMDYwRTAwMDE3OTAwMDAwMDQwMDAwMDE4Q0NDMDEwMDVFOTcwMDRDNkEKKzoxMDYwRjAwMDAzMzAwMTAwMDAwMDJFNDYwMkIwMDEwMDEwMDAwMDEwMjUKKzoxMDYxMDAwMDQ4QzkwMTAwMEMwMDAwMDFGMENEMDEwMDJDMDAwMDQwNDYKKzoxMDYxMTAwMEYwQzkwMTAwMDAwMDAwMTZGMEIxMDEwMDEwMDAwMDE1RTgKKzoxMDYxMjAwMEUwQzkwMTAwMDAwMDAwNDM2MUIxMDEwMEEwMDAwMEE0MkIKKzoxMDYxMzAwMDYyREQwMTAwMjM4NEE4NTQxNzEwMDAwMDM2ODQwMDVFM0QKKzoxMDYxNDAwMDE3OTAwMDAwMTIwMDAwMDAyQUM4MDEwMDM1ODQyMjQzODUKKzoxMDYxNTAwMDJGN0MwMDAwMDQwMDAwMDE4Q0NDMDEwMDAwMDAwMDRDRUEKKzoxMDYxNjAwMDAzQjAwMTAwN0Y5NzAwNDM2MTMxMDEwMDAwMDAyRTQ2MUIKKzoxMDYxNzAwMDAyQjAwMTAwMTAwMDAwMTA0OEM5MDEwMDBDMDAwMDAxMkQKKzoxMDYxODAwMEYwQ0QwMTAwMEMwMDAwMDlGMEM5MDEwMDAwMDAwMDE4NkEKKzoxMDYxOTAwMEYwQjEwMTAwMTAwMDAwMTVFMEM5MDEwMDAwMDAwMDQzNEIKKzoxMDYxQTAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDM2ODQyODU0MjIKKzoxMDYxQjAwMDE3MTAwMDAwMzI4NDAwNDA4MUIyMDAwMDdGOTcwMDQzMzYKKzoxMDYxQzAwMDYxMzEwMTAwMzg4NDIyNTAyRjdDMDAwMDAwMDAwMDU2MEQKKzoxMDYxRDAwMDE3OTAwMTAwMDcwMDAwMTc5ODg4MDEwMDNCODRBMjQxMzYKKzoxMDYxRTAwMDk5NkMwMDAwMDAwMDAwNTUxNzkwMDEwMDAwMDAwMDQzNkEKKzoxMDYxRjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDNDODRBODQwNTQKKzoxMDYyMDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDY2OTcwMDQwQTQKKzoxMDYyMTAwMDgxMzIwMTAwNDM4NDIyNDMyRjdDMDAwMDE2ODAwMDAzNUEKKzoxMDYyMjAwMDQ0QzkwMTAwMDAwMDAwMURFNEIxMDEwMDAwOTcwMDVFQjgKKzoxMDYyMzAwMDA1MTAwMTAwNDY4NEEyNUYyRjdDMDAwMDg2OTMwMDAxQjgKKzoxMDYyNDAwMDM4NDMwMTAwQzk5NDAwNDA4MTMyMDEwMDA2ODgwMDQwQjMKKzoxMDYyNTAwMDgxQjIwMDAwNEE4NEEyNEJGRDdGMDAwMEYxODQwMDQxMUUKKzoxMDYyNjAwMDQzQzMwMDAwMDAwMDAwNDAyN0IwMDEwMDAwMDAwMDQwRDAKKzoxMDYyNzAwMDJEQjAwMTAwMDAwMDAwNDAxMUIwMDEwMDREODQzNTAxMzcKKzoxMDYyODAwMDg2MzAwMDAwNkQwMDAwNDA2MTk5MDEwMDU2ODQyOEIxRkQKKzoxMDYyOTAwMDMwMzAwMDAwNEU4NDIyNEQ3NTdEMDAwMDAwMDAwMDE2NTUKKzoxMDYyQTAwMDgwQjIwMTAwREQ4NEE3NDAxMTZDMDAwMDAwMDAwMDQxQjUKKzoxMDYyQjAwMDQzQzMwMTAwMDQwMEEyNDAyNzZDMDAwMEYwODQwMDQwQUEKKzoxMDYyQzAwMDgxQjIwMDAwNkQwMDAwNDA2MTk5MDEwMDU2ODRBOEIxQzAKKzoxMDYyRDAwMDEyMzAwMDAwMDAwMDAwMTY4MEIyMDEwMDYwODRBNzQwNjgKKzoxMDYyRTAwMDExNkMwMDAwMDAwMDAwNDE0M0MzMDEwMDAwMDAwMDA5RTAKKzoxMDYyRjAwMDEwQjAwMTAwMDAwMDAwMTgyQ0IwMDEwMERFMDcwMDQzQzAKKzoxMDYzMDAwMDgwQ0UwMTAwNEU4NEFBNDA4MTMyMDAwMDY1ODQwMDQwQTYKKzoxMDYzMTAwMDgxQjIwMDAwNDAwMDNFNDMyN0UwMDEwMDAwMDAwMDA5NzgKKzoxMDYzMjAwMEYwQjEwMTAwMDAwMDAwMThFMEIxMDEwMDAwMDAwMDQxRTAKKzoxMDYzMzAwMDI3QzAwMTAwNEU4NEEzMEI4NzUwMDAwMDAwMDAxNTQwQzkKKzoxMDYzNDAwMDFCQjAwMTAwMDAwMDAwNDAyM0IwMDEwMDA0MDBBMjAzQzQKKzoxMDYzNTAwMDQ4NkQwMDAwMTIwMDAwMDAyQUM4MDEwMDQwMDAyRDQwRDYKKzoxMDYzNjAwMDM5QjAwMTAwNkY4NEEyNDAyNzZDMDAwMDIyMDAwMDA4QjEKKzoxMDYzNzAwMDEyQzgwMTAwMDQwMEEyMTYzMDZDMDAwMERFMDcwMDQwQzUKKzoxMDYzODAwMDI1OTgwMTAwNzI4NDAwNDA4MUIyMDAwMDAwMDAwMEY4RUUKKzoxMDYzOTAwMDEyQjAwMTAwMDAwMDAwRjAzMEIwMDEwMDAwMDAwMDBCNUUKKzoxMDYzQTAwMDI1QjAwMTAwMDAwMDAwMTAzMkIwMDEwMDE0MDAyMDAxRUYKKzoxMDYzQjAwMEUwQjEwMTAwRUUwNzAwNDAzNzk4MDEwMDc3ODQyMzAxMjcKKzoxMDYzQzAwMDM2NkMwMDAwMDAwMDAwMDEzNkIwMDEwMDgyODQ4MjQxN0EKKzoxMDYzRDAwMDIzNDAwMDAwMjA4MDAwMTA0MkM5MDEwMDdFODQyMjQwM0EKKzoxMDYzRTAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwQjcKKzoxMDYzRjAwMDYyREQwMTAwN0I4NEE4NDA4MTMyMDAwMDIzODMwMDg4OTUKKzoxMDY0MDAwMDFDQjAwMDAwRjM5NDAwNDMyMzMwMDEwMDAwMDAwMDEwOTIKKzoxMDY0MTAwMDMyQjAwMTAwMDAwMDAwNDEyM0IwMDEwMDAwMDAwMDAzODEKKzoxMDY0MjAwMDQ4QjEwMTAwMDA4MDAwMTk0NEM5MDEwMDkzODQyMjQ1NEQKKzoxMDY0MzAwMDFGN0MwMDAwMDQwMEEyNDEyMzZDMDAwMDA0MDBBMjBCOUEKKzoxMDY0NDAwMDI1NkMwMDAwMDAwMDAwNENGMUIxMDEwMDAwMDAwMDA5QzMKKzoxMDY0NTAwMEYwQjEwMTAwMDAwMDAwMThGMEIxMDEwMDAwMDAwMDQzOUQKKzoxMDY0NjAwMDYxQjEwMTAwMjAwMDAwMTk2MkREMDEwMDhBODRBODE1RDUKKzoxMDY0NzAwMEUwMzEwMDAwMDAwMDAwNTAwM0QwMDEwMDAwMDAwMDUwOTcKKzoxMDY0ODAwMDMzQzAwMTAwMDAwMDAwNEMyNUQwMDEwMDBDMDAyRDRDNTEKKzoxMDY0OTAwMDEzQzAwMTAwMDAwMDAwNTAzN0QwMDEwMDAwMDAwMDUwODAKKzoxMDY0QTAwMDJCQzAwMTAwNzc4NDAwNDUxRjgwMDAwMDk1ODRBMzEyNTMKKzoxMDY0QjAwMDM2NkMwMDAwOTY4NDY4MUIyOEIwMDAwMDAwMDA2ODEyNEIKKzoxMDY0QzAwMDI4QjAwMTAwMDAwMDAwMDlGMEIxMDEwMDAwMDAwMDE4MzAKKzoxMDY0RDAwMEYwQjEwMTAwMDAwMDAwNDM2MUIxMDEwMDIwMDAwMDE5OEIKKzoxMDY0RTAwMDYyREQwMTAwOTk4NEE4MTVFMDMxMDAwMEMxODQyMjE0MDYKKzoxMDY0RjAwMDAyNTAwMDAwMDAwMDAwNTAzM0MwMDEwMDAwMDAwMDE0RjIKKzoxMDY1MDAwMDI0RDAwMTAwMEMwMDJEMTQxMkMwMDEwMEI5ODRBMjE0ODMKKzoxMDY1MTAwMDM2NTAwMDAwQTk4NDIyNUMxRjdDMDAwMDMwODAwMDEwRUYKKzoxMDY1MjAwMDQyQzkwMTAwQTc4NDIyNDBFMzZEMDAwMDAwMDAwMDQyNDAKKzoxMDY1MzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEE0ODRBODQwQTgKKzoxMDY1NDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDAzOUIKKzoxMDY1NTAwMDQ4QjEwMTAwMEMwMDJENUMxRjgwMDEwMDEwMDAwMEYwMEMKKzoxMDY1NjAwMDJBQzgwMTAwMDAwMDAwNUMyQjgwMDEwMDA0MDAyMjUwQkEKKzoxMDY1NzAwMDJCNkMwMDAwRjAwNzAwNDAzNzk4MDEwMEFGODQyMzAxMjYKKzoxMDY1ODAwMDM2NkMwMDAwMDAwMDAwMDEzNkIwMDEwMEJBODQyMjFCMDYKKzoxMDY1OTAwMDAyNkMwMDAwMzAwMDAwMTA0OEM5MDEwMDAwMDAyRTVDQjEKKzoxMDY1QTAwMDFGOTAwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzNDUKKzoxMDY1QjAwMEYwQjEwMTAwRkYwNzAwMTVFMDhEMDEwMDAwMDAwMDQyNkUKKzoxMDY1QzAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMEI2ODRBODQwMTIKKzoxMDY1RDAwMDgxMzIwMDAwQkE4NDAwMDM0OEIxMDAwMDAwMDAwMDE0QkEKKzoxMDY1RTAwMDJBQzAwMTAwNzc4NEEyNDAyNTZDMDAwMDAwMDAwMDQxMTEKKzoxMDY1RjAwMDM5QzAwMTAwMDQwMDIwMTMzODZDMDAwMDQwMDAzRDQzMDYKKzoxMDY2MDAwMDM5RTAwMTAwMDAwMDAwMEIyNUIwMDEwMDAwMDAwMEY4OTcKKzoxMDY2MTAwMDEyQjAwMTAwNzc4NDAwRjAzMEIwMDAwMDA0MDBBMjVDRUEKKzoxMDY2MjAwMDFGN0MwMDAwMDA4MDAwMTk0MkM5MDEwMEM4ODQyMjQwN0MKKzoxMDY2MzAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDE5NUIKKzoxMDY2NDAwMDYyREQwMTAwQzU4NEE4NDA4MTMyMDAwMDIzODMwMDg4RjgKKzoxMDY2NTAwMDFDQjAwMDAwRjM5NDAwNDAyQjMwMDEwMDE4MDAyRTAzMDIKKzoxMDY2NjAwMDQ4QjEwMTAwQ0M4NDIyNTAyRjdDMDAwMDAwMDAwMDU2NkQKKzoxMDY2NzAwMDE3OTAwMTAwMDcwMDAwMTc5ODg4MDEwMENGODRBMjQxRkQKKzoxMDY2ODAwMDk5NkMwMDAwMDAwMDAwNTUxNzkwMDEwMEQyODQyMjQzNEQKKzoxMDY2OTAwMDJGN0MwMDAwMDAwMDAwNTQxNzkwMDEwMDE2MDAyMDFEMDAKKzoxMDY2QTAwMEU0QjEwMTAwRDQ4NEEzNDAyNzZDMDAwMEQ2ODQ2MDVGNkQKKzoxMDY2QjAwMDE3OTAwMDAwMDA4NDAwMEIxNkRDMDEwMDAwMDA2MDEzM0UKKzoxMDY2QzAwMDE2OTQwMTAwMDA5NzAwNUUwNTEwMDEwMDA0MDBBMjQwMkUKKzoxMDY2RDAwMDBGNkMwMDAwMDY4OEEyNUYyRjdDMDAwMDE0ODAwMDAzNkUKKzoxMDY2RTAwMDQyQzkwMTAwMDAwMDAwRjIwMkIwMDEwMDg2OTMwMDAxREYKKzoxMDY2RjAwMDM4NDMwMTAwMDY4ODAwNDA4MUIyMDAwMDA0MDBBMjAzNzQKKzoxMDY3MDAwMDQ4NkQwMDAwMDQwMDIyNEQ3NTdEMDAwMDAwMDAwMDQwMkYKKzoxMDY3MTAwMDgzQjAwMTAwMDAwMDAwNEQ2MUIxMDEwMDAwMDAwMDE2Q0YKKzoxMDY3MjAwMDgwQjIwMTAwMDQwMDI3NDAxMTZDMDAwMDAwMDAwMDE2MzgKKzoxMDY3MzAwMDYyQjEwMTAwRTM4NEE4NDA4MTMyMDAwMDAwMDAwMDA4M0IKKzoxMDY3NDAwMDYyQjEwMTAwRTU4NEE4NDA4MTMyMDAwMEYwODQyMjEzODgKKzoxMDY3NTAwMDgyNkMwMDAwNDAwMDNENDM4M0UwMDEwMDAwMDAwMEY4MkYKKzoxMDY3NjAwMDEwQjAwMTAwMDAwMDAwRjAyQ0IwMDEwMDAwMDAwMDE2ODUKKzoxMDY3NzAwMDYyQjEwMTAwRUI4NEE4NDA4MTMyMDAwMDAwMDAwMDA4RjMKKzoxMDY3ODAwMDYyQjEwMTAwRUQ4NEE4NDA4MTMyMDAwMEU3ODQwMDQxM0QKKzoxMDY3OTAwMDgzQzAwMDAwMDAwMDE1NDA4MUIyMDEwMDAwODIwMEE2MDUKKzoxMDY3QTAwMDA0QjAwMTAwQTA5ODAwNDA0Nzk5MDEwMDMwMDUwMDQxNjUKKzoxMDY3QjAwMDg5MzAwMTAwQTU5NTAwNTI5NTMwMDEwMEFDOTUwMDRCNDEKKzoxMDY3QzAwMDAyQjAwMDAwMDY4ODAwNDAwRkIwMDAwMDAwMDAwMDVGMkIKKzoxMDY3RDAwMDAxODAwMTAwMTAwMDAwMDAwRUY0MDEwMDA0MDAyNjQwQkEKKzoxMDY3RTAwMDgxMzIwMDAwM0YwMDAwMDAwMDg4MDEwMDA1MDQwMDQwRTUKKzoxMDY3RjAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDAzMDAwMDA3MTAKKzoxMDY4MDAwMDFBRjQwMTAwMTg5NTAwMDcxNjMwMDEwMDA4ODUyMjQxOEUKKzoxMDY4MTAwMDgxNkMwMDAwMDM4NTIyNDI4MTZDMDAwMDIzODMwMDg4ODQKKzoxMDY4MjAwMDFDQjAwMDAwMDc4NTIyNUYwRjdDMDAwMDAwMDAwMDVGQTUKKzoxMDY4MzAwMDBGODAwMTAwMDYwNDAwNDA4OTk4MDEwMDA5OTkwMDAwQkEKKzoxMDY4NDAwMDhBMzAwMTAwRjA4NzAwNDAwRkIwMDAwMDE3ODVBMjVBN0YKKzoxMDY4NTAwMDFGN0MwMDAwMDQwMEEyNUExRjdDMDAwMDAwQjUwMDBENDAKKzoxMDY4NjAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDAwQjcwMDBEQzQKKzoxMDY4NzAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDcwOTQwMDQwMzQKKzoxMDY4ODAwMDgxMzIwMTAwMTc4NTIyMjA4NTZDMDAwMDEyODU5QzBGNDMKKzoxMDY4OTAwMDgwMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDhEOTUwMDVDQ0UKKzoxMDY4QTAwMDFGMDAwMTAwQzg5NzAwNDI2MTMxMDEwMDIzODMwMDg4NjYKKzoxMDY4QjAwMDFDQjAwMDAwOTAwNDAwMDc5NjMwMDEwMDAwMDAyRDA1NzgKKzoxMDY4QzAwMDQ4QjEwMTAwMDQwMEEyNEJFMTdEMDAwMDAwMDAyRDA1NEQKKzoxMDY4RDAwMDQ4QjEwMTAwMDAwMDAwRjAxOEIwMDEwMDFDODUyMjNBMDgKKzoxMDY4RTAwMDAxNkMwMDAwMDAwMDAwMDA4RUIwMDEwMDZDODkwMDQwQzcKKzoxMDY4RjAwMDAxQjAwMDAwMDAwMDAwNDA4MUIyMDEwMDJFMDAyRDA1MTMKKzoxMDY5MDAwMDQ4QjEwMTAwMjE4NUEyNDBFNzZEMDAwMDBBMDAwMDQwNjcKKzoxMDY5MTAwMDhGOTgwMTAwNkM4OTAwNDAwMUIwMDAwMDFEOTQwMDQwNzgKKzoxMDY5MjAwMDgxMzIwMTAwMDQwMDIyMDA4MDMyMDAwMDM1MDQwMDQwNjIKKzoxMDY5MzAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDhEOTYwMDk1MjAKKzoxMDY5NDAwMDAzMzAwMTAwMjM4MzAwODgxQ0IwMDAwMDAwMDAyRDAzRTkKKzoxMDY5NTAwMDQ4QjEwMTAwMjIwMDJERjAyRUIwMDEwMDA0MDAxRjE3RTUKKzoxMDY5NjAwMDgwMzIwMDAwMjgyMDAwQTY5NkIwMDEwMDJFODUyMjE3NTQKKzoxMDY5NzAwMDk2MDQwMDAwNUI5NzAwNEI5NTMwMDEwMDZDODkwMDRDMzkKKzoxMDY5ODAwMDhGQjAwMDAwMzA4NTgzMTc4MDMyMDAwMDAwMDAwMDQ0ODMKKzoxMDY5OTAwMDQzQzEwMTAwMzI4NTg1MTc4MDMyMDAwMDAwMDAwMDQ4QTUKKzoxMDY5QTAwMDQzQzEwMTAwMjgwMDAwRjYwMkNDMDEwMDEyMDAwMEExNDIKKzoxMDY5QjAwMDJBQzgwMTAwNUQ5NjAwNDA4MTMyMDEwMEFGOTMwMDQxN0EKKzoxMDY5QzAwMDgxMzAwMTAwNkM4OTAwNDA4MUIyMDAwMDAwMDAwMDAxQUMKKzoxMDY5RDAwMDAwRDAwMTAwMDAwMDJFMTA0OEIxMDEwMDI4MDAwMDQwNDYKKzoxMDY5RTAwMEYxOTkwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDAwNzcKKzoxMDY5RjAwMEYwQjEwMTAwM0M4NTY0NDc2MTMxMDAwMDAwMDAwMDEwRTcKKzoxMDZBMDAwMDYyQjEwMTAwM0Q4NUE4MUJFMDMxMDAwMDIzODM3NDg4M0EKKzoxMDZBMTAwMDFDQjAwMDAwMDAwMDAwNDUwM0UwMDEwMDA0MDBBMDA1RDgKKzoxMDZBMjAwMDAzNkMwMDAwMDQwMEEzMDkwMzZDMDAwMDA4MDAyRDAzQTAKKzoxMDZBMzAwMDQ4QjEwMTAwNkU4NTAxRkIwODMwMDAwMEQ4ODU4N0ZCNTYKKzoxMDZBNDAwMDIyMzAwMDAwMDAwMDAwRkEwRUIwMDEwMDAwMDAwMEY4NDMKKzoxMDZBNTAwMDE0QjAwMTAwMDMwMDAwMDcxQUY0MDEwMDE4OTUwMDA3QTQKKzoxMDZBNjAwMDE2MzAwMTAwNUY4NTIyNDE4MTZDMDAwMDRFODUyMjQyNzQKKzoxMDZBNzAwMDgxNkMwMDAwMjM4MzAwODgxQ0IwMDAwMDVFODUyMjVGQ0IKKzoxMDZBODAwMDBGN0MwMDAwMzgwMDAwMDQ3RTg5MDEwMDU0ODVBNjVGNTkKKzoxMDZBOTAwMDBGMDAwMDAwMzE5NDAwNDAwNTMwMDEwMDBBMDQwMDQwNUUKKzoxMDZBQTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDVCODUwMDQwNDcKKzoxMDZBQjAwMDgxQjIwMDAwMTMwMDAwNDA4Nzk4MDEwMDAwMDAyRDAzMDAKKzoxMDZBQzAwMDQ4QjEwMTAwMEMwMDJERjA4MkIwMDEwMDAwMDAwMEYwODAKKzoxMDZBRDAwMDg0QjAwMTAwMkM5NjAwNDAwNTMwMDEwMDA4MDQwMDQwRkQKKzoxMDZBRTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDA0MDBBMjVDMjUKKzoxMDZBRjAwMDFGN0MwMDAwMDAwMDAwNUMxRjkwMDEwMEYwODcwMDQwMzgKKzoxMDZCMDAwMDBGQjAwMDAwNkM4NUEyNUExRjdDMDAwMDA0MDBBMjVBM0UKKzoxMDZCMTAwMDFGN0MwMDAwMDBCNTAwMEQ0MkM5MDEwMDA0MDAyMjBCREIKKzoxMDZCMjAwMEU2N0QwMDAwMDBCNzAwMEQ0MkM5MDEwMDA0MDAyMjBCMDEKKzoxMDZCMzAwMEU2N0QwMDAwNzA5NDAwNDA4MTMyMDEwMDZDODUyMjIwQzcKKzoxMDZCNDAwMDg1NkMwMDAwNjk4NTlDMEY4MDMyMDAwMDIzODMwMDg4REIKKzoxMDZCNTAwMDFDQjAwMDAwOEQ5NTAwNUMxRjAwMDEwMEM4OTcwMDQyMkEKKzoxMDZCNjAwMDYxMzEwMTAwMjM4MzAwODgxQ0IwMDAwMDkwMDQwMDA3RkQKKzoxMDZCNzAwMDk2MzAwMTAwMDAwMDJEMDU0OEIxMDEwMDAwMDAwMEYwMzIKKzoxMDZCODAwMDE4QjAwMTAwNzA4NTIxMDQ4MDIwMDAwMDcxODUwMDQwNEMKKzoxMDZCOTAwMDEwQzkwMDAwQTQ4ODAwNEI4MUIwMDAwMDlGODUwMDQzMEQKKzoxMDZCQTAwMDgxQjAwMDAwQTM4NTAwRkIyMkIwMDAwMEE0ODgwMDQxNTIKKzoxMDZCQjAwMDgxQjAwMDAwNkM4OTAwNEU4RkIwMDAwMDk0ODUwMDVBQUYKKzoxMDZCQzAwMDhGQjAwMDAwNzk4NTAwNDc4RkIwMDAwMEE0ODgwMDUzODMKKzoxMDZCRDAwMDgxQjAwMDAwQTQ4ODAwNTY4MUIwMDAwMDMyMDAyRDA1NkQKKzoxMDZCRTAwMDQ4QjEwMTAwMDcwNDAwNDA4OTk4MDEwMDA5OTkwMDAwOUMKKzoxMDZCRjAwMDhBMzAwMTAwM0MwNDAwNDA4OTk4MDEwMDA5OTkwMDBBOEMKKzoxMDZDMDAwMDhBMzAwMTAwM0QwNDAwNDA4OTk4MDEwMDE4MDAwMDExRkQKKzoxMDZDMTAwMDhBRTQwMTAwMDk5OTAwRjI4QTE0MDEwMDAwMDAwMDQwOTIKKzoxMDZDMjAwMDgxQjIwMTAwNkM4OUEwMEFFNDZEMDAwMDg3ODVBMjQxNTEKKzoxMDZDMzAwMDE5N0MwMDAwODY4NTIyMEE4MDMyMDAwMDZDODkwMDUzOEUKKzoxMDZDNDAwMDhGQjAwMDAwNkM4OTAwNTQ4RkIwMDAwMDkwODUyMjBBM0MKKzoxMDZDNTAwMDgwMzIwMDAwOEE4NUEyMEFFNDZEMDAwMDZDODkwMDVEMjQKKzoxMDZDNjAwMDhGQjAwMDAwMDAwMDAwRjI4MEIwMDEwMDAwMDAwMDBBQjgKKzoxMDZDNzAwMDgwRDAwMTAwOEU4NUEwOTE4MTZDMDAwMDZDODkwMDVFM0YKKzoxMDZDODAwMDhGQjAwMDAwMjUwMDAwNDA4Rjk4MDEwMDZDODkwMDQwMDMKKzoxMDZDOTAwMDgxQjIwMDAwOTI4NTIwOTFFNTZEMDAwMDZDODkwMDU0NUUKKzoxMDZDQTAwMDhGQjAwMDAwMjEwMDAwNDA4Rjk4MDEwMDZDODkwMDQwRTcKKzoxMDZDQjAwMDgxQjIwMDAwMzIwMDJEMDU0OEIxMDEwMDA3MDQwMDQwRjgKKzoxMDZDQzAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDNDMDQwMDQwQzUKKzoxMDZDRDAwMDg5OTgwMTAwMDk5OTAwMEE4QTMwMDEwMDNEMDQwMDQwQUEKKzoxMDZDRTAwMDg5OTgwMTAwMDk5OTAwRjI4QTMwMDEwMDAwMDAwMDQwRjMKKzoxMDZDRjAwMDgxQjIwMTAwNkM4OUEwMEFFNDZEMDAwMDI0MDAwMDQwMEMKKzoxMDZEMDAwMDhGOTgwMTAwNkM4OTAwNDA4MUIyMDAwMDM3MDAyRDA1OEEKKzoxMDZEMTAwMDQ4QjEwMTAwMDQwMDAwRjM4MkY0MDEwMEE0ODhBMDQyRkQKKzoxMDZEMjAwMDgzNkMwMDAwQTQ4ODAwNTQ4MUIwMDAwMDAwMDAwMEYyRDEKKzoxMDZEMzAwMDBFQjAwMTAwMDQwMDIzNDAwRjZDMDAwMDA0MDAyMEFBRTQKKzoxMDZENDAwMDBGNkMwMDAwMDkwNDAwNDA4OTk4MDEwMDA5OTkwMDAwQjcKKzoxMDZENTAwMDhBMzAwMTAwMDMwMDAwMDcxQUY0MDEwMDAwQjUwMDBEOUQKKzoxMDZENjAwMDQyQzkwMTAwMDcwMDAwMDcxNjg4MDEwMEIxODUyMjBCMDcKKzoxMDZENzAwMEU2N0QwMDAwMEEwMDAwNDA4Nzk4MDEwMDdGOTgwMDQwRUYKKzoxMDZEODAwMDgxMzIwMTAwMDQwMDFDMEY4MDMyMDAwMDAwMDAwMDQwMkUKKzoxMDZEOTAwMDBGQjAwMTAwRjA4NzAwNUMxRjkwMDAwMEMzODUyMjUwRjcKKzoxMDZEQTAwMEZEN0YwMDAwQkU4NUEyNTRGRDdGMDAwMEI2ODUyMjU1MDAKKzoxMDZEQjAwMEZEN0YwMDAwODIwMDAwNDA4Nzk4MDEwMEFEODUwMDQwMDMKKzoxMDZEQzAwMDgxQjIwMDAwMDQwMDIyNTNGRDdGMDAwMDE0ODAwMDAzMDQKKzoxMDZERDAwMDQyQzkwMTAwMDAwMDAwRjA5NkIwMDEwMDEwMDAwMDRCMTUKKzoxMDZERTAwMDgwRjQwMTAwMENCQzAwNDA4Nzk4MDEwMEJFODUyMjQzNUUKKzoxMDZERjAwMDgwNkMwMDAwRkZGRjAwNEI4MDg4MDEwMEFEODVBMjQzM0UKKzoxMDZFMDAwMDgwNkMwMDAwN0M5NjAwNDA0Nzk5MDEwMEJGODU0NjQwOTkKKzoxMDZFMTAwMDgxMzIwMDAwQzI4NUEwRjAzMDZGMDAwMEI0ODUxRTQwQjIKKzoxMDZFMjAwMDgxQjIwMDAwMDAwMDFFNDEzMUMzMDEwMDdGOTQwMDQwODgKKzoxMDZFMzAwMDI1MzAwMTAwQzc4NTlDMEY4MDMyMDAwMDIzODMwMDg4MjUKKzoxMDZFNDAwMDFDQjAwMDAwOEQ5NTAwNUMxRjAwMDEwMDE0ODAwMDAzNDEKKzoxMDZFNTAwMDQyQzkwMTAwMDQwMDIyNUExRjdDMDAwMDAwMDAwMEYwMUIKKzoxMDZFNjAwMDk2QjAwMTAwMDAwMDJGMDU0OEIxMDEwMDEwMDAwMDA3OTYKKzoxMDZFNzAwMDE4RTQwMTAwMDAwODAwMENFMDk5MDEwMDkwMDQwMDA3RUMKKzoxMDZFODAwMDk2MzAwMTAwMDBCNTAwMEQ0NkM5MDEwMENGODUzMDQwQTUKKzoxMDZFOTAwMDgxMzIwMDAwMDQwMEEyMEJFNjdEMDAwMDAwMDAwMDBCMjAKKzoxMDZFQTAwMEU2OTEwMTAwMDAwMjAwQTE0NkM5MDEwMDA0MDBBMjBCMDYKKzoxMDZFQjAwMEU2N0QwMDAwMDAwMDAwMEJFNjkxMDEwMDA0MDAyRTA1QjUKKzoxMDZFQzAwMDQ4QjEwMTAwMDAwMDEwNDBFMUIxMDEwMEE0ODgwMDQwNzkKKzoxMDZFRDAwMDgxQjAwMDAwMDAwMDAwRkIyOEIwMDEwMDAwMDAwMEZCQjIKKzoxMDZFRTAwMDg2QjAwMTAwMDAwMDAwRjgxNEIwMDEwMEUzODUyMjQ2REUKKzoxMDZFRjAwMDIzN0MwMDAwMDQwMDIyNDA4NzZDMDAwMERGODUyMjQwRDQKKzoxMDZGMDAwMDg3N0MwMDAwMDAwMDAwNDgxRjkwMDEwMEUxODUyMjQxQkQKKzoxMDZGMTAwMDg3N0MwMDAwMDAwMDAwNDcxRjkwMDEwMEUzODUyMjQyQUIKKzoxMDZGMjAwMDg3N0MwMDAwMDAwMDAwNDUxRjkwMDEwMDA0MDAyMjQwMDMKKzoxMDZGMzAwMDA5N0MwMDAwRTQ4NTY2MUIyQzMwMDAwMDAwMDAwMEEwRTYKKzoxMDZGNDAwMDEzQjAwMTAwMDAwMDc2NDE0MUMzMDEwMDE2ODYyMzkyNzAKKzoxMDZGNTAwMDE1NkMwMDAwMTY4NkEyNDUxRjdDMDAwMDFDODYyMjRCODMKKzoxMDZGNjAwMEZEN0YwMDAwMTcwMDAwRDBBMkM5MDEwMDAwMDAwMDQwMTIKKzoxMDZGNzAwMDI3QjAwMTAwMDIwMDAwMEEyNEM4MDEwMEJGOTQwMDQwQUQKKzoxMDZGODAwMDBGMzAwMTAwMTQ4NjIyMDg0MDMwMDAwMDAwMDAwMDQxNEMKKzoxMDZGOTAwMEEzQzEwMTAwRjAwNzAwMTIyNENDMDEwMEVEODVBQTQxMzUKKzoxMDZGQTAwMDI3NDAwMDAwMDQwMEEzNDkyNzZDMDAwMDAxMDAwMDEzRTMKKzoxMDZGQjAwMDgwQ0MwMTAwMEU4NjI2NDAyMzMwMDAwMDAwMDAwMDQwRjcKKzoxMDZGQzAwMDgzQjAwMTAwNjAwMDAwMDM4NEM4MDEwMDEwMDAwMDEwQkQKKzoxMDZGRDAwMDQ4Q0QwMTAwMTcwMDAwRDBBMkM5MDEwMEZCODVBMjQwRTYKKzoxMDZGRTAwMDgzNkMwMDAwMDc4NjAwNDE4M0IwMDAwMDAwODAwMDQyRUYKKzoxMDZGRjAwMDQ0OTkwMTAwMDAwMDY4MjEzODk2MDEwMDAwMDAyRTUwREQKKzoxMDcwMDAwMDQ5QzEwMTAwMDA4NkEyNDQyMzZDMDAwMDMwMDAwMDAzNDcKKzoxMDcwMTAwMDQ4QzkwMTAwMDAwMDAwNDRGMUIxMDEwMDBDMDAwMDIwNEIKKzoxMDcwMjAwMEYwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMEEwMDAwMEE0MEIKKzoxMDcwMzAwMDYyREQwMTAwMDM4NkE4NDJFMDMxMDAwMDAwMDAwMDQ0NDgKKzoxMDcwNDAwMDg1QzAwMTAwMDAwMDAwNDEyM0MwMDEwMDAwMDAwMDQxOTQKKzoxMDcwNTAwMEEzQzEwMTAwRjk4NUEyNDE4MTUwMDAwMDBFODYyMjQwQTMKKzoxMDcwNjAwMDIzNkMwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwRUEKKzoxMDcwNzAwMDYyREQwMTAwMEI4NkE4NDA4MTMyMDAwMDIzODMwMDg4NzYKKzoxMDcwODAwMDFDQjAwMDAwMEIwNDAwNDA4OTk4MDEwMDA5OTkwMDAwMjEKKzoxMDcwOTAwMDhBMzAwMTAwMDAwMDAwMDM0OEIxMDEwMEVFMDcwMDQwMDMKKzoxMDcwQTAwMDI1OTgwMTAwMTcwMDAwRDAyQUM4MDEwMDI3ODYwMDE3ODQKKzoxMDcwQjAwMDEwQjAwMDAwMEE5NzAwNDA4MTMyMDEwMDFDODYwMDQwOTkKKzoxMDcwQzAwMDgxQjIwMDAwQkY5NDAwOTIyNTMwMDEwMDAwMDAwMDQwMTIKKzoxMDcwRDAwMDMxQjAwMTAwMEIwNDAwNDA4OTk4MDEwMDA5OTkwMDAwQkIKKzoxMDcwRTAwMDhBMzAwMTAwMUM4NjIyMDgyRTMwMDAwMDI3ODYwMDQxQ0QKKzoxMDcwRjAwMDI3QjAwMDAwODA4MDAwQTYwNEIwMDEwMDA2MDAwMDQwMTgKKzoxMDcxMDAwMDg3OTgwMTAwN0Y5ODAwMEE4QzMwMDEwMDA0MDAxQzBGNTIKKzoxMDcxMTAwMDgwMzIwMDAwMDAwMDAwNDAwRkIwMDEwMDAwMDAwMDVDNjEKKzoxMDcxMjAwMDFGOTAwMTAwMDQwMEEwOUYxMzZDMDAwMDI2ODYyMjlGODAKKzoxMDcxMzAwMDEzNkMwMDAwMDIwMDAwODgxQ0NDMDEwMDI3ODMwMDQwNzMKKzoxMDcxNDAwMDgxQjIwMDAwRjA4NzAwNDEzRkMzMDAwMDAwMDAwMDQwMTIKKzoxMDcxNTAwMDBGQjAwMTAwMjgwMDAwMDE4MENFMDEwMDNCODYyQTQwQ0MKKzoxMDcxNjAwMDgxMzAwMDAwMDA4MDAwMTA0NEM5MDEwMDQwMDAwMDQwNTAKKzoxMDcxNzAwMDgxOTgwMTAwMzA4NkEyNDgxRjdDMDAwMDMwODZBMjQ3MUIKKzoxMDcxODAwMDFGN0MwMDAwMzA4NkEzMDcwMzZDMDAwMDgwMDAwMDQwRDUKKzoxMDcxOTAwMDgxOTgwMTAwMzM4NkEzNDAwMjZDMDAwMDI4MDAwMDAxQTIKKzoxMDcxQTAwMEYwQ0QwMTAwMzU4NjAwNDAwRkIwMDAwMDI4MDAwMDQwRkYKKzoxMDcxQjAwMEYwQ0QwMTAwMDQwMDAwNDAwRUNDMDEwMDI4MDAwMDAzQzcKKzoxMDcxQzAwMEYwQzkwMTAwMjgwMDAwMDBGMEM5MDEwMDAwMDAwMDE2MEQKKzoxMDcxRDAwMEUwQjEwMTAwMDAwMDAwNDc2MUIxMDEwMDIwMDAwMDEwOTMKKzoxMDcxRTAwMDYyREQwMTAwMzk4NkE4NUMxRjEwMDAwMDA0MDAyMjBBM0QKKzoxMDcxRjAwMDgwMzIwMDAwMDQwMEEyMDM0ODZEMDAwMDAwMDAwMDQwM0YKKzoxMDcyMDAwMDQzOTkwMTAwMDAwMDAwRjAwOEIwMDEwMEEwMDEyRDQwRUEKKzoxMDcyMTAwMDAwQzAwMTAwMUM4NzIyMEY0MjA1MDAwMDRFODY5QzBGMTMKKzoxMDcyMjAwMDgwMzIwMDAwMDAwMDAwNUMxRjgwMDEwMDAwODAwMDEwMjAKKzoxMDcyMzAwMDQyQzkwMTAwNDk4NjIyNDBFMzZEMDAwMDAwMDAwMDQ3N0EKKzoxMDcyNDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDQ2ODZBODQwRTcKKzoxMDcyNTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDRFODYyMjA3ODQKKzoxMDcyNjAwMDgwMzIwMDAwMDAwMDAwMDM0MkIxMDEwMDAwMDAwMDA3NkUKKzoxMDcyNzAwMDQyQzEwMTAwMDA4MDAwQTE0Njk5MDEwMDAwMDAwMDVGQUEKKzoxMDcyODAwMEUxOTEwMTAwQzAwNkEyNDUxRjdDMDAwMDEwMDAwMDAzMzAKKzoxMDcyOTAwMDQ4QzkwMTAwMDAwMDJENTQyOUMwMDEwMDAwMDAwMEY4NzkKKzoxMDcyQTAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDAwMDAwMEY4NzAKKzoxMDcyQjAwMDBFQjAwMTAwMDQwMDI2NDA4MTMyMDAwMDA0MDBBMjVGRUQKKzoxMDcyQzAwMDBGN0MwMDAwM0UwMDAwMTQ4MENFMDEwMDA0MDBBQTQwQTQKKzoxMDcyRDAwMDgxMzIwMDAwNDIwMDAwMDMwQUM4MDEwMDBDMDAwMEE0MzMKKzoxMDcyRTAwMDBDQzgwMTAwMTY5NTAwNDA4MTMyMDEwMDAwMDAwMDE0MTYKKzoxMDcyRjAwMDAyQjAwMTAwMDAwMDAwMTQyNEQwMDEwMDAwMDAwMDE0QkUKKzoxMDczMDAwMDEwQzAwMTAwMTIwMDAwMDgxMEM4MDEwMDAwMDAwMDQwNzkKKzoxMDczMTAwMDIzQjAwMTAwRkU3RjAwMDU0NEM5MDEwMDA0MDBBMkEyQzEKKzoxMDczMjAwMDg2MDYwMDAwMDAwMDAwMEFFNEIxMDEwMDdDODYyMjAxMEMKKzoxMDczMzAwMDgwMzIwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAyRUE0NDUKKzoxMDczNDAwMDgwQjAwMTAwMDAwMDAwMTA0OEMxMDEwMDY5ODZBMzA3NTkKKzoxMDczNTAwMDAyNkMwMDAwNkE4NjY4MDExQUIwMDAwMDAwMDA2ODA3MkQKKzoxMDczNjAwMDFBQjAwMTAwMDAwMDAwMEQwMkQwMDEwMDAwMDAwMDA1NkQKKzoxMDczNzAwMEYwQjEwMTAwMDAwMDAwMENGMEIxMDEwMDAwMDAwMDAyQkIKKzoxMDczODAwMEUwQjEwMTAwMDAwMDAwMEQwQUMwMDEwMDc2ODYyMjQwMzUKKzoxMDczOTAwMDAzNkMwMDAwNzY4NjIyNDIyMzZDMDAwMDAwMDAwMDQxNEUKKzoxMDczQTAwMDIzQzAwMTAwMDAwMDAwNDc2MUIxMDEwMEEwMDAwMEE0NUIKKzoxMDczQjAwMDYyREQwMTAwOUM4NjI4NDA4MTMyMDAwMDczODYwMDQwMTcKKzoxMDczQzAwMDgxQjIwMDAwMDAwMDAwMTA4MEMwMDEwMDAwMDAwMDQ3RjIKKzoxMDczRDAwMDYxQjEwMTAwMDAwMDAwNDA2MkIxMDEwMDc4ODZBODQwNjAKKzoxMDczRTAwMDIzMzAwMDAwMjM4MzAwODgxQ0IwMDAwMDlDODYwMDQwRUUKKzoxMDczRjAwMDgxQjIwMDAwMDAwMDNDNDQyM0UwMDEwMDAwMDAwMEE0MzIKKzoxMDc0MDAwMDg2QjAwMTAwMDAwMDJFMTA0OEMxMDEwMDgxODZBMzEyNDEKKzoxMDc0MTAwMDBFNkMwMDAwODI4NjYwMDcxQUIwMDAwMDAwMDA2MDEyNDcKKzoxMDc0MjAwMDFBQjAwMTAwMDAwMDY4MEQxNjk0MDEwMEZGRkYwMDBCNjgKKzoxMDc0MzAwMDE2RDgwMTAwMUI5OTAwMDg5ODMwMDEwMDAwMDA2ODA4NjgKKzoxMDc0NDAwMDNFOTYwMTAwMDAwMDAwMENGMEIxMDEwMDAwMDAwMDAyQjcKKzoxMDc0NTAwMEUwQjEwMTAwMDAwMDAwMTA4NkMwMDEwMDAwMDAwMDQ2RkQKKzoxMDc0NjAwMDYxQjEwMTAwMjAwMDAwNDM2MkREMDEwMDhBODZBODVDNTIKKzoxMDc0NzAwMDFGMTAwMDAwQkM4NjIyMEQxNDZDMDAwMDkwODYyMjBEQTcKKzoxMDc0ODAwMDI0NkMwMDAwMDAwMDAwMEQxMEMwMDEwMDk1ODYwMDBENjYKKzoxMDc0OTAwMDI0RDAwMDAwMDQwMDIyNEJGRDdGMDAwMDAwMDAwMDQxQ0EKKzoxMDc0QTAwMDJCQzAwMTAwMDAwMDAwMTVBMkIxMDEwMDEwMDAwMDIwNTcKKzoxMDc0QjAwMDEwQzgwMTAwRjAwNzAwNDAyNTk4MDEwMDk3ODYyMjQyN0QKKzoxMDc0QzAwMDIzNkMwMDAwOUM4NjAwNDEyM0MwMDAwMDAwMDAwMDQ2QTEKKzoxMDc0RDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDk4ODZBODVDRTcKKzoxMDc0RTAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDQwNDMKKzoxMDc0RjAwMDIzQjAwMTAwQkM4NjIyMEQxNDUwMDAwMEJCODZBMjBERjMKKzoxMDc1MDAwMDBFNTAwMDAwQTg4NjIyNDYxRjdDMDAwMDAwMDAwMDQ2QTYKKzoxMDc1MTAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMEE2ODYyMjQwNzEKKzoxMDc1MjAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNjEKKzoxMDc1MzAwMDYyREQwMTAwQTM4NkE4NDA4MTMyMDAwMDIzODMwMDg4MTkKKzoxMDc1NDAwMDFDQjAwMDAwMjA4MDAwMDM0Njk5MDEwMDAwMDAwMDVGOEQKKzoxMDc1NTAwMEUxOTEwMTAwMDAwMDJEMDY0OEIxMDEwMDAwMDAwMEY4OTMKKzoxMDc1NjAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDA0MDAyMkYwOEYKKzoxMDc1NzAwMDBFMzAwMDAwQUU4NkEyNUYwRjdDMDAwMDYzODYwMDRDRDgKKzoxMDc1ODAwMDBEQzAwMDAwMDAwMDJFNUYwRjgwMDEwMDYzODYyMzA3RkUKKzoxMDc1OTAwMDE0NkMwMDAwMDQwMEEyNDYxRjdDMDAwMDMwMDAwMDEwQTQKKzoxMDc1QTAwMDQ4QzkwMTAwMjQwMDAwNDBGMTk5MDEwMDAwMDAwMDAzRDcKKzoxMDc1QjAwMEYwQjEwMTAwMDAwMDAwMDBGMEIxMDEwMDAwMDAwMDE2NzEKKzoxMDc1QzAwMEYwQjEwMTAwMjQwMDAwMDAwMEM4MDEwMDAwMDAwMDQ3RTUKKzoxMDc1RDAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMEI4ODZBODQ2RTgKKzoxMDc1RTAwMDFGMTAwMDAwNjM4NjAwMDMwQ0IwMDAwMDYzODYwMDBEQ0UKKzoxMDc1RjAwMDE4QzAwMDAwMDQwMDJFMTQwQUQwMDEwMDEyMDAwMDA1N0IKKzoxMDc2MDAwMDQ4Q0QwMTAwRkU3RjAwMDU0MkM5MDEwMDA0MDBBMkE0OEMKKzoxMDc2MTAwMDg2MDYwMDAwMDQwMEEyQTE4NjA2MDAwMDBDMDAyQUYyRTMKKzoxMDc2MjAwMEUwQjEwMTAwQzQ4NjIyNDAzMTZDMDAwMDAwMDA2MDE4MDcKKzoxMDc2MzAwMDM4OTYwMTAwMUUwMDAwNDA0Mzk5MDEwMDAwODEwMEY2QzkKKzoxMDc2NDAwMDgwQ0UwMTAwQzg4NkE2NDA4MTMyMDAwMDAwMDAwMDQ0QzAKKzoxMDc2NTAwMDQzQzEwMTAwQ0E4NjIyMEJFRDZEMDAwMDA4MDAwMEExQTUKKzoxMDc2NjAwMDQyQzkwMTAwMDIwMDAwQTE0NkM5MDEwMDA0MDBBMkExMTQKKzoxMDc2NzAwMDg2MDYwMDAwMEYwMDAwRkE5NDg4MDEwMDA0MDBBMjQ1NkQKKzoxMDc2ODAwMDk1NkMwMDAwMDIwMDAwNEE4NkU0MDEwMDAwMDAwMEY2NEMKKzoxMDc2OTAwMDBFQjAwMTAwRDQ4NjIyNDcxRjdDMDAwMDA0MDAxRjQzNjcKKzoxMDc2QTAwMDBFNTAwMDAwRDQ4NkEwNDYwRjQwMDAwMDAwMDAwMDQxQUMKKzoxMDc2QjAwMDBGQzAwMTAwRDg4NjIyNDgxRjdDMDAwMDAwMDAwMDQwNTcKKzoxMDc2QzAwMDkxQjAwMTAwMDQwMDBGQTI0MjMxMDAwMERCODYwMDQwQUYKKzoxMDc2RDAwMDg5QjAwMDAwMEMwMDAwQTI0MkM5MDEwMDAwMDAwMDQzNzQKKzoxMDc2RTAwMDg5QjAwMTAwMDAwMDAwNDM5NUQwMDEwMDAwMDAwMEZDQkIKKzoxMDc2RjAwMDgyQjAwMTAwREU4NkEwNDE5MDQwMDAwMDAwMDAwMDQxMDEKKzoxMDc3MDAwMDkxQzAwMTAwRTM4NjIyNDcxRjdDMDAwMEUzODZBMDQzNkUKKzoxMDc3MTAwMDg5NkMwMDAwRTM4NjIwNDU4OTZDMDAwMEUzODZBMDQxNjcKKzoxMDc3MjAwMDBFNDAwMDAwMDAwMDAwNDEwRkMwMDEwMDAwMDAwMDQxQjkKKzoxMDc3MzAwMDg5QzAwMTAwREI4NkEyNDE5NTUwMDAwMEYwODYyMjQ4RjYKKzoxMDc3NDAwMDFGN0MwMDAwMTAwMDAwNDg5MkY0MDEwMEZGRkYwMDQ4NzkKKzoxMDc3NTAwMDkwODgwMTAwRUE4NjkwNDg5MjQwMDAwMDAwMDAwMDQxQjUKKzoxMDc3NjAwMDkzQzAwMTAwMEEwMDAwQTI0NEM5MDEwMDAwMDA2NjIwODUKKzoxMDc3NzAwMDkzQTQwMTAwMEEwMDAwNDM4MENDMDEwMDAwMDAwMEEyOTUKKzoxMDc3ODAwMDgwQzAwMTAwMDQwMEEyNDA0MjZEMDAwMDA0MDBBMkExREMKKzoxMDc3OTAwMDg2MDYwMDAwMDQwMEEyNDYxRjdDMDAwMDFCOTkwMDE3MEIKKzoxMDc3QTAwMDk4MzAwMTAwRkYwNzAwMTc3RTg5MDEwMDA0MDBBNjQwMDEKKzoxMDc3QjAwMDgxMzIwMDAwMzA4MDAwMTA0NEM5MDEwMDEyMDAwMDE0MjIKKzoxMDc3QzAwMEYwQzkwMTAwMDAwMDAwMTdGMEIxMDEwMDEyMDAwMDA1MkYKKzoxMDc3RDAwMEUwQ0QwMTAwMzAwMDAwMTA4MEM4MDEwMDAwMDAwMDQ0MkUKKzoxMDc3RTAwMDYxQjEwMTAwMjAwMDAwNDA2MkREMDEwMEZBODZBODQwN0UKKzoxMDc3RjAwMDgxMzIwMDAwMDU4NzIyNUMxRjdDMDAwMDAwMDAzQzQ0QjEKKzoxMDc4MDAwMDIzRTAwMTAwMDAwMDJEMTA0OEMxMDEwMDA0ODcyMjQwNDAKKzoxMDc4MTAwMEUzNkQwMDAwMDAwMDAwNDY2MUIxMDEwMDQwMDAwMDEwNkYKKzoxMDc4MjAwMDYyREQwMTAwMDE4N0E4NDA4MTMyMDAwMDIzODMwMDg4QzcKKzoxMDc4MzAwMDFDQjAwMDAwMDAwMDAwNUMxRjgwMDEwMDA4ODdBMjQ3MDgKKzoxMDc4NDAwMDFGN0MwMDAwMEM5NTAwNDA4MTMyMDEwMDg4ODcwMDE3RTIKKzoxMDc4NTAwMDEwQjAwMDAwMTM5NTAwNDA4MTMyMDEwMDAwMDAyRjAzOUEKKzoxMDc4NjAwMDQ4QjEwMTAwMEM4N0EwMDcxNjQwMDAwMDAwMDAwMDQxNEQKKzoxMDc4NzAwMDE3QzAwMTAwMDAwMDAwMEJFNEIxMDEwMDAwMDAwMDUwM0YKKzoxMDc4ODAwMDE3RjAwMTAwMTA4NzkwRjIxNjQwMDAwMDAwMDAwMDQxNDAKKzoxMDc4OTAwMDE3QzAwMTAwMDAwMDY2MjAxN0E0MDEwMDEwMDAwMDE0QUEKKzoxMDc4QTAwMDJBQzgwMTAwMDAwMDAwNTAyQkUwMDEwMDAwMDAwMEYyOTcKKzoxMDc4QjAwMDJBOTQwMTAwMzA4MDAwMTA0MkM5MDEwMDFBODcyMjQwM0EKKzoxMDc4QzAwMEUzNkQwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwQzEKKzoxMDc4RDAwMDYyREQwMTAwMTc4N0E4NDA4MTMyMDAwMDIzODMwMDg4MDEKKzoxMDc4RTAwMDFDQjAwMDAwMDA4MDAwMTcxMERDMDEwMDg4ODcwMDQwRjkKKzoxMDc4RjAwMDgxQjIwMDAwMjQ4NzlDMEY4MDMyMDAwMDAwMDAwMDVDRjEKKzoxMDc5MDAwMDFGODAwMTAwMDA4MDAwMTA0MkM5MDEwMDI0ODcyMjQwMkUKKzoxMDc5MTAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNkQKKzoxMDc5MjAwMDYyREQwMTAwMjE4N0E4NDA4MTMyMDAwMDIzODMwMDg4QTYKKzoxMDc5MzAwMDFDQjAwMDAwMjk4NzIyMDc4MDMyMDAwMDAwMDAwMDAzRUQKKzoxMDc5NDAwMDQyQjEwMTAwMDAwMDAwMDc0MkMxMDEwMDAwODAwMEExMTcKKzoxMDc5NTAwMDQ2OTkwMTAwMDAwMDAwNUZFMTkxMDEwMDA0MDAyRTAzNDAKKzoxMDc5NjAwMDQ4QjEwMTAwMDAwMDAwMEFFMEIxMDEwMDJFODcyMjQwNkEKKzoxMDc5NzAwMDMxNkMwMDAwMEMwMDAwNDA0NTk5MDEwMDAwMDA2MDE4QzcKKzoxMDc5ODAwMDM4OTYwMTAwMDAwMDJFMTA0OEIxMDEwMDAwMDAwMDUwQTAKKzoxMDc5OTAwMEYxQjEwMTAwMDAwMDAwMDhGMEIxMDEwMDAwMDAwMDAzOTcKKzoxMDc5QTAwMEUwQjEwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwREUKKzoxMDc5QjAwMDYyQjEwMTAwMzM4N0E4NDAyMzMwMDAwMDIzODMwMDg4OTAKKzoxMDc5QzAwMDFDQjAwMDAwMDAwMDJENTIxMUMwMDEwMDEwMDAwMDAzODcKKzoxMDc5RDAwMDQ4QzkwMTAwMDAwMDAwRjgxOEIwMDEwMDAwMDAwMEY4REMKKzoxMDc5RTAwMDA0QjAwMTAwMDAwMDAwRjgwRUIwMDEwMDBDMDAwMEE0N0IKKzoxMDc5RjAwMDBDQzgwMTAwMDQwMDIyNDAxNTZDMDAwMDAwMDAzQzQ0NEIKKzoxMDdBMDAwMDIzRTAwMTAwMDAwMDAwQTQ4NkIwMDEwMDAwMDAyRTEwNTkKKzoxMDdBMTAwMDQ4QzEwMTAwNDI4N0EzMTIwRTZDMDAwMDQzODc2ODA3MkIKKzoxMDdBMjAwMDFBQjAwMDAwMDAwMDY4MTIxQUIwMDEwMDFCOTkwMDA4OEIKKzoxMDdBMzAwMDk4MzAwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMDEwRjkKKzoxMDdBNDAwMDg2QzAwMTAwMDAwMDY4MDgzRTk2MDEwMDAwMDAwMDBDOUUKKzoxMDdBNTAwMEYwQjEwMTAwMDAwMDAwMDJFMEIxMDEwMDAwMDAwMDQ2QUEKKzoxMDdBNjAwMDYxQjEwMTAwMjAwMDAwNDM2MkREMDEwMDRBODdBODVDOEIKKzoxMDdBNzAwMDFGMTAwMDAwN0M4NzIyMEQxNDZDMDAwMDUwODcyMjBEMUYKKzoxMDdBODAwMDI0NkMwMDAwMDAwMDAwMEQxMEMwMDEwMDU1ODcwMDBEOUYKKzoxMDdBOTAwMDI0RDAwMDAwMDQwMDIyNEJGRDdGMDAwMDAwMDAwMDQxQzQKKzoxMDdBQTAwMDJCQzAwMTAwMDAwMDAwMTVBMkIxMDEwMDEwMDAwMDIwNTEKKzoxMDdBQjAwMDEwQzgwMTAwRjAwNzAwNDAyNTk4MDEwMDU3ODcyMjQyQjYKKzoxMDdBQzAwMDIzNkMwMDAwNUM4NzAwNDEyM0MwMDAwMDAwMDAwMDQ2REEKKzoxMDdBRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDU4ODdBODVDMjAKKzoxMDdBRTAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDQwM0QKKzoxMDdBRjAwMDIzQjAwMTAwMDQwMDIyMEQxNDUwMDAwMDdCODdBMjBENkEKKzoxMDdCMDAwMDBFNTAwMDAwNjg4NzIyNDYxRjdDMDAwMDAwMDAwMDQ2REYKKzoxMDdCMTAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMDY2ODcyMjQwQUEKKzoxMDdCMjAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNUIKKzoxMDdCMzAwMDYyREQwMTAwNjM4N0E4NDA4MTMyMDAwMDIzODMwMDg4NTIKKzoxMDdCNDAwMDFDQjAwMDAwMjA4MDAwMDM0Njk5MDEwMDAwMDAwMDVGODcKKzoxMDdCNTAwMEUxOTEwMTAwMDAwMDJEMDY0OEIxMDEwMDAwMDAwMEY4OEQKKzoxMDdCNjAwMDE4QjAwMTAwMDAwMDAwRjgwNEIwMDEwMDA0MDAyMkYwODkKKzoxMDdCNzAwMDBFMzAwMDAwNkU4N0EyNUYwRjdDMDAwMDNDODcwMDRDMzcKKzoxMDdCODAwMDBEQzAwMDAwMDAwMDJFNUYwRjgwMDEwMDNDODcyMzA3MUUKKzoxMDdCOTAwMDE0NkMwMDAwMDQwMEEyNDYxRjdDMDAwMDMwMDAwMDEwOUUKKzoxMDdCQTAwMDQ4QzkwMTAwMjQwMDAwNDBGMTk5MDEwMDAwMDAwMDAzRDEKKzoxMDdCQjAwMEYwQjEwMTAwMDAwMDAwMDBGMEIxMDEwMDAwMDAwMDE2NkIKKzoxMDdCQzAwMEYwQjEwMTAwMjQwMDAwMDAwMEM4MDEwMDAwMDAwMDQ3REYKKzoxMDdCRDAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDc4ODdBODQ2MjEKKzoxMDdCRTAwMDFGMTAwMDAwM0M4NzAwMDMwQ0IwMDAwMDNDODcwMDBEMTQKKzoxMDdCRjAwMDE4QzAwMDAwMDQwMEEyNDYxRjdDMDAwMDg2ODcyMjVDOUIKKzoxMDdDMDAwMDFGN0MwMDAwMDAwMDAwNUMxRjgwMDEwMDAwMDAzQzQ0NUQKKzoxMDdDMTAwMDIzRTAwMTAwMDAwMDJEMTA0OEMxMDEwMDg2ODcyMjQwQUEKKzoxMDdDMjAwMEUzNkQwMDAwMDAwMDAwNDY2MUIxMDEwMDQwMDAwMDEwNUIKKzoxMDdDMzAwMDYyREQwMTAwODM4N0E4NDA4MTMyMDAwMDIzODMwMDg4MzEKKzoxMDdDNDAwMDFDQjAwMDAwMDAwMDAwMTcxMEIwMDEwMDg4ODcwMDQwNDEKKzoxMDdDNTAwMDJCQjAwMDAwMDA4MDAwMDM0NDk5MDEwMDAwMDAwMDA0RTQKKzoxMDdDNjAwMEUwQjEwMTAwMDQwMDI2NDA4MTMyMDAwMDA0MDBBMDlGMjIKKzoxMDdDNzAwMDEzNkMwMDAwOEY4NzIyOUYxMzZDMDAwMDAyMDAwMDg4QTUKKzoxMDdDODAwMDFDQ0MwMTAwMjc4MzAwNDA4MUIyMDAwMDk0OTgwMDQxODEKKzoxMDdDOTAwMDNGNDMwMTAwMDAwMDAwNDA4REIwMDEwMDAwMDAwMDQwQTMKKzoxMDdDQTAwMDA1QjAwMTAwN0Y5ODAwNDAwRjMwMDEwMDA0MDBBMjVDODUKKzoxMDdDQjAwMDFGN0MwMDAwMDY4ODAwNUMxRjkwMDAwMDEwMDAwMDAwODAKKzoxMDdDQzAwMDBFRjQwMTAwMDQwMDI2NDA4MTMyMDAwMDAwMDAwMDNBNUEKKzoxMDdDRDAwMDAxODQwMTAwOUI4NzIyNTAwMTZDMDAwMDBEMDQwMDQwQ0MKKzoxMDdDRTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDAzMDAwMDA3MEIKKzoxMDdDRjAwMDFBRjQwMTAwMTg5NTAwMDcxNjMwMDEwMEE2ODcyMjQxRUEKKzoxMDdEMDAwMDgxNkMwMDAwQTE4NzIyNDI4MTZDMDAwMDIzODMwMDg4REYKKzoxMDdEMTAwMDFDQjAwMDAwQTU4NzIyNUYwRjdDMDAwMDAwMDAwMDVGMDAKKzoxMDdEMjAwMDBGODAwMTAwMEUwNDAwNDA4OTk4MDEwMDA5OTkwMDAwQUQKKzoxMDdEMzAwMDhBMzAwMTAwRjA4NzAwNDAwRkIwMDAwMEIzODdBMjVBREMKKzoxMDdENDAwMDFGN0MwMDAwMDQwMEEyNUExRjdDMDAwMDAwQjUwMDBEM0IKKzoxMDdENTAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDAwQjcwMDBEQkYKKzoxMDdENjAwMDQyQzkwMTAwMDQwMDIyMEJFNjdEMDAwMDcwOTQwMDQwMkYKKzoxMDdENzAwMDgxMzIwMTAwQjM4NzIyMjA4NTZDMDAwMEIwODc5QzBGMDAKKzoxMDdEODAwMDgwMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDhEOTUwMDVDQzkKKzoxMDdEOTAwMDFGMDAwMTAwQzg5NzAwNDI2MTMxMDEwMDIzODMwMDg4NjEKKzoxMDdEQTAwMDFDQjAwMDAwOTAwNDAwMDc5NjMwMDEwMDAwMDAyRDA1NzMKKzoxMDdEQjAwMDQ4QjEwMTAwMDAwMDAwRjAxOEIwMDEwMDAwMDAwMDAwMTAKKzoxMDdEQzAwMDgwQjAwMTAwQTQ4OEEyNUY4MTZDMDAwMEE4MDAyRDQzNTAKKzoxMDdERDAwMDE5ODAwMTAwMzcwMDJERjAyNEIwMDEwMDA0MDAwMEYzRTkKKzoxMDdERTAwMDhFRjQwMTAwMEYwMDAwRjM5MDg4MDEwMDA0MDBBMzQzMEIKKzoxMDdERjAwMDhGNkMwMDAwMDQwMEEzNDM5MTZDMDAwMEM0ODcyMjQ4RUMKKzoxMDdFMDAwMDhFNkMwMDAwMzYwMDAwNDA0Mzk5MDEwMDU4MDAzRDQzNEQKKzoxMDdFMTAwMEU3RTEwMTAwQzQ4NzFGRjAyNDZDMDAwMEMzODcyMzQxMDEKKzoxMDdFMjAwMDhGNkMwMDAwQTQ4ODAwNDc4MUIwMDAwMEE0ODgwMDQ4M0YKKzoxMDdFMzAwMDgxQjAwMDAwNDAwMDAwNDA0Mzk5MDEwMEIwMDAyREYwRTcKKzoxMDdFNDAwMDE0QjAwMTAwQzk4NzIyMEE5MDQwMDAwMDVGOTgwMDQwRUEKKzoxMDdFNTAwMDkxMzAwMTAwQTQ4OEEyNDA4MDMyMDAwMEIwMDAyRDQ1N0UKKzoxMDdFNjAwMDgxQjAwMTAwRDU4NzIyRjAyQzMwMDAwMEEzMDAyRDMwMTYKKzoxMDdFNzAwMDgzQjAwMTAwQUMwMDJERjM4MkUwMDEwMENGODdBMzQxNjUKKzoxMDdFODAwMDJDNkMwMDAwMDAwMDAwMTY4MkIwMDEwMDk4MDAyREYwNUMKKzoxMDdFOTAwMDgyQzAwMTAwODgwMDJERjA4MkQwMDEwMDAwMDAwMEYyQjUKKzoxMDdFQTAwMDk4RTgwMTAwQTQ4ODIwNEM4MjZDMDAwMDdDMDAyRDQxRTEKKzoxMDdFQjAwMDk4RTgwMTAwQTQ4ODIwRjA5ODZDMDAwMEYwODcyMjBBNUUKKzoxMDdFQzAwMDgwMzIwMDAwNDAwMjAwMEM3RTg5MDEwMEYwODdBNjQwNEQKKzoxMDdFRDAwMDgxMzIwMDAwQTQ4ODAwNDk4MUIwMDAwMDIwMDAwMEE2ODMKKzoxMDdFRTAwMDgwQjAwMTAwREQ4NzIyNDMyMTZGMDAwMDEzODAwMDQwMzUKKzoxMDdFRjAwMDgwREMwMTAwREU4NzAwNDA4MUIyMDAwMDFBODAwMDQwNzMKKzoxMDdGMDAwMDgwREMwMTAwREU4N0EyNUUwQjdEMDAwMDAwMDAwMDQwRTcKKzoxMDdGMTAwMDA4QjEwMTAwRTA4NzlGODU4MDMyMDAwMEU0ODcwMDQwQkYKKzoxMDdGMjAwMDgxQjIwMDAwMUE4MzIyNDA1NzdEMDAwMDAxMDAwMDQwMEEKKzoxMDdGMzAwMDU3OTkwMTAwRTQ4NzQyNDA4MTMyMDAwMDAwMDAwMDQ0NkMKKzoxMDdGNDAwMDkzOTMwMTAwMDE4MzFBNUI2OTkzMDAwMEVBODcyMjQ2M0MKKzoxMDdGNTAwMEYzN0YwMDAwRUE4N0EyNDFGMzdGMDAwMEM2ODAwMDQyNjEKKzoxMDdGNjAwMDk3MzMwMTAwMDQwMDAwQ0I4MUM4MDEwMEVEODcyMjQwNTcKKzoxMDdGNzAwMEYyN0YwMDAwQzY4MDAwNkY5NzMzMDEwMEVGODcyMjQwMzgKKzoxMDdGODAwMDczN0QwMDAwRTA4MDAwNDE4QkIzMDAwMEU3ODcwMDQwNzQKKzoxMDdGOTAwMDgxQjIwMDAwRjc4NzlDMEY4MDMyMDAwMDAwODAwMDEwNDMKKzoxMDdGQTAwMDQyQzkwMTAwRjc4NzIyNDBFMzZEMDAwMDAwMDAwMDQ1NTAKKzoxMDdGQjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEY0ODdBODQwQkIKKzoxMDdGQzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDM0OTQyMjAyMTgKKzoxMDdGRDAwMDgwMzIwMDAwRjg4NzQyNDA4MTMyMDAwMDAwMDAwMDQ0RjcKKzoxMDdGRTAwMDkzOTMwMTAwMzQ5NDFBMDI2ODk3MDAwMDAyODg5QzBGNTIKKzoxMDdGRjAwMDgwMzIwMDAwMDA4MDAwMTA0MkM5MDEwMDAyODgyMjQwNDcKKzoxMDgwMDAwMEUzNkQwMDAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwNzgKKzoxMDgwMTAwMDYyREQwMTAwRkY4N0E4NDA4MTMyMDAwMDIzODMwMDg4RDEKKzoxMDgwMjAwMDFDQjAwMDAwNDQ5NDIyMDI4MDMyMDAwMDAzODg0MjQwQzkKKzoxMDgwMzAwMDgxMzIwMDAwMDAwMDAwNDQ5MzkzMDEwMDQ0OTQxQTAyMkUKKzoxMDgwNDAwMDY4OTcwMDAwMEQ4ODlDMEY4MDMyMDAwMDAwODAwMDEwQUYKKzoxMDgwNTAwMDQyQzkwMTAwMEQ4ODIyNDBFMzZEMDAwMDAwMDAwMDQ1ODgKKzoxMDgwNjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDBBODhBODQwRjMKKzoxMDgwNzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDJGODMyMjAyN0QKKzoxMDgwODAwMDgwMzIwMDAwMEU4ODQyNDA4MTMyMDAwMDAwMDAwMDQ0MkYKKzoxMDgwOTAwMDkzOTMwMTAwMDAwMDFBMDI2ODk3MDEwMDJGODMwMDQwQUIKKzoxMDgwQTAwMDA1QjAwMDAwMDA4MDAwQTY1NkIxMDEwMDU2OTUyRjQwOTMKKzoxMDgwQjAwMDA1QjAwMTAwMDQwMEEyNDBFNzZEMDAwMEI4OTQyOTQxMUEKKzoxMDgwQzAwMEU3QjEwMTAwMDAwMDAwNTRFRjkzMDEwMDAwMDAwMEYyNEUKKzoxMDgwRDAwMDBFQjAwMTAwMDQwMEEzMEM1NTZGMDAwMDI5MDAwMDQwMDEKKzoxMDgwRTAwMDBEOTgwMTAwMDkwMDAwMDcxMkU0MDEwMDAwMDAwMEE3M0MKKzoxMDgwRjAwMDEzQzAwMTAwMDMwMDAwMDcxQUY0MDEwMDA3MDAwMDA3ODUKKzoxMDgxMDAwMDE2ODgwMTAwRkZGRjAwMTAzNEQ4MDEwMDAwMDAwMDAzQjIKKzoxMDgxMTAwMDM0OTQwMTAwMDAwMDAwNDAyM0IwMDEwMDIwMTgwMDQwMEEKKzoxMDgxMjAwMDExOTgwMTAwMDQwMDIwQUEwRjZDMDAwMDAwQjUwMDBEOUEKKzoxMDgxMzAwMDQyQzkwMTAwNDY4ODIyMEJFNjdEMDAwMDI1ODg2MDQwODgKKzoxMDgxNDAwMDgxMzIwMDAwRkZGRjAwMDc4NDg5MDEwMDJFODgwNUMyRUMKKzoxMDgxNTAwMDI0MzAwMDAwNTgwNDAwNDA4MTMyMDEwMDAwMDAyRDA1NDkKKzoxMDgxNjAwMDQ4QjEwMTAwNjM4ODcwRjAxODMwMDEwMDEwMDAwMDBDNjUKKzoxMDgxNzAwMDgyRjQwMTAwMDQwMEEyNDEwRTZDMDAwMDQ2ODgwMDQwMTkKKzoxMDgxODAwMDgxQjIwMDAwMDAwMDcwNDA4MUIyMDEwMDNEODhBMDQ4MkIKKzoxMDgxOTAwMDIzNkMwMDAwMDAwMDAwNTAzNUQwMDEwMDAwODAwMDFBNjAKKzoxMDgxQTAwMDQyQzkwMTAwMzc4ODIyNDBFMzZEMDAwMDAwMDAwMDQyMTAKKzoxMDgxQjAwMDYxQjEwMTAwNDAwMDAwMUE2MkREMDEwMDM0ODhBODQwNkUKKzoxMDgxQzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDIwOTgwMDQwMEEKKzoxMDgxRDAwMDQzOTkwMTAwNjM4ODAwRjgxODMwMDEwMDM4ODhBMjQxRjMKKzoxMDgxRTAwMDIzNTAwMDAwRkZGRjAwMTAzNEQ4MDEwMDAwMDAwMDAzRkUKKzoxMDgxRjAwMDM0OTQwMTAwMjAxODAwNDAxMTk4MDEwMDAwMDAyRTFBNEMKKzoxMDgyMDAwMDQ4QjEwMTAwMDAwMDAwNDRGMUIxMDEwMDAwMDAwMDA4ODUKKzoxMDgyMTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMDIwMDAwMDFBMkQKKzoxMDgyMjAwMDYyREQwMTAwNDE4OEE4MDlFMDMxMDAwMDAwMDAwMDQxNDIKKzoxMDgyMzAwMDIzQzAwMTAwMDAwMDAwNTAzNUMwMDEwMDAwMDAwMDQ0RDAKKzoxMDgyNDAwMDExQzAwMTAwNTI4ODIyNDEwRDUwMDAwMDAwMDAwMDQxODEKKzoxMDgyNTAwMDBGQzAwMTAwNEU4OEEwQUEwRjZDMDAwMDAwMDAwMDQxNzIKKzoxMDgyNjAwMDBGQjAwMTAwMDkwMDAwMDcxMkU0MDEwMDAwMDAwMEE3QTAKKzoxMDgyNzAwMDEzQzAwMTAwMDAwMDAwNDAxQkIwMDEwMDIyODgwMDQxMzMKKzoxMDgyODAwMDE3QjAwMDAwMDAwMjAwMDkxMkM4MDEwMDIyODg4MzQxRDMKKzoxMDgyOTAwMDE3NDAwMDAwMDAwMDAwNDAxN0IwMDEwMDIyODgwMDQxOTQKKzoxMDgyQTAwMDFCQzAwMDAwNUQ4ODIzNDAyMzZDMDAwMDAwMDAwMDUwQ0MKKzoxMDgyQjAwMDM1RDAwMTAwMDA4MDAwMUE0MkM5MDEwMDVBODgyMjQwQ0UKKzoxMDgyQzAwMEUzNkQwMDAwMDAwMDAwNDI2MUIxMDEwMDQwMDAwMDFBQUYKKzoxMDgyRDAwMDYyREQwMTAwNTc4OEE4NDA4MTMyMDAwMDIzODMwMDg4QjYKKzoxMDgyRTAwMDFDQjAwMDAwMjA5ODAwNDA0Mzk5MDEwMDYzODgwMEY4MEEKKzoxMDgyRjAwMDE4MzAwMTAwNUI4OEEyNDEyMzUwMDAwMDAwMDAwMDQxQkIKKzoxMDgzMDAwMDBGQzAwMTAwNjA4OEEwQUEwRjZDMDAwMDAwMDAwMDQxQUYKKzoxMDgzMTAwMDBGQjAwMTAwQjg5NDIwMDdFNEIxMDEwMDU2OTUyMDQwNDkKKzoxMDgzMjAwMEU3QjEwMTAwRjA4NzAwNDAwRkIwMDAwMEZGRkYwMDBDMzQKKzoxMDgzMzAwMDgwRDgwMTAwMDQwMDI2NDA4MTMyMDAwMEMwMDIwMDBDRjkKKzoxMDgzNDAwMDdFODkwMTAwN0M4ODI2NTQ2MTMxMDAwMDZGODg4NzBDOEIKKzoxMDgzNTAwMDgwMzIwMDAwMUYwNDAwNDA4OTk4MDEwMDA5OTkwMDBDMzgKKzoxMDgzNjAwMDhBMzAwMTAwMDAwMDAwNTQ2MUIxMDEwMDBGMDAwMDQwOUMKKzoxMDgzNzAwMDYyOTkwMTAwNkY4ODI4NDA4MTMyMDAwMDA0MDBBMjU0RjUKKzoxMDgzODAwMDc3N0QwMDAwNkI4ODAwNDA4MUIyMDAwMDc3ODgyMjQ2MkMKKzoxMDgzOTAwMDE5N0MwMDAwMkEwNDAwNDA4OTk4MDEwMDA5OTkwMDBDMEEKKzoxMDgzQTAwMDhBMzAwMTAwMDAwMDAwNTQ2MUIxMDEwMDBEMDAwMDQwNUUKKzoxMDgzQjAwMDYyOTkwMTAwMDAwMEE4NDA4MUIyMDAwMDA0MDBBMjU0QUMKKzoxMDgzQzAwMDc3N0QwMDAwNzA4ODAwNDA4MUIyMDAwMDdDODgyMjQ5REYKKzoxMDgzRDAwMDE5N0MwMDAwMEUwMDAwNDA2Mjk5MDEwMDAwMDBBODQwRDYKKzoxMDgzRTAwMDgxQjIwMDAwMDQwMEEyNTQ3NzdEMDAwMDc3ODgwMDQwMkQKKzoxMDgzRjAwMDgxQjIwMDAwMTAwMDAwNDA2Mjk5MDEwMDAwMDBBODQwMTYKKzoxMDg0MDAwMDgxQjIwMDAwMDQwMEEyNTQ3NzdEMDAwMDdDODgwMDQwMDcKKzoxMDg0MTAwMDgxQjIwMDAwMzA5NDJGNTVGMTkzMDEwMDAwNDAwMEE2NzYKKzoxMDg0MjAwMDU2QjEwMTAwMkY4M0EyNDFFNTUxMDAwMDY0MDAwMDQwRDUKKzoxMDg0MzAwMEU1OTkwMTAwODQ4ODQ0NDA4MTMyMDAwMDg3ODhBMjkzMzYKKzoxMDg0NDAwMDU3NkYwMDAwMDAwMDAwNDE1N0MzMDEwMDAwMDAxQ0FCNDMKKzoxMDg0NTAwMDI3QjMwMTAwMkY4MzIyNTBGRDdGMDAwMDJGODMyMjUxN0MKKzoxMDg0NjAwMEZEN0YwMDAwMkY4M0EyNDExRDUzMDAwMDUwNDYwMDQwQjUKKzoxMDg0NzAwMDFEOUIwMTAwMzgwNTAwNDA4MTMyMDEwMDBFMDAwMDQ4QkMKKzoxMDg0ODAwMEIyQ0IwMTAwMTAwNDAwNDA0OTMxMDEwMDkzODgyMjQwMjIKKzoxMDg0OTAwMEI1NkYwMDAwMEUwMDAwNDhCMkNCMDEwMDIwMDQwMDQxN0YKKzoxMDg0QTAwMEI1NTMwMTAwMkY4MzAwNDA4MUIyMDAwMDAwMDAwMDUxNEQKKzoxMDg0QjAwMEZEODMwMTAwNDAxNjAwNDA0NTk5MDEwMDQwMDUwMDQwNDEKKzoxMDg0QzAwMDQ5MzEwMTAwMUUwMDAwNDhCMkNCMDEwMDEwMDQwMDQwRjkKKzoxMDg0RDAwMDgxMzIwMTAwMDAwMDAwREE5MUMwMDEwMDA0MDAwMDQ4NzAKKzoxMDg0RTAwMEIyQ0IwMTAwMjAwNDAwNDBCNTMzMDEwMDYwMTYyMDQwRUIKKzoxMDg0RjAwMEU1QjEwMTAwNTU4MjAwNDBCNTMzMDEwMDA4MDAwMDQ4OTUKKzoxMDg1MDAwMEIyQ0IwMTAwRkZGRjAwNEFCNDhCMDEwMDIwMDQwMDQwMDEKKzoxMDg1MTAwMDgxMzIwMTAwMEEwMDAwNDhCMkNCMDEwMDEwMDAwMDRBN0QKKzoxMDg1MjAwMEI0RjcwMTAwMjAwNDAwNDA4MTMyMDEwMDJGODMwMDQwOTUKKzoxMDg1MzAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDAyMDAwMDQwNjYKKzoxMDg1NDAwMDQzOTkwMTAwMDQwMEEyRjIwRTZDMDAwMDA0MDBBMjAyOTQKKzoxMDg1NTAwMDgwMzIwMDAwMDUwMDAwNDA0Mzk5MDEwMDAwMDAwMEYzNTQKKzoxMDg1NjAwMDA4QjAwMTAwQUU4ODIyNTA4MTZDMDAwMDBGMDQwMDQwNkEKKzoxMDg1NzAwMDg5OTgwMTAwMTAwMDAwNDA4QUU0MDEwMDA5OTkwMDA0NzQKKzoxMDg1ODAwMDhBMTQwMTAwMDQwMDIwNDgwOTZDMDAwMDA0MDAyMDU3RjAKKzoxMDg1OTAwMDgxNkMwMDAwMDQwMDIwNDBFNkIxMDEwMDAzMDAwMDQwQUYKKzoxMDg1QTAwMDk2RTQwMTAwMDAwMDAwMDQ5NkMwMDEwMEI0ODgwMDRCNkUKKzoxMDg1QjAwMDEwQzkwMDAwRTQ4QjAwNDEwOUIwMDAwMDA0MDAwMDIwNTUKKzoxMDg1QzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRTUKKzoxMDg1RDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRDUKKzoxMDg1RTAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzUKKzoxMDg1RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDE5OEMwMDQxRjMKKzoxMDg2MDAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMkEKKzoxMDg2MTAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwOTQKKzoxMDg2MjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODQKKzoxMDg2MzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNzQKKzoxMDg2NDAwMDhGQjAwMDAwNTU4QzAwNDUwOUIwMDAwMDU1OEMwMDQ1RTYKKzoxMDg2NTAwMDA5QjAwMDAwNTU4QzAwNDUwOUIwMDAwMDU1OEMwMDQ1NUMKKzoxMDg2NjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQ0EKKzoxMDg2NzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMzQKKzoxMDg2ODAwMDhGQjAwMDAwOUM4QzAwNDMwOUIwMDAwMENCOEMwMDQzRUQKKzoxMDg2OTAwMDA5QjAwMDAwQ0Y4QzAwNDQwOUIwMDAwMDNFOEUwMDQ1QjgKKzoxMDg2QTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwOEEKKzoxMDg2QjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRjQKKzoxMDg2QzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMERGOEMwMDQzNUEKKzoxMDg2RDAwMDA5QjAwMDAwREQ4QzAwNDMwOUIwMDAwMEUwOEIwMDQ1Q0MKKzoxMDg2RTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNEEKKzoxMDg2RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjQKKzoxMDg3MDAwMDhGQjAwMDAwOTg4RDAwNDIwOUIwMDAwMDk4OEQwMDQzQTIKKzoxMDg3MTAwMDA5QjAwMDAwOTg4RDAwNDQwOUIwMDAwMEUwOEIwMDQ1Q0UKKzoxMDg3MjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDkKKzoxMDg3MzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNzMKKzoxMDg3NDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEI4OEQwMDQzRkYKKzoxMDg3NTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQ1NEQKKzoxMDg3NjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzkKKzoxMDg3NzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMzMKKzoxMDg3ODAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEQwMDQzOTcKKzoxMDg3OTAwMDA5QjAwMDAwRTA4RDAwNDQwOUIwMDAwMEUwOEIwMDQ1MDYKKzoxMDg3QTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODkKKzoxMDg3QjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRjMKKzoxMDg3QzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEQwMDQyNTgKKzoxMDg3RDAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQ1Q0QKKzoxMDg3RTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDkKKzoxMDg3RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjMKKzoxMDg4MDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDBGOEUwMDQ0RTUKKzoxMDg4MTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQ1OEMKKzoxMDg4MjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDgKKzoxMDg4MzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNzIKKzoxMDg4NDAwMDhGQjAwMDAwRTA4QjAwNDIwOUIwMDAwMDIyOEUwMDQ1OEUKKzoxMDg4NTAwMDA5QjAwMDAwMjI4RTAwNDUwOUIwMDAwMEUwOEIwMDQ1MDEKKzoxMDg4NjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzgKKzoxMDg4NzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMzIKKzoxMDg4ODAwMDhGQjAwMDAwMjQ4RTAwNDIwOUIwMDAwMDI0OEUwMDQzMDcKKzoxMDg4OTAwMDA5QjAwMDAwMjQ4RTAwNDQwOUIwMDAwMDI0OEUwMDQ1NzkKKzoxMDg4QTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODgKKzoxMDg4QjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRjIKKzoxMDg4QzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRTIKKzoxMDg4RDAwMDhGQjAwMDAwMkY4RTAwNDQwOUIwMDAwMEUwOEIwMDQ1RUYKKzoxMDg4RTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDgKKzoxMDg4RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjIKKzoxMDg5MDAwMDhGQjAwMDAwNDE4RTAwNDIwOUIwMDAwMDMwOEUwMDQzNUQKKzoxMDg5MTAwMDA5QjAwMDAwNDE4RTAwNDQwOUIwMDAwMEUwOEIwMDQ1MjIKKzoxMDg5MjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDcKKzoxMDg5MzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNzEKKzoxMDg5NDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDQzOEUwMDQzNzEKKzoxMDg5NTAwMDA5QjAwMDAwMzc4RTAwNDQwOUIwMDAwMEUwOEIwMDQ1RUMKKzoxMDg5NjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzcKKzoxMDg5NzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQxQTkKKzoxMDg5ODAwMDA5QjAwMDAwOTY4RDAwNDIwOUIwMDAwMDk2OEQwMDQzQUEKKzoxMDg5OTAwMDA5QjAwMDAwOTY4RDAwNDQwOUIwMDAwMEUwOEIwMDQ1NEUKKzoxMDg5QTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODcKKzoxMDg5QjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQxNjkKKzoxMDg5QzAwMDA5QjAwMDAwNDU4RTAwNDIwOUIwMDAwMDQ1OEUwMDQzMEEKKzoxMDg5RDAwMDA5QjAwMDAwNDU4RTAwNDQwOUIwMDAwMEUwOEIwMDQ1NUUKKzoxMDg5RTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDcKKzoxMDg5RjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjEKKzoxMDhBMDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQTAKKzoxMDhBMTAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDRDOEUwMDQ1OTUKKzoxMDhBMjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDYKKzoxMDhBMzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDRFOEUwMDQyNzYKKzoxMDhBNDAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRTYKKzoxMDhBNTAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNTAKKzoxMDhBNjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDAKKzoxMDhBNzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMzAKKzoxMDhBODAwMDhGQjAwMDAwNUI4RTAwNDMwOUIwMDAwMEMxOEUwMDQzMzAKKzoxMDhBOTAwMDA5QjAwMDAwQ0Y4QzAwNDQwOUIwMDAwMDNFOEUwMDQ1QjQKKzoxMDhBQTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwODYKKzoxMDhBQjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwRjAKKzoxMDhBQzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEM5OEUwMDQzNkEKKzoxMDhBRDAwMDA5QjAwMDAwQ0Y4QzAwNDQwOUIwMDAwMDNFOEUwMDQ1NzQKKzoxMDhBRTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNDYKKzoxMDhBRjAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQjAKKzoxMDhCMDAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMEREOEUwMDQzMTUKKzoxMDhCMTAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMEUwOEIwMDQ1ODkKKzoxMDhCMjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwMDUKKzoxMDhCMzAwMDhGQjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwNkYKKzoxMDhCNDAwMDhGQjAwMDAwOTY4QzAwNDMwOUIwMDAwMEM1OEUwMDQzMzIKKzoxMDhCNTAwMDA5QjAwMDAwQ0Y4QzAwNDQwOUIwMDAwMDNFOEUwMDQ1RjMKKzoxMDhCNjAwMDA5QjAwMDAwMDQwMDAwMjA4RkIwMDAwMDA0MDAwMDIwQzUKKzoxMDhCNzAwMDhGQjAwMDAwMDIwMDJEMDU0OEIxMDEwMDA0MDBBMkYyRjAKKzoxMDhCODAwMDBFNkMwMDAwMDQwMEEyMDI4MDMyMDAwMDA3MDAyRDQwOUQKKzoxMDhCOTAwMDgxQjIwMTAwMDAwMDAwRjMwOEIwMDEwMDEwMDQwMDQwQTEKKzoxMDhCQTAwMDg5OTgwMTAwMTAwMDAwNDc4QUU0MDEwMDA5OTkwMDA0MzcKKzoxMDhCQjAwMDhBMTQwMTAwMDQwMDIwNEUwOTZDMDAwMDJBMDAwMDQ3QkUKKzoxMDhCQzAwMDgwQ0UwMTAwMDQwMDI0NDA4MTMyMDAwMDA2MDAyMDQ3Q0UKKzoxMDhCRDAwMEU2QjEwMTAwMDQwMDAwNDc5NkU0MDEwMDAwMDAwMDQ3RjAKKzoxMDhCRTAwMDk2RDAwMTAwMDAwMDAwNDc5NkQwMDEwMDAwMDAwMDA0NkMKKzoxMDhCRjAwMDk2QzAwMTAwN0Q4OTAwNEIxMEM5MDAwMEY5OEUwMDQ5MjQKKzoxMDhDMDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMkUKKzoxMDhDMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTIKKzoxMDhDMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTIKKzoxMDhDMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODIKKzoxMDhDNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzIKKzoxMDhDNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjIKKzoxMDhDNjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNTIKKzoxMDhDNzAwMDg1QjAwMDAwMzI4RjAwNDIwOUIwMDAwMDA0MDAwMDIwREYKKzoxMDhDODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzIKKzoxMDhDOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjIKKzoxMDhDQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTIKKzoxMDhDQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDIKKzoxMDhDQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjIKKzoxMDhDRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTIKKzoxMDhDRTAwMDg1QjAwMDAwMzk4RjAwNDYwOUIwMDAwMDA0MDAwMDIwNjQKKzoxMDhDRjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzIKKzoxMDhEMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjEKKzoxMDhEMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTEKKzoxMDhEMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTEKKzoxMDhEMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODEKKzoxMDhENDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzEKKzoxMDhENTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDRBOEYwMDQyNkEKKzoxMDhENjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDZEOEYwMDQyQjMKKzoxMDhENzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQkQKKzoxMDhEODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzEKKzoxMDhEOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjEKKzoxMDhEQTAwMDg1QjAwMDAwNjc4RjAwNEEwOUIwMDAwMDA0MDAwMDIwNzEKKzoxMDhEQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDEKKzoxMDhEQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc0OEYwMDQzQ0YKKzoxMDhERDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMERGOEYwMDQ0Q0YKKzoxMDhERTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNEQKKzoxMDhERjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzEKKzoxMDhFMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjAKKzoxMDhFMTAwMDg1QjAwMDAwREQ4RjAwNEIwOUIwMDAwMDA0MDAwMDIwODkKKzoxMDhFMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTAKKzoxMDhFMzAwMDg1QjAwMDAwM0Q4RjAwNDEwOUIwMDAwMDA0MDAwMDIwMTMKKzoxMDhFNDAwMDg1QjAwMDAwM0Q4RjAwNDMwOUIwMDAwMDNEOEYwMDQ0MTUKKzoxMDhFNTAwMDA5QjAwMDAwM0Q4RjAwNDUwOUIwMDAwMDNEOEYwMDQ2N0QKKzoxMDhFNjAwMDA5QjAwMDAwM0Q4RjAwNDcwOUIwMDAwMDNEOEYwMDQ4NjkKKzoxMDhFNzAwMDA5QjAwMDAwM0Q4RjAwNDkwOUIwMDAwMDNEOEYwMDRBNTUKKzoxMDhFODAwMDA5QjAwMDAwM0Q4RjAwNEIwOUIwMDAwMDNEOEYwMDRDNDEKKzoxMDhFOTAwMDA5QjAwMDAwM0Q4RjAwNEQwOUIwMDAwMDA0MDAwMDIwMjMKKzoxMDhFQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQ4OTAwMDQyMUEKKzoxMDhFQjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQ4OTAwMDQ0ODQKKzoxMDhFQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkMKKzoxMDhFRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTAKKzoxMDhFRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDAKKzoxMDhFRjAwMDg1QjAwMDAwNDg5MDAwNEIwOUIwMDAwMDA0MDAwMDIwM0QKKzoxMDhGMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUYKKzoxMDhGMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOUYKKzoxMDhGMjAwMDg1QjAwMDAwNjU5MDAwNDUwOUIwMDAwMDA0MDAwMDIwRjUKKzoxMDhGMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwN0YKKzoxMDhGNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3M0YKKzoxMDhGNTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDU2OTAwMDQ1RDQKKzoxMDhGNjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQ0IKKzoxMDhGNzAwMDg1QjAwMDAwMTU5MzAwNDYwOUIwMDAwMDA0MDAwMDIwRjEKKzoxMDhGODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMkYKKzoxMDhGOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMUYKKzoxMDhGQTAwMDg1QjAwMDAwNkQ4RjAwNDYwOUIwMDAwMDRBOEYwMDQ2NzIKKzoxMDhGQjAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4QzgKKzoxMDhGQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkIKKzoxMDhGRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDY3OEYwMDRBQzMKKzoxMDhGRTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNEIKKzoxMDhGRjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQkYKKzoxMDkwMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUUKKzoxMDkwMTAwMDg1QjAwMDAwREY4RjAwNDUwOUIwMDAwMDc0OEYwMDQzNjkKKzoxMDkwMjAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4NTcKKzoxMDkwMzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRkEKKzoxMDkwNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEREOEYwMDRDREEKKzoxMDkwNTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwREEKKzoxMDkwNjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNEUKKzoxMDkwNzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwM0UKKzoxMDkwODAwMDg1QjAwMDAwODQ5MDAwNDQwOUIwMDAwMDg0OTAwMDQyNDQKKzoxMDkwOTAwMDA5QjAwMDAwQzk4QjAwNDcwOUIwMDAwMEM5OEIwMDQ4MjcKKzoxMDkwQTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOEEKKzoxMDkwQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDg0OTAwMDRCQzMKKzoxMDkwQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkEKKzoxMDkwRDAwMDg1QjAwMDAwM0Q4RjAwNDEwOUIwMDAwMEFGOTAwMDQ3MEYKKzoxMDkwRTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDkyOTAwMDQ3MDUKKzoxMDkwRjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwM0EKKzoxMDkxMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUQKKzoxMDkxMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOUQKKzoxMDkxMjAwMDg1QjAwMDAwOTI5MDAwNDcwOUIwMDAwMDA0MDAwMDIwQzQKKzoxMDkxMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwN0QKKzoxMDkxNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkQKKzoxMDkxNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNUQKKzoxMDkxNjAwMDg1QjAwMDAwOTI5MDAwNDcwOUIwMDAwMEFGOTAwMDQ3MjIKKzoxMDkxNzAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4MDYKKzoxMDkxODAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTkKKzoxMDkxOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDkyOTAwMDQ3RDgKKzoxMDkxQTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODkKKzoxMDkxQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRkQKKzoxMDkxQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRUQKKzoxMDkxRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwREQKKzoxMDkxRTAwMDg1QjAwMDAwQkU5MDAwNDcwOUIwMDAwMEJFOTAwMDQ4NjYKKzoxMDkxRjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzkKKzoxMDkyMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUMKKzoxMDkyMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOUMKKzoxMDkyMjAwMDg1QjAwMDAwMkY5MTAwNDAwOUIwMDAwMDUxOTEwMDQ3MjcKKzoxMDkyMzAwMDA5QjAwMDAwNDM5MTAwNDgwOUIwMDAwMDhBOTAwMDQ3M0YKKzoxMDkyNDAwMDA5QjAwMDAwOEE5MDAwNDcwOUIwMDAwMDUxOTEwMDQ3MjIKKzoxMDkyNTAwMDA5QjAwMDAwNUE5MTAwNDcwOUIwMDAwMDVBOTEwMDQ4MzcKKzoxMDkyNjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQzOTEwMDQ4RDAKKzoxMDkyNzAwMDA5QjAwMDAwOEE5MDAwNDcwOUIwMDAwMDhBOTAwMDQ3QkEKKzoxMDkyODAwMDA5QjAwMDAwNDM5MTAwNDgwOUIwMDAwMDA0MDAwMDIwMkMKKzoxMDkyOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMUMKKzoxMDkyQTAwMDg1QjAwMDAwNDg5MDAwNDMwOUIwMDAwMDA0MDAwMDIwOTEKKzoxMDkyQjAwMDg1QjAwMDAwNDg5MDAwNDUwOUIwMDAwMDQ4OTAwMDQ2ODUKKzoxMDkyQzAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4QjUKKzoxMDkyRDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQ4OTAwMDRBNUEKKzoxMDkyRTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDQ4OTAwMDRDNDgKKzoxMDkyRjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzgKKzoxMDkzMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEFFOTAwMDQ3NEEKKzoxMDkzMTAwMDA5QjAwMDAwQTA5MDAwNDgwOUIwMDAwMDkxOTAwMDQ3RkIKKzoxMDkzMjAwMDA5QjAwMDAwOTE5MDAwNDcwOUIwMDAwMEFFOTAwMDQ3REUKKzoxMDkzMzAwMDA5QjAwMDAwQzk4QjAwNDcwOUIwMDAwMEM5OEIwMDQ4ODQKKzoxMDkzNDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEEwOTAwMDQ4OTMKKzoxMDkzNTAwMDA5QjAwMDAwOTE5MDAwNDcwOUIwMDAwMDkxOTAwMDQ3Q0IKKzoxMDkzNjAwMDA5QjAwMDAwQTA5MDAwNDgwOUIwMDAwMDA0MDAwMDIwRUYKKzoxMDkzNzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDVEOTEwMDQyMkYKKzoxMDkzODAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDVEOTEwMDQ0OTkKKzoxMDkzOTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTcKKzoxMDkzQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMEIKKzoxMDkzQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRkIKKzoxMDkzQzAwMDg1QjAwMDAwNUQ5MTAwNEIwOUIwMDAwMDA0MDAwMDIwNTIKKzoxMDkzRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwREIKKzoxMDkzRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQ0IKKzoxMDkzRjAwMDg1QjAwMDAwNUQ5MTAwNDMwOUIwMDAwMDA0MDAwMDIwMkEKKzoxMDk0MDAwMDg1QjAwMDAwNUQ5MTAwNDUwOUIwMDAwMDVEOTEwMDQ2MDcKKzoxMDk0MTAwMDA5QjAwMDAwNUQ5MTAwNDcwOUIwMDAwMDVEOTEwMDQ4NkYKKzoxMDk0MjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDVEOTEwMDRBRjIKKzoxMDk0MzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDVEOTEwMDRDRTAKKzoxMDk0NDAwMDA5QjAwMDAwNUQ5MTAwNEMwOUIwMDAwMDA0MDAwMDIwNEMKKzoxMDk0NTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNUEKKzoxMDk0NjAwMDg1QjAwMDAwN0E5MTAwNDYwOUIwMDAwMDA0MDAwMDIwOTkKKzoxMDk0NzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwM0EKKzoxMDk0ODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3RkEKKzoxMDk0OTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdBOTEwMDQ2NjkKKzoxMDk0QTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODYKKzoxMDk0QjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRkEKKzoxMDk0QzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRUEKKzoxMDk0RDAwMDg1QjAwMDAwOUM5MjAwNDYwOUIwMDAwMDA0MDAwMDIwMDYKKzoxMDk0RTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQ0EKKzoxMDk0RjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3OEEKKzoxMDk1MDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDlDOTIwMDQ2RDUKKzoxMDk1MTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTUKKzoxMDk1MjAwMDg1QjAwMDAwOUM5MjAwNDYwOUIwMDAwMDA0MDAwMDIwQjUKKzoxMDk1MzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzkKKzoxMDk1NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEM1OTIwMDQyRjQKKzoxMDk1NTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDUKKzoxMDk1NjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDkKKzoxMDk1NzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzkKKzoxMDk1ODAwMDg1QjAwMDAwQzM5MjAwNEEwOUIwMDAwMDA0MDAwMDIwMkEKKzoxMDk1OTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTkKKzoxMDk1QTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDkKKzoxMDk1QjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjkKKzoxMDk1QzAwMDg1QjAwMDAwQzU5MjAwNDYwOUIwMDAwMDA0MDAwMDIwRUMKKzoxMDk1RDAwMDg1QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4MjYKKzoxMDk1RTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDUKKzoxMDk1RjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMEMzOTIwMDRBM0UKKzoxMDk2MDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjQKKzoxMDk2MTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTgKKzoxMDk2MjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODgKKzoxMDk2MzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzgKKzoxMDk2NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjgKKzoxMDk2NTAwMDg1QjAwMDAwNkE5MTAwNDEwOUIwMDAwMDA0MDAwMDIwQkMKKzoxMDk2NjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDgKKzoxMDk2NzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzgKKzoxMDk2ODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc3OTEwMDQyMDIKKzoxMDk2OTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc3OTEwMDQ0NkMKKzoxMDk2QTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODQKKzoxMDk2QjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjgKKzoxMDk2QzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTgKKzoxMDk2RDAwMDg1QjAwMDAwNzc5MTAwNEIwOUIwMDAwMDA0MDAwMDIwMjUKKzoxMDk2RTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzgKKzoxMDk2RjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjgKKzoxMDk3MDAwMDg1QjAwMDAwNzc5MTAwNDMwOUIwMDAwMDA0MDAwMDIwRkMKKzoxMDk3MTAwMDg1QjAwMDAwNzc5MTAwNDUwOUIwMDAwMDc3OTEwMDQ2QzAKKzoxMDk3MjAwMDA5QjAwMDAwNzc5MTAwNDcwOUIwMDAwMDc3OTEwMDQ4MjgKKzoxMDk3MzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjMKKzoxMDk3NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc3OTEwMDRDMzcKKzoxMDk3NTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDMKKzoxMDk3NjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDcKKzoxMDk3NzAwMDg1QjAwMDAwNjU5MDAwNEMwOUIwMDAwMDA0MDAwMDIwOTYKKzoxMDk3ODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjcKKzoxMDk3OTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3RTcKKzoxMDk3QTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDU2OTAwMDRDNzUKKzoxMDk3QjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzMKKzoxMDk3QzAwMDg1QjAwMDAwODM5MzAwNDYwOUIwMDAwMDA0MDAwMDIwMkIKKzoxMDk3RDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDBBOTMwMDQyMUMKKzoxMDk3RTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDBBOTMwMDQ0ODYKKzoxMDk3RjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzMKKzoxMDk4MDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTYKKzoxMDk4MTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTYKKzoxMDk4MjAwMDg1QjAwMDAwMEE5MzAwNEIwOUIwMDAwMDA0MDAwMDIwM0UKKzoxMDk4MzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzYKKzoxMDk4NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjYKKzoxMDk4NTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNTYKKzoxMDk4NjAwMDg1QjAwMDAwMEE5MzAwNDUwOUIwMDAwMDBBOTMwMDQ2NDUKKzoxMDk4NzAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4RkYKKzoxMDk4ODAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTIKKzoxMDk4OTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDBBOTMwMDRDNTEKKzoxMDk4QTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODIKKzoxMDk4QjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDU2OTAwMDQyRjIKKzoxMDk4QzAwMDA5QjAwMDAwMTU5MzAwNDYwOUIwMDAwMDA0MDAwMDIwMTQKKzoxMDk4RDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDU2OTAwMDQ2Q0UKKzoxMDk4RTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3MTIKKzoxMDk4RjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDE1OTMwMDQ2NjgKKzoxMDk5MDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMjEKKzoxMDk5MTAwMDg1QjAwMDAwMTU5MzAwNDYwOUIwMDAwMDA0MDAwMDIwNDcKKzoxMDk5MjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODUKKzoxMDk5MzAwMDg1QjAwMDAwMUM5MzAwNDMwOUIwMDAwMDA0MDAwMDIwMjMKKzoxMDk5NDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjUKKzoxMDk5NTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3MjUKKzoxMDk5NjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDFDOTMwMDQzRjMKKzoxMDk5NzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjEKKzoxMDk5ODAwMDg1QjAwMDAwMUM5MzAwNEQwOUIwMDAwMDA0MDAwMDIwQzkKKzoxMDk5OTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTUKKzoxMDk5QTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDMyOTMwMDQzMjEKKzoxMDk5QjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzEKKzoxMDk5QzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTUKKzoxMDk5RDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDUKKzoxMDk5RTAwMDg1QjAwMDAwMDM5MzAwNEEwOUIwMDAwMDA0MDAwMDIwODUKKzoxMDk5RjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjUKKzoxMDlBMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTQKKzoxMDlBMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTQKKzoxMDlBMjAwMDg1QjAwMDAwMzI5MzAwNDMwOUIwMDAwMDA0MDAwMDIwMUMKKzoxMDlBMzAwMDg1QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4QzEKKzoxMDlBNDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTAKKzoxMDlBNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDAzOTMwMDRBOTgKKzoxMDlBNjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzAKKzoxMDlBNzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMzQKKzoxMDlBODAwMDg1QjAwMDAwNEE5MzAwNDMwOUIwMDAwMDA0MDAwMDIwQTQKKzoxMDlBOTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMTQKKzoxMDlBQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3RDQKKzoxMDlBQjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDRBOTMwMDQzNzQKKzoxMDlBQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjAKKzoxMDlBRDAwMDg1QjAwMDAwNEE5MzAwNEQwOUIwMDAwMDA0MDAwMDIwNEEKKzoxMDlBRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDRBOEYwMDQyQ0QKKzoxMDlBRjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDZEOEYwMDQyMTYKKzoxMDlCMDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMUYKKzoxMDlCMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTMKKzoxMDlCMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODMKKzoxMDlCMzAwMDg1QjAwMDAwNkQ5MzAwNDIwOUIwMDAwMDA0MDAwMDIwRDEKKzoxMDlCNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjMKKzoxMDlCNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNTMKKzoxMDlCNjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNDMKKzoxMDlCNzAwMDg1QjAwMDAwNkQ4RjAwNDYwOUIwMDAwMDRBOEYwMDQ2OTYKKzoxMDlCODAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4RUMKKzoxMDlCOTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOEYKKzoxMDlCQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDZEOTMwMDQ2RTEKKzoxMDlCQjAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNkYKKzoxMDlCQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTMKKzoxMDlCRDAwMDg1QjAwMDAwNzQ5MzAwNEEwOUIwMDAwMDA0MDAwMDIwMjIKKzoxMDlCRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzMKKzoxMDlCRjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3ODMKKzoxMDlDMDAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc0OTMwMDRBRjEKKzoxMDlDMTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMEUKKzoxMDlDMjAwMDg1QjAwMDAwMTY5MzAwNDYwOUIwMDAwMDA0MDAwMDIwMzMKKzoxMDlDMzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNzIKKzoxMDlDNDAwMDg1QjAwMDAwMTY5MzAwNDYwOUIwMDAwMDA0MDAwMDIwMTMKKzoxMDlDNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNTIKKzoxMDlDNjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTAwMDQ3MTIKKzoxMDlDNzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDE2OTMwMDQ2RTMKKzoxMDlDODAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOUUKKzoxMDlDOTAwMDg1QjAwMDAwMTY5MzAwNDYwOUIwMDAwMDA0MDAwMDIwQzMKKzoxMDlDQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDIKKzoxMDlDQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDdEOTMwMDQyQzQKKzoxMDlDQzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNUUKKzoxMDlDRDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDIKKzoxMDlDRTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzIKKzoxMDlDRjAwMDg1QjAwMDAwMDM5MzAwNEEwOUIwMDAwMDA0MDAwMDIwNzIKKzoxMDlEMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTEKKzoxMDlEMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOTEKKzoxMDlEMjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwODEKKzoxMDlEMzAwMDg1QjAwMDAwN0Q5MzAwNDYwOUIwMDAwMDA0MDAwMDIwQkIKKzoxMDlENDAwMDg1QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4QUUKKzoxMDlENTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQ0QKKzoxMDlENjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDAzOTMwMDRBODUKKzoxMDlENzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQUQKKzoxMDlEODAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc0OEYwMDRERjUKKzoxMDlEOTAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwOEQKKzoxMDlEQTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwMDEKKzoxMDlEQjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRjEKKzoxMDlEQzAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRTEKKzoxMDlERDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRDEKKzoxMDlERTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQzEKKzoxMDlERjAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQjEKKzoxMDlFMDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwQTAKKzoxMDlFMTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDc0OEYwMDRENjQKKzoxMDlFMjAwMDA5QjAwMDAwNjU4RjAwNDcwOUIwMDAwMDY1OEYwMDQ4NDkKKzoxMDlFMzAwMDA5QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwRUMKKzoxMDlFNDAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDAwMDIwNjAKKzoxMDlFNTAwMDg1QjAwMDAwMDQwMDAwMjA4NUIwMDAwMDA0MDBBMjA1QzkKKzoxMDlFNjAwMDQ4NkQwMDAwMDQwMDIyMDc4MDMyMDAwMDA3MDAyRTRCREUKKzoxMDlFNzAwMDE5OTAwMTAwRkI4NzAwMDRFNkIxMDAwMEM5OEIyMjQyNjMKKzoxMDlFODAwMDE5N0MwMDAwMEY5NzAwM0E4MTMwMDEwMEM5OEIwMDQwMTcKKzoxMDlFOTAwMDgxQjIwMDAwQzk4QjIyNDIxOTdDMDAwMEZGMUYwMDBGMTUKKzoxMDlFQTAwMDFFOEMwMTAwNzM5NjAwNDA4MTMyMDEwMERCOEI5QzBGRjkKKzoxMDlFQjAwMDgwMzIwMDAwMDAwMDAwNUMxRjgwMDEwMDAwODAwMDEwNjQKKzoxMDlFQzAwMDQyQzkwMTAwREI4QjIyNDBFMzZEMDAwMDAwMDAwMDQ1MjkKKzoxMDlFRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEQ4OEJBODQwOTQKKzoxMDlFRTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDFEODUyMjAyRkYKKzoxMDlFRjAwMDgwMzIwMDAwREM4QjQyNDA4MTMyMDAwMDAwMDAwMDQ0RDAKKzoxMDlGMDAwMDkzOTMwMTAwMDAwMDFBMDI2ODk3MDEwMDFEODUwMDQwMkMKKzoxMDlGMTAwMDA1QjAwMDAwMDQwMEEyMDU0ODZEMDAwMDA0MDAyMjA3RkYKKzoxMDlGMjAwMDgwMzIwMDAwMDUwMDJFNEIxOTkwMDEwMEZCODcwMDA0RDEKKzoxMDlGMzAwMEU2QjEwMDAwMDAwMDAwNDA4N0IwMDEwMDAwMDAwMDQwRDIKKzoxMDlGNDAwMDhEQjAwMTAwMDA4MDAwMDM0MkM5MDEwMDQwMDAwMEExNjMKKzoxMDlGNTAwMDQ0QzkwMTAwMDAwMDAwRjBFMEIxMDEwMDdGOTgwMDA2NTQKKzoxMDlGNjAwMDA3NDAwMTAwMDQwMEEyNUMxRjdDMDAwMDAwMDAwMDA2MDYKKzoxMDlGNzAwMDA3RDAwMTAwRDQwMDJFNUMxRjkwMDEwMDAwMDAwMDA3RjQKKzoxMDlGODAwMEYwQjEwMTAwMEM4MDAwMDM0MkM5MDEwMDAwMDAwMEYwQTQKKzoxMDlGOTAwMEYwQjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZFQUQKKzoxMDlGQTAwMDk2QjAwMTAwMDAwMDAwRkU5NkMwMDEwMDAwMDAwMEYwMjUKKzoxMDlGQjAwMEYwQjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZFOEQKKzoxMDlGQzAwMDk2QzAwMTAwMDAwMDAwRkU5NkMwMDEwMDAwMDAwMEYwRjUKKzoxMDlGRDAwMEYwQjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAwMDAwMEZBNzEKKzoxMDlGRTAwMDk2QzAwMTAwMDAwMDAwRkU5NkMwMDEwMDAwMzAwMDRCNEEKKzoxMDlGRjAwMDk0ODgwMTAwMDAwMDAwNDY5NUYwMDEwMDAwMDAwMDRBMkUKKzoxMEEwMDAwMDk2QzAwMTAwNUUwMTJFMzQ5Nzg0MDEwMDAyMDAwMDRCQ0YKKzoxMEEwMTAwMEU0RTUwMTAwNjQwMTIwNDBFMUIxMDEwMDA5MDAwMDA3MEUKKzoxMEEwMjAwMDg2RTQwMTAwMDAwMDJFQTc4N0MwMDEwMDEwMDAwMDEwODgKKzoxMEEwMzAwMDQ4QzkwMTAwMTAwMDAwNDBGMTk5MDEwMDU4MDEwMDQzOTcKKzoxMEEwNDAwMEYwQzkwMTAwNTgwMTAwMDVFMEM5MDEwMDAwMDAwMDQ0MEEKKzoxMEEwNTAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDA4OENBODQwRUQKKzoxMEEwNjAwMDgxMzIwMDAwMDAwMDAwMDU0OEIxMDEwMDFBMDAwMDQwRTQKKzoxMEEwNzAwMDk3OTgwMTAwMDgwMDJFNDA5NUIwMDEwMDEwOEMyMDRCRUQKKzoxMEEwODAwMDk0NkMwMDAwMDAwMDAwNDBGMUIxMDEwMDBEOEMwMDQxMTMKKzoxMEEwOTAwMDk1QzAwMDAwMTA4MDAwMTA0MkM5MDEwMDE3OEMyMjQwQkEKKzoxMEEwQTAwMEUzNkQwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwQjkKKzoxMEEwQjAwMDYyREQwMTAwMTM4Q0E4NDA4MTMyMDAwMDIzODMwMDg4RjgKKzoxMEEwQzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDBGOTcwMDQwREYKKzoxMEEwRDAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDBDODAwMDAzNjEKKzoxMEEwRTAwMDQyQzkwMTAwMDAwMDAwRjg4NkIwMDEwMDAwMDAwMEY4M0QKKzoxMEEwRjAwMDg4QjAwMTAwMTQ4MDAwMDM5OEM4MDEwMDA0MDBBMkExRTgKKzoxMEExMDAwMDk4NkMwMDAwMUU4QzQ0NDA4MTMyMDAwMDIxOENBMjRDQ0YKKzoxMEExMTAwMEZEN0YwMDAwMjI4QzAwNENGRDkzMDAwMDIzOEMyMEYwN0EKKzoxMEExMjAwMDU2NkYwMDAwMDAwMDAwRjA1NkIzMDEwMDAwMDAxQzQwMTQKKzoxMEExMzAwMDgxQjIwMTAwNjQwMDAwNDA4MTk4MDEwMDY0MDAwMDQwODkKKzoxMEExNDAwMDgwQ0MwMTAwMDQwMEE2NDA4MTMyMDAwMEQ4MDAwMDQwMEQKKzoxMEExNTAwMDgxOTgwMTAwMDQwMEEyNDM4MTA0MDAwMDAwODAwMDEwRTcKKzoxMEExNjAwMDQ0QzkwMTAwNjQwMDAwNDBGMTk5MDEwMDcwMDAwMDA1M0QKKzoxMEExNzAwMEYwQzkwMTAwMDAwMDAwNDNGMEIxMDEwMDAwMDAwMDQ3RjkKKzoxMEExODAwMDYxQjEwMTAwMjAwMDAwMTA2MkREMDEwMDJFOENBODQ0QTYKKzoxMEExOTAwMEUwMzEwMDAwMTAwMDAwMTA4Q0M4MDEwMDAwODAwMDQ2NzMKKzoxMEExQTAwMDQ0QzkwMTAwNDAwMDAwNDBGMTk5MDEwMDY4MDEwMDA1MjgKKzoxMEExQjAwMEYwQzkwMTAwNjQwMDAwNDNGMEM5MDEwMDA0MDAyNDQwMUMKKzoxMEExQzAwMDgxMzIwMDAwMDAwMDAwNDc2MUIxMDEwMDAwMDAwMDQ2M0MKKzoxMEExRDAwMDYyQjEwMTAwMzc4Q0E4NDRFMDMxMDAwMDIzODMwMDg4N0QKKzoxMEExRTAwMDFDQjAwMDAwMDkwMDAwMDc4NkU0MDEwMDM4MDAyRUE3MUIKKzoxMEExRjAwMDg3QzAwMTAwOEIwMDJEMDU0OEIxMDEwMDNGOEMyMjQzMzAKKzoxMEEyMDAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDQyOEMyMjQ0NkIKKzoxMEEyMTAwMEU3N0QwMDAwMDAwMDAwNEM0NUMxMDEwMDAwMDAwMDRBM0QKKzoxMEEyMjAwMDE5OTAwMTAwNjgwMTIwQTJFNEIxMDEwMDg4MDAwMDQwRkIKKzoxMEEyMzAwMDQzOTkwMTAwNDY4QzIzMEJFNTZEMDAwMDAwMDAwMDQxQUUKKzoxMEEyNDAwMDE5OTAwMTAwMDA4MDAwMTA0NEM5MDEwMDUwMDAwMDQwMzYKKzoxMEEyNTAwMEYxOTkwMTAwNTgwMTAwNDNGMEM5MDEwMDU4MDEwMDA1QkYKKzoxMEEyNjAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwREQKKzoxMEEyNzAwMDYyQjEwMTAwNEI4Q0E4NDA4MTMyMDAwMDIzODMwMDg4MkEKKzoxMEEyODAwMDFDQjAwMDAwNUMwMDJFMDU0OEIxMDEwMDAwODAwMDAzRjYKKzoxMEEyOTAwMDQyQzkwMTAwMDAwMDYwRjA5NkIwMDEwMEEwMDAwMDQwM0IKKzoxMEEyQTAwMDQzOTkwMTAwMDQwMEEyRjI4MDMyMDAwMDBGOTcwMDQxQTAKKzoxMEEyQjAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDU4OENBMjQ5M0YKKzoxMEEyQzAwMDE5N0MwMDAwODYwMDAwNDA0Nzk5MDEwMDVDOEMwMDQwMkEKKzoxMEEyRDAwMEU1QjEwMDAwODYwMDJGNDkxOTgwMDEwMDVDOENBMkYyRDQKKzoxMEEyRTAwMDgwMzIwMDAwOEIwMDAwNDA0Nzk5MDEwMDAwMDAwMDQyQ0UKKzoxMEEyRjAwMEU3OTEwMTAwNUY4Q0EyNDYxOTdDMDAwMEEwMDAwMDQwOUQKKzoxMEEzMDAwMDQ3OTkwMTAwNjM4QzAwNDBFNUIxMDAwMEEwMDAyRjQ2OTIKKzoxMEEzMTAwMDE5ODAwMTAwNjM4Q0EyRjI4MDMyMDAwMDhCMDAwMDQwQTMKKzoxMEEzMjAwMDQ3OTkwMTAwMDAwMDAwNDFFNzkxMDEwMDA3MDAwMDRFM0QKKzoxMEEzMzAwMDgwRTQwMTAwMDAzOTAwNDA4MEM4MDEwMDA0MDBBMjQwMTAKKzoxMEEzNDAwMDA2NkMwMDAwQTgwMDAwNDA0Mzk5MDEwMDM0MDAyREYwODUKKzoxMEEzNTAwMDI0QjAwMTAwMDAwMDAwRkIwQ0IwMDEwMDAwMDAwMEZCNzUKKzoxMEEzNjAwMDEwQjAwMTAwMDAwMDAwRkIxMkIwMDEwMDBGMDAwMEYzNkMKKzoxMEEzNzAwMDE2ODgwMTAwMDQwMDAwRjMxNEY0MDEwMDkzOEMyNjQwQjkKKzoxMEEzODAwMDgxMzIwMDAwNzk4QzIyMEExNjZDMDAwMDU4MDAzRDQzOEYKKzoxMEEzOTAwMDEzRTAwMTAwMDAwMDAwRjg4MkIwMDEwMDA0MDAyMkYwODgKKzoxMEEzQTAwMDg0MzAwMDAwMUI5ODAwNDA4MTMyMDEwMDIzODMwMDg4MjQKKzoxMEEzQjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwMDAwMDQxOTEKKzoxMEEzQzAwMDEzQzAwMTAwNzg4Q0EwNDMxMzZDMDAwMDAwMDAwMDQwMTMKKzoxMEEzRDAwMDEzQjAwMTAwNkU4QzAwNDExNUQwMDAwMDkzOEMyMjBBNEUKKzoxMEEzRTAwMDgwMzIwMDAwMDQwMEEyMDgxMjZDMDAwMDU4MDAzRDQzQjcKKzoxMEEzRjAwMDEzRTAwMTAwMDAwMDAwRjg4MkIwMDEwMDA0MDAyMkYwMjgKKzoxMEE0MDAwMDg0MzAwMDAwMUI5ODAwNDA4MTMyMDEwMDQwMDAyMDQwNTEKKzoxMEE0MTAwMEUxQjEwMTAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1QUEKKzoxMEE0MjAwMDQ4QjEwMTAwOTM4QzIyNDExNTUwMDAwMDAwMDAwMDQxMEEKKzoxMEE0MzAwMDExQzAwMTAwODY4Q0EwNDMxMTZDMDAwMDAwMDAwMDQwOTgKKzoxMEE0NDAwMDExQjAwMTAwMDQwMDIyMDYxMDZDMDAwMDU4MDAzRDQzQ0EKKzoxMEE0NTAwMDExRTAwMTAwMDAwMDAwRjgzNkIwMDEwMDA0MDAyMkYwMTUKKzoxMEE0NjAwMDAwMzAwMDAwMDAwMDAwNTA4M0IwMDEwMDU0OTcwMDQ3MDYKKzoxMEE0NzAwMDYxMzEwMTAwMjM4MzAwODgxQ0IwMDAwMDMxOTQwMDA1ODUKKzoxMEE0ODAwMDQ4MzEwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwQUEKKzoxMEE0OTAwMDYyREQwMTAwOEY4Q0E4NDA4MTMyMDAwMDIzODMwMDg4OTgKKzoxMEE0QTAwMDFDQjAwMDAwODI4QzAwMDU0OEIxMDAwMDM3MDAyMDQwM0QKKzoxMEE0QjAwMEU3QjEwMTAwODY5NzAwNTE4MTMwMDEwMEUwOEIwMDQwMzgKKzoxMEE0QzAwMDgxQjIwMDAwMzcwMDAwNDA0Mzk5MDEwMDA0MDBBMkYzNkMKKzoxMEE0RDAwMDgwMzIwMDAwMzQwMDJFNDFGNUIxMDEwMDAwMTEwMDQwMkYKKzoxMEE0RTAwMEU1OTkwMTAwMDQwMEEyNDgxOTdDMDAwMEEwOEMwMDQ4RjYKKzoxMEE0RjAwMDE5OTAwMDAwMzcwMDAwNDA0Mzk5MDEwMDA0MDBBMkYzQzYKKzoxMEE1MDAwMDgwMzIwMDAwMzQwMDJFNDFGNUIxMDEwMDAwMTEwMDQwRkUKKzoxMEE1MTAwMEU1OTkwMTAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4MzUKKzoxMEE1MjAwMDk0QjAwMTAwQTc4QzIyNDUyMzdDMDAwMEIwMDAyRkYwREUKKzoxMEE1MzAwMDhDQjAwMTAwMDAwMDYwRjA4Q0MwMDEwMDdDMDAwMDQwODUKKzoxMEE1NDAwMDQzOTkwMTAwMDQwMEEzRjA4QzZDMDAwMDkwMDAwMDQwQ0YKKzoxMEE1NTAwMDQzOTkwMTAwMzUwMDJERjA4Q0IwMDEwMDM0MDAyREYzM0IKKzoxMEE1NjAwMDg0QjAwMTAwMDQwMDIyRjM4NDZDMDAwMDU4MDAzRTQzRDQKKzoxMEE1NzAwMDg1RTAwMTAwQUU4QzIyNDgxOTdDMDAwMDAwMDAwMDQxRkIKKzoxMEE1ODAwMDhEQzAwMTAwMDAwMDY4MEE4Q0MwMDEwMDM4MDAyQTRBMTIKKzoxMEE1OTAwMEUwQjEwMTAwMjgwMDAwMDBFMEM5MDEwMDNDMDAyMDFCRTAKKzoxMEE1QTAwMEUwQjEwMTAwMTA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4ODIKKzoxMEE1QjAwMDM4QjAwMTAwMDAwMDAwRjgyNkIwMDEwMDA0MDAyMkY4QzUKKzoxMEE1QzAwMDAyMzAwMDAwQkM4QzIzMDExNDZDMDAwMDAwMDAwMEY4NzUKKzoxMEE1RDAwMDgwQjAwMTAwMDAwMDAwRjg4MkIwMDEwMDRDMDAyMEYwQzMKKzoxMEE1RTAwMEU0QjEwMTAwNDQwMDIwNDBFMEIxMDEwMDQ4MDAyMDQxRjYKKzoxMEE1RjAwMEUwQjEwMTAwQTgwMDJEMTAzMkIwMDEwMDVGOTgwMEYwMUEKKzoxMEE2MDAwMDI0MzAwMTAwQzU4Q0EyNDQ4MTZDMDAwMEMzOEMyMjQxMUYKKzoxMEE2MTAwMDE5N0MwMDAwQkM5NTAwNDAzQjMwMDEwMEVEOENBMjA4ODUKKzoxMEE2MjAwMDNDMzAwMDAwQzU4QzAwNDA4MUIyMDAwMEJGOTQwMDQwNjcKKzoxMEE2MzAwMDgxMzIwMTAwRUQ4Q0EyMDgzQzMwMDAwMDUwMDAyMDFDNEIKKzoxMEE2NDAwMEUwQjEwMTAwNTQwMDIwMTNFMEIxMDEwMDRFMDAyMDAxRjAKKzoxMEE2NTAwMEU0QjEwMTAwNDAwMDIwMEFFMEIxMDEwMDg2OTcwMDVGRUMKKzoxMEE2NjAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDM3MDAwMDQwRTMKKzoxMEE2NzAwMDQ3OTkwMTAwOTU5NTAwRjM5NDMwMDEwMEEwOEMyMjRBN0YKKzoxMEE2ODAwMDgwMzIwMDAwRDE4QzAwNDA4MUIyMDAwMDM3MDAwMDQwRDEKKzoxMEE2OTAwMDQ3OTkwMTAwOTU5NTAwRjM5NDMwMDEwMDA0MDAyMDQzOTAKKzoxMEE2QTAwMDk3NkMwMDAwNTgwMDNFNDM5N0UwMDEwMDAwMDAwMDFCM0IKKzoxMEE2QjAwMEYwQjEwMTAwMUYwMDYwMDAwMDhDMDEwMEUwOEI4NTExRUIKKzoxMEE2QzAwMDgwMzIwMDAwMDQ4MDAwMDM0MkM5MDEwMEIwMDAyRkYwNzYKKzoxMEE2RDAwMDhDQjAwMTAwMDAwMDYwRjA4Q0MwMDEwMDdDMDAwMDQwRTQKKzoxMEE2RTAwMDQzOTkwMTAwMDQwMEEzRjA4QzZDMDAwMDg2OTcwMDVGODIKKzoxMEE2RjAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDA0MDAyMjQ5NUIKKzoxMEE3MDAwMDE5N0MwMDAwREY4QzAwNDkxOTgwMDAwMEU0OEMyMjQxOTQKKzoxMEE3MTAwMDE5N0MwMDAwQkM5NTAwNDAzQjMwMDEwMEU4OENBMjA4ODkKKzoxMEE3MjAwMDNDMzAwMDAwODY5NzAwNUY4MTMwMDEwMEUwOEIwMDQwRTQKKzoxMEE3MzAwMDgxQjIwMDAwQkY5NDAwNDA4MTMyMDEwMEU4OENBMjA4ODEKKzoxMEE3NDAwMDNDMzAwMDAwODY5NzAwNUY4MTMwMDEwMEUwOEIwMDQwQzQKKzoxMEE3NTAwMDgxQjIwMDAwNTAwMDJEMTAzMkIwMDEwMDU0MDAyREYwRTUKKzoxMEE3NjAwMDM4QjAwMTAwNEUwMDJERjAyNkIwMDEwMDQwMDAyREYyNUYKKzoxMEE3NzAwMDAyQjAwMTAwMDAwMDAwRjAxNEIwMDEwMDMwMDAwMDEwMzEKKzoxMEE3ODAwMDhDQzgwMTAwMDA4MDAwNDY0NEM5MDEwMDY4MDEyRDQ0QzYKKzoxMEE3OTAwMDYxQjEwMTAwMTAwMDY4RjI4MEM4MDEwMDAwMDAwMDA4RUIKKzoxMEE3QTAwMEYwQjEwMTAwNTgwMTAwMDVFMEM5MDEwMDAwMDAwMDBCRjQKKzoxMEE3QjAwMDM3QjAwMTAwMDAwMDAwNDAzNkQwMDEwMDVDMDEyRTQwOUYKKzoxMEE3QzAwMDEwQzAwMTAwMDAwMDAwMDY4MEMwMDEwMDAwMDAwMDUyMUYKKzoxMEE3RDAwMDgxRDAwMTAwMTg5NzAwNDBFNDMxMDEwMDIwMDAwMDQ2QkMKKzoxMEE3RTAwMDYyREQwMTAwRjk4Q0E4NDAyMzMwMDAwMDBFOTUwMDQwODYKKzoxMEE3RjAwMDgxMzIwMTAwMTY5NTAwNDA4MTMyMDEwMDA3OEQ4MjQxQUYKKzoxMEE4MDAwMDIzNDAwMDAwMjA4MDAwMTA0MkM5MDEwMDA0OEQyMjQwMzYKKzoxMEE4MTAwMEUzNkQwMDAwMDAwMDAwNDY2MUIxMDEwMDQwMDAwMDEwM0YKKzoxMEE4MjAwMDYyREQwMTAwMDE4REE4NDA4MTMyMDAwMDIzODMwMDg4OTEKKzoxMEE4MzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwMDAwMDEwM0QKKzoxMEE4NDAwMDMyQjAwMTAwMDAwMDAwNDEyM0IwMDEwMDAwODAwMDE5NzcKKzoxMEE4NTAwMDQ0QzkwMTAwMEY4RDIyNDExOTdDMDAwMDBCOERBMzAxMUEKKzoxMEE4NjAwMDBDNkMwMDAwMEM4RDAwMDYwNEIwMDAwMDAwMDAwMDAxMUMKKzoxMEE4NzAwMDA0QjAwMTAwMEU4RDIwMDIzNjZDMDAwMDAwMDAwMDFCQTkKKzoxMEE4ODAwMDA0QjAwMTAwMTI4RDAwMDJFMEIxMDAwMDExOERBMzAxOUYKKzoxMEE4OTAwMDBDNkMwMDAwMTI4RDAwMDYwNEIwMDAwMDAwMDAwMDAxRTYKKzoxMEE4QTAwMDA0QjAwMTAwMDAwMDY4MDIxNjk0MDEwMEZGRkYwMDBCRDUKKzoxMEE4QjAwMDE2RDgwMTAwMDAwMDY4MDgzRTk2MDEwMDAwMDAwMDFDNDgKKzoxMEE4QzAwMEYwQjEwMTAwMDAwMDAwNDY2MUIxMDEwMDIwMDAwMDE5NTQKKzoxMEE4RDAwMDYyREQwMTAwMTc4REE4MTNFMDMxMDAwMDU0OEQyMjAyQzMKKzoxMEE4RTAwMDE0NTAwMDAwNDQwMDJEMDIwQ0QwMDEwMDNGOERBMjAyNDQKKzoxMEE4RjAwMDAyNTAwMDAwMjU4RDIyNUMxRjdDMDAwMDIwODAwMDAzOTgKKzoxMEE5MDAwMDQyQzkwMTAwMjQ4RDIyNDBFMzZEMDAwMDAwMDAwMDQ3OTEKKzoxMEE5MTAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDIwOERBODQwRkYKKzoxMEE5MjAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NzUKKzoxMEE5MzAwMDQ4QjEwMTAwNDQwMDJENUMxRjgwMDEwMDQ4MDAyREYwNEIKKzoxMEE5NDAwMDM4QjAwMTAwNEMwMDJERjAyNkIwMDEwMDM4MDAyRkYyODUKKzoxMEE5NTAwMDAyQjAwMTAwNDE4RDIyMDExNDZDMDAwMDA0MDBBNDQwRUIKKzoxMEE5NjAwMDgxMzIwMDAwMzM4RDIyNDYxRjdDMDAwMDAwMDAwMDQ2MkIKKzoxMEE5NzAwMDFGODAwMTAwMjAwMDJEMDM0OEIxMDEwMDMyOEQyMjQwQ0MKKzoxMEE5ODAwMEUzNkQwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwRDAKKzoxMEE5OTAwMDYyREQwMTAwMkY4REE4NDA4MTMyMDAwMDIzODMwMDg4RjIKKzoxMEE5QTAwMDFDQjAwMDAwMzgwMDJGMDU0OEIxMDEwMDAwMDAwMEY4N0QKKzoxMEE5QjAwMDk0QjAwMTAwMzgwMDJERjA5NkIwMDEwMDAwMDAwMDRDNkEKKzoxMEE5QzAwMEUxQzEwMTAwMjAwMDAwMDM0OEM5MDEwMDAwMDAyMjRBNDMKKzoxMEE5RDAwMEYxQjEwMTAwNDQwMDAwMDVGMEM5MDEwMDAwMDAwMDRBODcKKzoxMEE5RTAwMEYwQjEwMTAwMDAwMDAwNEJFMEIxMDEwMDAwMDAwMDQ3QTEKKzoxMEE5RjAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDNDOERBODVDRjMKKzoxMEFBMDAwMDFGMTAwMDAwNDE4RDAwMDU0OEIxMDAwMDAwMDAwMDAyNDkKKzoxMEFBMTAwMDM4QzAwMTAwMDQwMDI0NDA4MTMyMDAwMDRGOEQyMjA2MUUKKzoxMEFBMjAwMDgwMzIwMDAwMDAwMDAwNTAzM0MwMDEwMDREOERBMjAyQjIKKzoxMEFBMzAwMDM2NkMwMDAwMDQwMDIyNDExOTdDMDAwMDA0MDA4RjBERDgKKzoxMEFBNDAwMDQyMzEwMDAwMDQwMDIyRjA4MDMyMDAwMDA0MDAyMjVDNDkKKzoxMEFBNTAwMEUxN0QwMDAwMDQwMEEyRjA2QTA2MDAwMDEwMDAwMEY4OEEKKzoxMEFBNjAwMDEwQzgwMTAwMDAwMDAwNUMxMTgwMDEwMEYwMDcwMDQwRTgKKzoxMEFBNzAwMDM3OTgwMTAwRkQ4QzAwQTExQUIwMDAwMDAwMDAwMDAyMTAKKzoxMEFBODAwMDEwQzAwMTAwRkQ4QzAwMDIzNkQwMDAwMDUwMDAyMDFDRDgKKzoxMEFBOTAwMEUwQjEwMTAwNTQwMDIwMTNFMEIxMDEwMDRFMDAyMDAxOUMKKzoxMEFBQTAwMEU0QjEwMTAwNDAwMDIwMEFFMEIxMDEwMDVCOEQwMDVGQ0QKKzoxMEFBQjAwMDAxQjAwMDAwMDQwMEEyMDIwMjZDMDAwMDA0MDBBMjAyMjcKKzoxMEFBQzAwMDBDNkMwMDAwMzcwMDJENDYwMUIwMDEwMDA0MDAwMEYzQkIKKzoxMEFBRDAwMDgwRjQwMTAwNUE4REEwNDM4MTZDMDAwMDAwMDAwMDU1RjUKKzoxMEFBRTAwMDAxQjAwMTAwNDAwMDIwNDBFMUIxMDEwMDAwODAwMDE5RTgKKzoxMEFBRjAwMDQyQzkwMTAwNjE4RDIyNDBFMzZEMDAwMDAwMDAwMDQ2NjQKKzoxMEFCMDAwMDYxQjEwMTAwNDAwMDAwMTk2MkREMDEwMDVFOERBODQwQzYKKzoxMEFCMTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDEzOTUwMDQwQTAKKzoxMEFCMjAwMDgxMzIwMTAwMzA4MDAwMTA0MkM5MDEwMDY4OEQyMjQwNEUKKzoxMEFCMzAwMEUzNkQwMDAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwMUUKKzoxMEFCNDAwMDYyREQwMTAwNjU4REE4NDA4MTMyMDAwMDIzODMwMDg4MEEKKzoxMEFCNTAwMDFDQjAwMDAwNjAwMTJGMDU0OEIxMDEwMDAwMDAwMDBCOEYKKzoxMEFCNjAwMEU0QjEwMTAwMDAwMDAwNTAxN0YwMDEwMDZEOEQ5MEYyN0IKKzoxMEFCNzAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDA2NjIwRTAKKzoxMEFCODAwMDE3QTQwMTAwMzIwMDAwQTYyQUMwMDEwMDAwMDAwMEYyNTQKKzoxMEFCOTAwMDJBOTQwMTAwNzA4RDQ1NDg2MTMxMDAwMDAwRDAwMDFFRUMKKzoxMEFCQTAwMDYyREQwMTAwNzU4RDI4NDAwNTMwMDAwMDcxOEQyMjQ4NUUKKzoxMEFCQjAwMDc3N0QwMDAwNzg4RDAwNDA4MUIyMDAwMDAwMDAwMDE1MTQKKzoxMEFCQzAwMDYyQjEwMTAwODM4RDI4NDA4MTMyMDAwMDc1OEQwMDQwMDQKKzoxMEFCRDAwMDgxQjIwMDAwMDAwMDFEMDA5MkIwMDEwMDgwOEQyMjQxNzIKKzoxMEFCRTAwMDE5N0MwMDAwMDQwMDIyNDAzQjZDMDAwMDA0MDBBMzQ4RDQKKzoxMEFCRjAwMDNCNkMwMDAwMDA4MDAwMDM0MkM5MDEwMEM5OTQwMEY4Q0EKKzoxMEFDMDAwMDAwMzAwMTAwN0Q4REEyNDEzQjUwMDAwMDg0OEQwMDQ5NDEKKzoxMEFDMTAwMDAwQjAwMDAwRkYwNzAwMUUwMDhDMDEwMEM5OTQwMDQwMzYKKzoxMEFDMjAwMDgxMzIwMTAwODQ4RDAwNDkwMEIwMDAwMDAwMDAxRDQ3MDIKKzoxMEFDMzAwMDE5ODAwMTAwODc4RDIyNUYwMTZDMDAwMDhFOTgwMDQwMTIKKzoxMEFDNDAwMDgxMzIwMTAwQUE4ODAwMDA4MEIwMDAwMDhFOEQyMjVDNTUKKzoxMEFDNTAwMDFGN0MwMDAwMjA4MDAwMDM0MkM5MDEwMDhFOEQyMjQwMkQKKzoxMEFDNjAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwRUEKKzoxMEFDNzAwMDYyREQwMTAwOEI4REE4NDA4MTMyMDAwMDIzODMwMDg4QjMKKzoxMEFDODAwMDFDQjAwMDAwOEU4RDQwMDU0ODMxMDAwMEZGRkYwMDA3MUEKKzoxMEFDOTAwMDk0ODkwMTAwOTQ4RDg1Q0E5NDMwMDAwMDhFOTgxODVDQzgKKzoxMEFDQTAwMDFGMDAwMTAwMEUwMDAwMEYxRThDMDEwMEI3ODcwMDQwM0UKKzoxMEFDQjAwMDgxQjIwMDAwODY5NzE4MDA4MDMwMDEwMEUwOEIwMDQ3QzkKKzoxMEFDQzAwMDE5ODAwMDAwMDAwMDAwNDAxOTgwMDEwMEUwOEIyMjQ3M0QKKzoxMEFDRDAwMDE5N0MwMDAwQkY5NDAwNDA4MTMyMDEwMDlCOERBMjA4QzYKKzoxMEFDRTAwMDgwMzIwMDAwRTA4QjAwNDA4MUIyMDAwMDE4OTcwMDQwRTUKKzoxMEFDRjAwMDBEMzAwMTAwOUMwMTAwNDA0NTk5MDEwMEZGRkYwMDBCNTEKKzoxMEFEMDAwMDk4ODgwMTAwOEIwMDJENTAxN0YwMDEwMEExOEQ5MDRDMDgKKzoxMEFEMTAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMEEzOEQyMjQzMkYKKzoxMEFEMjAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDAwMDA2NjIwRUUKKzoxMEFEMzAwMDE3QTQwMTAwNjgwMTAwNDA0Mzk5MDEwMDVDMDEyRUYyNTQKKzoxMEFENDAwMDgwQjAwMTAwMDIwMDYyNDA3RUNEMDEwMDAwMDAwMDU3OEIKKzoxMEFENTAwMDgxQzAwMTAwMDAwMDJFMTA0OEIxMDEwMDAzMDAwMDQwMzYKKzoxMEFENjAwMEYwOEQwMTAwMDAwMDAwMDhGMEIxMDEwMDU4MDEwMDA1NUQKKzoxMEFENzAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwQzIKKzoxMEFEODAwMDYyQjEwMTAwQUQ4REE4NDA4MTMyMDAwMDIzODMwMDg4QUMKKzoxMEFEOTAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMEIxOEQ0NTQ4MUQKKzoxMEFEQTAwMDYxMzEwMDAwMDA1MDAwMDg2MkREMDEwMEI3OEQyODQwQ0QKKzoxMEFEQjAwMDA1MzAwMDAwQjI4RDIyNDg3NzdEMDAwMEM5OTQxRDA4M0YKKzoxMEFEQzAwMDAwMzAwMTAwRTA4QjAwNDA4MUIyMDAwMEUwOEIxRDQ3QTUKKzoxMEFERDAwMDE5ODAwMDAwMDQwMEEyMDU0ODZEMDAwMDM1MDAwMDQwMDUKKzoxMEFERTAwMDQ3OTkwMTAwMDEwMDYzRjM4NEM4MDEwMEJEOERBMDQzQjEKKzoxMEFERjAwMDg1NkMwMDAwMDAwMDYzNDA4NUIwMDEwMEE4MDAwMDQwQTEKKzoxMEFFMDAwMDQzOTkwMTAwMzcwMDJGRjAyNEIwMDEwMDA0MDAyMkYzMjEKKzoxMEFFMTAwMDlFMDYwMDAwMDEwMDYzRjM4MkNDMDEwMENCOERBMjQxQUQKKzoxMEFFMjAwMDlFMDYwMDAwRTA4QjIyNDQ4MzcwMDAwMEE4MDAwMDQwRDIKKzoxMEFFMzAwMDQzOTkwMTAwMDQwMEEyRjAyNDZDMDAwMDM2MDAwMDQwOTkKKzoxMEFFNDAwMDQzOTkwMTAwNTgwMDNENDNFN0UxMDEwMEUwOEIxRkYwMEEKKzoxMEFFNTAwMDI0NkMwMDAwOEU5ODAwNDg4MTMwMDEwMEFBODgyMzQxQUMKKzoxMEFFNjAwMDgzNkMwMDAwQUE4ODAwNDc4MUIwMDAwMDM0MDAwMDQwRDUKKzoxMEFFNzAwMDQzOTkwMTAwMDQwMDIyNDJFNjZEMDAwMDU4MDAzRDQzNjIKKzoxMEFFODAwMDg1RTAwMTAwMDAwMDAwRjgzNkIwMDEwMDAwMDAwMEYwOEQKKzoxMEFFOTAwMDAwQjAwMTAwMDQwMDIyMDA4MDMyMDAwMDA0MDBBMjAwODMKKzoxMEFFQTAwMEJFMDYwMDAwMjgwMDAwNDA4Mzk4MDEwMDU0OTcwMDQ3MjgKKzoxMEFFQjAwMDYxMzEwMTAwMjM4MzAwODgxQ0IwMDAwMDAwMDAyRDAzRDUKKzoxMEFFQzAwMDQ4QjEwMTAwMDgwMDJERjA5NEIwMDEwMDAwMDAwMEY4MjYKKzoxMEFFRDAwMDhFQjAwMTAwOTAwMDJERjAxNEIwMDEwMDAwMDAwMDA1QkMKKzoxMEFFRTAwMDQ4QjEwMTAwQTg4Q0EyNDA4RjdDMDAwMERFOEQyMjQ3NzMKKzoxMEFFRjAwMDhGN0MwMDAwMDQwMEEyNDgxOTdDMDAwMEE4OEMwMDQ4NDgKKzoxMEFGMDAwMDE5OTAwMDAwMDQwMDIyNDY4RjdDMDAwMDYwOEUwMDQwRjMKKzoxMEFGMTAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDM2MDAyRDVEREUKKzoxMEFGMjAwMDA1QjQwMTAwMzcwMDJERjM4MEIwMDEwMDAwMDAwMEYzRUMKKzoxMEFGMzAwMDhFQjAwMTAwRjAwMDAwNDc3RTg5MDEwMDA0MDAyNjQwMjkKKzoxMEFGNDAwMDgxMzIwMDAwNUMwMDNENDM4MUUwMDEwMEE4MDAyREYwNEIKKzoxMEFGNTAwMDk0QjAwMTAwMDQwMDIyNEE4MDMyMDAwMDAwMDAwMEYwOUEKKzoxMEFGNjAwMDI0QjAwMTAwMjAwMDAwMTA4NkRDMDEwMDQwODAwMDAzQjYKKzoxMEFGNzAwMDQ0QzkwMTAwOTI5MzAwNEFGMDMxMDEwMDA0MDBBMjVDMzAKKzoxMEFGODAwMDFGN0MwMDAwMzYwMDJGNUMxRjkwMDEwMEYyOERBMjUwNDQKKzoxMEFGOTAwMDhGNTAwMDAwMzQwMDIwNDBFMUIxMDEwMEUwOEIwMDQwMDAKKzoxMEFGQTAwMDgxQjIwMDAwRjAwMDAwNDc3RTg5MDEwMDA0MDAyNjQwQzUKKzoxMEFGQjAwMDgxMzIwMDAwMDAwMDYzNDE4MUMwMDEwMEY3OERBMDQzOTEKKzoxMEFGQzAwMDgxNkMwMDAwMDAwMDYzNDA4MUIwMDEwMDM3MDAyMDQ3MjEKKzoxMEFGRDAwMEU2QjEwMTAwRTA4QjIyNDc4MDMyMDAwMDA0MDAwMDQ3MDgKKzoxMEFGRTAwMDBDRjQwMTAwMDAwMDAwNEY4Rjg0MDEwMDBDOEUyMjQ3RkEKKzoxMEFGRjAwMDBDNkMwMDAwNTgwMDNENDM4MUUwMDEwMDBDOEUxRkYwRjYKKzoxMEIwMDAwMDI0NkMwMDAwMDAwMDAwNUMxRjgwMDEwMDAwODAwMDEwMjQKKzoxMEIwMTAwMDQyQzkwMTAwMDU4RTIyNDBFMzZEMDAwMDAwMDAwMDQ1OUEKKzoxMEIwMjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDAyOEVBODQwMDUKKzoxMEIwMzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDA1OEU0MjQwNEUKKzoxMEIwNDAwMDA1MzAwMDAwMDAwMDAwNDQ5MzkzMDEwMDAwMDAxQTVERTkKKzoxMEIwNTAwMDY5OTMwMTAwMEE4RTIzNDEwRDZDMDAwMEUwOEQwMDA1MEMKKzoxMEIwNjAwMDQ4QjEwMDAwOEU5ODAwMDU0ODMxMDEwMEFBODgwMDQ4QzgKKzoxMEIwNzAwMDgxQjAwMDAwRTA4QjIyNDA4RjZDMDAwMDg2OTcwMDVGNUIKKzoxMEIwODAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDQwMDIwMDBDRTIKKzoxMEIwOTAwMDdFODkwMTAwMDQwMEE2NDA4MTMyMDAwMEEyMDAwMDQwMjkKKzoxMEIwQTAwMDQzOTkwMTAwMDAwMDAwRjM4NEIwMDEwMEE2MDAyRDQ5N0YKKzoxMEIwQjAwMDE5OTAwMTAwMDIwMDAwRjI4MEY0MDEwMEI4MDAyRDQwNTgKKzoxMEIwQzAwMDgxQjIwMTAwMDAwMDAwRjI4MEMwMDEwMDAwMDAwMDQwRDkKKzoxMEIwRDAwMDgyRjgwMTAwMTkwMDAwNDA4MTk4MDEwMDFEOEVBMDQwRjcKKzoxMEIwRTAwMDgyNkMwMDAwMkMwMTAwNDA4MTk4MDEwMDFEOEVBMzQwNUQKKzoxMEIwRjAwMDgyNkMwMDAwMDAwMDAwNDE4MEIwMDEwMDFGOEUyMDRDRDcKKzoxMEIxMDAwMDg1NkMwMDAwMDAwMDAwNDE4NUMwMDEwMDg2MDAyMDQwRTEKKzoxMEIxMTAwMEU0QjEwMTAwQTIwMDIwNDJFNkIxMDEwMEUwOEIwMDQwNTIKKzoxMEIxMjAwMDgxQjIwMDAwMEY5NzAwNTA4MTMwMDEwMEUwOEIwMDQwOTkKKzoxMEIxMzAwMDgxQjIwMDAwMDQ4MDAwMDM0MkM5MDEwMDA0MDAyMkYwMzMKKzoxMEIxNDAwMDgwMzAwMDAwMDAwMDAwNDA4REIwMDEwMDdGOTgwMDQwN0EKKzoxMEIxNTAwMDg3MzAwMTAwMDQwMEEyNUMxRjdDMDAwMEIwMDAyRjVDNUYKKzoxMEIxNjAwMDFGOTAwMTAwMDAwMDYwRjA4MEMwMDEwMDdDMDAwMDQwRTIKKzoxMEIxNzAwMDQzOTkwMTAwMDQwMEEzRjA4MDZDMDAwMDg2OTcwMDVGRjMKKzoxMEIxODAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMEIxOTAwMDgxQjIwMDAwRTA4QjIyNDYxOTdDMDAwMEEwMDAwMDQwMzQKKzoxMEIxQTAwMDQ3OTkwMTAwMDEwMDYyRjI5NkNDMDEwMEUwOEJBNjQwQjUKKzoxMEIxQjAwMDgxMzIwMDAwODY5NzAwNEE4MTMwMDEwMDVCOTcwMDQ2OEIKKzoxMEIxQzAwMDk1MzAwMTAwRTA4QjAwNDA4MUIyMDAwMEUwOEIyMjQ5MDUKKzoxMEIxRDAwMDE5N0MwMDAwODYwMDAwNDA0Nzk5MDEwMDAxMDA2MkYyREUKKzoxMEIxRTAwMDgwQ0MwMTAwRTA4QkE2NDA4MTMyMDAwMDg2OTcwMDRBQTcKKzoxMEIxRjAwMDgxMzAwMTAwNUI5NzAwNDc5NTMwMDEwMEUwOEIwMDQwRjMKKzoxMEIyMDAwMDgxQjIwMDAwMzE5NDAwNDA4MTMyMDEwMDA0MDBBMjVDNTAKKzoxMEIyMTAwMDFGN0MwMDAwRTA4QjAwNUMxRjkwMDAwMDA0MDBBMjQ2MzEKKzoxMEIyMjAwMDE5N0MwMDAwRTA4QjAwNDA4MUIyMDAwMDA0MDBBMjQ5QkMKKzoxMEIyMzAwMDE5N0MwMDAwRTA4QjAwNDA4MUIyMDAwMEJBMDAwMDQwQTEKKzoxMEIyNDAwMDQ3OTkwMTAwMDEwMDYyRjI4MEM4MDEwMDQ5OEU5MDQwRDgKKzoxMEIyNTAwMDgwMzIwMDAwRkZGRjYyNDA4MTk4MDEwMEE0MDAwMDQwOUUKKzoxMEIyNjAwMDQ3OTkwMTAwRTA4QjIyNDBFNTZEMDAwMEUwOEIwMDQxMzIKKzoxMEIyNzAwMEU1QzEwMDAwMEY5NzAwNEQ4MTMwMDEwMEUwOEIwMDQwRDgKKzoxMEIyODAwMDgxQjIwMDAwNUMwMDAwNDA0Nzk5MDEwMDA0MDAyMkYwRjgKKzoxMEIyOTAwMDk2MzAwMDAwMDAwMDAwNDBFMUIxMDEwMDAwODAwMDAzOTIKKzoxMEIyQTAwMDQ0QzkwMTAwMDAwMDAwNEJFMEIxMDEwMDAwMDAwMDQwNzMKKzoxMEIyQjAwMDhEQjAwMTAwN0Y5ODAwNDA4NzMwMDEwMDhCMDAwMDQwNzYKKzoxMEIyQzAwMDQ3OTkwMTAwNTk4RTgwRjM5NjMwMDAwMDAwMDAwMDQwM0QKKzoxMEIyRDAwMEU3ODEwMTAwMDAwMDAwNDcxOTkwMDEwMDA0MDBBMjVDMTIKKzoxMEIyRTAwMDFGN0MwMDAwRTA4QjAwNUMxRjkwMDAwMDM3MDAwMDQwRDYKKzoxMEIyRjAwMDQzOTkwMTAwMDQwMEEyRjM4MDMyMDAwMDM0MDAwMDQwQjIKKzoxMEIzMDAwMDQ1OTkwMTAwMDEwMDAwNDBGNTk5MDEwMDAwMTEwMDQwM0QKKzoxMEIzMTAwMEU1OTkwMTAwQkY5NDAwNDA4MTMyMDEwMDcxOEVBMjA4QkUKKzoxMEIzMjAwMDgwMzIwMDAwMzcwMDAwNDA0Nzk5MDEwMDAwMDAwMEYzMjAKKzoxMEIzMzAwMDgyQjAwMTAwMDAwMDYzNTE4M0QwMDEwMDM0MDAwMDQwNUUKKzoxMEIzNDAwMDQ3OTkwMTAwMDEwMDYzRjM4NENDMDEwMDY5OEU5RjQyOUMKKzoxMEIzNTAwMDgwMzIwMDAwMDAwMDYzNDI4NUIwMDEwMDAwMDAwMDQ1MUIKKzoxMEIzNjAwMDAzRjAwMTAwMDAwMDAwMDEwMEMwMDEwMDZCOEUzNzVDOUIKKzoxMEIzNzAwMDYxMzEwMDAwMDAwMDAwMUI2MkIxMDEwMDZDOEVBODRCMUYKKzoxMEIzODAwMDE5MTAwMDAwMDAwMDAwMDA2MkIxMDEwMDZFOEVBODQwOUMKKzoxMEIzOTAwMDgxMzIwMDAwRjA4NzE3NDA4MUIyMDAwMDAwODAwMDAzNzYKKzoxMEIzQTAwMDQyQzkwMTAwOTAwMDJERjA5NEIwMDEwMEFDMDAyREYwRDYKKzoxMEIzQjAwMDMwQjAwMTAwMzUwMDJERjAyOEIwMDEwMDM0MDAyREYzMkQKKzoxMEIzQzAwMDg0QjAwMTAwMDQwMDIyRjM4NDZDMDAwMDU4MDAzRTQzNjYKKzoxMEIzRDAwMDg1RTAwMTAwMDEwMDAwMThGMEM5MDEwMDAwMDAwMDRBRUEKKzoxMEIzRTAwMEUwQjEwMTAwMzgwMDIwMDBFMEIxMDEwMDNDMDAyMDFCNkEKKzoxMEIzRjAwMEUwQjEwMTAwNDAwMDIwNDBFMUIxMDEwMDAwMDAwMDQwNDgKKzoxMEI0MDAwMDJCQjAwMTAwNkE5NzAwNDAwRDMwMDEwMDAwMDAwMDE4QzkKKzoxMEI0MTAwMDE2QzAwMTAwODI4RUEwMTQxNjQ0MDAwMDAwMDAwMDQxRjYKKzoxMEI0MjAwMDE3QzAwMTAwMEUwMDAwQTI0NEM5MDEwMDAwMDAwMDE4NkUKKzoxMEI0MzAwMEY4QjEwMTAwQjAwMDJEMTRGOEIxMDEwMDEwNTAwMDQwMjcKKzoxMEI0NDAwMDg3OTgwMTAwOEI4RTIyNEExOTdDMDAwMDAwMzAwMDQzNEYKKzoxMEI0NTAwMDg2QzgwMTAwMDAzMDAwMEIxNkM4MDEwMDhCOEVBNDQwODYKKzoxMEI0NjAwMDgxMzIwMDAwMDAwMDAwNDExN0MwMDEwMDAxMDA2RTQzNUUKKzoxMEI0NzAwMDg2OTgwMTAwQUU5NzAwMzA4MTMwMDEwMDhGOEVBMDQxODgKKzoxMEI0ODAwMDE3NDAwMDAwMDAwMDAwNDExN0MwMDEwMDk2OEUyMjRBQkMKKzoxMEI0OTAwMDE5N0MwMDAwMDgwMDAwQTI0NEM5MDEwMENDMDAyREFCQkIKKzoxMEI0QTAwMEY5QjEwMTAwMDAwMDAwQUIxN0MwMDEwMDk1OEVBMEYwQkIKKzoxMEI0QjAwMDE2NDQwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDA2NEYwQzUKKzoxMEI0QzAwMDgyQjAwMTAwOTAwMDAwNDA0NTk5MDEwMDAwMDA2MDQxRjkKKzoxMEI0RDAwMDMxQzAwMTAwQkMwMDAwNDA0Mzk5MDEwMDlDOEUwNjBDNjUKKzoxMEI0RTAwMDgwMzIwMDAwQTAwMDIwRjJFNEIxMDEwMDA0MDAwOTQ2MEYKKzoxMEI0RjAwMDE5MTAwMDAwOUMwMTAwNDA0NTk5MDEwMEZGRkYwMDBCNUUKKzoxMEI1MDAwMDk4ODgwMTAwOEIwMDJENTAxN0YwMDEwMEExOEU5MDRDRkYKKzoxMEI1MTAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMEEzOEUyMjQzMjYKKzoxMEI1MjAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDAwMDA2NjIwRTYKKzoxMEI1MzAwMDE3QTQwMTAwNjgwMTAwNDA0Mzk5MDEwMDVDMDEyRUYyNEMKKzoxMEI1NDAwMDgwQjAwMTAwMDIwMDYyNDA3RUNEMDEwMDAwMDAwMDU3ODMKKzoxMEI1NTAwMDgxQzAwMTAwMDAwMDJFMTA0OEIxMDEwMDAzMDAwMDQwMkUKKzoxMEI1NjAwMEYwOEQwMTAwMDAwMDAwMDhGMEIxMDEwMDU4MDEwMDA1NTUKKzoxMEI1NzAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwQkEKKzoxMEI1ODAwMDYyQjEwMTAwQUQ4RUE4NDA4MTMyMDAwMDIzODMwMDg4QTMKKzoxMEI1OTAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMEIxOEU0NTQ4MTQKKzoxMEI1QTAwMDYxMzEwMDAwMDA1MDAwMDg2MkREMDEwMEIyOEVBODQwNDkKKzoxMEI1QjAwMDA1MzAwMDAwMzUwMDFENDA0Nzk5MDEwMDAxMDA2M0YzOEMKKzoxMEI1QzAwMDg0QzgwMTAwQjg4RUEwNDM4NTZDMDAwMDAwMDA2MzQwNzEKKzoxMEI1RDAwMDg1QjAwMTAwMzcwMDAwNDA0Nzk5MDEwMDA0MDAyMkYzQzQKKzoxMEI1RTAwMDlFMDYwMDAwMDEwMDYzRjM4MkNDMDEwMDA0MDBBMjQxMkEKKzoxMEI1RjAwMDlFMDYwMDAwOEIwMDAwNDA0Nzk5MDEwMDA0MDBBMjQ1MTAKKzoxMEI2MDAwMEU3N0QwMDAwMDAwMDAwNDVFNzkxMDEwMDg2OTcwMDVGOUMKKzoxMEI2MTAwMDgxMzAwMTAwRTA4QjAwNDA4MUIyMDAwMDM3MDAwMDQwMjMKKzoxMEI2MjAwMDQ3OTkwMTAwOTU5NTAwRjM5NDMwMDEwMDYwOEUyMjRBRkQKKzoxMEI2MzAwMDgwMzIwMDAwRDE4QzAwNDA4MUIyMDAwMDM3MDAwMDQwMTEKKzoxMEI2NDAwMDQ3OTkwMTAwOTU5NTAwRjM5NDMwMDEwMDlBOEMyMjRBQTUKKzoxMEI2NTAwMDgwMzIwMDAwRDE4QzAwNDA4MUIyMDAwMDM2MDAwMDQwRjIKKzoxMEI2NjAwMDQzOTkwMTAwMDAwMDAwRkIxMkIwMDEwMDBGMDAwMEYzM0QKKzoxMEI2NzAwMDkwODgwMTAwMDQwMDAwRjMwQ0Y0MDEwMDA0MDAyNjQwNEYKKzoxMEI2ODAwMDgxMzIwMDAwQ0I4QzIyMDY5MDZDMDAwMDA0MDBBQTQwOUUKKzoxMEI2OTAwMDgxMzIwMDAwNUMwMDNENDMxM0UwMDEwMEE4MDAyREYwNjIKKzoxMEI2QTAwMDk0QjAwMTAwMDQwMDIyNDA5NTZDMDAwMDM3MDAyRkYwOTgKKzoxMEI2QjAwMDI0QjAwMTAwMzYwMDJBNTBFN0QxMDEwMDAwMDA2MzQxQTgKKzoxMEI2QzAwMDEzQzAwMTAwRDg4RUEwNDMxMzZDMDAwMDAwMDAwMDQwOUUKKzoxMEI2RDAwMEU3QjEwMTAwOEY5MzAwMTA4NjMwMDEwMDIzODMwMDg4QkEKKzoxMEI2RTAwMDFDQjAwMDAwREE4RTQyMDU0ODMxMDAwMDAwMDAwMDQ0MjIKKzoxMEI2RjAwMDkzOTMwMTAwQ0I4QzFBNUQ2OTkzMDAwMDA0MDBBMjA1QUUKKzoxMEI3MDAwMDQ4NkQwMDAwMzYwMDJEMTA4NkIwMDEwMDVDMDAzRDQzRkUKKzoxMEI3MTAwMEU3RTEwMTAwQTgwMDJERjA5NEIwMDEwMDA0MDAyMjRBRTYKKzoxMEI3MjAwMDgwMzIwMDAwMzUwMDJGRjAyNEIwMDEwMDAxMDA2QkZCRDcKKzoxMEI3MzAwMDg0QzgwMTAwRTc4RUEwNDM4NTZDMDAwMDM1MDAyMDQwREUKKzoxMEI3NDAwMEU3QjEwMTAwMDAwMDAwNDA4MUIyMDEwMDAxMDA2M0YzOTUKKzoxMEI3NTAwMDEyQzgwMTAwRUE4RUEwNDMxMzZDMDAwMDAwMDAwMDQwRjQKKzoxMEI3NjAwMEU3QjEwMTAwNDA4MDAwMDM0NEM5MDEwMDkyOTMwMDRBMDAKKzoxMEI3NzAwMEYwMzEwMTAwMjM4MzAwODgxQ0IwMDAwMEVEOEU0MjA1RUIKKzoxMEI3ODAwMDQ4MzEwMDAwMDAwMDAwNDQ5MzkzMDEwMDAwMDAxQTVENUUKKzoxMEI3OTAwMDY5OTMwMTAwMzcwMDAwNDA0Nzk5MDEwMDA0MDAyMkYzM0IKKzoxMEI3QTAwMDlFMDYwMDAwMTEwMDYzRjM4MkNDMDEwMDA0MDAxRjQxREIKKzoxMEI3QjAwMDgwMzIwMDAwQzI4RDIyNDE5RTA2MDAwMDM1MDAwMDQwMEMKKzoxMEI3QzAwMDQzOTkwMTAwNTgwMDNENDNFN0UxMDEwMDAwMDAwMEY4MDMKKzoxMEI3RDAwMDM2QjAwMTAwRDA4RDAwRjAwMEIwMDAwMDVFMDEyRDA1RjQKKzoxMEI3RTAwMDQ4QjEwMTAwRkE4RTY1RjIxMjMwMDAwMDAwOTkzRjQyMjQKKzoxMEI3RjAwMDEzRjAwMTAwRkY4RTIyNDdFNzdEMDAwMDI3ODM3NTg4NDQKKzoxMEI4MDAwMDFDQjAwMDAwRjk4RTAwNDA4MUIyMDAwMDAwMDAwMDQ3MkIKKzoxMEI4MTAwMEU3OTEwMTAwMDAwMDc1NDIxOTkwMDEwMDc1MDAwMDQwOTkKKzoxMEI4MjAwMDYxOTkwMTAwMDE4RkE4QjEwQzMwMDAwMEE5OTYwMDEwQTkKKzoxMEI4MzAwMDk0MzAwMTAwMjM4MzAwODgxQ0IwMDAwMDVFMDEyRTA1QjcKKzoxMEI4NDAwMDQ4QjEwMTAwQzBBODNENDYwREUwMDEwMDAwMDAwMDQwRTUKKzoxMEI4NTAwMDk3QjAwMTAwMEI4RjIyNDBFMTZEMDAwMDA0MDAwMjQxMEYKKzoxMEI4NjAwMDk3NDAwMDAwMDg4RjAwNTA0M0MxMDAwMDE3OEYyMjRCMDMKKzoxMEI4NzAwMDgwMzIwMDAwMDAwMDYyNEIxMjk0MDEwMDA5MDAwMDA3QjIKKzoxMEI4ODAwMDk2RTQwMTAwMDAwMDAwQTc5N0MwMDEwMDMwMDAwMDEwRkUKKzoxMEI4OTAwMDk0QzgwMTAwMDA4MDAwNEE0NDk5MDEwMDAwMDAwMDQyNjEKKzoxMEI4QTAwMEYxQjEwMTAwNUUwMTAwNEJGMEM5MDEwMDVFMDEwMDA1MkQKKzoxMEI4QjAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDIwMDAwMDRBMUQKKzoxMEI4QzAwMDYyREQwMTAwMTU4RkE4NDA4MTMyMDAwMDAwODAwMDEwNjkKKzoxMEI4RDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDA0MDAwMDA5NUEKKzoxMEI4RTAwMDk2RTQwMTAwMDAwMDY4QTg5N0MwMDEwMEQ0MDAwMDA1OUMKKzoxMEI4RjAwMEUwQzkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwMzcKKzoxMEI5MDAwMDYyQjEwMTAwMUQ4RkE4NDA4MTMyMDAwMDIzODMwMDg4QUUKKzoxMEI5MTAwMDFDQjAwMDAwMDA5OTNGNDIxM0YwMDEwMDIxOEY2NTQwRTgKKzoxMEI5MjAwMDgxMzIwMDAwM0YwMDAwRjM5Njg4MDEwMDAwMDAwMDQwRDMKKzoxMEI5MzAwMEU3QjEwMTAwMDAwMDc1NTU2MUIxMDEwMDAwMDAwMDA2OEIKKzoxMEI5NDAwMDYyQjEwMTAwMjU4RkE4NDA4MTMyMDAwMDJBOEYyMjRCNkUKKzoxMEI5NTAwMDgwMzIwMDAwMDAwMDAwNEI2MkIxMDEwMDI4OEZBODQwMzcKKzoxMEI5NjAwMDgxMzIwMDAwMDAwMDAwOTcxM0IwMDEwMDAwMDAwMDk2MzMKKzoxMEI5NzAwMDk3QjAwMTAwMzA4RjIwMDk5NjZDMDAwMDMwOEYxRjA5QUUKKzoxMEI5ODAwMDk2MjQwMDAwMjc4MzAwODgxQ0IwMDAwMDJCOEYwMDQwMDUKKzoxMEI5OTAwMDgxQjIwMDAwMEY5NzAwNTc4MTMwMDEwMEM5OEIwMDA1NkMKKzoxMEI5QTAwMDQ4QjEwMDAwMDQwMDIyNDIxOTdDMDAwMDJFMDAwMDQwMzMKKzoxMEI5QjAwMDQzOTkwMTAwMzc4RjIyRjM4MDMyMDAwMDBGOTcwMDQyMzUKKzoxMEI5QzAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMDg2OTcwMDUyNkMKKzoxMEI5RDAwMDgxMzAwMTAwQzk4QjAwNDIxOTgwMDAwMDA0MDAyMjQyMUUKKzoxMEI5RTAwMDE5N0MwMDAwMEY5NzAwM0E4MTMwMDEwMDg2OTcwMDUyQzEKKzoxMEI5RjAwMDgxMzAwMTAwQzk4QjAwNDA4MUIyMDAwMDAwMDAwMDQwOEUKKzoxMEJBMDAwMDA1QjAwMTAwMDU5NjAwNDA5NTMwMDEwMEM5OEIyMjQwMjkKKzoxMEJBMTAwMDk1NkMwMDAwMjQwNDAwNDA4OTk4MDEwMDA5OTkwMDAwRjkKKzoxMEJBMjAwMDhBMzAwMTAwNDU4RkEyNDAxRjdDMDAwMEM5OTQwMDQwNkQKKzoxMEJBMzAwMDgxMzIwMTAwRjA4NzAwNDA4MUIyMDAwMDA0ODAwMDAzRTEKKzoxMEJBNDAwMDQyQzkwMTAwMDAwMDAwRjIwMkIwMDEwMEE1OTUwMDUyQjkKKzoxMEJBNTAwMDk1MzAwMTAwQUM5NTAwNEIwMkIwMDAwMEYwODcwMDQwMkIKKzoxMEJBNjAwMDgxQjIwMDAwMkI5ODAwNDA5NTMwMDEwMDUxOEZBMjA4NTAKKzoxMEJBNzAwMDgwMzIwMDAwNTE4RkEyMTY4MDMyMDAwMEYwODcyMjQyRUYKKzoxMEJBODAwMDE5N0MwMDAwMDAwMDAwNEIxOTkwMDEwMDBGOTcwMDNBNEMKKzoxMEJBOTAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMDAwMjMwMEE2NDEKKzoxMEJBQTAwMDE2QjAwMTAwNTQ4RjgzMUU4MDMyMDAwMDAwMDgwMDBCODYKKzoxMEJBQjAwMDE2REMwMTAwMDAwMDAwMDAyQUMwMDEwMDVFOTcwMDA4QUIKKzoxMEJBQzAwMDgwMzAwMTAwNTg4RjAwNUUxNzkwMDAwMDdGOTcwMDQzODAKKzoxMEJBRDAwMDYxMzEwMTAwOUU5MzAwNDA4RDMwMDEwMDY2OTcwMDA3QTAKKzoxMEJBRTAwMDE2MTQwMTAwMDA4MDAwMTA0MkM5MDEwMDYwOEYyMjQwM0UKKzoxMEJBRjAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwNTAKKzoxMEJCMDAwMDYyREQwMTAwNUQ4RkE4NDA4MTMyMDAwMDIzODMwMDg4NDAKKzoxMEJCMTAwMDFDQjAwMDAwMDA5NzAwNUUwNTEwMDEwMEM5OTQwMDQwQjEKKzoxMEJCMjAwMDgxMzIwMTAwNjQ4RjIyMDk4MDMwMDAwMDg2OTcwMDQwMzYKKzoxMEJCMzAwMDEzMzAwMTAwRDA4QjAwMDU0OEIxMDAwMDNDOTYwMDQwNTYKKzoxMEJCNDAwMDgxMzIwMTAwQzk4QjAwNDA4MUIyMDAwMDA0MDBBMjRBOEEKKzoxMEJCNTAwMDFGN0MwMDAwMDAwMDAwNEExRjkwMDEwMDZDOEYyMjQzRjAKKzoxMEJCNjAwMDNEN0MwMDAwMDAwMDAwNDQxOTkwMDEwMDAwMDAwMDQzRUIKKzoxMEJCNzAwMDNEODAwMTAwNkQ4RjAwNDIxOTkwMDAwMDA0MDBBMjRGMkIKKzoxMEJCODAwMDJCN0MwMDAwMDQwMEEyNDUxRjdDMDAwMDE0MDAyRDQ1MDIKKzoxMEJCOTAwMDFGOTAwMTAwMDQwMEEyRjAxNDZDMDAwMDA0MDBBMDAxM0EKKzoxMEJCQTAwMDE0NkMwMDAwREY4RjgzMUU4MDMyMDAwMERGOEYwMDQ0QTIKKzoxMEJCQjAwMDE5OTAwMDAwMkYwMDAwNDA0Mzk5MDEwMDA0MDBBMjQ3QTMKKzoxMEJCQzAwMEU3N0QwMDAwQjQ5NDAwNDA4MTMyMDEwMDg3OEZBMjA4MTUKKzoxMEJCRDAwMDgwMzIwMDAwODc4RkEyMTY4MDMyMDAwMDgzOEZBMjQyM0QKKzoxMEJCRTAwMDE5N0MwMDAwMDA4MjAwMDIwNERDMDEwMEEwOTgwMDQwRTMKKzoxMEJCRjAwMDQ3OTkwMTAwMzAwNTAwNDE4OTMwMDEwMDgwOEZBMjQxNDIKKzoxMEJDMDAwMDE5N0MwMDAwQzk5NDAwNDA4MTMyMDEwMEYwODcwMDQwOTcKKzoxMEJDMTAwMDgxQjIwMDAwQTU5NTAwMTU5NDMwMDEwMEFDOTUwMDRCNTEKKzoxMEJDMjAwMDAyQjAwMDAwRjA4NzAwNDA4MUIyMDAwMDNDOTYwMDQwNjYKKzoxMEJDMzAwMDgxMzIwMTAwMDAwMDAwNEIxOTkwMDEwMDBGOTcwMDNBN0IKKzoxMEJDNDAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMDhBOEYyMjQyREIKKzoxMEJDNTAwMDE5N0MwMDAwM0M5NjAwNDA4MTMyMDEwMDhCOEYwMDQwMkYKKzoxMEJDNjAwMDgxQjIwMDAwMDU5NjAwNDA4MTMyMDEwMEMzOEYyMjQxNUQKKzoxMEJDNzAwMDE5N0MwMDAwQzAwMDAwMTU5OEM4MDEwMEMzOEZBMDBCRkMKKzoxMEJDODAwMDk5NkMwMDAwMDQwMDIyNDQxRjdDMDAwMEZGMDcwMDAwQTQKKzoxMEJDOTAwMDdFODkwMTAwMDQwMEE2NDA4MTMyMDAwMDMwMDAwMDEwQkYKKzoxMEJDQTAwMDgwQzgwMTAwMDA4MDAwNDA0NDk5MDEwMDAwMDAwMDUwNUQKKzoxMEJDQjAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDQyRkEKKzoxMEJDQzAwMDYxQjEwMTAwMDAwMDAwNDA2MkIxMDEwMDk2OEZBODAwNDAKKzoxMEJDRDAwMEUwMzEwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NTQKKzoxMEJDRTAwMDQ4QjEwMTAwQzAwMDAwMTU5OEM4MDEwMDMwMDAyRTBCQkIKKzoxMEJDRjAwMDk5RDAwMTAwMDAwMDZBNTA5OUMwMDEwMDA0MDAyMDBCOTcKKzoxMEJEMDAwMDk5NkMwMDAwQzAwMDYyMDE4MENDMDEwMDBDODAwMDAzMkYKKzoxMEJEMTAwMDQyQzkwMTAwMkQwMDJERjAyMkIwMDEwMDAwMDAwMDRDQUUKKzoxMEJEMjAwMDgwQzAwMTAwMDAwMDAwNUMyMzgwMDEwMEQ0MDAzRjQxN0UKKzoxMEJEMzAwMEU3RTEwMTAwMDQwMDIyNDIxOTdDMDAwMDBCMDAwMEYyNDAKKzoxMEJENDAwMDk4RTQwMTAwMDAwMDAwNUE5OTgwMDEwMDA0MDBBMjAwNUMKKzoxMEJENTAwMDk4NkMwMDAwMjAwNDAwNDA4OTk4MDEwMDA5OTkwMDExQTYKKzoxMEJENjAwMDhBMzAwMTAwMEIwMDAwMTFFNEY1MDEwMDJGMDAyMDQ3OEMKKzoxMEJENzAwMEU3QjUwMTAwQUU4RjIzMEI4MTZDMDAwMDAwMDAwMDRGN0YKKzoxMEJEODAwMEU1OTEwMTAwMDAwMDAwMDg4MEIwMDEwMEMxMDAwMDAxNDEKKzoxMEJEOTAwMDgwQ0UwMTAwMDQwMEE0NDA4MTMyMDAwMDAwMDAwMDBCQUUKKzoxMEJEQTAwMDAzQjAwMTAwMDAwMDAwMTUwMkQwMDEwMDVFOTcwMDAwMDIKKzoxMEJEQjAwMDJBNDAwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwNzIKKzoxMEJEQzAwMDYyREQwMTAwQjU4RkE4NDA4MTMyMDAwMDIzODMwMDg4MjYKKzoxMEJERDAwMDFDQjAwMDAwQzk5NDAwMDU0ODMxMDEwMEMwMDAwMDAxRkEKKzoxMEJERTAwMDgwQ0UwMTAwQzE4RjI2MTEwMDMwMDAwMDEwMDAwMDAwM0QKKzoxMEJERjAwMDJBQzgwMTAwMDAwMDAwMDg4MEIwMDEwMDAwMDAwMDAxMTYKKzoxMEJFMDAwMDgwQzAwMTAwQzAwMDAwNDA5OTk4MDEwMDAwMDAwMDAxQkUKKzoxMEJFMTAwMDk4RDAwMTAwNUU5NzAwNEMwMjMwMDEwMEMwMDAwMDQwNDUKKzoxMEJFMjAwMDAzOTgwMTAwQ0I4RjAwNDA4MUIyMDAwMDMwMDAyRjA4NDIKKzoxMEJFMzAwMDgwQjAwMTAwQzAwMDAwMTVGNEM5MDEwMEMwMDAwMDAxN0QKKzoxMEJFNDAwMEU0Q0QwMTAwQzEwMDAwMDE4MENFMDEwMDA0MDBBNDQwNDcKKzoxMEJFNTAwMDgxMzIwMDAwMDQwMDIwMEJFNTZEMDAwMEMwMDAwMDQwQUUKKzoxMEJFNjAwMDAzOTgwMTAwNUU5NzAwMDAyQTQwMDEwMEQwOEYyMjQ0MTEKKzoxMEJFNzAwMDFGN0MwMDAwQUMwMDJGNDAxM0IwMDEwMDAwMDAwMDAxNDcKKzoxMEJFODAwMEUwQzEwMTAwQjAwMDAwNDA0Nzk5MDEwMEQxOEYwMDAxREUKKzoxMEJFOTAwMEUwRDEwMDAwOUU5MzAwNDA4RDMwMDEwMDgwNjMwMEE2MzkKKzoxMEJFQTAwMDE2QjAwMTAwNjY5NzAwMDcxNjE0MDEwMDAwODAwMDEwMEMKKzoxMEJFQjAwMDQyQzkwMTAwRDk4RjIyNDBFMzZEMDAwMDAwMDAwMDQzMTkKKzoxMEJFQzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEQ2OEZBODQwODIKKzoxMEJFRDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwOTcwMDVFQzAKKzoxMEJFRTAwMDA1MTAwMTAwREM4RjIyMDk4MDMwMDAwMDg2OTcwMDQwOTkKKzoxMEJFRjAwMDgxMzIwMTAwQzk4QjAwMDU0OEIxMDAwMDA0MDBBMjRBNEMKKzoxMEJGMDAwMDFGN0MwMDAwREY4RjAwNEExRjkwMDAwMDA0MDBBMjRGM0EKKzoxMEJGMTAwMDJCN0MwMDAwMDQwMEEyNUMxRjdDMDAwMDA0MDBBMjQ0RjMKKzoxMEJGMjAwMDFGN0MwMDAwMDAwMDAwMDAxMEIwMDEwMDI0MDAyRDE1NEYKKzoxMEJGMzAwMDEwQzAwMTAwMjgwMDJERjAxNkIwMDEwMDIyMDAyREYwRTUKKzoxMEJGNDAwMDI2QjAwMTAwMTQwMDJGRjIwQ0IwMDEwMDAwMDAwMDAxMjcKKzoxMEJGNTAwMEUwRDEwMTAwMDAwMDAwMTAzMkIwMDEwMDAwMDAwMDBCMzEKKzoxMEJGNjAwMDFCQjAwMTAwMDQwMDFGMTUxQTUwMDAwMDAwMDAwMDQwMjMKKzoxMEJGNzAwMDIzQjAwMTAwMDAwMDAwMDEyQUIwMDEwMEJFOTYwMDQwN0QKKzoxMEJGODAwMDM1QjAwMDAwMkYwMDIwNDBFN0IxMDEwMDI5OTBBMjQ1MDQKKzoxMEJGOTAwMDFGN0MwMDAwMDQwMEEyMDU0ODZEMDAwMDI0MDAyMDBCNTcKKzoxMEJGQTAwMEUwQjEwMTAwMjgwMDIwMTNFMEIxMDEwMDIyMDAyMDA2Q0EKKzoxMEJGQjAwMEU0QjEwMTAwRkQ4RjIyNUMxRjdDMDAwMDAwMDAwMDVDRUEKKzoxMEJGQzAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMEZEOEYyMjQwMTcKKzoxMEJGRDAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwNjcKKzoxMEJGRTAwMDYyREQwMTAwRjk4RkE4NDA4MTMyMDAwMDIzODMwMDg4QzAKKzoxMEJGRjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDE0MDAwMDQwMjIKKzoxMEMwMDAwMDQzOTkwMTAwMDQwMEEyRjAxNDZDMDAwMDAwODAwMDE5QTQKKzoxMEMwMTAwMDQyQzkwMTAwMjI5MDIyNDBFMzZEMDAwMDEwOTAyMjQyQUMKKzoxMEMwMjAwMDE5N0MwMDAwNzM5NjAwNDA4MTMyMDEwMDVBOTQwMDQwNTAKKzoxMEMwMzAwMDgxMzIwMTAwMUQ5MDIyNEI4MDMyMDAwMDAwMDAwMDQzM0QKKzoxMEMwNDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDA2OTBBODQwQ0YKKzoxMEMwNTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDBDOTAyMjQxMzQKKzoxMEMwNjAwMDE5N0MwMDAwRTc5NDAwNDAxMTMwMDEwMDBEOTAwMDA1OUMKKzoxMEMwNzAwMDQ4QjEwMDAwQzk5NDAwNDA4MTMyMDEwMDBGOTAyMjA5QUMKKzoxMEMwODAwMDgwMzAwMDAwODY5NzAwNDA4MTMyMDEwMDJGODMwMDQwRkQKKzoxMEMwOTAwMDA1QjAwMDAwNzM5NjAwNDA4MTMyMDEwMDRGOTQwMDQwQ0IKKzoxMEMwQTAwMDgxMzIwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwMzYKKzoxMEMwQjAwMDYyREQwMTAwMTM5MEE4NDA4MTMyMDAwMDIzODMwMDg4RDQKKzoxMEMwQzAwMDFDQjAwMDAwMTk5MDIyNDExOTdDMDAwMEU3OTQwMDQwNDgKKzoxMEMwRDAwMDExMzAwMTAwMUE5MDAwMDU0OEIxMDAwMEM5OTQwMDQwRDkKKzoxMEMwRTAwMDgxMzIwMTAwMUM5MDIyMDk4MDMwMDAwMDg2OTcwMDQwQjgKKzoxMEMwRjAwMDgxMzIwMTAwMkY4MzAwNDAwNUIwMDAwMDAwMDAwMDQzQTIKKzoxMEMxMDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDFFOTBBODQwRjYKKzoxMEMxMTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NkQKKzoxMEMxMjAwMDQ4QjEwMTAwMjU5MDIyNDExOTdDMDAwMEU3OTQwMDQwQUQKKzoxMEMxMzAwMDExMzAwMTAwMjY5MDAwMDU0OEIxMDAwMEM5OTQwMDQwNkMKKzoxMEMxNDAwMDgxMzIwMTAwMjg5MDIyMDk4MDMwMDAwMDg2OTcwMDQwNEIKKzoxMEMxNTAwMDEzMzAwMTAwRDA4QjAwNDAwNUIwMDAwMDE0MDAwMDQwRjcKKzoxMEMxNjAwMDQzOTkwMTAwMDQwMEEyRjAxNDZDMDAwMDAwODAwMDE5NDMKKzoxMEMxNzAwMDQyQzkwMTAwMzI5MDIyNDBFMzZEMDAwMDAwMDAwMDQzRkMKKzoxMEMxODAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDJFOTBBODQwNjYKKzoxMEMxOTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1RUQKKzoxMEMxQTAwMDQ4QjEwMTAwMDAwMDAwNDAwNUIwMDEwMDM2OTAyMjQxNzYKKzoxMEMxQjAwMDE5N0MwMDAwRTc5NDAwNDAxMTMwMDEwMDM3OTAwMDA1MjEKKzoxMEMxQzAwMDQ4QjEwMDAwQzk5NDAwNDA4MTMyMDEwMDA4MDAyRDBBRTYKKzoxMEMxRDAwMDg0QjAwMTAwMDAwMDAwRjA4MkIwMDEwMDA0MDAyNjQwOUQKKzoxMEMxRTAwMDgxMzIwMDAwMTQwMDIwNDBFMUIxMDEwMDNEOTAwMzFFQTcKKzoxMEMxRjAwMDgwMzIwMDAwM0U5MDAwNDE4N0IwMDAwMDIxMDAwMDQwRTYKKzoxMEMyMDAwMDg3OTgwMTAwMkM5NjAwNDA4MTMyMDEwMDA0MDBBMjVDNTYKKzoxMEMyMTAwMDFGN0MwMDAwMDAwMDAwNUMxRjkwMDEwMDQzOTAyMjA5NzkKKzoxMEMyMjAwMDgwMzAwMDAwODY5NzAwNDAxMzMwMDEwMDQ2OTAyMjQ0ODEKKzoxMEMyMzAwMDE5N0MwMDAwODY5NzAwNEY4MTMwMDEwMDAwMDAwMDQ0MDcKKzoxMEMyNDAwMDE5ODAwMTAwQzk4QkEyNEExRjdDMDAwMEQwOEIwMDQwREUKKzoxMEMyNTAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMEJBMDAyMDQwMzEKKzoxMEMyNjAwMEU1QjEwMTAwNEU5MDlDMTc4MDMyMDAwMDA0MDAyMjRBODQKKzoxMEMyNzAwMDE5N0MwMDAwQ0MwMDAwNDA0Mzk5MDEwMDM2OTgwMDQwMzIKKzoxMEMyODAwMDgxMzIwMTAwRDQ5NzAwNDAxMzMwMDEwMEMwMDAwMDQwMEIKKzoxMEMyOTAwMDQzOTkwMTAwQzQwMDJERjA4MkIwMDEwMDBCOTgwMEYwMUEKKzoxMEMyQTAwMDg0MzAwMTAwQzk5NDAwNDA4MTMyMDEwMEQwOEIyMjA5MDIKKzoxMEMyQjAwMDgwMzAwMDAwODY5NzAwNDAxMzMwMDEwMEQwOEIwMDQwOTIKKzoxMEMyQzAwMDgxQjIwMDAwMkUwMDAwNDA0Mzk5MDEwMDVBOTAyMjQwQTQKKzoxMEMyRDAwMEU3NkQwMDAwMzIwMDAwNDA0Mzk5MDEwMDY1OTBBMjQwRTQKKzoxMEMyRTAwMEU1NkQwMDAwRjI5NTAwNDA4MTMyMDEwMDI0MDAyMDBCMzIKKzoxMEMyRjAwMEUwQjEwMTAwMjgwMDIwMTNFMEIxMDEwMDIyMDAyMDA2NzcKKzoxMEMzMDAwMEU0QjEwMTAwMDQwMDIyNDIxOTdDMDAwMDE0MDAwMDQwNDYKKzoxMEMzMTAwMDQzOTkwMTAwMDQwMEEyRjA4MDMyMDAwMDE0MDAyMDBBQkEKKzoxMEMzMjAwMEUwQjEwMTAwRDA4QjIyMDk4MDMwMDAwMDg2OTcwMDQwRTgKKzoxMEMzMzAwMDEzMzAwMTAwRDA4QjAwNDA4MUIyMDAwMEYyOTUwMDQwMjQKKzoxMEMzNDAwMDgxMzIwMTAwOUQ5NTAwNDA4MTMyMDEwMDczOTAyMjQxQUQKKzoxMEMzNTAwMDE5N0MwMDAwMDAwMDAwMEI5OUIwMDEwMDA0MDAxRjE1QkIKKzoxMEMzNjAwMDk4NTAwMDAwNzM5MDIwMDE5ODZDMDAwMDcwMDAwMDAzNEEKKzoxMEMzNzAwMDQ4QzkwMTAwMDAwMDJFNDYxRjkwMDEwMDAwMDAwMDUwMzcKKzoxMEMzODAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDQyMjMKKzoxMEMzOTAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDcwOTBBODAwNUUKKzoxMEMzQTAwMEUwMzEwMDAwMDAwMDAwMDU0OEIxMDEwMEFDMDAyRjAwQTIKKzoxMEMzQjAwMDEwQjAwMTAwMDAwMDAwMDFFMEMxMDEwMDE0MDAyRjE1QzEKKzoxMEMzQzAwMDEwQzAwMTAwMDQwMEEyRjA4MDMyMDAwMDAwMDAwMDBBNEEKKzoxMEMzRDAwMDgwQjAwMTAwMDAwMDYwMDE4MEQwMDEwMDAwMDAwMDQ3MzMKKzoxMEMzRTAwMDE5OTAwMTAwRTk4RjIyMDk4MDMyMDAwMDg2OTcwMDA5MjgKKzoxMEMzRjAwMDgwMzAwMTAwRTk4RjAwNDAxM0IwMDAwMDAwODAwMDAzOEUKKzoxMEM0MDAwMDQyQzkwMTAwMDAwMDAwRjA4MkIwMDEwMDEzMDAwMDQwQUEKKzoxMEM0MTAwMDg3OTgwMTAwMDAwMDAwNEM0M0MxMDEwMDJDOTYwMEYwRjkKKzoxMEM0MjAwMDg0MzAwMTAwMDQwMEEyNUMxRjdDMDAwMEM5OEIwMDVDMEEKKzoxMEM0MzAwMDFGOTAwMDAwMkMwMDIwNDBFN0IxMDEwMDJEMDAyMDQwOUIKKzoxMEM0NDAwMEU3QjEwMTAwMkUwMDAwNDA0Mzk5MDEwMDA0MDBBMkYzNkYKKzoxMEM0NTAwMDgwMzIwMDAwMDQwMDIyNDIxOTdDMDAwMEM5OEIwMDQyOTcKKzoxMEM0NjAwMDE5ODAwMDAwMUM5NjAwNDA4MTMyMDEwMDVCOTcwMDQ4NTMKKzoxMEM0NzAwMDk1MzAwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwNEUKKzoxMEM0ODAwMDYyREQwMTAwOEQ5MEE4NDAxMzMwMDAwMDIzODMwMDg4RjYKKzoxMEM0OTAwMDFDQjAwMDAwOTM5MDAwMDU0OEIxMDAwMDkyOTAwMDQwNEQKKzoxMEM0QTAwMDEzQjAwMDAwMDAwMDAwMDAxMkIwMDEwMDA4MDAwMDQwQkUKKzoxMEM0QjAwMDQzOTkwMTAwMTQwMDJERjA4MkIwMDEwMDA0MDAyNjQwRDEKKzoxMEM0QzAwMDgxMzIwMDAwMDQwMDIyRjA4NDMwMDAwMDEzMDAwMDQwOUMKKzoxMEM0RDAwMDg3OTgwMTAwMkM5NjAwNDA4MTMyMDEwMDA0MDBBMjVDODQKKzoxMEM0RTAwMDFGN0MwMDAwMDAwMDAwNUMxRjkwMDEwMEIwOTAwMDA5NUMKKzoxMEM0RjAwMDAwQjAwMDAwMDQwMEEyMDU0ODZEMDAwMEM5OEI4NzQyMEYKKzoxMEM1MDAwMDE5MTAwMDAwOEIwMDJGNDcxOTgwMDEwMEM5OEIwMDQwRDMKKzoxMEM1MTAwMEU3OTEwMDAwMDQwMEEyNDAxRjdDMDAwMDJGMDAwMDQwQjMKKzoxMEM1MjAwMDQ3OTkwMTAwQUU5MDIyNDdFNzdEMDAwMDA0MDAyMjQxQjgKKzoxMEM1MzAwMDE5N0MwMDAwMUQ5NDAwNDBFNzMxMDEwMEFFOTAyMjAwRkMKKzoxMEM1NDAwMDgwMzIwMDAwQTk5MEEyNDAxRjdDMDAwMEM5OTQwMDQwRTYKKzoxMEM1NTAwMDgxMzIwMTAwQUU5MDAwNDA4MUIyMDAwMDMwMDAwMDQwMDYKKzoxMEM1NjAwMDQzOTkwMTAwMzIwMDJERjI5NEIwMDEwMEE1OTUwMEYyMkMKKzoxMEM1NzAwMDAyMzAwMTAwQUM5NTAwNEIwMkIwMDAwMDAwMDAwMDA1NDUKKzoxMEM1ODAwMDQ4QjEwMTAwQUY5MDAwNDAwMUIwMDAwMDAwMDAwMDQwNDEKKzoxMEM1OTAwMDA1QjAwMTAwQjU5MDIyMDA4MDMyMDAwMEI0OTBBMjQyQTQKKzoxMEM1QTAwMDE5N0MwMDAwMDU5NjAwNDA4MTMyMDEwMEI1OTAwMDQwRTIKKzoxMEM1QjAwMDgxQjIwMDAwM0M5NjAwNDA4MTMyMDEwMDU0OTEyMjVDMUYKKzoxMEM1QzAwMDFGN0MwMDAwMDAwMDAwNUMxRjgwMDEwMDAwODAwMDEwNDQKKzoxMEM1RDAwMDQyQzkwMTAwQkQ5MDIyNDBFMzZEMDAwMDAwMDAwMDQ1MEIKKzoxMEM1RTAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEJBOTBBODQwNzYKKzoxMEM1RjAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDU0OTEwMDA1QTQKKzoxMEM2MDAwMDQ4QjEwMDAwQjQ5NDAwNDA4MTMyMDEwMEM0OTBBMjA4RjcKKzoxMEM2MTAwMDgwMzIwMDAwQzQ5MEEyMTY4MDMyMDAwMDBGOTcwMDREQjcKKzoxMEM2MjAwMDgxMzAwMTAwMDA4MjAwMDIwNERDMDEwMEYwODcwMDQwM0MKKzoxMEM2MzAwMDgxQjIwMDAwNzQwMDAwNDA0Mzk5MDEwMDAwMDAwMEY4M0UKKzoxMEM2NDAwMDgyQjAwMTAwMDAwMDAwRjA4NEIwMDEwMDAwMDAwMDQxNTEKKzoxMEM2NTAwMDk2QjAwMTAwRDU5MDIyNDI5NjE0MDAwMDAwODAwMDEwOTAKKzoxMEM2NjAwMDQ0QzkwMTAwNjQwMDY4NDA5Nzk4MDEwMDY0MDAwMDRCRDEKKzoxMEM2NzAwMDgwQ0UwMTAwMDQwMEE2NDA4MTMyMDAwMDAwMDAwMDQxOEQKKzoxMEM2ODAwMEYwQjEwMTAwMDAwMDAwNDJGMEIxMDEwMDcwMDAwMDA1QUYKKzoxMEM2OTAwMEUwQzkwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwNjgKKzoxMEM2QTAwMDYyREQwMTAwRDE5MEE4NDA4MTMyMDAwMDA0MDBBMjVDNEMKKzoxMEM2QjAwMDFGN0MwMDAwMDAwMDAwNUMxRjkwMDEwMDAwMDAwMDQ1OEUKKzoxMEM2QzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEQ2OTBBODVDNUQKKzoxMEM2RDAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMDVFMDEyRDA1QjAKKzoxMEM2RTAwMDQ4QjEwMTAwREE5MDY1RjIxMjMwMDAwMDAwOTkzRjQyMzMKKzoxMEM2RjAwMDEzRjAwMTAwREY5MDIyNDdFNzdEMDAwMDI3ODM3NTg4NTMKKzoxMEM3MDAwMDFDQjAwMDAwRDk5MDAwNDA4MUIyMDAwMDAwMDAwMDQ3M0EKKzoxMEM3MTAwMEU3OTEwMTAwMDQwMDc1MDk5NkU0MDEwMDAwODAwMDEwMTMKKzoxMEM3MjAwMDQ0QzkwMTAwMDAwMDAwNDRGMUIxMDEwMDAwMDA2OEE4MDQKKzoxMEM3MzAwMDk3QzAwMTAwMDAwMDAwMDNFMEIxMDEwMDAwODAwMDAzODkKKzoxMEM3NDAwMDQ0OTkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwQTQKKzoxMEM3NTAwMDYyQjEwMTAwRTc5MEE4NDBFMTMxMDAwMDIzODMwMDg4MjYKKzoxMEM3NjAwMDFDQjAwMDAwMDA5OTNGNDIxM0YwMDEwMEVCOTA2NTA1RkEKKzoxMEM3NzAwMDQ4MzEwMDAwM0YwMDAwRjM5Njg4MDEwMDAwMDAwMDQwQUYKKzoxMEM3ODAwMEU3QjEwMTAwMDAwMDc1NDA4MUIyMDEwMEYzOTAyMjRCMzcKKzoxMEM3OTAwMDgwMzIwMDAwMDAwMDAwNTU2MUIxMDEwMDAwMDAwMDRCMzQKKzoxMEM3QTAwMDYyQjEwMTAwRjE5MEE4NDA4MTMyMDAwMDAwMDAwMDA3NTIKKzoxMEM3QjAwMDE2QjAwMTAwMDA2MjAwMEIxNkRDMDEwMDJGMDAwMDQwRTMKKzoxMEM3QzAwMDQzOTkwMTAwMDQwMEEyNDdFNzdEMDAwMDFEOTQwMDQwNEEKKzoxMEM3RDAwMDgxMzIwMTAwMTA5MTIyMDA4MDMyMDAwMDRFOTYwMDVGRUQKKzoxMEM3RTAwMDAxMTAwMTAwRjc5MDIyNDA5NTZDMDAwMDA0MDAyMjQxRTYKKzoxMEM3RjAwMDE5N0MwMDAwMDQwMDIyNDAxRjdDMDAwMDAwODAwMDEwMTMKKzoxMEM4MDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzMjQKKzoxMEM4MTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMDAwMDAwMDEwMTEKKzoxMEM4MjAwMDYyQjEwMTAwMDE5MUE4MDBFMDMxMDAwMDIzODMwMDg4N0IKKzoxMEM4MzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDA0ODAwMDAzQTYKKzoxMEM4NDAwMDQyQzkwMTAwMDAwMDAwRjIwMkIwMDEwMDA0MDAyMDMxRTIKKzoxMEM4NTAwMDAzNkMwMDAwQTU5NTAwNTI5NTMwMDEwMEM5OTQwMDQwN0EKKzoxMEM4NjAwMDgxMzIwMTAwRjc5MDIyNDE5NzUwMDAwMDBDODAwMDAzQjQKKzoxMEM4NzAwMDQyQzkwMTAwMDAwMDAwRjAwMEIwMDEwMDAwMDAwMDVDQUYKKzoxMEM4ODAwMDAxODAwMTAwQUM5NTAwNEIwMkIwMDAwMEY3OTAwMDA1NUMKKzoxMEM4OTAwMDQ4QjEwMDAwNjY5NzAwNDAwMzMwMDEwMDE3ODAwMDAzOTQKKzoxMEM4QTAwMDQ0QzkwMTAwMDBGMDAwMEM5Njg4MDEwMDAwMDA2MzRDQjAKKzoxMEM4QjAwMDk3RjAwMTAwMDQwMDIwNEQ5NzZDMDAwMDA0MDAyMjQwMTYKKzoxMEM4QzAwMDk3NkMwMDAwMTA4MDAwMDM0NEM5MDEwMDAwMDAwMEFCMTkKKzoxMEM4RDAwMEUxQjEwMTAwMDA5NzAwNUUwNTEwMDEwMDAzMDAwMDA3QjAKKzoxMEM4RTAwMDFBRjQwMTAwMDcwMDAwMDcxNjg4MDEwMDAwQjUwMDBEQ0EKKzoxMEM4RjAwMDQ2QzkwMTAwMUM5MTMwNDA4MTMyMDAwMDA0MDAyMjBCMjcKKzoxMEM5MDAwMEU2N0QwMDAwMDAwMDAwMEJFNjgxMDEwMDAwQjcwMDBEOEQKKzoxMEM5MTAwMDQ2QzkwMTAwMDQwMDIyMEJFNjdEMDAwMDAwMDAwMDBCNjgKKzoxMEM5MjAwMEU2ODEwMTAwMTAwMDEwMEY5NEY0MDEwMDkzMDQwMDVGRjEKKzoxMEM5MzAwMDk1MDQwMTAwNzY5NTAwNDA4MTMyMDEwMDJBOTEyMjUwMzEKKzoxMEM5NDAwMEZEN0YwMDAwMjY5MTQ2NDA4MTMyMDAwMDI5OTFBMjQwREYKKzoxMEM5NTAwMDMxNkYwMDAwMDQwMDFFNDA4MUIyMDAwMDAwMDAxRTQxNDMKKzoxMEM5NjAwMDMxRDMwMTAwMDAwMDJFMDU0OEIxMDEwMDAwMDAwMDQwNTUKKzoxMEM5NzAwMEUxQjEwMTAwMDAwMDAwNDAwRkIwMDEwMEFCOTQwMDQxQTQKKzoxMEM5ODAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMEI0OTQwMDQwODMKKzoxMEM5OTAwMDgxMzIwMTAwM0Q5MUEyMDg4MDMyMDAwMDNEOTFBMjE2MzMKKzoxMEM5QTAwMDgwMzIwMDAwMDA4MjAwMDIwNERDMDEwMDAwMDAwMDQ1MkIKKzoxMEM5QjAwMDAzRjAwMTAwMDAwMDAwMDEwMEMwMDEwMDM1OTEzNzVDNjgKKzoxMEM5QzAwMDYxMzEwMDAwMDAwMDAwMUI2MkIxMDEwMDNBOTEyODQwNzMKKzoxMEM5RDAwMDgxMzIwMDAwMDQwMEEyNUM3NzdEMDAwMDM2OTEwMDQwQTcKKzoxMEM5RTAwMDgxQjIwMDAwMDAwMDAwMDA2MkIxMDEwMDNBOTFBODQwNEQKKzoxMEM5RjAwMDgxMzIwMDAwRjA4NzE3NDA4MUIyMDAwMDc0MDAyMjQwQUQKKzoxMENBMDAwMEYxQjEwMTAwMDAwMDAwNDBFMUIxMDEwMDVCOTcwMDRBNzQKKzoxMENBMTAwMDk1MzAwMTAwMDQwMEEyNUMxRjdDMDAwMDFDOTYwMDVDQTUKKzoxMENBMjAwMDFGMTAwMTAwQzQ5MDAwNDA4MUIyMDAwMDA0MDBBMjQwMjkKKzoxMENBMzAwMDFGN0MwMDAwMkYwMDAwNDA0Nzk5MDEwMDUxOTEyMjQ3QzAKKzoxMENBNDAwMEU3N0QwMDAwMDQwMDIyNDExOTdDMDAwMDFEOTQwMDQwOTUKKzoxMENBNTAwMEU3MzEwMTAwNTE5MTIyMDA4MDMyMDAwMDRDOTFBMjQwNDgKKzoxMENBNjAwMDFGN0MwMDAwQzk5NDAwNDA4MTMyMDEwMDUxOTEwMDQwQjgKKzoxMENBNzAwMDgxQjIwMDAwMzAwMDAwNDA0Mzk5MDEwMDMyMDAyREYyRTUKKzoxMENBODAwMDk0QjAwMTAwQTU5NTAwRjIwMjMwMDEwMEFDOTUwMDRCNzYKKzoxMENBOTAwMDAyQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDVCOTcwMDQ4QUIKKzoxMENBQTAwMDk1MzAwMTAwMDQwMEEyNUMxRjdDMDAwMDFDOTYwMDVDMTUKKzoxMENBQjAwMDFGMTAwMTAwMDQwMEEyMDU0ODZEMDAwMDU4OTE4NzQyMzQKKzoxMENBQzAwMDE5MTAwMDAwOEIwMDJGNDcxOTgwMDEwMDAwMDAwMDQwNjIKKzoxMENBRDAwMEU3OTEwMTAwODY5NzAwNDI4MTMwMDEwMEM5OEIwMDQwMzgKKzoxMENBRTAwMDgxQjIwMDAwMUM5NjAwNDA4MTMyMDEwMDA0MDBBMjVDNkIKKzoxMENBRjAwMDFGN0MwMDAwQzk4QjAwNUMxRjkwMDAwMEIwMDAwMDQwNEMKKzoxMENCMDAwMDQzOTkwMTAwMDQwMEEyRjA4MDMyMDAwMEJBMDAyMDQwRTYKKzoxMENCMTAwMEU1QjEwMTAwRDQ5NzAwNDA4MTMyMDEwMEMwMDAwMDQwMUYKKzoxMENCMjAwMDQzOTkwMTAwQzQwMDJERjA4MkIwMDEwMDBCOTgwMEYwODEKKzoxMENCMzAwMDg0MzAwMTAwQzk5NDAwNDA4MTMyMDEwMDg2OTcwMDQ1OEQKKzoxMENCNDAwMDgxMzAwMTAwQzk4QjIyNDIxOTdDMDAwMDBGOTcwMDNBMDYKKzoxMENCNTAwMDgxMzAwMTAwQzk4QjAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMENCNjAwMDgxQjIwMDAwQjQ5NDAwNDA4MTMyMDEwMDcwOTFBMjA4QUIKKzoxMENCNzAwMDgwMzIwMDAwNzA5MUEyMTY4MDMyMDAwMDBGOTcwMDQ3QUIKKzoxMENCODAwMDgwMzAwMTAwMDA4MjAwMDIwNERDMDEwMEYwODcwMDQwRDgKKzoxMENCOTAwMDgxQjIwMDAwMTA4MDAwMDM0NEM5MDEwMDAwRTEwMEE2M0EKKzoxMENCQTAwMDg0QjAwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDQwMkQKKzoxMENCQjAwMEYxQjEwMTAwMDAwMDYwMDc4NDk0MDEwMDAwOTcwMDVFNUQKKzoxMENCQzAwMDA1MTAwMTAwQzk4QjAwNDA4MUIyMDAwMDhBMDAwMDQwQkUKKzoxMENCRDAwMDQ3OTkwMTAwQzk5NDAwNDFFNzQxMDEwMEQwOEIwMDQwMTIKKzoxMENCRTAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDA0MDBBMjQxQ0IKKzoxMENCRjAwMDE5N0MwMDAwMDQwMEEyNDgxRjdDMDAwMEYyOTUwMDQwNTAKKzoxMENDMDAwMDgxMzIwMTAwMDQwMEEzMEEwQzZDMDAwMDlEOTUwMDQwRDUKKzoxMENDMTAwMDgxMzIwMTAwMDAwMDAwMDEyQ0IwMDEwMDAwMDAwMDE1NkQKKzoxMENDMjAwMDEwQjAwMTAwMDAwMDAwMDAxMEMwMDEwMDA0MDAxRjBBNDUKKzoxMENDMzAwMDJDNTAwMDAwMTQwMDAwNDA0Mzk5MDEwMDA0MDBBMkYwQjEKKzoxMENDNDAwMDgwMzIwMDAwMDAwMDAwMTAzMkIwMDEwMEExOTcwMDA2MDEKKzoxMENDNTAwMDA0MzAwMTAwOEU5MUEyNDgxRjdDMDAwMDhDOTE4NDQ4MTIKKzoxMENDNjAwMDFGMTAwMDAwQUMwMDAwNDA0Nzk5MDEwMDhFOTEwMDBBOUYKKzoxMENDNzAwMEUwQzEwMDAwMDAwMDAwMEEwMkIwMDEwMDlFOTMwMDAxMjQKKzoxMENDODAwMDhDMzAwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwNDEKKzoxMENDOTAwMDYyREQwMTAwOEY5MUE4NDA4MTMyMDAwMDIzODMwMDg4NkIKKzoxMENDQTAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwMDAwMDAyQjcKKzoxMENDQjAwMDEwQzAwMTAwOUM5MTIyMDIxNDUwMDAwMDc5OTYwMDQ1OUEKKzoxMENDQzAwMDFGMDAwMTAwODY5MTIyNUMxRjdDMDAwMDAwMDAwMDQ3Q0QKKzoxMENDRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDk4OTFBODVDODQKKzoxMENDRTAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMDg2OTEwMDA1MEYKKzoxMENDRjAwMDQ4QjEwMDAwMDAwMDAwMEIxQkIwMDEwMDA4MDAyRDQwRUYKKzoxMENEMDAwMDg1QjAwMTAwMDAwMDAwRjA4MkIwMDEwMDAwMDAwMDQwOEEKKzoxMENEMTAwMDA1QjAwMTAwMkM5NjAwNDE4NzMwMDEwMDAwMDAwMDQ1NUQKKzoxMENEMjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEEyOTFBODQwNDUKKzoxMENEMzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NDEKKzoxMENENDAwMDQ4QjEwMTAwQTg5MTIyMDk4MDMwMDAwMDg2OTcwMDQwNzgKKzoxMENENTAwMDEzMzAwMTAwQUM5MTIyNDQxOTdDMDAwMDg2OTcwMDRGRUIKKzoxMENENjAwMDgxMzAwMTAwQUM5MUEyNDcxRjdDMDAwMDAwMDAwMDQ0MEMKKzoxMENENzAwMDE5ODAwMTAwRkYwNzAwMDgwMDhDMDEwMDA0MDAyNjQwMTQKKzoxMENEODAwMDgxMzIwMDAwQkI5MTIyNEExRjdDMDAwMEIzOTFBMjE2QTEKKzoxMENEOTAwMDAyMzAwMDAwQzk5NDAwNDA4MTMyMDEwMDJGMDAyMDQwODEKKzoxMENEQTAwMEU3QjEwMTAwQzk4QjAwNDA4MUIyMDAwMDJEMDAyRDA4QzEKKzoxMENEQjAwMDJBQjAwMTAwQjc5MTIyNDIxOTdDMDAwMDNDOTYwMDQwNDUKKzoxMENEQzAwMDgxMzIwMTAwQjg5MTAwNDA4MUIyMDAwMDA1OTYwMDQwMTgKKzoxMENERDAwMDgxMzIwMTAwMzAwMDJFMDAyQUQwMDEwMDMyMDAyQTE1RDUKKzoxMENERTAwMEU0QjEwMTAwQzk4QjAwMTZFNEIxMDAwMEQxOTEyMjE2MTQKKzoxMENERjAwMDAyMzAwMDAwMDQwMEEyNDcxRjdDMDAwMDAwMDAwMDA4NzEKKzoxMENFMDAwMDJBQjAwMTAwMkI5ODAwNDA5NTMwMDEwMEMxOTFBMjQwNEEKKzoxMENFMTAwMDExNkMwMDAwRDI5MTIyNDAyRDZDMDAwMDA0MDBBMjA1OEMKKzoxMENFMjAwMDQ4NkQwMDAwMDQwMDIyNDQxRjdDMDAwMEFDMDAwMDQwNUMKKzoxMENFMzAwMDQ3OTkwMTAwQjAwMDJCMDFFMEMxMDEwMDAwMkIwMEE2QzIKKzoxMENFNDAwMDE2QjAwMTAwMDAwMDAwMDFFMEQxMDEwMDVFOTcwMDA4NkIKKzoxMENFNTAwMDgwMzAwMTAwQ0E5MTAwNUUxNzkwMDAwMDdGOTcwMDQzNjgKKzoxMENFNjAwMDYxMzEwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwODkKKzoxMENFNzAwMDYyREQwMTAwQ0I5MUE4NDA4MTMyMDAwMDIzODMwMDg4NEQKKzoxMENFODAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDY2OTcwMDA3RDMKKzoxMENFOTAwMDE2MTQwMTAwMDA5NzAwNUUwNTEwMDEwMEM5OTQwMDQwQkYKKzoxMENFQTAwMDgxMzIwMTAwMkYwMDIwNDBFN0IxMDEwMEQwOEIwMDQwMEIKKzoxMENFQjAwMDgxQjIwMDAwMDAwMDAwMEIxQkIwMDEwMDA0MDAxRjE1MzAKKzoxMENFQzAwMDFBNTAwMDAwRTA5MTIwMTYxQTZDMDAwMDA0MDAyMjQwNjUKKzoxMENFRDAwMDFGN0MwMDAwNzAwMDAwMDM0OEM5MDEwMDAwMDAyMjUwQzAKKzoxMENFRTAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDAwRkEKKzoxMENFRjAwMEUwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMEEwMDAwMEE0MDcKKzoxMENGMDAwMDYyREQwMTAwREQ5MUE4NDYxRjEwMDAwMDAwMDAwMDA1NTEKKzoxMENGMTAwMDQ4QjEwMTAwMDAwMDAwMDAxMEIwMDEwMDAwMDAwMDE1NDEKKzoxMENGMjAwMDEwQzAwMTAwMDAwMDAwMEEyQUIwMDEwMDAwMDAwMDBBNDEKKzoxMENGMzAwMDJDRDAwMTAwMDQwMDFGMTY4MDMyMDAwMDE0MDAwMDQwQjUKKzoxMENGNDAwMDQzOTkwMTAwMDQwMEEyRjA4MDMyMDAwMEFDMDAyRjQwQTEKKzoxMENGNTAwMDIzQjAwMTAwRUE5MTg0NDUxRjEwMDAwMEVCOTEwMDBBMDQKKzoxMENGNjAwMEUwQzEwMDAwMDAwMDAwMEEwMkIwMDEwMEJFOTYwMDQwQ0YKKzoxMENGNzAwMDM1QjAwMDAwMDQwMEEyNUMxRjdDMDAwMDAwODAwMDE5OTYKKzoxMENGODAwMDQyQzkwMTAwRjQ5MTIyNDBFMzZEMDAwMDAwMDAwMDQzMUIKKzoxMENGOTAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEYwOTFBODQwODUKKzoxMENGQTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1Q0YKKzoxMENGQjAwMDQ4QjEwMTAwMDU5MkEyMDIxQTUwMDAwMDBBOTIyMjQwRDQKKzoxMENGQzAwMDJENkMwMDAwMDQwMDIyNDAxRjdDMDAwMDAwODAwMDEwMzcKKzoxMENGRDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzNEQKKzoxMENGRTAwMEYwQjEwMTAwRkYwNzAwMDhFMDhEMDEwMDAwMDAwMDQyRTEKKzoxMENGRjAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEZDOTFBODQwODUKKzoxMEQwMDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NkUKKzoxMEQwMTAwMDQ4QjEwMTAwMkYwMDIwNDdFN0I1MDEwMDBDODAwMDAzNTQKKzoxMEQwMjAwMDQyQzkwMTAwMTAwMDAwRjAxMEM4MDEwMEYwMDcwMDQwRTQKKzoxMEQwMzAwMDFCOTgwMTAwMEE5MjAwNUMxMTgwMDAwMDA0MDBBMjVGQUUKKzoxMEQwNDAwMDFCN0MwMDAwRkYwNzAwMDg5ODg4MDEwMDAwMDAwMDAyMTgKKzoxMEQwNTAwMDk4QzAwMTAwMDQwMDIwMEI5OTZDMDAwMDAwMDAwMDAyNDEKKzoxMEQwNjAwMDEwQzAwMTAwMDQwMDIyNDAyMzZDMDAwMDA0MDBBMzQzMTAKKzoxMEQwNzAwMDIzNkMwMDAwRTc5NDAwNDAxRjAwMDEwMDAwMDAwMDA1NDEKKzoxMEQwODAwMDQ4QjEwMTAwMTA5MjIzMEQyQzZDMDAwMDAwMDAwMDQwRkMKKzoxMEQwOTAwMDFGOTAwMTAwMTk5MjIyNDYxRjdDMDAwMDAwMDAwMDQ2RUMKKzoxMEQwQTAwMDFGODAwMTAwNzA4MDAwMDM0MkM5MDEwMDE5OTIyMjQwRDQKKzoxMEQwQjAwMEUzNkQwMDAwMDAwMDAwNDI2MUIxMDEwMDQwMDAwMDEwN0IKKzoxMEQwQzAwMDYyREQwMTAwMTU5MkE4NDA4MTMyMDAwMDIzODMwMDg4QjAKKzoxMEQwRDAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDA4MDAyRDQwMTAKKzoxMEQwRTAwMDg1QjAwMTAwMDAwMDAwRjA4MkIwMDEwMDAwMDAwMDQwQTcKKzoxMEQwRjAwMDA1QjAwMTAwMkM5NjAwNDE4NzMwMDEwMDAwMDAwMDQ1N0EKKzoxMEQxMDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDFFOTJBODQwRTQKKzoxMEQxMTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NUQKKzoxMEQxMjAwMDQ4QjEwMTAwMjQ5MjIyMDk4MDMwMDAwMDg2OTcwMDQwMTcKKzoxMEQxMzAwMDEzMzAwMTAwMjg5MjIyNDQxOTdDMDAwMDg2OTcwMDRGOEEKKzoxMEQxNDAwMDgxMzAwMTAwMjg5MkEyNDcxRjdDMDAwMDAwMDAwMDQ0QUIKKzoxMEQxNTAwMDE5ODAwMTAwRkYwNzAwMDgwMDhDMDEwMDA0MDAyNjQwMzAKKzoxMEQxNjAwMDgxMzIwMDAwM0U5MjIyNEExRjdDMDAwMDJGOTJBMjE2QkMKKzoxMEQxNzAwMDAyMzAwMDAwQzk5NDAwNDA4MTMyMDEwMDJGMDAyMDQwOUQKKzoxMEQxODAwMEU3QjEwMTAwQzk4QjAwNDA4MUIyMDAwMDJEMDAyRDA4REQKKzoxMEQxOTAwMDJBQjAwMTAwM0E5MjIyNDIxOTdDMDAwMDMzOTJBMkYzOTUKKzoxMEQxQTAwMDg0MzAwMDAwMDAwMDAwQTU4NUIwMDEwMDAwMDAwMDQxQUYKKzoxMEQxQjAwMDg1RDAwMTAwRDQwMDNFNDE4NUUwMDEwMDM3OTIyMjQwMzUKKzoxMEQxQzAwMDFGN0MwMDAwMDAwMDAwNUExMTkwMDEwMDBCMDAwMDA4QjUKKzoxMEQxRDAwMEU0RjUwMTAwM0M5NjAwNDA4MTMyMDEwMDNCOTIwMDQwQTIKKzoxMEQxRTAwMDgxQjIwMDAwMDU5NjAwNDA4MTMyMDEwMDMwMDAyRTAwMUYKKzoxMEQxRjAwMDJBRDAwMTAwMzIwMDJBMTVFNEIxMDEwMEM5OEIwMDE2QzMKKzoxMEQyMDAwMEU0QjEwMDAwNDE5MkEyMTYwMjMwMDAwMEM5OTQwMDQwMkYKKzoxMEQyMTAwMDgxMzIwMTAwOUE5MjAwNDA4MUIyMDAwMDJEMDAyRDA4NTkKKzoxMEQyMjAwMDJBQjAwMTAwNTQ5MjIyNDcxRjdDMDAwMDA0MDBBMDkxMDQKKzoxMEQyMzAwMDAzNkMwMDAwNEU5MjIyNDIxOTdDMDAwMDQ3OTJBMkYzMzgKKzoxMEQyNDAwMDg0MzAwMDAwMDAwMDAwQTU4NUIwMDEwMDAwMDAwMDQxMEUKKzoxMEQyNTAwMDg1RDAwMTAwRDQwMDNFNDE4NUUwMDEwMDRCOTIyMjQwODAKKzoxMEQyNjAwMDFGN0MwMDAwMDAwMDAwNUExMTkwMDEwMDBCMDAwMDA4MTQKKzoxMEQyNzAwMEU0RjUwMTAwMjAwNDAwNDA4OTk4MDEwMDA5OTkwMDA4QTQKKzoxMEQyODAwMDhBMzAwMTAwNTgwMTJEMDAyQUQwMDEwMDYwMDEyREYwRTQKKzoxMEQyOTAwMDEwQjAwMTAwMDAwMDAwRjAyQ0IwMDEwMDAwMDAwMDE2RUEKKzoxMEQyQTAwMDgwQjIwMTAwMDQwMDI3NDAxMTZDMDAwMDg3OEYwMDQwMEQKKzoxMEQyQjAwMDgxQjIwMDAwMDQwMEEzOTEwMzZDMDAwMDJCOTgwMDQxOTAKKzoxMEQyQzAwMDk1MzAwMTAwNUQ5MkEyMDg4MDMyMDAwMDVEOTJBMjE2QTYKKzoxMEQyRDAwMDgwMzIwMDAwMDAwMDAwNDE5N0IwMDEwMDVCOTIyMzBERjYKKzoxMEQyRTAwMDAyNkMwMDAwMDAwMDAwNDE5N0MwMDEwMEFDOTUwMDRCQUIKKzoxMEQyRjAwMDAyQjAwMDAwOUE5MjAwMDU0OEIxMDAwMDA0MDBBMjA1QTcKKzoxMEQzMDAwMDQ4NkQwMDAwMDQwMDIyNDQxRjdDMDAwMEFDMDAyRjAxODcKKzoxMEQzMTAwMDE0QjAwMTAwQjAwMDJCMDFFMEMxMDEwMDAwMkIwMEE2RjkKKzoxMEQzMjAwMDE2QjAwMTAwMDQwMDIyNDExOTdDMDAwMDAwMDAwMDAxMzkKKzoxMEQzMzAwMEUwRDEwMTAwNzA5MjIzMEQwMjZDMDAwMDAwODAwMDEwMEIKKzoxMEQzNDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzRDkKKzoxMEQzNTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMDAwMDAwMDEwQzYKKzoxMEQzNjAwMDYyQjEwMTAwNjk5MkE4MDBFMDMxMDAwMDIzODMwMDg4QzcKKzoxMEQzNzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDBDODAwMDAzNTMKKzoxMEQzODAwMDQyQzkwMTAwMTAwMDAwRjAyMkM4MDEwMDAwMDAwMDVDNEEKKzoxMEQzOTAwMDIzODAwMTAwMDAwMDAwMDE4NEIwMDEwMDczOTIyMzBEN0UKKzoxMEQzQTAwMDAyNkMwMDAwMDAwMDAwMEQwMkIwMDEwMDAwMDAwMDA4NDcKKzoxMEQzQjAwMDgwQjAwMTAwNzg5MjIyNDAxQjZDMDAwMDVFOTcwMDAxNTMKKzoxMEQzQzAwMDg0NTAwMTAwODE5MjIyNDA4NTZDMDAwMDAwMDAwMDAxMjEKKzoxMEQzRDAwMDgwQzAwMTAwMTA4MDAwMTA0NkM5MDEwMDAwMDAwMDRGMEQKKzoxMEQzRTAwMDQzODEwMTAwMDAwMDAwNDJGMEIxMDEwMDIwMDAwMDQwMzQKKzoxMEQzRjAwMEYwQzkwMTAwMDAwMDAwMTZGMEIxMDEwMDAwMDAwMDQzNzgKKzoxMEQ0MDAwMDYxQjEwMTAwQTAwMDAwQTE2MkREMDEwMDdFOTJBODExQkYKKzoxMEQ0MTAwMEUwMzEwMDAwMDQwMDIyNDAyMzZDMDAwMDkwOTIwMDVFODYKKzoxMEQ0MjAwMDE3OTAwMDAwODQ5MjIzMEQwMjZDMDAwMDAwMDAwMDBEOTQKKzoxMEQ0MzAwMDAyQjAwMTAwMDAwMDAwMDE4NEQwMDEwMDg5OTIyMjQwNjYKKzoxMEQ0NDAwMDFCNkMwMDAwN0Y5NzAwNDM2MTMxMDEwMDkwOTIyMjQwRTUKKzoxMEQ0NTAwMDg1NkMwMDAwMDAwMDAwMDExMkMwMDEwMDEwODAwMDEwNjcKKzoxMEQ0NjAwMDQ2QzkwMTAwMDAwMDAwNEY0MzgxMDEwMDAwMDAwMDQyNTYKKzoxMEQ0NzAwMEYwQjEwMTAwMDAwMDAwMDlGMEIxMDEwMDAwMDAwMDE4NDcKKzoxMEQ0ODAwMEYwQjEwMTAwQTAwMDAwQTE2MkREMDEwMDhFOTJBODExQTAKKzoxMEQ0OTAwMEUwMzEwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwRDUKKzoxMEQ0QTAwMDYyREQwMTAwOTE5MkE4MEEwMjMwMDAwMDIzODMwMDg4MDcKKzoxMEQ0QjAwMDFDQjAwMDAwQzk5NDAwMDU0ODMxMDEwMDk4OTIyMzBENkEKKzoxMEQ0QzAwMDAyNkMwMDAwRkYwNzAwMTEwMDhDMDEwMEM5OTQwMDQwQUQKKzoxMEQ0RDAwMDgxMzIwMTAwNjY5NzAwMDcxNjE0MDEwMDAwOTcwMDVFNzQKKzoxMEQ0RTAwMDA1MTAwMTAwMkYwMDIwNDBFN0IxMDEwMEQwOEIwMDQwNjMKKzoxMEQ0RjAwMDgxQjIwMDAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4NzIKKzoxMEQ1MDAwMDgyQjAwMTAwMDQwMDI2NDA4MTMyMDAwMDAwMDAwMEY4RDMKKzoxMEQ1MTAwMDhDQjAwMTAwMDAwMDAwRjA4RUIwMDEwMEVDOTUwMDQwREUKKzoxMEQ1MjAwMDEzMzAwMTAwMDQwMDBDNDc4MDMyMDAwMDAwMDAwMDQwNkUKKzoxMEQ1MzAwMDg1QjAwMTAwMkM5NjAwNDE4NzMwMDEwMDlEOTUwMDQwODgKKzoxMEQ1NDAwMDgxMzIwMTAwMDQwMDIwOTEwMzZDMDAwMDAwODAwMDEwNzMKKzoxMEQ1NTAwMDQyQzkwMTAwQUU5MjIyNDBFMzZEMDAwMDAwMDAwMDQ1ODgKKzoxMEQ1NjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEFBOTJBODQwRjQKKzoxMEQ1NzAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1RjkKKzoxMEQ1ODAwMDQ4QjEwMTAwQjA5MjIyMDk4MDMwMDAwMDg2OTcwMDQwMjcKKzoxMEQ1OTAwMDEzMzAwMTAwMDAwMDAwMEIxQkIwMDEwMDAwMDAwMDE1NUIKKzoxMEQ1QTAwMDFBRDAwMTAwQjc5MkEyNDExOTdDMDAwMDJCOTgwMDQwQ0MKKzoxMEQ1QjAwMDk1MzAwMTAwMDAwMDAwMTY4MEIyMDEwMEMwOTIyNzA4REIKKzoxMEQ1QzAwMDgwMzIwMDAwQzE5MTAwMDAyQUMwMDAwMDJCOTgwMDQxNjkKKzoxMEQ1RDAwMDk1MzAwMTAwMDAwMDAwMTY4MEIyMDEwMEJCOTIyNzA4QzAKKzoxMEQ1RTAwMDgwMzIwMDAwNUQ5MjAwMDAyQUMwMDAwMDAwMDAwMDQxNkYKKzoxMEQ1RjAwMDk3QjAwMTAwQkU5MjIzMEQwMjZDMDAwMDAwMDAwMDQxQjQKKzoxMEQ2MDAwMDk3QzAwMTAwQUM5NTAwNEIwMkIwMDAwMDAwMDAwMDA1N0YKKzoxMEQ2MTAwMDQ4QjEwMTAwQzk4QjIyNDIxOTdDMDAwMDBGOTcwMDNBRTMKKzoxMEQ2MjAwMDgxMzAwMTAwQzk4QjAwNDA4MUIyMDAwMDA0MDBBMjRBOTEKKzoxMEQ2MzAwMDFGN0MwMDAwQzU5MjAwNEExRjkwMDAwMDA0MDBBMjQxMTgKKzoxMEQ2NDAwMDE5N0MwMDAwMDQwMEEyNEYyQjdDMDAwMDA0MDBBMjQ0QkYKKzoxMEQ2NTAwMDFGN0MwMDAwMDQwMEEyNDUxRjdDMDAwMEZGOTQwMDAwMTYKKzoxMEQ2NjAwMDEwMzAwMTAwMDAwMDAwMTUxMEMwMDEwMDAwMDAwMDEwODMKKzoxMEQ2NzAwMDMyQjAwMTAwQTE5NzAwMDYwNDMwMDEwMEQyOTJBMjQ0MEEKKzoxMEQ2ODAwMDFGN0MwMDAwMDAwMDAwMEIxQkIwMDEwMDAwMDAwMDBBMUUKKzoxMEQ2OTAwMDJDRDAwMTAwMDAwMDAwMEEwMkIwMDEwMDlFOTMwMDAxOUUKKzoxMEQ2QTAwMDhDMzAwMTAwMDA4MDAwMTk0MkM5MDEwMEQ5OTIyMjQwNEIKKzoxMEQ2QjAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwNzQKKzoxMEQ2QzAwMDYyREQwMTAwRDU5MkE4NDA4MTMyMDAwMDIzODMwMDg4RUEKKzoxMEQ2RDAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwMDAwMDAyN0QKKzoxMEQ2RTAwMDEwQzAwMTAwRTI5MjIyMDIxNDUwMDAwMDc5OTYwMDQ1MTkKKzoxMEQ2RjAwMDFGMDAwMTAwQ0I5MjIyNUMxRjdDMDAwMDAwMDAwMDQ3NEQKKzoxMEQ3MDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMERFOTJBODVDMDIKKzoxMEQ3MTAwMDFGMDAwMDAwMjM4MzAwODgxQ0IwMDAwMENCOTIwMDA1OEUKKzoxMEQ3MjAwMDQ4QjEwMDAwMDgwMDJENDA4NUIwMDEwMDAwMDAwMEYwNjUKKzoxMEQ3MzAwMDgyQjAwMTAwMDAwMDAwNDAwNUIwMDEwMDJDOTYwMDQxQkQKKzoxMEQ3NDAwMDg3MzAwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwNzkKKzoxMEQ3NTAwMDYyREQwMTAwRTc5MkE4NDA4MTMyMDAwMDIzODMwMDg4NDcKKzoxMEQ3NjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMEVEOTIyMjA5NDQKKzoxMEQ3NzAwMDgwMzAwMDAwODY5NzAwNDAxMzMwMDEwMEYwOTIyMjQ0NzAKKzoxMEQ3ODAwMDE5N0MwMDAwODY5NzAwNEY4MTMwMDEwMDAwMDAwMDQ0QTIKKzoxMEQ3OTAwMDE5ODAwMTAwRkYwNzAwMDgwMDhDMDEwMDA0MDAyNjQwRUEKKzoxMEQ3QTAwMDgxMzIwMDAwRkY5MjIyNEExRjdDMDAwMEY3OTJBMjE2RUQKKzoxMEQ3QjAwMDAyMzAwMDAwQzk5NDAwNDA4MTMyMDEwMDJGMDAyMDQwNTcKKzoxMEQ3QzAwMEU3QjEwMTAwQzk4QjAwNDA4MUIyMDAwMDJEMDAyRDA4OTcKKzoxMEQ3RDAwMDJBQjAwMTAwRkI5MjIyNDIxOTdDMDAwMDNDOTYwMDQwRDYKKzoxMEQ3RTAwMDgxMzIwMTAwRkM5MjAwNDA4MUIyMDAwMDA1OTYwMDQwQTkKKzoxMEQ3RjAwMDgxMzIwMTAwMzAwMDJFMDAyQUQwMDEwMDMyMDAyQTE1QUIKKzoxMEQ4MDAwMEU0QjEwMTAwQzk4QjAwMTZFNEIxMDAwMEJDOTFBMjE2N0UKKzoxMEQ4MTAwMDAyMzAwMDAwQzk5NDAwNDA4MTMyMDEwMDJGMDAyMDQwRjYKKzoxMEQ4MjAwMEU3QjEwMTAwRDA4QjAwNDA4MUIyMDAwMDA0MDAyMjQxMkEKKzoxMEQ4MzAwMDE5N0MwMDAwMDQwMEEyNEYyQjdDMDAwMDA0MDBBMjQ0Q0QKKzoxMEQ4NDAwMDFGN0MwMDAwMDQwMEEyNDUxRjdDMDAwMDA0MDBBMjRBQzcKKzoxMEQ4NTAwMDFGN0MwMDAwRkY5NDAwNEExRjEwMDEwMEQ0OTEwMDEwQUIKKzoxMEQ4NjAwMDMyQjAwMDAwOEEwMDIwNDBFN0IxMDEwMDBFOTNBMjQxQ0YKKzoxMEQ4NzAwMDE5N0MwMDAwQzk5NDAwNDA4MTMyMDEwMDExOTMwMDQwREUKKzoxMEQ4ODAwMDgxQjIwMDAwQTU5NTAwMTU5NDMwMDEwMEFDOTUwMDRCQzUKKzoxMEQ4OTAwMDAyQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDEzOTMyMjQyQ0QKKzoxMEQ4QTAwMDE5N0MwMDAwMEY5NzAwM0E4MTMwMDEwMDg2OTcwMDQ1RUYKKzoxMEQ4QjAwMDgxMzAwMTAwQzk4QjAwNDA4MUIyMDAwMDY1OTAwMDQ1QjUKKzoxMEQ4QzAwMDFGOTAwMDAwMDQwMDIyNDExOTdDMDAwMDA0MDBBMjQ3QzAKKzoxMEQ4RDAwMDFGN0MwMDAwRjI5NTAwNDA4MTMyMDEwMDA0MDBBMzBBODEKKzoxMEQ4RTAwMDBDNkMwMDAwOUQ5NTAwNDA4MTMyMDEwMEQ0OTEwMDAxMzQKKzoxMEQ4RjAwMDJDQjAwMDAwMDQwMDIyNDExOTdDMDAwMDA0MDBBMjQ4NjIKKzoxMEQ5MDAwMDFGN0MwMDAwQjQ5NDAwNDA4MTMyMDEwMDJDOTNBMjA4RDcKKzoxMEQ5MTAwMDgwMzIwMDAwMkM5M0EyMTY4MDMyMDAwMDAwODIwMDAyQTgKKzoxMEQ5MjAwMDA0REMwMTAwMDAwMDAwNDUwM0YwMDEwMDAwMDAwMDAxREMKKzoxMEQ5MzAwMDAwQzAwMTAwMjQ5MzM3NUM2MTMxMDAwMDAwMDAwMDFCMkYKKzoxMEQ5NDAwMDYyQjEwMTAwMjk5MzI4NDA4MTMyMDAwMDA0MDBBMjVDRUEKKzoxMEQ5NTAwMDc3N0QwMDAwMjU5MzAwNDA4MUIyMDAwMDAwMDAwMDAwQTgKKzoxMEQ5NjAwMDYyQjEwMTAwMjk5M0E4NDA4MTMyMDAwMEYwODcxNzQwN0UKKzoxMEQ5NzAwMDgxQjIwMDAwNTgwMTIwMDhFMEIxMDEwMDYwMDEyMDE2Q0EKKzoxMEQ5ODAwMEUwQjEwMTAwRjI5NTAwNDcxRjEwMDEwMDA0MDBBMzBBNTYKKzoxMEQ5OTAwMDBDNkMwMDAwOUQ5NTAwNDA4MTMyMDEwMEQ0OTEwMDAxODMKKzoxMEQ5QTAwMDJDQjAwMDAwMDQwMDIyNDExOTdDMDAwMDA0MDBBMjQ3QjIKKzoxMEQ5QjAwMDFGN0MwMDAwQjQ5NDAwNDcxRjEwMDEwMDQzOTNBMjA4OEQKKzoxMEQ5QzAwMDgwMzIwMDAwNDM5M0EyMTY4MDMyMDAwMDNGOTNBMjQyQUYKKzoxMEQ5RDAwMDE5N0MwMDAwMDA4MjAwMDIwNERDMDEwMEEwOTgwMDQwRDUKKzoxMEQ5RTAwMDQ3OTkwMTAwMzAwNTAwNDE4OTMwMDEwMDA0MDAyMjQxQkYKKzoxMEQ5RjAwMDE5N0MwMDAwQTU5NTAwMTU5NDMwMDEwMEFDOTUwMDRCRjIKKzoxMERBMDAwMDAyQjAwMDAwRjA4NzAwNDA4MUIyMDAwMDNDOTYwMDQwNjgKKzoxMERBMTAwMDgxMzIwMTAwMDAwMDAwNEIxOTkwMDEwMDBGOTcwMDNBN0QKKzoxMERBMjAwMDgxMzAwMTAwRjA4NzAwNDA4MUIyMDAwMDU4MDEyMDA4RDkKKzoxMERBMzAwMEUwQjEwMTAwNjAwMTIwMTZFMEIxMDEwMDA0MDBBMjRGMzYKKzoxMERBNDAwMDJCN0MwMDAwMDQwMEEyNDQxRjdDMDAwMDA0MDBBMjQ1QkYKKzoxMERBNTAwMDFGN0MwMDAwRkY5NDAwMTAzMjMwMDEwMEQ0OTEwMDQwODAKKzoxMERBNjAwMDEzQjAwMDAwQjQ5NDAwNDA4MTMyMDEwMDU4OTNBMjA4MjIKKzoxMERBNzAwMDgwMzIwMDAwNTg5M0EyMTY4MDMyMDAwMDAwODIwMDAyMUIKKzoxMERBODAwMDA0REMwMTAwMDAwMDAwNDUwM0YwMDEwMDAwMDAwMDAxN0IKKzoxMERBOTAwMDAwQzAwMTAwNTA5MzM3NUM2MTMxMDAwMDAwMDAwMDFCQTIKKzoxMERBQTAwMDYyQjEwMTAwNTU5MzI4NDA4MTMyMDAwMDA0MDBBMjVDNUQKKzoxMERBQjAwMDc3N0QwMDAwNTE5MzAwNDA4MUIyMDAwMDAwMDAwMDAwMUIKKzoxMERBQzAwMDYyQjEwMTAwNTU5M0E4NDA4MTMyMDAwMEYwODcxNzQwRjEKKzoxMERBRDAwMDgxQjIwMDAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4OEMKKzoxMERBRTAwMDgyQjAwMTAwMDQwMDI2NDA4MTMyMDAwMDAwMDAwMEY4RUUKKzoxMERBRjAwMDhDQjAwMTAwMDAwMDAwRjA4RUIwMDEwMEVDOTUwMDQwRjkKKzoxMERCMDAwMDEzMzAwMTAwMDQwMDBDNDc4MDMyMDAwMDAwMDAwMDQwODgKKzoxMERCMTAwMDg1QjAwMTAwMkM5NjAwNDE4NzMwMDEwMDlEOTUwMDQwQTIKKzoxMERCMjAwMDgxMzIwMTAwMDQwMEEwOTEwMzZDMDAwMDAwODAwMDEwMEQKKzoxMERCMzAwMDQyQzkwMTAwNkE5MzIyNDBFMzZEMDAwMDAwMDAwMDQ1RTUKKzoxMERCNDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDY2OTNBODQwNTEKKzoxMERCNTAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1MTMKKzoxMERCNjAwMDQ4QjEwMTAwODc4RjIyMDk4MDMwMDAwMDg2OTcwMDQwNkQKKzoxMERCNzAwMDEzMzAwMTAwODc4RjAwNDA4MUIyMDAwMDA0MDA4MzFFMzMKKzoxMERCODAwMDgwMzIwMDAwMDQwMEEyNEYyQjdDMDAwMDA0MDBBMjQ1NUMKKzoxMERCOTAwMDFGN0MwMDAwMTQwMDJENDUxRjkwMDEwMDA0MDBBMkYwMUUKKzoxMERCQTAwMDE0NkMwMDAwMDQwMEEwMDExNDZDMDAwMERGOEYwMDQ0MUUKKzoxMERCQjAwMDE5OTAwMDAwMDQwMEEyNEExRjdDMDAwMDc4OTNBMjQxNDMKKzoxMERCQzAwMDE5N0MwMDAwMDAwMDAwNEExRjkwMDEwMDdBOTEwMDQwN0IKKzoxMERCRDAwMDgxQjIwMDAwMDQwMEEyNDgxRjdDMDAwMEYyOTUwMDRBQjgKKzoxMERCRTAwMDFGMTAwMTAwMDQwMEEzMEEwQzZDMDAwMDlEOTUwMDQwNkEKKzoxMERCRjAwMDgxMzIwMTAwRDQ5MTAwMDEyQ0IwMDAwMDA0MDAyMjQxQzgKKzoxMERDMDAwMDE5N0MwMDAwMDQwMEEyNEYyQjdDMDAwMDA0MDBBMjQ0RjkKKzoxMERDMTAwMDFGN0MwMDAwMDQwMEEyNDUxRjdDMDAwMEZGOTQwMDQwMTAKKzoxMERDMjAwMDgxMzIwMTAwRDQ5MTAwMTAzMkIwMDAwMDhCMDAwMDQwMUUKKzoxMERDMzAwMDQzOTkwMTAwMDQwMEEyNDZFNzdEMDAwMDY1OTAwMDQ1N0QKKzoxMERDNDAwMDFGOTAwMDAwMDAwMDAwNDEzN0MzMDEwMDAwMDAwMDQxQTgKKzoxMERDNTAwMDMzQzMwMTAwMzYwMDAwMDEwMkNDMDEwMDAwMDBEMjQwQjUKKzoxMERDNjAwMDgxQjIwMDAwOEM5Mzg1MTc4MDMyMDAwMDAwMDA5RjQ4MkQKKzoxMERDNzAwMDAzRDAwMDAwOEU5MzlDMTc4MDMyMDAwMDAwMDA5RjRDNjAKKzoxMERDODAwMDAzRDAwMDAwMDAwMDgwMDEzNEMzMDEwMDQwODAwMDAzODUKKzoxMERDOTAwMDQ0QzkwMTAwMDAwMDAwNEFGMEIxMDEwMDA0MDAyNjQwMjAKKzoxMERDQTAwMDgxMzIwMDAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDEyQ0MKKzoxMERDQjAwMEYwQjEwMTAwRDE5NDAwNDFFMTMxMDEwMDAwODAwMDQzNDYKKzoxMERDQzAwMDQ0QzkwMTAwMTAwMDAwNDBGMTk5MDEwMDAwMDAwMDQ4MjMKKzoxMERDRDAwMEYwQjEwMTAwMDAwMDAwNDlGMEIxMDEwMDQwMDAwMDAzNzQKKzoxMERDRTAwMEUwQzkwMTAwMDAwMDAwNDU2MUIxMDEwMDAwMDAwMDQzRUYKKzoxMERDRjAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMDlCOTMwMDQwODcKKzoxMEREMDAwMDgxQjIwMDAwMkQwNDAwNDA4OTk4MDEwMDA5OTkwMEE1MDYKKzoxMEREMTAwMDhBMzAwMTAwQkEwMDIwNDBFNUIxMDEwMEIwMDAyRjAxQjcKKzoxMEREMjAwMDhDRDAwMTAwMDQwMDFGRjA4MDMyMDAwMDAwMDAwMDQ2OEIKKzoxMEREMzAwMEUwQzEwMTAwQUMwMDJGNDAxM0IwMDEwMENDMDAyRDAxNjgKKzoxMERENDAwMEUwQzEwMTAwQTk5MzlDMTc4MDMyMDAwMDA0MDAyMjRBMjAKKzoxMERENTAwMDE5N0MwMDAwMzY5ODAwNDA4MTMyMDEwMEFCOTMyMjQ3QzUKKzoxMERENjAwMDE5N0MwMDAwMDAwMDAwNUYxMzkwMDEwMEQ0OTcwMDQ3NjkKKzoxMERENzAwMDE5MTAwMTAwQzAwMDJENDQxRjkwMDEwMEM0MDAyREYwQjcKKzoxMEREODAwMDgyQjAwMTAwMEI5ODAwRjA4NEIwMDAwMDkwMDAyRDA1RDcKKzoxMEREOTAwMDQ4QjEwMTAwQzA5M0EyNEIxRjdDMDAwMDE1OTRBMjRDMTcKKzoxMEREQTAwMDFGN0MwMDAwQzA5MzFGMUNFMDZEMDAwMEMzOTNBMjAxMDQKKzoxMEREQjAwMDgwMzIwMDAwQTgwMDJENDY4RkIwMDEwMEI5OTMxRjFDQ0YKKzoxMEREQzAwMEUwNkQwMDAwQjQwMDAwNDA0Mzk5MDEwMEJCOTMyMkYwRDUKKzoxMERERDAwMDNBNkMwMDAwMTI5NDFGRjAzQTZDMDAwMDAwMDBBMjQwNjAKKzoxMERERTAwMDgwQjIwMDAwMDAwMDgwNEY4RkIwMDEwMDhBMDAwMDQwMjgKKzoxMERERjAwMDQzOTkwMTAwMTM5NDIwNDJFNzZEMDAwMEJGOTMyMjQwMzUKKzoxMERFMDAwMDgwMzIwMDAwMDAwMDgwNTk4RkIwMDEwMDAwMDA4MDU4NkYKKzoxMERFMTAwMDhGQjAwMTAwQzI5MzIyNDA4MDMyMDAwMDAwMDA4MDVDN0QKKzoxMERFMjAwMDhGQjAwMTAwMDAwMDgwNUI4RkIwMDEwMEFDMDAwMDQwQUIKKzoxMERFMzAwMDQzOTkwMTAwQjAwMDJERjA4NEIwMDEwMEM3OTNBMjQyQzUKKzoxMERFNDAwMDI0NkMwMDAwRDI5MzIzRjAwMjZDMDAwMEIwMDAwMEExMEIKKzoxMERFNTAwMDgwQ0UwMTAwMDQwMEE2NDA4MTMyMDAwMENGOTNBMkYwRTIKKzoxMERFNjAwMDgwMzIwMDAwMTQ5NEEyNDIyNDZDMDAwMDE0OTRBMjQxNTkKKzoxMERFNzAwMDAzNkMwMDAwQ0U5M0EyNDA4MDMyMDAwMDAwMDA4MDUxNkQKKzoxMERFODAwMDhGQjAwMTAwMDAwMDgwNTI4RkIwMDEwMDE0OTQxRjEyNjcKKzoxMERFOTAwMDg0NTAwMDAwMTQ5NEEwMDE4NDZDMDAwMEMwOTMwMDQwRTIKKzoxMERFQTAwMDgxQjIwMDAwOEIwMDAwNDA0Mzk5MDEwMEZEOTNBMjQ2MUYKKzoxMERFQjAwMEU3N0QwMDAwMTQwMDAwNDA0Mzk5MDEwMEVGOTMyMkYwMzkKKzoxMERFQzAwMDE0MzAwMDAwREI5MzIwMEEwMjZDMDAwMEVDOTMwMzFFNjgKKzoxMERFRDAwMDgwMzIwMDAwREE5M0EyNDA4MDMyMDAwMDAwMDA4MDQ0Q0IKKzoxMERFRTAwMDhGQjAwMTAwMDAwMDgwNDk4RkIwMDEwMEUwOTMyMjBBNEEKKzoxMERFRjAwMDAyNkMwMDAwRTM5M0EyNDExOTdDMDAwMERGOTNBMjQwNzIKKzoxMERGMDAwMDgwMzIwMDAwMDAwMDgwNTU4RkIwMDEwMDAwMDA4MDU2NzQKKzoxMERGMTAwMDhGQjAwMTAwRTI5M0EyNDA4MDMyMDAwMDAwMDA4MDQzRjUKKzoxMERGMjAwMDhGQjAwMTAwMDAwMDgwNDg4RkIwMDEwMDAwMDAwMDAxQTgKKzoxMERGMzAwMDgyQjAwMTAwMDAwMDAwMEE4MkQwMDEwMEU5OTMyMDkxMjQKKzoxMERGNDAwMDgzNkMwMDAwRTg5M0EyNDA4MDMyMDAwMDI2MDA4MDQwRUQKKzoxMERGNTAwMDhGOTgwMTAwMjcwMDgwNDA4Rjk4MDEwMEVCOTNBMjQwMkEKKzoxMERGNjAwMDgwMzIwMDAwMUYwMDgwNDA4Rjk4MDEwMDIwMDA4MDQwMTgKKzoxMERGNzAwMDhGOTgwMTAwRUU5M0EyNDA4MDMyMDAwMDIyMDA4MDQwODIKKzoxMERGODAwMDhGOTgwMTAwMjMwMDgwNDA4Rjk4MDEwMDg4MDAyRDQ0NjUKKzoxMERGOTAwMDhGQjAwMTAwRjg5M0EyNDExOTdDMDAwMEY1OTNBMjQzRDEKKzoxMERGQTAwMDNEN0MwMDAwRjU5M0EyRjIwMjZDMDAwMDAwMDBBMjQwNEMKKzoxMERGQjAwMDgwQjIwMDAwMDAwMDgwNDk4RkIwMDEwMEY3OTNBMjQwQkEKKzoxMERGQzAwMDgwMzIwMDAwMDAwMDgwNDM4RkIwMDEwMDAwMDA4MDQ4RDQKKzoxMERGRDAwMDhGQjAwMTAwRjU5M0EwOTEwMzZDMDAwMEYzOTMyMjQzRUUKKzoxMERGRTAwMDNEN0MwMDAwRkM5M0EyNDA4MDMyMDAwMDI4MDA4MDQwNkQKKzoxMERGRjAwMDhGOTgwMTAwMjkwMDgwNDA4Rjk4MDEwMDE0MDAwMDQwOTQKKzoxMEUwMDAwMDQzOTkwMTAwMDY5NEEyRjAxNDMwMDAwMDg4MDAyRDQ0Q0EKKzoxMEUwMTAwMDhGQjAwMTAwMDM5NEEyRjIwMjZDMDAwMDAwMDBBMjQwNDUKKzoxMEUwMjAwMDgwQjIwMDAwMDAwMDgwNDk4RkIwMDEwMEY1OTMyMjQxQ0EKKzoxMEUwMzAwMDE5N0MwMDAwRjM5MzIwOTEwMzZDMDAwMEY1OTMwMDQwREQKKzoxMEUwNDAwMDgxQjIwMDAwMEE5NDIwMEEwMjZDMDAwMDA5OTRBMjQwRTgKKzoxMEUwNTAwMDgwMzIwMDAwMDAwMDgwNDQ4RkIwMDEwMDAwMDA4MDQ5NDEKKzoxMEUwNjAwMDhGQjAwMTAwMEY5NDIyMEEwMjZDMDAwMEUzOTNBMjQxREEKKzoxMEUwNzAwMDE5N0MwMDAwMEU5NEEyNDA4MDMyMDAwMDAwMDA4MDU1MDAKKzoxMEUwODAwMDhGQjAwMTAwMDAwMDgwNTY4RkIwMDEwMDExOTRBMjQwQjMKKzoxMEUwOTAwMDgwMzIwMDAwMDAwMDgwNDM4RkIwMDEwMDAwMDA4MDQ4MDMKKzoxMEUwQTAwMDhGQjAwMTAwMTc5NDAwNDM5NUIwMDAwMDE3OTQwMDQxMTEKKzoxMEUwQjAwMDk1QjAwMDAwMTc5NDAwNDI5NUIwMDAwMDE3OTQwMDQ0RkEKKzoxMEUwQzAwMDk1QjAwMDAwMTc5NDAwNEM5NUIwMDAwMDMwMDQwMDQwNUIKKzoxMEUwRDAwMDg5OTgwMTAwMDk5OTAwNEE4QTMwMDEwMDVCOTcwMDQwNDUKKzoxMEUwRTAwMDgxMzIwMTAwMUM5NEEyNDA4MDMyMDAwMDAwMDA4MDRCNkQKKzoxMEUwRjAwMDhGQjAwMTAwMDAwMDgwNEM4RkIwMDEwMDA0MDBBMjA1MjkKKzoxMEUxMDAwMDQ4NkQwMDAwMkQwMDAwNDA0Mzk5MDEwMDJFMDAyRkYzQzAKKzoxMEUxMTAwMDg0QjAwMTAwMjI5NEEyRjM5NjMwMDAwMDAwMDA4MDQwRjkKKzoxMEUxMjAwMDAxQjAwMTAwMkQwMDJBNDFFN0QxMDEwMEQ0MDAzRDQxOUEKKzoxMEUxMzAwMDg1RTAwMTAwMEIwMDAwRjIwMEU0MDEwMDI4OTQyMjVBNUYKKzoxMEUxNDAwMDAxN0MwMDAwMDAwMDAwNDAxRjkwMDEwMDI5OTQwMDVBNEIKKzoxMEUxNTAwMDAxODAwMDAwMDAwMDAwNDAxRjgwMDEwMDAwMDA2MzQxQkEKKzoxMEUxNjAwMDg1QzAwMTAwMkM5NEEwQTU4NTZDMDAwMDAwMDA2MzQwRDAKKzoxMEUxNzAwMDg1QjAwMTAwMTIwNDAwNDA4OTk4MDEwMDA5OTkwMDAwNEYKKzoxMEUxODAwMDhBMzAwMTAwMDAwMDgwNDA4MUIyMDEwMDAwMDBBMEE1OUIKKzoxMEUxOTAwMDg1NkMwMTAwMDAwMEUzNDA4NUIwMDEwMDBDODAwMDAzQTUKKzoxMEUxQTAwMDQyQzkwMTAwMTIwMDAwNDA4Nzk4MDEwMDdGOTgwMEYwRUEKKzoxMEUxQjAwMDhDQjAwMDAwMDQwMDIyNUYxRjdDMDAwMDQxOTQyMjQwQ0MKKzoxMEUxQzAwMDBGNkMwMDAwMDAwMDJGMDU0OEIxMDEwMDA0MDAyMjVBMjYKKzoxMEUxRDAwMDFGN0MwMDAwMTAwMDAwRjA5OEY0MDEwMDA0MDBBMjA3NkEKKzoxMEUxRTAwMDk4NkMwMDAwMTAwMDAwMEM5OEY0MDEwMDA0MDBBMjA3RDUKKzoxMEUxRjAwMDk4NkMwMDAwM0U5NEEyNEIxOTdDMDAwMDNGOTQyMkYwRTIKKzoxMEUyMDAwMDE4NkMwMDAwMDAwMDYwNEIxOTkwMDEwMDQzOTUwMDA3NTYKKzoxMEUyMTAwMDEwMzAwMTAwMkY4MzAwNDAwNUIwMDAwMDQzOTQyMjVBQzMKKzoxMEUyMjAwMDFGN0MwMDAwQUI5NDAwNDA4MTMwMDEwMDJGODMwMDQwMzAKKzoxMEUyMzAwMDA1QjAwMDAwMDQwMDIyNUYxRjdDMDAwMDAwMDAyRjA1RDUKKzoxMEUyNDAwMDQ4QjEwMTAwMDAwMDYwNEIxOTkwMDEwMDA0MDAyMjVBRkYKKzoxMEUyNTAwMDFGN0MwMDAwMDQwMDIyNDAwRjZDMDAwMDEwMDAwMEYwNDIKKzoxMEUyNjAwMDk2RjQwMTAwMDQwMEEyMDc5NjZDMDAwMDEwMDAwMDBDNTgKKzoxMEUyNzAwMDk2RjQwMTAwMDQwMEEyMDc5NjZDMDAwMDQzOTUwMDA3ODUKKzoxMEUyODAwMDEwMzAwMTAwMkY4MzAwNDAwNUIwMDAwMDA0MDAyMjVGMjEKKzoxMEUyOTAwMDFGN0MwMDAwMDAwMDJGMDU0OEIxMDEwMDAwMDA2MDRCMEEKKzoxMEUyQTAwMDE5OTAwMTAwMDQwMDIyNUExRjdDMDAwMDA0MDAyMjQwNDMKKzoxMEUyQjAwMDBGNkMwMDAwMTAwMDAwRjA5NkY0MDEwMDA0MDBBMjA3QUIKKzoxMEUyQzAwMDk2NkMwMDAwMTAwMDAwMEM5NkY0MDEwMDA0MDBBMjA3RjgKKzoxMEUyRDAwMDk2NkMwMDAwNDM5NTAwMDcxMDMwMDEwMDAwMDA4MDQwNUMKKzoxMEUyRTAwMDA1QjAwMTAwNUE5NDMzNDA4MTMyMDAwMDVEOTRBMUFEMjUKKzoxMEUyRjAwMDk1MjAwMDAwNkY5NDEzNDA4MUIyMDAwMDAwMDAxMzRBODMKKzoxMEUzMDAwMDVBODMwMTAwMzAwMDM5NDU5NUUwMDEwMDA0MDBBMjVGMDYKKzoxMEUzMTAwMDVGN0MwMDAwMDQwMEEyNUU1RjdDMDAwMDFGMDAwMDBGMTUKKzoxMEUzMjAwMDVFRDgwMTAwMDAwMDAwNUE1RjkwMDEwMDAwMDAwMDVFMEUKKzoxMEUzMzAwMDVGOTAwMTAwMDAwMDAwNDA0NUIwMDEwMDAwMDAwMDA0QjMKKzoxMEUzNDAwMDQ4QjAwMTAwMDAwMDAwMDU0QUIwMDEwMDAwMDAwMDBDQzgKKzoxMEUzNTAwMDU4QjAwMTAwMDAwMDAwMDc0RUIwMDEwMDFDODUwMDQwQ0QKKzoxMEUzNjAwMDVEOTgwMTAwMDQwMEEyNDQ1RjdDMDAwMDAwMDAwMDU4OUEKKzoxMEUzNzAwMDYxQjEwMTAwMDAwMDAwNEE2MkIxMDEwMDAwMDBBODQxNDMKKzoxMEUzODAwMDk3QjAwMDAwNkM5NDAwNDA4MUIyMDAwMDAwMDA4MDQwMTMKKzoxMEUzOTAwMDk3QjAwMTAwMDQwMEEyNDAwNTZDMDAwMDFDOTkwMDQwRTkKKzoxMEUzQTAwMDgxMzIwMTAwNzI5NDYwMDc5NjMwMDAwMEZGRkYwMDRCM0QKKzoxMEUzQjAwMDg0ODkwMTAwMDAwMDcwQzIyNEIwMDEwMDdGOTRBMjQ1NEUKKzoxMEUzQzAwMDI1N0MwMDAwNzY5NDMxMjA4NTMwMDAwMDgwOTQyMjEyNTQKKzoxMEUzRDAwMDQ4N0YwMDAwNTgwNDExMTI0ODAzMDEwMDEwMDAwMDEyODkKKzoxMEUzRTAwMDk2RTQwMTAwMDAwMDAwNEIxRTk0MDEwMDE3MDQwMDQwNTkKKzoxMEUzRjAwMDg5OTgwMTAwMDAwMDAwMTI4QUIwMDEwMDA5OTkwMDVGQUQKKzoxMEU0MDAwMDhCMTAwMTAwMDAwMDgwNUExRjkwMDEwMDdGOTQzMTQwNjIKKzoxMEU0MTAwMDgxMzIwMDAwMDAwMDAwQjQyNEIwMDEwMDgwOTQyMjEyNzgKKzoxMEU0MjAwMDQ4N0YwMDAwNTgwNDAwNDA4MTMyMDEwMDE3MDQwMDQwN0EKKzoxMEU0MzAwMDg5OTgwMTAwMDk5OTAwMTI4QTMwMDEwMDAwMDAyRjA1MTcKKzoxMEU0NDAwMDQ4QjEwMTAwOEY5NDBCRjA4NDMwMDAwMDAwMDAxMTEyREQKKzoxMEU0NTAwMDQ4ODMwMTAwOEM5NDIyNTA4NTcwMDAwMDVFMDEwMDQwQ0EKKzoxMEU0NjAwMDQzOTkwMTAwQjQ5NjAwRjI5NjMwMDEwMDkzMDQwMDEyMjMKKzoxMEU0NzAwMDk0MzAwMTAwMDAwMDAwNUExRjkwMDEwMDEwMDAwMDEyQUIKKzoxMEU0ODAwMDk2RTQwMTAwMDAwMDgwNEIxRTk0MDEwMDEwMDAwMDQyNDEKKzoxMEU0OTAwMDEwRjQwMTAwMDQwMDIyMDg4MDMyMDAwMDAwQjczRjQzNUUKKzoxMEU0QTAwMDExRjAwMTAwMDcwMDAwMDg4QTg4MDEwMDkzOTQzMEExNTAKKzoxMEU0QjAwMDBDMzAwMDAwOTY5NDIyNDVFNjdEMDAwMDgwOTQxMDQwQzgKKzoxMEU0QzAwMDgxQjIwMDAwMDAwMDJBNDVFNjkxMDEwMDAwMDAxMDEyMTAKKzoxMEU0RDAwMDQ4ODMwMTAwMDQwMEEyMDU0ODZEMDAwMDAwMDAxMTQwQkYKKzoxMEU0RTAwMDgxQjIwMTAwMDAwMDYwNEI4NTgwMDEwMDVFMDEwMDQwQTgKKzoxMEU0RjAwMDQzOTkwMTAwQjQ5NjAwRjI5NjMwMDEwMDAwODAwMDEwQUMKKzoxMEU1MDAwMDQ0QzkwMTAwRDgwMDAwNDA4MTk4MDEwMDJFMDAyRDA1NkIKKzoxMEU1MTAwMDQ4QjEwMTAwQTI5NDIyNDBFNzZEMDAwMDgwMDAwMDQwNTUKKzoxMEU1MjAwMDgwQzgwMTAwMDAwMDAwNDBGMEIxMDEwMDA5MDAwMDA4QUYKKzoxMEU1MzAwMDg2RTQwMTAwMDAwMDY4QTc4N0MwMDEwMDAwMDAwMDQ0RDUKKzoxMEU1NDAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEE2OTRBODA1QUQKKzoxMEU1NTAwMEUwMzEwMDAwMTAwMDAwMTI5NkU0MDEwMDAwMTQwMDRCQUUKKzoxMEU1NjAwMDk2REMwMTAwMDAwMDgwNEIxRTk0MDEwMDA0MDAyMjVBM0EKKzoxMEU1NzAwMDFGN0MwMDAwMTAwMDAwMEY4NEY0MDEwMDFGMDAwMDQyMDcKKzoxMEU1ODAwMDg0ODgwMTAwQjA5NDIyNDA4MDMyMDAwMEIxOTQwMDQyOUYKKzoxMEU1OTAwMDY4QjEwMDAwMDAwMDAwNDI2QUIxMDEwMEIxOTQzMTVBMzQKKzoxMEU1QTAwMDFGMDAwMDAwMDQwMEEyNDI0ODdGMDAwMDAwMDA5MTQyQ0EKKzoxMEU1QjAwMDQ4OTMwMTAwQjQ5NDM1NDA4MTMyMDAwMDZEMDAwMDQwNjIKKzoxMEU1QzAwMDYxOTkwMTAwQkE5NDI4QjEyQzMwMDAwMEI1OTQyMjREMTUKKzoxMEU1RDAwMDc1N0QwMDAwMDAwMDAwNDAyREIwMDEwMDAwMDA5NTQwNTYKKzoxMEU1RTAwMDExQjAwMTAwNkQwMDAwNDA2MTk5MDEwMEJBOTRBOEIxMUEKKzoxMEU1RjAwMDEwMzAwMDAwMDAwMDAwMTY4MEIyMDEwMDA0MDAyNzA4NUYKKzoxMEU2MDAwMDgwMzIwMDAwMDAwMDk1NDA4MUIyMDEwMDdGMDAwMDQwOTAKKzoxMEU2MTAwMDYxOTkwMTAwQzU5NDI4QjExMDMwMDAwMEJGOTQ5RkJBRTEKKzoxMEU2MjAwMDgwMzIwMDAwMTUwMDAwNDA4OTk4MDEwMDA5OTkwMDQwREYKKzoxMEU2MzAwMDgxMzIwMTAwMDAwMDgwNDAxMUIwMDEwMDA0MDAyMjVDMjIKKzoxMEU2NDAwMDExN0MwMDAwMDQwMEEyNUExMTdDMDAwMDA0MDAyMjA4ODIKKzoxMEU2NTAwMDQ4MDYwMDAwMDAwMDgwMjQxMTg0MDEwMDA0MDBBMjVDMzAKKzoxMEU2NjAwMDAxN0MwMDAwMDQwMEEyNUEwMTdDMDAwMDA0MDAyMjAwOEEKKzoxMEU2NzAwMDQ4MDYwMDAwMDQwMDFGQkI4MDMyMDAwMDAwMDAwMDVGNUQKKzoxMEU2ODAwMDYxQjEwMTAwMDAxMDAwMDA2MkREMDEwMDAwMDBBODQwM0YKKzoxMEU2OTAwMDgxQjIwMDAwQ0U5NDAwNDA4MUIyMDAwMEFDOTQwMDQwRjIKKzoxMEU2QTAwMDQ3OTkwMTAwRDI5NDMyNDA4MTMyMDAwMERBOTQyMkY4NzYKKzoxMEU2QjAwMDk2MzAwMDAwMDAwMDAwRjg5MEIwMDEwMDAwMDAwMEYwNkIKKzoxMEU2QzAwMDkyQjAwMTAwMDAwMDAwNDg4MEIyMDEwMDA0MDAyNzQ5MTgKKzoxMEU2RDAwMDgwMzIwMDAwMDEwMDAwNEJGMENEMDEwMDIwMDA5MjQ4ODQKKzoxMEU2RTAwMEUwQzkwMTAwNkMwMDAwNDA2MTk5MDEwMERFOTQyOEIxOEUKKzoxMEU2RjAwMDkyMzAwMDAwREE5NDIyNEM3NTdEMDAwMDA0MDAxMjQwMzQKKzoxMEU3MDAwMDkxQjAwMDAwNkMwMDAwNDA2MTk5MDEwMERFOTRBOEIxNTYKKzoxMEU3MTAwMDkwMzAwMDAwMDAwMDAwNDk4MEIyMDEwMDA0MDAyNzQ4NEEKKzoxMEU3MjAwMDgwMzIwMDAwRkYwMDAwNDg5Njg4MDEwMDAwMDAwMDRCODYKKzoxMEU3MzAwMDkwRDAwMTAwMDEwMDAwNEJGMENEMDEwMDIwMDAwMDQ4MDYKKzoxMEU3NDAwMEYwQzkwMTAwMDAwMDkyNDlFMEIxMDEwMDBDMDAyRDEwNTkKKzoxMEU3NTAwMDQ4QjEwMTAwRkYwNzAwMDg4MjhDMDEwMDA0MDBBMjVDQTAKKzoxMEU3NjAwMDgzN0MwMDAwRkYwNzAwRjAwMDhDMDEwMDA0MDBBMjVDMjUKKzoxMEU3NzAwMDAxN0MwMDAwMDQwMDIyNDAwMTZDMDAwMDAwMDBBMjQxNjYKKzoxMEU3ODAwMDAwRUMwMDAwRjA5NDIyMUEwMDZDMDAwMEM5OTQwMDAwMTQKKzoxMEU3OTAwMDM0MzAwMTAwMDAwMDAwNTA0OUMxMDEwMEVBOTRBMjQxNTgKKzoxMEU3QTAwMDIzNTAwMDAwMDAwMDgwNDA4MUIyMDEwMDBDMDAyRDEwQjkKKzoxMEU3QjAwMDQ4QjEwMTAwRkYwNzAwMTU4MjhDMDEwMDA0MDBBMjVDMzMKKzoxMEU3QzAwMDgzN0MwMDAwRkYwNzAwRjAwMDhDMDEwMDA0MDBBMjVDQzUKKzoxMEU3RDAwMDAxN0MwMDAwMDQwMDIyNDAwMTZDMDAwMDAwMDBBMjQxMDYKKzoxMEU3RTAwMDAwRUMwMDAwRkM5NDIyMEQwMDZDMDAwMEM5OTQwMDAwQjUKKzoxMEU3RjAwMDFBMzAwMTAwMDAwMDAwNTA0OUMxMDEwMEY2OTRBMjQxMDYKKzoxMEU4MDAwMDIzNTAwMDAwMDAwMDgwNDA4MUIyMDEwMDAxOTU4MzFFNkEKKzoxMEU4MTAwMDgwMzIwMDAwMDAwMDAwNDQxOTkwMDEwMDI0MDAyRDAxMDYKKzoxMEU4MjAwMDJDQjAwMTAwMjgwMDJERjAxNkIwMDEwMDIyMDAyREYwQzAKKzoxMEU4MzAwMDI2QjAwMTAwMTQwMDJGRjIwQ0IwMDEwMDA0MDBBMkYwNzkKKzoxMEU4NDAwMDE0NkMwMDAwMDQwMDIwMDExNDZDMDAwMDAwMDA4MDQwRTMKKzoxMEU4NTAwMEUxQjEwMTAwMzAwMDAwNDA5Nzk4MDEwMDYwOTcyRTQwMjAKKzoxMEU4NjAwMDgxQjIwMTAwMDAwMDAwNDBGMUIxMDEwMDBBOTVBMjQxMEYKKzoxMEU4NzAwMDk3NTAwMDAwNjQ5NzNFNDM5REUwMDEwMDAwMDA4MDQwRjcKKzoxMEU4ODAwMEUxQjEwMTAwNjQ5NzNFNDM5REUwMDEwMDAwMDA4MDBCNzAKKzoxMEU4OTAwMEU4QjEwMTAwNjQ5NzNGNDM5REUwMDEwMDAwMDAwMEYwRjMKKzoxMEU4QTAwMDE2QzAwMTAwMDAwMDgwNDBFMUIxMDEwMDY0OTczRjQzQzEKKzoxMEU4QjAwMDlERTAwMTAwMDAwMDAwRjQxNkIwMDEwMDAwMDA4MDQwNUYKKzoxMEU4QzAwMEUxQjEwMTAwNjAxNzNENDM5REUwMDEwMDEwMDA4MEExMEYKKzoxMEU4RDAwMDE2RTQwMTAwMDQwMEEyMDcxNjZDMDAwMDFBMDQwMDQwQjAKKzoxMEU4RTAwMDg5OTgwMTAwMTAwMDAwMEI4QUU0MDEwMDA5OTkwMDBEQ0QKKzoxMEU4RjAwMDhBMTQwMTAwMDBCNTAwMEQ0MkM5MDEwMDFEOTUzMDQ3ODIKKzoxMEU5MDAwMDE3MDQwMDAwMjA5NUEyMEJFNjdEMDAwMDAwMDA5MDQyNTUKKzoxMEU5MTAwMDgxQjAwMTAwMDBCNzAwMEQ0NkM5MDEwMDI0OTVBMjBCOEIKKzoxMEU5MjAwMEU2N0QwMDAwMDAwMDAwMEJFNjkxMDEwMDAwMDA5MDQxMzAKKzoxMEU5MzAwMDgxQjAwMTAwMDAwMDEwNDA4MUIyMDEwMDI1OTU0MDA3MjAKKzoxMEU5NDAwMDk2MzAwMDAwOUQwNDAwNDA4MTMyMDEwMDJGOTVBMjQ1QzEKKzoxMEU5NTAwMDk1N0MwMDAwMDE5NzNGNDE5NUUwMDEwMDAwMDAwMEYzMjUKKzoxMEU5NjAwMDk2QjAwMTAwMDAwMDAwNEVFNkIxMDEwMDQwOTczRTQwMjUKKzoxMEU5NzAwMDk3RTAwMTAwMDAwMDAwNEVFNkIxMDEwMDQwOTczRTQwRTQKKzoxMEU5ODAwMDlERTAwMTAwNDI5NTAwM0JFN0IxMDAwMDJGOTUzMDQwMkIKKzoxMEU5OTAwMDgxMzIwMDAwMzk5NUEyMEJFNjdEMDAwMDAwQjUwMDBEMjQKKzoxMEU5QTAwMDQ2QzkwMTAwMzU5NUEyMEJFNjdEMDAwMDAwMDAxMDQwMkQKKzoxMEU5QjAwMDgxQjIwMTAwMDAwMDk4NDI4MUIwMDEwMDAwQjcwMDBENTMKKzoxMEU5QzAwMDQ2QzkwMTAwMDAwMDAwMEJFNjkxMDEwMDAwMDAxMDQwNjQKKzoxMEU5RDAwMDgxQjIwMTAwMDAwMDk4NDE4MUIwMDEwMDA0MDAyMUEyMzEKKzoxMEU5RTAwMDk1MjAwMDAwMDAwMDEwNEE0NDgzMDEwMDAwOTczRTQxM0EKKzoxMEU5RjAwMDk1RTAwMTAwMDAwMDAwNEVGNkIxMDEwMDAwMDAwMDRFNUQKKzoxMEVBMDAwMEU2QjEwMTAwNDA5NzNFNDA5REUwMDEwMDAwMDAwMDNCNjAKKzoxMEVBMTAwMEU3QjEwMTAwMDAwMDAwNEE5MEIxMDEwMEZGRkYwMDA3Q0MKKzoxMEVBMjAwMDkyODkwMTAwMDAwMDk4NDA4MUIwMDEwMDExMDQwMDQwNkIKKzoxMEVBMzAwMDg5OTgwMTAwMDk5OTAwMDg4QTMwMDEwMDAzMDAwMDA4NDQKKzoxMEVBNDAwMDg2RjQwMTAwMDBCNzAwNDM0NkM5MDEwMDA3MDAwMDA4MzIKKzoxMEVBNTAwMDgyODgwMTAwMDQwMDIyMDg4MDMyMDAwMDA0MDAyMjQxNjQKKzoxMEVBNjAwMEU2N0QwMDAwNEE5NTQwMDg5NjMwMDAwMDlEMDQwMDQwNzUKKzoxMEVBNzAwMDgxMzIwMTAwNTg5NTIyNDU5NTdDMDAwMDUzOTUyMjVBMTkKKzoxMEVBODAwMDFGN0MwMDAwMTAwMDAwMEY5NkY0MDEwMDRGOTUzMTVGQ0QKKzoxMEVBOTAwMDk3MDQwMDAwMDQwMEEyNEI0ODdGMDAwMDAwMDAxMTRCQzcKKzoxMEVBQTAwMDQ4OTMwMTAwMDAwMDAwNEI2QUIxMDEwMDUzOTUzMDQwQ0IKKzoxMEVBQjAwMDgxMzIwMDAwMDQwMDIyNDFFNjdEMDAwMDAwMDAwMDQxOTgKKzoxMEVBQzAwMEU2ODEwMTAwMDAwMDEwNDA4MUIyMDEwMDAwMDA5ODQwODIKKzoxMEVBRDAwMDgxQjIwMTAwMDA5NzNGNDE5NUUwMDEwMDAwMDAwMEYzODIKKzoxMEVBRTAwMDk2QjAwMTAwNDA5NzNENDA5N0UwMDEwMDAwMDA2M0YzQkQKKzoxMEVBRjAwMDg4QjAwMTAwNjE5NUEyM0I4OTZDMDAwMDAwMDAwMDRBQ0IKKzoxMEVCMDAwMDkwQjEwMTAwMDEwMDAwQTY5MkIxMDEwMDA0MDBBMjRBRTgKKzoxMEVCMTAwMDQ0N0YwMDAwNjI5NTE4NEE0NDkzMDAwMDAwMDAxODQwQUEKKzoxMEVCMjAwMDgxQjIwMTAwM0YwNDAwNDA4OTk4MDEwMDE2MDAwMDEyRTQKKzoxMEVCMzAwMDhBRTQwMTAwMDk5OTAwNEI4QTE0MDEwMDMwMDAzOTQ1MkMKKzoxMEVCNDAwMDk3RTAwMTAwMDQwMEEyNUY1RjdDMDAwMDA0MDAyMjVFRTkKKzoxMEVCNTAwMDVGN0MwMDAwMUYwNDAwMkY3RUQ5MDEwMDA0MDBBNjQwNDYKKzoxMEVCNjAwMDgxMzIwMDAwNkU5NTIyNUExRjdDMDAwMDFGMDQwMDBGQTYKKzoxMEVCNzAwMDk4RDgwMTAwMDAwMDAwNEM1RTk0MDEwMDcwOTUwMDA1REIKKzoxMEVCODAwMDRBQjAwMDAwMUYwNDAwQTc1RTg0MDEwMDAwMDAwMDQwOUUKKzoxMEVCOTAwMDRCQjAwMTAwMDAwMDAwNUU1RjkwMDEwMDA0MDBBMjA4N0QKKzoxMEVCQTAwMDRFNkMwMDAwMDAwMDAwNTg2MUIxMDEwMDAwMDAwMDRCRjUKKzoxMEVCQjAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMDczOTUwMDQwREUKKzoxMEVCQzAwMDgxQjIwMDAwMzMwNDAwNDA4OTk4MDEwMDA5OTkwMDA3RDAKKzoxMEVCRDAwMDhBMzAwMTAwNzg5NTQwMDc5NjMwMDAwMDlEMDQwMDQwN0YKKzoxMEVCRTAwMDgxMzIwMTAwN0M5NTIyNDU5NTdDMDAwMDAwMDA5ODQwMTAKKzoxMEVCRjAwMDgxQjIwMTAwMDQwMEEyNEE0NDdGMDAwMDlCMDQwMDRBNDUKKzoxMEVDMDAwMDQ0MTMwMTAwMDA5NzNGNDE5NUUwMDEwMDAwMDAwMEYzMkMKKzoxMEVDMTAwMDk2QjAwMTAwNDA5NzNENDA5N0UwMDEwMDAwMDA2M0YzOEIKKzoxMEVDMjAwMDg4QjAwMTAwMzAwMDM4NDU5N0UwMDEwMDA0MDBBMjVGODEKKzoxMEVDMzAwMDFGN0MwMDAwMDQwMDIyNUUxRjdDMDAwMDA0MDAyMEFBNEMKKzoxMEVDNDAwMDBGNkMwMDAwMDAwMDAwNUYwRjkwMDEwMDAwMDAwMDU4RjIKKzoxMEVDNTAwMDYxQjEwMTAwMDAwMDAwNEI2MkIxMDEwMDg4OTVBODQwM0QKKzoxMEVDNjAwMDgxMzIwMDAwN0U5NUEyM0I4OTZDMDAwMDMwMDAzODQ1NUYKKzoxMEVDNzAwMDlERTAwMTAwMDAwMDk4NDA4MUIyMDEwMDA0MDAyMjA4REMKKzoxMEVDODAwMDgwMzIwMDAwMDMwMDAwMDg5NEY0MDEwMDAwQjcwMDRBM0QKKzoxMEVDOTAwMDQ2QzkwMTAwMDcwMDAwMDg5Njg4MDEwMDA0MDAyMjRCQzUKKzoxMEVDQTAwMEU2N0QwMDAwOTMwNDAwMTI5NDMwMDEwMDQzOTUwMDVBNjEKKzoxMEVDQjAwMDFGMDAwMTAwMDAwMDgwNUExRjkwMDEwMDExMDAwMDRBNEYKKzoxMEVDQzAwMEU2QzkwMTAwMzAwMDAwNEE4MENFMDEwMDA0MDAyNDQwNjMKKzoxMEVDRDAwMDgxMzIwMDAwMzQwMDJGNEY5NTg0MDEwMDAwMDAwMEYzQzIKKzoxMEVDRTAwMDk2QjAwMTAwMDEwMDYzNEI4NEM4MDEwMDAwMDBBMDQzRkUKKzoxMEVDRjAwMDg1NkMwMTAwMDAwMEUzNDA4NUIwMDEwMDMwMDAyRDQ0MjgKKzoxMEVEMDAwMDFGOTAwMTAwMzIwMDJERjIyQUIwMDEwMDA0MDAyNjQwQkQKKzoxMEVEMTAwMDgxMzIwMDAwMDQwMDIyRjIwMjMwMDAwMDFEOTQwMDEwMzUKKzoxMEVEMjAwMDMyMzAwMTAwMDQwMDIyMDA4MDMyMDAwMDA0MDAyMjQyNDAKKzoxMEVEMzAwMDE5N0MwMDAwMzIwMEEwNDBFNUIxMDEwMDAwMDAwMDQwNTUKKzoxMEVENDAwMDk3QjAwMTAwRjAwNzAwNDA5OTk4MDEwMDAwMDAwMDRBQzgKKzoxMEVENTAwMDAyQzAwMTAwMDAwMDAwNTAwM0QwMDEwMDAwMDAwMDQxOEIKKzoxMEVENjAwMDk3QzAwMTAwMDAwMEEzNEMwMkQwMDAwMEE5OTUwMDQwMEMKKzoxMEVENzAwMDgxQjIwMDAwMDAwMDAwQTgzNkIwMDEwMEJBOTUyMjQxMUYKKzoxMEVEODAwMDAzNTAwMDAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDUwNDIKKzoxMEVEOTAwMEYxQjEwMTAwNzAwMDAwMDNGMEM5MDEwMDAwMDAwMDQyNjEKKzoxMEVEQTAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEIyOTVBODAwM0QKKzoxMEVEQjAwMEUwMzEwMDAwMjM4MzAwODgxQ0IwMDAwMEM5OTQwMDQwQUIKKzoxMEVEQzAwMDgxMzIwMTAwN0M4MDAwMDM0MkM5MDEwMDA0MDAyMjQwMUUKKzoxMEVERDAwMEUxNkQwMDAwMDAwMDAwRjAwMEIwMDEwMEFEOTUwMDVDQTYKKzoxMEVERTAwMDAxODAwMDAwQzk5NDAwNDA4MTMyMDEwMDAwMDAwMDFCMzYKKzoxMEVERjAwMDEwQjEwMDAwNjgwMTJEMDY4MkIwMDEwMDAwMDAwMEYyOTEKKzoxMEVFMDAwMDgyQzAwMTAwMDA4MDAwMDM0NkM5MDEwMEJGOTQwMDQwOTkKKzoxMEVFMTAwMDgxMzIwMTAwRTg5NTIyNDAxMTZDMDAwMDAwMDA2ODA4NzIKKzoxMEVFMjAwMDM4OTYwMTAwM0EwNDAwNDA4OTk4MDEwMDA5OTkwMDA4QzkKKzoxMEVFMzAwMDhBMzAwMTAwRjAwNzAwNDE4MkNDMDEwMEJGOTVBQTQxNTEKKzoxMEVFNDAwMDNCNDAwMDAwMDAwMDAwRjgxMEIwMDEwMDAwMDAwMDVDMzIKKzoxMEVFNTAwMDExODAwMTAwMDQwMEEzNDgzQjZDMDAwMDAxMDAwMDFENkMKKzoxMEVFNjAwMDA0Q0MwMTAwRTY5NTI2NDYyMzMwMDAwMDA4MDAwMDAzOEMKKzoxMEVFNzAwMDEyQzgwMTAwMDQ4MDAwMDM5OEM4MDEwMDA0MDBBMjRDREQKKzoxMEVFODAwMDQyNkQwMDAwMDQwMEEyMDU0ODZEMDAwMDY0MDEyMEYwRkUKKzoxMEVFOTAwMEUwQjEwMTAwRTU5NTIyNDEwNTUwMDAwMDIwMDAwMDAzOEIKKzoxMEVFQTAwMDQ4QzkwMTAwMEMwMDAwRjg4NkM4MDEwMDAwMDAyMjQ0OTcKKzoxMEVFQjAwMEYxQjEwMTAwMDAwMDAwNDNGMEIxMDEwMDAwMDAwMDA5QzEKKzoxMEVFQzAwMEUwQjEwMTAwMDAwMDAwNDQ2MUIxMDEwMEEwMDAwMEE0MTUKKzoxMEVFRDAwMDYyREQwMTAwRDc5NUE4NDYxRjEwMDAwMEU0OTUyMjQxOEQKKzoxMEVFRTAwMDA1NTAwMDAwRTI5NUEyNDEyMzUwMDAwMDAwMDAwMEExNUYKKzoxMEVFRjAwMDFBQjAwMTAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwQTAKKzoxMEVGMDAwMDYyREQwMTAwREQ5NUE4NDYyMzMwMDAwMDIzODMwMDg4RTAKKzoxMEVGMTAwMDFDQjAwMDAwMTAwMDAwMDM0OEM5MDEwMDAwMDAwMDBERjMKKzoxMEVGMjAwMDQyQjEwMTAwMDAwMDAwNDQxM0MwMDEwMEQyOTUwMDUwMUUKKzoxMEVGMzAwMDQ5QzEwMDAwMDAwMDAwMDU0OEIxMDEwMDA0ODAwMDAzNDEKKzoxMEVGNDAwMDFBQzgwMTAwMDQwMEEyMDU0ODZEMDAwMDAwMDA4MDQwQkUKKzoxMEVGNTAwMDgxQjIwMTAwRTY5NTIyNDAzQjZDMDAwMDAwMDAwMEY4MDEKKzoxMEVGNjAwMDAwQjAwMTAwQzk5NDAwNUMwMTAwMDEwMEU4OTUwMDQxNzcKKzoxMEVGNzAwMDNCRDAwMDAwMDAwMDhENDc4MDMyMDEwMEIwMDAyRjVGQzEKKzoxMEVGODAwMDEzQjAwMTAwMDAwMDYwRjA4Q0MwMDEwMDdDMDAwMDQwNjQKKzoxMEVGOTAwMDQzOTkwMTAwMDQwMEEzRjA4QzZDMDAwMDAwMDA4MDQwNDUKKzoxMEVGQTAwMDgxQjIwMTAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4QTYKKzoxMEVGQjAwMDk0QjAwMTAwMDAwMDAwRjg4Q0IwMDEwMEY3OTU4Q0Y4QzcKKzoxMEVGQzAwMDhFMzAwMDAwMDAwMDAwNDQxOTkwMDEwMDA0MDAyMkY4NzcKKzoxMEVGRDAwMDE0MzAwMDAwMDAwMDAwRjgxNkIwMDEwMDAwMDAwMEY4MzYKKzoxMEVGRTAwMDI2QjAwMTAwMDgwMDJFRjgwQ0IwMDEwMDBDMDAyQTRBREYKKzoxMEVGRjAwMEUwQjEwMTAwMjgwMDAwMDBFMEM5MDEwMDEwMDAyMDFCNjIKKzoxMEYwMDAwMEUwQjEwMTAwMDQ5NjIwMEEwQzZDMDAwMDAwMDAwMEY4M0EKKzoxMEYwMTAwMDk0QjAwMTAwMDAwMDAwRjg5NkIwMDEwMDIwMDAyMEYwM0MKKzoxMEYwMjAwMEU0QjEwMTAwMTgwMDIwNEFFMEIxMDEwMDFDMDAyMDRCQUYKKzoxMEYwMzAwMEUwQjEwMTAwRUM5NTAwNDAxM0IwMDAwMDA0MDBBMjA1MEYKKzoxMEYwNDAwMDQ4NkQwMDAwMkMwMDJENDIxOTkwMDEwMDJFMDAyRkYzNzYKKzoxMEYwNTAwMDgyQjAwMTAwMDAwMDAwRjM5NkIwMDEwMDBCOTZBMkE1NUIKKzoxMEYwNjAwMDk3NkMwMDAwMDAwMDgwNDE5NUIwMDEwMDBFOTZBMjQwMTAKKzoxMEYwNzAwMDk3NkMwMDAwMDAwMDAwNDA4M0IwMDEwMDJEMDAyMDQwOEMKKzoxMEYwODAwMEU3QjEwMTAwMDAwMDYzNDE5N0MwMDEwMEQ0MDAzRTQxOTgKKzoxMEYwOTAwMDgzRTAwMTAwMDAwMDAwNDE4M0MwMDEwMDEzOTZBMEE1OTkKKzoxMEYwQTAwMDgzNkMwMDAwMDAwMDAwNDA4M0IwMDEwMDJDMDAyMDQxNzAKKzoxMEYwQjAwMEU2QjEwMTAwMTg5NjIyNDAxRjdDMDAwMDAwMDQwMDAwMDkKKzoxMEYwQzAwMDk4REMwMTAwMEIwMDAwNENFNEY1MDEwMDE5OTYwMDQwQUIKKzoxMEYwRDAwMDFGODAwMDAwMEIwMDAwMDBFNEY1MDEwMDFFMDQwMDQwNEEKKzoxMEYwRTAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDAwMDA4MDQwRTEKKzoxMEYwRjAwMDgxQjIwMTAwRDE5NDAwNDA4MTMyMDEwMDAwODAwMDAzMDAKKzoxMEYxMDAwMDQyQzkwMTAwMDQwMDIyNDBFMTZEMDAwMDA0ODAwMDAzQjgKKzoxMEYxMTAwMDQ0QzkwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDQwQkUKKzoxMEYxMjAwMEYxQjEwMTAwMDAwMDYwNDE4N0IwMDEwMDAwODAwMDEwRDMKKzoxMEYxMzAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDQ4ODYKKzoxMEYxNDAwMEYwQjEwMTAwMDAwMDAwNDlGMEIxMDEwMDAwMDAwMDAzMkYKKzoxMEYxNTAwMEUwQjEwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwOTUKKzoxMEYxNjAwMDYyREQwMTAwMDAwMEE4NUQwNTkwMDAwMDI5OTYwMDQwQzYKKzoxMEYxNzAwMDgxQjIwMDAwRDE5NDAwNDA4MTMyMDEwMDAwODAwMDAzODAKKzoxMEYxODAwMDQ0QzkwMTAwMDAwMDAwNDFGMEIxMDEwMDA0MDAyNjQwMjQKKzoxMEYxOTAwMDgxMzIwMDAwMDAwMDAwNDJGMEIxMDEwMDAwMDAwMDQwOTgKKzoxMEYxQTAwMEYxQjEwMTAwMDAwMDAwNDNGMEIxMDEwMDAwODAwMDEwNDcKKzoxMEYxQjAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDQ4MDYKKzoxMEYxQzAwMEYwQjEwMTAwMDAwMDAwNDlGMEIxMDEwMDAwMDAwMDAzQUYKKzoxMEYxRDAwMEUwQjEwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwMTUKKzoxMEYxRTAwMDYyREQwMTAwMDAwMEE4NUQwNTkwMDAwMDM5OTYwMDQwMzYKKzoxMEYxRjAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDA0MDA4MjBDRUEKKzoxMEYyMDAwMDgwMzIwMDAwMkQwMDAwNDA0Mzk5MDEwMDJFMDAyRkYzQjIKKzoxMEYyMTAwMDg0QjAwMTAwMDEwMDYzRjM5NkM4MDEwMDQzOTY5RjQxNEEKKzoxMEYyMjAwMDg1NTAwMDAwMDEwMDAwQTU4NUNDMDEwMDJEMDAyMDQyODIKKzoxMEYyMzAwMEU2QjEwMTAwMDQwMEEzQTU5NzZDMDAwMEQ0MDAzRDQxOTUKKzoxMEYyNDAwMDg1RTAwMTAwMEIwMDAwRjI5OEU0MDEwMDRBOTYyMjQwOUMKKzoxMEYyNTAwMDFGN0MwMDAwMDQwMDIyNUE5OTdDMDAwMDAwMDAwMDVBMjQKKzoxMEYyNjAwMDk5ODAwMTAwMDQwMEEyMDA5ODZDMDAwMDIwMDQwMDQwNzYKKzoxMEYyNzAwMDg5OTgwMTAwMDk5OTAwMDA4QTMwMDEwMDAwMDA4MDQwNEYKKzoxMEYyODAwMDgxQjIwMTAwMjEwNDAwNDA4OTk4MDEwMDA5OTkwMDAwMjEKKzoxMEYyOTAwMDhBMzAwMTAwMDQwMEEyMDA2QTA2MDAwMDVFMDEyRDAwMTEKKzoxMEYyQTAwMDgwQjAwMTAwNTU5NjUyNDM4MTYwMDAwMDAyMDAwMEYyRDgKKzoxMEYyQjAwMDgyRjQwMTAwNTY5NjAwNDE4MDk0MDAwMDAwMDAwMDVGMzcKKzoxMEYyQzAwMDgxOTAwMTAwMDAwMDAwNUU2MUIxMDEwMDAwMDAwMDQwN0IKKzoxMEYyRDAwMDYyQjEwMTAwMDAwMEE4NDA5NUIwMDAwMDU3OTY5RUJCQTcKKzoxMEYyRTAwMDgwMzIwMDAwNUM5NkEyNDAxRjdDMDAwMEM5OTQwMDQwNjAKKzoxMEYyRjAwMDgxQjIwMDAwMDAwMDgwNDE5NUIwMDEwMDA0MDAwMDE1QkIKKzoxMEYzMDAwMDQyQzkwMTAwMDAwMDAwNTQyQkMwMDEwMDAwMDAwMEZDQjUKKzoxMEYzMTAwMDI0QjAwMTAwMDAwMDAwRkMzOEIwMDEwMDAwMDAwMEZFMzUKKzoxMEYzMjAwMDNDQjAwMTAwMDAwMDAwRkUzQUIwMDEwMDcxOTY5QzE3NEQKKzoxMEYzMzAwMDgwMzIwMDAwNjY5NkEyNEExOTdDMDAwMDAwMDA4MDRDRDIKKzoxMEYzNDAwMDFGOTAwMTAwMEMwMDAwMUU5OEY0MDEwMDY1OTZBMjQ4NzEKKzoxMEYzNTAwMDk5NkMwMDAwMDAwMDAwMTU0MkIxMDEwMDY1OTZBMjhBNzgKKzoxMEYzNjAwMEYxNkQwMDAwMEMwMDAwMDEwMkNDMDEwMDAwMDAwMEZDNjcKKzoxMEYzNzAwMDNFQjAwMTAwMDEwMDAwRjQyOENDMDEwMENDMDAyRDA1QjYKKzoxMEYzODAwMDQ4QjEwMTAwNzA5NjIwRjAzRTZDMDAwMDAwMDAwMDRCNzgKKzoxMEYzOTAwMDFGOTAwMTAwMDAwMDAwNEMyQkMwMDEwMEJGMDAyRDA1OTQKKzoxMEYzQTAwMDQ4QjEwMTAwMDAwMDgwRjMzQUUwMDEwMDA0MDBBMjA1MkEKKzoxMEYzQjAwMDQ4NkQwMDAwMTAwMDAwMEM5NkY0MDEwMDA0MDBBMjA3NDQKKzoxMEYzQzAwMDk2NkMwMDAwMDAwMDJFNEIxOTkwMDEwMDA3MDAyQTBDREIKKzoxMEYzRDAwMEU0QjEwMTAwMDAwMDgwMDRFNkIxMDEwMDE4MDAwMDQwMjMKKzoxMEYzRTAwMDQzOTkwMTAwMUMwMDJERjAxNkIwMDEwMDIwMDAyREYwMDMKKzoxMEYzRjAwMDI2QjAwMTAwMEMwMDJGRjIwQ0IwMDEwMDAwMDBBMjA2QTQKKzoxMEY0MDAwMDE0RUMwMDAwODA5NjIyNDUxRjdDMDAwMDAwMDBBMzA2M0IKKzoxMEY0MTAwMDJBRUMwMDAwMDAwMDAwRjg5NEIwMDEwMDAwMDAwMEYwQTkKKzoxMEY0MjAwMDk2QjAwMTAwMEMwMDJENDA4MUIyMDEwMDAwMDAyQTRDNzIKKzoxMEY0MzAwMEUxQzEwMTAwMzAwMDAwMTA0OEM5MDEwMDBBMDAwMDQwOEQKKzoxMEY0NDAwMEYxOTkwMTAwMTgwMDAwMDVGMEM5MDEwMDAwMDAwMDRBMTAKKzoxMEY0NTAwMEYwQjEwMTAwMDAwMDAwNEJFMEIxMDEwMDAwMDAwMDQ3RTYKKzoxMEY0NjAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMDhBOTZBODVDRTEKKzoxMEY0NzAwMDFGMTAwMDAwMDAwMDgwMDU0OEIxMDEwMDA0MDBBMjk1QTMKKzoxMEY0ODAwMDAzNkMwMDAwMDAwMDJFMTA0OEIxMDEwMDQwMDAwMDAxOTQKKzoxMEY0OTAwMEYwQ0QwMTAwNDAwMDAwMDNGMEM5MDEwMDQwMDAwMDAwNzEKKzoxMEY0QTAwMEUwQzkwMTAwMDAwMDJFNTA0OUMxMDEwMDAwMDAwMDA2MjMKKzoxMEY0QjAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDk1OTY2MjQyMzUKKzoxMEY0QzAwMDYxMzEwMDAwMjAwMDAwMTA2MkREMDEwMDk2OTZBODQwMjYKKzoxMEY0RDAwMDgxMzIwMDAwMTAwMDAwMTA2MkM5MDEwMDk4OTZBODAwNTcKKzoxMEY0RTAwMEUwMzEwMDAwMDAwMEYyNDA4MUIyMDEwMDA0MDBBMjk1NkEKKzoxMEY0RjAwMDAzNkMwMDAwMDAwMDJFMTA0OEIxMDEwMDQwMDAwMDAxMjQKKzoxMEY1MDAwMEYwQ0QwMTAwNDAwMDAwMDNGMEM5MDEwMDQwMDAwMDAwMDAKKzoxMEY1MTAwMEUwQzkwMTAwMDAwMDJFNTA0OUMxMDEwMDAwMDAwMDA2QjIKKzoxMEY1MjAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMEEzOTY2MjQyQjYKKzoxMEY1MzAwMDYxMzEwMDAwMjAwMDAwMTA2MkREMDEwMEE0OTZBODQwQTcKKzoxMEY1NDAwMDgxMzIwMDAwQTAwMDAwQTQ2MkREMDEwMEE2OTZBODAwQTAKKzoxMEY1NTAwMEUwMzEwMDAwMDAwMEYyNDA4MUIyMDEwMDMwODAwMDRBM0EKKzoxMEY1NjAwMDQ0QzkwMTAwMDAwMDAwMDZGMUIxMDEwMEMwQTgzRDQ2RjkKKzoxMEY1NzAwMDBERTAwMTAwRkY3RjAwQTFGMDg5MDEwMDAyMDAwMDA5RjkKKzoxMEY1ODAwMDk2RjQwMTAwMDAwMDAwNDY5N0UwMDEwMDAwMDA2MEE4MkEKKzoxMEY1OTAwMDk3QzAwMTAwQjA5NjYzNDI2MTMxMDAwMDMwMDAwMDRBMUMKKzoxMEY1QTAwMDYyQzkwMTAwQjE5NkE4NDA4MTMyMDAwMDAwMDBGMzQwMUEKKzoxMEY1QjAwMDgxQjIwMTAwMDA5OTNGNDI5N0YwMDEwMEI1OTY2NTQwODUKKzoxMEY1QzAwMDgxMzIwMDAwQkQ5NjIyRjM3NDA2MDAwMDNGMDAwMEYzNzQKKzoxMEY1RDAwMDk0ODgwMTAwMDAwMDAwMDdFNzg1MDEwMDAwMDA3NTU1RDAKKzoxMEY1RTAwMDYxQjEwMTAwMDAwMDAwNEE2MkIxMDEwMDAwMDBBODQwQzIKKzoxMEY1RjAwMDgxQjIwMDAwQkE5NjAwNDA4MUIyMDAwMDAwMDBGNTQwRTAKKzoxMEY2MDAwMDgxQjIwMTAwMDAwMDAwQTgzNkIwMDEwMENEOTY4MjQxMTEKKzoxMEY2MTAwMDIzNDAwMDAwQzI5NkEyNDQxRjdDMDAwMDlFOTMwMDAxN0MKKzoxMEY2MjAwMDhDMzAwMTAwMjA4MDAwMTA0MkM5MDEwMEM4OTYyMjQwQTEKKzoxMEY2MzAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwRDQKKzoxMEY2NDAwMDYyREQwMTAwQzU5NkE4NDA4MTMyMDAwMDIzODMwMDg4NTYKKzoxMEY2NTAwMDFDQjAwMDAwMDAwMDAwNDEyM0IwMDEwMDAwMDAwMDEwQjkKKzoxMEY2NjAwMDMyQjAwMTAwQ0Q5NjIyNDExOTdDMDAwMEU3OTQwMDQzOUUKKzoxMEY2NzAwMDIzMzAwMTAwMDAwMDAwNDEyM0IwMDEwMENGOTZBMzE1MDQKKzoxMEY2ODAwMDBDNkMwMDAwRDA5NjAwMDYwNEIwMDAwMDAwMDAwMDE1Q0QKKzoxMEY2OTAwMDA0QjAwMTAwRDI5NjIwMDIxQTZDMDAwMDAwMDAwMDBEOTgKKzoxMEY2QTAwMDA0QjAwMTAwQTE5NzAwMDU0ODMxMDEwMEZEOTYyMjAyMzcKKzoxMEY2QjAwMDE0NTAwMDAwRDY5NkEyMDIyQTUwMDAwMEZEOTZBMjQ1RTIKKzoxMEY2QzAwMDFGN0MwMDAwRDg5NjIyMDIwQzUwMDAwMEUxOTYwMDAyMzgKKzoxMEY2RDAwMDE2QzAwMDAwRTA5NjIyNUMxRjdDMDAwMDMwODAwMDEwMDUKKzoxMEY2RTAwMDQyQzkwMTAwRTA5NjIyNDBFMzZEMDAwMDAwMDAwMDQ3OUYKKzoxMEY2RjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMERDOTZBODQwMEQKKzoxMEY3MDAwMDgxMzIwMDAwMjM4MzAwODgxQ0IwMDAwMDAwMDAwMDA1NDcKKzoxMEY3MTAwMDQ4QjEwMTAwNzk5NjAwNUMxRjAwMDEwMEZEOTYyMjE1OUEKKzoxMEY3MjAwMDgwMzIwMDAwMDAwMDAwNTAzM0MwMDEwMEZDOTZBMjAyQUQKKzoxMEY3MzAwMDFBNTAwMDAwRUQ5NjIyNDYxRjdDMDAwMDcwODAwMDAzRTYKKzoxMEY3NDAwMDQyQzkwMTAwMDAwMDAwNDYxRjgwMDEwMEVEOTYyMjQwRTIKKzoxMEY3NTAwMEUzNkQwMDAwMDAwMDAwNDI2MUIxMDEwMDQwMDAwMDEwQjQKKzoxMEY3NjAwMDYyREQwMTAwRTk5NkE4NDA4MTMyMDAwMDIzODMwMDg4MTEKKzoxMEY3NzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDBDODAwMDAzMkYKKzoxMEY3ODAwMDQyQzkwMTAwMDQwMDIyRjA4MDMyMDAwMDEwMDAwMEYwQTUKKzoxMEY3OTAwMDEwQzgwMTAwMkYwMDJGNUMxMTgwMDEwMDAwMDAwMDQ3RkQKKzoxMEY3QTAwMEU3OTEwMTAwRjAwNzAwNDAxQjk4MDEwMEJGOTYyMDE1NkIKKzoxMEY3QjAwMDFBNkMwMDAwNzAwMDAwMDM0OEM5MDEwMDAwMDAyMjUwQ0MKKzoxMEY3QzAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMEZGMDcwMDA4RTMKKzoxMEY3RDAwMEUwOEQwMTAwMDAwMDAwNDI2MUIxMDEwMEEwMDAwMEE0MjIKKzoxMEY3RTAwMDYyREQwMTAwRjk5NkE4NDYxRjEwMDAwMEJGOTYwMDA1RDMKKzoxMEY3RjAwMDQ4QjEwMDAwQkY5NjAwMDIxMEMwMDAwMEZGOTZBMjQ0NkUKKzoxMEY4MDAwMDFGN0MwMDAwOUU5MzAwMDE4QzMwMDEwMDAwMDAwMDFCNTMKKzoxMEY4MTAwMDEwQjEwMDAwMDA4MDAwMTA0NEM5MDEwMDBDMDAwMDQwM0QKKzoxMEY4MjAwMEYxOTkwMTAwMTAwMDAwMDhGMEM5MDEwMDAwMDAwMDE2NjUKKzoxMEY4MzAwMEYwQjEwMTAwMTAwMDAwMDNFMEM5MDEwMDA0MDBBMjVDNjcKKzoxMEY4NDAwMDFGN0MwMDAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwOTUKKzoxMEY4NTAwMDYyREQwMTAwMDAwMEE4NUMxRjkwMDAwMDA3OTcwMDQwRDcKKzoxMEY4NjAwMDgxQjIwMDAwMTcwMDAwRDBBMkM5MDEwMDAwMDBBMjQwMzAKKzoxMEY4NzAwMDI3RUMwMDAwMDAwMDAwMjAwMEIwMDEwMEM5OTQwMDQxMDYKKzoxMEY4ODAwMEEzNDEwMTAwMEI5NzAwNDEyN0QwMDAwMDM2MDQwMDQwM0YKKzoxMEY4OTAwMDg5OTgwMTAwMDk5OTAwNDA4QTMwMDEwMDEwMDAwMDA3OTIKKzoxMEY4QTAwMDk2RTQwMTAwMDAwMDAwNEI4MDk0MDEwMDAwMDAwMDU0MjkKKzoxMEY4QjAwMDYxQjEwMTAwMDA4MDAwNDA2MkREMDEwMDAwMDBBODQwNEQKKzoxMEY4QzAwMDgxQjIwMDAwMDQwMDE0QkI4MDMyMDAwMDE0OTcwMDQwOTUKKzoxMEY4RDAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMDZBOTcwMDQwNTQKKzoxMEY4RTAwMDJCMzAwMTAwQUMwMDJEMDYxNkMwMDEwMDkwMDAyREYwNTkKKzoxMEY4RjAwMDE2QzQwMTAwMUU5N0EwRjAxNjQ0MDAwMDAwMDAwMDQxNEQKKzoxMEY5MDAwMDE3QzAwMTAwMEUwMDAwQTI0NEM5MDEwMDAwMDA2Q0YwMDUKKzoxMEY5MTAwMDMwQjAwMTAwQUMwMDJENDA4N0IwMDEwMDAwMDA2Q0YwNTkKKzoxMEY5MjAwMDI4QjAwMTAwMjc5NzIyNEExOTdDMDAwMDAwMzAwMDQzQ0MKKzoxMEY5MzAwMDg2QzgwMTAwMDAzMDAwMEIxNkM4MDEwMDI3OTdBNDQwQkMKKzoxMEY5NDAwMDgxMzIwMDAwMDAwMDAwNDExN0MwMDEwMDRBOTcyMjA2RTIKKzoxMEY5NTAwMDgwMzIwMDAwMzU5N0EyMDYxNDZDMDAwMDMyOTcyMjQ4Q0UKKzoxMEY5NjAwMDE5N0MwMDAwMkM5N0EwNDExNzQwMDAwMDAwMDAwMDQxQzYKKzoxMEY5NzAwMDE3QzAwMTAwMDAwMDAwNDEzMUMwMDEwMDkwMDAyMDE4QjQKKzoxMEY5ODAwMEUwQjEwMTAwOEIwMDJENDgxOTgwMDEwMDA0MDBBMjQ1NjAKKzoxMEY5OTAwMEU3N0QwMDAwOEIwMDIwNDVFNzkxMDEwMDM1OTcwMDQwOEUKKzoxMEY5QTAwMDg3OTAwMDAwMDgwMDAwNDM4Njk4MDEwMDM1OTdBMDQ4MjIKKzoxMEY5QjAwMDE3NDAwMDAwMDAwMDAwNDExN0MwMDEwMEIwMDAwMDQwRTcKKzoxMEY5QzAwMDQzOTkwMTAwMTA1MDAwNDNGQ0M5MDEwMEFFOTcwMDMwN0MKKzoxMEY5RDAwMDgxMzAwMTAwMDAwMDAwNDBFNUIxMDEwMDQwOTcyMjRBNUIKKzoxMEY5RTAwMDE5N0MwMDAwMDgwMDAwQTI0NEM5MDEwMENDMDAyREFCMjYKKzoxMEY5RjAwMEY5QjEwMTAwMDAwMDAwQUIxN0MwMDEwMDNGOTdBMEYwNzMKKzoxMEZBMDAwMDE2NDQwMDAwMDAwMDAwNDExN0MwMDEwMDQ0OTc2NEYwNTQKKzoxMEZBMTAwMDgyQjAwMDAwQTQwMDAwNDA0Nzk5MDEwMDQ0OTdBMkYyODAKKzoxMEZBMjAwMDgwMzIwMDAwMDAwMDAwNDFFNUIxMDEwMDhDMDAyMDE4ODgKKzoxMEZBMzAwMEUwQjEwMTAwOTAwMDAwNDA0NTk5MDEwMDAwMDA2MDA2MUYKKzoxMEZBNDAwMDMwQzAwMTAwMDAwMDg2MEM4MEIyMDAwMDA0MDBBMjQ5MTIKKzoxMEZBNTAwMDE5N0MwMDAwQkMwMDJENDYxOTkwMDEwMEEwMDBBMEYyMDYKKzoxMEZBNjAwMEU0QjEwMTAwQjAwMDAwNDA0Mzk5MDEwMDEwNTAwMDQzOTAKKzoxMEZBNzAwMEZDQzkwMTAwQUU5NzAwMzA4MTMwMDEwMDAwMDBBMjRBQUQKKzoxMEZBODAwMDE5RkMwMDAwMDgwMDAwQTI0NEM5MDEwMENDMDAyREFCMDUKKzoxMEZBOTAwMEY5QjEwMTAwMDAwMDAwQUIxN0MwMDEwMDUzOTdBMEYwQkUKKzoxMEZBQTAwMDE2NDQwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDBFNEYwMEYKKzoxMEZBQjAwMDgyQjAwMTAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDQxMzQKKzoxMEZBQzAwMEYwQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDAwRUYKKzoxMEZBRDAwMEYwQjEwMTAwMDAwMDAwMTA2MkIxMDEwMDAwMDBBODFCOUQKKzoxMEZBRTAwMEUwQjEwMDAwNTg5NzAwNDA4MUIyMDAwMDAwRjAwMDBDMjcKKzoxMEZBRjAwMDdFODkwMTAwMDAwMEE2NEM5NTYwMDEwMDAwMDA4MDRBNEMKKzoxMEZCMDAwMDE4OTQwMTAwMDA4MDAwMTA0NEM5MDEwMDA0MDAyMjAxODMKKzoxMEZCMTAwMEYwMzEwMDAwMjAwMDAwNDBGMEM5MDEwMDAwMDAwMDE2OTQKKzoxMEZCMjAwMEYwQjEwMTAwMDAwMDAwNDM2MUIxMDEwMDIwMDAwMDEwQUQKKzoxMEZCMzAwMDYyREQwMTAwMDAwMEE4MTVFMEIxMDAwMDYzOTcwMDQwRkQKKzoxMEZCNDAwMDgxQjIwMDAwMTA4MDAwMDM0NEM5MDEwMDAwMDAwMDA2REIKKzoxMEZCNTAwMEYwQjEwMTAwMDAwMDAwMDFGMEIxMDEwMDAwMDBFODVGMTkKKzoxMEZCNjAwMDE3OTAwMTAwNzAwMDAwNDA0Mzk5MDEwMDdBMDEyRUZFQjkKKzoxMEZCNzAwMDkyQjAwMTAwOEIwMDJERjYxNkIwMDEwMDcwOTcyMjQzNjEKKzoxMEZCODAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDA0MDAwMEE2MUMKKzoxMEZCOTAwMDJBQjAwMTAwMjgwMDZFMDY4MkM4MDEwMDc0OTcyMjRBMkMKKzoxMEZCQTAwMDE5N0MwMDAwMDAwMDAwNDI0NUQxMDEwMDAwMDA2RTRDQUQKKzoxMEZCQjAwMDgzQzAwMTAwMDAwMDAwNDE5MkMwMDEwMDc1OTc0MzMwRUUKKzoxMEZCQzAwMDNEMDcwMDAwMDAwMDY2OUU4M0IwMDEwMDAwMDAxQjQxNUQKKzoxMEZCRDAwMDNEQzMwMTAwMDAwMDAwNDE5MkMwMDEwMDA2MDAwMEEyRTgKKzoxMEZCRTAwMDQ0QzkwMTAwMTAwMDAwNDk5OEY0MDEwMDdFOTcyNjMwQjYKKzoxMEZCRjAwMDkzMDQwMDAwN0U5NzkwNEM5MjQwMDAwMDAwMDAwMDQxNkEKKzoxMEZDMDAwMDkzQzAwMTAwRkZGRjgwNDlFQ0E5MDEwMDAwODAwMDEwQjMKKzoxMEZDMTAwMDQ0QzkwMTAwMDQwMDIyMDFGMDMxMDAwMDAwMDAwMDA5ODUKKzoxMEZDMjAwMEYwQjEwMTAwMDAwMDAwMThGMEIxMDEwMDIwMDAwMDEwNDgKKzoxMEZDMzAwMDYyREQwMTAwMDAwMEE4MTVFMEIxMDAwMDgzOTcwMDQwREMKKzoxMEZDNDAwMDgxQjIwMDAwMDQwMDIyMjA4MTZDMDAwMDA0MDAyMjQwRTgKKzoxMEZDNTAwMDgxNkMwMDAwOTU5NzIyNUY4MTdDMDAwMDkyOTdBMjQwMDIKKzoxMEZDNjAwMDE5N0MwMDAwMDAwMDAwNDAxOTkwMDEwMDAwMDAwMDU0QzEKKzoxMEZDNzAwMDYxQjEwMTAwMTAwMDAwMDc5NkU0MDEwMDAwMDAwMDRGOTAKKzoxMEZDODAwMDk3OTQwMTAwMDAwMDAwNEI2MkIxMDEwMDkyOTcyODQwNTgKKzoxMEZDOTAwMDgxMzIwMDAwMDQwMEEyNTQ3NzdEMDAwMDhFOTcwMDQwNUUKKzoxMEZDQTAwMDgxQjIwMDAwMjUwNDAwNDA4OTk4MDEwMDA5OTkwMDQwQjQKKzoxMEZDQjAwMDhBMzAwMTAwMDAwMEEyMjE4MTg0MDAwMDk4OTdBMjVGOTEKKzoxMEZDQzAwMDgxNkMwMDAwMDAwMEEyNDMxOTdDMDEwMDAwMDAwMDQzODkKKzoxMEZDRDAwMDE5OTAwMTAwMjUwNDAwNDA4OTk4MDEwMDA5OTkwMDQwMEQKKzoxMEZDRTAwMDhBMzAwMTAwMDAwMDAwNTQ2MUIxMDEwMDEwMDAwMDA3REIKKzoxMEZDRjAwMDk2RTQwMTAwMDAwMDAwNDA5Njk0MDEwMDAwMDAwMDRCRDMKKzoxMEZEMDAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMDA0MDBBMjU0Q0EKKzoxMEZEMTAwMDc3N0QwMDAwOUQ5NzAwNDA4MUIyMDAwMDA0MDAyMjA4MUEKKzoxMEZEMjAwMDgwMzIwMDAwMDQwMDIyMDI4MDMyMDAwMEE2OTdBMjRCMUQKKzoxMEZEMzAwMEZEN0YwMDAwQjQwNTAwMDI4MENFMDEwMDA0MDBBQTQwNEYKKzoxMEZENDAwMDgxMzIwMDAwMDA4MDAwMTk0NEM5MDEwMDA0MDAyMjAyMzEKKzoxMEZENTAwMEYwMzEwMDAwMDAwMDAwMEJGMEIxMDEwMDAwMDAwMDEzQzIKKzoxMEZENjAwMEYwQjEwMTAwMDAwMDAwNDM2MUIxMDEwMDIwMDAwMDE5NjIKKzoxMEZENzAwMDYyREQwMTAwMDAwMEE4MDhFMEIxMDAwMEFCOTcwMDQwODAKKzoxMEZEODAwMDgxQjIwMDAwMDQwMEEyMDU0ODZEMDAwMEIwMDAwMEExOEYKKzoxMEZEOTAwMDgwQ0UwMTAwMDQwMEE2NDA4MTMyMDAwMDdDMDAyREYwREUKKzoxMEZEQTAwMDg0QjAwMTAwMDIwMDAwRjA5OEY0MDEwMEI3OTcyMDRDRTUKKzoxMEZEQjAwMDg0NkMwMDAwODgwMDAwNDA0Mzk5MDEwMEI3OTcyMEYyNEUKKzoxMEZEQzAwMDg0NkMwMDAwMDAwMDAwNDA4NUIwMDEwMDk4MDAyRDE0RjQKKzoxMEZERDAwMDgyQjAwMTAwMDAwMDAwRjA5OEIwMDEwMEEzMDAyRDE0RDMKKzoxMEZERTAwMDk4RDAwMTAwQkM5NzIwNEM4NDZDMDAwMDAwMDAwMDRDQUYKKzoxMEZERjAwMDg0QjAwMTAwMDQwMEEyMzA4MTZDMDAwMDAwMDAwMEYzMTgKKzoxMEZFMDAwMDgwRTAwMTAwQzA5NzIzNDA4NDZDMDAwMDAwMDAwMDQwQTcKKzoxMEZFMTAwMDg0QjAwMTAwRDAwMDIwMTRFMEIxMDEwMDk4MDAyNTQyMTgKKzoxMEZFMjAwMDgwQjAwMTAwMDAwMDZFRjM4MEYwMDEwMDAwMDBBNjQyRTcKKzoxMEZFMzAwMDgyQzAwMDAwQzY5N0EwNDAxNjQwMDAwMDAwMDAwMDQxQUMKKzoxMEZFNDAwMDE3QzAwMTAwMDAwMDlGRjA4MkVDMDAwMDk4MDBBMDQxNjQKKzoxMEZFNTAwMEUwQjEwMTAwMDQwMEEyNUMxRjdDMDAwMDM3MDQwMDQwRjgKKzoxMEZFNjAwMDg5OTgwMTAwMDk5OTAwMDU4QTMwMDEwMDAwMDAwMDQyQ0MKKzoxMEZFNzAwMDYxQjEwMTAwMDAwMDJFMTA0OEIxMDEwMEE4MDEwMDQwNEUKKzoxMEZFODAwMEYxOTkwMTAwMDAwMDAwMDVGMEIxMDEwMDA5MDAwMDA3MzAKKzoxMEZFOTAwMDk2RTQwMTAwMDAwMDYwQTc5N0MwMDEwMDAwMDAwMDEwNzgKKzoxMEZFQTAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMEQxOTcwMDQwN0IKKzoxMEZFQjAwMDgxQjIwMDAwQTgwMDJEMUM4QUIwMDEwMDAwMDA5RkYwNTQKKzoxMEZFQzAwMDhBRDAwMDAwMDAwMEEyNDA4QkVDMDAwMDhBMDAyMDQwOTUKKzoxMEZFRDAwMEU3QjEwMTAwQjQwMDAwNDA0Nzk5MDEwMEE0MDAyRDQ1OUUKKzoxMEZFRTAwMEUwRDEwMTAwREY5NzlDMTc4MDMyMDAwMDA0MDAyMjRBMTUKKzoxMEZFRjAwMDE5N0MwMDAwQkUwMDJGQUI4M0IwMDEwMDNDOTgwMDE0QjkKKzoxMEZGMDAwMDgyNTAwMTAwRTQ5NzAwNDA4MUIyMDAwMEU0OTcyMkYyQTEKKzoxMEZGMTAwMDgyMzAwMDAwOEMwMDAwNDA0Mzk5MDEwMEU0OTc5RjFDNTAKKzoxMEZGMjAwMEUwNkQwMDAwQkUwMDAwNDA0Nzk5MDEwMDNDOTgwMDQwOTEKKzoxMEZGMzAwMDgxMzIwMTAwQTgwMDIwMUNFMEIxMDEwMDlDMDAyRDMwOUUKKzoxMEZGNDAwMDgxQjAwMTAwODgwMDJERjA4NEIwMDEwMDk0MDAyREYyRjIKKzoxMEZGNTAwMDg2QjAwMTAwRjg5NzIzRjA4NDZDMDAwMEVDOTcyMzkyQTAKKzoxMEZGNjAwMDg3NkMwMDAwQzkwNDAwQTY5NEIwMDEwMEVFOTcwMDQwMjEKKzoxMEZGNzAwMDgxQjIwMDAwMjAwMDAwQTY5NEIwMDEwMDYwODkwMDRBMTAKKzoxMEZGODAwMDk0OTgwMTAwRUU5NzY4NDA4MTMyMDAwMDA0MDAyMjQwRkUKKzoxMEZGOTAwMEJEN0QwMDAwMDAwMDAwNEFCMEIxMDEwMEJGMDAyRDQyNEQKKzoxMEZGQTAwMEIyQjEwMTAwOTAwMDJERjM4MEUwMDEwMEYzOTdENDQwM0UKKzoxMEZGQjAwMDgxMzIwMDAwMDAwMDc4REE4NEMwMDEwMEZEOTcyMzQwMDAKKzoxMEZGQzAwMDg0NkMwMDAwOTQwMDIwOURFMUIxMDEwMEZEOTcwMDQwODkKKzoxMEZGRDAwMDg0QjAwMDAwQkYwMDJENDM4NEMwMDEwMDkwMDAyREYzQzkKKzoxMEZGRTAwMDgwRTAwMTAwRkQ5NzIzNDA4NDZDMDAwMDk0MDAyMDlENzgKKzoxMEZGRjAwMEUxQjEwMTAwMDAwMDAwNDA4NEIwMDEwMDAxOThBMkYwQ0UKKzowMjAwMDAwMjEwMDBFQworOjEwMDAwMDAwMzg2QzAwMDA5QzAwMjA0MkUwQjEwMTAwMDAwMDAwNUY1RAorOjEwMDAxMDAwMTM5NDAxMDAwMDAwODA0NjE5ODAwMTAwOUMwMDIwNDJEQQorOjEwMDAyMDAwRTBCMTAxMDAzNzAwMDA0MDQzOTkwMTAwMDQwMDAwRjNGMworOjEwMDAzMDAwODBGNDAxMDAwRjAwMDBGMzgyODgwMTAwMDc5ODIzNDEzQgorOjEwMDA0MDAwODA2QzAwMDAwMDAwMDA1RjEzOTQwMTAwMDAwMDg5MEMyOAorOjEwMDA1MDAwODBCMjAwMDAwNDAwODYwQzgwMzIwMDAwQkMwMDAwNDAyQQorOjEwMDA2MDAwNDM5OTAxMDBBMDAwQTBGMkU0QjEwMTAwMDAwMDlGNDEwQgorOjEwMDA3MDAwMjRFQzAwMDAxMzk4QTY0MDgxMzIwMDAwMDAwMDlGNDI0QgorOjEwMDA4MDAwMzhFQzAwMDAxMzk4QTY0MDgxMzIwMDAwQjQwMDAwNDAxNAorOjEwMDA5MDAwNDM5OTAxMDAxNTk4QTNGMDNBNkMwMDAwMDQwMEE0NDBCNQorOjEwMDBBMDAwODEzMjAwMDAwMDAwODA0MDgxQjIwMTAwQjQwMDAwNDBCNQorOjEwMDBCMDAwNDM5OTAxMDAxOTk4MjJGMDNBNkMwMDAwQjQwMDIwMUQwOQorOjEwMDBDMDAwRTBCMTAxMDA4MDAwMkQ1RjEzOTQwMTAwMTk5ODIzRjAyNgorOjEwMDBEMDAwM0E2QzAwMDA4MDAwMjAxREUwQjEwMTAwQzAwMDIwMTIzOQorOjEwMDBFMDAwRTBCMTAxMDBDNDAwQTAxQ0UwQjEwMTAwMjcwNDAwNDAwMQorOjEwMDBGMDAwODk5ODAxMDAwOTk5MDA0MjhBMzAwMTAwMDQwMEEyMDU5NAorOjEwMDEwMDAwNDg2RDAwMDAwMDgwMDAwMzQ0QzkwMTAwMDAwMDAwNDI2NworOjEwMDExMDAwRTBCMTAxMDAxMjAwMDA0MDg3OTgwMTAwMjU5ODlGNDEzRQorOjEwMDEyMDAwMjQ2QzAwMDAwMDAwMDA0MThDQjAwMTAwMDAwMDAwMTJBRgorOjEwMDEzMDAwOENEMDAxMDAyNjk4MDA0MTI0QjAwMDAwMDAwMDAwNDA0RgorOjEwMDE0MDAwOERCMDAxMDA3Rjk4MDA0MDgxMzIwMTAwMDAwMDAwNDUyMQorOjEwMDE1MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMDAwMEE4NDAxNAorOjEwMDE2MDAwODFCMjAwMDAyODk4MDA0MDgxQjIwMDAwQjQ5NDAwNDBBMQorOjEwMDE3MDAwODEzMjAxMDAwMDAwMDAxNjgwQjIwMTAwMDAwMEE3MDhEMworOjEwMDE4MDAwODAzMjAxMDAzMjA0MDA0MDg5OTgwMTAwMDk5OTAwMDg3QQorOjEwMDE5MDAwOEEzMDAxMDAzMjk4QTI0MDk1NkMwMDAwQzk5NDAwNDA1QQorOjEwMDFBMDAwODEzMjAxMDAwMDgyMDBBNjA0QjAwMTAwMDAwMDAwNDA3RQorOjEwMDFCMDAwMkRCMDAxMDBBMDk4MkY0MDExQjAwMTAwMzAwNTAwNDE4MgorOjEwMDFDMDAwODlCMDAwMDBDQzAwMDBBMTgwQ0UwMTAwMDQwMEE2NDA1MAorOjEwMDFEMDAwODEzMjAwMDAwMDAwOUZGODNFRUMwMDAwMDAwMDlGMTJGQQorOjEwMDFFMDAwRTBFRDAwMDBDODAwMjBBQkUxQjEwMTAwQ0MwMEEwMUY5MQorOjEwMDFGMDAwRTBCMTAxMDAwNDAwQTIwNTQ4NkQwMDAwM0Y5OEEzNUYzNAorOjEwMDIwMDAwRTc2RDAwMDAwMDAwMDA0MUU3QzEwMTAwQTYwMDAwNDBDQQorOjEwMDIxMDAwNDc5OTAxMDA1Mzk4MjJGMjg2MzAwMDAwMDMwMDAwNDMwMgorOjEwMDIyMDAwODRGNDAxMDAwMTAwMDA0MTgwQ0MwMTAwQjgwMDJENDI5RgorOjEwMDIzMDAwODBEMDAxMDAwMDAwNjI0MDg2QzAwMTAwNDc5ODFGNDM0MworOjEwMDI0MDAwODAzMjAwMDA0ODk4QTI0MDg3NkMwMDAwMDAwMDYyNDFBNAorOjEwMDI1MDAwODdCMDAxMDA0Qzk4OUY0MDgwMzIwMDAwMDAwMDAwNDBCMQorOjEwMDI2MDAwODVCMDAxMDAwMDAwMDA0MDg0RDAwMTAwMDAwMDAwNDI4MQorOjEwMDI3MDAwODBCMDAxMDAwMDAwMDBGMjg4QjAwMTAwMDIwMDAwNDREQworOjEwMDI4MDAwODRGNDAxMDBCODAwMkU0MjgwRDAwMTAwMDAwMDYyNDBEQQorOjEwMDI5MDAwODhDMDAxMDA1Mjk4MUY0NDgwMzIwMDAwNTY5OEEyNDA0NgorOjEwMDJBMDAwODk2QzAwMDA1Njk4NjI0MTg5QjAwMDAwMDMwMDYyNDFFOQorOjEwMDJCMDAwODZFNDAxMDBCODAwMDA0MDQ1OTkwMTAwMDEwMDYyNDE1OAorOjEwMDJDMDAwODhFNDAxMDBBNDAwMjA0MEU1QjEwMTAwQTIwMDIwNDAyNAorOjEwMDJEMDAwRTdCMTAxMDBCQzAwMkU0Mzg3RjAwMTAwMDAwMDAwNDQ5QworOjEwMDJFMDAwODZDMDAxMDA1Qzk4MjA0Mzg3NkMwMDAwMDAwMDgwNDNCQQorOjEwMDJGMDAwRTVCMTAxMDA0MDAxMDA0MzgwQ0UwMTAwMDAwMEE0NDNBRAorOjEwMDMwMDAwRTQzMTAxMDA0MDAxRTI0MDg3OTgwMTAwMDQwMEEyMDVBOQorOjEwMDMxMDAwNDg2RDAwMDAwNDAwMjIwQTgwMzIwMDAwODgwMDJENDQ0RAorOjEwMDMyMDAwODFCMDAxMDA5MDAwMkRGMjJFQjAwMTAwOUMwMDJERjA1NAorOjEwMDMzMDAwODZCMDAxMDA5MDAwMkRGMDgyQjAwMTAwQkEwMDJERjBDRgorOjEwMDM0MDAwOThCMDAxMDA2Qjk4QTIxMjk4NkMwMDAwQkMwMDJERjJDRQorOjEwMDM1MDAwOThCMDAxMDA2Qjk4QTBGMjk4NkMwMDAwMDAwMDAwMTdBNAorOjEwMDM2MDAwODJCMDAxMDA5QzAwMjA0MUUwQjEwMTAwQjQwMDJEMTJEOAorOjEwMDM3MDAwODZEMDAxMDA2RTk4QTM0MUUwNkQwMDAwNkY5ODAwRjBGOAorOjEwMDM4MDAwODRCMDAwMDAwMDAwMDA0MTg0QjAwMTAwODAwMDJENDNEMworOjEwMDM5MDAwODREMDAxMDA3Mjk4OUY0MjgwMzIwMDAwMDAwMDAwNDAyQgorOjEwMDNBMDAwODVCMDAxMDA3NDk4QTM0MjE0NkMwMDAwNzU5ODAwMEE4RgorOjEwMDNCMDAwMENCMDAwMDAwMDAwMDA0MjBDQjAwMTAwNzc5OEEwMTdCQworOjEwMDNDMDAwMEM2QzAwMDAwMDAwODAxNzBDQjAwMTAwN0M5ODIyNDBFQgorOjEwMDNEMDAwMEQ2QzAwMDAwMDAwQTAwQTBDRUMwMDAwMDEwMDAwRjAxMQorOjEwMDNFMDAwODJGNDAxMDA3Qzk4QTA0MTBDNkMwMDAwMDAwMEEyRjA5NworOjEwMDNGMDAwODAzMjAxMDAyOTAwMDA0MDg5OTgwMTAwMDk5OTAwNDBERAorOjEwMDQwMDAwODEzMjAxMDAwMDAwODA0MDgxQjAwMTAwRDE5NDAwNDBBMQorOjEwMDQxMDAwODEzMjAxMDAwNDAwMjIwMzgwMzIwMDAwMDQ4MDAwMDNDNgorOjEwMDQyMDAwNDRDOTAxMDAwMDAwMDA0NkYwQjEwMTAwMDAwMDAwNDA5NgorOjEwMDQzMDAwRjFCMTAxMDAwMDAwNjA0MTg3OTQwMTAwMDA4MDAwMTBDQworOjEwMDQ0MDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwNDg2MworOjEwMDQ1MDAwRjBCMTAxMDAwMDAwMDA0OUYwQjEwMTAwMDAwMDAwMDMwQworOjEwMDQ2MDAwRTBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMTA3MgorOjEwMDQ3MDAwNjJERDAxMDAwMDAwQTg1RDA1OTAwMDAwOEI5ODAwNDAzRgorOjEwMDQ4MDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwMTAwMDAwMENCRAorOjEwMDQ5MDAwOTZGNDAxMDAwNDAwQTIwNzk2NkMwMDAwMDAwMDJFNEJBOQorOjEwMDRBMDAwMTk5MDAxMDAwNTAwMkEwQ0U0QjEwMTAwMDAwMDgwMDQ0RAorOjEwMDRCMDAwRTZCMTAxMDAzRTA0MDA0MDg5OTgwMTAwMDk5OTAwMDg1NgorOjEwMDRDMDAwOEEzMDAxMDA5Njk4NDU0ODYxMzEwMDAwMDAxMDAwMDgwQworOjEwMDREMDAwNjJERDAxMDA5Qzk4Mjg0MDg3MzAwMDAwOTc5ODIyNDhGMAorOjEwMDRFMDAwNzc3RDAwMDAwNDAwMjI0MDI3NkMwMDAwMEE5NzFENDYxQgorOjEwMDRGMDAwODdCMDAwMDA5Rjk4MjI1RjExN0MwMDAwMDQwMDIyMTU0NQorOjEwMDUwMDAwNjIzMTAwMDA5RDk4QTg0MDgxMzIwMDAwMDAwMDlENDBBQgorOjEwMDUxMDAwODFCMjAxMDAwMDAwMDA0MDQ5QjEwMTAwMDAxNDJGNENERAorOjEwMDUyMDAwODNCMDAxMDAwMDAwMDA0MEYxQjEwMTAwQTI5OEEyNDE5NworOjEwMDUzMDAwODM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDAwMDAwNDBCNAorOjEwMDU0MDAwNDlCMTAxMDAzMDAwMDA0MEExOTkwMTAwMDAwMDAwNDBDNQorOjEwMDU1MDAwOTNCMDAxMDAwMDAwMDA0MDFGQjAwMTAwRjY5ODAwNDk3MAorOjEwMDU2MDAwOTYzMDAxMDAwNzAwMDA0OTA2RTQwMTAwMDAzOTAwMDM0RAorOjEwMDU3MDAwMDZDODAxMDAwMDAwMDA0MDA1QjAwMTAwMjAwMDAwRDBDNgorOjEwMDU4MDAwQTBDOTAxMDAwMDAwMDA0MTkzQzAwMTAwQTk5OEEwNTQzNworOjEwMDU5MDAwOTM2QzAwMDAwMDAwMkUwNTk3QjAwMTAwMDA4MDAwNDAyMQorOjEwMDVBMDAwNDk5OTAxMDAwMDAwMDA0MEUxQjEwMTAwMDAwMjAwQTJGMQorOjEwMDVCMDAwNDRDOTAxMDBCMjk4QTI0MTk3NTAwMDAwMDAwMDAwMjBGOQorOjEwMDVDMDAwNDlCMzAxMDBGQzk4MDA0MDQ5MzEwMTAwMDg5NTAwNDAwMgorOjEwMDVEMDAwODEzMjAxMDAwMEI1MkUwODk3QjAwMTAwMDAwMDAwNDBGNAorOjEwMDVFMDAwRjFCMTAxMDBCOTk4QTI0MTk3NTAwMDAwMTgwMDAwNDBGNQorOjEwMDVGMDAwOTc5ODAxMDAwMDk3MkU0MDgxQjIwMTAwMDAwMDAwNDA1MgorOjEwMDYwMDAwRjFCMTAxMDBCRDk4QTI0MTk3NTAwMDAwMDAwMDAwNDBFOAorOjEwMDYxMDAwNDlCMTAxMDA0MDE4MkUwNTk3QjAwMTAwMDAwMDAwNDBDQworOjEwMDYyMDAwRjFCMTAxMDBDMTk4QTI0MTk3NTAwMDAwNTc5NTIwNDBCOAorOjEwMDYzMDAwRTdCMTAxMDAzMDk0MDA0MDQ1OTkwMTAwNjQwMDAwNDA5QQorOjEwMDY0MDAwRTU5OTAxMDA1Njk1MjA0MEU3QjEwMTAwQjg5NDIwNDE5QQorOjEwMDY1MDAwRTVCMTAxMDBCQTk0MjA0MUU1QjEwMTAwOTg5NDAwNDA1MQorOjEwMDY2MDAwNDU5OTAxMDAwMjAwMDA0MDk3OTgwMTAwMDAwMDAwNDBGOQorOjEwMDY3MDAwRjFCMTAxMDBDQjk4QTI0MTk3NTAwMDAwMDAwMDAwNDA2QQorOjEwMDY4MDAwOTdCMDAxMDAwMDAwMDA0MDZGQjEwMTAwMDAwMDAwNEI3NgorOjEwMDY5MDAwNjhCMTAxMDBDRjk4ODU0MTk3NDAwMDAwODAwNDAwNDA3OAorOjEwMDZBMDAwODEzMjAxMDAwMDAwMDA0MDM5QjMwMTAwMDAwMDAwNDAyOQorOjEwMDZCMDAwMzdCMzAxMDAwMDAwMDA0MDM1QjMwMTAwMDAwMDAwNDBFNgorOjEwMDZDMDAwMzNCMzAxMDAwMDAwMDA0MDQxQjMwMTAwMDAwMDAwNDBDRQorOjEwMDZEMDAwM0ZCMzAxMDBFRTA1MDA0MDI1OUIwMTAwNDIwMDAwNDBCMQorOjEwMDZFMDAwNEI5QjAxMDAwMDAwMDA0MDJGQjMwMTAwMDAwMDAwNDBDMAorOjEwMDZGMDAwMkRCMzAxMDAwMDAwMDA0MDQ3QjMwMTAwMDAwMDAwNDA5RQorOjEwMDcwMDAwNDNCMzAxMDA2MDAwMDA0MDJCOUIwMTAwMDAwMDAwNTQzNworOjEwMDcxMDAwRUY5MzAxMDAwMDAwMDA1NUYxOTMwMTAwRkZGRjAwQTVEOQorOjEwMDcyMDAwM0M4QjAxMDAwMDAwMDAyQzVCQjMwMTAwMDAwMDAwMkM5QQorOjEwMDczMDAwNDVCMzAxMDAwMDAwMDA0MDU5QjMwMTAwMDAwMDAwNDAzMworOjEwMDc0MDAwNTdCMzAxMDAwMDAwMDA0MDI3QjMwMTAwMDAwMDAwNDA0MworOjEwMDc1MDAwNTNCMzAxMDBFQjk4QTI1MEZEN0YwMDAwRUI5OEEyNTEyQgorOjEwMDc2MDAwRkQ3RjAwMDBFQzk4MDA0MDFEQjMwMDAwNTA0NjAwNDBBMworOjEwMDc3MDAwMUQ5QjAxMDAwMEMwMDBBNjg4QjMwMTAwRkYzRjAwQTYzQQorOjEwMDc4MDAwM0FCMzAxMDAwMEMwMDA5RDNCOUIwMTAwQjQwNTAwNDA0RQorOjEwMDc5MDAwMjM5QjAxMDAwMDAwMDA0MDREQjMwMTAwMDgwQTAwQTZBMQorOjEwMDdBMDAwMTRCMzAxMDAwMTAxMDA4QTE1OUIwMTAwMDAwMDAwMjAyNAorOjEwMDdCMDAwODdCMzAxMDAwMDgwMDBBNjU2QjEwMTAwMDAwMDgwNUVGMgorOjEwMDdDMDAwNTdCNTAxMDAxODAwMDA0QjIwRTQwMTAwMDYwMDAwNEI2MworOjEwMDdEMDAwOTZFNDAxMDAwMDQzMDA0Qjk2QzgwMTAwMTgwMDAwMTA4OQorOjEwMDdFMDAwMjBEQzAxMDAwMDAwMDA0QjIwOTQwMTAwMDAwMDgwNTczNQorOjEwMDdGMDAwMjE5MDAxMDAwMDk5MkUwQTk3QjAwMTAwMDAwMDAwNDBFRQorOjEwMDgwMDAwRjFCMTAxMDBGRDk4QTI0MTk3NTAwMDAwMDAwMzAwNDBBMworOjEwMDgxMDAwOTc5ODAxMDAwMEE5MDA0MDQ1OTkwMTAwMDAwMDAwNDBBMAorOjEwMDgyMDAwRjFCMTAxMDAwMTk5QTI0MTk3NTAwMDAwMzAwMDAwNDA1MQorOjEwMDgzMDAwOTc5ODAxMDAwMDAwMDA1NTYxQjEwMTAwMDAwMDAwNEJENQorOjEwMDg0MDAwNjJCMTAxMDAwNTk5QTg0MDgxMzIwMDAwMDU5OUEyNDFEQQorOjEwMDg1MDAwOTc1MDAwMDAwMDAwODA0MDgxQjIwMTAwMTAwMDAwNEU1RgorOjEwMDg2MDAwOThFNDAxMDAwMDAwMDAwNzk4OTQwMTAwMDAwMDAwNDM5NAorOjEwMDg3MDAwOTlFMDAxMDAwMDAwMDA4MDk4OTQwMTAwMDAwMDAwNDgwOQorOjEwMDg4MDAwOTlFMDAxMDAwMDAwMDA0Qzg4OTQwMTAwMEY5OTZBNDAzMworOjEwMDg5MDAwODEzMjAwMDAxMjk5MjI0Rjc3N0QwMDAwRjAwNDAwNDA2MQorOjEwMDhBMDAwODEzMjAxMDAwMDAwMDA0RjYxQjEwMTAwMDAwMDAwNDRFRQorOjEwMDhCMDAwNjJCMTAxMDAxMzk5QTg0MDgxMzIwMDAwMUE5OTIyNEFCRQorOjEwMDhDMDAwODk3QzAwMDAxODk5MjI0Rjc3N0QwMDAwRjAwNDAwNDBEOQorOjEwMDhEMDAwODEzMjAxMDAwMDAwMDA0NTYyQjEwMTAwMTg5OUE4NDA3MgorOjEwMDhFMDAwODEzMjAwMDAwMDAwRkE0MDgxQjIwMTAwMDAwMDgwNDAyNworOjEwMDhGMDAwODFCMjAxMDAwNDAwQTI1QTFGN0MwMDAwMTAwMDAwMEYwQQorOjEwMDkwMDAwOThGNDAxMDAwNDAwQTI1Rjk5MDQwMDAwMDAwMDgwNDBGOAorOjEwMDkxMDAwODFCMjAxMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDA2QgorOjEwMDkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwMDkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMDk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMDk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMDk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMDk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMDk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMDk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMDlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMDlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMDlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMDlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMDlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMDlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMEEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwMEExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwMEEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMEEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwMEE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMEE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMEE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwMEE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwMEE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwMEE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwMEFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwMEFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwMEFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwMEFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwMEFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwMEFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwMEIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMEIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwMEIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwMEIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwMEI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwMEI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwMEI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwMEI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwMEI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwMEI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwMEJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwMEJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwMEJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwMEJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwMEJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwMEJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwMEMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMEMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMEMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwMEMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwMEM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwMEM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwMEM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwMEM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwMEM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwMEM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwMENBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwMENCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMENDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMENEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMENFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMENGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMEQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMEQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMEQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMEQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMEQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMEQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMEQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMEQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMEQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMEQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMERBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMERCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMERDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMEREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMERFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMERGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMEUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMEUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMEUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMEUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMEU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMEU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMEU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMEU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMEU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMEU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMEVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMEVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMEVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMEVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMEVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMEVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMEYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMEYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMEYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMEYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMEY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMEY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMEY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMEY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMEY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMEY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMEZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMEZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMEZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMEZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMEZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMEZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMTAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMTAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMTAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMTAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMTA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMTA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMTA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMTA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMTA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMTA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMTBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMTBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMTBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMTBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMTBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMTBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMTEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMTExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMTEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMTEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMTE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMTE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMTE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMTE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMTE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMTE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMTFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMTFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMTFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMTFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMTFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMTFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMTIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMTIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMTIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMTIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMTI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMTI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMTI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMTI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMTI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMTI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMTJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMTJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMTJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMTJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMTJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMTJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMTMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMTMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMTMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMTMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMTM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMTM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMTM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMTM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMTM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMTM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMTNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMTNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMTNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMTNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMTNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMTNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMTQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMTQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMTQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMTQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMTQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMTQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMTQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMTQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMTQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMTQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMTRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMTRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMTRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMTREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMTRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMTRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMTUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMTUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMTUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMTUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMTU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMTU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMTU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMTU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMTU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMTU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMTVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMTVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMTVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMTVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMTVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMTVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMTYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMTYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMTYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMTYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMTY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMTY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMTY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMTY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMTY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMTY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMTZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMTZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMTZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMTZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMTZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMTZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMTcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMTcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMTcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMTczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMTc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMTc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMTc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMTc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMTc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMTc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMTdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMTdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMTdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMTdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMTdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMTdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMTgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMTgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMTgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMTgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMTg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMTg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMTg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMTg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMTg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMTg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMThBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMThCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMThDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMThEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMThFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMThGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMTkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMTkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwMTkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMTkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMTk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMTk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMTk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMTk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMTk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMTk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMTlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMTlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMTlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMTlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMTlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMTlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMUEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwMUExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMUEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwMUEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMUE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMUE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwMUE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwMUE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwMUE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwMUE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwMUFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwMUFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwMUFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwMUFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwMUFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwMUFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwMUIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwMUIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwMUIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwMUIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwMUI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwMUI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwMUI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwMUI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwMUI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwMUI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwMUJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwMUJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwMUJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwMUJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwMUJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwMUJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMUMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMUMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwMUMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwMUMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwMUM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwMUM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwMUM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwMUM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwMUM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwMUM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwMUNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMUNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMUNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMUNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMUNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMUNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMUQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMUQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMUQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMUQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMUQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMUQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMUQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMUQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMUQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMURBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMURCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMURDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMUREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMURFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMURGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMUUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMUUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMUUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMUUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMUU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMUU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMUU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMUU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMUU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMUU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMUVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMUVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMUVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMUVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMUVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMUVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMUYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMUYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMUYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMUYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMUY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMUY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMUY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMUZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMUZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMUZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMUZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMUZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMUZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMjAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMjAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMjAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMjAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMjA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMjA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMjA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMjA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMjA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMjA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMjBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMjBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMjBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMjBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMjExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMjEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMjEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMjE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMjE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMjE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMjE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMjE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMjE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMjFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMjFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMjFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMjFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMjFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMjFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMjIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMjIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMjIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMjIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMjI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMjI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMjI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMjI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMjI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMjI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMjJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMjJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMjJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMjMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMjMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMjMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMjMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMjM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMjM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMjM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMjM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMjM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMjM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMjNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMjNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMjNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMjNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMjQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMjQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMjQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMjQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMjQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMjQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMjQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMjRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMjRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMjRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMjREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMjRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMjRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMjUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMjUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMjUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMjUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMjU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMjU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMjU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMjU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMjU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMjU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMjVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMjVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMjVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMjVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMjYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMjYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMjYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMjY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMjY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMjY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMjZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMjZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMjZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMjZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMjZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMjZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMjcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMjcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMjcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMjczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMjc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMjc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMjc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMjdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMjdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMjdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMjdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMjgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMjgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMjgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMjg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMjg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMjg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMjg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMjg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMjg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMjhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMjhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMjhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMjhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMjhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMjhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMjkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwMjkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMjkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMjkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMjk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMjk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMjk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMjk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMjlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMjlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMjlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMkExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwMkEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMkEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMkE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwMkE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwMkE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwMkE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwMkE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwMkE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwMkFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwMkFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwMkFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwMkFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwMkFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwMkFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwMkIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwMkIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwMkIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwMkIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwMkI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwMkI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwMkI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwMkI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwMkI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwMkI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwMkJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwMkJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwMkJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwMkJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwMkJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMkJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwMkMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwMkMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwMkMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwMkMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwMkM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwMkM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwMkM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwMkM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwMkM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwMkM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwMkNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwMkNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwMkNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwMkNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMkQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwMkQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwMkQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwMkQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwMkQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwMkQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwMkQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwMkQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwMkQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwMkRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwMkRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwMkRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwMkREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwMkRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwMkRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMkUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwMkUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwMkUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwMkUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwMkU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwMkU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwMkU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwMkU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMkU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwMkU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwMkVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwMkVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwMkVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwMkVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwMkVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwMkVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwMkYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwMkYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwMkYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwMkYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMkY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwMkY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwMkY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMkY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwMkZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwMkZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwMkZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwMkZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwMkZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwMkZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwMzAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwMzAxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjEwMzAyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMgorOjEwMzAzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMgorOjEwMzA0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MgorOjEwMzA1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MgorOjEwMzA2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MgorOjEwMzA3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MgorOjEwMzA4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MgorOjEwMzA5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MgorOjEwMzBBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMgorOjEwMzBCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMgorOjEwMzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMzBEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMzBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMzBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMgorOjEwMzEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMQorOjEwMzExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMQorOjEwMzEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMQorOjEwMzEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMQorOjEwMzE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MQorOjEwMzE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MQorOjEwMzE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MQorOjEwMzE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MQorOjEwMzE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MQorOjEwMzE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMzFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMQorOjEwMzFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMQorOjEwMzFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMQorOjEwMzFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMQorOjEwMzFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwMzFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMzIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMAorOjEwMzIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMAorOjEwMzIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMAorOjEwMzIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwMzI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MAorOjEwMzI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MAorOjEwMzI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MAorOjEwMzI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MAorOjEwMzI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MAorOjEwMzI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMzJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMzJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMzJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMAorOjEwMzJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMAorOjEwMzJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMAorOjEwMzJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMAorOjEwMzMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwMzMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwMzMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwMzMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwMzM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwMzM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwMzM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwMzM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwMzM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwMzM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwMzNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwMzNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwMzNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwMzNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMzNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMzNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwMzQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwMzQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwMzQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwMzQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwMzQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMzQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwMzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMzQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwMzRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwMzRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwMzRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwMzREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwMzRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMzRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMzUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwMzUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwMzUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwMzUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwMzU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwMzU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwMzU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwMzU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwMzU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwMzU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMzVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMzVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwMzVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwMzVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMzVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMzYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwMzYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwMzYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwMzY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwMzY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMzY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMzY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMzY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwMzY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwMzZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMzZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwMzZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwMzZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwMzZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwMzZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMzcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwMzcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwMzcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMzczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwMzc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwMzc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMzc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMzc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMzc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMzc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMzdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMzdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwMzdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwMzdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMzdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMzdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwMzgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMzgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMzgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwMzgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwMzg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMzg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwMzg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwMzg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwMzg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwMzg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwMzhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwMzhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwMzhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwMzhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwMzhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMzhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMzkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwMzkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwMzkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwMzkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwMzk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwMzk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwMzk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMzk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMzk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwMzk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwMzlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMzlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMzlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwMzlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwMzlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMzlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwM0EwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwM0ExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwM0EyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwM0EzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwM0E0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwM0E1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwM0E2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwM0E3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwM0E4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwM0E5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwM0FBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwM0FCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwM0FDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwM0FEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwM0FFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwM0FGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwM0IwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwM0IxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwM0IyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwM0IzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwM0I0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwM0I1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwM0I2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwM0I3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwM0I4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwM0I5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwM0JBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwM0JCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwM0JDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwM0JEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwM0JFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwM0JGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwM0MwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwM0MxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwM0MyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwM0MzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwM0M0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwM0M1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwM0M2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwM0M3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwM0M4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwM0M5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwM0NBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwM0NCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwM0NDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwM0NEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwM0NFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwM0NGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwM0QwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwM0QxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwM0QyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwM0QzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwM0Q0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwM0Q1MDAwODFCMjAwMDBBRTlGMDA4ODlBQjAwMDAwQUU5RjAwODgzQworOjEwM0Q2MDAwOUFCMDAwMDBBRTlGMDA4ODlBQjAwMDAwQUU5RjAwODgxNQorOjEwM0Q3MDAwOUFCMDAwMDBBRTlGMDA4ODlBQjAwMDAwMDAwMDAwODg1MgorOjEwM0Q4MDAwOUFCMDAxMDBBRTlGNDE0MDgxMzIwMDAwQjI5RjIyNDBCNAorOjEwM0Q5MDAwN0I2RjAwMDAwMDAwMTk0MDgxQjIwMTAwQUU5RjAwNDAxRgorOjEwM0RBMDAwODFCMjAwMDAwMDAwMTk0MTdCQjMwMTAwMDAwMDAwQTRCMworOjEwM0RCMDAwQzRCMzAxMDAwMDAwMDBBMUM2QjMwMTAwMDAwMDJGQTI5RgorOjEwM0RDMDAwQzhCMzAxMDAwODE0MDA0MDQ5OTkwMTAwQTg5RjAwNERBNAorOjEwM0REMDAwOUFDQzAxMDBCQjlGMjY0MDgxMzIwMDAwMDAwMDAwNENCRAorOjEwM0RFMDAwNDlDMTAxMDBCOTlGQTI0MTlCNTAwMDAwQkY5RjgwODA0NAorOjEwM0RGMDAwODAzMjAwMDAwMDAwNTI0OUZEOTMwMTAwMDAwMDAwNEE5QgorOjEwM0UwMDAwRkQ5MzAxMDBDMjlGMDA0MkNEOTMwMDAwMDAwMDUxNEE4MworOjEwM0UxMDAwRkQ5MzAxMDAwMDAwMDA0OUZEOTMwMTAwQzI5RjAwNDM5MworOjEwM0UyMDAwQ0I5MzAwMDAwMDAwNTA0MDgxQjIwMTAwRDI5RjAwNDBCRgorOjEwM0UzMDAwMTk5OTAxMDAwMDAwMDBGMDlBQjAwMTAwMDAwMDAwNDQ1MAorOjEwM0U0MDAwNDlEMTAxMDAwMDAwNDBGMDgwQjIwMTAwMDAwMDQxNEQ2NgorOjEwM0U1MDAwODBCMjAxMDBDQTlGMDA0MDE5OTkwMTAwMDAwMDRDNDA0NworOjEwM0U2MDAwODFCMjAxMDAwMDAwMDA0NDQ5RDEwMTAwMDAwMDAwRjBDRgorOjEwM0U3MDAwOUFCMDAxMDAwMDAwMDA0RDEwQjEwMDAwMDAwMDAwRTIwNworOjEwM0U4MDAwNDlCMTAxMDAwMDAwMDBFMzQzQjEwMTAwMDAwMDAwRTQ3QgorOjEwM0U5MDAwNDVCMTAxMDAwMDAwMDA0MDdCQjMwMTAwMDAwMDQ4NEYyNQorOjEwM0VBMDAwNDBCMTAxMDBEMjlGMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwM0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwM0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwM0VEMDAwODFCMjAwMDAwNDAwMDBDQjgxQzgwMTAwMjI4MzAwNDBCMQorOjEwM0VFMDAwRjI5MzAwMDA1NTgyMDA0MDgxQjIwMDAwNDAwNTAwNDA3RQorOjEwM0VGMDAwODFCMjAwMDAxODA2MDA0MDgxQjIwMDAwMjI4MzAwNDAxOQorOjEwM0YwMDAwODFCMjAwMDBDNjgyMDA0MDgxQjIwMDAwNDM4MTAwNDBCRgorOjEwM0YxMDAwODFCMjAwMDA0MTgxMDA0MDgxQjIwMDAwQjg4MDAwNDBDMQorOjEwM0YyMDAwODFCMjAwMDBGMDg3MDA0MDgxQjIwMDAwMjM4MzAwNDA4RQorOjEwM0YzMDAwODFCMjAwMDAyNzgzMDA0MDgxQjIwMDAwQkY5NDAwNDA5RQorOjEwM0Y0MDAwODFCMjAwMDA5NDk4MDA0MDgxQjIwMDAwN0Y5NDAwNDA0QworOjEwM0Y1MDAwODFCMjAwMDA3Rjk4MDA0MDgxQjIwMDAwOEQ5NTAwNDA0MgorOjEwM0Y2MDAwODFCMjAwMDAxNjk1MDA0MDgxQjIwMDAwMTA5NTAwNDAxQgorOjEwM0Y3MDAwODFCMjAwMDBCMTgyMDA0MDgxQjIwMDAwMjA5OTAwNDA2RgorOjEwM0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwM0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwM0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwM0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwM0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwM0ZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwM0ZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwM0ZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwNDAwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMgorOjA0NDAxMDAwODFCMjAwMDA3OQorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMuaWhleCBiL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjAyNmMyCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvc2xpY29zcy9vYXNpc2Rvd25sb2FkLnN5cy5paGV4CkBAIC0wLDAgKzEsNTEyNCBAQAorOjEwMDAwMDAwMDIwMDAwMDAwMDQwMDAwMDAwMDAwMTAwMDAwMDAwMDBBRAorOjEwMDAxMDAwMDA4MDAwMDAxNTAwMDA0MDgxQjIwMDAwMUIwMDAwNDA3RAorOjEwMDAyMDAwODFCMjAwMDAyMTAwMDA0MDgxQjIwMDAwMDMwMDAwNDBDNgorOjEwMDAzMDAwODFCMjAwMDAwMDAwMDBBODk4QjAwMTAwMDQ4MEEyNDAzNgorOjEwMDA0MDAwRkQ3RjAwMDAwOTAwQTI0OUREN0QwMDAwMDAwMDAwNEM5QQorOjEwMDA1MDAwODBCMjAxMDAwNzAwMDA0MEQxQjEwMDAwMDAwMDAwNEM1OAorOjEwMDA2MDAwODBCMjAxMDAwOTAwQTI0MDc1N0QwMDAwNjAwMDAwNDBFMAorOjEwMDA3MDAwNjE5OTAxMDAwQjAwQThCMTdFMzEwMDAwMDkwMDAwNDAyOQorOjEwMDA4MDAwODFCMjAwMDAwMDgwOEY5ODE4MzEwMDAwMTAwMDAwOThBNQorOjEwMDA5MDAwODBFNDAxMDAwMDAwNDE5ODgwOTQwMTAwMDAwMDAwNDBDRAorOjEwMDBBMDAwODFCMjAxMDAxMDAwMDA5ODgwRTQwMTAwMEUwMDQwOTgyOQorOjEwMDBCMDAwODA5NDAwMDAxMTAwMDA0MDgxQjIwMDAwMDAwMDAwNDA2OAorOjEwMDBDMDAwQTU5OTAxMDAxOTAwMjk0MDgxMzIwMDAwMTkwMDE0QkNEMworOjEwMDBEMDAwODAzMjAwMDAwRTAwOTNCQzgwMzIwMDAwMDAwMDUwNDBDRgorOjEwMDBFMDAwODFCMjAxMDAwMDgwMDA0MDgxQjIwMDAwMTAwMDAwNDA5OQorOjEwMDBGMDAwQTU5OTAxMDAxRjAwMjk0MDgxMzIwMDAwMUYwMDE0QkM5NworOjEwMDEwMDAwODAzMjAwMDAxMjAwOTNCQzgwMzIwMDAwMDAwMDUwNDA5QQorOjEwMDExMDAwODFCMjAxMDAwMTgwMDA0MDgxQjIwMDAwMjAwMDAwNDA1NworOjEwMDEyMDAwQTU5OTAxMDAyNTAwMjk0MDgxMzIwMDAwMjUwMDE0QkM1QQorOjEwMDEzMDAwODAzMjAwMDAxNDAwOTNCQzgwMzIwMDAwMDAwMDAwNDlBRgorOjEwMDE0MDAwREQ4MTAxMDAxMjAxMDA0MDgxMzIwMTAwMzMwMTAwNDBENQorOjEwMDE1MDAwODEzMjAxMDAyQTAwMTRCQzgwMzIwMDAwRkUwMDEzQkM3MgorOjEwMDE2MDAwODAzMjAwMDA1NDk1MDA0MDQ1OTkwMTAwRkZGRjAwNDA5NworOjEwMDE3MDAwRTU5OTAxMDAwMDAwMkY0MDQ5QjEwMTAwMDAwMDAwNDA1NgorOjEwMDE4MDAwRTFCMTAxMDAwMDAwMDA0MEZEQjMwMTAwMDAwMDAwNDBBQgorOjEwMDE5MDAwRkZCMzAxMDAzMzAwMThFRTgwMzIwMDAwMDAwMDAwNTA3MQorOjEwMDFBMDAwODlCMDAxMDAzMjAwQTI0MTg5NTAwMDAwOTkwMDAwNDA0RQorOjEwMDFCMDAwODEzMjAxMDAzMDk0MDA0MDQzOTkwMTAwMDAwMDAwRjhCMgorOjEwMDFDMDAwMjBCMTAxMDAwMDAwMDBGQUUwQjMwMTAwMzkwMDk4RUUxMAorOjEwMDFEMDAwODAzMjAwMDAwMDAwMDBGQjgwQjAwMTAwM0IwMDgwRjM5MworOjEwMDFFMDAwREUzMzAwMDAwMDAwMDA0N0ZEOTMwMTAwM0UwMDgzRjM3MgorOjEwMDFGMDAwODAzMjAwMDBGMDAwMDBGMzgwODgwMTAwMDE4MDAwNDBBMAorOjEwMDIwMDAwMkVERDAxMDAwMDk0MDA0MDQzOTkwMTAwMDAwMDAwNDZFQgorOjEwMDIxMDAwNDNDMTAxMDAwMDAwMDBGQTI0QjEwMTAwN0MwMDE4RUU4NworOjEwMDIyMDAwODAzMjAwMDA0NTAwOTVFODgwMzIwMDAwRkZGRjAwRThDMgorOjEwMDIzMDAwODA4ODAxMDA3QzAwMjY0MDgxMzIwMDAwMDAwMDAwNDBFMAorOjEwMDI0MDAwRDU5OTAxMDAwMDAwMDBGMkVDQjMwMTAwMDAwMDAwRjhCNQorOjEwMDI1MDAwRDZCMTAxMDAwODAwMDA0MEQ1OTkwMTAwMDAwMDAwRjA2RgorOjEwMDI2MDAwRDZCMTAxMDBGRjAwMDBGOEVFOEIwMTAwMDgwMTAwNDA0QworOjEwMDI3MDAwRDU5OTAxMDBGRjAwMDBGMDgwOEMwMTAwMDAwMDAwRjcxQworOjEwMDI4MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwRkYwMDAwRjg5OQorOjEwMDI5MDAwODA4ODAxMDAzQzAwMDA0MEQ1OTkwMTAwRkYwMDAwRjA3QgorOjEwMDJBMDAwRDY4RDAxMDBGRkZGMDBGMEYwREIwMTAwMDAwMDAwNDhFOAorOjEwMDJCMDAwODFFMDAxMDAwMDAwMDBGODgxOTQwMTAwM0MwMTAwNDA1MQorOjEwMDJDMDAwRDU5OTAxMDAwMDAwMDA0MEQ2QjEwMTAwRkYwMDAwRjgwMAorOjEwMDJEMDAwODA4ODAxMDAwMDAwMDA0ODgxRTAwMTAwMDAwMDAwRjg3MworOjEwMDJFMDAwODE5NDAxMDAzQzAyMDA0MEQ1OTkwMTAwMDAwMDAwNDBDQgorOjEwMDJGMDAwRDZCMTAxMDAyQzAwMDA0MEQ1OTkwMTAwMDAwMDAwRjhBMworOjEwMDMwMDAwRDZCMTAxMDAxRTAwMDBGMDgyRjQwMTAwRkYzRjAwRjhBQQorOjEwMDMxMDAwODBEODAxMDA2NDAwMjY0MDgxMzIwMDAwMDAwMDAwNDFDNgorOjEwMDMyMDAwODFEMDAxMDBGRkZGMDA0MDgwRDgwMTAwMDAwMDAwNDFBMworOjEwMDMzMDAwODA5NDAxMDAwMDAwMDA0MEQ4QjEwMTAwNjgwMDIyRkE1QQorOjEwMDM0MDAwODAzMDAwMDAwMDAwMDA0QzgxRTAwMTAwMDEwMDAwNDAwRQorOjEwMDM1MDAwODBDQzAxMDAwMDAwMDA0MERFQjEwMTAwMDAwMTAwNDAzRgorOjEwMDM2MDAwRDU5OTAxMDAxMDAwMDBGQTgwRTQwMTAwMDAwMDAwRjZCOQorOjEwMDM3MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwMDAwMjAwNDA1RAorOjEwMDM4MDAwRDU5OTAxMDAxMDAwMDBGQTgwRTQwMTAwMDAwMDAwRjY5OQorOjEwMDM5MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwMDYwMDAwNDAzOQorOjEwMDNBMDAwRDU5OTAxMDAxMDAwMDBGQkQ2RTUwMTAwMDcwMDAwNDBEMAorOjEwMDNCMDAwRDU5OTAxMDAxODAwMDBGQkQ2RTUwMTAwNDgwMDAwNDA3NworOjEwMDNDMDAwRDU5OTAxMDAxMDAwMDBGQUQ2RTUwMTAwNTAwMDAwNDA2OAorOjEwMDNEMDAwRDU5OTAxMDAxMDAwMDBGQkQ2RTUwMTAwMDMwMDAwRkJFOQorOjEwMDNFMDAwN0E4OTAxMDAwMDAwMDBGMERDQjEwMTAwN0MwMDAwNENDMworOjEwMDNGMDAwREQ5MTAwMDA3QzAwOTVFODg0MzAwMDAwMDAwMDJGRTlDQQorOjEwMDQwMDAwRkFCMzAxMDAwMDAwMDA0MEQxQjEwMTAwRkYwMDAwNDIzQQorOjEwMDQxMDAwODA4ODAxMDAzNDAwMDA0MDgwQ0UwMTAwN0MwMEE2NDBBRQorOjEwMDQyMDAwODEzMjAwMDA4NTAwMDA0MDgxMzIwMTAwMDI4MDIyNDBCQworOjEwMDQzMDAwODAzMjAwMDA3QzAwMDA0MDgxQjIwMDAwMDAwMDAwNEZDQworOjEwMDQ0MDAwODFCMDAxMDA4RTAwMDlGOTgxMzIwMDAwOEMwMDA4RjlBQQorOjEwMDQ1MDAwODEzMjAwMDA5ODAwMUZGREY5MzMwMDAwOEIwMDlFRkRFMworOjEwMDQ2MDAwODEzMjAwMDAwMDAwMDA0QUYzOTMwMTAwMDAwMDgwNDg0MAorOjEwMDQ3MDAwRjM5MzAxMDAwMDAwMDBGREY3QjMwMTAwMDAwMDgwNDk4NAorOjEwMDQ4MDAwRjM5MzAxMDAwMDAwMDBGQzE5QjEwMTAwOTMwMDBBRjk4OAorOjEwMDQ5MDAwODEzMjAwMDAwMDAwNDBGQjgxQjIwMTAwMDAwMDQxRkRGQworOjEwMDRBMDAwODFCMjAxMDAwMDA3ODBGOUYzOEYwMTAwMDAwNzQyRjlEMworOjEwMDRCMDAwRjM4RjAxMDA5NzAwQTJGRkY3NkYwMDAwMDAwMDQzNDA5OAorOjEwMDRDMDAwODFCMjAxMDAwMDAwQTJGRkZCRUYwMDAwMDAwMDgwRkNGMQorOjEwMDREMDAwRTFCMTAxMDAwMDAwODA0MDgxQjAwMTAwMDA5NDAwNDBDMworOjEwMDRFMDAwNDc5OTAxMDBCQjAwMDA0MDgxMzIwMTAwMDAwMEEyNDY5NAorOjEwMDRGMDAwRkQ3RjAxMDAwMDk0MDA0MDQ3OTkwMTAwQ0UwMDAwNDBCQworOjEwMDUwMDAwODEzMjAxMDAwMDAwQTI0NEZEN0YwMTAwMDA5NDAwNDAwMAorOjEwMDUxMDAwNDU5OTAxMDAwMDAwMDA0MEYxQjEwMTAwRkY3RjAwNDA1QgorOjEwMDUyMDAwRjU5OTAxMDBGRjdGMDA0MEY1OTkwMTAwOUExMzAwNDAwMgorOjEwMDUzMDAwRjU5OTAxMDAwNzAwMDA0MEY1OTkwMTAwMDEwMDAwNDAxNQorOjEwMDU0MDAwRjU5OTAxMDAwMDAyMDA0MEY1OTkwMTAwMDIwMDAwNDAwOQorOjEwMDU1MDAwRjU5OTAxMDAwMDAyMDA0MEY1OTkwMTAwMDMwMTAwNDBGNworOjEwMDU2MDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwOUExMzAwNDA0MAorOjEwMDU3MDAwRjU5OTAxMDAwQjAwMDA0MEY1OTkwMTAwODAwMDAwNDA1MgorOjEwMDU4MDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDAwMDAwNDBDRAorOjEwMDU5MDAwRjU5OTAxMDAwNzAwMDA0MEY1OTkwMTAwMDgwMDAwNDBBRQorOjEwMDVBMDAwRjU5OTAxMDBCMDAyMDA0MEY1OTkwMTAwMDAwMDAwNDBGQgorOjEwMDVCMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDIyOTAwNDA3MgorOjEwMDVDMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDA2NzAwNDAyNgorOjEwMDVEMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwODAwMDAwNDBGRAorOjEwMDVFMDAwRjU5OTAxMDAwMDAwODA0MEY1OTkwMTAwMDAwMDAwNDVFOAorOjEwMDVGMDAwRkQ4MzAxMDAwMDAwMDA0NkZEODMwMTAwRkY3RjAwNDBGNQorOjEwMDYwMDAwMjU5OTAxMDBDNDAwMDA0MDgxMzIwMTAwMDAwMEEyNDQ4RAorOjEwMDYxMDAwODBCMjAwMDAwMDAwMDA0NUZEOTMwMTAwRTIwMDAwNDBCMAorOjEwMDYyMDAwODMzMDAxMDAwMDAwQTI0NTgwMzIwMTAwMDAwMDgwNDZCNgorOjEwMDYzMDAwRkQ5MzAxMDAwMDEwMDA0MDgzOTgwMTAwREQwMDAwNDBBMAorOjEwMDY0MDAwMkIzMTAxMDAwMDAwQTI0Njg4QjAwMDAwMDAwMDAwNDFFQworOjEwMDY1MDAwODlCMDAxMDAwMDAwMDA5NDhDQjAwMTAwRkZGRjAwNDY0QgorOjEwMDY2MDAwODA4ODAxMDBBNUE1QTI0MDgwQ0UwMDAwMDAwMDAwNDhCRgorOjEwMDY3MDAwOERGMDAxMDBDOTAwODI0MTg5NDAwMDAwMDAwMDgwNDBFNworOjEwMDY4MDAwODlCMDAxMDAwMDAwMDA0NEZEODMwMTAwRDQwMDAwNDA1NworOjEwMDY5MDAwODEzMjAxMDAwMDAwQTI0NDgwQjIwMDAwRTIwMDAwMDhBNAorOjEwMDZBMDAwODMzMDAxMDAwMDAwQTI0NTgwMzIwMTAwMDAwMDgwNDQzOAorOjEwMDZCMDAwRkQ5MzAxMDAwMDMwMDAwODgzOTgwMTAwODAwMDAwNDA5NQorOjEwMDZDMDAwMkI5OTAxMDBEQjAwMDA0MDg5MzAwMTAwMDAwMEEyNDZBOAorOjEwMDZEMDAwODBCMjAwMDBGRkZGMDA5NDgwODgwMTAwQTVBNUEyNDAyMQorOjEwMDZFMDAwODA0RTAxMDAwMDAwODA0Mzg5QjAwMTAwMDM4NDAwNDE3NgorOjEwMDZGMDAwMkM5OTAxMDBERTAwMDA0MDgxQjIwMDAwMDM4ODAwNDExNworOjEwMDcwMDAwMkM5OTAxMDAwMDAwMDAyMDhEQjAwMTAwMDAwMDlGOTY5MAorOjEwMDcxMDAwODBCMjAwMDBERjAwQTI0MThENTAwMDAwMDAwMDgwNDA0OAorOjEwMDcyMDAwODFCMjAxMDBGRjdGMDA0MDI1OTkwMTAwMDAwMDAwNENDQworOjEwMDczMDAwODlFMDAxMDBERDAwMDA0NDgyMTQwMTAwMDAwMDkwOTQ3MworOjEwMDc0MDAwOEFCMDAwMDAwMDAwMDA0NUYwQjEwMTAwMTAwMDAwNDUzMworOjEwMDc1MDAwODhGNDAxMDAwMDAwMDA0NDg5RDAwMTAwREQwMDAwNDQ1RAorOjEwMDc2MDAwMkI0MTAxMDBFQzAwMDg0MTgwMzIwMDAwRUQwMDAwOTRCNAorOjEwMDc3MDAwMjRCMTAwMDAxMDAwMDA5NDI0RjUwMTAwMDAwMDAwOTQ1MgorOjEwMDc4MDAwRjBCMTAxMDBGMjAwQTA0NDg5NTAwMDAwREQwMDAwNDRGNworOjEwMDc5MDAwMkI0MTAxMDAwMDAwMDA5NEYwQjEwMTAwRUYwMDIwNDQ2MworOjEwMDdBMDAwODk1MDAwMDAxMDAwMDA0NTg4RjQwMTAwMDAwMDAwRkFBNAorOjEwMDdCMDAwOEFCMDAxMDAwMDAwQTM0Mjg5RDAwMDAwRjcwMEEwRkEyRgorOjEwMDdDMDAwOEE0MDAwMDAwMDAwMDA0MThCQzAwMTAwRjUwMEEzNDJGOAorOjEwMDdEMDAwODk1MDAwMDBGRkZGMDA0NTg4ODgwMTAwMTAwMDAwNDU5NworOjEwMDdFMDAwOEFGNDAxMDBGQzAwOTA0NDhBNDAwMDAwMDAwMDAwNDFBRgorOjEwMDdGMDAwOEJDMDAxMDBGRkZGMDA0NThBQTgwMTAwMDAwMDgwNTA2NworOjEwMDgwMDAwOEJFMDAxMDBGRjdGMDA0MDI1OTkwMTAwN0MwMDAwNDA0MworOjEwMDgxMDAwMkI5OTAxMDAwMDMwMDA0MDgzOTgwMTAwREQwMDAwMDhBMgorOjEwMDgyMDAwODMxNDAxMDAwMDAwMDA5NDJBQjEwMTAwMDA4MDAwNDAwMAorOjEwMDgzMDAwRjk5QjAxMDBERDAwMDBGQzE5MzEwMTAwMDAwMDQwOTQyQgorOjEwMDg0MDAwODBCMjAxMDBERDAwMDA0NDJCNDEwMTAwMDAwMDQxOTQxMgorOjEwMDg1MDAwODBCMjAxMDAwMDAwMDA0MUY5QzMwMTAwMDAwMDAwNDQyMworOjEwMDg2MDAwMkJDMTAxMDAwNDAxOUY5NDgwMzIwMDAwMDI4MDAwNDBFRgorOjEwMDg3MDAwODFCMjAwMDAxMDAxMDA1MTkzQjAwMDAwMTAwMTAwNEQ0MgorOjEwMDg4MDAwOTNCMDAwMDAxMDAxMDA0OTkzQjAwMDAwMDAwMDAwNDI0NgorOjEwMDg5MDAwOTNCMDAxMDAxMDAxQTI0MTkzNTAwMDAwMDAwMDgwNDA3RAorOjEwMDhBMDAwODFCMjAxMDAwMDAwMTA0MDgxQjIwMTAwMDAwMDExNDAzRgorOjEwMDhCMDAwODFCMjAxMDAwMDAwMTI0MDgxQjIwMTAwMDAwMDEzNDAyQgorOjEwMDhDMDAwODFCMjAxMDAwMDAwMTQ0MDgxQjIwMTAwMDAwMDE1NDAxNworOjEwMDhEMDAwODFCMjAxMDAwMDAwMTY0MDgxQjIwMTAwMDAwMDE3NDAwMworOjEwMDhFMDAwODFCMjAxMDAwMDAwMTg0MDgxQjIwMTAwMDAwMDE5NDBFRgorOjEwMDhGMDAwODFCMjAxMDAwMDAwMUE0MDgxQjIwMTAwMDAwMDFCNDBEQgorOjEwMDkwMDAwODFCMjAxMDAwMDAwMUM0MDgxQjIwMTAwMDAwMDFENDBDNgorOjEwMDkxMDAwODFCMjAxMDAwMDAwMUU0MDgxQjIwMTAwMDAwMDFGNDBCMgorOjEwMDkyMDAwODFCMjAxMDAwMDAwNzA0MDgxQjIwMTAwMDAwMDcxNDBGRQorOjEwMDkzMDAwODFCMjAxMDAwMDAwNzI0MDgxQjIwMTAwMDAwMDczNDBFQQorOjEwMDk0MDAwODFCMjAxMDAwMDAwNzQ0MDgxQjIwMTAwMDAwMDc1NDBENgorOjEwMDk1MDAwODFCMjAxMDAwMDAwNzY0MDgxQjIwMTAwMDAwMDc3NDBDMgorOjEwMDk2MDAwODFCMjAxMDAwMDAwNzg0MDgxQjIwMTAwMDAwMDc5NDBBRQorOjEwMDk3MDAwODFCMjAxMDAwMDAwN0E0MDgxQjIwMTAwMDAwMDdCNDA5QQorOjEwMDk4MDAwODFCMjAxMDAwMDAwN0M0MDgxQjIwMTAwMDAwMDdENDA4NgorOjEwMDk5MDAwODFCMjAxMDAwMDAwN0U0MDgxQjIwMTAwMDAwMDdGNDA3MgorOjEwMDlBMDAwODFCMjAxMDAwMDAwODA0MDgxQjIwMTAwMDAwNDAwNDBEQgorOjEwMDlCMDAwQTE5OTAxMDAwMDAwMDA1MEExRDEwMTAwMDAwMDAwNDBGOQorOjEwMDlDMDAwMUJCMDAxMDAwMDAwMDA0MDE5QjAwMTAwMDAwMDAwNDAxMQorOjEwMDlEMDAwMTdCMDAxMDAwMDAwMDA0MDE1QjAwMTAwMDAwMDAwNDAwOQorOjEwMDlFMDAwMTNCMDAxMDAwMDAwMDA0MDExQjAwMTAwMDAwMDAwNDAwMQorOjEwMDlGMDAwMEZCMDAxMDAwMDAwMDA0MDBEQjAwMTAwMDAwMDAwNDBGOQorOjEwMEEwMDAwMEJCMDAxMDAwMDAwMDA0MDA5QjAwMTAwMDAwMDAwNDBGMAorOjEwMEExMDAwMDdCMDAxMDAwMDAwMDA0MDA1QjAwMTAwMDAwMDAwNDBFOAorOjEwMEEyMDAwMDNCMDAxMDAwMDAwMDA0MDAxQjAwMTAwM0IwMTIwNDg3QworOjEwMEEzMDAwQTE1MTAwMDAwMDAwODA0MDgxQjIwMTAwNDcwMTIyNEIxQgorOjEwMEE0MDAwNzQ3RDAwMDAwMDAwODA0MDgxQjIwMTAwNjAwMDAwNEIxNgorOjEwMEE1MDAwNjA5OTAxMDAwMDAwMDBCMTdFQjEwMTAwNDgwMUE4NDA4QQorOjEwMEE2MDAwODEzMjAwMDA0NTAxMDA0MDgxQjIwMDAwMDUwMDgwNDA1NQorOjEwMEE3MDAwOTc5ODAxMDAxODAwMDBBQTk2ODgwMTAwMDAwMDgwNDNBMgorOjEwMEE4MDAwOTdGMDAxMDAwNzAwMDBBQTk2ODgwMTAwMDAwMDgwNDA0RQorOjEwMEE5MDAwODFCMjAxMDAwMDAwMDA1ODA3OTAwMTAwRDg5RjAwNDA3QgorOjEwMEFBMDAwODFCMjAwMDAwMDAwMDA0NEE1QjMwMTAwRDgwMjAwNDA1QworOjEwMEFCMDAwODEzMjAxMDBGODAyMDA0MDgxMzIwMTAwMDAwMDAwNUMzOAorOjEwMEFDMDAwMDc5MDAxMDBEODlGMDA0MEJGQjMwMDAwNUEwMTIyQ0MxQworOjEwMEFEMDAwODU3RjAwMDAwMDAwMDA1MTA3OTAwMTAwRDg5RjAwNDA3MgorOjEwMEFFMDAwODFCMjAwMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0IxQworOjEwMEFGMDAwQTNDOTAxMDBEMDE0MDA0MEExOUIwMTAwMDAwMDAwMjAwOAorOjEwMEIwMDAwNDZCMTAxMDAwMDAwMDA0OEYxQjEwMTAwMDAwMDAwRDAzMgorOjEwMEIxMDAwRjFCMTAxMDAwMDAwMDBDQUYxQjEwMTAwMDAwMDAwRDVGMAorOjEwMEIyMDAwRTFCMTAxMDAwNzAwMDA0MDYxOTkwMTAwMjAwMDAwMjBCMAorOjEwMEIzMDAwNjJERDAxMDA2MzAxQTg0MDgxMzIwMDAwMDAwMDAwQ0NBQQorOjEwMEI0MDAwODU5MzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDAwNDA3QQorOjEwMEI1MDAwNDM5OTAxMDAwMDAwMDBGQUJBQjMwMTAwMDAwMDAwRkE1NgorOjEwMEI2MDAwQTRCMzAxMDAwMDAwMDBGOEJDQjMwMTAwMDAxNDJGNDA0MgorOjEwMEI3MDAwODFCMDAxMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDgyOQorOjEwMEI4MDAwQTlCMzAxMDBGRjAwMDBERDgxODgwMTAwMDIwMDAwNDBFMAorOjEwMEI5MDAwODBGNDAxMDA3MzAxMDA0MDgwQzgwMTAwODYwMTAwREQ3RgorOjEwMEJBMDAwODEzMjAwMDAwMDAwMDA0MDEwQjEwMDAwODcwMTAwNDBDOQorOjEwMEJCMDAwODFCMjAwMDA4ODAxMDA0MDgxQjIwMDAwODkwMTAwNDAzQworOjEwMEJDMDAwODFCMjAwMDA4QTAxMDA0MDgxQjIwMDAwOEIwMTAwNDAyOAorOjEwMEJEMDAwODFCMjAwMDA4RDAxMDA0MDgxQjIwMDAwOEYwMTAwNDAxMQorOjEwMEJFMDAwODFCMjAwMDA1MDAxMDA0MDgxQjIwMDAwQjYwMTAwNDAxNworOjEwMEJGMDAwODFCMjAwMDA1MDAxMDA0MDgxQjIwMDAwQzQwMTAwNDBGOQorOjEwMEMwMDAwODFCMjAwMDBDNTAxMDA0MDgxQjIwMDAwODIwMjAwNDBCNAorOjEwMEMxMDAwODFCMjAwMDA4MzAyMDA0MDgxQjIyODAwQjgwMjAwNDA4NworOjEwMEMyMDAwODFCMjI4MDBENDlGMDA0MDgxQjIyODAwRDU5RjAwNDBBNworOjEwMEMzMDAwODFCMjI4MDBENjlGMDA0MDgxQjIyODAwRDc5RjAwNDA5MworOjEwMEM0MDAwODFCMjI4MDA3MjAxMDA0MTgxQzAyODAwNTUwMTUxNDkzQworOjEwMEM1MDAwRkQ5MzI4MDA1NTAxNTI0QUZEOTMyQTAwNTUwMTU1NDkzQworOjEwMEM2MDAwRkQ4MzJBMDA1NTAxNTY0QUZEODMyQTAwNTAwMTkxODFENworOjEwMEM3MDAwODAzMDJBMDA1NTAxNDU0MDgxQjIyQTAwNTAwMTkxODJGRQorOjEwMEM4MDAwODAzMDJBMDA1NTAxNDY0MDgxQjIyQTAwMDAwMDAwNDAxMQorOjEwMEM5MDAwODlCMDJCMDAwMDAwMkY0MDgxQjAwMTAwMDAxNDAwNDBGQgorOjEwMENBMDAwNDk5OTAxMDBCMzAxMjJERUUxNkQwMDAwMDAwMDAwNEMxMworOjEwMENCMDAwNDlDMTAxMDAwMDAwMDA0MTgxQzAwMTAwOTIwMUEyNDQyRAorOjEwMENDMDAwODE2QzAwMDAwMDAwMDA0QzQ5RDEwMTAwOUEwMTIyNDBEMworOjEwMENEMDAwRTE2RDAwMDA5NjAxQTI0MTgxNTAwMDAwNTAwMTAwNDFFOQorOjEwMENFMDAwQkZCMzAwMDAwMDAwMDA0MkJGQjMwMTAwNTAwMUEwMEZERAorOjEwMENGMDAwQkQ2RjAwMDAwMDAwMDBERUUxQjEwMTAwMDAwMDAwNDQxMworOjEwMEQwMDAwNDlDMTAxMDBCNTAxMDA0MDE5OTkwMTAwMDAwMDQyNDBBRAorOjEwMEQxMDAwODFCMjAxMDAwMDAwNDNGRjg1QjAwMTAwMDAwMDAwREU0OQorOjEwMEQyMDAwMTlCMTAxMDAwMDAwNDJGRjg3QjAwMTAwMDAwMDQzRkYzRAorOjEwMEQzMDAwRTFCMTAxMDAwMDAwMDA0NDQ5QzEwMTAwMDAwMDJGRkZBMworOjEwMEQ0MDAwRTFCMTAxMDAwODE0MDBBNDgwQ0MwMTAwQUEwMTI2NDBGMgorOjEwMEQ1MDAwODEzMjAwMDAwMDAwMDA0MTg1QzAwMTAwQTgwMUEyNENDMgorOjEwMEQ2MDAwODE1MDAwMDBCNDAxMjJEMjgxMzIwMDAwQUYwMTIyNDE0MworOjEwMEQ3MDAwQTU2RjAwMDA1MDAxQTJFMDgxMzIwMDAwMDAwMDAwRDIwNworOjEwMEQ4MDAwQzFCMzAxMDAwMDAwMDA1Qzg5OTAwMTAwMDAwMDQwNDJGNgorOjEwMEQ5MDAwODBCMjAxMDAwMDAwNDE0MzgwQjIwMTAwMDAwMDAwRjA3OQorOjEwMERBMDAwODg5NDAxMDA1NTAxMDA0NEUwQjEwMDAwQjEwMTAwNDgwMQorOjEwMERCMDAwNDlDMTAwMDBBRjAxMDA1Qjg5OTAwMDAwQTg5RjAwQTAxRQorOjEwMERDMDAwOUVCMDAwMDAwMDAwMDA0MDgzQjAwMTAwMDAxNDAwNDAwRAorOjEwMEREMDAwNDk5OTAxMDAwMDAwMjM0MDgxQjAwMTAwQkUwMTIyREVEQworOjEwMERFMDAwRTE2RDAwMDAwMDAwMDA0QzQ5QzEwMTAwMDAwMDAwNDExRAorOjEwMERGMDAwODFDMDAxMDBCOTAxQTI0NDgxNkMwMDAwNTAwMTAwNDM5MAorOjEwMEUwMDAwQkZCMzAwMDAwMDAwMDBGODE4QjEwMTAwMDAwMDQwRjg3NgorOjEwMEUxMDAwODBCMjAxMDAwMDAwNDFGMDgwQjIwMTAwMDAwMDAwNDBGQgorOjEwMEUyMDAwRjFCMTAxMDAwMDAwMDA0MEYxQjEwMTAwNTUwMTAwNDBBNgorOjEwMEUzMDAwRTFCMTAwMDBDNjAxMDA0MDkxQjAwMDAwMDAwMDAwNDE5NworOjEwMEU0MDAwOTFCMDAxMDBEMDE0MkU0MDQ5QjEwMTAwMDUwMDAwNDBDRQorOjEwMEU1MDAwQTM5QjAxMDAwODAwMDBERDgxRjQwMTAwQ0IwMTAwNDBFQworOjEwMEU2MDAwODBDODAxMDAwMDAwMDA0MDEwQjEwMDAwRDEwMTAwNDAyNgorOjEwMEU3MDAwODFCMDAwMDA1MzAxMDBERUExQjMwMDAwRTMwMTAwNDA5NworOjEwMEU4MDAwODFCMjAwMDBFNTAxMDA0MDgxQjAwMDAwRUIwMTAwNDBBQworOjEwMEU5MDAwODFCMjAwMDA1MjAxMDBERkUxQjEwMDAwMDAwMDAwRDA4QgorOjEwMEVBMDAwQkFCMzAxMDAwMDAwMDBERUExQjEwMTAwMDIwMDAwRDJDRgorOjEwMEVCMDAwQTVFNzAxMDAwMDAwMDBEMkMxQjMwMTAwMDAwMDAwMDA1RQorOjEwMEVDMDAwRjBCMTAxMDBEQjAxMjI0NEMxNTMwMDAwREEwMTg0NDE4QQorOjEwMEVEMDAwODE0MDAwMDBERTAxMDA0MDgxMzIwMTAwMDAwMDAwRDBBRQorOjEwMEVFMDAwNDVCMTAxMDBENTAxMDA0MUExQzEwMDAwREEwMjAwNDA3NgorOjEwMEVGMDAwODEzMjAxMDBGODAyMDA0MDgxMzIwMTAwNTUwMTAwREQxRAorOjEwMEYwMDAwQTFCMTAwMDAwMDAwMDA0MDgxQjAwMTAwNDAwMDAwNDA5RAorOjEwMEYxMDAwQTU5QjAxMDBEQTAyMDA0MDgxMzIwMTAwNDAwMDAwRDNBRAorOjEwMEYyMDAwQTdDQjAxMDBGODAyMDBFMEE1QjMwMDAwMDMwMDAwNDBEOQorOjEwMEYzMDAwQTM5QjAxMDA1MzAxMDBERUExQjMwMDAwMDAwMDAwNDRBOAorOjEwMEY0MDAwQkZCMzAxMDAwMDAwMDBERTgxOTAwMTAwNTAwMUEyQkE5MQorOjEwMEY1MDAwODAwNDAwMDA2MDAwMDBERTYxOTkwMTAwRTgwMUE4QjE5MgorOjEwMEY2MDAwODAzMDAwMDA1MjAxMDA0MEUwQjEwMDAwMDAwMDAwRDBERAorOjEwMEY3MDAwQkFCMzAxMDA2QjAyMDA0MDgxOTgwMTAwNjAwMjAwNEQ4RAorOjEwMEY4MDAwODMzMDAxMDAwMDAwMDA0NEUxQjMwMTAwMDAwMDAwNDQ5MAorOjEwMEY5MDAwRTNCMzAxMDAwMDAwMDA0NEU1QjMwMTAwMDAwMDAwNDQ5OQorOjEwMEZBMDAwRTlCMzAxMDAwMDAwMDA0NEVCQjMwMTAwMDAwMDAwNDQ3RAorOjEwMEZCMDAwRjVCMzAxMDAwMDAwMDA0NEY3QjMwMTAwMDAwMDAwNDQ1NQorOjEwMEZDMDAwRjlCMzAxMDBGOTAxMjI0MDhGNkYwMDAwNzgwMjAwNDA2MAorOjEwMEZEMDAwODE5ODAxMDA2MDAyMDBDNzgzMzAwMTAwODAwMjAwNDA1OAorOjEwMEZFMDAwODE5ODAxMDA2MDAyMDA0MjgzMzAwMTAwMDAwMDAwRThBNworOjEwMEZGMDAwRjFCMTAxMDAwMDAwMDBFOUYxQjEwMTAwMDAwMDAwRUFEOAorOjEwMTAwMDAwRjFCMTAxMDAwMDAwMDBFQkYxQjEwMTAwMDAwMDAwODUyQQorOjEwMTAxMDAwRjBCMTAxMDAwMDAwMDBFQ0YxQjEwMTAwMDAwMDAwRURCMgorOjEwMTAyMDAwRjFCMTAxMDAwMDAwMDBCMkYwQjEwMTAwMDAwMDAwQTkyMAorOjEwMTAzMDAwRjBCMTAxMDAwMDAwMDBBQ0YwQjEwMTAwMDAwMDAwQUIxNQorOjEwMTA0MDAwRjBCMTAxMDAwMDAwMDBCOEYwQjEwMTAwMDAwMDAwQjlFQgorOjEwMTA1MDAwRjBCMTAxMDAwMDAwMDBCQUYwQjEwMTAwMDAwMDAwQkJENworOjEwMTA2MDAwRjBCMTAxMDAwQzAyQjg0MDgxMzAwMDAwMDAwMDAwNDBFNworOjEwMTA3MDAwODE5MDAxMDAwRTAyQjk0MDgxMzIwMDAwMDAwMDAwNDE2MQorOjEwMTA4MDAwODE5MDAxMDAxMDAyQkE0MDgxMzIwMDAwMDAwMDAwNDI0RAorOjEwMTA5MDAwODE5MDAxMDAxMjAyQkI0MDgxMzIwMDAwMDAwMDAwNDMzOQorOjEwMTBBMDAwODE5MDAxMDAxNDAyQkM0MDgxMzIwMDAwMDAwMDAwNDQyNQorOjEwMTBCMDAwODE5MDAxMDAxNjAyQkQ0MDgxMzIwMDAwMDAwMDAwNDUxMQorOjEwMTBDMDAwODE5MDAxMDAxODAyQkU0MDgxMzIwMDAwMDAwMDAwNDZGRAorOjEwMTBEMDAwODE5MDAxMDAxQTAyQkY0MDgxMzIwMDAwMDAwMDAwNDdFOQorOjEwMTBFMDAwODE5MDAxMDAxQzAyQzg0MDgxMzIwMDAwMDAwMDAwNDhDRAorOjEwMTBGMDAwODE5MDAxMDAxRTAyQzk0MDgxMzIwMDAwMDAwMDAwNDlCOQorOjEwMTEwMDAwODE5MDAxMDAyMDAyQ0E0MDgxMzIwMDAwMDAwMDAwNEFBNAorOjEwMTExMDAwODE5MDAxMDAyMjAyQ0I0MDgxMzIwMDAwMDAwMDAwNEI5MAorOjEwMTEyMDAwODE5MDAxMDAyNDAyQ0M0MDgxMzIwMDAwMDAwMDAwNEM3QworOjEwMTEzMDAwODE5MDAxMDAyNjAyQ0Q0MDgxMzIwMDAwMDAwMDAwNEQ2OAorOjEwMTE0MDAwODE5MDAxMDAyODAyQ0U0MDgxMzIwMDAwMDAwMDAwNEU1NAorOjEwMTE1MDAwODE5MDAxMDAyQTAyQ0Y0MDgxMzIwMDAwMDAwMDAwNEY0MAorOjEwMTE2MDAwODE5MDAxMDAyQzAyRjA0MDgxMzIwMDAwMDAwMDAwNTAwQworOjEwMTE3MDAwODE5MDAxMDAyRTAyRjE0MDgxMzIwMDAwMDAwMDAwNTFGOAorOjEwMTE4MDAwODE5MDAxMDAzMDAyRjI0MDgxMzIwMDAwMDAwMDAwNTJFNAorOjEwMTE5MDAwODE5MDAxMDAzMjAyRjM0MDgxMzIwMDAwMDAwMDAwNTNEMAorOjEwMTFBMDAwODE5MDAxMDAzNDAyRjQ0MDgxMzIwMDAwMDAwMDAwNTRCQworOjEwMTFCMDAwODE5MDAxMDAzNjAyRjU0MDgxMzIwMDAwMDAwMDAwNTVBOAorOjEwMTFDMDAwODE5MDAxMDAzODAyRjY0MDgxMzIwMDAwMDAwMDAwNTY5NAorOjEwMTFEMDAwODE5MDAxMDAzQTAyRjc0MDgxMzIwMDAwMDAwMDAwNTc4MAorOjEwMTFFMDAwODE5MDAxMDAzQzAyRjg0MDgxMzIwMDAwMDAwMDAwNTg2QworOjEwMTFGMDAwODE5MDAxMDAzRTAyRjk0MDgxMzIwMDAwMDAwMDAwNTk1OAorOjEwMTIwMDAwODE5MDAxMDA0MDAyRkE0MDgxMzIwMDAwMDAwMDAwNUE0MworOjEwMTIxMDAwODE5MDAxMDA0MjAyRkI0MDgxMzIwMDAwMDAwMDAwNUIyRgorOjEwMTIyMDAwODE5MDAxMDA0NDAyRkM0MDgxMzIwMDAwMDAwMDAwNUMxQgorOjEwMTIzMDAwODE5MDAxMDA0NjAyRkQ0MDgxMzIwMDAwMDAwMDAwNUQwNworOjEwMTI0MDAwODE5MDAxMDA0ODAyRkU0MDgxMzIwMDAwMDAwMDAwNUVGMworOjEwMTI1MDAwODE5MDAxMDA0QTAyRkY0MDgxMzIwMDAwMDAwMDAwNUZERgorOjEwMTI2MDAwODE5MDAxMDAwMDAwMDA0MEYwQjEwMTAwNDAwMDAwNDAwQQorOjEwMTI3MDAwQTU5QjAxMDBEODAyMDA0MDgxMzIwMTAwRjgwMjAwNDAyNQorOjEwMTI4MDAwODEzMjAxMDBEMDE0MkUwNkE1QjMwMTAwNDAwMDAwRDMyNgorOjEwMTI5MDAwQTdDQjAxMDAwMDAwMDBGMEYxQjEwMTAwMDAwMDAwRjE1NworOjEwMTJBMDAwRjFCMTAxMDAwMDAwMDBGMkYxQjEwMTAwMDAwMDAwRjQxMgorOjEwMTJCMDAwRjFCMTAxMDAwMDAwMDBGNUYxQjEwMTAwMDAwMDAwRkFGOQorOjEwMTJDMDAwRjFCMTAxMDAwMDAwMDBGQkYxQjEwMTAwMDAwMDAwRkNFMQorOjEwMTJEMDAwRjFCMTAxMDAwMDAwMDBFQkYxQjEwMTAwMDAwMDAwRUVFRgorOjEwMTJFMDAwRjFCMTAxMDAwMDAwMDBFRkYxQjEwMTAwMDAwMDAwRjNENgorOjEwMTJGMDAwRjFCMTAxMDAwMDAwMDBGNkYxQjEwMTAwMDAwMDAwRkRCNQorOjEwMTMwMDAwRjFCMTAxMDBEQjAxMDBDN0UxQjEwMDAwMDAwMDgwNDA0NQorOjEwMTMxMDAwODFCMjAxMDA2NjAyMDA0ODgwMzIwMDAwMDAwMDUxNDBBNgorOjEwMTMyMDAwMUFCMTAxMDAwMDAwNEQ0MDgxQjIwMTAwMDAwMDQ1NDBBQgorOjEwMTMzMDAwODFCMjAxMDA2MzAyQTI0MTgzNTAwMDAwNUYwMjQ5NDA3NAorOjEwMTM0MDAwODFCMjAwMDAwMDAwNTI0MDFDQjEwMTAwMDAwMDRFNDA3QworOjEwMTM1MDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwNjgwMkEyNDE1MgorOjEwMTM2MDAwODM1MDAwMDA1RjAyNEE0MDgxQjIwMDAwMDAwMDAwQTBFQworOjEwMTM3MDAwOUVCMDAxMDAwMDAwMDA4MEQ4QjMwMTAwMDAwMDAwQTE3MQorOjEwMTM4MDAwRDBCMzAxMDAwMDAwMDBBMkQyQjMwMTAwMDAwMDAwQTQwRAorOjEwMTM5MDAwRDRCMzAxMDAwMDAwMDBEMEQ2QjMwMTAwMDAwMDAwRDE5QQorOjEwMTNBMDAwRENCMzAxMDAwMDAwMDBEMkRFQjMwMTAwMDAwMDAwODhDMQorOjEwMTNCMDAwREFCMzAxMDAwMDAwMDBENDhFQjMwMTAwMDAwMDAwRDNCNgorOjEwMTNDMDAwRTZCMzAxMDAwMDAwMDBBQ0VDQjMwMTAwMDAwMDAwOTk5RQorOjEwMTNEMDAwRkFCMzAxMDAwMDAwMDBENUUwQjMwMTAwMDAwMDAwRDUyMQorOjEwMTNFMDAwRTJCMzAxMDAwMDAwMDBENUU0QjMwMTAwMDAwMDAwRDUyNQorOjEwMTNGMDAwRThCMzAxMDAwMDAwMDBENUVBQjMwMTAwMDAwMDAwRDUwOQorOjEwMTQwMDAwRjRCMzAxMDAwMDAwMDBENUY2QjMwMTAwMDAwMDAwRDVFMAorOjEwMTQxMDAwRjhCMzAxMDAwMDAwMDBDN0E5QjEwMTAwMDAwMDAwNEZBRgorOjEwMTQyMDAwNDBCMTAxMDA4NDAyMDA0MDkxQjAwMDAwMDAwMDAwNDE4MgorOjEwMTQzMDAwOTFCMDAxMDAwNzAwMDA0MEEzOUIwMTAwMDgwMDAwRERGRgorOjEwMTQ0MDAwODFGNDAxMDA4ODAyMDA0MDgwQzgwMTAwMDAwMDAwNDBEMworOjEwMTQ1MDAwMTBCMTAwMDA4RDAyMDA0MDgxQjIwMDAwOTgwMjAwNDBFRgorOjEwMTQ2MDAwODFCMjAwMDA5ODAyMDA0NkEzQjMwMDAwOUIwMjAwNDAzNgorOjEwMTQ3MDAwODFCMjAwMDBBMTAyMDA0MDgxQjIwMDAwOEYwMjIzNTAxRgorOjEwMTQ4MDAwQTU2RjAwMDAwMDAwMDA1MEE1QjMwMTAwRTgwMjAwNDI3MworOjEwMTQ5MDAwQTU2MzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDJENDAwNAorOjEwMTRBMDAwNDlCMTAxMDAwMDAwMDBEMEJBQjMwMTAwMDAwMDAwREUyNQorOjEwMTRCMDAwQTFCMTAxMDAwMDAwMDBGODAwQjAwMTAwOTcwMjIyNDQzMQorOjEwMTRDMDAwQTU1MzAwMDA5NDAyMDA0MUExQzEwMDAwNTUwMTAwRERCOAorOjEwMTREMDAwQTFCMTAwMDBFODAyMDBERUExMzMwMTAwRjgwMjAwNDBFMworOjEwMTRFMDAwODEzMjAxMDA1NTAxMDA0MDgxQjIwMDAwMDAwMDAwNDUzQQorOjEwMTRGMDAwQkZCMzAxMDA1MDAxQTJEMjc3N0QwMDAwMDAwMDAwRDJFRQorOjEwMTUwMDAwNjFCMTAxMDAwMDAwMDBERTYzQjEwMTAwOUUwMkE4NDA0RAorOjEwMTUxMDAwODEzMjAwMDA1NTAxMDA0MDgxQjIwMDAwRTgwMjAwNTQxMQorOjEwMTUyMDAwQTUzMzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDJENDBBMworOjEwMTUzMDAwNDlCMTAxMDAwMDAwMDBGOEQwQjMwMTAwMDAwMDAwRjgzQworOjEwMTU0MDAwRDJCMzAxMDAwMDAwMDBGOEQ0QjMwMTAwMDAwMDAwRjg5RAorOjEwMTU1MDAwRDZCMzAxMDAwMDAwMDBGODA4QjEwMTAwQUMwMjAwNDA2MQorOjEwMTU2MDAwODE5ODAxMDA2MDAyMDA0NjgzMzAwMTAwNTUwMTAwNDA2RgorOjEwMTU3MDAwODFCMjAwMDAwMDAwMDBBMDlFQjAwMTAwMDAwMDAwRTg2MQorOjEwMTU4MDAwNDNCMTAxMDAwMDAwMDBFOTQ1QjEwMTAwMDAwMDAwRUE5QworOjEwMTU5MDAwNDlCMTAxMDAwMDAwMDBFQkExQjEwMTAwMDAwMDAwNEZDMworOjEwMTVBMDAwNDBCMTAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMTVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMTVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMTVEMDAwODFCMjAwMDBEMDE0MkU0MDQ5QjEwMTAwMDUwMDAwNDA0NgorOjEwMTVFMDAwQTM5QjAxMDAwMDAwMDA0MEMxQjMwMTAwMDgwMDAwREQyMgorOjEwMTVGMDAwODFGNDAxMDBCRDAyMDA0MDEwQzkwMDAwQzMwMjAwMDVEMworOjEwMTYwMDAwODFCMDAwMDA1MDAxMDA0MDgxQjIwMDAwQ0IwMjAwMDUxMworOjEwMTYxMDAwODFCMDAwMDA1MDAxMDA0MDgxQjIwMDAwRDAwMjAwNDRCRgorOjEwMTYyMDAwQTVCMzAwMDBEMjAyMDA0NEE1QjMwMDAwMDIwMDAwNDBCMAorOjEwMTYzMDAwQTRFNzAxMDAwMDAwMDBFMDgxQjEwMTAwRkZGRjAwQzE0QworOjEwMTY0MDAwRjA4OTAxMDBDODAyMjI0MTgxNTAwMDAwQzQwMjAwNDExQgorOjEwMTY1MDAwQzFDMzAwMDBEQTAyMDA0MDgxMzIwMTAwRjgwMjAwNDBGQworOjEwMTY2MDAwODEzMjAxMDA1NTAxMDA0MDgxQjIwMDAwMDIwMDAwNDBCQgorOjEwMTY3MDAwQTRFNzAxMDAwMDAwMDBFMDkxQjEwMTAwRkZGRjAwQzlGNAorOjEwMTY4MDAwRjA4OTAxMDBDODAyMjI0MTgxNTAwMDAwQ0MwMjAwNDFEMworOjEwMTY5MDAwQzFDMzAwMDBGRkZGMDBERTg1ODkwMTAwQzgwMjAwQzI0RgorOjEwMTZBMDAwRTBCMTAwMDBGRkZGMDBERTk1ODkwMTAwQzgwMjAwQ0ExQQorOjEwMTZCMDAwRTBCMTAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMTZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMTZEMDAwODFCMjAwMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDhCRAorOjEwMTZFMDAwQTlCMzAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0JFNgorOjEwMTZGMDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDI5MworOjEwMTcwMDAwRjFCMTAxMDAwMDAwMDBEM0YxQjEwMTAwMDAwMDAwRDRFQworOjEwMTcxMDAwRjFCMTAxMDAwMDAwMDBEMEUxQjEwMTAwMDAwMDAwRDFGMgorOjEwMTcyMDAwNjFCMTAxMDAyMDAwMDAyMDYyREQwMTAwRTIwMkE4NDA1QQorOjEwMTczMDAwODEzMjAwMDAwMDAwODBDQzg1OTMwMTAwMDQwMDAwNDA0RAorOjEwMTc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMTc1MDAwODFCMjAwMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDgzQworOjEwMTc2MDAwQTlCMzAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0I2NQorOjEwMTc3MDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDIxMgorOjEwMTc4MDAwRjFCMTAxMDAwMDAwMDBEMEYxQjEwMTAwMDAwMDAwRDM3MAorOjEwMTc5MDAwRjFCMTAxMDBFMTAyMDBENEUxQjEwMDAwMDQwMDAwNDAxOQorOjEwMTdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMTdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMTdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMTdEMDAwODFCMjAwMDAwMDAwQTJDQzg1RkYwMDAwMDAwMDAwNTA5NAorOjEwMTdFMDAwODFCMDAxMDBGQTAyQTI0MTgxNTAwMDAwRjkwMkEyRjI4OAorOjEwMTdGMDAwODAzMDAwMDAwMDAwODBDQzg1ODMwMTAwMDQwMDAwNDBBMAorOjEwMTgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMTgxMDAwODFCMjAwMDBCNTAzMDA0MEExOTkwMTAwMDAwMDJGNDFGMgorOjEwMTgyMDAwOTlCMzAxMDAwQTAzMjI0NDgxNkMwMDAwMTIwMzIyNDg4QworOjEwMTgzMDAwODE2QzAwMDAwQzAzMjI0QzgxNkMwMDAwMTYwMzIyNTBDNgorOjEwMTg0MDAwODE2QzAwMDAxNzAzMjI1NDgxNkMwMDAwMTkwMzIyNTg5OAorOjEwMTg1MDAwODE2QzAwMDAxRTAzMjI1QzgxNkMwMDAwNTAwMTAwNDA3RQorOjEwMTg2MDAwODFCMjAwMDAwMDAwMDBCQzA5QjAwMTAwREQ5RjAwQ0E4OQorOjEwMTg3MDAwMDFCMDAwMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDE4MgorOjEwMTg4MDAwRjM4MzAxMDAxMDAzQTI0MjA1NkMwMDAwMDAwMDAwNDEzOAorOjEwMTg5MDAwMDVCMDAxMDBERDlGMjJDQTA3MTQwMDAwREQ5RjAwNDU0RQorOjEwMThBMDAwRjM5MzAwMDBERDlGMjA0Mzk1NkYwMDAwREQ5RjgwQ0EwOQorOjEwMThCMDAwMDUzMDAwMDBERDlGMjIwMTgwMzAwMDAwREQ5RjAwQ0I1RAorOjEwMThDMDAwREI5MTAwMDA1NzAxMDBCQ0FCQjMwMDAwMDAwMDAwQkM3RQorOjEwMThEMDAwQjFCMzAxMDBERDlGMDBDQUNGQjMwMDAwRkYwMDAwQ0ExMgorOjEwMThFMDAwODE4ODAxMDBERDlGQTI0MDc0N0QwMDAwNjAwMDIwNDBERgorOjEwMThGMDAwNjA5OTAxMDAxQjAzQThCMTgyMzAwMDAwMUEwMzAwNDA2OAorOjEwMTkwMDAwODFCMjAwMDBERDlGMDBDQTc5QjMwMDAwMDQwMDAwNDBFRQorOjEwMTkxMDAwODFCMjAwMDAwMDAwMDA0RTgxQjAwMTAwMDAwMDAwNDNEMQorOjEwMTkyMDAwQ0I4MzAxMDAwMDAwNDU0MDgxQjIwMTAwMjIwM0EyNDFBNworOjEwMTkzMDAwODE1MDAwMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDQ1NDA5OAorOjEwMTk0MDAwODFCMjAxMDAyRDAzOTE4MjgyMzAwMDAwMDAwMDAwOEFFNAorOjEwMTk1MDAwODBCMDAxMDBBRTlGMDA0MDgwQ0UwMTAwMkIwM0E2NDA2NgorOjEwMTk2MDAwODEzMjAwMDAyRDAzNTY0MDgxQjIwMDAwQjUwMzAwNDBEMworOjEwMTk3MDAwQTE5OTAxMDAwMDAwMDA1MzA3OTAwMTAwQjUwMzAwNDA0OQorOjEwMTk4MDAwQTE5OTAxMDAwMDAwMDA1MjA3OTAwMTAwRDg5RjAwNDE3QQorOjEwMTk5MDAwOEJCMzAwMDAwMDAwMDA0RTgxQjAwMTAwMDAwMDAwNDI0NworOjEwMTlBMDAwQ0Q4MzAxMDAwMDAwNDY0MDgxQjIwMTAwMzIwM0EyNDExNAorOjEwMTlCMDAwODE1MDAwMDAwMDAwNDY0MDgxQjIwMTAwMDAwMDQ2NDAxNgorOjEwMTlDMDAwODFCMjAxMDAzRDAzOTE4MTgyMzAwMDAwMDAwMDAwODk1NgorOjEwMTlEMDAwODBCMDAxMDBBRTlGMDA0MDgwQ0UwMTAwM0IwM0E2NDBENgorOjEwMTlFMDAwODEzMjAwMDAzRDAzNTU0MDgxQjIwMDAwQjUwMzAwNDA0NAorOjEwMTlGMDAwQTE5OTAxMDAwMDAwMDA1MjA3OTAwMTAwQjUwMzAwNDBDQQorOjEwMUEwMDAwQTE5OTAxMDAwMDAwMDA1MzA3OTAwMTAwRDg5RjAwNDFGOAorOjEwMUExMDAwOEJCMzAwMDBCMDAzMDA0MEExOTkwMTAwQzQxNDJGNDAxMworOjEwMUEyMDAwOTlCMzAxMDA1NzAxMDA0MDQ5QjEwMDAwMDQwMDAwNDA5MworOjEwMUEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMUE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMUE1MDAwODFCMjAwMDAzMDk0MDA0MDQzOTkwMTAwMDA5MDAwRjhFQQorOjEwMUE2MDAwODA5ODAxMDAxMDAwMDBGMjg4RTQwMTAwMjAwMDAwNDA4RQorOjEwMUE3MDAwMjA5OTAxMDAwMDAwMDA1RjIzOTEwMTAwNEQwMzFGOTE5OAorOjEwMUE4MDAwODAzMjAwMDAzMDAwMDA0MDIwOTkwMTAwMDAwMDAwNUYxQgorOjEwMUE5MDAwMjM5MTAxMDA1MDAzMUY5MTgwMzIwMDAwNDAwMDAwNDA1QworOjEwMUFBMDAwMjA5OTAxMDAwMDAwMDA1RjIzOTEwMTAwNTMwMzFGOTE2MgorOjEwMUFCMDAwODAzMjAwMDAwMDAwMDA1RjIzOTEwMTAwNTUwMzFGOTE1OAorOjEwMUFDMDAwODAzMjAwMDAwMDA4ODA0MDIwOTkwMTAwMDQwMDAwNDA5RQorOjEwMUFEMDAwODFCMjAwMDAwMDAwMDA0Nzg0QjAwMTAwMDAwMEEyNDg2RAorOjEwMUFFMDAwODQ4NDAwMDAwMDAwMDA1RjYxQjEwMTAwMDAwMDAwNUMyMAorOjEwMUFGMDAwOEY5MDAxMDAwMDAwMDA0NzYyQjEwMTAwNUEwM0E4NDAyNgorOjEwMUIwMDAwODEzMjAwMDAwMDA4MDA0NzhFQzgwMTAwNTgwMzAwNUNDNQorOjEwMUIxMDAwOEY4MDAwMDBFMDAwMDA0MDYxOTkwMTAwNTgxNTJENDBDMQorOjEwMUIyMDAwOERCMDAxMDBEMDE0MkRGMDg4QjAwMTAwMDAwMDAwRkE0MworOjEwMUIzMDAwOEFCMDAxMDAwMDAwMDA0NTgxQjAwMTAwMDcwMDAwNDVBNworOjEwMUI0MDAwODI4ODAxMDAwMDAwMDA0MzhCRjAwMTAwMDAwMDAwNDg4MworOjEwMUI1MDAwODNFMDAxMDAwMDAwMDA0NjgyOTQwMTAwMjAwMDAwNDE2MworOjEwMUI2MDAwNjA5OTAxMDAwMDAwMDA0MThEQzAwMTAwNzQwMzIyNUZGNAorOjEwMUI3MDAwOEQ2QzAwMDA2NTAzQTI0MTgxNTAwMDAwNjMwMzAwNDBBQQorOjEwMUI4MDAwODFCMjAwMDAwODAwMDA0MDg1OTgwMTAwMDAwMDAwNDQ3OAorOjEwMUI5MDAwODJCMDAxMDAwMDAwMDA0MTg2QjAwMTAwMDAxQzAwNDMzQgorOjEwMUJBMDAwODZEODAxMDAwMDAwQTY0MTg1NTAwMTAwNzAwMzAwNDE2NQorOjEwMUJCMDAwODNFMDAwMDA2RTAzMDA0MDgxMzIwMTAwMDAwMDAwNDgxNQorOjEwMUJDMDAwODVFMDAxMDBEMDE0MkY0Njg0OTQwMTAwMjAwMDAwNDJEQgorOjEwMUJEMDAwNjA5OTAxMDBDMDAwMDA0MDYxOTkwMTAwMDAwMDgwNDA1MAorOjEwMUJFMDAwODFCMjAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMUJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMUMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMUMxMDAwODFCMjAwMDAwNzAwMDA0NTgwODgwMTAwMDAwMDAwNDNGOQorOjEwMUMyMDAwOEJGMDAxMDAwMDA0MDA0MDgzOTgwMTAwODUwM0EwNDE2RgorOjEwMUMzMDAwODE1MDAwMDA4MzAzMDA0MTgyRTgwMDAwMDAwMDgwNDFFMQorOjEwMUM0MDAwOEVDMDAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMUM1MDAwODFCMjAwMDAwMDAwMDA0MDQ5QjEwMTAwMDAwMjAwNDBENAorOjEwMUM2MDAwODM5ODAxMDAwMDM5MDA0MDQ1OTkwMTAwMDAwMDAwNDBDMAorOjEwMUM3MDAwRjFCMTAxMDA4QjAzQTI0MTgzNTAwMDAwMDAwMDAwNDAzRAorOjEwMUM4MDAwODVCMDAxMDAwQjAwMDA0NDgyRjQwMTAwMUExNTAwQTY4MworOjEwMUM5MDAwODZCMDAxMDA3MDE1MDA0MDQ1OTkwMTAwMDAwODAwNDAyMQorOjEwMUNBMDAwRjE5OTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAzOTAwNDA0QworOjEwMUNCMDAwRTE5OTAxMDAwNDAwMDA0MDYxOTkwMTAwNzAxNTAwNDNBMgorOjEwMUNDMDAwNjI5OTAxMDA5NTAzQTg0MDgxMzIwMDAwOTcwMzIyNUFDRgorOjEwMUNEMDAwNzM3RDAwMDA3QTAwMDA0MDYxOTkwMTAwOTgwM0E4QjE2QgorOjEwMUNFMDAwN0UzMTAwMDAwMDA4MDA0Mjg0QzgwMTAwOTAwM0EyNDEzOAorOjEwMUNGMDAwODM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDBEOQorOjEwMUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMUQxMDAwODFCMjAwMDA1ODE1MkQ0MDhEQjAwMTAwRDAxNDJERjA3NworOjEwMUQyMDAwODhCMDAxMDAwMDAwMDA0MDhGQjAwMTAwMDEwMDAwQTY1MworOjEwMUQzMDAwOTBCMDAxMDAwMEY4MDA0ODkwOTgwMTAwMDAwMDAwNDVCNAorOjEwMUQ0MDAwOTNCMDAxMDAwMDAwMDBGQThBQjAwMTAwODAwMzAwNDA1NworOjEwMUQ1MDAwODEzMjAxMDAwMjAwMDBBNjgwQjAwMTAwQUMwMzIyNDBFNQorOjEwMUQ2MDAwODI2QzAwMDBCMDAzMDA0MDgxMzIwMTAwNTgwMzAwNDA0MworOjEwMUQ3MDAwODEzMjAxMDAwMDAwMDA0MThEQzAwMTAwQjUwMzIyNUZFNworOjEwMUQ4MDAwOEQ2QzAwMDBBNzAzQTI0MTkzNTAwMDAwQTUwMzAwNDAwMgorOjEwMUQ5MDAwODFCMjAwMDBGRjA3MDA0Nzg0ODgwMTAwMDAwMEE2NDBEMAorOjEwMURBMDAwODFCMjAwMDBFRDlGMDA0NzgwMzAwMTAwMDAwMjAwNDczMworOjEwMURCMDAwOEVDODAxMDBCMDAzMDA0MDgxQjIwMDAwMDAwMDAwNDQ2MgorOjEwMURDMDAwNTBCMzAxMDBCQjAzMjAxODg5NkMwMDAwMDQwMDAwQTY3QQorOjEwMUREMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDA4MQorOjEwMURFMDAwNTU5QjAxMDBCRTAzMDA0MDgxQjIwMDAwMDQwMDAwQTYyNAorOjEwMURGMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDA2MQorOjEwMUUwMDAwNTU5QjAxMDAwMDAwMDA0MjUwRDMwMTAwMDAwMDAwQThEMworOjEwMUUxMDAwNEZCMzAxMDAwMDAwMDA0MzRFRDMwMTAwNkUwMzAwNDBBOQorOjEwMUUyMDAwODEzMjAxMDA4MjAzMDA0MjgwMzAwMTAwQjAwMzAwNDA5MworOjEwMUUzMDAwODEzMjAxMDBDNzAzMjJBNzhGNkMwMDAwNUEwMzAwNDBDMworOjEwMUU0MDAwODEzMjAxMDBDNDAzMDA0MDgxQjIwMDAwMDAwMDgwNDBFNAorOjEwMUU1MDAwODFCMjAxMDBDODE0MkVCQjg1QjAwMTAwMDAwMDAwRUU2NQorOjEwMUU2MDAwODJCMDAxMDAwMDAwMDA0MUUwQjEwMTAwMDAwMDAwQTJDQQorOjEwMUU3MDAwQTBCMzAxMDAwMDAwMDA0NEE1QjMwMTAwRTE5RjAwQ0EyNworOjEwMUU4MDAwQTczMzAxMDBFMDlGMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMUU5MDAwODFCMjAwMDBENjAzMjI0Mjc1NkYwMDAwRDgwMzIyNDFCMAorOjEwMUVBMDAwNzU2RjAwMDBEQTAzMUVDQTgxMzIwMDAwREMwMzFGQ0EwRQorOjEwMUVCMDAwODEzMjAwMDAwMDAwMDBDQUM5QjEwMTAwREQ5RjAwNDI2QworOjEwMUVDMDAwNzVCMzAwMDAwMDAwMDBDQUNEQjEwMTAwREQ5RjAwNDFFNAorOjEwMUVEMDAwNzVCMzAwMDAwMDAwMDBDQUNGQjEwMTAwREQ5RjAwNDBEMworOjEwMUVFMDAwNzVCMzAwMDAwMDgxMDBBNkM2QjEwMTAwREQ5RjAwNDA2RgorOjEwMUVGMDAwODFCMjAwMDAwMDgwMDBBNkM2QjEwMTAwREQ5RjAwNDA1NQorOjEwMUYwMDAwNzVCMzAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMUYxMDAwODFCMjAwMDA0NTAxMDA0RDkzMzAwMTAwNDUwMTAwNEVBMworOjEwMUYyMDAwOTMzMDAxMDA0NTAxMDA0QzkzMzAwMTAwRUM5RjAwNDBDQworOjEwMUYzMDAwODEzMjAxMDBERDlGMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMUY1MDAwODFCMjAwMDA1NDk1MDA0MDQ1OTkwMTAwREQ5RjAwQ0EwMAorOjEwMUY2MDAwRTVCMTAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMUY5MDAwODFCMjAwMDBDQzE0MkU0MDg3QjAwMTAwMDAwMDAwQTJFNgorOjEwMUZBMDAwQTBCMzAxMDAxNTA0MDA0M0IyMzMwMTAwMDAwMDY4REE1OQorOjEwMUZCMDAwODlCMDAxMDA3QzAwMDA0MDhCOTgwMTAwMDAwMDAwNTBCNworOjEwMUZDMDAwODlGMDAxMDAwMDAwMDA0MTg5RDAwMTAwMDMwMDAwNDRCNQorOjEwMUZEMDAwODg4QzAxMDAwMDAwMDA0NDg3QzAwMTAwMDAwMDAwNDExRgorOjEwMUZFMDAwQTVCMzAxMDAxNTA0MDA0M0IyMzMwMTAwMDAwMDAwREE3QworOjEwMUZGMDAwRjFCMTAxMDAwMDAwMDA0NDg3QzAwMTAwMDAwMDAwNDE3MQorOjEwMjAwMDAwQTVDMzAxMDAwQjA0MjI0NDg5NTAwMDAwMEIwNDIyNDRBNAorOjEwMjAxMDAwOEI1MDAwMDBGQTAzQTI1MEE1NkYwMDAwMDAwMDAwNDJBMAorOjEwMjAyMDAwQTVFMzAxMDAwMDAwMDBDQUE3QjMwMTAwRTE5RjAwQkJDNworOjEwMjAzMDAwODUzMDAxMDBDQzE0MkVEMjk1QzMwMTAwQUUwMzAwQ0IzNQorOjEwMjA0MDAwQTNDOTAxMDAwMDAwMDAyMDQyQjEwMTAwMDAwMDAwNTBCRgorOjEwMjA1MDAwODFCMDAxMDAwODA0QTI0MTgxNTAwMDAwMDcwNEEyRjJFRgorOjEwMjA2MDAwODAzMDAwMDBGQTAzMDA0MEE1QjMwMDAwMDAwMDAwNDJFOQorOjEwMjA3MDAwQTVFMzAxMDAwMDAwMDBDQUE3QjMwMTAwRTE5RjAwQkI3NworOjEwMjA4MDAwODUzMDAxMDBFMDlGMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMjA5MDAwODFCMjAwMDAwMDAwMDBEOTJCQjEwMTAwMDAxMDAwNDAwNworOjEwMjBBMDAwODM5ODAxMDBEQjAwMDA0MDgxMzIwMTAwRkZGRjAwOTRCMworOjEwMjBCMDAwQjQ4QjAxMDAwMDAwODA0MDgxQjIwMTAwMDAwMDAwRDkxMworOjEwMjBDMDAwMkJCMTAxMDAwMDEwMDA0MDgzOTgwMTAwREQwMDAwNDBBQQorOjEwMjBEMDAwODEzMjAxMDAwMDAwODA5NEI0QjMwMTAwMDQwMDAwNDA4QworOjEwMjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMjExMDAwODFCMjAwMDAwMDAwMDBEOTJCQjEwMTAwMDAwMDAwREFGQworOjEwMjEyMDAwMjdCMTAxMDAwNkMwMDA0MDJEOTkwMTAwREUwMDAwNDBFQgorOjEwMjEzMDAwODEzMjAxMDAwMDEwMDA0MDgzOTgwMTAwMDJDNDAwNDE3OAorOjEwMjE0MDAwMkM5OTAxMDBERTAwMDA0MDgxMzIwMTAwMDA0MDAwNDA3NworOjEwMjE1MDAwODM5ODAxMDAwNTgyMDA0MTJDOTkwMTAwREUwMDAwNDBCNworOjEwMjE2MDAwODEzMjAxMDAyRDA0ODA5NDgwMzIwMDAwMEMwMTAwNDA3NworOjEwMjE3MDAwODEzMjAxMDAyODA0MDA0MDgxQjIwMDAwMDQ4MDAwNDA0OAorOjEwMjE4MDAwMkQ5OTAxMDBERTAwMDA0MDgxMzIwMTAwMDAwMDgwNDBGNgorOjEwMjE5MDAwODFCMjAxMDAzMTA0MDAxMjEwQzkwMDAwMDA0ODgwNDBFMworOjEwMjFBMDAwMEI5ODAxMDBDMDQ5ODA0MDBCOTgwMTAwODA0QjgwNDA5MworOjEwMjFCMDAwMEI5ODAxMDA0MDREODA0MDBCOTgwMTAwMDA0RjgwNDA3QgorOjEwMjFDMDAwMEI5ODAxMDBDMDUwODA0MDBCOTgwMTAwODA1MjgwNDA2NQorOjEwMjFEMDAwMEI5ODAxMDA0MDU0ODA0MDBCOTgwMTAwMDA1NjgwNDA0RAorOjEwMjFFMDAwMEI5ODAxMDBDMDU3ODA0MDBCOTgwMTAwODA1OTgwNDAzNworOjEwMjFGMDAwMEI5ODAxMDA0MDVCODA0MDBCOTgwMTAwMDA1RDgwNDAxRgorOjEwMjIwMDAwMEI5ODAxMDBDMDVFODA0MDBCOTgwMTAwODA2MDgwNDAwOAorOjEwMjIxMDAwMEI5ODAxMDA0MDYyODA0MDBCOTgwMTAwMDA2NDgwNDBGMAorOjEwMjIyMDAwMEI5ODAxMDBDMDY1ODA0MDBCOTgwMTAwODA2NzgwNDBEQQorOjEwMjIzMDAwMEI5ODAxMDA0MDY5ODA0MDBCOTgwMTAwMDA2QjgwNDBDMgorOjEwMjI0MDAwMEI5ODAxMDBDMDZDODA0MDBCOTgwMTAwODA2RTgwNDBBQworOjEwMjI1MDAwMEI5ODAxMDA0MDcwODA0MDBCOTgwMTAwMDA3MjgwNDA5NAorOjEwMjI2MDAwMEI5ODAxMDBDMDczODA0MDBCOTgwMTAwODA3NTgwNDA3RQorOjEwMjI3MDAwMEI5ODAxMDA0MDc3ODA0MDBCOTgwMTAwMDA3OTgwNDA2NgorOjEwMjI4MDAwMEI5ODAxMDBDMDdBODA0MDBCOTgwMTAwODA3QzgwNDA1MAorOjEwMjI5MDAwMEI5ODAxMDA0MDdFODA0MDBCOTgwMTAwMDQwMDAwNDAzNAorOjEwMjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMjJEMDAwODFCMjAwMDA1OTA0MDAxMjEwQzkwMDAwMDA4MDgwNDA0MworOjEwMjJFMDAwMEI5ODAxMDAwMDgyODA0MDBCOTgwMTAwMDA4NDgwNDAyMAorOjEwMjJGMDAwMEI5ODAxMDAwMDg2ODA0MDBCOTgwMTAwMDA4ODgwNDAwOAorOjEwMjMwMDAwMEI5ODAxMDAwMDhBODA0MDBCOTgwMTAwMDA4QzgwNDBFRgorOjEwMjMxMDAwMEI5ODAxMDAwMDhFODA0MDBCOTgwMTAwMDA5MDgwNDBENworOjEwMjMyMDAwMEI5ODAxMDAwMDkyODA0MDBCOTgwMTAwMDA5NDgwNDBCRgorOjEwMjMzMDAwMEI5ODAxMDAwMDk2ODA0MDBCOTgwMTAwMDA5ODgwNDBBNworOjEwMjM0MDAwMEI5ODAxMDAwMDlBODA0MDBCOTgwMTAwMDA5QzgwNDA4RgorOjEwMjM1MDAwMEI5ODAxMDAwMDlFODA0MDBCOTgwMTAwMDBBMDgwNDA3NworOjEwMjM2MDAwMEI5ODAxMDAwMEEyODA0MDBCOTgwMTAwMDBBNDgwNDA1RgorOjEwMjM3MDAwMEI5ODAxMDAwMEE2ODA0MDBCOTgwMTAwMDBBODgwNDA0NworOjEwMjM4MDAwMEI5ODAxMDAwMEFBODA0MDBCOTgwMTAwMDBBQzgwNDAyRgorOjEwMjM5MDAwMEI5ODAxMDAwMEFFODA0MDBCOTgwMTAwMDBCMDgwNDAxNworOjEwMjNBMDAwMEI5ODAxMDAwMEIyODA0MDBCOTgwMTAwMDBCNDgwNDBGRgorOjEwMjNCMDAwMEI5ODAxMDAwMEI2ODA0MDBCOTgwMTAwMDBCODgwNDBFNworOjEwMjNDMDAwMEI5ODAxMDAwMEJBODA0MDBCOTgwMTAwMDBCQzgwNDBDRgorOjEwMjNEMDAwMEI5ODAxMDAwMEJFODA0MDBCOTgwMTAwMDQwMDAwNDBGMworOjEwMjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMjQxMDAwODFCMjAwMDAwMDAwMDA0MDg3QjEwMTAwMDAwMDAwNDBEMAorOjEwMjQyMDAwOTdCMDAxMDAwMDAwMDA0QjgwQjEwMTAwMDEwMDAwQTY0MAorOjEwMjQzMDAwODJCMTAxMDA4MjA0ODU0MTk3NDAwMDAwMDAwMDAwNDAwNQorOjEwMjQ0MDAwOTdCMTAxMDAwMDAwMDA0MDk3QjAwMTAwMDAwMDAwNEI3MAorOjEwMjQ1MDAwOTBCMTAxMDAwMTAwMDBBNjkyQjEwMTAwODcwNDg1NDFGRQorOjEwMjQ2MDAwOTc0MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDA1RAorOjEwMjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMjQ5MDAwODFCMjAwMDA5MDA0NjA0MDgxMzIwMDAwMDAwMDAwMTIxMAorOjEwMjRBMDAwODBCMTAxMDBGRkZGRjA0QjgyODkwMTAwOTMwNDYwNDA3RQorOjEwMjRCMDAwODEzMjAwMDAwMDAwMDA0QTgwQjEwMTAwMDEwMEYwQTY1NgorOjEwMjRDMDAwODJCMTAxMDA5NjA0NjA0MDgxMzIwMDAwRkZGRjAwNEJBMgorOjEwMjREMDAwODQ4OTAxMDAwMDAwRjBDMjI0QjAwMTAwMDAwMDAwNEExRAorOjEwMjRFMDAwOTBCMTAxMDBGRkZGODA0QjkyODkwMTAwMDAwMDAwNEE3QgorOjEwMjRGMDAwOTBCMTAxMDAwMTAwODBBNjkyQjEwMTAwRkZGRjAwNEJFNgorOjEwMjUwMDAwOTQ4OTAxMDAwMDAwODBDQTk0QjAwMTAwMDQwMDAwNDBEQQorOjEwMjUxMDAwODFCMjAwMDAxMDAwMDA0RTk4RTQwMTAwMDAwMDAwMDdBNgorOjEwMjUyMDAwOTg5NDAxMDAwMDAwMDA0Mzk5RTAwMTAwMDAwMDAwODA0MQorOjEwMjUzMDAwOTg5NDAxMDAwMDAwMDA0OTk5RTAwMTAwMDAwMDAwNEM1RgorOjEwMjU0MDAwODg5NDAxMDBBNjA0NDc0MDgxMzIwMDAwQUQwNDIyMjA5NworOjEwMjU1MDAwODc2RjAwMDAwMDAwMUY0MDgxQjIwMTAwMDAwMDAwNDBCMgorOjEwMjU2MDAwODFCMjAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwNDA4MworOjEwMjU3MDAwODFCMjAxMDBBNjA0MDA0MDgxQjIwMDAwMDAwMDFGODA2QgorOjEwMjU4MDAwODZCMzAxMDBCMDA0MjI0Rjc3N0QwMDAwQzAwNDAwNDBGNAorOjEwMjU5MDAwODEzMjAxMDAwMDAwMDA0RjYxQjEwMTAwMDAwMDAwNDRFMQorOjEwMjVBMDAwNjJCMTAxMDBCMTA0QTg0MDgxMzIwMDAwQjgwNDIyNEI5RQorOjEwMjVCMDAwODk3QzAwMDBCNjA0MjI0Rjc3N0QwMDAwQzAwNDAwNDBGMworOjEwMjVDMDAwODEzMjAxMDAwMDAwMDA0NTYyQjEwMTAwQjYwNEE4NDA1QworOjEwMjVEMDAwODEzMjAwMDAwMDAwODAyMDg3QjMwMTAwMDQwMDAwNDAyOQorOjEwMjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMjYxMDAwODFCMjAwMDAwMDAwMDA1MDk5QjAwMTAwNkYwMDAwNDAzRQorOjEwMjYyMDAwNjE5OTAxMDBDMTA0QThCMTUyMzMwMDAwQzYwNDIyNEJENQorOjEwMjYzMDAwNTM3RjAwMDA2RjAwMDA0MDYxOTkwMTAwQzQwNEE4QjFGRAorOjEwMjY0MDAwN0UzMTAwMDBDMTA0QTI0MTk5NTAwMDAwMDAwMEEyNEY1OQorOjEwMjY1MDAwNzdGRDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMjY5MDAwODFCMjAwMDAxMDAwMDA0RTk4RTQwMTAwMDAwMDAwMDcyNQorOjEwMjZBMDAwOTg5NDAxMDAwMDAwMDA0Mzk5RTAwMTAwMDAwMDAwODBDMAorOjEwMjZCMDAwOTg5NDAxMDAwMDAwMDA0ODk5RTAwMTAwRDYwNDAwNEMwNQorOjEwMjZDMDAwODg5NDAwMDBENjA0NDc0MDgxMzIwMDAwREQwNDIyMjBCNworOjEwMjZEMDAwODc2RjAwMDAwMDAwMUY0MDgxQjIwMTAwMDAwMDAwNDAzMQorOjEwMjZFMDAwODFCMjAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwNDAwMgorOjEwMjZGMDAwODFCMjAxMDBENjA0MDA0MDgxQjIwMDAwMDAwMDFGODBCQQorOjEwMjcwMDAwODZCMzAxMDBFMDA0MjI0Rjc3N0QwMDAwRjAwNDAwNDAxMgorOjEwMjcxMDAwODEzMjAxMDAwMDAwMDA0RjYxQjEwMTAwMDAwMDAwNDQ1RgorOjEwMjcyMDAwNjJCMTAxMDBFMTA0QTg0MDgxMzIwMDAwRTgwNDIyNEFCRAorOjEwMjczMDAwODk3QzAwMDBFNjA0MjI0Rjc3N0QwMDAwRjAwNDAwNDAxMQorOjEwMjc0MDAwODEzMjAxMDAwMDAwMDA0NTYyQjEwMTAwRTYwNEE4NDBBQQorOjEwMjc1MDAwODEzMjAwMDAwMDAwODAyMDg3QjMwMTAwMDQwMDAwNDBBNworOjEwMjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMjc5MDAwODFCMjAwMDAwMDAwMDA1MDk5QjAwMTAwNkYwMDAwNDBCRAorOjEwMjdBMDAwNjE5OTAxMDBGMTA0QThCMTUyMzMwMDAwRjYwNDIyNEFGNQorOjEwMjdCMDAwNTM3RjAwMDA2RjAwMDA0MDYxOTkwMTAwRjQwNEE4QjE0QworOjEwMjdDMDAwN0UzMTAwMDBGMTA0QTI0MTk5NTAwMDAwMDAwMEEyNEZBOAorOjEwMjdEMDAwNzdGRDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMjgxMDAwODFCMjAwMDA3QjAwMDA0MDYxOTkwMTAwMDAwNUE4QjE3MQorOjEwMjgyMDAwODAzMDAwMDAxMjA1MUQ0MDgwMzIwMDAwNDAxODAwNDAzQQorOjEwMjgzMDAwNDk5OTAxMDAwNDAwMDBBNjg2QjAwMTAwMTAwNUEyNDBERAorOjEwMjg0MDAwODYwNDAwMDBERTlGOUM0MDgwMzIwMDAwRkZGRjAwNDBCNQorOjEwMjg1MDAwODg4ODAxMDAzMDA1MDA1MDQ3MzEwMTAwMzYwMDAwNDRFRgorOjEwMjg2MDAwODhDQzAxMDAwQzA1NTI0MDgxMzIwMDAwMzAwNTAwNDA0OAorOjEwMjg3MDAwNDczMTAxMDAwMDAwMDA0MTg5QjAwMTAwMzAwNTAwNDhFNworOjEwMjg4MDAwNDczMTAxMDAzMDA1MDAwNTQ3MzEwMTAwREU5RjAwNDA1RgorOjEwMjg5MDAwODFCMjAwMDAyODAwMDA0MDQ3OTkxQjAwREU5RjAwNDFFNAorOjEwMjhBMDAwRTFDMTFBMDA3ODE4MDA0MDQ5OTkxQjAwMTkwNTIyNTQwQgorOjEwMjhCMDAwODE3QzFBMDAxNDA1NDI0MDgxMzIxQTAwMDA4MjAwQjM2NAorOjEwMjhDMDAwNjdERjFCMDAwMDAwMUE0NDkzOTMxQjAwMjgwMDAwNDBBMAorOjEwMjhEMDAwNDc5OTFCMDAzMDA1MDA0MTg5MzAwMTAwMjcwNTBGNDA1MgorOjEwMjhFMDAwODAzMjAwMDBGRjdGMDA0MDg4ODgwMTAwMzAwNTAwNTBFMgorOjEwMjhGMDAwNDczMTAxMDAzNjAwMDA0NDg4Q0MwMTAwMUYwNTk5NDA5MworOjEwMjkwMDAwODAzMjAwMDAwMDAwMDA0ODg5RDAwMTAwMjEwNTlCNDA3MgorOjEwMjkxMDAwODAzMjAwMDAwMDAwMDA0Qzg5RDAwMTAwMjMwNTFGNDRENAorOjEwMjkyMDAwODAzMjAwMDAzMDA1MDA0MDQ3MzEwMTAwMDAwMDAwNDFDNgorOjEwMjkzMDAwODlCMDAxMDAzMDA1MDA0ODQ3MzEwMTAwMzAwNTAwNThEQQorOjEwMjk0MDAwNDczMTAxMDBERTlGMDA0MDgxQjIwMDAwMTAwMDAwNDBDRQorOjEwMjk1MDAwODZGNDAxMDA2RjAwMDA0Mzg2ODgwMTAwREU5RjI2MDU5MworOjEwMjk2MDAwNDczMTAwMDAzMDA1MDA0MTg5MzAwMTAwREU5RjAwNDAwMgorOjEwMjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMjk5MDAwODFCMjAwMDAwMDAwQTA0NEYwNDEwMTAwMDAwMDAwNDBBRQorOjEwMjlBMDAwODFCMjAxMDAwMDAwODA0MUUxQzEwMTAwMDQwMDAwNDA0QgorOjEwMjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMjlEMDAwODFCMjAwMDA0QzAxMDAwNzkxMzAwMTAwMDAwMEEyNDBDQworOjEwMjlFMDAwOTdFQzAwMDAwMDAwODAwNTkxQzAwMTAwMDQwMDAwNDA0OQorOjEwMjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMkExMDAwODFCMjAwMDA0QzAxMDA0MDgxMzIwMTAwNDQwNUEyNDAxNworOjEwMkEyMDAwOTc2QzAwMDAzQTAwMDA0MEIzOUIwMTAwNDUwNTAwNDA1MAorOjEwMkEzMDAwODFCMjAwMDA0MDAwMDA0MEIzOUIwMTAwMTAwNDAwNDA0MAorOjEwMkE0MDAwODEzMjAxMDAwMDAwMDBEQUY1QjEwMTAwMTAwNDAwNDJGQgorOjEwMkE1MDAwQjM0MzAxMDAwMDAwMDBEQUY1QjEwMTAwMTAwNDAwNDJBOAorOjEwMkE2MDAwQjM0MzAxMDAwMDAwMDBEQUY1QjEwMTAwNEUwMDAwNDA2MAorOjEwMkE3MDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDgwMDAwREExRAorOjEwMkE4MDAwRjdGNTAxMDA1MDAwMDA0MDkxOTgwMTAwMDAwMDAwNDc1OAorOjEwMkE5MDAwOEZCMDAxMDAxMDA0MDA0OEIyMzMwMTAwMDAwMDAwREFEQQorOjEwMkFBMDAwRjdCMTAxMDAwODAwMDBEQUY3RjUwMTAwMDAwMDAwNDI2QworOjEwMkFCMDAwOTFDMDAxMDA1MDA1QTI0MThGNTAwMDAwMDAwMDAwNDE2QworOjEwMkFDMDAwNDVEMTAxMDAwODAwMDA0MEIzOUIwMTAwMTAwNDAwNDAwNAorOjEwMkFEMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMEEwMDAwNDA2RgorOjEwMkFFMDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREFCNQorOjEwMkFGMDAwRkRCMTAxMDAxQTAwMDA0MEIzOUIwMTAwMTAwNDAwNDAyQQorOjEwMkIwMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMTgwMDAwNDAzMAorOjEwMkIxMDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREE4NAorOjEwMkIyMDAwRkRCMTAxMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg1RgorOjEwMkIzMDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREEzNQorOjEwMkI0MDAwOTFDMDAxMDAwMDAwMDA0OEIyQ0IwMTAwMTAwNDAwNDAxOQorOjEwMkI1MDAwODEzMjAxMDAwMDAwNkVEQThGQjAwMTAwMDIwMDAwNDhFRgorOjEwMkI2MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREEwNQorOjEwMkI3MDAwRkRCMTAxMDAwNDAwMDA0OEIyQ0IwMTAwMTAwNDAwNDA4OAorOjEwMkI4MDAwODEzMjAxMDAwMDAwODBEQUZEQjEwMTAwMDQwMDAwNDA0NAorOjEwMkI5MDAwODFCMjAwMDA3QTA1MjI0NUZEN0YwMDAwNDAxNjAwNDAwQQorOjEwMkJBMDAwNDU5OTAxMDBEQjlGMDA0MDQ5MzEwMTAwMDgwMDAwNDhDMQorOjEwMkJCMDAwQjJDQjAxMDAxNTA0MDA0MDgxMzIwMTAwNzgwNUEyNDAyQgorOjEwMkJDMDAwOEY2QzAwMDA3RDA1MjIyMEI1NkYwMDAwN0EwNTAwNDA2MworOjEwMkJEMDAwODFCMjAwMDBEQTlGMDA0MDgxMzIxRjAwN0QwNTIyNDA1MworOjEwMkJFMDAwOTc2QzFFMDA3QTA1NDI0MDgxMzIxRTAwMDAwMDAwNEZBMworOjEwMkJGMDAwNjc5MzFGMDBERjlGMDA1ODY3OTMxRTAwNTQxNjAwNDAyNAorOjEwMkMwMDAwNDc5OTFGMDAwMDAwMDBGRUY0QjExRjAwMDAwMDAwNDBDMworOjEwMkMxMDAwODFCMjFGMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA3RQorOjEwMkMyMDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA4QworOjEwMkMzMDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA3QworOjEwMkM0MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA2QworOjEwMkM1MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA1QworOjEwMkM2MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwNDYwMDAwNDAwNgorOjEwMkM3MDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDgwMDAwREExQgorOjEwMkM4MDAwRjdGNTAxMDA0ODAwMDA0MDk1OTgwMTAwMDAwMDAwNDQ1RAorOjEwMkM5MDAwOTdCMDAxMDAxMDA0MDA0QUIyMzMwMTAwMDAwMDAwREFDRQorOjEwMkNBMDAwRjdCMTAxMDAwODAwMDBEQUY3RjUwMTAwMDAwMDAwNDI2QQorOjEwMkNCMDAwOTVDMDAxMDA5MDA1QTI0MTk3NTAwMDAwMkEwMDAwNDBGNQorOjEwMkNDMDAwQTU5QjAxMDA0MDE2MDA0MEExOUIwMTAwMDAwMDAwQ0EyNgorOjEwMkNEMDAwQTdCMzAxMDBFMTlGMDBCQjg1MzAwMTAwRTA5RjAwNDBFOQorOjEwMkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMkQxMDAwODFCMjAwMDBCODA1MjI0NUZEN0YwMDAwRTAxNTAwNDBBQgorOjEwMkQyMDAwNDc5OTAxMDAxQTAwMDBBMjgwREMwMTAwMDAwMDAwNTA1OQorOjEwMkQzMDAwRjFCMTAxMDBGMDE1MDA0MEYxOTkwMTAwMDAwMDAwQ0E1NgorOjEwMkQ0MDAwRjFCMTAxMDAwNzAwMDA0MDYxOTkwMTAwMjAwMDAwNDAzRQorOjEwMkQ1MDAwNjJERDAxMDBBNzA1QThCQkUxMzEwMDAwMDAwMDAwNTBDMgorOjEwMkQ2MDAwODNCMDAxMDBBQTA1QTI0MTgzNTAwMDAwQTkwNUEyRjI4OAorOjEwMkQ3MDAwODIzMDAwMDA0QzAxMDA0MDgxMzIwMTAwQjAwNUEyNDBDOQorOjEwMkQ4MDAwOTc2QzAwMDAzQTAwMDA0MEIzOUIwMTAwQjEwNTAwNDA4MQorOjEwMkQ5MDAwODFCMjAwMDA0MDAwMDA0MEIzOUIwMTAwRjAxNTAwNDBFQworOjEwMkRBMDAwNDM5OTAxMDAxMDA0MDA0MDgxMzIwMTAwQjgwNUEyRkFFNQorOjEwMkRCMDAwQjQ2RjAwMDAxMDA0MDA0MkIzNDMwMTAwQjgwNUEyRkE0QQorOjEwMkRDMDAwQjQ2RjAwMDAxMDA0MDA0MkIzNDMwMTAwQkIwNTIyRkFCNworOjEwMkREMDAwQjQ2RjAwMDBCODA1NDI0MDgxMzIyMDAwMDAwMDAwNEU3MAorOjEwMkRFMDAwNjc5MzIxMDBERjlGMDA1ODY3OTMyMDAwNDAxNjAwNDA0MgorOjEwMkRGMDAwNDU5OTIxMDBEQjlGMDA0MDQ5MzEyMTAwRjYxNTAwNDAzNAorOjEwMkUwMDAwNDM5OTIxMDA1QzE2MDA0MDQ1OTkyMTAwMDAwMDZFRkFBQworOjEwMkUxMDAwOEVCMDIxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkVFMQorOjEwMkUyMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU4QQorOjEwMkUzMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRjA4OAorOjEwMkU0MDAwQjRCMzAxMDBDOTA1QTI0MDhGNkMwMDAwRkMxNTIwMjAxRQorOjEwMkU1MDAwRTFCMTAxMDBDRTA1MDA0MDgxQjIyNDAwREE5RjAwNDBCQworOjEwMkU2MDAwODEzMjI1MDBDRTA1MjI0MDk3NkMyNDAwQ0IwNTQyNDBEQworOjEwMkU3MDAwODEzMjI0MDAwMDAwMDA0RjY3OTMyNTAwREY5RjAwNTgzNworOjEwMkU4MDAwNjc5MzI0MDAzODA1MDA0MDgxMzIyNTAwMUUwMDAwNDg2OQorOjEwMkU5MDAwQjJDQjI1MDAxMDA0MDA0MDgxMzIwMTAwRDMwNTIyNTAzRQorOjEwMkVBMDAwQjU2RjAwMDAwMDAwMDA1MDkxQzAwMTAwMDAwMDAwNDgxNAorOjEwMkVCMDAwQjJDQjAxMDBGNjE1MDA0MDQzOTkwMTAwMjAwNDAwRjI1NgorOjEwMkVDMDAwQjQzMzAxMDAwMjAwMDA0OEIyQ0IwMTAwRjgxNTAwNDAwNQorOjEwMkVEMDAwNDM5OTAxMDAyMDA0MDBGMkI0MzMwMTAwMDQwMDAwNDhDQgorOjEwMkVFMDAwQjJDQjAxMDBGQTE1MDA0MDQzOTkwMTAwMjAwNDAwRjIyMgorOjEwMkVGMDAwQjQzMzAxMDAwODAwMDA0OEIyQ0IwMTAwRkMxNTAwNDBDQgorOjEwMkYwMDAwNDM5OTAxMDAwMDAwMDBGMDk0QjAwMTAwRkZGRjAwNEE2NworOjEwMkYxMDAwQjQ4QjAxMDAyMDA0MDA0MDgxMzIwMTAwMEEwMDAwNDgwNworOjEwMkYyMDAwQjJDQjAxMDAxMDAwMDA0QUI0RjcwMTAwMjAwNDAwNDBCOQorOjEwMkYzMDAwODEzMjAxMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg0NgorOjEwMkY0MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwRTkwNTIyNTA5QgorOjEwMkY1MDAwQjU2RjAwMDBFQTA1MDA1MEI1QjMwMDAwMDAwMDAwNDA2NgorOjEwMkY2MDAwQjVCMzAxMDAyMDA0MDA0MDgxMzIwMTAwRTA5RjAwNDAyMQorOjEwMkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMkY5MDAwODFCMjAwMDAwMDE2MDA0MDQ3OTkwMTAwMzAzMTAwNDAyNgorOjEwMkZBMDAwRjU5OTAxMDAzMjMzMDA0MEY1OTkwMTAwMzQzNTAwNDBCNQorOjEwMkZCMDAwRjU5OTAxMDAzNjM3MDA0MEY1OTkwMTAwMzgzOTAwNDA5NQorOjEwMkZDMDAwRjU5OTAxMDA0MTQyMDA0MEY1OTkwMTAwNDM0NDAwNDA1OQorOjEwMkZEMDAwRjU5OTAxMDA0NTQ2MDA0MEY1OTkwMTAwNDc0ODAwNDAzOQorOjEwMkZFMDAwRjU5OTAxMDA0OTRBMDA0MEY1OTkwMTAwMkMwMDAwNDA4NAorOjEwMkZGMDAwODM5ODAxMDAwMDAwMDA0MEY3QjEwMTAwRkMwNUEyNDFFOAorOjEwMzAwMDAwODM1MDAwMDA4MDE2MkUwNjgzQjAwMTAwMzYwMDAwRkJCRQorOjEwMzAxMDAwRjZBOTAxMDBGRjA1QTI0MTgzNTAwMDAwMjIwMDAwNDBGNAorOjEwMzAyMDAwODM5ODAxMDAwMDAwMDBGQkY2QjEwMTAwMDIwNkEyNDFGNgorOjEwMzAzMDAwODM1MDAwMDA2MjAwMDA0MDk1OTgwMTAwREM5RjAwNDAzMgorOjEwMzA0MDAwODEzMjAxMDAwMDE2MkQwNjgzQjAwMTAwODAxNjAwNDA3OQorOjEwMzA1MDAwNDU5OTAxMDA1QzAwMDBGQkY2QTkwMTAwMDgwNkEyNDFBOQorOjEwMzA2MDAwODM1MDAwMDAwMDAwMDA3MEY5QjEwMTAwMDAwMDAwNzEwMQorOjEwMzA3MDAwRjlCMTAxMDAwMDAwMDA3MkY5QjEwMTAwMDAwMDAwNzMxNQorOjEwMzA4MDAwRjlCMTAxMDAwMDAwMDA3NEY5QjEwMTAwNTQwMDAwNDBFMgorOjEwMzA5MDAwOTU5ODAxMDBEQzlGMDA0MDgxMzIwMTAwMDAwMDAwNzAyMworOjEwMzBBMDAwOTVCMDAxMDAxNDA2MjI3MEI1NkYwMDAwMDAwMDgwNDE0OQorOjEwMzBCMDAwOTdCMDAxMDAwMDAwODA0MDk3QjAwMTAwMDQwMDAwNDA3QworOjEwMzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMzBEMDAwODFCMjAwMDA0NTY3MDBBNkUwQjIwMTAwMDEyMzAwNzA0NAorOjEwMzBFMDAwRTE5QTAxMDBDREVGMDBBNkUyQjIwMTAwODlBQjAwNzFDOAorOjEwMzBGMDAwRTM5QTAxMDBCQTk4MDBBNkU0QjIwMTAwRkVEQzAwNzI3NworOjEwMzEwMDAwRTU5QTAxMDAzMjEwMDBBNkU2QjIwMTAwNzY1NDAwNzM4MQorOjEwMzExMDAwRTc5QTAxMDBEMkMzMDBBNkU4QjIwMTAwRjBFMTAwNzQxMgorOjEwMzEyMDAwRTk5QTAxMDA4MDE2MDA0QTQ0QzkwMTAwMDAwMDAwMDcyNgorOjEwMzEzMDAwODFCMDAxMDAwMDAwMDA0QTgwRDAwMTAwMDAwMDAwNDA4MgorOjEwMzE0MDAwRjdCMTAxMDAyNTA2QTI0MTgxNTAwMDAwODAxNjAwNEExNworOjEwMzE1MDAwNDRDOTAxMDBGQzE2MkE0N0U3QjUwMTAwMDMwMDAwNEFGNAorOjEwMzE2MDAwRThFNTAxMDAwMDAwMDA0MDhEQjAwMTAwNTAwMzAwNDA4MAorOjEwMzE3MDAwQTM5OTAxMDA4MDE2M0Q0NjhERTAwMTAwMDAwMDAwNTAzQgorOjEwMzE4MDAwODlCMDAxMDAwMDAwMDBGQzQwQjAwMTAwMDAwMDAwNDFENworOjEwMzE5MDAwQTNDMTAxMDAyRTA2QTI0MTg5NTAwMDAwMDAwMDAwNzA2QQorOjEwMzFBMDAwRUJCMjAxMDAwMDAwMDA3MUVEQjIwMTAwMDAwMDAwNzJGRQorOjEwMzFCMDAwRUZCMjAxMDAwMDAwMDA3M0YxQjIwMTAwMDAwMDAwNzRFMgorOjEwMzFDMDAwRjNCMjAxMDAwMDAwMDA0MDgzQjAwMTAwMEYwMDAwNDE5NQorOjEwMzFEMDAwODA4ODAxMDA1MDAzMDA0MEEyQzkwMTAwNEIwNkEwNTBBNgorOjEwMzFFMDAwODM2QzAwMDAwRDAwMDA0MDk4QzgwMTAwMDAwMDAwNEZGMworOjEwMzFGMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA4NgorOjEwMzIwMDAwODZCMDAxMDAwODAwMDA0MDk4QzgwMTAwMDAwMDAwNEY4RgorOjEwMzIxMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA2NQorOjEwMzIyMDAwODZBNDAxMDAwMjAwMDA0MDk4QzgwMTAwMDAwMDAwNEY4MQorOjEwMzIzMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA0NQorOjEwMzI0MDAwODZBNDAxMDA1MDAzMDA0MEEyQzkwMTAwMDAwMDAwNDMxMQorOjEwMzI1MDAwNDBBNDAxMDAwMTAwMDAyMDg4RTQwMTAwMDAwMDAwNUY5QworOjEwMzI2MDAwNDFGMDAxMDAwMDAwMDA0NDQwOTQwMTAwMDUwMDAwNzU5OQorOjEwMzI3MDAwODlFNDAxMDAxQjAwMDA3NTg1RjQwMTAwMDAwMDAwNDQ5MgorOjEwMzI4MDAwODQ5NDAxMDA1NTA2QTM1MzgzNkMwMDAwMDAwMDAwNzY2RgorOjEwMzI5MDAwODlCMDAxMDAwMDAwMDA3Nzg5ODQwMTAwMDAwMDAwNzZGOQorOjEwMzJBMDAwOEJCMDAxMDAwMDAwMDAyMDhCQTQwMTAwMDAwMDAwNzgxQQorOjEwMzJCMDAwOEI4NDAxMDA2NDA2MDA0NTg4OTQwMDAwMjcwMDAwNDFDQgorOjEwMzJDMDAwODBDRTAxMDA1QTA2QUE0MDgxMzIwMDAwMDAwMDAwNzYzQworOjEwMzJEMDAwODlCMDAxMDAwMDAwMDA3Nzg5QTQwMTAwNjQwNjAwNzgyRAorOjEwMzJFMDAwODlBNDAwMDAzQjAwMDA0MTgwQ0UwMTAwNTcwNkFBNDA5RgorOjEwMzJGMDAwODEzMjAwMDAwMDAwMDA3Njg5QjAwMTAwMDAwMDAwNzdGNAorOjEwMzMwMDAwODk4NDAxMDAwMDAwMDA3NjhCQjAwMTAwMDAwMDAwNzg4NQorOjEwMzMxMDAwOEI4NDAxMDAwMDAwMDA0NTg4OTQwMTAwMDAwMDAwNzdDNAorOjEwMzMyMDAwOEJCMDAxMDAwMDAwMDA3ODhCODQwMTAwNjQwNjAwNDUyQQorOjEwMzMzMDAwODg5NDAwMDAwMDAwMDA0NDg0QzAwMTAwMDAwMDAwNzk2RgorOjEwMzM0MDAwODVDMDAxMDAwMDAwMDAyMDg0QzAwMTAwNkIwNkEzNTM2QgorOjEwMzM1MDAwODM2QzAwMDA4MjVBMDBBNjg0QzAwMTAwOTk3OTAwNDI2MworOjEwMzM2MDAwODRDODAxMDA3ODA2MDA0MDgxQjIwMDAwMjcwMDAwNDFCNworOjEwMzM3MDAwODBDRTAxMDA3MDA2QUE0MDgxMzIwMDAwRDk2RTAwQTZGRQorOjEwMzM4MDAwODRDMDAxMDBBMUVCMDA0Mjg0QzgwMTAwNzgwNjAwNDAxRgorOjEwMzM5MDAwODFCMjAwMDAzQjAwMDA0MTgwQ0UwMTAwNzUwNkFBNDBDQQorOjEwMzNBMDAwODEzMjAwMDAxQjhGMDBBNjg0QzAwMTAwRENCQzAwNDJGQgorOjEwMzNCMDAwODRDODAxMDA3ODA2MDA0MDgxQjIwMDAwNjJDQTAwQTZGRAorOjEwMzNDMDAwODRDMDAxMDBENkMxMDA0Mjg0QzgwMTAwNzgwNjAwNDBENAorOjEwMzNEMDAwODFCMjAwMDAwMDAwMDA3OEYzQjIwMTAwMDAwMDAwNzcyNQorOjEwMzNFMDAwRjFCMjAxMDAxRTAwMDA3Njg5RTQwMTAwMDIwMDAwNzZCRgorOjEwMzNGMDAwRUZGNjAxMDAwMDAwMDA0NEVFOTYwMTAwMDAwMDAwNzVBOQorOjEwMzQwMDAwRURCMjAxMDAwMDAwMDA0MkVBQjIwMTAwMDAwMDAwNDFGQworOjEwMzQxMDAwODNDMDAxMDA0RjAwMDA0MTgwQ0UwMTAwMzcwNjJBNDBFMgorOjEwMzQyMDAwODEzMjAwMDAwMDAwMDA3NUUxQzIwMTAwMDAwMDAwNzY1QQorOjEwMzQzMDAwRTNDMjAxMDAwMDAwMDA3N0U1QzIwMTAwMDAwMDAwNzg0RgorOjEwMzQ0MDAwRTdDMjAxMDAwMDAwMDA3OUU5QzIwMTAwMkIwNjgxNDFCQQorOjEwMzQ1MDAwOEQ0MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDA2NworOjEwMzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMzQ5MDAwODFCMjAwMDAwMDAwMDA1MEZEOTMwMTAwNDAxNjAwNDA4MgorOjEwMzRBMDAwNDU5OTAxMDBEQjlGMDA0MDQ5MzEwMTAwMDgwMDAwNDhCOAorOjEwMzRCMDAwQjJDQjAxMDAxNTA0MDA0MDgxMzIwMTAwQjkwNjIyNDA2MAorOjEwMzRDMDAwOEY2QzAwMDBEQTlGMDA0MDgxMzIwMTAwQjkwNkEyNDBGMworOjEwMzREMDAwOTc2QzAwMDA1RTE2MDA0MDQzOTkwMTAwN0MxNjIwRjZCMAorOjEwMzRFMDAwRTBCMTAxMDAwMDAwMDA0MDMxQjMwMTAwOUQwNjIyNEYxMQorOjEwMzRGMDAwOEY3QzAwMDAwMDAwMDA1MUZEOTMwMTAwOUYwNjIyNDBEOAorOjEwMzUwMDAwOEY3QzAwMDBBMzA2MDA1NEZEOTMwMDAwQTEwNjIyNDIxOAorOjEwMzUxMDAwOEY3QzAwMDAwMDAwMDA1MkZEOTMwMTAwQTMwNjIyNDFCMQorOjEwMzUyMDAwOEY3QzAwMDAwMDAwMDA1M0ZEOTMwMTAwQjcwNjIyNTE3QworOjEwMzUzMDAwRkQ3RjAwMDAzODA1MDA0MDgxMzIwMTAwMEMwMDAwNDg4QQorOjEwMzU0MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwQjIwNkEyNDA1QgorOjEwMzU1MDAwQjU2RjAwMDAxRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDgwNworOjEwMzU2MDAwOTYzMDAxMDAwMDAwMDBEQTk3QzAwMTAwMDQwMDAwNEIxMworOjEwMzU3MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMEUwMDAwNDg2RgorOjEwMzU4MDAwQjJDQjAxMDAyMDA0MDA0MDgxMzIwMTAwMEMwMDAwNDg1MQorOjEwMzU5MDAwQjJDQjAxMDAwMDAwMDAzMEI1QjMwMTAwMjAwNDAwNDBCMAorOjEwMzVBMDAwODEzMjAxMDAwRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDAzRgorOjEwMzVCMDAwODEzMjAxMDBCNjA2MjI0MEI1NkYwMDAwQkEwNjAwNTQwMQorOjEwMzVDMDAwRkQ5MzAwMDAwMDAwMDA1MUZEODMwMTAwMUMwMDAwRkU3RgorOjEwMzVEMDAwN0ZEOTAxMDBCQTA2QTY0MDgxMzIwMDAwMDAwMDAwNTVFNAorOjEwMzVFMDAwRkQ5MzAxMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDAxMgorOjEwMzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMzYxMDAwODFCMjAwMDBFNzlGMDA0MDgxMzIwMTAwQzQwNjIyNUNCNQorOjEwMzYyMDAwMUY3QzAwMDBFMzlGMDA4ODFDQjAwMDAwRTk5RjAwNUM0NQorOjEwMzYzMDAwMUYwMDAxMDAwMDAwMkUwNTQ4QjEwMTAwMDAwMDAwNDBGRAorOjEwMzY0MDAwRTFCMTAxMDAwNDAwMkQwMzQ4QjEwMTAwMDAwMDAwRjBDOQorOjEwMzY1MDAwM0NCMDAxMDAyODAwMDAxNDAyQzgwMTAwMDAwMDAwMDE3NQorOjEwMzY2MDAwMzRCMDAxMDAwMDAwMkQwNTMyQjAwMTAwMjIwMDAwMDUzOQorOjEwMzY3MDAwMEFDODAxMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwRjg1QQorOjEwMzY4MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjhDQworOjEwMzY5MDAwMEVCMDAxMDAwQzAwMDBBNDBDQzgwMTAwRUE5RjAwNDAxRAorOjEwMzZBMDAwODEzMjAxMDAwMDAwMDA0MDIzQjAwMTAwMEEwNzIyMDExRQorOjEwMzZCMDAwODAzMjAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJFQTQwMgorOjEwMzZDMDAwODBCMDAxMDAwMDAwMDAxMDQ4QzEwMTAwRDkwNkEzMDcyNgorOjEwMzZEMDAwMDI2QzAwMDBEQTA2NjgwMTFBQjAwMDAwMDAwMDY4MDdGQQorOjEwMzZFMDAwMUFCMDAxMDAwMDAwMDAwRDAyRDAwMTAwMDAwMDAwMDUyQQorOjEwMzZGMDAwRjBCMTAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDI3OAorOjEwMzcwMDAwRTBCMTAxMDAwMDAwMDAwRDBBQzAwMTAwRUMwNjIyNDBGQgorOjEwMzcxMDAwMDM2QzAwMDBFNjA2MjI0MjIzNkMwMDAwMDAwMDAwNDExQQorOjEwMzcyMDAwMjNDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwQTQ5NworOjEwMzczMDAwNjJERDAxMDAyMzA3Mjg0MDgxMzIwMDAwRTMwNjAwNDBEQgorOjEwMzc0MDAwODFCMjAwMDAwMDAwMDAxMDgwQzAwMTAwMDAwMDAwNDdBRQorOjEwMzc1MDAwNjFCMTAxMDAwMDAwMDA0MDYyQjEwMTAwRTgwNkE4NDAyQworOjEwMzc2MDAwMjMzMDAwMDBFMzlGMDA4ODFDQjAwMDAwMjMwNzAwNDBDNgorOjEwMzc3MDAwODFCMjAwMDAwMDAwMDAxMDgwQzAwMTAwMDAwMDAwNDc3RQorOjEwMzc4MDAwNjFCMTAxMDAwMDAwMDA0MDYyQjEwMTAwRUUwNkE4NDBGNgorOjEwMzc5MDAwMjMzMDAwMDBFMzlGMDA4ODFDQjAwMDAwMjIwMDAwMTlDNQorOjEwMzdBMDAwNDhDOTAxMDAwMDAwMkQxNDQ4QzEwMTAwMEYwMDAwRjJCQgorOjEwMzdCMDAwM0E4ODAxMDAwMDAwMDA0MjNCRTAwMTAwMEUwMDAwMTRDNgorOjEwMzdDMDAwMDJDODAxMDAwMDAwMDAxRDAyQzAwMTAwRkEwNjIzMUExMQorOjEwMzdEMDAwMDI1MDAwMDAwMDAwMDA0NjAzQzAwMTAwMjMwNzAwMDE2MgorOjEwMzdFMDAwMzRDMDAwMDAwQzAwMkQxRDQ4QzEwMTAwRjAwMDAwRjJBMworOjEwMzdGMDAwMzA4ODAxMDAwMDAwMDA0MjMxRjAwMTAwMDAwMDAwMTQ5OAorOjEwMzgwMDAwMDJCMDAxMDAwMDAwMDAxRDAyQzAwMTAwMDAwMDAwMTgwRAorOjEwMzgxMDAwMDJDMDAxMDAwMjA3MjIxQTAyNTAwMDAwMjMwNzAwMDEyMworOjEwMzgyMDAwMzRDMDAwMDAyMjAwMDAxOTQ4QzkwMTAwMDIwMDJEMTQxNAorOjEwMzgzMDAwNDhDMTAxMDAwMDAwMDBGNjE0QjAwMTAwMDAwMDAwMURBNgorOjEwMzg0MDAwMTREMDAxMDAwMDAwMDAxODE0RDAwMTAwMDAwMDAwMUU3OAorOjEwMzg1MDAwMjRCMDAxMDAxMjAwMDAxNzEwQzgwMTAwMjMwNzAwMUE0RAorOjEwMzg2MDAwMTBDMDAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDAwQTQ2MAorOjEwMzg3MDAwODZCMDAxMDAwMDAwMkUxMDQ4QzEwMTAwMEYwN0EzMTJGRQorOjEwMzg4MDAwMEU2QzAwMDAxMDA3NjAwNzFBQjAwMDAwMDAwMDYwMTIwNAorOjEwMzg5MDAwMUFCMDAxMDAwMDAwNjgwRDE2OTQwMTAwRkZGRjAwMEIzNAorOjEwMzhBMDAwMTZEODAxMDAwMDAwMDAwOEYwQjEwMTAwMDAwMDAwMEM3MworOjEwMzhCMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMTBDMgorOjEwMzhDMDAwODZDMDAxMDAwMDAwMDA0NjYxQjEwMTAwMjAwMDAwNDNGNQorOjEwMzhEMDAwNjJERDAxMDAxNzA3QTg1QzFGMTAwMDAwNDAwNzIyMERFMQorOjEwMzhFMDAwMTQ1MDAwMDA0MDA3MjIwRDI0NTAwMDAwMDAwMDAwMEQ3RAorOjEwMzhGMDAwMTBDMDAxMDAxRTA3MjI0MjIzNkMwMDAwMjMwNzAwNDE3NAorOjEwMzkwMDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTAyQgorOjEwMzkxMDAwNjJERDAxMDAxRjA3QTg1QzFGMDAwMDAwRTM5RjAwODgxNAorOjEwMzkyMDAwMUNCMDAwMDAwMDAwMDA0MDIzQjAwMTAwM0YwN0EyMERDMgorOjEwMzkzMDAwMEU1MDAwMDAyRTA3MjI0NjFGN0MwMDAwMDAwMDAwNDZBQgorOjEwMzk0MDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwMkMwNzIyRjJDNAorOjEwMzk1MDAwNjQwNjAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTA1MworOjEwMzk2MDAwNjJERDAxMDAyOTA3QTg0MDgxMzIwMDAwRTM5RjAwODg0MgorOjEwMzk3MDAwMUNCMDAwMDAyMDgwMDAwMzQ2OTkwMTAwMDAwMDAwNUY5OQorOjEwMzk4MDAwRTE5MTAxMDAwMDAwMkQwNjQ4QjEwMTAwMDAwMDAwRjg5RgorOjEwMzk5MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMzMwNzFGRjA2OAorOjEwMzlBMDAwMEUzMDAwMDBEMzA2MDA0QzBEQzAwMDAwMDAwMDJFNUY1QQorOjEwMzlCMDAwMEY4MDAxMDBEMzA2MjMwNzE0NkMwMDAwMzAwMDAwMTBCNAorOjEwMzlDMDAwNDhDOTAxMDAyNDAwMDA0MEYxOTkwMTAwMDAwMDAwMDNGMworOjEwMzlEMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTY4RAorOjEwMzlFMDAwRjBCMTAxMDAyNDAwMDAwMDAwQzgwMTAwMDAwMDAwNDcwMQorOjEwMzlGMDAwNjFCMTAxMDAyMDAwMDBBNDYyREQwMTAwM0MwN0E4NDY3RgorOjEwM0EwMDAwMUYxMDAwMDBEMzA2MDAwMzBDQjAwMDAwRDMwNjAwMEQwOQorOjEwM0ExMDAwMThDMDAwMDA1RjA3QTI0NDFGN0MwMDAwMDAwMDAwMTlDRQorOjEwM0EyMDAwMEFCMDAxMDAyMjAwMDAwNTQ4QzkwMTAwMEEwMDJEMTQ1NworOjEwM0EzMDAwNDhDMTAxMDAwMjAwMjA0MEU1QjEwMTAwMDQwMDIwNDAxRgorOjEwM0E0MDAwRTVCMTAxMDAwRDAwMkQxRDQ4QzEwMTAwMDkwMDAwRjM4MgorOjEwM0E1MDAwMzg4ODAxMDAwRDAwMjA1MEU3QjEwMTAwMDQwMDJENDAxRQorOjEwM0E2MDAwM0ZCMDAxMDAwMDAwMDBGNDMyQjAwMTAwMDQwMDIwNDAyQgorOjEwM0E3MDAwRTFCMTAxMDAyMjAwMDAwNTQ4QzkwMTAwMDAwMDJEMTQzOQorOjEwM0E4MDAwNDhDMTAxMDAwMjAwMDAxRDk0RjQwMTAwMDAwMDAwNDA0NAorOjEwM0E5MDAwOTFCMDAxMDA1MjA3QTBGQzkwNDAwMDAwMDAwMDAwNDFERQorOjEwM0FBMDAwOTFDMDAxMDA1MDA3QTI0MTk1NTAwMDAwMDAwMDAwQTQwMQorOjEwM0FCMDAwOTZCMDAxMDAwNDAwMkUwNTQ4QjEwMTAwMDAwMDAwNDg0NgorOjEwM0FDMDAwRjBCMTAxMDAwMDAwMDA0QjQ4QjEwMTAwMDAwMDAwMThGNworOjEwM0FEMDAwNDhDMTAxMDAwMjAwMDAxODk0RjQwMTAwMDAwMDJEMThGNAorOjEwM0FFMDAwOTBCMDAxMDA1QzA3QTBGQzkwNDAwMDAwMDAwMDAwNDE4NQorOjEwM0FGMDAwOTFDMDAxMDA1QTA3QTI0MTk1NTAwMDAwMDAwMDAwNDgwMworOjEwM0IwMDAwRTBCMTAxMDAxMDAwMjA0MEU1QjEwMTAwMDQwMDJEMDVFNgorOjEwM0IxMDAwNDhCMTAxMDAwMDAwMDBGODgwQjAyRDAwMDAwMDAwRjA2NgorOjEwM0IyMDAwMTZCMDJEMDAyMjAwMDAwNTQ4QzkyRDAwMDAwMDAwMTQyOQorOjEwM0IzMDAwNDhDMTJEMDA2NDA3NDMzMDNEMDcyQzAwMDAwMDAwOUU2MworOjEwM0I0MDAwODVCMDJEMDAwMDAwMUI0MTNEQzMyRDAwMDQwMDIwNDIyNAorOjEwM0I1MDAwRUNCMTJEMDAwMDAwMDAxRTgyQjAwMTAwMDIwMDJFMURGRAorOjEwM0I2MDAwODJDMDAxMDAwMDAwNjYxODgyQzAwMTAwMDAwMDAwNDIwRgorOjEwM0I3MDAwODBDMDAxMDA2RTA3QTA0MTgwNDQwMDAwMDAwMDAwNDFBOQorOjEwM0I4MDAwODFDMDAxMDAxMDAwMDA0MDkyRjQwMTAwMEEwMDJFMzBCNAorOjEwM0I5MDAwODE4NDAxMDA3MjA3OTA0MDkyNDAwMDAwMDAwMDAwNDFDMworOjEwM0JBMDAwOTNDMDAxMDAwMDAwNjYyMDkzQTQwMTAwMDAwMDAwMURFNgorOjEwM0JCMDAwNDhDMTAxMDAwNDAwMjAxOUU4QjEwMTAwMDAwMDAwMUUwNgorOjEwM0JDMDAwMTZDMDAxMDA3ODA3QTAxOTE2NDQwMDAwMDAwMDAwNDE0QgorOjEwM0JEMDAwMTdDMDAxMDAwRDAwMkYxRTMyQzAwMTAwN0QwN0EyNDA1QQorOjEwM0JFMDAwMTU2QzAwMDA3QzA3QTAxQzE2NDAwMDAwMDAwMDAwNDE3RQorOjEwM0JGMDAwMTdDMDAxMDAwMDAwNjNGMzM4OTQwMTAwMTAwMDAwMDVCNQorOjEwM0MwMDAwNDhDOTAxMDAwNDAwMkUxRTk4QjAwMTAwMDAwMDYwMUE4RgorOjEwM0MxMDAwOThDMDAxMDAwQzAwMjA0MEUxQjEwMTAwOEIwNzIyNDY1MgorOjEwM0MyMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTA1MworOjEwM0MzMDAwNDJDOTAxMDA4OTA3MjJGMjY0MDYwMDAwMDAwMDAwNDcyMworOjEwM0M0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwODYwN0E4NDA1QworOjEwM0M1MDAwODEzMjAwMDBFMzlGMDA4ODFDQjAwMDAwMjA4MDAwMDMzOAorOjEwM0M2MDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMzA4MDAwMTBFMgorOjEwM0M3MDAwNDRDOTAxMDAxMjAwMDAxQUYwQzkwMTAwMDAwMDAwMTczOQorOjEwM0M4MDAwRjBCMTAxMDAxMDAwMDAwNUUwQzkwMTAwMzAwMDAwMTA5MworOjEwM0M5MDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDAyNAorOjEwM0NBMDAwNjJERDAxMDA5MTA3QTg0MDgxMzIwMDAwOUIwNzIyNUM4MQorOjEwM0NCMDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTBBOAorOjEwM0NDMDAwNDhDMTAxMDA5QjA3MjJGMjY0MDYwMDAwMDAwMDAwNDY4NAorOjEwM0NEMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOTgwN0E4NDBCQQorOjEwM0NFMDAwODEzMjAwMDBFMzlGMDA4ODFDQjAwMDAwRUI5RjAwNUM2NQorOjEwM0NGMDAwMUYwMDAxMDAyMDAwMkYwNTQ4QjEwMTAwMDAwMDAwMEI0QgorOjEwM0QwMDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwQTEwNzkwRjI5QgorOjEwM0QxMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjBBRQorOjEwM0QyMDAwMTdBNDAxMDAxMDAwMDAxNDJBQzgwMTAwMDAwMDAwMURBMworOjEwM0QzMDAwMkFDMDAxMDAwMDAwMDA1MDJCRTAwMTAwMDAwMDAwRjI0QQorOjEwM0Q0MDAwMkE5NDAxMDAzMDgwMDAxMDQyQzkwMTAwQUMwNzIyRjIyMQorOjEwM0Q1MDAwNjQwNjAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA1MgorOjEwM0Q2MDAwNjJERDAxMDBBOTA3QTg0MDgxMzIwMDAwRTM5RjAwODhCRQorOjEwM0Q3MDAwMUNCMDAwMDAwMDgwMDAxNzEwREMwMTAwQzkwNzIyNDBDMQorOjEwM0Q4MDAwMTU2QzAwMDBCNDA3QTI0NDFGN0MwMDAwMDAwMDAwNDQzMgorOjEwM0Q5MDAwMUY5MDAxMDBCMzA3MjI5RjEzNkMwMDAwMDIwMDAwODhFRgorOjEwM0RBMDAwMUNDQzAxMDBFNDlGMDA0MDgxQjIwMDAwMDAwMDAwNDFGMworOjEwM0RCMDAwM0ZDMzAxMDBFNjlGMDA0MDgxMzIwMTAwQjcwN0EyNDFFNgorOjEwM0RDMDAwODc3QzAwMDAwMDAwMDAxRTNFQzAwMTAwQzkwNzIyNDBBMQorOjEwM0REMDAwMTU2QzAwMDBCQTA3MjAxRTE0NkMwMDAwMDAwMDAwMEFEOQorOjEwM0RFMDAwM0NCMDAxMDBFNTlGMDAxRTI0MzAwMTAwQkYwNzIyMDhGRgorOjEwM0RGMDAwMkUzMDAwMDAwMDAwMDA1MjExQzAwMTAwMDAwMDAwMUEyNworOjEwM0UwMDAwMTBDMDAxMDAyMzA3MDA0MDE3QjAwMDAwRTQ5RjAwODhBNQorOjEwM0UxMDAwMUNCMDAwMDBFNTlGMDA0MDgxMzIwMTAwQkMwN0EyMDhGMQorOjEwM0UyMDAwMkUzMDAwMDA4MDgwMDBBNjA0QjAwMTAwMDYwMDAwNDA5MworOjEwM0UzMDAwODc5ODAxMDAwMDgwMDAwMzQ0OTkwMTAwMDQwMDIyMDRENworOjEwM0U0MDAwRTAzMTAwMDBFODlGMDAxRjhDMzAwMTAwMDAwMDAwNDBCRQorOjEwM0U1MDAwMEZCMDAxMDBFMjlGMDA1QzFGOTAwMDAwMDA4MDAwMDM5MworOjEwM0U2MDAwNDQ5OTAxMDAwNDAwMjIwNEUwMzEwMDAwRTY5RjAwNDA3NAorOjEwM0U3MDAwODEzMjAxMDBDRTA3QTI0MTg3N0MwMDAwQ0YwNzAwMUVERgorOjEwM0U4MDAwM0VDMDAwMDAwMDAwMDAxRjhDQjAwMTAwMDAwMDAwNDA5OAorOjEwM0U5MDAwMDVCMDAxMDBFODlGMDA0MDBGMzAwMTAwRTI5RjAwNUM4OAorOjEwM0VBMDAwMUY5MDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwM0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwM0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwM0VEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwM0VFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwM0VGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwM0YwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwM0YxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwM0YyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwM0YzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwM0Y0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwM0Y1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwM0Y2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwM0Y3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwM0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwM0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwM0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwM0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwM0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwRjcwNzAwQkM4RAorOjEwM0ZEMDAwODBCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBGNgorOjEwM0ZFMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBFNQorOjEwM0ZGMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBENQorOjEwNDAwMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBDNAorOjEwNDAxMDAwODFCMjAwMDAzMTgwMDA0MDgxQjIwMDAwMzQ4MDAwNDA1NQorOjEwNDAyMDAwODFCMjAwMDAzNTgwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNDAzMDAwODFCMjAwMDAxQjgwODE4MDgwMzIwMDAwMTQ4N0EyNDA4MgorOjEwNDA0MDAwOTE2RjAwMDAwMDAwMDA0QzkwQjMwMTAwNUM5NTJFQTIxRgorOjEwNDA1MDAwODBCMDAxMDBGRjAwMDA4MEY0ODkwMTAwOTA5NTJBQzgxQgorOjEwNDA2MDAwRTVCMTAxMDAwMDAwMDBBMUYwQjEwMTAwMDAwMDAwNDAzNgorOjEwNDA3MDAwRjBCMTAxMDAwMDAwMDBBNEYwQjEwMTAwMDAwMDAwRDA4OAorOjEwNDA4MDAwRjBCMTAxMDAwMDAwMDBEMUYwQjEwMTAwMDAwMDAwRDI0OQorOjEwNDA5MDAwRjBCMTAxMDAwMDAwMDA0Q0YwQjEwMTAwMDAwMDAwRDRCQworOjEwNDBBMDAwRjBCMTAxMDAwMDAwMDBEM0YwQjEwMTAwMDAwMDAwRUUwQgorOjEwNDBCMDAwRjBCMTAxMDAwMDAwMDA0RUYwQjEwMTAwMDAwMDAwNDAyRQorOjEwNDBDMDAwNDRCMTAxMDAxODgwMTE4MTk4MzAwMDAwMDAwMDUxNDA3NworOjEwNDBEMDAwODFCMjAxMDAxQTgwMTE4Mjk4MzAwMDAwMDAwMDUyNDAyNQorOjEwNDBFMDAwODFCMjAxMDAxNDg3MDA0OEZEOTMwMDAwQjYwMzAwNDAzMAorOjEwNDBGMDAwQTE5OTAxMDAyMzgwQTI0MkZEN0YwMDAwMjA4MDAwODA2MgorOjEwNDEwMDAwODAzMjAwMDAyMjgwMTE4MTgyMzAwMDAwMjI4MDUxNDBFNAorOjEwNDExMDAwODFCMjAwMDAyMjgwMTE4MjgyMzAwMDAwMjI4MDUyNDA1MQorOjEwNDEyMDAwODFCMjAwMDAyQzgwMDA0OEZEOTMwMDAwMjc4MDAwODBCMQorOjEwNDEzMDAwODAzMjAwMDAyNjgwQTI1MzA3N0MwMDAwMDAwMDUxNTMwQgorOjEwNDE0MDAwMDc5MDAxMDAyQTgwMDA1MjA3OTAwMDAwMjk4MEEyNTJBNworOjEwNDE1MDAwMDc3QzAwMDAwMDAwNTI1MjA3OTAwMTAwMDAwMDAwNTM0RAorOjEwNDE2MDAwMDc5MDAxMDAwMDAwMDA0OEZEOTMwMTAwMDAwMDAwNDY5OAorOjEwNDE3MDAwRjM5MzAxMDA1Qzk1MkVBMjUyQjMwMTAwRkYwMDAwODA3MgorOjEwNDE4MDAwRjQ4OTAxMDAwMDAwMDA0Q0U0QjEwMTAwMDAwMDAwQTkyNgorOjEwNDE5MDAwNDVCMTAxMDAzMDgwMDA0QzgwQjIwMDAwMDAwMDQ1NDA3NQorOjEwNDFBMDAwODFCMjAxMDAwMDAwNTU0MDgxQjIwMTAwQUY4MjA1NDA5QworOjEwNDFCMDAwNDlCMTAwMDBBRjgyMDU0MDQ5QjEwMDAwMDAwMDA1NDA1MAorOjEwNDFDMDAwNDlCMTAxMDA0QzAxMDA0MDgxMzIwMTAwMDAwMDAwNEI2OAorOjEwNDFEMDAwREVCMjAxMDAwMDAwMDA0MEZEOTMwMTAwMDAwMDAwNDgzNQorOjEwNDFFMDAwRkQ4MzAxMDAwMjAwMDA0MDlCOUIwMTAwMDAwMDAwQTUzMAorOjEwNDFGMDAwOUNCMzAxMDA0ODAzMDA0MDgxMzIwMTAwNTg5NTIwNDRERgorOjEwNDIwMDAwRTBCMTAxMDAwNDk0MDA0MDQzOTkwMTAwMDAwMDAwRjI3NQorOjEwNDIxMDAwMjRCMTAxMDAwMDBDMDBFRTk2ODgwMTAwMDAwMDAwNEE2NQorOjEwNDIyMDAwOTdGMDAxMDA0NDgwQTI0Mzk3NkMwMDAwMDAwMDAwNDIxOAorOjEwNDIzMDAwRkQ5MzAxMDAwMEMwMDBBNjM2QjEwMTAwRDAxNDAwNDA3QgorOjEwNDI0MDAwNDc5OTAxMDAwNTAwMDA0MEY1OTkwMTAwMDAzODAwNDA0MQorOjEwNDI1MDAwRjU5OTAxMDAwMDA2MDA0MEY1OTkwMTAwMDAwMDAwNDBCQQorOjEwNDI2MDAwRjU5OTAxMDAwNTEwMDA0MEY1OTkwMTAwMDIwOTAwNDA5MAorOjEwNDI3MDAwRjU5OTAxMDAwNDAwMDA0MEY1OTkwMTAwNjAwMzAwNDAzOQorOjEwNDI4MDAwODEzMjAxMDA4ODAzMDA0MDgxMzIwMTAwQTAwMzAwNDAxOAorOjEwNDI5MDAwODEzMjAxMDBBMjgyMDA0MDgxMzIwMTAwOUE4MjAwNDBGNgorOjEwNDJBMDAwODEzMjAxMDA2MDk1MjA0MEUxQjEwMTAwNzA5NTIwNDAwRAorOjEwNDJCMDAwRTFCMTAxMDAwMDAwMDA0OUREOTEwMTAwMDAwMDAwNDA3MworOjEwNDJDMDAwOTFCMzAxMDBGOTk1MDA0MDgxMzIwMTAwMDAwMDAwNDBFNworOjEwNDJEMDAwODVCMzAxMDA1Qzk1MjA0MEUxQjEwMTAwMjc4MjAwNDBEOAorOjEwNDJFMDAwODEzMjAxMDA5MDA2MDA0MDgxMzIwMTAwMDAwMDAwNUYzMQorOjEwNDJGMDAwMkY4MTAxMDA4RDgxMDA0MDgxMzIwMTAwRkU5NTAwNDAzOAorOjEwNDMwMDAwODEzMjAxMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDU1NDBBQgorOjEwNDMxMDAwODFCMjAxMDBERDgyMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwNDMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNDMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNDM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNDM1MDAwODFCMjAwMDAyODAwMDA0MDQ3OTkwMTAwQUY4MjAwNDE2RgorOjEwNDM2MDAwRTFDMTAwMDA3ODE4MDA0MDQ5OTkwMTAwMTkwNTIyNTQ2NAorOjEwNDM3MDAwODE3QzAwMDA2QzgwNDI0MDgxMzIwMDAwMDA4MjAwQjRFOQorOjEwNDM4MDAwNjlERjAxMDAwMDAwMUE0NDkzOTMwMTAwMjgwMDAwNDBGNworOjEwNDM5MDAwNDc5OTAxMDAxODA1MDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNDNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNDNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNDNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNDNEMDAwODFCMjAwMDA0MDgyMDA0MDgxMzIwMTAwN0Q4MDIyNDA5NQorOjEwNDNFMDAwOTc2QzAwMDA3QTgwNDI0MDgxMzIwMDAwMDAwMDAwNEY0QworOjEwNDNGMDAwNjk5MzAxMDAzODgxMDA1ODY5OTMwMDAwNTQxNjAwNDAwOQorOjEwNDQwMDAwNDc5OTAxMDAwMDAwMDBGRUY0QjEwMTAwODAwNTAwNDA2MgorOjEwNDQxMDAwODFCMjAwMDA4MDgwNDI0MDgxMzIwMDAwMDAwMDAwNEVFNgorOjEwNDQyMDAwNjk5MzAxMDAzODgxMDA1ODY5OTMwMDAwNDAxNjAwNDBFQworOjEwNDQzMDAwNDU5OTAxMDA0MDA1MDA0MDQ5MzEwMTAwRjYxNTAwNDA1MgorOjEwNDQ0MDAwNDM5OTAxMDA1QzE2MDA0MDQ1OTkwMTAwMDAwMDZFRkE5NgorOjEwNDQ1MDAwOEVCMDAxMDBDMTA1MDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNDQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNDQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNDQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNDQ5MDAwODFCMjAwMDA5NjgwMDA0MDgxQjIwMDAwNDA4MjAwNDA1RQorOjEwNDRBMDAwODEzMjAxMDA5NjgwMjI0MDk3NkMwMDAwOTM4MDQyNDA0OAorOjEwNDRCMDAwODEzMjAwMDAwMDAwMDA0RjY5OTMwMTAwMzg4MTAwNThFQworOjEwNDRDMDAwNjk5MzAwMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg1OQorOjEwNDREMDAwQjJDQjAxMDBEMDA1MDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNDRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNDRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNDUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNDUxMDAwODFCMjAwMDA4MzAyMDA0MDgxQjIwMDAwQjgwMjAwNDA3NgorOjEwNDUyMDAwODFCMjAwMDBENDlGMDA0MDgxQjIwMDAwRDU5RjAwNDBCRQorOjEwNDUzMDAwODFCMjAwMDBENjlGMDA0MDgxQjIwMDAwRDc5RjAwNDBBQQorOjEwNDU0MDAwODFCMjAwMDA3MjAxMDA0MTgxQzAwMDAwNTUwMTUxNDg1NAorOjEwNDU1MDAwRkQ5MzAwMDA1NTAxNTI0OEZEOTMwMDAwNTUwMTU1NDk1NworOjEwNDU2MDAwRkQ4MzAwMDA1NTAxNTY0QUZEODMwMDAwNTAwMTkxODFGMgorOjEwNDU3MDAwODAzMDAwMDA1NTAxNDU0MDgxQjIwMDAwNTAwMTkxODIxOQorOjEwNDU4MDAwODAzMDAwMDA1NTAxNDY0MDgxQjIwMDAwMDAwMDAwNDAyQworOjEwNDU5MDAwODlCMDAxMDAwMDAwMDBGODgwQjAwMTAwMDAwMDAwRjBDOAorOjEwNDVBMDAwMTZCMDAxMDAyMjAwMDAwNTQ4QzkwMTAwMDAwMDAwMTRGNworOjEwNDVCMDAwNDhDMTAxMDBCNDgwNDMzMDNEMDcwMDAwMDAwMDAwOUU2OAorOjEwNDVDMDAwODVCMDAxMDAwMDAwMUI0MTNEQzMwMTAwMDQwMDIwNDJGMgorOjEwNDVEMDAwRUNCMTAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0I4NgorOjEwNDVFMDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDI3NAorOjEwNDVGMDAwRjFCMTAxMDAwMDAwMDBEM0YxQjEwMTAwMDAwMDAwNDI2MAorOjEwNDYwMDAwRjBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMjA3MAorOjEwNDYxMDAwNjJERDAxMDAwMDAwQThEMEUxQjEwMDAwQkY4MDAwNDBEMQorOjEwNDYyMDAwODFCMjAwMDAwMDAwMDBBODk4QjAwMTAwMDQ4MDAwNDBBMgorOjEwNDYzMDAwOEJCMzAwMDBCMTAzMDA0MEExOTkwMTAwQzc4MEEyNDJFMgorOjEwNDY0MDAwOTc2RjAwMDAwMDAwMDA0NUExQzEwMTAwMDAwMDAwMDBCQworOjEwNDY1MDAwODBCMDAxMDAwMDAwQTIwNDgwOTQwMDAwODAxNTNGNDI1OQorOjEwNDY2MDAwOTdFMzAxMDAwMDAwMDA0MDQ5QjEwMTAwMDAwMDYwMDMzMQorOjEwNDY3MDAwMDI5NDAxMDAwMDAwMDA0MDA3QjAwMTAwMDQwMDAwQ0JEQworOjEwNDY4MDAwOTlDQjAxMDAwMDAwMDBDQ0YzODMwMTAwRDE4MEEyNDI0RAorOjEwNDY5MDAwOTc2RjAwMDAwMDAwMDBDQkYzOTMwMTAwQUUwMzAwQ0I0NgorOjEwNDZBMDAwQTNDOTAxMDAwMDAwMDAyMDQ0QjEwMTAwMDAwMDAwNDQ0MworOjEwNDZCMDAwRjFCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMDRCMQorOjEwNDZDMDAwRjBCMTAxMDAwMDAwMDBBMUUwQjEwMTAwMDUwMDAwNDBEMAorOjEwNDZEMDAwNjE5OTAxMDAyMDAwMDAyMDYyREQwMTAwRDg4MEE4NDAxRgorOjEwNDZFMDAwODEzMjAwMDBGOTAyMDAyMDQyMzEwMTAwMDAwMEEyNDFBNQorOjEwNDZGMDAwMDU2QzAxMDAwMDAwODBDQkRCOTEwMTAwMDAwMDE5NDEzNgorOjEwNDcwMDAwOEJCMzAxMDA2MDAwMDA0MDYxOTkwMTAwREU4MEE4QjExOAorOjEwNDcxMDAwOEMzMzAwMDA2MDAwMDA0MDYxOTkwMTAwRTA4MEE4QjE4NgorOjEwNDcyMDAwOTQzMzAwMDBFNjgwMTRDNjgxMzIwMDAwMTgwMDAwQzZGMQorOjEwNDczMDAwODNGNDAxMDBGNDgyMjI0RjgzMDQwMDAwQzI4MDAwNDAxMQorOjEwNDc0MDAwODFCMjAwMDBGRjAxMDBDNjgxODgwMTAwMDAwMDAwQzZBMAorOjEwNDc1MDAwOTdBMzAxMDBDMjgwMUY1Qzk3NTMwMDAwNTg4MjFFQzZCOQorOjEwNDc2MDAwODEzMjAwMDAwMDAwMkY0MzgxRjAwMTAwRUM4MDAwNDAwNgorOjEwNDc3MDAwMTBDOTAwMDAzOTgxMDA0MDgxQjIwMDAwNkE4MTAwNDAwOAorOjEwNDc4MDAwODFCMjAwMDAyNDgyMDBDQTYzQjMwMDAwNjE4MTAwNDA0RQorOjEwNDc5MDAwODFCMjAwMDA0ODgxMDA0RDgzQjAwMDAwNTI4MTAwNEU3QworOjEwNDdBMDAwNjFCMTAwMDA0MTgxMDA0MDg1QjAwMDAwNDg4MTAwNENBQgorOjEwNDdCMDAwODNCMDAwMDAyNDgxMDA0MDg1QjAwMDAwRTM4MTAwNDAwOAorOjEwNDdDMDAwNDlCMTAwMDA3MTgxMDA0MEMxQjEwMDAwREY4MTAwNDBBQgorOjEwNDdEMDAwODFCMjAwMDA0MTgxMDA0MDg1QjAwMDAwRjAwMzAwNDAzQworOjEwNDdFMDAwNDlCMTAwMDBGNDgyMDBDQTlCQjMwMDAwN0I4MTAwNDAwNQorOjEwNDdGMDAwQzFCMTAwMDA3RjgxMDA0MEMxQjEwMDAwODY4MTAwNDA0RQorOjEwNDgwMDAwQzFCMTAwMDA4NzgxMDA0MEMxQjEwMDAwODg4MTAwNDAzMworOjEwNDgxMDAwQzFCMTAwMDA4OTgxMDA0MEMxQjEwMDAwOEE4MTAwNDAxRgorOjEwNDgyMDAwODFCMDAwMDA4QTgxMDA0MTgxQjAwMDAwMTg4MjAwNDAwMAorOjEwNDgzMDAwODFCMjAwMDA5NzgyMDBCQkFCQjMwMDAwMjU4MjAwQ0FBMgorOjEwNDg0MDAwQ0ZCMzAwMDBDODAzMDA0MDQ5QjEwMDAwRTgwMzAwNDBCNgorOjEwNDg1MDAwODFCMjAwMDAyNjgyMDA0MDgxQjIwMDAwRjQ4MjAwNDA1NAorOjEwNDg2MDAwODFCMjAwMDBFMDAzMDA0MDgxQjIwMDAwRjQ4MjAwQ0E3RgorOjEwNDg3MDAwNzdCMzAwMDA0OTgxMDA0RDgzQjAwMDAwNTA4MTAwNEVBNQorOjEwNDg4MDAwNjFCMTAwMDA0MTgxMDBCQjg1QjAwMDAwNDk4MTAwNEM0RQorOjEwNDg5MDAwODNCMDAwMDA0MTgxMDBCQjg1QjAwMDAwMjQ4MTAwQkJEMworOjEwNDhBMDAwODVCMDAwMDAxNjgxMDA0MDgxQjIwMDAwRjQ4MjAwQ0E4OQorOjEwNDhCMDAwNERCMzAwMDA3MDA1MDA0MDQ5QjEwMDAwQTAwNTAwNDA2NAorOjEwNDhDMDAwNDlCMTAwMDAxQzgxMjI0MjhGNkYwMDAwMUU4MTIyNDFFRAorOjEwNDhEMDAwOEY2RjAwMDAyMDgxMUVDQTgxMzIwMDAwMjI4MTFGQ0ExMgorOjEwNDhFMDAwODEzMjAwMDAwMDAwMDBDQUM5QjEwMTAwRjQ4MjAwNDIxOAorOjEwNDhGMDAwOEZCMzAwMDAwMDAwMDBDQUNEQjEwMTAwRjQ4MjAwNDE3NgorOjEwNDkwMDAwOEZCMzAwMDAwMDAwMDBDQUNGQjEwMTAwRjQ4MjAwNDA2NAorOjEwNDkxMDAwOEZCMzAwMDAwMDgxMDBBNkM2QjEwMTAwRjQ4MjAwNDAwMAorOjEwNDkyMDAwODFCMjAwMDAwMDgwMDBBNkM2QjEwMTAwRjQ4MjAwNDAwMAorOjEwNDkzMDAwOEZCMzAwMDA3ODE4MDA0MDQ5OTkwMTAwMTAwMDJGOUNBNworOjEwNDk0MDAwODlCMDAxMDAzQjgxMDA0MDM5MzMwMTAwMTgwMDJGOUJFMgorOjEwNDk1MDAwODlCMDAxMDAzQjgxMDA0MDM3MzMwMTAwMDAwMDJGOUFFRAorOjEwNDk2MDAwODlCMDAxMDAzQjgxMDA0MDM1MzMwMTAwMDgwMDJGOTlEOAorOjEwNDk3MDAwODlCMDAxMDAzQjgxMDA0MDMzMzMwMTAwMDA4MDAwQUU2QworOjEwNDk4MDAwNDdDOTAxMDA4MDAwMDA0MEYxOTkwMTAwMDAwMDAwQ0EwMQorOjEwNDk5MDAwRjFCMTAxMDAwMDAwMDA0MkYwQjEwMTAwNDAxODAwNDBGOAorOjEwNDlBMDAwRTE5OTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwQUU2NgorOjEwNDlCMDAwNjNERDAxMDAzNjgxMjg0MDgxMzIwMDAwMzM4MTAwNDBGMAorOjEwNDlDMDAwODFCMjAwMDAzNjgxNDI0MDgxMzIwMDAwMDAwMDAwNUM2QworOjEwNDlEMDAwNjk5MzAxMDBGNDgyMUE0NDkzOTMwMDAwMzk4MTQyNDBBNAorOjEwNDlFMDAwODEzMjAwMDAzODgxMDA1ODY5OTMwMDAwMDAwMDAwNDRDMworOjEwNDlGMDAwRjBEMTAxMDAwMDAwQTQ0MDgxQjIwMDAwNDA4MUEyNDAzQgorOjEwNEEwMDAwRTE2RDAwMDAwMDAwMDA0NDQ1RDEwMTAwMDAwMDgwNDAzRAorOjEwNEExMDAwRTFCMTAxMDAwMDAwODA0MUUxRDEwMTAwNDE4MTM3NUMzQQorOjEwNEEyMDAwNjEzMTAwMDAwMDAwMDA0MjYyQjEwMTAwNDU4MTI4NDA3MAorOjEwNEEzMDAwODEzMjAwMDA0MjgxMDA0MDgxQjIwMDAwMDAwMDAwQ0FDMworOjEwNEE0MDAwNjNCMTAxMDA0NTgxQTg0MDgxMzIwMDAwRjQ4MjE3NDAyMworOjEwNEE1MDAwODFCMjAwMDA0QTgxMDA0MDgxQjAwMDAwNEE4MTAwQkI2MQorOjEwNEE2MDAwODFCMDAwMDAwMDAwMDA0MTYwQjEwMTAwMDAwMDAwNDA4MgorOjEwNEE3MDAwNjJCMTAxMDA0QjgxQTg0MDgxMzIwMDAwMDAwMDAwQ0FGMQorOjEwNEE4MDAwNjNCMTAxMDBGNDgyMjg0MDgxMzIwMDAwNEQ4MTAwNDA3MgorOjEwNEE5MDAwODFCMjAwMDA1MDk1MDA0MDQ3OTkwMTAwNTM4MTAwQkI0RQorOjEwNEFBMDAwODdCMDAwMDA1MDk1MkY0MDg3QjAwMTAwNTU4MTIyNDAwQgorOjEwNEFCMDAwOTU3RjAwMDBGNDgyNjA0MDk1ODMwMDAwMDIwMDJERjA5NQorOjEwNEFDMDAwODRCMDAxMDA1NjgxMzY0MDgxMzIwMDAwMDAwMDAwNDI2RgorOjEwNEFEMDAwNjJCMTAxMDA1NzgxQTg0MDgxMzIwMDAwMDAwMDAwNDMwQworOjEwNEFFMDAwNjJCMTAxMDA1OTgxQTg0MDgxMzIwMDAwMDAwMDAwQ0E3MworOjEwNEFGMDAwNjNCMTAxMDA1QjgxQTg0MDgxMzIwMDAwMDAwMDE2NDBENAorOjEwNEIwMDAwODFCMjAxMDBGNDgyMjI0MTQzNTEwMDAwMDAwODAwQ0EzMgorOjEwNEIxMDAwOTVDQjAxMDA1NjgxMDA0MTg1QzAwMDAwNjM4MUEyNDIwRgorOjEwNEIyMDAwNjc2RjAwMDAwMDAwMDA0MTY3QjMwMTAwNjM4MTQyNDBFRAorOjEwNEIzMDAwODEzMjAwMDAwMDAwMDA0MDY1QjMwMTAwMDAwMDAwNDAyOQorOjEwNEI0MDAwOTM4MzAxMDAwMDAwMUFDQTY5OTcwMTAwRjQ4MjI2NDA4RAorOjEwNEI1MDAwODEzMjAwMDA2ODgxNDI0MDgxMzIwMDAwRjQ4MjFBNDRCMAorOjEwNEI2MDAwOTM5MzAwMDBGNDgyMjA0Mzk1NkYwMDAwRjQ4MjgwQ0E4MgorOjEwNEI3MDAwNjczMzAwMDBGNDgyMjI0MDY1NkYwMDAwRjQ4MjAwNkYwQQorOjEwNEI4MDAwREI5MTAwMDA4NTAwMDA0MDgxMzIwMTAwMzU4MDIyNDAyOQorOjEwNEI5MDAwODAzMjAwMDBGNDgyMDA0MDgxQjIwMDAwMDAwMDAwNTgyMgorOjEwNEJBMDAwOTU5MzAxMDAwMDAwMDA1Rjk1OTMwMTAwNzc4MUEyNDQ3NgorOjEwNEJCMDAwMjE2RjAwMDAwMDAwMDA1Rjk1ODMwMTAwMDAwMDAwNUU4RgorOjEwNEJDMDAwOTU5MzAxMDAwMDAwMDA1Nzk1OTMwMTAwMDAwMDAwQ0E3MgorOjEwNEJEMDAwQzNCMTAxMDA3QTgxMjI1Qjk1N0YwMDAwMDAwMDAwNEI4OQorOjEwNEJFMDAwRkQ5MzAxMDBGNDgyMDA0MDgxQjIwMDAwMUJGRDAwQ0E2OQorOjEwNEJGMDAwOTU5QjAxMDAwRDAxMDBDQUM1MzEwMTAwMDAwMDAwNUY1NgorOjEwNEMwMDAwOTU4MzAxMDBGNDgyMDBDQUM1QjEwMDAwREY2RjAwQ0FCRAorOjEwNEMxMDAwOTU5QjAxMDAwMDAwMDA1NTk1OTMwMTAwMDAwMDAwQ0ExQgorOjEwNEMyMDAwQzdCMTAxMDBGNDgyMjI1Rjk1N0YwMDAwMEQwMTAwNDBCMgorOjEwNEMzMDAwODEzMjAxMDAwMDAwMDA1Rjk1ODMwMTAwRjQ4MjAwQ0EwOAorOjEwNEM0MDAwQzdCMTAwMDBGNDgyMDBDQUM5QjEwMDAwRjQ4MjAwQ0FGMgorOjEwNEM1MDAwQ0JCMTAwMDBGNDgyMDBDQUNEQjEwMDAwRjQ4MjAwQ0FEQQorOjEwNEM2MDAwQ0ZCMTAwMDAwMDAwMkU0MjgxRTAwMTAwOTgxNDAwNDAwNgorOjEwNEM3MDAwNDhDOTAxMDBGNDgyMDBDQUUxQjEwMDAwMDAwMDAwNDAxMAorOjEwNEM4MDAwMDlCMTAxMDAyMDAwMDBBNjgyQjAwMTAwOEY4MUEyNUU2MAorOjEwNEM5MDAwMEI3RDAwMDAwMDgwMDA0MTA4OTkwMTAwOTE4MUEyNUUxNworOjEwNENBMDAwMEI3RDAwMDAyMDgwMDBBNjA4QjEwMTAwOTM4MTlGODU0NAorOjEwNENCMDAwODIzMDAwMDAwMDAwMDAzMDgzODQwMTAwQzg4MTIyMzA2RgorOjEwNENDMDAwODM2QzAwMDA5MjgxQTI0RjBCN0QwMDAwMDAwMDAwNDEyOAorOjEwNENEMDAwMjFCMzAxMDAwMjgwMDBBNjgyQjAwMTAwMTM4MjAwNDBDRgorOjEwNENFMDAwODEzMjAxMDAxMDAwMDA0MTg0RTQwMTAwMDM4MDAwQTYyRAorOjEwNENGMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwRjBGRjAwNDFDOAorOjEwNEQwMDAwODY4ODAxMDAwMDAwMDA0Mzg0OTQwMTAwMEYwMDAwQTY4MworOjEwNEQxMDAwODZCMDAxMDAxMEM0MDA0Mzg2OTgwMTAwQTg4MUEyNDMxOAorOjEwNEQyMDAwODQ2QzAwMDAwMDAwMDA0MzIxQjMwMTAwMjAwMDAwQTZCNQorOjEwNEQzMDAwODJCMDAxMDAxQzAwMDA0MTgyREMwMTAwQTU4MUEyNUU1RQorOjEwNEQ0MDAwMEI3RDAwMDAwNDAwMDA0MTA4OTkwMTAwQkE4MTAwNDA3OQorOjEwNEQ1MDAwODFCMjAwMDA0MTAxMDBBNjg2QjAwMTAwNTAwQzAwNDM2MgorOjEwNEQ2MDAwODY5ODAxMDBBRDgxQTI0Mzg0NkMwMDAwMDAwMDAwNDFFMAorOjEwNEQ3MDAwMjFCMzAxMDBCQTgxMDA0MDgxQjIwMDAwNDEwMTAwQTZDOAorOjEwNEQ4MDAwODZCMDAxMDA2MDBDMDA0Mzg2OTgwMTAwQkE4MUEyNDNGRQorOjEwNEQ5MDAwODQ2QzAwMDAwMDAwMDA0MjIxQjMwMTAwMTg4MDAwQTZDRQorOjEwNERBMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwRkZGRjAwNDEwOAorOjEwNERCMDAwODI4ODAxMDAwMDc3MDA0MTgyOEMwMTAwMDEwMjAwNDFERAorOjEwNERDMDAwODI5ODAxMDAyMDAwMDA0MTgyREMwMTAwMTgwMDAwNDFBRgorOjEwNEREMDAwODJEQzAxMDBCODgxQTI1RTBCN0QwMDAwMDAwMDAwNDE3MgorOjEwNERFMDAwMDhCMTAxMDAyMDAwMDBBNjgyQjAwMTAwQkI4MUEyNUVENAorOjEwNERGMDAwMEI3RDAwMDA0MDEzMDA0MTA4OTkwMTAwQzM4MTIyNDM0QworOjEwNEUwMDAwMjE2RjAwMDAyMDAwMDBBNjgyQjAwMTAwMTIwMDAwNDFDNgorOjEwNEUxMDAwODJEQzAxMDBDMDgxQTI1RTBCN0QwMDAwMDAwNDAwNDEyNQorOjEwNEUyMDAwMDg5OTAxMDBERTgxMDA0MDgxQjIwMDAwMjAwMDAwQTY0OAorOjEwNEUzMDAwODJCMDAxMDAxOTAwMDA0MTgyREMwMTAwQzU4MUEyNUU0MAorOjEwNEU0MDAwMEI3RDAwMDAwMEEwMDA0MTA4OTkwMTAwREU4MTAwNDBCOAorOjEwNEU1MDAwODFCMjAwMDAwMDAwMDA0NDIxQjMwMTAwMDAwMDAwNDBDNgorOjEwNEU2MDAwODNCMDAxMDAwMDAwMDA1RjgzOTAwMTAwMDAwMDAwNUUzRAorOjEwNEU3MDAwODM5MDAxMDAwMDAwMDA1NzgzOTAwMTAwMDAwMDAwNDE3MgorOjEwNEU4MDAwQzJCMTAxMDAwQzAxMDA0MDgxMzIwMTAwMDAwMDAwNUY0RQorOjEwNEU5MDAwODM4MDAxMDAwMDAwMDA0MUMyQjEwMTAwMEMwMTAwNDAwQworOjEwNEVBMDAwODEzMjAxMDAyMDAwMDBBNjgyQjAwMTAwMDQwMDAwNDExMAorOjEwNEVCMDAwODJEQzAxMDAyMDAwMDA0MTA4OTkwMTAwMjAwMDAwQTZDQQorOjEwNEVDMDAwODJCMDAxMDAxMTAwMDA0MTgyREMwMTAwRDc4MUEyNUVBNgorOjEwNEVEMDAwMEI3RDAwMDAwMTAwMDA0MTA4OTkwMTAwMjAwMDAwQTZBMAorOjEwNEVFMDAwODJCMDAxMDBEQTgxQTI1RTBCN0QwMDAwNDAxMzAwNDExOAorOjEwNEVGMDAwMDg5OTAxMDAwMTAwMDBBNjgyQjAwMTAwNDAwMDAwNDFCNQorOjEwNEYwMDAwMkU5OTAxMDAwMDAwODA0MDgxQjIwMTAwMjAwMDAwQTYxRgorOjEwNEYxMDAwODBCMDAxMDAwMDAwMDBDQTgxOTQwMTAwRTE4MUEyNUUxRQorOjEwNEYyMDAwMEI3RDAwMDBGNDgyMDA0MDA4QjEwMDAwQzgxNDJFQkJDNQorOjEwNEYzMDAwODVCMDAxMDBFNDgxQTI1RTBCN0QwMDAwMDAwMDAwNDAwRQorOjEwNEY0MDAwODdCMDAxMDBGMzgxMjI0MzIxNkYwMDAwMDI4MjIyNDRENgorOjEwNEY1MDAwMjE2RjAwMDAxMTgwMDBBNjgyQjAwMTAwMTM4MjAwNDA4MgorOjEwNEY2MDAwODEzMjAxMDAwQTgyMjI0QTgzN0MwMDAwMDAwMDAwNDA1NgorOjEwNEY3MDAwODc5MDAxMDBFRTgxMjI0RDgzN0MwMDAwMDAwMDAwNDFGQgorOjEwNEY4MDAwODc5MDAxMDBGMDgxMjI0RjgzN0MwMDAwMDAwMDAwNDNFNQorOjEwNEY5MDAwODc5MDAxMDBGMjgxMjI0RTgzN0MwMDAwMDAwMDAwNDJENQorOjEwNEZBMDAwODc5MDAxMDAwQTgyMDA0MDgxQjIwMDAwMDE4MDAwQTZDMworOjEwNEZCMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwMDE4MDAwQTYwRQorOjEwNEZDMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwMEE4MjIyNDIzNQorOjEwNEZEMDAwODM3QzAwMDAwMDAwMDA0MDg3OTAwMTAwMUM4MDAwQTYzOAorOjEwNEZFMDAwODJCMDAxMDAxMzgyMDA0MDgxMzIwMTAwRkQ4MTIyNDUyMAorOjEwNEZGMDAwODM3QzAwMDAwMDAwMDA0MTg3OTAwMTAwRkY4MTIyNDQ3MworOjEwNTAwMDAwODM3QzAwMDAwMDAwMDA0Mzg3OTAwMTAwMDE4MjIyNDM1RQorOjEwNTAxMDAwODM3QzAwMDAwMDAwMDA0Mjg3OTAwMTAwMEE4MjAwNDA2QgorOjEwNTAyMDAwODFCMjAwMDAwMTgwMDBBNjgyQjAwMTAwMTM4MjAwNDAxRQorOjEwNTAzMDAwODEzMjAxMDAwMTgwMDBBNjgyQjAwMTAwMTM4MjAwNDA4RAorOjEwNTA0MDAwODEzMjAxMDAwQTgyMjI0MjgzN0MwMDAwMDAwMDAwNDA3RAorOjEwNTA1MDAwODc5MDAxMDAwMDAwMDA0Mzg3OTAwMTAwMDAwMDAwNDE5QworOjEwNTA2MDAwODc5MDAxMDAwMDgwMDBBNjgyQjAwMTAwMTM4MjAwNDBGQQorOjEwNTA3MDAwODEzMjAxMDAwRTgyMjI0QjgzN0MwMDAwMDAwMDAwNDA0MAorOjEwNTA4MDAwODc4MDAxMDAwMDAwMDA0M0UwQjEwMTAwRkY3RjAwQTIyMworOjEwNTA5MDAwQTA4QjAxMDAwMDAwMDA0NEE1QjMwMTAwQjg4MDAwQ0E0NQorOjEwNTBBMDAwQTczMzAxMDAzNjgxMDA0MDgxQjIwMDAwMjAwMDAwNDE5QQorOjEwNTBCMDAwODJEQzAxMDAxNDgyQTI1RTBCN0QwMDAwMDAwMDAwNDEzMgorOjEwNTBDMDAwMDhCMTAxMDAxNjgyOUY4NTgyMzAwMDAwMDAwMDgwNDBGOAorOjEwNTBEMDAwODFCMjAxMDAxQjgyMTRGNzgxMzAwMDAwMUI4MkEyNDlCQgorOjEwNTBFMDAwRkQ3RjAwMDAwMDAwMDA0OEZEOTMwMTAwMUU4MjE1RjhCRQorOjEwNTBGMDAwODExNDAwMDAxRTgyQTI0QUZEN0YwMDAwMDAwMDAwNDhDQgorOjEwNTEwMDAwRkQ5MzAxMDAyMDgyQTJDODgxMzIwMDAwNDAwMDAwNDBDRgorOjEwNTExMDAwODBEQzAxMDAwMDEwMDA0MDgwREMwMTAwMDAwMDAwNDA0NQorOjEwNTEyMDAwRUZCMzAxMDAyMjgyNDI0MEYxMzMwMDAwMzg4MTAwNDA5OQorOjEwNTEzMDAwNjg5NzAwMDBGNDgyMDBCQjZCQjMwMDAwRjQ4MjAwQkJGMAorOjEwNTE0MDAwQjFCMzAwMDBGNDgyMDA0MDgxQjIwMDAwMDAwMzAwNDBDRgorOjEwNTE1MDAwODE5ODAxMDAwMDAwMDA0MDE4QjEwMTAwODAwMDAwNDA2QgorOjEwNTE2MDAwODM5ODAxMDAwMDE5MDA0MDQ1OTkwMTAwMDAwMDQyNDA2OQorOjEwNTE3MDAwODFCMjAxMDAwMDAwNDNGRkYxQjEwMTAwMDAwMDAwRkYxNworOjEwNTE4MDAwRjFCMTAxMDAwMDAwMDA0MTgxQzAwMTAwMDAwMDAwNDBCOQorOjEwNTE5MDAwMThCMTAxMDAyQjgyQTI0MTgzNTAwMDAwMDAxNjAwNDA4QworOjEwNTFBMDAwNDU5OTAxMDAwMDE5MDA0MDQzOTkwMTAwMDAwMDAwNDdBMworOjEwNTFCMDAwNDNDMTAxMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwRjM4MworOjEwNTFDMDAwODBCMDAxMDAwMDAwMDA1QjgxRDAwMTAwMDAwMDAwNDFDMAorOjEwNTFEMDAwODBEMDAxMDAwMDAwMDA0MEY2QjEwMTAwMDAwMDAwNUIzQgorOjEwNTFFMDAwNDNDMTAxMDAwMDAwMDA0MTgzQzAwMTAwMzU4MkEyNTQ4OAorOjEwNTFGMDAwODM2QzAwMDAwMDAwMDA0MEY3QjEwMTAwMDAwMDAwNDE5NgorOjEwNTIwMDAwODNDMDAxMDAzQzgyQTIwNjgzNkMwMDAwMDAwMDgwNDA0NQorOjEwNTIxMDAwODFCMjAxMDAwMDE2MDA0MDQzOTkwMTAwODAxNjJFMDY1RAorOjEwNTIyMDAwODNCMDAxMDAzNjAwMDBGQkY2QTkwMTAwNDI4MkEyNDFEMgorOjEwNTIzMDAwODM1MDAwMDAyMjAwMDA0MDgzOTgwMTAwMDAwMDAwRkIyMgorOjEwNTI0MDAwRjZCMTAxMDA0NTgyQTI0MTgzNTAwMDAwNjIwMDAwNDA5NworOjEwNTI1MDAwOTU5ODAxMDBEQzlGMDA0MDgxMzIwMTAwMDAxNjJEMDY2OAorOjEwNTI2MDAwODNCMDAxMDA4MDE2MDA0MDQ1OTkwMTAwNUMwMDAwRkJGRQorOjEwNTI3MDAwRjZBOTAxMDA0QjgyQTI0MTgzNTAwMDAwMDAwMDAwNzA5QgorOjEwNTI4MDAwRjlCMTAxMDAwMDAwMDA3MUY5QjEwMTAwMDAwMDAwNzJFNQorOjEwNTI5MDAwRjlCMTAxMDAwMDAwMDA3M0Y5QjEwMTAwMDAwMDAwNzREMQorOjEwNTJBMDAwRjlCMTAxMDA1NDAwMDA0MDk1OTgwMTAwREM5RjAwNDBENgorOjEwNTJCMDAwODEzMjAxMDAwMDAwMDA3MDk1QjAwMTAwNTc4MjIyNzAxOQorOjEwNTJDMDAwQjU2RjAwMDAwMDAwODA0MTk3QjAwMTAwMDAwMDgwNDBGMQorOjEwNTJEMDAwOTdCMDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDJGNDJFMQorOjEwNTJFMDAwOTlCMzAxMDA2MjgyMjI0NDgxNkMwMDAwNkE4MjIyNDhFNAorOjEwNTJGMDAwODE2QzAwMDA2NDgyMjI0QzgxNkMwMDAwNkU4MjIyNTAxRQorOjEwNTMwMDAwODE2QzAwMDA2RjgyMjI1NDgxNkMwMDAwNzE4MjIyNThFRgorOjEwNTMxMDAwODE2QzAwMDA3NjgyMjI1QzgxNkMwMDAwNTAwMTAwNDBBQworOjEwNTMyMDAwODFCMjAwMDAwMDAwMDBCQzA5QjAwMTAwRjQ4MjAwQ0E5NAorOjEwNTMzMDAwMDFCMDAwMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDE4NworOjEwNTM0MDAwRjM4MzAxMDA2ODgyQTI0MjA1NkMwMDAwMDAwMDAwNDE2NgorOjEwNTM1MDAwMDVCMDAxMDBGNDgyMjJDQTA3MTQwMDAwRjQ4MjAwNDY1RQorOjEwNTM2MDAwRjM5MzAwMDBGNDgyMjA0Mzk1NkYwMDAwRjQ4MjgwQ0ExQQorOjEwNTM3MDAwMDUzMDAwMDBGNDgyMjIwMTgwMzAwMDAwRjQ4MjAwQ0I2RQorOjEwNTM4MDAwREI5MTAwMDA1NzAxMDBCQ0FCQjMwMDAwMDAwMDAwQkM4MworOjEwNTM5MDAwQjFCMzAxMDBGNDgyMDBDQUNGQjMwMDAwRkYwMDAwQ0ExRAorOjEwNTNBMDAwODE4ODAxMDBGNDgyQTI0MDc0N0QwMDAwNjAwMDIwNDBFQQorOjEwNTNCMDAwNjA5OTAxMDA3MzgyQThCMTgyMzAwMDAwNzI4MjAwNDBCRgorOjEwNTNDMDAwODFCMjAwMDBGNDgyMDBDQTc5QjMwMDAwMDAwMDAwNEVGMAorOjEwNTNEMDAwODFCMDAxMDAwMDAwMDA0M0NCODMwMTAwMDAwMDQ1NDA4NAorOjEwNTNFMDAwODFCMjAxMDA3OTgyQTI0MTgxNTAwMDAwMDAwMDQ1NDA1NQorOjEwNTNGMDAwODFCMjAxMDAwMDAwNDU0MDgxQjIwMTAwODQ4MjkxODJBNworOjEwNTQwMDAwODIzMDAwMDAwMDAwMDA4QTgwQjAwMTAwQUU5RjAwNDBBMgorOjEwNTQxMDAwODBDRTAxMDA4MjgyQTY0MDgxMzIwMDAwODQ4MjU2NDAwNAorOjEwNTQyMDAwODFCMjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTNDMgorOjEwNTQzMDAwMDc5MDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTI0RQorOjEwNTQ0MDAwMDc5MDAxMDBEODlGMDA0MThCQjMwMDAwMDAwMDAwNEU4MAorOjEwNTQ1MDAwODFCMDAxMDAwMDAwMDA0MkNEODMwMTAwMDAwMDQ2NDAwMQorOjEwNTQ2MDAwODFCMjAxMDA4OTgyQTI0MTgxNTAwMDAwMDAwMDQ2NDBDMworOjEwNTQ3MDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwOTQ4MjkxODExNgorOjEwNTQ4MDAwODIzMDAwMDAwMDAwMDA4OTgwQjAwMTAwQUU5RjAwNDAyMworOjEwNTQ5MDAwODBDRTAxMDA5MjgyQTY0MDgxMzIwMDAwOTQ4MjU1NDA2NQorOjEwNTRBMDAwODFCMjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTI0MworOjEwNTRCMDAwMDc5MDAxMDBCNjAzMDA0MEExOTkwMTAwMDAwMDAwNTNDRAorOjEwNTRDMDAwMDc5MDAxMDBEODlGMDA0MThCQjMwMDAwQjEwMzAwNDA1QQorOjEwNTREMDAwQTE5OTAxMDBDNDE0MkY0MDk5QjMwMTAwNTcwMTAwNDA2NQorOjEwNTRFMDAwNDlCMTAwMDBBMDk0MkU0Mzk3QjAwMTAwMDAwMDAwNDA5NQorOjEwNTRGMDAwRjFCMTAxMDA5QjgyQTI0MTk3NTAwMDAwNTA5NTIwNDBERAorOjEwNTUwMDAwRTFCMTAxMDBBQzk0MkU0Mzk3QjAwMTAwMDAwMDAwNDBDRgorOjEwNTUxMDAwRjFCMTAxMDA5RjgyQTI0MTk3NTAwMDAwMDAwMDgwNDAzRAorOjEwNTUyMDAwODFCMjAxMDBBRTAzMDA0MEEzOTkwMTAwMDAwMDAwNDBEOQorOjEwNTUzMDAwODFCMDAxMDA2MDE1MDA0MDg1OTgwMTAwMDgwMDAwNDAxRQorOjEwNTU0MDAwNDBFNDAxMDAwMDAwMDA1OTQxOTQwMTAwMDAwMDAwNTBCNworOjEwNTU1MDAwNDFFMDAxMDAwMDAwMDA0MjQwOTQwMTAwMDAwMDAwNTdCQgorOjEwNTU2MDAwNDE5MDAxMDAwMDAwMDA0MTgxQzAwMTAwMDAwMEEzNDIwMQorOjEwNTU3MDAwODE2QzAxMDAwMDAwMDA0MUEzQzEwMTAwQTU4MkEwNDI4RQorOjEwNTU4MDAwODE2QzAwMDBBNTgyMDA1MDg1QzAwMDAwREQ4MkEyNDEzMAorOjEwNTU5MDAwMDE3RDAwMDBCNTgyMjI1ODczN0QwMDAwNzgwMDAwNDAzNAorOjEwNTVBMDAwNjE5OTAxMDBCMDgyQThCMTlDMzAwMDAwMzAwMDM4NDVGQworOjEwNTVCMDAwOURFMDAxMDAwMTAwMDAwRTEwQzkwMDAwQjU4MjMzQzQ1NworOjEwNTVDMDAwODEzMDAwMDBCODgyQTFBRDlEMjAwMDAwQUY4MjEzNDA2MQorOjEwNTVEMDAwODFCMjAwMDAwMDAwMTM0RTVBODMwMTAwMzAwMDM4NDVBQworOjEwNTVFMDAwOURFMDAxMDBDMDgyMjJBQjgwMDQwMDAwQkU4MkEyNDA4OAorOjEwNTVGMDAwMDE3RDAwMDBDMDgyMjI1RjU3N0QwMDAwM0M4NzAwNDA5MworOjEwNTYwMDAwODFCMjAwMDBDMDgyMjI1RTU3N0QwMDAwOUY4NzAwNDA2QgorOjEwNTYxMDAwODFCMjAwMDBDNTgyMjI1NDczN0QwMDAwNzQwMDAwNDBGNgorOjEwNTYyMDAwNjE5OTAxMDBDMDgyQThCMTAwMzAwMDAwOTA4NEEyNUY5RgorOjEwNTYzMDAwMDE3QzAwMDBEMDg2MDA0MDgxQjIwMDAwQzc4MkEyNUZEQQorOjEwNTY0MDAwNTkyNzAwMDBDOTgyQTI1QzczN0QwMDAwRDA4MkEyNUU0RgorOjEwNTY1MDAwNzM3RDAwMDBEQTgyMjI1QzczN0QwMDAwREI4MjM3NDBCQworOjEwNTY2MDAwODEzMjAwMDA3QzAwMDA0MDYxOTkwMTAwQ0E4MkE4QjEyQgorOjEwNTY3MDAwMzYzMDAwMDA3QzAwMDA0MDYxOTkwMTAwQ0M4MkE4QjE2NgorOjEwNTY4MDAwMDAzMDAwMDAxRjAwMDAwMDAyODgwMTAwQkY4NDE3NDBBNgorOjEwNTY5MDAwODFCMjAwMDBEQjgyMzQ0MDgxMzIwMDAwN0UwMDAwNDA5NQorOjEwNTZBMDAwNjE5OTAxMDBEMTgyQThCMTEyMzAwMDAwRDg4MjUyMjE0NAorOjEwNTZCMDAwMTMwNDAwMDAwMDAwMTQ0MTJGQzMwMTAwRkYzRjAwMDk0NAorOjEwNTZDMDAwMDA4QzAxMDAwMDAwMDA0MzAxRjAwMTAwMTE4MzAwMzQ1MAorOjEwNTZEMDAwMTM4NDAwMDBGRjNGMTQwOTAwOEMwMTAwNzE4MzAwNDMxNAorOjEwNTZFMDAwMDFGMDAwMDAwMDAwMDA0MDgxQjIwMTAwREI4MjMzNDA4NQorOjEwNTZGMDAwODEzMjAwMDBBRjgyMTM0RTVBOTMwMDAwMTQ4N0EyNDhGMworOjEwNTcwMDAwRkQ3RjAwMDAwNDAwQTJBQzgwMzIwMDAwRTM4MjIyNUEzOAorOjEwNTcxMDAwNzM3RDAwMDA3QTAwMDA0MDYxOTkwMTAwRTA4MkE4QjEyOQorOjEwNTcyMDAwN0UzMTAwMDAwMTAwMDBDRjExQzkwMDAwRTk4MkEyNDBEMworOjEwNTczMDAwOTM3RjAwMDBFOTgyMjI0NDkzN0YwMDAwRTU4MjQyQTUyNgorOjEwNTc0MDAwODAzMDAwMDBFODgyQTI0MDkzN0YwMDAwRkI4MjFBNDA3NAorOjEwNTc1MDAwOTM5MzAwMDAwMDAwMUE0MDgxQjIwMTAwREQ4MEEyNDA1NgorOjEwNTc2MDAwNzM3RDAwMDAwRjg3MjI0NDIxNkYwMDAwMDY4NzIyNDBDRQorOjEwNTc3MDAwNjU3RDAwMDAwMDA1QTI1QjczN0QwMDAwMDQwMEEyNDk2NgorOjEwNTc4MDAwMzM3RDAwMDBGMzgyMjI0ODMzN0QwMDAwRkYwMTAwOTk0MQorOjEwNTc5MDAwODBEODAxMDAwMDAwMDA1MDgxRTAwMTAwQTg5ODJGNDA0RgorOjEwNTdBMDAwMzNCMTAxMDAwMDAwMDA0MEUwQzEwMTAwREQ4MjAwNDA5MworOjEwNTdCMDAwODFCMjAwMDBBRjgyMDA0MDhCQjMwMDAwMDAwMDAwNThBRgorOjEwNTdDMDAwNjFCMTAxMDAwMDAwMDA0RTYyQjEwMTAwQUY4MjI4NDBDQgorOjEwNTdEMDAwODEzMjAwMDBGNjgyMDA0MDgxQjIwMDAwRjk4MjMzNDAzRAorOjEwNTdFMDAwMUYzMDAwMDBBRjgyMTM0RTVBOTMwMDAwRkQ4MkEwQ0VGRQorOjEwNTdGMDAwODE1MDAwMDAwRjgzQTBDRDgxNkMwMDAwMDAwMDAwQTU0NworOjEwNTgwMDAwOUNCMzAxMDAwMDAwMDBCMTgxQjAwMTAwMEY4MzIyQjVGQworOjEwNTgxMDAwODExNDAwMDA4MDE1MkY0MDQ5QjEwMTAwMDE4MzQyNDBFRQorOjEwNTgyMDAwODEzMjAwMDAwMDAwNjBCNDY1OTcwMTAwRDAxNTJFNDA2MQorOjEwNTgzMDAwNjlCMzAxMDAwMDAwMUE0NDkzODMwMTAwMUEwMDAwQTIxQQorOjEwNTg0MDAwODBEQzAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwQjE2MworOjEwNTg1MDAwRjFCMTAxMDAwMDAwMDBCNUYxQjEwMTAwMDUwMDAwNDAwOAorOjEwNTg2MDAwNjE5OTAxMDA4MDAwMDA0MDYyREQwMTAwMEE4M0E4QTE2NworOjEwNTg3MDAwRTAzMTAwMDBFOTgyMDA4ODlFQjMwMDAwRTk4MkEyNDE4NQorOjEwNTg4MDAwNjc2RjAwMDBFOTgyMDA2RkRCOTEwMDAwMEY4MzQyNDBFOAorOjEwNTg5MDAwODEzMjAwMDBFOTgyMUE0MDkzODMwMDAwMDA5OTAwMDlEOAorOjEwNThBMDAwNDZDOTAxMDAzRjAwMDBGMzBDODgwMTAwMUE4M0E2NDI5QworOjEwNThCMDAwMTM2MDAwMDAyOTk0MDA5NTAzMzAwMTAwMTU4MzYxNDBCNgorOjEwNThDMDAwODEzMjAwMDA3NTAwMDA0MDYxOTkwMTAwMTY4M0E4QjE4MworOjEwNThEMDAwMEMzMDAwMDAzNjk0NzExMDk0MzAwMTAwMUI4MzAwNTg4NgorOjEwNThFMDAwMUY5MDAwMDAxQzk0MDA5NTAzMzAwMTAwQUY4MjAwODhENworOjEwNThGMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDQwMDJERjA5MQorOjEwNTkwMDAwMkVCMDAxMDBFRTA3MDA0MDk3OTgwMTAwMjI4MzIzNEI0MAorOjEwNTkxMDAwRTQ2RDAwMDAyMjgzMjI0QkZEN0YwMDAwMDAwMDAwNDA2OAorOjEwNTkyMDAwMUY5MDAxMDAyMjAwMkY0MDgxQjIwMTAwMjU4MzgzMTdDMAorOjEwNTkzMDAwODAzMjAwMDAyNjAwMDA0MDQ3OTkwMTAwMjc4Mzg1MTcyOAorOjEwNTk0MDAwODAzMjAwMDAwMDAwMDA0ODQ3QzEwMTAwMkQ4MzIyNTUyRAorOjEwNTk1MDAwMkY3QzAwMDAwMDAwMDA0MjQzRDEwMTAwMEYwMDAwRkEzQworOjEwNTk2MDAwOTY4ODAxMDAwMDAwMDA0Mjk3RTAwMTAwMDAwMDAwNDIxQworOjEwNTk3MDAwOTdEMDAxMDAyRTgzMDA0QjQ0QzEwMDAwMTIwMDAwQTIwQQorOjEwNTk4MDAwNDRDOTAxMDAyODAwMDBGNjAyQ0MwMTAwMEEwMDAwQTE3MQorOjEwNTk5MDAwNDJDOTAxMDAwMDAwMDBGODE2QjAwMTAwMDAwMDI4RjAyNAorOjEwNTlBMDAwMTBCMDAxMDAwMDAwMDBGMDFBQjAwMTAwMDAwMDAwQTJEOQorOjEwNTlCMDAwMkFCMDAxMDBDMDI4M0M0NjBERTAwMTAwMDAwMDJENDQ0MworOjEwNTlDMDAwOTVCMDAxMDAzQTgzQTJGODBFMzAwMDAwNEE4MzIyNDFDQworOjEwNTlEMDAwOTU1MDAwMDAwMDAwMkQ1MDQ5QzEwMTAwMzY4MzAwNDA2MQorOjEwNTlFMDAwODFCMjAwMDAzNzgzQTJGODE2NkMwMDAwMzc4M0EyRjg1QQorOjEwNTlGMDAwMTA2QzAwMDAzNzgzQTJGMDFBNkMwMDAwNDg4MzIyNTgxNAorOjEwNUEwMDAwMUY3QzAwMDAwMDk5M0Y0MjEzRjAwMTAwM0Y4MzY1NDA3NgorOjEwNUExMDAwODEzMjAwMDA0MzgzQTJGMzc0MDYwMDAwMDAwMDAwMDZGOAorOjEwNUEyMDAwRTY5NTAxMDA0ODgzNzU0MDgxQjIwMDAwMDAwMDAwMDY0MQorOjEwNUEzMDAwOTZCMDAxMDAzRjAwNzVGMzBDODgwMTAwMDAwMDAwNTU4RQorOjEwNUE0MDAwNjFCMTAxMDAwMDAwMDA0QjYyQjEwMTAwNDY4M0E4NDAzMworOjEwNUE1MDAwODEzMjAwMDA0ODgzNjc0MDgxMzIwMDAwNTA4Mzc3NDFFMworOjEwNUE2MDAwMkRDMzAwMDA0RTgzMjI1ODFGN0MwMDAwMDAwMDAwNTUwQgorOjEwNUE3MDAwNjFCMTAxMDAwMDAwMDAwNjYyQjEwMTAwNEM4M0E4NDA0MgorOjEwNUE4MDAwODEzMjAwMDA0RTgzNjc0MDgxMzIwMDAwN0U4Mzc3NDE3RgorOjEwNUE5MDAwMkRDMzAwMDAwMzAwMDAwNzFBRjQwMTAwRUY5MjAwMDc3NQorOjEwNUFBMDAwMTYzMDAxMDA1RjgzMjI0MTgxNkMwMDAwNTY4MzIyNDI0MAorOjEwNUFCMDAwODE2QzAwMDBBRjgyMDA4ODFDQjAwMDAwNUU4MzIyNUYxMgorOjEwNUFDMDAwMEY3QzAwMDBFMzkzMDA1RjAxMTAwMTAwNUM4MzIyNDAyMworOjEwNUFEMDAwOTU2QzAwMDAwNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjI0MAorOjEwNUFFMDAwMDJCMDAxMDA1ODkzMDA1Mjk1MzAwMTAwNUY5MzAwNEJDMworOjEwNUFGMDAwMDJCMDAwMDA0MTk0MDAwOTk2MzAwMTAwMUE4NzAwNDA2RQorOjEwNUIwMDAwMEZCMDAwMDA2NzgzQTI1QTFGN0MwMDAwNjk5MjAwNDAxQQorOjEwNUIxMDAwODEzMjAxMDA2NzgzMjIyMDg1NkMwMDAwNjQ4MzlDMEYyMgorOjEwNUIyMDAwODAzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNEE5MzAwNUMwNQorOjEwNUIzMDAwMUYwMDAxMDAzQzk1MDA0MjYxMzEwMTAwQUY4MjAwODhFNgorOjEwNUI0MDAwMUNCMDAwMDA5MDA0MDAwNzk2MzAwMTAwMDAwMDJEMDVGNQorOjEwNUI1MDAwNDhCMTAxMDA2QTgzODJGMDE4MzAwMDAwODE4ODAwNDU1NgorOjEwNUI2MDAwOEZCMDAwMDAyODIwMDBBNjk2QjAwMTAwNkU4MzIyMTc5NworOjEwNUI3MDAwOTYwNDAwMDBFMDk0MDA0Qjk1MzAwMTAwODE4ODAwNEJCMgorOjEwNUI4MDAwOEZCMDAwMDBFRjkzMDAwMzQ4MzEwMTAwQ0E5MTAwNDAzQworOjEwNUI5MDAwODEzMDAxMDA4MTg4MDA0MDgxQjIwMDAwMDAwMDJFMTA5OQorOjEwNUJBMDAwNDhCMTAxMDAwMDAwNjg1MDAzQjAwMTAwMDAwMDAwMDM4QworOjEwNUJCMDAwRjBCMTAxMDA0MDAwMDAwMEUwQzkwMTAwMDAwMDJFNTBEQgorOjEwNUJDMDAwNDlDMTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDNENAorOjEwNUJEMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMjAwMDAwMTA5RQorOjEwNUJFMDAwNjJERDAxMDA3OTgzQTg0MDgxMzIwMDAwMTAwMDAwMTBCRQorOjEwNUJGMDAwNjJDOTAxMDA3QjgzQTgwMEUwMzEwMDAwQUY4MjAwODgwOQorOjEwNUMwMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDAwMDAwNDA1RQorOjEwNUMxMDAwMEZCMDAxMDAwMDAwMDBGODJFQjAwMTAwMDAwMDAwRjJGQgorOjEwNUMyMDAwMDJCMDAxMDAwMDAwMDA0MDE3QjAwMTAwMDA0MTAwQTZEMgorOjEwNUMzMDAwOTZCMDAxMDBFRTA3MkU0Nzk3OTAwMTAwOTE4MzIyMTczRQorOjEwNUM0MDAwOTYwNDAwMDA4RjgzMjI0QkZEN0YwMDAwOEY4MzIzQTJFOAorOjEwNUM1MDAwMDI2QzAwMDA1ODkzMDA1Mjk1MzAwMTAwMDQwMDIyNDE2QworOjEwNUM2MDAwOTc1MDAwMDAwQzAwMkQwMDEyQjAwMTAwMDAwMDAwRjA2MQorOjEwNUM3MDAwMDBCMDAxMDAwMDAwMDA1QzAxODAwMTAwNUY5MzAwNEI1OAorOjEwNUM4MDAwMDJCMDAwMDAwMDAwMDAwOTAwQjAwMTAwMDAwMDAwNTA1OAorOjEwNUM5MDAwMDNCMDAxMDBBRTgzMDA1QzE3OTAwMDAwQTM4MzIyNDM5MQorOjEwNUNBMDAwMkY3QzAwMDAwMDAwMDA0NTFGOTAwMTAwOUM4MzIyNUZCNAorOjEwNUNCMDAwMkY3QzAwMDAwMDAwMkUxMDQ4QjEwMTAwMDAwMDAwNThBOQorOjEwNUNDMDAwRjFCMTAxMDAxMDAwMDAwM0YwQzkwMTAwMTAwMDAwMDA1NAorOjEwNUNEMDAwRTBDOTAxMDA5ODgzNjI0MjYxMzEwMDAwMDAwMDAwMTBCOQorOjEwNUNFMDAwNjJCMTAxMDA5OTgzQTg0MDgxMzIwMDAwQUY4MjcyODhCRQorOjEwNUNGMDAwMUNCMDAwMDAyMDAwMkQwMzQ4QjEwMTAwRkYwRjAwRjY4QQorOjEwNUQwMDAwODA4ODAxMDBBMDgzQTJBNjgxNkMwMDAwQTM4MzAwRjIxQQorOjEwNUQxMDAwM0FCMDAwMDA4RDg0QTI0QkZEN0YwMDAwQjA5MjAwNDA5RAorOjEwNUQyMDAwODEzMjAxMDAzMDg3MDA0MDgxQjIwMDAwQUU4MzIyNEFGOAorOjEwNUQzMDAwMkY3QzAwMDBBRTgzMjI0ODJGN0MwMDAwMEEwMDJEMDMzOAorOjEwNUQ0MDAwNDhCMTAxMDAzRjAwMDBGMjg2ODgwMTAwMUYwMDAwNDNCNworOjEwNUQ1MDAwODQ4ODAxMDAwNTAwMDA0MzgwRjQwMTAwOTg5NDNENDJDRQorOjEwNUQ2MDAwODFFMDAxMDBBRTgzQTI0MkUwN0QwMDAwOEQ4NEEyNEI2MQorOjEwNUQ3MDAwRkQ3RjAwMDBCMDkyMDA0MDgxMzIwMTAwMzA4NzAwNDA3QQorOjEwNUQ4MDAwODFCMjAwMDBBRTgzNjk0MDgxMzIwMDAwMDAwMDAwQTNCMAorOjEwNUQ5MDAwMDlCMDAxMDAwMDAwNzk0MTQ3QzMwMTAwQjQ4MzIyQTE4QQorOjEwNURBMDAwMDk2QzAwMDBGNTgyMDA4ODFDQjAwMDAwQjE4MzAwMDM3QworOjEwNURCMDAwNDhCMTAwMDBFRTgzQTM5MjAzNkMwMDAwOTQ5NTAwNDA2QworOjEwNURDMDAwOTUzMDAxMDAwMDAwMDA0MTQzQzMwMTAwMDAwMDAwMTZBRgorOjEwNUREMDAwODBCMjAxMDAzMDg3MjcwODgwMzIwMDAwQkI4MzIyNUMzQworOjEwNURFMDAwMTc3QzAwMDBCQzgzMDAwMDJBQjAwMDAwMTIwMDAwMDBGNQorOjEwNURGMDAwMkFDODAxMDAwMjAwMDAwODgwQzgwMTAwQzA4M0EyNDMzNQorOjEwNUUwMDAwMkY3QzAwMDBFMzk0MDA0MDgxMzIwMTAwREM4MzAwNUVCRgorOjEwNUUxMDAwMTc5MDAwMDAwNDAwMDAwMThDQ0MwMTAwRTM5NDAwNENCQQorOjEwNUUyMDAwMDMzMDAxMDAwMDAwMkU0NjAyQjAwMTAwMTAwMDAwMTBGNworOjEwNUUzMDAwNDhDOTAxMDAwQzAwMDAwMUYwQ0QwMTAwMkMwMDAwNDAxOQorOjEwNUU0MDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMTAwMDAwMTVCQgorOjEwNUU1MDAwRTBDOTAxMDAwMDAwMDA0MzYxQjEwMTAwQTAwMDAwQTRGRQorOjEwNUU2MDAwNjJERDAxMDBDOTgzQTg1NDE3MTAwMDAwREM4MzAwNUVDNgorOjEwNUU3MDAwMTc5MDAwMDAxMjAwMDAwMDJBQzgwMTAwREI4MzIyNDNCMworOjEwNUU4MDAwMkY3QzAwMDAwNDAwMDAwMThDQ0MwMTAwMDAwMDAwNENCRAorOjEwNUU5MDAwMDNCMDAxMDAwNDk1MDA0MzYxMzEwMTAwMDAwMDJFNDY2QgorOjEwNUVBMDAwMDJCMDAxMDAxMDAwMDAxMDQ4QzkwMTAwMEMwMDAwMDEwMAorOjEwNUVCMDAwRjBDRDAxMDAwQzAwMDAwOUYwQzkwMTAwMDAwMDAwMTgzRAorOjEwNUVDMDAwRjBCMTAxMDAxMDAwMDAxNUUwQzkwMTAwMDAwMDAwNDMxRQorOjEwNUVEMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwREM4MzI4NTQ1MAorOjEwNUVFMDAwMTcxMDAwMDBEODgzMDA0MDgxQjIwMDAwMDQ5NTAwNDNFMQorOjEwNUVGMDAwNjEzMTAxMDBERTgzMjI1MDJGN0MwMDAwMDAwMDAwNTYzQgorOjEwNUYwMDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwRTE4M0EyNDE2MworOjEwNUYxMDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwMDAwMDAwNDMzQworOjEwNUYyMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRTI4M0E4NDA4MQorOjEwNUYzMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwRUI5NDAwNDA2QQorOjEwNUY0MDAwODEzMjAxMDBFOTgzMjI0MzJGN0MwMDAwMTY4MDAwMDM4OAorOjEwNUY1MDAwNDRDOTAxMDAwMDAwMDAxREU0QjEwMTAwOEM5NDAwNUUwMgorOjEwNUY2MDAwMDUxMDAxMDBFQzgzQTI1RjJGN0MwMDAwQTY5MTAwMDFDOAorOjEwNUY3MDAwMzg0MzAxMDBCMDkyMDA0MDgxMzIwMTAwMzA4NzAwNDA3OAorOjEwNUY4MDAwODFCMjAwMDBGMDgzQTI0QkZEN0YwMDAwOEE4NDAwNDFCMworOjEwNUY5MDAwNDNDMzAwMDAwMDAwMDA0MDI3QjAwMTAwMDAwMDAwNDBBMworOjEwNUZBMDAwMkRCMDAxMDAwMDAwMDA0MDExQjAwMTAwRjM4MzM1MDE2NQorOjEwNUZCMDAwODYzMDAwMDA2RDAwMDA0MDYxOTkwMTAwRkI4MzI4QjEyQworOjEwNUZDMDAwMzAzMDAwMDBGNDgzMjI0RDc1N0QwMDAwMDAwMDAwMTY4MworOjEwNUZEMDAwODBCMjAxMDA3QTg0QTc0MDExNkMwMDAwMDAwMDAwNDFFQgorOjEwNUZFMDAwNDNDMzAxMDA4OTg0MDA0MDgxQjIwMDAwNkQwMDAwNDA3RAorOjEwNUZGMDAwNjE5OTAxMDBGQjgzQThCMTEyMzAwMDAwMDAwMDAwMTY3NworOjEwNjAwMDAwODBCMjAxMDAwNTg0QTc0MDExNkMwMDAwMDAwMDAwNDEyRgorOjEwNjAxMDAwNDNDMzAxMDAwMDAwMDAwOTEwQjAwMTAwMDAwMDAwMTg5NworOjEwNjAyMDAwMkNCMDAxMDBERTA3MDA0MzgwQ0UwMTAwRjQ4M0FBNDBCQgorOjEwNjAzMDAwODEzMjAwMDAwQTg0MDA0MDgxQjIwMDAwNDAwMDNFNDNFQgorOjEwNjA0MDAwMjdFMDAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMTg4NQorOjEwNjA1MDAwRTBCMTAxMDAwMDAwMDA0MTI3QzAwMTAwRjQ4M0EzMEI2MAorOjEwNjA2MDAwODc1MDAwMDAwMDAwMTU0MDFCQjAwMTAwMDAwMDAwNDBGOAorOjEwNjA3MDAwMjNCMDAxMDAxMjAwMDAwMDJBQzgwMTAwNDAwMDJENDA5QQorOjEwNjA4MDAwMzlCMDAxMDAxMjg0QTI0MDI3NkMwMDAwMjIwMDAwMDhGMQorOjEwNjA5MDAwMTJDODAxMDBERTA3MDA0MDI1OTgwMTAwMTU4NDAwNDA2OQorOjEwNjBBMDAwODFCMjAwMDAwMDAwMDBGODEyQjAwMTAwMDAwMDAwRjAxMgorOjEwNjBCMDAwMzBCMDAxMDAwMDAwMDAwQjI1QjAwMTAwMDAwMDAwMTAwRQorOjEwNjBDMDAwMzJCMDAxMDAxNDAwMjAwMUUwQjEwMTAwRUUwNzAwNDBGMQorOjEwNjBEMDAwMzc5ODAxMDAxQTg0MjMwMTM2NkMwMDAwMDAwMDAwMDE4QgorOjEwNjBFMDAwMzZCMDAxMDAyNTg0ODI0MTIzNDAwMDAwMjA4MDAwMTA0QQorOjEwNjBGMDAwNDJDOTAxMDAyMTg0MjI0MEUzNkQwMDAwMDAwMDAwNDNGQQorOjEwNjEwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUU4NEE4NDA2MgorOjEwNjExMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwQ0Y5MjAwNDNBMworOjEwNjEyMDAwMjMzMDAxMDAwMDAwMDAxMDMyQjAwMTAwMDAwMDAwNDFFNworOjEwNjEzMDAwMjNCMDAxMDAwMDAwMDAwMzQ4QjEwMTAwMDA4MDAwMTlGNQorOjEwNjE0MDAwNDRDOTAxMDAzNDg0MjI0NTFGN0MwMDAwMDAwMDAwNEMzQgorOjEwNjE1MDAwRjFCMTAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMThEOQorOjEwNjE2MDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTlGRQorOjEwNjE3MDAwNjJERDAxMDAyQjg0QTgxNUUwMzEwMDAwMDAwMDAwNTAxMgorOjEwNjE4MDAwMDNEMDAxMDAwMDAwMDA1MDMzQzAwMTAwMDAwMDAwNENBQgorOjEwNjE5MDAwMjVEMDAxMDAwQzAwMkQ0QzEzQzAwMTAwMDAwMDAwNTA2MAorOjEwNjFBMDAwMzdEMDAxMDAwMDAwMDA1MDJCQzAwMTAwMUE4NDAwNDVDOAorOjEwNjFCMDAwMUY4MDAwMDAzNjg0QTMxMjM2NkMwMDAwMzc4NDY4MUJGMQorOjEwNjFDMDAwMjhCMDAwMDAwMDAwNjgxMjI4QjAwMTAwMDAwMDAwMDk5QgorOjEwNjFEMDAwRjBCMTAxMDAwMDAwMDAxOEYwQjEwMTAwMDAwMDAwNDMyMAorOjEwNjFFMDAwNjFCMTAxMDAyMDAwMDAxOTYyREQwMTAwM0E4NEE4MTVBOAorOjEwNjFGMDAwRTAzMTAwMDA2MDg0MjIxNDAyNTAwMDAwMDAwMDAwNTBEMgorOjEwNjIwMDAwMzNDMDAxMDAwMDAwMDAxNDI0RDAwMTAwMEMwMDJEMTQ0NAorOjEwNjIxMDAwMTJDMDAxMDA1OTg0QTIxNDM2NTAwMDAwNEE4NDIyNUM0NgorOjEwNjIyMDAwMUY3QzAwMDAzMDgwMDAxMDQyQzkwMTAwNDg4NDIyNDBEOQorOjEwNjIzMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMTA2OQorOjEwNjI0MDAwNjJERDAxMDA0NTg0QTg0MDgxMzIwMDAwQUY4MjAwODhGMQorOjEwNjI1MDAwMUNCMDAwMDAwMDAwMDAwMzQ4QjEwMTAwMEMwMDJENUNFMAorOjEwNjI2MDAwMUY4MDAxMDAxMDAwMDBGMDJBQzgwMTAwMDAwMDAwNUMzRgorOjEwNjI3MDAwMkI4MDAxMDBGMDA3MDA0MDM3OTgwMTAwNEY4NDIzMDE3NAorOjEwNjI4MDAwMzY2QzAwMDAwMDAwMDAwMTM2QjAwMTAwNUE4NDIyMUI2OQorOjEwNjI5MDAwMDI2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMDAwMDJFNUNCNAorOjEwNjJBMDAwMUY5MDAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM0OAorOjEwNjJCMDAwRjBCMTAxMDBGRjA3MDAxNUUwOEQwMTAwMDAwMDAwNDI3MQorOjEwNjJDMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNTY4NEE4NDA3NQorOjEwNjJEMDAwODEzMjAwMDA1QTg0MDAwMzQ4QjEwMDAwMDAwMDAwMTQxRAorOjEwNjJFMDAwMkFDMDAxMDAxQTg0QTI0MDI1NkMwMDAwMDAwMDAwNDE3MQorOjEwNjJGMDAwMzlDMDAxMDA0MDAwM0Q0MzM5RTAwMTAwMDAwMDAwMEJCRgorOjEwNjMwMDAwMjVCMDAxMDAwMDAwMDBGODEyQjAwMTAwMUE4NDAwRjA2RQorOjEwNjMxMDAwMzBCMDAwMDAwMDgwMDAxOTQyQzkwMTAwNjY4NDIyNDBBQworOjEwNjMyMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTk2RQorOjEwNjMzMDAwNjJERDAxMDA2Mzg0QTg0MDgxMzIwMDAwQUY4MjAwODhFMgorOjEwNjM0MDAwMUNCMDAwMDBDRjkyMDA0MDJCMzAwMTAwMTgwMDJFMDMzQgorOjEwNjM1MDAwNDhCMTAxMDA2QTg0MjI1MDJGN0MwMDAwMDAwMDAwNTZFMgorOjEwNjM2MDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwNkQ4NEEyNDE3MgorOjEwNjM3MDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwNzA4NDIyNDNDMgorOjEwNjM4MDAwMkY3QzAwMDAwMDAwMDA1NDE3OTAwMTAwMTYwMDIwMUQxMworOjEwNjM5MDAwRTRCMTAxMDA3Mjg0QTM0MDI3NkMwMDAwNzQ4NDYwNUY0NAorOjEwNjNBMDAwMTc5MDAwMDAwMDg0MDAwQjE2REMwMTAwMDAwMDYwMTM1MQorOjEwNjNCMDAwMTY5NDAxMDA4Qzk0MDA1RTA1MTAwMTAwMzA4N0EyNUZFNgorOjEwNjNDMDAwMkY3QzAwMDAxNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjI4RAorOjEwNjNEMDAwMDJCMDAxMDBBNjkxMDAwMTM4NDMwMTAwMzA4NzAwNDA1RgorOjEwNjNFMDAwODFCMjAwMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwNERCOQorOjEwNjNGMDAwNjFCMTAxMDAwMDAwMDAxNjYyQjEwMTAwN0M4NEE4NDA3OAorOjEwNjQwMDAwODEzMjAwMDAwMDAwMDAwODYyQjEwMTAwN0U4NEE4NDBEMworOjEwNjQxMDAwODEzMjAwMDA4OTg0MjIxMzgyNkMwMDAwNDAwMDNENDNEOQorOjEwNjQyMDAwODNFMDAxMDAwMDAwMDBGODEwQjAwMTAwMDAwMDAwRjA1RgorOjEwNjQzMDAwMkNCMDAxMDAwMDAwMDAxNjYyQjEwMTAwODQ4NEE4NDA2NQorOjEwNjQ0MDAwODEzMjAwMDAwMDAwMDAwODYyQjEwMTAwODY4NEE4NDA4QgorOjEwNjQ1MDAwODEzMjAwMDA4MDg0MDA0MTgzQzAwMDAwMDAwMDE1NDBBQworOjEwNjQ2MDAwODFCMjAxMDAwMDgyMDBBNjA0QjAwMTAwQTA5ODAwNDBBMworOjEwNjQ3MDAwNDc5OTAxMDAzMDA1MDA0MTg5MzAwMTAwNTg5MzAwNTJDRQorOjEwNjQ4MDAwOTUzMDAxMDA1RjkzMDA0QjAyQjAwMDAwMzA4NzAwNDA2MAorOjEwNjQ5MDAwMEZCMDAwMDAwMDAwMDA1RjAxODAwMTAwMTAwMDAwMDA0QworOjEwNjRBMDAwMEVGNDAxMDAzRjAwMDAwMDAwODgwMTAwMDMwMDAwMDcxNworOjEwNjRCMDAwMUFGNDAxMDBFRjkyMDAwNzE2MzAwMTAwOUI4NDIyNDE3QworOjEwNjRDMDAwODE2QzAwMDA5OTg0MjI0MjgxNkMwMDAwQUY4MjAwODhCOAorOjEwNjREMDAwMUNCMDAwMDA5QTg0MjI1RjBGN0MwMDAwMUE4NzAwNDBFNQorOjEwNjRFMDAwMEZCMDAwMDBBMzg0QTI1QTFGN0MwMDAwNjk5MjAwNDBGNAorOjEwNjRGMDAwODEzMjAxMDBBMzg0MjIyMDg1NkMwMDAwQTA4NDlDMEZCRgorOjEwNjUwMDAwODAzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNEE5MzAwNUMxQgorOjEwNjUxMDAwMUYwMDAxMDAzQzk1MDA0MjYxMzEwMTAwQUY4MjAwODhGQworOjEwNjUyMDAwMUNCMDAwMDA5MDA0MDAwNzk2MzAwMTAwMDAwMDJEMDUwQgorOjEwNjUzMDAwNDhCMTAxMDAwMDAwMDBGMDE4QjAwMTAwQTk4NDIyM0ExRgorOjEwNjU0MDAwMDE2QzAwMDAwMDAwMDAwMDhFQjAwMTAwODE4ODAwNDA1NgorOjEwNjU1MDAwMDFCMDAwMDAwMDAwMDA0MDgxQjIwMTAwMkUwMDJEMDVCNgorOjEwNjU2MDAwNDhCMTAxMDBBRDg0QTI0MEU3NkQwMDAwMEEwMDAwNDA4MAorOjEwNjU3MDAwOEY5ODAxMDA4MTg4MDA0MDAxQjAwMDAwMzQ5MjAwNDBGMworOjEwNjU4MDAwODEzMjAxMDAxQzk0MDA5NTAzMzAwMTAwQUY4MjAwODgyNQorOjEwNjU5MDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMjIwMDJERjBDNgorOjEwNjVBMDAwMkVCMDAxMDAyODIwMDBBNjk2QjAwMTAwQjY4NDIyMTc2NAorOjEwNjVCMDAwOTYwNDAwMDBFMDk0MDA0Qjk1MzAwMTAwODE4ODAwNEM2NworOjEwNjVDMDAwOEZCMDAwMDBCODg0ODMxNzgwMzIwMDAwMDAwMDAwNDRDMAorOjEwNjVEMDAwNDNDMTAxMDBCQTg0ODUxNzgwMzIwMDAwMDAwMDAwNDhFMgorOjEwNjVFMDAwNDNDMTAxMDAyODAwMDBGNjAyQ0MwMTAwMTIwMDAwQTEwNgorOjEwNjVGMDAwMkFDODAxMDBFRjkzMDA0MDgxMzIwMTAwQ0E5MTAwNDE5NgorOjEwNjYwMDAwODEzMDAxMDA4MTg4MDA0MDgxQjIwMDAwMDAwMDAwMDE1QgorOjEwNjYxMDAwMDBEMDAxMDAwMDAwMkUxMDQ4QjEwMTAwMjgwMDAwNDAwOQorOjEwNjYyMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDAzQQorOjEwNjYzMDAwRjBCMTAxMDBDNDg0NjQ0NzYxMzEwMDAwMDAwMDAwMTAyMworOjEwNjY0MDAwNjJCMTAxMDBDNTg0QTgxQkUwMzEwMDAwQUY4Mjc0ODhFQworOjEwNjY1MDAwMUNCMDAwMDAwMDAwMDA0NTAzRTAwMTAwMDgwMDJEMDMwRAorOjEwNjY2MDAwNDhCMTAxMDBFQTg0MDFGQjA4MzAwMDAwM0Q4NTg3RkI0QQorOjEwNjY3MDAwMjIzMDAwMDAwMDAwMDBGQTBFQjAwMTAwMDAwMDAwRjgxNworOjEwNjY4MDAwMTRCMDAxMDAwMzAwMDAwNzFBRjQwMTAwRUY5MjAwMDdBNAorOjEwNjY5MDAwMTYzMDAxMDBFMDg0MjI0MTgxNkMwMDAwRDQ4NDIyNDI0MworOjEwNjZBMDAwODE2QzAwMDBBRjgyMDA4ODFDQjAwMDAwREY4NDIyNUY5NAorOjEwNjZCMDAwMEY3QzAwMDAzODAwMDAwNDdFODkwMTAwRDg4NEE2NUZBQQorOjEwNjZDMDAwMEYwMDAwMDA0MjkyMDA0MDA1MzAwMTAwREQ4NDAwNDBEMAorOjEwNjZEMDAwODFCMjAwMDAxMzAwMDA0MDg3OTgwMTAwMDAwMDJEMDNFNAorOjEwNjZFMDAwNDhCMTAxMDAwQzAwMkRGMDgyQjAwMTAwMDAwMDAwRjA2NAorOjEwNjZGMDAwODRCMDAxMDBDRTkzMDA0MDA1MzAwMTAwMDAwMDAwNUMzMgorOjEwNjcwMDAwMUY5MDAxMDAxQTg3MDA0MDBGQjAwMDAwRTg4NEEyNUFEMQorOjEwNjcxMDAwMUY3QzAwMDA2OTkyMDA0MDgxMzIwMTAwRTg4NDIyMjA0MQorOjEwNjcyMDAwODU2QzAwMDBFNTg0OUMwRjgwMzIwMDAwQUY4MjAwODhGOQorOjEwNjczMDAwMUNCMDAwMDA0QTkzMDA1QzFGMDAwMTAwM0M5NTAwNDIyMQorOjEwNjc0MDAwNjEzMTAxMDBBRjgyMDA4ODFDQjAwMDAwOTAwNDAwMDc5NgorOjEwNjc1MDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjA1NgorOjEwNjc2MDAwMThCMDAxMDBFQzg0MjEwNDgwMjAwMDAwRUQ4NDAwNDA3QQorOjEwNjc3MDAwMTBDOTAwMDBDMzg3MDA0QjgxQjAwMDAwMEM4NTAwNDNBNgorOjEwNjc4MDAwODFCMDAwMDAxMDg1MDBGQjIyQjAwMDAwQzM4NzAwNDFFQgorOjEwNjc5MDAwODFCMDAwMDA4MTg4MDA0RThGQjAwMDAwMDg4NTAwNUE0QgorOjEwNjdBMDAwOEZCMDAwMDBGNTg0MDA0NzhGQjAwMDAwQzM4NzAwNTMwRQorOjEwNjdCMDAwODFCMDAwMDBDMzg3MDA1NjgxQjAwMDAwMzIwMDJEMDU3MworOjEwNjdDMDAwNDhCMTAxMDA4MTg4QTAwQUU0NkQwMDAwRkI4NEEyNDE2OQorOjEwNjdEMDAwMTk3QzAwMDBGQTg0MjIwQTgwMzIwMDAwODE4ODAwNTM2QworOjEwNjdFMDAwOEZCMDAwMDA4MTg4MDA1NDhGQjAwMDAwMDQ4NTIyMEExOQorOjEwNjdGMDAwODAzMjAwMDBGRTg0QTIwQUU0NkQwMDAwODE4ODAwNUQwMgorOjEwNjgwMDAwOEZCMDAwMDAwMDAwMDBGMjgwQjAwMTAwMDAwMDAwMEExQworOjEwNjgxMDAwODBEMDAxMDAwMjg1QTA5MTgxNkMwMDAwODE4ODAwNUUxQgorOjEwNjgyMDAwOEZCMDAwMDAyNTAwMDA0MDhGOTgwMTAwODE4ODAwNDA1MworOjEwNjgzMDAwODFCMjAwMDAwNjg1MjA5MUU1NkQwMDAwODE4ODAwNTQzQQorOjEwNjg0MDAwOEZCMDAwMDAyMTAwMDA0MDhGOTgwMTAwODE4ODAwNDAzNworOjEwNjg1MDAwODFCMjAwMDAzMjAwMkQwNTQ4QjEwMTAwODE4OEEwMEFGNAorOjEwNjg2MDAwRTQ2RDAwMDAyNDAwMDA0MDhGOTgwMTAwODE4ODAwNDAwMgorOjEwNjg3MDAwODFCMjAwMDAzNzAwMkQwNTQ4QjEwMTAwMDQwMDAwRjM4QgorOjEwNjg4MDAwODJGNDAxMDBDMzg3QTA0MjgzNkMwMDAwQzM4NzAwNTREOAorOjEwNjg5MDAwODFCMDAwMDAwMDAwMDBGMjBFQjAwMTAwMDMwMDAwMDcwQworOjEwNjhBMDAwMUFGNDAxMDAwMEI1MDAwRDQyQzkwMTAwMDcwMDAwMDdGRAorOjEwNjhCMDAwMTY4ODAxMDAxOTg1MjIwQkU2N0QwMDAwMEEwMDAwNDBDMQorOjEwNjhDMDAwODc5ODAxMDBERjk1MDA0MDgxMzIwMTAwMDAwMDAwNDAwMAorOjEwNjhEMDAwMEZCMDAxMDAxQTg3MDA1QzFGOTAwMDAwMkI4NTIyNTAyQQorOjEwNjhFMDAwRkQ3RjAwMDAyNjg1QTI1NEZEN0YwMDAwMUU4NTIyNTVGNQorOjEwNjhGMDAwRkQ3RjAwMDA4MjAwMDA0MDg3OTgwMTAwMTY4NTAwNDA1RgorOjEwNjkwMDAwODFCMjAwMDAxNjg1MjI1M0ZEN0YwMDAwMTQ4MDAwMDMzMQorOjEwNjkxMDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMTAwMDAwNEJEOQorOjEwNjkyMDAwODBGNDAxMDAwQ0JDMDA0MDg3OTgwMTAwMjY4NTIyNDNCQQorOjEwNjkzMDAwODA2QzAwMDBGRkZGMDA0QjgwODgwMTAwMTY4NUEyNDM5OQorOjEwNjk0MDAwODA2QzAwMDA3Qzk2MDA0MDQ3OTkwMTAwMjc4NTQ2NDBGNgorOjEwNjk1MDAwODEzMjAwMDAyQTg1QTBGMDMwNkYwMDAwMUM4NTFFNDBBNworOjEwNjk2MDAwODFCMjAwMDAwMDAwMUU0MTMxQzMwMTAwNzM5MjAwNDA1QgorOjEwNjk3MDAwMjUzMDAxMDAyRjg1OUMwRjgwMzIwMDAwQUY4MjAwODhGNworOjEwNjk4MDAwMUNCMDAwMDA0QTkzMDA1QzFGMDAwMTAwMTQ4MDAwMDM0QgorOjEwNjk5MDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMDAwMDJGMDU4MAorOjEwNjlBMDAwNDhCMTAxMDAxMDAwMDAwNzE4RTQwMTAwMDAwODAwMENDNQorOjEwNjlCMDAwRTA5OTAxMDA5MDA0MDAwNzk2MzAwMTAwMDBCNTAwMEQzOQorOjEwNjlDMDAwNDZDOTAxMDAzNjg1MzA0MDgxMzIwMDAwMDAwMDAwMEJDRQorOjEwNjlEMDAwRTY5MTAxMDAwMDAyMDBBMTQ2QzkwMTAwMDAwMDAwMEI4MQorOjEwNjlFMDAwRTY5MTAxMDAwNDAwMkUwNTQ4QjEwMTAwMDAwMDEwNDBBRQorOjEwNjlGMDAwRTFCMTAxMDBDMzg3MDA0MDgxQjAwMDAwMDAwMDAwRkI0RQorOjEwNkEwMDAwMjhCMDAxMDAwMDAwMDBGQjg2QjAwMTAwMDAwMDAwRjg4MworOjEwNkExMDAwMTRCMDAxMDA0Nzg1MjI0NjIzN0MwMDAwNDM4NTIyNDBCNAorOjEwNkEyMDAwODc3QzAwMDAwMDAwMDA0ODFGOTAwMTAwNDU4NTIyNDEzRQorOjEwNkEzMDAwODc3QzAwMDAwMDAwMDA0NzFGOTAwMTAwNDc4NTIyNDIyQworOjEwNkE0MDAwODc3QzAwMDAwMDAwMDA0NTFGOTAwMTAwNDc4NTY2MUIwMQorOjEwNkE1MDAwMkMzMDAwMDAwMDAwMDBBMDEzQjAwMTAwMDAwMDc2NDFCRgorOjEwNkE2MDAwNDFDMzAxMDA3Njg1MjM5MjE1NkMwMDAwNzY4NUEyNDUwRQorOjEwNkE3MDAwMUY3QzAwMDA3QTg1MjI0QkZEN0YwMDAwMTcwMDAwRDBBQworOjEwNkE4MDAwQTJDOTAxMDAwMDAwMDA0MDI3QjAwMTAwMDIwMDAwMEE3NgorOjEwNkE5MDAwMjRDODAxMDBBQjkyMDA0MDBGMzAwMTAwNzQ4NTIyMDgyOQorOjEwNkFBMDAwNDAzMDAwMDAwMDAwMDA0MUEzQzEwMTAwRjAwNzAwMTJDNworOjEwNkFCMDAwMjRDQzAxMDA1MDg1QUE0MTI3NDAwMDAwMDEwMDAwMTNBQQorOjEwNkFDMDAwODBDQzAxMDA3MDg1MjY0MDIzMzAwMDAwMDAwMDAwNDA4QgorOjEwNkFEMDAwODNCMDAxMDA2MDAwMDAwMzg0QzgwMTAwMTAwMDAwMTBCMgorOjEwNkFFMDAwNDhDRDAxMDAxNzAwMDBEMEEyQzkwMTAwNUQ4NUEyNDA3OQorOjEwNkFGMDAwODM2QzAwMDA2OTg1MDA0MTgzQjAwMDAwMDA4MDAwNDI4MworOjEwNkIwMDAwNDQ5OTAxMDAwMDAwNjgyMTM4OTYwMTAwMDAwMDJFNTBEMQorOjEwNkIxMDAwNDlDMTAxMDA2Mjg1QTI0NDIzNkMwMDAwMzAwMDAwMDNEQgorOjEwNkIyMDAwNDhDOTAxMDAwMDAwMDA0NEYxQjEwMTAwMEMwMDAwMjA0MAorOjEwNkIzMDAwRjBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTQwMAorOjEwNkI0MDAwNjJERDAxMDA2NTg1QTg0MkUwMzEwMDAwMDAwMDAwNDREQworOjEwNkI1MDAwODVDMDAxMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDE4OQorOjEwNkI2MDAwQTNDMTAxMDA1Qjg1QTI0MTgxNTAwMDAwNzA4NTIyNDBENQorOjEwNkI3MDAwMjM2QzAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBERgorOjEwNkI4MDAwNjJERDAxMDA2RDg1QTg0MDgxMzIwMDAwQUY4MjAwODg3RgorOjEwNkI5MDAwMUNCMDAwMDAwMDAwMDAwMzQ4QjEwMTAwRUUwNzAwNDBGNworOjEwNkJBMDAwMjU5ODAxMDAxNzAwMDBEMDJBQzgwMTAwODM4NTAwMTcyRQorOjEwNkJCMDAwMTBCMDAwMDA5NTk0MDA0MDgxMzIwMTAwN0E4NTAwNDBCOQorOjEwNkJDMDAwODFCMjAwMDBBQjkyMDA5MjI1MzAwMTAwMDAwMDAwNDAyRAorOjEwNkJEMDAwMzFCMDAxMDA3QTg1MjIwODJFMzAwMDAwODM4NTAwNDEwMworOjEwNkJFMDAwMjdCMDAwMDA4MDgwMDBBNjA0QjAwMTAwMDYwMDAwNDAyRAorOjEwNkJGMDAwODc5ODAxMDBERjk1MDAwQThDMzAwMTAwMDAwMDAwNDBGQQorOjEwNkMwMDAwMEZCMDAxMDAwMDAwMDA1QzFGOTAwMTAwODI4NTIyOUZGMAorOjEwNkMxMDAwMTM2QzAwMDAwMjAwMDA4ODFDQ0MwMTAwRjU4MjAwNDBDQgorOjEwNkMyMDAwODFCMjAwMDAxQTg3MDA0MTNGQzMwMDAwMDAwMDAwNDAwRAorOjEwNkMzMDAwMEZCMDAxMDAyODAwMDAwMTgwQ0UwMTAwOTc4NTJBNDA5NgorOjEwNkM0MDAwODEzMDAwMDAwMDgwMDAxMDQ0QzkwMTAwNDAwMDAwNDA3NQorOjEwNkM1MDAwODE5ODAxMDA4Qzg1QTI0ODFGN0MwMDAwOEM4NUEyNDc4QQorOjEwNkM2MDAwMUY3QzAwMDA4Qzg1QTMwNzAzNkMwMDAwODAwMDAwNDA5RgorOjEwNkM3MDAwODE5ODAxMDA4Rjg1QTM0MDAyNkMwMDAwMjgwMDAwMDE2QworOjEwNkM4MDAwRjBDRDAxMDA5MTg1MDA0MDBGQjAwMDAwMjgwMDAwNDBDOQorOjEwNkM5MDAwRjBDRDAxMDAwNDAwMDA0MDBFQ0MwMTAwMjgwMDAwMDNFQworOjEwNkNBMDAwRjBDOTAxMDAyODAwMDAwMEYwQzkwMTAwMDAwMDAwMTYzMgorOjEwNkNCMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwMTBCOAorOjEwNkNDMDAwNjJERDAxMDA5NTg1QTg1QzFGMTAwMDAwMDAwMDAwNDBGNworOjEwNkNEMDAwNDM5OTAxMDAwMDAwMDBGMDA4QjAwMTAwQTAwMTJENDAyMAorOjEwNkNFMDAwMDBDMDAxMDA2MTg2MjIwRjQyMDUwMDAwQTg4NTlDMEZBQworOjEwNkNGMDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTA1NgorOjEwNkQwMDAwNDJDOTAxMDBBMzg1MjI0MEUzNkQwMDAwMDAwMDAwNDc1NgorOjEwNkQxMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQTA4NUE4NDBDMworOjEwNkQyMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwQTg4NTIyMDdENQorOjEwNkQzMDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDdBMworOjEwNkQ0MDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUZERgorOjEwNkQ1MDAwRTE5MTAxMDBDMDA2QTI0NTFGN0MwMDAwMTAwMDAwMDM2NQorOjEwNkQ2MDAwNDhDOTAxMDAwMDAwMkQ1NDI5QzAwMTAwMDAwMDAwRjhBRQorOjEwNkQ3MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjhBNQorOjEwNkQ4MDAwMEVCMDAxMDA0MjAwMDAwMzBBQzgwMTAwMEMwMDAwQTQ3QworOjEwNkQ5MDAwMENDODAxMDBFRDkyMDA0MDgxMzIwMTAwMDAwMDAwMTQ5NworOjEwNkRBMDAwMDJCMDAxMDAwMDAwMDAxNDI0RDAwMTAwMDAwMDAwMTQxMworOjEwNkRCMDAwMTBDMDAxMDAxMjAwMDAwODEwQzgwMTAwMDAwMDAwNDBDRgorOjEwNkRDMDAwMjNCMDAxMDBGRTdGMDAwNTQ0QzkwMTAwMDAwMDAwMEE1NQorOjEwNkREMDAwRTRCMTAxMDBEMTg1MjIwMTgwMzIwMDAwMDAwMDNDNDQ3MgorOjEwNkRFMDAwMjNFMDAxMDAwMDAwMkVBNDgwQjAwMTAwMDAwMDAwMTA4QworOjEwNkRGMDAwNDhDMTAxMDBCRTg1QTMwNzAyNkMwMDAwQkY4NTY4MDE4MQorOjEwNkUwMDAwMUFCMDAwMDAwMDAwNjgwNzFBQjAwMTAwMDAwMDAwMEQ3MQorOjEwNkUxMDAwMDJEMDAxMDAwMDAwMDAwNUYwQjEwMTAwMDAwMDAwMENFQworOjEwNkUyMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMEQxRgorOjEwNkUzMDAwMEFDMDAxMDBDQjg1MjI0MDAzNkMwMDAwQ0I4NTIyNDJCMgorOjEwNkU0MDAwMjM2QzAwMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDc0NworOjEwNkU1MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwRUY4NTI4NDBCRgorOjEwNkU2MDAwODEzMjAwMDBDODg1MDA0MDgxQjIwMDAwMDAwMDAwMTA5RgorOjEwNkU3MDAwODBDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDAzNworOjEwNkU4MDAwNjJCMTAxMDBDRDg1QTg0MDIzMzAwMDAwQUY4MjAwODhBOAorOjEwNkU5MDAwMUNCMDAwMDBFRjg1MDA0MDgxQjIwMDAwMDAwMDNDNDRCRgorOjEwNkVBMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTBDNQorOjEwNkVCMDAwNDhDMTAxMDBENjg1QTMxMjBFNkMwMDAwRDc4NTYwMDc3QgorOjEwNkVDMDAwMUFCMDAwMDAwMDAwNjAxMjFBQjAwMTAwMDAwMDY4MEQ0NgorOjEwNkVEMDAwMTY5NDAxMDBGRkZGMDAwQjE2RDgwMTAwMDAwMDY4MDg5RgorOjEwNkVFMDAwM0U5NjAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDIxRAorOjEwNkVGMDAwRTBCMTAxMDAwMDAwMDAxMDg2QzAwMTAwMDAwMDAwNDY2MworOjEwNkYwMDAwNjFCMTAxMDAyMDAwMDA0MzYyREQwMTAwREU4NUE4NUM2NAorOjEwNkYxMDAwMUYxMDAwMDAwRDg2MjIwRDE0NkMwMDAwRTQ4NTIyMEQ2OAorOjEwNkYyMDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwRTg4NTAwMEQ3OQorOjEwNkYzMDAwMjREMDAwMDAwMDAwMDA0MTJCQzAwMTAwMDAwMDAwMTUxQgorOjEwNkY0MDAwQTJCMTAxMDAxMDAwMDAyMDEwQzgwMTAwRjAwNzAwNDBBRAorOjEwNkY1MDAwMjU5ODAxMDBFQTg1MjI0MjIzNkMwMDAwRUY4NTAwNDE1QworOjEwNkY2MDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA5NQorOjEwNkY3MDAwNjJERDAxMDBFQjg1QTg1QzFGMDAwMDAwQUY4MjAwODg4NQorOjEwNkY4MDAwMUNCMDAwMDAwMDAwMDA0MDIzQjAwMTAwMEQ4NjIyMEQ1RgorOjEwNkY5MDAwMTQ1MDAwMDAwQzg2QTIwRDBFNTAwMDAwRkI4NTIyNDYwNgorOjEwNkZBMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTBBMAorOjEwNkZCMDAwNDJDOTAxMDBGOTg1MjI0MEUzNkQwMDAwMDAwMDAwNDc0RQorOjEwNkZDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRjY4NUE4NDBCQgorOjEwNkZEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMjA4MDAwMDNENgorOjEwNkZFMDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDAwMDJEMDZCQworOjEwNkZGMDAwNDhCMTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjhERQorOjEwNzAwMDAwMDRCMDAxMDAwMDg2MUZGMDBFMzAwMDAwQjg4NTAwNEM2RgorOjEwNzAxMDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwQjg4NTIzMDcxRgorOjEwNzAyMDAwMTQ2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMjQwMDAwNDAyQQorOjEwNzAzMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDAyMAorOjEwNzA0MDAwRjBCMTAxMDAwMDAwMDAxNkYwQjEwMTAwMjQwMDAwMDBDMgorOjEwNzA1MDAwMDBDODAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTRDOQorOjEwNzA2MDAwNjJERDAxMDAwOTg2QTg0NjFGMTAwMDAwQjg4NTAwMDNGNAorOjEwNzA3MDAwMENCMDAwMDBCODg1MDAwRDE4QzAwMDAwMDQwMDJFMTRFQworOjEwNzA4MDAwMEFEMDAxMDAxMjAwMDAwNTQ4Q0QwMTAwRkU3RjAwMDU3NgorOjEwNzA5MDAwNDJDOTAxMDAwQzAwMkFGMkUwQjEwMTAwMTM4NjIyNDAyRgorOjEwNzBBMDAwMzE2QzAwMDAwMDAwNjAxODM4OTYwMTAwMUUwMDAwNDA5RQorOjEwNzBCMDAwNDM5OTAxMDAwMDgxMDBGNjgwQ0UwMTAwMTc4NkE2NDBBQQorOjEwNzBDMDAwODEzMjAwMDAwMDAwMDA0NDQzQzEwMTAwMTk4NjIyMEJGOAorOjEwNzBEMDAwRUQ2RDAwMDAwODAwMDBBMTQyQzkwMTAwMDIwMDAwQTFGRQorOjEwNzBFMDAwNDZDOTAxMDAwRjAwMDBGQTk0ODgwMTAwMDIwMDAwNEExRQorOjEwNzBGMDAwODZFNDAxMDAwMDAwMDBGNjBFQjAwMTAwMjE4NjIyNDc2MAorOjEwNzEwMDAwMUY3QzAwMDAwNDAwMUY0MzBFNTAwMDAwMjE4NkEwNDY5MworOjEwNzExMDAwMEY0MDAwMDAwMDAwMDA0MTBGQzAwMTAwMjU4NjIyNDhGQQorOjEwNzEyMDAwMUY3QzAwMDAwMDAwMDA0MDkxQjAwMTAwMDQwMDBGQTI4RAorOjEwNzEzMDAwNDIzMTAwMDAyODg2MDA0MDg5QjAwMDAwMEMwMDAwQTIwNworOjEwNzE0MDAwNDJDOTAxMDAwMDAwMDA0Mzg5QjAwMTAwMDAwMDAwNDM3MworOjEwNzE1MDAwOTVEMDAxMDAwMDAwMDBGQzgyQjAwMTAwMkI4NkEwNDEwOAorOjEwNzE2MDAwOTA0MDAwMDAwMDAwMDA0MTkxQzAwMTAwMzA4NjIyNDc5RAorOjEwNzE3MDAwMUY3QzAwMDAzMDg2QTA0Mzg5NkMwMDAwMzA4NjIwNDVDQgorOjEwNzE4MDAwODk2QzAwMDAzMDg2QTA0MTBFNDAwMDAwMDAwMDAwNDFFNAorOjEwNzE5MDAwMEZDMDAxMDAwMDAwMDA0MTg5QzAwMTAwMjg4NkEyNDEwMworOjEwNzFBMDAwOTU1MDAwMDAzOTg2MjI0ODFGN0MwMDAwMTAwMDAwNDhERQorOjEwNzFCMDAwOTJGNDAxMDBGRkZGMDA0ODkwODgwMTAwMzc4NjkwNDg1NAorOjEwNzFDMDAwOTI0MDAwMDAwMDAwMDA0MTkzQzAwMTAwMEEwMDAwQTJBQworOjEwNzFEMDAwNDRDOTAxMDAwMDAwNjYyMDkzQTQwMTAwMzA4MDAwMTAyMworOjEwNzFFMDAwNDRDOTAxMDAxMjAwMDAxNEYwQzkwMTAwMDAwMDAwMTc5QQorOjEwNzFGMDAwRjBCMTAxMDAxMjAwMDAwNUUwQ0QwMTAwMzAwMDAwMTBFOAorOjEwNzIwMDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDA3RQorOjEwNzIxMDAwNjJERDAxMDAzRjg2QTg0MDgxMzIwMDAwNEE4NjIyNUM4MAorOjEwNzIyMDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTAwMgorOjEwNzIzMDAwNDhDMTAxMDA0OTg2MjI0MEUzNkQwMDAwMDAwMDAwNDY3RAorOjEwNzI0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNDY4NkE4NDBFNworOjEwNzI1MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwNUM5QQorOjEwNzI2MDAwMUY4MDAxMDA0RDg2QTI0NzFGN0MwMDAwRTM5MjAwNDA3MgorOjEwNzI3MDAwODEzMjAxMDBDNjg2MDAxNzEwQjAwMDAwRUE5MjAwNDA3QgorOjEwNzI4MDAwODEzMjAxMDAwMDAwMkYwMzQ4QjEwMTAwNTE4NkEwMDdBMAorOjEwNzI5MDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDAwMEI3NAorOjEwNzJBMDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwNTU4NjkwRjI5MworOjEwNzJCMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjBEOQorOjEwNzJDMDAwMTdBNDAxMDAxMDAwMDAxNDJBQzgwMTAwMDAwMDAwNTA5QgorOjEwNzJEMDAwMkJFMDAxMDAwMDAwMDBGMjJBOTQwMTAwMzA4MDAwMTAzMQorOjEwNzJFMDAwNDJDOTAxMDA1Rjg2MjI0MEUzNkQwMDAwMDAwMDAwNDRCNworOjEwNzJGMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNUM4NkE4NDAyMQorOjEwNzMwMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDA4MDAwMTdBRQorOjEwNzMxMDAwMTBEQzAxMDBDNjg2MDA0MDgxQjIwMDAwNjk4NjlDMEYyNworOjEwNzMyMDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTAxRgorOjEwNzMzMDAwNDJDOTAxMDA2OTg2MjI0MEUzNkQwMDAwMDAwMDAwNDc1OQorOjEwNzM0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNjY4NkE4NDBDNgorOjEwNzM1MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNkU4NjIyMDdEOAorOjEwNzM2MDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDc2RAorOjEwNzM3MDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUZBOQorOjEwNzM4MDAwRTE5MTAxMDAwNDAwMkUwMzQ4QjEwMTAwMDAwMDAwMEE1MQorOjEwNzM5MDAwRTBCMTAxMDA3Mzg2MjI0MDMxNkMwMDAwMEMwMDAwNDAxNworOjEwNzNBMDAwNDU5OTAxMDAwMDAwNjAxODM4OTYwMTAwMDAwMDJFMTA3OQorOjEwNzNCMDAwNDhCMTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDhEOAorOjEwNzNDMDAwRjBCMTAxMDAwMDAwMDAwM0UwQjEwMTAwMDAwMDAwNDQ0MgorOjEwNzNEMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwNzg4NkE4NDA5MAorOjEwNzNFMDAwMjMzMDAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDJENTI0NgorOjEwNzNGMDAwMTFDMDAxMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwRjg5RQorOjEwNzQwMDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjgwRQorOjEwNzQxMDAwMEVCMDAxMDAwQzAwMDBBNDBDQzgwMTAwMDAwMDNDNDRBOAorOjEwNzQyMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTAzRgorOjEwNzQzMDAwNDhDMTAxMDA4Njg2QTMxMjBFNkMwMDAwODc4NjY4MDc4QgorOjEwNzQ0MDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwMDAwMDAwMTAxRAorOjEwNzQ1MDAwODZDMDAxMDAwMDAwNjgwODNFOTYwMTAwMDAwMDAwMEM5NAorOjEwNzQ2MDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwNDZBMAorOjEwNzQ3MDAwNjFCMTAxMDAyMDAwMDA0MzYyREQwMTAwOEM4NkE4NUM0MAorOjEwNzQ4MDAwMUYxMDAwMDBCQjg2MjIwRDE0NkMwMDAwOTI4NjIyMEQ5NgorOjEwNzQ5MDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwOTY4NjAwMEQ1NQorOjEwNzRBMDAwMjREMDAwMDAwMDAwMDA0MTJCQzAwMTAwMDAwMDAwMTVBNgorOjEwNzRCMDAwQTJCMTAxMDAxMDAwMDAyMDEwQzgwMTAwRjAwNzAwNDAzOAorOjEwNzRDMDAwMjU5ODAxMDA5ODg2MjI0MjIzNkMwMDAwOUQ4NjAwNDE4OQorOjEwNzREMDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTAyMAorOjEwNzRFMDAwNjJERDAxMDA5OTg2QTg1QzFGMDAwMDAwQUY4MjAwODg2MQorOjEwNzRGMDAwMUNCMDAwMDAwMDAwMDA0MDIzQjAwMTAwMDQwMDIyMEQ3OQorOjEwNzUwMDAwMTQ1MDAwMDBCQTg2QTIwRDBFNTAwMDAwQTk4NjIyNDYzMworOjEwNzUxMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTAyQQorOjEwNzUyMDAwNDJDOTAxMDBBNzg2MjI0MEUzNkQwMDAwMDAwMDAwNDcyOQorOjEwNzUzMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQTQ4NkE4NDA5NgorOjEwNzU0MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMjA4MDAwMDM2MAorOjEwNzU1MDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDAwMDJEMDY0NgorOjEwNzU2MDAwNDhCMTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjg2OAorOjEwNzU3MDAwMDRCMDAxMDBBRTg2MUZGMDBFMzAwMDAwODE4NjAwNEM4MgorOjEwNzU4MDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwODE4NjIzMDdFMAorOjEwNzU5MDAwMTQ2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMjQwMDAwNDBCNQorOjEwNzVBMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDBBQgorOjEwNzVCMDAwRjBCMTAxMDAwMDAwMDAxNkYwQjEwMTAwMjQwMDAwMDA0RAorOjEwNzVDMDAwMDBDODAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQ1NAorOjEwNzVEMDAwNjJERDAxMDBCNzg2QTg0NjFGMTAwMDAwODE4NjAwMDMwNworOjEwNzVFMDAwMENCMDAwMDA4MTg2MDAwRDE4QzAwMDAwQzQ4NjIyNUMyQgorOjEwNzVGMDAwMUY3QzAwMDAwMDAwMDA1QzFGODAwMTAwMDAwMDNDNDQ3NAorOjEwNzYwMDAwMjNFMDAxMDAwMDAwMkQxMDQ4QzEwMTAwQzQ4NjIyNDA4MworOjEwNzYxMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA3MQorOjEwNzYyMDAwNjJERDAxMDBDMTg2QTg0MDgxMzIwMDAwQUY4MjAwODg3RgorOjEwNzYzMDAwMUNCMDAwMDAwMDAwMDAxNzEwQjAwMTAwQzY4NjAwNDAxQQorOjEwNzY0MDAwMkJCMDAwMDAwMDgwMDAwMzQ0OTkwMTAwMDAwMDAwMDRGQQorOjEwNzY1MDAwRTBCMTAxMDBDQjg2MjI5RjEzNkMwMDAwMDIwMDAwODg3RAorOjEwNzY2MDAwMUNDQzAxMDBGNTgyMDA0MDgxQjIwMDAwRjA5NTAwNDE4MQorOjEwNzY3MDAwM0Y0MzAxMDAwMDAwMDA0MDhEQjAwMTAwMDAwMDAwNDBDOQorOjEwNzY4MDAwMDVCMDAxMDBERjk1MDA0MDBGMzAwMTAwMzA4NzAwNUMzRAorOjEwNzY5MDAwMUY5MDAwMDAxMDAwMDAwMDBFRjQwMTAwMDAwMDAwM0FFRQorOjEwNzZBMDAwMDE4NDAxMDAwMzAwMDAwNzFBRjQwMTAwRUY5MjAwMDdCMworOjEwNzZCMDAwMTYzMDAxMDBEQTg2MjI0MTgxNkMwMDAwRDg4NjIyNDIxMQorOjEwNzZDMDAwODE2QzAwMDBBRjgyMDA4ODFDQjAwMDAwRDk4NjIyNUY2OAorOjEwNzZEMDAwMEY3QzAwMDAxQTg3MDA0MDBGQjAwMDAwRTI4NkEyNUExQgorOjEwNzZFMDAwMUY3QzAwMDA2OTkyMDA0MDgxMzIwMTAwRTI4NjIyMjA2NgorOjEwNzZGMDAwODU2QzAwMDBERjg2OUMwRjgwMzIwMDAwQUY4MjAwODgxRQorOjEwNzcwMDAwMUNCMDAwMDA0QTkzMDA1QzFGMDAwMTAwM0M5NTAwNDI0MQorOjEwNzcxMDAwNjEzMTAxMDBBRjgyMDA4ODFDQjAwMDAwOTAwNDAwMDdCNgorOjEwNzcyMDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjA3NgorOjEwNzczMDAwMThCMDAxMDAwMDAwMDAwMDgwQjAwMTAwQzM4N0EyNUYwNAorOjEwNzc0MDAwODE2QzAwMDBBODAwMkQ0MzE5ODAwMTAwMzcwMDJERjA0NgorOjEwNzc1MDAwMjRCMDAxMDAwNDAwMDBGMzhFRjQwMTAwMEYwMDAwRjNEOAorOjEwNzc2MDAwOTA4ODAxMDBGMTg2MjI0ODhFNkMwMDAwMzYwMDAwNDBBRgorOjEwNzc3MDAwNDM5OTAxMDA1ODAwM0Q0M0U3RTEwMTAwRjE4NjFGRjAwNQorOjEwNzc4MDAwMjQ2QzAwMDBGMDg2MjM0MThGNkMwMDAwQzM4NzAwNDcwMworOjEwNzc5MDAwODFCMDAwMDBDMzg3MDA0ODgxQjAwMDAwNDAwMDAwNDA3NQorOjEwNzdBMDAwNDM5OTAxMDBCMDAwMkRGMDE0QjAwMTAwRjY4NjIyMEFDMgorOjEwNzdCMDAwOTA0MDAwMDBDMzk1MDA0MDkxMzAwMTAwQzM4N0EyNDA3MworOjEwNzdDMDAwODAzMjAwMDBCMDAwMkQ0NTgxQjAwMTAwMDI4NzIyRjAxOAorOjEwNzdEMDAwMkMzMDAwMDBBMzAwMkQzMDgzQjAwMTAwQUMwMDJERjM0RAorOjEwNzdFMDAwODJFMDAxMDBGQzg2QTM0MTJDNkMwMDAwMDAwMDAwMTYyMgorOjEwNzdGMDAwODJCMDAxMDA5ODAwMkRGMDgyQzAwMTAwODgwMDJERjBCOQorOjEwNzgwMDAwODJEMDAxMDAwMDAwMDBGMjk4RTgwMTAwQzM4NzIwNENGQworOjEwNzgxMDAwODI2QzAwMDA3QzAwMkQ0MTk4RTgwMTAwQzM4NzIwRjBCNQorOjEwNzgyMDAwOTg2QzAwMDAxQTg3MjIwQTgwMzIwMDAwNDAwMjAwMEM4NworOjEwNzgzMDAwN0U4OTAxMDAxQTg3QTY0MDgxMzIwMDAwQzM4NzAwNDk3MworOjEwNzg0MDAwODFCMDAwMDAyMDAwMDBBNjgwQjAwMTAwMEE4NzIyNDMxQQorOjEwNzg1MDAwMjE2RjAwMDAxMzgwMDA0MDgwREMwMTAwMEI4NzAwNDA5NgorOjEwNzg2MDAwODFCMjAwMDAxQTgwMDA0MDgwREMwMTAwMEI4N0EyNUUxQworOjEwNzg3MDAwMEI3RDAwMDAwMDAwMDA0MDA4QjEwMTAwMEQ4NzlGODVDRQorOjEwNzg4MDAwODAzMjAwMDAxMTg3MDA0MDgxQjIwMDAwRUM4MjIyNDA2QgorOjEwNzg5MDAwNTc3RDAwMDAwMTAwMDA0MDU3OTkwMTAwMTE4NzQyNDBDOAorOjEwNzhBMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwREQ4MjFBNUJFNgorOjEwNzhCMDAwNjk5MzAwMDAwNDAwMDBDQjgxQzgwMTAwMTc4NzIyNDBCMworOjEwNzhDMDAwRjI3RjAwMDBDNDgwMDA2Rjk3MzMwMTAwMTk4NzIyNDBDNworOjEwNzhEMDAwNzM3RDAwMDBERTgwMDA0MThCQjMwMDAwMTQ4NzAwNDAwMAorOjEwNzhFMDAwODFCMjAwMDAyMTg3OUMwRjgwMzIwMDAwMDA4MDAwMTBEMAorOjEwNzhGMDAwNDJDOTAxMDAyMTg3MjI0MEUzNkQwMDAwMDAwMDAwNDVERAorOjEwNzkwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUU4N0E4NDA0NworOjEwNzkxMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNDU5MjIyMDIzNAorOjEwNzkyMDAwODAzMjAwMDAyMjg3NDI0MDgxMzIwMDAwMDAwMDAwNDQ4MworOjEwNzkzMDAwOTM5MzAxMDA0NTkyMUEwMjY4OTcwMDAwMkM4NzlDMEZEMAorOjEwNzk0MDAwODAzMjAwMDAwMDgwMDAxMDQyQzkwMTAwMkM4NzIyNDBENAorOjEwNzk1MDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAyRgorOjEwNzk2MDAwNjJERDAxMDAyOTg3QTg0MDgxMzIwMDAwQUY4MjAwODhEMworOjEwNzk3MDAwMUNCMDAwMDA0RjkyMjIwMjgwMzIwMDAwMkQ4NzQyNDA0RQorOjEwNzk4MDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwNEY5MjFBMDJEQworOjEwNzk5MDAwNjg5NzAwMDAzNzg3OUMwRjgwMzIwMDAwMDA4MDAwMTAzRAorOjEwNzlBMDAwNDJDOTAxMDAzNzg3MjI0MEUzNkQwMDAwMDAwMDAwNDUxNgorOjEwNzlCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMzQ4N0E4NDA4MQorOjEwNzlDMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwRjk4MjIyMDJFMAorOjEwNzlEMDAwODAzMjAwMDAzODg3NDI0MDgxMzIwMDAwMDAwMDAwNDRCRAorOjEwNzlFMDAwOTM5MzAxMDAwMDAwMUEwMjY4OTcwMTAwRjk4MjAwNDA5OQorOjEwNzlGMDAwMDVCMDAwMDAwMDgwMDBBNjU2QjEwMTAwNTY5NTJGNDA0QQorOjEwN0EwMDAwMDVCMDAxMDA4ODg3QTI0MEU3NkQwMDAwQjg5NDI5NDFDNQorOjEwN0ExMDAwRTdCMTAxMDAwMDAwMDA1NEVGOTMwMTAwMDAwMDAwRjIwNAorOjEwN0EyMDAwMEVCMDAxMDAyOTAwMDA0MDBEOTgwMTAwMDkwMDAwMDc3OAorOjEwN0EzMDAwMTJFNDAxMDAwMDAwMDBBNzEzQzAwMTAwMDMwMDAwMDdDQQorOjEwN0E0MDAwMUFGNDAxMDAwNzAwMDAwNzE2ODgwMTAwRkZGRjAwMTA2QworOjEwN0E1MDAwMzREODAxMDAwMDAwMDAwMzM0OTQwMTAwMDAwMDAwNDAwRAorOjEwN0E2MDAwMjNCMDAxMDAyMDE4MDA0MDExOTgwMTAwMDBCNTAwMEQ1RQorOjEwN0E3MDAwNDJDOTAxMDA2Qzg3MjIwQkU2N0QwMDAwNEQ4NzYwNDAwMworOjEwN0E4MDAwODEzMjAwMDBGRkZGMDAwNzg0ODkwMTAwNTQ4NzA1QzI4RQorOjEwN0E5MDAwMjQzMDAwMDA1ODA0MDA0MDgxMzIwMTAwMDAwMDJEMDUxMAorOjEwN0FBMDAwNDhCMTAxMDA4OTg3NzBGMDE4MzAwMTAwNkM4NzAwNDBGMAorOjEwN0FCMDAwODFCMjAwMDAwMDAwNzA0MDgxQjIwMTAwNjM4N0EwNDhERAorOjEwN0FDMDAwMjM2QzAwMDAwMDAwMDA1MDM1RDAwMTAwMDA4MDAwMUEzNworOjEwN0FEMDAwNDJDOTAxMDA1RDg3MjI0MEUzNkQwMDAwMDAwMDAwNDJDMgorOjEwN0FFMDAwNjFCMTAxMDA0MDAwMDAxQTYyREQwMTAwNUE4N0E4NDAyMAorOjEwN0FGMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMjA5ODAwNDA1NgorOjEwN0IwMDAwNDM5OTAxMDA4OTg3MDBGODE4MzAwMTAwNUU4N0EyNDE3RgorOjEwN0IxMDAwMjM1MDAwMDBGRkZGMDAxMDM0RDgwMTAwMDAwMDAwMDNENAorOjEwN0IyMDAwMzQ5NDAxMDAyMDE4MDA0MDExOTgwMTAwMDAwMDJFMUEyMgorOjEwN0IzMDAwNDhCMTAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwMDg1QworOjEwN0I0MDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMjAwMDAwMUEwNAorOjEwN0I1MDAwNjJERDAxMDA2Nzg3QTgwOUUwMzEwMDAwMDAwMDAwNDFGNAorOjEwN0I2MDAwMjNDMDAxMDAwMDAwMDA1MDM1QzAwMTAwMDAwMDAwNDRBNworOjEwN0I3MDAwMTFDMDAxMDA3ODg3MjI0MTBENTAwMDAwMDAwMDAwNDEzMworOjEwN0I4MDAwMEZDMDAxMDA3NDg3QTBBQTBGNkMwMDAwMDAwMDAwNDEyNAorOjEwN0I5MDAwMEZCMDAxMDAwOTAwMDAwNzEyRTQwMTAwMDAwMDAwQTc3NworOjEwN0JBMDAwMTNDMDAxMDAwMDAwMDA0MDFCQjAwMTAwNEI4NzAwNDFFMgorOjEwN0JCMDAwMTdCMDAwMDAwMDAyMDAwOTEyQzgwMTAwNEI4NzgzNDE4MgorOjEwN0JDMDAwMTc0MDAwMDAwMDAwMDA0MDE3QjAwMTAwNEI4NzAwNDE0MworOjEwN0JEMDAwMUJDMDAwMDA4Mzg3MjM0MDIzNkMwMDAwMDAwMDAwNTA3RQorOjEwN0JFMDAwMzVEMDAxMDAwMDgwMDAxQTQyQzkwMTAwODA4NzIyNDA4MAorOjEwN0JGMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMUE4NgorOjEwN0MwMDAwNjJERDAxMDA3RDg3QTg0MDgxMzIwMDAwQUY4MjAwODhEQworOjEwN0MxMDAwMUNCMDAwMDAyMDk4MDA0MDQzOTkwMTAwODk4NzAwRjhCQgorOjEwN0MyMDAwMTgzMDAxMDA4MTg3QTI0MTIzNTAwMDAwMDAwMDAwNDE2QworOjEwN0MzMDAwMEZDMDAxMDA4Njg3QTBBQTBGNkMwMDAwMDAwMDAwNDE2MQorOjEwN0M0MDAwMEZCMDAxMDBCODk0MjAwN0U0QjEwMTAwNTY5NTIwNDAyMAorOjEwN0M1MDAwRTdCMTAxMDAxQTg3MDA0MDBGQjAwMDAwRkZGRjAwMENFMQorOjEwN0M2MDAwODBEODAxMDBDMDAyMDAwQzdFODkwMTAwOUI4NzI2NTQ0OQorOjEwN0M3MDAwNjEzMTAwMDA5MTg3ODcwQzgwMzIwMDAwMEYwMDAwNDBDNgorOjEwN0M4MDAwNjI5OTAxMDA5MTg3Mjg0MDgxMzIwMDAwOTE4N0EyNTRCNworOjEwN0M5MDAwNzc3RDAwMDA4RDg3MDA0MDgxQjIwMDAwOTY4NzIyNDZFNAorOjEwN0NBMDAwMTk3QzAwMDAwRDAwMDA0MDYyOTkwMTAwMDAwMEE4NDAwRQorOjEwN0NCMDAwODFCMjAwMDAwMDAwQTI1NDc3N0QwMTAwOTI4NzAwNDA0RAorOjEwN0NDMDAwODFCMjAwMDA5Qjg3MjI0OTE5N0MwMDAwMEUwMDAwNDAxMQorOjEwN0NEMDAwNjI5OTAxMDAwMDAwQTg0MDgxQjIwMDAwMDAwMEEyNTQ5NworOjEwN0NFMDAwNzc3RDAxMDA5Njg3MDA0MDgxQjIwMDAwMTAwMDAwNDBCRgorOjEwN0NGMDAwNjI5OTAxMDAwMDAwQTg0MDgxQjIwMDAwMDAwMEEyNTQ3NworOjEwN0QwMDAwNzc3RDAxMDA5Qjg3MDA0MDgxQjIwMDAwMzA5NDJGNTVBMQorOjEwN0QxMDAwRjE5MzAxMDAwMDQwMDBBNjU2QjEwMTAwRjk4MkEyNDE5MgorOjEwN0QyMDAwRTU1MTAwMDA2NDAwMDA0MEU1OTkwMTAwQTM4NzQ0NDA0QworOjEwN0QzMDAwODEzMjAwMDBBNjg3QTI5MzU3NkYwMDAwMDAwMDAwNDEyNworOjEwN0Q0MDAwNTdDMzAxMDAwMDAwMUNBQjI3QjMwMTAwRjk4MjIyNTA4OQorOjEwN0Q1MDAwRkQ3RjAwMDBGOTgyMjI1MUZEN0YwMDAwRjk4MkEyNDFERgorOjEwN0Q2MDAwMUQ1MzAwMDA1MDQ2MDA0MDFEOUIwMTAwMzgwNTAwNDA5NworOjEwN0Q3MDAwODEzMjAxMDAwRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDAyNworOjEwN0Q4MDAwNDkzMTAxMDBCMjg3MjI0MEI1NkYwMDAwMEUwMDAwNDg2MworOjEwN0Q5MDAwQjJDQjAxMDAyMDA0MDA0MUI1NTMwMTAwRjk4MjAwNDAzQworOjEwN0RBMDAwODFCMjAwMDAwMDAwMDA1MUZEODMwMTAwNDAxNjAwNDAzOAorOjEwN0RCMDAwNDU5OTAxMDA0MDA1MDA0MDQ5MzEwMTAwMUUwMDAwNDg3RQorOjEwN0RDMDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREE1MworOjEwN0REMDAwOTFDMDAxMDAwNDAwMDA0OEIyQ0IwMTAwMjAwNDAwNDAyMworOjEwN0RFMDAwQjUzMzAxMDA2MDE2MjA0MEU1QjEwMTAwNDA4MjAwNDAzQgorOjEwN0RGMDAwQjUzMzAxMDAwODAwMDA0OEIyQ0IwMTAwRkZGRjAwNEE4NAorOjEwN0UwMDAwQjQ4QjAxMDAyMDA0MDA0MDgxMzIwMTAwMEEwMDAwNDhDOAorOjEwN0UxMDAwQjJDQjAxMDAxMDAwMDA0QUI0RjcwMTAwMjAwNDAwNDA3QQorOjEwN0UyMDAwODEzMjAxMDBGOTgyMDA0MDgxQjIwMDAwMDUwMDAwNDA2QgorOjEwN0UzMDAwNDM5OTAxMDAwMDAwMDBGMzA4QjAwMTAwMDQwMDIwNDA1NQorOjEwN0U0MDAwRTZCMTAxMDAwMzAwMDA0MDk2RTQwMTAwMDAwMDAwMDREOAorOjEwN0U1MDAwOTZDMDAxMDBDOTg3MDA0QjEwQzkwMDAwRUM4QTAwNDFBMAorOjEwN0U2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEMgorOjEwN0U3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzQworOjEwN0U4MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyQworOjEwN0U5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxQworOjEwN0VBMDAwOEZCMDAwMDAyMDhCMDA0MTA5QjAwMDAwMDQwMDAwMjBDQQorOjEwN0VCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGQworOjEwN0VDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFQworOjEwN0VEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEQworOjEwN0VFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwNTI4QjAwNDVDRQorOjEwN0VGMDAwMDlCMDAwMDA1MjhCMDA0NTA5QjAwMDAwNTI4QjAwNDVDQworOjEwN0YwMDAwMDlCMDAwMDA1MjhCMDA0NTA5QjAwMDAwMDQwMDAwMjBCOQorOjEwN0YxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5QgorOjEwN0YyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwOTE4QjAwNDM1MAorOjEwN0YzMDAwMDlCMDAwMDBCQThCMDA0MzA5QjAwMDAwQkU4QjAwNDRCQQorOjEwN0Y0MDAwMDlCMDAwMDAwOThEMDA0NTA5QjAwMDAwMDQwMDAwMjBDMAorOjEwN0Y1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1QgorOjEwN0Y2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0QgorOjEwN0Y3MDAwOEZCMDAwMDBDQThCMDA0MzA5QjAwMDAwQzk4QjAwNDNEQQorOjEwN0Y4MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBBMgorOjEwN0Y5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxQgorOjEwN0ZBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwNzk4QzAwNDJFOAorOjEwN0ZCMDAwMDlCMDAwMDA3OThDMDA0MzA5QjAwMDAwNzk4QzAwNDRCRQorOjEwN0ZDMDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjA2MgorOjEwN0ZEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEQgorOjEwN0ZFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDQgorOjEwN0ZGMDAwOEZCMDAwMDA5OThDMDA0MzA5QjAwMDAwMDQwMDAwMjBGRAorOjEwODAwMDAwOEZCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjA5QgorOjEwODAxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5QQorOjEwODAyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4QQorOjEwODAzMDAwOEZCMDAwMDBCNzhDMDA0MzA5QjAwMDAwQjc4QzAwNDQzQgorOjEwODA0MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBFMQorOjEwODA1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1QQorOjEwODA2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0QQorOjEwODA3MDAwOEZCMDAwMDBCNzhDMDA0MjA5QjAwMDAwMDQwMDAwMjA1RgorOjEwODA4MDAwOEZCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjAxQgorOjEwODA5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxQQorOjEwODBBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwQQorOjEwODBCMDAwOEZCMDAwMDBERjhDMDA0NDA5QjAwMDAwMDQwMDAwMjBGNQorOjEwODBDMDAwOEZCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBEQgorOjEwODBEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEQQorOjEwODBFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRUE4QTAwNDIzOAorOjEwODBGMDAwMDlCMDAwMDBGMDhDMDA0NTA5QjAwMDAwRjA4QzAwNDU4QworOjEwODEwMDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjAyMAorOjEwODExMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5OQorOjEwODEyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRjI4QzAwNDJFRAorOjEwODEzMDAwMDlCMDAwMDBGMjhDMDA0MzA5QjAwMDAwRjI4QzAwNDQ0QQorOjEwODE0MDAwMDlCMDAwMDBGMjhDMDA0NTA5QjAwMDAwMDQwMDAwMjBENgorOjEwODE1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1OQorOjEwODE2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0OQorOjEwODE3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRkE4QzAwNDQ5MworOjEwODE4MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBBMAorOjEwODE5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxOQorOjEwODFBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMEI4RDAwNDI1MworOjEwODFCMDAwMDlCMDAwMDBGQjhDMDA0MzA5QjAwMDAwMEI4RDAwNDRBNworOjEwODFDMDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjA2MAorOjEwODFEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEOQorOjEwODFFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDOQorOjEwODFGMDAwOEZCMDAwMDAwQzhEMDA0MzA5QjAwMDAwMDI4RDAwNDREOAorOjEwODIwMDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjAxRgorOjEwODIxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5OAorOjEwODIyMDAwOEZCMDAwMDBFQThBMDA0MTA5QjAwMDAwNzc4QzAwNDI1QworOjEwODIzMDAwMDlCMDAwMDA3NzhDMDA0MzA5QjAwMDAwNzc4QzAwNDQzRgorOjEwODI0MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBERgorOjEwODI1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1OAorOjEwODI2MDAwOEZCMDAwMDBFQThBMDA0MTA5QjAwMDAwMEQ4RDAwNDI4NQorOjEwODI3MDAwMDlCMDAwMDAwRDhEMDA0MzA5QjAwMDAwMEQ4RDAwNDREMQorOjEwODI4MDAwMDlCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjA5RgorOjEwODI5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxOAorOjEwODJBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwOAorOjEwODJCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGOAorOjEwODJDMDAwOEZCMDAwMDAxNDhEMDA0NTA5QjAwMDAwMDQwMDAwMjBBQworOjEwODJEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBEOAorOjEwODJFMDAwOEZCMDAwMDAxNjhEMDA0MjA5QjAwMDAwMDQwMDAwMjA4RAorOjEwODJGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCOAorOjEwODMwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBNworOjEwODMxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5NworOjEwODMyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMjI4RDAwNDNCOQorOjEwODMzMDAwMDlCMDAwMDA4MThEMDA0MzA5QjAwMDAwQkU4QjAwNDRFRAorOjEwODM0MDAwMDlCMDAwMDAwOThEMDA0NTA5QjAwMDAwMDQwMDAwMjBCQworOjEwODM1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1NworOjEwODM2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0NworOjEwODM3MDAwOEZCMDAwMDA4OThEMDA0MzA5QjAwMDAwQkU4QjAwNDQxRgorOjEwODM4MDAwMDlCMDAwMDAwOThEMDA0NTA5QjAwMDAwMDQwMDAwMjA3QworOjEwODM5MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAxNworOjEwODNBMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwNworOjEwODNCMDAwOEZCMDAwMDA5QThEMDA0MzA5QjAwMDAwMDQwMDAwMjAzNworOjEwODNDMDAwOEZCMDAwMDBFQThBMDA0NTA5QjAwMDAwMDQwMDAwMjBEOAorOjEwODNEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBENworOjEwODNFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwOEU4QjAwNDM4RgorOjEwODNGMDAwMDlCMDAwMDA4NThEMDA0MzA5QjAwMDAwQkU4QjAwNDQyOQorOjEwODQwMDAwMDlCMDAwMDAwOThEMDA0NTA5QjAwMDAwMDQwMDAwMjBGQgorOjEwODQxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDcwMDJEMDU4MQorOjEwODQyMDAwNDhCMTAxMDAwMDAwMDBGMzA4QjAwMTAwMDYwMDIwNDczOQorOjEwODQzMDAwRTZCMTAxMDAwNDAwMDA0Nzk2RTQwMTAwMDAwMDAwNDc5NworOjEwODQ0MDAwOTZEMDAxMDAwMDAwMDA0Nzk2RDAwMTAwMDAwMDAwMDQxMworOjEwODQ1MDAwOTZDMDAxMDA4OTg4MDA0QjEwQzkwMDAwQjI4RDAwNDkwOAorOjEwODQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENgorOjEwODQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0QQorOjEwODQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzQQorOjEwODQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQQorOjEwODRBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxQQorOjEwODRCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwQQorOjEwODRDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwODREMDAwODVCMDAwMDBFQjhEMDA0MjA5QjAwMDAwMDQwMDAwMjBEMAorOjEwODRFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEQQorOjEwODRGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQQorOjEwODUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCOQorOjEwODUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOQorOjEwODUyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OQorOjEwODUzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OQorOjEwODU0MDAwODVCMDAwMDBGMThEMDA0NjA5QjAwMDAwMDQwMDAwMjA1NQorOjEwODU1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OQorOjEwODU2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1OQorOjEwODU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OQorOjEwODU4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOQorOjEwODU5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyOQorOjEwODVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxOQorOjEwODVCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRkY4RDAwNDI1RgorOjEwODVDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjE4RTAwNDJBOAorOjEwODVEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2NQorOjEwODVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEOQorOjEwODVGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDOQorOjEwODYwMDAwODVCMDAwMDAxQzhFMDA0QTA5QjAwMDAwMDQwMDAwMjA2NAorOjEwODYxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOAorOjEwODYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjQ4RTAwNDNDNworOjEwODYzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q4RTAwNDREOQorOjEwODY0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGNAorOjEwODY1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwODY2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1OAorOjEwODY3MDAwODVCMDAwMDA3QzhFMDA0QjA5QjAwMDAwMDQwMDAwMjA5MworOjEwODY4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOAorOjEwODY5MDAwODVCMDAwMDBGNDhEMDA0MTA5QjAwMDAwMDQwMDAwMjAwNgorOjEwODZBMDAwODVCMDAwMDBGNDhEMDA0MzA5QjAwMDAwRjQ4RDAwNDQ1MworOjEwODZCMDAwMDlCMDAwMDBGNDhEMDA0NTA5QjAwMDAwRjQ4RDAwNDZCQgorOjEwODZDMDAwMDlCMDAwMDBGNDhEMDA0NzA5QjAwMDAwRjQ4RDAwNDhBNworOjEwODZEMDAwMDlCMDAwMDBGNDhEMDA0OTA5QjAwMDAwRjQ4RDAwNEE5MworOjEwODZFMDAwMDlCMDAwMDBGNDhEMDA0QjA5QjAwMDAwRjQ4RDAwNEM3RgorOjEwODZGMDAwMDlCMDAwMDBGNDhEMDA0RDA5QjAwMDAwMDQwMDAwMjAxNgorOjEwODcwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREM4RTAwNDIyRgorOjEwODcxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREM4RTAwNDQ5OQorOjEwODcyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMworOjEwODczMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NworOjEwODc0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3NworOjEwODc1MDAwODVCMDAwMDBEQzhFMDA0QjA5QjAwMDAwMDQwMDAwMjA1MgorOjEwODc2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NworOjEwODc3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NworOjEwODc4MDAwODVCMDAwMDBGNDhFMDA0NTA5QjAwMDAwMDQwMDAwMjAxMAorOjEwODc5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyNworOjEwODdBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDc1QQorOjEwODdCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RTAwNDVFQworOjEwODdDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MworOjEwODdEMDAwODVCMDAwMDA1NDkxMDA0NjA5QjAwMDAwMDQwMDAwMjA1QworOjEwODdFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENworOjEwODdGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDNworOjEwODgwMDAwODVCMDAwMDAyMThFMDA0NjA5QjAwMDAwRkY4RDAwNDZCMworOjEwODgxMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDgwNworOjEwODgyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMgorOjEwODgzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMUM4RTAwNEFCNgorOjEwODg0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMgorOjEwODg1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2NgorOjEwODg2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NgorOjEwODg3MDAwODVCMDAwMDA3RDhFMDA0NTA5QjAwMDAwMjQ4RTAwNDNDNQorOjEwODg4MDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDg5NworOjEwODg5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMgorOjEwODhBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0M4RTAwNENFNAorOjEwODhCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwODhDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGNgorOjEwODhEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFNgorOjEwODhFMDAwODVCMDAwMDAxMThGMDA0NDA5QjAwMDAwMTE4RjAwNDJENAorOjEwODhGMDAwMDlCMDAwMDBENThBMDA0NzA5QjAwMDAwRDU4QTAwNDhCOQorOjEwODkwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMQorOjEwODkxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMTE4RjAwNEJERQorOjEwODkyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMQorOjEwODkzMDAwODVCMDAwMDBGNDhEMDA0MTA5QjAwMDAwMzQ4RjAwNDc3RAorOjEwODk0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMUM4RjAwNDcyMworOjEwODk1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMQorOjEwODk2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NQorOjEwODk3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NQorOjEwODk4MDAwODVCMDAwMDAxQzhGMDA0NzA5QjAwMDAwMDQwMDAwMjBFMworOjEwODk5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyNQorOjEwODlBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNQorOjEwODlCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNQorOjEwODlDMDAwODVCMDAwMDAxQzhGMDA0NzA5QjAwMDAwMzQ4RjAwNDdCRAorOjEwODlEMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDg0NgorOjEwODlFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MQorOjEwODlGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMUM4RjAwNDdGNworOjEwOEEwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMAorOjEwOEExMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBNAorOjEwOEEyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NAorOjEwOEEzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NAorOjEwOEE0MDAwODVCMDAwMDA0MzhGMDA0NzA5QjAwMDAwNDM4RjAwNDgwNQorOjEwOEE1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwOEE2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NAorOjEwOEE3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NAorOjEwOEE4MDAwODVCMDAwMDBBNjhGMDA0MDA5QjAwMDAwQzQ4RjAwNDdFOQorOjEwOEE5MDAwMDlCMDAwMDBCODhGMDA0ODA5QjAwMDAwMTQ4RjAwNDdFQgorOjEwOEFBMDAwMDlCMDAwMDAxNDhGMDA0NzA5QjAwMDAwQzQ4RjAwNDdEMAorOjEwOEFCMDAwMDlCMDAwMDBDQjhGMDA0NzA5QjAwMDAwQ0I4RjAwNDgwMQorOjEwOEFDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQjg4RjAwNDgwNQorOjEwOEFEMDAwMDlCMDAwMDAxNDhGMDA0NzA5QjAwMDAwMTQ4RjAwNDc1MAorOjEwOEFFMDAwMDlCMDAwMDBCODhGMDA0ODA5QjAwMDAwMDQwMDAwMjA2MQorOjEwOEFGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDNAorOjEwOEIwMDAwODVCMDAwMDBEQzhFMDA0MzA5QjAwMDAwMDQwMDAwMjBBNgorOjEwOEIxMDAwODVCMDAwMDBEQzhFMDA0NTA5QjAwMDAwREM4RTAwNDYwOAorOjEwOEIyMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDhGNAorOjEwOEIzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREM4RTAwNEE2RgorOjEwOEI0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREM4RTAwNEM1RAorOjEwOEI1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBERgorOjEwOEI2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMzM4RjAwNDc2RQorOjEwOEI3MDAwMDlCMDAwMDAyNzhGMDA0ODA5QjAwMDAwMUI4RjAwNDc5NAorOjEwOEI4MDAwMDlCMDAwMDAxQjhGMDA0NzA5QjAwMDAwMzM4RjAwNDc3OQorOjEwOEI5MDAwMDlCMDAwMDBENThBMDA0NzA5QjAwMDAwRDU4QTAwNDgxNgorOjEwOEJBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjc4RjAwNDhCNQorOjEwOEJCMDAwMDlCMDAwMDAxQjhGMDA0NzA5QjAwMDAwMUI4RjAwNDc2MQorOjEwOEJDMDAwMDlCMDAwMDAyNzhGMDA0ODA5QjAwMDAwMDQwMDAwMjAxMQorOjEwOEJEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q4RjAwNDI2OQorOjEwOEJFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q4RjAwNDREMworOjEwOEJGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRgorOjEwOEMwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMgorOjEwOEMxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMgorOjEwOEMyMDAwODVCMDAwMDBDRDhGMDA0QjA5QjAwMDAwMDQwMDAwMjA4QgorOjEwOEMzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwOEM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MgorOjEwOEM1MDAwODVCMDAwMDBDRDhGMDA0MzA5QjAwMDAwMDQwMDAwMjA2MworOjEwOEM2MDAwODVCMDAwMDBDRDhGMDA0NTA5QjAwMDAwQ0Q4RjAwNDZEMworOjEwOEM3MDAwMDlCMDAwMDBDRDhGMDA0NzA5QjAwMDAwQ0Q4RjAwNDgzQgorOjEwOEM4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q4RjAwNEEyQworOjEwOEM5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQ0Q4RjAwNEMxQQorOjEwOENBMDAwMDlCMDAwMDBDRDhGMDA0QzA5QjAwMDAwMDQwMDAwMjA4NgorOjEwOENCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMgorOjEwOENDMDAwODVCMDAwMDBFODhGMDA0NjA5QjAwMDAwMDQwMDAwMjBENQorOjEwOENEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMgorOjEwOENFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDcxNQorOjEwOENGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RjAwNDZBNQorOjEwOEQwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyRAorOjEwOEQxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMQorOjEwOEQyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MQorOjEwOEQzMDAwODVCMDAwMDBFOTkwMDA0NjA5QjAwMDAwMDQwMDAwMjA2MgorOjEwOEQ0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MQorOjEwOEQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDdBNAorOjEwOEQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTk5MDAwNDYzMgorOjEwOEQ3MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCRAorOjEwOEQ4MDAwODVCMDAwMDBFOTkwMDA0NjA5QjAwMDAwMDQwMDAwMjAxMgorOjEwOEQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMQorOjEwOERBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEU5MTAwNDI1NAorOjEwOERCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3RAorOjEwOERDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMQorOjEwOEREMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMQorOjEwOERFMDAwODVCMDAwMDAwRDkxMDA0QTA5QjAwMDAwMDQwMDAwMjA4OQorOjEwOERGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMQorOjEwOEUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMAorOjEwOEUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMAorOjEwOEUyMDAwODVCMDAwMDAwRTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA0QgorOjEwOEUzMDAwODVCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDg2NQorOjEwOEU0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFQworOjEwOEU1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEQ5MTAwNEE5QworOjEwOEU2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQworOjEwOEU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MAorOjEwOEU4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMAorOjEwOEU5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMAorOjEwOEVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMAorOjEwOEVCMDAwODVCMDAwMDBEODhGMDA0MTA5QjAwMDAwMDQwMDAwMjBGOAorOjEwOEVDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMAorOjEwOEVEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwOEVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTU4RjAwNDIzRQorOjEwOEVGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTU4RjAwNDRBOAorOjEwOEYwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQgorOjEwOEYxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RgorOjEwOEYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4RgorOjEwOEYzMDAwODVCMDAwMDBFNThGMDA0QjA5QjAwMDAwMDQwMDAwMjA2MAorOjEwOEY0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2RgorOjEwOEY1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1RgorOjEwOEY2MDAwODVCMDAwMDBFNThGMDA0MzA5QjAwMDAwMDQwMDAwMjAzOAorOjEwOEY3MDAwODVCMDAwMDBFNThGMDA0NTA5QjAwMDAwRTU4RjAwNDY5MAorOjEwOEY4MDAwMDlCMDAwMDBFNThGMDA0NzA5QjAwMDAwRTU4RjAwNDhGOAorOjEwOEY5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5QgorOjEwOEZBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTU4RjAwNEM3MworOjEwOEZCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3QgorOjEwOEZDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFRgorOjEwOEZEMDAwODVCMDAwMDBGNDhFMDA0QzA5QjAwMDAwMDQwMDAwMjBCMQorOjEwOEZFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDRgorOjEwOEZGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDcwMgorOjEwOTAwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RTAwNEM4QworOjEwOTAxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxQQorOjEwOTAyMDAwODVCMDAwMDBBNTkxMDA0NjA5QjAwMDAwMDQwMDAwMjBCMgorOjEwOTAzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDk5MTAwNDI4NgorOjEwOTA0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDk5MTAwNDRGMAorOjEwOTA1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEQQorOjEwOTA2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0RQorOjEwOTA3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRQorOjEwOTA4MDAwODVCMDAwMDA0OTkxMDA0QjA5QjAwMDAwMDQwMDAwMjBBOQorOjEwOTA5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRQorOjEwOTBBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwRQorOjEwOTBCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGRQorOjEwOTBDMDAwODVCMDAwMDA0OTkxMDA0NTA5QjAwMDAwNDk5MTAwNDY3MworOjEwOTBEMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDgzRgorOjEwOTBFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0QQorOjEwOTBGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDk5MTAwNENCQworOjEwOTEwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyOQorOjEwOTExMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RTAwNDIwOQorOjEwOTEyMDAwMDlCMDAwMDA1NDkxMDA0NjA5QjAwMDAwMDQwMDAwMjA3RQorOjEwOTEzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRTg4RTAwNDZFNQorOjEwOTE0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDcyQworOjEwOTE1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTQ5MTAwNDZEMgorOjEwOTE2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDOQorOjEwOTE3MDAwODVCMDAwMDA1NDkxMDA0NjA5QjAwMDAwMDQwMDAwMjBCMgorOjEwOTE4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyRAorOjEwOTE5MDAwODVCMDAwMDA1ODkxMDA0MzA5QjAwMDAwMDQwMDAwMjA5MQorOjEwOTFBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwRAorOjEwOTFCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDc0MAorOjEwOTFDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTg5MTAwNDM2MQorOjEwOTFEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1OQorOjEwOTFFMDAwODVCMDAwMDA1ODkxMDA0RDA5QjAwMDAwMDQwMDAwMjAzNworOjEwOTFGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCRAorOjEwOTIwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkE5MTAwNDM5MgorOjEwOTIxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxOAorOjEwOTIyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4QworOjEwOTIzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3QworOjEwOTI0MDAwODVCMDAwMDA0NzkxMDA0QTA5QjAwMDAwMDQwMDAwMjBFQQorOjEwOTI1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1QworOjEwOTI2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0QworOjEwOTI3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzQworOjEwOTI4MDAwODVCMDAwMDA2QTkxMDA0MzA5QjAwMDAwMDQwMDAwMjA4RQorOjEwOTI5MDAwODVCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDgwMQorOjEwOTJBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OAorOjEwOTJCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDc5MTAwNEFGRQorOjEwOTJDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwOTJEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEQworOjEwOTJFMDAwODVCMDAwMDA3QzkxMDA0MzA5QjAwMDAwMDQwMDAwMjAxQworOjEwOTJGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCQworOjEwOTMwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDdFRQorOjEwOTMxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0M5MTAwNDNFQgorOjEwOTMyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNworOjEwOTMzMDAwODVCMDAwMDA3QzkxMDA0RDA5QjAwMDAwMDQwMDAwMjBDMQorOjEwOTM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwRkY4RDAwNDJDMQorOjEwOTM1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjE4RTAwNDIwQQorOjEwOTM2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDNworOjEwOTM3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzQgorOjEwOTM4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyQgorOjEwOTM5MDAwODVCMDAwMDA5QjkxMDA0MjA5QjAwMDAwMDQwMDAwMjA0RAorOjEwOTNBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwQgorOjEwOTNCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQgorOjEwOTNDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFQgorOjEwOTNEMDAwODVCMDAwMDAyMThFMDA0NjA5QjAwMDAwRkY4RDAwNDZEOAorOjEwOTNFMDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDgyQworOjEwOTNGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzNworOjEwOTQwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOUI5MTAwNDY1QworOjEwOTQxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNgorOjEwOTQyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4QQorOjEwOTQzMDAwODVCMDAwMDA5RDkxMDA0QTA5QjAwMDAwMDQwMDAwMjBBMgorOjEwOTQ0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2QQorOjEwOTQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDc5RAorOjEwOTQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOUQ5MTAwNEE3MgorOjEwOTQ3MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCNgorOjEwOTQ4MDAwODVCMDAwMDA1NTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA5RQorOjEwOTQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxQQorOjEwOTRBMDAwODVCMDAwMDA1NTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA3RQorOjEwOTRCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwOTRDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEI4RjAwNDcyRAorOjEwOTREMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTU5MTAwNDY0RQorOjEwOTRFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NgorOjEwOTRGMDAwODVCMDAwMDA1NTkxMDA0NjA5QjAwMDAwMDQwMDAwMjAyRQorOjEwOTUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOQorOjEwOTUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQTM5MTAwNDI0NworOjEwOTUyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwNQorOjEwOTUzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3OQorOjEwOTU0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OQorOjEwOTU1MDAwODVCMDAwMDA0NzkxMDA0QTA5QjAwMDAwMDQwMDAwMjBENworOjEwOTU2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OQorOjEwOTU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOQorOjEwOTU4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyOQorOjEwOTU5MDAwODVCMDAwMDBBMzkxMDA0NjA5QjAwMDAwMDQwMDAwMjAzRgorOjEwOTVBMDAwODVCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDhFRQorOjEwOTVCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3NQorOjEwOTVDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDc5MTAwNEFFQgorOjEwOTVEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NQorOjEwOTVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjQ4RTAwNERFRQorOjEwOTVGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzNQorOjEwOTYwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOAorOjEwOTYxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OAorOjEwOTYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OAorOjEwOTYzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3OAorOjEwOTY0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwOTY1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1OAorOjEwOTY2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OAorOjEwOTY3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMjQ4RTAwNEQ1RAorOjEwOTY4MDAwMDlCMDAwMDAxQThFMDA0NzA5QjAwMDAwMUE4RTAwNDg4OQorOjEwOTY5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NAorOjEwOTZBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwOAorOjEwOTZCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDcwMDJFNEI5QworOjEwOTZDMDAwMTk5MDAxMDAyNTg3MDAwNEU2QjEwMDAwRDU4QTIyNDJFNgorOjEwOTZEMDAwMTk3QzAwMDA5QTk0MDAzQTgxMzAwMTAwRDU4QTAwNDAzQworOjEwOTZFMDAwODFCMjAwMDBENThBMjI0MjE5N0MwMDAwRkYxRjAwMEZDMgorOjEwOTZGMDAwMUU4QzAxMDAwNTk0MDA0MDgxMzIwMTAwRTU4QTlDMEYxOAorOjEwOTcwMDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTAxQgorOjEwOTcxMDAwNDJDOTAxMDBFNThBMjI0MEUzNkQwMDAwMDAwMDAwNDVENworOjEwOTcyMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRTI4QUE4NDA0MgorOjEwOTczMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwQTk4NDIyMDJBMAorOjEwOTc0MDAwODAzMjAwMDBFNjhBNDI0MDgxMzIwMDAwMDAwMDAwNDQ3RQorOjEwOTc1MDAwOTM5MzAxMDAwMDAwMUEwMjY4OTcwMTAwQTk4NDAwNDA1OQorOjEwOTc2MDAwMDVCMDAwMDAwNTAwMkU0QjE5OTAwMTAwMjU4NzAwMDQ2QworOjEwOTc3MDAwRTZCMTAwMDAwMDAwMDA0MDg3QjAwMTAwMDAwMDAwNDA5QQorOjEwOTc4MDAwOERCMDAxMDAwMDgwMDAwMzQyQzkwMTAwNDAwMDAwQTEyQgorOjEwOTc5MDAwNDRDOTAxMDAwMDAwMDBGMEUwQjEwMTAwREY5NTAwMDZCRgorOjEwOTdBMDAwMDc0MDAxMDAwMDAwMDAwNjA3RDAwMTAwRDQwMDJFNUMzNQorOjEwOTdCMDAwMUY5MDAxMDAwMDAwMDAwN0YwQjEwMTAwMEM4MDAwMDNDMQorOjEwOTdDMDAwNDJDOTAxMDAwMDAwMDBGMEYwQjEwMTAwMDAwMDAwNDBCQgorOjEwOTdEMDAwODFCMjAxMDAwMDAwMDBGRTk2QjAwMTAwMDAwMDAwRkUxMgorOjEwOTdFMDAwOTZDMDAxMDAwMDAwMDBGMEYwQjEwMTAwMDAwMDAwNDA1MAorOjEwOTdGMDAwODFCMjAxMDAwMDAwMDBGRTk2QzAwMTAwMDAwMDAwRkVFMgorOjEwOTgwMDAwOTZDMDAxMDAwMDAwMDBGMEYwQjEwMTAwMDAwMDAwNDAyRgorOjEwOTgxMDAwODFCMjAxMDAwMDAwMDBGQTk2QzAwMTAwMDAwMDAwRkVDNQorOjEwOTgyMDAwOTZDMDAxMDAwMDMwMDA0Qjk0ODgwMTAwMDAwMDAwNDYwMworOjEwOTgzMDAwOTVGMDAxMDAwMDAwMDA0QTk2QzAwMTAwNUUwMTJFMzQ0MAorOjEwOTg0MDAwOTc4NDAxMDAwMjAwMDA0QkU0RTUwMTAwNjQwMTIwNDAyMAorOjEwOTg1MDAwRTFCMTAxMDAwOTAwMDAwNzg2RTQwMTAwMDAwMDJFQTcyNQorOjEwOTg2MDAwODdDMDAxMDAxMDAwMDAxMDQ4QzkwMTAwMTAwMDAwNDAyRQorOjEwOTg3MDAwRjE5OTAxMDA1ODAxMDA0M0YwQzkwMTAwNTgwMTAwMDVBOQorOjEwOTg4MDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTQ5MworOjEwOTg5MDAwNjJERDAxMDAwRjhCQTg0MDgxMzIwMDAwMDAwMDAwMDU0RQorOjEwOThBMDAwNDhCMTAxMDAxQTAwMDA0MDk3OTgwMTAwMDgwMDJFNDBCRQorOjEwOThCMDAwOTVCMDAxMDAxNzhCMjA0Qjk0NkMwMDAwMDAwMDAwNDAxNQorOjEwOThDMDAwRjFCMTAxMDAxNDhCMDA0MTk1QzAwMDAwMTA4MDAwMTAyMAorOjEwOThEMDAwNDJDOTAxMDAxRThCMjI0MEUzNkQwMDAwMDAwMDAwNDRERAorOjEwOThFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUE4QkE4NDA0OAorOjEwOThGMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyQgorOjEwOTkwMDAwNDhCMTAxMDA5QTk0MDA0MDgxMzAwMTAwRUE4QTAwNDA4OQorOjEwOTkxMDAwODFCMjAwMDAwQzgwMDAwMzQyQzkwMTAwMDAwMDAwRjg4MQorOjEwOTkyMDAwODZCMDAxMDAwMDAwMDBGODg4QjAwMTAwMjM4QjQ0NDA5RAorOjEwOTkzMDAwODEzMjAwMDAyNjhCQTI0Q0ZEN0YwMDAwMjc4QjAwNEM1QgorOjEwOTk0MDAwRkQ5MzAwMDAyODhCMjBGMDU2NkYwMDAwMDAwMDAwRjAwRgorOjEwOTk1MDAwNTZCMzAxMDAwMDAwMUM0MDgxQjIwMTAwMDA4MDAwMTBERAorOjEwOTk2MDAwNDRDOTAxMDA2NDAwMDA0MEYxOTkwMTAwNzAwMDAwMDU0NQorOjEwOTk3MDAwRjBDOTAxMDAwMDAwMDA0M0YwQjEwMTAwMDAwMDAwNDcwMQorOjEwOTk4MDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMkU4QkE4NDRBRgorOjEwOTk5MDAwRTAzMTAwMDAxMDAwMDAxMDhDQzgwMTAwMDA4MDAwNDY3QgorOjEwOTlBMDAwNDRDOTAxMDA0MDAwMDA0MEYxOTkwMTAwNjgwMTAwMDUzMAorOjEwOTlCMDAwRjBDOTAxMDA2NDAwMDA0M0YwQzkwMTAwMDAwMDAwNDc0NQorOjEwOTlDMDAwNjFCMTAxMDAwMDAwMDA0NjYyQjEwMTAwMzY4QkE4NDQ3RAorOjEwOTlEMDAwRTAzMTAwMDBBRjgyMDA4ODFDQjAwMDAwMDkwMDAwMDdFMQorOjEwOTlFMDAwODZFNDAxMDAzODAwMkVBNzg3QzAwMTAwOEIwMDJEMDVGQQorOjEwOTlGMDAwNDhCMTAxMDAzRThCMjI0M0U3N0QwMDAwMDAwMDAwNDQ5NworOjEwOUEwMDAwNDVDMTAxMDA0MThCMjI0NEU3N0QwMDAwMDAwMDAwNEM2RAorOjEwOUExMDAwNDVDMTAxMDAwMDAwMDA0QTE5OTAwMTAwNjgwMTIwQTIyMAorOjEwOUEyMDAwRTRCMTAxMDA4ODAwMDA0MDQzOTkwMTAwNDU4QjIzMEJGRAorOjEwOUEzMDAwRTU2RDAwMDAwMDAwMDA0MTE5OTAwMTAwMDA4MDAwMTA1OQorOjEwOUE0MDAwNDRDOTAxMDA1MDAwMDA0MEYxOTkwMTAwNTgwMTAwNDM1MQorOjEwOUE1MDAwRjBDOTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDQwMAorOjEwOUE2MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwNEE4QkE4NDAwMgorOjEwOUE3MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNUMwMDJFMDUxRgorOjEwOUE4MDAwNDhCMTAxMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDYwRjBGRAorOjEwOUE5MDAwOTZCMDAxMDA5QTk0MDA0MTgxMzAwMTAwRUE4QTAwNDBBQQorOjEwOUFBMDAwODFCMjAwMDA1NThCQTI0OTE5N0MwMDAwODYwMDAwNDA1RAorOjEwOUFCMDAwNDc5OTAxMDA1OThCMDA0MEU1QjEwMDAwODYwMDJGNDkwRAorOjEwOUFDMDAwMTk4MDAxMDA1OThCQTJGMjgwMzIwMDAwOEIwMDAwNDAwNworOjEwOUFEMDAwNDc5OTAxMDAwMDAwMDA0MkU3OTEwMTAwNUM4QkEyNDYxQgorOjEwOUFFMDAwMTk3QzAwMDBBMDAwMDA0MDQ3OTkwMTAwNjA4QjAwNDBGNQorOjEwOUFGMDAwRTVCMTAwMDBBMDAwMkY0NjE5ODAwMTAwNjA4QkEyRjJBMgorOjEwOUIwMDAwODAzMjAwMDA4QjAwMDA0MDQ3OTkwMTAwMDAwMDAwNDFCNgorOjEwOUIxMDAwRTc5MTAxMDBBODAwMDA0MDQzOTkwMTAwMzQwMDJERjBCNgorOjEwOUIyMDAwMjRCMDAxMDAwMDAwMDBGQjBDQjAwMTAwMDAwMDAwRkJBRAorOjEwOUIzMDAwMTBCMDAxMDAwMDAwMDBGQjEyQjAwMTAwMEYwMDAwRjNBNAorOjEwOUI0MDAwMTY4ODAxMDAwNDAwMDBGMzE0RjQwMTAwOEI4QjI2NDBGQQorOjEwOUI1MDAwODEzMjAwMDA3MzhCMjIwQTE2NkMwMDAwNTgwMDNENDNDRQorOjEwOUI2MDAwMTNFMDAxMDAwMDAwMDBGODgyQjAwMTAwMDQwMDIyRjBDMAorOjEwOUI3MDAwODQzMDAwMDA4Nzk1MDA0MDgxMzIwMTAwQUY4MjAwODg2OAorOjEwOUI4MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwNDFDOQorOjEwOUI5MDAwMTNDMDAxMDA3MjhCQTA0MzEzNkMwMDAwMDAwMDAwNDA1MgorOjEwOUJBMDAwMTNCMDAxMDA2ODhCMDA0MTE1RDAwMDAwOEI4QjIyMEE5NgorOjEwOUJCMDAwODAzMjAwMDA1ODAwM0Q0MzEzRTAwMTAwMDAwMDAwRjgyRgorOjEwOUJDMDAwODJCMDAxMDAwNDAwMjJGMDg0MzAwMDAwODc5NTAwNDAzQworOjEwOUJEMDAwODEzMjAxMDA0MDAwMjA0MEUxQjEwMTAwQUY4MjAwODhFNQorOjEwOUJFMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwOEI4QjIyNDEzMQorOjEwOUJGMDAwMTU1MDAwMDAwMDAwMDA0MTExQzAwMTAwN0Y4QkEwNDMwMAorOjEwOUMwMDAwMTE2QzAwMDAwMDAwMDA0MDExQjAwMTAwNTgwMDNENDNGRAorOjEwOUMxMDAwMTFFMDAxMDAwMDAwMDBGODM2QjAwMTAwMDQwMDIyRjA1RAorOjEwOUMyMDAwMDAzMDAwMDAwMDAwMDA1MDgzQjAwMTAwRDk5NDAwNDdDQworOjEwOUMzMDAwNjEzMTAxMDBBRjgyMDA4ODFDQjAwMDAwNDI5MjAwMDUzMworOjEwOUM0MDAwNDgzMTAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTBGMgorOjEwOUM1MDAwNjJERDAxMDA4NzhCQTg0MDgxMzIwMDAwQUY4MjAwODg1RQorOjEwOUM2MDAwMUNCMDAwMDA3QjhCMDAwNTQ4QjEwMDAwMzcwMDIwNDA4RAorOjEwOUM3MDAwRTdCMTAxMDAwQjk1MDA1MTgxMzAwMTAwRUE4QTAwNDBGNAorOjEwOUM4MDAwODFCMjAwMDAzNDAwMkU0MUY1QjEwMTAwMDAxMTAwNDAwNgorOjEwOUM5MDAwRTU5OTAxMDA5MzhCMDA0ODE5OTAwMDAwMzQwMDJFNDE5MworOjEwOUNBMDAwRjVCMTAxMDAwMDExMDA0MEU1OTkwMTAwMDA4MDAwMDNCQQorOjEwOUNCMDAwNDJDOTAxMDAwMDAwMDBGODk0QjAwMTAwOTg4QjIyNDVEMQorOjEwOUNDMDAwMjM3QzAwMDBCMDAwMkZGMDhDQjAwMTAwMDAwMDYwRjA5OQorOjEwOUNEMDAwOENDMDAxMDA5MDAwMDA0MDQzOTkwMTAwMzUwMDJERjAzOAorOjEwOUNFMDAwOENCMDAxMDA1ODAwM0U0M0U3RTEwMTAwOUQ4QjIyNDgwMworOjEwOUNGMDAwMTk3QzAwMDAwMDAwMDA0MThEQzAwMTAwMDAwMDY4MEFDRQorOjEwOUQwMDAwOENDMDAxMDAzODAwMkE0QUUwQjEwMTAwMjgwMDAwMDBBMAorOjEwOUQxMDAwRTBDOTAxMDAzQzAwMjAxQkUwQjEwMTAwMTA4MDAwMDNGRAorOjEwOUQyMDAwNDJDOTAxMDAwMDAwMDBGODM4QjAwMTAwMDAwMDAwRjg0RQorOjEwOUQzMDAwMjZCMDAxMDAwNDAwMjJGODAyMzAwMDAwQUI4QjIzMDFBMgorOjEwOUQ0MDAwMTQ2QzAwMDAwMDAwMDBGODgwQjAwMTAwMDAwMDAwRjg3MgorOjEwOUQ1MDAwODJCMDAxMDA0QzAwMjBGMEU0QjEwMTAwNDQwMDIwNDAzQQorOjEwOUQ2MDAwRTBCMTAxMDA0ODAwMjA0MUUwQjEwMTAwQTgwMDJEMTA0MQorOjEwOUQ3MDAwMzJCMDAxMDBDMzk1MDBGMDI0MzAwMTAwQjQ4QkEyNDQzRQorOjEwOUQ4MDAwODE2QzAwMDBCMjhCMjI0MTE5N0MwMDAwNkU5MzAwNDA3MAorOjEwOUQ5MDAwM0IzMDAxMDBEODhCQTIwODNDMzAwMDAwQjQ4QjAwNDA1RgorOjEwOURBMDAwODFCMjAwMDBBQjkyMDA0MDgxMzIwMTAwRDg4QkEyMDg0MgorOjEwOURCMDAwM0MzMDAwMDA1MDAwMjAxQ0UwQjEwMTAwNTQwMDIwMTM5MgorOjEwOURDMDAwRTBCMTAxMDA0RTAwMjAwMUU0QjEwMTAwNDAwMDIwMEE5MgorOjEwOUREMDAwRTBCMTAxMDAwQjk1MDA1RjgxMzAwMTAwRUE4QTAwNDA4QworOjEwOURFMDAwODFCMjAwMDAzNzAwMDA0MDQ3OTkwMTAwNEQ5MzAwRjMxNQorOjEwOURGMDAwOTQzMDAxMDA5MzhCMjI0QTgwMzIwMDAwQzA4QjAwNDBENworOjEwOUUwMDAwODFCMjAwMDAzNzAwMDA0MDQ3OTkwMTAwNEQ5MzAwRjNGNAorOjEwOUUxMDAwOTQzMDAxMDA1ODAwM0U0Mzk3RTAwMTAwMDAwMDAwMUIxMQorOjEwOUUyMDAwRjBCMTAxMDAxRjAwNjAwMDAwOEMwMTAwRUE4QTg1MTE3QQorOjEwOUUzMDAwODAzMjAwMDAwNDgwMDAwMzQyQzkwMTAwQjAwMDJGRjAwRQorOjEwOUU0MDAwOENCMDAxMDAwMDAwNjBGMDhDQzAwMTAwMEI5NTAwNUYzOQorOjEwOUU1MDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwQ0E4QjAwNDlDQgorOjEwOUU2MDAwMTk4MDAwMDBDRjhCMjI0MTE5N0MwMDAwNkU5MzAwNDBDNgorOjEwOUU3MDAwM0IzMDAxMDBEMzhCQTIwODNDMzAwMDAwMEI5NTAwNUYwMworOjEwOUU4MDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwQUI5MjAwNDBCQworOjEwOUU5MDAwODEzMjAxMDBEMzhCQTIwODNDMzAwMDAwMEI5NTAwNUY5QgorOjEwOUVBMDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwNTAwMDJEMTA4QworOjEwOUVCMDAwMzJCMDAxMDA1NDAwMkRGMDM4QjAwMTAwNEUwMDJERjBGQQorOjEwOUVDMDAwMjZCMDAxMDA0MDAwMkRGMjAyQjAwMTAwMDAwMDAwRjBCOQorOjEwOUVEMDAwMTRCMDAxMDAzMDAwMDAxMDhDQzgwMTAwMDA4MDAwNDY2MgorOjEwOUVFMDAwNDRDOTAxMDA2ODAxMkQ0NDYxQjEwMTAwMTAwMDY4RjIwRAorOjEwOUVGMDAwODBDODAxMDAwMDAwMDAwOEYwQjEwMTAwNTgwMTAwMDUxMQorOjEwOUYwMDAwRTBDOTAxMDAwMDAwMDAwQjM3QjAwMTAwMDAwMDAwNDA3NAorOjEwOUYxMDAwMzZEMDAxMDA1QzAxMkU0MDEwQzAwMTAwMDAwMDAwMDY5OAorOjEwOUYyMDAwODBDMDAxMDAwMDAwMDA1MjgxRDAwMTAwQTA5NDAwNDBEOAorOjEwOUYzMDAwRTQzMTAxMDAyMDAwMDA0NjYyREQwMTAwRTQ4QkE4NDAwRQorOjEwOUY0MDAwMjMzMDAwMDBFNTkyMDA0MDgxMzIwMTAwRUQ5MjAwNDA5NAorOjEwOUY1MDAwODEzMjAxMDBGMjhCODI0MTIzNDAwMDAwMjA4MDAwMTBGQQorOjEwOUY2MDAwNDJDOTAxMDBFRjhCMjI0MEUzNkQwMDAwMDAwMDAwNDY3MworOjEwOUY3MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRUM4QkE4NDBERgorOjEwOUY4MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU5NAorOjEwOUY5MDAwNDhCMTAxMDAwMDAwMDAxMDMyQjAwMTAwMDAwMDAwNDE5MworOjEwOUZBMDAwMjNCMDAxMDAwMDgwMDAxOTQ0QzkwMTAwRkE4QjIyNDE0RQorOjEwOUZCMDAwMTk3QzAwMDBGNjhCQTMwMTBDNkMwMDAwRjc4QjAwMDZFNworOjEwOUZDMDAwMDRCMDAwMDAwMDAwMDAwMTA0QjAwMTAwRjk4QjIwMDI4MQorOjEwOUZEMDAwMzY2QzAwMDAwMDAwMDAxQjA0QjAwMTAwRkQ4QjAwMDI4NQorOjEwOUZFMDAwRTBCMTAwMDBGQzhCQTMwMTBDNkMwMDAwRkQ4QjAwMDZBRgorOjEwOUZGMDAwMDRCMDAwMDAwMDAwMDAwMTA0QjAwMTAwMDAwMDY4MDI4RAorOjEwQTAwMDAwMTY5NDAxMDBGRkZGMDAwQjE2RDgwMTAwMDAwMDY4MDgzRAorOjEwQTAxMDAwM0U5NjAxMDAwMDAwMDAxQ0YwQjEwMTAwMDAwMDAwNDY2NworOjEwQTAyMDAwNjFCMTAxMDAyMDAwMDAxOTYyREQwMTAwMDI4Q0E4MTM1QgorOjEwQTAzMDAwRTAzMTAwMDAzOThDMjIwMjE0NTAwMDAwNDQwMDJEMDI0RgorOjEwQTA0MDAwMENEMDAxMDAyOThDQTIwMjAyNTAwMDAwMTA4QzIyNUM2RQorOjEwQTA1MDAwMUY3QzAwMDAyMDgwMDAwMzQyQzkwMTAwMEY4QzIyNDBCOQorOjEwQTA2MDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBGNgorOjEwQTA3MDAwNjJERDAxMDAwQjhDQTg0MDgxMzIwMDAwQUY4MjAwODhCNQorOjEwQTA4MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwNDQwMDJENUMzOAorOjEwQTA5MDAwMUY4MDAxMDA0ODAwMkRGMDM4QjAwMTAwNEMwMDJERjA2OQorOjEwQTBBMDAwMjZCMDAxMDAzODAwMkZGMjAyQjAwMTAwMkE4QzIyMDFGNAorOjEwQTBCMDAwMTQ2QzAwMDAxRDhDMjI0NjFGN0MwMDAwMDAwMDAwNDYyRQorOjEwQTBDMDAwMUY4MDAxMDAyMDAwMkQwMzQ4QjEwMTAwMUM4QzIyNDA5QworOjEwQTBEMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA4OQorOjEwQTBFMDAwNjJERDAxMDAxOThDQTg0MDgxMzIwMDAwQUY4MjAwODgzNworOjEwQTBGMDAwMUNCMDAwMDAzODAwMkYwNTQ4QjEwMTAwMDAwMDAwRjgzNgorOjEwQTEwMDAwOTRCMDAxMDAzODAwMkRGMDk2QjAwMTAwMDAwMDAwNEMyMgorOjEwQTExMDAwRTFDMTAxMDAyMDAwMDAwMzQ4QzkwMTAwMDAwMDIyNEFGQgorOjEwQTEyMDAwRjFCMTAxMDA0NDAwMDAwNUYwQzkwMTAwMDAwMDAwNEEzRgorOjEwQTEzMDAwRjBCMTAxMDAwMDAwMDA0QkUwQjEwMTAwMDAwMDAwNDc1OQorOjEwQTE0MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwMjY4Q0E4NUNDMgorOjEwQTE1MDAwMUYxMDAwMDAyQThDMDAwNTQ4QjEwMDAwMDAwMDAwMDIxQQorOjEwQTE2MDAwMzhDMDAxMDAzNDhDMjIwNjgwMzIwMDAwMDAwMDAwNTAwQworOjEwQTE3MDAwMzNDMDAxMDAzMjhDQTIwMjM2NkMwMDAwMDQwMDhGMEQ0NworOjEwQTE4MDAwNDIzMTAwMDAxMDAwMDBGODEwQzgwMTAwMDAwMDAwNUMxRgorOjEwQTE5MDAwMTE4MDAxMDBGMDA3MDA0MDM3OTgwMTAwRTg4QjAwQTExMgorOjEwQTFBMDAwMUFCMDAwMDAwMDAwMDAwMjEwQzAwMTAwRTg4QjAwMDI5RAorOjEwQTFCMDAwMzZEMDAwMDA1MDAwMjAxQ0UwQjEwMTAwNTQwMDIwMTNGNAorOjEwQTFDMDAwRTBCMTAxMDA0RTAwMjAwMUU0QjEwMTAwNDAwMDIwMEE4RQorOjEwQTFEMDAwRTBCMTAxMDAzRThDMDA1RjAxQjAwMDAwMzcwMDJENDY2OQorOjEwQTFFMDAwMDFCMDAxMDAwNDAwMDBGMzgwRjQwMTAwM0Q4Q0EwNDNBNQorOjEwQTFGMDAwODE2QzAwMDAwMDAwMDA1NTAxQjAwMTAwNDAwMDIwNDBDQgorOjEwQTIwMDAwRTFCMTAxMDAwMDgwMDAxOTQyQzkwMTAwNDQ4QzIyNDBFNAorOjEwQTIxMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTkzQworOjEwQTIyMDAwNjJERDAxMDA0MThDQTg0MDgxMzIwMDAwQUY4MjAwODhDRAorOjEwQTIzMDAwMUNCMDAwMDBFQTkyMDA0MDgxMzIwMTAwMzA4MDAwMTAyMgorOjEwQTI0MDAwNDJDOTAxMDA0QjhDMjI0MEUzNkQwMDAwMDAwMDAwNDQzNQorOjEwQTI1MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNDg4Q0E4NDA5RgorOjEwQTI2MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNjAwMTJGMDUyMQorOjEwQTI3MDAwNDhCMTAxMDAwMDAwMDAwQkU0QjEwMTAwMDAwMDAwNTBGMworOjEwQTI4MDAwMTdGMDAxMDA1MDhDOTBGMjE2NDAwMDAwMDAwMDAwNDFEMQorOjEwQTI5MDAwMTdDMDAxMDAwMDAwNjYyMDE3QTQwMTAwMzIwMDAwQTZDQworOjEwQTJBMDAwMkFDMDAxMDAwMDAwMDBGMjJBOTQwMTAwNTM4QzQ1NDhBNgorOjEwQTJCMDAwNjEzMTAwMDAwMEQwMDAxRTYyREQwMTAwNTg4QzI4NDA5MgorOjEwQTJDMDAwMDUzMDAwMDA1NDhDMjI0ODc3N0QwMDAwNUI4QzAwNDBGNAorOjEwQTJEMDAwODFCMjAwMDAwMDAwMDAxNTYyQjEwMTAwNjQ4QzI4NDBDQQorOjEwQTJFMDAwODEzMjAwMDA1ODhDMDA0MDgxQjIwMDAwMDAwMDFEMDA0NworOjEwQTJGMDAwOTJCMDAxMDA2MThDMjI0MTE5N0MwMDAwMDA4MDAwMDNCMworOjEwQTMwMDAwNDJDOTAxMDBCMDkyMDBGODAwMzAwMTAwNUU4Q0EyNDEwOQorOjEwQTMxMDAwM0I1MDAwMDA2NThDMDA0OTAwQjAwMDAwRkYwNzAwMUVBNAorOjEwQTMyMDAwMDA4QzAxMDBCMDkyMDA0MDgxMzIwMTAwNjU4QzAwNDkzMAorOjEwQTMzMDAwMDBCMDAwMDAwMDAwMUQ0NzE5ODAwMTAwNjg4QzIyNUZGQQorOjEwQTM0MDAwMDE2QzAwMDBFRDk1MDA0MDgxMzIwMTAwQzU4NzAwMDBERQorOjEwQTM1MDAwODBCMDAwMDA2RjhDMjI1QzFGN0MwMDAwMjA4MDAwMDMxNgorOjEwQTM2MDAwNDJDOTAxMDA2RjhDMjI0MEUzNkQwMDAwMDAwMDAwNDdFRAorOjEwQTM3MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNkM4Q0E4NDA1QQorOjEwQTM4MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwNkY4QzQwMDU1NQorOjEwQTM5MDAwNDgzMTAwMDBGRkZGMDAwNzk0ODkwMTAwNzU4Qzg1Q0FEMQorOjEwQTNBMDAwOTQzMDAwMDBFRDk1MTg1QzFGMDAwMTAwMEUwMDAwMEZCNgorOjEwQTNCMDAwMUU4QzAxMDBFNjg2MDA0MDgxQjIwMDAwMEI5NTE4MDA1QgorOjEwQTNDMDAwODAzMDAxMDBFQThBMDA0NzE5ODAwMDAwMDAwMDAwNDA0OAorOjEwQTNEMDAwMTk4MDAxMDBFQThBMjI0NzE5N0MwMDAwQUI5MjAwNDBGNAorOjEwQTNFMDAwODEzMjAxMDA3QzhDQTIwODgwMzIwMDAwRUE4QTAwNDBBMQorOjEwQTNGMDAwODFCMjAwMDBBMDk0MDA0MDBEMzAwMTAwOUMwMTAwNDA5QgorOjEwQTQwMDAwNDU5OTAxMDBGRkZGMDAwQjk4ODgwMTAwOEIwMDJENTAzQgorOjEwQTQxMDAwMTdGMDAxMDA4MjhDOTA0QzE2NDAwMDAwMDAwMDAwNDFCMworOjEwQTQyMDAwMTdDMDAxMDA4NDhDMjI0M0U3N0QwMDAwMDAwMDAwNDQzNworOjEwQTQzMDAwNDVDMTAxMDAwMDAwNjYyMDE3QTQwMTAwNjgwMTAwNDAyQQorOjEwQTQ0MDAwNDM5OTAxMDA1QzAxMkVGMjgwQjAwMTAwMDIwMDYyNDBERAorOjEwQTQ1MDAwN0VDRDAxMDAwMDAwMDA1NzgxQzAwMTAwMDAwMDJFMTBEOQorOjEwQTQ2MDAwNDhCMTAxMDAwMzAwMDA0MEYwOEQwMTAwMDAwMDAwMDgyOQorOjEwQTQ3MDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDRFRQorOjEwQTQ4MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwOEU4Q0E4NDA5MworOjEwQTQ5MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU3RgorOjEwQTRBMDAwNDhCMTAxMDA5MjhDNDU0ODYxMzEwMDAwMDA1MDAwMDgxRAorOjEwQTRCMDAwNjJERDAxMDA5ODhDMjg0MDA1MzAwMDAwOTM4QzIyNDgxMgorOjEwQTRDMDAwNzc3RDAwMDBCMDkyMUQwODAwMzAwMTAwRUE4QTAwNDA0QworOjEwQTREMDAwODFCMjAwMDBFQThBMUQ0NzE5ODAwMDAwMzUwMDAwNDA2MworOjEwQTRFMDAwNDc5OTAxMDAwMTAwNjNGMzg0QzgwMTAwOUQ4Q0EwNDNEQgorOjEwQTRGMDAwODU2QzAwMDAwMDAwNjM0MDg1QjAwMTAwQTgwMDAwNDBBQQorOjEwQTUwMDAwNDM5OTAxMDAzNzAwMkZGMDI0QjAwMTAwMDEwMDYzRjNFQworOjEwQTUxMDAwODJDQzAxMDBBODhDQTI0MTlFMDYwMDAwRUE4QTIyNDQ1NworOjEwQTUyMDAwODM3MDAwMDAzNjAwMDA0MDQzOTkwMTAwNTgwMDNENDMwRAorOjEwQTUzMDAwRTdFMTAxMDBFQThBMUZGMDI0NkMwMDAwRUQ5NTAwNDg3NQorOjEwQTU0MDAwODEzMDAxMDBDNTg3MjM0MTgzNkMwMDAwQzU4NzAwNDcyNworOjEwQTU1MDAwODFCMDAwMDA1ODAwM0Q0Mzg1RTAwMTAwMDAwMDAwRjg5NAorOjEwQTU2MDAwMzZCMDAxMDAwMDAwMDBGMDAwQjAwMTAwMjgwMDAwNDBGQgorOjEwQTU3MDAwODM5ODAxMDBEOTk0MDA0NzYxMzEwMTAwQUY4MjAwODhCRgorOjEwQTU4MDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDgwMDJERjBCMAorOjEwQTU5MDAwOTRCMDAxMDAwMDAwMDBGODhFQjAwMTAwOTAwMDJERjA5MgorOjEwQTVBMDAwMTRCMDAxMDAwMDAwMDAwNTQ4QjEwMTAwOTk4QkEyNDBFMQorOjEwQTVCMDAwOEY3QzAwMDBCNjhDMjI0NzhGN0MwMDAwOTk4QjAwNDg2RQorOjEwQTVDMDAwMTk5MDAwMDAyNThEMDA0MDgxQjIwMDAwMzYwMDJENURGRAorOjEwQTVEMDAwMDVCNDAxMDAzNzAwMkRGMzgwQjAwMTAwMDAwMDAwRjM0NgorOjEwQTVFMDAwOEVCMDAxMDA1QzAwM0Q0MzgxRTAwMTAwQTgwMDJERjAyOQorOjEwQTVGMDAwOTRCMDAxMDAwMDAwMDBGMDI0QjAwMTAwMjAwMDAwMTAyMQorOjEwQTYwMDAwODZEQzAxMDA0MDgwMDAwMzQ0QzkwMTAwQjE5MTAwNEE4QQorOjEwQTYxMDAwRjAzMTAxMDAzNjAwMkY1QzFGOTAwMTAwQzQ4Q0EyNTA2NQorOjEwQTYyMDAwOEY1MDAwMDAzNDAwMjA0MEUxQjEwMTAwRUE4QTAwNDA3MAorOjEwQTYzMDAwODFCMjAwMDAwMDAwNjM0MTgxQzAwMTAwQzc4Q0EwNDNDQgorOjEwQTY0MDAwODE2QzAwMDAwMDAwNjM0MDgxQjAwMTAwMzcwMDIwNDdBQQorOjEwQTY1MDAwRTZCMTAxMDBFQThBMjI0NzgwMzIwMDAwMDQwMDAwNDc4OAorOjEwQTY2MDAwMENGNDAxMDAwMDAwMDA0RjhGODQwMTAwREM4QzIyNDdCNQorOjEwQTY3MDAwMEM2QzAwMDA1ODAwM0Q0MzgxRTAwMTAwREM4QzFGRjBCMQorOjEwQTY4MDAwMjQ2QzAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTBBRQorOjEwQTY5MDAwNDJDOTAxMDBENThDMjI0MEUzNkQwMDAwMDAwMDAwNDU1NgorOjEwQTZBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRDI4Q0E4NDBDMQorOjEwQTZCMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwRDU4QzQyNDA3RgorOjEwQTZDMDAwMDUzMDAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBNUQ3MworOjEwQTZEMDAwNjk5MzAxMDBEQThDMjM0MTBENkMwMDAwQjc4QzAwMDVGMgorOjEwQTZFMDAwNDhCMTAwMDBFRDk1MDAwNTQ4MzEwMTAwQzU4NzAwNDhEQworOjEwQTZGMDAwODFCMDAwMDBFQThBMjI0MDhGNkMwMDAwMEI5NTAwNUY1OQorOjEwQTcwMDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwQTIwMDAwNDBDRQorOjEwQTcxMDAwNDM5OTAxMDAwMDAwMDBGMzg0QjAwMTAwQTYwMDJENDkxOAorOjEwQTcyMDAwMTk5MDAxMDAwMjAwMDBGMjgwRjQwMTAwQjgwMDJENDBGMQorOjEwQTczMDAwODFCMjAxMDAwMDAwMDBGMjgwQzAwMTAwMDAwMDAwNDA3MgorOjEwQTc0MDAwODJGODAxMDAxOTAwMDA0MDgxOTgwMTAwRUI4Q0EwNDBDNAorOjEwQTc1MDAwODI2QzAwMDAyQzAxMDA0MDgxOTgwMTAwRUI4Q0EzNDAyQQorOjEwQTc2MDAwODI2QzAwMDAwMDAwMDA0MTgwQjAwMTAwRUQ4QzIwNENBNAorOjEwQTc3MDAwODU2QzAwMDAwMDAwMDA0MTg1QzAwMTAwODYwMDIwNDA3QgorOjEwQTc4MDAwRTRCMTAxMDBBMjAwMjA0MkU2QjEwMTAwRUE4QTAwNDBFMworOjEwQTc5MDAwODFCMjAwMDA5QTk0MDA1MDgxMzAwMTAwRUE4QTAwNDBBMgorOjEwQTdBMDAwODFCMjAwMDAwNDgwMDAwMzQyQzkwMTAwMDQwMDIyRjBDRAorOjEwQTdCMDAwODAzMDAwMDAwMDAwMDA0MDhEQjAwMTAwREY5NTAwNDBCNworOjEwQTdDMDAwODczMDAxMDBCMDAwMkY1QzFGOTAwMTAwMDAwMDYwRjA5NgorOjEwQTdEMDAwODBDMDAxMDAwQjk1MDA1RjgxMzAwMTAwRUE4QTAwNDBEMworOjEwQTdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwRUE4QTIyNDZFMworOjEwQTdGMDAwMTk3QzAwMDBBMDAwMDA0MDQ3OTkwMTAwMDEwMDYyRjJBRQorOjEwQTgwMDAwOTZDQzAxMDBFQThBQTY0MDgxMzIwMDAwMEI5NTAwNEFFRQorOjEwQTgxMDAwODEzMDAxMDBFMDk0MDA0Njk1MzAwMTAwRUE4QTAwNDA1MgorOjEwQTgyMDAwODFCMjAwMDBFQThBMjI0OTE5N0MwMDAwODYwMDAwNDBCQgorOjEwQTgzMDAwNDc5OTAxMDAwMTAwNjJGMjgwQ0MwMTAwRUE4QUE2NDAzQgorOjEwQTg0MDAwODEzMjAwMDAwQjk1MDA0QTgxMzAwMTAwRTA5NDAwNDdGRQorOjEwQTg1MDAwOTUzMDAxMDBFQThBMDA0MDgxQjIwMDAwNDI5MjAwNDAzNworOjEwQTg2MDAwODEzMjAxMDBFQThBMDA1QzFGOTAwMDAwRUE4QTAwNDAwMQorOjEwQTg3MDAwODFCMjAwMDBFQThBMDA0MDgxQjIwMDAwQkEwMDAwNDBDNAorOjEwQTg4MDAwNDc5OTAxMDAwMTAwNjJGMjgwQzgwMTAwMTE4RDkwNDBEQgorOjEwQTg5MDAwODAzMjAwMDBGRkZGNjI0MDgxOTgwMTAwQTQwMDAwNDA2OAorOjEwQThBMDAwNDc5OTAxMDBFQThBMjI0MEU1NkQwMDAwRUE4QTAwNDFFQQorOjEwQThCMDAwRTVDMTAwMDA5QTk0MDA0RDgxMzAwMTAwRUE4QTAwNDAxMQorOjEwQThDMDAwODFCMjAwMDA1QzAwMDA0MDQ3OTkwMTAwMDQwMDIyRjBDMgorOjEwQThEMDAwOTYzMDAwMDAwMDAwMDA0MEUxQjEwMTAwMDA4MDAwMDM1QworOjEwQThFMDAwNDRDOTAxMDAwMDAwMDA0QkUwQjEwMTAwMDAwMDAwNDAzRAorOjEwQThGMDAwOERCMDAxMDBERjk1MDA0MDg3MzAwMTAwOEIwMDAwNDBFMworOjEwQTkwMDAwNDc5OTAxMDAyMThEODBGMzk2MzAwMDAwMDAwMDAwNDAzRgorOjEwQTkxMDAwRTc4MTAxMDAwMDAwMDA0NzE5OTAwMTAwRUE4QTAwNUMwRAorOjEwQTkyMDAwMUY5MDAwMDAzNDAwMDA0MDQ1OTkwMTAwMDEwMDAwNDBFNAorOjEwQTkzMDAwRjU5OTAxMDAwMDExMDA0MEU1OTkwMTAwQUI5MjAwNDAzQgorOjEwQTk0MDAwODEzMjAxMDAzNjhEQTIwODgwMzIwMDAwMzcwMDAwNDBCRAorOjEwQTk1MDAwNDc5OTAxMDAwMDAwMDBGMzgyQjAwMTAwMDAwMDYzNTEzQworOjEwQTk2MDAwODNEMDAxMDAzNDAwMDA0MDQ3OTkwMTAwMDEwMDYzRjNFNworOjEwQTk3MDAwODRDQzAxMDAyRThEOUY0MjgwMzIwMDAwMDAwMDYzNDI5MworOjEwQTk4MDAwODVCMDAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDE1NworOjEwQTk5MDAwMDBDMDAxMDAzMDhEMzc1QzYxMzEwMDAwMDAwMDAwMUJGOQorOjEwQTlBMDAwNjJCMTAxMDAzMThEQTg0QjE5MTAwMDAwMDAwMDAwMDBCOQorOjEwQTlCMDAwNjJCMTAxMDAzMzhEQTg0MDgxMzIwMDAwMUE4NzE3NDAzMAorOjEwQTlDMDAwODFCMjAwMDAwMDgwMDAwMzQyQzkwMTAwOTAwMDJERjAxOAorOjEwQTlEMDAwOTRCMDAxMDBBQzAwMkRGMDMwQjAwMTAwMzUwMDJERjAzNgorOjEwQTlFMDAwMjhCMDAxMDA1ODAwM0U0M0U3RTEwMTAwMDEwMDAwMThEMworOjEwQTlGMDAwRjBDOTAxMDAwMDAwMDA0QUUwQjEwMTAwMzgwMDIwMDA2OQorOjEwQUEwMDAwRTBCMTAxMDAzQzAwMjAxQkUwQjEwMTAwNDAwMDIwNDAwQgorOjEwQUExMDAwRTFCMTAxMDAwMDAwMDA0MDJCQjAwMTAwRUY5NDAwNDBDNAorOjEwQUEyMDAwMEQzMDAxMDAwMDAwMDAxODE2QzAwMTAwNDU4REEwMTQ3MworOjEwQUEzMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwMEUwMDAwQTJGMworOjEwQUE0MDAwNDRDOTAxMDAwMDAwMDAxOEY4QjEwMTAwQjAwMDJEMTQ0NQorOjEwQUE1MDAwRjhCMTAxMDAxMDUwMDA0MDg3OTgwMTAwNEU4RDIyNEE0NQorOjEwQUE2MDAwMTk3QzAwMDAwMDMwMDA0Mzg2QzgwMTAwMDAzMDAwMEI1NAorOjEwQUE3MDAwMTZDODAxMDA0RThEQTQ0MDgxMzIwMDAwMDAwMDAwNDE0NAorOjEwQUE4MDAwMTdDMDAxMDAwMTAwNkU0Mzg2OTgwMTAwMjY5NTAwMzAzMgorOjEwQUE5MDAwODEzMDAxMDA1MjhEQTA0MTE3NDAwMDAwMDAwMDAwNDFBQworOjEwQUFBMDAwMTdDMDAxMDA1OThEMjI0QTE5N0MwMDAwMDgwMDAwQTIzRAorOjEwQUFCMDAwNDRDOTAxMDBDQzAwMkRBQkY5QjEwMTAwMDAwMDAwQUI4RQorOjEwQUFDMDAwMTdDMDAxMDA1ODhEQTBGMDE2NDQwMDAwMDAwMDAwNDE5RQorOjEwQUFEMDAwMTdDMDAxMDAwMDAwNjRGMDgyQjAwMTAwOTAwMDAwNDA0NworOjEwQUFFMDAwNDU5OTAxMDAwMDAwNjA0MTMxQzAwMTAwQkMwMDAwNDBGOAorOjEwQUFGMDAwNDM5OTAxMDA1RjhEMDYwQzgwMzIwMDAwQTAwMDIwRjIxNworOjEwQUIwMDAwRTRCMTAxMDAwNDAwMDk0NjE5MTAwMDAwOUMwMTAwNDA1NgorOjEwQUIxMDAwNDU5OTAxMDBGRkZGMDAwQjk4ODgwMTAwOEIwMDJENTAyNAorOjEwQUIyMDAwMTdGMDAxMDA2NDhEOTA0QzE2NDAwMDAwMDAwMDAwNDFCOQorOjEwQUIzMDAwMTdDMDAxMDA2NjhEMjI0M0U3N0QwMDAwMDAwMDAwNDQzRAorOjEwQUI0MDAwNDVDMTAxMDAwMDAwNjYyMDE3QTQwMTAwNjgwMTAwNDAxMworOjEwQUI1MDAwNDM5OTAxMDA1QzAxMkVGMjgwQjAwMTAwMDIwMDYyNDBDNgorOjEwQUI2MDAwN0VDRDAxMDAwMDAwMDA1NzgxQzAwMTAwMDAwMDJFMTBDMgorOjEwQUI3MDAwNDhCMTAxMDAwMzAwMDA0MEYwOEQwMTAwMDAwMDAwMDgxMgorOjEwQUI4MDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDRENworOjEwQUI5MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwNzA4REE4NDA5OQorOjEwQUJBMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU2OAorOjEwQUJCMDAwNDhCMTAxMDA3NDhENDU0ODYxMzEwMDAwMDA1MDAwMDgyMworOjEwQUJDMDAwNjJERDAxMDA3NThEQTg0MDA1MzAwMDAwMzUwMDFENDA5NAorOjEwQUJEMDAwNDc5OTAxMDAwMTAwNjNGMzg0QzgwMTAwN0I4REEwNDMwNQorOjEwQUJFMDAwODU2QzAwMDAwMDAwNjM0MDg1QjAwMTAwMzcwMDAwNDAyNAorOjEwQUJGMDAwNDc5OTAxMDAwMTAwNjNGMzgyQ0MwMTAwOEIwMDAwNDAwMworOjEwQUMwMDAwNDc5OTAxMDAwMDAwMDA0NUU3OTEwMTAwMEI5NTAwNUZBNgorOjEwQUMxMDAwODEzMDAxMDBFQThBMDA0MDgxQjIwMDAwMzcwMDAwNDAyNAorOjEwQUMyMDAwNDc5OTAxMDA0RDkzMDBGMzk0MzAwMTAwMjU4RDIyNEE4RAorOjEwQUMzMDAwODAzMjAwMDBDMDhCMDA0MDgxQjIwMDAwMzcwMDAwNDAyRAorOjEwQUM0MDAwNDc5OTAxMDA0RDkzMDBGMzk0MzAwMTAwOTA4QjIyNEEwNAorOjEwQUM1MDAwODAzMjAwMDBDMDhCMDA0MDgxQjIwMDAwMzYwMDAwNDAwRQorOjEwQUM2MDAwNDM5OTAxMDAwMDAwMDBGQjEyQjAwMTAwMEYwMDAwRjM0NworOjEwQUM3MDAwOTA4ODAxMDAwNDAwMDBGMzBDRjQwMTAwQkE4QjIyMDY1NgorOjEwQUM4MDAwOTA2QzAwMDA1QzAwM0Q0MzEzRTAwMTAwQTgwMDJERjAzMworOjEwQUM5MDAwOTRCMDAxMDAzNzAwMkZGMDI0QjAwMTAwMzYwMDJBNTA5NAorOjEwQUNBMDAwRTdEMTAxMDAwMDAwNjM0MTEzQzAwMTAwOTU4REEwNDM2RQorOjEwQUNCMDAwMTM2QzAwMDAwMDAwMDA0MEU3QjEwMTAwQUY5MTAwMTBFQworOjEwQUNDMDAwODYzMDAxMDBBRjgyMDA4ODFDQjAwMDAwOTc4RDQyMDVERAorOjEwQUNEMDAwNDgzMTAwMDAwMDAwMDA0NDkzOTMwMTAwQkE4QjFBNURENAorOjEwQUNFMDAwNjk5MzAwMDAzNjAwMkQxMDg2QjAwMTAwNUMwMDNENDNFMgorOjEwQUNGMDAwRTdFMTAxMDBBODAwMkRGMDk0QjAwMTAwMzUwMDJGRjAyRAorOjEwQUQwMDAwMjRCMDAxMDAwMTAwNkJGQjg0QzgwMTAwQTI4REEwNDNBOAorOjEwQUQxMDAwODU2QzAwMDAzNTAwMjA0MEU3QjEwMTAwMDAwMDAwNDBENAorOjEwQUQyMDAwODFCMjAxMDAwMTAwNjNGMzEyQzgwMTAwQTU4REEwNDNBOAorOjEwQUQzMDAwMTM2QzAwMDAwMDAwMDA0MEU3QjEwMTAwNDA4MDAwMDNGOAorOjEwQUQ0MDAwNDRDOTAxMDBCMTkxMDA0QUYwMzEwMTAwQUY4MjAwODg4RQorOjEwQUQ1MDAwMUNCMDAwMDBBODhENDIwNTQ4MzEwMDAwMDAwMDAwNDRFRQorOjEwQUQ2MDAwOTM5MzAxMDAwMDAwMUE1RDY5OTMwMTAwMzcwMDAwNDBEMQorOjEwQUQ3MDAwNDc5OTAxMDAxMTAwNjNGMzgyQ0MwMTAwQTE4QzIyNDFBQworOjEwQUQ4MDAwOUUwNjAwMDAzNTAwMDA0MDQzOTkwMTAwNTgwMDNENDNGNQorOjEwQUQ5MDAwRTdFMTAxMDAwMDAwMDBGODM2QjAwMTAwQUI4QzAwRjBFNAorOjEwQURBMDAwMDBCMDAwMDA1RTAxMkQwNTQ4QjEwMTAwQjM4RDY1RjJEMQorOjEwQURCMDAwMTIzMDAwMDAwMDk5M0Y0MjEzRjAwMTAwQjg4RDIyNDc4NQorOjEwQURDMDAwRTc3RDAwMDBGNTgyNzU4ODFDQjAwMDAwQjI4RDAwNDA2MAorOjEwQUREMDAwODFCMjAwMDAwMDAwMDA0N0U3OTEwMTAwMDAwMDc1NDJDOQorOjEwQURFMDAwMTk5MDAxMDA3NTAwMDA0MDYxOTkwMTAwQkE4REE4QjE2OQorOjEwQURGMDAwMEMzMDAwMDAzNjk0MDAxMDk0MzAwMTAwQUY4MjAwODhCRgorOjEwQUUwMDAwMUNCMDAwMDA1RTAxMkUwNTQ4QjEwMTAwQzBBODNENDZGRgorOjEwQUUxMDAwMERFMDAxMDAwMDAwMDA0MDk3QjAwMTAwQzQ4RDIyNDAwOQorOjEwQUUyMDAwRTE2RDAwMDAwNDAwMDI0MTk3NDAwMDAwQzE4RDAwNTAxOAorOjEwQUUzMDAwNDNDMTAwMDBEMDhEMjI0QjgwMzIwMDAwMDAwMDYyNEJFNQorOjEwQUU0MDAwMTI5NDAxMDAwOTAwMDAwNzk2RTQwMTAwMDAwMDAwQTcyOQorOjEwQUU1MDAwOTdDMDAxMDAzMDAwMDAxMDk0QzgwMTAwMDA4MDAwNEEzMworOjEwQUU2MDAwNDQ5OTAxMDAwMDAwMDA0MkYxQjEwMTAwNUUwMTAwNEI3NQorOjEwQUU3MDAwRjBDOTAxMDA1RTAxMDAwNUUwQzkwMTAwMDAwMDAwNDRDNgorOjEwQUU4MDAwNjFCMTAxMDAyMDAwMDA0QTYyREQwMTAwQ0U4REE4NDBDMgorOjEwQUU5MDAwODEzMjAwMDAwMDgwMDAxMDQ0QzkwMTAwMDAwMDAwNTAxMQorOjEwQUVBMDAwRjFCMTAxMDAwNDAwMDAwOTk2RTQwMTAwMDAwMDY4QTg2NworOjEwQUVCMDAwOTdDMDAxMDBENDAwMDAwNUUwQzkwMTAwMDAwMDAwNDQ3MworOjEwQUVDMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwRDY4REE4NDAwMAorOjEwQUVEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDA5OTNGNDIyMAorOjEwQUVFMDAwMTNGMDAxMDBEQThENjU0MDgxMzIwMDAwM0YwMDAwRjM2RAorOjEwQUVGMDAwOTY4ODAxMDAwMDAwMDA0MEU3QjEwMTAwMDAwMDc1NTU5MAorOjEwQUYwMDAwNjFCMTAxMDAwMDAwMDAwNjYyQjEwMTAwREU4REE4NDBDMQorOjEwQUYxMDAwODEzMjAwMDBFMzhEMjI0QjgwMzIwMDAwMDAwMDAwNEJBNAorOjEwQUYyMDAwNjJCMTAxMDBFMThEQTg0MDgxMzIwMDAwMDAwMDAwOTc2RAorOjEwQUYzMDAwMTNCMDAxMDAwMDAwMDA5Njk3QjAwMTAwRTk4RDIwMDlEMAorOjEwQUY0MDAwOTY2QzAwMDBFOThEMUYwOTk2MjQwMDAwRjU4MjAwODhBOAorOjEwQUY1MDAwMUNCMDAwMDBFNDhEMDA0MDgxQjIwMDAwOUE5NDAwNTdCQworOjEwQUY2MDAwODEzMDAxMDBENThBMDAwNTQ4QjEwMDAwMkUwMDAwNDA2NAorOjEwQUY3MDAwNDM5OTAxMDBFRjhEMjJGMzgwMzIwMDAwOUE5NDAwNDI0MQorOjEwQUY4MDAwODEzMDAxMDAxQTg3MDA0MDgxQjIwMDAwMEI5NTAwNTIwOQorOjEwQUY5MDAwODEzMDAxMDBENThBMDA0MjE5ODAwMDAwOUE5NDAwM0E1RAorOjEwQUZBMDAwODEzMDAxMDAwQjk1MDA1MjgxMzAwMTAwRDU4QTAwNDBBQworOjEwQUZCMDAwODFCMjAwMDAwMDAwMDA0MDA1QjAwMTAwQUQ5MzAwNDBFOAorOjEwQUZDMDAwOTUzMDAxMDBENThBMjI0MDk1NkMwMDAwRkE4REEyNDA5MAorOjEwQUZEMDAwMUY3QzAwMDBCMDkyMDA0MDgxMzIwMTAwMUE4NzAwNDBCRgorOjEwQUZFMDAwODFCMjAwMDAwNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjJBOQorOjEwQUZGMDAwMDJCMDAxMDA1ODkzMDA1Mjk1MzAwMTAwNUY5MzAwNEI1RQorOjEwQjAwMDAwMDJCMDAwMDAxQTg3MDA0MDgxQjIwMDAwOTQ5NTAwNDAxMQorOjEwQjAxMDAwOTUzMDAxMDAwNjhFQTIwODgwMzIwMDAwMDY4RUEyMTYyRQorOjEwQjAyMDAwODAzMjAwMDAxQTg3MjI0MjE5N0MwMDAwMDAwMDAwNEI4OQorOjEwQjAzMDAwMTk5MDAxMDA5QTk0MDAzQTgxMzAwMTAwMUE4NzAwNDA2QgorOjEwQjA0MDAwODFCMjAwMDAwMDIzMDBBNjE2QjAwMTAwMDk4RTgzMUUwNQorOjEwQjA1MDAwODAzMjAwMDAwMDA4MDAwQjE2REMwMTAwMDAwMDAwMDAzOAorOjEwQjA2MDAwMkFDMDAxMDBFMzk0MDAwODgwMzAwMTAwMEQ4RTAwNUVDQworOjEwQjA3MDAwMTc5MDAwMDAwNDk1MDA0MzYxMzEwMTAwQkQ5MTAwNDAyQworOjEwQjA4MDAwOEQzMDAxMDBFQjk0MDAwNzE2MTQwMTAwMDA4MDAwMTBDMQorOjEwQjA5MDAwNDJDOTAxMDAxNThFMjI0MEUzNkQwMDAwMDAwMDAwNDMwQworOjEwQjBBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMTI4RUE4NDA3NQorOjEwQjBCMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwOEM5NDAwNUVEQQorOjEwQjBDMDAwMDUxMDAxMDBCMDkyMDA0MDgxMzIwMTAwMTk4RTIyMDk2MgorOjEwQjBEMDAwODAzMDAwMDAwQjk1MDA0MDEzMzAwMTAwREE4QTAwMDUzMworOjEwQjBFMDAwNDhCMTAwMDBERDkzMDA0MDgxMzIwMTAwRDU4QTAwNDA2NAorOjEwQjBGMDAwODFCMjAwMDAwMDAwMDA0QTFGOTAwMTAwMjA4RTIyNDMxMAorOjEwQjEwMDAwM0Q3QzAwMDAwMDAwMDA0NDE5OTAwMTAwMDAwMDAwNDM1NQorOjEwQjExMDAwM0Q4MDAxMDAyMThFMDA0MjE5OTAwMDAwMTQwMDJENDU1MQorOjEwQjEyMDAwMUY5MDAxMDA3RDhFODMxRTgwMzIwMDAwN0Q4RTAwNDRDMgorOjEwQjEzMDAwMTk5MDAwMDBBMjkyMDA0MDgxMzIwMTAwMzU4RUEyMDhEMQorOjEwQjE0MDAwODAzMjAwMDAzNThFQTIxNjgwMzIwMDAwMzE4RUEyNDI3RAorOjEwQjE1MDAwMTk3QzAwMDAwMDgyMDAwMjA0REMwMTAwQTA5ODAwNDA3RAorOjEwQjE2MDAwNDc5OTAxMDAzMDA1MDA0MTg5MzAwMTAwMkU4RUEyNDEyRgorOjEwQjE3MDAwMTk3QzAwMDBCMDkyMDA0MDgxMzIwMTAwMUE4NzAwNDAyMworOjEwQjE4MDAwODFCMjAwMDA1ODkzMDAxNTk0MzAwMTAwNUY5MzAwNEI4QQorOjEwQjE5MDAwMDJCMDAwMDAxQTg3MDA0MDgxQjIwMDAwREQ5MzAwNDAzOQorOjEwQjFBMDAwODEzMjAxMDAwMDAwMDA0QjE5OTAwMTAwOUE5NDAwM0E4RQorOjEwQjFCMDAwODEzMDAxMDAxQTg3MDA0MDgxQjIwMDAwMzg4RTIyNDI5RgorOjEwQjFDMDAwMTk3QzAwMDBERDkzMDA0MDgxMzIwMTAwMzk4RTAwNDA3RgorOjEwQjFEMDAwODFCMjAwMDBBRDkzMDA0MDgxMzIwMTAwNjU4RTIyNDFCMgorOjEwQjFFMDAwMTk3QzAwMDBDMDAwMDAxNTk4QzgwMTAwNjU4RUEwMEJGNgorOjEwQjFGMDAwOTk2QzAwMDAzMDAwMDAxMDgwQzgwMTAwMDA4MDAwNDAwMQorOjEwQjIwMDAwNDQ5OTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM2QQorOjEwQjIxMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwNDBGNworOjEwQjIyMDAwNjJCMTAxMDA0MThFQTgwMEUwMzEwMDAwQUY4MjAwODhDOQorOjEwQjIzMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwQzAwMDAwMTU2RQorOjEwQjI0MDAwOThDODAxMDAzMDAwMkUwQjk5RDAwMTAwMDAwMDZBNTAxMAorOjEwQjI1MDAwOTlDMDAxMDBDMDAwNjIwMTgwQ0MwMTAwMEM4MDAwMDM5NQorOjEwQjI2MDAwNDJDOTAxMDAyRDAwMkRGMDIyQjAwMTAwMDAwMDAwNEM2OQorOjEwQjI3MDAwODBDMDAxMDAwMDAwMDA1QzIzODAwMTAwRDQwMDNGNDEzOQorOjEwQjI4MDAwRTdFMTAxMDAwQjAwMDAxMUU0RjUwMTAwMkYwMDIwNDc2OQorOjEwQjI5MDAwRTdCNTAxMDA1MjhFMjMwQjgxNkMwMDAwMDAwMDAwNEZDNworOjEwQjJBMDAwRTU5MTAxMDAwMDAwMDAwODgwQjAwMTAwMDAwMDAwMEJFMworOjEwQjJCMDAwMDNCMDAxMDAwMDAwMDAxNTAyRDAwMTAwRTM5NDAwMDA3QgorOjEwQjJDMDAwMkE0MDAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA2RAorOjEwQjJEMDAwNjJERDAxMDA1NzhFQTg0MDgxMzIwMDAwQUY4MjAwODhGNQorOjEwQjJFMDAwMUNCMDAwMDBCMDkyMDAwNTQ4MzEwMTAwQzAwMDAwMDExMAorOjEwQjJGMDAwODBDRTAxMDA2MzhFMjYxMTAwMzAwMDAwMTAwMDAwMDA5NworOjEwQjMwMDAwMkFDODAxMDAwMDAwMDAwODgwQjAwMTAwMDAwMDAwMDExMAorOjEwQjMxMDAwODBDMDAxMDBDMDAwMDA0MDk5OTgwMTAwMDAwMDAwMDFCOQorOjEwQjMyMDAwOThEMDAxMDBFMzk0MDA0QzAyMzAwMTAwQzAwMDAwNDBCRQorOjEwQjMzMDAwMDM5ODAxMDA2QThFMDA0MDgxQjIwMDAwMzAwMDJGMDg5RgorOjEwQjM0MDAwODBCMDAxMDBDMDAwMDAxNUY0QzkwMTAwQzAwMDAwMDE3OAorOjEwQjM1MDAwRTRDRDAxMDBDMDAwMDA0MDAzOTgwMTAwRTM5NDAwMDAyOAorOjEwQjM2MDAwMkE0MDAxMDA2RjhFMjI0NDFGN0MwMDAwQUMwMDJGNDA1OQorOjEwQjM3MDAwMTNCMDAxMDAwMDAwMDAwMUUwQzEwMTAwQjAwMDAwNDA3NgorOjEwQjM4MDAwNDc5OTAxMDA3MDhFMDAwMUUwRDEwMDAwQkQ5MTAwNDA5RQorOjEwQjM5MDAwOEQzMDAxMDA4MDYzMDBBNjE2QjAwMTAwRUI5NDAwMDcxOQorOjEwQjNBMDAwMTYxNDAxMDAwMDgwMDAxMDQyQzkwMTAwNzg4RTIyNDA2RQorOjEwQjNCMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA5NworOjEwQjNDMDAwNjJERDAxMDA3NThFQTg0MDgxMzIwMDAwQUY4MjAwODhFNgorOjEwQjNEMDAwMUNCMDAwMDA4Qzk0MDA1RTA1MTAwMTAwN0I4RTIyMDlEOQorOjEwQjNFMDAwODAzMDAwMDAwQjk1MDA0MDgxMzIwMTAwRDU4QTAwMDVCNQorOjEwQjNGMDAwNDhCMTAwMDA3RDhFMDA0QTFGOTAwMDAwMDAwMDAwMDA1MAorOjEwQjQwMDAwMTBCMDAxMDAyNDAwMkQxNTEwQzAwMTAwMjgwMDJERjBGRgorOjEwQjQxMDAwMTZCMDAxMDAyMjAwMkRGMDI2QjAwMTAwMTQwMDJGRjIxQQorOjEwQjQyMDAwMENCMDAxMDAwMDAwMDAwMUUwRDEwMTAwMDAwMDAwMTA5QworOjEwQjQzMDAwMzJCMDAxMDAwMDAwMDAwQjFCQjAwMTAwMDQwMDFGMTUxQQorOjEwQjQ0MDAwMUE1MDAwMDAwMDAwMDA0MDIzQjAwMTAwMDAwMDAwMDE3RAorOjEwQjQ1MDAwMkFCMDAxMDA0Qjk0MDA0MDM1QjAwMDAwMkYwMDIwNDA3RQorOjEwQjQ2MDAwRTdCMTAxMDBDMThFQTI0NTFGN0MwMDAwMjQwMDIwMEIyMworOjEwQjQ3MDAwRTBCMTAxMDAyODAwMjAxM0UwQjEwMTAwMjIwMDIwMDYwNQorOjEwQjQ4MDAwRTRCMTAxMDA5NzhFMjI1QzFGN0MwMDAwMDAwMDAwNUM4QworOjEwQjQ5MDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwOTc4RTIyNDBCOQorOjEwQjRBMDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBBMgorOjEwQjRCMDAwNjJERDAxMDA5MzhFQTg0MDgxMzIwMDAwQUY4MjAwODhENworOjEwQjRDMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDA4MDAwMTkxOAorOjEwQjREMDAwNDJDOTAxMDBCQThFMjI0MEUzNkQwMDAwQTg4RTIyNDJDQworOjEwQjRFMDAwMTk3QzAwMDAwNTk0MDA0MDgxMzIwMTAwNTc5MjAwNDAxMQorOjEwQjRGMDAwODEzMjAxMDBCNThFMjI0QjgwMzIwMDAwMDAwMDAwNDNGMworOjEwQjUwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOUU4RUE4NDA4NAorOjEwQjUxMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwQTQ4RTIyNDE1RQorOjEwQjUyMDAwMTk3QzAwMDBDNjkyMDA0MDExMzAwMTAwQTU4RTAwMDU3NAorOjEwQjUzMDAwNDhCMTAwMDBCMDkyMDA0MDgxMzIwMTAwQTc4RTIyMDk3QworOjEwQjU0MDAwODAzMDAwMDAwQjk1MDA0MDgxMzIwMTAwRjk4MjAwNDBGQworOjEwQjU1MDAwMDVCMDAwMDAwNTk0MDA0MDgxMzIwMTAwNTM5MjAwNDA4NAorOjEwQjU2MDAwODEzMjAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA4MQorOjEwQjU3MDAwNjJERDAxMDBBQjhFQTg0MDgxMzIwMDAwQUY4MjAwODhGRQorOjEwQjU4MDAwMUNCMDAwMDBCMThFMjI0MTE5N0MwMDAwQzY5MjAwNDAyMAorOjEwQjU5MDAwMTEzMDAxMDBCMjhFMDAwNTQ4QjEwMDAwQjA5MjAwNDBBOQorOjEwQjVBMDAwODEzMjAxMDBCNDhFMjIwOTgwMzAwMDAwMEI5NTAwNDBFQQorOjEwQjVCMDAwODEzMjAxMDBGOTgyMDA0MDA1QjAwMDAwMDAwMDAwNDMyNAorOjEwQjVDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQjY4RUE4NDBBQworOjEwQjVEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyRQorOjEwQjVFMDAwNDhCMTAxMDBCRDhFMjI0MTE5N0MwMDAwQzY5MjAwNDA4NgorOjEwQjVGMDAwMTEzMDAxMDBCRThFMDAwNTQ4QjEwMDAwQjA5MjAwNDAzRAorOjEwQjYwMDAwODEzMjAxMDBDMDhFMjIwOTgwMzAwMDAwMEI5NTAwNDA3RAorOjEwQjYxMDAwMTMzMDAxMDBEQThBMDA0MDA1QjAwMDAwMDA4MDAwMTlGNAorOjEwQjYyMDAwNDJDOTAxMDBDODhFMjI0MEUzNkQwMDAwMDAwMDAwNDNDMworOjEwQjYzMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQzQ4RUE4NDAyRAorOjEwQjY0MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDVCRAorOjEwQjY1MDAwNDhCMTAxMDAwMDAwMDA0MDA1QjAwMTAwQ0M4RTIyNDEzRAorOjEwQjY2MDAwMTk3QzAwMDBDNjkyMDA0MDExMzAwMTAwQ0Q4RTAwMDUwQgorOjEwQjY3MDAwNDhCMTAwMDBCMDkyMDA0MDgxMzIwMTAwMDgwMDJEMEE1QworOjEwQjY4MDAwODRCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMTQwMDIwNDBFRQorOjEwQjY5MDAwRTFCMTAxMDBEMjhFMDMxRTgwMzIwMDAwRDM4RTAwNDE0MgorOjEwQjZBMDAwODdCMDAwMDAyMTAwMDA0MDg3OTgwMTAwQ0U5MzAwNDA0MQorOjEwQjZCMDAwODEzMjAxMDAwMDAwMDA1QzFGOTAwMTAwRDc4RTIyMDkzQQorOjEwQjZDMDAwODAzMDAwMDAwQjk1MDA0MDEzMzAwMTAwREE4RTIyNDREOAorOjEwQjZEMDAwMTk3QzAwMDAwQjk1MDA0RjgxMzAwMTAwMDAwMDAwNDRGMAorOjEwQjZFMDAwMTk4MDAxMDBENThBQTI0QTFGN0MwMDAwREE4QTAwNDAzNgorOjEwQjZGMDAwODFCMjAwMDBCQTAwMjA0MEU1QjEwMTAwRTA4RTlDMTc0NQorOjEwQjcwMDAwODAzMjAwMDBDQzAwMDA0MDQzOTkwMTAwOUQ5NTAwNDAyQworOjEwQjcxMDAwODEzMjAxMDA0NDk1MDA0MDEzMzAwMTAwQzAwMDAwNDAxOAorOjEwQjcyMDAwNDM5OTAxMDBDNDAwMkRGMDgyQjAwMTAwNzg5NTAwRjAyQgorOjEwQjczMDAwODQzMDAxMDBCMDkyMDA0MDgxMzIwMTAwREE4QTIyMDk4RgorOjEwQjc0MDAwODAzMDAwMDAwQjk1MDA0MDEzMzAwMTAwREE4QTAwNDA4MQorOjEwQjc1MDAwODFCMjAwMDAyRTAwMDA0MDQzOTkwMTAwRUM4RTIyNDA4RgorOjEwQjc2MDAwRTc2RDAwMDAzMjAwMDA0MDQzOTkwMTAwRjQ4RUEyNDBEMgorOjEwQjc3MDAwRTU2RDAwMDA5QTkzMDA0MDgxMzIwMTAwMjQwMDIwMEIwNworOjEwQjc4MDAwRTBCMTAxMDAyODAwMjAxM0UwQjEwMTAwMjIwMDIwMDZGMgorOjEwQjc5MDAwRTRCMTAxMDAxNDAwMjAwQUUwQjEwMTAwREE4QTIyMDlCNAorOjEwQjdBMDAwODAzMDAwMDAwQjk1MDA0MDEzMzAwMTAwREE4QTAwNDAyMQorOjEwQjdCMDAwODFCMjAwMDA5QTkzMDA0MDgxMzIwMTAwNTM5MzAwNDAwRgorOjEwQjdDMDAwODEzMjAxMDAwMjhGMjI0MTE5N0MwMDAwMDAwMDAwMEIzMQorOjEwQjdEMDAwOTlCMDAxMDAwNDAwMUYxNTk4NTAwMDAwMDI4RjIwMDE0RAorOjEwQjdFMDAwOTg2QzAwMDA3MDAwMDAwMzQ4QzkwMTAwMDAwMDJFNDY1QworOjEwQjdGMDAwMUY5MDAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDNBMworOjEwQjgwMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwQTAwMDAwQTRGRAorOjEwQjgxMDAwNjJERDAxMDBGRjhFQTgwMEUwMzEwMDAwMDAwMDAwMDU5RAorOjEwQjgyMDAwNDhCMTAxMDBBQzAwMkYwMDEwQjAwMTAwMDAwMDAwMDE4MQorOjEwQjgzMDAwRTBDMTAxMDAxNDAwMkYxNTEwQzAwMTAwMDAwMDAwMEEzMworOjEwQjg0MDAwODBCMDAxMDAwMDAwNjAwMTgwRDAwMTAwMDAwMDAwNDdDRQorOjEwQjg1MDAwMTk5MDAxMDA4NDhFMjIwOTgwMzIwMDAwMEI5NTAwMDlBNgorOjEwQjg2MDAwODAzMDAxMDA4NDhFMDA0MDEzQjAwMDAwMDA4MDAwMDM4RgorOjEwQjg3MDAwNDJDOTAxMDAwMDAwMDBGMDgyQjAwMTAwMTMwMDAwNDA0NgorOjEwQjg4MDAwODc5ODAxMDAwMDAwMDA0QzQzQzEwMTAwQ0U5MzAwRjBGNgorOjEwQjg5MDAwODQzMDAxMDBENThBMDA1QzFGOTAwMDAwMkMwMDIwNDBGRAorOjEwQjhBMDAwRTdCMTAxMDAyRDAwMjA0MEU3QjEwMTAwRDU4QTAwNDIzOAorOjEwQjhCMDAwMTk4MDAwMDBDMDkzMDA0MDgxMzIwMTAwRTA5NDAwNDhFQworOjEwQjhDMDAwOTUzMDAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAwQQorOjEwQjhEMDAwNjJERDAxMDAxNzhGQTg0MDEzMzAwMDAwQUY4MjAwODg5RQorOjEwQjhFMDAwMUNCMDAwMDAxRDhGMDAwNTQ4QjEwMDAwMUM4RjAwNDBGNworOjEwQjhGMDAwMTNCMDAwMDAwMDAwMDAwMDEyQjAwMTAwMDgwMDAwNDA3QQorOjEwQjkwMDAwNDM5OTAxMDAxNDAwMkRGMDgyQjAwMTAwMDQwMDIyRjBFMAorOjEwQjkxMDAwODQzMDAwMDAxMzAwMDA0MDg3OTgwMTAwQ0U5MzAwNDA1RgorOjEwQjkyMDAwODEzMjAxMDAwMDAwMDA1QzFGOTAwMTAwMzU4RjAwMDk4QQorOjEwQjkzMDAwMDBCMDAwMDBENThBODc0MjE5MTAwMDAwOEIwMDJGNDcwNQorOjEwQjk0MDAwMTk4MDAxMDBENThBMDA0MEU3OTEwMDAwMkYwMDAwNDBENworOjEwQjk1MDAwNDc5OTAxMDAzMzhGMjI0N0U3N0QwMDAwMzQ5MjAwNDA3MQorOjEwQjk2MDAwRTczMTAxMDAzMzhGMjIwMDgwMzIwMDAwMkU4RkEyNDA4OQorOjEwQjk3MDAwMUY3QzAwMDBCMDkyMDA0MDgxMzIwMTAwMzM4RjAwNDBGNAorOjEwQjk4MDAwODFCMjAwMDAzMDAwMDA0MDQzOTkwMTAwMzIwMDJERjJFNgorOjEwQjk5MDAwOTRCMDAxMDA1ODkzMDBGMjAyMzAwMTAwNUY5MzAwNEIxNQorOjEwQjlBMDAwMDJCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMzQ4RjAwNDBFMworOjEwQjlCMDAwMDFCMDAwMDAwMDAwMDA0MDA1QjAwMTAwM0E4RjIyMDBGNQorOjEwQjlDMDAwODAzMjAwMDAzOThGQTI0MjE5N0MwMDAwQUQ5MzAwNDAwNAorOjEwQjlEMDAwODEzMjAxMDAzQThGMDA0MDgxQjIwMDAwREQ5MzAwNDBDNworOjEwQjlFMDAwODEzMjAxMDBDNjhGMjI1QzFGN0MwMDAwMDAwMDAwNUNEOQorOjEwQjlGMDAwMUY4MDAxMDAwMDgwMDAxMDQyQzkwMTAwNDI4RjIyNDBEOAorOjEwQkEwMDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAzRQorOjEwQkExMDAwNjJERDAxMDAzRjhGQTg0MDgxMzIwMDAwQUY4MjAwODhDNAorOjEwQkEyMDAwMUNCMDAwMDBDNjhGMDAwNTQ4QjEwMDAwQTI5MjAwNDA4MworOjEwQkEzMDAwODEzMjAxMDA0OThGQTIwODgwMzIwMDAwNDk4RkEyMTY4RQorOjEwQkE0MDAwODAzMjAwMDA5QTk0MDA0RDgxMzAwMTAwMDA4MjAwMDI5MworOjEwQkE1MDAwMDREQzAxMDAxQTg3MDA0MDgxQjIwMDAwNzQwMDAwNDAzRAorOjEwQkE2MDAwNDM5OTAxMDAwMDAwMDBGODgyQjAwMTAwMDAwMDAwRjBERQorOjEwQkE3MDAwODRCMDAxMDAwMDAwMDA0MTk2QjAwMTAwNTc4RjIyNDJCRgorOjEwQkE4MDAwOTYxNDAwMDAwMDgwMDAxMDQ0QzkwMTAwNjQwMDY4NDA2MgorOjEwQkE5MDAwOTc5ODAxMDAwMDAwMDA0MUYwQjEwMTAwMDAwMDAwNDI1MQorOjEwQkFBMDAwRjBCMTAxMDA3MDAwMDAwNUUwQzkwMTAwMDAwMDAwNDU5MAorOjEwQkFCMDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwNTQ4RkE4NDAzOAorOjEwQkFDMDAwODEzMjAwMDAwMDAwMDA1QzFGOTAwMTAwMDAwMDAwNDU3MgorOjEwQkFEMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNTg4RkE4NUNEOAorOjEwQkFFMDAwMUYwMDAwMDBBRjgyMDA4ODFDQjAwMDAwNUUwMTJEMDUyMQorOjEwQkFGMDAwNDhCMTAxMDA1QzhGNjVGMjEyMzAwMDAwMDA5OTNGNDJBRQorOjEwQkIwMDAwMTNGMDAxMDA2MThGMjI0N0U3N0QwMDAwRjU4Mjc1ODgwMAorOjEwQkIxMDAwMUNCMDAwMDA1QjhGMDA0MDgxQjIwMDAwMDAwMDAwNDdCNQorOjEwQkIyMDAwRTc5MTAxMDAwNDAwNzUwOTk2RTQwMTAwMDA4MDAwMTAwRgorOjEwQkIzMDAwNDRDOTAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDY4QTgwMAorOjEwQkI0MDAwOTdDMDAxMDAwMDAwMDAwM0UwQjEwMTAwMDA4MDAwMDM4NQorOjEwQkI1MDAwNDQ5OTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTBBMAorOjEwQkI2MDAwNjJCMTAxMDA2OThGQTg0MEUxMzEwMDAwQUY4MjAwODgxNgorOjEwQkI3MDAwMUNCMDAwMDAwMDk5M0Y0MjEzRjAwMTAwNkQ4RjY1MDU3NQorOjEwQkI4MDAwNDgzMTAwMDAzRjAwMDBGMzk2ODgwMTAwMDAwMDAwNDBBQgorOjEwQkI5MDAwRTdCMTAxMDAwMDAwNzU0MDgxQjIwMTAwNzU4RjIyNEJCMgorOjEwQkJBMDAwODAzMjAwMDAwMDAwMDA1NTYxQjEwMTAwMDAwMDAwNEIzMAorOjEwQkJCMDAwNjJCMTAxMDA3MzhGQTg0MDgxMzIwMDAwMDAwMDAwMDdDRAorOjEwQkJDMDAwMTZCMDAxMDAwMDYyMDAwQjE2REMwMTAwMzQ5MjAwNDA0OAorOjEwQkJEMDAwODEzMjAxMDA4RDhGMjIwMDgwMzIwMDAwRTM5MzAwNUZFQworOjEwQkJFMDAwMDExMDAxMDA3NzhGMjI0MDk1NkMwMDAwMDA4MDAwMTA0QQorOjEwQkJGMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM0MQorOjEwQkMwMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTAyRAorOjEwQkMxMDAwNjJCMTAxMDA3RjhGQTgwMEUwMzEwMDAwQUY4MjAwODg5MAorOjEwQkMyMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDQ4MDAwMDNDMgorOjEwQkMzMDAwNDJDOTAxMDAwMDAwMDBGMjAyQjAwMTAwNTg5MzAwNTIxNgorOjEwQkM0MDAwOTUzMDAxMDBCMDkyMDA0MDgxMzIwMTAwNzc4RjIyNDE4RgorOjEwQkM1MDAwOTc1MDAwMDAwQzgwMDAwMzQyQzkwMTAwMDAwMDAwRjA3MgorOjEwQkM2MDAwMDBCMDAxMDAwMDAwMDA1QzAxODAwMTAwNUY5MzAwNEIwOAorOjEwQkM3MDAwMDJCMDAwMDA3NzhGMDAwNTQ4QjEwMDAwRUI5NDAwNDA0RgorOjEwQkM4MDAwMDMzMDAxMDAxNzgwMDAwMzQ0QzkwMTAwMDBGMDAwMENEQworOjEwQkM5MDAwOTY4ODAxMDAwMDAwNjM0Qzk3RjAwMTAwMTA4MDAwMDNCQgorOjEwQkNBMDAwNDRDOTAxMDAwMDAwMDBBQkUxQjEwMTAwOEM5NDAwNUVDQQorOjEwQkNCMDAwMDUxMDAxMDAwMzAwMDAwNzFBRjQwMTAwMDcwMDAwMDc0NworOjEwQkNDMDAwMTY4ODAxMDAwMEI1MDAwRDQ2QzkwMTAwOTc4RjMwNDA2RAorOjEwQkNEMDAwODEzMjAwMDAwMDAwMDAwQkU2ODEwMTAwMDBCNzAwMEQ3QQorOjEwQkNFMDAwNDZDOTAxMDAwMDAwMDAwQkU2ODEwMTAwMTAwMDEwMEZBMgorOjEwQkNGMDAwOTRGNDAxMDA5MzA0MDA1Rjk1MDQwMTAwMzk5MzAwNDAxRgorOjEwQkQwMDAwODEzMjAxMDBBMThGMjI1MEZEN0YwMDAwOUY4RjQ2NDBBRAorOjEwQkQxMDAwODEzMjAwMDAwMDAwMUU0MTMxRDMwMTAwMDAwMDJFMDVEOQorOjEwQkQyMDAwNDhCMTAxMDAwMDAwMDA0MEUxQjEwMTAwMDAwMDAwNDAwNgorOjEwQkQzMDAwMEZCMDAxMDA5QjkyMDA0MTgxMzAwMTAwMUE4NzAwNDA0MgorOjEwQkQ0MDAwODFCMjAwMDBBMjkyMDA0MDgxMzIwMTAwQjM4RkEyMDhBQworOjEwQkQ1MDAwODAzMjAwMDBCMzhGQTIxNjgwMzIwMDAwMDA4MjAwMDIwMQorOjEwQkQ2MDAwMDREQzAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDFCOAorOjEwQkQ3MDAwMDBDMDAxMDBBQzhGMzc1QzYxMzEwMDAwMDAwMDAwMUI4NworOjEwQkQ4MDAwNjJCMTAxMDBCMDhGMjg0MDgxMzIwMDAwQUQ4RjAwNDBDOQorOjEwQkQ5MDAwODFCMjAwMDAwMDAwMDAwMDYyQjEwMTAwQjA4RkE4NDAzNQorOjEwQkRBMDAwODEzMjAwMDAxQTg3MTc0MDgxQjIwMDAwNzQwMDIyNDBERgorOjEwQkRCMDAwRjFCMTAxMDAwMDAwMDA0MEUxQjEwMTAwRTA5NDAwNEE0RgorOjEwQkRDMDAwOTUzMDAxMDBDMDkzMDA1QzFGMTAwMTAwNDk4RjAwNDBCNgorOjEwQkREMDAwODFCMjAwMDAyRjAwMDA0MDQ3OTkwMTAwQzQ4RjIyNDcyNAorOjEwQkRFMDAwRTc3RDAwMDAzNDkyMDA0MEU3MzEwMTAwQzQ4RjIyMDA1QgorOjEwQkRGMDAwODAzMjAwMDBCRjhGQTI0MDFGN0MwMDAwQjA5MjAwNDA0NAorOjEwQkUwMDAwODEzMjAxMDBDNDhGMDA0MDgxQjIwMDAwMzAwMDAwNDA0OAorOjEwQkUxMDAwNDM5OTAxMDAzMjAwMkRGMjk0QjAwMTAwNTg5MzAwRjJEMgorOjEwQkUyMDAwMDIzMDAxMDA1RjkzMDA0QjAyQjAwMDAwMDAwMDAwMDVFQgorOjEwQkUzMDAwNDhCMTAxMDBFMDk0MDA0ODk1MzAwMTAwQzA5MzAwNUNENworOjEwQkU0MDAwMUYxMDAxMDBDOThGODc0MjE5MTAwMDAwOEIwMDJGNDc3NworOjEwQkU1MDAwMTk4MDAxMDAwMDAwMDA0MEU3OTEwMTAwMEI5NTAwNDJBRAorOjEwQkU2MDAwODEzMDAxMDBENThBMDA0MDgxQjIwMDAwQzA5MzAwNDBCQgorOjEwQkU3MDAwODEzMjAxMDBENThBMDA1QzFGOTAwMDAwQkEwMDIwNDA4QQorOjEwQkU4MDAwRTVCMTAxMDA0NDk1MDA0MDgxMzIwMTAwQzAwMDAwNDA0RQorOjEwQkU5MDAwNDM5OTAxMDBDNDAwMkRGMDgyQjAwMTAwNzg5NTAwRjBCNAorOjEwQkVBMDAwODQzMDAxMDBCMDkyMDA0MDgxMzIwMTAwMEI5NTAwNDVDMgorOjEwQkVCMDAwODEzMDAxMDBENThBMjI0MjE5N0MwMDAwOUE5NDAwM0ExMAorOjEwQkVDMDAwODEzMDAxMDBENThBMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwQkVEMDAwODFCMjAwMDBBMjkyMDA0MDgxMzIwMTAwREU4RkEyMDhGMAorOjEwQkVFMDAwODAzMjAwMDBERThGQTIxNjgwMzIwMDAwOUE5NDAwNDc1NAorOjEwQkVGMDAwODAzMDAxMDAwMDgyMDAwMjA0REMwMTAwMUE4NzAwNDA0QgorOjEwQkYwMDAwODFCMjAwMDAxMDgwMDAwMzQ0QzkwMTAwMDBFMTAwQTZENgorOjEwQkYxMDAwODRCMDAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwNDBDOQorOjEwQkYyMDAwRjFCMTAxMDAwMDAwNjAwNzg0OTQwMTAwOEM5NDAwNUU3MAorOjEwQkYzMDAwMDUxMDAxMDBENThBMDA0MDgxQjIwMDAwOEEwMDAwNDA0RgorOjEwQkY0MDAwNDc5OTAxMDBCMDkyMDA0MUU3NDEwMTAwREE4QTAwNDBDMAorOjEwQkY1MDAwODFCMjAwMDA5QTkzMDA0MDgxMzIwMTAwNTM5MzAwNDA2NworOjEwQkY2MDAwODEzMjAxMDAwMDAwMDAwMTJDQjAwMTAwMDAwMDAwMTUyQQorOjEwQkY3MDAwMTBCMDAxMDAwMDAwMDAwMDEwQzAwMTAwMDQwMDFGMEEwMgorOjEwQkY4MDAwMkM1MDAwMDAwMDAwMDAxMDMyQjAwMTAwMUU5NTAwMDY4OQorOjEwQkY5MDAwMDQzMDAxMDBGNjhGQTI0ODFGN0MwMDAwRjQ4Rjg0NDgxMworOjEwQkZBMDAwMUYxMDAwMDBBQzAwMDA0MDQ3OTkwMTAwRjY4RjAwMEEwNgorOjEwQkZCMDAwRTBDMTAwMDAwMDAwMDAwQTAyQjAwMTAwQkQ5MTAwMDFENAorOjEwQkZDMDAwOEMzMDAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTAwRQorOjEwQkZEMDAwNjJERDAxMDBGNzhGQTg0MDgxMzIwMDAwQUY4MjAwODg0NworOjEwQkZFMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMDI4NAorOjEwQkZGMDAwMTBDMDAxMDAwNDkwMjIwMjE0NTAwMDAwMDg5NDAwNDU3MworOjEwQzAwMDAwMUYwMDAxMDBFRThGMjI1QzFGN0MwMDAwMDAwMDAwNDczMworOjEwQzAxMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMDA5MEE4NUNFOQorOjEwQzAyMDAwMUYwMDAwMDBBRjgyMDA4ODFDQjAwMDAwRUU4RjAwMDVFQQorOjEwQzAzMDAwNDhCMTAwMDAwMDAwMDAwQjFCQjAwMTAwMDgwMDJENDBCQgorOjEwQzA0MDAwODVCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDAwMDAwNDA1NworOjEwQzA1MDAwMDVCMDAxMDBDRTkzMDA0MTg3MzAwMTAwMDAwMDAwNDU4QgorOjEwQzA2MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMEE5MEE4NDBBQgorOjEwQzA3MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU4MworOjEwQzA4MDAwNDhCMTAxMDAxMDkwMjIwOTgwMzAwMDAwMEI5NTAwNDA1QgorOjEwQzA5MDAwMTMzMDAxMDAxNDkwMjI0NDE5N0MwMDAwMEI5NTAwNEZDRQorOjEwQzBBMDAwODEzMDAxMDAxNDkwQTI0NzFGN0MwMDAwMDAwMDAwNDQ3MgorOjEwQzBCMDAwMTk4MDAxMDBGRjA3MDAwODAwOEMwMTAwMjI5MDIyNEEyRAorOjEwQzBDMDAwMUY3QzAwMDAxQTkwQTIxNjAyMzAwMDAwQjA5MjAwNDBCRgorOjEwQzBEMDAwODEzMjAxMDAyRjAwMjA0MEU3QjEwMTAwRDU4QTAwNDBFNQorOjEwQzBFMDAwODFCMjAwMDAyRDAwMkQwODJBQjAwMTAwMUU5MDIyNDJDRQorOjEwQzBGMDAwMTk3QzAwMDBERDkzMDA0MDgxMzIwMTAwMUY5MDAwNDA1OAorOjEwQzEwMDAwODFCMjAwMDBBRDkzMDA0MDgxMzIwMTAwMzAwMDJFMDA2QQorOjEwQzExMDAwMkFEMDAxMDAzMjAwMkExNUU0QjEwMTAwRDU4QTAwMTZBOAorOjEwQzEyMDAwRTRCMTAwMDAzNTkwMjIxNjAyMzAwMDAwMDAwMDAwMDg0MworOjEwQzEzMDAwMkFCMDAxMDA5NDk1MDA0MDk1MzAwMTAwMjc5MEEyNDA1QworOjEwQzE0MDAwMTE2QzAwMDAzNjkwMjI0MDJENkMwMDAwQUMwMDAwNDBDNQorOjEwQzE1MDAwNDc5OTAxMDBCMDAwMkIwMUUwQzEwMTAwMDAyQjAwQTZBRgorOjEwQzE2MDAwMTZCMDAxMDAwMDAwMDAwMUUwRDEwMTAwRTM5NDAwMDhENgorOjEwQzE3MDAwODAzMDAxMDAyRTkwMDA1RTE3OTAwMDAwMDQ5NTAwNDM2RgorOjEwQzE4MDAwNjEzMTAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA3NgorOjEwQzE5MDAwNjJERDAxMDAyRjkwQTg0MDgxMzIwMDAwQUY4MjAwODg0QworOjEwQzFBMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwRUI5NDAwMDczRQorOjEwQzFCMDAwMTYxNDAxMDA4Qzk0MDA1RTA1MTAwMTAwQjA5MjAwNDAzRQorOjEwQzFDMDAwODEzMjAxMDAyRjAwMjA0MEU3QjEwMTAwREE4QTAwNDBFRgorOjEwQzFEMDAwODFCMjAwMDAwMDAwMDAwQjFCQjAwMTAwMDQwMDFGMTUxRAorOjEwQzFFMDAwMUE1MDAwMDA0MzkwMjAxNjFBNkMwMDAwNzAwMDAwMDNFMworOjEwQzFGMDAwNDhDOTAxMDAwMDAwMjI1MEYxQjEwMTAwMDAwMDAwMDMxNQorOjEwQzIwMDAwRjBCMTAxMDAwMDAwMDAwMEUwQjEwMTAwMDAwMDAwNDJCOAorOjEwQzIxMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNDA5MEE4NDZDOQorOjEwQzIyMDAwMUYxMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMDBFMAorOjEwQzIzMDAwMTBCMDAxMDAwMDAwMDAxNTEwQzAwMTAwMDAwMDAwMEE0RAorOjEwQzI0MDAwMkFCMDAxMDAwMDAwMDAwQTJDRDAwMTAwQUMwMDJGNDBGMQorOjEwQzI1MDAwMjNCMDAxMDA0QTkwODQ0NTFGMTAwMDAwNEI5MDAwMEE1MworOjEwQzI2MDAwRTBDMTAwMDAwMDAwMDAwQTAyQjAwMTAwNEI5NDAwNDA1MQorOjEwQzI3MDAwMzVCMDAwMDAwMDgwMDAxOTQyQzkwMTAwNTM5MDIyNDBFRgorOjEwQzI4MDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTBCOAorOjEwQzI5MDAwNjJERDAxMDA0RjkwQTg0MDgxMzIwMDAwQUY4MjAwODgyQgorOjEwQzJBMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwNjM5MEEyMDIyQworOjEwQzJCMDAwMUE1MDAwMDA2NDkwMjI0MDJENkMwMDAwMDA4MDAwMTA5NQorOjEwQzJDMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM2QQorOjEwQzJEMDAwRjBCMTAxMDBGRjA3MDAwOEUwOEQwMTAwMDAwMDAwNDJGRQorOjEwQzJFMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwNUE5MEE4NDA0NQorOjEwQzJGMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUwMQorOjEwQzMwMDAwNDhCMTAxMDAyRjAwMjA0N0U3QjUwMTAwMEM4MDAwMDM3MQorOjEwQzMxMDAwNDJDOTAxMDAxMDAwMDBGMDEwQzgwMTAwRjAwNzAwNDAwMQorOjEwQzMyMDAwMUI5ODAxMDA2NDkwMDA1QzExODAwMDAwMDAwMDAwMDI3NgorOjEwQzMzMDAwMTBDMDAxMDBDNjkyMDA0MDFGMDAwMTAwMDAwMDAwMDU2RgorOjEwQzM0MDAwNDhCMTAxMDA2ODkwMjMwRDJDNkMwMDAwMDAwMDAwNDBGMworOjEwQzM1MDAwMUY5MDAxMDA3MTkwMjI0NjFGN0MwMDAwMDAwMDAwNDZFMworOjEwQzM2MDAwMUY4MDAxMDA3MDgwMDAwMzQyQzkwMTAwNzE5MDIyNDBDQgorOjEwQzM3MDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMTBDOAorOjEwQzM4MDAwNjJERDAxMDA2RDkwQTg0MDgxMzIwMDAwQUY4MjAwODgxQworOjEwQzM5MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDgwMDJENDA1RAorOjEwQzNBMDAwODVCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDAwMDAwNDBGNAorOjEwQzNCMDAwMDVCMDAxMDBDRTkzMDA0MTg3MzAwMTAwMDAwMDAwNDUyOAorOjEwQzNDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNzY5MEE4NDBEQworOjEwQzNEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyMAorOjEwQzNFMDAwNDhCMTAxMDA3QzkwMjIwOTgwMzAwMDAwMEI5NTAwNDA4QworOjEwQzNGMDAwMTMzMDAxMDA4MDkwMjI0NDE5N0MwMDAwMEI5NTAwNEZGRgorOjEwQzQwMDAwODEzMDAxMDA4MDkwQTI0NzFGN0MwMDAwMDAwMDAwNDRBMgorOjEwQzQxMDAwMTk4MDAxMDBGRjA3MDAwODAwOEMwMTAwOTU5MDIyNEE1NgorOjEwQzQyMDAwMUY3QzAwMDA4NjkwQTIxNjAyMzAwMDAwQjA5MjAwNDBFRgorOjEwQzQzMDAwODEzMjAxMDAyRjAwMjA0MEU3QjEwMTAwRDU4QTAwNDA4MQorOjEwQzQ0MDAwODFCMjAwMDAyRDAwMkQwODJBQjAwMTAwOTE5MDIyNDJGNworOjEwQzQ1MDAwMTk3QzAwMDA4QTkwQTJGMzg0MzAwMDAwMDAwMDAwQTUzRgorOjEwQzQ2MDAwODVCMDAxMDAwMDAwMDA0MTg1RDAwMTAwRDQwMDNFNDFBQworOjEwQzQ3MDAwODVFMDAxMDA4RTkwMjI0MDFGN0MwMDAwMDAwMDAwNUFFMQorOjEwQzQ4MDAwMTE5MDAxMDAwQjAwMDAwOEU0RjUwMTAwREQ5MzAwNDA2RAorOjEwQzQ5MDAwODEzMjAxMDA5MjkwMDA0MDgxQjIwMDAwQUQ5MzAwNDBEMworOjEwQzRBMDAwODEzMjAxMDAzMDAwMkUwMDJBRDAwMTAwMzIwMDJBMTUwRQorOjEwQzRCMDAwRTRCMTAxMDBENThBMDAxNkU0QjEwMDAwOTg5MEEyMTZGQworOjEwQzRDMDAwMDIzMDAwMDBCMDkyMDA0MDgxMzIwMTAwRTc5MDAwNDA0RAorOjEwQzREMDAwODFCMjAwMDAyRDAwMkQwODJBQjAwMTAwQTY5MDIyNDc0RAorOjEwQzRFMDAwMUY3QzAwMDBBMjkwMjI0MjE5N0MwMDAwOUQ5MEEyRjNDNAorOjEwQzRGMDAwODQzMDAwMDAwMDAwMDBBNTg1QjAwMTAwMDAwMDAwNDE2QworOjEwQzUwMDAwODVEMDAxMDBENDAwM0U0MTg1RTAwMTAwQTE5MDIyNDA4OQorOjEwQzUxMDAwMUY3QzAwMDAwMDAwMDA1QTExOTAwMTAwMEIwMDAwMDg3MQorOjEwQzUyMDAwRTRGNTAxMDA1ODAxMkQwMDJBRDAwMTAwNjAwMTJERjAzMgorOjEwQzUzMDAwMTBCMDAxMDAwMDAwMDBGMDJDQjAwMTAwMzU4RTAwNDA2QQorOjEwQzU0MDAwODFCMjAwMDA5NDk1MDA0MTk1MzAwMTAwQUU5MEEyMDhBMAorOjEwQzU1MDAwODAzMjAwMDBBRTkwQTIxNjgwMzIwMDAwMDAwMDAwNDE0MAorOjEwQzU2MDAwOTdCMDAxMDBBQzkwMjMwRDAyNkMwMDAwMDAwMDAwNDE2OAorOjEwQzU3MDAwOTdDMDAxMDA1RjkzMDA0QjAyQjAwMDAwRTc5MDAwMDVGOAorOjEwQzU4MDAwNDhCMTAwMDBBQzAwMkYwMTE0QjAwMTAwQjAwMDJCMDEzNQorOjEwQzU5MDAwRTBDMTAxMDAwMDJCMDBBNjE2QjAwMTAwMDAwMDAwMDE2MAorOjEwQzVBMDAwRTBEMTAxMDBCRTkwMjMwRDAyNkMwMDAwMDA4MDAwMTA1RAorOjEwQzVCMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM3NworOjEwQzVDMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTA2NAorOjEwQzVEMDAwNjJCMTAxMDBCNzkwQTgwMEUwMzEwMDAwQUY4MjAwODg4RQorOjEwQzVFMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMEM4MDAwMDNGMQorOjEwQzVGMDAwNDJDOTAxMDAxMDAwMDBGMDIyQzgwMTAwMDAwMDAwNUNFOAorOjEwQzYwMDAwMjM4MDAxMDAwMDAwMDAwMTg0QjAwMTAwQzE5MDIzMERDRgorOjEwQzYxMDAwMDI2QzAwMDAwMDAwMDAwRDAyQjAwMTAwMDAwMDAwMDhFNAorOjEwQzYyMDAwODBCMDAxMDBDNjkwMjI0MDFCNkMwMDAwRTM5NDAwMDEyMgorOjEwQzYzMDAwODQ1MDAxMDBDRTkwMjI0MDg1NkMwMDAwMDAwMDAwMDE3MworOjEwQzY0MDAwODBDMDAxMDAxMDgwMDAxMDQ2QzkwMTAwMDAwMDAwNEZBQQorOjEwQzY1MDAwNDM4MTAxMDAwMDAwMDA0MkYwQjEwMTAwMjAwMDAwNDBEMQorOjEwQzY2MDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMDAwMDAwNDMxNQorOjEwQzY3MDAwNjFCMTAxMDBBMDAwMDBBMTYyREQwMTAwQ0M5MEE4MTExMQorOjEwQzY4MDAwRTAzMTAwMDBERDkwMDA1RTE3OTAwMDAwRDE5MDIzMEQ5NgorOjEwQzY5MDAwMDI2QzAwMDAwMDAwMDAwRDAyQjAwMTAwMDAwMDAwMDE2QgorOjEwQzZBMDAwODREMDAxMDBENjkwMjI0MDFCNkMwMDAwMDQ5NTAwNDMwQQorOjEwQzZCMDAwNjEzMTAxMDBERDkwMjI0MDg1NkMwMDAwMDAwMDAwMDEyNgorOjEwQzZDMDAwMTJDMDAxMDAxMDgwMDAxMDQ2QzkwMTAwMDAwMDAwNEY5OAorOjEwQzZEMDAwNDM4MTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAwMDAwMDlBOAorOjEwQzZFMDAwRjBCMTAxMDAwMDAwMDAxOEYwQjEwMTAwQTAwMDAwQTFBRAorOjEwQzZGMDAwNjJERDAxMDBEQjkwQTgxMUUwMzEwMDAwMDAwMDAwNDM4MgorOjEwQzcwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwREU5MEE4MEE2NgorOjEwQzcxMDAwMDIzMDAwMDBBRjgyMDA4ODFDQjAwMDAwQjA5MjAwMDUxQgorOjEwQzcyMDAwNDgzMTAxMDBFNTkwMjMwRDAyNkMwMDAwRkYwNzAwMTE2NQorOjEwQzczMDAwMDA4QzAxMDBCMDkyMDA0MDgxMzIwMTAwRUI5NDAwMDdCMAorOjEwQzc0MDAwMTYxNDAxMDA4Qzk0MDA1RTA1MTAwMTAwMkYwMDIwNDA5QgorOjEwQzc1MDAwRTdCMTAxMDBEQThBMDA0MDgxQjIwMDAwMDA4MDAwMDNFNgorOjEwQzc2MDAwNDJDOTAxMDAwMDAwMDBGODgyQjAwMTAwMDAwMDAwRjg5QQorOjEwQzc3MDAwOENCMDAxMDAwMDAwMDBGMDhFQjAwMTAwOTc5MzAwNDBFMworOjEwQzc4MDAwMTMzMDAxMDAwMDAwMDA0MDg1QjAwMTAwQ0U5MzAwNDE0RAorOjEwQzc5MDAwODczMDAxMDA1MzkzMDA0MDgxMzIwMTAwMDA4MDAwMTA3NworOjEwQzdBMDAwNDJDOTAxMDBGODkwMjI0MEUzNkQwMDAwMDAwMDAwNDVGRQorOjEwQzdCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRjQ5MEE4NDA2QQorOjEwQzdDMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyQworOjEwQzdEMDAwNDhCMTAxMDBGQTkwMjIwOTgwMzAwMDAwMEI5NTAwNDAxQQorOjEwQzdFMDAwMTMzMDAxMDAwMDAwMDAwQjFCQjAwMTAwMDAwMDAwMTUxOQorOjEwQzdGMDAwMUFEMDAxMDAwMTkxQTI0MTE5N0MwMDAwOTQ5NTAwNDBEQgorOjEwQzgwMDAwOTUzMDAxMDAwMDAwMDAxNjgwQjIwMTAwMEE5MTI3MDg0RgorOjEwQzgxMDAwODAzMjAwMDAyNzkwMDAwMDJBQzAwMDAwOTQ5NTAwNDE1QgorOjEwQzgyMDAwOTUzMDAxMDAwMDAwMDAxNjgwQjIwMTAwMDU5MTI3MDgzNAorOjEwQzgzMDAwODAzMjAwMDBBRTkwMDAwMDJBQzAwMDAwMDAwMDAwNDFERAorOjEwQzg0MDAwOTdCMDAxMDAwODkxMjMwRDAyNkMwMDAwMDAwMDAwNDEyOAorOjEwQzg1MDAwOTdDMDAxMDA1RjkzMDA0QjAyQjAwMDAwMDAwMDAwMDU4QworOjEwQzg2MDAwNDhCMTAxMDBENThBMjI0MjE5N0MwMDAwOUE5NDAwM0EwRQorOjEwQzg3MDAwODEzMDAxMDBENThBMDA0MDgxQjIwMDAwMEU5MTAwNEE0QgorOjEwQzg4MDAwMUY5MDAwMDBEODkyMDAwMDEwMzAwMTAwMDAwMDAwMTUzOQorOjEwQzg5MDAwMTBDMDAxMDAwMDAwMDAxMDMyQjAwMTAwMUU5NTAwMDYxQgorOjEwQzhBMDAwMDQzMDAxMDAxNzkxQTI0NDFGN0MwMDAwMDAwMDAwMEIxRgorOjEwQzhCMDAwMUJCMDAxMDAwMDAwMDAwQTJDRDAwMTAwMDAwMDAwMEE5QgorOjEwQzhDMDAwMDJCMDAxMDBCRDkxMDAwMThDMzAwMTAwMDA4MDAwMTkxMAorOjEwQzhEMDAwNDJDOTAxMDAxRTkxMjI0MEUzNkQwMDAwMDAwMDAwNDNBOAorOjEwQzhFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUE5MUE4NDAxMgorOjEwQzhGMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDVGQgorOjEwQzkwMDAwNDhCMTAxMDAwMDAwMDAwMjEwQzAwMTAwMjc5MTIyMDI3RQorOjEwQzkxMDAwMTQ1MDAwMDAwODk0MDA0NTFGMDAwMTAwMTA5MTIyNUM5MworOjEwQzkyMDAwMUY3QzAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBDMgorOjEwQzkzMDAwNjJERDAxMDAyMzkxQTg1QzFGMDAwMDAwQUY4MjAwODgyNworOjEwQzk0MDAwMUNCMDAwMDAxMDkxMDAwNTQ4QjEwMDAwMDgwMDJENDAwNworOjEwQzk1MDAwODVCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDAwMDAwNDAzRQorOjEwQzk2MDAwMDVCMDAxMDBDRTkzMDA0MTg3MzAwMTAwMDAwMDAwNDU3MgorOjEwQzk3MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMkM5MUE4NDA2RgorOjEwQzk4MDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDU2QQorOjEwQzk5MDAwNDhCMTAxMDAzMjkxMjIwOTgwMzAwMDAwMEI5NTAwNDAxRgorOjEwQzlBMDAwMTMzMDAxMDAzNTkxMjI0NDE5N0MwMDAwMEI5NTAwNEY5MworOjEwQzlCMDAwODEzMDAxMDAwMDAwMDA0NDE5ODAwMTAwRkYwNzAwMDhEOQorOjEwQzlDMDAwMDA4QzAxMDA0MzkxMjI0QTFGN0MwMDAwM0I5MUEyMTY3QgorOjEwQzlEMDAwMDIzMDAwMDBCMDkyMDA0MDgxMzIwMTAwMkYwMDIwNDA2MAorOjEwQzlFMDAwRTdCMTAxMDBENThBMDA0MDgxQjIwMDAwMkQwMDJEMDg3QQorOjEwQzlGMDAwMkFCMDAxMDAzRjkxMjI0MjE5N0MwMDAwREQ5MzAwNDBFMworOjEwQ0EwMDAwODEzMjAxMDA0MDkxMDA0MDgxQjIwMDAwQUQ5MzAwNDBBRQorOjEwQ0ExMDAwODEzMjAxMDAzMDAwMkUwMDJBRDAwMTAwMzIwMDJBMTU5OAorOjEwQ0EyMDAwRTRCMTAxMDBENThBMDAxNkU0QjEwMDAwMjM5MEEyMTZGQgorOjEwQ0EzMDAwMDIzMDAwMDBCMDkyMDA0MDgxMzIwMTAwMkYwMDIwNDBGRgorOjEwQ0E0MDAwRTdCMTAxMDBEQThBMDA0MDgxQjIwMDAwRDg5MjAwNEFDMgorOjEwQ0E1MDAwMUYxMDAxMDAzODkwMDAxMDMyQjAwMDAwOEEwMDIwNDAwMgorOjEwQ0E2MDAwRTdCMTAxMDA0RDkxQTI0MTE5N0MwMDAwQjA5MjAwNDA1NQorOjEwQ0E3MDAwODEzMjAxMDA1MDkxMDA0MDgxQjIwMDAwNTg5MzAwMTVBRQorOjEwQ0E4MDAwOTQzMDAxMDA1RjkzMDA0QjAyQjAwMDAwMDAwMDAwMDVFRAorOjEwQ0E5MDAwNDhCMTAxMDA1MjkxMjI0MjE5N0MwMDAwOUE5NDAwM0E1OAorOjEwQ0FBMDAwODEzMDAxMDAwQjk1MDA0NTgxMzAwMTAwRDU4QTAwNDA5RQorOjEwQ0FCMDAwODFCMjAwMDBGNDhFMDA0NTFGOTAwMDAwOUE5MzAwNDA2MAorOjEwQ0FDMDAwODEzMjAxMDA1MzkzMDA0MDgxMzIwMTAwMzg5MDAwMDEwRgorOjEwQ0FEMDAwMkNCMDAwMDBBMjkyMDA0MDgxMzIwMTAwNjU5MUEyMDhCMgorOjEwQ0FFMDAwODAzMjAwMDA2NTkxQTIxNjgwMzIwMDAwMDA4MjAwMDJCMAorOjEwQ0FGMDAwMDREQzAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDExQgorOjEwQ0IwMDAwMDBDMDAxMDA1RTkxMzc1QzYxMzEwMDAwMDAwMDAwMUIzNQorOjEwQ0IxMDAwNjJCMTAxMDA2MjkxMjg0MDgxMzIwMDAwNUY5MTAwNDBDMworOjEwQ0IyMDAwODFCMjAwMDAwMDAwMDAwMDYyQjEwMTAwNjI5MUE4NDBFMworOjEwQ0IzMDAwODEzMjAwMDAxQTg3MTc0MDgxQjIwMDAwNTgwMTIwMDg5NgorOjEwQ0I0MDAwRTBCMTAxMDA2MDAxMjAxNkUwQjEwMTAwOUE5MzAwNDdCNgorOjEwQ0I1MDAwMUYxMDAxMDA1MzkzMDA0MDgxMzIwMTAwMzg5MDAwMDEwMgorOjEwQ0I2MDAwMkNCMDAwMDBBMjkyMDA0NzFGMTAwMTAwNzg5MUEyMDg4QgorOjEwQ0I3MDAwODAzMjAwMDA3ODkxQTIxNjgwMzIwMDAwNzQ5MUEyNDJBNworOjEwQ0I4MDAwMTk3QzAwMDAwMDgyMDAwMjA0REMwMTAwQTA5ODAwNDAzMworOjEwQ0I5MDAwNDc5OTAxMDAzMDA1MDA0MTg5MzAwMTAwNTg5MzAwMTU4NAorOjEwQ0JBMDAwOTQzMDAxMDA1RjkzMDA0QjAyQjAwMDAwMUE4NzAwNDBGMAorOjEwQ0JCMDAwODFCMjAwMDBERDkzMDA0MDgxMzIwMTAwMDAwMDAwNEI5MworOjEwQ0JDMDAwMTk5MDAxMDA5QTk0MDAzQTgxMzAwMTAwMUE4NzAwNDBDMAorOjEwQ0JEMDAwODFCMjAwMDA1ODAxMjAwOEUwQjEwMTAwNjAwMTIwMTY3OAorOjEwQ0JFMDAwRTBCMTAxMDBEODkyMDAxMDMyMzAwMTAwMzg5MDAwNDBDRQorOjEwQ0JGMDAwMTNCMDAwMDBBMjkyMDA0MDgxMzIwMTAwODk5MUEyMDg4NgorOjEwQ0MwMDAwODAzMjAwMDA4OTkxQTIxNjgwMzIwMDAwMDA4MjAwMDI2QQorOjEwQ0MxMDAwMDREQzAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDFGOQorOjEwQ0MyMDAwMDBDMDAxMDA4MjkxMzc1QzYxMzEwMDAwMDAwMDAwMUJGMAorOjEwQ0MzMDAwNjJCMTAxMDA4NjkxMjg0MDgxMzIwMDAwODM5MTAwNDA1QQorOjEwQ0M0MDAwODFCMjAwMDAwMDAwMDAwMDYyQjEwMTAwODY5MUE4NDA5RQorOjEwQ0M1MDAwODEzMjAwMDAxQTg3MTc0MDgxQjIwMDAwMDA4MDAwMDM3MworOjEwQ0M2MDAwNDJDOTAxMDAwMDAwMDBGODgyQjAwMTAwMDAwMDAwRjg5NQorOjEwQ0M3MDAwOENCMDAxMDAwMDAwMDBGMDhFQjAwMTAwOTc5MzAwNDBERQorOjEwQ0M4MDAwMTMzMDAxMDAwMDAwMDA0MDg1QjAwMTAwQ0U5MzAwNDE0OAorOjEwQ0M5MDAwODczMDAxMDA1MzkzMDA0MDgxMzIwMTAwMDA4MDAwMTA3MgorOjEwQ0NBMDAwNDJDOTAxMDA5ODkxMjI0MEUzNkQwMDAwMDAwMDAwNDU1OAorOjEwQ0NCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOTQ5MUE4NDBDNAorOjEwQ0NDMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUyNworOjEwQ0NEMDAwNDhCMTAxMDAzNThFMjIwOTgwMzAwMDAwMEI5NTAwNDBEQworOjEwQ0NFMDAwMTMzMDAxMDAzNThFMDA0MDgxQjIwMDAwMTQwMDJENDU0NAorOjEwQ0NGMDAwMUY5MDAxMDA3RDhFMDA0NDE5OTAwMDAwQTA5MUEyNDE3OAorOjEwQ0QwMDAwMTk3QzAwMDAwMDAwMDA0QTFGOTAwMTAwRTg4RjAwNDBERAorOjEwQ0QxMDAwODFCMjAwMDA5QTkzMDA0QTFGMTAwMTAwNTM5MzAwNDAxMworOjEwQ0QyMDAwODEzMjAxMDAzODkwMDAwMTJDQjAwMDAwRDg5MjAwNDAwMAorOjEwQ0QzMDAwODEzMjAxMDAzODkwMDAxMDMyQjAwMDAwRjQ4RTAwNDVCRQorOjEwQ0Q0MDAwMUY5MDAwMDAwMDAwMDA0MTM3QzMwMTAwMDAwMDAwNDFCNworOjEwQ0Q1MDAwMzNDMzAxMDAzNjAwMDAwMTAyQ0MwMTAwMDAwMEQyNDBDNAorOjEwQ0Q2MDAwODFCMjAwMDBBQzkxODUxNzgwMzIwMDAwMDAwMDlGNDgxRQorOjEwQ0Q3MDAwMDNEMDAwMDBBRTkxOUMxNzgwMzIwMDAwMDAwMDlGNEM1MQorOjEwQ0Q4MDAwMDNEMDAwMDAwMDAwODAwMTM0QzMwMTAwNDA4MDAwMDM5NAorOjEwQ0Q5MDAwNDRDOTAxMDAwMDAwMDA0QUYwQjEwMTAwMDAwMDAwNDA1OQorOjEwQ0RBMDAwRjFCMTAxMDAwMDAwMDAxMkYwQjEwMTAwQjQ5MjAwNDFBNQorOjEwQ0RCMDAwRTEzMTAxMDAwMDgwMDA0MzQ0QzkwMTAwMTAwMDAwNDAzRgorOjEwQ0RDMDAwRjE5OTAxMDAwMDAwMDA0OEYwQjEwMTAwMDAwMDAwNDlBNQorOjEwQ0REMDAwRjBCMTAxMDA0MDAwMDAwM0UwQzkwMTAwMDAwMDAwNDU3RgorOjEwQ0RFMDAwNjFCMTAxMDAwMDAwMDA0MzYyQjEwMTAwMDAwMEE4NDBGMQorOjEwQ0RGMDAwODFCMjAwMDBCQTkxMDA0MDgxQjIwMDAwQkEwMDIwNDAyOAorOjEwQ0UwMDAwRTVCMTAxMDBCMDAwMkYwMThDRDAwMTAwMDAwMDAwNDYwOAorOjEwQ0UxMDAwRTBDMTAxMDBBQzAwMkY0MDEzQjAwMTAwQ0MwMDJEMDE5NworOjEwQ0UyMDAwRTBDMTAxMDBDNDkxOUMxNzgwMzIwMDAwOUQ5NTAwNDAzNAorOjEwQ0UzMDAwODEzMjAxMDBDNjkxMjI0NzE5N0MwMDAwMDAwMDAwNUY4QQorOjEwQ0U0MDAwMTM5MDAxMDA0NDk1MDA0NzE5MTAwMTAwQzAwMDJENDRDMworOjEwQ0U1MDAwMUY5MDAxMDBDNDAwMkRGMDgyQjAwMTAwNzg5NTAwRjAxMQorOjEwQ0U2MDAwODRCMDAwMDA5MDAwMkQwNTQ4QjEwMTAwREI5MUEyNEI3OQorOjEwQ0U3MDAwMUY3QzAwMDAyRTkyQTI0QzFGN0MwMDAwREI5MTFGMUMyNworOjEwQ0U4MDAwRTA2RDAwMDBERTkxQTIwMTgwMzIwMDAwQTgwMDJENDY3NgorOjEwQ0U5MDAwOEZCMDAxMDBENDkxMUYxQ0UwNkQwMDAwQjQwMDAwNDA3MQorOjEwQ0VBMDAwNDM5OTAxMDBENjkxMjJGMDNBNkMwMDAwMkI5MjFGRjBCQQorOjEwQ0VCMDAwM0E2QzAwMDAwMDAwQTI0MDgwQjIwMDAwMDAwMDgwNEZFOQorOjEwQ0VDMDAwOEZCMDAxMDA4QTAwMDA0MDQzOTkwMTAwMkM5MjIwNDI1QgorOjEwQ0VEMDAwRTc2RDAwMDBEQTkxMjI0MDgwMzIwMDAwMDAwMDgwNTlBNgorOjEwQ0VFMDAwOEZCMDAxMDAwMDAwODA1ODhGQjAwMTAwREQ5MTIyNDAxQQorOjEwQ0VGMDAwODAzMjAwMDAwMDAwODA1QzhGQjAwMTAwMDAwMDgwNUI4OQorOjEwQ0YwMDAwOEZCMDAxMDBBQzAwMDA0MDQzOTkwMTAwQjAwMDJERjA0QgorOjEwQ0YxMDAwODRCMDAxMDBFMjkxQTI0MjI0NkMwMDAwRUI5MTIzRjA2NgorOjEwQ0YyMDAwMDI2QzAwMDBFODkxQTJGMDgwMzIwMDAwMkQ5MkEyNDIzMworOjEwQ0YzMDAwMjQ2QzAwMDAyRDkyQTI0MTAzNkMwMDAwRTc5MUEyNDBGNgorOjEwQ0Y0MDAwODAzMjAwMDAwMDAwODA1MThGQjAwMTAwMDAwMDgwNTI0QworOjEwQ0Y1MDAwOEZCMDAxMDAyRDkyMUYxMjg0NTAwMDAwMkQ5MkEwMDE2RAorOjEwQ0Y2MDAwODQ2QzAwMDBEQjkxMDA0MDgxQjIwMDAwOEIwMDAwNDAyNworOjEwQ0Y3MDAwNDM5OTAxMDAxNjkyQTI0NkU3N0QwMDAwMTQwMDAwNDA4QworOjEwQ0Y4MDAwNDM5OTAxMDAwODkyMjJGMDE0MzAwMDAwRjQ5MTIwMEEyNQorOjEwQ0Y5MDAwMDI2QzAwMDAwNTkyMDMxRTgwMzIwMDAwRjM5MUEyNDA1MworOjEwQ0ZBMDAwODAzMjAwMDAwMDAwODA0NDhGQjAwMTAwMDAwMDgwNDkwMgorOjEwQ0ZCMDAwOEZCMDAxMDBGOTkxMjIwQTAyNkMwMDAwRkM5MUEyNDE5RAorOjEwQ0ZDMDAwMTk3QzAwMDBGODkxQTI0MDgwMzIwMDAwMDAwMDgwNTVEQQorOjEwQ0ZEMDAwOEZCMDAxMDAwMDAwODA1NjhGQjAwMTAwRkI5MUEyNDA4RAorOjEwQ0ZFMDAwODAzMjAwMDAwMDAwODA0MzhGQjAwMTAwMDAwMDgwNDhDNAorOjEwQ0ZGMDAwOEZCMDAxMDAwMDAwMDAwMTgyQjAwMTAwMDAwMDAwMEFCMworOjEwRDAwMDAwODJEMDAxMDAwMjkyMjA5MTgzNkMwMDAwMDE5MkEyNDAyNAorOjEwRDAxMDAwODAzMjAwMDAyNjAwODA0MDhGOTgwMTAwMjcwMDgwNDA2OQorOjEwRDAyMDAwOEY5ODAxMDAwNDkyQTI0MDgwMzIwMDAwMUYwMDgwNDBDRgorOjEwRDAzMDAwOEY5ODAxMDAyMDAwODA0MDhGOTgwMTAwMDc5MkEyNDA0NQorOjEwRDA0MDAwODAzMjAwMDAyMjAwODA0MDhGOTgwMTAwMjMwMDgwNDA0MQorOjEwRDA1MDAwOEY5ODAxMDA4ODAwMkQ0NDhGQjAwMTAwMTE5MkEyNDFFOQorOjEwRDA2MDAwMTk3QzAwMDAwRTkyQTI0MzNEN0MwMDAwMEU5MkEyRjJCOQorOjEwRDA3MDAwMDI2QzAwMDAwMDAwQTI0MDgwQjIwMDAwMDAwMDgwNDk2NQorOjEwRDA4MDAwOEZCMDAxMDAxMDkyQTI0MDgwMzIwMDAwMDAwMDgwNDM2NworOjEwRDA5MDAwOEZCMDAxMDAwMDAwODA0ODhGQjAwMTAwMEU5MkEwOTE3NworOjEwRDBBMDAwMDM2QzAwMDAwQzkyMjI0MzNEN0MwMDAwMTU5MkEyNDBDQworOjEwRDBCMDAwODAzMjAwMDAyODAwODA0MDhGOTgwMTAwMjkwMDgwNDBDNQorOjEwRDBDMDAwOEY5ODAxMDAxNDAwMDA0MDQzOTkwMTAwMUY5MkEyRjBDNAorOjEwRDBEMDAwMTQzMDAwMDA4ODAwMkQ0NDhGQjAwMTAwMUM5MkEyRjI5MQorOjEwRDBFMDAwMDI2QzAwMDAwMDAwQTI0MDgwQjIwMDAwMDAwMDgwNDlGNQorOjEwRDBGMDAwOEZCMDAxMDAwRTkyMjI0MTE5N0MwMDAwMEM5MjIwOTEwOQorOjEwRDEwMDAwMDM2QzAwMDAwRTkyMDA0MDgxQjIwMDAwMjM5MjIwMEFCRQorOjEwRDExMDAwMDI2QzAwMDAyMjkyQTI0MDgwMzIwMDAwMDAwMDgwNDQ5NQorOjEwRDEyMDAwOEZCMDAxMDAwMDAwODA0OThGQjAwMTAwMjg5MjIyMEFEMAorOjEwRDEzMDAwMDI2QzAwMDBGQzkxQTI0MTE5N0MwMDAwMjc5MkEyNDBFMQorOjEwRDE0MDAwODAzMjAwMDAwMDAwODA1NThGQjAwMTAwMDAwMDgwNTY0MgorOjEwRDE1MDAwOEZCMDAxMDAyQTkyQTI0MDgwMzIwMDAwMDAwMDgwNDM3QworOjEwRDE2MDAwOEZCMDAxMDAwMDAwODA0ODhGQjAwMTAwMzA5MjAwNDM3MgorOjEwRDE3MDAwOTVCMDAwMDAzMDkyMDA0MTk1QjAwMDAwMzA5MjAwNDIxRQorOjEwRDE4MDAwOTVCMDAwMDAzMDkyMDA0NDk1QjAwMDAwMzA5MjAwNEMwMQorOjEwRDE5MDAwOTVCMDAwMDBFMDk0MDA0MDgxMzIwMTAwMzM5MkEyNDAzQgorOjEwRDFBMDAwODAzMjAwMDAwMDAwODA0QjhGQjAwMTAwMDAwMDgwNENGNgorOjEwRDFCMDAwOEZCMDAxMDAyRDAwMDA0MDQzOTkwMTAwMkUwMDJGRjM5NQorOjEwRDFDMDAwODRCMDAxMDAzODkyQTJGMzk2MzAwMDAwMDAwMDgwNDA0NQorOjEwRDFEMDAwMDFCMDAxMDAyRDAwMkE0MUU3RDEwMTAwRDQwMDNENDFGQQorOjEwRDFFMDAwODVFMDAxMDAwQjAwMDBGMjAwRTQwMTAwM0U5MjIyNUFBQgorOjEwRDFGMDAwMDE3QzAwMDAwMDAwMDA0MDFGOTAwMTAwM0Y5MjAwNUE5NworOjEwRDIwMDAwMDE4MDAwMDAwMDAwMDA0MDFGODAwMTAwMDAwMDYzNDExOQorOjEwRDIxMDAwODVDMDAxMDAwMDAwQTBBNTg1NkMwMTAwMDAwMEUzNDA2RQorOjEwRDIyMDAwODVCMDAxMDAwQzgwMDAwMzQyQzkwMTAwMTIwMDAwNDBEQgorOjEwRDIzMDAwODc5ODAxMDBERjk1MDBGMDhDQjAwMDAwNEM5MjIyNDBFRQorOjEwRDI0MDAwMEY2QzAwMDAwMDAwMkYwNTQ4QjEwMTAwNDk5MkEyNEI2RAorOjEwRDI1MDAwMTk3QzAwMDA0QTkyMjJGMDE4NkMwMDAwMDAwMDYwNEIxQworOjEwRDI2MDAwMTk5MDAxMDAxNjkzMDAwNzEwMzAwMTAwRjk4MjAwNDA2OAorOjEwRDI3MDAwMDVCMDAwMDA0RTkyMjI1QTFGN0MwMDAwOUI5MjAwNDA5NQorOjEwRDI4MDAwODEzMDAxMDBGOTgyMDA0MDA1QjAwMDAwMDAwMDJGMDU0OAorOjEwRDI5MDAwNDhCMTAxMDAwMDAwNjA0QjE5OTAwMTAwMTY5MzAwMDc4RgorOjEwRDJBMDAwMTAzMDAxMDBGOTgyMDA0MDA1QjAwMDAwMDAwMDJGMDU5OQorOjEwRDJCMDAwNDhCMTAxMDAwMDAwNjA0QjE5OTAwMTAwMTY5MzAwMDc2RgorOjEwRDJDMDAwMTAzMDAxMDAwMDAwODA0MDA1QjAwMTAwNTc5MjMzNDA0QgorOjEwRDJEMDAwODEzMjAwMDA1QTkyQTFBRDk1MjAwMDAwNjg5MjEzNDA1RgorOjEwRDJFMDAwODFCMjAwMDAwMDAwMTM0QTVBODMwMTAwMzAwMDM5NDUyMgorOjEwRDJGMDAwOTVFMDAxMDAxRjAwMDAwRjVFRDgwMTAwMDAwMDAwNUFGOQorOjEwRDMwMDAwNUY5MDAxMDAwMDAwMDA0MDQ1QjAwMTAwMDAwMDAwMDRGMworOjEwRDMxMDAwNDhCMDAxMDAwMDAwMDAwNTRBQjAwMTAwMDAwMDAwMEMwOAorOjEwRDMyMDAwNThCMDAxMDAwMDAwMDAwNzRFQjAwMTAwQTg4NDAwNDA4MgorOjEwRDMzMDAwNUQ5ODAxMDAwMDAwMDA1ODYxQjEwMTAwMDAwMDAwNEE0MgorOjEwRDM0MDAwNjJCMTAxMDAwMDAwQTg0MTk3QjAwMDAwNjU5MjAwNDA2MgorOjEwRDM1MDAwODFCMjAwMDAwMDAwODA0MDk3QjAwMTAwNjk5MjYwMDczMAorOjEwRDM2MDAwOTYzMDAwMDBGRkZGMDA0Qjg0ODkwMTAwMDAwMDcwQzI2RQorOjEwRDM3MDAwMjRCMDAxMDA3MzkyQTI0NTI1N0MwMDAwNkQ5MjMxMjBGQgorOjEwRDM4MDAwODUzMDAwMDA3NDkyMjIxMjQ4N0YwMDAwNTgwNDExMTI2OAorOjEwRDM5MDAwNDgwMzAxMDAxMDAwMDAxMjk2RTQwMTAwMDAwMDAwNEI1OQorOjEwRDNBMDAwMUU5NDAxMDAwMDAwODA1QTFGOTAwMTAwNzM5MjMxNDBDQQorOjEwRDNCMDAwODEzMjAwMDAwMDAwMDBCNDI0QjAwMTAwNzQ5MjIyMTJGNworOjEwRDNDMDAwNDg3RjAwMDA1ODA0MDA0MDgxMzIwMTAwMDAwMDJGMDUxMgorOjEwRDNEMDAwNDhCMTAxMDA4MTkyMEJGMDg0MzAwMDAwMDAwMDExMTI2RQorOjEwRDNFMDAwNDg4MzAxMDA3RTkyMjI1MDg1NzAwMDAwNUUwMTAwNDA1QgorOjEwRDNGMDAwNDM5OTAxMDA0MTk0MDBGMjk2MzAwMTAwOTMwNDAwMTIxOQorOjEwRDQwMDAwOTQzMDAxMDAwMDAwMDA1QTFGOTAwMTAwMTAwMDAwMTIyQgorOjEwRDQxMDAwOTZFNDAxMDAwMDAwODA0QjFFOTQwMTAwMTAwMDAwNDJDMQorOjEwRDQyMDAwMTBGNDAxMDAwMEI3M0Y0MzExRjAwMTAwMDcwMDAwMDhBRAorOjEwRDQzMDAwOEE4ODAxMDA4NDkyMzBBMTBDMzAwMDAwODc5MjIyNDUzNgorOjEwRDQ0MDAwRTY3RDAwMDA3NDkyMTA0MDgxQjIwMDAwMDAwMDJBNDU4MQorOjEwRDQ1MDAwRTY5MTAxMDAwMDAwMTAxMjQ4ODMwMTAwMDAwMDExNDAxNQorOjEwRDQ2MDAwODFCMjAxMDAwMDAwNjA0Qjg1ODAwMTAwNUUwMTAwNDAzOAorOjEwRDQ3MDAwNDM5OTAxMDA0MTk0MDBGMjk2MzAwMTAwMDA4MDAwMTBCMQorOjEwRDQ4MDAwNDRDOTAxMDBEODAwMDA0MDgxOTgwMTAwMkUwMDJEMDVGQworOjEwRDQ5MDAwNDhCMTAxMDA5MjkyMjI0MEU3NkQwMDAwODAwMDAwNDBGOAorOjEwRDRBMDAwODBDODAxMDAwMDAwMDA0MEYwQjEwMTAwMDkwMDAwMDg0MAorOjEwRDRCMDAwODZFNDAxMDAwMDAwNjhBNzg3QzAwMTAwMDAwMDAwNDQ2NgorOjEwRDRDMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwOTY5MkE4MDU1MAorOjEwRDREMDAwRTAzMTAwMDAxMDAwMDAxMjk2RTQwMTAwMDAxNDAwNEIzRgorOjEwRDRFMDAwOTZEQzAxMDAwMDAwODA0QjFFOTQwMTAwMTAwMDAwMEYyQworOjEwRDRGMDAwODRGNDAxMDAxRjAwMDA0Mjg0ODgwMTAwOUY5MjIyNDBCMgorOjEwRDUwMDAwODAzMjAwMDBBMDkyMDA0MjY4QjEwMDAwMDAwMDAwNDI5QQorOjEwRDUxMDAwNkFCMTAxMDBBMDkyMzE1QTFGMDAwMDAwMDAwMDkxNDI0MAorOjEwRDUyMDAwNDg5MzAxMDBBMjkyMzU0MDgxMzIwMDAwNkQwMDAwNDAxNgorOjEwRDUzMDAwNjE5OTAxMDBBODkyMjhCMTJDMzAwMDAwQTM5MjIyNERERAorOjEwRDU0MDAwNzU3RDAwMDAwMDAwMDA0MDJEQjAwMTAwMDAwMDk1NDBGNgorOjEwRDU1MDAwMTFCMDAxMDA2RDAwMDA0MDYxOTkwMTAwQTg5MkE4QjFDRQorOjEwRDU2MDAwMTAzMDAwMDAwMDAwOTU0MDgxQjIwMTAwN0YwMDAwNDBCMworOjEwRDU3MDAwNjE5OTAxMDBBRjkyMjhCMTEwMzAwMDAwQUI5MjlGQkFDMAorOjEwRDU4MDAwODAzMjAwMDAwMDAwODA0MDExQjAwMTAwMDAwMDgwMjRDMworOjEwRDU5MDAwMTE4NDAxMDAwMDAwMDA1RjYxQjEwMTAwMDAxMDAwMDA3MworOjEwRDVBMDAwNjJERDAxMDAwMDAwQTg0MDgxQjIwMDAwQjE5MjAwNDA5RAorOjEwRDVCMDAwODFCMjAwMDBBQzk0MDA0MDQ3OTkwMTAwQjU5MjMyNDAxRQorOjEwRDVDMDAwODEzMjAwMDBCQjkyMjJGODk2MzAwMDAwMDAwMDAwRjg4MworOjEwRDVEMDAwOTBCMDAxMDAwMDAwMDBGMDkyQjAwMTAwMDEwMDAwNEI4QgorOjEwRDVFMDAwRjBDRDAxMDAyMDAwOTI0OEUwQzkwMTAwNkMwMDAwNDAyRAorOjEwRDVGMDAwNjE5OTAxMDBCRjkyMjhCMTkyMzAwMDAwQkI5MjIyNEM4OQorOjEwRDYwMDAwNzU3RDAwMDAwNDAwMTI0MDkxQjAwMDAwNkMwMDAwNDBFNQorOjEwRDYxMDAwNjE5OTAxMDBCRjkyQThCMTkwMzAwMDAwRkYwMDAwNDg1RQorOjEwRDYyMDAwOTY4ODAxMDAwMDAwMDA0QjkwRDAwMTAwMDEwMDAwNEJFMworOjEwRDYzMDAwRjBDRDAxMDAyMDAwMDA0OEYwQzkwMTAwMDAwMDkyNDkyRgorOjEwRDY0MDAwRTBCMTAxMDAwQzAwMkQxMDQ4QjEwMTAwRkYwNzAwMDhGNworOjEwRDY1MDAwODI4QzAxMDBGRjA3MDBGMDAwOEMwMTAwMDAwMEEyNDE1NQorOjEwRDY2MDAwMDBFQzAwMDBDQzkyMjIxQTAwNkMwMDAwQjA5MjAwMDA4NgorOjEwRDY3MDAwMzQzMDAxMDAwMDAwMDA1MDQ5QzEwMTAwQzg5MkEyNDFBRAorOjEwRDY4MDAwMjM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMEMwMDJEMTBFQQorOjEwRDY5MDAwNDhCMTAxMDBGRjA3MDAxNTgyOEMwMTAwRkYwNzAwRjA3MAorOjEwRDZBMDAwMDA4QzAxMDAwMDAwQTI0MTAwRUMwMDAwRDU5MjIyMEQ4OAorOjEwRDZCMDAwMDA2QzAwMDBCMDkyMDAwMDFBMzAwMTAwMDAwMDAwNTAyMQorOjEwRDZDMDAwNDlDMTAxMDBEMTkyQTI0MTIzNTAwMDAwMDAwMDgwNDBENgorOjEwRDZEMDAwODFCMjAxMDBEQTkyODMxRTgwMzIwMDAwMDAwMDAwNDQxMworOjEwRDZFMDAwMTk5MDAxMDAyNDAwMkQwMTJDQjAwMTAwMjgwMDJERjAxQworOjEwRDZGMDAwMTZCMDAxMDAyMjAwMkRGMDI2QjAwMTAwMTQwMDJGRjIxOAorOjEwRDcwMDAwMENCMDAxMDAwMDAwODA0MEUxQjEwMTAwMzAwMDAwNDA5OQorOjEwRDcxMDAwOTc5ODAxMDA2MDk3MkU0MDgxQjIwMTAwMDAwMDAwNDAwMAorOjEwRDcyMDAwRjFCMTAxMDBFMTkyQTI0MTk3NTAwMDAwNjQ5NzNFNDM5RAorOjEwRDczMDAwOURFMDAxMDAwMDAwODA0MEUxQjEwMTAwNjQ5NzNFNDM5QworOjEwRDc0MDAwOURFMDAxMDAwMDAwODAwQkU4QjEwMTAwNjQ5NzNGNDNCOQorOjEwRDc1MDAwOURFMDAxMDAwMDAwMDBGMDE2QzAwMTAwMDAwMDgwNDBDNAorOjEwRDc2MDAwRTFCMTAxMDA2NDk3M0Y0MzlERTAwMTAwMDAwMDAwRjQzNworOjEwRDc3MDAwMTZCMDAxMDAwMDAwODA0MEUxQjEwMTAwNjAxNzNENDM5OAorOjEwRDc4MDAwOURFMDAxMDAxMDAwODBBMTE2RTQwMTAwMDBCNTAwMEQyRAorOjEwRDc5MDAwNDJDOTAxMDBGMDkyMzA0NzE3MDQwMDAwRjM5MkEyMEIzNworOjEwRDdBMDAwRTY3RDAwMDAwMDAwOTA0MjgxQjAwMTAwMDBCNzAwMEQ0RQorOjEwRDdCMDAwNDZDOTAxMDBGNzkyQTIwQkU2N0QwMDAwMDAwMDAwMEJCNQorOjEwRDdDMDAwRTY5MTAxMDAwMDAwOTA0MTgxQjAwMTAwMDAwMDEwNDA4RQorOjEwRDdEMDAwODFCMjAxMDBGODkyNDAwNzk2MzAwMDAwOUQwNDAwNDA5RAorOjEwRDdFMDAwODEzMjAxMDAwMjkzQTI0NTk1N0MwMDAwMDE5NzNGNDFFMAorOjEwRDdGMDAwOTVFMDAxMDAwMDAwMDBGMzk2QjAwMTAwMDAwMDAwNEUyQgorOjEwRDgwMDAwRTZCMTAxMDA0MDk3M0U0MDk3RTAwMTAwMDAwMDAwNEU2NQorOjEwRDgxMDAwRTZCMTAxMDA0MDk3M0U0MDlERTAwMTAwMTU5MzAwM0JCQQorOjEwRDgyMDAwRTdCMTAwMDAwMjkzMzA0MDgxMzIwMDAwMEM5M0EyMEI1QworOjEwRDgzMDAwRTY3RDAwMDAwMEI1MDAwRDQ2QzkwMTAwMDg5M0EyMEI2QgorOjEwRDg0MDAwRTY3RDAwMDAwMDAwMTA0MDgxQjIwMTAwMDAwMDk4NDIxNworOjEwRDg1MDAwODFCMDAxMDAwMEI3MDAwRDQ2QzkwMTAwMDAwMDAwMEJCNworOjEwRDg2MDAwRTY5MTAxMDAwMDAwMTA0MDgxQjIwMTAwMDAwMDk4NDFFMworOjEwRDg3MDAwODFCMDAxMDAwNDAwMjFBMjk1MjAwMDAwMDAwMDEwNEFBMAorOjEwRDg4MDAwNDQ4MzAxMDAwMDk3M0U0MTk1RTAwMTAwMDAwMDAwNEVGNgorOjEwRDg5MDAwRjZCMTAxMDAwMDAwMDA0RUU2QjEwMTAwNDA5NzNFNDBBNQorOjEwRDhBMDAwOURFMDAxMDAwMDAwMDAzQkU3QjEwMTAwMDAwMDAwNEFEQworOjEwRDhCMDAwOTBCMTAxMDBGRkZGMDAwNzkyODkwMTAwMDAwMDk4NDAyRAorOjEwRDhDMDAwODFCMDAxMDAwMzAwMDAwODg2RjQwMTAwMDBCNzAwNDNBNgorOjEwRDhEMDAwNDZDOTAxMDAwNzAwMDAwODgyODgwMTAwMTk5MzQwMDgyQQorOjEwRDhFMDAwOTYzMDAwMDA5RDA0MDA0MDgxMzIwMTAwMjU5MzIyNDVCRQorOjEwRDhGMDAwOTU3QzAwMDAyMTkzMjI1QTFGN0MwMDAwMTAwMDAwMEYyRAorOjEwRDkwMDAwOTZGNDAxMDAxRTkzMzE1Rjk3MDQwMDAwMDAwMDExNEI1NAorOjEwRDkxMDAwNDg5MzAxMDAwMDAwMDA0QjZBQjEwMTAwMjE5MzMwNDBBMAorOjEwRDkyMDAwODEzMjAwMDAwMDAwMDA0MUU2ODEwMTAwMDAwMDEwNDA0QgorOjEwRDkzMDAwODFCMjAxMDAwMDAwOTg0MDgxQjIwMTAwMDA5NzNGNDE5MAorOjEwRDk0MDAwOTVFMDAxMDAwMDAwMDBGMzk2QjAwMTAwNDA5NzNENDBEMworOjEwRDk1MDAwOTdFMDAxMDAwMDAwNjNGMzg4QjAwMTAwMkQ5M0EyM0IyMworOjEwRDk2MDAwODk2QzAwMDAwMDAwMDA0QTkwQjEwMTAwMDEwMDAwQTY4RgorOjEwRDk3MDAwOTJCMTAxMDAyRTkzMTg0QTQ0OTMwMDAwMDAwMDE4NDAxMQorOjEwRDk4MDAwODFCMjAxMDAzMDAwMzk0NTk3RTAwMTAwMzM5MzIyNUFGQgorOjEwRDk5MDAwMUY3QzAwMDAxRjA0MDAwRjk4RDgwMTAwMDAwMDAwNENGRAorOjEwRDlBMDAwNUU5NDAxMDAzNTkzMDAwNTRBQjAwMDAwMUYwNDAwQTdGMworOjEwRDlCMDAwNUU4NDAxMDAwMDAwMDA0MDRCQjAwMTAwMDAwMDAwNThGMAorOjEwRDlDMDAwNjFCMTAxMDAwMDAwMDA0QjYyQjEwMTAwMDAwMEE4NDBGRAorOjEwRDlEMDAwODFCMjAwMDAzNjkzMDA0MDgxQjIwMDAwMzk5MzQwMDdDNQorOjEwRDlFMDAwOTYzMDAwMDA5RDA0MDA0MDgxMzIwMTAwM0Q5MzIyNDVBNQorOjEwRDlGMDAwOTU3QzAwMDAwMDAwOTg0MDgxQjIwMTAwOUIwNDAwNEEyMQorOjEwREEwMDAwNDQxMzAxMDAwMDk3M0Y0MTk1RTAwMTAwMDAwMDAwRjMzRQorOjEwREExMDAwOTZCMDAxMDA0MDk3M0Q0MDk3RTAwMTAwMDAwMDYzRjM5RAorOjEwREEyMDAwODhCMDAxMDAzMDAwMzg0NTk3RTAwMTAwMDAwMDAwNUYzOQorOjEwREEzMDAwMEY5MDAxMDAwMDAwMDA1ODYxQjEwMTAwMDAwMDAwNEI5MAorOjEwREE0MDAwNjJCMTAxMDA0NTkzQTg0MDgxMzIwMDAwM0U5M0EyM0JBMQorOjEwREE1MDAwODk2QzAwMDAzMDAwMzg0NTlERTAwMTAwMDAwMDk4NDBDRQorOjEwREE2MDAwODFCMjAxMDA5MzA0MDAxMjk0MzAwMTAwMTY5MzAwNUExMQorOjEwREE3MDAwMUYwMDAxMDAwMDAwODA1QTFGOTAwMTAwMTEwMDAwNEFBMQorOjEwREE4MDAwRTZDOTAxMDAzNDAwMkY0Rjk1ODQwMTAwMDAwMDAwRjMyNworOjEwREE5MDAwOTZCMDAxMDAwMTAwNjM0Qjg0QzgwMTAwMDAwMEEwNDM2MAorOjEwREFBMDAwODU2QzAxMDAwMDAwRTM0MDg1QjAwMTAwMzAwMDJENDQ4QQorOjEwREFCMDAwMUY5MDAxMDAzMjAwMkRGMjJBQjAwMTAwMDQwMDIyRjI3MgorOjEwREFDMDAwMDIzMDAwMDAzNDkyMDAxMDMyMzAwMTAwMzIwMEEwNDBEOQorOjEwREFEMDAwRTVCMTAxMDAwMDAwMDA0MDk3QjAwMTAwRjAwNzAwNDBGMAorOjEwREFFMDAwOTk5ODAxMDAwMDAwMDA0QTAyQzAwMTAwMDAwMDAwNTBBNworOjEwREFGMDAwMDNEMDAxMDAwMDAwMDA0MTk3QzAwMTAwMDAwMEEzNENDQQorOjEwREIwMDAwMDJEMDAwMDA1QzkzMDA0MDgxQjIwMDAwMDAwMDAwQTgzOQorOjEwREIxMDAwMzZCMDAxMDA2QzkzMjI0MTAzNTAwMDAwMDA4MDAwMTBEOQorOjEwREIyMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwNzAwMDAwMDM4MQorOjEwREIzMDAwRjBDOTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTBDNgorOjEwREI0MDAwNjJCMTAxMDA2NTkzQTgwMEUwMzEwMDAwQUY4MjAwODg1NworOjEwREI1MDAwMUNCMDAwMDBCMDkyMDA0MDgxMzIwMTAwN0M4MDAwMDNDNAorOjEwREI2MDAwNDJDOTAxMDAwMDAwMDBGMDAwQjAwMTAwNjA5MzAwNUNCOQorOjEwREI3MDAwMDE4MDAwMDBCMDkyMDA0MDgxMzIwMTAwMDAwMDAwMUJEMworOjEwREI4MDAwMTBCMTAwMDA2ODAxMkQwNjgyQjAwMTAwMDAwMDAwRjIxMworOjEwREI5MDAwODJDMDAxMDAwMDgwMDAwMzQ2QzkwMTAwQUI5MjAwNDAzMgorOjEwREJBMDAwODEzMjAxMDA5MzkzMjI0MDExNkMwMDAwMDAwMDY4MDg0QworOjEwREJCMDAwMzg5NjAxMDBGMDA3MDA0MTgyQ0MwMTAwNzE5M0FBNDEyMAorOjEwREJDMDAwM0I0MDAwMDAwMDAwMDBGODEwQjAwMTAwMDAwMDAwNUNDNQorOjEwREJEMDAwMTE4MDAxMDAwMTAwMDAxRDA0Q0MwMTAwOTI5MzI2NDYzMworOjEwREJFMDAwMjMzMDAwMDAwODAwMDAwMzEyQzgwMTAwNjQwMTIwRjA4NworOjEwREJGMDAwRTBCMTAxMDA5MTkzMjI0MTA1NTAwMDAwMjAwMDAwMDM5NAorOjEwREMwMDAwNDhDOTAxMDAwQzAwMDBGODg2QzgwMTAwMDAwMDIyNDQ0OQorOjEwREMxMDAwRjFCMTAxMDAwMDAwMDA0M0YwQjEwMTAwMDAwMDAwMDk3MworOjEwREMyMDAwRTBCMTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTRDNworOjEwREMzMDAwNjJERDAxMDA4MzkzQTg0NjFGMTAwMDAwOTA5MzIyNDFFQgorOjEwREM0MDAwMDU1MDAwMDA4RTkzQTI0MTIzNTAwMDAwMDAwMDAwQTE2NworOjEwREM1MDAwMUFCMDAxMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA1MgorOjEwREM2MDAwNjJERDAxMDA4OTkzQTg0NjIzMzAwMDAwQUY4MjAwODg1RQorOjEwREM3MDAwMUNCMDAwMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwMERBNgorOjEwREM4MDAwNDJCMTAxMDAwMDAwMDA0NDEzQzAwMTAwN0U5MzAwNTAyNworOjEwREM5MDAwNDlDMTAwMDAwMDAwMDAwNTQ4QjEwMTAwMDQ4MDAwMDNGNAorOjEwRENBMDAwMUFDODAxMDAwMDAwODA0MDgxQjIwMTAwOTI5MzIyNDAxNgorOjEwRENCMDAwM0I2QzAwMDAwMDAwMDBGODAwQjAwMTAwQjA5MjAwNUM3NgorOjEwRENDMDAwMDEwMDAxMDA5MzkzMDA0MTNCRDAwMDAwMDAwMDhENDcwQworOjEwRENEMDAwODAzMjAxMDBCMDAwMkY1RjEzQjAwMTAwMDAwMEUwRjBCRgorOjEwRENFMDAwOENDMDAxMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjg2MAorOjEwRENGMDAwOTRCMDAxMDAwMDAwMDBGODhDQjAwMTAwOUY5MzhDRjhGNAorOjEwREQwMDAwOEUzMDAwMDAwMDAwMDA0NDE5OTAwMTAwMDQwMDIyRjg0OQorOjEwREQxMDAwMTQzMDAwMDAwMDAwMDBGODE2QjAwMTAwMDAwMDAwRjgwOAorOjEwREQyMDAwMjZCMDAxMDAwODAwMkVGODBDQjAwMTAwMEMwMDJBNEFCMQorOjEwREQzMDAwRTBCMTAxMDAyODAwMDAwMEUwQzkwMTAwMTAwMDIwMUIzNAorOjEwREQ0MDAwRTBCMTAxMDBBQzkzMjAwQTBDNkMwMDAwMDAwMDAwRjg2OAorOjEwREQ1MDAwOTRCMDAxMDAwMDAwMDBGODk2QjAwMTAwMjAwMDIwRjAwRgorOjEwREQ2MDAwRTRCMTAxMDAxODAwMjA0QUUwQjEwMTAwMUMwMDIwNEI4MgorOjEwREQ3MDAwRTBCMTAxMDA5NzkzMDA0MDEzQjAwMDAwMkMwMDJENDI0OQorOjEwREQ4MDAwMTk5MDAxMDAyRTAwMkZGMzgyQjAwMTAwMDAwMDAwRjM3MworOjEwREQ5MDAwOTZCMDAxMDBCMjkzQTJBNTk3NkMwMDAwMDAwMDgwNDFFQworOjEwRERBMDAwOTVCMDAxMDBCNTkzQTI0MDk3NkMwMDAwMDAwMDAwNDBDMAorOjEwRERCMDAwODNCMDAxMDAyRDAwMjA0MEU3QjEwMTAwMDAwMDYzNDE2NQorOjEwRERDMDAwOTdDMDAxMDBENDAwM0U0MTgzRTAwMTAwMDAwMDAwNDEwMworOjEwREREMDAwODNDMDAxMDBCQTkzQTBBNTgzNkMwMDAwMDAwMDAwNDAzRQorOjEwRERFMDAwODNCMDAxMDAyQzAwMjA0MUU2QjEwMTAwQkY5MzIyNDAyNgorOjEwRERGMDAwMUY3QzAwMDAwMDA0MDAwMDk4REMwMTAwMEIwMDAwNENCOAorOjEwREUwMDAwRTRGNTAxMDAwMDAwODA0MDFGODAwMTAwMEIwMDgwMDA0RAorOjEwREUxMDAwRTRGNTAxMDBCNDkyMDA0MDgxMzIwMTAwMDQ4MDAwMDM2NworOjEwREUyMDAwNDRDOTAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwNDBDMQorOjEwREUzMDAwRjFCMTAxMDAwMDAwNjA0MTg3QjAwMTAwMDA4MDAwMTBENgorOjEwREU0MDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwNDg4OQorOjEwREU1MDAwRjBCMTAxMDAwMDAwMDA0OUYwQjEwMTAwMDAwMDAwMDMzMgorOjEwREU2MDAwRTBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMTA5OAorOjEwREU3MDAwNjJERDAxMDAwMDAwQTg1RDA1OTAwMDAwQ0I5MzAwNDAyQQorOjEwREU4MDAwODFCMjAwMDBCNDkyMDA0MDgxMzIwMTAwMDA4MDAwMDNBMgorOjEwREU5MDAwNDRDOTAxMDAwMDAwMDA0MUYwQjEwMTAwMDAwMDAwNDI0RgorOjEwREVBMDAwRjBCMTAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwNDNBQQorOjEwREVCMDAwRjBCMTAxMDAwMDgwMDAxMDQ0QzkwMTAwMDAwMDAwNTBEMgorOjEwREVDMDAwRjFCMTAxMDAwMDAwMDA0OEYwQjEwMTAwMDAwMDAwNDk3QworOjEwREVEMDAwRjBCMTAxMDAwMDAwMDAwM0UwQjEwMTAwMDAwMDAwNDVDNgorOjEwREVFMDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4NURBQQorOjEwREVGMDAwMDU5MDAwMDBEQTkzMDA0MDgxQjIwMDAwMkQwMDAwNDA0MAorOjEwREYwMDAwNDM5OTAxMDAyRTAwMkZGMzg0QjAwMTAwMDEwMDYzRjM1OAorOjEwREYxMDAwOTZDODAxMDBFMjkzOUY0MTg1NTAwMDAwMDEwMDAwQTVEMgorOjEwREYyMDAwODVDQzAxMDAyRDAwQTA0MkU2QjEwMTAwNUUwMTJEMDA2QworOjEwREYzMDAwODBCMDAxMDBFNzkzNTI0MzgxNjAwMDAwMDIwMDAwRjJDQworOjEwREY0MDAwODJGNDAxMDBFODkzMDA0MTgwOTQwMDAwMDAwMDAwNUYyQgorOjEwREY1MDAwODE5MDAxMDAwMDAwMDA1RTYxQjEwMTAwMDAwMDAwNDBGRQorOjEwREY2MDAwNjJCMTAxMDAwMDAwQTg0MDk1QjAwMDAwRTk5MzlFQkI5QgorOjEwREY3MDAwODAzMjAwMDBFRTkzQTI0MDFGN0MwMDAwQjA5MjAwNDA2RgorOjEwREY4MDAwODFCMjAwMDAwMDAwODA0MTk1QjAwMTAwMDQwMDAwMTUzRQorOjEwREY5MDAwNDJDOTAxMDAwMDAwMDA1NDJCQzAwMTAwMDAwMDAwRkMzOQorOjEwREZBMDAwMjRCMDAxMDAwMDAwMDBGQzM4QjAwMTAwMDAwMDAwRkVCOQorOjEwREZCMDAwM0NCMDAxMDAwMDAwMDBGRTNBQjAwMTAwMDM5NDlDMTc0MQorOjEwREZDMDAwODAzMjAwMDBGODkzQTI0QTE5N0MwMDAwMDAwMDgwNENDNworOjEwREZEMDAwMUY5MDAxMDAwQzAwMDAxRTk4RjQwMTAwRjc5M0EyNDg2NgorOjEwREZFMDAwOTk2QzAwMDAwMDAwMDAxNTQyQjEwMTAwRjc5M0EyOEE2RAorOjEwREZGMDAwRjE2RDAwMDAwQzAwMDAwMTAyQ0MwMTAwMDAwMDAwRkNFQgorOjEwRTAwMDAwM0VCMDAxMDAwMTAwMDBGNDI4Q0MwMTAwQ0MwMDJEMDUzOQorOjEwRTAxMDAwNDhCMTAxMDAwMjk0MjBGMDNFNkMwMDAwMDAwMDAwNEI2QgorOjEwRTAyMDAwMUY5MDAxMDAwMDAwMDA0QzJCQzAwMTAwQkYwMDJEMDUxNworOjEwRTAzMDAwNDhCMTAxMDAwMDAwODBGMzNBRTAwMTAwMDAwMDJFNEJERgorOjEwRTA0MDAwMTk5MDAxMDAwNzAwMkEwQ0U0QjEwMTAwMDAwMDgwMDRDRgorOjEwRTA1MDAwRTZCMTAxMDAxODAwMDA0MDQzOTkwMTAwMUMwMDJERjBCQQorOjEwRTA2MDAwMTZCMDAxMDAyMDAwMkRGMDI2QjAwMTAwMEMwMDJGRjJBOAorOjEwRTA3MDAwMENCMDAxMDAwMDAwQTIwNjE0RUMwMDAwMEY5NDIyNDUzMQorOjEwRTA4MDAwMUY3QzAwMDAwMDAwQTMwNjJBRUMwMDAwMDAwMDAwRjgzRQorOjEwRTA5MDAwOTRCMDAxMDAwMDAwMDBGMDk2QjAwMTAwMEMwMDJENDA4QgorOjEwRTBBMDAwODFCMjAxMDAwMDAwMkE0Q0UxQzEwMTAwMzAwMDAwMTBFMworOjEwRTBCMDAwNDhDOTAxMDAwQTAwMDA0MEYxOTkwMTAwMTgwMDAwMDU1QworOjEwRTBDMDAwRjBDOTAxMDAwMDAwMDA0QUYwQjEwMTAwMDAwMDAwNEI1RgorOjEwRTBEMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQxMAorOjEwRTBFMDAwNjJERDAxMDAxOTk0QTg1QzFGMTAwMDAwMDAwMDgwMDU4QgorOjEwRTBGMDAwNDhCMTAxMDAwMDAwMkUxMDQ4QjEwMTAwNDAwMDAwMDFBRAorOjEwRTEwMDAwRjBDRDAxMDA0MDAwMDAwM0YwQzkwMTAwNDAwMDAwMDAxNAorOjEwRTExMDAwRTBDOTAxMDAwMDAwMkU1MDQ5QzEwMTAwMDAwMDAwMDZDNgorOjEwRTEyMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwMjM5NDYyNDI0QworOjEwRTEzMDAwNjEzMTAwMDAyMDAwMDAxMDYyREQwMTAwMjQ5NEE4NDAzRAorOjEwRTE0MDAwODEzMjAwMDAxMDAwMDAxMDYyQzkwMTAwMjY5NEE4MDA2RQorOjEwRTE1MDAwRTAzMTAwMDAwMDAwRjI0MDgxQjIwMTAwMDAwMDJFMTAwQQorOjEwRTE2MDAwNDhCMTAxMDA0MDAwMDAwMUYwQ0QwMTAwNDAwMDAwMDM3MworOjEwRTE3MDAwRjBDOTAxMDA0MDAwMDAwMEUwQzkwMTAwMDAwMDJFNTA3RAorOjEwRTE4MDAwNDlDMTAxMDAwMDAwMDAwNkYxQjEwMTAwMDAwMDAwMDNEOAorOjEwRTE5MDAwRjBCMTAxMDAzMDk0NjI0MjYxMzEwMDAwMjAwMDAwMTBCMworOjEwRTFBMDAwNjJERDAxMDAzMTk0QTg0MDgxMzIwMDAwQTAwMDAwQTQ4QgorOjEwRTFCMDAwNjJERDAxMDAzMzk0QTgwMEUwMzEwMDAwMDAwMEYyNDA2RAorOjEwRTFDMDAwODFCMjAxMDAzMDgwMDA0QTQ0QzkwMTAwMDAwMDAwMDYwRAorOjEwRTFEMDAwRjFCMTAxMDBDMEE4M0Q0NjBERTAwMTAwRkY3RjAwQTFBNAorOjEwRTFFMDAwRjA4OTAxMDAwMjAwMDAwOTk2RjQwMTAwMDAwMDAwNDZEOQorOjEwRTFGMDAwOTdFMDAxMDAwMDAwNjBBODk3QzAwMTAwM0Q5NDYzNDJEMQorOjEwRTIwMDAwNjEzMTAwMDAzMDAwMDA0QTYyQzkwMTAwM0U5NEE4NDAxQworOjEwRTIxMDAwODEzMjAwMDAwMDAwRjM0MDgxQjIwMTAwMDA5OTNGNDJDQQorOjEwRTIyMDAwOTdGMDAxMDA0Mjk0NjU0MDgxMzIwMDAwNEE5NDIyRjM0NQorOjEwRTIzMDAwNzQwNjAwMDAzRjAwMDBGMzk0ODgwMTAwMDAwMDAwMDcwRQorOjEwRTI0MDAwRTc4NTAxMDAwMDAwNzU1NTYxQjEwMTAwMDAwMDAwNEEzQQorOjEwRTI1MDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwNDc5NDAwNDA3NAorOjEwRTI2MDAwODFCMjAwMDAwMDAwRjU0MDgxQjIwMTAwMDAwMDAwQTg2QQorOjEwRTI3MDAwMzZCMDAxMDA1QTk0ODI0MTIzNDAwMDAwNEY5NEEyNDREQQorOjEwRTI4MDAwMUY3QzAwMDBCRDkxMDAwMThDMzAwMTAwMjA4MDAwMTAzNworOjEwRTI5MDAwNDJDOTAxMDA1NTk0MjI0MEUzNkQwMDAwMDAwMDAwNDM5NAorOjEwRTJBMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNTI5NEE4NDBGRAorOjEwRTJCMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwNDFFNQorOjEwRTJDMDAwMjNCMDAxMDAwMDAwMDAxMDMyQjAwMTAwNUE5NDIyNDEzNgorOjEwRTJEMDAwMTk3QzAwMDBDNjkyMDA0MzIzMzAwMTAwMDAwMDAwNDE3OQorOjEwRTJFMDAwMjNCMDAxMDA1Qzk0QTMxNTBDNkMwMDAwNUQ5NDAwMDY0MworOjEwRTJGMDAwMDRCMDAwMDAwMDAwMDAxNTA0QjAwMTAwNUY5NDIwMDI4QgorOjEwRTMwMDAwMUE2QzAwMDAwMDAwMDAwRDA0QjAwMTAwMUU5NTAwMDUwRAorOjEwRTMxMDAwNDgzMTAxMDA4OTk0MjIwMjE0NTAwMDAwNjM5NEEyMDI0MworOjEwRTMyMDAwMkE1MDAwMDA4OTk0QTI0NTFGN0MwMDAwNjU5NDIyMDJCNworOjEwRTMzMDAwMEM1MDAwMDA2RTk0MDAwMjE2QzAwMDAwNkQ5NDIyNUMyOAorOjEwRTM0MDAwMUY3QzAwMDAzMDgwMDAxMDQyQzkwMTAwNkQ5NDIyNDAwMworOjEwRTM1MDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBDMworOjEwRTM2MDAwNjJERDAxMDA2OTk0QTg0MDgxMzIwMDAwQUY4MjAwODgxQworOjEwRTM3MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDg5NDAwNUNEQQorOjEwRTM4MDAwMUYwMDAxMDA4OTk0MjIxNTgwMzIwMDAwMDAwMDAwNTAxNworOjEwRTM5MDAwMzNDMDAxMDA4ODk0QTIwMjFBNTAwMDAwN0E5NDIyNDZFOQorOjEwRTNBMDAwMUY3QzAwMDA3MDgwMDAwMzQyQzkwMTAwMDAwMDAwNDY4RAorOjEwRTNCMDAwMUY4MDAxMDA3QTk0MjI0MEUzNkQwMDAwMDAwMDAwNDJCQgorOjEwRTNDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNzY5NEE4NDBCOAorOjEwRTNEMDAwODEzMjAwMDBBRjgyMDA4ODFDQjAwMDAwMDAwMDAwMDUwMAorOjEwRTNFMDAwNDhCMTAxMDAwQzgwMDAwMzQyQzkwMTAwMTAwMDAwRjA5OAorOjEwRTNGMDAwMTBDODAxMDAyRjAwMkY1QzExODAwMTAwMDAwMDAwNDdCMQorOjEwRTQwMDAwRTc5MTAxMDBGMDA3MDA0MDFCOTgwMTAwNEM5NDIwMTU5MworOjEwRTQxMDAwMUE2QzAwMDA3MDAwMDAwMzQ4QzkwMTAwMDAwMDIyNTA3RgorOjEwRTQyMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwRkYwNzAwMDg5NgorOjEwRTQzMDAwRTA4RDAxMDAwMDAwMDA0MjYxQjEwMTAwQTAwMDAwQTRENQorOjEwRTQ0MDAwNjJERDAxMDA4NTk0QTg0NjFGMTAwMDAwNEM5NDAwMDU3MQorOjEwRTQ1MDAwNDhCMTAwMDA0Qzk0MDAwMjEwQzAwMDAwOEI5NEEyNDQwQworOjEwRTQ2MDAwMUY3QzAwMDBCRDkxMDAwMThDMzAwMTAwMDAwMDAwMUJFQQorOjEwRTQ3MDAwMTBCMTAwMDAwMDgwMDAxMDQ0QzkwMTAwMEMwMDAwNDBGMQorOjEwRTQ4MDAwRjE5OTAxMDAxMDAwMDAwOEYwQzkwMTAwMDAwMDAwMTYxOQorOjEwRTQ5MDAwRjBCMTAxMDAxMDAwMDAwM0UwQzkwMTAwMDAwMDAwNDVEOAorOjEwRTRBMDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4NUNFNQorOjEwRTRCMDAwMUY5MDAwMDA5Mjk0MDA0MDgxQjIwMDAwMTcwMDAwRDAyRAorOjEwRTRDMDAwQTJDOTAxMDAwMDAwQTI0MDI3RUMwMDAwMDAwMDAwMjBDQgorOjEwRTREMDAwMDBCMDAxMDBCMDkyMDA0MUEzNDEwMTAwOTY5NDAwNDFCOAorOjEwRTRFMDAwMjdEMDAwMDAxMDAwMDAwNzk2RTQwMTAwMDAwMDAwNEI1OAorOjEwRTRGMDAwODA5NDAxMDAwMDAwMDA1NDYxQjEwMTAwMDA4MDAwNDBFMAorOjEwRTUwMDAwNjJERDAxMDAwMDAwQTg0MDgxQjIwMDAwOUQ5NDAwNDAzRgorOjEwRTUxMDAwODFCMjAwMDBFRjk0MDA0MDJCMzAwMTAwQUMwMDJEMDZDQQorOjEwRTUyMDAwMTZDMDAxMDA5MDAwMkRGMDE2QzQwMTAwQTU5NEEwRjBDMworOjEwRTUzMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwMEUwMDAwQTJCOAorOjEwRTU0MDAwNDRDOTAxMDAwMDAwNkNGMDMwQjAwMTAwQUMwMDJENDA2NworOjEwRTU1MDAwODdCMDAxMDAwMDAwNkNGMDI4QjAwMTAwQUU5NDIyNEFBMAorOjEwRTU2MDAwMTk3QzAwMDAwMDMwMDA0Mzg2QzgwMTAwMDAzMDAwMEIxOQorOjEwRTU3MDAwMTZDODAxMDBBRTk0QTQ0MDgxMzIwMDAwMDAwMDAwNDFBMgorOjEwRTU4MDAwMTdDMDAxMDBDRjk0MjIwNjgwMzIwMDAwQkI5NEEyMDY3RgorOjEwRTU5MDAwMTQ2QzAwMDBCODk0MjI0ODE5N0MwMDAwQjM5NEEwNDE4OAorOjEwRTVBMDAwMTc0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDAwNDFCQQorOjEwRTVCMDAwMzFDMDAxMDA5MDAwMjAxOEUwQjEwMTAwOEIwMDJENDgwRgorOjEwRTVDMDAwMTk4MDAxMDA4QjAwMjA0NUU3OTEwMTAwQkI5NDAwNDBCOQorOjEwRTVEMDAwODc5MDAwMDAwODAwMDA0Mzg2OTgwMTAwQkI5NEEwNDg4MworOjEwRTVFMDAwMTc0MDAwMDAwMDAwMDA0MTE3QzAwMTAwQjAwMDAwNDBDQgorOjEwRTVGMDAwNDM5OTAxMDAxMDUwMDA0M0ZDQzkwMTAwMjY5NTAwMzBFQQorOjEwRTYwMDAwODEzMDAxMDAwMDAwMDA0MEU1QjEwMTAwQzY5NDIyNEFCQgorOjEwRTYxMDAwMTk3QzAwMDAwODAwMDBBMjQ0QzkwMTAwQ0MwMDJEQUIwOQorOjEwRTYyMDAwRjlCMTAxMDAwMDAwMDBBQjE3QzAwMTAwQzU5NEEwRjBEMworOjEwRTYzMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwQ0E5NDY0RjBCNQorOjEwRTY0MDAwODJCMDAwMDBBNDAwMDA0MDQ3OTkwMTAwQ0E5NEEyRjJFMQorOjEwRTY1MDAwODAzMjAwMDAwMDAwMDA0MUU1QjEwMTAwOEMwMDIwMTg2QworOjEwRTY2MDAwRTBCMTAxMDA5MDAwMDA0MDQ1OTkwMTAwMDAwMDYwMDYwMworOjEwRTY3MDAwMzBDMDAxMDAwMDAwODYwQzgwQjIwMDAwQkMwMDJENDZCNgorOjEwRTY4MDAwMTk5MDAxMDBBMDAwQTBGMkU0QjEwMTAwQjAwMDAwNDAyOAorOjEwRTY5MDAwNDM5OTAxMDAxMDUwMDA0M0ZDQzkwMTAwMjY5NTAwMzA0OQorOjEwRTZBMDAwODEzMDAxMDAwMDAwQTI0QTE5RkMwMDAwMDgwMDAwQTIwRAorOjEwRTZCMDAwNDRDOTAxMDBDQzAwMkRBQkY5QjEwMTAwMDAwMDAwQUI1MgorOjEwRTZDMDAwMTdDMDAxMDBEODk0QTBGMDE2NDQwMDAwMDAwMDAwNDFEQgorOjEwRTZEMDAwMTdDMDAxMDAwMDAwRTRGMDgyQjAwMTAwMDA4MDAwMTBDQgorOjEwRTZFMDAwNDRDOTAxMDAwMDAwMDA0MUYwQjEwMTAwMDAwMDAwMDMzNgorOjEwRTZGMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTBDNgorOjEwRTcwMDAwNjJCMTAxMDAwMDAwQTgxQkUwQjEwMDAwREQ5NDAwNDBGMAorOjEwRTcxMDAwODFCMjAwMDAwMEYwMDAwQzdFODkwMTAwMDAwMEE2NENEMAorOjEwRTcyMDAwOTU2MDAxMDAwMDAwODA0QTE4OTQwMTAwMDA4MDAwMTBFQworOjEwRTczMDAwNDRDOTAxMDAwNDAwMjIwMUYwMzEwMDAwMjAwMDAwNDAyMworOjEwRTc0MDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMDAwMDAwNDMxNAorOjEwRTc1MDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4MTU3OQorOjEwRTc2MDAwRTBCMTAwMDBFODk0MDA0MDgxQjIwMDAwMTA4MDAwMDM5NgorOjEwRTc3MDAwNDRDOTAxMDAwMDAwMDAwNkYwQjEwMTAwMDAwMDAwMDFFMgorOjEwRTc4MDAwRjBCMTAxMDAwMDAwRTg1RjE3OTAwMTAwNzAwMDAwNDA0OAorOjEwRTc5MDAwNDM5OTAxMDA3QTAxMkVGRTkyQjAwMTAwOEIwMDJERjYwNAorOjEwRTdBMDAwMTZCMDAxMDBGNTk0MjI0M0U3N0QwMDAwMDAwMDAwNDQwQworOjEwRTdCMDAwNDVDMTAxMDAwNDAwMDBBNjJBQjAwMTAwMjgwMDZFMDYzMQorOjEwRTdDMDAwODJDODAxMDBGOTk0MjI0QTE5N0MwMDAwMDAwMDAwNDIyRQorOjEwRTdEMDAwNDVEMTAxMDAwMDAwNkU0QzgzQzAwMTAwMDAwMDAwNDFFMworOjEwRTdFMDAwOTJDMDAxMDBGQTk0NDMzMDNEMDcwMDAwMDAwMDY2OUU4RAorOjEwRTdGMDAwODNCMDAxMDAwMDAwMUI0MTNEQzMwMTAwMDAwMDAwNDE0NworOjEwRTgwMDAwOTJDMDAxMDAwNjAwMDBBMjQ0QzkwMTAwMTAwMDAwNDlBNgorOjEwRTgxMDAwOThGNDAxMDAwMzk1MjYzMDkzMDQwMDAwMDM5NTkwNEM3MgorOjEwRTgyMDAwOTI0MDAwMDAwMDAwMDA0MTkzQzAwMTAwRkZGRjgwNDlCQQorOjEwRTgzMDAwRUNBOTAxMDAwMDgwMDAxMDQ0QzkwMTAwMDQwMDIyMDE3RAorOjEwRTg0MDAwRjAzMTAwMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMThFNAorOjEwRTg1MDAwRjBCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4MTVFOQorOjEwRTg2MDAwRTBCMTAwMDAwODk1MDA0MDgxQjIwMDAwMTU5NTIyNUZEQworOjEwRTg3MDAwODE3QzAwMDAxNDk1QTI0MDE5N0MwMDAwMDAwMDAwNDAzQgorOjEwRTg4MDAwMTk5MDAxMDAwMDAwMDA1NDYxQjEwMTAwMTAwMDAwMDc2MAorOjEwRTg5MDAwOTZFNDAxMDAwMDAwMDA0Rjk3OTQwMTAwMDAwMDAwNEIzNworOjEwRThBMDAwNjJCMTAxMDAxNDk1Mjg0MDgxMzIwMDAwMTE5NTAwNDBBQQorOjEwRThCMDAwODFCMjAwMDAwMDAwQTIyMTgxODQwMDAwMTg5NUEyNUZBRgorOjEwRThDMDAwODE2QzAwMDAwMDAwQTI0MzE5N0MwMTAwMDAwMDAwNDM5RAorOjEwRThEMDAwMTk5MDAxMDAwMDAwMDA1NDYxQjEwMTAwMTAwMDAwMDcxMAorOjEwRThFMDAwOTZFNDAxMDAwMDAwMDA0MDk2OTQwMTAwMDAwMDAwNEJGNworOjEwRThGMDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwMUI5NTAwNDBGOQorOjEwRTkwMDAwODFCMjAwMDAwMDgwMDAxOTQ0QzkwMTAwMDQwMDIyMDIwNQorOjEwRTkxMDAwRjAzMTAwMDAwMDAwMDAwQkYwQjEwMTAwMDAwMDAwMTMxNgorOjEwRTkyMDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTlCNgorOjEwRTkzMDAwNjJERDAxMDAwMDAwQTgwOEUwQjEwMDAwMjM5NTAwNDA1RQorOjEwRTk0MDAwODFCMjAwMDA3QzAwMkRGMDg0QjAwMTAwMDIwMDAwRjBENAorOjEwRTk1MDAwOThGNDAxMDAyQzk1MjA0Qzg0NkMwMDAwODgwMDAwNDA0NQorOjEwRTk2MDAwNDM5OTAxMDAyQzk1MjBGMjg0NkMwMDAwMDAwMDAwNDBDNworOjEwRTk3MDAwODVCMDAxMDA5ODAwMkQxNDgyQjAwMTAwMDAwMDAwRjA2NQorOjEwRTk4MDAwOThCMDAxMDBBMzAwMkQxNDk4RDAwMTAwMzE5NTIwNENCRgorOjEwRTk5MDAwODQ2QzAwMDAwMDAwMDA0Qzg0QjAwMTAwMDAwMDAwRjMxMworOjEwRTlBMDAwODBFMDAxMDAzNDk1MjM0MDg0NkMwMDAwMDAwMDAwNDBBQQorOjEwRTlCMDAwODRCMDAxMDBEMDAwMjAxNEUwQjEwMTAwOTgwMDI1NDI4RAorOjEwRTlDMDAwODBCMDAxMDAwMDAwNkVGMzgwRjAwMTAwMDAwMEE2NDI1QworOjEwRTlEMDAwODJDMDAwMDAzQTk1QTA0MDE2NDAwMDAwMDAwMDAwNDFBRgorOjEwRTlFMDAwMTdDMDAxMDAwMDAwOUZGMDgyRUMwMDAwOTgwMEEwNDFEOQorOjEwRTlGMDAwRTBCMTAxMDAwMDAwMkUxMDQ4QjEwMTAwQTgwMTAwNDA2NAorOjEwRUEwMDAwRjE5OTAxMDAwMDAwMDAwNUYwQjEwMTAwMDkwMDAwMDdDNAorOjEwRUExMDAwOTZFNDAxMDAwMDAwNjBBNzk3QzAwMTAwMDAwMDAwMTAwQworOjEwRUEyMDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwNDE5NTAwNDBBMQorOjEwRUEzMDAwODFCMjAwMDBBODAwMkQxQzhBQjAwMTAwMDAwMDlGRjBFOAorOjEwRUE0MDAwOEFEMDAwMDAwMDAwQTI0MDhCRUMwMDAwOEEwMDIwNDAyOQorOjEwRUE1MDAwRTdCMTAxMDBCNDAwMDA0MDQ3OTkwMTAwQTQwMDJENDUzMgorOjEwRUE2MDAwRTBEMTAxMDA0RTk1OUMxNzgwMzIwMDAwQkUwMDJGQUIxNAorOjEwRUE3MDAwODNCMDAxMDBBMTk1MDAxNDgyNTAwMTAwNTM5NTAwNDAxRAorOjEwRUE4MDAwODFCMjAwMDA1Mzk1MjJGMjgyMzAwMDAwOEMwMDAwNDBEOQorOjEwRUE5MDAwNDM5OTAxMDA1Mzk1OUYxQ0UwNkQwMDAwQkUwMDAwNDBBQgorOjEwRUFBMDAwNDc5OTAxMDBBMTk1MDA0MDgxMzIwMTAwQTgwMDIwMUM3NworOjEwRUFCMDAwRTBCMTAxMDA5QzAwMkQzMDgxQjAwMTAwODgwMDJERjBGNAorOjEwRUFDMDAwODRCMDAxMDA5NDAwMkRGMjg2QjAwMTAwNjY5NTIzRjAxOQorOjEwRUFEMDAwODQ2QzAwMDA1Qjk1MjM5Mjg3NkMwMDAwQzkwNDAwQTYzQgorOjEwRUFFMDAwOTRCMDAxMDA1RDk1MDA0MDgxQjIwMDAwMjAwMDAwQTZCNgorOjEwRUFGMDAwOTRCMDAxMDA2MDg5MDA0QTk0OTgwMTAwNUQ5NTY4NDBENworOjEwRUIwMDAwODEzMjAwMDAwMDAwMDA0QUIwQjEwMTAwQkYwMDJENDI3OAorOjEwRUIxMDAwQjJCMTAxMDA5MDAwMkRGMzgwRTAwMTAwNjE5NUQ0NDA3NgorOjEwRUIyMDAwODEzMjAwMDAwMDAwNzhEQTg0QzAwMTAwNkI5NTIzNDAzOAorOjEwRUIzMDAwODQ2QzAwMDA5NDAwMjA5REUxQjEwMTAwNkI5NTAwNDBDMQorOjEwRUI0MDAwODRCMDAwMDBCRjAwMkQ0Mzg0QzAwMTAwOTAwMDJERjM2RAorOjEwRUI1MDAwODBFMDAxMDA2Qjk1MjM0MDg0NkMwMDAwOTQwMDIwOURCMAorOjEwRUI2MDAwRTFCMTAxMDAwMDAwMDA0MDg0QjAwMTAwNkY5NUEyRjAwNworOjEwRUI3MDAwMzg2QzAwMDA5QzAwMjA0MkUwQjEwMTAwMDAwMDAwNUYwMgorOjEwRUI4MDAwMTM5NDAxMDAwMDAwODA0NjE5ODAwMTAwOUMwMDIwNDI3RgorOjEwRUI5MDAwRTBCMTAxMDAzNzAwMDA0MDQzOTkwMTAwMDQwMDAwRjM5OAorOjEwRUJBMDAwODBGNDAxMDAwRjAwMDBGMzgyODgwMTAwNzU5NTIzNDE3NQorOjEwRUJCMDAwODA2QzAwMDAwMDAwMDA1RjEzOTQwMTAwMDAwMDg5MENDRAorOjEwRUJDMDAwODBCMjAwMDBCQzAwMDA0MDQzOTkwMTAwQTAwMEEwRjIwOAorOjEwRUJEMDAwRTRCMTAxMDAwMDAwOUY0MTI0RUMwMDAwN0Y5NUE2NDBCNQorOjEwRUJFMDAwODEzMjAwMDAwMDAwOUY0MjM4RUMwMDAwN0Y5NUE2NDA3MworOjEwRUJGMDAwODEzMjAwMDBCNDAwMDA0MDQzOTkwMTAwODE5NUEzRjBFOAorOjEwRUMwMDAwM0E2QzAwMDAwMDAwODA0MDgxQjIwMTAwQjQwMDAwNDA3NgorOjEwRUMxMDAwNDM5OTAxMDA4NTk1MjJGMDNBNkMwMDAwQjQwMDIwMUQ1NAorOjEwRUMyMDAwRTBCMTAxMDA4MDAwMkQ1RjEzOTQwMTAwODU5NTIzRjA3MQorOjEwRUMzMDAwM0E2QzAwMDA4MDAwMjAxREUwQjEwMTAwQzAwMDIwMTJFRAorOjEwRUM0MDAwRTBCMTAxMDBDNDAwQTAxQ0UwQjEwMTAwMDA4MDAwMDM5RAorOjEwRUM1MDAwNDRDOTAxMDAwMDAwMDA0MkUwQjEwMTAwMTIwMDAwNDA4MAorOjEwRUM2MDAwODc5ODAxMDA4RTk1OUY0MTI0NkMwMDAwMDAwMDAwNDFCMAorOjEwRUM3MDAwOENCMDAxMDAwMDAwMDAxMjhDRDAwMTAwOEY5NTAwNDE4MworOjEwRUM4MDAwMjRCMDAwMDAwMDAwMDA0MDhEQjAwMTAwREY5NTAwNDA3RQorOjEwRUM5MDAwODEzMjAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTAxOAorOjEwRUNBMDAwNjJERDAxMDAwMDAwQTg0MDgxQjIwMDAwOTE5NTAwNDBBMworOjEwRUNCMDAwODFCMjAwMDBBMjkyMDA0MDgxMzIwMTAwMDAwMDAwMTZFMworOjEwRUNDMDAwODBCMjAxMDAwMDAwQTcwODgwMzIwMTAwOTk5NUEyNDA5RgorOjEwRUNEMDAwOTU2QzAwMDBCMDkyMDA0MDgxMzIwMTAwMDA4MjAwQTZENQorOjEwRUNFMDAwMDRCMDAxMDAwMDAwMDA0MDJEQjAwMTAwQTA5ODJGNDBBQQorOjEwRUNGMDAwMTFCMDAxMDAzMDA1MDA0MTg5QjAwMDAwMDAwMDlGRjgwQworOjEwRUQwMDAwM0VFQzAwMDAwMDAwOUYxMkUwRUQwMDAwQzgwMDIwQUJDOAorOjEwRUQxMDAwRTFCMTAxMDBDQzAwQTAxRkUwQjEwMTAwQTM5NUEzNUYwOQorOjEwRUQyMDAwRTc2RDAwMDAwMDAwMDA0MUU3QzEwMTAwQTYwMDAwNDBCRgorOjEwRUQzMDAwNDc5OTAxMDBCNzk1MjJGMjg2MzAwMDAwMDMwMDAwNDM5NgorOjEwRUQ0MDAwODRGNDAxMDAwMTAwMDA0MTgwQ0MwMTAwQjgwMDJENDI5NAorOjEwRUQ1MDAwODBEMDAxMDAwMDAwNjI0MDg2QzAwMTAwQUI5NTFGNDNENworOjEwRUQ2MDAwODAzMjAwMDBBQzk1QTI0MDg3NkMwMDAwMDAwMDYyNDEzOAorOjEwRUQ3MDAwODdCMDAxMDBCMDk1OUY0MDgwMzIwMDAwMDAwMDAwNDA0NQorOjEwRUQ4MDAwODVCMDAxMDAwMDAwMDA0MDg0RDAwMTAwMDAwMDAwNDI3NgorOjEwRUQ5MDAwODBCMDAxMDAwMDAwMDBGMjg4QjAwMTAwMDIwMDAwNDREMQorOjEwRURBMDAwODRGNDAxMDBCODAwMkU0MjgwRDAwMTAwMDAwMDYyNDBDRgorOjEwRURCMDAwODhDMDAxMDBCNjk1MUY0NDgwMzIwMDAwQkE5NUEyNDA3OQorOjEwRURDMDAwODk2QzAwMDBCQTk1NjI0MTg5QjAwMDAwMDMwMDYyNDE3RAorOjEwRUREMDAwODZFNDAxMDBCODAwMDA0MDQ1OTkwMTAwMDEwMDYyNDE0RAorOjEwRURFMDAwODhFNDAxMDBBNDAwMjA0MEU1QjEwMTAwQTIwMDIwNDAxOQorOjEwRURGMDAwRTdCMTAxMDBCQzAwMkU0Mzg3RjAwMTAwMDAwMDAwNDQ5MQorOjEwRUUwMDAwODZDMDAxMDBDMDk1MjA0Mzg3NkMwMDAwMDAwMDgwNDM0RAorOjEwRUUxMDAwRTVCMTAxMDA0MDAxMDA0MzgwQ0UwMTAwMDAwMEE0NDNBMQorOjEwRUUyMDAwRTQzMTAxMDA0MDAxRTI0MDg3OTgwMTAwODgwMDJENDQ1MAorOjEwRUUzMDAwODFCMDAxMDA5MDAwMkRGMjJFQjAwMTAwOUMwMDJERjA1OQorOjEwRUU0MDAwODZCMDAxMDA5MDAwMkRGMDgyQjAwMTAwQkEwMDJERjBENAorOjEwRUU1MDAwOThCMDAxMDBDRDk1QTIxMjk4NkMwMDAwQkMwMDJERjI3NAorOjEwRUU2MDAwOThCMDAxMDBDRDk1QTBGMjk4NkMwMDAwMDAwMDAwMTc0QQorOjEwRUU3MDAwODJCMDAxMDA5QzAwMjA0MUUwQjEwMTAwQjQwMDJEMTJERAorOjEwRUU4MDAwODZEMDAxMDBEMDk1QTM0MUUwNkQwMDAwRDE5NTAwRjAzRgorOjEwRUU5MDAwODRCMDAwMDAwMDAwMDA0MTg0QjAwMTAwODAwMDJENDNEOAorOjEwRUVBMDAwODREMDAxMDBENDk1OUY0MjgwMzIwMDAwMDAwMDAwNDBEMQorOjEwRUVCMDAwODVCMDAxMDBENjk1QTM0MjE0NkMwMDAwRDc5NTAwMEFENgorOjEwRUVDMDAwMENCMDAwMDAwMDAwMDA0MjBDQjAwMTAwRDk5NUEwMTc2MgorOjEwRUVEMDAwMEM2QzAwMDAwMDAwODAxNzBDQjAwMTAwREU5NTIyNDA5MQorOjEwRUVFMDAwMEQ2QzAwMDAwMDAwQTAwQTBDRUMwMDAwMDEwMDAwRjAxNgorOjEwRUVGMDAwODJGNDAxMDBERTk1QTA0MTBDNkMwMDAwMDAwMEEyRjAzRAorOjEwRUYwMDAwODAzMjAxMDAwMDAwODA0MDgxQjAwMTAwQjQ5MjAwNDBENgorOjEwRUYxMDAwODEzMjAxMDAwNDgwMDAwMzQ0QzkwMTAwMDAwMDAwNDY2MgorOjEwRUYyMDAwRjBCMTAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDYwNDFCQgorOjEwRUYzMDAwODc5NDAxMDAwMDgwMDAxMDQ0QzkwMTAwMDAwMDAwNTBDNworOjEwRUY0MDAwRjFCMTAxMDAwMDAwMDA0OEYwQjEwMTAwMDAwMDAwNDlFQgorOjEwRUY1MDAwRjBCMTAxMDAwMDAwMDAwM0UwQjEwMTAwMDAwMDAwNDUzNQorOjEwRUY2MDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMDAwMEE4NUQxOQorOjEwRUY3MDAwMDU5MDAwMDBFQTk1MDA0MDgxQjIwMDAwMDAwMDJFNEI5MQorOjEwRUY4MDAwMTk5MDAxMDAwNTAwMkEwQ0U0QjEwMTAwMDAwMDgwMDQ4MgorOjEwRUY5MDAwRTZCMTAxMDBGMDk1NDU0ODYxMzEwMDAwMDAxMDAwMDgxRAorOjEwRUZBMDAwNjJERDAxMDBGNTk1Mjg0MDg3MzAwMDAwRjE5NTIyNDg4OAorOjEwRUZCMDAwNzc3RDAwMDA5NTk0MUQ0Njg3QjAwMDAwRjg5NTIyNUY4QworOjEwRUZDMDAwMTE3QzAwMDAwNDAwMjIxNTYyMzEwMDAwRjY5NUE4NDA3MworOjEwRUZEMDAwODEzMjAwMDAwMDAwOUQ0MDgxQjIwMTAwMDAwMDAwNDAyRAorOjEwRUZFMDAwNDlCMTAxMDAwMDE0MkY0QzgzQjAwMTAwMDAwMDAwNDAyMworOjEwRUZGMDAwRjFCMTAxMDBGQjk1QTI0MTgzNTAwMDAwMDAwMDgwNDA2OAorOjEwRjAwMDAwODFCMjAxMDAwMDAwMDA0MDQ5QjEwMTAwMzAwMDAwNDAyMQorOjEwRjAxMDAwQTE5OTAxMDAwMDAwMDA0MDkzQjAwMTAwMDAwMDAwNDBGMQorOjEwRjAyMDAwMUZCMDAxMDA0RTk2MDA0OTk2MzAwMTAwMDcwMDAwNDlDQworOjEwRjAzMDAwMDZFNDAxMDAwMDM5MDAwMzA2QzgwMTAwMDAwMDAwNDA5QQorOjEwRjA0MDAwMDVCMDAxMDAyMDAwMDBEMEEwQzkwMTAwMDAwMDAwNDE2RgorOjEwRjA1MDAwOTNDMDAxMDAwMjk2QTA1NDkzNkMwMDAwMDAwMDJFMDU5RQorOjEwRjA2MDAwOTdCMDAxMDAwMDgwMDA0MDQ5OTkwMTAwMDAwMDAwNDA3NQorOjEwRjA3MDAwRTFCMTAxMDAwMDAyMDBBMjQ0QzkwMTAwMEI5NkEyNDFDNworOjEwRjA4MDAwOTc1MDAwMDAwMDAwMDAyMDQ5QjMwMTAwNTQ5NjAwNDA1MgorOjEwRjA5MDAwNDkzMTAxMDBERjkyMDA0MDgxMzIwMTAwMDBCNTJFMDhBNQorOjEwRjBBMDAwOTdCMDAxMDAwMDAwMDA0MEYxQjEwMTAwMTI5NkEyNDFBQQorOjEwRjBCMDAwOTc1MDAwMDAxODAwMDA0MDk3OTgwMTAwMDA5NzJFNDBEQworOjEwRjBDMDAwODFCMjAxMDAwMDAwMDA0MEYxQjEwMTAwMTY5NkEyNDE5QQorOjEwRjBEMDAwOTc1MDAwMDAwMDAwMDA0MDQ5QjEwMTAwNDAxODJFMDU4MworOjEwRjBFMDAwOTdCMDAxMDAwMDAwMDA0MEYxQjEwMTAwMUE5NkEyNDE2MgorOjEwRjBGMDAwOTc1MDAwMDA1Nzk1MjA0MEU3QjEwMTAwMzA5NDAwNDA0MAorOjEwRjEwMDAwNDU5OTAxMDA2NDAwMDA0MEU1OTkwMTAwNTY5NTIwNDBCMgorOjEwRjExMDAwRTdCMTAxMDBCODk0MjA0MUU1QjEwMTAwQkE5NDIwNDE2MworOjEwRjEyMDAwRTVCMTAxMDA5ODk0MDA0MDQ1OTkwMTAwMDIwMDAwNDBCQgorOjEwRjEzMDAwOTc5ODAxMDAwMDAwMDA0MEYxQjEwMTAwMjQ5NkEyNDExRgorOjEwRjE0MDAwOTc1MDAwMDAwMDAwMDA0MDk3QjAwMTAwMDAwMDAwNDAxMAorOjEwRjE1MDAwNkZCMTAxMDAwMDAwMDA0QjY4QjEwMTAwMjg5Njg1NDFBNQorOjEwRjE2MDAwOTc0MDAwMDA4MDA0MDA0MDgxMzIwMTAwMDAwMDAwNDAxMAorOjEwRjE3MDAwMzlCMzAxMDAwMDAwMDA0MDM3QjMwMTAwMDAwMDAwNDAzNworOjEwRjE4MDAwMzVCMzAxMDAwMDAwMDA0MDMzQjMwMTAwMDAwMDAwNDAyRgorOjEwRjE5MDAwNDFCMzAxMDAwMDAwMDA0MDNGQjMwMTAwRUUwNTAwNDAxNAorOjEwRjFBMDAwMjU5QjAxMDA0MjAwMDA0MDRCOUIwMTAwMDAwMDAwNDBGNQorOjEwRjFCMDAwMkZCMzAxMDAwMDAwMDA0MDJEQjMwMTAwMDAwMDAwNDAwQgorOjEwRjFDMDAwNDdCMzAxMDAwMDAwMDA0MDQzQjMwMTAwNjAwMDAwNDA2RAorOjEwRjFEMDAwMkI5QjAxMDAwMDAwMDA1NEVGOTMwMTAwMDAwMDAwNTUzQworOjEwRjFFMDAwRjE5MzAxMDBGRkZGMDBBNTNDOEIwMTAwMDAwMDAwMkMwMworOjEwRjFGMDAwNUJCMzAxMDAwMDAwMDAyQzQ1QjMwMTAwMDAwMDAwNDA5QgorOjEwRjIwMDAwNTlCMzAxMDAwMDAwMDA0MDU3QjMwMTAwMDAwMDAwNDA2NgorOjEwRjIxMDAwMjdCMzAxMDAwMDAwMDA0MDUzQjMwMTAwNDQ5NkEyNTAwMAorOjEwRjIyMDAwRkQ3RjAwMDA0NDk2QTI1MUZEN0YwMDAwNDU5NjAwNDBGRQorOjEwRjIzMDAwMURCMzAwMDA1MDQ2MDA0MDFEOUIwMTAwMDBDMDAwQTYwOQorOjEwRjI0MDAwODhCMzAxMDBGRjNGMDBBNjNBQjMwMTAwMDBDMDAwOUQ1MworOjEwRjI1MDAwM0I5QjAxMDBCNDA1MDA0MDIzOUIwMTAwMDAwMDAwNDBERgorOjEwRjI2MDAwNERCMzAxMDAwODBBMDBBNjE0QjMwMTAwMDEwMTAwOEE5MQorOjEwRjI3MDAwMTU5QjAxMDAwMDgwMDBBNjU2QjEwMTAwMDAwMDgwNUVEMQorOjEwRjI4MDAwNTdCNTAxMDAxODAwMDA0QjIwRTQwMTAwMDYwMDAwNEJCOAorOjEwRjI5MDAwOTZFNDAxMDAwMDQzMDA0Qjk2QzgwMTAwMTgwMDAwMTBERQorOjEwRjJBMDAwMjBEQzAxMDAwMDAwMDA0QjIwOTQwMTAwMDAwMDgwNTc4QQorOjEwRjJCMDAwMjE5MDAxMDAwMDk5MkUwQTk3QjAwMTAwMDAwMDAwNDA0MworOjEwRjJDMDAwRjFCMTAxMDA1NTk2QTI0MTk3NTAwMDAwMDAwMzAwNDBBMworOjEwRjJEMDAwOTc5ODAxMDAwMEE5MDA0MDQ1OTkwMTAwMDAwMDAwNDBGNgorOjEwRjJFMDAwRjFCMTAxMDA1OTk2QTI0MTk3NTAwMDAwMzAwMDAwNDA1MgorOjEwRjJGMDAwOTc5ODAxMDAwMDAwMDA1NTYxQjEwMTAwMDAwMDAwNEIyQgorOjEwRjMwMDAwNjJCMTAxMDA1RDk2QTg0MDgxMzIwMDAwNUQ5NkEyNDE4NQorOjEwRjMxMDAwOTc1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDAwMDgwNDA1MgorOjEwRjMyMDAwODFCMjAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwRjMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERgorOjEwRjM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRgorOjEwRjM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRgorOjEwRjM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRgorOjEwRjM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwRjM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwRjM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwRjNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RgorOjEwRjNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RgorOjEwRjNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RgorOjEwRjNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRgorOjEwRjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRgorOjEwRjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwRjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRQorOjEwRjQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRQorOjEwRjQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwRjQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwRjQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwRjQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRQorOjEwRjQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRQorOjEwRjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RQorOjEwRjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwRjQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RQorOjEwRjRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwRjRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwRjRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwRjREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwRjRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRQorOjEwRjRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRQorOjEwRjUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRAorOjEwRjUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwRjUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwRjUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwRjU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRAorOjEwRjU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwRjU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBRAorOjEwRjU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RAorOjEwRjU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RAorOjEwRjU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RAorOjEwRjVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RAorOjEwRjVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RAorOjEwRjVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RAorOjEwRjVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwRjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwRjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRAorOjEwRjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQworOjEwRjYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQworOjEwRjYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQworOjEwRjYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwRjY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwRjY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQworOjEwRjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQworOjEwRjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QworOjEwRjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QworOjEwRjY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwRjZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwRjZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwRjZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QworOjEwRjZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQworOjEwRjZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwRjZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQworOjEwRjcwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQgorOjEwRjcxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwRjcyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwRjczMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQgorOjEwRjc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQgorOjEwRjc1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQgorOjEwRjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwRjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QgorOjEwRjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QgorOjEwRjc5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwRjdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwRjdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwRjdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwRjdEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwRjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwRjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQgorOjEwRjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwQQorOjEwRjgxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQQorOjEwRjgyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwRjgzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwRjg0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwRjg1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwRjg2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQQorOjEwRjg3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5QQorOjEwRjg4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwRjg5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QQorOjEwRjhBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QQorOjEwRjhCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QQorOjEwRjhDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QQorOjEwRjhEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQQorOjEwRjhFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQQorOjEwRjhGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxQQorOjEwRjkwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOQorOjEwRjkxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOQorOjEwRjkyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwRjkzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOQorOjEwRjk0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOQorOjEwRjk1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOQorOjEwRjk2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOQorOjEwRjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OQorOjEwRjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OQorOjEwRjk5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OQorOjEwRjlBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwRjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwRjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OQorOjEwRjlEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOQorOjEwRjlFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwRjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwRkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwOAorOjEwRkExMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGOAorOjEwRkEyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOAorOjEwRkEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwRkE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDOAorOjEwRkE1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwRkE2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwRkE3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5OAorOjEwRkE4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4OAorOjEwRkE5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3OAorOjEwRkFBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwRkFCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OAorOjEwRkFDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0OAorOjEwRkFEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzOAorOjEwRkFFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOAorOjEwRkFGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwRkIwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNworOjEwRkIxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwRkIyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNworOjEwRkIzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENworOjEwRkI0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNworOjEwRkI1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNworOjEwRkI2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNworOjEwRkI3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NworOjEwRkI4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NworOjEwRkI5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NworOjEwRkJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NworOjEwRkJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NworOjEwRkJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NworOjEwRkJEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNworOjEwRkJFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNworOjEwRkJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNworOjEwRkMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwRkMxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwRkMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwRkMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENgorOjEwRkM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNgorOjEwRkM1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNgorOjEwRkM2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNgorOjEwRkM3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NgorOjEwRkM4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NgorOjEwRkM5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NgorOjEwRkNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NgorOjEwRkNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NgorOjEwRkNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NgorOjEwRkNEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNgorOjEwRkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNgorOjEwRkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNgorOjEwRkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNQorOjEwRkQxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNQorOjEwRkQyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwRkQzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwRkQ0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNQorOjEwRkQ1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNQorOjEwRkQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNQorOjEwRkQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NQorOjEwRkQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NQorOjEwRkQ5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NQorOjEwRkRBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NQorOjEwRkRCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NQorOjEwRkRDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NQorOjEwRkREMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNQorOjEwRkRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNQorOjEwRkRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNQorOjEwRkUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwRkUxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwRkUyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwRkUzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwRkU0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDNAorOjEwRkU1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCNAorOjEwRkU2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBNAorOjEwRkU3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5NAorOjEwRkU4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4NAorOjEwRkU5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3NAorOjEwRkVBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwRkVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1NAorOjEwRkVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0NAorOjEwRkVEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzNAorOjEwRkVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyNAorOjEwRkVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwRkYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMworOjEwRkYxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMworOjEwRkYyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMworOjEwRkYzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEMworOjEwRkY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwRkY1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwRkY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwRkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwRkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwRkY5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwRkZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwRkZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwRkZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwRkZEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwRkZFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwRkZGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAwMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAwMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAwMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAwMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAwMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAwMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAwMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAwMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAwMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAwMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAwMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAwMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAwMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAwMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAwMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAwMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAwMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAwMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAwMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAwMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAwMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAwMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAwMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAwMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAwMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAwMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAwMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAwMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAwMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAwMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAwMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAwMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAwMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAwMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAwMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAwMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAwMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAwMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAwMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAwMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAwMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAwMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAwMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAwMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAwMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAwMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAwMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAwMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAwMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAwMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAwMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAwMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAwMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAwMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAwMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAwMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAwMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAwM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAwM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAwM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAwM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAwM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAwM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAwNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAwNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAwNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAwNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAwNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAwNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAwNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAwNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAwNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAwNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAwNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAwNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAwNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAwNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAwNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAwNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAwNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAwNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAwNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAwNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAwNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAwNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAwNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAwNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAwNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAwNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAwNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAwNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAwNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAwNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAwNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAwNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAwNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAwNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAwNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAwNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAwNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAwNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAwNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAwNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAwNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAwNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAwNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAwNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAwNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAwNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAwNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAwNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAwNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAwNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAwNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAwNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAwNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAwNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAwNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAwNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAwNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAwNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAwN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAwN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAwN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAwN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAwN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAwN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAwODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAwODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAwODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAwODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAwODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAwODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAwODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAwODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAwODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAwODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAwOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAwOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAwOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAwOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAwOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAwOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAwOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAwOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAwOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAwOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAwOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAwOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAwOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAwOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAwOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAwOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAwOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAwOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAwOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAwOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAwOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAwOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAwQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAwQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAwQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAwQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAwQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAwQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAwQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAwQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAwQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAwQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAwQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAwQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAwQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAwQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAwQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAwQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAwQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAwQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAwQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAwQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAwQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAwQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAwQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAwQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAwQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAwQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAwQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAwQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAwQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAwQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAwQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAwQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAwQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAwQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAwQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAwQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAwQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAwQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAwQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAwQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAwQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAwQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAwQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAwQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAwQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAwQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAwQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAwQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAwRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAwRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAwRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAwRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAwRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAwRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAwRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAwRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAwRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAwRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAwREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAwREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAwREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAwREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAwREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAwREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAwRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAwRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAwRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAwRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAwRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAwRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAwRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAwRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAwRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAwRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAwRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAwRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAwRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAwRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAwRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAwRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAwRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAwRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAwRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAwRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAwRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAwRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAwRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAwRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAwRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAwRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAwRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAwRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAwRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAwRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAwRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAwRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAxMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAxMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAxMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAxMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAxMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAxMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAxMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAxMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAxMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAxMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAxMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAxMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAxMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAxMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAxMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAxMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAxMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAxMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAxMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAxMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAxMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAxMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAxMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAxMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAxMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAxMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAxMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAxMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAxMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAxMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAxMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAxMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAxMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAxMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAxMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAxMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAxMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAxMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAxMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAxMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAxMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAxMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAxMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAxMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAxMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAxMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAxMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAxMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAxMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAxMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAxMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAxMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAxMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAxMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAxMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAxMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAxMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAxMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAxM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAxM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAxM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAxM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAxM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAxM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAxNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAxNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAxNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAxNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAxNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAxNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAxNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAxNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAxNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAxNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAxNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAxNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAxNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAxNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAxNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAxNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAxNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAxNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAxNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAxNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAxNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAxNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAxNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAxNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAxNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAxNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAxNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAxNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAxNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAxNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAxNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAxNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAxNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAxNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAxNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAxNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAxNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAxNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAxNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAxNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAxNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAxNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAxNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAxNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAxNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAxNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAxNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAxNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAxNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAxNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAxNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAxNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAxNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAxNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAxNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAxNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAxNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAxNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAxN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAxN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAxN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAxN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAxN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAxN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAxODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAxODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAxODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAxODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAxODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAxODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAxODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAxODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAxODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAxODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAxOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAxOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAxOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAxOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAxOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAxOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAxOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAxOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAxOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAxOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAxOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAxOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAxOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAxOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAxOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAxOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAxOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAxOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAxOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAxOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAxOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAxOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAxQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAxQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAxQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAxQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAxQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAxQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAxQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAxQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAxQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAxQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAxQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAxQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAxQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAxQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAxQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAxQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAxQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAxQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAxQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAxQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAxQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAxQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAxQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAxQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAxQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAxQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAxQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAxQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAxQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAxQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAxQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAxQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAxQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAxQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAxQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAxQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAxQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAxQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAxQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAxQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAxQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAxQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAxQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAxQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAxQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAxQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAxQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAxQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAxRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAxRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAxRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAxRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAxRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAxRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAxRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAxRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAxRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAxRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAxREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAxREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAxREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAxREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAxREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAxREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAxRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAxRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAxRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAxRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAxRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAxRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAxRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAxRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAxRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAxRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAxRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAxRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAxRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAxRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAxRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAxRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAxRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAxRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAxRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAxRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAxRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAxRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAxRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAxRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAxRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAxRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAxRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAxRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAxRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAxRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAxRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAxRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAyMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAyMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAyMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAyMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAyMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAyMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAyMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAyMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAyMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAyMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAyMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAyMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAyMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAyMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAyMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAyMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAyMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAyMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAyMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAyMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAyMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAyMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAyMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAyMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAyMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAyMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAyMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAyMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAyMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAyMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAyMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAyMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAyMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAyMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAyMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAyMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAyMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAyMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAyMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAyMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAyMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAyMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAyMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAyMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAyMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAyMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAyMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAyMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAyMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAyMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAyMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAyMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAyMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAyMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAyMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAyMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAyMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAyMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAyM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAyM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAyM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAyM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAyM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAyM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAyNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAyNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAyNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAyNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAyNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAyNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAyNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAyNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAyNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAyNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAyNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAyNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAyNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAyNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAyNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAyNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAyNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAyNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAyNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAyNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAyNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAyNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAyNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAyNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAyNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAyNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAyNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAyNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAyNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAyNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAyNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAyNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAyNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAyNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAyNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAyNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAyNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAyNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAyNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAyNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAyNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAyNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAyNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAyNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAyNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAyNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAyNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAyNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAyNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAyNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAyNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAyNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAyNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAyNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAyNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAyNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAyNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAyNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAyN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAyN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAyN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAyN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAyN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAyN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAyODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAyODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAyODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAyODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAyODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAyODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAyODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAyODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAyODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAyODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAyOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAyOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAyOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAyOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAyOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAyOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAyOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAyOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAyOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAyOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAyOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAyOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAyOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAyOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAyOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAyOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAyOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAyOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAyOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAyOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAyOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAyOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAyQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAyQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAyQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAyQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAyQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAyQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAyQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAyQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAyQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAyQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAyQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAyQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAyQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAyQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAyQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAyQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAyQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAyQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAyQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAyQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAyQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAyQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAyQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAyQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAyQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAyQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAyQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAyQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAyQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAyQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAyQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAyQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAyQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAyQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAyQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAyQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAyQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAyQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAyQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAyQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAyQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAyQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAyQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAyQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAyQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAyQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAyQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAyQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAyRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAyRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAyRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAyRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAyRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAyRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAyRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAyRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAyRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAyRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAyREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAyREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAyREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAyREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAyREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAyREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAyRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAyRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAyRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAyRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAyRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAyRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAyRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAyRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAyRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAyRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAyRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAyRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAyRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAyRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAyRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAyRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAyRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAyRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAyRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAyRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAyRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAyRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAyRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAyRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAyRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAyRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAyRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAyRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAyRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAyRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAyRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAyRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAzMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAzMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAzMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAzMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAzMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAzMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAzMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAzMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAzMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAzMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAzMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAzMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAzMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAzMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAzMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAzMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAzMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAzMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAzMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAzMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAzMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAzMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAzMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAzMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAzMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAzMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAzMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAzMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAzMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAzMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAzMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAzMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAzMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAzMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAzMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAzMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAzMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAzMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAzMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAzMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAzMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAzMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAzMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAzMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAzMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAzMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAzMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAzMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAzMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAzMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAzMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAzMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAzMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAzMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAzMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAzMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAzMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAzMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAzM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAzM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAzM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAzM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAzM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAzM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAzNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAzNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAzNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAzNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAzNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAzNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAzNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAzNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAzNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAzNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAzNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAzNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAzNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAzNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAzNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAzNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAzNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAzNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAzNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAzNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAzNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAzNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAzNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAzNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAzNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAzNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAzNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAzNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAzNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAzNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAzNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAzNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAzNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAzNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAzNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAzNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAzNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAzNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAzNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAzNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAzNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAzNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAzNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAzNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAzNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAzNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAzNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAzNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAzNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAzNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAzNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAzNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAzNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAzNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAzNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAzNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAzNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAzNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAzN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAzN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAzN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAzN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAzN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAzN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAzODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAzODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAzODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAzODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAzODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAzODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAzODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAzODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAzODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAzODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAzOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAzOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAzOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAzOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAzOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAzOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAzOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAzOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAzOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAzOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAzOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAzOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAzOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAzOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAzOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAzOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAzOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAzOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAzOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAzOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAzOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAzOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAzQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAzQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAzQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAzQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAzQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAzQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAzQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAzQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAzQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAzQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAzQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAzQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAzQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAzQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAzQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAzQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAzQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAzQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAzQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAzQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAzQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAzQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAzQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAzQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAzQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAzQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAzQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAzQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAzQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAzQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAzQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAzQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAzQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAzQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAzQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAzQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAzQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAzQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAzQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAzQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAzQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAzQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAzQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAzQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAzQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAzQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAzQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAzQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAzRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAzRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAzRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAzRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAzRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAzRDUwMDA4MUIyMDAwMEFFOUYwMDg4OUFCMDAwMDBBRTlGMDA4ODNDCis6MTAzRDYwMDA5QUIwMDAwMEFFOUYwMDg4OUFCMDAwMDBBRTlGMDA4ODE1Cis6MTAzRDcwMDA5QUIwMDAwMEFFOUYwMDg4OUFCMDAwMDAwMDAwMDA4ODUyCis6MTAzRDgwMDA5QUIwMDEwMEFFOUY0MTQwODEzMjAwMDBCMjlGMjI0MEI0Cis6MTAzRDkwMDA3QjZGMDAwMDAwMDAxOTQwODFCMjAxMDBBRTlGMDA0MDFGCis6MTAzREEwMDA4MUIyMDAwMDAwMDAxOTQxN0JCMzAxMDAwMDAwMDBBNEIzCis6MTAzREIwMDBDNEIzMDEwMDAwMDAwMEExQzZCMzAxMDAwMDAwMkZBMjlGCis6MTAzREMwMDBDOEIzMDEwMDA4MTQwMDQwNDk5OTAxMDBBODlGMDA0REE0Cis6MTAzREQwMDA5QUNDMDEwMEJCOUYyNjQwODEzMjAwMDAwMDAwMDA0Q0JECis6MTAzREUwMDA0OUMxMDEwMEI5OUZBMjQxOUI1MDAwMDBCRjlGODA4MDQ0Cis6MTAzREYwMDA4MDMyMDAwMDAwMDA1MjQ5RkQ5MzAxMDAwMDAwMDA0QTlCCis6MTAzRTAwMDBGRDkzMDEwMEMyOUYwMDQyQ0Q5MzAwMDAwMDAwNTE0QTgzCis6MTAzRTEwMDBGRDkzMDEwMDAwMDAwMDQ5RkQ5MzAxMDBDMjlGMDA0MzkzCis6MTAzRTIwMDBDQjkzMDAwMDAwMDA1MDQwODFCMjAxMDBEMjlGMDA0MEJGCis6MTAzRTMwMDAxOTk5MDEwMDAwMDAwMEYwOUFCMDAxMDAwMDAwMDA0NDUwCis6MTAzRTQwMDA0OUQxMDEwMDAwMDA0MEYwODBCMjAxMDAwMDAwNDE0RDY2Cis6MTAzRTUwMDA4MEIyMDEwMENBOUYwMDQwMTk5OTAxMDAwMDAwNEM0MDQ3Cis6MTAzRTYwMDA4MUIyMDEwMDAwMDAwMDQ0NDlEMTAxMDAwMDAwMDBGMENGCis6MTAzRTcwMDA5QUIwMDEwMDAwMDAwMDREMTBCMTAwMDAwMDAwMDBFMjA3Cis6MTAzRTgwMDA0OUIxMDEwMDAwMDAwMEUzNDNCMTAxMDAwMDAwMDBFNDdCCis6MTAzRTkwMDA0NUIxMDEwMDAwMDAwMDQwN0JCMzAxMDAwMDAwNDg0RjI1Cis6MTAzRUEwMDA0MEIxMDEwMEQyOUYwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAzRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAzRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAzRUQwMDA4MUIyMDAwMDA0MDAwMENCODFDODAxMDBGNDgyMDA0MEUwCis6MTAzRUUwMDBGMjkzMDAwMDQwODIwMDQwODFCMjAwMDA0MDA1MDA0MDkzCis6MTAzRUYwMDA4MUIyMDAwMDE4MDYwMDQwODFCMjAwMDBGNDgyMDA0MDQ4Cis6MTAzRjAwMDA4MUIyMDAwMEFGODIwMDQwODFCMjAwMDAzODgxMDA0MEUxCis6MTAzRjEwMDA4MUIyMDAwMDM2ODEwMDQwODFCMjAwMDBCODgwMDA0MENDCis6MTAzRjIwMDA4MUIyMDAwMDFBODcwMDQwODFCMjAwMDBBRjgyMDA0MEQ5Cis6MTAzRjMwMDA4MUIyMDAwMEY1ODIwMDQwODFCMjAwMDBBQjkyMDA0MEU3Cis6MTAzRjQwMDA4MUIyMDAwMEYwOTUwMDQwODFCMjAwMDA3MzkyMDA0MDAxCis6MTAzRjUwMDA4MUIyMDAwMERGOTUwMDQwODFCMjAwMDA0QTkzMDA0MDJBCis6MTAzRjYwMDA4MUIyMDAwMEVEOTIwMDQwODFCMjAwMDBFNzkyMDA0MDczCis6MTAzRjcwMDA4MUIyMDAwMDlBODIwMDQwODFCMjAwMDAwMDAwODA0MEJGCis6MTAzRjgwMDA4MUIyMDEwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAzRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAzRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAzRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAzRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAzRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAzRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAzRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA0MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MDQ0MDEwMDA4MUIyMDAwMDc5Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvc2xpY29zcy9vYXNpc3JjdnVjb2RlLnN5cy5paGV4IGIvZmlybXdhcmUvc2xpY29zcy9vYXNpc3JjdnVjb2RlLnN5cy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxM2JlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9zbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzLmloZXgKQEAgLTAsMCArMSwxNjIgQEAKKzoxMDAwMDAwMDAwMDIwMDAwNDc3NTAxMDAwNEEwMTMwMTAwMUNCNzVCNEIKKzoxMDAwMTAwMDA5MzAwMEI2NUYwMTAwMUMwMDAwMDAyMDE4M0I3ODNBNTAKKzoxMDAwMjAwMDAwMUNBMjc3MDEwMDFDMDcxRDAxNzAxOEFEN0JGMUZGQjkKKzoxMDAwMzAwMDFDQjM3QkE5QUExRUI0N0IwMTBDMUNCNTdCMEQwNjFDNEUKKzoxMDAwNDAwMDAwMDAzMDY0MDgwQzMxNUE3MDA0MEMzMTVBODAwNDBDRTIKKzoxMDAwNTAwMDMxNEU5MDA0MEMzMTRBQTAwMDA5MjU1NUMwMDQwQzMxRTIKKzoxMDAwNjAwMDUyQjAwMEU5MjQ1NUMwMDRDQ0IzMDAxQzFDRUIyRDAxOTgKKzoxMDAwNzAwMDAwMUMwNjU2MzJENDA4MDc5RDAwMDAxQzdCQjcwMjAwMDYKKzoxMDAwODAwMDEwQTAwRjMxNTQwOTA2NTY1RUMwMDRBMDMwNTQwMzAwN0UKKzoxMDAwOTAwMEFDMzA1NTAzMDBDRDAzM0EwMDFDN0JCNzAyMDAxQzYwNTYKKzoxMDAwQTAwMDhFMzE1NDA5MjkyNTU1MDMwMDgwOEUzMTU0MDk4QzMwMzYKKzoxMDAwQjAwMDkxMDAwNDQ3MUMwMTAwMUNBMDBGMzE1NDA5MDAwMDY0OEEKKzoxMDAwQzAwMDAwMDQ0NzFDNjVDMDA0NDcxQzU1MDMwMDZDMzAwMTAwNDgKKzoxMDAwRDAwMDFDNEQzNDAyMDAxQzdCQjcwMjAwMUNBMDBGMzE1NDA5RDgKKzoxMDAwRTAwMEM4ODMzNzAwMUM4MDAxMDAwMDFDMDAwMDY0MDAwNEEwQ0QKKzoxMDAwRjAwMDBGMzA1NDA5MDAwMDU0QzMwNDdCRkJGMjAwMUNDQzMzQzYKKzoxMDAxMDAwMDBEMDAxQ0I0N0JGRDAzMUM4MDBFMzA1NDA5RTBGQjA1ODAKKzoxMDAxMTAwMDAwMUMwMDAwOEMwMzAwQjMwRjMxNTQwOTAwMDBFQzcwODgKKzoxMDAxMjAwMDA0MDAwMEVDODAwNDAwMDA4QzkzMDA2MTc2OERDMzA0MTEKKzoxMDAxMzAwMEMwOEQzMTU0MDlFMDdCMDBDMDFGQTBGREM1MDEwMENDN0IKKzoxMDAxNDAwMDMzMDUwMDFDRDQwMzAwM0MxQ0Q0RDMxQjAwMUNDMEQzQkIKKzoxMDAxNTAwMDUyMDAxQzAwMDA1QzEzMDQ4RThFMzI1NDA5NUI4MDVFREEKKzoxMDAxNjAwMDEzMDQwMDAwMDAwMDFDMDAwMDk0MDEwMEEwMEYzMTU0OTMKKzoxMDAxNzAwMDA5QTAwRjMxNTQwOUMwMDNGQzdGMUNBMDAxQTAwMTAwOUQKKzoxMDAxODAwMDAwMDBBNDAxMDBBMDBGMzE1NDA5QzAwM0ZDMDMxQ0Y1QkEKKzoxMDAxOTAwMDc3MDEwMDFDMjY3QUU2MDUxQ0EwMEYzMTU0MDlCMzBGMjUKKzoxMDAxQTAwMDMxNTQwOUI1MDIwMjAwMUNBMDBGMzE1NDA5N0E3RTAyQjUKKzoxMDAxQjAwMDAwMUNCNTAyMDIwMDFDNTMwRjMyNTQwOUFGMDMwMTAwQUEKKzoxMDAxQzAwMDFDN0EwRTMyNTQwOUI1MDIwMjAwMUMwMDAwMDIwMDFDMDkKKzoxMDAxRDAwMEEwM0RBQTExMDQwMDAwQUMxMTA0RDREMzUyMDAxQ0I1RjgKKzoxMDAxRTAwMDNFQjIwMTAwMjBGQkZERkYxRjgwMkM2QzAzMDBCOTNBREEKKzoxMDAxRjAwMDlFMDEwMDc1M0IwMjAwMUNBNzFDMDEwMDEwREI4MzE2NEEKKzoxMDAyMDAwMDAwMUNDNzFEMjFDMTA0QjkzQjhEQzEwNDhCMkMwMTAwMEEKKzoxMDAyMTAwMDFDNkIyQzM1QzEwNDAwMDA3ODExMDBDQjJDNzlDMTA0NzMKKzoxMDAyMjAwMEEwMEYzMTU0MDlBMDBGMzE1NDA5NTREMDAyMDAxQzQ5QzkKKzoxMDAyMzAwMDI1QjEwMTAwQUIyQzgxQzEwNEE3MUQ1NTAzMDBDQzMzQUYKKzoxMDAyNDAwMDA5MDAxQ0VCMkQwMTAwMUNFQTI5MDEwMDFDQTAwRjMxNDQKKzoxMDAyNTAwMDU0MDlBRTBGMzE1NDA5QTAwRjMxNTQwOUQ0MDdGQzAzREYKKzoxMDAyNjAwMDFDOTkzQTAyMDAxQ0JCMzgwMjAwMUMwMDM4MDAwMDFDMUMKKzoxMDAyNzAwMDAwMDBGQzAxMDREQjNCN0UwMDFDQzcxRDAxMDAxQzI2QTYKKzoxMDAyODAwMDdBRkEwNTFDMjcxRDAxMDAxQ0IzMEYzMTU0MDk3QTBFQTAKKzoxMDAyOTAwMDMyNTQwOTUzMEYzMjU0MDk3QTBFMzI1NDA5NTMwRjMyMzMKKzoxMDAyQTAwMDU0MDk3QTBFMzI1NDA5NTMwRjMyNTQwOUEwMEYzMTU0QjUKKzoxMDAyQjAwMDA5N0EwNjAyMDAxQzUzMEYzMjU0MDlBRjAzMDEwMDFDRDcKKzoxMDAyQzAwMDdBMEUzMjU0MDk1MzBGMzI1NDA5N0EwRTMyNTQwOTUzQkMKKzoxMDAyRDAwMDBGMzI1NDA5N0EwRTMyNTQwOTUzMEYzMjU0MDk3QTBFRjAKKzoxMDAyRTAwMDMyNTQwOTAwM0QwMjAwMUMwMDAwNTgxMjAwQ0IyQzAxQzIKKzoxMDAyRjAwMDAwMUM3NTNCMDIwMDFDQTcxQzAxMDAxMENCMkYwNTAwNDEKKzoxMDAzMDAwMDFDNjAyQzAwMDAxQ0M3MUNDOTAyMDBBMDBGMzE1NDA5M0UKKzoxMDAzMTAwMDUzMDcwMjAwMUM0NjdBQ0EwNTFDN0EwRTMyNTQwOTQwNjMKKzoxMDAzMjAwMEZBMTkwMDFDMDAwMDg4MDIwNDQ2N0FDQTA1MUNBMDBGQjYKKzoxMDAzMzAwMDMxNTQwOUEwMEYzMTU0MDlBMDBGMzE1NDA5QTAwRjMxRDUKKzoxMDAzNDAwMDU0MDlCMzdCMDFDMDFGNzQwRTMwNTQwOUMwMDM5QzAwRDQKKzoxMDAzNTAwMDFDODAwMEQ4MDIwMDAwMDBEODAyMDQwMDAwQUMxMjA1ODYKKzoxMDAzNjAwMDA3MUQwMTAwMUNENEQzMkIwMDFDRDREMzUyMDAxQzgwQzkKKzoxMDAzNzAwMDc2N0QxMzA0MDAwMEUwMDIwMEE2N0I5NTAzMTBDNzlDNjUKKzoxMDAzODAwMDAwMDAxQzgwMkMwMDAwMUMwMDAwNkMwMjA0MDAwMDU0QzMKKzoxMDAzOTAwMEMzMDRBQjJERDkxMjA1MDcxREI1QzIwNDhCMkQwMTAwNzYKKzoxMDAzQTAwMDFDNjkyNTAxMDAxQ0E2N0I5NTAzMTBDQjJGMDkwMDFDOUUKKzoxMDAzQjAwMDYwMkMwMDAwMUMwMDAwNDgwMzAwNTMwRjMyNTQwOTQ2MTMKKzoxMDAzQzAwMDdBQ0EwNTFDN0EwRTMyNTQwOTQwRkExOTAwMUMwMDAwNDIKKzoxMDAzRDAwMDEwMDMwNDQ2N0FDQTA1MUNCNTBGMzE1NDA5QTAwRjMxMjkKKzoxMDAzRTAwMDU0MDk3M0VDMkEwMzA0NjAyQzAwMDAxQzAwMDAyODAzNEQKKzoxMDAzRjAwMDAwQzcxQzAxMDAxQzAwMDAyODEzMDUwNzFEMDEwMDFDN0MKKzoxMDA0MDAwMEMwRDcyMjAwMUM3NTU2N0UxMzA0NjAyQzAwMDAxQ0U3MjgKKzoxMDA0MTAwMDFDNDUwMzA0RTc5QzAwMDAxQ0E2N0I5NTAzMTA4MDJDNjAKKzoxMDA0MjAwMDAwMDAxQzAwMDBGODAyMDQwMDAwNTRDMzA0Qjk3QjAxNjIKKzoxMDA0MzAwMDAwMUMwMDAwOENDMzA0Q0JBRkZDMDcxQ0NCMkYwMTA0QjUKKzoxMDA0NDAwMDFDQzc5RjgwMDMxQzAwMDA4Q0MzMDRDQkFGRkMwNzFDOUYKKzoxMDA0NTAwMENCMkYwRDA0MUNDNzlGODAwMzFDMDAwMDhDQzMwNENCNTIKKzoxMDA0NjAwMEFGMDBGODFEQ0IyRjAxMDAxREE2N0I5NTAzMUNDNzlDNzgKKzoxMDA0NzAwMDhDQzMwNDAwMDA4QzEzMDUwNzFEMDEwMDFDQzAxRERDOEIKKzoxMDA0ODAwMEQzMDgyNzlERTQwMzAwQTBFRTQ2RDQwMEZCNzUwOTE0QjEKKzoxMDA0OTAwMDA0MjA3QjA2MDAxQ0MwMUMxQzA0MDAwMDAwQjBEMzA4MTQKKzoxMDA0QTAwMDAwMDAwMEY0MDBDMEVGRjIwMDFDMjAyNTVDMTQwNDYwODIKKzoxMDA0QjAwMEI3RDIwMzAwMDAwMDBDMTUwMENDQjNGQzAzMUNDQzMzRjYKKzoxMDA0QzAwMDA1MDIxQzAwMDAwQ0M1MDQ2MEI3MEUwNTA0MDAwMDBDRkEKKzoxMDA0RDAwMDE1MDQwMDAwNUNDNDA0QzAxRDk4RjMwNDAwMDA2OEM0NDcKKzoxMDA0RTAwMDA0MDc5RDAwMDAxQzFCNzRGREYzMDRBNjdCRjEwMzFDOTQKKzoxMDA0RjAwMEEwMEY2OTU0MDlFMDdCMDBGQzFGMzk3RjAyMDAxQzA3MzQKKzoxMDA1MDAwMDFEOURDMzA0QTY3QkFEMDMxQzAwMDA2OEM0MDRFMDFDNTEKKzoxMDA1MTAwMDAwMDAxQzAwMDBBNDAzMDRDQkFGMDBGODFEQ0IyRjAxOEEKKzoxMDA1MjAwMDEwMUQwMDAwQUNDMzA0MDAwMEFDMDMwNENCQUYwMEY4MDYKKzoxMDA1MzAwMDFEQ0IyRjAxMTgxREM3OUYwMDBCMUMwMDAwQUNDMzA0NkUKKzoxMDA1NDAwMEZCNzUwMTAwMUMwNzFEMDEwMDFDQ0NCM0ZDMDMxQ0NDNzcKKzoxMDA1NTAwMDMzMDEwMjFDMDAwMEFDQzMwNEEwMUMwMDAwMUNBMEVFNzAKKzoxMDA1NjAwMEEyMDMwNENCQUZGQzA3MUNDQjJGMDkwNDFDRkI3NTAxQjUKKzoxMDA1NzAwMDAwMUMwMDAwQUNDMzA0Q0NCM0ZDMDMxQ0NDMzMwMTAyNTAKKzoxMDA1ODAwMDFDMDAwMDBDQzUwNDAwMDA3ODM0MDVDQ0IzRkMwMzFDMkYKKzoxMDA1OTAwMENDMzMxNTAyMUM0NzlENTRDNDA0MDAwMDc4NDQwMDgwRUQKKzoxMDA1QTAwMDFEN0M1NDA0ODcxRDhEMDQwMENFNzYwMTAwMUNFRjc2NUYKKzoxMDA1QjAwMDlEQzQwNEE0Nzc4RDI0MDlFNDc2MDEwMDFDQzQ3NjAxNEYKKzoxMDA1QzAwMDAwMUMwMDAwOTg1NDA0RDc3NjAxNTAxOEY2NzYwMTAwRkMKKzoxMDA1RDAwMDFDMDAwMDAwMzAxODAwMDAwMDAwMTBDQzMwNDVDNTA0OUQKKzoxMDA1RTAwMEVCMkQwMTAwMUNFQTI5MDEwMDFDQzA1OTAxMDAxQ0Y1N0IKKzoxMDA1RjAwMDc3MjlDNTA0RTAzMERDMDQwMDAwNENCMDA0MDAyMDRDMzYKKzoxMDA2MDAwMEY0MDQwMDAwMDBFODA0MDBDQ0IzRkMwMzFDQ0MzMzA5NjQKKzoxMDA2MTAwMDAyMUNFQjJEQjVDNDA0Q0NCM0ZDMDMxQ0NDMzMxOTAyNzMKKzoxMDA2MjAwMDFDRUIyREI1QzQwNENDQjNGQzAzMUNDQzMzMEQwMjFDNTUKKzoxMDA2MzAwMEVCMkRCNUM0MDRDQ0IzRkMwMzFDQ0MzMzExMDIxQ0VCNzIKKzoxMDA2NDAwMDJEQjVDNDA0MDA3QjAwODAxQ0FFNzc0NTA1MDAwMDAwN0EKKzoxMDA2NTAwMDA0QzAwNEQzOEIwMEZDMUY2MDdBM0MwMDFDNjA0Q0MwQkIKKzoxMDA2NjAwMDA0MDBDMDJGMjAwNTFGRTAzMEIwMDQwMDgwMjVCMDA0MzYKKzoxMDA2NzAwMDAwQjU1QkIxMDQwNDY5MjYwMTAwMUM2QTJCMDEwMDFDNTMKKzoxMDA2ODAwMDgwMUQwMDAwMUNBOTI1NDUwNTAwRUUzMDAwMDAxQ0FGQjAKKzoxMDA2OTAwMDc3MDEwNTAwMDAwMEFDMjQwNEI0NUYwMTQwMTgwNzlERjkKKzoxMDA2QTAwMDQ4NTUwNEI3NzYwMTAwMUM5Njc2MDEwMDFDNDcxRDAxRDEKKzoxMDA2QjAwMDAwMUNBNDMzMDE2MDE4QTQyRjAxNjAxODY0NzcwMTYwNDYKKzoxMDA2QzAwMDE4MjQ3NzAxNjAxODQ0NzcwMTAwMUM2NDg4MDMwMDFDMUIKKzoxMDA2RDAwMEE0M0YwMTAwMUNBNDNCMDEwMDFDNTM3QjAwQzAxQ0QzQTEKKzoxMDA2RTAwMENGMUIwMDFDNTM0RjAyMDAxQ0RBQ0YwMEMwMUZENTU3OTAKKzoxMDA2RjAwMDBGMDAxQ0QzRDMzNzAwMUNENDUzMEYwMDFDRTAyOTAwN0IKKzoxMDA3MDAwMDAwMUNGNUQ1QjAwNTAwMDAwMDlDNTUwNDc3NTYwMTAwOEIKKzoxMDA3MTAwMDFDNTY1MzAxMDAxQzAwMDAwMDEwMTgwMDAwMDRDMDA0MDcKKzoxMDA3MjAwMEY1NTUwMTAwMUMwMDAwQjQ1NTA0Nzc1NjAxMDAxQzU2MTUKKzoxMDA3MzAwMDUzMDEwMDFDMDAwMDAwMTAxODAwMDAwNEMwMDRDQjJGNUYKKzoxMDA3NDAwMDAxMTgxMENCMkYwMTEwMTBDQjJGMDEwODEwQ0IyRjAxNTcKKzoxMDA3NTAwMDA4MTBDQjJGMDEyMDEwQ0IyRjAxMjgxMENCMkYwMTAwMjgKKzoxMDA3NjAwMDEwODkyNTYxQzIwNDAwMDBFQ0MyMDQwMDAwNTRDMzA0RDcKKzoxMDA3NzAwMDAwMDA1NEMzMDQwMDAwNTRDMzA0MDAwMDYwQzIwNDAwMUQKKzoxMDA3ODAwMDAwRUNDMjA0MDAwMDU0QzMwNDAwMDA1NEMzMDQwMDAwODEKKzoxMDA3OTAwMDU0QzMwNDQwMUM2Q0MwMDQ0MDFDOUNDMDA0QTc3NzU1ODMKKzoxMDA3QTAwMEMzMDQwMDAwQzRDMDA0MjcxREYxQzAwNDAwMDA1NEMzRUEKKzoxMDA3QjAwMDA0MDAwMDU0QzMwNDAwMDA1NEMzMDQwMDAwMkNDNjA0MDkKKzoxMDA3QzAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwNDcKKzoxMDA3RDAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMzcKKzoxMDA3RTAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDRkIKKzoxMDA3RjAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2NTEKKzoxMDA4MDAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDIKKzoxMDA4MTAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwRjYKKzoxMDA4MjAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwRTYKKzoxMDA4MzAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQUEKKzoxMDA4NDAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDAKKzoxMDA4NTAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0QjIKKzoxMDA4NjAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwQTYKKzoxMDA4NzAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwOTYKKzoxMDA4ODAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDNUEKKzoxMDA4OTAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2QjAKKzoxMDA4QTAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0NjIKKzoxMDA4QjAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwNTYKKzoxMDA4QzAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwNDYKKzoxMDA4RDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDMEEKKzoxMDA4RTAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2NjAKKzoxMDA4RjAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MTIKKzoxMDA5MDAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDUKKzoxMDA5MTAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwRjUKKzoxMDA5MjAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQjkKKzoxMDA5MzAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MEYKKzoxMDA5NDAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0QzEKKzoxMDA5NTAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwQjUKKzoxMDA5NjAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwQTUKKzoxMDA5NzAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDNjkKKzoxMDA5ODAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2QkYKKzoxMDA5OTAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0NzEKKzoxMDA5QTAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwNjUKKzoxMDA5QjAwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwNTUKKzoxMDA5QzAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDMTkKKzoxMDA5RDAwMEM2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2NkYKKzoxMDA5RTAwMDA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MjEKKzoxMDA5RjAwMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMTUKKzowNDBBMDAwMDAwMkNDNjA0RkMKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9zeGcvc2FoYXJhZGJnZG93bmxvYWRCLnN5cy5paGV4IGIvZmlybXdhcmUvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkQi5zeXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzAxNmQzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkQi5zeXMuaWhleApAQCAtMCwwICsxLDM5MzcgQEAKKzoxMDAwMDAwMDAyMDAwMDAwRENGNTAwMDAwQzAwMDAwMDAwMDAwMDAwMTEKKzoxMDAwMTAwMEZGMUYwMDAwMDEwMDAwMDAwMDAwMDA4ODgyNEQyOTNBMDcKKzoxMDAwMjAwMDAwMDAwNDA0MDAwMDAwODAwMjAwMDA5MDAwMDAwOTAwQUQKKzoxMDAwMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDAwMDAwMDgwMjUKKzoxMDAwNDAwMDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MDAyMDAwMDkwMDMKKzoxMDAwNTAwMDAwMDAwOTAwMDAwMDAwODAwMjAwMDA5MDAwMDAwOTAwN0MKKzoxMDAwNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDAwMDAwMDgwRjUKKzoxMDAwNzAwMDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MDAyMDAwMDkwRDMKKzoxMDAwODAwMEZFRkYwMDAwMDAwMDAwQUMwMjAwMzYzMjAwMDAzNjAwMjcKKzoxMDAwOTAwMDAwMDAwMEE4MDIwMDAwOTIwMDAwMTYxMzAwMDAwMDgwN0IKKzoxMDAwQTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwODMKKzoxMDAwQjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzREMKKzoxMDAwQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNzUKKzoxMDAwRDAwMDAyMDAwMDkwMDAwMDIwMDAwMDAwMDBEODBGODAyODkyNEQKKzoxMDAwRTAwMDAwMDAyMTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyMjAwQUMKKzoxMDAwRjAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjMwMDAwMDAwMEQ4RTQKKzoxMDAxMDAwMDBGNDAyQjkyMDAwMDI0MDAwMDAwMDBEODBGODAyODkyOUUKKzoxMDAxMTAwMDAwMDAyNTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyNjAwNzMKKzoxMDAxMjAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjcwMDAwMDAwMEQ4QUYKKzoxMDAxMzAwMDBGODAyODkyMDAwMDI4MDAwMDAwMDBEODBGODAyODkyMkQKKzoxMDAxNDAwMDAwMDAyOTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyQTAwM0IKKzoxMDAxNTAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMzYwMDAwMDAwMDk4QjAKKzoxMDAxNjAwMDFFODBFOTlBMDAwMDJDMDAwMDAwMDBEODBGODAyODkyMjEKKzoxMDAxNzAwMDAwMDAyRDAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyRTAwMDMKKzoxMDAxODAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMkYwMDAwMDAwMEQ4NDcKKzoxMDAxOTAwMDBGODAyODkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMDkyNzEKKzoxMDAxQTAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDA5MjAwMDAzMDAwM0EKKzoxMDAxQjAwMDAwMDAwMEQ0MEY4MDAwOTIwMDAwMzQwMDAwMDAwMEQ0NDIKKzoxMDAxQzAwMDBGQzAwMDkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMTkyMjgKKzoxMDAxRDAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDE5MjAwMDAzMDAwMDkKKzoxMDAxRTAwMDAwMDAwMEQ0MEY4MDAxOTIwMDAwMzAwMDAwMDAwMEQ0MTUKKzoxMDAxRjAwMDBGQzAwMTkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMjkyRjYKKzoxMDAyMDAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDI5MjAwMDAzMDAwRDcKKzoxMDAyMTAwMDAwMDAwMEQ0MEY4MDAyOTIwMDAwMTYxMzAwMDAwMDgwM0UKKzoxMDAyMjAwMDAyMDAwMDkwMDAwMDMwMDAwMDAwMDBENDBGMDAwMzkyOTQKKzoxMDAyMzAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDM5MjAwMDAzMDAwQTYKKzoxMDAyNDAwMDAwMDAwMEQ0MEY4MDAzOTIwMDAwMzAwMDAwMDAwMEQ0QjIKKzoxMDAyNTAwMDBGQzAwMzkyMDAwMDAwMDAwMDAwMDBEMDVGM0YwMDM0OTgKKzoxMDAyNjAwMDAwMDAxNjEzMDQwMDAwODA0MkZGRkNCMDAwMDAwMDAwRjQKKzoxMDAyNzAwMDAwMDAwMDg4MTI4MEZEM0EwMDAwMTYxMzAwMDAwMDgwODQKKzoxMDAyODAwMDAyMDAwMDkwMTYxMzE2MTMwMjAxMDA4MDgyOERGREJDM0YKKzoxMDAyOTAwMDAwMDAwMDAwMDAwMDAwODgxMjgwRkQzQTAwMDAwMDAwMEQKKzoxMDAyQTAwMDAwMDAwMEY4MDNDMDAxMzIzODAwMDAwMDAwMDEwMDg0QTMKKzoxMDAyQjAwMDgyNEQyODFBMDAwMDM2MDAwMDAwMDA3NDA5NDAwMDkyQTgKKzoxMDAyQzAwMDAwMDA0RjAwMDAwMDAwRkMwMjAwMDA5MjAwMDA0ODAwMDcKKzoxMDAyRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNEQwMDAwMDAwMDkwMkYKKzoxMDAyRTAwMDBFODAxODkyMDAwMDFCMDMwMDAwMDAwMDA4QzAyMDkyM0UKKzoxMDAyRjAwMDAwMDA4OTAwMDAwMDAwMDAwODAwMjE5MjAwMDAxOTAzOUUKKzoxMDAzMDAwMDAwMDAwMDAwMDg0MDIxOTIwMDAwODYwMDAwMDAwMDAwNkMKKzoxMDAzMTAwMDA4ODUyMTkwMDAwMDlCMDMwMDAwMDBFQzAyQzAyMjkyOUYKKzoxMDAzMjAwMDAwMDA5NDA0MDAwMDAwODAwMjAwMDA5MDAwMDA1ODAwQ0IKKzoxMDAzMzAwMDAwMDAwMEZDMDI0MDE4OUQwMDAwNTEwMDAwMDAwMEQwQTkKKzoxMDAzNDAwMDAyMDAwMDkyMDAwMEUwMDMwMDAwMDA4MDAyMDAwMDkwMjQKKzoxMDAzNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNjIKKzoxMDAzNjAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwNEMwMDAwMDAwMDAwNEUKKzoxMDAzNzAwMDA5QzAyMTkyMDAwMDRBMDAxMjAxMDAwMDA4ODUyMkIwNDUKKzoxMDAzODAwMDE4MDAzNjAwMDAwMDAwRjg3MzhBMDI5OTAwMDA4RTAwMDEKKzoxMDAzOTAwMDZBMDAwMDgwMDIwMDAwQjAwODAwOEUwMDAwMDAwMEY4MzMKKzoxMDAzQTAwMDIzNDAwMTk5MDAwMDAwMDAwMDAxMDBFODAyMDA5MDcyNjMKKzoxMDAzQjAwMDAwMDAxNjEzODAwMTAwODBCMjAwRTlCNjAwMDAwMjA0QkMKKzoxMDAzQzAwMDAwMDAwMDdDMUVDMEU3OUEwODAwMDAwMDAwMDAwMEY4NTIKKzoxMDAzRDAwMDEzNDAwMTM5MDAwMEY2MDMwMDAwMDAwOEI4MDEwMDk0NDIKKzoxMDAzRTAwMDAwMDAxNjEzMDMwMDAwNzgwOTQwMUFCRDAwMDAxNjEzMjAKKzoxMDAzRjAwMDA0MDEwMDgwRTI4MDk3QkMwMDAwMDAwMDAwMDAwMEEwMjMKKzoxMDA0MDAwMEUxMjUwMDM0MDgwMDAwMDAwMDAwMDBGOEIzNDAwMTM5ODUKKzoxMDA0MTAwMDAwMDAwMjA0QjIwMDAwRDgwMjAwMDBCMjAwMDAxNjEzNkYKKzoxMDA0MjAwMDE3MDEwMDgwMDIwMDAwQjAwMDAwMUYwNjAwMTAwMUY4NTQKKzoxMDA0MzAwMDAyMDA2RTkyMDAwMDVCMDAwQTAxMDBDQzAyMDAwMEIyRDQKKzoxMDA0NDAwMDAwMDA3MDAwMDMwMTAwRkMwMjQwMTlCRDA4MDAwMjA0MTYKKzoxMDA0NTAwMDAwMDAwMEY4QTM0MDAxOTkwMDAwMDAwMDAwMDAwMDg0QTMKKzoxMDA0NjAwMDAxQzAyRjMyMDAwMDAwMDAwMDAwMDA5MEYxMDEwMDM0QjQKKzoxMDA0NzAwMDAwMDAwMDAwMDAwMDAwOTQwMUMwMkYzMjAwMDA2MDAwNjYKKzoxMDA0ODAwMDgwMDEwMDgwMTI4MUZDQjYwMDAwMTYxMzA0MDEwMDgwNzgKKzoxMDA0OTAwMDAyQzAyRkJDMDIwMDYwMDBCMDAwMDBBMEYyMEIwMEI5NDcKKzoxMDA0QTAwMDAwMDA2MzAwMDQwMTAwODAwMkMwQjBCQzAwMDA2RTAwQzgKKzoxMDA0QjAwMEEwMDAwMDgwMDIwMDAwOTAwMDAwNjUwMDgwMDEwMDgwMjQKKzoxMDA0QzAwMEYyNEJEMEI2MDAwMDZFMDBBMDAwMDA4MDAyMDAwMDkwNDkKKzoxMDA0RDAwMDAwMDAwMDAwQTAwMDAwMDRGRDRCRDAzNDAwMDA2QjAwQzEKKzoxMDA0RTAwMDgwMDEwMDgwMTI4MUZDQjYwMDAwQzIxMTAwMDAwMEQ4MUIKKzoxMDA0RjAwMDAyMDAwMEQyMDAwMDE2MTMwNDAwMDA4MDAyODA5MkJDQUIKKzoxMDA1MDAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTZFMDAzNjAwN0UKKzoxMDA1MTAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwOTYxMTAwMDAwMEQ4RDIKKzoxMDA1MjAwMDAyMDAwMEQyMDAwMDE2MTMwNDAwMDA4MDAyODA5MkJDN0EKKzoxMDA1MzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDA1QjAwQTEKKzoxMDA1NDAwMDAzMDEwMEZDMDI0MDE4QkQwMDAwODUwMDAzMDAwMEZDMTAKKzoxMDA1NTAwMDAyNDAxOUJEMDAwMDAwMDAwMDAwMDA5NDAxQzAyRjMyQ0QKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMDAwODBGMTAxMDAzNDAwMDAwMDAwRTUKKzoxMDA1NzAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwNzUwMDgwMDEwMDgwNUYKKzoxMDA1ODAwMDEyODFGQ0I2MDAwMDE2MTMwNDAxMDA4MDAyQzAyRkJDQ0IKKzoxMDA1OTAwMDAyMDA3NTAwQjAwMDAwQTBGMjBCMDBCOTAwMDA3ODAwNjYKKzoxMDA1QTAwMDA0MDEwMDgwMDJDMEIwQkMwMDAwODMwMEEwMDAwMDgwRjUKKzoxMDA1QjAwMDAyMDAwMDkwMDAwMDdBMDA4MDAxMDA4MEYyNEJEMEI2NkIKKzoxMDA1QzAwMDAwMDA4MzAwQTAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRjYKKzoxMDA1RDAwMEEwMDAwMDA0RkQ0QkQwMzQwMDAwODAwMDgwMDEwMDgwQUEKKzoxMDA1RTAwMDEyODFGQ0I2MDAwMEMyMTEwMDAwMDBEODAyMDAwMEQyNDcKKzoxMDA1RjAwMDAwMDAxNjEzMDQwMDAwODAwMjgwOTJCQzE4MDAwMDAwNjYKKzoxMDA2MDAwMDAwMDAwMEY4NzMwQTAzMzk4MzAwMzYwMDAwMDAwMEMwQzAKKzoxMDA2MTAwMDAyMDAzNjkyMDAwMDk2MTEwMDAwMDBEODAyMDAwMEQyQkQKKzoxMDA2MjAwMDAwMDAxNjEzMDQwMDAwODAwMjgwOTJCQzE4MDAzNjAwRkYKKzoxMDA2MzAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwNzAwMDAzMDEwMEZDRDkKKzoxMDA2NDAwMDAyNDAxOUJEMDAwMDVCMDAwMzAxMDBGQzAyNDAxOEJEMjAKKzoxMDA2NTAwMDA4MDAwMjA0MDAwMDAwRjhBMzQwMDE5OTA4MDAwMDAwMEYKKzoxMDA2NjAwMDAwMDAwMEY4NzM0MDAxMzkwMDAwOEUwMDgwMDEwMDgwMTYKKzoxMDA2NzAwMEUyMDE4MEI2MDAwMDhCMDAwMDAwMDA4MDAyMDAwMDkwQzQKKzoxMDA2ODAwMDA4MDA5MTAzMEMwMDAwRjg1MzQwMDFCOTAwMDA4RDAwRjAKKzoxMDA2OTAwMDgwMDEwMDgwRTIwMTgwQjYwMDAwMTYxMzEyMDAwMDY4OUQKKzoxMDA2QTAwMDAyMDU4MEIwMDAwMEY2MDMwMDAwMDA2QzFGQzBGNjlBM0YKKzoxMDA2QjAwMDAwMDAwMDAwMDAwMDAwMDAwODA1ODAzMDAwMDAwMDAwN0QKKzoxMDA2QzAwMDAwMDAwMEZDMDIwMDAxMzIwMDAwMDAwMDAwMDAwMDEwRTkKKzoxMDA2RDAwMDA4ODAzRDMyMDAwMDAwMDAwMDAwMDBDQzAyMDAwMDMyMjMKKzoxMDA2RTAwMDAwMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRjcKKzoxMDA2RjAwMDAwMDAwMDE0MDkwMDgwRDIwMDAwMTYxMzgwMDAwMDgwNjIKKzoxMDA3MDAwMDYyODAyRkI2MDAwMDE2MTMwMjAxMDA4MDgyM0E4MEJDN0UKKzoxMDA3MTAwMDAwMDAxNjEzMDYwMTAwODA5MjNBODBCQzAwOTAxNjEzNjgKKzoxMDA3MjAwMDA0MDEwMDgwQTIwRDgwQjAwMDAwMTYxMzEyMDEwMEJDNkQKKzoxMDA3MzAwMDA4QzAyMUIyMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyMTYKKzoxMDA3NDAwMDAyQTAwMDAwMDAwMDAwMDBBOTBEODAzMjAwMDAxNjEzNzYKKzoxMDA3NTAwMDEyMDAwMDU0MDJBNDM4QjIwMDAyMDA4MDAwMDAwMDJDRjUKKzoxMDA3NjAwMDA4MDAzNzMyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NTkKKzoxMDA3NzAwMDAwMDAwMDAwMDAwODAwMDQwODgwNzIzMjAwMDBBMjAwOUYKKzoxMDA3ODAwMDlGMDAwMDVDMDgwMDcyQjI4MzAwQTEwMDgwMDEwMDgwMUQKKzoxMDA3OTAwMDgyQ0Q4NUIwMDAwMEI2MDAwMDAwMDAyQ0Q4QzE4Mjk0NDQKKzoxMDA3QTAwMDAwMDBCNjAwMDAwMDAwMkM4OEMxODI5NDAwMDAxNjEzREYKKzoxMDA3QjAwMDA2MDEwMDgwODI3RDgwQkMwMDBGQUMwMDA0MDEwMDgwMzcKKzoxMDA3QzAwMDgyQ0Q4NUIwMDAwMEFDMDA4MDAwMDA4MDMyODFGQ0I2OTQKKzoxMDA3RDAwMDAwMDAxNjEzMTIwMDAwNjgwMjA1ODBCMDAwMDAwMDAwM0YKKzoxMDA3RTAwMDAwMDAwMDZDMUZDMEY2M0EwMDAwMDAwMDAwMDAwMEZDOTIKKzoxMDA3RjAwMDAyMDAwMTMyMDAwMEFBMDAwNDAxMDBEQzQzNjAzREIzQTYKKzoxMDA4MDAwMDAwMDBGNjAzMDAwMDAwRkMwMjAwMDA5MjE4MDAwMDAwNDcKKzoxMDA4MTAwMDAwMDAwMEY4NzM4QTAzMzlBNzAwMzYwMDAwMDAwMEMwMEEKKzoxMDA4MjAwMDAyMDAzNjkyMDAwMEFFMDA4MDAxMDA4MEYyQzA4NUI2NjIKKzoxMDA4MzAwMDAwMDBCRTAwMDAwMDAwMkM5OEMxODI5NDEwMDBDMzAwOEMKKzoxMDA4NDAwMDg3MDAwMDAwNzkyMTE2QjgwMDAwQzMwMDgwMDEwMDc4RkQKKzoxMDA4NTAwMDM5MDA5MEIwODMwMEMzMDA4NzAwMDA3ODg5Q0Q4NUIwNEYKKzoxMDA4NjAwMDAwMDBCMzAwODAwMDAwODAwMjgwOTdCNjAwMDBCNjAwNTAKKzoxMDA4NzAwMDAwMDAwMDJDODhDMTgyOTQwMDAwQjUwMDgwMDAwMDgwMzgKKzoxMDA4ODAwMDIyQzE4NUI2MDAwMEI2MDAwMDAwMDAyQ0Q4QzE4Mjk0QjkKKzoxMDA4OTAwMDAwMDBDMzAwMDAwMDAwMkM5OEMxODI5NDAwMDBCQzAwM0UKKzoxMDA4QTAwMDgwMDEwMDgwRDJDMTgyQjYwMDAwQzMwMDgwMDEwMDgwQjgKKzoxMDA4QjAwMDcyODBGQ0I2MDAwMDAwMDAwMDE4MDBBODQyM0Q3MjMwQjMKKzoxMDA4QzAwMDAwMDAwMDAwNTQxODA5RkVGMkMwN0MzMDAwMDBFQTAwNkQKKzoxMDA4RDAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwQzUwMDAwMDAwMDgwRTQKKzoxMDA4RTAwMDAyMDAwMDkwMDAwMDE2MTM4MDAxMDA4MDgyQzE4MkI2RDEKKzoxMDA4RjAwMDAwMDBCODAwODAwMDAwODA4MjgwRkNCNjA5MDBDMzAwQzAKKzoxMDA5MDAwMDA0MDAwMEI0MjhCRjE3Qjg4MzAwQzUwMDg3MDAwMEFDRkUKKzoxMDA5MTAwMDg4Q0Q4NUIwMDAwMEMzMDAwNDAwMDA4MEQyRTI4QUIwMTgKKzoxMDA5MjAwMDAwMDAwMDAwMDAxODAwQTg0MjNENzIzMDAwMDBDNTAwMjEKKzoxMDA5MzAwMDU0MTgwOUZFRjJDMDdDOTAwMDAwMDAwMDU0MDAwMEZDMzYKKzoxMDA5NDAwMDAyMDAwMDMyMDAwMDAwMDAwMDE4MDAyMDA3MDAwMDMyMDIKKzoxMDA5NTAwMDgwMDA4MDIwMDAwMDAwODBDMkNEODUzMDAwMDBEQTAwRDkKKzoxMDA5NjAwMDBCMDAwMDgwMDIwMDAwQjAxODAwMDAwMDAwMDAwMDc4QkEKKzoxMDA5NzAwMDc5QTExNjM4MjAwMEVBMDAwNDAwMDA4MDgyOEQ5N0JDMUYKKzoxMDA5ODAwMDAwMDBEMTAwODAwMTAwODA2MjgwRkNCNjgzMDBEMTAwQUQKKzoxMDA5OTAwMDg3MDAwMDc4ODlDRDg1QjAwMDAwQ0QwMDgwMDAwMDgwMDAKKzoxMDA5QTAwMDAyODA5N0I2MDAwMEQxMDA4MDAxMDA4MDEyODA5N0I2QzcKKzoxMDA5QjAwMDAwMDBEMTAwODAwMTAwODA3MkMxODVCNjEwMDAwMDAwRTcKKzoxMDA5QzAwMDAwMDAwMDc4Nzk2MTE2MzgwMDAwRDgwMDA0MDEwMDgwMkEKKzoxMDA5RDAwMDMyODA5N0JDMDAwMEVBMDAwMDAwMDAyQ0I4QzE4Mjk0NkQKKzoxMDA5RTAwMDAwMDBEODAwODAwMTAwODA1MjgwRkNCNjAwMDBEODAwRDIKKzoxMDA5RjAwMDgwMDAwMDgwNzJDMTg1QjYwMDAwRDgwMDgwMDEwMDgwQjAKKzoxMDBBMDAwMDAyQzE4NUI2MDAwMEQ4MDA4MDAxMDA4MEQyQzE4NUI2NDEKKzoxMDBBMTAwMDE4MDAwMDAwMDAwMDAwNzg3OUUxMTYzODAwMDBEODAwQzYKKzoxMDBBMjAwMDA0MDEwMDgwMzI4MDk3QkMwMDAwRUEwMDAwMDAwMDJDMjYKKzoxMDBBMzAwMEM4QzE4Mjk0MDAwMDAwMDAwMDAwMDAwNDA4MDAwNDMyRDUKKzoxMDBBNDAwMDAwMDBFQTAwMDAwMDAwMkNBOEMxODI5NDA4MDAwMDAwMDkKKzoxMDBBNTAwMDAwMDAwMDc4NzkyMTE3MzgwMDAwRUEwMDA0MDAwMDgwQzcKKzoxMDBBNjAwMDMyODA5N0JDMDAwMEVBMDAwNDAxMDA4MDIyODA5N0JDMUQKKzoxMDBBNzAwMDFGMDAwMDAwMDAxMjAwMDg4OUNENzIzMDA1MDAwMDAwNDAKKzoxMDBBODAwMDAwMTIwMDAwQjlEQzE3MzgwMDAwMDAwMDAwMDAwMEE4QzgKKzoxMDBBOTAwMDIyMDA5MDM3MDAwMEVBMDA4MDAwODY4MDIyMjQ3Q0I2ODUKKzoxMDBBQTAwMDAwMDAwMDAwMDAwMDAwNzgwOTA1ODAzMDAwMDAxNjEzRTcKKzoxMDBBQjAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwNzQKKzoxMDBBQzAwMDkyQkE5N0JDMDAwMDE2MTMxMjAwMDA2ODAyMDU4MEIwQUQKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMjAwMDBFODAwRkQKKzoxMDBBRTAwMDA0MDEwMERDNDM2MDNEQjMwMDAwRjYwMzAwMDAwMEZDOUQKKzoxMDBBRjAwMDAyMDAwMDkyMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5MTkKKzoxMDBCMDAwMEU1MDAzNjAwMDAwMDAwQzAwMjAwMzY5MjAyMDAwMDAwM0UKKzoxMDBCMTAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0QUUKKzoxMDBCMjAwMDA5MDA4MEQyMDAwMEYxMDAxMjAxMDA2MDA4NDAyM0IyRTkKKzoxMDBCMzAwMDMyMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNzAKKzoxMDBCNDAwMDAwMDAwMDE0MDkwMDgwRDIwMDgyMDAwMDAwMDAwMDA4QUMKKzoxMDBCNTAwMDA4ODAzNjMyMDAwMEUxMDAwMDAwMDA2NDFGNDBGNjlBNzEKKzoxMDBCNjAwMDAwMDAxNjEzMTIwMDAwMjQwODAwMjNCMjAwMDAxNjEzMjAKKzoxMDBCNzAwMDEyMDAwMDIwMDhDMDIzQjIwMDAwMTYxMzEyMDAwMDE4NTMKKzoxMDBCODAwMDA4ODAyM0IyMDAwMDAwMDAwMDAwMDBGQzAyMDAwMTMyRDcKKzoxMDBCOTAwMDAwMDBGODAwMDQwMDAwREM0MzYwM0RCMzE4MDAwMDAwRDIKKzoxMDBCQTAwMDAwMDAwMEY4NzM4QTAzMzlGNDAwMzYwMDAwMDAwMEMwMkEKKzoxMDBCQjAwMDAyMDAzNjkyMDAwMDAwMDAwMDAwMDBGQzAyMDA4NTMyQjYKKzoxMDBCQzAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwOTgKKzoxMDBCRDAwMDAwMDAwMEQwMDIwMDAwMzIwMEMwMDcwMTE4MDEwMDBDMjQKKzoxMDBCRTAwMEE4Q0QzRUIyMDAwMEY4MDAxMjAwMDAzODAyODA4MUIyQTkKKzoxMDBCRjAwMDAwMDAwMDAwMDAwMDAwM0MwMjAwODIzMjAwMDAwMDAwMDMKKzoxMDBDMDAwMDAwMDAwMDMwMDI0MDgyMzIwMDAwMDAwMDAwMDAwMDM0OEEKKzoxMDBDMTAwMDAyMDA4NjMyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyODIKKzoxMDBDMjAwMDAwMDAwMDAwMDAwMDAwNUMxRkMwRjUzQTAwMDAwMDAwNUEKKzoxMDBDMzAwMDAwMDAwMDc4MDkwNTgwMzAwMDAwMTYxMzAyMDEwMDgwRDIKKzoxMDBDNDAwMDgyQkE5N0JDMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDQzYKKzoxMDBDNTAwMDAwMDBGNjAzMTIwMTAwNjgwMjA1ODBCMDAwMDAxNjEzQzAKKzoxMDBDNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMTgwMDc4RTIKKzoxMDBDNzAwMDA5MDA3MjMyMDAyMzBBMDEwNDAxMDA4MEEyQ0Q4MkIwNzMKKzoxMDBDODAwMDAwMDAwQjAxMDAwMDAwMDAwOTAwMDA5MjAwMDAxNjEzOTQKKzoxMDBDOTAwMDlGMTYwMDAwMjlDMTcyQkMwMDAwMDAwMDAwMTgwMDAwNkYKKzoxMDBDQTAwMDA3ODA4MTMyMDAwMDAwMDAwMDIwMDAwMDA3MDA4MjMyMkYKKzoxMDBDQjAwMDAwMDAwMDAwMDAyODAwMDAwNzgwOTczMjEwMDAwMDAwQUMKKzoxMDBDQzAwMDAwMzAwMDAwMTcyMDkwMzkwMDAwMDAwMDAwMzgwMDAwQkMKKzoxMDBDRDAwMDA3QzA4MjMyMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyOEQKKzoxMDBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAxNDAxRjYKKzoxMDBDRjAwMDgwMDEwMDgwQTJDMTgyQjYwMDAwMTUwMTAwMDgwMDAwM0EKKzoxMDBEMDAwMDU3MDA4MDk3MDUwMDAwMDAwMDA4MDAwMDA3QTAwNDM5ODQKKzoxMDBEMTAwMDAwMDAxNjEzMDQxMDAwMDAwNzQwODJCMjAwMDAwMDAwMUIKKzoxMDBEMjAwMDAwMTgwMDAwMDcwMDg2MzIwMDAwMTYxMzEyMDAwMDUwNjEKKzoxMDBEMzAwMEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NTUKKzoxMDBENDAwMDAwMDAxNjEzMTIwMDAwNjgwMjA1ODBCMDAwMDAwMDAwQzkKKzoxMDBENTAwMDAwMDAwMDc4MDkwNTgwMzAwMDAwMTYxMzAyMDEwMDgwQjEKKzoxMDBENjAwMDgyQkE5N0JDMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDQTUKKzoxMDBENzAwMDAwMDAxNjEzMTIwMDAwNDgwMkMwODBCMjAwMDBGNjAzMDMKKzoxMDBEODAwMENBMDEwMDA4RTg4MTgwOTQwMDAwMDAwMDAwMDAwMDgwOTMKKzoxMDBEOTAwMDAyNDU5MDMwMDAwMDE2MTMwNDAxMDA4MDEyMDAyOEJDQTgKKzoxMDBEQTAwMDAwMDAxNjEzMTIwMTAwQkMwOEMwMjFCMjA4MDAwMDAwQTgKKzoxMDBEQjAwMDAwMDAwMEY4OTM0MDAxMzkxMDAwMDAwMDU0MDAwMEZDQ0UKKzoxMDBEQzAwMDgyNEQ5MDM2MDAwMDE2MTMwMjAwMDA4MDQyQzAyRkJDRjYKKzoxMDBERDAwMDAwMDAyNTAxRjAwMTAwRDgwMjAwMDBCMjAwMDAwMDAwNzAKKzoxMDBERTAwMDYyMDQwMUE4MDJDMDZFMzIwMDAwMDAwMDAwMDQwMTAwOEQKKzoxMDBERjAwMDU5QzA2RTM3MDAwMDAwMDAwMDA0MDE3ODE5QzA2RTNBMzcKKzoxMDBFMDAwMDAwMDAwMDAwNEUwNDAxRUMwNkJEOTczMDAwMDAwMDAwMTkKKzoxMDBFMTAwMEUwMDAwMEY0MUU0MEVGM0EwMDAwMTYxMzA0MTkwQjgyQTQKKzoxMDBFMjAwMDAyQzA3Q0JDMDAwMDAwMDAwMDE4MEJDRTA3NDAwMDMyNUUKKzoxMDBFMzAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwMDkzMjAwMDAxNjEzMDcKKzoxMDBFNDAwMDA0MDEwMDgwMDIwMDM2QkMwMDAwMDAwMDAwMDgwMDAwMjEKKzoxMDBFNTAwMDc3QzAyOTM3MDAwMDE2MTMwNDEwMDAwMDE3M0Q5MEJBMjAKKzoxMDBFNjAwMDAwMDAwMDAwMDAxODAwMDAwNzgwRjQzMjAwMDAxNjEzOTQKKzoxMDBFNzAwMDEyMDAwMDQwRjJDMTM4QjQwQjAwMDAwMDAwMDAwMDEwNjYKKzoxMDBFODAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODA4M0QyNkQKKzoxMDBFOTAwMDAwMDAwMDAwMDAwMDAwRkMzMkMwMkYzMDAwMDAwMDAwMDUKKzoxMDBFQTAwMDAwMDAwMDEwMDg4MDNEMzIxODAwMzYwMDAwMDAwMEY4RjUKKzoxMDBFQjAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyQjEKKzoxMDBFQzAwMDAwMDAxNjEzMDQwMTAwODAwMjgwMkRCQzAwMDBDRTAxM0EKKzoxMDBFRDAwMDgwMzgwMDgwMjJDMDcyQjYwMDAwM0UwMTEyMDAwMEM4QjcKKzoxMDBFRTAwMDAyMDAyMEIyMDAwMDQ1MDExMjAxMDA1QzA4ODAyMEIyMUYKKzoxMDBFRjAwMDAwMDAxNjEzMTIwMDAwNjAwMjgwMkNCMjE4MDAwMDAwREYKKzoxMDBGMDAwMDAwMDAwMEY4NzM4QTAzMzkzQjAxMzYwMDAwMDAwMEMwN0UKKzoxMDBGMTAwMDAyMDAzNjkyMDAwMDAwMDAwMDAwMDBGODFGODBGRjNBMzcKKzoxMDBGMjAwMDAwMDAwMDAwMDAwMDAwRkMzMjAwODUzMDAwMDBBMzAxM0EKKzoxMDBGMzAwMDA0MDAwMDgwNDI2MDNEQjMxODAwMDAwMDAwMDAwMEY4OEIKKzoxMDBGNDAwMDczOEEwMzM5NDEwMTM2MDAwMDAwMDBDMDAyMDAzNjkyNjYKKzoxMDBGNTAwMDA4MDAwMDAwMDAwMDAwMDA4OENEODUzNzAwMDAwMDAwNzgKKzoxMDBGNjAwMDAwMDAwMDIwMDgwMDcyMzIwMDAwMDAwMDAwMDgwMDI0ODkKKzoxMDBGNzAwMDA4MDA3MjMyMDAwMDE2MTMwNDEwMDA2QzA4MDA3MkIyRjAKKzoxMDBGODAwMDAwMDAwMDAwMDAxODAwNEMwODAwNzIzMjAwMDAxNjEzMjgKKzoxMDBGOTAwMDA0MjAwMDE4MDgwMDcyQjIwMDAwMDAwMDAwMzAwMDI4OTEKKzoxMDBGQTAwMDA4MDA3MjMyMDAwMDE2MTMwMjAwMDA4MDgyQkQ4MkJDNkQKKzoxMDBGQjAwMDAwMDAwMDAwMDAyODAwMzAwODAwNzIzMjAwMDAwMDAwMkQKKzoxMDBGQzAwMDAwMDAwMDYwMDg4MDgyMzIwMDAwNTYwMTA2MDAwMDgwQTgKKzoxMDBGRDAwMDYyQTA4MkJDMDAwMDE2MTM5RjNDMDAxNDI4ODA3MkJDRTMKKzoxMDBGRTAwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMDYzMjA3MDAwMDAwQkIKKzoxMDBGRjAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMTYxMzA0MTAwMDAwQTkKKzoxMDEwMDAwMDA3MDA4MkIyMDAwMDAwMDBDQTE5MDAwMDA3NDA4MjMyQzcKKzoxMDEwMTAwMDAwMDAxNjEzMTIwMDAwNDBGMkMxMzhCNDAwMDAwMDAwQjYKKzoxMDEwMjAwMDAwMDAwMEQ4MDI0MDAwMzIwMDAwN0QwMTA0MzgwMDc4NDIKKzoxMDEwMzAwMEQ5QzU3MkIwMDAwMDVBMDE4MDAxMDA4MDAyODA5N0I2QzUKKzoxMDEwNDAwMDAwMDAwMDAwMDAwMDAwRjg4MjgwMkYzNDAwMDA1QzAxRTYKKzoxMDEwNTAwMDgwMDEwMDgwMTI4MDk3QjYwMDAwMDAwMDAwMDAwMEY4QjgKKzoxMDEwNjAwMDkyODAyRjM0MDAwMDE2MTMwNDAxMDA4MDAyNDAyREJDMzIKKzoxMDEwNzAwMDA0MDAwMDAwMDAzODAwM0NCODFDMTczODAwMDAwMDAwRDUKKzoxMDEwODAwMDAwMDAwMDNDMjhDMDgzMzcwMDAwMDAwMDAwM0EwMDJDMUMKKzoxMDEwOTAwMDA4QzA3MjMyMDAwMDAwMDAwMDAwMDAxQ0I4RTA4MzNBNzMKKzoxMDEwQTAwMDAwMDAwMDAwQ0IyOTAwMjAwNzAwMDAzMjAwMDA3QzAxNzYKKzoxMDEwQjAwMDA0MDAwMDgwMDJDMDgxQkMwMDAwMDAwMDAwMDAwMDM0NzkKKzoxMDEwQzAwMDc4QTA4MTNFMDAwMDAwMDAwMDAwMDAxQ0Q4RTA4MTNDQjgKKzoxMDEwRDAwMDAwMDA2QTAxMDYzQTAwODBCMjVDODNCQzAwMDAwMDAwOTgKKzoxMDEwRTAwMDAwM0EwMDAwODlDMTcyMzcwNzAwNjkwMTJCMDEwMDA0MzIKKzoxMDEwRjAwMDc5MEEwNEI5MDAwMDAwMDBDQjAwMDAwNDE5NDE5MDM0QzMKKzoxMDExMDAwMDAwMDA2RDAxMDAzQTAwMkMwNzAwMDA5MjAwMDAwMDAwNzIKKzoxMDExMTAwMDAwM0EwMDJDRDdFMDcyM0MwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDExMjAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDAwNDA5MDAwMDMyNDUKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwNzY0ODMzMjAwMDAwMDAwOEYKKzoxMDExNDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMTYxMzA0MTAwMDAwQTEKKzoxMDExNTAwMDA3QzA4NkIyMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyRkIKKzoxMDExNjAwMDAwMDA4QzAxMDQwMDAwMjhEOEEwODJCQzAwMDAxNjEzRTcKKzoxMDExNzAwMDA5MDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDExODAwMEQ4MjA4MDNBMDAwMDc3MDEwNDAwMDA4MDcyODAyREJDRDYKKzoxMDExOTAwMDAwMDAxNjEzMTIwMDAwNDQxMkU0MzhCMjAwMDA3ODAxNzcKKzoxMDExQTAwMDAwMDAwMEQ4MTI4MDJEOUEwMDAwNzUxMjAwMDAwMDA0ODMKKzoxMDExQjAwMEY5NDE5MEY0MDAwMDdBMDEwNDAwMDAxOEQ4QTA4MUJDMjUKKzoxMDExQzAwMDAwMDA2MjAxMDAwMDAwNkNEOEUwODY5QTAwMDAyMDEyNDYKKzoxMDExRDAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwNjIwMTAwMDAwMDMwOTEKKzoxMDExRTAwMDA4MDAwMDkyMDAwMDAwMDBDQjE5MDAyMDA3MDAwMDMyMjgKKzoxMDExRjAwMDA3MDA3RjAxMkIwMTAwMDQ3OTBBMDJCOTAwMDAwMDAwRkEKKzoxMDEyMDAwMENCMDAwMDA0MTk0MTkwMzQwMDAwMDAwMDREMDAwMDAwQTQKKzoxMDEyMTAwMEE3QTA4MTNFMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyMDcKKzoxMDEyMjAwMDAwMDAxNjEzMDQxMDAwMDAwN0MwODZCMjAwMDAwMDAwODIKKzoxMDEyMzAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwOEMwMTA0MDAwMDI4NjAKKzoxMDEyNDAwMEQ4QTA4MkJDMDAwMDE2MTMwNDAxMDA4MDYyNjA4M0JDMzkKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDBEODIwODAzQTAwMDA4OTAxNTIKKzoxMDEyNjAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwMTYxMzEyMDAwMDQ0QTAKKzoxMDEyNzAwMDEyRTQzOEIyMDAwMDhBMDEwMDAwMDBEODEyODAyRDlBRDIKKzoxMDEyODAwMDAwMDA3NTEyMDAwMDAwMDRGOTQxOTBGNDAwMDAyMDEyRTMKKzoxMDEyOTAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwN0QwMTAwMDAwMDMwQjUKKzoxMDEyQTAwMDA4MDAwMDkyMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2NzQKKzoxMDEyQjAwMDAwMDAwMDAwMDAwMDAwMDRGOTQxOTAzNDAwMDAxNjEzMDMKKzoxMDEyQzAwMDEyMDAwMDQ0MTJFNDM4QjIxODAwMzYwMDAwMDAwMEY4QTIKKzoxMDEyRDAwMDczMEEwM0Y5MDAwMDE2MTMwNDAwMDA4MDAyODAyREJDN0QKKzoxMDEyRTAwMDAwMDAwMDAwMDAxODAwMDQwOTgwNzMzMjAwMDAwMDAwQjQKKzoxMDEyRjAwMDAwMjgwMDA4ODk4MDczMzcwMDAwMDAwMDAwMDAwMDgwOEIKKzoxMDEzMDAwMDA3MDA4NjMyNDEwMDAwMDAwMDA2MDA4QzA3MDAzNjMyREMKKzoxMDEzMTAwMDAwMDA5ODAxMjkwODAwODAwN0MwODVCMjAwMDA5QjAxRTkKKzoxMDEzMjAwMDI4MTAwMDhDMDcwMDAwQjIwMDAwOUMwMTAwMTIwMDg0MEQKKzoxMDEzMzAwMDA3MDAwMDkyMDAwMDAwMDAwMDEwMDA4Q0Y3RTA4MjNBRTUKKzoxMDEzNDAwMDAwMDA5QjAxMjgxODAwODAwNzQwOTBCMjAwMDA5QzAxMUIKKzoxMDEzNTAwMDAwMTIwMDg0MDcwMDAwOTIwMDAwMDAwMDAwMTIwMDg0QzgKKzoxMDEzNjAwMDI3RTQ4MjMyMDAwMDAwMDAwMDAwMDA3ODM5MDA4NTMwNTgKKzoxMDEzNzAwMDAwMDAxNjEzMDQwMTAwODBGMjhCOTdCQzAwMDBBMTAxNEQKKzoxMDEzODAwMDA0MDAwMDgwNDI2MDNEQjMxODAwMDAwMDAwMDAwMEY4MzcKKzoxMDEzOTAwMDczOEEwMzM5OUMwMTM2MDAwMDAwMDBDMDAyMDAzNjkyQjcKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwODUzMjAwMDAxNjEzNUYKKzoxMDEzQjAwMDEyMDAwMDVDNTI4MTJDQjQwMDAwMDAwMDAwMDAwMEQ4MzQKKzoxMDEzQzAwMDAyODAwMTMyMDAwMDAwMDAwMDAwMDA4MDAyMDAzQjMyNzkKKzoxMDEzRDAwMDA4NDBBNTAxRjAwMTAwMDgwODgwMzZCMjAwMDAwMDAwQjYKKzoxMDEzRTAwMDAwMDQwMTM4MDhDMDZFMzIwMDAwMDAwMEUwMDAwMEY0ODQKKzoxMDEzRjAwMDFFNDBFRjNDMDAwMEFDMDEwQjAxMDA4QzA4MDAwMEIyNjUKKzoxMDE0MDAwMDAwMDBBOTAxRjIwMTAwODAwMjAwMDBCMDAwMDAwMDAwMEQKKzoxMDE0MTAwMDAwMDAwMEYwMEUwMDNBMzIwMDAwQkUwMUUyMDAwMDgwNDEKKzoxMDE0MjAwMDBFODA4MzkyMDAwMEFDMDFGMjAxMDA3OEM5M0IzQUJDMDcKKzoxMDE0MzAwMDAwMDBCNjAxMDIwMTAwODA4MjgwOTdCQzAwMDAwMDAwMUQKKzoxMDE0NDAwMDAwMDAwMEE4MDIwMEU4MzIwMDAwQjEwMTA0MDAwMDgwQTIKKzoxMDE0NTAwMDIyQTIyQUJDMDAwMEI1MDEwNDE5MEI4MjAyQzA3Q0JDODgKKzoxMDE0NjAwMDAwMDAwMDAwMDAwMDAwOEMxOEMwODgzQTAwMDAwMDAwNTYKKzoxMDE0NzAwMDAwMDAwMEE4MTI4MDJBM0EwMDAwMDAwMDAwMDAwMEE4MjYKKzoxMDE0ODAwMDAyQkQyQTMwMDAwMEFGMDEwNDAxMDA4MEUyQTAyQUJDQTYKKzoxMDE0OTAwMDAwMDBCQjAxMDIwMDAwODA4MkMwODhCQzAwMDAwMDAwODgKKzoxMDE0QTAwMEUyMDAwMDA4MDgwMDAwMzIwMDAwMDAwMDAwMDAwMEE4NzAKKzoxMDE0QjAwMDAyODA4ODMyMDAwMDE2MTMwNDE5MEI4MjEyQzA3Q0JDMTMKKzoxMDE0QzAwMDAwMDAwMDAwMDAxODBCQ0UwNzAwMDAzMjAwMDBGNjAzRjkKKzoxMDE0RDAwMDAwMDAwMERDMDMwMDAwOTIwMDAwMDAwMDAwMDAwMDM4NjMKKzoxMDE0RTAwMDA4ODAyQTMyMDAwMDAwMDAwMDAwMDBGMDBFMDAzQTMyQUUKKzoxMDE0RjAwMDAwMDAwMDAwRTIwMDAwODAwRTgwMkEzMjAwMDAwMDAwQTAKKzoxMDE1MDAwMDAwMDAwMEE4MDI4MDg4MzIwMDAwMTYxMzA0MTkwQjgyMjQKKzoxMDE1MTAwMDEyQzA3Q0JDMDAwMDAwMDAwMDE4MEJDRTA3MDAwMDMyOTcKKzoxMDE1MjAwMDAwMDAwMDAwMDAwMDAwREMwMzAwMDAzMjAwMDAxNjEzODEKKzoxMDE1MzAwMDA0MDAwMDgwMjI3QUU4QkEwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDE1NDAwMDA3ODA4MzMyMDAwMDAwMDAwMDAwMDAwMDc5QzAyOTM3QzYKKzoxMDE1NTAwMDYwMjAwMDAwMDAwMDAwMDA4OTBEOTAzQTAwMDAwMDAwQUIKKzoxMDE1NjAwMENBMDEwMEQ4MTI4MDJEM0EwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDE1NzAwMDA3MDAwMTMyMDAwMDAwMDAwMDA4MDAwMDA3MDA5MDMyNjAKKzoxMDE1ODAwMDAwMDAwMDAwMDAxMDAwMDAwNzQwRTgzMjAwMDAwMDAwRUEKKzoxMDE1OTAwMDAwMTgwMDAwMDc4MEU4MzIwMDAwMDAwMDAwMDAwMEZDOTYKKzoxMDE1QTAwMDAyMDAwMDMyMDAwMEY2MDMxMjAxMDA0OEYyQzEzOEI0MTQKKzoxMDE1QjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQzcKKzoxMDE1QzAwMDA0MDEwMDgwMDI0MDJEQkMwMDAwMTYxMzA0MDEwMDgwQkQKKzoxMDE1RDAwMDAyODAyREJDMDAwMDE2MTM4MDAwMDA4MDcyODAyRkI2QTAKKzoxMDE1RTAwMDAwMDAwMDAwMDAzMDAwNzgwODgwNzIzMjA0MDAwMDAwMjMKKzoxMDE1RjAwMDAwMzgwMDU0QTg1QzE2MzgwQjAwMDAwMDAwMzgwMDJDOUUKKzoxMDE2MDAwMEE4REMxNjM4MTQwMDAwMDAwMDAwMDAxQzg4NEQ4NTNBNDQKKzoxMDE2MTAwMDIyMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyODUKKzoxMDE2MjAwMDAwMzgwMDE0QTk5Qzg3RDkwMDAwMDAwMDAwMDAwMDIwQTkKKzoxMDE2MzAwMDA4MDA3MjMyMDAwMDAwMDAwMDA4MDAyNDA4MDA3MjMyMjYKKzoxMDE2NDAwMDAwMDAwMDAwMDAxMDAwNkMwODAwNzIzMjAwMDAwMDAwNzIKKzoxMDE2NTAwMDAwMTgwMDRDMDgwMDcyMzIwMDAwMTYxMzA0MjAwMDE4MTUKKzoxMDE2NjAwMDA4MDA3MkIyMDAwMDAwMDAwMDI4MDAzMDA4MDA3MjMyNEEKKzoxMDE2NzAwMDAwMDAxNjEzOUYzQzAwMTQxODgwNzJCQzAwMDBFNTAxQTYKKzoxMDE2ODAwMDA0MDAwMDgwMDI0MDgxQkMwMDAwMDAwMDAwMDAwMDE0NDMKKzoxMDE2OTAwMDE4NDA4MTNDMDAwMDAwMDAwMDAwMDAwMDA3MDAwNjMyRjYKKzoxMDE2QTAwMDA3MDAwMDAwMDAwODAwMDA3NzRBMDkzOTAwMDAxNjEzRkYKKzoxMDE2QjAwMDA0MTAwMDAwMDcwMDgyQjIwMDAwMDAwMENBMTkwMDAwRjgKKzoxMDE2QzAwMDA3NDA4MjMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MDUKKzoxMDE2RDAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjAwMDAwMDAwQkUKKzoxMDE2RTAwMDAwMDAwMDY0NzhDMDI5MzcwMjEwMDAwMDAwMDAwMDY0ODgKKzoxMDE2RjAwMDg4NEQ4NjNBMDAwMDAwMDAwMDAwMDA4MDA4MDAwMDMyOUIKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwNDAwODAwMDAzMjAwMDAwMDAwNUYKKzoxMDE3MTAwMDREMDAwMDAwNzdBMDgxM0UwMDAwMDAwMDAwMDgwMDAwOUUKKzoxMDE3MjAwMDA3NDA4NjMyMDAwMDE2MTMwNDEwMDAwMDA3QzA4NkIyN0UKKzoxMDE3MzAwMDAwMDAwMDAwMDAxODAwMDAwN0MwODQzMjAwMDAwMDAyMTIKKzoxMDE3NDAwMDA0MDAwMDFDRDhFMDgxQkMwMDAwMTYxMzA5MDEwMDgwRDEKKzoxMDE3NTAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDA2NEQ4NjA4NjNBN0IKKzoxMDE3NjAwMDAwMDBGNDAxMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzRkMKKzoxMDE3NzAwMDEyMDAwMDQwMDJDMDM4QjIwMDAwRkMwMTAwMDAwMEQ4OTYKKzoxMDE3ODAwMDEyODAyRDlBMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0RTYKKzoxMDE3OTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDBGQTAxOEYKKzoxMDE3QTAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwMUYKKzoxMDE3QjAwMEEyODAyRkI2MDAwMEY1MDE2NzAwMDBGOEEyODAyRkI1QzcKKzoxMDE3QzAwMDAwMDAxNjEzMTIwMDAwRTgwMkMwMjFCMjAwMDAxNjEzMzgKKzoxMDE3RDAwMDA0MDEwMDgwNzI4MDJEQkMwMDAwMDAwMDAwMDAwMEQ4RDEKKzoxMDE3RTAwMDAyNDAwMDMyMDAwMEZFMDEwNDAwMDAxOEQ4QTA4MUJDQjUKKzoxMDE3RjAwMDAwMDBFQTAxMDAwMDAwNkNEOEUwODY5QTAwMDBDOTEwRTEKKzoxMDE4MDAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwRUEwMTAwMDAwMDMwRDIKKzoxMDE4MTAwMDA4MDAwMDkyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MTQKKzoxMDE4MjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwNjAyRjEKKzoxMDE4MzAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwOEUKKzoxMDE4NDAwMEEyODAyRkI2MDAwMDAxMDI2NzAwMDBGOEEyODAyRkI1MjkKKzoxMDE4NTAwMDAwMDAxNjEzMTIwMDAwRTgwMkMwMjFCMjAwMDAxMjAyQkMKKzoxMDE4NjAwMDA0MDEwMDgwMDIwMDg0QkMwMDAwMDAwMDAwMDAwMEQ0REQKKzoxMDE4NzAwMDAyNDAwMDMyMDAwMDAwMDAwMDAwMDBBNDIyNDA4NTNBMkYKKzoxMDE4ODAwMDA0MDAwMDAwMDAxODAwNDA4OENENzQzNjAwMDAwMDAwRkQKKzoxMDE4OTAwMDAwMDAwMDQwMjgwMDg0MzcwMDAwMDAwMDAwMDAwMEQ0NTEKKzoxMDE4QTAwMDAyMDAwMDMyMTQwMDEyMDIwNDAwMDAxQzg4MEQ4NEJDRTcKKzoxMDE4QjAwMDAwMDAxNjEzMDkwMTAwODAwMjAwMDBCMDAwMDAwMDAwQzMKKzoxMDE4QzAwMDAwMDAwMDc4MDk2MTg1M0E4MDAwMTYxMzA2MDEwMDgwNDcKKzoxMDE4RDAwMDgyOEQ5N0JDMDAwMDAwMDAwMDAwMDA2NEQ4NjA4NjNBNEEKKzoxMDE4RTAwMDAwMDBGQzAxMDAwMDAwRDgwMjQwMDA5MjAwMDAxNDAyMzkKKzoxMDE4RjAwMDA0MDAwMDE4RDhBMDgxQkMwMDAwMTYwMjAwMDAwMDZDOTMKKzoxMDE5MDAwMEQ4RTA4NjlBMDAwMEM5MTAwMDAwMDA0NDA4ODAyREYyM0IKKzoxMDE5MTAwMDAwMDAwMDAwMDAwMDAwMzAwODAwMDAzMjAwMDAwMDAwNUQKKzoxMDE5MjAwMDAwMDAwMEQ0MDI0MDAwMzIwMDAwMDAwMDAwMDAwMEE0Q0IKKzoxMDE5MzAwMDIyQzA4MjNBMDAwMDAwMDAwMDAwMDAzQ0I4NjA4NTNDRjQKKzoxMDE5NDAwMDA0MDAxQzAyODEwMDAwNjA4OENENzRCNjAwMDAwMDAwMTUKKzoxMDE5NTAwMDAwMDQwMDI4RjhBMDc1M0MwMDAwMUQwMjAwMDgwMDc0NzcKKzoxMDE5NjAwMDA4ODA3NTkyMDAwMDAwMDAwMDA4MDAyOEY4QTA3NTNDNkYKKzoxMDE5NzAwMDAwMDAwMDAwMDAwMDAwMjgwOEExODIzQzAwMDAwMDAwRDgKKzoxMDE5ODAwMDAwMDAwMEE0RjI2MDJBM0EwMDAwMDAwMDAwMDgwMDQ4QUQKKzoxMDE5OTAwMDA4MDA3NTMyMDAwMDAwMDAwMDIwMDA3QzA4ODA3NTMyQ0QKKzoxMDE5QTAwMDA5MDAyMzAyMDQxQTAwNzA4OENENzRCMDA5MDAwMDAwRjkKKzoxMDE5QjAwMDAwMUEwMDRDODdDRDc0MzE3RjAwMDAwMDAwMDAwMDY0RTUKKzoxMDE5QzAwMDg4NEQ4NjMxMDAwMDAwMDAwMDAwMDA2NDI4NDA4NjNBRkYKKzoxMDE5RDAwMDIzMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRDEKKzoxMDE5RTAwMDAwMDAwMDE0MDk4MDgyRDIwQzAwMDAwMDAwMDAwMDEwRUEKKzoxMDE5RjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODA4NEQyRjEKKzoxMDFBMDAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjAwMDAwMDAwOEEKKzoxMDFBMTAwMDAwMTAwMDAwMDc0MDg2MzIwMDAwMDAwMDAwMDAwMEQ4REYKKzoxMDFBMjAwMDAyODAwMDMyMDAwMDAwMDAwMDEwMDAwMDU3NjE4NjNBN0EKKzoxMDFBMzAwMDAwMDAzMDAyMTIwMDAwQzgwMjAwMjBCMjAwMDAzMzAyOTEKKzoxMDFBNDAwMDEyMDEwMDVDMDg4MDIwQjIwMDAwMTYxMzEyMDAwMDYwMzIKKzoxMDFBNTAwMDAyODAyQ0IyMDAwMDQwMDEyQTAxMDBENDAyMDAwMEIyMzIKKzoxMDFBNjAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTAwMDA0MTAxQUIKKzoxMDFBNzAwMDAwMDAwMEY4MUY4MEZGOUEwMDAwMDAwMDAwMDAwMEQ0NjIKKzoxMDFBODAwMDAyNDAwMDMyMDgwMDAwMDAwMDAwMDAwMDg4Q0Q4NTM3QzkKKzoxMDFBOTAwMDAwMDAwMDAwMDAwMDAwMUNFOEExODIzRTAwMDAwMDAwRTEKKzoxMDFBQTAwMDAwMDAwMEE0MjI0MDg1M0EwMDAwMDAwMDAwMDgwMDUwMTkKKzoxMDFBQjAwMDA3ODA4NDMyMDAwMDNBMDIwNDAxMDA4MDcyQTA4MkJDRDgKKzoxMDFBQzAwMDAwMDAwMDAwMDAxQTAwNENDN0UxNzQzMjAwMDAwMDAwNjIKKzoxMDFBRDAwMDAwMDAwMDY4MDhFMTgxM0EwMDAwM0QwMjkwMDEwMDc4QjIKKzoxMDFBRTAwMEY5QTE4NkJBMDAwMDAwMDAwMDAwMDA3ODE5ODA5NzNBM0EKKzoxMDFBRjAwMDAwMDAwMDAwMDAyMDAwNTgwNzgwOTczMjAwMDAwMDAwMUUKKzoxMDFCMDAwMDAwMDAwMEQ4MDI4MDAwMzIwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDFCMTAwMDA3MDA4NDMyMDAwMDAwMDA0MDA4MDAwMDU3MjE4MDNBOEUKKzoxMDFCMjAwMDAwMDA0MTAyMTIwMDAwNENGMkMxMzhCNDAwMDAwMDAwNzUKKzoxMDFCMzAwMDAwMDAwMDAwMDgyMTgwM0EwMDAwMDAwMDAwMDAwMDA0QkUKKzoxMDFCNDAwMDA4QzA4MTMyMDAwMDAwMDA1MTAwMDBEODAyQzAwMDMyRkQKKzoxMDFCNTAwMDAwMDAwMDAwMDAwMDAwRDQwMjAwMDAzMjAwMDAwMDAwN0QKKzoxMDFCNjAwMENCMTkwMDIwMDcwMDAwMzIwMDAwMTYxMzAyMDEwMDgwOEMKKzoxMDFCNzAwMDMyODAyREJDMDcwMDRBMDIyQjAxMDA4NDc4MEEwMkI5OEEKKzoxMDFCODAwMDAwMDAwMDAwQ0IwMDAwODQxODQxODgzNDAwMDAwMDAwRjEKKzoxMDFCOTAwMDREMDAwMDAwNzdBMDgxM0UwMDAwMDAwMDAwMDgwMDAwMUEKKzoxMDFCQTAwMDA3MDA4MDMyMDAwMDE2MTMwNDEwMDAwMDA3QzA4NkIyNDAKKzoxMDFCQjAwMDAwMDAwMDAwMDAxODAwMDAwN0MwODQzMjAwMDAxNjEzNjcKKzoxMDFCQzAwMDlGMDAwMDI4RDhBMDgyQkMwMDAwNjgwMjA0MDAwMDFDMEUKKzoxMDFCRDAwMEQ4RTA4MUJDMDAwMDE2MTMwNDAxMDA4MDYyNjA4M0JDNjEKKzoxMDFCRTAwMDAwMDA1OTAyMkQwMDAwMDBEODIwODBCQTAwMDA1NDAyRTUKKzoxMDFCRjAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4MEYKKzoxMDFDMDAwMDczMEEwM0Y5MDAwMDU2MDIwNDAxMDA4MDIyODAyREJDRjMKKzoxMDFDMTAwMDAwMDA1OTAyQ0QwMTAwRDgwMjQwODQ5MjAwMDAxNjEzNDIKKzoxMDFDMjAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwOUEKKzoxMDFDMzAwMEEyODAyRkI2MDAwMDUzMDIwMDAwMDBGOEEyODAyRjk1NkEKKzoxMDFDNDAwMDAwMDA1QzAyMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzQUUKKzoxMDFDNTAwMDEyMDAwMDQ0MTJFMjM4QjIwMDAwNjYwMjAwMDAwMEQ4MTAKKzoxMDFDNjAwMDEyODAyRDlBMDAwMDAwMDAwMDAwMDA4NEY4NDE4ODM0QTIKKzoxMDFDNzAwMDAwMDAxNjEzMTIwMDAwNDQxMkUyMzhCMjE4MDAzNjAwQjkKKzoxMDFDODAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwNjQwMjA2MDEwMDgwRjYKKzoxMDFDOTAwMDIyODAyREJDMDAwMDE2MTMwNDAxMDA4MDAyODAyREJDQTAKKzoxMDFDQTAwMDAwMDAxNjEzODAwMTAwODBBMjgwMkZCNjAwMDA1RTAyQTMKKzoxMDFDQjAwMDY3MDAwMEY4QTI4MDJGQjUwMDAwNUYwMjAwMDAwMEU4NzYKKzoxMDFDQzAwMDAyQzAyMTkyMDAwMDE2MTMwNDAxMDA4MDcyODAyREJDMTYKKzoxMDFDRDAwMDAwMDAwMDAwMDAwMDAwRDgwMkMwMDAzMjAwMDBDOTEwNUYKKzoxMDFDRTAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwNDcwMjAwMDAwMDMwOTAKKzoxMDFDRjAwMDA4MDAwMDkyMDAwMDcwMDI4MDAwMDA4MEQyODAyRkI2QTEKKzoxMDFEMDAwMDAwMDA2QjAyMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwODgKKzoxMDFEMTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwNkQwMjA0MDEwMDgwNUUKKzoxMDFEMjAwMDIyODAyREJDMDAwMDcwMDIwMDAwMDBEODAyNDA4NDkyODYKKzoxMDFEMzAwMDAwMDAxNjEzMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzNjEKKzoxMDFENDAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNkEwMjAwMDAwMEY4MjcKKzoxMDFENTAwMEEyODAyRjk1MDAwMDAwMDBDRDAwMDA4NEY4NDE4ODM0NTcKKzoxMDFENjAwMDAwMDAxNjEzMTIwMDAwNDQxMkUyMzhCMjAwMDAwMDAwMTYKKzoxMDFENzAwMDAwMDAwMEQ0MDI0MDAwMzIwMDAwMDAwMDAwMDAwMEE0NzcKKzoxMDFEODAwMDIyQzA4MjNBMDAwMDc5MDIwNDAxMDA4MDQyMDA4NkJDMzEKKzoxMDFEOTAwMDAwMDAwMDAwMDAwODAwNTgwNzQwODczMjAwMDA3ODAyNjkKKzoxMDFEQTAwMDhGMDEwMDc0MTg0MDg3QkEwMDAwMDAwMDAwMDAwMDc0MjIKKzoxMDFEQjAwMDA4MDAwMDMyMDAwMDdCMDIwMDA0MDA1OEY3QTA4NjlBNTkKKzoxMDFEQzAwMDAwMDAwMDAwMDAwMDAwNzhGOUEwODYzQTI4MDAwMDAwMUEKKzoxMDFERDAwMDAwMDgwMDU4ODc4RDk3M0MwMDAwMDAwMDAwMDAwMEQ4RTQKKzoxMDFERTAwMDAyNDAwMDMyMTgwMDAwMDAwMDAwMDAwMEI3NjA4NTM5OTIKKzoxMDFERjAwMDA4MDAwMDAwMDAwODAwMDA4N0NEODUzNzAwMDA3RTAyNDMKKzoxMDFFMDAwMDEyMDAwMDRDRjJDMTM4QjQwMDAwMDAwMDAwMDAwMDQ4OEQKKzoxMDFFMTAwMDE4QTA4NDNBMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyNDQKKzoxMDFFMjAwMDAwMDAwMDAwMDAwMDAwODA1N0ExODYzQTQxMDAwMDAwMzkKKzoxMDFFMzAwMDAwMDYwMDhDMDcwMDM2MzIwMDAwMDAwMDAwMDgwMDgwMTkKKzoxMDFFNDAwMDA3QzA4NTMyMDAwMDAwMDAwMDEwMDA4QzA3NDA4NTMyN0EKKzoxMDFFNTAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDAzMjAwMDAxNjEzQ0QKKzoxMDFFNjAwMDA0MDAwMDU4MDg4MDcxQjIwMDAwMDAwMDAwMDAwMDgwRUIKKzoxMDFFNzAwMDA4ODAwMDMyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5RTkKKzoxMDFFODAwMDAwMDA4QzAyMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzQUIKKzoxMDFFOTAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwODgwMjAwMDAwMEY4QjgKKzoxMDFFQTAwMEEyODAyRjk1MDAwMDg4MDIwNDAxMDA4MDE4MDA4OEJDRTEKKzoxMDFFQjAwMDAwMDA4RjAyOTAxOTAwNThFODlDODVCQTAwMDAwMDAwQ0QKKzoxMDFFQzAwMDAwMDAwMDU4MTg4MDg1M0EwMDAwMDAwMDAwMTgwMDgwQ0IKKzoxMDFFRDAwMDA3ODU4NTMwMDAwMDk0MDIwNDAxMDA4MDQyMDA4NkJDMjIKKzoxMDFFRTAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjAwMDAwMDAwQTYKKzoxMDFFRjAwMDAwMDAwMDA4ODk4MDcxMzcwMDAwOTUwMjAwMTIwMDg0RkMKKzoxMDFGMDAwMDI3RTQ4MjkyMDAwMDAwMDAwMDEyMDA4NDA3MDAwMDMyRTMKKzoxMDFGMTAwMDAwMDA5OTAyMjcwMDAwRkMwMjAwODVCMjAwMDA5OTAyMkYKKzoxMDFGMjAwMDA0MDAwMDgwNDI2MDNEQjMxODAwMDAwMDAwMDAwMEY4OEIKKzoxMDFGMzAwMDczOEEwMzM5OTUwMjM2MDAwMDAwMDBDMDAyMDAzNjkyMTEKKzoxMDFGNDAwMDAwMDAxNjEzMTIwMDAwNUM1MjgxMkNCNDAwMDA5RDAyQTgKKzoxMDFGNTAwMDA0MDEwMDgwMDI4MDgyQkMwMDAwMTYxMzgwMDAwMDgwMTMKKzoxMDFGNjAwMEEyODAyRkI2MDAwMEEzMDEwMDAwMDBENDAyMDAwMDkyNUUKKzoxMDFGNzAwMDAwMDBBMDAyMDQwMTAwMThEOEEwODFCQzAwMDBDOTEwMTQKKzoxMDFGODAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwMkQwMkM3MDEwMDMwM0YKKzoxMDFGOTAwMDA4MDAwMDkyMDAwMDJEMDJDNzAxMDA2Q0Q4RTA4NjlBNkMKKzoxMDFGQTAwMDA4MDAwMDAwQzYwMTAwRjg5MzQwMDEzOTE5MDAwMDAwNDQKKzoxMDFGQjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0RkEKKzoxMDFGQzAwMDA5NDA4MUQyMDAwMDAwMDAwMDAwMDAxNDA4NDU4MTMwNjMKKzoxMDFGRDAwMDAwMDAxNjEzMTIwMTAwQkMwOEMwMjFCMjAwMDAxNjEzNDUKKzoxMDFGRTAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwRjYwMzgwMDE4MDgwNzAKKzoxMDFGRjAwMDMyMEI2QUI2MDAwMDZBMTAwMDAwMDAzQzAzMDAzOEYyQTEKKzoxMDIwMDAwMDAwMDBBQzAyMDQwNjAxODAwMkMwNkVCQzAwMDAxNjEzODIKKzoxMDIwMTAwMDg3MDYwMUVDNTZFMDZFQkEwMDAwRjMwMzAwMDAwMDgwNzIKKzoxMDIwMjAwMDAyMDAwMDkwMDAwMDE2MTM4NzA2MDFFQzU2RTA2RUJBMUQKKzoxMDIwMzAwMDAwMDAwMDAwMDAwMDAwRjg0MjgwMkYzNDA4QzAxNjEzOTIKKzoxMDIwNDAwMDEyMDAwMDQwQTJDRDM5QjIxODAwMzYwMDAwMDAwMEY4OUUKKzoxMDIwNTAwMDczMEEwM0Y5MDAwMDE2MTMwM0I4MDAwMDA5QzA2RUJEMkYKKzoxMDIwNjAwMEIyMDIwMDAwMDAwMDAwODg4MjBEOTAzQTJGMDA1RTA2NDgKKzoxMDIwNzAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwMTYxMzAwMDAwMDgwQ0IKKzoxMDIwODAwMDAyMDAwMDkwMkMwMDVFMDYwMDAwMDAxQzA4MDAzNjkyNDIKKzoxMDIwOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzREMKKzoxMDIwQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNzUKKzoxMDIwQjAwMDAyMDAwMDkwMzgwMDVFMDYwMDAwMDAxQzA4MDAzNjkyMDYKKzoxMDIwQzAwMDM5MDA1RTA2MDAwMDAwMUMwODAwMzY5MjA4MDAwMDAwN0YKKzoxMDIwRDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwMTYxMzEyMDEwMEJDMDMKKzoxMDIwRTAwMDA4QzAyMUIyMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2MjUKKzoxMDIwRjAwMDAwMDAxNjEzODAwMDgwODAzMjBCNkFCNjAwMDA2QTEwNjAKKzoxMDIxMDAwMDAwMDAwMDNDMDMwMDM4RjIwMDAwQzEwMjA0MDAwMDgwMUYKKzoxMDIxMTAwMDUyNDA4MkJDMDAwMDE2MTMwNDAxMDA4MDYyNDA4MkJDNjEKKzoxMDIxMjAwMDAwMDAxNjEzMDQwNTAxODAwMkMwNkVCQzAwMDAwMDAwMTAKKzoxMDIxMzAwMDAwMDAwMEY4NDI4MDJGMzQwOEMwMTYxMzEyMDAwMDQwM0YKKzoxMDIxNDAwMEEyQ0QzOUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NzYKKzoxMDIxNTAwMDAwMDAwMDAwMDAwNDAxNzgwOUMwNkUzMjAwMDAwMDAwOTkKKzoxMDIxNjAwMDAwNjIwMUVDMDY4MDk3MzIwOTAwMDAwMDAwMDAwMDEwQjgKKzoxMDIxNzAwMDA5MDAzNjMyMDAwMDgwMTIwMDA0MDExNDA5QzA2RUQyM0EKKzoxMDIxODAwMDAyMDBDQjAyMDRCODAwODA4MkNENkVCQzA4MDAxNjEzOUEKKzoxMDIxOTAwMDA0QjkwMDgwODJDRDZFQkMwMDAwMDAwMDAwMDYwMUVDOTYKKzoxMDIxQTAwMDA2NDAwMDMyMDAwMENDMDJCNTAwMDBEODAyMDAwMEIyQTgKKzoxMDIxQjAwMDAwMDAwMDAwQTUwMDgwQTAzNjBCNkEzNDAwMDAwMDAwN0IKKzoxMDIxQzAwMDAwMzAwMkU4MDZDMDJDMzIwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDIxRDAwMDA3ODAwMDMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3QzEKKzoxMDIxRTAwMDE4MDUwMTAwMDAwODAwMDBDNzhEOTczQTAwMDAwMDAwQTQKKzoxMDIxRjAwMDAwMDAwMDc4OTlDMDJDMzcxODAxMDAwMDAwMDAwMDc4MUEKKzoxMDIyMDAwMDg5OEQ5NzNBMDAwMDE2MTMwMjEwMDAwMDg3QkY5N0JBMTUKKzoxMDIyMTAwMDAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMjAwMDAxNjEzMDYKKzoxMDIyMjAwMDEyMDAwMDQ4RjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4NkYKKzoxMDIyMzAwMDczMEEwM0Y5MDAwMDAwMDAwMDE4MDFFMDA2MDAwMDMyRjQKKzoxMDIyNDAwMDAwMDAwMDAwMDAwMDAwRjg4Mjg1MkYzMDAwMDA2ODA2QzIKKzoxMDIyNTAwMDAwMDAwMDFDMDgwMDM2OTIwODAwMDAwMDAwMDAwMEY4OTIKKzoxMDIyNjAwMDkzNDAwMTM5MDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyQ0UKKzoxMDIyNzAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjYwMDAxNjEzQTUKKzoxMDIyODAwMDA0MDEwMEY4ODI4RDJGQjAwNzAwMDAwMDAwMDAwMDEwNEMKKzoxMDIyOTAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5NDA4MUQyOEIKKzoxMDIyQTAwMDAwMDBFNTAyODAwMDgwODAzMjBCNkFCNjE3MDAwMDAwNTMKKzoxMDIyQjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMzgwMDE0QkYKKzoxMDIyQzAwMDA5QzA2RUQyMDAwMEY2MDMwMDAwMDA4MDAyMDAwMDkwRkEKKzoxMDIyRDAwMDAwMDA2QTEwMDAwMDAwMzgwMzAwMzhGMjAwMDBFODAyMzUKKzoxMDIyRTAwMDA0MDIwMTgwMDJDMDZFQkMwMDAwRjMwMzAwMDIwMUVDOTYKKzoxMDIyRjAwMDU2RTA2RTlBMDAwMDAwMDBDMDAzMDFFQzU2RTA2RTNBMTIKKzoxMDIzMDAwMDAwMDAxNjEzODAwMTAwODAwMjgwMkZCNjAwQzAxNjEzNTMKKzoxMDIzMTAwMDEyMDAwMDQwQTI4RDM5QjIxODAwMzYwMDAwMDAwMEY4MEIKKzoxMDIzMjAwMDczMEEwM0Y5MjAwMDE2MTMwNDM5MDA4MDgyQ0Q2RUJDQjUKKzoxMDIzMzAwMDEyMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNzgKKzoxMDIzNDAwMDAwMzAwMDE0MDkwMDZFRDIxNTAwMDAwMDAwMDAwMDEwREIKKzoxMDIzNTAwMDA5MDAzNjMyMTgwMDAwMDAwMDAyMDExNDg5Q0Q2RTM3RTIKKzoxMDIzNjAwMDAwMDA4MDEyMDAyMDAxMTQ4OTVCOTFEMjFCMDBGNDAyNEUKKzoxMDIzNzAwMDM4MDEwMDEwMDkwMDM2QjIwMDAwODAxMjAwMzAwMTE0NEMKKzoxMDIzODAwMDA5MDA2RUQyMTgwMDAwMDAwMDAwMDAxMDA5MDAzNjMyNkIKKzoxMDIzOTAwMDA4MDAwMDAwMDAwMDAwMTQ3OTBCMTQzODEwMDA4MDEyQUYKKzoxMDIzQTAwMDAwNTAwMTE0QTk1QjkxRDkwMDAwRjkwMjA0MjgwMTE0MUUKKzoxMDIzQjAwMDA5MDA2RUIyMUMwMDgwMTIwMDAwMDAxMDA5MDAzNkQyMjUKKzoxMDIzQzAwMDAwMDAwNTAzMzgyODAwMTgwOTAwNkVCMjAwMDBGRDAyNjUKKzoxMDIzRDAwMDA0MjEwMTA4NjkyNDZFQkMwMDAwMTYxMzA5MDEwMDgwNjUKKzoxMDIzRTAwMDAyMDAwMEIwMDMwMDY4MDYwMDAwMDAxQzA4MDAzNjkyREUKKzoxMDIzRjAwMDAwMDAwMTAzMDIzMDAwODA4MjlCOTBCQzAwMDAwMDAzQkIKKzoxMDI0MDAwMDA2MDMwMTgwMTJDMDZFQkMwNDAwNjgwNjAwMDAwMDFDQjgKKzoxMDI0MTAwMDA4MDAzNjkyMDUwMDY4MDYwMDAwMDAxQzA4MDAzNjkyOEQKKzoxMDI0MjAwMDAwMDAxNjEzMDQzMDAwODAwMjAwNkVCMjAwMDAwNDAzQTYKKzoxMDI0MzAwMDA2MDMwMTgwMTJDMDZFQkMwQjAwNjgwNjAwMDAwMDFDODEKKzoxMDI0NDAwMDA4MDAzNjkyMEMwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNTYKKzoxMDI0NTAwMDAwMDAwODAzMDQyMTAxMDg2OTI0NkVCQzAwMDAxNjEzNjMKKzoxMDI0NjAwMDA5MDEwMDgwMDIwMDAwQjAwMzAwNjgwNjAwMDAwMDFDQTMKKzoxMDI0NzAwMDA4MDAzNjkyMDAwMDBDMDMwMjMwMDA4MDgyOUI5MEJDNjIKKzoxMDI0ODAwMDAwMDAwQjAzMDYwMzAxODAxMkMwNkVCQzA0MDA2ODA2NDYKKzoxMDI0OTAwMDAwMDAwMDFDMDgwMDM2OTIwNTAwNjgwNjAwMDAwMDFDQzEKKzoxMDI0QTAwMDA4MDAzNjkyMDAwMDBFMDM5RjMxMDEwQzY5MjQ2RUJDQjcKKzoxMDI0QjAwMDAwMDAwMDAwMDAwMDAwMEMwOTAwMDAzMjAwMDAxMjAzQzAKKzoxMDI0QzAwMDA0MzEwMDA0ODk5QjkwQkMwMDAwMTEwMzA2MDMwMTgwQzUKKzoxMDI0RDAwMDEyQzA2RUJDMjAwMDY4MDYwMDAwMDAxQzA4MDAzNjkyODYKKzoxMDI0RTAwMDIxMDA2ODA2MDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzNDgKKzoxMDI0RjAwMDlGMDAwMDgwMDI0MDkwQjIwMDAwMTUwMzA0MDIwMTgwOUEKKzoxMDI1MDAwMDEyQzA2RUJDMjIwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNTMKKzoxMDI1MTAwMDAwMDAxNzAzMDQwMTAwMDAzOUE0OTBCQzIzMDA2ODA2RTIKKzoxMDI1MjAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwMTYxMzlGMDAwMDgwNzcKKzoxMDI1MzAwMDAyMDA5MEIyMjQwMDY4MDYwMDAwMDAxQzA4MDAzNjkyRDkKKzoxMDI1NDAwMDA4MDAxNjEzMEMwMDAwRjg2MzQwMDFCOTEwMDAxRDAzQzkKKzoxMDI1NTAwMEM1MDEwMENDMDIyMDE1OTgwODAwOTEwMzBDMDAwMEY4N0EKKzoxMDI1NjAwMDQzNDAwMUI5MTAwMDAwMDBDNTAxMDBDQzAyMjAxNTM4MUQKKzoxMDI1NzAwMDAwMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNDgKKzoxMDI1ODAwMDAwMDAwMDE0MDkwMDgwRDIwMDAwMTYxMzEyMDEwMEJDRTQKKzoxMDI1OTAwMDA4QzAyMUIyMDAwMDZBMTAwMDAwMDAzQzAzMDAzOEYyQkQKKzoxMDI1QTAwMDAwMDAwMDAwMDAwMDAwNUMwODA1ODAzMDAwMDAxNjEzRTkKKzoxMDI1QjAwMDA0MDEwMDgwMDI0MDJEQkMwMDAwMTYxMzAyMDEwMDgwQkYKKzoxMDI1QzAwMDgyRkE4NUJDMDAwMDE2MTMwNjAxMDA4MDkyRkE4NUJDRDEKKzoxMDI1RDAwMDAwMDAyNzAzMzYwMTAwODAwMjAwMDBCMDBGMDA2ODA2RUIKKzoxMDI1RTAwMDAwMDAwMDFDMDgwMDM2OTIxMDAwMDAwMDAwMkMwMjAwQzEKKzoxMDI1RjAwMEE5REI4NTM5MDAwMDE2MTMxMjAwMDA1NDAyQTQzOEIyN0EKKzoxMDI2MDAwMDAwMDAwMDAwMDAwODAyOEMwOEMwNkUzMjAwMDAwMDAwQ0MKKzoxMDI2MTAwMDAwMEMwMjk4Mjg4MDZFMzcwMDAwMDAwMDAwMDAwMDlDMkIKKzoxMDI2MjAwMDM4MjIxNDM3MDAwMDMyMDMwNDMwMDAyODA4MDA2RUIyNEMKKzoxMDI2MzAwMDAwMDAxNjEzMDQxMDAwNkMwODAwNkVCMjAwMDAwMDAwQzkKKzoxMDI2NDAwMDAwMTgwMDRDMDgwMDZFMzIwMDAwMTYxMzA0MjAwMDE4MTkKKzoxMDI2NTAwMDA4MDA2RUIyMDAwMDAwMDAwMDNDMDAxNDA4ODA2RTMyREEKKzoxMDI2NjAwMDA1MDAzNTAzMDAzODAyMDA3OEUxNkU5OTAwMDAwMDAwOTMKKzoxMDI2NzAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMzgwMjc4NEIKKzoxMDI2ODAwMDA5QzA2RTMyMDUwMDAwMDA2ODA4MDAwMDc3QTE5NzM5ODQKKzoxMDI2OTAwMDAwMDAzNzAzMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwMDMKKzoxMDI2QTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDU0NTQwMUZDMTQKKzoxMDI2QjAwMDAyQzA2RTMyMTQxMDNCMDMwNDAwMDA4MEEyMEQ3MkIwMDEKKzoxMDI2QzAwMDAwMDBGMzExMDAwMDAwMjgwOUMwMDJGMjBFMDA2ODA2QTUKKzoxMDI2RDAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwMTYxMzA2MDkwMDgwNTYKKzoxMDI2RTAwMDgyQkQ3MkJDMDAwMDRGMDMzMzE1MDBBNDAyQzA3MkIyNTkKKzoxMDI2RjAwMDAwMDA4QzAzODAwMTAwODBCMjAxNzJCNjAxMDE0MjAzMjgKKzoxMDI3MDAwMDA0MjkwMDgwODI4RDc0QkMwODBBOEMwMzA0MkQwMDgwOEIKKzoxMDI3MTAwMDgyOEQ3NEJDMDAwMDAwMDAwMDMwMDA3QzA4MDA3NTMyMUYKKzoxMDI3MjAwMDAwMDA0OTAzMDAzODAwODgxODAwNzU5QzA4MEE4QzAzRDMKKzoxMDI3MzAwMDA0MjkwMDgwODI4RDc0QkMxMDAwMDAwMDAwMkMwMDdDRjUKKzoxMDI3NDAwMDg4OEQ3NTM3MDAwMDAwMDAwMDMwMDA3QzY4REQ4NzMyMUUKKzoxMDI3NTAwMDAwMDA0ODAzOUYzOTAwODgxODgwNzVCQzEwMDAwMDAwRjUKKzoxMDI3NjAwMDAwMzQwMDg4ODg4RDc1MzcwMDAwNDkwMzAwMDAwMDg4MTgKKzoxMDI3NzAwMDE4ODA4ODlDMTAwMDAwMDAwMDM0MDA4ODY4OUQ4ODM5MEIKKzoxMDI3ODAwMDM3MDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRkYKKzoxMDI3OTAwMDAwMDAwMDE0MDlDMDg3RDIzQjAwMDAwMDAwMDAwMDEwQjgKKzoxMDI3QTAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODA4OEQyMkYKKzoxMDI3QjAwMDAwMDA1MDAzOUZGMTAxODA4MkRCODdCQzAwMDA4QzAzODYKKzoxMDI3QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwMzgwMDAwMDgwNjgKKzoxMDI3RDAwMEIyMDE3MkI2MDAwMDAwMDAwMDA4MDA0ODA4MDA3NTMyMUYKKzoxMDI3RTAwMDAwMDAwMDAwMDAxMDAwNzAwODAwNzUzMjAwMDAwMDAwQkEKKzoxMDI3RjAwMDAwMUMwMDc0MzhBMjc1MzcwMDAwNTUwMzgzMUIwMDc4NTUKKzoxMDI4MDAwMDA4QzA3NEIyMDAwMDAwMDAwMDAwMDBGOEMyODAyRjM0M0QKKzoxMDI4MTAwMDJGMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNzYKKzoxMDI4MjAwMDAwMDAwMDE0MDk4MDg0RDIzNDAwMDAwMDAwMDAwMDEwNzEKKzoxMDI4MzAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5MDA4N0QyMUYKKzoxMDI4NDAwMDAwMDA2QjAzOUY3ODAxODBDMjIxNkVCQzAwMDA1RDAzMTUKKzoxMDI4NTAwMDlGOTkwMTY0ODgxQjg3QkMwMDAwNkMwMzlGNjgwMTY0MUEKKzoxMDI4NjAwMDg4NUI4NkJBMDAwMDAwMDAwMDAwMDA2NDA4MDAwMDMyQTcKKzoxMDI4NzAwMDAwMDAwMDAwMDAxNjAwQTQwMkMwNzIzMjAwMDAwMDAwMzgKKzoxMDI4ODAwMDAwM0MwMkE0QjI1QjJBM0EwMDAwMDAwMDAwM0EwMjc4NDEKKzoxMDI4OTAwMDA5QzA2RTMyMDAwMDZEMDMwODAxMDAwNEU4QTU3NUJDOTQKKzoxMDI4QTAwMDNGMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyQzYKKzoxMDI4QjAwMDAwMDQwMDE0Njk1RDgwRDkxMDAwOEMwMzBCMDEwMDFDMUEKKzoxMDI4QzAwMDA4MDAzNkIyMDAwMDZCMDMwNEExMDE4MDgyOUI4NEJDMjcKKzoxMDI4RDAwMDAwMDA2ODA2OUY5ODAxODBDMjIxNkVCQzAwMDA2ODA2NTcKKzoxMDI4RTAwMDA2QjEwMTgwODI1Qjg3QkMwMDAwOEIwMzBCMDEwMDgwNzYKKzoxMDI4RjAwMDAyMDAwMEIwMDAwMDZDMDMwNDk5MDE4MEMyMjE2RUJDOEMKKzoxMDI5MDAwMDAwMDA4OTAzMDJENDAxODA5MkZCNkVCQzE2MDA2ODA2QTkKKzoxMDI5MTAwMDAwMDAwMDFDMDgwMDM2OTIxNzAwNjgwNjAwMDAwMDFDMkEKKzoxMDI5MjAwMDA4MDAzNjkyMUMwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNjEKKzoxMDI5MzAwMDNGMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyMzUKKzoxMDI5NDAwMDAwMDQwMDE0Njk1RDgwRDkwMDAwNzEwMzA0QTEwMTgwQjYKKzoxMDI5NTAwMDgyOUI4NEJDMDAwMDc4MDMwNkE4MDE4MDgyNUI4MEJDNTcKKzoxMDI5NjAwMDAwMDA3NTAzMDRBOTAxODAwMjAwNkVCQzAwMDA4QTAzMDgKKzoxMDI5NzAwMDA0QTEwMTgwODI5Qjg0QkMwMDAwOEEwMzA0MDEwMDgwQzIKKzoxMDI5ODAwMDEyNDA4MEJDMTQwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNEIKKzoxMDI5OTAwMDAwMDA4QTAzOUZBMDAxNzgyOTIxNkVCQzAwMDA4QTAzRjEKKzoxMDI5QTAwMDAyMDEwMDgwMTJBMDk3QkMwMDAwNkIwMzAwMDAwMDgwQjEKKzoxMDI5QjAwMDAyMDAwMDkwMDAwMDg1MDMwNDAwMDA4MDAyODA4MkJDQjkKKzoxMDI5QzAwMDAwMDAxNjEzMDQwMjAxODAwMkMwNkVCQzAwMDA3RTAzRUEKKzoxMDI5RDAwMDAyMDAwMDgwQTI2MDgwQkMwNjAwNjgwNjJDMDEwMDFDN0EKKzoxMDI5RTAwMDA4MDAzNkIyMDBDMDgyMDMwNDAxMDA4MEEyOEQyRkIwMUYKKzoxMDI5RjAwMDA2MDA2ODA2MDAwMDAwMUMwODAwMzY5MjAwMDA4MjAzRjIKKzoxMDJBMDAwMDA0MDAwMDgwQTI2MDgwQkMwMDAwODEwMzA2MDMwMTgwRjYKKzoxMDJBMTAwMDEyQzA2RUJDMDkwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNTcKKzoxMDJBMjAwMDBBMDA2ODA2MDAwMDAwMUMwODAwMzY5MjAwMDA4NDAzQkIKKzoxMDJBMzAwMDA2MDMwMTgwMTJDMDZFQkMwNzAwNjgwNjAwMDAwMDFDN0YKKzoxMDJBNDAwMDA4MDAzNjkyMDgwMDY4MDYwMDAwMDAxQzA4MDAzNjkyNTQKKzoxMDJBNTAwMDAyMDA2ODA2MzgwMTAwMUMwODAwMzZCMjAwMDA4ODAzMzYKKzoxMDJBNjAwMDAyMEMwMjgwQTI1QjgwQkMxRjAwNjgwNjAwMDAwMDFDRjQKKzoxMDJBNzAwMDA4MDAzNjkyMUUwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMEUKKzoxMDJBODAwMDAwMDA4RDAzMDAwMDAwMjgwOTQwMDA5MjAwMDA4RDAzMjMKKzoxMDJBOTAwMDAwMDAwMDI4MDk4MDAwOTIwMDAwOEQwMzAwMDAwMDI4M0IKKzoxMDJBQTAwMDA5QzAwMDkyMDAwMDhEMDMwMDAwMDAyODA5MDAwMTkyNzcKKzoxMDJBQjAwMDMwMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRDMKKzoxMDJBQzAwMDAwMDAwMDE0MDk4MDkyRDIwRTAwRjMxMTAwMDAwMDFDRDcKKzoxMDJBRDAwMDA4MDAzNkYyMDAwMDY4MDYwMDAwMDA4MDAyMDAwMDkwNDYKKzoxMDJBRTAwMDEwMDAxNjEzMkEwMDAwQ0MwMjIwMTVCODBEMDAwMDAwQkIKKzoxMDJBRjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0QUYKKzoxMDJCMDAwMDA5MDA4MEQyMDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyRDcKKzoxMDJCMTAwMDAwMDA2QTEwMDAwMDAwM0MwMzAwMzhGMjFEMDA5OTAzMTkKKzoxMDJCMjAwMDgwMDEwMDc4MDlFMDAwQjgwMDAwMTYxMzA0MDEwMDgwNUQKKzoxMDJCMzAwMDMyODA5N0JDMUQwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMTkKKzoxMDJCNDAwMDAwMDAxNjEzMDQwMTAwODAyMjgwOTdCQzE1MDA2ODA2NUYKKzoxMDJCNTAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwMDAwMDAwMDAwMDFDNkQKKzoxMDJCNjAwMEE4MDUyODMwMDAwMDE2MTMwNDAwMDA4MDAyQzAyQ0JDMDkKKzoxMDJCNzAwMDAwMDAxNjEzMTIwMTAwQkMwOEMwMjFCMjAwMDAxNjEzOTkKKzoxMDJCODAwMDgwMDAwMDgwQTI4MDJGQjY2MDAwMTYxMzA0MDEwMEY4QjgKKzoxMDJCOTAwMDgyOEQyRkIwMDgwMDAwMDAwMDAwMDBGODgzNDAwMTM5NEEKKzoxMDJCQTAwMDM2MDBBNDAzMDQwMDAwODA4MkNEODFCQzA1MDAwMDAwMzMKKzoxMDJCQjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0RUUKKzoxMDJCQzAwMDA5QzA4MUQyMDAwMDAyMDQ4MDAxODA4MDMyMEI2QUI2MDUKKzoxMDJCRDAwMDAwMDA2QTEwMDAwMDAwMzgwMzAwMzhGMjJDMDA2ODA2N0MKKzoxMDJCRTAwMDAyMDEwMDgwODJDRDgxQkMwMDAwNUUwNjAwMDAwMDgwRjIKKzoxMDJCRjAwMDAyMDAwMDkwMDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyQjAKKzoxMDJDMDAwMDAwMDBBQjAzMUQ0MTAyNUNGODAxNjhCNDQxMDBGMzAzMEUKKzoxMDJDMTAwMDAwMDAwMEY4QTI4RDJGOTEzNTAwMDAwMDAwMDAwMDEwODgKKzoxMDJDMjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5QzA4NUQyNkQKKzoxMDJDMzAwMDEwMDAwMDAwRDAyQzAyMDBBOURCODUzOTAwMDAyOTAzMTgKKzoxMDJDNDAwMDEyMDEwMDU0MDJBNDM4QjIwMDAwMTYxMzAwMDAwMDgwRTQKKzoxMDJDNTAwMDAyMDAwMDkwMDAwMEI0MDMwNEIwMDA4MDAyMDA2RUJDQ0IKKzoxMDJDNjAwMDAwMDBCNDAzODBCOTAwODA4MjgwNkVCNjAwMDAwMDEzQkIKKzoxMDJDNzAwMDAwNzgwMTYwMDgwMDZFRjIzMDAwNUUwNkQ3MDAwMDFDOEMKKzoxMDJDODAwMDA4MDAzNjkyMDAwMEI2MDM4MDAxMDA4MEQyODEyRkI2ODIKKzoxMDJDOTAwMDMxMDA1RTA2RDcwMDAwMUMwODAwMzY5MjAwMDBCODAzMjEKKzoxMDJDQTAwMDgwMDEwMDgwNDI4MTJGQjYzNTAwNUUwNkQ3MDAwMDFDRUYKKzoxMDJDQjAwMDA4MDAzNjkyMDAwMEM1MDMwNEE4MDEwODA5MDA2RUIyOUUKKzoxMDJDQzAwMDAwMDAwMDAwMDAyMDAyMDg4OTlCOTAzRTAwMDAwMDAwRTgKKzoxMDJDRDAwMDAwQTAwMTA4ODk5QjkwM0EwMDAwQzUwMzlGODgwMTA4NjUKKzoxMDJDRTAwMDg5OUI5MEJDMDAwMDAwMDAwMDM0MDIwMDA5QzA2RTNEQ0EKKzoxMDJDRjAwMDAwMDAwMDAwMDAwQzAyMDQwOUE0NkUzNzAwMDBDMTAzQUMKKzoxMDJEMDAwMDAyMDAwMDgwMTJBNDkwQkMwMDAwMDAwMDAwMDAwMDA4MzcKKzoxMDJEMTAwMDE5ODA5MDM3MDAwMEM1MDMwMjAxMDI4MDgyOUI5MEJDOUQKKzoxMDJEMjAwMDMxMDA1RTA2RDcwMDAwMUMwODAwMzY5MjAwMDBDNTAzODMKKzoxMDJEMzAwMDA0QjAwMDgwMDIwMDZFQkMwMDEyQzUwMzA0MDEwMDgwRDQKKzoxMDJENDAwMEEyOEQyRkIwMzIwMDVFMDZENzAwMDAxQzA4MDAzNjkyMUMKKzoxMDJENTAwMDAwMDBGMzAzMDAwMDAwRjg3MjgxMkY5NTAwMDAwMDAwQ0UKKzoxMDJENjAwMDAwMDAwMEY4NDI4MDJGMzQwOEMwQUYwMjEyMDEwMDQwN0EKKzoxMDJENzAwMEEyQ0QzOUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQkUKKzoxMDJEODAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTA4MDAwMDAwMkUKKzoxMDJEOTAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MEMKKzoxMDJEQTAwMDA5QzA4MUQyMDAwMDE2MTMwNDAwMDA4MDAyQzAyQ0JDQjAKKzoxMDJEQjAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjYwMDAxNjEzNUEKKzoxMDJEQzAwMDA0MDEwMEY4ODI4RDJGQjAwMDAwMDIwNDgwMDE4MDgwOTEKKzoxMDJERDAwMDMyMEI2QUI2MDAwMDAwMDAwMDAwMDAxNDA4NDA5MDMyNzgKKzoxMDJERTAwMDAwMDA2QTEwMDAwMDAwMzgwMzAwMzhGMjJDMDA2ODA2NkEKKzoxMDJERjAwMDAyMDEwMDgwODJDRDgxQkMwMDAwNUUwNjAwMDAwMDgwRTAKKzoxMDJFMDAwMDAyMDAwMDkwMDgwMDAwMDAwMDAwMDBGODkzNDAwMTM5MjMKKzoxMDJFMTAwMDA4MDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyODcKKzoxMDJFMjAwMDAwMDAwMDE0ODk0RDgxRDcwMDAwMTYxMzA0MDAwMDgwQjMKKzoxMDJFMzAwMDAyQzAyQ0JDMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2QjgKKzoxMDJFNDAwMDYwMDAxNjEzMDQwMTAwRjg4MjhEMkZCMDAwMDAwMjA0MDgKKzoxMDJFNTAwMDgwMDE4MDgwMzIwQjZBQjYwMDAwNkExMDAwMDAwMDM4RTIKKzoxMDJFNjAwMDAzMDAzOEYyMDAwMERGMDMwNDIwMDE4MDUyMjA2RUJDMTIKKzoxMDJFNzAwMDAwMDAxNjEzMDkwMTAwODAwMjAwMDBCMDI2MDA2ODA2NTkKKzoxMDJFODAwMDAwMDAwMDFDMDgwMDM2OTIyNTAwNjgwNjAwMDAwMDFDQTcKKzoxMDJFOTAwMDA4MDAzNjkyMDAwMEU1MDMwNDAxMDBEODFFODBFREJDNTYKKzoxMDJFQTAwMDAwMDBFMTAzQjcwMDAwRDgwRUMwRURCMjAwMDBFNDAzNUIKKzoxMDJFQjAwMDA0MDEwMDgwNDIzQkVFQkMwMDAwMDAwMDAwMDAwMEUwODYKKzoxMDJFQzAwMDFFMDBFRTNBMDAwMDAwMDBBNzAwMDBEMDBFMDBFRTMyMTcKKzoxMDJFRDAwMDAwMDAwMDAwMDA3NDg2Q0MwMjgwNkMzMjAwMDAwMDAwMEMKKzoxMDJFRTAwMDAwMDAwMDAwMDk0MEU3MzIwMDAwRTkwMzgwMDE4MDgwMTMKKzoxMDJFRjAwMDMyMEI2QUI2MzYwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyQTkKKzoxMDJGMDAwMDAwMDBFQjAzMDQwMTAwODA0MkM1MkNCQzAwMDBFQzAzNzAKKzoxMDJGMTAwMDAwMDAwMENDMDIwMDAwOTIwMDAwMDAwMDAwMDAwMENDODUKKzoxMDJGMjAwMDEyQzAyQzNBMDAwMEU3MDMwNDAxMDAwMDE5MDA5MEJDMTUKKzoxMDJGMzAwMDAwMDAwMDAwMDA3NDg2QzgwNkMwMkMzMjA4MDAwMjA0OUQKKzoxMDJGNDAwMDAwMDAwMEY4QzM0MDAxOTkwMDAwRjEwMzA0MDAwMDgwNzQKKzoxMDJGNTAwMDAyODA4MEJDMDAwMDE2MTMwNDU1MDE4MEIyREIyRkJDMzgKKzoxMDJGNjAwMDAwMDA1NDEwMDAwMDAwMkMwOTAwMDBGMjAwMDBGNjAzREQKKzoxMDJGNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjUwMzA0MDAwMDgwQzMKKzoxMDJGODAwMDAyODA4MEJDMDAwMDE2MTMwNDU1MDE4MEIyREIyRkJDMDgKKzoxMDJGOTAwMDAwMDA1NDEwMDAwMDAwMkNGOTAxMDBGNDAwMDBGRjAzQjEKKzoxMDJGQTAwMDA0MDAwMDI4MDk4MDgwQjIwMDAwMDAwMDAwMDAwMEQ4NjIKKzoxMDJGQjAwMDAyMDAwMDMyMDAwMDgxMTEwMDAwMDAwODA4MDAwMEQyNjkKKzoxMDJGQzAwMDAwMDBGRjAzMDQwMDAwODAwMjgwOTJCQzE4MDAzNjAwNUQKKzoxMDJGRDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDIwNDgwMDEwMDgwNzkKKzoxMDJGRTAwMEEyODAyRkI2MDAwMDAyMDQxMjAxMDAwMDA5QzAyMUIyMjUKKzoxMDJGRjAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTAyMDQzNjAwQ0MKKzoxMDMwMDAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDIwNDgwMDEwMDgwMkYKKzoxMDMwMTAwMEEyODAyRkI2MDAwMDAyMDQxMjAxMDAwMDA5QzAyMUIyRjQKKzoxMDMwMjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwRTEKKzoxMDMwMzAwMDAwMDAwMEY4MDIwMDAwMzIxODAwMzYwMDAwMDAwMEY4MUUKKzoxMDMwNDAwMDczOEEwMjk5MTAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyODkKKzoxMDMwNTAwMDAyMDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMjEKKzoxMDMwNjAwMDAwMDAwMEU0MDMwMDM2MzIwNDAwMDAwMTAwMDAwMEUwMkMKKzoxMDMwNzAwMDAzMDAzNzMyQUEwNDAwMDAwMDAwMDBFNDAzMDAzNjMyRTcKKzoxMDMwODAwMDA5MDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwRUEKKzoxMDMwOTAwMDAwMDAwMENDMEYwMDAwMzIwMDA3MDAwMDAwMDAwMEU0MzgKKzoxMDMwQTAwMDAzMDAzNjMyMDYwMDAwMDEwMDAwMDBFMDAzMDAzNzMyNjIKKzoxMDMwQjAwMDIwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjA4MDAwMDAxOTgKKzoxMDMwQzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAxMDAwMDAwMDAwMEU0Q0YKKzoxMDMwRDAwMDAzMDAzNjMyMDUwMDAwMDEwMDAwMDBFMDAzMDAzNzMyMzMKKzoxMDMwRTAwMDMwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjA3MDAwMDAxNTkKKzoxMDMwRjAwMDAwMDAwMEUwMDMwMDM3MzIwMEEwMDAwMDAwMDAwMEU0MDAKKzoxMDMxMDAwMDAzMDAzNjMyMDgwMDAwMDgwMDAwMDBFMDAzMDAzNzMyRjgKKzoxMDMxMTAwMDAwMDAwMDAwMDAwMDAwQTAwMjAwMDAzMjAwMDAwMDAwREIKKzoxMDMxMjAwMDAwMDAwMDAwMEIwMDAwMzIwMDAwMTYwNDhCMDEwMEEwMUMKKzoxMDMxMzAwMDEyMDAyQUJBMDAwMDAwMDAwMDAwMDBBODAyMDAwMDMyQkQKKzoxMDMxNDAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDAxOTA0NDkKKzoxMDMxNTAwMDA2MDEwMDgwMDI4MDJBQkMwMDAwMDAwMDAwMDAwMDlDRTQKKzoxMDMxNjAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyMjMKKzoxMDMxNzAwMDAwMDAwMDAwMDAwMDAwQ0MwMjAwMDAzMjAwMDAwMDAwNEYKKzoxMDMxODAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQwNjMKKzoxMDMxOTAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEQzAyMDAwMDMyRUIKKzoxMDMxQTAwMDAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjAwMDAwMDAwRjMKKzoxMDMxQjAwMDAwMDAwMEM4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMEM0NEYKKzoxMDMxQzAwMDAyMDAwMDMyMDAwMDFDMDQ4NTAxMDA5QzEyQzAyOUJBRDQKKzoxMDMxRDAwMDAwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjBCMDAwMDA0OTEKKzoxMDMxRTAwMDAwMDAwMEUwMDMwMDM3MzI4MDAwMDAwMDAwMDAwMEU0MkYKKzoxMDMxRjAwMDAzMDAzNjMyMTMwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMDEKKzoxMDMyMDAwMDAwMjAwMDAwMDAwMDAwRTQwMzAwMzYzMjBDMDAwMDA0M0YKKzoxMDMyMTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0N0UKKzoxMDMyMjAwMDAzMDAwNjMyMEYwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMDQKKzoxMDMyMzAwMDAwMDQwMTAwMDAwMDAwRTQwMzAwMzczMjBEMDAwMDA0MjgKKzoxMDMyNDAwMDAwMDAwMEUwMDMwMDM3MzIwMDA0MDAwMDAwMDAwMEU0NEEKKzoxMDMyNTAwMDAzMDAzNjMyMTQwMDAwMDQwMDAwMDBFMDAzMDAzNzMyOUYKKzoxMDMyNjAwMDlGMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjE1MDAwMDA0NTcKKzoxMDMyNzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0MUUKKzoxMDMyODAwMDAzMDAzNjMyMTgwMDAwMDQwMDAwMDBFMDAzMDAzNzMyNkIKKzoxMDMyOTAwMDYwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFEMDAwMDA0NUUKKzoxMDMyQTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0RUUKKzoxMDMyQjAwMDAzMDAwNDMyMUUwMDAwMDQwMDAwMDBFMDAzMDAzNzMyNjcKKzoxMDMyQzAwMDcwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFGMDAwMDA0MUMKKzoxMDMyRDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0QkUKKzoxMDMyRTAwMDAzMDAwMDMyMjAwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMzkKKzoxMDMyRjAwMEEwMDMwMDAwMDAwMDAwRTQwMzAwMzYzMjE3MDAwMDA0QzEKKzoxMDMzMDAwMDAwMDAwMEUwMDMwMDM3MzI0MDAwMDAwMDAwMDAwMEU0NEQKKzoxMDMzMTAwMDAzMDAzNjMyMUIwMDAwMDQwMDAwMDBFMDAzMDAzNzMyRDcKKzoxMDMzMjAwMDYwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFDMDAwMDA0Q0UKKzoxMDMzMzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0NUQKKzoxMDMzNDAwMDAzNDAwMDMyMTYwMDAwMDQwMDAwMDBFMDAzMDAzNzMyQTIKKzoxMDMzNTAwMDAwMDEwMDAwMDAwMDAwRTQwMzAwMzYzMjFBMDAwMDA0RkYKKzoxMDMzNjAwMDAwMDAwMEUwMDMwMDM3MzIyMDAxMDAwMDAwMDAwMEU0MEMKKzoxMDMzNzAwMDAzMDAzNjMyMTkwMDAwMDQwMDAwMDBFMDAzMDAzNzMyNzkKKzoxMDMzODAwMDgwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjBCMDAwMDAxNjIKKzoxMDMzOTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAxMDAwMDAwMDAwMEU0RkMKKzoxMDMzQTAwMDAzMDAzNjMyMEMwMDAwMDEwMDAwMDBFMDAzMDAzNzMyNTkKKzoxMDMzQjAwMEZFRkYwMDAwMDAwMDAwQUMwMjAwMzYzMjAwMDAwMDAwRkEKKzoxMDMzQzAwMDAwMDAwMDAwMDkwMDAwMzIxODAwMDAwMDAwMDAwMEY4QjIKKzoxMDMzRDAwMDAzNjQwMjM5MDAwMDRGMDQ4NTAxMDAwMDE5MDA5MEJBMEYKKzoxMDMzRTAwMDI1MjYwMDAwMDAwMDAwRTQwMzAwMzYzMjAxMDAwMDAxNDEKKzoxMDMzRjAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMDgwMDEKKzoxMDM0MDAwMDBGMDAwMDMyMDAwMDAwMDAwMDAwMDA4NDBGMDAwMDMyQjYKKzoxMDM0MTAwMDA4MDAwMDAwMDAwMDAwRjhGMzQwMDEzOTA4MDAwMDAwMzcKKzoxMDM0MjAwMDAwMDAwMEY4RTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4NDcKKzoxMDM0MzAwMEMzNDAwMTM5MDgwMDAwMDAwMDAwMDBGOEIzNDAwMTM5MjIKKzoxMDM0NDAwMDA4MDAwMDAwMDAwMDAwRjhBMzQwMDEzOTA4MDAwMDAwNTcKKzoxMDM0NTAwMDAwMDAwMEY4OTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4NjcKKzoxMDM0NjAwMDgzNDAwMTM5MDgwMDAwMDAwMDAwMDBGODczNDAwMTM5NzIKKzoxMDM0NzAwMDA4MDAwMDAwMDAwMDAwRjg2MzQwMDEzOTA4MDAwMDAwNjcKKzoxMDM0ODAwMDAwMDAwMEY4NTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4NzcKKzoxMDM0OTAwMDQzNDAwMTM5MDgwMDAwMDAwMDAwMDBGODMzNDAwMTM5QzIKKzoxMDM0QTAwMDA4MDAwMDAwMDAwMDAwRjgxMzQwMDEzOTAwMDAwMDAwOEYKKzoxMDM0QjAwMDAwMDAwMEY4MDM4MDAwMzIwMDAwMDAwMDAwMDAwMEM4OTcKKzoxMDM0QzAwMDNGODBGQzM1MDAwMDAwMDAwMDAwMDA5QzAyMDAwMDMyM0MKKzoxMDM0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAzMjNFMDAwMDAwNzkKKzoxMDM0RTAwMDAwMDAwMEQwMDIwMDM2MzIwMDAwMDAwMDAwMDAwMDI4N0EKKzoxMDM0RjAwMDAzNDAzODMyMDAwMDE2MTMwNDAxMDA4MEQyMDEzMEI2QjgKKzoxMDM1MDAwMDAwMDA2NzA0MDQwMTAwRDAxMjAwMkRCQ0EwMDQwMDAwREMKKzoxMDM1MTAwMDAwMDAwMEU0MDMwMDM2MzIwMzAwMDAwMTAwMDAwMEUwNzgKKzoxMDM1MjAwMDAzMDAzNzMyMDAwMDAwMDAxNzAwMDBEMDAyMDAwMDMyMTQKKzoxMDM1MzAwMDAwMDAwMDAwMDAwMDAwQUNFMTAwMDAzNDAwMDAwMDAwQ0EKKzoxMDM1NDAwMDAwMDAwMUUwMDYwMDAwMzIwMDAwMDAwMDAwMDgwMUU0NzUKKzoxMDM1NTAwMDA2MDAwMDMyMDAwMDAwMDAwMDBFMDFFQzA2MDAwMDMyMDAKKzoxMDM1NjAwMDAwMDAwMDAwMDAxMDAxRTAwNjAwMDAzMjAwMDAwMDAwMzIKKzoxMDM1NzAwMDAwMDAwMEQwMTIwMDJEM0EzRTAwNkYwNDAyMDEwMDgwQ0UKKzoxMDM1ODAwMDgyMEQyREJDMDIwMDAwMDAwMDAwMDA5Q0FFMEQwMjMyMzYKKzoxMDM1OTAwMDAwMDAwMDAwMDAwMDAwQTgwMjAwMDAzMjMwMDAwMDAwMUYKKzoxMDM1QTAwMDAwODg4NkNDMDcwMDM2MzIwMDAwMDAwMDAwOEE4NkNDRjYKKzoxMDM1QjAwMDA3MDAwMDNBMDAyNDAwMDAwMDAwMDAwNDA5ODAzNjMyQjEKKzoxMDM1QzAwMDAwMDAxNjEzMTIwMDAwNjQwMjQwOTBCMjAwMDAwMDAwRDgKKzoxMDM1RDAwMDAwMDAwMDA0Mjk0MDkwM0EwMDAwN0IwNDEyMDAwMDc4QUIKKzoxMDM1RTAwMDA5QzAyMEIyMDAwMDE2MTM4MDAxMDA4MEYyODE5N0I2NTYKKzoxMDM1RjAwMDFEMDAxNjEzODAwMTAwNzhFOUU1MDBCODAwMDAwMDAwMDYKKzoxMDM2MDAwMDAwMDAwMDc4MDk0NTkwMzAwMDAwNzkwNDAyMDEwMDgwMzQKKzoxMDM2MTAwMEMyODI5N0JDMDAwMDAwMDAwMDAwMDA4NDAyMDAwMDMyNUIKKzoxMDM2MjAwMDAwMDAwMDAwMDAwMDAwQ0MwMzAwMDAzMjAwMDA4MTA0MTQKKzoxMDM2MzAwMDhFMDEwMDgwMDI0MDI4QjIwMDAwQkQxMDAwMDAwMEQ4QkEKKzoxMDM2NDAwMDAyMDAwMEQyQUExMTAwMDAwMDAwMDA4QzBFMDAzNjMyRTkKKzoxMDM2NTAwMDUyMDAwMDAwMDAwMDAwNzQwRTAwMzYzMjE4MDAwMDAwMTYKKzoxMDM2NjAwMDAwMDAwMEU0MDMwMDM2MzIwOTAwMDAwMjAwMDAwMEUwMjAKKzoxMDM2NzAwMDAzMDAzNzMyRkVDQTAwMDAwMDAwMDBFNDAzMDAzNjMyQzcKKzoxMDM2ODAwMDBBMDAwMDAyMDAwMDAwRTAwMzAwMzczMjAwMDA4QzA0NTIKKzoxMDM2OTAwMDEyMDEwMDAwMDk0MDIwQjIwMDAwOEEwNDAwMDAwMDgwRUUKKzoxMDM2QTAwMDAyMDAwMDkwMDAwMDhDMDQxMjAwMDAwNDA5NDAyMEIyQzcKKzoxMDM2QjAwMDAwMDA4RjA0OUYwMTAwODAwMjAwOTBCMjAwMDA4RTA0ODEKKzoxMDM2QzAwMDEyMDAwMDA4MDk0MDIwQjIwMjAwOEEwNDA0MDEwMDc4QjgKKzoxMDM2RDAwMDA5MjQxN0I4MDYwMDAwMDAwMDAwMDA3ODA5NjQxNjM4QjUKKzoxMDM2RTAwMDAwMDA4QTA0MDQwMTAwODAwMjgxOTdCQ0ZFMDAwMDAwRjMKKzoxMDM2RjAwMDAwMDAwMDQ0MDMwMDM2MzJGRTAwMzYwMDAwMDAwMDQ4OUYKKzoxMDM3MDAwMDAzMDAzNjkyMDAwMDE2MTMxMjAwMDAwMDA5NDAyMEIyOTgKKzoxMDM3MTAwMDAwMDA5NTA0MTIwMDAwMDQwOTQwMjBCMjAwMDA5ODA0NDMKKzoxMDM3MjAwMDlGMDEwMDgwMDIwMDkwQjIwMDAwOTcwNDEyMDAwMDA4ODAKKzoxMDM3MzAwMDA5NDAyMEIyMDAwMDAwMDAwMDAwMDBCNDAyMDA5MDMyRjYKKzoxMDM3NDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMTUKKzoxMDM3NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQUUKKzoxMDM3NjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOEMKKzoxMDM3NzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRTUKKzoxMDM3ODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwN0UKKzoxMDM3OTAwMDAyMDAwMDkwMDYwMEFBMDQwMDAwMDAwQzA5NjQxNjk4QkMKKzoxMDM3QTAwMDAwMDBBMTAyMDAwMDAwMTQwODQwOTA5MjAwMDBEQjAyMUIKKzoxMDM3QjAwMDAwMDAwMDE0MDg0MDkwOTIzNDAwQzkwMzAwMDAwMDFDNkYKKzoxMDM3QzAwMDA4MDAzNjkyMTIwMEM5MDMwMDAwMDAxQzA4MDAzNjkyNUYKKzoxMDM3RDAwMDNBMDBDOTAzMDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzQ0UKKzoxMDM3RTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQkEwMjAwMDAwMDE0RjcKKzoxMDM3RjAwMDA4NDA5MDkyMDAwMERFMDQwMDAwMDA4MDAyMDAwMDkwNkIKKzoxMDM4MDAwMDAwMDBENDAzMDAwMDAwMTQwODQwOTA5MkFCMDQwMDAwQjQKKzoxMDM4MTAwMDAwMDAwMDg4ODJDRDkwM0EwRDAwQ0QwNDAwMDAwMEZDMkQKKzoxMDM4MjAwMDAyRTQxNjk4MEQwMERGMDQwMDAwMDBGQzAyRTQxNjk4ODQKKzoxMDM4MzAwMDBEMDBFODA0MDAwMDAwRkMwMkU0MTY5ODAwMDBGNjA0MDUKKzoxMDM4NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwNTAwMDAwMDAwNjEKKzoxMDM4NTAwMDA5NDA5MDlEMDAwMDA2MDUwMDAwMDA4MDAyMDAwMDkwRDUKKzoxMDM4NjAwMDAwMDAxMDA1MDAwMDAwODAwMjAwMDA5MDAwMDAxQTA1MTIKKzoxMDM4NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjQwNTAwMDAwMDAwMEQKKzoxMDM4ODAwMDA5NDA5MDlEMDAwMDJCMDUwMDAwMDA4MDAyMDAwMDkwODAKKzoxMDM4OTAwMDAwMDAzNDA1MDAwMDAwMDAwOTQwOTA5RDAwMDAzQjA1MzkKKzoxMDM4QTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQUEwNTAwMDAwMDAwNTcKKzoxMDM4QjAwMDA5MDAwMDkyMDAwMEFBMDUwMDAwMDAwMDA5NDAwMDkyRTMKKzoxMDM4QzAwMDFEMDdBQzA1MDAwMDAwQTAwMjAwMzY5MjAwMDBCQTA1RkEKKzoxMDM4RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMkQKKzoxMDM4RTAwMDAyMDAwMDkwMDAwMERFMDQwMDAwMDBEQzBGNDA5MDkyMTcKKzoxMDM4RjAwMDAwMDA3RTA1MDAwMDAwODAwMjAwMDA5MDAwMDA4MzA1QUIKKzoxMDM5MDAwMDAwMDAwMEQ0MDIwMDAwOTIxMDAwOTgwNTAwMDAwMDg0MUUKKzoxMDM5MTAwMDFGNjQxNDk4MDAwMERFMDQwMDAwMDBFQzBFNDA5MDkyM0EKKzoxMDM5MjAwMDAwMDBBNDA1MDAwMDAwODAwMjAwMDA5MDAwMDBERTA0RkEKKzoxMDM5MzAwMDAwMDAwMEQ0MEU0MDkwOTIwMDAwQTcwNTAwMDAwMDgwMTcKKzoxMDM5NDAwMDAyMDAwMDkwMDAwMDRFMDYwMDAwMDBEQzBFNDA5MDkyNDUKKzoxMDM5NTAwMDAwMDBDQjA1MDAwMDAwODAwMjAwMDA5MDA4MDBEMDA1QTgKKzoxMDM5NjAwMDAwMDAwMDUwMUYyNDE2OTgwMDAwRTgwNTAwMDAwMEQ4NTEKKzoxMDM5NzAwMDAyMDAwMDkyMEQwMEYzMDUwMDAwMDBGQzAyRTQxNjk4MUUKKzoxMDM5ODAwMDAwMDBGNDA1MDAwMDAwRDAwMjAwMDA5MjAwMDAxRjAxQkEKKzoxMDM5OTAwMDAwMDAwMEQwMDIwMDAwOTIwMDAwMTUxMzAwMDAwMDgwMUIKKzoxMDM5QTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNEEKKzoxMDM5QjAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTAwMDAwMDAwRkEKKzoxMDM5QzAwMDAwMDAwMDc4MDk0NTkwMzAwMDAwMTYxMzA2MDEwMDgwQzEKKzoxMDM5RDAwMDIyODA5N0JDM0YwMDE2MTMwNDAxMDA4MDgyMEQwMEIwQzYKKzoxMDM5RTAwMDAyMDBEMTA0QjAwMDAwQTBGMjBCMDBCOTAwMDAwMDAwRkEKKzoxMDM5RjAwMEEwMDAwMDA0NkI0MTkwMzQwMDAwMDIwNDgwMDEwMDgwQUMKKzoxMDNBMDAwMDAyNDBCMEI2MDAwMDAyMDQwNDAwMDA4MDAyODBCMEJDOTYKKzoxMDNBMTAwMDAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwOUEKKzoxMDNBMjAwMDAwMDAwMEE4MjJDMDJGMzcwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDNBMzAwMDY3MDEwMDM0MDA0MjAwMDAwMDA4MDAwMDg3OEQyQTNBMjgKKzoxMDNBNDAwMDAwMDAxNjEzMDQxMDAwMDAwNzAwQjBCMjAwMDAwMDAwRDAKKzoxMDNBNTAwMDAwMTgwMDAwMDcwMEQwMzIwMDAwMTYxMzEyMDAwMDQ4QzIKKzoxMDNBNjAwMEYyQzEzOEI0MTgwMDAwMDAwMDAwMDBGODczMEEwMzM5RUUKKzoxMDNBNzAwMDAyMDQzNjAwMDAwMDAwQzAwMjAwMzY5MjA4MDAwMjA0NzIKKzoxMDNBODAwMDAwMDAwMEY4OTM0MDAxOTkwMDAwRTIwNDlGMDAwMDgwQ0MKKzoxMDNBOTAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyQ0YKKzoxMDNBQTAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAyMDBFMjA0MzIKKzoxMDNBQjAwMEIwMDAwMEEwRjIwQjAwQjkwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDNBQzAwMDBCODA5MDMyMDAwMDAwMDAwMDAwMDAwMDBENDA5MDMyOUEKKzoxMDNBRDAwMDAwMDAwMDAwQTAwMDAwMDQzQjQwQjAzMTAwMDBERTA0MDQKKzoxMDNBRTAwMDA0MDAwMDgwMDJDMDJGQkM4NDExREUwNDAwMDAwMDhDQTIKKzoxMDNBRjAwMDBFMDAzNjkyMDAwMDE2MTMwMjAwMDA4MDAyQzEyRkJDOTcKKzoxMDNCMDAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTAyMDBFQTA0QjgKKzoxMDNCMTAwMEIwMDAwMEEwRjIwQjAwQjkwMDAwRUQwNDgwMDEwMDgwQUQKKzoxMDNCMjAwMDEyNDBCMEI2MDAwMDAwMDAwMDAwMDAwNDNCNDBCMDMzN0IKKzoxMDNCMzAwMDAwMDAwMDAwMDAwMDAwMDRGRDRCRDAzNTAwMDAwMDAwMzQKKzoxMDNCNDAwMDAwMDAwMDA4MEIwMDAwMzIwMDAwMDAwMEEwMDAwMDBDODQKKzoxMDNCNTAwMDFCRTRCMDMyMDAwMDAyMDQwQjAwMDA4MDAyMDAwMEIwNDEKKzoxMDNCNjAwMDAwMDBGMzA0MDQwMDAwODAwMjQwOTBCMjFGMDAwMjA0MzEKKzoxMDNCNzAwMDAwMDAwMDgwMTE0MDAwOTkwMDAwRjIwNDA0MDAwMDgwNjEKKzoxMDNCODAwMDEyM0VGOEJBMDAwMDAwMDAwMDAwMDA4MDAxMDBGODMyODgKKzoxMDNCOTAwMDAwMDAwMjA0MDAwMDAwOTAwMTQwRjg5MjAwMDAxNjEzOUIKKzoxMDNCQTAwMDgwMDAwMDgwMDI4MUZDQjYwMDAwRkEwNDlGMDAwMDgwQzMKKzoxMDNCQjAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyQUUKKzoxMDNCQzAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAwMDAxNjEzRDAKKzoxMDNCRDAwMDA0MDEwMDgwNDI4NTkwQjAwMDAwMDAwMDAwMDAwMEU0NzUKKzoxMDNCRTAwMDAzODA5MDMyMDkwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMzcKKzoxMDNCRjAwMDAwMDAwMDAwMDAwMDAwRTQwMzQwOTAzMjBBMDAwMDA0Q0UKKzoxMDNDMDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwREUwNDAwMDAwMEM4QkUKKzoxMDNDMTAwMDBGODFGQzk0MDAwMDE2MTMwMjAxMDA4MDcyNDI5MEJDRDgKKzoxMDNDMjAwMDAwMDAxNjEzMDYwMTAwODBFMjQyOTBCQzAwMDAxNjEzNEIKKzoxMDNDMzAwMDA0MDEwMDc4MDk2NDkwQjUwMDAwMDAwMDAwMDAwMEU0NzEKKzoxMDNDNDAwMDczMDA5MDNDMTAwMDAwMDQwMDAwMDBFMDAzMDAzNzMyRDUKKzoxMDNDNTAwMDAwMDBERTA0MDAwMDAwODAwMjAwMDA5MDAwMDAwOTA1NjIKKzoxMDNDNjAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4RTkKKzoxMDNDNzAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyM0QKKzoxMDNDODAwMDAwMDAxNjEzMDQwMTAwODA0Mjg1OTBCMDAwMDAwMDAwN0YKKzoxMDNDOTAwMDAwMDAwMEU0MDM4MDkwMzIwMTAwMDAwNDAwMDAwMEUwMTYKKzoxMDNDQTAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFMDBGODA5MDMyNzcKKzoxMDNDQjAwMDAwMDAwMDAwMDAwMDAwRTQwMzQwOTAzMjAyMDAwMDA0MTUKKzoxMDNDQzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwREUwNDAwMDAwMEU0RTIKKzoxMDNDRDAwMDBGNDA5MDkyMDAwMDEzMDU5RjAwMDA4MDAyMDA5MEIyRjgKKzoxMDNDRTAwMDAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjAwMDAwMDAwQzEKKzoxMDNDRjAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMTYxMzA0MDEwMDgwMUEKKzoxMDNEMDAwMDQyODU5MEIwMDAwMDAwMDAwMDAwMDBFNDAzODA5MDMyODMKKzoxMDNEMTAwMDAzMDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwNTAKKzoxMDNEMjAwMDAwMDAwMEE4MEU4MDkwMzIwMDAwMDAwMDAwMDAwMEU0QjcKKzoxMDNEMzAwMDAzNDA5MDMyMDQwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMkEKKzoxMDNENDAwMDAwMDBERTA0MDAwMDAwQUMwRTQwOTA5MjAwMDAxRDA1NTMKKzoxMDNENTAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4RjgKKzoxMDNENjAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyNEMKKzoxMDNENzAwMDAwMDAxNjEzMDQwMTAwODA0Mjg1OTBCMDAwMDAwMDAwOEUKKzoxMDNEODAwMDAwMDAwMEU0MDM4MDkwMzIwNTAwMDAwNDAwMDAwMEUwMjEKKzoxMDNEOTAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDAzNDA5MDMyQ0UKKzoxMDNEQTAwMDA2MDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwQkQKKzoxMDNEQjAwMDAwMDAwMDQ0MEY4MDkwMzIwMDAwREUwNDAwMDAwMDQ4NDQKKzoxMDNEQzAwMDBGNDA5MDkyMDAwMDE2MTMwNjAxMDA4MDgyNDI5MEJDQzIKKzoxMDNERDAwMDAwMDAxNjEzMDQwMTAwNzgwOTY0OTBCNTAwMDAyODA1NUUKKzoxMDNERTAwMDA0MDEwMDgwODI0MjkwQkMwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDNERjAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDBFNDAzMDA5MDMyREYKKzoxMDNFMDAwMDEyMDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDBERTA0NkUKKzoxMDNFMTAwMDAwMDAwMDQwMUY0MDkwOUMwMDAwMkUwNTlGMDAwMDgwODUKKzoxMDNFMjAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyM0IKKzoxMDNFMzAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAwMDAxNjEzNUQKKzoxMDNFNDAwMDA0MDEwMDgwNDI4NTkwQjAwMDAwMDAwMDAwMDAwMEU0MDIKKzoxMDNFNTAwMDAzODA5MDMyMDcwMDAwMDQwMDAwMDBFMDAzMDAzNzMyQzYKKzoxMDNFNjAwMDAwMDAwMDAwMDAwMDAwRTQwMzQwOTAzMjA4MDAwMDA0NUQKKzoxMDNFNzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwREUwNDAwMDAwMDgwOTQKKzoxMDNFODAwMDAyMDAwMDkwMDAwMDE2MTMwNjAxMDA4MDgyNDI5MEJDRTAKKzoxMDNFOTAwMDAwMDAxNjEzMDQwMTAwNzgwOTY0OTBCNTAwMDAzODA1OEQKKzoxMDNFQTAwMDA0MDEwMDgwODI0MjkwQkMwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDNFQjAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDBFNDAzMDA5MDMyMUUKKzoxMDNFQzAwMDExMDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDBERTA0QUYKKzoxMDNFRDAwMDAwMDAwMEZDMUY0MDkwOUMwMDAwM0UwNTlGMDAwMDgwRjkKKzoxMDNFRTAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyN0IKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAzMDkwMDAwQkEKKzoxMDNGMDAwMDAwMDAwMDI4MDgwMDM2MzIwMDAwNTcwNTAwMDAwMDMwOEQKKzoxMDNGMTAwMDA4MDAzNkQyMDAwMDYxMDUwMDAwMDA0NDA4ODAwMEQyOEQKKzoxMDNGMjAwMDAwMDA0NzA1MDQwMTAwODAwMjAwODRCMjAzMEUwMDAwNzcKKzoxMDNGMzAwMDAwMDAwMDI4MDgwMDM2MzI4MDAwNTcwNTAwMDAwMDMwREQKKzoxMDNGNDAwMDA4MDAzNkQyMDAwMDYxMDUwMDAwMDA0NDA4QzAwMEQyMUQKKzoxMDNGNTAwMDAwMDA0NzA1MDQwMTAwODAwMjAwODRCMjAwMDA0RTA1MDUKKzoxMDNGNjAwMDAwMDAwMDQ0MDgwMDAxOTI4MDAyMDAwMDAwMDAwMDAwRjAKKzoxMDNGNzAwMDA3MDAzNjMyOEMwNTAxMDAwMDA4MDAwMDA3MDAzNzMyQzgKKzoxMDNGODAwMDAwMDAxNjEzMDQxMDAwMDAwNzgwOTBCMjAwMDAwMDAwMkIKKzoxMDNGOTAwMDAwMTgwMDAwMDc0MDkwMzIwMDAwMDAwMDAwMDAwMDQ4QjgKKzoxMDNGQTAwMEYyQzEzODM0MDAwMDE2MTMxMjAwMDA4MDAyMDAwMEIwODUKKzoxMDNGQjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTIwMDAwMDAwMjIKKzoxMDNGQzAwMDAwMDAwMEU0MDMwMDM2MzIwOTAwMDAwMjAwMDAwMEUwQjcKKzoxMDNGRDAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDAzNDA4NDMyOTgKKzoxMDNGRTAwMDBBMDAwMDAyMDAwMDAwRTAwMzAwMzczMjhDMDUwMTAwRTcKKzoxMDNGRjAwMDAwMDAwMEE4MDIwMDM3MzJBMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDQwMDAwMDA5MDAzNjMyMDAwMDAwMDAwMDAwMDBFMDA3MDAwMDMyMjYKKzoxMDQwMTAwMDAwMDA1NDA1MDYwMTAwMDAxOTAwOTBCQzAwMDBERTA0RjkKKzoxMDQwMjAwMDAwMDAwMDgwMDIwMDAwOTA4QzA1MDEwMDAwMDAwMEM4MjQKKzoxMDQwMzAwMDAyMDAzNzMyODAwMjAwMDAwMDAwMDAzQzA4MDAzNjMyRTcKKzoxMDQwNDAwMDAwMDAwMDAwMDAwMDAwMzQwODAwMDEzMjAwMDA1QzA1QTAKKzoxMDQwNTAwMDAyMDAwMDgwRDJFMDgzQkMwMDAwMDAwMDAwMDAwMDM0QjkKKzoxMDQwNjAwMDA4QzA4MzMyMDAwMDcyMDUwMDAwMDA4MDAyMDAwMEYwRUEKKzoxMDQwNzAwMDAwMDAwMDAwMDAwMDAwQTAwNzgwODMzMjAwMDAwMDAwNjQKKzoxMDQwODAwMDAwMDAwMDMwRDgyMDgzM0EwMDAwNUEwNTA0MDEwMDNDQUIKKzoxMDQwOTAwMEQ4RTA4M0JDMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDUwNTYKKzoxMDQwQTAwMDAwMDAwMDAwMDAwMDAwNDAwODAwMDAzMjAwMDAwMDAwOTYKKzoxMDQwQjAwMDAwMDAwMDQ4MDgwMDAwMzI4QzA1MDEwMDAwMDAwMEM4MjQKKzoxMDQwQzAwMDAyMDAzNzMyMDAwMjAwMDAwMDAwMDBDODgyOEQyQzNBNDYKKzoxMDQwRDAwMDgwMDAwMDAwMDAwMDAwM0MwODAwMzYzMjAwMDAwMDAwQjQKKzoxMDQwRTAwMDAwMDAwMDc4MDk4MDc4MzI1QTVBMDAwMDA0MDEwMDgwRUMKKzoxMDQwRjAwMDgyOEQ5NzVDMDAwMDZBMDUwMjAxMDA0OEE4OUU4NEJBODAKKzoxMDQxMDAwMDAwMDAwMDAwMDAwMDAwNDgxODgwODQzQTAwMDA2ODA1QTQKKzoxMDQxMTAwMDA2MDEwMDNDMjhDMDgzQkMwMDAwMDAwMDAwMDAwMDc4QkQKKzoxMDQxMjAwMDA5ODU4NDMwMTAwMDAwMDAwMDAwMDA0ODg4OEQ4NDM2MjYKKzoxMDQxMzAwMDAwMDA2RjA1OTAwMTAwNDhFOEE1ODRCQTAwMDAwMDAwNjcKKzoxMDQxNDAwMDAwMDAwMDQ4MTg4MDg0M0EwMDAwMDAwMDAwMDAwMDQ4ODkKKzoxMDQxNTAwMDA4ODU4NDMwMDAwMDAwMDAwNDAxMDA4MDAyODU4NDVDMzIKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMTAwNDAwODQwMDA1MjAwMDAwMDAwNzQKKzoxMDQxNzAwMDAwMDAwMEU0MDMwMDgzMzIwMTAwMDAwMjAwMDAwMEUwQzAKKzoxMDQxODAwMDAzMDAzNzMyMEMwMDc4MDUwMDAwMDAyQ0Q4QTA4MkY5MUIKKzoxMDQxOTAwMDA1MDAwMDAyMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwQ0MKKzoxMDQxQTAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwMDAwMDAwMDEwMDM4MjQKKzoxMDQxQjAwMDA4NDAzRTcyMDAwMDAwMDAwMDAwMDBFNDAzQzA4MjMyQUMKKzoxMDQxQzAwMDAyMDAwMDAyMDAwMDAwRTAwMzAwMzczMjAyMDAwMDAyOUIKKzoxMDQxRDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMDgwMTMKKzoxMDQxRTAwMDAyMDAwMDMwMDAwMDdBMDU4MDAwMDA4MEYyNDAzRUI2RjgKKzoxMDQxRjAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDAwMDA4MTA1NDYKKzoxMDQyMDAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4NDMKKzoxMDQyMTAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyOTcKKzoxMDQyMjAwMDAwMDAwMDAwMDAwMDAwODQwRTgwOTAzMjAwMDBERTA0RDgKKzoxMDQyMzAwMDAwMDAwMDg4MEU0MDkwOTIwODAwMDAwMDAwMDAwMEY4ODYKKzoxMDQyNDAwMDkzNDAwMTM5MDAwMDg3MDU5RjAwMDA4MDAyMDA5MEIyNzIKKzoxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjAwMDAwMDAwNEIKKzoxMDQyNjAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMDAwMDAwMDAwMDIwMzIKKzoxMDQyNzAwMDA3NDBGNTMyMDAwMDAwMDAwMDA4MDAyMDA3MDAwMDMyNkYKKzoxMDQyODAwMDAwMDAwMDAwMDAxMDAwMjAwN0MwRjUzMjAwMDAwMDAwMTAKKzoxMDQyOTAwMDAwMTgwMDIwMDc0MEY2MzIwMDAwMDAwMDAwMjAwMDIwMzcKKzoxMDQyQTAwMDA3ODBGNjMyMDAwMDAwMDAwMDI4MDAyMDA3QzBGNjMyMjgKKzoxMDQyQjAwMDAwMDAwMDAwMDAzMDAwMjAwNzAwRjczMjAwMDAwMDAwN0UKKzoxMDQyQzAwMDAwMzgwMDIwMDc4MEZGMzIwMDAwMDAwMDAwMDAwMEQ4MDYKKzoxMDQyRDAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3NDAwOTMyMjgKKzoxMDQyRTAwMDAwMDAwMDAwMDAwODAwMDA3N0MwMjkzNzAwMDAwMDAwMkYKKzoxMDQyRjAwMDAwMTAwMDAwMDc4MDkwMzIwMDAwMDAwMDAwMTgwMDAwNEQKKzoxMDQzMDAwMDA3NDA5MDMyMDAwMDE2MTMxMjAwMDA0OEYyQzEzOEI0ODIKKzoxMDQzMTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwREUKKzoxMDQzMjAwMDAwMDAwMDA4QzgwMTAwMzQwMDAwRjYwMzAwMDAwMEZDOTMKKzoxMDQzMzAwMDAyMDAwMDkyMDAwMDlBMDU4MDAxMDA4MEYyNDE5MEI2RDAKKzoxMDQzNDAwMDAwMDA5QjA1MDAwMDAwQzgyRjgxRkM5NDAwMDAwMDAwQzUKKzoxMDQzNTAwMDAwMDAwMEM4MkY4MUZDMzUwMDAwMDAwMDAwMDAwMDgwMzQKKzoxMDQzNjAwMDBGNDU5MDMwMDAwMDlFMDUwMjAwMDA4MDAyN0VGOEJDRTAKKzoxMDQzNzAwMDAwMDAwMDAwMDAwMDAwODQwRjAwRjgzMjAwMDAwMDAwODAKKzoxMDQzODAwMDAwMDAwMDAwMTk0MEY4MzcwMDAwMDAwMDAwMDAwMDg0MjEKKzoxMDQzOTAwMDNGNDBGODM3MDAwMDAwMDAwMDAwMDA4NDBGNjRGODNBNDYKKzoxMDQzQTAwMDAwMDAwMDAwMDAwMDAwMDAxOTAwRjgzNzAwMDAwMDAwQzUKKzoxMDQzQjAwMDAwMDAwMDgwM0YwMEY4MzcwMDAwREUwNDAwMDAwMDgwQUQKKzoxMDQzQzAwMDBGMjRGODlBMDAwMEE2MDU4MDAxMDA4MEYyNDE5MEI2MDMKKzoxMDQzRDAwMDAwMDBERTA0MDAwMDAwQzgzRjgxRkM5NDAwMDBERTA0MDEKKzoxMDQzRTAwMDAwMDAwMEM4M0Y4MUZDOTUwMDAwQTkwNTA0MDEwMDgwODEKKzoxMDQzRjAwMDAyNDA5MEJDMDAwMDAwMDAwMDAwMDAwNDA5QzAwMDMyMzAKKzoxMDQ0MDAwMDAwMDBERTA0MDAwMDAwRTQxRTQwOTA5QzAwMDAwMDAwNUMKKzoxMDQ0MTAwMDAwMDAwMEE4MjIwMDkwMzcwMDAwREUwNDAwMDA4NkMwRTMKKzoxMDQ0MjAwMDA3NDA5MDkyMDgwMDAwMDAwMDAwMDBGODkzNDAwMTM5MTYKKzoxMDQ0MzAwMDBEMDAwMDAwMDAwMDAwRkMwMkU0MTYzODAwMDAwMDAwM0YKKzoxMDQ0NDAwMDAwMDAwMDAwMDkwMDAyMzIwMDAwQjQwNTA0MDAwMDgwRjIKKzoxMDQ0NTAwMDAyMDBCMEIyMDAwMDAwMDAwMDAwMDAwMDBCMDAwMDMyQkIKKzoxMDQ0NjAwMDIwMDAwMDAwMDAwMDAwQTA4MjBEMkEzQTAwMDBBRjA1RTUKKzoxMDQ0NzAwMDA0MDEwMDAwMTkwMDkwQkMwMDAwQjYwNTAwMDAwMDI4RUYKKzoxMDQ0ODAwMDc5MDEwMDk0MDAwMDAwMDAwMDAwMDBDODNGODBGQzM0NjcKKzoxMDQ0OTAwMDQwODAwMDAwMDAwMDAwMjgwOTgwMzYzMjAwMDA4MTExQjEKKzoxMDQ0QTAwMDAwMDAwMEQ4MDIwMDAwRDIwMDAwMDIwNDA0MDAwMDgwRDYKKzoxMDQ0QjAwMDAyODA5MkJDMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5NjMKKzoxMDQ0QzAwMDAyMDQzNjAwMDAwMDAwQzAwMjAwMzY5MkVBMDVDMDA1NzIKKzoxMDQ0RDAwMDA0MDEwMDgwODI0RDkwQkMwMDAwMDAwMDAwMDAwMEVDNTAKKzoxMDQ0RTAwMDBGMDAxNTMyMDBGRTFGMDAwMDAwMDBGMDBGMDAzNzMyRjEKKzoxMDQ0RjAwMEYwRkYwMDAwMDAwMDAwRTgwRjAwMzYzMjk4MDUwMDAwRDEKKzoxMDQ1MDAwMDAwMDAwMEY0MEYwMDM2MzIwMDAwQzYwNTAwMDAwMEM4QUQKKzoxMDQ1MTAwMDRGODBGQzk1MzYyMzE2MTMwNDAxMDA4MDgyNEQ5MEJDMTkKKzoxMDQ1MjAwMDAwMDAwMDAwMDAwMDAwRUMwRjgwMTQzMjAwRjgxRjAwQjMKKzoxMDQ1MzAwMDAwMDAwMEYwMEYwMDM3MzJDMEZGMDAwMDAwMDAwMEU4NkMKKzoxMDQ1NDAwMDBGMDAzNjMyOTgyNzAwMDAwMDAwMDBGNDBGMDAzNjMyQ0EKKzoxMDQ1NTAwMDAwMDAwMDAwMDAwMDAwQzg0RjgwRkMzNDA0MDAwMDAwOTAKKzoxMDQ1NjAwMDAwMDAwMDYwOEY0RDkwM0EwMDAwMTYxMzYwMDEwMDgwM0IKKzoxMDQ1NzAwMDAyMDAwMEIwMDAwMDE2MTM3QTAxMDA4MDAyMDAwMEIwQjMKKzoxMDQ1ODAwMDAwMDA0MjExMDAwMDAwODAwMjAwMDBEMDAwMDBERTA0QTQKKzoxMDQ1OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQ0QwNTgwMDEwMDgwMzYKKzoxMDQ1QTAwMDAyNDA5MEI2MDAwMDAwMDAwMDAwMDBDODZGODBGQzM0OUMKKzoxMDQ1QjAwMDAwMDBDRjA1ODAwMTAwODAxMjQwOTBCNjAwMDAwMDAwOEUKKzoxMDQ1QzAwMDAwMDAwMEM4NUY4MEZDMzQwMDAwREUwNDAwMDAwMDgwQjIKKzoxMDQ1RDAwMDAyMDAwMDkwMDAwMEQyMDUwNDAxMDA4MEIyNDE5MEIwQkEKKzoxMDQ1RTAwMDgwMDdERTA0MDAwMDAwQzg4RjhERkM5MTAwMDBENDA1MTgKKzoxMDQ1RjAwMDgwMDAwMDgwMTI0MDkwQjYwMDAwRDUwNTAwMDAwMEM4ODEKKzoxMDQ2MDAwMDdGODBGQzk1MDAwMDAwMDAwMDAwMDBDODdGODBGQzM0MjMKKzoxMDQ2MTAwMDAwMDBENzA1ODAwMDAwODAwMjQwOTBCNjAwMDBEODA1NTkKKzoxMDQ2MjAwMDAwMDAwMEM4OEY4MEZDOTUwMDAwMDAwMDAwMDAwMEM4NUEKKzoxMDQ2MzAwMDhGODBGQzM0MDAwMERBMDU4MDAwMDA4MDQyNDA5MEI2OTQKKzoxMDQ2NDAwMDAwMDBEQjA1MDAwMDAwQzg5RjgwRkM5NTAwMDAwMDAwMTIKKzoxMDQ2NTAwMDAwMDAwMEM4OUY4MEZDMzQwMDAwREQwNTgwMDAwMDgwNjEKKzoxMDQ2NjAwMDMyNDA5MEI2MDAwMERFMDUwMDAwMDBDOEFGODBGQzk1MjcKKzoxMDQ2NzAwMDAwMDAwMDAwMDAwMDAwQzhBRjgwRkMzNDAwMDBFMTA1MkQKKzoxMDQ2ODAwMDgwMDAwMDgwMjI0MDkwQjY4NDExMDAwMDAwMDAwMDhDNjEKKzoxMDQ2OTAwMDBFMDAzNjMyMDAwMEUzMDUwMDAwMDBDODFGODFGQzk1QzMKKzoxMDQ2QTAwMEFBMTEwMDAwMDAwMDAwOEMwRTAwMzYzMjAwMDAwMDAwNEQKKzoxMDQ2QjAwMDAwMDAwMEM4MUY4MUZDMzQwMDAwMTYxMzA2MDEwMDgwQjIKKzoxMDQ2QzAwMDgyMDJGNUJDMDAwMDE2MTMwMzAwMDA3ODA5MDBGNUJENTYKKzoxMDQ2RDAwMDAwMDAxNjEzMDQwMTAwODBFMjI1RjVCNTEwMDAwMDAwNkIKKzoxMDQ2RTAwMDAwMDAwMDRDMUYyNDE2MzgwMDAwREUwNDAwMDAwMDUwQkIKKzoxMDQ2RjAwMDFGMDBGNTlDODAwNzE2MTMwNDAwMDA4MDgyOERGQ0IwMUIKKzoxMDQ3MDAwMDAwMDBFQzA1OUYwMDAwODAwMjAwOTBCMjAwMDAwMDAwNTUKKzoxMDQ3MTAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDAwMDAwMDA0ODIKKzoxMDQ3MjAwMDA5QzBGRDMyMDAwMDAwMDAwMDAwMDAwMDE3MDBGNTNBNEIKKzoxMDQ3MzAwMDhDMDQwMTAwMDAwODAwMDAwNzAwMzczMjAwMDAxNjEzNDcKKzoxMDQ3NDAwMDA0MTAwMDAwMDc4MDkwQjIwMDAwMDAwMDAwMTgwMDAwNzQKKzoxMDQ3NTAwMDA3NDA5MDMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MzYKKzoxMDQ3NjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDBERTA0QTgKKzoxMDQ3NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwREUwNDAwMDAwMEVDNTkKKzoxMDQ3ODAwMDAzNDA5MDkyMDAwMDE2MTMwNDAwMDA4MDAyNDA5MEJDODkKKzoxMDQ3OTAwMDAwMDBGNTA1QjIwMDAwRDgwMjAwMDBCMjAwMDAwMDAwRTEKKzoxMDQ3QTAwMDAwMDIwMUVDMTZFNDZFM0EwODAwMDAwMDAwMDAwMEY4NzgKKzoxMDQ3QjAwMDkzNDAwMTM5MDAwMDFGMDYxNzEwMDFGODAyMDA2RUIyODUKKzoxMDQ3QzAwMDA2MDAwMDA2MDQwMTAwODA4MjhEMkZCMDAzMDAwMDAwNjcKKzoxMDQ3RDAwMDAwMDAwMEY4ODI4RDJGMzIwMEMwNjExMDAwMDAwMDI4MTgKKzoxMDQ3RTAwMDA5ODAzNkQyMDAwMDAwMDAwMDAyMDFFQzE2QzA2RTNDQzkKKzoxMDQ3RjAwMDAwMDAwMDAwMDAxODg2QzgwNjAwMDAzMjE4MDAzNjAwQ0QKKzoxMDQ4MDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDEwNjAwMDAwMEQwNjAKKzoxMDQ4MTAwMDAyMDAwMDkyMDAwMDA3MDYwNDE5ODY4MDAyODA2Q0JDMkEKKzoxMDQ4MjAwMDAwMDAxNjEzODAwMTAwODAxMjgwMkZCNjAwMDAwMDAwRTcKKzoxMDQ4MzAwMDAwMDAwMDAwMDkwMDZFMzIwMDAwMDAwMEMxMDgwMDA0MDIKKzoxMDQ4NDAwMDA5MDA2RTMyMDAwMDAwMDBDMDE1ODY3ODBGQzA2QzMyN0YKKzoxMDQ4NTAwMDAwMDAwRDA2ODAwMTAwODAyMjgwMkZCNjAwMDAwRDA2QUEKKzoxMDQ4NjAwMDAwMTg4NkM4MDY0MDAwOTIwMDAwMTYxMzgwMDEwMDgwRTAKKzoxMDQ4NzAwMDIyODAyRkI2MDAwMDAwMDAwMDQwMDAwMDA5MDA2RTMyQzgKKzoxMDQ4ODAwMDAwMDAwMDAwQzI0ODAwMDQwOTAwNkUzMjAwMDAwMDAwNzEKKzoxMDQ4OTAwMEMwMTY4Njc4MEZDMDZDMzIwMDAwMEQwNjgwMDEwMDgwQzMKKzoxMDQ4QTAwMDEyODAyRkI2MDAwMDAwMDAwMDE4ODZDODA2MDAwMDMyRjMKKzoxMDQ4QjAwMDAwNDAwMDAwMDAwMDAwMjgwOTgwMzYzMjAwMDAxNTA2ODQKKzoxMDQ4QzAwMDA0MDIwMTgwMDJDMDZFQkMwMDAwNjExMDAwMDIwMUVDMTUKKzoxMDQ4RDAwMDE2QzA2RURDMDAwMDEzMDY4MDAwMDA4MDAyODAyRkI2MzgKKzoxMDQ4RTAwMDAwMDAxNTA2ODEwMDAwRjgyMjgwMkZCNDAwMDAxNTA2OTQKKzoxMDQ4RjAwMDAwMTg4NkM4MDY0MDAwOTIwMDAwMTUwNjgyMDAwMEY4RTUKKzoxMDQ5MDAwMDEyODAyRkI0MDAwMDAwMDAwMDE4ODZDODA2MDAwMDMyOTQKKzoxMDQ5MTAwMDAwMDAxNjEzMDQwMTAwODAwMjAwMkRCQzAwMDAxNjEzRDUKKzoxMDQ5MjAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMDAwMDAwMTA4NkM4MzkKKzoxMDQ5MzAwMDA2MDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3QzAwQTMyM0MKKzoxMDQ5NDAwMDAwMzgwMDAwMDAwODAwMDAwNzAwMzYzMjAwMDAxNjEzOEYKKzoxMDQ5NTAwMDA0MTAwMDAwMDcwMDkwQjIwMDAwMDAwMDAwMTgwMDAwRTIKKzoxMDQ5NjAwMDA3NDA5MDMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MjQKKzoxMDQ5NzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNzgKKzoxMDQ5ODAwMDE3MDEwMEY4QTI4MDJGMzQwMDAwMTYxMzAyMTA4NjgwNTEKKzoxMDQ5OTAwMDcyODI2Q0JDMDAwMDAwMDAwMDEwODZBODQyODA2QzM3NTgKKzoxMDQ5QTAwMDAwMDAyQTA2MTIwMDcwMzgwMjAwN0VCMjAwMDAxNjEzQzIKKzoxMDQ5QjAwMDEyMDA3MDNDMDIwMDdFQjIwMDAwMTYxMzEyMDA3MDMwMkMKKzoxMDQ5QzAwMDAyMDA3RUIyMDAwMDE2MTMxMjAwNzAzNDAyMDA3RUIyQTQKKzoxMDQ5RDAwMDAwMDAyMTA2MDIwMTAwODBCMjgyMkFCQzAwMDAwMDAwMTMKKzoxMDQ5RTAwMDE3MDAwMEQwMDIwMDAwMzIwNjAwMDAwNjA0MDEwMDgwMUIKKzoxMDQ5RjAwMDgyOEQyRkIwMDAwMEZBMDUwNDAzMDE4MDAyQzA2RUJDNTYKKzoxMDRBMDAwMDAwMDAzNTA2MDAwMDAwODAwMjAwMDA5MDAwMDAyQzA2MjcKKzoxMDRBMTAwMDA0MDMwMTgwMDJDMDZFQkMwMDAwMzUwNjAwMTA4NkM4ODkKKzoxMDRBMjAwMDQ2ODAyQTk2MDAwMDAwMDAwMDEwODZDODQ2ODAyQTM2N0MKKzoxMDRBMzAwMDAwMDAzMDA2ODAwMDAwODAxMjgwMkZCNjAzMDAzMjA2OEUKKzoxMDRBNDAwMDIyMDAwMEY4ODI4RDJGQjIwMDAwMzIwNjAwMTg4NkM4QkUKKzoxMDRBNTAwMDA2MDAwMDkyMDAwMDM1MDY4MDAwMDA4MDIyODAyRkI2RkMKKzoxMDRBNjAwMDAwMDAwMDAwQzIwMTAwRjgwMjgwMkYzNTAwQzA2MTEwNzQKKzoxMDRBNzAwMDAwMDAwMDI4MDk4MDM2RDIwMDAwMDAwMDAwMDIwMUVDOEUKKzoxMDRBODAwMDE2QzA2RTNDMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5RTcKKzoxMDRBOTAwMDAwMDAwMDAwMDAxMDAxRTAwNjgwMkYzMjAwMDAwMDAwM0UKKzoxMDRBQTAwMDAwMDAwMEE4RTEwMDAwMzQwMDAwMDAwMEEyMDAwMEZDQUIKKzoxMDRBQjAwMDAyMDAwMDMyMDAwMEY2MDM4MDAxMDA4MEEyODAyRkI2QzEKKzoxMDRBQzAwMDAwMDAzQjA2QjkwMTAwRDgwMjgwMDFCMjAwMDBGNjAzRTUKKzoxMDRBRDAwMDAwMDAwMEY4MDIwMDAwOTIwMDAwMDAwMDAwMDAwMDM4MTIKKzoxMDRBRTAwMDE4ODBGNzNBMDAwMDAwMDAwMDAwMDAzOEY4QkY4MzMwNUIKKzoxMDRBRjAwMDAwMDAzRjA2MDQwMTAwODBGMkJEODNCQzAwMDBGNjAzMDUKKzoxMDRCMDAwMEE5MDAwMEY4MDIwMDAwOTIwMEMwNDYwNjE4MDEwMDBDM0YKKzoxMDRCMTAwMEE4Q0QzRUIyMDAwMDQyMDY4NDAwMDA3NDFGNDBGN0JBRTAKKzoxMDRCMjAwMDAwMDBGNjAzQTkwMDAwRjgwMjAwMDA5MjAwMDAwMDAwNTcKKzoxMDRCMzAwMDAwMDAwMDc0MEYwMDAwMzIwMEMwNDYwNjE4MDEwMDBDOEYKKzoxMDRCNDAwMEE4Q0QzRUIyMTgwMDM2MDAwMDAwMDBGODczOEEwM0Y5QzEKKzoxMDRCNTAwMDAwMDA0MzA2MDAwMDAwQjAwMjAwMDA5MjAwMDAwMDAwQzgKKzoxMDRCNjAwMDAwMDAwMDdDMEY4MDgzMzIwMDAwMDAwMDAwMjgwMDAwNUQKKzoxMDRCNzAwMDA3MDAwMDMyMDAwMDAwMDAwMDMwMDAwMDA3MDAwMDMyOTMKKzoxMDRCODAwMDAwMDEwMDgwMDAzODAwMDAwNzAwMzczMjAwMDAwMDAwRkMKKzoxMDRCOTAwMDAwM0MwMDBDMDc4MDgzMzIwMDAwMTYxMzEyMDAwMDQ4MEUKKzoxMDRCQTAwMDAyQzA4MEIyMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2RTAKKzoxMDRCQjAwMDAwMDBGNjAzQTkwMDAwMDhFODAxMDA5NDAwMDA1NDA2NzQKKzoxMDRCQzAwMDA0MDEwMDgwQTJDMEVEQkM1MjAwMDAwMDAwMDAwMDc0OEYKKzoxMDRCRDAwMDBFMDAzNjMyMDAwMDAwMDAwMDAwMDBDMDBFNDAwMTMyMUUKKzoxMDRCRTAwMDQwN0UwNTAwMDAwMDAwQjQwRTAwMzczMjAwMDAwMDAwRDcKKzoxMDRCRjAwMDAwMDAwMEM0MEU4MDA3MzI2NDAwNUEwNjAwMDAwMENDOUEKKzoxMDRDMDAwMDBFMDAzNjkyNjQwMDE2MTMwNDAxMDA4MDgyQ0RFREJDQzQKKzoxMDRDMTAwMDI5MDAwMDAwMDAwMDAwNzQwRTAwMzYzMjAwMDAwMDAwODEKKzoxMDRDMjAwMDAwMDAwMEMwMEU0MDAwMzJBMDhDMDAwMDAwMDAwMEI0NjQKKzoxMDRDMzAwMDBFMDAzNjMyMDAwMDAwMDAwMDAwMDBDNDBFQzAwMDMyM0EKKzoxMDRDNDAwMDAwMDAwMDAwMDAwMDAwQ0MwRTgwMDIzMjEwMDAwMDAwQzYKKzoxMDRDNTAwMDAwMDAwMEU0MzM3QkVDMzkxRTAwMDAwMTAwMDAwMEUwOUUKKzoxMDRDNjAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBDODZFQzBFQzM3QkYKKzoxMDRDNzAwMDAwMDBERTA0MDAwMDAwRDgwRUMwRUQ5MjAwMDAxNjEzMDQKKzoxMDRDODAwMDA0MzEwMjgwQTJEQjJDQkMwMDAwMTYxMzA0MDEwMDgwNUEKKzoxMDRDOTAwMDAyODA4MEIyMDAwMDE2MTMwMjFDMDE4MDUyQzA2RUJDNUMKKzoxMDRDQTAwMDJDMDAxNjEzMDIwMTAwODA4MkNEODFCQzNGMDAxNjEzMzgKKzoxMDRDQjAwMDAyMDAwMDgwODJDRDgxQkMzNjAwNjcwNjA0MDAwMDgwQkYKKzoxMDRDQzAwMDgyQ0Q4MUJDMEYwMDAwMDAwMDAwMDAxMDA5MDAzNjMyQzgKKzoxMDRDRDAwMDJDMDAwMDAwMDAwMDAwMTQ4OUNEODEzQzEwMDA4MDEyREYKKzoxMDRDRTAwMDAwMUMwMTE0NTlFNDZFRDk2RjA2MDAwMDAwMDAwMDg4MTIKKzoxMDRDRjAwMDgyQ0Q4MTNBMDAwMDE2MTMwNDAxMDA4MDAyODA4MEIyNDgKKzoxMDREMDAwMDAwMDAxNjEzMDQzMTAyODBBMkRCMkNCQzAwMDAxNjEzMzUKKzoxMDREMTAwMDAyMTgwMTgwOTJDMDZFQkMyQzAwMTYxMzAyMDAwMDgwQTUKKzoxMDREMjAwMDgyQ0Q4MUJDMTAwMDAwMDAwMDAwMDAxMDA5MDAzNjMyNjYKKzoxMDREMzAwMDEwMDA4MDEyMDAxODAxMTQ3OUUwNkVEOTZGMDYwMDAwOEYKKzoxMDRENDAwMDAwMDAwMDg4ODJDRDgxM0FBRTA2MDAwMDAwMTgwMTg4N0MKKzoxMDRENTAwMDgyQ0Q2RTNBQjcwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBMDcKKzoxMDRENjAwMEMwMDYwMDAwMDAxODAxODg4MkNENkUzQUM5MDYwMDAwMTYKKzoxMDRENzAwMDAwMTgwMTg4ODJDRDZFM0FEMjA2MDAwMDAwMTgwMTg4MjIKKzoxMDREODAwMDgyQ0Q2RTNBREIwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBQjMKKzoxMDREOTAwMEU0MDYwMDAwMDAxODAxODg4MkNENkUzQUVEMDYwMDAwOUUKKzoxMDREQTAwMDAwMTgwMTg4ODJDRDZFM0FGNjA2MDAwMDAwMTgwMTg4Q0UKKzoxMDREQjAwMDgyQ0Q2RTNBRkYwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBNUYKKzoxMDREQzAwMDA4MDcwMDAwMDAxODAxODg4MkNENkUzQTExMDcwMDAwMjQKKzoxMDRERDAwMDAwMTgwMTg4ODJDRDZFM0ExQTA3MDAwMDAwMTgwMTg4NzkKKzoxMDRERTAwMDgyQ0Q2RTNBMjMwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBMEEKKzoxMDRERjAwMDJDMDcwMDAwMDAxODAxODg4MkNENkUzQTM1MDcwMDAwQUMKKzoxMDRFMDAwMDAwMTgwMTg4ODJDRDZFM0EzRTA3MDAwMDAwMTgwMTg4MjQKKzoxMDRFMTAwMDgyQ0Q2RTNBNDcwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBQjUKKzoxMDRFMjAwMDUwMDcwMDAwMDAxODAxODg4MkNENkUzQTU5MDcwMDAwMzMKKzoxMDRFMzAwMDAwMTgwMTg4ODJDRDZFM0E2MjA3MDAwMDAwMTgwMTg4RDAKKzoxMDRFNDAwMDgyQ0Q2RTNBNkIwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBNjEKKzoxMDRFNTAwMDc0MDcwMDAwMDAxODAxODg4MkNENkUzQTdEMDcwMDAwQkIKKzoxMDRFNjAwMDAwMTgwMTg4ODJDRDZFM0E4NjA3MDAwMDAwMTgwMTg4N0MKKzoxMDRFNzAwMDgyQ0Q2RTNBOEYwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBMEQKKzoxMDRFODAwMDk4MDcwMDAwMDAxODAxODg4MkNENkUzQUExMDcwMDAwNDMKKzoxMDRFOTAwMDAwMTgwMTg4ODJDRDZFM0FBQTA3MDAwMDAwMTgwMTg4MjgKKzoxMDRFQTAwMDgyQ0Q2RTNBQjMwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBQjkKKzoxMDRFQjAwMEJDMDcwMDAwMDAxODAxODg4MkNENkUzQUM1MDcwMDAwQ0IKKzoxMDRFQzAwMDAwMTgwMTg4ODJDRDZFM0FDRTA3MDAwMDAwMTgwMTg4RDQKKzoxMDRFRDAwMDgyQ0Q2RTNBRDcwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBNjUKKzoxMDRFRTAwMEUwMDcwMDAwMDAxODAxODg4MkNENkUzQUU5MDcwMDAwNTMKKzoxMDRFRjAwMDAwMTgwMTg4ODJDRDZFM0FGMjA3MDAwMDAwMTgwMTg4ODAKKzoxMDRGMDAwMDgyQ0Q2RTNBRkIwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBMTAKKzoxMDRGMTAwMDA0MDgwMDAwMDAxODAxODg4MkNENkUzQTBEMDgwMDAwRDgKKzoxMDRGMjAwMDAwMTgwMTg4ODJDRDZFM0ExNjA4MDAwMDAwMTgwMTg4MkEKKzoxMDRGMzAwMDgyQ0Q2RTNBMUYwODAwMDAwMDE4MDE4ODgyQ0Q2RTNBQkIKKzoxMDRGNDAwMDAwMDBBODAzMDAwMDAwRDQwMjAwMDA5MjAwMDBFQzAyNjAKKzoxMDRGNTAwMDAwMDAwMDgwMDIwMDAwOTAyODA4MDAwMDAwMUMwMTg4NkEKKzoxMDRGNjAwMDgyQ0Q2RTNBMkQwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBNzkKKzoxMDRGNzAwMDMyMDgwMDAwMDAxQzAxODg4MkNENkUzQTM3MDgwMDAwMUMKKzoxMDRGODAwMDAwMUMwMTg4ODJDRDZFM0EzQzA4MDAwMDAwMUMwMTg4OUMKKzoxMDRGOTAwMDgyQ0Q2RTNBNDEwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBMzUKKzoxMDRGQTAwMDQ2MDgwMDAwMDAxQzAxODg4MkNENkUzQTRCMDgwMDAwQzQKKzoxMDRGQjAwMDAwMUMwMTg4ODJDRDZFM0E1MDA4MDAwMDAwMUMwMTg4NTgKKzoxMDRGQzAwMDgyQ0Q2RTNBNTUwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBRjEKKzoxMDRGRDAwMDVBMDgwMDAwMDAxQzAxODg4MkNENkUzQTVGMDgwMDAwNkMKKzoxMDRGRTAwMDAwMUMwMTg4ODJDRDZFM0E2NDA4MDAwMDAwMUMwMTg4MTQKKzoxMDRGRjAwMDgyQ0Q2RTNBNjkwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBQUQKKzoxMDUwMDAwMDZFMDgwMDAwMDAxQzAxODg4MkNENkUzQTczMDgwMDAwMTMKKzoxMDUwMTAwMDAwMUMwMTg4ODJDRDZFM0E3ODA4MDAwMDAwMUMwMTg4Q0YKKzoxMDUwMjAwMDgyQ0Q2RTNBMDAwMEIwMDMwMDAwMDBENDAyMDAwMDkyNkUKKzoxMDUwMzAwMDAwMDBDNjAzMDAwMDAwRDQwMjAwMDA5MjAwMDA3MTBBQzQKKzoxMDUwNDAwMDAwMDAwMDEwMDg4MDAxOTIwMDAwMTYxMzAwMDAwMDgwOEMKKzoxMDUwNTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwODMKKzoxMDUwNjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzREMKKzoxMDUwNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNzUKKzoxMDUwODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTMKKzoxMDUwOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQUMKKzoxMDUwQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNDUKKzoxMDUwQjAwMDAyMDAwMDkwMDAwMEIxMEEwMDAwMDAxMDA4ODAwMDkyNzkKKzoxMDUwQzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzN0MKKzoxMDUwRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMTUKKzoxMDUwRTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjMKKzoxMDUwRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNEMKKzoxMDUxMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRTQKKzoxMDUxMTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQzIKKzoxMDUxMjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBDMDBBN0EKKzoxMDUxMzAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwOUMKKzoxMDUxNDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTIKKzoxMDUxNTAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMUQKKzoxMDUxNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwODQKKzoxMDUxNzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNjIKKzoxMDUxODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQkIKKzoxMDUxOTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMUIwQjAwMDAwMDEwQzcKKzoxMDUxQTAwMDA4QzAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNkEKKzoxMDUxQjAwMDAwMDAxQjBCMDAwMDAwMTAwOEMwMDA5MjAwMDAyMjBFMkYKKzoxMDUxQzAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwNEIKKzoxMDUxRDAwMDAyMDAwMDkwMDAwMDFCMEIwMDAwMDAxMDA4QzAwMDkyQUQKKzoxMDUxRTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNUIKKzoxMDUxRjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRjQKKzoxMDUyMDAwMDAyMDAwMDkwMDAwMDJFMEIwMDAwMDAxMDA4QzAwMDkyNjkKKzoxMDUyMTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyRTBCMUEKKzoxMDUyMjAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwMjIwRTAwMDAwMDEwRDQKKzoxMDUyMzAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTgKKzoxMDUyNDAwMDAwMDAyRTBCMDAwMDAwMTAwOEMwMDA5MjAwMDAxNjEzOTIKKzoxMDUyNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwOTMKKzoxMDUyNjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNzEKKzoxMDUyNzAwMDAwMDAyQzBCMDAwMDAwMTAwOEMwMDA5MjAwMDAxNjEzNjQKKzoxMDUyODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMkMwQjAwMDAwMDEwQzUKKzoxMDUyOTAwMDA4QzAwMDkyMDAwMDIyMEUwMDAwMDAxMDA4NDAwMTkyOTkKKzoxMDUyQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyQzBCOEMKKzoxMDUyQjAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwMTYxMzAwMDAwMDgwREIKKzoxMDUyQzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTEKKzoxMDUyRDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNkEKKzoxMDUyRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjUwQjAwMDAwMDEwOUMKKzoxMDUyRjAwMDA4QzAwMDkyMDAwMDE4MEIwMDAwMDAxMDA4MDAwMTkyODYKKzoxMDUzMDAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzNkIKKzoxMDUzMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRDIKKzoxMDUzMjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQjAKKzoxMDUzMzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDkKKzoxMDUzNDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQTIKKzoxMDUzNTAwMDAyMDAwMDkwMDAwMEVCMEIwMDAwMDAxMDA4ODAwMDkyOUIKKzoxMDUzNjAwMDAwMDAxODBCMDAwMDAwMTAwODAwMDE5MjAwMDAxMzBCNTEKKzoxMDUzNzAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwOTkKKzoxMDUzODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTAKKzoxMDUzOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQTkKKzoxMDUzQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNDIKKzoxMDUzQjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMDUzQzAwMDAwMDBFQjBCMDAwMDAwMTAwODAwMDE5MjAwMDAxODBCMTkKKzoxMDUzRDAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwRjQKKzoxMDUzRTAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQTcKKzoxMDUzRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNDkKKzoxMDU0MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRTEKKzoxMDU0MTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQkYKKzoxMDU0MjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3OTBDQkMKKzoxMDU0MzAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTgwQjAwMDAwMDEwMEYKKzoxMDU0NDAwMDA4MDAwMTkyMDAwMDEzMEIwMDAwMDAxMDA4NDAwMTkyQjgKKzoxMDU0NTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRTgKKzoxMDU0NjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwODEKKzoxMDU0NzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNUYKKzoxMDU0ODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQjgKKzoxMDU0OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNzkwQzAwMDAwMDEwNjUKKzoxMDU0QTAwMDA4MDAwMTkyMDAwMDE4MEIwMDAwMDAxMDA4MDAwMTkyOTMKKzoxMDU0QjAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzQkEKKzoxMDU0QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMjEKKzoxMDU0RDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRkYKKzoxMDU0RTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNTgKKzoxMDU0RjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMkQwQjAwMDAwMDEwNTIKKzoxMDU1MDAwMDA4ODAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNDYKKzoxMDU1MTAwMDAwMDAyRDBCMDAwMDAwMTAwODgwMDA5MjAwMDAyMjBFRjkKKzoxMDU1MjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwRTcKKzoxMDU1MzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOUUKKzoxMDU1NDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRjcKKzoxMDU1NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwOTAKKzoxMDU1NjAwMDAyMDAwMDkwMDAwMDJEMEIwMDAwMDAxMDA4MDAwMTkyQzYKKzoxMDU1NzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyRDBCQjgKKzoxMDU1ODAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMjIwRTAwMDAwMDEwMzAKKzoxMDU1OTAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjUKKzoxMDU1QTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzOTcKKzoxMDU1QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMzAKKzoxMDU1QzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMEUKKzoxMDU1RDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4MEIKKzoxMDU1RTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwNjcKKzoxMDU1RjAwMDAyMDAwMDkwMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyQTkKKzoxMDU2MDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMzYKKzoxMDU2MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQ0YKKzoxMDU2MjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQUQKKzoxMDU2MzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA0MzBFREUKKzoxMDU2NDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzkwRTAwMDAwMDEwMTgKKzoxMDU2NTAwMDA4NDAwMTkyMDAwMDQzMEUwMDAwMDAxMDA4NDAwMTkyMzMKKzoxMDU2NjAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDgKKzoxMDU2NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNDMwRTAwMDAwMDEwQjcKKzoxMDU2ODAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDQKKzoxMDU2OTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBCOTBBMEMKKzoxMDU2QTAwMDAwMDAwMDEwMDg0MDAwOTIwMDAwQjkwQTAwMDAwMDEwM0QKKzoxMDU2QjAwMDA4ODAwMDkyMDAwMEI5MEEwMDAwMDAxMDA4QzAwMDkyQTMKKzoxMDU2QzAwMDAwMDBCOTBBMDAwMDAwMTAwODAwMDE5MjAwMDBCRTBBQTQKKzoxMDU2RDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwQjkwQTAwMDAwMDEwMEMKKzoxMDU2RTAwMDA4ODAwMTkyMDAwMEI5MEEwMDAwMDAxMDA4QzAwMTkyNzEKKzoxMDU2RjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNDYKKzoxMDU3MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwREUKKzoxMDU3MTAwMDAyMDAwMDkwMDAwMEY2MEMwMDAwMDAxMDA4ODAwMDkyQ0IKKzoxMDU3MjAwMDAwMDBGNjBDMDAwMDAwMTAwOEMwMDA5MjAwMDBGNjBDMEIKKzoxMDU3MzAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwOTAKKzoxMDU3NDAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNDMKKzoxMDU3NTAwMDAwMDBGNjBDMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzQjMKKzoxMDU3NjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwN0UKKzoxMDU3NzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNUMKKzoxMDU3ODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQjUKKzoxMDU3OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNEUKKzoxMDU3QTAwMDAyMDAwMDkwMDAwMDREMEUwMDAwMDAxMDA4NDAwMTkyMjEKKzoxMDU3QjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzODUKKzoxMDU3QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMUUKKzoxMDU3RDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRkMKKzoxMDU3RTAwMDAwMDBDQjBFMDAwMDAwMTAwODQwMDE5MjAwMDBDRjBFMTgKKzoxMDU3RjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzEwRTAwMDAwMDEwNkYKKzoxMDU4MDAwMDA4NDAwMTkyMDAwMENGMEUwMDAwMDAxMDA4NDAwMTkyRjUKKzoxMDU4MTAwMDAwMDA3RDA4MDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzRUYKKzoxMDU4MjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQ0YwRTAwMDAwMDEwNzkKKzoxMDU4MzAwMDA4NDAwMTkyMDAwMDdFMDgwMDAwMDAxMDA4MDAwMjkyNUIKKzoxMDU4NDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRjQKKzoxMDU4NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDAwRTAwMDAwMDEwNDgKKzoxMDU4NjAwMDA4NDAwMTkyMDAwMDMxMEUwMDAwMDAxMDA4NDAwMTkyMzMKKzoxMDU4NzAwMDAwMDBEMDBFMDAwMDAwMTAwODQwMDE5MjAwMDA3RDA4REEKKzoxMDU4ODAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwODQKKzoxMDU4OTAwMDAyMDAwMDkwMDAwMEQwMEUwMDAwMDAxMDA4NDAwMTkyQUQKKzoxMDU4QTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzOTQKKzoxMDU4QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMkQKKzoxMDU4QzAwMDAyMDAwMDkwMDAwMEQ1MEUwMDAwMDAxMDA4ODAwMDkyMzkKKzoxMDU4RDAwMDAwMDBENTBFMDAwMDAwMTAwOEMwMDA5MjAwMDBENTBFOTgKKzoxMDU4RTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwREYKKzoxMDU4RjAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTIKKzoxMDU5MDAwMDAwMDBENTBFMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzMjAKKzoxMDU5MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQ0MKKzoxMDU5MjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQUEKKzoxMDU5MzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDMKKzoxMDU5NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwOUMKKzoxMDU5NTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwN0EKKzoxMDU5NjAwMDAwMDBBMDBBMDAwMDAwMTAwODQwMDA5MjAwMDAxNjEzN0EKKzoxMDU5NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNkMKKzoxMDU5ODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNEEKKzoxMDU5OTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBFQTBFRDQKKzoxMDU5QTAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwRUEwRTAwMDAwMDEwQzUKKzoxMDU5QjAwMDA4QzAwMDkyMDAwMEVBMEUwMDAwMDAxMDA4MDAwMTkyRUEKKzoxMDU5QzAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzQTUKKzoxMDU5RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRUEwRTAwMDAwMDEwQUQKKzoxMDU5RTAwMDA4QzAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjEKKzoxMDU5RjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNDMKKzoxMDVBMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDMwRjAwMDAwMDEwNjIKKzoxMDVBMTAwMDA4ODAwMDkyMDAwMDAzMEYwMDAwMDAxMDA4QzAwMDkyRjAKKzoxMDVBMjAwMDAwMDAwMzBGMDAwMDAwMTAwODAwMDE5MjAwMDAxMzBCOUIKKzoxMDVBMzAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwRDIKKzoxMDVBNDAwMDAyMDAwMDkwMDAwMDAzMEYwMDAwMDAxMDA4QzAwMTkyNDcKKzoxMDVBNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4ODYKKzoxMDVBNjAwMDAwMDAwMDEwMDgwMDAwOTIwMDAwMTYxMzAwMDAwMDgwRTMKKzoxMDVBNzAwMDAyMDAwMDkwMDAwMDdEMDgwMDAwMDAxMDA4ODAwMDkyRTUKKzoxMDVBODAwMDAwMDAxNTBGMDAwMDAwMTAwOEMwMDA5MjAwMDA3RDA4MDMKKzoxMDVBOTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwN0QwODAwMDAwMDEwQzYKKzoxMDVBQTAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRTAKKzoxMDVBQjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzODIKKzoxMDVBQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMUIKKzoxMDVBRDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjkKKzoxMDVBRTAwMDAwMDA3RDA4MDAwMDAwMTAwODgwMDA5MjAwMDAyNjBGRDIKKzoxMDVBRjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwN0QwODAwMDAwMDEwRTcKKzoxMDVCMDAwMDA4MDAwMTkyMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyOEEKKzoxMDVCMTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMjEKKzoxMDVCMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQkEKKzoxMDVCMzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTgKKzoxMDVCNDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4OTUKKzoxMDVCNTAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMjYwRjAwMDAwMDEwRDYKKzoxMDVCNjAwMDA4MDAwMTkyMDAwMDdEMDgwMDAwMDAxMDA4MDAwMTkyNkEKKzoxMDVCNzAwMDAwMDA3RDA4MDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzOEMKKzoxMDVCODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNUEKKzoxMDVCOTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMzgKKzoxMDVCQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzOTEKKzoxMDVCQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMkEKKzoxMDVCQzAwMDAyMDAwMDkwMDAwMDdEMDgwMDAwMDAxMDA4ODAwMDkyOTQKKzoxMDVCRDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4MDUKKzoxMDVCRTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMjEKKzoxMDVCRjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRDgKKzoxMDVDMDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMzAKKzoxMDVDMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQzkKKzoxMDVDMjAwMDAyMDAwMDkwMDAwMEZBMEUwMDAwMDAxMDA4ODAwMDkyQjAKKzoxMDVDMzAwMDAwMDBGQTBFMDAwMDAwMTAwOEMwMDA5MjAwMDBGQTBFRUEKKzoxMDVDNDAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwN0IKKzoxMDVDNTAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMkUKKzoxMDVDNjAwMDAwMDBGQTBFMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzOTgKKzoxMDVDNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNjkKKzoxMDVDODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNDcKKzoxMDVDOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQTAKKzoxMDVDQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMzkKKzoxMDVDQjAwMDAyMDAwMDkwMDAwMDM5MEYwMDAwMDAxMDA4MDAwMjkyNUUKKzoxMDVDQzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNzAKKzoxMDVDRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDkKKzoxMDVDRTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRTcKKzoxMDVDRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBDMDBBOUYKKzoxMDVEMDAwMDAwMDAwMDEwMDhDMDAxOTIwMDAwMTYxMzAwMDAwMDgwN0YKKzoxMDVEMTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQjYKKzoxMDVEMjAwMDAwMDAxMzBCMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzNDEKKzoxMDVEMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDEwQjAwMDAwMDEwMzUKKzoxMDVENDAwMDA4QzAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQkQKKzoxMDVENTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzREYKKzoxMDVENjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQzAwQTAwMDAwMDEwNDcKKzoxMDVENzAwMDA4ODAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQ0UKKzoxMDVEODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxMzBCQkEKKzoxMDVEOTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwNkYKKzoxMDVEQTAwMDAyMDAwMDkwMDAwMDAxMEIwMDAwMDAxMDA4QzAwMTkyRUEKKzoxMDVEQjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzN0YKKzoxMDVEQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMTgKKzoxMDVERDAwMDAyMDAwMDkwMDAwMDI2MEQwMDAwMDAxMDA4ODAwMDkyRDQKKzoxMDVERTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBENDUKKzoxMDVERjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMjIwRTAwMDAwMDEwMzkKKzoxMDVFMDAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwN0MKKzoxMDVFMTAwMDAwMDAyNjBEMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzRkMKKzoxMDVFMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQjcKKzoxMDVFMzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTUKKzoxMDVFNDAwMDAwMDAyNjBEMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzNEIKKzoxMDVFNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwRUQKKzoxMDVFNjAwMDA4MDAwMTkyMDAwMDIyMEUwMDAwMDAxMDA4NDAwMTkyN0MKKzoxMDVFNzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEQjQKKzoxMDVFODAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwQkUKKzoxMDVFOTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMzUKKzoxMDVFQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEODQKKzoxMDVFQjAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwOEUKKzoxMDVFQzAwMDAyMDAwMDkwMDAwMDI2MEQwMDAwMDAxMDA4MDAwMTkyNjIKKzoxMDVFRDAwMDAwMDAyMjBFMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzN0UKKzoxMDVFRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwNUQKKzoxMDVFRjAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQ0MKKzoxMDVGMDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMkQKKzoxMDVGMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwMkMKKzoxMDVGMjAwMDA4ODAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMUMKKzoxMDVGMzAwMDAwMDAyNjBEMDAwMDAwMTAwODgwMDA5MjAwMDAyMjBFRDQKKzoxMDVGNDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwQkQKKzoxMDVGNTAwMDAyMDAwMDkwMDAwMDI2MEQwMDAwMDAxMDA4ODAwMDkyNTIKKzoxMDVGNjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQ0QKKzoxMDVGNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNjYKKzoxMDVGODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNDQKKzoxMDVGOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEOTMKKzoxMDVGQTAwMDAwMDAwMDEwMDhDMDAxOTIwMDAwMjIwRTAwMDAwMDEwNDYKKzoxMDVGQjAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQ0IKKzoxMDVGQzAwMDAwMDAyNjBEMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzMEEKKzoxMDVGRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDYKKzoxMDVGRTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRTQKKzoxMDVGRjAwMDAwMDBBQjBEMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzOTYKKzoxMDYwMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRDUKKzoxMDYwMTAwMDAyMDAwMDkwMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyN0UKKzoxMDYwMjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBBQjBEN0QKKzoxMDYwMzAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwOEQKKzoxMDYwNDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwODMKKzoxMDYwNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBBQjBENEQKKzoxMDYwNjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwNUQKKzoxMDYwNzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTMKKzoxMDYwODAwMDAwMDA3RDA4MDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzNzcKKzoxMDYwOTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQUIwRDAwMDAwMDEwMjYKKzoxMDYwQTAwMDA4QzAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNUEKKzoxMDYwQjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzN0MKKzoxMDYwQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMTUKKzoxMDYwRDAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjMKKzoxMDYwRTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4RjAKKzoxMDYwRjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMEMKKzoxMDYxMDAwMDAyMDAwMDkwMDAwMEI1MEQwMDAwMDAxMDA4QzAwMTkyRDAKKzoxMDYxMTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMUIKKzoxMDYxMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQjQKKzoxMDYxMzAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwOTIKKzoxMDYxNDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRUIKKzoxMDYxNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0QwODAwMDAwMDEwOTgKKzoxMDYxNjAwMDA4NDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTkKKzoxMDYxNzAwMDAwMDBCNTBEMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzMEEKKzoxMDYxODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNTQKKzoxMDYxOTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMzIKKzoxMDYxQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzOEIKKzoxMDYxQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMjQKKzoxMDYxQzAwMDAyMDAwMDkwMDAwMEIzMEUwMDAwMDAxMDA4NDAwMTkyOTEKKzoxMDYxRDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzNUIKKzoxMDYxRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwRjQKKzoxMDYxRjAwMDAyMDAwMDkwMDAwMDg2MDgwMDAwMDAxMDA4NDAwMDkyOTUKKzoxMDYyMDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMkEKKzoxMDYyMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwQzMKKzoxMDYyMjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQTEKKzoxMDYyMzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBERDA4M0UKKzoxMDYyNDAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwN0IKKzoxMDYyNTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNzEKKzoxMDYyNjAwMDAwMDBDNjA5MDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzOEIKKzoxMDYyNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwODUwODAwMDAwMDEwNkYKKzoxMDYyODAwMDA4MDAwMTkyMDAwMEQwMDkwMDAwMDAxMDA4MDAwMTkyRUYKKzoxMDYyOTAwMDAwMDBEMDA5MDAwMDAwMTAwODAwMDE5MjAwMDBEMDA5QTEKKzoxMDYyQTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwOUEKKzoxMDYyQjAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTEKKzoxMDYyQzAwMDAwMDBFRjA4MDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzODQKKzoxMDYyRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwODUwODAwMDAwMDEwMEYKKzoxMDYyRTAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRDgKKzoxMDYyRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDA5NUEKKzoxMDYzMDAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwQzQwOTAwMDAwMDEwODYKKzoxMDYzMTAwMDA4ODAwMDkyMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyMkIKKzoxMDYzMjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBFNjA5NDMKKzoxMDYzMzAwMDAwMDAwMDEwMDg0MDAwOTIwMDAwRTYwOTAwMDAwMDEwNzQKKzoxMDYzNDAwMDA4ODAwMDkyMDAwMEU2MDkwMDAwMDAxMDA4QzAwMDkyREEKKzoxMDYzNTAwMDAwMDA4NTA4MDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzREMKKzoxMDYzNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwNzIKKzoxMDYzNzAwMDAyMDAwMDkwMDAwMDBDMEEwMDAwMDAxMDA4QzAwMDkyMEIKKzoxMDYzODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4NDUKKzoxMDYzOTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwQTkKKzoxMDYzQTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMDYzQjAwMDAwMDAwRjBBMDAwMDAwMTAwODAwMDE5MjAwMDAwRjBBMDAKKzoxMDYzQzAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwODUwODAwMDAwMDEwODUKKzoxMDYzRDAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRTcKKzoxMDYzRTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxMTBBNTcKKzoxMDYzRjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTEwQTAwMDAwMDEwNDgKKzoxMDY0MDAwMDA4QzAwMDkyMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyRkEKKzoxMDY0MTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4QjQKKzoxMDY0MjAwMDAwMDAwMDEwMDg0MDAwOTIwMDAwREMwOTAwMDAwMDEwOEQKKzoxMDY0MzAwMDA4ODAwMDkyMDAwMERDMDkwMDAwMDAxMDA4QzAwMDkyRjMKKzoxMDY0NDAwMDAwMDA4NTA4MDAwMDAwMTAwODAwMDE5MjAwMDA4NTA4ODcKKzoxMDY0NTAwMDAwMDAwMDEwMDgwMDAwOTIwMDAwODUwODAwMDAwMDEwRjUKKzoxMDY0NjAwMDA4NDAwMDkyMDAwMDI1MEEwMDAwMDAxMDA4ODAwMDkyRjkKKzoxMDY0NzAwMDAwMDAyNTBBMDAwMDAwMTAwOEMwMDA5MjAwMDA4NTA4RjYKKzoxMDY0ODAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwQjgKKzoxMDY0OTAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMkYKKzoxMDY0QTAwMDAwMDA2MDBBMDAwMDAwMTAwODgwMDA5MjAwMDA4NTA4Q0IKKzoxMDY0QjAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwODUwODAwMDAwMDEwRDUKKzoxMDY0QzAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjYKKzoxMDY0RDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAzRjBBMzgKKzoxMDY0RTAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwRDkKKzoxMDY0RjAwMDAyMDAwMDkwMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyRDIKKzoxMDY1MDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMjcKKzoxMDY1MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRUMwODAwMDAwMDEwNjUKKzoxMDY1MjAwMDA4ODAwMDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTYKKzoxMDY1MzAwMDAwMDA4NTA4MDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzRkEKKzoxMDY1NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwOTAKKzoxMDY1NTAwMDAyMDAwMDkwMDAwMDU0MEEwMDAwMDAxMDA4ODAwMDkyMjEKKzoxMDY1NjAwMDAwMDA1NDBBMDAwMDAwMTAwOEMwMDA5MjAwMDA4NTA4RDYKKzoxMDY1NzAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwQzcKKzoxMDY1ODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwM0UKKzoxMDY1OTAwMDAwMDAxQzBBMDAwMDAwMTAwODgwMDA5MjAwMDAxQzBBODUKKzoxMDY1QTAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwODUwODAwMDAwMDEwRTQKKzoxMDY1QjAwMDA4MDAwMTkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDUKKzoxMDY1QzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA2RDBBMTkKKzoxMDY1RDAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwNkQwQTAwMDAwMDEwMEEKKzoxMDY1RTAwMDA4QzAwMDkyMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyMTkKKzoxMDY1RjAwMDA4MDBGMzAzMDAxODAxRTg3NjIwODE5OTA4MDBFRjAzRjIKKzoxMDY2MDAwMDAwMTgwMUU4NzYyMDgxOTkwMDAwNEIxMjAwMDAwMDgwRkMKKzoxMDY2MTAwMDAyMDAwMEYwMDgwMDgyMDgxRDE5MDFFODc2MjA4MUI5MDcKKzoxMDY2MjAwMDAwMDBGMzAzMDAwMDAwRjg2MjgxMkY5NTAwMDBGMzAzREYKKzoxMDY2MzAwMDgwMDAwMDgwMDI4MTJGQjYyQTAwMTYxMzEyMDAwMDJDNjEKKzoxMDY2NDAwMDgyQ0QyRUIyMDAwMEYzMDMwMDAwMDBGODAyODEyRjk0RTcKKzoxMDY2NTAwMDA4MDBGMzAzMDAxQzAxRTg3NjIwODE5OTAwMDAxNjEzNUUKKzoxMDY2NjAwMDgwMEYwMTgwMDJDMDZFQjYwMDAwMDAwMDAwMDAwMEQ4NUMKKzoxMDY2NzAwMDAyMDAwMDMyMDAwMDAwMDAwMDBFMDFFQzA2QzA2RTM1ODIKKzoxMDY2ODAwMDU0MDAwMDAwMDAwMDAwMDAwNzAwMzYzMjAwMDAwMDAwNDcKKzoxMDY2OTAwMDAwMDAwMEJDQTgwMDJEMzdCNDA0MDEwMDAwMDgwMDAwNzEKKzoxMDY2QTAwMEM3Q0Q4QjNBMDAwMDAwMDAwMDAwMDA3ODk5QzAyQzM3NUQKKzoxMDY2QjAwMEI0MDAwMDAwMDAwMDAwNzg4OThEOTczQTAwMDAxNjEzOUUKKzoxMDY2QzAwMDAyMTAwMDAwODdCRjk3QkEwMDAwMDAwMDAwMTgwMDAwMDkKKzoxMDY2RDAwMDA3NDBGRTMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MjkKKzoxMDY2RTAwMDAwMDAwMDAwMDA5MDAwNzgwOTAwNkUzMjAwMDAxNjEzRDAKKzoxMDY2RjAwMDA0QTAwMDAwMDk4MDZFQjIwMDAwOTUwODA0QTUwMDA0MDMKKzoxMDY3MDAwMDA5ODA2RUIyMDAwMDAwMDAwMDAwMDAwNDA5MDA5MDMyMTEKKzoxMDY3MTAwMDAwMDAxNjEzMDIwMTAwODAwMjY0OTBCQzAwMDA5ODA4N0IKKzoxMDY3MjAwMDA0MDEwMDA0MDk2NDkwQkMwMDAwMDAwMDAwMDAwMDA0QTMKKzoxMDY3MzAwMDA5NDAwMDMyMDgwMDAwMDA2RTM0MDJFODE2MjQ5MDM5NDcKKzoxMDY3NDAwMDAwMDA5OTA4QjcxMDAyRTAwNjgwOTdCMjAwMDA5QzA4OEMKKzoxMDY3NTAwMDgwMDAwMDgwRjI4MEZDQjYwMDAwOUQwODAwMDAwMEM4QTgKKzoxMDY3NjAwMEZGODBGQzk0MDAwMDlFMDg5Rjk5MDA4MDgyMUJFRUJDNzUKKzoxMDY3NzAwMDAwMDAwMDAwMDA5ODAwRTAwRTAwNkUzMjAwMDAwMDAwRjMKKzoxMDY3ODAwMEE3MDAwMDgwMDIwMDAwMzAxODAwMzYwMDAwMDAwMEY4NkEKKzoxMDY3OTAwMDczMEEwM0Y5MDAwMDAwMDAwMDEwMDIxQzA5MDA2RTMyQTkKKzoxMDY3QTAwMDQwMDBBMzA4MDYwMTAwODA4MkNEOTFCQzAwQzBBNDA4NkYKKzoxMDY3QjAwMDAwMTgwMkUwMDY4MDM2OTIwMEUwMDAwMDAwMTgwMkUwQjcKKzoxMDY3QzAwMDA2ODAzNjMyMDAwMDAwMDAwMDAwMDAyMDA5ODAwMzMyRkQKKzoxMDY3RDAwMDAwMDBBNzA4ODBENzAxODAzMkMwNkVCNjAwMDAwMDAwMUMKKzoxMDY3RTAwMDAwMDAwMDIwNDkwMDkyM0EwMDAwMDAwMDAwOTgwMTE4QzMKKzoxMDY3RjAwMDA5MDA2RTMyMDAwMDAwMDAwMDBBMDIyNDA5QzA2RTMyNTcKKzoxMDY4MDAwMDAwMDAwMDAwMDBDMDAxMjgwOTgwNkUzMjAwMDBCNTA4QjkKKzoxMDY4MTAwMDgwMEUwMTgwMTJDMDZFQjYwMjAwMDAwMDAwM0MwMkVDNDcKKzoxMDY4MjAwMDA2MDAzNjMyMDAwMDAwMDAwMDAwMDAwMDQ5MDE5MjNBRTQKKzoxMDY4MzAwMDAwMDBCMTA4ODBENjAxODA0MkMwNkVCNjAwODIwMDAwMjAKKzoxMDY4NDAwMDAwMTAwMkUwQTZDRDkxMzIwMEEwMDAwMDAwMkMwMkU4NkEKKzoxMDY4NTAwMDA2MDAzNjMyMjgwMEJGMDgwMDNBMDJFQzA2MDAzNjkyRTUKKzoxMDY4NjAwMDAwMDAwMDAwRDMwMTAwMUNEOUMxOTEzNDAwODIwMDAwNTcKKzoxMDY4NzAwMDAwMTAwMkUwQTZDRDkxMzIwMEEwMDAwMDAwMkMwMkU4M0EKKzoxMDY4ODAwMDA2MDAzNjMyMzQwMEJGMDgwMDNBMDJFQzA2MDAzNjkyQTkKKzoxMDY4OTAwMDA0MDAwMDAwMDAzQzAyRUMwNjAwMzYzMjI4MDAwMDAwMzQKKzoxMDY4QTAwMDAwMDAwMDAwODkwRDkyM0EwMDAwQkIwODgwRDYwMTgwRUMKKzoxMDY4QjAwMDQyQzA2RUI2MDA4NjAwMDAwMDEwMDJFMEE2Q0Q5MTMyMDQKKzoxMDY4QzAwMDA0QTAwMDAwMDAyQzAyRTgwNjAwMzYzMjE0MDBCRjA4QzUKKzoxMDY4RDAwMDAwM0EwMkVDMDYwMDM2OTIwMDAwMDAwMEQzMDEwMDFDRDIKKzoxMDY4RTAwMEQ5QzE5MTM0MDA4NjAwMDAwMDEwMDJFMEE2Q0Q5MTMyOUIKKzoxMDY4RjAwMDA0QTAwMDAwMDAyQzAyRTgwNjAwMzYzMjIwMDBCRjA4ODkKKzoxMDY5MDAwMDAwM0EwMkVDMDYwMDM2OTIxMjAwMDAwMDAwMzgwMkVDNTkKKzoxMDY5MTAwMDg2Q0Q5MTNBMDgwMDAwMDAwMDI4MDJFODg2MjQ5MDM5Q0MKKzoxMDY5MjAwMDAwMDAwMDAwMDAyMDAyRTA5NjI0MTQzNzAwMDAwMDAwNjAKKzoxMDY5MzAwMDAwNDAwMUUwMDY4MDkxMzIwMDAwQzUwODA0MDEwMDgwOUIKKzoxMDY5NDAwMDAyODA5MkJDMDAwMDAwMDAwMEMwMDFFMDA2MDAwMDMyOUUKKzoxMDY5NTAwMDAwMDAwMDAwMDAzMDAwRTAwNjAwMDAzMjAwMDAwMDAwRUYKKzoxMDY5NjAwMDAwQjAwMEUwMDYwMDAwMzIyMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDY5NzAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3MjMKKzoxMDY5ODAwMDAwMDUwMTAwMDAwODAwMDBDNzhEOTczQTAwMDAwMDAwRDQKKzoxMDY5OTAwMDAwMDAwMDc4OTlDMDJDMzcwMDAxMDAwMDAwMDAwMDc4NEEKKzoxMDY5QTAwMDg5OEQ5NzNBMDAwMDE2MTMwMjEwMDAwMDg3QkY5N0JBMkUKKzoxMDY5QjAwMDAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMjAwMDAxNjEzMUYKKzoxMDY5QzAwMDEyMDAwMDQ4RjJDMTM4QjQwMDAwRDIwODgwRDcwMTJDNzAKKzoxMDY5RDAwMDA5QzA2RUIyMDAwMDAwMDBEQUQ3MDFFQzA2QzA2RTM1QzcKKzoxMDY5RTAwMDAwMDAwMDAwMDA1QTAxRUMwNjQwRUQzMkFFMDAwMDAwNEQKKzoxMDY5RjAwMDAwMDAwMDc4MTkwMDM2M0FBRjAwMTYxMzA0MDEwMDgwMzkKKzoxMDZBMDAwMDgyOEQ5N0JDMDAwMDAwMDAwMDVDMDFFODA2ODA4QjMyOUMKKzoxMDZBMTAwMDAwMDBENzA4ODAwMTAwODA2MkMwOTJCNjAwMDAwMDAwMkMKKzoxMDZBMjAwMDAwMDAwMEY4ODI4MTJGMzQxODAwMzYwMDAwMDAwMEY4QzIKKzoxMDZBMzAwMDczMEEwM0Y5MDAwMDAwMDAwMDA0MDEzODA4QzA2RTMyMzgKKzoxMDZBNDAwMDAwMDAxNjEzMDRDOTAxODAwMjgwNkVCQzAwMDAwMDAwMjMKKzoxMDZBNTAwMDAwNjIwMUVDMDY4MDgzMzIwMTAwODUwODEyMDEwMDJDREYKKzoxMDZBNjAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQkMKKzoxMDZBNzAwMDAwMDAwMDAwMDA1NDAxRkMwMkMwNkUzMjAwMDAwMDAwNjMKKzoxMDZBODAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwRTMwODE4MDEwMDBDQTkKKzoxMDZBOTAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyRjkKKzoxMDZBQTAwMDJEMDBFRjAzMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMzAKKzoxMDZBQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwNjIwMTM4MjkKKzoxMDZBQzAwMDA4QzA2RTMyMDAwODAwODAwMDAwMDAyODA5MDAzNzMyM0MKKzoxMDZBRDAwMDAwNjBFQjExMDAwMDAwMDgwODgwMzZGMjAwMDAxNjEzNzkKKzoxMDZBRTAwMDg3MDYwMUVDMTZDMDZFQkMwMDAwODUwODBCMDAwMDgwMTQKKzoxMDZBRjAwMDAyMDAwMEIwMDAwMDg1MDg4MDAwMDA4MDcyODEyRkI2N0YKKzoxMDZCMDAwMDAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDNEMDA4NTA4NkQKKzoxMDZCMTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwNUUKKzoxMDZCMjAwMDAyMDAwMDkwMDAwMDE2MTMwNDA3MDE4MDEyQzA2RUJDMjIKKzoxMDZCMzAwMDAwMDAxNjEzODAwMDAwODBCMjgxMkZCNjAwMDBFRjA4MUQKKzoxMDZCNDAwMDAwMDAwMEY4QjI4MTJGOTQwMDAwMTYxMzA0QTAwMDE4NzIKKzoxMDZCNTAwMDA4MDA2RUIyMDAwMDE2MTMwNDA2MDE4MDAyQzA2RUJDNkQKKzoxMDZCNjAwMDAwMDA5RTEyMDAwMDAwODAwMjAwMDBGMDAwMDAwMDEzRjAKKzoxMDZCNzAwMDAwNzgwMTYwMDgwMDZFRjIwMDAwRjUwODEyMDEwMEM4RkMKKzoxMDZCODAwMDAyMDAyMEIyMDAwMEY4MDgwMDAwMDA4MDAyMDAwMDkwMUYKKzoxMDZCOTAwMDAwMDAwNTA5MTIwMTAwNUMwODgwMjBCMjAwMDBGODA4MUUKKzoxMDZCQTAwMDEyMDEwMDYwMDI4MDJDQjIwMDAwMTYxMzAwMDAwMDgwNjkKKzoxMDZCQjAwMDAyMDAwMDkwMDAwMEZBMDgwNDAwMDA4MDAyNDA4MEJDM0YKKzoxMDZCQzAwMDAwMDAwMDAwMDAwMDAwRjgxRjgwRkYzQTAwMDBGRDA4RjAKKzoxMDZCRDAwMDgwMDEwMDgwQTI4MDJGQjYxODAwMzYwMENBMDAwMEY4OUQKKzoxMDZCRTAwMDczMEEwM0Y5MDAwMDE2MTMwNDAxMDA4MDAyODAyREJDMTMKKzoxMDZCRjAwMDAwMDA4NTA4ODAwMDAwODA3MjgxMkZCNjNEMDAxNjEzQ0EKKzoxMDZDMDAwMDEyMDAwMDJDODJDRDJFQjIwMDAwODUwODAwMDAwMEY4OTIKKzoxMDZDMTAwMDcyODEyRjk0MDAwMDE2MTMwNDA2MDE4MDAyQzA2RUJDMUUKKzoxMDZDMjAwMDAwMDAwMDAwMDBCQzAwMTQwODgwNkUzMjAwMDBGODA4NkMKKzoxMDZDMzAwMDEyMDAwMEM4MDIwMDIwQjIwMDAwRjYwODEyMDAwMDVDM0EKKzoxMDZDNDAwMDA4ODAyMEIyMDAwMDE2MTMwNEEwMDAxODA4MDA2RUIyREQKKzoxMDZDNTAwMDAwMDAwMDAwMDAwMDAwNzg3OTYxMzgzMjAwMDAxNjEzNEYKKzoxMDZDNjAwMDEyMTgwMjRDRTIyNTZFQjIwMDAwMTYxMzA0MDEwMDgwRDcKKzoxMDZDNzAwMDAyNDAyREJDMDgwMDAwMDAwMDEwMDIwMDc4RTE2RTM5Q0YKKzoxMDZDODAwMDAwMDAwMDAwMDAxODAwMjAwNzAwMDAzMjA3MDAwMDAwOEMKKzoxMDZDOTAwMDAwMDAwMDM4NzhDQUU5MzkwMDAwMTYxMzA0MDAwMDNDRUYKKzoxMDZDQTAwMDA4NDA4MEIyMDAwMDAwMDAwMDkwMDA2QzA4MDA2RTMyQzYKKzoxMDZDQjAwMDAwMDAwMDAwMDA5ODAwNEMwODAwNkUzMjAwMDAxNjEzMUYKKzoxMDZDQzAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMDAwMDUxMDAwMEQ4Q0MKKzoxMDZDRDAwMDAyMDAwMDMyMDAwMDAwMDA0RDAwMDAwMDY3RTA4MzNFMkIKKzoxMDZDRTAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjAwMDAwMDAwRTMKKzoxMDZDRjAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMDAwMTgwMDAwRUQKKzoxMDZEMDAwMDA3QzA4NDMyMDAwMDAwMDAwMDAwMDAxOEQ4QTA4MTNDQjkKKzoxMDZEMTAwMDAwMDA4NDA5MDRCMDAwRTBENjIwNkVCQzAwMDAxNjEzMDkKKzoxMDZEMjAwMDA5MDEwMDgwMDIwMDAwQjAwMDAwNDMwOTA0MDAwMDNDOUIKKzoxMDZEMzAwMEQ4RTA4M0JDMDAwMDE2MTMwNDAxMDA4MDAyODA4MUJDRUYKKzoxMDZENDAwMDAwMDAyNDA5ODAwMDAwODA5MjgwMkZCNjAwMDAxQzA5RkEKKzoxMDZENTAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4M0UKKzoxMDZENjAwMDczMEEwM0Y5MUQwMDAwMDAwMDAwMDA3ODA5QTQxNzM4MTkKKzoxMDZENzAwMDAwMDAyMTA5MDQwMTAwODAxMjgwOTdCQzAwMDAxNjEzNTYKKzoxMDZEODAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwMUIwOTY3MDAwMEY4NzgKKzoxMDZEOTAwMEEyODAyRkI1MDAwMDFDMDkwMDAwMDAwMDA5QzAyMTkyNEMKKzoxMDZEQTAwMDAwMDAyMzA5MDQwMDAwODAyMjgwOTdCQzAwMDAxNjEzMTUKKzoxMDZEQjAwMDA0MDEwMDgwMzI4MDk3QkMwMDAwMDAwMEM5MDEwMEQ4QTcKKzoxMDZEQzAwMDAyNDA4NDMyMDAwMDI3MDkwNDAwMDA4MDcyODAyREJDM0MKKzoxMDZERDAwMDAwMDAxNjEzMTIwMDAwNDRFMkUwMzhCMjAwMDAzNDA5NEIKKzoxMDZERTAwMDUxMDAwMEQ4MTI4MDJEOUEwMDAwMDAwMDAwMDAwMDc4QTkKKzoxMDZERjAwMEY5ODE4MzM0MDAwMDE2MTMxMjAwMDA0NEUyRTUzOEIyMzIKKzoxMDZFMDAwMDAwMDAyQzA5ODAwMDAwODA4MjgwMkZCNjAwMDBGNzExNUUKKzoxMDZFMTAwMDAwQTAwMTUwMDgwMDZFRjIwMDAwMDAwMDAwRjgwMUUwNDAKKzoxMDZFMjAwMDA2MDA4NTMyMDAwMDJFMDkxMjAxMDBFODAyQzAyMUIyREUKKzoxMDZFMzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAzMjA5NTgKKzoxMDZFNDAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwMjgKKzoxMDZFNTAwMEEyODAyRkI2MDAwMDJEMDk2NzAwMDBGOEEyODAyRkI1OTAKKzoxMDZFNjAwMDAwMDAxNjEzMTIwMDAwRTgwMkMwMjFCMjAwMDAxNjEzNDEKKzoxMDZFNzAwMDA0MDEwMDgwNzI4MDJEQkMwMDAwMDAwMDUxMDAwMEQ4ODkKKzoxMDZFODAwMDAyMDAwMDMyMDAwMDM5MDkyQTAxMDAwMEQ4MjA4MEJBMkYKKzoxMDZFOTAwMDAwMDAzODA5MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwQjQKKzoxMDZFQTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4OTkKKzoxMDZFQjAwMDAyNDA4NDMyMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4OUIKKzoxMDZFQzAwMDAwMDAwMDAwQ0FFMDAwNkMwODAwNkUzMjAwMDAwMDAwMDQKKzoxMDZFRDAwMDAwRTgwMDRDMDgwMDZFMzIwMDAwMTYxMzA0RjAwMDE4QTEKKzoxMDZFRTAwMDA4MDA2RUIyMDAwMDAwMDAwMDAwMDAzODE4ODE4MzM1RjEKKzoxMDZFRjAwMDAwMDAxMDA5MDRCMDAwODA4MjlCODFCQzAwMDAxNjEzQzIKKzoxMDZGMDAwMDBEMDEwMDgwMDIwMDAwQjAwMDAwMTYxMzlGMDAwMDE0NjUKKzoxMDZGMTAwMDE4NDA4MUJDMDAwMDAwMDBDQTAxMDBGODQyODAyRjM1RjMKKzoxMDZGMjAwMDA4QTAxMDA5MTIwMTAwNDBBMkNEMzlCMjAwMDAxNjEzQ0EKKzoxMDZGMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNEUwOTI5MzQwMkI4RDEKKzoxMDZGNDAwMDA4ODA2RUIyMDAwMDQ2MDkxMjAxMDAwMDA5QzAyMUIyOUIKKzoxMDZGNTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAwMDAwNTUKKzoxMDZGNjAwMDAwMDAwMDc4MDlBNDE3MzgwMDAwNEIwOTA0MDEwMDgwRDQKKzoxMDZGNzAwMDEyODA5N0JDMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2RkIKKzoxMDZGODAwMDAwMDA0NTA5NjcwMDAwRjhBMjgwMkZCNTAwMDA0NjA5RkYKKzoxMDZGOTAwMDAwMDAwMDAwMDlDMDIxOTIwMDAwNEQwOTA0MDAwMDgwOUIKKzoxMDZGQTAwMDIyODA5N0JDMDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDMzkKKzoxMDZGQjAwMDAwMDAwMDAwQzkwMTAwRDgwMjQwODQzMjAwMDAwMDAwMzcKKzoxMDZGQzAwMDAwMDAwMDc4Rjk4MTgzMzQwMDAwMTYxMzEyMDAwMDQ0OTkKKzoxMDZGRDAwMEUyRTUzOEIyMDAwMDU2MDkyODAwMDA2Q0Q4RTA4NkJBMTUKKzoxMDZGRTAwMDAwMDBGNjExMDBBMDAxNTAwODAwNkVGMjAwMDA1NjA5RTIKKzoxMDZGRjAwMDFERjgwMUUwMDYwMDg1QjIwMDAwNTYwOTgwMDAwMDgwRkYKKzoxMDcwMDAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyNTgKKzoxMDcwMTAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDA1QzA5MkQKKzoxMDcwMjAwMDA0QTAwMEUwMDY4MDgxQjIwMDAwMDAwMDAwQkMwMEU4N0YKKzoxMDcwMzAwMDA2NDA4MTMyMDAwMDAwMDAwMDkwMDBFMDA2QzA4NjMyNjkKKzoxMDcwNDAwMDAwMDAwMDAwMDA5ODAwRTAwNkMwODQzMjAwMDAxNjEzMjMKKzoxMDcwNTAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwNzAwOTAwMDAwMDgwNjgKKzoxMDcwNjAwMDAyMDAwMDkwMDAwMDYyMDk4MDAxMDA4MEEyODAyRkI2MUIKKzoxMDcwNzAwMDAwMDA1RjA5MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwQUIKKzoxMDcwODAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwNjIwOTA0MDEwMDgwODIKKzoxMDcwOTAwMDAyQTQxN0I4MDAwMDE2MTM4MDAwMDA4MEUyODAyRkI2MEIKKzoxMDcwQTAwMDAwMDA1RTA5MDAwMDAwRjhFMjgwMkY5NDAwMDAwMDAwNUMKKzoxMDcwQjAwMDAwRTAwMDZDMDgwMDZFMzIwMDAwMDAwMENBRTgwMDRDREUKKzoxMDcwQzAwMDA4MDA2RTMyMDAwMDE2MTMwNDAwMDA4MDMyRTE4NkIyMjAKKzoxMDcwRDAwMDAwMDAxNjEzMDRGMDAwMTgwODAwNkVCMjAwMDA2QjA5REYKKzoxMDcwRTAwMDA0QjAwMDgwODI5QjgxQkMwMDAwMTYxMzBEMDEwMDgwNUIKKzoxMDcwRjAwMDAyMDAwMEIwMDAwMDE2MTM5RjAwMDAxNDE4NDA4MUJDNkQKKzoxMDcxMDAwMDAwMDAwMDAwQ0EwMTAwRjg0MjgwMkYzNTA4QTAxNjEzQzUKKzoxMDcxMTAwMDEyMDAwMDQwQTJDRDM5QjIwMDAwMDAwMDAwQTAwMEUwNDMKKzoxMDcxMjAwMDA2ODA4MTMyMDAwMDAwMDAwMDk4MDBFMDA2QzA4NDMyMzIKKzoxMDcxMzAwMDAwMDAwMDAwMDA5MDAwRTAwNkMwODYzMjAwMDAxNjEzMzgKKzoxMDcxNDAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMDAwMDAwQkMwMEU4Q0MKKzoxMDcxNTAwMDA2NDA4MTMyMDAwMDc2MDkyQTVEMDFFODA2ODA4QkIyODQKKzoxMDcxNjAwMDAwMDA3MzA5MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwQTYKKzoxMDcxNzAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwNzYwOTA0MDEwMDgwN0QKKzoxMDcxODAwMDAyQTQxN0I4MDAwMDE2MTM4MDAwMDA4MEUyODAyRkI2MUEKKzoxMDcxOTAwMDAwMDA3MjA5MDAwMDAwRjhFMjgwMkY5NDEwMjQ3OTA5QTEKKzoxMDcxQTAwMDM3MDAwMEY4QTI4RDJGQjEzRDAwMTYxMzEyMDAwMDJDRkQKKzoxMDcxQjAwMDgyQ0QyRUIyMDAwMDAwMDAwMDAwMDBGODcyODEyRjM0NTIKKzoxMDcxQzAwMDA4MDAwMDAwQ0ExQzAxRTg3NjIwODEzOTAwMDA1NDEwMzQKKzoxMDcxRDAwMDAwMDAwMDJDRjkwMTAwRjQwMDAwN0YwOTgwMDAwMDgwMEQKKzoxMDcxRTAwMEUyODAyRkI2MDAwMDdFMDkxMjAxMDAwMDA5QzAyMUIyMjIKKzoxMDcxRjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAxNjEzOEEKKzoxMDcyMDAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwMTYxMzgwMDEwMDgwNUEKKzoxMDcyMTAwMDgyODAyRkI2MDAwMDE2MTMwNDAxMDA4MEMyMDAwM0JDNTgKKzoxMDcyMjAwMDEwMDAwMDAwMDAxODAwODA2N0ExNzMzOTMwMDBGNjAzRDkKKzoxMDcyMzAwMDEyMDEwMDVDQTI4RDJDQjIwMDAwMTYxMzAwMDAwMDgwMjkKKzoxMDcyNDAwMDAyMDAwMDkwMDAwMDhBMDk4MDAwMDA4MDkyODAyRkI2MjIKKzoxMDcyNTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAxNjEzMjkKKzoxMDcyNjAwMDA0MDAwMDc4MDlBNDE3QjgwMDAwODkwOTA0MDAwMDgwMTAKKzoxMDcyNzAwMDIyODA5N0JDMDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDNjYKKzoxMDcyODAwMDAwMDAwMDAwQzkwMTAwRDgwMjQwODQzMjAwMDAxNjEzM0IKKzoxMDcyOTAwMDA0MDEwMDgwRDJFMDgzQkMwMDAwMTYxMzJBMDAwMDc4QUQKKzoxMDcyQTAwMEY5ODE4M0I0MDAwMDE2MTMxMjAwMDA0NEUyRTUzOEIyRkQKKzoxMDcyQjAwMDAwMDA2NDExMDAwMDAwMzAwMzAwMzhGMjAwMDA5MjA5NjEKKzoxMDcyQzAwMDFEMDAwMDM4MTg4MTgzQjUwMDAwOTIwOTgwMDAwMDgwRkQKKzoxMDcyRDAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyODYKKzoxMDcyRTAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDAxNjEzOTcKKzoxMDcyRjAwMDg3MDYwMUVDMTZDMDZFQkMwMDAwOTYwOTBCMDAwMDgwRUEKKzoxMDczMDAwMDAyMDAwMEIwMDAwMDAwMDBDQTAxMDBGODQyODAyRjM0RTMKKzoxMDczMTAwMDA4QzAxNjEzMTIwMDAwNDBBMkNEMzlCMjAwMDA5OTA5MkUKKzoxMDczMjAwMDgwMDAwMDgwODI4MDJGQjYwMDAwRjcxMTAwQTAwMTUwN0QKKzoxMDczMzAwMDA4MDA2RUYyMDAwMDAwMDAwMEY4MDFFMDA2MDA4NTMyNEYKKzoxMDczNDAwMDAwMDA5QjA5MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwOUMKKzoxMDczNTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwQkQwOTJBMzUwMkI4REQKKzoxMDczNjAwMDA4ODA2RUIyMDAwMDlFMDkxMjAxMDAwMDA5QzAyMUIyMUYKKzoxMDczNzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNEUKKzoxMDczODAwMDAwMDAwMEY4QTI4MDJGMzUwMDAwQjUwOTA0MDAwMDgwM0QKKzoxMDczOTAwMDAyNjE4MEJDMDAwMEFEMDk4MEI4MDAwMDA5QzA2RUIyNzcKKzoxMDczQTAwMDQwMDBBNTA5MDQwMDAwODA4MjBEOTBCQzgwMDAxNjEzRTcKKzoxMDczQjAwMDA0MDEwMDgwODIwRDkwQkMwMDAwQTUwOTAyQjAwMDgwOEQKKzoxMDczQzAwMDgyMUI4NEJDMDAwMEFEMDkwMDAwMDBGOEIyODEyRjk0M0MKKzoxMDczRDAwMDAwMDAxNjEzMDQwNzAxODAxMkMwNkVCQzAwMDAxNjEzRDMKKzoxMDczRTAwMDgwMDAwMDgwQjI4MTJGQjYwMDAwMTYxMzgwRDYwMTgwODUKKzoxMDczRjAwMDUyQzA2RUI2MDAwMDAwMDAwMEQ2MDFFQzU2QzA2RTM0REMKKzoxMDc0MDAwMDAwMDAwMDAwMDAwMDAwNjAxODAwODYzQTAwMDAwMDAwNDQKKzoxMDc0MTAwMDAwMDAwMDgwQjcwMTc4MzQwMDAwMDAwMDAwNzgwMUUwMkYKKzoxMDc0MjAwMDA2MDA4NjMyNDAwMEJEMDkwNDAwMDA4MDgyMEQ5MEJDMzkKKzoxMDc0MzAwMDAwMDAxNjEzMDRBMDAwMTgwODAwNkVCMjAwMDA5RTEyOEYKKzoxMDc0NDAwMDAwMDAwMDAwRDgyMDgwRkEwMDAwMTYxMzA2MDAwMDNDNUYKKzoxMDc0NTAwMDE4MjA4NEJDMDAwMDE2MTMwNEIwMDAzQzg4REI4M0JFRjcKKzoxMDc0NjAwMDAwMDAxNjEzODAwMTAwODBDMjAxNzhCNjAwMDAwMDAwMDEKKzoxMDc0NzAwMDAwMDAwMDgwRjcyMDc4M0EwMDAwMDAwMDU4NzgwMUUwMTIKKzoxMDc0ODAwMEY2MjA4NjNBMDAwMDBDMDkwMDAwMDAwNEY4NjA4MDlBOUIKKzoxMDc0OTAwMDAwMDBCODA5ODBCOTAwMDAwOUMwNkVCMjJGMDBCRDA5MTQKKzoxMDc0QTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwQzUKKzoxMDc0QjAwMDAyMDAwMDkwNDAwMEJBMDkwNDAxMDA4MDgyMEQ5MEJDRDcKKzoxMDc0QzAwMDM4MDBCQzA5MDAwMDAwNzgwOTAwMzY5MjgwMDAxNjEzQ0QKKzoxMDc0RDAwMDA0MDEwMDgwODIwRDkwQkMzOTAwMDAwMDAwMDAwMDc4OUIKKzoxMDc0RTAwMDA5MDAzNjMyMDAwMDE2MTMxMjAwMDAyQ0UyRTUyRUIyMUQKKzoxMDc0RjAwMDAwMDAxNjEzODAwMTAwODA4MjgwMkZCNjAwMDAxNjEzNTIKKzoxMDc1MDAwMDA0MDEwMDgwQzIwMDAzQkMxMDAwMDAwMDAwMTgwMDgwQ0QKKzoxMDc1MTAwMDY3QTE3MzM5MDAwMDAwMDAwMDVDMDFFODA2ODA4QjMyMkYKKzoxMDc1MjAwMDEwMjQwMDAwMDAwMDAwRjhBMjhEMkYzMTMwMDA4NTA4RTMKKzoxMDc1MzAwMDEyMDEwMDVDQTI4RDJDQjIwMDAwMTYxMzAwMDAwMDgwMjYKKzoxMDc1NDAwMDAyMDAwMDkwMDAwMDE2MTM4MDAxMDA4MEMyODEyRkI2NTcKKzoxMDc1NTAwMDAwMDAwMDA5MDAwMDAwRjhDMjgxMkY5NTAwMDAwMDAwMjMKKzoxMDc1NjAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwMDAwMDAwMDAwMEQ4OTAKKzoxMDc1NzAwMDAyODAwMTMyMDBDMENDMDkxODAxMDAwQ0E4Q0QzRUIyMzcKKzoxMDc1ODAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjJEMDBFRjAzNDQKKzoxMDc1OTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwRDQKKzoxMDc1QTAwMDAyMDAwMDkwMDAwMDAwMDAwMDYyMDEzODA4QzA2RTMyNDYKKzoxMDc1QjAwMDAwMDgwMDgwMDAwMDAwMjgwOTAwMzczMjAwNjBFQjExNEQKKzoxMDc1QzAwMDAwMDAwMDA4MDg4MDM2RjIwMDAwREEwOTAwMDAwMDgwQTAKKzoxMDc1RDAwMDAyMDAwMDkwMDAwMEQyMDk4MDAwMDA4MEMyODEyRkI2MTYKKzoxMDc1RTAwMDAwMDBENTA5MDBEMDAxRTgwNjAwMDA5MjAwMDAwMDAwNkMKKzoxMDc1RjAwMDAwMDAwMEY4QzI4MTJGMzUwMDAwRDUwOTA0RDEwMTgwQjgKKzoxMDc2MDAwMDAyODA2RUJDMDAwMDAwMDAwMEQ2MDFFQzI2QzA2RTM0ODMKKzoxMDc2MTAwMDAwMDBENzA5ODAwMDAwODA5MjgxMkZCNjAwMDBEQTA5QUYKKzoxMDc2MjAwMDAwQzgwMUU4MDYwMDAwOTIwMDAwMDAwMDAwMDAwMEY4MTkKKzoxMDc2MzAwMDkyODEyRjM1MDAwMERBMDkwNEM5MDE4MDAyODA2RUJDRjYKKzoxMDc2NDAwMDAwMDAwMDAwMDBENjAxRUMxNkMwNkUzNDExMDA4NTA4NjEKKzoxMDc2NTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMTMKKzoxMDc2NjAwMDAyMDAwMDkwMDAwMDg1MDg5QTAxMDBGODQyODEyRkI1QzEKKzoxMDc2NzAwMDAwMDBFMzA5MTIwMTAwQzgwMjAwMjBCMjAwMDAwMDAwNkYKKzoxMDc2ODAwMDAwNUMwMUVDMDY0MDAwMzIwMDAwODUwODM3MDAwMEY4N0QKKzoxMDc2OTAwMDQyODEyRkI0MDAwMDAwMDAwMDAwMDBGODcyODEyRjM0RjYKKzoxMDc2QTAwMDNEMDA4NTA4MTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzNzkKKzoxMDc2QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRUUwOTEyMDEwMDVDNTIKKzoxMDc2QzAwMDA4ODAyMEIyMDAwMERFMDkxMjAxMDA2MDAyODAyQ0IyQTYKKzoxMDc2RDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBFQjA5N0IKKzoxMDc2RTAwMDEyMDEwMEM4MDIwMDIwQjIwMDAwODUwODM3MDAwMEY4MkYKKzoxMDc2RjAwMEQyODEyRkI0MDAwMDAwMDAwMDAwMDBGODcyODEyRjM0MDYKKzoxMDc3MDAwMDNEMDA4NTA4MTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMTgKKzoxMDc3MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRUUwOTEyMDEwMDVDRjEKKzoxMDc3MjAwMDA4ODAyMEIyMDAwMEU3MDkxMjAxMDA2MDAyODAyQ0IyM0MKKzoxMDc3MzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMEUKKzoxMDc3NDAwMDAwMDAwMDc4Nzk2MTM4MzIwMDAwMTYxMzEyMTgwMjRDREMKKzoxMDc3NTAwMEUyMjU2RUIyMDAwMDAwMDAwMDM0MDJCODA4ODA2RTMyRUMKKzoxMDc3NjAwMDAwMDAwMDAwMDBBMDAxNTAwODAwNkUzMjAwMDAwMDAwODAKKzoxMDc3NzAwMDAwNzgwMTYwMDgwMDZFMzIwMDAwRjUwOTlEMTEwMjM0QTYKKzoxMDc3ODAwMDA5MDA2RUIyMDAwMDAwMDAwMEYwMDE4ODA4MDA2RTMyQUYKKzoxMDc3OTAwMDAwMDAxMjEyMDBBODAxMDgwOTAwNkVGMjAwMDAwMDAwQUIKKzoxMDc3QTAwMEQ0RjgwMUUwMDYwMDg1MzIwMDAwMDAwMERBNUMwMUU4NTAKKzoxMDc3QjAwMDA2ODA4QjMyMDAwMDY0MTFERDAwMDAzMDAzMDAzOEYyRDcKKzoxMDc3QzAwMDAwMDBGQjA5MjMyOTAyMDQwOTgwNkVCMjNFMDAxNjEzNTMKKzoxMDc3RDAwMDEyMDAwMDJDODJDRDJFQjIwODAwRkYwOTFEMUMwMUU4MEEKKzoxMDc3RTAwMDc2MjA4MUI5MDAwMEZGMDk4MDAwMDA4MDAyODEyRkI2NTkKKzoxMDc3RjAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDAwMDAwQzkKKzoxMDc4MDAwMDAwMDAwMEY4MDI4MTJGMzQwMDAwNTQxMDAwMDAwMDJDMEEKKzoxMDc4MTAwMEY5MDEwMEY0MDAwMDAzMEE5RDAxMDA4MDA3NDA5M0IyQzMKKzoxMDc4MjAwMDAwMDAwMDAwMDAzMDAwODAwNzgwODgzMjAwMDAwMDAwNjcKKzoxMDc4MzAwMDAwMzgwMDgwMDcwMEVFMzIwMDAwMDAwMDAwMDgwMDgwRTEKKzoxMDc4NDAwMDA3QzA4NTMyMDAwMDAwMDAwMDEwMDA4MDA3NDA5MDMyMjEKKzoxMDc4NTAwMDEwMDAwMDAwMDAxODAwODA4NzhEODUzNzAwMDAwMDAwQjAKKzoxMDc4NjAwMDAwMjAwMDgwMDcwMDg2MzIwMDAwMDAwMDAwMjgwMDgwMTEKKzoxMDc4NzAwMDA3MDA4NTMyMDAwMDBBMEExMjAxMDAwMDA5QzAyMUIyODcKKzoxMDc4ODAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTMwMDBGNjAzMTAKKzoxMDc4OTAwMDEyMDEwMDVDQTI4RDJDQjIwMDAwMTYxMzAwMDAwMDgwQzMKKzoxMDc4QTAwMDAyMDAwMDkwMDAxMjE2MTMwNDAxMDA4MEEyOEQyRkIwNzgKKzoxMDc4QjAwMDAwMDAwMDAwMDBDQzAxNzgwOTgwNkUzMjAwMDA4NTA4Q0QKKzoxMDc4QzAwMERDRDEwMUU4MDY4MDk3OTIxMzAwODUwODEyMDEwMDJDOTQKKzoxMDc4RDAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwM0UKKzoxMDc4RTAwMDAwMDBFMzBGMDAwMDAwMTgwOTQwODFGMjAwMDBDNzBGRkMKKzoxMDc4RjAwMDAwQTgwMTIwMDkwMDZFRjIwMDAwODUwODgwMDEwMDgwQzgKKzoxMDc5MDAwMEYyODAyRkI2MDAwMDE5MEExMjAxMDBDODAyMDAyMEIyNEUKKzoxMDc5MTAwMDAwMDA4NTA4ODAwMDAwODA3MjgxMkZCNjAwMDAwMDAwMDIKKzoxMDc5MjAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwODUwODEyMDEwMDJDMDAKKzoxMDc5MzAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwREQKKzoxMDc5NDAwMDAwMDBFRTA5MTIwMTAwNUMwODgwMjBCMjAwMDAxNTBBNTgKKzoxMDc5NTAwMDEyMDEwMDYwMDI4MDJDQjIwMDAwMTYxMzAwMDAwMDgwQUIKKzoxMDc5NjAwMDAyMDAwMDkwMDAwMDg1MDgzNTAxMDBGODEyODEyRkI1NTMKKzoxMDc5NzAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwN0EKKzoxMDc5ODAwMDAwNTQwMUZDMDJDMDZFMzIwMEMwMjMwQTE4MDEwMDBDMzIKKzoxMDc5OTAwMEE4Q0QzRUIyMjA4MDAwMDBEMTAxMDAwODA4ODAzNjMyMTgKKzoxMDc5QTAwMDNCMDBGMzAzMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMEYKKzoxMDc5QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTIxMTAwOTgwMTI4MDEKKzoxMDc5QzAwMDA5MDA2RUYyMDAwMDg1MDgwMDAwMDA4MDAyMDAwMDkwQUYKKzoxMDc5RDAwMDAwMDAyRjBBODAwMTAwODBBMjgxMkZCNjAwMDAyRjBBMkMKKzoxMDc5RTAwMDgwMDAwMDgwNDI4MTJGQjYxRjAwMDAwMDAwMDAwMDEwQzAKKzoxMDc5RjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODAyRkQyRTYKKzoxMDdBMDAwMDNDMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMjcKKzoxMDdBMTAwMDAwMDAwMDE0MDk4MDNDRDIwMDAwMkYwQTA4NUIwMUVDMzIKKzoxMDdBMjAwMDA2RkI2RUJDMDAwMDAwMDAwMDVBMDFFQzA2MDAwMDMyQUMKKzoxMDdBMzAwMDAwMDAyRjBBMzcwMDAwRjg0MjgxMkZCNDNEMDAwMDAwRkIKKzoxMDdBNDAwMEQ3MDEwMDJDODJDRDJFMzIwMDAwMzYwQTgwMDEwMDgwNDIKKzoxMDdBNTAwMDkyODEyRkI2MDAwMDE2MTM4MDAwMDA4MEMyODEyRkI2REQKKzoxMDdBNjAwMDAwMDAzRDBBMDhDOTAxRTgwNkJCNkVCQzAwMDAwMDAwMkEKKzoxMDdBNzAwMDAwQzgwMUU4MDYwMDAwMzIzMzAwMTYxMzEyMDAwMDJDODMKKzoxMDdBODAwMDgyQ0QyRUIyMDAwMEYzMTEwMDAwMDAyODA5ODAwMUYyMUYKKzoxMDdBOTAwMDAwMDA4NTA4MDAwMDAwODAwMjAwMDA5MDAwMDAzRDBBMDAKKzoxMDdBQTAwMDgwMDEwMDgwQzI4MTJGQjYwMDAwMTYxMzgwMDAwMDgwODQKKzoxMDdBQjAwMDkyODEyRkI2MDAwMDNEMEEwOEQxMDFFODA2QkI2RUJDREEKKzoxMDdBQzAwMDAwMDAwMDAwMDBEMDAxRTgwNjAwMDAzMjMzMDAxNjEzNjkKKzoxMDdBRDAwMDEyMDAwMDJDODJDRDJFQjIwMDAwRjMxMTAwMDAwMDI4MEQKKzoxMDdBRTAwMDA5QzAwMUYyMDAwMDg1MDgwMDAwMDA4MDAyMDAwMDkwM0IKKzoxMDdBRjAwMDAwMDA4NTA4ODAwMTAwODBGMjgxMkZCNjE4MDA4NTA4RkIKKzoxMDdCMDAwMDAwMDAwMDJDODJDRDJFOTIwMDAwMTYxMzA0MDcwMTgwODUKKzoxMDdCMTAwMDEyQzA2RUJDMDAwMDQzMEExMjAwMDBDODAyMDAyMEIyNkUKKzoxMDdCMjAwMDAwMDA0NjBBMTIwMTAwNUMwODgwMjBCMjAwMDAxNjEzMTMKKzoxMDdCMzAwMDEyMDAwMDYwMDI4MDJDQjIwMDAwMDAwMDAwMDAwMEY4N0IKKzoxMDdCNDAwMDFGODBGRjNBMDAwMEYzMDMxMjAxMDAyQzcyRTAyRUIyRjYKKzoxMDdCNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRUEKKzoxMDdCNjAwMDAwMDAwMDc4Nzk2MTM4MzIwMDAwMTYxMzEyMTgwMjRDQjgKKzoxMDdCNzAwMEUyMjU2RUIyMDAwMDAwMDAwMDM0MDJCODA4ODA2RTMyQzgKKzoxMDdCODAwMDAwMDAwMDAwRDRBMDAxNTAwODAwNkUzMjAwMDAwMDAwODgKKzoxMDdCOTAwMERCNzkwMTYwMDgwMDZFMzIwMDAwRjcxMUREMDAwMDA0OUYKKzoxMDdCQTAwMDA4MDAwMEYyMTAwMDAwMDAwMDE4MDA4MDg3OEQ4NTM3NjMKKzoxMDdCQjAwMDAwMDAwMDAwMDBGODAxRTAwNjAwODUzMjAwMDA1MDBBRDUKKzoxMDdCQzAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4QzAKKzoxMDdCRDAwMDczMEEwM0Y5MzAwMDE2MTMxMjAwMDA1Q0EyOEQyQ0IyNTgKKzoxMDdCRTAwMDAwMDAxNjEzMDQwNzAxRUMxNkMwNkVCQzAwMDAwMDAwNzQKKzoxMDdCRjAwMDAwQjAwMEUwMDYwMDAwMzIwMDAwODUwOERBNUMwMUU4MTEKKzoxMDdDMDAwMDA2ODA4QjkyMDAwMDg1MDg5RjQxMDE4MDUyMjA2RUJDNDcKKzoxMDdDMTAwMDAwMDA1RjBBOUY5ODAxODA1MjIwNkVCQzAwMDAwMDAwQTcKKzoxMDdDMjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDAwNTQwMUZDNzYKKzoxMDdDMzAwMDAyQzA2RTMyMDBDMDVEMEExODAxMDAwQ0E4Q0QzRUIyMzEKKzoxMDdDNDAwMDIwODA4NTA4MzEwMDAwMDgwODgwMzZCMjAwMDAwMDAwNUUKKzoxMDdDNTAwMDAwMDAwMEY4MTI4MTJGMzQzQjAwODUwODEyMDEwMDJDMkYKKzoxMDdDNjAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQUEKKzoxMDdDNzAwMDAwMDBFMjExMDA5ODAxMjgwOTAwNkVGMjAwMDA4NTA4NUEKKzoxMDdDODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwODUwOEQ1NDEwMUUwNUUKKzoxMDdDOTAwMDA2NDA4MTkyMDAwMDg1MDgwNEIwMDA4MDAyMDA2RUJDOUUKKzoxMDdDQTAwMDAwMDAwMDAwMDA5MDAxMDAwODAwNkUzMjAwMDAwMDEzODgKKzoxMDdDQjAwMDAwNzgwMTYwMDgwMDZFRjIwMDAwODUwODAwMDAwMDgwNzYKKzoxMDdDQzAwMDAyMDAwMDkwMDAwMDAwMDAwMDBDMDI3ODA5ODA2RTMyNzMKKzoxMDdDRDAwMDAwMDA2NzBBMDRENDAxODAxMkMwNkVCQzAwMDAwMDAwREUKKzoxMDdDRTAwMDAwMDAwMDc4MTk4MDk3MzcwMDAwMDAwMDAwOTAwMUUwNDQKKzoxMDdDRjAwMEU2MjU2RTNBMDAwMDAwMTMwMDAwMDA4MDAyMDAwMEYwNEMKKzoxMDdEMDAwMDAwMDA2QjBBMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4NUYKKzoxMDdEMTAwMDAwOTAwMUUwMDYwMDgwOTIwMDAwMDAwMDAwOTAwMUUwNjkKKzoxMDdEMjAwMDA2MDA4MDMyMDAwMDAwMDkwMDAwMDA4MDAyMDAwMDkwODAKKzoxMDdEMzAwMDAwMDAxNjEzODAwMDAwODBGMjgwMkZCNjAwMDBDNzBGRUQKKzoxMDdENDAwMDAwQTgwMTIwMDkwMDZFRjIwMDAwMTQwQTgwMDAwMDgwRTMKKzoxMDdENTAwMEYyODAyRkI2MDAwMDg1MDgwMDAwMDA4MDAyMDAwMDkwMkQKKzoxMDdENjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwODYKKzoxMDdENzAwMDAwMDAwMDc4MDkwMDZFMzIwMjAwNzYwQTA0QjkwMDgwMjMKKzoxMDdEODAwMDgyQ0Q2RUJDMDAwMDc4MEE4MDAwMDA4MDcyODBGQ0I2NTQKKzoxMDdEOTAwMDAwMDA3QjBBMDAwMDAwRkMwMjAwMDA5MjAwMDA3ODBBNEMKKzoxMDdEQTAwMDgwMDAwMDgwODI4MEZDQjYwMDAwN0IwQTAwMDAwMEZDOUUKKzoxMDdEQjAwMDAyMDAwMDkyMDAwMDE2MTMwNDAwMDA4MDAyMDBGNUJDQ0YKKzoxMDdEQzAwMDAwMDAwMDAwMDAwMDAwQTg0MkJEOTczMDAwMDAwMDAwNDUKKzoxMDdERDAwMDU0MTgwOUZFRjJDMDdDMzAwMEMwODEwQTE4MDEwMDBDNjIKKzoxMDdERTAwMEE4Q0QzRUIyMDAwMDAwMDAwMDBFMDFFQzA2MDAwMDM0RjkKKzoxMDdERjAwMDAwMDAwMDAwMDA1NDAxRUMwNkMwMkYzMjIwODAwMDAwN0IKKzoxMDdFMDAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwRjMwMzEyMDEwMDJDNDUKKzoxMDdFMTAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRjgKKzoxMDdFMjAwMDAwMDAwMDAwMDA2MjAxMzgwOEMwNkUzMjAwMDgwMDgwQzcKKzoxMDdFMzAwMDAwMDAwMDI4MDkwMDM3MzIwMDAwRUIxMTAwMDAwMDA4QTQKKzoxMDdFNDAwMEU4MDEwMEY0MDAwMDE2MTMwNDA3MDFFQzE2QzA2RUJDMzQKKzoxMDdFNTAwMDAwMDAwMDAwMDAwMDAwQThBMjAwMkQzNzBBMDAwMDAwNkEKKzoxMDdFNjAwMDAwMDAwMDc4MDkwMDM2MzIwMDAwMDAwMDAwMTgwOUUyMjYKKzoxMDdFNzAwMDA3MDAwMDMyMDAwMDg3MEEwNDAxMDA3ODE5ODA5N0JDQ0YKKzoxMDdFODAwMDAyMDA5MjBBMDRCOTAwODA4MkNENkVCQzAwMDAwMDQ4NTYKKzoxMDdFOTAwMEQ2MDEwMDc4QzlDRDJDMzIwMDAwOEIwQUI2MDAwMDgwRDQKKzoxMDdFQTAwMDAyMDAwMEIwMDAwMDE2MTMxMjAwMDA2NDAyODA5N0IyQjYKKzoxMDdFQjAwMDAwMDA4RDBBMTIwODAwNjQwMjAwNkVCMjAwMDA4RTBBRjMKKzoxMDdFQzAwMDEyMTgwMDY0MDIwMDZFQjIwMDAwOEYwQTEyMTAwMDY0RTMKKzoxMDdFRDAwMDAyMDA2RUIyMDAwMDAwMDBBNjU0MDFFQzA2QzAyRjMyNzIKKzoxMDdFRTAwMDAwMDA3RDA4MDAwRTAxRUMwNjAwMDA5NDAwMjAwMDRDMEMKKzoxMDdFRjAwMEQ2MDEwMDc4QzlDRDJDMzIwMDAwOTMwQUI2MDAwMDgwNkMKKzoxMDdGMDAwMDAyMDAwMEIwMDAwMDE2MTMxMjAwMDA2NDAyODA5N0IyNTUKKzoxMDdGMTAwMDAwMDA5NTBBMTIwODAwNjQwMjAwNkVCMjAwMDA5NjBBODIKKzoxMDdGMjAwMDEyMzAwMDY0MDIwMDZFQjIwMDAwOTcwQTEyMzgwMDY0M0EKKzoxMDdGMzAwMDAyMDA2RUIyMDAwMDk4MEExMjQwMDA2NDAyMDA2RUIyQTUKKzoxMDdGNDAwMDAwMDA5OTBBMTI0ODAwNjQwMjAwNkVCMjAwMDA5QTBBMEEKKzoxMDdGNTAwMDEyMTAwMDY0MDIwMDZFQjIwMDAwOUIwQTEyMTgwMDY0NDYKKzoxMDdGNjAwMDAyMDA2RUIyMDAwMDlDMEExMjIwMDA2NDAyMDA2RUIyOTEKKzoxMDdGNzAwMDAwMDA5RDBBMTIyODAwNjQwMjAwNkVCMjAwMDAwMDAwOUEKKzoxMDdGODAwMEE2NTQwMUVDMDZDMDJGMzIwMzAwN0QwODAwMEUwMUVDNjAKKzoxMDdGOTAwMDA2MDAzNjkyMDAwMDAwMDAwMDAwMDBGQzAyMDAwMTMyRTIKKzoxMDdGQTAwMDAwMDBBMzBBMDAwMDAwMTQwODgwM0Q5MjAwMDAwMDAwQjkKKzoxMDdGQjAwMDAwMDAwMEZDMDIwMDAxMzIwMDAwQTYwQTA0MDAwMERDMDAKKzoxMDdGQzAwMDUzNjAzREIzMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5QzUKKzoxMDdGRDAwMEEyMEEzNjAwMDAwMDAwQzAwMjAwMzY5MjAwMDAwMDAwMzUKKzoxMDdGRTAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwMDAwMDAwMDAwMEQ4MDYKKzoxMDdGRjAwMDAyODAwMTMyMDBDMEFDMEExODAxMDAwQ0E4Q0QzRUIyQ0MKKzoxMDgwMDAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjE1MDBFRjAzRDEKKzoxMDgwMTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwNDkKKzoxMDgwMjAwMDAyMDAwMDkwMDAwMDAwMDAwMDI4MDAwMDA3MDAwMDMyNUQKKzoxMDgwMzAwMDAwMDAwMDAwMDAzMDAwMDAwN0MwMkMzMjAwMTAwMDgyNTkKKzoxMDgwNDAwMDAwMzgwMDAwMDcwMDM3MzIwMDAwMTYxMzEyMDAwMDQ4MDUKKzoxMDgwNTAwMDAyQzA4MEIyMDAwMDdEMDhDQTAxMDAwOEU4MDEwMDk0NTcKKzoxMDgwNjAwMDAwMDAxNjEzODAwMTAwODA2MjgxMkZCNjJEMDAxNjEzQzgKKzoxMDgwNzAwMDEyMDAwMDJDODJDRDJFQjIwMDAwQjUwQTFEMDEwMDgwMzYKKzoxMDgwODAwMDAyMDAwMEIwMDAwMDdEMDgwMDAwMDBGODYyODEyRjk1MUEKKzoxMDgwOTAwMDAwMDAxNjEzODAwMDAwODAwMjgxMkZCNjAwMDAwMDAwNEYKKzoxMDgwQTAwMDAwMDAwMEY4MDI4MTJGMzQyQTAwN0QwODEyMDEwMDJDMDQKKzoxMDgwQjAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTYKKzoxMDgwQzAwMDAwMDBENzExMDAwMDAwMkMwOUMwODVEMjAwMDA2NDExMDcKKzoxMDgwRDAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwRjMwMzIzMDEwMEY4MzEKKzoxMDgwRTAwMDIyODEyRkI0M0UwMEYzMDMxMjAxMDAyQzgyQ0QyRUIyNjgKKzoxMDgwRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBENzExNUQKKzoxMDgxMDAwMDAwMDAwMDJDMDlDMDg1RDIwMDAwRjMwMzAwMDAwMEY4MzUKKzoxMDgxMTAwMDIyODEyRjk0MDAwMEM1MEEzODAxMDBEODAyODAwMUIyRTQKKzoxMDgxMjAwMDAwMDBDMzBBMUUwMDAwODAwMjAwMDBCMDAwMDBDNTBBNjMKKzoxMDgxMzAwMDFBMDEwMDgwMDIwMDAwQjAwMDAwMzgxMjAwMDAwMDY4NDAKKzoxMDgxNDAwMDFGODBGNkZBMDAwMEYzMDMwMDAwMDA4MDAyMDAwMDkwOTgKKzoxMDgxNTAwMDAwMDBDOTBBMTIwMTAwNjAwODQwMjNCMjAwODIwMDAwM0EKKzoxMDgxNjAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwMzgxMjAwMDAwMDY0NjkKKzoxMDgxNzAwMDFGNDBGNkZBMDAwMEYzMDMwMDAwMDA4MDAyMDAwMDkwQTgKKzoxMDgxODAwMDAwMDAxNjEzMTIwMDAwMjQwODAwMjNCMjAwMDAxNjEzOEEKKzoxMDgxOTAwMDEyMDAwMDIwMDhDMDIzQjIwMDAwMTYxMzEyMDAwMDE4QkQKKzoxMDgxQTAwMDA4ODAyM0IyMDBDMEQ0MEExODAxMDAwQ0E4Q0QzRUIyNEEKKzoxMDgxQjAwMDAwMDBDQzBBMTIwMDAwMzgwMjgwODFCMjAwMDAxNjEzQzEKKzoxMDgxQzAwMDEyMDAwMDNDMDIwMDgyQjIwMDAwMTYxMzEyMDAwMDMwQzAKKzoxMDgxRDAwMDAyNDA4MkIyMDAwMDE2MTMxMjAwMDAzNDAyMDA4NkIyODAKKzoxMDgxRTAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDAzODEyQUQKKzoxMDgxRjAwMDAwMDAwMDVDMUZDMEY1RkEwMDAwRjMwMzAwMDAwMDgwREYKKzoxMDgyMDAwMDAyMDAwMDkwMDAwMDAwMDA0NTAwMDBEODAyMDAwMDMyOEIKKzoxMDgyMTAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAwMDAwNjUKKzoxMDgyMjAwMDAwMTAwMDAwMDc0MDgyMzIwMDAwMDAwMDAwMTgwMDAwMkIKKzoxMDgyMzAwMDA3MDA4NjMyMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0NTUKKzoxMDgyNDAwMDAwMDA3QTBGMDAzMDAxRTAxNjIwNkVGQTAwMDBERDBBMEYKKzoxMDgyNTAwMDM4MDEwMDJDRjgwMTBCQjQwMDAwREQwQTAyMEQwMjgwODkKKzoxMDgyNjAwMEEyNUI4MEJDMDAwMDAwMDAwMDAwMDAyQ0M4QzE4MjM0NkEKKzoxMDgyNzAwMDAwMDBERjBBODAwMDAwODA0MjgxMkZCNjAwMDBCNDBGQUEKKzoxMDgyODAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwMTYxMzlGQTgwMUUwMkIKKzoxMDgyOTAwMDE2MjA2RUJDMDAwMEQ0MEYwMDAwMDA4MDAyMDAwMEYwMjkKKzoxMDgyQTAwMDAwMDBFNTBBMjcwMTAwRDgwMjgwMDFCMjAwMDAwMDAwQUEKKzoxMDgyQjAwMEM3MDAwMDJDRThDMDgyMzQwMDAwMDAwMDAwMDAwMDA4NjUKKzoxMDgyQzAwMEQ4MDEwMDM0MDAwMDAwMDBENTQwMDFFMDA2MDA4NzMyRUMKKzoxMDgyRDAwMDA4MDA0QjEyMDAxODAxRTg3NjIwODFGOTAwMDA2NDExQjMKKzoxMDgyRTAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwRTkwQTIzMTkwMDAwMDIKKzoxMDgyRjAwMDA3ODA4MUIyM0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyRjAKKzoxMDgzMDAwMDAwMDBFQjBBMUQyMTAwMDAwNzAwODJCMjAwMDBFRTBBMDcKKzoxMDgzMTAwMDAwMDAwMEY4NjI4MTJGOTUwMDAwRUUwQTgwMDAwMDgwQzYKKzoxMDgzMjAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMjUKKzoxMDgzMzAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDAxNjEzMzYKKzoxMDgzNDAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwNTQxMDAwMDAwMDJDOTYKKzoxMDgzNTAwMEY5MDEwMEY0MDAwMDE2MTMwNDAxMDA4MDYyODAyREJDQjYKKzoxMDgzNjAwMDEwMDBGNDBBMkMzMDAwMDAxN0UwMkNCOTAwMDBGNjBBQzcKKzoxMDgzNzAwMDhFMzkwMDAwMDdDMDgyQjIwMDAwRjYwQTAwMDgwMDAwMzMKKzoxMDgzODAwMDA3MDA4NzkyMDAwMEY2MEE4RTM5MDAwMEI3QzE4MkI0NTgKKzoxMDgzOTAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODczMjAwMDBGODBBMTMKKzoxMDgzQTAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4RjcKKzoxMDgzQjAwMDczMEEwM0Y5MDAwMEY2MEE5RjAxMDAxNDE4NDA4MUJDRkIKKzoxMDgzQzAwMDAwMDBGRTBBMDQwMDAwODAwMkMwODVCQzAwMDAxNjEzRjUKKzoxMDgzRDAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwMDAwMDAwMDAwMDc4QUYKKzoxMDgzRTAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDQ0YKKzoxMDgzRjAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDAxNjEzMDUKKzoxMDg0MDAwMDEyMDAwMDQ4MDJDMDgwQjIwMDAwMTYxMzA0MDEwMDgwNzAKKzoxMDg0MTAwMEQyODE4MEI1MDAwMEY2MDNDQTAxMDAwOEU4ODE4MDk0OEIKKzoxMDg0MjAwMDAwMDAxNjEzODAwMTAwODA4MjgxMkZCNjAwMDAwNDBCMkIKKzoxMDg0MzAwMDFFMDAwMDgwMDIwMDAwQjAwMDAwMDYwQjFBMDEwMDgwNDAKKzoxMDg0NDAwMDAyMDAwMEIwMDAwMDM4MTIwMDAwMDA2ODFGODBGNkZBMzkKKzoxMDg0NTAwMDAwMDBGMzAzMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRUIKKzoxMDg0NjAwMDlGQTgwMUUwMTYyMDZFQkMwMDAwN0EwRjAwMDAwMDE0RTcKKzoxMDg0NzAwMDA4MDAwMEYyMDAwMDBBMEI4MDAwMDA4MDQyODEyRkI2NDUKKzoxMDg0ODAwMDAwMDBCNDBGMDAwMDAwODAwMjAwMDBGMDAwMDBENDBGRDQKKzoxMDg0OTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwN0YwODA0MDAwMDgwNUYKKzoxMDg0QTAwMDAyNDA4MUJDMDAwMDBFMEIxMjAxMDBFODAyQzAyMUIyQTQKKzoxMDg0QjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwRkQKKzoxMDg0QzAwMDAwMDAwMDc4MDlDNTg1MzAwMDAwMTYxMzAyMDEwMDgwMDUKKzoxMDg0RDAwMDgyQkE5N0JDMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDQkUKKzoxMDg0RTAwMDAwMDA3RjA4MTIwMTAwNjgwMkM1ODVCMDAwMDAxNjEzNjUKKzoxMDg0RjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0QwODgwMDAwMDgwRTUKKzoxMDg1MDAwMEYyQzE4NUI2MDAwMDE3MEIxQzQxMDI4MDA2QzA4NUIyN0YKKzoxMDg1MTAwMDAwMDAwMDAwMDAwMDAwNjgwMkM1ODUzMDAwMDAwMDAwNzcKKzoxMDg1MjAwMDAwMDAwMDcwMUYwMEY3M0EwMDAwN0QwODAwMDAwMEY4MEUKKzoxMDg1MzAwMDIyODEyRjk0MDAwMDdEMDg4MDAwMDA4MEYyQzE4NUI2NjIKKzoxMDg1NDAwMDAwMDBENzExMDAwMDAwMkMwOUMwODVEMjAwMDBGMzAzMDEKKzoxMDg1NTAwMEQyMDEwMDk0MUU0MEU5OUEwMDAwMTYxMzA0MjAwMDE4NkUKKzoxMDg1NjAwMDA4MDA2RUIyMDAwMDE2MTM4MDAwMDA4MEYyODEyRkI2NjIKKzoxMDg1NzAwMDAwMDA4QzEyMDAwMDAwODAwMjAwMDBGMDAwMDAxNjEzQzIKKzoxMDg1ODAwMDA0MDEwMDgwMDI4MDgwQkMwMDAwMTYxMzA0NTEwMTgwQTkKKzoxMDg1OTAwMDAyODA2RUJDMDAwMDE2MTMwNDIxMDE4MDAyMDA2RUJDMzQKKzoxMDg1QTAwMDAwMDAwMDAwMDAzQzAwRTgwNjQwODEzMjAwMDAyNTBCN0UKKzoxMDg1QjAwMDFGMDAwMDgwMDIwMDAwQjAwMDAwMjIwQjlFNDAwMjc4RTUKKzoxMDg1QzAwMDA5NDA2OEIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMEQKKzoxMDg1RDAwMDAwMDAyOTBCODAwMTAwODA4MjgxMkZCNjAwMDA3RjA4RjcKKzoxMDg1RTAwMDJBMzEwMUUwMDYwMDAwQjIxODAwMDAwMENBMDAwMEY4QkQKKzoxMDg1RjAwMDczMEEwMzM5N0YwODM2MDAwMDAwMDBDMDAyMDAzNjkyN0IKKzoxMDg2MDAwMDAwMDA3RjA4ODAwMTAwODBBMjgwMkZCNjE4MDAwMDAwQzMKKzoxMDg2MTAwMENBMDAwMEY4NzMwQTAzMzk3RjA4MzYwMDAwMDAwMEMwNjIKKzoxMDg2MjAwMDAyMDAzNjkyMEQwMDJGMEIwMDAwMDA1ODA4MDAzNjkyMTEKKzoxMDg2MzAwMDAwMDAyRjBCMDAwMDAwNTgwODAwMDA5MjFCMDAwMDAwRjMKKzoxMDg2NDAwMDAwMDAwMDU4MDgwMDM2MzIwMDAwMTYxMzA0MjAwMDE4RkQKKzoxMDg2NTAwMDA4MDA2RUIyMDAwMDE2MTM4MDAwMDA4MEYyODEyRkI2NzEKKzoxMDg2NjAwMDAwMDA4QzEyMDAwMDAwODAwMjAwMDBGMDAwMDAwMDAwRkEKKzoxMDg2NzAwMDAwMzAwMDI4MDgwMDZFMzIwMDAwMDAwMDU0NTQwMUZDNTUKKzoxMDg2ODAwMDAyQzA2RTMyMDAwMDk0MEIzODAwMDBBNDA4ODA4MkIyNTEKKzoxMDg2OTAwMDAwMDA5NDBCMDQyODAxMDQwODAwNkVCMjAwMDAxNjEzQjkKKzoxMDg2QTAwMDlGNTAwMTA0QTg1QjgwQkMwMDAwMDAwMDAwNTAwMUU4NUUKKzoxMDg2QjAwMDA2MDAwMDMyMDAwMDVFMEIwODAxMDA3ODE5QTA4MkJDQTEKKzoxMDg2QzAwMDAwMDAwMDAwMDAyODAxRTBBNjYwODAzQzAwMDAzQzBCOTgKKzoxMDg2RDAwMDJBMDEwMDE0MDgwMDAwQjIwMDAwMDAwMENBMDAwMDE0QzMKKzoxMDg2RTAwMDE4NDA4MTNBMDAwMEM3MEYwMEE4MDEyMEE5MjA2RUZBQTcKKzoxMDg2RjAwMDAwMDAxNjEzMDYwMTAyODA4MjFCOTJCQzAwMDAwMDAwREQKKzoxMDg3MDAwMDAwMjAwMUUwQTYyMDZFM0MwMDAwMDAwMDAwMzAwMEUwRTgKKzoxMDg3MTAwMDA2MDAwMDMyMDAwMDAwMDAwMEE4MDFFMDA2MDA5MjMyQ0UKKzoxMDg3MjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwQzA1MDBCQTEKKzoxMDg3MzAwMDE4MDEwMDBDQThDRDNFQjIwMDAwNDcwQjA0MDAwMDgwRDkKKzoxMDg3NDAwMDAyNDA4MUJDMDAwMDAwMDAwMDAwMDAxNDA4MDAwMDMyNUMKKzoxMDg3NTAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTQxMEIzNjAwQ0UKKzoxMDg3NjAwMDAwMDAwMEMwMDIwMDM2OTIyMDgwMDAwMDAwMDAwMDI4QjcKKzoxMDg3NzAwMDA5ODAzNjMyMDAwMDgxMTEwMDAwMDBEODAyMDAwMEQyQ0EKKzoxMDg3ODAwMDAwMDA0QjBCMDQwMDAwODAwMjgwOTJCQzE4MDAzNjAwRjEKKzoxMDg3OTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4OTAKKzoxMDg3QTAwMDAyODAwMTMyMDBDMDUwMEIxODAxMDAwQ0E4Q0QzRUIyNkYKKzoxMDg3QjAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOTRCMEIwMDAwMUEKKzoxMDg3QzAwMDAwMDAwMEMwMDIwMDM2MzIwMDAwMzYwMDAwMDAwMDgwQzkKKzoxMDg3RDAwMDAyMDAwMDkwMDAwMDAwMDBERTAwMDAwOEU4MDEwMDM0MDQKKzoxMDg3RTAwMDAwMDAwMDAwREYwMDAxMzgwOEMwNkUzMjAwMDAwMDAwMDkKKzoxMDg3RjAwMDAwMTAwMDAwMDcwMDAwMzIwMDAwMDAwMDAwMTgwMDAwMTgKKzoxMDg4MDAwMDA3ODA4MjMyMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyRDgKKzoxMDg4MTAwMDAwMjAwMDgwMDAzODAwMDAwNzAwMzczMjAwMDAwMDAwMTAKKzoxMDg4MjAwMENBM0QwMDBDMDc4MDgzMzIwMDAwMDAwMDAwMDAwMDE0RTUKKzoxMDg4MzAwMDE4NDA4MTNBMDAwMDVDMEIwNDAyMDFFQzE2QzA2RUJDQ0IKKzoxMDg4NDAwMDAwMDAwMDAwQzAwMTAwMTQxODQwODEzQTAwMDAwMDAwNDAKKzoxMDg4NTAwMDAwMDAwMEY4OTI4MDJGMzQwMEMwMTYxMzEyMDAwMDQwNzAKKzoxMDg4NjAwMEEyOEQzOUIyMDAwMEQ3MEIxMjAxMDA0ODAyQzA4MEIyQkQKKzoxMDg4NzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwQkQKKzoxMDg4ODAwMDAwMDAwMDI4MDg4MDk3MzIwMDAwMDAwMDAwMDAwMEE0Q0IKKzoxMDg4OTAwMDA4ODA4MjMyMDAwMDAwMDAwMDEwMDA2QzE4MjA2RTNBNDAKKzoxMDg4QTAwMDAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjAwMDBDNzBGRTYKKzoxMDg4QjAwMDAwQTgwMTIwMTkyMDZFRkEwMDAwMTYxMzA2MDEwMjgwOUMKKzoxMDg4QzAwMDgyMUI5MkJDMDAwMDAwMDAwMDIwMDFFMDE2MjA2RTNDREMKKzoxMDg4RDAwMDAwMDAwMDAwMDBBODAxRTAwNjAwOTIzMjAwMDA2OTBCRDEKKzoxMDg4RTAwMDAwMzgwMUUwMDY0MDgwOTIwMDAwMDAwMDAwNjAwMDZDNEIKKzoxMDg4RjAwMDE4MjA2RTNBMDAwMDAwMDAwMDY4MDA0QzA4MDA2RTMyM0MKKzoxMDg5MDAwMDAwMDA2QjBCOUYwMTAwMDQ2ODYwODBCQzAwMDA3NDBCQ0EKKzoxMDg5MTAwMDAwMDAwMDE4MTgyMDAwOUMwMDAwMTYxMzgwMDEwMDgwNDEKKzoxMDg5MjAwMEEyODAyRkI2MDAwMDZFMEIxMjAxMDBFODAyQzAyMUIyMzcKKzoxMDg5MzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNzgKKzoxMDg5NDAwMENBNzAwMDE4MDgwMDZFMzIwMDAwNjcwQjAyMDEwMDgwMzgKKzoxMDg5NTAwMDYyNjA4MEJDMDAwMDE2MTM5RjAwMDAxNDE4NDA4MUJDQTgKKzoxMDg5NjAwMDAwMDAwMDAwQ0EwMTAwRjgwMjgwMkYzNTAwQTA2OTBCNEEKKzoxMDg5NzAwMDEyMDEwMDQwQTI4RDM5QjIwMDAwMTYxMzAwMDAwMDgwRTEKKzoxMDg5ODAwMDAyMDAwMDkwMDAwMDc5MEI4MDAwMDA4MEEyODAyRkI2Q0EKKzoxMDg5OTAwMDAwMDA3QzBCMDQwMDAwODBBMkEwODFCQzAwMDAxNjEzMjQKKzoxMDg5QTAwMDlGMDAwMDE0MTg0MDgxQkMwMDAwMDAwMENBMDEwMEY4QkMKKzoxMDg5QjAwMDAyODAyRjM1MDBBMDE2MTMxMjAwMDA0MEEyOEQzOUIyOUMKKzoxMDg5QzAwMDAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNTAwMDA3QzBCQTIKKzoxMDg5RDAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4QzEKKzoxMDg5RTAwMDczMEEwM0Y5MDAwMDAwMDAwMDI4MDFFMDA2MDAwMDMyQ0QKKzoxMDg5RjAwMDAwMDAwMDAwMDAzQzAwRTgwNjQwODEzMjAwMDAwMDAwNUEKKzoxMDhBMDAwMDAwMzAwMEUwMDY4MDgyMzIwMDAwMDAwMDAwMjAwMEUwMUMKKzoxMDhBMTAwMDA2ODA4MTMyMDAwMDAwMDAwMDEwMDBFMDA2QzA4NjMyQUYKKzoxMDhBMjAwMDAwMDAwMDAwMDAxODAwRTAwNkMwODQzMjAwMDAxNjEzQTkKKzoxMDhBMzAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwODYwQjFGMDEwMDA4QUUKKzoxMDhBNDAwMDA5MDAwMEIyMDAwMDk3MEIwNDIwMDE4MDAyMDA2RUJDRjgKKzoxMDhBNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDEwMDAwMDAwQ0IKKzoxMDhBNjAwMDAwMDAwMDEwNzkwQjE2MzgwODAwMDAwMDAwMDAwMDBDMTAKKzoxMDhBNzAwMDc5MEIxNjM4MDAwMDAwMDAwMDAwMDAwNEE5MDAyRDM3MTMKKzoxMDhBODAwMDAwMDQwMTAwMDAwMDAwMDRDOTREOTAzQTAyMDAwMDAwRkIKKzoxMDhBOTAwMDAwMDAwMEE4ODIwRDkxMzcwMDAwMDAwMDAwMDAwMEE4MkYKKzoxMDhBQTAwMDEyQTQyQTNBMDAwMDhGMEI4MDQwMDI4MEUyMDE3Q0I2QkIKKzoxMDhBQjAwMDAwMDAxNjEzMDQ0MDAyNzhCOTNGN0NCMDAwMDAwMDAwQUIKKzoxMDhBQzAwMDAwMDAwMDA4RTlBNTkwM0EwMDAwOTEwQjlGMDEwMDEwRkEKKzoxMDhBRDAwMDE5MDA5MUJDOUYwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTAKKzoxMDhBRTAwMDAwMDA4QTBCMDQwMTAwODA0MkU0OTBCQzAwMDAxNjEzRDEKKzoxMDhBRjAwMDA0MjEwMTgwODI5QjkwQkMwMDAwOTcwQjAwMDAwMDgwNDUKKzoxMDhCMDAwMDAyMDAwMDkwMDAwMDAwMDAwMDEwMDA2QzA4MDA2RTMyQUYKKzoxMDhCMTAwMDAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjAwMDAxNjEzMjAKKzoxMDhCMjAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMzIxMDUxMDAwMEQ4MEIKKzoxMDhCMzAwMDAyMDAwMEYyMDAwMDlBMEIwMDUwMDEzQ0E4NUI4MDlDRjAKKzoxMDhCNDAwMDAwMDA3RjA4MDAzMDAxRTAwNjAwMDA5MjAwMDA5RjBCNEIKKzoxMDhCNTAwMDNFNTEwMTAwQTgxQjgwQkEwMDAwMDAwMERFMDAwMEY4QjIKKzoxMDhCNjAwMEYyODEyRjM0MDAwMDAwMDAwMDU4MDFFQzA2QzBFRTMyMDQKKzoxMDhCNzAwMDAwMDA5RjBCODAwMTAwODAzMjgwODdCNjAwMDAwMDAwNUIKKzoxMDhCODAwMDAwMDAwMEY4RTI4MDJGMzQwMDAwRTMxMDYwMzAwMUUwQzQKKzoxMDhCOTAwMDA2MDAwMEYyMDAwMEU5MEIwMDAwMDA4MDAyMDAwMDkwRDcKKzoxMDhCQTAwMDAwMDAwMDAwMDAwMDAwMTQwODAwMDAzMjAwMDBBOTBCQzMKKzoxMDhCQjAwMDA0MDIwMUVDMTZDMDZFQkMwMDAwMDAwMEM5MDEwMDE0RTQKKzoxMDhCQzAwMDE4NDA4MTNBMDAwMDAwMDBDMDAxMDEzODA4QzA2RTMyMzAKKzoxMDhCRDAwMDAwMDAwMDAwREYwMDAwQTRBODYwOEEzQzAwMDAxNjEzMUIKKzoxMDhCRTAwMDBGMDAwMDgwMDIwMDAwQjAwMEMwQUQwQjEyMDEwMDQwNzkKKzoxMDhCRjAwMEEyOEQzOUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMDhDMDAwMDAwMDAwMDAwMDAzMDAwRTAwNjAwMDAzMjAwMDAwMDAwMUMKKzoxMDhDMTAwMERGMDAwMEE0QTg2MDhBM0MwMDAwMTYxMzBGMDAwMDgwNEIKKzoxMDhDMjAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDEzODA4QzA2RTMyRjEKKzoxMDhDMzAwMDAwMDAwMDAwREVBODAxMjA5OTIyNkUzQTAwMDAxNjEzMDEKKzoxMDhDNDAwMDA2MDEwMjgwODIxQjkyQkMwMDAwMTYxMzlGMjAwMUUwRTcKKzoxMDhDNTAwMDk2MjI2RUJDMDAwMEIyMEI4MDAwMDA4MEYyODAyRkI2MUUKKzoxMDhDNjAwMDAwMDBDNzBGMDAwMDAwODAwMjAwMDBGMDAwMDBCOTBCRjgKKzoxMDhDNzAwMDFGNTAwMUU4MDYwMDAwQjIwMDAwQjUwQjA0MDAwMDgwQTAKKzoxMDhDODAwMDAyQzA4M0JDMDAwMEI5MEIwMDUwMDFFOEY2NjA4MDlDNzQKKzoxMDhDOTAwMDA4MDAwMDAwMDA0MDAyNzgzOTlBRkUzODAwMDAxNjEzRTAKKzoxMDhDQTAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwMDIKKzoxMDhDQjAwMDkyQkE5N0JDMDgwMDAwMDAwMDQwMDI2ODEyOUFGRTM4ODEKKzoxMDhDQzAwMDAwMDBCRTBCMkFBOTAxRTAwNjAwOTJCMjE4MDAzNjAwOEYKKzoxMDhDRDAwMENBMDAwMEY4NzMwQTAzRjkxRDAwQkUwQjA0MDAwMDgwRUYKKzoxMDhDRTAwMDAyQTQxN0I4MDAwMEJBMEIwNDAwMDAxNDE4NDA4MUJDOUQKKzoxMDhDRjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA2NDExQzQKKzoxMDhEMDAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwQzEwQjgwMDEwMDgwMzkKKzoxMDhEMTAwMDMyODAyRkI2M0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyRTgKKzoxMDhEMjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwQzBEMjBCMTkKKzoxMDhEMzAwMDE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMEMzMDAwMDI4MUUKKzoxMDhENDAwMDA5ODAzNjMyMDAwMDgxMTEwMDAwMDBEODAyMDAwMEQyRjQKKzoxMDhENTAwMDAwMDBDNzBCMDQwMDAwODAwMjgwOTJCQzAwMDAwMDAwRUQKKzoxMDhENjAwMDAwMDAwMDE0MTg0MDgxM0EwMDAwQ0MwQjA0MDAwMDgwODEKKzoxMDhENzAwMDAyNDA4MUJDMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5QjUKKzoxMDhEODAwMDAwMDBEMDBCMDQwMDAwMTQxODQwODFCQzAwMDBDODBCODgKKzoxMDhEOTAwMDEyMDAwMDAwMDlDMDIxQjIwMDAwQzkwQjAwMDAwMDgwRDEKKzoxMDhEQTAwMDAyMDAwMDkwMTgwMDM2MDAwMDAwMDBGODczOEEwM0Y5RjIKKzoxMDhEQjAwMDAwMDA2NDExMDAwMDAwMzAwMzAwMzhGMjAwMDBEMDBCMDYKKzoxMDhEQzAwMDgwMDEwMDgwMzI4MDJGQjYzRTAwMTYxMzEyMDAwMDJDNjYKKzoxMDhERDAwMDgyQ0QyRUIyMDAwMDAwMDBDMzAwMDBEODAyODAwMTMyMTQKKzoxMDhERTAwMDAwQzBDQzBCMTgwMDAwMENBOENEM0VCMjAwMDAxNjEzM0EKKzoxMDhERjAwMDgwMDAwMDgwNzI4MDJGQjYwMDIwMDA4MDAwMDAwMDI4RDQKKzoxMDhFMDAwMDA5MDAzNzMyMDAwMDY2MTIwMDAwMDAwOEU4MDEwMEY0OTMKKzoxMDhFMTAwMDAwMDAxNjEzMTIwMDAwNDgwMkMwODBCMjAwMDAwMDAwREIKKzoxMDhFMjAwMDAwMDAwMDE0MTg0MDgxM0EwMDAwMTYxMzgwMDEwMDgwRjEKKzoxMDhFMzAwMEEyODAyRkI2MTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5QTIKKzoxMDhFNDAwMDFEMDAxNjEzMDQwMDAwODAwMkE0MTdCODAwMDAxNjEzQkEKKzoxMDhFNTAwMDlGMDAwMDE0MTg0MDgxQkMwMDAwRDgwQjBCMDEwMDgwNUIKKzoxMDhFNjAwMDAyMDAwMEIwMDAwMDRCMTIwMDAwMDA4MDAyMDAwMEYwODEKKzoxMDhFNzAwMDAwMDBFMDBCODAwMTAwODA5MjgwMkZCNjJCMDBFNjBCRjMKKzoxMDhFODAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwQ0IKKzoxMDhFOTAwMDAyMDAwMDkwMDAwMEUzMEIxRDAxMDA4MDAyMDAwMEIwMDIKKzoxMDhFQTAwMDAwMDBFNjBCODAwMTAwODA2MjgxMkZCNjAwMDAxNjEzREYKKzoxMDhFQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTYwQjgwMDAwMDgwQUYKKzoxMDhFQzAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyN0EKKzoxMDhFRDAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDA3RDA4MkYKKzoxMDhFRTAwMDA0MDAwMDgwMDI4MDg1QkMwMDAwNUQxMjAwMDAwMDgwNEMKKzoxMDhFRjAwMDAyMDAwMEYwMDAwMDY5MDYwMDAwMDAxQzA4ODA4NTkyNTYKKzoxMDhGMDAwMDAwMDA3RjA4ODAwMTAwODBBMjgwMkZCNjAwMDAxNjEzQTkKKzoxMDhGMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzgwMDAwMDgwMTYKKzoxMDhGMjAwMEUyODAyRkI2MDAwMEVFMEI4MDAxMDA4MDgyODEyRkI2MTgKKzoxMDhGMzAwMDAwMDAxNjEzMDQzMTAxODAwMjAwNkVCQzAwMDAxNjEzRkQKKzoxMDhGNDAwMDA0MzEwMDgwODI5QjgyQkMwMDAwMTYxMzAyMDEwMDgwNjUKKzoxMDhGNTAwMDEyQTA4MkJDMDAwMDAwMDBDRTAxMDBEODAyODAwMTMyQzUKKzoxMDhGNjAwMDAwQzBGNTBCMTgwMTAwMENBOENEM0VCMjIwODAwMDAwMTcKKzoxMDhGNzAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwMzgxMjAwMDAwMDVDNTMKKzoxMDhGODAwMDFGQzBGNUZBMDAwMEYzMDMwMDAwMDA4MDAyMDAwMDkwMEIKKzoxMDhGOTAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDAxNjEzNzgKKzoxMDhGQTAwMDgwMDAwMDgwODI4MDJGQjYwMDAwMTYxMzA0MDAwMDgwMkQKKzoxMDhGQjAwMDAyODA4MkJDMDAwMDAwMDA2MDAwMDBEODAyMDAwMDMyODUKKzoxMDhGQzAwMDAwMDBGRDBCM0YwMDAwM0MwODQwODBCMjAwMDBGRDBCOUMKKzoxMDhGRDAwMDgwMDEwMDgwRTI4MTJGQjYwMDAwMDAwMERFMDAwMEY4NzIKKzoxMDhGRTAwMEYyODEyRjM0MDAwMDAwMDAwMDU4MDFFQzA2QzBFRTMyODAKKzoxMDhGRjAwMDAwMDAwMDAwNEQwMDAwMDA2N0UwODMzRTAwMDAwMDAwMUMKKzoxMDkwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwOEYKKzoxMDkwMTAwMDA3QzA4NjMyMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyM0MKKzoxMDkwMjAwMDAwMDA0OTBDMDQwMDAwMjhEOEEwODJCQzAwMDAxNjEzRTAKKzoxMDkwMzAwMDA5MDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMDE4REMKKzoxMDkwNDAwMEQ4QTA4MTNDMDAwMDFGMEMwNDAwMDAzQ0Q4RTA4M0JDODkKKzoxMDkwNTAwMDAwMDAxNjEzMDQwMTAwODAwMjgwODFCQzAwMDAwOTBDOEUKKzoxMDkwNjAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwMTYxMzEyMDAwMDUwMTYKKzoxMDkwNzAwMDAyQzAzOEIyMDAwMDFEMEM1MTAwMDBEODEyODAyRDlBOTkKKzoxMDkwODAwMDAwMDAxNjEzMTIwMDAwNTBGMkMxMzhCNDAwMDAxNjBDOTQKKzoxMDkwOTAwMDI4MDAwMEQ4MDIwMDAwQjIwMDAwMTMwQzgwMDEwMDgwRkMKKzoxMDkwQTAwMEYyQzE4NUI2MDAwMDBGMEMxRjQwMDI4NEU2MDEwMEI0MzcKKzoxMDkwQjAwMDAwMDAxMzBDMUQwMTAwRjgyMjgxMkZCNDAwMDAxMzBDRDYKKzoxMDkwQzAwMDAwMDAwMEY4NjI4MTJGOTUwMDAwMTEwQzFEMDEwMDgwNDYKKzoxMDkwRDAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODYyODEyRjM1OUYKKzoxMDkwRTAwMDAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMjAwMDAxNjEzQjkKKzoxMDkwRjAwMDFGMDEwMDgwMDIwMDAwQjAwMDAwMTUwQzM0MzAwMEUwQjkKKzoxMDkxMDAwMDE2MjA2RUJDMDAwMEI0MEYwMDAwMDA4MDAyMDAwMEYwQ0EKKzoxMDkxMTAwMDAwMDBENTBGREE1QjAxRUMwNjQwRURGMjE4MDAzNjAwRDYKKzoxMDkxMjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMUIwQzA0MDAwMDgwMjMKKzoxMDkxMzAwMDcyODAyREJDMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2MjMKKzoxMDkxNDAwMDAwMDAxNjBDNjcwMDAwRjhBMjgwMkZCNTAwMDAxNjEzNkYKKzoxMDkxNTAwMDEyMDAwMEU4MDJDMDIxQjIwMDAwMTYxMzA0MDEwMDgwRDIKKzoxMDkxNjAwMDcyODAyREJDMDAwMDAwMDA1MTAwMDBEODAyMDAwMDMyQzcKKzoxMDkxNzAwMDAwMDAzRTEwMDAwMDAwMDBEODIwODBGQTAwMDBGRTBCMjYKKzoxMDkxODAwMDREMDAwMDAwNjdFMDgzOUUwMDAwMTYxMzEyMDAwMDUwOUYKKzoxMDkxOTAwMEYyQzEzOEI0MDAwMDJDMEMyODAwMDA4MDA4NDAwMEIyNTYKKzoxMDkxQTAwMDAwMDAyOTBDODAwMTAwODBGMkMxODVCNjAwMDAyNTBDNkEKKzoxMDkxQjAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwMjkwQzFEMDEwMEY4RTQKKzoxMDkxQzAwMDIyODEyRkI0MDAwMDI5MEMwMDAwMDBGODYyODEyRjk1NDUKKzoxMDkxRDAwMDAwMDAyNzBDMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwMEMKKzoxMDkxRTAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwN0UKKzoxMDkxRjAwMDAyNDA2ODMyMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwMTgKKzoxMDkyMDAwMDAwMDAyQjBDMzQzMDAwRTAxNjIwNkVCQzAwMDBCNDBGQzAKKzoxMDkyMTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwRDUwRkRBNUIwMUVDRDYKKzoxMDkyMjAwMDA2NDBFREYyMDAwMDRGMEM4MDAwMDA4MEUyODAyRkI2NzcKKzoxMDkyMzAwMDAwMDAzMDBDMDQyMTAwRTAwNjgwODFCMjAwMDAzRTEwRTYKKzoxMDkyNDAwMDAwMDAwMDM0MDgwMDAwRjIwMDAwMDAwMDAwMjAwMEUwRjAKKzoxMDkyNTAwMDA2ODA4MTMyMDAwMDAwMDAwMDNDMDBFODA2NDA4MTMyQjgKKzoxMDkyNjAwMDAwMDAzNjBDMkExMTAwRTBENkUwODZCQTE4MDAzNjAwNUQKKzoxMDkyNzAwMENBMDAwMEY4NzMwQTAzRjkxRDAwMzYwQzA0MDEwMDgwQ0YKKzoxMDkyODAwMDAyQTQxN0I4MDAwMDMyMEM5RjAxMDA4MDE4MDA4OEJDQUYKKzoxMDkyOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA0QjEyMzYKKzoxMDkyQTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwNjQxMTAwMDAwMDMwQTcKKzoxMDkyQjAwMDAzMDAzOEYyMDgwMDNBMEMyMzE5MDFFODc2MjA4MUI5M0UKKzoxMDkyQzAwMDNFMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDAzRTBDODAKKzoxMDkyRDAwMDFEMTgwMEUwMDZDMDg0QjIwMDAwM0UwQzgwMDAwMDgwMzMKKzoxMDkyRTAwMDAyODEyRkI2MkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyNTYKKzoxMDkyRjAwMDAwMDAwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDA1NDEwMkMKKzoxMDkzMDAwMDAwMDAwMDJDRjkwMTAwRjQwMDAwNDMwQzA0MDAwMDgwNzAKKzoxMDkzMTAwMDAyMDA4OEJDMDAwMDQyMEMxMjAxMDAwMDA5QzAyMUIyMEEKKzoxMDkzMjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAxNjEzMzgKKzoxMDkzMzAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwMTYxMzA0MDEwMDgwODUKKzoxMDkzNDAwMDAyODA4MEJDMDAwMDAwMDAwMDAwMDA3ODA5QzU4NTMwNjQKKzoxMDkzNTAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzQTkKKzoxMDkzNjAwMDA2MDEwMDgwOTJCQTk3QkMwMDAwRjYwMzEyMDEwMDY4NjMKKzoxMDkzNzAwMDAyQzU4NUIwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQjYKKzoxMDkzODAwMDAwMDAwMDAwMDAzMDAwNzgxOTIwNkUzQzAwMDAxNjEzMjkKKzoxMDkzOTAwMDA0MDEwMDgwRTJBNTgyQkMwMDAwMTYxMzgwMDAwMDgwNUEKKzoxMDkzQTAwMEEyODAyRkI2MDAwMDE2MTMwNDAxMDA4MDAyMDA4OEJDQzIKKzoxMDkzQjAwMDAwMDAxNjEzMDQwMTAwODAwMjgwODBCQzAwMDAxNjEzMTgKKzoxMDkzQzAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwMDAwMEMwMDEwMTM4QTIKKzoxMDkzRDAwMDA4QzA2RTMyMDAwMDUzMEMwNDAyMDFFQzE2QzA2RUJDRDMKKzoxMDkzRTAwMDAwQzAxNjEzMTIwMDAwNDBBMjhEMzlCMjAwMDA1NDBDQzgKKzoxMDkzRjAwMEM5MDEwMDE0MDgwMDAwOTIwMDAwMDAwMDQ1MzAwMEUwQTAKKzoxMDk0MDAwMDA2MDAwMDMyMDAwMDYwMEMyODAwMDAwOEU4MDEwMEI0RUIKKzoxMDk0MTAwMDAwMDA1RDBDODAwMTAwODBGMkMxODVCNjAwMDA1OTBDOEYKKzoxMDk0MjAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwNUQwQzFEMDEwMEY4M0QKKzoxMDk0MzAwMDIyODEyRkI0MDAwMDVEMEMwMDAwMDBGODYyODEyRjk1OUUKKzoxMDk0NDAwMDAwMDA1QjBDMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwNjUKKzoxMDk0NTAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwMEIKKzoxMDk0NjAwMDAyNDA2ODMyMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwQTUKKzoxMDk0NzAwMDAwMDA1RjBDODAwMDAwODA0MjgxMkZCNjAwMDBCNDBGMTYKKzoxMDk0ODAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwRDUwRkRBNUIwMUVDNjQKKzoxMDk0OTAwMDA2NDBFREYyMDAyMDAwODBERjAwMDAyODA5MDAzNzMyOEUKKzoxMDk0QTAwMDAwMDA2NjEyREUwMDAwRDgwMjgwMDFGMjA4MDA0QjEyQjQKKzoxMDk0QjAwMDAwMTgwMUU4NzYyMDgxRjkwMDAwNjQxMTAwMDAwMDMwRjYKKzoxMDk0QzAwMDAzMDAzOEYyMDAwMDY2MEM4MDAxMDA4MDMyODAyRkI2NjUKKzoxMDk0RDAwMDNFMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDA2QjBDNDEKKzoxMDk0RTAwMDI5MDgwMUU0MDZDMDJEQjIwMDAwNzAwQzFEMDAwMDgwQTgKKzoxMDk0RjAwMDAyMDAwMEIwMDAwMDcwMEM4MDAwMDA4MDAyODEyRkI2RDYKKzoxMDk1MDAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDA3MDBDMUYKKzoxMDk1MTAwMDAwMDAwMEY4MDI4MTJGOTQwMDAwNkQwQzEyMDEwMDAwODEKKzoxMDk1MjAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5RTAKKzoxMDk1MzAwMDFEMDA2RjBDMDQwMTAwODAwMkE0MTdCODAwMDA2QzBDMjEKKzoxMDk1NDAwMDAwMDAwMDE0MTg0MDgxOUMyQjAwMTYxMzEyMDAwMDJDMDAKKzoxMDk1NTAwMDgyQ0QyRUIyMDAwMDU1MTAwMDAwMDAyQ0Y5MDEwMEY0NUQKKzoxMDk1NjAwMDAwMDA3MzBDMDQwMTAwODAwMjQwODFCQzE4MDAzNjAwMkEKKzoxMDk1NzAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMTYxMzEyMDAwMDQ4RjcKKzoxMDk1ODAwMDAyQzA4MEIyMDAwMDAwMDAwMDAwMDA3ODA5QzU4NTMwRUMKKzoxMDk1OTAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzNjcKKzoxMDk1QTAwMDA2MDEwMDgwOTJCQTk3QkMwMDAwRjYwMzEyMDEwMDY4MjEKKzoxMDk1QjAwMDAyQzU4NUIwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNzQKKzoxMDk1QzAwMDAwMDAxNjEzODAwMDAwODA4MjgwMkZCNjAwMDAxNjEzNjIKKzoxMDk1RDAwMDA0MzEwMDgwODI5QjgyQkMwMDAwMTYxMzAyMDAwMDgwRDAKKzoxMDk1RTAwMDEyQTA4MkJDMDAwMDE2MTMwNDAwMDA4MDAyODA4MkJDMUUKKzoxMDk1RjAwMDI1MDAwMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDA4MDEyMjMKKzoxMDk2MDAwMDAwMDAwMDE0QTk2MDgwRDkwMDAwMDAwMDAwMDAwMEQ4MEMKKzoxMDk2MTAwMDAyODAwMTMyMDBDMDg0MEMxODAxMDAwQ0E4Q0QzRUIyQkIKKzoxMDk2MjAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDAzODEyNTgKKzoxMDk2MzAwMDAwMDAwMDVDMUZDMEY1RkEwMDAwRjMwMzAwMDAwMDgwOEEKKzoxMDk2NDAwMDAyMDAwMDkwMDBDMDAwMDAwMDAwMDBGOEEyOEQyRjMxNDEKKzoxMDk2NTAwMDAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwRkUKKzoxMDk2NjAwMDAwMDAwMDAwMDc4MDgxMzIwMDAwMDAwMDAwMDgwMDAwQjgKKzoxMDk2NzAwMDA3MDA4MDMyMDAwMDAwMDAwMDEwMDAwMDA3QzA4NjMyQTIKKzoxMDk2ODAwMDAwMDAwMDAwMDAxODAwMDAwN0MwODQzMjAwMDAxNjEzMUMKKzoxMDk2OTAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwOTAwQzgwMDAwMDgwMkQKKzoxMDk2QTAwMDgyODAyRkI2MDAwMDAwMDAwMDAwMDA2OEE4NjA4MDNDQTcKKzoxMDk2QjAwMDAwMDAwMDAwMDAwMDAwM0MwODQwODAzMjAwMDBENDBGOTEKKzoxMDk2QzAwMDAwMDAwMDA0MDg4MDgyRjIwMDAwOTEwQzEyMDEwMDAwRUEKKzoxMDk2RDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MkYKKzoxMDk2RTAwMDFEMDA5NDBDMDQwMDAwODAwMkE0MTdCODAwMDAxNjEzOUIKKzoxMDk2RjAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwOTAwQzAwMDAwMEY4Q0UKKzoxMDk3MDAwMEEyODAyRjk1MDAwMDAwMDAwMDAwMDAwMDY4MjA4MDNBMzEKKzoxMDk3MTAwMDAwMDA5QTBDMDQwMDAwMjg2OEEwODJCQzAwMDAxNjEzMDgKKzoxMDk3MjAwMDBDMDAwMDgwMDIwMDAwQjAwMDAwMTYxMzgwMDAwMDgwRDIKKzoxMDk3MzAwMEUyODAyRkI2MDAwMDNFMTAwMDAwMDA4MDAyMDAwMEYwMjIKKzoxMDk3NDAwMDAwMDA4NjBDMDAwMDAwRDgwMjAwMDA5MjAwMDAxNjEzRjIKKzoxMDk3NTAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwMDAwMDAwMDAwMEQ4MkEKKzoxMDk3NjAwMDAyODAwMTMyMDAyMDAwODAwMDAwMDAyODA5MDAzNzMyMEEKKzoxMDk3NzAwMDAwMDA2MjEyMDAwMDAwMDhFODAxMDBGNDE4MDAzNjAwNDIKKzoxMDk3ODAwMENBMDAwMEY4NzMwQTAzRjkwMDAwQTUwQzA0MDIwMUVDRkEKKzoxMDk3OTAwMDE2QzA2RUJDMDAwMDAwMDBDMDAxMDBGODkyODAyRjM0OUIKKzoxMDk3QTAwMDAwQzBBMzBDMTIwMTAwNDBBMjhEMzlCMjAwMDAxNjEzQjQKKzoxMDk3QjAwMDAwMDAwMDgwMDIwMDAwOTAyQjAwQTUwQzEyMDEwMDJDN0MKKzoxMDk3QzAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMkYKKzoxMDk3RDAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDBBODBDNUEKKzoxMDk3RTAwMDgwMDEwMDgwODI4MTJGQjYwMDAwMTYxMzA0MzEwMTgwQjEKKzoxMDk3RjAwMDAyMDA2RUJDMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyQjAKKzoxMDk4MDAwMDAwMDBBQjBDMTIwMTAwNjAwODQwMjNCMjAwODJCNDBDQ0YKKzoxMDk4MTAwMDAwMDAwMDA4QTg4RDgwOTIwMDAwMTYxMzEyMDAwMDI0OUEKKzoxMDk4MjAwMDA4MDAyM0IyMDAwMDE2MTMxMjAwMDAyMDA4QzAyM0IyNjMKKzoxMDk4MzAwMDAwMDAxNjEzMTIwMDAwMTgwODgwMjNCMjAwQzBDOTBDRTMKKzoxMDk4NDAwMDE4MDEwMDBDQThDRDNFQjIwMDAwQUUwQzEyMDAwMDM4OEEKKzoxMDk4NTAwMDAyODA4MUIyMDAwMDE2MTMxMjAwMDAzQzAyMDA4MkIyQTYKKzoxMDk4NjAwMDAwMDAxNjEzMTIwMDAwMzAwMjQwODJCMjAwMDAxNjEzRUUKKzoxMDk4NzAwMDEyMDAwMDM0MDIwMDg2QjIyMDgwMDAwMDAwMDAwMDA4QzAKKzoxMDk4ODAwMEE4OEQ4MDMyMDAwMEJDMEM4MDAxMDA4MEYyQzE4NUI2M0EKKzoxMDk4OTAwMDAwMDBCODBDMUY0MDAyODRFNjAxMDBCNDAwMDBCQzBDQkMKKzoxMDk4QTAwMDFEMDEwMEY4MjI4MTJGQjQwMDAwQkMwQzAwMDAwMEY4NUMKKzoxMDk4QjAwMDYyODEyRjk1MDAwMEJBMEMxRDAxMDA4MDAyMDAwMEIwRUIKKzoxMDk4QzAwMDAwMDAwMDAwMDAwMDAwRjg2MjgxMkYzNTAwMDAwMDAwNTkKKzoxMDk4RDAwMDAwNDAwMjgwMDI0MDY4MzIwMDAwMTYxMzFGMDEwMDgwMjEKKzoxMDk4RTAwMDAyMDAwMEIwMzIwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTMKKzoxMDk4RjAwMDAwMDA4MDEyMDAwMDAwMTQwOTAwODBEMjAwMDAxNjEzM0UKKzoxMDk5MDAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwMDAwMDAwMDAwMDc4NjkKKzoxMDk5MTAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDODkKKzoxMDk5MjAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDBDNDBDMTgKKzoxMDk5MzAwMDM0MDAwMDVDMUZDMEY1QkEwMDAwQjQwRjAwMDAwMDgwQzYKKzoxMDk5NDAwMDAyMDAwMEYwMDAwMEM2MEM4MDAwMDA4MDkyODAyRkI2NUMKKzoxMDk5NTAwMDAwMDA3RjA4MDAzMDAwRTAwNjAwMDA5MjAwMDA3RjA4NTEKKzoxMDk5NjAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMDAwMDAwMDAwMEY4NTcKKzoxMDk5NzAwMDczMEEwMzM5N0YwODM2MDAwMDAwMDBDMDAyMDAzNjkyRTcKKzoxMDk5ODAwMDAwMDAwMDAwNDUwMDAwRDgwMjQwMDAzMjAwMDAwMDAwNDYKKzoxMDk5OTAwMDQxMDAwMDAwMDc4MDg2MzIwMDAwMDAwMDAwMDgwMDAwM0YKKzoxMDk5QTAwMDA3MDA4MDMyMDAwMDAwMDAwMDEwMDAwMDA3NDA4MjMyRjMKKzoxMDk5QjAwMDAwMDAwMDAwMDAxODAwMDAwNzAwODYzMjAwMDAxNjEzQTcKKzoxMDk5QzAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwMDAwMDAwMDAwMDc4MUUKKzoxMDk5RDAwMDM4ODA4NzM1MDAwMDE2MTM4MDAwMDA4MDcyODA4N0I2QkIKKzoxMDk5RTAwMDAwMDAwMDAwMDBBMDAxRTAxNjIwNkUzQTAwMDAwMDAwMTgKKzoxMDk5RjAwMDAwMDAwMDc4MDlDNTg1MzAwMDAwMDAwMDAwQTgwMUUwRTMKKzoxMDlBMDAwMDE2MjA2RTNDMDgwMDAwMDBEMjAxMDA3OEU5RTU4MzM5OTkKKzoxMDlBMTAwMDE4MDAxNjEzMUY0MTAyODRFNkExOTdCOTAwMDBEOTBDNjMKKzoxMDlBMjAwMDM2NTEwMUU4MTZFMDgzQkMwMDAwRDkwQzFEMDEwMDgwMEUKKzoxMDlBMzAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODYyODEyRjM1MzUKKzoxMDlBNDAwMDAwMDAxNjEzOUYyMDAxRTAwNjQwODBCMjAwMDBEQzBDRUQKKzoxMDlBNTAwMDgwMDEwMDgwODI4MTJGQjYwMDAwMDAwMDAwMzAwMUUwMEMKKzoxMDlBNjAwMDA2NDA4MDMyMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyNzEKKzoxMDlBNzAwMDAwMDBERjBDMzQxODAwMDAwNzgwODFCMjAwMDBCNDBGMzIKKzoxMDlBODAwMDAwMDAwMDgwMDIwMDAwRjAxMDAwNEIxMjAwMzAwMDAwQzcKKzoxMDlBOTAwMDE3RTAyQ0Y5MDAxMDAwODAwMDM4MDAwMDA3MDAzNzMyNzIKKzoxMDlBQTAwMDAwMDA2NDExMDAwMDAwMzAwMzAwMzhGMjAwMDBFNDBDRjQKKzoxMDlBQjAwMDgwMDEwMDgwMzI4MDJGQjYzRTAwMTYxMzEyMDAwMDJDNjkKKzoxMDlBQzAwMDgyQ0QyRUIyMDAwMEU5MEMyOTIxMDAwMDA3MDA4MkIyRUQKKzoxMDlBRDAwMDAwMDBFNzBDMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwOTYKKzoxMDlBRTAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwRUYwQzA0MDEwMDgwNjgKKzoxMDlBRjAwMDAyQTQxN0I4MDAwMEU1MEMwMDAwMDAxNDA4MDAwMDkyNTIKKzoxMDlCMDAwMDAwMDBFQzBDMUQzMTAwRTAwNjAwMDBCMjAwMDBFRjBDN0MKKzoxMDlCMTAwMDgwMDEwMDgwNjI4MTJGQjYwMDAwMTYxMzAwMDAwMDgwRDMKKzoxMDlCMjAwMDAyMDAwMDkwMDAwMEVGMEM4MDAwMDA4MDAyODEyRkI2NDAKKzoxMDlCMzAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDAwMDAwNjUKKzoxMDlCNDAwMDAwMDAwMEY4MDI4MTJGMzQwMDAwNUQxMjAwMDAwMDJDOUMKKzoxMDlCNTAwMEY5MDEwMEY0MDAwMDU0MTAwMDAwMDBGOEEyODAyRkY0NzYKKzoxMDlCNjAwMDAwMDBGNDBDMDQwMDAwODAwMjQwODFCQzAwMDBGNDBDRjIKKzoxMDlCNzAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4MEYKKzoxMDlCODAwMDczMEEwM0Y5MDAwMEY2MDMxMjAxMDA0ODAyQzA4MEIyMTQKKzoxMDlCOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBGRTBDODAKKzoxMDlCQTAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwRkEwQzFGNDAwMjg0REIKKzoxMDlCQjAwMEU2MDEwMEI0MDAwMEZFMEMxRDAxMDBGODIyODEyRkI0NjQKKzoxMDlCQzAwMDAwMDBGRTBDMDAwMDAwRjg2MjgxMkY5NTAwMDBGQzBDRTQKKzoxMDlCRDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4M0QKKzoxMDlCRTAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyOTAKKzoxMDlCRjAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDAwMDBEREQKKzoxMDlDMDAwMDA0MDAwMDgwMDI0MDg2QkMwMDAwQUIxMjAwOTAwMTA4RjYKKzoxMDlDMTAwMDA5MDA2RUYyMDAwMERGMTIwMDAwMDA4MDAyMDAwMEYwNzgKKzoxMDlDMjAwMDAwMDAwNzBEMzMwMTAwRDgwMjgwMDFCMjAwMDAwNzBEQ0IKKzoxMDlDMzAwMDgwMDEwMDgwQjIwMTcyQjYwMDAwMDcwRDlGRjAwMTgwMjQKKzoxMDlDNDAwMDgyREI4N0JDMDAwMDA3MEQ5RkY4MDE4MDIyMjE2RUJDREIKKzoxMDlDNTAwMDAwMDAwMDAwMDBFODAxRTAwNjAwRUUzMjAwMDAwMDAwMTUKKzoxMDlDNjAwMDAwRjAwMUUwMDZDMDg3MzIwODAwMDAwMDAwMTgwMUU4OUIKKzoxMDlDNzAwMDc2MjA4MTM5MDAwMDBEMEQ4MDAxMDA4MEQyODAyRkI2NDIKKzoxMDlDODAwMDAwMDAwRDBEMDRCMDAwODAwMjAwNkVCQzAwMDAwMDAwNUEKKzoxMDlDOTAwMENEMDAwMEY4NzI4MTJGMzQzRDAwMEQwRDEyMDEwMDJDMTMKKzoxMDlDQTAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNEEKKzoxMDlDQjAwMDAwMDAxQzBEMjcwOTAxRTQwNkMwMkRCMjAwQzAxNDBERTAKKzoxMDlDQzAwMDE4MDEwMDBDQThDRDNFQjIwMDAwMDAwMDAwMDAwMDc4OTIKKzoxMDlDRDAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDQzYKKzoxMDlDRTAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDAxNjEzRkMKKzoxMDlDRjAwMDEyMDAwMDY4MDJDNTg1QjAyMDgwN0YwODAwMDAwMDA4QkYKKzoxMDlEMDAwMDA4ODAzNjkyMkMwMDAwMDAwMDAwMDAxMDA5MDAzNjMyNTYKKzoxMDlEMTAwMDAwMDA4MDEyMDA5ODAxMTQwOTAwNkVEMjAwMDAwMDAwQkIKKzoxMDlEMjAwMDAwNDAwMUUwMDY0MDg4MzIwMDAwMDAwMEQ1MDgwMDAwMzUKKzoxMDlEMzAwMDA3NDA4ODMyMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyQ0QKKzoxMDlENDAwMDAwNDAwMDgwQ0EzOTAwMDAwNzAwMzczMjAwMDAxNjEzQjcKKzoxMDlENTAwMDEyMDAwMDQ4MDJDMDgwQjIwMDYwMDAwMDAwMDAwMDA4NEQKKzoxMDlENjAwMDA4ODAzNjMyMDAwMDIwMEQxRDAwMDA4MDAyMDAwMEIwODcKKzoxMDlENzAwMDAwMDAyMDBEODAwMDAwODAwMjgxMkZCNjJBMDAxNjEzRkIKKzoxMDlEODAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4NkUKKzoxMDlEOTAwMDAyODEyRjM0MDAwMDU1MTAwMDAwMDAyQ0Y5MDEwMEY0NUUKKzoxMDlEQTAwMDAwMDAwMDAwMDAwMDAwNzgwOUM1ODUzMDAwMDAxNjEzOEYKKzoxMDlEQjAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwRTEKKzoxMDlEQzAwMDkyQkE5N0JDMDAwMEY2MDMxMjAxMDA2ODAyQzU4NUIwODQKKzoxMDlERDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNDgKKzoxMDlERTAwMDU0NTQwMUZDMDJDMDZFMzIwMDAwMDAwMDAwMDAwMEQ4OTQKKzoxMDlERjAwMDAyODAwMTMyMDBDMDJDMEQxODAxMDAwQ0E4Q0QzRUIyMkIKKzoxMDlFMDAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDBGMzAzQzQKKzoxMDlFMTAwMDEyMDEwMDJDNzJFMDJFQjIwMDAwMTYxMzAwMDAwMDgwMjgKKzoxMDlFMjAwMDAyMDAwMDkwMDAwMDE2MTM4MDAxMDA4MDgyODEyRkI2OEUKKzoxMDlFMzAwMDAwMDA4QzEyMDAyMDAwMTgwODAwNkVGMjAwMDAxNjEzQkIKKzoxMDlFNDAwMDFGMzAwMDI4MDgwMDZFQjIwMDAwMDAwMDAwMDAwMEE0Q0YKKzoxMDlFNTAwMDA4ODA4MjMyMDAwMDAwMDAwMDEwMDA2QzA4MDA2RTMyQTIKKzoxMDlFNjAwMDAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjAwMDAxNjEzQkQKKzoxMDlFNzAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMzIxMDAwMDAwMDgwNTEKKzoxMDlFODAwMDAyMDAwMEYwMDAwMDM2MEQwMDUwMDEzQ0E4NUI4MDlDRjEKKzoxMDlFOTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwODcKKzoxMDlFQTAwMDAwNTAwMTAwQTgxQjgwM0EwMDAwMDAwMDAwMDAwMDgwNjQKKzoxMDlFQjAwMDA4MDAwMDMyMDAwMDAwMDA1MTAwMDBEODAyMDAwMDMyMEIKKzoxMDlFQzAwMDAwMDAwMDAwNEQwMDAwMDA2N0UwODMzRTAwMDAwMDAwM0QKKzoxMDlFRDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwQjEKKzoxMDlFRTAwMDA3QzA4NjMyMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyNUUKKzoxMDlFRjAwMDAwMDA2RDBEMDQwMDAwMjhEOEEwODJCQzAwMDAxNjEzREQKKzoxMDlGMDAwMDA5MDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMDE4RkQKKzoxMDlGMTAwMEQ4QTA4MTNDMDAwMDU0MEQwNDAwMDAzQ0Q4RTA4M0JDNzQKKzoxMDlGMjAwMDAwMDAxNjEzMDQwMTAwODAwMjgwODFCQzAwMDA0NTBENzIKKzoxMDlGMzAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwMTYxMzEyMDAwMDUwMzcKKzoxMDlGNDAwMDAyQzAzOEIyMDAwMDREMEQ1MTAwMDBEODEyODAyRDlBODkKKzoxMDlGNTAwMDAwMDAxNjEzMTIwMDAwNTBGMkMxMzhCNDE4MDAzNjAwODkKKzoxMDlGNjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwNEIwRDA0MDAwMDgwQTQKKzoxMDlGNzAwMDcyODAyREJDMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2RDUKKzoxMDlGODAwMDAwMDA0NjBENjcwMDAwRjhBMjgwMkZCNTAwMDAxNjEzRjAKKzoxMDlGOTAwMDEyMDAwMEU4MDJDMDIxQjIwMDAwMTYxMzA0MDEwMDgwODQKKzoxMDlGQTAwMDcyODAyREJDMDAwMDAwMDA1MTAwMDBEODAyMDAwMDMyNzkKKzoxMDlGQjAwMDAwMDA1MjBEMkEwMTAwMDBEODIwODBCQTAwMDA1MTBEODcKKzoxMDlGQzAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4OUMKKzoxMDlGRDAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEODAyNDA4NDMyMzgKKzoxMDlGRTAwMDFEMDAxNjEzMDQwMDAwODAwMkE0MTdCODAwMDA0NjEwREMKKzoxMDlGRjAwMDAwNjAwMDZDMDgwMDZFRjIwMDAwM0EwRDREMDAwMDAwOTkKKzoxMEEwMDAwMDY3RTA4MzlFMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0QkUKKzoxMEEwMTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDA1QjBERkMKKzoxMEEwMjAwMDA0MDAwMDgwMDJBNDE3QjgwMDAwMTYxMzgwMDEwMDgwMEQKKzoxMEEwMzAwMEEyODAyRkI2MDAwMDU1MEQ2NzAwMDBGOEEyODAyRkI1NTIKKzoxMEEwNDAwMDAwMDAxNjEzMTIwMDAwMDAwOUMwMjFCMjFEMDAxNjEzRjMKKzoxMEEwNTAwMDA0MDEwMDgwMDJBNDE3QjgwODAwMDAwMDAwNDAwMjc4NDQKKzoxMEEwNjAwMDM5OUFGRTM4MDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDQUMKKzoxMEEwNzAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzA4MDAxNjEzNjAKKzoxMEEwODAwMDEyNDAwMjY4MTI5QUZFQjgwMDAwMTYxMzBCMDAwMDgwRkUKKzoxMEEwOTAwMDAyMDAwMEIwMDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyM0MKKzoxMEEwQTAwMDAwMDAxNjEzMUYwMDAwNkNEOEUwODZCQTAwMDAzMjEwQzIKKzoxMEEwQjAwMDUxMDAwMEQ4MDIwMDAwRjIwMDAwNjUwRDAwMDAwMDNDRDUKKzoxMEEwQzAwMDA4NDA4MDkyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRkIKKzoxMEEwRDAwMDAwMDAzOTBEMDQwMTAwODAwMjgwODFCQzAwMDA2QjBEN0UKKzoxMEEwRTAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNkEwRDEyMDEwMDAwREUKKzoxMEEwRjAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDUKKzoxMEExMDAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwODQzMjFEMDAxNjEzMzkKKzoxMEExMTAwMDA0MDAwMDgwMDJBNDE3QjgwMDAwNDYxMDAwNjAwMDZDMjQKKzoxMEExMjAwMDA4MDA2RUYyMDAwMDNBMEQ0RDAwMDAwMDY3RTA4MzlFQ0IKKzoxMEExMzAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDAwMDAwRUYKKzoxMEExNDAwMEMwMDEwMTM4MDhDMDZFMzIwMDAwMDAwMDQ1MzAwMEUwNTgKKzoxMEExNTAwMDA2MDAwMDMyMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0OUQKKzoxMEExNjAwMDAwMDA3NTBEMDQwMjAxRUMxNkMwNkVCQzAwMDAwMDAwN0EKKzoxMEExNzAwMEM5MDEwMDE0MTg0MDgxM0EwMEMwNzUwRDEyMDEwMDQwNTkKKzoxMEExODAwMEEyOEQzOUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwN0EKKzoxMEExOTAwMDAwQzAwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwNzgKKzoxMEExQTAwMDAwQTgwMTIwOTkyMjZFM0EwMDAwMTYxMzA2MDEwMjgwRDEKKzoxMEExQjAwMDgyMUI5MkJDMDAwMDE2MTM5RjIwMDFFMDk2MjI2RUJDMDkKKzoxMEExQzAwMDAwMDA3QjBEODAwMDAwODBGMjgwMkZCNjAwMDBDNzBGREEKKzoxMEExRDAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwN0YwRDA0MDAwMDNDNDEKKzoxMEExRTAwMEQ4RTA4M0JDMDAwMDdFMEQ5RjMxMDFFMDk2MjI2RUJDNUEKKzoxMEExRjAwMDAwMDAwMDAwMDAzMDAxRTAwNjAwMDAzMjAwMDA4NjBEODMKKzoxMEEyMDAwMDAwNTAwMUU4RjY2MDgwOUMwODAwMDAwMDAwNDAwMjc4RTEKKzoxMEEyMTAwMDM5OUFGRTM4MDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDRkEKKzoxMEEyMjAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzA4MDAwMDAwRDcKKzoxMEEyMzAwMDAwNDAwMjY4MTI5QUZFMzgwMDAwODUwRDlGMzEwMUUwNEYKKzoxMEEyNDAwMDk2MjI2RUJDMDAwMDAwMDAwMDMwMDFFMDA2MDAwMDMyRTMKKzoxMEEyNTAwMDAwMDAwMDAwMDA1MDAxRTgwNjAwMDAzMjAwMDAwMDAwOEQKKzoxMEEyNjAwMDAwQTgwMUUwMDYwMDkyMzIxODAwMzYwMDAwMDAwMEY4NTUKKzoxMEEyNzAwMDczMEEwM0Y5MUQwMDhCMEQwNDAwMDA4MDAyQTQxN0I4QjcKKzoxMEEyODAwMDAwMDA4NzBEMDQwMDAwMTQxODQwODFCQzAwMDAxNjEzNjQKKzoxMEEyOTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzgwMDAwMDgwODMKKzoxMEEyQTAwMDcyODAyRkI2MDAwMDAwMDAwMDAwMDBEODAyODAwMTMyNEEKKzoxMEEyQjAwMDAwMjAwMDgwMDAwMDAwMjgwOTAwMzczMjAwMDA2NjEyRUMKKzoxMEEyQzAwMDAwMDAwMDA4RTgwMTAwRjQwMDAwMTYxMzEyMDAwMDQ4MjYKKzoxMEEyRDAwMDAyQzA4MEIyMDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyQjgKKzoxMEEyRTAwMDAwMDA5MzBEMjMwMTAwMTQxODQwODFCQTNFMDAxNjEzOUMKKzoxMEEyRjAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMTYxMzgwMDEwMDgwQzcKKzoxMEEzMDAwMEEyODAyRkI2MTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5QkQKKzoxMEEzMTAwMDFEMDAxNjEzMDQwMDAwODAwMkE0MTdCODAwMDAxNjEzRDUKKzoxMEEzMjAwMDlGMDAwMDE0MTg0MDgxQkMwMDAwOTQwRDBCMDEwMDgwQjgKKzoxMEEzMzAwMDAyMDAwMEIwMDAwMDRCMTIwMDAwMDA4MDAyMDAwMEYwOUMKKzoxMEEzNDAwMDAwMDA5QzBEMjkzMTAxMEMwOTAwNkVCMjJCMDA3RDA4MjQKKzoxMEEzNTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwRTYKKzoxMEEzNjAwMDAyMDAwMDkwMDAwMEJFMEYwMDBDMDIwMDA5ODA2RUYyOTcKKzoxMEEzNzAwMDAwMDBBNTBEMDAwMDAwODAwMjAwMDA5MDAwMDA1RDEyQUEKKzoxMEEzODAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwMDAwMDAwMDAwMDFDM0YKKzoxMEEzOTAwMDA4MDA5MDMyMDAwMEE0MEQwNDAwMDAyODA5ODA4MEIyNUIKKzoxMEEzQTAwMDAwMDA4MTExMDAwMDAwRDgwMjAwMDBEMjAwMDBBNDBEQkUKKzoxMEEzQjAwMDA0MDAwMDgwMDI4MDkyQkMxODAwMzYwMDAwMDAwMEY4MDMKKzoxMEEzQzAwMDczMEEwM0Y5MDAwMDY4MDYwMDAwMDAwODA4MDAwMDkyMDQKKzoxMEEzRDAwMDAwMDBBODBEMUQwMTAwODAwMjAwMDBCMDAwMDA3RDA4RjMKKzoxMEEzRTAwMDgwMDEwMDgwNjI4MTJGQjYwMDAwMTYxMzAwMDAwMDgwRkIKKzoxMEEzRjAwMDAyMDAwMDkwMDAwMDdEMDg4MDAwMDA4MDAyODEyRkI2REUKKzoxMEE0MDAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDA3RDA4MDcKKzoxMEE0MTAwMDAwMDAwMEY4MDI4MTJGOTQwMDAwMTYxMzgwMDEwMDgwRDQKKzoxMEE0MjAwMDgyODEyRkI2MDAwMDE2MTMwNDAwMDAxODA5NDA4MUIyODMKKzoxMEE0MzAwMDAwMDBFMzBGMDAwMDAwODAwMjAwMDBGMDAwMDBDNzBGRTIKKzoxMEE0NDAwMDAwQTgwMTIwMDkwMDZFRjIwMDAwMDAwMDAwMzAwMTBDOUQKKzoxMEE0NTAwMDA5MDA2RTMyMDAwMEJFMEYwMDBDMDIwMDA5ODA2RUYyOEYKKzoxMEE0NjAwMDAwMDA3RjA4MDAwMDAwODAwMjAwMDA5MDAwMDA0QjEyRjYKKzoxMEE0NzAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwNUQxMjAwMDAwMDgwN0IKKzoxMEE0ODAwMDAyMDAwMEYwMDAwMDY4MDYwMDAwMDAxQzA4MDA5MDkyMjYKKzoxMEE0OTAwMDAwMDAwMDAwNTQ1NDAxRkMwMkMwNkUzMjAwMDAxNjEzOEMKKzoxMEE0QTAwMDgwMDEwMDgwODI4MTJGQjYwMDAwMTYxMzFGMDAwMDgwRkIKKzoxMEE0QjAwMDAyMDAwMEIwMTAwMDAwMDAwMDAwMDBBODc4MEIxNjM4NjEKKzoxMEE0QzAwMDA4MDAwMDAwMDAwMDAwQUM3ODBCMTYzODAwMDAwMDAwMDcKKzoxMEE0RDAwMDAwMDAwMEIwQTgwMDJEMzcwMDA0MDEwMDAwMDAwMEIwMEIKKzoxMEE0RTAwMEM4MEQ4QjNBMDAwMDAwMDAwMDUwMDFCNDA4ODA2RTMyQTUKKzoxMEE0RjAwMDAwMDBDNzBEMDQzMTAxOTAwODAwNkVCMjAyMDAwMDAwOTgKKzoxMEE1MDAwMDAwMDAwMEM4ODI4RDhBMzcwMDAwMDAwMDAwMDAwMEM4RUIKKzoxMEE1MTAwMEMyQTIyQzNBMTgwMEM1MEQ4NjQxMDI3ODg4MEQ3OEI2ODMKKzoxMEE1MjAwMDAwMDAxNjEzMDQwMDAwODBBMkUyOEFCQzAwMDAxNjEzOEIKKzoxMEE1MzAwMDA0NDEwMjgwQjIzRjc4QjAwMDAwQkUwRDlGMDEwMEE4MjgKKzoxMEE1NDAwMDE4ODA4QUJDOUYwMEJFMEQwMDAwMDBBODA4MDAzNjkyNEIKKzoxMEE1NTAwMDAwMDAwMDAwMDA0MDAyMDRCODNGNzgzMDAwMDBEQTBEMkYKKzoxMEE1NjAwMDAwMDAwMDA0RDg2MjgwOUMwMDAwMTYxMzAyMEMwMjgwRDgKKzoxMEE1NzAwMEEyMUI4OUJDMDAwMDE2MTM4MDAwMDA4MDgyODAyRkI2QzkKKzoxMEE1ODAwMDAyMDAwMDAwMDAwMDAwQzg4MjhEOEEzNzAwMDAwMDAwMzEKKzoxMEE1OTAwMDAwMDAwMEM4QzJBMjJDM0ExODAwRDAwRDg2NDEwMjc4RjMKKzoxMEE1QTAwMDg4MEQ3OEI2MDAwMDE2MTMwNDAwMDA4MEEyRTI4QUJDNzEKKzoxMEE1QjAwMDAwMDAxNjEzMDQ0MTAyODBCMjNGNzhCMDAwMDBDOTBEQkMKKzoxMEE1QzAwMDlGMDEwMEE4MTg4MDhBQkM5RjAwQzkwRDAwMDAwMEE4NDgKKzoxMEE1RDAwMDA4MDAzNjkyMDAwMEQzMEQyODQwMDIwNEI4M0Y3OEIwM0UKKzoxMEE1RTAwMDAwMDAwMDAwQzgwMTAwMDREODYyODAzQzAwMDAxNjEzN0YKKzoxMEE1RjAwMDlGMDAwMDgwMDI0MDgwQjIwMDAwRDcwRDAyMDEwMDkwNTEKKzoxMEE2MDAwMDE4MjA4OUJDMDAwMDAwMDAwMDAwMDBCNDA4MDAwMDMyREYKKzoxMEE2MTAwMDAwMDBDOTBEOUYwMTAwQTgxODgwOEFCQzlGMDBDOTBEQzkKKzoxMEE2MjAwMDAwMDAwMEE4MDgwMDM2OTIwMDAwREEwRDA0MDAwMDkwMzcKKzoxMEE2MzAwMDE4MjA4OUJBMDAwMDE2MTM5RjAwMDAwNDQ4NjI4MEJDRUQKKzoxMEE2NDAwMDAwMDAxNjEzOTAwMDAwQjQ0ODYyOEJCQTAzMDAxNjEzODIKKzoxMEE2NTAwMDA0NDAwMjAwMDgxRUZGQjgwMDAwRTIwRDAwMDAwMDAwRTgKKzoxMEE2NjAwMEQ4MjI4MDlBMDAwMDA5MEUwNDAwMDA4MEEyRTI4QUJDNzEKKzoxMEE2NzAwMDAyMDAwMDAwMDAwMDAwQzg4MjhEOEEzNzAwMDAwMDAwNDAKKzoxMEE2ODAwMDAwMDAwMEM4QzJBMjJDM0ExODAwMDcwRTg2NDAwMjc4Q0IKKzoxMEE2OTAwMDg4MEQ3OEI2MDAwMDE2MTMwNDQwMDIwNEI4M0Y3OEIwNjUKKzoxMEE2QTAwMDAzMDAxNjEzMDQ0MDAyMDAwODFFRkZCODM4MDAwMDAwMjMKKzoxMEE2QjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0NzMKKzoxMEE2QzAwMDA5MDA4MEQyMDAwMEU4MEQxMjAxMDA2MDA4NDAyM0IyQUEKKzoxMEE2RDAwMDAwODIwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDBGMzAzMEEKKzoxMEE2RTAwMDEyMDEwMDJDNzJFMDJFQjIwMDAwMTYxMzAwMDAwMDgwNTAKKzoxMEE2RjAwMDAyMDAwMDkwMDAwMDE2MTMxMjAwMDAyNDA4MDAyM0IyOEMKKzoxMEE3MDAwMDAwMDAxNjEzMTIwMDAwMjAwOEMwMjNCMjAwMDAxNjEzMjgKKzoxMEE3MTAwMDEyMDAwMDE4MDg4MDIzQjIwMDAwMDAwMDAwMDAwMEQ4REEKKzoxMEE3MjAwMDAyODAwMTMyMDBDMEYyMEQxODAxMDAwQ0E4Q0QzRUIyMkIKKzoxMEE3MzAwMDAwMDBFQzBEMTIwMDAwMzgwMjgwODFCMjAwMDAxNjEzRjgKKzoxMEE3NDAwMDEyMDAwMDNDMDIwMDgyQjIwMDAwMTYxMzEyMDAwMDMwMUEKKzoxMEE3NTAwMDAyNDA4MkIyMDAwMDE2MTMxMjAwMDAzNDAyMDA4NkIyREEKKzoxMEE3NjAwMDIwODBFNjBEMDAwMDAwMDgwODgwMzY5MjAwMDAwMDAwRkUKKzoxMEE3NzAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMzgwMjAwOTMKKzoxMEE3ODAwMEI4MUI4MDNBMDAwMDAwMDA2NDMwMDFFMDE2MjA2RTNBRTkKKzoxMEE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAwMDAwQzAKKzoxMEE3QTAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwRDgKKzoxMEE3QjAwMDA3NDA4MjMyMDAwMDAwMDAwMDE4MDAwMDA3MDA4NjMyQzcKKzoxMEE3QzAwMDAwMDAxNjEzMTIwMDAwNTBGMkMxMzhCNDAwMDAwMDAwNUYKKzoxMEE3RDAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDAwMTgwMDAwRDQKKzoxMEE3RTAwMDA3ODA4MTMyMDAwMDAwMDAwMDIwMDAwMDA3MDA4MjMyNTQKKzoxMEE3RjAwMDEwMDAwMDAwMDAzMDAwMDAxN0UwMkMzOTAwMDAwMDAwQkQKKzoxMEE4MDAwMDAwMzgwMDAwRjcwMTBCMzQwMDAwMDEwRTgwMDEwMDgwQzkKKzoxMEE4MTAwMDMyODA4N0I2MDAwMDAwMDAwMDM4MDAwMEI3MDE3MDM0QjUKKzoxMEE4MjAwMDAwMDAwMDAwMDAwMDAwMDhFODAxMDAzNDAwMDAxMzBFRTIKKzoxMEE4MzAwMDAyMEMwMjgwQTIxQjg5QkMxODAwMzYwMDAwMDAwMEY4NDAKKzoxMEE4NDAwMDczMEEwM0Y5MDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyQkQKKzoxMEE4NTAwMDAwMDAxNjEzMTIwMDAwNDgwMkMwODBCMjE4MDAzNjAwMzMKKzoxMEE4NjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwREMwRDlGMDEwMEE4NDYKKzoxMEE4NzAwMDE4ODA4QUJDOUYwMERDMEQwMDAwMDBBODA4MDAzNjkyRkEKKzoxMEE4ODAwMDI4MDAwQzBFMDQwMTAwODA4MkNEODFCQzAwMDAwMDAwNzUKKzoxMEE4OTAwMDAwMjAwMTc4MDkwMDZFMzIwMDAwMTYxMzA0MDEwMDgwQzgKKzoxMEE4QTAwMDQyQTI5N0JDMDAwMDBFMEU4MDAxMDA4MDMyODAyRkI2QkQKKzoxMEE4QjAwMDNFMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDAxMDBFQTYKKzoxMEE4QzAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwN0QwODAwMDAwMEY4QkIKKzoxMEE4RDAwMDYyODEyRjk1MDAwMDdEMDg4MDAwMDA4MDAyODEyRkI2RTQKKzoxMEE4RTAwMDJBMDAxNjEzMTIwMDAwMkM4MkNEMkVCMjAwMDA3RDA4MjMKKzoxMEE4RjAwMDAwMDAwMEY4MDI4MTJGOTQwMDAwMDAwMDAwMzgwMDAwRTIKKzoxMEE5MDAwMEM3MDE3MDM0MDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyMDkKKzoxMEE5MTAwMDA4MDAxNzBFMjMxOTAxRTg3NjIwODFCOTNFMDAxNjEzQUUKKzoxMEE5MjAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMTkwRTFEMDEwMDgwRjUKKzoxMEE5MzAwMDAyMDAwMEIwMDAwMDFDMEUwMDAwMDBGODYyODEyRjk1OUMKKzoxMEE5NDAwMDAwMDAxQzBFODAwMDAwODAwMjgxMkZCNjJBMDAxNjEzMjIKKzoxMEE5NTAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4OTIKKzoxMEE5NjAwMDAyODEyRjM0MDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2RDEKKzoxMEE5NzAwMDAwMDA1NDEwMDAwMDAwMkNGOTAxMDBGNDAwMDAyMDBFMkIKKzoxMEE5ODAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4RjEKKzoxMEE5OTAwMDczMEEwM0Y5MDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyQzcKKzoxMEE5QTAwMDAwMDBGNjAzMDAwMDAwRjhBMjgwMkY5NDAwMDAwMDAwRDEKKzoxMEE5QjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDAwMzAwMDI4QjIKKzoxMEE5QzAwMDA4MDA2RTMyMDAwMDAwMDA1NDU0MDFGQzAyQzA2RTMyRDgKKzoxMEE5RDAwMDAwQzAyRTBFMTgwMTAwMENBOENEM0VCMjIwODAwMDAwNTEKKzoxMEE5RTAwMDAwMDAwMDI4MDk4MDM2MzIwMDAwODExMTAwMDAwMEQ4RTQKKzoxMEE5RjAwMDAyMDAwMEQyMDAwMDJCMEUwNDAwMDA4MDAyODA5MkJDRjYKKzoxMEFBMDAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTJDMEUzNjAwMEQKKzoxMEFBMTAwMDAwMDAwMEMwMDIwMDM2OTIxODAwMzYwMDAwMDAwMEY4NjYKKzoxMEFBMjAwMDczOEEwM0Y5MDAwMDAwMDAwMDAwMDBEODAyODAwMTMyQTAKKzoxMEFBMzAwMDAwQzAyQjBFMTgwMDAwMENBOENEM0VCMjAwMjAwMDg0RjAKKzoxMEFBNDAwMDAwMDAwMDI4MDkwMDM3MzIwMDAwNjIxMjAwMDAwMDA4RjAKKzoxMEFBNTAwMEU4MDEwMEY0MDAwMDdEMDgwMDAwMDA4MDAyMDAwMDkwODIKKzoxMEFBNjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwNTkKKzoxMEFBNzAwMDU0NTQwMUZDMDJDMDZFMzIwMEMwMzcwRTE4MDEwMDBDQTUKKzoxMEFBODAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyQzkKKzoxMEFBOTAwMDAwMDBFRjAzMTIwMTAwMkM3MkUwMkVCMjAwMDAxNjEzMkEKKzoxMEFBQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjMxMTAwMDAwMDI4NjgKKzoxMEFBQjAwMDA5MDAwMkYyMDAwMDNGMEUwMDAwMDA1QzA4MDAwMDkyNTYKKzoxMEFBQzAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwRjkKKzoxMEFBRDAwMDU0NTQwMUZDMDJDMDZFMzIwMEMwM0YwRTE4MDEwMDBDM0QKKzoxMEFBRTAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyNjkKKzoxMEFBRjAwMDAwMDAzODEyMDAwMDAwNUMxRkMwRjVGQTAwMDBGMzAzRUMKKzoxMEFCMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMzAwMDI4REIKKzoxMEFCMTAwMDA4MDA2RTMyMDAyMDAwODQwMDAwMDAyODA5MDAzNzMyNEYKKzoxMEFCMjAwMDAwMDA2MjEyMDAwMDAwMDhFODAxMDBGNDAwMDA0NDBFN0EKKzoxMEFCMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMDA4RkIKKzoxMEFCNDAwMDA4MDAwMDMyMDAwMDRBMEUwNDAwMDA4MDAyQzA4NUIyRjYKKzoxMEFCNTAwMDAwMDA0QTBFODAwMDAwODBGMkMxODVCNjAwMDA0OTBFNTgKKzoxMEFCNjAwMDFDNDEwMjgwMDZDMDg1QjIwMDAwMDAwMDAwMDAwMDY4QTEKKzoxMEFCNzAwMDAyQzU4NTMwMDAwMDAwMDAwMDAwMDA3MDFGMDBGNzNBOTkKKzoxMEFCODAwMDAwMDAwMDAwMDAwMDAwRjgyMjgxMkYzNDAwMDBEMDBFRTkKKzoxMEFCOTAwMDgwMDEwMDgwQTI4MDJGQjYxODAwMDAwMDAwMDAwMEY4OUQKKzoxMEFCQTAwMDczMEEwMzM5RDAwRTM2MDBDQTAwMDBDMDAyMDAzNjkyODQKKzoxMEFCQjAwMDAwMDA5OTBFODAwMTAwODA4MjgxMkZCNjAwMDBBMTBFNTYKKzoxMEFCQzAwMDFGMjAwMTA4MDkwMDZFQjIwMDAwOTkwRTA0MzAwMTA4MzAKKzoxMEFCRDAwMDg5OUI5MEJDMDAwMDU2MEUwNDMxMDE4MDAyMDA2RUJDQkYKKzoxMEFCRTAwMDAwMDAzMjEwMDAwMDAwODAwMjAwMDBGMDAwMDA1NDBFNEYKKzoxMEFCRjAwMDAwNTAwMTQ4MDg4MDZFOTIwMDAwMTYxMzAwMDAwMDgwOEIKKzoxMEFDMDAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDAwNDI4NjE4MDNDNjkKKzoxMEFDMTAwMDAwMDA2QjBFMDAwMDAwMDAyODIxODA5QTAwMDAxNjEzMkYKKzoxMEFDMjAwMDlGMDAwMDgwMDI4MDkwQjIwMDAwMzIxMDAwMzAwMTQ4ODYKKzoxMEFDMzAwMDA4MDA2RUYyMDAwMDVBMEUwMDUwMDEwNEE4NUI4MDlDRDAKKzoxMEFDNDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwQzkKKzoxMEFDNTAwMDAwNTAwMTAwQTgxQjgwM0EwMDAwNjgwRTA3MDAwMDQ4NjEKKzoxMEFDNjAwMDE4QTA4NEJDMDgwMDAwMDAwMDQwMDIwMDE4OUFGRTM4QkEKKzoxMEFDNzAwMDAwMDAxNjEzMDIwMTAwODA4MjNBODBCQzAwMDAxNjEzMDcKKzoxMEFDODAwMDA2MDEwMDgwOTIzQTgwQkMwMDAwMDAwMDAwMDAwMDY4Q0QKKzoxMEFDOTAwMDAyMDA4MDMyMDAwMDMyMTAwMDAwMDA4MDAyMDAwMEYwNEMKKzoxMEFDQTAwMDAwMDA2MzBFMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzRjgKKzoxMEFDQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNjgwRTA3MDAwMDQ4QkQKKzoxMEFDQzAwMDE4QTA4NEJDMDgwMDAwMDAwMDQwMDIwMDE4OUFGRTM4NUEKKzoxMEFDRDAwMDAwMDAxNjEzMDIwMTAwODA4MjNBODBCQzAwMDAxNjEzQTcKKzoxMEFDRTAwMDA2MDEwMDgwOTIzQTgwQkMwMDAwNjAwRTAwMDAwMDY4RkYKKzoxMEFDRjAwMDAyMDA4MDkyMDAwMDZCMEUwNDAwMDA0ODE4QTA4NEJBODUKKzoxMEFEMDAwMDAwMDAxNjEzOUYwMDAwMDQyODYxODBCQzAwMDAwMDAwQjIKKzoxMEFEMTAwMDAwMDAwMDAwMjgyMTgwM0EwMDAwMDAwMDAwNTQwMUZDREYKKzoxMEFEMjAwMDAyQzA2RTMyMDAwMDc0MEUxMjAxMDA2MDA4NDAyM0IyQUYKKzoxMEFEMzAwMDAwODIwMDAwRDYwMTAwMDgwODgwMzYzMjAzMDAxNjEzOTYKKzoxMEFENDAwMDA0NDAwMjAwMzgxQUZGQjgwMzAwMDAwMDAwMDAwMDc4MzkKKzoxMEFENTAwMDA5NjA4MDM5MTgwMDAwMDBEMjQxMDI4Q0U2QTE5NzM5QzEKKzoxMEFENjAwMDAwMDAwMDAwMDA1MDAxRTgwNjgwODQzMjI5MDBGMzAzNEYKKzoxMEFENzAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwQkMKKzoxMEFEODAwMDAyMDAwMDkwMDAwMDE2MTMxMjAwMDAyNDA4MDAyM0IyRjUKKzoxMEFEOTAwMDAwMDAxNjEzMTIwMDAwMjAwOEMwMjNCMjAwMDAxNjEzOTIKKzoxMEFEQTAwMDEyMDAwMDE4MDg4MDIzQjIwMDAwMDAwMDAwMDAwMEQ4NDQKKzoxMEFEQjAwMDAyODAwMTMyMDBDMDdGMEUxODAxMDAwQ0E4Q0QzRUIyMDcKKzoxMEFEQzAwMDIwODAwMDAwRDYwMTAwMDgwODgwMzYzMjAwMDA3OTBFOEQKKzoxMEFERDAwMDEyMDAwMDM4MDI4MDgxQjIwMDAwMTYxMzEyMDAwMDNDRkQKKzoxMEFERTAwMDAyMDA4MkIyMDAwMDE2MTMxMjAwMDAzMDAyNDA4MkIyNEMKKzoxMEFERjAwMDAwMDA2RTBFMTIwMTAwMzQwMjAwODZCMjAwMDAxNjEzMkQKKzoxMEFFMDAwMDAwMDAwMDgwMDIwMDAwOTAwODAwMDAwMDAwNDAwMjVDOEEKKzoxMEFFMTAwMDE4OUFGRTM4MDAwMDAwMDAwMDAwMDA0ODA4MDAwMDMyQzgKKzoxMEFFMjAwMDAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwMTYKKzoxMEFFMzAwMDAwMDAwMDAwMDc0MDgwMzIwMDAwMDAwMDAwMDgwMDAwMTEKKzoxMEFFNDAwMDA3MDA4MDMyMDAwMDAwMDAwMDEwMDAwMDA3NDA4MjMyM0UKKzoxMEFFNTAwMDAwMDAwMDAwMDAxODAwMDAwNzAwODYzMjAwMDAxNjEzRjIKKzoxMEFFNjAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwMDAwMEQ2MDEwMEQ4MzIKKzoxMEFFNzAwMDAyODAwMTMyMDAwMDAwMDAwMDE4MDAwMDA3ODA4MTMyQ0IKKzoxMEFFODAwMDAwMDAwMDAwMDAyMDAwMDAwNzAwODIzMjEwMDAwMDAwRDcKKzoxMEFFOTAwMDAwMzAwMDAwMTdFMDJDMzkwMDAwOEUwRTgwMDAwMDgwOEEKKzoxMEFFQTAwMDMyODA4N0I2MDAxMDAwODAwMDM4MDAwMDA3MDAzNzMyN0IKKzoxMEFFQjAwMDAwMDA4RjBFMDAwMDAwODAwMjAwMDA5MDAwMTAwMDg4NEIKKzoxMEFFQzAwMDAwMzgwMDAwMDcwMDM3MzIxODAwMzYwMDAwMDAwMEY4OTQKKzoxMEFFRDAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDA2ODAyQzA4NTMyMTgKKzoxMEFFRTAwMDAwMDAxNjEzMDIwMTAwODA4MkZBODVCQzAwMDAxNjEzRDAKKzoxMEFFRjAwMDA2MDEwMDgwOTJGQTg1QkMwMDAwMDAwMDAwMDAwMDA4RjYKKzoxMEFGMDAwMEU4MDEwMDM0MDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyQUQKKzoxMEFGMTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAzMjEwMzAKKzoxMEFGMjAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwNkIwRTAwMDAwMDgwQjYKKzoxMEFGMzAwMDAyMDAwMDkwMDAwMEExMEUwMDAwMDA4MDAyMDAwMDkwQkUKKzoxMEFGNDAwMDAwMDAzMjEwMDAwMDAwODAwMjAwMDBGMDAwMDA5QzBFQTMKKzoxMEFGNTAwMDAwMzgwMjAwQjgxQjgwOUMwMDAwQTEwRTAwMDAwMDgwOTkKKzoxMEFGNjAwMDAyMDAwMDkwMDUwMDAwMDAwMDAwMDA2ODAyQTBGRTM4MEEKKzoxMEFGNzAwMDA1MDAwMDAwMDAwMDAwNzgwOUEwRkUzODAwMDAxNjEzNEMKKzoxMEFGODAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwRkYKKzoxMEFGOTAwMDkyQkE5N0JDMDAwMDk5MEUwMDQwMDI4MDAyNDA2ODkyNkQKKzoxMEFGQTAwMDAwMDAwMDAwQ0EwMTAwRDgwMjAwMDAzMjAwMDBBNTBFMTcKKzoxMEFGQjAwMDA0QjgwMTgwMDIwMDZFQkMwMDAwMTYxMzlGQjgwMTc4MkYKKzoxMEFGQzAwMDg5MUJFRUJDMDAwMDAwMDAwMEI4MDFFMDg2MUJFRTNDQ0YKKzoxMEFGRDAwMDRDMDAwMDAwMDAwMDAwMDAwNzAwMzYzMjAwMDAwMDAwQjYKKzoxMEFGRTAwMDAwMDAwMDc4QTkwMDJEMzdCNDA0MDEwMDAwMDgwMDAwMUIKKzoxMEFGRjAwMEM3OEQ5NzNBMDAwMDAwMDAwMDAwMDA3ODk5QzAyQzM3RjgKKzoxMEIwMDAwMEI0MDAwMDAwMDAwMDAwNzg4OThEOTczQTAwMDAxNjEzMDQKKzoxMEIwMTAwMDAyMTAwMDAwODdCRjk3QkEwMDAwMDAwMDAwMTgwMDAwNkYKKzoxMEIwMjAwMDA3NDBGRTMyMDAwMDE2MTMxMjAwMDA0OEYyQzEzOEI0ODcKKzoxMEIwMzAwMDAwMDBBRDBFQjYwMDAwODAwMjAwMDBCMDAwMjAxNjEzMjQKKzoxMEIwNDAwMDEyMDAwMDY0QTJDRDJDQjIwMDAwMDAwMEE2MDAwMDgwMTcKKzoxMEIwNTAwMDAyMDAwMDMwMDAwMEIyMEU4MDAxMDA4MEEyODAyRkI2RjYKKzoxMEIwNjAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTAwMDA3RDA4RDIKKzoxMEIwNzAwMDAwNTQwMUZDMDJDMDZFOTIwMDAwMTYxMzgwMDEwMDgwOTMKKzoxMEIwODAwMDYyODEyRkI2MDAwMDE2MTM4MDAxMDA4MDgyODEyRkI2RTYKKzoxMEIwOTAwMDAwMDAxNjEzMUYwMDAwODAwMjAwMDBCMDAwMDAwMDAwMzYKKzoxMEIwQTAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwQkIwRTEyMDEwMDYwQjEKKzoxMEIwQjAwMDA4NDAyM0IyMDA4MjAwMDAwMDAwMDAwODA4ODAzNjMyRjkKKzoxMEIwQzAwMDI5MDBGMzAzMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzQ0EKKzoxMEIwRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzEyMDAwMDI0RkYKKzoxMEIwRTAwMDA4MDAyM0IyMDAwMDE2MTMxMjAwMDAyMDA4QzAyM0IyOEIKKzoxMEIwRjAwMDAwMDAxNjEzMTIwMDAwMTgwODgwMjNCMjAwMDAwMDAwQTAKKzoxMEIxMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwQzYwRTE4MDEwMDBDRjkKKzoxMEIxMTAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyMzIKKzoxMEIxMjAwMDAwMDBDMDBFMTIwMDAwMzgwMjgwODFCMjAwMDAxNjEzMjkKKzoxMEIxMzAwMDEyMDAwMDNDMDIwMDgyQjIwMDAwMTYxMzEyMDAwMDMwMjAKKzoxMEIxNDAwMDAyNDA4MkIyMDAwMEI5MEUxMjAxMDAzNDAyMDA4NkIyNDEKKzoxMEIxNTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAzMjEwNzIKKzoxMEIxNjAwMDAwMDAwMDQ4MDgwMDAwRjIwODAwQzkwRTAwNDAwMjVDMjAKKzoxMEIxNzAwMDE4OUFGRTk4MDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNEMKKzoxMEIxODAwMDAwMDAwMDAwMDA1MDAxMDBBODFCODAzQTAwMDA4MTBFNjIKKzoxMEIxOTAwMDAwMDAwMDQ4MDgwMDAwOTIwMDAwMTYxMzFGMDEwMDgwMDQKKzoxMEIxQTAwMDAyMDAwMEIwMDAwMDAwMDAwMDU0MDFGQzAyQzA2RTMyM0EKKzoxMEIxQjAwMDAwMDBGMzExMDAwMDAwMjgwOTgwMDJGMjAwMDBBRDBFMkIKKzoxMEIxQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjMxMTAwMDAwMDI4NDEKKzoxMEIxRDAwMDA5MDAwMkYyMDAwMEQzMEU5QTAxMDBGODYyODEyRkI0MzgKKzoxMEIxRTAwMDEwMjQwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwQTQKKzoxMEIxRjAwMDAwRDYwMUVDMDZDMDZFMzQyRTAwN0QwODEyMDEwMDJDMzIKKzoxMEIyMDAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRDQKKzoxMEIyMTAwMDAwMDAxNjEzMDRBOTAxODAwMjAwNkVCMjAwMDBERTBFQzkKKzoxMEIyMjAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwREEwRTFGNDAwMjg0NjIKKzoxMEIyMzAwMEU2MDEwMEI0MDAwMERFMEUxRDAxMDBGODIyODEyRkI0RUIKKzoxMEIyNDAwMDAwMDBERTBFMDAwMDAwRjg2MjgxMkY5NTAwMDBEQzBFODkKKzoxMEIyNTAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4QTYKKzoxMEIyNjAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyRjkKKzoxMEIyNzAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDBFMDBFNjUKKzoxMEIyODAwMDA0OTgwMTY0ODgxQjg3QkMwMDAwQUIxMjAwOTAwMTA4ODEKKzoxMEIyOTAwMDA5MDA2RUYyMDAwMERGMTIwMDAwMDA4MDAyMDAwMEYwRTIKKzoxMEIyQTAwMDAwMDAwMDAwMDAwMDAwNzgwOUM1ODUzMDAwMDAxNjEzN0EKKzoxMEIyQjAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwQ0MKKzoxMEIyQzAwMDkyQkE5N0JDMDAwMDE2MTMxMjAwMDA2ODAyQzU4NUIwNDAKKzoxMEIyRDAwMDAwMDAwMDAwMDAwMDAwRjhEMjgwMkYzNTAwMDA3RjA4MzkKKzoxMEIyRTAwMDM3MDAwMEY4RDI4MTJGQjQwMDAwMDAwMDAwMDAwMEY4MDEKKzoxMEIyRjAwMDcyODEyRjM0M0QwMDdGMDgxMjAxMDAyQzgyQ0QyRUIyQzYKKzoxMEIzMDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBGMjBFMDIKKzoxMEIzMTAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwRUUwRTFGNDAwMjg0NUQKKzoxMEIzMjAwMEU2MDEwMEI0MDAwMEYyMEUxRDAxMDBGODIyODEyRkI0RTYKKzoxMEIzMzAwMDAwMDBGMjBFMDAwMDAwRjg2MjgxMkY5NTAwMDBGMDBFNzAKKzoxMEIzNDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4QjUKKzoxMEIzNTAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyMDgKKzoxMEIzNjAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDAwMDAwNjIKKzoxMEIzNzAwMDAwRDQwMUVDMTZDMDZFM0EwMDAwMDAwMDAwMDAwMDc4MTYKKzoxMEIzODAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDRkYKKzoxMEIzOTAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDAxNjEzMzUKKzoxMEIzQTAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwN0YwODA0QjAwMDgwNkMKKzoxMEIzQjAwMDAyMDA2RUJDMzcwMDdGMDgxMjAxMDAyQzgyQ0QyRUIyMzUKKzoxMEIzQzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMjBGMzEKKzoxMEIzRDAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwRkUwRTFGNDAwMjg0OEQKKzoxMEIzRTAwMEU2MDEwMEI0MDAwMDAyMEYxRDAxMDBGODIyODEyRkI0MTUKKzoxMEIzRjAwMDAwMDAwMjBGMDAwMDAwRjg2MjgxMkY5NTAwMDAwMDBGOEUKKzoxMEI0MDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4RjQKKzoxMEI0MTAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyNDcKKzoxMEI0MjAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDAwRjBGODMKKzoxMEI0MzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMEIwRjgwMDEwMDgwREYKKzoxMEI0NDAwMEYyQzE4NUI2MDAwMDA3MEYxRjQwMDI4NEU2MDEwMEI0NzgKKzoxMEI0NTAwMDAwMDAwQjBGMUQwMTAwRjgyMjgxMkZCNDAwMDAwQjBGMUMKKzoxMEI0NjAwMDAwMDAwMEY4NjI4MTJGOTUwMDAwMDkwRjFEMDEwMDgwODcKKzoxMEI0NzAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODYyODEyRjM1REIKKzoxMEI0ODAwMDAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMjAwMDAxNjEzRjUKKzoxMEI0OTAwMDFGMDEwMDgwMDIwMDAwQjAwMDAwMEYwRjM3MDAwMEY4MEQKKzoxMEI0QTAwMEQyODEyRkI0MDAwMDAwMDAwMDAwMDBGODcyODEyRjM0MTgKKzoxMEI0QjAwMDNEMDAwRjBGMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzOUEKKzoxMEI0QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwRDQwMUVDQTkKKzoxMEI0RDAwMDA2MDAwMDMyMDAwMDAwMDAwMDAwMDA3ODA5QzU4NTMwMzkKKzoxMEI0RTAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzRjgKKzoxMEI0RjAwMDA2MDEwMDgwOTJCQTk3QkMwMDAwN0YwODEyMDEwMDY4MjQKKzoxMEI1MDAwMDAyQzU4NUIwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDQKKzoxMEI1MTAwMDAwMDA3RDA4ODAwMTAwODBGMjgxMkZCNjAwMDA3RDA4QzgKKzoxMEI1MjAwMDgwMDAwMDgwRTI4MTJGQjYwMDAwMTkwRjgwMDAwMDgwQUIKKzoxMEI1MzAwMDAyODEyRkI2MDAwMDE2MTMxRDAxMDA4MDAyMDAwMEIwMkEKKzoxMEI1NDAwMDAwMDAxNjEzMDQ1ODAxODAwMkMwNkVCQzAwMDA3RDA4ODQKKzoxMEI1NTAwMDA4NTkwMUVDMDZGQjZFQkMwMDAwMDAwMDAwMDAwMEQ4OUEKKzoxMEI1NjAwMDAyODAwMTMyMDAwMDAwMDA1NDU0MDFGQzAyQzA2RTMyMUYKKzoxMEI1NzAwMDAwQzAyMjBGMTgwMTAwMENBOENEM0VCMjAwMDAwMDAwNTAKKzoxMEI1ODAwMDAwNTgwMUVDMDZGQjZFM0EyMDgwMDAwMDAwMDAwMDA4MjUKKzoxMEI1OTAwMDA4ODAzNjMyMDAwMEVGMDMxMjAxMDAyQzcyRTAyRUIyNTgKKzoxMEI1QTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA1RDEyRjEKKzoxMEI1QjAwMDAwMDAwMEY4RTI4MTJGRjQwMDAwMjUwRjA2MDMwMTgwNEYKKzoxMEI1QzAwMDEyQzA2RUJDMTkwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMEMKKzoxMEI1RDAwMDFBMDA2ODA2MDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzQ0UKKzoxMEI1RTAwMDgwMDEwMDgwRjI4MTJGQjYwMDAwMTYxMzgwMDEwMDgwRDgKKzoxMEI1RjAwMEUyODEyRkI2MDAwMDE2MTMwNDU1MDE4MEIyREIyRkJDODgKKzoxMEI2MDAwMDAwQzAwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwRjMKKzoxMEI2MTAwMDAwMDAwMEQ4MDI4MDAxMzIwMDIwMDBDMDAwMDAwMDI4OTUKKzoxMEI2MjAwMDA5MDAzNzMyMDAwMDAwMDAwMDMwMDAyODA4MDA2RTMyQTgKKzoxMEI2MzAwMDAwMDAwMDAwNDUzMDAwRTAwNjAwMDAzMjAwMDA2MjEyMDkKKzoxMEI2NDAwMDAwMDAwMDA4RTgwMTAwRjQwMDAwMzQwRjA0MDIwMUVDREYKKzoxMEI2NTAwMDE2QzA2RUJDMDAwMDAwMDBDOTAxMDAxNDE4NDA4MTNBRjkKKzoxMEI2NjAwMDAwMDAwMDAwMDAwMDAwRjgwMjgwMkYzNDAwQzAzNDBGRkEKKzoxMEI2NzAwMDEyMDEwMDQwQTI4RDM5QjIwMDAwMTYxMzAwMDAwMDgwQjQKKzoxMEI2ODAwMDAyMDAwMDkwMTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5OUYKKzoxMEI2OTAwMDAwMDAzNDBGOUYwMTAwMTQxODQwODFCQzAwMDA3RjA4OTcKKzoxMEI2QTAwMDgwMDEwMDgwOTI4MDJGQjYyQjAwN0YwODEyMDEwMDJDQjEKKzoxMEI2QjAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMEI2QzAwMDAwMDAxNjEzMUYwMTAwRDgwMjgwMDFCMjAwMDAwMDAwMjQKKzoxMEI2RDAwMDAwNTQwMUZDMDJDMDZFMzIwMEMwNDQwRjE4MDEwMDBDN0YKKzoxMEI2RTAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAyODA5ODAzNjMyM0MKKzoxMEI2RjAwMDAwMDA4MTExMDAwMDAwRDgwMjAwMDBEMjAwMDA0MTBGQkMKKzoxMEI3MDAwMDA0MDAwMDgwMDI4MDkyQkMxODAwMDAwMDAwMDAwMEY4RDUKKzoxMEI3MTAwMDczMEEwMzM5NDIwRjM2MDAwMDAwMDBDMDAyMDAzNjkyNUYKKzoxMEI3MjAwMDE4MDAzNjAwMDAwMDAwRjg3MzhBMDNGOTAwMDAwMDAwREEKKzoxMEI3MzAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwNDEwRjE4MDAwMDBDNDgKKzoxMEI3NDAwMEE4Q0QzRUIyMDAwMDVEMTIwMDAwMDBEODAyNDAwMEYyMTkKKzoxMEI3NTAwMDAwRjA0QzBGMUQ0MDAyMDBBODBENjhCMTAwMDAxNjEzNDgKKzoxMEI3NjAwMDBCMDAwMDgwMDIwMDAwQjAwMDAwMTYxMzFFNDAwMjg0OEYKKzoxMEI3NzAwMDA2MDAwMEIyMDAwMDRBMEYxMjAwMDAyODAyMDU4MEIwNDcKKzoxMEI3ODAwMDA4MDA0NTBGMDAwMDAwRjgyMzQwMDE5OTAwMDA0NTBGMTQKKzoxMEI3OTAwMDEyMDEwMDY4MDIwNTgwQjAwMDAwMTYxMzAwMDAwMDgwNEUKKzoxMEI3QTAwMDAyMDAwMDkwMDAwMDRDMEZCNTAwMDA4MDAyMDAwMEIwQzUKKzoxMEI3QjAwMDAwMDAwMDAwQTUwMDgwQTAzNjBCNkEzNTAwMDAwMDAwRTQKKzoxMEI3QzAwMDAwMDAwMDUwMDlDMDI5MzIwMDAwMDAwMDAwNTYwMTI4ODYKKzoxMEI3RDAwMDA4QzA2RTMyMDAwMDAwMDAwMDAwMDA3ODM5MEIyRTMyRTUKKzoxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMjBGMzgxOTczNDAwMDA1NjBGOTUKKzoxMEI3RjAwMDA0MDAwMDc4RDkwMTMwQjYwMDAwMTYxMzA0MDEwMDgwNUYKKzoxMEI4MDAwMDMyODA5N0JDMDAwMDAwMDAwMDAwMDAwMEI5MDUzMDMwMTUKKzoxMEI4MTAwMDE4MDAwMDAwMDAwMDAwRjgwM0E0MDMzOTAwMDAwMDAwMzUKKzoxMEI4MjAwMDAwMDAwMDM0MzMwQjJGMzIwMDAwNkYwRjA0MDAwMDc4NEIKKzoxMEI4MzAwMEQ5MDEzMEI2MDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDOTUKKzoxMEI4NDAwMDAwMDAwMDAwMDAwMDAwNzhCOTA1MzAzMDAwMDA1RDBGRjYKKzoxMEI4NTAwMDA0MDAwMDgwNDJFNTI5QkMwMDAwMDAwMDAwMDAwMEY4NjAKKzoxMEI4NjAwMDAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGODczOEEwMjM5NUMKKzoxMEI4NzAwMDAwMDAwMDAwMDAwMDAwOUMwMjgwOTczMjBBMDAwMDAwRDcKKzoxMEI4ODAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0OTEKKzoxMEI4OTAwMDA5QzAyOUQyMDAwMDY5MEYyNTAxMDAwODA4MDAwMEIyODQKKzoxMEI4QTAwMDAwMDAxNjEzODAwMDAwODBGMjAxODBCNjAwMDAwMDAwNDYKKzoxMEI4QjAwMDAwMDAwMDJDMDkwNTgwMzAwMDAwMTYxMzAyMDEwMDgwRjIKKzoxMEI4QzAwMDgyRkE5MkJDMDAwMDE2MTMwNjAxMDA4MDkyRkE5MkJDMjQKKzoxMEI4RDAwMDAwMDA2NzBGMTIwMDAwMjgwMjA1ODBCMDA4MDA2OTBGMDEKKzoxMEI4RTAwMDAwMDAwMEY4MjM0MDAxOTkwMDAwNjkwRjEyMDEwMDY4NzAKKzoxMEI4RjAwMDAyMDU4MEIwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwRDYKKzoxMEI5MDAwMDAwMDA2RDBGMDQwMDAwODAwMjQwMkZCQzAwMDAwMDAwMEEKKzoxMEI5MTAwMDAwMDAwMDc4MDkwMDJDMzIyMTAzMTYxMzA0MDAwMDgwNzcKKzoxMEI5MjAwMDgyOEQ5N0JDOTYwMzE2MTMwNDAwMDA4MDgyOEQ5N0JDMEQKKzoxMEI5MzAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDA1NjBGNzIKKzoxMEI5NDAwMDAwMDAwMEY0MDIwMDAwOTIwMDAwNzMwRjA0MDAwMDgwNjkKKzoxMEI5NTAwMDQyRTUyOUJDMDAwMDAwMDAwMDAwMDBGODAyMDAwMDMyQUYKKzoxMEI5NjAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDIzOTAwMDAwMDAwOEYKKzoxMEI5NzAwMDAwMDAwMDlDMDIwMDk1MzIwMDAwMDAwMENBMDEwMEQ4QkYKKzoxMEI5ODAwMDAyODAwMTMyMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyQUQKKzoxMEI5OTAwMDAwMTAwMEEwMDAzODAwMDAwNzAwMzczMjAwMDAwMDAwNEYKKzoxMEI5QTAwMDAwMjAwMDAwMDcwMEVFMzIwMDAwMDAwMDAwMzgwMDBDMEMKKzoxMEI5QjAwMDA3ODA4MjMyMDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyRDUKKzoxMEI5QzAwMDAwMDBGNjAzMDAwMDAwMDhFODAxMDA5NDAwMDA5MzBGNTcKKzoxMEI5RDAwMDAyMDAwMDgwQTI0MjgwQkMwMDAwOTMwRjgwMDAwMDgwMjMKKzoxMEI5RTAwMEYyQzE4NUI2MDAwMDkzMEYxRjQwMDIwOEI5QkY2OEIwQ0UKKzoxMEI5RjAwMDAwMDA4MzBGODA0MTAyODBFMjgxNjhCNjA4MDAwMDAwRTkKKzoxMEJBMDAwMDAwMDAwMDEwNzk2MTgwMzkwMDAwMTYxMzlGMjAwMUUwQ0EKKzoxMEJBMTAwMDE2MjA2RUJBMDAwMDAwMDAwMDAwMDBGODIyODEyRjM0Q0EKKzoxMEJBMjAwMDE4MDAwMDAwMDA0MDAyODhFNjIxOTEzOTAwMDAwMDAwNjMKKzoxMEJBMzAwMDAwMDEwMDVDMDgwMDAwNzIwMDAwMDAwMDAwMDAwMDBDMjMKKzoxMEJBNDAwMDE5QTA5MDNBMDAwMDkzMEYwNjAxMDA4MEQyRkY5MEJDMkQKKzoxMEJBNTAwMDAwMDA4NzBGMkM0MTAyNzhGOTgxNjhCNDAwMDAwMDAwRDMKKzoxMEJBNjAwMDAwMDAwMDc4Qjk4MTk3MzQwMTAwMDAwMDAwMDAwMDEwNDgKKzoxMEJBNzAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDU5QzA4NUQ3M0EKKzoxMEJBODAwMDAzMDAwMDAwMDA0MDAyMDAyOTFBRkYzODAwMDAwMDAwRjcKKzoxMEJBOTAwMDAwMzgwMjAwQjkxQjkwM0EwMDAwMDAwMEQyNDEwMjg4MzEKKzoxMEJBQTAwMDE2QTA5NzNBMDAwMDAwMDA0NTAwMDBEODAyNDAwMDMyN0UKKzoxMEJBQjAwMDAwMDAxNjEzOUYyMDAxRTAxNjIwNkVCQTAwMDAwMDAwNUYKKzoxMEJBQzAwMDAwMDAwMDAwMDc0MDgwMzIwMDAwMDAwMDAwMDgwMDAwNzUKKzoxMEJBRDAwMDI3MjQ5MDNBMDAwMDAwMDAwMDEwMDAwMDA3MDA4QTMyN0UKKzoxMEJBRTAwMDAwMDAwMDAwMTIwMTAwNThGMkMxMzg3NDAwMDAxNjEzNjMKKzoxMEJBRjAwMDAwMDAwMDgwMDIwMDAwOTAwODAwQTIwRjFBMDAwMDM0MkQKKzoxMEJCMDAwMDc5NjE4MEI5MDAwMEFFMEYxRTAxMDA4MDAyMDAwMEIwMTQKKzoxMEJCMTAwMDAwMDBBRTBGMUY0MDAyMDAwOTQwNjhCMjAwMDA5NTBGMDAKKzoxMEJCMjAwMDgwMDAwMDgwRTIwMTkwQjYwMDAwMTYxMzM4MDAwMDU0MzcKKzoxMEJCMzAwMDFGNDBGNUJBMDAwMDAwMDAwMDAwMDAwOEI5M0Y5MDMwMzcKKzoxMEJCNDAwMDAwMDAwMDAwMDAyODAxRTAyNjI0NkUzQTA4MDAxNjEzQzkKKzoxMEJCNTAwMDFFMDAwMDAwMDlBNEZFQjgzRDAwMDAwMDAwMDAwMDEwMTcKKzoxMEJCNjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5MDA5MEQyNTMKKzoxMEJCNzAwMDAwMDAwMDAwMDAwMDAwNzgwOTA1OTAzMDAwMDAxNjEzNTYKKzoxMEJCODAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwRjMKKzoxMEJCOTAwMDkyQkE5N0JDMDAwMEFFMEYxMjAxMDA2ODAyMDU5MEIwODcKKzoxMEJCQTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBBRTBGOUQKKzoxMEJCQjAwMDgwMDAwMDgwODI4MTJGQjYwMDAwQUMwRjFGNDEwMjAwODAKKzoxMEJCQzAwMDA5NDA2OEIyMDAwMDAwMDAwMDI4MDFFMDE2MjA2RTNBMkIKKzoxMEJCRDAwMDAwMDBBODBGODAwMTAwODBGMkMxODVCNjAwMDAwMDAwQkYKKzoxMEJCRTAwMDAwNDAwMjg0RTYwMTAwMzQwMDAwMDAwMDAwMDAwMDgwRjQKKzoxMEJCRjAwMDAyMDAwMDMwMDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyNzUKKzoxMEJDMDAwMDAwMDAxNjEzMzgwMDAwNTQxRjQwRjVCQTAwMDAxNjEzNDgKKzoxMEJDMTAwMDlGMjAwMUUwMTYyMDZFQkEwMDAwMDAwMDAwMDEwMDgwQTUKKzoxMEJDMjAwMDAyMDAwMDcwMDAwMEEzMEY4MDAwMDA4MEUyMDE5MEI2QzcKKzoxMEJDMzAwMDAwMDA5NzBGMDAwMDAwNTQxRjQwRjU5QTAwMDAwMDAwMUMKKzoxMEJDNDAwMDAwMDAwMDVDMDgwMDAwMzIwMDAwMTYxMzlGMjAwMUUwOTUKKzoxMEJDNTAwMDE2MjA2RUJBMDAwMDAwMDAwMDAwMDBGODIyODEyRjM0ODgKKzoxMEJDNjAwMDE4MDAwMDAwMUU0MTAyODRFNjYxOTM3OTAwMDAxNjEzNUIKKzoxMEJDNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRkZGRjAwMDAwMDgwMzQKKzoxMEJDODAwMDAyMDAwMDkwMDAwMEI5MEYxRDVEMDFFQzE2QzA2RUJDRjMKKzoxMEJDOTAwMDAwMDAwMDAwMEYwMTAwODAwMjAwMDA3MDAwMDAxNjEzNzkKKzoxMEJDQTAwMDA0NUQwMTgwMDJDMDZFQkMwMDAwMTYxMzgwMDAwMDgwOUQKKzoxMEJDQjAwMDQyODEyRkI2MDAwMDAwMDAwMDAxMDBGOEIyODAyRjc0MEUKKzoxMEJDQzAwMDAwMDAwMDAwMEYwMTAwODAwMjAwMDA3MDAwMDBCNzBGQUMKKzoxMEJDRDAwMDA0NUUwMUVDMTZDMDZFQkMwMDAwMDAwMDAwNUMwMUVDQ0MKKzoxMEJDRTAwMDA2NDAwMDMyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwRTkKKzoxMEJDRjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMzQKKzoxMEJEMDAwMDA0MjAwMTgwODJEQjkwN0MwMDAwMTYxMzA0MjAwMTgwNTcKKzoxMEJEMTAwMDAyMDA2RUJDMDAwMDE2MTMxRjAwMDA4MDAyMDAwMEIwN0QKKzoxMEJEMjAwMDAwMDAwMDAwMDIwQzAyODBBMkRCOTA3QzAwMDBDNDBGMjcKKzoxMEJEMzAwMDA2MjEwMTgwODIxQjkwQkMyNzAwQzUwRjAwMDAwMDAwNzcKKzoxMEJENDAwMDA5MDAzNjkyMjgwMDAwMDAwMDAwMDAwMDA5MDAzNjMyODkKKzoxMEJENTAwMDAwMDAwMDAwMDAwMDAwODgxMjAwMkMzQTAwMDBGRkZGRTUKKzoxMEJENjAwMDAwMDAwMDgwMDIwMDAwOTAwNjAwMDAwMDAwMDAwMDEwQUIKKzoxMEJENzAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5MDA5MkQyM0YKKzoxMEJEODAwMDAwMDAxNjEzMDQwMDAwODAwMjAwOTJCQzAwMDAwMDAwQjYKKzoxMEJEOTAwMDJGQTAwMTc4ODkxQjkyN0EwMDAwMDAwMDA2ODgwMTc4QTQKKzoxMEJEQTAwMDg5OUI5NzdDMDAwMDAwMDAwMDM0MDIwNDA5QzA2RTNEQUUKKzoxMEJEQjAwMDAwMDAwMDAwMDAwQzAyMDAxOUE0NkUzNzAwMDBEMjBGMzIKKzoxMEJEQzAwMDAyMDAwMDgwMDJBNDk3QkMwMDAwRDIwRjAyMDAwMDgwOTUKKzoxMEJERDAwMDAyMDAwMEIwMDEwMDAwMDAwMDAwMDA3ODg5OEQ5NzM3NTQKKzoxMEJERTAwMDAwMDAwMDAwMDIwMTAyODA4MjlCOTc3QzAwMDAwMDAwOUUKKzoxMEJERjAwMDAwMDEwMEY4RjI4MDJGNzQwMDAwRkZGRjAwMDAwMDgwQjcKKzoxMEJFMDAwMDAyMDAwMDkwMDAwMDAwMDBEQTVCMDFFQzA2NDBFRDMyMTkKKzoxMEJFMTAwMDJEMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyRTIKKzoxMEJFMjAwMDAwNUMwMTE0MDk4MDZFRDIwMDAwREEwRjA0MDEwMDgwNkEKKzoxMEJFMzAwMDAyNDA4NkJDMDAwMDAwMDAwMEEwMDFFMDE2MjA2RTNBMUYKKzoxMEJFNDAwMDAwMDBEQzBGMDBENDAxRUMwNjAwMDA5MjAwMDBBQjEyRjEKKzoxMEJFNTAwMDAwOTAwMTA4MDkwMDZFRjIwMDAwMDAwMDAwQTAwMUUwNUYKKzoxMEJFNjAwMDE2MjA2RTNBMDAwMERGMTIzMzAxMDBGODgyODAyRkI0RjIKKzoxMEJFNzAwMDAwMDBERjEyOUZGMDAxODA4MkRCODdCQzAwMDBERjEyMzAKKzoxMEJFODAwMDlGRjgwMTgwMjIyMTZFQkMwMDAwMDAwMDAwRTgwMUUwNjQKKzoxMEJFOTAwMDA2MDBFRTMyMDAwMDAwMDAwMEYwMDFFMDA2QzA4NzMyMkMKKzoxMEJFQTAwMDAwMDBERjEyMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGOTEKKzoxMEJFQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzA4MDAwMDgwQkYKKzoxMEJFQzAwMDAyODA5MUJDMTEwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTEKKzoxMEJFRDAwMDEwMDA4MDEyMDA1MDAxMTRBOTlCOTFEOTE1MDAwMDAwOTgKKzoxMEJFRTAwMDAwMDAwMDEwMDkwMDM2MzIxMDAwMDAwMDAwMjAwMTE0OEMKKzoxMEJFRjAwMDg5MEQ2RTM3MDAwMDgwMTIwMDMwMDExNDg5NUI5MUQyRTkKKzoxMEJGMDAwMDFBMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDQKKzoxMEJGMTAwMDAwMDAwMDE0MDlDMDJERDIwMDAwMTYxMzA2MjEwMTgwNzQKKzoxMEJGMjAwMDgyOUI5MUJDMDAwMDAwMDAwMEE4MDE3ODA5MDA2RTMyREQKKzoxMEJGMzAwMDAwMDAxNjEzMDYwMTAyODA4MjlCOTdCQzAwMDAwMTEwQ0UKKzoxMEJGNDAwMDA0MjEwMTMwNjkyNDZFQkMwMDAwMDAwMDAwNTAwMTAwOTMKKzoxMEJGNTAwMEE5OUI5MTNBMDAwMEY5MEYxRjQwMDIyNDA5NDA2OEIyRTIKKzoxMEJGNjAwMDAwMDBGMDBGODAwMDAwODBFMjQxOTJCNjAwMDAwMDAwNjcKKzoxMEJGNzAwMDAwMDAwMDA4Qjk3RjkyMzAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMEJGODAwMDI5MjQ5MDNDMDgwMDAwMDAwMDAwMDA3ODk5QTRGRTM4QTUKKzoxMEJGOTAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzM0QKKzoxMEJGQTAwMDA2MDEwMDgwOTJCQTk3QkMwODAwRjAwRjEyMDEwMDY4RTkKKzoxMEJGQjAwMDkyQTRGRUI4MDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNUEKKzoxMEJGQzAwMDAwMDAxNjEzMDQyOTAxODA4MjFCOTBCQzAwMDAwMDAwQjEKKzoxMEJGRDAwMDAwQTgwMUUwNjYyNDZFM0EwMDAwMTYxMzlGMjAwMUUwREQKKzoxMEJGRTAwMDA2MDA5M0IyMDAwMEZFMEY4MDAwMDA4MDgyODEyRkI2MTEKKzoxMEJGRjAwMDAwMDBGRjBGMDAyODAxRTAwNjAwMDA5MjAwMDAwMDAwOTIKKzoxMEMwMDAwMDAwMzAwMUUwMDYwMDAwMzIwMDAwMDAwMDAwNTAwMUU4QUUKKzoxMEMwMTAwMDA2MDAwMDMyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwRjUKKzoxMEMwMjAwMDAwMDAwNzEwMzg1MTAxMDBBOTlCOTFCQTAwMDAwNTEwQ0IKKzoxMEMwMzAwMDA0NDEwMjA4QjlGRjY4QjAwMDAwMTYxMzgwNDEwMjgwNzUKKzoxMEMwNDAwMEUyQzE2OEI2MDAwMDAyMTAwMDQwMDI4MDAyNDA2ODkyMUYKKzoxMEMwNTAwMDAwMDAxNDEwOUYzMTAxRTA2NjI0NkVCQzAwMDAxNDEwMzMKKzoxMEMwNjAwMDAwMzAwMUUwMDYwMDAwOTIwMDAwMTExMDA0MjgwMTA0RDUKKzoxMEMwNzAwMDA5MDA2RUIyMDAwMDE2MTMwNjUwMDE4MEEyNUI5MEJDNEUKKzoxMEMwODAwMDAwMDAwRjEwOUYwMTAwMDAxOTI0OTBCQzAwMDAwMDAwNjgKKzoxMEMwOTAwMDAwQTgwMUUwNjYyNDZFM0EwMDAwMDAwMDAwMjgwMUUwREMKKzoxMEMwQTAwMDA2MjQwMDNDMDAwMDAwMDAwMDUwMDFFODA2MDAwMDMyQjkKKzoxMEMwQjAwMDAwMDAxNjEzOUYyMDAxRTAwNjAwOTNCMjAwMDAwMDAwNkMKKzoxMEMwQzAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwMDAwMDAwMjgwMUUwNzQKKzoxMEMwRDAwMDA2MDAwMDMyMDAwMDFEMTAwNDAwMDA4MDAyMDA5MEJDMjkKKzoxMEMwRTAwMDAwMDAxNDEwMDQ0MTAyMDhCOUZGNjhCMDAwMDAxNjEzRTQKKzoxMEMwRjAwMDgwNDEwMjgwRTJDMTY4QjYwMDAwMTExMDAwNDAwMjgwNTkKKzoxMEMxMDAwMDAyNDA2ODkyMDAwMDE4MTAwMjAwMDA4MDIyMjQ5MEJDQjcKKzoxMEMxMTAwMDAwMDAxRDEwODA0MDAyODBGMkMxNjhCNjAwMDAwMDAwREYKKzoxMEMxMjAwMDAwNDAwMjhDQjZDMTY4MzUwMDAwMUQxMDAwMDAwMEY4MDgKKzoxMEMxMzAwMDIyODEyRjk0MDgwMDAwMDAwMDQwMDI3ODM5OUFGRTM4Q0UKKzoxMEMxNDAwMDAwMDAxNjEzMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzOEIKKzoxMEMxNTAwMDA2MDEwMDgwOTJCQTk3QkMwODAwMTYxMzEyNDAwMjY4Q0MKKzoxMEMxNjAwMDEyOUFGRUI4MDAwMDExMTAwNDAxMDAwMDI5MjQ5MEJDQUUKKzoxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMDgwOTAwMDAzMjEwMDAwMDAwNkMKKzoxMEMxODAwMDAwMDAwMDEwNzkwQjE2MzgwODAwMDAwMDAwMDAwMDBDQjkKKzoxMEMxOTAwMDc5MEIxNjM4MDAwMDE2MTMwNDAwMDA4MDQyRTQ5MEJDQUUKKzoxMEMxQTAwMDAwMDAwMDAwMDAwMDAwMDRBOTAwMkQzNzAwMDQwMTAwNzkKKzoxMEMxQjAwMDAwMDAwMDA0Qzk0RDkwM0EwMjAwMDAwMDAwMDAwMEE4RjEKKzoxMEMxQzAwMDgyMEQ5MTM3MDAwMDAwMDAwMDAwMDBBODEyQTQyQTNBNTYKKzoxMEMxRDAwMDAwMDAyODEwODA0MDAyODBFMjAxN0NCNjAwMDAxNjEzQTcKKzoxMEMxRTAwMDA0NDAwMjc4QjkzRjdDQjAwMDAwMDAwMDAwMDAwMDA4NjUKKzoxMEMxRjAwMEU5QTU5MDNBMDAwMDJBMTA5RjAxMDAxMDE5MDA5MUJDOTcKKzoxMEMyMDAwMDlGMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDAyMzEwREIKKzoxMEMyMTAwMDA0MDEwMDgwNDJFNDkwQkMwMDAwMDAwMDAwMDAwMDc4QUYKKzoxMEMyMjAwMEM5MjQ5MDNBMDAwMDE2MTMwNDAxMDA4MDIyQTQ5N0JDOTAKKzoxMEMyMzAwMDAwMDAwMDAwMDBBODAxRTA2NjI0NkUzQTAwMDAwMDAwNDMKKzoxMEMyNDAwMDAwNTAwMUU4MDYwMDkwMzIwMDAwMTYxMzlGMjAwMUUwMjQKKzoxMEMyNTAwMDA2MDA5M0IyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwQTAKKzoxMEMyNjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDE4MDAzNDEwNjIKKzoxMEMyNzAwMDFGNDEwMjc4ODhDRDY4QjYwMDAwMDAwMDAwMDAwMDg4RTkKKzoxMEMyODAwMDEyMDAyQzNBMDAwMDM3MTA4MDAxMDA4MDYyODA4N0I2Q0YKKzoxMEMyOTAwMDAwMDAxNjEzMDQ0MTAyODBCMkZGNjhCMDAwMDAzMjEwQTMKKzoxMEMyQTAwMDAwNDAwMjgwMDI0MDY4OTIwMzAwMTYxMzA0NDAwMjAwMUUKKzoxMEMyQjAwMDM4MUFGRkI4MDAwMDE2MTMxRjQwMDIwNEI4RkY2OEIwMTgKKzoxMEMyQzAwMDAwMDAwMDAwMDAzODAyMDBCODFCODAzQTJFMDAwMDAwNzkKKzoxMEMyRDAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MzcKKzoxMEMyRTAwMDA5MDA4MEQyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwMDAKKzoxMEMyRjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA0NTEwRDkKKzoxMEMzMDAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNDIxMDEyMDEwMDAwQzAKKzoxMEMzMTAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5QzIKKzoxMEMzMjAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwODQzMjFEMDA0NTEwQ0IKKzoxMEMzMzAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwM0YxMDlGMDEwMDgwOTQKKzoxMEMzNDAwMDE4MDA4OEJDMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNTYKKzoxMEMzNTAwMDAwMDAwMDAwMDA2MDAwNkMwODAwNkUzMjAwMDAwMDAwNjkKKzoxMEMzNjAwMENBNjgwMDRDMDgwMDZFMzIwMDAwMTYxMzA0NzAwMDE4RjIKKzoxMEMzNzAwMDA4MDA2RUIyMjAwMDAwMDAwMDAwMDAxMDA5MDAzNjMyRjQKKzoxMEMzODAwMDEwMDA4MDEyMDAwMDAwMTRBOTYwODFEOTAwMDAwMDAwOTQKKzoxMEMzOTAwMDA0MDAwMDgwQTJBMDgxN0MwMDAwMTYxMzBEMDEwMDgwMjMKKzoxMEMzQTAwMDAyMDAwMEIwMDAwMDRGMTA4MDAxMDA4MEUyODAyRkI2MzQKKzoxMEMzQjAwMDAwMDA0RjEwMUIwMDAwODAwMjAwMDBCMDAwMDAwMDAwRDEKKzoxMEMzQzAwMDA2MDAwMDgwNjJFMDgzN0MwMDAwMTYxMzlGMDAwMDE0Q0EKKzoxMEMzRDAwMDE4NDA4MUJDMDAwMDAwMDBDQTAxMDBGODAyODAyRjM1MUYKKzoxMEMzRTAwMDAwQTAwMDAwMTIwMTAwNDBBMjhEMzk3MjAwMDAxNjEzNTcKKzoxMEMzRjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRkZGRjAwMDAwMDgwQUQKKzoxMEM0MDAwMDAyMDAwMDkwMDAwMDAwMDAwMDA4MDFFNDA2QzAyRDMyODgKKzoxMEM0MTAwMEVFRkYwMDAwMDAxMDAxRTA4NjhEMkYzMTAwMDAwMDAwQ0IKKzoxMEM0MjAwMDAwMDAwMDFDQjNFNDM5MzIwMDAwNUIxMDA0MDAwMDc4MDcKKzoxMEM0MzAwMEQ5MDEzMEI2MDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDODkKKzoxMEM0NDAwMDAwMDAwMDAwMDAwMDAwNzhCOTA1MzAzMDE4MDAwMDAwM0UKKzoxMEM0NTAwMDAwMDAwMEY4RTNBNTAzMzkwMDAwMDAwMDAwMDAwMDM0RUMKKzoxMEM0NjAwMDMzMEIyRjMyMDAwMDAwMDAwNDAwMDA3OEQ5MDEzMDc2MzEKKzoxMEM0NzAwMDAwMDAxNjEzMDQwMTAwODAzMjgwOTdCQzAwMDAwMDAwMDkKKzoxMEM0ODAwMDAwMDAwMDc4QjkwNTMwMzAxODAwMDAwMDAwMDEwMEY4MDUKKzoxMEM0OTAwMEUzQTUwMzc5MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwODgKKzoxMEM0QTAwMDAwMDAxNjEzMDQwMTAwODAwMjAwMkRCQzAwMDAxNjEzQ0EKKzoxMEM0QjAwMDA0MDEwMDgwMDI4MDJEQkMwMDAwMDAwMDAwMDAwMENDQzAKKzoxMEM0QzAwMDAyMDAwMDMyMDAwMDY2MTAyMDAwMDEyQzA5QzA2RUIyOEMKKzoxMEM0RDAwMDAwMDA2NzEwMDAxNjg2Q0MwNkMwOTI5MjAwMDAwMDAwOTMKKzoxMEM0RTAwMDAwMTQ4NkNDMDZDMDkyMzIwMDAwMDAwMDEyMDEwMDQwMDkKKzoxMEM0RjAwMDYyOEU5MjUyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMkQKKzoxMEM1MDAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA2RDEwOUUKKzoxMEM1MTAwMDA0MDAwMDc4RDkwMTMwQjYwMDAwMTYxMzA0MDEwMDgwMzEKKzoxMEM1MjAwMDQyODA5N0JDNkQxMDM2MDAwMDAwMDBDMDAyMDAzNjkyQjkKKzoxMEM1MzAwMDYwMDAxNjEzMDQwMTAwODA4MjhEMkZCMTAwMDAwMDAwRkUKKzoxMEM1NDAwMDAwMDAwMDE0MDMwMDM4MzIwMDAwMDAwMDAwMDAwMEUwOEEKKzoxMEM1NTAwMDAyMDAzMDMyMDAwMEI5MTAwNDAwMDAyNEQ4MDEzMEI2QzcKKzoxMEM1NjAwMDcyMTAwMDAwMDAwMDAwODg4MjREODIzQTAwMDAxNjEzMEQKKzoxMEM1NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDAKKzoxMEM1ODAwMDAyMDAwMDkwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwREUKKzoxMEM1OTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDZEMTAzNjAwQUQKKzoxMEM1QTAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwOUUxMDAwMDAwMDgwRDMKKzoxMEM1QjAwMDAyMDAwMDkwMDAwMDdBMTAwMDAwMDAyMDQ4MDUzMDkwMzIKKzoxMEM1QzAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA4NjEwOUEKKzoxMEM1RDAwMDkyMTEwMUJDMDgwMDZFQjIwMDAwMDAwMDAwMDgwMURDRUUKKzoxMEM1RTAwMDAyNDA2RTMyMDAwMDdFMTAxRjExMDFFMDI2QzE4QkI1QTMKKzoxMEM1RjAwMDAwMDA4NjEwMUQwMDAwODAwMjAwMDBCMDAwMDAwMDAwNTYKKzoxMEM2MDAwMDAwMDAwMEQ4MDIwMDAwMzI4MDAyMDAwMDAwMDAwMDAwOUMKKzoxMEM2MTAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3MjYKKzoxMEM2MjAwMDIwMDUwMTAwMDAwODAwMDBDNzhEOTczQTBBMDAwMDAwQUQKKzoxMEM2MzAwMDAwMDAwMDc4ODkwRDgyMzcwMDAwMDAwMDAwMTAwMDAwMjMKKzoxMEM2NDAwMEE3QkE5NzNBMDAwMDAwMDAwMDE4MDAwMDA3QzBFQTMyQkQKKzoxMEM2NTAwMDAwMDAxNjEzMTIwMDAwNDgwMkMwMzhCMjAwMDA4QTEwMTEKKzoxMEM2NjAwMDgwMEUwMUJDMDhDMDZFQjIwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMEM2NzAwMDE5MEU4MjMyMDBFMDkyMTAxMjAxMDA0OEEyMEQ5MEIyMTEKKzoxMEM2ODAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNkYKKzoxMEM2OTAwMDAwMDAwMEQ4MDI0MDAwMzJCNDAwMDAwMDAwMDAwMDAwOUEKKzoxMEM2QTAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3OTYKKzoxMEM2QjAwMDAwMDQwMTAwMDAwODAwMDBDNzhEOTczQTAwMDAwMDAwNDgKKzoxMEM2QzAwMDAwMDAwMDc4OTkwMDgyMzcwMDAwMTYxMzAyMTAwMDAwNjUKKzoxMEM2RDAwMDg3QkY5N0JBMDAwMDAwMDAwMDE4MDAwMDA3NDBGRTMyMzQKKzoxMEM2RTAwMDAwMDAxNjEzMTIwMDAwNDhGMkMxMzhCNDE4MDAzNjAwREEKKzoxMEM2RjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMDA0QzUKKzoxMEM3MDAwMDg5NjAzODMyMUQwMDAwMDAwMDAwMDA3ODA5QTQxNzM4NDUKKzoxMEM3MTAwMDAwMDA5ODEwODAwMDAwODAwMkMwOEJCNjAwMDA5OTEwQzUKKzoxMEM3MjAwMDA0MDAwMDgwMzI4MDk3QkMwMDAwMTYxMzAwMDAwMDgwRDcKKzoxMEM3MzAwMDAyMDAwMDkwMDAwMDE2MTMwNDAxMDA4MDAyODA5N0JDRTQKKzoxMEM3NDAwMDAwMDAwMDAwMDAwMDAwMThGMzQxOTAzNDAwMDA5RTEwMkIKKzoxMEM3NTAwMDA0MDAwMDc4RDkwMTMwQjYwMDAwMTYxMzA0MDEwMDgwRUYKKzoxMEM3NjAwMDMyODA5N0JDMDAwMDAwMDAwMDAwMDAwMEI5MDUzMDMwQTYKKzoxMEM3NzAwMDE4MDAwMDAwMDAwMDAwRjgwM0E0MDMzOTAwMDAwMDAwQzYKKzoxMEM3ODAwMDAwMDAwMDAwMTlDRTJDMzIwMDYwMTYxMzEyMDAwMDQwODkKKzoxMEM3OTAwMEEyMEQ5MEIyMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyOUMKKzoxMEM3QTAwMDYwMDAwMDAwMDAwMDAwMDAwNzAwMzYzMjAwMDAwMDAwQkEKKzoxMEM3QjAwMDAwMDAwMEJDQTgwMDJEMzdBMDA3MDEwMDAwMDgwMDAwMDEKKzoxMEM3QzAwMEM3Q0Q4QjNBMEEwMDAwMDAwMDAwMDA3ODg5Q0QyQzM3RDUKKzoxMEM3RDAwMDgwMDIwMDAwMDAwMDAwNzg4OThEOTczQTAwMDAwMDAwNzgKKzoxMEM3RTAwMDAwMTAwMDAwQTdCQTk3M0EwMDAwMDAwMDAwMTgwMDAwRUYKKzoxMEM3RjAwMDA3QzBFQTMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0M0MKKzoxMEM4MDAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNjkKKzoxMEM4MTAwMDAwMDgwMURDMDI0MDZFMzIxRDAwMDAwMDAwMDAwMDc4QkMKKzoxMEM4MjAwMDA5QTQxNzM4MDAwMDE2MTMwNDAxMDA4MDAyODA5N0JDODkKKzoxMEM4MzAwMDAwMDAxNjEzODAxMDAxODAyMjAxNkVCNjBBMDBCMDEwQUQKKzoxMEM4NDAwMDFGMDEwMDc4ODlDRDJDQjcwMDAwQjcxMDFEMTAwMUY4MkEKKzoxMEM4NTAwMDAyMDA2RUIyODAwMjAwMDAwMDAwMDAwMDA3MDAzNjMyQzUKKzoxMEM4NjAwMDIwMDUwMTAwMDAwODAwMDBDN0NEOEIzQTAwMDAwMDAwNDEKKzoxMEM4NzAwMDAwMTAwMDAwQTdCQTk3M0EwMDAwMDAwMDAwMTgwMDAwNUUKKzoxMEM4ODAwMDA3QzBFQTMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0QUIKKzoxMEM4OTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwRDkKKzoxMEM4QTAwMDAwMTAwMUY4MDIwMDZFMzJFRUZGMTYxMzA0MDEwMDgwNDIKKzoxMEM4QjAwMDgyOEQyRkIwMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwOTcKKzoxMEM4QzAwMEVFRkYxNjEzMDQxMTAxODA4MjBENkVCMDAwMDAwMDAwMEYKKzoxMEM4RDAwMDAwMTAwMUY4MDIwMDZFMzIwMDAwMDAwMDAwMDkwMURDQzcKKzoxMEM4RTAwMDAyNDA2RTcyMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMTYKKzoxMEM4RjAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwMDAzMjBFMDAwMDAwRUYKKzoxMEM5MDAwMDAwMDAwMDA0ODk0RDBEMzYwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMEM5MTAwMDA3ODAwQjMyMDAwMDAwMDAwMDA4MDAwMDA3MDA5MDMyODIKKzoxMEM5MjAwMDAwMDAwMDAwMDAxMDAwMDAwNzAwMzYzMjAwMDBDMjEwQjYKKzoxMEM5MzAwMDEyMDAwMDRDRjJDMTM4QjQwMDAwMDAwMDAwMDAwMDgwN0EKKzoxMEM5NDAwMDAyMDAwMDMwMDAwMEMzMTAxMjAwMDA4MDAyQzAyMUIyQkIKKzoxMEM5NTAwMDAwMDAwMDAwMDAwMDAwMDBFOTAyOTAzQTAwMDBCRjEwNTMKKzoxMEM5NjAwMDA0MDEwMDA0MTk0MDkwQkMwMDAwMDAwMDAwMDEwMDgwOTgKKzoxMEM5NzAwMDAyMDAwMDUwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNTUKKzoxMEM5ODAwMDAwMDBEMjEwODAwMTAwODBBMjgwMkZCNjAwMDBDQzEwRTEKKzoxMEM5OTAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4QzEKKzoxMEM5QTAwMDczMEEwM0Y5MDAwMEQxMTAwNDAwMDA4MDAyODAyREJDM0UKKzoxMEM5QjAwMDAwMDAxNjEzMDQwMTAwODAyMjgwMkRCQzAwMDAxNjEzMTUKKzoxMEM5QzAwMDlGMDAwMDgwMTgwMDg4QkMwMDAwQ0MxMDEyMDEwMEU4MTUKKzoxMEM5RDAwMDAyQzAyMUIyMDAwMENCMTAwMDAwMDA4MDAyMDAwMDkwRDUKKzoxMEM5RTAwMDAwMDAwMDAwQ0EwMDAwRDgwMjQwODQzMjAwMDAxNjEzODQKKzoxMEM5RjAwMDA0MDEwMDgwMDI0MDJEQkMwMDAwMTYxMzA0MDAwMDgwREEKKzoxMENBMDAwMDAyODAyREJDMDAwMDAwMDAwMDQwMDA2Qzg4MUM4MzNBQUUKKzoxMENBMTAwMDAwMDAwMDAwMDA0ODAwNEMwODAwNzIzMjAwMDAxNjEzQUQKKzoxMENBMjAwMDA4NTAwMDE4QzgyMDcyQkMwMDAwMDAwMDA0MDAwMDgwRkMKKzoxMENBMzAwMDAyNDA4MTdDMDAwMDAwMDAwMDAwMDAxNDE4NDA4MTNDOEUKKzoxMENBNDAwMDAwMDAxNjEzMDIwMDAwMjA4ODAxODJCQTAwMDAwMDAwRDYKKzoxMENBNTAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMENBNjAwMDA3MDAwNjMyMDAwMDE2MTMwNDAxMDA4MDAyMDAzNkJDRTUKKzoxMENBNzAwMDA3MDAwMDAwMDAwODAwMDA3NzRBMDkzOTAwMDAwMDAwQTQKKzoxMENBODAwMDAwMTAwMDAwMDcwMDgyMzIwMDAwMDAwMENBMTkwMDAwRjgKKzoxMENBOTAwMDA3NDA4MjMyMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0ODEKKzoxMENBQTAwMDAwMDAwMDAwMDAwMTAwRDgwMjQwODQ3MjAwMDBGRkZGNzcKKzoxMENBQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDREMDAwMDAwMTcKKzoxMENBQzAwMDY3RTA4MzNFMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyOUQKKzoxMENBRDAwMDAwMDAwMDAwMDAxMDAwMDAwN0MwODYzMjAwMDAwMDAwQzcKKzoxMENBRTAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwM0MxMTA0MDAwMDI4MzgKKzoxMENBRjAwMEQ4QTA4MkJDMDAwMDE2MTMwOTAxMDA4MDAyMDAwMEIwMUIKKzoxMENCMDAwMDAwMDAwMDAwMDAwMDAwMThEOEEwODEzQzAwMDBGRTEwQ0EKKzoxMENCMTAwMDA0MDAwMDNDRDhFMDgzQkMwMDAwMTYxMzA0MDEwMDgwMzAKKzoxMENCMjAwMDAyODA4MUJDMDAwMEVGMTAwNDAwMDA4MDcyODAyREJDRTgKKzoxMENCMzAwMDAwMDAxNjEzMTIwMDAwNTAwMkMwMzhCMjAwMDBGNzEwQjcKKzoxMENCNDAwMDUxMDAwMEQ4MTI4MDJEOUEwMDAwMTYxMzEyMDAwMDUwRDgKKzoxMENCNTAwMEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NzcKKzoxMENCNjAwMDAwMDBGNTEwMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzMzgKKzoxMENCNzAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwRjAxMDY3MDAwMEY4NEUKKzoxMENCODAwMEEyODAyRkI1MDAwMDE2MTMxMjAwMDBFODAyQzAyMUIyRTcKKzoxMENCOTAwMDAwMDAxNjEzMDQwMTAwODA3MjgwMkRCQzAwMDAwMDAwMEMKKzoxMENCQTAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwRkMxMDJBMDEwMDAwRjEKKzoxMENCQjAwMEQ4MjA4MEJBMDAwMEZCMTAxMjAxMDAwMDA5QzAyMUIyODkKKzoxMENCQzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwQTYKKzoxMENCRDAwMDAwMDAwMEQ4MDI0MDg0MzIxRDAwMTYxMzA0MDAwMDgwQkIKKzoxMENCRTAwMDAyQTQxN0I4MDAwMDQ2MTAwMDYwMDA2QzA4MDA2RUYyNDYKKzoxMENCRjAwMDAwMDBFNDEwNEQwMDAwMDA2N0UwODM5RTAwMDAxNjEzNjMKKzoxMENDMDAwMDEyMDAwMDUwRjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4REQKKzoxMENDMTAwMDczMEEwM0Y5MUQwMDA1MTEwNDAwMDA4MDAyQTQxN0I4NkYKKzoxMENDMjAwMDAwMDAxNjEzODAwMTAwODBBMjgwMkZCNjAwMDBGRjEwQzQKKzoxMENDMzAwMDY3MDAwMEY4QTI4MDJGQjUwMDAwMTYxMzEyMDAwMDAwNTQKKzoxMENDNDAwMDA5QzAyMUIyMUQwMDE2MTMwNDAxMDA4MDAyQTQxN0I4MDgKKzoxMENDNTAwMDA4MDAwMDAwMDA0MDAyNzgzOTlBRkUzODAwMDAxNjEzRTAKKzoxMENDNjAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwMDIKKzoxMENDNzAwMDkyQkE5N0JDMDgwMDE2MTMxMjQwMDI2ODEyOUFGRUI4QzYKKzoxMENDODAwMDAwMDAxNjEzMEIwMDAwODAwMjAwMDBCMDAwMDA2NDExQzkKKzoxMENDOTAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwMUIxMTFGMDAwMDZDODAKKzoxMENDQTAwMEQ4RTA4NkJBMDAwMDMyMTA1MTAwMDBEODAyMDAwMEYyMkQKKzoxMENDQjAwMDAwMDAwRjExMDAwMDAwM0MwODQwODA5MjAwMDAxQjExOTIKKzoxMENDQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTMxMTgwMDEwMDgwMkQKKzoxMENDRDAwMEYyODEyRkI2MDAwMDEzMTE4MDAwMDA4MEUyODAyRkI2OTEKKzoxMENDRTAwMDAwMDAxMzExODAwMTAwODAzMjgwODdCNjAwMDAwMDAwMzAKKzoxMENDRjAwMDAwMDAwMEY4RTI4MDJGMzQwMDAwRTMxMDA0MDEwMDgwRkYKKzoxMENEMDAwMDAyODA4MUJDMDAwMDE5MTE4MDAxMDA4MEEyODAyRkI2MzIKKzoxMENEMTAwMDAwMDAxODExMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwRUQKKzoxMENEMjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4QkEKKzoxMENEMzAwMDAyNDA4NDMyMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4QkMKKzoxMENENDAwMDAwMDA0NjEwMDA2MDAwNkMwODAwNkVGMjAwMDBFNDEwNjUKKzoxMENENTAwMDREMDAwMDAwNjdFMDgzOUUwMDAwMjAxMTgwMDEwMDgwRUMKKzoxMENENjAwMEUyODAyRkI2MDAwMDQwMTE4MDAxMDA4MEEyODAyRkI2MjMKKzoxMENENzAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTFEMDA0MDExQkMKKzoxMENEODAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwMTYxMzAwMDAwMDgwMDAKKzoxMENEOTAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBBNEE4NjA4QTNDOEYKKzoxMENEQTAwMDAwMDAxNjEzMDQyMTAxODA4MjVCOEFCQzAwMDAyNDExNUMKKzoxMENEQjAwMDJGQTgwMTIwOTkyMjZFQkEwMDAwQzcwRjAwMDAwMDgwNDIKKzoxMENEQzAwMDAyMDAwMEYwMDAwMDE2MTMwNjAxMDI4MDgyMUI5MkJDRDQKKzoxMENERDAwMDAwMDAwMDAwMDBBODAxRTAwNjAwOTIzMjAwMDAwMDAwMDAKKzoxMENERTAwMDAwNTAwMUU4MDYwMDAwMzIwMDAwMjkxMTIzMjEwMUUwNzMKKzoxMENERjAwMDA2MDAwMEIyM0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyQTcKKzoxMENFMDAwMDAwMDAxNjEzMDQzMDAwRTAwNjgwODJCMjAwMDAzMzExRTcKKzoxMENFMTAwMDA0MjEwMEUwMDY4MDgxQjIwMDAwMTYxMzgwMDAwMDgwMkIKKzoxMENFMjAwMEUyODAyRkI2MDAwMDMxMTE4MDAxMDA4MEEyODAyRkI2NzEKKzoxMENFMzAwMDAwMDAzMDExMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwQjQKKzoxMENFNDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4OTkKKzoxMENFNTAwMDAyNDA4NDMyMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4OUIKKzoxMENFNjAwMDAwMDA0NjEwMDA2MDAwNkMwODAwNkVGMjAwMDAwMDAwMzgKKzoxMENFNzAwMDAwMjAwMEUwMDY4MDgxMzIwMDAwMDAwMDAwM0MwMEU4NTUKKzoxMENFODAwMDA2NDA4MTMyMDAwMDAwMDAwMDEwMDBFMDA2QzA4NjMyM0IKKzoxMENFOTAwMDAwMDAwMDAwMDAxODAwRTAwNkMwODQzMjAwMDAxNjEzRjUKKzoxMENFQTAwMDA0MDAwMDgwMzJFMTg2QjIwMDAwMDAwMDJBMDEwMDgwMDgKKzoxMENFQjAwMDAyMDAwMDcwMDAwMDNBMTExMjAxMDAwMDA5QzAyMUIyMDYKKzoxMENFQzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDAxNjEzNUQKKzoxMENFRDAwMDA0MDAwMDgwMDJBNDE3QjgwMDAwMDAwMDAwMDEwMEY4NjAKKzoxMENFRTAwMEEyODAyRjc1MDAwMDAwMDAwMDAwMDAzQ0Q4RTA4MzNDQzkKKzoxMENFRjAwMDAwMDAxNjEzMTIwMDAwNTBGMkMxMzhCNDAwMDAxNjEzREYKKzoxMENGMDAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwMDAwMDAwMDAwMEY4MjIKKzoxMENGMTAwMEEyODAyRjM0MDAwMDAwMDAwMDAwMDA4ODEyMDAyQzNBOEMKKzoxMENGMjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRjEKKzoxMENGMzAwMDAwMDAwMDAwMDkwMDAwMzIwMDAwMDAwMDAwMDAwMDc4M0UKKzoxMENGNDAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDBBODAyMDAwMDMyQ0EKKzoxMENGNTAwMEVFMDU0ODExMDQwMTAwODA4MjBERjZCQzAwMDYwMDAwQjkKKzoxMENGNjAwMDAwMDAwMDA4MDkwMDM2MzIwMDAwNEExMTAwMDAwMDA0RTkKKzoxMENGNzAwMDA5QzAwOTkyMDAyODAwMDAwMDAwMDAwODA5MDAzNjMyQUMKKzoxMENGODAwMDAwMDAwMDAwMDAwMDAwMDQwOTgwMDkzMjFFMDAwMDAwQkIKKzoxMENGOTAwMDAwMDA2MEMwODdDRDAwMzcwMDAwMDAwMDAwMDg2MEMwQkUKKzoxMENGQTAwMDA3ODA5NzMyMDAzMDAwMDAwMDAwMDA3ODg5OEQyQTNBMEYKKzoxMENGQjAwMDAwMDAxNjEzMTIwMDAwNUM1MjgxOTdCNDAwMDAwMDAwQkMKKzoxMENGQzAwMDAwMDAwMDAwMjkyNDkwM0EwODAwMDAwMDAwMDAwMDc4Q0EKKzoxMENGRDAwMDg5MEQ5MDM2MDAwMDAwMDAwMDAwMDAwNDE5NDA5MDNDQ0MKKzoxMENGRTAwMDAwMDAwMDAwMDAwMDAwQTg1MjgyMkEzQTAwMDg0QTExRkUKKzoxMENGRjAwMDAyMDEwMDgwODI4RDJBQkMwMDAwNUIxMTA2MDAwMDgwQzcKKzoxMEQwMDAwMDAyNDA5MEJDMDAwMDE2MTMxMjAwMDBBODAyMDAyMEIyREIKKzoxMEQwMTAwMDFFMDAwMDAwMDAwMDAwQzA4N0NEMDAzNzAwMDAwMDAwQTcKKzoxMEQwMjAwMDAwMDgwMEMwMDc4MDk3MzIwMDAwMTYxMzEyMDAwMDVDNTEKKzoxMEQwMzAwMDUyODEyQUI0MDAwMDAwMDAwMDAwMDAwMDI5MjQ5MDNBMjgKKzoxMEQwNDAwMDA4MDAwMDAwMDAwMDAwNzg4OTBEOTAzNjAwMDA1NDExOUYKKzoxMEQwNTAwMDA0MDEwMDA0MTk0MDkwQkMwNTAwMDAwMDAwMDAwMDc4QTUKKzoxMEQwNjAwMDg5MEQ5MDM2MDAwMDAwMDAwMDAwMDBBMDBFODA5NzMyNkQKKzoxMEQwNzAwMDAwMDAxNjEzMTIwMDAwNjgwMjgwOTdCMjAwMDAwMDAwNDIKKzoxMEQwODAwMDAwMDAwMEE0MEU4MDk3MzIwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMEQwOTAwMDI5MjQ5MDNBMDAwMDAwMDAwMDAwMDA3ODU5MDA5MDM2RTIKKzoxMEQwQTAwMDAwMDA1RDExOTUwMTAwODAyMjI0OTBCQTAwMDAwMDAwNkMKKzoxMEQwQjAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwRkZGRjAwMDAwMDgwMUYKKzoxMEQwQzAwMDAyMDAwMDkwMDAwMDdFMTEwNDAxMDA3OEQ5MDEzMEI2MDIKKzoxMEQwRDAwMDAwMDAwMDAwMDAwMDAwMjgwOUMwMjkzMjAwMDAwMDAwMDQKKzoxMEQwRTAwMDAwMDAwMDlDQjI0NTI4MzAwMDAwNzAxMTg2MDEwMDA4NDUKKzoxMEQwRjAwMDA5ODAyRkIyMDAwMDAwMDAwMDAwMDAyQzA5NDA4MTMyOUUKKzoxMEQxMDAwMDAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjAwMDAwMDAwRjMKKzoxMEQxMTAwMDAwMDAwMEY0MDIwMDAwMzIxODAwMDAwMDAwMDAwMEY4RDcKKzoxMEQxMjAwMDczOEEwMjM5MDAwMDAwMDAwMDAwMDA5QzAyODA5MjMyRTUKKzoxMEQxMzAwMDAwMDA2RjExMDQwNzAxODAwMkMwNkVCQzAwMDA3OTExNkQKKzoxMEQxNDAwMEMzMDcwMUVDQjZFNDZFOUEwMDAwNzkxMTAwMDYwMUVDMDkKKzoxMEQxNTAwMEI2RTQ2RTlBMDAwMDE2MTM4MDAxMDA4MDUyODA5MEI2RUIKKzoxMEQxNjAwMDAwMDAwMDAwMDAwMDAwMkMwOTA1ODAzMDAwMDAwMDAwRDUKKzoxMEQxNzAwMDAwMDAwMEY4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMEY0OEYKKzoxMEQxODAwMDAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGODczOEEwMjM5MjMKKzoxMEQxOTAwMDAwMDAwMDAwMDAwMDAwOUMwMjgwOTIzMjAwMDAxNjEzODQKKzoxMEQxQTAwMDAyMDEwMDgwODJGQTkyQkMwMDAwMTYxMzA2MDEwMDgwODIKKzoxMEQxQjAwMDkyRkE5MkJDMDAwMEQ3MTEwMDAwMDA4MDAyMDAwMEQwNUIKKzoxMEQxQzAwMDIxMDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMkIKKzoxMEQxRDAwMDAwMDAwMDE0MDlDMDkyRDIwMDAwMDAwMDAwMDAwMDMwREUKKzoxMEQxRTAwMDAzMDAzODMyMDAwMDdFMTEwNDAxMDA3OEQ5MDEzMEI2MDYKKzoxMEQxRjAwMDAwMDA2NzExMDAwMDAwOUNCMjQ1Mjg5MDAwMDAwMDAwNkMKKzoxMEQyMDAwMDA0MDAwMDgwMjI4MDk3N0MwMDAwMTYxMzAwMDAwMDgwM0MKKzoxMEQyMTAwMDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNkMKKzoxMEQyMjAwMDAwMDAxNjEzMDQwMDAwODAwMkMwRThCQzAwMDAxNjEzQzIKKzoxMEQyMzAwMDAyMDAwMDgwMDJDMTJGQkMwMDAwMDAwMDAwMDAwMDg4MzYKKzoxMEQyNDAwMDAyQzBFODMyMDIwMDg0MTFCMDAwMDBBMEYyMEIwMEI5NjUKKzoxMEQyNTAwMDAwMDAwMDAwMDAwMDAwMENBQkU0QjAzMjAwMDA4OTExQjcKKzoxMEQyNjAwMDgwMDEwMDgwRjI0QkQwQjYwMDAwMDAwMEEwMDAwMDI4MzIKKzoxMEQyNzAwMDA5MDAwMDMyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDUwQTAKKzoxMEQyODAwMDAwMDA4QjExMDQwMTAwODAxMjNFRjhCQTAwMDA5NjExRDQKKzoxMEQyOTAwMEEwMDAwMDA0RkQ0QkQwOTQwMDAwOTIxMTgwMDEwMDgwOUEKKzoxMEQyQTAwMEQyODE5MkI2MDAwMDkyMTE4MDAxMDA4MDIyODFGQ0I2RUEKKzoxMEQyQjAwMDAwMDAwMDAwQTAwMDAwMDRGRDRCRDAzNDAwMDAwMDAwN0UKKzoxMEQyQzAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMDAwMDAwMDgwMzgKKzoxMEQyRDAwMEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA5NDAxQzAyRjMyNzIKKzoxMEQyRTAwMDAwMDA5NjExMDAwMDAwOTBGMTAxMDA5NDAwMDAwMDAwODEKKzoxMEQyRjAwMEEwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMDAwMDAwMDgwNjgKKzoxMEQzMDAwMEYxMDFGODM0MDAwMDAwMDAwMDAwMDA5MDAxNDBGODMyMDQKKzoxMEQzMTAwMDAwMDAwMDAwMDAwMTAwMjgwOTAwMDA1MjAwMDAxNjEzNjAKKzoxMEQzMjAwMDgwMDEwMDgwRjI0QkQwQjYwMDAwOUMxMTA0MDEwMDI4NUYKKzoxMEQzMzAwMDA5MzRCMEJBMDAwMDE2MTM4MDAxMDA4MEYyNEJEMEI2NTkKKzoxMEQzNDAwMDAwMDA5OTExQjAwMDAwODAwMjAwMDBCMDAwMDAwMDAwNTEKKzoxMEQzNTAwMEEwMDAwMDA0RkQ0QkQwMzUwMDAwMDAwMDAwMDEwMDI4QjMKKzoxMEQzNjAwMDA5MDAwMDUyMDAwMDlDMTFCMDAwMDBBODIyQzAyRkI3OTUKKzoxMEQzNzAwMDAwMDAxNjEzMDQwMDg0QzAzN0FDQjBCMjAwMDAwMDAwRjcKKzoxMEQzODAwMEEwMDAwMDBDMEIwMDAwMzJGRkZGMDAwMDAwMDAwMDc4M0UKKzoxMEQzOTAwMEE5NERCMDMwMDAwMEE0MTE4MDAwMDA4MDAyNDBCMEI2NUEKKzoxMEQzQTAwMDAwMDAxNjEzODAwMDAwODAxMjQwQjBCNjAwMDAwMDAwOUMKKzoxMEQzQjAwMDAwMDAwMDc4Njk4MTk3MzUwMDAwMDAwMDAwMDA4NDA4QjMKKzoxMEQzQzAwMDBCMDA3QzMyMDAwMDAwMDAwMDAwMDAwMEU3MjUwMTMyNjUKKzoxMEQzRDAwMDAwNDIwMDAwMDAwODAwMDA4NzhEMkEzQTAwMDAwMDAwOEIKKzoxMEQzRTAwMDAwMTAwMDAwMDcwMEIwMzIwMDAwMDAwMDAwMTgwMDAwMkMKKzoxMEQzRjAwMDA3MDBEMDMyMDAwMDAwMDAxMjAxMDA0OEYyQzEzODU0OEEKKzoxMEQ0MDAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBBQTExMjYKKzoxMEQ0MTAwMEIwMDAwMEEwMDIwMDAwQjIwMDAwMDAwMDAwMDAwMDBDRkMKKzoxMEQ0MjAwMEFCRTRCMDMyMDAwMEFGMTE4MDAxMDA4MDAyNDBEMEI2MDIKKzoxMEQ0MzAwMDAwMDAwMDAwQTAwMDAwMjgwOTAwMDAzMjAwMDAwMDAwRTkKKzoxMEQ0NDAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwQjExMTA0MDEwMDgwQzIKKzoxMEQ0NTAwMDEyM0VGOEJBMDAwMEMyMTFBMDAwMDAwNDBENDBEMDk0QTIKKzoxMEQ0NjAwMDAwMDBCQjExODAwMTAwODBEMjgxOTJCNjAwMDBCQjExODgKKzoxMEQ0NzAwMDgwMDEwMDgwMjI4MUZDQjYwMDAwMDAwMEEwMDAwMDA0QjIKKzoxMEQ0ODAwMDBENDBEMDM0MDAwMDAwMDAwMDAwMDA3ODA5QzAyRjMyQTkKKzoxMEQ0OTAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDAzMjAwMDAwMDAwNUMKKzoxMEQ0QTAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMDAwMDAwMDgwNTYKKzoxMEQ0QjAwMEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA5NDAxQzAyRjMyOTAKKzoxMEQ0QzAwMDAwMDAwMDAwMDAwMDAwOTBGMTAxMDAzNDAwMDBDMjExRDMKKzoxMEQ0RDAwMDAwMDAwMEZDMDI4MDk3OTIwMDAwMDAwMEEwMDAwMDc4OEQKKzoxMEQ0RTAwMDA5QzAyRjMyMDAwMDAwMDAwMDAwMDBGQzAyMDAwMDMyRTIKKzoxMEQ0RjAwMDAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMjAwMDAwMDAwODYKKzoxMEQ1MDAwMDAwMDAwMDgwRjEwMUY4MzQwMDAwMDAwMDAwMDAwMDkwRUQKKzoxMEQ1MTAwMDAxNDBGODMyMDAwMDAwMDAwMDAwMDBGQzAyODA5NzMyNTkKKzoxMEQ1MjAwMDAwMDAwMDAwMDAwMTAwMjgwOTAwMDA1MjAwMDAxNjEzNEUKKzoxMEQ1MzAwMDgwMDEwMDgwMDI0MEQwQjYwMDAwQzgxMTA0MDEwMDI4MUMKKzoxMEQ1NDAwMDA5MzRCMEJBMDAwMDE2MTM4MDAxMDA4MDAyNDBEMEI2NDIKKzoxMEQ1NTAwMDAwMDBDNTExQjAwMDAwODAwMjAwMDBCMDAwMDAwMDAwMTMKKzoxMEQ1NjAwMEEwMDAwMDA0MEQ0MEQwMzUwMDAwMDAwMDAwMDEwMDI4OUMKKzoxMEQ1NzAwMDA5MDAwMDUyMDAwMEM4MTFCMDAwMDBBODAyMDAwMEIyNkIKKzoxMEQ1ODAwMDAwMDAxNjEzMDQwMDg0QzAzN0FDQjBCMjAwMDAwMDAwRTUKKzoxMEQ1OTAwMEEwMDAwMDBDMEIwMDAwMzJGRkZGMDAwMDAwMDAwMDc4MkMKKzoxMEQ1QTAwMEE5NERCMDMwMDAwMEQwMTE4MDAwMDA4MDAyNDBCMEI2MUMKKzoxMEQ1QjAwMDAwMDAxNjEzODAwMDAwODAxMjQwQjBCNjAwMDAwMDAwOEEKKzoxMEQ1QzAwMDAwMDAwMDc4Njk4MTk3MzUwMDAwMDAwMDAwMDA4NDA4QTEKKzoxMEQ1RDAwMDBCMDA3QzMyMDAwMDAwMDAwMDAwMDAwMEU3MjUwMTMyNTMKKzoxMEQ1RTAwMDAwNDIwMDAwMDAwODAwMDA4NzhEMkEzQTAwMDAwMDAwNzkKKzoxMEQ1RjAwMDAwMTAwMDAwMDcwMEIwMzIwMDAwMDAwMDAwMTgwMDAwMUEKKzoxMEQ2MDAwMDA3MDBEMDMyMDAwMDAwMDAxMjAxMDA0OEYyQzEzODU0NzcKKzoxMEQ2MTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGRDEKKzoxMEQ2MjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDkxMTFDNDAwMjgwMjAKKzoxMEQ2MzAwMDA2QzA5MkIyNDQwMDAwMDAwMDAxMDBGOEEyOEQyRjUyRjMKKzoxMEQ2NDAwMDAwMDAwMDAwMDAwMDAwNzgwOUM1OTIzMDAwMDAxNjEzQTkKKzoxMEQ2NTAwMDAyMDEwMDgwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwMDgKKzoxMEQ2NjAwMDkyQkE5N0JDMDAwMDE2MTMxMjAwMDA2ODAyQzU5MkIwNkYKKzoxMEQ2NzAwMDAwMDAxNjEzMEIwMDAwODAwMjAwMDBCMDI0MDAwMDAwMjAKKzoxMEQ2ODAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0NzMKKzoxMEQ2OTAwMDA5QzA5MkQyMDAwMDAwMDAwMDAxMDA3MDFGMDBGNzVBN0MKKzoxMEQ2QTAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDJDMDAwMDAwM0UKKzoxMEQ2QjAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0NDMKKzoxMEQ2QzAwMDA5ODA5MkQyMDAwMDAwMDBENTA4MDAwMDA3ODA5MjMyNDUKKzoxMEQ2RDAwMDAwMDAwMDAwMDAzMDAwMDAwN0MwMkMzMjAwNDAwMDgwMzUKKzoxMEQ2RTAwMDAwMzgwMDAwMDcwMDM3MzIwMDAwMDAwMENBNDEwMUUwQTYKKzoxMEQ2RjAwMDA2ODA5MjMyMDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyNjkKKzoxMEQ3MDAwMDAwNjAwMDAwMDAwMTAwMDgwODgwMzY3MjAwMDBGRkZGODIKKzoxMEQ3MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzgwMDAwMDgwQ0UKKzoxMEQ3MjAwMEEyODAyRkI2MDAwMDE2MTMwNDAxMDA4MDYyODAyREJDNzkKKzoxMEQ3MzAwMDAwMDAwMDAwMDAzODAwMDAwNzgwOTIzMjAwMDAwMDAwNjYKKzoxMEQ3NDAwMDAwMzAwMDAwMDdDMDJDMzIwMDAwMDAwMENBM0QwMDBDNzEKKzoxMEQ3NTAwMDA3ODA4MzMyMDAwMDAwMDAxMjAxMDA0ODAyQzA4MDcyN0UKKzoxMEQ3NjAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGODAKKzoxMEQ3NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDA0NTcwMTgwQkIKKzoxMEQ3ODAwMDAyQzA2RTdDMDAwMDAwMDAwMDU3MDFFQzA2ODA5MjcyMUYKKzoxMEQ3OTAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA2NDExMDQKKzoxMEQ3QTAwMDAwMDAwMDMwMDMwMDM4RjIzMzAwMDAwMDAwMDAwMDEwRDkKKzoxMEQ3QjAwMDA5MDAzNjMyMTAwMDgwMTIwMDAwMDAxNDE5QTAyQ0Q5ODQKKzoxMEQ3QzAwMDAwMDBGQjExOUQxMTAyMEMwOTAwNkVCMjAwMDBGQzExNUIKKzoxMEQ3RDAwMDAwRjAwMTFDMDkwMDZFOTIwMDAwMDAwMDAwQjgwMTFDNUUKKzoxMEQ3RTAwMDA5MDA2RTMyMDAwMEZFMTEyQ0NEMDExODA5ODA2RUIyQzYKKzoxMEQ3RjAwMDAwMDAwMDAwMDAwMDAwMENDOUMxOTAzNDAwMDAwMjEyQkIKKzoxMEQ4MDAwMDNCMjkwMjA0MDk4MDZFQjIwMDAwMTYxMzgwRDYwMTgwMDUKKzoxMEQ4MTAwMDUyQzA2RUI2MDAwMDAwMDAwMEQ2MDFFQzU2QzA2RTM0NTcKKzoxMEQ4MjAwMDAwMDAwMDAwMDAwMDAwMENCOUMxOTAzNDAwMDAxMjEyOEEKKzoxMEQ4MzAwMDAwQTgwMTA4MDkwMDZFRjIwMDAwMDYxMjlEMDEwMDgwOTgKKzoxMEQ4NDAwMDE3RTA5MEJBMDAwMDAwMDAwMDMwMDA4MDA3QzA5MTMyNUQKKzoxMEQ4NTAwMDAwMDAwOTEyMDAzODAwODAwNzAwRUU5MjAwMDAwOTEyNTMKKzoxMEQ4NjAwMDA0MDEwMDgwMDJDMDkxQkMwMDAwMDAwMDAwQjgwMUUwOEIKKzoxMEQ4NzAwMDA2MDBFRTMyMDAwMDAwMDAwMDcwMDFFMDA2MDA4NjMyNzMKKzoxMEQ4ODAwMDAwMDAwQzEyMzkwODAwODAwN0MwODVCMjAwMDAxNjEzOTIKKzoxMEQ4OTAwMDgwMDAwMDgwQzI4MTJGQjYwMDAwMDAwMEQ5QzkwMUU4RDUKKzoxMEQ4QTAwMDA2ODA5MTMyMDAwMDAwMDBDODExMDA4MDA3NDA5MDMyQ0QKKzoxMEQ4QjAwMDAwMDAwRjEyM0IyMTAwODAwNzAwODZCMjAwMDAwMDAwMkMKKzoxMEQ4QzAwMERCMDAwMDYwMTgwMDg2M0EwMDAwMDAwMDU4NzgwMUUwOTQKKzoxMEQ4RDAwMDE2MjA4NjNBMDAwMDAwMDAwMDI5MDA4MDA3MDA4NTcyQUIKKzoxMEQ4RTAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEyMDAKKzoxMEQ4RjAwMDAyMEMwMjgwQTI5QjkwQkMwMDAwMDAwMDAwMDAwMjc4OTUKKzoxMEQ5MDAwMDI5MDA2RTM2MDAwMDE2MTIwMjAwMDA4MEUyQTU5MEJDQ0QKKzoxMEQ5MTAwMDAwMDAwMDAwMDAwMDAwMDgwOTAwMDAzMjAwMDAxODEyOUEKKzoxMEQ5MjAwMDlGODkwMTc4NDkyMTZFQkMwMDAwMDAwMDAwMDAwMDc4NEEKKzoxMEQ5MzAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDAwOEU5QTU5MDNGNDcKKzoxMEQ5NDAwMDAwMDAxRTEyMDQyMDAyMDg4OTlCOTBCRTAwMDAwMDAwMDcKKzoxMEQ5NTAwMDAwMEEwMjU4Qjg5QjkwMzYwMDAwMDAwMDAwMDAwMDc4RDIKKzoxMEQ5NjAwMDQ5QTE5MDNBMDAwMDAwMDA5Rjg4MDE4MDgyOUI5NzdDMkIKKzoxMEQ5NzAwMDAwMDAwMDAwMDA4OTAxRTAwNjgwOTc3MjAwMDAwMDAwQUUKKzoxMEQ5ODAwMDAwMEIwMjU4Qjg5QjkwNzYwMDAwRkZGRjAwMDAwMDgwNUIKKzoxMEQ5OTAwMDAyMDAwMDkwMDAwMDI3MTI4MDAxMDA4MEEyODAyRkI2QjQKKzoxMEQ5QTAwMDAwMDAyNTEyMTIwMTAwNzgwOUMwMjFCMjE4MDAzNjAwQ0IKKzoxMEQ5QjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMTYxMzA0MDEwMDgwNDgKKzoxMEQ5QzAwMDAyODAyREJDMDAwMDI3MTJDQTAwMDBEODAyNDA4NDkyQjkKKzoxMEQ5RDAwMDE1MDAxNjEzMDQwMTAwNzhFOTY1MTdCODAwMDAwMDAwNkYKKzoxMEQ5RTAwMDAwMDAwMEY4QTI4MDJGMzUwMDAwMTYxMzA0MDEwMDgwMEIKKzoxMEQ5RjAwMDAyNDAyREJDMDAwMDE2MTMwNDAwMDA4MDAyODAyREJDRTQKKzoxMERBMDAwMDAwMDAwMDAwMDA0MDAwNkM4ODFDODMzQTAwMDAwMDAwMDkKKzoxMERBMTAwMDAwNDgwMDRDMDgwMDcyMzIwMDAwMTYxMzA4NTAwMDE4MkQKKzoxMERBMjAwMEM4MjA3MkJDMDAwMDAwMDAwNjAwMDA4MDYyQTA4MjdDNUEKKzoxMERBMzAwMDAwMDAxNjEzOUYwMDAwMTQxODQwODFCQzAwMDAxNjEzNEMKKzoxMERBNDAwMDAyMDAwMDIwODgwMTgyQkEwMDAwMDAwMDAwMDAwMEQ4MTcKKzoxMERBNTAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3MDAwNjMyNTMKKzoxMERBNjAwMDAwMDAxNjEzMDQwMTAwODAwMjAwMzZCQzA3MDAwMDAwMEQKKzoxMERBNzAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMDAwMDAwMTAwMDAwOEIKKzoxMERBODAwMDA3MDA4MjMyMDAwMDAwMDBDQTE5MDAwMDA3NDA4MjMyRkQKKzoxMERBOTAwMDAwMDAxNjEzMTIwMDAwNDBGMkMxMzhCNDAwMDAwMDAwNkMKKzoxMERBQTAwMDAwMDEwMEQ4MDI0MDg0NzIwMDAwRkZGRjAwMDAwMDgwRTcKKzoxMERBQjAwMDAyMDAwMDkwMkIwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMjgKKzoxMERBQzAwMDAwMDA4MDEyMDAwMDAwMTQwOUMwODVEMjAwMDA0MjEyM0MKKzoxMERBRDAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwM0UxMjFGNDAwMjg0MjIKKzoxMERBRTAwMEU2MDEwMEI0MDAwMDQyMTIxRDAxMDBGODIyODEyRkI0QUIKKzoxMERBRjAwMDAwMDA0MjEyMDAwMDAwRjg2MjgxMkY5NTAwMDA0MDEyRTEKKzoxMERCMDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4Q0QKKzoxMERCMTAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyMjAKKzoxMERCMjAwMDAwMDAxNjEzMUYwMTAwODAwMjAwMDBCMDAwMDAxNjEzNTEKKzoxMERCMzAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwMDAwMDAwMDAwMDc4RjcKKzoxMERCNDAwMDA5QzU4NTMwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDMTcKKzoxMERCNTAwMDAwMDAxNjEzMDYwMTAwODA5MkJBOTdCQzAwMDAwMDAwNzYKKzoxMERCNjAwMDFEMDAwMDgwMDIwMDAwNzAwMTAwMDAwMDA0MDEwMDgwMjAKKzoxMERCNzAwMEEyOEQyRjcwMkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMTcKKzoxMERCODAwMDAwMDAwMDAwMDAwMTAwRjgwMjgxMkY3NDAwMDBGRkZGNzgKKzoxMERCOTAwMDAwMDAwMDgwMDIwMDAwOTA4MEE4MDAwMDA0MDAwMDgwQzcKKzoxMERCQTAwMDgyOEQyRjcwMDAwMDUyMTI4MDAxMDA4MEQyODAyRkI2MkIKKzoxMERCQjAwMDAwMDAxNjEzODAwMDAwODA3MjgxMkZCNjAwMDA1MjEyMDAKKzoxMERCQzAwMDA0QjAwMDgwMDIwMDZFQkMwMDAwMDAwMDAwMDAwMEY4RkQKKzoxMERCRDAwMDcyODEyRjM0M0QwMDU1MTIxMjAxMDAyQzgyQ0QyRUIyREQKKzoxMERCRTAwMDAwMDAxNjEzMDAwMDAwODAwMjAwMDA5MDAwMDA1NTEyOTMKKzoxMERCRjAwMDgwMDEwMDgwRjI4MDJGQjYzQzAwNTgxMjEyMDEwMDJDRTgKKzoxMERDMDAwMDgyQ0QyRUIyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwQUEKKzoxMERDMTAwMDAwMDA1ODEyODAwMTAwODBCMjgwMkZCNjM1MDAxNjEzMjQKKzoxMERDMjAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4OEYKKzoxMERDMzAwMDQyODEyRjM0ODAwMDAwMDAwNDAwMDA4MDgyOEQyRjcwMEMKKzoxMERDNDAwMDAyMDAwMDAwMDQwMTAwODBBMjhEMkY3MDNCMDAxNjEzMUIKKzoxMERDNTAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDEwMEY4NUUKKzoxMERDNjAwMDEyODEyRjc0MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNkUKKzoxMERDNzAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDAxNjEzNEIKKzoxMERDODAwMDA0MzEwMjgwQTJEQjJDQkMwODAwMDAwMDAwMTgwMUU4NkYKKzoxMERDOTAwMDc2MjA4MTM5RUVGRjAwMDAwMDAxMDBGODgyOEQyRjcxOUYKKzoxMERDQTAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA2NjEyRUMKKzoxMERDQjAwMDAwMDAwMTM4MDhDMDZFRjIwMDAwMDAwMDEyMDEwMDQ4QTgKKzoxMERDQzAwMDAyQzA4MDcyMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNjUKKzoxMERDRDAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDBFMDAwMDAwMjYKKzoxMERDRTAwMDAwMDAwMDEwMDkwMDM2MzIwMDAwODAxMjAwMzgwMTE0RDQKKzoxMERDRjAwMDA5MDA2RUQyMDAwMDZBMTIwNDM4MDE3ODA5MDA2RUIyODEKKzoxMEREMDAwMDAwMDAwMDAwMDAzODAxRTAwNjAwMDAzMjAwMDAxNjEzOTkKKzoxMEREMTAwMDgwMDAwMDgwQTI4MDJGQjYwMDAwMDAwMENBMTEwMDAwMjEKKzoxMEREMjAwMDA3ODA4MjMyMDAwMDZFMTIyRTE5MDAwMDA3ODA5N0IyMjEKKzoxMEREMzAwMDAwMDAwMDAwMDAwMDAwMjhFOTgxOTIzNDAwMDA3MzEyMDYKKzoxMERENDAwMDI3MzEwMDAwMDdDMDJDQjIwMDAwMDAwMEQ1MDgwMDAwRjkKKzoxMERENTAwMDA3MDA4NzMyMDAwMDAwMDBDNzAwMDAyOEU5ODA5MjM0RTUKKzoxMERENjAwMDAwMDAwMDAwMDA0MDAxRTAwNjAwODczMjAwMDAwMDAwRDMKKzoxMERENzAwMDAwMDAwMDA4RDg4MTgwMzQxMDAwMDAwMDAwMzkwMDAwNDUKKzoxMEREODAwMEU3QTA5Mjc5MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwRjEKKzoxMEREOTAwMDE0MDAwMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyNUMKKzoxMEREQTAwMDAwMDAwMDE0MDk0MDkwRDIwMDAwMTYxMzEyMDAwMDQ0MzUKKzoxMEREQjAwMDEyRTQzOEIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5QzQKKzoxMEREQzAwMDAwMDA3RDEyMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzQUIKKzoxMERERDAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNzgxMjY3MDAwMEY4NTIKKzoxMERERTAwMEEyODAyRkI1MDAwMDE2MTMxMjAwMDBFODAyQzAyMUIyNzUKKzoxMERERjAwMDAwMDAxNjEzMDQwMTAwODA3MjgwMkRCQzAwMDAwMDAwOUEKKzoxMERFMDAwMDAwMDEwMEQ4MDI0MDAwNzIwMDAwRkZGRjAwMDAwMDgwMDcKKzoxMERFMTAwMDAyMDAwMDkwMUIwMDAwMDAwMDAwMDAxMDc5MEE5MTM5RjgKKzoxMERFMjAwMDBGMDAwMDAwMDAwMDAwMTAzOTBCOTEzOTBDMDAwMDAwQjkKKzoxMERFMzAwMDAwMDAwMDEwNTkwQTkxMzkwOTAwODMxMkYxMDEwMDEwMDUKKzoxMERFNDAwMDY5MEI5MUI5MDMwMDAwMDAwMDI0ODZBODgyOEQ2QzM3MEQKKzoxMERFNTAwMDAwMDAwMDAwMDAwMDg4RTAwNzAwOTEzMjAwMDAwMDAwOTAKKzoxMERFNjAwMDAwMDA4OEUwMDc0MDkxMzIwMEMwODkxMjAyMDEwMDgwNjIKKzoxMERFNzAwMDgyOEQyQUJDMDAwMDhBMTJFMTI0ODZDODA2MDAwMDkyMjYKKzoxMERFODAwMDAzMDAwMDAwRTEyNDg2Qzg4NjhEMkEzNjAwMDAwMDAwQzkKKzoxMERFOTAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwRkZGRjAwMDAwMDgwMzEKKzoxMERFQTAwMDAyMDAwMDkwMDAwMDkyMTIwNDMwMDA4MDgyOUI4MUJDMkUKKzoxMERFQjAwMDAwMDAxNjEzMEQwMTAwODAwMjAwMDBCMDAwMDAxNjEzRDAKKzoxMERFQzAwMDlGM0MwMDE0Mjg4MDZFQkMwMDAwMTYxMzgwMDAwMDgwNjgKKzoxMERFRDAwMEEyODAyRkI2MDAwMDAwMDBDQTAxMDBGODAyODAyRjM1OTIKKzoxMERFRTAwMDAwQTAxNjEzMTIwMDAwNDBBMjhEMzlCMjAwMDA5NDEyNTcKKzoxMERFRjAwMDgwMzkwMDgwRTI4MDZFQjYwMDAwMTYxMzgwMzgwMDgwMDIKKzoxMERGMDAwMEYyODA2RUI2MDBDMDE2MTMwNDAxMDA4MEEyOEQyRkIwRkYKKzoxMERGMTAwMDAwQzA5QTEyMDQzODAwNzg4OThENkVCMDEwMDA5QTEyRjEKKzoxMERGMjAwMDlGMDEwMEY4RTJBNTJGQjkwMDAwMTYxMzA0MDAwMDgwM0QKKzoxMERGMzAwMDAyQzBFRUJDMDAwMDAwMDAwMDU4MDFFQzA2QzBFRTMyNEEKKzoxMERGNDAwMDAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMDAwMDAwMDAwMUYKKzoxMERGNTAwMDA0MjgwMDE4MDkwMDZFNzIwMDAwRTMwRjAwMDAwMDgwMjIKKzoxMERGNjAwMDAyMDAwMEYwMDAwMEM3MEYwMEE4MDEyMDA5MDA2RTkyMTcKKzoxMERGNzAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDBBNzEyRDgKKzoxMERGODAwMDA0QjAwMDgwODI5QjgxQkMwMDAwMTYxMzBEMDEwMDgwNEMKKzoxMERGOTAwMDAyMDAwMEIwMDAwMDE2MTM5RkJDMDAxNDI4ODA2RUJDNjUKKzoxMERGQTAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjAwMDAxNjEzMTgKKzoxMERGQjAwMDgwQjgwMDgwODI4MDZFQjYwMDAwMDAwMDAwQjgwMEU4RTMKKzoxMERGQzAwMDg2ODA2RTM0MDAwMDAwMDBDQTAxMDBGODQyODAyRjM1QzAKKzoxMERGRDAwMDA4QTAwMDAwMTIwMTAwNDBBMkNEMzk3MjAwMDAxNjEzMDMKKzoxMERGRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMTYxMzgwQjgwMDgwM0UKKzoxMERGRjAwMDgyODA2RUI2MDAwMDAwMDAwMEI4MDBFODg2ODA2RTM0QjMKKzoxMEUwMDAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDAwMDBGRkZGMUYKKzoxMEUwMTAwMDAwMDAwMDgwMDIwMDAwOTAyODAwMDAwMDAwMDAwMDEwQjYKKzoxMEUwMjAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5ODA5MEQyRUUKKzoxMEUwMzAwMDAwMDBCMDEyMzNDRDAxQkMwODgwNkVCMjAwMDBFRTEyQjkKKzoxMEUwNDAwMDAwMDAwMDI4MjkyMkVFREMwMDAwQjUxMjAwMDAwMDgwNEMKKzoxMEUwNTAwMDAyMDAwMDkwMDAwMEI1MTIwNEI4MDEyODA5MDA2RUIyNTkKKzoxMEUwNjAwMDAwMDBCNTEyOUY3MTAxODBDMjIxNkVCQzAwMDAxNjEzMjIKKzoxMEUwNzAwMDlGMDAwMDI4QTkyNEVFQkMwMDAwRUUxMjAwMDAwMDI4M0EKKzoxMEUwODAwMDE5ODA5MkRGMDAwMDAwMDAwMDAwMDA4MDAyMDAwMDMwRDQKKzoxMEUwOTAwMDAwMDBDOTEyMDI4MTAxODA4MjlCOTBCQzAwMDAxNjEzMEYKKzoxMEUwQTAwMDA0MDAwMDgwMDI4MDkwQkNFRTA1QzExMjA2MEMwMjgwQzQKKzoxMEUwQjAwMDgyOEQ2RUJDMDA5MDRDMDAwMDAwMDA4NDAyMDAzNzMyNUMKKzoxMEUwQzAwMDAwMDBCQjEyQjgwMTAwODAwMjAwMDBCMDAwMDBCOTEyQ0QKKzoxMEUwRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMEM0NkEKKzoxMEUwRTAwMDAzODA5MDMyMDAwMDAwMDAwMEIwMDFFMDk2MjE2RTNDRjkKKzoxMEUwRjAwMDAwMDAwMDAwNjE5ODAxRTAwNjAwODczMjAwMDAwMDAwODcKKzoxMEUxMDAwMDAwRDQwMUVDMDYwMDAwMzIwMDAwMDAwMEE4MDAwMDc4RjYKKzoxMEUxMTAwMDQ5NDAzQzM3MDAwMENFMTIwMDAwMDAwOEU5QTU5MDlBNjMKKzoxMEUxMjAwMDYwODkyMDAwMDAwMDAwODQwMjAwMzczMjAwMDBDNDEyMjEKKzoxMEUxMzAwMEI4MDEwMDgwMDIwMDAwQjAwMDAwQzIxMjAwMDAwMDgwQTAKKzoxMEUxNDAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBDNDAzODA5MDMyMzQKKzoxMEUxNTAwMDAwMDAwMDAwMDBCMDAxRTA5NjIxNkUzQzAwMDAwMDAwQ0QKKzoxMEUxNjAwMDYxOTgwMUUwMDYwMDg3MzIwMDAwMDAwMDAwRDQwMUVDNTUKKzoxMEUxNzAwMDA2MDAwMDMyMDAwMENFMTJBODAwMDAwODE5OEY5MDlBMDUKKzoxMEUxODAwMDAwMDAwMDAwMDAwMDAwNzg5OUExODkzRTAwMDAwMDAwMTYKKzoxMEUxOTAwMDAwMDAwMDA4RTlBNTkwM0EwMDAwMDAwMDAwQjAwMUUwOEUKKzoxMEUxQTAwMDk2MjE2RTNDMDAwMDAwMDA2MTk4MDFFMDA2MDA4NzMyNzUKKzoxMEUxQjAwMDAwMDAwMDAwMDBENDAxRUMwNjAwMDAzMjAwMDBEMTEyODMKKzoxMEUxQzAwMDA2MDAwMDgwNzJBMjkwQkMwMEMwRkYzRjAwODAwMUUwMEEKKzoxMEUxRDAwMDA2MDAzNzMyMDAwMDAwMDAwMDAwMDAwODA5QzA4OTMyNDQKKzoxMEUxRTAwMDAwMDBENjEyMDQ3OTAxODA4MjFCODdCQzAwMDBENDEyODMKKzoxMEUxRjAwMDA0QjAwMDgwMDIwMDZFQkMwMDAwRDkxMkQ5OTAwMUUwOEEKKzoxMEUyMDAwMDA2ODA5MDkyMDAwMERDMTI4MDAwMDA4MDUyODEyRkI2QzAKKzoxMEUyMTAwMDAwMDBEQzEyRDU0MTAxRTAwNjAwODc5MjAwMDBEOTEyMEYKKzoxMEUyMjAwMDNDOTAwMUUwMDY4MDkwQjIwMDAwMTYxMzgwMDEwMDgwNEYKKzoxMEUyMzAwMDkyODEyRkI2MDAwMDAwMDAwMEM4MDFFODA2QzA4QjMyQjIKKzoxMEUyNDAwMDAwMDAwMDAwOTUwMTAwODAwMjgwMkY3MjAwMDBERDEyQTYKKzoxMEUyNTAwMDlGNDEwMTgwODIxQjg3QkMwMDAwMDAwMDAwMDEwMDgwRkMKKzoxMEUyNjAwMDAyMDAwMDcwMDAwMDAwMDBEOTkwMDFFMDA2ODA5MDMyQUEKKzoxMEUyNzAwMDAwMDAwMDAwMDAwMTAwRjg3MjgwMkY3NDAwMDBGRkZGMTIKKzoxMEUyODAwMDAwMDAwMDgwMDIwMDAwOTAyNzAwMDAwMDAwMDAwMDEwNDUKKzoxMEUyOTAwMDA5MDAzNjMyMDAwMDgwMTIwMDAwMDAxNDA5NDA4N0QyQzUKKzoxMEUyQTAwMDAwMDBFNzEyOUZEODAxODAyMjIxNkVCQzAwMDAwMDAwMTAKKzoxMEUyQjAwMDBCMDEwMDgwMDIwMDAwNzAwMDAwRTcxMjlGRTAwMTgwNjcKKzoxMEUyQzAwMEMyMjE2RUJDMDAwMDAwMDAwQjAxMDA4MDAyMDAwMDcwNDMKKzoxMEUyRDAwMDAwMDBFNzEyOUZCMDAxODBEMjIxNkVCQzAwMDAwMDAwNTgKKzoxMEUyRTAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwRTkxMjA2NjgwMTgwNTEKKzoxMEUyRjAwMDgyNUI4N0JDMDAwMDAwMDAwMDY4MDFFMDA2NDA4NzMyQjYKKzoxMEUzMDAwMDAwMDBFQjEyMzdCMDAxRTAwNjQwODdCMjAwMDAwMDAwQzkKKzoxMEUzMTAwMDAwMDAwMEY4RDI4MDJGMzQwMDAwMDAwMDAwRDgwMUUwOTcKKzoxMEUzMjAwMDA2ODA4NDMyMDAwMDAwMDAwMEUxMDFFMDA2MDA4NzcyRjAKKzoxMEUzMzAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzQTQKKzoxMEUzNDAwMDA4MDAwMDgwMDI4MDkyQkMwMDAwRkIxMjA0QzEwMTg0MUUKKzoxMEUzNTAwMDAyMDA2RUIyMDUwMDAwMDAwMEMwMDFFODg2OEQ5MjM3MTEKKzoxMEUzNjAwMDAzMDAwMDAwMDBDNDAxRTg4NjhEOTIzNzAwMDAwMDAwMjEKKzoxMEUzNzAwMDAwMDAwMDgwMDIwMDAwMzAwMzAwMDAwMDAwQzAwMTJDRkIKKzoxMEUzODAwMDg5OEQ2RTM2MDAwMDAwMDAwMEM0MDEyQ0E5REI5MjNBOTIKKzoxMEUzOTAwMDAwMDAwMDAwMDAwMDAwMkMyOUMwOTIzNjAwMDAwMDAwQTAKKzoxMEUzQTAwMDAwMDAwMDJDMTlGQjkyM0YwMDAwMDAwMDAwMDAwMDI4MzQKKzoxMEUzQjAwMDI5ODA5MjNBMDAwMDAwMDAwMDAwMDAyQ0E5RTQ5MjNGNUUKKzoxMEUzQzAwMDAwMDAwMDAwNkZDQzAxRTgyNkZCOTIzRTAwMDAwMDAwMzgKKzoxMEUzRDAwMDAwQjkwMUUwMDYwMDAwNTIwMDAwMDAwMDAwMDAwMDk0QjcKKzoxMEUzRTAwMDAyODA5MjMyMDAwMDAwMDAwMEMwMDFFMDA2NDAyODMyQTYKKzoxMEUzRjAwMDEwMDAwMDAwNkZDQzAxRTg4NkNEMkEzNjAwMDAwMDAwMzYKKzoxMEU0MDAwMDAwQjkwMUUwMDYwMDAwNTIwMDAwRkZGRjAwMDAwMDgwOUMKKzoxMEU0MTAwMDAyMDAwMDkwMDAwMDE2MTMwNEIwMDA4MDAyMDA2RUIyRUIKKzoxMEU0MjAwMDAwMDAwMDAwMDA5MDAxQkMwODAwNkUzMjAwMDAwMDAwRjcKKzoxMEU0MzAwMDAwQjAwMUJDODhEQjhCM0UwMDAwMDAwMDAwOTgwMUJDRUUKKzoxMEU0NDAwMDg4REI4QjNBMDAwMDBDMTM5RjAwMDBCQzg4RTE4QkJDN0EKKzoxMEU0NTAwMDAwMDAwQzEzMDQwQzAyNDBBOERCOEJCRTAwMDAwMDAwN0YKKzoxMEU0NjAwMDAwQjAwMDA0ODgxQjg0M0UwMDAwMDkxMzA0QjEwMDgwNDIKKzoxMEU0NzAwMDgyNUI4MEJDMDAwMDAwMDAwMDAxMDBGOEMyODAyRjc0QTUKKzoxMEU0ODAwMDAwMDAwMDAwMDQwQzAyODBBMjVCODA3QzAwMDAwQzEzRTIKKzoxMEU0OTAwMDA0NjgwMTc4MTkwMDZFQjYwMDAwMDAwMDAyMDAwMDgwRDgKKzoxMEU0QTAwMEUyNjU4MDdDMjkwMDAwMDAwMDAwMDAxMDA5MDAzNjMyN0YKKzoxMEU0QjAwMDAwMDA4MDEyMDAwMDAwMTQwOUMwOEJEMjAwMDAwMDAwOTAKKzoxMEU0QzAwMDAwMDAwMDg4MTIwMDJDM0EwMDAwRkZGRjAwMDAwMDgwQ0UKKzoxMEU0RDAwMDAyMDAwMDkwMDAwMDE2MTMwNDMxMDI4MEEyREIyQ0JDNjUKKzoxMEU0RTAwMDAwMDAxNjEzODAwMDAwODBBMjgwMkZCNjA4MDAwMDAwRjQKKzoxMEU0RjAwMDAwMUMwMUU4NzYyMDgxMzlFRUZGMDAwMDAwMDEwMEY4RTEKKzoxMEU1MDAwMDgyOEQyRjcxMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNEMKKzoxMEU1MTAwMDAwMDAxNjEzMDAwMDAwQjQwRjQwRkI5NDAwMDAwMDAwNDAKKzoxMEU1MjAwMDAwMDAwMDg4MEY0MDJCMzIwMDAwMDAwMDAwMDAwMDkwMjcKKzoxMEU1MzAwMDBGMDAyODMyMDAwMDAwMDAwMDAwMDA5NDBGMDAyOTMyNzQKKzoxMEU1NDAwMDEwMDAwMDAwMDAwMDAwQjg1RjQ2MTgzOUZGMDAwMDAwMEUKKzoxMEU1NTAwMDAwMDAwMDlDMEYwMDM2MzIwMDAwMDAwMDAwMDAwMDlDMEMKKzoxMEU1NjAwMDVGQ0FGOTM1MDAwMDAwMDAwMDAwMDA0NDAzQzBGOTMyMjIKKzoxMEU1NzAwMDAwMDAwMDAwMDAwMDAwRTQwMzAwMDAzMjQxMDAwMDEwMzEKKzoxMEU1ODAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0NUIKKzoxMEU1OTAwMDAzMDAwMDMyNDAwMDAwMTAwMDAwMDBFMDAzMDAzNzMyQUEKKzoxMEU1QTAwMDAwMDAyNTEzNjcwMDAwOTgwRjgwMkFCMjAwMDAwMDAwQzkKKzoxMEU1QjAwMDAwMDAwMEE4MDIwMDAwMzIwMDAwMjMxMzEyQzE4NkUwMTAKKzoxMEU1QzAwMDA3QzAyMUIyMDAwMDAwMDAwMEI4ODZDMDA2ODAyQTMyRDEKKzoxMEU1RDAwMDRDNDIwMDAwMDAwMDAwQTgwMjAwMzYzMjI3MTMzODE0MTUKKzoxMEU1RTAwMDAwMDAwMEIwMEYwMDM2OTIwMDAwMDAwMDAwMDAwMDlDMDgKKzoxMEU1RjAwMDAyMDAwMDMyMDAwMTI0MTQwMDAwMDBBQzBGMDAzNkQyRUIKKzoxMEU2MDAwMDAwMDAwMDAwMDAwMDAwQUMwRjgwMkEzMjAwMjAwMDAwNTMKKzoxMEU2MTAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwMDAwMDAwMDAwMDlDNEMKKzoxMEU2MjAwMDBGMDA3RTMyMDAwMDAwMDAwMDAwMDBBMDBGMDA3RTMyQ0MKKzoxMEU2MzAwMDAwMDAwMDAwMDAwMDAwQTQwRjAwN0UzMjAwMDAwMDAwNzcKKzoxMEU2NDAwMDAwMDAwMEE4MEYwMDdFMzIwMDAwMDAwMDAwMDAwMEE4QkIKKzoxMEU2NTAwMDAyQzBGQTMyMDAwMDAwMDAwMDAwMDBFMDA3QzBGOTMyRkEKKzoxMEU2NjAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwRkEzMjAwMDAwMDAwOTcKKzoxMEU2NzAwMDAwMDAwMEUwMDc0MEZBMzIwMDAwM0IxMzAwMDAwMEUwMTkKKzoxMEU2ODAwMDA3ODBGQUQyMDAwMDAwMDAwMDAwMDBFMDA3ODBGQjMyQTMKKzoxMEU2OTAwMDAxMDA2MjEzMDQwMTAwQjQ4RjRERkJCMDAyMDAwMDAwQzIKKzoxMEU2QTAwMDAwMDAwMEEwMDIwMDAwMzk0MDgwMDAwMDAwMDAwMDBDQzMKKzoxMEU2QjAwMEFCQ0RCMDMyMTAwMDAwMDAwMDAwMDAwQzVCQ0FCMDM5RDYKKzoxMEU2QzAwMDAwMDAwMDAwMDAwMDAwMEMyQkZFQjAzMjAwMDA2MTE0QkUKKzoxMEU2RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMEY4MzAKKzoxMEU2RTAwMDAzMDAwMTMyMDAwMDAwMDAwMDAxMDBFMDA3ODAzRjUyRkIKKzoxMEU2RjAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDIzOTAwMDAwMDAwRDIKKzoxMEU3MDAwMDAwMDAwMDQ0NTMwQTE2MzUwMDAwMDAwMDAwMDAwMDlDODEKKzoxMEU3MTAwMDBGODA5NjMyMDAwMDAwMDAwMDAwMDBBMDBGQzA5NjMyNkIKKzoxMEU3MjAwMDAwMDAwMDAwMDAwMDAwQTQwRjAwOTczMkEyNjAwMzAwNjgKKzoxMEU3MzAwMDAwMDAwMDU4MDMwMDM3MzI0ODEzMDAwMDAwMDAwMDVDNUUKKzoxMEU3NDAwMDAzMDAzNjMyMDAwMDAwMDAwMDAwMDA1MDgzMEQwMDM0NEEKKzoxMEU3NTAwMDAwMDAwMDAwMDAwMDAwNDg4MzBEMDAzNDAwMDAwMDAwQUQKKzoxMEU3NjAwMDAwMDAwMDQ0NTMwQTAwMzQwMDAwMzYwMDAwMDAwMDgwMUUKKzoxMEU3NzAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDA2ODA5QzBGOTMyQUIKKzoxMEU3ODAwMDAwMDAwMDAwMDAwMDAwNkMwOTAwRkEzMjAwMDAwMDAwRTgKKzoxMEU3OTAwMDAwMDAwMDcwMDk0MEZBMzIwMDAwNUExMzAwMDAwMDgwQTcKKzoxMEU3QTAwMDAyMDAwMDkwMDIwMDAwMDAwMDAwMDBBMEYyMEIwMDM5RkYKKzoxMEU3QjAwMDAwMDA0RjEzODAwMTAwODAxMjQwQjBCNjAwMDAwMDAwM0UKKzoxMEU3QzAwMDAwMDAwMDA0M0I0MEIwMzMwMDAwMDAwMDAwMDAwMDA0RTMKKzoxMEU3RDAwMEZENEJEMDM1MDAwMDUzMTMwMDAwMDAwQzBCMDA5NzkyNDYKKzoxMEU3RTAwMDAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOTAwMDA1MzEzRUIKKzoxMEU3RjAwMDAwMDAwMDA0NkIwMTk3OTQwMDAwNTMxMzEyMDAwMDY4OUUKKzoxMEU4MDAwMDA5NDAyMEIyMDAwMDU0MTMxMjAwMDA2QzA5NDAyMEIyRUQKKzoxMEU4MTAwMDBEMDAwMDAwMDAwMDAwRkNBMkU1MTYzODAwMDA1OTEzQUUKKzoxMEU4MjAwMDlGMDAwMDgwMDI4MDk2QjIwMDAwMDAwMDAwMDAwMDcwOEYKKzoxMEU4MzAwMDA5QzA5NjMyMDAwMDVBMTMwMDAwMDA2QzA5QzBGRDkyMTYKKzoxMEU4NDAwMDAwMDA1OTEzMTIwMDAwNzAwOTQwMjBCMjAwMDAwMDAwQkYKKzoxMEU4NTAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4MTAKKzoxMEU4NjAwMDAyMDAwMDMyMDIwMDUzMTMwNDAxMDBCQ0FGMjUxN0I4QTgKKzoxMEU4NzAwMDA2MDA1MTEzMDQwMDAwQkNBRjY1MTZCODAwMDA0QzEzMkQKKzoxMEU4ODAwMDA0MDAwMDgwMjJDMEZCQkMwMDAwNkExMzA0MDAwMDgwNkEKKzoxMEU4OTAwMDEyQzFGQkJDMjAwMDUzMTMwNDAxMDA4MDgyQ0RGQkJDREQKKzoxMEU4QTAwMDAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOTAwMDA2QjEzMTIKKzoxMEU4QjAwMDAwMDAwMDgwMDIwMDAwRDA2NDEzMDAwMDAwMDAwMDg4MDcKKzoxMEU4QzAwMDgyQ0RGOTNBMDAwMDVBMTQwMDAwMDA4MDAyMDAwMDkwNDYKKzoxMEU4RDAwMDAwMDA5MzEzMDAwMDAwODAwMjAwMDA5MDAwMDA5NDEzRDkKKzoxMEU4RTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTgxMzAwMDAwMDgwRUIKKzoxMEU4RjAwMDAyMDAwMDkwMDAwMEEwMTMwMDAwMDA4MDAyMDAwMDkwQzEKKzoxMEU5MDAwMDAwMDBGOTEzMDAwMDAwODAwMjAwMDA5MDAwMDA1MzEzODMKKzoxMEU5MTAwMDAwMDAwMERDMEYwMDk3OTIwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEU5MjAwMDA3MDAwMzMyNDA0MjAwMDAwMDAwMDBBODAyMDAzNjMyMTcKKzoxMEU5MzAwMDAwMDAwMDAwMDAwODAwMDAwNzgwMkEzMjAwMDAwMDAwRUMKKzoxMEU5NDAwMDAwMTAwMDAwMDcwMDk3MzIwMDAwMDAwMDAwMTgwMDAwQ0YKKzoxMEU5NTAwMDA3QzA5NjMyMDg4MDcwMTMxMjAwMDA0MDAyODAzNkIyNjEKKzoxMEU5NjAwMDAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMDAwMDA3MjEzNzAKKzoxMEU5NzAwMDEyMDAwMDlDMEZDMDIxQjIxRDAwNzUxMzA0MDAwMDgwMUUKKzoxMEU5ODAwMDcyQkUxN0I4MDAwMDcyMTMwMDAwMDBGODFFODBFRjlBRTQKKzoxMEU5OTAwMDEzMDAwMDAwMDAwMDAwOUM3RkJFMTczODAwMDA3ODEzQjEKKzoxMEU5QTAwMDA0MDAwMDgwMTJDMEY5QkMwMDAwNzIxMzAwMDAwMEY4REYKKzoxMEU5QjAwMDFFODBFRjlBMDAwMDAwMDAwMDAwMDA5QzBGMDA3RTMyRDUKKzoxMEU5QzAwMDAwMDAwMDAwMDAwMDAwQTAwRjAwN0UzMjAwMDAwMDAwRTgKKzoxMEU5RDAwMDAwMDAwMEE0MEYwMDdFMzIwMDAwMDAwMDAwMDEwMDAwRDMKKzoxMEU5RTAwMDA3MDBGQTUyMDAwMDAwMDAwMDAwMDA5QzAyMDAwMDMyMDQKKzoxMEU5RjAwMDRDNDIwMDAwMDAwMDAwQTgwMjAwMzYzMjAwMDAwMDAwNzcKKzoxMEVBMDAwMDAwMDgwMDAwMDc4MDJBMzIwMDAwNEUxNDAwMDAwMDgwMzkKKzoxMEVBMTAwMDAyMDAwMEQwMDAwMDUyMTQwMDAwMDA4MDAyMDAwMEQwNkMKKzoxMEVBMjAwMDAwMDAwMDAwMDAwMDAwMENDQkMxQjAzNDAwMDAwMDAwNkEKKzoxMEVBMzAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4MkUKKzoxMEVBNDAwMDAyMDAwMDMyMDAwMDgxMTEwMDAwMDAyODA5QzBCMEQyOEQKKzoxMEVBNTAwMDAwMDA4MjEzMDQwMDAwODAwMjgwOTJCMjAwMDA4NjEzM0UKKzoxMEVBNjAwMDEyMDAwMDlDMEZDMDIxQjIxRDAwODkxMzA0MDAwMDgwMTkKKzoxMEVBNzAwMDcyQkUxN0I4MDAwMDg2MTMwMDAwMDBGODFFODBFRjlBREYKKzoxMEVBODAwMDEzMDAwMDAwMDAwMDAwOUM3RkJFMTczODAwMDA4QzEzQUMKKzoxMEVBOTAwMDA0MDAwMDgwMTJDMEY5QkMwMDAwODYxMzAwMDAwMEY4REEKKzoxMEVBQTAwMDFFODBFRjlBMDIwMDhFMTMwNDAxMDBCNDhGNERGQkIwNUMKKzoxMEVBQjAwMDAwMDA1MzEzMDAwMDAwODAwMjAwMDA5MDA4MDAwMDAwRDYKKzoxMEVBQzAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwMDAwMDAwMDAwMEI0OEQKKzoxMEVBRDAwMDFGNDBGQjM1RkUwMDAwMDAwMDAwMDA0ODAzMDAzNjMyRjYKKzoxMEVBRTAwMDAwMDAwMDAwMDAwMDAwNDQwMzAwMDAzNDAwMDA4MjEzMTYKKzoxMEVBRjAwMDAwMDAwMDBDOEJDMUIwOTQwMDAwNUUxNDAwMDgwMDAwMDAKKzoxMEVCMDAwMDA3NDBGQTkyMDAwMDRFMTQwMDA4MDAwMDA3NDBGQUQyQjUKKzoxMEVCMTAwMDA4ODA5NTEzMTIwMDAwNTAwMjgwMzZCMjAwMDA1MzE0OTIKKzoxMEVCMjAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwNjAxNDAwMDAwMDgwOUYKKzoxMEVCMzAwMDAyMDAwMDkwMDAwODAwMDAwMDAwMDA5QzBGMDAzNjMyMjgKKzoxMEVCNDAwMDAwMDQwMTAwMDAwMDAwQTgwMjAwMzczMjAwMDAwMDAwQUQKKzoxMEVCNTAwMDAwMDAwMEEwMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEUwMDEKKzoxMEVCNjAwMDA3MDBCMDMyMDAwMDAwMDAwMDAwMDBBMDEyMDAyQTNBQTYKKzoxMEVCNzAwMDAwMDA5QjEzMDQwMTAwOUMxRkMwRjlCQzAwMDQwMTAwQUQKKzoxMEVCODAwMDAwMDAwMEE4MDIwMDM3MzIwMjAwNUQxNDAwMDAwMEEwNUYKKzoxMEVCOTAwMEYyMEIwMDk5MDAwMEE4MTMwNDAxMDA4MDAyNDBGQUIyQjEKKzoxMEVCQTAwMDAwMDQwMTAwMDAwMDAwQTgwMjAwMzczMjAwMDBBQTEzOTAKKzoxMEVCQjAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwQjcxMzAwMDAwMDg0QjUKKzoxMEVCQzAwMDAyMDAwMEQyMDAwMDAwMDAwMDAwMDBFMDA3QzAzQzMyNUMKKzoxMEVCRDAwMDAwMDBBNDEzOEUwMTAwODAwMjQwMjhCMjAwMDQwMTAwNEUKKzoxMEVCRTAwMDAwMDAwMEE0MEYwMDM3MzIwMDAwOTMxMzAwMDAwMDgwRTMKKzoxMEVCRjAwMDAyMDAwMDkwMDAwNDAxMDAwMDAwMDBBNENGNERGQTNBOEEKKzoxMEVDMDAwMDAwMDA5MzEzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNEMKKzoxMEVDMTAwMDAwMDAwMDlDMEYwMDAwMzIxMDAwMDAwMTAwMDAwMEFDNUEKKzoxMEVDMjAwMDBGMDAzNzMyMDAwMEJDMTMwMDAwMDA4MDAyMDAwMEQwNEIKKzoxMEVDMzAwMDA4MDBBQzEzMDQwMTAwODA4MkNERjlCQzAwMDAwMDAwODQKKzoxMEVDNDAwMDAwMDAwMDlDMEYwMDAwMzIwRTAwMDAwMTAwMDAwMEFDMkMKKzoxMEVDNTAwMDBGMDAzNzMyMDAwMEJDMTMwMDAwMDA4MDAyMDAwMEQwMUIKKzoxMEVDNjAwMDBCMDBCMDEzMDQwMTAwODA4MkNERjlCQzIwMDAwMDAwMkQKKzoxMEVDNzAwMDAwMDAwMDlDMEYwMDM2MzIwRjAwMDAwMTAwMDAwMEFDQzUKKzoxMEVDODAwMDBGMDAzNzMyMDAwMEJDMTMwMDAwMDA4MDAyMDAwMEQwRUIKKzoxMEVDOTAwMDI3MDBCNDEzMDQwMTAwODA4MkNERjlCQzAwMDAwMDAwRkQKKzoxMEVDQTAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwMDAwMDAwMDAwMDlDRjUKKzoxMEVDQjAwMDBGMDAwMDMyMEYwMDAwMDEwMDAwMDBBQzBGMDAzNzMyREYKKzoxMEVDQzAwMDAwMDBCQzEzMDAwMDAwODAwMjAwMDBEMDIwMDBCOTEzMzcKKzoxMEVDRDAwMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDAwMDEwMDgwMkEKKzoxMEVDRTAwMDAyMDAwMDUwMDAwMDAwMDAwMDAwMDBFNDAzQzBGOTMyMDAKKzoxMEVDRjAwMDBEMDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwQkEKKzoxMEVEMDAwMDAwMDAwMEUwMDNDMEZBMzIwMDAwMDAwMDAwMDAwMEUwNTQKKzoxMEVEMTAwMDA3NDAzRTMyMDAwMDAwMDAwMDAxMDA5QzFGQzBGOTVBNkQKKzoxMEVEMjAwMDAwMDAwMDAwMDAwMDAwRTAwM0MwRjkzMjAwMDAwMDAwMTUKKzoxMEVEMzAwMDAwMDAwMEUwMDc0MDNFMzIwMDAwMDAwMDAwMDAwMDlDQTAKKzoxMEVENDAwMDFGQzBGOTNBRkYwMDAwMDAwMDAxMDBBQzhGQ0RGOTUwNjAKKzoxMEVENTAwMDAwMDAwMDAwMDAwMDAwOUMwRkMwMkYzMjAwMDAwMDAwRTcKKzoxMEVENjAwMDAwMDAwMEZDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEUwOTMKKzoxMEVENzAwMDA3ODAzRTMyMDAwMDAwMDAwMDAwMDBGQzEyQzAyRjNBNjUKKzoxMEVEODAwMDBGMDBDNzEzMDQwMTAwODA4MkNEMkZCQzAwMDAwMDAwREIKKzoxMEVEOTAwMDAwMDAwMEUwMDc4MDNFMzIwMDAwMDAwMDAwMDEwMEZDOUYKKzoxMEVEQTAwMDAyQzBGOTUyMDAwMDAwMDAwMDAwMDBFMDA3MDAzQTMyMDMKKzoxMEVEQjAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwM0EzMjAwMDAwMDAwQzAKKzoxMEVEQzAwMDAwMDAwMEUwMDc4MDNBMzIwMDAwMDAwMDAwMDAwMEUwOTAKKzoxMEVERDAwMDA3QzAzQTMyMDAwMDAwMDAwMDAwMDA5QzBGQzAyRjMyMzQKKzoxMEVERTAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDAzMjAwMDAwMDAwRjMKKzoxMEVERjAwMDAwMDAwMEUwMDcwMDNEMzIwMDAwMDAwMDAwMDAwMEUwREQKKzoxMEVFMDAwMDA3NDAzRDMyMDAwMEQyMTM4MzAxMDBGQzEyQzAyRkJBMkMKKzoxMEVFMTAwMDAwMDAwMDAwMDAwMTAwRkMwMkMwRjk1MjAwMDAwMDAwRTgKKzoxMEVFMjAwMDAwMDAwMDlDMEYwMDAwMzIwQzAwMDAwMDAwMDAwMDA4RjEKKzoxMEVFMzAwMDczM0UwMDM5MDAwMDAwMDAwMDAwMDBFMDA3MDAzMDMyOUYKKzoxMEVFNDAwMDAwMDAwMDAwMDAwMDAwOUMxRkMwRjkzQTcwMDBENzEzQkEKKzoxMEVFNTAwMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDAwMDAwMDBDMUQKKzoxMEVFNjAwMDAzMDAwMDMyMDAwMDAwMDAwMDAwMDBFMDA3MDAzMDMyMjQKKzoxMEVFNzAwMDAwMDAwMDAwMDAwMDAwMTAwMzAwMDAzMjAwMDAwMDAwNEQKKzoxMEVFODAwMDAwMDAwMEUwMDcwMDMwMzIwMDAwMDAwMDAwMDAwMDlDOUQKKzoxMEVFOTAwMDBGMDAwMDMyMDAwMDAwMDAwMDAwMDBBMDBGQzAyOTMyNjcKKzoxMEVFQTAwMDAwMDAwMDAwMDAwMDAwOUMwMkMwRjkzMjAwMDAwMDAwRDkKKzoxMEVFQjAwMDAwMDAwMEE0MEZDMDJDMzIwMDAwMDAwMDAwMDAwMDlDRTUKKzoxMEVFQzAwMDAyMDBGQTMyMTgwMDAwMDAwMDAwMDAyQzczN0VGQTM5QUMKKzoxMEVFRDAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMzAzMjAwMDBFMDEzRjYKKzoxMEVFRTAwMDg1MDEwMDlDMUZDMEY5QkEwMDAwMDAwMDAwMDEwMDgwRUQKKzoxMEVFRjAwMDAyMDAwMDUwMDEwMDAwMDEwMDAwMDA5QzBGMDAzNzMyQUEKKzoxMEVGMDAwMDAwMDBDMTEzMDAwMDAwODAwMjAwMDBEMDBFMDBFRjEzQ0IKKzoxMEVGMTAwMDA0MDEwMDgwODJDREZBQkMwMDAwMDAwMDAwMDAwMEUwODcKKzoxMEVGMjAwMDA3MDAwMDMyMDAwMDAwMDAwMDAwMDBFMDA3MDAwMDMyOEYKKzoxMEVGMzAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDBFOTEzQkMKKzoxMEVGNDAwMDAwMDAwMDlDM0ZDMEY5OUExQzAwRTkxMzA0MDEwMDgwRjYKKzoxMEVGNTAwMDgyQ0RGQUJDMDIwMEMxMTMwMDAwMDA5QzhGQ0RGOURBMEIKKzoxMEVGNjAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA1MDAxMDAwMDAyQ0IKKzoxMEVGNzAwMDAwMDAwMDlDMEYwMDM3MzIwMDAwQzExMzAwMDAwMDgwMjkKKzoxMEVGODAwMDAyMDAwMEQwMEUwMEY3MTMwNDAxMDA4MDgyQ0RGQUJDMEQKKzoxMEVGOTAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDBGMzEzNTIKKzoxMEVGQTAwMDAwMDAwMDlDMUZDMEY5OUEyNjAwRjMxMzA0MDEwMDgwQTIKKzoxMEVGQjAwMDgyQ0RGQUJDMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDUwNzkKKzoxMEVGQzAwMDAwMDAwMDAwMDAwMDAwQTgwRjQwMjkzMjAwMDQwMTAwRUEKKzoxMEVGRDAwMDAwMDAwMEE4MDIwMDM3MzIwMDAwRTgxMzAwMDAwMDgwQTMKKzoxMEVGRTAwMDAyMDAwMEQwMDAwMEYyMTMwMDAwMDA4MDAyMDAwMEQwRjgKKzoxMEVGRjAwMDAwMDBDNTEzMDAwMDAwODAwMjAwMDBEMDAwMDAwMDAwRTcKKzoxMEYwMDAwMDAwMDAwMEUwMDc4MDE4MzIwMDAwMDAwMDAwMDAwMEUwNkYKKzoxMEYwMTAwMDA3NDAxQTMyMDAwMDAwMDAwMDAwMDBFMDA3MDAxQTMyMkEKKzoxMEYwMjAwMDAwMDAwMDAwMDAwMDAwRTAwNzgwMUEzMjAwMDAwMDAwMkQKKzoxMEYwMzAwMDAwMDAwMEUwMDdDMDFBMzIwMDAwMDAwMDAwMDAwMEEwM0QKKzoxMEYwNDAwMDBGMDAwMDMyQTI2MDAzMDAwMDAwMDA1ODAzMDAzNzMyQjYKKzoxMEYwNTAwMDBCMTQwMDAwMDAwMDAwNUMwMzAwMzYzMjAwMDAwMDAwQ0EKKzoxMEYwNjAwMDAwMDAwMDlDMEY4MDJBMzIwMDAwMEIxNDA0MDAwMDgwNzYKKzoxMEYwNzAwMDAyNDAyOUIyMDAwMDAwMDAwMDAwMDA1MDgzM0UwMDM0MkUKKzoxMEYwODAwMDAwMDAwMDAwMDAwMDAwNDg4MzNFMDAzNDAwMDAwMDAwNDMKKzoxMEYwOTAwMDAwMDAwMDQ0NTMwQTAwMzQwMDAwMEMxNDAwMDAwMDg4RjMKKzoxMEYwQTAwMDBGNDAyQjkyMDAwMDAwMDAwMDAwMDA5MDBGMDAyODMyNUIKKzoxMEYwQjAwMDAwMDAwMDAwMDAwMDAwOTQwRjAwMjkzMjAwMDAwMDAwNTIKKzoxMEYwQzAwMDAwMDAwMDk4MEY4MDJBMzIwMDAwMDAwMDAwMDAwMEE4MTUKKzoxMEYwRDAwMDAyQzBGOTMyMTExNDM4MTQwMDAwMDBCMDBGMDAzNjkyNEIKKzoxMEYwRTAwMDA3MDAxNDE0MDQwMDAwODA4MjREMjlCQzAwMDAwMDAwQjkKKzoxMEYwRjAwMDAwMDAwMEEwMUYwMEZBM0EwMDAwMDgxNDAwMDAwMDlDNjUKKzoxMEYxMDAwMDBGODAyQTkyQzAwMTAwMDAwMDAwMDBBQzBGMDAzNjMyRDAKKzoxMEYxMTAwMDAxMDAwMDAwMDAwMDAwOUMwMjAwMzYzMjAwMDAyNDE0QjAKKzoxMEYxMjAwMDAwMDAwMDgwMDIwMDAwRDAxRjAwMUExNDA0MDAwMDgwQkMKKzoxMEYxMzAwMDgyQ0QyOUJDQzAwMDAwMDAwMDAwMDBBQzhGQ0RGQTNBOUYKKzoxMEYxNDAwMDAwMDAxNjE0MDAwMDAwOUMxMkMwMjk5QTAwMDBENjEzN0IKKzoxMEYxNTAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwQ0MxMzAwMDAwMDgwRkUKKzoxMEYxNjAwMDAyMDAwMEQwMDAwMDIyMTQwNDAwMDA4MDUyOEFGQUJDODEKKzoxMEYxNzAwMEEyNjAwMzAwMDAwMDAwNTgwMzAwMzczMjIyMTQwMDAwOTAKKzoxMEYxODAwMDAwMDAwMDVDMDMwMDM2MzIwMDAwMDAwMDAwMDAwMDUwNjgKKzoxMEYxOTAwMEEzM0UwMDM0MDAwMDAwMDAwMDAwMDA0OEEzM0UwMDM0RkQKKzoxMEYxQTAwMDAwMDAwMDAwMDAwMDAwNDQ1MzBBMDAzNDAwMDQwMTAwODUKKzoxMEYxQjAwMDAwMDAwMEE0MEYwMDM3MzIwMDAwOTMxMzAwMDAwMDgwMEQKKzoxMEYxQzAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBDNDAyQzBGQTMyRkIKKzoxMEYxRDAwMDAzMDAwMDAwMDAwMDAwOUMwRjAwMzYzMjAwMDAwMDAwMTkKKzoxMEYxRTAwMDAwMDAwMEJDMEY0MDJGMzIwMDAwMkIxNDA0MDAwMDlDRDQKKzoxMEYxRjAwMDFGQzBGOUJDMDAwMDJBMTQwNDAwMDA4MDAyNDAyRkIyOTYKKzoxMEYyMDAwMDAwMDAyNzE0MDAwMDAwRTAwNzAwMkM5MjAwMDAyNzE0RTMKKzoxMEYyMTAwMDAwMDAwMEUwMDcwMDM2OTIwMDAwMDAwMDAwMDAwMEUwNUYKKzoxMEYyMjAwMDA3NDAyQzMyMDAwMDAwMDAwMDAwMDBFMDA3ODAyQzMyNzQKKzoxMEYyMzAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkMzMjAwMDAwMDAwQzkKKzoxMEYyNDAwMDAwMDAwMEUwMDcwMDJEMzIwMDAwMDAwMDAwMDAwMEUwOTgKKzoxMEYyNTAwMDA3NDAyRDMyMDAwMDAwMDAwMDAwMDBFMDA3ODAyRDMyNDIKKzoxMEYyNjAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkQzMjAwMDAwMDAwOTgKKzoxMEYyNzAwMDAwMDAwMEUwMDdDMEZCMzIwMDAwMDAwMDAwMDAwMEUwREEKKzoxMEYyODAwMDA3ODAyRjMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyRjMyOEUKKzoxMEYyOTAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDIzOTAwMDAwMDAwQTYKKzoxMEYyQTAwMDAwMDEwMEUwMDc4MDNGNTJGRjAwMDAwMDAwMDAwMDQ0MjIKKzoxMEYyQjAwMDAzMDAzNjMyMDAwMDAwMDAwMDAwMDBFMDA3MDBGOTMyRDEKKzoxMEYyQzAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwMjgzMjAwMDAwMDAwQkQKKzoxMEYyRDAwMDAwMDAwMEUwMDc4MEY4MzIwMzAwMDAwMDAwMDAwMDlDRkUKKzoxMEYyRTAwMDBGMDAzNjMyMDAwMDAwMDAwMDAwMDBCQzBGQzAyQjMyQkYKKzoxMEYyRjAwMDAwMDA0MTE0MDQwMDAwOUMxRkMwRjlCQzAwMDA0MDE0MzEKKzoxMEYzMDAwMDA0MDAwMDgwMDJDMDJCQjIwMDAwM0QxNDAwMDAwMEUwQTkKKzoxMEYzMTAwMDA3QzAyODkyMDAwMDNEMTQwMDAwMDBFMDA3MDAzNjkyNkMKKzoxMEYzMjAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwRjkzMjAwMDAwMDAwOEIKKzoxMEYzMzAwMDAwMDAwMEUwMDc0MDI5MzIwMDAwMDAwMDAwMDAwMEUwNkIKKzoxMEYzNDAwMDA3ODAyOTMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyOTMyRDkKKzoxMEYzNTAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMkEzMjAwMDAwMDAwNkEKKzoxMEYzNjAwMDAwMDAwMEUwMDc0MDJBMzIwMDAwMDAwMDAwMDAwMEUwM0EKKzoxMEYzNzAwMDA3ODBGOTMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyQTMyRDgKKzoxMEYzODAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkYzMjAwMDAwMDAwNzUKKzoxMEYzOTAwMDAwMDAwMEUwMDc0MDJCMzIwMDAwMDAwMDAwMDAwMEUwMDkKKzoxMEYzQTAwMDA3ODAyQjMyMDAwMDAwMDAwMDAwMDBFMDA3QzBGQjMyQTUKKzoxMEYzQjAwMDAwMDAwMDAwMDAwMDAwODgwMjAwRkIzMjAwMDAwMDAwOTYKKzoxMEYzQzAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4OTUKKzoxMEYzRDAwMDAyMDAwMDMyMDAwMDAwMDAwMDEwMDAwMDA3MDA5NzMyMTkKKzoxMEYzRTAwMDAwMDAwMDAwMDAxOTAwMDAwN0MwOTY1MjA4ODA1MjE0NjcKKzoxMEYzRjAwMDEyMDAwMDQ4MDI4MDM2QjIwMDAwMDAwMDAwMDAwMDgwQzkKKzoxMEY0MDAwMDAyMDAwMDMwMDAwMDU0MTQxMjAwMDA5QzBGQzAyMUIyMTIKKzoxMEY0MTAwMDFEMDA1NzE0MDQwMDAwODA3MkJFMTdCODAwMDA1NDE0NzkKKzoxMEY0MjAwMDAwMDAwMEY4MUU4MEVGOUExMzAwMDAwMDAwMDAwMDlDMEUKKzoxMEY0MzAwMDdGQkUxNzM4MDAwMDAwMDAwNDAwMDA4MDEyQzBGOTVDOTUKKzoxMEY0NDAwMDAwMDA1NDE0MDAwMDAwRjgxRTgwRUY5QTAwMDAwMDAwMzUKKzoxMEY0NTAwMDAwMDAwMEI0MEY0MEZCMzUwMDAwMDAwMDAwMDAwMDlDREQKKzoxMEY0NjAwMDAyMDAwMDMyNEM0MjAwMDAwMDAwMDBBODAyMDAzNjMyQzgKKzoxMEY0NzAwMDAwMDAwMDAwMDAwODAwMDAwNzgwMkEzMjAwMDA0RTE0M0YKKzoxMEY0ODAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwNTIxNDAwMDAwMDgwNDQKKzoxMEY0OTAwMDAyMDAwMEQwMDAwMDAwMDAwMDAwMDAwQ0NCQzFCMDM0MUUKKzoxMEY0QTAwMDAwMDAwMDAwMDAwMDAwOUMwMjAwMDAzMjAwMDAwMDAwOEMKKzoxMEY0QjAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwNkIxNDAwMDAwMDI4OTkKKzoxMEY0QzAwMDA5QzBCMEQyMDAwMDYxMTQwNDAwMDA4MDAyODA5MkIyMzIKKzoxMEY0RDAwMDAwMDA2NTE0MTIwMDAwOUMwRkMwMjFCMjFEMDA2ODE0Q0EKKzoxMEY0RTAwMDA0MDAwMDgwNzJCRTE3QjgwMDAwNjUxNDAwMDAwMEY4MjgKKzoxMEY0RjAwMDFFODBFRjlBMTMwMDAwMDAwMDAwMDA5QzdGQkUxNzM4QUEKKzoxMEY1MDAwMDAwMDA1MzEzMDQwMDAwODAxMkMwRjlCQzAwMDA2NTE0MTEKKzoxMEY1MTAwMDAwMDAwMEY4MUU4MEVGOUEwMDAwMDAwMDAwMDAwMEZDRDAKKzoxMEY1MjAwMDAyMDAwMDMyMDIwMDAwMDAwMDAwMDBBMEYyMEIwMDM5Q0YKKzoxMEY1MzAwMDAwMDA2RjE0MDQwMTAwMjgwOTM0QjBCQTAwMDAwMDAwNzQKKzoxMEY1NDAwMDAwMDEwMDI4MDkwMDAwNTIwMDAwMDAwMDAwMDAwMEE4OEYKKzoxMEY1NTAwMDIyQzAyRjM3MDAwMDAwMDAwMDAwODRDMDM3QUNCMDMyNUEKKzoxMEY1NjAwMDAwMDAwMDAwMDAwMDAwMEMwQjAwMDAzMkZGRkYwMDAwNTQKKzoxMEY1NzAwMDAwMDAwMEMwQUY0REIwMzAwMDAwNzUxNDgwMDAwMDgwNjYKKzoxMEY1ODAwMDAyNDBCMEI2MDAwMDAwMDAwMDAwMDBDMDZGMDFGQzM1NzIKKzoxMEY1OTAwMDAwMDAwMDAwMDAwMDAwMDAwNzNGMDEzMjAwNDIwMDAwQjAKKzoxMEY1QTAwMDAwMDgwMDAwODc4RDJBM0EwMDAwMDAwMDAwMTAwMDAwQ0IKKzoxMEY1QjAwMDA3MDBCMDMyMDAwMDAwMDAwMDE4MDAwMDA3MDBEMDMyNDEKKzoxMEY1QzAwMDAwMDAwMDAwMDAwMDAwQzAzRkMxMzgzNDAwMDAwMDAwMEYKKzoxMEY1RDAwMDEyMDEwMDQ4RjIwMUZDNTQwMDAwN0ExNDAwMDAwMDgwN0YKKzoxMEY1RTAwMDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNzkKKzowQ0Y1RjAwMDAwMDAzNjAwMDAwMDAwODAwMjAwMDA5MEM3Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMuaWhleCBiL2Zpcm13YXJlL3N4Zy9zYWhhcmFkb3dubG9hZEIuc3lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwOTg1MgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3N4Zy9zYWhhcmFkb3dubG9hZEIuc3lzLmloZXgKQEAgLTAsMCArMSwzMzg1IEBACis6MTAwMDAwMDAwMjAwMDAwMDVDRDMwMDAwMEMwMDAwMDAwMDAwMDAwMEIzCis6MTAwMDEwMDBGRjFGMDAwMDAxMDAwMDAwMDAwMDAwODg4MjREMjkzQTA3Cis6MTAwMDIwMDAwMDAwNDAwMzAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDcyCis6MTAwMDMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MDI1Cis6MTAwMDQwMDAwMjAwMDA5MDAwMDAwOTAwMDAwMDAwODAwMjAwMDA5MDAzCis6MTAwMDUwMDAwMDAwMDkwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDdDCis6MTAwMDYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MEY1Cis6MTAwMDcwMDAwMjAwMDA5MDAwMDAwOTAwMDAwMDAwODAwMjAwMDA5MEQzCis6MTAwMDgwMDBGRUZGMDAwMDAwMDAwMEFDMDIwMDM2MzIwMDAwMzYwMDI3Cis6MTAwMDkwMDAwMDAwMDBBODAyMDAwMDkyMDAwMDM2MTAwMDAwMDA4MDVFCis6MTAwMEEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDY2Cis6MTAwMEIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEEyCis6MTAwMEMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDU4Cis6MTAwMEQwMDAwMjAwMDA5MDAwMDAyMDAwMDAwMDAwRDgwRjgwMjg5MjRECis6MTAwMEUwMDAwMDAwMjEwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjIwMEFDCis6MTAwMEYwMDAwMDAwMDBEODBGODAyODkyMDAwMDIzMDAwMDAwMDBEOEU0Cis6MTAwMTAwMDAwRjQwMkI5MjAwMDAyNDAwMDAwMDAwRDgwRjgwMjg5MjlFCis6MTAwMTEwMDAwMDAwMjUwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjYwMDczCis6MTAwMTIwMDAwMDAwMDBEODBGODAyODkyMDAwMDI3MDAwMDAwMDBEOEFGCis6MTAwMTMwMDAwRjgwMjg5MjAwMDAyODAwMDAwMDAwRDgwRjgwMjg5MjJECis6MTAwMTQwMDAwMDAwMjkwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMkEwMDNCCis6MTAwMTUwMDAwMDAwMDBEODBGODAyODkyMDAwMDM2MDAwMDAwMDA5OEIwCis6MTAwMTYwMDAxRTgwRTk5QTAwMDAyQzAwMDAwMDAwRDgwRjgwMjg5MjIxCis6MTAwMTcwMDAwMDAwMkQwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMkUwMDAzCis6MTAwMTgwMDAwMDAwMDBEODBGODAyODkyMDAwMDJGMDAwMDAwMDBEODQ3Cis6MTAwMTkwMDAwRjgwMjg5MjAwMDAzMDAwMDAwMDAwRDQwRjAwMDA5MjcxCis6MTAwMUEwMDAwMDAwMzAwMDAwMDAwMEQ0MEY0MDAwOTIwMDAwMzAwMDNBCis6MTAwMUIwMDAwMDAwMDBENDBGODAwMDkyMDAwMDM0MDAwMDAwMDBENDQyCis6MTAwMUMwMDAwRkMwMDA5MjAwMDAzMDAwMDAwMDAwRDQwRjAwMDE5MjI4Cis6MTAwMUQwMDAwMDAwMzAwMDAwMDAwMEQ0MEY0MDAxOTIwMDAwMzAwMDA5Cis6MTAwMUUwMDAwMDAwMDBENDBGODAwMTkyMDAwMDMwMDAwMDAwMDBENDE1Cis6MTAwMUYwMDAwRkMwMDE5MjAwMDAzMDAwMDAwMDAwRDQwRjAwMDI5MkY2Cis6MTAwMjAwMDAwMDAwMzAwMDAwMDAwMEQ0MEY0MDAyOTIwMDAwMzAwMEQ3Cis6MTAwMjEwMDAwMDAwMDBENDBGODAwMjkyMDAwMDM2MTAwMDAwMDA4MDIxCis6MTAwMjIwMDAwMjAwMDA5MDAwMDAzMDAwMDAwMDAwRDQwRjAwMDM5Mjk0Cis6MTAwMjMwMDAwMDAwMzAwMDAwMDAwMEQ0MEY0MDAzOTIwMDAwMzAwMEE2Cis6MTAwMjQwMDAwMDAwMDBENDBGODAwMzkyMDAwMDMwMDAwMDAwMDBENEIyCis6MTAwMjUwMDAwRkMwMDM5MjAwMDAwMDAwMDAwMDAwRDA1RjNGMDAzNDk4Cis6MTAwMjYwMDAwMDAwMzYxMDA0MDAwMDgwNDJGRkZDQjAwMDAwMDAwMEQ3Cis6MTAwMjcwMDAwMDAwMDA4ODEyODBGRDNBMDAwMDM2MTAwMDAwMDA4MDY3Cis6MTAwMjgwMDAwMjAwMDA5MDM2MTAzNjEwMDIwMTAwODA4MjhERkRCQzA1Cis6MTAwMjkwMDAwMDAwMDAwMDAwMDAwMDg4MTI4MEZEM0EwMDAwMDAwMDBECis6MTAwMkEwMDAwMDAwMDBGODAzQzAwMTMyMzgwMDAwMDAwMDAxMDA4NEEzCis6MTAwMkIwMDA4MjREMjgxQTAwMDAzNjAwMDAwMDAwNzQwOTQwMDA5MkE4Cis6MTAwMkMwMDAwMDAwNEYwMDAwMDAwMEZDMDIwMDAwOTIwMDAwNDgwMDA3Cis6MTAwMkQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDREMDAwMDAwMDA5MDJGCis6MTAwMkUwMDAwRTgwMTg5MjAwMDA4RjAyMDAwMDAwMDAwOEMwMjA5MkNCCis6MTAwMkYwMDAwMDAwN0YwMDAwMDAwMDAwMDgwMDIxOTIwMDAwOEQwMjM1Cis6MTAwMzAwMDAwMDAwMDAwMDA4NDAyMTkyMDAwMDdDMDAwMDAwMDAwMDc2Cis6MTAwMzEwMDAwODg1MjE5MDAwMDBGMjAyMDAwMDAwRUMwMkMwMjI5MjQ5Cis6MTAwMzIwMDAwMDAwQ0UwMzAwMDAwMDgwMDIwMDAwOTAwMDAwNTYwMDk0Cis6MTAwMzMwMDAwMDAwMDBGQzAyNDAxODlEMDAwMDUxMDAwMDAwMDBEMEE5Cis6MTAwMzQwMDAwMjAwMDA5MjAwMDAyMDAzMDAwMDAwODAwMjAwMDA5MEU0Cis6MTAwMzUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDQ1Cis6MTAwMzYwMDAwMDAxMDA4MDAyMDAwMDcwMDAwMDRDMDAwMDAwMDAwMDRFCis6MTAwMzcwMDAwOUMwMjE5MjAwMDA0QTAwMTIwMTAwMDAwODg1MjJCMDQ1Cis6MTAwMzgwMDAxODAwMzYwMDAwMDAwMEY4NzM4QTAyOTkwMDAwODQwMDBCCis6MTAwMzkwMDA2QTAwMDA4MDAyMDAwMEIwMDgwMDg0MDAwMDAwMDBGODNECis6MTAwM0EwMDAyMzQwMDE5OTAwMDAwMDAwMDAwMTAwRTgwMjAwOTA3MjYzCis6MTAwM0IwMDAwMDAwMzYxMDgwMDEwMDgwQjIwMEU5QjYwMDAwM0UwMzY0Cis6MTAwM0MwMDAwMDAwMDA3QzFFQzBFNzlBMDgwMDAwMDAwMDAwMDBGODUyCis6MTAwM0QwMDAxMzQwMDEzOTAwMDAzMjAzMDAwMDAwMDhCODAxMDA5NDA2Cis6MTAwM0UwMDAwMDAwMzYxMDAzMDAwMDc4MDk0MDFBQkQwMDAwMDAwMDJDCis6MTAwM0YwMDAwMDAwMDBBMEUxMjUwMDM0MDgwMDAwMDAwMDAwMDBGODIzCis6MTAwNDAwMDBCMzQwMDEzOTAwMDAzRTAzQjIwMDAwRDgwMjAwMDBCMjQwCis6MTAwNDEwMDAwMDAwNDAwNTAwMTAwMUY4MDIwMDZFOTIwMDAwNTkwMDMzCis6MTAwNDIwMDAwQTAxMDBDQzAyMDAwMEIyMDAwMDZBMDAwMzAxMDBGQ0Q3Cis6MTAwNDMwMDAwMjQwMTlCRDA4MDAzRTAzMDAwMDAwRjhBMzQwMDE5OUU2Cis6MTAwNDQwMDAwMDAwMDAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMDA2Cis6MTAwNDUwMDAwMDAwMDA5MEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA5NDUyCis6MTAwNDYwMDAwMUMwMkYzMjAyMDA1QzAwQjAwMDAwQTBGMjBCMDBCOTA2Cis6MTAwNDcwMDAwMDAwNUYwMDA0MDEwMDgwMDJDMEIwQkMwMDAwNjgwMDAyCis6MTAwNDgwMDBBMDAwMDA4MDAyMDAwMDkwMDAwMDYxMDA4MDAxMDA4MDU4Cis6MTAwNDkwMDBGMjRCRDBCNjAwMDA2ODAwQTAwMDAwODAwMjAwMDA5MDdGCis6MTAwNEEwMDAwMDAwMDAwMEEwMDAwMDA0RkQ0QkQwMzQwMDAwNjYwMEY2Cis6MTAwNEIwMDA4MDAxMDA4MDEyODFGQ0I2MDAwMDJEMEYwMDAwMDBEOEUyCis6MTAwNEMwMDAwMjAwMDBEMjE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOThGCis6MTAwNEQwMDA2ODAwMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDQwRkUxCis6MTAwNEUwMDAwMDAwMDBEODAyMDAwMEQyMTgwMDM2MDAwMDAwMDBGODFBCis6MTAwNEYwMDA3MzBBMDNGOTAwMDA1OTAwMDMwMTAwRkMwMjQwMThCRDEzCis6MTAwNTAwMDAwMDAwN0IwMDAzMDAwMEZDMDI0MDE5QkQwMDAwMDAwMDU5Cis6MTAwNTEwMDAwMDAwMDA5NDAxQzAyRjMyMDAwMDAwMDAwMDAwMDA4MEE1Cis6MTAwNTIwMDBGMTAxMDAzNDAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMkZGCis6MTAwNTMwMDAwMjAwNkQwMEIwMDAwMEEwRjIwQjAwQjkwMDAwNzAwMEQ2Cis6MTAwNTQwMDAwNDAxMDA4MDAyQzBCMEJDMDAwMDc5MDBBMDAwMDA4MDVGCis6MTAwNTUwMDAwMjAwMDA5MDAwMDA3MjAwODAwMTAwODBGMjRCRDBCNkQzCis6MTAwNTYwMDAwMDAwNzkwMEEwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDYwCis6MTAwNTcwMDBBMDAwMDAwNEZENEJEMDM0MDAwMDc3MDA4MDAxMDA4MDEzCis6MTAwNTgwMDAxMjgxRkNCNjAwMDAyRDBGMDAwMDAwRDgwMjAwMDBEMjNFCis6MTAwNTkwMDAxODAwMDAwMDAwMDAwMEY4NzMwQTAzMzk3OTAwMzYwMEUzCis6MTAwNUEwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDA0MEYwMDAwMDBEOEQ2Cis6MTAwNUIwMDAwMjAwMDBEMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOUE4Cis6MTAwNUMwMDAwMDAwNkEwMDAzMDEwMEZDMDI0MDE5QkQwMDAwNTkwMDUwCis6MTAwNUQwMDAwMzAxMDBGQzAyNDAxOEJEMDgwMDNFMDMwMDAwMDBGOEMzCis6MTAwNUUwMDBBMzQwMDE5OTA4MDAwMDAwMDAwMDAwRjg3MzQwMDEzOUExCis6MTAwNUYwMDAwMDAwODQwMDgwMDEwMDgwRTIwMTgwQjYwMDAwODEwMERDCis6MTAwNjAwMDAwMDAwMDA4MDAyMDAwMDkwMDgwMEVEMDIwQzAwMDBGOERECis6MTAwNjEwMDA1MzQwMDFCOTAwMDA4MzAwODAwMTAwODBFMjAxODBCNkYwCis6MTAwNjIwMDAwMDAwMzYxMDEyMDAwMDY4MDIwNTgwQjAwMDAwMzIwMzlFCis6MTAwNjMwMDAwMDAwMDA2QzFGQzBGNjlBMDAwMDAwMDAwMDAwMDAwMERGCis6MTAwNjQwMDAwODA1ODAzMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMkJDCis6MTAwNjUwMDAwMDAwMDAwMDAwMDAwMDEwMDg4MDNEMzIwMDAwMDAwMDkzCis6MTAwNjYwMDAwMDAwMDBENDAyMDAwMDMyMDJBMDAwMDAwMDAwMDAwMEUwCis6MTAwNjcwMDBBOTBEODAzMjAwMDA4ODAwMTIwMDAwNTQwMkE0MzhCMjk0Cis6MTAwNjgwMDAwMDAyMDA4MDAwMDAwMDJDMDgwMDM3MzIxODAwMzYwMEZECis6MTAwNjkwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDA4MDAwNERECis6MTAwNkEwMDAwODgwNzIzMjAwMDA5MDAwOUYwMDAwNUMwODAwNzJCMjY3Cis6MTAwNkIwMDA4NzAwOEYwMDgwMDEwMDgwODJDRDg1QjAwMDAwQTEwMEZFCis6MTAwNkMwMDAwMDAwMDAyQ0Q4QzE4Mjk0MDAwMEExMDAwMDAwMDAyQzgyCis6MTAwNkQwMDA4OEMxODI5NDAwMEY5OTAwMDQwMTAwODA4MkNEODVCMDBBCis6MTAwNkUwMDAwMDAwOTkwMDgwMDAwMDgwNDI4MUZDQjYwMDAwMzYxMEI2Cis6MTAwNkYwMDAxMjAwMDA2ODAyMDU4MEIwMDAwMDAwMDAwMDAwMDA2Q0RECis6MTAwNzAwMDAxRkMwRjYzQTAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMkE5Cis6MTAwNzEwMDAwMDAwOTcwMDA0MDEwMERDNDM2MDNEQjMwMDAwMzIwMzk5Cis6MTAwNzIwMDAwMDAwMDBGQzAyMDAwMDkyMTgwMDAwMDAwMDAwMDBGODI5Cis6MTAwNzMwMDA3MzhBMDMzOTk0MDAzNjAwMDAwMDAwQzAwMjAwMzY5MjJDCis6MTAwNzQwMDAxMDAwOUYwMDg3MDAwMDc4NzkyMTE2QjgwMTAwOUYwMEYzCis6MTAwNzUwMDAwNDAxMDA4MDgyOEQ5N0JDODcwMEE4MDA4NzAwMDA3ODg0Cis6MTAwNzYwMDA4OUNEODVCMDAwMDA5RTAwMDQwMTAwODAxMjgwOTdCQ0Y2Cis6MTAwNzcwMDAwMDAwQTEwMDAwMDAwMDJDRDhDMTgyOTQwMDAwQTEwMDVDCis6MTAwNzgwMDAwMDAwMDAyQzg4QzE4Mjk0MDAwMEE4MDA4MDAxMDA4MDM1Cis6MTAwNzkwMDBGMkMwODVCNjAwMDBBODAwMDAwMDAwMkM5OEMxODI5NDI5Cis6MTAwN0EwMDAwMDAwQTcwMDgwMDEwMDgwRDJDMTgyQjYwMDAwQTgwMDJFCis6MTAwN0IwMDA4MDAxMDA4MDcyODBGQ0I2MDAwMDAwMDAwMDE4MDBBOEQ0Cis6MTAwN0MwMDA0MjNENzIzMDAwMDAwMDAwNTQxODg5RkNGMkMwN0MzMEI5Cis6MTAwN0QwMDAwMDAwQ0IwMDgwMDEwMDgwRjJDMTg1QjYwMDAwQTkwMEI2Cis6MTAwN0UwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEEzMDA4MDAwMDA4MDU0Cis6MTAwN0YwMDA4MjgwRkNCNjAwMDAwMDAwNTQwMDAwRkMwMjAwMDAzMkMxCis6MTAwODAwMDA4MDAwODAyMDAwMDAwMDgwQzJDRDg1MzAwMDAwQkUwMDQ2Cis6MTAwODEwMDAwQjAwMDA4MDAyMDAwMEIwMTgwMDAwMDAwMDAwMDA3ODBCCis6MTAwODIwMDA3OUExMTYzODIwMDBDQjAwMDQwMDAwODA4MjhEOTdCQzhGCis6MTAwODMwMDAwMDAwQjUwMDgwMDEwMDgwNjI4MEZDQjY4NzAwQjUwMDMyCis6MTAwODQwMDA4NzAwMDA3ODg5Q0Q4NUIwMDAwMEIxMDAwNDAwMDA4MEU5Cis6MTAwODUwMDAxMjgwOTdCQzAwMDBCNTAwMDQwMTAwODAyMjgwOTdCQzg0Cis6MTAwODYwMDAwMDAwQjUwMDgwMDEwMDgwNzJDMTg1QjYxMDAwMDAwMDU0Cis6MTAwODcwMDAwMDAwMDA3ODc5NjExNjM4MDAwMEJDMDAwNDAxMDA4MDk3Cis6MTAwODgwMDAzMjgwOTdCQzAwMDBDQjAwMDAwMDAwMkNCOEMxODI5NERECis6MTAwODkwMDAwMDAwQkMwMDgwMDEwMDgwNTI4MEZDQjYwMDAwQkMwMDVCCis6MTAwOEEwMDA4MDAwMDA4MDcyQzE4NUI2MDAwMEJDMDA4MDAxMDA4MDFECis6MTAwOEIwMDAwMkMxODVCNjAwMDBCQzAwODAwMTAwODBEMkMxODVCNkFGCis6MTAwOEMwMDAxODAwMDAwMDAwMDAwMDc4NzlFMTE2MzgwMDAwQkMwMDM0Cis6MTAwOEQwMDAwNDAxMDA4MDMyODA5N0JDMDAwMENCMDAwMDAwMDAyQzk3Cis6MTAwOEUwMDBDOEMxODI5NDAwMDAwMDAwMDAwMDAwMDQwODAwMDQzMjI3Cis6MTAwOEYwMDAwMDAwQ0IwMDAwMDAwMDJDQThDMTgyOTQwODAwMDAwMDdBCis6MTAwOTAwMDAwMDAwMDA3ODc5MjExNzM4MDAwMENCMDAwNDAwMDA4MDM3Cis6MTAwOTEwMDAzMjgwOTdCQzAwMDBDQjAwMDQwMTAwODAyMjgwOTdCQzhECis6MTAwOTIwMDAxRjAwMDAwMDAwMTIwMDA4ODlDRDcyMzAwNTAwMDAwMDkxCis6MTAwOTMwMDAwMDEyMDAwMEI5REMxNzM4MDAwMDAwMDAwMDAwMDBBODE5Cis6MTAwOTQwMDAyMjAwOTAzNzAwMDBDQjAwODAwMDg2ODAyMjI0N0NCNkY1Cis6MTAwOTUwMDAwMDAwMzYxMDEyMDAwMDY4MDIwNTgwQjAwMDAwMDAwMEEwCis6MTAwOTYwMDAwMDAwMDBGQzAyMDAwMTMyMDAwMEM5MDAwNDAxMDBEQ0FDCis6MTAwOTcwMDA0MzYwM0RCMzAwMDAzMjAzMDAwMDAwRkMwMjAwMDA5MjFGCis6MTAwOTgwMDAxODAwMDAwMDAwMDAwMEY4NzM4QTAzMzlDNjAwMzYwMDIyCis6MTAwOTkwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMENFMDAxMjAxMDA2MDhDCis6MTAwOUEwMDAwODQwMjNCMjAwODIwMDAwMDAwMDAwMDgwODgwMzYzMkIwCis6MTAwOUIwMDAwMDAwQzUwMDAwMDAwMDY0MUY0MEY2OUEwMDAwMzYxMEQ5Cis6MTAwOUMwMDAxMjAwMDAyNDA4MDAyM0IyMDAwMDM2MTAxMjAwMDAyMDlDCis6MTAwOUQwMDAwOEMwMjNCMjAwMDAzNjEwMTIwMDAwMTgwODgwMjNCMkFECis6MTAwOUUwMDAwMDAwMDAwMDAwMDAwMEZDMDIwMDAxMzIwMDAwRDUwMDAxCis6MTAwOUYwMDAwNDAwMDBEQzQzNjAzREIzMTgwMDAwMDAwMDAwMDBGODc0Cis6MTAwQTAwMDA3MzhBMDMzOUQxMDAzNjAwMDAwMDAwQzAwMjAwMzY5MjFDCis6MTAwQTEwMDAwMDAwMDAwMDAwMDAwMEZDMDIwMDg1MzIwMDAwMDAwMDIxCis6MTAwQTIwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDAwMDAwMDBEMDY5Cis6MTAwQTMwMDAwMjAwMDAzMjAwQzBFMTAwMTgwMTAwMENBOENEM0VCMjU3Cis6MTAwQTQwMDAwMDAwRDUwMDEyMDAwMDM4MDI4MDgxQjIwMDAwMDAwMEQyCis6MTAwQTUwMDAwMDAwMDAzQzAyMDA4MjMyMDAwMDAwMDAwMDAwMDAzMDc0Cis6MTAwQTYwMDAwMjQwODIzMjAwMDAwMDAwMDAwMDAwMzQwMjAwODYzMkEyCis6MTAwQTcwMDAyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwMDAwMERFCis6MTAwQTgwMDAwMDAwMDA1QzFGQzBGNTNBMDAwMDMyMDMxMjAxMDA2ODRDCis6MTAwQTkwMDAwMjA1ODBCMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEM3Cis6MTAwQUEwMDAwMDAwMDAwMDAwMTgwMDc4MDkwMDcyMzIwMDIzRTQwMDAyCis6MTAwQUIwMDAwNDAxMDA4MEEyQ0Q4MkIwMDAwMEU1MDAwMDAwMDAwMDJCCis6MTAwQUMwMDAwOTAwMDA5MjAwMDAzNjEwOUYxNjAwMDAyOUMxNzJCQzc4Cis6MTAwQUQwMDAwMDAwMDAwMDAwMTgwMDAwMDc4MDgxMzIwMDAwMDAwMEM0Cis6MTAwQUUwMDAwMDIwMDAwMDA3MDA4MjMyMDAwMDAwMDAwMDI4MDAwMDAzCis6MTAwQUYwMDAwNzgwOTczMjEwMDAwMDAwMDAzMDAwMDAxNzIwOTAzOTY2Cis6MTAwQjAwMDAwMDAwMDAwMDAwMzgwMDAwMDdDMDgyMzIwMDAwMDAwMDMyCis6MTAwQjEwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAwQjIwMDAwNzQwODAzMjAwMDBFRTAwODAwMTAwODBBMkMxODJCNjQyCis6MTAwQjMwMDAwMDAwRUYwMDAwMDgwMDAwNTcwMDgwOTcwNTAwMDAwMDRCCis6MTAwQjQwMDAwMDA4MDAwMDA3QTAwNDM5MDAwMDM2MTAwNDEwMDAwMDVGCis6MTAwQjUwMDAwNzQwODJCMjAwMDAwMDAwMDAxODAwMDAwNzAwODYzMjQzCis6MTAwQjYwMDAwMDAwRjEwMDEyMDAwMDUwRjJDMTM4QjQxODAwMzYwMDQ1Cis6MTAwQjcwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDM2MTAxMjAwMDA2ODQ0Cis6MTAwQjgwMDAwMjA1ODBCMDAwMDBGNDAwMTIwMDAwNDgwMkMwODBCMkVDCis6MTAwQjkwMDAwMDAwMzIwM0NBMDEwMDA4RTg4MTgwOTQwODAwMDAwMEM4Cis6MTAwQkEwMDAwMDAwMDBGODkzNDAwMTM5MTAwMDAwMDA1NDAwMDBGQ0UwCis6MTAwQkIwMDA4MjREOTAzNjAwMDBGODAwRjAwMTAwRDgwMjAwMDBCMjJCCis6MTAwQkMwMDAwMDAwMDAwMDYyMDQwMUE4MDJDMDZFMzIwMDAwMDAwMEI0Cis6MTAwQkQwMDAwMDA0MDEwMDU5QzA2RTM3MDAwMDAwMDAwMDA0MDE3OEQ1Cis6MTAwQkUwMDAxOUMwNkUzQTAwMDAwMDAwNEUwNDAxRUMwNkJEOTczMEJCCis6MTAwQkYwMDAwMDAwMDAwMEUwMDAwMEY0MUU0MEVGM0EwMDAwMDAwMDlBCis6MTAwQzAwMDAwMDE4OEJDQzA3NDAwMDMyMDAwMDAwMDAwMDAwMDAwMEZDCis6MTAwQzEwMDAwNzQwMDkzMjAwMDAwMDAwMDAwODAwMDA3N0MwMjkzN0IzCis6MTAwQzIwMDAwMDAwMzYxMDA0MTAwMDAwMTczRDkwQkEwMDAwMDAwMENDCis6MTAwQzMwMDAwMDE4MDAwMDA3ODBGNDMyMDAwMDAzMDExMjAwMDA0MDk5Cis6MTAwQzQwMDBGMkMxMzhCNDAwMDAwMDAwMDAwMDAwRkMzMkMwMkYzMEI4Cis6MTAwQzUwMDAwMDAwMDAwMDAwMDAwMDEwMDg4MDNEMzIxODAwMzYwMDNGCis6MTAwQzYwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBENDNGCis6MTAwQzcwMDAwMjAwMDAzMjAwMDA5MDAxODAzODAwODAyMkMwNzJCNjZECis6MTAwQzgwMDAwMDAwMEMwMTEyMDAwMEM4MDIwMDIwQjIwMDAwMTMwMTk1Cis6MTAwQzkwMDAxMjAxMDA1QzA4ODAyMEIyMDAwMDM2MTAxMjAwMDA2MEQzCis6MTAwQ0EwMDAwMjgwMkNCMjE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOTlCCis6MTAwQ0IwMDAwOTAxMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDAwMDZBCis6MTAwQ0MwMDAwMDAwMDBGODFGODBGRjNBMDAwMDAwMDAwMDAwMDBGQzU4Cis6MTAwQ0QwMDAzMjAwODUzMDAwMDA2ODAxMDQwMDAwODA0MjYwM0RCM0FFCis6MTAwQ0UwMDAxODAwMDAwMDAwMDAwMEY4NzM4QTAzMzkwRjAxMzYwMDc1Cis6MTAwQ0YwMDAwMDAwMDBDMDAyMDAzNjkyMDgwMDAwMDAwMDAwMDAwMDYyCis6MTAwRDAwMDA4OENEODUzNzAwMDAwMDAwMDAwMDAwMjAwODAwNzIzMjA2Cis6MTAwRDEwMDAwMDAwMDAwMDAwMDgwMDI0MDgwMDcyMzIwMDAwMzYxMEI1Cis6MTAwRDIwMDAwNDEwMDA2QzA4MDA3MkIyMDAwMDAwMDAwMDE4MDA0Q0IzCis6MTAwRDMwMDAwODAwNzIzMjAwMDAzNjEwMDQyMDAwMTgwODAwNzJCMjU5Cis6MTAwRDQwMDAwMDAwMDAwMDAwMzAwMDI4MDgwMDcyMzIwMDAwMDAwMDlGCis6MTAwRDUwMDAwMDI4MDAzMDA4MDA3MjMyMDAwMDAwMDAwMDAwMDA2MDJGCis6MTAwRDYwMDAwODgwODIzMjAwMDAyMjAxMDYwMDAwODA2MkEwODJCQzVFCis6MTAwRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDA2MzIwNzAwMDAwMDJECis6MTAwRDgwMDAwMDA4MDAwMDc3NEEwOTM5MDAwMDM2MTAwNDEwMDAwMEZFCis6MTAwRDkwMDAwNzAwODJCMjAwMDAwMDAwQ0ExOTAwMDAwNzQwODIzMjNBCis6MTAwREEwMDAwMDAwMjEwMTEyMDAwMDQwRjJDMTM4QjQwMDAwMDAwMDMwCis6MTAwREIwMDAwMDAwMDBEODAyNDAwMDMyMDAwMDQ3MDEwNDM4MDA3OEVCCis6MTAwREMwMDBEOUM1NzJCMDAwMDAyNjAxODAwMTAwODAwMjgwOTdCNjZDCis6MTAwREQwMDAwMDAwMDAwMDAwMDAwMEY4ODI4MDJGMzQwMDAwMjgwMThECis6MTAwREUwMDA4MDAxMDA4MDEyODA5N0I2MDAwMDAwMDAwMDAwMDBGODJCCis6MTAwREYwMDA5MjgwMkYzNDA0MDAwMDAwMDAzODAwM0NCODFDMTczOEUzCis6MTAwRTAwMDAwMDAwMDAwMDAwMDAwMDNDMjhDMDgzMzcwMDAwMDAwMDA0Cis6MTAwRTEwMDAwMDNBMDAyQzA4QzA3MjMyMDAwMDAwMDAwMDAwMDAxQ0U0Cis6MTAwRTIwMDBCOEUwODMzQTAwMDAwMDAwQ0IyOTAwMjAwNzAwMDAzMjIwCis6MTAwRTMwMDAwMDAwNDYwMTA0MDAwMDgwMDJDMDgxQkMwMDAwMDAwMEU4Cis6MTAwRTQwMDAwMDAwMDAzNDc4QTA4MTNFMDAwMDAwMDAwMDAwMDAxQzdCCis6MTAwRTUwMDBEOEUwODEzQzAwMDAzNTAxMDYzQTAwODBCMjVDODNCQ0RBCis6MTAwRTYwMDAwMDAwMDAwMDAwM0EwMDAwODlDMTcyMzcwNzAwMzQwMTE5Cis6MTAwRTcwMDAyQjAxMDAwNDc5MEEwNEI5MDAwMDAwMDBDQjAwMDAwNDMzCis6MTAwRTgwMDAxOTQxOTAzNDAwMDAzODAxMDAzQTAwMkMwNzAwMDA5MjBDCis6MTAwRTkwMDAwMDAwMDAwMDAwM0EwMDJDRDdFMDcyM0MwMDAwMDAwMDg3Cis6MTAwRUEwMDAwMDAwMDAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDAwNDAzCis6MTAwRUIwMDAwOTAwMDAzMjAwMDAwMDAwMDAwMDAwMDAwNzY0ODMzMkQ3Cis6MTAwRUMwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMzYxMDFCCis6MTAwRUQwMDAwNDEwMDAwMDA3QzA4NkIyMDAwMDAwMDAwMDE4MDAwMEU3Cis6MTAwRUUwMDAwN0MwODQzMjAwMDA1NTAxMDQwMDAwMjhEOEEwODJCQzRECis6MTAwRUYwMDAwMDAwMDAwMDAwMDAwMDAwRDgyMDgwM0EwMDAwNDEwMUZFCis6MTAwRjAwMDAwNDAwMDA4MDcyODAyREJDMDAwMDNGMDExMjAwMDA0NEVDCis6MTAwRjEwMDAxMkU0MzhCMjAwMDA0MjAxMDAwMDAwRDgxMjgwMkQ5QTdECis6MTAwRjIwMDAwMDAwQkQwRjAwMDAwMDA0Rjk0MTkwRjQwMDAwNDQwMUVFCis6MTAwRjMwMDAwNDAwMDAxOEQ4QTA4MUJDMDAwMDJEMDEwMDAwMDA2QzQ2Cis6MTAwRjQwMDBEOEUwODY5QTAwMDA3QTBGMDAwMDAwNDQwODgwMkRGMjU1Cis6MTAwRjUwMDAwMDAwMkQwMTAwMDAwMDMwMDgwMDAwOTIwMDAwMDAwMDk5Cis6MTAwRjYwMDBDQjE5MDAyMDA3MDAwMDMyMDcwMDQ5MDEyQjAxMDAwNEMzCis6MTAwRjcwMDA3OTBBMDJCOTAwMDAwMDAwQ0IwMDAwMDQxOTQxOTAzNDQ2Cis6MTAwRjgwMDAwMDAwMDAwMDREMDAwMDAwQTdBMDgxM0UwMDAwMDAwMDBFCis6MTAwRjkwMDAwMDA4MDAwMDA3MDA4MDMyMDAwMDM2MTAwNDEwMDAwMDM2Cis6MTAwRkEwMDAwN0MwODZCMjAwMDAwMDAwMDAxODAwMDAwN0MwODQzMkFECis6MTAwRkIwMDAwMDAwNTUwMTA0MDAwMDI4RDhBMDgyQkMwMDAwMDAwMEY5Cis6MTAwRkMwMDAwMDAwMDAwMEQ4MjA4MDNBMDAwMDUyMDEwNDAwMDA4MDk4Cis6MTAwRkQwMDA3MjgwMkRCQzAwMDA1MDAxMTIwMDAwNDQxMkU0MzhCMkFGCis6MTAwRkUwMDAwMDAwNTMwMTAwMDAwMEQ4MTI4MDJEOUEwMDAwQkQwRkIwCis6MTAwRkYwMDAwMDAwMDAwNEY5NDE5MEY0MDAwMDdBMEYwMDAwMDA0NDYyCis6MTAxMDAwMDAwODgwMkRGMjAwMDA0NzAxMDAwMDAwMzAwODAwMDA5MjI3Cis6MTAxMDEwMDAwMDAwMDAwMDAwMDAwMDA0Rjk0MTkwMzQwMDAwNTYwMTc3Cis6MTAxMDIwMDAxMjAwMDA0NDEyRTQzOEIyMTgwMDM2MDAwMDAwMDBGODQ0Cis6MTAxMDMwMDA3MzBBMDNGOTAwMDAwMDAwMDAxODAwMDQwOTgwNzMzMkVECis6MTAxMDQwMDAwMDAwMDAwMDAwMjgwMDA4ODk4MDczMzcwMDAwMDAwMEJECis6MTAxMDUwMDAwMDAwMDA4MDA3MDA4NjMyNDEwMDAwMDAwMDA2MDA4QzdFCis6MTAxMDYwMDAwNzAwMzYzMjAwMDA1RjAxMjkwODAwODAwN0MwODVCMjAyCis6MTAxMDcwMDAwMDAwNjIwMTI4MTAwMDhDMDcwMDAwQjIwMDAwNjMwMTJDCis6MTAxMDgwMDAwMDEyMDA4NDA3MDAwMDkyMDAwMDAwMDAwMDEwMDA4Qzk1Cis6MTAxMDkwMDBGN0UwODIzQTAwMDA2MjAxMjgxODAwODAwNzQwOTBCMjExCis6MTAxMEEwMDAwMDAwNjMwMTAwMTIwMDg0MDcwMDAwOTIwMDAwMDAwMEFECis6MTAxMEIwMDAwMDEyMDA4NDI3RTQ4MjMyMDAwMDY2MDEwNDAwMDA4MEYwCis6MTAxMEMwMDA0MjYwM0RCMzE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOTQ1Cis6MTAxMEQwMDA2MzAxMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDAwMEVDCis6MTAxMEUwMDAwMDAwMDBGQzAyMDA4NTMyMDAwMDM2MTAxMjAwMDA1Qzk3Cis6MTAxMEYwMDA1MjgxMkNCNDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMkIwCis6MTAxMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDIwMDNCMzIwODQwNkEwMTNECis6MTAxMTEwMDBGMDAxMDAwODA4ODAzNkIyMDAwMDAwMDAwMDA0MDEzODI5Cis6MTAxMTIwMDAwOEMwNkUzMjAwMDAwMDAwRTAwMDAwRjQxRTQwRUYzQ0ZBCis6MTAxMTMwMDAwMDAwNzEwMTBCMDEwMDhDMDgwMDAwQjIwMDAwNkUwMTdDCis6MTAxMTQwMDBGMjAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGMDhBCis6MTAxMTUwMDAwRTAwM0EzMjAwMDA4MjAxRTIwMDAwODAwRTgwODM5MjhECis6MTAxMTYwMDAwMDAwNzEwMUYyMDEwMDc4QzkzQjNBQkMwMDAwN0IwMTJDCis6MTAxMTcwMDAwMjAxMDA4MDgyODA5N0JDMDAwMDAwMDAwMDAwMDBBOEVGCis6MTAxMTgwMDAwMjAwRTgzMjAwMDA3NjAxMDQwMDAwODAyMkEyMkFCQzlFCis6MTAxMTkwMDAwMDAwN0EwMTA0MTk4QjgwMDJDMDdDQkMwMDAwMDAwMEIyCis6MTAxMUEwMDAwMDAwMDA4QzE4QzA4ODNBMDAwMDAwMDAwMDAwMDBBODcxCis6MTAxMUIwMDAxMjgwMkEzQTAwMDAwMDAwMDAwMDAwQTgwMkJEMkEzMDc4Cis6MTAxMUMwMDAwMDAwNzQwMTA0MDEwMDgwRTJBMDJBQkMwMDAwN0YwMTNECis6MTAxMUQwMDAwMjAwMDA4MDgyQzA4OEJDMDAwMDAwMDBFMjAwMDAwODFECis6MTAxMUUwMDAwODAwMDAzMjAwMDAwMDAwMDAwMDAwQTgwMjgwODgzMkUxCis6MTAxMUYwMDAwMDAwMDAwMDAwMTg4QkNDMDcwMDAwMzIwMDAwMzIwMzEyCis6MTAxMjAwMDAwMDAwMDBEQzAzMDAwMDkyMDAwMDAwMDAwMDAwMDAzODM1Cis6MTAxMjEwMDAwODgwMkEzMjAwMDAwMDAwMDAwMDAwRjAwRTAwM0EzMjgwCis6MTAxMjIwMDAwMDAwMDAwMEUyMDAwMDgwMEU4MDJBMzIwMDAwMDAwMDcyCis6MTAxMjMwMDAwMDAwMDBBODAyODA4ODMyMDAwMDAwMDAwMDE4OEJDQzVCCis6MTAxMjQwMDAwNzAwMDAzMjAwMDAwMDAwMDAwMDAwREMwMzAwMDAzMjU0Cis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDc4MDgzMzIwMDAwMDAwMDUyCis6MTAxMjYwMDAwMDAwMDAwMDc5QzAyOTM3NjAyMDAwMDAwMDAwMDAwMDY1Cis6MTAxMjcwMDA4OTBEOTAzQTAwMDAwMDAwQ0EwMTAwRDgxMjgwMkQzQTcyCis6MTAxMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDAxMzIwMDAwMDAwMDI0Cis6MTAxMjkwMDAwMDA4MDAwMDA3MDA5MDMyMDAwMDAwMDAwMDEwMDAwMDZECis6MTAxMkEwMDAwNzQwRTgzMjAwMDAwMDAwMDAxODAwMDAwNzgwRTgzMjI0Cis6MTAxMkIwMDAwMDAwMDAwMDAwMDAwMEZDMDIwMDAwMzIwMDAwMzIwM0M5Cis6MTAxMkMwMDAxMjAxMDA0OEYyQzEzOEI0MDAwMDhFMDEwMDAwMDA4MDE1Cis6MTAxMkQwMDAwMjAwMDA5MDAwMDAwMDAwMDAzMDAwNzgwODgwNzIzMkE4Cis6MTAxMkUwMDAwNDAwMDAwMDAwMzgwMDU0QTg1QzE2MzgwQjAwMDAwMDExCis6MTAxMkYwMDAwMDM4MDAyQ0E4REMxNjM4MTQwMDAwMDAwMDAwMDAxQzg4Cis6MTAxMzAwMDA4ODREODUzQTAwMDAwMDAwMDAwMDAwMjAwODAwNzIzMjdECis6MTAxMzEwMDAwMDAwMDAwMDAwMDgwMDI0MDgwMDcyMzIwMDAwMDAwMEY1Cis6MTAxMzIwMDAwMDEwMDA2QzA4MDA3MjMyMDAwMDAwMDAwMDE4MDA0QzMxCis6MTAxMzMwMDAwODAwNzIzMjAwMDAzNjEwMDQyMDAwMTgwODAwNzJCMjUzCis6MTAxMzQwMDAwMDAwMDAwMDAwMjgwMDMwMDgwMDcyMzIwMDAwQTEwMUY3Cis6MTAxMzUwMDAwODNDMDAxNDE4ODA3MkJDMDAwMDAwMDAwMDAwMDAxNDVCCis6MTAxMzYwMDAxODQwODEzQzAwMDAwMDAwMDAwMDAwMDAwNzAwMDYzMjI5Cis6MTAxMzcwMDAwNzAwMDAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMzYxMDE1Cis6MTAxMzgwMDAwNDEwMDAwMDA3MDA4MkIyMDAwMDAwMDBDQTE5MDAwMDJCCis6MTAxMzkwMDAwNzQwODIzMjAwMDBBMDAxMTIwMDAwNDBGMkMxMzhCNEMwCis6MTAxM0EwMDAwMDAwMDAwMDAwMDAwMEQ4MDI0MDAwMzIwMDAwMDAwMEYxCis6MTAxM0IwMDAwMDAwMDA2NDc4QzAyOTM3MDIxMDAwMDAwMDAwMDA2NEJCCis6MTAxM0MwMDA4ODREODYzQTAwMDAwMDAwMDAwMDAwODAwODAwMDAzMkNFCis6MTAxM0QwMDAwMDAwMDAwMDAwMDAwMDQwMDgwMDAwMzIwMDAwMDAwMDkzCis6MTAxM0UwMDA0RDAwMDAwMDc3QTA4MTNFMDAwMDAwMDAwMDA4MDAwMEQyCis6MTAxM0YwMDAwNzQwODYzMjAwMDAzNjEwMDQxMDAwMDAwN0MwODZCMjk1Cis6MTAxNDAwMDAwMDAwMDAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwQjkwMThECis6MTAxNDEwMDAwNDAwMDAxQ0Q4RTA4MUJDMDAwMDAwMDAwMDAwMDA2NDUzCis6MTAxNDIwMDBEODYwODYzQTAwMDBBRjAxMDQwMDAwODA3MjgwMkRCQ0I1Cis6MTAxNDMwMDAwMDAwQUQwMTEyMDAwMDQwMDJDMDM4QjIwMDAwQjUwMTRBCis6MTAxNDQwMDAwMDAwMDBEODEyODAyRDlBMDAwMEFGMDExMjAwMDA0MDY5Cis6MTAxNDUwMDBGMkMxMzhCNDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTJFCis6MTAxNDYwMDAwMDAwQjQwMTA0MDEwMDgwMDI4MDJEQkMwMDAwQjAwMTI2Cis6MTAxNDcwMDA2NzAwMDBGOEEyODAyRkI1MDAwMDM2MTAxMjAwMDBFOEM3Cis6MTAxNDgwMDAwMkMwMjFCMjAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjdCCis6MTAxNDkwMDAwMDAwQjcwMTA0MDAwMDE4RDhBMDgxQkMwMDAwQTYwMTFDCis6MTAxNEEwMDAwMDAwMDA2Q0Q4RTA4NjlBMDAwMDVEMEUwMDAwMDA0NDQ5Cis6MTAxNEIwMDAwODgwMkRGMjAwMDBBNjAxMDAwMDAwMzAwODAwMDA5MjE0Cis6MTAxNEMwMDAwMDAwQjkwMTEyMDAwMDQwRjJDMTM4QjQxODAwMzYwMDIzCis6MTAxNEQwMDAwMDAwMDBGODczMEEwM0Y5MDAwMEJFMDEwNDAxMDA4MDU3Cis6MTAxNEUwMDAwMjgwMkRCQzAwMDBCQTAxNjcwMDAwRjhBMjgwMkZCNTcxCis6MTAxNEYwMDAwMDAwMzYxMDEyMDAwMEU4MDJDMDIxQjIwMDAwQzkwMTRECis6MTAxNTAwMDAwNDAxMDA4MDAyMDA4NEJDMDAwMDAwMDAwMDAwMDBENDQwCis6MTAxNTEwMDAwMjQwMDAzMjAwMDAwMDAwMDAwMDAwQTQyMjQwODUzQTkyCis6MTAxNTIwMDAwNDAwMDAwMDAwMTgwMDQwODhDRDc0MzYwMDAwMDAwMDYwCis6MTAxNTMwMDAwMDAwMDA0MDI4MDA4NDM3MDAwMDAwMDAwMDAwMDBENEI0Cis6MTAxNTQwMDAwMjAwMDAzMjE0MDBDOTAxMDQwMDAwMUM4ODBEODRCQzk0Cis6MTAxNTUwMDAwMDAwMDAwMDAwMDAwMDc4MDk2MTg1M0E4MDAwMzYxMDI0Cis6MTAxNTYwMDAwNjAxMDA4MDgyOEQ5N0JDMDAwMDAwMDAwMDAwMDA2NDJFCis6MTAxNTcwMDBEODYwODYzQTAwMDBCNTAxMDAwMDAwRDgwMjQwMDA5MjExCis6MTAxNTgwMDAwMDAwQ0IwMTA0MDAwMDE4RDhBMDgxQkMwMDAwQ0QwMUYwCis6MTAxNTkwMDAwMDAwMDA2Q0Q4RTA4NjlBMDAwMDVEMEUwMDAwMDA0NDU4Cis6MTAxNUEwMDAwODgwMkRGMjAwMDAwMDAwMDAwMDAwMzAwODAwMDAzMjJBCis6MTAxNUIwMDAwMDAwMDAwMDAwMDAwMEQ0MDI0MDAwMzIwMDAwMDAwMEUzCis6MTAxNUMwMDAwMDAwMDBBNDIyQzA4MjNBMDAwMDAwMDAwMDAwMDAzQzlECis6MTAxNUQwMDBCODYwODUzQzA0MDBEMzAxODEwMDAwNjA4OENENzRCNkZBCis6MTAxNUUwMDAwMDAwMDAwMDAwMDQwMDI4RjhBMDc1M0MwMDAwRDQwMUIxCis6MTAxNUYwMDAwMDA4MDA3NDA4ODA3NTkyMDAwMDAwMDAwMDA4MDAyOEIwCis6MTAxNjAwMDBGOEEwNzUzQzAwMDAwMDAwMDAwMDAwMjgwOEExODIzQzAyCis6MTAxNjEwMDAwMDAwMDAwMDAwMDAwMEE0RjI2MDJBM0EwMDAwMDAwMDcwCis6MTAxNjIwMDAwMDA4MDA0ODA4MDA3NTMyMDAwMDAwMDAwMDIwMDA3QzFGCis6MTAxNjMwMDAwODgwNzUzMjA5MDBEQTAxMDQxQTAwNzA4OENENzRCMDkwCis6MTAxNjQwMDAwOTAwMDAwMDAwMUEwMDRDODdDRDc0MzE3RjAwMDAwMEIzCis6MTAxNjUwMDAwMDAwMDA2NDg4NEQ4NjMxMDAwMDAwMDAwMDAwMDA2NDM2Cis6MTAxNjYwMDAyODQwODYzQTAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjA2Cis6MTAxNjcwMDAwMDAwMDAwMDAwMTAwMDAwMDc0MDg2MzIwMDAwMDAwMDVCCis6MTAxNjgwMDAwMDAwMDBEODAyODAwMDMyMDAwMDAwMDAwMDEwMDAwMEJFCis6MTAxNjkwMDA1NzYxODYzQTAwMDBFMzAxMTIwMDAwQzgwMjAwMjBCMjQwCis6MTAxNkEwMDAwMDAwRTYwMTEyMDEwMDVDMDg4MDIwQjIwMDAwMzYxMDQ0Cis6MTAxNkIwMDAxMjAwMDA2MDAyODAyQ0IyMDAwMDBFMDEyQTAxMDBENDRBCis6MTAxNkMwMDAwMjAwMDBCMjE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOURECis6MTAxNkQwMDAwMDAwMEYwMTAwMDAwMEY4MUY4MEZGOUEwMDAwMDAwMENBCis6MTAxNkUwMDAwMDAwMDBENDAyNDAwMDMyMDgwMDAwMDAwMDAwMDAwMEFBCis6MTAxNkYwMDA4OENEODUzNzAwMDAwMDAwMDAwMDAwMUNFOEExODIzRTc0Cis6MTAxNzAwMDAwMDAwMDAwMDAwMDAwMEE0MjI0MDg1M0EwMDAwMDAwMDE0Cis6MTAxNzEwMDAwMDA4MDA1MDA3ODA4NDMyMDAwMEVEMDEwNDAxMDA4MEMxCis6MTAxNzIwMDA3MkEwODJCQzAwMDAwMDAwMDAxQTAwNENDN0UxNzQzMkI1Cis6MTAxNzMwMDAwMDAwMDAwMDAwMDAwMDY4MDhFMTgxM0EwMDAwRjAwMUFDCis6MTAxNzQwMDA5MDAxMDA3OEY5QTE4NkJBMDAwMDAwMDAwMDAwMDA3ODNFCis6MTAxNzUwMDAxOTgwOTczQTAwMDAwMDAwMDAyMDAwNTgwNzgwOTczMjU3Cis6MTAxNzYwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAwMzIwMDAwMDAwMEVECis6MTAxNzcwMDAwMDAwMDAwMDA3MDA4NDMyMDAwMDAwMDA0MDA4MDAwMDY0Cis6MTAxNzgwMDA1NzIxODAzQTAwMDBGNDAxMTIwMDAwNENGMkMxMzhCNDM1Cis6MTAxNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDgyMTgwM0EwMDAwMDAwMDY2Cis6MTAxN0EwMDAwMDAwMDAwNDA4QzA4MTMyMDAwMDAwMDA1MTAwMDBEODkxCis6MTAxN0IwMDAwMkMwMDAzMjAwMDAwMDAwMDAwMDAwRDQwMjAwMDAzMjJECis6MTAxN0MwMDAwMDAwMDAwMENCMTkwMDIwMDcwMDAwMzIwNzAwRkMwMUQ4Cis6MTAxN0QwMDAyQjAxMDA4NDc4MEEwMkI5MDAwMDAwMDBDQjAwMDA4NENECis6MTAxN0UwMDAxODQxODgzNDAwMDAwMDAwNEQwMDAwMDA3N0EwODEzRUMxCis6MTAxN0YwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMzYxMEUyCis6MTAxODAwMDAwNDEwMDAwMDA3QzA4NkIyMDAwMDAwMDAwMDE4MDAwMEFECis6MTAxODEwMDAwN0MwODQzMjAwMDAzNjEwOUYwMDAwMjhEOEEwODJCQzg4Cis6MTAxODIwMDAwMDAwMTQwMjA0MDAwMDFDRDhFMDgxQkMwMDAwMDgwMjgzCis6MTAxODMwMDAyRDAwMDAwMEQ4MjA4MEJBMDAwMDA1MDIxMjAxMDBFODQ3Cis6MTAxODQwMDAwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTQ0Cis6MTAxODUwMDAwMDAwMDcwMjA0MDEwMDgwMjI4MDJEQkMwMDAwMDgwMjY1Cis6MTAxODYwMDBDRDAxMDBEODAyNDA4NDkyMDAwMDA0MDIwMDAwMDBGODdDCis6MTAxODcwMDBBMjgwMkY5NTAwMDAwQjAyMDQwMDAwODA3MjgwMkRCQzE2Cis6MTAxODgwMDAwMDAwMDkwMjEyMDAwMDQ0MTJFMjM4QjIwMDAwMTIwMjA1Cis6MTAxODkwMDAwMDAwMDBEODEyODAyRDlBMDAwMDAwMDAwMDAwMDA4NDkzCis6MTAxOEEwMDBGODQxODgzNDAwMDAwQzAyMTIwMDAwNDQxMkUyMzhCMjAxCis6MTAxOEIwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMTEwMjU2Cis6MTAxOEMwMDAwNjAxMDA4MDIyODAyREJDMDAwMDBEMDI2NzAwMDBGODk4Cis6MTAxOEQwMDBBMjgwMkZCNTAwMDAwRTAyMDAwMDAwRTgwMkMwMjE5Mjk1Cis6MTAxOEUwMDAwMDAwMDAwMDAwMDAwMEQ4MDJDMDAwMzIwMDAwNUQwRUMxCis6MTAxOEYwMDAwMDAwMDA0NDA4ODAyREYyMDAwMEZBMDEwMDAwMDAzMEQyCis6MTAxOTAwMDAwODAwMDA5MjAwMDAxQTAyODAwMDAwODBEMjgwMkZCNkVBCis6MTAxOTEwMDAwMDAwMTcwMjEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMEQwCis6MTAxOTIwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDE5MDIwNDAxMDA4MEE2Cis6MTAxOTMwMDAyMjgwMkRCQzAwMDAxQTAyMDAwMDAwRDgwMjQwODQ5MkQwCis6MTAxOTQwMDAwMDAwMTYwMjAwMDAwMEY4QTI4MDJGOTUwMDAwMDAwMEExCis6MTAxOTUwMDBDRDAwMDA4NEY4NDE4ODM0MDAwMDFCMDIxMjAwMDA0NENFCis6MTAxOTYwMDAxMkUyMzhCMjAwMDAwMDAwMDAwMDAwRDQwMjQwMDAzMjUxCis6MTAxOTcwMDAwMDAwMDAwMDAwMDAwMEE0MjJDMDgyM0EwMDAwMjMwMjAwCis6MTAxOTgwMDAwNDAxMDA4MDQyMDA4NkJDMDAwMDAwMDAwMDA4MDA1OEVFCis6MTAxOTkwMDAwNzQwODczMjAwMDAyMjAyOEYwMTAwNzQxODQwODdCQTg2Cis6MTAxOUEwMDAwMDAwMDAwMDAwMDAwMDc0MDgwMDAwMzIwMDAwMjUwMjYyCis6MTAxOUIwMDAwMDA0MDA1OEY3QTA4NjlBMDAwMDAwMDAwMDAwMDA3ODlDCis6MTAxOUMwMDBGOUEwODYzQTI4MDAwMDAwMDAwODAwNTg4NzhEOTczQzRGCis6MTAxOUQwMDAwMDAwMDAwMDAwMDAwMEQ4MDI0MDAwMzIxODAwMDAwMEEzCis6MTAxOUUwMDAwMDAwMDAwMEI3NjA4NTM5MDgwMDAwMDAwMDA4MDAwMDEyCis6MTAxOUYwMDA4N0NEODUzNzAwMDAyODAyMTIwMDAwNENGMkMxMzhCNEIwCis6MTAxQTAwMDAwMDAwMDAwMDAwMDAwMDQ4MThBMDg0M0EwMDAwMDAwMDE4Cis6MTAxQTEwMDAwMDAwMDBENDAyMDAwMDMyMDAwMDAwMDAwMDAwMDA4MDNFCis6MTAxQTIwMDA1N0ExODYzQTQxMDAwMDAwMDAwNjAwOEMwNzAwMzYzMkJDCis6MTAxQTMwMDAwMDAwMDAwMDAwMDgwMDgwMDdDMDg1MzIwMDAwMDAwMEEwCis6MTAxQTQwMDAwMDEwMDA4QzA3NDA4NTMyMDAwMDAwMDAwMDAwMDBEODI0Cis6MTAxQTUwMDAwMjgwMDAzMjAwMDAzNjEwMDQwMDAwNTgwODgwNzFCMjg1Cis6MTAxQTYwMDAwMDAwMDAwMDAwMDAwMDgwMDg4MDAwMzIxODAwMzYwMEVFCis6MTAxQTcwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDM1MDIwNDAxMDA4MDM5Cis6MTAxQTgwMDAwMjgwMkRCQzAwMDAzMjAyMDAwMDAwRjhBMjgwMkY5NUQ5Cis6MTAxQTkwMDAwMDAwMzIwMjA0MDEwMDgwMTgwMDg4QkMwMDAwMzgwMkY3Cis6MTAxQUEwMDA5MDE5MDA1OEU4OUM4NUJBMDAwMDAwMDAwMDAwMDA1ODFBCis6MTAxQUIwMDAxODgwODUzQTAwMDAwMDAwMDAxODAwODAwNzg1ODUzMEY2Cis6MTAxQUMwMDAwMDAwM0QwMjA0MDEwMDgwNDIwMDg2QkMwMDAwMDAwMENFCis6MTAxQUQwMDAwMDAwMDBEODAyNDAwMDMyMDAwMDAwMDAwMDAwMDAwOEIyCis6MTAxQUUwMDA4OTgwNzEzNzAwMDAzRTAyMDAxMjAwODQyN0U0ODI5MjUwCis6MTAxQUYwMDAwMDAwMDAwMDAwMTIwMDg0MDcwMDAwMzIwMDAwNDIwMkQzCis6MTAxQjAwMDAyNzAwMDBGQzAyMDA4NUIyMDAwMDQyMDIwNDAwMDA4MEIxCis6MTAxQjEwMDA0MjYwM0RCMzE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOUVBCis6MTAxQjIwMDAzRTAyMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMzYxMDZGCis6MTAxQjMwMDAxMjAwMDA1QzUyODEyQ0I0MDAwMDQ1MDIwNDAxMDA4MEI4Cis6MTAxQjQwMDAwMjgwODJCQzAwMDA2ODAxMDAwMDAwRDQwMjAwMDA5MjA0Cis6MTAxQjUwMDAwMDAwNDgwMjA0MDEwMDE4RDhBMDgxQkMwMDAwNUQwRUZFCis6MTAxQjYwMDAwMDAwMDA0NDA4ODAyREYyMDAwMEUwMDFDNzAxMDAzMEIxCis6MTAxQjcwMDAwODAwMDA5MjAwMDBFMDAxQzcwMTAwNkNEOEUwODY5QURFCis6MTAxQjgwMDAwODAwMDAwMEM2MDEwMEY4OTM0MDAxMzkwMDAwMzIwMzRDCis6MTAxQjkwMDA4MDAxODA4MDMyMEI2QUI2MDAwMDBDMEUwMDAwMDAzQzExCis6MTAxQkEwMDAwMzAwMzhGMjAwMDA0RTAyMDQwNjAxODAwMkMwNkVCQzQxCis6MTAxQkIwMDAwMDAwMzEwMzAwMDYwMUVDNTZFMDZFOUEwMDAwMDAwMEMwCis6MTAxQkMwMDBDNDA3MDFFQzU2RTA2RTNBMDhDMDRGMDIxMjAwMDA0MDE0Cis6MTAxQkQwMDBBMkNEMzlCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOUVDCis6MTAxQkUwMDAwMDAwMzYxMDAzQjgwMDAwMDlDMDZFQkQ1MzAyMDAwMEFCCis6MTAxQkYwMDAwMDAwMDA4ODgyMEQ5MDNBMkYwMDdDMDUwMDAwMDAxQzM4Cis6MTAxQzAwMDAwODAwMzY5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEFDCis6MTAxQzEwMDAyQzAwN0MwNTAwMDAwMDFDMDgwMDM2OTIwMDAwMzYxMEU1Cis6MTAxQzIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MERDCis6MTAxQzMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEJBCis6MTAxQzQwMDAzODAwN0MwNTAwMDAwMDFDMDgwMDM2OTIzOTAwN0MwNTM1Cis6MTAxQzUwMDAwMDAwMDAxQzA4MDAzNjkyMDgwMDAwMDAwMDAwMDBGODk4Cis6MTAxQzYwMDA5MzQwMDEzOTAwMDAwQzBFMDAwMDAwM0MwMzAwMzhGMkU0Cis6MTAxQzcwMDAwMDAwMDAwMDAwMDAwMEY4NDI4MDJGMzQwOEMwNUUwMjFGCis6MTAxQzgwMDAxMjAwMDA0MEEyQ0QzOUIyMTgwMDM2MDAwMDAwMDBGODYyCis6MTAxQzkwMDA3MzBBMDNGOTAwMDAwMDAwMDAwNDAxNzgwOUMwNkUzMkU1Cis6MTAxQ0EwMDAwMDAwMDAwMDAwNjIwMUVDMDY4MDk3MzIwMDAwMDAwMDk2Cis6MTAxQ0IwMDAwMDA2MDFFQzA2NDAwMDMyMDAwMDYzMDJCNTAwMDBEOEM3Cis6MTAxQ0MwMDAwMjAwMDBCMjAwMDAwMDAwQTUwMDgwQTAzNjBCNkEzNEJDCis6MTAxQ0QwMDAwMDAwMDAwMDAwMzAwMkU4MDZDMDJDMzIwMDAwMDAwMEM2Cis6MTAxQ0UwMDAwMDE4MDFFMDA2MDAwMDMyMDAwMDAwMDAwMDAwMDBGOENCCis6MTAxQ0YwMDA4Mjg1MkYzMDAwMDA3RDA1MDAwMDAwMUMwODAwMzY5MjEwCis6MTAxRDAwMDAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwNkMwMjU4Cis6MTAxRDEwMDA4MDAwODA4MDMyMEI2QUI2MDAwMDMyMDMwMDAwMDA4MDMxCis6MTAxRDIwMDAwMjAwMDA5MDAwMDAwQzBFMDAwMDAwMzgwMzAwMzhGMkEyCis6MTAxRDMwMDAwMDAwNkYwMjA0MDIwMTgwMDJDMDZFQkMwMDAwMzEwMzhCCis6MTAxRDQwMDAwMDAyMDFFQzU2RTA2RTlBMDAwMDAwMDBDMDAzMDFFQ0I2Cis6MTAxRDUwMDA1NkUwNkUzQTAwQzA3MDAyMTIwMDAwNDBBMjhEMzlCMjA3Cis6MTAxRDYwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwN0MwMjM2Cis6MTAxRDcwMDAzODI4MDAxODA5MDA2RUIyMDAwMDc1MDIwNDIxMDEwODFECis6MTAxRDgwMDA2OTI0NkVCQzAzMDA3RDA1MDAwMDAwMUMwODAwMzY5MjJCCis6MTAxRDkwMDAwMDAwNzkwMjAyMzAwMDgwODI5QjkwQkMwMDAwNzgwMjMzCis6MTAxREEwMDAwNjAzMDE4MDEyQzA2RUJDMDQwMDdEMDUwMDAwMDAxQzBCCis6MTAxREIwMDAwODAwMzY5MjA1MDA3RDA1MDAwMDAwMUMwODAwMzY5MkUwCis6MTAxREMwMDAwMDAwN0IwMjA2MDMwMTgwMTJDMDZFQkMwQjAwN0QwNTgzCis6MTAxREQwMDAwMDAwMDAxQzA4MDAzNjkyMEMwMDdEMDUwMDAwMDAxQzZECis6MTAxREUwMDAwODAwMzY5MjAwMDA3RTAyMDQyMTAxMDg2OTI0NkVCQ0JFCis6MTAxREYwMDAwMzAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwODIwMkVFCis6MTAxRTAwMDAwMjMwMDA4MDgyOUI5MEJDMDAwMDgxMDIwNjAzMDE4MEFBCis6MTAxRTEwMDAxMkMwNkVCQzA0MDA3RDA1MDAwMDAwMUMwODAwMzY5MjU0Cis6MTAxRTIwMDAwNTAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwODQwMkI5Cis6MTAxRTMwMDA5RjMxMDEwQzY5MjQ2RUJDMDAwMDAwMDAwMDAwMDAwQzAyCis6MTAxRTQwMDAwOTAwMDAzMjAwMDA4ODAyMDQzMTAwMDQ4OTlCOTBCQzI0Cis6MTAxRTUwMDAwMDAwODcwMjA2MDMwMTgwMTJDMDZFQkMyMDAwN0QwNUQxCis6MTAxRTYwMDAwMDAwMDAxQzA4MDAzNjkyMjEwMDdEMDUwMDAwMDAxQ0M3Cis6MTAxRTcwMDAwODAwMzY5MjAwMDA4QTAyMDQwMjAxODAxMkMwNkVCQzgzCis6MTAxRTgwMDAyMjAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwOEMwMjM0Cis6MTAxRTkwMDAwNDAxMDAwMDM5QTQ5MEJDMjMwMDdEMDUwMDAwMDAxQzUzCis6MTAxRUEwMDAwODAwMzY5MjI0MDA3RDA1MDAwMDAwMUMwODAwMzY5MkQwCis6MTAxRUIwMDAwODAwMzYxMDBDMDAwMEY4NjM0MDAxQjkxMDAwOTEwMkQwCis6MTAxRUMwMDBDNTAxMDBDQzAyMjAxNTk4MDgwMEVEMDIwQzAwMDBGOEI2Cis6MTAxRUQwMDA0MzQwMDFCOTEwMDAwMDAwQzUwMTAwQ0MwMjIwMTUzOEI0Cis6MTAxRUUwMDAwMDAwMEMwRTAwMDAwMDNDMDMwMDM4RjIwMDAwOTQwMkQ5Cis6MTAxRUYwMDAzNjAxMDA1QzA4MDU4MEIwMEYwMDdEMDUwMDAwMDAxQzY1Cis6MTAxRjAwMDAwODAwMzY5MjEwMDAwMDAwMDAyQzAyMDBBOURCODUzOTgxCis6MTAxRjEwMDAwMDAwOTUwMjEyMDAwMDU0MDJBNDM4QjIwMDAwMDAwMDM0Cis6MTAxRjIwMDAwMDA4MDI4QzA4QzA2RTMyMDAwMDAwMDAwMDBDMDI5ODBECis6MTAxRjMwMDAyODgwNkUzNzAwMDAwMDAwMDAwMDAwOUMzODIyMTQzNzEzCis6MTAxRjQwMDAwMDAwOUUwMjA0MzAwMDI4MDgwMDZFQjIwMDAwMzYxMDI3Cis6MTAxRjUwMDAwNDEwMDA2QzA4MDA2RUIyMDAwMDAwMDAwMDE4MDA0Qzc1Cis6MTAxRjYwMDAwODAwNkUzMjAwMDAzNjEwMDQyMDAwMTgwODAwNkVCMjFGCis6MTAxRjcwMDAwNTAwQTEwMjAwMzgwMjAwNzhFMTZFOTkwMDAwMDAwMDFGCis6MTAxRjgwMDA1MTAwMDBEODAyMDAwMDMyMDAwMDAwMDAwMDM4MDI3ODQyCis6MTAxRjkwMDAwOUMwNkUzMjA1MDAwMDAwNjgwODAwMDA3N0ExOTczOTdCCis6MTAxRkEwMDAwMDAwQTMwMjEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDhGCis6MTAxRkIwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDA1NDU0MDFGQzBCCis6MTAxRkMwMDAwMkMwNkUzMjE0MTBBNzAyMDQwMDAwODBBMjBENzJCMDhECis6MTAxRkQwMDAwMDAwNTEwRjAwMDAwMDI4MDlDMDAyRjIwRTAwN0QwNTJDCis6MTAxRkUwMDAwMDAwMDAxQzA4MDAzNjkyMDAwMEI2MDIzMzE1MDBBNDYxCis6MTAxRkYwMDAwMkMwNzJCMjAwMDBFQTAyODAwMTAwODBCMjAxNzJCNjMzCis6MTAyMDAwMDAwMTAxQUQwMjA0MjkwMDgwODI4RDc0QkMwODBBRUEwMjM1Cis6MTAyMDEwMDAwNDJEMDA4MDgyOEQ3NEJDMDAwMDAwMDAwMDMwMDA3QzI0Cis6MTAyMDIwMDAwODAwNzUzMjAwMDBCNDAyMDAzODAwODgxODAwNzU5QzYyCis6MTAyMDMwMDAwODBBRUEwMjA0MjkwMDgwODI4RDc0QkMxMDAwMDAwMEE2Cis6MTAyMDQwMDAwMDJDMDA3Qzg4OEQ3NTM3MDAwMDAwMDAwMDMwMDA3QzdCCis6MTAyMDUwMDA2OEREODczMjAwMDBCMzAyOUYzOTAwODgxODgwNzVCQ0E0Cis6MTAyMDYwMDAxMDAwMDAwMDAwMzQwMDg4ODg4RDc1MzcwMDAwQjQwMjJECis6MTAyMDcwMDAwMDAwMDA4ODE4ODA4ODlDMTAwMDAwMDAwMDM0MDA4ODUwCis6MTAyMDgwMDA2ODlEODgzOTAwMDBCNzAyOUZGMTAxODA4MkRCODdCQzIwCis6MTAyMDkwMDAwMDAwRUEwMjAwMDAwMDgwMDIwMDAwOTAwMDAwRUEwMjU2Cis6MTAyMEEwMDA4MDAwMDA4MEIyMDE3MkI2MDAwMDAwMDAwMDA4MDA0ODA1Cis6MTAyMEIwMDAwODAwNzUzMjAwMDAwMDAwMDAxMDAwNzAwODAwNzUzMjQyCis6MTAyMEMwMDAwMDAwMDAwMDAwMUMwMDc0MzhBMjc1MzcwMDAwQkMwMjNDCis6MTAyMEQwMDA4MzFCMDA3ODA4QzA3NEIyMDAwMDAwMDAwMDAwMDBGODA0Cis6MTAyMEUwMDBDMjgwMkYzNDAwMDBDQzAyOUY3ODAxODBDMjIxNkVCQ0Q4Cis6MTAyMEYwMDAwMDAwQzAwMjlGOTkwMTY0ODgxQjg3QkMwMDAwQ0QwMkNDCis6MTAyMTAwMDA5RjY4MDE2NDg4NUI4NkJBMDAwMDAwMDAwMDAwMDA2NERDCis6MTAyMTEwMDAwODAwMDAzMjAwMDAwMDAwMDAxNjAwQTQwMkMwNzIzMjY1Cis6MTAyMTIwMDAwMDAwMDAwMDAwM0MwMkE0QjI1QjJBM0EwMDAwMDAwMDVDCis6MTAyMTMwMDAwMDNBMDI3ODA5QzA2RTMyMDAwMENFMDIwODAxMDAwNEE1Cis6MTAyMTQwMDBFOEE1NzVCQzEwMDBFQTAyMEIwMTAwMUMwODAwMzZCMkJECis6MTAyMTUwMDAwMDAwQ0MwMjA0QTEwMTgwODI5Qjg0QkMwMDAwN0QwNUFDCis6MTAyMTYwMDA5Rjk4MDE4MEMyMjE2RUJDMDAwMDdEMDUwNkIxMDE4MEYwCis6MTAyMTcwMDA4MjVCODdCQzAwMDBFOTAyMEIwMTAwODAwMjAwMDBCMDE2Cis6MTAyMTgwMDAwMDAwQ0QwMjA0OTkwMTgwQzIyMTZFQkMwMDAwRTcwMjZDCis6MTAyMTkwMDAwMkQ0MDE4MDkyRkI2RUJDMTYwMDdEMDUwMDAwMDAxQzdECis6MTAyMUEwMDAwODAwMzY5MjE3MDA3RDA1MDAwMDAwMUMwODAwMzY5MkRBCis6MTAyMUIwMDAxQzAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwRDAwMkMzCis6MTAyMUMwMDAwNEExMDE4MDgyOUI4NEJDMDAwMEQ3MDIwNkE4MDE4MDg0Cis6MTAyMUQwMDA4MjVCODBCQzAwMDBENDAyMDRBOTAxODAwMjAwNkVCQ0I2Cis6MTAyMUUwMDAwMDAwRTgwMjA0QTEwMTgwODI5Qjg0QkMwMDAwRTgwMjk4Cis6MTAyMUYwMDAwNDAxMDA4MDEyNDA4MEJDMTQwMDdEMDUwMDAwMDAxQzFBCis6MTAyMjAwMDAwODAwMzY5MjAwMDBFODAyOUZBMDAxNzgyOTIxNkVCQ0U4Cis6MTAyMjEwMDAwMDAwRTgwMjAyMDEwMDgwMTJBMDk3QkMwMDAwQ0MwMjdFCis6MTAyMjIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUzMDIwNDAwMDA4MDMzCis6MTAyMjMwMDAwMjgwODJCQzAwMDBEQzAyMDIwMDAwODBBMjYwODBCQzQwCis6MTAyMjQwMDAwNjAwN0QwNTJDMDEwMDFDMDgwMDM2QjIwMEMwRTAwMjJCCis6MTAyMjUwMDAwNDAxMDA4MEEyOEQyRkIwMDYwMDdEMDUwMDAwMDAxQzQ3Cis6MTAyMjYwMDAwODAwMzY5MjAwMDBFMDAyMDQwMDAwODBBMjYwODBCQ0ZBCis6MTAyMjcwMDAwMDAwREYwMjA2MDMwMTgwMTJDMDZFQkMwOTAwN0QwNTZDCis6MTAyMjgwMDAwMDAwMDAxQzA4MDAzNjkyMEEwMDdEMDUwMDAwMDAxQ0JBCis6MTAyMjkwMDAwODAwMzY5MjAwMDBFMjAyMDYwMzAxODAxMkMwNkVCQzA0Cis6MTAyMkEwMDAwNzAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwODAwN0QwNTJGCis6MTAyMkIwMDAwMDAwMDAxQzA4MDAzNjkyMDIwMDdEMDUzODAxMDAxQzU5Cis6MTAyMkMwMDAwODAwMzZCMjAwMDBFNjAyMDIwQzAyODBBMjVCODBCQzZECis6MTAyMkQwMDAxRjAwN0QwNTAwMDAwMDFDMDgwMDM2OTIxRTAwN0QwNUQxCis6MTAyMkUwMDAwMDAwMDAxQzA4MDAzNjkyMDAwMEVCMDIwMDAwMDAyOEVECis6MTAyMkYwMDAwOTQwMDA5MjAwMDBFQjAyMDAwMDAwMjgwOTgwMDA5MkQzCis6MTAyMzAwMDAwMDAwRUIwMjAwMDAwMDI4MDlDMDAwOTIwMDAwRUIwMjcwCis6MTAyMzEwMDAwMDAwMDAyODA5MDAwMTkyMEUwMDUxMEYwMDAwMDAxQzZGCis6MTAyMzIwMDAwODAwMzZGMjAwMDA3RDA1MDAwMDAwODAwMjAwMDA5MEU5Cis6MTAyMzMwMDAxMDAwMzYxMDJBMDAwMENDMDIyMDE1QjgwMDAwMEMwRTQ4Cis6MTAyMzQwMDAwMDAwMDAzQzAzMDAzOEYyMUQwMEYxMDI4MDAxMDA3ODFCCis6MTAyMzUwMDAwOUUwMDBCODFEMDA3RDA1MDAwMDAwMUMwODAwMzY5MjUxCis6MTAyMzYwMDAxNTAwN0QwNTAwMDAwMDFDMDgwMDM2OTIwMDAwMDAwMEVBCis6MTAyMzcwMDAwMDAwMDAxQ0E4MDUyODMwMDgwMDAwMDAwMDAwMDBGODNDCis6MTAyMzgwMDA4MzQwMDEzOTAwMDAzRTAzODAwMTgwODAzMjBCNkFCNjMxCis6MTAyMzkwMDAwMDAwMEMwRTAwMDAwMDM4MDMwMDM4RjI3RTA1MDAwMDNCCis6MTAyM0EwMDAwMDAwMDA4ODgyQ0Q4MTNBMDAwMEY5MDIxRDQxMDI1Q0U0Cis6MTAyM0IwMDBGODAxNjhCNDQxMDAzMTAzMDAwMDAwRjhBMjhEMkY5MUFDCis6MTAyM0MwMDAxMDAwMDAwMEQwMkMwMjAwQTlEQjg1MzkwMDAwOTYwMjI1Cis6MTAyM0QwMDAxMjAxMDA1NDAyQTQzOEIyMDAwMEZBMDIwMDAwMDA4MDhBCis6MTAyM0UwMDAwMjAwMDA5MDAwMDAwMDAzMDRCMDAwODAwMjAwNkVCQ0Y4Cis6MTAyM0YwMDAwMDAwMDAwMzgwQjkwMDgwODI4MDZFQjYwMDAwMjUxMEM2Cis6MTAyNDAwMDAwMDc4MDE2MDA4MDA2RUYyMzAwMDdDMDVENzAwMDAxQ0U3Cis6MTAyNDEwMDAwODAwMzY5MjAwMDAwMjAzODAwMTAwODBEMjgxMkZCNkFFCis6MTAyNDIwMDAzMTAwN0MwNUQ3MDAwMDFDMDgwMDM2OTIwMDAwMDQwMzMwCis6MTAyNDMwMDA4MDAxMDA4MDQyODEyRkI2MzUwMDdDMDVENzAwMDAxQzRBCis6MTAyNDQwMDAwODAwMzY5MjAwMDAxMTAzMDRBODAxMDgwOTAwNkVCMkNBCis6MTAyNDUwMDAwMDAwMDAwMDAwMjAwMjA4ODk5QjkwM0UwMDAwMDAwMDYwCis6MTAyNDYwMDAwMEEwMDEwODg5OUI5MDNBMDAwMDExMDM5Rjg4MDEwODkxCis6MTAyNDcwMDA4OTlCOTBCQzAwMDAwMDAwMDAzNDAyMDAwOUMwNkUzRDQyCis6MTAyNDgwMDAwMDAwMDAwMDAwMEMwMjA0MDlBNDZFMzcwMDAwMEQwM0Q4Cis6MTAyNDkwMDAwMjAwMDA4MDEyQTQ5MEJDMDAwMDAwMDAwMDAwMDAwOEIwCis6MTAyNEEwMDAxOTgwOTAzNzAwMDAxMTAzMDIwMTAyODA4MjlCOTBCQ0NBCis6MTAyNEIwMDAzMTAwN0MwNUQ3MDAwMDFDMDgwMDM2OTIwMDAwMTEwMzkzCis6MTAyNEMwMDAwNEIwMDA4MDAyMDA2RUJDMDAxMjExMDMwNDAxMDA4MDAxCis6MTAyNEQwMDBBMjhEMkZCMDMyMDA3QzA1RDcwMDAwMUMwODAwMzY5Mjc4Cis6MTAyNEUwMDAwMDAwMzEwMzAwMDAwMEY4NzI4MTJGOTUwMDAwMDAwMDA5Cis6MTAyNEYwMDAwMDAwMDBGODQyODAyRjM0MDhDMDUwMDIxMjAxMDA0MDUyCis6MTAyNTAwMDBBMkNEMzlCMjAwMDAxMzAzMDAwMDAwODAwMjAwMDA5MDQ5Cis6MTAyNTEwMDAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwM0UwMzZECis6MTAyNTIwMDA4MDAxODA4MDMyMEI2QUI2MDAwMDAwMDAwMDAwMDAxNEI5Cis6MTAyNTMwMDAwODQwOTAzMjAwMDAwQzBFMDAwMDAwMzgwMzAwMzhGMjEyCis6MTAyNTQwMDA3RTA1MDAwMDAwMDAwMDg4ODJDRDgxM0EwODAwMDAwMDZFCis6MTAyNTUwMDAwMDAwMDBGODkzNDAwMTM5MDAwMDNFMDM4MDAxODA4MEI0Cis6MTAyNTYwMDAzMjBCNkFCNjAwMDAwQzBFMDAwMDAwMzgwMzAwMzhGMjhGCis6MTAyNTcwMDAwMDAwMUYwMzA0MjAwMTgwNTIyMDZFQkMyNjAwN0QwNTUwCis6MTAyNTgwMDAwMDAwMDAxQzA4MDAzNjkyMjUwMDdEMDUwMDAwMDAxQzlDCis6MTAyNTkwMDAwODAwMzY5MjAwMDAyNTAzMDQwMTAwRDgxRTgwRURCQzFGCis6MTAyNUEwMDAwMDAwMjEwM0I3MDAwMEQ4MEVDMEVEQjIwMDAwMjQwM0U0Cis6MTAyNUIwMDAwNDAxMDA4MDQyM0JFRUJDMDAwMDAwMDAwMDAwMDBFMDhGCis6MTAyNUMwMDAxRTAwRUUzQTAwMDAwMDAwQTcwMDAwRDAwRTAwRUUzMjIwCis6MTAyNUQwMDAwMDAwMDAwMDAwNzQ4NkNDMDI4MDZDMzIwMDAwMDAwMDE1Cis6MTAyNUUwMDAwMDAwMDAwMDA5NDBFNzMyMDAwMDI5MDM4MDAxODA4MERDCis6MTAyNUYwMDAzMjBCNkFCNjM2MDAyODAzMTIwMDAwMkM4MkNEMkVCMkIwCis6MTAyNjAwMDAwMDAwMkIwMzA0MDEwMDgwNDJDNTJDQkMwMDAwMkMwM0Y5Cis6MTAyNjEwMDAwMDAwMDBDQzAyMDAwMDkyMDAwMDAwMDAwMDAwMDBDQzhFCis6MTAyNjIwMDAxMkMwMkMzQTAwMDAyNzAzMDQwMTAwMDAxOTAwOTBCQ0RFCis6MTAyNjMwMDAwMDAwMDAwMDAwNzQ4NkM4MDZDMDJDMzIwODAwM0UwMzZCCis6MTAyNjQwMDAwMDAwMDBGOEMzNDAwMTk5MDAwMEZBMEQwMDAwMDAyQ0MyCis6MTAyNjUwMDAwOTAwMDBGMjAwMDAzMjAzMDAwMDAwODAwMjAwMDA5MDM4Cis6MTAyNjYwMDAwMDAwRkEwRDAwMDAwMDJDRjkwMTAwRjQwMDAwM0IwMzBCCis6MTAyNjcwMDAwNDAwMDAyODA5ODA4MEIyMDAwMDAwMDAwMDAwMDBEODlCCis6MTAyNjgwMDAwMjAwMDAzMjAwMDBGMTBFMDAwMDAwMDgwODAwMDBEMjM1Cis6MTAyNjkwMDAwMDAwM0IwMzA0MDAwMDgwMDI4MDkyQkMxODAwMzYwMDVBCis6MTAyNkEwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDNFMDM4MDAxMDA4MDc3Cis6MTAyNkIwMDBBMjgwMkZCNjAwMDAzRTAzMTIwMTAwMDAwOUMwMjFCMjIzCis6MTAyNkMwMDAxODAwMDAwMDAwMDAwMEY4NzMwQTAzMzkzRTAzMzYwMENBCis6MTAyNkQwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDNFMDM4MDAxMDA4MDJFCis6MTAyNkUwMDBBMjgwMkZCNjAwMDAzRTAzMTIwMTAwMDAwOUMwMjFCMkYzCis6MTAyNkYwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDFCCis6MTAyNzAwMDAwMDAwMDBGODAyMDAwMDMyMTgwMDM2MDAwMDAwMDBGODU3Cis6MTAyNzEwMDA3MzhBMDI5OTEwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMkMyCis6MTAyNzIwMDAwMjAwMDAwMTAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDVBCis6MTAyNzMwMDAwMDAwMDBFNDAzMDAzNjMyMDQwMDAwMDEwMDAwMDBFMDY1Cis6MTAyNzQwMDAwMzAwMzczMkFBMDQwMDAwMDAwMDAwRTQwMzAwMzYzMjIwCis6MTAyNzUwMDAwOTAwMDAwMTAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDIzCis6MTAyNzYwMDAwMDAwMDBDQzBGMDAwMDMyMDAwNzAwMDAwMDAwMDBFNDcxCis6MTAyNzcwMDAwMzAwMzYzMjA2MDAwMDAxMDAwMDAwRTAwMzAwMzczMjlCCis6MTAyNzgwMDAyMDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIwODAwMDAwMUQxCis6MTAyNzkwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMTAwMDAwMDAwMDBFNDA4Cis6MTAyN0EwMDAwMzAwMzYzMjA1MDAwMDAxMDAwMDAwRTAwMzAwMzczMjZDCis6MTAyN0IwMDAzMDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIwNzAwMDAwMTkyCis6MTAyN0MwMDAwMDAwMDBFMDAzMDAzNzMyMDBBMDAwMDAwMDAwMDBFNDM5Cis6MTAyN0QwMDAwMzAwMzYzMjA4MDAwMDA4MDAwMDAwRTAwMzAwMzczMjMyCis6MTAyN0UwMDAwMDAwMDAwMDAwMDAwMEEwMDIwMDAwMzIwMDAwMDAwMDE1Cis6MTAyN0YwMDAwMDAwMDAwMDBCMDAwMDMyMDAwMDUyMDM4QjAxMDBBMDFCCis6MTAyODAwMDAxMjAwMkFCQTAwMDAwMDAwMDAwMDAwQTgwMjAwMDAzMkY2Cis6MTAyODEwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDAwMzIwMDAwNTUwMzQ3Cis6MTAyODIwMDAwNjAxMDA4MDAyODAyQUJDMDAwMDAwMDAwMDAwMDA5QzFECis6MTAyODMwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRDQwMjAwMDAzMjVDCis6MTAyODQwMDAwMDAwMDAwMDAwMDAwMENDMDIwMDAwMzIwMDAwMDAwMDg4Cis6MTAyODUwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEMDlDCis6MTAyODYwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwREMwMjAwMDAzMjI0Cis6MTAyODcwMDAwMDAwMDAwMDAwMDAwMEY4MDIwMDAwMzIwMDAwMDAwMDJDCis6MTAyODgwMDAwMDAwMDBDODAyMDAwMDMyMDAwMDAwMDAwMDAwMDBDNDg4Cis6MTAyODkwMDAwMjAwMDAzMjAwMDA1ODAzODUwMTAwOUMxMkMwMjlCQUQyCis6MTAyOEEwMDAwMDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIwQjAwMDAwNENBCis6MTAyOEIwMDAwMDAwMDBFMDAzMDAzNzMyODAwMDAwMDAwMDAwMDBFNDY4Cis6MTAyOEMwMDAwMzAwMzYzMjEzMDAwMDA0MDAwMDAwRTAwMzAwMzczMjNBCis6MTAyOEQwMDAwMDIwMDAwMDAwMDAwMEU0MDMwMDM2MzIwQzAwMDAwNDc5Cis6MTAyOEUwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNEI4Cis6MTAyOEYwMDAwMzAwMDYzMjBGMDAwMDA0MDAwMDAwRTAwMzAwMzczMjNFCis6MTAyOTAwMDAwMDQ0MDAwMDAwMDAwMEU0MDMwMDM2MzIwRDAwMDAwNDIzCis6MTAyOTEwMDAwMDAwMDBFMDAzMDAzNzMyMDAwNDAwMDAwMDAwMDBFNDgzCis6MTAyOTIwMDAwMzAwMzYzMjE0MDAwMDA0MDAwMDAwRTAwMzAwMzczMkQ4Cis6MTAyOTMwMDA5RjAwMDAwMDAwMDAwMEU0MDMwMDM2MzIxNTAwMDAwNDkwCis6MTAyOTQwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDU3Cis6MTAyOTUwMDAwMzAwMzYzMjE4MDAwMDA0MDAwMDAwRTAwMzAwMzczMkE0Cis6MTAyOTYwMDA2MDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIxRDAwMDAwNDk3Cis6MTAyOTcwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDI3Cis6MTAyOTgwMDAwMzAwMDQzMjFFMDAwMDA0MDAwMDAwRTAwMzAwMzczMkEwCis6MTAyOTkwMDA3MDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIxRjAwMDAwNDU1Cis6MTAyOUEwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNEY3Cis6MTAyOUIwMDAwMzAwMDAzMjIwMDAwMDA0MDAwMDAwRTAwMzAwMzczMjcyCis6MTAyOUMwMDBBMDAzMDAwMDAwMDAwMEU0MDMwMDM2MzIxNzAwMDAwNEZBCis6MTAyOUQwMDAwMDAwMDBFMDAzMDAzNzMyNDAwMDAwMDAwMDAwMDBFNDg3Cis6MTAyOUUwMDAwMzAwMzYzMjFCMDAwMDA0MDAwMDAwRTAwMzAwMzczMjExCis6MTAyOUYwMDA2MDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIxQzAwMDAwNDA4Cis6MTAyQTAwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDk2Cis6MTAyQTEwMDAwMzQwMDAzMjE2MDAwMDA0MDAwMDAwRTAwMzAwMzczMkRCCis6MTAyQTIwMDAwMDAxMDAwMDAwMDAwMEU0MDMwMDM2MzIxQTAwMDAwNDM4Cis6MTAyQTMwMDAwMDAwMDBFMDAzMDAzNzMyMjAwMTAwMDAwMDAwMDBFNDQ1Cis6MTAyQTQwMDAwMzAwMzYzMjE5MDAwMDA0MDAwMDAwRTAwMzAwMzczMkIyCis6MTAyQTUwMDA4MDAwMDAwMDAwMDAwMEU0MDMwMDM2MzIwQjAwMDAwMTlCCis6MTAyQTYwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMTAwMDAwMDAwMDBFNDM1Cis6MTAyQTcwMDAwMzAwMzYzMjBDMDAwMDAxMDAwMDAwRTAwMzAwMzczMjkyCis6MTAyQTgwMDBGRUZGMDAwMDAwMDAwMEFDMDIwMDM2MzIwMDAwMDAwMDMzCis6MTAyQTkwMDAwMDAwMDAwMDA5MDAwMDMyMTgwMDAwMDAwMDAwMDBGOEVCCis6MTAyQUEwMDAwMzY0MDIzOTAwMDA4QjAzODUwMTAwMDAxOTAwOTBCQTBECis6MTAyQUIwMDAyNTI2MDAwMDAwMDAwMEU0MDMwMDM2MzIwMTAwMDAwMTdBCis6MTAyQUMwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDA4MDNBCis6MTAyQUQwMDAwRjAwMDAzMjAwMDAwMDAwMDAwMDAwODQwRjAwMDAzMkYwCis6MTAyQUUwMDAwODAwMDAwMDAwMDAwMEY4RjM0MDAxMzkwODAwMDAwMDcxCis6MTAyQUYwMDAwMDAwMDBGOEUzNDAwMTM5MDgwMDAwMDAwMDAwMDBGODgxCis6MTAyQjAwMDBDMzQwMDEzOTA4MDAwMDAwMDAwMDAwRjhCMzQwMDEzOTVCCis6MTAyQjEwMDAwODAwMDAwMDAwMDAwMEY4QTM0MDAxMzkwODAwMDAwMDkwCis6MTAyQjIwMDAwMDAwMDBGODkzNDAwMTM5MDgwMDAwMDAwMDAwMDBGOEEwCis6MTAyQjMwMDA4MzQwMDEzOTA4MDAwMDAwMDAwMDAwRjg3MzQwMDEzOUFCCis6MTAyQjQwMDAwODAwMDAwMDAwMDAwMEY4NjM0MDAxMzkwODAwMDAwMEEwCis6MTAyQjUwMDAwMDAwMDBGODUzNDAwMTM5MDgwMDAwMDAwMDAwMDBGOEIwCis6MTAyQjYwMDA0MzQwMDEzOTA4MDAwMDAwMDAwMDAwRjgzMzQwMDEzOUZCCis6MTAyQjcwMDAwODAwMDAwMDAwMDAwMEY4MTM0MDAxMzkwMDAwMDAwMEM4Cis6MTAyQjgwMDAwMDAwMDBGODAzODAwMDMyMDAwMDAwMDAwMDAwMDBDOEQwCis6MTAyQjkwMDAzRjgwRkMzNTAwMDAwMDAwMDAwMDAwOUMwMjAwMDAzMjc1Cis6MTAyQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMzI2RTAwMDAwMDgyCis6MTAyQkIwMDAwMDAwMDBEMDAyMDAzNjMyMDAwMDAwMDAwMDAwMDAyOEIzCis6MTAyQkMwMDAwMzQwMzgzMjAwMDAzNjEwMDQwMTAwODBEMjAxMzBCNkQ0Cis6MTAyQkQwMDAwMDAwQTMwMzA0MDEwMEQwMTIwMDJEQkNFMDAzMDAwMDlDCis6MTAyQkUwMDAwMDAwMDBFNDAzMDAzNjMyMDMwMDAwMDEwMDAwMDBFMEIyCis6MTAyQkYwMDAwMzAwMzczMjAwMDAwMDAwMTcwMDAwRDAwMjAwMDAzMjRFCis6MTAyQzAwMDAwMDAwMDAwMDAwMDAwMEFDRTEwMDAwMzQwMDAwMDAwMDAzCis6MTAyQzEwMDAwMDAwMDFFMDA2MDAwMDMyMDAwMDAwMDAwMDA4MDFFNEFFCis6MTAyQzIwMDAwNjAwMDAzMjAwMDAwMDAwMDAwRTAxRUMwNjAwMDAzMjM5Cis6MTAyQzMwMDAwMDAwMDAwMDAwMTAwMUUwMDYwMDAwMzIwMDAwMDAwMDZCCis6MTAyQzQwMDAwMDAwMDBEMDEyMDAyRDNBNkUwMEFCMDMwMjAxMDA4MDlDCis6MTAyQzUwMDA4MjBEMkRCQzAyMDAwMDAwMDAwMDAwOUNBRTBEMDIzMjZGCis6MTAyQzYwMDAwMDAwMDAwMDAwMDAwMEE4MDIwMDAwMzIwMDAwMDAwMDg4Cis6MTAyQzcwMDAwMDg4ODZDQzA3MDAzNjMyMDAwMDAwMDAwMDhBODZDQzJGCis6MTAyQzgwMDAwNzAwMDAzQTAwMjQwMDAwMDAwMDAwMDQwOTgwMzYzMkVBCis6MTAyQzkwMDAwMDAwMzYxMDEyMDAwMDY0MDI0MDkwQjIwMDAwMDAwMEY0Cis6MTAyQ0EwMDAwMDAwMDAwNDI5NDA5MDNBMDAwMEI3MDMxMjAwMDA3OEE5Cis6MTAyQ0IwMDAwOUMwMjBCMjAwMDAwMDAwMDAwMDAwNzgwOTQ1OTAzMEYzCis6MTAyQ0MwMDAwMDAwQjUwMzAyMDEwMDgwQzI4Mjk3QkMwMDAwMDAwMDMyCis6MTAyQ0QwMDAwMDAwMDA4NDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBDQzcwCis6MTAyQ0UwMDAwMzAwMDAzMjAwMDBCQjAzOEUwMTAwODAwMjQwMjhCMkM2Cis6MTAyQ0YwMDAwMDAwNTEwRTAwMDAwMEQ4MDIwMDAwRDIxNTBGMDAwMEE1Cis6MTAyRDAwMDAwMDAwMDA4QzBFMDAzNjMyNTIwMDAwMDAwMDAwMDA3NEZCCis6MTAyRDEwMDAwRTAwMzYzMjE4MDAwMDAwMDAwMDAwRTQwMzAwMzYzMkQ2Cis6MTAyRDIwMDAwOTAwMDAwMjAwMDAwMEUwMDMwMDM3MzJGRUNBMDAwMDg0Cis6MTAyRDMwMDAwMDAwMDBFNDAzMDAzNjMyMEEwMDAwMDIwMDAwMDBFMDU4Cis6MTAyRDQwMDAwMzAwMzczMjAwMDBDNjAzMTIwMTAwMDAwOTQwMjBCMjIwCis6MTAyRDUwMDAwMDAwQzQwMzAwMDAwMDgwMDIwMDAwOTAwMDAwQzYwM0QxCis6MTAyRDYwMDAxMjAwMDAwNDA5NDAyMEIyMDAwMEM5MDM5RjAxMDA4MDQ2Cis6MTAyRDcwMDAwMjAwOTBCMjAwMDBDODAzMTIwMDAwMDgwOTQwMjBCMjBGCis6MTAyRDgwMDAwMjAwQzQwMzA0MDEwMDc4MDkyNDE3QjgwNjAwMDAwMEZCCis6MTAyRDkwMDAwMDAwMDA3ODA5NjQxNjM4MDAwMEM0MDMwNDAxMDA4MEI0Cis6MTAyREEwMDAwMjgxOTdCQ0ZFMDAwMDAwMDAwMDAwNDQwMzAwMzYzMkEwCis6MTAyREIwMDBGRTAwMzYwMDAwMDAwMDQ4MDMwMDM2OTIwMDAwMzYxMDg2Cis6MTAyREMwMDAxMjAwMDAwMDA5NDAyMEIyMDAwMENGMDMxMjAwMDAwNEVFCis6MTAyREQwMDAwOTQwMjBCMjAwMDBEMjAzOUYwMTAwODAwMjAwOTBCMjlGCis6MTAyREUwMDAwMDAwRDEwMzEyMDAwMDA4MDk0MDIwQjIwMDAwMDAwMERBCis6MTAyREYwMDAwMDAwMDBCNDAyMDA5MDMyMDAwMDM2MTAwMDAwMDA4MDk1Cis6MTAyRTAwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEQ4Cis6MTAyRTEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDE0Cis6MTAyRTIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MENBCis6MTAyRTMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEE4Cis6MTAyRTQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEU0Cis6MTAyRTUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDlBCis6MTAyRTYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDc4Cis6MTAyRTcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEI0Cis6MTAyRTgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDZBCis6MTAyRTkwMDAwMjAwMDA5MDA2MDBFQTAzMDAwMDAwMEMwOTY0MTY5ODg2Cis6MTAyRUEwMDAwMDAwNDkwMjAwMDAwMDE0MDg0MDkwOTIwMDAwNjkwMkVFCis6MTAyRUIwMDAwMDAwMDAxNDA4NDA5MDkyMzQwMDE1MDMwMDAwMDAxQzJDCis6MTAyRUMwMDAwODAwMzY5MjEyMDAxNTAzMDAwMDAwMUMwODAwMzY5MjFDCis6MTAyRUQwMDAzQTAwMTUwMzAwMDAwMDFDMDgwMDM2OTIwMDAwMzYxMDZFCis6MTAyRUUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDVCMDIwMDAwMDAxNDVGCis6MTAyRUYwMDAwODQwOTA5MjAwMDAxRDA0MDAwMDAwODAwMjAwMDA5MDM1Cis6MTAyRjAwMDAwMDAwMUEwMzAwMDAwMDE0MDg0MDkwOTJFQjAzMDAwMDM4Cis6MTAyRjEwMDAwMDAwMDA4ODgyQ0Q5MDNBMEQwMDBEMDQwMDAwMDBGQ0Y2Cis6MTAyRjIwMDAwMkU0MTY5ODBEMDAxRTA0MDAwMDAwRkMwMkU0MTY5ODRFCis6MTAyRjMwMDAwRDAwMjcwNDAwMDAwMEZDMDJFNDE2OTgwMDAwMzQwNDkxCis6MTAyRjQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDNEMDQwMDAwMDAwMDJFCis6MTAyRjUwMDAwOTQwOTA5RDAwMDA0MDA0MDAwMDAwODAwMjAwMDA5MEE1Cis6MTAyRjYwMDAwMDAwNDkwNDAwMDAwMDgwMDIwMDAwOTAwMDAwNTIwNEFDCis6MTAyRjcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDVCMDQwMDAwMDAwMEUwCis6MTAyRjgwMDAwOTQwOTA5RDAwMDA2MDA0MDAwMDAwODAwMjAwMDA5MDU1Cis6MTAyRjkwMDAwMDAwNjgwNDAwMDAwMDAwMDk0MDkwOUQwMDAwNkQwNERFCis6MTAyRkEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERDMDQwMDAwMDAwMDJGCis6MTAyRkIwMDAwOTAwMDA5MjAwMDBEQzA0MDAwMDAwMDAwOTQwMDA5MkJCCis6MTAyRkMwMDAxRDA3REUwNDAwMDAwMEEwMDIwMDM2OTIwMDAwRUMwNEExCis6MTAyRkQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDE5Cis6MTAyRkUwMDAwMjAwMDA5MDAwMDAxRDA0MDAwMDAwREMwRjQwOTA5MkUxCis6MTAyRkYwMDAwMDAwQjAwNDAwMDAwMDgwMDIwMDAwOTAwMDAwQjUwNDUyCis6MTAzMDAwMDAwMDAwMDBENDAyMDAwMDkyMTAwMENBMDQwMDAwMDA4NEY2Cis6MTAzMDEwMDAxRjY0MTQ5ODAwMDAxRDA0MDAwMDAwRUMwRTQwOTA5MjA0Cis6MTAzMDIwMDAwMDAwRDYwNDAwMDAwMDgwMDIwMDAwOTAwMDAwMUQwNDkzCis6MTAzMDMwMDAwMDAwMDBENDBFNDA5MDkyMDAwMEQ5MDQwMDAwMDA4MEVGCis6MTAzMDQwMDAwMjAwMDA5MDAwMDA2RDA1MDAwMDAwREMwRTQwOTA5MjMwCis6MTAzMDUwMDAwMDAwRkIwNDAwMDAwMDgwMDIwMDAwOTAwODAwMDAwNTUyCis6MTAzMDYwMDAwMDAwMDA1MDFGMjQxNjk4MDAwMDBGMDUwMDAwMDBEODMzCis6MTAzMDcwMDAwMjAwMDA5MjBEMDAxOTA1MDAwMDAwRkMwMkU0MTY5ODAxCis6MTAzMDgwMDAwMDAwMUEwNTAwMDAwMEQwMDIwMDAwOTIwMDAwRjYwMEM3Cis6MTAzMDkwMDAwMDAwMDBEMDAyMDAwMDkyMDAwMDM1MTAwMDAwMDA4MDA3Cis6MTAzMEEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDM2Cis6MTAzMEIwMDAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwMDAwMDAzCis6MTAzMEMwMDAwMDAwMDA3ODA5NDU5MDMwMDAwMDNFMDMwNjAxMDA4MEIyCis6MTAzMEQwMDAyMjgwOTdCQzAyMDAxMDA0QjAwMDAwQTBGMjBCMDBCOURGCis6MTAzMEUwMDAwMDAwMDAwMEEwMDAwMDA0NkI0MTkwMzQwMDAwM0UwMzhCCis6MTAzMEYwMDA4MDAxMDA4MDAyNDBCMEI2MDAwMDNFMDMwNDAwMDA4MDYyCis6MTAzMTAwMDAwMjgwQjBCQzAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMkM1Cis6MTAzMTEwMDAwMDAwMDAwMDAwMDAwMEE4MjJDMDJGMzcwMDAwMDAwMEJGCis6MTAzMTIwMDAwMDAwMDAwMDY3MDEwMDM0MDA0MjAwMDAwMDA4MDAwMEI5Cis6MTAzMTMwMDA4NzhEMkEzQTAwMDAzNjEwMDQxMDAwMDAwNzAwQjBCMjU0Cis6MTAzMTQwMDAwMDAwMDAwMDAwMTgwMDAwMDcwMEQwMzIwMDAwMUEwNDQwCis6MTAzMTUwMDAxMjAwMDA0OEYyQzEzOEI0MTgwMDAwMDAwMDAwMDBGODY2Cis6MTAzMTYwMDA3MzBBMDMzOTNFMDMzNjAwMDAwMDAwQzAwMjAwMzY5MkE1Cis6MTAzMTcwMDAwODAwM0UwMzAwMDAwMEY4OTM0MDAxOTkwMDAwMjEwNDdDCis6MTAzMTgwMDA5RjAwMDA4MDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwOEQ0Cis6MTAzMTkwMDAwOTQwOTAzMjAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjI4Cis6MTAzMUEwMDAwMjAwMjEwNEIwMDAwMEEwRjIwQjAwQjkwMDAwMDAwMEYyCis6MTAzMUIwMDAwMDAwMDAwMDBCODA5MDMyMDAwMDAwMDAwMDAwMDAwMEMyCis6MTAzMUMwMDAwRDQwOTAzMjAwMDAwMDAwQTAwMDAwMDQzQjQwQjAzMUYwCis6MTAzMUQwMDAwMDAwMUQwNDA0MDAwMDgwMDJDMDJGQkNGMjBFMUQwNDdDCis6MTAzMUUwMDAwMDAwMDA4QzBFMDAzNjkyMDgwMDAwMDAwMDAwMDBGODdECis6MTAzMUYwMDA5MzQwMDEzOTAyMDAyODA0QjAwMDAwQTBGMjBCMDBCOThFCis6MTAzMjAwMDAwMDAwMkIwNDgwMDEwMDgwMTI0MEIwQjYwMDAwMDAwMEQ2Cis6MTAzMjEwMDAwMDAwMDAwNDNCNDBCMDMzMDAwMDAwMDAwMDAwMDAwNDQ4Cis6MTAzMjIwMDBGRDRCRDAzNTAwMDAwMDAwMDAwMDAwMDgwQjAwMDAzMjBDCis6MTAzMjMwMDAwMDAwMDAwMEEwMDAwMDBDMUJFNEIwMzIwMDAwM0UwM0MwCis6MTAzMjQwMDAwQjAwMDA4MDAyMDAwMEIwMDAwMDMxMDQwNDAwMDA4MDg4Cis6MTAzMjUwMDAwMjQwOTBCMjFGMDAzRTAzMDAwMDAwODAxMTQwMDA5OTIwCis6MTAzMjYwMDAwMDAwMzAwNDA0MDAwMDgwMTIzRUY4QkEwMDAwMDAwMEE0Cis6MTAzMjcwMDAwMDAwMDA4MDAxMDBGODMyMDAwMDNFMDMwMDAwMDA5MEQyCis6MTAzMjgwMDAwMTQwRjg5MjAwMDAzNjEwODAwMDAwODAwMjgxRkNCNkY4Cis6MTAzMjkwMDAwMDAwMzgwNDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDhGCis6MTAzMkEwMDAwMDAwMDAwODA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA3Cis6MTAzMkIwMDAwOUMwRkQzMjAwMDAwMDAwMDAwMDAwRTQwMzgwOTAzMkVECis6MTAzMkMwMDAwOTAwMDAwNDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMEE1Cis6MTAzMkQwMDAwMDAwMDBFNDAzNDA5MDMyMEEwMDAwMDQwMDAwMDBFMDE3Cis6MTAzMkUwMDAwMzAwMzczMjAwMDAxRDA0MDAwMDAwQzgwRjgxRkM5NDY5Cis6MTAzMkYwMDAwMDAwMDAwMDAwMDAwMEU0NzMwMDkwM0MxMDAwMDAwNDk3Cis6MTAzMzAwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDA4MEQwCis6MTAzMzEwMDAwMjAwMDA5MDAwMDA0MzA0OUYwMDAwODAwMjAwOTBCMjcxCis6MTAzMzIwMDAwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDhBCis6MTAzMzMwMDAwMDAwMDAwNDA5QzBGRDMyMDAwMDAwMDAwMDAwMDBFNEFECis6MTAzMzQwMDAwMzgwOTAzMjAxMDAwMDA0MDAwMDAwRTAwMzAwMzczMkU3Cis6MTAzMzUwMDAwMDAwMDAwMDAwMDAwMEUwMEY4MDkwMzIwMDAwMDAwMDNDCis6MTAzMzYwMDAwMDAwMDBFNDAzNDA5MDMyMDIwMDAwMDQwMDAwMDBFMDhFCis6MTAzMzcwMDAwMzAwMzczMjAwMDAxRDA0MDAwMDAwRTQwRjQwOTA5MjZCCis6MTAzMzgwMDAwMDAwNEMwNDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDhBCis6MTAzMzkwMDAwMDAwMDAwODA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDE2Cis6MTAzM0EwMDAwOUMwRkQzMjAwMDAwMDAwMDAwMDAwRTQwMzgwOTAzMkZDCis6MTAzM0IwMDAwMzAwMDAwNDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMEJBCis6MTAzM0MwMDAwMDAwMDBBODBFODA5MDMyMDAwMDAwMDAwMDAwMDBFNDIxCis6MTAzM0QwMDAwMzQwOTAzMjA0MDAwMDA0MDAwMDAwRTAwMzAwMzczMjk0Cis6MTAzM0UwMDAwMDAwMUQwNDAwMDAwMEFDMEU0MDkwOTIwMDAwNTUwNDQ3Cis6MTAzM0YwMDA5RjAwMDA4MDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODYyCis6MTAzNDAwMDAwOTQwOTAzMjAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMkI1Cis6MTAzNDEwMDAwMDAwMDAwMDAwMDAwMEU0MDM4MDkwMzIwNTAwMDAwNDdBCis6MTAzNDIwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNDZDCis6MTAzNDMwMDAwMzQwOTAzMjA2MDAwMDA0MDAwMDAwRTAwMzAwMzczMjMxCis6MTAzNDQwMDAwMDAwMDAwMDAwMDAwMDQ0MEY4MDkwMzIwMDAwMUQwNEM2Cis6MTAzNDUwMDAwMDAwMDA0ODBGNDA5MDkyMDAwMDVEMDQwNDAxMDA4MENECis6MTAzNDYwMDA4MjQyOTBCQzAwMDAwMDAwMDAwMDAwMDAwOTAwMDAzMjExCis6MTAzNDcwMDAwMDAwMDAwMDAwMDAwMEU0MDMwMDkwMzIxMjAwMDAwNDhECis6MTAzNDgwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDA0MDhGCis6MTAzNDkwMDAxRjQwOTA5QzAwMDA2MzA0OUYwMDAwODAwMjAwOTBCMkQ3Cis6MTAzNEEwMDAwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDA5Cis6MTAzNEIwMDAwMDAwMDAwNDA5QzBGRDMyMDAwMDAwMDAwMDAwMDBFNDJDCis6MTAzNEMwMDAwMzgwOTAzMjA3MDAwMDA0MDAwMDAwRTAwMzAwMzczMjYwCis6MTAzNEQwMDAwMDAwMDAwMDAwMDAwMEU0MDM0MDkwMzIwODAwMDAwNEY3Cis6MTAzNEUwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDA4MEVGCis6MTAzNEYwMDAwMjAwMDA5MDAwMDA2QTA0MDQwMTAwODA4MjQyOTBCQzM3Cis6MTAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMzIwMDAwMDAwMDgwCis6MTAzNTEwMDAwMDAwMDBFNDAzMDA5MDMyMTEwMDAwMDQwMDAwMDBFMDBECis6MTAzNTIwMDAwMzAwMzczMjAwMDAxRDA0MDAwMDAwRkMxRjQwOTA5Qzg3Cis6MTAzNTMwMDAwMDAwNzAwNDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMEI0Cis6MTAzNTQwMDAwMDAwMDAwODA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDY0Cis6MTAzNTUwMDAwOUMwRkQzMjAzMDkwMDAwMDAwMDAwMjgwODAwMzYzMkNGCis6MTAzNTYwMDAwMDAwODkwNDAwMDAwMDMwMDgwMDM2RDIwMDAwOTMwNEY3Cis6MTAzNTcwMDAwMDAwMDA0NDA4ODAwMEQyMDAwMDc5MDQwNDAxMDA4MEFCCis6MTAzNTgwMDAwMjAwODRCMjAzMEUwMDAwMDAwMDAwMjgwODAwMzYzMjVBCis6MTAzNTkwMDA4MDAwODkwNDAwMDAwMDMwMDgwMDM2RDIwMDAwOTMwNDQ3Cis6MTAzNUEwMDAwMDAwMDA0NDA4QzAwMEQyMDAwMDc5MDQwNDAxMDA4MDNCCis6MTAzNUIwMDAwMjAwODRCMjAwMDA4MDA0MDAwMDAwNDQwODAwMDE5MjcwCis6MTAzNUMwMDA4MDAyMDAwMDAwMDAwMDAwMDcwMDM2MzI4QzQ1MDAwMDM5Cis6MTAzNUQwMDAwMDA4MDAwMDA3MDAzNjMyMDAwMDM2MTAwNDEwMDAwMDFBCis6MTAzNUUwMDAwNzgwOTBCMjAwMDAwMDAwMDAxODAwMDAwNzQwOTAzMkYxCis6MTAzNUYwMDAwMDAwMDAwMDAwMDAwMDQ4RjJDMTM4MzQwMDAwN0UwNEUyCis6MTAzNjAwMDAxMjAwMDA4MDAyMDAwMEIwMTgwMDM2MDAwMDAwMDBGODMwCis6MTAzNjEwMDA3MzBBMDNGOTIwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMkMyCis6MTAzNjIwMDAwOTAwMDAwMjAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDQzCis6MTAzNjMwMDAwMDAwMDBFNDAzNDA4NDMyMEEwMDAwMDIwMDAwMDBFMEMxCis6MTAzNjQwMDAwMzAwMzczMjhDNDUwMDAwMDAwMDAwQTgwMjAwMzYzMjJCCis6MTAzNjUwMDBBMDAwMDAwMDAwMDAwMDAwMDkwMDM2MzIwMDAwMDAwMDU5Cis6MTAzNjYwMDAwMDAwMDBFMDA3MDAwMDMyMDAwMDg2MDQwNjAxMDAwMEIwCis6MTAzNjcwMDAxOTAwOTBCQzAwMDAxRDA0MDAwMDAwODAwMjAwMDA5MEIyCis6MTAzNjgwMDA4QzQ1MDAwMDAwMDAwMEM4MDIwMDM2MzI4MDAyMDAwMEI1Cis6MTAzNjkwMDAwMDAwMDAzQzA4MDAzNjMyMDAwMDAwMDAwMDAwMDAzNDRBCis6MTAzNkEwMDAwODAwMDEzMjAwMDA4RTA0MDIwMDAwODBEMkUwODNCQ0RBCis6MTAzNkIwMDAwMDAwMDAwMDAwMDAwMDM0MDhDMDgzMzIwMDAwQTQwNEIxCis6MTAzNkMwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMDAwMDAwMDAwMDBBMEU4Cis6MTAzNkQwMDAwNzgwODMzMjAwMDAwMDAwMDAwMDAwMzBEODIwODMzQUM5Cis6MTAzNkUwMDAwMDAwOEMwNDA0MDEwMDNDRDhFMDgzQkMwMDAwMDAwMDEyCis6MTAzNkYwMDAwMDAxMDA4MDAyMDAwMDUwMDAwMDAwMDAwMDAwMDA0MEI3Cis6MTAzNzAwMDAwODAwMDAzMjAwMDAwMDAwMDAwMDAwNDgwODAwMDAzMkZECis6MTAzNzEwMDA4QzQ1MDAwMDAwMDAwMEM4MDIwMDM2MzIwMDAyMDAwMEE0Cis6MTAzNzIwMDAwMDAwMDBDODgyOEQyQzNBODAwMDAwMDAwMDAwMDAzQ0EwCis6MTAzNzMwMDAwODAwMzYzMjAwMDAwMDAwMDAwMDAwNzgwOTgwNzgzMjZFCis6MTAzNzQwMDA1QTVBMDAwMDA0MDEwMDgwODI4RDk3NUMwMDAwOUMwNDlFCis6MTAzNzUwMDAwMjAxMDA0OEE4OUU4NEJBMDAwMDAwMDAwMDAwMDA0ODUyCis6MTAzNzYwMDAxODgwODQzQTAwMDA5QTA0MDYwMTAwM0MyOEMwODNCQ0ZCCis6MTAzNzcwMDAwMDAwMDAwMDAwMDAwMDc4MDk4NTg0MzAxMDAwMDAwMDdGCis6MTAzNzgwMDAwMDAwMDA0ODg4OEQ4NDM2MDAwMEExMDQ5MDAxMDA0OEE0Cis6MTAzNzkwMDBFOEE1ODRCQTAwMDAwMDAwMDAwMDAwNDgxODgwODQzQUMwCis6MTAzN0EwMDAwMDAwMDAwMDAwMDAwMDQ4MDg4NTg0MzAwMDAwMDAwMDkwCis6MTAzN0IwMDAwNDAxMDA4MDAyODU4NDVDMDAwMDAwMDAwMDAxMDA0MERDCis6MTAzN0MwMDAwODQwMDA1MjAwMDAwMDAwMDAwMDAwRTQwMzAwODMzMkMzCis6MTAzN0QwMDAwMTAwMDAwMjAwMDAwMEUwMDMwMDM3MzIwQzAwQUEwNEUwCis6MTAzN0UwMDAwMDAwMDAyQ0Q4QTA4MkY5MDUwMDAwMDIwMDAwMDBFMEQzCis6MTAzN0YwMDAwMzAwMzczMjAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMEFCCis6MTAzODAwMDAwMDAwMDAwMDAwMDEwMDM4MDg0MDNFNzIwMDAwMDAwMDg3Cis6MTAzODEwMDAwMDAwMDBFNDAzQzA4MjMyMDIwMDAwMDIwMDAwMDBFMDY5Cis6MTAzODIwMDAwMzAwMzczMjAyMDAwMDAyMDAwMDAwRTAwMzAwMzczMkRDCis6MTAzODMwMDAwMDAwMDAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwQUMwNDI2Cis6MTAzODQwMDA4MDAwMDA4MEYyNDAzRUI2MDAwMDAwMDAwMDAxMDA4MEQxCis6MTAzODUwMDAwMjAwMDA3MDAwMDBCMzA0OUYwMDAwODAwMjAwOTBCMkRDCis6MTAzODYwMDAwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDQ1Cis6MTAzODcwMDAwMDAwMDAwNDA5QzBGRDMyMDAwMDAwMDAwMDAwMDA4NEM4Cis6MTAzODgwMDAwRTgwOTAzMjAwMDAxRDA0MDAwMDAwODgwRTQwOTA5MkNGCis6MTAzODkwMDAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwQjkwNDVFCis6MTAzOEEwMDA5RjAwMDA4MDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwOEFECis6MTAzOEIwMDAwOTQwOTAzMjAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAxCis6MTAzOEMwMDAwMDAwMDAwMDAwMDAwMDIwMDc0MEY1MzIwMDAwMDAwMDZBCis6MTAzOEQwMDAwMDA4MDAyMDA3MDAwMDMyMDAwMDAwMDAwMDEwMDAyMDU3Cis6MTAzOEUwMDAwN0MwRjUzMjAwMDAwMDAwMDAxODAwMjAwNzQwRjYzMjQzCis6MTAzOEYwMDAwMDAwMDAwMDAwMjAwMDIwMDc4MEY2MzIwMDAwMDAwMEQ5Cis6MTAzOTAwMDAwMDI4MDAyMDA3QzBGNjMyMDAwMDAwMDAwMDMwMDAyMDMwCis6MTAzOTEwMDAwNzAwRjczMjAwMDAwMDAwMDAzODAwMjAwNzgwRkYzMjY3Cis6MTAzOTIwMDAwMDAwMDAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDhCCis6MTAzOTMwMDAwMDAwMDAwMDA3NDAwOTMyMDAwMDAwMDAwMDA4MDAwMEZECis6MTAzOTQwMDA3N0MwMjkzNzAwMDAwMDAwMDAxMDAwMDAwNzgwOTAzMjg3Cis6MTAzOTUwMDAwMDAwMDAwMDAwMTgwMDAwMDc0MDkwMzIwMDAwQzYwNDdDCis6MTAzOTYwMDAxMjAwMDA0OEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODE4Cis6MTAzOTcwMDA3MzBBMDNGOTAwMDAwMDAwMDAwMDAwMDhDODAxMDAzNEM5Cis6MTAzOTgwMDAwMDAwMzIwMzAwMDAwMEZDMDIwMDAwOTIwMDAwQ0MwNEEyCis6MTAzOTkwMDA4MDAxMDA4MEYyNDE5MEI2MDAwMENEMDQwMDAwMDBDODE0Cis6MTAzOUEwMDAyRjgxRkM5NDAwMDAwMDAwMDAwMDAwQzgyRjgxRkMzNTJFCis6MTAzOUIwMDAwMDAwMDAwMDAwMDAwMDgwMEY0NTkwMzAwMDAwRDAwNDlGCis6MTAzOUMwMDAwMjAwMDA4MDAyN0VGOEJDMDAwMDAwMDAwMDAwMDA4NEJECis6MTAzOUQwMDAwRjAwRjgzMjAwMDAwMDAwMDAwMDAwMDAxOTQwRjgzNzI2Cis6MTAzOUUwMDAwMDAwMDAwMDAwMDAwMDg0M0Y0MEY4MzcwMDAwMDAwMEE1Cis6MTAzOUYwMDAwMDAwMDA4NDBGNjRGODNBMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAzQTAwMDAxOTAwRjgzNzAwMDAwMDAwMDAwMDAwODAzRjAwRjgzNzgwCis6MTAzQTEwMDAwMDAwMUQwNDAwMDAwMDgwMEYyNEY4OUEwMDAwRDgwNDY0Cis6MTAzQTIwMDA4MDAxMDA4MEYyNDE5MEI2MDAwMDFEMDQwMDAwMDBDODMzCis6MTAzQTMwMDA0RjgxRkM5NDAwMDAxRDA0MDAwMDAwQzg0RjgxRkM5NURDCis6MTAzQTQwMDAwMDAwREIwNDA0MDEwMDgwMDI0MDkwQkMwMDAwMDAwMDg0Cis6MTAzQTUwMDAwMDAwMDAwNDA5QzAwMDMyMDAwMDFEMDQwMDAwMDBFNDYyCis6MTAzQTYwMDAxRTQwOTA5QzAwMDAwMDAwMDAwMDAwQTgyMjAwOTAzNzNCCis6MTAzQTcwMDAwMDAwMUQwNDAwMDA4NkMwMDc0MDkwOTIwODAwMDAwMDZFCis6MTAzQTgwMDAwMDAwMDBGODkzNDAwMTM5MEQwMDAwMDAwMDAwMDBGQzI4Cis6MTAzQTkwMDAwMkU0MTYzODAwMDAwMDAwMDAwMDAwMDAwOTAwMDIzMkI1Cis6MTAzQUEwMDAwMDAwRTYwNDA0MDAwMDgwMDIwMEIwQjIwMDAwMDAwMDQ0Cis6MTAzQUIwMDAwMDAwMDAwMDBCMDAwMDMyMjAwMDAwMDAwMDAwMDBBMDA5Cis6MTAzQUMwMDA4MjBEMkEzQTAwMDBFMTA0MDQwMTAwMDAxOTAwOTBCQ0I0Cis6MTAzQUQwMDAwMDAwRTgwNDAwMDAwMDI4NzkwMTAwOTQwMDAwMDAwMEM0Cis6MTAzQUUwMDAwMDAwMDBDODNGODBGQzM0NDA4MDAwMDAwMDAwMDAyODM3Cis6MTAzQUYwMDAwOTgwMzYzMjAwMDBGMTBFMDAwMDAwRDgwMjAwMDBEMjJBCis6MTAzQjAwMDAwMDAwM0UwMzA0MDAwMDgwMDI4MDkyQkMxODAwMDAwMDA4Cis6MTAzQjEwMDAwMDAwMDBGODczMEEwMzM5M0UwMzM2MDAwMDAwMDBDMEJECis6MTAzQjIwMDAwMjAwMzY5MkVBMDVGMjA0MDQwMTAwODA4MjREOTBCQzQ2Cis6MTAzQjMwMDAwMDAwMDAwMDAwMDAwMEVDMEYwMDE1MzIwMEZFMUYwMDI2Cis6MTAzQjQwMDAwMDAwMDBGMDBGMDAzNzMyRjBGRjAwMDAwMDAwMDBFODM2Cis6MTAzQjUwMDAwRjAwMzYzMjk4MDUwMDAwMDAwMDAwRjQwRjAwMzYzMkU2Cis6MTAzQjYwMDAwMDAwRjgwNDAwMDAwMEM4NEY4MEZDOTUzNjIzMzYxMDkyCis6MTAzQjcwMDAwNDAxMDA4MDgyNEQ5MEJDMDAwMDAwMDAwMDAwMDBFQ0I5Cis6MTAzQjgwMDAwRjgwMTQzMjAwRjgxRjAwMDAwMDAwRjAwRjAwMzczMkUxCis6MTAzQjkwMDBDMEZGMDAwMDAwMDAwMEU4MEYwMDM2MzI5ODI3MDAwMDQ4Cis6MTAzQkEwMDAwMDAwMDBGNDBGMDAzNjMyMDAwMDAwMDAwMDAwMDBDOEUyCis6MTAzQkIwMDA0RjgwRkMzNDA0MDAwMDAwMDAwMDAwNjA4RjREOTAzQUZDCis6MTAzQkMwMDAwMDAwQkMwRTAwMDAwMDgwMDIwMDAwRDAwMDAwMUQwNEI4Cis6MTAzQkQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEZEMDQ4MDAxMDA4MEQxCis6MTAzQkUwMDAwMjQwOTBCNjAwMDAwMDAwMDAwMDAwQzg2RjgwRkMzNDY2Cis6MTAzQkYwMDAwMDAwRkYwNDgwMDEwMDgwMTI0MDkwQjYwMDAwMDAwMDI5Cis6MTAzQzAwMDAwMDAwMDBDODVGODBGQzM0MDAwMDFEMDQwMDAwMDA4MDNDCis6MTAzQzEwMDAwMjAwMDA5MDAwMDAwMjA1MDQwMTAwODAzMjQwOTBCMEQ0Cis6MTAzQzIwMDA4MDAxMUQwNDAwMDAwMEM4OEY4REZDOTEwMDAwMDQwNTc4Cis6MTAzQzMwMDA4MDAwMDA4MDEyNDA5MEI2MDAwMDA1MDUwMDAwMDBDODFBCis6MTAzQzQwMDA3RjgwRkM5NTAwMDAwMDAwMDAwMDAwQzg3RjgwRkMzNEVECis6MTAzQzUwMDAwMDAwMDcwNTgwMDAwMDgwMDI0MDkwQjYwMDAwMDgwNUMzCis6MTAzQzYwMDAwMDAwMDBDODhGODBGQzk1MDAwMDAwMDAwMDAwMDBDODI0Cis6MTAzQzcwMDA4RjgwRkMzNDAwMDAwQjA1ODAwMDAwODAyMjQwOTBCNjRECis6MTAzQzgwMDBGMjBFMDAwMDAwMDAwMDhDMEUwMDM2MzIwMDAwMEQwNTIwCis6MTAzQzkwMDAwMDAwMDBDODFGODFGQzk1MTUwRjAwMDAwMDAwMDA4QzdCCis6MTAzQ0EwMDAwRTAwMzYzMjAwMDAwMDAwMDAwMDAwQzgxRjgxRkMzNDA2Cis6MTAzQ0IwMDAxMDAwMDAwMDAwMDAwMDRDMUYyNDE2MzgwMDAwMUQwNEY2Cis6MTAzQ0MwMDAwMDAwMDA1MDFGMDBGNTlDMDAwMDEyMDU5RjAwMDA4MEJFCis6MTAzQ0QwMDAwMjAwOTBCMjAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjhECis6MTAzQ0UwMDAwMDAwMDAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMDAwMEQ4Cis6MTAzQ0YwMDAwMDAwMDAwMDE3MDBGNTNBOEM0NDAwMDAwMDA4MDAwMEE2Cis6MTAzRDAwMDAwNzAwMzYzMjAwMDAzNjEwMDQxMDAwMDAwNzgwOTBCMjIxCis6MTAzRDEwMDAwMDAwMDAwMDAwMTgwMDAwMDc0MDkwMzIwMDAwMTYwNTY3Cis6MTAzRDIwMDAxMjAwMDA0MEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODVDCis6MTAzRDMwMDA3MzBBMDNGOTAwMDAxRDA0MDAwMDAwODAwMjAwMDA5MEQ3Cis6MTAzRDQwMDAwMDAwMUQwNDAwMDAwMEVDMDM0MDkwOTIwMDAwMUEwNUUyCis6MTAzRDUwMDBCMjAwMDBEODAyMDAwMEIyMDAwMDAwMDAwMDAyMDFFQzM2Cis6MTAzRDYwMDAxNkU0NkUzQTA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOUE0Cis6MTAzRDcwMDAwMDAwNDAwNTE3MTAwMUY4MDIwMDZFQjIwNjAwMjUwNThDCis6MTAzRDgwMDAwNDAxMDA4MDgyOEQyRkIwMDMwMDAwMDAwMDAwMDBGOEM1Cis6MTAzRDkwMDA4MjhEMkYzMjAwQzAwNTBFMDAwMDAwMjgwOTgwMzZEMjI3Cis6MTAzREEwMDAwMDAwMDAwMDAwMDIwMUVDMTZDMDZFM0MwMDAwMDAwMEE0Cis6MTAzREIwMDAwMDE4ODZDODA2MDAwMDMyMTgwMDM2MDAwMDAwMDBGODFGCis6MTAzREMwMDA3MzBBMDNGOTAwMDAyNjA1MDAwMDAwRDAwMjAwMDA5MkVCCis6MTAzREQwMDAwMDAwMkIwNTA0MTk4NjgwMDI4MDZDQkMwMDAwMDAwMEU2Cis6MTAzREUwMDAwMDAwMDAwMDA5MDA2RTMyMDAwMDAwMDBDMTA4MDAwNDVECis6MTAzREYwMDAwOTAwNkUzMjAwMDAwMDAwQzAxNTg2NzgwRkMwNkMzMkRBCis6MTAzRTAwMDAwMDAwMzAwNTgwMDEwMDgwMjI4MDJGQjYwMDAwMzAwNUMwCis6MTAzRTEwMDAwMDE4ODZDODA2NDAwMDkyMDAwMDAwMDAwMDQwMDAwMDI0Cis6MTAzRTIwMDAwOTAwNkUzMjAwMDAwMDAwQzI0ODAwMDQwOTAwNkUzMjMyCis6MTAzRTMwMDAwMDAwMDAwMEMwMTY4Njc4MEZDMDZDMzIwMDAwMzAwNTBDCis6MTAzRTQwMDA4MDAxMDA4MDEyODAyRkI2MDAwMDAwMDAwMDE4ODZDODk0Cis6MTAzRTUwMDAwNjAwMDAzMjAwNDAwMDAwMDAwMDAwMjgwOTgwMzYzMkQxCis6MTAzRTYwMDAwMDAwMzgwNTA0MDIwMTgwMDJDMDZFQkMwMDAwMDUwRThGCis6MTAzRTcwMDAwMDAyMDFFQzE2QzA2RURDMDAwMDM2MDU4MDAwMDA4MEY4Cis6MTAzRTgwMDAwMjgwMkZCNjAwMDAzODA1ODEwMDAwRjgyMjgwMkZCNDkwCis6MTAzRTkwMDAwMDAwMzgwNTAwMTg4NkM4MDY0MDAwOTIwMDAwMzgwNTZBCis6MTAzRUEwMDA4MjAwMDBGODEyODAyRkI0MDAwMDAwMDAwMDE4ODZDOEJECis6MTAzRUIwMDAwNjAwMDAzMjAwMDAwMDAwMDAxMDg2QzgwNjAwMDAzMjM0Cis6MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDdDMDBBMzIwMDM4MDAwMEI3Cis6MTAzRUQwMDAwMDA4MDAwMDA3MDAzNjMyMDAwMDM2MTAwNDEwMDAwMDExCis6MTAzRUUwMDAwNzAwOTBCMjAwMDAwMDAwMDAxODAwMDAwNzQwOTAzMjY4Cis6MTAzRUYwMDAwMDAwM0QwNTEyMDAwMDQwRjJDMTM4QjQxODAwMzYwMDQxCis6MTAzRjAwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAxNzAxMDBGODMwCis6MTAzRjEwMDBBMjgwMkYzNDAwMDAwMDAwMDAxMDg2QTg0MjgwNkMzNzc5Cis6MTAzRjIwMDAwMDAwNEEwNTEyMDA3MDM4MDIwMDdFQjIwMDAwMzYxMDEwCis6MTAzRjMwMDAxMjAwNzAzQzAyMDA3RUIyMDAwMDM2MTAxMjAwNzAzMDk5Cis6MTAzRjQwMDAwMjAwN0VCMjAwMDAzNjEwMTIwMDcwMzQwMjAwN0VCMjExCis6MTAzRjUwMDAwMDAwNDEwNTAyMDEwMDgwQjI4MjJBQkMwMDAwMDAwMDdFCis6MTAzRjYwMDAxNzAwMDBEMDAyMDAwMDMyMDYwMDI1MDUwNDAxMDA4MDgxCis6MTAzRjcwMDA4MjhEMkZCMDAwMDAxRjA1MDQwMzAxODAwMkMwNkVCQ0JCCis6MTAzRjgwMDAwMDAwNTUwNTAwMDAwMDgwMDIwMDAwOTAwMDAwNEMwNTc0Cis6MTAzRjkwMDAwNDAzMDE4MDAyQzA2RUJDMDAwMDU1MDUwMDEwODZDOEY1Cis6MTAzRkEwMDA0NjgwMkE5NjAwMDAwMDAwMDAxMDg2Qzg0NjgwMkEzNjA3Cis6MTAzRkIwMDAwMDAwNTAwNTgwMDAwMDgwMTI4MDJGQjYwMzAwNTIwNURCCis6MTAzRkMwMDAyMjAwMDBGODgyOEQyRkIyMDAwMDUyMDUwMDE4ODZDODJBCis6MTAzRkQwMDAwNjAwMDA5MjAwMDA1NTA1ODAwMDAwODAyMjgwMkZCNjY4Cis6MTAzRkUwMDAwMDAwMDAwMEMyMDEwMEY4MDI4MDJGMzUwMEMwMDUwRTVECis6MTAzRkYwMDAwMDAwMDAyODA5ODAzNkQyMDAwMDAwMDAwMDAyMDFFQzE5Cis6MTA0MDAwMDAxNkMwNkUzQzE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTcxCis6MTA0MDEwMDAwMDAwMDAwMDAwMTAwMUUwMDY4MDJGMzIwMDAwMDAwMEM4Cis6MTA0MDIwMDAwMDAwMDBBOEUxMDAwMDM0MDAwMDAwMDBBMjAwMDBGQzM1Cis6MTA0MDMwMDAwMjAwMDAzMjAwMDAzMjAzODAwMTAwODBBMjgwMkZCNjBGCis6MTA0MDQwMDAwMDAwNUIwNUI5MDEwMEQ4MDI4MDAxQjIwMDAwMzIwMzE0Cis6MTA0MDUwMDAwMDAwMDBGODAyMDAwMDkyMDAwMDAwMDAwMDAwMDAzODlDCis6MTA0MDYwMDAxODgwRjczQTAwMDAwMDAwMDAwMDAwMzhGOEJGODMzMEU1Cis6MTA0MDcwMDAwMDAwNUYwNTA0MDEwMDgwRjJCRDgzQkMwMDAwMzIwMzM0Cis6MTA0MDgwMDBBOTAwMDBGODAyMDAwMDkyMDBDMDY2MDUxODAxMDAwQ0FCCis6MTA0MDkwMDBBOENEM0VCMjAwMDA2MjA1ODQwMDAwNzQxRjQwRjdCQTRDCis6MTA0MEEwMDAwMDAwMzIwM0E5MDAwMEY4MDIwMDAwOTIwMDAwMDAwMEE2Cis6MTA0MEIwMDAwMDAwMDA3NDBGMDAwMDMyMDBDMDY2MDUxODAxMDAwQ0ZCCis6MTA0MEMwMDBBOENEM0VCMjE4MDAzNjAwMDAwMDAwRjg3MzhBMDNGOTRDCis6MTA0MEQwMDAwMDAwNjMwNTAwMDAwMEIwMDIwMDAwOTIwMDAwMDAwMDM0Cis6MTA0MEUwMDAwMDAwMDA3QzBGODA4MzMyMDAwMDAwMDAwMDI4MDAwMEU4Cis6MTA0MEYwMDAwNzAwMDAzMjAwMDAwMDAwMDAzMDAwMDAwNzAwMDAzMjFFCis6MTA0MTAwMDAwMDAxMDA4MDAwMzgwMDAwMDcwMDM3MzIwMDAwMDAwMDg2Cis6MTA0MTEwMDAwMDNDMDAwQzA3ODA4MzMyMDAwMDZCMDUxMjAwMDA0ODUxCis6MTA0MTIwMDAwMkMwODBCMjAwMDAzMjAzQTkwMDAwMDhFODAxMDA5NDM4Cis6MTA0MTMwMDAwMDAwNzMwNTA0MDEwMDgwQTJDMEVEQkM1MjAwMDAwMDI1Cis6MTA0MTQwMDAwMDAwMDA3NDBFMDAzNjMyMDAwMDAwMDAwMDAwMDBDMEM1Cis6MTA0MTUwMDAwRTQwMDEzMjQwN0UwNTAwMDAwMDAwQjQwRTAwMzczMkYwCis6MTA0MTYwMDAwMDAwMDAwMDAwMDAwMEM0MEU4MDA3MzI2NDAwNzgwNUUzCis6MTA0MTcwMDAwMDAwMDBDQzBFMDAzNjkyMjkwMDAwMDAwMDAwMDA3NDAwCis6MTA0MTgwMDAwRTAwMzYzMjAwMDAwMDAwMDAwMDAwQzAwRTQwMDAzMjc5Cis6MTA0MTkwMDBBMDhDMDAwMDAwMDAwMEI0MEUwMDM2MzIwMDAwMDAwMEM5Cis6MTA0MUEwMDAwMDAwMDBDNDBFQzAwMDMyMDAwMDAwMDAwMDAwMDBDQzdGCis6MTA0MUIwMDAwRTgwMDIzMjEwMDAwMDAwMDAwMDAwRTQzMzdCRUMzOTc2Cis6MTA0MUMwMDAxRTAwMDAwMTAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDg0Cis6MTA0MUQwMDAwMDAwMDBDODZFQzBFQzM3MDAwMDFEMDQwMDAwMDBEOENECis6MTA0MUUwMDAwRUMwRUQ5MjdFMDUwMDAwMDAwMDAwODg4MkNEODEzQTZECis6MTA0MUYwMDA3RTA1MDAwMDAwMDAwMDg4ODJDRDgxM0FCRDA1MDAwMEU4Cis6MTA0MjAwMDAwMDE4MDE4ODgyQ0Q2RTNBQzYwNTAwMDAwMDE4MDE4OEFBCis6MTA0MjEwMDA4MkNENkUzQUNGMDUwMDAwMDAxODAxODg4MkNENkUzQTNCCis6MTA0MjIwMDBEODA1MDAwMDAwMTgwMTg4ODJDRDZFM0FFMTA1MDAwMDMzCis6MTA0MjMwMDAwMDE4MDE4ODgyQ0Q2RTNBRUEwNTAwMDAwMDE4MDE4ODU2Cis6MTA0MjQwMDA4MkNENkUzQUYzMDUwMDAwMDAxODAxODg4MkNENkUzQUU3Cis6MTA0MjUwMDBGQzA1MDAwMDAwMTgwMTg4ODJDRDZFM0EwNTA2MDAwMEJBCis6MTA0MjYwMDAwMDE4MDE4ODgyQ0Q2RTNBMEUwNjAwMDAwMDE4MDE4ODAxCis6MTA0MjcwMDA4MkNENkUzQTE3MDYwMDAwMDAxODAxODg4MkNENkUzQTkyCis6MTA0MjgwMDAyMDA2MDAwMDAwMTgwMTg4ODJDRDZFM0EyOTA2MDAwMDQxCis6MTA0MjkwMDAwMDE4MDE4ODgyQ0Q2RTNBMzIwNjAwMDAwMDE4MDE4OEFECis6MTA0MkEwMDA4MkNENkUzQTNCMDYwMDAwMDAxODAxODg4MkNENkUzQTNFCis6MTA0MkIwMDA0NDA2MDAwMDAwMTgwMTg4ODJDRDZFM0E0RDA2MDAwMEM5Cis6MTA0MkMwMDAwMDE4MDE4ODgyQ0Q2RTNBNTYwNjAwMDAwMDE4MDE4ODU5Cis6MTA0MkQwMDA4MkNENkUzQTVGMDYwMDAwMDAxODAxODg4MkNENkUzQUVBCis6MTA0MkUwMDA2ODA2MDAwMDAwMTgwMTg4ODJDRDZFM0E3MTA2MDAwMDUxCis6MTA0MkYwMDAwMDE4MDE4ODgyQ0Q2RTNBN0EwNjAwMDAwMDE4MDE4ODA1Cis6MTA0MzAwMDA4MkNENkUzQTgzMDYwMDAwMDAxODAxODg4MkNENkUzQTk1Cis6MTA0MzEwMDA4QzA2MDAwMDAwMTgwMTg4ODJDRDZFM0E5NTA2MDAwMEQ4Cis6MTA0MzIwMDAwMDE4MDE4ODgyQ0Q2RTNBOUUwNjAwMDAwMDE4MDE4OEIwCis6MTA0MzMwMDA4MkNENkUzQUE3MDYwMDAwMDAxODAxODg4MkNENkUzQTQxCis6MTA0MzQwMDBCMDA2MDAwMDAwMTgwMTg4ODJDRDZFM0FCOTA2MDAwMDYwCis6MTA0MzUwMDAwMDE4MDE4ODgyQ0Q2RTNBQzIwNjAwMDAwMDE4MDE4ODVDCis6MTA0MzYwMDA4MkNENkUzQUNCMDYwMDAwMDAxODAxODg4MkNENkUzQUVECis6MTA0MzcwMDBENDA2MDAwMDAwMTgwMTg4ODJDRDZFM0FERDA2MDAwMEU4Cis6MTA0MzgwMDAwMDE4MDE4ODgyQ0Q2RTNBRTYwNjAwMDAwMDE4MDE4ODA4Cis6MTA0MzkwMDA4MkNENkUzQUVGMDYwMDAwMDAxODAxODg4MkNENkUzQTk5Cis6MTA0M0EwMDBGODA2MDAwMDAwMTgwMTg4ODJDRDZFM0EwMTA3MDAwMDZGCis6MTA0M0IwMDAwMDE4MDE4ODgyQ0Q2RTNBMEEwNzAwMDAwMDE4MDE4OEIzCis6MTA0M0MwMDA4MkNENkUzQTEzMDcwMDAwMDAxODAxODg4MkNENkUzQTQ0Cis6MTA0M0QwMDAxQzA3MDAwMDAwMTgwMTg4ODJDRDZFM0EyNTA3MDAwMEY2Cis6MTA0M0UwMDAwMDE4MDE4ODgyQ0Q2RTNBMkUwNzAwMDAwMDE4MDE4ODVGCis6MTA0M0YwMDA4MkNENkUzQTAwMDBGNzAyMDAwMDAwRDQwMjAwMDA5MjY1Cis6MTA0NDAwMDAwMDAwNzIwMjAwMDAwMDgwMDIwMDAwOTAzNzA3MDAwMEU4Cis6MTA0NDEwMDAwMDFDMDE4ODgyQ0Q2RTNBM0MwNzAwMDAwMDFDMDE4ODE4Cis6MTA0NDIwMDA4MkNENkUzQTQxMDcwMDAwMDAxQzAxODg4MkNENkUzQUIxCis6MTA0NDMwMDA0NjA3MDAwMDAwMUMwMTg4ODJDRDZFM0E0QjA3MDAwMDQxCis6MTA0NDQwMDAwMDFDMDE4ODgyQ0Q2RTNBNTAwNzAwMDAwMDFDMDE4OEQ0Cis6MTA0NDUwMDA4MkNENkUzQTU1MDcwMDAwMDAxQzAxODg4MkNENkUzQTZECis6MTA0NDYwMDA1QTA3MDAwMDAwMUMwMTg4ODJDRDZFM0E1RjA3MDAwMEU5Cis6MTA0NDcwMDAwMDFDMDE4ODgyQ0Q2RTNBNjQwNzAwMDAwMDFDMDE4ODkwCis6MTA0NDgwMDA4MkNENkUzQTY5MDcwMDAwMDAxQzAxODg4MkNENkUzQTI5Cis6MTA0NDkwMDA2RTA3MDAwMDAwMUMwMTg4ODJDRDZFM0E3MzA3MDAwMDkxCis6MTA0NEEwMDAwMDFDMDE4ODgyQ0Q2RTNBNzgwNzAwMDAwMDFDMDE4ODRDCis6MTA0NEIwMDA4MkNENkUzQTdEMDcwMDAwMDAxQzAxODg4MkNENkUzQUU1Cis6MTA0NEMwMDA4MjA3MDAwMDAwMUMwMTg4ODJDRDZFM0E4NzA3MDAwMDM5Cis6MTA0NEQwMDAwMDFDMDE4ODgyQ0Q2RTNBMDAwMEZDMDIwMDAwMDBENDZFCis6MTA0NEUwMDAwMjAwMDA5MjAwMDAxMjAzMDAwMDAwRDQwMjAwMDA5MkJCCis6MTA0NEYwMDAwMDAwM0MwOTAwMDAwMDEwMDg4MDAxOTIwMDAwMzYxMDA2Cis6MTA0NTAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEQzCis6MTA0NTEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEIxCis6MTA0NTIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEVECis6MTA0NTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEEzCis6MTA0NTQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDgxCis6MTA0NTUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEJECis6MTA0NTYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDdCMDkwMDAwMDAxMEE1Cis6MTA0NTcwMDAwODgwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEM5Cis6MTA0NTgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDhECis6MTA0NTkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDQzCis6MTA0NUEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDIxCis6MTA0NUIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDVECis6MTA0NUMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDEzCis6MTA0NUQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEYxCis6MTA0NUUwMDAwMDAwODgwOTAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMENBCis6MTA0NUYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEUzCis6MTA0NjAwMDAwMjAwMDA5MDAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjU1Cis6MTA0NjEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEZDCis6MTA0NjIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEIyCis6MTA0NjMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDkwCis6MTA0NjQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDcwOTMyCis6MTA0NjUwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMDM2MTAwMDAwMDA4MDJBCis6MTA0NjYwMDAwMjAwMDA5MDAwMDBENzA5MDAwMDAwMTAwOEMwMDA5MjZFCis6MTA0NjcwMDAwMDAwM0QwQzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMEMwCis6MTA0NjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEQ3MDkwMDAwMDAxMDI4Cis6MTA0NjkwMDAwOEMwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDY4Cis6MTA0NkEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDZDCis6MTA0NkIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEU0MDkwMDAwMDAxMEVCCis6MTA0NkMwMDAwOEMwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDM4Cis6MTA0NkQwMDAwMDAwRTQwOTAwMDAwMDEwMDhDMDAwOTIwMDAwM0QwQzNBCis6MTA0NkUwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDE5Cis6MTA0NkYwMDAwMjAwMDA5MDAwMDBFNDA5MDAwMDAwMTAwOEMwMDA5MkQxCis6MTA0NzAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDBCCis6MTA0NzEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEMxCis6MTA0NzIwMDAwMjAwMDA5MDAwMDBFMjA5MDAwMDAwMTAwOEMwMDA5MkEyCis6MTA0NzMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTIwOTM2Cis6MTA0NzQwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMDNEMEMwMDAwMDAxMEE2Cis6MTA0NzUwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDI2Cis6MTA0NzYwMDAwMDAwRTIwOTAwMDAwMDEwMDhDMDAwOTIwMDAwMzYxMEFFCis6MTA0NzcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDYxCis6MTA0NzgwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDNGCis6MTA0NzkwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0EwQTNECis6MTA0N0EwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMEQ0MDkwMDAwMDAxMEIyCis6MTA0N0IwMDAwODAwMDE5MjAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjlCCis6MTA0N0MwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDRCCis6MTA0N0QwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAxCis6MTA0N0UwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MERGCis6MTA0N0YwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDFCCis6MTA0ODAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDc1MEEwMDAwMDAxMDA3Cis6MTA0ODEwMDAwODgwMDA5MjAwMDBENDA5MDAwMDAwMTAwODAwMDE5MkY2Cis6MTA0ODIwMDAwMDAwQ0YwOTAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDdGCis6MTA0ODMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEEwCis6MTA0ODQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDdFCis6MTA0ODUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEJBCis6MTA0ODYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDcwCis6MTA0ODcwMDAwMjAwMDA5MDAwMDA3NTBBMDAwMDAwMTAwODAwMDE5MjdDCis6MTA0ODgwMDAwMDAwRDQwOTAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOUM4Cis6MTA0ODkwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDY3Cis6MTA0OEEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDFFCis6MTA0OEIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDVBCis6MTA0OEMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDEwCis6MTA0OEQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEVFCis6MTA0OEUwMDAwMDAwRTQwQTAwMDAwMDEwMDg4MDAwOTIwMDAwRDQwOUQzCis6MTA0OEYwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMENGMDkwMDAwMDAxMDI1Cis6MTA0OTAwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDc0Cis6MTA0OTEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEY5Cis6MTA0OTIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEFGCis6MTA0OTMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDhECis6MTA0OTQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTQwQTIxCis6MTA0OTUwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMEQ0MDkwMDAwMDAxMEJGCis6MTA0OTYwMDAwODAwMDE5MjAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MkU5Cis6MTA0OTcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDk5Cis6MTA0OTgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDRGCis6MTA0OTkwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDJECis6MTA0OUEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTMwOUMzCis6MTA0OUIwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MDA3Cis6MTA0OUMwMDAwMjAwMDA5MDAwMDBFMzA5MDAwMDAwMTAwODgwMDA5MjNGCis6MTA0OUQwMDAwMDAwM0QwQzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDVECis6MTA0OUUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEVGCis6MTA0OUYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MENECis6MTA0QTAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDA4Cis6MTA0QTEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUzMDkwMDAwMDAxMDg4Cis6MTA0QTIwMDAwODAwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDkzCis6MTA0QTMwMDAwMDAwRTMwOTAwMDAwMDEwMDgwMDAxOTIwMDAwM0QwQzk2Cis6MTA0QTQwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEI1Cis6MTA0QTUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDZDCis6MTA0QTYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEE4Cis6MTA0QTcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDVFCis6MTA0QTgwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDNDCis6MTA0QTkwMDAwMDAwOEMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDkyCis6MTA0QUEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMDUxCis6MTA0QUIwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEMzCis6MTA0QUMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDQ4Cis6MTA0QUQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEZFCis6MTA0QUUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MERDCis6MTA0QUYwMDAwMDAwNUUwQzAwMDAwMDEwMDg0MDAxOTIwMDAwNTQwQzAxCis6MTA0QjAwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDVFMEMwMDAwMDAxMDQwCis6MTA0QjEwMDAwODQwMDE5MjAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MkY3Cis6MTA0QjIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwNUUwQ0MzCis6MTA0QjMwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEM0Cis6MTA0QjQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDdCCis6MTA0QjUwMDAwMDAwODEwOTAwMDAwMDEwMDg0MDAwOTIwMDAwODEwOTU3Cis6MTA0QjYwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDgxMDkwMDAwMDAxMDgxCis6MTA0QjcwMDAwOEMwMDA5MjAwMDA4MTA5MDAwMDAwMTAwODAwMDE5MkE2Cis6MTA0QjgwMDAwMDAwODYwOTAwMDAwMDEwMDg0MDAxOTIwMDAwODEwOTIxCis6MTA0QjkwMDAwMDAwMDAxMDA4ODAwMTkyMDAwMDgxMDkwMDAwMDAxMDUwCis6MTA0QkEwMDAwOEMwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDUyCis6MTA0QkIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDU3Cis6MTA0QkMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDQ5MEIwMDAwMDAxMDZGCis6MTA0QkQwMDAwODgwMDA5MjAwMDA0OTBCMDAwMDAwMTAwOEMwMDA5MkZECis6MTA0QkUwMDAwMDAwNDkwQjAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOUVFCis6MTA0QkYwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDA0Cis6MTA0QzAwMDAwMjAwMDA5MDAwMDA0OTBCMDAwMDAwMTAwOEMwMDE5MjUzCis6MTA0QzEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEY2Cis6MTA0QzIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEFDCis6MTA0QzMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDhBCis6MTA0QzQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEM2Cis6MTA0QzUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDY4MEMwMDAwMDAxMEJFCis6MTA0QzYwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDExCis6MTA0QzcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDk2Cis6MTA0QzgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDRDCis6MTA0QzkwMDAwMjAwMDA5MDAwMDBEODBDMDAwMDAwMTAwODQwMDE5MkIzCis6MTA0Q0EwMDAwMDAwREIwQzAwMDAwMDEwMDg0MDAxOTIwMDAwNEMwQ0RBCis6MTA0Q0IwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMERCMEMwMDAwMDAxMDEyCis6MTA0Q0MwMDAwODQwMDE5MjAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjhCCis6MTA0Q0QwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwREIwQzk1Cis6MTA0Q0UwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDhEMDcwMDAwMDAxMDM1Cis6MTA0Q0YwMDAwODAwMDI5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEMwCis6MTA0RDAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwREMwQzYzCis6MTA0RDEwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDRDMEMwMDAwMDAxMDQwCis6MTA0RDIwMDAwODQwMDE5MjAwMDBEQzBDMDAwMDAwMTAwODQwMDE5MkQ1Cis6MTA0RDMwMDAwMDAwOEMwNzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMEFGCis6MTA0RDQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERDMEMwMDAwMDAxMDU5Cis6MTA0RDUwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDIwCis6MTA0RDYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEE1Cis6MTA0RDcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUxMEMwMDAwMDAxMDI0Cis6MTA0RDgwMDAwODgwMDA5MjAwMDBFMTBDMDAwMDAwMTAwOEMwMDA5MkIyCis6MTA0RDkwMDAwMDAwRTEwQzAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOUEzCis6MTA0REEwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDUyCis6MTA0REIwMDAwMjAwMDA5MDAwMDBFMTBDMDAwMDAwMTAwOEMwMDE5MjA5Cis6MTA0REMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDQ1Cis6MTA0REQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEZCCis6MTA0REUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEQ5Cis6MTA0REYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDE1Cis6MTA0RTAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MENBCis6MTA0RTEwMDAwMjAwMDA5MDAwMDA2QTA5MDAwMDAwMTAwODQwMDA5MkEzCis6MTA0RTIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEU0Cis6MTA0RTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDlBCis6MTA0RTQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDc4Cis6MTA0RTUwMDAwMDAwRjEwQzAwMDAwMDEwMDg4MDAwOTIwMDAwRjEwQzJFCis6MTA0RTYwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMEYxMEMwMDAwMDAxMENCCis6MTA0RTcwMDAwODAwMDE5MjAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MkQ0Cis6MTA0RTgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjEwQ0NECis6MTA0RTkwMDAwMDAwMDAxMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MEUxCis6MTA0RUEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDE4Cis6MTA0RUIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDUwRDg4Cis6MTA0RUMwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDA1MEQwMDAwMDAxMDk2Cis6MTA0RUQwMDAwOEMwMDA5MjAwMDAwNTBEMDAwMDAwMTAwODAwMDE5MkJCCis6MTA0RUUwMDAwMDAwQ0YwOTAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMEI5Cis6MTA0RUYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDA1MEQwMDAwMDAxMDdFCis6MTA0RjAwMDAwOEMwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEVFCis6MTA0RjEwMDAwMDAwOEMwNzAwMDAwMDEwMDgwMDAwOTIwMDAwMzYxMDBFCis6MTA0RjIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMENDCis6MTA0RjMwMDAwODgwMDA5MjAwMDAxMzBEMDAwMDAwMTAwOEMwMDA5MkNECis6MTA0RjQwMDAwMDAwOEMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwOEMwNzkwCis6MTA0RjUwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEEwCis6MTA0RjYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDU3Cis6MTA0RjcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDkzCis6MTA0RjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDQ5Cis6MTA0RjkwMDAwMjAwMDA5MDAwMDA4QzA3MDAwMDAwMTAwODgwMDA5MkMyCis6MTA0RkEwMDAwMDAwMjEwRDAwMDAwMDEwMDg4MDAwOTIwMDAwOEMwNzE2Cis6MTA0RkIwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDhDMDcwMDAwMDAxMEEzCis6MTA0RkMwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEFFCis6MTA0RkQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDMzCis6MTA0RkUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEU5Cis6MTA0RkYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEM3Cis6MTA1MDAwMDAwMDAwOEMwNzAwMDAwMDEwMDg4MDAwOTIwMDAwMjEwREI1Cis6MTA1MDEwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDhDMDcwMDAwMDAxMDQyCis6MTA1MDIwMDAwODAwMDE5MjAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjY3Cis6MTA1MDMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEQyCis6MTA1MDQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDg4Cis6MTA1MDUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDY2Cis6MTA1MDYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEEyCis6MTA1MDcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMDdCCis6MTA1MDgwMDAwODgwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEFFCis6MTA1MDkwMDAwMDAwOEMwNzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDRDCis6MTA1MEEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDI4Cis6MTA1MEIwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDA2Cis6MTA1MEMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDQyCis6MTA1MEQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEZEMEMwMDAwMDAxMEE1Cis6MTA1MEUwMDAwODgwMDA5MjAwMDBGRDBDMDAwMDAwMTAwOEMwMDA5MjMzCis6MTA1MEYwMDAwMDAwRkQwQzAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOTI0Cis6MTA1MTAwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEVFCis6MTA1MTEwMDAwMjAwMDA5MDAwMDBGRDBDMDAwMDAwMTAwOEMwMDE5Mjg5Cis6MTA1MTIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEUxCis6MTA1MTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDk3Cis6MTA1MTQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDc1Cis6MTA1MTUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEIxCis6MTA1MTYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDMxMEQwMDAwMDAxMERGCis6MTA1MTcwMDAwODAwMDI5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDNCCis6MTA1MTgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDgxCis6MTA1MTkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDM3Cis6MTA1MUEwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDE1Cis6MTA1MUIwMDAwMDAwODgwOTAwMDAwMDEwMDhDMDAxOTIwMDAwMzYxMEFECis6MTA1MUMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDA3Cis6MTA1MUQwMDAwMjAwMDA5MDAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjdBCis6MTA1MUUwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwQzEwOTlECis6MTA1MUYwMDAwMDAwMDAxMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MDdFCis6MTA1MjAwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEI0Cis6MTA1MjEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwODgwOUE1Cis6MTA1MjIwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MDhFCis6MTA1MjMwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDg0Cis6MTA1MjQwMDAwMDAwQ0YwOTAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDU1Cis6MTA1MjUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEMxMDkwMDAwMDAxMDYyCis6MTA1MjYwMDAwOEMwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDhCCis6MTA1MjcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDkwCis6MTA1MjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDgyCis6MTA1MjkwMDAwODgwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDlDCis6MTA1MkEwMDAwMDAwNkYwQjAwMDAwMDEwMDg4MDAwOTIwMDAwM0QwQzExCis6MTA1MkIwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDNECis6MTA1MkMwMDAwMjAwMDA5MDAwMDA2RjBCMDAwMDAwMTAwODgwMDA5MkE4Cis6MTA1MkQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDMwCis6MTA1MkUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEU2Cis6MTA1MkYwMDAwMjAwMDA5MDAwMDA2RjBCMDAwMDAwMTAwODAwMDE5MkY3Cis6MTA1MzAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQkNCCis6MTA1MzEwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDNEMEMwMDAwMDAxMDg5Cis6MTA1MzIwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDRBCis6MTA1MzMwMDAwMDAwNkYwQjAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDAyCis6MTA1MzQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDg1Cis6MTA1MzUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDYzCis6MTA1MzYwMDAwMDAwNkYwQjAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMEQyCis6MTA1MzcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDkxCis6MTA1MzgwMDAwODAwMDE5MjAwMDAzRDBDMDAwMDAwMTAwODQwMDE5MjRFCis6MTA1MzkwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQjNCCis6MTA1M0EwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MDhDCis6MTA1M0IwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAzCis6MTA1M0MwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQjBCCis6MTA1M0QwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MERECis6MTA1M0UwMDAwMjAwMDA5MDAwMDA2RjBCMDAwMDAwMTAwODgwMDA5Mjg3Cis6MTA1M0YwMDAwMDAwM0QwQzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDMzCis6MTA1NDAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDAwCis6MTA1NDEwMDAwODgwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDFBCis6MTA1NDIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMERFCis6MTA1NDMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDk0Cis6MTA1NDQwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDcyCis6MTA1NDUwMDAwMDAwNkYwQjAwMDAwMDEwMDhDMDAxOTIwMDAwM0QwQzFFCis6MTA1NDYwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDhCCis6MTA1NDcwMDAwMjAwMDA5MDAwMDA2RjBCMDAwMDAwMTAwOEMwMDE5MkI1Cis6MTA1NDgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDdFCis6MTA1NDkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDM0Cis6MTA1NEEwMDAwMjAwMDA5MDAwMDBENzBCMDAwMDAwMTAwODgwMDA5MjVFCis6MTA1NEIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDRFCis6MTA1NEMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMDI3Cis6MTA1NEQwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDk5Cis6MTA1NEUwMDAwMDAwRDcwQjAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDZBCis6MTA1NEYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEQ0Cis6MTA1NTAwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEIxCis6MTA1NTEwMDAwMDAwRDcwQjAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDM5Cis6MTA1NTIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEEzCis6MTA1NTMwMDAwMjAwMDA5MDAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjVCCis6MTA1NTQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDcwQjIxCis6MTA1NTUwMDAwMDAwMDAxMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MDFBCis6MTA1NTYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDUxCis6MTA1NTcwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDhECis6MTA1NTgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDQzCis6MTA1NTkwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDIxCis6MTA1NUEwMDAwMDAwOEMwNzAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDM3Cis6MTA1NUIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERGMEIwMDAwMDAxMERGCis6MTA1NUMwMDAwOEMwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDI4Cis6MTA1NUQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDJECis6MTA1NUUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEUzCis6MTA1NUYwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEMxCis6MTA1NjAwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwN0FGCis6MTA1NjEwMDAwMDAwMDAxMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MEQ5Cis6MTA1NjIwMDAwMjAwMDA5MDAwMDBERjBCMDAwMDAwMTAwODgwMDA5MkQ0Cis6MTA1NjMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMENDCis6MTA1NjQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDgyCis6MTA1NjUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDYwCis6MTA1NjYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDlDCis6MTA1NjcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEMzMEMwMDAwMDAxMDM5Cis6MTA1NjgwMDAwODQwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEU3Cis6MTA1NjkwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDZDCis6MTA1NkEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDk0MDcwMDAwMDAxMDNECis6MTA1NkIwMDAwODQwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEI4Cis6MTA1NkMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDNDCis6MTA1NkQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEYyCis6MTA1NkUwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEQwCis6MTA1NkYwMDAwMDAwRTYwNzAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDRECis6MTA1NzAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MEMxCis6MTA1NzEwMDAwMjAwMDA5MDAwMDA5QjA4MDAwMDAwMTAwODAwMDE5MkE5Cis6MTA1NzIwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwNzg3Cis6MTA1NzMwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMEE1MDgwMDAwMDAxMDAxCis6MTA1NzQwMDAwODAwMDE5MjAwMDBBNTA4MDAwMDAwMTAwODAwMDE5MjY2Cis6MTA1NzUwMDAwMDAwQTUwODAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMEFCCis6MTA1NzYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDYxCis6MTA1NzcwMDAwMjAwMDA5MDAwMDBGNTA3MDAwMDAwMTAwODgwMDA5MjcxCis6MTA1NzgwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwNzI3Cis6MTA1NzkwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MDk4Cis6MTA1N0EwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDBGCis6MTA1N0IwMDAwMDAwMDMwODAwMDAwMDEwMDg4MDAwOTIwMDAwOUEwODEyCis6MTA1N0MwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDkzMDcwMDAwMDAxMDA1Cis6MTA1N0QwMDAwODAwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEQ2Cis6MTA1N0UwMDAwMDAwQkIwODAwMDAwMDEwMDg0MDAwOTIwMDAwQkIwODQ5Cis6MTA1N0YwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMEJCMDgwMDAwMDAxMEFDCis6MTA1ODAwMDAwOEMwMDA5MjAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MkY5Cis6MTA1ODEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEVBCis6MTA1ODIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUwMDgwMDAwMDAxMDZFCis6MTA1ODMwMDAwOEMwMDA5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEI2Cis6MTA1ODQwMDAwMDAwOTMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMENECis6MTA1ODUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDcwCis6MTA1ODYwMDAwMjAwMDA5MDAwMDBFMjA4MDAwMDAwMTAwODAwMDE5MjExCis6MTA1ODcwMDAwMDAwRTIwODAwMDAwMDEwMDgwMDAxOTIwMDAwOTMwN0Y5Cis6MTA1ODgwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MEE3Cis6MTA1ODkwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDFFCis6MTA1OEEwMDAwMDAwRTQwODAwMDAwMDEwMDg4MDAwOTIwMDAwRTQwOEY2Cis6MTA1OEIwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMDkzMDcwMDAwMDAxMEQ0Cis6MTA1OEMwMDAwODAwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEU1Cis6MTA1OEQwMDAwMDAwOTMwNzAwMDAwMDEwMDg0MDAwOTIwMDAwQjEwODhCCis6MTA1OEUwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMEIxMDgwMDAwMDAxMEM1Cis6MTA1OEYwMDAwOEMwMDA5MjAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MjA5Cis6MTA1OTAwMDAwMDAwOTMwNzAwMDAwMDEwMDgwMDAwOTIwMDAwOTMwN0I5Cis6MTA1OTEwMDAwMDAwMDAxMDA4NDAwMDkyMDAwMEY4MDgwMDAwMDAxMDhECis6MTA1OTIwMDAwODgwMDA5MjAwMDBGODA4MDAwMDAwMTAwOEMwMDA5MkYzCis6MTA1OTMwMDAwMDAwOTMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMERDCis6MTA1OTQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDdGCis6MTA1OTUwMDAwMjAwMDA5MDAwMDAyQzA5MDAwMDAwMTAwODgwMDA5MjU2Cis6MTA1OTYwMDAwMDAwOTMwNzAwMDAwMDEwMDhDMDAwOTIwMDAwOTMwNzk5Cis6MTA1OTcwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MEI2Cis6MTA1OTgwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDJECis6MTA1OTkwMDAwMDAwMEMwOTAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDgyCis6MTA1OUEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDkzMDcwMDAwMDAxMDNCCis6MTA1OUIwMDAwODAwMDE5MjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEY0Cis6MTA1OUMwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwRjQwNzg0Cis6MTA1OUQwMDAwMDAwMDAxMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MEQ3Cis6MTA1OUUwMDAwMjAwMDA5MDAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MkUwCis6MTA1OUYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDA5Cis6MTA1QTAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDIwMDkwMDAwMDAxMDRCCis6MTA1QTEwMDAwODgwMDA5MjAwMDAyMDA5MDAwMDAwMTAwOEMwMDA5MkQ5Cis6MTA1QTIwMDAwMDAwOTMwNzAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMEVCCis6MTA1QTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDhFCis6MTA1QTQwMDAwMjAwMDA5MDAwMDBFRjA4MDAwMDAwMTAwODgwMDA5MkEzCis6MTA1QTUwMDAwMDAwRUYwODAwMDAwMDEwMDhDMDAwOTIwMDAwOTMwNzRCCis6MTA1QTYwMDAwMDAwMDAxMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MEM1Cis6MTA1QTcwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDNDCis6MTA1QTgwMDAwMDAwMzkwOTAwMDAwMDEwMDg4MDAwOTIwMDAwMzkwOTY4Cis6MTA1QTkwMDAwMDAwMDAxMDA4QzAwMDkyMDAwMDkzMDcwMDAwMDAxMEYyCis6MTA1QUEwMDAwODAwMDE5MjA4MDAzMTAzMDAxODAxRTg3NjIwODE5OTZFCis6MTA1QUIwMDAwODAwMkYwMzAwMTgwMUU4NzYyMDgxOTkwMDAwOTkwRjUzCis6MTA1QUMwMDAwMDAwMDA4MDAyMDAwMEYwMDgwMDkxMDcxRDE5MDFFOEE1Cis6MTA1QUQwMDA3NjIwODFCOTAwMDAzMTAzMDAwMDAwRjg2MjgxMkY5NTIzCis6MTA1QUUwMDAwMDAwMzEwMzgwMDAwMDgwMDI4MTJGQjYyQTAwMzEwM0JDCis6MTA1QUYwMDBEMDAxMDAyQzgyQ0QyRTkyMDgwMDMxMDMwMDFDMDFFODU5Cis6MTA1QjAwMDA3NjIwODE5OTAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMkQ5Cis6MTA1QjEwMDAwMDAwMDAwMDAwMEUwMUVDMDZDMDZFMzU1NDAwMDAwMENECis6MTA1QjIwMDAwMDAwMDAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDBCQzRBCis6MTA1QjMwMDBBODAwMkQzN0I0NDQwMDAwMDAwODAwMDA4N0NEOEIzQTQwCis6MTA1QjQwMDAwMDAwMDAwMDAwMDAwMDc4OTlDMDJDMzdCNDAwMDAwMDZECis6MTA1QjUwMDAwMDAwMDA3ODg5OEQ5NzNBMDAwMDM2MTAwMjEwMDAwMDhFCis6MTA1QjYwMDA4N0JGOTdCQTAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMjBGCis6MTA1QjcwMDAwMDAwOUQwNzEyMDAwMDQwRjJDMTM4QjQwMDAwMDAwMDkwCis6MTA1QjgwMDAwMDkwMDA3ODA5MDA2RTMyMDAwMDM2MTAwNEEwMDAwMDdBCis6MTA1QjkwMDAwOTgwNkVCMjAwMDBBMjA3MDRBNTAwMDQwOTgwNkVCMjVECis6MTA1QkEwMDAwMDAwMDAwMDAwMDAwMDA0MDkwMDkwMzIwMDAwQTQwNzdCCis6MTA1QkIwMDAwNDAxMDAwNDA5NjQ5MEJDMDAwMDAwMDAwMDAwMDAwNDFGCis6MTA1QkMwMDAwOTQwMDAzMjA4MDAwMDAwNkUzNDAyRTgxNjI0OTAzOUMzCis6MTA1QkQwMDAwMDAwQTUwN0I3MTAwMkUwMDY4MDk3QjIwMDAwQTgwN0YyCis6MTA1QkUwMDA4MDAwMDA4MEYyODBGQ0I2MDAwMEE5MDcwMDAwMDBDODE5Cis6MTA1QkYwMDBGRjgwRkM5NDAwMDBBQTA3OUY5OTAwODA4MjFCRUVCQ0U2Cis6MTA1QzAwMDAwMDAwMDAwMDAwOTgwMEUwMEUwMDZFMzIwMDAwMDAwMDZFCis6MTA1QzEwMDBBNzAwMDA4MDAyMDAwMDMwMTgwMDM2MDAwMDAwMDBGOEU1Cis6MTA1QzIwMDA3MzBBMDNGOTAwMDAwMDAwMDAxMDAyMUMwOTAwNkUzMjI0Cis6MTA1QzMwMDA0MDAwQUYwNzA2MDEwMDgwODJDRDkxQkMwMEMwQjAwN0Q0Cis6MTA1QzQwMDAwMDE4MDJFMDA2ODAzNjkyMDBFMDAwMDAwMDE4MDJFMDMyCis6MTA1QzUwMDAwNjgwMzYzMjAwMDAwMDAwMDAwMDAwMjAwOTgwMDMzMjc4Cis6MTA1QzYwMDAwMDAwQjMwNzgwRDcwMTgwMzJDMDZFQjYwMDAwMDAwMDhDCis6MTA1QzcwMDAwMDAwMDAyMDQ5MDA5MjNBMDAwMDAwMDAwMDk4MDExODNFCis6MTA1QzgwMDAwOTAwNkUzMjAwMDAwMDAwMDAwQTAyMjQwOUMwNkUzMkQyCis6MTA1QzkwMDAwMDAwMDAwMDAwQzAwMTI4MDk4MDZFMzIwMDAwQzEwNzJBCis6MTA1Q0EwMDA4MDBFMDE4MDEyQzA2RUI2MDIwMDAwMDAwMDNDMDJFQ0MzCis6MTA1Q0IwMDAwNjAwMzYzMjAwMDAwMDAwMDAwMDAwMDA0OTAxOTIzQTYwCis6MTA1Q0MwMDAwMDAwQkQwNzgwRDYwMTgwNDJDMDZFQjYwMDgyMDAwMDkxCis6MTA1Q0QwMDAwMDEwMDJFMEE2Q0Q5MTMyMDBBMDAwMDAwMDJDMDJFOEU2Cis6MTA1Q0UwMDAwNjAwMzYzMjI4MDBDQjA3MDAzQTAyRUMwNjAwMzY5MjU2Cis6MTA1Q0YwMDAwMDAwMDAwMEQzMDEwMDFDRDlDMTkxMzQwMDgyMDAwMEQzCis6MTA1RDAwMDAwMDEwMDJFMEE2Q0Q5MTMyMDBBMDAwMDAwMDJDMDJFOEI1Cis6MTA1RDEwMDAwNjAwMzYzMjM0MDBDQjA3MDAzQTAyRUMwNjAwMzY5MjE5Cis6MTA1RDIwMDAwNDAwMDAwMDAwM0MwMkVDMDYwMDM2MzIyODAwMDAwMEFGCis6MTA1RDMwMDAwMDAwMDAwMDg5MEQ5MjNBMDAwMEM3MDc4MEQ2MDE4MDVDCis6MTA1RDQwMDA0MkMwNkVCNjAwODYwMDAwMDAxMDAyRTBBNkNEOTEzMjdGCis6MTA1RDUwMDAwNEEwMDAwMDAwMkMwMkU4MDYwMDM2MzIxNDAwQ0IwNzM1Cis6MTA1RDYwMDAwMDNBMDJFQzA2MDAzNjkyMDAwMDAwMDBEMzAxMDAxQzRECis6MTA1RDcwMDBEOUMxOTEzNDAwODYwMDAwMDAxMDAyRTBBNkNEOTEzMjE2Cis6MTA1RDgwMDAwNEEwMDAwMDAwMkMwMkU4MDYwMDM2MzIyMDAwQ0IwN0Y5Cis6MTA1RDkwMDAwMDNBMDJFQzA2MDAzNjkyMTIwMDAwMDAwMDM4MDJFQ0Q1Cis6MTA1REEwMDA4NkNEOTEzQTA4MDAwMDAwMDAyODAyRTg4NjI0OTAzOTQ4Cis6MTA1REIwMDAwMDAwMDAwMDAwMjAwMkUwOTYyNDE0MzcwMDAwMDAwMERDCis6MTA1REMwMDAwMDQwMDFFMDA2ODA5MTMyMDAwMEQxMDcwNDAxMDA4MDBDCis6MTA1REQwMDAwMjgwOTJCQzAwMDAwMDAwMDBDMDAxRTAwNjAwMDAzMjFBCis6MTA1REUwMDAwMDAwMDAwMDAwMzAwMEUwMDYwMDAwMzIwMDAwMDAwMDZCCis6MTA1REYwMDAwMEIwMDBFMDA2MDAwMDMyMjAwMDAwMDAwMDAwMDAwMEJCCis6MTA1RTAwMDAwNzAwMzYzMjAwMDAwMDAwMDAwMDAwNzhBOTAwMkQzNzlFCis6MTA1RTEwMDAwMDQ1MDAwMDAwMDgwMDAwODc4RDk3M0EwMDAwMDAwMDUwCis6MTA1RTIwMDAwMDAwMDA3ODk5QzAyQzM3MDAwMTAwMDAwMDAwMDA3OEM1Cis6MTA1RTMwMDA4OThEOTczQTAwMDAzNjEwMDIxMDAwMDA4N0JGOTdCQThDCis6MTA1RTQwMDAwMDAwMDAwMDAwMTgwMDAwMDc0MEZFMzIwMDAwREEwN0UyCis6MTA1RTUwMDAxMjAwMDA0OEYyQzEzOEI0MDAwMERFMDc4MEQ3MDEyQ0UwCis6MTA1RTYwMDAwOUMwNkVCMjAwMDAwMDAwREFENzAxRUMwNkMwNkUzNTQyCis6MTA1RTcwMDAwMDAwMDAwMDAwNUEwMUVDMDY0MEVEMzIwMDAwMDAwMDc2Cis6MTA1RTgwMDAwMDVDMDFFODA2ODA4QjMyMDAwMEUxMDc4MDAxMDA4MEExCis6MTA1RTkwMDA2MkMwOTJCNjAwMDAwMDAwMDAwMDAwRjg4MjgxMkYzNDNBCis6MTA1RUEwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDMzCis6MTA1RUIwMDAwMDA0MDEzODA4QzA2RTMyMDAwMDAwMDAwMDYyMDFFQ0VFCis6MTA1RUMwMDAwNjgwODMzMjAxMDA5MzA3MTIwMTAwMkM4MkNEMkVCMjhFCis6MTA1RUQwMDAwMDAwRTQwNzAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEM1Cis6MTA1RUUwMDAwMDU0MDFGQzAyQzA2RTMyMDAwMDAwMDAwMDAwMDBEODI3Cis6MTA1RUYwMDAwMjgwMDEzMjAwQzBFQzA3MTgwMTAwMENBOENEM0VCMkIwCis6MTA1RjAwMDAyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIyRDAwMkYwMzlBCis6MTA1RjEwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEVBMDcwMDAwMDA4MEEyCis6MTA1RjIwMDAwMjAwMDA5MDAwMDAwMDAwMDA2MjAxMzgwOEMwNkUzMkRDCis6MTA1RjMwMDAwMDA4MDA4MDAwMDAwMDI4MDkwMDM3MzIwMDYwNEIwRjg1Cis6MTA1RjQwMDAwMDAwMDAwODA4ODAzNkYyMDAwMDkzMDcwNDA2MDFFQzA4Cis6MTA1RjUwMDAxNkMwNkVCQzAwMDA5MzA3ODAwMDAwODA3MjgxMkZCNkNGCis6MTA1RjYwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOTMwNzBDCis6MTA1RjcwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEYyMDcwMDAwMDA4MDNBCis6MTA1RjgwMDAwMjAwMDA5MDAwMDBGNTA3MDAwMDAwRjhCMjgxMkY5NDk1Cis6MTA1RjkwMDAwMDAwQ0YwRjAwQTAwMDE4MDgwMDZFRjIwMDAwMjUxMENFCis6MTA1RkEwMDAwMDc4MDE2MDA4MDA2RUYyMDAwMEY5MDcxMjAxMDBDOEQ1Cis6MTA1RkIwMDAwMjAwMjBCMjAwMDBGQzA3MDAwMDAwODAwMjAwMDA5MEY4Cis6MTA1RkMwMDAwMDAwMDYwODEyMDEwMDVDMDg4MDIwQjIwMDAwRkMwN0Y3Cis6MTA1RkQwMDAxMjAxMDA2MDAyODAyQ0IyMDAwMEZBMDcwMDAwMDA4MDZECis6MTA1RkUwMDAwMjAwMDA5MDAwMDBGRTA3MDQwMDAwODAwMjQwODBCQzE4Cis6MTA1RkYwMDAwMDAwMDAwMDAwMDAwMEY4MUY4MEZGM0EwMDAwMDAwOEM5Cis6MTA2MDAwMDA4MDAxMDA4MEEyODAyRkI2MTgwMDM2MDBDQTAwMDBGODc4Cis6MTA2MDEwMDA3MzBBMDNGOTAwMDA5MzA3ODAwMDAwODA3MjgxMkZCNjk1Cis6MTA2MDIwMDAzRDAwMDEwODEyMDAwMDJDODJDRDJFQjIwMDAwOTMwNzIzCis6MTA2MDMwMDAwMDAwMDBGODcyODEyRjk0MDAwMEZDMDcxMjAwMDBDOEQ1Cis6MTA2MDQwMDAwMjAwMjBCMjAwMDBGQTA3MTIwMDAwNUMwODgwMjBCMkIzCis6MTA2MDUwMDAwMDAwMzYxMDA0QTAwMDE4MDgwMDZFQjIwMDAwMDAwMDE2Cis6MTA2MDYwMDAwMDAwMDA3ODc5NjEzODMyMDAwMDA3MDgxMjE4MDI0Q0VECis6MTA2MDcwMDBFMjI1NkVCMjA4MDAwMDAwMDAxMDAyMDA3OEUxNkUzOURGCis6MTA2MDgwMDAwMDAwMDAwMDAwMTgwMDIwMDcwMDAwMzIwNzAwMDAwMDk4Cis6MTA2MDkwMDAwMDAwMDAzODc4Q0FFOTM5MDAwMDM2MTAwNDAwMDAzQ0RFCis6MTA2MEEwMDAwODQwODBCMjAwMDAzNjEwMDQ5MDAwNkMwODAwNkVCMjA4Cis6MTA2MEIwMDAwMDAwMDAwMDAwOTgwMDRDMDgwMDZFMzIwMDAwMDAwMDU0Cis6MTA2MEMwMDA1MTAwMDBEODAyMDAwMDMyMDAwMDAwMDA0RDAwMDAwMDI2Cis6MTA2MEQwMDA2N0UwODMzRTAwMDAwMDAwMDAwODAwMDAwNzAwODAzMkY3Cis6MTA2MEUwMDAwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMDIxCis6MTA2MEYwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMDAwMDAwMDAwMDAxOEYzCis6MTA2MTAwMDBEOEEwODEzQzAwMDA2ODA4MDRCMDAwRTBENjIwNkVCQzM2Cis6MTA2MTEwMDAwMDAwMzgwODA0MDAwMDNDRDhFMDgzQkMwMDAwMUUwOEUyCis6MTA2MTIwMDA4MDAwMDA4MDkyODAyRkI2MDAwMDE5MDgxMjAxMDAwMDQ0Cis6MTA2MTMwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTA0Cis6MTA2MTQwMDAxRDAwMDAwMDAwMDAwMDc4MDlBNDE3MzgwMDAwMUQwODk5Cis6MTA2MTUwMDAwNDAxMDA4MDEyODA5N0JDMDAwMDE4MDg2NzAwMDBGODU2Cis6MTA2MTYwMDBBMjgwMkZCNTAwMDAxOTA4MDAwMDAwMDAwOUMwMjE5MjhDCis6MTA2MTcwMDAwMDAwMDAwMEM5MDEwMEQ4MDI0MDg0MzIwMDAwMjEwODVDCis6MTA2MTgwMDAwNDAwMDA4MDcyODAyREJDMDAwMDFGMDgxMjAwMDA0NDMzCis6MTA2MTkwMDBFMkUwMzhCMjAwMDAyQzA4NTEwMDAwRDgxMjgwMkQ5QTlECis6MTA2MUEwMDAwMDAwMDAwMDAwMDAwMDc4Rjk4MTgzMzQwMDAwMjIwODFDCis6MTA2MUIwMDAxMjAwMDA0NEUyRTUzOEIyMDAwMDI2MDg4MDAwMDA4MEFBCis6MTA2MUMwMDA4MjgwMkZCNjAwMDA1NTBGMDBBMDAxNTAwODAwNkVGMjJCCis6MTA2MUQwMDAwMDAwMDAwMDAwRjgwMUUwMDYwMDg1MzIwMDAwMjgwOEY5Cis6MTA2MUUwMDAxMjAxMDBFODAyQzAyMUIyMTgwMDM2MDAwMDAwMDBGOEQ5Cis6MTA2MUYwMDA3MzBBMDNGOTAwMDAyQjA4MDQwMTAwODAwMjgwMkRCQzAzCis6MTA2MjAwMDAwMDAwMjcwODY3MDAwMEY4QTI4MDJGQjUwMDAwMzYxMEI0Cis6MTA2MjEwMDAxMjAwMDBFODAyQzAyMUIyMDAwMDAwMDA1MTAwMDBEOEM2Cis6MTA2MjIwMDAwMjAwMDAzMjAwMDAzMDA4MkEwMTAwMDBEODIwODBCQUE1Cis6MTA2MjMwMDAwMDAwMzAwODEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDI5Cis6MTA2MjQwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEODA1Cis6MTA2MjUwMDAwMjQwODQzMjAwMDAwMDAwQ0FFMDAwNkMwODAwNkUzMjg4Cis6MTA2MjYwMDAwMDAwMDAwMDAwRTgwMDRDMDgwMDZFMzIwMDAwMzYxMDBDCis6MTA2MjcwMDAwNEYwMDAxODA4MDA2RUIyMDAwMDAwMDAwMDAwMDAzOEIyCis6MTA2MjgwMDAxODgxODMzNTAwMDAwRjA4MDRCMDAwODA4MjlCODFCQzE4Cis6MTA2MjkwMDAwMDAwMDAwMENBMDEwMEY4NDI4MDJGMzUwOEEwMEYwODU2Cis6MTA2MkEwMDAxMjAxMDA0MEEyQ0QzOUIyMDAwMDM2MDgwMDAwMDA4MDgzCis6MTA2MkIwMDAwMjAwMDA5MDAwMDA0MDA4MjkzNDAyQjgwODgwNkVCMjQ1Cis6MTA2MkMwMDAwMDAwM0IwODEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDhFCis6MTA2MkQwMDAwMDAwMDBGODczMEEwM0Y5MUQwMDAwMDAwMDAwMDA3OEI4Cis6MTA2MkUwMDAwOUE0MTczODAwMDAzRjA4MDQwMTAwODAxMjgwOTdCQzAxCis6MTA2MkYwMDAwMDAwM0EwODY3MDAwMEY4QTI4MDJGQjUwMDAwM0IwOEI0Cis6MTA2MzAwMDAwMDAwMDAwMDA5QzAyMTkyMDAwMDAwMDBDOTAxMDBEODZGCis6MTA2MzEwMDAwMjQwODQzMjAwMDAwMDAwMDAwMDAwNzhGOTgxODMzNERDCis6MTA2MzIwMDAwMDAwNDEwODEyMDAwMDQ0RTJFNTM4QjIwMDAwNDcwOENFCis6MTA2MzMwMDAyODAwMDA2Q0Q4RTA4NkJBMDAwMDU0MEYwMEEwMDE1MDdECis6MTA2MzQwMDAwODAwNkVGMjAwMDA0NzA4MURGODAxRTAwNjAwODVCMjYzCis6MTA2MzUwMDAwMDAwNDcwODgwMDAwMDgwMDI4MTJGQjYyQTAwMDAwMDVDCis6MTA2MzYwMDBEMDAxMDAyQzgyQ0QyRTMyMDAwMDRBMDgwNEEwMDBFMEFCCis6MTA2MzcwMDAwNjgwODFCMjAwMDAzNjEwMDQ5MDAwRTAwNkMwODZCMkFDCis6MTA2MzgwMDAwMDAwNTgwODAwOTgwMEUwMDZDMDg0OTIwMDAwNEYwODAyCis6MTA2MzkwMDA4MDAxMDA4MEEyODAyRkI2MDAwMDREMDgxMjAxMDAwMDhECis6MTA2M0EwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTkyCis6MTA2M0IwMDAxRDAwNEYwODA0MDEwMDgwMDJBNDE3QjgwMDAwNEMwODFCCis6MTA2M0MwMDAwMDAwMDBGOEUyODAyRjk0MDAwMDM2MTAwNEUwMDA2QzFBCis6MTA2M0QwMDAwODAwNkVCMjAwMDAwMDAwQ0FFODAwNEMwODAwNkUzMkVGCis6MTA2M0UwMDAwMDAwMzYxMDA0RjAwMDE4MDgwMDZFQjIwMDAwNTUwOEQ2Cis6MTA2M0YwMDAwNEIwMDA4MDgyOUI4MUJDMDAwMDAwMDBDQTAxMDBGODRDCis6MTA2NDAwMDA0MjgwMkYzNTA4QTA1NDA4MTIwMDAwNDBBMkNEMzlCMkI2Cis6MTA2NDEwMDAwMDAwMDAwMDAwQTAwMEUwMDY4MDgxMzIwMDAwMDAwMEMzCis6MTA2NDIwMDAwMDk4MDBFMDA2QzA4NDMyMDAwMDM2MTAwNDkwMDBFMEJFCis6MTA2NDMwMDAwNkMwODZCMjAwMDA1RDA4MkE1RDAxRTgwNjgwOEJCMkM2Cis6MTA2NDQwMDAwMDAwNUIwODEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMEVDCis6MTA2NDUwMDAwMDAwMDBGODczMEEwM0Y5MUQwMDVEMDgwNDAxMDA4MEM0Cis6MTA2NDYwMDAwMkE0MTdCODAwMDA1QTA4MDAwMDAwRjhFMjgwMkY5NDM4Cis6MTA2NDcwMDAxMDI0NjAwODM3MDAwMEY4QTI4RDJGQjEzRDAwNUUwODlGCis6MTA2NDgwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDAwMDAwMDBGOEE3Cis6MTA2NDkwMDA3MjgxMkYzNDA4MDAwMDAwQ0ExQzAxRTg3NjIwODEzOTdGCis6MTA2NEEwMDAwMDAwRkEwRDAwMDAwMDJDRjkwMTAwRjQwMDAwNjUwODVFCis6MTA2NEIwMDA4MDAwMDA4MEUyODAyRkI2MDAwMDY1MDgxMjAxMDAwMDE1Cis6MTA2NEMwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTcxCis6MTA2NEQwMDAxMDAwMDAwMDAwMTgwMDgwNjdBMTczMzkzMDAwMzIwM0ZCCis6MTA2NEUwMDAxMjAxMDA1Q0EyOEQyQ0IyMDAwMDM2MTAwMDAwMDA4MDZBCis6MTA2NEYwMDAwMjAwMDA5MDAwMDA2QjA4ODAwMDAwODA5MjgwMkZCNkEwCis6MTA2NTAwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMENDCis6MTA2NTEwMDBDOTAxMDBEODAyNDA4NDMyMDAwMDM2MTAyQTAwMDA3OEY5Cis6MTA2NTIwMDBGOTgxODNCNDAwMDA2QzA4MTIwMDAwNDRFMkU1MzhCMjNGCis6MTA2NTMwMDAwMDAwREMwRTAwMDAwMDMwMDMwMDM4RjIwMDAwNzEwODlCCis6MTA2NTQwMDAxRDAwMDAzODE4ODE4M0I1MDAwMDcxMDg4MDAwMDA4MEFDCis6MTA2NTUwMDAwMjgxMkZCNjJBMDAwMDAwRDAwMTAwMkM4MkNEMkUzMkZECis6MTA2NTYwMDAwMDAwNzQwODA0MDYwMUVDMTZDMDZFQkMwMDAwMDAwMEI4Cis6MTA2NTcwMDBDQTAxMDBGODQyODAyRjM0MDhDMDczMDgxMjAwMDA0MDlFCis6MTA2NTgwMDBBMkNEMzlCMjAwMDA3NzA4ODAwMDAwODA4MjgwMkZCNjRCCis6MTA2NTkwMDAwMDAwNTUwRjAwQTAwMTUwMDgwMDZFRjIwMDAwMDAwMDNFCis6MTA2NUEwMDAwMEY4MDFFMDA2MDA4NTMyMDAwMDc5MDgxMjAxMDAwMEMxCis6MTA2NUIwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTgwCis6MTA2NUMwMDAwMDAwOTUwODJBMzUwMkI4MDg4MDZFQjIwMDAwN0MwOEU5Cis6MTA2NUQwMDAxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGOEM2Cis6MTA2NUUwMDA3MzBBMDNGOTAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNUI0Cis6MTA2NUYwMDAwMDAwOEUwODA0MDAwMDgwMDI2MTgwQkMwMDAwODcwODUzCis6MTA2NjAwMDA4MEI4MDAwMDA5QzA2RUIyNDAwMDgyMDgwNDAwMDA4MDFCCis6MTA2NjEwMDA4MjBEOTBCQzAwMDA4MjA4MDJCMDAwODA4MjFCODRCQzA2Cis6MTA2NjIwMDAwMDAwODcwODAwMDAwMEY4QjI4MTJGOTQwMDAwMDAwMEVECis6MTA2NjMwMDAwMEQ2MDFFQzU2QzA2RTM0MDAwMDAwMDAwMDAwMDA2MDdGCis6MTA2NjQwMDAxODAwODYzQTAwMDAwMDAwMDAwMDAwODBCNzAxNzgzNDhFCis6MTA2NjUwMDAwMDAwMDAwMDAwNzgwMUUwMDYwMDg2MzI0MDAwOTUwODQ2Cis6MTA2NjYwMDAwNDAwMDA4MDgyMEQ5MEJDMDAwMDM2MTAwNEEwMDAxOEM5Cis6MTA2NjcwMDAwODAwNkVCMjAwMDBDRjBGMDAwMDAwMDBEODIwODBGQUEyCis6MTA2NjgwMDAwMDAwMzYxMDA2MDAwMDNDMTgyMDg0QkMwMDAwMzYxMEM0Cis6MTA2NjkwMDAwNEIwMDAzQzg4REI4M0JFMDAwMDAwMDAwMDAwMDA4MEU2Cis6MTA2NkEwMDBGNzIwNzgzQTAwMDAwMDAwNTg3ODAxRTBGNjIwODYzQTlBCis6MTA2NkIwMDAwMDAwMEMwODAwMDAwMDA0Rjg2MDgwOUEwMDAwOTEwOEI3Cis6MTA2NkMwMDA4MEI5MDAwMDA5QzA2RUIyMkYwMDk1MDgxMjAxMDAyQzlECis6MTA2NkQwMDA4MkNEMkVCMjAwMDA4RjA4MDAwMDAwODAwMjAwMDA5MEUyCis6MTA2NkUwMDA0MDAwOTMwODA0MDEwMDgwODIwRDkwQkMzODAwOTQwODlCCis6MTA2NkYwMDAwMDAwMDA3ODA5MDAzNjkyMzkwMDAwMDAwMDAwMDA3OEEwCis6MTA2NzAwMDAwOTAwMzYzMjAwMDA5NDA4MTIwMDAwMkNFMkU1MkVCMjk3Cis6MTA2NzEwMDAxMDAwMDAwMDAwMTgwMDgwNjdBMTczMzkwMDAwMDAwMDFECis6MTA2NzIwMDAwMDVDMDFFODA2ODA4QjMyMTAyNDAwMDAwMDAwMDBGOEI1Cis6MTA2NzMwMDBBMjhEMkYzMTMwMDA5MzA3MTIwMTAwNUNBMjhEMkNCMjg0Cis6MTA2NzQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDMwOEU2Cis6MTA2NzUwMDAwMDAwMDBGOEMyODEyRjk1MDAwMDAwMDAwMDU0MDFGQ0U5Cis6MTA2NzYwMDAwMkMwNkUzMjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjNBCis6MTA2NzcwMDAwMEMwQTEwODE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDg2Cis6MTA2NzgwMDAwMDAwMDAwODA4ODAzNjMyMkQwMDJGMDMxMjAxMDAyQzczCis6MTA2NzkwMDA4MkNEMkVCMjAwMDA5RjA4MDAwMDAwODAwMjAwMDA5MDExCis6MTA2N0EwMDAwMDAwMDAwMDAwNjIwMTM4MDhDMDZFMzIwMDA4MDA4MDVFCis6MTA2N0IwMDAwMDAwMDAyODA5MDAzNzMyMDA2MDRCMEYwMDAwMDAwODdECis6MTA2N0MwMDAwODgwMzZGMjAwMDBBRjA4MDAwMDAwODAwMjAwMDA5MDUwCis6MTA2N0QwMDAwMDAwQTcwODgwMDAwMDgwQzI4MTJGQjYwMDAwQUEwODMwCis6MTA2N0UwMDAwMEQwMDFFODA2MDAwMDkyMDAwMDAwMDAwMDAwMDBGODYwCis6MTA2N0YwMDBDMjgxMkYzNTAwMDBBQTA4MDREMTAxODAwMjgwNkVCQzNFCis6MTA2ODAwMDAwMDAwMDAwMDAwRDYwMUVDMjZDMDZFMzQwMDAwQUMwODg5Cis6MTA2ODEwMDA4MDAwMDA4MDkyODEyRkI2MDAwMEFGMDgwMEM4MDFFODE4Cis6MTA2ODIwMDAwNjAwMDA5MjAwMDAwMDAwMDAwMDAwRjg5MjgxMkYzNTYxCis6MTA2ODMwMDAwMDAwQUYwODA0QzkwMTgwMDI4MDZFQkMwMDAwMDAwMEE3Cis6MTA2ODQwMDAwMEQ2MDFFQzE2QzA2RTM0MTEwMDkzMDcxMjAxMDAyQzIzCis6MTA2ODUwMDA4MkNEMkVCMjAwMDBBRjA4MDAwMDAwODAwMjAwMDA5MDQwCis6MTA2ODYwMDAwMDAwOTMwNzlBMDEwMEY4NDI4MTJGQjUwMDAwQjgwODk0Cis6MTA2ODcwMDAxMjAxMDBDODAyMDAyMEIyMDAwMDAwMDAwMDVDMDFFQzIwCis6MTA2ODgwMDAwNjQwMDAzMjAwMDA5MzA3MzcwMDAwRjg0MjgxMkZCNDIxCis6MTA2ODkwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOTMwN0QzCis6MTA2OEEwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEI2MDgwMDAwMDA4MDNDCis6MTA2OEIwMDAwMjAwMDA5MDAwMDBDMzA4MTIwMTAwNUMwODgwMjBCMkIyCis6MTA2OEMwMDAwMDAwQjMwODEyMDEwMDYwMDI4MDJDQjIwMDAwMzYxMEY0Cis6MTA2OEQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEMwMDgxMjAxMDBDODAzCis6MTA2OEUwMDAwMjAwMjBCMjAwMDA5MzA3MzcwMDAwRjhEMjgxMkZCNEQ1Cis6MTA2OEYwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOTMwNzczCis6MTA2OTAwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEJFMDgwMDAwMDA4MEQzCis6MTA2OTEwMDAwMjAwMDA5MDAwMDBDMzA4MTIwMTAwNUMwODgwMjBCMjUxCis6MTA2OTIwMDAwMDAwQkMwODEyMDEwMDYwMDI4MDJDQjIwMDAwMzYxMDhBCis6MTA2OTMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDAwMDA3OENECis6MTA2OTQwMDA3OTYxMzgzMjAwMDBDNDA4MTIxODAyNENFMjI1NkVCMjk4Cis6MTA2OTUwMDAwMDAwMDAwMDAwMzQwMkI4MDg4MDZFMzIwMDAwMDAwMDIxCis6MTA2OTYwMDAwMEEwMDE1MDA4MDA2RTMyMDAwMDAwMDAwMDc4MDE2MEI1Cis6MTA2OTcwMDAwODAwNkUzMjAwMDBDQTA4OUQxMTAyMzQwOTAwNkVCMjkwCis6MTA2OTgwMDAwMDAwMDAwMDAwRjAwMTg4MDgwMDZFMzIwMDAwNkMwRjZCCis6MTA2OTkwMDAwMEE4MDEwODA5MDA2RUYyMDAwMDAwMDBENEY4MDFFMDMwCis6MTA2OUEwMDAwNjAwODUzMjAwMDAwMDAwREE1QzAxRTgwNjgwOEIzMkM4Cis6MTA2OUIwMDAwMDAwREMwRUREMDAwMDMwMDMwMDM4RjIwMDAwRDAwOERCCis6MTA2OUMwMDAyMzI5MDIwNDA5ODA2RUIyM0UwMENGMDgxMjAwMDAyQzc5Cis6MTA2OUQwMDA4MkNEMkVCMjA4MDBEMzA4MUQxQzAxRTg3NjIwODFCOUIzCis6MTA2OUUwMDAwMDAwRDMwODgwMDAwMDgwMDI4MTJGQjYyQTAwMDAwMDNBCis6MTA2OUYwMDBEMDAxMDAyQzgyQ0QyRTMyMDAwMEZBMEQwMDAwMDAyQ0I4Cis6MTA2QTAwMDBGOTAxMDBGNDAwMDBENzA4OUQwMTAwODAwNzQwOTNCMjBGCis6MTA2QTEwMDAwMDAwMDAwMDAwMzAwMDgwMDc4MDg4MzIwMDAwMDAwMDg1Cis6MTA2QTIwMDAwMDM4MDA4MDA3MDBFRTMyMDAwMDAwMDAwMDA4MDA4MEZGCis6MTA2QTMwMDAwN0MwODUzMjAwMDAwMDAwMDAxMDAwODAwNzQwOTAzMjNGCis6MTA2QTQwMDAxMDAwMDAwMDAwMTgwMDgwODc4RDg1MzcwMDAwMDAwMENFCis6MTA2QTUwMDAwMDIwMDA4MDA3MDA4NjMyMDAwMDAwMDAwMDI4MDA4MDJGCis6MTA2QTYwMDAwNzAwODUzMjAwMDBERTA4MTIwMTAwMDAwOUMwMjFCMkQzCis6MTA2QTcwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkzMDAwMzIwM0YyCis6MTA2QTgwMDAxMjAxMDA1Q0EyOEQyQ0IyMDAwMDM2MTAwMDAwMDA4MEM0Cis6MTA2QTkwMDAwMjAwMDA5MDAwMDAwMDAwMDBDQzAxNzgwOTgwNkUzMkY2Cis6MTA2QUEwMDAwMDAwOTMwN0RDRDEwMUU4MDY4MDk3OTIxMzAwOTMwNzVBCis6MTA2QUIwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEUyMDgwMDAwMDA4MEZFCis6MTA2QUMwMDAwMjAwMDA5MDAwMDBCQTBEMDAwMDAwMTgwOTQwODFGMjk5Cis6MTA2QUQwMDAwMDAwQTMwRDAwQTgwMTIwMDkwMDZFRjIwMDAwOTMwNzNBCis6MTA2QUUwMDA4MDAxMDA4MEYyODAyRkI2MDAwMEVDMDgxMjAxMDBDODdGCis6MTA2QUYwMDAwMjAwMjBCMjAwMDA5MzA3ODAwMDAwODA3MjgxMkZCNjUwCis6MTA2QjAwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOTMwNzYwCis6MTA2QjEwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEVBMDgwMDAwMDA4MDk1Cis6MTA2QjIwMDAwMjAwMDA5MDAwMDBDMzA4MTIwMTAwNUMwODgwMjBCMjNGCis6MTA2QjMwMDAwMDAwRTgwODEyMDEwMDYwMDI4MDJDQjIwMDAwMzYxMDRDCis6MTA2QjQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDkzMDczNTAxMDBGODZCCis6MTA2QjUwMDAxMjgxMkZCNTAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjMxCis6MTA2QjYwMDAwMDAwMDAwMDAwNTQwMUZDMDJDMDZFMzIwMEMwRjYwOEI0Cis6MTA2QjcwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDBEMTAxMDAwODExCis6MTA2QjgwMDAwODgwMzYzMjNCMDAzMTAzMTIwMTAwMkM4MkNEMkVCMjM4Cis6MTA2QjkwMDAwMDAwRjQwODAwMDAwMDgwMDIwMDAwOTAwMDAwNDQwRjk0Cis6MTA2QkEwMDAwMDk4MDEyODA5MDA2RUYyMDAwMDkzMDcwMDAwMDA4MEExCis6MTA2QkIwMDAwMjAwMDA5MDAwMDBGRTA4ODAwMTAwODBBMjgxMkZCNjM0Cis6MTA2QkMwMDAwMDAwRkUwODgwMDAwMDgwNDI4MTJGQjYwMDAwRkUwODExCis6MTA2QkQwMDAwODVCMDFFQzA2RkI2RUJDMDAwMDAwMDAwMDVBMDFFQ0YzCis6MTA2QkUwMDAwNjAwMDAzMjAwMDBGRTA4MzcwMDAwRjg0MjgxMkZCNDkyCis6MTA2QkYwMDAzRDAwMDAwMEQ3MDEwMDJDODJDRDJFMzIwMDAwMDQwOTk4Cis6MTA2QzAwMDA4MDAxMDA4MDkyODEyRkI2MDAwMDBBMDkwOEM5MDFFOEJFCis6MTA2QzEwMDAwNkJCNkVCQzAwMDAwMDAwMDBDODAxRTgwNjAwMDAzMkEwCis6MTA2QzIwMDAzMzAwMDEwOTEyMDAwMDJDODJDRDJFQjIwMDAwNTEwRjVBCis6MTA2QzMwMDAwMDAwMDAyODA5ODAwMUYyMDAwMDkzMDcwMDAwMDA4MDk2Cis6MTA2QzQwMDAwMjAwMDA5MDAwMDAwQTA5ODAwMTAwODBDMjgxMkZCNjc2Cis6MTA2QzUwMDAwMDAwMEEwOTA4RDEwMUU4MDZCQjZFQkMwMDAwMDAwMDc0Cis6MTA2QzYwMDAwMEQwMDFFODA2MDAwMDMyMzMwMDA3MDkxMjAwMDAyQ0IyCis6MTA2QzcwMDA4MkNEMkVCMjAwMDA1MTBGMDAwMDAwMjgwOUMwMDFGMkExCis6MTA2QzgwMDAwMDAwOTMwNzAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwN0JFCis6MTA2QzkwMDA4MDAxMDA4MEYyODEyRkI2MTgwMDkzMDcwMDAwMDAyQ0JECis6MTA2Q0EwMDA4MkNEMkU5MjAwMDAwRjA5MTIwMDAwQzgwMjAwMjBCMjBGCis6MTA2Q0IwMDAwMDAwMTIwOTEyMDEwMDVDMDg4MDIwQjIwMDAwMzYxMEFBCis6MTA2Q0MwMDAxMjAwMDA2MDAyODAyQ0IyMDAwMDAwMDAwMDAwMDBGOEZBCis6MTA2Q0QwMDAxRjgwRkYzQTAwMDAzMTAzMTIwMTAwMkM3MkUwMkVCMjM3Cis6MTA2Q0UwMDAwMDAwMTAwOTAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDc5Cis6MTA2Q0YwMDAwMDAwMDA3ODc5NjEzODMyMDAwMDEzMDkxMjE4MDI0QzQ0Cis6MTA2RDAwMDBFMjI1NkVCMjAwMDAwMDAwMDAzNDAyQjgwODgwNkUzMjQ2Cis6MTA2RDEwMDAwMDAwMDAwMEQ0QTAwMTUwMDgwMDZFMzIwMDAwMDAwMDA2Cis6MTA2RDIwMDBEQjc5MDE2MDA4MDA2RTMyMDAwMDU1MEZERDAwMDAwNEMxCis6MTA2RDMwMDAwODAwMDBGMjEwMDAwMDAwMDAxODAwODA4NzhEODUzN0UxCis6MTA2RDQwMDAwMDAwMDAwMDAwRjgwMUUwMDYwMDg1MzIwMDAwMUMwOTg4Cis6MTA2RDUwMDAxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODNFCis6MTA2RDYwMDA3MzBBMDNGOTMwMDAzNjEwMTIwMDAwNUNBMjhEMkNCMkI5Cis6MTA2RDcwMDAwMDAwMzYxMDA0MDcwMUVDMTZDMDZFQkMwMDAwMDAwMEQ1Cis6MTA2RDgwMDAwMEIwMDBFMDA2MDAwMDMyMDAwMDkzMDdEQTVDMDFFODgyCis6MTA2RDkwMDAwNjgwOEI5MjAwMDA5MzA3OUY0MTAxODA1MjIwNkVCQ0I5Cis6MTA2REEwMDAwMDAwMkIwOTlGOTgwMTgwNTIyMDZFQkMwMDAwMDAwMDVCCis6MTA2REIwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDAwMDU0MDFGQ0Y1Cis6MTA2REMwMDAwMkMwNkUzMjAwQzAyOTA5MTgwMTAwMENBOENEM0VCMkU1Cis6MTA2REQwMDAyMDgwOTMwNzMxMDAwMDA4MDg4MDM2QjIwMDAwMDAwMEQwCis6MTA2REUwMDAwMDAwMDBGODEyODEyRjM0M0IwMDkzMDcxMjAxMDAyQ0ExCis6MTA2REYwMDA4MkNEMkVCMjAwMDAyNzA5MDAwMDAwODAwMjAwMDA5MDIyCis6MTA2RTAwMDAwMDAwNDQwRjAwOTgwMTI4MDkwMDZFRjIwMDAwOTMwNzZCCis6MTA2RTEwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDkzMDdENTQxMDFFMENGCis6MTA2RTIwMDAwNjQwODE5MjAwMDA5MzA3MDRCMDAwODAwMjAwNkVCQzBGCis6MTA2RTMwMDAwMDAwMDAwMDAwOTAwMTAwMDgwMDZFMzIwMDAwMjUxMEU0Cis6MTA2RTQwMDAwMDc4MDE2MDA4MDA2RUYyMDAwMDkzMDcwMDAwMDA4MEU3Cis6MTA2RTUwMDAwMjAwMDA5MDAwMDAwMDAwMDAwQzAyNzgwOTgwNkUzMkYxCis6MTA2RTYwMDAwMDAwMzMwOTA0RDQwMTgwMTJDMDZFQkMwMDAwMDAwMDkxCis6MTA2RTcwMDAwMDAwMDA3ODE5ODA5NzM3MDAwMDAwMDAwMDkwMDFFMEMyCis6MTA2RTgwMDBFNjI1NkUzQTAwMDAyNTEwMDAwMDAwODAwMjAwMDBGMEE4Cis6MTA2RTkwMDAwMDAwMzcwOTAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwNzA2Cis6MTA2RUEwMDAwMDkwMDFFMDA2MDA4MDkyMDAwMDAwMDAwMDkwMDFFMEU4Cis6MTA2RUIwMDAwNjAwODAzMjAwMDAwMzA4MDAwMDAwODAwMjAwMDA5MEZECis6MTA2RUMwMDAwMDAwQTMwRDAwQTgwMTIwMDkwMDZFRjIwMDAwRTcwOEYxCis6MTA2RUQwMDA4MDAwMDA4MEYyODAyRkI2MDAwMDkzMDcwMDAwMDA4MDQxCis6MTA2RUUwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjgzCis6MTA2RUYwMDAwMDAwMDAwMDAwMDAwMDc4MDkwMDZFMzIwMjAwNDEwOTI1Cis6MTA2RjAwMDAwNEI5MDA4MDgyQ0Q2RUJDMDAwMDQzMDk4MDAwMDA4MDdGCis6MTA2RjEwMDA3MjgwRkNCNjAwMDA0NTA5MDAwMDAwRkMwMjAwMDA5MkVGCis6MTA2RjIwMDAwMDAwNDMwOTgwMDAwMDgwODI4MEZDQjYwMDAwNDUwOTEzCis6MTA2RjMwMDAwMDAwMDBGQzAyMDAwMDkyMDAwMDAwMDAwMDAwMDBBODE5Cis6MTA2RjQwMDA0MkJEOTczMDAwMDAwMDAwNTQxODg5RkNGMkMwN0MzMDJDCis6MTA2RjUwMDAwMEMwNEIwOTE4MDEwMDBDQThDRDNFQjIwMDAwMDAwMDkzCis6MTA2RjYwMDAwMDBFMDFFQzA2MDAwMDM0MDAwMDAwMDAwMDU0MDFFQ0FCCis6MTA2RjcwMDAwNkMwMkYzMjIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjUyCis6MTA2RjgwMDAwMDAwMzEwMzEyMDEwMDJDODJDRDJFQjIwMDAwNDkwOTBECis6MTA2RjkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDYyMDEzODQ0Cis6MTA2RkEwMDAwOEMwNkUzMjAwMDgwMDgwMDAwMDAwMjgwOTAwMzczMjU3Cis6MTA2RkIwMDAwMDAwNEIwRjAwMDAwMDA4RTgwMTAwRjQwMDAwMzYxMDRDCis6MTA2RkMwMDAwNDA3MDFFQzE2QzA2RUJDMDAwMDAwMDAwMDAwMDBBODIxCis6MTA2RkQwMDBBMjAwMkQzNzBBMDAwMDAwMDAwMDAwNzgwOTAwMzYzMkI4Cis6MTA2RkUwMDAwMDAwMDAwMDAwMTg4OUUwMDcwMDAwMzIwMDAwNTEwOThECis6MTA2RkYwMDAwNDAxMDA3ODE5ODA5N0JDMDIwMDVDMDkwNEI5MDA4MDg0Cis6MTA3MDAwMDA4MkNENkVCQzAwMDAwMDQ4RDYwMTAwNzhDOUNEMkMzMjdDCis6MTA3MDEwMDAwMDAwNTUwOUI2MDAwMDgwMDIwMDAwQjAwMDAwNTYwOUNCCis6MTA3MDIwMDAxMjAwMDA2NDAyODA5N0IyMDAwMDU3MDkxMjA4MDA2NDQxCis6MTA3MDMwMDAwMjAwNkVCMjAwMDA1ODA5MTIxODAwNjQwMjAwNkVCMjFECis6MTA3MDQwMDAwMDAwNTkwOTEyMTAwMDY0MDIwMDZFQjIwMDAwMDAwMDM2Cis6MTA3MDUwMDBBNjU0MDFFQzA2QzAyRjMyMDAwMDhDMDcwMDBFMDFFQzk0Cis6MTA3MDYwMDAwNjAwMDA5NDAwMjAwMDRDRDYwMTAwNzhDOUNEMkMzMkQ3Cis6MTA3MDcwMDAwMDAwNUQwOUI2MDAwMDgwMDIwMDAwQjAwMDAwNUUwOTVCCis6MTA3MDgwMDAxMjAwMDA2NDAyODA5N0IyMDAwMDVGMDkxMjA4MDA2NEQ5Cis6MTA3MDkwMDAwMjAwNkVCMjAwMDA2MDA5MTIzMDAwNjQwMjAwNkVCMjlECis6MTA3MEEwMDAwMDAwNjEwOTEyMzgwMDY0MDIwMDZFQjIwMDAwNjIwOTNCCis6MTA3MEIwMDAxMjQwMDA2NDAyMDA2RUIyMDAwMDYzMDkxMjQ4MDA2NENFCis6MTA3MEMwMDAwMjAwNkVCMjAwMDA2NDA5MTIxMDAwNjQwMjAwNkVCMjg5Cis6MTA3MEQwMDAwMDAwNjUwOTEyMTgwMDY0MDIwMDZFQjIwMDAwNjYwOTIzCis6MTA3MEUwMDAxMjIwMDA2NDAyMDA2RUIyMDAwMDY3MDkxMjI4MDA2NERBCis6MTA3MEYwMDAwMjAwNkVCMjAwMDAwMDAwQTY1NDAxRUMwNkMwMkYzMjYwCis6MTA3MTAwMDAwMzAwOEMwNzAwMEUwMUVDMDYwMDM2OTIwMDAwMDAwMDIwCis6MTA3MTEwMDAwMDAwMDBGQzAyMDAwMTMyMDAwMDZEMDkwMDAwMDAxNEI0Cis6MTA3MTIwMDAwODgwM0Q5MjAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMkQ3Cis6MTA3MTMwMDAwMDAwNzAwOTA0MDAwMERDNTM2MDNEQjMxODAwMDAwMDNCCis6MTA3MTQwMDAwMDAwMDBGODczOEEwMzM5NkMwOTM2MDAwMDAwMDBDMEEzCis6MTA3MTUwMDAwMjAwMzY5MjAwMDAwMDAwMDA1NDAxRkMwMkMwNkUzMkIyCis6MTA3MTYwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwNzYwOTUzCis6MTA3MTcwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwOERECis6MTA3MTgwMDAwODgwMzYzMjE1MDAyRjAzMTIwMTAwMkM4MkNEMkVCMjVBCis6MTA3MTkwMDAwMDAwNzQwOTAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDYwCis6MTA3MUEwMDAwMDI4MDAwMDA3MDAwMDMyMDAwMDAwMDAwMDMwMDAwMDRFCis6MTA3MUIwMDAwN0MwMkMzMjAwMTAwMDgyMDAzODAwMDAwNzAwMzczMjcwCis6MTA3MUMwMDAwMDAwNzkwOTEyMDAwMDQ4MDJDMDgwQjIwMDAwOEMwNzVDCis6MTA3MUQwMDBDQTAxMDAwOEU4MDEwMDk0MkQwMDdCMDkxMjAwMDAyQzcwCis6MTA3MUUwMDA4MkNEMkVCMjAwMDA3RTA5MUQwMTAwODAwMjAwMDBCMDk5Cis6MTA3MUYwMDAwMDAwOEMwNzAwMDAwMEY4NjI4MTJGOTUwMDAwMDAwMDVECis6MTA3MjAwMDAwMDAwMDBGODAyODEyRjM0MkEwMDhDMDcxMjAxMDAyQ0E0Cis6MTA3MjEwMDA4MkNEMkVCMjAwMDA3RjA5MDAwMDAwODAwMjAwMDA5MEE1Cis6MTA3MjIwMDAwMDAwM0YwRjAwMDAwMDJDMDlDMDg1RDIwMDAwREMwRURBCis6MTA3MjMwMDAwMDAwMDAzMDAzMDAzOEYyMDAwMDMxMDMyMzAxMDBGOEExCis6MTA3MjQwMDAyMjgxMkZCNDNFMDAzMTAzMTIwMTAwMkM4MkNEMkVCMkQ4Cis6MTA3MjUwMDAwMDAwODQwOTAwMDAwMDgwMDIwMDAwOTAwMDAwM0YwRjQxCis6MTA3MjYwMDAwMDAwMDAyQzA5QzA4NUQyMDAwMDMxMDMwMDAwMDBGOEE2Cis6MTA3MjcwMDAyMjgxMkY5NDAwMDA4RDA5MzgwMTAwRDgwMjgwMDFCMkNDCis6MTA3MjgwMDAwMDAwOEIwOTFFMDAwMDgwMDIwMDAwQjAwMDAwOEQwOTg0Cis6MTA3MjkwMDAxQTAxMDA4MDAyMDAwMEIwMDAwMDhDMEYwMDAwMDA2ODlFCis6MTA3MkEwMDAxRjgwRjZGQTAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDA5Cis6MTA3MkIwMDAwMDAwOTEwOTEyMDEwMDYwMDg0MDIzQjIwMDgyMDAwMDIyCis6MTA3MkMwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDhDMEYwMDAwMDA2NEM3Cis6MTA3MkQwMDAxRjQwRjZGQTAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDE5Cis6MTA3MkUwMDAwMDAwMzYxMDEyMDAwMDI0MDgwMDIzQjIwMDAwMzYxMEZGCis6MTA3MkYwMDAxMjAwMDAyMDA4QzAyM0IyMDAwMDM2MTAxMjAwMDAxODRGCis6MTA3MzAwMDAwODgwMjNCMjAwQzA5QzA5MTgwMTAwMENBOENEM0VCMjMxCis6MTA3MzEwMDAwMDAwOTQwOTEyMDAwMDM4MDI4MDgxQjIwMDAwMzYxMDhCCis6MTA3MzIwMDAxMjAwMDAzQzAyMDA4MkIyMDAwMDM2MTAxMjAwMDAzMDUxCis6MTA3MzMwMDAwMjQwODJCMjAwMDAzNjEwMTIwMDAwMzQwMjAwODZCMjExCis6MTA3MzQwMDAyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwOEMwRjBBCis6MTA3MzUwMDAwMDAwMDA1QzFGQzBGNUZBMDAwMDMxMDMwMDAwMDA4MDRGCis6MTA3MzYwMDAwMjAwMDA5MDAwMDAwMDAwNDUwMDAwRDgwMjAwMDAzMjNBCis6MTA3MzcwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MDgwMzIwMDAwMDAwMDE0Cis6MTA3MzgwMDAwMDEwMDAwMDA3NDA4MjMyMDAwMDAwMDAwMDE4MDAwMERBCis6MTA3MzkwMDAwNzAwODYzMjAwMDBBMDA5MTIwMDAwNTBGMkMxMzhCNDg0Cis6MTA3M0EwMDAwMDAwNjQwRDAwMzAwMUUwMTYyMDZFRkEwMDAwQTUwOTBGCis6MTA3M0IwMDAzODAxMDAyQ0Y4MDEwQkI0MDAwMEE1MDkwMjBEMDI4MDcxCis6MTA3M0MwMDBBMjVCODBCQzAwMDAwMDAwMDAwMDAwMkNDOEMxODIzNDE5Cis6MTA3M0QwMDAwMDAwQTcwOTgwMDAwMDgwNDI4MTJGQjYwMDAwOTQwREI0Cis6MTA3M0UwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMEFEMEQwMEE4MDFFMEU4Cis6MTA3M0YwMDAxNjIwNkVGQzAwMDBBQzA5MjcwMTAwRDgwMjgwMDFCMjAzCis6MTA3NDAwMDAwMDAwMDAwMEM3MDAwMDJDRThDMDgyMzQwMDAwMDAwMDJCCis6MTA3NDEwMDAwMDAwMDAwOEQ4MDEwMDM0MDAwMDAwMDBENTQwMDFFMDYxCis6MTA3NDIwMDAwNjAwODczMjA4MDA5OTBGMDAxODAxRTg3NjIwODFGOURDCis6MTA3NDMwMDAwMDAwREMwRTAwMDAwMDMwMDMwMDM4RjIwMDAwQjAwOTRDCis6MTA3NDQwMDAyMzE5MDAwMDA3ODA4MUIyM0UwMEFGMDkxMjAwMDAyQzEyCis6MTA3NDUwMDA4MkNEMkVCMjAwMDBCMjA5MUQyMTAwMDAwNzAwODJCMkM5Cis6MTA3NDYwMDAwMDAwQjQwOTAwMDAwMEY4NjI4MTJGOTUwMDAwQjQwOTAzCis6MTA3NDcwMDA4MDAwMDA4MDAyODEyRkI2MkEwMDAwMDBEMDAxMDAyQzdECis6MTA3NDgwMDA4MkNEMkUzMjAwMDBGQTBEMDAwMDAwMkNGOTAxMDBGNDJDCis6MTA3NDkwMDAxMDAwQjgwOTJDMzAwMDAwMTdFMDJDQjkwMDAwQkEwOTIwCis6MTA3NEEwMDA4RTM5MDAwMDA3QzA4MkIyMDAwMEJBMDkwMDA4MDAwMDRGCis6MTA3NEIwMDAwNzAwODc5MjAwMDBCQTA5OEUzOTAwMDBCN0MxODJCNDc0Cis6MTA3NEMwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDg3MzIwMDAwQkMwOTJGCis6MTA3NEQwMDAxMjAxMDBFODAyQzAyMUIyMTgwMDM2MDAwMDAwMDBGOEQ2Cis6MTA3NEUwMDA3MzBBMDNGOTAwMDBCQTA5OUYwMTAwMTQxODQwODFCQzE3Cis6MTA3NEYwMDAwMDAwQkYwOTA0MDAwMDgwMDJDMDg1QkMwMDAwMzYxMEY3Cis6MTA3NTAwMDAxMjAwMDA2ODAyQzU4NUIwMDAwMEJGMDkxMjAwMDA0OEUzCis6MTA3NTEwMDAwMkMwODBCMjAwMDAzMjAzQ0EwMTAwMDhFODgxODA5NEYyCis6MTA3NTIwMDAwMDAwQzMwOTFFMDAwMDgwMDIwMDAwQjAwMDAwQzUwOTcxCis6MTA3NTMwMDAxQTAxMDA4MDAyMDAwMEIwMDAwMDhDMEYwMDAwMDA2OEZCCis6MTA3NTQwMDAxRjgwRjZGQTAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDY2Cis6MTA3NTUwMDAwMDAwMzYxMDlGQTgwMUUwMTYyMDZFQkMwMDAwNjQwREVDCis6MTA3NTYwMDAwMDAwMDAxNDA4MDAwMEYyMDAwMEM5MDk4MDAwMDA4MDNCCis6MTA3NTcwMDA0MjgxMkZCNjAwMDA5NDBEMDAwMDAwODAwMjAwMDBGMDUwCis6MTA3NTgwMDAwMDAwQUQwRDAwMDAwMDgwMDIwMDAwRjAwMDAwOEUwNzNBCis6MTA3NTkwMDAwNDAwMDA4MDAyNDA4MUJDMDAwMENEMDkxMjAxMDBFODE3Cis6MTA3NUEwMDAwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTg3Cis6MTA3NUIwMDAwMDAwOEUwNzEyMDEwMDY4MDJDNTg1QjAwMDAwMzYxMDc5Cis6MTA3NUMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDc4MDAwMDA4MDE2Cis6MTA3NUQwMDBGMkMxODVCNjAwMDBEMzA5MUM0MTAyODAwNkMwODVCMjA1Cis6MTA3NUUwMDAwMDAwMDAwMDAwMDAwMDY4MDJDNTg1MzAwMDAwMDAwMEI3Cis6MTA3NUYwMDAwMDAwMDA3MDFGMDBGNzNBMDAwMDhDMDcwMDAwMDBGODQwCis6MTA3NjAwMDAyMjgxMkY5NDAwMDA4QzA3ODAwMDAwODBGMkMxODVCNjkzCis6MTA3NjEwMDAwMDAwM0YwRjAwMDAwMDJDMDlDMDg1RDIwMDAwMzEwMzlDCis6MTA3NjIwMDBEMjAxMDA5NDFFNDBFOTlBMDAwMEM0MEYwMDIwMDAxODA3Cis6MTA3NjMwMDAwODAwNkVGMjAwMDBEQjA5MUYwMDAwODAwMjAwMDBCMEFECis6MTA3NjQwMDAwMDAwRDgwOTlFNDAwMjc4MDk0MDY4QjIwMDAwMzYxMDU4Cis6MTA3NjUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERGMDk4MDAxMDA4MDJGCis6MTA3NjYwMDA4MjgxMkZCNjAwMDA4RTA3MkEzMTAxRTAwNjAwMDBCMkE5Cis6MTA3NjcwMDAxODAwMDAwMENBMDAwMEY4NzMwQTAzMzk4RTA3MzYwMEFDCis6MTA3NjgwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDhFMDc4MDAxMDA4MERBCis6MTA3NjkwMDBBMjgwMkZCNjE4MDAwMDAwQ0EwMDAwRjg3MzBBMDMzOTUwCis6MTA3NkEwMDA4RTA3MzYwMDAwMDAwMEMwMDIwMDM2OTIwRDAwRTUwOThBCis6MTA3NkIwMDAwMDAwMDA1ODA4MDAzNjkyMDAwMEU1MDkwMDAwMDA1ODVDCis6MTA3NkMwMDAwODAwMDA5MjFCMDAwMDAwMDAwMDAwNTgwODAwMzYzMjNECis6MTA3NkQwMDAwMDAwQzQwRjAwMjAwMDE4MDgwMDZFRjIwMDAwMDAwMDM3Cis6MTA3NkUwMDAwMDMwMDAyODA4MDA2RTMyMDAwMDAwMDA1NDU0MDFGQ0Y1Cis6MTA3NkYwMDAwMkMwNkUzMjAwMDAzMDBBMzgwMDAwQTQwODgwODJCMjU2Cis6MTA3NzAwMDAwMDAwMzAwQTA0MjgwMTA0MDgwMDZFQjIwMDAwMzYxMEEwCis6MTA3NzEwMDA5RjUwMDEwNEE4NUI4MEJDMDAwMDAwMDAwMDUwMDFFOEZECis6MTA3NzIwMDAwNjAwMDAzMjAwMDAxMTBBMDgwMTAwNzgxOUEwODJCQzhFCis6MTA3NzMwMDAwMDAwMDAwMDAwMjgwMUUwQTY2MDgwM0MwMDAwRjAwOTg1Cis6MTA3NzQwMDAyQTAxMDAxNDA4MDAwMEIyMDAwMDAwMDBDQTAwMDAxNDYyCis6MTA3NzUwMDAxODQwODEzQTAwMDBBMzBEMDBBODAxMjBBOTIwNkVGQTZDCis6MTA3NzYwMDAwMDAwMDAwMDAwMjAwMUUwQTYyMDZFM0MwMDAwMDAwMEE4Cis6MTA3NzcwMDAwMDMwMDBFMDA2MDAwMDMyMDAwMDAwMDAwMEE4MDFFMDM4Cis6MTA3NzgwMDAwNjAwOTIzMjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMkEyCis6MTA3NzkwMDAwMEMwMDMwQTE4MDEwMDBDQThDRDNFQjIwMDAwRkEwOThGCis6MTA3N0EwMDAwNDAwMDA4MDAyNDA4MUJDMDAwMDAwMDAwMDAwMDAxNEMyCis6MTA3N0IwMDAwODAwMDAzMjE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOUM2Cis6MTA3N0MwMDBGNDA5MzYwMDAwMDAwMEMwMDIwMDM2OTIyMDgwMDAwMDVDCis6MTA3N0QwMDAwMDAwMDAyODA5ODAzNjMyMDAwMEYxMEUwMDAwMDBEOEI5Cis6MTA3N0UwMDAwMjAwMDBEMjAwMDBGRTA5MDQwMDAwODAwMjgwOTJCQzZBCis6MTA3N0YwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMENBCis6MTA3ODAwMDAwMDAwMDBEODAyODAwMTMyMDBDMDAzMEExODAxMDAwQ0Y5Cis6MTA3ODEwMDBBOENEM0VCMjE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOUJBCis6MTA3ODIwMDBGRTA5MDAwMDAwMDAwMEMwMDIwMDM2MzIwMDAwMzYwMEYxCis6MTA3ODMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDBERTAwMDAwODUwCis6MTA3ODQwMDBFODAxMDAzNDAwMDAwMDAwREYwMDAxMzgwOEMwNkUzMjlCCis6MTA3ODUwMDAwMDAwMDAwMDAwMTAwMDAwMDcwMDAwMzIwMDAwMDAwMERGCis6MTA3ODYwMDAwMDE4MDAwMDA3ODA4MjMyMDAwMDAwMDAwMDMwMDAwMDk1Cis6MTA3ODcwMDAwN0MwMkMzMjAwMjAwMDgwMDAzODAwMDAwNzAwMzczMjlCCis6MTA3ODgwMDAwMDAwMDAwMENBM0QwMDBDMDc4MDgzMzIwMDAwMDAwMEE5Cis6MTA3ODkwMDAwMDAwMDAxNDE4NDA4MTNBMDAwMDBGMEEwNDAyMDFFQ0I1Cis6MTA3OEEwMDAxNkMwNkVCQzAwMDAwMDAwQzAwMTAwMTQxODQwODEzQUYwCis6MTA3OEIwMDAwMDAwMDAwMDAwMDAwMEY4OTI4MDJGMzQwMEMwMEUwQTgzCis6MTA3OEMwMDAxMjAwMDA0MEEyOEQzOUIyMDAwMDY5MEExMjAxMDA0ODdFCis6MTA3OEQwMDAwMkMwODBCMjAwMDAwRjBBMDAwMDAwODAwMjAwMDA5MDg5Cis6MTA3OEUwMDAwMDAwMDAwMDAwMDAwMDI4MDg4MDk3MzIwMDAwMDAwMDFGCis6MTA3OEYwMDAwMDAwMDBBNDA4ODA4MjMyMDAwMDAwMDAwMDEwMDA2QzJDCis6MTA3OTAwMDAxODIwNkUzQTAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjhCCis6MTA3OTEwMDAwMDAwQTMwRDAwQTgwMTIwMTkyMDZFRkEwMDAwMDAwMDRECis6MTA3OTIwMDAwMDIwMDFFMDE2MjA2RTNDMDAwMDAwMDAwMEE4MDFFMEVECis6MTA3OTMwMDAwNjAwOTIzMjAwMDAxQjBBMDAzODAxRTAwNjQwODA5MkU3Cis6MTA3OTQwMDAwMDAwMDAwMDAwNjAwMDZDMTgyMDZFM0EwMDAwMDAwMDhCCis6MTA3OTUwMDAwMDY4MDA0QzA4MDA2RTMyMDAwMDFEMEE5RjAxMDAwNDAwCis6MTA3OTYwMDA2ODYwODBCQzAwMDAyNDBBMDAwMDAwMTgxODIwMDA5Q0Y5Cis6MTA3OTcwMDAwMDAwMUYwQTEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwCis6MTA3OTgwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDBDQTcwMDAxODM0Cis6MTA3OTkwMDAwODAwNkUzMjAwMDAxOTBBMDIwMTAwODA2MjYwODBCQzlCCis6MTA3OUEwMDAwMDAwMDAwMENBMDEwMEY4MDI4MDJGMzUwMEEwMUIwQTY5Cis6MTA3OUIwMDAxMjAxMDA0MEEyOEQzOUIyMDAwMDIyMEEwMDAwMDA4MEFFCis6MTA3OUMwMDAwMjAwMDA5MDAwMDAyODBBODAwMDAwODBBMjgwMkZCNkVDCis6MTA3OUQwMDAwMDAwMkIwQTA0MDAwMDgwQTJBMDgxQkMwMDAwMDAwMDZGCis6MTA3OUUwMDBDQTAxMDBGODAyODAyRjM1MDBBMDI3MEExMjAwMDA0MENCCis6MTA3OUYwMDBBMjhEMzlCMjAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNUVGCis6MTA3QTAwMDAwMDAwMkIwQTEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDYzCis6MTA3QTEwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDI4MDFFMEVDCis6MTA3QTIwMDAwNjAwMDAzMjAwMDAwMDAwMDAzMDAwRTAwNjgwODIzMkQ0Cis6MTA3QTMwMDAwMDAwMDAwMDAwMjAwMEUwMDY4MDgxMzIwMDAwMzYxMEM3Cis6MTA3QTQwMDAwNDEwMDBFMDA2QzA4NkIyMDAwMDMyMEEwMDE4MDBFMDEwCis6MTA3QTUwMDAwNkMwODQ5MjAwMDAzNjEwMDQxMDAwNkMwODAwNkVCMjVDCis6MTA3QTYwMDAwMDAwMDAwMDAwMTgwMDRDMDgwMDZFMzIwMDAwRTAwRDFECis6MTA3QTcwMDA1MTAwMDBEODAyMDAwMEYyMDAwMDM1MEEwMDUwMDEzQzFECis6MTA3QTgwMDBBODVCODA5QzAwMDA4RTA3MDAzMDAxRTAwNjAwMDA5Mjk5Cis6MTA3QTkwMDAwMDAwM0EwQTNFNTEwMTAwQTgxQjgwQkEwMDAwMDAwMDE1Cis6MTA3QUEwMDBERTAwMDBGOEYyODEyRjM0MDAwMDAwMDAwMDU4MDFFQ0U1Cis6MTA3QUIwMDAwNkMwRUUzMjAwMDAzQTBBODAwMTAwODAzMjgwODdCNkFDCis6MTA3QUMwMDAwMDAwMDAwMDAwMDAwMEY4RTI4MDJGMzQwMDAwNzMwRTc4Cis6MTA3QUQwMDA2MDMwMDFFMDA2MDAwMEYyMDAwMDhFMDcwMDAwMDA4MDI4Cis6MTA3QUUwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwMTQwODAwMDAzMkI2Cis6MTA3QUYwMDAwMDAwNDMwQTA0MDIwMUVDMTZDMDZFQkMwMDAwMDAwMDQ2Cis6MTA3QjAwMDBDOTAxMDAxNDE4NDA4MTNBMDAwMDAwMDBDMDAxMDEzODhBCis6MTA3QjEwMDAwOEMwNkUzMjAwMDAwMDAwREYwMDAwQTRBODYwOEEzQ0FDCis6MTA3QjIwMDAwMEMwNDYwQTEyMDEwMDQwQTI4RDM5QjIwMDAwNDEwQThECis6MTA3QjMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDMwMDBFMDIzCis6MTA3QjQwMDAwNjAwMDAzMjAwMDAwMDAwREYwMDAwQTRBODYwOEEzQ0FDCis6MTA3QjUwMDAwMDAwMDAwMDAwMDAwMTM4MDhDMDZFMzIwMDAwMDAwMDg0Cis6MTA3QjYwMDBERUE4MDEyMDk5MjI2RTNBMDAwMDQ5MEEyRjIwMDFFMDg4Cis6MTA3QjcwMDA5NjIyNkVCQzAwMDBBMzBEMDAwMDAwODAwMjAwMDBGMDAxCis6MTA3QjgwMDAwMDAwNEQwQTFGNTAwMUU4MDYwMDAwQjIwMDAwNEMwQTM4Cis6MTA3QjkwMDAwNDAwMDA4MDAyQzA4M0JDMDAwMDREMEEwMDUwMDFFOEQwCis6MTA3QkEwMDBGNjYwODA5QzA4MDAwMDAwMDA0MDAyNjgxMjlBRkUzOENGCis6MTA3QkIwMDAwMDAwNTEwQTJBQTkwMUUwMDYwMDkyQjIxODAwMzYwMDFFCis6MTA3QkMwMDBDQTAwMDBGODczMEEwM0Y5MUQwMDUxMEEwNDAwMDA4MDdFCis6MTA3QkQwMDAwMkE0MTdCODAwMDA0RTBBMDAwMDAwMTQxODQwODE5QzRGCis6MTA3QkUwMDAwMDAwREMwRTAwMDAwMDMwMDMwMDM4RjIwMDAwNTQwQUYwCis6MTA3QkYwMDA4MDAxMDA4MDMyODAyRkI2M0UwMDUzMEExMjAwMDAyQzE0Cis6MTA3QzAwMDA4MkNEMkVCMjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMkI4Cis6MTA3QzEwMDAwMEMwNjUwQTE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDBCCis6MTA3QzIwMDBDMzAwMDAyODA5ODAzNjMyMDAwMEYxMEUwMDAwMDBEOEExCis6MTA3QzMwMDAwMjAwMDBEMjAwMDA1QTBBMDQwMDAwODAwMjgwOTJCQ0I4Cis6MTA3QzQwMDAwMDAwMDAwMDAwMDAwMDE0MTg0MDgxM0EwMDAwNUYwQUE0Cis6MTA3QzUwMDAwNDAwMDA4MDAyNDA4MUJDMTgwMDM2MDAwMDAwMDBGOERCCis6MTA3QzYwMDA3MzBBMDNGOTAwMDA2MzBBMDQwMDAwMTQxODQwODFCQzgxCis6MTA3QzcwMDAwMDAwNUIwQTEyMDAwMDAwMDlDMDIxQjIwMDAwNUMwQThCCis6MTA3QzgwMDAwMDAwMDA4MDAyMDAwMDkwMTgwMDM2MDAwMDAwMDBGODlDCis6MTA3QzkwMDA3MzhBMDNGOTAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMkE0Cis6MTA3Q0EwMDAwMDAwNjMwQTgwMDEwMDgwMzI4MDJGQjYzRTAwNjIwQTI1Cis6MTA3Q0IwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDBDMzAwMDBEOEJDCis6MTA3Q0MwMDAwMjgwMDEzMjAwQzA1RjBBMTgwMDAwMENBOENEM0VCMjRECis6MTA3Q0QwMDAwMDIwMDA4MDAwMDAwMDI4MDkwMDM3MzIwMDAwQjEwRkFBCis6MTA3Q0UwMDAwMDAwMDAwOEU4MDEwMEY0MDAwMDY3MEExMjAwMDA0OEU0Cis6MTA3Q0YwMDAwMkMwODBCMjAwMDAwMDAwMDAwMDAwMTQxODQwODEzQTY5Cis6MTA3RDAwMDAxODAwMzYwMENBMDAwMEY4NzMwQTAzRjkwMDAwNjkwQTc3Cis6MTA3RDEwMDAwNDAxMDAxNDE4NDA4MUJDMDAwMDk5MEYwMDAwMDA4MDhECis6MTA3RDIwMDAwMjAwMDBGMDAwMDA2RjBBODAwMTAwODA5MjgwMkZCNkYwCis6MTA3RDMwMDAyQjAwNzIwQTEyMDEwMDJDODJDRDJFQjIwMDAwNkQwQUI3Cis6MTA3RDQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDcyMEExRDAwMDA4MDA4Cis6MTA3RDUwMDAwMjAwMDBCMDAwMDA3MjBBODAwMDAwODAwMjgxMkZCNjhECis6MTA3RDYwMDAyQTAwMDAwMEQwMDEwMDJDODJDRDJFMzIwMDAwOEMwN0FBCis6MTA3RDcwMDAwNDAwMDA4MDAyODA4NUJDMDAwMEFBMEYwMDAwMDA4MDgzCis6MTA3RDgwMDAwMjAwMDBGMDAwMDA3RDA1MDAwMDAwMUMwODgwODU5MkM0Cis6MTA3RDkwMDAwMDAwMDAwMENFMDEwMEQ4MDI4MDAxMzIwMEMwN0EwQTQzCis6MTA3REEwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwOEExCis6MTA3REIwMDAwODgwMzYzMjAwMDA4QzBGMDAwMDAwNUMxRkMwRjVGQTBFCis6MTA3REMwMDAwMDAwMzEwMzAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDZECis6MTA3REQwMDA2MDAwMDBEODAyMDAwMDMyMDAwMDdGMEEzRjAwMDAzQzMzCis6MTA3REUwMDAwODQwODBCMjAwMDA3RjBBODAwMTAwODBFMjgxMkZCNjQ3Cis6MTA3REYwMDAwMDAwMDAwMERFMDAwMEY4RjI4MTJGMzQwMDAwMDAwMEQ3Cis6MTA3RTAwMDAwMDU4MDFFQzA2QzBFRTMyMDAwMDAwMDA0RDAwMDAwMEZBCis6MTA3RTEwMDA2N0UwODMzRTAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjk5Cis6MTA3RTIwMDAwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMEMzCis6MTA3RTMwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMEJFMEEwNDAwMDAyOEI5Cis6MTA3RTQwMDBEOEEwODJCQzAwMDAwMDAwMDAwMDAwMThEOEEwODEzQzJGCis6MTA3RTUwMDAwMDAwOUMwQTA0MDAwMDNDRDhFMDgzQkMwMDAwODkwQUIyCis6MTA3RTYwMDAwNDAwMDA4MDcyODAyREJDMDAwMDg3MEExMjAwMDA1MEMwCis6MTA3RTcwMDAwMkMwMzhCMjAwMDA5QTBBNTEwMDAwRDgxMjgwMkQ5QTMwCis6MTA3RTgwMDAwMDAwODkwQTEyMDAwMDUwRjJDMTM4QjQwMDAwOTUwQUJGCis6MTA3RTkwMDAyODAwMDBEODAyMDAwMEIyMDAwMDkyMEE4MDAxMDA4MDkxCis6MTA3RUEwMDBGMkMxODVCNjAwMDA4RjBBMUY0MDAyODRFNjAxMDBCNENCCis6MTA3RUIwMDAwMDAwOTIwQTFEMDEwMEY4MjI4MTJGQjQwMDAwOTIwQUVFCis6MTA3RUMwMDAwMDAwMDBGODYyODEyRjk1MDAwMDkxMEExRDAxMDA4MERBCis6MTA3RUQwMDAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwRjg2MjgxMkYzNUIxCis6MTA3RUUwMDAwMDAwMDAwMDAwNDAwMjgwMDI0MDY4MzIwMDAwOTQwQTU2Cis6MTA3RUYwMDAzNDMwMDBFMDE2MjA2RUJDMDAwMDk0MEQwMDAwMDA4MEJECis6MTA3RjAwMDAwMjAwMDBGMDAwMDBBRTBEREE1QjAxRUMwNjQwRURGMjdECis6MTA3RjEwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwOTkwQUZGCis6MTA3RjIwMDAwNDAwMDA4MDcyODAyREJDMDAwMDk1MEE2NzAwMDBGOEY0Cis6MTA3RjMwMDBBMjgwMkZCNTAwMDAzNjEwMTIwMDAwRTgwMkMwMjFCMjY2Cis6MTA3RjQwMDAwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwRTgwRERGCis6MTA3RjUwMDAwMDAwMDAwMEQ4MjA4MEZBMDAwMDgwMEE0RDAwMDAwMEQ4Cis6MTA3RjYwMDA2N0UwODM5RTAwMDA5QzBBMTIwMDAwNTBGMkMxMzhCNDAyCis6MTA3RjcwMDAwMDAwQTgwQTI4MDAwMDgwMDg0MDAwQjIwMDAwQTUwQUZFCis6MTA3RjgwMDA4MDAxMDA4MEYyQzE4NUI2MDAwMEEyMEExRjQwMDI4NDcxCis6MTA3RjkwMDBFNjAxMDBCNDAwMDBBNTBBMUQwMTAwRjgyMjgxMkZCNEZCCis6MTA3RkEwMDAwMDAwQTUwQTAwMDAwMEY4NjI4MTJGOTUwMDAwQTQwQUQ1Cis6MTA3RkIwMDAxRDAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODc5Cis6MTA3RkMwMDA2MjgxMkYzNTAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMkNDCis6MTA3RkQwMDAwMDAwQTcwQTM0MzAwMEUwMTYyMDZFQkMwMDAwOTQwREFCCis6MTA3RkUwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMEFFMEREQTVCMDFFQzQyCis6MTA3RkYwMDAwNjQwRURGMjAwMDBCRjBBODAwMDAwODBFMjgwMkZCNjRDCis6MTA4MDAwMDAwMDAwQUMwQTA0MjEwMEUwMDY4MDgxQjIwMDAwRTgwRDA3Cis6MTA4MDEwMDAwMDAwMDAzNDA4MDAwMEYyMDAwMDAwMDAwMDIwMDBFMDMyCis6MTA4MDIwMDAwNjgwODEzMjAwMDBCMTBBMkExMTAwRTBENkUwODZCQTRCCis6MTA4MDMwMDAxODAwMzYwMENBMDAwMEY4NzMwQTAzRjkxRDAwQjEwQURGCis6MTA4MDQwMDAwNDAxMDA4MDAyQTQxN0I4MDAwMEFEMEE5RjAxMDA4MDVGCis6MTA4MDUwMDAxODAwODhCQzAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDZDCis6MTA4MDYwMDAwMDAwOTkwRjAwMDAwMDgwMDIwMDAwRjAwMDAwREMwRTBDCis6MTA4MDcwMDAwMDAwMDAzMDAzMDAzOEYyMDgwMEI1MEEyMzE5MDFFOEI3Cis6MTA4MDgwMDA3NjIwODFCOTNFMDBCNDBBMTIwMDAwMkM4MkNEMkVCMkI3Cis6MTA4MDkwMDAwMDAwQjgwQTFEMTgwMEUwMDZDMDg0QjIwMDAwQjgwQTRCCis6MTA4MEEwMDA4MDAwMDA4MDAyODEyRkI2MkEwMDAwMDBEMDAxMDAyQzQxCis6MTA4MEIwMDA4MkNEMkUzMjAwMDBGQTBEMDAwMDAwMkNGOTAxMDBGNEYwCis6MTA4MEMwMDAwMDAwQkMwQTA0MDAwMDgwMDIwMDg4QkMwMDAwQkMwQTVBCis6MTA4MEQwMDAxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGOEFCCis6MTA4MEUwMDA3MzBBMDNGOTAwMDAzMjAzMTIwMTAwNjgwMkM1ODVCMDZCCis6MTA4MEYwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwQkUwQTYwCis6MTA4MTAwMDAxMjAwMDA1MEYyQzEzOEI0MDAwMDAwMDBDMDAxMDEzODc0Cis6MTA4MTEwMDAwOEMwNkUzMjAwMDBDMzBBMDQwMjAxRUMxNkMwNkVCQzM3Cis6MTA4MTIwMDAwMEMwQzEwQTEyMDAwMDQwQTI4RDM5QjIwMDAwQzQwQThBCis6MTA4MTMwMDBDOTAxMDAxNDA4MDAwMDkyMDAwMDAwMDA0NTMwMDBFMDcyCis6MTA4MTQwMDAwNjAwMDAzMjAwMDBDRjBBMjgwMDAwMDhFODAxMDBCNDUxCis6MTA4MTUwMDAwMDAwQ0MwQTgwMDEwMDgwRjJDMTg1QjYwMDAwQzkwQTg3Cis6MTA4MTYwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMENDMEExRDAxMDBGOEEzCis6MTA4MTcwMDAyMjgxMkZCNDAwMDBDQzBBMDAwMDAwRjg2MjgxMkY5NTA0Cis6MTA4MTgwMDAwMDAwQ0IwQTFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMENBCis6MTA4MTkwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MERFCis6MTA4MUEwMDAwMjQwNjgzMjAwMDBDRTBBODAwMDAwODA0MjgxMkZCNjczCis6MTA4MUIwMDAwMDAwOTQwRDAwMDAwMDgwMDIwMDAwRjAwMDAwQUUwREYxCis6MTA4MUMwMDBEQTVCMDFFQzA2NDBFREYyMDAyMDAwODBERjAwMDAyOEMxCis6MTA4MUQwMDAwOTAwMzczMjAwMDBCMTBGREUwMDAwRDgwMjgwMDFGMjQyCis6MTA4MUUwMDAwODAwOTkwRjAwMTgwMUU4NzYyMDgxRjkwMDAwREMwRUU0Cis6MTA4MUYwMDAwMDAwMDAzMDAzMDAzOEYyMDAwMEQ1MEE4MDAxMDA4MDQyCis6MTA4MjAwMDAzMjgwMkZCNjNFMDBENDBBMTIwMDAwMkM4MkNEMkVCMjRFCis6MTA4MjEwMDAwMDAwRDkwQTI5MDgwMUU0MDZDMDJEQjIwMDAwREUwQUQ4Cis6MTA4MjIwMDAxRDAwMDA4MDAyMDAwMEIwMDAwMERFMEE4MDAwMDA4MDE3Cis6MTA4MjMwMDAwMjgxMkZCNjJBMDBERTBBRDAwMTAwMkM4MkNEMkU5MkI4Cis6MTA4MjQwMDAwMDAwREIwQTEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDRDCis6MTA4MjUwMDAwMDAwMDBGODczMEEwM0Y5MUQwMEREMEEwNDAxMDA4MDI0Cis6MTA4MjYwMDAwMkE0MTdCODAwMDBEQTBBMDAwMDAwMTQxODQwODE5QzJDCis6MTA4MjcwMDAyQjAwREQwQTEyMDAwMDJDODJDRDJFQjIwMDAwRkIwRDc3Cis6MTA4MjgwMDAwMDAwMDAyQ0Y5MDEwMEY0MDAwMEUxMEEwNDAxMDA4MDY0Cis6MTA4MjkwMDAwMjQwODFCQzE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOUEwCis6MTA4MkEwMDAwMDAwRTEwQTEyMDAwMDQ4MDJDMDgwQjIwMDAwMzIwMzYwCis6MTA4MkIwMDAxMjAxMDA2ODAyQzU4NUIwMDAwMEUyMEEwMDAwMDA4MERCCis6MTA4MkMwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjhGCis6MTA4MkQwMDAwMEMwRTkwQTE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMEMxCis6MTA4MkUwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDhDMEYwMDAwMDA1QzlGCis6MTA4MkYwMDAxRkMwRjVGQTAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDZBCis6MTA4MzAwMDAwMEMwMDAwMDAwMDAwMEY4QTI4RDJGMzEwMDAwMDAwMDI2Cis6MTA4MzEwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMDUxCis6MTA4MzIwMDAwNzgwODEzMjAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjUyCis6MTA4MzMwMDAwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMEFFCis6MTA4MzQwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMEVGMEExMjAwMDA1MDNECis6MTA4MzUwMDBGMkMxMzhCNDAwMDBGNTBBODAwMDAwODA4MjgwMkZCNjk4Cis6MTA4MzYwMDAwMDAwMDAwMDAwMDAwMDY4QTg2MDgwM0MwMDAwMDAwMEUxCis6MTA4MzcwMDAwMDAwMDAzQzA4NDA4MDMyMDAwMEFEMEQwMDAwMDAwNDA5Cis6MTA4MzgwMDAwODgwODJGMjAwMDBGNjBBMTIwMTAwMDAwOUMwMjFCMjQyCis6MTA4MzkwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkxRDAwRjgwQUZGCis6MTA4M0EwMDAwNDAwMDA4MDAyQTQxN0I4MDAwMEY1MEEwMDAwMDBGOERECis6MTA4M0IwMDBBMjgwMkY5NTAwMDAwMDAwMDAwMDAwMDA2ODIwODAzQTk1Cis6MTA4M0MwMDAwMDAwRkMwQTA0MDAwMDI4NjhBMDgyQkMwMDAwRTgwRDQwCis6MTA4M0QwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMEVCMEEwMDAwMDBEODVFCis6MTA4M0UwMDAwMjAwMDA5MjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjZDCis6MTA4M0YwMDAwMDIwMDA4MDAwMDAwMDI4MDkwMDM3MzIwMDAwQUQwRjg3Cis6MTA4NDAwMDAwMDAwMDAwOEU4MDEwMEY0MTgwMDM2MDBDQTAwMDBGODc3Cis6MTA4NDEwMDA3MzBBMDNGOTAwMDAwNjBCMDQwMjAxRUMxNkMwNkVCQ0RGCis6MTA4NDIwMDAwMDAwMDAwMEMwMDEwMEY4OTI4MDJGMzQwMEMwMDQwQjRGCis6MTA4NDMwMDAxMjAxMDA0MEEyOEQzOUIyMDAwMDAyMEIwMDAwMDA4MDQyCis6MTA4NDQwMDAwMjAwMDA5MDJCMDAwNjBCMTIwMTAwMkM4MkNEMkVCMkYwCis6MTA4NDUwMDAwMDAwMDQwQjAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEZCCis6MTA4NDYwMDAwMDAwMDBEODAyODAwMTMyMDAwMDA5MEIxMjAxMDA2MEY4Cis6MTA4NDcwMDAwODQwMjNCMjAwODIxMjBCMDAwMDAwMDhBODhEODA5MkYxCis6MTA4NDgwMDAwMDAwMzYxMDEyMDAwMDI0MDgwMDIzQjIwMDAwMzYxMDRECis6MTA4NDkwMDAxMjAwMDAyMDA4QzAyM0IyMDAwMDM2MTAxMjAwMDAxODlECis6MTA4NEEwMDAwODgwMjNCMjAwQzAyMTBCMTgwMTAwMENBOENEM0VCMkY5Cis6MTA4NEIwMDAwMDAwMEMwQjEyMDAwMDM4MDI4MDgxQjIwMDAwMzYxMDYwCis6MTA4NEMwMDAxMjAwMDAzQzAyMDA4MkIyMDAwMDM2MTAxMjAwMDAzMEEwCis6MTA4NEQwMDAwMjQwODJCMjAwMDAzNjEwMTIwMDAwMzQwMjAwODZCMjYwCis6MTA4NEUwMDAyMDgwMDAwMDAwMDAwMDA4QTg4RDgwMzIwMDAwMTkwQkQ5Cis6MTA4NEYwMDA4MDAxMDA4MEYyQzE4NUI2MDAwMDE2MEIxRjQwMDI4NDg3Cis6MTA4NTAwMDBFNjAxMDBCNDAwMDAxOTBCMUQwMTAwRjgyMjgxMkZCNDEwCis6MTA4NTEwMDAwMDAwMTkwQjAwMDAwMEY4NjI4MTJGOTUwMDAwMTgwQjc1Cis6MTA4NTIwMDAxRDAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODAzCis6MTA4NTMwMDA2MjgxMkYzNTAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMjU2Cis6MTA4NTQwMDAwMDAwMzYxMDEyMDAwMDY4MDJDNTg1QjAwMDAwMUMwQjQ4Cis6MTA4NTUwMDAzNDAwMDA1QzFGQzBGNUJBMDAwMDk0MEQwMDAwMDA4MERDCis6MTA4NTYwMDAwMjAwMDBGMDAwMDAxRTBCODAwMDAwODA5MjgwMkZCNkY5Cis6MTA4NTcwMDAwMDAwOEUwNzAwMzAwMEUwMDYwMDAwOTIwMDAwOEUwNzI5Cis6MTA4NTgwMDAxMjAxMDBFODAyQzAyMUIyMTgwMDAwMDAwMDAwMDBGODRCCis6MTA4NTkwMDA3MzBBMDMzOThFMDczNjAwMDAwMDAwQzAwMjAwMzY5MkNECis6MTA4NUEwMDAwMDAwMDAwMDQ1MDAwMEQ4MDI0MDAwMzIwMDAwMDAwMDNBCis6MTA4NUIwMDA0MTAwMDAwMDA3ODA4NjMyMDAwMDAwMDAwMDA4MDAwMDMzCis6MTA4NUMwMDAwNzAwODAzMjAwMDAwMDAwMDAxMDAwMDAwNzQwODIzMkU3Cis6MTA4NUQwMDAwMDAwMDAwMDAwMTgwMDAwMDcwMDg2MzIwMDAwMjYwQjkzCis6MTA4NUUwMDAxMjAwMDA1MEYyQzEzOEI0MDAwMDAwMDAwMDAwMDA3ODEyCis6MTA4NUYwMDAzODgwODczNTAwMDAwMDAwMDBBMDAxRTAxNjIwNkUzQUE4Cis6MTA4NjAwMDAwMDAwMDAwMDAwMDAwMDc4MDlDNTg1MzAwMDAwMDAwMDZGCis6MTA4NjEwMDAwMEE4MDFFMDE2MjA2RTNDMDgwMDAwMDBEMjAxMDA3ODlFCis6MTA4NjIwMDBFOUU1ODMzOTE4MDAzNjEwMUY0MTAyODRFNkExOTdCOUE1Cis6MTA4NjMwMDAwMDAwMzAwQjM2NTEwMUU4MTZFMDgzQkMwMDAwMzAwQjFGCis6MTA4NjQwMDAxRDAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGOEUyCis6MTA4NjUwMDA2MjgxMkYzNTAwMDAzMjBCMzgyMTAxRTAwNjQwODBCMkU0Cis6MTA4NjYwMDAwMDAwMDAwMDAwMzAwMUUwMDY0MDgwMzIwMDAwMDAwMDAxCis6MTA4NjcwMDAwMDAwMDBEODAyODAwMTMyMDAwMDM1MEIzNDE4MDAwMEUxCis6MTA4NjgwMDAwNzgwODFCMjAwMDA5NDBEMDAwMDAwODAwMjAwMDBGMDFECis6MTA4NjkwMDAxMDAwOTkwRjAwMzAwMDAwMTdFMDJDRjkwMDEwMDA4MDQ2Cis6MTA4NkEwMDAwMDM4MDAwMDA3MDAzNzMyMDAwMERDMEUwMDAwMDAzMDA4Cis6MTA4NkIwMDAwMzAwMzhGMjAwMDAzQTBCODAwMTAwODAzMjgwMkZCNkIwCis6MTA4NkMwMDAzRTAwMzkwQjEyMDAwMDJDODJDRDJFQjIwMDAwM0YwQjcxCis6MTA4NkQwMDAyOTIxMDAwMDA3MDA4MkIyMDAwMDNEMEIxMjAxMDAwMEJBCis6MTA4NkUwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTJGCis6MTA4NkYwMDAxRDAwNDIwQjA0MDEwMDgwMDJBNDE3QjgwMDAwM0IwQkQwCis6MTA4NzAwMDAwMDAwMDAxNDA4MDAwMDkyMDAwMDQyMEIxRDMwMDBFMDQxCis6MTA4NzEwMDAwNjAwMDBCMjAwMDA0MjBCODAwMDAwODAwMjgxMkZCNkVDCis6MTA4NzIwMDAyQTAwMDAwMEQwMDEwMDJDODJDRDJFMzIwMDAwQUEwRkJBCis6MTA4NzMwMDAwMDAwMDAyQ0Y5MDEwMEY0MDAwMEZBMEQwMDAwMDBGODIwCis6MTA4NzQwMDBBMjgwMkZGNDAwMDA0NzBCMDQwMDAwODAwMjQwODFCQzhGCis6MTA4NzUwMDAwMDAwNDcwQjEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMEU5Cis6MTA4NzYwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDMyMDMxMjAxMDA0ODA4Cis6MTA4NzcwMDAwMkMwODBCMjAwMDA0NzBCMDAwMDAwODAwMjAwMDA5MEExCis6MTA4NzgwMDAwMDAwNTAwQjgwMDEwMDgwRjJDMTg1QjYwMDAwNEQwQjQ3Cis6MTA4NzkwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMDUwMEIxRDAxMDBGOEU4Cis6MTA4N0EwMDAyMjgxMkZCNDAwMDA1MDBCMDAwMDAwRjg2MjgxMkY5NTQ5Cis6MTA4N0IwMDAwMDAwNEYwQjFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDBGCis6MTA4N0MwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MEE4Cis6MTA4N0QwMDAwMjQwNjgzMjAwMDA1MjBCMDQwMDAwODAwMjQwODZCQzU4Cis6MTA4N0UwMDAwMDAwRDcwRjAwOTAwMTA4MDkwMDZFRjIwMDAwMDcxMDhBCis6MTA4N0YwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMDU5MEIzMzAxMDBEODk3Cis6MTA4ODAwMDAwMjgwMDFCMjAwMDA1OTBCODAwMTAwODBCMjAxNzJCNkYzCis6MTA4ODEwMDAwMDAwNTkwQjlGRjAwMTgwODJEQjg3QkMwMDAwNTkwQkUwCis6MTA4ODIwMDA5RkY4MDE4MDIyMjE2RUJDMDAwMDAwMDAwMEU4MDFFMEZBCis6MTA4ODMwMDAwNjAwRUUzMjAwMDAwMDAwMDBGMDAxRTAwNkMwODczMkMyCis6MTA4ODQwMDAwODAwMDAwMDAwMTgwMUU4NzYyMDgxMzkwMDAwNUYwQjY1Cis6MTA4ODUwMDA4MDAxMDA4MEQyODAyRkI2MDAwMDVGMEIwNEIwMDA4MDQyCis6MTA4ODYwMDAwMjAwNkVCQzAwMDAwMDAwQ0QwMDAwRjg3MjgxMkYzNEMxCis6MTA4ODcwMDAzRDAwNUYwQjEyMDEwMDJDODJDRDJFQjIwMDAwNUQwQjdCCis6MTA4ODgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDY5MEIyNzA5MDFFNDRECis6MTA4ODkwMDAwNkMwMkRCMjAwQzA2MzBCMTgwMTAwMENBOENEM0VCMjdCCis6MTA4OEEwMDAwMDAwMzYxMDEyMDAwMDY4MDJDNTg1QjAyMDgwOEUwN0Q3Cis6MTA4OEIwMDAwMDAwMDAwODA4ODAzNjkyMDAwMDAwMDAwMDQwMDFFMDNGCis6MTA4OEMwMDAwNjQwODgzMjAwMDAwMDAwRDUwODAwMDAwNzQwODgzMkNBCis6MTA4OEQwMDAwMDAwMDAwMDAwMzAwMDAwMDdDMDJDMzIwMDQwMDA4MDgzCis6MTA4OEUwMDBDQTM5MDAwMDA3MDAzNzMyMDAwMDY3MEIxMjAwMDA0ODQ5Cis6MTA4OEYwMDAwMkMwODBCMjAwNjAwMDAwMDAwMDAwMDgwODgwMzYzMjJDCis6MTA4OTAwMDAwMDAwNkMwQjFEMDAwMDgwMDIwMDAwQjAwMDAwNkMwQjJBCis6MTA4OTEwMDA4MDAwMDA4MDAyODEyRkI2MkEwMDAwMDBEMDAxMDAyQ0M4Cis6MTA4OTIwMDA4MkNEMkUzMjAwMDBGQjBEMDAwMDAwMkNGOTAxMDBGNDc2Cis6MTA4OTMwMDAwMDAwMzIwMzEyMDEwMDY4MDJDNTg1QjAwMDAwMzYxMDQ1Cis6MTA4OTQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA1NDU0MDFGQzcwCis6MTA4OTUwMDAwMkMwNkUzMjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjI4Cis6MTA4OTYwMDAwMEMwNzUwQjE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDlECis6MTA4OTcwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDMxMDMxMjAxMDAyQzhDCis6MTA4OTgwMDA3MkUwMkVCMjAwMDA3MzBCMDAwMDAwODAwMjAwMDA5MDI1Cis6MTA4OTkwMDAwMDAwQzQwRjAwMjAwMDE4MDgwMDZFRjIwMDAwMzYxMDFFCis6MTA4OUEwMDAxRjMwMDAyODA4MDA2RUIyMDAwMDAwMDAwMDAwMDBBNDg0Cis6MTA4OUIwMDAwODgwODIzMjAwMDAzNjEwMDQxMDAwNkMwODAwNkVCMjhECis6MTA4OUMwMDAwMDAwRTAwRDAwMTgwMDRDMDgwMDZFRjIwMDAwN0MwQjY3Cis6MTA4OUQwMDAwMDUwMDEzQ0E4NUI4MDlDMDAwMDM2MTAwMDAwMDA4MDI1Cis6MTA4OUUwMDAwMjAwMDA5MDAwMDAwMDAwMDA1MDAxMDBBODFCODAzQTI3Cis6MTA4OUYwMDAwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDFBCis6MTA4QTAwMDA0RDAwMDAwMDY3RTA4MzNFMDAwMDAwMDAwMDA4MDAwMDA5Cis6MTA4QTEwMDAwNzAwODAzMjAwMDAwMDAwMDAxMDAwMDAwN0MwODYzMjBFCis6MTA4QTIwMDAwMDAwMDAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwQTYwQjAwCis6MTA4QTMwMDAwNDAwMDAyOEQ4QTA4MkJDMDAwMDAwMDAwMDAwMDAxODNDCis6MTA4QTQwMDBEOEEwODEzQzAwMDA5NDBCMDQwMDAwM0NEOEUwODNCQzFCCis6MTA4QTUwMDAwMDAwODgwQjA0MDAwMDgwNzI4MDJEQkMwMDAwODYwQjkzCis6MTA4QTYwMDAxMjAwMDA1MDAyQzAzOEIyMDAwMDhFMEI1MTAwMDBEODM2Cis6MTA4QTcwMDAxMjgwMkQ5QTAwMDA4ODBCMTIwMDAwNTBGMkMxMzhCNDA5Cis6MTA4QTgwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwOEQwQjhGCis6MTA4QTkwMDAwNDAwMDA4MDcyODAyREJDMDAwMDg5MEI2NzAwMDBGODg0Cis6MTA4QUEwMDBBMjgwMkZCNTAwMDAzNjEwMTIwMDAwRTgwMkMwMjFCMkVCCis6MTA4QUIwMDAwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwOTIwQkJDCis6MTA4QUMwMDAyQTAxMDAwMEQ4MjA4MEJBMDAwMDkyMEIxMjAxMDAwMDk5Cis6MTA4QUQwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTNCCis6MTA4QUUwMDAwMDAwMDAwMDAwMDAwMEQ4MDI0MDg0MzIwMDAwRjAwREI5Cis6MTA4QUYwMDAwMDYwMDA2QzA4MDA2RUYyMDAwMDdGMEI0RDAwMDAwMDZCCis6MTA4QjAwMDA2N0UwODM5RTAwMDA5NDBCMTIwMDAwNTBGMkMxMzhCNDVECis6MTA4QjEwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkxRDAwOTkwQkQ1Cis6MTA4QjIwMDAwNDAwMDA4MDAyQTQxN0I4MDAwMDk1MEI2NzAwMDBGODRECis6MTA4QjMwMDBBMjgwMkZCNTAwMDAzNjEwMTIwMDAwMDAwOUMwMjFCMjNCCis6MTA4QjQwMDAwODAwMzYxMDEyNDAwMjY4MTI5QUZFQjgwMDAwREMwRUNGCis6MTA4QjUwMDAwMDAwMDAzMDAzMDAzOEYyMDAwMDM2MTAxRjAwMDA2Q0U3Cis6MTA4QjYwMDBEOEUwODZCQTAwMDBFMDBENTEwMDAwRDgwMjAwMDBGMjAzCis6MTA4QjcwMDAwMDAwOUYwQjAwMDAwMDNDMDg0MDgwOTIwMDAwMzYxMDZGCis6MTA4QjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDdFMEIwNDAxMDA4MEM1Cis6MTA4QjkwMDAwMjgwODFCQzAwMDBBNDBCODAwMTAwODBBMjgwMkZCNjVGCis6MTA4QkEwMDAwMDAwQTQwQjEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDE5Cis6MTA4QkIwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEODZDCis6MTA4QkMwMDAwMjQwODQzMjAwMDBGMDBEMDA2MDAwNkMwODAwNkVGMjdDCis6MTA4QkQwMDAwMDAwN0YwQjREMDAwMDAwNjdFMDgzOUUwMDAwMDAwMDU2Cis6MTA4QkUwMDBDMDAxMDEzODA4QzA2RTMyMDAwMDAwMDA0NTMwMDBFMENFCis6MTA4QkYwMDAwNjAwMDAzMjAwMDBBODBCMTIwMDAwNTBGMkMxMzhCNDg5Cis6MTA4QzAwMDAwMDAwQUQwQjA0MDIwMUVDMTZDMDZFQkMwMDAwMDAwMEI5Cis6MTA4QzEwMDBDOTAxMDAxNDE4NDA4MTNBMDBDMEFEMEIxMjAxMDA0MDk4Cis6MTA4QzIwMDBBMjhEMzlCMjAwMDBBQjBCMDAwMDAwODAwMjAwMDA5MDYyCis6MTA4QzMwMDAwMEMwMDAwMDAwMDAwMEY4QTI4RDJGMzEwMDAwMDAwMEVECis6MTA4QzQwMDAwMEE4MDEyMDk5MjI2RTNBMDAwMEIxMEIyRjIwMDFFMDBDCis6MTA4QzUwMDA5NjIyNkVCQzAwMDBBMzBEMDAwMDAwODAwMjAwMDBGMDEwCis6MTA4QzYwMDAwMDAwQjUwQjA0MDAwMDNDRDhFMDgzQkMwMDAwQjQwQjRFCis6MTA4QzcwMDA5RjMxMDFFMDk2MjI2RUJDMDAwMDAwMDAwMDMwMDFFMDUwCis6MTA4QzgwMDAwNjAwMDAzMjAwMDBCOTBCMDA1MDAxRThGNjYwODA5QzNECis6MTA4QzkwMDAwODAwMDAwMDAwNDAwMjY4MTI5QUZFMzgwMDAwQjgwQjdECis6MTA4Q0EwMDA5RjMxMDFFMDk2MjI2RUJDMDAwMDAwMDAwMDMwMDFFMDIwCis6MTA4Q0IwMDAwNjAwMDAzMjAwMDAwMDAwMDA1MDAxRTgwNjAwMDAzMjBCCis6MTA4Q0MwMDAwMDAwMDAwMDAwQTgwMUUwMDYwMDkyMzIxODAwMzYwMDAzCis6MTA4Q0QwMDAwMDAwMDBGODczMEEwM0Y5MUQwMEJEMEIwNDAwMDA4MEJBCis6MTA4Q0UwMDAwMkE0MTdCODAwMDBCQTBCMDAwMDAwMTQxODQwODE5Q0MxCis6MTA4Q0YwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMDIwMDA4MDQ3Cis6MTA4RDAwMDAwMDAwMDAyODA5MDAzNzMyMDAwMEIxMEYwMDAwMDAwODAxCis6MTA4RDEwMDBFODAxMDBGNDAwMDBDMDBCMTIwMDAwNDgwMkMwODBCMjVECis6MTA4RDIwMDAwMDAwREMwRTAwMDAwMDMwMDMwMDM4RjIwMDAwQzQwQjJECis6MTA4RDMwMDAyMzAxMDAxNDE4NDA4MUJBM0UwMEMzMEIxMjAwMDAyQzFFCis6MTA4RDQwMDA4MkNEMkVCMjE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTZCCis6MTA4RDUwMDAwMDAwQzQwQjA0MDEwMDE0MTg0MDgxQkMwMDAwOTkwRkVFCis6MTA4RDYwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMENBMEIyOTMxMDEwQzU1Cis6MTA4RDcwMDAwOTAwNkVCMjJCMDA4QzA3MTIwMTAwMkM4MkNEMkVCMjlFCis6MTA4RDgwMDAwMDAwQzgwQjAwMDAwMDgwMDIwMDAwOTAwMDAwOUMwRDU1Cis6MTA4RDkwMDAwMDBDMDIwMDA5ODA2RUYyMDAwMEQzMEIwMDAwMDA4MDdFCis6MTA4REEwMDAwMjAwMDA5MDAwMDBBQTBGMDAwMDAwODAwMjAwMDBGMDA2Cis6MTA4REIwMDAwMDAwMDAwMDAwMDAwMDFDMDgwMDkwMzIwMDAwRDIwQkYwCis6MTA4REMwMDAwNDAwMDAyODA5ODA4MEIyMDAwMEYxMEUwMDAwMDBEOEU1Cis6MTA4REQwMDAwMjAwMDBEMjAwMDBEMjBCMDQwMDAwODAwMjgwOTJCQzhFCis6MTA4REUwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwN0QwNTQyCis6MTA4REYwMDAwMDAwMDAwODA4MDAwMDkyMDAwMDhDMDcxRDAwMDA4MEExCis6MTA4RTAwMDAwMjAwMDBCMDAwMDA4QzA3ODAwMDAwODAwMjgxMkZCNkI1Cis6MTA4RTEwMDAyQTAwRDUwQjEyMDAwMDJDODJDRDJFQjIwMDAwOEMwNzQ4Cis6MTA4RTIwMDAwMDAwMDBGODAyODEyRjk0MDAwMEJBMEQwMDAwMDAxODI1Cis6MTA4RTMwMDAwOTQwODFGMjAwMDBBMzBEMDBBODAxMjAwOTAwNkVGMjk0Cis6MTA4RTQwMDAwMDAwMDAwMDAwMzAwMTBDMDkwMDZFMzIwMDAwOUMwRDkzCis6MTA4RTUwMDAwMDBDMDIwMDA5ODA2RUYyMDAwMDhFMDcwMDAwMDA4MDA2Cis6MTA4RTYwMDAwMjAwMDA5MDAwMDA5OTBGMDAwMDAwODAwMjAwMDBGMDU2Cis6MTA4RTcwMDAwMDAwQUEwRjAwMDAwMDgwMDIwMDAwRjAwMDAwN0QwNTQ1Cis6MTA4RTgwMDAwMDAwMDAxQzA4MDA5MDkyMDAwMDAwMDA1NDU0MDFGQ0Y3Cis6MTA4RTkwMDAwMkMwNkUzMjEwMDAwMDAwMDAwMDAwQTg3ODBCMTYzOEU3Cis6MTA4RUEwMDAwODAwMDAwMDAwMDAwMEFDNzgwQjE2MzgwMDAwMDAwMDNECis6MTA4RUIwMDAwMDAwMDBCMEE4MDAyRDM3MDA0NDAwMDAwMDAwMDBCMDAyCis6MTA4RUMwMDA4ODBEOEIzQTAwMDAwMDAwMDA1MDAxQjQwODgwNkUzMjFCCis6MTA4RUQwMDAwMDAwRUQwQjA0MzEwMTkwMDgwMDZFQjIwMjAwMDAwMEFBCis6MTA4RUUwMDAwMDAwMDBDODgyOEQ4QTM3MDAwMDAwMDAwMDAwMDBDODIyCis6MTA4RUYwMDBDMkEyMkMzQTE4MDBFQjBCODY0MTAyNzg4ODBENzhCNjk2Cis6MTA4RjAwMDAwMDAwRTYwQjlGMDEwMEE4MTg4MDhBQkM5RjAwRTYwQkJBCis6MTA4RjEwMDAwMDAwMDBBODA4MDAzNjkyMDAwMDAwMDAwMDQwMDIwNDkzCis6MTA4RjIwMDBCODNGNzgzMDAwMDBGQjBCMDAwMDAwMDREODYyODA5QzQyCis6MTA4RjMwMDAwMjAwMDAwMDAwMDAwMEM4ODI4RDhBMzcwMDAwMDAwMDk3Cis6MTA4RjQwMDAwMDAwMDBDOEMyQTIyQzNBMTgwMEYyMEI4NjQxMDI3ODM5Cis6MTA4RjUwMDA4ODBENzhCNjAwMDBFRDBCOUYwMTAwQTgxODgwOEFCQzMwCis6MTA4RjYwMDA5RjAwRUQwQjAwMDAwMEE4MDgwMDM2OTIwMDAwRjQwQkYzCis6MTA4RjcwMDAyODQwMDIwNEI4M0Y3OEIwMDAwMDAwMDBDODAxMDAwNDk3Cis6MTA4RjgwMDBEODYyODAzQzAwMDBGODBCMDIwMTAwOTAxODIwODlCQ0Q4Cis6MTA4RjkwMDAwMDAwMDAwMDAwMDAwMEI0MDgwMDAwMzIwMDAwRUQwQkVCCis6MTA4RkEwMDA5RjAxMDBBODE4ODA4QUJDOUYwMEVEMEIwMDAwMDBBODVDCis6MTA4RkIwMDAwODAwMzY5MjAwMDBGQjBCMDQwMDAwOTAxODIwODlCQUNDCis6MTA4RkMwMDAwMDAwMzYxMDlGMDAwMDA0NDg2MjgwQkMwMDAwMzYxMDhDCis6MTA4RkQwMDA5MDAwMDBCNDQ4NjI4QkJBMDMwMDM2MTAwNDQwMDIwMENGCis6MTA4RkUwMDAwODFFRkZCODAwMDAwMzBDMDAwMDAwMDBEODIyODA5QTgxCis6MTA4RkYwMDAwMDAwMjgwQzA0MDAwMDgwQTJFMjhBQkMwMjAwMDAwMEVECis6MTA5MDAwMDAwMDAwMDBDODgyOEQ4QTM3MDAwMDAwMDAwMDAwMDBDODAwCis6MTA5MDEwMDBDMkEyMkMzQTE4MDAyNjBDODY0MDAyNzg4ODBENzhCNjM5Cis6MTA5MDIwMDAwMDAwMzYxMDA0NDAwMjA0QjgzRjc4QjAwMzAwMzYxMDQ4Cis6MTA5MDMwMDAwNDQwMDIwMDA4MUVGRkI4MDAwMDA3MEMxMjAxMDA2MDg3Cis6MTA5MDQwMDAwODQwMjNCMjAwODIwMDAwMDAwMDAwMDgwODgwMzYzMjg5Cis6MTA5MDUwMDAwMDAwMzEwMzEyMDEwMDJDNzJFMDJFQjIwMDAwMDUwQzVBCis6MTA5MDYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAxMjAwMDAyNDcyCis6MTA5MDcwMDAwODAwMjNCMjAwMDAzNjEwMTIwMDAwMjAwOEMwMjNCMkZFCis6MTA5MDgwMDAwMDAwMzYxMDEyMDAwMDE4MDg4MDIzQjIwMDAwMDAwMDEzCis6MTA5MDkwMDAwMDAwMDBEODAyODAwMTMyMDBDMDExMEMxODAxMDAwQzQxCis6MTA5MEEwMDBBOENEM0VCMjAwMDAwQjBDMTIwMDAwMzgwMjgwODFCMjQ1Cis6MTA5MEIwMDAwMDAwMzYxMDEyMDAwMDNDMDIwMDgyQjIwMDAwMzYxMEEwCis6MTA5MEMwMDAxMjAwMDAzMDAyNDA4MkIyMDAwMDM2MTAxMjAwMDAzNDVDCis6MTA5MEQwMDAwMjAwODZCMjIwODAwNTBDMDAwMDAwMDgwODgwMzY5MjRECis6MTA5MEUwMDAwMDAwMDAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDc0Cis6MTA5MEYwMDAwMDM4MDIwMEI4MUI4MDNBMDAwMDAwMDA2NDMwMDFFMDM0Cis6MTA5MTAwMDAxNjIwNkUzQTAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjg4Cis6MTA5MTEwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDhFCis6MTA5MTIwMDAwMDEwMDAwMDA3NDA4MjMyMDAwMDAwMDAwMDE4MDAwMDFDCis6MTA5MTMwMDAwNzAwODYzMjAwMDAxODBDMTIwMDAwNTBGMkMxMzhCNDRCCis6MTA5MTQwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDkyCis6MTA5MTUwMDAwMDE4MDAwMDA3ODA4MTMyMDAwMDAwMDAwMDIwMDAwMDlECis6MTA5MTYwMDAwNzAwODIzMjEwMDAwMDAwMDAzMDAwMDAxN0UwMkMzOUE4Cis6MTA5MTcwMDAwMDAwMDAwMDAwMzgwMDAwRjcwMTBCMzQwMDAwMjAwQzU0Cis6MTA5MTgwMDA4MDAxMDA4MDMyODA4N0I2MDAwMDAwMDAwMDM4MDAwMEI3Cis6MTA5MTkwMDBCNzAxNzAzNDAwMDAwMDAwMDAwMDAwMDhFODAxMDAzNDRFCis6MTA5MUEwMDAwMDAwMkYwQzAyMEMwMjgwQTIxQjg5QkMxODAwMzYwMEE0Cis6MTA5MUIwMDAwMDAwMDBGODczMEEwM0Y5MDAwMERDMEUwMDAwMDAzMDI0Cis6MTA5MUMwMDAwMzAwMzhGMjAwMDAyNDBDMTIwMDAwNDgwMkMwODBCMkY0Cis6MTA5MUQwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwRkQwQkM4Cis6MTA5MUUwMDA5RjAxMDBBODE4ODA4QUJDOUYwMEZEMEIwMDAwMDBBODBBCis6MTA5MUYwMDAwODAwMzY5MjAwMDAyQTBDODAwMTAwODAzMjgwMkZCNkQxCis6MTA5MjAwMDAzRTAwMjkwQzEyMDAwMDJDODJDRDJFQjIwMDAwMkMwQzQ2Cis6MTA5MjEwMDAxRDAxMDA4MDAyMDAwMEIwMDAwMDhDMDcwMDAwMDBGODczCis6MTA5MjIwMDA2MjgxMkY5NTAwMDA4QzA3ODAwMDAwODAwMjgxMkZCNjlDCis6MTA5MjMwMDAyQTAwMkQwQzEyMDAwMDJDODJDRDJFQjIwMDAwOEMwN0NCCis6MTA5MjQwMDAwMDAwMDBGODAyODEyRjk0MDAwMDAwMDAwMDM4MDAwMEE4Cis6MTA5MjUwMDBDNzAxNzAzNDAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMjVCCis6MTA5MjYwMDAwODAwMzMwQzIzMTkwMUU4NzYyMDgxQjkzRTAwMzIwQzQ2Cis6MTA5MjcwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDM1MEMxRDAxMDA4MEEyCis6MTA5MjgwMDAwMjAwMDBCMDAwMDAzODBDMDAwMDAwRjg2MjgxMkY5NTQ5Cis6MTA5MjkwMDAwMDAwMzgwQzgwMDAwMDgwMDI4MTJGQjYyQTAwMzYwQ0I2Cis6MTA5MkEwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDAwMDAwMDBGODU5Cis6MTA5MkIwMDAwMjgxMkYzNDAwMDBGQTBEMDAwMDAwMkNGOTAxMDBGNEE3Cis6MTA5MkMwMDAwMDAwM0IwQzEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDc5Cis6MTA5MkQwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDNCMEMxMjAwMDA0ODdDCis6MTA5MkUwMDAwMkMwODBCMjAwMDAzMjAzMDAwMDAwRjhBMjgwMkY5NDc4Cis6MTA5MkYwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMEUxCis6MTA5MzAwMDAwMDMwMDAyODA4MDA2RTMyMDAwMDAwMDA1NDU0MDFGQ0I4Cis6MTA5MzEwMDAwMkMwNkUzMjAwQzA0OTBDMTgwMTAwMENBOENEM0VCMjRDCis6MTA5MzIwMDAyMDgwMDAwMDAwMDAwMDI4MDk4MDM2MzIwMDAwRjEwRTg1Cis6MTA5MzMwMDAwMDAwMDBEODAyMDAwMEQyMDAwMDQ2MEMwNDAwMDA4MEFCCis6MTA5MzQwMDAwMjgwOTJCQzE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTg0Cis6MTA5MzUwMDA0NzBDMzYwMDAwMDAwMEMwMDIwMDM2OTIxODAwMzYwMEFDCis6MTA5MzYwMDAwMDAwMDBGODczOEEwM0Y5MDAwMDAwMDAwMDAwMDBEODM0Cis6MTA5MzcwMDAwMjgwMDEzMjAwQzA0NjBDMTgwMDAwMENBOENEM0VCMjlECis6MTA5MzgwMDAwMDIwMDA4NDAwMDAwMDI4MDkwMDM3MzIwMDAwQUQwRkUzCis6MTA5MzkwMDAwMDAwMDAwOEU4MDEwMEY0MDAwMDhDMDcwMDAwMDA4MEQ1Cis6MTA5M0EwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjlFCis6MTA5M0IwMDAwMDAwMDAwMDU0NTQwMUZDMDJDMDZFMzIwMEMwNTIwQzg4Cis6MTA5M0MwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODZCCis6MTA5M0QwMDAwODgwMzYzMjAwMDAyRjAzMTIwMTAwMkM3MkUwMkVCMkZBCis6MTA5M0UwMDAwMDAwNTAwQzAwMDAwMDgwMDIwMDAwOTAwMDAwNTEwRkFGCis6MTA5M0YwMDAwMDAwMDAyODA5MDAwMkYyMDAwMDVBMEMwMDAwMDA1Qzg2Cis6MTA5NDAwMDAwODAwMDA5MjAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjM1Cis6MTA5NDEwMDAwMDAwMDAwMDU0NTQwMUZDMDJDMDZFMzIwMEMwNUEwQzFGCis6MTA5NDIwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAwMDAwMDAwODBBCis6MTA5NDMwMDAwODgwMzYzMjAwMDA4QzBGMDAwMDAwNUMxRkMwRjVGQTc3Cis6MTA5NDQwMDAwMDAwMzEwMzAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEQ2Cis6MTA5NDUwMDAwMDMwMDAyODA4MDA2RTMyMDAyMDAwODQwMDAwMDAyODQwCis6MTA5NDYwMDAwOTAwMzczMjAwMDBBRDBGMDAwMDAwMDhFODAxMDBGNEU5Cis6MTA5NDcwMDAwMDAwNUYwQzAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDZGCis6MTA5NDgwMDAwMDAwMDAwODA4MDAwMDMyMDAwMDY1MEMwNDAwMDA4MEE1Cis6MTA5NDkwMDAwMkMwODVCMjAwMDA2NTBDODAwMDAwODBGMkMxODVCNjc0Cis6MTA5NEEwMDAwMDAwNjQwQzFDNDEwMjgwMDZDMDg1QjIwMDAwMDAwMDcwCis6MTA5NEIwMDAwMDAwMDA2ODAyQzU4NTMwMDAwMDAwMDAwMDAwMDA3MDU4Cis6MTA5NEMwMDAxRjAwRjczQTAwMDAwMDAwMDAwMDAwRjgyMjgxMkYzNDRFCis6MTA5NEQwMDAwMDAwREMwQzgwMDEwMDgwQTI4MDJGQjYxODAwMDAwMDg0Cis6MTA5NEUwMDAwMDAwMDBGODczMEEwMzM5REMwQzM2MDBDQTAwMDBDMDIzCis6MTA5NEYwMDAwMjAwMzY5MjAwMDBBRDBDODAwMTAwODA4MjgxMkZCNjAwCis6MTA5NTAwMDAwMDAwQjIwQzFGMjAwMTA4MDkwMDZFQjIwMDAwQUQwQzczCis6MTA5NTEwMDAwNDMwMDEwODg5OUI5MEJDMDAwMDcxMEMwNDMxMDE4MDZCCis6MTA5NTIwMDAwMjAwNkVCQzAwMDBFMDBEMDAwMDAwODAwMjAwMDBGMEIwCis6MTA5NTMwMDAwMDAwNkYwQzAwNTAwMTQ4MDg4MDZFOTIwMDAwMzYxMDQ5Cis6MTA5NTQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDAwMDAwNDA1Cis6MTA5NTUwMDAyODYxODAzQzAwMDA4MTBDMDAwMDAwMDAyODIxODA5QUQ2Cis6MTA5NTYwMDAwMDAwRTAwRDAwMzAwMTQ4MDgwMDZFRjIwMDAwNzQwQ0FECis6MTA5NTcwMDAwMDUwMDEwNEE4NUI4MDlDMDAwMDM2MTAwMDAwMDA4MEIxCis6MTA5NTgwMDAwMjAwMDA5MDAwMDAwMDAwMDA1MDAxMDBBODFCODAzQTdCCis6MTA5NTkwMDAwMDAwN0UwQzA3MDAwMDQ4MThBMDg0QkMwODAwMDAwMEYyCis6MTA5NUEwMDAwMDQwMDIwMDE4OUFGRTM4MDAwMDAwMDAwMDAwMDA2ODI5Cis6MTA5NUIwMDAwMjAwODAzMjAwMDBFMDBEMDAwMDAwODAwMjAwMDBGMDk4Cis6MTA5NUMwMDAwMDAwN0IwQzAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEJDCis6MTA5NUQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDdFMEMwNzAwMDA0OEEwCis6MTA5NUUwMDAxOEEwODRCQzA4MDAwMDAwMDA0MDAyMDAxODlBRkUzODUxCis6MTA5NUYwMDAwMDAwNzgwQzAwMDAwMDY4MDIwMDgwOTIwMDAwODEwQ0RFCis6MTA5NjAwMDAwNDAwMDA0ODE4QTA4NEJBMDAwMDM2MTA5RjAwMDAwNDJGCis6MTA5NjEwMDAyODYxODBCQzAwMDAwMDAwMDAwMDAwMDAyODIxODAzQTgyCis6MTA5NjIwMDAwMDAwMDAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwOEEwQ0YxCis6MTA5NjMwMDAxMjAxMDA2MDA4NDAyM0IyMDA4MjAwMDBENjAxMDAwODM5Cis6MTA5NjQwMDAwODgwMzYzMjAzMDAzNjEwMDQ0MDAyMDAzODFBRkZCODkyCis6MTA5NjUwMDAwMzAwMDAwMDAwMDAwMDc4MDk2MDgwMzkxODAwMDAwMDU1Cis6MTA5NjYwMDBEMjQxMDI4Q0U2QTE5NzM5MDAwMDAwMDAwMDUwMDFFOEM5Cis6MTA5NjcwMDAwNjgwODQzMjI5MDAzMTAzMTIwMTAwMkM4MkNEMkVCMkUzCis6MTA5NjgwMDAwMDAwODgwQzAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMEVFCis6MTA5NjkwMDAxMjAwMDAyNDA4MDAyM0IyMDAwMDM2MTAxMjAwMDAyMDNGCis6MTA5NkEwMDAwOEMwMjNCMjAwMDAzNjEwMTIwMDAwMTgwODgwMjNCMjUwCis6MTA5NkIwMDAwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwOTUwQ0JDCis6MTA5NkMwMDAxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDBENjAxMDAwODkxCis6MTA5NkQwMDAwODgwMzYzMjAwMDA4RjBDMTIwMDAwMzgwMjgwODFCMjAwCis6MTA5NkUwMDAwMDAwMzYxMDEyMDAwMDNDMDIwMDgyQjIwMDAwMzYxMDZBCis6MTA5NkYwMDAxMjAwMDAzMDAyNDA4MkIyMDAwMDg0MEMxMjAxMDAzNERCCis6MTA5NzAwMDAwMjAwODZCMjAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MEM3Cis6MTA5NzEwMDAwODAwMDAwMDAwNDAwMjVDMTg5QUZFMzgwMDAwMDAwMEJCCis6MTA5NzIwMDAwMDAwMDA0ODA4MDAwMDMyMDAwMDAwMDAwMDAwMDBEOERGCis6MTA5NzMwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMkZDCis6MTA5NzQwMDAwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMDAwMDU4Cis6MTA5NzUwMDAwMDEwMDAwMDA3NDA4MjMyMDAwMDAwMDAwMDE4MDAwMEU2Cis6MTA5NzYwMDAwNzAwODYzMjAwMDA5QzBDMTIwMDAwNTBGMkMxMzhCNDkxCis6MTA5NzcwMDAwMDAwMDAwMEQ2MDEwMEQ4MDI4MDAxMzIwMDAwMDAwMDg1Cis6MTA5NzgwMDAwMDE4MDAwMDA3ODA4MTMyMDAwMDAwMDAwMDIwMDAwMDY3Cis6MTA5NzkwMDAwNzAwODIzMjEwMDAwMDAwMDAzMDAwMDAxN0UwMkMzOTcyCis6MTA5N0EwMDAwMDAwQTQwQzgwMDAwMDgwMzI4MDg3QjYwMDEwMDA4MDhBCis6MTA5N0IwMDAwMDM4MDAwMDA3MDAzNzMyMDAwMEE1MEMwMDAwMDA4MEQwCis6MTA5N0MwMDAwMjAwMDA5MDAwMTAwMDg4MDAzODAwMDAwNzAwMzczMkM3Cis6MTA5N0QwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMENBCis6MTA5N0UwMDAwMDAwMDA2ODAyQzA4NTMyMDAwMDAwMDAwMDAwMDAwODkwCis6MTA5N0YwMDBFODAxMDAzNDAwMDBBODBDMTIwMDAwNDgwMkMwODBCMjRBCis6MTA5ODAwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwRTAwREFDCis6MTA5ODEwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMDgxMEMwMDAwMDA4MEM5Cis6MTA5ODIwMDAwMjAwMDA5MDAwMDBCMjBDMDAwMDAwODAwMjAwMDA5MEQ2Cis6MTA5ODMwMDAwMDAwRTAwRDAwMDAwMDgwMDIwMDAwRjAwMDAwQjAwQzBECis6MTA5ODQwMDAwMDM4MDIwMEI4MUI4MDlDMDAwMEIyMEMwMDAwMDA4MEIxCis6MTA5ODUwMDAwMjAwMDA5MDA1MDAwMDAwMDAwMDAwNjgwMkEwRkUzODMxCis6MTA5ODYwMDAwMDAwQUQwQzAwNDAwMjgwMDI0MDY4OTIwMDAwMDAwMDQxCis6MTA5ODcwMDBDQTAxMDBEODAyMDAwMDMyMDAwMEI1MEMwNEI4MDE4MDEzCis6MTA5ODgwMDAwMjAwNkVCQzAwMDAwMDAwMDBCODAxRTA4NjFCRUUzQzQ4Cis6MTA5ODkwMDA0QzAwMDAwMDAwMDAwMDAwMDcwMDM2MzIwMDAwMDAwMDBECis6MTA5OEEwMDAwMDAwMDA3OEE5MDAyRDM3QjQ0NDAwMDAwMDA4MDAwMDMzCis6MTA5OEIwMDA4NzhEOTczQTAwMDAwMDAwMDAwMDAwNzg5OUMwMkMzNzhGCis6MTA5OEMwMDBCNDAwMDAwMDAwMDAwMDc4ODk4RDk3M0EwMDAwMzYxMDNGCis6MTA5OEQwMDAwMjEwMDAwMDg3QkY5N0JBMDAwMDAwMDAwMDE4MDAwMEM3Cis6MTA5OEUwMDAwNzQwRkUzMjAwMDBCQzBDMTIwMDAwNDhGMkMxMzhCNDQwCis6MTA5OEYwMDAwMDAwQkQwQ0I2MDAwMDgwMDIwMDAwQjAwMDIwQkUwQ0NECis6MTA5OTAwMDAxMjAwMDA2NEEyQ0QyQ0IyMDAwMDAwMDBBNjAwMDA4MDZFCis6MTA5OTEwMDAwMjAwMDAzMDAwMDBDMjBDODAwMTAwODBBMjgwMkZCNjNGCis6MTA5OTIwMDAxODAwMzYwMENBMDAwMEY4NzMwQTAzRjkwMDAwOEMwNzFCCis6MTA5OTMwMDAwMDU0MDFGQzAyQzA2RTkyMDAwMDAwMDAwMDU0MDFGQ0MzCis6MTA5OTQwMDAwMkMwNkUzMjAwMDBDODBDMTIwMTAwNjAwODQwMjNCMjUxCis6MTA5OTUwMDAwMDgyMDAwMDAwMDAwMDA4MDg4MDM2MzIyOTAwMzEwMzMwCis6MTA5OTYwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMEM2MEMwMDAwMDA4MDM3Cis6MTA5OTcwMDAwMjAwMDA5MDAwMDAzNjEwMTIwMDAwMjQwODAwMjNCMkZDCis6MTA5OTgwMDAwMDAwMzYxMDEyMDAwMDIwMDhDMDIzQjIwMDAwMzYxMDdDCis6MTA5OTkwMDAxMjAwMDAxODA4ODAyM0IyMDAwMDAwMDAwMDAwMDBEODY4Cis6MTA5OUEwMDAwMjgwMDEzMjAwQzBEMzBDMTgwMTAwMENBOENEM0VCMkQ5Cis6MTA5OUIwMDAyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwQ0QwQzM2Cis6MTA5OUMwMDAxMjAwMDAzODAyODA4MUIyMDAwMDM2MTAxMjAwMDAzQzA0Cis6MTA5OUQwMDAwMjAwODJCMjAwMDAzNjEwMTIwMDAwMzAwMjQwODJCMjUzCis6MTA5OUUwMDAwMDAwQzYwQzEyMDEwMDM0MDIwMDg2QjIwMDAwMzYxMERFCis6MTA5OUYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEUwMEQwMDAwMDA0ODIwCis6MTA5QTAwMDAwODAwMDBGMjA4MDBENjBDMDA0MDAyNUMxODlBRkU5ODhDCis6MTA5QTEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEVFCis6MTA5QTIwMDAwMDUwMDEwMEE4MUI4MDNBMDAwMDk3MEMwMDAwMDA0ODdECis6MTA5QTMwMDAwODAwMDA5MjAwMDAwMDAwMDA1NDAxRkMwMkMwNkUzMkQ5Cis6MTA5QTQwMDAwMDAwNTEwRjAwMDAwMDI4MDk4MDAyRjIwMDAwQkQwQzQ4Cis6MTA5QTUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDUxMEYwMDAwMDAyODZDCis6MTA5QTYwMDAwOTAwMDJGMjAwMDBERjBDOUEwMTAwRjg2MjgxMkZCNEI1Cis6MTA5QTcwMDAxMDI0MDAwMDAwMDAwMEY4QTI4RDJGMzEwMDAwMDAwMDJCCis6MTA5QTgwMDAwMEQ2MDFFQzA2QzA2RTM0MkUwMDhDMDcxMjAxMDAyQ0FCCis6MTA5QTkwMDA4MkNEMkVCMjAwMDBERjBDMDAwMDAwODAwMjAwMDA5MDlBCis6MTA5QUEwMDAwMDAwRTgwQzgwMDEwMDgwRjJDMTg1QjYwMDAwRTUwQ0UyCis6MTA5QUIwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMEU4MEMxRDAxMDBGODFDCis6MTA5QUMwMDAyMjgxMkZCNDAwMDBFODBDMDAwMDAwRjg2MjgxMkY5NTdECis6MTA5QUQwMDAwMDAwRTcwQzFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDQzCis6MTA5QUUwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDc1Cis6MTA5QUYwMDAwMjQwNjgzMjAwMDBFQTBDMDQ5ODAxNjQ4ODFCODdCQ0FECis6MTA5QjAwMDAwMDAwRDcwRjAwOTAwMTA4MDkwMDZFRjIwMDAwMDcxMDU2Cis6MTA5QjEwMDAwMDAwMDA4MDAyMDAwMEYwMDAwMDM2MTAxMjAwMDA2ODEzCis6MTA5QjIwMDAwMkM1ODVCMDAwMDAwMDAwMDAwMDAwRjhEMjgwMkYzNThCCis6MTA5QjMwMDAwMDAwOEUwNzM3MDAwMEY4RDI4MTJGQjQwMDAwMDAwMDJCCis6MTA5QjQwMDAwMDAwMDBGODcyODEyRjM0M0QwMDhFMDcxMjAxMDAyQ0I2Cis6MTA5QjUwMDA4MkNEMkVCMjAwMDBFRjBDMDAwMDAwODAwMjAwMDA5MEM5Cis6MTA5QjYwMDAwMDAwRjgwQzgwMDEwMDgwRjJDMTg1QjYwMDAwRjUwQzAxCis6MTA5QjcwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMEY4MEMxRDAxMDBGODRCCis6MTA5QjgwMDAyMjgxMkZCNDAwMDBGODBDMDAwMDAwRjg2MjgxMkY5NUFDCis6MTA5QjkwMDAwMDAwRjcwQzFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDcyCis6MTA5QkEwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MEI0Cis6MTA5QkIwMDAwMjQwNjgzMjAwMDAwMDAwMDBENDAxRUMxNkMwNkUzQThBCis6MTA5QkMwMDAwMDAwMzYxMDEyMDAwMDY4MDJDNTg1QjAwMDAwOEUwNzQ0Cis6MTA5QkQwMDAwNEIwMDA4MDAyMDA2RUJDMzcwMDhFMDcxMjAxMDAyQzFBCis6MTA5QkUwMDA4MkNEMkVCMjAwMDBGQjBDMDAwMDAwODAwMjAwMDA5MDJECis6MTA5QkYwMDAwMDAwMDQwRDgwMDEwMDgwRjJDMTg1QjYwMDAwMDEwRDU3Cis6MTA5QzAwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMDA0MEQxRDAxMDBGOEFECis6MTA5QzEwMDAyMjgxMkZCNDAwMDAwNDBEMDAwMDAwRjg2MjgxMkY5NTBFCis6MTA5QzIwMDAwMDAwMDMwRDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMEQ0Cis6MTA5QzMwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDIzCis6MTA5QzQwMDAwMjQwNjgzMjAwMDAxMDBEMDAwMDAwODAwMjAwMDA5MDA5Cis6MTA5QzUwMDAwMDAwMEMwRDgwMDEwMDgwRjJDMTg1QjYwMDAwMDkwREU2Cis6MTA5QzYwMDAxRjQwMDI4NEU2MDEwMEI0MDAwMDBDMEQxRDAxMDBGODQ1Cis6MTA5QzcwMDAyMjgxMkZCNDAwMDAwQzBEMDAwMDAwRjg2MjgxMkY5NUE2Cis6MTA5QzgwMDAwMDAwMEIwRDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDZDCis6MTA5QzkwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MEMzCis6MTA5Q0EwMDAwMjQwNjgzMjAwMDAxMDBEMzcwMDAwRjhEMjgxMkZCNDU2Cis6MTA5Q0IwMDAwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwMTAwREZDCis6MTA5Q0MwMDAxMjAxMDAyQzgyQ0QyRUIyMDAwMDBFMEQwMDAwMDA4MDhCCis6MTA5Q0QwMDAwMjAwMDA5MDAwMDAwMDAwMDBENDAxRUMwNjAwMDAzMkY5Cis6MTA5Q0UwMDAwMDAwOEUwNzEyMDEwMDY4MDJDNTg1QjAwMDAwMzYxMDIyCis6MTA5Q0YwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDhDMDc4MDAxMDA4MEJFCis6MTA5RDAwMDBGMjgxMkZCNjAwMDA4QzA3ODAwMDAwODBFMjgxMkZCNjIwCis6MTA5RDEwMDAwMDAwOEMwNzA4NTkwMUVDMDZGQjZFQkMwMDAwMDAwMDM3Cis6MTA5RDIwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDA1NDU0MDFGQzAxCis6MTA5RDMwMDAwMkMwNkUzMjAwQzAxRDBEMTgwMTAwMENBOENEM0VCMjRECis6MTA5RDQwMDAwMDAwMDAwMDAwNTgwMUVDMDZGQjZFM0EyMDgwMDAwMDg1Cis6MTA5RDUwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDJGMDMxMjAxMDAyQzlBCis6MTA5RDYwMDA3MkUwMkVCMjAwMDAxQjBEMDAwMDAwODAwMjAwMDA5MDg3Cis6MTA5RDcwMDAwMDAwQUEwRjAwMDAwMEY4RTI4MTJGRjQwMDAwMjAwRDdGCis6MTA5RDgwMDAwNjAzMDE4MDEyQzA2RUJDMTkwMDdEMDUwMDAwMDAxQzk2Cis6MTA5RDkwMDAwODAwMzY5MjFBMDA3RDA1MDAwMDAwMUMwODAwMzY5MjZCCis6MTA5REEwMDAwMEMwMDAwMDAwMDAwMEY4QTI4RDJGMzEwMDAwMDAwMDZDCis6MTA5REIwMDAwMDAwMDBEODAyODAwMTMyMDAyMDAwQzAwMDAwMDAyODBFCis6MTA5REMwMDAwOTAwMzczMjAwMDAwMDAwMDAzMDAwMjgwODAwNkUzMjIxCis6MTA5REQwMDAwMDAwMDAwMDQ1MzAwMEUwMDYwMDAwMzIwMDAwQUQwRjNBCis6MTA5REUwMDAwMDAwMDAwOEU4MDEwMEY0MDAwMDJDMEQwNDAyMDFFQzYyCis6MTA5REYwMDAxNkMwNkVCQzAwMDAwMDAwQzkwMTAwMTQxODQwODEzQTcyCis6MTA5RTAwMDAwMDAwMDAwMDAwMDAwMEY4MDI4MDJGMzQwMEMwMkMwRDdDCis6MTA5RTEwMDAxMjAxMDA0MEEyOEQzOUIyMDAwMDJBMEQwMDAwMDA4MDFFCis6MTA5RTIwMDAwMjAwMDA5MDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTE3Cis6MTA5RTMwMDAwMDAwMkMwRDlGMDEwMDE0MTg0MDgxQkMwMDAwOEUwNzBCCis6MTA5RTQwMDA4MDAxMDA4MDkyODAyRkI2MkIwMDhFMDcxMjAxMDAyQzFCCis6MTA5RTUwMDA4MkNEMkVCMjAwMDAyRjBEMDAwMDAwODAwMjAwMDA5MDg1Cis6MTA5RTYwMDAwMDAwMzYxMDFGMDEwMEQ4MDI4MDAxQjIwMDAwMDAwMDdGCis6MTA5RTcwMDAwMDU0MDFGQzAyQzA2RTMyMDBDMDNDMEQxODAxMDAwQzAxCis6MTA5RTgwMDBBOENEM0VCMjIwODAwMDAwMDAwMDAwMjgwOTgwMzYzMkI0Cis6MTA5RTkwMDAwMDAwRjEwRTAwMDAwMEQ4MDIwMDAwRDIwMDAwMzkwREQxCis6MTA5RUEwMDAwNDAwMDA4MDAyODA5MkJDMTgwMDAwMDAwMDAwMDBGODRFCis6MTA5RUIwMDA3MzBBMDMzOTNBMEQzNjAwMDAwMDAwQzAwMjAwMzY5MkUyCis6MTA5RUMwMDAxODAwMzYwMDAwMDAwMEY4NzM4QTAzRjkwMDAwMDAwMDUzCis6MTA5RUQwMDAwMDAwMDBEODAyODAwMTMyMDBDMDM5MEQxODAwMDAwQ0NCCis6MTA5RUUwMDBBOENEM0VCMjAwMDBBQTBGMDAwMDAwRDgwMjQwMDBGMjQ4Cis6MTA5RUYwMDAwMEYwNDMwRDFENDAwMjAwQTgwRDY4QjEwMDAwMzYxMEFGCis6MTA5RjAwMDAxRTQwMDI4NDA2MDAwMEIyMDAwMDQxMEQxMjAwMDAyODJECis6MTA5RjEwMDAwMjA1ODBCMDA4MDAzRDBEMDAwMDAwRjgyMzQwMDE5OUMzCis6MTA5RjIwMDAwMDAwM0QwRDEyMDEwMDY4MDIwNTgwQjAwMDAwMzYxMEVGCis6MTA5RjMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDQzMERCNTAwMDA4MDhBCis6MTA5RjQwMDAwMjAwMDBCMDAwMDAwMDAwQTUwMDgwQTAzNjBCNkEzNUJBCis6MTA5RjUwMDAwMDAwMDAwMDAwMDAwMDUwMDlDMDI5MzIwMDAwMDAwMDhECis6MTA5RjYwMDAwMDU2MDEyODA4QzA2RTMyMDAwMDAwMDAwMDAwMDA3ODkyCis6MTA5RjcwMDAzOTBCMkUzMjAwMDAwMDAwMDAwMDAwMjBGMzgxOTczNERFCis6MTA5RjgwMDAwMDAwNEMwRDA0MDAwMDc4RDkwMTMwQjYwMDAwMDAwMDNDCis6MTA5RjkwMDAwMDAwMDAwMEI5MDUzMDMwMTgwMDAwMDAwMDAwMDBGODkzCis6MTA5RkEwMDAwM0E0MDMzOTAwMDAwMDAwMDAwMDAwMzQzMzBCMkYzMkZCCis6MTA5RkIwMDAwMDAwNTkwRDA0MDAwMDc4RDkwMTMwQjYwMDAwMDAwMEZGCis6MTA5RkMwMDAwMDAwMDA3OEI5MDUzMDMwMDAwMDUyMEQwNDAwMDA4MDE4Cis6MTA5RkQwMDA0MkU1MjlCQzAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjQ5Cis6MTA5RkUwMDAxODAwMDAwMDAwMDAwMEY4NzM4QTAyMzkwMDAwMDAwMDI5Cis6MTA5RkYwMDAwMDAwMDA5QzAyODA5NzMyMDAwMDU4MEQyNTAxMDAwOEU3Cis6MTBBMDAwMDAwODAwMDBCMjAwMDA1NjBEMTIwMDAwMjgwMjA1ODBCMEMyCis6MTBBMDEwMDAwODAwNTgwRDAwMDAwMEY4MjM0MDAxOTkwMDAwNTgwRDc5Cis6MTBBMDIwMDAxMjAxMDA2ODAyMDU4MEIwMDAwMDM2MTAwMDAwMDA4MEI4Cis6MTBBMDMwMDAwMjAwMDA5MDAwMDA0QzBEMDAwMDAwRjQwMjAwMDA5MkFECis6MTBBMDQwMDAwMDAwNUQwRDA0MDAwMDgwNDJFNTI5QkMwMDAwMDAwMDE2Cis6MTBBMDUwMDAwMDAwMDBGODAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGOEM0Cis6MTBBMDYwMDA3MzhBMDIzOTAwMDAwMDAwMDAwMDAwOUMwMjAwOTUzMjUzCis6MTBBMDcwMDAwMDAwMDAwMENBMDEwMEQ4MDI4MDAxMzIwMDAwMDAwMDg4Cis6MTBBMDgwMDAwMDMwMDAwMDA3QzAyQzMyMDAxMDAwQTAwMDM4MDAwMDkzCis6MTBBMDkwMDAwNzAwMzczMjAwMDAwMDAwMDAyMDAwMDAwNzAwRUUzMjA5Cis6MTBBMEEwMDAwMDAwMDAwMDAwMzgwMDBDMDc4MDgyMzIwMDAwNjIwREMyCis6MTBBMEIwMDAxMjAwMDA0ODAyQzA4MEIyMDAwMDMyMDMwMDAwMDAwODE1Cis6MTBBMEMwMDBFODAxMDA5NDAwMDA3QTBEMDIwMDAwODBBMjQyODBCQ0VBCis6MTBBMEQwMDAwMDAwN0EwRDgwMDAwMDgwRjJDMTg1QjYwMDAwN0EwRDg0Cis6MTBBMEUwMDAxRjQwMDIwOEI5QkY2OEIwMDAwMDZDMEQ4MDQxMDI4MEJCCis6MTBBMEYwMDBFMjgxNjhCNjA4MDAwMDAwMDAwMDAwMTA3OTYxODAzOTM0Cis6MTBBMTAwMDAwMDAwMDAwMEQyMjEwMUUwMTYyMDZFM0ExODAwMDAwMDg1Cis6MTBBMTEwMDAwMDQwMDI4OEU2MjE5MTM5MDAwMDAwMDAwMDAxMDA1QzQ3Cis6MTBBMTIwMDAwODAwMDA3MjAwMDAwMDAwMDAwMDAwMEMxOUEwOTAzQTI2Cis6MTBBMTMwMDAwMDAwN0EwRDA2MDEwMDgwRDJGRjkwQkMwMDAwNzAwRDc3Cis6MTBBMTQwMDAyQzQxMDI3OEY5ODE2OEI0MDAwMDAwMDAwMDAwMDA3ODFBCis6MTBBMTUwMDBCOTgxOTczNDAzMDAwMDAwMDA0MDAyMDAyOTFBRkYzODNCCis6MTBBMTYwMDAwMDAwMDAwMDAwMzgwMjAwQjkxQjkwM0EwMDAwMDAwMDE3Cis6MTBBMTcwMDBEMjQxMDI4ODE2QTA5NzNBMDAwMDAwMDA0NTAwMDBEODlFCis6MTBBMTgwMDAwMjQwMDAzMjAwMDAzNjEwOUYyMDAxRTAxNjIwNkVCQTE3Cis6MTBBMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDc0MDgwMzIwMDAwMDAwMEM2Cis6MTBBMUEwMDAwMDA4MDAwMDI3MjQ5MDNBMDAwMDAwMDAwMDEwMDAwMDgyCis6MTBBMUIwMDAwNzAwOEEzMjAwMDAwMDAwMTIwMTAwNThGMkMxMzg3NDEyCis6MTBBMUMwMDAwMDAwNzgwRDAwMDAwMDgwMDIwMDAwOTAwODAwODQwRDVGCis6MTBBMUQwMDAxQTAwMDAzNDc5NjE4MEI5MDAwMDhGMEQxRTAxMDA4MEUzCis6MTBBMUUwMDAwMjAwMDBCMDAwMDA4RjBEMUY0MDAyMDAwOTQwNjhCMjVECis6MTBBMUYwMDAwMDAwN0MwRDgwMDAwMDgwRTIwMTkwQjYwMDAwMzYxMDY3Cis6MTBBMjAwMDAzODAwMDA1NDFGNDBGNUJBMDAwMDAwMDAwMDAwMDAwOEFDCis6MTBBMjEwMDBCOTNGOTAzMDAwMDAwMDAwMDAyODAxRTAyNjI0NkUzQThCCis6MTBBMjIwMDAwODAwMzYxMDFFMDAwMDAwMDlBNEZFQjgwMDAwOEYwREMzCis6MTBBMjMwMDAxMjAxMDA2ODAyMDU5MEIwMDAwMDM2MTAwMDAwMDA4MDk2Cis6MTBBMjQwMDAwMjAwMDA5MDAwMDA4RjBEODAwMDAwODA4MjgxMkZCNkY4Cis6MTBBMjUwMDAwMDAwOEQwRDFGNDEwMjAwMDk0MDY4QjIwMDAwMDAwMDlGCis6MTBBMjYwMDAwMDI4MDFFMDE2MjA2RTNBMDAwMDhBMEQ4MDAxMDA4MDZGCis6MTBBMjcwMDBGMkMxODVCNjAwMDAwMDAwMDA0MDAyODRFNjAxMDAzNDBGCis6MTBBMjgwMDAwMDAwMDAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwMDAwMDFDCis6MTBBMjkwMDAwMDQwMDI4MDAyNDA2ODMyMDAwMDM2MTAzODAwMDA1NDRFCis6MTBBMkEwMDAxRjQwRjVCQTAwMDAwMDAwMDAyMTAxRTAxNjIwNkU3QTgwCis6MTBBMkIwMDAwMDAwODUwRDgwMDAwMDgwRTIwMTkwQjYwMDAwN0UwRDU4Cis6MTBBMkMwMDAwMDAwMDA1NDFGNDBGNTlBMDAwMDAwMDAwMDAwMDA1Q0YwCis6MTBBMkQwMDAwODAwMDAzMjAwMDAwMDAwRDIyMTAxRTAxNjIwNkUzQTkyCis6MTBBMkUwMDAxODAwMDAwMDFFNDEwMjg0RTY2MTkzNzkwMDAwMzYxMEQ4Cis6MTBBMkYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MENFCis6MTBBMzAwMDAwMjAwMDA5MDAwMDA5NzBEMUQ1RDAxRUMxNkMwNkVCQ0IwCis6MTBBMzEwMDAwMDAwMDAwMDBGMDEwMDgwMDIwMDAwNzAwMDAwMDAwMDNCCis6MTBBMzIwMDAwMDAxMDBGOEIyODAyRjc0MDAwMDAwMDAwRjAxMDA4MENGCis6MTBBMzMwMDAwMjAwMDA3MDAwMDA5NjBEMDQ1RTAxRUMxNkMwNkVCQ0I5Cis6MTBBMzQwMDAwMDAwMDAwMDAwNUMwMUVDMDY0MDAwMzIwMDAwMDAwMDRDCis6MTBBMzUwMDAwMDAxMDA4MDAyMDAwMDcwMDAwMEZGRkYwMDAwMDA4MDhDCis6MTBBMzYwMDAwMjAwMDA5MDAwMDAwMDAwMDQyMDAxODA4MkRCOTA3QzRECis6MTBBMzcwMDAwMDAwMDAwMDAyMEMwMjgwQTJEQjkwN0MwMDAwQTAwRDE3Cis6MTBBMzgwMDAwNjIxMDE4MDgyMUI5MEJDMjcwMEExMEQwMDAwMDAwMDY3Cis6MTBBMzkwMDAwOTAwMzY5MjI4MDAwMDAwMDAwMDAwMDAwOTAwMzYzMjUzCis6MTBBM0EwMDAwMDAwMDAwMDAwMDAwMDg4MTIwMDJDM0EwMDAwRkZGRkFGCis6MTBBM0IwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAyRkEwMDE3ODQzCis6MTBBM0MwMDA4OTFCOTI3QTAwMDAwMDAwMDY4ODAxNzg4OTlCOTc3QzlGCis6MTBBM0QwMDAwMDAwMDAwMDAwMzQwMjA0MDlDMDZFM0QwMDAwMDAwMENGCis6MTBBM0UwMDAwMDBDMDIwMDE5QTQ2RTM3MDAwMEFCMEQwMjAwMDA4MEMzCis6MTBBM0YwMDAwMkE0OTdCQzAwMDBBQjBEMDIwMDAwODAwMjAwMDBCMDc4Cis6MTBBNDAwMDAwMTAwMDAwMDAwMDAwMDc4ODk4RDk3MzcwMDAwMDAwMEVGCis6MTBBNDEwMDAwMjAxMDI4MDgyOUI5NzdDMDAwMDAwMDAwMDAxMDBGODhFCis6MTBBNDIwMDBGMjgwMkY3NDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDA3Cis6MTBBNDMwMDAwMDAwMDAwMERBNUIwMUVDMDY0MEVEMzIwMDAwQjEwREQ3Cis6MTBBNDQwMDAwNDAxMDA4MDAyNDA4NkJDMDAwMDAwMDAwMEEwMDFFMDgyCis6MTBBNDUwMDAxNjIwNkUzQTAwMDBCMzBEMDBENDAxRUMwNjAwMDA5MjA1Cis6MTBBNDYwMDAwMDAwRDcwRjAwOTAwMTA4MDkwMDZFRjIwMDAwMDAwMDA0Cis6MTBBNDcwMDAwMEEwMDFFMDE2MjA2RTNBMDAwMDA3MTAzMzAxMDBGODNBCis6MTBBNDgwMDA4MjgwMkZCNDAwMDAwNzEwOUZGMDAxODA4MkRCODdCQzIwCis6MTBBNDkwMDAwMDAwMDcxMDlGRjgwMTgwMjIyMTZFQkMwMDAwMDAwMDIwCis6MTBBNEEwMDAwMEU4MDFFMDA2MDBFRTMyMDAwMDAwMDAwMEYwMDFFMEVDCis6MTBBNEIwMDAwNkMwODczMjAwMDAwNzEwMDAwMDAwODAwMjAwMDA5MEY0Cis6MTBBNEMwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwMDAwQzUwREFBCis6MTBBNEQwMDAwNDIxMDEzMDY5MjQ2RUJDMDAwMEJGMEQxRjQwMDIyNDFFCis6MTBBNEUwMDAwOTQwNjhCMjAwMDBCQjBEODAwMDAwODBFMjQxOTJCNkQ2Cis6MTBBNEYwMDAwODAwQkIwRDEyMDEwMDY4OTJBNEZFQjgwMDAwMzYxMERGCis6MTBBNTAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMEE4MDFFMEIwCis6MTBBNTEwMDA2NjI0NkUzQTAwMDBDMjBEMzgyMDAxRTAwNjAwOTNCMkI2Cis6MTBBNTIwMDAwMDAwQzMwRDAwMjgwMUUwMDYwMDAwOTIwMDAwMDAwMEJBCis6MTBBNTMwMDAwMDMwMDFFMDA2MDAwMDMyMDAwMDAwMDAwMDUwMDFFODk5Cis6MTBBNTQwMDAwNjAwMDAzMjAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MEUwCis6MTBBNTUwMDAwMDAwQ0EwRDM4NTEwMTAwQTk5QjkxQkEwMDAwQzgwRDM2Cis6MTBBNTYwMDAwNDQxMDIwOEI5RkY2OEIwMDAwMEM2MEQwMDQwMDI4MDM3Cis6MTBBNTcwMDAwMjQwNjg5MjAwMDBENTBEOUYzMTAxRTA2NjI0NkVCQzU4Cis6MTBBNTgwMDAwMDAwRDUwRDAwMzAwMUUwMDYwMDAwOTIwMDAwRDMwRDYwCis6MTBBNTkwMDAwNDI4MDEwNDA5MDA2RUIyMDAwMEQxMEQ5RjAxMDAwMEUzCis6MTBBNUEwMDAxOTI0OTBCQzAwMDAwMDAwMDBBODAxRTA2NjI0NkUzQTY3Cis6MTBBNUIwMDAwMDAwMDAwMDAwMjgwMUUwMDYyNDAwM0MwMDAwMDAwMDJDCis6MTBBNUMwMDAwMDUwMDFFODA2MDAwMDMyMDAwMDM2MTA5RjIwMDFFMDM0Cis6MTBBNUQwMDAwNjAwOTNCMjAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDNECis6MTBBNUUwMDAwMDAwMDAwMDAwMjgwMUUwMDYwMDAwMzIwMDAwREIwRDQyCis6MTBBNUYwMDAwNDAwMDA4MDAyMDA5MEJDMDAwMEQ1MEQwNDQxMDIwODU4Cis6MTBBNjAwMDBCOUZGNjhCMDAwMDBEMzBEMDA0MDAyODAwMjQwNjg5MjlDCis6MTBBNjEwMDAwMDAwRDkwRDAyMDAwMDgwMjIyNDkwQkMwMDAwREIwRDU4Cis6MTBBNjIwMDA4MDQwMDI4MEYyQzE2OEI2MDAwMDAwMDAwMDQwMDI4QzQ5Cis6MTBBNjMwMDBCNkMxNjgzNTAwMDBEQjBEMDAwMDAwRjgyMjgxMkY5NEMwCis6MTBBNjQwMDAwODAwMzYxMDEyNDAwMjY4MTI5QUZFQjgwMDAwRDMwREJFCis6MTBBNjUwMDAwNDAxMDAwMDI5MjQ5MEJDMDAwMDAwMDAwMEE4MDFFMEQzCis6MTBBNjYwMDA2NjI0NkUzQTAwMDAwMDAwMDA1MDAxRTgwNjAwOTAzMkI3Cis6MTBBNjcwMDAwMDAwMzYxMDlGMjAwMUUwMDYwMDkzQjIwMDAwMDAwMEE5Cis6MTBBNjgwMDAwMDAxMDA4MDAyMDAwMDcwMDAwMEZGRkYwMDAwMDA4MDU5Cis6MTBBNjkwMDAwMjAwMDA5MDE4MDBFMjBEMUY0MTAyNzg4OENENjhCNkQ0Cis6MTBBNkEwMDAwMDAwMDAwMDAwMDAwMDg4MTIwMDJDM0EwMDAwRTQwREI5Cis6MTBBNkIwMDA4MDAxMDA4MDYyODA4N0I2MDAwMEUwMEQwMDQwMDI4MENCCis6MTBBNkMwMDAwMjQwNjg5MjAzMDAzNjEwMDQ0MDAyMDAzODFBRkZCOEI2Cis6MTBBNkQwMDAwMDAwMzYxMDFGNDAwMjA0QjhGRjY4QjAwMDAwMDAwMDAwCis6MTBBNkUwMDAwMDM5MDIwMEI4MUI4MDdBMDAwMEZGRkYwMDAwMDA4MEU0Cis6MTBBNkYwMDAwMjAwMDA5MDAwMDBFRjBEODAwMTAwODBBMjgwMkZCNkM0Cis6MTBBNzAwMDAwMDAwRUMwRDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDUzCis6MTBBNzEwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEOEYwCis6MTBBNzIwMDAwMjQwODQzMjFEMDBFRjBEMDQwMTAwODAwMkE0MTdCODFFCis6MTBBNzMwMDAwMDAwRTkwRDlGMDEwMDgwMTgwMDg4QkMwMDAwMzYxMDYxCis6MTBBNzQwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDYwMDA2QzJCCis6MTBBNzUwMDAwODAwNkUzMjAwMDAwMDAwQ0E2ODAwNEMwODAwNkUzMjJCCis6MTBBNzYwMDAwMDAwMzYxMDA0NzAwMDE4MDgwMDZFQjIwMDAwMDAwMEVGCis6MTBBNzcwMDAwNDAwMDA4MEEyQTA4MTdDMDAwMEY2MEQ4MDAxMDA4MDEyCis6MTBBNzgwMDBFMjgwMkZCNjAwMDBGNjBEMUIwMDAwODAwMjAwMDBCMDMyCis6MTBBNzkwMDAwMDAwMDAwMDA2MDAwMDgwNjJFMDgzN0MwMDAwMDAwMEYyCis6MTBBN0EwMDBDQTAxMDBGODAyODAyRjM1MDBBMDAwMDAxMjAxMDA0MDBECis6MTBBN0IwMDBBMjhEMzk3MjAwMDBGNzBEMDAwMDAwODAwMjAwMDA5MEE5Cis6MTBBN0MwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDc5Cis6MTBBN0QwMDAwMDA4MDFFNDA2QzAyRDMyRUVGRjAwMDAwMDEwMDFFMDg5Cis6MTBBN0UwMDA4NjhEMkYzMTAwMDAwMDAwMDAwMDAwMUNCM0U0MzkzMkQ4Cis6MTBBN0YwMDAwMDAwMDAwRTA0MDAwMDc4RDkwMTMwQjYwMDAwMDAwMDBGCis6MTBBODAwMDAwMDAwMDA3OEI5MDUzMDMwMTgwMDAwMDAwMDAwMDBGOEEyCis6MTBBODEwMDBFM0E1MDMzOTAwMDAwMDAwMDAwMDAwMzQzMzBCMkYzMkExCis6MTBBODIwMDAwMDAwMDAwMDA0MDAwMDc4RDkwMTMwNzYwMDAwMDAwMDJDCis6MTBBODMwMDAwMDAwMDA3OEI5MDUzMDMwMTgwMDAwMDAwMDAxMDBGODcxCis6MTBBODQwMDBFM0E1MDM3OTAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MEY0Cis6MTBBODUwMDAwMDAwMDAwMDAwMDAwMENDMDIwMDAwMzIwMDAwMDgwRUUyCis6MTBBODYwMDAyMDAwMDEyQzA5QzA2RUIyMDAwMDA5MEUwMDE2ODZDQzMzCis6MTBBODcwMDAwNkMwOTI5MjAwMDAwMDAwMDAxNDg2Q0MwNkMwOTIzMkZFCis6MTBBODgwMDAwMDAwMDAwMDEyMDEwMDQwNjI4RTkyNTIwMDAwMDkwRThBCis6MTBBODkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDI4Cis6MTBBOEEwMDAwMjAwMDA5MDAwMDAwRTBFMDQwMDAwNzhEOTAxMzBCNkJFCis6MTBBOEIwMDAwRTBFMzYwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDAwMEJDCis6MTBBOEMwMDAwMDAwMDAxNDAzMDAzODMyMDAwMDAwMDAwMDAwMDBFMDI3Cis6MTBBOEQwMDAwMjAwMzAzMjAwMDA0RTBFMDQwMDAwMjREODAxMzBCNkQxCis6MTBBOEUwMDAxMjBFMDAwMDAwMDAwMDg4ODI0RDgyM0EwMDAwMzYxMEVGCis6MTBBOEYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDgwCis6MTBBOTAwMDAwMjAwMDA5MDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDVECis6MTBBOTEwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwRTBFMzYwMDhECis6MTBBOTIwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDM4MEUwMDAwMDA4MEQ3Cis6MTBBOTMwMDAwMjAwMDA5MDAwMDAxQTBFMDAwMDAwMjA0ODA1MzA5MDMwCis6MTBBOTQwMDAwMDAwMzYxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjYwRTdCCis6MTBBOTUwMDA5MjExMDFCQzA4MDA2RUIyMDAwMDAwMDAwMDA4MDFEQzhBCis6MTBBOTYwMDAwMjQwNkUzMjAwMDAxRTBFMUYxMTAxRTAyNkMxOEJCNUExCis6MTBBOTcwMDAwMDAwMjYwRTFEMDAwMDgwMDIwMDAwQjAwMDAwMDAwMDU0Cis6MTBBOTgwMDAwMDAwMDBEODAyMDAwMDMyODAwMjAwMDAwMDAwMDAwMDM5Cis6MTBBOTkwMDAwNzAwMzYzMjAwMDAwMDAwMDAwMDAwNzhBOTAwMkQzN0MzCis6MTBBOUEwMDAyMDQ1MDAwMDAwMDgwMDAwODc4RDk3M0EwQTAwMDAwMDRCCis6MTBBOUIwMDAwMDAwMDA3ODg5MEQ4MjM3MDAwMDAwMDAwMDEwMDAwMEMwCis6MTBBOUMwMDBBN0JBOTczQTAwMDAwMDAwMDAxODAwMDAwN0MwRUEzMjVBCis6MTBBOUQwMDAwMDAwMjUwRTEyMDAwMDQ4MDJDMDM4QjIwMDAwMkEwRTA2Cis6MTBBOUUwMDA4MDBFMDFCQzA4QzA2RUIyMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBBOUYwMDAxOTBFODIzMjAwRTAzMjBFMTIwMTAwNDhBMjBEOTBCMjEwCis6MTBBQTAwMDAwMDAwMjgwRTAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEZFCis6MTBBQTEwMDAwMDAwMDBEODAyNDAwMDMyQjQwMDAwMDAwMDAwMDAwMDM2Cis6MTBBQTIwMDAwNzAwMzYzMjAwMDAwMDAwMDAwMDAwNzhBOTAwMkQzNzMyCis6MTBBQTMwMDAwMDQ0MDAwMDAwMDgwMDAwODc4RDk3M0EwMDAwMDAwMEU1Cis6MTBBQTQwMDAwMDAwMDA3ODk5MDA4MjM3MDAwMDM2MTAwMjEwMDAwMEU0Cis6MTBBQTUwMDA4N0JGOTdCQTAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMkQwCis6MTBBQTYwMDAwMDAwMzEwRTEyMDAwMDQ4RjJDMTM4QjQxODAwMzYwMDYwCis6MTBBQTcwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDAwNDYxCis6MTBBQTgwMDA4OTYwMzgzMjAwMDAwMDAwMDAwMDAwMThGMzQxOTAzNDYzCis6MTBBQTkwMDAwMDAwMzgwRTA0MDAwMDc4RDkwMTMwQjYwMDAwMDAwMDM0Cis6MTBBQUEwMDAwMDAwMDAwMEI5MDUzMDMwMTgwMDAwMDAwMDAwMDBGODc4Cis6MTBBQUIwMDAwM0E0MDMzOTAwMDAwMDAwMDAwMDAwMDAxOUNFMkMzMjZFCis6MTBBQUMwMDAwMDYwMzkwRTEyMDAwMDQwQTIwRDkwQjIwMDAwMDAwMDlDCis6MTBBQUQwMDAwMDAwMDBEODAyMDAwMDMyNjAwMDAwMDAwMDAwMDAwMDBBCis6MTBBQUUwMDAwNzAwMzYzMjAwMDAwMDAwMDAwMDAwQkNBODAwMkQzNzJGCis6MTBBQUYwMDBBMDQ3MDAwMDAwMDgwMDAwODdDRDhCM0EwQTAwMDAwMDQ0Cis6MTBBQjAwMDAwMDAwMDA3ODg5Q0QyQzM3ODAwMjAwMDAwMDAwMDA3ODFBCis6MTBBQjEwMDA4OThEOTczQTAwMDAwMDAwMDAxMDAwMDBBN0JBOTczQTBDCis6MTBBQjIwMDAwMDAwMDAwMDAwMTgwMDAwMDdDMEVBMzIwMDAwNDIwRURBCis6MTBBQjMwMDAxMjAwMDA0MEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGOERFCis6MTBBQjQwMDA3MzBBMDNGOTAwMDAwMDAwMDAwODAxREMwMjQwNkUzMkM1Cis6MTBBQjUwMDAwQTAwNDcwRTFGMDEwMDc4ODlDRDJDQjcwMDAwMDAwMEM1Cis6MTBBQjYwMDAxRDEwMDFGODAyMDA2RTcyODAwMjAwMDAwMDAwMDAwMDVCCis6MTBBQjcwMDAwNzAwMzYzMjIwNDUwMDAwMDAwODAwMDA4N0NEOEIzQUUwCis6MTBBQjgwMDAwMDAwMDAwMDAwMTAwMDAwQTdCQTk3M0EwMDAwMDAwMDgzCis6MTBBQjkwMDAwMDE4MDAwMDA3QzBFQTMyMDAwMDRCMEUxMjAwMDA0MDBGCis6MTBBQkEwMDBGMkMxMzhCNDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTQ3Cis6MTBBQkIwMDAwMDAwMDAwMDAwMTEwMUY4MDIwMDZFNzIwMDAwMDAwMEE5Cis6MTBBQkMwMDAwMDEwMDFGODAyMDA2RTMyMDAwMDAwMDAwMDA5MDFEQ0Y0Cis6MTBBQkQwMDAwMjQwNkU3MjAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDQzCis6MTBBQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMzIwRTAwMDAwMDFDCis6MTBBQkYwMDAwMDAwMDAwNDg5NEQwRDM2MDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBQzAwMDAwNzgwMEIzMjAwMDAwMDAwMDAwODAwMDAwNzAwOTAzMkFGCis6MTBBQzEwMDAwMDAwMDAwMDAwMTAwMDAwMDcwMDM2MzIwMDAwNTYwRTUxCis6MTBBQzIwMDAxMjAwMDA0Q0YyQzEzOEI0MDAwMDAwMDAwMDAwMDA4MEE3Cis6MTBBQzMwMDAwMjAwMDAzMDAwMDA1NzBFMTIwMDAwODAwMkMwMjFCMjU2Cis6MTBBQzQwMDAwMDAwMDAwMDAwMDAwMDAwRTkwMjkwM0EwMDAwNTMwRUVFCis6MTBBQzUwMDAwNDAxMDAwNDE5NDA5MEJDMDAwMDAwMDAwMDAxMDA4MEM1Cis6MTBBQzYwMDAwMjAwMDA1MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDgyCis6MTBBQzcwMDAwMDAwNjUwRTgwMDEwMDgwQTI4MDJGQjYwMDAwNjAwRUVCCis6MTBBQzgwMDAxMjAxMDBFODAyQzAyMUIyMTgwMDM2MDAwMDAwMDBGOEVFCis6MTBBQzkwMDA3MzBBMDNGOTAwMDA2NDBFMDQwMDAwODAwMjgwMkRCQ0RBCis6MTBBQ0EwMDAwMDAwMzYxMDlGMDAwMDgwMTgwMDg4QkMwMDAwNjAwRTc1Cis6MTBBQ0IwMDAxMjAxMDBFODAyQzAyMUIyMDAwMDVGMEUwMDAwMDA4MDE3Cis6MTBBQ0MwMDAwMjAwMDA5MDAwMDAwMDAwQ0EwMDAwRDgwMjQwODQzMjU4Cis6MTBBQ0QwMDAwMDAwMDAwMDAwNDAwMDZDODgxQzgzM0EwMDAwMDAwMDY3Cis6MTBBQ0UwMDAwMDQ4MDA0QzA4MDA3MjMyMDAwMDM2MTAwODUwMDAxODZFCis6MTBBQ0YwMDBDODIwNzJCQzAwMDAwMDAwMDQwMDAwODAwMjQwODE3QzdCCis6MTBBRDAwMDAwMDAwMDAwMDAwMDAwMDE0MTg0MDgxM0MwMDAwMzYxMEQ0Cis6MTBBRDEwMDAwMjAwMDAyMDg4MDE4MkJBMDAwMDAwMDAwMDAwMDBEODc0Cis6MTBBRDIwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwMDAwNzAwMDYzMkIwCis6MTBBRDMwMDAwNzAwMDAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMDAwMDAxCis6MTBBRDQwMDAwMDEwMDAwMDA3MDA4MjMyMDAwMDAwMDBDQTE5MDAwMDU1Cis6MTBBRDUwMDAwNzQwODIzMjAwMDA3MDBFMTIwMDAwNDBGMkMxMzhCNDg5Cis6MTBBRDYwMDAwMDAwMDAwMDAwMDEwMEQ4MDI0MDg0NzIwMDAwRkZGRkQ0Cis6MTBBRDcwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA0RDAwMDAwMDc0Cis6MTBBRDgwMDA2N0UwODMzRTAwMDAwMDAwMDAwODAwMDAwNzAwODAzMkZBCis6MTBBRDkwMDAwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzIwMDAwMDAwMDI0Cis6MTBBREEwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMEI3MEUwNDAwMDAyODFECis6MTBBREIwMDBEOEEwODJCQzAwMDAwMDAwMDAwMDAwMThEOEEwODEzQzkwCis6MTBBREMwMDAwMDAwODkwRTA0MDAwMDNDRDhFMDgzQkMwMDAwN0QwRTJBCis6MTBBREQwMDAwNDAwMDA4MDcyODAyREJDMDAwMDdCMEUxMjAwMDA1MDI5Cis6MTBBREUwMDAwMkMwMzhCMjAwMDA4MzBFNTEwMDAwRDgxMjgwMkQ5QUE0Cis6MTBBREYwMDAwMDAwN0QwRTEyMDAwMDUwRjJDMTM4QjQxODAwMzYwMDc5Cis6MTBBRTAwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDgyMEUwNDAwMDA4MEJECis6MTBBRTEwMDA3MjgwMkRCQzAwMDA3RTBFNjcwMDAwRjhBMjgwMkZCNTY2Cis6MTBBRTIwMDAwMDAwMzYxMDEyMDAwMEU4MDJDMDIxQjIwMDAwMDAwMDRECis6MTBBRTMwMDA1MTAwMDBEODAyMDAwMDMyMDAwMDg3MEUyQTAxMDAwMEY1Cis6MTBBRTQwMDBEODIwODBCQTAwMDA4NzBFMTIwMTAwMDAwOUMwMjFCMjhDCis6MTBBRTUwMDAxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDMzCis6MTBBRTYwMDAwMDAwMDBEODAyNDA4NDMyMDAwMEYwMEQwMDYwMDA2QzQ5Cis6MTBBRTcwMDAwODAwNkVGMjAwMDA3NDBFNEQwMDAwMDA2N0UwODM5RTMzCis6MTBBRTgwMDAwMDAwODkwRTEyMDAwMDUwRjJDMTM4QjQxODAwMzYwMERDCis6MTBBRTkwMDAwMDAwMDBGODczMEEwM0Y5MUQwMDhFMEUwNDAwMDA4MDA0Cis6MTBBRUEwMDAwMkE0MTdCODAwMDA4QTBFNjcwMDAwRjhBMjgwMkZCNTMwCis6MTBBRUIwMDAwMDAwMzYxMDEyMDAwMDAwMDlDMDIxQjIwODAwMzYxMDUwCis6MTBBRUMwMDAxMjQwMDI2ODEyOUFGRUI4MDAwMERDMEUwMDAwMDAzMDRBCis6MTBBRUQwMDAwMzAwMzhGMjAwMDA5RjBFMUYwMDAwNkNEOEUwODZCQTE1Cis6MTBBRUUwMDAwMDAwRTAwRDUxMDAwMEQ4MDIwMDAwRjIwMDAwOTQwRUI2Cis6MTBBRUYwMDAwMDAwMDAzQzA4NDA4MDkyMDAwMDlGMEUwMDAwMDA4MDhGCis6MTBBRjAwMDAwMjAwMDA5MDAwMDA5ODBFODAwMTAwODBGMjgxMkZCNkIwCis6MTBBRjEwMDAwMDAwOTgwRTgwMDAwMDgwRTI4MDJGQjYwMDAwOTgwRTlFCis6MTBBRjIwMDA4MDAxMDA4MDMyODA4N0I2MDAwMDAwMDAwMDAwMDBGODM5Cis6MTBBRjMwMDBFMjgwMkYzNDAwMDA3MzBFMDQwMTAwODAwMjgwODFCQzg3Cis6MTBBRjQwMDAwMDAwOUQwRTgwMDEwMDgwQTI4MDJGQjYwMDAwOUQwRUEzCis6MTBBRjUwMDAxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGOEZDCis6MTBBRjYwMDA3MzBBMDNGOTAwMDAwMDAwMDAwMDAwRDgwMjQwODQzMjk4Cis6MTBBRjcwMDAwMDAwRjAwRDAwNjAwMDZDMDgwMDZFRjIwMDAwNzQwRTFFCis6MTBBRjgwMDA0RDAwMDAwMDY3RTA4MzlFMDAwMEEzMEU4MDAxMDA4MDVBCis6MTBBRjkwMDBFMjgwMkZCNjAwMDBCQTBFODAwMTAwODBBMjgwMkZCNjlBCis6MTBBRkEwMDAxODAwMDAwMENBMDAwMEY4NzMwQTAzMzlCQTBFMzYwMDEwCis6MTBBRkIwMDAwMDAwMDBDMDAyMDAzNjkyMDAwMDAwMDAwMDAwMDBBNDYzCis6MTBBRkMwMDBBODYwOEEzQzAwMDBBNjBFMkZBODAxMjA5OTIyNkVCQTI0Cis6MTBBRkQwMDAwMDAwQTMwRDAwMDAwMDgwMDIwMDAwRjAwMDAwMDAwMDRGCis6MTBBRkUwMDAwMEE4MDFFMDA2MDA5MjMyMDAwMDAwMDAwMDUwMDFFOEQ1Cis6MTBBRkYwMDAwNjAwMDAzMjAwMDBBQTBFMjMyMTAxRTAwNjAwMDBCMjg0Cis6MTBCMDAwMDAzRTAwQTkwRTEyMDAwMDJDODJDRDJFQjIwMDAwMzYxMDk4Cis6MTBCMDEwMDAwNDMwMDBFMDA2ODA4MkIyMDAwMEIyMEUwNDIxMDBFMDlECis6MTBCMDIwMDAwNjgwODFCMjAwMDBCMDBFODAwMTAwODBBMjgwMkZCNkExCis6MTBCMDMwMDAwMDAwQjAwRTEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDU1Cis6MTBCMDQwMDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEOEI3Cis6MTBCMDUwMDAwMjQwODQzMjAwMDBGMDBEMDA2MDAwNkMwODAwNkVGMkM3Cis6MTBCMDYwMDAwMDAwMDAwMDAwMjAwMEUwMDY4MDgxMzIwMDAwMzYxMDYxCis6MTBCMDcwMDAwNDEwMDBFMDA2QzA4NkIyMDAwMDAwMDAyQTE5MDBFMEJCCis6MTBCMDgwMDAwNkMwODQ3MjAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNTg2Cis6MTBCMDkwMDAwMDAwMDAwMDEyMDEwMDAwMDlDMDIxNzIxODAwMzYwMEYzCis6MTBCMEEwMDAwMDAwMDBGODczMEEwMzk5MDAwMDAwMDAwMDAwMDAzQzUzCis6MTBCMEIwMDBEOEUwODMzQzAwMDBCODBFMTIwMDAwNTBGMkMxMzhCNDUyCis6MTBCMEMwMDAwMDAwMDAwMDAwMDAwMEY4QTI4MDJGMzQwMDAwMDAwMDAzCis6MTBCMEQwMDAwMDAwMDA4ODEyMDAyQzNBMDAwMEZGRkYwMDAwMDA4MEYyCis6MTBCMEUwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwMDAwOTAwMDAzMjkzCis6MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDc4MDkwMDAwMzIwMDAwMDAwMDlECis6MTBCMTAwMDAwMDAwMDBBODAyMDAwMDMyRUUwNUMyMEUwNDAxMDA4MDFCCis6MTBCMTEwMDA4MjBERjZCQzAwMDYwMDAwMDAwMDAwMDgwOTAwMzYzMjZGCis6MTBCMTIwMDAwMDAwQzQwRTAwMDAwMDA0MDlDMDA5OTIwMDI4MDAwMEJECis6MTBCMTMwMDAwMDAwMDAwODA5MDAzNjMyMDAwMDAwMDAwMDAwMDAwNDkyCis6MTBCMTQwMDAwOTgwMDkzMjFFMDAwMDAwMDAwMDYwQzA4N0NEMDAzNzcyCis6MTBCMTUwMDAwMDAwMDAwMDAwMDg2MEMwMDc4MDk3MzIwMDMwMDAwMDQ3Cis6MTBCMTYwMDAwMDAwMDA3ODg5OEQyQTNBMDAwMDM2MTAxMjAwMDA1QzM5Cis6MTBCMTcwMDA1MjgxOTdCNDAwMDAwMDAwMDAwMDAwMDAyOTI0OTAzQTlBCis6MTBCMTgwMDAwODAwMDAwMDAwMDAwMDc4ODkwRDkwMzYwMDAwMDAwMEUzCis6MTBCMTkwMDAwMDAwMDAwNDE5NDA5MDNDMDAwMDAwMDAwMDAwMDBBOERFCis6MTBCMUEwMDA1MjgyMkEzQTAwMDhDNDBFMDIwMTAwODA4MjhEMkFCQzE1Cis6MTBCMUIwMDAwMDAwRDUwRTA2MDAwMDgwMDI0MDkwQkMwMDAwMzYxMDUyCis6MTBCMUMwMDAxMjAwMDBBODAyMDAyMEIyMUUwMDAwMDAwMDAwMDBDMDEzCis6MTBCMUQwMDA4N0NEMDAzNzAwMDAwMDAwMDAwODAwQzAwNzgwOTczMkNDCis6MTBCMUUwMDAwMDAwMzYxMDEyMDAwMDVDNTI4MTJBQjQwMDAwMDAwMEZBCis6MTBCMUYwMDAwMDAwMDAwMDI5MjQ5MDNBMDgwMDAwMDAwMDAwMDA3OEI4Cis6MTBCMjAwMDA4OTBEOTAzNjAwMDBDRTBFMDQwMTAwMDQxOTQwOTBCQzU4Cis6MTBCMjEwMDAwNTAwMDAwMDAwMDAwMDc4ODkwRDkwMzYwMDAwMzYxMDBGCis6MTBCMjIwMDAxMjAwMDA2ODAyODA5N0IyMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBCMjMwMDAyOTI0OTAzQTAwMDAwMDAwMDAwMDAwNzg1OTAwOTAzNjYwCis6MTBCMjQwMDAwMDAwRDYwRTk1MDEwMDgwMjIyNDkwQkEwMDAwMDAwMDc0Cis6MTBCMjUwMDAwMDAxMDA4MDAyMDAwMDUwMDAwMEZGRkYwMDAwMDA4MDlECis6MTBCMjYwMDAwMjAwMDA5MDAwMDAwMDAwMDQwMTAwNzhEOTAxMzA3NjRGCis6MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDI4MDlDMDI5MzIwMDAwMDAwMDgyCis6MTBCMjgwMDAwMDAwMDA5Q0IyNDUyODMwMDAwMEU4MEU4NjAxMDAwODRFCis6MTBCMjkwMDAwOTgwMkZCMjAwMDAwMDAwMDAwMDAwMkMwOTQwODEzMjFDCis6MTBCMkEwMDAwMDAwMDAwMDAwMDAwMEY4MDIwMDAwMzIwMDAwMDAwMDcyCis6MTBCMkIwMDAwMDAwMDBGNDAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGODU2Cis6MTBCMkMwMDA3MzhBMDIzOTAwMDAwMDAwMDAwMDAwOUMwMjgwOTIzMjY0Cis6MTBCMkQwMDAwMDAwRTcwRTA0MDcwMTgwMDJDMDZFQkMwMDAwRUQwRTA2Cis6MTBCMkUwMDBDMzA3MDFFQ0I2RTQ2RTlBMDAwMEVEMEUwMDA2MDFFQzE3Cis6MTBCMkYwMDBCNkU0NkU5QTAwMDAwMDAwMDAwMDAwMkMwOTA1ODAzMEMyCis6MTBCMzAwMDAwMDAwMDAwMDAwMDAwMEY4MDIwMDAwMzIwMDAwMDAwMDExCis6MTBCMzEwMDAwMDAwMDBGNDAyMDAwMDMyMTgwMDAwMDAwMDAwMDBGOEY1Cis6MTBCMzIwMDA3MzhBMDIzOTAwMDAzRjBGMDAwMDAwOUMwMjgwOTJEMjE1Cis6MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDMwMDMwMDM4MzIwMDAwMDAwMDcwCis6MTBCMzQwMDAwNDAxMDA3OEQ5MDEzMDc2MDAwMERGMEUwMDAwMDA5Qzc3Cis6MTBCMzUwMDBCMjQ1Mjg5MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDJFCis6MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDg4MDJDMEU4MzIwMjAwRjIwRTc3Cis6MTBCMzcwMDBCMDAwMDBBMEYyMEIwMEI5MDAwMDAwMDAwMDAwMDAwQ0JCCis6MTBCMzgwMDBBQkU0QjAzMjAwMDBGNzBFODAwMTAwODBGMjRCRDBCNjgzCis6MTBCMzkwMDAwMDAwMDAwMEEwMDAwMDI4MDkwMDAwMzIwMDAwMDAwMEFBCis6MTBCM0EwMDAwMDAxMDA4MDAyMDAwMDUwMDAwMEY5MEUwNDAxMDA4MDNFCis6MTBCM0IwMDAxMjNFRjhCQTAwMDAwNDBGQTAwMDAwMDRGRDRCRDA5NDI4Cis6MTBCM0MwMDAwMDAwMDAwRjgwMDEwMDgwRDI4MTkyQjYwMDAwMDAwRkMzCis6MTBCM0QwMDA4MDAxMDA4MDIyODFGQ0I2MDAwMDAwMDBBMDAwMDAwNDczCis6MTBCM0UwMDBGRDRCRDAzNDAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMjZCCis6MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDgwRjEwMTAwMzQwMDAwMDAwMEE3Cis6MTBCNDAwMDAwMDAwMDA5NDAxQzAyRjMyMDAwMDA0MEYwMDAwMDA5MEUzCis6MTBCNDEwMDBGMTAxMDA5NDAwMDAwMDAwQTAwMDAwODQwMUMwMkYzMjYwCis6MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDgwRjEwMUY4MzQwMDAwMDAwMDdFCis6MTBCNDMwMDAwMDAwMDA5MDAxNDBGODMyMDAwMDAwMDAwMDAxMDAyOEU4Cis6MTBCNDQwMDAwOTAwMDA1MjAwMDAwODBGMDQwMTAwMjgwOTM0QjBCQUI2Cis6MTBCNDUwMDAwMDAwMDUwRkIwMDAwMDgwMDIwMDAwQjAwMDAwMDAwMEY2Cis6MTBCNDYwMDBBMDAwMDAwNEZENEJEMDM1MDAwMDAwMDAwMDAxMDAyOEMyCis6MTBCNDcwMDAwOTAwMDA1MjAwMDAwODBGQjAwMDAwQTgyMkMwMkZCNzNBCis6MTBCNDgwMDAwMDAwMDYwRjA0MDA4NEMwMzdBQ0IwQjIwMDAwMDAwMDFBCis6MTBCNDkwMDBBMDAwMDAwQzBCMDAwMDMyRkZGRjAwMDAwMDAwMDA3ODRECis6MTBCNEEwMDBBOTREQjAzMDAwMDAwRjBGODAwMDAwODAwMjQwQjBCNjAwCis6MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDc4Njk4MTk3MzUwMDAwMDAwMDVFCis6MTBCNEMwMDAwMDAwODQwODBCMDA3QzMyMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBCNEQwMDBFNzI1MDEzMjAwNDIwMDAwMDAwODAwMDA4NzhEMkEzQTZCCis6MTBCNEUwMDAwMDAwMDAwMDAwMTAwMDAwMDcwMEIwMzIwMDAwMDAwMDYzCis6MTBCNEYwMDAwMDE4MDAwMDA3MDBEMDMyMDAwMDAwMDAxMjAxMDA0OEQwCis6MTBCNTAwMDBGMkMxMzg1NDAwMDAxMzBGMDAwMDAwODAwMjAwMDA5MEM4Cis6MTBCNTEwMDAwMDAwMTUwRkIwMDAwMEEwMDIwMDAwQjIwMDAwMDAwMDAzCis6MTBCNTIwMDAwMDAwMDAwQ0FCRTRCMDMyMDAwMDFBMEY4MDAxMDA4MDc0Cis6MTBCNTMwMDAwMjQwRDBCNjAwMDAwMDAwQTAwMDAwMjgwOTAwMDAzMjQwCis6MTBCNTQwMDAwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwMUMwRkZECis6MTBCNTUwMDAwNDAxMDA4MDEyM0VGOEJBMDAwMDJEMEZBMDAwMDAwNDg0Cis6MTBCNTYwMDAwRDQwRDA5NDAwMDAyNjBGODAwMTAwODBEMjgxOTJCNjU5Cis6MTBCNTcwMDAwMDAwMjYwRjgwMDEwMDgwMjI4MUZDQjYwMDAwMDAwMDQwCis6MTBCNTgwMDBBMDAwMDAwNDBENDBEMDM0MDAwMDAwMDAwMDAwMDA3ODRFCis6MTBCNTkwMDAwOUMwMkYzMjAwMDAwMDAwMDAwMDAwRkMwMjAwMDAzMjUxCis6MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDg0MDFDMDJGMzIwMDAwMDAwMEY1Cis6MTBCNUIwMDAwMDAwMDA4MEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA5NDUxCis6MTBCNUMwMDAwMUMwMkYzMjAwMDAwMDAwMDAwMDAwOTBGMTAxMDAzNEEzCis6MTBCNUQwMDAwMDAwMkQwRjAwMDAwMEZDMDI4MDk3OTIwMDAwMDAwMDg4Cis6MTBCNUUwMDBBMDAwMDA3ODA5QzAyRjMyMDAwMDAwMDAwMDAwMDBGQzFECis6MTBCNUYwMDAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMjcxCis6MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDgwRjEwMUY4MzQwMDAwMDAwMDlDCis6MTBCNjEwMDAwMDAwMDA5MDAxNDBGODMyMDAwMDAwMDAwMDAwMDBGQzMzCis6MTBCNjIwMDAwMjgwOTczMjAwMDAwMDAwMDAwMTAwMjgwOTAwMDA1MjRCCis6MTBCNjMwMDAwMDAwMzEwRjA0MDEwMDI4MDkzNEIwQkEwMDAwMkUwRkI5Cis6MTBCNjQwMDBCMDAwMDA4MDAyMDAwMEIwMDAwMDAwMDBBMDAwMDAwNDc0Cis6MTBCNjUwMDAwRDQwRDAzNTAwMDAwMDAwMDAwMTAwMjgwOTAwMDA1MjE0Cis6MTBCNjYwMDAwMDAwMzEwRkIwMDAwMEE4MDIwMDAwQjIwMDAwMkYwRjUwCis6MTBCNjcwMDAwNDAwODRDMDM3QUNCMEIyMDAwMDAwMDBBMDAwMDAwQzkxCis6MTBCNjgwMDAwQjAwMDAzMkZGRkYwMDAwMDAwMDAwNzhBOTREQjAzMDMxCis6MTBCNjkwMDAwMDAwMzgwRjgwMDAwMDgwMDI0MEIwQjYwMDAwMDAwMEJCCis6MTBCNkEwMDAwMDAwMDA3ODY5ODE5NzM1MDAwMDAwMDAwMDAwODQwOEUwCis6MTBCNkIwMDAwQjAwN0MzMjAwMDAwMDAwMDAwMDAwMDBFNzI1MDEzMjkyCis6MTBCNkMwMDAwMDQyMDAwMDAwMDgwMDAwODc4RDJBM0EwMDAwMDAwMEI4Cis6MTBCNkQwMDAwMDEwMDAwMDA3MDBCMDMyMDAwMDAwMDAwMDE4MDAwMDU5Cis6MTBCNkUwMDAwNzAwRDAzMjAwMDAwMDAwMTIwMTAwNDhGMkMxMzg1NEI3Cis6MTBCNkYwMDAwMDAwM0MwRjAwMDAwMDgwMDIwMDAwOTAwMDAwRkZGRkVGCis6MTBCNzAwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDQxMEYxQzQwMDI4MEY5Cis6MTBCNzEwMDAwNkMwOTJCMjQ0MDAwMDAwMDAwMTAwRjhBMjhEMkY1MjMyCis6MTBCNzIwMDAwMDAwMzYxMDEyMDAwMDY4MDJDNTkyQjAwMDAwMDAwMDUwCis6MTBCNzMwMDAwMDAxMDA3MDFGMDBGNzVBMDAwMEZGRkYwMDAwMDA4MEFBCis6MTBCNzQwMDAwMjAwMDA5MDAwMDAwMDAwRDUwODAwMDAwNzgwOTIzMjNGCis6MTBCNzUwMDAwMDAwMDAwMDAwMzAwMDAwMDdDMDJDMzIwMDQwMDA4MEQ0Cis6MTBCNzYwMDAwMDM4MDAwMDA3MDAzNzMyMDAwMDAwMDBDQTQxMDFFMDQ1Cis6MTBCNzcwMDAwNjgwOTIzMjAwMDA0ODBGMTIwMDAwNDgwMkMwODBCMkRBCis6MTBCNzgwMDAwMDYwMDAwMDAwMDEwMDA4MDg4MDM2NzIwMDAwRkZGRjIyCis6MTBCNzkwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDM4MDAwMDVGCis6MTBCN0EwMDAwNzgwOTIzMjAwMDAwMDAwMDAzMDAwMDAwN0MwMkMzMkY5Cis6MTBCN0IwMDAwMDAwMDAwMENBM0QwMDBDMDc4MDgzMzIwMDAwMDAwMDNBCis6MTBCN0MwMDAxMjAxMDA0ODAyQzA4MDcyMDAwMDRFMEYwMDAwMDA4MDhECis6MTBCN0QwMDAwMjAwMDA5MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MEM3Cis6MTBCN0UwMDAwMDAwMDAwMDA0NTcwMTgwMDJDMDZFN0MwMDAwMDAwMEQxCis6MTBCN0YwMDAwMDU3MDFFQzA2ODA5MjcyMDAwMEZGRkYwMDAwMDA4MEZECis6MTBCODAwMDAwMjAwMDA5MDAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMjVGCis6MTBCODEwMDAwMDAwNTcwRjlEMTEwMjBDMDkwMDZFQjIwMDAwNTgwRjc2Cis6MTBCODIwMDAwMEYwMDExQzA5MDA2RTkyMDAwMDAwMDAwMEI4MDExQzJECis6MTBCODMwMDAwOTAwNkUzMjAwMDA1QTBGMkNDRDAxMTgwOTgwNkVCMjNCCis6MTBCODQwMDAwMDAwMDAwMDAwMDAwMDBDQzlDMTkwMzQwMDAwNUQwRjMyCis6MTBCODUwMDAzQjI5MDIwNDA5ODA2RUIyMDAwMDAwMDAwMEQ2MDFFQzEyCis6MTBCODYwMDA1NkMwNkUzNDAwMDAwMDAwMDAwMDAwMENCOUMxOTAzNEQ2Cis6MTBCODcwMDAwMDAwNkMwRjAwQTgwMTA4MDkwMDZFRjIwMDAwNjEwRkMzCis6MTBCODgwMDA5RDAxMDA4MDE3RTA5MEJBMDAwMDAwMDAwMDMwMDA4MEE5Cis6MTBCODkwMDAwN0MwOTEzMjAwMDA2NDBGMDAzODAwODAwNzAwRUU5MjZDCis6MTBCOEEwMDAwMDAwNjQwRjA0MDEwMDgwMDJDMDkxQkMwMDAwMDAwMDkxCis6MTBCOEIwMDAwMEI4MDFFMDA2MDBFRTMyMDAwMDAwMDAwMDcwMDFFMDc4Cis6MTBCOEMwMDAwNjAwODYzMjAwMDA2NjBGMzkwODAwODAwN0MwODVCMjg2Cis6MTBCOEQwMDAwMDAwMDAwMEQ5QzkwMUU4MDY4MDkxMzIwMDAwMDAwMDk0Cis6MTBCOEUwMDBDODExMDA4MDA3NDA5MDMyMDAwMDY5MEYzQjIxMDA4MEEyCis6MTBCOEYwMDAwNzAwODZCMjAwMDAwMDAwREIwMDAwNjAxODAwODYzQUY2Cis6MTBCOTAwMDAwMDAwMDAwMDU4NzgwMUUwMTYyMDg2M0EwMDAwMDAwMDkwCis6MTBCOTEwMDAwMDI5MDA4MDA3MDA4NTcyMDAwMEZGRkYwMDAwMDA4MDAyCis6MTBCOTIwMDAwMjAwMDA5MDAwMDA3MDBGMDIwQzAyODBBMjlCOTBCQ0VECis6MTBCOTMwMDAwMDAwMDAwMDAwMDAwMjc4MjkwMDZFMzYwMDAwNzAwRjQxCis6MTBCOTQwMDAwMjAwMDA4MEUyQTU5MEJDMDAwMDAwMDAwMDAwMDAwODlBCis6MTBCOTUwMDAwOTAwMDAzMjAwMDA3MjBGOUY4OTAxNzg0OTIxNkVCQ0Y2Cis6MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDc4MDkwMDAwMzIwMDAwMDAwMDI0Cis6MTBCOTcwMDAwMDAwMDAwOEU5QTU5MDNGMDAwMDc4MEYwNDIwMDIwOEFECis6MTBCOTgwMDA4OTlCOTBCRTAwMDAwMDAwMDAwQTAyNThCODlCOTAzNkM4Cis6MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDc4NDlBMTkwM0EwMDAwMDAwMDdCCis6MTBCOUEwMDA5Rjg4MDE4MDgyOUI5NzdDMDAwMDAwMDAwMDg5MDFFMDU1Cis6MTBCOUIwMDAwNjgwOTc3MjAwMDAwMDAwMDAwQjAyNThCODlCOTA3NjNBCis6MTBCOUMwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwMDAwN0YwRkQ5Cis6MTBCOUQwMDA4MDAxMDA4MEEyODAyRkI2MDAwMDdFMEYxMjAxMDA3ODQ3Cis6MTBCOUUwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOUZDCis6MTBCOUYwMDAwMDAwN0YwRkNBMDAwMEQ4MDI0MDg0OTIwMDAwMDAwMEJGCis6MTBCQTAwMDAwMDAwMDBGOEEyODAyRjM1MDAwMDAwMDAwMDQwMDA2QzBDCis6MTBCQTEwMDA4ODFDODMzQTAwMDAwMDAwMDA0ODAwNEMwODAwNzIzMjg1Cis6MTBCQTIwMDAwMDAwMzYxMDA4NTAwMDE4QzgyMDcyQkMwMDAwMDAwMDRBCis6MTBCQTMwMDAwNjAwMDA4MDYyQTA4MjdDMDAwMDM2MTAwMjAwMDAyMDE4Cis6MTBCQTQwMDA4ODAxODJCQTAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjI1Cis6MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDA2MzIwNzAwMDAwMEEwCis6MTBCQTYwMDAwMDA4MDAwMDc3NEEwOTM5MDAwMDAwMDAwMDEwMDAwMEJCCis6MTBCQTcwMDAwNzAwODIzMjAwMDAwMDAwQ0ExOTAwMDAwNzQwODIzMjJECis6MTBCQTgwMDAwMDAwODkwRjEyMDAwMDQwRjJDMTM4QjQwMDAwMDAwMDJECis6MTBCQTkwMDAwMDAxMDBEODAyNDA4NDcyMDAwMEZGRkYwMDAwMDA4MDE3Cis6MTBCQUEwMDAwMjAwMDA5MDAwMDA5MzBGODAwMTAwODBGMkMxODVCNjczCis6MTBCQUIwMDAwMDAwOTAwRjFGNDAwMjg0RTYwMTAwQjQwMDAwOTMwRkM1Cis6MTBCQUMwMDAxRDAxMDBGODIyODEyRkI0MDAwMDkzMEYwMDAwMDBGODQwCis6MTBCQUQwMDA2MjgxMkY5NTAwMDA5MjBGMUQwMTAwODAwMjAwMDBCMENFCis6MTBCQUUwMDAwMDAwMDAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDE3Cis6MTBCQUYwMDAwMDQwMDI4MDAyNDA2ODMyMDAwMDM2MTAxMjAwMDA2OEU4Cis6MTBCQjAwMDAwMkM1ODVCMDAwMDAwMDAwMUQwMDAwODAwMjAwMDA3MDJBCis6MTBCQjEwMDAwMTAwMDAwMDA0MDEwMDgwQTI4RDJGNzAyQTAwOTYwRjAyCis6MTBCQjIwMDAxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDAwMDAxMDBGOEFGCis6MTBCQjMwMDAwMjgxMkY3NDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MENGCis6MTBCQjQwMDA4MEE4MDAwMDA0MDAwMDgwODI4RDJGNzAwMDAwOUYwRkVECis6MTBCQjUwMDA4MDAxMDA4MEQyODAyRkI2MDAwMDlGMEYwNEIwMDA4MENCCis6MTBCQjYwMDAwMjAwNkVCQzAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDVCCis6MTBCQjcwMDAzRDAwQTIwRjEyMDEwMDJDODJDRDJFQjIwMDAwOUQwRkJECis6MTBCQjgwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEEyMEY4MDAxMDA4MEYxCis6MTBCQjkwMDBGMjgwMkZCNjNDMDBBNTBGMTIwMTAwMkM4MkNEMkVCMkYwCis6MTBCQkEwMDAwMDAwQTAwRjAwMDAwMDgwMDIwMDAwOTAwMDAwQTUwRjIwCis6MTBCQkIwMDA4MDAxMDA4MEIyODAyRkI2MzUwMEEzMEYxMjAwMDAyQzQ4Cis6MTBCQkMwMDA4MkNEMkVCMjAwMDAwMDAwMDAwMDAwRjg0MjgxMkYzNDI4Cis6MTBCQkQwMDA4MDAwMDAwMDA0MDAwMDgwODI4RDJGNzAwMjAwMDAwMEIxCis6MTBCQkUwMDAwNDAxMDA4MEEyOEQyRjcwM0IwMEE3MEYxMjAwMDAyQ0QzCis6MTBCQkYwMDA4MkNEMkVCMjAwMDAwMDAwMDAwMTAwRjgxMjgxMkY3NEU3Cis6MTBCQzAwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwODAwMDAwMDFDCis6MTBCQzEwMDAwMDE4MDFFODc2MjA4MTM5RUVGRjAwMDAwMDAxMDBGOEVECis6MTBCQzIwMDA4MjhEMkY3MTAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDU1Cis6MTBCQzMwMDAwMDAwQjEwRjAwMDAwMTM4MDhDMDZFRjIwMDAwMDAwMEUzCis6MTBCQzQwMDAxMjAxMDA0ODAyQzA4MDcyMDAwMEFFMEYwMDAwMDA4MEE4Cis6MTBCQzUwMDAwMjAwMDA5MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDQyCis6MTBCQzYwMDAwMDAwQjMwRjA0MzgwMTc4MDkwMDZFQjIwMDAwMDAwMDM0Cis6MTBCQzcwMDAwMDM4MDFFMDA2MDAwMDMyMDAwMDAwMDBDQTExMDAwMDk4Cis6MTBCQzgwMDAwNzgwODIzMjAwMDBCNjBGMkUxOTAwMDAwNzgwOTdCMjlECis6MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDI4RTk4MTkyMzQwMDAwQkIwRjgyCis6MTBCQ0EwMDAyNzMxMDAwMDA3QzAyQ0IyMDAwMDAwMDBENTA4MDAwMEJBCis6MTBCQ0IwMDAwNzAwODczMjAwMDAwMDAwQzcwMDAwMjhFOTgwOTIzNEE2Cis6MTBCQ0MwMDAwMDAwMDAwMDAwNDAwMUUwMDYwMDg3MzIwMDAwMDAwMDk0Cis6MTBCQ0QwMDAwMDAwMDAwOEQ4ODE4MDM0MTAwMDAwMDAwMDM5MDAwMDA2Cis6MTBCQ0UwMDBFN0EwOTI3OTAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MEIyCis6MTBCQ0YwMDAwMDAwQkQwRjEyMDAwMDQ0MTJFNDM4QjIxODAwMzYwMEY0Cis6MTBCRDAwMDAwMDAwMDBGODczMEEwM0Y5MDAwMEMyMEYwNDAxMDA4MDZDCis6MTBCRDEwMDAwMjgwMkRCQzAwMDBCRTBGNjcwMDAwRjhBMjgwMkZCNTg2Cis6MTBCRDIwMDAwMDAwMzYxMDEyMDAwMEU4MDJDMDIxQjIwMDAwMDAwMDNFCis6MTBCRDMwMDAwMDAxMDBEODAyNDAwMDcyMDAwMEZGRkYwMDAwMDA4MEY4Cis6MTBCRDQwMDAwMjAwMDA5MDAwMDBDNzBGMDQzMDAwODA4MjlCODFCQzdECis6MTBCRDUwMDAwMDAwMDAwMENBMDEwMEY4MDI4MDJGMzUwMEEwQzYwRkM1Cis6MTBCRDYwMDAxMjAwMDA0MEEyOEQzOUIyMDBDMENCMEYwNDM4MDA3ODE5Cis6MTBCRDcwMDA4OThENkVCMDEwMDBDQjBGOUYwMTAwRjhFMkE1MkZCOTlFCis6MTBCRDgwMDAwMDAwMDAwMDAwNTgwMUVDMDZDMEVFMzIwMDAwMDAwMDg4Cis6MTBCRDkwMDAwMDAwMDA4MDAyMDAwMDMwMDAwMDAwMDAwNDI4MDAxOEFECis6MTBCREEwMDAwOTAwNkU3MjAwMDBCQTBEMDAwMDAwODAwMjAwMDBGMDcxCis6MTBCREIwMDAwMDAwQTMwRDAwQTgwMTIwMDkwMDZFOTIwMDAwRkZGRjAzCis6MTBCREMwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEQ0MEYwNEIwMDA4MDRBCis6MTBCREQwMDA4MjlCODFCQzAwMDAwMDAwMDBCODAwRTg4NjgwNkUzNEMxCis6MTBCREUwMDAwMDAwMDAwMENBMDEwMEY4NDI4MDJGMzUwOEEwMDAwMEMyCis6MTBCREYwMDAxMjAxMDA0MEEyQ0QzOTcyMDAwMEQyMEYwMDAwMDA4MDc1Cis6MTBCRTAwMDAwMjAwMDA5MDAwMDAwMDAwMDBCODAwRTg4NjgwNkUzNDU4Cis6MTBCRTEwMDAwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwRkZGRjMxCis6MTBCRTIwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMERBMEYzM0NEMDFCQzVBCis6MTBCRTMwMDAwODgwNkVCMjAwMDAxNDEwMDAwMDAwMjgyOTIyRUVEQ0Y5Cis6MTBCRTQwMDAwMDAwREYwRjAwMDAwMDgwMDIwMDAwOTAwMDAwREYwRjA0Cis6MTBCRTUwMDAwNEI4MDEyODA5MDA2RUIyMDAwMERGMEY5RjcxMDE4MDU1Cis6MTBCRTYwMDBDMjIxNkVCQzAwMDAzNjEwOUYwMDAwMjhBOTI0RUVCQzQxCis6MTBCRTcwMDAwMDAwMTQxMDAwMDAwMDI4MTk4MDkyREYwMDAwMDAwMDZDCis6MTBCRTgwMDAwMDAwMDA4MDAyMDAwMDMwMDAwMEYyMEYwMjgxMDE4MEZCCis6MTBCRTkwMDA4MjlCOTBCQ0VFMDVFQTBGMDYwQzAyODA4MjhENkVCQzgwCis6MTBCRUEwMDAwMDkwNEMwMDAwMDAwMDg0MDIwMDM3MzIwMDAwRTQwRkQ0Cis6MTBCRUIwMDBCODAxMDA4MDAyMDAwMEIwMDAwMEUyMEYwMDAwMDA4MDI2Cis6MTBCRUMwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwQzQwMzgwOTAzMkQ3Cis6MTBCRUQwMDAwMDAwMDAwMDAwQjAwMUUwOTYyMTZFM0MwMDAwMDAwMDcwCis6MTBCRUUwMDA2MTk4MDFFMDA2MDA4NzMyMDAwMDAwMDAwMEQ0MDFFQ0Y4Cis6MTBCRUYwMDAwNjAwMDAzMjAwMDAwMDAwQTgwMDAwNzg0OTQwM0MzN0VFCis6MTBCRjAwMDAwMDAwRjcwRjAwMDAwMDA4RTlBNTkwOUE2MDg5MjAwMDYyCis6MTBCRjEwMDAwMDAwMDA4NDAyMDAzNzMyMDAwMEVEMEZCODAxMDA4MEZECis6MTBCRjIwMDAwMjAwMDBCMDAwMDBFQjBGMDAwMDAwODAwMjAwMDA5MDUzCis6MTBCRjMwMDAwMDAwMDAwMDAwMDAwMEM0MDM4MDkwMzIwMDAwMDAwMEY4Cis6MTBCRjQwMDAwMEIwMDFFMDk2MjE2RTNDMDAwMDAwMDA2MTk4MDFFMDI1Cis6MTBCRjUwMDAwNjAwODczMjAwMDAwMDAwMDBENDAxRUMwNjAwMDAzMjI5Cis6MTBCRjYwMDAwMDAwRjcwRkE4MDAwMDA4MTk4RjkwOUEwMDAwMDAwMDQ5Cis6MTBCRjcwMDAwMDAwMDA3ODk5QTE4OTNFMDAwMDAwMDAwMDAwMDAwODQwCis6MTBCRjgwMDBFOUE1OTAzQTAwMDAwMDAwMDBCMDAxRTA5NjIxNkUzQzY3Cis6MTBCRjkwMDAwMDAwMDAwMDYxOTgwMUUwMDYwMDg3MzIwMDAwMDAwMDA4Cis6MTBCRkEwMDAwMEQ0MDFFQzA2MDAwMDMyMDAwMEZBMEYwNjAwMDA4MDA5Cis6MTBCRkIwMDA3MkEyOTBCQzAwQzBGRjNGMDA4MDAxRTAwNjAwMzczMjUzCis6MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDA4MDlDMDg5MzIwMDAwRkYwRkQ3Cis6MTBCRkQwMDAwNDc5MDE4MDgyMUI4N0JDMDAwMEZEMEYwNEIwMDA4MDQzCis6MTBCRkUwMDAwMjAwNkVCQzAwMDAwMTEwRDk5MDAxRTAwNjgwOTA5MjIyCis6MTBCRkYwMDAwMDAwMDQxMDgwMDAwMDgwNTI4MTJGQjYwMDAwMDQxMDYxCis6MTBDMDAwMDBENTQxMDFFMDA2MDA4NzkyMDAwMDAxMTAzQzkwMDFFMDVDCis6MTBDMDEwMDAwNjgwOTBCMjAwMDAwMDAwMDBDODAxRTgwNkMwOEIzMjI0Cis6MTBDMDIwMDAwMDAwMDAwMDk1MDEwMDgwMDI4MDJGNzIwMDAwMDUxMEMyCis6MTBDMDMwMDA5RjQxMDE4MDgyMUI4N0JDMDAwMDAwMDAwMDAxMDA4MDNFCis6MTBDMDQwMDAwMjAwMDA3MDAwMDAwMDAwRDk5MDAxRTAwNjgwOTAzMkVDCis6MTBDMDUwMDAwMDAwMDAwMDAwMDEwMEY4NzI4MDJGNzQwMDAwRkZGRjU0Cis6MTBDMDYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDBEMTA5RkQ4MDE4MEE5Cis6MTBDMDcwMDAyMjIxNkVCQzAwMDAwMDAwMEIwMTAwODAwMjAwMDA3MDU1Cis6MTBDMDgwMDAwMDAwMEQxMDlGRTAwMTgwQzIyMTZFQkMwMDAwMDAwMDg2Cis6MTBDMDkwMDAwQjAxMDA4MDAyMDAwMDcwMDAwMDBEMTA5RkIwMDE4MEI1Cis6MTBDMEEwMDBEMjIxNkVCQzAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDgwCis6MTBDMEIwMDAwMDAwMEYxMDA2NjgwMTgwODI1Qjg3QkMwMDAwMDAwMDUyCis6MTBDMEMwMDAwMDY4MDFFMDA2NDA4NzMyMDAwMDExMTAzN0IwMDFFMDNGCis6MTBDMEQwMDAwNjQwODdCMjAwMDAwMDAwMDAwMDAwRjhEMjgwMkYzNDM0Cis6MTBDMEUwMDAwMDAwMDAwMDAwRDgwMUUwMDY4MDg0MzIwMDAwMDAwMDVCCis6MTBDMEYwMDAwMEUxMDFFMDA2MDA4NzcyMDAwMEZGRkYwMDAwMDA4MDAxCis6MTBDMTAwMDAwMjAwMDA5MDAwMDAyMDEwMDRDMTAxODQwMjAwNkVCMjAxCis6MTBDMTEwMDAwNTAwMDAwMDAwQzAwMUU4ODY4RDkyMzcwMzAwMDAwMDkyCis6MTBDMTIwMDAwMEM0MDFFODg2OEQ5MjM3MDAwMDAwMDAwMDAwMDA4MDA2Cis6MTBDMTMwMDAwMjAwMDAzMDAzMDAwMDAwMDBDMDAxMkM4OThENkUzNjIzCis6MTBDMTQwMDAwMDAwMDAwMDAwQzQwMTJDQTlEQjkyM0EwMDAwMDAwMEFFCis6MTBDMTUwMDAwMDAwMDAyQzI5QzA5MjM2MDAwMDAwMDAwMDAwMDAyQ0Q2Cis6MTBDMTYwMDAxOUZCOTIzRjAwMDAwMDAwMDAwMDAwMjgyOTgwOTIzQTRECis6MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDJDQTlFNDkyM0YwMDAwMDAwMDM1Cis6MTBDMTgwMDA2RkNDMDFFODI2RkI5MjNFMDAwMDAwMDAwMEI5MDFFMDAwCis6MTBDMTkwMDAwNjAwMDA1MjAwMDAwMDAwMDAwMDAwOTQwMjgwOTIzMjZECis6MTBDMUEwMDAwMDAwMDAwMDAwQzAwMUUwMDY0MDI4MzIxMDAwMDAwMDNFCis6MTBDMUIwMDA2RkNDMDFFODg2Q0QyQTM2MDAwMDAwMDAwMEI5MDFFMDBFCis6MTBDMUMwMDAwNjAwMDA1MjAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDA3Cis6MTBDMUQwMDAwMDAwMDAwMDAwOTAwMUJDMDgwMDZFMzIwMDAwMDAwMDZBCis6MTBDMUUwMDAwMEIwMDFCQzg4REI4QjNFMDAwMDAwMDAwMDk4MDFCQzYxCis6MTBDMUYwMDA4OERCOEIzQTAwMDAzMDEwOUYwMDAwQkM4OEUxOEJCQ0NDCis6MTBDMjAwMDAwMDAwMzAxMDA0MEMwMjQwQThEQjhCQkUwMDAwMDAwMEQwCis6MTBDMjEwMDAwMEIwMDAwNDg4MUI4NDNFMDAwMDJEMTAwNEIxMDA4MDkzCis6MTBDMjIwMDA4MjVCODBCQzAwMDAwMDAwMDAwMTAwRjhDMjgwMkY3NDE3Cis6MTBDMjMwMDAwMDAwMDAwMDA0MEMwMjgwQTI1QjgwN0MwMDAwMzAxMDMzCis6MTBDMjQwMDAwNDY4MDE3ODE5MDA2RUI2MDAwMDAwMDAwMjAwMDA4MDRBCis6MTBDMjUwMDBFMjY1ODA3QzAwMDAwMDAwMDAwMDAwODgxMjAwMkMzQTlCCis6MTBDMjYwMDAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAwODAwMDAwMEI2Cis6MTBDMjcwMDAwMDFDMDFFODc2MjA4MTM5RUVGRjAwMDAwMDAxMDBGODgzCis6MTBDMjgwMDA4MjhEMkY3MTAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MEVGCis6MTBDMjkwMDAwMDAwMzYxMDAwMDAwMEI0MEY0MEZCOTQwMDAwMDAwMEM2Cis6MTBDMkEwMDAwMDAwMDA4ODBGNDAyQjMyMDAwMDAwMDAwMDAwMDA5MENBCis6MTBDMkIwMDAwRjAwMjgzMjAwMDAwMDAwMDAwMDAwOTQwRjAwMjkzMjE3Cis6MTBDMkMwMDAxMDAwMDAwMDAwMDAwMEI4NUY0NjE4MzlGRjAwMDAwMEIxCis6MTBDMkQwMDAwMDAwMDA5QzBGMDAzNjMyMDAwMDAwMDAwMDAwMDA5Q0FGCis6MTBDMkUwMDA1RkNBRjkzNTAwMDAwMDAwMDAwMDAwNDQwM0MwRjkzMkM1Cis6MTBDMkYwMDAwMDAwMDAwMDAwMDAwMEU0MDMwMDAwMzI0MTAwMDAxMEQ0Cis6MTBDMzAwMDAwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDBFNEZECis6MTBDMzEwMDAwMzAwMDAzMjQwMDAwMDEwMDAwMDAwRTAwMzAwMzczMjRDCis6MTBDMzIwMDAwMDAwNDUxMDY3MDAwMDk4MEY4MDJBQjIwMDAwMDAwMDRFCis6MTBDMzMwMDAwMDAwMDBBODAyMDAwMDMyMDAwMDQzMTAxMkMxODZFMDk1Cis6MTBDMzQwMDAwN0MwMjFCMjAwMDAwMDAwMDBCODg2QzAwNjgwMkEzMjczCis6MTBDMzUwMDA0QzQyMDAwMDAwMDAwMEE4MDIwMDM2MzI0NzEwNTgxMTdECis6MTBDMzYwMDAwMDAwMDBCMDBGMDAzNjkyMDAwMDAwMDAwMDAwMDA5Q0FBCis6MTBDMzcwMDAwMjAwMDAzMjAwMDE0NDExMDAwMDAwQUMwRjAwMzZEMjcwCis6MTBDMzgwMDAwMDAwMDAwMDAwMDAwMEFDMEY4MDJBMzIwMDIwMDAwMEY2Cis6MTBDMzkwMDAwMDAwMDBBODAyMDAzNjMyMDAwMDAwMDAwMDAwMDA5Q0VGCis6MTBDM0EwMDAwRjAwN0UzMjAwMDAwMDAwMDAwMDAwQTAwRjAwN0UzMjZGCis6MTBDM0IwMDAwMDAwMDAwMDAwMDAwMEE0MEYwMDdFMzIwMDAwMDAwMDFBCis6MTBDM0MwMDAwMDAwMDBBODBGMDA3RTMyMDAwMDAwMDAwMDAwMDBBODVFCis6MTBDM0QwMDAwMkMwRkEzMjAwMDAwMDAwMDAwMDAwRTAwN0MwRjkzMjlECis6MTBDM0UwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMEZBMzIwMDAwMDAwMDNBCis6MTBDM0YwMDAwMDAwMDBFMDA3NDBGQTMyMDAwMDVCMTAwMDAwMDBFMDlGCis6MTBDNDAwMDAwNzgwRkFEMjAwMDAwMDAwMDAwMDAwRTAwNzgwRkIzMjQ1Cis6MTBDNDEwMDAwMTAwODIxMDA0MDEwMEI0OEY0REZCQjAwMjAwMDAwMDQ3Cis6MTBDNDIwMDAwMDAwMDBBMDAyMDAwMDM5NDA4MDAwMDAwMDAwMDAwQzY1Cis6MTBDNDMwMDBBQkNEQjAzMjEwMDAwMDAwMDAwMDAwMEM1QkNBQjAzOTc4Cis6MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDBDMkJGRUIwMzIwMDAwODExMTQzCis6MTBDNDUwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBGOEQyCis6MTBDNDYwMDAwMzAwMDEzMjAwMDAwMDAwMDAwMTAwRTAwNzgwM0Y1MjlECis6MTBDNDcwMDAxODAwMDAwMDAwMDAwMEY4NzM4QTAyMzkwMDAwMDAwMDc0Cis6MTBDNDgwMDAwMDAwMDA0NDUzMEExNjM1MDAwMDAwMDAwMDAwMDA5QzI0Cis6MTBDNDkwMDAwRjgwOTYzMjAwMDAwMDAwMDAwMDAwQTAwRkMwOTYzMjBFCis6MTBDNEEwMDAwMDAwMDAwMDAwMDAwMEE0MEYwMDk3MzJBMjYwMDMwMDBCCis6MTBDNEIwMDAwMDAwMDA1ODAzMDAzNzMyNjgxMDAwMDAwMDAwMDA1Q0U0Cis6MTBDNEMwMDAwMzAwMzYzMjAwMDAwMDAwMDAwMDAwNTA4MzBEMDAzNEVECis6MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDQ4ODMwRDAwMzQwMDAwMDAwMDUwCis6MTBDNEUwMDAwMDAwMDA0NDUzMEEwMDM0MDAwMDM2MDAwMDAwMDA4MEMxCis6MTBDNEYwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwNjgwOUMwRjkzMjRFCis6MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDZDMDkwMEZBMzIwMDAwMDAwMDhBCis6MTBDNTEwMDAwMDAwMDA3MDA5NDBGQTMyMDAwMDdBMTAwMDAwMDA4MDJDCis6MTBDNTIwMDAwMjAwMDA5MDAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOUExCis6MTBDNTMwMDAwMDAwNkYxMDgwMDEwMDgwMTI0MEIwQjYwMDAwMDAwMEMzCis6MTBDNTQwMDAwMDAwMDAwNDNCNDBCMDMzMDAwMDAwMDAwMDAwMDAwNDg1Cis6MTBDNTUwMDBGRDRCRDAzNTAwMDA3MzEwMDAwMDAwMEMwQjAwOTc5MkNCCis6MTBDNTYwMDAwMjAwMDAwMDAwMDAwMEEwRjIwQjAwMzkwMDAwNzMxMDcwCis6MTBDNTcwMDAwMDAwMDAwNDZCMDE5Nzk0MDAwMDczMTAxMjAwMDA2ODIzCis6MTBDNTgwMDAwOTQwMjBCMjAwMDA3NDEwMTIwMDAwNkMwOTQwMjBCMjczCis6MTBDNTkwMDAwRDAwMDAwMDAwMDAwMEZDQTJFNTE2MzgwMDAwNzkxMDM0Cis6MTBDNUEwMDA5RjAwMDA4MDAyODA5NkIyMDAwMDAwMDAwMDAwMDA3MDMyCis6MTBDNUIwMDAwOUMwOTYzMjAwMDA3QTEwMDAwMDAwNkMwOUMwRkQ5MjlDCis6MTBDNUMwMDAwMDAwNzkxMDEyMDAwMDcwMDk0MDIwQjIwMDAwMDAwMDQ1Cis6MTBDNUQwMDAwMDAwMDA5QzAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEOEIzCis6MTBDNUUwMDAwMjAwMDAzMjAyMDA3MzEwMDQwMTAwQkNBRjI1MTdCODJFCis6MTBDNUYwMDAwNjAwNzExMDA0MDAwMEJDQUY2NTE2QjgwMDAwNkMxMDk2Cis6MTBDNjAwMDAwNDAwMDA4MDIyQzBGQkJDMDAwMDhBMTAwNDAwMDA4MEVGCis6MTBDNjEwMDAxMkMxRkJCQzIwMDA3MzEwMDQwMTAwODA4MkNERkJCQzYyCis6MTBDNjIwMDAwMjAwMDAwMDAwMDAwMEEwRjIwQjAwMzkwMDAwOEIxMDk3Cis6MTBDNjMwMDAwMDAwMDA4MDAyMDAwMEQwODQxMDAwMDAwMDAwMDA4ODhDCis6MTBDNjQwMDA4MkNERjkzQTAwMDA3QTExMDAwMDAwODAwMjAwMDA5MENCCis6MTBDNjUwMDAwMDAwQjMxMDAwMDAwMDgwMDIwMDAwOTAwMDAwQjQxMDQxCis6MTBDNjYwMDAwMDAwMDA4MDAyMDAwMDkwMDAwMEI4MTAwMDAwMDA4MDcwCis6MTBDNjcwMDAwMjAwMDA5MDAwMDBDMDEwMDAwMDAwODAwMjAwMDA5MDQ2Cis6MTBDNjgwMDAwMDAwMTkxMTAwMDAwMDgwMDIwMDAwOTAwMDAwNzMxMEVCCis6MTBDNjkwMDAwMDAwMDBEQzBGMDA5NzkyMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBDNkEwMDAwNzAwMDMzMjQwNDIwMDAwMDAwMDAwQTgwMjAwMzYzMkJBCis6MTBDNkIwMDAwMDAwMDAwMDAwMDgwMDAwMDc4MDJBMzIwMDAwMDAwMDhGCis6MTBDNkMwMDAwMDEwMDAwMDA3MDA5NzMyMDAwMDAwMDAwMDE4MDAwMDcyCis6MTBDNkQwMDAwN0MwOTYzMjA4ODA5MDEwMTIwMDAwNDAwMjgwMzZCMkU3Cis6MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwOTIxMEY2Cis6MTBDNkYwMDAxMjAwMDA5QzBGQzAyMUIyMUQwMDk1MTAwNDAwMDA4MEE0Cis6MTBDNzAwMDA3MkJFMTdCODAwMDA5MjEwMDAwMDAwRjgxRTgwRUY5QTY5Cis6MTBDNzEwMDAxMzAwMDAwMDAwMDAwMDlDN0ZCRTE3MzgwMDAwOTgxMDM2Cis6MTBDNzIwMDAwNDAwMDA4MDEyQzBGOUJDMDAwMDkyMTAwMDAwMDBGODY0Cis6MTBDNzMwMDAxRTgwRUY5QTAwMDAwMDAwMDAwMDAwOUMwRjAwN0UzMjc3Cis6MTBDNzQwMDAwMDAwMDAwMDAwMDAwMEEwMEYwMDdFMzIwMDAwMDAwMDhBCis6MTBDNzUwMDAwMDAwMDBBNDBGMDA3RTMyMDAwMDAwMDAwMDAxMDAwMDc1Cis6MTBDNzYwMDAwNzAwRkE1MjAwMDAwMDAwMDAwMDAwOUMwMjAwMDAzMkE2Cis6MTBDNzcwMDA0QzQyMDAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwMDAwMDE5Cis6MTBDNzgwMDAwMDA4MDAwMDA3ODAyQTMyMDAwMDZFMTEwMDAwMDA4MEJGCis6MTBDNzkwMDAwMjAwMDBEMDAwMDA3MjExMDAwMDAwODAwMjAwMDBEMEYyCis6MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDBDQ0JDMUIwMzQwMDAwMDAwMDBECis6MTBDN0IwMDAwMDAwMDA5QzAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEOEQxCis6MTBDN0MwMDAwMjAwMDAzMjAwMDBGMTBFMDAwMDAwMjgwOUMwQjBEMkMzCis6MTBDN0QwMDAwMDAwQTIxMDA0MDAwMDgwMDI4MDkyQjIwMDAwQTYxMEE3Cis6MTBDN0UwMDAxMjAwMDA5QzBGQzAyMUIyMUQwMEE5MTAwNDAwMDA4MDlGCis6MTBDN0YwMDA3MkJFMTdCODAwMDBBNjEwMDAwMDAwRjgxRTgwRUY5QTY1Cis6MTBDODAwMDAxMzAwMDAwMDAwMDAwMDlDN0ZCRTE3MzgwMDAwQUMxMDMxCis6MTBDODEwMDAwNDAwMDA4MDEyQzBGOUJDMDAwMEE2MTAwMDAwMDBGODVGCis6MTBDODIwMDAxRTgwRUY5QTAyMDBBRTEwMDQwMTAwQjQ4RjRERkJCMEUxCis6MTBDODMwMDAwMDAwNzMxMDAwMDAwMDgwMDIwMDAwOTAwODAwMDAwMDVCCis6MTBDODQwMDAwMDAwMDBGODkzNDAwMTM5MDAwMDAwMDAwMDAwMDBCNDJGCis6MTBDODUwMDAxRjQwRkIzNUZFMDAwMDAwMDAwMDAwNDgwMzAwMzYzMjk4Cis6MTBDODYwMDAwMDAwMDAwMDAwMDAwMDQ0MDMwMDAwMzQwMDAwQTIxMDlCCis6MTBDODcwMDAwMDAwMDAwQzhCQzFCMDk0MDAwMDdFMTEwMDA4MDAwMDg1Cis6MTBDODgwMDAwNzQwRkE5MjAwMDA2RTExMDAwODAwMDAwNzQwRkFEMjNCCis6MTBDODkwMDAwODgwQjUxMDEyMDAwMDUwMDI4MDM2QjIwMDAwNzMxMUZCCis6MTBDOEEwMDAwMDAwMDA4MDAyMDAwMEQwMDAwMDgwMTEwMDAwMDA4MDI1Cis6MTBDOEIwMDAwMjAwMDA5MDAwMDgwMDAwMDAwMDAwOUMwRjAwMzYzMkNCCis6MTBDOEMwMDAwMDQ0MDAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwMDAwMDEyCis6MTBDOEQwMDAwMDAwMDBBMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBFMEE0Cis6MTBDOEUwMDAwNzAwQjAzMjAwMDAwMDAwMDAwMDAwQTAxMjAwMkEzQTQ5Cis6MTBDOEYwMDAwMDAwQkIxMDA0MDEwMDlDMUZDMEY5QkMwMDQ0MDAwMEY0Cis6MTBDOTAwMDAwMDAwMDBBODAyMDAzNjMyMDIwMDdEMTEwMDAwMDBBMEU1Cis6MTBDOTEwMDBGMjBCMDA5OTAwMDBDODEwMDQwMTAwODAwMjQwRkFCMjM2Cis6MTBDOTIwMDAwMDQ0MDAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwQ0ExMEQ3Cis6MTBDOTMwMDAwMDAwMDA4MDAyMDAwMEQwMDAwMEQ3MTAwMDAwMDA4NDNBCis6MTBDOTQwMDAwMjAwMDBEMjAwMDAwMDAwMDAwMDAwRTAwN0MwM0MzMkZFCis6MTBDOTUwMDAwMDAwQzQxMDhFMDEwMDgwMDI0MDI4QjIwMDQ0MDAwMDk0Cis6MTBDOTYwMDAwMDAwMDBBNDBGMDAzNjMyMDAwMEIzMTAwMDAwMDA4MDY5Cis6MTBDOTcwMDAwMjAwMDA5MDAwNDQwMDAwMDAwMDAwQTQ4RjRERkEzQTJECis6MTBDOTgwMDAwMDAwQjMxMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMEQyCis6MTBDOTkwMDAwMDAwMDA5QzBGMDAwMDMyMTAwMDAwMDEwMDAwMDBBQ0ZECis6MTBDOUEwMDAwRjAwMzczMjAwMDBEQzEwMDAwMDAwODAwMjAwMDBEMEQxCis6MTBDOUIwMDAwODAwQ0MxMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDBBCis6MTBDOUMwMDAwMDAwMDA5QzBGMDAwMDMyMEUwMDAwMDEwMDAwMDBBQ0NGCis6MTBDOUQwMDAwRjAwMzczMjAwMDBEQzEwMDAwMDAwODAwMjAwMDBEMEExCis6MTBDOUUwMDAwQjAwRDAxMDA0MDEwMDgwODJDREY5QkMyMDAwMDAwMEIzCis6MTBDOUYwMDAwMDAwMDA5QzBGMDAzNjMyMEYwMDAwMDEwMDAwMDBBQzY4Cis6MTBDQTAwMDAwRjAwMzczMjAwMDBEQzEwMDAwMDAwODAwMjAwMDBEMDcwCis6MTBDQTEwMDAyNzAwRDQxMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDgyCis6MTBDQTIwMDAwMDAxMDA4MDAyMDAwMDUwMDAwMDAwMDAwMDAwMDA5Qzk3Cis6MTBDQTMwMDAwRjAwMDAzMjBGMDAwMDAxMDAwMDAwQUMwRjAwMzczMjgxCis6MTBDQTQwMDAwMDAwREMxMDAwMDAwMDgwMDIwMDAwRDAyMDAwRDkxMDlGCis6MTBDQTUwMDAwNDAxMDA4MDgyQ0RGOUJDMDAwMDAwMDAwMDAxMDA4MENDCis6MTBDQTYwMDAwMjAwMDA1MDAwMDAwMDAwMDAwMDAwRTQwM0MwRjkzMkEyCis6MTBDQTcwMDAwRDAwMDAwMTAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDVDCis6MTBDQTgwMDAwMDAwMDBFMDAzQzBGQTMyMDAwMDAwMDAwMDAwMDBFMEY3Cis6MTBDQTkwMDAwNzQwM0UzMjAwMDAwMDAwMDAwMTAwOUMxRkMwRjk1QTEwCis6MTBDQUEwMDAwMDAwMDAwMDAwMDAwMEUwMDNDMEY5MzIwMDAwMDAwMEI4Cis6MTBDQUIwMDAwMDAwMDBFMDA3NDAzRTMyMDAwMDAwMDAwMDAwMDA5QzQzCis6MTBDQUMwMDAxRkMwRjkzQUZGMDAwMDAwMDAwMTAwQUM4RkNERjk1MDAzCis6MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDlDMEZDMDJGMzIwMDAwMDAwMDhBCis6MTBDQUUwMDAwMDAwMDBGQzAyMDAwMDMyMDAwMDAwMDAwMDAwMDBFMDM2Cis6MTBDQUYwMDAwNzgwM0UzMjAwMDAwMDAwMDAwMDAwRkMxMkMwMkYzQTA4Cis6MTBDQjAwMDAwRjAwRTcxMDA0MDEwMDgwODJDRDJGQkMwMDAwMDAwMDYwCis6MTBDQjEwMDAwMDAwMDBFMDA3ODAzRTMyMDAwMDAwMDAwMDAxMDBGQzQxCis6MTBDQjIwMDAwMkMwRjk1MjAwMDAwMDAwMDAwMDAwRTAwNzAwM0EzMkE1Cis6MTBDQjMwMDAwMDAwMDAwMDAwMDAwMEUwMDc0MDNBMzIwMDAwMDAwMDYyCis6MTBDQjQwMDAwMDAwMDBFMDA3ODAzQTMyMDAwMDAwMDAwMDAwMDBFMDMyCis6MTBDQjUwMDAwN0MwM0EzMjAwMDAwMDAwMDAwMDAwOUMwRkMwMkYzMkQ2Cis6MTBDQjYwMDAwMDAwMDAwMDAwMDAwMEZDMDIwMDAwMzIwMDAwMDAwMDk1Cis6MTBDQjcwMDAwMDAwMDBFMDA3MDAzRDMyMDAwMDAwMDAwMDAwMDBFMDdGCis6MTBDQjgwMDAwNzQwM0QzMjAwMDBGMjEwODMwMTAwRkMxMkMwMkZCQUIyCis6MTBDQjkwMDAwMDAwMDAwMDAwMDEwMEZDMDJDMEY5NTIwMDAwMDAwMDhCCis6MTBDQkEwMDAwMDAwMDA5QzBGMDAwMDMyMEMwMDAwMDAwMDAwMDAwODk0Cis6MTBDQkIwMDA3MzNFMDAzOTAwMDAwMDAwMDAwMDAwRTAwNzAwMzAzMjQyCis6MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDlDMUZDMEY5M0E3MDAwRjcxMDQwCis6MTBDQkQwMDAwNDAxMDA4MDgyQ0RGOUJDMDAwMDAwMDAwMDAwMDAwQ0MwCis6MTBDQkUwMDAwMzAwMDAzMjAwMDAwMDAwMDAwMDAwRTAwNzAwMzAzMkM3Cis6MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDEwMDMwMDAwMzIwMDAwMDAwMEYwCis6MTBDQzAwMDAwMDAwMDBFMDA3MDAzMDMyMDAwMDAwMDAwMDAwMDA5QzNGCis6MTBDQzEwMDAwRjAwMDAzMjAwMDAwMDAwMDAwMDAwQTAwRkMwMjkzMjA5Cis6MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDlDMDJDMEY5MzIwMDAwMDAwMDdCCis6MTBDQzMwMDAwMDAwMDBBNDBGQzAyQzMyMDAwMDAwMDAwMDAwMDA5Qzg3Cis6MTBDQzQwMDAwMjAwRkEzMjE4MDAwMDAwMDAwMDAwMkM3MzdFRkEzOTRFCis6MTBDQzUwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDMwMzIwMDAwMDAxMTdBCis6MTBDQzYwMDA4NTAxMDA5QzFGQzBGOUJBMDAwMDAwMDAwMDAxMDA4MDhGCis6MTBDQzcwMDAwMjAwMDA1MDAxMDAwMDAxMDAwMDAwOUMwRjAwMzczMjRDCis6MTBDQzgwMDAwMDAwRTExMDAwMDAwMDgwMDIwMDAwRDAwRTAwMEYxMTMzCis6MTBDQzkwMDAwNDAxMDA4MDgyQ0RGQUJDMDAwMDAwMDAwMDAwMDBFMDJBCis6MTBDQ0EwMDAwNzAwMDAzMjAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjMyCis6MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDAwMzIwMDAwMDkxMTQxCis6MTBDQ0MwMDAwMDAwMDA5QzNGQzBGOTlBMUMwMDA5MTEwNDAxMDA4MDdCCis6MTBDQ0QwMDA4MkNERkFCQzAyMDBFMTEwMDAwMDAwOUM4RkNERjlEQTkxCis6MTBDQ0UwMDAwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNTAwMTAwMDAwMjZFCis6MTBDQ0YwMDAwMDAwMDA5QzBGMDAzNzMyMDAwMEUxMTAwMDAwMDA4MEFGCis6MTBDRDAwMDAwMjAwMDBEMDBFMDAxNzExMDQwMTAwODA4MkNERkFCQzkxCis6MTBDRDEwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDAwMzIwMDAwMTMxMUQ2Cis6MTBDRDIwMDAwMDAwMDA5QzFGQzBGOTlBMjYwMDEzMTEwNDAxMDA4MDI2Cis6MTBDRDMwMDA4MkNERkFCQzAwMDAwMDAwMDAwMTAwODAwMjAwMDA1MDFCCis6MTBDRDQwMDAwMDAwMDAwMDAwMDAwMEE4MEY0MDI5MzIwMDQ0MDAwMDRECis6MTBDRDUwMDAwMDAwMDBBODAyMDAzNjMyMDAwMDA4MTEwMDAwMDA4MDI4Cis6MTBDRDYwMDAwMjAwMDBEMDAwMDAxMjExMDAwMDAwODAwMjAwMDBEMDdDCis6MTBDRDcwMDAwMDAwRTUxMDAwMDAwMDgwMDIwMDAwRDAwMDAwMDAwMDZDCis6MTBDRDgwMDAwMDAwMDBFMDA3ODAxODMyMDAwMDAwMDAwMDAwMDBFMDEyCis6MTBDRDkwMDAwNzQwMUEzMjAwMDAwMDAwMDAwMDAwRTAwNzAwMUEzMkNECis6MTBDREEwMDAwMDAwMDAwMDAwMDAwMEUwMDc4MDFBMzIwMDAwMDAwMEQwCis6MTBDREIwMDAwMDAwMDBFMDA3QzAxQTMyMDAwMDAwMDAwMDAwMDBBMEUwCis6MTBDREMwMDAwRjAwMDAzMkEyNjAwMzAwMDAwMDAwNTgwMzAwMzczMjU5Cis6MTBDREQwMDAyQjExMDAwMDAwMDAwMDVDMDMwMDM2MzIwMDAwMDAwMDUwCis6MTBDREUwMDAwMDAwMDA5QzBGODAyQTMyMDAwMDJCMTEwNDAwMDA4MEZDCis6MTBDREYwMDAwMjQwMjlCMjAwMDAwMDAwMDAwMDAwNTA4MzNFMDAzNEQxCis6MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDQ4ODMzRTAwMzQwMDAwMDAwMEU1Cis6MTBDRTEwMDAwMDAwMDA0NDUzMEEwMDM0MDAwMDJDMTEwMDAwMDA4ODc4Cis6MTBDRTIwMDAwRjQwMkI5MjAwMDAwMDAwMDAwMDAwOTAwRjAwMjgzMkZECis6MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDk0MEYwMDI5MzIwMDAwMDAwMEY0Cis6MTBDRTQwMDAwMDAwMDA5ODBGODAyQTMyMDAwMDAwMDAwMDAwMDBBOEI3Cis6MTBDRTUwMDAwMkMwRjkzMjMxMTE1ODExMDAwMDAwQjAwRjAwMzY5MkIzCis6MTBDRTYwMDAwNzAwMzQxMTA0MDAwMDgwODI0RDI5QkMwMDAwMDAwMDNFCis6MTBDRTcwMDAwMDAwMDBBMDFGMDBGQTNBMDAwMDI4MTEwMDAwMDA5Q0VBCis6MTBDRTgwMDAwRjgwMkE5MkMwMDEwMDAwMDAwMDAwQUMwRjAwMzYzMjczCis6MTBDRTkwMDAwMTAwMDAwMDAwMDAwMDlDMDIwMDM2MzIwMDAwNDQxMTM2Cis6MTBDRUEwMDAwMDAwMDA4MDAyMDAwMEQwMUYwMDNBMTEwNDAwMDA4MDQyCis6MTBDRUIwMDA4MkNEMjlCQ0MwMDAwMDAwMDAwMDAwQUM4RkNERkEzQTQyCis6MTBDRUMwMDAwMDAwMzYxMTAwMDAwMDlDMTJDMDI5OUEwMDAwRjYxMEU0Cis6MTBDRUQwMDAwMDAwMDA4MDAyMDAwMEQwMDAwMEVDMTAwMDAwMDA4MDg0Cis6MTBDRUUwMDAwMjAwMDBEMDAwMDA0MjExMDQwMDAwODA1MjhBRkFCQzA3Cis6MTBDRUYwMDBBMjYwMDMwMDAwMDAwMDU4MDMwMDM3MzI0MjExMDAwMDE2Cis6MTBDRjAwMDAwMDAwMDA1QzAzMDAzNjMyMDAwMDAwMDAwMDAwMDA1MDBBCis6MTBDRjEwMDBBMzNFMDAzNDAwMDAwMDAwMDAwMDAwNDhBMzNFMDAzNDlGCis6MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDQ0NTMwQTAwMzQwMDQ0MDAwMEU4Cis6MTBDRjMwMDAwMDAwMDBBNDBGMDAzNjMyMDAwMEIzMTAwMDAwMDA4MDkzCis6MTBDRjQwMDAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwQzQwMkMwRkEzMjlECis6MTBDRjUwMDAwMzAwMDAwMDAwMDAwMDlDMEYwMDM2MzIwMDAwMDAwMEJCCis6MTBDRjYwMDAwMDAwMDBCQzBGNDAyRjMyMDAwMDRCMTEwNDAwMDA5QzU5Cis6MTBDRjcwMDAxRkMwRjlCQzAwMDA0QTExMDQwMDAwODAwMjQwMkZCMjFCCis6MTBDRjgwMDAwMDAwNDcxMTAwMDAwMEUwMDcwMDJDOTIwMDAwNDcxMTRDCis6MTBDRjkwMDAwMDAwMDBFMDA3MDAzNjkyMDAwMDAwMDAwMDAwMDBFMDAyCis6MTBDRkEwMDAwNzQwMkMzMjAwMDAwMDAwMDAwMDAwRTAwNzgwMkMzMjE3Cis6MTBDRkIwMDAwMDAwMDAwMDAwMDAwMEUwMDdDMDJDMzIwMDAwMDAwMDZDCis6MTBDRkMwMDAwMDAwMDBFMDA3MDAyRDMyMDAwMDAwMDAwMDAwMDBFMDNCCis6MTBDRkQwMDAwNzQwMkQzMjAwMDAwMDAwMDAwMDAwRTAwNzgwMkQzMkU1Cis6MTBDRkUwMDAwMDAwMDAwMDAwMDAwMEUwMDdDMDJEMzIwMDAwMDAwMDNCCis6MTBDRkYwMDAwMDAwMDBFMDA3QzBGQjMyMDAwMDAwMDAwMDAwMDBFMDdECis6MTBEMDAwMDAwNzgwMkYzMjAwMDAwMDAwMDAwMDAwRTAwN0MwMkYzMjMwCis6MTBEMDEwMDAxODAwMDAwMDAwMDAwMEY4NzMwQTAyMzkwMDAwMDAwMDQ4Cis6MTBEMDIwMDAwMDAxMDBFMDA3ODAzRjUyRkYwMDAwMDAwMDAwMDA0NEM0Cis6MTBEMDMwMDAwMzAwMzYzMjAwMDAwMDAwMDAwMDAwRTAwNzAwRjkzMjczCis6MTBEMDQwMDAwMDAwMDAwMDAwMDAwMEUwMDc0MDI4MzIwMDAwMDAwMDVGCis6MTBEMDUwMDAwMDAwMDBFMDA3ODBGODMyMDMwMDAwMDAwMDAwMDA5Q0EwCis6MTBEMDYwMDAwRjAwMzYzMjAwMDAwMDAwMDAwMDAwQkMwRkMwMkIzMjYxCis6MTBEMDcwMDAwMDAwNjExMTA0MDAwMDlDMUZDMEY5QkMwMDAwNjAxMTk5Cis6MTBEMDgwMDAwNDAwMDA4MDAyQzAyQkIyMDAwMDVEMTEwMDAwMDBFMDJGCis6MTBEMDkwMDAwN0MwMjg5MjAwMDA1RDExMDAwMDAwRTAwNzAwMzY5MkYyCis6MTBEMEEwMDAwMDAwMDAwMDAwMDAwMEUwMDc0MEY5MzIwMDAwMDAwMDJFCis6MTBEMEIwMDAwMDAwMDBFMDA3NDAyOTMyMDAwMDAwMDAwMDAwMDBFMDBFCis6MTBEMEMwMDAwNzgwMjkzMjAwMDAwMDAwMDAwMDAwRTAwN0MwMjkzMjdDCis6MTBEMEQwMDAwMDAwMDAwMDAwMDAwMEUwMDcwMDJBMzIwMDAwMDAwMDBECis6MTBEMEUwMDAwMDAwMDBFMDA3NDAyQTMyMDAwMDAwMDAwMDAwMDBFMERECis6MTBEMEYwMDAwNzgwRjkzMjAwMDAwMDAwMDAwMDAwRTAwN0MwMkEzMjdCCis6MTBEMTAwMDAwMDAwMDAwMDAwMDAwMEUwMDdDMDJGMzIwMDAwMDAwMDE3Cis6MTBEMTEwMDAwMDAwMDBFMDA3NDAyQjMyMDAwMDAwMDAwMDAwMDBFMEFCCis6MTBEMTIwMDAwNzgwMkIzMjAwMDAwMDAwMDAwMDAwRTAwN0MwRkIzMjQ3Cis6MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDg4MDIwMEZCMzIwMDAwMDAwMDM4Cis6MTBEMTQwMDAwMDAwMDA5QzAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEODM3Cis6MTBEMTUwMDAwMjAwMDAzMjAwMDAwMDAwMDAxMDAwMDAwNzAwOTczMkJCCis6MTBEMTYwMDAwMDAwMDAwMDAwMTkwMDAwMDdDMDk2NTIwODgwNzIxMUVDCis6MTBEMTcwMDAxMjAwMDA0ODAyODAzNkIyMDAwMDAwMDAwMDAwMDA4MDZCCis6MTBEMTgwMDAwMjAwMDAzMDAwMDA3NDExMTIwMDAwOUMwRkMwMjFCMjk4Cis6MTBEMTkwMDAxRDAwNzcxMTA0MDAwMDgwNzJCRTE3QjgwMDAwNzQxMUUyCis6MTBEMUEwMDAwMDAwMDBGODFFODBFRjlBMTMwMDAwMDAwMDAwMDA5Q0IxCis6MTBEMUIwMDA3RkJFMTczODAwMDAwMDAwMDQwMDAwODAxMkMwRjk1QzM4Cis6MTBEMUMwMDAwMDAwNzQxMTAwMDAwMEY4MUU4MEVGOUEwMDAwMDAwMEJCCis6MTBEMUQwMDAwMDAwMDBCNDBGNDBGQjM1MDAwMDAwMDAwMDAwMDA5QzgwCis6MTBEMUUwMDAwMjAwMDAzMjRDNDIwMDAwMDAwMDAwQTgwMjAwMzYzMjZCCis6MTBEMUYwMDAwMDAwMDAwMDAwMDgwMDAwMDc4MDJBMzIwMDAwNkUxMUM1Cis6MTBEMjAwMDAwMDAwMDA4MDAyMDAwMEQwMDAwMDcyMTEwMDAwMDA4MEM5Cis6MTBEMjEwMDAwMjAwMDBEMDAwMDAwMDAwMDAwMDAwMENDQkMxQjAzNEMwCis6MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDJFCis6MTBEMjMwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDhCMTEwMDAwMDAyODFFCis6MTBEMjQwMDAwOUMwQjBEMjAwMDA4MTExMDQwMDAwODAwMjgwOTJCMkI3Cis6MTBEMjUwMDAwMDAwODUxMTEyMDAwMDlDMEZDMDIxQjIxRDAwODgxMTMyCis6MTBEMjYwMDAwNDAwMDA4MDcyQkUxN0I4MDAwMDg1MTEwMDAwMDBGOEFECis6MTBEMjcwMDAxRTgwRUY5QTEzMDAwMDAwMDAwMDAwOUM3RkJFMTczODRDCis6MTBEMjgwMDAwMDAwNzMxMDA0MDAwMDgwMTJDMEY5QkMwMDAwODUxMTdBCis6MTBEMjkwMDAwMDAwMDBGODFFODBFRjlBMDAwMDAwMDAwMDAwMDBGQzczCis6MTBEMkEwMDAwMjAwMDAzMjAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOTcyCis6MTBEMkIwMDAwMDAwOEYxMTA0MDEwMDI4MDkzNEIwQkEwMDAwMDAwMEZBCis6MTBEMkMwMDAwMDAxMDAyODA5MDAwMDUyMDAwMDAwMDAwMDAwMDBBODMyCis6MTBEMkQwMDAyMkMwMkYzNzAwMDAwMDAwMDAwMDg0QzAzN0FDQjAzMkZECis6MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDBDMEIwMDAwMzJGRkZGMDAwMEY3Cis6MTBEMkYwMDAwMDAwMDBDMEFGNERCMDMwMDAwMDk1MTE4MDAwMDA4MEVDCis6MTBEMzAwMDAwMjQwQjBCNjAwMDAwMDAwMDAwMDAwQzA2RjAxRkMzNTE0Cis6MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDczRjAxMzIwMDQyMDAwMDUyCis6MTBEMzIwMDAwMDA4MDAwMDg3OEQyQTNBMDAwMDAwMDAwMDEwMDAwMDZECis6MTBEMzMwMDAwNzAwQjAzMjAwMDAwMDAwMDAxODAwMDAwNzAwRDAzMkUzCis6MTBEMzQwMDAwMDAwMDAwMDAwMDAwMEMwM0ZDMTM4MzQwMDAwMDAwMEIxCis6MTBEMzUwMDAxMjAxMDA0OEYyMDFGQzU0MDAwMDlBMTEwMDAwMDA4MDA0Cis6MTBEMzYwMDAwMjAwMDA5MDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDFCCis6MENEMzcwMDAwMDAwMzYwMDAwMDAwMDgwMDIwMDAwOTA2OQorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3lhbS8xMjAwLmJpbi5paGV4IGIvZmlybXdhcmUveWFtLzEyMDAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzNGU1NgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3lhbS8xMjAwLmJpbi5paGV4CkBAIC0wLDAgKzEsMzQyIEBACis6MTAwMDAwMDBGRkYyMDBBNUFERkZGRTlGRkZFRkYzQ0JGRkRCRkNGMjlECis6MTAwMDEwMDBGRkY2RkYzQ0JGRkRCRkRGNkUzRjZGRjE3REI0RkRCRjVDCis6MTAwMDIwMDBERjZGM0Y2RkY3MEJGRkRCRkRGMkZGRjZGRkZGRkZGRjE4Cis6MTAwMDMwMDBGMENGRkZGRkZGRkVGRkZGREZGRkZGRkZFRkZGRkZGRjQwCis6MTAwMDQwMDBGREZGRkZGRkZFRkZGRkZGRkZGRkYxRkZGRkZGRkZCRjExCis6MTAwMDUwMDBGRkZGRjdGRkZGRkJGRkZGRkZGQ0ZGRkVGRkZGRkZGMENGCis6MTAwMDYwMDA1RkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQxCis6MTAwMDcwMDBGRkZGRkZGRkZGRjdGRkZGRkZGMUZGRkZGRTdGQkZGRjY3Cis6MTAwMDgwMDBGRkZGRkZGRkZGRkZGRkZGRjdGRkZCRkZGRkZGRjA5RkZCCis6MTAwMDkwMDBGRkZGRkZGRUZGRkRGRkZGRkZGRkRGRkZGRkZGRjdGRjlCCis6MTAwMEEwMDBGRkZGRkJGRkZCRkZGRkZGRjBGRkZGRkZGRkZGRkZGRjc3Cis6MTAwMEIwMDBGN0ZGRkZGQkZGRkZGRkZFRkZGRkZGRUZGRkYwNUZGRjFDCis6MTAwMEMwMDBGRkZGRkVGRkZGRUZGRkZGRkJGRkZGRkZGRkZGRkZGRjU1Cis6MTAwMEQwMDBGRkJGRkZGRkRGRjdGRkYxRkZGRkZGRkZGRkZGRkZGRkE2Cis6MTAwMEUwMDBGRkZGRkZGRkZGRkJGRUZGRkZGRkZGRkZGMEZGRkZGRjM0Cis6MTAwMEYwMDBGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQjI1Cis6MTAwMTAwMDBGRkZGRkZGREZGQkZGMUZGRkZGRkZGREZGRkZGRkZGQjczCis6MTAwMTEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA2RkZGRkZGRjhFCis6MTAwMTIwMDBGRUZGRkZGRkZGRkZGRkZGRkZGRkRGRkZGRkZGRkZGRjAwCis6MTAwMTMwMDBGRkZGRjdGRkZGRjFGRkZGRjdCRkU3RkZGRkZGRkZGQjQ5Cis6MTAwMTQwMDBGRkZGRkZGRkZGRkY3N0ZGRkZGRkYwRkZGRkZGRkZGRTU3Cis6MTAwMTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFGCis6MTAwMTYwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFECis6MTAwMTcwMDBGRkZGRkZGRkZGRkZGRkZGRkZGMDFGRkZGRkZGRkVEQkEzCis6MTAwMTgwMDBGRkZGRjVBNUZENEI2RUVGMzMzMkRERDM0QUQ2OTJGRTZECis6MTAwMTkwMDBCMzNGQkRGMUZBREJGRUY3RjY5NkJEQkRGRkJERkZFRDQ3Cis6MTAwMUEwMDA3RjZCN0ZGQkRGRkVGQkZFOTBDRkZGRkZGRkZFQkVFRjBFCis6MTAwMUIwMDBGRkZGREI1RkY2RkZGNjhGRkRBNURERkZGRkZGRkY2RkEzCis6MTAwMUMwMDA3RkRCRjFGQ0JGRkY2RkZGRUZGQzVCNUREQURGRjRGRjZECis6MTAwMUQwMDBGMkZGRkRCRkZGRkZGRkQwMUZGRkZGRkZGRUZGRkZGRjhFCis6MTAwMUUwMDBGRkZCRUZCN0ZDMzNGRkZCRkYwNDZBRjMzQzM2RkZGMDg1Cis6MTAwMUYwMDAwRkYxMEZGRkZGRkZGMzE1NzIwRkYxNkZGRkZFOTQzRjNBCis6MTAwMjAwMDBGRkZGRkY3QkZGRkZGMEZGRkZGRkZGRkVGRkZGRkZGMEExCis6MTAwMjEwMDBGN0VGQjdGQzMzRkZGRkZGMDQ2QUYzM0MzNkZGRjAwRjQ0Cis6MTAwMjIwMDBGMTBGRkZGRkZGRjMxNTczOEZGMjZGRkZGRTk0M0ZGRjk3Cis6MTAwMjMwMDBGRkZGN0Q5RkZGRjAwRkZGRkZGRkZFRkZGRkZGRkY5RTExCis6MTAwMjQwMDBGRkZDRUZEM0ZCRkY3RkY1NUZGRTU5RkZGRkZGRkNGMUUzCis6MTAwMjUwMDBGRTdGRkZGRkZBMTdGRkU3RUZFRkZGRkYzRkYxRkZGRjIyCis6MTAwMjYwMDBGRkZGRkZGRkYwRkZGRkZGRkZGRUY1RkZCRkZGRkNFQTEwCis6MTAwMjcwMDBGRkYwRkZGRkJGRjkzRkIxRUZGRkQ3RkZGQkZGRjBGRjNDCis6MTAwMjgwMDBGRkYzRkZERkZGN0JGRkZERkZGNkZGQkZGRkZGQkZGRkI5Cis6MTAwMjkwMDBGRkZGREFGMEZGRkZGRkZGRkVGMkMwMDEwMDAwMDIwMkU1Cis6MTAwMkEwMDAwMjAyMDA0MDQwNDAxMDAwMDAwMDIwMDAwMDAxMDAwMDU5Cis6MTAwMkIwMDAwMDAwMDAwMDE5MDAwNDA0MDAwMDAwMDAwMDAwMDAxMDBECis6MTAwMkMwMDAwMDNDRjBBRkZGRkZGRkZFRkRCRkZGRkZGQkZGRkRGRkE4Cis6MTAwMkQwMDBGRjdGRkZGRkJGRkZFRkZGRkZGREZGRkZGMUZGREZGRjJFCis6MTAwMkUwMDBGRkZGRkZGRkZGQkZGRUZGRkZGRUZGRkZGRkZGRkZERjgwCis6MTAwMkYwMDBEQkYwNkZGRkZGRkZGRUYwQkZERkZGN0ZGRkZGRkZGRkMxCis6MTAwMzAwMDBERkRGRkZFRkZGOUVFRkZGRkY3RkZGRjFFRkZGRkZGRjVDCis6MTAwMzEwMDBGN0ZBQkZGRkZGRkU0N0VGRkZCREY2RkZGRkRGRjVGMDg3Cis6MTAwMzIwMDBGMEVGRkZGRkZGRkVGODMwMDAwMDAwMDQwMDAxMDIwOEJDCis6MTAwMzMwMDAxNjAwMDAwMDgwMDAwMTAyMDA4MDAxMEMwMjAwMDAwMTk0Cis6MTAwMzQwMDAwMDAwMjAwMDAwMDYwMDIwMDAxMDAwMTQwMDA0QzFGMDhFCis6MTAwMzUwMDAyRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQkZGRkY3RjAyCis6MTAwMzYwMDBFQ0ZGRkZGQUZGQkZGRjZGRkZFMUZGRkZGRkZGQkRGRUU2Cis6MTAwMzcwMDA0NkZGRUY3RkNEREZGRkZGRkRGRkJERkY3RjdGRjA0RjJCCis6MTAwMzgwMDBGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdFCis6MTAwMzkwMDBGRkZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRjdCCis6MTAwM0EwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMEZGRjVDCis6MTAwM0IwMDBGRkZGRkVGRkZGRkZGREE0QkNDRDZENkI2RjVCREMzMzY5Cis6MTAwM0MwMDA1QUY2RjdGNkIzM0ZCREMxRkE1QUY2RjZCNkY3RkZCREQ3Cis6MTAwM0QwMDBCQjNDQ0VDRjM0RUYzM0JCQ0NGRkZGRkZGMDRGRkZGRjcyCis6MTAwM0UwMDBGRkZFQkZGRkZGRkZEQkZGRjZENkZGRkRGREJGRkZBRDRBCis6MTAwM0YwMDBCRkY5N0Y2RkZDREJGMUZEQkZGRjZGRkZGRkRBREJGQ0I2Cis6MTAwNDAwMDBEQkZGNzY4RkY2RkZDREFCRkVGQkZGRDBGRkZGRkZGRkRDCis6MTAwNDEwMDBGRUZGOUZGRkY0MjBBRjZEMEJDMTdCRkZGRkZGQ0JGRjAzCis6MTAwNDIwMDAzRkYwRUY3RjBGRjFDMzNDRkZGRkZGRkZGRkZGRjgwQjMzCis6MTAwNDMwMDAxRDZBNjQwNTZCOTkwMUZGRkRFRkYwMkZGRkZGRkZGRUMyCis6MTAwNDQwMDBGRkZGRkZGNDAwMkZDQzBCQzM3RkZGRkZGRjBBREZCRkNFCis6MTAwNDUwMDBGRDdGRkZGRkYxQzNCRkZGRkZGRkZGRkZGRkYwNEEwRTZECis6MTAwNDYwMDA5NjY0MDI5Nzk5MTBGRkZGRkZGMERGRkZGRkZGRkVGRjhBCis6MTAwNDcwMDBGRkZGRkU4NEY5RDUyN0YxN0ZGRkY4RUJERkYzQ0YzRkQ1Cis6MTAwNDgwMDAxRkZGRjcxMUZGQ0ZGRkZFNjdGRkZGRkZGRkM0RkZGRjU2Cis6MTAwNDkwMDBCM0ExRkZGOUUwRkZGRkZGRjBFRkZGRkZGRkZFRjVGRjY1Cis6MTAwNEEwMDBGRkZCN0ZFMEZGQzdGRTdGM0ZGRkZENzc4RDdGMEZGRkU0Cis6MTAwNEIwMDBDM0ZGRjFCRjhGQ0ZGRkZGREQ3QkZGRjZGQUY3RkY0MEYxCis6MTAwNEMwMDA5RkY5N0ZEOEZGRkZGQUYwMUZGRkZGRkZGRUYxQzAwMDhBCis6MTAwNEQwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDQwMDAxMDAwMDAxMEI5Cis6MTAwNEUwMDAwMDAxMDAxMDIwMjAwMDAwMTAwMDA0MDEwNTAwMDAwMEExCis6MTAwNEYwMDAwMDQwNDAwMDAwM0NGMDFGRkZGRkZGRkVGREJGRkZGRjdDCis6MTAwNTAwMDBGRkZGRkU3RjdGRkZFRkZGRkZERkZGRkZERkZGRUZGNzY0Cis6MTAwNTEwMDBGMUZGRkZGRkZGREZGRkZGRjdGRkZGRkZGQ0ZERkY3RkE2Cis6MTAwNTIwMDA3RUZGRkZGRkRCRjA2RkZGRkZGRkZFRjBCQkZGRkZGRjczCis6MTAwNTMwMDBGRkZGRkVFQkZENkZGRkY3RkVGNTdGRkZGRjdGQkZCMTEzCis6MTAwNTQwMDBGRkZGOUZCRkZCRkZGRUZGRkVGRkY3RUJERkJGNUZERDlGCis6MTAwNTUwMDBGRkRCRkREMEYwNkZGRkZGRkZGRUY4MzAyMDAwNDIwMDEwCis6MTAwNTYwMDAwMDAwMzAxODA0MDgwOTIxODI4MDAyMDAwODAwMDEwMDAwCis6MTAwNTcwMDAwMDAwMEMyMDEwMDAxMTAwNDQ4NDAwMjAyMDg0ODAwMDIyCis6MTAwNTgwMDAwMDAwQzFGMERGRkZGRkZGRkVGRkY3RkZGQkRERjlGRjFCCis6MTAwNTkwMDBEQUZGRENEREZDRkJGRkJGRkIzRUQ3OTZGRTYxRjdGRjE5Cis6MTAwNUEwMDA3RkZGM0ZGREZGREZDRkY3REZGN0JGRkRGRkZFRUZFRjgwCis6MTAwNUIwMDBGRUZGRjA3RkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkRDCis6MTAwNUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMUZGRkZGRjQ5Cis6MTAwNUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjJCCis6MTAwNUUwMDBGRkYwMkZGRkZGRkZGRUZGRkZGRkYzQkRGRDRCNzRDRkJBCis6MTAwNUYwMDA3MzVCQ0IzQkRGRkVGN0ZFRDM3NUFDQTFGQkRGRkVGN0YxCis6MTAwNjAwMDA3Njk2QjUyNEJEQTVBRDQ5MkY2OTJCNTI1QkJERkZGRjgyCis6MTAwNjEwMDBGMENGRkZGRkZGRkVCRkZGRkZGRkRCRkZGNkZFRkZDQ0NCCis6MTAwNjIwMDBBN0ZCQURGRjdGNkZGRjZEN0ZEQkYxRkRCRkZGNkZGRkFFCis6MTAwNjMwMDA2RkZGREJGRkRCRkZGNjk3RjZGRkI1QjVGRkZGRkZEMERGCis6MTAwNjQwMDBFRkZGRkZGRkZFRkZGRkZGRkRBNUJDNDNGQzdDMDNFN0MwCis6MTAwNjUwMDBGRkZGMjBGRkZGRkZDQ0ZEN0RGMUZGRkZGRkZGRDU1OTFFCis6MTAwNjYwMDBCQTU2NjY2QUFEOUFBOTlBOTdBNUFBQkJGRkZGRjAwRjgyCis6MTAwNjcwMDBGRkZGRkZGRUZFRkJGRkZERjdGRDQzRkZGRDZCRTdGRjA2Cis6MTAwNjgwMDBGRkRGRkZGRkZGRkZGRjNGRjFGRkZGRkZGRkQ1NTlCNTgyCis6MTAwNjkwMDBBNjY2NkFBRDlBQTk5OTZCNUFBQUZGRkZCN0YwM0ZGRjA5Cis6MTAwNkEwMDBGRkZGRkVGRkZGRkZGRTlDRjdGREQyNDFGRkZGRjI3RjQxCis6MTAwNkIwMDA4RkZGRkYzREYzRkYxN0YxRkZGRkZGRkZGRjdGREZGQzIxCis6MTAwNkMwMDA4RjM4RkZFRjIzRkZGQkY3QzhGRkZGRkZGMDlGRkZGRjBGCis6MTAwNkQwMDBGRkZFRjU3RkZGRkRGRkU0RkZFQkZGQ0ZCRkZBRkZBQkFGCis6MTAwNkUwMDBFRkZGRkJGRkYzRkQ2MUZGRkZGRkZGRkFGRkZCRkQwREQ3Cis6MTAwNkYwMDBGRkZFRkY0MzdGRkVCRkQwRkRGRkZBRjAzRkZGRkZGRjhECis6MTAwNzAwMDBGRUYzQzAwMDAwMDAwMjAwMDIwMTAwNjBDMDQwMDAwMEQzCis6MTAwNzEwMDAwMDAwMzQwNDAwMDEwMDAwMDAwMDAwMDAwMDA4ODgwMDEwCis6MTAwNzIwMDAwMDAzMDAwMDQwMDA0MDAwMDAzQ0YwM0ZGRkZGRkZGRUUwCis6MTAwNzMwMDBGRDNGRkZGRkZGRkZGRkZGN0Y3RkJGRkZGRkZGRkZGRkNCCis6MTAwNzQwMDBGRkZGRkZGN0YxRkZGRkZGRkZGRkY3RkZGRkZGRkRGRkQ5Cis6MTAwNzUwMDBGRkZGRkZGRUZFNUZGRkZGQ0JGMERGRkZGRkZGRkVGMEJFCis6MTAwNzYwMDBGRkZGRkRGRkVGRTNERUVFRDlDNTkzRkZGRkZFRkVGRkM3Cis6MTAwNzcwMDBGQkVFRkVGMUZGRkZGRkZGRkZGREZGQkZGN0ZGRkY3Rjc3Cis6MTAwNzgwMDBBRkJEREZERkZCRjNGM0YwRjBBRkZGRkZGRkZFRjgzNEE4Cis6MTAwNzkwMDAwMDA2NjEwMDE4MDFBMDA1MTcwMDIwMDUyODIwMDAwMEIwCis6MTAwN0EwMDAwNTAwNDEwMDAwNDAwMDA5MDAwMTIwODY4MjA4NDAwMzQ2Cis6MTAwN0IwMDA4MDMwNzAwODE0MDJDMUYwQ0ZGRkZGRkZGRUZGRkZGRjgzCis6MTAwN0MwMDBGRkZGQkRFRkZCRkZGRkZCOUM3RkVGREZGRkJGRUJERTFCCis6MTAwN0QwMDBGRkMxN0ZGRkZCN0ZGRkZGRkY1RkZGRkZGRkRGQkZFRjdCCis6MTAwN0UwMDAzRkY3OEZFRjdGRkZGMDdGRkZGRkZGRkVGRkZGRkZGRjcxCis6MTAwN0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA5Cis6MTAwODAwMDBGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA2Cis6MTAwODEwMDBGRkZGRkZGRkZGRjAzRkZGRkZGRkZFRkZGRkZGRkZCREZBCis6MTAwODIwMDBERkVGN0Q2RDJCNUE1REQyREZGNjkyQjZCMkIzQUNBMThECis6MTAwODMwMDBGQkRGRkVGMUVFRjVGNkJDNkJCRDdEQUYxQUVGNUY2QjMzCis6MTAwODQwMDBDNkZGRkZGRkYwNUZGRkZGRkZGRUJGRkZGRkZGREJGRjA1Cis6MTAwODUwMDBGNkZGRjZCN0ZEQURGREJGRjM2RkZGNkZGRkRCRDFGRDE4Cis6MTAwODYwMDBCRkZGNkZGNTZCQkM1QjNDREFFRjE2QUYxNkZGQ0RBQjhECis6MTAwODcwMDBGRjZGRkZEMEZGRkZGRkZGRkVGRkZGRkZGQ0JGRkZGRjhCCis6MTAwODgwMDBGRjZDMDMxMEMxRjNGRkYzM0FGM0NBRkZBRkYxRkZGRkIwCis6MTAwODkwMDBGRkZGRDk5NkE2NjVBNjY2NkE5NTY5Njk2QTVBNUFGRkU2Cis6MTAwOEEwMDBGRjVGRjAxRkZGRkZGRkZFRkZGRkZGRkZCRkZGRkZGRjI4Cis6MTAwOEIwMDBFQTBGNTBDM0YzN0ZGRkYzRjNDM0ZGQUZGMUZGRkZGRjc2Cis6MTAwOEMwMDBGRkQ5OTZBNjY1QTY2NjZBOTU2OTY5NkE1QTVBRkZGRkI2Cis6MTAwOEQwMDBGRkYwM0ZGRkZGRkZGRUZGRkZGRkZGRDdGRkZGNUZDMUZFCis6MTAwOEUwMDAzRkY3NUVGNUNFOUU1RjNGMTdGRkYzRTFGRkZGRkZGRjhGCis6MTAwOEYwMDBEOEZGRkFGRTY3RkZGRUJGNUFGRkZGQUZGNUZGRkZGRjBECis6MTAwOTAwMDBGMDJGRkZGRkZGRkVGNUZGRkZGREZGRjdGRkZENEUzRDYwCis6MTAwOTEwMDAzRkU3MEJCRjhGRjlGRkVCRTNGRkUxRkZGRkZDRkZDN0YyCis6MTAwOTIwMDA5RkZGM0UzOUU1RkZDRjlCRjlGRkZGQzVGRkZGRkFGMEMwCis6MTAwOTMwMDA1RkZGRkZGRkZFRjNDMDAwMDAwMDAwMDAwMDAwNDAwMDZBCis6MTAwOTQwMDAwMDAwMDA2MDAwMDAwMDAwMDAwMTAwMDAwMDIwMDAyMDA2Cis6MTAwOTUwMDAwMDAxMTAwODAwMDAwMDAwMDAwMDAwMDAwMDNDRjA0RjAzCis6MTAwOTYwMDBGRkZGRkZGRUZEQkZGRkZGRkZGRkZGRkZGRUZGRkZCRjFCCis6MTAwOTcwMDAzRkZGRkZCRkZGRkZGRkZCRjFGRkZGRkZGRkY3RkZGN0E5Cis6MTAwOTgwMDBGRkVERkZGQkZFRkY3RkZGN0ZERkZGRkZEREYwM0ZGRjlGCis6MTAwOTkwMDBGRkZGRkVGMEZGRkZGM0ZGRjdGRkZFNUZGRkY3RkZGRjM0Cis6MTAwOUEwMDBERkZGRkZGRkY3RkU3QkYxRkZGREZERkZERkRGRkY3REQ4Cis6MTAwOUIwMDA3M0Y5RkZDMzdFRkVGRkVGRDdGRkNGRDBGMDZGRkZGRkNECis6MTAwOUMwMDBGRkZFRjgzMDAwMDA0MDA0MDAwMTQxMjAwMDA0MDAwMjU2Cis6MTAwOUQwMDBENTA5MDAwMjgwMDIwMTAwMDAwMDBBMDQwMDA3MDAwMTlFCis6MTAwOUUwMDA1MDAxODAwMjYxNDA0MTBDMTQwOEMxRjA5RkZGRkZGRkRECis6MTAwOUYwMDBGRUZGRkZGRkZFRkZGRkZGRkVERkNCNUZGRUVGRkZGRTEwCis6MTAwQTAwMDBGRjNGRkY3RkZEQzFGRkZGN0ZGRkRGRkRGQ0ZERjdFRTM2Cis6MTAwQTEwMDBGRkZGNEVGRkRGQ0ZEQkVCRkZGRkYwMUZGRkZGRkZGRTBGCis6MTAwQTIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ2Cis6MTAwQTMwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ0Cis6MTAwQTQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGMDJGRkZGRkZGRkU3RjE2Cis6MTAwQTUwMDBGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZERkZGRkZGRkM4Cis6MTAwQTYwMDBGN0ZCRkZGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkIwCis6MTAwQTcwMDBGRkZGN0ZGRkZGRkY3RkZGRjAxRkZGRkZGRkZFRERGRjk4Cis6MTAwQTgwMDBGRkZGQTVGRjZGNkJFOTZGREFDQUZCRERFRUY3RjZCMjg5Cis6MTAwQTkwMDBCM0E0QTE1QjVCRjZEN0Y0Rjc3QkJEQkRBRENGRUY3RjExCis6MTAwQUEwMDA2QjdGM0JERkRCRkZGRjMwQ0ZGRkZGRkZGRUJGRkZGRkIyCis6MTAwQUIwMDBGRkZGRkZGNkZFOTZGRkZEQjVGREJGQUQ3RkZGNkZGRkE5Cis6MTAwQUMwMDBERUQxQURBREU5RkZGMUVDRUZERTNGQ0JGRkY2RkYzMjVCCis6MTAwQUQwMDBGRkM1QkRGRkZGRkZEMEJGRkZGRkZGRkVGRUZCRkZGNDIyCis6MTAwQUUwMDAyOEJGRkZGREZCRDNGRkZGNDJGRkZGRkZFQUIzRkNDM0JDCis6MTAwQUYwMDBDMUZGMzNGRkMwMTU2QjcwRkZGMEYyNEZGRkZDM0U5NzU0Cis6MTAwQjAwMDAzQ0ZGRkZGREVGRjBCRkZGRkZGRkZFRkZGRkZGRkU3OEEyCis6MTAwQjEwMDBCRkZGRkRGM0VGNTVGRjdFRkZGRkZGRUFCM0ZDQzNDMTRDCis6MTAwQjIwMDBGRjMzRkZDMDE1NkZGRjBGRjBGMDBGRkZGQzNENkJDM0VECis6MTAwQjMwMDBGRkZGRkVGN0YwQ0ZGRkZGRkZGRUZGRkZGRkZGRkNGRjExCis6MTAwQjQwMDBGRjIzRjg3RkZGNEVGRkZGRkZGQkY5MTdGRkY2RjFGRkQyCis6MTAwQjUwMDBDRkVGRkZGRjEzREZFNjJGQzdGRkZGRTdDMUZERkZGRTZCCis6MTAwQjYwMDBGRkZGRkZGMDRGRkZGRkZGRkVGNUZGRkZGRkZFQUVGRkIxCis6MTAwQjcwMDBGRjdGM0IzRkZDN0ZGQ0VGRkZGQ0UyN0JGRkYxRkRFREU1Cis6MTAwQjgwMDBFRkZGRkYzNTczRkZGRkZFRkFGRkZGRkZGRUJGRkZGRjIyCis6MTAwQjkwMDBGRkZBRjA4RkZGRkZGRkZFRjFDMDAwMDAwMDAwMDAwMDMxCis6MTAwQkEwMDAwMDAwMDA4MDAwMDA0MDAwMDAwMDBDMDQwMTQwNDAwMEY0Cis6MTAwQkIwMDAwMDMwMjgwNDAwMDgwMDAwMDAwMTAwMDEwMDAwMDAwMENGCis6MTAwQkMwMDAzOEYwMEZGRkZGRkZGRUZEQkZGRkZGRkZGRkZCRkY3RkMyCis6MTAwQkQwMDBGRkZGOUZGRkZGRkZGRkZGRkZGRkZGRjFGRkRGREZGRkQzCis6MTAwQkUwMDBGRkZGRkZFREZGRkRGRkZGRkZGRkZGQkZCRkZGRkZDM0U1Cis6MTAwQkYwMDBGMDNGRkZGRkZGRkVGMEJGRkRGRkJGRkZGRkZERkZGRjY4Cis6MTAwQzAwMDBGRkZGRkZGRDdCRkY3RkZGQkRGRkYxRUZGRkZGRkRERjdDCis6MTAwQzEwMDBGREZCRkZGRkJGQkVGRkNEN0ZGQ0Y3Rjc2RkJGRDhGMDM2Cis6MTAwQzIwMDBFRkZGRkZGRkZFRjgzMDAwMDAwMDA0MDAwMEEwMDAwMDBFCis6MTAwQzMwMDBDMDAwMDAyMDM0MDAwMDAwMEM4MTAwMjBBNDIwMDAxMDFGCis6MTAwQzQwMDAwODA0NDgwODAwNDA5MzAwMTAwMDM4MTgyMEMxRjAzRjA1Cis6MTAwQzUwMDBGRkZGRkZGRUZGRkJGRkZGQjlERkZFQjNGRkZGRTdGRDc2Cis6MTAwQzYwMDBGRkZGM0JGRjdGRkZCRkZGQzFGRkZDRkZGRjNGNzdGRUEyCis6MTAwQzcwMDBGRUNGRkZCRkZEQkZGRkZFRURGMkZERjdGRkYwMkZGRjQwCis6MTAwQzgwMDBGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjc1Cis6MTAwQzkwMDBGRkZGRkZGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRjcyCis6MTAwQ0EwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMEJGRkZGRkEzCis6MTAwQ0IwMDBGRkZFRkZGRkZGRjNBRENGRUY3MEM5NzMzQkRGNUI0QTcxCis6MTAwQ0MwMDBGNkI3RkVEN0Y1QkNDMTMzQ0FENkI3NkVGN0ZCQkRDNUM0Cis6MTAwQ0QwMDAyNENGNkYyRjREMkJCQTVBRkZGRkZGRjBBRkZGRkZGRjVFCis6MTAwQ0UwMDBGRUJGRkZGRkZGRkZGNkY2RDdGRkZGQURCREZGRkZGRjIzCis6MTAwQ0YwMDBFRkY3N0ZGQzVCQjFGREJENzU2RkVGNkFGRDVCRkJEQjYyCis6MTAwRDAwMDAzQUJGOEU5RkZGQkZGREZGNkZGRkQwNkZGRkZGRkZGRTVCCis6MTAwRDEwMDBGRkJCRkZGMDNGRkZGRkZERkI3RkRFRkZGRjVBRDZCRkFCCis6MTAwRDIwMDBEODJBQkZCRkYxRTVGRkNDQzBBOTcwRkZGMzNDM0NGRDYyCis6MTAwRDMwMDA1N0ZEOTgwMzAwQzNGRkZGRkZGMEFGRkZGRkZGRkVGRjZCCis6MTAwRDQwMDBGRkZGRkYzREJGRkZGREZCRkZEQkZGRkYwRkZDM0ZEOEI5Cis6MTAwRDUwMDAyQUJGQkZGMUVGRkZDQ0MwOTZCRUZGRjMzRkZGRkQ1N0E4Cis6MTAwRDYwMDBGRDk5MEZGRkMzRkZGRkZGRjA0RkZGRkZGRkZFRkZGRkU3Cis6MTAwRDcwMDBGRkYxRTdGRkZGRjM4RTdCRkZBOEZGREY3RjhFNzg3MzI1Cis6MTAwRDgwMDBGRkYxNTE2MkZGRkM0QkZGRjNGRjdFQ0ZGOUZGRkRGRjQ4Cis6MTAwRDkwMDBGRjdGRkZFMEZGRkZGRkYwNEZGRkZGRkZGRUY1RkZGRkNDCis6MTAwREEwMDBGQkZEQUVGRkZDRkU2RjNGRjhGRDc3QUZGRTM3RkU3QjJECis6MTAwREIwMDBGRkIxOENGRkVGRkRGOEU3QkZGRkYxRkUzRUY3RkU5NUI4Cis6MTAwREMwMDAzRUJGRkZGRkZGRkFGMEJGRkZGRkZGRkVGMUMwMDAwMEQ0Cis6MTAwREQwMDAwMTA0MDAwMDAwMDA4MDAyMDAwMDEwMDAxMDAwMTAwODU0Cis6MTAwREUwMDA0MTgwMTAwMDAwMDgxMDg0MDAwQzA0MDI2MTAwMDA4MUEyCis6MTAwREYwMDAwMDAwMDAwMDNERjA3RkZGRkZGRkZFRkRCRkZGRkZGRjkzCis6MTAwRTAwMDBGRkZGN0ZGRkZFRkRCRkZGRkZGRkZGRkZGRkZGRkZGMUMzCis6MTAwRTEwMDA3RkJGRjc3RkVGRkZFRkZGRjdGREZGRkZGRDdGRkZCRTE3Cis6MTAwRTIwMDBERkZGRkZEOUYwQkZGRkZGRkZGRUYwQkJGRjdGRkJGRjNGCis6MTAwRTMwMDBGQkZGQkZGRkYzN0ZGQkZERUI3RkRGRkFGRkRFRjBFRDkzCis6MTAwRTQwMDBGRkIxRjdGOTFGQjU1QkZFN0VGN0JFRkQ3RjVGQjVGNzFCCis6MTAwRTUwMDBGRkZGRDBGMDRGRkZGRkZGRkVGODMwMDEwMDA3NDIwMTE3Cis6MTAwRTYwMDAwMDZBMTg1MDgwMDAwMDAyNDAwMTAxMjAwMTAxMjQxNDkyCis6MTAwRTcwMDAyMTEwMDIwODA3MDgwMDQwMTA4MDU4MDA4NDgwMTgxMEQ0Cis6MTAwRTgwMDA0MEMxRjBCRkZGRkZGRkZFRkZGRkZGRjdGRkRCQjdGMzNGCis6MTAwRTkwMDBERjdDRjg3NEZGRkY2RjdEM0Y3RUVDN0ZDMUY1RkZDRkY1Cis6MTAwRUEwMDA2RjlGRjlERkJFRTVFN0ZGRDdGM0RERkJGRkZDRkZCRjc4Cis6MTAwRUIwMDBGRkYwRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRjUyCis6MTAwRUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRjQwCis6MTAwRUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjIyCis6MTAwRUUwMDBGMDJGRkZGRkZGRkVEN0ZGRkZGRkI0Q0ZFRjc3NkY3MzQ5Cis6MTAwRUYwMDAzQTRBM0FDQkQ0RjcyRUQ2QkRCREExM0JERkQ2RjdFRUFBCis6MTAwRjAwMDBEMzM1QkRGQkJEQ0VFQjJCNEQyRkJCREFGRkZGRkVCMEMzCis6MTAwRjEwMDA1RkZGRkZGRkZFQkZGRkZGRkZERjVGMzZBRjNGRURCN0I1Cis6MTAwRjIwMDBGNUZERjMyQkVGNzdGRkZCREFCMUJEQTM3NzY5N0Y0RkI4Cis6MTAwRjMwMDBGRkRCRkE1QkZGRjJGRUZGOTZGRkZGRkVERkZGRDBBRkE1Cis6MTAwRjQwMDBGRkZGRkZGRUZGRkZGRkZEOEZGRDQwNkY5RTgzNUEwRkU3Cis6MTAwRjUwMDBGQUMzRkZGRkZDRTk3RkYzMDFEMDAwRkVCRkNEM0ZGMEY1Cis6MTAwRjYwMDBFRkZDQzUwQzNGRkQ2ODBCRkZGRkZGRkVERkYwRkZGRjRFCis6MTAwRjcwMDBGRkZGRkVGRkJCRkZGRDg1RkZENDZGOUZDMzVBMEZGRjJFCis6MTAwRjgwMDBGRkZGRkZGQ0U5N0ZGMzAxRjBGQkMyQkZGQzAwMzdFRjdFCis6MTAwRjkwMDBGQ0NEQkMzRkZGMENCRkZGRkZGRkZGRkZGMDVGRkZGRjdCCis6MTAwRkEwMDBGRkZFRkZGRkZGRkZEOUY3RDFCNzdFN0ZGMUU0RkRGRjIyCis6MTAwRkIwMDBGQkZCRkY1RkZGN0ZCMUJDMEY2N0VCQjgzRkZGRTJGRkJBCis6MTAwRkMwMDBFOUZGRkRFM0ZGM0Y5RkMyRkZGRkZGRjA5RkZGRkZGRjMxCis6MTAwRkQwMDBGRUY1N0ZGRkYwM0ZCQ0ZGRDVGNUNFM0ZGRUZGRkU2RDc3Cis6MTAwRkUwMDBGRkYxQkY3QkZGRjFGREZGNEZGRjg3RkZBRUZGQjFGOEMxCis6MTAwRkYwMDBGRUZGRkY3ODAxQjlGRkZGRkZGQUYwMkZGRkZGRkZGRUIyCis6MTAxMDAwMDBGM0MwMDAwMDAwMDQwMjEzMDIwMDgwNDAwMDkwMTAwMEIyCis6MTAxMDEwMDAxMDAwMDIwMDAxMjA4MDEyMTAwMDQwMDgwMDA0MDAwMEFGCis6MTAxMDIwMDAwMjAwMDE0MDAwODAwMDAwM0NGMEVGRkZGRkZGRkVGREVBCis6MTAxMDMwMDAxRkZGRkZGRjdGRkZGRkZGRkY3RkZGN0ZGN0RGRjdGRjUwCis6MTAxMDQwMDBGN0ZCRUJEMUZGRkZGRkZGRUZGN0ZGRkZGQkZGRkVGRjFCCis6MTAxMDUwMDBGRjdFRkZGQkZGRkZGRkRCRjBGRkZGRkZGRkZFRjBGRjY4Cis6MTAxMDYwMDBGRkI3RUJGN0RGRkZGRUY1NkJFN0VERjczRUVDRkY1NDY0Cis6MTAxMDcwMDBFRjZGRjFGNUFGNkZGNkZERkZERDdCRkZFRkJGN0ZGRjk5Cis6MTAxMDgwMDBGRkY3RkZGMzVGRjdEMEYwQ0ZGRkZGRkZGRUY4MzAwMDcwCis6MTAxMDkwMDA4MDQwMDQwMDgxMkMwNDI0MDAwMjAxQzgwMjAwMDIyNEM0Cis6MTAxMEEwMDAwMDAxQjQ0MkRDNDQwMjE1OTAwMjAzNDgzOTEwMDIyNEM2Cis6MTAxMEIwMDBBMEJBMDAwMDQwQzFGMEJGRkZGRkZGRkVGRkZGRkZGRjJGCis6MTAxMEMwMDBGRUZDRjdGMEVFQjY1REZERjVGRkRCRjc3RjdGQkVGRkMwCis6MTAxMEQwMDBDMUZFQkZGQUZBNUZGRkFERkZFRkZGN0ZERjdGRkVCRjBDCis6MTAxMEUwMDBCNzk0QkZGRkZGRjA5RkZGRkZGRkZFRkZGRkZGRkZGRjczCis6MTAxMEYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTBFCis6MTAxMTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGCis6MTAxMTEwMDBGRkZGRkZGRkYwOEZGRkZGRkZGRUQ3RkZGRkZCQjVGRkQ1Cis6MTAxMTIwMDBFRjdDRUIyQjUyNUIzQkRBRDRGMzM2OTZCNUJERjFGQjhCCis6MTAxMTMwMDBEQUVFRjZGRUQzMzVCRERGQURDRkVGN0VDRDZCQkJERjk0Cis6MTAxMTQwMDBGRkZGRkRCMEVGRkZGRkZGRkVCRkZGRkZGRkQzNUZGNjI2Cis6MTAxMTUwMDBGRkY2RkZGREFERkRGRjdGRUZGRjZGN0ZEQkYxQTVBMzg2Cis6MTAxMTYwMDA3RjZGNkI0RkZGREJGQkNCRkZGNkZGRjREN0ZEQkZGRUJFCis6MTAxMTcwMDBERkZGRDBDRkZGRkZGRkZFRkZGRkZGRjdERkZGRkZGRjI3Cis6MTAxMTgwMDAzRjdGRkNFNUZGMjBGRUZGRkZERjdGRkZGMTdGRkZGRURCCis6MTAxMTkwMDBGRkYwN0MzRDRGRjNDMzNGRkZGRjZGQzNGRjBGRkZGRjI3Cis6MTAxMUEwMDBBRkYwMkZGRkZGRkZGRUZGRkZGQkI3RTAwRkZGRkYyQkFFCis6MTAxMUIwMDBGRjdEQkZGRkRGRkZGRkY4OUY3RkZGRjE1NUZGRkZGRkMwCis6MTAxMUMwMDBGRDdDM0NGRkYzQzMzRkZGRkZFRkMzRkZERkZGRkZGRkVCCis6MTAxMUQwMDBGMDlGRkZGRkZGRkVGRkZGRkZGRkVGRkZGRjlGQkY3RkJGCis6MTAxMUUwMDBGOTE5NDc4RUU3OUYzRjE3RkZGQzgxQzE3RUYzRDlGOUJDCis6MTAxMUYwMDA3M0RGRjQ3RkZBRkZGRkZGRkI3Rjc3QzdGRkZGRkZGMDhFCis6MTAxMjAwMDAyRkZGRkZGRkZFRjVGN0ZGRkJGRkY3M0ZGQ0JGM0UzRjYxCis6MTAxMjEwMDBFQ0ZGODFBRkZFNEZGM0JCRkZGMDdFRkY2RkZGODdGRjU4Cis6MTAxMjIwMDBCQkZGRDVGQ0ZGN0ZGQzZGRkZFRkU3RkZGRkZBRjAzRjRFCis6MTAxMjMwMDBGRkZGRkZGRUYzQzAwMDAwMDAwMDAwMDAwMDAwMDA4MDgwCis6MTAxMjQwMDAwMDMwMTA2MDIwMDAwODAwMDEyMDgwMDAxMDAwMDQwMDIxCis6MTAxMjUwMDAwMDAwMDAwMDAwMDIwMDgwNDAwMDA4MjAzQ0YwNkZGRjBBCis6MTAxMjYwMDBGRkZGRkVGNUJGRkZGRkZFRkZGRkZGRkY3RkZFM0ZGRjFCCis6MTAxMjcwMDBGRkZGRkZGRkVGRkZGRkYxREZERkZGRkZGRjdGREZGRjdDCis6MTAxMjgwMDBGREJERkZGRkZGRkJERkZGRkZGRkZGNUJGMEZGRkZGRjg5Cis6MTAxMjkwMDBGRkZFRjBCRkJGQkZGRkY3RkJGRkZFRUVGQUZGRkZGRjUxCis6MTAxMkEwMDAzRDNCRkZGRkZFRkJGMUZGQkY3QkZGRkZFRkZGQkZGRkZCCis6MTAxMkIwMDBGRkZGRkZGRkZFRkZGN0VGRkZGQkQwRjBERkZGRkZGRkI5Cis6MTAxMkMwMDBGRUY4MzAwMDAwMDAwMDAwMEIxMDA1MDEwMDA4MDAwMkNECis6MTAxMkQwMDAwMTAxMDAwMDEwMDFDODA4MDAwMDAwMDA0MjAyMDAwMEU3Cis6MTAxMkUwMDAwMDgwMDIwMDAwNDAyNDgwMDBDMUYwM0ZGRkZGRkZGRUFECis6MTAxMkYwMDBGRkZGRkZGRkY3RkRGN0ZBRUZFRUY5RkRGRkY3RkVCRjg3Cis6MTAxMzAwMDAxRkZEOUVGREQxRUZGRkY3N0Y5RkZGRUZGRkY2RkZGRTcyCis6MTAxMzEwMDBGRTdCRkZCREZGN0VGRkZGRkZGMDNGRkZGRkZGRkVGRkY1Cis6MTAxMzIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECis6MTAxMzMwMDBGRkZGRkZGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNCCis6MTAxMzQwMDBGRkZGRkZGRkZGRkZGRkZGRjBBRkZGRkZGRkZFRkZGRjBECis6MTAxMzUwMDBGRkY3RkZGRkZGRkY3RkZGRkZGRkRGRkRGRkZGREZGRjY3Cis6MTAxMzYwMDBGRjVGRjFCRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdCCis6MTAxMzcwMDBGRkZGRkZGRkZGRkZGRkYwREZGRkZGRkZGRUZGRUZGRkJECis6MTAxMzgwMDBGN0ZGRkZGRkZGRkZGRkZGRkYzRkZCRkZGRkVGRkJGRDRGCis6MTAxMzkwMDBGRkYxRkZGRkZCRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjZGCis6MTAxM0EwMDBGRkZGRkZGRkZGRkZGMDJGRkZGRkZGRkVGN0ZGRkZGRjM1Cis6MTAxM0IwMDBGRkZGRkZGRkZERkZGRkZGRkZGRkZGN0ZGRkZGRTdGRkQ3Cis6MTAxM0MwMDBGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjNCCis6MTAxM0QwMDBGRkZGRkZGRkZGRjBGRkZGRkZGRkZFRkZGRkZGRkZGRjJECis6MTAxM0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkNGRkZGQkZGRkJGMTUzCis6MTAxM0YwMDBGRkZGRkJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAxCis6MTAxNDAwMDBGRkZGRkZGRkYwMkZGRkZGRkZGRUZGRkZGRkZGRkZGRkNDCis6MTAxNDEwMDBGRkZGRkZGRkZGRkZGRkZGN0JGRkZGRkY3RkZGRjFGRkVFCis6MTAxNDIwMDBGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVDCis6MTAxNDMwMDBGRkZGRkZGMDdGRkZGRkZGRkVGRkZGRkZFRkZGRkZGRjVDCis6MTAxNDQwMDBGRkZGRkZGRkZGRkZGRkRGNTdGRkZFQkZGQkYxRkZGRkM3Cis6MTAxNDUwMDBGREY3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE2Cis6MTAxNDYwMDBEN0ZGRjA3RkZGRkZGRkZFRkZGRkZGRjdEQkZGREJGRDk2Cis6MTAxNDcwMDBGNkZGRjZGRjNDQkNCQ0JGREY2RkVGMkZGMTNDQkZCQ0ZCCis6MTAxNDgwMDBCRkRGNkZGRjZGRjdEQkZGREJGREY2RkZGNkZGRkZGRjUwCis6MTAxNDkwMDAwMUUyRUZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRjg4Cis6MTAxNEEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjRDCis6MDYxNEIwMDBGRkZGRkZGRkZGRkYzQworOjAwMDAwMDAxRkYKKy8qCisgKgorICogRmlsZSB5YW0xazJiNS5tY3MgY29udmVydGVkIHRvIGggZm9ybWF0IGJ5IG1jczJoCisgKgorICogKEMpIEY2RkJCIDE5OTgKKyAqCisgKiBUdWUgQXVnIDI1IDIwOjI0OjA4IDE5OTgKKyAqCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3lhbS85NjAwLmJpbi5paGV4IGIvZmlybXdhcmUveWFtLzk2MDAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3YTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3lhbS85NjAwLmJpbi5paGV4CkBAIC0wLDAgKzEsMzQyIEBACis6MTAwMDAwMDBGRkYyMDBBNUFERkZGRTlGRkZFRkZCQ0JGRkRCRkVGMjkzCis6MTAwMDEwMDBGRkY2RkY5Q0JGRkRCRkVGMkUzRjZGRjFGREI0RkRCRkFDCis6MTAwMDIwMDBGRjZGRkY2RkZGMEJGRkRCRkZGMkZGRjZGRkZGRkZGRjJFCis6MTAwMDMwMDBGMDZGRkZGRkZGRkVGRkZEREZGRkZGRkZGN0ZGRkZGRjlBCis6MTAwMDQwMDBGQkZGRkZGN0ZGRkZGRkZFRkY3RkYxRkZGRUZGQkZCRkRDCis6MTAwMDUwMDBGRkZGRkZGRkZGRjdGRkZGRkZGRUZGRkVGRkZGRkZGMEM5Cis6MTAwMDYwMDBFRkZGRkZGRkZFRkZGRkZGRkZGRkZGQkZGRkZGRkZGN0Y5Cis6MTAwMDcwMDBGRkZGRjdFRkZGRkZGRkZGRkZGMUZGRkZGRjdFRkZGRjM3Cis6MTAwMDgwMDBGRkZGRkZGRkRGRkZGRkZGRkZGRkZERkZGRkZGRjBERkQxCis6MTAwMDkwMDBGRkZGRkZGRUZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRjkxCis6MTAwMEEwMDBGRkZGRUZGRkYzRkJGRUZGRjFGRkZERkZGRkZGRkZGRjkxCis6MTAwMEIwMDBGRkZGRkZGRkZGRkZGRkZFRkZGRkZGREZGRkYwN0ZGRjAwCis6MTAwMEMwMDBGRkZGRkVGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRjUxCis6MTAwMEQwMDBGRkZGREZGRkZGRkZGN0YxRkZGRkZGREZGRkZGRkZGRjg2Cis6MTAwMEUwMDBGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGMDBGRkZGRjIwCis6MTAwMEYwMDBGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRjkxCis6MTAwMTAwMDBGRkZGRkZGRkZGRkZGMUZGRkZGRkZGRkZGRkZGRkZGNTE3Cis6MTAwMTEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAyRkZGRkZGRkNFCis6MTAwMTIwMDBGRUZGRkZGRkZGRkZGRkZCRkZGRkZGRUZGRjdGRkZFRjg0Cis6MTAwMTMwMDBGRkVGRkY3RkVGRjFGRkVGRkY3RkZGRkZGRkZGRkZGRjBECis6MTAwMTQwMDBGRkZGRkZGRkZGRkVGRkZGRkZGRkYwOUZGRkZGRkZGRTMwCis6MTAwMTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFGCis6MTAwMTYwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFECis6MTAwMTcwMDBGRkZGRkZGRkZGRkZGRkZGRkZGMEJGRkZGRkZGRkVGRkRGCis6MTAwMTgwMDBGRkZGRkZCREZGRUY3RkVGN0ZGQkRGRDM1QUZFRDdENjI4Cis6MTAwMTkwMDBGNzdGQkRGMUJCNURENkY3RkU5NkZGQkRBRkFEQkZFRkZDCis6MTAwMUEwMDA3RjZCN0ZGQkQ2RkVGN0ZGMTBFRkZGRkZGRkZFQkVFRjdBCis6MTAwMUIwMDBGRkZGREJGRkY2RkZGNkZGRkRCRkZEQkZGRjdGRkY3RjA5Cis6MTAwMUMwMDBERkRCRjFGRDM1RkY2RkZGNkZGRkRCRkZDQkZGRjZGRkRFCis6MTAwMUQwMDBGMkZERkRCRkZGRkZGRkQwRUZGRkZGRkZGRUZGRkZGRkMwCis6MTAwMUUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRjU1RkZDQ0MwM0ZGRkZCCis6MTAwMUYwMDBGRkYxMjRGMEZGRkZDRkVGM0ZGRkYwRkZGRkZGRkMzRkQ5Cis6MTAwMjAwMDBGRkZGRkZGRkZGRkZGMENGRkZGRkZGRkVGRkZGRkZGRjNFCis6MTAwMjEwMDBGRkZGRkZGRkZGRkZGRkZGRkY1NUZGQ0NDMDNGRkZGRkNBCis6MTAwMjIwMDBGMTAwRjBGRkZGQ0ZERkZGRkZGMEZGRkZGRkZDM0ZGRjFDCis6MTAwMjMwMDBGRkZGN0RGRkZGRjBGRkZGRkZGRkZFRkZGRkZGRkZGRjYwCis6MTAwMjQwMDBGRkZGRkZGRkZGRkZGRkZGREZGRTdGREZGRkZGRkZGMThECis6MTAwMjUwMDBGRkNGRkZGM0ZGOTdGRkZGOEZFN0ZGRkZGQzcxRkZGRjZCCis6MTAwMjYwMDBGRkZGRkZGRkYwRUZGRkZGRkZGRUY1RkZCRkZGRkZGRjA4Cis6MTAwMjcwMDBGRkZGRkZGRkZGRkZFM0Y3RUZGRkZGRkM3QkZGRjEzRjE3Cis6MTAwMjgwMDBGRkVGRkZDRkUzRTNGRkZGRkZGRjNGRkZGRkZGQkZGRkY2Cis6MTAwMjkwMDBCRkZGREFGMDdGRkZGRkZGRkVGMkMwMDAwMDAwMDAwMEFBCis6MTAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDRECis6MTAwMkIwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDNCCis6MTAwMkMwMDAwMTNDRjBBRkZGRkZGRkZFRkRCRkZGRkZGRkZGRkZGRkExCis6MTAwMkQwMDBGRkZGRkZGRkZGREJGRkZGRkZGRkZGRkZGMUZGOUZGRkMwCis6MTAwMkUwMDBGRkZGRjdGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM2Cis6MTAwMkYwMDBEQkYwN0ZGRkZGRkZGRUYwQkJERkZGRkZGRkZGRkZGRjM1Cis6MTAwMzAwMDBGRkZGRkZGRkZGRkZGRkVGRkJERkJGRjFGRUZERjdGRjhBCis6MTAwMzEwMDBGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRjc3RkRGMjg1Cis6MTAwMzIwMDBGMDFGRkZGRkZGRkVGODM4MDAwMDAwMDAwMDAwMDAwMzkwCis6MTAwMzMwMDAwMDAwMDAwMjAwOTAwMDAwMDAwQzAxMDAwMDA0MjQwMEY2Cis6MTAwMzQwMDA0MDAxMDAwMDAwNDAwMDAwMDAwMDAyMDAwMDAxQzBGMDc5Cis6MTAwMzUwMDA0RkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjVFCis6MTAwMzYwMDBGRkZGQkZGRkZGNkZGRkRGRkZEMUZGRkVGRkZGRkZGRkJDCis6MTAwMzcwMDBGRkZGREZGRkZCRkZGQkVGRkZGRkVFRkZGRjdGRjBERjg1Cis6MTAwMzgwMDBGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdFCis6MTAwMzkwMDBGRkZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRjdCCis6MTAwM0EwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwOEZGRkRDCis6MTAwM0IwMDBGRkZGRkVGRkZGRkZGNUFERkY2OTJBRUQ2QkZCREYzQUE0Cis6MTAwM0MwMDBEQ0Y0OTZFRUIzM0QzNUMxQkJEREZFRjZGRUQ2QjVBRDMxCis6MTAwM0QwMDBCRkE1QUQ0OTJGNEYyQkRBNUZGRkZGRkZGMDJGRkZGRkM3Cis6MTAwM0UwMDBGRkZFQkZGRkZGRkI1QkY3RjZGRkY2RkZGREJGRkRBNUJFCis6MTAwM0YwMDBGMzZGRjM2RUZBN0JEMUZEQjU3NzZGRTk2RkZGREJGQjJGCis6MTAwNDAwMDBEQkRGRjZGRkY2RkZGRDNGRkVGN0ZGRDA0RkZGRkZGRkZDCis6MTAwNDEwMDBGRUZGOUZGRkZGMEZGRkMwM0Y5QzAzRkZGRjhCQTVGRTZBCis6MTAwNDIwMDA4MDNFQzJCRkFDQjEyNEZGRkZGRkZGRkZGRjBGRkZBMzYxCis6MTAwNDMwMDBGRkZENkJGRkZGRjBBNUZGRkZGRkYwQUZGRkZGRkZGRTJCCis6MTAwNDQwMDBGRkZGRkZGRjBGRkZDMDNGRDQ2QkZGRkZEQkZGRkU4NjA4Cis6MTAwNDUwMDBCRkMyQkYzMEExMjRGRkZGRkZGRkNDRkYwRkZGQTNGRkYwCis6MTAwNDYwMDAwNTZCRkZGRkYwQTVGRkZGRkZGMDdGRkZGRkZGRkVGRjIzCis6MTAwNDcwMDBGRkZGRkJDN0ZGQzRGRkZGN0ZGRkVDRkU3RkRGRDhCOUE0Cis6MTAwNDgwMDA0N0ZDMzZDMURGRkZGRkY5RkZGM0ZGRjdGRkZDRkZGRDdECis6MTAwNDkwMDAzRkZGRkZGRjNGRkZGRkZGRjA3RkZGRkZGRkZFRjVGRjg2Cis6MTAwNEEwMDBGRkZGRkZGRUZGRkY3RUJEM0ZGRjJCRkUyRkY1QTNGQ0VFCis6MTAwNEIwMDA1QkZFNjE5RjdGRUZGRkZGQTdGQkZGRkZGQUZFRkYzM0FECis6MTAwNEMwMDBGMUZGQkZGRkZGRkZGQUYwN0ZGRkZGRkZGRUYxQzAwMDZCCis6MTAwNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDMwMjQwNDg0Cis6MTAwNEUwMDAwMDAxMDA4MDQwMDAwODAwMDAwMDAyMDEwMTAwMDIwMDNECis6MTAwNEYwMDAwMDAwMDAwMDAxM0RGMDJGRkZGRkZGRkVGREJERkZGREVFCis6MTAwNTAwMDBGRkZGRkZGRkZGRkJGRkZGN0ZGNkVGQkZGN0ZGNzNFQjgwCis6MTAwNTEwMDBGMUZGRkZGRkRGRkZGRkZGRkZGRkY5RkZGREZFRkZGRjIyCis6MTAwNTIwMDBGRkZGRkZGRkQ5RjBERkZGRkZGRkZFRjBCRjdGRkZGRjAwCis6MTAwNTMwMDBGRjdGRkZGRkRFRkZGRkVGRERERTc3RjJGQkVERTdGMTkwCis6MTAwNTQwMDA3M0ZERkRERkZGN0RCRURGRkZGQkZGRUZGRkVGRkZGRjcyCis6MTAwNTUwMDBGRkZGRkZEMEYwQkZGRkZGRkZGRUY4MzAyMDAyMDAyMkI4Cis6MTAwNTYwMDA0MEMwMDAwMDAwMDgwMDAyNDEwMjEyMDAyMTg3ODEwMDAzCis6MTAwNTcwMDAwMDgwMDQwQjI4MDFCMDAwODIwMDQwMDAwMDAwMDAwMDUxCis6MTAwNTgwMDAwMDAwQzFGMERGRkZGRkZGRkVGRkZGRkZGRkZGRkRGRkU5Cis6MTAwNTkwMDBGN0ZGRkU3RkVENzlGRkRFRUI3Rjc0RjdGN0UxRjlGRjAwCis6MTAwNUEwMDBGNjVGN0ZGRkZGRkZEN0RCRUZGRkJCRkZGRkZGQ0NGRjU3Cis6MTAwNUIwMDBGRkZGRjBDRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRjhCCis6MTAwNUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMUZGRkZGRjQ5Cis6MTAwNUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjJCCis6MTAwNUUwMDBGRkYwMEZGRkZGRkZGRUZGRkZGRkZEM0RDRDQ5N0Y2RkQ3Cis6MTAwNUYwMDAyQkJBNUNEMkRBRjZGMzNFRjdGRkJERjFGQURGRkVGNzc1Cis6MTAwNjAwMDBDQ0Y2QkJBNUIzQURCRjZGN0Q2RjZCREJERkJERkZGRTZGCis6MTAwNjEwMDBCMDVGRkZGRkZGRkVCRkZGRkZGQkRCNTdGNkZFOUZENTdFCis6MTAwNjIwMDBCN0ZGQUZFNTNGRkZGRjZGRkZEQkYxRkRCRkZGNkY2OTc2Cis6MTAwNjMwMDA2Q0RGREFERkNCRkZGNkZGNzZGREZEQkZGRkZGRkZEMEZCCis6MTAwNjQwMDAzRkZGRkZGRkZFRkZGRkZGRkZGREJEMDgwMzg5NEY1QTdECis6MTAwNjUwMDAwRkYwRkZGOEJGRkZGRkZGRkZGMTVBRkZGRkZGRkZGM0FGCis6MTAwNjYwMDBGQUEwRjBGMkJGRkZGRkZGRkZGRkZGRkZGRkZGRjBGRjY5Cis6MTAwNjcwMDBGRkZGRkZGRUZGRkZGRkZGRkNGRDAwNkJGRkZGNUEwRkI4Cis6MTAwNjgwMDBGMEZGRkZGRkZGRkZGRkZGRjE1QUZGRkZGRkZGQjNGNTkyCis6MTAwNjkwMDA1MEYwRjBGRkZGRkZEN0ZGRkZGRkZGRkZGRkYwN0ZGRkVFCis6MTAwNkEwMDBGRkZGRkVGRkZGRkZGREJDRkZFNEU3NzFGRkY5QzRGNEFECis6MTAwNkIwMDA3RjdGQ0ZGRkZGRkZGRkYxRkZGRkZGRkJGNzczQkYxNDRCCis6MTAwNkMwMDBGRkU2RkZGRkUxN0RGRkZGRTdGRkZGRkZGMDNGRkZGRkRBCis6MTAwNkQwMDBGRkZFRjVGRkZGRkVEMkZBRkZDNEY0NUNCRkZBRkZGRjk2Cis6MTAwNkUwMDBFQzdFQkZGRkZGRkZGMUZGRkZFRkZGRkY2QkRCRkZERkU0Cis6MTAwNkYwMDBGOUZCQkZGRkYxRkZCRkZGRkZGRkZCRjBCRkZGRkZGRkY1Cis6MTAwNzAwMDBGRUYzQzAwMDAyMDAwMDAwMDA4MjAwMDAwMDAwODAwMDM0Cis6MTAwNzEwMDAwMDAwMDA0MDAwMDEwMDAwMDAwMTA4MjAwMDAwMDAwMDZGCis6MTAwNzIwMDAwMTAwMDEwMDAwODAwMjAwMDEzQ0YwNUZGRkZGRkZGRUJFCis6MTAwNzMwMDBGREJGRkZGRkZGREZGRkZGRkZGRjdGRkZERkZGRUZGRkRCCis6MTAwNzQwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkY3RkZGQkZGRkRGRkQ1Cis6MTAwNzUwMDBGRkZGRkZGRkZGRkRGRkZGQzNGMEFGRkZGRkZGRkVGMDU2Cis6MTAwNzYwMDBGRkRGRkZGRkY3MjNGRkZGRkRGRkVGRkZGRTdGN0RGN0JBCis6MTAwNzcwMDBGRUZGN0Y3MUZGRkI3RkZGRkZGRjZFRkRGN0ZERkZCRkY5Cis6MTAwNzgwMDBGRkJGRjlGREZGREZFRkYwRjBBRkZGRkZGRkZFRjgzMDM2Cis6MTAwNzkwMDA0MDAxMDA4MzAwMDAwMDBDMDYwODA0MjYyNjAwMDAwNjI1Cis6MTAwN0EwMDAwMzAwMDEwMDAwMDAwMDA0MDA3MDA4ODAwMDIwMDEyMDA4Cis6MTAwN0IwMDAwMDAyMDAzMDAwMDBDMUYwNUZGRkZGRkZGRUZGRkZGRkZGCis6MTAwN0MwMDBGRkZGN0IzRkY3RkZEN0ZFRkVGQkZFM0JGRUJERkYyRjhCCis6MTAwN0QwMDBGRjcxRkZGQjdGRTdGRkY5RUZGRkQ3RkFGRkI3QkJGRTIzCis6MTAwN0UwMDBGRkZGNzRGRkY3RkZGMENGRkZGRkZGRkVGRkZGRkZGRkVDCis6MTAwN0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA5Cis6MTAwODAwMDBGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA2Cis6MTAwODEwMDBGRkZGRkZGRkZGRjA4RkZGRkZGRkZFRkZGRkZGRkZCNUIyCis6MTAwODIwMDBCRDZGN0NFQjdGRkJEQkQzNEJFRUQ2RjZCN0ZEQUNBMTA3Cis6MTAwODMwMDBGQkRGRkVGN0Y0OTZCREI0QzVBNUFGNkY2OTRGN0ZCQTc1Cis6MTAwODQwMDBEQkZGRkZGRkYwM0ZGRkZGRkZGRUJGRkZGRkZGREJGRjEwCis6MTAwODUwMDBGNkZGRjZGRkJEQkZBNUJGRkY3RDdGRUZGRkZCRjFGREZDCis6MTAwODYwMDBCRkZGNkZGRjZCN0FEQkZGREJERkY2RkVCNkZERkRCRjgwCis6MTAwODcwMDBGRUY3RkZEMEVGRkZGRkZGRkVGRkZGRkZGRkY0MkZGRkFDCis6MTAwODgwMDBGQzQzNkJGRkZGRkYwREZGRkMzMzNGRjA1RkYxRkZGRjA5Cis6MTAwODkwMDBGRkZGRjlERUYwNENGRTc3QUZGRkZGRUZGRkYwRkZEQjZECis6MTAwOEEwMDBGRjVGRjBFRkZGRkZGRkZFRkZGRUY3RkZGMDJGRkZGRDAyCis6MTAwOEIwMDA0MzdGRkZGRkYxMEZGRkZDMzMzRkZGQUZGMUZGRkZGRjZGCis6MTAwOEMwMDBGRkY2RDdGRkJDRkRCREZGRkZGRkZGRkZGMEZGRkZGRkZGCis6MTAwOEQwMDBGRkYwRUZGRkZGRkZGRUZGRkZGRkZGRkNGRkZGRkJGMTVECis6MTAwOEUwMDBCRkZGRjlGRENGRjI3MEZGMUY5RkYzRjFGRkZGRkZGRjg2Cis6MTAwOEYwMDBGQ0Y3RkYxMzlGRkNGRkZGODRGN0ZGRkY0N0ZGRkZGRjlECis6MTAwOTAwMDBGMEJGRkZGRkZGRkVGNUZGRkZGRkYxRkNGRkZFRkU3OUVBCis6MTAwOTEwMDAzRkZGMUQ0NkNGRkZDRkZDN0JGRkYxRkZGRkZGRkZFRDQ5Cis6MTAwOTIwMDBGM0FCRkZDQkZGRjhGRkZDRjVGRkJGRkZGRkZGRkFGMEQzCis6MTAwOTMwMDA4RkZGRkZGRkZFRjNDMjAwMDAwMDAwMDAwMDAwMDEwMDc3Cis6MTAwOTQwMDAwMDAwMjAwMDIwMDAwMDA0MDgwMTAwMDAwMDAwMDAyMDNBCis6MTAwOTUwMDAwQzAwMDAwNDAxMDAwMTAwMDA4MDAwMDAwMTNDRjA3RjU5Cis6MTAwOTYwMDBGRkZGRkZGRUZEQkZGRkZGRkRGRUZGRkZGRkZGRkVGRkRFCis6MTAwOTcwMDBERkZGRkZGN0ZGRkZGRkVGRjFGRkZGRkZGRkZGRkZFQkUxCis6MTAwOTgwMDBGRkRGRkZGRkZCRjc3RkZGRkVGRkZGQkZEQkYwRkZGRjk3Cis6MTAwOTkwMDBGRkZGRkVGMEZGRkZGRkZGRkZERkZGRkZGRjdGRjdGRjFGCis6MTAwOUEwMDBCRkJGQ0ZGRkZGRkYzRUYxN0ZGRkZGRUZGRkZGRkZGRTY3Cis6MTAwOUIwMDBGRkZERkZCRkJERkVGRkZCRjdERkZCRDBGMDlGRkZGRjlBCis6MTAwOUMwMDBGRkZFRjgzMDIwMDA0MDAxODBDMDMwMDAwMDIwMDAxMDAxCis6MTAwOUQwMDA1MDg4MjAwMDAwMTMwMTAwMDAwMDAwMDAwMDEwMDAwMEZCCis6MTAwOUUwMDAwMDAwMDE4MDA4MDAwMEEwMDAxMEMxRjBFRkZGRkZGRjMxCis6MTAwOUYwMDBGRUZERUY3RkZGRkZCRkZGRjdGRkVGRkJGRDc3RUZCRkQwCis6MTAwQTAwMDBGNzdGRkZGRkJGRDE3RkZGRkZGN0ZGRkZGRkZGQUZGRkM0Cis6MTAwQTEwMDBERkY3RkJGRkZERkZGQ0ZGRkRGRkYwRkZGRkZGRkZGRTI5Cis6MTAwQTIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ2Cis6MTAwQTMwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ0Cis6MTAwQTQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGMDVGRkZGRkZGRkVGRjY2Cis6MTAwQTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZERkZGRkZGRkM2Cis6MTAwQTYwMDBGRkZGRkZGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE0Cis6MTAwQTcwMDBGRkZGRkZGRkZGRkZGRkZGRTAzRkZGRkZGRkZFRERGRjg4Cis6MTAwQTgwMDBGRkZGQTVGRDZGN0Q2RDdGNTJERjVBNEJFRUI2RUVGMjk0Cis6MTAwQTkwMDBCQkFDQTE1QjRERDZGN0ZFQjJCRDM1QjVCNURENkY3RjAyCis6MTAwQUEwMDBFOTVGNTJERkJERkZGRkYwREZGRkZGRkZGRUJGRkZGRjhCCis6MTAwQUIwMDBGRkRCRkVGNkZGRjZGRkZEQkZGREI1QkZGOTdGNkZGRjYxCis6MTAwQUMwMDBEQkYxRkRCRkZGNkZGRjY5N0ZEQkZGRDNGRkY2RkVGMkI3Cis6MTAwQUQwMDBGRkFEQkZGRkZGRkZEMERGRkZGRkZGRkVGRkZGRkZGNTEyCis6MTAwQUUwMDAzMDBGRkZGRkZENkJDQUZGRjAwRkQ2QkZDRjNGRkZGRkY4Cis6MTAwQUYwMDBGMUZGRkZGRkNBRkVCRkZGRjAwNUFGMEZGRkZDRjBDRjE1Cis6MTAwQjAwMDBGMEZGRkZGRkZGRjBFRkZGRkZGRkZFRkZGRkZGRjUzMEZECis6MTAwQjEwMDAwRkZGRkZGQzNGQ0FGRjBGMEZENkJGRkZGRkY1NUZGMUNFCis6MTAwQjIwMDBGRjhCRkZDM0ZGRkZGRkZGRkZGRjBGRkZGQ0YwQ0ZGMEM2Cis6MTAwQjMwMDBGRkZGRkZGRkYwM0ZGRkZGRkZGRUZGRkZGRkZGQ0ZGRkM1Cis6MTAwQjQwMDBGRkJGOUYzRkZFRkNGRjRGRkZGRkZGRkZGRkY3RjFGRkRGCis6MTAwQjUwMDBERkZFN0UzRjlGRjRGQzdGRkNGRkZGM0ZGRjNGRkUzRjM5Cis6MTAwQjYwMDBGRkZGRkZGMDRGRkZGRkZGRkVGNUZGRkZGQkZGRkVGRjY0Cis6MTAwQjcwMDBGRkZGRkZCRkZCRkZGOEVERkY4RkZGQkJGRkIxRjNFRjAwCis6MTAwQjgwMDA4RkY3RkZGRkRCRkZGRkZGRUZCRkZENzlCRkJGRkZGRjY5Cis6MTAwQjkwMDBGRkZCRjBERkZGRkZGRkZFRjNDMDAwMDAwMDA0MDAwMERBCis6MTAwQkEwMDAwMDAwMDAwMDAwMDAwMDgwMDAwNDA4MDgwMTAxMDA5MDFGCis6MTAwQkIwMDAwMDAwMDAwNDAwMDgwMDAwMDAwMDA4MDAwNDAwMDAwMTFDCis6MTAwQkMwMDAzQ0YwREZGRkZGRkZGRUZEQkZGRkZGRkZGRkZGRkZGRjZBCis6MTAwQkQwMDBGRkZGRkZGRjlGRkZBRkRGRkZGRkZGRjFGRkZGRkZGRjAzCis6MTAwQkUwMDBCRkVGRkZGRkZGRURGRkZGRkZFRkZGQkZGRkZGRkZDMzAzCis6MTAwQkYwMDBGMDNGRkZGRkZGRkVGMEZGRkRGRkZGRkZGQkZGQkJGRjJFCis6MTAwQzAwMDBGRkZGN0ZGNkZGN0ZGQkZERURGRkYxRkZGRTdGRkZGRkE0Cis6MTAwQzEwMDBGRjVGRkZGN0ZGN0VGRkZERkZFRkZGRkZGRkVGRjBGMDRECis6MTAwQzIwMDA4RkZGRkZGRkZFRjgzMDgwMDAwNDAwMDA0MDAyMDAwMzQ5Cis6MTAwQzMwMDAwMDA1MDQyMDAwMDAwMUQwMDA4MTAwMjAwNDA0MDAwMDExCis6MTAwQzQwMDA4MTA0MDg4MDEwMDBDMDAwMDAwMDIwMDAwOEMxRjA2RjdGCis6MTAwQzUwMDBGRkZGRkZGRUZGRkY3RkZGRkZGRkZGRjNGREZGRURGQzQ4Cis6MTAwQzYwMDBGRkZGOUZGQkZERkZGRkZGRjFGRkZGN0ZGQjNFRkY5RkFECis6MTAwQzcwMDBGRkZGRkZGRkZERjlGRkZGRkZGREZGRkZGRkYwNkZGRjJECis6MTAwQzgwMDBGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjc1Cis6MTAwQzkwMDBGRkZGRkZGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRjcyCis6MTAwQ0EwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMENGRkZGRjkzCis6MTAwQ0IwMDBGRkZFRkZGRkZGRkRCREZGRUY3Q0VCN0ZGQkRCRkFEQzAwCis6MTAwQ0MwMDBFRUY3RjZEN0Y1MkRBMUJCRERFRUY3NTRGN0ZCMkNCNTBCCis6MTAwQ0QwMDBCNEJENkI2RkVGNkZCQkRGRkZGRkZGRjAxRkZGRkZGRkM4Cis6MTAwQ0UwMDBGRUJGRkZGRkZGRkJGRkY2RkZGNkZGRkRCRkZGQkZFRkZECis6MTAwQ0YwMDA2RkZGNkZGQURCRjFDNUJERjU2RkZGNkZDQURCRkZEQjdFCis6MTAwRDAwMDBGQkY2OTdGNkZGRkRCRkZFRjdGRkQwOUZGRkZGRkZGRTRDCis6MTAwRDEwMDBGRkZGRkZGRkZGRkZGRkZGOEI3RkZGRkZFNzYzRkZGRjhCCis6MTAwRDIwMDBGRkZDNzdERkYxREJGRkQ2QTgzRkZGRkYwODJGRjBGRkM2Cis6MTAwRDMwMDBDM0ZGRUJGRkZGRkZGRkZGNUZGMEVGRkZGRkZGRkVGRkQzCis6MTAwRDQwMDBGRkZGRkZGRkZGRkZGRjhCRkZGRkZGRkZGRkZGRkZGRjI3Cis6MTAwRDUwMDBGQ0ZGQ0ZGMURCRkZENkE4M0ZGRkZGMDgyRkYwRkZDMzVBCis6MTAwRDYwMDBGRkVCRkZGRkZGRkZGRkZGRjA1RkZGRkZGRkZFRkZGRjU3Cis6MTAwRDcwMDBGRkZGRkZGRkZGRkZGNUJGRkZDQUZGOUZGRkZBQjlFN0M1Cis6MTAwRDgwMDA5RkYzODFGRkZGRkM3M0Q3RkZGRjc3RkZGREZGRkNGRkExCis6MTAwRDkwMDBGRkZGRkZDRkZGRkZGRkYwMUZGRkZGRkZGRUY1RkZGRjhECis6MTAwREEwMDBGRkY3REVGRkZFN0VGRkJGRkZCRkYxQjNGRkZGRTNGQkY4Cis6MTAwREIwMDBGRkUxMUY3RkZGRjg3OEZGRkIxRUZGRjdGRUU3RkZGRjU1Cis6MTAwREMwMDBGRkJGRkZGRkZGRkFGMDRGRkZGRkZGRkVGM0MwMDAwMDgxCis6MTAwREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDQwMEJGCis6MTAwREUwMDAwMTgwNDA0MDIwMDAwMDA4MDAwMDAwMDAwMzAwMDAwMEQ3Cis6MTAwREYwMDA4MDAwMDAwMTNDRjBBRkZGRkZGRkZFRkRCRkZGRkJGRkU3Cis6MTAwRTAwMDBGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkVGRjdGMTE5Cis6MTAwRTEwMDBGREZGRkZGRkRGRkZFRkZGRkZGRkZGRkZGRkZGN0ZGRjk0Cis6MTAwRTIwMDBGRkZGRkZEQkYwOEZGRkZGRkZGRUYwRkZERkZGRkY3RjI1Cis6MTAwRTMwMDBGRkZGRkZCRUQ3RkZFREJEN0VCRkZFRjY3RkJGNzFGRjk4Cis6MTAwRTQwMDBGRkRBRkZGOUZGQkY3RkZFRkY2RjdGRkZGRkZGRkZGRkFFCis6MTAwRTUwMDA3RkZGRDBGMENGRkZGRkZGRkVGODMwNDIwMDAwMDAwMDIwCis6MTAwRTYwMDA4MEMxMDAwMDkwMDBDNDAwMDAxMjIwNDMyMjgxODQwMDUxCis6MTAwRTcwMDAwMDE0MDAwMTAwMDg4MDAwMDIwMDAyMDAwNDAyMDAwMENCCis6MTAwRTgwMDAxMEMxRjAxRkZGRkZGRkZFRkZGRkZERkZGRkRERkVGRkI0Cis6MTAwRTkwMDBCNjc2RTVCQ0Y5RjdBRjVGQkZGQ0RGQ0ZGMUZGRUY3OUM2Cis6MTAwRUEwMDBGRkJERkZFRkZGRkZGNzZGNUZGRkZGRkRFRkVGQkZGRjNFCis6MTAwRUIwMDBGRkYwOUZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkIyCis6MTAwRUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRjQwCis6MTAwRUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjIyCis6MTAwRUUwMDBGMEZGRkZGRkZGRkVEQkZGRkZGRDJERkY2OTJBRUY3NzFECis6MTAwRUYwMDBCQkRENUFERkY2RjZENkY3N0RCREQxQjI0QUQ2QjJCRTFCCis6MTAwRjAwMDA5N0Y1QkRCM0FERkZFRjdGNjk2QkZCREZGRkZGRkZGMDMwCis6MTAwRjEwMDAyRkZGRkZGRkZFQkZGRkZGRkZEQkZGRjZGRTlGRDRCRkVCCis6MTAwRjIwMDBFREFGRkY2QjZGRjdGRkREREIzMUZEQkZGRjZGN0ZGRkM1Cis6MTAwRjMwMDBGRkRCRkZDQkRGRjZGRkY2RkZGREJGRkVGN0ZGRDA4RjM1Cis6MTAwRjQwMDBGRkZGRkZGRUZGRkZGRkZEMUZGRjQ2MkY5RkZGRkZGRjdECis6MTAwRjUwMDBBNUZGRkZGRkRGQjdGRkZGRjFGRkZGRkZGN0U5NkFCRjY0Cis6MTAwRjYwMDBGRkZGRkRGRkZGRkQ1NTU3RkZGRkZGRkZBRkYwNEZGRkY2Cis6MTAwRjcwMDBGRkZGRkVGRURGRkZGRDFGRkY0NjJGOUZGRkZGRkZBNUM4Cis6MTAwRjgwMDBGRkZGRkZDMDM3RkZGRkYxOTk4RURDN0ZFOTZBQkZGRkVCCis6MTAwRjkwMDBGMDBGRkZGRkZENTU1N0ZGRkZGRkZGRkZGMDBGRkZGRkIzCis6MTAwRkEwMDBGRkZFRkZGRkZGRkYwN0ZGQzBCRUZGRkZDRkVGOUZGRjZBCis6MTAwRkIwMDBGRkZCRkZFN0ZGRkZBMUUzQ0UzQzU4M0ZGM0ZGRkRFRjUwCis6MTAwRkMwMDBGOUZGRkZGN0YxN0ZGRkNCRkZGRkZGRjAyRkZGRkZGRkUwCis6MTAwRkQwMDBGRUY1N0ZGRkYwRkZGRUZGQzQ3NUU3QjlGRkZGRkZFRkVGCis6MTAwRkUwMDBGRkM3MzczQkZGRjAxMzlFMEZGNEZGRkVGQkZGRkZGOTM3Cis6MTAwRkYwMDBGQ0ZGRkZGRkZGQkZGRkZGRkZGQUYwRUZGRkZGRkZGRTY5Cis6MTAxMDAwMDBGM0MwMDEwMDAwMDIwMDAyMjIwMDAwQzA0MDAwNDAwMEM2Cis6MTAxMDEwMDAwNDA4MDQwQTAxMDExMDIwMjAwMDAwMDQwODA4MDQwMDRDCis6MTAxMDIwMDAwMDAwMDAwMDAxMDAwMDAxM0NGMENGRkZGRkZGRkVGRENCCis6MTAxMDMwMDAzRkZGRkZGRkZGRkZGRjdGRkY3RkZGN0ZGRkNGOURGRjkyCis6MTAxMDQwMDBGRkY3RkRGMUZGRkZGRkVFQkZGRkZGRkZGRkZFRkZGRjFBCis6MTAxMDUwMDBGRkZGRkZGRkZGRkZGRkRCRjA2RkZGRkZGRkZFRjBGRjczCis6MTAxMDYwMDBGRkZGRjdGN0ZGRkZGRUJGRjdGRkZGNUJGRkJGRjdGRkQ1Cis6MTAxMDcwMDBGRDdGNzFGREZGRURGN0ZFRUZGRkZGN0ZGRkZGRkZGRjNECis6MTAxMDgwMDBGRkZGRUZGRjdGRkZEMEYwRkZGRkZGRkZGRUY4MzAxMTAzCis6MTAxMDkwMDAwMDQ4NjA0MDgyNjAyNDYwMDBDQzAwODAwNDAxMDAwMEIxCis6MTAxMEEwMDAxNDAxMEMwNDAwMzAwMDAwMDAwODA4MDAwMTAwQzIwMDE4Cis6MTAxMEIwMDAwMDAyMDA4MDAwQzFGMDVGRkZGRkZGRkVGRkZGRkZGRkE3Cis6MTAxMEMwMDBGNzdCRkZGM0VCQkZGRkY3RkZGRkZGRTc1RDNGRkZGNkE3Cis6MTAxMEQwMDBEMUZERkZFQkY3M0RGRkZGRkY1RkZGN0Y3RkYzRkZGRkRBCis6MTAxMEUwMDBFRkZEQkZGRkZGRjA1RkZGRkZGRkZFRkZGRkZGRkZGRjEyCis6MTAxMEYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTBFCis6MTAxMTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGCis6MTAxMTEwMDBGRkZGRkZGRkYwREZGRkZGRkZGRUZGRkZGRkY1QjVERjgzCis6MTAxMTIwMDA2RjdENjk3RkZCREY1MjVGRjZGN0ZFRjZGM0JEQjFEQTQ0Cis6MTAxMTMwMDBDREZFRjZFRUQyQkRBNUFGQkRGRjZGN0NFQjJCRkFEQThDCis6MTAxMTQwMDBGRkZFREZGMDRGRkZGRkZGRkVCRkZGRkZGRkRCRkZGNkZECis6MTAxMTUwMDBGRkY2RkZCREJGQ0RCRkVCNkZGNzZGREZEQjUxRkRCRDBFCis6MTAxMTYwMDBGRjZGRkY2RkZCNUJGRkRCRkZGNkZFRjZGREZEQkZGRUQzCis6MTAxMTcwMDBGN0ZGRDBGRkZGRkZGRkZFRkZGRkZGRkE1MEZGRkZGRjZCCis6MTAxMTgwMDBGMDZGRkZGRkYwOTZGRkZGQzYyQkZGRkZGMUZDRkZGRkE0Cis6MTAxMTkwMDBGN0RCQzNGRjAwRkZGRkZGRkZGRkMxNEZDM0ZGRkZGRkYwCis6MTAxMUEwMDBBRkYwOUZGRkZGRkZGRUZGRkZGRkY1QTBGRkZGRkZGMDg3Cis6MTAxMUIwMDA2RkZGRkZGMDk2RkZGRkM2MkJGRkZGRjE1QUZGRkZGRjA3Cis6MTAxMUMwMDBGM0MzRkYwMEZGRkZGRkZGRkZDMTRGQzNGRkZGRkZGRkEwCis6MTAxMUQwMDBGMENGRkZGRkZGRkVGRkZGRkZGRkZDRkZGRjlGRjA3RjUxCis6MTAxMUUwMDBGRkY5RkM0RkYzRkYyN0VCRkZGQzgxRkM3RkZFN0JGRjQ5Cis6MTAxMUYwMDBGN0ZGMTI3RkZGRkZGRkZGMThGRkZGRkZGRkZGRkZGMDZBCis6MTAxMjAwMDA3RkZGRkZGRkZFRjVGRkZGRkZERkZFRkZGQzdFN0ZCRkRFCis6MTAxMjEwMDBGRkZGQUZFRkZGREZERkZCRkZGMUMzRkU2RkYxQ0YzRjVCCis6MTAxMjIwMDBGQkZGRkZDRkZFRkZGRkZFN0ZCRkZGRkZCRkZBRjBERjM4Cis6MTAxMjMwMDBGRkZGRkZGRUYzQzAwMDAwMDEwMDAwMDAwMDAxMDAwMEZFCis6MTAxMjQwMDAyMDAwMDEwMDEwMDAwMDAwMDEwMDAyMDAwMDAwMDAwMDZBCis6MTAxMjUwMDAwMDAwMDAwMjAwMDA4MDAwMDI4MDAwMDIzQ0YwMkZGRjJFCis6MTAxMjYwMDBGRkZGRkVGREJGRkZGQkZERkZGRkZGRkZGRkZGRkZGRkQ3Cis6MTAxMjcwMDBGRkZGRkZGRkZGRkZGNUYxRkY3RkZGRkZGRkZGRUZGRjI2Cis6MTAxMjgwMDBGRkZGRkZGRkZFRkZGRkZGRkZGRkZGREJGMDJGRkZGRjcyCis6MTAxMjkwMDBGRkZFRjBGRkZGRkZGQkZGQkZGRkZGRkZGRkY3QkZGQkZFCis6MTAxMkEwMDBGRkZGRkZERkY3RkZGMUY3QkZGQkZGRkZGRjdGREVGRjcxCis6MTAxMkIwMDBGRkZGRkZGRkZGRURGN0ZGRkY3RkQwRjAzRkZGRkZGRkQ2Cis6MTAxMkMwMDBGRUY4MzAwMDAwMDAwMDQwMDAwMDAwMDBFMDAwMDA4MDU4Cis6MTAxMkQwMDAyMDAxMDE5MjAwMDEwMTAwRTAxQzYwMjAzMDA4MDgwMDlDCis6MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDgwMDBDMUYwNkZGRkZGRkZGRTYzCis6MTAxMkYwMDBGRkZGRkZGRkZGREJGRUZGRkZERkZGRkM3RkZCQkZGRjBBCis6MTAxMzAwMDBGRkZGRkZGRkYxRjZGRkY3N0UzRkZGN0ZGRkZGRkZGN0Q1Cis6MTAxMzEwMDBGRkZGRkZFREZGREZGRkI3RkZGMDNGRkZGRkZGRkVGRjI3Cis6MTAxMzIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECis6MTAxMzMwMDBGRkZGRkZGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNCCis6MTAxMzQwMDBGRkZGRkZGRkZGRkZGRkZGRjBGRkZGRkZGRkZFRkZGRkJECis6MTAxMzUwMDBGRkZGRkZGRkRGRkZGRkZGREZGRkZGRkZGRkJGRkZERjNECis6MTAxMzYwMDA1N0VGRjFGREZFN0ZGRkZGRkZGRkZGRkZGRkRGRkJGRkZBCis6MTAxMzcwMDBGRkZGRkZGRkZGRkZGRkYwN0ZGRkZGRkZGRUZGRkZGRjBECis6MTAxMzgwMDBGRkZGRkY3RkZGRkZGRkZGRkZGRkZGRkZGQkZGREZGRjExCis6MTAxMzkwMDBGRkYxRkRGRjdGQkZGRkZGRkZGRkZGRkZGRkZGRkZGRjJECis6MTAxM0EwMDBGRkZFRkZGRkZGRkZGMDlGRkZGRkZGRkVGN0ZERkZGRkM4Cis6MTAxM0IwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkJGRkZGRkZGRkZGRjdECis6MTAxM0MwMDBGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjNCCis6MTAxM0QwMDBGRkZGRkZGRkZGRjA2RkZGRkZGRkZFRkZGRkZGRkZGRkJECis6MTAxM0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTFCCis6MTAxM0YwMDBGRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCis6MTAxNDAwMDBGRkZGRkZGRkYwQ0ZGRkZGRkZGRUZGRkZGRkZGRkZGRjJDCis6MTAxNDEwMDBGRkZCRkZGRkZGRkVGRkZGRkI2RkZGRkVCRkZGRjFGRkM0Cis6MTAxNDIwMDBGN0ZGRkY3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDU2Cis6MTAxNDMwMDBGRkZGRkZGMEVGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkRDCis6MTAxNDQwMDBGQkZGRkZGRkZFRkZGRkZGNTdGRkZEQkZGRkYxRkZFRkI5Cis6MTAxNDUwMDBGRUZGQkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkRFCis6MTAxNDYwMDBERUZGRjBDRkZGRkZGRkZFRkZGRkZGRjdEQkZGREJGRDNGCis6MTAxNDcwMDBGNkZGRjZGRjNDQkNCQ0JGREY2RkU3MkZGMTNDQkZGREMyCis6MTAxNDgwMDBCRkRGNkZGRjZGRjdEQkZGREJGREY2RkZGNkZGRkZGRjUwCis6MTAxNDkwMDAwMjAxREZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRjc4Cis6MTAxNEEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjRDCis6MDYxNEIwMDBGRkZGRkZGRkZGRkYzQworOjAwMDAwMDAxRkYKKy8qCisgKgorICogRmlsZSB5YW0xMTEubWNzIGNvbnZlcnRlZCB0byBoIGZvcm1hdCBieSBtY3MyaAorICoKKyAqIChDKSBGNkZCQiAxOTk4CisgKgorICogVHVlIEF1ZyAyNSAyMDoyMzowMyAxOTk4CisgKgorICovCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBjZWY4YjE4Li44NmIyMDNmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTY2LDYgKzY2LDEzIEBACiAJYm9vbAogCXNlbGVjdCBGU19QT1NJWF9BQ0wKIAorbWVudSAiQ2FjaGVzIgorCitzb3VyY2UgImZzL2ZzY2FjaGUvS2NvbmZpZyIKK3NvdXJjZSAiZnMvY2FjaGVmaWxlcy9LY29uZmlnIgorCitlbmRtZW51CisKIGlmIEJMT0NLCiBtZW51ICJDRC1ST00vRFZEIEZpbGVzeXN0ZW1zIgogCkBAIC0xNjksNiArMTc2LDggQEAKIHNvdXJjZSAiZnMvc3lzdi9LY29uZmlnIgogc291cmNlICJmcy91ZnMvS2NvbmZpZyIKIAorc291cmNlICJmcy9leG9mcy9LY29uZmlnIgorCiBlbmRpZiAjIE1JU0NfRklMRVNZU1RFTVMKIAogbWVudWNvbmZpZyBORVRXT1JLX0ZJTEVTWVNURU1TCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IDZlODJhMzAuLjcwYjJhZWQgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCisrKyBiL2ZzL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw3IEBACiAJCWF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcCiAJCXNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFwKIAkJcG5vZGUubyBkcm9wX2NhY2hlcy5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBcCi0JCXN0YWNrLm8KKwkJc3RhY2subyBmc19zdHJ1Y3QubwogCiBpZmVxICgkKENPTkZJR19CTE9DSykseSkKIG9iai15ICs9CWJ1ZmZlci5vIGJpby5vIGJsb2NrX2Rldi5vIGRpcmVjdC1pby5vIG1wYWdlLm8gaW9wcmlvLm8KQEAgLTYzLDYgKzYzLDcgQEAKIG9iai0kKENPTkZJR19ETE0pCQkrPSBkbG0vCiAgCiAjIERvIG5vdCBhZGQgYW55IGZpbGVzeXN0ZW1zIGJlZm9yZSB0aGlzIGxpbmUKK29iai0kKENPTkZJR19GU0NBQ0hFKQkJKz0gZnNjYWNoZS8KIG9iai0kKENPTkZJR19SRUlTRVJGU19GUykJKz0gcmVpc2VyZnMvCiBvYmotJChDT05GSUdfRVhUM19GUykJCSs9IGV4dDMvICMgQmVmb3JlIGV4dDIgc28gcm9vdCBmcyBjYW4gYmUgZXh0Mwogb2JqLSQoQ09ORklHX0VYVDJfRlMpCQkrPSBleHQyLwpAQCAtMTE2LDcgKzExNyw5IEBACiBvYmotJChDT05GSUdfQkVGU19GUykJCSs9IGJlZnMvCiBvYmotJChDT05GSUdfSE9TVEZTKQkJKz0gaG9zdGZzLwogb2JqLSQoQ09ORklHX0hQUEZTKQkJKz0gaHBwZnMvCitvYmotJChDT05GSUdfQ0FDSEVGSUxFUykJKz0gY2FjaGVmaWxlcy8KIG9iai0kKENPTkZJR19ERUJVR19GUykJCSs9IGRlYnVnZnMvCiBvYmotJChDT05GSUdfT0NGUzJfRlMpCQkrPSBvY2ZzMi8KIG9iai0kKENPTkZJR19CVFJGU19GUykJCSs9IGJ0cmZzLwogb2JqLSQoQ09ORklHX0dGUzJfRlMpICAgICAgICAgICArPSBnZnMyLworb2JqLSQoQ09ORklHX0VYT0ZTX0ZTKSAgICAgICAgICArPSBleG9mcy8KZGlmZiAtLWdpdCBhL2ZzL2FkZnMvc3VwZXIuYyBiL2ZzL2FkZnMvc3VwZXIuYwppbmRleCA3ZjgzYTQ2Li5kZDliZWNjIDEwMDY0NAotLS0gYS9mcy9hZGZzL3N1cGVyLmMKKysrIGIvZnMvYWRmcy9zdXBlci5jCkBAIC0yMTksMTYgKzIxOSwyMCBAQAogCiBzdGF0aWMgaW50IGFkZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKLQlzdHJ1Y3QgYWRmc19zYl9pbmZvICphc2IgPSBBREZTX1NCKGRlbnRyeS0+ZF9zYik7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3QgYWRmc19zYl9pbmZvICpzYmkgPSBBREZTX1NCKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlICAgID0gQURGU19TVVBFUl9NQUdJQzsKLQlidWYtPmZfbmFtZWxlbiA9IGFzYi0+c19uYW1lbGVuOwotCWJ1Zi0+Zl9ic2l6ZSAgID0gZGVudHJ5LT5kX3NiLT5zX2Jsb2Nrc2l6ZTsKLQlidWYtPmZfYmxvY2tzICA9IGFzYi0+c19zaXplOwotCWJ1Zi0+Zl9maWxlcyAgID0gYXNiLT5zX2lkc19wZXJfem9uZSAqIGFzYi0+c19tYXBfc2l6ZTsKKwlidWYtPmZfbmFtZWxlbiA9IHNiaS0+c19uYW1lbGVuOworCWJ1Zi0+Zl9ic2l6ZSAgID0gc2ItPnNfYmxvY2tzaXplOworCWJ1Zi0+Zl9ibG9ja3MgID0gc2JpLT5zX3NpemU7CisJYnVmLT5mX2ZpbGVzICAgPSBzYmktPnNfaWRzX3Blcl96b25lICogc2JpLT5zX21hcF9zaXplOwogCWJ1Zi0+Zl9iYXZhaWwgID0KLQlidWYtPmZfYmZyZWUgICA9IGFkZnNfbWFwX2ZyZWUoZGVudHJ5LT5kX3NiKTsKKwlidWYtPmZfYmZyZWUgICA9IGFkZnNfbWFwX2ZyZWUoc2IpOwogCWJ1Zi0+Zl9mZnJlZSAgID0gKGxvbmcpKGJ1Zi0+Zl9iZnJlZSAqIGJ1Zi0+Zl9maWxlcykgLyAobG9uZylidWYtPmZfYmxvY2tzOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9hZmZzL3N1cGVyLmMgYi9mcy9hZmZzL3N1cGVyLmMKaW5kZXggYTE5ZDY0Yi4uNWNlNjk1ZSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9zdXBlci5jCisrKyBiL2ZzL2FmZnMvc3VwZXIuYwpAQCAtNTMzLDYgKzUzMyw3IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKIAlpbnQJCSBmcmVlOworCXU2NAkJIGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlwcl9kZWJ1ZygiQUZGUzogc3RhdGZzKCkgcGFydHNpemU9JWQsIHJlc2VydmVkPSVkXG4iLEFGRlNfU0Ioc2IpLT5zX3BhcnRpdGlvbl9zaXplLAogCSAgICAgQUZGU19TQihzYiktPnNfcmVzZXJ2ZWQpOwpAQCAtNTQzLDYgKzU0NCw5IEBACiAJYnVmLT5mX2Jsb2NrcyAgPSBBRkZTX1NCKHNiKS0+c19wYXJ0aXRpb25fc2l6ZSAtIEFGRlNfU0Ioc2IpLT5zX3Jlc2VydmVkOwogCWJ1Zi0+Zl9iZnJlZSAgID0gZnJlZTsKIAlidWYtPmZfYmF2YWlsICA9IGZyZWU7CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CisJYnVmLT5mX25hbWVsZW4gPSAzMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL0tjb25maWcgYi9mcy9hZnMvS2NvbmZpZwppbmRleCBlN2I1MjJmLi41YzRlNjFkIDEwMDY0NAotLS0gYS9mcy9hZnMvS2NvbmZpZworKysgYi9mcy9hZnMvS2NvbmZpZwpAQCAtMTksMyArMTksMTEgQEAKIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Fmcy50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQUZTX0ZTQ0FDSEUKKwlib29sICJQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBBRlNfRlM9bSAmJiBGU0NBQ0hFIHx8IEFGU19GUz15ICYmIEZTQ0FDSEU9eQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgQUZTIGRhdGEgdG8gYmUgY2FjaGVkIGxvY2FsbHkgb24gZGlzayB0aHJvdWdoCisJICB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtIGNhY2hlIG1hbmFnZXIKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9NYWtlZmlsZSBiL2ZzL2Fmcy9NYWtlZmlsZQppbmRleCBhNjY2NzEwLi40ZjY0Yjk1IDEwMDY0NAotLS0gYS9mcy9hZnMvTWFrZWZpbGUKKysrIGIvZnMvYWZzL01ha2VmaWxlCkBAIC0yLDcgKzIsMTAgQEAKICMgTWFrZWZpbGUgZm9yIFJlZCBIYXQgTGludXggQUZTIGNsaWVudC4KICMKIAorYWZzLWNhY2hlLSQoQ09ORklHX0FGU19GU0NBQ0hFKSA6PSBjYWNoZS5vCisKIGthZnMtb2JqcyA6PSBcCisJJChhZnMtY2FjaGUteSkgXAogCWNhbGxiYWNrLm8gXAogCWNlbGwubyBcCiAJY21zZXJ2aWNlLm8gXApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NhY2hlLmMgYi9mcy9hZnMvY2FjaGUuYwppbmRleCBkZTBkN2RlLi5lMmIxZDNmIDEwMDY0NAotLS0gYS9mcy9hZnMvY2FjaGUuYworKysgYi9mcy9hZnMvY2FjaGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIEFGUyBjYWNoaW5nIHN0dWZmCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtOSwyNDggKzksMzk1IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfY2VsbF9jYWNoZV9tYXRjaCh2b2lkICp0YXJnZXQsCi0JCQkJCQljb25zdCB2b2lkICplbnRyeSk7Ci1zdGF0aWMgdm9pZCBhZnNfY2VsbF9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSk7CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc19jYWNoZV9jZWxsX2luZGV4X2RlZiA9IHsKLQkubmFtZQkJCT0gImNlbGxfaXgiLAotCS5kYXRhX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfY2VsbCksCi0JLmtleXNbMF0JCT0geyBDQUNIRUZTX0lOREVYX0tFWVNfQVNDSUlaLCA2NCB9LAotCS5tYXRjaAkJCT0gYWZzX2NlbGxfY2FjaGVfbWF0Y2gsCi0JLnVwZGF0ZQkJCT0gYWZzX2NlbGxfY2FjaGVfdXBkYXRlLAorc3RhdGljIHVpbnQxNl90IGFmc19jZWxsX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbGVuKTsKK3N0YXRpYyB1aW50MTZfdCBhZnNfY2VsbF9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgICAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zmxlbik7CitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc19jZWxsX2NhY2hlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkJCSAgICAgIHVpbnQxNl90IGJ1Zmxlbik7CisKK3N0YXRpYyB1aW50MTZfdCBhZnNfdmxvY2F0aW9uX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zmxlbik7CitzdGF0aWMgdWludDE2X3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworc3RhdGljIGVudW0gZnNjYWNoZV9jaGVja2F1eCBhZnNfdmxvY2F0aW9uX2NhY2hlX2NoZWNrX2F1eCgKKwl2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgY29uc3Qgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworCitzdGF0aWMgdWludDE2X3QgYWZzX3ZvbHVtZV9jYWNoZV9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworCitzdGF0aWMgdWludDE2X3QgYWZzX3Zub2RlX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCXZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbGVuKTsKK3N0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV9nZXRfYXR0cihjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgIHVpbnQ2NF90ICpzaXplKTsKK3N0YXRpYyB1aW50MTZfdCBhZnNfdm5vZGVfY2FjaGVfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworc3RhdGljIGVudW0gZnNjYWNoZV9jaGVja2F1eCBhZnNfdm5vZGVfY2FjaGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkJCSAgICAgICB1aW50MTZfdCBidWZsZW4pOworc3RhdGljIHZvaWQgYWZzX3Zub2RlX2NhY2hlX25vd191bmNhY2hlZCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSk7CisKK3N0cnVjdCBmc2NhY2hlX25ldGZzIGFmc19jYWNoZV9uZXRmcyA9IHsKKwkubmFtZQkJCT0gImFmcyIsCisJLnZlcnNpb24JCT0gMCwKIH07Ci0jZW5kaWYKKworc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfY2VsbF9jYWNoZV9pbmRleF9kZWYgPSB7CisJLm5hbWUJCT0gIkFGUy5jZWxsIiwKKwkudHlwZQkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYLAorCS5nZXRfa2V5CT0gYWZzX2NlbGxfY2FjaGVfZ2V0X2tleSwKKwkuZ2V0X2F1eAk9IGFmc19jZWxsX2NhY2hlX2dldF9hdXgsCisJLmNoZWNrX2F1eAk9IGFmc19jZWxsX2NhY2hlX2NoZWNrX2F1eCwKK307CisKK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYgPSB7CisJLm5hbWUJCQk9ICJBRlMudmxkYiIsCisJLnR5cGUJCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgsCisJLmdldF9rZXkJCT0gYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfa2V5LAorCS5nZXRfYXV4CQk9IGFmc192bG9jYXRpb25fY2FjaGVfZ2V0X2F1eCwKKwkuY2hlY2tfYXV4CQk9IGFmc192bG9jYXRpb25fY2FjaGVfY2hlY2tfYXV4LAorfTsKKworc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZiA9IHsKKwkubmFtZQkJPSAiQUZTLnZvbHVtZSIsCisJLnR5cGUJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCwKKwkuZ2V0X2tleQk9IGFmc192b2x1bWVfY2FjaGVfZ2V0X2tleSwKK307CisKK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgYWZzX3Zub2RlX2NhY2hlX2luZGV4X2RlZiA9IHsKKwkubmFtZQkJCT0gIkFGUy52bm9kZSIsCisJLnR5cGUJCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEUsCisJLmdldF9rZXkJCT0gYWZzX3Zub2RlX2NhY2hlX2dldF9rZXksCisJLmdldF9hdHRyCQk9IGFmc192bm9kZV9jYWNoZV9nZXRfYXR0ciwKKwkuZ2V0X2F1eAkJPSBhZnNfdm5vZGVfY2FjaGVfZ2V0X2F1eCwKKwkuY2hlY2tfYXV4CQk9IGFmc192bm9kZV9jYWNoZV9jaGVja19hdXgsCisJLm5vd191bmNhY2hlZAkJPSBhZnNfdm5vZGVfY2FjaGVfbm93X3VuY2FjaGVkLAorfTsKIAogLyoKLSAqIG1hdGNoIGEgY2VsbCByZWNvcmQgb2J0YWluZWQgZnJvbSB0aGUgY2FjaGUKKyAqIHNldCB0aGUga2V5IGZvciB0aGUgaW5kZXggZW50cnkKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc19jZWxsX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCWNvbnN0IHZvaWQgKmVudHJ5KQorc3RhdGljIHVpbnQxNl90IGFmc19jZWxsX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQogewotCWNvbnN0IHN0cnVjdCBhZnNfY2FjaGVfY2VsbCAqY2NlbGwgPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwgPSB0YXJnZXQ7CisJY29uc3Qgc3RydWN0IGFmc19jZWxsICpjZWxsID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3Qga2xlbjsKIAotCV9lbnRlcigieyVzfSx7JXN9IiwgY2NlbGwtPm5hbWUsIGNlbGwtPm5hbWUpOworCV9lbnRlcigiJXAsJXAsJXUiLCBjZWxsLCBidWZmZXIsIGJ1Zm1heCk7CiAKLQlpZiAoc3RybmNtcChjY2VsbC0+bmFtZSwgY2VsbC0+bmFtZSwgc2l6ZW9mKGNjZWxsLT5uYW1lKSkgPT0gMCkgewotCQlfbGVhdmUoIiA9IFNVQ0NFU1MiKTsKLQkJcmV0dXJuIENBQ0hFRlNfTUFUQ0hfU1VDQ0VTUzsKKwlrbGVuID0gc3RybGVuKGNlbGwtPm5hbWUpOworCWlmIChrbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsIGNlbGwtPm5hbWUsIGtsZW4pOworCXJldHVybiBrbGVuOworfQorCisvKgorICogcHJvdmlkZSBuZXcgYXV4aWxsaWFyeSBjYWNoZSBkYXRhCisgKi8KK3N0YXRpYyB1aW50MTZfdCBhZnNfY2VsbF9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgICAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MTZfdCBkbGVuOworCisJX2VudGVyKCIlcCwlcCwldSIsIGNlbGwsIGJ1ZmZlciwgYnVmbWF4KTsKKworCWRsZW4gPSBjZWxsLT52bF9uYWRkcnMgKiBzaXplb2YoY2VsbC0+dmxfYWRkcnNbMF0pOworCWRsZW4gPSBtaW4oZGxlbiwgYnVmbWF4KTsKKwlkbGVuICY9IH4oc2l6ZW9mKGNlbGwtPnZsX2FkZHJzWzBdKSAtIDEpOworCisJbWVtY3B5KGJ1ZmZlciwgY2VsbC0+dmxfYWRkcnMsIGRsZW4pOworCXJldHVybiBkbGVuOworfQorCisvKgorICogY2hlY2sgdGhhdCB0aGUgYXV4aWxsaWFyeSBkYXRhIGluZGljYXRlcyB0aGF0IHRoZSBlbnRyeSBpcyBzdGlsbCB2YWxpZAorICovCitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc19jZWxsX2NhY2hlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkJCSAgICAgIHVpbnQxNl90IGJ1ZmxlbikKK3sKKwlfbGVhdmUoIiA9IE9LQVkiKTsKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogc2V0IHRoZSBrZXkgZm9yIHRoZSBpbmRleCBlbnRyeQorICovCitzdGF0aWMgdWludDE2X3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IGFmc192bG9jYXRpb24gKnZsb2NhdGlvbiA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGtsZW47CisKKwlfZW50ZXIoInslc30sJXAsJXUiLCB2bG9jYXRpb24tPnZsZGIubmFtZSwgYnVmZmVyLCBidWZtYXgpOworCisJa2xlbiA9IHN0cm5sZW4odmxvY2F0aW9uLT52bGRiLm5hbWUsIHNpemVvZih2bG9jYXRpb24tPnZsZGIubmFtZSkpOworCWlmIChrbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsIHZsb2NhdGlvbi0+dmxkYi5uYW1lLCBrbGVuKTsKKworCV9sZWF2ZSgiID0gJXUiLCBrbGVuKTsKKwlyZXR1cm4ga2xlbjsKK30KKworLyoKKyAqIHByb3ZpZGUgbmV3IGF1eGlsbGlhcnkgY2FjaGUgZGF0YQorICovCitzdGF0aWMgdWludDE2X3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IGFmc192bG9jYXRpb24gKnZsb2NhdGlvbiA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGRsZW47CisKKwlfZW50ZXIoInslc30sJXAsJXUiLCB2bG9jYXRpb24tPnZsZGIubmFtZSwgYnVmZmVyLCBidWZtYXgpOworCisJZGxlbiA9IHNpemVvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbik7CisJZGxlbiAtPSBvZmZzZXRvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiwgbnNlcnZlcnMpOworCWlmIChkbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsICh1aW50OF90ICopJnZsb2NhdGlvbi0+dmxkYi5uc2VydmVycywgZGxlbik7CisKKwlfbGVhdmUoIiA9ICV1IiwgZGxlbik7CisJcmV0dXJuIGRsZW47Cit9CisKKy8qCisgKiBjaGVjayB0aGF0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIGVudHJ5IGlzIHN0aWxsIHZhbGlkCisgKi8KK3N0YXRpYworZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc192bG9jYXRpb25fY2FjaGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkJCSAgICB1aW50MTZfdCBidWZsZW4pCit7CisJY29uc3Qgc3RydWN0IGFmc19jYWNoZV92bG9jYXRpb24gKmN2bGRiOworCXN0cnVjdCBhZnNfdmxvY2F0aW9uICp2bG9jYXRpb24gPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MTZfdCBkbGVuOworCisJX2VudGVyKCJ7JXN9LCVwLCV1IiwgdmxvY2F0aW9uLT52bGRiLm5hbWUsIGJ1ZmZlciwgYnVmbGVuKTsKKworCS8qIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBkYXRhIGlzIHdoYXQgd2UncmUgZXhwZWN0aW5nICovCisJZGxlbiA9IHNpemVvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbik7CisJZGxlbiAtPSBvZmZzZXRvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiwgbnNlcnZlcnMpOworCWlmIChkbGVuICE9IGJ1ZmxlbikKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CisKKwljdmxkYiA9IGNvbnRhaW5lcl9vZihidWZmZXIsIHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uLCBuc2VydmVycyk7CisKKwkvKiBpZiB3aGF0J3Mgb24gZGlzayBpcyBtb3JlIHZhbGlkIHRoYW4gd2hhdCdzIGluIG1lbW9yeSwgdGhlbiB1c2UgdGhlCisJICogVkwgcmVjb3JkIGZyb20gdGhlIGNhY2hlICovCisJaWYgKCF2bG9jYXRpb24tPnZhbGlkIHx8IHZsb2NhdGlvbi0+dmxkYi5ydGltZSA9PSBjdmxkYi0+cnRpbWUpIHsKKwkJbWVtY3B5KCh1aW50OF90ICopJnZsb2NhdGlvbi0+dmxkYi5uc2VydmVycywgYnVmZmVyLCBkbGVuKTsKKwkJdmxvY2F0aW9uLT52YWxpZCA9IDE7CisJCV9sZWF2ZSgiID0gU1VDQ0VTUyBbYy0+bV0iKTsKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWTsKIAl9CiAKLQlfbGVhdmUoIiA9IEZBSUxFRCIpOwotCXJldHVybiBDQUNIRUZTX01BVENIX0ZBSUxFRDsKLX0KLSNlbmRpZgotCi0vKgotICogdXBkYXRlIGEgY2VsbCByZWNvcmQgaW4gdGhlIGNhY2hlCi0gKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgdm9pZCBhZnNfY2VsbF9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSkKLXsKLQlzdHJ1Y3QgYWZzX2NhY2hlX2NlbGwgKmNjZWxsID0gZW50cnk7Ci0Jc3RydWN0IGFmc19jZWxsICpjZWxsID0gc291cmNlOwotCi0JX2VudGVyKCIlcCwlcCIsIHNvdXJjZSwgZW50cnkpOwotCi0Jc3RybmNweShjY2VsbC0+bmFtZSwgY2VsbC0+bmFtZSwgc2l6ZW9mKGNjZWxsLT5uYW1lKSk7Ci0KLQltZW1jcHkoY2NlbGwtPnZsX3NlcnZlcnMsCi0JICAgICAgIGNlbGwtPnZsX2FkZHJzLAotCSAgICAgICBtaW4oc2l6ZW9mKGNjZWxsLT52bF9zZXJ2ZXJzKSwgc2l6ZW9mKGNlbGwtPnZsX2FkZHJzKSkpOwotCi19Ci0jZW5kaWYKLQotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc192bG9jYXRpb25fY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJICAgICBjb25zdCB2b2lkICplbnRyeSk7Ci1zdGF0aWMgdm9pZCBhZnNfdmxvY2F0aW9uX2NhY2hlX3VwZGF0ZSh2b2lkICpzb3VyY2UsIHZvaWQgKmVudHJ5KTsKLQotc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmID0gewotCS5uYW1lCQk9ICJ2bGRiIiwKLQkuZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uKSwKLQkua2V5c1swXQk9IHsgQ0FDSEVGU19JTkRFWF9LRVlTX0FTQ0lJWiwgNjQgfSwKLQkubWF0Y2gJCT0gYWZzX3Zsb2NhdGlvbl9jYWNoZV9tYXRjaCwKLQkudXBkYXRlCQk9IGFmc192bG9jYXRpb25fY2FjaGVfdXBkYXRlLAotfTsKLSNlbmRpZgotCi0vKgotICogbWF0Y2ggYSBWTERCIHJlY29yZCBzdG9yZWQgaW4gdGhlIGNhY2hlCi0gKiAtIG1heSBhbHNvIGxvYWQgdGFyZ2V0IGZyb20gZW50cnkKLSAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc192bG9jYXRpb25fY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJICAgICBjb25zdCB2b2lkICplbnRyeSkKLXsKLQljb25zdCBzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiAqdmxkYiA9IGVudHJ5OwotCXN0cnVjdCBhZnNfdmxvY2F0aW9uICp2bG9jYXRpb24gPSB0YXJnZXQ7Ci0KLQlfZW50ZXIoInslc30seyVzfSIsIHZsb2NhdGlvbi0+dmxkYi5uYW1lLCB2bGRiLT5uYW1lKTsKLQotCWlmIChzdHJuY21wKHZsb2NhdGlvbi0+dmxkYi5uYW1lLCB2bGRiLT5uYW1lLCBzaXplb2YodmxkYi0+bmFtZSkpID09IDAKLQkgICAgKSB7Ci0JCWlmICghdmxvY2F0aW9uLT52YWxpZCB8fAotCQkgICAgdmxvY2F0aW9uLT52bGRiLnJ0aW1lID09IHZsZGItPnJ0aW1lCisJLyogbmVlZCB0byB1cGRhdGUgdGhlIGNhY2hlIGlmIHRoZSBjYWNoZWQgaW5mbyBkaWZmZXJzICovCisJaWYgKG1lbWNtcCgmdmxvY2F0aW9uLT52bGRiLCBidWZmZXIsIGRsZW4pICE9IDApIHsKKwkJLyogZGVsZXRlIGlmIHRoZSB2b2x1bWUgSURzIGZvciB0aGlzIG5hbWUgZGlmZmVyICovCisJCWlmIChtZW1jbXAoJnZsb2NhdGlvbi0+dmxkYi52aWQsICZjdmxkYi0+dmlkLAorCQkJICAgc2l6ZW9mKGN2bGRiLT52aWQpKSAhPSAwCiAJCSAgICApIHsKLQkJCXZsb2NhdGlvbi0+dmxkYiA9ICp2bGRiOwotCQkJdmxvY2F0aW9uLT52YWxpZCA9IDE7Ci0JCQlfbGVhdmUoIiA9IFNVQ0NFU1MgW2MtPm1dIik7Ci0JCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTOwotCQl9IGVsc2UgaWYgKG1lbWNtcCgmdmxvY2F0aW9uLT52bGRiLCB2bGRiLCBzaXplb2YoKnZsZGIpKSAhPSAwKSB7Ci0JCQkvKiBkZWxldGUgaWYgVklEcyBmb3IgdGhpcyBuYW1lIGRpZmZlciAqLwotCQkJaWYgKG1lbWNtcCgmdmxvY2F0aW9uLT52bGRiLnZpZCwKLQkJCQkgICAmdmxkYi0+dmlkLAotCQkJCSAgIHNpemVvZih2bGRiLT52aWQpKSAhPSAwKSB7Ci0JCQkJX2xlYXZlKCIgPSBERUxFVEUiKTsKLQkJCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTX0RFTEVURTsKLQkJCX0KLQotCQkJX2xlYXZlKCIgPSBVUERBVEUiKTsKLQkJCXJldHVybiBDQUNIRUZTX01BVENIX1NVQ0NFU1NfVVBEQVRFOwotCQl9IGVsc2UgewotCQkJX2xlYXZlKCIgPSBTVUNDRVNTIik7Ci0JCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTOworCQkJX2xlYXZlKCIgPSBPQlNPTEVURSIpOworCQkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CiAJCX0KKworCQlfbGVhdmUoIiA9IFVQREFURSIpOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9ORUVEU19VUERBVEU7CiAJfQogCi0JX2xlYXZlKCIgPSBGQUlMRUQiKTsKLQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9GQUlMRUQ7CisJX2xlYXZlKCIgPSBPS0FZIik7CisJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWTsKIH0KLSNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogc2V0IHRoZSBrZXkgZm9yIHRoZSB2b2x1bWUgaW5kZXggZW50cnkKKyAqLworc3RhdGljIHVpbnQxNl90IGFmc192b2x1bWVfY2FjaGVfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGtsZW47CisKKwlfZW50ZXIoInsldX0sJXAsJXUiLCB2b2x1bWUtPnR5cGUsIGJ1ZmZlciwgYnVmbWF4KTsKKworCWtsZW4gPSBzaXplb2Yodm9sdW1lLT50eXBlKTsKKwlpZiAoa2xlbiA+IGJ1Zm1heCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCAmdm9sdW1lLT50eXBlLCBzaXplb2Yodm9sdW1lLT50eXBlKSk7CisKKwlfbGVhdmUoIiA9ICV1Iiwga2xlbik7CisJcmV0dXJuIGtsZW47CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIHNldCB0aGUga2V5IGZvciB0aGUgaW5kZXggZW50cnkKKyAqLworc3RhdGljIHVpbnQxNl90IGFmc192bm9kZV9jYWNoZV9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQl2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGtsZW47CisKKwlfZW50ZXIoInsleCwleCwlbGx4fSwlcCwldSIsCisJICAgICAgIHZub2RlLT5maWQudm5vZGUsIHZub2RlLT5maWQudW5pcXVlLCB2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbiwKKwkgICAgICAgYnVmZmVyLCBidWZtYXgpOworCisJa2xlbiA9IHNpemVvZih2bm9kZS0+ZmlkLnZub2RlKTsKKwlpZiAoa2xlbiA+IGJ1Zm1heCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCAmdm5vZGUtPmZpZC52bm9kZSwgc2l6ZW9mKHZub2RlLT5maWQudm5vZGUpKTsKKworCV9sZWF2ZSgiID0gJXUiLCBrbGVuKTsKKwlyZXR1cm4ga2xlbjsKK30KIAogLyoKLSAqIHVwZGF0ZSBhIFZMREIgcmVjb3JkIHN0b3JlZCBpbiB0aGUgY2FjaGUKKyAqIHByb3ZpZGUgdXBkYXRlZCBmaWxlIGF0dHJpYnV0ZXMKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc192bG9jYXRpb25fY2FjaGVfdXBkYXRlKHZvaWQgKnNvdXJjZSwgdm9pZCAqZW50cnkpCitzdGF0aWMgdm9pZCBhZnNfdm5vZGVfY2FjaGVfZ2V0X2F0dHIoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICB1aW50NjRfdCAqc2l6ZSkKIHsKLQlzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiAqdmxkYiA9IGVudHJ5OwotCXN0cnVjdCBhZnNfdmxvY2F0aW9uICp2bG9jYXRpb24gPSBzb3VyY2U7CisJY29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBjb29raWVfbmV0ZnNfZGF0YTsKIAotCV9lbnRlcigiIik7CisJX2VudGVyKCJ7JXgsJXgsJWxseH0sIiwKKwkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZpZC51bmlxdWUsCisJICAgICAgIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKTsKIAotCSp2bGRiID0gdmxvY2F0aW9uLT52bGRiOworCSpzaXplID0gdm5vZGUtPnN0YXR1cy5zaXplOwogfQotI2VuZGlmCi0KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfdm9sdW1lX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCSAgY29uc3Qgdm9pZCAqZW50cnkpOwotc3RhdGljIHZvaWQgYWZzX3ZvbHVtZV9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSk7Ci0KLXN0cnVjdCBjYWNoZWZzX2luZGV4X2RlZiBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZiA9IHsKLQkubmFtZQkJPSAidm9sdW1lIiwKLQkuZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfdmhhc2gpLAotCS5rZXlzWzBdCT0geyBDQUNIRUZTX0lOREVYX0tFWVNfQklOLCAxIH0sCi0JLmtleXNbMV0JPSB7IENBQ0hFRlNfSU5ERVhfS0VZU19CSU4sIDEgfSwKLQkubWF0Y2gJCT0gYWZzX3ZvbHVtZV9jYWNoZV9tYXRjaCwKLQkudXBkYXRlCQk9IGFmc192b2x1bWVfY2FjaGVfdXBkYXRlLAotfTsKLSNlbmRpZgogCiAvKgotICogbWF0Y2ggYSB2b2x1bWUgaGFzaCByZWNvcmQgc3RvcmVkIGluIHRoZSBjYWNoZQorICogcHJvdmlkZSBuZXcgYXV4aWxsaWFyeSBjYWNoZSBkYXRhCiAgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfdm9sdW1lX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCSAgY29uc3Qgdm9pZCAqZW50cnkpCitzdGF0aWMgdWludDE2X3QgYWZzX3Zub2RlX2NhY2hlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCXZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQogewotCWNvbnN0IHN0cnVjdCBhZnNfY2FjaGVfdmhhc2ggKnZoYXNoID0gZW50cnk7Ci0Jc3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSA9IHRhcmdldDsKKwljb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGRsZW47CiAKLQlfZW50ZXIoInsldX0seyV1fSIsIHZvbHVtZS0+dHlwZSwgdmhhc2gtPnZ0eXBlKTsKKwlfZW50ZXIoInsleCwleCwlTHh9LCVwLCV1IiwKKwkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZpZC51bmlxdWUsIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uLAorCSAgICAgICBidWZmZXIsIGJ1Zm1heCk7CiAKLQlpZiAodm9sdW1lLT50eXBlID09IHZoYXNoLT52dHlwZSkgewotCQlfbGVhdmUoIiA9IFNVQ0NFU1MiKTsKLQkJcmV0dXJuIENBQ0hFRlNfTUFUQ0hfU1VDQ0VTUzsKKwlkbGVuID0gc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKSArIHNpemVvZih2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbik7CisJaWYgKGRsZW4gPiBidWZtYXgpCisJCXJldHVybiAwOworCisJbWVtY3B5KGJ1ZmZlciwgJnZub2RlLT5maWQudW5pcXVlLCBzaXplb2Yodm5vZGUtPmZpZC51bmlxdWUpKTsKKwlidWZmZXIgKz0gc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKTsKKwltZW1jcHkoYnVmZmVyLCAmdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24sCisJICAgICAgIHNpemVvZih2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbikpOworCisJX2xlYXZlKCIgPSAldSIsIGRsZW4pOworCXJldHVybiBkbGVuOworfQorCisvKgorICogY2hlY2sgdGhhdCB0aGUgYXV4aWxsaWFyeSBkYXRhIGluZGljYXRlcyB0aGF0IHRoZSBlbnRyeSBpcyBzdGlsbCB2YWxpZAorICovCitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc192bm9kZV9jYWNoZV9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCQkJICAgICAgIHVpbnQxNl90IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGRsZW47CisKKwlfZW50ZXIoInsleCwleCwlbGx4fSwlcCwldSIsCisJICAgICAgIHZub2RlLT5maWQudm5vZGUsIHZub2RlLT5maWQudW5pcXVlLCB2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbiwKKwkgICAgICAgYnVmZmVyLCBidWZsZW4pOworCisJLyogY2hlY2sgdGhlIHNpemUgb2YgdGhlIGRhdGEgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgKi8KKwlkbGVuID0gc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKSArIHNpemVvZih2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbik7CisJaWYgKGRsZW4gIT0gYnVmbGVuKSB7CisJCV9sZWF2ZSgiID0gT0JTT0xFVEUgW2xlbiAlaHggIT0gJWh4XSIsIGRsZW4sIGJ1Zmxlbik7CisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOwogCX0KIAotCV9sZWF2ZSgiID0gRkFJTEVEIik7Ci0JcmV0dXJuIENBQ0hFRlNfTUFUQ0hfRkFJTEVEOwotfQotI2VuZGlmCisJaWYgKG1lbWNtcChidWZmZXIsCisJCSAgICZ2bm9kZS0+ZmlkLnVuaXF1ZSwKKwkJICAgc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKQorCQkgICApICE9IDApIHsKKwkJdW5zaWduZWQgdW5pcXVlOwogCi0vKgotICogdXBkYXRlIGEgdm9sdW1lIGhhc2ggcmVjb3JkIHN0b3JlZCBpbiB0aGUgY2FjaGUKLSAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc192b2x1bWVfY2FjaGVfdXBkYXRlKHZvaWQgKnNvdXJjZSwgdm9pZCAqZW50cnkpCi17Ci0Jc3RydWN0IGFmc19jYWNoZV92aGFzaCAqdmhhc2ggPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX3ZvbHVtZSAqdm9sdW1lID0gc291cmNlOworCQltZW1jcHkoJnVuaXF1ZSwgYnVmZmVyLCBzaXplb2YodW5pcXVlKSk7CiAKLQlfZW50ZXIoIiIpOwotCi0Jdmhhc2gtPnZ0eXBlID0gdm9sdW1lLT50eXBlOwotfQotI2VuZGlmCi0KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfdm5vZGVfY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJIGNvbnN0IHZvaWQgKmVudHJ5KTsKLXN0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSk7Ci0KLXN0cnVjdCBjYWNoZWZzX2luZGV4X2RlZiBhZnNfdm5vZGVfY2FjaGVfaW5kZXhfZGVmID0gewotCS5uYW1lCQk9ICJ2bm9kZSIsCi0JLmRhdGFfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zub2RlKSwKLQkua2V5c1swXQk9IHsgQ0FDSEVGU19JTkRFWF9LRVlTX0JJTiwgNCB9LAotCS5tYXRjaAkJPSBhZnNfdm5vZGVfY2FjaGVfbWF0Y2gsCi0JLnVwZGF0ZQkJPSBhZnNfdm5vZGVfY2FjaGVfdXBkYXRlLAotfTsKLSNlbmRpZgotCi0vKgotICogbWF0Y2ggYSB2bm9kZSByZWNvcmQgc3RvcmVkIGluIHRoZSBjYWNoZQotICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIGNhY2hlZnNfbWF0Y2hfdmFsX3QgYWZzX3Zub2RlX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCSBjb25zdCB2b2lkICplbnRyeSkKLXsKLQljb25zdCBzdHJ1Y3QgYWZzX2NhY2hlX3Zub2RlICpjdm5vZGUgPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IHRhcmdldDsKLQotCV9lbnRlcigieyV4LCV4LCVMeH0seyV4LCV4LCVMeH0iLAotCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLAotCSAgICAgICB2bm9kZS0+ZmlkLnVuaXF1ZSwKLQkgICAgICAgdm5vZGUtPnN0YXR1cy52ZXJzaW9uLAotCSAgICAgICBjdm5vZGUtPnZub2RlX2lkLAotCSAgICAgICBjdm5vZGUtPnZub2RlX3VuaXF1ZSwKLQkgICAgICAgY3Zub2RlLT5kYXRhX3ZlcnNpb24pOwotCi0JaWYgKHZub2RlLT5maWQudm5vZGUgIT0gY3Zub2RlLT52bm9kZV9pZCkgewotCQlfbGVhdmUoIiA9IEZBSUxFRCIpOwotCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9GQUlMRUQ7CisJCV9sZWF2ZSgiID0gT0JTT0xFVEUgW3VuaXEgJXggIT0gJXhdIiwKKwkJICAgICAgIHVuaXF1ZSwgdm5vZGUtPmZpZC51bmlxdWUpOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKIAl9CiAKLQlpZiAodm5vZGUtPmZpZC51bmlxdWUgIT0gY3Zub2RlLT52bm9kZV91bmlxdWUgfHwKLQkgICAgdm5vZGUtPnN0YXR1cy52ZXJzaW9uICE9IGN2bm9kZS0+ZGF0YV92ZXJzaW9uKSB7Ci0JCV9sZWF2ZSgiID0gREVMRVRFIik7Ci0JCXJldHVybiBDQUNIRUZTX01BVENIX1NVQ0NFU1NfREVMRVRFOworCWlmIChtZW1jbXAoYnVmZmVyICsgc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKSwKKwkJICAgJnZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uLAorCQkgICBzaXplb2Yodm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24pCisJCSAgICkgIT0gMCkgeworCQlhZnNfZGF0YXZlcnNpb25fdCB2ZXJzaW9uOworCisJCW1lbWNweSgmdmVyc2lvbiwgYnVmZmVyICsgc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKSwKKwkJICAgICAgIHNpemVvZih2ZXJzaW9uKSk7CisKKwkJX2xlYXZlKCIgPSBPQlNPTEVURSBbdmVycyAlbGx4ICE9ICVsbHhdIiwKKwkJICAgICAgIHZlcnNpb24sIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKTsKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CiAJfQogCiAJX2xlYXZlKCIgPSBTVUNDRVNTIik7Ci0JcmV0dXJuIENBQ0hFRlNfTUFUQ0hfU1VDQ0VTUzsKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOwogfQotI2VuZGlmCiAKIC8qCi0gKiB1cGRhdGUgYSB2bm9kZSByZWNvcmQgc3RvcmVkIGluIHRoZSBjYWNoZQorICogaW5kaWNhdGlvbiB0aGUgY29va2llIGlzIG5vIGxvbmdlciB1bmNhY2hlZAorICogLSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBiYWNraW5nIHN0b3JlIGN1cnJlbnRseSBjYWNoaW5nIGEgY29va2llCisgKiAgIGlzIHJlbW92ZWQKKyAqIC0gdGhlIG5ldGZzIHNob3VsZCB1c2UgdGhpcyB0byBjbGVhbiB1cCBhbnkgbWFya2VycyBpbmRpY2F0aW5nIGNhY2hlZCBwYWdlcworICogLSB0aGlzIGlzIG1hbmRhdG9yeSBmb3IgYW55IG9iamVjdCB0aGF0IG1heSBoYXZlIGRhdGEKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSkKK3N0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV9ub3dfdW5jYWNoZWQodm9pZCAqY29va2llX25ldGZzX2RhdGEpCiB7Ci0Jc3RydWN0IGFmc19jYWNoZV92bm9kZSAqY3Zub2RlID0gZW50cnk7Ci0Jc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBzb3VyY2U7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXBnb2ZmX3QgZmlyc3Q7CisJaW50IGxvb3AsIG5yX3BhZ2VzOwogCi0JX2VudGVyKCIiKTsKKwlfZW50ZXIoInsleCwleCwlTHh9IiwKKwkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZpZC51bmlxdWUsIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKTsKIAotCWN2bm9kZS0+dm5vZGVfaWQJPSB2bm9kZS0+ZmlkLnZub2RlOwotCWN2bm9kZS0+dm5vZGVfdW5pcXVlCT0gdm5vZGUtPmZpZC51bmlxdWU7Ci0JY3Zub2RlLT5kYXRhX3ZlcnNpb24JPSB2bm9kZS0+c3RhdHVzLnZlcnNpb247CisJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKKwlmaXJzdCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCS8qIGdyYWIgYSBidW5jaCBvZiBwYWdlcyB0byBjbGVhbiAqLworCQlucl9wYWdlcyA9IHBhZ2V2ZWNfbG9va3VwKCZwdmVjLCB2bm9kZS0+dmZzX2lub2RlLmlfbWFwcGluZywKKwkJCQkJICBmaXJzdCwKKwkJCQkJICBQQUdFVkVDX1NJWkUgLSBwYWdldmVjX2NvdW50KCZwdmVjKSk7CisJCWlmICghbnJfcGFnZXMpCisJCQlicmVhazsKKworCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbnJfcGFnZXM7IGxvb3ArKykKKwkJCUNsZWFyUGFnZUZzQ2FjaGUocHZlYy5wYWdlc1tsb29wXSk7CisKKwkJZmlyc3QgPSBwdmVjLnBhZ2VzW25yX3BhZ2VzIC0gMV0tPmluZGV4ICsgMTsKKworCQlwdmVjLm5yID0gbnJfcGFnZXM7CisJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KKworCV9sZWF2ZSgiIik7CiB9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jYWNoZS5oIGIvZnMvYWZzL2NhY2hlLmgKaW5kZXggMzZhMzY0Mi4uNWM0ZjZiNCAxMDA2NDQKLS0tIGEvZnMvYWZzL2NhY2hlLmgKKysrIGIvZnMvYWZzL2NhY2hlLmgKQEAgLTEsNiArMSw2IEBACiAvKiBBRlMgbG9jYWwgY2FjaGUgbWFuYWdlbWVudCBpbnRlcmZhY2UKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05LDE1ICs5LDQgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2lmbmRlZiBBRlNfQ0FDSEVfSAotI2RlZmluZSBBRlNfQ0FDSEVfSAotCi0jdW5kZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0jaW5jbHVkZSA8bGludXgvY2FjaGVmcy5oPgotI2VuZGlmCi0jaW5jbHVkZSAidHlwZXMuaCIKLQotI2VuZGlmIC8qIEFGU19DQUNIRV9IICovCisjaW5jbHVkZSA8bGludXgvZnNjYWNoZS5oPgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2NlbGwuYyBiL2ZzL2Fmcy9jZWxsLmMKaW5kZXggNWUxZGYxNC4uZTE5YzEzZiAxMDA2NDQKLS0tIGEvZnMvYWZzL2NlbGwuYworKysgYi9mcy9hZnMvY2VsbC5jCkBAIC0xNDcsMTIgKzE0NywxMSBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCS8qIHB1dCBpdCB1cCBmb3IgY2FjaGluZyAqLwotCWNhY2hlZnNfYWNxdWlyZV9jb29raWUoYWZzX2NhY2hlX25ldGZzLnByaW1hcnlfaW5kZXgsCi0JCQkgICAgICAgJmFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmLAotCQkJICAgICAgIGNlbGwsCi0JCQkgICAgICAgJmNlbGwtPmNhY2hlKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwkvKiBwdXQgaXQgdXAgZm9yIGNhY2hpbmcgKHRoaXMgbmV2ZXIgcmV0dXJucyBhbiBlcnJvcikgKi8KKwljZWxsLT5jYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUoYWZzX2NhY2hlX25ldGZzLnByaW1hcnlfaW5kZXgsCisJCQkJCSAgICAgJmFmc19jZWxsX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkJICAgICBjZWxsKTsKICNlbmRpZgogCiAJLyogYWRkIHRvIHRoZSBjZWxsIGxpc3RzICovCkBAIC0zNjIsMTAgKzM2MSw5IEBACiAJbGlzdF9kZWxfaW5pdCgmY2VsbC0+cHJvY19saW5rKTsKIAl1cF93cml0ZSgmYWZzX3Byb2NfY2VsbHNfc2VtKTsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX3JlbGlucXVpc2hfY29va2llKGNlbGwtPmNhY2hlLCAwKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKGNlbGwtPmNhY2hlLCAwKTsKICNlbmRpZgotCiAJa2V5X3B1dChjZWxsLT5hbm9ueW1vdXNfa2V5KTsKIAlrZnJlZShjZWxsKTsKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmMKaW5kZXggYTM5MDE3Ni4uN2ExZDk0MiAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZpbGUuYworKysgYi9mcy9hZnMvZmlsZS5jCkBAIC0yMyw2ICsyMyw5IEBACiBzdGF0aWMgaW50IGFmc19yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIHN0YXRpYyBpbnQgYWZzX2xhdW5kZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKK3N0YXRpYyBpbnQgYWZzX3JlYWRwYWdlcyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsIHVuc2lnbmVkIG5yX3BhZ2VzKTsKKwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IGFmc19vcGVuLAogCS5yZWxlYXNlCT0gYWZzX3JlbGVhc2UsCkBAIC00Niw2ICs0OSw3IEBACiAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gYWZzX3JlYWRwYWdlLAorCS5yZWFkcGFnZXMJPSBhZnNfcmVhZHBhZ2VzLAogCS5zZXRfcGFnZV9kaXJ0eQk9IGFmc19zZXRfcGFnZV9kaXJ0eSwKIAkubGF1bmRlcl9wYWdlCT0gYWZzX2xhdW5kZXJfcGFnZSwKIAkucmVsZWFzZXBhZ2UJPSBhZnNfcmVsZWFzZXBhZ2UsCkBAIC0xMDEsMzcgKzEwNSwxOCBAQAogLyoKICAqIGRlYWwgd2l0aCBub3RpZmljYXRpb24gdGhhdCBhIHBhZ2Ugd2FzIHJlYWQgZnJvbSB0aGUgY2FjaGUKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc19yZWFkcGFnZV9yZWFkX2NvbXBsZXRlKHZvaWQgKmNvb2tpZV9kYXRhLAotCQkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgICAgICAgdm9pZCAqZGF0YSwKLQkJCQkgICAgICAgaW50IGVycm9yKQorc3RhdGljIHZvaWQgYWZzX2ZpbGVfcmVhZHBhZ2VfcmVhZF9jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgIHZvaWQgKmRhdGEsCisJCQkJCSAgICBpbnQgZXJyb3IpCiB7Ci0JX2VudGVyKCIlcCwlcCwlcCwlZCIsIGNvb2tpZV9kYXRhLCBwYWdlLCBkYXRhLCBlcnJvcik7CisJX2VudGVyKCIlcCwlcCwlZCIsIHBhZ2UsIGRhdGEsIGVycm9yKTsKIAotCWlmIChlcnJvcikKLQkJU2V0UGFnZUVycm9yKHBhZ2UpOwotCWVsc2UKKwkvKiBpZiB0aGUgcmVhZCBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwgd2UganVzdCB1bmxvY2sgdGhlIHBhZ2UgYW5kIGxldAorCSAqIHRoZSBWTSByZWlzc3VlIHRoZSByZWFkcGFnZSAqLworCWlmICghZXJyb3IpCiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKLQogfQotI2VuZGlmCi0KLS8qCi0gKiBkZWFsIHdpdGggbm90aWZpY2F0aW9uIHRoYXQgYSBwYWdlIHdhcyB3cml0dGVuIHRvIHRoZSBjYWNoZQotICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIHZvaWQgYWZzX3JlYWRwYWdlX3dyaXRlX2NvbXBsZXRlKHZvaWQgKmNvb2tpZV9kYXRhLAotCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJdm9pZCAqZGF0YSwKLQkJCQkJaW50IGVycm9yKQotewotCV9lbnRlcigiJXAsJXAsJXAsJWQiLCBjb29raWVfZGF0YSwgcGFnZSwgZGF0YSwgZXJyb3IpOwotCi0JdW5sb2NrX3BhZ2UocGFnZSk7Ci19Ci0jZW5kaWYKIAogLyoKICAqIEFGUyByZWFkIHBhZ2UgZnJvbSBmaWxlLCBkaXJlY3Rvcnkgb3Igc3ltbGluawpAQCAtMTYxLDkgKzE0Niw5IEBACiAJaWYgKHRlc3RfYml0KEFGU19WTk9ERV9ERUxFVEVELCAmdm5vZGUtPmZsYWdzKSkKIAkJZ290byBlcnJvcjsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKIAkvKiBpcyBpdCBjYWNoZWQ/ICovCi0JcmV0ID0gY2FjaGVmc19yZWFkX29yX2FsbG9jX3BhZ2Uodm5vZGUtPmNhY2hlLAorI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXJldCA9IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKHZub2RlLT5jYWNoZSwKIAkJCQkJIHBhZ2UsCiAJCQkJCSBhZnNfZmlsZV9yZWFkcGFnZV9yZWFkX2NvbXBsZXRlLAogCQkJCQkgTlVMTCwKQEAgLTE3MSwyMCArMTU2LDIxIEBACiAjZWxzZQogCXJldCA9IC1FTk9CVUZTOwogI2VuZGlmCi0KIAlzd2l0Y2ggKHJldCkgewotCQkvKiByZWFkIEJJTyBzdWJtaXR0ZWQgYW5kIHdiLWpvdXJuYWwgZW50cnkgZm91bmQgKi8KLQljYXNlIDE6Ci0JCUJVRygpOyAvLyBUT0RPIC0gaGFuZGxlIHdiLWpvdXJuYWwgbWF0Y2gKLQogCQkvKiByZWFkIEJJTyBzdWJtaXR0ZWQgKHBhZ2UgaW4gY2FjaGUpICovCiAJY2FzZSAwOgogCQlicmVhazsKIAotCQkvKiBubyBwYWdlIGF2YWlsYWJsZSBpbiBjYWNoZSAqLwotCWNhc2UgLUVOT0JVRlM6CisJCS8qIHBhZ2Ugbm90IHlldCBjYWNoZWQgKi8KIAljYXNlIC1FTk9EQVRBOgorCQlfZGVidWcoImNhY2hlIHNhaWQgRU5PREFUQSIpOworCQlnb3RvIGdvX29uOworCisJCS8qIHBhZ2Ugd2lsbCBub3QgYmUgY2FjaGVkICovCisJY2FzZSAtRU5PQlVGUzoKKwkJX2RlYnVnKCJjYWNoZSBzYWlkIEVOT0JVRlMiKTsKIAlkZWZhdWx0OgorCWdvX29uOgogCQlvZmZzZXQgPSBwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUOwogCQlsZW4gPSBtaW5fdChzaXplX3QsIGlfc2l6ZV9yZWFkKGlub2RlKSAtIG9mZnNldCwgUEFHRV9TSVpFKTsKIApAQCAtMTk4LDI3ICsxODQsMjUgQEAKIAkJCQlzZXRfYml0KEFGU19WTk9ERV9ERUxFVEVELCAmdm5vZGUtPmZsYWdzKTsKIAkJCQlyZXQgPSAtRVNUQUxFOwogCQkJfQotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQkJCWNhY2hlZnNfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSk7CisKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwkJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSk7CiAjZW5kaWYKKwkJCUJVR19PTihQYWdlRnNDYWNoZShwYWdlKSk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAKIAkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCQlpZiAoY2FjaGVmc193cml0ZV9wYWdlKHZub2RlLT5jYWNoZSwKLQkJCQkgICAgICAgcGFnZSwKLQkJCQkgICAgICAgYWZzX2ZpbGVfcmVhZHBhZ2Vfd3JpdGVfY29tcGxldGUsCi0JCQkJICAgICAgIE5VTEwsCi0JCQkJICAgICAgIEdGUF9LRVJORUwpICE9IDAKLQkJICAgICkgewotCQkJY2FjaGVmc191bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKLQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkvKiBzZW5kIHRoZSBwYWdlIHRvIHRoZSBjYWNoZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCQlpZiAoUGFnZUZzQ2FjaGUocGFnZSkgJiYKKwkJICAgIGZzY2FjaGVfd3JpdGVfcGFnZSh2bm9kZS0+Y2FjaGUsIHBhZ2UsIEdGUF9LRVJORUwpICE9IDApIHsKKwkJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSk7CisJCQlCVUdfT04oUGFnZUZzQ2FjaGUocGFnZSkpOwogCQl9Ci0jZWxzZQotCQl1bmxvY2tfcGFnZShwYWdlKTsKICNlbmRpZgorCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9CiAKIAlfbGVhdmUoIiA9IDAiKTsKQEAgLTIzMiwzNCArMjE2LDU5IEBACiB9CiAKIC8qCi0gKiBpbnZhbGlkYXRlIHBhcnQgb3IgYWxsIG9mIGEgcGFnZQorICogcmVhZCBhIHNldCBvZiBwYWdlcwogICovCi1zdGF0aWMgdm9pZCBhZnNfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorc3RhdGljIGludCBhZnNfcmVhZHBhZ2VzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywgdW5zaWduZWQgbnJfcGFnZXMpCiB7Ci0JaW50IHJldCA9IDE7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGU7CisJaW50IHJldCA9IDA7CiAKLQlfZW50ZXIoInslbHV9LCVsdSIsIHBhZ2UtPmluZGV4LCBvZmZzZXQpOworCV9lbnRlcigiLHslbHV9LCwlZCIsIG1hcHBpbmctPmhvc3QtPmlfaW5vLCBucl9wYWdlcyk7CiAKLQlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwotCi0JaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKSB7Ci0JCS8qIFdlIHJlbGVhc2UgYnVmZmVycyBvbmx5IGlmIHRoZSBlbnRpcmUgcGFnZSBpcyBiZWluZwotCQkgKiBpbnZhbGlkYXRlZC4KLQkJICogVGhlIGdldF9ibG9jayBjYWNoZWQgdmFsdWUgaGFzIGJlZW4gdW5jb25kaXRpb25hbGx5Ci0JCSAqIGludmFsaWRhdGVkLCBzbyByZWFsIElPIGlzIG5vdCBwb3NzaWJsZSBhbnltb3JlLgotCQkgKi8KLQkJaWYgKG9mZnNldCA9PSAwKSB7Ci0JCQlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwotCi0JCQlyZXQgPSAwOwotCQkJaWYgKCFQYWdlV3JpdGViYWNrKHBhZ2UpKQotCQkJCXJldCA9IHBhZ2UtPm1hcHBpbmctPmFfb3BzLT5yZWxlYXNlcGFnZShwYWdlLAotCQkJCQkJCQkJMCk7Ci0JCQkvKiBwb3NzaWJseSBzaG91bGQgQlVHX09OKCFyZXQpOyAtIG5laWxiICovCi0JCX0KKwl2bm9kZSA9IEFGU19GU19JKG1hcHBpbmctPmhvc3QpOworCWlmICh2bm9kZS0+ZmxhZ3MgJiBBRlNfVk5PREVfREVMRVRFRCkgeworCQlfbGVhdmUoIiA9IC1FU1RBTEUiKTsKKwkJcmV0dXJuIC1FU1RBTEU7CiAJfQogCi0JX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJLyogYXR0ZW1wdCB0byByZWFkIGFzIG1hbnkgb2YgdGhlIHBhZ2VzIGFzIHBvc3NpYmxlICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJcmV0ID0gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKHZub2RlLT5jYWNoZSwKKwkJCQkJICBtYXBwaW5nLAorCQkJCQkgIHBhZ2VzLAorCQkJCQkgICZucl9wYWdlcywKKwkJCQkJICBhZnNfZmlsZV9yZWFkcGFnZV9yZWFkX2NvbXBsZXRlLAorCQkJCQkgIE5VTEwsCisJCQkJCSAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CisjZWxzZQorCXJldCA9IC1FTk9CVUZTOworI2VuZGlmCisKKwlzd2l0Y2ggKHJldCkgeworCQkvKiBhbGwgcGFnZXMgYXJlIGJlaW5nIHJlYWQgZnJvbSB0aGUgY2FjaGUgKi8KKwljYXNlIDA6CisJCUJVR19PTighbGlzdF9lbXB0eShwYWdlcykpOworCQlCVUdfT04obnJfcGFnZXMgIT0gMCk7CisJCV9sZWF2ZSgiID0gMCBbcmVhZGluZyBhbGxdIik7CisJCXJldHVybiAwOworCisJCS8qIHRoZXJlIHdlcmUgcGFnZXMgdGhhdCBjb3VsZG4ndCBiZSByZWFkIGZyb20gdGhlIGNhY2hlICovCisJY2FzZSAtRU5PREFUQToKKwljYXNlIC1FTk9CVUZTOgorCQlicmVhazsKKworCQkvKiBvdGhlciBlcnJvciAqLworCWRlZmF1bHQ6CisJCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGxvYWQgdGhlIG1pc3NpbmcgcGFnZXMgZnJvbSB0aGUgbmV0d29yayAqLworCXJldCA9IHJlYWRfY2FjaGVfcGFnZXMobWFwcGluZywgcGFnZXMsICh2b2lkICopIGFmc19yZWFkcGFnZSwgZmlsZSk7CisKKwlfbGVhdmUoIiA9ICVkIFtuZXR0aW5nXSIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTI3MywyNSArMjgyLDgyIEBACiB9CiAKIC8qCi0gKiByZWxlYXNlIGEgcGFnZSBhbmQgY2xlYW51cCBpdHMgcHJpdmF0ZSBkYXRhCisgKiBpbnZhbGlkYXRlIHBhcnQgb3IgYWxsIG9mIGEgcGFnZQorICogLSByZWxlYXNlIGEgcGFnZSBhbmQgY2xlYW4gdXAgaXRzIHByaXZhdGUgZGF0YSBpZiBvZmZzZXQgaXMgMCAoaW5kaWNhdGluZworICogICB0aGUgZW50aXJlIHBhZ2UpCisgKi8KK3N0YXRpYyB2b2lkIGFmc19pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJc3RydWN0IGFmc193cml0ZWJhY2sgKndiID0gKHN0cnVjdCBhZnNfd3JpdGViYWNrICopIHBhZ2VfcHJpdmF0ZShwYWdlKTsKKworCV9lbnRlcigieyVsdX0sJWx1IiwgcGFnZS0+aW5kZXgsIG9mZnNldCk7CisKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJLyogd2UgY2xlYW4gdXAgb25seSBpZiB0aGUgZW50aXJlIHBhZ2UgaXMgYmVpbmcgaW52YWxpZGF0ZWQgKi8KKwlpZiAob2Zmc2V0ID09IDApIHsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwkJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCQlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCQkJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUodm5vZGUtPmNhY2hlLCBwYWdlKTsKKwkJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSk7CisJCQlDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpOworCQl9CisjZW5kaWYKKworCQlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKKwkJCWlmICh3YiAmJiAhUGFnZVdyaXRlYmFjayhwYWdlKSkgeworCQkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CisJCQkJYWZzX3B1dF93cml0ZWJhY2sod2IpOworCQkJfQorCisJCQlpZiAoIXBhZ2VfcHJpdmF0ZShwYWdlKSkKKwkJCQlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOworCQl9CisJfQorCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIHJlbGVhc2UgYSBwYWdlIGFuZCBjbGVhbiB1cCBpdHMgcHJpdmF0ZSBzdGF0ZSBpZiBpdCdzIG5vdCBidXN5CisgKiAtIHJldHVybiB0cnVlIGlmIHRoZSBwYWdlIGNhbiBub3cgYmUgcmVsZWFzZWQsIGZhbHNlIGlmIG5vdAogICovCiBzdGF0aWMgaW50IGFmc19yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogeworCXN0cnVjdCBhZnNfd3JpdGViYWNrICp3YiA9IChzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqKSBwYWdlX3ByaXZhdGUocGFnZSk7CiAJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KTsKLQlzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqd2I7CiAKIAlfZW50ZXIoInt7JXg6JXV9WyVsdV0sJWx4fSwleCIsCiAJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBwYWdlLT5pbmRleCwgcGFnZS0+ZmxhZ3MsCiAJICAgICAgIGdmcF9mbGFncyk7CiAKKwkvKiBkZW55IGlmIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUgYW5kIHRoZSBjYWxsZXIgaGFzbid0CisJICogZWxlY3RlZCB0byB3YWl0ICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCWlmIChmc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUodm5vZGUtPmNhY2hlLCBwYWdlKSkgeworCQkJaWYgKCEoZ2ZwX2ZsYWdzICYgX19HRlBfV0FJVCkpIHsKKwkJCQlfbGVhdmUoIiA9IEYgW2NhY2hlIGJ1c3ldIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOworCQl9CisKKwkJZnNjYWNoZV91bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKKwkJQ2xlYXJQYWdlRnNDYWNoZShwYWdlKTsKKwl9CisjZW5kaWYKKwogCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkgewotCQl3YiA9IChzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqKSBwYWdlX3ByaXZhdGUocGFnZSk7Ci0JCUFTU0VSVCh3YiAhPSBOVUxMKTsKLQkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKKwkJaWYgKHdiKSB7CisJCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOworCQkJYWZzX3B1dF93cml0ZWJhY2sod2IpOworCQl9CiAJCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7Ci0JCWFmc19wdXRfd3JpdGViYWNrKHdiKTsKIAl9CiAKLQlfbGVhdmUoIiA9IDAiKTsKLQlyZXR1cm4gMDsKKwkvKiBpbmRpY2F0ZSB0aGF0IHRoZSBwYWdlIGNhbiBiZSByZWxlYXNlZCAqLworCV9sZWF2ZSgiID0gVCIpOworCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCBiYjQ3MjE3Li5jMDQ4ZjA2IDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYworKysgYi9mcy9hZnMvaW5vZGUuYwpAQCAtNjEsNiArNjEsMTEgQEAKIAkJcmV0dXJuIC1FQkFETVNHOwogCX0KIAorI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWlmICh2bm9kZS0+c3RhdHVzLnNpemUgIT0gaW5vZGUtPmlfc2l6ZSkKKwkJZnNjYWNoZV9hdHRyX2NoYW5nZWQodm5vZGUtPmNhY2hlKTsKKyNlbmRpZgorCiAJaW5vZGUtPmlfbmxpbmsJCT0gdm5vZGUtPnN0YXR1cy5ubGluazsKIAlpbm9kZS0+aV91aWQJCT0gdm5vZGUtPnN0YXR1cy5vd25lcjsKIAlpbm9kZS0+aV9naWQJCT0gMDsKQEAgLTE0OSwxNSArMTU0LDYgQEAKIAkJcmV0dXJuIGlub2RlOwogCX0KIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQkvKiBzZXQgdXAgY2FjaGluZyBiZWZvcmUgcmVhZGluZyB0aGUgc3RhdHVzLCBhcyBmZXRjaC1zdGF0dXMgcmVhZHMgdGhlCi0JICogZmlyc3QgcGFnZSBvZiBzeW1saW5rcyB0byBzZWUgaWYgdGhleSdyZSByZWFsbHkgbW50cHRzICovCi0JY2FjaGVmc19hY3F1aXJlX2Nvb2tpZSh2bm9kZS0+dm9sdW1lLT5jYWNoZSwKLQkJCSAgICAgICBOVUxMLAotCQkJICAgICAgIHZub2RlLAotCQkJICAgICAgICZ2bm9kZS0+Y2FjaGUpOwotI2VuZGlmCi0KIAlpZiAoIXN0YXR1cykgewogCQkvKiBpdCdzIGEgcmVtb3RlbHkgZXh0YW50IGlub2RlICovCiAJCXNldF9iaXQoQUZTX1ZOT0RFX0NCX0JST0tFTiwgJnZub2RlLT5mbGFncyk7CkBAIC0xODMsNiArMTc5LDE1IEBACiAJCX0KIAl9CiAKKwkvKiBzZXQgdXAgY2FjaGluZyBiZWZvcmUgbWFwcGluZyB0aGUgc3RhdHVzLCBhcyBtYXAtc3RhdHVzIHJlYWRzIHRoZQorCSAqIGZpcnN0IHBhZ2Ugb2Ygc3ltbGlua3MgdG8gc2VlIGlmIHRoZXkncmUgcmVhbGx5IG1vdW50cG9pbnRzICovCisJaW5vZGUtPmlfc2l6ZSA9IHZub2RlLT5zdGF0dXMuc2l6ZTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwl2bm9kZS0+Y2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKHZub2RlLT52b2x1bWUtPmNhY2hlLAorCQkJCQkgICAgICAmYWZzX3Zub2RlX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkJICAgICAgdm5vZGUpOworI2VuZGlmCisKIAlyZXQgPSBhZnNfaW5vZGVfbWFwX3N0YXR1cyh2bm9kZSwga2V5KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBiYWRfaW5vZGU7CkBAIC0xOTYsNiArMjAxLDEwIEBACiAKIAkvKiBmYWlsdXJlICovCiBiYWRfaW5vZGU6CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSh2bm9kZS0+Y2FjaGUsIDApOworCXZub2RlLT5jYWNoZSA9IE5VTEw7CisjZW5kaWYKIAlpZ2V0X2ZhaWxlZChpbm9kZSk7CiAJX2xlYXZlKCIgPSAlZCBbYmFkXSIsIHJldCk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKQEAgLTM0MCw4ICszNDksOCBAQAogCUFTU0VSVChsaXN0X2VtcHR5KCZ2bm9kZS0+d3JpdGViYWNrcykpOwogCUFTU0VSVCghdm5vZGUtPmNiX3Byb21pc2VkKTsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX3JlbGlucXVpc2hfY29va2llKHZub2RlLT5jYWNoZSwgMCk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSh2bm9kZS0+Y2FjaGUsIDApOwogCXZub2RlLT5jYWNoZSA9IE5VTEw7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCA2N2YyNTlkLi4xMDZiZTY2IDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAorKysgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAiYWZzLmgiCiAjaW5jbHVkZSAiYWZzX3ZsLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKIAogI2RlZmluZSBBRlNfQ0VMTF9NQVhfQUREUlMgMTUKIApAQCAtMTkzLDggKzE5NCw4IEBACiAJc3RydWN0IGtleQkJKmFub255bW91c19rZXk7CS8qIGFub255bW91cyB1c2VyIGtleSBmb3IgdGhpcyBjZWxsICovCiAJc3RydWN0IGxpc3RfaGVhZAlwcm9jX2xpbms7CS8qIC9wcm9jIGNlbGwgbGlzdCBsaW5rICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX2RpcjsJLyogL3Byb2MgZGlyIGZvciB0aGlzIGNlbGwgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0Jc3RydWN0IGNhY2hlZnNfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCiAjZW5kaWYKIAogCS8qIHNlcnZlciByZWNvcmQgbWFuYWdlbWVudCAqLwpAQCAtMjQ5LDggKzI1MCw4IEBACiAJc3RydWN0IGxpc3RfaGVhZAlncmF2ZTsJCS8qIGxpbmsgaW4gbWFzdGVyIGdyYXZleWFyZCBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZAl1cGRhdGU7CQkvKiBsaW5rIGluIG1hc3RlciB1cGRhdGUgbGlzdCAqLwogCXN0cnVjdCBhZnNfY2VsbAkJKmNlbGw7CQkvKiBjZWxsIHRvIHdoaWNoIHZvbHVtZSBiZWxvbmdzICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCXN0cnVjdCBjYWNoZWZzX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLwogI2VuZGlmCiAJc3RydWN0IGFmc19jYWNoZV92bG9jYXRpb24gdmxkYjsJLyogdm9sdW1lIGluZm9ybWF0aW9uIERCIHJlY29yZCAqLwogCXN0cnVjdCBhZnNfdm9sdW1lCSp2b2xzWzNdOwkvKiB2b2x1bWUgYWNjZXNzIHJlY29yZCBwb2ludGVyIChpbmRleCBieSB0eXBlKSAqLwpAQCAtMzAyLDggKzMwMyw4IEBACiAJYXRvbWljX3QJCXVzYWdlOwogCXN0cnVjdCBhZnNfY2VsbAkJKmNlbGw7CQkvKiBjZWxsIHRvIHdoaWNoIGJlbG9uZ3MgKHVucmVmZCBwdHIpICovCiAJc3RydWN0IGFmc192bG9jYXRpb24JKnZsb2NhdGlvbjsJLyogdm9sdW1lIGxvY2F0aW9uICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCXN0cnVjdCBjYWNoZWZzX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLwogI2VuZGlmCiAJYWZzX3ZvbGlkX3QJCXZpZDsJCS8qIHZvbHVtZSBJRCAqLwogCWFmc192b2x0eXBlX3QJCXR5cGU7CQkvKiB0eXBlIG9mIHZvbHVtZSAqLwpAQCAtMzMzLDggKzMzNCw4IEBACiAJc3RydWN0IGFmc19zZXJ2ZXIJKnNlcnZlcjsJLyogc2VydmVyIGN1cnJlbnRseSBzdXBwbHlpbmcgdGhpcyBmaWxlICovCiAJc3RydWN0IGFmc19maWQJCWZpZDsJCS8qIHRoZSBmaWxlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5vZGUgKi8KIAlzdHJ1Y3QgYWZzX2ZpbGVfc3RhdHVzCXN0YXR1czsJCS8qIEFGUyBzdGF0dXMgaW5mbyBmb3IgdGhpcyBmaWxlICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCXN0cnVjdCBjYWNoZWZzX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLwogI2VuZGlmCiAJc3RydWN0IGFmc19wZXJtaXRzCSpwZXJtaXRzOwkvKiBjYWNoZSBvZiBwZXJtaXRzIHNvIGZhciBvYnRhaW5lZCAqLwogCXN0cnVjdCBtdXRleAkJcGVybWl0c19sb2NrOwkvKiBsb2NrIGZvciBhbHRlcmluZyBwZXJtaXRzIGxpc3QgKi8KQEAgLTQyOCw2ICs0MjksMjIgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKKyAqIGNhY2hlLmMKKyAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX25ldGZzIGFmc19jYWNoZV9uZXRmczsKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGFmc19jZWxsX2NhY2hlX2luZGV4X2RlZjsKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmOworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgYWZzX3ZvbHVtZV9jYWNoZV9pbmRleF9kZWY7CitleHRlcm4gc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfdm5vZGVfY2FjaGVfaW5kZXhfZGVmOworI2Vsc2UKKyNkZWZpbmUgYWZzX2NlbGxfY2FjaGVfaW5kZXhfZGVmCSgqKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgKikgTlVMTCkKKyNkZWZpbmUgYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYJKCooc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiAqKSBOVUxMKQorI2RlZmluZSBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZgkoKihzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmICopIE5VTEwpCisjZGVmaW5lIGFmc192bm9kZV9jYWNoZV9pbmRleF9kZWYJKCooc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiAqKSBOVUxMKQorI2VuZGlmCisKKy8qCiAgKiBjYWxsYmFjay5jCiAgKi8KIGV4dGVybiB2b2lkIGFmc19pbml0X2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBhZnNfc2VydmVyICopOwpAQCAtNDQ2LDkgKzQ2Myw2IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGFmc19wcm9jX2NlbGxzX3NlbTsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGFmc19wcm9jX2NlbGxzOwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLWV4dGVybiBzdHJ1Y3QgY2FjaGVmc19pbmRleF9kZWYgYWZzX2NhY2hlX2NlbGxfaW5kZXhfZGVmOwotI2VuZGlmCiAKICNkZWZpbmUgYWZzX2dldF9jZWxsKEMpIGRvIHsgYXRvbWljX2luYygmKEMpLT51c2FnZSk7IH0gd2hpbGUoMCkKIGV4dGVybiBpbnQgYWZzX2NlbGxfaW5pdChjaGFyICopOwpAQCAtNTU0LDkgKzU2OCw2IEBACiAgKiBtYWluLmMKICAqLwogZXh0ZXJuIHN0cnVjdCBhZnNfdXVpZCBhZnNfdXVpZDsKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1leHRlcm4gc3RydWN0IGNhY2hlZnNfbmV0ZnMgYWZzX2NhY2hlX25ldGZzOwotI2VuZGlmCiAKIC8qCiAgKiBtaXNjLmMKQEAgLTYzNywxMCArNjQ4LDYgQEAKIC8qCiAgKiB2bGNsaWVudC5jCiAgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1leHRlcm4gc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmOwotI2VuZGlmCi0KIGV4dGVybiBpbnQgYWZzX3ZsX2dldF9lbnRyeV9ieV9uYW1lKHN0cnVjdCBpbl9hZGRyICosIHN0cnVjdCBrZXkgKiwKIAkJCQkgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiAqLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgYWZzX3dhaXRfbW9kZSAqKTsKQEAgLTY2NCwxMiArNjcxLDYgQEAKIC8qCiAgKiB2bm9kZS5jCiAgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1leHRlcm4gc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192bm9kZV9jYWNoZV9pbmRleF9kZWY7Ci0jZW5kaWYKLQotZXh0ZXJuIHN0cnVjdCBhZnNfdGltZXJfb3BzIGFmc192bm9kZV9jYl90aW1lZF9vdXRfb3BzOwotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhZnNfdm5vZGUgKkFGU19GU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGFmc192bm9kZSwgdmZzX2lub2RlKTsKQEAgLTcxMSwxMCArNzEyLDYgQEAKIC8qCiAgKiB2b2x1bWUuYwogICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotZXh0ZXJuIHN0cnVjdCBjYWNoZWZzX2luZGV4X2RlZiBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZjsKLSNlbmRpZgotCiAjZGVmaW5lIGFmc19nZXRfdm9sdW1lKFYpIGRvIHsgYXRvbWljX2luYygmKFYpLT51c2FnZSk7IH0gd2hpbGUoMCkKIAogZXh0ZXJuIHZvaWQgYWZzX3B1dF92b2x1bWUoc3RydWN0IGFmc192b2x1bWUgKik7CmRpZmYgLS1naXQgYS9mcy9hZnMvbWFpbi5jIGIvZnMvYWZzL21haW4uYwppbmRleCAyZDNlNWQ0Li42NmQ1NGQzIDEwMDY0NAotLS0gYS9mcy9hZnMvbWFpbi5jCisrKyBiL2ZzL2Fmcy9tYWluLmMKQEAgLTEsNiArMSw2IEBACiAvKiBBRlMgY2xpZW50IGZpbGUgc3lzdGVtCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMiw1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOSwxOCArMjksNiBAQAogbW9kdWxlX3BhcmFtKHJvb3RjZWxsLCBjaGFycCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJvb3RjZWxsLCAicm9vdCBBRlMgY2VsbCBuYW1lIGFuZCBWTCBzZXJ2ZXIgSVAgYWRkciBsaXN0Iik7CiAKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgc3RydWN0IGNhY2hlZnNfbmV0ZnNfb3BlcmF0aW9ucyBhZnNfY2FjaGVfb3BzID0gewotCS5nZXRfcGFnZV9jb29raWUJPSBhZnNfY2FjaGVfZ2V0X3BhZ2VfY29va2llLAotfTsKLQotc3RydWN0IGNhY2hlZnNfbmV0ZnMgYWZzX2NhY2hlX25ldGZzID0gewotCS5uYW1lCQkJPSAiYWZzIiwKLQkudmVyc2lvbgkJPSAwLAotCS5vcHMJCQk9ICZhZnNfY2FjaGVfb3BzLAotfTsKLSNlbmRpZgotCiBzdHJ1Y3QgYWZzX3V1aWQgYWZzX3V1aWQ7CiAKIC8qCkBAIC0xMDQsMTAgKzkyLDkgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKIAkvKiB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY2FjaGUgKi8KLQlyZXQgPSBjYWNoZWZzX3JlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMsCi0JCQkJICAgICAmYWZzX2NhY2hlX2NlbGxfaW5kZXhfZGVmKTsKKwlyZXQgPSBmc2NhY2hlX3JlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX2NhY2hlOwogI2VuZGlmCkBAIC0xNDIsOCArMTI5LDggQEAKIGVycm9yX29wZW5fc29ja2V0OgogZXJyb3JfdmxfdXBkYXRlX2luaXQ6CiBlcnJvcl9jZWxsX2luaXQ6Ci0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCWNhY2hlZnNfdW5yZWdpc3Rlcl9uZXRmcygmYWZzX2NhY2hlX25ldGZzKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoJmFmc19jYWNoZV9uZXRmcyk7CiBlcnJvcl9jYWNoZToKICNlbmRpZgogCWFmc19jYWxsYmFja191cGRhdGVfa2lsbCgpOwpAQCAtMTc1LDggKzE2Miw4IEBACiAJYWZzX3Zsb2NhdGlvbl9wdXJnZSgpOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJYWZzX2NlbGxfcHVyZ2UoKTsKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc191bnJlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMpOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcygmYWZzX2NhY2hlX25ldGZzKTsKICNlbmRpZgogCWFmc19wcm9jX2NsZWFudXAoKTsKIAlyY3VfYmFycmllcigpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL21udHB0LmMgYi9mcy9hZnMvbW50cHQuYwppbmRleCA3OGRiNDk1Li4yYjllMmQwIDEwMDY0NAotLS0gYS9mcy9hZnMvbW50cHQuYworKysgYi9mcy9hZnMvbW50cHQuYwpAQCAtMTczLDkgKzE3Myw5IEBACiAJaWYgKFBhZ2VFcnJvcihwYWdlKSkKIAkJZ290byBlcnJvcjsKIAotCWJ1ZiA9IGttYXAocGFnZSk7CisJYnVmID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCW1lbWNweShkZXZuYW1lLCBidWYsIHNpemUpOwotCWt1bm1hcChwYWdlKTsKKwlrdW5tYXBfYXRvbWljKGJ1ZiwgS01fVVNFUjApOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAlwYWdlID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL3Zsb2NhdGlvbi5jIGIvZnMvYWZzL3Zsb2NhdGlvbi5jCmluZGV4IDg0OWZjMzEuLmVjMmE3NDMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy92bG9jYXRpb24uYworKysgYi9mcy9hZnMvdmxvY2F0aW9uLmMKQEAgLTI4MSw5ICsyODEsOCBAQAogCiAJdmwtPnZsZGIgPSAqdmxkYjsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQkvKiB1cGRhdGUgdm9sdW1lIGVudHJ5IGluIGxvY2FsIGNhY2hlICovCi0JY2FjaGVmc191cGRhdGVfY29va2llKHZsLT5jYWNoZSk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV91cGRhdGVfY29va2llKHZsLT5jYWNoZSk7CiAjZW5kaWYKIH0KIApAQCAtMzA0LDExICszMDMsOSBAQAogCW1lbXNldCgmdmxkYiwgMCwgc2l6ZW9mKHZsZGIpKTsKIAogCS8qIHNlZSBpZiB3ZSBoYXZlIGFuIGluLWNhY2hlIGNvcHkgKHdpbGwgc2V0IHZsLT52YWxpZCBpZiB0aGVyZSBpcykgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc19hY3F1aXJlX2Nvb2tpZShjZWxsLT5jYWNoZSwKLQkJCSAgICAgICAmYWZzX3ZvbHVtZV9jYWNoZV9pbmRleF9kZWYsCi0JCQkgICAgICAgdmxvY2F0aW9uLAotCQkJICAgICAgICZ2bC0+Y2FjaGUpOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXZsLT5jYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUodmwtPmNlbGwtPmNhY2hlLAorCQkJCQkgICAmYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYsIHZsKTsKICNlbmRpZgogCiAJaWYgKHZsLT52YWxpZCkgewpAQCAtNDIwLDYgKzQxNywxMSBAQAogCXNwaW5fdW5sb2NrKCZ2bC0+bG9jayk7CiAJd2FrZV91cCgmdmwtPndhaXRxKTsKIAorCS8qIHVwZGF0ZSB2b2x1bWUgZW50cnkgaW4gbG9jYWwgY2FjaGUgKi8KKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3VwZGF0ZV9jb29raWUodmwtPmNhY2hlKTsKKyNlbmRpZgorCiAJLyogc2NoZWR1bGUgZm9yIHJlZ3VsYXIgdXBkYXRlcyAqLwogCWFmc192bG9jYXRpb25fcXVldWVfZm9yX3VwZGF0ZXModmwpOwogCWdvdG8gc3VjY2VzczsKQEAgLTQ2NSw3ICs0NjcsNyBAQAogCXNwaW5fdW5sb2NrKCZ2bC0+bG9jayk7CiAKIHN1Y2Nlc3M6Ci0JX2xlYXZlKCIgPSAlcCIsdmwpOworCV9sZWF2ZSgiID0gJXAiLCB2bCk7CiAJcmV0dXJuIHZsOwogCiBlcnJvcl9hYmFuZG9uOgpAQCAtNTIzLDEwICs1MjUsOSBAQAogewogCV9lbnRlcigiJXAiLCB2bCk7CiAKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc19yZWxpbnF1aXNoX2Nvb2tpZSh2bC0+Y2FjaGUsIDApOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUodmwtPmNhY2hlLCAwKTsKICNlbmRpZgotCiAJYWZzX3B1dF9jZWxsKHZsLT5jZWxsKTsKIAlrZnJlZSh2bCk7CiB9CmRpZmYgLS1naXQgYS9mcy9hZnMvdm9sdW1lLmMgYi9mcy9hZnMvdm9sdW1lLmMKaW5kZXggOGJhYjBlMy4uYTM1M2U2OSAxMDA2NDQKLS0tIGEvZnMvYWZzL3ZvbHVtZS5jCisrKyBiL2ZzL2Fmcy92b2x1bWUuYwpAQCAtMTI0LDEzICsxMjQsMTEgQEAKIAl9CiAKIAkvKiBhdHRhY2ggdGhlIGNhY2hlIGFuZCB2b2x1bWUgbG9jYXRpb24gKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc19hY3F1aXJlX2Nvb2tpZSh2bG9jYXRpb24tPmNhY2hlLAotCQkJICAgICAgICZhZnNfdm5vZGVfY2FjaGVfaW5kZXhfZGVmLAotCQkJICAgICAgIHZvbHVtZSwKLQkJCSAgICAgICAmdm9sdW1lLT5jYWNoZSk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJdm9sdW1lLT5jYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUodmxvY2F0aW9uLT5jYWNoZSwKKwkJCQkJICAgICAgICZhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkJICAgICAgIHZvbHVtZSk7CiAjZW5kaWYKLQogCWFmc19nZXRfdmxvY2F0aW9uKHZsb2NhdGlvbik7CiAJdm9sdW1lLT52bG9jYXRpb24gPSB2bG9jYXRpb247CiAKQEAgLTE5NCw4ICsxOTIsOCBAQAogCXVwX3dyaXRlKCZ2bG9jYXRpb24tPmNlbGwtPnZsX3NlbSk7CiAKIAkvKiBmaW5pc2ggY2xlYW5pbmcgdXAgdGhlIHZvbHVtZSAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX3JlbGlucXVpc2hfY29va2llKHZvbHVtZS0+Y2FjaGUsIDApOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUodm9sdW1lLT5jYWNoZSwgMCk7CiAjZW5kaWYKIAlhZnNfcHV0X3Zsb2NhdGlvbih2bG9jYXRpb24pOwogCmRpZmYgLS1naXQgYS9mcy9hZnMvd3JpdGUuYyBiL2ZzL2Fmcy93cml0ZS5jCmluZGV4IDNmYjM2ZDQuLmMyZTdhN2YgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy93cml0ZS5jCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC03ODAsMyArNzgwLDI0IEBACiAJX2xlYXZlKCIgPSAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KKworLyoKKyAqIG5vdGlmaWNhdGlvbiB0aGF0IGEgcHJldmlvdXNseSByZWFkLW9ubHkgcGFnZSBpcyBhYm91dCB0byBiZWNvbWUgd3JpdGFibGUKKyAqIC0gaWYgaXQgcmV0dXJucyBhbiBlcnJvciwgdGhlIGNhbGxlciB3aWxsIGRlbGl2ZXIgYSBidXMgZXJyb3Igc2lnbmFsCisgKi8KK2ludCBhZnNfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KTsKKworCV9lbnRlcigie3sleDoldX19LHslbHh9IiwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHBhZ2UtPmluZGV4KTsKKworCS8qIHdhaXQgZm9yIHRoZSBwYWdlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNhY2hlIGJlZm9yZSB3ZSBhbGxvdyBpdCB0bworCSAqIGJlIG1vZGlmaWVkICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUodm5vZGUtPmNhY2hlLCBwYWdlKTsKKyNlbmRpZgorCisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggZDA2Y2IwMi4uNzZhZmQwZCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtOTAwLDYgKzkwMCw3IEBACiBiZWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJlZnNfZGVidWcoc2IsICItLS0+IGJlZnNfc3RhdGZzKCkiKTsKIApAQCAtOTEwLDYgKzkxMSw4IEBACiAJYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9iZnJlZTsKIAlidWYtPmZfZmlsZXMgPSAwOwkvKiBVTktOT1dOICovCiAJYnVmLT5mX2ZmcmVlID0gMDsJLyogVU5LTk9XTiAqLworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gQkVGU19OQU1FX0xFTjsKIAogCWJlZnNfZGVidWcoc2IsICI8LS0tIGJlZnNfc3RhdGZzKCkiKTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCAzM2I3MjM1Li40MDM4MWRmIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC0xMiw4ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0yMSwyMCArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NobS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CkBAIC01NzYsNyArNTY5LDYgQEAKIAl1bnNpZ25lZCBsb25nIGVycm9yOwogCXN0cnVjdCBlbGZfcGhkciAqZWxmX3BwbnQsICplbGZfcGhkYXRhOwogCXVuc2lnbmVkIGxvbmcgZWxmX2JzcywgZWxmX2JyazsKLQlpbnQgZWxmX2V4ZWNfZmlsZW5vOwogCWludCByZXR2YWwsIGk7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJdW5zaWduZWQgbG9uZyBlbGZfZW50cnk7CkBAIC02MzEsMTIgKzYyMyw2IEBACiAJCWdvdG8gb3V0X2ZyZWVfcGg7CiAJfQogCi0JcmV0dmFsID0gZ2V0X3VudXNlZF9mZCgpOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIG91dF9mcmVlX3BoOwotCWdldF9maWxlKGJwcm0tPmZpbGUpOwotCWZkX2luc3RhbGwoZWxmX2V4ZWNfZmlsZW5vID0gcmV0dmFsLCBicHJtLT5maWxlKTsKLQogCWVsZl9wcG50ID0gZWxmX3BoZGF0YTsKIAllbGZfYnNzID0gMDsKIAllbGZfYnJrID0gMDsKQEAgLTY1NSwxMyArNjQxLDEzIEBACiAJCQlyZXR2YWwgPSAtRU5PRVhFQzsKIAkJCWlmIChlbGZfcHBudC0+cF9maWxlc3ogPiBQQVRIX01BWCB8fCAKIAkJCSAgICBlbGZfcHBudC0+cF9maWxlc3ogPCAyKQotCQkJCWdvdG8gb3V0X2ZyZWVfZmlsZTsKKwkJCQlnb3RvIG91dF9mcmVlX3BoOwogCiAJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZWxmX2ludGVycHJldGVyID0ga21hbGxvYyhlbGZfcHBudC0+cF9maWxlc3osCiAJCQkJCQkgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFlbGZfaW50ZXJwcmV0ZXIpCi0JCQkJZ290byBvdXRfZnJlZV9maWxlOworCQkJCWdvdG8gb3V0X2ZyZWVfcGg7CiAKIAkJCXJldHZhbCA9IGtlcm5lbF9yZWFkKGJwcm0tPmZpbGUsIGVsZl9wcG50LT5wX29mZnNldCwKIAkJCQkJICAgICBlbGZfaW50ZXJwcmV0ZXIsCkBAIC05NTYsOCArOTQyLDYgQEAKIAogCWtmcmVlKGVsZl9waGRhdGEpOwogCi0Jc3lzX2Nsb3NlKGVsZl9leGVjX2ZpbGVubyk7Ci0KIAlzZXRfYmluZm10KCZlbGZfZm9ybWF0KTsKIAogI2lmZGVmIEFSQ0hfSEFTX1NFVFVQX0FERElUSU9OQUxfUEFHRVMKQEAgLTEwMjgsOCArMTAxMiw2IEBACiAJCWZwdXQoaW50ZXJwcmV0ZXIpOwogb3V0X2ZyZWVfaW50ZXJwOgogCWtmcmVlKGVsZl9pbnRlcnByZXRlcik7Ci1vdXRfZnJlZV9maWxlOgotCXN5c19jbG9zZShlbGZfZXhlY19maWxlbm8pOwogb3V0X2ZyZWVfcGg6CiAJa2ZyZWUoZWxmX3BoZGF0YSk7CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKaW5kZXggZjNlNzJjNS4uNzBjZmM0YiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZl9mZHBpYy5jCisrKyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwpAQCAtOTcyLDkgKzk3MiwxMiBAQAogCQkJcGFyYW1zLT5lbGZoZHJfYWRkciA9IHNlZy0+YWRkcjsKIAogCQkvKiBjbGVhciBhbnkgc3BhY2UgYWxsb2NhdGVkIGJ1dCBub3QgbG9hZGVkICovCi0JCWlmIChwaGRyLT5wX2ZpbGVzeiA8IHBoZHItPnBfbWVtc3opCi0JCQljbGVhcl91c2VyKCh2b2lkICopIChzZWctPmFkZHIgKyBwaGRyLT5wX2ZpbGVzeiksCi0JCQkJICAgcGhkci0+cF9tZW1zeiAtIHBoZHItPnBfZmlsZXN6KTsKKwkJaWYgKHBoZHItPnBfZmlsZXN6IDwgcGhkci0+cF9tZW1zeikgeworCQkJcmV0ID0gY2xlYXJfdXNlcigodm9pZCAqKSAoc2VnLT5hZGRyICsgcGhkci0+cF9maWxlc3opLAorCQkJCQkgcGhkci0+cF9tZW1zeiAtIHBoZHItPnBfZmlsZXN6KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQogCiAJCWlmIChtbSkgewogCQkJaWYgKHBoZHItPnBfZmxhZ3MgJiBQRl9YKSB7CkBAIC0xMDE0LDcgKzEwMTcsNyBAQAogCXN0cnVjdCBlbGYzMl9mZHBpY19sb2Fkc2VnICpzZWc7CiAJc3RydWN0IGVsZjMyX3BoZHIgKnBoZHI7CiAJdW5zaWduZWQgbG9uZyBsb2FkX2FkZHIsIGRlbHRhX3ZhZGRyOwotCWludCBsb29wLCBkdnNldDsKKwlpbnQgbG9vcCwgZHZzZXQsIHJldDsKIAogCWxvYWRfYWRkciA9IHBhcmFtcy0+bG9hZF9hZGRyOwogCWRlbHRhX3ZhZGRyID0gMDsKQEAgLTExMTQsNyArMTExNyw5IEBACiAJCSAqIFBUX0xPQUQgKi8KIAkJaWYgKHByb3QgJiBQUk9UX1dSSVRFICYmIGRpc3AgPiAwKSB7CiAJCQlrZGVidWcoImNsZWFyWyVkXSBhZD0lbHggc3o9JWx4IiwgbG9vcCwgbWFkZHIsIGRpc3ApOwotCQkJY2xlYXJfdXNlcigodm9pZCBfX3VzZXIgKikgbWFkZHIsIGRpc3ApOworCQkJcmV0ID0gY2xlYXJfdXNlcigodm9pZCBfX3VzZXIgKikgbWFkZHIsIGRpc3ApOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQkJbWFkZHIgKz0gZGlzcDsKIAkJfQogCkBAIC0xMTQ5LDE1ICsxMTU0LDE5IEBACiAJCWlmIChwcm90ICYgUFJPVF9XUklURSAmJiBleGNlc3MxID4gMCkgewogCQkJa2RlYnVnKCJjbGVhclslZF0gYWQ9JWx4IHN6PSVseCIsCiAJCQkgICAgICAgbG9vcCwgbWFkZHIgKyBwaGRyLT5wX2ZpbGVzeiwgZXhjZXNzMSk7Ci0JCQljbGVhcl91c2VyKCh2b2lkIF9fdXNlciAqKSBtYWRkciArIHBoZHItPnBfZmlsZXN6LAotCQkJCSAgIGV4Y2VzczEpOworCQkJcmV0ID0gY2xlYXJfdXNlcigodm9pZCBfX3VzZXIgKikgbWFkZHIgKyBwaGRyLT5wX2ZpbGVzeiwKKwkJCQkJIGV4Y2VzczEpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAKICNlbHNlCiAJCWlmIChleGNlc3MgPiAwKSB7CiAJCQlrZGVidWcoImNsZWFyWyVkXSBhZD0lbHggc3o9JWx4IiwKIAkJCSAgICAgICBsb29wLCBtYWRkciArIHBoZHItPnBfZmlsZXN6LCBleGNlc3MpOwotCQkJY2xlYXJfdXNlcigodm9pZCAqKSBtYWRkciArIHBoZHItPnBfZmlsZXN6LCBleGNlc3MpOworCQkJcmV0ID0gY2xlYXJfdXNlcigodm9pZCAqKSBtYWRkciArIHBoZHItPnBfZmlsZXN6LCBleGNlc3MpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvYmluZm10X3NvbS5jIGIvZnMvYmluZm10X3NvbS5jCmluZGV4IDA4NjQ0YTYuLmVmZjc0YjkgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9zb20uYworKysgYi9mcy9iaW5mbXRfc29tLmMKQEAgLTE4OCw3ICsxODgsNiBAQAogc3RhdGljIGludAogbG9hZF9zb21fYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7Ci0JaW50IHNvbV9leGVjX2ZpbGVubzsKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGludCBzaXplOwogCXVuc2lnbmVkIGxvbmcgc29tX2VudHJ5OwpAQCAtMjIwLDEyICsyMTksNiBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCXJldHZhbCA9IGdldF91bnVzZWRfZmQoKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBvdXRfZnJlZTsKLQlnZXRfZmlsZShicHJtLT5maWxlKTsKLQlmZF9pbnN0YWxsKHNvbV9leGVjX2ZpbGVubyA9IHJldHZhbCwgYnBybS0+ZmlsZSk7Ci0KIAkvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovCiAJcmV0dmFsID0gZmx1c2hfb2xkX2V4ZWMoYnBybSk7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggYTA0MGNkZS4uZTBjOWU1NCAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTE0MjAsOCArMTQyMCw3IEBACiB9CiAKIC8qCi0gKiBzcGxpdCBhIGJpbyAtIG9ubHkgd29ycnkgYWJvdXQgYSBiaW8gd2l0aCBhIHNpbmdsZSBwYWdlCi0gKiBpbiBpdCdzIGlvdmVjCisgKiBzcGxpdCBhIGJpbyAtIG9ubHkgd29ycnkgYWJvdXQgYSBiaW8gd2l0aCBhIHNpbmdsZSBwYWdlIGluIGl0cyBpb3ZlYwogICovCiBzdHJ1Y3QgYmlvX3BhaXIgKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaSwgaW50IGZpcnN0X3NlY3RvcnMpCiB7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDhjM2M2ODkuLmY0NWRiYzEgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIAl9CiAJcmV0dXJuIHN5bmNfYmxvY2tkZXYoYmRldik7CiB9CitFWFBPUlRfU1lNQk9MKGZzeW5jX2JkZXYpOwogCiAvKioKICAqIGZyZWV6ZV9iZGV2ICAtLSAgbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDFkNTNiNjIuLjdmZGQxODQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJfQogCiAJCWlmICghYWNsKQotCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0KIAogCWlmIChJU19QT1NJWEFDTChkaXIpICYmIGFjbCkgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmMgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwppbmRleCBjODRjYTFmLi41MWJmZGZjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9hc3luYy10aHJlYWQuYworKysgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlICJhc3luYy10aHJlYWQuaCIKIAogI2RlZmluZSBXT1JLX1FVRVVFRF9CSVQgMApAQCAtMTk1LDYgKzE5NCw5IEBACiAJCQkJaWYgKCFsaXN0X2VtcHR5KCZ3b3JrZXItPnBlbmRpbmcpKQogCQkJCQljb250aW51ZTsKIAorCQkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQkJCWJyZWFrOworCiAJCQkJLyogc3RpbGwgbm8gbW9yZSB3b3JrPywgc2xlZXAgZm9yIHJlYWwgKi8KIAkJCQlzcGluX2xvY2tfaXJxKCZ3b3JrZXItPmxvY2spOwogCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC0yMDgsNyArMjEwLDggQEAKIAkJCQl3b3JrZXItPndvcmtpbmcgPSAwOwogCQkJCXNwaW5fdW5sb2NrX2lycSgmd29ya2VyLT5sb2NrKTsKIAotCQkJCXNjaGVkdWxlKCk7CisJCQkJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQkJCXNjaGVkdWxlKCk7CiAJCQl9CiAJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmMgYi9mcy9idHJmcy9jdHJlZS5jCmluZGV4IGRiYjcyNDEuLmU1YjI1MzMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmMKKysrIGIvZnMvYnRyZnMvY3RyZWUuYwpAQCAtMTI0NCw5ICsxMjQ0LDkgQEAKICAqIHJlYWRhaGVhZCBvbmUgZnVsbCBub2RlIG9mIGxlYXZlcywgZmluZGluZyB0aGluZ3MgdGhhdCBhcmUgY2xvc2UKICAqIHRvIHRoZSBibG9jayBpbiAnc2xvdCcsIGFuZCB0cmlnZ2VyaW5nIHJhIG9uIHRoZW0uCiAgKi8KLXN0YXRpYyBub2lubGluZSB2b2lkIHJlYWRhX2Zvcl9zZWFyY2goc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJICAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJICAgICAgaW50IGxldmVsLCBpbnQgc2xvdCwgdTY0IG9iamVjdGlkKQorc3RhdGljIHZvaWQgcmVhZGFfZm9yX3NlYXJjaChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCisJCQkgICAgIGludCBsZXZlbCwgaW50IHNsb3QsIHU2NCBvYmplY3RpZCkKIHsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CkBAIC0xNDQ3LDYgKzE0NDcsMTE3IEBACiB9CiAKIC8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIGJ0cmZzX3NlYXJjaF9zbG90LiAgVGhlIGdvYWwgaXMgdG8gZmluZCBhIGJsb2NrCisgKiBpbiBjYWNoZSB3aXRob3V0IHNldHRpbmcgdGhlIHBhdGggdG8gYmxvY2tpbmcuICBJZiB3ZSBmaW5kIHRoZSBibG9jaworICogd2UgcmV0dXJuIHplcm8gYW5kIHRoZSBwYXRoIGlzIHVuY2hhbmdlZC4KKyAqCisgKiBJZiB3ZSBjYW4ndCBmaW5kIHRoZSBibG9jaywgd2Ugc2V0IHRoZSBwYXRoIGJsb2NraW5nIGFuZCBkbyBzb21lCisgKiByZWFkYS4gIC1FQUdBSU4gaXMgcmV0dXJuZWQgYW5kIHRoZSBzZWFyY2ggbXVzdCBiZSByZXBlYXRlZC4KKyAqLworc3RhdGljIGludAorcmVhZF9ibG9ja19mb3Jfc2VhcmNoKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwLAorCQkgICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKiplYl9yZXQsIGludCBsZXZlbCwgaW50IHNsb3QsCisJCSAgICAgICBzdHJ1Y3QgYnRyZnNfa2V5ICprZXkpCit7CisJdTY0IGJsb2NrbnI7CisJdTY0IGdlbjsKKwl1MzIgYmxvY2tzaXplOworCXN0cnVjdCBleHRlbnRfYnVmZmVyICpiID0gKmViX3JldDsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqdG1wOworCisJYmxvY2tuciA9IGJ0cmZzX25vZGVfYmxvY2twdHIoYiwgc2xvdCk7CisJZ2VuID0gYnRyZnNfbm9kZV9wdHJfZ2VuZXJhdGlvbihiLCBzbG90KTsKKwlibG9ja3NpemUgPSBidHJmc19sZXZlbF9zaXplKHJvb3QsIGxldmVsIC0gMSk7CisKKwl0bXAgPSBidHJmc19maW5kX3RyZWVfYmxvY2socm9vdCwgYmxvY2tuciwgYmxvY2tzaXplKTsKKwlpZiAodG1wICYmIGJ0cmZzX2J1ZmZlcl91cHRvZGF0ZSh0bXAsIGdlbikpIHsKKwkJKmViX3JldCA9IHRtcDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiByZWR1Y2UgbG9jayBjb250ZW50aW9uIGF0IGhpZ2ggbGV2ZWxzCisJICogb2YgdGhlIGJ0cmVlIGJ5IGRyb3BwaW5nIGxvY2tzIGJlZm9yZQorCSAqIHdlIHJlYWQuCisJICovCisJYnRyZnNfcmVsZWFzZV9wYXRoKE5VTEwsIHApOworCWlmICh0bXApCisJCWZyZWVfZXh0ZW50X2J1ZmZlcih0bXApOworCWlmIChwLT5yZWFkYSkKKwkJcmVhZGFfZm9yX3NlYXJjaChyb290LCBwLCBsZXZlbCwgc2xvdCwga2V5LT5vYmplY3RpZCk7CisKKwl0bXAgPSByZWFkX3RyZWVfYmxvY2socm9vdCwgYmxvY2tuciwgYmxvY2tzaXplLCBnZW4pOworCWlmICh0bXApCisJCWZyZWVfZXh0ZW50X2J1ZmZlcih0bXApOworCXJldHVybiAtRUFHQUlOOworfQorCisvKgorICogaGVscGVyIGZ1bmN0aW9uIGZvciBidHJmc19zZWFyY2hfc2xvdC4gIFRoaXMgZG9lcyBhbGwgb2YgdGhlIGNoZWNrcworICogZm9yIG5vZGUtbGV2ZWwgYmxvY2tzIGFuZCBkb2VzIGFueSBiYWxhbmNpbmcgcmVxdWlyZWQgYmFzZWQgb24KKyAqIHRoZSBpbnNfbGVuLgorICoKKyAqIElmIG5vIGV4dHJhIHdvcmsgd2FzIHJlcXVpcmVkLCB6ZXJvIGlzIHJldHVybmVkLiAgSWYgd2UgaGFkIHRvCisgKiBkcm9wIHRoZSBwYXRoLCAtRUFHQUlOIGlzIHJldHVybmVkIGFuZCBidHJmc19zZWFyY2hfc2xvdCBtdXN0CisgKiBzdGFydCBvdmVyCisgKi8KK3N0YXRpYyBpbnQKK3NldHVwX25vZGVzX2Zvcl9zZWFyY2goc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGJ0cmZzX3BhdGggKnAsCisJCSAgICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYiwgaW50IGxldmVsLCBpbnQgaW5zX2xlbikKK3sKKwlpbnQgcmV0OworCWlmICgocC0+c2VhcmNoX2Zvcl9zcGxpdCB8fCBpbnNfbGVuID4gMCkgJiYgYnRyZnNfaGVhZGVyX25yaXRlbXMoYikgPj0KKwkgICAgQlRSRlNfTk9ERVBUUlNfUEVSX0JMT0NLKHJvb3QpIC0gMykgeworCQlpbnQgc3JldDsKKworCQlzcmV0ID0gcmVhZGFfZm9yX2JhbGFuY2Uocm9vdCwgcCwgbGV2ZWwpOworCQlpZiAoc3JldCkKKwkJCWdvdG8gYWdhaW47CisKKwkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocCk7CisJCXNyZXQgPSBzcGxpdF9ub2RlKHRyYW5zLCByb290LCBwLCBsZXZlbCk7CisJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocCwgTlVMTCk7CisKKwkJQlVHX09OKHNyZXQgPiAwKTsKKwkJaWYgKHNyZXQpIHsKKwkJCXJldCA9IHNyZXQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJYiA9IHAtPm5vZGVzW2xldmVsXTsKKwl9IGVsc2UgaWYgKGluc19sZW4gPCAwICYmIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGIpIDwKKwkJICAgQlRSRlNfTk9ERVBUUlNfUEVSX0JMT0NLKHJvb3QpIC8gNCkgeworCQlpbnQgc3JldDsKKworCQlzcmV0ID0gcmVhZGFfZm9yX2JhbGFuY2Uocm9vdCwgcCwgbGV2ZWwpOworCQlpZiAoc3JldCkKKwkJCWdvdG8gYWdhaW47CisKKwkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocCk7CisJCXNyZXQgPSBiYWxhbmNlX2xldmVsKHRyYW5zLCByb290LCBwLCBsZXZlbCk7CisJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocCwgTlVMTCk7CisKKwkJaWYgKHNyZXQpIHsKKwkJCXJldCA9IHNyZXQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJYiA9IHAtPm5vZGVzW2xldmVsXTsKKwkJaWYgKCFiKSB7CisJCQlidHJmc19yZWxlYXNlX3BhdGgoTlVMTCwgcCk7CisJCQlnb3RvIGFnYWluOworCQl9CisJCUJVR19PTihidHJmc19oZWFkZXJfbnJpdGVtcyhiKSA9PSAxKTsKKwl9CisJcmV0dXJuIDA7CisKK2FnYWluOgorCXJldCA9IC1FQUdBSU47Citkb25lOgorCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBsb29rIGZvciBrZXkgaW4gdGhlIHRyZWUuICBwYXRoIGlzIGZpbGxlZCBpbiB3aXRoIG5vZGVzIGFsb25nIHRoZSB3YXkKICAqIGlmIGtleSBpcyBmb3VuZCwgd2UgcmV0dXJuIHplcm8gYW5kIHlvdSBjYW4gZmluZCB0aGUgaXRlbSBpbiB0aGUgbGVhZgogICogbGV2ZWwgb2YgdGhlIHBhdGggKGxldmVsIDApCkBAIC0xNDY0LDE2ICsxNTc1LDExIEBACiAJCSAgICAgIGluc19sZW4sIGludCBjb3cpCiB7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmI7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKnRtcDsKIAlpbnQgc2xvdDsKIAlpbnQgcmV0OwogCWludCBsZXZlbDsKLQlpbnQgc2hvdWxkX3JlYWRhID0gcC0+cmVhZGE7CiAJaW50IGxvd2VzdF91bmxvY2sgPSAxOwotCWludCBibG9ja3NpemU7CiAJdTggbG93ZXN0X2xldmVsID0gMDsKLQl1NjQgYmxvY2tucjsKLQl1NjQgZ2VuOwogCiAJbG93ZXN0X2xldmVsID0gcC0+bG93ZXN0X2xldmVsOwogCVdBUk5fT04obG93ZXN0X2xldmVsICYmIGluc19sZW4gPiAwKTsKQEAgLTE1MDIsNyArMTYwOCwxMSBAQAogCQlpZiAoY293KSB7CiAJCQlpbnQgd3JldDsKIAotCQkJLyogaXMgYSBjb3cgb24gdGhpcyBibG9jayBub3QgcmVxdWlyZWQgKi8KKwkJCS8qCisJCQkgKiBpZiB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBjb3cgdGhpcyBibG9jaworCQkJICogdGhlbiB3ZSBkb24ndCB3YW50IHRvIHNldCB0aGUgcGF0aCBibG9ja2luZywKKwkJCSAqIHNvIHdlIHRlc3QgaXQgaGVyZQorCQkJICovCiAJCQlpZiAoYnRyZnNfaGVhZGVyX2dlbmVyYXRpb24oYikgPT0gdHJhbnMtPnRyYW5zaWQgJiYKIAkJCSAgICBidHJmc19oZWFkZXJfb3duZXIoYikgPT0gcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgJiYKIAkJCSAgICAhYnRyZnNfaGVhZGVyX2ZsYWcoYiwgQlRSRlNfSEVBREVSX0ZMQUdfV1JJVFRFTikpIHsKQEAgLTE1NTcsNTEgKzE2NjcsMTUgQEAKIAkJCWlmIChyZXQgJiYgc2xvdCA+IDApCiAJCQkJc2xvdCAtPSAxOwogCQkJcC0+c2xvdHNbbGV2ZWxdID0gc2xvdDsKLQkJCWlmICgocC0+c2VhcmNoX2Zvcl9zcGxpdCB8fCBpbnNfbGVuID4gMCkgJiYKLQkJCSAgICBidHJmc19oZWFkZXJfbnJpdGVtcyhiKSA+PQotCQkJICAgIEJUUkZTX05PREVQVFJTX1BFUl9CTE9DSyhyb290KSAtIDMpIHsKLQkJCQlpbnQgc3JldDsKKwkJCXJldCA9IHNldHVwX25vZGVzX2Zvcl9zZWFyY2godHJhbnMsIHJvb3QsIHAsIGIsIGxldmVsLAorCQkJCQkJICAgICBpbnNfbGVuKTsKKwkJCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJCQlnb3RvIGFnYWluOworCQkJZWxzZSBpZiAocmV0KQorCQkJCWdvdG8gZG9uZTsKKwkJCWIgPSBwLT5ub2Rlc1tsZXZlbF07CisJCQlzbG90ID0gcC0+c2xvdHNbbGV2ZWxdOwogCi0JCQkJc3JldCA9IHJlYWRhX2Zvcl9iYWxhbmNlKHJvb3QsIHAsIGxldmVsKTsKLQkJCQlpZiAoc3JldCkKLQkJCQkJZ290byBhZ2FpbjsKLQotCQkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwotCQkJCXNyZXQgPSBzcGxpdF9ub2RlKHRyYW5zLCByb290LCBwLCBsZXZlbCk7Ci0JCQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwLCBOVUxMKTsKLQotCQkJCUJVR19PTihzcmV0ID4gMCk7Ci0JCQkJaWYgKHNyZXQpIHsKLQkJCQkJcmV0ID0gc3JldDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQliID0gcC0+bm9kZXNbbGV2ZWxdOwotCQkJCXNsb3QgPSBwLT5zbG90c1tsZXZlbF07Ci0JCQl9IGVsc2UgaWYgKGluc19sZW4gPCAwICYmCi0JCQkJICAgYnRyZnNfaGVhZGVyX25yaXRlbXMoYikgPAotCQkJCSAgIEJUUkZTX05PREVQVFJTX1BFUl9CTE9DSyhyb290KSAvIDQpIHsKLQkJCQlpbnQgc3JldDsKLQotCQkJCXNyZXQgPSByZWFkYV9mb3JfYmFsYW5jZShyb290LCBwLCBsZXZlbCk7Ci0JCQkJaWYgKHNyZXQpCi0JCQkJCWdvdG8gYWdhaW47Ci0KLQkJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKLQkJCQlzcmV0ID0gYmFsYW5jZV9sZXZlbCh0cmFucywgcm9vdCwgcCwgbGV2ZWwpOwotCQkJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocCwgTlVMTCk7Ci0KLQkJCQlpZiAoc3JldCkgewotCQkJCQlyZXQgPSBzcmV0OwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQotCQkJCWIgPSBwLT5ub2Rlc1tsZXZlbF07Ci0JCQkJaWYgKCFiKSB7Ci0JCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChOVUxMLCBwKTsKLQkJCQkJZ290byBhZ2FpbjsKLQkJCQl9Ci0JCQkJc2xvdCA9IHAtPnNsb3RzW2xldmVsXTsKLQkJCQlCVUdfT04oYnRyZnNfaGVhZGVyX25yaXRlbXMoYikgPT0gMSk7Ci0JCQl9CiAJCQl1bmxvY2tfdXAocCwgbGV2ZWwsIGxvd2VzdF91bmxvY2spOwogCiAJCQkvKiB0aGlzIGlzIG9ubHkgdHJ1ZSB3aGlsZSBkcm9wcGluZyBhIHNuYXBzaG90ICovCkBAIC0xNjEwLDQ0ICsxNjg0LDExIEBACiAJCQkJZ290byBkb25lOwogCQkJfQogCi0JCQlibG9ja25yID0gYnRyZnNfbm9kZV9ibG9ja3B0cihiLCBzbG90KTsKLQkJCWdlbiA9IGJ0cmZzX25vZGVfcHRyX2dlbmVyYXRpb24oYiwgc2xvdCk7Ci0JCQlibG9ja3NpemUgPSBidHJmc19sZXZlbF9zaXplKHJvb3QsIGxldmVsIC0gMSk7CisJCQlyZXQgPSByZWFkX2Jsb2NrX2Zvcl9zZWFyY2godHJhbnMsIHJvb3QsIHAsCisJCQkJCQkgICAgJmIsIGxldmVsLCBzbG90LCBrZXkpOworCQkJaWYgKHJldCA9PSAtRUFHQUlOKQorCQkJCWdvdG8gYWdhaW47CiAKLQkJCXRtcCA9IGJ0cmZzX2ZpbmRfdHJlZV9ibG9jayhyb290LCBibG9ja25yLCBibG9ja3NpemUpOwotCQkJaWYgKHRtcCAmJiBidHJmc19idWZmZXJfdXB0b2RhdGUodG1wLCBnZW4pKSB7Ci0JCQkJYiA9IHRtcDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiByZWR1Y2UgbG9jayBjb250ZW50aW9uIGF0IGhpZ2ggbGV2ZWxzCi0JCQkJICogb2YgdGhlIGJ0cmVlIGJ5IGRyb3BwaW5nIGxvY2tzIGJlZm9yZQotCQkJCSAqIHdlIHJlYWQuCi0JCQkJICovCi0JCQkJaWYgKGxldmVsID4gMCkgewotCQkJCQlidHJmc19yZWxlYXNlX3BhdGgoTlVMTCwgcCk7Ci0JCQkJCWlmICh0bXApCi0JCQkJCQlmcmVlX2V4dGVudF9idWZmZXIodG1wKTsKLQkJCQkJaWYgKHNob3VsZF9yZWFkYSkKLQkJCQkJCXJlYWRhX2Zvcl9zZWFyY2gocm9vdCwgcCwKLQkJCQkJCQkJIGxldmVsLCBzbG90LAotCQkJCQkJCQkga2V5LT5vYmplY3RpZCk7Ci0KLQkJCQkJdG1wID0gcmVhZF90cmVlX2Jsb2NrKHJvb3QsIGJsb2NrbnIsCi0JCQkJCQkJIGJsb2Nrc2l6ZSwgZ2VuKTsKLQkJCQkJaWYgKHRtcCkKLQkJCQkJCWZyZWVfZXh0ZW50X2J1ZmZlcih0bXApOwotCQkJCQlnb3RvIGFnYWluOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwotCQkJCQlpZiAodG1wKQotCQkJCQkJZnJlZV9leHRlbnRfYnVmZmVyKHRtcCk7Ci0JCQkJCWlmIChzaG91bGRfcmVhZGEpCi0JCQkJCQlyZWFkYV9mb3Jfc2VhcmNoKHJvb3QsIHAsCi0JCQkJCQkJCSBsZXZlbCwgc2xvdCwKLQkJCQkJCQkJIGtleS0+b2JqZWN0aWQpOwotCQkJCQliID0gcmVhZF9ub2RlX3Nsb3Qocm9vdCwgYiwgc2xvdCk7Ci0JCQkJfQotCQkJfQogCQkJaWYgKCFwLT5za2lwX2xvY2tpbmcpIHsKIAkJCQlpbnQgbHJldDsKIApAQCAtMjExNiw4ICsyMTU3LDcgQEAKIAlCVUdfT04oIXBhdGgtPm5vZGVzW2xldmVsXSk7CiAJbG93ZXIgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxvd2VyKTsKLQlpZiAoc2xvdCA+IG5yaXRlbXMpCi0JCUJVRygpOworCUJVR19PTihzbG90ID4gbnJpdGVtcyk7CiAJaWYgKG5yaXRlbXMgPT0gQlRSRlNfTk9ERVBUUlNfUEVSX0JMT0NLKHJvb3QpKQogCQlCVUcoKTsKIAlpZiAoc2xvdCAhPSBucml0ZW1zKSB7CkBAIC00MDg2LDI4ICs0MTI2LDQ0IEBACiBpbnQgYnRyZnNfbmV4dF9sZWFmKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCkKIHsKIAlpbnQgc2xvdDsKLQlpbnQgbGV2ZWwgPSAxOworCWludCBsZXZlbDsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYzsKLQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbmV4dCA9IE5VTEw7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKm5leHQ7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CiAJdTMyIG5yaXRlbXM7CiAJaW50IHJldDsKKwlpbnQgb2xkX3NwaW5uaW5nID0gcGF0aC0+bGVhdmVfc3Bpbm5pbmc7CisJaW50IGZvcmNlX2Jsb2NraW5nID0gMDsKIAogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhwYXRoLT5ub2Rlc1swXSk7CiAJaWYgKG5yaXRlbXMgPT0gMCkKIAkJcmV0dXJuIDE7CiAKLQlidHJmc19pdGVtX2tleV90b19jcHUocGF0aC0+bm9kZXNbMF0sICZrZXksIG5yaXRlbXMgLSAxKTsKKwkvKgorCSAqIHdlIHRha2UgdGhlIGJsb2NrcyBpbiBhbiBvcmRlciB0aGF0IHVwc2V0cyBsb2NrZGVwLiAgVXNpbmcKKwkgKiBibG9ja2luZyBtb2RlIGlzIHRoZSBvbmx5IHdheSBhcm91bmQgaXQuCisJICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwlmb3JjZV9ibG9ja2luZyA9IDE7CisjZW5kaWYKIAorCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShwYXRoLT5ub2Rlc1swXSwgJmtleSwgbnJpdGVtcyAtIDEpOworYWdhaW46CisJbGV2ZWwgPSAxOworCW5leHQgPSBOVUxMOwogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwogCXBhdGgtPmtlZXBfbG9ja3MgPSAxOworCisJaWYgKCFmb3JjZV9ibG9ja2luZykKKwkJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOworCiAJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwgcGF0aCwgMCwgMCk7CiAJcGF0aC0+a2VlcF9sb2NrcyA9IDA7CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOwogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhwYXRoLT5ub2Rlc1swXSk7CiAJLyoKIAkgKiBieSByZWxlYXNpbmcgdGhlIHBhdGggYWJvdmUgd2UgZHJvcHBlZCBhbGwgb3VyIGxvY2tzLiAgQSBiYWxhbmNlCkBAIC00MTE3LDE5ICs0MTczLDI0IEBACiAJICovCiAJaWYgKG5yaXRlbXMgPiAwICYmIHBhdGgtPnNsb3RzWzBdIDwgbnJpdGVtcyAtIDEpIHsKIAkJcGF0aC0+c2xvdHNbMF0rKzsKKwkJcmV0ID0gMDsKIAkJZ290byBkb25lOwogCX0KIAogCXdoaWxlIChsZXZlbCA8IEJUUkZTX01BWF9MRVZFTCkgewotCQlpZiAoIXBhdGgtPm5vZGVzW2xldmVsXSkKLQkJCXJldHVybiAxOworCQlpZiAoIXBhdGgtPm5vZGVzW2xldmVsXSkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCiAJCXNsb3QgPSBwYXRoLT5zbG90c1tsZXZlbF0gKyAxOwogCQljID0gcGF0aC0+bm9kZXNbbGV2ZWxdOwogCQlpZiAoc2xvdCA+PSBidHJmc19oZWFkZXJfbnJpdGVtcyhjKSkgewogCQkJbGV2ZWwrKzsKLQkJCWlmIChsZXZlbCA9PSBCVFJGU19NQVhfTEVWRUwpCi0JCQkJcmV0dXJuIDE7CisJCQlpZiAobGV2ZWwgPT0gQlRSRlNfTUFYX0xFVkVMKSB7CisJCQkJcmV0ID0gMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC00MTM4LDE2ICs0MTk5LDIyIEBACiAJCQlmcmVlX2V4dGVudF9idWZmZXIobmV4dCk7CiAJCX0KIAotCQkvKiB0aGUgcGF0aCB3YXMgc2V0IHRvIGJsb2NraW5nIGFib3ZlICovCi0JCWlmIChsZXZlbCA9PSAxICYmIChwYXRoLT5sb2Nrc1sxXSB8fCBwYXRoLT5za2lwX2xvY2tpbmcpICYmCi0JCSAgICBwYXRoLT5yZWFkYSkKLQkJCXJlYWRhX2Zvcl9zZWFyY2gocm9vdCwgcGF0aCwgbGV2ZWwsIHNsb3QsIDApOworCQluZXh0ID0gYzsKKwkJcmV0ID0gcmVhZF9ibG9ja19mb3Jfc2VhcmNoKE5VTEwsIHJvb3QsIHBhdGgsICZuZXh0LCBsZXZlbCwKKwkJCQkJICAgIHNsb3QsICZrZXkpOworCQlpZiAocmV0ID09IC1FQUdBSU4pCisJCQlnb3RvIGFnYWluOwogCi0JCW5leHQgPSByZWFkX25vZGVfc2xvdChyb290LCBjLCBzbG90KTsKIAkJaWYgKCFwYXRoLT5za2lwX2xvY2tpbmcpIHsKLQkJCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChjKTsKLQkJCWJ0cmZzX3RyZWVfbG9jayhuZXh0KTsKLQkJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOworCQkJcmV0ID0gYnRyZnNfdHJ5X3NwaW5fbG9jayhuZXh0KTsKKwkJCWlmICghcmV0KSB7CisJCQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CisJCQkJYnRyZnNfdHJlZV9sb2NrKG5leHQpOworCQkJCWlmICghZm9yY2VfYmxvY2tpbmcpCisJCQkJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocGF0aCwgbmV4dCk7CisJCQl9CisJCQlpZiAoZm9yY2VfYmxvY2tpbmcpCisJCQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobmV4dCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtNDE1NywyNyArNDIyNCw0MiBAQAogCQljID0gcGF0aC0+bm9kZXNbbGV2ZWxdOwogCQlpZiAocGF0aC0+bG9ja3NbbGV2ZWxdKQogCQkJYnRyZnNfdHJlZV91bmxvY2soYyk7CisKIAkJZnJlZV9leHRlbnRfYnVmZmVyKGMpOwogCQlwYXRoLT5ub2Rlc1tsZXZlbF0gPSBuZXh0OwogCQlwYXRoLT5zbG90c1tsZXZlbF0gPSAwOwogCQlpZiAoIXBhdGgtPnNraXBfbG9ja2luZykKIAkJCXBhdGgtPmxvY2tzW2xldmVsXSA9IDE7CisKIAkJaWYgKCFsZXZlbCkKIAkJCWJyZWFrOwogCi0JCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOwotCQlpZiAobGV2ZWwgPT0gMSAmJiBwYXRoLT5sb2Nrc1sxXSAmJiBwYXRoLT5yZWFkYSkKLQkJCXJlYWRhX2Zvcl9zZWFyY2gocm9vdCwgcGF0aCwgbGV2ZWwsIHNsb3QsIDApOwotCQluZXh0ID0gcmVhZF9ub2RlX3Nsb3Qocm9vdCwgbmV4dCwgMCk7CisJCXJldCA9IHJlYWRfYmxvY2tfZm9yX3NlYXJjaChOVUxMLCByb290LCBwYXRoLCAmbmV4dCwgbGV2ZWwsCisJCQkJCSAgICAwLCAma2V5KTsKKwkJaWYgKHJldCA9PSAtRUFHQUlOKQorCQkJZ290byBhZ2FpbjsKKwogCQlpZiAoIXBhdGgtPnNraXBfbG9ja2luZykgewogCQkJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzW2xldmVsXSk7Ci0JCQlidHJmc190cmVlX2xvY2sobmV4dCk7Ci0JCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhuZXh0KTsKKwkJCXJldCA9IGJ0cmZzX3RyeV9zcGluX2xvY2sobmV4dCk7CisJCQlpZiAoIXJldCkgeworCQkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOworCQkJCWJ0cmZzX3RyZWVfbG9jayhuZXh0KTsKKwkJCQlpZiAoIWZvcmNlX2Jsb2NraW5nKQorCQkJCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHBhdGgsIG5leHQpOworCQkJfQorCQkJaWYgKGZvcmNlX2Jsb2NraW5nKQorCQkJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOwogCQl9CiAJfQorCXJldCA9IDA7CiBkb25lOgogCXVubG9ja191cChwYXRoLCAwLCAxKTsKLQlyZXR1cm4gMDsKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IG9sZF9zcGlubmluZzsKKwlpZiAoIW9sZF9zcGlubmluZykKKwkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggOTQxNzcxMy4uYWQ5NjQ5NSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC0xNDMsMTIgKzE0MywxNSBAQAogI2RlZmluZSBCVFJGU19GVF9NQVgJCTkKIAogLyoKLSAqIHRoZSBrZXkgZGVmaW5lcyB0aGUgb3JkZXIgaW4gdGhlIHRyZWUsIGFuZCBzbyBpdCBhbHNvIGRlZmluZXMgKG9wdGltYWwpCi0gKiBibG9jayBsYXlvdXQuICBvYmplY3RpZCBjb3JyZXNvbmRzIHRvIHRoZSBpbm9kZSBudW1iZXIuICBUaGUgZmxhZ3MKLSAqIHRlbGxzIHVzIHRoaW5ncyBhYm91dCB0aGUgb2JqZWN0LCBhbmQgaXMgYSBraW5kIG9mIHN0cmVhbSBzZWxlY3Rvci4KLSAqIHNvIGZvciBhIGdpdmVuIGlub2RlLCBrZXlzIHdpdGggZmxhZ3Mgb2YgMSBtaWdodCByZWZlciB0byB0aGUgaW5vZGUKLSAqIGRhdGEsIGZsYWdzIG9mIDIgbWF5IHBvaW50IHRvIGZpbGUgZGF0YSBpbiB0aGUgYnRyZWUgYW5kIGZsYWdzID09IDMKLSAqIG1heSBwb2ludCB0byBleHRlbnRzLgorICogVGhlIGtleSBkZWZpbmVzIHRoZSBvcmRlciBpbiB0aGUgdHJlZSwgYW5kIHNvIGl0IGFsc28gZGVmaW5lcyAob3B0aW1hbCkKKyAqIGJsb2NrIGxheW91dC4KKyAqCisgKiBvYmplY3RpZCBjb3JyZXNwb25kcyB0byB0aGUgaW5vZGUgbnVtYmVyLgorICoKKyAqIHR5cGUgdGVsbHMgdXMgdGhpbmdzIGFib3V0IHRoZSBvYmplY3QsIGFuZCBpcyBhIGtpbmQgb2Ygc3RyZWFtIHNlbGVjdG9yLgorICogc28gZm9yIGEgZ2l2ZW4gaW5vZGUsIGtleXMgd2l0aCB0eXBlIG9mIDEgbWlnaHQgcmVmZXIgdG8gdGhlIGlub2RlIGRhdGEsCisgKiB0eXBlIG9mIDIgbWF5IHBvaW50IHRvIGZpbGUgZGF0YSBpbiB0aGUgYnRyZWUgYW5kIHR5cGUgPT0gMyBtYXkgcG9pbnQgdG8KKyAqIGV4dGVudHMuCiAgKgogICogb2Zmc2V0IGlzIHRoZSBzdGFydGluZyBieXRlIG9mZnNldCBmb3IgdGhpcyBrZXkgaW4gdGhlIHN0cmVhbS4KICAqCkBAIC0yMDAsNyArMjAzLDcgQEAKIAogCS8qCiAJICogc3RhcnRpbmcgYnl0ZSBvZiB0aGlzIHBhcnRpdGlvbiBvbiB0aGUgZGV2aWNlLAotCSAqIHRvIGFsbG93ciBmb3Igc3RyaXBlIGFsaWdubWVudCBpbiB0aGUgZnV0dXJlCisJICogdG8gYWxsb3cgZm9yIHN0cmlwZSBhbGlnbm1lbnQgaW4gdGhlIGZ1dHVyZQogCSAqLwogCV9fbGU2NCBzdGFydF9vZmZzZXQ7CiAKQEAgLTYzMywxOCArNjM2LDM1IEBACiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBncm91cHNfc2VtOwogfTsKIAotc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgewotCXN0cnVjdCByYl9ub2RlIGJ5dGVzX2luZGV4OwotCXN0cnVjdCByYl9ub2RlIG9mZnNldF9pbmRleDsKLQl1NjQgb2Zmc2V0OwotCXU2NCBieXRlczsKKy8qCisgKiBmcmVlIGNsdXN0ZXJzIGFyZSB1c2VkIHRvIGNsYWltIGZyZWUgc3BhY2UgaW4gcmVsYXRpdmVseSBsYXJnZSBjaHVua3MsCisgKiBhbGxvd2luZyB1cyB0byBkbyBsZXNzIHNlZWt5IHdyaXRlcy4gIFRoZXkgYXJlIHVzZWQgZm9yIGFsbCBtZXRhZGF0YQorICogYWxsb2NhdGlvbnMgYW5kIGRhdGEgYWxsb2NhdGlvbnMgaW4gc3NkIG1vZGUuCisgKi8KK3N0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzcGlubG9ja190IHJlZmlsbF9sb2NrOworCXN0cnVjdCByYl9yb290IHJvb3Q7CisKKwkvKiBsYXJnZXN0IGV4dGVudCBpbiB0aGlzIGNsdXN0ZXIgKi8KKwl1NjQgbWF4X3NpemU7CisKKwkvKiBmaXJzdCBleHRlbnQgc3RhcnRpbmcgb2Zmc2V0ICovCisJdTY0IHdpbmRvd19zdGFydDsKKworCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXA7CisJLyoKKwkgKiB3aGVuIGEgY2x1c3RlciBpcyBhbGxvY2F0ZWQgZnJvbSBhIGJsb2NrIGdyb3VwLCB3ZSBwdXQgdGhlCisJICogY2x1c3RlciBvbnRvIGEgbGlzdCBpbiB0aGUgYmxvY2sgZ3JvdXAgc28gdGhhdCBpdCBjYW4KKwkgKiBiZSBmcmVlZCBiZWZvcmUgdGhlIGJsb2NrIGdyb3VwIGlzIGZyZWVkLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgYmxvY2tfZ3JvdXBfbGlzdDsKIH07CiAKIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSB7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CiAJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2l0ZW0gaXRlbTsKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IG11dGV4IGFsbG9jX211dGV4OwogCXN0cnVjdCBtdXRleCBjYWNoZV9tdXRleDsKIAl1NjQgcGlubmVkOwogCXU2NCByZXNlcnZlZDsKQEAgLTY1Niw2ICs2NzYsNyBAQAogCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvOwogCiAJLyogZnJlZSBzcGFjZSBjYWNoZSBzdHVmZiAqLworCXNwaW5sb2NrX3QgdHJlZV9sb2NrOwogCXN0cnVjdCByYl9yb290IGZyZWVfc3BhY2VfYnl0ZXM7CiAJc3RydWN0IHJiX3Jvb3QgZnJlZV9zcGFjZV9vZmZzZXQ7CiAKQEAgLTY2Nyw2ICs2ODgsMTEgQEAKIAogCS8qIHVzYWdlIGNvdW50ICovCiAJYXRvbWljX3QgY291bnQ7CisKKwkvKiBMaXN0IG9mIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXJzIGZvciB0aGlzIGJsb2NrIGdyb3VwLgorCSAqIFRvZGF5IGl0IHdpbGwgb25seSBoYXZlIG9uZSB0aGluZyBvbiBpdCwgYnV0IHRoYXQgbWF5IGNoYW5nZQorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9saXN0OwogfTsKIAogc3RydWN0IGJ0cmZzX2xlYWZfcmVmX3RyZWUgewpAQCAtNzI4LDcgKzc1NCw2IEBACiAJc3RydWN0IG11dGV4IHRyZWVfbG9nX211dGV4OwogCXN0cnVjdCBtdXRleCB0cmFuc2FjdGlvbl9rdGhyZWFkX211dGV4OwogCXN0cnVjdCBtdXRleCBjbGVhbmVyX211dGV4OwotCXN0cnVjdCBtdXRleCBwaW5uZWRfbXV0ZXg7CiAJc3RydWN0IG11dGV4IGNodW5rX211dGV4OwogCXN0cnVjdCBtdXRleCBkcm9wX211dGV4OwogCXN0cnVjdCBtdXRleCB2b2x1bWVfbXV0ZXg7CkBAIC04MzksOCArODY0LDEyIEBACiAJc3BpbmxvY2tfdCBkZWxhbGxvY19sb2NrOwogCXNwaW5sb2NrX3QgbmV3X3RyYW5zX2xvY2s7CiAJdTY0IGRlbGFsbG9jX2J5dGVzOwotCXU2NCBsYXN0X2FsbG9jOwotCXU2NCBsYXN0X2RhdGFfYWxsb2M7CisKKwkvKiBkYXRhX2FsbG9jX2NsdXN0ZXIgaXMgb25seSB1c2VkIGluIHNzZCBtb2RlICovCisJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciBkYXRhX2FsbG9jX2NsdXN0ZXI7CisKKwkvKiBhbGwgbWV0YWRhdGEgYWxsb2NhdGlvbnMgZ28gdGhyb3VnaCB0aGlzIGNsdXN0ZXIgKi8KKwlzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyIG1ldGFfYWxsb2NfY2x1c3RlcjsKIAogCXNwaW5sb2NrX3QgcmVmX2NhY2hlX2xvY2s7CiAJdTY0IHRvdGFsX3JlZl9jYWNoZV9zaXplOwpAQCAtOTMyLDcgKzk2MSw2IEBACiB9OwogCiAvKgotCiAgKiBpbm9kZSBpdGVtcyBoYXZlIHRoZSBkYXRhIHR5cGljYWxseSByZXR1cm5lZCBmcm9tIHN0YXQgYW5kIHN0b3JlIG90aGVyCiAgKiBpbmZvIGFib3V0IG9iamVjdCBjaGFyYWN0ZXJpc3RpY3MuICBUaGVyZSBpcyBvbmUgZm9yIGV2ZXJ5IGZpbGUgYW5kIGRpciBpbgogICogdGhlIEZTCkBAIC05NjMsNyArOTkxLDcgQEAKICNkZWZpbmUgQlRSRlNfRVhURU5UX0NTVU1fS0VZCTEyOAogCiAvKgotICogcm9vdCBpdGVtcyBwb2ludCB0byB0cmVlIHJvb3RzLiAgVGhlcmUgYXJlIHR5cGljYWxseSBpbiB0aGUgcm9vdAorICogcm9vdCBpdGVtcyBwb2ludCB0byB0cmVlIHJvb3RzLiAgVGhleSBhcmUgdHlwaWNhbGx5IGluIHRoZSByb290CiAgKiB0cmVlIHVzZWQgYnkgdGhlIHN1cGVyIGJsb2NrIHRvIGZpbmQgYWxsIHRoZSBvdGhlciB0cmVlcwogICovCiAjZGVmaW5lIEJUUkZTX1JPT1RfSVRFTV9LRVkJMTMyCkBAIC0xMDEwLDYgKzEwMzgsOCBAQAogI2RlZmluZSBCVFJGU19NT1VOVF9TU0QJCQkoMSA8PCAzKQogI2RlZmluZSBCVFJGU19NT1VOVF9ERUdSQURFRAkJKDEgPDwgNCkKICNkZWZpbmUgQlRSRlNfTU9VTlRfQ09NUFJFU1MJCSgxIDw8IDUpCisjZGVmaW5lIEJUUkZTX01PVU5UX05PVFJFRUxPRyAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgQlRSRlNfTU9VTlRfRkxVU0hPTkNPTU1JVCAgICAgICAoMSA8PCA3KQogCiAjZGVmaW5lIGJ0cmZzX2NsZWFyX29wdChvLCBvcHQpCQkoKG8pICY9IH5CVFJGU19NT1VOVF8jI29wdCkKICNkZWZpbmUgYnRyZnNfc2V0X29wdChvLCBvcHQpCQkoKG8pIHw9IEJUUkZTX01PVU5UXyMjb3B0KQpAQCAtMTc0OCw2ICsxNzc4LDcgQEAKIH0KIAogLyogZXh0ZW50LXRyZWUuYyAqLwordm9pZCBidHJmc19wdXRfYmxvY2tfZ3JvdXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZSk7CiBpbnQgYnRyZnNfcnVuX2RlbGF5ZWRfcmVmcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIGludCBidHJmc19sb29rdXBfZXh0ZW50KHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgc3RhcnQsIHU2NCBsZW4pOwpAQCAtMjE3NCwyMSArMjIwNSw0IEBACiBpbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpOwogaW50IGJ0cmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAotLyogZnJlZS1zcGFjZS1jYWNoZS5jICovCi1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCSB1NjQgYnl0ZW5yLCB1NjQgc2l6ZSk7Ci1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2VfbG9jayhzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKTsKLWludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgIHU2NCBieXRlbnIsIHU2NCBzaXplKTsKLWludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZV9sb2NrKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcyk7Ci12b2lkIGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2NhY2hlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCSAgICpibG9ja19ncm91cCk7Ci1zdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYnRyZnNfZmluZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCQkgICAgICAgKmJsb2NrX2dyb3VwLCB1NjQgb2Zmc2V0LAotCQkJCQkgICAgICAgdTY0IGJ5dGVzKTsKLXZvaWQgYnRyZnNfZHVtcF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgICB1NjQgYnl0ZXMpOwotdTY0IGJ0cmZzX2Jsb2NrX2dyb3VwX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2RlbGF5ZWQtcmVmLmMgYi9mcy9idHJmcy9kZWxheWVkLXJlZi5jCmluZGV4IGNiZjdkYzguLmQ2YzAxYzAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2RlbGF5ZWQtcmVmLmMKKysrIGIvZnMvYnRyZnMvZGVsYXllZC1yZWYuYwpAQCAtMTgsNyArMTgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSAiY3RyZWUuaCIKICNpbmNsdWRlICJkZWxheWVkLXJlZi5oIgogI2luY2x1ZGUgInRyYW5zYWN0aW9uLmgiCmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggOTJkNzM5Mi4uOTJjYWE4MCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImxvY2tpbmcuaCIKICNpbmNsdWRlICJyZWYtY2FjaGUuaCIKICNpbmNsdWRlICJ0cmVlLWxvZy5oIgorI2luY2x1ZGUgImZyZWUtc3BhY2UtY2FjaGUuaCIKIAogc3RhdGljIHN0cnVjdCBleHRlbnRfaW9fb3BzIGJ0cmVlX2V4dGVudF9pb19vcHM7CiBzdGF0aWMgdm9pZCBlbmRfd29ya3F1ZXVlX2ZuKHN0cnVjdCBidHJmc193b3JrICp3b3JrKTsKQEAgLTE0MTIsOCArMTQxMyw2IEBACiAKIAlyZXQgPSBleHRlbnRfcmFuZ2VfdXB0b2RhdGUoaW9fdHJlZSwgc3RhcnQgKyBsZW5ndGgsCiAJCQkJICAgIHN0YXJ0ICsgYnVmX2xlbiAtIDEpOwotCWlmIChyZXQgPT0gMSkKLQkJcmV0dXJuIHJldDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjQ3LDEyICsxNjQ2LDE1IEBACiAJbXV0ZXhfaW5pdCgmZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT50cmVlX2xvZ19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZnNfaW5mby0+ZHJvcF9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmZnNfaW5mby0+cGlubmVkX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5jaHVua19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZnNfaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZnNfaW5mby0+Y2xlYW5lcl9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZnNfaW5mby0+dm9sdW1lX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT50cmVlX3JlbG9jX211dGV4KTsKKworCWJ0cmZzX2luaXRfZnJlZV9jbHVzdGVyKCZmc19pbmZvLT5tZXRhX2FsbG9jX2NsdXN0ZXIpOworCWJ0cmZzX2luaXRfZnJlZV9jbHVzdGVyKCZmc19pbmZvLT5kYXRhX2FsbG9jX2NsdXN0ZXIpOworCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNfaW5mby0+dHJhbnNhY3Rpb25fdGhyb3R0bGUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZzX2luZm8tPmFzeW5jX3N1Ym1pdF93YWl0KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCmluZGV4IGY1ZTdjYWUuLjE3OGRmNGMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgInZvbHVtZXMuaCIKICNpbmNsdWRlICJsb2NraW5nLmgiCiAjaW5jbHVkZSAicmVmLWNhY2hlLmgiCisjaW5jbHVkZSAiZnJlZS1zcGFjZS1jYWNoZS5oIgogCiAjZGVmaW5lIFBFTkRJTkdfRVhURU5UX0lOU0VSVCAwCiAjZGVmaW5lIFBFTkRJTkdfRVhURU5UX0RFTEVURSAxCkBAIC0xNjYsNyArMTY3LDYgQEAKIAl1NjQgZXh0ZW50X3N0YXJ0LCBleHRlbnRfZW5kLCBzaXplOwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZpbmZvLT5waW5uZWRfbXV0ZXgpOwogCXdoaWxlIChzdGFydCA8IGVuZCkgewogCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoJmluZm8tPnBpbm5lZF9leHRlbnRzLCBzdGFydCwKIAkJCQkJICAgICZleHRlbnRfc3RhcnQsICZleHRlbnRfZW5kLApAQCAtMTkyLDcgKzE5Miw2IEBACiAJCXJldCA9IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBzdGFydCwgc2l6ZSk7CiAJCUJVR19PTihyZXQpOwogCX0KLQltdXRleF91bmxvY2soJmluZm8tPnBpbm5lZF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5MSw4ICsyOTAsOCBAQAogCQkJICAgYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCArCiAJCQkgICBibG9ja19ncm91cC0+a2V5Lm9mZnNldCk7CiAKLQlyZW1vdmVfc2JfZnJvbV9jYWNoZShyb290LCBibG9ja19ncm91cCk7CiAJYmxvY2tfZ3JvdXAtPmNhY2hlZCA9IDE7CisJcmVtb3ZlX3NiX2Zyb21fY2FjaGUocm9vdCwgYmxvY2tfZ3JvdXApOwogCXJldCA9IDA7CiBlcnI6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwpAQCAtMzI2LDcgKzMyNSw3IEBACiAJcmV0dXJuIGNhY2hlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Jsb2NrX2dyb3VwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpCit2b2lkIGJ0cmZzX3B1dF9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjYWNoZS0+Y291bnQpKQogCQlrZnJlZShjYWNoZSk7CkBAIC0zOTksMTIgKzM5OCwxMiBAQAogCQkJICAgIGRpdl9mYWN0b3IoY2FjaGUtPmtleS5vZmZzZXQsIGZhY3RvcikpIHsKIAkJCQlncm91cF9zdGFydCA9IGNhY2hlLT5rZXkub2JqZWN0aWQ7CiAJCQkJc3Bpbl91bmxvY2soJmNhY2hlLT5sb2NrKTsKLQkJCQlwdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOworCQkJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChjYWNoZSk7CiAJCQkJZ290byBmb3VuZDsKIAkJCX0KIAkJfQogCQlzcGluX3VubG9jaygmY2FjaGUtPmxvY2spOwotCQlwdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOworCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJaWYgKCF3cmFwcGVkKSB7CkBAIC0xNTk0LDcgKzE1OTMsNyBAQAogCWlmICghYmxvY2tfZ3JvdXAgfHwgYmxvY2tfZ3JvdXAtPnJvKQogCQlyZWFkb25seSA9IDE7CiAJaWYgKGJsb2NrX2dyb3VwKQotCQlwdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCXJldHVybiByZWFkb25seTsKIH0KIApAQCAtMjAxOCw3ICsyMDE3LDcgQEAKIAkJCQlXQVJOX09OKHJldCk7CiAJCQl9CiAJCX0KLQkJcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJdG90YWwgLT0gbnVtX2J5dGVzOwogCQlieXRlbnIgKz0gbnVtX2J5dGVzOwogCX0KQEAgLTIwMzUsNyArMjAzNCw3IEBACiAJCXJldHVybiAwOwogCiAJYnl0ZW5yID0gY2FjaGUtPmtleS5vYmplY3RpZDsKLQlwdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChjYWNoZSk7CiAKIAlyZXR1cm4gYnl0ZW5yOwogfQpAQCAtMjA0Nyw3ICsyMDQ2LDYgQEAKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlOwogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KSk7CiAJaWYgKHBpbikgewogCQlzZXRfZXh0ZW50X2RpcnR5KCZmc19pbmZvLT5waW5uZWRfZXh0ZW50cywKIAkJCQlieXRlbnIsIGJ5dGVuciArIG51bSAtIDEsIEdGUF9OT0ZTKTsKQEAgLTIwNTUsNyArMjA1Myw2IEBACiAJCWNsZWFyX2V4dGVudF9kaXJ0eSgmZnNfaW5mby0+cGlubmVkX2V4dGVudHMsCiAJCQkJYnl0ZW5yLCBieXRlbnIgKyBudW0gLSAxLCBHRlBfTk9GUyk7CiAJfQotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKIAogCXdoaWxlIChudW0gPiAwKSB7CiAJCWNhY2hlID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKGZzX2luZm8sIGJ5dGVucik7CkBAIC0yMDgxLDcgKzIwNzgsNyBAQAogCQkJaWYgKGNhY2hlLT5jYWNoZWQpCiAJCQkJYnRyZnNfYWRkX2ZyZWVfc3BhY2UoY2FjaGUsIGJ5dGVuciwgbGVuKTsKIAkJfQotCQlwdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOworCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOwogCQlieXRlbnIgKz0gbGVuOwogCQludW0gLT0gbGVuOwogCX0KQEAgLTIxMTIsNyArMjEwOSw3IEBACiAJCX0KIAkJc3Bpbl91bmxvY2soJmNhY2hlLT5sb2NrKTsKIAkJc3Bpbl91bmxvY2soJmNhY2hlLT5zcGFjZV9pbmZvLT5sb2NrKTsKLQkJcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJYnl0ZW5yICs9IGxlbjsKIAkJbnVtIC09IGxlbjsKIAl9CkBAIC0yMTI3LDcgKzIxMjQsNiBAQAogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqcGlubmVkX2V4dGVudHMgPSAmcm9vdC0+ZnNfaW5mby0+cGlubmVkX2V4dGVudHM7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7CiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KHBpbm5lZF9leHRlbnRzLCBsYXN0LAogCQkJCQkgICAgJnN0YXJ0LCAmZW5kLCBFWFRFTlRfRElSVFkpOwpAQCAtMjEzNiw3ICsyMTMyLDYgQEAKIAkJc2V0X2V4dGVudF9kaXJ0eShjb3B5LCBzdGFydCwgZW5kLCBHRlBfTk9GUyk7CiAJCWxhc3QgPSBlbmQgKyAxOwogCX0KLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNDksNyArMjE0NCw2IEBACiAJaW50IHJldDsKIAogCXdoaWxlICgxKSB7Ci0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7CiAJCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdCh1bnBpbiwgMCwgJnN0YXJ0LCAmZW5kLAogCQkJCQkgICAgRVhURU5UX0RJUlRZKTsKIAkJaWYgKHJldCkKQEAgLTIxNjMsNyArMjE1Nyw2IEBACiAKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMjA1LDcgKzIxOTgsNiBAQAogCWZyZWVfZXh0ZW50X2J1ZmZlcihidWYpOwogcGluaXQ6CiAJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7Ci0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKIAkvKiB1bmxvY2tzIHRoZSBwaW5uZWQgbXV0ZXggKi8KIAlidHJmc191cGRhdGVfcGlubmVkX2V4dGVudHMocm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDEpOwogCkBAIC0yNTExLDggKzI1MDMsNiBAQAogCSAqLwogCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCAmJgogCSAgICBvd25lcl9vYmplY3RpZCA8IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpIHsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQogCQkvKiB1bmxvY2tzIHRoZSBwaW5uZWQgbXV0ZXggKi8KIAkJYnRyZnNfdXBkYXRlX3Bpbm5lZF9leHRlbnRzKHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCAxKTsKIAkJdXBkYXRlX3Jlc2VydmVkX2V4dGVudHMocm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDApOwpAQCAtMjU1NCwyMjggKzI1NDQsMjM3IEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBvcmlnX3Jvb3QtPmZzX2luZm8tPmV4dGVudF9yb290OwotCXU2NCB0b3RhbF9uZWVkZWQgPSBudW1fYnl0ZXM7Ci0JdTY0ICpsYXN0X3B0ciA9IE5VTEw7Ci0JdTY0IGxhc3Rfd2FudGVkID0gMDsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpsYXN0X3B0ciA9IE5VTEw7CiAJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCA9IE5VTEw7Ci0JaW50IGNodW5rX2FsbG9jX2RvbmUgPSAwOwogCWludCBlbXB0eV9jbHVzdGVyID0gMiAqIDEwMjQgKiAxMDI0OwogCWludCBhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gTlVMTCwgKmN1ciA9IE5VTEw7Ci0JaW50IGxvb3AgPSAwOwotCWludCBleHRyYV9sb29wID0gMDsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKKwlpbnQgbGFzdF9wdHJfbG9vcCA9IDA7CisJaW50IGxvb3AgPSAwOwogCiAJV0FSTl9PTihudW1fYnl0ZXMgPCByb290LT5zZWN0b3JzaXplKTsKIAlidHJmc19zZXRfa2V5X3R5cGUoaW5zLCBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwogCWlucy0+b2JqZWN0aWQgPSAwOwogCWlucy0+b2Zmc2V0ID0gMDsKIAorCXNwYWNlX2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhyb290LT5mc19pbmZvLCBkYXRhKTsKKwogCWlmIChvcmlnX3Jvb3QtPnJlZl9jb3dzIHx8IGVtcHR5X3NpemUpCiAJCWFsbG93ZWRfY2h1bmtfYWxsb2MgPSAxOwogCiAJaWYgKGRhdGEgJiBCVFJGU19CTE9DS19HUk9VUF9NRVRBREFUQSkgewotCQlsYXN0X3B0ciA9ICZyb290LT5mc19pbmZvLT5sYXN0X2FsbG9jOworCQlsYXN0X3B0ciA9ICZyb290LT5mc19pbmZvLT5tZXRhX2FsbG9jX2NsdXN0ZXI7CiAJCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgU1NEKSkKIAkJCWVtcHR5X2NsdXN0ZXIgPSA2NCAqIDEwMjQ7CiAJfQogCi0JaWYgKChkYXRhICYgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSkgJiYgYnRyZnNfdGVzdF9vcHQocm9vdCwgU1NEKSkKLQkJbGFzdF9wdHIgPSAmcm9vdC0+ZnNfaW5mby0+bGFzdF9kYXRhX2FsbG9jOworCWlmICgoZGF0YSAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEpICYmIGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIFNTRCkpIHsKKwkJbGFzdF9wdHIgPSAmcm9vdC0+ZnNfaW5mby0+ZGF0YV9hbGxvY19jbHVzdGVyOworCX0KIAogCWlmIChsYXN0X3B0cikgewotCQlpZiAoKmxhc3RfcHRyKSB7Ci0JCQloaW50X2J5dGUgPSAqbGFzdF9wdHI7Ci0JCQlsYXN0X3dhbnRlZCA9ICpsYXN0X3B0cjsKLQkJfSBlbHNlCi0JCQllbXB0eV9zaXplICs9IGVtcHR5X2NsdXN0ZXI7Ci0JfSBlbHNlIHsKLQkJZW1wdHlfY2x1c3RlciA9IDA7CisJCXNwaW5fbG9jaygmbGFzdF9wdHItPmxvY2spOworCQlpZiAobGFzdF9wdHItPmJsb2NrX2dyb3VwKQorCQkJaGludF9ieXRlID0gbGFzdF9wdHItPndpbmRvd19zdGFydDsKKwkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5sb2NrKTsKIAl9CisKIAlzZWFyY2hfc3RhcnQgPSBtYXgoc2VhcmNoX3N0YXJ0LCBmaXJzdF9sb2dpY2FsX2J5dGUocm9vdCwgMCkpOwogCXNlYXJjaF9zdGFydCA9IG1heChzZWFyY2hfc3RhcnQsIGhpbnRfYnl0ZSk7CiAKLQlpZiAobGFzdF93YW50ZWQgJiYgc2VhcmNoX3N0YXJ0ICE9IGxhc3Rfd2FudGVkKSB7Ci0JCWxhc3Rfd2FudGVkID0gMDsKLQkJZW1wdHlfc2l6ZSArPSBlbXB0eV9jbHVzdGVyOworCWlmICghbGFzdF9wdHIpIHsKKwkJZW1wdHlfY2x1c3RlciA9IDA7CisJCWxvb3AgPSAxOwogCX0KIAotCXRvdGFsX25lZWRlZCArPSBlbXB0eV9zaXplOwotCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sIHNlYXJjaF9zdGFydCk7Ci0JaWYgKCFibG9ja19ncm91cCkKLQkJYmxvY2tfZ3JvdXAgPSBidHJmc19sb29rdXBfZmlyc3RfYmxvY2tfZ3JvdXAocm9vdC0+ZnNfaW5mbywKLQkJCQkJCQkgICAgIHNlYXJjaF9zdGFydCk7Ci0Jc3BhY2VfaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKHJvb3QtPmZzX2luZm8sIGRhdGEpOworCWlmIChzZWFyY2hfc3RhcnQgPT0gaGludF9ieXRlKSB7CisJCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sCisJCQkJCQkgICAgICAgc2VhcmNoX3N0YXJ0KTsKKwkJaWYgKGJsb2NrX2dyb3VwICYmIGJsb2NrX2dyb3VwX2JpdHMoYmxvY2tfZ3JvdXAsIGRhdGEpKSB7CisJCQlkb3duX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOworCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQl9IGVsc2UgaWYgKGJsb2NrX2dyb3VwKSB7CisJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCQl9CisJfQogCitzZWFyY2g6CiAJZG93bl9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKLQl3aGlsZSAoMSkgewotCQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZnJlZV9zcGFjZTsKLQkJLyoKLQkJICogdGhlIG9ubHkgd2F5IHRoaXMgaGFwcGVucyBpZiBvdXIgaGludCBwb2ludHMgdG8gYSBibG9jawotCQkgKiBncm91cCB0aGF0cyBub3Qgb2YgdGhlIHByb3BlciB0eXBlLCB3aGlsZSBsb29waW5nIHRoaXMKLQkJICogc2hvdWxkIG5ldmVyIGhhcHBlbgotCQkgKi8KLQkJaWYgKGVtcHR5X3NpemUpCi0JCQlleHRyYV9sb29wID0gMTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsb2NrX2dyb3VwLCAmc3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBzLCBsaXN0KSB7CisJCXU2NCBvZmZzZXQ7CiAKLQkJaWYgKCFibG9ja19ncm91cCkKLQkJCWdvdG8gbmV3X2dyb3VwX25vX2xvY2s7CisJCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CisJCXNlYXJjaF9zdGFydCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7CiAKK2hhdmVfYmxvY2tfZ3JvdXA6CiAJCWlmICh1bmxpa2VseSghYmxvY2tfZ3JvdXAtPmNhY2hlZCkpIHsKIAkJCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5jYWNoZV9tdXRleCk7CiAJCQlyZXQgPSBjYWNoZV9ibG9ja19ncm91cChyb290LCBibG9ja19ncm91cCk7CiAJCQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5jYWNoZV9tdXRleCk7Ci0JCQlpZiAocmV0KQorCQkJaWYgKHJldCkgeworCQkJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAotCQltdXRleF9sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCQlpZiAodW5saWtlbHkoIWJsb2NrX2dyb3VwX2JpdHMoYmxvY2tfZ3JvdXAsIGRhdGEpKSkKLQkJCWdvdG8gbmV3X2dyb3VwOwotCiAJCWlmICh1bmxpa2VseShibG9ja19ncm91cC0+cm8pKQotCQkJZ290byBuZXdfZ3JvdXA7CisJCQlnb3RvIGxvb3A7CiAKLQkJZnJlZV9zcGFjZSA9IGJ0cmZzX2ZpbmRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgc2VhcmNoX3N0YXJ0LAotCQkJCQkJICAgdG90YWxfbmVlZGVkKTsKLQkJaWYgKGZyZWVfc3BhY2UpIHsKLQkJCXU2NCBzdGFydCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7Ci0JCQl1NjQgZW5kID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCArCi0JCQkJYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQ7Ci0KLQkJCXNlYXJjaF9zdGFydCA9IHN0cmlwZV9hbGlnbihyb290LCBmcmVlX3NwYWNlLT5vZmZzZXQpOwotCi0JCQkvKiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGdyb3VwICovCi0JCQlpZiAoc2VhcmNoX3N0YXJ0ICsgbnVtX2J5dGVzID49IHNlYXJjaF9lbmQpCi0JCQkJZ290byBuZXdfZ3JvdXA7Ci0KLQkJCS8qIG1vdmUgb24gdG8gdGhlIG5leHQgZ3JvdXAgKi8KLQkJCWlmIChzZWFyY2hfc3RhcnQgKyBudW1fYnl0ZXMgPiBlbmQpCi0JCQkJZ290byBuZXdfZ3JvdXA7Ci0KLQkJCWlmIChsYXN0X3dhbnRlZCAmJiBzZWFyY2hfc3RhcnQgIT0gbGFzdF93YW50ZWQpIHsKLQkJCQl0b3RhbF9uZWVkZWQgKz0gZW1wdHlfY2x1c3RlcjsKLQkJCQllbXB0eV9zaXplICs9IGVtcHR5X2NsdXN0ZXI7Ci0JCQkJbGFzdF93YW50ZWQgPSAwOwotCQkJCS8qCi0JCQkJICogaWYgc2VhcmNoX3N0YXJ0IGlzIHN0aWxsIGluIHRoaXMgYmxvY2sgZ3JvdXAKLQkJCQkgKiB0aGVuIHdlIGp1c3QgcmUtc2VhcmNoIHRoaXMgYmxvY2sgZ3JvdXAKLQkJCQkgKi8KLQkJCQlpZiAoc2VhcmNoX3N0YXJ0ID49IHN0YXJ0ICYmCi0JCQkJICAgIHNlYXJjaF9zdGFydCA8IGVuZCkgewotCQkJCQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCS8qIGVsc2Ugd2UgZ28gdG8gdGhlIG5leHQgYmxvY2sgZ3JvdXAgKi8KLQkJCQlnb3RvIG5ld19ncm91cDsKLQkJCX0KLQotCQkJaWYgKGV4Y2x1ZGVfbnIgPiAwICYmCi0JCQkgICAgKHNlYXJjaF9zdGFydCArIG51bV9ieXRlcyA+IGV4Y2x1ZGVfc3RhcnQgJiYKLQkJCSAgICAgc2VhcmNoX3N0YXJ0IDwgZXhjbHVkZV9zdGFydCArIGV4Y2x1ZGVfbnIpKSB7Ci0JCQkJc2VhcmNoX3N0YXJ0ID0gZXhjbHVkZV9zdGFydCArIGV4Y2x1ZGVfbnI7Ci0JCQkJLyoKLQkJCQkgKiBpZiBzZWFyY2hfc3RhcnQgaXMgc3RpbGwgaW4gdGhpcyBibG9jayBncm91cAotCQkJCSAqIHRoZW4gd2UganVzdCByZS1zZWFyY2ggdGhpcyBibG9jayBncm91cAotCQkJCSAqLwotCQkJCWlmIChzZWFyY2hfc3RhcnQgPj0gc3RhcnQgJiYKLQkJCQkgICAgc2VhcmNoX3N0YXJ0IDwgZW5kKSB7Ci0JCQkJCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQkJCQkJbGFzdF93YW50ZWQgPSAwOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0KLQkJCQkvKiBlbHNlIHdlIGdvIHRvIHRoZSBuZXh0IGJsb2NrIGdyb3VwICovCi0JCQkJZ290byBuZXdfZ3JvdXA7Ci0JCQl9Ci0KLQkJCWlucy0+b2JqZWN0aWQgPSBzZWFyY2hfc3RhcnQ7Ci0JCQlpbnMtPm9mZnNldCA9IG51bV9ieXRlczsKLQotCQkJYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2VfbG9jayhibG9ja19ncm91cCwgc2VhcmNoX3N0YXJ0LAotCQkJCQkJICAgICBudW1fYnl0ZXMpOwotCQkJLyogd2UgYXJlIGFsbCBnb29kLCBsZXRzIHJldHVybiAqLwotCQkJbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCQkJYnJlYWs7Ci0JCX0KLW5ld19ncm91cDoKLQkJbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCQlwdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwotCQlibG9ja19ncm91cCA9IE5VTEw7Ci1uZXdfZ3JvdXBfbm9fbG9jazoKLQkJLyogZG9uJ3QgdHJ5IHRvIGNvbXBhcmUgbmV3IGFsbG9jYXRpb25zIGFnYWluc3QgdGhlCi0JCSAqIGxhc3QgYWxsb2NhdGlvbiBhbnkgbW9yZQotCQkgKi8KLQkJbGFzdF93YW50ZWQgPSAwOwotCi0JCS8qCi0JCSAqIEhlcmUncyBob3cgdGhpcyB3b3Jrcy4KLQkJICogbG9vcCA9PSAwOiB3ZSB3ZXJlIHNlYXJjaGluZyBhIGJsb2NrIGdyb3VwIHZpYSBhIGhpbnQKLQkJICoJCWFuZCBkaWRuJ3QgZmluZCBhbnl0aGluZywgc28gd2Ugc3RhcnQgYXQKLQkJICoJCXRoZSBoZWFkIG9mIHRoZSBibG9jayBncm91cHMgYW5kIGtlZXAgc2VhcmNoaW5nCi0JCSAqIGxvb3AgPT0gMTogd2UncmUgc2VhcmNoaW5nIHRocm91Z2ggYWxsIG9mIHRoZSBibG9jayBncm91cHMKLQkJICoJCWlmIHdlIGhpdCB0aGUgaGVhZCBhZ2FpbiB3ZSBoYXZlIHNlYXJjaGVkCi0JCSAqCQlhbGwgb2YgdGhlIGJsb2NrIGdyb3VwcyBmb3IgdGhpcyBzcGFjZSBhbmQgd2UKLQkJICoJCW5lZWQgdG8gdHJ5IGFuZCBhbGxvY2F0ZSwgaWYgd2UgY2FudCBlcnJvciBvdXQuCi0JCSAqIGxvb3AgPT0gMjogd2UgYWxsb2NhdGVkIG1vcmUgc3BhY2UgYW5kIGFyZSBsb29waW5nIHRocm91Z2gKLQkJICoJCWFsbCBvZiB0aGUgYmxvY2sgZ3JvdXBzIGFnYWluLgotCQkgKi8KLQkJaWYgKGxvb3AgPT0gMCkgewotCQkJaGVhZCA9ICZzcGFjZV9pbmZvLT5ibG9ja19ncm91cHM7Ci0JCQljdXIgPSBoZWFkLT5uZXh0OwotCQkJbG9vcCsrOwotCQl9IGVsc2UgaWYgKGxvb3AgPT0gMSAmJiBjdXIgPT0gaGVhZCkgewotCQkJaW50IGtlZXBfZ29pbmc7Ci0KLQkJCS8qIGF0IHRoaXMgcG9pbnQgd2UgZ2l2ZSB1cCBvbiB0aGUgZW1wdHlfc2l6ZQotCQkJICogYWxsb2NhdGlvbnMgYW5kIGp1c3QgdHJ5IHRvIGFsbG9jYXRlIHRoZSBtaW4KLQkJCSAqIHNwYWNlLgotCQkJICoKLQkJCSAqIFRoZSBleHRyYV9sb29wIGZpZWxkIHdhcyBzZXQgaWYgYW4gZW1wdHlfc2l6ZQotCQkJICogYWxsb2NhdGlvbiB3YXMgYXR0ZW1wdGVkIGFib3ZlLCBhbmQgaWYgdGhpcwotCQkJICogaXMgdHJ5IHdlIG5lZWQgdG8gdHJ5IHRoZSBsb29wIGFnYWluIHdpdGhvdXQKLQkJCSAqIHRoZSBhZGRpdGlvbmFsIGVtcHR5X3NpemUuCisJCWlmIChsYXN0X3B0cikgeworCQkJLyoKKwkJCSAqIHRoZSByZWZpbGwgbG9jayBrZWVwcyBvdXQgb3RoZXIKKwkJCSAqIHBlb3BsZSB0cnlpbmcgdG8gc3RhcnQgYSBuZXcgY2x1c3RlcgogCQkJICovCi0JCQl0b3RhbF9uZWVkZWQgLT0gZW1wdHlfc2l6ZTsKLQkJCWVtcHR5X3NpemUgPSAwOwotCQkJa2VlcF9nb2luZyA9IGV4dHJhX2xvb3A7Ci0JCQlsb29wKys7CisJCQlzcGluX2xvY2soJmxhc3RfcHRyLT5yZWZpbGxfbG9jayk7CisJCQlvZmZzZXQgPSBidHJmc19hbGxvY19mcm9tX2NsdXN0ZXIoYmxvY2tfZ3JvdXAsIGxhc3RfcHRyLAorCQkJCQkJIG51bV9ieXRlcywgc2VhcmNoX3N0YXJ0KTsKKwkJCWlmIChvZmZzZXQpIHsKKwkJCQkvKiB3ZSBoYXZlIGEgYmxvY2ssIHdlJ3JlIGRvbmUgKi8KKwkJCQlzcGluX3VubG9jaygmbGFzdF9wdHItPnJlZmlsbF9sb2NrKTsKKwkJCQlnb3RvIGNoZWNrczsKKwkJCX0KIAotCQkJaWYgKGFsbG93ZWRfY2h1bmtfYWxsb2MgJiYgIWNodW5rX2FsbG9jX2RvbmUpIHsKLQkJCQl1cF9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKLQkJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgbnVtX2J5dGVzICsKLQkJCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAxKTsKLQkJCQlkb3duX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlnb3RvIGxvb3BfY2hlY2s7Ci0JCQkJaGVhZCA9ICZzcGFjZV9pbmZvLT5ibG9ja19ncm91cHM7CisJCQlzcGluX2xvY2soJmxhc3RfcHRyLT5sb2NrKTsKKwkJCS8qCisJCQkgKiB3aG9vcHMsIHRoaXMgY2x1c3RlciBkb2Vzbid0IGFjdHVhbGx5IHBvaW50IHRvCisJCQkgKiB0aGlzIGJsb2NrIGdyb3VwLiAgR2V0IGEgcmVmIG9uIHRoZSBibG9jaworCQkJICogZ3JvdXAgaXMgZG9lcyBwb2ludCB0byBhbmQgdHJ5IGFnYWluCisJCQkgKi8KKwkJCWlmICghbGFzdF9wdHJfbG9vcCAmJiBsYXN0X3B0ci0+YmxvY2tfZ3JvdXAgJiYKKwkJCSAgICBsYXN0X3B0ci0+YmxvY2tfZ3JvdXAgIT0gYmxvY2tfZ3JvdXApIHsKKworCQkJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJCQkJYmxvY2tfZ3JvdXAgPSBsYXN0X3B0ci0+YmxvY2tfZ3JvdXA7CisJCQkJYXRvbWljX2luYygmYmxvY2tfZ3JvdXAtPmNvdW50KTsKKwkJCQlzcGluX3VubG9jaygmbGFzdF9wdHItPmxvY2spOworCQkJCXNwaW5fdW5sb2NrKCZsYXN0X3B0ci0+cmVmaWxsX2xvY2spOworCisJCQkJbGFzdF9wdHJfbG9vcCA9IDE7CisJCQkJc2VhcmNoX3N0YXJ0ID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZDsKKwkJCQlnb3RvIGhhdmVfYmxvY2tfZ3JvdXA7CisJCQl9CisJCQlzcGluX3VubG9jaygmbGFzdF9wdHItPmxvY2spOworCisJCQkvKgorCQkJICogdGhpcyBjbHVzdGVyIGRpZG4ndCB3b3JrIG91dCwgZnJlZSBpdCBhbmQKKwkJCSAqIHN0YXJ0IG92ZXIKKwkJCSAqLworCQkJYnRyZnNfcmV0dXJuX2NsdXN0ZXJfdG9fZnJlZV9zcGFjZShOVUxMLCBsYXN0X3B0cik7CisKKwkJCWxhc3RfcHRyX2xvb3AgPSAwOworCisJCQkvKiBhbGxvY2F0ZSBhIGNsdXN0ZXIgaW4gdGhpcyBibG9jayBncm91cCAqLworCQkJcmV0ID0gYnRyZnNfZmluZF9zcGFjZV9jbHVzdGVyKHRyYW5zLAorCQkJCQkgICAgICAgYmxvY2tfZ3JvdXAsIGxhc3RfcHRyLAorCQkJCQkgICAgICAgb2Zmc2V0LCBudW1fYnl0ZXMsCisJCQkJCSAgICAgICBlbXB0eV9jbHVzdGVyICsgZW1wdHlfc2l6ZSk7CisJCQlpZiAocmV0ID09IDApIHsKIAkJCQkvKgotCQkJCSAqIHdlJ3ZlIGFsbG9jYXRlZCBhIG5ldyBjaHVuaywga2VlcAotCQkJCSAqIHRyeWluZworCQkJCSAqIG5vdyBwdWxsIG91ciBhbGxvY2F0aW9uIG91dCBvZiB0aGlzCisJCQkJICogY2x1c3RlcgogCQkJCSAqLwotCQkJCWtlZXBfZ29pbmcgPSAxOwotCQkJCWNodW5rX2FsbG9jX2RvbmUgPSAxOwotCQkJfSBlbHNlIGlmICghYWxsb3dlZF9jaHVua19hbGxvYykgewotCQkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMTsKKwkJCQlvZmZzZXQgPSBidHJmc19hbGxvY19mcm9tX2NsdXN0ZXIoYmxvY2tfZ3JvdXAsCisJCQkJCQkgIGxhc3RfcHRyLCBudW1fYnl0ZXMsCisJCQkJCQkgIHNlYXJjaF9zdGFydCk7CisJCQkJaWYgKG9mZnNldCkgeworCQkJCQkvKiB3ZSBmb3VuZCBvbmUsIHByb2NlZWQgKi8KKwkJCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5yZWZpbGxfbG9jayk7CisJCQkJCWdvdG8gY2hlY2tzOworCQkJCX0KIAkJCX0KLWxvb3BfY2hlY2s6Ci0JCQlpZiAoa2VlcF9nb2luZykgewotCQkJCWN1ciA9IGhlYWQtPm5leHQ7Ci0JCQkJZXh0cmFfbG9vcCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIGF0IHRoaXMgcG9pbnQgd2UgZWl0aGVyIGRpZG4ndCBmaW5kIGEgY2x1c3RlcgorCQkJICogb3Igd2Ugd2VyZW4ndCBhYmxlIHRvIGFsbG9jYXRlIGEgYmxvY2sgZnJvbSBvdXIKKwkJCSAqIGNsdXN0ZXIuICBGcmVlIHRoZSBjbHVzdGVyIHdlJ3ZlIGJlZW4gdHJ5aW5nCisJCQkgKiB0byB1c2UsIGFuZCBnbyB0byB0aGUgbmV4dCBibG9jayBncm91cAorCQkJICovCisJCQlpZiAobG9vcCA8IDIpIHsKKwkJCQlidHJmc19yZXR1cm5fY2x1c3Rlcl90b19mcmVlX3NwYWNlKE5VTEwsCisJCQkJCQkJCSAgIGxhc3RfcHRyKTsKKwkJCQlzcGluX3VubG9jaygmbGFzdF9wdHItPnJlZmlsbF9sb2NrKTsKKwkJCQlnb3RvIGxvb3A7CiAJCQl9Ci0JCX0gZWxzZSBpZiAoY3VyID09IGhlYWQpIHsKLQkJCWJyZWFrOworCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5yZWZpbGxfbG9jayk7CiAJCX0KIAotCQlibG9ja19ncm91cCA9IGxpc3RfZW50cnkoY3VyLCBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUsCi0JCQkJCSBsaXN0KTsKLQkJYXRvbWljX2luYygmYmxvY2tfZ3JvdXAtPmNvdW50KTsKKwkJb2Zmc2V0ID0gYnRyZnNfZmluZF9zcGFjZV9mb3JfYWxsb2MoYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKKwkJCQkJCSAgICBudW1fYnl0ZXMsIGVtcHR5X3NpemUpOworCQlpZiAoIW9mZnNldCkKKwkJCWdvdG8gbG9vcDsKK2NoZWNrczoKKwkJc2VhcmNoX3N0YXJ0ID0gc3RyaXBlX2FsaWduKHJvb3QsIG9mZnNldCk7CiAKLQkJc2VhcmNoX3N0YXJ0ID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZDsKLQkJY3VyID0gY3VyLT5uZXh0OworCQkvKiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGdyb3VwICovCisJCWlmIChzZWFyY2hfc3RhcnQgKyBudW1fYnl0ZXMgPj0gc2VhcmNoX2VuZCkgeworCQkJYnRyZnNfYWRkX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIG9mZnNldCwgbnVtX2J5dGVzKTsKKwkJCWdvdG8gbG9vcDsKKwkJfQorCisJCS8qIG1vdmUgb24gdG8gdGhlIG5leHQgZ3JvdXAgKi8KKwkJaWYgKHNlYXJjaF9zdGFydCArIG51bV9ieXRlcyA+CisJCSAgICBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkICsgYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQpIHsKKwkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIG51bV9ieXRlcyk7CisJCQlnb3RvIGxvb3A7CisJCX0KKworCQlpZiAoZXhjbHVkZV9uciA+IDAgJiYKKwkJICAgIChzZWFyY2hfc3RhcnQgKyBudW1fYnl0ZXMgPiBleGNsdWRlX3N0YXJ0ICYmCisJCSAgICAgc2VhcmNoX3N0YXJ0IDwgZXhjbHVkZV9zdGFydCArIGV4Y2x1ZGVfbnIpKSB7CisJCQlzZWFyY2hfc3RhcnQgPSBleGNsdWRlX3N0YXJ0ICsgZXhjbHVkZV9ucjsKKworCQkJYnRyZnNfYWRkX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIG9mZnNldCwgbnVtX2J5dGVzKTsKKwkJCS8qCisJCQkgKiBpZiBzZWFyY2hfc3RhcnQgaXMgc3RpbGwgaW4gdGhpcyBibG9jayBncm91cAorCQkJICogdGhlbiB3ZSBqdXN0IHJlLXNlYXJjaCB0aGlzIGJsb2NrIGdyb3VwCisJCQkgKi8KKwkJCWlmIChzZWFyY2hfc3RhcnQgPj0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCAmJgorCQkJICAgIHNlYXJjaF9zdGFydCA8IChibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkICsKKwkJCQkJICAgIGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0KSkKKwkJCQlnb3RvIGhhdmVfYmxvY2tfZ3JvdXA7CisJCQlnb3RvIGxvb3A7CisJCX0KKworCQlpbnMtPm9iamVjdGlkID0gc2VhcmNoX3N0YXJ0OworCQlpbnMtPm9mZnNldCA9IG51bV9ieXRlczsKKworCQlpZiAob2Zmc2V0IDwgc2VhcmNoX3N0YXJ0KQorCQkJYnRyZnNfYWRkX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIG9mZnNldCwKKwkJCQkJICAgICBzZWFyY2hfc3RhcnQgLSBvZmZzZXQpOworCQlCVUdfT04ob2Zmc2V0ID4gc2VhcmNoX3N0YXJ0KTsKKworCQkvKiB3ZSBhcmUgYWxsIGdvb2QsIGxldHMgcmV0dXJuICovCisJCWJyZWFrOworbG9vcDoKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwl9CisJdXBfcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7CisKKwkvKiBsb29wID09IDAsIHRyeSB0byBmaW5kIGEgY2x1c3RlcmVkIGFsbG9jIGluIGV2ZXJ5IGJsb2NrIGdyb3VwCisJICogbG9vcCA9PSAxLCB0cnkgYWdhaW4gYWZ0ZXIgZm9yY2luZyBhIGNodW5rIGFsbG9jYXRpb24KKwkgKiBsb29wID09IDIsIHNldCBlbXB0eV9zaXplIGFuZCBlbXB0eV9jbHVzdGVyIHRvIDAgYW5kIHRyeSBhZ2FpbgorCSAqLworCWlmICghaW5zLT5vYmplY3RpZCAmJiBsb29wIDwgMyAmJgorCSAgICAoZW1wdHlfc2l6ZSB8fCBlbXB0eV9jbHVzdGVyIHx8IGFsbG93ZWRfY2h1bmtfYWxsb2MpKSB7CisJCWlmIChsb29wID49IDIpIHsKKwkJCWVtcHR5X3NpemUgPSAwOworCQkJZW1wdHlfY2x1c3RlciA9IDA7CisJCX0KKworCQlpZiAoYWxsb3dlZF9jaHVua19hbGxvYykgeworCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCisJCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAxKTsKKwkJCWFsbG93ZWRfY2h1bmtfYWxsb2MgPSAwOworCQl9IGVsc2UgeworCQkJc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPSAxOworCQl9CisKKwkJaWYgKGxvb3AgPCAzKSB7CisJCQlsb29wKys7CisJCQlnb3RvIHNlYXJjaDsKKwkJfQorCQlyZXQgPSAtRU5PU1BDOworCX0gZWxzZSBpZiAoIWlucy0+b2JqZWN0aWQpIHsKKwkJcmV0ID0gLUVOT1NQQzsKIAl9CiAKIAkvKiB3ZSBmb3VuZCB3aGF0IHdlIG5lZWRlZCAqLwpAQCAtMjc4MywyMSArMjc4MiwxMCBAQAogCQlpZiAoIShkYXRhICYgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSkpCiAJCQl0cmFucy0+YmxvY2tfZ3JvdXAgPSBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkOwogCi0JCWlmIChsYXN0X3B0cikKLQkJCSpsYXN0X3B0ciA9IGlucy0+b2JqZWN0aWQgKyBpbnMtPm9mZnNldDsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJcmV0ID0gMDsKLQl9IGVsc2UgaWYgKCFyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJidHJmcyBzZWFyY2hpbmcgZm9yICVsbHUgYnl0ZXMsICIKLQkJICAgICAgICJudW1fYnl0ZXMgJWxsdSwgbG9vcCAlZCwgYWxsb3dlZF9hbGxvYyAlZFxuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxfbmVlZGVkLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyludW1fYnl0ZXMsCi0JCSAgICAgICBsb29wLCBhbGxvd2VkX2NodW5rX2FsbG9jKTsKLQkJcmV0ID0gLUVOT1NQQzsKIAl9Ci0JaWYgKGJsb2NrX2dyb3VwKQotCQlwdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCi0JdXBfcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjkwMiw3ICsyODkwLDcgQEAKIAlyZXQgPSBidHJmc19kaXNjYXJkX2V4dGVudChyb290LCBzdGFydCwgbGVuKTsKIAogCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGNhY2hlLCBzdGFydCwgbGVuKTsKLQlwdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChjYWNoZSk7CiAJdXBkYXRlX3Jlc2VydmVkX2V4dGVudHMocm9vdCwgc3RhcnQsIGxlbiwgMCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzA0MCw3ICszMDI4LDcgQEAKIAlyZXQgPSBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5zLT5vYmplY3RpZCwKIAkJCQkgICAgICBpbnMtPm9mZnNldCk7CiAJQlVHX09OKHJldCk7Ci0JcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCXJldCA9IF9fYnRyZnNfYWxsb2NfcmVzZXJ2ZWRfZXh0ZW50KHRyYW5zLCByb290LCBwYXJlbnQsIHJvb3Rfb2JqZWN0aWQsCiAJCQkJCSAgICByZWZfZ2VuZXJhdGlvbiwgb3duZXIsIGlucywgMSk7CiAJcmV0dXJuIHJldDsKQEAgLTU3MjksNyArNTcxNyw3IEBACiAJV0FSTl9PTihibG9ja19ncm91cC0+cmVzZXJ2ZWQgPiAwKTsKIAlXQVJOX09OKGJ0cmZzX2Jsb2NrX2dyb3VwX3VzZWQoJmJsb2NrX2dyb3VwLT5pdGVtKSA+IDApOwogCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+bG9jayk7Ci0JcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCXJldCA9IDA7CiBvdXQ6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwpAQCAtNTg1Niw5ICs1ODQ0LDEwIEBACiAKIAkJYXRvbWljX3NldCgmY2FjaGUtPmNvdW50LCAxKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKLQkJbXV0ZXhfaW5pdCgmY2FjaGUtPmFsbG9jX211dGV4KTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT50cmVlX2xvY2spOwogCQltdXRleF9pbml0KCZjYWNoZS0+Y2FjaGVfbXV0ZXgpOwogCQlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPmNsdXN0ZXJfbGlzdCk7CiAJCXJlYWRfZXh0ZW50X2J1ZmZlcihsZWFmLCAmY2FjaGUtPml0ZW0sCiAJCQkJICAgYnRyZnNfaXRlbV9wdHJfb2Zmc2V0KGxlYWYsIHBhdGgtPnNsb3RzWzBdKSwKIAkJCQkgICBzaXplb2YoY2FjaGUtPml0ZW0pKTsKQEAgLTU5MTIsOSArNTkwMSwxMCBAQAogCWNhY2hlLT5rZXkudHlwZSA9IEJUUkZTX0JMT0NLX0dST1VQX0lURU1fS0VZOwogCWF0b21pY19zZXQoJmNhY2hlLT5jb3VudCwgMSk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKLQltdXRleF9pbml0KCZjYWNoZS0+YWxsb2NfbXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+dHJlZV9sb2NrKTsKIAltdXRleF9pbml0KCZjYWNoZS0+Y2FjaGVfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+bGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5jbHVzdGVyX2xpc3QpOwogCiAJYnRyZnNfc2V0X2Jsb2NrX2dyb3VwX3VzZWQoJmNhY2hlLT5pdGVtLCBieXRlc191c2VkKTsKIAlidHJmc19zZXRfYmxvY2tfZ3JvdXBfY2h1bmtfb2JqZWN0aWQoJmNhY2hlLT5pdGVtLCBjaHVua19vYmplY3RpZCk7CkBAIC01OTc0LDggKzU5NjQsOCBAQAogCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+c3BhY2VfaW5mby0+bG9jayk7CiAJYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmZ1bGwgPSAwOwogCi0JcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKLQlwdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7CiAJaWYgKHJldCA+IDApCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uYyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCmluZGV4IDA4MDg1YWYuLmViMmJlZTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCkBAIC0yODg0LDI1ICsyODg0LDE5IEBACiAJCWRpc2tvID0gMDsKIAkJZmxhZ3MgPSAwOwogCi0JCXN3aXRjaCAoZW0tPmJsb2NrX3N0YXJ0KSB7Ci0JCWNhc2UgRVhURU5UX01BUF9MQVNUX0JZVEU6CisJCWlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9MQVNUX0JZVEUpIHsKIAkJCWVuZCA9IDE7CiAJCQlmbGFncyB8PSBGSUVNQVBfRVhURU5UX0xBU1Q7Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRFTlRfTUFQX0hPTEU6CisJCX0gZWxzZSBpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfSE9MRSkgewogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9VTldSSVRURU47Ci0JCQlicmVhazsKLQkJY2FzZSBFWFRFTlRfTUFQX0lOTElORToKKwkJfSBlbHNlIGlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9JTkxJTkUpIHsKIAkJCWZsYWdzIHw9IChGSUVNQVBfRVhURU5UX0RBVEFfSU5MSU5FIHwKIAkJCQkgIEZJRU1BUF9FWFRFTlRfTk9UX0FMSUdORUQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVhURU5UX01BUF9ERUxBTExPQzoKKwkJfSBlbHNlIGlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9ERUxBTExPQykgewogCQkJZmxhZ3MgfD0gKEZJRU1BUF9FWFRFTlRfREVMQUxMT0MgfAogCQkJCSAgRklFTUFQX0VYVEVOVF9VTktOT1dOKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgorCQl9IGVsc2UgewogCQkJZGlza28gPSBlbS0+YmxvY2tfc3RhcnQ7Ci0JCQlicmVhazsKIAkJfQogCQlpZiAodGVzdF9iaXQoRVhURU5UX0ZMQUdfQ09NUFJFU1NFRCwgJmVtLT5mbGFncykpCiAJCQlmbGFncyB8PSBGSUVNQVBfRVhURU5UX0VOQ09ERUQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfbWFwLmMgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKaW5kZXggNTBkYTY5ZC4uYjE4NzkxNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwpAQCAtMjM0LDcgKzIzNCw2IEBACiAJcmIgPSB0cmVlX2luc2VydCgmdHJlZS0+bWFwLCBlbS0+c3RhcnQsICZlbS0+cmJfbm9kZSk7CiAJaWYgKHJiKSB7CiAJCXJldCA9IC1FRVhJU1Q7Ci0JCWZyZWVfZXh0ZW50X21hcChtZXJnZSk7CiAJCWdvdG8gb3V0OwogCX0KIAlhdG9taWNfaW5jKCZlbS0+cmVmcyk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKaW5kZXggZDFlNWYwZS4uNzY4Yjk1MiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwpAQCAtMTgsNiArMTgsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiY3RyZWUuaCIKKyNpbmNsdWRlICJmcmVlLXNwYWNlLWNhY2hlLmgiCisjaW5jbHVkZSAidHJhbnNhY3Rpb24uaCIKKworc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgeworCXN0cnVjdCByYl9ub2RlIGJ5dGVzX2luZGV4OworCXN0cnVjdCByYl9ub2RlIG9mZnNldF9pbmRleDsKKwl1NjQgb2Zmc2V0OworCXU2NCBieXRlczsKK307CiAKIHN0YXRpYyBpbnQgdHJlZV9pbnNlcnRfb2Zmc2V0KHN0cnVjdCByYl9yb290ICpyb290LCB1NjQgb2Zmc2V0LAogCQkJICAgICAgc3RydWN0IHJiX25vZGUgKm5vZGUpCkBAIC02OCwxNCArNzcsMjQgQEAKIH0KIAogLyoKLSAqIHNlYXJjaGVzIHRoZSB0cmVlIGZvciB0aGUgZ2l2ZW4gb2Zmc2V0LiAgSWYgY29udGFpbnMgaXMgc2V0IHdlIHdpbGwgcmV0dXJuCi0gKiB0aGUgZnJlZSBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBvZmZzZXQuICBJZiBjb250YWlucyBpcyBub3Qgc2V0IHdlCi0gKiB3aWxsIHJldHVybiB0aGUgZnJlZSBzcGFjZSB0aGF0IHN0YXJ0cyBhdCBvciBhZnRlciB0aGUgZ2l2ZW4gb2Zmc2V0IGFuZCBpcwotICogYXQgbGVhc3QgYnl0ZXMgbG9uZy4KKyAqIHNlYXJjaGVzIHRoZSB0cmVlIGZvciB0aGUgZ2l2ZW4gb2Zmc2V0LgorICoKKyAqIGZ1enp5ID09IDE6IHRoaXMgaXMgdXNlZCBmb3IgYWxsb2NhdGlvbnMgd2hlcmUgd2UgYXJlIGdpdmVuIGEgaGludCBvZiB3aGVyZQorICogdG8gbG9vayBmb3IgZnJlZSBzcGFjZS4gIEJlY2F1c2UgdGhlIGhpbnQgbWF5IG5vdCBiZSBjb21wbGV0ZWx5IG9uIGFuIG9mZnNldAorICogbWFyaywgb3IgdGhlIGhpbnQgbWF5IG5vIGxvbmdlciBwb2ludCB0byBmcmVlIHNwYWNlIHdlIG5lZWQgdG8gZnVkZ2Ugb3VyCisgKiByZXN1bHRzIGEgYml0LiAgU28gd2UgbG9vayBmb3IgZnJlZSBzcGFjZSBzdGFydGluZyBhdCBvciBhZnRlciBvZmZzZXQgd2l0aCBhdAorICogbGVhc3QgYnl0ZXMgc2l6ZS4gIFdlIHByZWZlciB0byBmaW5kIGFzIGNsb3NlIHRvIHRoZSBnaXZlbiBvZmZzZXQgYXMgd2UgY2FuLgorICogQWxzbyBpZiB0aGUgb2Zmc2V0IGlzIHdpdGhpbiBhIGZyZWUgc3BhY2UgcmFuZ2UsIHRoZW4gd2Ugd2lsbCByZXR1cm4gdGhlIGZyZWUKKyAqIHNwYWNlIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIG9mZnNldCwgd2hpY2ggbWVhbnMgd2UgY2FuIHJldHVybiBhIGZyZWUgc3BhY2UKKyAqIGNodW5rIHdpdGggYW4gb2Zmc2V0IGJlZm9yZSB0aGUgcHJvdmlkZWQgb2Zmc2V0LgorICoKKyAqIGZ1enp5ID09IDA6IHRoaXMgaXMganVzdCBhIG5vcm1hbCB0cmVlIHNlYXJjaC4gIEdpdmUgdXMgdGhlIGZyZWUgc3BhY2UgdGhhdAorICogc3RhcnRzIGF0IHRoZSBnaXZlbiBvZmZzZXQgd2hpY2ggaXMgYXQgbGVhc3QgYnl0ZXMgc2l6ZSwgYW5kIGlmIGl0cyBub3QgdGhlcmUKKyAqIHJldHVybiBOVUxMLgogICovCiBzdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnRyZWVfc2VhcmNoX29mZnNldChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKIAkJCQkJCSAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcywKLQkJCQkJCSAgIGludCBjb250YWlucykKKwkJCQkJCSAgIGludCBmdXp6eSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJvb3QtPnJiX25vZGU7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5LCAqcmV0ID0gTlVMTDsKQEAgLTg0LDEzICsxMDMsMTQgQEAKIAkJZW50cnkgPSByYl9lbnRyeShuLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKIAogCQlpZiAob2Zmc2V0IDwgZW50cnktPm9mZnNldCkgewotCQkJaWYgKCFjb250YWlucyAmJgorCQkJaWYgKGZ1enp5ICYmCiAJCQkgICAgKCFyZXQgfHwgZW50cnktPm9mZnNldCA8IHJldC0+b2Zmc2V0KSAmJgogCQkJICAgIChieXRlcyA8PSBlbnRyeS0+Ynl0ZXMpKQogCQkJCXJldCA9IGVudHJ5OwogCQkJbiA9IG4tPnJiX2xlZnQ7CiAJCX0gZWxzZSBpZiAob2Zmc2V0ID4gZW50cnktPm9mZnNldCkgewotCQkJaWYgKChlbnRyeS0+b2Zmc2V0ICsgZW50cnktPmJ5dGVzIC0gMSkgPj0gb2Zmc2V0ICYmCisJCQlpZiAoZnV6enkgJiYKKwkJCSAgICAoZW50cnktPm9mZnNldCArIGVudHJ5LT5ieXRlcyAtIDEpID49IG9mZnNldCAmJgogCQkJICAgIGJ5dGVzIDw9IGVudHJ5LT5ieXRlcykgewogCQkJCXJldCA9IGVudHJ5OwogCQkJCWJyZWFrOwpAQCAtMTcxLDYgKzE5MSw3IEBACiAJaW50IHJldCA9IDA7CiAKIAorCUJVR19PTighaW5mby0+Ynl0ZXMpOwogCXJldCA9IHRyZWVfaW5zZXJ0X29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LCBpbmZvLT5vZmZzZXQsCiAJCQkJICZpbmZvLT5vZmZzZXRfaW5kZXgpOwogCWlmIChyZXQpCkBAIC0xODQsMTA4ICsyMDUsNzAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCQkgIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKK2ludCBidHJmc19hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqcmlnaHRfaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqbGVmdF9pbmZvOwogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvID0gTlVMTDsKLQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYWxsb2NfaW5mbzsKIAlpbnQgcmV0ID0gMDsKIAotCWFsbG9jX2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSksIEdGUF9OT0ZTKTsKLQlpZiAoIWFsbG9jX2luZm8pCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlKSwgR0ZQX05PRlMpOworCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpbmZvLT5vZmZzZXQgPSBvZmZzZXQ7CisJaW5mby0+Ynl0ZXMgPSBieXRlczsKKworCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKIAkvKgogCSAqIGZpcnN0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGZyZWUgc3BhY2UgYWRqYWNlbnQgdG8gdGhlIHJhbmdlIHdlCiAJICogYXJlIGFkZGluZywgaWYgdGhlcmUgaXMgcmVtb3ZlIHRoYXQgc3RydWN0IGFuZCBhZGQgYSBuZXcgb25lIHRvCiAJICogY292ZXIgdGhlIGVudGlyZSByYW5nZQogCSAqLwogCXJpZ2h0X2luZm8gPSB0cmVlX3NlYXJjaF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwKLQkJCQkJb2Zmc2V0K2J5dGVzLCAwLCAxKTsKKwkJCQkJb2Zmc2V0K2J5dGVzLCAwLCAwKTsKIAlsZWZ0X2luZm8gPSB0cmVlX3NlYXJjaF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwKIAkJCQkgICAgICAgb2Zmc2V0LTEsIDAsIDEpOwogCi0JaWYgKHJpZ2h0X2luZm8gJiYgcmlnaHRfaW5mby0+b2Zmc2V0ID09IG9mZnNldCtieXRlcykgeworCWlmIChyaWdodF9pbmZvKSB7CiAJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCByaWdodF9pbmZvKTsKLQkJaW5mbyA9IHJpZ2h0X2luZm87Ci0JCWluZm8tPm9mZnNldCA9IG9mZnNldDsKLQkJaW5mby0+Ynl0ZXMgKz0gYnl0ZXM7Ci0JfSBlbHNlIGlmIChyaWdodF9pbmZvICYmIHJpZ2h0X2luZm8tPm9mZnNldCAhPSBvZmZzZXQrYnl0ZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJidHJmcyBhZGRpbmcgc3BhY2UgaW4gdGhlIG1pZGRsZSBvZiBhbiAiCi0JCSAgICAgICAiZXhpc3RpbmcgZnJlZSBzcGFjZSBhcmVhLiBleGlzdGluZzogIgotCQkgICAgICAgIm9mZnNldD0lbGx1LCBieXRlcz0lbGx1LiBuZXc6IG9mZnNldD0lbGx1LCAiCi0JCSAgICAgICAiYnl0ZXM9JWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylyaWdodF9pbmZvLT5vZmZzZXQsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJpZ2h0X2luZm8tPmJ5dGVzLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzKTsKLQkJQlVHKCk7CisJCWluZm8tPmJ5dGVzICs9IHJpZ2h0X2luZm8tPmJ5dGVzOworCQlrZnJlZShyaWdodF9pbmZvKTsKIAl9CiAKLQlpZiAobGVmdF9pbmZvKSB7CisJaWYgKGxlZnRfaW5mbyAmJiBsZWZ0X2luZm8tPm9mZnNldCArIGxlZnRfaW5mby0+Ynl0ZXMgPT0gb2Zmc2V0KSB7CiAJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBsZWZ0X2luZm8pOwotCi0JCWlmICh1bmxpa2VseSgobGVmdF9pbmZvLT5vZmZzZXQgKyBsZWZ0X2luZm8tPmJ5dGVzKSAhPQotCQkJICAgICBvZmZzZXQpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImJ0cmZzIGZyZWUgc3BhY2UgdG8gdGhlIGxlZnQgIgotCQkJICAgICAgICJvZiBuZXcgZnJlZSBzcGFjZSBpc24ndCAiCi0JCQkgICAgICAgInF1aXRlIHJpZ2h0LiBleGlzdGluZzogb2Zmc2V0PSVsbHUsICIKLQkJCSAgICAgICAiYnl0ZXM9JWxsdS4gbmV3OiBvZmZzZXQ9JWxsdSwgYnl0ZXM9JWxsdVxuIiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlZnRfaW5mby0+b2Zmc2V0LAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGVmdF9pbmZvLT5ieXRlcywKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzKTsKLQkJCUJVRygpOwotCQl9Ci0KLQkJaWYgKGluZm8pIHsKLQkJCWluZm8tPm9mZnNldCA9IGxlZnRfaW5mby0+b2Zmc2V0OwotCQkJaW5mby0+Ynl0ZXMgKz0gbGVmdF9pbmZvLT5ieXRlczsKLQkJCWtmcmVlKGxlZnRfaW5mbyk7Ci0JCX0gZWxzZSB7Ci0JCQlpbmZvID0gbGVmdF9pbmZvOwotCQkJaW5mby0+Ynl0ZXMgKz0gYnl0ZXM7Ci0JCX0KKwkJaW5mby0+b2Zmc2V0ID0gbGVmdF9pbmZvLT5vZmZzZXQ7CisJCWluZm8tPmJ5dGVzICs9IGxlZnRfaW5mby0+Ynl0ZXM7CisJCWtmcmVlKGxlZnRfaW5mbyk7CiAJfQogCi0JaWYgKGluZm8pIHsKLQkJcmV0ID0gbGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKLQkJaWYgKCFyZXQpCi0JCQlpbmZvID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaW5mbyA9IGFsbG9jX2luZm87Ci0JYWxsb2NfaW5mbyA9IE5VTEw7Ci0JaW5mby0+b2Zmc2V0ID0gb2Zmc2V0OwotCWluZm8tPmJ5dGVzID0gYnl0ZXM7Ci0KIAlyZXQgPSBsaW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOwogCWlmIChyZXQpCiAJCWtmcmVlKGluZm8pOwotb3V0OgorCisJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ0cmZzOiB1bmFibGUgdG8gYWRkIGZyZWUgc3BhY2UgOiVkXG4iLCByZXQpOwotCQlpZiAocmV0ID09IC1FRVhJU1QpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHJldCA9PSAtRUVYSVNUKTsKIAl9CiAKLQlrZnJlZShhbGxvY19pbmZvKTsKLQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLV9fYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCSAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQoraW50IGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvOwogCWludCByZXQgPSAwOwogCisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwogCWluZm8gPSB0cmVlX3NlYXJjaF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwgb2Zmc2V0LCAwLAogCQkJCSAgMSk7Ci0KIAlpZiAoaW5mbyAmJiBpbmZvLT5vZmZzZXQgPT0gb2Zmc2V0KSB7CiAJCWlmIChpbmZvLT5ieXRlcyA8IGJ5dGVzKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkZvdW5kIGZyZWUgc3BhY2UgYXQgJWxsdSwgc2l6ZSAlbGx1LCIKQEAgLTI5NSwxMiArMjc4LDE0IEBACiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylieXRlcyk7CiAJCQlXQVJOX09OKDEpOwogCQkJcmV0ID0gLUVJTlZBTDsKKwkJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKIAogCQlpZiAoaW5mby0+Ynl0ZXMgPT0gYnl0ZXMpIHsKIAkJCWtmcmVlKGluZm8pOworCQkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMzA4LDYgKzI5Myw3IEBACiAJCWluZm8tPmJ5dGVzIC09IGJ5dGVzOwogCiAJCXJldCA9IGxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CisJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAkJQlVHX09OKHJldCk7CiAJfSBlbHNlIGlmIChpbmZvICYmIGluZm8tPm9mZnNldCA8IG9mZnNldCAmJgogCQkgICBpbmZvLT5vZmZzZXQgKyBpbmZvLT5ieXRlcyA+PSBvZmZzZXQgKyBieXRlcykgewpAQCAtMzMzLDcwICszMTksMzMgQEAKIAkJCSAqLwogCQkJa2ZyZWUoaW5mbyk7CiAJCX0KLQorCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCS8qIHN0ZXAgdHdvLCBpbnNlcnQgYSBuZXcgaW5mbyBzdHJ1Y3QgdG8gY292ZXIgYW55dGhpbmcKIAkJICogYmVmb3JlIHRoZSBob2xlCiAJCSAqLwotCQlyZXQgPSBfX2J0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvbGRfc3RhcnQsCi0JCQkJCSAgICAgb2Zmc2V0IC0gb2xkX3N0YXJ0KTsKKwkJcmV0ID0gYnRyZnNfYWRkX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIG9sZF9zdGFydCwKKwkJCQkJICAgb2Zmc2V0IC0gb2xkX3N0YXJ0KTsKIAkJQlVHX09OKHJldCk7CiAJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCQlpZiAoIWluZm8pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiY291bGRuJ3QgZmluZCBzcGFjZSAlbGx1IHRvIGZyZWVcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjYWNoZWQgaXMgJWQsIG9mZnNldCAlbGx1IGJ5dGVzICVsbHVcbiIsCisJCQkgICAgICAgYmxvY2tfZ3JvdXAtPmNhY2hlZCwgYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCwKKwkJCSAgICAgICBibG9ja19ncm91cC0+a2V5Lm9mZnNldCk7CisJCQlidHJmc19kdW1wX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGJ5dGVzKTsKKwkJfSBlbHNlIGlmIChpbmZvKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhtbSwgZm91bmQgb2Zmc2V0PSVsbHUgYnl0ZXM9JWxsdSwgIgorCQkJICAgICAgICJidXQgd2FudGVkIG9mZnNldD0lbGx1IGJ5dGVzPSVsbHVcbiIsCisJCQkgICAgICAgaW5mby0+b2Zmc2V0LCBpbmZvLT5ieXRlcywgb2Zmc2V0LCBieXRlcyk7CisJCX0KIAkJV0FSTl9PTigxKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnNwOwotCi0JbXV0ZXhfbG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQlyZXQgPSBfX2J0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIGJ5dGVzKTsKLQlzcCA9IHRyZWVfc2VhcmNoX29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LCBvZmZzZXQsIDAsIDEpOwotCUJVR19PTighc3ApOwotCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBidHJmc19hZGRfZnJlZV9zcGFjZV9sb2NrKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgICAgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqc3A7Ci0KLQlyZXQgPSBfX2J0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIGJ5dGVzKTsKLQlzcCA9IHRyZWVfc2VhcmNoX29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LCBvZmZzZXQsIDAsIDEpOwotCUJVR19PTighc3ApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQotewotCWludCByZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQlyZXQgPSBfX2J0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIGJ5dGVzKTsKLQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2VfbG9jayhzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJCSB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IF9fYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIG9mZnNldCwgYnl0ZXMpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogdm9pZCBidHJmc19kdW1wX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKIAkJCSAgIHU2NCBieXRlcykKIHsKQEAgLTQwOCw2ICszNTcsOCBAQAogCQlpbmZvID0gcmJfZW50cnkobiwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CiAJCWlmIChpbmZvLT5ieXRlcyA+PSBieXRlcykKIAkJCWNvdW50Kys7CisJCXByaW50ayhLRVJOX0VSUiAiZW50cnkgb2Zmc2V0ICVsbHUsIGJ5dGVzICVsbHVcbiIsIGluZm8tPm9mZnNldCwKKwkJICAgICAgIGluZm8tPmJ5dGVzKTsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJWQgYmxvY2tzIG9mIGZyZWUgc3BhY2UgYXQgb3IgYmlnZ2VyIHRoYW4gYnl0ZXMgaXMiCiAJICAgICAgICJcbiIsIGNvdW50KTsKQEAgLTQyOCw2OCArMzc5LDMzNyBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBmb3IgYSBnaXZlbiBjbHVzdGVyLCBwdXQgYWxsIG9mIGl0cyBleHRlbnRzIGJhY2sgaW50byB0aGUgZnJlZQorICogc3BhY2UgY2FjaGUuICBJZiB0aGUgYmxvY2sgZ3JvdXAgcGFzc2VkIGRvZXNuJ3QgbWF0Y2ggdGhlIGJsb2NrIGdyb3VwCisgKiBwb2ludGVkIHRvIGJ5IHRoZSBjbHVzdGVyLCBzb21lb25lIGVsc2UgcmFjZWQgaW4gYW5kIGZyZWVkIHRoZQorICogY2x1c3RlciBhbHJlYWR5LiAgSW4gdGhhdCBjYXNlLCB3ZSBqdXN0IHJldHVybiB3aXRob3V0IGNoYW5naW5nIGFueXRoaW5nCisgKi8KK3N0YXRpYyBpbnQKK19fYnRyZnNfcmV0dXJuX2NsdXN0ZXJfdG9fZnJlZV9zcGFjZSgKKwkJCSAgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlcikKK3sKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnk7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwlzcGluX2xvY2soJmNsdXN0ZXItPmxvY2spOworCWlmIChjbHVzdGVyLT5ibG9ja19ncm91cCAhPSBibG9ja19ncm91cCkKKwkJZ290byBvdXQ7CisKKwljbHVzdGVyLT53aW5kb3dfc3RhcnQgPSAwOworCW5vZGUgPSByYl9maXJzdCgmY2x1c3Rlci0+cm9vdCk7CisJd2hpbGUobm9kZSkgeworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCQlub2RlID0gcmJfbmV4dCgmZW50cnktPm9mZnNldF9pbmRleCk7CisJCXJiX2VyYXNlKCZlbnRyeS0+b2Zmc2V0X2luZGV4LCAmY2x1c3Rlci0+cm9vdCk7CisJCWxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgZW50cnkpOworCX0KKwlsaXN0X2RlbF9pbml0KCZjbHVzdGVyLT5ibG9ja19ncm91cF9saXN0KTsKKworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChjbHVzdGVyLT5ibG9ja19ncm91cCk7CisJY2x1c3Rlci0+YmxvY2tfZ3JvdXAgPSBOVUxMOworCWNsdXN0ZXItPnJvb3QucmJfbm9kZSA9IE5VTEw7CitvdXQ6CisJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOworCXJldHVybiAwOworfQorCiB2b2lkIGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2NhY2hlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXApCiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm87CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlcjsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpzYWZlOwogCi0JbXV0ZXhfbG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsdXN0ZXIsIHNhZmUsICZibG9ja19ncm91cC0+Y2x1c3Rlcl9saXN0LAorCQkJCSBibG9ja19ncm91cF9saXN0KSB7CisKKwkJV0FSTl9PTihjbHVzdGVyLT5ibG9ja19ncm91cCAhPSBibG9ja19ncm91cCk7CisJCV9fYnRyZnNfcmV0dXJuX2NsdXN0ZXJfdG9fZnJlZV9zcGFjZShibG9ja19ncm91cCwgY2x1c3Rlcik7CisJfQorCiAJd2hpbGUgKChub2RlID0gcmJfbGFzdCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfYnl0ZXMpKSAhPSBOVUxMKSB7CiAJCWluZm8gPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgYnl0ZXNfaW5kZXgpOwogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CiAJCWtmcmVlKGluZm8pOwogCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwkJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwotCQkJbXV0ZXhfbG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwkJCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIH0KIAotI2lmIDAKLXN0YXRpYyBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYnRyZnNfZmluZF9mcmVlX3NwYWNlX29mZnNldChzdHJ1Y3QKLQkJCQkJCSAgICAgIGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlCi0JCQkJCQkgICAgICAqYmxvY2tfZ3JvdXAsIHU2NCBvZmZzZXQsCi0JCQkJCQkgICAgICB1NjQgYnl0ZXMpCit1NjQgYnRyZnNfZmluZF9zcGFjZV9mb3JfYWxsb2Moc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBlbXB0eV9zaXplKQogewotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpyZXQ7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5ID0gTlVMTDsKKwl1NjQgcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0JcmV0ID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsIG9mZnNldCwKLQkJCQkgYnl0ZXMsIDApOwotCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCWVudHJ5ID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsIG9mZnNldCwKKwkJCQkgICBieXRlcyArIGVtcHR5X3NpemUsIDEpOworCWlmICghZW50cnkpCisJCWVudHJ5ID0gdHJlZV9zZWFyY2hfYnl0ZXMoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2J5dGVzLAorCQkJCQkgIG9mZnNldCwgYnl0ZXMgKyBlbXB0eV9zaXplKTsKKwlpZiAoZW50cnkpIHsKKwkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKKwkJcmV0ID0gZW50cnktPm9mZnNldDsKKwkJZW50cnktPm9mZnNldCArPSBieXRlczsKKwkJZW50cnktPmJ5dGVzIC09IGJ5dGVzOworCisJCWlmICghZW50cnktPmJ5dGVzKQorCQkJa2ZyZWUoZW50cnkpOworCQllbHNlCisJCQlsaW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKKwl9CisJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpidHJmc19maW5kX2ZyZWVfc3BhY2VfYnl0ZXMoc3RydWN0Ci0JCQkJCQkgICAgIGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlCi0JCQkJCQkgICAgICpibG9ja19ncm91cCwgdTY0IG9mZnNldCwKLQkJCQkJCSAgICAgdTY0IGJ5dGVzKQorLyoKKyAqIGdpdmVuIGEgY2x1c3RlciwgcHV0IGFsbCBvZiBpdHMgZXh0ZW50cyBiYWNrIGludG8gdGhlIGZyZWUgc3BhY2UKKyAqIGNhY2hlLiAgSWYgYSBibG9jayBncm91cCBpcyBwYXNzZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IGZyZWUKKyAqIGEgY2x1c3RlciB0aGF0IGJlbG9uZ3MgdG8gdGhlIHBhc3NlZCBibG9jayBncm91cC4KKyAqCisgKiBPdGhlcndpc2UsIGl0J2xsIGdldCBhIHJlZmVyZW5jZSBvbiB0aGUgYmxvY2sgZ3JvdXAgcG9pbnRlZCB0byBieSB0aGUKKyAqIGNsdXN0ZXIgYW5kIHJlbW92ZSB0aGUgY2x1c3RlciBmcm9tIGl0LgorICovCitpbnQgYnRyZnNfcmV0dXJuX2NsdXN0ZXJfdG9fZnJlZV9zcGFjZSgKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIpCiB7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnJldDsKKwlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwkvKiBmaXJzdCwgZ2V0IGEgc2FmZSBwb2ludGVyIHRvIHRoZSBibG9jayBncm91cCAqLworCXNwaW5fbG9jaygmY2x1c3Rlci0+bG9jayk7CisJaWYgKCFibG9ja19ncm91cCkgeworCQlibG9ja19ncm91cCA9IGNsdXN0ZXItPmJsb2NrX2dyb3VwOworCQlpZiAoIWJsb2NrX2dyb3VwKSB7CisJCQlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSBpZiAoY2x1c3Rlci0+YmxvY2tfZ3JvdXAgIT0gYmxvY2tfZ3JvdXApIHsKKwkJLyogc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IGZyZWVkIGl0IGRvbid0IHJlZG8gdGhlaXIgd29yayAqLworCQlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwlhdG9taWNfaW5jKCZibG9ja19ncm91cC0+Y291bnQpOworCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKIAotCXJldCA9IHRyZWVfc2VhcmNoX2J5dGVzKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9ieXRlcywgb2Zmc2V0LCBieXRlcyk7Ci0JbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOworCS8qIG5vdyByZXR1cm4gYW55IGV4dGVudHMgdGhlIGNsdXN0ZXIgaGFkIG9uIGl0ICovCisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwlyZXQgPSBfX2J0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGNsdXN0ZXIpOworCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKworCS8qIGZpbmFsbHkgZHJvcCBvdXIgcmVmICovCisJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ2l2ZW4gYSBjbHVzdGVyLCB0cnkgdG8gYWxsb2NhdGUgJ2J5dGVzJyBmcm9tIGl0LCByZXR1cm5zIDAKKyAqIGlmIGl0IGNvdWxkbid0IGZpbmQgYW55dGhpbmcgc3VpdGFibHkgbGFyZ2UsIG9yIGEgbG9naWNhbCBkaXNrIG9mZnNldAorICogaWYgdGhpbmdzIHdvcmtlZCBvdXQKKyAqLwordTY0IGJ0cmZzX2FsbG9jX2Zyb21fY2x1c3RlcihzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyLCB1NjQgYnl0ZXMsCisJCQkgICAgIHU2NCBtaW5fc3RhcnQpCit7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwl1NjQgcmV0ID0gMDsKKworCXNwaW5fbG9jaygmY2x1c3Rlci0+bG9jayk7CisJaWYgKGJ5dGVzID4gY2x1c3Rlci0+bWF4X3NpemUpCisJCWdvdG8gb3V0OworCisJaWYgKGNsdXN0ZXItPmJsb2NrX2dyb3VwICE9IGJsb2NrX2dyb3VwKQorCQlnb3RvIG91dDsKKworCW5vZGUgPSByYl9maXJzdCgmY2x1c3Rlci0+cm9vdCk7CisJaWYgKCFub2RlKQorCQlnb3RvIG91dDsKKworCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CisKKwl3aGlsZSgxKSB7CisJCWlmIChlbnRyeS0+Ynl0ZXMgPCBieXRlcyB8fCBlbnRyeS0+b2Zmc2V0IDwgbWluX3N0YXJ0KSB7CisJCQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCQkJbm9kZSA9IHJiX25leHQoJmVudHJ5LT5vZmZzZXRfaW5kZXgpOworCQkJaWYgKCFub2RlKQorCQkJCWJyZWFrOworCQkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwKKwkJCQkJIG9mZnNldF9pbmRleCk7CisJCQljb250aW51ZTsKKwkJfQorCQlyZXQgPSBlbnRyeS0+b2Zmc2V0OworCisJCWVudHJ5LT5vZmZzZXQgKz0gYnl0ZXM7CisJCWVudHJ5LT5ieXRlcyAtPSBieXRlczsKKworCQlpZiAoZW50cnktPmJ5dGVzID09IDApIHsKKwkJCXJiX2VyYXNlKCZlbnRyeS0+b2Zmc2V0X2luZGV4LCAmY2x1c3Rlci0+cm9vdCk7CisJCQlrZnJlZShlbnRyeSk7CisJCX0KKwkJYnJlYWs7CisJfQorb3V0OgorCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogaGVyZSB3ZSB0cnkgdG8gZmluZCBhIGNsdXN0ZXIgb2YgYmxvY2tzIGluIGEgYmxvY2sgZ3JvdXAuICBUaGUgZ29hbAorICogaXMgdG8gZmluZCBhdCBsZWFzdCBieXRlcyBmcmVlIGFuZCB1cCB0byBlbXB0eV9zaXplICsgYnl0ZXMgZnJlZS4KKyAqIFdlIG1pZ2h0IG5vdCBmaW5kIHRoZW0gYWxsIGluIG9uZSBjb250aWd1b3VzIGFyZWEuCisgKgorICogcmV0dXJucyB6ZXJvIGFuZCBzZXRzIHVwIGNsdXN0ZXIgaWYgdGhpbmdzIHdvcmtlZCBvdXQsIG90aGVyd2lzZQorICogaXQgcmV0dXJucyAtZW5vc3BjCisgKi8KK2ludCBidHJmc19maW5kX3NwYWNlX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIsCisJCQkgICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcywgdTY0IGVtcHR5X3NpemUpCit7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqbmV4dDsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqbGFzdDsKKwl1NjQgbWluX2J5dGVzOworCXU2NCB3aW5kb3dfc3RhcnQ7CisJdTY0IHdpbmRvd19mcmVlOworCXU2NCBtYXhfZXh0ZW50ID0gMDsKKwlpbnQgdG90YWxfcmV0cmllcyA9IDA7CisJaW50IHJldDsKKworCS8qIGZvciBtZXRhZGF0YSwgYWxsb3cgYWxsb2NhdGVzIHdpdGggbW9yZSBob2xlcyAqLworCWlmIChibG9ja19ncm91cC0+ZmxhZ3MgJiBCVFJGU19CTE9DS19HUk9VUF9NRVRBREFUQSkgeworCQkvKgorCQkgKiB3ZSB3YW50IHRvIGRvIGxhcmdlciBhbGxvY2F0aW9ucyB3aGVuIHdlIGFyZQorCQkgKiBmbHVzaGluZyBvdXQgdGhlIGRlbGF5ZWQgcmVmcywgaXQgaGVscHMgcHJldmVudAorCQkgKiBtYWtpbmcgbW9yZSB3b3JrIGFzIHdlIGdvIGFsb25nLgorCQkgKi8KKwkJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKQorCQkJbWluX2J5dGVzID0gbWF4KGJ5dGVzLCAoYnl0ZXMgKyBlbXB0eV9zaXplKSA+PiAxKTsKKwkJZWxzZQorCQkJbWluX2J5dGVzID0gbWF4KGJ5dGVzLCAoYnl0ZXMgKyBlbXB0eV9zaXplKSA+PiA0KTsKKwl9IGVsc2UKKwkJbWluX2J5dGVzID0gbWF4KGJ5dGVzLCAoYnl0ZXMgKyBlbXB0eV9zaXplKSA+PiAyKTsKKworCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisJc3Bpbl9sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKworCS8qIHNvbWVvbmUgYWxyZWFkeSBmb3VuZCBhIGNsdXN0ZXIsIGhvb3JheSAqLworCWlmIChjbHVzdGVyLT5ibG9ja19ncm91cCkgeworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CithZ2FpbjoKKwltaW5fYnl0ZXMgPSBtaW4obWluX2J5dGVzLCBieXRlcyArIGVtcHR5X3NpemUpOworCWVudHJ5ID0gdHJlZV9zZWFyY2hfYnl0ZXMoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2J5dGVzLAorCQkJCSAgb2Zmc2V0LCBtaW5fYnl0ZXMpOworCWlmICghZW50cnkpIHsKKwkJcmV0ID0gLUVOT1NQQzsKKwkJZ290byBvdXQ7CisJfQorCXdpbmRvd19zdGFydCA9IGVudHJ5LT5vZmZzZXQ7CisJd2luZG93X2ZyZWUgPSBlbnRyeS0+Ynl0ZXM7CisJbGFzdCA9IGVudHJ5OworCW1heF9leHRlbnQgPSBlbnRyeS0+Ynl0ZXM7CisKKwl3aGlsZSgxKSB7CisJCS8qIG91dCB3aW5kb3cgaXMganVzdCByaWdodCwgbGV0cyBmaWxsIGl0ICovCisJCWlmICh3aW5kb3dfZnJlZSA+PSBieXRlcyArIGVtcHR5X3NpemUpCisJCQlicmVhazsKKworCQlub2RlID0gcmJfbmV4dCgmbGFzdC0+b2Zmc2V0X2luZGV4KTsKKwkJaWYgKCFub2RlKSB7CisJCQlyZXQgPSAtRU5PU1BDOworCQkJZ290byBvdXQ7CisJCX0KKwkJbmV4dCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCisJCS8qCisJCSAqIHdlIGhhdmVuJ3QgZmlsbGVkIHRoZSBlbXB0eSBzaXplIGFuZCB0aGUgd2luZG93IGlzCisJCSAqIHZlcnkgbGFyZ2UuICByZXNldCBhbmQgdHJ5IGFnYWluCisJCSAqLworCQlpZiAobmV4dC0+b2Zmc2V0IC0gd2luZG93X3N0YXJ0ID4gKGJ5dGVzICsgZW1wdHlfc2l6ZSkgKiAyKSB7CisJCQllbnRyeSA9IG5leHQ7CisJCQl3aW5kb3dfc3RhcnQgPSBlbnRyeS0+b2Zmc2V0OworCQkJd2luZG93X2ZyZWUgPSBlbnRyeS0+Ynl0ZXM7CisJCQlsYXN0ID0gZW50cnk7CisJCQltYXhfZXh0ZW50ID0gMDsKKwkJCXRvdGFsX3JldHJpZXMrKzsKKwkJCWlmICh0b3RhbF9yZXRyaWVzICUgMjU2ID09IDApIHsKKwkJCQlpZiAobWluX2J5dGVzID49IChieXRlcyArIGVtcHR5X3NpemUpKSB7CisJCQkJCXJldCA9IC1FTk9TUEM7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQkvKgorCQkJCSAqIGdyb3cgb3VyIGFsbG9jYXRpb24gYSBiaXQsIHdlJ3JlIG5vdCBoYXZpbmcKKwkJCQkgKiBtdWNoIGx1Y2sKKwkJCQkgKi8KKwkJCQltaW5fYnl0ZXMgKj0gMjsKKwkJCQlnb3RvIGFnYWluOworCQkJfQorCQl9IGVsc2UgeworCQkJbGFzdCA9IG5leHQ7CisJCQl3aW5kb3dfZnJlZSArPSBuZXh0LT5ieXRlczsKKwkJCWlmIChlbnRyeS0+Ynl0ZXMgPiBtYXhfZXh0ZW50KQorCQkJCW1heF9leHRlbnQgPSBlbnRyeS0+Ynl0ZXM7CisJCX0KKwl9CisKKwljbHVzdGVyLT53aW5kb3dfc3RhcnQgPSBlbnRyeS0+b2Zmc2V0OworCisJLyoKKwkgKiBub3cgd2UndmUgZm91bmQgb3VyIGVudHJpZXMsIHB1bGwgdGhlbSBvdXQgb2YgdGhlIGZyZWUgc3BhY2UKKwkgKiBjYWNoZSBhbmQgcHV0IHRoZW0gaW50byB0aGUgY2x1c3RlciByYnRyZWUKKwkgKgorCSAqIFRoZSBjbHVzdGVyIGluY2x1ZGVzIGFuIHJidHJlZSwgYnV0IG9ubHkgdXNlcyB0aGUgb2Zmc2V0IGluZGV4CisJICogb2YgZWFjaCBmcmVlIHNwYWNlIGNhY2hlIGVudHJ5LgorCSAqLworCXdoaWxlKDEpIHsKKwkJbm9kZSA9IHJiX25leHQoJmVudHJ5LT5vZmZzZXRfaW5kZXgpOworCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgZW50cnkpOworCQlyZXQgPSB0cmVlX2luc2VydF9vZmZzZXQoJmNsdXN0ZXItPnJvb3QsIGVudHJ5LT5vZmZzZXQsCisJCQkJCSAmZW50cnktPm9mZnNldF9pbmRleCk7CisJCUJVR19PTihyZXQpOworCisJCWlmICghbm9kZSB8fCBlbnRyeSA9PSBsYXN0KQorCQkJYnJlYWs7CisKKwkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKKwl9CisJcmV0ID0gMDsKKwljbHVzdGVyLT5tYXhfc2l6ZSA9IG1heF9leHRlbnQ7CisJYXRvbWljX2luYygmYmxvY2tfZ3JvdXAtPmNvdW50KTsKKwlsaXN0X2FkZF90YWlsKCZjbHVzdGVyLT5ibG9ja19ncm91cF9saXN0LCAmYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdCk7CisJY2x1c3Rlci0+YmxvY2tfZ3JvdXAgPSBibG9ja19ncm91cDsKK291dDoKKwlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CisJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KLSNlbmRpZgogCi1zdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYnRyZnNfZmluZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCQkgICAgICAgKmJsb2NrX2dyb3VwLCB1NjQgb2Zmc2V0LAotCQkJCQkgICAgICAgdTY0IGJ5dGVzKQorLyoKKyAqIHNpbXBsZSBjb2RlIHRvIHplcm8gb3V0IGEgY2x1c3RlcgorICovCit2b2lkIGJ0cmZzX2luaXRfZnJlZV9jbHVzdGVyKHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIpCiB7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnJldCA9IE5VTEw7Ci0KLQlyZXQgPSB0cmVlX3NlYXJjaF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwgb2Zmc2V0LAotCQkJCSBieXRlcywgMCk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IHRyZWVfc2VhcmNoX2J5dGVzKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9ieXRlcywKLQkJCQkJb2Zmc2V0LCBieXRlcyk7Ci0KLQlyZXR1cm4gcmV0OworCXNwaW5fbG9ja19pbml0KCZjbHVzdGVyLT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY2x1c3Rlci0+cmVmaWxsX2xvY2spOworCWNsdXN0ZXItPnJvb3QucmJfbm9kZSA9IE5VTEw7CisJY2x1c3Rlci0+bWF4X3NpemUgPSAwOworCUlOSVRfTElTVF9IRUFEKCZjbHVzdGVyLT5ibG9ja19ncm91cF9saXN0KTsKKwljbHVzdGVyLT5ibG9ja19ncm91cCA9IE5VTEw7CiB9CisKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuaCBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBiZGMwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQlRSRlNfRlJFRV9TUEFDRV9DQUNIRQorI2RlZmluZSBfX0JUUkZTX0ZSRUVfU1BBQ0VfQ0FDSEUKKworaW50IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgdTY0IGJ5dGVuciwgdTY0IHNpemUpOworaW50IGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgdTY0IGJ5dGVuciwgdTY0IHNpemUpOwordm9pZCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZV9jYWNoZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUKKwkJCQkgICAqYmxvY2tfZ3JvdXApOwordTY0IGJ0cmZzX2ZpbmRfc3BhY2VfZm9yX2FsbG9jKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgZW1wdHlfc2l6ZSk7Cit2b2lkIGJ0cmZzX2R1bXBfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgdTY0IGJ5dGVzKTsKK3U2NCBidHJmc19ibG9ja19ncm91cF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXApOworaW50IGJ0cmZzX2ZpbmRfc3BhY2VfY2x1c3RlcihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwKKwkJCSAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgZW1wdHlfc2l6ZSk7Cit2b2lkIGJ0cmZzX2luaXRfZnJlZV9jbHVzdGVyKHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIpOwordTY0IGJ0cmZzX2FsbG9jX2Zyb21fY2x1c3RlcihzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyLCB1NjQgYnl0ZXMsCisJCQkgICAgIHU2NCBtaW5fc3RhcnQpOworaW50IGJ0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoCisJCQkgICAgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggMDZkOGRiNS4uYTBkMWRkNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC0zNDgxLDggKzM0ODEsMTAgQEAKIAogCWlmIChkaXIpIHsKIAkJcmV0ID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgaW5kZXgpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQlpcHV0KGlub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0KIAl9CiAJLyoKIAkgKiBpbmRleF9jbnQgaXMgaWdub3JlZCBmb3IgZXZlcnl0aGluZyBidXQgYSBkaXIsCkBAIC0zNTY1LDYgKzM1NjcsNyBAQAogCWlmIChkaXIpCiAJCUJUUkZTX0koZGlyKS0+aW5kZXhfY250LS07CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCWlwdXQoaW5vZGUpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IGJjYTcyOWYuLjc1OTRiZWMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJCWdvdG8gb3V0X2RwdXQ7CiAKIAlpZiAoIUlTX1BPU0lYQUNMKHBhcmVudC0+ZGVudHJ5LT5kX2lub2RlKSkKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAKIAllcnJvciA9IG1udF93YW50X3dyaXRlKHBhcmVudC0+bW50KTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9idHJmcy9sb2NraW5nLmMgYi9mcy9idHJmcy9sb2NraW5nLmMKaW5kZXggYTUzMTBjMC4uMWMzNmU1YyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvbG9ja2luZy5jCisrKyBiL2ZzL2J0cmZzL2xvY2tpbmcuYwpAQCAtNjAsOCArNjAsOCBAQAogCiAvKgogICogdW5mb3J0dW5hdGVseSwgbWFueSBvZiB0aGUgcGxhY2VzIHRoYXQgY3VycmVudGx5IHNldCBhIGxvY2sgdG8gYmxvY2tpbmcKLSAqIGRvbid0IGVuZCB1cCBibG9ja2luZyBmb3IgZXZlcnkgbG9uZywgYW5kIG9mdGVuIHRoZXkgZG9uJ3QgYmxvY2sKLSAqIGF0IGFsbC4gIEZvciBhIGRiZW5jaCA1MCBydW4sIGlmIHdlIGRvbid0IHNwaW4gb25lIHRoZSBibG9ja2luZyBiaXQKKyAqIGRvbid0IGVuZCB1cCBibG9ja2luZyBmb3IgdmVyeSBsb25nLCBhbmQgb2Z0ZW4gdGhleSBkb24ndCBibG9jaworICogYXQgYWxsLiAgRm9yIGEgZGJlbmNoIDUwIHJ1biwgaWYgd2UgZG9uJ3Qgc3BpbiBvbiB0aGUgYmxvY2tpbmcgYml0CiAgKiBhdCBhbGwsIHRoZSBjb250ZXh0IHN3aXRjaCByYXRlIGNhbiBqdW1wIHVwIHRvIDQwMCwwMDAvc2VjIG9yIG1vcmUuCiAgKgogICogU28sIHdlJ3JlIHN0aWxsIHN0dWNrIHdpdGggdGhpcyBjcnVtbXkgc3BpbiBvbiB0aGUgYmxvY2tpbmcgYml0LApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggMTlhNGRhZi4uOTc0NGFmOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CkBAIC02Niw3ICs2Nyw4IEBACiBlbnVtIHsKIAlPcHRfZGVncmFkZWQsIE9wdF9zdWJ2b2wsIE9wdF9kZXZpY2UsIE9wdF9ub2RhdGFzdW0sIE9wdF9ub2RhdGFjb3csCiAJT3B0X21heF9leHRlbnQsIE9wdF9tYXhfaW5saW5lLCBPcHRfYWxsb2Nfc3RhcnQsIE9wdF9ub2JhcnJpZXIsCi0JT3B0X3NzZCwgT3B0X3RocmVhZF9wb29sLCBPcHRfbm9hY2wsICBPcHRfY29tcHJlc3MsIE9wdF9lcnIsCisJT3B0X3NzZCwgT3B0X3RocmVhZF9wb29sLCBPcHRfbm9hY2wsICBPcHRfY29tcHJlc3MsIE9wdF9ub3RyZWVsb2csCisJT3B0X2ZsdXNob25jb21taXQsIE9wdF9lcnIsCiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC04Myw2ICs4NSw4IEBACiAJe09wdF9jb21wcmVzcywgImNvbXByZXNzIn0sCiAJe09wdF9zc2QsICJzc2QifSwKIAl7T3B0X25vYWNsLCAibm9hY2wifSwKKwl7T3B0X25vdHJlZWxvZywgIm5vdHJlZWxvZyJ9LAorCXtPcHRfZmx1c2hvbmNvbW1pdCwgImZsdXNob25jb21taXQifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC0yMjIsNiArMjI2LDE0IEBACiAJCWNhc2UgT3B0X25vYWNsOgogCQkJcm9vdC0+ZnNfaW5mby0+c2ItPnNfZmxhZ3MgJj0gfk1TX1BPU0lYQUNMOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vdHJlZWxvZzoKKwkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiBkaXNhYmxpbmcgdHJlZSBsb2dcbiIpOworCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIE5PVFJFRUxPRyk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZmx1c2hvbmNvbW1pdDoKKwkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiB0dXJuaW5nIG9uIGZsdXNoLW9uLWNvbW1pdFxuIik7CisJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgRkxVU0hPTkNPTU1JVCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC0zNjMsOSArMzc1LDggQEAKIGludCBidHJmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQogewogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCXN0cnVjdCBidHJmc19yb290ICpyb290OworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gYnRyZnNfc2Ioc2IpOwogCWludCByZXQ7Ci0Jcm9vdCA9IGJ0cmZzX3NiKHNiKTsKIAogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIDA7CkBAIC0zODUsNiArMzk2LDQxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBidHJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqdmZzKQoreworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gYnRyZnNfc2IodmZzLT5tbnRfc2IpOworCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKKworCWlmIChidHJmc190ZXN0X29wdChyb290LCBERUdSQURFRCkpCisJCXNlcV9wdXRzKHNlcSwgIixkZWdyYWRlZCIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBOT0RBVEFTVU0pKQorCQlzZXFfcHV0cyhzZXEsICIsbm9kYXRhc3VtIik7CisJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIE5PREFUQUNPVykpCisJCXNlcV9wdXRzKHNlcSwgIixub2RhdGFjb3ciKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgTk9CQVJSSUVSKSkKKwkJc2VxX3B1dHMoc2VxLCAiLG5vYmFycmllciIpOworCWlmIChpbmZvLT5tYXhfZXh0ZW50ICE9ICh1NjQpLTEpCisJCXNlcV9wcmludGYoc2VxLCAiLG1heF9leHRlbnQ9JWxsdSIsIGluZm8tPm1heF9leHRlbnQpOworCWlmIChpbmZvLT5tYXhfaW5saW5lICE9IDgxOTIgKiAxMDI0KQorCQlzZXFfcHJpbnRmKHNlcSwgIixtYXhfaW5saW5lPSVsbHUiLCBpbmZvLT5tYXhfaW5saW5lKTsKKwlpZiAoaW5mby0+YWxsb2Nfc3RhcnQgIT0gMCkKKwkJc2VxX3ByaW50ZihzZXEsICIsYWxsb2Nfc3RhcnQ9JWxsdSIsIGluZm8tPmFsbG9jX3N0YXJ0KTsKKwlpZiAoaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSAhPSAgbWluX3QodW5zaWduZWQgbG9uZywKKwkJCQkJICAgICBudW1fb25saW5lX2NwdXMoKSArIDIsIDgpKQorCQlzZXFfcHJpbnRmKHNlcSwgIix0aHJlYWRfcG9vbD0lZCIsIGluZm8tPnRocmVhZF9wb29sX3NpemUpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBDT01QUkVTUykpCisJCXNlcV9wdXRzKHNlcSwgIixjb21wcmVzcyIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBTU0QpKQorCQlzZXFfcHV0cyhzZXEsICIsc3NkIik7CisJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIE5PVFJFRUxPRykpCisJCXNlcV9wdXRzKHNlcSwgIixuby10cmVlbG9nIik7CisJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIEZMVVNIT05DT01NSVQpKQorCQlzZXFfcHV0cyhzZXEsICIsZmx1c2gtb24tY29tbWl0Iik7CisJaWYgKCEocm9vdC0+ZnNfaW5mby0+c2ItPnNfZmxhZ3MgJiBNU19QT1NJWEFDTCkpCisJCXNlcV9wdXRzKHNlcSwgIixub2FjbCIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBidHJmc193cml0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXNiLT5zX2RpcnQgPSAwOwpAQCAtNjMwLDcgKzY3Niw3IEBACiAJLnB1dF9zdXBlcgk9IGJ0cmZzX3B1dF9zdXBlciwKIAkud3JpdGVfc3VwZXIJPSBidHJmc193cml0ZV9zdXBlciwKIAkuc3luY19mcwk9IGJ0cmZzX3N5bmNfZnMsCi0JLnNob3dfb3B0aW9ucwk9IGdlbmVyaWNfc2hvd19vcHRpb25zLAorCS5zaG93X29wdGlvbnMJPSBidHJmc19zaG93X29wdGlvbnMsCiAJLndyaXRlX2lub2RlCT0gYnRyZnNfd3JpdGVfaW5vZGUsCiAJLmRpcnR5X2lub2RlCT0gYnRyZnNfZGlydHlfaW5vZGUsCiAJLmFsbG9jX2lub2RlCT0gYnRyZnNfYWxsb2NfaW5vZGUsCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCA2NjQ3ODJjLi4yODY5YjMzIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTUzLDggKzUzLDYgQEAKIAkJCQkJICAgICBHRlBfTk9GUyk7CiAJCUJVR19PTighY3VyX3RyYW5zKTsKIAkJcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbisrOwotCQlyb290LT5mc19pbmZvLT5sYXN0X2FsbG9jID0gMDsKLQkJcm9vdC0+ZnNfaW5mby0+bGFzdF9kYXRhX2FsbG9jID0gMDsKIAkJY3VyX3RyYW5zLT5udW1fd3JpdGVycyA9IDE7CiAJCWN1cl90cmFucy0+bnVtX2pvaW5lZCA9IDA7CiAJCWN1cl90cmFucy0+dHJhbnNpZCA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb247CkBAIC05NzQsNiArOTcyLDcgQEAKIAlpbnQgcmV0OwogCWludCBzaG91bGRfZ3JvdyA9IDA7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBnZXRfc2Vjb25kcygpOworCWludCBmbHVzaF9vbl9jb21taXQgPSBidHJmc190ZXN0X29wdChyb290LCBGTFVTSE9OQ09NTUlUKTsKIAogCWJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMocm9vdCwgMCk7CiAKQEAgLTEwNTMsNyArMTA1Miw5IEBACiAKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKLQkJaWYgKHNuYXBfcGVuZGluZykgeworCQlpZiAoZmx1c2hfb25fY29tbWl0IHx8IHNuYXBfcGVuZGluZykgeworCQkJaWYgKGZsdXNoX29uX2NvbW1pdCkKKwkJCQlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCk7CiAJCQlyZXQgPSBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAxKTsKIAkJCUJVR19PTihyZXQpOwogCQl9CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5jIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwppbmRleCBmYzliODdhLi4yNWYyMGVhIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5jCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKQEAgLTI2MiwxMSArMjYyLDkgQEAKIAkJCSAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwKIAkJCSAgICAgIHN0cnVjdCB3YWxrX2NvbnRyb2wgKndjLCB1NjQgZ2VuKQogewotCWlmICh3Yy0+cGluKSB7Ci0JCW11dGV4X2xvY2soJmxvZy0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKKwlpZiAod2MtPnBpbikKIAkJYnRyZnNfdXBkYXRlX3Bpbm5lZF9leHRlbnRzKGxvZy0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCiAJCQkJCSAgICBlYi0+c3RhcnQsIGViLT5sZW4sIDEpOwotCX0KIAogCWlmIChidHJmc19idWZmZXJfdXB0b2RhdGUoZWIsIGdlbikpIHsKIAkJaWYgKHdjLT53cml0ZSkKQEAgLTEyMjQsOCArMTIyMiw3IEBACiAJcmV0ID0gaW5zZXJ0X29uZV9uYW1lKHRyYW5zLCByb290LCBwYXRoLCBrZXktPm9iamVjdGlkLCBrZXktPm9mZnNldCwKIAkJCSAgICAgIG5hbWUsIG5hbWVfbGVuLCBsb2dfdHlwZSwgJmxvZ19rZXkpOwogCi0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0VOVCkKLQkJQlVHKCk7CisJQlVHX09OKHJldCAmJiByZXQgIT0gLUVOT0VOVCk7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTI5MDAsNiArMjg5NywxMSBAQAogCiAJc2IgPSBpbm9kZS0+aV9zYjsKIAorCWlmIChidHJmc190ZXN0X29wdChyb290LCBOT1RSRUVMT0cpKSB7CisJCXJldCA9IDE7CisJCWdvdG8gZW5kX25vX3RyYW5zOworCX0KKwogCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA+CiAJICAgIHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKSB7CiAJCXJldCA9IDE7CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggZGQwNmUxOC4uZTA5MTNlNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaW9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiY29tcGF0LmgiCiAjaW5jbHVkZSAiY3RyZWUuaCIKQEAgLTE0NSw4ICsxNDYsOSBAQAogCWludCBhZ2FpbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBudW1fcnVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGxpbWl0OworCXVuc2lnbmVkIGxvbmcgbGFzdF93YWl0ZWQgPSAwOwogCi0JYmRpID0gZGV2aWNlLT5iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOworCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhkZXZpY2UtPmJkZXYpOwogCWZzX2luZm8gPSBkZXZpY2UtPmRldl9yb290LT5mc19pbmZvOwogCWxpbWl0ID0gYnRyZnNfYXN5bmNfc3VibWl0X2xpbWl0KGZzX2luZm8pOwogCWxpbWl0ID0gbGltaXQgKiAyIC8gMzsKQEAgLTIwNyw3ICsyMDksMzIgQEAKIAkJaWYgKHBlbmRpbmcgJiYgYmRpX3dyaXRlX2Nvbmdlc3RlZChiZGkpICYmIG51bV9ydW4gPiAxNiAmJgogCQkgICAgZnNfaW5mby0+ZnNfZGV2aWNlcy0+b3Blbl9kZXZpY2VzID4gMSkgewogCQkJc3RydWN0IGJpbyAqb2xkX2hlYWQ7CisJCQlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jOwogCisJCQlpb2MgPSBjdXJyZW50LT5pb19jb250ZXh0OworCisJCQkvKgorCQkJICogdGhlIG1haW4gZ29hbCBoZXJlIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0bworCQkJICogYmxvY2sgaWYgd2UncmUgZ29pbmcgdG8gYmUgYWJsZSB0byBzdWJtaXQKKwkJCSAqIG1vcmUgcmVxdWVzdHMgd2l0aG91dCBibG9ja2luZy4KKwkJCSAqCisJCQkgKiBUaGlzIGNvZGUgZG9lcyB0d28gZ3JlYXQgdGhpbmdzLCBpdCBwb2tlcyBpbnRvCisJCQkgKiB0aGUgZWxldmF0b3IgY29kZSBmcm9tIGEgZmlsZXN5c3RlbSBfYW5kXworCQkJICogaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgaG93IGJhdGNoaW5nIHdvcmtzLgorCQkJICovCisJCQlpZiAoaW9jICYmIGlvYy0+bnJfYmF0Y2hfcmVxdWVzdHMgPiAwICYmCisJCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgaW9jLT5sYXN0X3dhaXRlZCArIEhaLzUwVUwpICYmCisJCQkgICAgKGxhc3Rfd2FpdGVkID09IDAgfHwKKwkJCSAgICAgaW9jLT5sYXN0X3dhaXRlZCA9PSBsYXN0X3dhaXRlZCkpIHsKKwkJCQkvKgorCQkJCSAqIHdlIHdhbnQgdG8gZ28gdGhyb3VnaCBvdXIgYmF0Y2ggb2YKKwkJCQkgKiByZXF1ZXN0cyBhbmQgc3RvcC4gIFNvLCB3ZSBjb3B5IG91dAorCQkJCSAqIHRoZSBpb2MtPmxhc3Rfd2FpdGVkIHRpbWUgYW5kIHRlc3QKKwkJCQkgKiBhZ2FpbnN0IGl0IGJlZm9yZSBsb29waW5nCisJCQkJICovCisJCQkJbGFzdF93YWl0ZWQgPSBpb2MtPmxhc3Rfd2FpdGVkOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJc3Bpbl9sb2NrKCZkZXZpY2UtPmlvX2xvY2spOwogCiAJCQlvbGRfaGVhZCA9IGRldmljZS0+cGVuZGluZ19iaW9zOwpAQCAtMjMxLDYgKzI1OCwxOCBAQAogCWlmIChkZXZpY2UtPnBlbmRpbmdfYmlvcykKIAkJZ290byBsb29wX2xvY2s7CiAJc3Bpbl91bmxvY2soJmRldmljZS0+aW9fbG9jayk7CisKKwkvKgorCSAqIElPIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3VnaCBhIGxvbmcgcGF0aCB0byBnZXQgaGVyZS4gIENoZWNrc3VtbWluZywKKwkgKiBhc3luYyBoZWxwZXIgdGhyZWFkcywgcGVyaGFwcyBjb21wcmVzc2lvbi4gIFdlJ3ZlIGRvbmUgYSBwcmV0dHkKKwkgKiBnb29kIGpvYiBvZiBjb2xsZWN0aW5nIGEgYmF0Y2ggb2YgSU8gYW5kIHNob3VsZCBqdXN0IHVucGx1ZworCSAqIHRoZSBkZXZpY2UgcmlnaHQgYXdheS4KKwkgKgorCSAqIFRoaXMgd2lsbCBoZWxwIGFueW9uZSB3aG8gaXMgd2FpdGluZyBvbiB0aGUgSU8sIHRoZXkgbWlnaHQgaGF2ZQorCSAqIGFscmVhZHkgdW5wbHVnZ2VkLCBidXQgbWFuYWdlZCB0byBkbyBzbyBiZWZvcmUgdGhlIGJpbyB0aGV5CisJICogY2FyZWQgYWJvdXQgZm91bmQgaXRzIHdheSBkb3duIGhlcmUuCisJICovCisJYmxrX3J1bl9iYWNraW5nX2RldihiZGksIE5VTEwpOwogZG9uZToKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuaCBiL2ZzL2J0cmZzL3ZvbHVtZXMuaAppbmRleCA4NmM0NGU5Li4yMTg1ZGU3IDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmgKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5oCkBAIC03Niw3ICs3Niw3IEBACiBzdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyB7CiAJdTggZnNpZFtCVFJGU19GU0lEX1NJWkVdOyAvKiBGUyBzcGVjaWZpYyB1dWlkICovCiAKLQkvKiB0aGUgZGV2aWNlIHdpdGggdGhpcyBpZCBoYXMgdGhlIG1vc3QgcmVjZW50IGNveXAgb2YgdGhlIHN1cGVyICovCisJLyogdGhlIGRldmljZSB3aXRoIHRoaXMgaWQgaGFzIHRoZSBtb3N0IHJlY2VudCBjb3B5IG9mIHRoZSBzdXBlciAqLwogCXU2NCBsYXRlc3RfZGV2aWQ7CiAJdTY0IGxhdGVzdF90cmFuczsKIAl1NjQgbnVtX2RldmljZXM7CmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IGY1ZjhiMTUuLjVkNTVhODkgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC0xOTksMTMgKzE5OSwxMyBAQAogCWhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAJYmggPSBoZWFkOwogCWRvIHsKLQkJaWYgKGJoLT5iX2Jsb2NrbnIgPT0gYmxvY2spIHsKKwkJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSkKKwkJCWFsbF9tYXBwZWQgPSAwOworCQllbHNlIGlmIChiaC0+Yl9ibG9ja25yID09IGJsb2NrKSB7CiAJCQlyZXQgPSBiaDsKIAkJCWdldF9iaChiaCk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KLQkJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSkKLQkJCWFsbF9tYXBwZWQgPSAwOwogCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKIAl9IHdoaWxlIChiaCAhPSBoZWFkKTsKIApAQCAtMTU5NSw2ICsxNTk1LDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqaGVhZDsKIAljb25zdCB1bnNpZ25lZCBibG9ja3NpemUgPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CiAJaW50IG5yX3VuZGVyd2F5ID0gMDsKKwlpbnQgd3JpdGVfb3AgPSAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgPyBXUklURV9TWU5DIDogV1JJVEUpOwogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIApAQCAtMTY4Niw3ICsxNjg3LDcgQEAKIAlkbyB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV4dCA9IGJoLT5iX3RoaXNfcGFnZTsKIAkJaWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHsKLQkJCXN1Ym1pdF9iaChXUklURSwgYmgpOworCQkJc3VibWl0X2JoKHdyaXRlX29wLCBiaCk7CiAJCQlucl91bmRlcndheSsrOwogCQl9CiAJCWJoID0gbmV4dDsKQEAgLTE3NDAsNyArMTc0MSw3IEBACiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV4dCA9IGJoLT5iX3RoaXNfcGFnZTsKIAkJaWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHsKIAkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCQlzdWJtaXRfYmgoV1JJVEUsIGJoKTsKKwkJCXN1Ym1pdF9iaCh3cml0ZV9vcCwgYmgpOwogCQkJbnJfdW5kZXJ3YXkrKzsKIAkJfQogCQliaCA9IG5leHQ7CkBAIC0zMzE1LDcgKzMzMTYsNiBAQAogRVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX3JlYWRfc3luYyk7CiBFWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfd3JpdGVfc3luYyk7CiBFWFBPUlRfU1lNQk9MKGZpbGVfZnN5bmMpOwotRVhQT1JUX1NZTUJPTChmc3luY19iZGV2KTsKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19ibG9ja19ibWFwKTsKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpOwogRVhQT1JUX1NZTUJPTChpbml0X2J1ZmZlcik7CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL0tjb25maWcgYi9mcy9jYWNoZWZpbGVzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlOWM2MQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvS2NvbmZpZwpAQCAtMCwwICsxLDM5IEBACisKK2NvbmZpZyBDQUNIRUZJTEVTCisJdHJpc3RhdGUgIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlcyIKKwlkZXBlbmRzIG9uIEZTQ0FDSEUgJiYgQkxPQ0sKKwloZWxwCisJICBUaGlzIHBlcm1pdHMgdXNlIG9mIGEgbW91bnRlZCBmaWxlc3lzdGVtIGFzIGEgY2FjaGUgZm9yIG90aGVyCisJICBmaWxlc3lzdGVtcyAtIHByaW1hcmlseSBuZXR3b3JraW5nIGZpbGVzeXN0ZW1zIC0gdGh1cyBhbGxvd2luZyBmYXN0CisJICBsb2NhbCBkaXNrIHRvIGVuaGFuY2UgdGhlIHNwZWVkIG9mIHNsb3dlciBkZXZpY2VzLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMudHh0IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbi4KKworY29uZmlnIENBQ0hFRklMRVNfREVCVUcKKwlib29sICJEZWJ1ZyBDYWNoZUZpbGVzIgorCWRlcGVuZHMgb24gQ0FDSEVGSUxFUworCWhlbHAKKwkgIFRoaXMgcGVybWl0cyBkZWJ1Z2dpbmcgdG8gYmUgZHluYW1pY2FsbHkgZW5hYmxlZCBpbiB0aGUgZmlsZXN5c3RlbQorCSAgY2FjaGluZyBvbiBmaWxlcyBtb2R1bGUuICBJZiB0aGlzIGlzIHNldCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgbWF5IGJlCisJICBlbmFibGVkIGJ5IHNldHRpbmcgYml0cyBpbiAvc3lzL21vZHVsZXMvY2FjaGVmaWxlcy9wYXJhbWV0ZXIvZGVidWcgb3IKKwkgIGJ5IGluY2x1ZGluZyBhIGRlYnVnZ2luZyBzcGVjaWZpZXIgaW4gL2V0Yy9jYWNoZWZpbGVzZC5jb25mLgorCitjb25maWcgQ0FDSEVGSUxFU19ISVNUT0dSQU0KKwlib29sICJHYXRoZXIgbGF0ZW5jeSBpbmZvcm1hdGlvbiBvbiBDYWNoZUZpbGVzIgorCWRlcGVuZHMgb24gQ0FDSEVGSUxFUyAmJiBQUk9DX0ZTCisJaGVscAorCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgbGF0ZW5jeSBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCBvbiBDYWNoZUZpbGVzCisJICBvcGVyYXRpb24gYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZToKKworCQkvcHJvYy9mcy9jYWNoZWZpbGVzL2hpc3RvZ3JhbQorCisJICBUaGUgZ2VuZXJhdGlvbiBvZiB0aGlzIGhpc3RvZ3JhbSBhZGRzIGEgY2VydGFpbiBhbW91bnQgb2Ygb3ZlcmhlYWQgdG8KKwkgIGV4ZWN1dGlvbiBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG9pbnRzIGF0IHdoaWNoIGRhdGEgaXMgZ2F0aGVyZWQsCisJICBhbmQgb24gYSBtdWx0aS1DUFUgc3lzdGVtIHRoZXNlIG1heSBiZSBvbiBjYWNoZWxpbmVzIHRoYXQga2VlcAorCSAgYm91bmNpbmcgYmV0d2VlbiBDUFVzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBoaXN0b2dyYW0gbWF5IGJlCisJICB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFNheWluZyAnTicgaGVyZSBpcyByZWNvbW1lbmRlZC4KKworCSAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9jYWNoZWZpbGVzLnR4dCBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL01ha2VmaWxlIGIvZnMvY2FjaGVmaWxlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmNiYWIwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjCisjIE1ha2VmaWxlIGZvciBjYWNoaW5nIGluIGEgbW91bnRlZCBmaWxlc3lzdGVtCisjCisKK2NhY2hlZmlsZXMteSA6PSBcCisJYmluZC5vIFwKKwlkYWVtb24ubyBcCisJaW50ZXJmYWNlLm8gXAorCWtleS5vIFwKKwltYWluLm8gXAorCW5hbWVpLm8gXAorCXJkd3IubyBcCisJc2VjdXJpdHkubyBcCisJeGF0dHIubworCitjYWNoZWZpbGVzLSQoQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNKSArPSBwcm9jLm8KKworb2JqLSQoQ09ORklHX0NBQ0hFRklMRVMpIDo9IGNhY2hlZmlsZXMubwpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9iaW5kLmMgYi9mcy9jYWNoZWZpbGVzL2JpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk3ZTAwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9iaW5kLmMKQEAgLTAsMCArMSwyODYgQEAKKy8qIEJpbmQgYW5kIHVuYmluZCBhIGNhY2hlIGZyb20gdGhlIGZpbGVzeXN0ZW0gYmFja2luZyBpdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGVzKTsKKworLyoKKyAqIGJpbmQgYSBkaXJlY3RvcnkgYXMgYSBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19kYWVtb25fYmluZChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJX2VudGVyKCJ7JXUsJXUsJXUsJXUsJXUsJXV9LCVzIiwKKwkgICAgICAgY2FjaGUtPmZydW5fcGVyY2VudCwKKwkgICAgICAgY2FjaGUtPmZjdWxsX3BlcmNlbnQsCisJICAgICAgIGNhY2hlLT5mc3RvcF9wZXJjZW50LAorCSAgICAgICBjYWNoZS0+YnJ1bl9wZXJjZW50LAorCSAgICAgICBjYWNoZS0+YmN1bGxfcGVyY2VudCwKKwkgICAgICAgY2FjaGUtPmJzdG9wX3BlcmNlbnQsCisJICAgICAgIGFyZ3MpOworCisJLyogc3RhcnQgYnkgY2hlY2tpbmcgdGhpbmdzIG92ZXIgKi8KKwlBU1NFUlQoY2FjaGUtPmZzdG9wX3BlcmNlbnQgPj0gMCAmJgorCSAgICAgICBjYWNoZS0+ZnN0b3BfcGVyY2VudCA8IGNhY2hlLT5mY3VsbF9wZXJjZW50ICYmCisJICAgICAgIGNhY2hlLT5mY3VsbF9wZXJjZW50IDwgY2FjaGUtPmZydW5fcGVyY2VudCAmJgorCSAgICAgICBjYWNoZS0+ZnJ1bl9wZXJjZW50ICA8IDEwMCk7CisKKwlBU1NFUlQoY2FjaGUtPmJzdG9wX3BlcmNlbnQgPj0gMCAmJgorCSAgICAgICBjYWNoZS0+YnN0b3BfcGVyY2VudCA8IGNhY2hlLT5iY3VsbF9wZXJjZW50ICYmCisJICAgICAgIGNhY2hlLT5iY3VsbF9wZXJjZW50IDwgY2FjaGUtPmJydW5fcGVyY2VudCAmJgorCSAgICAgICBjYWNoZS0+YnJ1bl9wZXJjZW50ICA8IDEwMCk7CisKKwlpZiAoKmFyZ3MpIHsKKwkJa2Vycm9yKCInYmluZCcgY29tbWFuZCBkb2Vzbid0IHRha2UgYW4gYXJndW1lbnQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjYWNoZS0+cm9vdGRpcm5hbWUpIHsKKwkJa2Vycm9yKCJObyBjYWNoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGRvbid0IHBlcm1pdCBhbHJlYWR5IGJvdW5kIGNhY2hlcyB0byBiZSByZS1ib3VuZCAqLworCWlmICh0ZXN0X2JpdChDQUNIRUZJTEVTX1JFQURZLCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoIkNhY2hlIGFscmVhZHkgYm91bmQiKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBjb3BpZXMgb2YgdGhlIHRhZyBhbmQgZGlybmFtZSBzdHJpbmdzICovCisJaWYgKCFjYWNoZS0+dGFnKSB7CisJCS8qIHRoZSB0YWcgc3RyaW5nIGlzIHJlbGVhc2VkIGJ5IHRoZSBmb3BzLT5yZWxlYXNlKCkKKwkJICogZnVuY3Rpb24sIHNvIHdlIGRvbid0IHJlbGVhc2UgaXQgb24gZXJyb3IgaGVyZSAqLworCQljYWNoZS0+dGFnID0ga3N0cmR1cCgiQ2FjaGVGaWxlcyIsIEdGUF9LRVJORUwpOworCQlpZiAoIWNhY2hlLT50YWcpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBhZGQgdGhlIGNhY2hlICovCisJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShjYWNoZSk7Cit9CisKKy8qCisgKiBhZGQgYSBjYWNoZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpmc2RlZjsKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBrc3RhdGZzIHN0YXRzOworCXN0cnVjdCBkZW50cnkgKmdyYXZleWFyZCwgKmNhY2hlZGlyLCAqcm9vdDsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIiKTsKKworCS8qIHdlIHdhbnQgdG8gd29yayB1bmRlciB0aGUgbW9kdWxlJ3Mgc2VjdXJpdHkgSUQgKi8KKwlyZXQgPSBjYWNoZWZpbGVzX2dldF9zZWN1cml0eV9JRChjYWNoZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljYWNoZWZpbGVzX2JlZ2luX3NlY3VyZShjYWNoZSwgJnNhdmVkX2NyZWQpOworCisJLyogYWxsb2NhdGUgdGhlIHJvb3QgaW5kZXggb2JqZWN0ICovCisJcmV0ID0gLUVOT01FTTsKKworCWZzZGVmID0ga21lbV9jYWNoZV9hbGxvYyhjYWNoZWZpbGVzX29iamVjdF9qYXIsIEdGUF9LRVJORUwpOworCWlmICghZnNkZWYpCisJCWdvdG8gZXJyb3Jfcm9vdF9vYmplY3Q7CisKKwlBU1NFUlRDTVAoZnNkZWYtPmJhY2tlciwgPT0sIE5VTEwpOworCisJYXRvbWljX3NldCgmZnNkZWYtPnVzYWdlLCAxKTsKKwlmc2RlZi0+dHlwZSA9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVg7CisKKwlfZGVidWcoIi0gZnNkZWYgJXAiLCBmc2RlZik7CisKKwkvKiBsb29rIHVwIHRoZSBkaXJlY3RvcnkgYXQgdGhlIHJvb3Qgb2YgdGhlIGNhY2hlICovCisJbWVtc2V0KCZuZCwgMCwgc2l6ZW9mKG5kKSk7CisKKwlyZXQgPSBwYXRoX2xvb2t1cChjYWNoZS0+cm9vdGRpcm5hbWUsIExPT0tVUF9ESVJFQ1RPUlksICZuZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3Jfb3Blbl9yb290OworCisJY2FjaGUtPm1udCA9IG1udGdldChuZC5wYXRoLm1udCk7CisJcm9vdCA9IGRnZXQobmQucGF0aC5kZW50cnkpOworCXBhdGhfcHV0KCZuZC5wYXRoKTsKKworCS8qIGNoZWNrIHBhcmFtZXRlcnMgKi8KKwlyZXQgPSAtRU9QTk9UU1VQUDsKKwlpZiAoIXJvb3QtPmRfaW5vZGUgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AtPmxvb2t1cCB8fAorCSAgICAhcm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AtPnNldHhhdHRyIHx8CisJICAgICFyb290LT5kX2lub2RlLT5pX29wLT5nZXR4YXR0ciB8fAorCSAgICAhcm9vdC0+ZF9zYiB8fAorCSAgICAhcm9vdC0+ZF9zYi0+c19vcCB8fAorCSAgICAhcm9vdC0+ZF9zYi0+c19vcC0+c3RhdGZzIHx8CisJICAgICFyb290LT5kX3NiLT5zX29wLT5zeW5jX2ZzKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJcmV0ID0gLUVST0ZTOworCWlmIChyb290LT5kX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZGV0ZXJtaW5lIHRoZSBzZWN1cml0eSBvZiB0aGUgb24tZGlzayBjYWNoZSBhcyB0aGlzIGdvdmVybnMKKwkgKiBzZWN1cml0eSBJRCBvZiBmaWxlcyB3ZSBjcmVhdGUgKi8KKwlyZXQgPSBjYWNoZWZpbGVzX2RldGVybWluZV9jYWNoZV9zZWN1cml0eShjYWNoZSwgcm9vdCwgJnNhdmVkX2NyZWQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZ2V0IHRoZSBjYWNoZSBzaXplIGFuZCBibG9ja3NpemUgKi8KKwlyZXQgPSB2ZnNfc3RhdGZzKHJvb3QsICZzdGF0cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfdW5zdXBwb3J0ZWQ7CisKKwlyZXQgPSAtRVJBTkdFOworCWlmIChzdGF0cy5mX2JzaXplIDw9IDApCisJCWdvdG8gZXJyb3JfdW5zdXBwb3J0ZWQ7CisKKwlyZXQgPSAtRU9QTk9UU1VQUDsKKwlpZiAoc3RhdHMuZl9ic2l6ZSA+IFBBR0VfU0laRSkKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKworCWNhY2hlLT5ic2l6ZSA9IHN0YXRzLmZfYnNpemU7CisJY2FjaGUtPmJzaGlmdCA9IDA7CisJaWYgKHN0YXRzLmZfYnNpemUgPCBQQUdFX1NJWkUpCisJCWNhY2hlLT5ic2hpZnQgPSBQQUdFX1NISUZUIC0gaWxvZzIoc3RhdHMuZl9ic2l6ZSk7CisKKwlfZGVidWcoImJsa3NpemUgJXUgKHNoaWZ0ICV1KSIsCisJICAgICAgIGNhY2hlLT5ic2l6ZSwgY2FjaGUtPmJzaGlmdCk7CisKKwlfZGVidWcoInNpemUgJWxsdSwgYXZhaWwgJWxsdSIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXRzLmZfYmxvY2tzLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0cy5mX2JhdmFpbCk7CisKKwkvKiBzZXQgdXAgY2FjaGluZyBsaW1pdHMgKi8KKwlkb19kaXYoc3RhdHMuZl9maWxlcywgMTAwKTsKKwljYWNoZS0+ZnN0b3AgPSBzdGF0cy5mX2ZpbGVzICogY2FjaGUtPmZzdG9wX3BlcmNlbnQ7CisJY2FjaGUtPmZjdWxsID0gc3RhdHMuZl9maWxlcyAqIGNhY2hlLT5mY3VsbF9wZXJjZW50OworCWNhY2hlLT5mcnVuICA9IHN0YXRzLmZfZmlsZXMgKiBjYWNoZS0+ZnJ1bl9wZXJjZW50OworCisJX2RlYnVnKCJsaW1pdHMgeyVsbHUsJWxsdSwlbGx1fSBmaWxlcyIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mcnVuLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+ZmN1bGwsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mc3RvcCk7CisKKwlzdGF0cy5mX2Jsb2NrcyA+Pj0gY2FjaGUtPmJzaGlmdDsKKwlkb19kaXYoc3RhdHMuZl9ibG9ja3MsIDEwMCk7CisJY2FjaGUtPmJzdG9wID0gc3RhdHMuZl9ibG9ja3MgKiBjYWNoZS0+YnN0b3BfcGVyY2VudDsKKwljYWNoZS0+YmN1bGwgPSBzdGF0cy5mX2Jsb2NrcyAqIGNhY2hlLT5iY3VsbF9wZXJjZW50OworCWNhY2hlLT5icnVuICA9IHN0YXRzLmZfYmxvY2tzICogY2FjaGUtPmJydW5fcGVyY2VudDsKKworCV9kZWJ1ZygibGltaXRzIHslbGx1LCVsbHUsJWxsdX0gYmxvY2tzIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJydW4sCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5iY3VsbCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJzdG9wKTsKKworCS8qIGdldCB0aGUgY2FjaGUgZGlyZWN0b3J5IGFuZCBjaGVjayBpdHMgdHlwZSAqLworCWNhY2hlZGlyID0gY2FjaGVmaWxlc19nZXRfZGlyZWN0b3J5KGNhY2hlLCByb290LCAiY2FjaGUiKTsKKwlpZiAoSVNfRVJSKGNhY2hlZGlyKSkgeworCQlyZXQgPSBQVFJfRVJSKGNhY2hlZGlyKTsKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKwl9CisKKwlmc2RlZi0+ZGVudHJ5ID0gY2FjaGVkaXI7CisJZnNkZWYtPmZzY2FjaGUuY29va2llID0gTlVMTDsKKworCXJldCA9IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoZnNkZWYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZ2V0IHRoZSBncmF2ZXlhcmQgZGlyZWN0b3J5ICovCisJZ3JhdmV5YXJkID0gY2FjaGVmaWxlc19nZXRfZGlyZWN0b3J5KGNhY2hlLCByb290LCAiZ3JhdmV5YXJkIik7CisJaWYgKElTX0VSUihncmF2ZXlhcmQpKSB7CisJCXJldCA9IFBUUl9FUlIoZ3JhdmV5YXJkKTsKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKwl9CisKKwljYWNoZS0+Z3JhdmV5YXJkID0gZ3JhdmV5YXJkOworCisJLyogcHVibGlzaCB0aGUgY2FjaGUgKi8KKwlmc2NhY2hlX2luaXRfY2FjaGUoJmNhY2hlLT5jYWNoZSwKKwkJCSAgICZjYWNoZWZpbGVzX2NhY2hlX29wcywKKwkJCSAgICIlcyIsCisJCQkgICBmc2RlZi0+ZGVudHJ5LT5kX3NiLT5zX2lkKTsKKworCWZzY2FjaGVfb2JqZWN0X2luaXQoJmZzZGVmLT5mc2NhY2hlLCBOVUxMLCAmY2FjaGUtPmNhY2hlKTsKKworCXJldCA9IGZzY2FjaGVfYWRkX2NhY2hlKCZjYWNoZS0+Y2FjaGUsICZmc2RlZi0+ZnNjYWNoZSwgY2FjaGUtPnRhZyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfYWRkX2NhY2hlOworCisJLyogZG9uZSAqLworCXNldF9iaXQoQ0FDSEVGSUxFU19SRUFEWSwgJmNhY2hlLT5mbGFncyk7CisJZHB1dChyb290KTsKKworCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IgorCSAgICAgICAiIEZpbGUgY2FjaGUgb24gJXMgcmVnaXN0ZXJlZFxuIiwKKwkgICAgICAgY2FjaGUtPmNhY2hlLmlkZW50aWZpZXIpOworCisJLyogY2hlY2sgaG93IG11Y2ggc3BhY2UgdGhlIGNhY2hlIGhhcyAqLworCWNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAwKTsKKwljYWNoZWZpbGVzX2VuZF9zZWN1cmUoY2FjaGUsIHNhdmVkX2NyZWQpOworCXJldHVybiAwOworCitlcnJvcl9hZGRfY2FjaGU6CisJZHB1dChjYWNoZS0+Z3JhdmV5YXJkKTsKKwljYWNoZS0+Z3JhdmV5YXJkID0gTlVMTDsKK2Vycm9yX3Vuc3VwcG9ydGVkOgorCW1udHB1dChjYWNoZS0+bW50KTsKKwljYWNoZS0+bW50ID0gTlVMTDsKKwlkcHV0KGZzZGVmLT5kZW50cnkpOworCWZzZGVmLT5kZW50cnkgPSBOVUxMOworCWRwdXQocm9vdCk7CitlcnJvcl9vcGVuX3Jvb3Q6CisJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgZnNkZWYpOworZXJyb3Jfcm9vdF9vYmplY3Q6CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKwlrZXJyb3IoIkZhaWxlZCB0byByZWdpc3RlcjogJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB1bmJpbmQgYSBjYWNoZSBvbiBmZCByZWxlYXNlCisgKi8KK3ZvaWQgY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSkKK3sKKwlfZW50ZXIoIiIpOworCisJaWYgKHRlc3RfYml0KENBQ0hFRklMRVNfUkVBRFksICZjYWNoZS0+ZmxhZ3MpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IgorCQkgICAgICAgIiBGaWxlIGNhY2hlIG9uICVzIHVucmVnaXN0ZXJpbmdcbiIsCisJCSAgICAgICBjYWNoZS0+Y2FjaGUuaWRlbnRpZmllcik7CisKKwkJZnNjYWNoZV93aXRoZHJhd19jYWNoZSgmY2FjaGUtPmNhY2hlKTsKKwl9CisKKwlkcHV0KGNhY2hlLT5ncmF2ZXlhcmQpOworCW1udHB1dChjYWNoZS0+bW50KTsKKworCWtmcmVlKGNhY2hlLT5yb290ZGlybmFtZSk7CisJa2ZyZWUoY2FjaGUtPnNlY2N0eCk7CisJa2ZyZWUoY2FjaGUtPnRhZyk7CisKKwlfbGVhdmUoIiIpOworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9kYWVtb24uYyBiL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxODUxNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKQEAgLTAsMCArMSw3NTUgQEAKKy8qIERhZW1vbiBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsCisJCQkJICAgICAgbG9mZl90ICopOworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwKKwkJCQkgICAgICAgc2l6ZV90LCBsb2ZmX3QgKik7CitzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3BvbGwoc3RydWN0IGZpbGUgKiwKKwkJCQkJICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9mcnVuKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZjdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JydW4oc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fYmN1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fYnN0b3Aoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kZWJ1ZyhzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25faW51c2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fc2VjY3R4KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3RhZyhzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZWZpbGVzX29wZW47CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVmaWxlc19kYWVtb25fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FjaGVmaWxlc19kYWVtb25fb3BlbiwKKwkucmVsZWFzZQk9IGNhY2hlZmlsZXNfZGFlbW9uX3JlbGVhc2UsCisJLnJlYWQJCT0gY2FjaGVmaWxlc19kYWVtb25fcmVhZCwKKwkud3JpdGUJCT0gY2FjaGVmaWxlc19kYWVtb25fd3JpdGUsCisJLnBvbGwJCT0gY2FjaGVmaWxlc19kYWVtb25fcG9sbCwKK307CisKK3N0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgeworCWNoYXIgbmFtZVs4XTsKKwlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgY2FjaGVmaWxlc19kYWVtb25fY21kc1tdID0geworCXsgImJpbmQiLAljYWNoZWZpbGVzX2RhZW1vbl9iaW5kCQl9LAorCXsgImJydW4iLAljYWNoZWZpbGVzX2RhZW1vbl9icnVuCQl9LAorCXsgImJjdWxsIiwJY2FjaGVmaWxlc19kYWVtb25fYmN1bGwJCX0sCisJeyAiYnN0b3AiLAljYWNoZWZpbGVzX2RhZW1vbl9ic3RvcAkJfSwKKwl7ICJjdWxsIiwJY2FjaGVmaWxlc19kYWVtb25fY3VsbAkJfSwKKwl7ICJkZWJ1ZyIsCWNhY2hlZmlsZXNfZGFlbW9uX2RlYnVnCQl9LAorCXsgImRpciIsCWNhY2hlZmlsZXNfZGFlbW9uX2RpcgkJfSwKKwl7ICJmcnVuIiwJY2FjaGVmaWxlc19kYWVtb25fZnJ1bgkJfSwKKwl7ICJmY3VsbCIsCWNhY2hlZmlsZXNfZGFlbW9uX2ZjdWxsCQl9LAorCXsgImZzdG9wIiwJY2FjaGVmaWxlc19kYWVtb25fZnN0b3AJCX0sCisJeyAiaW51c2UiLAljYWNoZWZpbGVzX2RhZW1vbl9pbnVzZQkJfSwKKwl7ICJzZWNjdHgiLAljYWNoZWZpbGVzX2RhZW1vbl9zZWNjdHgJfSwKKwl7ICJ0YWciLAljYWNoZWZpbGVzX2RhZW1vbl90YWcJCX0sCisJeyAiIiwJCU5VTEwJCQkJfQorfTsKKworCisvKgorICogZG8gdmFyaW91cyBjaGVja3MKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKworCV9lbnRlcigiIik7CisKKwkvKiBvbmx5IHRoZSBzdXBlcnVzZXIgbWF5IGRvIHRoaXMgKi8KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiB0aGUgY2FjaGVmaWxlcyBkZXZpY2UgbWF5IG9ubHkgYmUgb3BlbiBvbmNlIGF0IGEgdGltZSAqLworCWlmICh4Y2hnKCZjYWNoZWZpbGVzX29wZW4sIDEpID09IDEpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBhbGxvY2F0ZSBhIGNhY2hlIHJlY29yZCAqLworCWNhY2hlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhY2hlKSB7CisJCWNhY2hlZmlsZXNfb3BlbiA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW11dGV4X2luaXQoJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCWNhY2hlLT5hY3RpdmVfbm9kZXMgPSBSQl9ST09UOworCXJ3bG9ja19pbml0KCZjYWNoZS0+YWN0aXZlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhY2hlLT5kYWVtb25fcG9sbHdxKTsKKworCS8qIHNldCBkZWZhdWx0IGNhY2hpbmcgbGltaXRzCisJICogLSBsaW1pdCBhdCAxJSBmcmVlIHNwYWNlIGFuZC9vciBmcmVlIGZpbGVzCisJICogLSBjdWxsIGJlbG93IDUlIGZyZWUgc3BhY2UgYW5kL29yIGZyZWUgZmlsZXMKKwkgKiAtIGNlYXNlIGN1bGxpbmcgYWJvdmUgNyUgZnJlZSBzcGFjZSBhbmQvb3IgZnJlZSBmaWxlcworCSAqLworCWNhY2hlLT5mcnVuX3BlcmNlbnQgPSA3OworCWNhY2hlLT5mY3VsbF9wZXJjZW50ID0gNTsKKwljYWNoZS0+ZnN0b3BfcGVyY2VudCA9IDE7CisJY2FjaGUtPmJydW5fcGVyY2VudCA9IDc7CisJY2FjaGUtPmJjdWxsX3BlcmNlbnQgPSA1OworCWNhY2hlLT5ic3RvcF9wZXJjZW50ID0gMTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNhY2hlOworCWNhY2hlLT5jYWNoZWZpbGVzZCA9IGZpbGU7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgY2FjaGUKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCV9lbnRlcigiIik7CisKKwlBU1NFUlQoY2FjaGUpOworCisJc2V0X2JpdChDQUNIRUZJTEVTX0RFQUQsICZjYWNoZS0+ZmxhZ3MpOworCisJY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKGNhY2hlKTsKKworCUFTU0VSVCghY2FjaGUtPmFjdGl2ZV9ub2Rlcy5yYl9ub2RlKTsKKworCS8qIGNsZWFuIHVwIHRoZSBjb250cm9sIGZpbGUgaW50ZXJmYWNlICovCisJY2FjaGUtPmNhY2hlZmlsZXNkID0gTlVMTDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWNhY2hlZmlsZXNfb3BlbiA9IDA7CisKKwlrZnJlZShjYWNoZSk7CisKKwlfbGVhdmUoIiIpOworCXJldHVybiAwOworfQorCisvKgorICogcmVhZCB0aGUgY2FjaGUgc3RhdGUKKyAqLworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKl9idWZmZXIsCisJCQkJICAgICAgc2l6ZV90IGJ1ZmxlbiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmZmVyWzI1Nl07CisJaW50IG47CisKKwkvL19lbnRlcigiLCwlenUsIiwgYnVmbGVuKTsKKworCWlmICghdGVzdF9iaXQoQ0FDSEVGSUxFU19SRUFEWSwgJmNhY2hlLT5mbGFncykpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaG93IG11Y2ggc3BhY2UgdGhlIGNhY2hlIGhhcyAqLworCWNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAwKTsKKworCS8qIHN1bW1hcmlzZSAqLworCWNsZWFyX2JpdChDQUNIRUZJTEVTX1NUQVRFX0NIQU5HRUQsICZjYWNoZS0+ZmxhZ3MpOworCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCSAgICAgImN1bGw9JWMiCisJCSAgICAgIiBmcnVuPSVsbHgiCisJCSAgICAgIiBmY3VsbD0lbGx4IgorCQkgICAgICIgZnN0b3A9JWxseCIKKwkJICAgICAiIGJydW49JWxseCIKKwkJICAgICAiIGJjdWxsPSVsbHgiCisJCSAgICAgIiBic3RvcD0lbGx4IiwKKwkJICAgICB0ZXN0X2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpID8gJzEnIDogJzAnLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mcnVuLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mY3VsbCwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+ZnN0b3AsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJydW4sCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJjdWxsLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5ic3RvcAorCQkgICAgICk7CisKKwlpZiAobiA+IGJ1ZmxlbikKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCWlmIChjb3B5X3RvX3VzZXIoX2J1ZmZlciwgYnVmZmVyLCBuKSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBuOworfQorCisvKgorICogY29tbWFuZCB0aGUgY2FjaGUKKyAqLworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpfZGF0YSwKKwkJCQkgICAgICAgc2l6ZV90IGRhdGFsZW4sCisJCQkJICAgICAgIGxvZmZfdCAqcG9zKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgKmNtZDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdCByZXQ7CisJY2hhciAqZGF0YSwgKmFyZ3MsICpjcDsKKworCS8vX2VudGVyKCIsLCV6dSwiLCBkYXRhbGVuKTsKKworCUFTU0VSVChjYWNoZSk7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmY2FjaGUtPmZsYWdzKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoZGF0YWxlbiA8IDAgfHwgZGF0YWxlbiA+IFBBR0VfU0laRSAtIDEpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIGRyYWcgdGhlIGNvbW1hbmQgc3RyaW5nIGludG8gdGhlIGtlcm5lbCBzbyB3ZSBjYW4gcGFyc2UgaXQgKi8KKwlkYXRhID0ga21hbGxvYyhkYXRhbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIF9kYXRhLCBkYXRhbGVuKSAhPSAwKQorCQlnb3RvIGVycm9yOworCisJZGF0YVtkYXRhbGVuXSA9ICdcMCc7CisKKwlyZXQgPSAtRUlOVkFMOworCWlmIChtZW1jaHIoZGF0YSwgJ1wwJywgZGF0YWxlbikpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzdHJpcCBhbnkgbmV3bGluZSAqLworCWNwID0gbWVtY2hyKGRhdGEsICdcbicsIGRhdGFsZW4pOworCWlmIChjcCkgeworCQlpZiAoY3AgPT0gZGF0YSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJKmNwID0gJ1wwJzsKKwl9CisKKwkvKiBwYXJzZSB0aGUgY29tbWFuZCAqLworCXJldCA9IC1FT1BOT1RTVVBQOworCisJZm9yIChhcmdzID0gZGF0YTsgKmFyZ3M7IGFyZ3MrKykKKwkJaWYgKGlzc3BhY2UoKmFyZ3MpKQorCQkJYnJlYWs7CisJaWYgKCphcmdzKSB7CisJCWlmIChhcmdzID09IGRhdGEpCisJCQlnb3RvIGVycm9yOworCQkqYXJncyA9ICdcMCc7CisJCWZvciAoYXJncysrOyBpc3NwYWNlKCphcmdzKTsgYXJncysrKQorCQkJY29udGludWU7CisJfQorCisJLyogcnVuIHRoZSBhcHByb3ByaWF0ZSBjb21tYW5kIGhhbmRsZXIgKi8KKwlmb3IgKGNtZCA9IGNhY2hlZmlsZXNfZGFlbW9uX2NtZHM7IGNtZC0+bmFtZVswXTsgY21kKyspCisJCWlmIChzdHJjbXAoY21kLT5uYW1lLCBkYXRhKSA9PSAwKQorCQkJZ290byBmb3VuZF9jb21tYW5kOworCitlcnJvcjoKKwlrZnJlZShkYXRhKTsKKwkvL19sZWF2ZSgiID0gJXpkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitmb3VuZF9jb21tYW5kOgorCW11dGV4X2xvY2soJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCisJcmV0ID0gLUVJTzsKKwlpZiAoIXRlc3RfYml0KENBQ0hFRklMRVNfREVBRCwgJmNhY2hlLT5mbGFncykpCisJCXJldCA9IGNtZC0+aGFuZGxlcihjYWNoZSwgYXJncyk7CisKKwltdXRleF91bmxvY2soJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBkYXRhbGVuOworCWdvdG8gZXJyb3I7Cit9CisKKy8qCisgKiBwb2xsIGZvciBjdWxsaW5nIHN0YXRlCisgKiAtIHVzZSBQT0xMT1VUIHRvIGluZGljYXRlIGN1bGxpbmcgc3RhdGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjYWNoZWZpbGVzX2RhZW1vbl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnBvbGwpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBtYXNrOworCisJcG9sbF93YWl0KGZpbGUsICZjYWNoZS0+ZGFlbW9uX3BvbGx3cSwgcG9sbCk7CisJbWFzayA9IDA7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19TVEFURV9DSEFOR0VELCAmY2FjaGUtPmZsYWdzKSkKKwkJbWFzayB8PSBQT0xMSU47CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19DVUxMSU5HLCAmY2FjaGUtPmZsYWdzKSkKKwkJbWFzayB8PSBQT0xMT1VUOworCisJcmV0dXJuIG1hc2s7Cit9CisKKy8qCisgKiBnaXZlIGEgcmFuZ2UgZXJyb3IgZm9yIGNhY2hlIHNwYWNlIGNvbnN0cmFpbnRzCisgKiAtIGNhbiBiZSB0YWlsLWNhbGxlZAorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJIGNoYXIgKmFyZ3MpCit7CisJa2Vycm9yKCJGcmVlIHNwYWNlIGxpbWl0cyBtdXN0IGJlIGluIHJhbmdlIgorCSAgICAgICAiIDAlJTw9c3RvcDxjdWxsPHJ1bjwxMDAlJSIpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgZmlsZXMgYXQgd2hpY2ggdG8gc3RvcCBjdWxsaW5nCisgKiAtIGNvbW1hbmQ6ICJmcnVuIDxOPiUiCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fZnJ1bihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmcnVuOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJZnJ1biA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAxMCk7CisJaWYgKGFyZ3NbMF0gIT0gJyUnIHx8IGFyZ3NbMV0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZnJ1biA8PSBjYWNoZS0+ZmN1bGxfcGVyY2VudCB8fCBmcnVuID49IDEwMCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mcnVuX3BlcmNlbnQgPSBmcnVuOworCXJldHVybiAwOworfQorCisvKgorICogc2V0IHRoZSBwZXJjZW50YWdlIG9mIGZpbGVzIGF0IHdoaWNoIHRvIHN0YXJ0IGN1bGxpbmcKKyAqIC0gY29tbWFuZDogImZjdWxsIDxOPiUiCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fZmN1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXVuc2lnbmVkIGxvbmcgZmN1bGw7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKCEqYXJncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmY3VsbCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAxMCk7CisJaWYgKGFyZ3NbMF0gIT0gJyUnIHx8IGFyZ3NbMV0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmN1bGwgPD0gY2FjaGUtPmZzdG9wX3BlcmNlbnQgfHwgZmN1bGwgPj0gY2FjaGUtPmZydW5fcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mY3VsbF9wZXJjZW50ID0gZmN1bGw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgZmlsZXMgYXQgd2hpY2ggdG8gc3RvcCBhbGxvY2F0aW5nCisgKiAtIGNvbW1hbmQ6ICJmc3RvcCA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIGZzdG9wOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJZnN0b3AgPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZzdG9wIDwgMCB8fCBmc3RvcCA+PSBjYWNoZS0+ZmN1bGxfcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mc3RvcF9wZXJjZW50ID0gZnN0b3A7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYmxvY2tzIGF0IHdoaWNoIHRvIHN0b3AgY3VsbGluZworICogLSBjb21tYW5kOiAiYnJ1biA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JydW4oc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXVuc2lnbmVkIGxvbmcgYnJ1bjsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJydW4gPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJydW4gPD0gY2FjaGUtPmJjdWxsX3BlcmNlbnQgfHwgYnJ1biA+PSAxMDApCisJCXJldHVybiBjYWNoZWZpbGVzX2RhZW1vbl9yYW5nZV9lcnJvcihjYWNoZSwgYXJncyk7CisKKwljYWNoZS0+YnJ1bl9wZXJjZW50ID0gYnJ1bjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNldCB0aGUgcGVyY2VudGFnZSBvZiBibG9ja3MgYXQgd2hpY2ggdG8gc3RhcnQgY3VsbGluZworICogLSBjb21tYW5kOiAiYmN1bGwgPE4+JSIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9iY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJdW5zaWduZWQgbG9uZyBiY3VsbDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJjdWxsID0gc2ltcGxlX3N0cnRvdWwoYXJncywgJmFyZ3MsIDEwKTsKKwlpZiAoYXJnc1swXSAhPSAnJScgfHwgYXJnc1sxXSAhPSAnXDAnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChiY3VsbCA8PSBjYWNoZS0+YnN0b3BfcGVyY2VudCB8fCBiY3VsbCA+PSBjYWNoZS0+YnJ1bl9wZXJjZW50KQorCQlyZXR1cm4gY2FjaGVmaWxlc19kYWVtb25fcmFuZ2VfZXJyb3IoY2FjaGUsIGFyZ3MpOworCisJY2FjaGUtPmJjdWxsX3BlcmNlbnQgPSBiY3VsbDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNldCB0aGUgcGVyY2VudGFnZSBvZiBibG9ja3MgYXQgd2hpY2ggdG8gc3RvcCBhbGxvY2F0aW5nCisgKiAtIGNvbW1hbmQ6ICJic3RvcCA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIGJzdG9wOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJYnN0b3AgPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJzdG9wIDwgMCB8fCBic3RvcCA+PSBjYWNoZS0+YmN1bGxfcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5ic3RvcF9wZXJjZW50ID0gYnN0b3A7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIGNhY2hlIGRpcmVjdG9yeQorICogLSBjb21tYW5kOiAiZGlyIDxuYW1lPiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCWNoYXIgKmRpcjsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKSB7CisJCWtlcnJvcigiRW1wdHkgZGlyZWN0b3J5IHNwZWNpZmllZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY2FjaGUtPnJvb3RkaXJuYW1lKSB7CisJCWtlcnJvcigiU2Vjb25kIGNhY2hlIGRpcmVjdG9yeSBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJZGlyID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+cm9vdGRpcm5hbWUgPSBkaXI7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIGNhY2hlIHNlY3VyaXR5IGNvbnRleHQKKyAqIC0gY29tbWFuZDogInNlY2N0eCA8Y3R4PiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9zZWNjdHgoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCWNoYXIgKnNlY2N0eDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKSB7CisJCWtlcnJvcigiRW1wdHkgc2VjdXJpdHkgY29udGV4dCBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNhY2hlLT5zZWNjdHgpIHsKKwkJa2Vycm9yKCJTZWNvbmQgc2VjdXJpdHkgY29udGV4dCBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2VjY3R4ID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlY2N0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+c2VjY3R4ID0gc2VjY3R4OworCXJldHVybiAwOworfQorCisvKgorICogc2V0IHRoZSBjYWNoZSB0YWcKKyAqIC0gY29tbWFuZDogInRhZyA8bmFtZT4iCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fdGFnKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwljaGFyICp0YWc7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKCEqYXJncykgeworCQlrZXJyb3IoIkVtcHR5IHRhZyBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNhY2hlLT50YWcpCisJCXJldHVybiAtRUVYSVNUOworCisJdGFnID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+dGFnID0gdGFnOworCXJldHVybiAwOworfQorCisvKgorICogcmVxdWVzdCBhIG5vZGUgaW4gdGhlIGNhY2hlIGJlIGN1bGxlZCBmcm9tIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgKiAtIGNvbW1hbmQ6ICJjdWxsIDxuYW1lPiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJaW50IHJldDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoc3RyY2hyKGFyZ3MsICcvJykpCisJCWdvdG8gaW52YWw7CisKKwlpZiAoIXRlc3RfYml0KENBQ0hFRklMRVNfUkVBRFksICZjYWNoZS0+ZmxhZ3MpKSB7CisJCWtlcnJvcigiY3VsbCBhcHBsaWVkIHRvIHVucmVhZHkgY2FjaGUiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKHRlc3RfYml0KENBQ0hFRklMRVNfREVBRCwgJmNhY2hlLT5mbGFncykpIHsKKwkJa2Vycm9yKCJjdWxsIGFwcGxpZWQgdG8gZGVhZCBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBleHRyYWN0IHRoZSBkaXJlY3RvcnkgZGVudHJ5IGZyb20gdGhlIGN3ZCAqLworCWZzID0gY3VycmVudC0+ZnM7CisJcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJZGlyID0gZGdldChmcy0+cHdkLmRlbnRyeSk7CisJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKKworCWlmICghU19JU0RJUihkaXItPmRfaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gbm90ZGlyOworCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBjYWNoZWZpbGVzX2N1bGwoY2FjaGUsIGRpciwgYXJncyk7CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKworCWRwdXQoZGlyKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub3RkaXI6CisJZHB1dChkaXIpOworCWtlcnJvcigiY3VsbCBjb21tYW5kIHJlcXVpcmVzIGRpcmZkIHRvIGJlIGEgZGlyZWN0b3J5Iik7CisJcmV0dXJuIC1FTk9URElSOworCitpbnZhbDoKKwlrZXJyb3IoImN1bGwgY29tbWFuZCByZXF1aXJlcyBkaXJmZCBhbmQgZmlsZW5hbWUiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHNldCBkZWJ1Z2dpbmcgbW9kZQorICogLSBjb21tYW5kOiAiZGVidWcgPG1hc2s+IgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2RlYnVnKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJbWFzayA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAwKTsKKwlpZiAoYXJnc1swXSAhPSAnXDAnKQorCQlnb3RvIGludmFsOworCisJY2FjaGVmaWxlc19kZWJ1ZyA9IG1hc2s7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK2ludmFsOgorCWtlcnJvcigiZGVidWcgY29tbWFuZCByZXF1aXJlcyBtYXNrIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBmaW5kIG91dCB3aGV0aGVyIGFuIG9iamVjdCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBpbiB1c2Ugb3Igbm90CisgKiAtIGNvbW1hbmQ6ICJpbnVzZSA8bmFtZT4iCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25faW51c2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOworCXN0cnVjdCBkZW50cnkgKmRpcjsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJLy9fZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKHN0cmNocihhcmdzLCAnLycpKQorCQlnb3RvIGludmFsOworCisJaWYgKCF0ZXN0X2JpdChDQUNIRUZJTEVTX1JFQURZLCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoImludXNlIGFwcGxpZWQgdG8gdW5yZWFkeSBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoImludXNlIGFwcGxpZWQgdG8gZGVhZCBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBleHRyYWN0IHRoZSBkaXJlY3RvcnkgZGVudHJ5IGZyb20gdGhlIGN3ZCAqLworCWZzID0gY3VycmVudC0+ZnM7CisJcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJZGlyID0gZGdldChmcy0+cHdkLmRlbnRyeSk7CisJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKKworCWlmICghU19JU0RJUihkaXItPmRfaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gbm90ZGlyOworCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBjYWNoZWZpbGVzX2NoZWNrX2luX3VzZShjYWNoZSwgZGlyLCBhcmdzKTsKKwljYWNoZWZpbGVzX2VuZF9zZWN1cmUoY2FjaGUsIHNhdmVkX2NyZWQpOworCisJZHB1dChkaXIpOworCS8vX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm90ZGlyOgorCWRwdXQoZGlyKTsKKwlrZXJyb3IoImludXNlIGNvbW1hbmQgcmVxdWlyZXMgZGlyZmQgdG8gYmUgYSBkaXJlY3RvcnkiKTsKKwlyZXR1cm4gLUVOT1RESVI7CisKK2ludmFsOgorCWtlcnJvcigiaW51c2UgY29tbWFuZCByZXF1aXJlcyBkaXJmZCBhbmQgZmlsZW5hbWUiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHNlZSBpZiB3ZSBoYXZlIHNwYWNlIGZvciBhIG51bWJlciBvZiBwYWdlcyBhbmQvb3IgYSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlCisgKiBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19oYXNfc3BhY2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJIHVuc2lnbmVkIGZuciwgdW5zaWduZWQgYm5yKQoreworCXN0cnVjdCBrc3RhdGZzIHN0YXRzOworCWludCByZXQ7CisKKwkvL19lbnRlcigieyVsbHUsJWxsdSwlbGx1LCVsbHUsJWxsdSwlbGx1fSwldSwldSIsCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmZydW4sCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmZjdWxsLAorCS8vICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mc3RvcCwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+YnJ1biwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+YmN1bGwsCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJzdG9wLAorCS8vICAgICAgIGZuciwgYm5yKTsKKworCS8qIGZpbmQgb3V0IGhvdyBtYW55IHBhZ2VzIG9mIGJsb2NrZGV2IGFyZSBhdmFpbGFibGUgKi8KKwltZW1zZXQoJnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTsKKworCXJldCA9IHZmc19zdGF0ZnMoY2FjaGUtPm1udC0+bW50X3Jvb3QsICZzdGF0cyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUlPKQorCQkJY2FjaGVmaWxlc19pb19lcnJvcihjYWNoZSwgInN0YXRmcyBmYWlsZWQiKTsKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJc3RhdHMuZl9iYXZhaWwgPj49IGNhY2hlLT5ic2hpZnQ7CisKKwkvL19kZWJ1ZygiYXZhaWwgJWxsdSwlbGx1IiwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0cy5mX2ZmcmVlLAorCS8vICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXRzLmZfYmF2YWlsKTsKKworCS8qIHNlZSBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlICovCisJaWYgKHN0YXRzLmZfZmZyZWUgPiBmbnIpCisJCXN0YXRzLmZfZmZyZWUgLT0gZm5yOworCWVsc2UKKwkJc3RhdHMuZl9mZnJlZSA9IDA7CisKKwlpZiAoc3RhdHMuZl9iYXZhaWwgPiBibnIpCisJCXN0YXRzLmZfYmF2YWlsIC09IGJucjsKKwllbHNlCisJCXN0YXRzLmZfYmF2YWlsID0gMDsKKworCXJldCA9IC1FTk9CVUZTOworCWlmIChzdGF0cy5mX2ZmcmVlIDwgY2FjaGUtPmZzdG9wIHx8CisJICAgIHN0YXRzLmZfYmF2YWlsIDwgY2FjaGUtPmJzdG9wKQorCQlnb3RvIGJlZ2luX2N1bGw7CisKKwlyZXQgPSAwOworCWlmIChzdGF0cy5mX2ZmcmVlIDwgY2FjaGUtPmZjdWxsIHx8CisJICAgIHN0YXRzLmZfYmF2YWlsIDwgY2FjaGUtPmJjdWxsKQorCQlnb3RvIGJlZ2luX2N1bGw7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19DVUxMSU5HLCAmY2FjaGUtPmZsYWdzKSAmJgorCSAgICBzdGF0cy5mX2ZmcmVlID49IGNhY2hlLT5mcnVuICYmCisJICAgIHN0YXRzLmZfYmF2YWlsID49IGNhY2hlLT5icnVuICYmCisJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpCisJICAgICkgeworCQlfZGVidWcoImNlYXNlIGN1bGxpbmciKTsKKwkJY2FjaGVmaWxlc19zdGF0ZV9jaGFuZ2VkKGNhY2hlKTsKKwl9CisKKwkvL19sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitiZWdpbl9jdWxsOgorCWlmICghdGVzdF9hbmRfc2V0X2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpKSB7CisJCV9kZWJ1ZygiIyMjIENVTEwgQ0FDSEUgIyMjIik7CisJCWNhY2hlZmlsZXNfc3RhdGVfY2hhbmdlZChjYWNoZSk7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMgYi9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTYyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKiBGUy1DYWNoZSBpbnRlcmZhY2UgdG8gQ2FjaGVGaWxlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNkZWZpbmUgbGlzdF90b19wYWdlKGhlYWQpIChsaXN0X2VudHJ5KChoZWFkKS0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSkpCisKK3N0cnVjdCBjYWNoZWZpbGVzX2xvb2t1cF9kYXRhIHsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0cgkqYXV4ZGF0YTsJLyogYXV4aWxpYXJ5IGRhdGEgKi8KKwljaGFyCQkJKmtleTsJCS8qIGtleSBwYXRoICovCit9OworCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCk7CisKKy8qCisgKiBhbGxvY2F0ZSBhbiBvYmplY3QgcmVjb3JkIGZvciBhIGNvb2tpZSBsb29rdXAgYW5kIHByZXBhcmUgdGhlIGxvb2t1cCBkYXRhCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKmNhY2hlZmlsZXNfYWxsb2Nfb2JqZWN0KAorCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpfY2FjaGUsCisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfbG9va3VwX2RhdGEgKmxvb2t1cF9kYXRhOworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YTsKKwl1bnNpZ25lZCBrZXlsZW4sIGF1eGxlbjsKKwl2b2lkICpidWZmZXI7CisJY2hhciAqa2V5OworCisJY2FjaGUgPSBjb250YWluZXJfb2YoX2NhY2hlLCBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJX2VudGVyKCJ7JXN9LCVwLCIsIGNhY2hlLT5jYWNoZS5pZGVudGlmaWVyLCBjb29raWUpOworCisJbG9va3VwX2RhdGEgPSBrbWFsbG9jKHNpemVvZigqbG9va3VwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvb2t1cF9kYXRhKQorCQlnb3RvIG5vbWVtX2xvb2t1cF9kYXRhOworCisJLyogY3JlYXRlIGEgbmV3IG9iamVjdCByZWNvcmQgYW5kIGEgdGVtcG9yYXJ5IGxlYWYgaW1hZ2UgKi8KKwlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmplY3QpCisJCWdvdG8gbm9tZW1fb2JqZWN0OworCisJQVNTRVJUQ01QKG9iamVjdC0+YmFja2VyLCA9PSwgTlVMTCk7CisKKwlCVUdfT04odGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpOworCWF0b21pY19zZXQoJm9iamVjdC0+dXNhZ2UsIDEpOworCisJZnNjYWNoZV9vYmplY3RfaW5pdCgmb2JqZWN0LT5mc2NhY2hlLCBjb29raWUsICZjYWNoZS0+Y2FjaGUpOworCisJb2JqZWN0LT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwkvKiBnZXQgaG9sZCBvZiB0aGUgcmF3IGtleQorCSAqIC0gc3RpY2sgdGhlIGxlbmd0aCBvbiB0aGUgZnJvbnQgYW5kIGxlYXZlIHNwYWNlIG9uIHRoZSBiYWNrIGZvciB0aGUKKwkgKiAgIGVuY29kZXIKKwkgKi8KKwlidWZmZXIgPSBrbWFsbG9jKCgyICsgNTEyKSArIDMsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlnb3RvIG5vbWVtX2J1ZmZlcjsKKworCWtleWxlbiA9IGNvb2tpZS0+ZGVmLT5nZXRfa2V5KGNvb2tpZS0+bmV0ZnNfZGF0YSwgYnVmZmVyICsgMiwgNTEyKTsKKwlBU1NFUlRDTVAoa2V5bGVuLCA8LCA1MTIpOworCisJKih1aW50MTZfdCAqKWJ1ZmZlciA9IGtleWxlbjsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDJdID0gMDsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDNdID0gMDsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDRdID0gMDsKKworCS8qIHR1cm4gdGhlIHJhdyBrZXkgaW50byBzb21ldGhpbmcgdGhhdCBjYW4gd29yayB3aXRoIGFzIGEgZmlsZW5hbWUgKi8KKwlrZXkgPSBjYWNoZWZpbGVzX2Nvb2tfa2V5KGJ1ZmZlciwga2V5bGVuICsgMiwgb2JqZWN0LT50eXBlKTsKKwlpZiAoIWtleSkKKwkJZ290byBub21lbV9rZXk7CisKKwkvKiBnZXQgaG9sZCBvZiB0aGUgYXV4aWxpYXJ5IGRhdGEgYW5kIHByZXBlbmQgdGhlIG9iamVjdCB0eXBlICovCisJYXV4ZGF0YSA9IGJ1ZmZlcjsKKwlhdXhsZW4gPSAwOworCWlmIChjb29raWUtPmRlZi0+Z2V0X2F1eCkgeworCQlhdXhsZW4gPSBjb29raWUtPmRlZi0+Z2V0X2F1eChjb29raWUtPm5ldGZzX2RhdGEsCisJCQkJCSAgICAgIGF1eGRhdGEtPmRhdGEsIDUxMSk7CisJCUFTU0VSVENNUChhdXhsZW4sIDwsIDUxMSk7CisJfQorCisJYXV4ZGF0YS0+bGVuID0gYXV4bGVuICsgMTsKKwlhdXhkYXRhLT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwlsb29rdXBfZGF0YS0+YXV4ZGF0YSA9IGF1eGRhdGE7CisJbG9va3VwX2RhdGEtPmtleSA9IGtleTsKKwlvYmplY3QtPmxvb2t1cF9kYXRhID0gbG9va3VwX2RhdGE7CisKKwlfbGVhdmUoIiA9ICVwIFslcF0iLCAmb2JqZWN0LT5mc2NhY2hlLCBsb29rdXBfZGF0YSk7CisJcmV0dXJuICZvYmplY3QtPmZzY2FjaGU7CisKK25vbWVtX2tleToKKwlrZnJlZShidWZmZXIpOworbm9tZW1fYnVmZmVyOgorCUJVR19PTih0ZXN0X2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKSk7CisJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgb2JqZWN0KTsKKwlmc2NhY2hlX29iamVjdF9kZXN0cm95ZWQoJmNhY2hlLT5jYWNoZSk7Citub21lbV9vYmplY3Q6CisJa2ZyZWUobG9va3VwX2RhdGEpOworbm9tZW1fbG9va3VwX2RhdGE6CisJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKKy8qCisgKiBhdHRlbXB0IHRvIGxvb2sgdXAgdGhlIG5vbWluYXRlZCBub2RlIGluIHRoaXMgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19sb29rdXBfZGF0YSAqbG9va3VwX2RhdGE7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCWNvbnN0IHN0cnVjdCBjcmVkICpzYXZlZF9jcmVkOworCWludCByZXQ7CisKKwlfZW50ZXIoIntPQkoleH0iLCBfb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LT5jYWNoZSwgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKwlwYXJlbnQgPSBjb250YWluZXJfb2YoX29iamVjdC0+cGFyZW50LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwlsb29rdXBfZGF0YSA9IG9iamVjdC0+bG9va3VwX2RhdGE7CisKKwlBU1NFUlRDTVAobG9va3VwX2RhdGEsICE9LCBOVUxMKTsKKworCS8qIGxvb2sgdXAgdGhlIGtleSwgY3JlYXRpbmcgYW55IG1pc3NpbmcgYml0cyAqLworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJcmV0ID0gY2FjaGVmaWxlc193YWxrX3RvX29iamVjdChwYXJlbnQsIG9iamVjdCwKKwkJCQkJbG9va3VwX2RhdGEtPmtleSwKKwkJCQkJbG9va3VwX2RhdGEtPmF1eGRhdGEpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisKKwkvKiBwb2xpc2ggb2ZmIGJ5IHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMgb2Ygbm9uLWluZGV4IGZpbGVzICovCisJaWYgKHJldCA9PSAwICYmCisJICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPmRlZi0+dHlwZSAhPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKQorCQljYWNoZWZpbGVzX2F0dHJfY2hhbmdlZCgmb2JqZWN0LT5mc2NhY2hlKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhY2hlRmlsZXM6IExvb2t1cCBmYWlsZWQgZXJyb3IgJWRcbiIsCisJCSAgICAgICByZXQpOworCQlmc2NhY2hlX29iamVjdF9sb29rdXBfZXJyb3IoJm9iamVjdC0+ZnNjYWNoZSk7CisJfQorCisJX2xlYXZlKCIgWyVkXSIsIHJldCk7Cit9CisKKy8qCisgKiBpbmRpY2F0aW9uIG9mIGxvb2t1cCBjb21wbGV0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfbG9va3VwX2NvbXBsZXRlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJXB9Iiwgb2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkLCBvYmplY3QtPmxvb2t1cF9kYXRhKTsKKworCWlmIChvYmplY3QtPmxvb2t1cF9kYXRhKSB7CisJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmtleSk7CisJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmF1eGRhdGEpOworCQlrZnJlZShvYmplY3QtPmxvb2t1cF9kYXRhKTsKKwkJb2JqZWN0LT5sb29rdXBfZGF0YSA9IE5VTEw7CisJfQorfQorCisvKgorICogaW5jcmVtZW50IHRoZSB1c2FnZSBjb3VudCBvbiBhbiBpbm9kZSBvYmplY3QgKG1heSBmYWlsIGlmIHVubW91bnRpbmcpCisgKi8KK3N0YXRpYworc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpjYWNoZWZpbGVzX2dyYWJfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCA9CisJCWNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJWR9IiwgX29iamVjdC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvYmplY3QtPnVzYWdlKSk7CisKKyNpZmRlZiBDQUNIRUZJTEVTX0RFQlVHX1NMQUIKKwlBU1NFUlQoKGF0b21pY19yZWFkKCZvYmplY3QtPnVzYWdlKSAmIDB4ZmZmZjAwMDApICE9IDB4NmI2YjAwMDApOworI2VuZGlmCisKKwlhdG9taWNfaW5jKCZvYmplY3QtPnVzYWdlKTsKKwlyZXR1cm4gJm9iamVjdC0+ZnNjYWNoZTsKK30KKworLyoKKyAqIHVwZGF0ZSB0aGUgYXV4aWxsaWFyeSBkYXRhIGZvciBhbiBvYmplY3Qgb2JqZWN0IG9uIGRpc2sKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWU7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJdW5zaWduZWQgYXV4bGVuOworCisJX2VudGVyKCJ7T0JKJXh9IiwgX29iamVjdC0+ZGVidWdfaWQpOworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKF9vYmplY3QsIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLCBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwKKwkJCSAgICAgY2FjaGUpOworCWNvb2tpZSA9IG9iamVjdC0+ZnNjYWNoZS5jb29raWU7CisKKwlpZiAoIWNvb2tpZS0+ZGVmLT5nZXRfYXV4KSB7CisJCV9sZWF2ZSgiIFtubyBhdXhdIik7CisJCXJldHVybjsKKwl9CisKKwlhdXhkYXRhID0ga21hbGxvYygyICsgNTEyICsgMywgR0ZQX0tFUk5FTCk7CisJaWYgKCFhdXhkYXRhKSB7CisJCV9sZWF2ZSgiIFtub21lbV0iKTsKKwkJcmV0dXJuOworCX0KKworCWF1eGxlbiA9IGNvb2tpZS0+ZGVmLT5nZXRfYXV4KGNvb2tpZS0+bmV0ZnNfZGF0YSwgYXV4ZGF0YS0+ZGF0YSwgNTExKTsKKwlBU1NFUlRDTVAoYXV4bGVuLCA8LCA1MTEpOworCisJYXV4ZGF0YS0+bGVuID0gYXV4bGVuICsgMTsKKwlhdXhkYXRhLT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwljYWNoZWZpbGVzX2JlZ2luX3NlY3VyZShjYWNoZSwgJnNhdmVkX2NyZWQpOworCWNhY2hlZmlsZXNfdXBkYXRlX29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisJa2ZyZWUoYXV4ZGF0YSk7CisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGRpc2NhcmQgdGhlIHJlc291cmNlcyBwaW5uZWQgYnkgYW4gb2JqZWN0IGFuZCBlZmZlY3QgcmV0aXJlbWVudCBpZgorICogcmVxdWVzdGVkCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfZHJvcF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpfb2JqZWN0KQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKworCUFTU0VSVChfb2JqZWN0KTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJWR9IiwKKwkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb2JqZWN0LT51c2FnZSkpOworCisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisjaWZkZWYgQ0FDSEVGSUxFU19ERUJVR19TTEFCCisJQVNTRVJUKChhdG9taWNfcmVhZCgmb2JqZWN0LT51c2FnZSkgJiAweGZmZmYwMDAwKSAhPSAweDZiNmIwMDAwKTsKKyNlbmRpZgorCisJLyogZGVsZXRlIHJldGlyZWQgb2JqZWN0cyAqLworCWlmIChvYmplY3QtPmZzY2FjaGUuc3RhdGUgPT0gRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HICYmCisJICAgIF9vYmplY3QgIT0gY2FjaGUtPmNhY2hlLmZzZGVmCisJICAgICkgeworCQlfZGVidWcoIi0gcmV0aXJlIG9iamVjdCBPQkoleCIsIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJCWNhY2hlZmlsZXNfZGVsZXRlX29iamVjdChjYWNoZSwgb2JqZWN0KTsKKwkJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKwl9CisKKwkvKiBjbG9zZSB0aGUgZmlsZXN5c3RlbSBzdHVmZiBhdHRhY2hlZCB0byB0aGUgb2JqZWN0ICovCisJaWYgKG9iamVjdC0+YmFja2VyICE9IG9iamVjdC0+ZGVudHJ5KQorCQlkcHV0KG9iamVjdC0+YmFja2VyKTsKKwlvYmplY3QtPmJhY2tlciA9IE5VTEw7CisKKwkvKiBub3RlIHRoYXQgdGhlIG9iamVjdCBpcyBub3cgaW5hY3RpdmUgKi8KKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpIHsKKwkJd3JpdGVfbG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLAorCQkJCQkmb2JqZWN0LT5mbGFncykpCisJCQlCVUcoKTsKKwkJcmJfZXJhc2UoJm9iamVjdC0+YWN0aXZlX25vZGUsICZjYWNoZS0+YWN0aXZlX25vZGVzKTsKKwkJd2FrZV91cF9iaXQoJm9iamVjdC0+ZmxhZ3MsIENBQ0hFRklMRVNfT0JKRUNUX0FDVElWRSk7CisJCXdyaXRlX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwl9CisKKwlkcHV0KG9iamVjdC0+ZGVudHJ5KTsKKwlvYmplY3QtPmRlbnRyeSA9IE5VTEw7CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogZGlzcG9zZSBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19wdXRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGU7CisKKwlBU1NFUlQoX29iamVjdCk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKworCV9lbnRlcigie09CSiV4LCVkfSIsCisJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCwgYXRvbWljX3JlYWQoJm9iamVjdC0+dXNhZ2UpKTsKKworI2lmZGVmIENBQ0hFRklMRVNfREVCVUdfU0xBQgorCUFTU0VSVCgoYXRvbWljX3JlYWQoJm9iamVjdC0+dXNhZ2UpICYgMHhmZmZmMDAwMCkgIT0gMHg2YjZiMDAwMCk7CisjZW5kaWYKKworCUFTU0VSVElGQ01QKG9iamVjdC0+ZnNjYWNoZS5wYXJlbnQsCisJCSAgICBvYmplY3QtPmZzY2FjaGUucGFyZW50LT5uX2NoaWxkcmVuLCA+LCAwKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvYmplY3QtPnVzYWdlKSkgeworCQlfZGVidWcoIi0ga2lsbCBvYmplY3QgT0JKJXgiLCBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQpOworCisJCUFTU0VSVCghdGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpOworCQlBU1NFUlRDTVAob2JqZWN0LT5mc2NhY2hlLnBhcmVudCwgPT0sIE5VTEwpOworCQlBU1NFUlRDTVAob2JqZWN0LT5iYWNrZXIsID09LCBOVUxMKTsKKwkJQVNTRVJUQ01QKG9iamVjdC0+ZGVudHJ5LCA9PSwgTlVMTCk7CisJCUFTU0VSVENNUChvYmplY3QtPmZzY2FjaGUubl9vcHMsID09LCAwKTsKKwkJQVNTRVJUQ01QKG9iamVjdC0+ZnNjYWNoZS5uX2NoaWxkcmVuLCA9PSwgMCk7CisKKwkJaWYgKG9iamVjdC0+bG9va3VwX2RhdGEpIHsKKwkJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmtleSk7CisJCQlrZnJlZShvYmplY3QtPmxvb2t1cF9kYXRhLT5hdXhkYXRhKTsKKwkJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEpOworCQkJb2JqZWN0LT5sb29rdXBfZGF0YSA9IE5VTEw7CisJCX0KKworCQljYWNoZSA9IG9iamVjdC0+ZnNjYWNoZS5jYWNoZTsKKwkJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgb2JqZWN0KTsKKwkJZnNjYWNoZV9vYmplY3RfZGVzdHJveWVkKGNhY2hlKTsKKwl9CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogc3luYyBhIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfc3luY19jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqX2NhY2hlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlcCIsIF9jYWNoZSk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihfY2FjaGUsIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwkvKiBtYWtlIHN1cmUgYWxsIHBhZ2VzIHBpbm5lZCBieSBvcGVyYXRpb25zIG9uIGJlaGFsZiBvZiB0aGUgbmV0ZnMgYXJlCisJICogd3JpdHRlbiB0byBkaXNjICovCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBmc3luY19zdXBlcihjYWNoZS0+bW50LT5tbnRfc2IpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsCisJCQkJICAgICJBdHRlbXB0IHRvIHN5bmMgYmFja2luZyBmcyBzdXBlcmJsb2NrIgorCQkJCSAgICAiIHJldHVybmVkIGVycm9yICVkIiwKKwkJCQkgICAgcmV0KTsKK30KKworLyoKKyAqIG5vdGlmaWNhdGlvbiB0aGUgYXR0cmlidXRlcyBvbiBhbiBvYmplY3QgaGF2ZSBjaGFuZ2VkCisgKiAtIGNhbGxlZCB3aXRoIHJlYWRzL3dyaXRlcyBleGNsdWRlZCBieSBGUy1DYWNoZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJc3RydWN0IGlhdHRyIG5ld2F0dHJzOworCXVpbnQ2NF90IG5pX3NpemU7CisJbG9mZl90IG9pX3NpemU7CisJaW50IHJldDsKKworCV9vYmplY3QtPmNvb2tpZS0+ZGVmLT5nZXRfYXR0cihfb2JqZWN0LT5jb29raWUtPm5ldGZzX2RhdGEsICZuaV9zaXplKTsKKworCV9lbnRlcigie09CSiV4fSxbJWxsdV0iLAorCSAgICAgICBfb2JqZWN0LT5kZWJ1Z19pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgbmlfc2l6ZSk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihvYmplY3QtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlpZiAobmlfc2l6ZSA9PSBvYmplY3QtPmlfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW9iamVjdC0+YmFja2VyKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlBU1NFUlQoU19JU1JFRyhvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9tb2RlKSk7CisKKwlmc2NhY2hlX3NldF9zdG9yZV9saW1pdCgmb2JqZWN0LT5mc2NhY2hlLCBuaV9zaXplKTsKKworCW9pX3NpemUgPSBpX3NpemVfcmVhZChvYmplY3QtPmJhY2tlci0+ZF9pbm9kZSk7CisJaWYgKG9pX3NpemUgPT0gbmlfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwluZXdhdHRycy5pYV9zaXplID0gbmlfc2l6ZTsKKwluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfU0laRTsKKworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJbXV0ZXhfbG9jaygmb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IG5vdGlmeV9jaGFuZ2Uob2JqZWN0LT5iYWNrZXIsICZuZXdhdHRycyk7CisJbXV0ZXhfdW5sb2NrKCZvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKworCWlmIChyZXQgPT0gLUVJTykgeworCQlmc2NhY2hlX3NldF9zdG9yZV9saW1pdCgmb2JqZWN0LT5mc2NhY2hlLCAwKTsKKwkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmoob2JqZWN0LCAiU2l6ZSBzZXQgZmFpbGVkIik7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkaXNzb2NpYXRlIGEgY2FjaGUgZnJvbSBhbGwgdGhlIHBhZ2VzIGl0IHdhcyBiYWNraW5nCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfZGlzc29jaWF0ZV9wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJX2VudGVyKCIiKTsKK30KKworY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzIGNhY2hlZmlsZXNfY2FjaGVfb3BzID0geworCS5uYW1lCQkJPSAiY2FjaGVmaWxlcyIsCisJLmFsbG9jX29iamVjdAkJPSBjYWNoZWZpbGVzX2FsbG9jX29iamVjdCwKKwkubG9va3VwX29iamVjdAkJPSBjYWNoZWZpbGVzX2xvb2t1cF9vYmplY3QsCisJLmxvb2t1cF9jb21wbGV0ZQk9IGNhY2hlZmlsZXNfbG9va3VwX2NvbXBsZXRlLAorCS5ncmFiX29iamVjdAkJPSBjYWNoZWZpbGVzX2dyYWJfb2JqZWN0LAorCS51cGRhdGVfb2JqZWN0CQk9IGNhY2hlZmlsZXNfdXBkYXRlX29iamVjdCwKKwkuZHJvcF9vYmplY3QJCT0gY2FjaGVmaWxlc19kcm9wX29iamVjdCwKKwkucHV0X29iamVjdAkJPSBjYWNoZWZpbGVzX3B1dF9vYmplY3QsCisJLnN5bmNfY2FjaGUJCT0gY2FjaGVmaWxlc19zeW5jX2NhY2hlLAorCS5hdHRyX2NoYW5nZWQJCT0gY2FjaGVmaWxlc19hdHRyX2NoYW5nZWQsCisJLnJlYWRfb3JfYWxsb2NfcGFnZQk9IGNhY2hlZmlsZXNfcmVhZF9vcl9hbGxvY19wYWdlLAorCS5yZWFkX29yX2FsbG9jX3BhZ2VzCT0gY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2VzLAorCS5hbGxvY2F0ZV9wYWdlCQk9IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZSwKKwkuYWxsb2NhdGVfcGFnZXMJCT0gY2FjaGVmaWxlc19hbGxvY2F0ZV9wYWdlcywKKwkud3JpdGVfcGFnZQkJPSBjYWNoZWZpbGVzX3dyaXRlX3BhZ2UsCisJLnVuY2FjaGVfcGFnZQkJPSBjYWNoZWZpbGVzX3VuY2FjaGVfcGFnZSwKKwkuZGlzc29jaWF0ZV9wYWdlcwk9IGNhY2hlZmlsZXNfZGlzc29jaWF0ZV9wYWdlcywKK307CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2ludGVybmFsLmggYi9mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyMThlMQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaApAQCAtMCwwICsxLDM2MCBAQAorLyogR2VuZXJhbCBuZXRmcyBjYWNoZSBvbiBjYWNoZSBmaWxlcyBpbnRlcm5hbCBkZWZzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKworc3RydWN0IGNhY2hlZmlsZXNfY2FjaGU7CitzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3Q7CisKK2V4dGVybiB1bnNpZ25lZCBjYWNoZWZpbGVzX2RlYnVnOworI2RlZmluZSBDQUNIRUZJTEVTX0RFQlVHX0tFTlRFUgkxCisjZGVmaW5lIENBQ0hFRklMRVNfREVCVUdfS0xFQVZFCTIKKyNkZWZpbmUgQ0FDSEVGSUxFU19ERUJVR19LREVCVUcJNAorCisvKgorICogbm9kZSByZWNvcmRzCisgKi8KK3N0cnVjdCBjYWNoZWZpbGVzX29iamVjdCB7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0CQlmc2NhY2hlOwkvKiBmc2NhY2hlIGhhbmRsZSAqLworCXN0cnVjdCBjYWNoZWZpbGVzX2xvb2t1cF9kYXRhCSpsb29rdXBfZGF0YTsJLyogY2FjaGVkIGxvb2t1cCBkYXRhICovCisJc3RydWN0IGRlbnRyeQkJCSpkZW50cnk7CS8qIHRoZSBmaWxlL2RpciByZXByZXNlbnRpbmcgdGhpcyBvYmplY3QgKi8KKwlzdHJ1Y3QgZGVudHJ5CQkJKmJhY2tlcjsJLyogYmFja2luZyBmaWxlICovCisJbG9mZl90CQkJCWlfc2l6ZTsJCS8qIG9iamVjdCBzaXplICovCisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2RlZmluZSBDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUJMAkJLyogVCBpZiBtYXJrZWQgYWN0aXZlICovCisJYXRvbWljX3QJCQl1c2FnZTsJCS8qIG9iamVjdCB1c2FnZSBjb3VudCAqLworCXVpbnQ4X3QJCQkJdHlwZTsJCS8qIG9iamVjdCB0eXBlICovCisJdWludDhfdAkJCQluZXc7CQkvKiBUIGlmIG9iamVjdCBuZXcgKi8KKwlzcGlubG9ja190CQkJd29ya19sb2NrOworCXN0cnVjdCByYl9ub2RlCQkJYWN0aXZlX25vZGU7CS8qIGxpbmsgaW4gYWN0aXZlIHRyZWUgKGRlbnRyeSBpcyBrZXkpICovCit9OworCitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlZmlsZXNfb2JqZWN0X2phcjsKKworLyoKKyAqIENhY2hlIGZpbGVzIGNhY2hlIGRlZmluaXRpb24KKyAqLworc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgeworCXN0cnVjdCBmc2NhY2hlX2NhY2hlCQljYWNoZTsJCS8qIEZTLUNhY2hlIHJlY29yZCAqLworCXN0cnVjdCB2ZnNtb3VudAkJCSptbnQ7CQkvKiBtb3VudHBvaW50IGhvbGRpbmcgdGhlIGNhY2hlICovCisJc3RydWN0IGRlbnRyeQkJCSpncmF2ZXlhcmQ7CS8qIGRpcmVjdG9yeSBpbnRvIHdoaWNoIGRlYWQgb2JqZWN0cyBnbyAqLworCXN0cnVjdCBmaWxlCQkJKmNhY2hlZmlsZXNkOwkvKiBtYW5hZ2VyIGRhZW1vbiBoYW5kbGUgKi8KKwljb25zdCBzdHJ1Y3QgY3JlZAkJKmNhY2hlX2NyZWQ7CS8qIHNlY3VyaXR5IG92ZXJyaWRlIGZvciBhY2Nlc3NpbmcgY2FjaGUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlkYWVtb25fbXV0ZXg7CS8qIGNvbW1hbmQgc2VyaWFsaXNhdGlvbiBtdXRleCAqLworCXdhaXRfcXVldWVfaGVhZF90CQlkYWVtb25fcG9sbHdxOwkvKiBwb2xsIHdhaXRxdWV1ZSBmb3IgZGFlbW9uICovCisJc3RydWN0IHJiX3Jvb3QJCQlhY3RpdmVfbm9kZXM7CS8qIGFjdGl2ZSBub2RlcyAoY2FuJ3QgYmUgY3VsbGVkKSAqLworCXJ3bG9ja190CQkJYWN0aXZlX2xvY2s7CS8qIGxvY2sgZm9yIGFjdGl2ZV9ub2RlcyAqLworCWF0b21pY190CQkJZ3JhdmVjb3VudGVyOwkvKiBncmF2ZXlhcmQgdW5pcXVpZmllciAqLworCXVuc2lnbmVkCQkJZnJ1bl9wZXJjZW50OwkvKiB3aGVuIHRvIHN0b3AgY3VsbGluZyAoJSBmaWxlcykgKi8KKwl1bnNpZ25lZAkJCWZjdWxsX3BlcmNlbnQ7CS8qIHdoZW4gdG8gc3RhcnQgY3VsbGluZyAoJSBmaWxlcykgKi8KKwl1bnNpZ25lZAkJCWZzdG9wX3BlcmNlbnQ7CS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICglIGZpbGVzKSAqLworCXVuc2lnbmVkCQkJYnJ1bl9wZXJjZW50OwkvKiB3aGVuIHRvIHN0b3AgY3VsbGluZyAoJSBibG9ja3MpICovCisJdW5zaWduZWQJCQliY3VsbF9wZXJjZW50OwkvKiB3aGVuIHRvIHN0YXJ0IGN1bGxpbmcgKCUgYmxvY2tzKSAqLworCXVuc2lnbmVkCQkJYnN0b3BfcGVyY2VudDsJLyogd2hlbiB0byBzdG9wIGFsbG9jYXRpbmcgKCUgYmxvY2tzKSAqLworCXVuc2lnbmVkCQkJYnNpemU7CQkvKiBjYWNoZSdzIGJsb2NrIHNpemUgKi8KKwl1bnNpZ25lZAkJCWJzaGlmdDsJCS8qIG1pbihpbG9nMihQQUdFX1NJWkUgLyBic2l6ZSksIDApICovCisJdWludDY0X3QJCQlmcnVuOwkJLyogd2hlbiB0byBzdG9wIGN1bGxpbmcgKi8KKwl1aW50NjRfdAkJCWZjdWxsOwkJLyogd2hlbiB0byBzdGFydCBjdWxsaW5nICovCisJdWludDY0X3QJCQlmc3RvcDsJCS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICovCisJc2VjdG9yX3QJCQlicnVuOwkJLyogd2hlbiB0byBzdG9wIGN1bGxpbmcgKi8KKwlzZWN0b3JfdAkJCWJjdWxsOwkJLyogd2hlbiB0byBzdGFydCBjdWxsaW5nICovCisJc2VjdG9yX3QJCQlic3RvcDsJCS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICovCisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2RlZmluZSBDQUNIRUZJTEVTX1JFQURZCQkwCS8qIFQgaWYgY2FjaGUgcHJlcGFyZWQgKi8KKyNkZWZpbmUgQ0FDSEVGSUxFU19ERUFECQkJMQkvKiBUIGlmIGNhY2hlIGRlYWQgKi8KKyNkZWZpbmUgQ0FDSEVGSUxFU19DVUxMSU5HCQkyCS8qIFQgaWYgY3VsbCBlbmdhZ2VkICovCisjZGVmaW5lIENBQ0hFRklMRVNfU1RBVEVfQ0hBTkdFRAkzCS8qIFQgaWYgc3RhdGUgY2hhbmdlZCAocG9sbCB0cmlnZ2VyKSAqLworCWNoYXIJCQkJKnJvb3RkaXJuYW1lOwkvKiBuYW1lIG9mIGNhY2hlIHJvb3QgZGlyZWN0b3J5ICovCisJY2hhcgkJCQkqc2VjY3R4OwkvKiBMU00gc2VjdXJpdHkgY29udGV4dCAqLworCWNoYXIJCQkJKnRhZzsJCS8qIGNhY2hlIGJpbmRpbmcgdGFnICovCit9OworCisvKgorICogYmFja2luZyBmaWxlIHJlYWQgdHJhY2tpbmcKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQgeworCXdhaXRfcXVldWVfdAkJCW1vbml0b3I7CS8qIGxpbmsgaW50byBtb25pdG9yZWQgd2FpdHF1ZXVlICovCisJc3RydWN0IHBhZ2UJCQkqYmFja19wYWdlOwkvKiBiYWNraW5nIGZpbGUgcGFnZSB3ZSdyZSB3YWl0aW5nIGZvciAqLworCXN0cnVjdCBwYWdlCQkJKm5ldGZzX3BhZ2U7CS8qIG5ldGZzIHBhZ2Ugd2UncmUgZ29pbmcgdG8gZmlsbCAqLworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbAkqb3A7CQkvKiByZXRyaWV2YWwgb3AgY292ZXJpbmcgdGhpcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJCW9wX2xpbms7CS8qIGxpbmsgaW4gb3AncyB0b2RvIGxpc3QgKi8KK307CisKKy8qCisgKiBiYWNraW5nIGZpbGUgd3JpdGUgdHJhY2tpbmcKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfb25lX3dyaXRlIHsKKwlzdHJ1Y3QgcGFnZQkJCSpuZXRmc19wYWdlOwkvKiBuZXRmcyBwYWdlIHRvIGNvcHkgKi8KKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QJKm9iamVjdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlvYmpfbGluazsJLyogbGluayBpbiBvYmplY3QncyBsaXN0cyAqLworCWZzY2FjaGVfcndfY29tcGxldGVfdAkJZW5kX2lvX2Z1bmM7CisJdm9pZAkJCQkqY29udGV4dDsKK307CisKKy8qCisgKiBhdXhpbGlhcnkgZGF0YSB4YXR0ciBidWZmZXIKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIgeworCXVpbnQxNl90CQkJbGVuOworCXVpbnQ4X3QJCQkJdHlwZTsKKwl1aW50OF90CQkJCWRhdGFbXTsKK307CisKKy8qCisgKiBub3RlIGNoYW5nZSBvZiBzdGF0ZSBmb3IgZGFlbW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZWZpbGVzX3N0YXRlX2NoYW5nZWQoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlKQoreworCXNldF9iaXQoQ0FDSEVGSUxFU19TVEFURV9DSEFOR0VELCAmY2FjaGUtPmZsYWdzKTsKKwl3YWtlX3VwX2FsbCgmY2FjaGUtPmRhZW1vbl9wb2xsd3EpOworfQorCisvKgorICogY2YtYmluZC5jCisgKi8KK2V4dGVybiBpbnQgY2FjaGVmaWxlc19kYWVtb25fYmluZChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpOworZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSk7CisKKy8qCisgKiBjZi1kYWVtb24uYworICovCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYWNoZWZpbGVzX2RhZW1vbl9mb3BzOworCitleHRlcm4gaW50IGNhY2hlZmlsZXNfaGFzX3NwYWNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQl1bnNpZ25lZCBmbnIsIHVuc2lnbmVkIGJucik7CisKKy8qCisgKiBjZi1pbnRlcmZhY2UuYworICovCitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzIGNhY2hlZmlsZXNfY2FjaGVfb3BzOworCisvKgorICogY2Yta2V5LmMKKyAqLworZXh0ZXJuIGNoYXIgKmNhY2hlZmlsZXNfY29va19rZXkoY29uc3QgdTggKnJhdywgaW50IGtleWxlbiwgdWludDhfdCB0eXBlKTsKKworLyoKKyAqIGNmLW5hbWVpLmMKKyAqLworZXh0ZXJuIGludCBjYWNoZWZpbGVzX2RlbGV0ZV9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCSAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfd2Fsa190b19vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsCisJCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmtleSwKKwkJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2dldF9kaXJlY3Rvcnkoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJICAgY2hhciAqZmlsZW5hbWUpOworCitleHRlcm4gaW50IGNhY2hlZmlsZXNfY2hlY2tfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkaXIsIGNoYXIgKmZpbGVuYW1lKTsKKworLyoKKyAqIGNmLXByb2MuYworICovCisjaWZkZWYgQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNCitleHRlcm4gYXRvbWljX3QgY2FjaGVmaWxlc19sb29rdXBfaGlzdG9ncmFtW0haXTsKK2V4dGVybiBhdG9taWNfdCBjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtIWl07CitleHRlcm4gYXRvbWljX3QgY2FjaGVmaWxlc19jcmVhdGVfaGlzdG9ncmFtW0haXTsKKworZXh0ZXJuIGludCBfX2luaXQgY2FjaGVmaWxlc19wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBjYWNoZWZpbGVzX3Byb2NfY2xlYW51cCh2b2lkKTsKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgY2FjaGVmaWxlc19oaXN0KGF0b21pY190IGhpc3RvZ3JhbVtdLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2ppZikKK3sKKwl1bnNpZ25lZCBsb25nIGppZiA9IGppZmZpZXMgLSBzdGFydF9qaWY7CisJaWYgKGppZiA+PSBIWikKKwkJamlmID0gSFogLSAxOworCWF0b21pY19pbmMoJmhpc3RvZ3JhbVtqaWZdKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgY2FjaGVmaWxlc19wcm9jX2luaXQoKQkJKDApCisjZGVmaW5lIGNhY2hlZmlsZXNfcHJvY19jbGVhbnVwKCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGNhY2hlZmlsZXNfaGlzdChoaXN0LCBzdGFydF9qaWYpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBjZi1yZHdyLmMKKyAqLworZXh0ZXJuIGludCBjYWNoZWZpbGVzX3JlYWRfb3JfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKiwKKwkJCQkJIHN0cnVjdCBwYWdlICosIGdmcF90KTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKiwgdW5zaWduZWQgKiwKKwkJCQkJICBnZnBfdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKiwgc3RydWN0IHBhZ2UgKiwKKwkJCQkgICAgZ2ZwX3QpOworZXh0ZXJuIGludCBjYWNoZWZpbGVzX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqLAorCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqLCB1bnNpZ25lZCAqLCBnZnBfdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bmNhY2hlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICosIHN0cnVjdCBwYWdlICopOworCisvKgorICogY2Ytc2VjdXJpdHkuYworICovCitleHRlcm4gaW50IGNhY2hlZmlsZXNfZ2V0X3NlY3VyaXR5X0lEKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfZGV0ZXJtaW5lX2NhY2hlX3NlY3VyaXR5KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqKl9zYXZlZF9jcmVkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGNyZWQgKipfc2F2ZWRfY3JlZCkKK3sKKwkqX3NhdmVkX2NyZWQgPSBvdmVycmlkZV9jcmVkcyhjYWNoZS0+Y2FjaGVfY3JlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZWZpbGVzX2VuZF9zZWN1cmUoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQkgY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQpCit7CisJcmV2ZXJ0X2NyZWRzKHNhdmVkX2NyZWQpOworfQorCisvKgorICogY2YteGF0dHIuYworICovCitleHRlcm4gaW50IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpOworZXh0ZXJuIGludCBjYWNoZWZpbGVzX3NldF9vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJICAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCQkgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19jaGVja19vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJCSBzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YSk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfcmVtb3ZlX29iamVjdF94YXR0cihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKKworCisvKgorICogZXJyb3IgaGFuZGxpbmcKKyAqLworI2RlZmluZSBrZXJyb3IoRk1ULCAuLi4pIHByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogIkZNVCJcbiIsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUgY2FjaGVmaWxlc19pb19lcnJvcihfX19jYWNoZSwgRk1ULCAuLi4pCQlcCitkbyB7CQkJCQkJCVwKKwlrZXJyb3IoIkkvTyBFcnJvcjogIiBGTVQsICMjX19WQV9BUkdTX18pOwlcCisJZnNjYWNoZV9pb19lcnJvcigmKF9fX2NhY2hlKS0+Y2FjaGUpOwkJXAorCXNldF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmKF9fX2NhY2hlKS0+ZmxhZ3MpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGNhY2hlZmlsZXNfaW9fZXJyb3Jfb2JqKG9iamVjdCwgRk1ULCAuLi4pCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqX19fY2FjaGU7CQkJCVwKKwkJCQkJCQkJCVwKKwlfX19jYWNoZSA9IGNvbnRhaW5lcl9vZigob2JqZWN0KS0+ZnNjYWNoZS5jYWNoZSwJCVwKKwkJCQlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOwlcCisJY2FjaGVmaWxlc19pb19lcnJvcihfX19jYWNoZSwgRk1ULCAjI19fVkFfQVJHU19fKTsJCVwKK30gd2hpbGUgKDApCisKKworLyoKKyAqIGRlYnVnIHRyYWNpbmcKKyAqLworI2RlZmluZSBkYmdwcmludGsoRk1ULCAuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiWyUtNi42c10gIkZNVCJcbiIsIGN1cnJlbnQtPmNvbW0sICMjX19WQV9BUkdTX18pCisKKy8qIG1ha2Ugc3VyZSB3ZSBtYWludGFpbiB0aGUgZm9ybWF0IHN0cmluZ3MsIGV2ZW4gd2hlbiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZGJwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZGJwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCit7Cit9CisKKyNkZWZpbmUga2VudGVyKEZNVCwgLi4uKSBkYmdwcmludGsoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUga2xlYXZlKEZNVCwgLi4uKSBkYmdwcmludGsoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUga2RlYnVnKEZNVCwgLi4uKSBkYmdwcmludGsoRk1ULCAjI19fVkFfQVJHU19fKQorCisKKyNpZiBkZWZpbmVkKF9fS0RFQlVHKQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pIGtlbnRlcihGTVQsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9sZWF2ZShGTVQsIC4uLikga2xlYXZlKEZNVCwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBrZGVidWcoRk1ULCAjI19fVkFfQVJHU19fKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRUZJTEVTX0RFQlVHKQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pCQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmIChjYWNoZWZpbGVzX2RlYnVnICYgQ0FDSEVGSUxFU19ERUJVR19LRU5URVIpCVwKKwkJa2VudGVyKEZNVCwgIyNfX1ZBX0FSR1NfXyk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9sZWF2ZShGTVQsIC4uLikJCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKGNhY2hlZmlsZXNfZGVidWcgJiBDQUNIRUZJTEVTX0RFQlVHX0tMRUFWRSkJXAorCQlrbGVhdmUoRk1ULCAjI19fVkFfQVJHU19fKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKQkJCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoY2FjaGVmaWxlc19kZWJ1ZyAmIENBQ0hFRklMRVNfREVCVUdfS0RFQlVHKQlcCisJCWtkZWJ1ZyhGTVQsICMjX19WQV9BUkdTX18pOwkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUgX2VudGVyKEZNVCwgLi4uKSBfZGJwcmludGsoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2xlYXZlKEZNVCwgLi4uKSBfZGJwcmludGsoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBfZGJwcmludGsoRk1ULCAjI19fVkFfQVJHU19fKQorI2VuZGlmCisKKyNpZiAxIC8qIGRlZmluZWQoX19LREVCVUdBTEwpICovCisKKyNkZWZpbmUgQVNTRVJUKFgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KCEoWCkpKSB7CQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVENNUChYLCBPUCwgWSkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSghKChYKSBPUCAoWSkpKSkgewkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJcHJpbnRrKEtFUk5fRVJSICIlbHggIiAjT1AgIiAlbHggaXMgZmFsc2VcbiIsCQlcCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoWCksICh1bnNpZ25lZCBsb25nKShZKSk7CQlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRJRihDLCBYKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSgoQykgJiYgIShYKSkpIHsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkNhY2hlRmlsZXM6IEFzc2VydGlvbiBmYWlsZWRcbiIpOwlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRJRkNNUChDLCBYLCBPUCwgWSkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KChDKSAmJiAhKChYKSBPUCAoWSkpKSkgewkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiBBc3NlcnRpb24gZmFpbGVkXG4iKTsJXAorCQlwcmludGsoS0VSTl9FUlIgIiVseCAiICNPUCAiICVseCBpcyBmYWxzZVxuIiwJCVwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKShYKSwgKHVuc2lnbmVkIGxvbmcpKFkpKTsJCVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIEFTU0VSVChYKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBBU1NFUlRDTVAoWCwgT1AsIFkpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUYoQywgWCkJCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUZDTVAoQywgWCwgT1AsIFkpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMva2V5LmMgYi9mcy9jYWNoZWZpbGVzL2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjhiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL2tleS5jCkBAIC0wLDAgKzEsMTU5IEBACisvKiBLZXkgdG8gcGF0aG5hbWUgZW5jb2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGNhY2hlZmlsZXNfY2hhcm1hcFs2NF0gPQorCSIwMTIzNDU2Nzg5IgkJCS8qIDAgLSA5ICovCisJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgkvKiAxMCAtIDM1ICovCisJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgkvKiAzNiAtIDYxICovCisJIl8tIgkJCQkvKiA2MiAtIDYzICovCisJOworCitzdGF0aWMgY29uc3QgY2hhciBjYWNoZWZpbGVzX2ZpbGVjaGFybWFwWzI1Nl0gPSB7CisJLyogd2Ugc2tpcCBzcGFjZSBhbmQgdGFiIGFuZCBjb250cm9sIGNoYXJzICovCisJWzMzIC4uLiA0Nl0gPSAxLAkJLyogJyEnIC0+ICcuJyAqLworCS8qIHdlIHNraXAgJy8nIGFzIGl0J3Mgc2lnbmlmaWNhbnQgdG8gcGF0aHdhbGsgKi8KKwlbNDggLi4uIDEyN10gPSAxLAkJLyogJzAnIC0+ICd+JyAqLworfTsKKworLyoKKyAqIHR1cm4gdGhlIHJhdyBrZXkgaW50byBzb21ldGhpbmcgY29va2VkCisgKiAtIHRoZSByYXcga2V5IHNob3VsZCBpbmNsdWRlIHRoZSBsZW5ndGggaW4gdGhlIHR3byBieXRlcyBhdCB0aGUgZnJvbnQKKyAqIC0gdGhlIGtleSBtYXkgYmUgdXAgdG8gNTE0IGJ5dGVzIGluIGxlbmd0aCAoaW5jbHVkaW5nIHRoZSBsZW5ndGggd29yZCkKKyAqICAgLSAiYmFzZTY0IiBlbmNvZGUgdGhlIHN0cmFuZ2Uga2V5cywgbWFwcGluZyAzIGJ5dGVzIG9mIHJhdyB0byBmb3VyIG9mCisgKiAgICAgY29va2VkCisgKiAgIC0gbmVlZCB0byBjdXQgdGhlIGNvb2tlZCBrZXkgaW50byAyNTIgY2hhciBsZW5ndGhzICgxODkgcmF3IGJ5dGVzKQorICovCitjaGFyICpjYWNoZWZpbGVzX2Nvb2tfa2V5KGNvbnN0IHU4ICpyYXcsIGludCBrZXlsZW4sIHVpbnQ4X3QgdHlwZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNzdW0sIGNoOworCXVuc2lnbmVkIGludCBhY2M7CisJY2hhciAqa2V5OworCWludCBsb29wLCBsZW4sIG1heCwgc2VnLCBtYXJrLCBwcmludDsKKworCV9lbnRlcigiLCVkIiwga2V5bGVuKTsKKworCUJVR19PTihrZXlsZW4gPCAyIHx8IGtleWxlbiA+IDUxNCk7CisKKwljc3VtID0gcmF3WzBdICsgcmF3WzFdOworCXByaW50ID0gMTsKKwlmb3IgKGxvb3AgPSAyOyBsb29wIDwga2V5bGVuOyBsb29wKyspIHsKKwkJY2ggPSByYXdbbG9vcF07CisJCWNzdW0gKz0gY2g7CisJCXByaW50ICY9IGNhY2hlZmlsZXNfZmlsZWNoYXJtYXBbY2hdOworCX0KKworCWlmIChwcmludCkgeworCQkvKiBpZiB0aGUgcGF0aCBpcyB1c2FibGUgQVNDSUksIHRoZW4gd2UgcmVuZGVyIGl0IGRpcmVjdGx5ICovCisJCW1heCA9IGtleWxlbiAtIDI7CisJCW1heCArPSAyOwkvKiB0d28gYmFzZTY0J2QgbGVuZ3RoIGNoYXJzIG9uIHRoZSBmcm9udCAqLworCQltYXggKz0gNTsJLyogQGNoZWNrc3VtL00gKi8KKwkJbWF4ICs9IDMgKiAyOwkvKiBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50IGRpdmlkZXJzICgiLi4uL00iKQorCQkJCSAqIGlzICgoNTE0ICsgMjUxKSAvIDI1MikgPSAzCisJCQkJICovCisJCW1heCArPSAxOwkvKiBOVUwgb24gZW5kICovCisJfSBlbHNlIHsKKwkJLyogY2FsY3VsYXRlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29va2VkIGtleSAqLworCQlrZXlsZW4gPSAoa2V5bGVuICsgMikgLyAzOworCisJCW1heCA9IGtleWxlbiAqIDQ7CisJCW1heCArPSA1OwkvKiBAY2hlY2tzdW0vTSAqLworCQltYXggKz0gMyAqIDI7CS8qIG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnQgZGl2aWRlcnMgKCIuLi4vTSIpCisJCQkJICogaXMgKCg1MTQgKyAxODgpIC8gMTg5KSA9IDMKKwkJCQkgKi8KKwkJbWF4ICs9IDE7CS8qIE5VTCBvbiBlbmQgKi8KKwl9CisKKwltYXggKz0gMTsJLyogMm5kIE5VTCBvbiBlbmQgKi8KKworCV9kZWJ1ZygibWF4OiAlZCIsIG1heCk7CisKKwlrZXkgPSBrbWFsbG9jKG1heCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrZXkpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gMDsKKworCS8qIGJ1aWxkIHRoZSBjb29rZWQga2V5ICovCisJc3ByaW50ZihrZXksICJAJTAyeCVjKyIsICh1bnNpZ25lZCkgY3N1bSwgMCk7CisJbGVuID0gNTsKKwltYXJrID0gbGVuIC0gMTsKKworCWlmIChwcmludCkgeworCQlhY2MgPSAqKHVpbnQxNl90ICopIHJhdzsKKwkJcmF3ICs9IDI7CisKKwkJa2V5W2xlbiArIDFdID0gY2FjaGVmaWxlc19jaGFybWFwW2FjYyAmIDYzXTsKKwkJYWNjID4+PSA2OworCQlrZXlbbGVuXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisJCWxlbiArPSAyOworCisJCXNlZyA9IDI1MDsKKwkJZm9yIChsb29wID0ga2V5bGVuOyBsb29wID4gMDsgbG9vcC0tKSB7CisJCQlpZiAoc2VnIDw9IDApIHsKKwkJCQlrZXlbbGVuKytdID0gJ1wwJzsKKwkJCQltYXJrID0gbGVuOworCQkJCWtleVtsZW4rK10gPSAnKyc7CisJCQkJc2VnID0gMjUyOworCQkJfQorCisJCQlrZXlbbGVuKytdID0gKnJhdysrOworCQkJQVNTRVJUKGxlbiA8IG1heCk7CisJCX0KKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYOgkJdHlwZSA9ICdJJzsJYnJlYWs7CisJCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9EQVRBRklMRToJdHlwZSA9ICdEJzsJYnJlYWs7CisJCWRlZmF1bHQ6CQkJCXR5cGUgPSAnUyc7CWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc2VnID0gMjUyOworCQlmb3IgKGxvb3AgPSBrZXlsZW47IGxvb3AgPiAwOyBsb29wLS0pIHsKKwkJCWlmIChzZWcgPD0gMCkgeworCQkJCWtleVtsZW4rK10gPSAnXDAnOworCQkJCW1hcmsgPSBsZW47CisJCQkJa2V5W2xlbisrXSA9ICcrJzsKKwkJCQlzZWcgPSAyNTI7CisJCQl9CisKKwkJCWFjYyA9ICpyYXcrKzsKKwkJCWFjYyB8PSAqcmF3KysgPDwgODsKKwkJCWFjYyB8PSAqcmF3KysgPDwgMTY7CisKKwkJCV9kZWJ1ZygiYWNjOiAlMDZ4IiwgYWNjKTsKKworCQkJa2V5W2xlbisrXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisJCQlhY2MgPj49IDY7CisJCQlrZXlbbGVuKytdID0gY2FjaGVmaWxlc19jaGFybWFwW2FjYyAmIDYzXTsKKwkJCWFjYyA+Pj0gNjsKKwkJCWtleVtsZW4rK10gPSBjYWNoZWZpbGVzX2NoYXJtYXBbYWNjICYgNjNdOworCQkJYWNjID4+PSA2OworCQkJa2V5W2xlbisrXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisKKwkJCUFTU0VSVChsZW4gPCBtYXgpOworCQl9CisKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWDoJCXR5cGUgPSAnSic7CWJyZWFrOworCQljYXNlIEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEU6CXR5cGUgPSAnRSc7CWJyZWFrOworCQlkZWZhdWx0OgkJCQl0eXBlID0gJ1QnOwlicmVhazsKKwkJfQorCX0KKworCWtleVttYXJrXSA9IHR5cGU7CisJa2V5W2xlbisrXSA9IDA7CisJa2V5W2xlbl0gPSAwOworCisJX2xlYXZlKCIgPSAlcCAlZCIsIGtleSwgbGVuKTsKKwlyZXR1cm4ga2V5OworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9tYWluLmMgYi9mcy9jYWNoZWZpbGVzL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZhOGNmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9tYWluLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qIE5ldHdvcmsgZmlsZXN5c3RlbSBjYWNoaW5nIGJhY2tlbmQgdG8gdXNlIGNhY2hlIGZpbGVzIG9uIGEgcHJlbW91bnRlZAorICogZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3Vuc2lnbmVkIGNhY2hlZmlsZXNfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGNhY2hlZmlsZXNfZGVidWcsIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoY2FjaGVmaWxlc19kZWJ1ZywgIkNhY2hlRmlsZXMgZGVidWdnaW5nIG1hc2siKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNb3VudGVkLWZpbGVzeXN0ZW0gYmFzZWQgY2FjaGUiKTsKK01PRFVMRV9BVVRIT1IoIlJlZCBIYXQsIEluYy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlZmlsZXNfb2JqZWN0X2phcjsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGNhY2hlZmlsZXNfZGV2ID0geworCS5taW5vcgk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZQk9ICJjYWNoZWZpbGVzIiwKKwkuZm9wcwk9ICZjYWNoZWZpbGVzX2RhZW1vbl9mb3BzLAorfTsKKworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19vYmplY3RfaW5pdF9vbmNlKHZvaWQgKl9vYmplY3QpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QgPSBfb2JqZWN0OworCisJbWVtc2V0KG9iamVjdCwgMCwgc2l6ZW9mKCpvYmplY3QpKTsKKwlzcGluX2xvY2tfaW5pdCgmb2JqZWN0LT53b3JrX2xvY2spOworfQorCisvKgorICogaW5pdGlhbGlzZSB0aGUgZnMgY2FjaGluZyBtb2R1bGUKKyAqLworc3RhdGljIGludCBfX2luaXQgY2FjaGVmaWxlc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmNhY2hlZmlsZXNfZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9kZXY7CisKKwkvKiBjcmVhdGUgYW4gb2JqZWN0IGphciAqLworCXJldCA9IC1FTk9NRU07CisJY2FjaGVmaWxlc19vYmplY3RfamFyID0KKwkJa21lbV9jYWNoZV9jcmVhdGUoImNhY2hlZmlsZXNfb2JqZWN0X2phciIsCisJCQkJICBzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0KSwKKwkJCQkgIDAsCisJCQkJICBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJICBjYWNoZWZpbGVzX29iamVjdF9pbml0X29uY2UpOworCWlmICghY2FjaGVmaWxlc19vYmplY3RfamFyKSB7CisJCXByaW50ayhLRVJOX05PVElDRQorCQkgICAgICAgIkNhY2hlRmlsZXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBhbiBvYmplY3QgamFyXG4iKTsKKwkJZ290byBlcnJvcl9vYmplY3RfamFyOworCX0KKworCXJldCA9IGNhY2hlZmlsZXNfcHJvY19pbml0KCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcHJvYzsKKworCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IExvYWRlZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3Byb2M6CisJa21lbV9jYWNoZV9kZXN0cm95KGNhY2hlZmlsZXNfb2JqZWN0X2phcik7CitlcnJvcl9vYmplY3RfamFyOgorCW1pc2NfZGVyZWdpc3RlcigmY2FjaGVmaWxlc19kZXYpOworZXJyb3JfZGV2OgorCWtlcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyOiAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworZnNfaW5pdGNhbGwoY2FjaGVmaWxlc19pbml0KTsKKworLyoKKyAqIGNsZWFuIHVwIG9uIG1vZHVsZSByZW1vdmFsCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBjYWNoZWZpbGVzX2V4aXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJDYWNoZUZpbGVzOiBVbmxvYWRpbmdcbiIpOworCisJY2FjaGVmaWxlc19wcm9jX2NsZWFudXAoKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGVmaWxlc19vYmplY3RfamFyKTsKKwltaXNjX2RlcmVnaXN0ZXIoJmNhY2hlZmlsZXNfZGV2KTsKK30KKworbW9kdWxlX2V4aXQoY2FjaGVmaWxlc19leGl0KTsKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U4MThhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCkBAIC0wLDAgKzEsNzcxIEBACisvKiBDYWNoZUZpbGVzIHBhdGggd2Fsa2luZyBhbmQgcmVsYXRlZCByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfd2FpdF9iaXQodm9pZCAqZmxhZ3MpCit7CisJc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlY29yZCB0aGUgZmFjdCB0aGF0IGFuIG9iamVjdCBpcyBub3cgYWN0aXZlCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfbWFya19vYmplY3RfYWN0aXZlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKnhvYmplY3Q7CisJc3RydWN0IHJiX25vZGUgKipfcCwgKl9wYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCV9lbnRlcigiLCVwIiwgb2JqZWN0KTsKKwordHJ5X2FnYWluOgorCXdyaXRlX2xvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKSkKKwkJQlVHKCk7CisKKwlkZW50cnkgPSBvYmplY3QtPmRlbnRyeTsKKwlfcCA9ICZjYWNoZS0+YWN0aXZlX25vZGVzLnJiX25vZGU7CisJd2hpbGUgKCpfcCkgeworCQlfcGFyZW50ID0gKl9wOworCQl4b2JqZWN0ID0gcmJfZW50cnkoX3BhcmVudCwKKwkJCQkgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGFjdGl2ZV9ub2RlKTsKKworCQlBU1NFUlQoeG9iamVjdCAhPSBvYmplY3QpOworCisJCWlmICh4b2JqZWN0LT5kZW50cnkgPiBkZW50cnkpCisJCQlfcCA9ICYoKl9wKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoeG9iamVjdC0+ZGVudHJ5IDwgZGVudHJ5KQorCQkJX3AgPSAmKCpfcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlnb3RvIHdhaXRfZm9yX29sZF9vYmplY3Q7CisJfQorCisJcmJfbGlua19ub2RlKCZvYmplY3QtPmFjdGl2ZV9ub2RlLCBfcGFyZW50LCBfcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZvYmplY3QtPmFjdGl2ZV9ub2RlLCAmY2FjaGUtPmFjdGl2ZV9ub2Rlcyk7CisKKwl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisJX2xlYXZlKCIiKTsKKwlyZXR1cm47CisKKwkvKiBhbiBvbGQgb2JqZWN0IGZyb20gYSBwcmV2aW91cyBpbmNhcm5hdGlvbiBpcyBob2dnaW5nIHRoZSBzbG90IC0gd2UKKwkgKiBuZWVkIHRvIHdhaXQgZm9yIGl0IHRvIGJlIGRlc3Ryb3llZCAqLword2FpdF9mb3Jfb2xkX29iamVjdDoKKwlpZiAoeG9iamVjdC0+ZnNjYWNoZS5zdGF0ZSA8IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKSB7CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiBFcnJvcjoiCisJCSAgICAgICAiIFVuZXhwZWN0ZWQgb2JqZWN0IGNvbGxpc2lvblxuIik7CisJCXByaW50ayhLRVJOX0VSUiAieG9iamVjdDogT0JKJXhcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4b2Jqc3RhdGU9JXNcbiIsCisJCSAgICAgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNbeG9iamVjdC0+ZnNjYWNoZS5zdGF0ZV0pOworCQlwcmludGsoS0VSTl9FUlIgInhvYmpmbGFncz0lbHhcbiIsIHhvYmplY3QtPmZzY2FjaGUuZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgInhvYmpldmVudD0lbHggWyVseF1cbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmV2ZW50cywgeG9iamVjdC0+ZnNjYWNoZS5ldmVudF9tYXNrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4b3BzPSV1IGlucD0ldSBleGM9JXVcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLm5fb3BzLCB4b2JqZWN0LT5mc2NhY2hlLm5faW5fcHJvZ3Jlc3MsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLm5fZXhjbHVzaXZlKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4Y29va2llPSVwIFtwcj0lcCBuZD0lcCBmbD0lbHhdXG4iLAorCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5jb29raWUsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+cGFyZW50LAorCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPm5ldGZzX2RhdGEsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgInhwYXJlbnQ9JXBcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLnBhcmVudCk7CisJCXByaW50ayhLRVJOX0VSUiAib2JqZWN0OiBPQkoleFxuIiwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiY29va2llPSVwIFtwcj0lcCBuZD0lcCBmbD0lbHhdXG4iLAorCQkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmNvb2tpZSwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPnBhcmVudCwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPm5ldGZzX2RhdGEsCisJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5mbGFncyk7CisJCXByaW50ayhLRVJOX0VSUiAicGFyZW50PSVwXG4iLAorCQkgICAgICAgb2JqZWN0LT5mc2NhY2hlLnBhcmVudCk7CisJCUJVRygpOworCX0KKwlhdG9taWNfaW5jKCZ4b2JqZWN0LT51c2FnZSk7CisJd3JpdGVfdW5sb2NrKCZjYWNoZS0+YWN0aXZlX2xvY2spOworCisJX2RlYnVnKCI+Pj4gd2FpdCIpOworCXdhaXRfb25fYml0KCZ4b2JqZWN0LT5mbGFncywgQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLAorCQkgICAgY2FjaGVmaWxlc193YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCV9kZWJ1ZygiPDw8IHdhaXRlZCIpOworCisJY2FjaGUtPmNhY2hlLm9wcy0+cHV0X29iamVjdCgmeG9iamVjdC0+ZnNjYWNoZSk7CisJZ290byB0cnlfYWdhaW47Cit9CisKKy8qCisgKiBkZWxldGUgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIGNhY2hlCisgKiAtIGZpbGUgYmFja2VkIG9iamVjdHMgYXJlIHVubGlua2VkCisgKiAtIGRpcmVjdG9yeSBiYWNrZWQgb2JqZWN0cyBhcmUgc3R1ZmZlZCBpbnRvIHRoZSBncmF2ZXlhcmQgZm9yIHVzZXJzcGFjZSB0bworICogICBkZWxldGUKKyAqIC0gdW5sb2NrcyB0aGUgZGlyZWN0b3J5IG11dGV4CisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkaXIsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpyZXApCit7CisJc3RydWN0IGRlbnRyeSAqZ3JhdmUsICp0cmFwOworCWNoYXIgbmJ1ZmZlcls4ICsgOCArIDFdOworCWludCByZXQ7CisKKwlfZW50ZXIoIiwnJSouKnMnLCclKi4qcyciLAorCSAgICAgICBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLmxlbiwgZGlyLT5kX25hbWUubmFtZSwKKwkgICAgICAgcmVwLT5kX25hbWUubGVuLCByZXAtPmRfbmFtZS5sZW4sIHJlcC0+ZF9uYW1lLm5hbWUpOworCisJLyogbm9uLWRpcmVjdG9yaWVzIGNhbiBqdXN0IGJlIHVubGlua2VkICovCisJaWYgKCFTX0lTRElSKHJlcC0+ZF9pbm9kZS0+aV9tb2RlKSkgeworCQlfZGVidWcoInVubGluayBzdGFsZSBvYmplY3QiKTsKKwkJcmV0ID0gdmZzX3VubGluayhkaXItPmRfaW5vZGUsIHJlcCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJCWlmIChyZXQgPT0gLUVJTykKKwkJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJVbmxpbmsgZmFpbGVkIik7CisKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogZGlyZWN0b3JpZXMgaGF2ZSB0byBiZSBtb3ZlZCB0byB0aGUgZ3JhdmV5YXJkICovCisJX2RlYnVnKCJtb3ZlIHN0YWxlIG9iamVjdCB0byBncmF2ZXlhcmQiKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKK3RyeV9hZ2FpbjoKKwkvKiBmaXJzdCBzdGVwIGlzIHRvIG1ha2UgdXAgYSBncmF2ZSBkZW50cnkgaW4gdGhlIGdyYXZleWFyZCAqLworCXNwcmludGYobmJ1ZmZlciwgIiUwOHglMDh4IiwKKwkJKHVpbnQzMl90KSBnZXRfc2Vjb25kcygpLAorCQkodWludDMyX3QpIGF0b21pY19pbmNfcmV0dXJuKCZjYWNoZS0+Z3JhdmVjb3VudGVyKSk7CisKKwkvKiBkbyB0aGUgbXVsdGl3YXkgbG9jayBtYWdpYyAqLworCXRyYXAgPSBsb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCisJLyogZG8gc29tZSBjaGVja3MgYmVmb3JlIGdldHRpbmcgdGhlIGdyYXZlIGRlbnRyeSAqLworCWlmIChyZXAtPmRfcGFyZW50ICE9IGRpcikgeworCQkvKiB0aGUgZW50cnkgd2FzIHByb2JhYmx5IGN1bGxlZCB3aGVuIHdlIGRyb3BwZWQgdGhlIHBhcmVudCBkaXIKKwkJICogbG9jayAqLworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCV9sZWF2ZSgiID0gMCBbY3VsbGVkP10iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFTX0lTRElSKGNhY2hlLT5ncmF2ZXlhcmQtPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiR3JhdmV5YXJkIG5vIGxvbmdlciBhIGRpcmVjdG9yeSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAodHJhcCA9PSByZXApIHsKKwkJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTWF5IG5vdCBtYWtlIGRpcmVjdG9yeSBsb29wIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkX21vdW50cG9pbnQocmVwKSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJNb3VudHBvaW50IGluIGNhY2hlIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWdyYXZlID0gbG9va3VwX29uZV9sZW4obmJ1ZmZlciwgY2FjaGUtPmdyYXZleWFyZCwgc3RybGVuKG5idWZmZXIpKTsKKwlpZiAoSVNfRVJSKGdyYXZlKSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisKKwkJaWYgKFBUUl9FUlIoZ3JhdmUpID09IC1FTk9NRU0pIHsKKwkJCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTG9va3VwIGVycm9yICVsZCIsCisJCQkJICAgIFBUUl9FUlIoZ3JhdmUpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGdyYXZlLT5kX2lub2RlKSB7CisJCXVubG9ja19yZW5hbWUoY2FjaGUtPmdyYXZleWFyZCwgZGlyKTsKKwkJZHB1dChncmF2ZSk7CisJCWdyYXZlID0gTlVMTDsKKwkJY29uZF9yZXNjaGVkKCk7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmIChkX21vdW50cG9pbnQoZ3JhdmUpKSB7CisJCXVubG9ja19yZW5hbWUoY2FjaGUtPmdyYXZleWFyZCwgZGlyKTsKKwkJZHB1dChncmF2ZSk7CisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJNb3VudHBvaW50IGluIGdyYXZleWFyZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiB0YXJnZXQgc2hvdWxkIG5vdCBiZSBhbiBhbmNlc3RvciBvZiBzb3VyY2UgKi8KKwlpZiAodHJhcCA9PSBncmF2ZSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCWRwdXQoZ3JhdmUpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTWF5IG5vdCBtYWtlIGRpcmVjdG9yeSBsb29wIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGF0dGVtcHQgdGhlIHJlbmFtZSAqLworCXJldCA9IHZmc19yZW5hbWUoZGlyLT5kX2lub2RlLCByZXAsIGNhY2hlLT5ncmF2ZXlhcmQtPmRfaW5vZGUsIGdyYXZlKTsKKwlpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1FTk9NRU0pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJSZW5hbWUgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCByZXQpOworCisJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCWRwdXQoZ3JhdmUpOworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19kZWxldGVfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCWludCByZXQ7CisKKwlfZW50ZXIoIix7JXB9Iiwgb2JqZWN0LT5kZW50cnkpOworCisJQVNTRVJUKG9iamVjdC0+ZGVudHJ5KTsKKwlBU1NFUlQob2JqZWN0LT5kZW50cnktPmRfaW5vZGUpOworCUFTU0VSVChvYmplY3QtPmRlbnRyeS0+ZF9wYXJlbnQpOworCisJZGlyID0gZGdldF9wYXJlbnQob2JqZWN0LT5kZW50cnkpOworCisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlyZXQgPSBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBkaXIsIG9iamVjdC0+ZGVudHJ5KTsKKworCWRwdXQoZGlyKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogd2FsayBmcm9tIHRoZSBwYXJlbnQgb2JqZWN0IHRvIHRoZSBjaGlsZCBvYmplY3QgdGhyb3VnaCB0aGUgYmFja2luZworICogZmlsZXN5c3RlbSwgY3JlYXRpbmcgZGlyZWN0b3JpZXMgYXMgd2UgZ28KKyAqLworaW50IGNhY2hlZmlsZXNfd2Fsa190b19vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpuZXh0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHJldCwgbmxlbjsKKworCV9lbnRlcigieyVwfSwsJXMsIiwgcGFyZW50LT5kZW50cnksIGtleSk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihwYXJlbnQtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlBU1NFUlQocGFyZW50LT5kZW50cnkpOworCUFTU0VSVChwYXJlbnQtPmRlbnRyeS0+ZF9pbm9kZSk7CisKKwlpZiAoIShTX0lTRElSKHBhcmVudC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSkgeworCQkvLyBUT0RPOiBjb252ZXJ0IGZpbGUgdG8gZGlyCisJCV9sZWF2ZSgibG9va2luZyB1cCBpbiBub25lIGRpcmVjdG9yeSIpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJZGlyID0gZGdldChwYXJlbnQtPmRlbnRyeSk7CisKK2FkdmFuY2U6CisJLyogYXR0ZW1wdCB0byB0cmFuc2l0IHRoZSBmaXJzdCBkaXJlY3RvcnkgY29tcG9uZW50ICovCisJbmFtZSA9IGtleTsKKwlubGVuID0gc3RybGVuKGtleSk7CisKKwkvKiBrZXkgZW5kcyBpbiBhIGRvdWJsZSBOVUwgKi8KKwlrZXkgPSBrZXkgKyBubGVuICsgMTsKKwlpZiAoISprZXkpCisJCWtleSA9IE5VTEw7CisKK2xvb2t1cF9hZ2FpbjoKKwkvKiBzZWFyY2ggdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZWxlbWVudCBuYW1lICovCisJX2RlYnVnKCJsb29rdXAgJyVzJyIsIG5hbWUpOworCisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKworCXN0YXJ0ID0gamlmZmllczsKKwluZXh0ID0gbG9va3VwX29uZV9sZW4obmFtZSwgZGlyLCBubGVuKTsKKwljYWNoZWZpbGVzX2hpc3QoY2FjaGVmaWxlc19sb29rdXBfaGlzdG9ncmFtLCBzdGFydCk7CisJaWYgKElTX0VSUihuZXh0KSkKKwkJZ290byBsb29rdXBfZXJyb3I7CisKKwlfZGVidWcoIm5leHQgLT4gJXAgJXMiLCBuZXh0LCBuZXh0LT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJaWYgKCFrZXkpCisJCW9iamVjdC0+bmV3ID0gIW5leHQtPmRfaW5vZGU7CisKKwkvKiBpZiB0aGlzIGVsZW1lbnQgb2YgdGhlIHBhdGggZG9lc24ndCBleGlzdCwgdGhlbiB0aGUgbG9va3VwIHBoYXNlCisJICogZmFpbGVkLCBhbmQgd2UgY2FuIHJlbGVhc2UgYW55IHJlYWRlcnMgaW4gdGhlIGNlcnRhaW4ga25vd2xlZGdlIHRoYXQKKwkgKiB0aGVyZSdzIG5vdGhpbmcgZm9yIHRoZW0gdG8gYWN0dWFsbHkgcmVhZCAqLworCWlmICghbmV4dC0+ZF9pbm9kZSkKKwkJZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKCZvYmplY3QtPmZzY2FjaGUpOworCisJLyogd2UgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdCBpZiBpdCdzIG5lZ2F0aXZlICovCisJaWYgKGtleSB8fCBvYmplY3QtPnR5cGUgPT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCkgeworCQkvKiBpbmRleCBvYmplY3RzIGFuZCBpbnRlcnZlbmluZyB0cmVlIGxldmVscyBtdXN0IGJlIHN1YmRpcnMgKi8KKwkJaWYgKCFuZXh0LT5kX2lub2RlKSB7CisJCQlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMSwgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGNyZWF0ZV9lcnJvcjsKKworCQkJc3RhcnQgPSBqaWZmaWVzOworCQkJcmV0ID0gdmZzX21rZGlyKGRpci0+ZF9pbm9kZSwgbmV4dCwgMCk7CisJCQljYWNoZWZpbGVzX2hpc3QoY2FjaGVmaWxlc19ta2Rpcl9oaXN0b2dyYW0sIHN0YXJ0KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gY3JlYXRlX2Vycm9yOworCisJCQlBU1NFUlQobmV4dC0+ZF9pbm9kZSk7CisKKwkJCV9kZWJ1ZygibWtkaXIgLT4gJXB7JXB7aW5vPSVsdX19IiwKKwkJCSAgICAgICBuZXh0LCBuZXh0LT5kX2lub2RlLCBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisKKwkJfSBlbHNlIGlmICghU19JU0RJUihuZXh0LT5kX2lub2RlLT5pX21vZGUpKSB7CisJCQlrZXJyb3IoImlub2RlICVsdSBpcyBub3QgYSBkaXJlY3RvcnkiLAorCQkJICAgICAgIG5leHQtPmRfaW5vZGUtPmlfaW5vKTsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogbm9uLWluZGV4IG9iamVjdHMgc3RhcnQgb3V0IGxpZmUgYXMgZmlsZXMgKi8KKwkJaWYgKCFuZXh0LT5kX2lub2RlKSB7CisJCQlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMSwgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGNyZWF0ZV9lcnJvcjsKKworCQkJc3RhcnQgPSBqaWZmaWVzOworCQkJcmV0ID0gdmZzX2NyZWF0ZShkaXItPmRfaW5vZGUsIG5leHQsIFNfSUZSRUcsIE5VTEwpOworCQkJY2FjaGVmaWxlc19oaXN0KGNhY2hlZmlsZXNfY3JlYXRlX2hpc3RvZ3JhbSwgc3RhcnQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBjcmVhdGVfZXJyb3I7CisKKwkJCUFTU0VSVChuZXh0LT5kX2lub2RlKTsKKworCQkJX2RlYnVnKCJjcmVhdGUgLT4gJXB7JXB7aW5vPSVsdX19IiwKKwkJCSAgICAgICBuZXh0LCBuZXh0LT5kX2lub2RlLCBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisKKwkJfSBlbHNlIGlmICghU19JU0RJUihuZXh0LT5kX2lub2RlLT5pX21vZGUpICYmCisJCQkgICAhU19JU1JFRyhuZXh0LT5kX2lub2RlLT5pX21vZGUpCisJCQkgICApIHsKKwkJCWtlcnJvcigiaW5vZGUgJWx1IGlzIG5vdCBhIGZpbGUgb3IgZGlyZWN0b3J5IiwKKwkJCSAgICAgICBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwkvKiBwcm9jZXNzIHRoZSBuZXh0IGNvbXBvbmVudCAqLworCWlmIChrZXkpIHsKKwkJX2RlYnVnKCJhZHZhbmNlIik7CisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJZHB1dChkaXIpOworCQlkaXIgPSBuZXh0OworCQluZXh0ID0gTlVMTDsKKwkJZ290byBhZHZhbmNlOworCX0KKworCS8qIHdlJ3ZlIGZvdW5kIHRoZSBvYmplY3Qgd2Ugd2VyZSBsb29raW5nIGZvciAqLworCW9iamVjdC0+ZGVudHJ5ID0gbmV4dDsKKworCS8qIGlmIHdlJ3ZlIGZvdW5kIHRoYXQgdGhlIHRlcm1pbmFsIG9iamVjdCBleGlzdHMsIHRoZW4gd2UgbmVlZCB0bworCSAqIGNoZWNrIGl0cyBhdHRyaWJ1dGVzIGFuZCBkZWxldGUgaXQgaWYgaXQncyBvdXQgb2YgZGF0ZSAqLworCWlmICghb2JqZWN0LT5uZXcpIHsKKwkJX2RlYnVnKCJ2YWxpZGF0ZSAnJSouKnMnIiwKKwkJICAgICAgIG5leHQtPmRfbmFtZS5sZW4sIG5leHQtPmRfbmFtZS5sZW4sIG5leHQtPmRfbmFtZS5uYW1lKTsKKworCQlyZXQgPSBjYWNoZWZpbGVzX2NoZWNrX29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCQlpZiAocmV0ID09IC1FU1RBTEUpIHsKKwkJCS8qIGRlbGV0ZSB0aGUgb2JqZWN0ICh0aGUgZGVsZXRlciBkcm9wcyB0aGUgZGlyZWN0b3J5CisJCQkgKiBtdXRleCkgKi8KKwkJCW9iamVjdC0+ZGVudHJ5ID0gTlVMTDsKKworCQkJcmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdChjYWNoZSwgZGlyLCBuZXh0KTsKKwkJCWRwdXQobmV4dCk7CisJCQluZXh0ID0gTlVMTDsKKworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBkZWxldGVfZXJyb3I7CisKKwkJCV9kZWJ1ZygicmVkbyBsb29rdXAiKTsKKwkJCWdvdG8gbG9va3VwX2FnYWluOworCQl9CisJfQorCisJLyogbm90ZSB0aGF0IHdlJ3JlIG5vdyB1c2luZyB0aGlzIG9iamVjdCAqLworCWNhY2hlZmlsZXNfbWFya19vYmplY3RfYWN0aXZlKGNhY2hlLCBvYmplY3QpOworCisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCWRwdXQoZGlyKTsKKwlkaXIgPSBOVUxMOworCisJX2RlYnVnKCI9PT0gT0JUQUlORURfT0JKRUNUID09PSIpOworCisJaWYgKG9iamVjdC0+bmV3KSB7CisJCS8qIGF0dGFjaCBkYXRhIHRvIGEgbmV3bHkgY29uc3RydWN0ZWQgdGVybWluYWwgb2JqZWN0ICovCisJCXJldCA9IGNhY2hlZmlsZXNfc2V0X29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gY2hlY2tfZXJyb3I7CisJfSBlbHNlIHsKKwkJLyogYWx3YXlzIHVwZGF0ZSB0aGUgYXRpbWUgb24gYW4gb2JqZWN0IHdlJ3ZlIGp1c3QgbG9va2VkIHVwCisJCSAqICh0aGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBjdWxsaW5nLCBhbmQgYXRpbWVzIGFyZSBvbmx5CisJCSAqIHVwZGF0ZWQgYnkgcmVhZCwgd3JpdGUgYW5kIHJlYWRkaXIgYnV0IG5vdCBsb29rdXAgb3IKKwkJICogb3BlbikgKi8KKwkJdG91Y2hfYXRpbWUoY2FjaGUtPm1udCwgbmV4dCk7CisJfQorCisJLyogb3BlbiBhIGZpbGUgaW50ZXJmYWNlIG9udG8gYSBkYXRhIGZpbGUgKi8KKwlpZiAob2JqZWN0LT50eXBlICE9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpIHsKKwkJaWYgKFNfSVNSRUcob2JqZWN0LT5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFvcHM7CisKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWFvcHMgPSBvYmplY3QtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nLT5hX29wczsKKwkJCWlmICghYW9wcy0+Ym1hcCkKKwkJCQlnb3RvIGNoZWNrX2Vycm9yOworCisJCQlvYmplY3QtPmJhY2tlciA9IG9iamVjdC0+ZGVudHJ5OworCQl9IGVsc2UgeworCQkJQlVHKCk7IC8vIFRPRE86IG9wZW4gZmlsZSBpbiBkYXRhLWNsYXNzIHN1YmRpcgorCQl9CisJfQorCisJb2JqZWN0LT5uZXcgPSAwOworCWZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KCZvYmplY3QtPmZzY2FjaGUpOworCisJX2xlYXZlKCIgPSAwIFslbHVdIiwgb2JqZWN0LT5kZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXR1cm4gMDsKKworY3JlYXRlX2Vycm9yOgorCV9kZWJ1ZygiY3JlYXRlIGVycm9yICVkIiwgcmV0KTsKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJDcmVhdGUvbWtkaXIgZmFpbGVkIik7CisJZ290byBlcnJvcjsKKworY2hlY2tfZXJyb3I6CisJX2RlYnVnKCJjaGVjayBlcnJvciAlZCIsIHJldCk7CisJd3JpdGVfbG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwlyYl9lcmFzZSgmb2JqZWN0LT5hY3RpdmVfbm9kZSwgJmNhY2hlLT5hY3RpdmVfbm9kZXMpOworCWNsZWFyX2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKTsKKwl3YWtlX3VwX2JpdCgmb2JqZWN0LT5mbGFncywgQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFKTsKKwl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisKKwlkcHV0KG9iamVjdC0+ZGVudHJ5KTsKKwlvYmplY3QtPmRlbnRyeSA9IE5VTEw7CisJZ290byBlcnJvcl9vdXQ7CisKK2RlbGV0ZV9lcnJvcjoKKwlfZGVidWcoImRlbGV0ZSBlcnJvciAlZCIsIHJldCk7CisJZ290byBlcnJvcl9vdXQyOworCitsb29rdXBfZXJyb3I6CisJX2RlYnVnKCJsb29rdXAgZXJyb3IgJWxkIiwgUFRSX0VSUihuZXh0KSk7CisJcmV0ID0gUFRSX0VSUihuZXh0KTsKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJMb29rdXAgZmFpbGVkIik7CisJbmV4dCA9IE5VTEw7CitlcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChuZXh0KTsKK2Vycm9yX291dDI6CisJZHB1dChkaXIpOworZXJyb3Jfb3V0OgorCWlmIChyZXQgPT0gLUVOT1NQQykKKwkJcmV0ID0gLUVOT0JVRlM7CisKKwlfbGVhdmUoIiA9IGVycm9yICVkIiwgLXJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGdldCBhIHN1YmRpcmVjdG9yeQorICovCitzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2dldF9kaXJlY3Rvcnkoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkaXIsCisJCQkJCWNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IGRlbnRyeSAqc3ViZGlyOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJaW50IHJldDsKKworCV9lbnRlcigiLCwlcyIsIGRpcm5hbWUpOworCisJLyogc2VhcmNoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGVsZW1lbnQgbmFtZSAqLworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlzdGFydCA9IGppZmZpZXM7CisJc3ViZGlyID0gbG9va3VwX29uZV9sZW4oZGlybmFtZSwgZGlyLCBzdHJsZW4oZGlybmFtZSkpOworCWNhY2hlZmlsZXNfaGlzdChjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW0sIHN0YXJ0KTsKKwlpZiAoSVNfRVJSKHN1YmRpcikpIHsKKwkJaWYgKFBUUl9FUlIoc3ViZGlyKSA9PSAtRU5PTUVNKQorCQkJZ290byBub21lbV9kX2FsbG9jOworCQlnb3RvIGxvb2t1cF9lcnJvcjsKKwl9CisKKwlfZGVidWcoInN1YmRpciAtPiAlcCAlcyIsCisJICAgICAgIHN1YmRpciwgc3ViZGlyLT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJLyogd2UgbmVlZCB0byBjcmVhdGUgdGhlIHN1YmRpciBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldCAqLworCWlmICghc3ViZGlyLT5kX2lub2RlKSB7CisJCXJldCA9IGNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAxLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG1rZGlyX2Vycm9yOworCisJCV9kZWJ1ZygiYXR0ZW1wdCBta2RpciIpOworCisJCXJldCA9IHZmc19ta2RpcihkaXItPmRfaW5vZGUsIHN1YmRpciwgMDcwMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBta2Rpcl9lcnJvcjsKKworCQlBU1NFUlQoc3ViZGlyLT5kX2lub2RlKTsKKworCQlfZGVidWcoIm1rZGlyIC0+ICVweyVwe2lubz0lbHV9fSIsCisJCSAgICAgICBzdWJkaXIsCisJCSAgICAgICBzdWJkaXItPmRfaW5vZGUsCisJCSAgICAgICBzdWJkaXItPmRfaW5vZGUtPmlfaW5vKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwkvKiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3ViZGlyIGlzIGEgZGlyZWN0b3J5ICovCisJQVNTRVJUKHN1YmRpci0+ZF9pbm9kZSk7CisKKwlpZiAoIVNfSVNESVIoc3ViZGlyLT5kX2lub2RlLT5pX21vZGUpKSB7CisJCWtlcnJvcigiJXMgaXMgbm90IGEgZGlyZWN0b3J5IiwgZGlybmFtZSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gY2hlY2tfZXJyb3I7CisJfQorCisJcmV0ID0gLUVQRVJNOworCWlmICghc3ViZGlyLT5kX2lub2RlLT5pX29wIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnNldHhhdHRyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPmdldHhhdHRyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPmxvb2t1cCB8fAorCSAgICAhc3ViZGlyLT5kX2lub2RlLT5pX29wLT5ta2RpciB8fAorCSAgICAhc3ViZGlyLT5kX2lub2RlLT5pX29wLT5jcmVhdGUgfHwKKwkgICAgIXN1YmRpci0+ZF9pbm9kZS0+aV9vcC0+cmVuYW1lIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnJtZGlyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnVubGluaykKKwkJZ290byBjaGVja19lcnJvcjsKKworCV9sZWF2ZSgiID0gWyVsdV0iLCBzdWJkaXItPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXR1cm4gc3ViZGlyOworCitjaGVja19lcnJvcjoKKwlkcHV0KHN1YmRpcik7CisJX2xlYXZlKCIgPSAlZCBbY2hlY2tdIiwgcmV0KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworCitta2Rpcl9lcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChzdWJkaXIpOworCWtlcnJvcigibWtkaXIgJXMgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBkaXJuYW1lLCByZXQpOworCXJldHVybiBFUlJfUFRSKHJldCk7CisKK2xvb2t1cF9lcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJcmV0ID0gUFRSX0VSUihzdWJkaXIpOworCWtlcnJvcigiTG9va3VwICVzIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgZGlybmFtZSwgcmV0KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworCitub21lbV9kX2FsbG9jOgorCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKK30KKworLyoKKyAqIGZpbmQgb3V0IGlmIGFuIG9iamVjdCBpcyBpbiB1c2Ugb3Igbm90CisgKiAtIGlmIGZpbmRzIG9iamVjdCBhbmQgaXQncyBub3QgaW4gdXNlOgorICogICAtIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgYW5kIGEgcmVmZXJlbmNlIG9uIGl0CisgKiAgIC0gcmV0dXJucyB3aXRoIHRoZSBkaXJlY3RvcnkgbG9ja2VkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2NoZWNrX2FjdGl2ZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRpciwKKwkJCQkJICAgICAgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IHJiX25vZGUgKl9uOworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCByZXQ7CisKKwkvL19lbnRlcigiLCUqLipzLywlcyIsCisJLy8gICAgICAgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLm5hbWUsIGZpbGVuYW1lKTsKKworCS8qIGxvb2sgdXAgdGhlIHZpY3RpbSAqLworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIDEpOworCisJc3RhcnQgPSBqaWZmaWVzOworCXZpY3RpbSA9IGxvb2t1cF9vbmVfbGVuKGZpbGVuYW1lLCBkaXIsIHN0cmxlbihmaWxlbmFtZSkpOworCWNhY2hlZmlsZXNfaGlzdChjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW0sIHN0YXJ0KTsKKwlpZiAoSVNfRVJSKHZpY3RpbSkpCisJCWdvdG8gbG9va3VwX2Vycm9yOworCisJLy9fZGVidWcoInZpY3RpbSAtPiAlcCAlcyIsCisJLy8gICAgICAgdmljdGltLCB2aWN0aW0tPmRfaW5vZGUgPyAicG9zaXRpdmUiIDogIm5lZ2F0aXZlIik7CisKKwkvKiBpZiB0aGUgb2JqZWN0IGlzIG5vIGxvbmdlciB0aGVyZSB0aGVuIHdlIHByb2JhYmx5IHJldGlyZWQgdGhlIG9iamVjdAorCSAqIGF0IHRoZSBuZXRmcydzIHJlcXVlc3Qgd2hpbHN0IHRoZSBjdWxsIHdhcyBpbiBwcm9ncmVzcworCSAqLworCWlmICghdmljdGltLT5kX2lub2RlKSB7CisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJZHB1dCh2aWN0aW0pOworCQlfbGVhdmUoIiA9IC1FTk9FTlQgW2Fic2VudF0iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisJfQorCisJLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHVzaW5nIHRoaXMgb2JqZWN0ICovCisJcmVhZF9sb2NrKCZjYWNoZS0+YWN0aXZlX2xvY2spOworCisJX24gPSBjYWNoZS0+YWN0aXZlX25vZGVzLnJiX25vZGU7CisKKwl3aGlsZSAoX24pIHsKKwkJb2JqZWN0ID0gcmJfZW50cnkoX24sIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgYWN0aXZlX25vZGUpOworCisJCWlmIChvYmplY3QtPmRlbnRyeSA+IHZpY3RpbSkKKwkJCV9uID0gX24tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKG9iamVjdC0+ZGVudHJ5IDwgdmljdGltKQorCQkJX24gPSBfbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCWdvdG8gb2JqZWN0X2luX3VzZTsKKwl9CisKKwlyZWFkX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKworCS8vX2xlYXZlKCIgPSAlcCIsIHZpY3RpbSk7CisJcmV0dXJuIHZpY3RpbTsKKworb2JqZWN0X2luX3VzZToKKwlyZWFkX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dCh2aWN0aW0pOworCS8vX2xlYXZlKCIgPSAtRUJVU1kgW2luIHVzZV0iKTsKKwlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCitsb29rdXBfZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IFBUUl9FUlIodmljdGltKTsKKwlpZiAocmV0ID09IC1FTk9FTlQpIHsKKwkJLyogZmlsZSBvciBkaXIgbm93IGFic2VudCAtIHByb2JhYmx5IHJldGlyZWQgYnkgbmV0ZnMgKi8KKwkJX2xlYXZlKCIgPSAtRVNUQUxFIFthYnNlbnRdIik7CisJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOworCX0KKworCWlmIChyZXQgPT0gLUVJTykgeworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTG9va3VwIGZhaWxlZCIpOworCX0gZWxzZSBpZiAocmV0ICE9IC1FTk9NRU0pIHsKKwkJa2Vycm9yKCJJbnRlcm5hbCBlcnJvcjogJWQiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qCisgKiBjdWxsIGFuIG9iamVjdCBpZiBpdCdzIG5vdCBpbiB1c2UKKyAqIC0gY2FsbGVkIG9ubHkgYnkgY2FjaGUgbWFuYWdlciBkYWVtb24KKyAqLworaW50IGNhY2hlZmlsZXNfY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIHN0cnVjdCBkZW50cnkgKmRpciwKKwkJICAgIGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKwlpbnQgcmV0OworCisJX2VudGVyKCIsJSouKnMvLCVzIiwKKwkgICAgICAgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLm5hbWUsIGZpbGVuYW1lKTsKKworCXZpY3RpbSA9IGNhY2hlZmlsZXNfY2hlY2tfYWN0aXZlKGNhY2hlLCBkaXIsIGZpbGVuYW1lKTsKKwlpZiAoSVNfRVJSKHZpY3RpbSkpCisJCXJldHVybiBQVFJfRVJSKHZpY3RpbSk7CisKKwlfZGVidWcoInZpY3RpbSAtPiAlcCAlcyIsCisJICAgICAgIHZpY3RpbSwgdmljdGltLT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJLyogb2theS4uLiB0aGUgdmljdGltIGlzIG5vdCBiZWluZyB1c2VkIHNvIHdlIGNhbiBjdWxsIGl0CisJICogLSBzdGFydCBieSBtYXJraW5nIGl0IGFzIHN0YWxlCisJICovCisJX2RlYnVnKCJ2aWN0aW0gaXMgY3VsbGFibGUiKTsKKworCXJldCA9IGNhY2hlZmlsZXNfcmVtb3ZlX29iamVjdF94YXR0cihjYWNoZSwgdmljdGltKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl91bmxvY2s7CisKKwkvKiAgYWN0dWFsbHkgcmVtb3ZlIHRoZSB2aWN0aW0gKGRyb3BzIHRoZSBkaXIgbXV0ZXgpICovCisJX2RlYnVnKCJidXJ5Iik7CisKKwlyZXQgPSBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBkaXIsIHZpY3RpbSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlkcHV0KHZpY3RpbSk7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3VubG9jazoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CitlcnJvcjoKKwlkcHV0KHZpY3RpbSk7CisJaWYgKHJldCA9PSAtRU5PRU5UKSB7CisJCS8qIGZpbGUgb3IgZGlyIG5vdyBhYnNlbnQgLSBwcm9iYWJseSByZXRpcmVkIGJ5IG5ldGZzICovCisJCV9sZWF2ZSgiID0gLUVTVEFMRSBbYWJzZW50XSIpOworCQlyZXR1cm4gLUVTVEFMRTsKKwl9CisKKwlpZiAocmV0ICE9IC1FTk9NRU0pIHsKKwkJa2Vycm9yKCJJbnRlcm5hbCBlcnJvcjogJWQiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBmaW5kIG91dCBpZiBhbiBvYmplY3QgaXMgaW4gdXNlIG9yIG5vdAorICogLSBjYWxsZWQgb25seSBieSBjYWNoZSBtYW5hZ2VyIGRhZW1vbgorICogLSByZXR1cm5zIC1FQlVTWSBvciAwIHRvIGluZGljYXRlIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGluIHVzZSBvciBub3QKKyAqLworaW50IGNhY2hlZmlsZXNfY2hlY2tfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJICAgIGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKworCS8vX2VudGVyKCIsJSouKnMvLCVzIiwKKwkvLyAgICAgICBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLmxlbiwgZGlyLT5kX25hbWUubmFtZSwgZmlsZW5hbWUpOworCisJdmljdGltID0gY2FjaGVmaWxlc19jaGVja19hY3RpdmUoY2FjaGUsIGRpciwgZmlsZW5hbWUpOworCWlmIChJU19FUlIodmljdGltKSkKKwkJcmV0dXJuIFBUUl9FUlIodmljdGltKTsKKworCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlkcHV0KHZpY3RpbSk7CisJLy9fbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvcHJvYy5jIGIvZnMvY2FjaGVmaWxlcy9wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjZDMzOQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvcHJvYy5jCkBAIC0wLDAgKzEsMTM0IEBACisvKiBDYWNoZUZpbGVzIHN0YXRpc3RpY3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK2F0b21pY190IGNhY2hlZmlsZXNfbG9va3VwX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBjYWNoZWZpbGVzX2NyZWF0ZV9oaXN0b2dyYW1bSFpdOworCisvKgorICogZGlzcGxheSB0aGUgbGF0ZW5jeSBoaXN0b2dyYW0KKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXVuc2lnbmVkIHgsIHksIHosIHQ7CisKKwlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKSB2KSB7CisJY2FzZSAxOgorCQlzZXFfcHV0cyhtLCAiSklGUyAgU0VDUyAgTE9PS1VQUyAgIE1LRElSUyAgICBDUkVBVEVTXG4iKTsKKwkJcmV0dXJuIDA7CisJY2FzZSAyOgorCQlzZXFfcHV0cyhtLCAiPT09PT0gPT09PT0gPT09PT09PT09ID09PT09PT09PSA9PT09PT09PT1cbiIpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlpbmRleCA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMzsKKwkJeCA9IGF0b21pY19yZWFkKCZjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW1baW5kZXhdKTsKKwkJeSA9IGF0b21pY19yZWFkKCZjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtpbmRleF0pOworCQl6ID0gYXRvbWljX3JlYWQoJmNhY2hlZmlsZXNfY3JlYXRlX2hpc3RvZ3JhbVtpbmRleF0pOworCQlpZiAoeCA9PSAwICYmIHkgPT0gMCAmJiB6ID09IDApCisJCQlyZXR1cm4gMDsKKworCQl0ID0gKGluZGV4ICogMTAwMCkgLyBIWjsKKworCQlzZXFfcHJpbnRmKG0sICIlNGx1ICAwLiUwM3UgJTl1ICU5dSAlOXVcbiIsIGluZGV4LCB0LCB4LCB5LCB6KTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogc2V0IHVwIHRoZSBpdGVyYXRvciB0byBzdGFydCByZWFkaW5nIGZyb20gdGhlIGZpcnN0IGxpbmUKKyAqLworc3RhdGljIHZvaWQgKmNhY2hlZmlsZXNfaGlzdG9ncmFtX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpfcG9zKQoreworCWlmICgodW5zaWduZWQgbG9uZyBsb25nKSpfcG9zID49IEhaICsgMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCpfcG9zID09IDApCisJCSpfcG9zID0gMTsKKwlyZXR1cm4gKHZvaWQgKikodW5zaWduZWQgbG9uZykgKl9wb3M7Cit9CisKKy8qCisgKiBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUKKyAqLworc3RhdGljIHZvaWQgKmNhY2hlZmlsZXNfaGlzdG9ncmFtX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykqcG9zID4gSFogKyAyID8KKwkJTlVMTCA6ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpICpwb3M7Cit9CisKKy8qCisgKiBjbGVhbiB1cCBhZnRlciByZWFkaW5nCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfaGlzdG9ncmFtX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNhY2hlZmlsZXNfaGlzdG9ncmFtX29wcyA9IHsKKwkuc3RhcnQJCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fc3RhcnQsCisJLnN0b3AJCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fc3RvcCwKKwkubmV4dAkJPSBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9uZXh0LAorCS5zaG93CQk9IGNhY2hlZmlsZXNfaGlzdG9ncmFtX3Nob3csCit9OworCisvKgorICogb3BlbiAiL3Byb2MvZnMvY2FjaGVmaWxlcy9YWFgiIHdoaWNoIHByb3ZpZGUgc3RhdGlzdGljcyBzdW1tYXJpZXMKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmY2FjaGVmaWxlc19oaXN0b2dyYW1fb3BzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVmaWxlc19oaXN0b2dyYW1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworLyoKKyAqIGluaXRpYWxpc2UgdGhlIC9wcm9jL2ZzL2NhY2hlZmlsZXMvIGRpcmVjdG9yeQorICovCitpbnQgX19pbml0IGNhY2hlZmlsZXNfcHJvY19pbml0KHZvaWQpCit7CisJX2VudGVyKCIiKTsKKworCWlmICghcHJvY19ta2RpcigiZnMvY2FjaGVmaWxlcyIsIE5VTEwpKQorCQlnb3RvIGVycm9yX2RpcjsKKworCWlmICghcHJvY19jcmVhdGUoImZzL2NhY2hlZmlsZXMvaGlzdG9ncmFtIiwgU19JRlJFRyB8IDA0NDQsIE5VTEwsCisJCQkgJmNhY2hlZmlsZXNfaGlzdG9ncmFtX2ZvcHMpKQorCQlnb3RvIGVycm9yX2hpc3RvZ3JhbTsKKworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitlcnJvcl9oaXN0b2dyYW06CisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2NhY2hlZmlsZXMiLCBOVUxMKTsKK2Vycm9yX2RpcjoKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKKyAqIGNsZWFuIHVwIHRoZSAvcHJvYy9mcy9jYWNoZWZpbGVzLyBkaXJlY3RvcnkKKyAqLwordm9pZCBjYWNoZWZpbGVzX3Byb2NfY2xlYW51cCh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9jYWNoZWZpbGVzL2hpc3RvZ3JhbSIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9jYWNoZWZpbGVzIiwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3Jkd3IuYyBiL2ZzL2NhY2hlZmlsZXMvcmR3ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTc4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL3Jkd3IuYwpAQCAtMCwwICsxLDg3OSBAQAorLyogU3RvcmFnZSBvYmplY3QgcmVhZC93cml0ZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIGRldGVjdCB3YWtlIHVwIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdGhlIHVubG9ja2luZyBvZiBwYWdlcyBpbiB3aGljaCB3ZSdyZQorICogaW50ZXJlc3RlZAorICogLSB3ZSB1c2UgdGhpcyB0byBkZXRlY3QgcmVhZCBjb21wbGV0aW9uIG9mIGJhY2tpbmcgcGFnZXMKKyAqIC0gdGhlIGNhbGxlciBob2xkcyB0aGUgd2FpdHF1ZXVlIGxvY2sKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX3JlYWRfd2FpdGVyKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwKKwkJCQkgIGludCBzeW5jLCB2b2lkICpfa2V5KQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkICptb25pdG9yID0KKwkJY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkLCBtb25pdG9yKTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICprZXkgPSBfa2V5OworCXN0cnVjdCBwYWdlICpwYWdlID0gd2FpdC0+cHJpdmF0ZTsKKworCUFTU0VSVChrZXkpOworCisJX2VudGVyKCJ7JWx1fSwldSwlZCx7JXAsJXV9IiwKKwkgICAgICAgbW9uaXRvci0+bmV0ZnNfcGFnZS0+aW5kZXgsIG1vZGUsIHN5bmMsCisJICAgICAgIGtleS0+ZmxhZ3MsIGtleS0+Yml0X25yKTsKKworCWlmIChrZXktPmZsYWdzICE9ICZwYWdlLT5mbGFncyB8fAorCSAgICBrZXktPmJpdF9uciAhPSBQR19sb2NrZWQpCisJCXJldHVybiAwOworCisJX2RlYnVnKCItLS0gbW9uaXRvciAlcCAlbHggLS0tIiwgcGFnZSwgcGFnZS0+ZmxhZ3MpOworCisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkgJiYgIVBhZ2VFcnJvcihwYWdlKSkKKwkJZHVtcF9zdGFjaygpOworCisJLyogcmVtb3ZlIGZyb20gdGhlIHdhaXRxdWV1ZSAqLworCWxpc3RfZGVsKCZ3YWl0LT50YXNrX2xpc3QpOworCisJLyogbW92ZSBvbnRvIHRoZSBhY3Rpb24gbGlzdCBhbmQgcXVldWUgZm9yIEZTLUNhY2hlIHRocmVhZCBwb29sICovCisJQVNTRVJUKG1vbml0b3ItPm9wKTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihtb25pdG9yLT5vcC0+b3Aub2JqZWN0LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT53b3JrX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJm1vbml0b3ItPm9wX2xpbmssICZtb25pdG9yLT5vcC0+dG9fZG8pOworCXNwaW5fdW5sb2NrKCZvYmplY3QtPndvcmtfbG9jayk7CisKKwlmc2NhY2hlX2VucXVldWVfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNvcHkgZGF0YSBmcm9tIGJhY2tpbmcgcGFnZXMgdG8gbmV0ZnMgcGFnZXMgdG8gY29tcGxldGUgYSByZWFkIG9wZXJhdGlvbgorICogLSBkcml2ZW4gYnkgRlMtQ2FjaGUncyB0aHJlYWQgcG9vbAorICovCitzdGF0aWMgdm9pZCBjYWNoZWZpbGVzX3JlYWRfY29waWVyKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqX29wKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkICptb25pdG9yOworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3A7CisJc3RydWN0IHBhZ2V2ZWMgcGFnZXZlYzsKKwlpbnQgZXJyb3IsIG1heDsKKworCW9wID0gY29udGFpbmVyX29mKF9vcCwgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsLCBvcCk7CisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7aW5vPSVsdX0iLCBvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9pbm8pOworCisJcGFnZXZlY19pbml0KCZwYWdldmVjLCAwKTsKKworCW1heCA9IDg7CisJc3Bpbl9sb2NrX2lycSgmb2JqZWN0LT53b3JrX2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZvcC0+dG9fZG8pKSB7CisJCW1vbml0b3IgPSBsaXN0X2VudHJ5KG9wLT50b19kby5uZXh0LAorCQkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQsIG9wX2xpbmspOworCQlsaXN0X2RlbCgmbW9uaXRvci0+b3BfbGluayk7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZvYmplY3QtPndvcmtfbG9jayk7CisKKwkJX2RlYnVnKCItIGNvcHkgeyVsdX0iLCBtb25pdG9yLT5iYWNrX3BhZ2UtPmluZGV4KTsKKworCQllcnJvciA9IC1FSU87CisJCWlmIChQYWdlVXB0b2RhdGUobW9uaXRvci0+YmFja19wYWdlKSkgeworCQkJY29weV9oaWdocGFnZShtb25pdG9yLT5uZXRmc19wYWdlLCBtb25pdG9yLT5iYWNrX3BhZ2UpOworCisJCQlwYWdldmVjX2FkZCgmcGFnZXZlYywgbW9uaXRvci0+bmV0ZnNfcGFnZSk7CisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG1vbml0b3ItPm9wLCAmcGFnZXZlYyk7CisJCQllcnJvciA9IDA7CisJCX0KKworCQlpZiAoZXJyb3IpCisJCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaigKKwkJCQlvYmplY3QsCisJCQkJIlJlYWRwYWdlIGZhaWxlZCBvbiBiYWNraW5nIGZpbGUgJWx4IiwKKwkJCQkodW5zaWduZWQgbG9uZykgbW9uaXRvci0+YmFja19wYWdlLT5mbGFncyk7CisKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG1vbml0b3ItPmJhY2tfcGFnZSk7CisKKwkJZnNjYWNoZV9lbmRfaW8ob3AsIG1vbml0b3ItPm5ldGZzX3BhZ2UsIGVycm9yKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG1vbml0b3ItPm5ldGZzX3BhZ2UpOworCQlmc2NhY2hlX3B1dF9yZXRyaWV2YWwob3ApOworCQlrZnJlZShtb25pdG9yKTsKKworCQkvKiBsZXQgdGhlIHRocmVhZCBwb29sIGhhdmUgc29tZSBhaXIgb2NjYXNpb25hbGx5ICovCisJCW1heC0tOworCQlpZiAobWF4IDwgMCB8fCBuZWVkX3Jlc2NoZWQoKSkgeworCQkJaWYgKCFsaXN0X2VtcHR5KCZvcC0+dG9fZG8pKQorCQkJCWZzY2FjaGVfZW5xdWV1ZV9yZXRyaWV2YWwob3ApOworCQkJX2xlYXZlKCIgW21heGVkIG91dF0iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJm9iamVjdC0+d29ya19sb2NrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJm9iamVjdC0+d29ya19sb2NrKTsKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogcmVhZCB0aGUgY29ycmVzcG9uZGluZyBwYWdlIHRvIHRoZSBnaXZlbiBzZXQgZnJvbSB0aGUgYmFja2luZyBmaWxlCisgKiAtIGFuIHVuY2VydGFpbiBwYWdlIGlzIHNpbXBseSBkaXNjYXJkZWQsIHRvIGJlIHRyaWVkIGFnYWluIGFub3RoZXIgdGltZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfcmVhZF9iYWNraW5nX2ZpbGVfb25lKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCQkgICAgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkJICAgIHN0cnVjdCBwYWdlICpuZXRwYWdlLAorCQkJCQkgICAgc3RydWN0IHBhZ2V2ZWMgKnBhZ2V2ZWMpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQgKm1vbml0b3I7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJtYXBwaW5nOworCXN0cnVjdCBwYWdlICpuZXdwYWdlLCAqYmFja3BhZ2U7CisJaW50IHJldDsKKworCV9lbnRlcigiIik7CisKKwlwYWdldmVjX3JlaW5pdChwYWdldmVjKTsKKworCV9kZWJ1ZygicmVhZCBiYWNrICVweyVsdSwlZH0iLAorCSAgICAgICBuZXRwYWdlLCBuZXRwYWdlLT5pbmRleCwgcGFnZV9jb3VudChuZXRwYWdlKSk7CisKKwltb25pdG9yID0ga3phbGxvYyhzaXplb2YoKm1vbml0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vbml0b3IpCisJCWdvdG8gbm9tZW07CisKKwltb25pdG9yLT5uZXRmc19wYWdlID0gbmV0cGFnZTsKKwltb25pdG9yLT5vcCA9IGZzY2FjaGVfZ2V0X3JldHJpZXZhbChvcCk7CisKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZtb25pdG9yLT5tb25pdG9yLCBjYWNoZWZpbGVzX3JlYWRfd2FpdGVyKTsKKworCS8qIGF0dGVtcHQgdG8gZ2V0IGhvbGQgb2YgdGhlIGJhY2tpbmcgcGFnZSAqLworCWJtYXBwaW5nID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbWFwcGluZzsKKwluZXdwYWdlID0gTlVMTDsKKworCWZvciAoOzspIHsKKwkJYmFja3BhZ2UgPSBmaW5kX2dldF9wYWdlKGJtYXBwaW5nLCBuZXRwYWdlLT5pbmRleCk7CisJCWlmIChiYWNrcGFnZSkKKwkJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfcHJlc2VudDsKKworCQlpZiAoIW5ld3BhZ2UpIHsKKwkJCW5ld3BhZ2UgPSBwYWdlX2NhY2hlX2FsbG9jX2NvbGQoYm1hcHBpbmcpOworCQkJaWYgKCFuZXdwYWdlKQorCQkJCWdvdG8gbm9tZW1fbW9uaXRvcjsKKwkJfQorCisJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ld3BhZ2UsIGJtYXBwaW5nLAorCQkJCQluZXRwYWdlLT5pbmRleCwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgPT0gMCkKKwkJCWdvdG8gaW5zdGFsbGVkX25ld19iYWNraW5nX3BhZ2U7CisJCWlmIChyZXQgIT0gLUVFWElTVCkKKwkJCWdvdG8gbm9tZW1fcGFnZTsKKwl9CisKKwkvKiB3ZSd2ZSBpbnN0YWxsZWQgYSBuZXcgYmFja2luZyBwYWdlLCBzbyBub3cgd2UgbmVlZCB0byBhZGQgaXQKKwkgKiB0byB0aGUgTFJVIGxpc3QgYW5kIHN0YXJ0IGl0IHJlYWRpbmcgKi8KK2luc3RhbGxlZF9uZXdfYmFja2luZ19wYWdlOgorCV9kZWJ1ZygiLSBuZXcgJXAiLCBuZXdwYWdlKTsKKworCWJhY2twYWdlID0gbmV3cGFnZTsKKwluZXdwYWdlID0gTlVMTDsKKworCXBhZ2VfY2FjaGVfZ2V0KGJhY2twYWdlKTsKKwlwYWdldmVjX2FkZChwYWdldmVjLCBiYWNrcGFnZSk7CisJX19wYWdldmVjX2xydV9hZGRfZmlsZShwYWdldmVjKTsKKworcmVhZF9iYWNraW5nX3BhZ2U6CisJcmV0ID0gYm1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShOVUxMLCBiYWNrcGFnZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcmVhZF9lcnJvcjsKKworCS8qIHNldCB0aGUgbW9uaXRvciB0byB0cmFuc2ZlciB0aGUgZGF0YSBhY3Jvc3MgKi8KK21vbml0b3JfYmFja2luZ19wYWdlOgorCV9kZWJ1ZygiLSBtb25pdG9yIGFkZCIpOworCisJLyogaW5zdGFsbCB0aGUgbW9uaXRvciAqLworCXBhZ2VfY2FjaGVfZ2V0KG1vbml0b3ItPm5ldGZzX3BhZ2UpOworCXBhZ2VfY2FjaGVfZ2V0KGJhY2twYWdlKTsKKwltb25pdG9yLT5iYWNrX3BhZ2UgPSBiYWNrcGFnZTsKKwltb25pdG9yLT5tb25pdG9yLnByaXZhdGUgPSBiYWNrcGFnZTsKKwlhZGRfcGFnZV93YWl0X3F1ZXVlKGJhY2twYWdlLCAmbW9uaXRvci0+bW9uaXRvcik7CisJbW9uaXRvciA9IE5VTEw7CisKKwkvKiBidXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiByZWFkIGJlZm9yZSB0aGUgbW9uaXRvciB3YXMgaW5zdGFsbGVkLCBzbworCSAqIHRoZSBtb25pdG9yIG1heSBtaXNzIHRoZSBldmVudCAtIHNvIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgd2UgZG8gZ2V0CisJICogb25lIGluIHN1Y2ggYSBjYXNlICovCisJaWYgKHRyeWxvY2tfcGFnZShiYWNrcGFnZSkpIHsKKwkJX2RlYnVnKCJqdW1wc3RhcnQgJXAgeyVseH0iLCBiYWNrcGFnZSwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCX0KKwlnb3RvIHN1Y2Nlc3M7CisKKwkvKiBpZiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgY2FuIGJlIGluIG9uZSBvZgorCSAqIHRocmVlIHN0YXRlczogcmVhZCBpbiBwcm9ncmVzcywgcmVhZCBmYWlsZWQgb3IgcmVhZCBva2F5ICovCitiYWNraW5nX3BhZ2VfYWxyZWFkeV9wcmVzZW50OgorCV9kZWJ1ZygiLSBwcmVzZW50Iik7CisKKwlpZiAobmV3cGFnZSkgeworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV3cGFnZSk7CisJCW5ld3BhZ2UgPSBOVUxMOworCX0KKworCWlmIChQYWdlRXJyb3IoYmFja3BhZ2UpKQorCQlnb3RvIGlvX2Vycm9yOworCisJaWYgKFBhZ2VVcHRvZGF0ZShiYWNrcGFnZSkpCisJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfdXB0b2RhdGU7CisKKwlpZiAoIXRyeWxvY2tfcGFnZShiYWNrcGFnZSkpCisJCWdvdG8gbW9uaXRvcl9iYWNraW5nX3BhZ2U7CisJX2RlYnVnKCJyZWFkICVwIHslbHh9IiwgYmFja3BhZ2UsIGJhY2twYWdlLT5mbGFncyk7CisJZ290byByZWFkX2JhY2tpbmdfcGFnZTsKKworCS8qIHRoZSBiYWNraW5nIHBhZ2UgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBhdHRhY2ggdGhlIG5ldGZzCisJICogcGFnZSB0byB0aGUgcGFnZWNhY2hlIGFuZCBMUlUgYW5kIGNvcHkgdGhlIGRhdGEgYWNyb3NzICovCitiYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZToKKwlfZGVidWcoIi0gdXB0b2RhdGUiKTsKKworCXBhZ2V2ZWNfYWRkKHBhZ2V2ZWMsIG5ldHBhZ2UpOworCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsIHBhZ2V2ZWMpOworCisJY29weV9oaWdocGFnZShuZXRwYWdlLCBiYWNrcGFnZSk7CisJZnNjYWNoZV9lbmRfaW8ob3AsIG5ldHBhZ2UsIDApOworCitzdWNjZXNzOgorCV9kZWJ1Zygic3VjY2VzcyIpOworCXJldCA9IDA7CisKK291dDoKKwlpZiAoYmFja3BhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJaWYgKG1vbml0b3IpIHsKKwkJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwkJa2ZyZWUobW9uaXRvcik7CisJfQorCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7CisKK3JlYWRfZXJyb3I6CisJX2RlYnVnKCJyZWFkIGVycm9yICVkIiwgcmV0KTsKKwlpZiAocmV0ID09IC1FTk9NRU0pCisJCWdvdG8gb3V0OworaW9fZXJyb3I6CisJY2FjaGVmaWxlc19pb19lcnJvcl9vYmoob2JqZWN0LCAiUGFnZSByZWFkIGVycm9yIG9uIGJhY2tpbmcgZmlsZSIpOworCXJldCA9IC1FTk9CVUZTOworCWdvdG8gb3V0OworCitub21lbV9wYWdlOgorCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdwYWdlKTsKK25vbWVtX21vbml0b3I6CisJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwlrZnJlZShtb25pdG9yKTsKK25vbWVtOgorCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKgorICogcmVhZCBhIHBhZ2UgZnJvbSB0aGUgY2FjaGUgb3IgYWxsb2NhdGUgYSBibG9jayBpbiB3aGljaCB0byBzdG9yZSBpdAorICogLSBjYWNoZSB3aXRoZHJhd2FsIGlzIHByZXZlbnRlZCBieSB0aGUgY2FsbGVyCisgKiAtIHJldHVybnMgLUVJTlRSIGlmIGludGVycnVwdGVkCisgKiAtIHJldHVybnMgLUVOT01FTSBpZiByYW4gb3V0IG9mIG1lbW9yeQorICogLSByZXR1cm5zIC1FTk9CVUZTIGlmIG5vIGJ1ZmZlcnMgY2FuIGJlIG1hZGUgYXZhaWxhYmxlCisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgcGFnZSBpcyBiZXlvbmQgRU9GCisgKiAtIGlmIHRoZSBwYWdlIGlzIGJhY2tlZCBieSBhIGJsb2NrIGluIHRoZSBjYWNoZToKKyAqICAgLSBhIHJlYWQgd2lsbCBiZSBzdGFydGVkIHdoaWNoIHdpbGwgY2FsbCB0aGUgY2FsbGJhY2sgb24gY29tcGxldGlvbgorICogICAtIDAgd2lsbCBiZSByZXR1cm5lZAorICogLSBlbHNlIGlmIHRoZSBwYWdlIGlzIHVuYmFja2VkOgorICogICAtIHRoZSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkCisgKiAgIC0gLUVOT0RBVEEgd2lsbCBiZSByZXR1cm5lZAorICovCitpbnQgY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgcGFnZXZlYyBwYWdldmVjOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc2VjdG9yX3QgYmxvY2swLCBibG9jazsKKwl1bnNpZ25lZCBzaGlmdDsKKwlpbnQgcmV0OworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigieyVwfSx7JWx4fSwsLCIsIG9iamVjdCwgcGFnZS0+aW5kZXgpOworCisJaWYgKCFvYmplY3QtPmJhY2tlcikKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJaW5vZGUgPSBvYmplY3QtPmJhY2tlci0+ZF9pbm9kZTsKKwlBU1NFUlQoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSk7CisJQVNTRVJUKGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5ibWFwKTsKKwlBU1NFUlQoaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlcyk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIHNoaWZ0IHJlcXVpcmVkIHRvIHVzZSBibWFwICovCisJaWYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJc2hpZnQgPSBQQUdFX1NISUZUIC0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisKKwlvcC0+b3AuZmxhZ3MgPSBGU0NBQ0hFX09QX0ZBU1Q7CisJb3AtPm9wLnByb2Nlc3NvciA9IGNhY2hlZmlsZXNfcmVhZF9jb3BpZXI7CisKKwlwYWdldmVjX2luaXQoJnBhZ2V2ZWMsIDApOworCisJLyogd2UgYXNzdW1lIHRoZSBhYnNlbmNlIG9yIHByZXNlbmNlIG9mIHRoZSBmaXJzdCBibG9jayBpcyBhIGdvb2QKKwkgKiBlbm91Z2ggaW5kaWNhdGlvbiBmb3IgdGhlIHBhZ2UgYXMgYSB3aG9sZQorCSAqIC0gVE9ETzogZG9uJ3QgdXNlIGJtYXAoKSBmb3IgdGhpcyBhcyBpdCBpcyBfbm90XyBhY3R1YWxseSBnb29kCisJICogICBlbm91Z2ggZm9yIHRoaXMgYXMgaXQgZG9lc24ndCBpbmRpY2F0ZSBlcnJvcnMsIGJ1dCBpdCdzIGFsbCB3ZSd2ZQorCSAqICAgZ290IGZvciB0aGUgbW9tZW50CisJICovCisJYmxvY2swID0gcGFnZS0+aW5kZXg7CisJYmxvY2swIDw8PSBzaGlmdDsKKworCWJsb2NrID0gaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMtPmJtYXAoaW5vZGUtPmlfbWFwcGluZywgYmxvY2swKTsKKwlfZGVidWcoIiVsbHggLT4gJWxseCIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJsb2NrMCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxvY2spOworCisJaWYgKGJsb2NrKSB7CisJCS8qIHN1Ym1pdCB0aGUgYXBwYXJlbnRseSB2YWxpZCBwYWdlIHRvIHRoZSBiYWNraW5nIGZzIHRvIGJlCisJCSAqIHJlYWQgZnJvbSBkaXNrICovCisJCXJldCA9IGNhY2hlZmlsZXNfcmVhZF9iYWNraW5nX2ZpbGVfb25lKG9iamVjdCwgb3AsIHBhZ2UsCisJCQkJCQkgICAgICAgJnBhZ2V2ZWMpOworCX0gZWxzZSBpZiAoY2FjaGVmaWxlc19oYXNfc3BhY2UoY2FjaGUsIDAsIDEpID09IDApIHsKKwkJLyogdGhlcmUncyBzcGFjZSBpbiB0aGUgY2FjaGUgd2UgY2FuIHVzZSAqLworCQlwYWdldmVjX2FkZCgmcGFnZXZlYywgcGFnZSk7CisJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKwkJcmV0ID0gLUVOT0RBVEE7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHJlYWQgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZXMgdG8gdGhlIGdpdmVuIHNldCBmcm9tIHRoZSBiYWNraW5nIGZpbGUKKyAqIC0gYW55IHVuY2VydGFpbiBwYWdlcyBhcmUgc2ltcGx5IGRpc2NhcmRlZCwgdG8gYmUgdHJpZWQgYWdhaW4gYW5vdGhlciB0aW1lCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19yZWFkX2JhY2tpbmdfZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCQkJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkJc3RydWN0IHBhZ2V2ZWMgKm1hcmtfcHZlYykKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vbmVfcmVhZCAqbW9uaXRvciA9IE5VTEw7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJtYXBwaW5nID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgcGFnZXZlYyBscnVfcHZlYzsKKwlzdHJ1Y3QgcGFnZSAqbmV3cGFnZSA9IE5VTEwsICpuZXRwYWdlLCAqX24sICpiYWNrcGFnZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwlfZW50ZXIoIiIpOworCisJcGFnZXZlY19pbml0KCZscnVfcHZlYywgMCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0cGFnZSwgX24sIGxpc3QsIGxydSkgeworCQlsaXN0X2RlbCgmbmV0cGFnZS0+bHJ1KTsKKworCQlfZGVidWcoInJlYWQgYmFjayAlcHslbHUsJWR9IiwKKwkJICAgICAgIG5ldHBhZ2UsIG5ldHBhZ2UtPmluZGV4LCBwYWdlX2NvdW50KG5ldHBhZ2UpKTsKKworCQlpZiAoIW1vbml0b3IpIHsKKwkJCW1vbml0b3IgPSBremFsbG9jKHNpemVvZigqbW9uaXRvciksIEdGUF9LRVJORUwpOworCQkJaWYgKCFtb25pdG9yKQorCQkJCWdvdG8gbm9tZW07CisKKwkJCW1vbml0b3ItPm9wID0gZnNjYWNoZV9nZXRfcmV0cmlldmFsKG9wKTsKKwkJCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJm1vbml0b3ItPm1vbml0b3IsCisJCQkJCQkgIGNhY2hlZmlsZXNfcmVhZF93YWl0ZXIpOworCQl9CisKKwkJZm9yICg7OykgeworCQkJYmFja3BhZ2UgPSBmaW5kX2dldF9wYWdlKGJtYXBwaW5nLCBuZXRwYWdlLT5pbmRleCk7CisJCQlpZiAoYmFja3BhZ2UpCisJCQkJZ290byBiYWNraW5nX3BhZ2VfYWxyZWFkeV9wcmVzZW50OworCisJCQlpZiAoIW5ld3BhZ2UpIHsKKwkJCQluZXdwYWdlID0gcGFnZV9jYWNoZV9hbGxvY19jb2xkKGJtYXBwaW5nKTsKKwkJCQlpZiAoIW5ld3BhZ2UpCisJCQkJCWdvdG8gbm9tZW07CisJCQl9CisKKwkJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ld3BhZ2UsIGJtYXBwaW5nLAorCQkJCQkJbmV0cGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpOworCQkJaWYgKHJldCA9PSAwKQorCQkJCWdvdG8gaW5zdGFsbGVkX25ld19iYWNraW5nX3BhZ2U7CisJCQlpZiAocmV0ICE9IC1FRVhJU1QpCisJCQkJZ290byBub21lbTsKKwkJfQorCisJCS8qIHdlJ3ZlIGluc3RhbGxlZCBhIG5ldyBiYWNraW5nIHBhZ2UsIHNvIG5vdyB3ZSBuZWVkIHRvIGFkZCBpdAorCQkgKiB0byB0aGUgTFJVIGxpc3QgYW5kIHN0YXJ0IGl0IHJlYWRpbmcgKi8KKwlpbnN0YWxsZWRfbmV3X2JhY2tpbmdfcGFnZToKKwkJX2RlYnVnKCItIG5ldyAlcCIsIG5ld3BhZ2UpOworCisJCWJhY2twYWdlID0gbmV3cGFnZTsKKwkJbmV3cGFnZSA9IE5VTEw7CisKKwkJcGFnZV9jYWNoZV9nZXQoYmFja3BhZ2UpOworCQlpZiAoIXBhZ2V2ZWNfYWRkKCZscnVfcHZlYywgYmFja3BhZ2UpKQorCQkJX19wYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOworCisJcmVyZWFkX2JhY2tpbmdfcGFnZToKKwkJcmV0ID0gYm1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShOVUxMLCBiYWNrcGFnZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byByZWFkX2Vycm9yOworCisJCS8qIGFkZCB0aGUgbmV0ZnMgcGFnZSB0byB0aGUgcGFnZWNhY2hlIGFuZCBMUlUsIGFuZCBzZXQgdGhlCisJCSAqIG1vbml0b3IgdG8gdHJhbnNmZXIgdGhlIGRhdGEgYWNyb3NzICovCisJbW9uaXRvcl9iYWNraW5nX3BhZ2U6CisJCV9kZWJ1ZygiLSBtb25pdG9yIGFkZCIpOworCisJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ldHBhZ2UsIG9wLT5tYXBwaW5nLCBuZXRwYWdlLT5pbmRleCwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAocmV0ID09IC1FRVhJU1QpIHsKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlnb3RvIG5vbWVtOworCQl9CisKKwkJcGFnZV9jYWNoZV9nZXQobmV0cGFnZSk7CisJCWlmICghcGFnZXZlY19hZGQoJmxydV9wdmVjLCBuZXRwYWdlKSkKKwkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKKworCQkvKiBpbnN0YWxsIGEgbW9uaXRvciAqLworCQlwYWdlX2NhY2hlX2dldChuZXRwYWdlKTsKKwkJbW9uaXRvci0+bmV0ZnNfcGFnZSA9IG5ldHBhZ2U7CisKKwkJcGFnZV9jYWNoZV9nZXQoYmFja3BhZ2UpOworCQltb25pdG9yLT5iYWNrX3BhZ2UgPSBiYWNrcGFnZTsKKwkJbW9uaXRvci0+bW9uaXRvci5wcml2YXRlID0gYmFja3BhZ2U7CisJCWFkZF9wYWdlX3dhaXRfcXVldWUoYmFja3BhZ2UsICZtb25pdG9yLT5tb25pdG9yKTsKKwkJbW9uaXRvciA9IE5VTEw7CisKKwkJLyogYnV0IHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gcmVhZCBiZWZvcmUgdGhlIG1vbml0b3Igd2FzCisJCSAqIGluc3RhbGxlZCwgc28gdGhlIG1vbml0b3IgbWF5IG1pc3MgdGhlIGV2ZW50IC0gc28gd2UgaGF2ZSB0bworCQkgKiBlbnN1cmUgdGhhdCB3ZSBkbyBnZXQgb25lIGluIHN1Y2ggYSBjYXNlICovCisJCWlmICh0cnlsb2NrX3BhZ2UoYmFja3BhZ2UpKSB7CisJCQlfZGVidWcoIjJ1bmxvY2sgJXAgeyVseH0iLCBiYWNrcGFnZSwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJCXVubG9ja19wYWdlKGJhY2twYWdlKTsKKwkJfQorCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJCWJhY2twYWdlID0gTlVMTDsKKworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCW5ldHBhZ2UgPSBOVUxMOworCQljb250aW51ZTsKKworCQkvKiBpZiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgY2FuIGJlIGluIG9uZSBvZgorCQkgKiB0aHJlZSBzdGF0ZXM6IHJlYWQgaW4gcHJvZ3Jlc3MsIHJlYWQgZmFpbGVkIG9yIHJlYWQgb2theSAqLworCWJhY2tpbmdfcGFnZV9hbHJlYWR5X3ByZXNlbnQ6CisJCV9kZWJ1ZygiLSBwcmVzZW50ICVwIiwgYmFja3BhZ2UpOworCisJCWlmIChQYWdlRXJyb3IoYmFja3BhZ2UpKQorCQkJZ290byBpb19lcnJvcjsKKworCQlpZiAoUGFnZVVwdG9kYXRlKGJhY2twYWdlKSkKKwkJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfdXB0b2RhdGU7CisKKwkJX2RlYnVnKCItIG5vdCByZWFkeSAlcHslbHh9IiwgYmFja3BhZ2UsIGJhY2twYWdlLT5mbGFncyk7CisKKwkJaWYgKCF0cnlsb2NrX3BhZ2UoYmFja3BhZ2UpKQorCQkJZ290byBtb25pdG9yX2JhY2tpbmdfcGFnZTsKKworCQlpZiAoUGFnZUVycm9yKGJhY2twYWdlKSkgeworCQkJX2RlYnVnKCJlcnJvciAlbHgiLCBiYWNrcGFnZS0+ZmxhZ3MpOworCQkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCQkJZ290byBpb19lcnJvcjsKKwkJfQorCisJCWlmIChQYWdlVXB0b2RhdGUoYmFja3BhZ2UpKQorCQkJZ290byBiYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZV91bmxvY2s7CisKKwkJLyogd2UndmUgbG9ja2VkIGEgcGFnZSB0aGF0J3MgbmVpdGhlciB1cCB0byBkYXRlIG5vciBlcnJvbmVvdXMsCisJCSAqIHNvIHdlIG5lZWQgdG8gYXR0ZW1wdCB0byByZWFkIGl0IGFnYWluICovCisJCWdvdG8gcmVyZWFkX2JhY2tpbmdfcGFnZTsKKworCQkvKiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgYXR0YWNoIHRoZSBuZXRmcworCQkgKiBwYWdlIHRvIHRoZSBwYWdlY2FjaGUgYW5kIExSVSBhbmQgY29weSB0aGUgZGF0YSBhY3Jvc3MgKi8KKwliYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZV91bmxvY2s6CisJCV9kZWJ1ZygidXB0b2RhdGUgJWx4IiwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCWJhY2tpbmdfcGFnZV9hbHJlYWR5X3VwdG9kYXRlOgorCQlfZGVidWcoIi0gdXB0b2RhdGUiKTsKKworCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShuZXRwYWdlLCBvcC0+bWFwcGluZywgbmV0cGFnZS0+aW5kZXgsCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKHJldCA9PSAtRUVYSVNUKSB7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG5ldHBhZ2UpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ290byBub21lbTsKKwkJfQorCisJCWNvcHlfaGlnaHBhZ2UobmV0cGFnZSwgYmFja3BhZ2UpOworCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJCWJhY2twYWdlID0gTlVMTDsKKworCQlpZiAoIXBhZ2V2ZWNfYWRkKG1hcmtfcHZlYywgbmV0cGFnZSkpCisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCBtYXJrX3B2ZWMpOworCisJCXBhZ2VfY2FjaGVfZ2V0KG5ldHBhZ2UpOworCQlpZiAoIXBhZ2V2ZWNfYWRkKCZscnVfcHZlYywgbmV0cGFnZSkpCisJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKCZscnVfcHZlYyk7CisKKwkJZnNjYWNoZV9lbmRfaW8ob3AsIG5ldHBhZ2UsIDApOworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCW5ldHBhZ2UgPSBOVUxMOworCQljb250aW51ZTsKKwl9CisKKwluZXRwYWdlID0gTlVMTDsKKworCV9kZWJ1Zygib3V0Iik7CisKK291dDoKKwkvKiB0aWR5IHVwICovCisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKKworCWlmIChuZXdwYWdlKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV3cGFnZSk7CisJaWYgKG5ldHBhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXRwYWdlKTsKKwlpZiAoYmFja3BhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJaWYgKG1vbml0b3IpIHsKKwkJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG9wKTsKKwkJa2ZyZWUobW9uaXRvcik7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5ldHBhZ2UsIF9uLCBsaXN0LCBscnUpIHsKKwkJbGlzdF9kZWwoJm5ldHBhZ2UtPmxydSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXRwYWdlKTsKKwl9CisKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub21lbToKKwlfZGVidWcoIm5vbWVtIik7CisJcmV0ID0gLUVOT01FTTsKKwlnb3RvIG91dDsKKworcmVhZF9lcnJvcjoKKwlfZGVidWcoInJlYWQgZXJyb3IgJWQiLCByZXQpOworCWlmIChyZXQgPT0gLUVOT01FTSkKKwkJZ290byBvdXQ7Citpb19lcnJvcjoKKwljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsICJQYWdlIHJlYWQgZXJyb3Igb24gYmFja2luZyBmaWxlIik7CisJcmV0ID0gLUVOT0JVRlM7CisJZ290byBvdXQ7Cit9CisKKy8qCisgKiByZWFkIGEgbGlzdCBvZiBwYWdlcyBmcm9tIHRoZSBjYWNoZSBvciBhbGxvY2F0ZSBibG9ja3MgaW4gd2hpY2ggdG8gc3RvcmUKKyAqIHRoZW0KKyAqLworaW50IGNhY2hlZmlsZXNfcmVhZF9vcl9hbGxvY19wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCSAgIHVuc2lnbmVkICpucl9wYWdlcywKKwkJCQkgICBnZnBfdCBnZnApCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCXN0cnVjdCBsaXN0X2hlYWQgYmFja3BhZ2VzOworCXN0cnVjdCBwYWdldmVjIHBhZ2V2ZWM7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKl9uOworCXVuc2lnbmVkIHNoaWZ0LCBucmJhY2twYWdlczsKKwlpbnQgcmV0LCByZXQyLCBzcGFjZTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihvcC0+b3Aub2JqZWN0LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihvYmplY3QtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlfZW50ZXIoIntPQkoleCwlZH0sLCVkLCwiLAorCSAgICAgICBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+b3AudXNhZ2UpLAorCSAgICAgICAqbnJfcGFnZXMpOworCisJaWYgKCFvYmplY3QtPmJhY2tlcikKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJc3BhY2UgPSAxOworCWlmIChjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMCwgKm5yX3BhZ2VzKSA8IDApCisJCXNwYWNlID0gMDsKKworCWlub2RlID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGU7CisJQVNTRVJUKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpOworCUFTU0VSVChpbm9kZS0+aV9tYXBwaW5nLT5hX29wcy0+Ym1hcCk7CisJQVNTRVJUKGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5yZWFkcGFnZXMpOworCisJLyogY2FsY3VsYXRlIHRoZSBzaGlmdCByZXF1aXJlZCB0byB1c2UgYm1hcCAqLworCWlmIChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgPiBQQUdFX1NJWkUpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXNoaWZ0ID0gUEFHRV9TSElGVCAtIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCisJcGFnZXZlY19pbml0KCZwYWdldmVjLCAwKTsKKworCW9wLT5vcC5mbGFncyA9IEZTQ0FDSEVfT1BfRkFTVDsKKwlvcC0+b3AucHJvY2Vzc29yID0gY2FjaGVmaWxlc19yZWFkX2NvcGllcjsKKworCUlOSVRfTElTVF9IRUFEKCZiYWNrcGFnZXMpOworCW5yYmFja3BhZ2VzID0gMDsKKworCXJldCA9IHNwYWNlID8gLUVOT0RBVEEgOiAtRU5PQlVGUzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgX24sIHBhZ2VzLCBscnUpIHsKKwkJc2VjdG9yX3QgYmxvY2swLCBibG9jazsKKworCQkvKiB3ZSBhc3N1bWUgdGhlIGFic2VuY2Ugb3IgcHJlc2VuY2Ugb2YgdGhlIGZpcnN0IGJsb2NrIGlzIGEKKwkJICogZ29vZCBlbm91Z2ggaW5kaWNhdGlvbiBmb3IgdGhlIHBhZ2UgYXMgYSB3aG9sZQorCQkgKiAtIFRPRE86IGRvbid0IHVzZSBibWFwKCkgZm9yIHRoaXMgYXMgaXQgaXMgX25vdF8gYWN0dWFsbHkKKwkJICogICBnb29kIGVub3VnaCBmb3IgdGhpcyBhcyBpdCBkb2Vzbid0IGluZGljYXRlIGVycm9ycywgYnV0CisJCSAqICAgaXQncyBhbGwgd2UndmUgZ290IGZvciB0aGUgbW9tZW50CisJCSAqLworCQlibG9jazAgPSBwYWdlLT5pbmRleDsKKwkJYmxvY2swIDw8PSBzaGlmdDsKKworCQlibG9jayA9IGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5ibWFwKGlub2RlLT5pX21hcHBpbmcsCisJCQkJCQkgICAgICBibG9jazApOworCQlfZGVidWcoIiVsbHggLT4gJWxseCIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jazAsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jayk7CisKKwkJaWYgKGJsb2NrKSB7CisJCQkvKiB3ZSBoYXZlIGRhdGEgLSBhZGQgaXQgdG8gdGhlIGxpc3QgdG8gZ2l2ZSB0byB0aGUKKwkJCSAqIGJhY2tpbmcgZnMgKi8KKwkJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmYmFja3BhZ2VzKTsKKwkJCSgqbnJfcGFnZXMpLS07CisJCQlucmJhY2twYWdlcysrOworCQl9IGVsc2UgaWYgKHNwYWNlICYmIHBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKSA9PSAwKSB7CisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCAmcGFnZXZlYyk7CisJCQlyZXQgPSAtRU5PREFUQTsKKwkJfQorCX0KKworCWlmIChwYWdldmVjX2NvdW50KCZwYWdldmVjKSA+IDApCisJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKworCWlmIChsaXN0X2VtcHR5KHBhZ2VzKSkKKwkJcmV0ID0gMDsKKworCS8qIHN1Ym1pdCB0aGUgYXBwYXJlbnRseSB2YWxpZCBwYWdlcyB0byB0aGUgYmFja2luZyBmcyB0byBiZSByZWFkIGZyb20KKwkgKiBkaXNrICovCisJaWYgKG5yYmFja3BhZ2VzID4gMCkgeworCQlyZXQyID0gY2FjaGVmaWxlc19yZWFkX2JhY2tpbmdfZmlsZShvYmplY3QsIG9wLCAmYmFja3BhZ2VzLAorCQkJCQkJICAgICZwYWdldmVjKTsKKwkJaWYgKHJldDIgPT0gLUVOT01FTSB8fCByZXQyID09IC1FSU5UUikKKwkJCXJldCA9IHJldDI7CisJfQorCisJaWYgKHBhZ2V2ZWNfY291bnQoJnBhZ2V2ZWMpID4gMCkKKwkJZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZChvcCwgJnBhZ2V2ZWMpOworCisJX2xlYXZlKCIgPSAlZCBbbnI9JXUlc10iLAorCSAgICAgICByZXQsICpucl9wYWdlcywgbGlzdF9lbXB0eShwYWdlcykgPyAiIGVtcHR5IiA6ICIiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogYWxsb2NhdGUgYSBibG9jayBpbiB0aGUgY2FjaGUgaW4gd2hpY2ggdG8gc3RvcmUgYSBwYWdlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gcmV0dXJucyAtRUlOVFIgaWYgaW50ZXJydXB0ZWQKKyAqIC0gcmV0dXJucyAtRU5PTUVNIGlmIHJhbiBvdXQgb2YgbWVtb3J5CisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgbm8gYnVmZmVycyBjYW4gYmUgbWFkZSBhdmFpbGFibGUKKyAqIC0gcmV0dXJucyAtRU5PQlVGUyBpZiBwYWdlIGlzIGJleW9uZCBFT0YKKyAqIC0gb3RoZXJ3aXNlOgorICogICAtIHRoZSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkCisgKiAgIC0gMCB3aWxsIGJlIHJldHVybmVkCisgKi8KK2ludCBjYWNoZWZpbGVzX2FsbG9jYXRlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJc3RydWN0IHBhZ2V2ZWMgcGFnZXZlYzsKKwlpbnQgcmV0OworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigiJXAseyVseH0sIiwgb2JqZWN0LCBwYWdlLT5pbmRleCk7CisKKwlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMCwgMSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXBhZ2V2ZWNfaW5pdCgmcGFnZXZlYywgMCk7CisJCXBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKTsKKwkJZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZChvcCwgJnBhZ2V2ZWMpOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBibG9ja3MgaW4gdGhlIGNhY2hlIGluIHdoaWNoIHRvIHN0b3JlIGEgc2V0IG9mIHBhZ2VzCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gcmV0dXJucyAtRUlOVFIgaWYgaW50ZXJydXB0ZWQKKyAqIC0gcmV0dXJucyAtRU5PTUVNIGlmIHJhbiBvdXQgb2YgbWVtb3J5CisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgc29tZSBidWZmZXJzIGNvdWxkbid0IGJlIG1hZGUgYXZhaWxhYmxlCisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgc29tZSBwYWdlcyBhcmUgYmV5b25kIEVPRgorICogLSBvdGhlcndpc2U6CisgKiAgIC0gLUVOT0RBVEEgd2lsbCBiZSByZXR1cm5lZAorICogLSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkIGZvciBhbnkgcGFnZSBtYXJrZWQKKyAqLworaW50IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZXMoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJICAgICAgdW5zaWduZWQgKm5yX3BhZ2VzLAorCQkJICAgICAgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgcGFnZXZlYyBwYWdldmVjOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2Yob3AtPm9wLm9iamVjdCwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJX2VudGVyKCIlcCwsLCVkLCIsIG9iamVjdCwgKm5yX3BhZ2VzKTsKKworCXJldCA9IGNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAqbnJfcGFnZXMpOworCWlmIChyZXQgPT0gMCkgeworCQlwYWdldmVjX2luaXQoJnBhZ2V2ZWMsIDApOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgcGFnZXMsIGxydSkgeworCQkJaWYgKHBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKSA9PSAwKQorCQkJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKwkJfQorCisJCWlmIChwYWdldmVjX2NvdW50KCZwYWdldmVjKSA+IDApCisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCAmcGFnZXZlYyk7CisJCXJldCA9IC1FTk9EQVRBOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiByZXF1ZXN0IGEgcGFnZSBiZSBzdG9yZWQgaW4gdGhlIGNhY2hlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gdGhpcyByZXF1ZXN0IG1heSBiZSBpZ25vcmVkIGlmIHRoZXJlJ3Mgbm8gY2FjaGUgYmxvY2sgYXZhaWxhYmxlLCBpbiB3aGljaAorICogICBjYXNlIC1FTk9CVUZTIHdpbGwgYmUgcmV0dXJuZWQKKyAqIC0gaWYgdGhlIG9wIGlzIGluIHByb2dyZXNzLCAwIHdpbGwgYmUgcmV0dXJuZWQKKyAqLworaW50IGNhY2hlZmlsZXNfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJbG9mZl90IHBvczsKKwl2b2lkICpkYXRhOworCWludCByZXQ7CisKKwlBU1NFUlQob3AgIT0gTlVMTCk7CisJQVNTRVJUKHBhZ2UgIT0gTlVMTCk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2Yob3AtPm9wLm9iamVjdCwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisKKwlfZW50ZXIoIiVwLCVweyVseH0sLCwiLCBvYmplY3QsIHBhZ2UsIHBhZ2UtPmluZGV4KTsKKworCWlmICghb2JqZWN0LT5iYWNrZXIpIHsKKwkJX2xlYXZlKCIgPSAtRU5PQlVGUyIpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJQVNTRVJUKFNfSVNSRUcob2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbW9kZSkpOworCisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJLyogd3JpdGUgdGhlIHBhZ2UgdG8gdGhlIGJhY2tpbmcgZmlsZXN5c3RlbSBhbmQgbGV0IGl0IHN0b3JlIGl0IGluIGl0cworCSAqIG93biB0aW1lICovCisJZGdldChvYmplY3QtPmJhY2tlcik7CisJbW50Z2V0KGNhY2hlLT5tbnQpOworCWZpbGUgPSBkZW50cnlfb3BlbihvYmplY3QtPmJhY2tlciwgY2FjaGUtPm1udCwgT19SRFdSLAorCQkJICAgY2FjaGUtPmNhY2hlX2NyZWQpOworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihmaWxlKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlPOworCQlpZiAoZmlsZS0+Zl9vcC0+d3JpdGUpIHsKKwkJCXBvcyA9IChsb2ZmX3QpIHBhZ2UtPmluZGV4IDw8IFBBR0VfU0hJRlQ7CisJCQlkYXRhID0ga21hcChwYWdlKTsKKwkJCW9sZF9mcyA9IGdldF9mcygpOworCQkJc2V0X2ZzKEtFUk5FTF9EUyk7CisJCQlyZXQgPSBmaWxlLT5mX29wLT53cml0ZSgKKwkJCQlmaWxlLCAoY29uc3Qgdm9pZCBfX3VzZXIgKikgZGF0YSwgUEFHRV9TSVpFLAorCQkJCSZwb3MpOworCQkJc2V0X2ZzKG9sZF9mcyk7CisJCQlrdW5tYXAocGFnZSk7CisJCQlpZiAocmV0ICE9IFBBR0VfU0laRSkKKwkJCQlyZXQgPSAtRUlPOworCQl9CisJCWZwdXQoZmlsZSk7CisJfQorCisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUlPKQorCQkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmooCisJCQkJb2JqZWN0LCAiV3JpdGUgcGFnZSB0byBiYWNraW5nIGZpbGUgZmFpbGVkIik7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkZXRhY2ggYSBiYWNraW5nIGJsb2NrIGZyb20gYSBwYWdlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqLwordm9pZCBjYWNoZWZpbGVzX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKl9vYmplY3QsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigiJXAseyVsdX0iLCBvYmplY3QsIHBhZ2UtPmluZGV4KTsKKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmZzY2FjaGUuY29va2llLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTgwOGNkCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBDYWNoZUZpbGVzIHNlY3VyaXR5IG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKy8qCisgKiBkZXRlcm1pbmUgdGhlIHNlY3VyaXR5IGNvbnRleHQgd2l0aGluIHdoaWNoIHdlIGFjY2VzcyB0aGUgY2FjaGUgZnJvbSB3aXRoaW4KKyAqIHRoZSBrZXJuZWwKKyAqLworaW50IGNhY2hlZmlsZXNfZ2V0X3NlY3VyaXR5X0lEKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSkKK3sKKwlzdHJ1Y3QgY3JlZCAqbmV3OworCWludCByZXQ7CisKKwlfZW50ZXIoInslc30iLCBjYWNoZS0+c2VjY3R4KTsKKworCW5ldyA9IHByZXBhcmVfa2VybmVsX2NyZWQoY3VycmVudCk7CisJaWYgKCFuZXcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoY2FjaGUtPnNlY2N0eCkgeworCQlyZXQgPSBzZXRfc2VjdXJpdHlfb3ZlcnJpZGVfZnJvbV9jdHgobmV3LCBjYWNoZS0+c2VjY3R4KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXB1dF9jcmVkKG5ldyk7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhY2hlRmlsZXM6IgorCQkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbm9taW5hdGUiCisJCQkgICAgICAgIiBzZWN1cml0eSBjb250ZXh0OiBlcnJvciAlZFxuIiwKKwkJCSAgICAgICByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCWNhY2hlLT5jYWNoZV9jcmVkID0gbmV3OworCXJldCA9IDA7CitlcnJvcjoKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc2VlIGlmIG1rZGlyIGFuZCBjcmVhdGUgY2FuIGJlIHBlcmZvcm1lZCBpbiB0aGUgcm9vdCBkaXJlY3RvcnkKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqcm9vdCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIocm9vdC0+ZF9pbm9kZSwgcm9vdCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiIKKwkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZCIsCisJCSAgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShyb290LT5kX2lub2RlLCByb290LCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiIKKwkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZCIsCisJCSAgICAgICByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNoZWNrIHRoZSBzZWN1cml0eSBkZXRhaWxzIG9mIHRoZSBvbi1kaXNrIGNhY2hlCisgKiAtIG11c3QgYmUgY2FsbGVkIHdpdGggc2VjdXJpdHkgb3ZlcnJpZGUgaW4gZm9yY2UKKyAqLworaW50IGNhY2hlZmlsZXNfZGV0ZXJtaW5lX2NhY2hlX3NlY3VyaXR5KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJc3RydWN0IGRlbnRyeSAqcm9vdCwKKwkJCQkJY29uc3Qgc3RydWN0IGNyZWQgKipfc2F2ZWRfY3JlZCkKK3sKKwlzdHJ1Y3QgY3JlZCAqbmV3OworCWludCByZXQ7CisKKwlfZW50ZXIoIiIpOworCisJLyogZHVwbGljYXRlIHRoZSBjYWNoZSBjcmVkcyBmb3IgQ09XICh0aGUgb3ZlcnJpZGUgaXMgY3VycmVudGx5IGluCisJICogZm9yY2UsIHNvIHdlIGNhbiB1c2UgcHJlcGFyZV9jcmVkcygpIHRvIGRvIHRoaXMpICovCisJbmV3ID0gcHJlcGFyZV9jcmVkcygpOworCWlmICghbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgKl9zYXZlZF9jcmVkKTsKKworCS8qIHVzZSB0aGUgY2FjaGUgcm9vdCBkaXIncyBzZWN1cml0eSBjb250ZXh0IGFzIHRoZSBiYXNpcyB3aXRoCisJICogd2hpY2ggY3JlYXRlIGZpbGVzICovCisJcmV0ID0gc2V0X2NyZWF0ZV9maWxlc19hcyhuZXcsIHJvb3QtPmRfaW5vZGUpOworCWlmIChyZXQgPCAwKSB7CisJCV9sZWF2ZSgiID0gJWQgW2NmYV0iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXB1dF9jcmVkKGNhY2hlLT5jYWNoZV9jcmVkKTsKKwljYWNoZS0+Y2FjaGVfY3JlZCA9IG5ldzsKKworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCBfc2F2ZWRfY3JlZCk7CisJcmV0ID0gY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoY2FjaGUsIHJvb3QpOworCisJaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkKKwkJcmV0ID0gMDsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy94YXR0ci5jIGIvZnMvY2FjaGVmaWxlcy94YXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTdhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL3hhdHRyLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qIENhY2hlRmlsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgY2FjaGVmaWxlc194YXR0cl9jYWNoZVtdID0KKwlYQVRUUl9VU0VSX1BSRUZJWCAiQ2FjaGVGaWxlcy5jYWNoZSI7CisKKy8qCisgKiBjaGVjayB0aGUgdHlwZSBsYWJlbCBvbiBhbiBvYmplY3QKKyAqIC0gZG9uZSB1c2luZyB4YXR0cnMKKyAqLworaW50IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gb2JqZWN0LT5kZW50cnk7CisJY2hhciB0eXBlWzNdLCB4dHlwZVszXTsKKwlpbnQgcmV0OworCisJQVNTRVJUKGRlbnRyeSk7CisJQVNTRVJUKGRlbnRyeS0+ZF9pbm9kZSk7CisKKwlpZiAoIW9iamVjdC0+ZnNjYWNoZS5jb29raWUpCisJCXN0cmNweSh0eXBlLCAiQzMiKTsKKwllbHNlCisJCXNucHJpbnRmKHR5cGUsIDMsICIlMDJ4Iiwgb2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZGVmLT50eXBlKTsKKworCV9lbnRlcigiJXB7JXN9Iiwgb2JqZWN0LCB0eXBlKTsKKworCS8qIGF0dGVtcHQgdG8gaW5zdGFsbCBhIHR5cGUgbGFiZWwgZGlyZWN0bHkgKi8KKwlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLCB0eXBlLCAyLAorCQkJICAgWEFUVFJfQ1JFQVRFKTsKKwlpZiAocmV0ID09IDApIHsKKwkJX2RlYnVnKCJTRVQiKTsgLyogd2Ugc3VjY2VlZGVkICovCisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHJldCAhPSAtRUVYSVNUKSB7CisJCWtlcnJvcigiQ2FuJ3Qgc2V0IHhhdHRyIG9uICUqLipzIFslbHVdIChlcnIgJWQpIiwKKwkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubGVuLAorCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubywKKwkJICAgICAgIC1yZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHJlYWQgdGhlIGN1cnJlbnQgdHlwZSBsYWJlbCAqLworCXJldCA9IHZmc19nZXR4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUsIHh0eXBlLCAzKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FUkFOR0UpCisJCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCQlrZXJyb3IoIkNhbid0IHJlYWQgeGF0dHIgb24gJSouKnMgWyVsdV0gKGVyciAlZCkiLAorCQkgICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5sZW4sCisJCSAgICAgICBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfaW5vZGUtPmlfaW5vLAorCQkgICAgICAgLXJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogY2hlY2sgdGhlIHR5cGUgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgKi8KKwlpZiAocmV0ICE9IDIpCisJCWdvdG8gYmFkX3R5cGVfbGVuZ3RoOworCisJaWYgKHh0eXBlWzBdICE9IHR5cGVbMF0gfHwgeHR5cGVbMV0gIT0gdHlwZVsxXSkKKwkJZ290byBiYWRfdHlwZTsKKworCXJldCA9IDA7CisKK2Vycm9yOgorCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7CisKK2JhZF90eXBlX2xlbmd0aDoKKwlrZXJyb3IoIkNhY2hlIG9iamVjdCAlbHUgdHlwZSB4YXR0ciBsZW5ndGggaW5jb3JyZWN0IiwKKwkgICAgICAgZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CisJcmV0ID0gLUVJTzsKKwlnb3RvIGVycm9yOworCitiYWRfdHlwZToKKwl4dHlwZVsyXSA9IDA7CisJa2Vycm9yKCJDYWNoZSBvYmplY3QgJSouKnMgWyVsdV0gdHlwZSAlcyBub3QgJXMiLAorCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLmxlbiwKKwkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubywKKwkgICAgICAgeHR5cGUsIHR5cGUpOworCXJldCA9IC1FSU87CisJZ290byBlcnJvcjsKK30KKworLyoKKyAqIHNldCB0aGUgc3RhdGUgeGF0dHIgb24gYSBjYWNoZSBmaWxlCisgKi8KK2ludCBjYWNoZWZpbGVzX3NldF9vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIgKmF1eGRhdGEpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gb2JqZWN0LT5kZW50cnk7CisJaW50IHJldDsKKworCUFTU0VSVChvYmplY3QtPmZzY2FjaGUuY29va2llKTsKKwlBU1NFUlQoZGVudHJ5KTsKKworCV9lbnRlcigiJXAsIyVkIiwgb2JqZWN0LCBhdXhkYXRhLT5sZW4pOworCisJLyogYXR0ZW1wdCB0byBpbnN0YWxsIHRoZSBjYWNoZSBtZXRhZGF0YSBkaXJlY3RseSAqLworCV9kZWJ1ZygiU0VUICVzICMldSIsIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPmRlZi0+bmFtZSwgYXV4ZGF0YS0+bGVuKTsKKworCXJldCA9IHZmc19zZXR4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUsCisJCQkgICAmYXV4ZGF0YS0+dHlwZSwgYXV4ZGF0YS0+bGVuLAorCQkJICAgWEFUVFJfQ1JFQVRFKTsKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT01FTSkKKwkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmooCisJCQlvYmplY3QsCisJCQkiRmFpbGVkIHRvIHNldCB4YXR0ciB3aXRoIGVycm9yICVkIiwgcmV0KTsKKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB1cGRhdGUgdGhlIHN0YXRlIHhhdHRyIG9uIGEgY2FjaGUgZmlsZQorICovCitpbnQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCSAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IG9iamVjdC0+ZGVudHJ5OworCWludCByZXQ7CisKKwlBU1NFUlQob2JqZWN0LT5mc2NhY2hlLmNvb2tpZSk7CisJQVNTRVJUKGRlbnRyeSk7CisKKwlfZW50ZXIoIiVwLCMlZCIsIG9iamVjdCwgYXV4ZGF0YS0+bGVuKTsKKworCS8qIGF0dGVtcHQgdG8gaW5zdGFsbCB0aGUgY2FjaGUgbWV0YWRhdGEgZGlyZWN0bHkgKi8KKwlfZGVidWcoIlNFVCAlcyAjJXUiLCBvYmplY3QtPmZzY2FjaGUuY29va2llLT5kZWYtPm5hbWUsIGF1eGRhdGEtPmxlbik7CisKKwlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLAorCQkJICAgJmF1eGRhdGEtPnR5cGUsIGF1eGRhdGEtPmxlbiwKKwkJCSAgIFhBVFRSX1JFUExBQ0UpOworCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PTUVNKQorCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaigKKwkJCW9iamVjdCwKKwkJCSJGYWlsZWQgdG8gdXBkYXRlIHhhdHRyIHdpdGggZXJyb3IgJWQiLCByZXQpOworCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNoZWNrIHRoZSBzdGF0ZSB4YXR0ciBvbiBhIGNhY2hlIGZpbGUKKyAqIC0gcmV0dXJuIC1FU1RBTEUgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgZGVsZXRlZAorICovCitpbnQgY2FjaGVmaWxlc19jaGVja19vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJICBzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YSkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4YnVmOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IG9iamVjdC0+ZGVudHJ5OworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCMlZCIsIG9iamVjdCwgYXV4ZGF0YS0+bGVuKTsKKworCUFTU0VSVChkZW50cnkpOworCUFTU0VSVChkZW50cnktPmRfaW5vZGUpOworCisJYXV4YnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIpICsgNTEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF1eGJ1ZikgeworCQlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogcmVhZCB0aGUgY3VycmVudCB0eXBlIGxhYmVsICovCisJcmV0ID0gdmZzX2dldHhhdHRyKGRlbnRyeSwgY2FjaGVmaWxlc194YXR0cl9jYWNoZSwKKwkJCSAgICZhdXhidWYtPnR5cGUsIDUxMiArIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0RBVEEpCisJCQlnb3RvIHN0YWxlOyAvKiBubyBhdHRyaWJ1dGUgLSBwb3dlciB3ZW50IG9mZgorCQkJCSAgICAgKiBtaWQtY3VsbD8gKi8KKworCQlpZiAocmV0ID09IC1FUkFOR0UpCisJCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsCisJCQkJCSJDYW4ndCByZWFkIHhhdHRyIG9uICVsdSAoZXJyICVkKSIsCisJCQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sIC1yZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIGNoZWNrIHRoZSBvbi1kaXNrIG9iamVjdCAqLworCWlmIChyZXQgPCAxKQorCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCWlmIChhdXhidWYtPnR5cGUgIT0gYXV4ZGF0YS0+dHlwZSkKKwkJZ290byBzdGFsZTsKKworCWF1eGJ1Zi0+bGVuID0gcmV0OworCisJLyogY29uc3VsdCB0aGUgbmV0ZnMgKi8KKwlpZiAob2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZGVmLT5jaGVja19hdXgpIHsKKwkJZW51bSBmc2NhY2hlX2NoZWNrYXV4IHJlc3VsdDsKKwkJdW5zaWduZWQgaW50IGRsZW47CisKKwkJZGxlbiA9IGF1eGJ1Zi0+bGVuIC0gMTsKKworCQlfZGVidWcoImNoZWNrYXV4ICVzICMldSIsCisJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5kZWYtPm5hbWUsIGRsZW4pOworCisJCXJlc3VsdCA9IGZzY2FjaGVfY2hlY2tfYXV4KCZvYmplY3QtPmZzY2FjaGUsCisJCQkJCSAgICZhdXhidWYtPmRhdGEsIGRsZW4pOworCisJCXN3aXRjaCAocmVzdWx0KSB7CisJCQkvKiBlbnRyeSBva2F5IGFzIGlzICovCisJCWNhc2UgRlNDQUNIRV9DSEVDS0FVWF9PS0FZOgorCQkJZ290byBva2F5OworCisJCQkvKiBlbnRyeSByZXF1aXJlcyB1cGRhdGUgKi8KKwkJY2FzZSBGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURToKKwkJCWJyZWFrOworCisJCQkvKiBlbnRyeSByZXF1aXJlcyBkZWxldGlvbiAqLworCQljYXNlIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU6CisJCQlnb3RvIHN0YWxlOworCisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCisJCS8qIHVwZGF0ZSB0aGUgY3VycmVudCBsYWJlbCAqLworCQlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLAorCQkJCSAgICZhdXhkYXRhLT50eXBlLCBhdXhkYXRhLT5sZW4sCisJCQkJICAgWEFUVFJfUkVQTEFDRSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsCisJCQkJCQkiQ2FuJ3QgdXBkYXRlIHhhdHRyIG9uICVsdSIKKwkJCQkJCSIgKGVycm9yICVkKSIsCisJCQkJCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vLCAtcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKK29rYXk6CisJcmV0ID0gMDsKKworZXJyb3I6CisJa2ZyZWUoYXV4YnVmKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitiYWRfdHlwZV9sZW5ndGg6CisJa2Vycm9yKCJDYWNoZSBvYmplY3QgJWx1IHhhdHRyIGxlbmd0aCBpbmNvcnJlY3QiLAorCSAgICAgICBkZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXQgPSAtRUlPOworCWdvdG8gZXJyb3I7CisKK3N0YWxlOgorCXJldCA9IC1FU1RBTEU7CisJZ290byBlcnJvcjsKK30KKworLyoKKyAqIHJlbW92ZSB0aGUgb2JqZWN0J3MgeGF0dHIgdG8gbWFyayBpdCBzdGFsZQorICovCitpbnQgY2FjaGVmaWxlc19yZW1vdmVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IHJldDsKKworCXJldCA9IHZmc19yZW1vdmV4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0VOVCB8fCByZXQgPT0gLUVOT0RBVEEpCisJCQlyZXQgPSAwOworCQllbHNlIGlmIChyZXQgIT0gLUVOT01FTSkKKwkJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsCisJCQkJCSAgICAiQ2FuJ3QgcmVtb3ZlIHhhdHRyIGZyb20gJWx1IgorCQkJCQkgICAgIiAoZXJyb3IgJWQpIiwKKwkJCQkJICAgIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sIC1yZXQpOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCAyZjM1Y2NjLi41NGRjZTc4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCWlmIChvcGxvY2tFbmFibGVkKQogCQlvcGxvY2sgPSBSRVFfT1BMT0NLOwogCkBAIC00NzksNyArNDc5LDcgQEAKIAkJcmMgPSAtRU5PTUVNOwogCWVsc2UgaWYgKHBUY29uLT51bml4X2V4dCkgewogCQlzdHJ1Y3QgY2lmc191bml4X3NldF9pbmZvX2FyZ3MgYXJncyA9IHsKLQkJCS5tb2RlCT0gbW9kZSAmIH5jdXJyZW50LT5mcy0+dW1hc2ssCisJCQkubW9kZQk9IG1vZGUgJiB+Y3VycmVudF91bWFzaygpLAogCQkJLmN0aW1lCT0gTk9fQ0hBTkdFXzY0LAogCQkJLmF0aW1lCT0gTk9fQ0hBTkdFXzY0LAogCQkJLm10aW1lCT0gTk9fQ0hBTkdFXzY0LApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IGE4Nzk3Y2MuLmYxMjFhODAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTExMjUsNyArMTEyNSw3IEBACiAJCQlnb3RvIG1rZGlyX291dDsKIAkJfQogCi0JCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCQlyYyA9IENJRlNQT1NJWENyZWF0ZSh4aWQsIHBUY29uLCBTTUJfT19ESVJFQ1RPUlkgfCBTTUJfT19DUkVBVCwKIAkJCQltb2RlLCBOVUxMIC8qIG5ldGZpZCAqLywgcEluZm8sICZvcGxvY2ssCiAJCQkJZnVsbF9wYXRoLCBjaWZzX3NiLT5sb2NhbF9ubHMsCkBAIC0xMjA0LDcgKzEyMDQsNyBAQAogCQlpZiAoKGRpcmVudHJ5LT5kX2lub2RlKSAmJiAoZGlyZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPCAyKSkKIAkJCQlkaXJlbnRyeS0+ZF9pbm9kZS0+aV9ubGluayA9IDI7CiAKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJCS8qIG11c3QgdHVybiBvbiBzZXRnaWQgYml0IGlmIHBhcmVudCBkaXIgaGFzIGl0ICovCiAJCWlmIChpbm9kZS0+aV9tb2RlICYgU19JU0dJRCkKIAkJCW1vZGUgfD0gU19JU0dJRDsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggNTVlZmRmZS4uM2Y4NGQ1ZiAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ldmVudHBvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0xMTk1LDE2ICsxMTk2LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotYXNtbGlua2FnZSBzc2l6ZV90Ci1jb21wYXRfc3lzX3JlYWR2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbikKK3N0YXRpYyBzaXplX3QgY29tcGF0X3JlYWR2KHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmxlbiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGU7CiAJc3NpemVfdCByZXQgPSAtRUJBREY7CiAKLQlmaWxlID0gZmdldChmZCk7Ci0JaWYgKCFmaWxlKQotCQlyZXR1cm4gLUVCQURGOwotCiAJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjEyLDI1ICsxMjA5LDU2IEBACiAJaWYgKCFmaWxlLT5mX29wIHx8ICghZmlsZS0+Zl9vcC0+YWlvX3JlYWQgJiYgIWZpbGUtPmZfb3AtPnJlYWQpKQogCQlnb3RvIG91dDsKIAotCXJldCA9IGNvbXBhdF9kb19yZWFkdl93cml0ZXYoUkVBRCwgZmlsZSwgdmVjLCB2bGVuLCAmZmlsZS0+Zl9wb3MpOworCXJldCA9IGNvbXBhdF9kb19yZWFkdl93cml0ZXYoUkVBRCwgZmlsZSwgdmVjLCB2bGVuLCBwb3MpOwogCiBvdXQ6CiAJaWYgKHJldCA+IDApCiAJCWFkZF9yY2hhcihjdXJyZW50LCByZXQpOwogCWluY19zeXNjcihjdXJyZW50KTsKLQlmcHV0KGZpbGUpOwogCXJldHVybiByZXQ7CiB9CiAKIGFzbWxpbmthZ2Ugc3NpemVfdAotY29tcGF0X3N5c193cml0ZXYodW5zaWduZWQgbG9uZyBmZCwgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywgdW5zaWduZWQgbG9uZyB2bGVuKQorY29tcGF0X3N5c19yZWFkdih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQkgdW5zaWduZWQgbG9uZyB2bGVuKQogewogCXN0cnVjdCBmaWxlICpmaWxlOwotCXNzaXplX3QgcmV0ID0gLUVCQURGOworCWludCBmcHV0X25lZWRlZDsKKwlzc2l6ZV90IHJldDsKIAotCWZpbGUgPSBmZ2V0KGZkKTsKKwlmaWxlID0gZmdldF9saWdodChmZCwgJmZwdXRfbmVlZGVkKTsKIAlpZiAoIWZpbGUpCiAJCXJldHVybiAtRUJBREY7CisJcmV0ID0gY29tcGF0X3JlYWR2KGZpbGUsIHZlYywgdmxlbiwgJmZpbGUtPmZfcG9zKTsKKwlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIHNzaXplX3QKK2NvbXBhdF9zeXNfcHJlYWR2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsCisJCSAgdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2xvdywgdTMyIHBvc19oaWdoKQoreworCWxvZmZfdCBwb3MgPSAoKGxvZmZfdClwb3NfaGlnaCA8PCAzMikgfCBwb3NfbG93OworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBmcHV0X25lZWRlZDsKKwlzc2l6ZV90IHJldDsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmaWxlID0gZmdldF9saWdodChmZCwgJmZwdXRfbmVlZGVkKTsKKwlpZiAoIWZpbGUpCisJCXJldHVybiAtRUJBREY7CisJcmV0ID0gY29tcGF0X3JlYWR2KGZpbGUsIHZlYywgdmxlbiwgJnBvcyk7CisJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdCBjb21wYXRfd3JpdGV2KHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsCisJCQkgICAgdW5zaWduZWQgbG9uZyB2bGVuLCBsb2ZmX3QgKnBvcykKK3sKKwlzc2l6ZV90IHJldCA9IC1FQkFERjsKKwogCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJZ290byBvdXQ7CiAKQEAgLTEyMzgsMTMgKzEyNjYsNDcgQEAKIAlpZiAoIWZpbGUtPmZfb3AgfHwgKCFmaWxlLT5mX29wLT5haW9fd3JpdGUgJiYgIWZpbGUtPmZfb3AtPndyaXRlKSkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBjb21wYXRfZG9fcmVhZHZfd3JpdGV2KFdSSVRFLCBmaWxlLCB2ZWMsIHZsZW4sICZmaWxlLT5mX3Bvcyk7CisJcmV0ID0gY29tcGF0X2RvX3JlYWR2X3dyaXRldihXUklURSwgZmlsZSwgdmVjLCB2bGVuLCBwb3MpOwogCiBvdXQ6CiAJaWYgKHJldCA+IDApCiAJCWFkZF93Y2hhcihjdXJyZW50LCByZXQpOwogCWluY19zeXNjdyhjdXJyZW50KTsKLQlmcHV0KGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK2FzbWxpbmthZ2Ugc3NpemVfdAorY29tcGF0X3N5c193cml0ZXYodW5zaWduZWQgbG9uZyBmZCwgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKKwkJICB1bnNpZ25lZCBsb25nIHZsZW4pCit7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJaW50IGZwdXRfbmVlZGVkOworCXNzaXplX3QgcmV0OworCisJZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gLUVCQURGOworCXJldCA9IGNvbXBhdF93cml0ZXYoZmlsZSwgdmVjLCB2bGVuLCAmZmlsZS0+Zl9wb3MpOworCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworCXJldHVybiByZXQ7Cit9CisKK2FzbWxpbmthZ2Ugc3NpemVfdAorY29tcGF0X3N5c19wd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsCisJCSAgIHVuc2lnbmVkIGxvbmcgdmxlbiwgdTMyIHBvc19sb3csIHUzMiBwb3NfaGlnaCkKK3sKKwlsb2ZmX3QgcG9zID0gKChsb2ZmX3QpcG9zX2hpZ2ggPDwgMzIpIHwgcG9zX2xvdzsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgZnB1dF9uZWVkZWQ7CisJc3NpemVfdCByZXQ7CisKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gLUVCQURGOworCXJldCA9IGNvbXBhdF93cml0ZXYoZmlsZSwgdmVjLCB2bGVuLCAmcG9zKTsKKwlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDQxLDEyICsxNTAzLDE1IEBACiAJYnBybS0+Y3JlZCA9IHByZXBhcmVfZXhlY19jcmVkcygpOwogCWlmICghYnBybS0+Y3JlZCkKIAkJZ290byBvdXRfdW5sb2NrOwotCWNoZWNrX3Vuc2FmZV9leGVjKGJwcm0pOworCisJcmV0dmFsID0gY2hlY2tfdW5zYWZlX2V4ZWMoYnBybSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJZmlsZSA9IG9wZW5fZXhlYyhmaWxlbmFtZSk7CiAJcmV0dmFsID0gUFRSX0VSUihmaWxlKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X3VubWFyazsKIAogCXNjaGVkX2V4ZWMoKTsKIApAQCAtMTQ4OCw2ICsxNTUzLDkgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCisJd3JpdGVfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCWN1cnJlbnQtPmZzLT5pbl9leGVjID0gMDsKKwl3cml0ZV91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKIAljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CkBAIC0xNTA2LDYgKzE1NzQsMTEgQEAKIAkJZnB1dChicHJtLT5maWxlKTsKIAl9CiAKK291dF91bm1hcms6CisJd3JpdGVfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCWN1cnJlbnQtPmZzLT5pbl9leGVjID0gMDsKKwl3cml0ZV91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwogb3V0X3VubG9jazoKIAljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggZmY3ODY2OC4uM2U4N2NlNCAxMDA2NDQKLS0tIGEvZnMvY29tcGF0X2lvY3RsLmMKKysrIGIvZnMvY29tcGF0X2lvY3RsLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2JyaWRnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CiAjaW5jbHVkZSA8bGludXgva2QuaD4KICNpbmNsdWRlIDxsaW51eC9yb3V0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpkaWZmIC0tZ2l0IGEvZnMvY3JhbWZzL2lub2RlLmMgYi9mcy9jcmFtZnMvaW5vZGUuYwppbmRleCBhMDczMzhkLi5kZDM2MzRlIDEwMDY0NAotLS0gYS9mcy9jcmFtZnMvaW5vZGUuYworKysgYi9mcy9jcmFtZnMvaW5vZGUuYwpAQCAtMzE4LDYgKzMxOCw3IEBACiBzdGF0aWMgaW50IGNyYW1mc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlidWYtPmZfdHlwZSA9IENSQU1GU19NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CkBAIC0zMjYsNiArMzI3LDggQEAKIAlidWYtPmZfYmF2YWlsID0gMDsKIAlidWYtPmZfZmlsZXMgPSBDUkFNRlNfU0Ioc2IpLT5maWxlczsKIAlidWYtPmZfZmZyZWUgPSAwOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gQ1JBTUZTX01BWFBBVEhMRU47CiAJcmV0dXJuIDA7CiB9CkBAIC00NTksMTEgKzQ2MiwxNCBAQAogc3RhdGljIGludCBjcmFtZnNfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICogcGFnZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKLQl1MzIgbWF4YmxvY2ssIGJ5dGVzX2ZpbGxlZDsKKwl1MzIgbWF4YmxvY2s7CisJaW50IGJ5dGVzX2ZpbGxlZDsKIAl2b2lkICpwZ2RhdGE7CiAKIAltYXhibG9jayA9IChpbm9kZS0+aV9zaXplICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlieXRlc19maWxsZWQgPSAwOworCXBnZGF0YSA9IGttYXAocGFnZSk7CisKIAlpZiAocGFnZS0+aW5kZXggPCBtYXhibG9jaykgewogCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJCXUzMiBibGtwdHJfb2Zmc2V0ID0gT0ZGU0VUKGlub2RlKSArIHBhZ2UtPmluZGV4KjQ7CkBAIC00NzIsMzAgKzQ3OCw0MyBAQAogCQlzdGFydF9vZmZzZXQgPSBPRkZTRVQoaW5vZGUpICsgbWF4YmxvY2sqNDsKIAkJbXV0ZXhfbG9jaygmcmVhZF9tdXRleCk7CiAJCWlmIChwYWdlLT5pbmRleCkKLQkJCXN0YXJ0X29mZnNldCA9ICoodTMyICopIGNyYW1mc19yZWFkKHNiLCBibGtwdHJfb2Zmc2V0LTQsIDQpOwotCQljb21wcl9sZW4gPSAoKih1MzIgKikgY3JhbWZzX3JlYWQoc2IsIGJsa3B0cl9vZmZzZXQsIDQpIC0gc3RhcnRfb2Zmc2V0KTsKKwkJCXN0YXJ0X29mZnNldCA9ICoodTMyICopIGNyYW1mc19yZWFkKHNiLCBibGtwdHJfb2Zmc2V0LTQsCisJCQkJNCk7CisJCWNvbXByX2xlbiA9ICgqKHUzMiAqKSBjcmFtZnNfcmVhZChzYiwgYmxrcHRyX29mZnNldCwgNCkgLQorCQkJc3RhcnRfb2Zmc2V0KTsKIAkJbXV0ZXhfdW5sb2NrKCZyZWFkX211dGV4KTsKLQkJcGdkYXRhID0ga21hcChwYWdlKTsKKwogCQlpZiAoY29tcHJfbGVuID09IDApCiAJCQk7IC8qIGhvbGUgKi8KLQkJZWxzZSBpZiAoY29tcHJfbGVuID4gKFBBR0VfQ0FDSEVfU0laRSA8PCAxKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiY3JhbWZzOiBiYWQgY29tcHJlc3NlZCBibG9ja3NpemUgJXVcbiIsIGNvbXByX2xlbik7Ci0JCWVsc2UgeworCQllbHNlIGlmICh1bmxpa2VseShjb21wcl9sZW4gPiAoUEFHRV9DQUNIRV9TSVpFIDw8IDEpKSkgeworCQkJcHJfZXJyKCJjcmFtZnM6IGJhZCBjb21wcmVzc2VkIGJsb2Nrc2l6ZSAldVxuIiwKKwkJCQljb21wcl9sZW4pOworCQkJZ290byBlcnI7CisJCX0gZWxzZSB7CiAJCQltdXRleF9sb2NrKCZyZWFkX211dGV4KTsKIAkJCWJ5dGVzX2ZpbGxlZCA9IGNyYW1mc191bmNvbXByZXNzX2Jsb2NrKHBnZGF0YSwKIAkJCQkgUEFHRV9DQUNIRV9TSVpFLAogCQkJCSBjcmFtZnNfcmVhZChzYiwgc3RhcnRfb2Zmc2V0LCBjb21wcl9sZW4pLAogCQkJCSBjb21wcl9sZW4pOwogCQkJbXV0ZXhfdW5sb2NrKCZyZWFkX211dGV4KTsKKwkJCWlmICh1bmxpa2VseShieXRlc19maWxsZWQgPCAwKSkKKwkJCQlnb3RvIGVycjsKIAkJfQotCX0gZWxzZQotCQlwZ2RhdGEgPSBrbWFwKHBhZ2UpOworCX0KKwogCW1lbXNldChwZ2RhdGEgKyBieXRlc19maWxsZWQsIDAsIFBBR0VfQ0FDSEVfU0laRSAtIGJ5dGVzX2ZpbGxlZCk7Ci0Ja3VubWFwKHBhZ2UpOwogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWt1bm1hcChwYWdlKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcmV0dXJuIDA7CisKK2VycjoKKwlrdW5tYXAocGFnZSk7CisJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CisJU2V0UGFnZUVycm9yKHBhZ2UpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjcmFtZnNfYW9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy91bmNvbXByZXNzLmMgYi9mcy9jcmFtZnMvdW5jb21wcmVzcy5jCmluZGV4IGZjM2NjYjcuLjAyMzMyOTggMTAwNjQ0Ci0tLSBhL2ZzL2NyYW1mcy91bmNvbXByZXNzLmMKKysrIGIvZnMvY3JhbWZzL3VuY29tcHJlc3MuYwpAQCAtNTAsNyArNTAsNyBAQAogZXJyOgogCXByaW50aygiRXJyb3IgJWQgd2hpbGUgZGVjb21wcmVzc2luZyFcbiIsIGVycik7CiAJcHJpbnRrKCIlcCglZCktPiVwKCVkKVxuIiwgc3JjLCBzcmNsZW4sIGRzdCwgZHN0bGVuKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTzsKIH0KIAogaW50IGNyYW1mc191bmNvbXByZXNzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggOTBiYmQ3ZS4uNzYxZDMwYiAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0zMiw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogaW50IHN5c2N0bF92ZnNfY2FjaGVfcHJlc3N1cmUgX19yZWFkX21vc3RseSA9IDEwMDsKZGlmZiAtLWdpdCBhL2ZzL2RlYnVnZnMvaW5vZGUuYyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwppbmRleCA4MWFlOWVhLi4wNjYyYmE2IDEwMDY0NAotLS0gYS9mcy9kZWJ1Z2ZzL2lub2RlLmMKKysrIGIvZnMvZGVidWdmcy9pbm9kZS5jCkBAIC0zMCw2ICszMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmRlYnVnZnNfbW91bnQ7CiBzdGF0aWMgaW50IGRlYnVnZnNfbW91bnRfY291bnQ7CitzdGF0aWMgYm9vbCBkZWJ1Z2ZzX3JlZ2lzdGVyZWQ7CiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmRlYnVnZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7CkBAIC00OTYsNiArNDk3LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZWJ1Z2ZzX3JlbmFtZSk7CiAKKy8qKgorICogZGVidWdmc19pbml0aWFsaXplZCAtIFRlbGxzIHdoZXRoZXIgZGVidWdmcyBoYXMgYmVlbiByZWdpc3RlcmVkCisgKi8KK2Jvb2wgZGVidWdmc19pbml0aWFsaXplZCh2b2lkKQoreworCXJldHVybiBkZWJ1Z2ZzX3JlZ2lzdGVyZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZWJ1Z2ZzX2luaXRpYWxpemVkKTsKKworCiBzdGF0aWMgc3RydWN0IGtvYmplY3QgKmRlYnVnX2tvYmo7CiAKIHN0YXRpYyBpbnQgX19pbml0IGRlYnVnZnNfaW5pdCh2b2lkKQpAQCAtNTA5LDExICs1MjAsMTYgQEAKIAlyZXR2YWwgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZkZWJ1Z19mc190eXBlKTsKIAlpZiAocmV0dmFsKQogCQlrb2JqZWN0X3B1dChkZWJ1Z19rb2JqKTsKKwllbHNlCisJCWRlYnVnZnNfcmVnaXN0ZXJlZCA9IHRydWU7CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVidWdmc19leGl0KHZvaWQpCiB7CisJZGVidWdmc19yZWdpc3RlcmVkID0gZmFsc2U7CisKIAlzaW1wbGVfcmVsZWFzZV9mcygmZGVidWdmc19tb3VudCwgJmRlYnVnZnNfbW91bnRfY291bnQpOwogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZGVidWdfZnNfdHlwZSk7CiAJa29iamVjdF9wdXQoZGVidWdfa29iaik7CmRpZmYgLS1naXQgYS9mcy9kcm9wX2NhY2hlcy5jIGIvZnMvZHJvcF9jYWNoZXMuYwppbmRleCA0NGQ3MjVmLi5iNmE3MTlhIDEwMDY0NAotLS0gYS9mcy9kcm9wX2NhY2hlcy5jCisrKyBiL2ZzL2Ryb3BfY2FjaGVzLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7Ci0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUV8SV9ORVcpKQorCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJY29udGludWU7CiAJCWlmIChpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzID09IDApCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL2Vmcy9zdXBlci5jIGIvZnMvZWZzL3N1cGVyLmMKaW5kZXggNzNiMTljZi4uZjA0OTQyOCAxMDA2NDQKLS0tIGEvZnMvZWZzL3N1cGVyLmMKKysrIGIvZnMvZWZzL3N1cGVyLmMKQEAgLTMyOSwxOCArMzI5LDIyIEBACiB9CiAKIHN0YXRpYyBpbnQgZWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpIHsKLQlzdHJ1Y3QgZWZzX3NiX2luZm8gKnNiID0gU1VQRVJfSU5GTyhkZW50cnktPmRfc2IpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJc3RydWN0IGVmc19zYl9pbmZvICpzYmkgPSBTVVBFUl9JTkZPKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlICAgID0gRUZTX1NVUEVSX01BR0lDOwkvKiBlZnMgbWFnaWMgbnVtYmVyICovCiAJYnVmLT5mX2JzaXplICAgPSBFRlNfQkxPQ0tTSVpFOwkJLyogYmxvY2tzaXplICovCi0JYnVmLT5mX2Jsb2NrcyAgPSBzYi0+dG90YWxfZ3JvdXBzICoJLyogdG90YWwgZGF0YSBibG9ja3MgKi8KLQkJCShzYi0+Z3JvdXBfc2l6ZSAtIHNiLT5pbm9kZV9ibG9ja3MpOwotCWJ1Zi0+Zl9iZnJlZSAgID0gc2ItPmRhdGFfZnJlZTsJCS8qIGZyZWUgZGF0YSBibG9ja3MgKi8KLQlidWYtPmZfYmF2YWlsICA9IHNiLT5kYXRhX2ZyZWU7CQkvKiBmcmVlIGJsb2NrcyBmb3Igbm9uLXJvb3QgKi8KLQlidWYtPmZfZmlsZXMgICA9IHNiLT50b3RhbF9ncm91cHMgKgkvKiB0b3RhbCBpbm9kZXMgKi8KLQkJCXNiLT5pbm9kZV9ibG9ja3MgKgorCWJ1Zi0+Zl9ibG9ja3MgID0gc2JpLT50b3RhbF9ncm91cHMgKgkvKiB0b3RhbCBkYXRhIGJsb2NrcyAqLworCQkJKHNiaS0+Z3JvdXBfc2l6ZSAtIHNiaS0+aW5vZGVfYmxvY2tzKTsKKwlidWYtPmZfYmZyZWUgICA9IHNiaS0+ZGF0YV9mcmVlOwkvKiBmcmVlIGRhdGEgYmxvY2tzICovCisJYnVmLT5mX2JhdmFpbCAgPSBzYmktPmRhdGFfZnJlZTsJLyogZnJlZSBibG9ja3MgZm9yIG5vbi1yb290ICovCisJYnVmLT5mX2ZpbGVzICAgPSBzYmktPnRvdGFsX2dyb3VwcyAqCS8qIHRvdGFsIGlub2RlcyAqLworCQkJc2JpLT5pbm9kZV9ibG9ja3MgKgogCQkJKEVGU19CTE9DS1NJWkUgLyBzaXplb2Yoc3RydWN0IGVmc19kaW5vZGUpKTsKLQlidWYtPmZfZmZyZWUgICA9IHNiLT5pbm9kZV9mcmVlOwkvKiBmcmVlIGlub2RlcyAqLworCWJ1Zi0+Zl9mZnJlZSAgID0gc2JpLT5pbm9kZV9mcmVlOwkvKiBmcmVlIGlub2RlcyAqLworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gRUZTX01BWE5BTUVMRU47CS8qIG1heCBmaWxlbmFtZSBsZW5ndGggKi8KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGM1MTI4ZmIuLjA1MmE5NjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0xMDU2LDI4ICsxMDU3LDM1IEBACiAgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIGN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCB0byBwcm90ZWN0IGFnYWluc3QKICAqICAgUFRSQUNFX0FUVEFDSAogICovCi12b2lkIGNoZWNrX3Vuc2FmZV9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCitpbnQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50LCAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIG5fZnMsIG5fc2lnaGFuZDsKKwl1bnNpZ25lZCBuX2ZzOworCWludCByZXMgPSAwOwogCiAJYnBybS0+dW5zYWZlID0gdHJhY2Vob29rX3Vuc2FmZV9leGVjKHApOwogCiAJbl9mcyA9IDE7Ci0Jbl9zaWdoYW5kID0gMTsKKwl3cml0ZV9sb2NrKCZwLT5mcy0+bG9jayk7CiAJbG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKIAlmb3IgKHQgPSBuZXh0X3RocmVhZChwKTsgdCAhPSBwOyB0ID0gbmV4dF90aHJlYWQodCkpIHsKIAkJaWYgKHQtPmZzID09IHAtPmZzKQogCQkJbl9mcysrOwotCQluX3NpZ2hhbmQrKzsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJnAtPmZzLT5jb3VudCkgPiBuX2ZzIHx8Ci0JICAgIGF0b21pY19yZWFkKCZwLT5zaWdoYW5kLT5jb3VudCkgPiBuX3NpZ2hhbmQpCisJaWYgKHAtPmZzLT51c2VycyA+IG5fZnMpIHsKIAkJYnBybS0+dW5zYWZlIHw9IExTTV9VTlNBRkVfU0hBUkU7CisJfSBlbHNlIHsKKwkJaWYgKHAtPmZzLT5pbl9leGVjKQorCQkJcmVzID0gLUVBR0FJTjsKKwkJcC0+ZnMtPmluX2V4ZWMgPSAxOworCX0KIAogCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKKwl3cml0ZV91bmxvY2soJnAtPmZzLT5sb2NrKTsKKworCXJldHVybiByZXM7CiB9CiAKIC8qIApAQCAtMTI5NiwxMiArMTMwNCwxNSBAQAogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKIAlpZiAoIWJwcm0tPmNyZWQpCiAJCWdvdG8gb3V0X3VubG9jazsKLQljaGVja191bnNhZmVfZXhlYyhicHJtKTsKKworCXJldHZhbCA9IGNoZWNrX3Vuc2FmZV9leGVjKGJwcm0pOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0X3VubG9jazsKIAogCWZpbGUgPSBvcGVuX2V4ZWMoZmlsZW5hbWUpOwogCXJldHZhbCA9IFBUUl9FUlIoZmlsZSk7CiAJaWYgKElTX0VSUihmaWxlKSkKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF91bm1hcms7CiAKIAlzY2hlZF9leGVjKCk7CiAKQEAgLTEzNDQsNiArMTM1NSw5IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLworCXdyaXRlX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CisJd3JpdGVfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOwpAQCAtMTM2Miw2ICsxMzc2LDExIEBACiAJCWZwdXQoYnBybS0+ZmlsZSk7CiAJfQogCitvdXRfdW5tYXJrOgorCXdyaXRlX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CisJd3JpdGVfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisKIG91dF91bmxvY2s6CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9leG9mcy9CVUdTIGIvZnMvZXhvZnMvQlVHUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjJkNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvQlVHUwpAQCAtMCwwICsxLDMgQEAKKy0gT3V0LW9mLXNwYWNlIG1heSBjYXVzZSBhIHNldmVyZSBwcm9ibGVtIGlmIHRoZSBvYmplY3QgKGFuZCBkaXJlY3RvcnkgZW50cnkpCisgIHdlcmUgd3JpdHRlbiwgYnV0IHRoZSBpbm9kZSBhdHRyaWJ1dGVzIGZhaWxlZC4gVGhlbiBpZiB0aGUgZmlsZXN5c3RlbSB3YXMKKyAgdW5tb3VudGVkIGFuZCBtb3VudGVkIHRoZSBrZXJuZWwgY2FuIGdldCBpbnRvIGFuIGVuZGxlc3MgbG9vcCBkb2luZyBhIHJlYWRkaXIuCmRpZmYgLS1naXQgYS9mcy9leG9mcy9LYnVpbGQgYi9mcy9leG9mcy9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyZDIyZAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4b2ZzL0tidWlsZApAQCAtMCwwICsxLDE2IEBACisjCisjIEtidWlsZCBmb3IgdGhlIEVYT0ZTIG1vZHVsZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggUGFuYXNhcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBBdXRob3JzOgorIyAgIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIEtidWlsZCAtIEdldHMgaW5jbHVkZWQgZnJvbSB0aGUgS2VybmVscyBNYWtlZmlsZSBhbmQgYnVpbGQgc3lzdGVtCisjCisKK2V4b2ZzLXkgOj0gb3NkLm8gaW5vZGUubyBmaWxlLm8gc3ltbGluay5vIG5hbWVpLm8gZGlyLm8gc3VwZXIubworb2JqLSQoQ09ORklHX0VYT0ZTX0ZTKSArPSBleG9mcy5vCmRpZmYgLS1naXQgYS9mcy9leG9mcy9LY29uZmlnIGIvZnMvZXhvZnMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjE5NGIyCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvS2NvbmZpZwpAQCAtMCwwICsxLDEzIEBACitjb25maWcgRVhPRlNfRlMKKwl0cmlzdGF0ZSAiZXhvZnM6IE9TRCBiYXNlZCBmaWxlIHN5c3RlbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0NTSV9PU0RfVUxECisJaGVscAorCSAgRVhPRlMgaXMgYSBmaWxlIHN5c3RlbSB0aGF0IHVzZXMgYW4gT1NEIHN0b3JhZ2UgZGV2aWNlLAorCSAgYXMgaXRzIGJhY2tpbmcgc3RvcmFnZS4KKworIyBEZWJ1Z2dpbmctcmVsYXRlZCBzdHVmZgorY29uZmlnIEVYT0ZTX0RFQlVHCisJYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIEVYT0ZTX0ZTCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBFWE9GUyBkZWJ1ZyBwcmludHMuCmRpZmYgLS1naXQgYS9mcy9leG9mcy9jb21tb24uaCBiL2ZzL2V4b2ZzL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTEyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9jb21tb24uaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIGNvbW1vbi5oIC0gQ29tbW9uIGRlZmluaXRpb25zIGZvciBib3RoIEtlcm5lbCBhbmQgdXNlci1tb2RlIHV0aWxpdGllcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfX0VYT0ZTX0NPTV9IX18KKyNkZWZpbmUgX19FWE9GU19DT01fSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8c2NzaS9vc2RfYXR0cmlidXRlcy5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX2luaXRpYXRvci5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX3NlYy5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT2JqZWN0IElEIHJlbGF0ZWQgZGVmaW5lcworICogTk9URTogaW5vZGUjID0gb2JqZWN0IElEIC0gRVhPRlNfT0JKX09GRgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEVYT0ZTX01JTl9QSUQgICAweDEwMDAwCS8qIFNtYWxsZXN0IHBhcnRpdGlvbiBJRCAqLworI2RlZmluZSBFWE9GU19PQkpfT0ZGCTB4MTAwMDAJLyogb2Zmc2V0IGZvciBvYmplY3RzICovCisjZGVmaW5lIEVYT0ZTX1NVUEVSX0lECTB4MTAwMDAJLyogb2JqZWN0IElEIGZvciBvbi1kaXNrIHN1cGVyYmxvY2sgKi8KKyNkZWZpbmUgRVhPRlNfUk9PVF9JRAkweDEwMDAyCS8qIG9iamVjdCBJRCBmb3Igcm9vdCBkaXJlY3RvcnkgKi8KKworLyogZXhvZnMgQXBwbGljYXRpb24gc3BlY2lmaWMgcGFnZS9hdHRyaWJ1dGUgKi8KKyMgZGVmaW5lIEVYT0ZTX0FQQUdFX0ZTX0RBVEEJKE9TRF9BUEFHRV9BUFBfREVGSU5FRF9GSVJTVCArIDMpCisjIGRlZmluZSBFWE9GU19BVFRSX0lOT0RFX0RBVEEJMQorCisvKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHdlIGNhbiBoYXZlIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisgKiBpbm9kZSBudW1iZXIuICBUaGlzIGlzIHRoZSBsYXJnZXN0IG9iamVjdCBJRCB0aGF0IHRoZSBmaWxlIHN5c3RlbSBzdXBwb3J0cy4KKyAqIE9iamVjdCBJRHMgMCwgMSwgYW5kIDIgYXJlIGFsd2F5cyBpbiB1c2UgKHNlZSBhYm92ZSBkZWZpbmVzKS4KKyAqLworZW51bSB7CisJRVhPRlNfTUFYX0lOT19JRCA9IChzaXplb2YoaW5vX3QpICogOCA9PSA2NCkgPyBVTExPTkdfTUFYIDoKKwkJCQkJKDFVTEwgPDwgKHNpemVvZihpbm9fdCkgKiA4VUxMIC0gMVVMTCkpLAorCUVYT0ZTX01BWF9JRAkgPSAoRVhPRlNfTUFYX0lOT19JRCAtIDEgLSBFWE9GU19PQkpfT0ZGKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaXNjLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEVYT0ZTX0JMS1NISUZUCTEyCisjZGVmaW5lIEVYT0ZTX0JMS1NJWkUJKDFVTCA8PCBFWE9GU19CTEtTSElGVCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cGVyYmxvY2stcmVsYXRlZCB0aGluZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBFWE9GU19TVVBFUl9NQUdJQwkweDVERjUKKworLyoKKyAqIFRoZSBmaWxlIHN5c3RlbSBjb250cm9sIGJsb2NrIC0gc3RvcmVkIGluIGFuIG9iamVjdCdzIGRhdGEgKG1haW5seSwgdGhlIG9uZQorICogd2l0aCBJRCBFWE9GU19TVVBFUl9JRCkuICBUaGlzIGlzIHdoZXJlIHRoZSBpbi1tZW1vcnkgc3VwZXJibG9jayBpcyBzdG9yZWQKKyAqIG9uIGRpc2suICBSaWdodCBub3cgaXQganVzdCBoYXMgYSBtYWdpYyB2YWx1ZSwgd2hpY2ggaXMgYmFzaWNhbGx5IGEgc2FuaXR5CisgKiBjaGVjayBvbiBvdXIgYWJpbGl0eSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBvYmplY3Qgc3RvcmUuCisgKi8KK3N0cnVjdCBleG9mc19mc2NiIHsKKwlfX2xlNjQgIHNfbmV4dGlkOwkvKiBIaWdoZXN0IG9iamVjdCBJRCB1c2VkICovCisJX19sZTMyICBzX251bWZpbGVzOwkvKiBOdW1iZXIgb2YgZmlsZXMgb24gZnMgKi8KKwlfX2xlMTYgIHNfbWFnaWM7CS8qIE1hZ2ljIHNpZ25hdHVyZSAqLworCV9fbGUxNiAgc19uZXdmczsJLyogTm9uLXplcm8gaWYgdGhpcyBpcyBhIG5ldyBmcyAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlub2RlLXJlbGF0ZWQgdGhpbmdzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRVhPRlNfSURBVEEJCTUKKworLyoKKyAqIFRoZSBmaWxlIGNvbnRyb2wgYmxvY2sgLSBzdG9yZWQgaW4gYW4gb2JqZWN0J3MgYXR0cmlidXRlcy4gIFRoaXMgaXMgd2hlcmUKKyAqIHRoZSBpbi1tZW1vcnkgaW5vZGUgaXMgc3RvcmVkIG9uIGRpc2suCisgKi8KK3N0cnVjdCBleG9mc19mY2IgeworCV9fbGU2NCAgaV9zaXplOwkJCS8qIFNpemUgb2YgdGhlIGZpbGUgKi8KKwlfX2xlMTYgIGlfbW9kZTsgICAgICAgICAJLyogRmlsZSBtb2RlICovCisJX19sZTE2ICBpX2xpbmtzX2NvdW50OyAgCS8qIExpbmtzIGNvdW50ICovCisJX19sZTMyICBpX3VpZDsgICAgICAgICAgCS8qIE93bmVyIFVpZCAqLworCV9fbGUzMiAgaV9naWQ7ICAgICAgICAgIAkvKiBHcm91cCBJZCAqLworCV9fbGUzMiAgaV9hdGltZTsgICAgICAgIAkvKiBBY2Nlc3MgdGltZSAqLworCV9fbGUzMiAgaV9jdGltZTsgICAgICAgIAkvKiBDcmVhdGlvbiB0aW1lICovCisJX19sZTMyICBpX210aW1lOyAgICAgICAgCS8qIE1vZGlmaWNhdGlvbiB0aW1lICovCisJX19sZTMyICBpX2ZsYWdzOyAgICAgICAgCS8qIEZpbGUgZmxhZ3MgKHVudXNlZCBmb3Igbm93KSovCisJX19sZTMyICBpX2dlbmVyYXRpb247ICAgCS8qIEZpbGUgdmVyc2lvbiAoZm9yIE5GUykgKi8KKwlfX2xlMzIgIGlfZGF0YVtFWE9GU19JREFUQV07CS8qIFNob3J0IHN5bWxpbmsgbmFtZXMgYW5kIGRldmljZSAjcyAqLworfTsKKworI2RlZmluZSBFWE9GU19JTk9fQVRUUl9TSVpFCXNpemVvZihzdHJ1Y3QgZXhvZnNfZmNiKQorCisvKiBUaGlzIGlzIHRoZSBBdHRyaWJ1dGUgdGhlIGZjYiBpcyBzdG9yZWQgaW4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX193ZWFrIG9zZF9hdHRyIGdfYXR0cl9pbm9kZV9kYXRhID0gQVRUUl9ERUYoCisJRVhPRlNfQVBBR0VfRlNfREFUQSwKKwlFWE9GU19BVFRSX0lOT0RFX0RBVEEsCisJRVhPRlNfSU5PX0FUVFJfU0laRSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBkZW50cnktcmVsYXRlZCB0aGluZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBFWE9GU19OQU1FX0xFTgkyNTUKKworLyoKKyAqIFRoZSBvbi1kaXNrIGRpcmVjdG9yeSBlbnRyeQorICovCitzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5IHsKKwlfX2xlNjQJCWlub2RlX25vOwkJLyogaW5vZGUgbnVtYmVyICAgICAgICAgICAqLworCV9fbGUxNgkJcmVjX2xlbjsJCS8qIGRpcmVjdG9yeSBlbnRyeSBsZW5ndGggKi8KKwl1OAkJbmFtZV9sZW47CQkvKiBuYW1lIGxlbmd0aCAgICAgICAgICAgICovCisJdTgJCWZpbGVfdHlwZTsJCS8qIHVtbS4uLmZpbGUgdHlwZSAgICAgICAgKi8KKwljaGFyCQluYW1lW0VYT0ZTX05BTUVfTEVOXTsJLyogZmlsZSBuYW1lICAgICAgICAgICAgICAqLworfTsKKworZW51bSB7CisJRVhPRlNfRlRfVU5LTk9XTiwKKwlFWE9GU19GVF9SRUdfRklMRSwKKwlFWE9GU19GVF9ESVIsCisJRVhPRlNfRlRfQ0hSREVWLAorCUVYT0ZTX0ZUX0JMS0RFViwKKwlFWE9GU19GVF9GSUZPLAorCUVYT0ZTX0ZUX1NPQ0ssCisJRVhPRlNfRlRfU1lNTElOSywKKwlFWE9GU19GVF9NQVgKK307CisKKyNkZWZpbmUgRVhPRlNfRElSX1BBRAkJCTQKKyNkZWZpbmUgRVhPRlNfRElSX1JPVU5ECQkJKEVYT0ZTX0RJUl9QQUQgLSAxKQorI2RlZmluZSBFWE9GU19ESVJfUkVDX0xFTihuYW1lX2xlbikgXAorCSgoKG5hbWVfbGVuKSArIG9mZnNldG9mKHN0cnVjdCBleG9mc19kaXJfZW50cnksIG5hbWUpICArIFwKKwkgIEVYT0ZTX0RJUl9ST1VORCkgJiB+RVhPRlNfRElSX1JPVU5EKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogb3NkLmMgICAgICAgICAgICAgICAgICovCit2b2lkIGV4b2ZzX21ha2VfY3JlZGVudGlhbCh1OCBjcmVkX2FbT1NEX0NBUF9MRU5dLAorCQkJICAgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaik7CisKK2ludCBleG9mc19jaGVja19va19yZXNpZChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB1NjQgKmluX3Jlc2lkLCB1NjQgKm91dF9yZXNpZCk7CitzdGF0aWMgaW5saW5lIGludCBleG9mc19jaGVja19vayhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCXJldHVybiBleG9mc19jaGVja19va19yZXNpZChvciwgTlVMTCwgTlVMTCk7Cit9CitpbnQgZXhvZnNfc3luY19vcChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBpbnQgdGltZW91dCwgdTggKmNyZWQpOworaW50IGV4b2ZzX2FzeW5jX29wKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJb3NkX3JlcV9kb25lX2ZuICphc3luY19kb25lLCB2b2lkICpjYWxsZXJfY29udGV4dCwgdTggKmNyZWQpOworCitpbnQgZXh0cmFjdF9hdHRyX2Zyb21fcmVxKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHN0cnVjdCBvc2RfYXR0ciAqYXR0cik7CisKK2ludCBvc2RfcmVxX3JlYWRfa2VybihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHU2NCBvZmZzZXQsIHZvaWQgKmJ1ZmYsIHU2NCBsZW4pOworCitpbnQgb3NkX3JlcV93cml0ZV9rZXJuKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgdTY0IG9mZnNldCwgdm9pZCAqYnVmZiwgdTY0IGxlbik7CisKKyNlbmRpZiAvKmlmbmRlZiBfX0VYT0ZTX0NPTV9IX18qLwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvZGlyLmMgYi9mcy9leG9mcy9kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWIwYzhjCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvZGlyLmMKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEF2aXNoYXkgVHJhZWdlciAoYXZpc2hheUBnbWFpbC5jb20pIChhdmlzaGF5QGlsLmlibS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOQorICogQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqCisgKiBDb3B5cmlnaHRzIGZvciBjb2RlIHRha2VuIGZyb20gZXh0MjoKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUKKyAqICAgICBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiAgICAgTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKiAgICAgZnJvbQorICogICAgIGxpbnV4L2ZzL21pbml4L2lub2RlLmMKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgZXhvZnMuCisgKgorICogZXhvZnMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBTaW5jZSBpdCBpcyBiYXNlZCBvbiBleHQyLCBhbmQgdGhlIG9ubHkKKyAqIHZhbGlkIHZlcnNpb24gb2YgR1BMIGZvciB0aGUgTGludXgga2VybmVsIGlzIHZlcnNpb24gMiwgdGhlIG9ubHkgdmFsaWQKKyAqIHZlcnNpb24gb2YgR1BMIGZvciBleG9mcyBpcyB2ZXJzaW9uIDIuCisgKgorICogZXhvZnMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIGV4b2ZzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJleG9mcy5oIgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGV4b2ZzX2NodW5rX3NpemUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXhvZnNfcHV0X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJa3VubWFwKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK30KKworLyogQWNjZXNzZXMgZGlyJ3MgaW5vZGUtPmlfc2l6ZSBtdXN0IGJlIGNhbGxlZCB1bmRlciBpbm9kZSBsb2NrICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGlyX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIChpbm9kZS0+aV9zaXplICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGV4b2ZzX2xhc3RfYnl0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIHBhZ2VfbnIpCit7CisJbG9mZl90IGxhc3RfYnl0ZSA9IGlub2RlLT5pX3NpemU7CisKKwlsYXN0X2J5dGUgLT0gcGFnZV9uciA8PCBQQUdFX0NBQ0hFX1NISUZUOworCWlmIChsYXN0X2J5dGUgPiBQQUdFX0NBQ0hFX1NJWkUpCisJCWxhc3RfYnl0ZSA9IFBBR0VfQ0FDSEVfU0laRTsKKwlyZXR1cm4gbGFzdF9ieXRlOworfQorCitzdGF0aWMgaW50IGV4b2ZzX2NvbW1pdF9jaHVuayhzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IG1hcHBpbmctPmhvc3Q7CisJaW50IGVyciA9IDA7CisKKwlkaXItPmlfdmVyc2lvbisrOworCisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpCisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKworCWlmIChwb3MrbGVuID4gZGlyLT5pX3NpemUpIHsKKwkJaV9zaXplX3dyaXRlKGRpciwgcG9zK2xlbik7CisJCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKKwl9CisJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisKKwlpZiAoSVNfRElSU1lOQyhkaXIpKQorCQllcnIgPSB3cml0ZV9vbmVfcGFnZShwYWdlLCAxKTsKKwllbHNlCisJCXVubG9ja19wYWdlKHBhZ2UpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZXhvZnNfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJdW5zaWduZWQgY2h1bmtfc2l6ZSA9IGV4b2ZzX2NodW5rX3NpemUoZGlyKTsKKwljaGFyICprYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwl1bnNpZ25lZCBvZmZzLCByZWNfbGVuOworCXVuc2lnbmVkIGxpbWl0ID0gUEFHRV9DQUNIRV9TSVpFOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKnA7CisJY2hhciAqZXJyb3I7CisKKwkvKiBpZiB0aGUgcGFnZSBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIGRpcmVjdG9yeSAqLworCWlmICgoZGlyLT5pX3NpemUgPj4gUEFHRV9DQUNIRV9TSElGVCkgPT0gcGFnZS0+aW5kZXgpIHsKKwkJbGltaXQgPSBkaXItPmlfc2l6ZSAmIH5QQUdFX0NBQ0hFX01BU0s7CisJCWlmIChsaW1pdCAmIChjaHVua19zaXplIC0gMSkpCisJCQlnb3RvIEViYWRzaXplOworCQlpZiAoIWxpbWl0KQorCQkJZ290byBvdXQ7CisJfQorCWZvciAob2ZmcyA9IDA7IG9mZnMgPD0gbGltaXQgLSBFWE9GU19ESVJfUkVDX0xFTigxKTsgb2ZmcyArPSByZWNfbGVuKSB7CisJCXAgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKShrYWRkciArIG9mZnMpOworCQlyZWNfbGVuID0gbGUxNl90b19jcHUocC0+cmVjX2xlbik7CisKKwkJaWYgKHJlY19sZW4gPCBFWE9GU19ESVJfUkVDX0xFTigxKSkKKwkJCWdvdG8gRXNob3J0OworCQlpZiAocmVjX2xlbiAmIDMpCisJCQlnb3RvIEVhbGlnbjsKKwkJaWYgKHJlY19sZW4gPCBFWE9GU19ESVJfUkVDX0xFTihwLT5uYW1lX2xlbikpCisJCQlnb3RvIEVuYW1lbGVuOworCQlpZiAoKChvZmZzICsgcmVjX2xlbiAtIDEpIF4gb2ZmcykgJiB+KGNodW5rX3NpemUtMSkpCisJCQlnb3RvIEVzcGFuOworCX0KKwlpZiAob2ZmcyAhPSBsaW1pdCkKKwkJZ290byBFZW5kOworb3V0OgorCVNldFBhZ2VDaGVja2VkKHBhZ2UpOworCXJldHVybjsKKworRWJhZHNpemU6CisJRVhPRlNfRVJSKCJFUlJPUiBbZXhvZnNfY2hlY2tfcGFnZV06ICIKKwkJInNpemUgb2YgZGlyZWN0b3J5ICMlbHUgaXMgbm90IGEgbXVsdGlwbGUgb2YgY2h1bmsgc2l6ZSIsCisJCWRpci0+aV9pbm8KKwkpOworCWdvdG8gZmFpbDsKK0VzaG9ydDoKKwllcnJvciA9ICJyZWNfbGVuIGlzIHNtYWxsZXIgdGhhbiBtaW5pbWFsIjsKKwlnb3RvIGJhZF9lbnRyeTsKK0VhbGlnbjoKKwllcnJvciA9ICJ1bmFsaWduZWQgZGlyZWN0b3J5IGVudHJ5IjsKKwlnb3RvIGJhZF9lbnRyeTsKK0VuYW1lbGVuOgorCWVycm9yID0gInJlY19sZW4gaXMgdG9vIHNtYWxsIGZvciBuYW1lX2xlbiI7CisJZ290byBiYWRfZW50cnk7CitFc3BhbjoKKwllcnJvciA9ICJkaXJlY3RvcnkgZW50cnkgYWNyb3NzIGJsb2NrcyI7CisJZ290byBiYWRfZW50cnk7CitiYWRfZW50cnk6CisJRVhPRlNfRVJSKAorCQkiRVJST1IgW2V4b2ZzX2NoZWNrX3BhZ2VdOiBiYWQgZW50cnkgaW4gZGlyZWN0b3J5ICMlbHU6ICVzIC0gIgorCQkib2Zmc2V0PSVsdSwgaW5vZGU9JWxsdSwgcmVjX2xlbj0lZCwgbmFtZV9sZW49JWQiLAorCQlkaXItPmlfaW5vLCBlcnJvciwgKHBhZ2UtPmluZGV4PDxQQUdFX0NBQ0hFX1NISUZUKStvZmZzLAorCQlfTExVKGxlNjRfdG9fY3B1KHAtPmlub2RlX25vKSksCisJCXJlY19sZW4sIHAtPm5hbWVfbGVuKTsKKwlnb3RvIGZhaWw7CitFZW5kOgorCXAgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKShrYWRkciArIG9mZnMpOworCUVYT0ZTX0VSUigiRVJST1IgW2V4b2ZzX2NoZWNrX3BhZ2VdOiAiCisJCSJlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdSBzcGFucyB0aGUgcGFnZSBib3VuZGFyeSIKKwkJIm9mZnNldD0lbHUsIGlub2RlPSVsbHUiLAorCQlkaXItPmlfaW5vLCAocGFnZS0+aW5kZXg8PFBBR0VfQ0FDSEVfU0hJRlQpK29mZnMsCisJCV9MTFUobGU2NF90b19jcHUocC0+aW5vZGVfbm8pKSk7CitmYWlsOgorCVNldFBhZ2VDaGVja2VkKHBhZ2UpOworCVNldFBhZ2VFcnJvcihwYWdlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpleG9mc19nZXRfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgbG9uZyBuKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZGlyLT5pX21hcHBpbmc7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBuLCBOVUxMKTsKKworCWlmICghSVNfRVJSKHBhZ2UpKSB7CisJCWttYXAocGFnZSk7CisJCWlmICghUGFnZUNoZWNrZWQocGFnZSkpCisJCQlleG9mc19jaGVja19wYWdlKHBhZ2UpOworCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQorCQkJZ290byBmYWlsOworCX0KKwlyZXR1cm4gcGFnZTsKKworZmFpbDoKKwlleG9mc19wdXRfcGFnZShwYWdlKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlPKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhvZnNfbWF0Y2goaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwkJCQkJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGUpCit7CisJaWYgKGxlbiAhPSBkZS0+bmFtZV9sZW4pCisJCXJldHVybiAwOworCWlmICghZGUtPmlub2RlX25vKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIW1lbWNtcChuYW1lLCBkZS0+bmFtZSwgbGVuKTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZXhvZnNfbmV4dF9lbnRyeShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpwKQoreworCXJldHVybiAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKSgoY2hhciAqKXAgKyBsZTE2X3RvX2NwdShwLT5yZWNfbGVuKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2V4b2ZzX3ZhbGlkYXRlX2VudHJ5KGNoYXIgKmJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbWFzaykKK3sKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKGJhc2UgKyBvZmZzZXQpOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKnAgPQorCQkJKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikoYmFzZSArIChvZmZzZXQmbWFzaykpOworCXdoaWxlICgoY2hhciAqKXAgPCAoY2hhciAqKWRlKSB7CisJCWlmIChwLT5yZWNfbGVuID09IDApCisJCQlicmVhazsKKwkJcCA9IGV4b2ZzX25leHRfZW50cnkocCk7CisJfQorCXJldHVybiAoY2hhciAqKXAgLSBiYXNlOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBleG9mc19maWxldHlwZV90YWJsZVtFWE9GU19GVF9NQVhdID0geworCVtFWE9GU19GVF9VTktOT1dOXQk9IERUX1VOS05PV04sCisJW0VYT0ZTX0ZUX1JFR19GSUxFXQk9IERUX1JFRywKKwlbRVhPRlNfRlRfRElSXQkJPSBEVF9ESVIsCisJW0VYT0ZTX0ZUX0NIUkRFVl0JPSBEVF9DSFIsCisJW0VYT0ZTX0ZUX0JMS0RFVl0JPSBEVF9CTEssCisJW0VYT0ZTX0ZUX0ZJRk9dCQk9IERUX0ZJRk8sCisJW0VYT0ZTX0ZUX1NPQ0tdCQk9IERUX1NPQ0ssCisJW0VYT0ZTX0ZUX1NZTUxJTktdCT0gRFRfTE5LLAorfTsKKworI2RlZmluZSBTX1NISUZUIDEyCitzdGF0aWMgdW5zaWduZWQgY2hhciBleG9mc190eXBlX2J5X21vZGVbU19JRk1UID4+IFNfU0hJRlRdID0geworCVtTX0lGUkVHID4+IFNfU0hJRlRdCT0gRVhPRlNfRlRfUkVHX0ZJTEUsCisJW1NfSUZESVIgPj4gU19TSElGVF0JPSBFWE9GU19GVF9ESVIsCisJW1NfSUZDSFIgPj4gU19TSElGVF0JPSBFWE9GU19GVF9DSFJERVYsCisJW1NfSUZCTEsgPj4gU19TSElGVF0JPSBFWE9GU19GVF9CTEtERVYsCisJW1NfSUZJRk8gPj4gU19TSElGVF0JPSBFWE9GU19GVF9GSUZPLAorCVtTX0lGU09DSyA+PiBTX1NISUZUXQk9IEVYT0ZTX0ZUX1NPQ0ssCisJW1NfSUZMTksgPj4gU19TSElGVF0JPSBFWE9GU19GVF9TWU1MSU5LLAorfTsKKworc3RhdGljIGlubGluZQordm9pZCBleG9mc19zZXRfZGVfdHlwZShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CisJZGUtPmZpbGVfdHlwZSA9IGV4b2ZzX3R5cGVfYnlfbW9kZVsobW9kZSAmIFNfSUZNVCkgPj4gU19TSElGVF07Cit9CisKK3N0YXRpYyBpbnQKK2V4b2ZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCit7CisJbG9mZl90IHBvcyA9IGZpbHAtPmZfcG9zOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwb3MgJiB+UEFHRV9DQUNIRV9NQVNLOworCXVuc2lnbmVkIGxvbmcgbiA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gZGlyX3BhZ2VzKGlub2RlKTsKKwl1bnNpZ25lZCBjaHVua19tYXNrID0gfihleG9mc19jaHVua19zaXplKGlub2RlKS0xKTsKKwl1bnNpZ25lZCBjaGFyICp0eXBlcyA9IE5VTEw7CisJaW50IG5lZWRfcmV2YWxpZGF0ZSA9IChmaWxwLT5mX3ZlcnNpb24gIT0gaW5vZGUtPmlfdmVyc2lvbik7CisKKwlpZiAocG9zID4gaW5vZGUtPmlfc2l6ZSAtIEVYT0ZTX0RJUl9SRUNfTEVOKDEpKQorCQlyZXR1cm4gMDsKKworCXR5cGVzID0gZXhvZnNfZmlsZXR5cGVfdGFibGU7CisKKwlmb3IgKCA7IG4gPCBucGFnZXM7IG4rKywgb2Zmc2V0ID0gMCkgeworCQljaGFyICprYWRkciwgKmxpbWl0OworCQlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleG9mc19nZXRfcGFnZShpbm9kZSwgbik7CisKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJRVhPRlNfRVJSKCJFUlJPUjogIgorCQkJCSAgICJiYWQgcGFnZSBpbiAjJWx1IiwKKwkJCQkgICBpbm9kZS0+aV9pbm8pOworCQkJZmlscC0+Zl9wb3MgKz0gUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0OworCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisJCX0KKwkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCWlmICh1bmxpa2VseShuZWVkX3JldmFsaWRhdGUpKSB7CisJCQlpZiAob2Zmc2V0KSB7CisJCQkJb2Zmc2V0ID0gZXhvZnNfdmFsaWRhdGVfZW50cnkoa2FkZHIsIG9mZnNldCwKKwkJCQkJCQkJY2h1bmtfbWFzayk7CisJCQkJZmlscC0+Zl9wb3MgPSAobjw8UEFHRV9DQUNIRV9TSElGVCkgKyBvZmZzZXQ7CisJCQl9CisJCQlmaWxwLT5mX3ZlcnNpb24gPSBpbm9kZS0+aV92ZXJzaW9uOworCQkJbmVlZF9yZXZhbGlkYXRlID0gMDsKKwkJfQorCQlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKGthZGRyICsgb2Zmc2V0KTsKKwkJbGltaXQgPSBrYWRkciArIGV4b2ZzX2xhc3RfYnl0ZShpbm9kZSwgbikgLQorCQkJCQkJCUVYT0ZTX0RJUl9SRUNfTEVOKDEpOworCQlmb3IgKDsgKGNoYXIgKilkZSA8PSBsaW1pdDsgZGUgPSBleG9mc19uZXh0X2VudHJ5KGRlKSkgeworCQkJaWYgKGRlLT5yZWNfbGVuID09IDApIHsKKwkJCQlFWE9GU19FUlIoIkVSUk9SOiAiCisJCQkJCSJ6ZXJvLWxlbmd0aCBkaXJlY3RvcnkgZW50cnkiKTsKKwkJCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWlmIChkZS0+aW5vZGVfbm8pIHsKKwkJCQlpbnQgb3ZlcjsKKwkJCQl1bnNpZ25lZCBjaGFyIGRfdHlwZSA9IERUX1VOS05PV047CisKKwkJCQlpZiAodHlwZXMgJiYgZGUtPmZpbGVfdHlwZSA8IEVYT0ZTX0ZUX01BWCkKKwkJCQkJZF90eXBlID0gdHlwZXNbZGUtPmZpbGVfdHlwZV07CisKKwkJCQlvZmZzZXQgPSAoY2hhciAqKWRlIC0ga2FkZHI7CisJCQkJb3ZlciA9IGZpbGxkaXIoZGlyZW50LCBkZS0+bmFtZSwgZGUtPm5hbWVfbGVuLAorCQkJCQkJKG48PFBBR0VfQ0FDSEVfU0hJRlQpIHwgb2Zmc2V0LAorCQkJCQkJbGU2NF90b19jcHUoZGUtPmlub2RlX25vKSwKKwkJCQkJCWRfdHlwZSk7CisJCQkJaWYgKG92ZXIpIHsKKwkJCQkJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJCWZpbHAtPmZfcG9zICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwkJfQorCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZXhvZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHBhZ2UgKipyZXNfcGFnZSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKKwlpbnQgbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKKwl1bnNpZ25lZCByZWNsZW4gPSBFWE9GU19ESVJfUkVDX0xFTihuYW1lbGVuKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBuOworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gZGlyX3BhZ2VzKGRpcik7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShkaXIpOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlOworCisJaWYgKG5wYWdlcyA9PSAwKQorCQlnb3RvIG91dDsKKworCSpyZXNfcGFnZSA9IE5VTEw7CisKKwlzdGFydCA9IG9pLT5pX2Rpcl9zdGFydF9sb29rdXA7CisJaWYgKHN0YXJ0ID49IG5wYWdlcykKKwkJc3RhcnQgPSAwOworCW4gPSBzdGFydDsKKwlkbyB7CisJCWNoYXIgKmthZGRyOworCQlwYWdlID0gZXhvZnNfZ2V0X3BhZ2UoZGlyLCBuKTsKKwkJaWYgKCFJU19FUlIocGFnZSkpIHsKKwkJCWthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQkJZGUgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKSBrYWRkcjsKKwkJCWthZGRyICs9IGV4b2ZzX2xhc3RfYnl0ZShkaXIsIG4pIC0gcmVjbGVuOworCQkJd2hpbGUgKChjaGFyICopIGRlIDw9IGthZGRyKSB7CisJCQkJaWYgKGRlLT5yZWNfbGVuID09IDApIHsKKwkJCQkJRVhPRlNfRVJSKAorCQkJCQkJIkVSUk9SOiBleG9mc19maW5kX2VudHJ5OiAiCisJCQkJCQkiemVyby1sZW5ndGggZGlyZWN0b3J5IGVudHJ5Iik7CisJCQkJCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJaWYgKGV4b2ZzX21hdGNoKG5hbWVsZW4sIG5hbWUsIGRlKSkKKwkJCQkJZ290byBmb3VuZDsKKwkJCQlkZSA9IGV4b2ZzX25leHRfZW50cnkoZGUpOworCQkJfQorCQkJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJCX0KKwkJaWYgKCsrbiA+PSBucGFnZXMpCisJCQluID0gMDsKKwl9IHdoaWxlIChuICE9IHN0YXJ0KTsKK291dDoKKwlyZXR1cm4gTlVMTDsKKworZm91bmQ6CisJKnJlc19wYWdlID0gcGFnZTsKKwlvaS0+aV9kaXJfc3RhcnRfbG9va3VwID0gbjsKKwlyZXR1cm4gZGU7Cit9CisKK3N0cnVjdCBleG9mc19kaXJfZW50cnkgKmV4b2ZzX2RvdGRvdChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHBhZ2UgKipwKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gZXhvZnNfZ2V0X3BhZ2UoZGlyLCAwKTsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSA9IE5VTEw7CisKKwlpZiAoIUlTX0VSUihwYWdlKSkgeworCQlkZSA9IGV4b2ZzX25leHRfZW50cnkoCisJCQkJKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKilwYWdlX2FkZHJlc3MocGFnZSkpOworCQkqcCA9IHBhZ2U7CisJfQorCXJldHVybiBkZTsKK30KKworaW5vX3QgZXhvZnNfcGFyZW50X2lubyhzdHJ1Y3QgZGVudHJ5ICpjaGlsZCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwlpbm9fdCBpbm87CisKKwlkZSA9IGV4b2ZzX2RvdGRvdChjaGlsZC0+ZF9pbm9kZSwgJnBhZ2UpOworCWlmICghZGUpCisJCXJldHVybiAwOworCisJaW5vID0gbGU2NF90b19jcHUoZGUtPmlub2RlX25vKTsKKwlleG9mc19wdXRfcGFnZShwYWdlKTsKKwlyZXR1cm4gaW5vOworfQorCitpbm9fdCBleG9mc19pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW5vX3QgcmVzID0gMDsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWRlID0gZXhvZnNfZmluZF9lbnRyeShkaXIsIGRlbnRyeSwgJnBhZ2UpOworCWlmIChkZSkgeworCQlyZXMgPSBsZTY0X3RvX2NwdShkZS0+aW5vZGVfbm8pOworCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworaW50IGV4b2ZzX3NldF9saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSwKKwkJCXN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChwYWdlKSArCisJCQkoY2hhciAqKSBkZSAtIChjaGFyICopIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwl1bnNpZ25lZCBsZW4gPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJaW50IGVycjsKKworCWxvY2tfcGFnZShwYWdlKTsKKwllcnIgPSBleG9mc193cml0ZV9iZWdpbihOVUxMLCBwYWdlLT5tYXBwaW5nLCBwb3MsIGxlbiwKKwkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsICZwYWdlLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlFWE9GU19FUlIoImV4b2ZzX3NldF9saW5rOiBleG9mc193cml0ZV9iZWdpbiBGQUlMRCA9PiAlZFxuIiwKKwkJCSAgZXJyKTsKKworCWRlLT5pbm9kZV9ubyA9IGNwdV90b19sZTY0KGlub2RlLT5pX2lubyk7CisJZXhvZnNfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKKwlpZiAobGlrZWx5KCFlcnIpKQorCQllcnIgPSBleG9mc19jb21taXRfY2h1bmsocGFnZSwgcG9zLCBsZW4pOworCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCWRpci0+aV9tdGltZSA9IGRpci0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwltYXJrX2lub2RlX2RpcnR5KGRpcik7CisJcmV0dXJuIGVycjsKK30KKworaW50IGV4b2ZzX2FkZF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJaW50IG5hbWVsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47CisJdW5zaWduZWQgY2h1bmtfc2l6ZSA9IGV4b2ZzX2NodW5rX3NpemUoZGlyKTsKKwl1bnNpZ25lZCByZWNsZW4gPSBFWE9GU19ESVJfUkVDX0xFTihuYW1lbGVuKTsKKwl1bnNpZ25lZCBzaG9ydCByZWNfbGVuLCBuYW1lX2xlbjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGU7CisJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBkaXJfcGFnZXMoZGlyKTsKKwl1bnNpZ25lZCBsb25nIG47CisJY2hhciAqa2FkZHI7CisJbG9mZl90IHBvczsKKwlpbnQgZXJyOworCisJZm9yIChuID0gMDsgbiA8PSBucGFnZXM7IG4rKykgeworCQljaGFyICpkaXJfZW5kOworCisJCXBhZ2UgPSBleG9mc19nZXRfcGFnZShkaXIsIG4pOworCQllcnIgPSBQVFJfRVJSKHBhZ2UpOworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJZ290byBvdXQ7CisJCWxvY2tfcGFnZShwYWdlKTsKKwkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCWRpcl9lbmQgPSBrYWRkciArIGV4b2ZzX2xhc3RfYnl0ZShkaXIsIG4pOworCQlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopa2FkZHI7CisJCWthZGRyICs9IFBBR0VfQ0FDSEVfU0laRSAtIHJlY2xlbjsKKwkJd2hpbGUgKChjaGFyICopZGUgPD0ga2FkZHIpIHsKKwkJCWlmICgoY2hhciAqKWRlID09IGRpcl9lbmQpIHsKKwkJCQluYW1lX2xlbiA9IDA7CisJCQkJcmVjX2xlbiA9IGNodW5rX3NpemU7CisJCQkJZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNihjaHVua19zaXplKTsKKwkJCQlkZS0+aW5vZGVfbm8gPSAwOworCQkJCWdvdG8gZ290X2l0OworCQkJfQorCQkJaWYgKGRlLT5yZWNfbGVuID09IDApIHsKKwkJCQlFWE9GU19FUlIoIkVSUk9SOiBleG9mc19hZGRfbGluazogIgorCQkJCQkiemVyby1sZW5ndGggZGlyZWN0b3J5IGVudHJ5Iik7CisJCQkJZXJyID0gLUVJTzsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCQllcnIgPSAtRUVYSVNUOworCQkJaWYgKGV4b2ZzX21hdGNoKG5hbWVsZW4sIG5hbWUsIGRlKSkKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQluYW1lX2xlbiA9IEVYT0ZTX0RJUl9SRUNfTEVOKGRlLT5uYW1lX2xlbik7CisJCQlyZWNfbGVuID0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCQkJaWYgKCFkZS0+aW5vZGVfbm8gJiYgcmVjX2xlbiA+PSByZWNsZW4pCisJCQkJZ290byBnb3RfaXQ7CisJCQlpZiAocmVjX2xlbiA+PSBuYW1lX2xlbiArIHJlY2xlbikKKwkJCQlnb3RvIGdvdF9pdDsKKwkJCWRlID0gKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikgKChjaGFyICopIGRlICsgcmVjX2xlbik7CisJCX0KKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCX0KKworCUVYT0ZTX0VSUigiZXhvZnNfYWRkX2xpbms6IEJBRCBkZW50cnk9JXAgb3IgaW5vZGU9JXAiLCBkZW50cnksIGlub2RlKTsKKwlyZXR1cm4gLUVJTlZBTDsKKworZ290X2l0OgorCXBvcyA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpICsKKwkJKGNoYXIgKilkZSAtIChjaGFyICopcGFnZV9hZGRyZXNzKHBhZ2UpOworCWVyciA9IGV4b2ZzX3dyaXRlX2JlZ2luKE5VTEwsIHBhZ2UtPm1hcHBpbmcsIHBvcywgcmVjX2xlbiwgMCwKKwkJCQkJCQkmcGFnZSwgTlVMTCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5sb2NrOworCWlmIChkZS0+aW5vZGVfbm8pIHsKKwkJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGUxID0KKwkJCShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKChjaGFyICopZGUgKyBuYW1lX2xlbik7CisJCWRlMS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KHJlY19sZW4gLSBuYW1lX2xlbik7CisJCWRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYobmFtZV9sZW4pOworCQlkZSA9IGRlMTsKKwl9CisJZGUtPm5hbWVfbGVuID0gbmFtZWxlbjsKKwltZW1jcHkoZGUtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOworCWRlLT5pbm9kZV9ubyA9IGNwdV90b19sZTY0KGlub2RlLT5pX2lubyk7CisJZXhvZnNfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKKwllcnIgPSBleG9mc19jb21taXRfY2h1bmsocGFnZSwgcG9zLCByZWNfbGVuKTsKKwlkaXItPmlfbXRpbWUgPSBkaXItPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJbWFya19pbm9kZV9kaXJ0eShkaXIpOworCXNiaS0+c19udW1maWxlcysrOworCitvdXRfcHV0OgorCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworb3V0OgorCXJldHVybiBlcnI7CitvdXRfdW5sb2NrOgorCXVubG9ja19wYWdlKHBhZ2UpOworCWdvdG8gb3V0X3B1dDsKK30KKworaW50IGV4b2ZzX2RlbGV0ZV9lbnRyeShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkaXIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwljaGFyICprYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwl1bnNpZ25lZCBmcm9tID0gKChjaGFyICopZGlyIC0ga2FkZHIpICYgfihleG9mc19jaHVua19zaXplKGlub2RlKS0xKTsKKwl1bnNpZ25lZCB0byA9ICgoY2hhciAqKWRpciAtIGthZGRyKSArIGxlMTZfdG9fY3B1KGRpci0+cmVjX2xlbik7CisJbG9mZl90IHBvczsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpwZGUgPSBOVUxMOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlID0gKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikgKGthZGRyICsgZnJvbSk7CisJaW50IGVycjsKKworCXdoaWxlIChkZSA8IGRpcikgeworCQlpZiAoZGUtPnJlY19sZW4gPT0gMCkgeworCQkJRVhPRlNfRVJSKCJFUlJPUjogZXhvZnNfZGVsZXRlX2VudHJ5OiIKKwkJCQkiemVyby1sZW5ndGggZGlyZWN0b3J5IGVudHJ5Iik7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJcGRlID0gZGU7CisJCWRlID0gZXhvZnNfbmV4dF9lbnRyeShkZSk7CisJfQorCWlmIChwZGUpCisJCWZyb20gPSAoY2hhciAqKXBkZSAtIChjaGFyICopcGFnZV9hZGRyZXNzKHBhZ2UpOworCXBvcyA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpICsgZnJvbTsKKwlsb2NrX3BhZ2UocGFnZSk7CisJZXJyID0gZXhvZnNfd3JpdGVfYmVnaW4oTlVMTCwgcGFnZS0+bWFwcGluZywgcG9zLCB0byAtIGZyb20sIDAsCisJCQkJCQkJJnBhZ2UsIE5VTEwpOworCWlmIChlcnIpCisJCUVYT0ZTX0VSUigiZXhvZnNfZGVsZXRlX2VudHJ5OiBleG9mc193cml0ZV9iZWdpbiBGQUlMRCA9PiAlZFxuIiwKKwkJCSAgZXJyKTsKKwlpZiAocGRlKQorCQlwZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNih0byAtIGZyb20pOworCWRpci0+aW5vZGVfbm8gPSAwOworCWlmIChsaWtlbHkoIWVycikpCisJCWVyciA9IGV4b2ZzX2NvbW1pdF9jaHVuayhwYWdlLCBwb3MsIHRvIC0gZnJvbSk7CisJaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlzYmktPnNfbnVtZmlsZXMtLTsKK291dDoKKwlleG9mc19wdXRfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBrZXB0IGFsaWduZWQgb24gNCBieXRlcyAqLworI2RlZmluZSBUSElTX0RJUiAiLlwwXDAiCisjZGVmaW5lIFBBUkVOVF9ESVIgIi4uXDAiCisKK2ludCBleG9mc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50KQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCAwKTsKKwl1bnNpZ25lZCBjaHVua19zaXplID0gZXhvZnNfY2h1bmtfc2l6ZShpbm9kZSk7CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGU7CisJaW50IGVycjsKKwl2b2lkICprYWRkcjsKKworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBleG9mc193cml0ZV9iZWdpbihOVUxMLCBwYWdlLT5tYXBwaW5nLCAwLCBjaHVua19zaXplLCAwLAorCQkJCQkJCSZwYWdlLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlnb3RvIGZhaWw7CisJfQorCisJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJZGUgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKWthZGRyOworCWRlLT5uYW1lX2xlbiA9IDE7CisJZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNihFWE9GU19ESVJfUkVDX0xFTigxKSk7CisJbWVtY3B5KGRlLT5uYW1lLCBUSElTX0RJUiwgc2l6ZW9mKFRISVNfRElSKSk7CisJZGUtPmlub2RlX25vID0gY3B1X3RvX2xlNjQoaW5vZGUtPmlfaW5vKTsKKwlleG9mc19zZXRfZGVfdHlwZShkZSwgaW5vZGUpOworCisJZGUgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKShrYWRkciArIEVYT0ZTX0RJUl9SRUNfTEVOKDEpKTsKKwlkZS0+bmFtZV9sZW4gPSAyOworCWRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYoY2h1bmtfc2l6ZSAtIEVYT0ZTX0RJUl9SRUNfTEVOKDEpKTsKKwlkZS0+aW5vZGVfbm8gPSBjcHVfdG9fbGU2NChwYXJlbnQtPmlfaW5vKTsKKwltZW1jcHkoZGUtPm5hbWUsIFBBUkVOVF9ESVIsIHNpemVvZihQQVJFTlRfRElSKSk7CisJZXhvZnNfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKKwlrdW5tYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwllcnIgPSBleG9mc19jb21taXRfY2h1bmsocGFnZSwgMCwgY2h1bmtfc2l6ZSk7CitmYWlsOgorCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZXhvZnNfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaSwgbnBhZ2VzID0gZGlyX3BhZ2VzKGlub2RlKTsKKworCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgeworCQljaGFyICprYWRkcjsKKwkJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGU7CisJCXBhZ2UgPSBleG9mc19nZXRfcGFnZShpbm9kZSwgaSk7CisKKwkJaWYgKElTX0VSUihwYWdlKSkKKwkJCWNvbnRpbnVlOworCisJCWthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopa2FkZHI7CisJCWthZGRyICs9IGV4b2ZzX2xhc3RfYnl0ZShpbm9kZSwgaSkgLSBFWE9GU19ESVJfUkVDX0xFTigxKTsKKworCQl3aGlsZSAoKGNoYXIgKilkZSA8PSBrYWRkcikgeworCQkJaWYgKGRlLT5yZWNfbGVuID09IDApIHsKKwkJCQlFWE9GU19FUlIoIkVSUk9SOiBleG9mc19lbXB0eV9kaXI6ICIKKwkJCQkJICAiemVyby1sZW5ndGggZGlyZWN0b3J5IGVudHJ5IgorCQkJCQkgICJrYWRkcj0lcCwgZGU9JXBcbiIsIGthZGRyLCBkZSk7CisJCQkJZ290byBub3RfZW1wdHk7CisJCQl9CisJCQlpZiAoZGUtPmlub2RlX25vICE9IDApIHsKKwkJCQkvKiBjaGVjayBmb3IgLiBhbmQgLi4gKi8KKwkJCQlpZiAoZGUtPm5hbWVbMF0gIT0gJy4nKQorCQkJCQlnb3RvIG5vdF9lbXB0eTsKKwkJCQlpZiAoZGUtPm5hbWVfbGVuID4gMikKKwkJCQkJZ290byBub3RfZW1wdHk7CisJCQkJaWYgKGRlLT5uYW1lX2xlbiA8IDIpIHsKKwkJCQkJaWYgKGxlNjRfdG9fY3B1KGRlLT5pbm9kZV9ubykgIT0KKwkJCQkJICAgIGlub2RlLT5pX2lubykKKwkJCQkJCWdvdG8gbm90X2VtcHR5OworCQkJCX0gZWxzZSBpZiAoZGUtPm5hbWVbMV0gIT0gJy4nKQorCQkJCQlnb3RvIG5vdF9lbXB0eTsKKwkJCX0KKwkJCWRlID0gZXhvZnNfbmV4dF9lbnRyeShkZSk7CisJCX0KKwkJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJfQorCXJldHVybiAxOworCitub3RfZW1wdHk6CisJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXhvZnNfZGlyX29wZXJhdGlvbnMgPSB7CisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCisJLnJlYWRkaXIJPSBleG9mc19yZWFkZGlyLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2V4b2ZzLmggYi9mcy9leG9mcy9leG9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDRjNzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvZXhvZnMuaApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisjaWZuZGVmIF9fRVhPRlNfSF9fCisjZGVmaW5lIF9fRVhPRlNfSF9fCisKKyNkZWZpbmUgRVhPRlNfRVJSKGZtdCwgYS4uLikgcHJpbnRrKEtFUk5fRVJSICJleG9mczogIiBmbXQsICMjYSkKKworI2lmZGVmIENPTkZJR19FWE9GU19ERUJVRworI2RlZmluZSBFWE9GU19EQkdNU0coZm10LCBhLi4uKSBcCisJcHJpbnRrKEtFUk5fTk9USUNFICJleG9mcyBAJXM6JWQ6ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18sICMjYSkKKyNlbHNlCisjZGVmaW5lIEVYT0ZTX0RCR01TRyhmbXQsIGEuLi4pIFwKKwlkbyB7IGlmICgwKSBwcmludGsoZm10LCAjI2EpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIHU2NCBoYXMgcHJvYmxlbXMgd2l0aCBwcmludGsgdGhpcyB3aWxsIGNhc3QgaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nICovCisjZGVmaW5lIF9MTFUoeCkgKHVuc2lnbmVkIGxvbmcgbG9uZykoeCkKKworLyoKKyAqIG91ciBleHRlbnNpb24gdG8gdGhlIGluLW1lbW9yeSBzdXBlcmJsb2NrCisgKi8KK3N0cnVjdCBleG9mc19zYl9pbmZvIHsKKwlzdHJ1Y3Qgb3NkX2Rldgkqc19kZXY7CQkJLyogcmV0dXJuZWQgYnkgZ2V0X29zZF9kZXYgICAgKi8KKwlvc2RfaWQJCXNfcGlkOwkJCS8qIHBhcnRpdGlvbiBJRCBvZiBmaWxlIHN5c3RlbSovCisJaW50CQlzX3RpbWVvdXQ7CQkvKiB0aW1lb3V0IGZvciBPU0Qgb3BlcmF0aW9ucyAqLworCXVpbnQ2NF90CXNfbmV4dGlkOwkJLyogaGlnaGVzdCBvYmplY3QgSUQgdXNlZCAgICAgKi8KKwl1aW50MzJfdAlzX251bWZpbGVzOwkJLyogbnVtYmVyIG9mIGZpbGVzIG9uIGZzICAgICAgKi8KKwlzcGlubG9ja190CXNfbmV4dF9nZW5fbG9jazsJLyogc3BpbmxvY2sgZm9yIGdlbiAjIHVwZGF0ZSAgKi8KKwl1MzIJCXNfbmV4dF9nZW5lcmF0aW9uOwkvKiBuZXh0IGdlbiAjIHRvIHVzZSAgICAgICAgICAqLworCWF0b21pY190CXNfY3Vycl9wZW5kaW5nOwkJLyogbnVtYmVyIG9mIHBlbmRpbmcgY29tbWFuZHMgKi8KKwl1aW50OF90CQlzX2NyZWRbT1NEX0NBUF9MRU5dOwkvKiBhbGwtcG93ZXJmdWwgY3JlZGVudGlhbCAgICAqLworfTsKKworLyoKKyAqIG91ciBleHRlbnNpb24gdG8gdGhlIGluLW1lbW9yeSBpbm9kZQorICovCitzdHJ1Y3QgZXhvZnNfaV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nICBpX2ZsYWdzOyAgICAgICAgICAgIC8qIHZhcmlvdXMgYXRvbWljIGZsYWdzICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgICAgICBpX2RhdGFbRVhPRlNfSURBVEFdOy8qc2hvcnQgc3ltbGluayBuYW1lcyBhbmQgZGV2aWNlICNzKi8KKwl1aW50MzJfdCAgICAgICBpX2Rpcl9zdGFydF9sb29rdXA7IC8qIHdoaWNoIHBhZ2UgdG8gc3RhcnQgbG9va3VwICAgICAgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBpX3dxOyAgICAgICAgICAgIC8qIHdhaXQgcXVldWUgZm9yIGlub2RlICAgICAgICAgICAgKi8KKwl1aW50NjRfdCAgICAgICBpX2NvbW1pdF9zaXplOyAgICAgIC8qIHRoZSBvYmplY3QncyB3cml0dGVuIGxlbmd0aCAgICAgKi8KKwl1aW50OF90ICAgICAgICBpX2NyZWRbT1NEX0NBUF9MRU5dOy8qIGFsbC1wb3dlcmZ1bCBjcmVkZW50aWFsICAgICAgICAgKi8KKwlzdHJ1Y3QgaW5vZGUgICB2ZnNfaW5vZGU7ICAgICAgICAgIC8qIG5vcm1hbCBpbi1tZW1vcnkgaW5vZGUgICAgICAgICAgKi8KK307CisKKy8qCisgKiBvdXIgaW5vZGUgZmxhZ3MKKyAqLworI2RlZmluZSBPQkpfMkJDUkVBVEVECTAJLyogb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBzb29uKi8KKyNkZWZpbmUgT0JKX0NSRUFURUQJMQkvKiBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCBvbiB0aGUgb3NkKi8KKworc3RhdGljIGlubGluZSBpbnQgb2JqXzJiY3JlYXRlZChzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoT0JKXzJCQ1JFQVRFRCwgJm9pLT5pX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9vYmpfMmJjcmVhdGVkKHN0cnVjdCBleG9mc19pX2luZm8gKm9pKQoreworCXNldF9iaXQoT0JKXzJCQ1JFQVRFRCwgJm9pLT5pX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2JqX2NyZWF0ZWQoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpCit7CisJcmV0dXJuIHRlc3RfYml0KE9CSl9DUkVBVEVELCAmb2ktPmlfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X29ial9jcmVhdGVkKHN0cnVjdCBleG9mc19pX2luZm8gKm9pKQoreworCXNldF9iaXQoT0JKX0NSRUFURUQsICZvaS0+aV9mbGFncyk7Cit9CisKK2ludCBfX2V4b2ZzX3dhaXRfb2JqX2NyZWF0ZWQoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpOworc3RhdGljIGlubGluZSBpbnQgd2FpdF9vYmpfY3JlYXRlZChzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSkKK3sKKwlpZiAobGlrZWx5KG9ial9jcmVhdGVkKG9pKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIF9fZXhvZnNfd2FpdF9vYmpfY3JlYXRlZChvaSk7Cit9CisKKy8qCisgKiBnZXQgdG8gb3VyIGlub2RlIGZyb20gdGhlIHZmcyBpbm9kZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleG9mc19pX2luZm8gKmV4b2ZzX2koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgZXhvZnNfaV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCisvKgorICogTWF4aW11bSBjb3VudCBvZiBsaW5rcyB0byBhIGZpbGUKKyAqLworI2RlZmluZSBFWE9GU19MSU5LX01BWCAgICAgICAgICAgMzIwMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGlub2RlLmMgICAgICAgICAgICAgICAqLwordm9pZCBleG9mc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCBleG9mc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOworaW50IGV4b2ZzX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSk7CitleHRlcm4gc3RydWN0IGlub2RlICpleG9mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKK3N0cnVjdCBpbm9kZSAqZXhvZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCBleG9mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiB2b2lkIGV4b2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CisKKy8qIGRpci5jOiAgICAgICAgICAgICAgICAqLworaW50IGV4b2ZzX2FkZF9saW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOworaW5vX3QgZXhvZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2ludCBleG9mc19kZWxldGVfZW50cnkoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK2ludCBleG9mc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CitzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpleG9mc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCisJCQkJCSBzdHJ1Y3QgcGFnZSAqKik7CitpbnQgZXhvZnNfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqKTsKK3N0cnVjdCBleG9mc19kaXJfZW50cnkgKmV4b2ZzX2RvdGRvdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKiopOworaW5vX3QgZXhvZnNfcGFyZW50X2lubyhzdHJ1Y3QgZGVudHJ5ICpjaGlsZCk7CitpbnQgZXhvZnNfc2V0X2xpbmsoc3RydWN0IGlub2RlICosIHN0cnVjdCBleG9mc19kaXJfZW50cnkgKiwgc3RydWN0IHBhZ2UgKiwKKwkJICAgIHN0cnVjdCBpbm9kZSAqKTsKKworLyoqKioqKioqKioqKioqKioqKioqKgorICogb3BlcmF0aW9uIHZlY3RvcnMgKgorICoqKioqKioqKioqKioqKioqKioqKi8KKy8qIGRpci5jOiAgICAgICAgICAgICovCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleG9mc19kaXJfb3BlcmF0aW9uczsKKworLyogZmlsZS5jICAgICAgICAgICAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleG9mc19maWxlX29wZXJhdGlvbnM7CisKKy8qIGlub2RlLmMgICAgICAgICAgICovCitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleG9mc19hb3BzOworCisvKiBuYW1laS5jICAgICAgICAgICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKKworLyogc3ltbGluay5jICAgICAgICAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXhvZnNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvZmlsZS5jIGIvZnMvZXhvZnMvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZDdmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9maWxlLmMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisKKyNpbmNsdWRlICJleG9mcy5oIgorCitzdGF0aWMgaW50IGV4b2ZzX3JlbGVhc2VfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleG9mc19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgaW50IGRhdGFzeW5jKQoreworCWludCByZXQ7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxwLT5mX21hcHBpbmc7CisKKwlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KG1hcHBpbmcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKk5vdGU6IGZpbGVfZnN5bmMgYmVsb3cgYWxzbyBjYWxsZXMgc3luY19ibG9ja2Rldiwgd2hpY2ggaXMgYSBuby1vcAorCSAqICAgICAgZm9yIGV4b2ZzLCBidXQgb3RoZXIgdGhlbiB0aGF0IGl0IGRvZXMgc3luY19pbm9kZSBhbmQKKwkgKiAgICAgIHN5bmNfc3VwZXJibG9jayB3aGljaCBpcyB3aGF0IHdlIG5lZWQgaGVyZS4KKwkgKi8KKwlyZXR1cm4gZmlsZV9mc3luYyhmaWxwLCBkZW50cnksIGRhdGFzeW5jKTsKK30KKworc3RhdGljIGludCBleG9mc19mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKK3sKKwlleG9mc19maWxlX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDEpOworCS8qIFRPRE86IEZsdXNoIHRoZSBPU0QgdGFyZ2V0ICovCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXhvZnNfZmlsZV9vcGVyYXRpb25zID0geworCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAorCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAorCS5vcGVuCQk9IGdlbmVyaWNfZmlsZV9vcGVuLAorCS5yZWxlYXNlCT0gZXhvZnNfcmVsZWFzZV9maWxlLAorCS5mc3luYwkJPSBleG9mc19maWxlX2ZzeW5jLAorCS5mbHVzaAkJPSBleG9mc19mbHVzaCwKKwkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCisJLnNwbGljZV93cml0ZQk9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUsCit9OworCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLnRydW5jYXRlCT0gZXhvZnNfdHJ1bmNhdGUsCisJLnNldGF0dHIJPSBleG9mc19zZXRhdHRyLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lub2RlLmMgYi9mcy9leG9mcy9pbm9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOGQ5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9pbm9kZS5jCkBAIC0wLDAgKzEsMTMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAiZXhvZnMuaCIKKworI2lmZGVmIENPTkZJR19FWE9GU19ERUJVRworIyAgZGVmaW5lIEVYT0ZTX0RFQlVHX09CSl9JU0laRSAxCisjZW5kaWYKKworc3RydWN0IHBhZ2VfY29sbGVjdCB7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcmVxX3E7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwl1bnNpZ25lZCBleHBlY3RlZF9wYWdlczsKKworCXN0cnVjdCBiaW8gKmJpbzsKKwl1bnNpZ25lZCBucl9wYWdlczsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKwlsb2ZmX3QgcGdfZmlyc3Q7IC8qIGtlZXAgNjRiaXQgYWxzbyBpbiAzMi1hcmNoZXMgKi8KK307CisKK3N0YXRpYyB2b2lkIF9wY29sX2luaXQoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCwgdW5zaWduZWQgZXhwZWN0ZWRfcGFnZXMsCisJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJlcV9xID0gc2JpLT5zX2Rldi0+c2NzaV9kZXZpY2UtPnJlcXVlc3RfcXVldWU7CisKKwlwY29sLT5zYmkgPSBzYmk7CisJcGNvbC0+cmVxX3EgPSByZXFfcTsKKwlwY29sLT5pbm9kZSA9IGlub2RlOworCXBjb2wtPmV4cGVjdGVkX3BhZ2VzID0gZXhwZWN0ZWRfcGFnZXM7CisKKwlwY29sLT5iaW8gPSBOVUxMOworCXBjb2wtPm5yX3BhZ2VzID0gMDsKKwlwY29sLT5sZW5ndGggPSAwOworCXBjb2wtPnBnX2ZpcnN0ID0gLTE7CisKKwlFWE9GU19EQkdNU0coIl9wY29sX2luaXQgaW5vPTB4JWx4IGV4cGVjdGVkX3BhZ2VzPSV1XG4iLCBpbm9kZS0+aV9pbm8sCisJCSAgICAgZXhwZWN0ZWRfcGFnZXMpOworfQorCitzdGF0aWMgdm9pZCBfcGNvbF9yZXNldChzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sKQoreworCXBjb2wtPmV4cGVjdGVkX3BhZ2VzIC09IG1pbihwY29sLT5ucl9wYWdlcywgcGNvbC0+ZXhwZWN0ZWRfcGFnZXMpOworCisJcGNvbC0+YmlvID0gTlVMTDsKKwlwY29sLT5ucl9wYWdlcyA9IDA7CisJcGNvbC0+bGVuZ3RoID0gMDsKKwlwY29sLT5wZ19maXJzdCA9IC0xOworCUVYT0ZTX0RCR01TRygiX3Bjb2xfcmVzZXQgaW5vPTB4JWx4IGV4cGVjdGVkX3BhZ2VzPSV1XG4iLAorCQkgICAgIHBjb2wtPmlub2RlLT5pX2lubywgcGNvbC0+ZXhwZWN0ZWRfcGFnZXMpOworCisJLyogdGhpcyBpcyBwcm9iYWJseSB0aGUgZW5kIG9mIHRoZSBsb29wIGJ1dCBpbiB3cml0ZXMKKwkgKiBpdCBtaWdodCBub3QgZW5kIGhlcmUuIGRvbid0IGJlIGxlZnQgd2l0aCBub3RoaW5nCisJICovCisJaWYgKCFwY29sLT5leHBlY3RlZF9wYWdlcykKKwkJcGNvbC0+ZXhwZWN0ZWRfcGFnZXMgPSAxMjg7Cit9CisKK3N0YXRpYyBpbnQgcGNvbF90cnlfYWxsb2Moc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCkKK3sKKwlpbnQgcGFnZXMgPSBtaW5fdCh1bnNpZ25lZCwgcGNvbC0+ZXhwZWN0ZWRfcGFnZXMsIEJJT19NQVhfUEFHRVMpOworCisJZm9yICg7IHBhZ2VzOyBwYWdlcyA+Pj0gMSkgeworCQlwY29sLT5iaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZXMpOworCQlpZiAobGlrZWx5KHBjb2wtPmJpbykpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlFWE9GU19FUlIoIkZhaWxlZCB0byBrY2FsbG9jIGV4cGVjdGVkX3BhZ2VzPSV1XG4iLAorCQkgIHBjb2wtPmV4cGVjdGVkX3BhZ2VzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgcGNvbF9mcmVlKHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wpCit7CisJYmlvX3B1dChwY29sLT5iaW8pOworCXBjb2wtPmJpbyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGNvbF9hZGRfcGFnZShzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSB1bnNpZ25lZCBsZW4pCit7CisJaW50IGFkZGVkX2xlbiA9IGJpb19hZGRfcGNfcGFnZShwY29sLT5yZXFfcSwgcGNvbC0+YmlvLCBwYWdlLCBsZW4sIDApOworCWlmICh1bmxpa2VseShsZW4gIT0gYWRkZWRfbGVuKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkrK3Bjb2wtPm5yX3BhZ2VzOworCXBjb2wtPmxlbmd0aCArPSBsZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3JlYWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJldCkKK3sKKwlpZiAocmV0ID09IDApIHsKKwkJLyogRXZlcnl0aGluZyBpcyBPSyAqLworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCWlmIChQYWdlRXJyb3IocGFnZSkpCisJCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwl9IGVsc2UgaWYgKHJldCA9PSAtRUZBVUxUKSB7CisJCS8qIEluIHRoaXMgY2FzZSB3ZSB3ZXJlIHRyeWluZyB0byByZWFkIHNvbWV0aGluZyB0aGF0IHdhc24ndCBvbgorCQkgKiBkaXNrIHlldCAtIHJldHVybiBhIHBhZ2UgZnVsbCBvZiB6ZXJvZXMuICBUaGlzIHNob3VsZCBiZSBPSywKKwkJICogYmVjYXVzZSB0aGUgb2JqZWN0IHNob3VsZCBiZSBlbXB0eSAoaWYgdGhlcmUgd2FzIGEgd3JpdGUKKwkJICogYmVmb3JlIHRoaXMgcmVhZCwgdGhlIHJlYWQgd291bGQgYmUgd2FpdGluZyB3aXRoIHRoZSBwYWdlCisJCSAqIGxvY2tlZCAqLworCQljbGVhcl9oaWdocGFnZShwYWdlKTsKKworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCWlmIChQYWdlRXJyb3IocGFnZSkpCisJCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwkJcmV0ID0gMDsgLyogcmVjb3ZlcmVkIGVycm9yICovCisJCUVYT0ZTX0RCR01TRygicmVjb3ZlcmVkIHJlYWQgZXJyb3JcbiIpOworCX0gZWxzZSAvKiBFcnJvciAqLworCQlTZXRQYWdlRXJyb3IocGFnZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd3JpdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJldCkKK3sKKwlpZiAocmV0KSB7CisJCW1hcHBpbmdfc2V0X2Vycm9yKHBhZ2UtPm1hcHBpbmcsIHJldCk7CisJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl9CisJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworfQorCisvKiBDYWxsZWQgYXQgdGhlIGVuZCBvZiByZWFkcywgdG8gb3B0aW9uYWxseSB1bmxvY2sgcGFnZXMgYW5kIHVwZGF0ZSB0aGVpcgorICogc3RhdHVzLgorICovCitzdGF0aWMgaW50IF9fcmVhZHBhZ2VzX2RvbmUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCwKKwkJCSAgICBib29sIGRvX3VubG9jaykKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKwlpbnQgaTsKKwl1NjQgcmVzaWQ7CisJdTY0IGdvb2RfYnl0ZXM7CisJdTY0IGxlbmd0aCA9IDA7CisJaW50IHJldCA9IGV4b2ZzX2NoZWNrX29rX3Jlc2lkKG9yLCAmcmVzaWQsIE5VTEwpOworCisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKworCWlmIChsaWtlbHkoIXJldCkpCisJCWdvb2RfYnl0ZXMgPSBwY29sLT5sZW5ndGg7CisJZWxzZSBpZiAoIXJlc2lkKQorCQlnb29kX2J5dGVzID0gMDsKKwllbHNlCisJCWdvb2RfYnl0ZXMgPSBwY29sLT5sZW5ndGggLSByZXNpZDsKKworCUVYT0ZTX0RCR01TRygicmVhZHBhZ2VzX2RvbmUoMHglbHgpIGdvb2RfYnl0ZXM9MHglbGx4IgorCQkgICAgICIgbGVuZ3RoPTB4JWx4IG5yX3BhZ2VzPSV1XG4iLAorCQkgICAgIHBjb2wtPmlub2RlLT5pX2lubywgX0xMVShnb29kX2J5dGVzKSwgcGNvbC0+bGVuZ3RoLAorCQkgICAgIHBjb2wtPm5yX3BhZ2VzKTsKKworCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgcGNvbC0+YmlvLCBpLCAwKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlYy0+YnZfcGFnZTsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJCWludCBwYWdlX3N0YXQ7CisKKwkJaWYgKGlub2RlICE9IHBjb2wtPmlub2RlKQorCQkJY29udGludWU7IC8qIG9zZCBtaWdodCBhZGQgbW9yZSBwYWdlcyBhdCBlbmQgKi8KKworCQlpZiAobGlrZWx5KGxlbmd0aCA8IGdvb2RfYnl0ZXMpKQorCQkJcGFnZV9zdGF0ID0gMDsKKwkJZWxzZQorCQkJcGFnZV9zdGF0ID0gcmV0OworCisJCUVYT0ZTX0RCR01TRygiICAgIHJlYWRwYWdlc19kb25lKDB4JWx4LCAweCVseCkgJXNcbiIsCisJCQkgIGlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgsCisJCQkgIHBhZ2Vfc3RhdCA/ICJiYWRfYnl0ZXMiIDogImdvb2RfYnl0ZXMiKTsKKworCQlyZXQgPSB1cGRhdGVfcmVhZF9wYWdlKHBhZ2UsIHBhZ2Vfc3RhdCk7CisJCWlmIChkb191bmxvY2spCisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJbGVuZ3RoICs9IGJ2ZWMtPmJ2X2xlbjsKKwl9CisKKwlwY29sX2ZyZWUocGNvbCk7CisJRVhPRlNfREJHTVNHKCJyZWFkcGFnZXNfZG9uZSBFTkRcbiIpOworCXJldHVybiByZXQ7Cit9CisKKy8qIGNhbGxiYWNrIG9mIGFzeW5jIHJlYWRzICovCitzdGF0aWMgdm9pZCByZWFkcGFnZXNfZG9uZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB2b2lkICpwKQoreworCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wgPSBwOworCisJX19yZWFkcGFnZXNfZG9uZShvciwgcGNvbCwgdHJ1ZSk7CisJYXRvbWljX2RlYygmcGNvbC0+c2JpLT5zX2N1cnJfcGVuZGluZyk7CisJa2ZyZWUocCk7Cit9CisKK3N0YXRpYyB2b2lkIF91bmxvY2tfcGNvbF9wYWdlcyhzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sLCBpbnQgcmV0LCBpbnQgcncpCit7CisJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CisJaW50IGk7CisKKwlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIHBjb2wtPmJpbywgaSwgMCkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisKKwkJaWYgKHJ3ID09IFJFQUQpCisJCQl1cGRhdGVfcmVhZF9wYWdlKHBhZ2UsIHJldCk7CisJCWVsc2UKKwkJCXVwZGF0ZV93cml0ZV9wYWdlKHBhZ2UsIHJldCk7CisKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfQorCXBjb2xfZnJlZShwY29sKTsKK30KKworc3RhdGljIGludCByZWFkX2V4ZWMoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCwgYm9vbCBpc19zeW5jKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShwY29sLT5pbm9kZSk7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqID0ge3Bjb2wtPnNiaS0+c19waWQsCisJCQkJCXBjb2wtPmlub2RlLT5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3IgPSBOVUxMOworCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2xfY29weSA9IE5VTEw7CisJbG9mZl90IGlfc3RhcnQgPSBwY29sLT5wZ19maXJzdCA8PCBQQUdFX0NBQ0hFX1NISUZUOworCWludCByZXQ7CisKKwlpZiAoIXBjb2wtPmJpbykKKwkJcmV0dXJuIDA7CisKKwkvKiBzZWUgY29tbWVudCBpbiBfcmVhZHBhZ2UoKSBhYm91dCBzeW5jIHJlYWRzICovCisJV0FSTl9PTihpc19zeW5jICYmIChwY29sLT5ucl9wYWdlcyAhPSAxKSk7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHBjb2wtPnNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCW9zZF9yZXFfcmVhZChvciwgJm9iaiwgcGNvbC0+YmlvLCBpX3N0YXJ0KTsKKworCWlmIChpc19zeW5jKSB7CisJCWV4b2ZzX3N5bmNfb3Aob3IsIHBjb2wtPnNiaS0+c190aW1lb3V0LCBvaS0+aV9jcmVkKTsKKwkJcmV0dXJuIF9fcmVhZHBhZ2VzX2RvbmUob3IsIHBjb2wsIGZhbHNlKTsKKwl9CisKKwlwY29sX2NvcHkgPSBrbWFsbG9jKHNpemVvZigqcGNvbF9jb3B5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY29sX2NvcHkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJKnBjb2xfY29weSA9ICpwY29sOworCXJldCA9IGV4b2ZzX2FzeW5jX29wKG9yLCByZWFkcGFnZXNfZG9uZSwgcGNvbF9jb3B5LCBvaS0+aV9jcmVkKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnI7CisKKwlhdG9taWNfaW5jKCZwY29sLT5zYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCUVYT0ZTX0RCR01TRygicmVhZF9leGVjIG9iaj0weCVsbHggc3RhcnQ9MHglbGx4IGxlbmd0aD0weCVseFxuIiwKKwkJICBvYmouaWQsIF9MTFUoaV9zdGFydCksIHBjb2wtPmxlbmd0aCk7CisKKwkvKiBwYWdlcyBvd25lcnNoaXAgd2FzIHBhc3NlZCB0byBwY29sX2NvcHkgKi8KKwlfcGNvbF9yZXNldChwY29sKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWlmICghaXNfc3luYykKKwkJX3VubG9ja19wY29sX3BhZ2VzKHBjb2wsIHJldCwgUkVBRCk7CisJa2ZyZWUocGNvbF9jb3B5KTsKKwlpZiAob3IpCisJCW9zZF9lbmRfcmVxdWVzdChvcik7CisJcmV0dXJuIHJldDsKK30KKworLyogcmVhZHBhZ2Vfc3RyaXAgaXMgY2FsbGVkIGVpdGhlciBkaXJlY3RseSBmcm9tIHJlYWRwYWdlKCkgb3IgYnkgdGhlIFZGUyBmcm9tCisgKiB3aXRoaW4gcmVhZF9jYWNoZV9wYWdlcygpLCB0byBhZGQgb25lIG1vcmUgcGFnZSB0byBiZSByZWFkLiBJdCB3aWxsIHRyeSB0bworICogY29sbGVjdCBhcyBtYW55IGNvbnRpZ3VvdXMgcGFnZXMgYXMgcG9zaWJsZS4gSWYgYSBkaXNjb250aW51aXR5IGlzCisgKiBlbmNvdW50ZXJlZCwgb3IgaXQgcnVucyBvdXQgb2YgcmVzb3VyY2VzLCBpdCB3aWxsIHN1Ym1pdCB0aGUgcHJldmlvdXMgc2VnbWVudAorICogYW5kIHdpbGwgc3RhcnQgYSBuZXcgY29sbGVjdGlvbi4gRXZlbnR1YWxseSBjYWxsZXIgbXVzdCBzdWJtaXQgdGhlIGxhc3QKKyAqIHNlZ21lbnQgaWYgcHJlc2VudC4KKyAqLworc3RhdGljIGludCByZWFkcGFnZV9zdHJpcCh2b2lkICpkYXRhLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sID0gZGF0YTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGNvbC0+aW5vZGU7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKwlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCXBnb2ZmX3QgZW5kX2luZGV4ID0gaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJc2l6ZV90IGxlbjsKKwlpbnQgcmV0OworCisJLyogRklYTUU6IEp1c3QgZm9yIGRlYnVnZ2luZywgd2lsbCBiZSByZW1vdmVkICovCisJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJRVhPRlNfRVJSKCJQYWdlVXB0b2RhdGUoMHglbHgsIDB4JWx4KVxuIiwgcGNvbC0+aW5vZGUtPmlfaW5vLAorCQkJICBwYWdlLT5pbmRleCk7CisKKwlpZiAocGFnZS0+aW5kZXggPCBlbmRfaW5kZXgpCisJCWxlbiA9IFBBR0VfQ0FDSEVfU0laRTsKKwllbHNlIGlmIChwYWdlLT5pbmRleCA9PSBlbmRfaW5kZXgpCisJCWxlbiA9IGlfc2l6ZSAmIH5QQUdFX0NBQ0hFX01BU0s7CisJZWxzZQorCQlsZW4gPSAwOworCisJaWYgKCFsZW4gfHwgIW9ial9jcmVhdGVkKG9pKSkgeworCQkvKiB0aGlzIHdpbGwgYmUgb3V0IG9mIGJvdW5kcywgb3IgZG9lc24ndCBleGlzdCB5ZXQuCisJCSAqIEN1cnJlbnQgcGFnZSBpcyBjbGVhcmVkIGFuZCB0aGUgcmVxdWVzdCBpcyBzcGxpdAorCQkgKi8KKwkJY2xlYXJfaGlnaHBhZ2UocGFnZSk7CisKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQorCQkJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CisKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCUVYT0ZTX0RCR01TRygicmVhZHBhZ2Vfc3RyaXAoMHglbHgsIDB4JWx4KSBlbXB0eSBwYWdlLCIKKwkJCSAgICAgIiBzcGxpdHRpbmdcbiIsIGlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgpOworCisJCXJldHVybiByZWFkX2V4ZWMocGNvbCwgZmFsc2UpOworCX0KKwordHJ5X2FnYWluOgorCisJaWYgKHVubGlrZWx5KHBjb2wtPnBnX2ZpcnN0ID09IC0xKSkgeworCQlwY29sLT5wZ19maXJzdCA9IHBhZ2UtPmluZGV4OworCX0gZWxzZSBpZiAodW5saWtlbHkoKHBjb2wtPnBnX2ZpcnN0ICsgcGNvbC0+bnJfcGFnZXMpICE9CisJCSAgIHBhZ2UtPmluZGV4KSkgeworCQkvKiBEaXNjb250aW51aXR5IGRldGVjdGVkLCBzcGxpdCB0aGUgcmVxdWVzdCAqLworCQlyZXQgPSByZWFkX2V4ZWMocGNvbCwgZmFsc2UpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gZmFpbDsKKwkJZ290byB0cnlfYWdhaW47CisJfQorCisJaWYgKCFwY29sLT5iaW8pIHsKKwkJcmV0ID0gcGNvbF90cnlfYWxsb2MocGNvbCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJZ290byBmYWlsOworCX0KKworCWlmIChsZW4gIT0gUEFHRV9DQUNIRV9TSVpFKQorCQl6ZXJvX3VzZXIocGFnZSwgbGVuLCBQQUdFX0NBQ0hFX1NJWkUgLSBsZW4pOworCisJRVhPRlNfREJHTVNHKCIgICAgcmVhZHBhZ2Vfc3RyaXAoMHglbHgsIDB4JWx4KSBsZW49MHglenhcbiIsCisJCSAgICAgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCwgbGVuKTsKKworCXJldCA9IHBjb2xfYWRkX3BhZ2UocGNvbCwgcGFnZSwgbGVuKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0RCR01TRygiRmFpbGVkIHBjb2xfYWRkX3BhZ2UgcGFnZXNbaV09JXAgIgorCQkJICAidGhpc19sZW49MHglenggbnJfcGFnZXM9JXUgbGVuZ3RoPTB4JWx4XG4iLAorCQkJICBwYWdlLCBsZW4sIHBjb2wtPm5yX3BhZ2VzLCBwY29sLT5sZW5ndGgpOworCisJCS8qIHNwbGl0IHRoZSByZXF1ZXN0LCBhbmQgc3RhcnQgYWdhaW4gd2l0aCBjdXJyZW50IHBhZ2UgKi8KKwkJcmV0ID0gcmVhZF9leGVjKHBjb2wsIGZhbHNlKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIGZhaWw7CisKKwkJZ290byB0cnlfYWdhaW47CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJLyogU2V0UGFnZUVycm9yKHBhZ2UpOyA/Pz8gKi8KKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV4b2ZzX3JlYWRwYWdlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywgdW5zaWduZWQgbnJfcGFnZXMpCit7CisJc3RydWN0IHBhZ2VfY29sbGVjdCBwY29sOworCWludCByZXQ7CisKKwlfcGNvbF9pbml0KCZwY29sLCBucl9wYWdlcywgbWFwcGluZy0+aG9zdCk7CisKKwlyZXQgPSByZWFkX2NhY2hlX3BhZ2VzKG1hcHBpbmcsIHBhZ2VzLCByZWFkcGFnZV9zdHJpcCwgJnBjb2wpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJyZWFkX2NhY2hlX3BhZ2VzID0+ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZWFkX2V4ZWMoJnBjb2wsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBfcmVhZHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgaXNfc3luYykKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0IHBjb2w7CisJaW50IHJldDsKKworCV9wY29sX2luaXQoJnBjb2wsIDEsIHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCisJLyogcmVhZHBhZ2Vfc3RyaXAgbWlnaHQgY2FsbCByZWFkX2V4ZWMoLGFzeW5jKSBpbnNpZGUgYXQgc2V2ZXJhbCBwbGFjZXMKKwkgKiBidXQgdGhpcyBpcyBzYWZlIGZvciBpc19hc3luYz0wIHNpbmNlIHJlYWRfZXhlYyB3aWxsIG5vdCBkbyBhbnl0aGluZworCSAqIHdoZW4gd2UgaGF2ZSBhIHNpbmdsZSBwYWdlLgorCSAqLworCXJldCA9IHJlYWRwYWdlX3N0cmlwKCZwY29sLCBwYWdlKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0VSUigiX3JlYWRwYWdlID0+ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZWFkX2V4ZWMoJnBjb2wsIGlzX3N5bmMpOworfQorCisvKgorICogV2UgZG9uJ3QgbmVlZCB0aGUgZmlsZQorICovCitzdGF0aWMgaW50IGV4b2ZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gX3JlYWRwYWdlKHBhZ2UsIGZhbHNlKTsKK30KKworLyogQ2FsbGJhY2sgZm9yIG9zZF93cml0ZS4gQWxsIHdyaXRlcyBhcmUgYXN5bmNocm9ub3VzZSAqLworc3RhdGljIHZvaWQgd3JpdGVwYWdlc19kb25lKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHZvaWQgKnApCit7CisJc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCA9IHA7CisJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CisJaW50IGk7CisJdTY0IHJlc2lkOworCXU2NCAgZ29vZF9ieXRlczsKKwl1NjQgIGxlbmd0aCA9IDA7CisKKwlpbnQgcmV0ID0gZXhvZnNfY2hlY2tfb2tfcmVzaWQob3IsIE5VTEwsICZyZXNpZCk7CisKKwlvc2RfZW5kX3JlcXVlc3Qob3IpOworCWF0b21pY19kZWMoJnBjb2wtPnNiaS0+c19jdXJyX3BlbmRpbmcpOworCisJaWYgKGxpa2VseSghcmV0KSkKKwkJZ29vZF9ieXRlcyA9IHBjb2wtPmxlbmd0aDsKKwllbHNlIGlmICghcmVzaWQpCisJCWdvb2RfYnl0ZXMgPSAwOworCWVsc2UKKwkJZ29vZF9ieXRlcyA9IHBjb2wtPmxlbmd0aCAtIHJlc2lkOworCisJRVhPRlNfREJHTVNHKCJ3cml0ZXBhZ2VzX2RvbmUoMHglbHgpIGdvb2RfYnl0ZXM9MHglbGx4IgorCQkgICAgICIgbGVuZ3RoPTB4JWx4IG5yX3BhZ2VzPSV1XG4iLAorCQkgICAgIHBjb2wtPmlub2RlLT5pX2lubywgX0xMVShnb29kX2J5dGVzKSwgcGNvbC0+bGVuZ3RoLAorCQkgICAgIHBjb2wtPm5yX3BhZ2VzKTsKKworCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgcGNvbC0+YmlvLCBpLCAwKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlYy0+YnZfcGFnZTsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJCWludCBwYWdlX3N0YXQ7CisKKwkJaWYgKGlub2RlICE9IHBjb2wtPmlub2RlKQorCQkJY29udGludWU7IC8qIG9zZCBtaWdodCBhZGQgbW9yZSBwYWdlcyB0byBhIGJpbyAqLworCisJCWlmIChsaWtlbHkobGVuZ3RoIDwgZ29vZF9ieXRlcykpCisJCQlwYWdlX3N0YXQgPSAwOworCQllbHNlCisJCQlwYWdlX3N0YXQgPSByZXQ7CisKKwkJdXBkYXRlX3dyaXRlX3BhZ2UocGFnZSwgcGFnZV9zdGF0KTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCUVYT0ZTX0RCR01TRygiICAgIHdyaXRlcGFnZXNfZG9uZSgweCVseCwgMHglbHgpIHN0YXR1cz0lZFxuIiwKKwkJCSAgICAgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCwgcGFnZV9zdGF0KTsKKworCQlsZW5ndGggKz0gYnZlYy0+YnZfbGVuOworCX0KKworCXBjb2xfZnJlZShwY29sKTsKKwlrZnJlZShwY29sKTsKKwlFWE9GU19EQkdNU0coIndyaXRlcGFnZXNfZG9uZSBFTkRcbiIpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2V4ZWMoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCkKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2kocGNvbC0+aW5vZGUpOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iaiA9IHtwY29sLT5zYmktPnNfcGlkLAorCQkJCQlwY29sLT5pbm9kZS0+aV9pbm8gKyBFWE9GU19PQkpfT0ZGfTsKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yID0gTlVMTDsKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sX2NvcHkgPSBOVUxMOworCWxvZmZfdCBpX3N0YXJ0ID0gcGNvbC0+cGdfZmlyc3QgPDwgUEFHRV9DQUNIRV9TSElGVDsKKwlpbnQgcmV0OworCisJaWYgKCFwY29sLT5iaW8pCisJCXJldHVybiAwOworCisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChwY29sLT5zYmktPnNfZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW9yKSkgeworCQlFWE9GU19FUlIoIndyaXRlX2V4ZWM6IEZhaWxkIHRvIG9zZF9zdGFydF9yZXF1ZXN0KClcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlwY29sX2NvcHkgPSBrbWFsbG9jKHNpemVvZigqcGNvbF9jb3B5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY29sX2NvcHkpIHsKKwkJRVhPRlNfRVJSKCJ3cml0ZV9leGVjOiBGYWlsZCB0byBrbWFsbG9jKHBjb2wpXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJKnBjb2xfY29weSA9ICpwY29sOworCisJb3NkX3JlcV93cml0ZShvciwgJm9iaiwgcGNvbF9jb3B5LT5iaW8sIGlfc3RhcnQpOworCXJldCA9IGV4b2ZzX2FzeW5jX29wKG9yLCB3cml0ZXBhZ2VzX2RvbmUsIHBjb2xfY29weSwgb2ktPmlfY3JlZCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJRVhPRlNfRVJSKCJ3cml0ZV9leGVjOiBleG9mc19hc3luY19vcCgpIEZhaWxkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJYXRvbWljX2luYygmcGNvbC0+c2JpLT5zX2N1cnJfcGVuZGluZyk7CisJRVhPRlNfREJHTVNHKCJ3cml0ZV9leGVjKDB4JWx4LCAweCVsbHgpIHN0YXJ0PTB4JWxseCBsZW5ndGg9MHglbHhcbiIsCisJCSAgcGNvbC0+aW5vZGUtPmlfaW5vLCBwY29sLT5wZ19maXJzdCwgX0xMVShpX3N0YXJ0KSwKKwkJICBwY29sLT5sZW5ndGgpOworCS8qIHBhZ2VzIG93bmVyc2hpcCB3YXMgcGFzc2VkIHRvIHBjb2xfY29weSAqLworCV9wY29sX3Jlc2V0KHBjb2wpOworCXJldHVybiAwOworCitlcnI6CisJX3VubG9ja19wY29sX3BhZ2VzKHBjb2wsIHJldCwgV1JJVEUpOworCWtmcmVlKHBjb2xfY29weSk7CisJaWYgKG9yKQorCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCXJldHVybiByZXQ7Cit9CisKKy8qIHdyaXRlcGFnZV9zdHJpcCBpcyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20gd3JpdGVwYWdlKCkgb3IgYnkgdGhlIFZGUyBmcm9tCisgKiB3aXRoaW4gd3JpdGVfY2FjaGVfcGFnZXMoKSwgdG8gYWRkIG9uZSBtb3JlIHBhZ2UgdG8gYmUgd3JpdHRlbiB0byBzdG9yYWdlLgorICogSXQgd2lsbCB0cnkgdG8gY29sbGVjdCBhcyBtYW55IGNvbnRpZ3VvdXMgcGFnZXMgYXMgcG9zc2libGUuIElmIGEKKyAqIGRpc2NvbnRpbnVpdHkgaXMgZW5jb3VudGVyZWQgb3IgaXQgcnVucyBvdXQgb2YgcmVzb3VyY2VzIGl0IHdpbGwgc3VibWl0IHRoZQorICogcHJldmlvdXMgc2VnbWVudCBhbmQgd2lsbCBzdGFydCBhIG5ldyBjb2xsZWN0aW9uLgorICogRXZlbnR1YWxseSBjYWxsZXIgbXVzdCBzdWJtaXQgdGhlIGxhc3Qgc2VnbWVudCBpZiBwcmVzZW50LgorICovCitzdGF0aWMgaW50IHdyaXRlcGFnZV9zdHJpcChzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjX3VudXNlZCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sID0gZGF0YTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGNvbC0+aW5vZGU7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKwlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCXBnb2ZmX3QgZW5kX2luZGV4ID0gaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJc2l6ZV90IGxlbjsKKwlpbnQgcmV0OworCisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKworCXJldCA9IHdhaXRfb2JqX2NyZWF0ZWQob2kpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlpZiAocGFnZS0+aW5kZXggPCBlbmRfaW5kZXgpCisJCS8qIGluIHRoaXMgY2FzZSwgdGhlIHBhZ2UgaXMgd2l0aGluIHRoZSBsaW1pdHMgb2YgdGhlIGZpbGUgKi8KKwkJbGVuID0gUEFHRV9DQUNIRV9TSVpFOworCWVsc2UgeworCQlsZW4gPSBpX3NpemUgJiB+UEFHRV9DQUNIRV9NQVNLOworCisJCWlmIChwYWdlLT5pbmRleCA+IGVuZF9pbmRleCB8fCAhbGVuKSB7CisJCQkvKiBpbiB0aGlzIGNhc2UsIHRoZSBwYWdlIGlzIG91dHNpZGUgdGhlIGxpbWl0cworCQkJICogKHRydW5jYXRlIGluIHByb2dyZXNzKQorCQkJICovCisJCQlyZXQgPSB3cml0ZV9leGVjKHBjb2wpOworCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQkJZ290byBmYWlsOworCQkJaWYgKFBhZ2VFcnJvcihwYWdlKSkKKwkJCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKK3RyeV9hZ2FpbjoKKworCWlmICh1bmxpa2VseShwY29sLT5wZ19maXJzdCA9PSAtMSkpIHsKKwkJcGNvbC0+cGdfZmlyc3QgPSBwYWdlLT5pbmRleDsKKwl9IGVsc2UgaWYgKHVubGlrZWx5KChwY29sLT5wZ19maXJzdCArIHBjb2wtPm5yX3BhZ2VzKSAhPQorCQkgICBwYWdlLT5pbmRleCkpIHsKKwkJLyogRGlzY29udGludWl0eSBkZXRlY3RlZCwgc3BsaXQgdGhlIHJlcXVlc3QgKi8KKwkJcmV0ID0gd3JpdGVfZXhlYyhwY29sKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIGZhaWw7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmICghcGNvbC0+YmlvKSB7CisJCXJldCA9IHBjb2xfdHJ5X2FsbG9jKHBjb2wpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlFWE9GU19EQkdNU0coIiAgICB3cml0ZXBhZ2Vfc3RyaXAoMHglbHgsIDB4JWx4KSBsZW49MHglenhcbiIsCisJCSAgICAgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCwgbGVuKTsKKworCXJldCA9IHBjb2xfYWRkX3BhZ2UocGNvbCwgcGFnZSwgbGVuKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlFWE9GU19EQkdNU0coIkZhaWxlZCBwY29sX2FkZF9wYWdlICIKKwkJCSAgICAgIm5yX3BhZ2VzPSV1IHRvdGFsX2xlbmd0aD0weCVseFxuIiwKKwkJCSAgICAgcGNvbC0+bnJfcGFnZXMsIHBjb2wtPmxlbmd0aCk7CisKKwkJLyogc3BsaXQgdGhlIHJlcXVlc3QsIG5leHQgbG9vcCB3aWxsIHN0YXJ0IGFnYWluICovCisJCXJldCA9IHdyaXRlX2V4ZWMocGNvbCk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlFWE9GU19EQkdNU0coIndyaXRlX2V4ZWMgZmFpbGQgPT4gJWQiLCByZXQpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJZ290byB0cnlfYWdhaW47CisJfQorCisJQlVHX09OKFBhZ2VXcml0ZWJhY2socGFnZSkpOworCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKworCXJldHVybiAwOworCitmYWlsOgorCXNldF9iaXQoQVNfRUlPLCAmcGFnZS0+bWFwcGluZy0+ZmxhZ3MpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJICAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBwYWdlX2NvbGxlY3QgcGNvbDsKKwlsb25nIHN0YXJ0LCBlbmQsIGV4cGVjdGVkX3BhZ2VzOworCWludCByZXQ7CisKKwlzdGFydCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwllbmQgPSAod2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKSA/CisJCQlzdGFydCArIG1hcHBpbmctPm5ycGFnZXMgOgorCQkJd2JjLT5yYW5nZV9lbmQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKworCWlmIChzdGFydCB8fCBlbmQpCisJCWV4cGVjdGVkX3BhZ2VzID0gbWluKGVuZCAtIHN0YXJ0ICsgMSwgMzJMKTsKKwllbHNlCisJCWV4cGVjdGVkX3BhZ2VzID0gbWFwcGluZy0+bnJwYWdlczsKKworCUVYT0ZTX0RCR01TRygiaW5vZGUoMHglbHgpIHdiYy0+c3RhcnQ9MHglbGx4IHdiYy0+ZW5kPTB4JWxseCIKKwkJICAgICAiIG0tPm5ycGFnZXM9JWx1IHN0YXJ0PTB4JWx4IGVuZD0weCVseFxuIiwKKwkJICAgICBtYXBwaW5nLT5ob3N0LT5pX2lubywgd2JjLT5yYW5nZV9zdGFydCwgd2JjLT5yYW5nZV9lbmQsCisJCSAgICAgbWFwcGluZy0+bnJwYWdlcywgc3RhcnQsIGVuZCk7CisKKwlfcGNvbF9pbml0KCZwY29sLCBleHBlY3RlZF9wYWdlcywgbWFwcGluZy0+aG9zdCk7CisKKwlyZXQgPSB3cml0ZV9jYWNoZV9wYWdlcyhtYXBwaW5nLCB3YmMsIHdyaXRlcGFnZV9zdHJpcCwgJnBjb2wpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJ3cml0ZV9jYWNoZV9wYWdlcyA9PiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gd3JpdGVfZXhlYygmcGNvbCk7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0IHBjb2w7CisJaW50IHJldDsKKworCV9wY29sX2luaXQoJnBjb2wsIDEsIHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCisJcmV0ID0gd3JpdGVwYWdlX3N0cmlwKHBhZ2UsIE5VTEwsICZwY29sKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfd3JpdGVwYWdlID0+ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB3cml0ZV9leGVjKCZwY29sKTsKK30KKworaW50IGV4b2ZzX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCXBhZ2UgPSAqcGFnZXA7CisJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQlyZXQgPSBzaW1wbGVfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwKKwkJCQkJIGZzZGF0YSk7CisJCWlmIChyZXQpIHsKKwkJCUVYT0ZTX0RCR01TRygic2ltcGxlX3dyaXRlX2JlZ2luIGZhaWxkXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlwYWdlID0gKnBhZ2VwOworCX0KKworCSAvKiByZWFkIG1vZGlmeSB3cml0ZSAqLworCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpICYmIChsZW4gIT0gUEFHRV9DQUNIRV9TSVpFKSkgeworCQlyZXQgPSBfcmVhZHBhZ2UocGFnZSwgdHJ1ZSk7CisJCWlmIChyZXQpIHsKKwkJCS8qU2V0UGFnZUVycm9yIHdhcyBkb25lIGJ5IF9yZWFkcGFnZS4gSXMgaXQgb2s/Ki8KKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJRVhPRlNfREJHTVNHKCJfX3JlYWRwYWdlX2ZpbGxlciBmYWlsZFxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV4b2ZzX3dyaXRlX2JlZ2luX2V4cG9ydChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCit7CisJKnBhZ2VwID0gTlVMTDsKKworCXJldHVybiBleG9mc193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLAorCQkJCQlmc2RhdGEpOworfQorCitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4b2ZzX2FvcHMgPSB7CisJLnJlYWRwYWdlCT0gZXhvZnNfcmVhZHBhZ2UsCisJLnJlYWRwYWdlcwk9IGV4b2ZzX3JlYWRwYWdlcywKKwkud3JpdGVwYWdlCT0gZXhvZnNfd3JpdGVwYWdlLAorCS53cml0ZXBhZ2VzCT0gZXhvZnNfd3JpdGVwYWdlcywKKwkud3JpdGVfYmVnaW4JPSBleG9mc193cml0ZV9iZWdpbl9leHBvcnQsCisJLndyaXRlX2VuZAk9IHNpbXBsZV93cml0ZV9lbmQsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJTk9ERSBPUEVSQVRJT05TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUZXN0IHdoZXRoZXIgYW4gaW5vZGUgaXMgYSBmYXN0IHN5bWxpbmsuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGV4b2ZzX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShpbm9kZSk7CisKKwlyZXR1cm4gU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiAob2ktPmlfZGF0YVswXSAhPSAwKTsKK30KKworLyoKKyAqIGdldF9ibG9ja190IC0gRmlsbCBpbiBhIGJ1ZmZlcl9oZWFkCisgKiBBbiBPU0QgdGFrZXMgY2FyZSBvZiBibG9jayBhbGxvY2F0aW9uIHNvIHdlIGp1c3QgZmFrZSBhbiBhbGxvY2F0aW9uIGJ5CisgKiBwdXR0aW5nIGluIHRoZSBpbm9kZSdzIHNlY3Rvcl90IGluIHRoZSBidWZmZXJfaGVhZC4KKyAqIFRPRE86IFdoYXQgYWJvdXQgdGhlIGNhc2Ugb2YgY3JlYXRlPT0wIGFuZCBAaWJsb2NrIGRvZXMgbm90IGV4aXN0IGluIHRoZQorICogb2JqZWN0PworICovCitzdGF0aWMgaW50IGV4b2ZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKK3sKKwltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgaWJsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IG9zZF9hdHRyIGdfYXR0cl9sb2dpY2FsX2xlbmd0aCA9IEFUVFJfREVGKAorCU9TRF9BUEFHRV9PQkpFQ1RfSU5GT1JNQVRJT04sIE9TRF9BVFRSX09JX0xPR0lDQUxfTEVOR1RILCA4KTsKKworLyoKKyAqIFRydW5jYXRlIGEgZmlsZSB0byB0aGUgc3BlY2lmaWVkIHNpemUgLSBhbGwgd2UgaGF2ZSB0byBkbyBpcyBzZXQgdGhlIHNpemUKKyAqIGF0dHJpYnV0ZS4gIFdlIG1ha2Ugc3VyZSB0aGUgb2JqZWN0IGV4aXN0cyBmaXJzdC4KKyAqLwordm9pZCBleG9mc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShpbm9kZSk7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqID0ge3NiaS0+c19waWQsIGlub2RlLT5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJc3RydWN0IG9zZF9hdHRyIGF0dHI7CisJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCV9fYmU2NCBuZXdzaXplOworCWludCByZXQ7CisKKwlpZiAoIShTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkKKwkgICAgIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpKQorCQlyZXR1cm47CisJaWYgKGV4b2ZzX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpCisJCXJldHVybjsKKwlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQorCQlyZXR1cm47CisJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKworCW5vYmhfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpc2l6ZSwgZXhvZnNfZ2V0X2Jsb2NrKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCJFUlJPUjogZXhvZnNfdHJ1bmNhdGU6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKG9yLCAmb2JqKTsKKworCW5ld3NpemUgPSBjcHVfdG9fYmU2NCgodTY0KWlzaXplKTsKKwlhdHRyID0gZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoOworCWF0dHIudmFsX3B0ciA9ICZuZXdzaXplOworCW9zZF9yZXFfYWRkX3NldF9hdHRyX2xpc3Qob3IsICZhdHRyLCAxKTsKKworCS8qIGlmIHdlIGFyZSBhYm91dCB0byB0cnVuY2F0ZSBhbiBvYmplY3QsIGFuZCBpdCBoYXNuJ3QgYmVlbgorCSAqIGNyZWF0ZWQgeWV0LCB3YWl0CisJICovCisJaWYgKHVubGlrZWx5KHdhaXRfb2JqX2NyZWF0ZWQob2kpKSkKKwkJZ290byBmYWlsOworCisJcmV0ID0gZXhvZnNfc3luY19vcChvciwgc2JpLT5zX3RpbWVvdXQsIG9pLT5pX2NyZWQpOworCW9zZF9lbmRfcmVxdWVzdChvcik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCitvdXQ6CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuOworZmFpbDoKKwltYWtlX2JhZF9pbm9kZShpbm9kZSk7CisJZ290byBvdXQ7Cit9CisKKy8qCisgKiBTZXQgaW5vZGUgYXR0cmlidXRlcyAtIGp1c3QgY2FsbCBnZW5lcmljIGZ1bmN0aW9ucy4KKyAqLworaW50IGV4b2ZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGlhdHRyKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgaWF0dHIpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIFJlYWQgYW4gaW5vZGUgZnJvbSB0aGUgT1NELCBhbmQgcmV0dXJuIGl0IGFzIGlzLiAgV2UgYWxzbyByZXR1cm4gdGhlIHNpemUKKyAqIGF0dHJpYnV0ZSBpbiB0aGUgJ3Nhbml0eScgYXJndW1lbnQgaWYgd2UgZ290IGNvbXBpbGVkIHdpdGggZGVidWdnaW5nIHR1cm5lZAorICogb24uCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleG9mc19pX2luZm8gKm9pLAorCQkgICAgc3RydWN0IGV4b2ZzX2ZjYiAqaW5vZGUsIHVpbnQ2NF90ICpzYW5pdHkpCit7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cjsKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7c2JpLT5zX3BpZCwKKwkJCQkgb2ktPnZmc19pbm9kZS5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCWludCByZXQ7CisKKwlleG9mc19tYWtlX2NyZWRlbnRpYWwob2ktPmlfY3JlZCwgJm9iaik7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfZ2V0X2lub2RlOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW9zZF9yZXFfZ2V0X2F0dHJpYnV0ZXMob3IsICZvYmopOworCisJLyogd2UgbmVlZCB0aGUgaW5vZGUgYXR0cmlidXRlICovCisJb3NkX3JlcV9hZGRfZ2V0X2F0dHJfbGlzdChvciwgJmdfYXR0cl9pbm9kZV9kYXRhLCAxKTsKKworI2lmZGVmIEVYT0ZTX0RFQlVHX09CSl9JU0laRQorCS8qIHdlIGdldCB0aGUgc2l6ZSBhdHRyaWJ1dGVzIHRvIGRvIGEgc2FuaXR5IGNoZWNrICovCisJb3NkX3JlcV9hZGRfZ2V0X2F0dHJfbGlzdChvciwgJmdfYXR0cl9sb2dpY2FsX2xlbmd0aCwgMSk7CisjZW5kaWYKKworCXJldCA9IGV4b2ZzX3N5bmNfb3Aob3IsIHNiaS0+c190aW1lb3V0LCBvaS0+aV9jcmVkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWF0dHIgPSBnX2F0dHJfaW5vZGVfZGF0YTsKKwlyZXQgPSBleHRyYWN0X2F0dHJfZnJvbV9yZXEob3IsICZhdHRyKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfZ2V0X2lub2RlOiBleHRyYWN0X2F0dHJfZnJvbV9yZXEgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJV0FSTl9PTihhdHRyLmxlbiAhPSBFWE9GU19JTk9fQVRUUl9TSVpFKTsKKwltZW1jcHkoaW5vZGUsIGF0dHIudmFsX3B0ciwgRVhPRlNfSU5PX0FUVFJfU0laRSk7CisKKyNpZmRlZiBFWE9GU19ERUJVR19PQkpfSVNJWkUKKwlhdHRyID0gZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoOworCXJldCA9IGV4dHJhY3RfYXR0cl9mcm9tX3JlcShvciwgJmF0dHIpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJFUlJPUjogZXh0cmFjdCBhdHRyIGZyb20gb3IgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCSpzYW5pdHkgPSBnZXRfdW5hbGlnbmVkX2JlNjQoYXR0ci52YWxfcHRyKTsKKyNlbmRpZgorCitvdXQ6CisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRmlsbCBpbiBhbiBpbm9kZSByZWFkIGZyb20gdGhlIE9TRCBhbmQgc2V0IGl0IHVwIGZvciB1c2UKKyAqLworc3RydWN0IGlub2RlICpleG9mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pOworCXN0cnVjdCBleG9mc19mY2IgZmNiOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJdWludDY0X3QgdW5pbml0aWFsaXplZF92YXIoc2FuaXR5KTsKKwlpbnQgcmV0OworCisJaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSkKKwkJcmV0dXJuIGlub2RlOworCW9pID0gZXhvZnNfaShpbm9kZSk7CisKKwkvKiByZWFkIHRoZSBpbm9kZSBmcm9tIHRoZSBvc2QgKi8KKwlyZXQgPSBleG9mc19nZXRfaW5vZGUoc2IsIG9pLCAmZmNiLCAmc2FuaXR5KTsKKwlpZiAocmV0KQorCQlnb3RvIGJhZF9pbm9kZTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm9pLT5pX3dxKTsKKwlzZXRfb2JqX2NyZWF0ZWQob2kpOworCisJLyogY29weSBzdHVmZiBmcm9tIG9uLWRpc2sgc3RydWN0IHRvIGluLW1lbW9yeSBzdHJ1Y3QgKi8KKwlpbm9kZS0+aV9tb2RlID0gbGUxNl90b19jcHUoZmNiLmlfbW9kZSk7CisJaW5vZGUtPmlfdWlkID0gbGUzMl90b19jcHUoZmNiLmlfdWlkKTsKKwlpbm9kZS0+aV9naWQgPSBsZTMyX3RvX2NwdShmY2IuaV9naWQpOworCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUoZmNiLmlfbGlua3NfY291bnQpOworCWlub2RlLT5pX2N0aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUoZmNiLmlfY3RpbWUpOworCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUoZmNiLmlfYXRpbWUpOworCWlub2RlLT5pX210aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUoZmNiLmlfbXRpbWUpOworCWlub2RlLT5pX2N0aW1lLnR2X25zZWMgPQorCQlpbm9kZS0+aV9hdGltZS50dl9uc2VjID0gaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CisJb2ktPmlfY29tbWl0X3NpemUgPSBsZTY0X3RvX2NwdShmY2IuaV9zaXplKTsKKwlpX3NpemVfd3JpdGUoaW5vZGUsIG9pLT5pX2NvbW1pdF9zaXplKTsKKwlpbm9kZS0+aV9ibGtiaXRzID0gRVhPRlNfQkxLU0hJRlQ7CisJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KGZjYi5pX2dlbmVyYXRpb24pOworCisjaWZkZWYgRVhPRlNfREVCVUdfT0JKX0lTSVpFCisJaWYgKChpbm9kZS0+aV9zaXplICE9IHNhbml0eSkgJiYKKwkJKCFleG9mc19pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkgeworCQlFWE9GU19FUlIoIldBUk5JTkc6IFNpemUgb2Ygb2JqZWN0IGZyb20gaW5vZGUgYW5kICIKKwkJCSAgImF0dHJpYnV0ZXMgZGlmZmVyICglbGxkICE9ICVsbHUpXG4iLAorCQkJICBpbm9kZS0+aV9zaXplLCBfTExVKHNhbml0eSkpOworCX0KKyNlbmRpZgorCisJb2ktPmlfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CisKKwlpZiAoKGlub2RlLT5pX25saW5rID09IDApICYmIChpbm9kZS0+aV9tb2RlID09IDApKSB7CisJCXJldCA9IC1FU1RBTEU7CisJCWdvdG8gYmFkX2lub2RlOworCX0KKworCWlmIChTX0lTQ0hSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaWYgKGZjYi5pX2RhdGFbMF0pCisJCQlpbm9kZS0+aV9yZGV2ID0KKwkJCQlvbGRfZGVjb2RlX2RldihsZTMyX3RvX2NwdShmY2IuaV9kYXRhWzBdKSk7CisJCWVsc2UKKwkJCWlub2RlLT5pX3JkZXYgPQorCQkJCW5ld19kZWNvZGVfZGV2KGxlMzJfdG9fY3B1KGZjYi5pX2RhdGFbMV0pKTsKKwl9IGVsc2UgeworCQltZW1jcHkob2ktPmlfZGF0YSwgZmNiLmlfZGF0YSwgc2l6ZW9mKGZjYi5pX2RhdGEpKTsKKwl9CisKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworCQlpbm9kZS0+aV9vcCA9ICZleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZleG9mc19maWxlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4b2ZzX2FvcHM7CisJfSBlbHNlIGlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX29wID0gJmV4b2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9mb3AgPSAmZXhvZnNfZGlyX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4b2ZzX2FvcHM7CisJfSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CisJCWlmIChleG9mc19pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKQorCQkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisJCWVsc2UgeworCQkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXhvZnNfYW9wczsKKwkJfQorCX0gZWxzZSB7CisJCWlub2RlLT5pX29wID0gJmV4b2ZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKKwkJaWYgKGZjYi5pX2RhdGFbMF0pCisJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCisJCQkgICBvbGRfZGVjb2RlX2RldihsZTMyX3RvX2NwdShmY2IuaV9kYXRhWzBdKSkpOworCQllbHNlCisJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCisJCQkgICBuZXdfZGVjb2RlX2RldihsZTMyX3RvX2NwdShmY2IuaV9kYXRhWzFdKSkpOworCX0KKworCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOworCXJldHVybiBpbm9kZTsKKworYmFkX2lub2RlOgorCWlnZXRfZmFpbGVkKGlub2RlKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCitpbnQgX19leG9mc193YWl0X29ial9jcmVhdGVkKHN0cnVjdCBleG9mc19pX2luZm8gKm9pKQoreworCWlmICghb2JqX2NyZWF0ZWQob2kpKSB7CisJCUJVR19PTighb2JqXzJiY3JlYXRlZChvaSkpOworCQl3YWl0X2V2ZW50KG9pLT5pX3dxLCBvYmpfY3JlYXRlZChvaSkpOworCX0KKwlyZXR1cm4gdW5saWtlbHkoaXNfYmFkX2lub2RlKCZvaS0+dmZzX2lub2RlKSkgPyAtRUlPIDogMDsKK30KKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmcm9tIGV4b2ZzX25ld19pbm9kZSgpLiAgVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IHdlCisgKiBzZXQgdGhlIG9ial9jcmVhdGVkIGZsYWcgc28gdGhhdCBvdGhlciBtZXRob2RzIGtub3cgdGhhdCB0aGUgb2JqZWN0IGV4aXN0cyBvbgorICogdGhlIE9TRC4KKyAqLworc3RhdGljIHZvaWQgY3JlYXRlX2RvbmUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcDsKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOworCWludCByZXQ7CisKKwlyZXQgPSBleG9mc19jaGVja19vayhvcik7CisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlhdG9taWNfZGVjKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0VSUigib2JqZWN0PTB4JWxseCBjcmVhdGlvbiBmYWlsZCBpbiBwaWQ9MHglbGx4IiwKKwkJCSAgX0xMVShzYmktPnNfcGlkKSwgX0xMVShpbm9kZS0+aV9pbm8gKyBFWE9GU19PQkpfT0ZGKSk7CisJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKKwl9IGVsc2UKKwkJc2V0X29ial9jcmVhdGVkKG9pKTsKKworCWF0b21pY19kZWMoJmlub2RlLT5pX2NvdW50KTsKKwl3YWtlX3VwKCZvaS0+aV93cSk7Cit9CisKKy8qCisgKiBTZXQgdXAgYSBuZXcgaW5vZGUgYW5kIGNyZWF0ZSBhbiBvYmplY3QgZm9yIGl0IG9uIHRoZSBPU0QKKyAqLworc3RydWN0IGlub2RlICpleG9mc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaTsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqOworCWludCByZXQ7CisKKwlzYiA9IGRpci0+aV9zYjsKKwlpbm9kZSA9IG5ld19pbm9kZShzYik7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlvaSA9IGV4b2ZzX2koaW5vZGUpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmb2ktPmlfd3EpOworCXNldF9vYmpfMmJjcmVhdGVkKG9pKTsKKworCXNiaSA9IHNiLT5zX2ZzX2luZm87CisKKwlzYi0+c19kaXJ0ID0gMTsKKwlpbm9kZS0+aV91aWQgPSBjdXJyZW50LT5jcmVkLT5mc3VpZDsKKwlpZiAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKSB7CisJCWlub2RlLT5pX2dpZCA9IGRpci0+aV9naWQ7CisJCWlmIChTX0lTRElSKG1vZGUpKQorCQkJbW9kZSB8PSBTX0lTR0lEOworCX0gZWxzZSB7CisJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmNyZWQtPmZzZ2lkOworCX0KKwlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKworCWlub2RlLT5pX2lubyA9IHNiaS0+c19uZXh0aWQrKzsKKwlpbm9kZS0+aV9ibGtiaXRzID0gRVhPRlNfQkxLU0hJRlQ7CisJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCW9pLT5pX2NvbW1pdF9zaXplID0gaW5vZGUtPmlfc2l6ZSA9IDA7CisJc3Bpbl9sb2NrKCZzYmktPnNfbmV4dF9nZW5fbG9jayk7CisJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IHNiaS0+c19uZXh0X2dlbmVyYXRpb24rKzsKKwlzcGluX3VubG9jaygmc2JpLT5zX25leHRfZ2VuX2xvY2spOworCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKKworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCisJb2JqLnBhcnRpdGlvbiA9IHNiaS0+c19waWQ7CisJb2JqLmlkID0gaW5vZGUtPmlfaW5vICsgRVhPRlNfT0JKX09GRjsKKwlleG9mc19tYWtlX2NyZWRlbnRpYWwob2ktPmlfY3JlZCwgJm9iaik7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfbmV3X2lub2RlOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlvc2RfcmVxX2NyZWF0ZV9vYmplY3Qob3IsICZvYmopOworCisJLyogaW5jcmVtZW50IHRoZSByZWZjb3VudCBzbyB0aGF0IHRoZSBpbm9kZSB3aWxsIHN0aWxsIGJlIGFyb3VuZCB3aGVuIHdlCisJICogcmVhY2ggdGhlIGNhbGxiYWNrCisJICovCisJYXRvbWljX2luYygmaW5vZGUtPmlfY291bnQpOworCisJcmV0ID0gZXhvZnNfYXN5bmNfb3Aob3IsIGNyZWF0ZV9kb25lLCBpbm9kZSwgb2ktPmlfY3JlZCk7CisJaWYgKHJldCkgeworCQlhdG9taWNfZGVjKCZpbm9kZS0+aV9jb3VudCk7CisJCW9zZF9lbmRfcmVxdWVzdChvcik7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlhdG9taWNfaW5jKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCXJldHVybiBpbm9kZTsKK30KKworLyoKKyAqIHN0cnVjdCB0byBwYXNzIHR3byBhcmd1bWVudHMgdG8gdXBkYXRlX2lub2RlJ3MgY2FsbGJhY2sKKyAqLworc3RydWN0IHVwZGF0ZWlfYXJncyB7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8JKnNiaTsKKwlzdHJ1Y3QgZXhvZnNfZmNiCWZjYjsKK307CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmcm9tIGV4b2ZzX3VwZGF0ZV9pbm9kZSgpLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVpX2RvbmUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdXBkYXRlaV9hcmdzICphcmdzID0gcDsKKworCW9zZF9lbmRfcmVxdWVzdChvcik7CisKKwlhdG9taWNfZGVjKCZhcmdzLT5zYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCWtmcmVlKGFyZ3MpOworfQorCisvKgorICogV3JpdGUgdGhlIGlub2RlIHRvIHRoZSBPU0QuICBKdXN0IGZpbGwgdXAgdGhlIHN0cnVjdCwgYW5kIHNldCB0aGUgYXR0cmlidXRlCisgKiBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5IGRlcGVuZGluZyBvbiB0aGUgZG9fc3luYyBmbGFnLgorICovCitzdGF0aWMgaW50IGV4b2ZzX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7c2JpLT5zX3BpZCwgaW5vZGUtPmlfaW5vICsgRVhPRlNfT0JKX09GRn07CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cjsKKwlzdHJ1Y3QgZXhvZnNfZmNiICpmY2I7CisJc3RydWN0IHVwZGF0ZWlfYXJncyAqYXJnczsKKwlpbnQgcmV0OworCisJYXJncyA9IGt6YWxsb2Moc2l6ZW9mKCphcmdzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmdzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZjYiA9ICZhcmdzLT5mY2I7CisKKwlmY2ItPmlfbW9kZSA9IGNwdV90b19sZTE2KGlub2RlLT5pX21vZGUpOworCWZjYi0+aV91aWQgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV91aWQpOworCWZjYi0+aV9naWQgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9naWQpOworCWZjYi0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGlub2RlLT5pX25saW5rKTsKKwlmY2ItPmlfY3RpbWUgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9jdGltZS50dl9zZWMpOworCWZjYi0+aV9hdGltZSA9IGNwdV90b19sZTMyKGlub2RlLT5pX2F0aW1lLnR2X3NlYyk7CisJZmNiLT5pX210aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfbXRpbWUudHZfc2VjKTsKKwlvaS0+aV9jb21taXRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlmY2ItPmlfc2l6ZSA9IGNwdV90b19sZTY0KG9pLT5pX2NvbW1pdF9zaXplKTsKKwlmY2ItPmlfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKGlub2RlLT5pX2dlbmVyYXRpb24pOworCisJaWYgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAob2xkX3ZhbGlkX2Rldihpbm9kZS0+aV9yZGV2KSkgeworCQkJZmNiLT5pX2RhdGFbMF0gPQorCQkJCWNwdV90b19sZTMyKG9sZF9lbmNvZGVfZGV2KGlub2RlLT5pX3JkZXYpKTsKKwkJCWZjYi0+aV9kYXRhWzFdID0gMDsKKwkJfSBlbHNlIHsKKwkJCWZjYi0+aV9kYXRhWzBdID0gMDsKKwkJCWZjYi0+aV9kYXRhWzFdID0KKwkJCQljcHVfdG9fbGUzMihuZXdfZW5jb2RlX2Rldihpbm9kZS0+aV9yZGV2KSk7CisJCQlmY2ItPmlfZGF0YVsyXSA9IDA7CisJCX0KKwl9IGVsc2UKKwkJbWVtY3B5KGZjYi0+aV9kYXRhLCBvaS0+aV9kYXRhLCBzaXplb2YoZmNiLT5pX2RhdGEpKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCJleG9mc191cGRhdGVfaW5vZGU6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfYXJnczsKKwl9CisKKwlvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKG9yLCAmb2JqKTsKKworCWF0dHIgPSBnX2F0dHJfaW5vZGVfZGF0YTsKKwlhdHRyLnZhbF9wdHIgPSBmY2I7CisJb3NkX3JlcV9hZGRfc2V0X2F0dHJfbGlzdChvciwgJmF0dHIsIDEpOworCisJaWYgKCFvYmpfY3JlYXRlZChvaSkpIHsKKwkJRVhPRlNfREJHTVNHKCIhb2JqX2NyZWF0ZWRcbiIpOworCQlCVUdfT04oIW9ial8yYmNyZWF0ZWQob2kpKTsKKwkJd2FpdF9ldmVudChvaS0+aV93cSwgb2JqX2NyZWF0ZWQob2kpKTsKKwkJRVhPRlNfREJHTVNHKCJ3YWl0X2V2ZW50IGRvbmVcbiIpOworCX0KKworCWlmIChkb19zeW5jKSB7CisJCXJldCA9IGV4b2ZzX3N5bmNfb3Aob3IsIHNiaS0+c190aW1lb3V0LCBvaS0+aV9jcmVkKTsKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwkJZ290byBmcmVlX2FyZ3M7CisJfSBlbHNlIHsKKwkJYXJncy0+c2JpID0gc2JpOworCisJCXJldCA9IGV4b2ZzX2FzeW5jX29wKG9yLCB1cGRhdGVpX2RvbmUsIGFyZ3MsIG9pLT5pX2NyZWQpOworCQlpZiAocmV0KSB7CisJCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCQkJZ290byBmcmVlX2FyZ3M7CisJCX0KKwkJYXRvbWljX2luYygmc2JpLT5zX2N1cnJfcGVuZGluZyk7CisJCWdvdG8gb3V0OyAvKiBkZWFsbG9jYXRpb24gaW4gdXBkYXRlaV9kb25lICovCisJfQorCitmcmVlX2FyZ3M6CisJa2ZyZWUoYXJncyk7CitvdXQ6CisJRVhPRlNfREJHTVNHKCJyZXQ9PiVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBleG9mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKK3sKKwlyZXR1cm4gZXhvZnNfdXBkYXRlX2lub2RlKGlub2RlLCB3YWl0KTsKK30KKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZyb20gZXhvZnNfZGVsZXRlX2lub2RlKCkgLSBkb24ndCBoYXZlIG11Y2ggY2xlYW5pbmcgdXAgdG8KKyAqIGRvLgorICovCitzdGF0aWMgdm9pZCBkZWxldGVfZG9uZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB2b2lkICpwKQoreworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmk7CisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlzYmkgPSBwOworCWF0b21pY19kZWMoJnNiaS0+c19jdXJyX3BlbmRpbmcpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIHJlZmNvdW50IG9mIGFuIGlub2RlIHJlYWNoZXMgemVyby4gIFdlIHJlbW92ZSB0aGUgb2JqZWN0CisgKiBmcm9tIHRoZSBPU0QgaGVyZS4gIFdlIG1ha2Ugc3VyZSB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkIGJlZm9yZSB3ZSB0cnkgYW5kCisgKiBkZWxldGUgaXQuCisgKi8KK3ZvaWQgZXhvZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqID0ge3NiaS0+c19waWQsIGlub2RlLT5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJaW50IHJldDsKKworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKworCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQorCQlnb3RvIG5vX2RlbGV0ZTsKKworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCWV4b2ZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpOworCisJaW5vZGUtPmlfc2l6ZSA9IDA7CisJaWYgKGlub2RlLT5pX2Jsb2NrcykKKwkJZXhvZnNfdHJ1bmNhdGUoaW5vZGUpOworCisJY2xlYXJfaW5vZGUoaW5vZGUpOworCisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChzYmktPnNfZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW9yKSkgeworCQlFWE9GU19FUlIoImV4b2ZzX2RlbGV0ZV9pbm9kZTogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW9zZF9yZXFfcmVtb3ZlX29iamVjdChvciwgJm9iaik7CisKKwkvKiBpZiB3ZSBhcmUgZGVsZXRpbmcgYW4gb2JqIHRoYXQgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQsIHdhaXQgKi8KKwlpZiAoIW9ial9jcmVhdGVkKG9pKSkgeworCQlCVUdfT04oIW9ial8yYmNyZWF0ZWQob2kpKTsKKwkJd2FpdF9ldmVudChvaS0+aV93cSwgb2JqX2NyZWF0ZWQob2kpKTsKKwl9CisKKwlyZXQgPSBleG9mc19hc3luY19vcChvciwgZGVsZXRlX2RvbmUsIHNiaSwgb2ktPmlfY3JlZCk7CisJaWYgKHJldCkgeworCQlFWE9GU19FUlIoCisJCSAgICAgICAiRVJST1I6IEBleG9mc19kZWxldGVfaW5vZGUgZXhvZnNfYXN5bmNfb3AgZmFpbGVkXG4iKTsKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwkJcmV0dXJuOworCX0KKwlhdG9taWNfaW5jKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCXJldHVybjsKKworbm9fZGVsZXRlOgorCWNsZWFyX2lub2RlKGlub2RlKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL25hbWVpLmMgYi9mcy9leG9mcy9uYW1laS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZmRkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9uYW1laS5jCkBAIC0wLDAgKzEsMzQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiZXhvZnMuaCIKKworc3RhdGljIGlubGluZSBpbnQgZXhvZnNfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaW50IGVyciA9IGV4b2ZzX2FkZF9saW5rKGRlbnRyeSwgaW5vZGUpOworCWlmICghZXJyKSB7CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJCXJldHVybiAwOworCX0KKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJaXB1dChpbm9kZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmV4b2ZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCSAgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW5vX3QgaW5vOworCisJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IEVYT0ZTX05BTUVfTEVOKQorCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKKworCWlubyA9IGV4b2ZzX2lub2RlX2J5X25hbWUoZGlyLCBkZW50cnkpOworCWlub2RlID0gTlVMTDsKKwlpZiAoaW5vKSB7CisJCWlub2RlID0gZXhvZnNfaWdldChkaXItPmlfc2IsIGlubyk7CisJCWlmIChJU19FUlIoaW5vZGUpKQorCQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwl9CisJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOworfQorCitzdGF0aWMgaW50IGV4b2ZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJCSBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZXhvZnNfbmV3X2lub2RlKGRpciwgbW9kZSk7CisJaW50IGVyciA9IFBUUl9FUlIoaW5vZGUpOworCWlmICghSVNfRVJSKGlub2RlKSkgeworCQlpbm9kZS0+aV9vcCA9ICZleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZleG9mc19maWxlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4b2ZzX2FvcHM7CisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCQllcnIgPSBleG9mc19hZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGV4b2ZzX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorCQkgICAgICAgZGV2X3QgcmRldikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnI7CisKKwlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5vZGUgPSBleG9mc19uZXdfaW5vZGUoZGlyLCBtb2RlKTsKKwllcnIgPSBQVFJfRVJSKGlub2RlKTsKKwlpZiAoIUlTX0VSUihpbm9kZSkpIHsKKwkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCByZGV2KTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJCWVyciA9IGV4b2ZzX2FkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICBjb25zdCBjaGFyICpzeW1uYW1lKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CisJaW50IGVyciA9IC1FTkFNRVRPT0xPTkc7CisJdW5zaWduZWQgbCA9IHN0cmxlbihzeW1uYW1lKSsxOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2k7CisKKwlpZiAobCA+IHNiLT5zX2Jsb2Nrc2l6ZSkKKwkJZ290byBvdXQ7CisKKwlpbm9kZSA9IGV4b2ZzX25ld19pbm9kZShkaXIsIFNfSUZMTksgfCBTX0lSV1hVR08pOworCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCWlmIChJU19FUlIoaW5vZGUpKQorCQlnb3RvIG91dDsKKworCW9pID0gZXhvZnNfaShpbm9kZSk7CisJaWYgKGwgPiBzaXplb2Yob2ktPmlfZGF0YSkpIHsKKwkJLyogc2xvdyBzeW1saW5rICovCisJCWlub2RlLT5pX29wID0gJmV4b2ZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXhvZnNfYW9wczsKKwkJbWVtc2V0KG9pLT5pX2RhdGEsIDAsIHNpemVvZihvaS0+aV9kYXRhKSk7CisKKwkJZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X2ZhaWw7CisJfSBlbHNlIHsKKwkJLyogZmFzdCBzeW1saW5rICovCisJCWlub2RlLT5pX29wID0gJmV4b2ZzX2Zhc3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQltZW1jcHkob2ktPmlfZGF0YSwgc3ltbmFtZSwgbCk7CisJCWlub2RlLT5pX3NpemUgPSBsLTE7CisJfQorCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCisJZXJyID0gZXhvZnNfYWRkX25vbmRpcihkZW50cnksIGlub2RlKTsKK291dDoKKwlyZXR1cm4gZXJyOworCitvdXRfZmFpbDoKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJaXB1dChpbm9kZSk7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOworCisJaWYgKGlub2RlLT5pX25saW5rID49IEVYT0ZTX0xJTktfTUFYKQorCQlyZXR1cm4gLUVNTElOSzsKKworCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCWlub2RlX2luY19saW5rX2NvdW50KGlub2RlKTsKKwlhdG9taWNfaW5jKCZpbm9kZS0+aV9jb3VudCk7CisKKwlyZXR1cm4gZXhvZnNfYWRkX25vbmRpcihkZW50cnksIGlub2RlKTsKK30KKworc3RhdGljIGludCBleG9mc19ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnIgPSAtRU1MSU5LOworCisJaWYgKGRpci0+aV9ubGluayA+PSBFWE9GU19MSU5LX01BWCkKKwkJZ290byBvdXQ7CisKKwlpbm9kZV9pbmNfbGlua19jb3VudChkaXIpOworCisJaW5vZGUgPSBleG9mc19uZXdfaW5vZGUoZGlyLCBTX0lGRElSIHwgbW9kZSk7CisJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCWdvdG8gb3V0X2RpcjsKKworCWlub2RlLT5pX29wID0gJmV4b2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCWlub2RlLT5pX2ZvcCA9ICZleG9mc19kaXJfb3BlcmF0aW9uczsKKwlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZleG9mc19hb3BzOworCisJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOworCisJZXJyID0gZXhvZnNfbWFrZV9lbXB0eShpbm9kZSwgZGlyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mYWlsOworCisJZXJyID0gZXhvZnNfYWRkX2xpbmsoZGVudHJ5LCBpbm9kZSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZmFpbDsKKworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CitvdXQ6CisJcmV0dXJuIGVycjsKKworb3V0X2ZhaWw6CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwlpcHV0KGlub2RlKTsKK291dF9kaXI6CisJaW5vZGVfZGVjX2xpbmtfY291bnQoZGlyKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIGludCBleG9mc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnIgPSAtRU5PRU5UOworCisJZGUgPSBleG9mc19maW5kX2VudHJ5KGRpciwgZGVudHJ5LCAmcGFnZSk7CisJaWYgKCFkZSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBleG9mc19kZWxldGVfZW50cnkoZGUsIHBhZ2UpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWU7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOworCWVyciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBleG9mc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IGVyciA9IC1FTk9URU1QVFk7CisKKwlpZiAoZXhvZnNfZW1wdHlfZGlyKGlub2RlKSkgeworCQllcnIgPSBleG9mc191bmxpbmsoZGlyLCBkZW50cnkpOworCQlpZiAoIWVycikgeworCQkJaW5vZGUtPmlfc2l6ZSA9IDA7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqb2xkX2lub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSA9IG5ld19kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBhZ2UgKmRpcl9wYWdlID0gTlVMTDsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkaXJfZGUgPSBOVUxMOworCXN0cnVjdCBwYWdlICpvbGRfcGFnZTsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpvbGRfZGU7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlvbGRfZGUgPSBleG9mc19maW5kX2VudHJ5KG9sZF9kaXIsIG9sZF9kZW50cnksICZvbGRfcGFnZSk7CisJaWYgKCFvbGRfZGUpCisJCWdvdG8gb3V0OworCisJaWYgKFNfSVNESVIob2xkX2lub2RlLT5pX21vZGUpKSB7CisJCWVyciA9IC1FSU87CisJCWRpcl9kZSA9IGV4b2ZzX2RvdGRvdChvbGRfaW5vZGUsICZkaXJfcGFnZSk7CisJCWlmICghZGlyX2RlKQorCQkJZ290byBvdXRfb2xkOworCX0KKworCWlmIChuZXdfaW5vZGUpIHsKKwkJc3RydWN0IHBhZ2UgKm5ld19wYWdlOworCQlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpuZXdfZGU7CisKKwkJZXJyID0gLUVOT1RFTVBUWTsKKwkJaWYgKGRpcl9kZSAmJiAhZXhvZnNfZW1wdHlfZGlyKG5ld19pbm9kZSkpCisJCQlnb3RvIG91dF9kaXI7CisKKwkJZXJyID0gLUVOT0VOVDsKKwkJbmV3X2RlID0gZXhvZnNfZmluZF9lbnRyeShuZXdfZGlyLCBuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOworCQlpZiAoIW5ld19kZSkKKwkJCWdvdG8gb3V0X2RpcjsKKwkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJZXJyID0gZXhvZnNfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKKwkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCQlpZiAoZGlyX2RlKQorCQkJZHJvcF9ubGluayhuZXdfaW5vZGUpOworCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfZGlyOworCX0gZWxzZSB7CisJCWlmIChkaXJfZGUpIHsKKwkJCWVyciA9IC1FTUxJTks7CisJCQlpZiAobmV3X2Rpci0+aV9ubGluayA+PSBFWE9GU19MSU5LX01BWCkKKwkJCQlnb3RvIG91dF9kaXI7CisJCX0KKwkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJZXJyID0gZXhvZnNfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKKwkJaWYgKGVycikgeworCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJCWdvdG8gb3V0X2RpcjsKKwkJfQorCQlpZiAoZGlyX2RlKQorCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CisJfQorCisJb2xkX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCisJZXhvZnNfZGVsZXRlX2VudHJ5KG9sZF9kZSwgb2xkX3BhZ2UpOworCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisKKwlpZiAoZGlyX2RlKSB7CisJCWVyciA9IGV4b2ZzX3NldF9saW5rKG9sZF9pbm9kZSwgZGlyX2RlLCBkaXJfcGFnZSwgbmV3X2Rpcik7CisJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9kaXIpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfZGlyOworCX0KKwlyZXR1cm4gMDsKKworCitvdXRfZGlyOgorCWlmIChkaXJfZGUpIHsKKwkJa3VubWFwKGRpcl9wYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKGRpcl9wYWdlKTsKKwl9CitvdXRfb2xkOgorCWt1bm1hcChvbGRfcGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuY3JlYXRlIAk9IGV4b2ZzX2NyZWF0ZSwKKwkubG9va3VwIAk9IGV4b2ZzX2xvb2t1cCwKKwkubGluayAgIAk9IGV4b2ZzX2xpbmssCisJLnVubGluayAJPSBleG9mc191bmxpbmssCisJLnN5bWxpbmsJPSBleG9mc19zeW1saW5rLAorCS5ta2RpciAgCT0gZXhvZnNfbWtkaXIsCisJLnJtZGlyICAJPSBleG9mc19ybWRpciwKKwkubWtub2QgIAk9IGV4b2ZzX21rbm9kLAorCS5yZW5hbWUgCT0gZXhvZnNfcmVuYW1lLAorCS5zZXRhdHRyCT0gZXhvZnNfc2V0YXR0ciwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuc2V0YXR0cgk9IGV4b2ZzX3NldGF0dHIsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvb3NkLmMgYi9mcy9leG9mcy9vc2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQ5YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvb3NkLmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEF2aXNoYXkgVHJhZWdlciAoYXZpc2hheUBnbWFpbC5jb20pIChhdmlzaGF5QGlsLmlibS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOQorICogQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL29zZF9zZW5zZS5oPgorCisjaW5jbHVkZSAiZXhvZnMuaCIKKworaW50IGV4b2ZzX2NoZWNrX29rX3Jlc2lkKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHU2NCAqaW5fcmVzaWQsIHU2NCAqb3V0X3Jlc2lkKQoreworCXN0cnVjdCBvc2Rfc2Vuc2VfaW5mbyBvc2k7CisJaW50IHJldCA9IG9zZF9yZXFfZGVjb2RlX3NlbnNlKG9yLCAmb3NpKTsKKworCWlmIChyZXQpIHsgLyogdHJhbnNsYXRlIHRvIExpbnV4IGNvZGVzICovCisJCWlmIChvc2kuYWRkaXRpb25hbF9jb2RlID09IHNjc2lfaW52YWxpZF9maWVsZF9pbl9jZGIpIHsKKwkJCWlmIChvc2kuY2RiX2ZpZWxkX29mZnNldCA9PSBPU0RfQ0ZPX1NUQVJUSU5HX0JZVEUpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWlmIChvc2kuY2RiX2ZpZWxkX29mZnNldCA9PSBPU0RfQ0ZPX09CSkVDVF9JRCkKKwkJCQlyZXQgPSAtRU5PRU5UOworCQkJZWxzZQorCQkJCXJldCA9IC1FSU5WQUw7CisJCX0gZWxzZSBpZiAob3NpLmFkZGl0aW9uYWxfY29kZSA9PSBvc2RfcXVvdGFfZXJyb3IpCisJCQlyZXQgPSAtRU5PU1BDOworCQllbHNlCisJCQlyZXQgPSAtRUlPOworCX0KKworCS8qIEZJWE1FOiBzaG91bGQgYmUgaW5jbHVkZSBpbiBvc2Rfc2Vuc2VfaW5mbyAqLworCWlmIChpbl9yZXNpZCkKKwkJKmluX3Jlc2lkID0gb3ItPmluLnJlcSA/IG9yLT5pbi5yZXEtPmRhdGFfbGVuIDogMDsKKworCWlmIChvdXRfcmVzaWQpCisJCSpvdXRfcmVzaWQgPSBvci0+b3V0LnJlcSA/IG9yLT5vdXQucmVxLT5kYXRhX2xlbiA6IDA7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGV4b2ZzX21ha2VfY3JlZGVudGlhbCh1OCBjcmVkX2FbT1NEX0NBUF9MRU5dLCBjb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqKQoreworCW9zZF9zZWNfaW5pdF9ub3NlY19kb2FsbF9jYXBzKGNyZWRfYSwgb2JqLCBmYWxzZSwgdHJ1ZSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgc3luY2hyb25vdXMgT1NEIG9wZXJhdGlvbi4KKyAqLworaW50IGV4b2ZzX3N5bmNfb3Aoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgaW50IHRpbWVvdXQsIHVpbnQ4X3QgKmNyZWRlbnRpYWwpCit7CisJaW50IHJldDsKKworCW9yLT50aW1lb3V0ID0gdGltZW91dDsKKwlyZXQgPSBvc2RfZmluYWxpemVfcmVxdWVzdChvciwgMCwgY3JlZGVudGlhbCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlFWE9GU19EQkdNU0coIkZhaWxkIHRvIG9zZF9maW5hbGl6ZV9yZXF1ZXN0KCkgPT4gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb3NkX2V4ZWN1dGVfcmVxdWVzdChvcik7CisKKwlpZiAocmV0KQorCQlFWE9GU19EQkdNU0coIm9zZF9leGVjdXRlX3JlcXVlc3QoKSA9PiAlZFxuIiwgcmV0KTsKKwkvKiBvc2RfcmVxX2RlY29kZV9zZW5zZShvciwgcmV0KTsgKi8KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgT1NEIG9wZXJhdGlvbi4KKyAqLworaW50IGV4b2ZzX2FzeW5jX29wKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIG9zZF9yZXFfZG9uZV9mbiAqYXN5bmNfZG9uZSwKKwkJICAgdm9pZCAqY2FsbGVyX2NvbnRleHQsIHU4ICpjcmVkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBvc2RfZmluYWxpemVfcmVxdWVzdChvciwgMCwgY3JlZCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlFWE9GU19EQkdNU0coIkZhaWxkIHRvIG9zZF9maW5hbGl6ZV9yZXF1ZXN0KCkgPT4gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb3NkX2V4ZWN1dGVfcmVxdWVzdF9hc3luYyhvciwgYXN5bmNfZG9uZSwgY2FsbGVyX2NvbnRleHQpOworCisJaWYgKHJldCkKKwkJRVhPRlNfREJHTVNHKCJvc2RfZXhlY3V0ZV9yZXF1ZXN0X2FzeW5jKCkgPT4gJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGV4dHJhY3RfYXR0cl9mcm9tX3JlcShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBzdHJ1Y3Qgb3NkX2F0dHIgKmF0dHIpCit7CisJc3RydWN0IG9zZF9hdHRyIGN1cl9hdHRyID0gey5hdHRyX3BhZ2UgPSAwfTsgLyogc3RhcnQgd2l0aCB6ZXJvcyAqLworCXZvaWQgKml0ZXIgPSBOVUxMOworCWludCBuZWxlbTsKKworCWRvIHsKKwkJbmVsZW0gPSAxOworCQlvc2RfcmVxX2RlY29kZV9nZXRfYXR0cl9saXN0KG9yLCAmY3VyX2F0dHIsICZuZWxlbSwgJml0ZXIpOworCQlpZiAoKGN1cl9hdHRyLmF0dHJfcGFnZSA9PSBhdHRyLT5hdHRyX3BhZ2UpICYmCisJCSAgICAoY3VyX2F0dHIuYXR0cl9pZCA9PSBhdHRyLT5hdHRyX2lkKSkgeworCQkJYXR0ci0+bGVuID0gY3VyX2F0dHIubGVuOworCQkJYXR0ci0+dmFsX3B0ciA9IGN1cl9hdHRyLnZhbF9wdHI7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gd2hpbGUgKGl0ZXIpOworCisJcmV0dXJuIC1FSU87Cit9CisKK2ludCBvc2RfcmVxX3JlYWRfa2VybihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHU2NCBvZmZzZXQsIHZvaWQqIGJ1ZmYsIHU2NCBsZW4pCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJlcV9xID0gb3ItPm9zZF9kZXYtPnNjc2lfZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOworCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19tYXBfa2VybihyZXFfcSwgYnVmZiwgbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICghYmlvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9zZF9yZXFfcmVhZChvciwgb2JqLCBiaW8sIG9mZnNldCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBvc2RfcmVxX3dyaXRlX2tlcm4oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLCB1NjQgb2Zmc2V0LCB2b2lkKiBidWZmLCB1NjQgbGVuKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyZXFfcSA9IG9yLT5vc2RfZGV2LT5zY3NpX2RldmljZS0+cmVxdWVzdF9xdWV1ZTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBiaW9fbWFwX2tlcm4ocmVxX3EsIGJ1ZmYsIGxlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJpbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvc2RfcmVxX3dyaXRlKG9yLCBvYmosIGJpbywgb2Zmc2V0KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL3N1cGVyLmMgYi9mcy9leG9mcy9zdXBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTk4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9zdXBlci5jCkBAIC0wLDAgKzEsNTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGludXgvdmZzLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KKworI2luY2x1ZGUgImV4b2ZzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1PVU5UIE9QVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHN0cnVjdCB0byBob2xkIHdoYXQgd2UgZ2V0IGZyb20gbW91bnQgb3B0aW9ucworICovCitzdHJ1Y3QgZXhvZnNfbW91bnRvcHQgeworCWNvbnN0IGNoYXIgKmRldl9uYW1lOworCXVpbnQ2NF90IHBpZDsKKwlpbnQgdGltZW91dDsKK307CisKKy8qCisgKiBleG9mcy1zcGVjaWZpYyBtb3VudC10aW1lIG9wdGlvbnMuCisgKi8KK2VudW0geyBPcHRfcGlkLCBPcHRfdG8sIE9wdF9ta2ZzLCBPcHRfZm9ybWF0LCBPcHRfZXJyIH07CisKKy8qCisgKiBPdXIgbW91bnQtdGltZSBvcHRpb25zLiAgVGhlc2Ugc2hvdWxkIGlkZWFsbHkgYmUgNjQtYml0IHVuc2lnbmVkLCBidXQgdGhlCisgKiBrZXJuZWwncyBwYXJzaW5nIGZ1bmN0aW9ucyBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhhdC4gIDMyLWJpdCBzaG91bGQgYmUKKyAqIHN1ZmZpY2llbnQgZm9yIG1vc3QgYXBwbGljYXRpb25zIG5vdy4KKyAqLworc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworCXtPcHRfcGlkLCAicGlkPSV1In0sCisJe09wdF90bywgInRvPSV1In0sCisJe09wdF9lcnIsIE5VTEx9Cit9OworCisvKgorICogVGhlIG1haW4gb3B0aW9uIHBhcnNpbmcgbWV0aG9kLiAgQWxzbyBtYWtlcyBzdXJlIHRoYXQgYWxsIG9mIHRoZSBtYW5kYXRvcnkKKyAqIG1vdW50IG9wdGlvbnMgd2VyZSBzZXQuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBzdHJ1Y3QgZXhvZnNfbW91bnRvcHQgKm9wdHMpCit7CisJY2hhciAqcDsKKwlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CisJaW50IG9wdGlvbjsKKwlib29sIHNfcGlkID0gZmFsc2U7CisKKwlFWE9GU19EQkdNU0coInBhcnNlX29wdGlvbnMgJXNcbiIsIG9wdGlvbnMpOworCS8qIGRlZmF1bHRzICovCisJbWVtc2V0KG9wdHMsIDAsIHNpemVvZigqb3B0cykpOworCW9wdHMtPnRpbWVvdXQgPSBCTEtfREVGQVVMVF9TR19USU1FT1VUOworCisJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWludCB0b2tlbjsKKwkJY2hhciBzdHJbMzJdOworCisJCWlmICghKnApCisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfcGlkOgorCQkJaWYgKDAgPT0gbWF0Y2hfc3RybGNweShzdHIsICZhcmdzWzBdLCBzaXplb2Yoc3RyKSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlvcHRzLT5waWQgPSBzaW1wbGVfc3RydG91bGwoc3RyLCBOVUxMLCAwKTsKKwkJCWlmIChvcHRzLT5waWQgPCBFWE9GU19NSU5fUElEKSB7CisJCQkJRVhPRlNfRVJSKCJQYXJ0aXRpb24gSUQgbXVzdCBiZSA+PSAldSIsCisJCQkJCSAgRVhPRlNfTUlOX1BJRCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlzX3BpZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfdG86CisJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChvcHRpb24gPD0gMCkgeworCQkJCUVYT0ZTX0VSUigiVGltb3V0IG11c3QgYmUgPiAwIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlvcHRzLT50aW1lb3V0ID0gb3B0aW9uICogSFo7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc19waWQpIHsKKwkJRVhPRlNfRVJSKCJOZWVkIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuIik7CisJCUVYT0ZTX0VSUigiICAgIC1vIHBpZD1waWRfbm9fdG9fdXNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElOT0RFIENBQ0hFCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBPdXIgaW5vZGUgY2FjaGUuICBJc24ndCBpdCBwcmV0dHk/CisgKi8KK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXhvZnNfaW5vZGVfY2FjaGVwOworCisvKgorICogQWxsb2NhdGUgYW4gaW5vZGUgaW4gdGhlIGNhY2hlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4b2ZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2k7CisKKwlvaSA9IGttZW1fY2FjaGVfYWxsb2MoZXhvZnNfaW5vZGVfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9pKQorCQlyZXR1cm4gTlVMTDsKKworCW9pLT52ZnNfaW5vZGUuaV92ZXJzaW9uID0gMTsKKwlyZXR1cm4gJm9pLT52ZnNfaW5vZGU7Cit9CisKKy8qCisgKiBSZW1vdmUgYW4gaW5vZGUgZnJvbSB0aGUgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgZXhvZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWttZW1fY2FjaGVfZnJlZShleG9mc19pbm9kZV9jYWNoZXAsIGV4b2ZzX2koaW5vZGUpKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGlub2RlCisgKi8KK3N0YXRpYyB2b2lkIGV4b2ZzX2luaXRfb25jZSh2b2lkICpmb28pCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBmb287CisKKwlpbm9kZV9pbml0X29uY2UoJm9pLT52ZnNfaW5vZGUpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBpbm9kZSBjYWNoZQorICovCitzdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQoreworCWV4b2ZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJleG9mc19pbm9kZV9jYWNoZSIsCisJCQkJc2l6ZW9mKHN0cnVjdCBleG9mc19pX2luZm8pLCAwLAorCQkJCVNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9NRU1fU1BSRUFELAorCQkJCWV4b2ZzX2luaXRfb25jZSk7CisJaWYgKGV4b2ZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlc3Ryb3kgdGhlIGlub2RlIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShleG9mc19pbm9kZV9jYWNoZXApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTVVBFUkJMT0NLIEZVTkNUSU9OUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4b2ZzX3NvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGV4b2ZzX2V4cG9ydF9vcHM7CisKKy8qCisgKiBXcml0ZSB0aGUgc3VwZXJibG9jayB0byB0aGUgT1NECisgKi8KK3N0YXRpYyB2b2lkIGV4b2ZzX3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaTsKKwlzdHJ1Y3QgZXhvZnNfZnNjYiAqZnNjYjsKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iajsKKwlpbnQgcmV0OworCisJZnNjYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBleG9mc19mc2NiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmc2NiKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfd3JpdGVfc3VwZXI6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJbG9ja19rZXJuZWwoKTsKKwlzYmkgPSBzYi0+c19mc19pbmZvOworCWZzY2ItPnNfbmV4dGlkID0gY3B1X3RvX2xlNjQoc2JpLT5zX25leHRpZCk7CisJZnNjYi0+c19udW1maWxlcyA9IGNwdV90b19sZTMyKHNiaS0+c19udW1maWxlcyk7CisJZnNjYi0+c19tYWdpYyA9IGNwdV90b19sZTE2KHNiLT5zX21hZ2ljKTsKKwlmc2NiLT5zX25ld2ZzID0gMDsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCJleG9mc193cml0ZV9zdXBlcjogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCW9iai5wYXJ0aXRpb24gPSBzYmktPnNfcGlkOworCW9iai5pZCA9IEVYT0ZTX1NVUEVSX0lEOworCXJldCA9IG9zZF9yZXFfd3JpdGVfa2VybihvciwgJm9iaiwgMCwgZnNjYiwgc2l6ZW9mKCpmc2NiKSk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJRVhPRlNfRVJSKCJleG9mc193cml0ZV9zdXBlcjogb3NkX3JlcV93cml0ZV9rZXJuIGZhaWxlZC5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBleG9mc19zeW5jX29wKG9yLCBzYmktPnNfdGltZW91dCwgc2JpLT5zX2NyZWQpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfd3JpdGVfc3VwZXI6IGV4b2ZzX3N5bmNfb3AgZmFpbGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0KKwlzYi0+c19kaXJ0ID0gMDsKKworb3V0OgorCWlmIChvcikKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJa2ZyZWUoZnNjYik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB2ZnMgaXMgZnJlZWluZyB0aGUgc3VwZXJibG9jay4gIFdlIGp1c3QKKyAqIG5lZWQgdG8gZnJlZSBvdXIgb3duIHBhcnQuCisgKi8KK3N0YXRpYyB2b2lkIGV4b2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBudW1fcGVuZDsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gc2ItPnNfZnNfaW5mbzsKKworCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcGVuZGluZyBjb21tYW5kcyAqLworCWZvciAobnVtX3BlbmQgPSBhdG9taWNfcmVhZCgmc2JpLT5zX2N1cnJfcGVuZGluZyk7IG51bV9wZW5kID4gMDsKKwkgICAgIG51bV9wZW5kID0gYXRvbWljX3JlYWQoJnNiaS0+c19jdXJyX3BlbmRpbmcpKSB7CisJCXdhaXRfcXVldWVfaGVhZF90IHdxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3cSk7CisJCXdhaXRfZXZlbnRfdGltZW91dCh3cSwKKwkJCQkgIChhdG9taWNfcmVhZCgmc2JpLT5zX2N1cnJfcGVuZGluZykgPT0gMCksCisJCQkJICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCX0KKworCW9zZHVsZF9wdXRfZGV2aWNlKHNiaS0+c19kZXYpOworCWtmcmVlKHNiLT5zX2ZzX2luZm8pOworCXNiLT5zX2ZzX2luZm8gPSBOVUxMOworfQorCisvKgorICogUmVhZCB0aGUgc3VwZXJibG9jayBmcm9tIHRoZSBPU0QgYW5kIGZpbGwgaW4gdGhlIGZpZWxkcworICovCitzdGF0aWMgaW50IGV4b2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKnJvb3Q7CisJc3RydWN0IGV4b2ZzX21vdW50b3B0ICpvcHRzID0gZGF0YTsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOwkvKmV4dGVuZGVkIGluZm8gICAgICAgICAgICAgICAgICAqLworCXN0cnVjdCBleG9mc19mc2NiIGZzY2I7CQkvKm9uLWRpc2sgc3VwZXJibG9jayBpbmZvICAgICAgICAqLworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3IgPSBOVUxMOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iajsKKwlpbnQgcmV0OworCisJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOworCWlmICghc2JpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzYi0+c19mc19pbmZvID0gc2JpOworCisJLyogdXNlIG1vdW50IG9wdGlvbnMgdG8gZmlsbCBzdXBlcmJsb2NrICovCisJc2JpLT5zX2RldiA9IG9zZHVsZF9wYXRoX2xvb2t1cChvcHRzLT5kZXZfbmFtZSk7CisJaWYgKElTX0VSUihzYmktPnNfZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKHNiaS0+c19kZXYpOworCQlzYmktPnNfZGV2ID0gTlVMTDsKKwkJZ290byBmcmVlX3NiaTsKKwl9CisKKwlzYmktPnNfcGlkID0gb3B0cy0+cGlkOworCXNiaS0+c190aW1lb3V0ID0gb3B0cy0+dGltZW91dDsKKworCS8qIGZpbGwgaW4gc29tZSBvdGhlciBkYXRhIGJ5IGhhbmQgKi8KKwltZW1zZXQoc2ItPnNfaWQsIDAsIHNpemVvZihzYi0+c19pZCkpOworCXN0cmNweShzYi0+c19pZCwgImV4b2ZzIik7CisJc2ItPnNfYmxvY2tzaXplID0gRVhPRlNfQkxLU0laRTsKKwlzYi0+c19ibG9ja3NpemVfYml0cyA9IEVYT0ZTX0JMS1NISUZUOworCXNiLT5zX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKKwlhdG9taWNfc2V0KCZzYmktPnNfY3Vycl9wZW5kaW5nLCAwKTsKKwlzYi0+c19iZGV2ID0gTlVMTDsKKwlzYi0+c19kZXYgPSAwOworCisJLyogcmVhZCBkYXRhIGZyb20gb24tZGlzayBzdXBlcmJsb2NrIG9iamVjdCAqLworCW9iai5wYXJ0aXRpb24gPSBzYmktPnNfcGlkOworCW9iai5pZCA9IEVYT0ZTX1NVUEVSX0lEOworCWV4b2ZzX21ha2VfY3JlZGVudGlhbChzYmktPnNfY3JlZCwgJm9iaik7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCWlmICghc2lsZW50KQorCQkJRVhPRlNfRVJSKAorCQkJICAgICAgICJleG9mc19maWxsX3N1cGVyOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3NiaTsKKwl9CisJcmV0ID0gb3NkX3JlcV9yZWFkX2tlcm4ob3IsICZvYmosIDAsICZmc2NiLCBzaXplb2YoZnNjYikpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWlmICghc2lsZW50KQorCQkJRVhPRlNfRVJSKAorCQkJICAgICAgICJleG9mc19maWxsX3N1cGVyOiBvc2RfcmVxX3JlYWRfa2VybiBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3NiaTsKKwl9CisKKwlyZXQgPSBleG9mc19zeW5jX29wKG9yLCBzYmktPnNfdGltZW91dCwgc2JpLT5zX2NyZWQpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWlmICghc2lsZW50KQorCQkJRVhPRlNfRVJSKCJleG9mc19maWxsX3N1cGVyOiBleG9mc19zeW5jX29wIGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGZyZWVfc2JpOworCX0KKworCXNiLT5zX21hZ2ljID0gbGUxNl90b19jcHUoZnNjYi5zX21hZ2ljKTsKKwlzYmktPnNfbmV4dGlkID0gbGU2NF90b19jcHUoZnNjYi5zX25leHRpZCk7CisJc2JpLT5zX251bWZpbGVzID0gbGUzMl90b19jcHUoZnNjYi5zX251bWZpbGVzKTsKKworCS8qIG1ha2Ugc3VyZSB3aGF0IHdlIHJlYWQgZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGlzIGNvcnJlY3QgKi8KKwlpZiAoc2ItPnNfbWFnaWMgIT0gRVhPRlNfU1VQRVJfTUFHSUMpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlFWE9GU19FUlIoIkVSUk9SOiBCYWQgbWFnaWMgdmFsdWVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfc2JpOworCX0KKworCS8qIHN0YXJ0IGdlbmVyYXRpb24gbnVtYmVycyBmcm9tIGEgcmFuZG9tIHBvaW50ICovCisJZ2V0X3JhbmRvbV9ieXRlcygmc2JpLT5zX25leHRfZ2VuZXJhdGlvbiwgc2l6ZW9mKHUzMikpOworCXNwaW5fbG9ja19pbml0KCZzYmktPnNfbmV4dF9nZW5fbG9jayk7CisKKwkvKiBzZXQgdXAgb3BlcmF0aW9uIHZlY3RvcnMgKi8KKwlzYi0+c19vcCA9ICZleG9mc19zb3BzOworCXNiLT5zX2V4cG9ydF9vcCA9ICZleG9mc19leHBvcnRfb3BzOworCXJvb3QgPSBleG9mc19pZ2V0KHNiLCBFWE9GU19ST09UX0lEIC0gRVhPRlNfT0JKX09GRik7CisJaWYgKElTX0VSUihyb290KSkgeworCQlFWE9GU19FUlIoIkVSUk9SOiBleG9mc19pZ2V0IGZhaWxlZFxuIik7CisJCXJldCA9IFBUUl9FUlIocm9vdCk7CisJCWdvdG8gZnJlZV9zYmk7CisJfQorCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdCk7CisJaWYgKCFzYi0+c19yb290KSB7CisJCWlwdXQocm9vdCk7CisJCUVYT0ZTX0VSUigiRVJST1I6IGdldCByb290IGlub2RlIGZhaWxlZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9zYmk7CisJfQorCisJaWYgKCFTX0lTRElSKHJvb3QtPmlfbW9kZSkpIHsKKwkJZHB1dChzYi0+c19yb290KTsKKwkJc2ItPnNfcm9vdCA9IE5VTEw7CisJCUVYT0ZTX0VSUigiRVJST1I6IGNvcnJ1cHQgcm9vdCBpbm9kZSAobW9kZSA9ICVoZClcbiIsCisJCSAgICAgICByb290LT5pX21vZGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfc2JpOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJaWYgKG9yKQorCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCXJldHVybiByZXQ7CisKK2ZyZWVfc2JpOgorCW9zZHVsZF9wdXRfZGV2aWNlKHNiaS0+c19kZXYpOyAvKiBOVUxMIHNhZmUgKi8KKwlrZnJlZShzYmkpOworCWdvdG8gb3V0OworfQorCisvKgorICogU2V0IHVwIHRoZSBzdXBlcmJsb2NrIChjYWxscyBleG9mc19maWxsX3N1cGVyIGV2ZW50dWFsbHkpCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLAorCQkJICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAorCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzdHJ1Y3QgZXhvZnNfbW91bnRvcHQgb3B0czsKKwlpbnQgcmV0OworCisJcmV0ID0gcGFyc2Vfb3B0aW9ucyhkYXRhLCAmb3B0cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9wdHMuZGV2X25hbWUgPSBkZXZfbmFtZTsKKwlyZXR1cm4gZ2V0X3NiX25vZGV2KHR5cGUsIGZsYWdzLCAmb3B0cywgZXhvZnNfZmlsbF9zdXBlciwgbW50KTsKK30KKworLyoKKyAqIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSBzeXN0ZW0gc3RhdGUgaW4gdGhlIGJ1ZmZlci4gIFRoaXMgaXMgdXNlZAorICogYnkgdGhlICdkZicgY29tbWFuZCwgZm9yIGV4YW1wbGUuCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iaiA9IHtzYmktPnNfcGlkLCAwfTsKKwlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cnNbXSA9IHsKKwkJQVRUUl9ERUYoT1NEX0FQQUdFX1BBUlRJVElPTl9RVU9UQVMsCisJCQlPU0RfQVRUUl9QUV9DQVBBQ0lUWV9RVU9UQSwgc2l6ZW9mKF9fYmU2NCkpLAorCQlBVFRSX0RFRihPU0RfQVBBR0VfUEFSVElUSU9OX0lORk9STUFUSU9OLAorCQkJT1NEX0FUVFJfUElfVVNFRF9DQVBBQ0lUWSwgc2l6ZW9mKF9fYmU2NCkpLAorCX07CisJdWludDY0X3QgY2FwYWNpdHkgPSBVTExPTkdfTUFYOworCXVpbnQ2NF90IHVzZWQgPSBVTExPTkdfTUFYOworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJdWludDhfdCBjcmVkX2FbT1NEX0NBUF9MRU5dOworCWludCByZXQ7CisKKwkvKiBnZXQgdXNlZC9jYXBhY2l0eSBhdHRyaWJ1dGVzICovCisJZXhvZnNfbWFrZV9jcmVkZW50aWFsKGNyZWRfYSwgJm9iaik7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCUVYT0ZTX0RCR01TRygiZXhvZnNfc3RhdGZzOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJb3NkX3JlcV9nZXRfYXR0cmlidXRlcyhvciwgJm9iaik7CisJb3NkX3JlcV9hZGRfZ2V0X2F0dHJfbGlzdChvciwgYXR0cnMsIEFSUkFZX1NJWkUoYXR0cnMpKTsKKwlyZXQgPSBleG9mc19zeW5jX29wKG9yLCBzYmktPnNfdGltZW91dCwgY3JlZF9hKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBleHRyYWN0X2F0dHJfZnJvbV9yZXEob3IsICZhdHRyc1swXSk7CisJaWYgKGxpa2VseSghcmV0KSkKKwkJY2FwYWNpdHkgPSBnZXRfdW5hbGlnbmVkX2JlNjQoYXR0cnNbMF0udmFsX3B0cik7CisJZWxzZQorCQlFWE9GU19EQkdNU0coImV4b2ZzX3N0YXRmczogZ2V0IGNhcGFjaXR5IGZhaWxlZC5cbiIpOworCisJcmV0ID0gZXh0cmFjdF9hdHRyX2Zyb21fcmVxKG9yLCAmYXR0cnNbMV0pOworCWlmIChsaWtlbHkoIXJldCkpCisJCXVzZWQgPSBnZXRfdW5hbGlnbmVkX2JlNjQoYXR0cnNbMV0udmFsX3B0cik7CisJZWxzZQorCQlFWE9GU19EQkdNU0coImV4b2ZzX3N0YXRmczogZ2V0IHVzZWQtc3BhY2UgZmFpbGVkLlxuIik7CisKKwkvKiBmaWxsIGluIHRoZSBzdGF0cyBidWZmZXIgKi8KKwlidWYtPmZfdHlwZSA9IEVYT0ZTX1NVUEVSX01BR0lDOworCWJ1Zi0+Zl9ic2l6ZSA9IEVYT0ZTX0JMS1NJWkU7CisJYnVmLT5mX2Jsb2NrcyA9IChjYXBhY2l0eSA+PiBFWE9GU19CTEtTSElGVCk7CisJYnVmLT5mX2JmcmVlID0gKChjYXBhY2l0eSAtIHVzZWQpID4+IEVYT0ZTX0JMS1NISUZUKTsKKwlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlOworCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c19udW1maWxlczsKKwlidWYtPmZfZmZyZWUgPSBFWE9GU19NQVhfSUQgLSBzYmktPnNfbnVtZmlsZXM7CisJYnVmLT5mX25hbWVsZW4gPSBFWE9GU19OQU1FX0xFTjsKKworb3V0OgorCW9zZF9lbmRfcmVxdWVzdChvcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4b2ZzX3NvcHMgPSB7CisJLmFsbG9jX2lub2RlICAgID0gZXhvZnNfYWxsb2NfaW5vZGUsCisJLmRlc3Ryb3lfaW5vZGUgID0gZXhvZnNfZGVzdHJveV9pbm9kZSwKKwkud3JpdGVfaW5vZGUgICAgPSBleG9mc193cml0ZV9pbm9kZSwKKwkuZGVsZXRlX2lub2RlICAgPSBleG9mc19kZWxldGVfaW5vZGUsCisJLnB1dF9zdXBlciAgICAgID0gZXhvZnNfcHV0X3N1cGVyLAorCS53cml0ZV9zdXBlciAgICA9IGV4b2ZzX3dyaXRlX3N1cGVyLAorCS5zdGF0ZnMgICAgICAgICA9IGV4b2ZzX3N0YXRmcywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVYUE9SVCBPUEVSQVRJT05TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBkZW50cnkgKmV4b2ZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpCit7CisJdW5zaWduZWQgbG9uZyBpbm8gPSBleG9mc19wYXJlbnRfaW5vKGNoaWxkKTsKKworCWlmICghaW5vKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBkX29idGFpbl9hbGlhcyhleG9mc19pZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLCBpbm8pKTsKK30KKworc3RhdGljIHN0cnVjdCBpbm9kZSAqZXhvZnNfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQl1NjQgaW5vLCB1MzIgZ2VuZXJhdGlvbikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBleG9mc19pZ2V0KHNiLCBpbm8pOworCWlmIChJU19FUlIoaW5vZGUpKQorCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOworCWlmIChnZW5lcmF0aW9uICYmIGlub2RlLT5pX2dlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikgeworCQkvKiB3ZSBkaWRuJ3QgZmluZCB0aGUgcmlnaHQgaW5vZGUuLiAqLworCQlpcHV0KGlub2RlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CisJfQorCXJldHVybiBpbm9kZTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmV4b2ZzX2ZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCXN0cnVjdCBmaWQgKmZpZCwgaW50IGZoX2xlbiwgaW50IGZoX3R5cGUpCit7CisJcmV0dXJuIGdlbmVyaWNfZmhfdG9fZGVudHJ5KHNiLCBmaWQsIGZoX2xlbiwgZmhfdHlwZSwKKwkJCQkgICAgZXhvZnNfbmZzX2dldF9pbm9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleG9mc19maF90b19wYXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlzdHJ1Y3QgZmlkICpmaWQsIGludCBmaF9sZW4sIGludCBmaF90eXBlKQoreworCXJldHVybiBnZW5lcmljX2ZoX3RvX3BhcmVudChzYiwgZmlkLCBmaF9sZW4sIGZoX3R5cGUsCisJCQkJICAgIGV4b2ZzX25mc19nZXRfaW5vZGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGV4b2ZzX2V4cG9ydF9vcHMgPSB7CisJLmZoX3RvX2RlbnRyeSA9IGV4b2ZzX2ZoX3RvX2RlbnRyeSwKKwkuZmhfdG9fcGFyZW50ID0gZXhvZnNfZmhfdG9fcGFyZW50LAorCS5nZXRfcGFyZW50ID0gZXhvZnNfZ2V0X3BhcmVudCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElOU01PRC9STU1PRAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoaXMgZmlsZSBzeXN0ZW0KKyAqLworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4b2ZzX3R5cGUgPSB7CisJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm5hbWUgICAgICAgICAgID0gImV4b2ZzIiwKKwkuZ2V0X3NiICAgICAgICAgPSBleG9mc19nZXRfc2IsCisJLmtpbGxfc2IgICAgICAgID0gZ2VuZXJpY19zaHV0ZG93bl9zdXBlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZXhvZnModm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaW5pdF9pbm9kZWNhY2hlKCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZleG9mc190eXBlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9kOworCisJcmV0dXJuIDA7CitvdXRfZDoKKwlkZXN0cm95X2lub2RlY2FjaGUoKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9leG9mcyh2b2lkKQoreworCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXhvZnNfdHlwZSk7CisJZGVzdHJveV9pbm9kZWNhY2hlKCk7Cit9CisKK01PRFVMRV9BVVRIT1IoIkF2aXNoYXkgVHJhZWdlciA8YXZpc2hheUBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImV4b2ZzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGluaXRfZXhvZnMpCittb2R1bGVfZXhpdChleGl0X2V4b2ZzKQpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvc3ltbGluay5jIGIvZnMvZXhvZnMvc3ltbGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZTJkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9zeW1saW5rLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisKKyNpbmNsdWRlICJleG9mcy5oIgorCitzdGF0aWMgdm9pZCAqZXhvZnNfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koZGVudHJ5LT5kX2lub2RlKTsKKworCW5kX3NldF9saW5rKG5kLCAoY2hhciAqKW9pLT5pX2RhdGEpOworCXJldHVybiBOVUxMOworfQorCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKKwkuZm9sbG93X2xpbmsJPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAorCS5wdXRfbGluawk9IHBhZ2VfcHV0X2xpbmssCit9OworCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkucmVhZGxpbmsJPSBnZW5lcmljX3JlYWRsaW5rLAorCS5mb2xsb3dfbGluawk9IGV4b2ZzX2ZvbGxvd19saW5rLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvYWNsLmMgYi9mcy9leHQyL2FjbC5jCmluZGV4IGFlOGM0ZjguLmQ0NmUzOGMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvYWNsLmMKKysrIGIvZnMvZXh0Mi9hY2wuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAkJfQogCQlpZiAoIWFjbCkKLQkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpICYmIGFjbCkgewogICAgICAgICAgICAgICAgc3RydWN0IHBvc2l4X2FjbCAqY2xvbmU7CmRpZmYgLS1naXQgYS9mcy9leHQzL2FjbC5jIGIvZnMvZXh0My9hY2wuYwppbmRleCBiNjBiYjI0Li5kODFlZjJmIDEwMDY0NAotLS0gYS9mcy9leHQzL2FjbC5jCisrKyBiL2ZzL2V4dDMvYWNsLmMKQEAgLTMyMyw3ICszMjMsNyBAQAogCQkJCXJldHVybiBQVFJfRVJSKGFjbCk7CiAJCX0KIAkJaWYgKCFhY2wpCi0JCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQogCWlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgUE9TSVhfQUNMKSAmJiBhY2wpIHsKIAkJc3RydWN0IHBvc2l4X2FjbCAqY2xvbmU7CmRpZmYgLS1naXQgYS9mcy9leHQzL2Rpci5jIGIvZnMvZXh0My9kaXIuYwppbmRleCA1ODUzZjQ0Li4zZDcyNGE5IDEwMDY0NAotLS0gYS9mcy9leHQzL2Rpci5jCisrKyBiL2ZzL2V4dDMvZGlyLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IGV4dDNfcmVhZGRpciwJCS8qIHdlIHRha2UgQktMLiBuZWVkZWQ/Ki8KLQkuaW9jdGwJCT0gZXh0M19pb2N0bCwJCS8qIEJLTCBoZWxkICovCisJLnVubG9ja2VkX2lvY3RsCT0gZXh0M19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGV4dDNfY29tcGF0X2lvY3RsLAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQzL2ZpbGUuYyBiL2ZzL2V4dDMvZmlsZS5jCmluZGV4IDNiZTFlMDYuLjViNDk3MDQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZmlsZS5jCisrKyBiL2ZzL2V4dDMvZmlsZS5jCkBAIC0zMyw2ICszMywxMCBAQAogICovCiBzdGF0aWMgaW50IGV4dDNfcmVsZWFzZV9maWxlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQogeworCWlmIChFWFQzX0koaW5vZGUpLT5pX3N0YXRlICYgRVhUM19TVEFURV9GTFVTSF9PTl9DTE9TRSkgeworCQlmaWxlbWFwX2ZsdXNoKGlub2RlLT5pX21hcHBpbmcpOworCQlFWFQzX0koaW5vZGUpLT5pX3N0YXRlICY9IH5FWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFOworCX0KIAkvKiBpZiB3ZSBhcmUgdGhlIGxhc3Qgd3JpdGVyIG9uIHRoZSBpbm9kZSwgZHJvcCB0aGUgYmxvY2sgcmVzZXJ2YXRpb24gKi8KIAlpZiAoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgogCQkJKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA9PSAxKSkKQEAgLTExMiw3ICsxMTYsNyBAQAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKIAkuYWlvX3dyaXRlCT0gZXh0M19maWxlX3dyaXRlLAotCS5pb2N0bAkJPSBleHQzX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IGV4dDNfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSBleHQzX2NvbXBhdF9pb2N0bCwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IDRhMDlmZjEuLjQ2NmEzMzIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTExNDksMTIgKzExNDksMTUgQEAKIAkJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCWludCByZXQsIG5lZWRlZF9ibG9ja3MgPSBleHQzX3dyaXRlcGFnZV90cmFuc19ibG9ja3MoaW5vZGUpOworCWludCByZXQ7CiAJaGFuZGxlX3QgKmhhbmRsZTsKIAlpbnQgcmV0cmllcyA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJcGdvZmZfdCBpbmRleDsKIAl1bnNpZ25lZCBmcm9tLCB0bzsKKwkvKiBSZXNlcnZlIG9uZSBibG9jayBtb3JlIGZvciBhZGRpdGlvbiB0byBvcnBoYW4gbGlzdCBpbiBjYXNlCisJICogd2UgYWxsb2NhdGUgYmxvY2tzIGJ1dCB3cml0ZSBmYWlscyBmb3Igc29tZSByZWFzb24gKi8KKwlpbnQgbmVlZGVkX2Jsb2NrcyA9IGV4dDNfd3JpdGVwYWdlX3RyYW5zX2Jsb2Nrcyhpbm9kZSkgKyAxOwogCiAJaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwpAQCAtMTE4NCwxNSArMTE4NywyMCBAQAogCX0KIHdyaXRlX2JlZ2luX2ZhaWxlZDoKIAlpZiAocmV0KSB7Ci0JCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCS8qCiAJCSAqIGJsb2NrX3dyaXRlX2JlZ2luIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldyBibG9ja3MKIAkJICogb3V0c2lkZSBpX3NpemUuICBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4gRG9uJ3QgbmVlZAogCQkgKiBpX3NpemVfcmVhZCBiZWNhdXNlIHdlIGhvbGQgaV9tdXRleC4KKwkJICoKKwkJICogQWRkIGlub2RlIHRvIG9ycGhhbiBsaXN0IGluIGNhc2Ugd2UgY3Jhc2ggYmVmb3JlIHRydW5jYXRlCisJCSAqIGZpbmlzaGVzLgogCQkgKi8KIAkJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCQlleHQzX29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CisJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQogCQkJdm10cnVuY2F0ZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSk7CiAJfQogCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBleHQzX3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKQpAQCAtMTIxMSw2ICsxMjE5LDE4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyogRm9yIG9yZGVyZWQgd3JpdGVwYWdlIGFuZCB3cml0ZV9lbmQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IGpvdXJuYWxfZGlydHlfZGF0YV9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCS8qCisJICogV3JpdGUgY291bGQgaGF2ZSBtYXBwZWQgdGhlIGJ1ZmZlciBidXQgaXQgZGlkbid0IGNvcHkgdGhlIGRhdGEgaW4KKwkgKiB5ZXQuIFNvIGF2b2lkIGZpbGluZyBzdWNoIGJ1ZmZlciBpbnRvIGEgdHJhbnNhY3Rpb24uCisJICovCisJaWYgKGJ1ZmZlcl9tYXBwZWQoYmgpICYmIGJ1ZmZlcl91cHRvZGF0ZShiaCkpCisJCXJldHVybiBleHQzX2pvdXJuYWxfZGlydHlfZGF0YShoYW5kbGUsIGJoKTsKKwlyZXR1cm4gMDsKK30KKwogLyogRm9yIHdyaXRlX2VuZCgpIGluIGRhdGE9am91cm5hbCBtb2RlICovCiBzdGF0aWMgaW50IHdyaXRlX2VuZF9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewpAQCAtMTIyMSwyNiArMTI0MSwyMCBAQAogfQogCiAvKgotICogR2VuZXJpYyB3cml0ZV9lbmQgaGFuZGxlciBmb3Igb3JkZXJlZCBhbmQgd3JpdGViYWNrIGV4dDMgam91cm5hbCBtb2Rlcy4KLSAqIFdlIGNhbid0IHVzZSBnZW5lcmljX3dyaXRlX2VuZCwgYmVjYXVzZSB0aGF0IHVubG9ja3MgdGhlIHBhZ2UgYW5kIHdlIG5lZWQgdG8KLSAqIHVubG9jayB0aGUgcGFnZSBhZnRlciBleHQzX2pvdXJuYWxfc3RvcCwgYnV0IGV4dDNfam91cm5hbF9zdG9wIG11c3QgcnVuCi0gKiBhZnRlciBibG9ja193cml0ZV9lbmQuCisgKiBUaGlzIGlzIG5hc3R5IGFuZCBzdWJ0bGU6IGV4dDNfd3JpdGVfYmVnaW4oKSBjb3VsZCBoYXZlIGFsbG9jYXRlZCBibG9ja3MKKyAqIGZvciB0aGUgd2hvbGUgcGFnZSBidXQgbGF0ZXIgd2UgZmFpbGVkIHRvIGNvcHkgdGhlIGRhdGEgaW4uIFVwZGF0ZSBpbm9kZQorICogc2l6ZSBhY2NvcmRpbmcgdG8gd2hhdCB3ZSBtYW5hZ2VkIHRvIGNvcHkuIFRoZSByZXN0IGlzIGdvaW5nIHRvIGJlCisgKiB0cnVuY2F0ZWQgaW4gd3JpdGVfZW5kIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50IGV4dDNfZ2VuZXJpY193cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCi0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9maWxlX3NpemVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGNvcGllZCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCi0JY29waWVkID0gYmxvY2tfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBjb3BpZWQsIHBhZ2UsIGZzZGF0YSk7Ci0KLQlpZiAocG9zK2NvcGllZCA+IGlub2RlLT5pX3NpemUpIHsKLQkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MrY29waWVkKTsKKwkvKiBXaGF0IG1hdHRlcnMgdG8gdXMgaXMgaV9kaXNrc2l6ZS4gV2UgZG9uJ3Qgd3JpdGUgaV9zaXplIGFueXdoZXJlICovCisJaWYgKHBvcyArIGNvcGllZCA+IGlub2RlLT5pX3NpemUpCisJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zICsgY29waWVkKTsKKwlpZiAocG9zICsgY29waWVkID4gRVhUM19JKGlub2RlKS0+aV9kaXNrc2l6ZSkgeworCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gcG9zICsgY29waWVkOwogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAl9Ci0KLQlyZXR1cm4gY29waWVkOwogfQogCiAvKgpAQCAtMTI2MCwzNSArMTI3NCwyOSBAQAogCXVuc2lnbmVkIGZyb20sIHRvOwogCWludCByZXQgPSAwLCByZXQyOwogCisJY29waWVkID0gYmxvY2tfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBjb3BpZWQsIHBhZ2UsIGZzZGF0YSk7CisKIAlmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwotCXRvID0gZnJvbSArIGxlbjsKLQorCXRvID0gZnJvbSArIGNvcGllZDsKIAlyZXQgPSB3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmZmVycyhwYWdlKSwKLQkJZnJvbSwgdG8sIE5VTEwsIGV4dDNfam91cm5hbF9kaXJ0eV9kYXRhKTsKKwkJZnJvbSwgdG8sIE5VTEwsIGpvdXJuYWxfZGlydHlfZGF0YV9mbik7CiAKLQlpZiAocmV0ID09IDApIHsKLQkJLyoKLQkJICogZ2VuZXJpY193cml0ZV9lbmQoKSB3aWxsIHJ1biBtYXJrX2lub2RlX2RpcnR5KCkgaWYgaV9zaXplCi0JCSAqIGNoYW5nZXMuICBTbyBsZXQncyBwaWdneWJhY2sgdGhlIGlfZGlza3NpemUgbWFya19pbm9kZV9kaXJ0eQotCQkgKiBpbnRvIHRoYXQuCi0JCSAqLwotCQlsb2ZmX3QgbmV3X2lfc2l6ZTsKLQotCQluZXdfaV9zaXplID0gcG9zICsgY29waWVkOwotCQlpZiAobmV3X2lfc2l6ZSA+IEVYVDNfSShpbm9kZSktPmlfZGlza3NpemUpCi0JCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gbmV3X2lfc2l6ZTsKLQkJcmV0MiA9IGV4dDNfZ2VuZXJpY193cml0ZV9lbmQoZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGNvcGllZCwKLQkJCQkJCQlwYWdlLCBmc2RhdGEpOwotCQljb3BpZWQgPSByZXQyOwotCQlpZiAocmV0MiA8IDApCi0JCQlyZXQgPSByZXQyOwotCX0KKwlpZiAocmV0ID09IDApCisJCXVwZGF0ZV9maWxlX3NpemVzKGlub2RlLCBwb3MsIGNvcGllZCk7CisJLyoKKwkgKiBUaGVyZSBtYXkgYmUgYWxsb2NhdGVkIGJsb2NrcyBvdXRzaWRlIG9mIGlfc2l6ZSBiZWNhdXNlCisJICogd2UgZmFpbGVkIHRvIGNvcHkgc29tZSBkYXRhLiBQcmVwYXJlIGZvciB0cnVuY2F0ZS4KKwkgKi8KKwlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJZXh0M19vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwogCXJldDIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCWlmICghcmV0KQogCQlyZXQgPSByZXQyOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAorCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQorCQl2bXRydW5jYXRlKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKIAlyZXR1cm4gcmV0ID8gcmV0IDogY29waWVkOwogfQogCkBAIC0xMjk5LDI1ICsxMzA3LDIyIEBACiB7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IGV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0JaW50IHJldCA9IDAsIHJldDI7Ci0JbG9mZl90IG5ld19pX3NpemU7CisJaW50IHJldDsKIAotCW5ld19pX3NpemUgPSBwb3MgKyBjb3BpZWQ7Ci0JaWYgKG5ld19pX3NpemUgPiBFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplKQotCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gbmV3X2lfc2l6ZTsKLQotCXJldDIgPSBleHQzX2dlbmVyaWNfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBjb3BpZWQsCi0JCQkJCQkJcGFnZSwgZnNkYXRhKTsKLQljb3BpZWQgPSByZXQyOwotCWlmIChyZXQyIDwgMCkKLQkJcmV0ID0gcmV0MjsKLQotCXJldDIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCWlmICghcmV0KQotCQlyZXQgPSByZXQyOworCWNvcGllZCA9IGJsb2NrX3dyaXRlX2VuZChmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgY29waWVkLCBwYWdlLCBmc2RhdGEpOworCXVwZGF0ZV9maWxlX3NpemVzKGlub2RlLCBwb3MsIGNvcGllZCk7CisJLyoKKwkgKiBUaGVyZSBtYXkgYmUgYWxsb2NhdGVkIGJsb2NrcyBvdXRzaWRlIG9mIGlfc2l6ZSBiZWNhdXNlCisJICogd2UgZmFpbGVkIHRvIGNvcHkgc29tZSBkYXRhLiBQcmVwYXJlIGZvciB0cnVuY2F0ZS4KKwkgKi8KKwlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJZXh0M19vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOworCXJldCA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCisJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCXZtdHJ1bmNhdGUoaW5vZGUsIGlub2RlLT5pX3NpemUpOwogCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7CiB9CiAKQEAgLTEzMzgsMTUgKzEzNDMsMjMgQEAKIAlpZiAoY29waWVkIDwgbGVuKSB7CiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKQogCQkJY29waWVkID0gMDsKLQkJcGFnZV96ZXJvX25ld19idWZmZXJzKHBhZ2UsIGZyb20rY29waWVkLCB0byk7CisJCXBhZ2VfemVyb19uZXdfYnVmZmVycyhwYWdlLCBmcm9tICsgY29waWVkLCB0byk7CisJCXRvID0gZnJvbSArIGNvcGllZDsKIAl9CiAKIAlyZXQgPSB3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmZmVycyhwYWdlKSwgZnJvbSwKIAkJCQl0bywgJnBhcnRpYWwsIHdyaXRlX2VuZF9mbik7CiAJaWYgKCFwYXJ0aWFsKQogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JaWYgKHBvcytjb3BpZWQgPiBpbm9kZS0+aV9zaXplKQotCQlpX3NpemVfd3JpdGUoaW5vZGUsIHBvcytjb3BpZWQpOworCisJaWYgKHBvcyArIGNvcGllZCA+IGlub2RlLT5pX3NpemUpCisJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zICsgY29waWVkKTsKKwkvKgorCSAqIFRoZXJlIG1heSBiZSBhbGxvY2F0ZWQgYmxvY2tzIG91dHNpZGUgb2YgaV9zaXplIGJlY2F1c2UKKwkgKiB3ZSBmYWlsZWQgdG8gY29weSBzb21lIGRhdGEuIFByZXBhcmUgZm9yIHRydW5jYXRlLgorCSAqLworCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQorCQlleHQzX29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CiAJRVhUM19JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQzX1NUQVRFX0pEQVRBOwogCWlmIChpbm9kZS0+aV9zaXplID4gRVhUM19JKGlub2RlKS0+aV9kaXNrc2l6ZSkgewogCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKQEAgLTEzNjEsNiArMTM3NCw4IEBACiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCisJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCXZtdHJ1bmNhdGUoaW5vZGUsIGlub2RlLT5pX3NpemUpOwogCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7CiB9CiAKQEAgLTE0MjgsMTcgKzE0NDMsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBqb3VybmFsX2RpcnR5X2RhdGFfZm4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKLXsKLQlpZiAoYnVmZmVyX21hcHBlZChiaCkpCi0JCXJldHVybiBleHQzX2pvdXJuYWxfZGlydHlfZGF0YShoYW5kbGUsIGJoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBidWZmZXJfdW5tYXBwZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlyZXR1cm4gIWJ1ZmZlcl9tYXBwZWQoYmgpOwogfQorCiAvKgogICogTm90ZSB0aGF0IHdlIGFsd2F5cyBzdGFydCBhIHRyYW5zYWN0aW9uIGV2ZW4gaWYgd2UncmUgbm90IGpvdXJuYWxsaW5nCiAgKiBkYXRhLiAgVGhpcyBpcyB0byBwcmVzZXJ2ZSBvcmRlcmluZzogYW55IGhvbGUgaW5zdGFudGlhdGlvbiB3aXRoaW4KQEAgLTIzNTQsNiArMjM2Myw5IEBACiAJaWYgKCFleHQzX2Nhbl90cnVuY2F0ZShpbm9kZSkpCiAJCXJldHVybjsKIAorCWlmIChpbm9kZS0+aV9zaXplID09IDAgJiYgZXh0M19zaG91bGRfd3JpdGViYWNrX2RhdGEoaW5vZGUpKQorCQllaS0+aV9zdGF0ZSB8PSBFWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFOworCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGxvY2sgdGhlIEVPRiBwYWdlIGhlcmUsIGJlY2F1c2UgbG9ja19wYWdlKCkgbmVzdHMKIAkgKiBvdXRzaWRlIGpvdXJuYWxfc3RhcnQoKS4KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW9jdGwuYyBiL2ZzL2V4dDMvaW9jdGwuYwppbmRleCA1ZTg2Y2U5Li44ODk3NDgxIDEwMDY0NAotLS0gYS9mcy9leHQzL2lvY3RsLmMKKysrIGIvZnMvZXh0My9pb2N0bC5jCkBAIC0xNSwxMiArMTUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLWludCBleHQzX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQl1bnNpZ25lZCBsb25nIGFyZykKK2xvbmcgZXh0M19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgc2hvcnQgcnN2X3dpbmRvd19zaXplOwpAQCAtMzksMjkgKzM4LDI1IEBACiAJCXVuc2lnbmVkIGludCBvbGRmbGFnczsKIAkJdW5zaWduZWQgaW50IGpmbGFnOwogCisJCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCisJCWlmIChnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCiAJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpIHsKLQkJCWVyciA9IC1FQUNDRVM7Ci0JCQlnb3RvIGZsYWdzX291dDsKLQkJfQotCi0JCWlmIChnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKSkgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZmxhZ3Nfb3V0OwotCQl9Ci0KIAkJZmxhZ3MgPSBleHQzX21hc2tfZmxhZ3MoaW5vZGUtPmlfbW9kZSwgZmxhZ3MpOwogCiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwogCQkvKiBJcyBpdCBxdW90YSBmaWxlPyBEbyBub3QgYWxsb3cgdXNlciB0byBtZXNzIHdpdGggaXQgKi8KLQkJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCWVyciA9IC1FUEVSTTsKKwkJZXJyID0gLUVQRVJNOworCQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCiAJCQlnb3RvIGZsYWdzX291dDsKLQkJfQorCiAJCW9sZGZsYWdzID0gZWktPmlfZmxhZ3M7CiAKIAkJLyogVGhlIEpPVVJOQUxfREFUQSBmbGFnIGlzIG1vZGlmaWFibGUgb25seSBieSByb290ICovCkBAIC03NCwxMSArNjksOCBAQAogCQkgKiBUaGlzIHRlc3QgbG9va3MgbmljZXIuIFRoYW5rcyB0byBQYXVsaW5lIE1pZGRlbGluawogCQkgKi8KIAkJaWYgKChmbGFncyBeIG9sZGZsYWdzKSAmIChFWFQzX0FQUEVORF9GTCB8IEVYVDNfSU1NVVRBQkxFX0ZMKSkgewotCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQkJZXJyID0gLUVQRVJNOworCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKQogCQkJCWdvdG8gZmxhZ3Nfb3V0OwotCQkJfQogCQl9CiAKIAkJLyoKQEAgLTg2LDE3ICs3OCwxMiBAQAogCQkgKiB0aGUgcmVsZXZhbnQgY2FwYWJpbGl0eS4KIAkJICovCiAJCWlmICgoamZsYWcgXiBvbGRmbGFncykgJiAoRVhUM19KT1VSTkFMX0RBVEFfRkwpKSB7Ci0JCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpIHsKLQkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQllcnIgPSAtRVBFUk07CisJCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpCiAJCQkJZ290byBmbGFnc19vdXQ7Ci0JCQl9CiAJCX0KIAotCiAJCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgMSk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQllcnIgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCQlnb3RvIGZsYWdzX291dDsKIAkJfQpAQCAtMTE2LDE1ICsxMDMsMTMgQEAKIAkJZXJyID0gZXh0M19tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmlsb2MpOwogZmxhZ3NfZXJyOgogCQlleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCQlpZiAoZXJyKSB7Ci0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKGVycikKKwkJCWdvdG8gZmxhZ3Nfb3V0OwogCiAJCWlmICgoamZsYWcgXiBvbGRmbGFncykgJiAoRVhUM19KT1VSTkFMX0RBVEFfRkwpKQogCQkJZXJyID0gZXh0M19jaGFuZ2VfaW5vZGVfam91cm5hbF9mbGFnKGlub2RlLCBqZmxhZyk7Ci0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogZmxhZ3Nfb3V0OgorCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTQwLDYgKzEyNSw3IEBACiAKIAkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQogCQkJcmV0dXJuIC1FUEVSTTsKKwogCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0xNDcsNiArMTMzLDcgQEAKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIHNldHZlcnNpb25fb3V0OwogCQl9CisKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAxKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yOTksOSArMjg2LDYgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBsb25nIGV4dDNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgcmV0OwotCiAJLyogVGhlc2UgYXJlIGp1c3QgbWlzbmFtZWQsIHRoZXkgYWN0dWFsbHkgZ2V0L3B1dCBmcm9tL3RvIHVzZXIgYW4gaW50ICovCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEVYVDNfSU9DMzJfR0VURkxBR1M6CkBAIC0zNDEsOSArMzI1LDYgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IGV4dDNfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGV4dDNfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY29tcGF0X3B0cihhcmcpKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IGUyZmM2M2MuLjZmZjdiOTcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvbmFtZWkuYworKysgYi9mcy9leHQzL25hbWVpLmMKQEAgLTE2MSwxMiArMTYxLDEyIEBACiAJCQkJIHN0cnVjdCBkeF9mcmFtZSAqZnJhbWUsCiAJCQkJIGludCAqZXJyKTsKIHN0YXRpYyB2b2lkIGR4X3JlbGVhc2UgKHN0cnVjdCBkeF9mcmFtZSAqZnJhbWVzKTsKLXN0YXRpYyBpbnQgZHhfbWFrZV9tYXAgKHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkZSwgaW50IHNpemUsCitzdGF0aWMgaW50IGR4X21ha2VfbWFwKHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkZSwgdW5zaWduZWQgYmxvY2tzaXplLAogCQkJc3RydWN0IGR4X2hhc2hfaW5mbyAqaGluZm8sIHN0cnVjdCBkeF9tYXBfZW50cnkgbWFwW10pOwogc3RhdGljIHZvaWQgZHhfc29ydF9tYXAoc3RydWN0IGR4X21hcF9lbnRyeSAqbWFwLCB1bnNpZ25lZCBjb3VudCk7CiBzdGF0aWMgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmR4X21vdmVfZGlyZW50cyAoY2hhciAqZnJvbSwgY2hhciAqdG8sCiAJCXN0cnVjdCBkeF9tYXBfZW50cnkgKm9mZnNldHMsIGludCBjb3VudCk7Ci1zdGF0aWMgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIqIGR4X3BhY2tfZGlyZW50cyAoY2hhciAqYmFzZSwgaW50IHNpemUpOworc3RhdGljIHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgdW5zaWduZWQgYmxvY2tzaXplKTsKIHN0YXRpYyB2b2lkIGR4X2luc2VydF9ibG9jayAoc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwgdTMyIGhhc2gsIHUzMiBibG9jayk7CiBzdGF0aWMgaW50IGV4dDNfaHRyZWVfbmV4dF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmRpciwgX191MzIgaGFzaCwKIAkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwKQEAgLTcwOCwxNCArNzA4LDE0IEBACiAgKiBDcmVhdGUgbWFwIG9mIGhhc2ggdmFsdWVzLCBvZmZzZXRzLCBhbmQgc2l6ZXMsIHN0b3JlZCBhdCBlbmQgb2YgYmxvY2suCiAgKiBSZXR1cm5zIG51bWJlciBvZiBlbnRyaWVzIG1hcHBlZC4KICAqLwotc3RhdGljIGludCBkeF9tYWtlX21hcCAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlLCBpbnQgc2l6ZSwKLQkJCXN0cnVjdCBkeF9oYXNoX2luZm8gKmhpbmZvLCBzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXBfdGFpbCkKK3N0YXRpYyBpbnQgZHhfbWFrZV9tYXAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlLCB1bnNpZ25lZCBibG9ja3NpemUsCisJCXN0cnVjdCBkeF9oYXNoX2luZm8gKmhpbmZvLCBzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXBfdGFpbCkKIHsKIAlpbnQgY291bnQgPSAwOwogCWNoYXIgKmJhc2UgPSAoY2hhciAqKSBkZTsKIAlzdHJ1Y3QgZHhfaGFzaF9pbmZvIGggPSAqaGluZm87CiAKLQl3aGlsZSAoKGNoYXIgKikgZGUgPCBiYXNlICsgc2l6ZSkKKwl3aGlsZSAoKGNoYXIgKikgZGUgPCBiYXNlICsgYmxvY2tzaXplKQogCXsKIAkJaWYgKGRlLT5uYW1lX2xlbiAmJiBkZS0+aW5vZGUpIHsKIAkJCWV4dDNmc19kaXJoYXNoKGRlLT5uYW1lLCBkZS0+bmFtZV9sZW4sICZoKTsKQEAgLTEwNDcsOCArMTA0NywxNiBAQAogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJCX0KIAkJaW5vZGUgPSBleHQzX2lnZXQoZGlyLT5pX3NiLCBpbm8pOwotCQlpZiAoSVNfRVJSKGlub2RlKSkKLQkJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CisJCWlmICh1bmxpa2VseShJU19FUlIoaW5vZGUpKSkgeworCQkJaWYgKFBUUl9FUlIoaW5vZGUpID09IC1FU1RBTEUpIHsKKwkJCQlleHQzX2Vycm9yKGRpci0+aV9zYiwgX19mdW5jX18sCisJCQkJCQkiZGVsZXRlZCBpbm9kZSByZWZlcmVuY2VkOiAlbHUiLAorCQkJCQkJaW5vKTsKKwkJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwkJCX0KKwkJfQogCX0KIAlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiB9CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBACiAgKiBDb21wYWN0IGVhY2ggZGlyIGVudHJ5IGluIHRoZSByYW5nZSB0byB0aGUgbWluaW1hbCByZWNfbGVuLgogICogUmV0dXJucyBwb2ludGVyIHRvIGxhc3QgZW50cnkgaW4gcmFuZ2UuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiogZHhfcGFja19kaXJlbnRzKGNoYXIgKmJhc2UsIGludCBzaXplKQorc3RhdGljIHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgdW5zaWduZWQgYmxvY2tzaXplKQogewotCXN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpuZXh0LCAqdG8sICpwcmV2LCAqZGUgPSAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKikgYmFzZTsKKwlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqbmV4dCwgKnRvLCAqcHJldjsKKwlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZGUgPSAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKiliYXNlOwogCXVuc2lnbmVkIHJlY19sZW4gPSAwOwogCiAJcHJldiA9IHRvID0gZGU7Ci0Jd2hpbGUgKChjaGFyKilkZSA8IGJhc2UgKyBzaXplKSB7CisJd2hpbGUgKChjaGFyICopZGUgPCBiYXNlICsgYmxvY2tzaXplKSB7CiAJCW5leHQgPSBleHQzX25leHRfZW50cnkoZGUpOwogCQlpZiAoZGUtPmlub2RlICYmIGRlLT5uYW1lX2xlbikgewogCQkJcmVjX2xlbiA9IEVYVDNfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKTsKQEAgLTIyNjUsNyArMjI3NCw3IEBACiAJc3RydWN0IGlub2RlICogb2xkX2lub2RlLCAqIG5ld19pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBvbGRfYmgsICogbmV3X2JoLCAqIGRpcl9iaDsKIAlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqIG9sZF9kZSwgKiBuZXdfZGU7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsLCBmbHVzaF9maWxlID0gMDsKIAogCW9sZF9iaCA9IG5ld19iaCA9IGRpcl9iaCA9IE5VTEw7CiAKQEAgLTI0MDEsNiArMjQxMCw4IEBACiAJCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIG5ld19pbm9kZSk7CiAJCWlmICghbmV3X2lub2RlLT5pX25saW5rKQogCQkJZXh0M19vcnBoYW5fYWRkKGhhbmRsZSwgbmV3X2lub2RlKTsKKwkJaWYgKGV4dDNfc2hvdWxkX3dyaXRlYmFja19kYXRhKG5ld19pbm9kZSkpCisJCQlmbHVzaF9maWxlID0gMTsKIAl9CiAJcmV0dmFsID0gMDsKIApAQCAtMjQwOSw2ICsyNDIwLDggQEAKIAlicmVsc2UgKG9sZF9iaCk7CiAJYnJlbHNlIChuZXdfYmgpOwogCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJaWYgKHJldHZhbCA9PSAwICYmIGZsdXNoX2ZpbGUpCisJCWZpbGVtYXBfZmx1c2gob2xkX2lub2RlLT5pX21hcHBpbmcpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvS2NvbmZpZyBiL2ZzL2V4dDQvS2NvbmZpZwppbmRleCA3NTA1NDgyLi40MThiNmYzIDEwMDY0NAotLS0gYS9mcy9leHQ0L0tjb25maWcKKysrIGIvZnMvZXh0NC9LY29uZmlnCkBAIC0xOCw3ICsxOCw3IEBACiAJICBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZSB3aWxsIGJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbQogCSAgdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGUgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdAogCSAgcGVyZm9ybWFuY2UgZ2FpbnMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIGV4dDQgZmVhdHVyZXMgaW4gdGhlCi0JICBmaWxlc3lzdGVtLCBvciBmb3JtYXRpbmcgYSBuZXcgZmlsZXN5c3RlbSBhcyBhbiBleHQ0CisJICBmaWxlc3lzdGVtLCBvciBmb3JtYXR0aW5nIGEgbmV3IGZpbGVzeXN0ZW0gYXMgYW4gZXh0NAogCSAgZmlsZXN5c3RlbSBpbml0aWFsbHkuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYWNsLmMgYi9mcy9leHQ0L2FjbC5jCmluZGV4IDY5NGVkNmYuLjY0N2UwZDYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYWNsLmMKKysrIGIvZnMvZXh0NC9hY2wuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAkJfQogCQlpZiAoIWFjbCkKLQkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpICYmIGFjbCkgewogCQlzdHJ1Y3QgcG9zaXhfYWNsICpjbG9uZTsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmMKaW5kZXggZGUwMDA0Zi4uMjk2Nzg1YSAxMDA2NDQKLS0tIGEvZnMvZmF0L2lub2RlLmMKKysrIGIvZnMvZmF0L2lub2RlLmMKQEAgLTUyMyw3ICs1MjMsOSBAQAogCiBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewotCXN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihkZW50cnktPmRfc2IpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCS8qIElmIHRoZSBjb3VudCBvZiBmcmVlIGNsdXN0ZXIgaXMgc3RpbGwgdW5rbm93biwgY291bnRzIGl0IGhlcmUuICovCiAJaWYgKHNiaS0+ZnJlZV9jbHVzdGVycyA9PSAtMSB8fCAhc2JpLT5mcmVlX2NsdXNfdmFsaWQpIHsKQEAgLTUzNyw2ICs1MzksOCBAQAogCWJ1Zi0+Zl9ibG9ja3MgPSBzYmktPm1heF9jbHVzdGVyIC0gRkFUX1NUQVJUX0VOVDsKIAlidWYtPmZfYmZyZWUgPSBzYmktPmZyZWVfY2x1c3RlcnM7CiAJYnVmLT5mX2JhdmFpbCA9IHNiaS0+ZnJlZV9jbHVzdGVyczsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAlidWYtPmZfbmFtZWxlbiA9IHNiaS0+b3B0aW9ucy5pc3ZmYXQgPyAyNjAgOiAxMjsKIAogCXJldHVybiAwOwpAQCAtOTMwLDcgKzkzNCw3IEBACiAKIAlvcHRzLT5mc191aWQgPSBjdXJyZW50X3VpZCgpOwogCW9wdHMtPmZzX2dpZCA9IGN1cnJlbnRfZ2lkKCk7Ci0Jb3B0cy0+ZnNfZm1hc2sgPSBvcHRzLT5mc19kbWFzayA9IGN1cnJlbnQtPmZzLT51bWFzazsKKwlvcHRzLT5mc19mbWFzayA9IGN1cnJlbnRfdW1hc2soKTsKIAlvcHRzLT5hbGxvd191dGltZSA9IC0xOwogCW9wdHMtPmNvZGVwYWdlID0gZmF0X2RlZmF1bHRfY29kZXBhZ2U7CiAJb3B0cy0+aW9jaGFyc2V0ID0gZmF0X2RlZmF1bHRfaW9jaGFyc2V0OwpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGI3NGE4ZTEuLjU0MDE4ZmUgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTE2OSw3ICsxNjksNiBAQAogCQlmbW9kZV90IG1vZGUsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcCkKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlzdHJ1Y3QgcGF0aDsKIAogCWZpbGUgPSBnZXRfZW1wdHlfZmlscCgpOwogCWlmICghZmlsZSkKZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggZTNmZTk5MS4uOTEwMTNmZiAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQlzdHJ1Y3QgaW5vZGUgKnRhaWxfaW5vZGU7CiAKIAkJdGFpbF9pbm9kZSA9IGxpc3RfZW50cnkoc2ItPnNfZGlydHkubmV4dCwgc3RydWN0IGlub2RlLCBpX2xpc3QpOwotCQlpZiAoIXRpbWVfYWZ0ZXJfZXEoaW5vZGUtPmRpcnRpZWRfd2hlbiwKKwkJaWYgKHRpbWVfYmVmb3JlKGlub2RlLT5kaXJ0aWVkX3doZW4sCiAJCQkJdGFpbF9pbm9kZS0+ZGlydGllZF93aGVuKSkKIAkJCWlub2RlLT5kaXJ0aWVkX3doZW4gPSBqaWZmaWVzOwogCX0KQEAgLTIyMCw2ICsyMjAsMjEgQEAKIAl3YWtlX3VwX2JpdCgmaW5vZGUtPmlfc3RhdGUsIF9fSV9TWU5DKTsKIH0KIAorc3RhdGljIGJvb2wgaW5vZGVfZGlydGllZF9hZnRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIHQpCit7CisJYm9vbCByZXQgPSB0aW1lX2FmdGVyKGlub2RlLT5kaXJ0aWVkX3doZW4sIHQpOworI2lmbmRlZiBDT05GSUdfNjRCSVQKKwkvKgorCSAqIEZvciBpbm9kZXMgYmVpbmcgY29uc3RhbnRseSByZWRpcnRpZWQsIGRpcnRpZWRfd2hlbiBjYW4gZ2V0IHN0dWNrLgorCSAqIEl0IF9hcHBlYXJzXyB0byBiZSBpbiB0aGUgZnV0dXJlLCBidXQgaXMgYWN0dWFsbHkgaW4gZGlzdGFudCBwYXN0LgorCSAqIFRoaXMgdGVzdCBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCBzdWNoIHdyYXBwZWQtYXJvdW5kIHJlbGF0aXZlIHRpbWVzCisJICogZnJvbSBwZXJtYW5lbnRseSBzdG9wcGluZyB0aGUgd2hvbGUgcGRmbHVzaCB3cml0ZWJhY2suCisJICovCisJcmV0ID0gcmV0ICYmIHRpbWVfYmVmb3JlX2VxKGlub2RlLT5kaXJ0aWVkX3doZW4sIGppZmZpZXMpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIE1vdmUgZXhwaXJlZCBkaXJ0eSBpbm9kZXMgZnJvbSBAZGVsYXlpbmdfcXVldWUgdG8gQGRpc3BhdGNoX3F1ZXVlLgogICovCkBAIC0yMzEsNyArMjQ2LDcgQEAKIAkJc3RydWN0IGlub2RlICppbm9kZSA9IGxpc3RfZW50cnkoZGVsYXlpbmdfcXVldWUtPnByZXYsCiAJCQkJCQlzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CiAJCWlmIChvbGRlcl90aGFuX3RoaXMgJiYKLQkJCXRpbWVfYWZ0ZXIoaW5vZGUtPmRpcnRpZWRfd2hlbiwgKm9sZGVyX3RoYW5fdGhpcykpCisJCSAgICBpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCAqb2xkZXJfdGhhbl90aGlzKSkKIAkJCWJyZWFrOwogCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsIGRpc3BhdGNoX3F1ZXVlKTsKIAl9CkBAIC00MjAsNyArNDM1LDcgQEAKICAqIElmIG9sZGVyX3RoYW5fdGhpcyBpcyBub24tTlVMTCwgdGhlbiBvbmx5IHdyaXRlIG91dCBpbm9kZXMgd2hpY2gKICAqIGhhZCB0aGVpciBmaXJzdCBkaXJ0eWluZyBhdCBhIHRpbWUgZWFybGllciB0aGFuICpvbGRlcl90aGFuX3RoaXMuCiAgKgotICogSWYgd2UncmUgYSBwZGxmdXNoIHRocmVhZCwgdGhlbiBpbXBsZW1lbnQgcGRmbHVzaCBjb2xsaXNpb24gYXZvaWRhbmNlCisgKiBJZiB3ZSdyZSBhIHBkZmx1c2ggdGhyZWFkLCB0aGVuIGltcGxlbWVudCBwZGZsdXNoIGNvbGxpc2lvbiBhdm9pZGFuY2UKICAqIGFnYWluc3QgdGhlIGVudGlyZSBsaXN0LgogICoKICAqIElmIGBiZGknIGlzIG5vbi16ZXJvIHRoZW4gd2UncmUgYmVpbmcgYXNrZWQgdG8gd3JpdGViYWNrIGEgc3BlY2lmaWMgcXVldWUuCkBAIC00OTIsOCArNTA3LDExIEBACiAJCQljb250aW51ZTsJCS8qIGJsb2NrZGV2IGhhcyB3cm9uZyBxdWV1ZSAqLwogCQl9CiAKLQkJLyogV2FzIHRoaXMgaW5vZGUgZGlydGllZCBhZnRlciBzeW5jX3NiX2lub2RlcyB3YXMgY2FsbGVkPyAqLwotCQlpZiAodGltZV9hZnRlcihpbm9kZS0+ZGlydGllZF93aGVuLCBzdGFydCkpCisJCS8qCisJCSAqIFdhcyB0aGlzIGlub2RlIGRpcnRpZWQgYWZ0ZXIgc3luY19zYl9pbm9kZXMgd2FzIGNhbGxlZD8KKwkJICogVGhpcyBrZWVwcyBzeW5jIGZyb20gZXh0cmEgam9icyBhbmQgbGl2ZWxvY2suCisJCSAqLworCQlpZiAoaW5vZGVfZGlydGllZF9hZnRlcihpbm9kZSwgc3RhcnQpKQogCQkJYnJlYWs7CiAKIAkJLyogSXMgYW5vdGhlciBwZGZsdXNoIGFscmVhZHkgZmx1c2hpbmcgdGhpcyBxdWV1ZT8gKi8KQEAgLTUzOCw3ICs1NTYsOCBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKIAkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCi0JCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFfElfTkVXKSkKKwkJCWlmIChpbm9kZS0+aV9zdGF0ZSAmCisJCQkJCShJX0ZSRUVJTkd8SV9DTEVBUnxJX1dJTExfRlJFRXxJX05FVykpCiAJCQkJY29udGludWU7CiAJCQltYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAkJCWlmIChtYXBwaW5nLT5ucnBhZ2VzID09IDApCmRpZmYgLS1naXQgYS9mcy9mc19zdHJ1Y3QuYyBiL2ZzL2ZzX3N0cnVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTA1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc19zdHJ1Y3QuYwpAQCAtMCwwICsxLDE3NyBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXRoLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorCisvKgorICogUmVwbGFjZSB0aGUgZnMtPntyb290bW50LHJvb3R9IHdpdGgge21udCxkZW50cnl9LiBQdXQgdGhlIG9sZCB2YWx1ZXMuCisgKiBJdCBjYW4gYmxvY2suCisgKi8KK3ZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpwYXRoKQoreworCXN0cnVjdCBwYXRoIG9sZF9yb290OworCisJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCW9sZF9yb290ID0gZnMtPnJvb3Q7CisJZnMtPnJvb3QgPSAqcGF0aDsKKwlwYXRoX2dldChwYXRoKTsKKwl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKwlpZiAob2xkX3Jvb3QuZGVudHJ5KQorCQlwYXRoX3B1dCgmb2xkX3Jvb3QpOworfQorCisvKgorICogUmVwbGFjZSB0aGUgZnMtPntwd2RtbnQscHdkfSB3aXRoIHttbnQsZGVudHJ5fS4gUHV0IHRoZSBvbGQgdmFsdWVzLgorICogSXQgY2FuIGJsb2NrLgorICovCit2b2lkIHNldF9mc19wd2Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpwYXRoKQoreworCXN0cnVjdCBwYXRoIG9sZF9wd2Q7CisKKwl3cml0ZV9sb2NrKCZmcy0+bG9jayk7CisJb2xkX3B3ZCA9IGZzLT5wd2Q7CisJZnMtPnB3ZCA9ICpwYXRoOworCXBhdGhfZ2V0KHBhdGgpOworCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOworCisJaWYgKG9sZF9wd2QuZGVudHJ5KQorCQlwYXRoX3B1dCgmb2xkX3B3ZCk7Cit9CisKK3ZvaWQgY2hyb290X2ZzX3JlZnMoc3RydWN0IHBhdGggKm9sZF9yb290LCBzdHJ1Y3QgcGF0aCAqbmV3X3Jvb3QpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKKwlpbnQgY291bnQgPSAwOworCisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlkb19lYWNoX3RocmVhZChnLCBwKSB7CisJCXRhc2tfbG9jayhwKTsKKwkJZnMgPSBwLT5mczsKKwkJaWYgKGZzKSB7CisJCQl3cml0ZV9sb2NrKCZmcy0+bG9jayk7CisJCQlpZiAoZnMtPnJvb3QuZGVudHJ5ID09IG9sZF9yb290LT5kZW50cnkKKwkJCSAgICAmJiBmcy0+cm9vdC5tbnQgPT0gb2xkX3Jvb3QtPm1udCkgeworCQkJCXBhdGhfZ2V0KG5ld19yb290KTsKKwkJCQlmcy0+cm9vdCA9ICpuZXdfcm9vdDsKKwkJCQljb3VudCsrOworCQkJfQorCQkJaWYgKGZzLT5wd2QuZGVudHJ5ID09IG9sZF9yb290LT5kZW50cnkKKwkJCSAgICAmJiBmcy0+cHdkLm1udCA9PSBvbGRfcm9vdC0+bW50KSB7CisJCQkJcGF0aF9nZXQobmV3X3Jvb3QpOworCQkJCWZzLT5wd2QgPSAqbmV3X3Jvb3Q7CisJCQkJY291bnQrKzsKKwkJCX0KKwkJCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOworCQl9CisJCXRhc2tfdW5sb2NrKHApOworCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXdoaWxlIChjb3VudC0tKQorCQlwYXRoX3B1dChvbGRfcm9vdCk7Cit9CisKK3ZvaWQgZnJlZV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpCit7CisJcGF0aF9wdXQoJmZzLT5yb290KTsKKwlwYXRoX3B1dCgmZnMtPnB3ZCk7CisJa21lbV9jYWNoZV9mcmVlKGZzX2NhY2hlcCwgZnMpOworfQorCit2b2lkIGV4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSB0c2stPmZzOworCisJaWYgKGZzKSB7CisJCWludCBraWxsOworCQl0YXNrX2xvY2sodHNrKTsKKwkJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCQl0c2stPmZzID0gTlVMTDsKKwkJa2lsbCA9ICEtLWZzLT51c2VyczsKKwkJd3JpdGVfdW5sb2NrKCZmcy0+bG9jayk7CisJCXRhc2tfdW5sb2NrKHRzayk7CisJCWlmIChraWxsKQorCQkJZnJlZV9mc19zdHJ1Y3QoZnMpOworCX0KK30KKworc3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKQoreworCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0ga21lbV9jYWNoZV9hbGxvYyhmc19jYWNoZXAsIEdGUF9LRVJORUwpOworCS8qIFdlIGRvbid0IG5lZWQgdG8gbG9jayBmcyAtIHRoaW5rIHdoeSA7LSkgKi8KKwlpZiAoZnMpIHsKKwkJZnMtPnVzZXJzID0gMTsKKwkJZnMtPmluX2V4ZWMgPSAwOworCQlyd2xvY2tfaW5pdCgmZnMtPmxvY2spOworCQlmcy0+dW1hc2sgPSBvbGQtPnVtYXNrOworCQlyZWFkX2xvY2soJm9sZC0+bG9jayk7CisJCWZzLT5yb290ID0gb2xkLT5yb290OworCQlwYXRoX2dldCgmb2xkLT5yb290KTsKKwkJZnMtPnB3ZCA9IG9sZC0+cHdkOworCQlwYXRoX2dldCgmb2xkLT5wd2QpOworCQlyZWFkX3VubG9jaygmb2xkLT5sb2NrKTsKKwl9CisJcmV0dXJuIGZzOworfQorCitpbnQgdW5zaGFyZV9mc19zdHJ1Y3Qodm9pZCkKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOworCXN0cnVjdCBmc19zdHJ1Y3QgKm5ld19mcyA9IGNvcHlfZnNfc3RydWN0KGZzKTsKKwlpbnQga2lsbDsKKworCWlmICghbmV3X2ZzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRhc2tfbG9jayhjdXJyZW50KTsKKwl3cml0ZV9sb2NrKCZmcy0+bG9jayk7CisJa2lsbCA9ICEtLWZzLT51c2VyczsKKwljdXJyZW50LT5mcyA9IG5ld19mczsKKwl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKwl0YXNrX3VubG9jayhjdXJyZW50KTsKKworCWlmIChraWxsKQorCQlmcmVlX2ZzX3N0cnVjdChmcyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVuc2hhcmVfZnNfc3RydWN0KTsKKworaW50IGN1cnJlbnRfdW1hc2sodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudC0+ZnMtPnVtYXNrOworfQorRVhQT1JUX1NZTUJPTChjdXJyZW50X3VtYXNrKTsKKworLyogdG8gYmUgbWVudGlvbmVkIG9ubHkgaW4gSU5JVF9UQVNLICovCitzdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSB7CisJLnVzZXJzCQk9IDEsCisJLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGluaXRfZnMubG9jayksCisJLnVtYXNrCQk9IDAwMjIsCit9OworCit2b2lkIGRhZW1vbml6ZV9mc19zdHJ1Y3Qodm9pZCkKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOworCisJaWYgKGZzKSB7CisJCWludCBraWxsOworCisJCXRhc2tfbG9jayhjdXJyZW50KTsKKworCQl3cml0ZV9sb2NrKCZpbml0X2ZzLmxvY2spOworCQlpbml0X2ZzLnVzZXJzKys7CisJCXdyaXRlX3VubG9jaygmaW5pdF9mcy5sb2NrKTsKKworCQl3cml0ZV9sb2NrKCZmcy0+bG9jayk7CisJCWN1cnJlbnQtPmZzID0gJmluaXRfZnM7CisJCWtpbGwgPSAhLS1mcy0+dXNlcnM7CisJCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOworCisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCQlpZiAoa2lsbCkKKwkJCWZyZWVfZnNfc3RydWN0KGZzKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL0tjb25maWcgYi9mcy9mc2NhY2hlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYjhjZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvS2NvbmZpZwpAQCAtMCwwICsxLDU2IEBACisKK2NvbmZpZyBGU0NBQ0hFCisJdHJpc3RhdGUgIkdlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXIiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgU0xPV19XT1JLCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoaW5nIG1hbmFnZXIgdGhhdCBjYW4gYmUKKwkgIHVzZWQgYnkgdmFyaW91cyBuZXR3b3JrIGFuZCBvdGhlciBmaWxlc3lzdGVtcyB0byBjYWNoZSBkYXRhIGxvY2FsbHkuCisJICBEaWZmZXJlbnQgc29ydHMgb2YgY2FjaGVzIGNhbiBiZSBwbHVnZ2VkIGluLCBkZXBlbmRpbmcgb24gdGhlCisJICByZXNvdXJjZXMgYXZhaWxhYmxlLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb25maWcgRlNDQUNIRV9TVEFUUworCWJvb2wgIkdhdGhlciBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBvbiBsb2NhbCBjYWNoaW5nIgorCWRlcGVuZHMgb24gRlNDQUNIRSAmJiBQUk9DX0ZTCisJaGVscAorCSAgVGhpcyBvcHRpb24gY2F1c2VzIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmVkIG9uIGxvY2FsCisJICBjYWNoaW5nIGFuZCBleHBvcnRlZCB0aHJvdWdoIGZpbGU6CisKKwkJL3Byb2MvZnMvZnNjYWNoZS9zdGF0cworCisJICBUaGUgZ2F0aGVyaW5nIG9mIHN0YXRpc3RpY3MgYWRkcyBhIGNlcnRhaW4gYW1vdW50IG9mIG92ZXJoZWFkIHRvCisJICBleGVjdXRpb24gYXMgdGhlcmUgYXJlIGEgcXVpdGUgYSBmZXcgc3RhdHMgZ2F0aGVyZWQsIGFuZCBvbiBhCisJICBtdWx0aS1DUFUgc3lzdGVtIHRoZXNlIG1heSBiZSBvbiBjYWNoZWxpbmVzIHRoYXQga2VlcCBib3VuY2luZworCSAgYmV0d2VlbiBDUFVzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBzdGF0cyBhcmUgdmVyeSB1c2VmdWwgZm9yCisJICBkZWJ1Z2dpbmcgcHVycG9zZXMuICBTYXlpbmcgJ1knIGhlcmUgaXMgcmVjb21tZW5kZWQuCisKKwkgIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK2NvbmZpZyBGU0NBQ0hFX0hJU1RPR1JBTQorCWJvb2wgIkdhdGhlciBsYXRlbmN5IGluZm9ybWF0aW9uIG9uIGxvY2FsIGNhY2hpbmciCisJZGVwZW5kcyBvbiBGU0NBQ0hFICYmIFBST0NfRlMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgbGF0ZW5jeSBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCBvbiBsb2NhbAorCSAgY2FjaGluZyBhbmQgZXhwb3J0ZWQgdGhyb3VnaCBmaWxlOgorCisJCS9wcm9jL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtCisKKwkgIFRoZSBnZW5lcmF0aW9uIG9mIHRoaXMgaGlzdG9ncmFtIGFkZHMgYSBjZXJ0YWluIGFtb3VudCBvZiBvdmVyaGVhZCB0bworCSAgZXhlY3V0aW9uIGFzIHRoZXJlIGFyZSBhIG51bWJlciBvZiBwb2ludHMgYXQgd2hpY2ggZGF0YSBpcyBnYXRoZXJlZCwKKwkgIGFuZCBvbiBhIG11bHRpLUNQVSBzeXN0ZW0gdGhlc2UgbWF5IGJlIG9uIGNhY2hlbGluZXMgdGhhdCBrZWVwCisJICBib3VuY2luZyBiZXR3ZWVuIENQVXMuICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGhpc3RvZ3JhbSBtYXkgYmUKKwkgIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgU2F5aW5nICdOJyBoZXJlIGlzIHJlY29tbWVuZGVkLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb25maWcgRlNDQUNIRV9ERUJVRworCWJvb2wgIkRlYnVnIEZTLUNhY2hlIgorCWRlcGVuZHMgb24gRlNDQUNIRQorCWhlbHAKKwkgIFRoaXMgcGVybWl0cyBkZWJ1Z2dpbmcgdG8gYmUgZHluYW1pY2FsbHkgZW5hYmxlZCBpbiB0aGUgbG9jYWwgY2FjaGluZworCSAgbWFuYWdlbWVudCBtb2R1bGUuICBJZiB0aGlzIGlzIHNldCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgbWF5IGJlCisJICBlbmFibGVkIGJ5IHNldHRpbmcgYml0cyBpbiAvc3lzL21vZHVsZXMvZnNjYWNoZS9wYXJhbWV0ZXIvZGVidWcuCisKKwkgIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL01ha2VmaWxlIGIvZnMvZnNjYWNoZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU3MWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9NYWtlZmlsZQpAQCAtMCwwICsxLDE5IEBACisjCisjIE1ha2VmaWxlIGZvciBnZW5lcmFsIGZpbGVzeXN0ZW0gY2FjaGluZyBjb2RlCisjCisKK2ZzY2FjaGUteSA6PSBcCisJY2FjaGUubyBcCisJY29va2llLm8gXAorCWZzZGVmLm8gXAorCW1haW4ubyBcCisJbmV0ZnMubyBcCisJb2JqZWN0Lm8gXAorCW9wZXJhdGlvbi5vIFwKKwlwYWdlLm8KKworZnNjYWNoZS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KK2ZzY2FjaGUtJChDT05GSUdfRlNDQUNIRV9TVEFUUykgKz0gc3RhdHMubworZnNjYWNoZS0kKENPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTSkgKz0gaGlzdG9ncmFtLm8KKworb2JqLSQoQ09ORklHX0ZTQ0FDSEUpIDo9IGZzY2FjaGUubwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9jYWNoZS5jIGIvZnMvZnNjYWNoZS9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTk4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL2NhY2hlLmMKQEAgLTAsMCArMSw0MTUgQEAKKy8qIEZTLUNhY2hlIGNhY2hlIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBDQUNIRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitMSVNUX0hFQUQoZnNjYWNoZV9jYWNoZV9saXN0KTsKK0RFQ0xBUkVfUldTRU0oZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGZzY2FjaGVfY2FjaGVfY2xlYXJlZF93cSk7CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfY2FjaGVfY2xlYXJlZF93cSk7CisKK3N0YXRpYyBMSVNUX0hFQUQoZnNjYWNoZV9jYWNoZV90YWdfbGlzdCk7CisKKy8qCisgKiBsb29rIHVwIGEgY2FjaGUgdGFnCisgKi8KK3N0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqX19mc2NhY2hlX2xvb2t1cF9jYWNoZV90YWcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKnRhZywgKnh0YWc7CisKKwkvKiBmaXJzdGx5IGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSB0YWcgdW5kZXIgcmVhZCBsb2NrICovCisJZG93bl9yZWFkKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YWcsICZmc2NhY2hlX2NhY2hlX3RhZ19saXN0LCBsaW5rKSB7CisJCWlmIChzdHJjbXAodGFnLT5uYW1lLCBuYW1lKSA9PSAwKSB7CisJCQlhdG9taWNfaW5jKCZ0YWctPnVzYWdlKTsKKwkJCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJCQlyZXR1cm4gdGFnOworCQl9CisJfQorCisJdXBfcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCS8qIHRoZSB0YWcgZG9lcyBub3QgZXhpc3QgLSBjcmVhdGUgYSBjYW5kaWRhdGUgKi8KKwl4dGFnID0ga3phbGxvYyhzaXplb2YoKnh0YWcpICsgc3RybGVuKG5hbWUpICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF4dGFnKQorCQkvKiByZXR1cm4gYSBkdW1teSB0YWcgaWYgb3V0IG9mIG1lbW9yeSAqLworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWF0b21pY19zZXQoJnh0YWctPnVzYWdlLCAxKTsKKwlzdHJjcHkoeHRhZy0+bmFtZSwgbmFtZSk7CisKKwkvKiB3cml0ZSBsb2NrLCBzZWFyY2ggYWdhaW4gYW5kIGFkZCBpZiBzdGlsbCBub3QgcHJlc2VudCAqLworCWRvd25fd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhZywgJmZzY2FjaGVfY2FjaGVfdGFnX2xpc3QsIGxpbmspIHsKKwkJaWYgKHN0cmNtcCh0YWctPm5hbWUsIG5hbWUpID09IDApIHsKKwkJCWF0b21pY19pbmMoJnRhZy0+dXNhZ2UpOworCQkJdXBfd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJCQlrZnJlZSh4dGFnKTsKKwkJCXJldHVybiB0YWc7CisJCX0KKwl9CisKKwlsaXN0X2FkZF90YWlsKCZ4dGFnLT5saW5rLCAmZnNjYWNoZV9jYWNoZV90YWdfbGlzdCk7CisJdXBfd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJcmV0dXJuIHh0YWc7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgY2FjaGUgdGFnCisgKi8KK3ZvaWQgX19mc2NhY2hlX3JlbGVhc2VfY2FjaGVfdGFnKHN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqdGFnKQoreworCWlmICh0YWcgIT0gRVJSX1BUUigtRU5PTUVNKSkgeworCQlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0YWctPnVzYWdlKSkKKwkJCWxpc3RfZGVsX2luaXQoJnRhZy0+bGluayk7CisJCWVsc2UKKwkJCXRhZyA9IE5VTEw7CisKKwkJdXBfd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwkJa2ZyZWUodGFnKTsKKwl9Cit9CisKKy8qCisgKiBzZWxlY3QgYSBjYWNoZSBpbiB3aGljaCB0byBzdG9yZSBhbiBvYmplY3QKKyAqIC0gdGhlIGNhY2hlIGFkZHJlbW92ZSBzZW1hcGhvcmUgbXVzdCBiZSBhdCBsZWFzdCByZWFkLWxvY2tlZCBieSB0aGUgY2FsbGVyCisgKiAtIHRoZSBvYmplY3Qgd2lsbCBuZXZlciBiZSBhbiBpbmRleAorICovCitzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqZnNjYWNoZV9zZWxlY3RfY2FjaGVfZm9yX29iamVjdCgKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKnRhZzsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGU7CisKKwlfZW50ZXIoIiIpOworCisJaWYgKGxpc3RfZW1wdHkoJmZzY2FjaGVfY2FjaGVfbGlzdCkpIHsKKwkJX2xlYXZlKCIgPSBOVUxMIFtubyBjYWNoZV0iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogd2UgY2hlY2sgdGhlIHBhcmVudCB0byBkZXRlcm1pbmUgdGhlIGNhY2hlIHRvIHVzZSAqLworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCS8qIHRoZSBmaXJzdCBpbiB0aGUgcGFyZW50J3MgYmFja2luZyBsaXN0IHNob3VsZCBiZSB0aGUgcHJlZmVycmVkCisJICogY2FjaGUgKi8KKwlpZiAoIWhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpIHsKKwkJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNvb2tpZV9saW5rKTsKKworCQljYWNoZSA9IG9iamVjdC0+Y2FjaGU7CisJCWlmIChvYmplY3QtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HIHx8CisJCSAgICB0ZXN0X2JpdChGU0NBQ0hFX0lPRVJST1IsICZjYWNoZS0+ZmxhZ3MpKQorCQkJY2FjaGUgPSBOVUxMOworCisJCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCQlfbGVhdmUoIiA9ICVwIFtwYXJlbnRdIiwgY2FjaGUpOworCQlyZXR1cm4gY2FjaGU7CisJfQorCisJLyogdGhlIHBhcmVudCBpcyB1bmJhY2tlZCAqLworCWlmIChjb29raWUtPmRlZi0+dHlwZSAhPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKSB7CisJCS8qIGNvb2tpZSBub3QgYW4gaW5kZXggYW5kIGlzIHVuYmFja2VkICovCisJCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCQlfbGVhdmUoIiA9IE5VTEwgW2Nvb2tpZSB1YixuaV0iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoIWNvb2tpZS0+ZGVmLT5zZWxlY3RfY2FjaGUpCisJCWdvdG8gbm9fcHJlZmVyZW5jZTsKKworCS8qIGFzayB0aGUgbmV0ZnMgZm9yIGl0cyBwcmVmZXJlbmNlICovCisJdGFnID0gY29va2llLT5kZWYtPnNlbGVjdF9jYWNoZShjb29raWUtPnBhcmVudC0+bmV0ZnNfZGF0YSwKKwkJCQkJY29va2llLT5uZXRmc19kYXRhKTsKKwlpZiAoIXRhZykKKwkJZ290byBub19wcmVmZXJlbmNlOworCisJaWYgKHRhZyA9PSBFUlJfUFRSKC1FTk9NRU0pKSB7CisJCV9sZWF2ZSgiID0gTlVMTCBbbm9tZW0gdGFnXSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIXRhZy0+Y2FjaGUpIHsKKwkJX2xlYXZlKCIgPSBOVUxMIFt1bmJhY2tlZCB0YWddIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX0lPRVJST1IsICZ0YWctPmNhY2hlLT5mbGFncykpCisJCXJldHVybiBOVUxMOworCisJX2xlYXZlKCIgPSAlcCBbc3BlY2lmaWNdIiwgdGFnLT5jYWNoZSk7CisJcmV0dXJuIHRhZy0+Y2FjaGU7CisKK25vX3ByZWZlcmVuY2U6CisJLyogbmV0ZnMgaGFzIG5vIHByZWZlcmVuY2UgLSBqdXN0IHNlbGVjdCBmaXJzdCBjYWNoZSAqLworCWNhY2hlID0gbGlzdF9lbnRyeShmc2NhY2hlX2NhY2hlX2xpc3QubmV4dCwKKwkJCSAgIHN0cnVjdCBmc2NhY2hlX2NhY2hlLCBsaW5rKTsKKwlfbGVhdmUoIiA9ICVwIFtmaXJzdF0iLCBjYWNoZSk7CisJcmV0dXJuIGNhY2hlOworfQorCisvKioKKyAqIGZzY2FjaGVfaW5pdF9jYWNoZSAtIEluaXRpYWxpc2UgYSBjYWNoZSByZWNvcmQKKyAqIEBjYWNoZTogVGhlIGNhY2hlIHJlY29yZCB0byBiZSBpbml0aWFsaXNlZAorICogQG9wczogVGhlIGNhY2hlIG9wZXJhdGlvbnMgdG8gYmUgaW5zdGFsbGVkIGluIHRoYXQgcmVjb3JkCisgKiBAaWRmbXQ6IEZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGlkZW50aWZpZXIKKyAqIEAuLi46IHNwcmludGYtc3R5bGUgYXJndW1lbnRzCisgKgorICogSW5pdGlhbGlzZSBhIHJlY29yZCBvZiBhIGNhY2hlIGFuZCBmaWxsIGluIHRoZSBuYW1lLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLwordm9pZCBmc2NhY2hlX2luaXRfY2FjaGUoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzICpvcHMsCisJCQljb25zdCBjaGFyICppZGZtdCwKKwkJCS4uLikKK3sKKwl2YV9saXN0IHZhOworCisJbWVtc2V0KGNhY2hlLCAwLCBzaXplb2YoKmNhY2hlKSk7CisKKwljYWNoZS0+b3BzID0gb3BzOworCisJdmFfc3RhcnQodmEsIGlkZm10KTsKKwl2c25wcmludGYoY2FjaGUtPmlkZW50aWZpZXIsIHNpemVvZihjYWNoZS0+aWRlbnRpZmllciksIGlkZm10LCB2YSk7CisJdmFfZW5kKHZhKTsKKworCUlOSVRfV09SSygmY2FjaGUtPm9wX2djLCBmc2NhY2hlX29wZXJhdGlvbl9nYyk7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5saW5rKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPm9iamVjdF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPm9wX2djX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5vcF9nY19saXN0X2xvY2spOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX2luaXRfY2FjaGUpOworCisvKioKKyAqIGZzY2FjaGVfYWRkX2NhY2hlIC0gRGVjbGFyZSBhIGNhY2hlIGFzIGJlaW5nIG9wZW4gZm9yIGJ1c2luZXNzCisgKiBAY2FjaGU6IFRoZSByZWNvcmQgZGVzY3JpYmluZyB0aGUgY2FjaGUKKyAqIEBpZnNkZWY6IFRoZSByZWNvcmQgb2YgdGhlIGNhY2hlIG9iamVjdCBkZXNjcmliaW5nIHRoZSB0b3AtbGV2ZWwgaW5kZXgKKyAqIEB0YWduYW1lOiBUaGUgdGFnIGRlc2NyaWJpbmcgdGhpcyBjYWNoZQorICoKKyAqIEFkZCBhIGNhY2hlIHRvIHRoZSBzeXN0ZW0sIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIG5ldGZzJ3MgdG8gdXNlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworaW50IGZzY2FjaGVfYWRkX2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJICAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0ICppZnNkZWYsCisJCSAgICAgIGNvbnN0IGNoYXIgKnRhZ25hbWUpCit7CisJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICp0YWc7CisKKwlCVUdfT04oIWNhY2hlLT5vcHMpOworCUJVR19PTighaWZzZGVmKTsKKworCWNhY2hlLT5mbGFncyA9IDA7CisJaWZzZGVmLT5ldmVudF9tYXNrID0gVUxPTkdfTUFYICYgfigxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCWlmc2RlZi0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9BQ1RJVkU7CisKKwlpZiAoIXRhZ25hbWUpCisJCXRhZ25hbWUgPSBjYWNoZS0+aWRlbnRpZmllcjsKKworCUJVR19PTighdGFnbmFtZVswXSk7CisKKwlfZW50ZXIoInslcy4lc30sLCVzIiwgY2FjaGUtPm9wcy0+bmFtZSwgY2FjaGUtPmlkZW50aWZpZXIsIHRhZ25hbWUpOworCisJLyogd2UgdXNlIHRoZSBjYWNoZSB0YWcgdG8gdW5pcXVlbHkgaWRlbnRpZnkgY2FjaGVzICovCisJdGFnID0gX19mc2NhY2hlX2xvb2t1cF9jYWNoZV90YWcodGFnbmFtZSk7CisJaWYgKElTX0VSUih0YWcpKQorCQlnb3RvIG5vbWVtOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRlNDQUNIRV9UQUdfUkVTRVJWRUQsICZ0YWctPmZsYWdzKSkKKwkJZ290byB0YWdfaW5fdXNlOworCisJY2FjaGUtPmtvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKHRhZ25hbWUsIGZzY2FjaGVfcm9vdCk7CisJaWYgKCFjYWNoZS0+a29iaikKKwkJZ290byBlcnJvcjsKKworCWlmc2RlZi0+Y29va2llID0gJmZzY2FjaGVfZnNkZWZfaW5kZXg7CisJaWZzZGVmLT5jYWNoZSA9IGNhY2hlOworCWNhY2hlLT5mc2RlZiA9IGlmc2RlZjsKKworCWRvd25fd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwl0YWctPmNhY2hlID0gY2FjaGU7CisJY2FjaGUtPnRhZyA9IHRhZzsKKworCS8qIGFkZCB0aGUgY2FjaGUgdG8gdGhlIGxpc3QgKi8KKwlsaXN0X2FkZCgmY2FjaGUtPmxpbmssICZmc2NhY2hlX2NhY2hlX2xpc3QpOworCisJLyogYWRkIHRoZSBjYWNoZSdzIG5ldGZzIGRlZmluaXRpb24gaW5kZXggb2JqZWN0IHRvIHRoZSBjYWNoZSdzCisJICogbGlzdCAqLworCXNwaW5fbG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmlmc2RlZi0+Y2FjaGVfbGluaywgJmNhY2hlLT5vYmplY3RfbGlzdCk7CisJc3Bpbl91bmxvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKworCS8qIGFkZCB0aGUgY2FjaGUncyBuZXRmcyBkZWZpbml0aW9uIGluZGV4IG9iamVjdCB0byB0aGUgdG9wIGxldmVsIGluZGV4CisJICogY29va2llIGFzIGEga25vd24gYmFja2luZyBvYmplY3QgKi8KKwlzcGluX2xvY2soJmZzY2FjaGVfZnNkZWZfaW5kZXgubG9jayk7CisKKwlobGlzdF9hZGRfaGVhZCgmaWZzZGVmLT5jb29raWVfbGluaywKKwkJICAgICAgICZmc2NhY2hlX2ZzZGVmX2luZGV4LmJhY2tpbmdfb2JqZWN0cyk7CisKKwlhdG9taWNfaW5jKCZmc2NhY2hlX2ZzZGVmX2luZGV4LnVzYWdlKTsKKworCS8qIGRvbmUgKi8KKwlzcGluX3VubG9jaygmZnNjYWNoZV9mc2RlZl9pbmRleC5sb2NrKTsKKwl1cF93cml0ZSgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiRlMtQ2FjaGU6IENhY2hlIFwiJXNcIiBhZGRlZCAodHlwZSAlcylcbiIsCisJICAgICAgIGNhY2hlLT50YWctPm5hbWUsIGNhY2hlLT5vcHMtPm5hbWUpOworCWtvYmplY3RfdWV2ZW50KGNhY2hlLT5rb2JqLCBLT0JKX0FERCk7CisKKwlfbGVhdmUoIiA9IDAgWyVzXSIsIGNhY2hlLT5pZGVudGlmaWVyKTsKKwlyZXR1cm4gMDsKKwordGFnX2luX3VzZToKKwlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBDYWNoZSB0YWcgJyVzJyBhbHJlYWR5IGluIHVzZVxuIiwgdGFnbmFtZSk7CisJX19mc2NhY2hlX3JlbGVhc2VfY2FjaGVfdGFnKHRhZyk7CisJX2xlYXZlKCIgPSAtRVhJU1QiKTsKKwlyZXR1cm4gLUVFWElTVDsKKworZXJyb3I6CisJX19mc2NhY2hlX3JlbGVhc2VfY2FjaGVfdGFnKHRhZyk7CisJX2xlYXZlKCIgPSAtRUlOVkFMIik7CisJcmV0dXJuIC1FSU5WQUw7CisKK25vbWVtOgorCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCXJldHVybiAtRU5PTUVNOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX2FkZF9jYWNoZSk7CisKKy8qKgorICogZnNjYWNoZV9pb19lcnJvciAtIE5vdGUgYSBjYWNoZSBJL08gZXJyb3IKKyAqIEBjYWNoZTogVGhlIHJlY29yZCBkZXNjcmliaW5nIHRoZSBjYWNoZQorICoKKyAqIE5vdGUgdGhhdCBhbiBJL08gZXJyb3Igb2NjdXJyZWQgaW4gYSBjYWNoZSBhbmQgdGhhdCBpdCBzaG91bGQgbm8gbG9uZ2VyIGJlCisgKiB1c2VkIGZvciBhbnl0aGluZy4gIFRoaXMgYWxzbyByZXBvcnRzIHRoZSBlcnJvciBpbnRvIHRoZSBrZXJuZWwgbG9nLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLwordm9pZCBmc2NhY2hlX2lvX2Vycm9yKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSkKK3sKKwlzZXRfYml0KEZTQ0FDSEVfSU9FUlJPUiwgJmNhY2hlLT5mbGFncyk7CisKKwlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBDYWNoZSAlcyBzdG9wcGVkIGR1ZSB0byBJL08gZXJyb3JcbiIsCisJICAgICAgIGNhY2hlLT5vcHMtPm5hbWUpOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX2lvX2Vycm9yKTsKKworLyoKKyAqIHJlcXVlc3Qgd2l0aGRyYXdhbCBvZiBhbGwgdGhlIG9iamVjdHMgaW4gYSBjYWNoZQorICogLSBhbGwgdGhlIG9iamVjdHMgYmVpbmcgd2l0aGRyYXduIGFyZSBtb3ZlZCBvbnRvIHRoZSBzdXBwbGllZCBsaXN0CisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfd2l0aGRyYXdfYWxsX29iamVjdHMoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqZHlpbmdfb2JqZWN0cykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKworCXNwaW5fbG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjYWNoZS0+b2JqZWN0X2xpc3QpKSB7CisJCW9iamVjdCA9IGxpc3RfZW50cnkoY2FjaGUtPm9iamVjdF9saXN0Lm5leHQsCisJCQkJICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY2FjaGVfbGluayk7CisJCWxpc3RfbW92ZV90YWlsKCZvYmplY3QtPmNhY2hlX2xpbmssIGR5aW5nX29iamVjdHMpOworCisJCV9kZWJ1Zygid2l0aGRyYXcgJXAiLCBvYmplY3QtPmNvb2tpZSk7CisKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlzcGluX3VubG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCQlmc2NhY2hlX3JhaXNlX2V2ZW50KG9iamVjdCwgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcpOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQljb25kX3Jlc2NoZWQoKTsKKwkJc3Bpbl9sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7CisJfQorCisJc3Bpbl91bmxvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKK30KKworLyoqCisgKiBmc2NhY2hlX3dpdGhkcmF3X2NhY2hlIC0gV2l0aGRyYXcgYSBjYWNoZSBmcm9tIHRoZSBhY3RpdmUgc2VydmljZQorICogQGNhY2hlOiBUaGUgcmVjb3JkIGRlc2NyaWJpbmcgdGhlIGNhY2hlCisgKgorICogV2l0aGRyYXcgYSBjYWNoZSBmcm9tIHNlcnZpY2UsIHVuYmluZGluZyBhbGwgaXRzIGNhY2hlIG9iamVjdHMgZnJvbSB0aGUKKyAqIG5ldGZzIGNvb2tpZXMgdGhleSdyZSBjdXJyZW50bHkgcmVwcmVzZW50aW5nLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLwordm9pZCBmc2NhY2hlX3dpdGhkcmF3X2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSkKK3sKKwlMSVNUX0hFQUQoZHlpbmdfb2JqZWN0cyk7CisKKwlfZW50ZXIoIiIpOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJGUy1DYWNoZTogV2l0aGRyYXdpbmcgY2FjaGUgXCIlc1wiXG4iLAorCSAgICAgICBjYWNoZS0+dGFnLT5uYW1lKTsKKworCS8qIG1ha2UgdGhlIGNhY2hlIHVuYXZhaWxhYmxlIGZvciBjb29raWUgYWNxdWlzaXRpb24gKi8KKwlpZiAodGVzdF9hbmRfc2V0X2JpdChGU0NBQ0hFX0NBQ0hFX1dJVEhEUkFXTiwgJmNhY2hlLT5mbGFncykpCisJCUJVRygpOworCisJZG93bl93cml0ZSgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKwlsaXN0X2RlbF9pbml0KCZjYWNoZS0+bGluayk7CisJY2FjaGUtPnRhZy0+Y2FjaGUgPSBOVUxMOworCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJLyogbWFrZSBzdXJlIGFsbCBwYWdlcyBwaW5uZWQgYnkgb3BlcmF0aW9ucyBvbiBiZWhhbGYgb2YgdGhlIG5ldGZzIGFyZQorCSAqIHdyaXR0ZW4gdG8gZGlzayAqLworCWNhY2hlLT5vcHMtPnN5bmNfY2FjaGUoY2FjaGUpOworCisJLyogZGlzc29jaWF0ZSBhbGwgdGhlIG5ldGZzIHBhZ2VzIGJhY2tlZCBieSB0aGlzIGNhY2hlIGZyb20gdGhlIGJsb2NrCisJICogbWFwcGluZ3MgaW4gdGhlIGNhY2hlICovCisJY2FjaGUtPm9wcy0+ZGlzc29jaWF0ZV9wYWdlcyhjYWNoZSk7CisKKwkvKiB3ZSBub3cgaGF2ZSB0byBkZXN0cm95IGFsbCB0aGUgYWN0aXZlIG9iamVjdHMgcGVydGFpbmluZyB0byB0aGlzCisJICogY2FjaGUgLSB3aGljaCB3ZSBkbyBieSBwYXNzaW5nIHRoZW0gb2ZmIHRvIHRocmVhZCBwb29sIHRvIGJlCisJICogZGlzcG9zZWQgb2YgKi8KKwlfZGVidWcoImRlc3Ryb3kiKTsKKworCWZzY2FjaGVfd2l0aGRyYXdfYWxsX29iamVjdHMoY2FjaGUsICZkeWluZ19vYmplY3RzKTsKKworCS8qIHdhaXQgZm9yIGFsbCBleHRhbnQgb2JqZWN0cyB0byBmaW5pc2ggdGhlaXIgb3V0c3RhbmRpbmcgb3BlcmF0aW9ucworCSAqIGFuZCBnbyBhd2F5ICovCisJX2RlYnVnKCJ3YWl0IGZvciBmaW5pc2giKTsKKwl3YWl0X2V2ZW50KGZzY2FjaGVfY2FjaGVfY2xlYXJlZF93cSwKKwkJICAgYXRvbWljX3JlYWQoJmNhY2hlLT5vYmplY3RfY291bnQpID09IDApOworCV9kZWJ1Zygid2FpdCBmb3IgY2xlYXJhbmNlIik7CisJd2FpdF9ldmVudChmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3EsCisJCSAgIGxpc3RfZW1wdHkoJmNhY2hlLT5vYmplY3RfbGlzdCkpOworCV9kZWJ1ZygiY2xlYXJlZCIpOworCUFTU0VSVChsaXN0X2VtcHR5KCZkeWluZ19vYmplY3RzKSk7CisKKwlrb2JqZWN0X3B1dChjYWNoZS0+a29iaik7CisKKwljbGVhcl9iaXQoRlNDQUNIRV9UQUdfUkVTRVJWRUQsICZjYWNoZS0+dGFnLT5mbGFncyk7CisJZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyhjYWNoZS0+dGFnKTsKKwljYWNoZS0+dGFnID0gTlVMTDsKKworCV9sZWF2ZSgiIik7Cit9CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfd2l0aGRyYXdfY2FjaGUpOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9jb29raWUuYyBiL2ZzL2ZzY2FjaGUvY29va2llLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmZDE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvY29va2llLmMKQEAgLTAsMCArMSw1MDAgQEAKKy8qIG5ldGZzIGNvb2tpZSBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisgKiB0aGUgbmV0ZnMgQVBJLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBDT09LSUUKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworc3RydWN0IGttZW1fY2FjaGUgKmZzY2FjaGVfY29va2llX2phcjsKKworc3RhdGljIGF0b21pY190IGZzY2FjaGVfb2JqZWN0X2RlYnVnX2lkID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyBpbnQgZnNjYWNoZV9hY3F1aXJlX25vbl9pbmRleF9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpOworc3RhdGljIGludCBmc2NhY2hlX2FsbG9jX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpOworc3RhdGljIGludCBmc2NhY2hlX2F0dGFjaF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJIHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworLyoKKyAqIGluaXRpYWxpc2UgYW4gY29va2llIGphciBzbGFiIGVsZW1lbnQgcHJpb3IgdG8gYW55IHVzZQorICovCit2b2lkIGZzY2FjaGVfY29va2llX2luaXRfb25jZSh2b2lkICpfY29va2llKQoreworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gX2Nvb2tpZTsKKworCW1lbXNldChjb29raWUsIDAsIHNpemVvZigqY29va2llKSk7CisJc3Bpbl9sb2NrX2luaXQoJmNvb2tpZS0+bG9jayk7CisJSU5JVF9ITElTVF9IRUFEKCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cyk7Cit9CisKKy8qCisgKiByZXF1ZXN0IGEgY29va2llIHRvIHJlcHJlc2VudCBhbiBvYmplY3QgKGluZGV4LCBkYXRhZmlsZSwgeGF0dHIsIGV0YykKKyAqIC0gcGFyZW50IHNwZWNpZmllcyB0aGUgcGFyZW50IG9iamVjdAorICogICAtIHRoZSB0b3AgbGV2ZWwgaW5kZXggY29va2llIGZvciBlYWNoIG5ldGZzIGlzIHN0b3JlZCBpbiB0aGUgZnNjYWNoZV9uZXRmcworICogICAgIHN0cnVjdCB1cG9uIHJlZ2lzdHJhdGlvbgorICogLSBkZWYgcG9pbnRzIHRvIHRoZSBkZWZpbml0aW9uCisgKiAtIHRoZSBuZXRmc19kYXRhIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbnMgcG9pbnRlZCB0byBpbiAqZGVmCisgKiAtIGFsbCBhdHRhY2hlZCBjYWNoZXMgd2lsbCBiZSBzZWFyY2hlZCB0byBzZWUgaWYgdGhleSBjb250YWluIHRoaXMgb2JqZWN0CisgKiAtIGluZGV4IG9iamVjdHMgYXJlbid0IHN0b3JlZCBvbiBkaXNrIHVudGlsIHRoZXJlJ3MgYSBkZXBlbmRlbnQgZmlsZSB0aGF0CisgKiAgIG5lZWRzIHN0b3JpbmcKKyAqIC0gb3RoZXIgb2JqZWN0cyBhcmUgc3RvcmVkIGluIGEgc2VsZWN0ZWQgY2FjaGUgaW1tZWRpYXRlbHksIGFuZCBhbGwgdGhlCisgKiAgIGluZGljZXMgZm9ybWluZyB0aGUgcGF0aCB0byBpdCBhcmUgaW5zdGFudGlhdGVkIGlmIG5lY2Vzc2FyeQorICogLSB3ZSBuZXZlciBsZXQgb24gdG8gdGhlIG5ldGZzIGFib3V0IGVycm9ycworICogICAtIHdlIG1heSBzZXQgYSBuZWdhdGl2ZSBjb29raWUgcG9pbnRlciwgYnV0IHRoYXQncyBva2F5CisgKi8KK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqX19mc2NhY2hlX2FjcXVpcmVfY29va2llKAorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqcGFyZW50LAorCWNvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgKmRlZiwKKwl2b2lkICpuZXRmc19kYXRhKQoreworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llOworCisJQlVHX09OKCFkZWYpOworCisJX2VudGVyKCJ7JXN9LHslc30sJXAiLAorCSAgICAgICBwYXJlbnQgPyAoY2hhciAqKSBwYXJlbnQtPmRlZi0+bmFtZSA6ICI8bm8tcGFyZW50PiIsCisJICAgICAgIGRlZi0+bmFtZSwgbmV0ZnNfZGF0YSk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hY3F1aXJlcyk7CisKKwkvKiBpZiB0aGVyZSdzIG5vIHBhcmVudCBjb29raWUsIHRoZW4gd2UgZG9uJ3QgY3JlYXRlIG9uZSBoZXJlIGVpdGhlciAqLworCWlmICghcGFyZW50KSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FjcXVpcmVzX251bGwpOworCQlfbGVhdmUoIiBbbm8gcGFyZW50XSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiB2YWxpZGF0ZSB0aGUgZGVmaW5pdGlvbiAqLworCUJVR19PTighZGVmLT5nZXRfa2V5KTsKKwlCVUdfT04oIWRlZi0+bmFtZVswXSk7CisKKwlCVUdfT04oZGVmLT50eXBlID09IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVggJiYKKwkgICAgICAgcGFyZW50LT5kZWYtPnR5cGUgIT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIGNvb2tpZSAqLworCWNvb2tpZSA9IGttZW1fY2FjaGVfYWxsb2MoZnNjYWNoZV9jb29raWVfamFyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvb2tpZSkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hY3F1aXJlc19vb20pOworCQlfbGVhdmUoIiBbRU5PTUVNXSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhdG9taWNfc2V0KCZjb29raWUtPnVzYWdlLCAxKTsKKwlhdG9taWNfc2V0KCZjb29raWUtPm5fY2hpbGRyZW4sIDApOworCisJYXRvbWljX2luYygmcGFyZW50LT51c2FnZSk7CisJYXRvbWljX2luYygmcGFyZW50LT5uX2NoaWxkcmVuKTsKKworCWNvb2tpZS0+ZGVmCQk9IGRlZjsKKwljb29raWUtPnBhcmVudAkJPSBwYXJlbnQ7CisJY29va2llLT5uZXRmc19kYXRhCT0gbmV0ZnNfZGF0YTsKKwljb29raWUtPmZsYWdzCQk9IDA7CisKKwlJTklUX1JBRElYX1RSRUUoJmNvb2tpZS0+c3RvcmVzLCBHRlBfTk9GUyk7CisKKwlzd2l0Y2ggKGNvb2tpZS0+ZGVmLT50eXBlKSB7CisJY2FzZSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYOgorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb29raWVfaW5kZXgpOworCQlicmVhazsKKwljYXNlIEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEU6CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2Nvb2tpZV9kYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29va2llX3NwZWNpYWwpOworCQlicmVhazsKKwl9CisKKwkvKiBpZiB0aGUgb2JqZWN0IGlzIGFuIGluZGV4IHRoZW4gd2UgbmVlZCBkbyBub3RoaW5nIG1vcmUgaGVyZSAtIHdlCisJICogY3JlYXRlIGluZGljZXMgb24gZGlzayB3aGVuIHdlIG5lZWQgdGhlbSBhcyBhbiBpbmRleCBtYXkgZXhpc3QgaW4KKwkgKiBtdWx0aXBsZSBjYWNoZXMgKi8KKwlpZiAoY29va2llLT5kZWYtPnR5cGUgIT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCkgeworCQlpZiAoZnNjYWNoZV9hY3F1aXJlX25vbl9pbmRleF9jb29raWUoY29va2llKSA8IDApIHsKKwkJCWF0b21pY19kZWMoJnBhcmVudC0+bl9jaGlsZHJlbik7CisJCQlfX2ZzY2FjaGVfY29va2llX3B1dChjb29raWUpOworCQkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWNxdWlyZXNfbm9idWZzKTsKKwkJCV9sZWF2ZSgiID0gTlVMTCIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hY3F1aXJlc19vayk7CisJX2xlYXZlKCIgPSAlcCIsIGNvb2tpZSk7CisJcmV0dXJuIGNvb2tpZTsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX2FjcXVpcmVfY29va2llKTsKKworLyoKKyAqIGFjcXVpcmUgYSBub24taW5kZXggY29va2llCisgKiAtIHRoaXMgbXVzdCBtYWtlIHN1cmUgdGhlIGluZGV4IGNoYWluIGlzIGluc3RhbnRpYXRlZCBhbmQgaW5zdGFudGlhdGUgdGhlCisgKiAgIG9iamVjdCByZXByZXNlbnRhdGlvbiB0b28KKyAqLworc3RhdGljIGludCBmc2NhY2hlX2FjcXVpcmVfbm9uX2luZGV4X2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGU7CisJdWludDY0X3QgaV9zaXplOworCWludCByZXQ7CisKKwlfZW50ZXIoIiIpOworCisJY29va2llLT5mbGFncyA9IDEgPDwgRlNDQUNIRV9DT09LSUVfVU5BVkFJTEFCTEU7CisKKwkvKiBub3cgd2UgbmVlZCB0byBzZWUgd2hldGhlciB0aGUgYmFja2luZyBvYmplY3RzIGZvciB0aGlzIGNvb2tpZSB5ZXQKKwkgKiBleGlzdCwgaWYgbm90IHRoZXJlJ2xsIGJlIG5vdGhpbmcgdG8gc2VhcmNoICovCisJZG93bl9yZWFkKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJaWYgKGxpc3RfZW1wdHkoJmZzY2FjaGVfY2FjaGVfbGlzdCkpIHsKKwkJdXBfcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKwkJX2xlYXZlKCIgPSAwIFtubyBjYWNoZXNdIik7CisJCXJldHVybiAwOworCX0KKworCS8qIHNlbGVjdCBhIGNhY2hlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBvYmplY3QgKi8KKwljYWNoZSA9IGZzY2FjaGVfc2VsZWN0X2NhY2hlX2Zvcl9vYmplY3QoY29va2llLT5wYXJlbnQpOworCWlmICghY2FjaGUpIHsKKwkJdXBfcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWNxdWlyZXNfbm9fY2FjaGUpOworCQlfbGVhdmUoIiA9IC1FTk9NRURJVU0gW25vIGNhY2hlXSIpOworCQlyZXR1cm4gLUVOT01FRElVTTsKKwl9CisKKwlfZGVidWcoImNhY2hlICVzIiwgY2FjaGUtPnRhZy0+bmFtZSk7CisKKwljb29raWUtPmZsYWdzID0KKwkJKDEgPDwgRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCkgfAorCQkoMSA8PCBGU0NBQ0hFX0NPT0tJRV9DUkVBVElORykgfAorCQkoMSA8PCBGU0NBQ0hFX0NPT0tJRV9OT19EQVRBX1lFVCk7CisKKwkvKiBhc2sgdGhlIGNhY2hlIHRvIGFsbG9jYXRlIG9iamVjdHMgZm9yIHRoaXMgY29va2llIGFuZCBpdHMgcGFyZW50CisJICogY2hhaW4gKi8KKwlyZXQgPSBmc2NhY2hlX2FsbG9jX29iamVjdChjYWNoZSwgY29va2llKTsKKwlpZiAocmV0IDwgMCkgeworCQl1cF9yZWFkKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCQlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBwYXNzIG9uIGhvdyBiaWcgdGhlIG9iamVjdCB3ZSdyZSBjYWNoaW5nIGlzIHN1cHBvc2VkIHRvIGJlICovCisJY29va2llLT5kZWYtPmdldF9hdHRyKGNvb2tpZS0+bmV0ZnNfZGF0YSwgJmlfc2l6ZSk7CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisJaWYgKGhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpIHsKKwkJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJCWdvdG8gdW5hdmFpbGFibGU7CisJfQorCisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJZnNjYWNoZV9zZXRfc3RvcmVfbGltaXQob2JqZWN0LCBpX3NpemUpOworCisJLyogaW5pdGlhdGUgdGhlIHByb2Nlc3Mgb2YgbG9va2luZyB1cCBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNoYWluCisJICogKGRvbmUgYnkgZnNjYWNoZV9pbml0aWFsaXNlX29iamVjdCgpKSAqLworCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3Qob2JqZWN0KTsKKworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJLyogd2UgbWF5IGJlIHJlcXVpcmVkIHRvIHdhaXQgZm9yIGxvb2t1cCB0byBjb21wbGV0ZSBhdCB0aGlzIHBvaW50ICovCisJaWYgKCFmc2NhY2hlX2RlZmVyX2xvb2t1cCkgeworCQlfZGVidWcoIm5vbi1kZWZlcnJlZCBsb29rdXAgJXAiLCAmY29va2llLT5mbGFncyk7CisJCXdhaXRfb25fYml0KCZjb29raWUtPmZsYWdzLCBGU0NBQ0hFX0NPT0tJRV9MT09LSU5HX1VQLAorCQkJICAgIGZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJX2RlYnVnKCJjb21wbGV0ZSIpOworCQlpZiAodGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfVU5BVkFJTEFCTEUsICZjb29raWUtPmZsYWdzKSkKKwkJCWdvdG8gdW5hdmFpbGFibGU7CisJfQorCisJdXBfcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKwlfbGVhdmUoIiA9IDAgW2RlZmVycmVkXSIpOworCXJldHVybiAwOworCit1bmF2YWlsYWJsZToKKwl1cF9yZWFkKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCV9sZWF2ZSgiID0gLUVOT0JVRlMiKTsKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qCisgKiByZWN1cnNpdmVseSBhbGxvY2F0ZSBjYWNoZSBvYmplY3QgcmVjb3JkcyBmb3IgYSBjb29raWUvY2FjaGUgY29tYmluYXRpb24KKyAqIC0gY2FsbGVyIG11c3QgYmUgaG9sZGluZyB0aGUgYWRkcmVtb3ZlIHNlbQorICovCitzdGF0aWMgaW50IGZzY2FjaGVfYWxsb2Nfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCQlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqX247CisJaW50IHJldDsKKworCV9lbnRlcigiJXAsJXB7JXN9IiwgY2FjaGUsIGNvb2tpZSwgY29va2llLT5kZWYtPm5hbWUpOworCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iamVjdCwgX24sICZjb29raWUtPmJhY2tpbmdfb2JqZWN0cywKKwkJCSAgICAgY29va2llX2xpbmspIHsKKwkJaWYgKG9iamVjdC0+Y2FjaGUgPT0gY2FjaGUpCisJCQlnb3RvIG9iamVjdF9hbHJlYWR5X2V4dGFudDsKKwl9CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwkvKiBhc2sgdGhlIGNhY2hlIHRvIGFsbG9jYXRlIGFuIG9iamVjdCAod2UgbWF5IGVuZCB1cCB3aXRoIGR1cGxpY2F0ZQorCSAqIG9iamVjdHMgYXQgdGhpcyBzdGFnZSwgYnV0IHdlIHNvcnQgdGhhdCBvdXQgbGF0ZXIpICovCisJb2JqZWN0ID0gY2FjaGUtPm9wcy0+YWxsb2Nfb2JqZWN0KGNhY2hlLCBjb29raWUpOworCWlmIChJU19FUlIob2JqZWN0KSkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vYmplY3Rfbm9fYWxsb2MpOworCQlyZXQgPSBQVFJfRVJSKG9iamVjdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X2FsbG9jKTsKKworCW9iamVjdC0+ZGVidWdfaWQgPSBhdG9taWNfaW5jX3JldHVybigmZnNjYWNoZV9vYmplY3RfZGVidWdfaWQpOworCisJX2RlYnVnKCJBTExPQyBPQkoleDogJXMgeyVseH0iLAorCSAgICAgICBvYmplY3QtPmRlYnVnX2lkLCBjb29raWUtPmRlZi0+bmFtZSwgb2JqZWN0LT5ldmVudHMpOworCisJcmV0ID0gZnNjYWNoZV9hbGxvY19vYmplY3QoY2FjaGUsIGNvb2tpZS0+cGFyZW50KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9wdXQ7CisKKwkvKiBvbmx5IGF0dGFjaCBpZiB3ZSBtYW5hZ2VkIHRvIGFsbG9jYXRlIGFsbCB3ZSBuZWVkZWQsIG90aGVyd2lzZQorCSAqIGRpc2NhcmQgdGhlIG9iamVjdCB3ZSBqdXN0IGFsbG9jYXRlZCBhbmQgaW5zdGVhZCB1c2UgdGhlIG9uZQorCSAqIGF0dGFjaGVkIHRvIHRoZSBjb29raWUgKi8KKwlpZiAoZnNjYWNoZV9hdHRhY2hfb2JqZWN0KGNvb2tpZSwgb2JqZWN0KSA8IDApCisJCWNhY2hlLT5vcHMtPnB1dF9vYmplY3Qob2JqZWN0KTsKKworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitvYmplY3RfYWxyZWFkeV9leHRhbnQ6CisJcmV0ID0gLUVOT0JVRlM7CisJaWYgKG9iamVjdC0+c3RhdGUgPj0gRlNDQUNIRV9PQkpFQ1RfRFlJTkcpIHsKKwkJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJCWdvdG8gZXJyb3I7CisJfQorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCV9sZWF2ZSgiID0gMCBbZm91bmRdIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3B1dDoKKwljYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7CitlcnJvcjoKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogYXR0YWNoIGEgY2FjaGUgb2JqZWN0IHRvIGEgY29va2llCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9hdHRhY2hfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnA7CisJc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlID0gb2JqZWN0LT5jYWNoZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqX247CisJaW50IHJldDsKKworCV9lbnRlcigieyVzfSx7T0JKJXh9IiwgY29va2llLT5kZWYtPm5hbWUsIG9iamVjdC0+ZGVidWdfaWQpOworCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCisJLyogdGhlcmUgbWF5IGJlIG11bHRpcGxlIGluaXRpYWwgY3JlYXRpb25zIG9mIHRoaXMgb2JqZWN0LCBidXQgd2Ugb25seQorCSAqIHdhbnQgb25lICovCisJcmV0ID0gLUVFWElTVDsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwLCBfbiwgJmNvb2tpZS0+YmFja2luZ19vYmplY3RzLCBjb29raWVfbGluaykgeworCQlpZiAocC0+Y2FjaGUgPT0gb2JqZWN0LT5jYWNoZSkgeworCQkJaWYgKHAtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKQorCQkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBjYW50X2F0dGFjaF9vYmplY3Q7CisJCX0KKwl9CisKKwkvKiBwaW4gdGhlIHBhcmVudCBvYmplY3QgKi8KKwlzcGluX2xvY2tfbmVzdGVkKCZjb29raWUtPnBhcmVudC0+bG9jaywgMSk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkocCwgX24sICZjb29raWUtPnBhcmVudC0+YmFja2luZ19vYmplY3RzLAorCQkJICAgICBjb29raWVfbGluaykgeworCQlpZiAocC0+Y2FjaGUgPT0gb2JqZWN0LT5jYWNoZSkgeworCQkJaWYgKHAtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKSB7CisJCQkJcmV0ID0gLUVOT0JVRlM7CisJCQkJc3Bpbl91bmxvY2soJmNvb2tpZS0+cGFyZW50LT5sb2NrKTsKKwkJCQlnb3RvIGNhbnRfYXR0YWNoX29iamVjdDsKKwkJCX0KKwkJCW9iamVjdC0+cGFyZW50ID0gcDsKKwkJCXNwaW5fbG9jaygmcC0+bG9jayk7CisJCQlwLT5uX2NoaWxkcmVuKys7CisJCQlzcGluX3VubG9jaygmcC0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmY29va2llLT5wYXJlbnQtPmxvY2spOworCisJLyogYXR0YWNoIHRvIHRoZSBjYWNoZSdzIG9iamVjdCBsaXN0ICovCisJaWYgKGxpc3RfZW1wdHkoJm9iamVjdC0+Y2FjaGVfbGluaykpIHsKKwkJc3Bpbl9sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7CisJCWxpc3RfYWRkKCZvYmplY3QtPmNhY2hlX2xpbmssICZjYWNoZS0+b2JqZWN0X2xpc3QpOworCQlzcGluX3VubG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCX0KKworCS8qIGF0dGFjaCB0byB0aGUgY29va2llICovCisJb2JqZWN0LT5jb29raWUgPSBjb29raWU7CisJYXRvbWljX2luYygmY29va2llLT51c2FnZSk7CisJaGxpc3RfYWRkX2hlYWQoJm9iamVjdC0+Y29va2llX2xpbmssICZjb29raWUtPmJhY2tpbmdfb2JqZWN0cyk7CisJcmV0ID0gMDsKKworY2FudF9hdHRhY2hfb2JqZWN0OgorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB1cGRhdGUgdGhlIGluZGV4IGVudHJpZXMgYmFja2luZyBhIGNvb2tpZQorICovCit2b2lkIF9fZnNjYWNoZV91cGRhdGVfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBobGlzdF9ub2RlICpfcDsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3VwZGF0ZXMpOworCisJaWYgKCFjb29raWUpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fdXBkYXRlc19udWxsKTsKKwkJX2xlYXZlKCIgW25vIGNvb2tpZV0iKTsKKwkJcmV0dXJuOworCX0KKworCV9lbnRlcigieyVzfSIsIGNvb2tpZS0+ZGVmLT5uYW1lKTsKKworCUJVR19PTighY29va2llLT5kZWYtPmdldF9hdXgpOworCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCisJLyogdXBkYXRlIHRoZSBpbmRleCBlbnRyeSBvbiBkaXNrIGluIGVhY2ggY2FjaGUgYmFja2luZyB0aGlzIGNvb2tpZSAqLworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iamVjdCwgX3AsCisJCQkgICAgICZjb29raWUtPmJhY2tpbmdfb2JqZWN0cywgY29va2llX2xpbmspIHsKKwkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIEZTQ0FDSEVfT0JKRUNUX0VWX1VQREFURSk7CisJfQorCisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJX2xlYXZlKCIiKTsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX3VwZGF0ZV9jb29raWUpOworCisvKgorICogcmVsZWFzZSBhIGNvb2tpZSBiYWNrIHRvIHRoZSBjYWNoZQorICogLSB0aGUgb2JqZWN0IHdpbGwgYmUgbWFya2VkIGFzIHJlY3ljbGFibGUgb24gZGlzayBpZiByZXRpcmUgaXMgdHJ1ZQorICogLSBhbGwgZGVwZW5kZW50cyBvZiB0aGlzIGNvb2tpZSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIHVucmVnaXN0ZXJlZAorICogICAoaW5kaWNlcy9maWxlcy9wYWdlcykKKyAqLwordm9pZCBfX2ZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIGludCByZXRpcmUpCit7CisJc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXMpOworCisJaWYgKCFjb29raWUpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzX251bGwpOworCQlfbGVhdmUoIiBbbm8gY29va2llXSIpOworCQlyZXR1cm47CisJfQorCisJX2VudGVyKCIlcHslcywlcH0sJWQiLAorCSAgICAgICBjb29raWUsIGNvb2tpZS0+ZGVmLT5uYW1lLCBjb29raWUtPm5ldGZzX2RhdGEsIHJldGlyZSk7CisKKwlpZiAoYXRvbWljX3JlYWQoJmNvb2tpZS0+bl9jaGlsZHJlbikgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBDb29raWUgJyVzJyBzdGlsbCBoYXMgY2hpbGRyZW5cbiIsCisJCSAgICAgICBjb29raWUtPmRlZi0+bmFtZSk7CisJCUJVRygpOworCX0KKworCS8qIHdhaXQgZm9yIHRoZSBjb29raWUgdG8gZmluaXNoIGJlaW5nIGluc3RhbnRpYXRlZCAob3IgdG8gZmFpbCkgKi8KKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcsICZjb29raWUtPmZsYWdzKSkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfd2FpdGNydCk7CisJCXdhaXRfb25fYml0KCZjb29raWUtPmZsYWdzLCBGU0NBQ0hFX0NPT0tJRV9DUkVBVElORywKKwkJCSAgICBmc2NhY2hlX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJfQorCisJZXZlbnQgPSByZXRpcmUgPyBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUgOiBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFOworCisJLyogZGV0YWNoIHBvaW50ZXJzIGJhY2sgdG8gdGhlIG5ldGZzICovCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCisJY29va2llLT5uZXRmc19kYXRhCT0gTlVMTDsKKwljb29raWUtPmRlZgkJPSBOVUxMOworCisJLyogYnJlYWsgbGlua3Mgd2l0aCBhbGwgdGhlIGFjdGl2ZSBvYmplY3RzICovCisJd2hpbGUgKCFobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKSB7CisJCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJCSAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0LAorCQkJCSAgICAgY29va2llX2xpbmspOworCisJCV9kZWJ1ZygiUkVMRUFTRSBPQkoleCIsIG9iamVjdC0+ZGVidWdfaWQpOworCisJCS8qIGRldGFjaCBlYWNoIGNhY2hlIG9iamVjdCBmcm9tIHRoZSBvYmplY3QgY29va2llICovCisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJaGxpc3RfZGVsX2luaXQoJm9iamVjdC0+Y29va2llX2xpbmspOworCisJCWNhY2hlID0gb2JqZWN0LT5jYWNoZTsKKwkJb2JqZWN0LT5jb29raWUgPSBOVUxMOworCQlmc2NhY2hlX3JhaXNlX2V2ZW50KG9iamVjdCwgZXZlbnQpOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY29va2llLT51c2FnZSkpCisJCQkvKiB0aGUgY29va2llIHJlZmNvdW50IHNob3VsZG4ndCBiZSByZWR1Y2VkIHRvIDAgeWV0ICovCisJCQlCVUcoKTsKKwl9CisKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChjb29raWUtPnBhcmVudCkgeworCQlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJmNvb2tpZS0+cGFyZW50LT51c2FnZSksID4sIDApOworCQlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJmNvb2tpZS0+cGFyZW50LT5uX2NoaWxkcmVuKSwgPiwgMCk7CisJCWF0b21pY19kZWMoJmNvb2tpZS0+cGFyZW50LT5uX2NoaWxkcmVuKTsKKwl9CisKKwkvKiBmaW5hbGx5IGRpc3Bvc2Ugb2YgdGhlIGNvb2tpZSAqLworCUFTU0VSVENNUChhdG9taWNfcmVhZCgmY29va2llLT51c2FnZSksID4sIDApOworCWZzY2FjaGVfY29va2llX3B1dChjb29raWUpOworCisJX2xlYXZlKCIiKTsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX3JlbGlucXVpc2hfY29va2llKTsKKworLyoKKyAqIGRlc3Ryb3kgYSBjb29raWUKKyAqLwordm9pZCBfX2ZzY2FjaGVfY29va2llX3B1dChzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKnBhcmVudDsKKworCV9lbnRlcigiJXAiLCBjb29raWUpOworCisJZm9yICg7OykgeworCQlfZGVidWcoIkZSRUUgQ09PS0lFICVwIiwgY29va2llKTsKKwkJcGFyZW50ID0gY29va2llLT5wYXJlbnQ7CisJCUJVR19PTighaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSk7CisJCWttZW1fY2FjaGVfZnJlZShmc2NhY2hlX2Nvb2tpZV9qYXIsIGNvb2tpZSk7CisKKwkJaWYgKCFwYXJlbnQpCisJCQlicmVhazsKKworCQljb29raWUgPSBwYXJlbnQ7CisJCUJVR19PTihhdG9taWNfcmVhZCgmY29va2llLT51c2FnZSkgPD0gMCk7CisJCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmY29va2llLT51c2FnZSkpCisJCQlicmVhazsKKwl9CisKKwlfbGVhdmUoIiIpOworfQpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9mc2RlZi5jIGIvZnMvZnNjYWNoZS9mc2RlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjRiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL2ZzZGVmLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qIEZpbGVzeXN0ZW0gaW5kZXggZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBDQUNIRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyB1aW50MTZfdCBmc2NhY2hlX2ZzZGVmX25ldGZzX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCk7CisKK3N0YXRpYyB1aW50MTZfdCBmc2NhY2hlX2ZzZGVmX25ldGZzX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCk7CisKK3N0YXRpYworZW51bSBmc2NhY2hlX2NoZWNrYXV4IGZzY2FjaGVfZnNkZWZfbmV0ZnNfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJCQkgICAgdWludDE2X3QgZGF0YWxlbik7CisKKy8qCisgKiBUaGUgcm9vdCBpbmRleCBpcyBvd25lZCBieSBGUy1DYWNoZSBpdHNlbGYuCisgKgorICogV2hlbiBhIG5ldGZzIHJlcXVlc3RzIGNhY2hpbmcgZmFjaWxpdGllcywgRlMtQ2FjaGUgd2lsbCwgaWYgb25lIGRvZXNuJ3QKKyAqIGFscmVhZHkgZXhpc3QsIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgcm9vdCBpbmRleCB3aXRoIHRoZSBrZXkgYmVpbmcgdGhlIG5hbWUKKyAqIG9mIHRoZSBuZXRmcyAoIkFGUyIgZm9yIGV4YW1wbGUpLCBhbmQgdGhlIGF1eGlsaWFyeSBkYXRhIGhvbGRpbmcgdGhlIGluZGV4CisgKiBzdHJ1Y3R1cmUgdmVyc2lvbiBzdXBwbGllZCBieSB0aGUgbmV0ZnM6CisgKgorICoJCQkJICAgICBGU0RFRgorICoJCQkJICAgICAgIHwKKyAqCQkJCSArLS0tLS0tLS0tLS0rCisgKgkJCQkgfCAgICAgICAgICAgfAorICoJCQkJTkZTICAgICAgICAgQUZTCisgKgkJCSAgICAgICBbdj0xXSAgICAgICBbdj0xXQorICoKKyAqIElmIGFuIGVudHJ5IHdpdGggdGhlIGFwcHJvcHJpYXRlIG5hbWUgZG9lcyBhbHJlYWR5IGV4aXN0LCB0aGUgdmVyc2lvbiBpcworICogY29tcGFyZWQuICBJZiB0aGUgdmVyc2lvbiBpcyBkaWZmZXJlbnQsIHRoZSBlbnRpcmUgc3VidHJlZSBmcm9tIHRoYXQgZW50cnkKKyAqIHdpbGwgYmUgZGlzY2FyZGVkIGFuZCBhIG5ldyBlbnRyeSBjcmVhdGVkLgorICoKKyAqIFRoZSBuZXcgZW50cnkgd2lsbCBiZSBhbiBpbmRleCwgYW5kIGEgY29va2llIHJlZmVycmluZyB0byBpdCB3aWxsIGJlIHBhc3NlZAorICogdG8gdGhlIG5ldGZzLiAgVGhpcyBpcyB0aGVuIHRoZSByb290IGhhbmRsZSBieSB3aGljaCB0aGUgbmV0ZnMgYWNjZXNzZXMgdGhlCisgKiBjYWNoZS4gIEl0IGNhbiBjcmVhdGUgd2hhdGV2ZXIgb2JqZWN0cyBpdCBsaWtlcyBpbiB0aGF0IGluZGV4LCBpbmNsdWRpbmcKKyAqIGZ1cnRoZXIgaW5kaWNlcy4KKyAqLworc3RhdGljIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgZnNjYWNoZV9mc2RlZl9pbmRleF9kZWYgPSB7CisJLm5hbWUJCT0gIi5GUy1DYWNoZSIsCisJLnR5cGUJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCwKK307CisKK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZSBmc2NhY2hlX2ZzZGVmX2luZGV4ID0geworCS51c2FnZQkJPSBBVE9NSUNfSU5JVCgxKSwKKwkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChmc2NhY2hlX2ZzZGVmX2luZGV4LmxvY2spLAorCS5iYWNraW5nX29iamVjdHMgPSBITElTVF9IRUFEX0lOSVQsCisJLmRlZgkJPSAmZnNjYWNoZV9mc2RlZl9pbmRleF9kZWYsCit9OworRVhQT1JUX1NZTUJPTChmc2NhY2hlX2ZzZGVmX2luZGV4KTsKKworLyoKKyAqIERlZmluaXRpb24gb2YgYW4gZW50cnkgaW4gdGhlIHJvb3QgaW5kZXguICBFYWNoIGVudHJ5IGlzIGFuIGluZGV4LCBrZXllZCB0bworICogYSBzcGVjaWZpYyBuZXRmcyBhbmQgb25seSBhcHBsaWNhYmxlIHRvIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBpbmRleAorICogc3RydWN0dXJlIHVzZWQgYnkgdGhhdCBuZXRmcy4KKyAqLworc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBmc2NhY2hlX2ZzZGVmX25ldGZzX2RlZiA9IHsKKwkubmFtZQkJPSAiRlNERUYubmV0ZnMiLAorCS50eXBlCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgsCisJLmdldF9rZXkJPSBmc2NhY2hlX2ZzZGVmX25ldGZzX2dldF9rZXksCisJLmdldF9hdXgJPSBmc2NhY2hlX2ZzZGVmX25ldGZzX2dldF9hdXgsCisJLmNoZWNrX2F1eAk9IGZzY2FjaGVfZnNkZWZfbmV0ZnNfY2hlY2tfYXV4LAorfTsKKworLyoKKyAqIGdldCB0aGUga2V5IGRhdGEgZm9yIGFuIEZTREVGIGluZGV4IHJlY29yZCAtIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIG5ldGZzCisgKiBmb3Igd2hpY2ggdGhpcyBlbnRyeSBpcyBjcmVhdGVkCisgKi8KK3N0YXRpYyB1aW50MTZfdCBmc2NhY2hlX2ZzZGVmX25ldGZzX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1bnNpZ25lZCBrbGVuOworCisJX2VudGVyKCJ7JXMuJXV9LCIsIG5ldGZzLT5uYW1lLCBuZXRmcy0+dmVyc2lvbik7CisKKwlrbGVuID0gc3RybGVuKG5ldGZzLT5uYW1lKTsKKwlpZiAoa2xlbiA+IGJ1Zm1heCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCBuZXRmcy0+bmFtZSwga2xlbik7CisJcmV0dXJuIGtsZW47Cit9CisKKy8qCisgKiBnZXQgdGhlIGF1eGlsaWFyeSBkYXRhIGZvciBhbiBGU0RFRiBpbmRleCByZWNvcmQgLSB0aGlzIGlzIHRoZSBpbmRleAorICogc3RydWN0dXJlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBuZXRmcyBmb3Igd2hpY2ggdGhpcyB2ZXJzaW9uIGlzIGNyZWF0ZWQKKyAqLworc3RhdGljIHVpbnQxNl90IGZzY2FjaGVfZnNkZWZfbmV0ZnNfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQoreworCWNvbnN0IHN0cnVjdCBmc2NhY2hlX25ldGZzICpuZXRmcyA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVuc2lnbmVkIGRsZW47CisKKwlfZW50ZXIoInslcy4ldX0sIiwgbmV0ZnMtPm5hbWUsIG5ldGZzLT52ZXJzaW9uKTsKKworCWRsZW4gPSBzaXplb2YodWludDMyX3QpOworCWlmIChkbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsICZuZXRmcy0+dmVyc2lvbiwgZGxlbik7CisJcmV0dXJuIGRsZW47Cit9CisKKy8qCisgKiBjaGVjayB0aGF0IHRoZSBpbmRleCBzdHJ1Y3R1cmUgdmVyc2lvbiBudW1iZXIgc3RvcmVkIGluIHRoZSBhdXhpbGlhcnkgZGF0YQorICogbWF0Y2hlcyB0aGUgb25lIHRoZSBuZXRmcyBnYXZlIHVzCisgKi8KK3N0YXRpYyBlbnVtIGZzY2FjaGVfY2hlY2thdXggZnNjYWNoZV9mc2RlZl9uZXRmc19jaGVja19hdXgoCisJdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJY29uc3Qgdm9pZCAqZGF0YSwKKwl1aW50MTZfdCBkYXRhbGVuKQoreworCXN0cnVjdCBmc2NhY2hlX25ldGZzICpuZXRmcyA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQzMl90IHZlcnNpb247CisKKwlfZW50ZXIoInslc30sLCVodSIsIG5ldGZzLT5uYW1lLCBkYXRhbGVuKTsKKworCWlmIChkYXRhbGVuICE9IHNpemVvZih2ZXJzaW9uKSkgeworCQlfbGVhdmUoIiA9IE9CU09MRVRFIFtkbD0lZCB2PSV6dV0iLCBkYXRhbGVuLCBzaXplb2YodmVyc2lvbikpOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKwl9CisKKwltZW1jcHkoJnZlcnNpb24sIGRhdGEsIHNpemVvZih2ZXJzaW9uKSk7CisJaWYgKHZlcnNpb24gIT0gbmV0ZnMtPnZlcnNpb24pIHsKKwkJX2xlYXZlKCIgPSBPQlNPTEVURSBbdmVyPSV4IG5ldD0leF0iLCB2ZXJzaW9uLCBuZXRmcy0+dmVyc2lvbik7CisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOworCX0KKworCV9sZWF2ZSgiID0gT0tBWSIpOworCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09LQVk7Cit9CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL2hpc3RvZ3JhbS5jIGIvZnMvZnNjYWNoZS9oaXN0b2dyYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWQ0OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9oaXN0b2dyYW0uYwpAQCAtMCwwICsxLDEwOSBAQAorLyogRlMtQ2FjaGUgbGF0ZW5jeSBoaXN0b2dyYW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIFRIUkVBRAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK2F0b21pY190IGZzY2FjaGVfb2JqX2luc3RhbnRpYXRlX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBmc2NhY2hlX29ianNfaGlzdG9ncmFtW0haXTsKK2F0b21pY190IGZzY2FjaGVfb3BzX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBmc2NhY2hlX3JldHJpZXZhbF9kZWxheV9oaXN0b2dyYW1bSFpdOworYXRvbWljX3QgZnNjYWNoZV9yZXRyaWV2YWxfaGlzdG9ncmFtW0haXTsKKworLyoKKyAqIGRpc3BsYXkgdGhlIHRpbWUtdGFrZW4gaGlzdG9ncmFtCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9oaXN0b2dyYW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKwl1bnNpZ25lZCBuWzVdLCB0OworCisJc3dpdGNoICgodW5zaWduZWQgbG9uZykgdikgeworCWNhc2UgMToKKwkJc2VxX3B1dHMobSwgIkpJRlMgIFNFQ1MgIE9CSiBJTlNUICBPUCBSVU5TICAgT0JKIFJVTlMgIgorCQkJICIgUkVUUlYgRExZIFJFVFJJRVZMU1xuIik7CisJCXJldHVybiAwOworCWNhc2UgMjoKKwkJc2VxX3B1dHMobSwgIj09PT09ID09PT09ID09PT09PT09PSA9PT09PT09PT0gPT09PT09PT09IgorCQkJICIgPT09PT09PT09ID09PT09PT09PVxuIik7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCWluZGV4ID0gKHVuc2lnbmVkIGxvbmcpIHYgLSAzOworCQluWzBdID0gYXRvbWljX3JlYWQoJmZzY2FjaGVfb2JqX2luc3RhbnRpYXRlX2hpc3RvZ3JhbVtpbmRleF0pOworCQluWzFdID0gYXRvbWljX3JlYWQoJmZzY2FjaGVfb3BzX2hpc3RvZ3JhbVtpbmRleF0pOworCQluWzJdID0gYXRvbWljX3JlYWQoJmZzY2FjaGVfb2Jqc19oaXN0b2dyYW1baW5kZXhdKTsKKwkJblszXSA9IGF0b21pY19yZWFkKCZmc2NhY2hlX3JldHJpZXZhbF9kZWxheV9oaXN0b2dyYW1baW5kZXhdKTsKKwkJbls0XSA9IGF0b21pY19yZWFkKCZmc2NhY2hlX3JldHJpZXZhbF9oaXN0b2dyYW1baW5kZXhdKTsKKwkJaWYgKCEoblswXSB8IG5bMV0gfCBuWzJdIHwgblszXSB8IG5bNF0pKQorCQkJcmV0dXJuIDA7CisKKwkJdCA9IChpbmRleCAqIDEwMDApIC8gSFo7CisKKwkJc2VxX3ByaW50ZihtLCAiJTRsdSAgMC4lMDN1ICU5dSAlOXUgJTl1ICU5dSAlOXVcbiIsCisJCQkgICBpbmRleCwgdCwgblswXSwgblsxXSwgblsyXSwgblszXSwgbls0XSk7CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIHNldCB1cCB0aGUgaXRlcmF0b3IgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBmaXJzdCBsaW5lCisgKi8KK3N0YXRpYyB2b2lkICpmc2NhY2hlX2hpc3RvZ3JhbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqX3BvcykKK3sKKwlpZiAoKHVuc2lnbmVkIGxvbmcgbG9uZykqX3BvcyA+PSBIWiArIDIpCisJCXJldHVybiBOVUxMOworCWlmICgqX3BvcyA9PSAwKQorCQkqX3BvcyA9IDE7CisJcmV0dXJuICh2b2lkICopKHVuc2lnbmVkIGxvbmcpICpfcG9zOworfQorCisvKgorICogbW92ZSB0byB0aGUgbmV4dCBsaW5lCisgKi8KK3N0YXRpYyB2b2lkICpmc2NhY2hlX2hpc3RvZ3JhbV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKCpwb3MpKys7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpKnBvcyA+IEhaICsgMiA/CisJCU5VTEwgOiAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSAqcG9zOworfQorCisvKgorICogY2xlYW4gdXAgYWZ0ZXIgcmVhZGluZworICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX2hpc3RvZ3JhbV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmc2NhY2hlX2hpc3RvZ3JhbV9vcHMgPSB7CisJLnN0YXJ0CQk9IGZzY2FjaGVfaGlzdG9ncmFtX3N0YXJ0LAorCS5zdG9wCQk9IGZzY2FjaGVfaGlzdG9ncmFtX3N0b3AsCisJLm5leHQJCT0gZnNjYWNoZV9oaXN0b2dyYW1fbmV4dCwKKwkuc2hvdwkJPSBmc2NhY2hlX2hpc3RvZ3JhbV9zaG93LAorfTsKKworLyoKKyAqIG9wZW4gIi9wcm9jL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtIiB0byBwcm92aWRlIGxhdGVuY3kgZGF0YQorICovCitzdGF0aWMgaW50IGZzY2FjaGVfaGlzdG9ncmFtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZmc2NhY2hlX2hpc3RvZ3JhbV9vcHMpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZzY2FjaGVfaGlzdG9ncmFtX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGZzY2FjaGVfaGlzdG9ncmFtX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL2ludGVybmFsLmggYi9mcy9mc2NhY2hlL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjYmQxNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvaW50ZXJuYWwuaApAQCAtMCwwICsxLDM4MCBAQAorLyogSW50ZXJuYWwgZGVmaW5pdGlvbnMgZm9yIEZTLUNhY2hlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLyoKKyAqIExvY2sgb3JkZXIsIGluIHRoZSBvcmRlciBpbiB3aGljaCBtdWx0aXBsZSBsb2NrcyBzaG91bGQgYmUgb2J0YWluZWQ6CisgKiAtIGZzY2FjaGVfYWRkcmVtb3ZlX3NlbQorICogLSBjb29raWUtPmxvY2sKKyAqIC0gY29va2llLT5wYXJlbnQtPmxvY2sKKyAqIC0gY2FjaGUtPm9iamVjdF9saXN0X2xvY2sKKyAqIC0gb2JqZWN0LT5sb2NrCisgKiAtIG9iamVjdC0+cGFyZW50LT5sb2NrCisgKiAtIGZzY2FjaGVfdGhyZWFkX2xvY2sKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzY2FjaGUtY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIEZTQ0FDSEVfTUlOX1RIUkVBRFMJNAorI2RlZmluZSBGU0NBQ0hFX01BWF9USFJFQURTCTMyCisKKy8qCisgKiBmc2MtY2FjaGUuYworICovCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBmc2NhY2hlX2NhY2hlX2xpc3Q7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBmc2NhY2hlX2FkZHJlbW92ZV9zZW07CisKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqZnNjYWNoZV9zZWxlY3RfY2FjaGVfZm9yX29iamVjdCgKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKik7CisKKy8qCisgKiBmc2MtY29va2llLmMKKyAqLworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpmc2NhY2hlX2Nvb2tpZV9qYXI7CisKK2V4dGVybiB2b2lkIGZzY2FjaGVfY29va2llX2luaXRfb25jZSh2b2lkICopOworZXh0ZXJuIHZvaWQgX19mc2NhY2hlX2Nvb2tpZV9wdXQoc3RydWN0IGZzY2FjaGVfY29va2llICopOworCisvKgorICogZnNjLWZzZGVmLmMKKyAqLworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSBmc2NhY2hlX2ZzZGVmX2luZGV4OworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgZnNjYWNoZV9mc2RlZl9uZXRmc19kZWY7CisKKy8qCisgKiBmc2MtaGlzdG9ncmFtLmMKKyAqLworI2lmZGVmIENPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTQorZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfb2JqX2luc3RhbnRpYXRlX2hpc3RvZ3JhbVtIWl07CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9vYmpzX2hpc3RvZ3JhbVtIWl07CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9vcHNfaGlzdG9ncmFtW0haXTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX3JldHJpZXZhbF9kZWxheV9oaXN0b2dyYW1bSFpdOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfcmV0cmlldmFsX2hpc3RvZ3JhbVtIWl07CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX2hpc3QoYXRvbWljX3QgaGlzdG9ncmFtW10sIHVuc2lnbmVkIGxvbmcgc3RhcnRfamlmKQoreworCXVuc2lnbmVkIGxvbmcgamlmID0gamlmZmllcyAtIHN0YXJ0X2ppZjsKKwlpZiAoamlmID49IEhaKQorCQlqaWYgPSBIWiAtIDE7CisJYXRvbWljX2luYygmaGlzdG9ncmFtW2ppZl0pOworfQorCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmc2NhY2hlX2hpc3RvZ3JhbV9mb3BzOworCisjZWxzZQorI2RlZmluZSBmc2NhY2hlX2hpc3QoaGlzdCwgc3RhcnRfamlmKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogZnNjLW1haW4uYworICovCitleHRlcm4gdW5zaWduZWQgZnNjYWNoZV9kZWZlcl9sb29rdXA7CitleHRlcm4gdW5zaWduZWQgZnNjYWNoZV9kZWZlcl9jcmVhdGU7CitleHRlcm4gdW5zaWduZWQgZnNjYWNoZV9kZWJ1ZzsKK2V4dGVybiBzdHJ1Y3Qga29iamVjdCAqZnNjYWNoZV9yb290OworCitleHRlcm4gaW50IGZzY2FjaGVfd2FpdF9iaXQodm9pZCAqKTsKK2V4dGVybiBpbnQgZnNjYWNoZV93YWl0X2JpdF9pbnRlcnJ1cHRpYmxlKHZvaWQgKik7CisKKy8qCisgKiBmc2Mtb2JqZWN0LmMKKyAqLworZXh0ZXJuIHZvaWQgZnNjYWNoZV93aXRoZHJhd2luZ19vYmplY3Qoc3RydWN0IGZzY2FjaGVfY2FjaGUgKiwKKwkJCQkgICAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworZXh0ZXJuIHZvaWQgZnNjYWNoZV9lbnF1ZXVlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CisKKy8qCisgKiBmc2Mtb3BlcmF0aW9uLmMKKyAqLworZXh0ZXJuIGludCBmc2NhY2hlX3N1Ym1pdF9leGNsdXNpdmVfb3Aoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICosCisJCQkJICAgICAgIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqKTsKK2V4dGVybiBpbnQgZnNjYWNoZV9zdWJtaXRfb3Aoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICosCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqKTsKK2V4dGVybiB2b2lkIGZzY2FjaGVfYWJvcnRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK2V4dGVybiB2b2lkIGZzY2FjaGVfc3RhcnRfb3BlcmF0aW9ucyhzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitleHRlcm4gdm9pZCBmc2NhY2hlX29wZXJhdGlvbl9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CisKKy8qCisgKiBmc2MtcHJvYy5jCisgKi8KKyNpZmRlZiBDT05GSUdfUFJPQ19GUworZXh0ZXJuIGludCBfX2luaXQgZnNjYWNoZV9wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBmc2NhY2hlX3Byb2NfY2xlYW51cCh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIGZzY2FjaGVfcHJvY19pbml0KCkJKDApCisjZGVmaW5lIGZzY2FjaGVfcHJvY19jbGVhbnVwKCkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIGZzYy1zdGF0cy5jCisgKi8KKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9TVEFUUworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcHNfcHJvY2Vzc2VkW0ZTQ0FDSEVfTUFYX1RIUkVBRFNdOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmpzX3Byb2Nlc3NlZFtGU0NBQ0hFX01BWF9USFJFQURTXTsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9wZW5kOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9ydW47CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29wX2VucXVldWU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29wX2RlZmVycmVkX3JlbGVhc2U7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29wX3JlbGVhc2U7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29wX2djOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2F0dHJfY2hhbmdlZDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX29rOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9idWZzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9tZW07CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9jYWxsczsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY3M7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19vazsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzX3dhaXQ7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19ub2J1ZnM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jX29wczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2Nfb3Bfd2FpdHM7CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19vazsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc193YWl0OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX25vZGF0YTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfaW50cjsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsX29wczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fc3RvcmVzX29rOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfYWdhaW47CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19ub2J1ZnM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19vb207CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX29wczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfY2FsbHM7CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fbWFya3M7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3VuY2FjaGVzOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlc19udWxsOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlc19ub19jYWNoZTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfb2s7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX25vYnVmczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfb29tOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3VwZGF0ZXM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3VwZGF0ZXNfbnVsbDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fdXBkYXRlc19ydW47CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmVsaW5xdWlzaGVzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfbnVsbDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmVsaW5xdWlzaGVzX3dhaXRjcnQ7CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29va2llX2luZGV4OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jb29raWVfZGF0YTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29va2llX3NwZWNpYWw7CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2FsbG9jOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3Rfbm9fYWxsb2M7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9sb29rdXBzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfbG9va3Vwc19uZWdhdGl2ZTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfcG9zaXRpdmU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9jcmVhdGVkOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfYXZhaWw7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9kZWFkOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X25vbmU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X29rYXk7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X3VwZGF0ZTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY2hlY2thdXhfb2Jzb2xldGU7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX3N0YXQoYXRvbWljX3QgKnN0YXQpCit7CisJYXRvbWljX2luYyhzdGF0KTsKK30KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnNjYWNoZV9zdGF0c19mb3BzOworI2Vsc2UKKworI2RlZmluZSBmc2NhY2hlX3N0YXQoc3RhdCkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIHJhaXNlIGFuIGV2ZW50IG9uIGFuIG9iamVjdAorICogLSBpZiB0aGUgZXZlbnQgaXMgbm90IG1hc2tlZCBmb3IgdGhhdCBvYmplY3QsIHRoZW4gdGhlIG9iamVjdCBpcworICogICBxdWV1ZWQgZm9yIGF0dGVudGlvbiBieSB0aGUgdGhyZWFkIHBvb2wuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX3JhaXNlX2V2ZW50KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCSAgICAgICB1bnNpZ25lZCBldmVudCkKK3sKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoZXZlbnQsICZvYmplY3QtPmV2ZW50cykgJiYKKwkgICAgdGVzdF9iaXQoZXZlbnQsICZvYmplY3QtPmV2ZW50X21hc2spKQorCQlmc2NhY2hlX2VucXVldWVfb2JqZWN0KG9iamVjdCk7Cit9CisKKy8qCisgKiBkcm9wIGEgcmVmZXJlbmNlIHRvIGEgY29va2llCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX2Nvb2tpZV9wdXQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJQlVHX09OKGF0b21pY19yZWFkKCZjb29raWUtPnVzYWdlKSA8PSAwKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY29va2llLT51c2FnZSkpCisJCV9fZnNjYWNoZV9jb29raWVfcHV0KGNvb2tpZSk7Cit9CisKKy8qCisgKiBnZXQgYW4gZXh0cmEgcmVmZXJlbmNlIHRvIGEgbmV0ZnMgcmV0cmlldmFsIGNvbnRleHQKKyAqLworc3RhdGljIGlubGluZQordm9pZCAqZnNjYWNoZV9nZXRfY29udGV4dChzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgdm9pZCAqY29udGV4dCkKK3sKKwlpZiAoY29va2llLT5kZWYtPmdldF9jb250ZXh0KQorCQljb29raWUtPmRlZi0+Z2V0X2NvbnRleHQoY29va2llLT5uZXRmc19kYXRhLCBjb250ZXh0KTsKKwlyZXR1cm4gY29udGV4dDsKK30KKworLyoKKyAqIHJlbGVhc2UgYSByZWZlcmVuY2UgdG8gYSBuZXRmcyByZXRyaWV2YWwgY29udGV4dAorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfcHV0X2NvbnRleHQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIHZvaWQgKmNvbnRleHQpCit7CisJaWYgKGNvb2tpZS0+ZGVmLT5wdXRfY29udGV4dCkKKwkJY29va2llLT5kZWYtPnB1dF9jb250ZXh0KGNvb2tpZS0+bmV0ZnNfZGF0YSwgY29udGV4dCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBkZWJ1ZyB0cmFjaW5nCisgKi8KKyNkZWZpbmUgZGJncHJpbnRrKEZNVCwgLi4uKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgIlslLTYuNnNdICJGTVQiXG4iLCBjdXJyZW50LT5jb21tLCAjI19fVkFfQVJHU19fKQorCisvKiBtYWtlIHN1cmUgd2UgbWFpbnRhaW4gdGhlIGZvcm1hdCBzdHJpbmdzLCBldmVuIHdoZW4gZGVidWdnaW5nIGlzIGRpc2FibGVkICovCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSkKK3ZvaWQgX2RicHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQorCisjZGVmaW5lIGtlbnRlcihGTVQsIC4uLikgZGJncHJpbnRrKCI9PT4gJXMoIkZNVCIpIiwgX19mdW5jX18sICMjX19WQV9BUkdTX18pCisjZGVmaW5lIGtsZWF2ZShGTVQsIC4uLikgZGJncHJpbnRrKCI8PT0gJXMoKSJGTVQiIiwgX19mdW5jX18sICMjX19WQV9BUkdTX18pCisjZGVmaW5lIGtkZWJ1ZyhGTVQsIC4uLikgZGJncHJpbnRrKEZNVCwgIyNfX1ZBX0FSR1NfXykKKworI2RlZmluZSBram91cm5hbChGTVQsIC4uLikgX2RicHJpbnRrKEZNVCwgIyNfX1ZBX0FSR1NfXykKKworI2lmZGVmIF9fS0RFQlVHCisjZGVmaW5lIF9lbnRlcihGTVQsIC4uLikga2VudGVyKEZNVCwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2xlYXZlKEZNVCwgLi4uKSBrbGVhdmUoRk1ULCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBfZGVidWcoRk1ULCAuLi4pIGtkZWJ1ZyhGTVQsICMjX19WQV9BUkdTX18pCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0ZTQ0FDSEVfREVCVUcpCisjZGVmaW5lIF9lbnRlcihGTVQsIC4uLikJCQlcCitkbyB7CQkJCQkJXAorCWlmIChfX2RvX2tkZWJ1ZyhFTlRFUikpCQkJXAorCQlrZW50ZXIoRk1ULCAjI19fVkFfQVJHU19fKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfbGVhdmUoRk1ULCAuLi4pCQkJXAorZG8gewkJCQkJCVwKKwlpZiAoX19kb19rZGVidWcoTEVBVkUpKQkJCVwKKwkJa2xlYXZlKEZNVCwgIyNfX1ZBX0FSR1NfXyk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKQkJCVwKK2RvIHsJCQkJCQlcCisJaWYgKF9fZG9fa2RlYnVnKERFQlVHKSkJCQlcCisJCWtkZWJ1ZyhGTVQsICMjX19WQV9BUkdTX18pOwlcCit9IHdoaWxlICgwKQorCisjZWxzZQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pIF9kYnByaW50aygiPT0+ICVzKCJGTVQiKSIsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBfbGVhdmUoRk1ULCAuLi4pIF9kYnByaW50aygiPD09ICVzKCkiRk1UIiIsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBfZGVidWcoRk1ULCAuLi4pIF9kYnByaW50ayhGTVQsICMjX19WQV9BUkdTX18pCisjZW5kaWYKKworLyoKKyAqIGRldGVybWluZSB3aGV0aGVyIGEgcGFydGljdWxhciBvcHRpb25hbCBkZWJ1Z2dpbmcgcG9pbnQgc2hvdWxkIGJlIGxvZ2dlZAorICogLSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhyZWUgc3RlcHMgdG8gcGVyc3VhZGUgY3BwIHRvIGNvcnJlY3RseSBqb2luIHRoZQorICogICBzaG9ydGhhbmQgaW4gRlNDQUNIRV9ERUJVR19MRVZFTCB3aXRoIGl0cyBwcmVmaXgKKyAqLworI2RlZmluZSBfX19fZG9fa2RlYnVnKExFVkVMLCBQT0lOVCkgXAorCXVubGlrZWx5KChmc2NhY2hlX2RlYnVnICYgXAorCQkgIChGU0NBQ0hFX1BPSU5UXyMjUE9JTlQgPDwgKEZTQ0FDSEVfREVCVUdfICMjIExFVkVMICogMykpKSkKKyNkZWZpbmUgX19fZG9fa2RlYnVnKExFVkVMLCBQT0lOVCkgXAorCV9fX19kb19rZGVidWcoTEVWRUwsIFBPSU5UKQorI2RlZmluZSBfX2RvX2tkZWJ1ZyhQT0lOVCkgXAorCV9fX2RvX2tkZWJ1ZyhGU0NBQ0hFX0RFQlVHX0xFVkVMLCBQT0lOVCkKKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0NBQ0hFCTAKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19DT09LSUUJMQorI2RlZmluZSBGU0NBQ0hFX0RFQlVHX1BBR0UJMgorI2RlZmluZSBGU0NBQ0hFX0RFQlVHX09QRVJBVElPTgkzCisKKyNkZWZpbmUgRlNDQUNIRV9QT0lOVF9FTlRFUgkxCisjZGVmaW5lIEZTQ0FDSEVfUE9JTlRfTEVBVkUJMgorI2RlZmluZSBGU0NBQ0hFX1BPSU5UX0RFQlVHCTQKKworI2lmbmRlZiBGU0NBQ0hFX0RFQlVHX0xFVkVMCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ0FDSEUKKyNlbmRpZgorCisvKgorICogYXNzZXJ0aW9ucworICovCisjaWYgMSAvKiBkZWZpbmVkKF9fS0RFQlVHQUxMKSAqLworCisjZGVmaW5lIEFTU0VSVChYKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSghKFgpKSkgewkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBBc3NlcnRpb24gZmFpbGVkXG4iKTsJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQVNTRVJUQ01QKFgsIE9QLCBZKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KCEoKFgpIE9QIChZKSkpKSB7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJcHJpbnRrKEtFUk5fRVJSICIlbHggIiAjT1AgIiAlbHggaXMgZmFsc2VcbiIsCQlcCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoWCksICh1bnNpZ25lZCBsb25nKShZKSk7CQlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRJRihDLCBYKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSgoQykgJiYgIShYKSkpIHsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBBc3NlcnRpb24gZmFpbGVkXG4iKTsJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQVNTRVJUSUZDTVAoQywgWCwgT1AsIFkpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSgoQykgJiYgISgoWCkgT1AgKFkpKSkpIHsJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IEFzc2VydGlvbiBmYWlsZWRcbiIpOwlcCisJCXByaW50ayhLRVJOX0VSUiAiJWx4ICIgI09QICIgJWx4IGlzIGZhbHNlXG4iLAkJXAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKFgpLCAodW5zaWduZWQgbG9uZykoWSkpOwkJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNlbHNlCisKKyNkZWZpbmUgQVNTRVJUKFgpCQkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIEFTU0VSVENNUChYLCBPUCwgWSkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBBU1NFUlRJRihDLCBYKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBBU1NFUlRJRkNNUChDLCBYLCBPUCwgWSkJZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBhc3NlcnQgb3Igbm90ICovCmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL21haW4uYyBiL2ZzL2ZzY2FjaGUvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTQxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL21haW4uYwpAQCAtMCwwICsxLDEyNCBAQAorLyogR2VuZXJhbCBmaWxlc3lzdGVtIGxvY2FsIGNhY2hpbmcgbWFuYWdlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBDQUNIRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJGUyBDYWNoZSBNYW5hZ2VyIik7CitNT0RVTEVfQVVUSE9SKCJSZWQgSGF0LCBJbmMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3Vuc2lnbmVkIGZzY2FjaGVfZGVmZXJfbG9va3VwID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWZlcl9sb29rdXAsIGZzY2FjaGVfZGVmZXJfbG9va3VwLCB1aW50LAorCQkgICBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGZzY2FjaGVfZGVmZXJfbG9va3VwLAorCQkgIkRlZmVyIGNvb2tpZSBsb29rdXAgdG8gYmFja2dyb3VuZCB0aHJlYWQiKTsKKwordW5zaWduZWQgZnNjYWNoZV9kZWZlcl9jcmVhdGUgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKGRlZmVyX2NyZWF0ZSwgZnNjYWNoZV9kZWZlcl9jcmVhdGUsIHVpbnQsCisJCSAgIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZnNjYWNoZV9kZWZlcl9jcmVhdGUsCisJCSAiRGVmZXIgY29va2llIGNyZWF0aW9uIHRvIGJhY2tncm91bmQgdGhyZWFkIik7CisKK3Vuc2lnbmVkIGZzY2FjaGVfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGZzY2FjaGVfZGVidWcsIHVpbnQsCisJCSAgIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZnNjYWNoZV9kZWJ1ZywKKwkJICJGUy1DYWNoZSBkZWJ1Z2dpbmcgbWFzayIpOworCitzdHJ1Y3Qga29iamVjdCAqZnNjYWNoZV9yb290OworCisvKgorICogaW5pdGlhbGlzZSB0aGUgZnMgY2FjaGluZyBtb2R1bGUKKyAqLworc3RhdGljIGludCBfX2luaXQgZnNjYWNoZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3Jfc2xvd193b3JrOworCisJcmV0ID0gZnNjYWNoZV9wcm9jX2luaXQoKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9wcm9jOworCisJZnNjYWNoZV9jb29raWVfamFyID0ga21lbV9jYWNoZV9jcmVhdGUoImZzY2FjaGVfY29va2llX2phciIsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGZzY2FjaGVfY29va2llKSwKKwkJCQkJICAgICAgIDAsCisJCQkJCSAgICAgICAwLAorCQkJCQkgICAgICAgZnNjYWNoZV9jb29raWVfaW5pdF9vbmNlKTsKKwlpZiAoIWZzY2FjaGVfY29va2llX2phcikgeworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJICAgICAgICJGUy1DYWNoZTogRmFpbGVkIHRvIGFsbG9jYXRlIGEgY29va2llIGphclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfY29va2llX2phcjsKKwl9CisKKwlmc2NhY2hlX3Jvb3QgPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJmc2NhY2hlIiwga2VybmVsX2tvYmopOworCWlmICghZnNjYWNoZV9yb290KQorCQlnb3RvIGVycm9yX2tvYmo7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkZTLUNhY2hlOiBMb2FkZWRcbiIpOworCXJldHVybiAwOworCitlcnJvcl9rb2JqOgorCWttZW1fY2FjaGVfZGVzdHJveShmc2NhY2hlX2Nvb2tpZV9qYXIpOworZXJyb3JfY29va2llX2phcjoKKwlmc2NhY2hlX3Byb2NfY2xlYW51cCgpOworZXJyb3JfcHJvYzoKKwlzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKCk7CitlcnJvcl9zbG93X3dvcms6CisJcmV0dXJuIHJldDsKK30KKworZnNfaW5pdGNhbGwoZnNjYWNoZV9pbml0KTsKKworLyoKKyAqIGNsZWFuIHVwIG9uIG1vZHVsZSByZW1vdmFsCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBmc2NhY2hlX2V4aXQodm9pZCkKK3sKKwlfZW50ZXIoIiIpOworCisJa29iamVjdF9wdXQoZnNjYWNoZV9yb290KTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZnNjYWNoZV9jb29raWVfamFyKTsKKwlmc2NhY2hlX3Byb2NfY2xlYW51cCgpOworCXNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIoKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkZTLUNhY2hlOiBVbmxvYWRlZFxuIik7Cit9CisKK21vZHVsZV9leGl0KGZzY2FjaGVfZXhpdCk7CisKKy8qCisgKiB3YWl0X29uX2JpdCgpIHNsZWVwIGZ1bmN0aW9uIGZvciB1bmludGVycnVwdGlibGUgd2FpdGluZworICovCitpbnQgZnNjYWNoZV93YWl0X2JpdCh2b2lkICpmbGFncykKK3sKKwlzY2hlZHVsZSgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX3dhaXRfYml0KTsKKworLyoKKyAqIHdhaXRfb25fYml0KCkgc2xlZXAgZnVuY3Rpb24gZm9yIGludGVycnVwdGlibGUgd2FpdGluZworICovCitpbnQgZnNjYWNoZV93YWl0X2JpdF9pbnRlcnJ1cHRpYmxlKHZvaWQgKmZsYWdzKQoreworCXNjaGVkdWxlKCk7CisJcmV0dXJuIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX3dhaXRfYml0X2ludGVycnVwdGlibGUpOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9uZXRmcy5jIGIvZnMvZnNjYWNoZS9uZXRmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjhiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL25ldGZzLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qIEZTLUNhY2hlIG5ldGZzIChjbGllbnQpIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ09PS0lFCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQoZnNjYWNoZV9uZXRmc19saXN0KTsKKworLyoKKyAqIHJlZ2lzdGVyIGEgbmV0d29yayBmaWxlc3lzdGVtIGZvciBjYWNoaW5nCisgKi8KK2ludCBfX2ZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzKQoreworCXN0cnVjdCBmc2NhY2hlX25ldGZzICpwdHI7CisJaW50IHJldDsKKworCV9lbnRlcigieyVzfSIsIG5ldGZzLT5uYW1lKTsKKworCUlOSVRfTElTVF9IRUFEKCZuZXRmcy0+bGluayk7CisKKwkvKiBhbGxvY2F0ZSBhIGNvb2tpZSBmb3IgdGhlIHByaW1hcnkgaW5kZXggKi8KKwluZXRmcy0+cHJpbWFyeV9pbmRleCA9CisJCWttZW1fY2FjaGVfemFsbG9jKGZzY2FjaGVfY29va2llX2phciwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW5ldGZzLT5wcmltYXJ5X2luZGV4KSB7CisJCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBpbml0aWFsaXNlIHRoZSBwcmltYXJ5IGluZGV4IGNvb2tpZSAqLworCWF0b21pY19zZXQoJm5ldGZzLT5wcmltYXJ5X2luZGV4LT51c2FnZSwgMSk7CisJYXRvbWljX3NldCgmbmV0ZnMtPnByaW1hcnlfaW5kZXgtPm5fY2hpbGRyZW4sIDApOworCisJbmV0ZnMtPnByaW1hcnlfaW5kZXgtPmRlZgkJPSAmZnNjYWNoZV9mc2RlZl9uZXRmc19kZWY7CisJbmV0ZnMtPnByaW1hcnlfaW5kZXgtPnBhcmVudAkJPSAmZnNjYWNoZV9mc2RlZl9pbmRleDsKKwluZXRmcy0+cHJpbWFyeV9pbmRleC0+bmV0ZnNfZGF0YQk9IG5ldGZzOworCisJYXRvbWljX2luYygmbmV0ZnMtPnByaW1hcnlfaW5kZXgtPnBhcmVudC0+dXNhZ2UpOworCWF0b21pY19pbmMoJm5ldGZzLT5wcmltYXJ5X2luZGV4LT5wYXJlbnQtPm5fY2hpbGRyZW4pOworCisJc3Bpbl9sb2NrX2luaXQoJm5ldGZzLT5wcmltYXJ5X2luZGV4LT5sb2NrKTsKKwlJTklUX0hMSVNUX0hFQUQoJm5ldGZzLT5wcmltYXJ5X2luZGV4LT5iYWNraW5nX29iamVjdHMpOworCisJLyogY2hlY2sgdGhlIG5ldGZzIHR5cGUgaXMgbm90IGFscmVhZHkgcHJlc2VudCAqLworCWRvd25fd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwlyZXQgPSAtRUVYSVNUOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZnNjYWNoZV9uZXRmc19saXN0LCBsaW5rKSB7CisJCWlmIChzdHJjbXAocHRyLT5uYW1lLCBuZXRmcy0+bmFtZSkgPT0gMCkKKwkJCWdvdG8gYWxyZWFkeV9yZWdpc3RlcmVkOworCX0KKworCWxpc3RfYWRkKCZuZXRmcy0+bGluaywgJmZzY2FjaGVfbmV0ZnNfbGlzdCk7CisJcmV0ID0gMDsKKworCXByaW50ayhLRVJOX05PVElDRSAiRlMtQ2FjaGU6IE5ldGZzICclcycgcmVnaXN0ZXJlZCBmb3IgY2FjaGluZ1xuIiwKKwkgICAgICAgbmV0ZnMtPm5hbWUpOworCithbHJlYWR5X3JlZ2lzdGVyZWQ6CisJdXBfd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwlpZiAocmV0IDwgMCkgeworCQluZXRmcy0+cHJpbWFyeV9pbmRleC0+cGFyZW50ID0gTlVMTDsKKwkJX19mc2NhY2hlX2Nvb2tpZV9wdXQobmV0ZnMtPnByaW1hcnlfaW5kZXgpOworCQluZXRmcy0+cHJpbWFyeV9pbmRleCA9IE5VTEw7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX3JlZ2lzdGVyX25ldGZzKTsKKworLyoKKyAqIHVucmVnaXN0ZXIgYSBuZXR3b3JrIGZpbGVzeXN0ZW0gZnJvbSB0aGUgY2FjaGUKKyAqIC0gYWxsIGNvb2tpZXMgbXVzdCBoYXZlIGJlZW4gcmVsZWFzZWQgZmlyc3QKKyAqLwordm9pZCBfX2ZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcyhzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMpCit7CisJX2VudGVyKCJ7JXMuJXV9IiwgbmV0ZnMtPm5hbWUsIG5ldGZzLT52ZXJzaW9uKTsKKworCWRvd25fd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwlsaXN0X2RlbCgmbmV0ZnMtPmxpbmspOworCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUobmV0ZnMtPnByaW1hcnlfaW5kZXgsIDApOworCisJdXBfd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkZTLUNhY2hlOiBOZXRmcyAnJXMnIHVucmVnaXN0ZXJlZCBmcm9tIGNhY2hpbmdcbiIsCisJICAgICAgIG5ldGZzLT5uYW1lKTsKKworCV9sZWF2ZSgiIik7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKTsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvb2JqZWN0LmMgYi9mcy9mc2NhY2hlL29iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MmE0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL29iamVjdC5jCkBAIC0wLDAgKzEsODEwIEBACisvKiBGUy1DYWNoZSBvYmplY3Qgc3RhdGUgbWFjaGluZSBoYW5kbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb2JqZWN0LnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKKyAqIG9iamVjdCBzdGF0ZSBtYWNoaW5lIGFuZCB0aGUgaW4ta2VybmVsIHJlcHJlc2VudGF0aW9ucy4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ09PS0lFCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworY29uc3QgY2hhciAqZnNjYWNoZV9vYmplY3Rfc3RhdGVzW10gPSB7CisJW0ZTQ0FDSEVfT0JKRUNUX0lOSVRdCQk9ICJPQkpFQ1RfSU5JVCIsCisJW0ZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVBdCT0gIk9CSkVDVF9MT09LSU5HX1VQIiwKKwlbRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkddCT0gIk9CSkVDVF9DUkVBVElORyIsCisJW0ZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRV0JPSAiT0JKRUNUX0FWQUlMQUJMRSIsCisJW0ZTQ0FDSEVfT0JKRUNUX0FDVElWRV0JCT0gIk9CSkVDVF9BQ1RJVkUiLAorCVtGU0NBQ0hFX09CSkVDVF9VUERBVElOR10JPSAiT0JKRUNUX1VQREFUSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfRFlJTkddCQk9ICJPQkpFQ1RfRFlJTkciLAorCVtGU0NBQ0hFX09CSkVDVF9MQ19EWUlOR10JPSAiT0JKRUNUX0xDX0RZSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfQUJPUlRfSU5JVF0JPSAiT0JKRUNUX0FCT1JUX0lOSVQiLAorCVtGU0NBQ0hFX09CSkVDVF9SRUxFQVNJTkddCT0gIk9CSkVDVF9SRUxFQVNJTkciLAorCVtGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkddCT0gIk9CSkVDVF9SRUNZQ0xJTkciLAorCVtGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lOR10JPSAiT0JKRUNUX1dJVEhEUkFXSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfREVBRF0JCT0gIk9CSkVDVF9ERUFEIiwKK307CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfb2JqZWN0X3N0YXRlcyk7CisKK3N0YXRpYyB2b2lkIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19wdXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKik7CitzdGF0aWMgaW50ICBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZ2V0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICopOworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2V4ZWN1dGUoc3RydWN0IHNsb3dfd29yayAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfaW5pdGlhbGlzZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworc3RhdGljIHZvaWQgZnNjYWNoZV9sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfb2JqZWN0X2F2YWlsYWJsZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX3JlbGVhc2Vfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfd2l0aGRyYXdfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfZW5xdWV1ZV9kZXBlbmRlbnRzKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfZGVxdWV1ZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworCitjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfb3BzID0geworCS5nZXRfcmVmCT0gZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2dldF9yZWYsCisJLnB1dF9yZWYJPSBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfcHV0X3JlZiwKKwkuZXhlY3V0ZQk9IGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19leGVjdXRlLAorfTsKK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX29wcyk7CisKKy8qCisgKiB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgcGFyZW50IHdoZW4gYW4gb3AgY29tcGxldGVzIHRoYXQgd2UgaGFkIG91dHN0YW5kaW5nCisgKiB1cG9uIGl0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX2RvbmVfcGFyZW50X29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqcGFyZW50ID0gb2JqZWN0LT5wYXJlbnQ7CisKKwlfZW50ZXIoIk9CSiV4IHtPQkoleCwleH0iLAorCSAgICAgICBvYmplY3QtPmRlYnVnX2lkLCBwYXJlbnQtPmRlYnVnX2lkLCBwYXJlbnQtPm5fb3BzKTsKKworCXNwaW5fbG9ja19uZXN0ZWQoJnBhcmVudC0+bG9jaywgMSk7CisJcGFyZW50LT5uX29wcy0tOworCXBhcmVudC0+bl9vYmpfb3BzLS07CisJaWYgKHBhcmVudC0+bl9vcHMgPT0gMCkKKwkJZnNjYWNoZV9yYWlzZV9ldmVudChwYXJlbnQsIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmxvY2spOworfQorCisvKgorICogcHJvY2VzcyBldmVudHMgdGhhdCBoYXZlIGJlZW4gc2VudCB0byBhbiBvYmplY3QncyBzdGF0ZSBtYWNoaW5lCisgKiAtIGluaXRpYXRlcyBwYXJlbnQgbG9va3VwCisgKiAtIGRvZXMgb2JqZWN0IGxvb2t1cAorICogLSBkb2VzIG9iamVjdCBjcmVhdGlvbgorICogLSBkb2VzIG9iamVjdCByZWN5Y2xpbmcgYW5kIHJldGlyZW1lbnQKKyAqIC0gZG9lcyBvYmplY3Qgd2l0aGRyYXdhbAorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zdGF0ZV9tYWNoaW5lKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCWVudW0gZnNjYWNoZV9vYmplY3Rfc3RhdGUgbmV3X3N0YXRlOworCisJQVNTRVJUKG9iamVjdCAhPSBOVUxMKTsKKworCV9lbnRlcigie09CSiV4LCVzLCVseH0iLAorCSAgICAgICBvYmplY3QtPmRlYnVnX2lkLCBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb2JqZWN0LT5zdGF0ZV0sCisJICAgICAgIG9iamVjdC0+ZXZlbnRzKTsKKworCXN3aXRjaCAob2JqZWN0LT5zdGF0ZSkgeworCQkvKiB3YWl0IGZvciB0aGUgcGFyZW50IG9iamVjdCB0byBiZWNvbWUgcmVhZHkgKi8KKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0lOSVQ6CisJCW9iamVjdC0+ZXZlbnRfbWFzayA9CisJCQlVTE9OR19NQVggJiB+KDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfQ0xFQVJFRCk7CisJCWZzY2FjaGVfaW5pdGlhbGlzZV9vYmplY3Qob2JqZWN0KTsKKwkJZ290byBkb25lOworCisJCS8qIGxvb2sgdXAgdGhlIG9iamVjdCBtZXRhZGF0YSBvbiBkaXNrICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQOgorCQlmc2NhY2hlX2xvb2t1cF9vYmplY3Qob2JqZWN0KTsKKwkJZ290byBsb29rdXBfdHJhbnNpdDsKKworCQkvKiBjcmVhdGUgdGhlIG9iamVjdCBtZXRhZGF0YSBvbiBkaXNrICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9DUkVBVElORzoKKwkJZnNjYWNoZV9sb29rdXBfb2JqZWN0KG9iamVjdCk7CisJCWdvdG8gbG9va3VwX3RyYW5zaXQ7CisKKwkJLyogaGFuZGxlIGFuIG9iamVjdCBiZWNvbWluZyBhdmFpbGFibGU7IHN0YXJ0IHBlbmRpbmcKKwkJICogb3BlcmF0aW9ucyBhbmQgcXVldWUgZGVwZW5kZW50IG9wZXJhdGlvbnMgZm9yIHByb2Nlc3NpbmcgKi8KKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRToKKwkJZnNjYWNoZV9vYmplY3RfYXZhaWxhYmxlKG9iamVjdCk7CisJCWdvdG8gYWN0aXZlX3RyYW5zaXQ7CisKKwkJLyogbm9ybWFsIHJ1bm5pbmcgc3RhdGUgKi8KKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0FDVElWRToKKwkJZ290byBhY3RpdmVfdHJhbnNpdDsKKworCQkvKiB1cGRhdGUgdGhlIG9iamVjdCBtZXRhZGF0YSBvbiBkaXNrICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9VUERBVElORzoKKwkJY2xlYXJfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1VQREFURSwgJm9iamVjdC0+ZXZlbnRzKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fdXBkYXRlc19ydW4pOworCQlvYmplY3QtPmNhY2hlLT5vcHMtPnVwZGF0ZV9vYmplY3Qob2JqZWN0KTsKKwkJZ290byBhY3RpdmVfdHJhbnNpdDsKKworCQkvKiBoYW5kbGUgYW4gb2JqZWN0IGR5aW5nIGR1cmluZyBsb29rdXAgb3IgY3JlYXRpb24gKi8KKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0xDX0RZSU5HOgorCQlvYmplY3QtPmV2ZW50X21hc2sgJj0gfigxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1VQREFURSk7CisJCW9iamVjdC0+Y2FjaGUtPm9wcy0+bG9va3VwX2NvbXBsZXRlKG9iamVjdCk7CisKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfRFlJTkc7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcsCisJCQkJICAgICAgICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKQorCQkJd2FrZV91cF9iaXQoJm9iamVjdC0+Y29va2llLT5mbGFncywKKwkJCQkgICAgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcpOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQlmc2NhY2hlX2RvbmVfcGFyZW50X29wKG9iamVjdCk7CisKKwkJLyogd2FpdCBmb3IgY29tcGxldGlvbiBvZiBhbGwgYWN0aXZlIG9wZXJhdGlvbnMgb24gdGhpcyBvYmplY3QKKwkJICogYW5kIHRoZSBkZWF0aCBvZiBhbGwgY2hpbGQgb2JqZWN0cyBvZiB0aGlzIG9iamVjdCAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRFlJTkc6CisJZHlpbmc6CisJCWNsZWFyX2JpdChGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVELCAmb2JqZWN0LT5ldmVudHMpOworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJCV9kZWJ1ZygiZHlpbmcgT0JKJXggeyVkLCVkfSIsCisJCSAgICAgICBvYmplY3QtPmRlYnVnX2lkLCBvYmplY3QtPm5fb3BzLCBvYmplY3QtPm5fY2hpbGRyZW4pOworCQlpZiAob2JqZWN0LT5uX29wcyA9PSAwICYmIG9iamVjdC0+bl9jaGlsZHJlbiA9PSAwKSB7CisJCQlvYmplY3QtPmV2ZW50X21hc2sgJj0KKwkJCQl+KDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfQ0xFQVJFRCk7CisJCQlvYmplY3QtPmV2ZW50X21hc2sgfD0KKwkJCQkoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykgfAorCQkJCSgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1JFVElSRSkgfAorCQkJCSgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1JFTEVBU0UpIHwKKwkJCQkoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUik7CisJCX0gZWxzZSB7CisJCQlvYmplY3QtPmV2ZW50X21hc2sgJj0KKwkJCQl+KCgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXKSB8CisJCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUpIHwKKwkJCQkgICgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1JFTEVBU0UpIHwKKwkJCQkgICgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SKSk7CisJCQlvYmplY3QtPmV2ZW50X21hc2sgfD0KKwkJCQkxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQ7CisJCX0KKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJCWZzY2FjaGVfZW5xdWV1ZV9kZXBlbmRlbnRzKG9iamVjdCk7CisJCWdvdG8gdGVybWluYWxfdHJhbnNpdDsKKworCQkvKiBoYW5kbGUgYW4gYWJvcnQgZHVyaW5nIGluaXRpYWxpc2F0aW9uICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9BQk9SVF9JTklUOgorCQlfZGVidWcoImhhbmRsZSBhYm9ydCBpbml0ICVseCIsIG9iamVjdC0+ZXZlbnRzKTsKKwkJb2JqZWN0LT5ldmVudF9tYXNrICY9IH4oMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUpOworCisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJZnNjYWNoZV9kZXF1ZXVlX29iamVjdChvYmplY3QpOworCisJCW9iamVjdC0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9EWUlORzsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9DUkVBVElORywKKwkJCQkgICAgICAgJm9iamVjdC0+Y29va2llLT5mbGFncykpCisJCQl3YWtlX3VwX2JpdCgmb2JqZWN0LT5jb29raWUtPmZsYWdzLAorCQkJCSAgICBGU0NBQ0hFX0NPT0tJRV9DUkVBVElORyk7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlnb3RvIGR5aW5nOworCisJCS8qIGhhbmRsZSB0aGUgbmV0ZnMgcmVsZWFzaW5nIGFuIG9iamVjdCBhbmQgcG9zc2libHkgbWFya2luZyBpdAorCQkgKiBvYnNvbGV0ZSB0b28gKi8KKwljYXNlIEZTQ0FDSEVfT0JKRUNUX1JFTEVBU0lORzoKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX1JFQ1lDTElORzoKKwkJb2JqZWN0LT5ldmVudF9tYXNrICY9CisJCQl+KCgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXKSB8CisJCQkgICgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1JFVElSRSkgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFKSB8CisJCQkgICgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SKSk7CisJCWZzY2FjaGVfcmVsZWFzZV9vYmplY3Qob2JqZWN0KTsKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfREVBRDsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9kZWFkKTsKKwkJZ290byB0ZXJtaW5hbF90cmFuc2l0OworCisJCS8qIGhhbmRsZSB0aGUgcGFyZW50IGNhY2hlIG9mIHRoaXMgb2JqZWN0IGJlaW5nIHdpdGhkcmF3biBmcm9tCisJCSAqIGFjdGl2ZSBzZXJ2aWNlICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lORzoKKwkJb2JqZWN0LT5ldmVudF9tYXNrICY9CisJCQl+KCgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXKSB8CisJCQkgICgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1JFVElSRSkgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFKSB8CisJCQkgICgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SKSk7CisJCWZzY2FjaGVfd2l0aGRyYXdfb2JqZWN0KG9iamVjdCk7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0RFQUQ7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vYmplY3RfZGVhZCk7CisJCWdvdG8gdGVybWluYWxfdHJhbnNpdDsKKworCQkvKiBjb21wbGFpbiBhYm91dCB0aGUgb2JqZWN0IGJlaW5nIHdva2VuIHVwIG9uY2UgaXQgaXMKKwkJICogZGVjZWFzZWQgKi8KKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0RFQUQ6CisJCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IgorCQkgICAgICAgIiBVbmV4cGVjdGVkIGV2ZW50IGluIGRlYWQgc3RhdGUgJWx4XG4iLAorCQkgICAgICAgb2JqZWN0LT5ldmVudHMgJiBvYmplY3QtPmV2ZW50X21hc2spOworCQlCVUcoKTsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IFVua25vd24gb2JqZWN0IHN0YXRlICV1XG4iLAorCQkgICAgICAgb2JqZWN0LT5zdGF0ZSk7CisJCUJVRygpOworCX0KKworCS8qIGRldGVybWluZSB0aGUgdHJhbnNpdGlvbiBmcm9tIGEgbG9va3VwIHN0YXRlICovCitsb29rdXBfdHJhbnNpdDoKKwlzd2l0Y2ggKGZscyhvYmplY3QtPmV2ZW50cyAmIG9iamVjdC0+ZXZlbnRfbWFzaykgLSAxKSB7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVzoKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX1JFVElSRToKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX1JFTEVBU0U6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUjoKKwkJbmV3X3N0YXRlID0gRlNDQUNIRV9PQkpFQ1RfTENfRFlJTkc7CisJCWdvdG8gY2hhbmdlX3N0YXRlOworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVRVUVVRToKKwkJZ290byBkb25lOworCWNhc2UgLTE6CisJCWdvdG8gZG9uZTsgLyogc2xlZXAgdW50aWwgZXZlbnQgKi8KKwlkZWZhdWx0OgorCQlnb3RvIHVuc3VwcG9ydGVkX2V2ZW50OworCX0KKworCS8qIGRldGVybWluZSB0aGUgdHJhbnNpdGlvbiBmcm9tIGFuIGFjdGl2ZSBzdGF0ZSAqLworYWN0aXZlX3RyYW5zaXQ6CisJc3dpdGNoIChmbHMob2JqZWN0LT5ldmVudHMgJiBvYmplY3QtPmV2ZW50X21hc2spIC0gMSkgeworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVc6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkU6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFOgorCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1I6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0RZSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX1VQREFURToKKwkJbmV3X3N0YXRlID0gRlNDQUNIRV9PQkpFQ1RfVVBEQVRJTkc7CisJCWdvdG8gY2hhbmdlX3N0YXRlOworCWNhc2UgLTE6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0FDVElWRTsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7IC8qIHNsZWVwIHVudGlsIGV2ZW50ICovCisJZGVmYXVsdDoKKwkJZ290byB1bnN1cHBvcnRlZF9ldmVudDsKKwl9CisKKwkvKiBkZXRlcm1pbmUgdGhlIHRyYW5zaXRpb24gZnJvbSBhIHRlcm1pbmFsIHN0YXRlICovCit0ZXJtaW5hbF90cmFuc2l0OgorCXN3aXRjaCAoZmxzKG9iamVjdC0+ZXZlbnRzICYgb2JqZWN0LT5ldmVudF9tYXNrKSAtIDEpIHsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lORzsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkU6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX1JFQ1lDTElORzsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9SRUxFQVNJTkc7CisJCWdvdG8gY2hhbmdlX3N0YXRlOworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1I6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX1dJVEhEUkFXSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQ6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0RZSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIC0xOgorCQlnb3RvIGRvbmU7IC8qIHNsZWVwIHVudGlsIGV2ZW50ICovCisJZGVmYXVsdDoKKwkJZ290byB1bnN1cHBvcnRlZF9ldmVudDsKKwl9CisKK2NoYW5nZV9zdGF0ZToKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJb2JqZWN0LT5zdGF0ZSA9IG5ld19zdGF0ZTsKKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworZG9uZToKKwlfbGVhdmUoIiBbLT4lc10iLCBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb2JqZWN0LT5zdGF0ZV0pOworCXJldHVybjsKKwordW5zdXBwb3J0ZWRfZXZlbnQ6CisJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZToiCisJICAgICAgICIgVW5zdXBwb3J0ZWQgZXZlbnQgJWx4IFttYXNrICVseF0gaW4gc3RhdGUgJXNcbiIsCisJICAgICAgIG9iamVjdC0+ZXZlbnRzLCBvYmplY3QtPmV2ZW50X21hc2ssCisJICAgICAgIGZzY2FjaGVfb2JqZWN0X3N0YXRlc1tvYmplY3QtPnN0YXRlXSk7CisJQlVHKCk7Cit9CisKKy8qCisgKiBleGVjdXRlIGFuIG9iamVjdAorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZXhlY3V0ZShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgd29yayk7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKworCV9lbnRlcigie09CSiV4fSIsIG9iamVjdC0+ZGVidWdfaWQpOworCisJY2xlYXJfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUsICZvYmplY3QtPmV2ZW50cyk7CisKKwlzdGFydCA9IGppZmZpZXM7CisJZnNjYWNoZV9vYmplY3Rfc3RhdGVfbWFjaGluZShvYmplY3QpOworCWZzY2FjaGVfaGlzdChmc2NhY2hlX29ianNfaGlzdG9ncmFtLCBzdGFydCk7CisJaWYgKG9iamVjdC0+ZXZlbnRzICYgb2JqZWN0LT5ldmVudF9tYXNrKQorCQlmc2NhY2hlX2VucXVldWVfb2JqZWN0KG9iamVjdCk7Cit9CisKKy8qCisgKiBpbml0aWFsaXNlIGFuIG9iamVjdAorICogLSBjaGVjayB0aGUgc3BlY2lmaWVkIG9iamVjdCdzIHBhcmVudCB0byBzZWUgaWYgd2UgY2FuIG1ha2UgdXNlIG9mIGl0CisgKiAgIGltbWVkaWF0ZWx5IHRvIGRvIGEgY3JlYXRpb24KKyAqIC0gd2UgbWF5IG5lZWQgdG8gc3RhcnQgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBwYXJlbnQgYW5kIHdlIG5lZWQgdG8gd2FpdAorICogICBmb3IgdGhlIHBhcmVudCdzIGxvb2t1cCBhbmQgY3JlYXRpb24gdG8gY29tcGxldGUgaWYgaXQncyBub3QgdGhlcmUgeWV0CisgKiAtIGFuIG9iamVjdCdzIGNvb2tpZSBpcyBwaW5uZWQgdW50aWwgd2UgY2xlYXIgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcgb24gdGhlCisgKiAgIGxlYWYtbW9zdCBjb29raWVzIG9mIHRoZSBvYmplY3QgYW5kIGFsbCBpdHMgY2hpbGRyZW4KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9pbml0aWFsaXNlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnBhcmVudDsKKworCV9lbnRlcigiIik7CisJQVNTRVJUKG9iamVjdC0+Y29va2llICE9IE5VTEwpOworCUFTU0VSVChvYmplY3QtPmNvb2tpZS0+cGFyZW50ICE9IE5VTEwpOworCUFTU0VSVChsaXN0X2VtcHR5KCZvYmplY3QtPndvcmsubGluaykpOworCisJaWYgKG9iamVjdC0+ZXZlbnRzICYgKCgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SKSB8CisJCQkgICAgICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFKSB8CisJCQkgICAgICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUpIHwKKwkJCSAgICAgICgxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXKSkpIHsKKwkJX2RlYnVnKCJhYm9ydCBpbml0ICVseCIsIG9iamVjdC0+ZXZlbnRzKTsKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfQUJPUlRfSU5JVDsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2soJm9iamVjdC0+Y29va2llLT5sb2NrKTsKKwlzcGluX2xvY2tfbmVzdGVkKCZvYmplY3QtPmNvb2tpZS0+cGFyZW50LT5sb2NrLCAxKTsKKworCXBhcmVudCA9IG9iamVjdC0+cGFyZW50OworCWlmICghcGFyZW50KSB7CisJCV9kZWJ1Zygibm8gcGFyZW50Iik7CisJCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcsICZvYmplY3QtPmV2ZW50cyk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlzcGluX2xvY2tfbmVzdGVkKCZwYXJlbnQtPmxvY2ssIDEpOworCQlfZGVidWcoInBhcmVudCAlcyIsIGZzY2FjaGVfb2JqZWN0X3N0YXRlc1twYXJlbnQtPnN0YXRlXSk7CisKKwkJaWYgKHBhcmVudC0+c3RhdGUgPj0gRlNDQUNIRV9PQkpFQ1RfRFlJTkcpIHsKKwkJCV9kZWJ1ZygiYmFkIHBhcmVudCIpOworCQkJc2V0X2JpdChGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVywgJm9iamVjdC0+ZXZlbnRzKTsKKwkJfSBlbHNlIGlmIChwYXJlbnQtPnN0YXRlIDwgRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFKSB7CisJCQlfZGVidWcoIndhaXQiKTsKKworCQkJLyogd2UgbWF5IGdldCB3b2tlbiB1cCBpbiB0aGlzIHN0YXRlIGJ5IGNoaWxkIG9iamVjdHMKKwkJCSAqIGJpbmRpbmcgb24gdG8gdXMsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0CisJCQkgKiBhZGQgb3Vyc2VsZiB0byB0aGUgbGlzdCBtdWx0aXBsZSB0aW1lcyAqLworCQkJaWYgKGxpc3RfZW1wdHkoJm9iamVjdC0+ZGVwX2xpbmspKSB7CisJCQkJb2JqZWN0LT5jYWNoZS0+b3BzLT5ncmFiX29iamVjdChvYmplY3QpOworCQkJCWxpc3RfYWRkKCZvYmplY3QtPmRlcF9saW5rLAorCQkJCQkgJnBhcmVudC0+ZGVwZW5kZW50cyk7CisKKwkJCQkvKiBmc2NhY2hlX2FjcXVpcmVfbm9uX2luZGV4X2Nvb2tpZSgpIHVzZXMgdGhpcworCQkJCSAqIHRvIHdha2UgdGhlIGNoYWluIHVwICovCisJCQkJaWYgKHBhcmVudC0+c3RhdGUgPT0gRlNDQUNIRV9PQkpFQ1RfSU5JVCkKKwkJCQkJZnNjYWNoZV9lbnF1ZXVlX29iamVjdChwYXJlbnQpOworCQkJfQorCQl9IGVsc2UgeworCQkJX2RlYnVnKCJnbyIpOworCQkJcGFyZW50LT5uX29wcysrOworCQkJcGFyZW50LT5uX29ial9vcHMrKzsKKwkJCW9iamVjdC0+bG9va3VwX2ppZiA9IGppZmZpZXM7CisJCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfTE9PS0lOR19VUDsKKwkJCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfUkVRVUVVRSwgJm9iamVjdC0+ZXZlbnRzKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmxvY2spOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwl9CisKKwlzcGluX3VubG9jaygmb2JqZWN0LT5jb29raWUtPnBhcmVudC0+bG9jayk7CisJc3Bpbl91bmxvY2soJm9iamVjdC0+Y29va2llLT5sb2NrKTsKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogbG9vayBhbiBvYmplY3QgdXAgaW4gdGhlIGNhY2hlIGZyb20gd2hpY2ggaXQgd2FzIGFsbG9jYXRlZAorICogLSB3ZSBob2xkIGFuICJhY2Nlc3MgbG9jayIgb24gdGhlIHBhcmVudCBvYmplY3QsIHNvIHRoZSBwYXJlbnQgb2JqZWN0IGNhbm5vdAorICogICBiZSB3aXRoZHJhd24gYnkgZWl0aGVyIHBhcnR5IHRpbGwgd2UndmUgZmluaXNoZWQKKyAqIC0gYW4gb2JqZWN0J3MgY29va2llIGlzIHBpbm5lZCB1bnRpbCB3ZSBjbGVhciBGU0NBQ0hFX0NPT0tJRV9DUkVBVElORyBvbiB0aGUKKyAqICAgbGVhZi1tb3N0IGNvb2tpZXMgb2YgdGhlIG9iamVjdCBhbmQgYWxsIGl0cyBjaGlsZHJlbgorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX2xvb2t1cF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvYmplY3QtPmNvb2tpZTsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnBhcmVudDsKKworCV9lbnRlcigiIik7CisKKwlwYXJlbnQgPSBvYmplY3QtPnBhcmVudDsKKwlBU1NFUlQocGFyZW50ICE9IE5VTEwpOworCUFTU0VSVENNUChwYXJlbnQtPm5fb3BzLCA+LCAwKTsKKwlBU1NFUlRDTVAocGFyZW50LT5uX29ial9vcHMsID4sIDApOworCisJLyogbWFrZSBzdXJlIHRoZSBwYXJlbnQgaXMgc3RpbGwgYXZhaWxhYmxlICovCisJQVNTRVJUQ01QKHBhcmVudC0+c3RhdGUsID49LCBGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEUpOworCisJaWYgKHBhcmVudC0+c3RhdGUgPj0gRlNDQUNIRV9PQkpFQ1RfRFlJTkcgfHwKKwkgICAgdGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmb2JqZWN0LT5jYWNoZS0+ZmxhZ3MpKSB7CisJCV9kZWJ1ZygidW5hdmFpbGFibGUiKTsKKwkJc2V0X2JpdChGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVywgJm9iamVjdC0+ZXZlbnRzKTsKKwkJX2xlYXZlKCIiKTsKKwkJcmV0dXJuOworCX0KKworCV9kZWJ1ZygiTE9PS1VQIFwiJXMvJXNcIiBpbiBcIiVzXCIiLAorCSAgICAgICBwYXJlbnQtPmNvb2tpZS0+ZGVmLT5uYW1lLCBjb29raWUtPmRlZi0+bmFtZSwKKwkgICAgICAgb2JqZWN0LT5jYWNoZS0+dGFnLT5uYW1lKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzKTsKKwlvYmplY3QtPmNhY2hlLT5vcHMtPmxvb2t1cF9vYmplY3Qob2JqZWN0KTsKKworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUiwgJm9iamVjdC0+ZXZlbnRzKSkKKwkJc2V0X2JpdChGU0NBQ0hFX0NPT0tJRV9VTkFWQUlMQUJMRSwgJmNvb2tpZS0+ZmxhZ3MpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoqCisgKiBmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUgLSBOb3RlIG5lZ2F0aXZlIGNvb2tpZSBsb29rdXAKKyAqIEBvYmplY3Q6IE9iamVjdCBwb2ludGluZyB0byBjb29raWUgdG8gbWFyaworICoKKyAqIE5vdGUgbmVnYXRpdmUgbG9va3VwLCBwZXJtaXR0aW5nIHRob3NlIHdhaXRpbmcgdG8gcmVhZCBkYXRhIGZyb20gYW4gYWxyZWFkeQorICogZXhpc3RpbmcgYmFja2luZyBvYmplY3QgdG8gY29udGludWUgYXMgdGhlcmUncyBubyBkYXRhIGZvciB0aGVtIHRvIHJlYWQuCisgKi8KK3ZvaWQgZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gb2JqZWN0LT5jb29raWU7CisKKwlfZW50ZXIoIntPQkoleCwlc30iLAorCSAgICAgICBvYmplY3QtPmRlYnVnX2lkLCBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb2JqZWN0LT5zdGF0ZV0pOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCWlmIChvYmplY3QtPnN0YXRlID09IEZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVApIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmUpOworCisJCS8qIHRyYW5zaXQgaGVyZSB0byBhbGxvdyB3cml0ZSByZXF1ZXN0cyB0byBiZWdpbiBzdGFja2luZyB1cAorCQkgKiBhbmQgcmVhZCByZXF1ZXN0cyB0byBiZWdpbiByZXR1cm5pbmcgRU5PREFUQSAqLworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkc7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJCXNldF9iaXQoRlNDQUNIRV9DT09LSUVfUEVORElOR19GSUxMLCAmY29va2llLT5mbGFncyk7CisJCXNldF9iaXQoRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQsICZjb29raWUtPmZsYWdzKTsKKworCQlfZGVidWcoIndha2UgdXAgbG9va3VwICVwIiwgJmNvb2tpZS0+ZmxhZ3MpOworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAsICZjb29raWUtPmZsYWdzKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJd2FrZV91cF9iaXQoJmNvb2tpZS0+ZmxhZ3MsIEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVApOworCQlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUsICZvYmplY3QtPmV2ZW50cyk7CisJfSBlbHNlIHsKKwkJQVNTRVJUQ01QKG9iamVjdC0+c3RhdGUsID09LCBGU0NBQ0hFX09CSkVDVF9DUkVBVElORyk7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCX0KKworCV9sZWF2ZSgiIik7Cit9CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZSk7CisKKy8qKgorICogZnNjYWNoZV9vYnRhaW5lZF9vYmplY3QgLSBOb3RlIHN1Y2Nlc3NmdWwgb2JqZWN0IGxvb2t1cCBvciBjcmVhdGlvbgorICogQG9iamVjdDogT2JqZWN0IHBvaW50aW5nIHRvIGNvb2tpZSB0byBtYXJrCisgKgorICogTm90ZSBzdWNjZXNzZnVsIGxvb2t1cCBhbmQvb3IgY3JlYXRpb24sIHBlcm1pdHRpbmcgdGhvc2Ugd2FpdGluZyB0byB3cml0ZQorICogZGF0YSB0byBhIGJhY2tpbmcgb2JqZWN0IHRvIGNvbnRpbnVlLgorICoKKyAqIE5vdGUgdGhhdCBhZnRlciBjYWxsaW5nIHRoaXMsIGFuIG9iamVjdCdzIGNvb2tpZSBtYXkgYmUgcmVsaW5xdWlzaGVkIGJ5IHRoZQorICogbmV0ZnMsIGFuZCBzbyBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggb2JqZWN0IGxvY2sgaGVsZC4KKyAqLwordm9pZCBmc2NhY2hlX29idGFpbmVkX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IG9iamVjdC0+Y29va2llOworCisJX2VudGVyKCJ7T0JKJXgsJXN9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+c3RhdGVdKTsKKworCS8qIGlmIHdlIHdlcmUgc3RpbGwgbG9va2luZyB1cCwgdGhlbiB3ZSBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBsb29rdXAKKwkgKiByZXN1bHQsIGluIHdoaWNoIGNhc2UgdGhlcmUgbWF5IGJlIGRhdGEgYXZhaWxhYmxlICovCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCWlmIChvYmplY3QtPnN0YXRlID09IEZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVApIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfcG9zaXRpdmUpOworCisJCWNsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9OT19EQVRBX1lFVCwgJmNvb2tpZS0+ZmxhZ3MpOworCisJCW9iamVjdC0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEU7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQljbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCwgJmNvb2tpZS0+ZmxhZ3MpOworCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQl3YWtlX3VwX2JpdCgmY29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCk7CisJCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfUkVRVUVVRSwgJm9iamVjdC0+ZXZlbnRzKTsKKwl9IGVsc2UgeworCQlBU1NFUlRDTVAob2JqZWN0LT5zdGF0ZSwgPT0sIEZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X2NyZWF0ZWQpOworCisJCW9iamVjdC0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEU7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUsICZvYmplY3QtPmV2ZW50cyk7CisJCXNtcF93bWIoKTsKKwl9CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HLCAmY29va2llLT5mbGFncykpCisJCXdha2VfdXBfYml0KCZjb29raWUtPmZsYWdzLCBGU0NBQ0hFX0NPT0tJRV9DUkVBVElORyk7CisKKwlfbGVhdmUoIiIpOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX29idGFpbmVkX29iamVjdCk7CisKKy8qCisgKiBoYW5kbGUgYW4gb2JqZWN0IHRoYXQgaGFzIGp1c3QgYmVjb21lIGF2YWlsYWJsZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9hdmFpbGFibGUoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HLCAmb2JqZWN0LT5jb29raWUtPmZsYWdzKSkKKwkJd2FrZV91cF9iaXQoJm9iamVjdC0+Y29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcpOworCisJZnNjYWNoZV9kb25lX3BhcmVudF9vcChvYmplY3QpOworCWlmIChvYmplY3QtPm5faW5fcHJvZ3Jlc3MgPT0gMCkgeworCQlpZiAob2JqZWN0LT5uX29wcyA+IDApIHsKKwkJCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+PSwgb2JqZWN0LT5uX29ial9vcHMpOworCQkJQVNTRVJUSUYob2JqZWN0LT5uX29wcyA+IG9iamVjdC0+bl9vYmpfb3BzLAorCQkJCSAhbGlzdF9lbXB0eSgmb2JqZWN0LT5wZW5kaW5nX29wcykpOworCQkJZnNjYWNoZV9zdGFydF9vcGVyYXRpb25zKG9iamVjdCk7CisJCX0gZWxzZSB7CisJCQlBU1NFUlQobGlzdF9lbXB0eSgmb2JqZWN0LT5wZW5kaW5nX29wcykpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJb2JqZWN0LT5jYWNoZS0+b3BzLT5sb29rdXBfY29tcGxldGUob2JqZWN0KTsKKwlmc2NhY2hlX2VucXVldWVfZGVwZW5kZW50cyhvYmplY3QpOworCisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfb2JqX2luc3RhbnRpYXRlX2hpc3RvZ3JhbSwgb2JqZWN0LT5sb29rdXBfamlmKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vYmplY3RfYXZhaWwpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGRyb3AgYW4gb2JqZWN0J3MgYXR0YWNobWVudHMKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9kcm9wX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnBhcmVudCA9IG9iamVjdC0+cGFyZW50OworCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSA9IG9iamVjdC0+Y2FjaGU7CisKKwlfZW50ZXIoIntPQkoleCwlZH0iLCBvYmplY3QtPmRlYnVnX2lkLCBvYmplY3QtPm5fY2hpbGRyZW4pOworCisJc3Bpbl9sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmb2JqZWN0LT5jYWNoZV9saW5rKTsKKwlzcGluX3VubG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCisJY2FjaGUtPm9wcy0+ZHJvcF9vYmplY3Qob2JqZWN0KTsKKworCWlmIChwYXJlbnQpIHsKKwkJX2RlYnVnKCJyZWxlYXNlIHBhcmVudCBPQkoleCB7JWR9IiwKKwkJICAgICAgIHBhcmVudC0+ZGVidWdfaWQsIHBhcmVudC0+bl9jaGlsZHJlbik7CisKKwkJc3Bpbl9sb2NrKCZwYXJlbnQtPmxvY2spOworCQlwYXJlbnQtPm5fY2hpbGRyZW4tLTsKKwkJaWYgKHBhcmVudC0+bl9jaGlsZHJlbiA9PSAwKQorCQkJZnNjYWNoZV9yYWlzZV9ldmVudChwYXJlbnQsIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCQlzcGluX3VubG9jaygmcGFyZW50LT5sb2NrKTsKKwkJb2JqZWN0LT5wYXJlbnQgPSBOVUxMOworCX0KKworCS8qIHRoaXMganVzdCBzaGlmdHMgdGhlIG9iamVjdCByZWxlYXNlIHRvIHRoZSBzbG93IHdvcmsgcHJvY2Vzc29yICovCisJb2JqZWN0LT5jYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogcmVsZWFzZSBvciByZWN5Y2xlIGFuIG9iamVjdCB0aGF0IHRoZSBuZXRmcyBoYXMgZGlzY2FyZGVkCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfcmVsZWFzZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJX2VudGVyKCIiKTsKKworCWZzY2FjaGVfZHJvcF9vYmplY3Qob2JqZWN0KTsKK30KKworLyoKKyAqIHdpdGhkcmF3IGFuIG9iamVjdCBmcm9tIGFjdGl2ZSBzZXJ2aWNlCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfd2l0aGRyYXdfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llOworCWJvb2wgZGV0YWNoZWQ7CisKKwlfZW50ZXIoIiIpOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCWNvb2tpZSA9IG9iamVjdC0+Y29va2llOworCWlmIChjb29raWUpIHsKKwkJLyogbmVlZCB0byBnZXQgdGhlIGNvb2tpZSBsb2NrIGJlZm9yZSB0aGUgb2JqZWN0IGxvY2ssIHN0YXJ0aW5nCisJCSAqIGZyb20gdGhlIG9iamVjdCBwb2ludGVyICovCisJCWF0b21pY19pbmMoJmNvb2tpZS0+dXNhZ2UpOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQlkZXRhY2hlZCA9IGZhbHNlOworCQlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQlpZiAob2JqZWN0LT5jb29raWUgPT0gY29va2llKSB7CisJCQlobGlzdF9kZWxfaW5pdCgmb2JqZWN0LT5jb29raWVfbGluayk7CisJCQlvYmplY3QtPmNvb2tpZSA9IE5VTEw7CisJCQlkZXRhY2hlZCA9IHRydWU7CisJCX0KKwkJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJCWZzY2FjaGVfY29va2llX3B1dChjb29raWUpOworCQlpZiAoZGV0YWNoZWQpCisJCQlmc2NhY2hlX2Nvb2tpZV9wdXQoY29va2llKTsKKwl9CisKKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCWZzY2FjaGVfZHJvcF9vYmplY3Qob2JqZWN0KTsKK30KKworLyoKKyAqIHdpdGhkcmF3IGFuIG9iamVjdCBmcm9tIGFjdGl2ZSBzZXJ2aWNlIGF0IHRoZSBiZWhlc3Qgb2YgdGhlIGNhY2hlCisgKiAtIG5lZWQgYnJlYWsgdGhlIGxpbmtzIHRvIGEgY2FjaGVkIG9iamVjdCBjb29raWUKKyAqIC0gY2FsbGVkIHVuZGVyIHR3byBzaXR1YXRpb25zOgorICogICAoMSkgcmVjeWNsZXIgZGVjaWRlcyB0byByZWNsYWltIGFuIGluLXVzZSBvYmplY3QKKyAqICAgKDIpIGEgY2FjaGUgaXMgdW5tb3VudGVkCisgKiAtIGhhdmUgdG8gdGFrZSBjYXJlIGFzIHRoZSBjb29raWUgY2FuIGJlIGJlaW5nIHJlbGlucXVpc2hlZCBieSB0aGUgbmV0ZnMKKyAqICAgc2ltdWx0YW5lb3VzbHkKKyAqIC0gdGhlIG9iamVjdCBpcyBwaW5uZWQgYnkgdGhlIGNhbGxlciBob2xkaW5nIGEgcmVmY291bnQgb24gaXQKKyAqLwordm9pZCBmc2NhY2hlX3dpdGhkcmF3aW5nX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJYm9vbCBlbnF1ZXVlID0gZmFsc2U7CisKKwlfZW50ZXIoIixPQkoleCIsIG9iamVjdC0+ZGVidWdfaWQpOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCWlmIChvYmplY3QtPnN0YXRlIDwgRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkcpIHsKKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX1dJVEhEUkFXSU5HOworCQllbnF1ZXVlID0gdHJ1ZTsKKwl9CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwlpZiAoZW5xdWV1ZSkKKwkJZnNjYWNoZV9lbnF1ZXVlX29iamVjdChvYmplY3QpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZ2V0IGEgcmVmIG9uIGFuIG9iamVjdAorICovCitzdGF0aWMgaW50IGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19nZXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfb2JqZWN0LCB3b3JrKTsKKworCXJldHVybiBvYmplY3QtPmNhY2hlLT5vcHMtPmdyYWJfb2JqZWN0KG9iamVjdCkgPyAwIDogLUVBR0FJTjsKK30KKworLyoKKyAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZGlzY2FyZCBhIHJlZiBvbiBhIHdvcmsgaXRlbQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfcHV0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgd29yayk7CisKKwlyZXR1cm4gb2JqZWN0LT5jYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7Cit9CisKKy8qCisgKiBlbnF1ZXVlIGFuIG9iamVjdCBmb3IgbWV0YWRhdGEtdHlwZSBwcm9jZXNzaW5nCisgKi8KK3ZvaWQgZnNjYWNoZV9lbnF1ZXVlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlfZW50ZXIoIntPQkoleH0iLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCXNsb3dfd29ya19lbnF1ZXVlKCZvYmplY3QtPndvcmspOworfQorCisvKgorICogZW5xdWV1ZSB0aGUgZGVwZW5kZW50cyBvZiBhbiBvYmplY3QgZm9yIG1ldGFkYXRhLXR5cGUgcHJvY2Vzc2luZworICogLSB0aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgb2JqZWN0J3MgbG9jaworICogLSB0aGlzIG1heSBjYXVzZSBhbiBhbHJlYWR5IGxvY2tlZCBvYmplY3QgdG8gd2luZCB1cCBiZWluZyBwcm9jZXNzZWQgYWdhaW4KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9lbnF1ZXVlX2RlcGVuZGVudHMoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpkZXA7CisKKwlfZW50ZXIoIntPQkoleH0iLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCWlmIChsaXN0X2VtcHR5KCZvYmplY3QtPmRlcGVuZGVudHMpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm9iamVjdC0+ZGVwZW5kZW50cykpIHsKKwkJZGVwID0gbGlzdF9lbnRyeShvYmplY3QtPmRlcGVuZGVudHMubmV4dCwKKwkJCQkgc3RydWN0IGZzY2FjaGVfb2JqZWN0LCBkZXBfbGluayk7CisJCWxpc3RfZGVsX2luaXQoJmRlcC0+ZGVwX2xpbmspOworCisKKwkJLyogc29ydCBvbnRvIGFwcHJvcHJpYXRlIGxpc3RzICovCisJCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3QoZGVwKTsKKwkJZGVwLT5jYWNoZS0+b3BzLT5wdXRfb2JqZWN0KGRlcCk7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZvYmplY3QtPmRlcGVuZGVudHMpKQorCQkJY29uZF9yZXNjaGVkX2xvY2soJm9iamVjdC0+bG9jayk7CisJfQorCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7Cit9CisKKy8qCisgKiByZW1vdmUgYW4gb2JqZWN0IGZyb20gd2hhdGV2ZXIgcXVldWUgaXQncyB3YWl0aW5nIG9uCisgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIG9iamVjdC0+bG9jaworICovCit2b2lkIGZzY2FjaGVfZGVxdWV1ZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJm9iamVjdC0+ZGVwX2xpbmspKSB7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5wYXJlbnQtPmxvY2spOworCQlsaXN0X2RlbF9pbml0KCZvYmplY3QtPmRlcF9saW5rKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+cGFyZW50LT5sb2NrKTsKKwl9CisKKwlfbGVhdmUoIiIpOworfQorCisvKioKKyAqIGZzY2FjaGVfY2hlY2tfYXV4IC0gQXNrIHRoZSBuZXRmcyB3aGV0aGVyIGFuIG9iamVjdCBvbiBkaXNrIGlzIHN0aWxsIHZhbGlkCisgKiBAb2JqZWN0OiBUaGUgb2JqZWN0IHRvIGFzayBhYm91dAorICogQGRhdGE6IFRoZSBhdXhpbGlhcnkgZGF0YSBmb3IgdGhlIG9iamVjdAorICogQGRhdGFsZW46IFRoZSBzaXplIG9mIHRoZSBhdXhpbGlhcnkgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uc3VsdHMgdGhlIG5ldGZzIGFib3V0IHRoZSBjb2hlcmVuY3kgc3RhdGUgb2YgYW4gb2JqZWN0CisgKi8KK2VudW0gZnNjYWNoZV9jaGVja2F1eCBmc2NhY2hlX2NoZWNrX2F1eChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkJY29uc3Qgdm9pZCAqZGF0YSwgdWludDE2X3QgZGF0YWxlbikKK3sKKwllbnVtIGZzY2FjaGVfY2hlY2thdXggcmVzdWx0OworCisJaWYgKCFvYmplY3QtPmNvb2tpZS0+ZGVmLT5jaGVja19hdXgpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY2hlY2thdXhfbm9uZSk7CisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09LQVk7CisJfQorCisJcmVzdWx0ID0gb2JqZWN0LT5jb29raWUtPmRlZi0+Y2hlY2tfYXV4KG9iamVjdC0+Y29va2llLT5uZXRmc19kYXRhLAorCQkJCQkJZGF0YSwgZGF0YWxlbik7CisJc3dpdGNoIChyZXN1bHQpIHsKKwkJLyogZW50cnkgb2theSBhcyBpcyAqLworCWNhc2UgRlNDQUNIRV9DSEVDS0FVWF9PS0FZOgorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jaGVja2F1eF9va2F5KTsKKwkJYnJlYWs7CisKKwkJLyogZW50cnkgcmVxdWlyZXMgdXBkYXRlICovCisJY2FzZSBGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURToKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY2hlY2thdXhfdXBkYXRlKTsKKwkJYnJlYWs7CisKKwkJLyogZW50cnkgcmVxdWlyZXMgZGVsZXRpb24gKi8KKwljYXNlIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU6CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NoZWNrYXV4X29ic29sZXRlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX2NoZWNrX2F1eCk7CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL29wZXJhdGlvbi5jIGIvZnMvZnNjYWNoZS9vcGVyYXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2Y4ZDUzCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9vcGVyYXRpb24uYwpAQCAtMCwwICsxLDQ1OSBAQAorLyogRlMtQ2FjaGUgd29ya2VyIG9wZXJhdGlvbiBtYW5hZ2VtZW50IHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb3BlcmF0aW9ucy50eHQKKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgT1BFUkFUSU9OCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworYXRvbWljX3QgZnNjYWNoZV9vcF9kZWJ1Z19pZDsKK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9vcF9kZWJ1Z19pZCk7CisKKy8qKgorICogZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbiAtIEVucXVldWUgYW4gb3BlcmF0aW9uIGZvciBwcm9jZXNzaW5nCisgKiBAb3A6IFRoZSBvcGVyYXRpb24gdG8gZW5xdWV1ZQorICoKKyAqIEVucXVldWUgYW4gb3BlcmF0aW9uIGZvciBwcm9jZXNzaW5nIGJ5IHRoZSBGUy1DYWNoZSB0aHJlYWQgcG9vbC4KKyAqCisgKiBUaGlzIHdpbGwgZ2V0IGl0cyBvd24gcmVmIG9uIHRoZSBvYmplY3QuCisgKi8KK3ZvaWQgZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbihzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKQoreworCV9lbnRlcigie09CSiV4IE9QJXgsJXV9IiwKKwkgICAgICAgb3AtPm9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCwgYXRvbWljX3JlYWQoJm9wLT51c2FnZSkpOworCisJQVNTRVJUKG9wLT5wcm9jZXNzb3IgIT0gTlVMTCk7CisJQVNTRVJUQ01QKG9wLT5vYmplY3QtPnN0YXRlLCA+PSwgRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFKTsKKwlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJm9wLT51c2FnZSksID4sIDApOworCisJaWYgKGxpc3RfZW1wdHkoJm9wLT5wZW5kX2xpbmspKSB7CisJCXN3aXRjaCAob3AtPmZsYWdzICYgRlNDQUNIRV9PUF9UWVBFKSB7CisJCWNhc2UgRlNDQUNIRV9PUF9GQVNUOgorCQkJX2RlYnVnKCJxdWV1ZSBmYXN0Iik7CisJCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQkJaWYgKCFzY2hlZHVsZV93b3JrKCZvcC0+ZmFzdF93b3JrKSkKKwkJCQlmc2NhY2hlX3B1dF9vcGVyYXRpb24ob3ApOworCQkJYnJlYWs7CisJCWNhc2UgRlNDQUNIRV9PUF9TTE9XOgorCQkJX2RlYnVnKCJxdWV1ZSBzbG93Iik7CisJCQlzbG93X3dvcmtfZW5xdWV1ZSgmb3AtPnNsb3dfd29yayk7CisJCQlicmVhazsKKwkJY2FzZSBGU0NBQ0hFX09QX01ZVEhSRUFEOgorCQkJX2RlYnVnKCJxdWV1ZSBmb3IgY2FsbGVyJ3MgYXR0ZW50aW9uIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IFVuZXhwZWN0ZWQgb3AgdHlwZSAlbHgiLAorCQkJICAgICAgIG9wLT5mbGFncyk7CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX2VucXVldWUpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbik7CisKKy8qCisgKiBzdGFydCBhbiBvcCBydW5uaW5nCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfcnVuX29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJICAgc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKK3sKKwlvYmplY3QtPm5faW5fcHJvZ3Jlc3MrKzsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZTQ0FDSEVfT1BfV0FJVElORywgJm9wLT5mbGFncykpCisJCXdha2VfdXBfYml0KCZvcC0+ZmxhZ3MsIEZTQ0FDSEVfT1BfV0FJVElORyk7CisJaWYgKG9wLT5wcm9jZXNzb3IpCisJCWZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24ob3ApOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3J1bik7Cit9CisKKy8qCisgKiBzdWJtaXQgYW4gZXhjbHVzaXZlIG9wZXJhdGlvbiBmb3IgYW4gb2JqZWN0CisgKiAtIG90aGVyIG9wcyBhcmUgZXhjbHVkZWQgZnJvbSBydW5uaW5nIHNpbXVsdGFuZW91c2x5IHdpdGggdGhpcyBvbmUKKyAqIC0gdGhpcyBnZXRzIGFueSBleHRyYSByZWZzIGl0IG5lZWRzIG9uIGFuIG9wCisgKi8KK2ludCBmc2NhY2hlX3N1Ym1pdF9leGNsdXNpdmVfb3Aoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKK3sKKwlpbnQgcmV0OworCisJX2VudGVyKCJ7T0JKJXggT1AleH0sIiwgb2JqZWN0LT5kZWJ1Z19pZCwgb3AtPmRlYnVnX2lkKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwlBU1NFUlRDTVAob2JqZWN0LT5uX29wcywgPj0sIG9iamVjdC0+bl9pbl9wcm9ncmVzcyk7CisJQVNTRVJUQ01QKG9iamVjdC0+bl9vcHMsID49LCBvYmplY3QtPm5fZXhjbHVzaXZlKTsKKworCXJldCA9IC1FTk9CVUZTOworCWlmIChmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqZWN0KSkgeworCQlvcC0+b2JqZWN0ID0gb2JqZWN0OworCQlvYmplY3QtPm5fb3BzKys7CisJCW9iamVjdC0+bl9leGNsdXNpdmUrKzsJLyogcmVhZHMgYW5kIHdyaXRlcyBtdXN0IHdhaXQgKi8KKworCQlpZiAob2JqZWN0LT5uX29wcyA+IDApIHsKKwkJCWF0b21pY19pbmMoJm9wLT51c2FnZSk7CisJCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmb2JqZWN0LT5wZW5kaW5nX29wcyk7CisJCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9wZW5kKTsKKwkJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmb2JqZWN0LT5wZW5kaW5nX29wcykpIHsKKwkJCWF0b21pY19pbmMoJm9wLT51c2FnZSk7CisJCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmb2JqZWN0LT5wZW5kaW5nX29wcyk7CisJCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9wZW5kKTsKKwkJCWZzY2FjaGVfc3RhcnRfb3BlcmF0aW9ucyhvYmplY3QpOworCQl9IGVsc2UgeworCQkJQVNTRVJUQ01QKG9iamVjdC0+bl9pbl9wcm9ncmVzcywgPT0sIDApOworCQkJZnNjYWNoZV9ydW5fb3Aob2JqZWN0LCBvcCk7CisJCX0KKworCQkvKiBuZWVkIHRvIGlzc3VlIGEgbmV3IHdyaXRlIG9wIGFmdGVyIHRoaXMgKi8KKwkJY2xlYXJfYml0KEZTQ0FDSEVfT0JKRUNUX1BFTkRJTkdfV1JJVEUsICZvYmplY3QtPmZsYWdzKTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgaWYgKG9iamVjdC0+c3RhdGUgPT0gRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkcpIHsKKwkJb3AtPm9iamVjdCA9IG9iamVjdDsKKwkJb2JqZWN0LT5uX29wcysrOworCQlvYmplY3QtPm5fZXhjbHVzaXZlKys7CS8qIHJlYWRzIGFuZCB3cml0ZXMgbXVzdCB3YWl0ICovCisJCWF0b21pY19pbmMoJm9wLT51c2FnZSk7CisJCWxpc3RfYWRkX3RhaWwoJm9wLT5wZW5kX2xpbmssICZvYmplY3QtPnBlbmRpbmdfb3BzKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcGVuZCk7CisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJLyogbm90IGFsbG93ZWQgdG8gc3VibWl0IG9wcyBpbiBhbnkgb3RoZXIgc3RhdGUgKi8KKwkJQlVHKCk7CisJfQorCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHJlcG9ydCBhbiB1bmV4cGVjdGVkIHN1Ym1pc3Npb24KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9yZXBvcnRfdW5leHBlY3RlZF9zdWJtaXNzaW9uKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCQkJIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBvc3RhdGUpCit7CisJc3RhdGljIGJvb2wgb25jZV9vbmx5OworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqcDsKKwl1bnNpZ25lZCBuOworCisJaWYgKG9uY2Vfb25seSkKKwkJcmV0dXJuOworCW9uY2Vfb25seSA9IHRydWU7CisKKwlrZGVidWcoInVuZXhwZWN0ZWQgc3VibWlzc2lvbiBPUCV4IFtPQkoleCAlc10iLAorCSAgICAgICBvcC0+ZGVidWdfaWQsIG9iamVjdC0+ZGVidWdfaWQsCisJICAgICAgIGZzY2FjaGVfb2JqZWN0X3N0YXRlc1tvYmplY3QtPnN0YXRlXSk7CisJa2RlYnVnKCJvYmpzdGF0ZT0lcyBbJXNdIiwKKwkgICAgICAgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+c3RhdGVdLAorCSAgICAgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb3N0YXRlXSk7CisJa2RlYnVnKCJvYmpmbGFncz0lbHgiLCBvYmplY3QtPmZsYWdzKTsKKwlrZGVidWcoIm9iamV2ZW50PSVseCBbJWx4XSIsIG9iamVjdC0+ZXZlbnRzLCBvYmplY3QtPmV2ZW50X21hc2spOworCWtkZWJ1Zygib3BzPSV1IGlucD0ldSBleGM9JXUiLAorCSAgICAgICBvYmplY3QtPm5fb3BzLCBvYmplY3QtPm5faW5fcHJvZ3Jlc3MsIG9iamVjdC0+bl9leGNsdXNpdmUpOworCisJaWYgKCFsaXN0X2VtcHR5KCZvYmplY3QtPnBlbmRpbmdfb3BzKSkgeworCQluID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmb2JqZWN0LT5wZW5kaW5nX29wcywgcGVuZF9saW5rKSB7CisJCQlBU1NFUlRDTVAocC0+b2JqZWN0LCA9PSwgb2JqZWN0KTsKKwkJCWtkZWJ1ZygiJXAgJXAiLCBvcC0+cHJvY2Vzc29yLCBvcC0+cmVsZWFzZSk7CisJCQluKys7CisJCX0KKworCQlrZGVidWcoIm49JXUiLCBuKTsKKwl9CisKKwlkdW1wX3N0YWNrKCk7Cit9CisKKy8qCisgKiBzdWJtaXQgYW4gb3BlcmF0aW9uIGZvciBhbiBvYmplY3QKKyAqIC0gb2JqZWN0cyBtYXkgYmUgc3VibWl0dGVkIG9ubHkgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXM6CisgKiAgIC0gZHVyaW5nIG9iamVjdCBjcmVhdGlvbiAod3JpdGUgb3BzIG1heSBiZSBzdWJtaXR0ZWQpCisgKiAgIC0gd2hpbHN0IHRoZSBvYmplY3QgaXMgYWN0aXZlCisgKiAgIC0gYWZ0ZXIgYW4gSS9PIGVycm9yIGluY3VycmVkIGluIG9uZSBvZiB0aGUgdHdvIGFib3ZlIHN0YXRlcyAob3AgcmVqZWN0ZWQpCisgKiAtIHRoaXMgZ2V0cyBhbnkgZXh0cmEgcmVmcyBpdCBuZWVkcyBvbiBhbiBvcAorICovCitpbnQgZnNjYWNoZV9zdWJtaXRfb3Aoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCSAgICAgIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApCit7CisJdW5zaWduZWQgbG9uZyBvc3RhdGU7CisJaW50IHJldDsKKworCV9lbnRlcigie09CSiV4IE9QJXh9LHsldX0iLAorCSAgICAgICBvYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpKTsKKworCUFTU0VSVENNUChhdG9taWNfcmVhZCgmb3AtPnVzYWdlKSwgPiwgMCk7CisKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJQVNTRVJUQ01QKG9iamVjdC0+bl9vcHMsID49LCBvYmplY3QtPm5faW5fcHJvZ3Jlc3MpOworCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+PSwgb2JqZWN0LT5uX2V4Y2x1c2l2ZSk7CisKKwlvc3RhdGUgPSBvYmplY3QtPnN0YXRlOworCXNtcF9ybWIoKTsKKworCWlmIChmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqZWN0KSkgeworCQlvcC0+b2JqZWN0ID0gb2JqZWN0OworCQlvYmplY3QtPm5fb3BzKys7CisKKwkJaWYgKG9iamVjdC0+bl9leGNsdXNpdmUgPiAwKSB7CisJCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQkJbGlzdF9hZGRfdGFpbCgmb3AtPnBlbmRfbGluaywgJm9iamVjdC0+cGVuZGluZ19vcHMpOworCQkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcGVuZCk7CisJCX0gZWxzZSBpZiAoIWxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpKSB7CisJCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQkJbGlzdF9hZGRfdGFpbCgmb3AtPnBlbmRfbGluaywgJm9iamVjdC0+cGVuZGluZ19vcHMpOworCQkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcGVuZCk7CisJCQlmc2NhY2hlX3N0YXJ0X29wZXJhdGlvbnMob2JqZWN0KTsKKwkJfSBlbHNlIHsKKwkJCUFTU0VSVENNUChvYmplY3QtPm5fZXhjbHVzaXZlLCA9PSwgMCk7CisJCQlmc2NhY2hlX3J1bl9vcChvYmplY3QsIG9wKTsKKwkJfQorCQlyZXQgPSAwOworCX0gZWxzZSBpZiAob2JqZWN0LT5zdGF0ZSA9PSBGU0NBQ0hFX09CSkVDVF9DUkVBVElORykgeworCQlvcC0+b2JqZWN0ID0gb2JqZWN0OworCQlvYmplY3QtPm5fb3BzKys7CisJCWF0b21pY19pbmMoJm9wLT51c2FnZSk7CisJCWxpc3RfYWRkX3RhaWwoJm9wLT5wZW5kX2xpbmssICZvYmplY3QtPnBlbmRpbmdfb3BzKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcGVuZCk7CisJCXJldCA9IDA7CisJfSBlbHNlIGlmICghdGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmb2JqZWN0LT5jYWNoZS0+ZmxhZ3MpKSB7CisJCWZzY2FjaGVfcmVwb3J0X3VuZXhwZWN0ZWRfc3VibWlzc2lvbihvYmplY3QsIG9wLCBvc3RhdGUpOworCQlBU1NFUlQoIWZzY2FjaGVfb2JqZWN0X2lzX2FjdGl2ZShvYmplY3QpKTsKKwkJcmV0ID0gLUVOT0JVRlM7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJfQorCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHF1ZXVlIGFuIG9iamVjdCBmb3Igd2l0aGRyYXdhbCBvbiBlcnJvciwgYWJvcnRpbmcgYWxsIGZvbGxvd2luZyBhc3luY2hyb25vdXMKKyAqIG9wZXJhdGlvbnMKKyAqLwordm9pZCBmc2NhY2hlX2Fib3J0X29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlfZW50ZXIoIntPQkoleH0iLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCWZzY2FjaGVfcmFpc2VfZXZlbnQob2JqZWN0LCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUik7Cit9CisKKy8qCisgKiBqdW1wIHN0YXJ0IHRoZSBvcGVyYXRpb24gcHJvY2Vzc2luZyBvbiBhbiBvYmplY3QKKyAqIC0gY2FsbGVyIG11c3QgaG9sZCBvYmplY3QtPmxvY2sKKyAqLwordm9pZCBmc2NhY2hlX3N0YXJ0X29wZXJhdGlvbnMoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcDsKKwlib29sIHN0b3AgPSBmYWxzZTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmb2JqZWN0LT5wZW5kaW5nX29wcykgJiYgIXN0b3ApIHsKKwkJb3AgPSBsaXN0X2VudHJ5KG9iamVjdC0+cGVuZGluZ19vcHMubmV4dCwKKwkJCQlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24sIHBlbmRfbGluayk7CisKKwkJaWYgKHRlc3RfYml0KEZTQ0FDSEVfT1BfRVhDTFVTSVZFLCAmb3AtPmZsYWdzKSkgeworCQkJaWYgKG9iamVjdC0+bl9pbl9wcm9ncmVzcyA+IDApCisJCQkJYnJlYWs7CisJCQlzdG9wID0gdHJ1ZTsKKwkJfQorCQlsaXN0X2RlbF9pbml0KCZvcC0+cGVuZF9saW5rKTsKKwkJb2JqZWN0LT5uX2luX3Byb2dyZXNzKys7CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+ZmxhZ3MpKQorCQkJd2FrZV91cF9iaXQoJm9wLT5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HKTsKKwkJaWYgKG9wLT5wcm9jZXNzb3IpCisJCQlmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKG9wKTsKKworCQkvKiB0aGUgcGVuZGluZyBxdWV1ZSB3YXMgaG9sZGluZyBhIHJlZiBvbiB0aGUgb2JqZWN0ICovCisJCWZzY2FjaGVfcHV0X29wZXJhdGlvbihvcCk7CisJfQorCisJQVNTRVJUQ01QKG9iamVjdC0+bl9pbl9wcm9ncmVzcywgPD0sIG9iamVjdC0+bl9vcHMpOworCisJX2RlYnVnKCJ3b2tlICVkIG9wcyBvbiBPQkoleCIsCisJICAgICAgIG9iamVjdC0+bl9pbl9wcm9ncmVzcywgb2JqZWN0LT5kZWJ1Z19pZCk7Cit9CisKKy8qCisgKiByZWxlYXNlIGFuIG9wZXJhdGlvbgorICogLSBxdWV1ZXMgcGVuZGluZyBvcHMgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbi1wcm9ncmVzcyBvcAorICovCit2b2lkIGZzY2FjaGVfcHV0X29wZXJhdGlvbihzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZTsKKworCV9lbnRlcigie09CSiV4IE9QJXgsJWR9IiwKKwkgICAgICAgb3AtPm9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCwgYXRvbWljX3JlYWQoJm9wLT51c2FnZSkpOworCisJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpLCA+LCAwKTsKKworCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmb3AtPnVzYWdlKSkKKwkJcmV0dXJuOworCisJX2RlYnVnKCJQVVQgT1AiKTsKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChGU0NBQ0hFX09QX0RFQUQsICZvcC0+ZmxhZ3MpKQorCQlCVUcoKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3JlbGVhc2UpOworCisJaWYgKG9wLT5yZWxlYXNlKSB7CisJCW9wLT5yZWxlYXNlKG9wKTsKKwkJb3AtPnJlbGVhc2UgPSBOVUxMOworCX0KKworCW9iamVjdCA9IG9wLT5vYmplY3Q7CisKKwkvKiBub3cuLi4gd2UgbWF5IGdldCBjYWxsZWQgd2l0aCB0aGUgb2JqZWN0IHNwaW5sb2NrIGhlbGQsIHNvIHdlCisJICogY29tcGxldGUgdGhlIGNsZWFudXAgaGVyZSBvbmx5IGlmIHdlIGNhbiBpbW1lZGlhdGVseSBhY3F1aXJlIHRoZQorCSAqIGxvY2ssIGFuZCBkZWZlciBpdCBvdGhlcndpc2UgKi8KKwlpZiAoIXNwaW5fdHJ5bG9jaygmb2JqZWN0LT5sb2NrKSkgeworCQlfZGVidWcoImRlZmVyIHB1dCIpOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9kZWZlcnJlZF9yZWxlYXNlKTsKKworCQljYWNoZSA9IG9iamVjdC0+Y2FjaGU7CisJCXNwaW5fbG9jaygmY2FjaGUtPm9wX2djX2xpc3RfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJm9wLT5wZW5kX2xpbmssICZjYWNoZS0+b3BfZ2NfbGlzdCk7CisJCXNwaW5fdW5sb2NrKCZjYWNoZS0+b3BfZ2NfbGlzdF9sb2NrKTsKKwkJc2NoZWR1bGVfd29yaygmY2FjaGUtPm9wX2djKTsKKwkJX2xlYXZlKCIgW2RlZmVyXSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfT1BfRVhDTFVTSVZFLCAmb3AtPmZsYWdzKSkgeworCQlBU1NFUlRDTVAob2JqZWN0LT5uX2V4Y2x1c2l2ZSwgPiwgMCk7CisJCW9iamVjdC0+bl9leGNsdXNpdmUtLTsKKwl9CisKKwlBU1NFUlRDTVAob2JqZWN0LT5uX2luX3Byb2dyZXNzLCA+LCAwKTsKKwlvYmplY3QtPm5faW5fcHJvZ3Jlc3MtLTsKKwlpZiAob2JqZWN0LT5uX2luX3Byb2dyZXNzID09IDApCisJCWZzY2FjaGVfc3RhcnRfb3BlcmF0aW9ucyhvYmplY3QpOworCisJQVNTRVJUQ01QKG9iamVjdC0+bl9vcHMsID4sIDApOworCW9iamVjdC0+bl9vcHMtLTsKKwlpZiAob2JqZWN0LT5uX29wcyA9PSAwKQorCQlmc2NhY2hlX3JhaXNlX2V2ZW50KG9iamVjdCwgRlNDQUNIRV9PQkpFQ1RfRVZfQ0xFQVJFRCk7CisKKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCWtmcmVlKG9wKTsKKwlfbGVhdmUoIiBbZG9uZV0iKTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9wdXRfb3BlcmF0aW9uKTsKKworLyoKKyAqIGdhcmJhZ2UgY29sbGVjdCBvcGVyYXRpb25zIHRoYXQgaGF2ZSBoYWQgdGhlaXIgcmVsZWFzZSBkZWZlcnJlZAorICovCit2b2lkIGZzY2FjaGVfb3BlcmF0aW9uX2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9jYWNoZSwgb3BfZ2MpOworCWludCBjb3VudCA9IDA7CisKKwlfZW50ZXIoIiIpOworCisJZG8geworCQlzcGluX2xvY2soJmNhY2hlLT5vcF9nY19saXN0X2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmY2FjaGUtPm9wX2djX2xpc3QpKSB7CisJCQlzcGluX3VubG9jaygmY2FjaGUtPm9wX2djX2xpc3RfbG9jayk7CisJCQlicmVhazsKKwkJfQorCisJCW9wID0gbGlzdF9lbnRyeShjYWNoZS0+b3BfZ2NfbGlzdC5uZXh0LAorCQkJCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiwgcGVuZF9saW5rKTsKKwkJbGlzdF9kZWwoJm9wLT5wZW5kX2xpbmspOworCQlzcGluX3VubG9jaygmY2FjaGUtPm9wX2djX2xpc3RfbG9jayk7CisKKwkJb2JqZWN0ID0gb3AtPm9iamVjdDsKKworCQlfZGVidWcoIkdDIERFRkVSUkVEIFJFTCBPQkoleCBPUCV4IiwKKwkJICAgICAgIG9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX2djKTsKKworCQlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJm9wLT51c2FnZSksID09LCAwKTsKKworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX0VYQ0xVU0lWRSwgJm9wLT5mbGFncykpIHsKKwkJCUFTU0VSVENNUChvYmplY3QtPm5fZXhjbHVzaXZlLCA+LCAwKTsKKwkJCW9iamVjdC0+bl9leGNsdXNpdmUtLTsKKwkJfQorCisJCUFTU0VSVENNUChvYmplY3QtPm5faW5fcHJvZ3Jlc3MsID4sIDApOworCQlvYmplY3QtPm5faW5fcHJvZ3Jlc3MtLTsKKwkJaWYgKG9iamVjdC0+bl9pbl9wcm9ncmVzcyA9PSAwKQorCQkJZnNjYWNoZV9zdGFydF9vcGVyYXRpb25zKG9iamVjdCk7CisKKwkJQVNTRVJUQ01QKG9iamVjdC0+bl9vcHMsID4sIDApOworCQlvYmplY3QtPm5fb3BzLS07CisJCWlmIChvYmplY3QtPm5fb3BzID09IDApCisJCQlmc2NhY2hlX3JhaXNlX2V2ZW50KG9iamVjdCwgRlNDQUNIRV9PQkpFQ1RfRVZfQ0xFQVJFRCk7CisKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwl9IHdoaWxlIChjb3VudCsrIDwgMjApOworCisJaWYgKCFsaXN0X2VtcHR5KCZjYWNoZS0+b3BfZ2NfbGlzdCkpCisJCXNjaGVkdWxlX3dvcmsoJmNhY2hlLT5vcF9nYyk7CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogYWxsb3cgdGhlIHNsb3cgd29yayBpdGVtIHByb2Nlc3NvciB0byBnZXQgYSByZWYgb24gYW4gb3BlcmF0aW9uCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9vcF9nZXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24sIHNsb3dfd29yayk7CisKKwlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCXJldHVybiAwOworfQorCisvKgorICogYWxsb3cgdGhlIHNsb3cgd29yayBpdGVtIHByb2Nlc3NvciB0byBkaXNjYXJkIGEgcmVmIG9uIGFuIG9wZXJhdGlvbgorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX29wX3B1dF9yZWYoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiwgc2xvd193b3JrKTsKKworCWZzY2FjaGVfcHV0X29wZXJhdGlvbihvcCk7Cit9CisKKy8qCisgKiBleGVjdXRlIGFuIG9wZXJhdGlvbiB1c2luZyB0aGUgc2xvdyB0aHJlYWQgcG9vbCB0byBwcm92aWRlIHByb2Nlc3NpbmcgY29udGV4dAorICogLSB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmIHRvIHRoaXMgb2JqZWN0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGhvbGQgb25lCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfb3BfZXhlY3V0ZShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uLCBzbG93X3dvcmspOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwlfZW50ZXIoIntPQkoleCBPUCV4LCVkfSIsCisJICAgICAgIG9wLT5vYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpKTsKKworCUFTU0VSVChvcC0+cHJvY2Vzc29yICE9IE5VTEwpOworCXN0YXJ0ID0gamlmZmllczsKKwlvcC0+cHJvY2Vzc29yKG9wKTsKKwlmc2NhY2hlX2hpc3QoZnNjYWNoZV9vcHNfaGlzdG9ncmFtLCBzdGFydCk7CisKKwlfbGVhdmUoIiIpOworfQorCitjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBmc2NhY2hlX29wX3Nsb3dfd29ya19vcHMgPSB7CisJLmdldF9yZWYJPSBmc2NhY2hlX29wX2dldF9yZWYsCisJLnB1dF9yZWYJPSBmc2NhY2hlX29wX3B1dF9yZWYsCisJLmV4ZWN1dGUJPSBmc2NhY2hlX29wX2V4ZWN1dGUsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9wYWdlLmMgYi9mcy9mc2NhY2hlL3BhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTY4ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9wYWdlLmMKQEAgLTAsMCArMSw4MTYgQEAKKy8qIENhY2hlIHBhZ2UgbWFuYWdlbWVudCBhbmQgZGF0YSBJL08gcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgUEFHRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzY2FjaGUtY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisvKgorICogY2hlY2sgdG8gc2VlIGlmIGEgcGFnZSBpcyBiZWluZyB3cml0dGVuIHRvIHRoZSBjYWNoZQorICovCitib29sIF9fZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl2b2lkICp2YWw7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJdmFsID0gcmFkaXhfdHJlZV9sb29rdXAoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gdmFsICE9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKTsKKworLyoKKyAqIHdhaXQgZm9yIGEgcGFnZSB0byBmaW5pc2ggYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUKKyAqLwordm9pZCBfX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSBiaXRfd2FpdHF1ZXVlKCZjb29raWUtPmZsYWdzLCAwKTsKKworCXdhaXRfZXZlbnQoKndxLCAhX19mc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUpOworCisvKgorICogbm90ZSB0aGF0IGEgcGFnZSBoYXMgZmluaXNoZWQgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9lbmRfcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IHBhZ2UgKnhwYWdlOworCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCXhwYWdlID0gcmFkaXhfdHJlZV9kZWxldGUoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCk7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJQVNTRVJUKHhwYWdlICE9IE5VTEwpOworCisJd2FrZV91cF9iaXQoJmNvb2tpZS0+ZmxhZ3MsIDApOworfQorCisvKgorICogYWN0dWFsbHkgYXBwbHkgdGhlIGNoYW5nZWQgYXR0cmlidXRlcyB0byBhIGNhY2hlIG9iamVjdAorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX2F0dHJfY2hhbmdlZF9vcChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0gb3AtPm9iamVjdDsKKworCV9lbnRlcigie09CSiV4IE9QJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCwgb3AtPmRlYnVnX2lkKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9jYWxscyk7CisKKwlpZiAoZnNjYWNoZV9vYmplY3RfaXNfYWN0aXZlKG9iamVjdCkgJiYKKwkgICAgb2JqZWN0LT5jYWNoZS0+b3BzLT5hdHRyX2NoYW5nZWQob2JqZWN0KSA8IDApCisJCWZzY2FjaGVfYWJvcnRfb2JqZWN0KG9iamVjdCk7CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogbm90aWZpY2F0aW9uIHRoYXQgdGhlIGF0dHJpYnV0ZXMgb24gYW4gb2JqZWN0IGhhdmUgY2hhbmdlZAorICovCitpbnQgX19mc2NhY2hlX2F0dHJfY2hhbmdlZChzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCisJX2VudGVyKCIlcCIsIGNvb2tpZSk7CisKKwlBU1NFUlRDTVAoY29va2llLT5kZWYtPnR5cGUsICE9LCBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZCk7CisKKwlvcCA9IGt6YWxsb2Moc2l6ZW9mKCpvcCksIEdGUF9LRVJORUwpOworCWlmICghb3ApIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vbWVtKTsKKwkJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZzY2FjaGVfb3BlcmF0aW9uX2luaXQob3AsIE5VTEwpOworCWZzY2FjaGVfb3BlcmF0aW9uX2luaXRfc2xvdyhvcCwgZnNjYWNoZV9hdHRyX2NoYW5nZWRfb3ApOworCW9wLT5mbGFncyA9IEZTQ0FDSEVfT1BfU0xPVyB8ICgxIDw8IEZTQ0FDSEVfT1BfRVhDTFVTSVZFKTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKQorCQlnb3RvIG5vYnVmczsKKwlvYmplY3QgPSBobGlzdF9lbnRyeShjb29raWUtPmJhY2tpbmdfb2JqZWN0cy5maXJzdCwKKwkJCSAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0LCBjb29raWVfbGluayk7CisKKwlpZiAoZnNjYWNoZV9zdWJtaXRfZXhjbHVzaXZlX29wKG9iamVjdCwgb3ApIDwgMCkKKwkJZ290byBub2J1ZnM7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX29rKTsKKwlmc2NhY2hlX3B1dF9vcGVyYXRpb24ob3ApOworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitub2J1ZnM6CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJa2ZyZWUob3ApOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9ub2J1ZnMpOworCV9sZWF2ZSgiID0gJWQiLCAtRU5PQlVGUyk7CisJcmV0dXJuIC1FTk9CVUZTOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfYXR0cl9jaGFuZ2VkKTsKKworLyoKKyAqIGhhbmRsZSBzZWNvbmRhcnkgZXhlY3V0aW9uIGdpdmVuIHRvIGEgcmV0cmlldmFsIG9wIG9uIGJlaGFsZiBvZiB0aGUKKyAqIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfcmV0cmlldmFsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsLCBvcC5mYXN0X3dvcmspOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwlfZW50ZXIoIntPUCV4fSIsIG9wLT5vcC5kZWJ1Z19pZCk7CisKKwlzdGFydCA9IGppZmZpZXM7CisJb3AtPm9wLnByb2Nlc3Nvcigmb3AtPm9wKTsKKwlmc2NhY2hlX2hpc3QoZnNjYWNoZV9vcHNfaGlzdG9ncmFtLCBzdGFydCk7CisJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKCZvcC0+b3ApOworfQorCisvKgorICogcmVsZWFzZSBhIHJldHJpZXZhbCBvcCByZWZlcmVuY2UKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9yZWxlYXNlX3JldHJpZXZhbF9vcChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKl9vcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wID0KKwkJY29udGFpbmVyX29mKF9vcCwgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsLCBvcCk7CisKKwlfZW50ZXIoIntPUCV4fSIsIG9wLT5vcC5kZWJ1Z19pZCk7CisKKwlmc2NhY2hlX2hpc3QoZnNjYWNoZV9yZXRyaWV2YWxfaGlzdG9ncmFtLCBvcC0+c3RhcnRfdGltZSk7CisJaWYgKG9wLT5jb250ZXh0KQorCQlmc2NhY2hlX3B1dF9jb250ZXh0KG9wLT5vcC5vYmplY3QtPmNvb2tpZSwgb3AtPmNvbnRleHQpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGFsbG9jYXRlIGEgcmV0cmlldmFsIG9wCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKmZzY2FjaGVfYWxsb2NfcmV0cmlldmFsKAorCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCWZzY2FjaGVfcndfY29tcGxldGVfdCBlbmRfaW9fZnVuYywKKwl2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3A7CisKKwkvKiBhbGxvY2F0ZSBhIHJldHJpZXZhbCBvcGVyYXRpb24gYW5kIGF0dGVtcHQgdG8gc3VibWl0IGl0ICovCisJb3AgPSBremFsbG9jKHNpemVvZigqb3ApLCBHRlBfTk9JTyk7CisJaWYgKCFvcCkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vbWVtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZnNjYWNoZV9vcGVyYXRpb25faW5pdCgmb3AtPm9wLCBmc2NhY2hlX3JlbGVhc2VfcmV0cmlldmFsX29wKTsKKwlvcC0+b3AuZmxhZ3MJPSBGU0NBQ0hFX09QX01ZVEhSRUFEIHwgKDEgPDwgRlNDQUNIRV9PUF9XQUlUSU5HKTsKKwlvcC0+bWFwcGluZwk9IG1hcHBpbmc7CisJb3AtPmVuZF9pb19mdW5jCT0gZW5kX2lvX2Z1bmM7CisJb3AtPmNvbnRleHQJPSBjb250ZXh0OworCW9wLT5zdGFydF90aW1lCT0gamlmZmllczsKKwlJTklUX1dPUksoJm9wLT5vcC5mYXN0X3dvcmssIGZzY2FjaGVfcmV0cmlldmFsX3dvcmspOworCUlOSVRfTElTVF9IRUFEKCZvcC0+dG9fZG8pOworCXJldHVybiBvcDsKK30KKworLyoKKyAqIHdhaXQgZm9yIGEgZGVmZXJyZWQgbG9va3VwIHRvIGNvbXBsZXRlCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV93YWl0X2Zvcl9kZWZlcnJlZF9sb29rdXAoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJdW5zaWduZWQgbG9uZyBqaWY7CisKKwlfZW50ZXIoIiIpOworCisJaWYgKCF0ZXN0X2JpdChGU0NBQ0hFX0NPT0tJRV9MT09LSU5HX1VQLCAmY29va2llLT5mbGFncykpIHsKKwkJX2xlYXZlKCIgPSAwIFtpbW1dIik7CisJCXJldHVybiAwOworCX0KKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfd2FpdCk7CisKKwlqaWYgPSBqaWZmaWVzOworCWlmICh3YWl0X29uX2JpdCgmY29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCwKKwkJCWZzY2FjaGVfd2FpdF9iaXRfaW50ZXJydXB0aWJsZSwKKwkJCVRBU0tfSU5URVJSVVBUSUJMRSkgIT0gMCkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHIpOworCQlfbGVhdmUoIiA9IC1FUkVTVEFSVFNZUyIpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCUFTU0VSVCghdGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCwgJmNvb2tpZS0+ZmxhZ3MpKTsKKworCXNtcF9ybWIoKTsKKwlmc2NhY2hlX2hpc3QoZnNjYWNoZV9yZXRyaWV2YWxfZGVsYXlfaGlzdG9ncmFtLCBqaWYpOworCV9sZWF2ZSgiID0gMCBbZGx5XSIpOworCXJldHVybiAwOworfQorCisvKgorICogcmVhZCBhIHBhZ2UgZnJvbSB0aGUgY2FjaGUgb3IgYWxsb2NhdGUgYSBibG9jayBpbiB3aGljaCB0byBzdG9yZSBpdAorICogLSB3ZSByZXR1cm46CisgKiAgIC1FTk9NRU0JLSBvdXQgb2YgbWVtb3J5LCBub3RoaW5nIGRvbmUKKyAqICAgLUVSRVNUQVJUU1lTIC0gaW50ZXJydXB0ZWQKKyAqICAgLUVOT0JVRlMJLSBubyBiYWNraW5nIG9iamVjdCBhdmFpbGFibGUgaW4gd2hpY2ggdG8gY2FjaGUgdGhlIGJsb2NrCisgKiAgIC1FTk9EQVRBCS0gbm8gZGF0YSBhdmFpbGFibGUgaW4gdGhlIGJhY2tpbmcgb2JqZWN0IGZvciB0aGlzIGJsb2NrCisgKiAgIDAJCS0gZGlzcGF0Y2hlZCBhIHJlYWQgLSBpdCdsbCBjYWxsIGVuZF9pb19mdW5jKCkgd2hlbiBmaW5pc2hlZAorICovCitpbnQgX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJIGZzY2FjaGVfcndfY29tcGxldGVfdCBlbmRfaW9fZnVuYywKKwkJCQkgdm9pZCAqY29udGV4dCwKKwkJCQkgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3A7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJaW50IHJldDsKKworCV9lbnRlcigiJXAsJXAsLCwiLCBjb29raWUsIHBhZ2UpOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFscyk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnM7CisKKwlBU1NFUlRDTVAoY29va2llLT5kZWYtPnR5cGUsICE9LCBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKTsKKwlBU1NFUlRDTVAocGFnZSwgIT0sIE5VTEwpOworCisJaWYgKGZzY2FjaGVfd2FpdF9mb3JfZGVmZXJyZWRfbG9va3VwKGNvb2tpZSkgPCAwKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJb3AgPSBmc2NhY2hlX2FsbG9jX3JldHJpZXZhbChwYWdlLT5tYXBwaW5nLCBlbmRfaW9fZnVuYywgY29udGV4dCk7CisJaWYgKCFvcCkgeworCQlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCisJaWYgKGhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpCisJCWdvdG8gbm9idWZzX3VubG9jazsKKwlvYmplY3QgPSBobGlzdF9lbnRyeShjb29raWUtPmJhY2tpbmdfb2JqZWN0cy5maXJzdCwKKwkJCSAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0LCBjb29raWVfbGluayk7CisKKwlBU1NFUlRDTVAob2JqZWN0LT5zdGF0ZSwgPiwgRlNDQUNIRV9PQkpFQ1RfTE9PS0lOR19VUCk7CisKKwlpZiAoZnNjYWNoZV9zdWJtaXRfb3Aob2JqZWN0LCAmb3AtPm9wKSA8IDApCisJCWdvdG8gbm9idWZzX3VubG9jazsKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbF9vcHMpOworCisJLyogcGluIHRoZSBuZXRmcyByZWFkIGNvbnRleHQgaW4gY2FzZSB3ZSBuZWVkIHRvIGRvIHRoZSBhY3R1YWwgbmV0ZnMKKwkgKiByZWFkIGJlY2F1c2Ugd2UndmUgZW5jb3VudGVyZWQgYSBjYWNoZSByZWFkIGZhaWx1cmUgKi8KKwlmc2NhY2hlX2dldF9jb250ZXh0KG9iamVjdC0+Y29va2llLCBvcC0+Y29udGV4dCk7CisKKwkvKiB3ZSB3YWl0IGZvciB0aGUgb3BlcmF0aW9uIHRvIGJlY29tZSBhY3RpdmUsIGFuZCB0aGVuIHByb2Nlc3MgaXQKKwkgKiAqaGVyZSosIGluIHRoaXMgdGhyZWFkLCBhbmQgbm90IGluIHRoZSB0aHJlYWQgcG9vbCAqLworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+b3AuZmxhZ3MpKSB7CisJCV9kZWJ1ZygiPj4+IFdUIik7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbF9vcF93YWl0cyk7CisJCXdhaXRfb25fYml0KCZvcC0+b3AuZmxhZ3MsIEZTQ0FDSEVfT1BfV0FJVElORywKKwkJCSAgICBmc2NhY2hlX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCV9kZWJ1ZygiPDw8IEdPIik7CisJfQorCisJLyogYXNrIHRoZSBjYWNoZSB0byBob25vdXIgdGhlIG9wZXJhdGlvbiAqLworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX0NPT0tJRV9OT19EQVRBX1lFVCwgJm9iamVjdC0+Y29va2llLT5mbGFncykpIHsKKwkJcmV0ID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5hbGxvY2F0ZV9wYWdlKG9wLCBwYWdlLCBnZnApOworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSAtRU5PREFUQTsKKwl9IGVsc2UgeworCQlyZXQgPSBvYmplY3QtPmNhY2hlLT5vcHMtPnJlYWRfb3JfYWxsb2NfcGFnZShvcCwgcGFnZSwgZ2ZwKTsKKwl9CisKKwlpZiAocmV0ID09IC1FTk9NRU0pCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9tZW0pOworCWVsc2UgaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfaW50cik7CisJZWxzZSBpZiAocmV0ID09IC1FTk9EQVRBKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vZGF0YSk7CisJZWxzZSBpZiAocmV0IDwgMCkKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnMpOworCWVsc2UKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19vayk7CisKKwlmc2NhY2hlX3B1dF9yZXRyaWV2YWwob3ApOworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7CisKK25vYnVmc191bmxvY2s6CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJa2ZyZWUob3ApOworbm9idWZzOgorCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9idWZzKTsKKwlfbGVhdmUoIiA9IC1FTk9CVUZTIik7CisJcmV0dXJuIC1FTk9CVUZTOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKTsKKworLyoKKyAqIHJlYWQgYSBsaXN0IG9mIHBhZ2UgZnJvbSB0aGUgY2FjaGUgb3IgYWxsb2NhdGUgYSBibG9jayBpbiB3aGljaCB0byBzdG9yZQorICogdGhlbQorICogLSB3ZSByZXR1cm46CisgKiAgIC1FTk9NRU0JLSBvdXQgb2YgbWVtb3J5LCBzb21lIHBhZ2VzIG1heSBiZSBiZWluZyByZWFkCisgKiAgIC1FUkVTVEFSVFNZUyAtIGludGVycnVwdGVkLCBzb21lIHBhZ2VzIG1heSBiZSBiZWluZyByZWFkCisgKiAgIC1FTk9CVUZTCS0gbm8gYmFja2luZyBvYmplY3Qgb3Igc3BhY2UgYXZhaWxhYmxlIGluIHdoaWNoIHRvIGNhY2hlIGFueQorICogICAgICAgICAgICAgICAgcGFnZXMgbm90IGJlaW5nIHJlYWQKKyAqICAgLUVOT0RBVEEJLSBubyBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgYmFja2luZyBvYmplY3QgZm9yIHNvbWUgb3IgYWxsIG9mCisgKiAgICAgICAgICAgICAgICB0aGUgcGFnZXMKKyAqICAgMAkJLSBkaXNwYXRjaGVkIGEgcmVhZCBvbiBhbGwgcGFnZXMKKyAqCisgKiBlbmRfaW9fZnVuYygpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIHBhZ2UgcmVhZCBmcm9tIHRoZSBjYWNoZSBhcyBpdCBpcworICogZmluaXNoZXMgYmVpbmcgcmVhZAorICoKKyAqIGFueSBwYWdlcyBmb3Igd2hpY2ggYSByZWFkIGlzIGRpc3BhdGNoZWQgd2lsbCBiZSByZW1vdmVkIGZyb20gcGFnZXMgYW5kCisgKiBucl9wYWdlcworICovCitpbnQgX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCSAgdW5zaWduZWQgKm5yX3BhZ2VzLAorCQkJCSAgZnNjYWNoZV9yd19jb21wbGV0ZV90IGVuZF9pb19mdW5jLAorCQkJCSAgdm9pZCAqY29udGV4dCwKKwkJCQkgIGdmcF90IGdmcCkKK3sKKwlmc2NhY2hlX3BhZ2VzX3JldHJpZXZhbF9mdW5jX3QgZnVuYzsKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCwlZCwsLCIsIGNvb2tpZSwgKm5yX3BhZ2VzKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHMpOworCisJaWYgKGhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpCisJCWdvdG8gbm9idWZzOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisJQVNTRVJUQ01QKCpucl9wYWdlcywgPiwgMCk7CisJQVNTRVJUKCFsaXN0X2VtcHR5KHBhZ2VzKSk7CisKKwlpZiAoZnNjYWNoZV93YWl0X2Zvcl9kZWZlcnJlZF9sb29rdXAoY29va2llKSA8IDApCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlvcCA9IGZzY2FjaGVfYWxsb2NfcmV0cmlldmFsKG1hcHBpbmcsIGVuZF9pb19mdW5jLCBjb250ZXh0KTsKKwlpZiAoIW9wKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKQorCQlnb3RvIG5vYnVmc191bmxvY2s7CisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJaWYgKGZzY2FjaGVfc3VibWl0X29wKG9iamVjdCwgJm9wLT5vcCkgPCAwKQorCQlnb3RvIG5vYnVmc191bmxvY2s7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxfb3BzKTsKKworCS8qIHBpbiB0aGUgbmV0ZnMgcmVhZCBjb250ZXh0IGluIGNhc2Ugd2UgbmVlZCB0byBkbyB0aGUgYWN0dWFsIG5ldGZzCisJICogcmVhZCBiZWNhdXNlIHdlJ3ZlIGVuY291bnRlcmVkIGEgY2FjaGUgcmVhZCBmYWlsdXJlICovCisJZnNjYWNoZV9nZXRfY29udGV4dChvYmplY3QtPmNvb2tpZSwgb3AtPmNvbnRleHQpOworCisJLyogd2Ugd2FpdCBmb3IgdGhlIG9wZXJhdGlvbiB0byBiZWNvbWUgYWN0aXZlLCBhbmQgdGhlbiBwcm9jZXNzIGl0CisJICogKmhlcmUqLCBpbiB0aGlzIHRocmVhZCwgYW5kIG5vdCBpbiB0aGUgdGhyZWFkIHBvb2wgKi8KKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9PUF9XQUlUSU5HLCAmb3AtPm9wLmZsYWdzKSkgeworCQlfZGVidWcoIj4+PiBXVCIpOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxfb3Bfd2FpdHMpOworCQl3YWl0X29uX2JpdCgmb3AtPm9wLmZsYWdzLCBGU0NBQ0hFX09QX1dBSVRJTkcsCisJCQkgICAgZnNjYWNoZV93YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlfZGVidWcoIjw8PCBHTyIpOworCX0KKworCS8qIGFzayB0aGUgY2FjaGUgdG8gaG9ub3VyIHRoZSBvcGVyYXRpb24gKi8KKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQsICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKQorCQlmdW5jID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5hbGxvY2F0ZV9wYWdlczsKKwllbHNlCisJCWZ1bmMgPSBvYmplY3QtPmNhY2hlLT5vcHMtPnJlYWRfb3JfYWxsb2NfcGFnZXM7CisJcmV0ID0gZnVuYyhvcCwgcGFnZXMsIG5yX3BhZ2VzLCBnZnApOworCisJaWYgKHJldCA9PSAtRU5PTUVNKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vbWVtKTsKKwllbHNlIGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHIpOworCWVsc2UgaWYgKHJldCA9PSAtRU5PREFUQSkKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2RhdGEpOworCWVsc2UgaWYgKHJldCA8IDApCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9idWZzKTsKKwllbHNlCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfb2spOworCisJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG9wKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub2J1ZnNfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCWtmcmVlKG9wKTsKK25vYnVmczoKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vYnVmcyk7CisJX2xlYXZlKCIgPSAtRU5PQlVGUyIpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMpOworCisvKgorICogYWxsb2NhdGUgYSBibG9jayBpbiB0aGUgY2FjaGUgb24gd2hpY2ggdG8gc3RvcmUgYSBwYWdlCisgKiAtIHdlIHJldHVybjoKKyAqICAgLUVOT01FTQktIG91dCBvZiBtZW1vcnksIG5vdGhpbmcgZG9uZQorICogICAtRVJFU1RBUlRTWVMgLSBpbnRlcnJ1cHRlZAorICogICAtRU5PQlVGUwktIG5vIGJhY2tpbmcgb2JqZWN0IGF2YWlsYWJsZSBpbiB3aGljaCB0byBjYWNoZSB0aGUgYmxvY2sKKyAqICAgMAkJLSBibG9jayBhbGxvY2F0ZWQKKyAqLworaW50IF9fZnNjYWNoZV9hbGxvY19wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCVwLCwsIiwgY29va2llLCBwYWdlKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FsbG9jcyk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnM7CisKKwlBU1NFUlRDTVAoY29va2llLT5kZWYtPnR5cGUsICE9LCBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKTsKKwlBU1NFUlRDTVAocGFnZSwgIT0sIE5VTEwpOworCisJaWYgKGZzY2FjaGVfd2FpdF9mb3JfZGVmZXJyZWRfbG9va3VwKGNvb2tpZSkgPCAwKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJb3AgPSBmc2NhY2hlX2FsbG9jX3JldHJpZXZhbChwYWdlLT5tYXBwaW5nLCBOVUxMLCBOVUxMKTsKKwlpZiAoIW9wKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKQorCQlnb3RvIG5vYnVmc191bmxvY2s7CisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJaWYgKGZzY2FjaGVfc3VibWl0X29wKG9iamVjdCwgJm9wLT5vcCkgPCAwKQorCQlnb3RvIG5vYnVmc191bmxvY2s7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hbGxvY19vcHMpOworCisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfT1BfV0FJVElORywgJm9wLT5vcC5mbGFncykpIHsKKwkJX2RlYnVnKCI+Pj4gV1QiKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2Nfb3Bfd2FpdHMpOworCQl3YWl0X29uX2JpdCgmb3AtPm9wLmZsYWdzLCBGU0NBQ0hFX09QX1dBSVRJTkcsCisJCQkgICAgZnNjYWNoZV93YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlfZGVidWcoIjw8PCBHTyIpOworCX0KKworCS8qIGFzayB0aGUgY2FjaGUgdG8gaG9ub3VyIHRoZSBvcGVyYXRpb24gKi8KKwlyZXQgPSBvYmplY3QtPmNhY2hlLT5vcHMtPmFsbG9jYXRlX3BhZ2Uob3AsIHBhZ2UsIGdmcCk7CisKKwlpZiAocmV0IDwgMCkKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2NzX25vYnVmcyk7CisJZWxzZQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hbGxvY3Nfb2spOworCisJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG9wKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub2J1ZnNfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCWtmcmVlKG9wKTsKK25vYnVmczoKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hbGxvY3Nfbm9idWZzKTsKKwlfbGVhdmUoIiA9IC1FTk9CVUZTIik7CisJcmV0dXJuIC1FTk9CVUZTOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfYWxsb2NfcGFnZSk7CisKKy8qCisgKiByZWxlYXNlIGEgd3JpdGUgb3AgcmVmZXJlbmNlCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfcmVsZWFzZV93cml0ZV9vcChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKl9vcCkKK3sKKwlfZW50ZXIoIntPUCV4fSIsIF9vcC0+ZGVidWdfaWQpOworfQorCisvKgorICogcGVyZm9ybSB0aGUgYmFja2dyb3VuZCBzdG9yYWdlIG9mIGEgcGFnZSBpbnRvIHRoZSBjYWNoZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3dyaXRlX29wKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqX29wKQoreworCXN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UgKm9wID0KKwkJY29udGFpbmVyX29mKF9vcCwgc3RydWN0IGZzY2FjaGVfc3RvcmFnZSwgb3ApOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0gb3AtPm9wLm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IG9iamVjdC0+Y29va2llOworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIG47CisJdm9pZCAqcmVzdWx0c1sxXTsKKwlpbnQgcmV0OworCisJX2VudGVyKCJ7T1AleCwlZH0iLCBvcC0+b3AuZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+b3AudXNhZ2UpKTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisKKwlpZiAoIWZzY2FjaGVfb2JqZWN0X2lzX2FjdGl2ZShvYmplY3QpKSB7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwkJX2xlYXZlKCIiKTsKKwkJcmV0dXJuOworCX0KKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3JlX2NhbGxzKTsKKworCS8qIGZpbmQgYSBwYWdlIHRvIHN0b3JlICovCisJcGFnZSA9IE5VTEw7CisJbiA9IHJhZGl4X3RyZWVfZ2FuZ19sb29rdXBfdGFnKCZjb29raWUtPnN0b3JlcywgcmVzdWx0cywgMCwgMSwKKwkJCQkgICAgICAgRlNDQUNIRV9DT09LSUVfUEVORElOR19UQUcpOworCWlmIChuICE9IDEpCisJCWdvdG8gc3VwZXJzZWRlZDsKKwlwYWdlID0gcmVzdWx0c1swXTsKKwlfZGVidWcoImdhbmcgJWQgWyVseF0iLCBuLCBwYWdlLT5pbmRleCk7CisJaWYgKHBhZ2UtPmluZGV4ID4gb3AtPnN0b3JlX2xpbWl0KQorCQlnb3RvIHN1cGVyc2VkZWQ7CisKKwlyYWRpeF90cmVlX3RhZ19jbGVhcigmY29va2llLT5zdG9yZXMsIHBhZ2UtPmluZGV4LAorCQkJICAgICBGU0NBQ0hFX0NPT0tJRV9QRU5ESU5HX1RBRyk7CisKKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChwYWdlKSB7CisJCXJldCA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+d3JpdGVfcGFnZShvcCwgcGFnZSk7CisJCWZzY2FjaGVfZW5kX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlpZiAocmV0IDwgMCkKKwkJCWZzY2FjaGVfYWJvcnRfb2JqZWN0KG9iamVjdCk7CisJCWVsc2UKKwkJCWZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oJm9wLT5vcCk7CisJfQorCisJX2xlYXZlKCIiKTsKKwlyZXR1cm47CisKK3N1cGVyc2VkZWQ6CisJLyogdGhpcyB3cml0ZXIgaXMgZ29pbmcgYXdheSBhbmQgdGhlcmUgYXJlbid0IGFueSBtb3JlIHRoaW5ncyB0bworCSAqIHdyaXRlICovCisJX2RlYnVnKCJjZWFzZSIpOworCWNsZWFyX2JpdChGU0NBQ0hFX09CSkVDVF9QRU5ESU5HX1dSSVRFLCAmb2JqZWN0LT5mbGFncyk7CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIHJlcXVlc3QgYSBwYWdlIGJlIHN0b3JlZCBpbiB0aGUgY2FjaGUKKyAqIC0gcmV0dXJuczoKKyAqICAgLUVOT01FTQktIG91dCBvZiBtZW1vcnksIG5vdGhpbmcgZG9uZQorICogICAtRU5PQlVGUwktIG5vIGJhY2tpbmcgb2JqZWN0IGF2YWlsYWJsZSBpbiB3aGljaCB0byBjYWNoZSB0aGUgcGFnZQorICogICAwCQktIGRpc3BhdGNoZWQgYSB3cml0ZSAtIGl0J2xsIGNhbGwgZW5kX2lvX2Z1bmMoKSB3aGVuIGZpbmlzaGVkCisgKgorICogaWYgdGhlIGNvb2tpZSBzdGlsbCBoYXMgYSBiYWNraW5nIG9iamVjdCBhdCB0aGlzIHBvaW50LCB0aGF0IG9iamVjdCBjYW4gYmUKKyAqIGluIG9uZSBvZiBhIGZldyBzdGF0ZXMgd2l0aCByZXNwZWN0IHRvIHN0b3JhZ2UgcHJvY2Vzc2luZzoKKyAqCisgKiAgKDEpIG5lZ2F0aXZlIGxvb2t1cCwgb2JqZWN0IG5vdCB5ZXQgY3JlYXRlZCAoRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcgaXMKKyAqICAgICAgc2V0KQorICoKKyAqCShhKSBubyB3cml0ZXMgeWV0IChzZXQgRlNDQUNIRV9DT09LSUVfUEVORElOR19GSUxMIGFuZCBxdWV1ZSBkZWZlcnJlZAorICoJICAgIGZpbGwgb3ApCisgKgorICoJKGIpIHdyaXRlcyBkZWZlcnJlZCB0aWxsIHBvc3QtY3JlYXRpb24gKG1hcmsgcGFnZSBmb3Igd3JpdGluZyBhbmQKKyAqCSAgICByZXR1cm4gaW1tZWRpYXRlbHkpCisgKgorICogICgyKSBuZWdhdGl2ZSBsb29rdXAsIG9iamVjdCBjcmVhdGVkLCBpbml0aWFsIGZpbGwgYmVpbmcgbWFkZSBmcm9tIG5ldGZzCisgKiAgICAgIChGU0NBQ0hFX0NPT0tJRV9JTklUSUFMX0ZJTEwgaXMgc2V0KQorICoKKyAqCShhKSBmaWxsIHBvaW50IG5vdCB5ZXQgcmVhY2hlZCB0aGlzIHBhZ2UgKG1hcmsgcGFnZSBmb3Igd3JpdGluZyBhbmQKKyAqICAgICAgICAgIHJldHVybikKKyAqCisgKgkoYikgZmlsbCBwb2ludCBwYXNzZWQgdGhpcyBwYWdlIChxdWV1ZSBvcCB0byBzdG9yZSB0aGlzIHBhZ2UpCisgKgorICogICgzKSBvYmplY3QgZXh0YW50IChxdWV1ZSBvcCB0byBzdG9yZSB0aGlzIHBhZ2UpCisgKgorICogYW55IG90aGVyIHN0YXRlIGlzIGludmFsaWQKKyAqLworaW50IF9fZnNjYWNoZV93cml0ZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlcCwleCwiLCBjb29raWUsICh1MzIpIHBhZ2UtPmZsYWdzKTsKKworCUFTU0VSVENNUChjb29raWUtPmRlZi0+dHlwZSwgIT0sIEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpOworCUFTU0VSVChQYWdlRnNDYWNoZShwYWdlKSk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZXMpOworCisJb3AgPSBremFsbG9jKHNpemVvZigqb3ApLCBHRlBfTk9JTyk7CisJaWYgKCFvcCkKKwkJZ290byBub21lbTsKKworCWZzY2FjaGVfb3BlcmF0aW9uX2luaXQoJm9wLT5vcCwgZnNjYWNoZV9yZWxlYXNlX3dyaXRlX29wKTsKKwlmc2NhY2hlX29wZXJhdGlvbl9pbml0X3Nsb3coJm9wLT5vcCwgZnNjYWNoZV93cml0ZV9vcCk7CisJb3AtPm9wLmZsYWdzID0gRlNDQUNIRV9PUF9TTE9XIHwgKDEgPDwgRlNDQUNIRV9PUF9XQUlUSU5HKTsKKworCXJldCA9IHJhZGl4X3RyZWVfcHJlbG9hZChnZnAgJiB+X19HRlBfSElHSE1FTSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gbm9tZW1fZnJlZTsKKworCXJldCA9IC1FTk9CVUZTOworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKQorCQlnb3RvIG5vYnVmczsKKwlvYmplY3QgPSBobGlzdF9lbnRyeShjb29raWUtPmJhY2tpbmdfb2JqZWN0cy5maXJzdCwKKwkJCSAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0LCBjb29raWVfbGluayk7CisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfSU9FUlJPUiwgJm9iamVjdC0+Y2FjaGUtPmZsYWdzKSkKKwkJZ290byBub2J1ZnM7CisKKwkvKiBhZGQgdGhlIHBhZ2UgdG8gdGhlIHBlbmRpbmctc3RvcmFnZSByYWRpeCB0cmVlIG9uIHRoZSBiYWNraW5nCisJICogb2JqZWN0ICovCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCisJX2RlYnVnKCJzdG9yZSBsaW1pdCAlbGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2JqZWN0LT5zdG9yZV9saW1pdCk7CisKKwlyZXQgPSByYWRpeF90cmVlX2luc2VydCgmY29va2llLT5zdG9yZXMsIHBhZ2UtPmluZGV4LCBwYWdlKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FRVhJU1QpCisJCQlnb3RvIGFscmVhZHlfcXVldWVkOworCQlfZGVidWcoImluc2VydCBmYWlsZWQgJWQiLCByZXQpOworCQlnb3RvIG5vYnVmc191bmxvY2tfb2JqOworCX0KKworCXJhZGl4X3RyZWVfdGFnX3NldCgmY29va2llLT5zdG9yZXMsIHBhZ2UtPmluZGV4LAorCQkJICAgRlNDQUNIRV9DT09LSUVfUEVORElOR19UQUcpOworCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOworCisJLyogd2Ugb25seSB3YW50IG9uZSB3cml0ZXIgYXQgYSB0aW1lLCBidXQgd2UgZG8gbmVlZCB0byBxdWV1ZSBuZXcKKwkgKiB3cml0ZXJzIGFmdGVyIGV4Y2x1c2l2ZSBvcHMgKi8KKwlpZiAodGVzdF9hbmRfc2V0X2JpdChGU0NBQ0hFX09CSkVDVF9QRU5ESU5HX1dSSVRFLCAmb2JqZWN0LT5mbGFncykpCisJCWdvdG8gYWxyZWFkeV9wZW5kaW5nOworCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwlvcC0+b3AuZGVidWdfaWQJPSBhdG9taWNfaW5jX3JldHVybigmZnNjYWNoZV9vcF9kZWJ1Z19pZCk7CisJb3AtPnN0b3JlX2xpbWl0ID0gb2JqZWN0LT5zdG9yZV9saW1pdDsKKworCWlmIChmc2NhY2hlX3N1Ym1pdF9vcChvYmplY3QsICZvcC0+b3ApIDwgMCkKKwkJZ290byBzdWJtaXRfZmFpbGVkOworCisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3JlX29wcyk7CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVzX29rKTsKKworCS8qIHRoZSBzbG93IHdvcmsgcXVldWUgbm93IGNhcnJpZXMgaXRzIG93biByZWYgb24gdGhlIG9iamVjdCAqLworCWZzY2FjaGVfcHV0X29wZXJhdGlvbigmb3AtPm9wKTsKKwlfbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKKworYWxyZWFkeV9xdWV1ZWQ6CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVzX2FnYWluKTsKK2FscmVhZHlfcGVuZGluZzoKKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJa2ZyZWUob3ApOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3Jlc19vayk7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK3N1Ym1pdF9mYWlsZWQ6CisJcmFkaXhfdHJlZV9kZWxldGUoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCXJldCA9IC1FTk9CVUZTOworCWdvdG8gbm9idWZzOworCitub2J1ZnNfdW5sb2NrX29iajoKKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKK25vYnVmczoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJa2ZyZWUob3ApOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3Jlc19ub2J1ZnMpOworCV9sZWF2ZSgiID0gLUVOT0JVRlMiKTsKKwlyZXR1cm4gLUVOT0JVRlM7CisKK25vbWVtX2ZyZWU6CisJa2ZyZWUob3ApOworbm9tZW06CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVzX29vbSk7CisJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV93cml0ZV9wYWdlKTsKKworLyoKKyAqIHJlbW92ZSBhIHBhZ2UgZnJvbSB0aGUgY2FjaGUKKyAqLwordm9pZCBfX2ZzY2FjaGVfdW5jYWNoZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKworCV9lbnRlcigiLCVwIiwgcGFnZSk7CisKKwlBU1NFUlRDTVAoY29va2llLT5kZWYtPnR5cGUsICE9LCBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKTsKKwlBU1NFUlRDTVAocGFnZSwgIT0sIE5VTEwpOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fdW5jYWNoZXMpOworCisJLyogY2FjaGUgd2l0aGRyYXdhbCBtYXkgYmVhdCB1cyB0byBpdCAqLworCWlmICghUGFnZUZzQ2FjaGUocGFnZSkpCisJCWdvdG8gZG9uZTsKKworCS8qIGdldCB0aGUgb2JqZWN0ICovCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCisJaWYgKGhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpIHsKKwkJQ2xlYXJQYWdlRnNDYWNoZShwYWdlKTsKKwkJZ290byBkb25lX3VubG9jazsKKwl9CisKKwlvYmplY3QgPSBobGlzdF9lbnRyeShjb29raWUtPmJhY2tpbmdfb2JqZWN0cy5maXJzdCwKKwkJCSAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0LCBjb29raWVfbGluayk7CisKKwkvKiB0aGVyZSBtaWdodCBub3cgYmUgc3R1ZmYgb24gZGlzayB3ZSBjb3VsZCByZWFkICovCisJY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX05PX0RBVEFfWUVULCAmY29va2llLT5mbGFncyk7CisKKwkvKiBvbmx5IGludm9rZSB0aGUgY2FjaGUgYmFja2VuZCBpZiB3ZSBtYW5hZ2VkIHRvIG1hcmsgdGhlIHBhZ2UKKwkgKiB1bmNhY2hlZCBoZXJlOyB0aGlzIGRlYWxzIHdpdGggc3luY2hyb25pc2F0aW9uIHZzIHdpdGhkcmF3YWwgKi8KKwlpZiAoVGVzdENsZWFyUGFnZUZzQ2FjaGUocGFnZSkgJiYKKwkgICAgb2JqZWN0LT5jYWNoZS0+b3BzLT51bmNhY2hlX3BhZ2UpIHsKKwkJLyogdGhlIGNhY2hlIGJhY2tlbmQgcmVsZWFzZXMgdGhlIGNvb2tpZSBsb2NrICovCisJCW9iamVjdC0+Y2FjaGUtPm9wcy0+dW5jYWNoZV9wYWdlKG9iamVjdCwgcGFnZSk7CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmVfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworZG9uZToKKwlfbGVhdmUoIiIpOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfdW5jYWNoZV9wYWdlKTsKKworLyoqCisgKiBmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkIC0gTWFyayBwYWdlcyBhcyBiZWluZyBjYWNoZWQKKyAqIEBvcDogVGhlIHJldHJpZXZhbCBvcCBwYWdlcyBhcmUgYmVpbmcgbWFya2VkIGZvcgorICogQHBhZ2V2ZWM6IFRoZSBwYWdlcyB0byBiZSBtYXJrZWQKKyAqCisgKiBNYXJrIGEgYnVuY2ggb2YgbmV0ZnMgcGFnZXMgYXMgYmVpbmcgY2FjaGVkLiAgQWZ0ZXIgdGhpcyBpcyBjYWxsZWQsCisgKiB0aGUgbmV0ZnMgbXVzdCBjYWxsIGZzY2FjaGVfdW5jYWNoZV9wYWdlKCkgdG8gcmVtb3ZlIHRoZSBtYXJrLgorICovCit2b2lkIGZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgICBzdHJ1Y3QgcGFnZXZlYyAqcGFnZXZlYykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IG9wLT5vcC5vYmplY3QtPmNvb2tpZTsKKwl1bnNpZ25lZCBsb25nIGxvb3A7CisKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9TVEFUUworCWF0b21pY19hZGQocGFnZXZlYy0+bnIsICZmc2NhY2hlX25fbWFya3MpOworI2VuZGlmCisKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgcGFnZXZlYy0+bnI7IGxvb3ArKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2V2ZWMtPnBhZ2VzW2xvb3BdOworCisJCV9kZWJ1ZygiLSBtYXJrICVweyVseH0iLCBwYWdlLCBwYWdlLT5pbmRleCk7CisJCWlmIChUZXN0U2V0UGFnZUZzQ2FjaGUocGFnZSkpIHsKKwkJCXN0YXRpYyBib29sIG9uY2Vfb25seTsKKwkJCWlmICghb25jZV9vbmx5KSB7CisJCQkJb25jZV9vbmx5ID0gdHJ1ZTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJGUy1DYWNoZToiCisJCQkJICAgICAgICIgQ29va2llIHR5cGUgJXMgbWFya2VkIHBhZ2UgJWx4IgorCQkJCSAgICAgICAiIG11bHRpcGxlIHRpbWVzXG4iLAorCQkJCSAgICAgICBjb29raWUtPmRlZi0+bmFtZSwgcGFnZS0+aW5kZXgpOworCQkJfQorCQl9CisJfQorCisJaWYgKGNvb2tpZS0+ZGVmLT5tYXJrX3BhZ2VzX2NhY2hlZCkKKwkJY29va2llLT5kZWYtPm1hcmtfcGFnZXNfY2FjaGVkKGNvb2tpZS0+bmV0ZnNfZGF0YSwKKwkJCQkJICAgICAgIG9wLT5tYXBwaW5nLCBwYWdldmVjKTsKKwlwYWdldmVjX3JlaW5pdChwYWdldmVjKTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZCk7CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL3Byb2MuYyBiL2ZzL2ZzY2FjaGUvcHJvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWFiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL3Byb2MuYwpAQCAtMCwwICsxLDY4IEBACisvKiBGUy1DYWNoZSBzdGF0aXN0aWNzIHZpZXdpbmcgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBPUEVSQVRJT04KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisvKgorICogaW5pdGlhbGlzZSB0aGUgL3Byb2MvZnMvZnNjYWNoZS8gZGlyZWN0b3J5CisgKi8KK2ludCBfX2luaXQgZnNjYWNoZV9wcm9jX2luaXQodm9pZCkKK3sKKwlfZW50ZXIoIiIpOworCisJaWYgKCFwcm9jX21rZGlyKCJmcy9mc2NhY2hlIiwgTlVMTCkpCisJCWdvdG8gZXJyb3JfZGlyOworCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfU1RBVFMKKwlpZiAoIXByb2NfY3JlYXRlKCJmcy9mc2NhY2hlL3N0YXRzIiwgU19JRlJFRyB8IDA0NDQsIE5VTEwsCisJCQkgJmZzY2FjaGVfc3RhdHNfZm9wcykpCisJCWdvdG8gZXJyb3Jfc3RhdHM7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTQorCWlmICghcHJvY19jcmVhdGUoImZzL2ZzY2FjaGUvaGlzdG9ncmFtIiwgU19JRlJFRyB8IDA0NDQsIE5VTEwsCisJCQkgJmZzY2FjaGVfaGlzdG9ncmFtX2ZvcHMpKQorCQlnb3RvIGVycm9yX2hpc3RvZ3JhbTsKKyNlbmRpZgorCisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0KK2Vycm9yX2hpc3RvZ3JhbToKKyNlbmRpZgorI2lmZGVmIENPTkZJR19GU0NBQ0hFX1NUQVRTCisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2ZzY2FjaGUvc3RhdHMiLCBOVUxMKTsKK2Vycm9yX3N0YXRzOgorI2VuZGlmCisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2ZzY2FjaGUiLCBOVUxMKTsKK2Vycm9yX2RpcjoKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKKyAqIGNsZWFuIHVwIHRoZSAvcHJvYy9mcy9mc2NhY2hlLyBkaXJlY3RvcnkKKyAqLwordm9pZCBmc2NhY2hlX3Byb2NfY2xlYW51cCh2b2lkKQoreworI2lmZGVmIENPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTQorCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9mc2NhY2hlL2hpc3RvZ3JhbSIsIE5VTEwpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfU1RBVFMKKwlyZW1vdmVfcHJvY19lbnRyeSgiZnMvZnNjYWNoZS9zdGF0cyIsIE5VTEwpOworI2VuZGlmCisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2ZzY2FjaGUiLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvc3RhdHMuYyBiL2ZzL2ZzY2FjaGUvc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRlYjk5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9zdGF0cy5jCkBAIC0wLDAgKzEsMjEyIEBACisvKiBGUy1DYWNoZSBzdGF0aXN0aWNzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBUSFJFQUQKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisvKgorICogb3BlcmF0aW9uIGNvdW50ZXJzCisgKi8KK2F0b21pY190IGZzY2FjaGVfbl9vcF9wZW5kOworYXRvbWljX3QgZnNjYWNoZV9uX29wX3J1bjsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9lbnF1ZXVlOworYXRvbWljX3QgZnNjYWNoZV9uX29wX3JlcXVldWU7CithdG9taWNfdCBmc2NhY2hlX25fb3BfZGVmZXJyZWRfcmVsZWFzZTsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9yZWxlYXNlOworYXRvbWljX3QgZnNjYWNoZV9uX29wX2djOworCithdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkOworYXRvbWljX3QgZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9vazsKK2F0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9idWZzOworYXRvbWljX3QgZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9ub21lbTsKK2F0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfY2FsbHM7CisKK2F0b21pY190IGZzY2FjaGVfbl9hbGxvY3M7CithdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzX29rOworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc193YWl0OworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19ub2J1ZnM7CithdG9taWNfdCBmc2NhY2hlX25fYWxsb2Nfb3BzOworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jX29wX3dhaXRzOworCithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsczsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX29rOworYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfd2FpdDsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX25vZGF0YTsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX25vYnVmczsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHI7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbTsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxfb3BzOworYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbF9vcF93YWl0czsKKworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlczsKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfb2s7CithdG9taWNfdCBmc2NhY2hlX25fc3RvcmVzX2FnYWluOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19ub2J1ZnM7CithdG9taWNfdCBmc2NhY2hlX25fc3RvcmVzX29vbTsKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZV9vcHM7CithdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfY2FsbHM7CisKK2F0b21pY190IGZzY2FjaGVfbl9tYXJrczsKK2F0b21pY190IGZzY2FjaGVfbl91bmNhY2hlczsKKworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzOworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX251bGw7CithdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfbm9fY2FjaGU7CithdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfb2s7CithdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfbm9idWZzOworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX29vbTsKKworYXRvbWljX3QgZnNjYWNoZV9uX3VwZGF0ZXM7CithdG9taWNfdCBmc2NhY2hlX25fdXBkYXRlc19udWxsOworYXRvbWljX3QgZnNjYWNoZV9uX3VwZGF0ZXNfcnVuOworCithdG9taWNfdCBmc2NhY2hlX25fcmVsaW5xdWlzaGVzOworYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlc19udWxsOworYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlc193YWl0Y3J0OworCithdG9taWNfdCBmc2NhY2hlX25fY29va2llX2luZGV4OworYXRvbWljX3QgZnNjYWNoZV9uX2Nvb2tpZV9kYXRhOworYXRvbWljX3QgZnNjYWNoZV9uX2Nvb2tpZV9zcGVjaWFsOworCithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2FsbG9jOworYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9ub19hbGxvYzsKK2F0b21pY190IGZzY2FjaGVfbl9vYmplY3RfbG9va3VwczsKK2F0b21pY190IGZzY2FjaGVfbl9vYmplY3RfbG9va3Vwc19uZWdhdGl2ZTsKK2F0b21pY190IGZzY2FjaGVfbl9vYmplY3RfbG9va3Vwc19wb3NpdGl2ZTsKK2F0b21pY190IGZzY2FjaGVfbl9vYmplY3RfY3JlYXRlZDsKK2F0b21pY190IGZzY2FjaGVfbl9vYmplY3RfYXZhaWw7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2RlYWQ7CisKK2F0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9ub25lOworYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X29rYXk7CithdG9taWNfdCBmc2NhY2hlX25fY2hlY2thdXhfdXBkYXRlOworYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X29ic29sZXRlOworCisvKgorICogZGlzcGxheSB0aGUgZ2VuZXJhbCBzdGF0aXN0aWNzCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzZXFfcHV0cyhtLCAiRlMtQ2FjaGUgc3RhdGlzdGljc1xuIik7CisKKwlzZXFfcHJpbnRmKG0sICJDb29raWVzOiBpZHg9JXUgZGF0PSV1IHNwYz0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb29raWVfaW5kZXgpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2Nvb2tpZV9kYXRhKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb29raWVfc3BlY2lhbCkpOworCisJc2VxX3ByaW50ZihtLCAiT2JqZWN0czogYWxjPSV1IG5hbD0ldSBhdmw9JXUgZGVkPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9hbGxvYyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb2JqZWN0X25vX2FsbG9jKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfYXZhaWwpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9kZWFkKSk7CisJc2VxX3ByaW50ZihtLCAiQ2hrQXV4IDogbm9uPSV1IG9rPSV1IHVwZD0ldSBvYnM9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY2hlY2thdXhfbm9uZSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY2hlY2thdXhfb2theSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY2hlY2thdXhfdXBkYXRlKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jaGVja2F1eF9vYnNvbGV0ZSkpOworCisJc2VxX3ByaW50ZihtLCAiUGFnZXMgIDogbXJrPSV1IHVuYz0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9tYXJrcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fdW5jYWNoZXMpKTsKKworCXNlcV9wcmludGYobSwgIkFjcXVpcmU6IG49JXUgbnVsPSV1IG5vYz0ldSBvaz0ldSBuYmY9JXUiCisJCSAgICIgb29tPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FjcXVpcmVzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hY3F1aXJlc19udWxsKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hY3F1aXJlc19ub19jYWNoZSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWNxdWlyZXNfb2spLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FjcXVpcmVzX25vYnVmcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWNxdWlyZXNfb29tKSk7CisKKwlzZXFfcHJpbnRmKG0sICJMb29rdXBzOiBuPSV1IG5lZz0ldSBwb3M9JXUgY3J0PSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfbG9va3Vwc19uZWdhdGl2ZSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfcG9zaXRpdmUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9jcmVhdGVkKSk7CisKKwlzZXFfcHJpbnRmKG0sICJVcGRhdGVzOiBuPSV1IG51bD0ldSBydW49JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fdXBkYXRlcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fdXBkYXRlc19udWxsKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl91cGRhdGVzX3J1bikpOworCisJc2VxX3ByaW50ZihtLCAiUmVsaW5xczogbj0ldSBudWw9JXUgd2NyPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3JlbGlucXVpc2hlcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzX251bGwpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3JlbGlucXVpc2hlc193YWl0Y3J0KSk7CisKKwlzZXFfcHJpbnRmKG0sICJBdHRyQ2hnOiBuPSV1IG9rPSV1IG5iZj0ldSBvb209JXUgcnVuPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZCksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX29rKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9idWZzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9tZW0pLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9jYWxscykpOworCisJc2VxX3ByaW50ZihtLCAiQWxsb2NzIDogbj0ldSBvaz0ldSB3dD0ldSBuYmY9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY3Nfb2spLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FsbG9jc193YWl0KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY3Nfbm9idWZzKSk7CisJc2VxX3ByaW50ZihtLCAiQWxsb2NzIDogb3BzPSV1IG93dD0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY19vcHMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FsbG9jX29wX3dhaXRzKSk7CisKKwlzZXFfcHJpbnRmKG0sICJSZXRydmxzOiBuPSV1IG9rPSV1IHd0PSV1IG5vZD0ldSBuYmY9JXUiCisJCSAgICIgaW50PSV1IG9vbT0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX29rKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX3dhaXQpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9kYXRhKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vYnVmcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19pbnRyKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vbWVtKSk7CisJc2VxX3ByaW50ZihtLCAiUmV0cnZsczogb3BzPSV1IG93dD0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxfb3BzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxfb3Bfd2FpdHMpKTsKKworCXNlcV9wcmludGYobSwgIlN0b3JlcyA6IG49JXUgb2s9JXUgYWduPSV1IG5iZj0ldSBvb209JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9zdG9yZXNfb2spLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3Jlc19hZ2FpbiksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVzX25vYnVmcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVzX29vbSkpOworCXNlcV9wcmludGYobSwgIlN0b3JlcyA6IG9wcz0ldSBydW49JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVfb3BzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9zdG9yZV9jYWxscykpOworCisJc2VxX3ByaW50ZihtLCAiT3BzICAgIDogcGVuZD0ldSBydW49JXUgZW5xPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX3BlbmQpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX3J1biksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb3BfZW5xdWV1ZSkpOworCXNlcV9wcmludGYobSwgIk9wcyAgICA6IGRmcj0ldSByZWw9JXUgZ2M9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb3BfZGVmZXJyZWRfcmVsZWFzZSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb3BfcmVsZWFzZSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb3BfZ2MpKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG9wZW4gIi9wcm9jL2ZzL2ZzY2FjaGUvc3RhdHMiIGFsbG93aW5nIHByb3Zpc2lvbiBvZiBhIHN0YXRpc3RpY2FsIHN1bW1hcnkKKyAqLworc3RhdGljIGludCBmc2NhY2hlX3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGZzY2FjaGVfc3RhdHNfc2hvdywgTlVMTCk7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnNjYWNoZV9zdGF0c19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBmc2NhY2hlX3N0YXRzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCAwNmRhMDUyLi44YjhlZWJjIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTEwMzIsNiArMTAzMiw3IEBACiAJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwlyZXEtPm91dC5hcmdwYWdlcyA9IDE7CiAJcmVxLT5udW1fcGFnZXMgPSAxOwogCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwogCWZ1c2VfcmVhZF9maWxsKHJlcSwgZmlsZSwgaW5vZGUsIGZpbGUtPmZfcG9zLCBQQUdFX1NJWkUsIEZVU0VfUkVBRERJUik7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDRlMzQwZmUuLjJiMjUxMzMgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0zODYsNyArMzg2LDYgQEAKIAlyZXEtPmluLm51bWFyZ3MgPSAxOwogCXJlcS0+aW4uYXJnc1swXS5zaXplID0gc2l6ZW9mKHN0cnVjdCBmdXNlX3JlYWRfaW4pOwogCXJlcS0+aW4uYXJnc1swXS52YWx1ZSA9IGluYXJnOwotCXJlcS0+b3V0LmFyZ3BhZ2VzID0gMTsKIAlyZXEtPm91dC5hcmd2YXIgPSAxOwogCXJlcS0+b3V0Lm51bWFyZ3MgPSAxOwogCXJlcS0+b3V0LmFyZ3NbMF0uc2l6ZSA9IGNvdW50OwpAQCAtNDUzLDYgKzQ1Miw3IEBACiAJYXR0cl92ZXIgPSBmdXNlX2dldF9hdHRyX3ZlcnNpb24oZmMpOwogCiAJcmVxLT5vdXQucGFnZV96ZXJvaW5nID0gMTsKKwlyZXEtPm91dC5hcmdwYWdlcyA9IDE7CiAJcmVxLT5udW1fcGFnZXMgPSAxOwogCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwogCW51bV9yZWFkID0gZnVzZV9zZW5kX3JlYWQocmVxLCBmaWxlLCBpbm9kZSwgcG9zLCBjb3VudCwgTlVMTCk7CkBAIC01MTAsNiArNTEwLDggQEAKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwogCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChyZXEtPnBhZ2VzWzBdKTsKIAlzaXplX3QgY291bnQgPSByZXEtPm51bV9wYWdlcyA8PCBQQUdFX0NBQ0hFX1NISUZUOworCisJcmVxLT5vdXQuYXJncGFnZXMgPSAxOwogCXJlcS0+b3V0LnBhZ2VfemVyb2luZyA9IDE7CiAJZnVzZV9yZWFkX2ZpbGwocmVxLCBmaWxlLCBpbm9kZSwgcG9zLCBjb3VudCwgRlVTRV9SRUFEKTsKIAlyZXEtPm1pc2MucmVhZC5hdHRyX3ZlciA9IGZ1c2VfZ2V0X2F0dHJfdmVyc2lvbihmYyk7CkBAIC02MjEsNyArNjIzLDYgQEAKIAlpbmFyZy0+ZmxhZ3MgPSBmaWxlID8gZmlsZS0+Zl9mbGFncyA6IDA7CiAJcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfV1JJVEU7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKLQlyZXEtPmluLmFyZ3BhZ2VzID0gMTsKIAlyZXEtPmluLm51bWFyZ3MgPSAyOwogCWlmIChmYy0+bWlub3IgPCA5KQogCQlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX1dSSVRFX0lOX1NJWkU7CkBAIC02OTUsNiArNjk2LDcgQEAKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKKwlyZXEtPmluLmFyZ3BhZ2VzID0gMTsKIAlyZXEtPm51bV9wYWdlcyA9IDE7CiAJcmVxLT5wYWdlc1swXSA9IHBhZ2U7CiAJcmVxLT5wYWdlX29mZnNldCA9IG9mZnNldDsKQEAgLTc3MSw2ICs3NzMsNyBAQAogCXNpemVfdCBjb3VudCA9IDA7CiAJaW50IGVycjsKIAorCXJlcS0+aW4uYXJncGFnZXMgPSAxOwogCXJlcS0+cGFnZV9vZmZzZXQgPSBvZmZzZXQ7CiAKIAlkbyB7CkBAIC05MzUsMjEgKzkzOCwyOCBAQAogfQogCiBzdGF0aWMgaW50IGZ1c2VfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IGZ1c2VfcmVxICpyZXEsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgICAgdW5zaWduZWQgbmJ5dGVzLCBpbnQgd3JpdGUpCisJCQkgICAgICAgdW5zaWduZWQgKm5ieXRlc3AsIGludCB3cml0ZSkKIHsKKwl1bnNpZ25lZCBuYnl0ZXMgPSAqbmJ5dGVzcDsKIAl1bnNpZ25lZCBsb25nIHVzZXJfYWRkciA9ICh1bnNpZ25lZCBsb25nKSBidWY7CiAJdW5zaWduZWQgb2Zmc2V0ID0gdXNlcl9hZGRyICYgflBBR0VfTUFTSzsKIAlpbnQgbnBhZ2VzOwogCi0JLyogVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBuZnNkICovCi0JaWYgKCFjdXJyZW50LT5tbSkKLQkJcmV0dXJuIC1FUEVSTTsKKwkvKiBTcGVjaWFsIGNhc2UgZm9yIGtlcm5lbCBJL086IGNhbiBjb3B5IGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlciAqLworCWlmIChzZWdtZW50X2VxKGdldF9mcygpLCBLRVJORUxfRFMpKSB7CisJCWlmICh3cml0ZSkKKwkJCXJlcS0+aW4uYXJnc1sxXS52YWx1ZSA9ICh2b2lkICopIHVzZXJfYWRkcjsKKwkJZWxzZQorCQkJcmVxLT5vdXQuYXJnc1swXS52YWx1ZSA9ICh2b2lkICopIHVzZXJfYWRkcjsKKworCQlyZXR1cm4gMDsKKwl9CiAKIAluYnl0ZXMgPSBtaW4obmJ5dGVzLCAodW5zaWduZWQpIEZVU0VfTUFYX1BBR0VTX1BFUl9SRVEgPDwgUEFHRV9TSElGVCk7CiAJbnBhZ2VzID0gKG5ieXRlcyArIG9mZnNldCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiAJbnBhZ2VzID0gY2xhbXAobnBhZ2VzLCAxLCBGVVNFX01BWF9QQUdFU19QRVJfUkVRKTsKIAlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JbnBhZ2VzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIHVzZXJfYWRkciwgbnBhZ2VzLCB3cml0ZSwKKwlucGFnZXMgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgdXNlcl9hZGRyLCBucGFnZXMsICF3cml0ZSwKIAkJCQkwLCByZXEtPnBhZ2VzLCBOVUxMKTsKIAl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChucGFnZXMgPCAwKQpAQCAtOTU3LDYgKzk2NywxNSBAQAogCiAJcmVxLT5udW1fcGFnZXMgPSBucGFnZXM7CiAJcmVxLT5wYWdlX29mZnNldCA9IG9mZnNldDsKKworCWlmICh3cml0ZSkKKwkJcmVxLT5pbi5hcmdwYWdlcyA9IDE7CisJZWxzZQorCQlyZXEtPm91dC5hcmdwYWdlcyA9IDE7CisKKwluYnl0ZXMgPSAocmVxLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVCkgLSByZXEtPnBhZ2Vfb2Zmc2V0OworCSpuYnl0ZXNwID0gbWluKCpuYnl0ZXNwLCBuYnl0ZXMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk3OSwxNSArOTk4LDEzIEBACiAKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZV90IG5yZXM7Ci0JCXNpemVfdCBuYnl0ZXNfbGltaXQgPSBtaW4oY291bnQsIG5tYXgpOwotCQlzaXplX3QgbmJ5dGVzOwotCQlpbnQgZXJyID0gZnVzZV9nZXRfdXNlcl9wYWdlcyhyZXEsIGJ1ZiwgbmJ5dGVzX2xpbWl0LCAhd3JpdGUpOworCQlzaXplX3QgbmJ5dGVzID0gbWluKGNvdW50LCBubWF4KTsKKwkJaW50IGVyciA9IGZ1c2VfZ2V0X3VzZXJfcGFnZXMocmVxLCBidWYsICZuYnl0ZXMsIHdyaXRlKTsKIAkJaWYgKGVycikgewogCQkJcmVzID0gZXJyOwogCQkJYnJlYWs7CiAJCX0KLQkJbmJ5dGVzID0gKHJlcS0+bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC0gcmVxLT5wYWdlX29mZnNldDsKLQkJbmJ5dGVzID0gbWluKG5ieXRlc19saW1pdCwgbmJ5dGVzKTsKKwogCQlpZiAod3JpdGUpCiAJCQlucmVzID0gZnVzZV9zZW5kX3dyaXRlKHJlcSwgZmlsZSwgaW5vZGUsIHBvcywgbmJ5dGVzLAogCQkJCQkgICAgICAgY3VycmVudC0+ZmlsZXMpOwpAQCAtMTE2Myw2ICsxMTgwLDcgQEAKIAlmdXNlX3dyaXRlX2ZpbGwocmVxLCBOVUxMLCBmZiwgaW5vZGUsIHBhZ2Vfb2Zmc2V0KHBhZ2UpLCAwLCAxKTsKIAogCWNvcHlfaGlnaHBhZ2UodG1wX3BhZ2UsIHBhZ2UpOworCXJlcS0+aW4uYXJncGFnZXMgPSAxOwogCXJlcS0+bnVtX3BhZ2VzID0gMTsKIAlyZXEtPnBhZ2VzWzBdID0gdG1wX3BhZ2U7CiAJcmVxLT5wYWdlX29mZnNldCA9IDA7CkBAIC0xMjc0LDYgKzEyOTIsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBmdXNlX2RpcmVjdF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwkvKiBDYW4ndCBwcm92aWRlIHRoZSBjb2hlcmVuY3kgbmVlZGVkIGZvciBNQVBfU0hBUkVEICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gZ2VuZXJpY19maWxlX21tYXAoZmlsZSwgdm1hKTsKK30KKwogc3RhdGljIGludCBjb252ZXJ0X2Z1c2VfZmlsZV9sb2NrKGNvbnN0IHN0cnVjdCBmdXNlX2ZpbGVfbG9jayAqZmZsLAogCQkJCSAgc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7CkBAIC0xOTA4LDYgKzE5MzUsNyBAQAogCS5sbHNlZWsJCT0gZnVzZV9maWxlX2xsc2VlaywKIAkucmVhZAkJPSBmdXNlX2RpcmVjdF9yZWFkLAogCS53cml0ZQkJPSBmdXNlX2RpcmVjdF93cml0ZSwKKwkubW1hcAkJPSBmdXNlX2RpcmVjdF9tbWFwLAogCS5vcGVuCQk9IGZ1c2Vfb3BlbiwKIAkuZmx1c2gJCT0gZnVzZV9mbHVzaCwKIAkucmVsZWFzZQk9IGZ1c2VfcmVsZWFzZSwKQEAgLTE5MTcsNyArMTk0NSw3IEBACiAJLnVubG9ja2VkX2lvY3RsCT0gZnVzZV9maWxlX2lvY3RsLAogCS5jb21wYXRfaW9jdGwJPSBmdXNlX2ZpbGVfY29tcGF0X2lvY3RsLAogCS5wb2xsCQk9IGZ1c2VfZmlsZV9wb2xsLAotCS8qIG5vIG1tYXAgYW5kIHNwbGljZV9yZWFkICovCisJLyogbm8gc3BsaWNlX3JlYWQgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGZ1c2VfZmlsZV9hb3BzICA9IHsKZGlmZiAtLWdpdCBhL2ZzL2dlbmVyaWNfYWNsLmMgYi9mcy9nZW5lcmljX2FjbC5jCmluZGV4IDk5NWQ2M2IuLmUwYjUzYWEgMTAwNjQ0Ci0tLSBhL2ZzL2dlbmVyaWNfYWNsLmMKKysrIGIvZnMvZ2VuZXJpY19hY2wuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCWludCBlcnJvcjsKIAotCWlub2RlLT5pX21vZGUgPSBtb2RlICYgfmN1cnJlbnQtPmZzLT51bWFzazsKKwlpbm9kZS0+aV9tb2RlID0gbW9kZSAmIH5jdXJyZW50X3VtYXNrKCk7CiAJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpKQogCQlhY2wgPSBvcHMtPmdldGFjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwogCWlmIChhY2wpIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYWNsLmMgYi9mcy9nZnMyL2FjbC5jCmluZGV4IDQzNzY0ZjQuLmZhODgxYmQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYWNsLmMKKysrIGIvZnMvZ2ZzMi9hY2wuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJaWYgKCFhY2wpIHsKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJCWlmIChtb2RlICE9IGlwLT5pX2lub2RlLmlfbW9kZSkKIAkJCWVycm9yID0gbXVuZ2VfbW9kZShpcCwgbW9kZSk7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9zdXBlci5jIGIvZnMvaGZzL3N1cGVyLmMKaW5kZXggYzhiNWFjZi4uYTM2YmI3NCAxMDA2NDQKLS0tIGEvZnMvaGZzL3N1cGVyLmMKKysrIGIvZnMvaGZzL3N1cGVyLmMKQEAgLTgyLDYgKzgyLDcgQEAKIHN0YXRpYyBpbnQgaGZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlID0gSEZTX1NVUEVSX01BR0lDOwogCWJ1Zi0+Zl9ic2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKQEAgLTkwLDYgKzkxLDggQEAKIAlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlOwogCWJ1Zi0+Zl9maWxlcyA9IEhGU19TQihzYiktPmZzX2FibG9ja3M7CiAJYnVmLT5mX2ZmcmVlID0gSEZTX1NCKHNiKS0+ZnJlZV9hYmxvY2tzOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gSEZTX05BTUVMRU47CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvb3B0aW9ucy5jIGIvZnMvaGZzcGx1cy9vcHRpb25zLmMKaW5kZXggYmFiN2Y4ZC4uM2ZjYmIwZSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9vcHRpb25zLmMKKysrIGIvZnMvaGZzcGx1cy9vcHRpb25zLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogCW9wdHMtPmNyZWF0b3IgPSBIRlNQTFVTX0RFRl9DUl9UWVBFOwogCW9wdHMtPnR5cGUgPSBIRlNQTFVTX0RFRl9DUl9UWVBFOwotCW9wdHMtPnVtYXNrID0gY3VycmVudC0+ZnMtPnVtYXNrOworCW9wdHMtPnVtYXNrID0gY3VycmVudF91bWFzaygpOwogCW9wdHMtPnVpZCA9IGN1cnJlbnRfdWlkKCk7CiAJb3B0cy0+Z2lkID0gY3VycmVudF9naWQoKTsKIAlvcHRzLT5wYXJ0ID0gLTE7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggZWI3NDUzMS4uZjJhNjQwMiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCisrKyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtMjIzLDYgKzIyMyw3IEBACiBzdGF0aWMgaW50IGhmc3BsdXNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJYnVmLT5mX3R5cGUgPSBIRlNQTFVTX1NVUEVSX01BR0lDOwogCWJ1Zi0+Zl9ic2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKQEAgLTIzMSw2ICsyMzIsOCBAQAogCWJ1Zi0+Zl9iYXZhaWwgPSBidWYtPmZfYmZyZWU7CiAJYnVmLT5mX2ZpbGVzID0gMHhGRkZGRkZGRjsKIAlidWYtPmZfZmZyZWUgPSAweEZGRkZGRkZGIC0gSEZTUExVU19TQihzYikubmV4dF9jbmlkOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gSEZTUExVU19NQVhfU1RSTEVOOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9ocGZzL3N1cGVyLmMgYi9mcy9ocGZzL3N1cGVyLmMKaW5kZXggMGQwNDliOC4uZmVjZjQwMiAxMDA2NDQKLS0tIGEvZnMvaHBmcy9zdXBlci5jCisrKyBiL2ZzL2hwZnMvc3VwZXIuYwpAQCAtMTM2LDYgKzEzNiw3IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGVudHJ5LT5kX3NiOwogCXN0cnVjdCBocGZzX3NiX2luZm8gKnNiaSA9IGhwZnNfc2Iocyk7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHMtPnNfYmRldi0+YmRfZGV2KTsKIAlsb2NrX2tlcm5lbCgpOwogCiAJLyppZiAoc2JpLT5zYl9uX2ZyZWUgPT0gLTEpIHsqLwpAQCAtMTQ5LDYgKzE1MCw4IEBACiAJYnVmLT5mX2JhdmFpbCA9IHNiaS0+c2Jfbl9mcmVlOwogCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c2JfZGlyYmFuZF9zaXplIC8gNDsKIAlidWYtPmZfZmZyZWUgPSBzYmktPnNiX25fZnJlZV9kbm9kZXM7CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAJYnVmLT5mX25hbWVsZW4gPSAyNTQ7CiAKIAl1bmxvY2tfa2VybmVsKCk7CkBAIC00NzcsNyArNDgwLDcgQEAKIAogCXVpZCA9IGN1cnJlbnRfdWlkKCk7CiAJZ2lkID0gY3VycmVudF9naWQoKTsKLQl1bWFzayA9IGN1cnJlbnQtPmZzLT51bWFzazsKKwl1bWFzayA9IGN1cnJlbnRfdW1hc2soKTsKIAlsb3dlcmNhc2UgPSAwOwogCWNvbnYgPSBDT05WX0JJTkFSWTsKIAllYXMgPSAyOwpkaWZmIC0tZ2l0IGEvZnMvaHBwZnMvaHBwZnMuYyBiL2ZzL2hwcGZzL2hwcGZzLmMKaW5kZXggYjI3OGY3Zi4uYTUwODlhNiAxMDA2NDQKLS0tIGEvZnMvaHBwZnMvaHBwZnMuYworKysgYi9mcy9ocHBmcy9ocHBmcy5jCkBAIC0yODAsNyArMjgwLDEyIEBACiAJCQkgICAgICAgImVycm5vID0gJWRcbiIsIGVycik7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCWNvdW50ID0gaHBwZnNfcmVhZF9maWxlKGhwcGZzLT5ob3N0X2ZkLCBidWYsIGNvdW50KTsKKwkJZXJyID0gaHBwZnNfcmVhZF9maWxlKGhwcGZzLT5ob3N0X2ZkLCBidWYsIGNvdW50KTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaHBwZnNfcmVhZDogcmVhZCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQljb3VudCA9IGVycjsKIAkJaWYgKGNvdW50ID4gMCkKIAkJCSpwcG9zICs9IGNvdW50OwogCX0KZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDUzYWY4ODUuLmI0ZGFjNGYgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKKysrIGIvZnMvaW50ZXJuYWwuaApAQCAtMTEsNiArMTEsNyBAQAogCiBzdHJ1Y3Qgc3VwZXJfYmxvY2s7CiBzdHJ1Y3QgbGludXhfYmlucHJtOworc3RydWN0IHBhdGg7CiAKIC8qCiAgKiBibG9ja19kZXYuYwpAQCAtNDMsNyArNDQsNyBAQAogLyoKICAqIGV4ZWMuYwogICovCi1leHRlcm4gdm9pZCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICopOworZXh0ZXJuIGludCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICopOwogCiAvKgogICogbmFtZXNwYWNlLmMKQEAgLTYwLDMgKzYxLDggQEAKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKmNvcHlfdHJlZShzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwogCiBleHRlcm4gdm9pZCBfX2luaXQgbW50X2luaXQodm9pZCk7CisKKy8qCisgKiBmc19zdHJ1Y3QuYworICovCitleHRlcm4gdm9pZCBjaHJvb3RfZnNfcmVmcyhzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgcGF0aCAqKTsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IDEzZDJlZGQuLmI0Y2JlOTYgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKKysrIGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtOTIzLDYgKzkyMyw3IEBACiBzdGF0aWMgaW50IGlzb2ZzX3N0YXRmcyAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlidWYtPmZfdHlwZSA9IElTT0ZTX1NVUEVSX01BR0lDOwogCWJ1Zi0+Zl9ic2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKQEAgLTkzMiw2ICs5MzMsOCBAQAogCWJ1Zi0+Zl9iYXZhaWwgPSAwOwogCWJ1Zi0+Zl9maWxlcyA9IElTT0ZTX1NCKHNiKS0+c19uaW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IDA7CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAJYnVmLT5mX25hbWVsZW4gPSBOQU1FX01BWDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2piZC9jb21taXQuYyBiL2ZzL2piZC9jb21taXQuYwppbmRleCAzZmJmZmIxLi5mODA3N2I5IDEwMDY0NAotLS0gYS9mcy9qYmQvY29tbWl0LmMKKysrIGIvZnMvamJkL2NvbW1pdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogCiAvKgogICogRGVmYXVsdCBJTyBlbmQgaGFuZGxlciBmb3IgdGVtcG9yYXJ5IEJKX0lPIGJ1ZmZlcl9oZWFkcy4KQEAgLTE3MSwxNCArMTcyLDE1IEBACiAJcmV0dXJuIChyZXQgPT0gLUVJTyk7CiB9CiAKLXN0YXRpYyB2b2lkIGpvdXJuYWxfZG9fc3VibWl0X2RhdGEoc3RydWN0IGJ1ZmZlcl9oZWFkICoqd2J1ZiwgaW50IGJ1ZnMpCitzdGF0aWMgdm9pZCBqb3VybmFsX2RvX3N1Ym1pdF9kYXRhKHN0cnVjdCBidWZmZXJfaGVhZCAqKndidWYsIGludCBidWZzLAorCQkJCSAgIGludCB3cml0ZV9vcCkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBidWZzOyBpKyspIHsKIAkJd2J1ZltpXS0+Yl9lbmRfaW8gPSBlbmRfYnVmZmVyX3dyaXRlX3N5bmM7CiAJCS8qIFdlIHVzZS11cCBvdXIgc2FmZXR5IHJlZmVyZW5jZSBpbiBzdWJtaXRfYmgoKSAqLwotCQlzdWJtaXRfYmgoV1JJVEUsIHdidWZbaV0pOworCQlzdWJtaXRfYmgod3JpdGVfb3AsIHdidWZbaV0pOwogCX0KIH0KIApAQCAtMTg2LDcgKzE4OCw4IEBACiAgKiAgU3VibWl0IGFsbCB0aGUgZGF0YSBidWZmZXJzIHRvIGRpc2sKICAqLwogc3RhdGljIGludCBqb3VybmFsX3N1Ym1pdF9kYXRhX2J1ZmZlcnMoam91cm5hbF90ICpqb3VybmFsLAotCQkJCXRyYW5zYWN0aW9uX3QgKmNvbW1pdF90cmFuc2FjdGlvbikKKwkJCQkgICAgICAgdHJhbnNhY3Rpb25fdCAqY29tbWl0X3RyYW5zYWN0aW9uLAorCQkJCSAgICAgICBpbnQgd3JpdGVfb3ApCiB7CiAJc3RydWN0IGpvdXJuYWxfaGVhZCAqamg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTIyNSw3ICsyMjgsNyBAQAogCQkJCUJVRkZFUl9UUkFDRShiaCwgIm5lZWRzIGJsb2NraW5nIGxvY2siKTsKIAkJCQlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCQkJCS8qIFdyaXRlIG91dCBhbGwgZGF0YSB0byBwcmV2ZW50IGRlYWRsb2NrcyAqLwotCQkJCWpvdXJuYWxfZG9fc3VibWl0X2RhdGEod2J1ZiwgYnVmcyk7CisJCQkJam91cm5hbF9kb19zdWJtaXRfZGF0YSh3YnVmLCBidWZzLCB3cml0ZV9vcCk7CiAJCQkJYnVmcyA9IDA7CiAJCQkJbG9ja19idWZmZXIoYmgpOwogCQkJCXNwaW5fbG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwpAQCAtMjU2LDcgKzI1OSw3IEBACiAJCQlqYmRfdW5sb2NrX2JoX3N0YXRlKGJoKTsKIAkJCWlmIChidWZzID09IGpvdXJuYWwtPmpfd2J1ZnNpemUpIHsKIAkJCQlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwotCQkJCWpvdXJuYWxfZG9fc3VibWl0X2RhdGEod2J1ZiwgYnVmcyk7CisJCQkJam91cm5hbF9kb19zdWJtaXRfZGF0YSh3YnVmLCBidWZzLCB3cml0ZV9vcCk7CiAJCQkJYnVmcyA9IDA7CiAJCQkJZ290byB3cml0ZV9vdXRfZGF0YTsKIAkJCX0KQEAgLTI4Niw3ICsyODksNyBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7Ci0Jam91cm5hbF9kb19zdWJtaXRfZGF0YSh3YnVmLCBidWZzKTsKKwlqb3VybmFsX2RvX3N1Ym1pdF9kYXRhKHdidWYsIGJ1ZnMsIHdyaXRlX29wKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMTUsNiArMzE4LDcgQEAKIAlpbnQgZmlyc3RfdGFnID0gMDsKIAlpbnQgdGFnX2ZsYWc7CiAJaW50IGk7CisJaW50IHdyaXRlX29wID0gV1JJVEU7CiAKIAkvKgogCSAqIEZpcnN0IGpvYjogbG9jayBkb3duIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB3YWl0IGZvcgpAQCAtMzQ3LDYgKzM1MSw4IEBACiAJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGF0ZSA9IFRfTE9DS0VEOwogCisJaWYgKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zeW5jaHJvbm91c19jb21taXQpCisJCXdyaXRlX29wID0gV1JJVEVfU1lOQzsKIAlzcGluX2xvY2soJmNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CiAJd2hpbGUgKGNvbW1pdF90cmFuc2FjdGlvbi0+dF91cGRhdGVzKSB7CiAJCURFRklORV9XQUlUKHdhaXQpOwpAQCAtNDMxLDcgKzQzNyw4IEBACiAJICogTm93IHN0YXJ0IGZsdXNoaW5nIHRoaW5ncyB0byBkaXNrLCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIKIAkgKiBvbiB0aGUgdHJhbnNhY3Rpb24gbGlzdHMuICBEYXRhIGJsb2NrcyBnbyBmaXJzdC4KIAkgKi8KLQllcnIgPSBqb3VybmFsX3N1Ym1pdF9kYXRhX2J1ZmZlcnMoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKKwllcnIgPSBqb3VybmFsX3N1Ym1pdF9kYXRhX2J1ZmZlcnMoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uLAorCQkJCQkgIHdyaXRlX29wKTsKIAogCS8qCiAJICogV2FpdCBmb3IgYWxsIHByZXZpb3VzbHkgc3VibWl0dGVkIElPIHRvIGNvbXBsZXRlLgpAQCAtNjYwLDcgKzY2Nyw3IEBACiAJCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJCQliaC0+Yl9lbmRfaW8gPSBqb3VybmFsX2VuZF9idWZmZXJfaW9fc3luYzsKLQkJCQlzdWJtaXRfYmgoV1JJVEUsIGJoKTsKKwkJCQlzdWJtaXRfYmgod3JpdGVfb3AsIGJoKTsKIAkJCX0KIAkJCWNvbmRfcmVzY2hlZCgpOwogCmRpZmYgLS1naXQgYS9mcy9qYmQvam91cm5hbC5jIGIvZnMvamJkL2pvdXJuYWwuYwppbmRleCBlNzljMDc4Li43MzdmNzI0IDEwMDY0NAotLS0gYS9mcy9qYmQvam91cm5hbC5jCisrKyBiL2ZzL2piZC9qb3VybmFsLmMKQEAgLTYzNyw2ICs2MzcsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWJoID0gX19nZXRibGsoam91cm5hbC0+al9kZXYsIGJsb2NrbnIsIGpvdXJuYWwtPmpfYmxvY2tzaXplKTsKKwlpZiAoIWJoKQorCQlyZXR1cm4gTlVMTDsKIAlsb2NrX2J1ZmZlcihiaCk7CiAJbWVtc2V0KGJoLT5iX2RhdGEsIDAsIGpvdXJuYWwtPmpfYmxvY2tzaXplKTsKIAlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKQEAgLTczMyw5ICs3MzUsNyBAQAogCWlmICgham91cm5hbC0+al93YnVmKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbnQgYWxsb2NhdGUgYmhzIGZvciBjb21taXQgdGhyZWFkXG4iLAogCQkJX19mdW5jX18pOwotCQlrZnJlZShqb3VybmFsKTsKLQkJam91cm5hbCA9IE5VTEw7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9lcnI7CiAJfQogCWpvdXJuYWwtPmpfZGV2ID0gYmRldjsKIAlqb3VybmFsLT5qX2ZzX2RldiA9IGZzX2RldjsKQEAgLTc0MywxMSArNzQzLDE5IEBACiAJam91cm5hbC0+al9tYXhsZW4gPSBsZW47CiAKIAliaCA9IF9fZ2V0YmxrKGpvdXJuYWwtPmpfZGV2LCBzdGFydCwgam91cm5hbC0+al9ibG9ja3NpemUpOwotCUpfQVNTRVJUKGJoICE9IE5VTEwpOworCWlmICghYmgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IENhbm5vdCBnZXQgYnVmZmVyIGZvciBqb3VybmFsIHN1cGVyYmxvY2tcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2VycjsKKwl9CiAJam91cm5hbC0+al9zYl9idWZmZXIgPSBiaDsKIAlqb3VybmFsLT5qX3N1cGVyYmxvY2sgPSAoam91cm5hbF9zdXBlcmJsb2NrX3QgKiliaC0+Yl9kYXRhOwotb3V0OgorCiAJcmV0dXJuIGpvdXJuYWw7CitvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwpOworCXJldHVybiBOVUxMOwogfQogCiAvKioKQEAgLTc4Nyw4ICs3OTUsNyBAQAogCWlmICgham91cm5hbC0+al93YnVmKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbnQgYWxsb2NhdGUgYmhzIGZvciBjb21taXQgdGhyZWFkXG4iLAogCQkJX19mdW5jX18pOwotCQlrZnJlZShqb3VybmFsKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gb3V0X2VycjsKIAl9CiAKIAllcnIgPSBqb3VybmFsX2JtYXAoam91cm5hbCwgMCwgJmJsb2NrbnIpOwpAQCAtNzk2LDE2ICs4MDMsMjMgQEAKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5ub3QgbG9jYXRlIGpvdXJuYWwgc3VwZXJibG9ja1xuIiwKIAkJICAgICAgIF9fZnVuY19fKTsKLQkJa2ZyZWUoam91cm5hbCk7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIG91dF9lcnI7CiAJfQogCiAJYmggPSBfX2dldGJsayhqb3VybmFsLT5qX2RldiwgYmxvY2tuciwgam91cm5hbC0+al9ibG9ja3NpemUpOwotCUpfQVNTRVJUKGJoICE9IE5VTEwpOworCWlmICghYmgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IENhbm5vdCBnZXQgYnVmZmVyIGZvciBqb3VybmFsIHN1cGVyYmxvY2tcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2VycjsKKwl9CiAJam91cm5hbC0+al9zYl9idWZmZXIgPSBiaDsKIAlqb3VybmFsLT5qX3N1cGVyYmxvY2sgPSAoam91cm5hbF9zdXBlcmJsb2NrX3QgKiliaC0+Yl9kYXRhOwogCiAJcmV0dXJuIGpvdXJuYWw7CitvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwpOworCXJldHVybiBOVUxMOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvamJkL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwppbmRleCBlNmExMTc0Li5lZDg4NmU2IDEwMDY0NAotLS0gYS9mcy9qYmQvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwpAQCAtMTQ0MCw2ICsxNDQwLDggQEAKIAkJfQogCX0KIAorCWlmIChoYW5kbGUtPmhfc3luYykKKwkJdHJhbnNhY3Rpb24tPnRfc3luY2hyb25vdXNfY29tbWl0ID0gMTsKIAljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOwogCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlzcGluX2xvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2FjbC5jIGIvZnMvamZmczIvYWNsLmMKaW5kZXggZDk4NzEzNy4uNzdjY2Y4YyAxMDA2NDQKLS0tIGEvZnMvamZmczIvYWNsLmMKKysrIGIvZnMvamZmczIvYWNsLmMKQEAgLTMzNiw3ICszMzYsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCiAJaWYgKCFhY2wpIHsKLQkJKmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQkqaV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJfSBlbHNlIHsKIAkJaWYgKFNfSVNESVIoKmlfbW9kZSkpCiAJCQlqZmZzMl9pc2V0X2FjbChpbm9kZSwgJmYtPmlfYWNsX2RlZmF1bHQsIGFjbCk7CmRpZmYgLS1naXQgYS9mcy9qZnMvYWNsLmMgYi9mcy9qZnMvYWNsLmMKaW5kZXggYTE2NmMxNi4uMDZjYTFiOCAxMDA2NDQKLS0tIGEvZnMvamZzL2FjbC5jCisrKyBiL2ZzL2pmcy9hY2wuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiBjbGVhbnVwOgogCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCX0gZWxzZQotCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAogCUpGU19JUChpbm9kZSktPm1vZGUyID0gKEpGU19JUChpbm9kZSktPm1vZGUyICYgMHhmZmZmMDAwMCkgfAogCQkJICAgICAgIGlub2RlLT5pX21vZGU7CmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCA2MTg4NjViLi5kYWFkM2MyIDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCisrKyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTMyMSwxNSArMzIxLDIwIEBACiAKIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKLQlzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpID0gbWluaXhfc2IoZGVudHJ5LT5kX3NiKTsKLQlidWYtPmZfdHlwZSA9IGRlbnRyeS0+ZF9zYi0+c19tYWdpYzsKLQlidWYtPmZfYnNpemUgPSBkZW50cnktPmRfc2ItPnNfYmxvY2tzaXplOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJc3RydWN0IG1pbml4X3NiX2luZm8gKnNiaSA9IG1pbml4X3NiKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKKwlidWYtPmZfdHlwZSA9IHNiLT5zX21hZ2ljOworCWJ1Zi0+Zl9ic2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAlidWYtPmZfYmxvY2tzID0gKHNiaS0+c19uem9uZXMgLSBzYmktPnNfZmlyc3RkYXRhem9uZSkgPDwgc2JpLT5zX2xvZ196b25lX3NpemU7CiAJYnVmLT5mX2JmcmVlID0gbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc2JpKTsKIAlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlOwogCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c19uaW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IG1pbml4X2NvdW50X2ZyZWVfaW5vZGVzKHNiaSk7CiAJYnVmLT5mX25hbWVsZW4gPSBzYmktPnNfbmFtZWxlbjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9tcGFnZS5jIGIvZnMvbXBhZ2UuYwppbmRleCAxNmMzZWYzLi42ODBiYTYwIDEwMDY0NAotLS0gYS9mcy9tcGFnZS5jCisrKyBiL2ZzL21wYWdlLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAliaW9fcHV0KGJpbyk7CiB9CiAKLXN0cnVjdCBiaW8gKm1wYWdlX2Jpb19zdWJtaXQoaW50IHJ3LCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgc3RydWN0IGJpbyAqbXBhZ2VfYmlvX3N1Ym1pdChpbnQgcncsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAliaW8tPmJpX2VuZF9pbyA9IG1wYWdlX2VuZF9pb19yZWFkOwogCWlmIChydyA9PSBXUklURSkKQEAgLTkwLDcgKzkwLDYgQEAKIAlzdWJtaXRfYmlvKHJ3LCBiaW8pOwogCXJldHVybiBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChtcGFnZV9iaW9fc3VibWl0KTsKIAogc3RhdGljIHN0cnVjdCBiaW8gKgogbXBhZ2VfYWxsb2Moc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKQEAgLTQzOSw3ICs0MzgsMTQgQEAKICAqIGp1c3QgYWxsb2NhdGUgZnVsbC1zaXplICgxNi1wYWdlKSBCSU9zLgogICovCiAKLWludCBfX21wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCitzdHJ1Y3QgbXBhZ2VfZGF0YSB7CisJc3RydWN0IGJpbyAqYmlvOworCXNlY3Rvcl90IGxhc3RfYmxvY2tfaW5fYmlvOworCWdldF9ibG9ja190ICpnZXRfYmxvY2s7CisJdW5zaWduZWQgdXNlX3dyaXRlcGFnZTsKK307CisKK3N0YXRpYyBpbnQgX19tcGFnZV93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAogCQkgICAgICB2b2lkICpkYXRhKQogewogCXN0cnVjdCBtcGFnZV9kYXRhICptcGQgPSBkYXRhOwpAQCAtNjQ4LDcgKzY1NCw2IEBACiAJbXBkLT5iaW8gPSBiaW87CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19tcGFnZV93cml0ZXBhZ2UpOwogCiAvKioKICAqIG1wYWdlX3dyaXRlcGFnZXMgLSB3YWxrIHRoZSBsaXN0IG9mIGRpcnR5IHBhZ2VzIG9mIHRoZSBnaXZlbiBhZGRyZXNzIHNwYWNlICYgd3JpdGVwYWdlKCkgYWxsIG9mIHRoZW0KZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGQwNDBjZTEuLmI4NDMzZWIgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZV9jZ3JvdXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwMFwwMDRcMDAyXDAwNiJbKHgpJk9fQUNDTU9ERV0pCkBAIC0xNTc4LDcgKzE1NzksNyBAQAogCXN0cnVjdCBkZW50cnkgKmRpciA9IG5kLT5wYXRoLmRlbnRyeTsKIAogCWlmICghSVNfUE9TSVhBQ0woZGlyLT5kX2lub2RlKSkKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKCZuZC0+cGF0aCwgcGF0aC0+ZGVudHJ5LCBtb2RlLCAwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTE5ODksNyArMTk5MCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKCFJU19QT1NJWEFDTChuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCi0JCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCWVycm9yID0gbWF5X21rbm9kKG1vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZHB1dDsKQEAgLTIwNjcsNyArMjA2OCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICghSVNfUE9TSVhBQ0wobmQucGF0aC5kZW50cnktPmRfaW5vZGUpKQotCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RwdXQ7CkBAIC0yODk3LDEwICsyODk4LDMgQEAKIEVYUE9SVF9TWU1CT0wodmZzX3VubGluayk7CiBFWFBPUlRfU1lNQk9MKGRlbnRyeV91bmhhc2gpOwogRVhQT1JUX1NZTUJPTChnZW5lcmljX3JlYWRsaW5rKTsKLQotLyogdG8gYmUgbWVudGlvbmVkIG9ubHkgaW4gSU5JVF9UQVNLICovCi1zdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSB7Ci0JLmNvdW50CQk9IEFUT01JQ19JTklUKDEpLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChpbml0X2ZzLmxvY2spLAotCS51bWFzawkJPSAwMDIyLAotfTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggMGE0MmUwZS4uYzZmNTRlNCAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYW1mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlICJwbm9kZS5oIgpAQCAtMjA5Myw2NiArMjA5NCw2IEBACiB9CiAKIC8qCi0gKiBSZXBsYWNlIHRoZSBmcy0+e3Jvb3RtbnQscm9vdH0gd2l0aCB7bW50LGRlbnRyeX0uIFB1dCB0aGUgb2xkIHZhbHVlcy4KLSAqIEl0IGNhbiBibG9jay4gUmVxdWlyZXMgdGhlIGJpZyBsb2NrIGhlbGQuCi0gKi8KLXZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpwYXRoKQotewotCXN0cnVjdCBwYXRoIG9sZF9yb290OwotCi0Jd3JpdGVfbG9jaygmZnMtPmxvY2spOwotCW9sZF9yb290ID0gZnMtPnJvb3Q7Ci0JZnMtPnJvb3QgPSAqcGF0aDsKLQlwYXRoX2dldChwYXRoKTsKLQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKLQlpZiAob2xkX3Jvb3QuZGVudHJ5KQotCQlwYXRoX3B1dCgmb2xkX3Jvb3QpOwotfQotCi0vKgotICogUmVwbGFjZSB0aGUgZnMtPntwd2RtbnQscHdkfSB3aXRoIHttbnQsZGVudHJ5fS4gUHV0IHRoZSBvbGQgdmFsdWVzLgotICogSXQgY2FuIGJsb2NrLiBSZXF1aXJlcyB0aGUgYmlnIGxvY2sgaGVsZC4KLSAqLwotdm9pZCBzZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKLXsKLQlzdHJ1Y3QgcGF0aCBvbGRfcHdkOwotCi0Jd3JpdGVfbG9jaygmZnMtPmxvY2spOwotCW9sZF9wd2QgPSBmcy0+cHdkOwotCWZzLT5wd2QgPSAqcGF0aDsKLQlwYXRoX2dldChwYXRoKTsKLQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKLQotCWlmIChvbGRfcHdkLmRlbnRyeSkKLQkJcGF0aF9wdXQoJm9sZF9wd2QpOwotfQotCi1zdGF0aWMgdm9pZCBjaHJvb3RfZnNfcmVmcyhzdHJ1Y3QgcGF0aCAqb2xkX3Jvb3QsIHN0cnVjdCBwYXRoICpuZXdfcm9vdCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOwotCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlkb19lYWNoX3RocmVhZChnLCBwKSB7Ci0JCXRhc2tfbG9jayhwKTsKLQkJZnMgPSBwLT5mczsKLQkJaWYgKGZzKSB7Ci0JCQlhdG9taWNfaW5jKCZmcy0+Y291bnQpOwotCQkJdGFza191bmxvY2socCk7Ci0JCQlpZiAoZnMtPnJvb3QuZGVudHJ5ID09IG9sZF9yb290LT5kZW50cnkKLQkJCSAgICAmJiBmcy0+cm9vdC5tbnQgPT0gb2xkX3Jvb3QtPm1udCkKLQkJCQlzZXRfZnNfcm9vdChmcywgbmV3X3Jvb3QpOwotCQkJaWYgKGZzLT5wd2QuZGVudHJ5ID09IG9sZF9yb290LT5kZW50cnkKLQkJCSAgICAmJiBmcy0+cHdkLm1udCA9PSBvbGRfcm9vdC0+bW50KQotCQkJCXNldF9mc19wd2QoZnMsIG5ld19yb290KTsKLQkJCXB1dF9mc19zdHJ1Y3QoZnMpOwotCQl9IGVsc2UKLQkJCXRhc2tfdW5sb2NrKHApOwotCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotfQotCi0vKgogICogcGl2b3Rfcm9vdCBTZW1hbnRpY3M6CiAgKiBNb3ZlcyB0aGUgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGUgY3VycmVudCBwcm9jZXNzIHRvIHRoZSBkaXJlY3RvcnkgcHV0X29sZCwKICAqIG1ha2VzIG5ld19yb290IGFzIHRoZSBuZXcgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGUgY3VycmVudCBwcm9jZXNzLCBhbmQgc2V0cwpkaWZmIC0tZ2l0IGEvZnMvbmZzL0tjb25maWcgYi9mcy9uZnMvS2NvbmZpZwppbmRleCAzNmZlMjBkLi5lNjdmM2VjIDEwMDY0NAotLS0gYS9mcy9uZnMvS2NvbmZpZworKysgYi9mcy9uZnMvS2NvbmZpZwpAQCAtODQsMyArODQsMTEgQEAKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQ+LgogCiAJICBNb3N0IHBlb3BsZSBzYXkgTiBoZXJlLgorCitjb25maWcgTkZTX0ZTQ0FDSEUKKwlib29sICJQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBORlNfRlM9bSAmJiBGU0NBQ0hFIHx8IE5GU19GUz15ICYmIEZTQ0FDSEU9eQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgTkZTIGRhdGEgdG8gYmUgY2FjaGVkIGxvY2FsbHkgb24gZGlzYyB0aHJvdWdoCisJICB0aGUgZ2VuZXJhbCBmaWxlc3lzdGVtIGNhY2hlIG1hbmFnZXIKZGlmZiAtLWdpdCBhL2ZzL25mcy9NYWtlZmlsZSBiL2ZzL25mcy9NYWtlZmlsZQppbmRleCBhYzYxNzBjLi44NDUxNTk4IDEwMDY0NAotLS0gYS9mcy9uZnMvTWFrZWZpbGUKKysrIGIvZnMvbmZzL01ha2VmaWxlCkBAIC0xNSwzICsxNSw0IEBACiAJCQkgICBjYWxsYmFjay5vIGNhbGxiYWNrX3hkci5vIGNhbGxiYWNrX3Byb2MubyBcCiAJCQkgICBuZnM0bmFtZXNwYWNlLm8KIG5mcy0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vCituZnMtJChDT05GSUdfTkZTX0ZTQ0FDSEUpICs9IGZzY2FjaGUubyBmc2NhY2hlLWluZGV4Lm8KZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCBhYmEzODAxLi43NWM5Y2QyIDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgogI2luY2x1ZGUgImlvc3RhdC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX0NMSUVOVAogCkBAIC0xNTQsNiArMTU1LDggQEAKIAlpZiAoIUlTX0VSUihjcmVkKSkKIAkJY2xwLT5jbF9tYWNoaW5lX2NyZWQgPSBjcmVkOwogCisJbmZzX2ZzY2FjaGVfZ2V0X2NsaWVudF9jb29raWUoY2xwKTsKKwogCXJldHVybiBjbHA7CiAKIGVycm9yXzM6CkBAIC0xODcsNiArMTkwLDggQEAKIAogCW5mczRfc2h1dGRvd25fY2xpZW50KGNscCk7CiAKKwluZnNfZnNjYWNoZV9yZWxlYXNlX2NsaWVudF9jb29raWUoY2xwKTsKKwogCS8qIC1FSU8gYWxsIHBlbmRpbmcgSS9PICovCiAJaWYgKCFJU19FUlIoY2xwLT5jbF9ycGNjbGllbnQpKQogCQlycGNfc2h1dGRvd25fY2xpZW50KGNscC0+Y2xfcnBjY2xpZW50KTsKQEAgLTc2MCw2ICs3NjUsNyBAQAogCiAJLyogSW5pdGlhbGlzZSB0aGUgY2xpZW50IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG1vdW50IGRhdGEgKi8KIAlzZXJ2ZXItPmZsYWdzID0gZGF0YS0+ZmxhZ3M7CisJc2VydmVyLT5vcHRpb25zID0gZGF0YS0+b3B0aW9uczsKIAogCWlmIChkYXRhLT5yc2l6ZSkKIAkJc2VydmVyLT5yc2l6ZSA9IG5mc19ibG9ja19zaXplKGRhdGEtPnJzaXplLCBOVUxMKTsKQEAgLTExNDgsNiArMTE1NCw3IEBACiAJLyogSW5pdGlhbGlzZSB0aGUgY2xpZW50IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG1vdW50IGRhdGEgKi8KIAlzZXJ2ZXItPmZsYWdzID0gZGF0YS0+ZmxhZ3M7CiAJc2VydmVyLT5jYXBzIHw9IE5GU19DQVBfQVRPTUlDX09QRU47CisJc2VydmVyLT5vcHRpb25zID0gZGF0YS0+b3B0aW9uczsKIAogCS8qIEdldCBhIGNsaWVudCByZWNvcmQgKi8KIAllcnJvciA9IG5mczRfc2V0X2NsaWVudChzZXJ2ZXIsCkBAIC0xNTU5LDcgKzE1NjYsNyBAQAogCiAJLyogZGlzcGxheSBoZWFkZXIgb24gbGluZSAxICovCiAJaWYgKHYgPT0gJm5mc192b2x1bWVfbGlzdCkgewotCQlzZXFfcHV0cyhtLCAiTlYgU0VSVkVSICAgUE9SVCBERVYgICAgIEZTSURcbiIpOworCQlzZXFfcHV0cyhtLCAiTlYgU0VSVkVSICAgUE9SVCBERVYgICAgIEZTSUQgICAgICAgICAgICAgIEZTQ1xuIik7CiAJCXJldHVybiAwOwogCX0KIAkvKiBkaXNwbGF5IG9uZSB0cmFuc3BvcnQgcGVyIGxpbmUgb24gc3Vic2VxdWVudCBsaW5lcyAqLwpAQCAtMTU3MywxMiArMTU4MCwxMyBAQAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VydmVyLT5mc2lkLm1ham9yLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VydmVyLT5mc2lkLm1pbm9yKTsKIAotCXNlcV9wcmludGYobSwgInYldSAlcyAlcyAlLTdzICUtMTdzXG4iLAorCXNlcV9wcmludGYobSwgInYldSAlcyAlcyAlLTdzICUtMTdzICVzXG4iLAogCQkgICBjbHAtPnJwY19vcHMtPnZlcnNpb24sCiAJCSAgIHJwY19wZWVyYWRkcjJzdHIoY2xwLT5jbF9ycGNjbGllbnQsIFJQQ19ESVNQTEFZX0hFWF9BRERSKSwKIAkJICAgcnBjX3BlZXJhZGRyMnN0cihjbHAtPmNsX3JwY2NsaWVudCwgUlBDX0RJU1BMQVlfSEVYX1BPUlQpLAogCQkgICBkZXYsCi0JCSAgIGZzaWQpOworCQkgICBmc2lkLAorCQkgICBuZnNfc2VydmVyX2ZzY2FjaGVfc3RhdGUoc2VydmVyKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IDBhYmYzZjMuLjM1MjNiODkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImRlbGVnYXRpb24uaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgImlvc3RhdC5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19GSUxFCiAKQEAgLTQwOSw2ICs0MTAsMTMgQEAKIAlyZXR1cm4gY29waWVkOwogfQogCisvKgorICogUGFydGlhbGx5IG9yIHdob2xseSBpbnZhbGlkYXRlIGEgcGFnZQorICogLSBSZWxlYXNlIHRoZSBwcml2YXRlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgaWYgdW5kZXJnb2luZyBjb21wbGV0ZQorICogICBwYWdlIGludmFsaWRhdGlvbgorICogLSBDYWxsZWQgaWYgZWl0aGVyIFBHX3ByaXZhdGUgb3IgUEdfZnNjYWNoZSBpcyBzZXQgb24gdGhlIHBhZ2UKKyAqIC0gQ2FsbGVyIGhvbGRzIHBhZ2UgbG9jaworICovCiBzdGF0aWMgdm9pZCBuZnNfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IGludmFsaWRhdGVfcGFnZSglcCwgJWx1KVxuIiwgcGFnZSwgb2Zmc2V0KTsKQEAgLTQxNywyMyArNDI1LDQzIEBACiAJCXJldHVybjsKIAkvKiBDYW5jZWwgYW55IHVuc3RhcnRlZCB3cml0ZXMgb24gdGhpcyBwYWdlICovCiAJbmZzX3diX3BhZ2VfY2FuY2VsKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOworCisJbmZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHBhZ2UsIHBhZ2UtPm1hcHBpbmctPmhvc3QpOwogfQogCisvKgorICogQXR0ZW1wdCB0byByZWxlYXNlIHRoZSBwcml2YXRlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UKKyAqIC0gQ2FsbGVkIGlmIGVpdGhlciBQR19wcml2YXRlIG9yIFBHX2ZzY2FjaGUgaXMgc2V0IG9uIHRoZSBwYWdlCisgKiAtIENhbGxlciBob2xkcyBwYWdlIGxvY2sKKyAqIC0gUmV0dXJuIHRydWUgKG1heSByZWxlYXNlIHBhZ2UpIG9yIGZhbHNlIChtYXkgbm90KQorICovCiBzdGF0aWMgaW50IG5mc19yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKIHsKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IHJlbGVhc2VfcGFnZSglcClcbiIsIHBhZ2UpOwogCiAJLyogSWYgUGFnZVByaXZhdGUoKSBpcyBzZXQsIHRoZW4gdGhlIHBhZ2UgaXMgbm90IGZyZWVhYmxlICovCi0JcmV0dXJuIDA7CisJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbmZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHBhZ2UsIGdmcCk7CiB9CiAKKy8qCisgKiBBdHRlbXB0IHRvIGNsZWFyIHRoZSBwcml2YXRlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2Ugd2hlbiBhbiBlcnJvcgorICogb2NjdXJzIHRoYXQgcmVxdWlyZXMgdGhlIGNhY2hlZCBjb250ZW50cyBvZiBhbiBpbm9kZSB0byBiZSB3cml0dGVuIGJhY2sgb3IKKyAqIGRlc3Ryb3llZAorICogLSBDYWxsZWQgaWYgZWl0aGVyIFBHX3ByaXZhdGUgb3IgZnNjYWNoZSBpcyBzZXQgb24gdGhlIHBhZ2UKKyAqIC0gQ2FsbGVyIGhvbGRzIHBhZ2UgbG9jaworICogLSBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtZXJyb3Igb3RoZXJ3aXNlCisgKi8KIHN0YXRpYyBpbnQgbmZzX2xhdW5kZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwogCiAJZGZwcmludGsoUEFHRUNBQ0hFLCAiTkZTOiBsYXVuZGVyX3BhZ2UoJWxkLCAlbGx1KVxuIiwKIAkJaW5vZGUtPmlfaW5vLCAobG9uZyBsb25nKXBhZ2Vfb2Zmc2V0KHBhZ2UpKTsKIAorCW5mc19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShuZnNpLCBwYWdlKTsKIAlyZXR1cm4gbmZzX3diX3BhZ2UoaW5vZGUsIHBhZ2UpOwogfQogCkBAIC00NTEsNiArNDc5LDExIEBACiAJLmxhdW5kZXJfcGFnZSA9IG5mc19sYXVuZGVyX3BhZ2UsCiB9OwogCisvKgorICogTm90aWZpY2F0aW9uIHRoYXQgYSBQVEUgcG9pbnRpbmcgdG8gYW4gTkZTIHBhZ2UgaXMgYWJvdXQgdG8gYmUgbWFkZQorICogd3JpdGFibGUsIGltcGx5aW5nIHRoYXQgc29tZW9uZSBpcyBhYm91dCB0byBtb2RpZnkgdGhlIHBhZ2UgdGhyb3VnaCBhCisgKiBzaGFyZWQtd3JpdGFibGUgbWFwcGluZworICovCiBzdGF0aWMgaW50IG5mc192bV9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwpAQCAtNDY1LDYgKzQ5OCw5IEBACiAJCWZpbHAtPmZfbWFwcGluZy0+aG9zdC0+aV9pbm8sCiAJCShsb25nIGxvbmcpcGFnZV9vZmZzZXQocGFnZSkpOwogCisJLyogbWFrZSBzdXJlIHRoZSBjYWNoZSBoYXMgZmluaXNoZWQgc3RvcmluZyB0aGUgcGFnZSAqLworCW5mc19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShORlNfSShkZW50cnktPmRfaW5vZGUpLCBwYWdlKTsKKwogCWxvY2tfcGFnZShwYWdlKTsKIAltYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKIAlpZiAobWFwcGluZyAhPSBkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZykKZGlmZiAtLWdpdCBhL2ZzL25mcy9mc2NhY2hlLWluZGV4LmMgYi9mcy9uZnMvZnNjYWNoZS1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTAwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnMvZnNjYWNoZS1pbmRleC5jCkBAIC0wLDAgKzEsMzM3IEBACisvKiBORlMgRlMtQ2FjaGUgaW5kZXggc3RydWN0dXJlIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzX2ZzX3NiLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKKworI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19GU0NBQ0hFCisKKy8qCisgKiBEZWZpbmUgdGhlIE5GUyBmaWxlc3lzdGVtIGZvciBGUy1DYWNoZS4gIFVwb24gcmVnaXN0cmF0aW9uIEZTLUNhY2hlIHN0aWNrcworICogdGhlIGNvb2tpZSBmb3IgdGhlIHRvcC1sZXZlbCBpbmRleCBvYmplY3QgZm9yIE5GUyBpbnRvIGhlcmUuICBUaGUgdG9wLWxldmVsCisgKiBpbmRleCBjYW4gdGhhbiBoYXZlIG90aGVyIGNhY2hlIG9iamVjdHMgaW5zZXJ0ZWQgaW50byBpdC4KKyAqLworc3RydWN0IGZzY2FjaGVfbmV0ZnMgbmZzX2ZzY2FjaGVfbmV0ZnMgPSB7CisJLm5hbWUJCT0gIm5mcyIsCisJLnZlcnNpb24JPSAwLAorfTsKKworLyoKKyAqIFJlZ2lzdGVyIE5GUyBmb3IgY2FjaGluZworICovCitpbnQgbmZzX2ZzY2FjaGVfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcygmbmZzX2ZzY2FjaGVfbmV0ZnMpOworfQorCisvKgorICogVW5yZWdpc3RlciBORlMgZm9yIGNhY2hpbmcKKyAqLwordm9pZCBuZnNfZnNjYWNoZV91bnJlZ2lzdGVyKHZvaWQpCit7CisJZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKCZuZnNfZnNjYWNoZV9uZXRmcyk7Cit9CisKKy8qCisgKiBMYXlvdXQgb2YgdGhlIGtleSBmb3IgYW4gTkZTIHNlcnZlciBjYWNoZSBvYmplY3QuCisgKi8KK3N0cnVjdCBuZnNfc2VydmVyX2tleSB7CisJdWludDE2X3QJbmZzdmVyc2lvbjsJCS8qIE5GUyBwcm90b2NvbCB2ZXJzaW9uICovCisJdWludDE2X3QJZmFtaWx5OwkJCS8qIGFkZHJlc3MgZmFtaWx5ICovCisJdWludDE2X3QJcG9ydDsJCQkvKiBJUCBwb3J0ICovCisJdW5pb24geworCQlzdHJ1Y3QgaW5fYWRkcglpcHY0X2FkZHI7CS8qIElQdjQgYWRkcmVzcyAqLworCQlzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9hZGRyOwkvKiBJUHY2IGFkZHJlc3MgKi8KKwl9IGFkZHJbMF07Cit9OworCisvKgorICogR2VuZXJhdGUgYSBrZXkgdG8gZGVzY3JpYmUgYSBzZXJ2ZXIgaW4gdGhlIG1haW4gTkZTIGluZGV4CisgKiAtIFdlIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBrZXksIG9yIDAgaWYgd2UgY2FuJ3QgZ2VuZXJhdGUgb25lCisgKi8KK3N0YXRpYyB1aW50MTZfdCBuZnNfc2VydmVyX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IG5mc19jbGllbnQgKmNscCA9IGNvb2tpZV9uZXRmc19kYXRhOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmY2xwLT5jbF9hZGRyOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmY2xwLT5jbF9hZGRyOworCXN0cnVjdCBuZnNfc2VydmVyX2tleSAqa2V5ID0gYnVmZmVyOworCXVpbnQxNl90IGxlbiA9IHNpemVvZihzdHJ1Y3QgbmZzX3NlcnZlcl9rZXkpOworCisJa2V5LT5uZnN2ZXJzaW9uID0gY2xwLT5ycGNfb3BzLT52ZXJzaW9uOworCWtleS0+ZmFtaWx5ID0gY2xwLT5jbF9hZGRyLnNzX2ZhbWlseTsKKworCW1lbXNldChrZXksIDAsIGxlbik7CisKKwlzd2l0Y2ggKGNscC0+Y2xfYWRkci5zc19mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWtleS0+cG9ydCA9IHNpbi0+c2luX3BvcnQ7CisJCWtleS0+YWRkclswXS5pcHY0X2FkZHIgPSBzaW4tPnNpbl9hZGRyOworCQlsZW4gKz0gc2l6ZW9mKGtleS0+YWRkclswXS5pcHY0X2FkZHIpOworCQlicmVhazsKKworCWNhc2UgQUZfSU5FVDY6CisJCWtleS0+cG9ydCA9IHNpbjYtPnNpbjZfcG9ydDsKKwkJa2V5LT5hZGRyWzBdLmlwdjZfYWRkciA9IHNpbjYtPnNpbjZfYWRkcjsKKwkJbGVuICs9IHNpemVvZihrZXktPmFkZHJbMF0uaXB2Nl9hZGRyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJORlM6IFVua25vd24gbmV0d29yayBmYW1pbHkgJyVkJ1xuIiwKKwkJICAgICAgIGNscC0+Y2xfYWRkci5zc19mYW1pbHkpOworCQlsZW4gPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogRGVmaW5lIHRoZSBzZXJ2ZXIgb2JqZWN0IGZvciBGUy1DYWNoZS4gIFRoaXMgaXMgdXNlZCB0byBkZXNjcmliZSBhIHNlcnZlcgorICogb2JqZWN0IHRvIGZzY2FjaGVfYWNxdWlyZV9jb29raWUoKS4gIEl0IGlzIGtleWVkIGJ5IHRoZSBORlMgcHJvdG9jb2wgYW5kCisgKiBzZXJ2ZXIgYWRkcmVzcyBwYXJhbWV0ZXJzLgorICovCitjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIG5mc19mc2NhY2hlX3NlcnZlcl9pbmRleF9kZWYgPSB7CisJLm5hbWUJCT0gIk5GUy5zZXJ2ZXIiLAorCS50eXBlIAkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYLAorCS5nZXRfa2V5CT0gbmZzX3NlcnZlcl9nZXRfa2V5LAorfTsKKworLyoKKyAqIEdlbmVyYXRlIGEga2V5IHRvIGRlc2NyaWJlIGEgc3VwZXJibG9jayBrZXkgaW4gdGhlIG1haW4gTkZTIGluZGV4CisgKi8KK3N0YXRpYyB1aW50MTZfdCBuZnNfc3VwZXJfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQoreworCWNvbnN0IHN0cnVjdCBuZnNfZnNjYWNoZV9rZXkgKmtleTsKKwljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGxlbjsKKworCWtleSA9IG5mc3MtPmZzY2FjaGVfa2V5OworCWxlbiA9IHNpemVvZihrZXktPmtleSkgKyBrZXktPmtleS51bmlxX2xlbjsKKwlpZiAobGVuID4gYnVmbWF4KSB7CisJCWxlbiA9IDA7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1ZmZlciwgJmtleS0+a2V5LCBzaXplb2Yoa2V5LT5rZXkpKTsKKwkJbWVtY3B5KGJ1ZmZlciArIHNpemVvZihrZXktPmtleSksCisJCSAgICAgICBrZXktPmtleS51bmlxdWlmaWVyLCBrZXktPmtleS51bmlxX2xlbik7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIERlZmluZSB0aGUgc3VwZXJibG9jayBvYmplY3QgZm9yIEZTLUNhY2hlLiAgVGhpcyBpcyB1c2VkIHRvIGRlc2NyaWJlIGEKKyAqIHN1cGVyYmxvY2sgb2JqZWN0IHRvIGZzY2FjaGVfYWNxdWlyZV9jb29raWUoKS4gIEl0IGlzIGtleWVkIGJ5IGFsbCB0aGUgTkZTCisgKiBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgY2F1c2UgYSBzZXBhcmF0ZSBzdXBlcmJsb2NrLgorICovCitjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIG5mc19mc2NhY2hlX3N1cGVyX2luZGV4X2RlZiA9IHsKKwkubmFtZQkJPSAiTkZTLnN1cGVyIiwKKwkudHlwZSAJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCwKKwkuZ2V0X2tleQk9IG5mc19zdXBlcl9nZXRfa2V5LAorfTsKKworLyoKKyAqIERlZmluaXRpb24gb2YgdGhlIGF1eGlsaWFyeSBkYXRhIGF0dGFjaGVkIHRvIE5GUyBpbm9kZSBzdG9yYWdlIG9iamVjdHMKKyAqIHdpdGhpbiB0aGUgY2FjaGUuCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0IGFyZSByZWNvcmRlZCBpbiB0aGUgb24tZGlzayBsb2NhbCBjYWNoZSBpbiB0aGUKKyAqIGF1eGlsaWFyeSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBkYXRhIHN0b3JhZ2Ugb2JqZWN0IGJhY2tpbmcgYW4gaW5vZGUuICBUaGlzCisgKiBwZXJtaXRzIGNvaGVyZW5jeSB0byBiZSBtYW5hZ2VkIHdoZW4gYSBuZXcgaW5vZGUgYmluZHMgdG8gYW4gYWxyZWFkeSBleHRhbnQKKyAqIGNhY2hlIG9iamVjdC4KKyAqLworc3RydWN0IG5mc19mc2NhY2hlX2lub2RlX2F1eGRhdGEgeworCXN0cnVjdCB0aW1lc3BlYwltdGltZTsKKwlzdHJ1Y3QgdGltZXNwZWMJY3RpbWU7CisJbG9mZl90CQlzaXplOworCXU2NAkJY2hhbmdlX2F0dHI7Cit9OworCisvKgorICogR2VuZXJhdGUgYSBrZXkgdG8gZGVzY3JpYmUgYW4gTkZTIGlub2RlIGluIGFuIE5GUyBzZXJ2ZXIncyBpbmRleAorICovCitzdGF0aWMgdWludDE2X3QgbmZzX2ZzY2FjaGVfaW5vZGVfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3QgbnNpemU7CisKKwkvKiB1c2UgdGhlIGlub2RlJ3MgTkZTIGZpbGVoYW5kbGUgYXMgdGhlIGtleSAqLworCW5zaXplID0gbmZzaS0+Zmguc2l6ZTsKKwltZW1jcHkoYnVmZmVyLCBuZnNpLT5maC5kYXRhLCBuc2l6ZSk7CisJcmV0dXJuIG5zaXplOworfQorCisvKgorICogR2V0IGNlcnRhaW4gZmlsZSBhdHRyaWJ1dGVzIGZyb20gdGhlIG5ldGZzIGRhdGEKKyAqIC0gVGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGZvciBhbiBpbmRleAorICogLSBOb3QgcGVybWl0dGVkIHRvIHJldHVybiBhbiBlcnJvcgorICogLSBUaGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgc291cmNlIGlzIHByZXNlbnRlZAorICovCitzdGF0aWMgdm9pZCBuZnNfZnNjYWNoZV9pbm9kZV9nZXRfYXR0cihjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgICAgdWludDY0X3QgKnNpemUpCit7CisJY29uc3Qgc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IGNvb2tpZV9uZXRmc19kYXRhOworCisJKnNpemUgPSBuZnNpLT52ZnNfaW5vZGUuaV9zaXplOworfQorCisvKgorICogR2V0IHRoZSBhdXhpbGlhcnkgZGF0YSBmcm9tIG5ldGZzIGRhdGEKKyAqIC0gVGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBpbmRleCBjYXJyaWVzIG5vIHN0YXRlIGRhdGEKKyAqIC0gU2hvdWxkIHN0b3JlIHRoZSBhdXhpbGlhcnkgZGF0YSBpbiB0aGUgYnVmZmVyCisgKiAtIFNob3VsZCByZXR1cm4gdGhlIGFtb3VudCBvZiBhbW91bnQgc3RvcmVkCisgKiAtIE5vdCBwZXJtaXR0ZWQgdG8gcmV0dXJuIGFuIGVycm9yCisgKiAtIFRoZSBuZXRmcyBkYXRhIGZyb20gdGhlIGNvb2tpZSBiZWluZyB1c2VkIGFzIHRoZSBzb3VyY2UgaXMgcHJlc2VudGVkCisgKi8KK3N0YXRpYyB1aW50MTZfdCBuZnNfZnNjYWNoZV9pbm9kZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQoreworCXN0cnVjdCBuZnNfZnNjYWNoZV9pbm9kZV9hdXhkYXRhIGF1eGRhdGE7CisJY29uc3Qgc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IGNvb2tpZV9uZXRmc19kYXRhOworCisJbWVtc2V0KCZhdXhkYXRhLCAwLCBzaXplb2YoYXV4ZGF0YSkpOworCWF1eGRhdGEuc2l6ZSA9IG5mc2ktPnZmc19pbm9kZS5pX3NpemU7CisJYXV4ZGF0YS5tdGltZSA9IG5mc2ktPnZmc19pbm9kZS5pX210aW1lOworCWF1eGRhdGEuY3RpbWUgPSBuZnNpLT52ZnNfaW5vZGUuaV9jdGltZTsKKworCWlmIChORlNfU0VSVkVSKCZuZnNpLT52ZnNfaW5vZGUpLT5uZnNfY2xpZW50LT5ycGNfb3BzLT52ZXJzaW9uID09IDQpCisJCWF1eGRhdGEuY2hhbmdlX2F0dHIgPSBuZnNpLT5jaGFuZ2VfYXR0cjsKKworCWlmIChidWZtYXggPiBzaXplb2YoYXV4ZGF0YSkpCisJCWJ1Zm1heCA9IHNpemVvZihhdXhkYXRhKTsKKworCW1lbWNweShidWZmZXIsICZhdXhkYXRhLCBidWZtYXgpOworCXJldHVybiBidWZtYXg7Cit9CisKKy8qCisgKiBDb25zdWx0IHRoZSBuZXRmcyBhYm91dCB0aGUgc3RhdGUgb2YgYW4gb2JqZWN0CisgKiAtIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgaW5kZXggY2FycmllcyBubyBzdGF0ZSBkYXRhCisgKiAtIFRoZSBuZXRmcyBkYXRhIGZyb20gdGhlIGNvb2tpZSBiZWluZyB1c2VkIGFzIHRoZSB0YXJnZXQgaXMKKyAqICAgcHJlc2VudGVkLCBhcyBpcyB0aGUgYXV4aWxpYXJ5IGRhdGEKKyAqLworc3RhdGljCitlbnVtIGZzY2FjaGVfY2hlY2thdXggbmZzX2ZzY2FjaGVfaW5vZGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICBjb25zdCB2b2lkICpkYXRhLAorCQkJCQkJICB1aW50MTZfdCBkYXRhbGVuKQoreworCXN0cnVjdCBuZnNfZnNjYWNoZV9pbm9kZV9hdXhkYXRhIGF1eGRhdGE7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IGNvb2tpZV9uZXRmc19kYXRhOworCisJaWYgKGRhdGFsZW4gIT0gc2l6ZW9mKGF1eGRhdGEpKQorCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKworCW1lbXNldCgmYXV4ZGF0YSwgMCwgc2l6ZW9mKGF1eGRhdGEpKTsKKwlhdXhkYXRhLnNpemUgPSBuZnNpLT52ZnNfaW5vZGUuaV9zaXplOworCWF1eGRhdGEubXRpbWUgPSBuZnNpLT52ZnNfaW5vZGUuaV9tdGltZTsKKwlhdXhkYXRhLmN0aW1lID0gbmZzaS0+dmZzX2lub2RlLmlfY3RpbWU7CisKKwlpZiAoTkZTX1NFUlZFUigmbmZzaS0+dmZzX2lub2RlKS0+bmZzX2NsaWVudC0+cnBjX29wcy0+dmVyc2lvbiA9PSA0KQorCQlhdXhkYXRhLmNoYW5nZV9hdHRyID0gbmZzaS0+Y2hhbmdlX2F0dHI7CisKKwlpZiAobWVtY21wKGRhdGEsICZhdXhkYXRhLCBkYXRhbGVuKSAhPSAwKQorCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKworCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09LQVk7Cit9CisKKy8qCisgKiBJbmRpY2F0aW9uIGZyb20gRlMtQ2FjaGUgdGhhdCB0aGUgY29va2llIGlzIG5vIGxvbmdlciBjYWNoZWQKKyAqIC0gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgYmFja2luZyBzdG9yZSBjdXJyZW50bHkgY2FjaGluZyBhIGNvb2tpZQorICogICBpcyByZW1vdmVkCisgKiAtIFRoZSBuZXRmcyBzaG91bGQgdXNlIHRoaXMgdG8gY2xlYW4gdXAgYW55IG1hcmtlcnMgaW5kaWNhdGluZyBjYWNoZWQgcGFnZXMKKyAqIC0gVGhpcyBpcyBtYW5kYXRvcnkgZm9yIGFueSBvYmplY3QgdGhhdCBtYXkgaGF2ZSBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIG5mc19mc2NhY2hlX2lub2RlX25vd191bmNhY2hlZCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gY29va2llX25ldGZzX2RhdGE7CisJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKwlwZ29mZl90IGZpcnN0OworCWludCBsb29wLCBucl9wYWdlczsKKworCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7CisJZmlyc3QgPSAwOworCisJZHByaW50aygiTkZTOiBuZnNfaW5vZGVfbm93X3VuY2FjaGVkOiBuZnNfaW5vZGUgMHglcFxuIiwgbmZzaSk7CisKKwlmb3IgKDs7KSB7CisJCS8qIGdyYWIgYSBidW5jaCBvZiBwYWdlcyB0byB1bm1hcmsgKi8KKwkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cCgmcHZlYywKKwkJCQkJICBuZnNpLT52ZnNfaW5vZGUuaV9tYXBwaW5nLAorCQkJCQkgIGZpcnN0LAorCQkJCQkgIFBBR0VWRUNfU0laRSAtIHBhZ2V2ZWNfY291bnQoJnB2ZWMpKTsKKwkJaWYgKCFucl9wYWdlcykKKwkJCWJyZWFrOworCisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBucl9wYWdlczsgbG9vcCsrKQorCQkJQ2xlYXJQYWdlRnNDYWNoZShwdmVjLnBhZ2VzW2xvb3BdKTsKKworCQlmaXJzdCA9IHB2ZWMucGFnZXNbbnJfcGFnZXMgLSAxXS0+aW5kZXggKyAxOworCisJCXB2ZWMubnIgPSBucl9wYWdlczsKKwkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorfQorCisvKgorICogR2V0IGFuIGV4dHJhIHJlZmVyZW5jZSBvbiBhIHJlYWQgY29udGV4dC4KKyAqIC0gVGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIGRvZXNuJ3QgcmVxdWlyZSBhCisgKiAgIGNvbnRleHQuCisgKiAtIFRoZSByZWFkIGNvbnRleHQgaXMgcGFzc2VkIGJhY2sgdG8gTkZTIGluIHRoZSBldmVudCB0aGF0IGEgZGF0YSByZWFkIG9uIHRoZQorICogICBjYWNoZSBmYWlscyB3aXRoIEVJTyAtIGluIHdoaWNoIGNhc2UgdGhlIHNlcnZlciBtdXN0IGJlIGNvbnRhY3RlZCB0bworICogICByZXRyaWV2ZSB0aGUgZGF0YSwgd2hpY2ggcmVxdWlyZXMgdGhlIHJlYWQgY29udGV4dCBmb3Igc2VjdXJpdHkuCisgKi8KK3N0YXRpYyB2b2lkIG5mc19maF9nZXRfY29udGV4dCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdm9pZCAqY29udGV4dCkKK3sKKwlnZXRfbmZzX29wZW5fY29udGV4dChjb250ZXh0KTsKK30KKworLyoKKyAqIFJlbGVhc2UgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIGEgcmVhZCBjb250ZXh0LgorICogLSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gZG9lc24ndCByZXF1aXJlIGEKKyAqICAgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgbmZzX2ZoX3B1dF9jb250ZXh0KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB2b2lkICpjb250ZXh0KQoreworCWlmIChjb250ZXh0KQorCQlwdXRfbmZzX29wZW5fY29udGV4dChjb250ZXh0KTsKK30KKworLyoKKyAqIERlZmluZSB0aGUgaW5vZGUgb2JqZWN0IGZvciBGUy1DYWNoZS4gIFRoaXMgaXMgdXNlZCB0byBkZXNjcmliZSBhbiBpbm9kZQorICogb2JqZWN0IHRvIGZzY2FjaGVfYWNxdWlyZV9jb29raWUoKS4gIEl0IGlzIGtleWVkIGJ5IHRoZSBORlMgZmlsZSBoYW5kbGUgZm9yCisgKiBhbiBpbm9kZS4KKyAqCisgKiBDb2hlcmVuY3kgaXMgbWFuYWdlZCBieSBjb21wYXJpbmcgdGhlIGNvcGllcyBvZiBpX3NpemUsIGlfbXRpbWUgYW5kIGlfY3RpbWUKKyAqIGhlbGQgaW4gdGhlIGNhY2hlIGF1eGlsaWFyeSBkYXRhIGZvciB0aGUgZGF0YSBzdG9yYWdlIG9iamVjdCB3aXRoIHRob3NlIGluCisgKiB0aGUgaW5vZGUgc3RydWN0IGluIG1lbW9yeS4KKyAqLworY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBuZnNfZnNjYWNoZV9pbm9kZV9vYmplY3RfZGVmID0geworCS5uYW1lCQk9ICJORlMuZmgiLAorCS50eXBlCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEUsCisJLmdldF9rZXkJPSBuZnNfZnNjYWNoZV9pbm9kZV9nZXRfa2V5LAorCS5nZXRfYXR0cgk9IG5mc19mc2NhY2hlX2lub2RlX2dldF9hdHRyLAorCS5nZXRfYXV4CT0gbmZzX2ZzY2FjaGVfaW5vZGVfZ2V0X2F1eCwKKwkuY2hlY2tfYXV4CT0gbmZzX2ZzY2FjaGVfaW5vZGVfY2hlY2tfYXV4LAorCS5ub3dfdW5jYWNoZWQJPSBuZnNfZnNjYWNoZV9pbm9kZV9ub3dfdW5jYWNoZWQsCisJLmdldF9jb250ZXh0CT0gbmZzX2ZoX2dldF9jb250ZXh0LAorCS5wdXRfY29udGV4dAk9IG5mc19maF9wdXRfY29udGV4dCwKK307CmRpZmYgLS1naXQgYS9mcy9uZnMvZnNjYWNoZS5jIGIvZnMvbmZzL2ZzY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzliZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzL2ZzY2FjaGUuYwpAQCAtMCwwICsxLDUyMyBAQAorLyogTkZTIGZpbGVzeXN0ZW0gY2FjaGUgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19mc19zYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImlvc3RhdC5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKKworI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19GU0NBQ0hFCisKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBuZnNfZnNjYWNoZV9rZXlzID0gUkJfUk9PVDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZzX2ZzY2FjaGVfa2V5c19sb2NrKTsKKworLyoKKyAqIEdldCB0aGUgcGVyLWNsaWVudCBpbmRleCBjb29raWUgZm9yIGFuIE5GUyBjbGllbnQgaWYgdGhlIGFwcHJvcHJpYXRlIG1vdW50CisgKiBmbGFnIHdhcyBzZXQKKyAqIC0gV2UgYWx3YXlzIHRyeSBhbmQgZ2V0IGFuIGluZGV4IGNvb2tpZSBmb3IgdGhlIGNsaWVudCwgYnV0IGdldCBmaWxlaGFuZGxlCisgKiAgIGNvb2tpZXMgb24gYSBwZXItc3VwZXJibG9jayBiYXNpcywgZGVwZW5kaW5nIG9uIHRoZSBtb3VudCBmbGFncworICovCit2b2lkIG5mc19mc2NhY2hlX2dldF9jbGllbnRfY29va2llKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJLyogY3JlYXRlIGEgY2FjaGUgaW5kZXggZm9yIGxvb2tpbmcgdXAgZmlsZWhhbmRsZXMgKi8KKwljbHAtPmZzY2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKG5mc19mc2NhY2hlX25ldGZzLnByaW1hcnlfaW5kZXgsCisJCQkJCSAgICAgICZuZnNfZnNjYWNoZV9zZXJ2ZXJfaW5kZXhfZGVmLAorCQkJCQkgICAgICBjbHApOworCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IGdldCBjbGllbnQgY29va2llICgweCVwLzB4JXApXG4iLAorCQkgY2xwLCBjbHAtPmZzY2FjaGUpOworfQorCisvKgorICogRGlzcG9zZSBvZiBhIHBlci1jbGllbnQgY29va2llCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9jbGllbnRfY29va2llKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogcmVsZWFzaW5nIGNsaWVudCBjb29raWUgKDB4JXAvMHglcClcbiIsCisJCSBjbHAsIGNscC0+ZnNjYWNoZSk7CisKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKGNscC0+ZnNjYWNoZSwgMCk7CisJY2xwLT5mc2NhY2hlID0gTlVMTDsKK30KKworLyoKKyAqIEdldCB0aGUgY2FjaGUgY29va2llIGZvciBhbiBORlMgc3VwZXJibG9jay4gIFdlIGhhdmUgdG8gaGFuZGxlCisgKiB1bmlxdWlmaWNhdGlvbiBoZXJlIGJlY2F1c2UgdGhlIGNhY2hlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLgorICovCit2b2lkIG5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgIHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG5mc19mc2NhY2hlX2tleSAqa2V5LCAqeGtleTsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IE5GU19TQihzYik7CisJc3RydWN0IHJiX25vZGUgKipwLCAqcGFyZW50OworCWNvbnN0IGNoYXIgKnVuaXEgPSBkYXRhLT5mc2NhY2hlX3VuaXEgPzogIiI7CisJaW50IGRpZmYsIHVsZW47CisKKwl1bGVuID0gc3RybGVuKHVuaXEpOworCWtleSA9IGt6YWxsb2Moc2l6ZW9mKCprZXkpICsgdWxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrZXkpCisJCXJldHVybjsKKworCWtleS0+bmZzX2NsaWVudCA9IG5mc3MtPm5mc19jbGllbnQ7CisJa2V5LT5rZXkuc3VwZXIuc19mbGFncyA9IHNiLT5zX2ZsYWdzICYgTkZTX01TX01BU0s7CisJa2V5LT5rZXkubmZzX3NlcnZlci5mbGFncyA9IG5mc3MtPmZsYWdzOworCWtleS0+a2V5Lm5mc19zZXJ2ZXIucnNpemUgPSBuZnNzLT5yc2l6ZTsKKwlrZXktPmtleS5uZnNfc2VydmVyLndzaXplID0gbmZzcy0+d3NpemU7CisJa2V5LT5rZXkubmZzX3NlcnZlci5hY3JlZ21pbiA9IG5mc3MtPmFjcmVnbWluOworCWtleS0+a2V5Lm5mc19zZXJ2ZXIuYWNyZWdtYXggPSBuZnNzLT5hY3JlZ21heDsKKwlrZXktPmtleS5uZnNfc2VydmVyLmFjZGlybWluID0gbmZzcy0+YWNkaXJtaW47CisJa2V5LT5rZXkubmZzX3NlcnZlci5hY2Rpcm1heCA9IG5mc3MtPmFjZGlybWF4OworCWtleS0+a2V5Lm5mc19zZXJ2ZXIuZnNpZCA9IG5mc3MtPmZzaWQ7CisJa2V5LT5rZXkucnBjX2F1dGguYXVfZmxhdm9yID0gbmZzcy0+Y2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3I7CisKKwlrZXktPmtleS51bmlxX2xlbiA9IHVsZW47CisJbWVtY3B5KGtleS0+a2V5LnVuaXF1aWZpZXIsIHVuaXEsIHVsZW4pOworCisJc3Bpbl9sb2NrKCZuZnNfZnNjYWNoZV9rZXlzX2xvY2spOworCXAgPSAmbmZzX2ZzY2FjaGVfa2V5cy5yYl9ub2RlOworCXBhcmVudCA9IE5VTEw7CisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQl4a2V5ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgbmZzX2ZzY2FjaGVfa2V5LCBub2RlKTsKKworCQlpZiAoa2V5LT5uZnNfY2xpZW50IDwgeGtleS0+bmZzX2NsaWVudCkKKwkJCWdvdG8gZ29fbGVmdDsKKwkJaWYgKGtleS0+bmZzX2NsaWVudCA+IHhrZXktPm5mc19jbGllbnQpCisJCQlnb3RvIGdvX3JpZ2h0OworCisJCWRpZmYgPSBtZW1jbXAoJmtleS0+a2V5LCAmeGtleS0+a2V5LCBzaXplb2Yoa2V5LT5rZXkpKTsKKwkJaWYgKGRpZmYgPCAwKQorCQkJZ290byBnb19sZWZ0OworCQlpZiAoZGlmZiA+IDApCisJCQlnb3RvIGdvX3JpZ2h0OworCisJCWlmIChrZXktPmtleS51bmlxX2xlbiA9PSAwKQorCQkJZ290byBub25fdW5pcXVlOworCQlkaWZmID0gbWVtY21wKGtleS0+a2V5LnVuaXF1aWZpZXIsCisJCQkgICAgICB4a2V5LT5rZXkudW5pcXVpZmllciwKKwkJCSAgICAgIGtleS0+a2V5LnVuaXFfbGVuKTsKKwkJaWYgKGRpZmYgPCAwKQorCQkJZ290byBnb19sZWZ0OworCQlpZiAoZGlmZiA+IDApCisJCQlnb3RvIGdvX3JpZ2h0OworCQlnb3RvIG5vbl91bmlxdWU7CisKKwlnb19sZWZ0OgorCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWNvbnRpbnVlOworCWdvX3JpZ2h0OgorCQlwID0gJigqcCktPnJiX3JpZ2h0OworCX0KKworCXJiX2xpbmtfbm9kZSgma2V5LT5ub2RlLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigma2V5LT5ub2RlLCAmbmZzX2ZzY2FjaGVfa2V5cyk7CisJc3Bpbl91bmxvY2soJm5mc19mc2NhY2hlX2tleXNfbG9jayk7CisJbmZzcy0+ZnNjYWNoZV9rZXkgPSBrZXk7CisKKwkvKiBjcmVhdGUgYSBjYWNoZSBpbmRleCBmb3IgbG9va2luZyB1cCBmaWxlaGFuZGxlcyAqLworCW5mc3MtPmZzY2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKG5mc3MtPm5mc19jbGllbnQtPmZzY2FjaGUsCisJCQkJCSAgICAgICAmbmZzX2ZzY2FjaGVfc3VwZXJfaW5kZXhfZGVmLAorCQkJCQkgICAgICAgbmZzcyk7CisJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogZ2V0IHN1cGVyYmxvY2sgY29va2llICgweCVwLzB4JXApXG4iLAorCQkgbmZzcywgbmZzcy0+ZnNjYWNoZSk7CisJcmV0dXJuOworCitub25fdW5pcXVlOgorCXNwaW5fdW5sb2NrKCZuZnNfZnNjYWNoZV9rZXlzX2xvY2spOworCWtmcmVlKGtleSk7CisJbmZzcy0+ZnNjYWNoZV9rZXkgPSBOVUxMOworCW5mc3MtPmZzY2FjaGUgPSBOVUxMOworCXByaW50ayhLRVJOX1dBUk5JTkcgIk5GUzoiCisJICAgICAgICIgQ2FjaGUgcmVxdWVzdCBkZW5pZWQgZHVlIHRvIG5vbi11bmlxdWUgc3VwZXJibG9jayBrZXlzXG4iKTsKK30KKworLyoKKyAqIHJlbGVhc2UgYSBwZXItc3VwZXJibG9jayBjb29raWUKKyAqLwordm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NCKHNiKTsKKworCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IHJlbGVhc2luZyBzdXBlcmJsb2NrIGNvb2tpZSAoMHglcC8weCVwKVxuIiwKKwkJIG5mc3MsIG5mc3MtPmZzY2FjaGUpOworCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShuZnNzLT5mc2NhY2hlLCAwKTsKKwluZnNzLT5mc2NhY2hlID0gTlVMTDsKKworCWlmIChuZnNzLT5mc2NhY2hlX2tleSkgeworCQlzcGluX2xvY2soJm5mc19mc2NhY2hlX2tleXNfbG9jayk7CisJCXJiX2VyYXNlKCZuZnNzLT5mc2NhY2hlX2tleS0+bm9kZSwgJm5mc19mc2NhY2hlX2tleXMpOworCQlzcGluX3VubG9jaygmbmZzX2ZzY2FjaGVfa2V5c19sb2NrKTsKKwkJa2ZyZWUobmZzcy0+ZnNjYWNoZV9rZXkpOworCQluZnNzLT5mc2NhY2hlX2tleSA9IE5VTEw7CisJfQorfQorCisvKgorICogSW5pdGlhbGlzZSB0aGUgcGVyLWlub2RlIGNhY2hlIGNvb2tpZSBwb2ludGVyIGZvciBhbiBORlMgaW5vZGUuCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfaW5pdF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlORlNfSShpbm9kZSktPmZzY2FjaGUgPSBOVUxMOworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlzZXRfYml0KE5GU19JTk9fRlNDQUNIRSwgJk5GU19JKGlub2RlKS0+ZmxhZ3MpOworfQorCisvKgorICogR2V0IHRoZSBwZXItaW5vZGUgY2FjaGUgY29va2llIGZvciBhbiBORlMgaW5vZGUuCisgKi8KK3N0YXRpYyB2b2lkIG5mc19mc2NhY2hlX2VuYWJsZV9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKworCWlmIChuZnNpLT5mc2NhY2hlIHx8ICFORlNfRlNDQUNIRShpbm9kZSkpCisJCXJldHVybjsKKworCWlmICgoTkZTX1NCKHNiKS0+b3B0aW9ucyAmIE5GU19PUFRJT05fRlNDQUNIRSkpIHsKKwkJbmZzaS0+ZnNjYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUoCisJCQlORlNfU0Ioc2IpLT5mc2NhY2hlLAorCQkJJm5mc19mc2NhY2hlX2lub2RlX29iamVjdF9kZWYsCisJCQluZnNpKTsKKworCQlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiBnZXQgRkggY29va2llICgweCVwLzB4JXAvMHglcClcbiIsCisJCQkgc2IsIG5mc2ksIG5mc2ktPmZzY2FjaGUpOworCX0KK30KKworLyoKKyAqIFJlbGVhc2UgYSBwZXItaW5vZGUgY29va2llLgorICovCit2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2VfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKworCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IGNsZWFyIGNvb2tpZSAoMHglcC8weCVwKVxuIiwKKwkJIG5mc2ksIG5mc2ktPmZzY2FjaGUpOworCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShuZnNpLT5mc2NhY2hlLCAwKTsKKwluZnNpLT5mc2NhY2hlID0gTlVMTDsKK30KKworLyoKKyAqIFJldGlyZSBhIHBlci1pbm9kZSBjb29raWUsIGRlc3Ryb3lpbmcgdGhlIGRhdGEgYXR0YWNoZWQgdG8gaXQuCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfemFwX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisKKwlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiB6YXBwaW5nIGNvb2tpZSAoMHglcC8weCVwKVxuIiwKKwkJIG5mc2ksIG5mc2ktPmZzY2FjaGUpOworCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShuZnNpLT5mc2NhY2hlLCAxKTsKKwluZnNpLT5mc2NhY2hlID0gTlVMTDsKK30KKworLyoKKyAqIFR1cm4gb2ZmIHRoZSBjYWNoZSB3aXRoIHJlZ2FyZCB0byBhIHBlci1pbm9kZSBjb29raWUgaWYgb3BlbmVkIGZvciB3cml0aW5nLAorICogaW52YWxpZGF0aW5nIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHBhZ2UgY2FjaGUgcmVsYXRpbmcgdG8gdGhlIGFzc29jaWF0ZWQKKyAqIGlub2RlIHRvIGNsZWFyIHRoZSBwZXItcGFnZSBjYWNoaW5nLgorICovCitzdGF0aWMgdm9pZCBuZnNfZnNjYWNoZV9kaXNhYmxlX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWNsZWFyX2JpdChORlNfSU5PX0ZTQ0FDSEUsICZORlNfSShpbm9kZSktPmZsYWdzKTsKKworCWlmIChORlNfSShpbm9kZSktPmZzY2FjaGUpIHsKKwkJZGZwcmludGsoRlNDQUNIRSwKKwkJCSAiTkZTOiBuZnNpIDB4JXAgdHVybmluZyBjYWNoZSBvZmZcbiIsIE5GU19JKGlub2RlKSk7CisKKwkJLyogTmVlZCB0byBpbnZhbGlkYXRlIGFueSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIHJlYWQgaW4gYmVmb3JlCisJCSAqIHR1cm5pbmcgb2ZmIHRoZSBjYWNoZS4KKwkJICovCisJCWlmIChpbm9kZS0+aV9tYXBwaW5nICYmIGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMpCisJCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihpbm9kZS0+aV9tYXBwaW5nKTsKKworCQluZnNfZnNjYWNoZV96YXBfaW5vZGVfY29va2llKGlub2RlKTsKKwl9Cit9CisKKy8qCisgKiB3YWl0X29uX2JpdCgpIHNsZWVwIGZ1bmN0aW9uIGZvciB1bmludGVycnVwdGlibGUgd2FpdGluZworICovCitzdGF0aWMgaW50IG5mc19mc2NhY2hlX3dhaXRfYml0KHZvaWQgKmZsYWdzKQoreworCXNjaGVkdWxlKCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NrIGFnYWluc3Qgc29tZW9uZSBlbHNlIHRyeWluZyB0byBhbHNvIGFjcXVpcmUgb3IgcmVsaW5xdWlzaCBhIGNvb2tpZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfaW5vZGVfbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChORlNfSU5PX0ZTQ0FDSEVfTE9DSywgJm5mc2ktPmZsYWdzKSkKKwkJd2FpdF9vbl9iaXQoJm5mc2ktPmZsYWdzLCBORlNfSU5PX0ZTQ0FDSEVfTE9DSywKKwkJCSAgICBuZnNfZnNjYWNoZV93YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworfQorCisvKgorICogVW5sb2NrIGNvb2tpZSBtYW5hZ2VtZW50IGxvY2sKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX2lub2RlX3VubG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisKKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoTkZTX0lOT19GU0NBQ0hFX0xPQ0ssICZuZnNpLT5mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwl3YWtlX3VwX2JpdCgmbmZzaS0+ZmxhZ3MsIE5GU19JTk9fRlNDQUNIRV9MT0NLKTsKK30KKworLyoKKyAqIERlY2lkZSBpZiB3ZSBzaG91bGQgZW5hYmxlIG9yIGRpc2FibGUgbG9jYWwgY2FjaGluZyBmb3IgdGhpcyBpbm9kZS4KKyAqIC0gRm9yIG5vdywgd2l0aCBORlMsIG9ubHkgcmVndWxhciBmaWxlcyB0aGF0IGFyZSBvcGVuIHJlYWQtb25seSB3aWxsIGJlIGFibGUKKyAqICAgdG8gdXNlIHRoZSBjYWNoZS4KKyAqIC0gTWF5IGJlIGludm9rZWQgbXVsdGlwbGUgdGltZXMgaW4gcGFyYWxsZWwgYnkgcGFyYWxsZWwgbmZzX29wZW4oKSBmdW5jdGlvbnMuCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfc2V0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpZiAoTkZTX0ZTQ0FDSEUoaW5vZGUpKSB7CisJCW5mc19mc2NhY2hlX2lub2RlX2xvY2soaW5vZGUpOworCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZKQorCQkJbmZzX2ZzY2FjaGVfZGlzYWJsZV9pbm9kZV9jb29raWUoaW5vZGUpOworCQllbHNlCisJCQluZnNfZnNjYWNoZV9lbmFibGVfaW5vZGVfY29va2llKGlub2RlKTsKKwkJbmZzX2ZzY2FjaGVfaW5vZGVfdW5sb2NrKGlub2RlKTsKKwl9Cit9CisKKy8qCisgKiBSZXBsYWNlIGEgcGVyLWlub2RlIGNvb2tpZSBkdWUgdG8gcmV2YWxpZGF0aW9uIGRldGVjdGluZyBhIGZpbGUgaGF2aW5nCisgKiBjaGFuZ2VkIG9uIHRoZSBzZXJ2ZXIuCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfcmVzZXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IE5GU19TRVJWRVIoaW5vZGUpOworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqb2xkID0gbmZzaS0+ZnNjYWNoZTsKKworCW5mc19mc2NhY2hlX2lub2RlX2xvY2soaW5vZGUpOworCWlmIChuZnNpLT5mc2NhY2hlKSB7CisJCS8qIHJldGlyZSB0aGUgY3VycmVudCBmc2NhY2hlIGNhY2hlIGFuZCBnZXQgYSBuZXcgb25lICovCisJCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUobmZzaS0+ZnNjYWNoZSwgMSk7CisKKwkJbmZzaS0+ZnNjYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUoCisJCQluZnNzLT5uZnNfY2xpZW50LT5mc2NhY2hlLAorCQkJJm5mc19mc2NhY2hlX2lub2RlX29iamVjdF9kZWYsCisJCQluZnNpKTsKKworCQlkZnByaW50ayhGU0NBQ0hFLAorCQkJICJORlM6IHJldmFsaWRhdGlvbiBuZXcgY29va2llICgweCVwLzB4JXAvMHglcC8weCVwKVxuIiwKKwkJCSBuZnNzLCBuZnNpLCBvbGQsIG5mc2ktPmZzY2FjaGUpOworCX0KKwluZnNfZnNjYWNoZV9pbm9kZV91bmxvY2soaW5vZGUpOworfQorCisvKgorICogUmVsZWFzZSB0aGUgY2FjaGluZyBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYSBwYWdlLCBpZiB0aGUgcGFnZSBpc24ndCBidXN5CisgKiBpbnRlcmFjdGluZyB3aXRoIHRoZSBjYWNoZS4KKyAqIC0gUmV0dXJucyB0cnVlIChjYW4gcmVsZWFzZSBwYWdlKSBvciBmYWxzZSAocGFnZSBidXN5KS4KKyAqLworaW50IG5mc19mc2NhY2hlX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KTsKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IG5mc2ktPmZzY2FjaGU7CisKKwlCVUdfT04oIWNvb2tpZSk7CisKKwlpZiAoZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSkpIHsKKwkJaWYgKCEoZ2ZwICYgX19HRlBfV0FJVCkpCisJCQlyZXR1cm4gMDsKKwkJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKKwl9CisKKwlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpIHsKKwkJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogZnNjYWNoZSByZWxlYXNlcGFnZSAoMHglcC8weCVwLzB4JXApXG4iLAorCQkJIGNvb2tpZSwgcGFnZSwgbmZzaSk7CisKKwkJZnNjYWNoZV91bmNhY2hlX3BhZ2UoY29va2llLCBwYWdlKTsKKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKHBhZ2UtPm1hcHBpbmctPmhvc3QsCisJCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQsIDEpOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogUmVsZWFzZSB0aGUgY2FjaGluZyBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIGlmIHVuZGVyZ29pbmcgY29tcGxldGUgcGFnZQorICogaW52YWxpZGF0aW9uLgorICovCit2b2lkIF9fbmZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBuZnNpLT5mc2NhY2hlOworCisJQlVHX09OKCFjb29raWUpOworCisJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogZnNjYWNoZSBpbnZhbGlkYXRlcGFnZSAoMHglcC8weCVwLzB4JXApXG4iLAorCQkgY29va2llLCBwYWdlLCBuZnNpKTsKKworCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSk7CisKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCWZzY2FjaGVfdW5jYWNoZV9wYWdlKGNvb2tpZSwgcGFnZSk7CisJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKHBhZ2UtPm1hcHBpbmctPmhvc3QsCisJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwgMSk7Cit9CisKKy8qCisgKiBIYW5kbGUgY29tcGxldGlvbiBvZiBhIHBhZ2UgYmVpbmcgcmVhZCBmcm9tIHRoZSBjYWNoZS4KKyAqIC0gQ2FsbGVkIGluIHByb2Nlc3MgKGtldmVudGQpIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIG5mc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgICAgICB2b2lkICpjb250ZXh0LAorCQkJCQkgICAgICAgaW50IGVycm9yKQoreworCWRmcHJpbnRrKEZTQ0FDSEUsCisJCSAiTkZTOiByZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUgKDB4JXAvMHglcC8lZClcbiIsCisJCSBwYWdlLCBjb250ZXh0LCBlcnJvcik7CisKKwkvKiBpZiB0aGUgcmVhZCBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwgd2UganVzdCB1bmxvY2sgdGhlIHBhZ2UgYW5kIGxldAorCSAqIHRoZSBWTSByZWlzc3VlIHRoZSByZWFkcGFnZSAqLworCWlmICghZXJyb3IpIHsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwl9IGVsc2UgeworCQllcnJvciA9IG5mc19yZWFkcGFnZV9hc3luYyhjb250ZXh0LCBwYWdlLT5tYXBwaW5nLT5ob3N0LCBwYWdlKTsKKwkJaWYgKGVycm9yKQorCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfQorfQorCisvKgorICogUmV0cmlldmUgYSBwYWdlIGZyb20gZnNjYWNoZQorICovCitpbnQgX19uZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaW50IHJldDsKKworCWRmcHJpbnRrKEZTQ0FDSEUsCisJCSAiTkZTOiByZWFkcGFnZV9mcm9tX2ZzY2FjaGUoZnNjOiVwL3A6JXAoaTolbHggZjolbHgpLzB4JXApXG4iLAorCQkgTkZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlLCBwYWdlLT5pbmRleCwgcGFnZS0+ZmxhZ3MsIGlub2RlKTsKKworCXJldCA9IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKE5GU19JKGlub2RlKS0+ZnNjYWNoZSwKKwkJCQkJIHBhZ2UsCisJCQkJCSBuZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlX2NvbXBsZXRlLAorCQkJCQkgY3R4LAorCQkJCQkgR0ZQX0tFUk5FTCk7CisKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDogLyogcmVhZCBCSU8gc3VibWl0dGVkIChwYWdlIGluIGZzY2FjaGUpICovCisJCWRmcHJpbnRrKEZTQ0FDSEUsCisJCQkgIk5GUzogICAgcmVhZHBhZ2VfZnJvbV9mc2NhY2hlOiBCSU8gc3VibWl0dGVkXG4iKTsKKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX09LLCAxKTsKKwkJcmV0dXJuIHJldDsKKworCWNhc2UgLUVOT0JVRlM6IC8qIGlub2RlIG5vdCBpbiBjYWNoZSAqLworCWNhc2UgLUVOT0RBVEE6IC8qIHBhZ2Ugbm90IGluIGNhY2hlICovCisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9GQUlMLCAxKTsKKwkJZGZwcmludGsoRlNDQUNIRSwKKwkJCSAiTkZTOiAgICByZWFkcGFnZV9mcm9tX2ZzY2FjaGUgJWRcbiIsIHJldCk7CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogICAgcmVhZHBhZ2VfZnJvbV9mc2NhY2hlICVkXG4iLCByZXQpOworCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwgMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBhIHNldCBvZiBwYWdlcyBmcm9tIGZzY2FjaGUKKyAqLworaW50IF9fbmZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKKwkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCSB1bnNpZ25lZCAqbnJfcGFnZXMpCit7CisJaW50IHJldCwgbnBhZ2VzID0gKm5yX3BhZ2VzOworCisJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogbmZzX2dldHBhZ2VzX2Zyb21fZnNjYWNoZSAoMHglcC8ldS8weCVwKVxuIiwKKwkJIE5GU19JKGlub2RlKS0+ZnNjYWNoZSwgbnBhZ2VzLCBpbm9kZSk7CisKKwlyZXQgPSBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMoTkZTX0koaW5vZGUpLT5mc2NhY2hlLAorCQkJCQkgIG1hcHBpbmcsIHBhZ2VzLCBucl9wYWdlcywKKwkJCQkJICBuZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlX2NvbXBsZXRlLAorCQkJCQkgIGN0eCwKKwkJCQkJICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKKwlpZiAoKm5yX3BhZ2VzIDwgbnBhZ2VzKQorCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfT0ssCisJCQkJICAgICAgbnBhZ2VzKTsKKwlpZiAoKm5yX3BhZ2VzID4gMCkKKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX0ZBSUwsCisJCQkJICAgICAgKm5yX3BhZ2VzKTsKKworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOiAvKiByZWFkIHN1Ym1pdHRlZCB0byB0aGUgY2FjaGUgZm9yIGFsbCBwYWdlcyAqLworCQlCVUdfT04oIWxpc3RfZW1wdHkocGFnZXMpKTsKKwkJQlVHX09OKCpucl9wYWdlcyAhPSAwKTsKKwkJZGZwcmludGsoRlNDQUNIRSwKKwkJCSAiTkZTOiBuZnNfZ2V0cGFnZXNfZnJvbV9mc2NhY2hlOiBzdWJtaXR0ZWRcbiIpOworCisJCXJldHVybiByZXQ7CisKKwljYXNlIC1FTk9CVUZTOiAvKiBzb21lIHBhZ2VzIGFyZW4ndCBjYWNoZWQgYW5kIGNhbid0IGJlICovCisJY2FzZSAtRU5PREFUQTogLyogc29tZSBwYWdlcyBhcmVuJ3QgY2FjaGVkICovCisJCWRmcHJpbnRrKEZTQ0FDSEUsCisJCQkgIk5GUzogbmZzX2dldHBhZ2VzX2Zyb21fZnNjYWNoZTogbm8gcGFnZTogJWRcbiIsIHJldCk7CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJZGZwcmludGsoRlNDQUNIRSwKKwkJCSAiTkZTOiBuZnNfZ2V0cGFnZXNfZnJvbV9mc2NhY2hlOiByZXQgICVkXG4iLCByZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTdG9yZSBhIG5ld2x5IGZldGNoZWQgcGFnZSBpbiBmc2NhY2hlCisgKiAtIFBHX2ZzY2FjaGUgbXVzdCBiZSBzZXQgb24gdGhlIHBhZ2UKKyAqLwordm9pZCBfX25mc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgc3luYykKK3sKKwlpbnQgcmV0OworCisJZGZwcmludGsoRlNDQUNIRSwKKwkJICJORlM6IHJlYWRwYWdlX3RvX2ZzY2FjaGUoZnNjOiVwL3A6JXAoaTolbHggZjolbHgpLyVkKVxuIiwKKwkJIE5GU19JKGlub2RlKS0+ZnNjYWNoZSwgcGFnZSwgcGFnZS0+aW5kZXgsIHBhZ2UtPmZsYWdzLCBzeW5jKTsKKworCXJldCA9IGZzY2FjaGVfd3JpdGVfcGFnZShORlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UsIEdGUF9LRVJORUwpOworCWRmcHJpbnRrKEZTQ0FDSEUsCisJCSAiTkZTOiAgICAgcmVhZHBhZ2VfdG9fZnNjYWNoZTogcDolcChpOiVsdSBmOiVseCkgcmV0ICVkXG4iLAorCQkgcGFnZSwgcGFnZS0+aW5kZXgsIHBhZ2UtPmZsYWdzLCByZXQpOworCisJaWYgKHJldCAhPSAwKSB7CisJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKE5GU19JKGlub2RlKS0+ZnNjYWNoZSwgcGFnZSk7CisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwKKwkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19XUklUVEVOX0ZBSUwsIDEpOworCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVELCAxKTsKKwl9IGVsc2UgeworCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsCisJCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9PSywgMSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZzY2FjaGUuaCBiL2ZzL25mcy9mc2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4MDliYgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9mc2NhY2hlLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qIE5GUyBmaWxlc3lzdGVtIGNhY2hlIGludGVyZmFjZSBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9ORlNfRlNDQUNIRV9ICisjZGVmaW5lIF9ORlNfRlNDQUNIRV9ICisKKyNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnM0X21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvZnNjYWNoZS5oPgorCisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCisKKy8qCisgKiBzZXQgb2YgTkZTIEZTLUNhY2hlIG9iamVjdHMgdGhhdCBmb3JtIGEgc3VwZXJibG9jayBrZXkKKyAqLworc3RydWN0IG5mc19mc2NhY2hlX2tleSB7CisJc3RydWN0IHJiX25vZGUJCW5vZGU7CisJc3RydWN0IG5mc19jbGllbnQJKm5mc19jbGllbnQ7CS8qIHRoZSBzZXJ2ZXIgKi8KKworCS8qIHRoZSBlbGVtZW50cyBvZiB0aGUgdW5pcXVlIGtleSAtIGFzIHVzZWQgYnkgbmZzX2NvbXBhcmVfc3VwZXIoKSBhbmQKKwkgKiBuZnNfY29tcGFyZV9tb3VudF9vcHRpb25zKCkgdG8gZGlzdGluZ3Vpc2ggc3VwZXJibG9ja3MgKi8KKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZwlzX2ZsYWdzOwkvKiB2YXJpb3VzIGZsYWdzCisJCQkJCQkJICogKCYgTkZTX01TX01BU0spICovCisJCX0gc3VwZXI7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBuZnNfZnNpZCBmc2lkOworCQkJaW50CQlmbGFnczsKKwkJCXVuc2lnbmVkIGludAlyc2l6ZTsJCS8qIHJlYWQgc2l6ZSAqLworCQkJdW5zaWduZWQgaW50CXdzaXplOwkJLyogd3JpdGUgc2l6ZSAqLworCQkJdW5zaWduZWQgaW50CWFjcmVnbWluOwkvKiBhdHRyIGNhY2hlIHRpbWVvdXRzICovCisJCQl1bnNpZ25lZCBpbnQJYWNyZWdtYXg7CisJCQl1bnNpZ25lZCBpbnQJYWNkaXJtaW47CisJCQl1bnNpZ25lZCBpbnQJYWNkaXJtYXg7CisJCX0gbmZzX3NlcnZlcjsKKworCQlzdHJ1Y3QgeworCQkJcnBjX2F1dGhmbGF2b3JfdCBhdV9mbGF2b3I7CisJCX0gcnBjX2F1dGg7CisKKwkJLyogdW5pcXVpZmllciAtIGNhbiBiZSB1c2VkIGlmIG5mc19zZXJ2ZXIuZmxhZ3MgaW5jbHVkZXMKKwkJICogTkZTX01PVU5UX1VOU0hBUkVEICAqLworCQl1OCB1bmlxX2xlbjsKKwkJY2hhciB1bmlxdWlmaWVyWzBdOworCX0ga2V5OworfTsKKworLyoKKyAqIGZzY2FjaGUtaW5kZXguYworICovCitleHRlcm4gc3RydWN0IGZzY2FjaGVfbmV0ZnMgbmZzX2ZzY2FjaGVfbmV0ZnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBuZnNfZnNjYWNoZV9zZXJ2ZXJfaW5kZXhfZGVmOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgbmZzX2ZzY2FjaGVfc3VwZXJfaW5kZXhfZGVmOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgbmZzX2ZzY2FjaGVfaW5vZGVfb2JqZWN0X2RlZjsKKworZXh0ZXJuIGludCBuZnNfZnNjYWNoZV9yZWdpc3Rlcih2b2lkKTsKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX3VucmVnaXN0ZXIodm9pZCk7CisKKy8qCisgKiBmc2NhY2hlLmMKKyAqLworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfZ2V0X2NsaWVudF9jb29raWUoc3RydWN0IG5mc19jbGllbnQgKik7CitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX2NsaWVudF9jb29raWUoc3RydWN0IG5mc19jbGllbnQgKik7CisKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUoc3RydWN0IHN1cGVyX2Jsb2NrICosCisJCQkJCSBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICopOworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9pbml0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV96YXBfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX3NldF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfcmVzZXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqKTsKKworZXh0ZXJuIHZvaWQgX19uZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKiwgc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludCBuZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKiwgZ2ZwX3QpOworCitleHRlcm4gaW50IF9fbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqLAorCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKik7CitleHRlcm4gaW50IF9fbmZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKiwKKwkJCQkJc3RydWN0IGlub2RlICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosCisJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKiwgdW5zaWduZWQgKik7CitleHRlcm4gdm9pZCBfX25mc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQpOworCisvKgorICogd2FpdCBmb3IgYSBwYWdlIHRvIGNvbXBsZXRlIHdyaXRpbmcgdG8gdGhlIGNhY2hlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoc3RydWN0IG5mc19pbm9kZSAqbmZzaSwKKwkJCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKQorCQlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShuZnNpLT5mc2NhY2hlLCBwYWdlKTsKK30KKworLyoKKyAqIHJlbGVhc2UgdGhlIGNhY2hpbmcgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSBpZiB1bmRlcmdvaW5nIGNvbXBsZXRlIHBhZ2UKKyAqIGludmFsaWRhdGlvbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpCisJCV9fbmZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHBhZ2UsIGlub2RlKTsKK30KKworLyoKKyAqIFJldHJpZXZlIGEgcGFnZSBmcm9tIGFuIGlub2RlIGRhdGEgc3RvcmFnZSBvYmplY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5mc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKKwkJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoTkZTX0koaW5vZGUpLT5mc2NhY2hlKQorCQlyZXR1cm4gX19uZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKGN0eCwgaW5vZGUsIHBhZ2UpOworCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoKKyAqIFJldHJpZXZlIGEgc2V0IG9mIHBhZ2VzIGZyb20gYW4gaW5vZGUgZGF0YSBzdG9yYWdlIG9iamVjdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCQkgICAgIHVuc2lnbmVkICpucl9wYWdlcykKK3sKKwlpZiAoTkZTX0koaW5vZGUpLT5mc2NhY2hlKQorCQlyZXR1cm4gX19uZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShjdHgsIGlub2RlLCBtYXBwaW5nLCBwYWdlcywKKwkJCQkJCSAgICBucl9wYWdlcyk7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKgorICogU3RvcmUgYSBwYWdlIG5ld2x5IGZldGNoZWQgZnJvbSB0aGUgc2VydmVyIGluIGFuIGlub2RlIGRhdGEgc3RvcmFnZSBvYmplY3QKKyAqIGluIHRoZSBjYWNoZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5mc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICBpbnQgc3luYykKK3sKKwlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpCisJCV9fbmZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoaW5vZGUsIHBhZ2UsIHN5bmMpOworfQorCisvKgorICogaW5kaWNhdGUgdGhlIGNsaWVudCBjYWNoaW5nIHN0YXRlIGFzIHJlYWRhYmxlIHRleHQKKyAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpuZnNfc2VydmVyX2ZzY2FjaGVfc3RhdGUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKK3sKKwlpZiAoc2VydmVyLT5mc2NhY2hlICYmIChzZXJ2ZXItPm9wdGlvbnMgJiBORlNfT1BUSU9OX0ZTQ0FDSEUpKQorCQlyZXR1cm4gInllcyI7CisJcmV0dXJuICJubyAiOworfQorCisKKyNlbHNlIC8qIENPTkZJR19ORlNfRlNDQUNIRSAqLworc3RhdGljIGlubGluZSBpbnQgbmZzX2ZzY2FjaGVfcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3VucmVnaXN0ZXIodm9pZCkge30KKworc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX2dldF9jbGllbnRfY29va2llKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9jbGllbnRfY29va2llKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApIHt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKAorCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKSB7fQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfaW5pdF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3phcF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9zZXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9yZXNldF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkge30KKworc3RhdGljIGlubGluZSBpbnQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnApCit7CisJcmV0dXJuIDE7IC8qIFRydWU6IG1heSByZWxlYXNlIHBhZ2UgKi8KK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShzdHJ1Y3QgbmZzX2lub2RlICpuZnNpLAorCQkJCQkJICBzdHJ1Y3QgcGFnZSAqcGFnZSkge30KKworc3RhdGljIGlubGluZSBpbnQgbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAorCQkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAtRU5PQlVGUzsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG5mc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCisJCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkJICAgICB1bnNpZ25lZCAqbnJfcGFnZXMpCit7CisJcmV0dXJuIC1FTk9CVUZTOworfQorc3RhdGljIGlubGluZSB2b2lkIG5mc19yZWFkcGFnZV90b19mc2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgc3luYykge30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpuZnNfc2VydmVyX2ZzY2FjaGVfc3RhdGUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKK3sKKwlyZXR1cm4gIm5vICI7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTkZTX0ZTQ0FDSEUgKi8KKyNlbmRpZiAvKiBfTkZTX0ZTQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCBhODM0ZDFkLi42NGY4NzE5IDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgImRlbGVnYXRpb24uaCIKICNpbmNsdWRlICJpb3N0YXQuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19WRlMKIApAQCAtMTIxLDYgKzEyMiw3IEBACiAJQlVHX09OKCFsaXN0X2VtcHR5KCZORlNfSShpbm9kZSktPm9wZW5fZmlsZXMpKTsKIAluZnNfemFwX2FjbF9jYWNoZShpbm9kZSk7CiAJbmZzX2FjY2Vzc196YXBfY2FjaGUoaW5vZGUpOworCW5mc19mc2NhY2hlX3JlbGVhc2VfaW5vZGVfY29va2llKGlub2RlKTsKIH0KIAogLyoqCkBAIC0zNTUsNiArMzU3LDggQEAKIAkJbmZzaS0+YXR0cnRpbWVvX3RpbWVzdGFtcCA9IG5vdzsKIAkJbmZzaS0+YWNjZXNzX2NhY2hlID0gUkJfUk9PVDsKIAorCQluZnNfZnNjYWNoZV9pbml0X2lub2RlX2Nvb2tpZShpbm9kZSk7CisKIAkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CiAJfSBlbHNlCiAJCW5mc19yZWZyZXNoX2lub2RlKGlub2RlLCBmYXR0cik7CkBAIC02ODYsNiArNjkwLDcgQEAKIAljdHgtPm1vZGUgPSBmaWxwLT5mX21vZGU7CiAJbmZzX2ZpbGVfc2V0X29wZW5fY29udGV4dChmaWxwLCBjdHgpOwogCXB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7CisJbmZzX2ZzY2FjaGVfc2V0X2lub2RlX2Nvb2tpZShpbm9kZSwgZmlscCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc4Niw2ICs3OTEsNyBAQAogCQltZW1zZXQobmZzaS0+Y29va2lldmVyZiwgMCwgc2l6ZW9mKG5mc2ktPmNvb2tpZXZlcmYpKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX0RBVEFJTlZBTElEQVRFKTsKKwluZnNfZnNjYWNoZV9yZXNldF9pbm9kZV9jb29raWUoaW5vZGUpOwogCWRmcHJpbnRrKFBBR0VDQUNIRSwgIk5GUzogKCVzLyVMZCkgZGF0YSBjYWNoZSBpbnZhbGlkYXRlZFxuIiwKIAkJCWlub2RlLT5pX3NiLT5zX2lkLCAobG9uZyBsb25nKU5GU19GSUxFSUQoaW5vZGUpKTsKIAlyZXR1cm4gMDsKQEAgLTEwMzAsNiArMTAzNiw3IEBACiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlzdGF0dXMgPSBuZnNfcmVmcmVzaF9pbm9kZV9sb2NrZWQoaW5vZGUsIGZhdHRyKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xNDM2LDYgKzE0NDMsMTAgQEAKIHsKIAlpbnQgZXJyOwogCisJZXJyID0gbmZzX2ZzY2FjaGVfcmVnaXN0ZXIoKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ3OworCiAJZXJyID0gbmZzaW9kX3N0YXJ0KCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ2OwpAQCAtMTQ4OCw2ICsxNDk5LDggQEAKIG91dDU6CiAJbmZzaW9kX3N0b3AoKTsKIG91dDY6CisJbmZzX2ZzY2FjaGVfdW5yZWdpc3RlcigpOworb3V0NzoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNDk4LDYgKzE1MTEsNyBAQAogCW5mc19kZXN0cm95X3JlYWRwYWdlY2FjaGUoKTsKIAluZnNfZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAJbmZzX2Rlc3Ryb3lfbmZzcGFnZWNhY2hlKCk7CisJbmZzX2ZzY2FjaGVfdW5yZWdpc3RlcigpOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcnBjX3Byb2NfdW5yZWdpc3RlcigibmZzIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggMjA0MWY2OC4uZTRkNmE4MyAxMDA2NDQKLS0tIGEvZnMvbmZzL2ludGVybmFsLmgKKysrIGIvZnMvbmZzL2ludGVybmFsLmgKQEAgLTUsNiArNSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogCisjZGVmaW5lIE5GU19NU19NQVNLIChNU19SRE9OTFl8TVNfTk9TVUlEfE1TX05PREVWfE1TX05PRVhFQ3xNU19TWU5DSFJPTk9VUykKKwogc3RydWN0IG5mc19zdHJpbmc7CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIHJlYWRhaGVhZCByZXF1ZXN0cwpAQCAtMzcsMTAgKzM5LDEyIEBACiAJaW50CQkJYWNyZWdtaW4sIGFjcmVnbWF4LAogCQkJCWFjZGlybWluLCBhY2Rpcm1heDsKIAlpbnQJCQluYW1sZW47CisJdW5zaWduZWQgaW50CQlvcHRpb25zOwogCXVuc2lnbmVkIGludAkJYnNpemU7CiAJdW5zaWduZWQgaW50CQlhdXRoX2ZsYXZvcl9sZW47CiAJcnBjX2F1dGhmbGF2b3JfdAlhdXRoX2ZsYXZvcnNbMV07CiAJY2hhcgkJCSpjbGllbnRfYWRkcmVzczsKKwljaGFyCQkJKmZzY2FjaGVfdW5pcTsKIAogCXN0cnVjdCB7CiAJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCWFkZHJlc3M7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW9zdGF0LmggYi9mcy9uZnMvaW9zdGF0LmgKaW5kZXggYTM2OTUyOC4uYTJhYjI1MiAxMDA2NDQKLS0tIGEvZnMvbmZzL2lvc3RhdC5oCisrKyBiL2ZzL25mcy9pb3N0YXQuaApAQCAtMTYsNiArMTYsOSBAQAogCiBzdHJ1Y3QgbmZzX2lvc3RhdHMgewogCXVuc2lnbmVkIGxvbmcgbG9uZwlieXRlc1tfX05GU0lPU19CWVRFU01BWF07CisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCisJdW5zaWduZWQgbG9uZyBsb25nCWZzY2FjaGVbX19ORlNJT1NfRlNDQUNIRU1BWF07CisjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQlldmVudHNbX19ORlNJT1NfQ09VTlRTTUFYXTsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCkBAIC01Nyw2ICs2MCwyMSBAQAogCW5mc19hZGRfc2VydmVyX3N0YXRzKE5GU19TRVJWRVIoaW5vZGUpLCBzdGF0LCBhZGRlbmQpOwogfQogCisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2FkZF9mc2NhY2hlX3N0YXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBlbnVtIG5mc19zdGF0X2ZzY2FjaGVjb3VudGVycyBzdGF0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRlbmQpCit7CisJc3RydWN0IG5mc19pb3N0YXRzICppb3N0YXRzOworCWludCBjcHU7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJaW9zdGF0cyA9IHBlcl9jcHVfcHRyKE5GU19TRVJWRVIoaW5vZGUpLT5pb19zdGF0cywgY3B1KTsKKwlpb3N0YXRzLT5mc2NhY2hlW3N0YXRdICs9IGFkZGVuZDsKKwlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfaW9zdGF0cyAqbmZzX2FsbG9jX2lvc3RhdHModm9pZCkKIHsKIAlyZXR1cm4gYWxsb2NfcGVyY3B1KHN0cnVjdCBuZnNfaW9zdGF0cyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3Byb2MuYyBiL2ZzL25mcy9uZnMzcHJvYy5jCmluZGV4IGI4MmZlNjguLmQwY2M1Y2UgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzcHJvYy5jCisrKyBiL2ZzL25mcy9uZnMzcHJvYy5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkJZGF0YS0+YXJnLmNyZWF0ZS52ZXJpZmllclsxXSA9IGN1cnJlbnQtPnBpZDsKIAl9CiAKLQlzYXR0ci0+aWFfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAKIAlmb3IgKDs7KSB7CiAJCXN0YXR1cyA9IG5mczNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBkYXRhKTsKQEAgLTUyOCw3ICs1MjgsNyBAQAogCiAJZHByaW50aygiTkZTIGNhbGwgIG1rZGlyICVzXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAotCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJc2F0dHItPmlhX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAogCWRhdGEgPSBuZnMzX2FsbG9jX2NyZWF0ZWRhdGEoKTsKIAlpZiAoZGF0YSA9PSBOVUxMKQpAQCAtNjM5LDcgKzYzOSw3IEBACiAJZHByaW50aygiTkZTIGNhbGwgIG1rbm9kICVzICV1OiV1XG4iLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJTUFKT1IocmRldiksIE1JTk9SKHJkZXYpKTsKIAotCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJc2F0dHItPmlhX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAogCWRhdGEgPSBuZnMzX2FsbG9jX2NyZWF0ZWRhdGEoKTsKIAlpZiAoZGF0YSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA5N2JhY2NjLi5hNGQyNDI2IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMTUwMSw3ICsxNTAxLDcgQEAKIAkJYXR0ci5pYV9tb2RlID0gbmQtPmludGVudC5vcGVuLmNyZWF0ZV9tb2RlOwogCQlhdHRyLmlhX3ZhbGlkID0gQVRUUl9NT0RFOwogCQlpZiAoIUlTX1BPU0lYQUNMKGRpcikpCi0JCQlhdHRyLmlhX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJCWF0dHIuaWFfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0gZWxzZSB7CiAJCWF0dHIuaWFfdmFsaWQgPSAwOwogCQlCVUdfT04obmQtPmludGVudC5vcGVuLmZsYWdzICYgT19DUkVBVCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvcmVhZC5jIGIvZnMvbmZzL3JlYWQuYwppbmRleCBmODU2MDA0Li40YWNlM2M1IDEwMDY0NAotLS0gYS9mcy9uZnMvcmVhZC5jCisrKyBiL2ZzL25mcy9yZWFkLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAiaW9zdGF0LmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1BBR0VDQUNIRQogCkBAIC0xMTEsOCArMTEyLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbmZzX3JlYWRwYWdlX2FzeW5jKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCXN0cnVjdCBwYWdlICpwYWdlKQoraW50IG5mc19yZWFkcGFnZV9hc3luYyhzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJTElTVF9IRUFEKG9uZV9yZXF1ZXN0KTsKIAlzdHJ1Y3QgbmZzX3BhZ2UJKm5ldzsKQEAgLTEzOSw2ICsxNDAsMTEgQEAKIAogc3RhdGljIHZvaWQgbmZzX3JlYWRwYWdlX3JlbGVhc2Uoc3RydWN0IG5mc19wYWdlICpyZXEpCiB7CisJc3RydWN0IGlub2RlICpkX2lub2RlID0gcmVxLT53Yl9jb250ZXh0LT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCWlmIChQYWdlVXB0b2RhdGUocmVxLT53Yl9wYWdlKSkKKwkJbmZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoZF9pbm9kZSwgcmVxLT53Yl9wYWdlLCAwKTsKKwogCXVubG9ja19wYWdlKHJlcS0+d2JfcGFnZSk7CiAKIAlkcHJpbnRrKCJORlM6IHJlYWQgZG9uZSAoJXMvJUxkICVkQCVMZClcbiIsCkBAIC01MTAsOCArNTE2LDE1IEBACiAJfSBlbHNlCiAJCWN0eCA9IGdldF9uZnNfb3Blbl9jb250ZXh0KG5mc19maWxlX29wZW5fY29udGV4dChmaWxlKSk7CiAKKwlpZiAoIUlTX1NZTkMoaW5vZGUpKSB7CisJCWVycm9yID0gbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShjdHgsIGlub2RlLCBwYWdlKTsKKwkJaWYgKGVycm9yID09IDApCisJCQlnb3RvIG91dDsKKwl9CisKIAllcnJvciA9IG5mc19yZWFkcGFnZV9hc3luYyhjdHgsIGlub2RlLCBwYWdlKTsKIAorb3V0OgogCXB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7CiAJcmV0dXJuIGVycm9yOwogb3V0X3VubG9jazoKQEAgLTU4NCw2ICs1OTcsMTUgQEAKIAkJCXJldHVybiAtRUJBREY7CiAJfSBlbHNlCiAJCWRlc2MuY3R4ID0gZ2V0X25mc19vcGVuX2NvbnRleHQobmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbHApKTsKKworCS8qIGF0dGVtcHQgdG8gcmVhZCBhcyBtYW55IG9mIHRoZSBwYWdlcyBhcyBwb3NzaWJsZSBmcm9tIHRoZSBjYWNoZQorCSAqIC0gdGhpcyByZXR1cm5zIC1FTk9CVUZTIGltbWVkaWF0ZWx5IGlmIHRoZSBjb29raWUgaXMgbmVnYXRpdmUKKwkgKi8KKwlyZXQgPSBuZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShkZXNjLmN0eCwgaW5vZGUsIG1hcHBpbmcsCisJCQkJCSBwYWdlcywgJm5yX3BhZ2VzKTsKKwlpZiAocmV0ID09IDApCisJCWdvdG8gcmVhZF9jb21wbGV0ZTsgLyogYWxsIHBhZ2VzIHdlcmUgcmVhZCAqLworCiAJaWYgKHJzaXplIDwgUEFHRV9DQUNIRV9TSVpFKQogCQluZnNfcGFnZWlvX2luaXQoJnBnaW8sIGlub2RlLCBuZnNfcGFnZWluX211bHRpLCByc2l6ZSwgMCk7CiAJZWxzZQpAQCAtNTk0LDYgKzYxNiw3IEBACiAJbmZzX3BhZ2Vpb19jb21wbGV0ZSgmcGdpbyk7CiAJbnBhZ2VzID0gKHBnaW8ucGdfYnl0ZXNfd3JpdHRlbiArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX1JFQURQQUdFUywgbnBhZ2VzKTsKK3JlYWRfY29tcGxldGU6CiAJcHV0X25mc19vcGVuX2NvbnRleHQoZGVzYy5jdHgpOwogb3V0OgogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IDA5NDJmY2IuLjgyZWFhZGIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgogI2luY2x1ZGUgImlvc3RhdC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1ZGUwogCkBAIC03Niw2ICs3Nyw3IEBACiAJT3B0X3JkaXJwbHVzLCBPcHRfbm9yZGlycGx1cywKIAlPcHRfc2hhcmVjYWNoZSwgT3B0X25vc2hhcmVjYWNoZSwKIAlPcHRfcmVzdnBvcnQsIE9wdF9ub3Jlc3Zwb3J0LAorCU9wdF9mc2NhY2hlLCBPcHRfbm9mc2NhY2hlLAogCiAJLyogTW91bnQgb3B0aW9ucyB0aGF0IHRha2UgaW50ZWdlciBhcmd1bWVudHMgKi8KIAlPcHRfcG9ydCwKQEAgLTkzLDYgKzk1LDcgQEAKIAlPcHRfc2VjLCBPcHRfcHJvdG8sIE9wdF9tb3VudHByb3RvLCBPcHRfbW91bnRob3N0LAogCU9wdF9hZGRyLCBPcHRfbW91bnRhZGRyLCBPcHRfY2xpZW50YWRkciwKIAlPcHRfbG9va3VwY2FjaGUsCisJT3B0X2ZzY2FjaGVfdW5pcSwKIAogCS8qIFNwZWNpYWwgbW91bnQgb3B0aW9ucyAqLwogCU9wdF91c2Vyc3BhY2UsIE9wdF9kZXByZWNhdGVkLCBPcHRfc2xvcHB5LApAQCAtMTMyLDYgKzEzNSw5IEBACiAJeyBPcHRfbm9zaGFyZWNhY2hlLCAibm9zaGFyZWNhY2hlIiB9LAogCXsgT3B0X3Jlc3Zwb3J0LCAicmVzdnBvcnQiIH0sCiAJeyBPcHRfbm9yZXN2cG9ydCwgIm5vcmVzdnBvcnQiIH0sCisJeyBPcHRfZnNjYWNoZSwgImZzYyIgfSwKKwl7IE9wdF9mc2NhY2hlX3VuaXEsICJmc2M9JXMiIH0sCisJeyBPcHRfbm9mc2NhY2hlLCAibm9mc2MiIH0sCiAKIAl7IE9wdF9wb3J0LCAicG9ydD0ldSIgfSwKIAl7IE9wdF9yc2l6ZSwgInJzaXplPSV1IiB9LApAQCAtNTYzLDYgKzU2OSw4IEBACiAJaWYgKGNscC0+cnBjX29wcy0+dmVyc2lvbiA9PSA0KQogCQlzZXFfcHJpbnRmKG0sICIsY2xpZW50YWRkcj0lcyIsIGNscC0+Y2xfaXBhZGRyKTsKICNlbmRpZgorCWlmIChuZnNzLT5vcHRpb25zICYgTkZTX09QVElPTl9GU0NBQ0hFKQorCQlzZXFfcHJpbnRmKG0sICIsZnNjIik7CiB9CiAKIC8qCkBAIC02NDEsNiArNjQ5LDEwIEBACiAJCQl0b3RhbHMuZXZlbnRzW2ldICs9IHN0YXRzLT5ldmVudHNbaV07CiAJCWZvciAoaSA9IDA7IGkgPCBfX05GU0lPU19CWVRFU01BWDsgaSsrKQogCQkJdG90YWxzLmJ5dGVzW2ldICs9IHN0YXRzLT5ieXRlc1tpXTsKKyNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKKwkJZm9yIChpID0gMDsgaSA8IF9fTkZTSU9TX0ZTQ0FDSEVNQVg7IGkrKykKKwkJCXRvdGFscy5mc2NhY2hlW2ldICs9IHN0YXRzLT5mc2NhY2hlW2ldOworI2VuZGlmCiAKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAl9CkBAIC02NTEsNiArNjYzLDEzIEBACiAJc2VxX3ByaW50ZihtLCAiXG5cdGJ5dGVzOlx0Iik7CiAJZm9yIChpID0gMDsgaSA8IF9fTkZTSU9TX0JZVEVTTUFYOyBpKyspCiAJCXNlcV9wcmludGYobSwgIiVMdSAiLCB0b3RhbHMuYnl0ZXNbaV0pOworI2lmZGVmIENPTkZJR19ORlNfRlNDQUNIRQorCWlmIChuZnNzLT5vcHRpb25zICYgTkZTX09QVElPTl9GU0NBQ0hFKSB7CisJCXNlcV9wcmludGYobSwgIlxuXHRmc2M6XHQiKTsKKwkJZm9yIChpID0gMDsgaSA8IF9fTkZTSU9TX0ZTQ0FDSEVNQVg7IGkrKykKKwkJCXNlcV9wcmludGYobSwgIiVMdSAiLCB0b3RhbHMuYnl0ZXNbaV0pOworCX0KKyNlbmRpZgogCXNlcV9wcmludGYobSwgIlxuIik7CiAKIAlycGNfcHJpbnRfaW9zdGF0cyhtLCBuZnNzLT5jbGllbnQpOwpAQCAtMTA0NCw2ICsxMDYzLDI0IEBACiAJCWNhc2UgT3B0X25vcmVzdnBvcnQ6CiAJCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9OT1JFU1ZQT1JUOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZzY2FjaGU6CisJCQltbnQtPm9wdGlvbnMgfD0gTkZTX09QVElPTl9GU0NBQ0hFOworCQkJa2ZyZWUobW50LT5mc2NhY2hlX3VuaXEpOworCQkJbW50LT5mc2NhY2hlX3VuaXEgPSBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vZnNjYWNoZToKKwkJCW1udC0+b3B0aW9ucyAmPSB+TkZTX09QVElPTl9GU0NBQ0hFOworCQkJa2ZyZWUobW50LT5mc2NhY2hlX3VuaXEpOworCQkJbW50LT5mc2NhY2hlX3VuaXEgPSBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZzY2FjaGVfdW5pcToKKwkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsKKwkJCWlmICghc3RyaW5nKQorCQkJCWdvdG8gb3V0X25vbWVtOworCQkJa2ZyZWUobW50LT5mc2NhY2hlX3VuaXEpOworCQkJbW50LT5mc2NhY2hlX3VuaXEgPSBzdHJpbmc7CisJCQltbnQtPm9wdGlvbnMgfD0gTkZTX09QVElPTl9GU0NBQ0hFOworCQkJYnJlYWs7CiAKIAkJLyoKIAkJICogb3B0aW9ucyB0aGF0IHRha2UgbnVtZXJpYyB2YWx1ZXMKQEAgLTE4NzAsOCArMTkwNyw2IEBACiAgCW5mc19pbml0aWFsaXNlX3NiKHNiKTsKIH0KIAotI2RlZmluZSBORlNfTVNfTUFTSyAoTVNfUkRPTkxZfE1TX05PU1VJRHxNU19OT0RFVnxNU19OT0VYRUN8TVNfU1lOQ0hST05PVVMpCi0KIHN0YXRpYyBpbnQgbmZzX2NvbXBhcmVfbW91bnRfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpiLCBpbnQgZmxhZ3MpCiB7CiAJY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKmEgPSBzLT5zX2ZzX2luZm87CkBAIC0yMDM2LDYgKzIwNzEsNyBAQAogCWlmICghcy0+c19yb290KSB7CiAJCS8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovCiAJCW5mc19maWxsX3N1cGVyKHMsIGRhdGEpOworCQluZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHMsIGRhdGEpOwogCX0KIAogCW1udHJvb3QgPSBuZnNfZ2V0X3Jvb3QocywgbW50ZmgpOwpAQCAtMjA1Niw2ICsyMDkyLDcgQEAKIG91dDoKIAlrZnJlZShkYXRhLT5uZnNfc2VydmVyLmhvc3RuYW1lKTsKIAlrZnJlZShkYXRhLT5tb3VudF9zZXJ2ZXIuaG9zdG5hbWUpOworCWtmcmVlKGRhdGEtPmZzY2FjaGVfdW5pcSk7CiAJc2VjdXJpdHlfZnJlZV9tbnRfb3B0cygmZGF0YS0+bHNtX29wdHMpOwogb3V0X2ZyZWVfZmg6CiAJa2ZyZWUobW50ZmgpOwpAQCAtMjA4Myw2ICsyMTIwLDcgQEAKIAogCWJkaV91bnJlZ2lzdGVyKCZzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8pOwogCWtpbGxfYW5vbl9zdXBlcihzKTsKKwluZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzKTsKIAluZnNfZnJlZV9zZXJ2ZXIoc2VydmVyKTsKIH0KIApAQCAtMjM5MCw2ICsyNDI4LDcgQEAKIAlpZiAoIXMtPnNfcm9vdCkgewogCQkvKiBpbml0aWFsIHN1cGVyYmxvY2svcm9vdCBjcmVhdGlvbiAqLwogCQluZnM0X2ZpbGxfc3VwZXIocyk7CisJCW5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUocywgZGF0YSk7CiAJfQogCiAJbW50cm9vdCA9IG5mczRfZ2V0X3Jvb3QocywgbW50ZmgpOwpAQCAtMjQxMSw2ICsyNDUwLDcgQEAKIAlrZnJlZShkYXRhLT5jbGllbnRfYWRkcmVzcyk7CiAJa2ZyZWUoZGF0YS0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCk7CiAJa2ZyZWUoZGF0YS0+bmZzX3NlcnZlci5ob3N0bmFtZSk7CisJa2ZyZWUoZGF0YS0+ZnNjYWNoZV91bmlxKTsKIAlzZWN1cml0eV9mcmVlX21udF9vcHRzKCZkYXRhLT5sc21fb3B0cyk7CiBvdXRfZnJlZV9maDoKIAlrZnJlZShtbnRmaCk7CkBAIC0yNDM3LDYgKzI0NzcsNyBAQAogCWtpbGxfYW5vbl9zdXBlcihzYik7CiAKIAluZnM0X3JlbmV3ZF9wcmVwYXJlX3NodXRkb3duKHNlcnZlcik7CisJbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc2IpOwogCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc3N2Yy5jIGIvZnMvbmZzZC9uZnNzdmMuYwppbmRleCBiYzM1NjdiLi43YzA5ODUyIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc3N2Yy5jCisrKyBiL2ZzL25mc2QvbmZzc3ZjLmMKQEAgLTQwMyw3ICs0MDMsNiBAQAogbmZzZCh2b2lkICp2cnFzdHApCiB7CiAJc3RydWN0IHN2Y19ycXN0ICpycXN0cCA9IChzdHJ1Y3Qgc3ZjX3Jxc3QgKikgdnJxc3RwOwotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzcDsKIAlpbnQgZXJyLCBwcmV2ZXJyID0gMDsKIAogCS8qIExvY2sgbW9kdWxlIGFuZCBzZXQgdXAga2VybmVsIHRocmVhZCAqLwpAQCAtNDEyLDEzICs0MTEsMTEgQEAKIAkvKiBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkIHNoYXJlcyBjdXJyZW50LT5mcwogCSAqIHdpdGggdGhlIGluaXQgcHJvY2Vzcy4gV2UgbmVlZCB0byBjcmVhdGUgZmlsZXMgd2l0aCBhCiAJICogdW1hc2sgb2YgMCBpbnN0ZWFkIG9mIGluaXQncyB1bWFzay4gKi8KLQlmc3AgPSBjb3B5X2ZzX3N0cnVjdChjdXJyZW50LT5mcyk7Ci0JaWYgKCFmc3ApIHsKKwlpZiAodW5zaGFyZV9mc19zdHJ1Y3QoKSA8IDApIHsKIAkJcHJpbnRrKCJVbmFibGUgdG8gc3RhcnQgbmZzZCB0aHJlYWQ6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JZXhpdF9mcyhjdXJyZW50KTsKLQljdXJyZW50LT5mcyA9IGZzcDsKKwogCWN1cnJlbnQtPmZzLT51bWFzayA9IDA7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuYwppbmRleCAxMmRmYjQ0Li5mYmVhZWM3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hY2wuYworKysgYi9mcy9vY2ZzMi9hY2wuYwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAkJfQogCQlpZiAoIWFjbCkKLQkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAJaWYgKChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSAmJiBhY2wpIHsKIAkJc3RydWN0IHBvc2l4X2FjbCAqY2xvbmU7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCAxOWUzYTk2Li42NzhhMDY3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTI5NCw2ICsyOTQsNTUgQEAKIAkuZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycyA9IG9jZnMyX3hhdHRyX3RyZWVfZmlsbF9tYXhfbGVhZl9jbHVzdGVycywKIH07CiAKK3N0YXRpYyB2b2lkIG9jZnMyX2R4X3Jvb3Rfc2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgdTY0IGJsa25vKQoreworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290ID0gZXQtPmV0X29iamVjdDsKKworCWR4X3Jvb3QtPmRyX2xhc3RfZWJfYmxrID0gY3B1X3RvX2xlNjQoYmxrbm8pOworfQorCitzdGF0aWMgdTY0IG9jZnMyX2R4X3Jvb3RfZ2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QgPSBldC0+ZXRfb2JqZWN0OworCisJcmV0dXJuIGxlNjRfdG9fY3B1KGR4X3Jvb3QtPmRyX2xhc3RfZWJfYmxrKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZHhfcm9vdF91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgIHUzMiBjbHVzdGVycykKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCA9IGV0LT5ldF9vYmplY3Q7CisKKwlsZTMyX2FkZF9jcHUoJmR4X3Jvb3QtPmRyX2NsdXN0ZXJzLCBjbHVzdGVycyk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfcm9vdF9zYW5pdHlfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290ID0gZXQtPmV0X29iamVjdDsKKworCUJVR19PTighT0NGUzJfSVNfVkFMSURfRFhfUk9PVChkeF9yb290KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZHhfcm9vdF9maWxsX3Jvb3RfZWwoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCA9IGV0LT5ldF9vYmplY3Q7CisKKwlldC0+ZXRfcm9vdF9lbCA9ICZkeF9yb290LT5kcl9saXN0OworfQorCitzdGF0aWMgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMgb2NmczJfZHhfcm9vdF9ldF9vcHMgPSB7CisJLmVvX3NldF9sYXN0X2ViX2Jsawk9IG9jZnMyX2R4X3Jvb3Rfc2V0X2xhc3RfZWJfYmxrLAorCS5lb19nZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl9keF9yb290X2dldF9sYXN0X2ViX2JsaywKKwkuZW9fdXBkYXRlX2NsdXN0ZXJzCT0gb2NmczJfZHhfcm9vdF91cGRhdGVfY2x1c3RlcnMsCisJLmVvX3Nhbml0eV9jaGVjawk9IG9jZnMyX2R4X3Jvb3Rfc2FuaXR5X2NoZWNrLAorCS5lb19maWxsX3Jvb3RfZWwJPSBvY2ZzMl9keF9yb290X2ZpbGxfcm9vdF9lbCwKK307CisKIHN0YXRpYyB2b2lkIF9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCkBAIC0zMzksNiArMzg4LDE0IEBACiAJCQkJICZvY2ZzMl94YXR0cl92YWx1ZV9ldF9vcHMpOwogfQogCit2b2lkIG9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCV9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShldCwgaW5vZGUsIGJoLCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kciwKKwkJCQkgTlVMTCwgJm9jZnMyX2R4X3Jvb3RfZXRfb3BzKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2V0X3NldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCQkgICAgdTY0IG5ld19sYXN0X2ViX2JsaykKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmggYi9mcy9vY2ZzMi9hbGxvYy5oCmluZGV4IGNjZWZmNWMuLjM1MzI1NGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmgKKysrIGIvZnMvb2NmczIvYWxsb2MuaApAQCAtNzUsNiArNzUsOSBAQAogdm9pZCBvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiKTsKK3ZvaWQgb2NmczJfaW5pdF9keF9yb290X2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogCiAvKgogICogUmVhZCBhbiBleHRlbnQgYmxvY2sgaW50byAqYmguICBJZiAqYmggaXMgTlVMTCwgYSBiaCB3aWxsIGJlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmMgYi9mcy9vY2ZzMi9hb3BzLmMKaW5kZXggOGUxNzA5YS4uYjJjNTJiMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5jCisrKyBiL2ZzL29jZnMyL2FvcHMuYwpAQCAtMTk1NiwxNSArMTk1NiwxNiBAQAogfQogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9jZnMyX2FvcHMgPSB7Ci0JLnJlYWRwYWdlCT0gb2NmczJfcmVhZHBhZ2UsCi0JLnJlYWRwYWdlcwk9IG9jZnMyX3JlYWRwYWdlcywKLQkud3JpdGVwYWdlCT0gb2NmczJfd3JpdGVwYWdlLAotCS53cml0ZV9iZWdpbgk9IG9jZnMyX3dyaXRlX2JlZ2luLAotCS53cml0ZV9lbmQJPSBvY2ZzMl93cml0ZV9lbmQsCi0JLmJtYXAJCT0gb2NmczJfYm1hcCwKLQkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLAotCS5kaXJlY3RfSU8JPSBvY2ZzMl9kaXJlY3RfSU8sCi0JLmludmFsaWRhdGVwYWdlCT0gb2NmczJfaW52YWxpZGF0ZXBhZ2UsCi0JLnJlbGVhc2VwYWdlCT0gb2NmczJfcmVsZWFzZXBhZ2UsCi0JLm1pZ3JhdGVwYWdlCT0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKKwkucmVhZHBhZ2UJCT0gb2NmczJfcmVhZHBhZ2UsCisJLnJlYWRwYWdlcwkJPSBvY2ZzMl9yZWFkcGFnZXMsCisJLndyaXRlcGFnZQkJPSBvY2ZzMl93cml0ZXBhZ2UsCisJLndyaXRlX2JlZ2luCQk9IG9jZnMyX3dyaXRlX2JlZ2luLAorCS53cml0ZV9lbmQJCT0gb2NmczJfd3JpdGVfZW5kLAorCS5ibWFwCQkJPSBvY2ZzMl9ibWFwLAorCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLAorCS5kaXJlY3RfSU8JCT0gb2NmczJfZGlyZWN0X0lPLAorCS5pbnZhbGlkYXRlcGFnZQkJPSBvY2ZzMl9pbnZhbGlkYXRlcGFnZSwKKwkucmVsZWFzZXBhZ2UJCT0gb2NmczJfcmVsZWFzZXBhZ2UsCisJLm1pZ3JhdGVwYWdlCQk9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZQk9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwppbmRleCAwNDY5N2JhLi40Zjg1ZWNlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAKICNpbmNsdWRlICJoZWFydGJlYXQuaCIKICNpbmNsdWRlICJ0Y3AuaCIKQEAgLTYwLDYgKzYxLDExIEBACiBzdGF0aWMgTElTVF9IRUFEKG8yaGJfbm9kZV9ldmVudHMpOwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG8yaGJfc3RlYWR5X3F1ZXVlKTsKIAorI2RlZmluZSBPMkhCX0RFQlVHX0RJUgkJCSJvMmhiIgorI2RlZmluZSBPMkhCX0RFQlVHX0xJVkVOT0RFUwkJImxpdmVub2RlcyIKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvMmhiX2RlYnVnX2RpcjsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvMmhiX2RlYnVnX2xpdmVub2RlczsKKwogc3RhdGljIExJU1RfSEVBRChvMmhiX2FsbF9yZWdpb25zKTsKIAogc3RhdGljIHN0cnVjdCBvMmhiX2NhbGxiYWNrIHsKQEAgLTkwNSw3ICs5MTEsNzcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBvMmhiX2luaXQodm9pZCkKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBpbnQgbzJoYl9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXVuc2lnbmVkIGxvbmcgbWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKKwljaGFyICpidWYgPSBOVUxMOworCWludCBpID0gLTE7CisJaW50IG91dCA9IDA7CisKKwlidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCWdvdG8gYmFpbDsKKworCW8yaGJfZmlsbF9ub2RlX21hcChtYXAsIHNpemVvZihtYXApKTsKKworCXdoaWxlICgoaSA9IGZpbmRfbmV4dF9iaXQobWFwLCBPMk5NX01BWF9OT0RFUywgaSArIDEpKSA8IE8yTk1fTUFYX05PREVTKQorCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBQQUdFX1NJWkUgLSBvdXQsICIlZCAiLCBpKTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBQQUdFX1NJWkUgLSBvdXQsICJcbiIpOworCisJaV9zaXplX3dyaXRlKGlub2RlLCBvdXQpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYnVmOworCisJcmV0dXJuIDA7CitiYWlsOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IG8yaGJfZGVidWdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBvMmhiX2RlYnVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGZpbGUtPnByaXZhdGVfZGF0YSwKKwkJCQkgICAgICAgaV9zaXplX3JlYWQoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KSk7Cit9CisjZWxzZQorc3RhdGljIGludCBvMmhiX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IG8yaGJfZGVidWdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBzc2l6ZV90IG8yaGJfZGVidWdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgIC8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvMmhiX2RlYnVnX2ZvcHMgPSB7CisJLm9wZW4gPQkJbzJoYl9kZWJ1Z19vcGVuLAorCS5yZWxlYXNlID0JbzJoYl9kZWJ1Z19yZWxlYXNlLAorCS5yZWFkID0JCW8yaGJfZGVidWdfcmVhZCwKKwkubGxzZWVrID0JZ2VuZXJpY19maWxlX2xsc2VlaywKK307CisKK3ZvaWQgbzJoYl9leGl0KHZvaWQpCit7CisJaWYgKG8yaGJfZGVidWdfbGl2ZW5vZGVzKQorCQlkZWJ1Z2ZzX3JlbW92ZShvMmhiX2RlYnVnX2xpdmVub2Rlcyk7CisJaWYgKG8yaGJfZGVidWdfZGlyKQorCQlkZWJ1Z2ZzX3JlbW92ZShvMmhiX2RlYnVnX2Rpcik7Cit9CisKK2ludCBvMmhiX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtOTE4LDYgKzk5NCwyNCBAQAogCUlOSVRfTElTVF9IRUFEKCZvMmhiX25vZGVfZXZlbnRzKTsKIAogCW1lbXNldChvMmhiX2xpdmVfbm9kZV9iaXRtYXAsIDAsIHNpemVvZihvMmhiX2xpdmVfbm9kZV9iaXRtYXApKTsKKworCW8yaGJfZGVidWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKE8ySEJfREVCVUdfRElSLCBOVUxMKTsKKwlpZiAoIW8yaGJfZGVidWdfZGlyKSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW8yaGJfZGVidWdfbGl2ZW5vZGVzID0gZGVidWdmc19jcmVhdGVfZmlsZShPMkhCX0RFQlVHX0xJVkVOT0RFUywKKwkJCQkJCSAgIFNfSUZSRUd8U19JUlVTUiwKKwkJCQkJCSAgIG8yaGJfZGVidWdfZGlyLCBOVUxMLAorCQkJCQkJICAgJm8yaGJfZGVidWdfZm9wcyk7CisJaWYgKCFvMmhiX2RlYnVnX2xpdmVub2RlcykgeworCQltbG9nX2Vycm5vKC1FTk9NRU0pOworCQlkZWJ1Z2ZzX3JlbW92ZShvMmhiX2RlYnVnX2Rpcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOwogfQogCiAvKiBpZiB3ZSdyZSBhbHJlYWR5IGluIGEgY2FsbGJhY2sgdGhlbiB3ZSdyZSBhbHJlYWR5IHNlcmlhbGl6ZWQgYnkgdGhlIHNlbSAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuaCBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmgKaW5kZXggZTUxMTMzOS4uMmYxNjQ5MiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5oCkBAIC03NSw3ICs3NSw4IEBACiAJCQkgICAgICBzdHJ1Y3QgbzJoYl9jYWxsYmFja19mdW5jICpoYyk7CiB2b2lkIG8yaGJfZmlsbF9ub2RlX21hcCh1bnNpZ25lZCBsb25nICptYXAsCiAJCQl1bnNpZ25lZCBieXRlcyk7Ci12b2lkIG8yaGJfaW5pdCh2b2lkKTsKK3ZvaWQgbzJoYl9leGl0KHZvaWQpOworaW50IG8yaGJfaW5pdCh2b2lkKTsKIGludCBvMmhiX2NoZWNrX25vZGVfaGVhcnRiZWF0aW5nKHU4IG5vZGVfbnVtKTsKIGludCBvMmhiX2NoZWNrX25vZGVfaGVhcnRiZWF0aW5nX2Zyb21fY2FsbGJhY2sodTggbm9kZV9udW0pOwogaW50IG8yaGJfY2hlY2tfbG9jYWxfbm9kZV9oZWFydGJlYXRpbmcodm9pZCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKaW5kZXggNzBlOGZhOS4uN2VlNjE4OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYwpAQCAtODgxLDYgKzg4MSw3IEBACiAJbzJjYl9zeXNfc2h1dGRvd24oKTsKIAogCW8ybmV0X2V4aXQoKTsKKwlvMmhiX2V4aXQoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9vMm5tKHZvaWQpCkBAIC04ODksMTEgKzg5MCwxMyBAQAogCiAJY2x1c3Rlcl9wcmludF92ZXJzaW9uKCk7CiAKLQlvMmhiX2luaXQoKTsKKwlyZXQgPSBvMmhiX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAogCXJldCA9IG8ybmV0X2luaXQoKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfbzJoYjsKIAogCXJldCA9IG8ybmV0X3JlZ2lzdGVyX2hiX2NhbGxiYWNrcygpOwogCWlmIChyZXQpCkBAIC05MTYsNiArOTE5LDggQEAKIAlvMm5ldF91bnJlZ2lzdGVyX2hiX2NhbGxiYWNrcygpOwogb3V0X28ybmV0OgogCW8ybmV0X2V4aXQoKTsKK291dF9vMmhiOgorCW8yaGJfZXhpdCgpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kaXIuYyBiL2ZzL29jZnMyL2Rpci5jCmluZGV4IGYyYzQwOTguLmU3MTE2MGMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2Rpci5jCisrKyBiL2ZzL29jZnMyL2Rpci5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KIAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX05BTUVJCiAjaW5jbHVkZSA8Y2x1c3Rlci9tYXNrbG9nLmg+CkBAIC01OCw2ICs1OSw3IEBACiAjaW5jbHVkZSAibmFtZWkuaCIKICNpbmNsdWRlICJzdWJhbGxvYy5oIgogI2luY2x1ZGUgInN1cGVyLmgiCisjaW5jbHVkZSAic3lzZmlsZS5oIgogI2luY2x1ZGUgInVwdG9kYXRlLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgpAQCAtNzEsMTEgKzczLDYgQEAKIAlEVF9VTktOT1dOLCBEVF9SRUcsIERUX0RJUiwgRFRfQ0hSLCBEVF9CTEssIERUX0ZJRk8sIERUX1NPQ0ssIERUX0xOSwogfTsKIAotc3RhdGljIGludCBvY2ZzMl9leHRlbmRfZGlyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAotCQkJICAgIHVuc2lnbmVkIGludCBibG9ja3Nfd2FudGVkLAotCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKm5ld19kZV9iaCk7CiBzdGF0aWMgaW50IG9jZnMyX2RvX2V4dGVuZF9kaXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLApAQCAtODMsMjIgKzgwLDM2IEBACiAJCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbmV3X2JoKTsKK3N0YXRpYyBpbnQgb2NmczJfZGlyX2luZGV4ZWQoc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qCiAgKiBUaGVzZSBhcmUgZGlzdGluY3QgY2hlY2tzIGJlY2F1c2UgZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBmaWxlIHN5c3RlbSB3aWxsCiAgKiB3YW50IHRvIGhhdmUgYSB0cmFpbGluZyBkaXJlbnQgc3RydWN0dXJlIGluZGVwZW5kZW50IG9mIGluZGV4aW5nLgogICovCi1zdGF0aWMgaW50IG9jZnMyX2Rpcl9oYXNfdHJhaWxlcihzdHJ1Y3QgaW5vZGUgKmRpcikKK3N0YXRpYyBpbnQgb2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoc3RydWN0IGlub2RlICpkaXIpCiB7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCiAJaWYgKE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG9jZnMyX21ldGFfZWNjKE9DRlMyX1NCKGRpci0+aV9zYikpOworCXJldHVybiBvY2ZzMl9tZXRhX2VjYyhvc2IpIHx8IG9jZnMyX2Rpcl9pbmRleGVkKGRpcik7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCisvKgorICogIm5ldycgaGVyZSByZWZlcnMgdG8gdGhlIHBvaW50IGF0IHdoaWNoIHdlJ3JlIGNyZWF0aW5nIGEgbmV3CisgKiBkaXJlY3RvcnkgdmlhICJta2RpcigpIiwgYnV0IGFsc28gd2hlbiB3ZSdyZSBleHBhbmRpbmcgYW4gaW5saW5lCisgKiBkaXJlY3RvcnkuIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB5ZXQgaGF2ZSB0aGUgaW5kZXhpbmcgYml0IHNldAorICogb24gdGhlIGRpcmVjdG9yeSwgc28gdGhlIHN0YW5kYXJkIGNoZWNrcyB3aWxsIGZhaWwgaW4gd2hlbiBtZXRhZWNjCisgKiBpcyB0dXJuZWQgb2ZmLiBPbmx5IGRpcmVjdG9yeS1pbml0aWFsaXphdGlvbiB0eXBlIGZ1bmN0aW9ucyBzaG91bGQKKyAqIHVzZSB0aGlzIHRoZW4uIEV2ZXJ5dGhpbmcgZWxzZSB3YW50cyBvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcigpCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfbmV3X2Rpcl93YW50c190cmFpbGVyKHN0cnVjdCBpbm9kZSAqZGlyKQogewotCXJldHVybiBvY2ZzMl9tZXRhX2VjYyhvc2IpOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKworCXJldHVybiBvY2ZzMl9tZXRhX2VjYyhvc2IpIHx8CisJCW9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9kaXJfdHJhaWxlcl9ibGtfb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0xMzAsNyArMTQxLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRvZmYgPSBibGtsZW4gLSBzaXplb2Yoc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyKTsKIAotCWlmICghb2NmczJfZGlyX2hhc190cmFpbGVyKGRpcikpCisJaWYgKCFvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihkaXIpKQogCQlyZXR1cm4gMDsKIAogCWlmIChvZmZzZXQgIT0gdG9mZikKQEAgLTE0MCw3ICsxNTEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2Rpcl90cmFpbGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MTYgcmVjX2xlbikKIHsKIAlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKnRyYWlsZXI7CiAKQEAgLTE1MCw2ICsxNjEsMTUzIEBACiAJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyKSk7CiAJdHJhaWxlci0+ZGJfcGFyZW50X2Rpbm9kZSA9IGNwdV90b19sZTY0KE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAJdHJhaWxlci0+ZGJfYmxrbm8gPSBjcHVfdG9fbGU2NChiaC0+Yl9ibG9ja25yKTsKKwl0cmFpbGVyLT5kYl9mcmVlX3JlY19sZW4gPSBjcHVfdG9fbGUxNihyZWNfbGVuKTsKK30KKy8qCisgKiBMaW5rIGFuIHVuaW5kZXhlZCBibG9jayB3aXRoIGEgZGlyIHRyYWlsZXIgc3RydWN0dXJlIGludG8gdGhlIGluZGV4IGZyZWUKKyAqIGxpc3QuIFRoaXMgZnVuY3Rpb24gd2lsbCBtb2RpZnkgZGlyZGF0YV9iaCwgYnV0IGFzc3VtZXMgeW91J3ZlIGFscmVhZHkKKyAqIHBhc3NlZCBpdCB0byB0aGUgam91cm5hbC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfbGlua190cmFpbGVyKHN0cnVjdCBpbm9kZSAqZGlyLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJkYXRhX2JoKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGR4X3Jvb3RfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJdHJhaWxlciA9IG9jZnMyX3RyYWlsZXJfZnJvbV9iaChkaXJkYXRhX2JoLCBkaXItPmlfc2IpOworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisKKwl0cmFpbGVyLT5kYl9mcmVlX25leHQgPSBkeF9yb290LT5kcl9mcmVlX2JsazsKKwlkeF9yb290LT5kcl9mcmVlX2JsayA9IGNwdV90b19sZTY0KGRpcmRhdGFfYmgtPmJfYmxvY2tucik7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZHhfcm9vdF9iaCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2ZyZWVfbGlzdF9hdF9yb290KHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzKQoreworCXJldHVybiByZXMtPmRsX3ByZXZfbGVhZl9iaCA9PSBOVUxMOworfQorCit2b2lkIG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMpCit7CisJYnJlbHNlKHJlcy0+ZGxfZHhfcm9vdF9iaCk7CisJYnJlbHNlKHJlcy0+ZGxfbGVhZl9iaCk7CisJYnJlbHNlKHJlcy0+ZGxfZHhfbGVhZl9iaCk7CisJYnJlbHNlKHJlcy0+ZGxfcHJldl9sZWFmX2JoKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9kaXJfaW5kZXhlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5ERVhFRF9ESVJfRkwpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9keF9yb290X2lubGluZShzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCkKK3sKKwlyZXR1cm4gZHhfcm9vdC0+ZHJfZmxhZ3MgJiBPQ0ZTMl9EWF9GTEFHX0lOTElORTsKK30KKworLyoKKyAqIEhhc2hpbmcgY29kZSBhZGFwdGVkIGZyb20gZXh0MworICovCisjZGVmaW5lIERFTFRBIDB4OUUzNzc5QjkKKworc3RhdGljIHZvaWQgVEVBX3RyYW5zZm9ybShfX3UzMiBidWZbNF0sIF9fdTMyIGNvbnN0IGluW10pCit7CisJX191MzIJc3VtID0gMDsKKwlfX3UzMgliMCA9IGJ1ZlswXSwgYjEgPSBidWZbMV07CisJX191MzIJYSA9IGluWzBdLCBiID0gaW5bMV0sIGMgPSBpblsyXSwgZCA9IGluWzNdOworCWludAluID0gMTY7CisKKwlkbyB7CisJCXN1bSArPSBERUxUQTsKKwkJYjAgKz0gKChiMSA8PCA0KSthKSBeIChiMStzdW0pIF4gKChiMSA+PiA1KStiKTsKKwkJYjEgKz0gKChiMCA8PCA0KStjKSBeIChiMCtzdW0pIF4gKChiMCA+PiA1KStkKTsKKwl9IHdoaWxlICgtLW4pOworCisJYnVmWzBdICs9IGIwOworCWJ1ZlsxXSArPSBiMTsKK30KKworc3RhdGljIHZvaWQgc3RyMmhhc2hidWYoY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuLCBfX3UzMiAqYnVmLCBpbnQgbnVtKQoreworCV9fdTMyCXBhZCwgdmFsOworCWludAlpOworCisJcGFkID0gKF9fdTMyKWxlbiB8ICgoX191MzIpbGVuIDw8IDgpOworCXBhZCB8PSBwYWQgPDwgMTY7CisKKwl2YWwgPSBwYWQ7CisJaWYgKGxlbiA+IG51bSo0KQorCQlsZW4gPSBudW0gKiA0OworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoKGkgJSA0KSA9PSAwKQorCQkJdmFsID0gcGFkOworCQl2YWwgPSBtc2dbaV0gKyAodmFsIDw8IDgpOworCQlpZiAoKGkgJSA0KSA9PSAzKSB7CisJCQkqYnVmKysgPSB2YWw7CisJCQl2YWwgPSBwYWQ7CisJCQludW0tLTsKKwkJfQorCX0KKwlpZiAoLS1udW0gPj0gMCkKKwkJKmJ1ZisrID0gdmFsOworCXdoaWxlICgtLW51bSA+PSAwKQorCQkqYnVmKysgPSBwYWQ7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2R4X2Rpcl9uYW1lX2hhc2goc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkJICAgc3RydWN0IG9jZnMyX2R4X2hpbmZvICpoaW5mbykKK3sKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisJY29uc3QgY2hhcgkqcDsKKwlfX3UzMgkJaW5bOF0sIGJ1Zls0XTsKKworCS8qCisJICogWFhYOiBJcyB0aGlzIHJlYWxseSBuZWNlc3NhcnksIGlmIHRoZSBpbmRleCBpcyBuZXZlciBsb29rZWQKKwkgKiBhdCBieSByZWFkZGlyPyBJcyBhIGhhc2ggdmFsdWUgb2YgJzAnIGEgYmFkIGlkZWE/CisJICovCisJaWYgKChsZW4gPT0gMSAmJiAhc3RybmNtcCgiLiIsIG5hbWUsIDEpKSB8fAorCSAgICAobGVuID09IDIgJiYgIXN0cm5jbXAoIi4uIiwgbmFtZSwgMikpKSB7CisJCWJ1ZlswXSA9IGJ1ZlsxXSA9IDA7CisJCWdvdG8gb3V0OworCX0KKworI2lmZGVmIE9DRlMyX0RFQlVHX0RYX0RJUlMKKwkvKgorCSAqIFRoaXMgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIGRlYnVnIGluZGV4aW5nIHByb2JsZW1zLiBXZQorCSAqIHNob3VsZCBuZXZlciBhbGxvdyB0aGlzIHRvIGJlIHNlbGVjdGVkIHdpdGhvdXQgaGFuZCBlZGl0aW5nCisJICogdGhpcyBmaWxlIHRob3VnaC4KKwkgKi8KKwlidWZbMF0gPSBidWZbMV0gPSBsZW47CisJZ290byBvdXQ7CisjZW5kaWYKKworCW1lbWNweShidWYsIG9zYi0+b3NiX2R4X3NlZWQsIHNpemVvZihidWYpKTsKKworCXAgPSBuYW1lOworCXdoaWxlIChsZW4gPiAwKSB7CisJCXN0cjJoYXNoYnVmKHAsIGxlbiwgaW4sIDQpOworCQlURUFfdHJhbnNmb3JtKGJ1ZiwgaW4pOworCQlsZW4gLT0gMTY7CisJCXAgKz0gMTY7CisJfQorCitvdXQ6CisJaGluZm8tPm1ham9yX2hhc2ggPSBidWZbMF07CisJaGluZm8tPm1pbm9yX2hhc2ggPSBidWZbMV07CiB9CiAKIC8qCkBAIC0zMTIsNiArNDcwLDUyIEBACiB9CiAKIC8qCisgKiBWYWxpZGF0ZSBhIGRpcmVjdG9yeSB0cmFpbGVyLgorICoKKyAqIFdlIGNoZWNrIHRoZSB0cmFpbGVyIGhlcmUgcmF0aGVyIHRoYW4gaW4gb2NmczJfdmFsaWRhdGVfZGlyX2Jsb2NrKCkKKyAqIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdGhlIGlub2RlIHRvIHRlc3QuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfY2hlY2tfZGlyX3RyYWlsZXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKnRyYWlsZXI7CisKKwl0cmFpbGVyID0gb2NmczJfdHJhaWxlcl9mcm9tX2JoKGJoLCBkaXItPmlfc2IpOworCWlmICghT0NGUzJfSVNfVkFMSURfRElSX1RSQUlMRVIodHJhaWxlcikpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlvY2ZzMl9lcnJvcihkaXItPmlfc2IsCisJCQkgICAgIkludmFsaWQgZGlyYmxvY2sgIyVsbHU6ICIKKwkJCSAgICAic2lnbmF0dXJlID0gJS4qc1xuIiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsIDcsCisJCQkgICAgdHJhaWxlci0+ZGJfc2lnbmF0dXJlKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChsZTY0X3RvX2NwdSh0cmFpbGVyLT5kYl9ibGtubykgIT0gYmgtPmJfYmxvY2tucikgeworCQlyYyA9IC1FSU5WQUw7CisJCW9jZnMyX2Vycm9yKGRpci0+aV9zYiwKKwkJCSAgICAiRGlyZWN0b3J5IGJsb2NrICMlbGx1IGhhcyBhbiBpbnZhbGlkICIKKwkJCSAgICAiZGJfYmxrbm8gb2YgJWxsdSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUodHJhaWxlci0+ZGJfYmxrbm8pKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChsZTY0X3RvX2NwdSh0cmFpbGVyLT5kYl9wYXJlbnRfZGlub2RlKSAhPQorCSAgICBPQ0ZTMl9JKGRpciktPmlwX2Jsa25vKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJb2NmczJfZXJyb3IoZGlyLT5pX3NiLAorCQkJICAgICJEaXJlY3RvcnkgYmxvY2sgIyVsbHUgb24gZGlub2RlICIKKwkJCSAgICAiIyVsbHUgaGFzIGFuIGludmFsaWQgcGFyZW50X2Rpbm9kZSAiCisJCQkgICAgIm9mICVsbHUiLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tuciwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdSh0cmFpbGVyLT5kYl9ibGtubykpOworCQlnb3RvIG91dDsKKwl9CitvdXQ6CisJcmV0dXJuIHJjOworfQorCisvKgogICogVGhpcyBmdW5jdGlvbiBmb3JjZXMgYWxsIGVycm9ycyB0byAtRUlPIGZvciBjb25zaXN0ZW5jeSB3aXRoIGl0cwogICogcHJlZGVjZXNzb3IsIG9jZnMyX2JyZWFkKCkuICBXZSBoYXZlbid0IGF1ZGl0ZWQgd2hhdCByZXR1cm5pbmcgdGhlCiAgKiByZWFsIGVycm9yIGNvZGVzIHdvdWxkIGRvIHRvIGNhbGxlcnMuICBXZSBsb2cgdGhlIHJlYWwgY29kZXMgd2l0aApAQCAtMzIyLDcgKzUyNiw2IEBACiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpiaDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKnRyYWlsZXI7CiAKIAlyYyA9IG9jZnMyX3JlYWRfdmlydF9ibG9ja3MoaW5vZGUsIHZfYmxvY2ssIDEsICZ0bXAsIGZsYWdzLAogCQkJCSAgICBvY2ZzMl92YWxpZGF0ZV9kaXJfYmxvY2spOwpAQCAtMzMxLDQyICs1MzQsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyoKLQkgKiBXZSBjaGVjayB0aGUgdHJhaWxlciBoZXJlIHJhdGhlciB0aGFuIGluCi0JICogb2NmczJfdmFsaWRhdGVfZGlyX2Jsb2NrKCkgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZQotCSAqIHRoZSBpbm9kZSB0byB0ZXN0LgotCSAqLwogCWlmICghKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKSAmJgotCSAgICBvY2ZzMl9kaXJfaGFzX3RyYWlsZXIoaW5vZGUpKSB7Ci0JCXRyYWlsZXIgPSBvY2ZzMl90cmFpbGVyX2Zyb21fYmgodG1wLCBpbm9kZS0+aV9zYik7Ci0JCWlmICghT0NGUzJfSVNfVkFMSURfRElSX1RSQUlMRVIodHJhaWxlcikpIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJCSAgICAiSW52YWxpZCBkaXJibG9jayAjJWxsdTogIgotCQkJCSAgICAic2lnbmF0dXJlID0gJS4qc1xuIiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl0bXAtPmJfYmxvY2tuciwgNywKLQkJCQkgICAgdHJhaWxlci0+ZGJfc2lnbmF0dXJlKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChsZTY0X3RvX2NwdSh0cmFpbGVyLT5kYl9ibGtubykgIT0gdG1wLT5iX2Jsb2NrbnIpIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJCSAgICAiRGlyZWN0b3J5IGJsb2NrICMlbGx1IGhhcyBhbiBpbnZhbGlkICIKLQkJCQkgICAgImRiX2Jsa25vIG9mICVsbHUiLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXRtcC0+Yl9ibG9ja25yLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHRyYWlsZXItPmRiX2Jsa25vKSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAobGU2NF90b19jcHUodHJhaWxlci0+ZGJfcGFyZW50X2Rpbm9kZSkgIT0KLQkJICAgIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubykgewotCQkJcmMgPSAtRUlOVkFMOwotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJEaXJlY3RvcnkgYmxvY2sgIyVsbHUgb24gZGlub2RlICIKLQkJCQkgICAgIiMlbGx1IGhhcyBhbiBpbnZhbGlkIHBhcmVudF9kaW5vZGUgIgotCQkJCSAgICAib2YgJWxsdSIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdG1wLT5iX2Jsb2NrbnIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHRyYWlsZXItPmRiX2Jsa25vKSk7CisJICAgIG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKGlub2RlKSkgeworCQlyYyA9IG9jZnMyX2NoZWNrX2Rpcl90cmFpbGVyKGlub2RlLCB0bXApOworCQlpZiAocmMpIHsKKwkJCWlmICghKmJoKQorCQkJCWJyZWxzZSh0bXApOworCQkJbWxvZ19lcnJubyhyYyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTM3OSw2ICs1NTMsMTQxIEBACiAJcmV0dXJuIHJjID8gLUVJTyA6IDA7CiB9CiAKKy8qCisgKiBSZWFkIHRoZSBibG9jayBhdCAncGh5cycgd2hpY2ggYmVsb25ncyB0byB0aGlzIGRpcmVjdG9yeQorICogaW5vZGUuIFRoaXMgZnVuY3Rpb24gZG9lcyBubyB2aXJ0dWFsLT5waHlzaWNhbCBibG9jayB0cmFuc2xhdGlvbiAtCisgKiB3aGF0J3MgcGFzc2VkIGluIGlzIGFzc3VtZWQgdG8gYmUgYSB2YWxpZCBkaXJlY3RvcnkgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVhZF9kaXJfYmxvY2tfZGlyZWN0KHN0cnVjdCBpbm9kZSAqZGlyLCB1NjQgcGh5cywKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpiaDsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soZGlyLCBwaHlzLCAmdG1wLCBvY2ZzMl92YWxpZGF0ZV9kaXJfYmxvY2spOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAob2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoZGlyKSkgeworCQlyZXQgPSBvY2ZzMl9jaGVja19kaXJfdHJhaWxlcihkaXIsIHRtcCk7CisJCWlmIChyZXQpIHsKKwkJCWlmICghKmJoKQorCQkJCWJyZWxzZSh0bXApOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoIXJldCAmJiAhKmJoKQorCQkqYmggPSB0bXA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl92YWxpZGF0ZV9keF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisKKwlCVUdfT04oIWJ1ZmZlcl91cHRvZGF0ZShiaCkpOworCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKSBiaC0+Yl9kYXRhOworCisJcmV0ID0gb2NmczJfdmFsaWRhdGVfbWV0YV9lY2Moc2IsIGJoLT5iX2RhdGEsICZkeF9yb290LT5kcl9jaGVjayk7CisJaWYgKHJldCkgeworCQltbG9nKE1MX0VSUk9SLAorCQkgICAgICJDaGVja3N1bSBmYWlsZWQgZm9yIGRpciBpbmRleCByb290IGJsb2NrICVsbHVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIU9DRlMyX0lTX1ZBTElEX0RYX1JPT1QoZHhfcm9vdCkpIHsKKwkJb2NmczJfZXJyb3Ioc2IsCisJCQkgICAgIkRpciBJbmRleCBSb290ICMgJWxsdSBoYXMgYmFkIHNpZ25hdHVyZSAlLipzIiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGR4X3Jvb3QtPmRyX2Jsa25vKSwKKwkJCSAgICA3LCBkeF9yb290LT5kcl9zaWduYXR1cmUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZWFkX2R4X3Jvb3Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAorCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfcm9vdF9iaCkKK3sKKwlpbnQgcmV0OworCXU2NCBibGtubyA9IGxlNjRfdG9fY3B1KGRpLT5pX2R4X3Jvb3QpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gKmR4X3Jvb3RfYmg7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgYmxrbm8sICZ0bXAsIG9jZnMyX3ZhbGlkYXRlX2R4X3Jvb3QpOworCisJLyogSWYgb2NmczJfcmVhZF9ibG9jaygpIGdvdCB1cyBhIG5ldyBiaCwgcGFzcyBpdCB1cC4gKi8KKwlpZiAoIXJldCAmJiAhKmR4X3Jvb3RfYmgpCisJCSpkeF9yb290X2JoID0gdG1wOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl92YWxpZGF0ZV9keF9sZWFmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKiliaC0+Yl9kYXRhOworCisJQlVHX09OKCFidWZmZXJfdXB0b2RhdGUoYmgpKTsKKworCXJldCA9IG9jZnMyX3ZhbGlkYXRlX21ldGFfZWNjKHNiLCBiaC0+Yl9kYXRhLCAmZHhfbGVhZi0+ZGxfY2hlY2spOworCWlmIChyZXQpIHsKKwkJbWxvZyhNTF9FUlJPUiwKKwkJICAgICAiQ2hlY2tzdW0gZmFpbGVkIGZvciBkaXIgaW5kZXggbGVhZiBibG9jayAlbGx1XG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFPQ0ZTMl9JU19WQUxJRF9EWF9MRUFGKGR4X2xlYWYpKSB7CisJCW9jZnMyX2Vycm9yKHNiLCAiRGlyIEluZGV4IExlYWYgaGFzIGJhZCBzaWduYXR1cmUgJS4qcyIsCisJCQkgICAgNywgZHhfbGVhZi0+ZGxfc2lnbmF0dXJlKTsKKwkJcmV0dXJuIC1FUk9GUzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvY2ZzMl9yZWFkX2R4X2xlYWYoc3RydWN0IGlub2RlICpkaXIsIHU2NCBibGtubywKKwkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYWZfYmgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpkeF9sZWFmX2JoOworCisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhkaXIsIGJsa25vLCAmdG1wLCBvY2ZzMl92YWxpZGF0ZV9keF9sZWFmKTsKKworCS8qIElmIG9jZnMyX3JlYWRfYmxvY2soKSBnb3QgdXMgYSBuZXcgYmgsIHBhc3MgaXQgdXAuICovCisJaWYgKCFyZXQgJiYgISpkeF9sZWFmX2JoKQorCQkqZHhfbGVhZl9iaCA9IHRtcDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZWFkIGEgc2VyaWVzIG9mIGR4X2xlYWYgYmxvY2tzLiBUaGlzIGV4cGVjdHMgYWxsIGJ1ZmZlcl9oZWFkCisgKiBwb2ludGVycyB0byBiZSBOVUxMIG9uIGZ1bmN0aW9uIGVudHJ5LgorICovCitzdGF0aWMgaW50IG9jZnMyX3JlYWRfZHhfbGVhdmVzKHN0cnVjdCBpbm9kZSAqZGlyLCB1NjQgc3RhcnQsIGludCBudW0sCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhZl9iaHMpCit7CisJaW50IHJldDsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKGRpciwgc3RhcnQsIG51bSwgZHhfbGVhZl9iaHMsIDAsCisJCQkJb2NmczJfdmFsaWRhdGVfZHhfbGVhZik7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqb2NmczJfZmluZF9lbnRyeV9lbChjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKIAkJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKnJlc19kaXIpCkBAIC00ODAsMzkgKzc4OSwzNDAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9sb29rdXBfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKKwkJCQkgICB1MzIgbWFqb3JfaGFzaCwKKwkJCQkgICB1MzIgKnJldF9jcG9zLAorCQkJCSAgIHU2NCAqcmV0X3BoeXNfYmxrbm8sCisJCQkJICAgdW5zaWduZWQgaW50ICpyZXRfY2xlbikKK3sKKwlpbnQgcmV0ID0gMCwgaSwgZm91bmQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CisJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYyA9IE5VTEw7CisKKwlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgeworCQlyZXQgPSBvY2ZzMl9maW5kX2xlYWYoaW5vZGUsIGVsLCBtYWpvcl9oYXNoLCAmZWJfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKikgZWJfYmgtPmJfZGF0YTsKKwkJZWwgPSAmZWItPmhfbGlzdDsKKworCQlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgeworCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCisJCQkJICAgICJJbm9kZSAlbHUgaGFzIG5vbiB6ZXJvIHRyZWUgZGVwdGggaW4gIgorCQkJCSAgICAiYnRyZWUgdHJlZSBibG9jayAlbGx1XG4iLCBpbm9kZS0+aV9pbm8sCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZWJfYmgtPmJfYmxvY2tucik7CisJCQlyZXQgPSAtRVJPRlM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWZvdW5kID0gMDsKKwlmb3IgKGkgPSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXJlYyA9ICZlbC0+bF9yZWNzW2ldOworCisJCWlmIChsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykgPD0gbWFqb3JfaGFzaCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLCAiSW5vZGUgJWx1IGhhcyBiYWQgZXh0ZW50ICIKKwkJCSAgICAicmVjb3JkICgldSwgJXUsIDApIGluIGJ0cmVlIiwgaW5vZGUtPmlfaW5vLAorCQkJICAgIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSwKKwkJCSAgICBvY2ZzMl9yZWNfY2x1c3RlcnMoZWwsIHJlYykpOworCQlyZXQgPSAtRVJPRlM7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChyZXRfcGh5c19ibGtubykKKwkJKnJldF9waHlzX2Jsa25vID0gbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKTsKKwlpZiAocmV0X2Nwb3MpCisJCSpyZXRfY3BvcyA9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKTsKKwlpZiAocmV0X2NsZW4pCisJCSpyZXRfY2xlbiA9IGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKTsKKworb3V0OgorCWJyZWxzZShlYl9iaCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIGJsb2NrIGluZGV4LCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgY2x1c3RlciB3aGljaCB0aGlzCisgKiBoYXNoIGJlbG9uZ3MgdG9vLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX29jZnMyX2R4X2Rpcl9oYXNoX2lkeChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJCSAgIHUzMiBtaW5vcl9oYXNoKQoreworCXJldHVybiBtaW5vcl9oYXNoICYgb3NiLT5vc2JfZHhfbWFzazsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfZHhfZGlyX2hhc2hfaWR4KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9keF9oaW5mbyAqaGluZm8pCit7CisJcmV0dXJuIF9fb2NmczJfZHhfZGlyX2hhc2hfaWR4KG9zYiwgaGluZm8tPm1pbm9yX2hhc2gpOworfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9sb29rdXAoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9keF9oaW5mbyAqaGluZm8sCisJCQkgICAgICAgdTMyICpyZXRfY3BvcywKKwkJCSAgICAgICB1NjQgKnJldF9waHlzX2Jsa25vKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBjZW5kLCB1bmluaXRpYWxpemVkX3ZhcihjbGVuKTsKKwl1MzIgdW5pbml0aWFsaXplZF92YXIoY3Bvcyk7CisJdTY0IHVuaW5pdGlhbGl6ZWRfdmFyKGJsa25vKTsKKwl1MzIgbmFtZV9oYXNoID0gaGluZm8tPm1ham9yX2hhc2g7CisKKwlyZXQgPSBvY2ZzMl9keF9kaXJfbG9va3VwX3JlYyhpbm9kZSwgZWwsIG5hbWVfaGFzaCwgJmNwb3MsICZibGtubywKKwkJCQkgICAgICAmY2xlbik7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWNlbmQgPSBjcG9zICsgY2xlbjsKKwlpZiAobmFtZV9oYXNoID49IGNlbmQpIHsKKwkJLyogV2Ugd2FudCB0aGUgbGFzdCBjbHVzdGVyICovCisJCWJsa25vICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgY2xlbiAtIDEpOworCQljcG9zICs9IGNsZW4gLSAxOworCX0gZWxzZSB7CisJCWJsa25vICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwKKwkJCQkJCSAgbmFtZV9oYXNoIC0gY3Bvcyk7CisJCWNwb3MgPSBuYW1lX2hhc2g7CisJfQorCisJLyoKKwkgKiBXZSBub3cgaGF2ZSB0aGUgY2x1c3RlciB3aGljaCBzaG91bGQgaG9sZCBvdXIgZW50cnkuIFRvCisJICogZmluZCB0aGUgZXhhY3QgYmxvY2sgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGNsdXN0ZXIgdG8KKwkgKiBzZWFyY2gsIHdlIHRha2UgdGhlIGxvd2VyIGJpdHMgb2YgdGhlIGhhc2guCisJICovCisJYmxrbm8gKz0gb2NmczJfZHhfZGlyX2hhc2hfaWR4KE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGluZm8pOworCisJaWYgKHJldF9waHlzX2Jsa25vKQorCQkqcmV0X3BoeXNfYmxrbm8gPSBibGtubzsKKwlpZiAocmV0X2Nwb3MpCisJCSpyZXRfY3BvcyA9IGNwb3M7CisKK291dDoKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX3NlYXJjaChjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcykKK3sKKwlpbnQgcmV0LCBpLCBmb3VuZDsKKwl1NjQgdW5pbml0aWFsaXplZF92YXIocGh5cyk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9sZWFmX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZjsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmR4X2VudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9lbnRfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRpcl9lbnQgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9oaW5mbyAqaGluZm8gPSAmcmVzLT5kbF9oaW5mbzsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmRyX2VsOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICplbnRyeV9saXN0OworCisJb2NmczJfZHhfZGlyX25hbWVfaGFzaChkaXIsIG5hbWUsIG5hbWVsZW4sICZyZXMtPmRsX2hpbmZvKTsKKworCWlmIChvY2ZzMl9keF9yb290X2lubGluZShkeF9yb290KSkgeworCQllbnRyeV9saXN0ID0gJmR4X3Jvb3QtPmRyX2VudHJpZXM7CisJCWdvdG8gc2VhcmNoOworCX0KKworCWRyX2VsID0gJmR4X3Jvb3QtPmRyX2xpc3Q7CisKKwlyZXQgPSBvY2ZzMl9keF9kaXJfbG9va3VwKGRpciwgZHJfZWwsIGhpbmZvLCBOVUxMLCAmcGh5cyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1sb2coMCwgIkRpciAlbGx1OiBuYW1lOiBcIiUuKnNcIiwgbG9va3VwIG9mIGhhc2g6ICV1LjB4JXggIgorCSAgICAgInJldHVybnM6ICVsbHVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sCisJICAgICBuYW1lbGVuLCBuYW1lLCBoaW5mby0+bWFqb3JfaGFzaCwgaGluZm8tPm1pbm9yX2hhc2gsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBoeXMpOworCisJcmV0ID0gb2NmczJfcmVhZF9keF9sZWFmKGRpciwgcGh5cywgJmR4X2xlYWZfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkeF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopIGR4X2xlYWZfYmgtPmJfZGF0YTsKKworCW1sb2coMCwgImxlYWYgaW5mbzogbnVtX3VzZWQ6ICVkLCBjb3VudDogJWRcbiIsCisJICAgICBsZTE2X3RvX2NwdShkeF9sZWFmLT5kbF9saXN0LmRlX251bV91c2VkKSwKKwkgICAgIGxlMTZfdG9fY3B1KGR4X2xlYWYtPmRsX2xpc3QuZGVfY291bnQpKTsKKworCWVudHJ5X2xpc3QgPSAmZHhfbGVhZi0+ZGxfbGlzdDsKKworc2VhcmNoOgorCS8qCisJICogRW1wdHkgbGVhZiBpcyBsZWdhbCwgc28gbm8gbmVlZCB0byBjaGVjayBmb3IgdGhhdC4KKwkgKi8KKwlmb3VuZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX251bV91c2VkKTsgaSsrKSB7CisJCWR4X2VudHJ5ID0gJmVudHJ5X2xpc3QtPmRlX2VudHJpZXNbaV07CisKKwkJaWYgKGhpbmZvLT5tYWpvcl9oYXNoICE9IGxlMzJfdG9fY3B1KGR4X2VudHJ5LT5keF9tYWpvcl9oYXNoKQorCQkgICAgfHwgaGluZm8tPm1pbm9yX2hhc2ggIT0gbGUzMl90b19jcHUoZHhfZW50cnktPmR4X21pbm9yX2hhc2gpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU2VhcmNoIHVuaW5kZXhlZCBsZWFmIGJsb2NrIG5vdy4gV2UncmUgbm90CisJCSAqIGd1YXJhbnRlZWQgdG8gZmluZCBhbnl0aGluZy4KKwkJICovCisJCXJldCA9IG9jZnMyX3JlYWRfZGlyX2Jsb2NrX2RpcmVjdChkaXIsCisJCQkJCSAgbGU2NF90b19jcHUoZHhfZW50cnktPmR4X2RpcmVudF9ibGspLAorCQkJCQkgICZkaXJfZW50X2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBYWFg6IFdlIHNob3VsZCBjaGVjayB0aGUgdW5pbmRleGVkIGJsb2NrIGhlcmUsCisJCSAqIGJlZm9yZSB1c2luZyBpdC4KKwkJICovCisKKwkJZm91bmQgPSBvY2ZzMl9zZWFyY2hfZGlyYmxvY2soZGlyX2VudF9iaCwgZGlyLCBuYW1lLCBuYW1lbGVuLAorCQkJCQkgICAgICAwLCBkaXJfZW50X2JoLT5iX2RhdGEsCisJCQkJCSAgICAgIGRpci0+aV9zYi0+c19ibG9ja3NpemUsICZkaXJfZW50KTsKKwkJaWYgKGZvdW5kID09IDEpCisJCQlicmVhazsKKworCQlpZiAoZm91bmQgPT0gLTEpIHsKKwkJCS8qIFRoaXMgbWVhbnMgd2UgZm91bmQgYSBiYWQgZGlyZWN0b3J5IGVudHJ5LiAqLworCQkJcmV0ID0gLUVJTzsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYnJlbHNlKGRpcl9lbnRfYmgpOworCQlkaXJfZW50X2JoID0gTlVMTDsKKwl9CisKKwlpZiAoZm91bmQgPD0gMCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXMtPmRsX2xlYWZfYmggPSBkaXJfZW50X2JoOworCXJlcy0+ZGxfZW50cnkgPSBkaXJfZW50OworCXJlcy0+ZGxfZHhfbGVhZl9iaCA9IGR4X2xlYWZfYmg7CisJcmVzLT5kbF9keF9lbnRyeSA9IGR4X2VudHJ5OworCisJcmV0ID0gMDsKK291dDoKKwlpZiAocmV0KSB7CisJCWJyZWxzZShkeF9sZWFmX2JoKTsKKwkJYnJlbHNlKGRpcl9lbnRfYmgpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2ZpbmRfZW50cnlfZHgoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCisJcmV0ID0gb2NmczJfcmVhZF9pbm9kZV9ibG9jayhkaXIsICZkaV9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCisJcmV0ID0gb2NmczJfcmVhZF9keF9yb290KGRpciwgZGksICZkeF9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKikgZHhfcm9vdF9iaC0+Yl9kYXRhOworCisJcmV0ID0gb2NmczJfZHhfZGlyX3NlYXJjaChuYW1lLCBuYW1lbGVuLCBkaXIsIGR4X3Jvb3QsIGxvb2t1cCk7CisJaWYgKHJldCkgeworCQlpZiAocmV0ICE9IC1FTk9FTlQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWxvb2t1cC0+ZGxfZHhfcm9vdF9iaCA9IGR4X3Jvb3RfYmg7CisJZHhfcm9vdF9iaCA9IE5VTEw7CitvdXQ6CisJYnJlbHNlKGRpX2JoKTsKKwlicmVsc2UoZHhfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIFRyeSB0byBmaW5kIGFuIGVudHJ5IG9mIHRoZSBwcm92aWRlZCBuYW1lIHdpdGhpbiAnZGlyJy4KICAqCi0gKiBJZiBub3RoaW5nIHdhcyBmb3VuZCwgTlVMTCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIGJ1ZmZlcl9oZWFkCi0gKiBhbmQgcG9pbnRlciB0byB0aGUgZGlyIGVudHJ5IGFyZSBwYXNzZWQgYmFjay4KKyAqIElmIG5vdGhpbmcgd2FzIGZvdW5kLCAtRU5PRU5UIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIHplcm8gaXMKKyAqIHJldHVybmVkIGFuZCB0aGUgc3RydWN0ICdyZXMnIHdpbGwgY29udGFpbiBpbmZvcm1hdGlvbiB1c2VmdWwgdG8KKyAqIG90aGVyIGRpcmVjdG9yeSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgogICoKICAqIENhbGxlciBjYW4gTk9UIGFzc3VtZSBhbnl0aGluZyBhYm91dCB0aGUgY29udGVudHMgb2YgdGhlCi0gKiBidWZmZXJfaGVhZCAtIGl0IGlzIHBhc3NlZCBiYWNrIG9ubHkgc28gdGhhdCBpdCBjYW4gYmUgcGFzc2VkIGludG8KLSAqIGFueSBvbmUgb2YgdGhlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKGFkZCBlbnRyeSwgZGVsZXRlIGVudHJ5LAotICogZXRjKS4gQXMgYW4gZXhhbXBsZSwgYmggaW4gdGhlIGV4dGVudCBkaXJlY3RvcnkgY2FzZSBpcyBhIGRhdGEKLSAqIGJsb2NrLCBpbiB0aGUgaW5saW5lLWRhdGEgY2FzZSBpdCBhY3R1YWxseSBwb2ludHMgdG8gYW4gaW5vZGUuCisgKiBidWZmZXJfaGVhZHMgLSB0aGV5IGFyZSBwYXNzZWQgYmFjayBvbmx5IHNvIHRoYXQgaXQgY2FuIGJlIHBhc3NlZAorICogaW50byBhbnkgb25lIG9mIHRoZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIChhZGQgZW50cnksIGRlbGV0ZQorICogZW50cnksIGV0YykuIEFzIGFuIGV4YW1wbGUsIGJoIGluIHRoZSBleHRlbnQgZGlyZWN0b3J5IGNhc2UgaXMgYQorICogZGF0YSBibG9jaywgaW4gdGhlIGlubGluZS1kYXRhIGNhc2UgaXQgYWN0dWFsbHkgcG9pbnRzIHRvIGFuIGlub2RlLAorICogaW4gdGhlIGluZGV4ZWQgZGlyZWN0b3J5IGNhc2UsIG11bHRpcGxlIGJ1ZmZlcnMgYXJlIGludm9sdmVkLgogICovCi1zdHJ1Y3QgYnVmZmVyX2hlYWQgKm9jZnMyX2ZpbmRfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKipyZXNfZGlyKQoraW50IG9jZnMyX2ZpbmRfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCSAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQogewotCSpyZXNfZGlyID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKnJlc19kaXIgPSBOVUxMOwogCisJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGRpcikpCisJCXJldHVybiBvY2ZzMl9maW5kX2VudHJ5X2R4KG5hbWUsIG5hbWVsZW4sIGRpciwgbG9va3VwKTsKKworCS8qCisJICogVGhlIHVuaW5kZXhlZCBkaXIgY29kZSBvbmx5IHVzZXMgcGFydCBvZiB0aGUgbG9va3VwCisJICogc3RydWN0dXJlLCBzbyB0aGVyZSdzIG5vIHJlYXNvbiB0byBwdXNoIGl0IGRvd24gZnVydGhlcgorCSAqIHRoYW4gdGhpcy4KKwkgKi8KIAlpZiAoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkKLQkJcmV0dXJuIG9jZnMyX2ZpbmRfZW50cnlfaWQobmFtZSwgbmFtZWxlbiwgZGlyLCByZXNfZGlyKTsKKwkJYmggPSBvY2ZzMl9maW5kX2VudHJ5X2lkKG5hbWUsIG5hbWVsZW4sIGRpciwgJnJlc19kaXIpOworCWVsc2UKKwkJYmggPSBvY2ZzMl9maW5kX2VudHJ5X2VsKG5hbWUsIG5hbWVsZW4sIGRpciwgJnJlc19kaXIpOwogCi0JcmV0dXJuIG9jZnMyX2ZpbmRfZW50cnlfZWwobmFtZSwgbmFtZWxlbiwgZGlyLCByZXNfZGlyKTsKKwlpZiAoYmggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlsb29rdXAtPmRsX2xlYWZfYmggPSBiaDsKKwlsb29rdXAtPmRsX2VudHJ5ID0gcmVzX2RpcjsKKwlyZXR1cm4gMDsKIH0KIAogLyoKICAqIFVwZGF0ZSBpbm9kZSBudW1iZXIgYW5kIHR5cGUgb2YgYSBwcmV2aW91c2x5IGZvdW5kIGRpcmVjdG9yeSBlbnRyeS4KICAqLwogaW50IG9jZnMyX3VwZGF0ZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGVfYmgsIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlLAorCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19lbnRyeV9pbm9kZSkKIHsKIAlpbnQgcmV0OwogCW9jZnMyX2pvdXJuYWxfYWNjZXNzX2Z1bmMgYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGI7CisJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGUgPSByZXMtPmRsX2VudHJ5OworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGVfYmggPSByZXMtPmRsX2xlYWZfYmg7CiAKIAkvKgogCSAqIFRoZSBzYW1lIGNvZGUgd29ya3MgZmluZSBmb3IgYm90aCBpbmxpbmUtZGF0YSBhbmQgZXh0ZW50CkBAIC01MzgsNiArMTE0OCwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBfX29jZnMyX2RlbGV0ZV9lbnRyeSBkZWxldGVzIGEgZGlyZWN0b3J5IGVudHJ5IGJ5IG1lcmdpbmcgaXQgd2l0aCB0aGUKKyAqIHByZXZpb3VzIGVudHJ5CisgKi8KIHN0YXRpYyBpbnQgX19vY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGVfZGVsLAogCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKmZpcnN0X2RlLApAQCAtNTg3LDYgKzEyMDEsMTgxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBvY2ZzMl9maWd1cmVfZGlyZW50X2hvbGUoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGUpCit7CisJdW5zaWduZWQgaW50IGhvbGU7CisKKwlpZiAobGU2NF90b19jcHUoZGUtPmlub2RlKSA9PSAwKQorCQlob2xlID0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCWVsc2UKKwkJaG9sZSA9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKSAtCisJCQlPQ0ZTMl9ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pOworCisJcmV0dXJuIGhvbGU7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZmluZF9tYXhfcmVjX2xlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJibG9ja19iaCkKK3sKKwlpbnQgc2l6ZSwgdGhpc19ob2xlLCBsYXJnZXN0X2hvbGUgPSAwOworCWNoYXIgKnRyYWlsZXIsICpkZV9idWYsICpsaW1pdCwgKnN0YXJ0ID0gZGlyYmxvY2tfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZTsKKworCXRyYWlsZXIgPSAoY2hhciAqKW9jZnMyX3RyYWlsZXJfZnJvbV9iaChkaXJibG9ja19iaCwgc2IpOworCXNpemUgPSBvY2ZzMl9kaXJfdHJhaWxlcl9ibGtfb2ZmKHNiKTsKKwlsaW1pdCA9IHN0YXJ0ICsgc2l6ZTsKKwlkZV9idWYgPSBzdGFydDsKKwlkZSA9IChzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICopZGVfYnVmOworCWRvIHsKKwkJaWYgKGRlX2J1ZiAhPSB0cmFpbGVyKSB7CisJCQl0aGlzX2hvbGUgPSBvY2ZzMl9maWd1cmVfZGlyZW50X2hvbGUoZGUpOworCQkJaWYgKHRoaXNfaG9sZSA+IGxhcmdlc3RfaG9sZSkKKwkJCQlsYXJnZXN0X2hvbGUgPSB0aGlzX2hvbGU7CisJCX0KKworCQlkZV9idWYgKz0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCQlkZSA9IChzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICopZGVfYnVmOworCX0gd2hpbGUgKGRlX2J1ZiA8IGxpbWl0KTsKKworCWlmIChsYXJnZXN0X2hvbGUgPj0gT0NGUzJfRElSX01JTl9SRUNfTEVOKQorCQlyZXR1cm4gbGFyZ2VzdF9ob2xlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9saXN0X3JlbW92ZV9lbnRyeShzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZW50cnlfbGlzdCwKKwkJCQkgICAgICAgaW50IGluZGV4KQoreworCWludCBudW1fdXNlZCA9IGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX251bV91c2VkKTsKKworCWlmIChudW1fdXNlZCA9PSAxIHx8IGluZGV4ID09IChudW1fdXNlZCAtIDEpKQorCQlnb3RvIGNsZWFyOworCisJbWVtbW92ZSgmZW50cnlfbGlzdC0+ZGVfZW50cmllc1tpbmRleF0sCisJCSZlbnRyeV9saXN0LT5kZV9lbnRyaWVzW2luZGV4ICsgMV0sCisJCShudW1fdXNlZCAtIGluZGV4IC0gMSkqc2l6ZW9mKHN0cnVjdCBvY2ZzMl9keF9lbnRyeSkpOworY2xlYXI6CisJbnVtX3VzZWQtLTsKKwltZW1zZXQoJmVudHJ5X2xpc3QtPmRlX2VudHJpZXNbbnVtX3VzZWRdLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX2R4X2VudHJ5KSk7CisJZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQgPSBjcHVfdG9fbGUxNihudW1fdXNlZCk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGVsZXRlX2VudHJ5X2R4KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKK3sKKwlpbnQgcmV0LCBpbmRleCwgbWF4X3JlY19sZW4sIGFkZF90b19mcmVlX2xpc3QgPSAwOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IGxvb2t1cC0+ZGxfZHhfcm9vdF9iaDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxlYWZfYmggPSBsb29rdXAtPmRsX2xlYWZfYmg7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWY7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5ICpkeF9lbnRyeSA9IGxvb2t1cC0+ZGxfZHhfZW50cnk7CisJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICplbnRyeV9saXN0OworCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGdldHMgYSBiaXQgbWVzc3kgYmVjYXVzZSB3ZSBtaWdodCBoYXZlIHRvCisJICogbW9kaWZ5IHRoZSByb290IGJsb2NrLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGluZGV4ZWQKKwkgKiBlbnRyaWVzIGFyZSBzdG9yZWQgaW5saW5lLgorCSAqLworCisJLyoKKwkgKiAqT25seSogc2V0ICdlbnRyeV9saXN0JyBoZXJlLCBiYXNlZCBvbiB3aGVyZSB3ZSdyZSBsb29raW5nCisJICogZm9yIHRoZSBpbmRleGVkIGVudHJpZXMuIExhdGVyLCB3ZSBtaWdodCBzdGlsbCB3YW50IHRvCisJICogam91cm5hbCBib3RoIGJsb2NrcywgYmFzZWQgb24gZnJlZSBsaXN0IHN0YXRlLgorCSAqLworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisJaWYgKG9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKSB7CisJCWVudHJ5X2xpc3QgPSAmZHhfcm9vdC0+ZHJfZW50cmllczsKKwl9IGVsc2UgeworCQlkeF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopIGxvb2t1cC0+ZGxfZHhfbGVhZl9iaC0+Yl9kYXRhOworCQllbnRyeV9saXN0ID0gJmR4X2xlYWYtPmRsX2xpc3Q7CisJfQorCisJLyogTmVpdGhlciBvZiB0aGVzZSBhcmUgYSBkaXNrIGNvcnJ1cHRpb24gLSB0aGF0IHNob3VsZCBoYXZlCisJICogYmVlbiBjYXVnaHQgYnkgbG9va3VwLCBiZWZvcmUgd2UgZ290IGhlcmUuICovCisJQlVHX09OKGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX2NvdW50KSA8PSAwKTsKKwlCVUdfT04obGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQpIDw9IDApOworCisJaW5kZXggPSAoY2hhciAqKWR4X2VudHJ5IC0gKGNoYXIgKillbnRyeV9saXN0LT5kZV9lbnRyaWVzOworCWluZGV4IC89IHNpemVvZigqZHhfZW50cnkpOworCisJaWYgKGluZGV4ID49IGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX251bV91c2VkKSkgeworCQltbG9nKE1MX0VSUk9SLCAiRGlyICVsbHU6IEJhZCBkeF9lbnRyeSBwdHIgaWR4ICVkLCAoJXAsICVwKVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sIGluZGV4LAorCQkgICAgIGVudHJ5X2xpc3QsIGR4X2VudHJ5KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyoKKwkgKiBXZSBrbm93IHRoYXQgcmVtb3ZhbCBvZiB0aGlzIGRpcmVudCB3aWxsIGxlYXZlIGVub3VnaCByb29tCisJICogZm9yIGEgbmV3IG9uZSwgc28gYWRkIHRoaXMgYmxvY2sgdG8gdGhlIGZyZWUgbGlzdCBpZiBpdAorCSAqIGlzbid0IGFscmVhZHkgdGhlcmUuCisJICovCisJdHJhaWxlciA9IG9jZnMyX3RyYWlsZXJfZnJvbV9iaChsZWFmX2JoLCBkaXItPmlfc2IpOworCWlmICh0cmFpbGVyLT5kYl9mcmVlX3JlY19sZW4gPT0gMCkKKwkJYWRkX3RvX2ZyZWVfbGlzdCA9IDE7CisKKwkvKgorCSAqIEFkZCB0aGUgYmxvY2sgaG9sZGluZyBvdXIgaW5kZXggaW50byB0aGUgam91cm5hbCBiZWZvcmUKKwkgKiByZW1vdmluZyB0aGUgdW5pbmRleGVkIGVudHJ5LiBJZiB3ZSBnZXQgYW4gZXJyb3IgcmV0dXJuCisJICogZnJvbSBfX29jZnMyX2RlbGV0ZV9lbnRyeSgpLCB0aGVuIGl0IGhhc24ndCByZW1vdmVkIHRoZQorCSAqIGVudHJ5IHlldC4gTGlrZXdpc2UsIHN1Y2Nlc3NmdWwgcmV0dXJuIG1lYW5zIHdlICptdXN0KgorCSAqIHJlbW92ZSB0aGUgaW5kZXhlZCBlbnRyeS4KKwkgKgorCSAqIFdlJ3JlIGFsc28gY2FyZWZ1bCB0byBqb3VybmFsIHRoZSByb290IHRyZWUgYmxvY2sgaGVyZSBhcworCSAqIHRoZSBlbnRyeSBjb3VudCBuZWVkcyB0byBiZSB1cGRhdGVkLiBBbHNvLCB3ZSBtaWdodCBiZQorCSAqIGFkZGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIGZyZWUgbGlzdC4KKwkgKi8KKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghb2NmczJfZHhfcm9vdF9pbmxpbmUoZHhfcm9vdCkpIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlLCBkaXIsCisJCQkJCSAgICAgIGxvb2t1cC0+ZGxfZHhfbGVhZl9iaCwKKwkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW1sb2coMCwgIkRpciAlbGx1OiBkZWxldGUgZW50cnkgYXQgaW5kZXg6ICVkXG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLCBpbmRleCk7CisKKwlyZXQgPSBfX29jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGUsIGRpciwgbG9va3VwLT5kbF9lbnRyeSwKKwkJCQkgICBsZWFmX2JoLCBsZWFmX2JoLT5iX2RhdGEsIGxlYWZfYmgtPmJfc2l6ZSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1heF9yZWNfbGVuID0gb2NmczJfZmluZF9tYXhfcmVjX2xlbihkaXItPmlfc2IsIGxlYWZfYmgpOworCXRyYWlsZXItPmRiX2ZyZWVfcmVjX2xlbiA9IGNwdV90b19sZTE2KG1heF9yZWNfbGVuKTsKKwlpZiAoYWRkX3RvX2ZyZWVfbGlzdCkgeworCQl0cmFpbGVyLT5kYl9mcmVlX25leHQgPSBkeF9yb290LT5kcl9mcmVlX2JsazsKKwkJZHhfcm9vdC0+ZHJfZnJlZV9ibGsgPSBjcHVfdG9fbGU2NChsZWFmX2JoLT5iX2Jsb2NrbnIpOworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZHhfcm9vdF9iaCk7CisJfQorCisJLyogbGVhZl9iaCB3YXMgam91cm5hbF9hY2Nlc3NlZCBmb3IgdXMgaW4gX19vY2ZzMl9kZWxldGVfZW50cnkgKi8KKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbGVhZl9iaCk7CisKKwlsZTMyX2FkZF9jcHUoJmR4X3Jvb3QtPmRyX251bV9lbnRyaWVzLCAtMSk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGR4X3Jvb3RfYmgpOworCisJb2NmczJfZHhfbGlzdF9yZW1vdmVfZW50cnkoZW50cnlfbGlzdCwgaW5kZXgpOworCisJaWYgKCFvY2ZzMl9keF9yb290X2lubGluZShkeF9yb290KSkKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGxvb2t1cC0+ZGxfZHhfbGVhZl9iaCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9kZWxldGVfZW50cnlfaWQoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkJc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlX2RlbCwKQEAgLTYyNCwxOCArMTQxMywyMiBAQAogfQogCiAvKgotICogb2NmczJfZGVsZXRlX2VudHJ5IGRlbGV0ZXMgYSBkaXJlY3RvcnkgZW50cnkgYnkgbWVyZ2luZyBpdCB3aXRoIHRoZQotICogcHJldmlvdXMgZW50cnkKKyAqIERlbGV0ZSBhIGRpcmVjdG9yeSBlbnRyeS4gSGlkZSB0aGUgZGV0YWlscyBvZiBkaXJlY3RvcnkKKyAqIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIGNhbGxlci4KICAqLwogaW50IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZV9kZWwsCi0JCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQorCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMpCiB7Ci0JaWYgKE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCi0JCXJldHVybiBvY2ZzMl9kZWxldGVfZW50cnlfaWQoaGFuZGxlLCBkaXIsIGRlX2RlbCwgYmgpOworCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKQorCQlyZXR1cm4gb2NmczJfZGVsZXRlX2VudHJ5X2R4KGhhbmRsZSwgZGlyLCByZXMpOwogCi0JcmV0dXJuIG9jZnMyX2RlbGV0ZV9lbnRyeV9lbChoYW5kbGUsIGRpciwgZGVfZGVsLCBiaCk7CisJaWYgKE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCisJCXJldHVybiBvY2ZzMl9kZWxldGVfZW50cnlfaWQoaGFuZGxlLCBkaXIsIHJlcy0+ZGxfZW50cnksCisJCQkJCSAgICAgcmVzLT5kbF9sZWFmX2JoKTsKKworCXJldHVybiBvY2ZzMl9kZWxldGVfZW50cnlfZWwoaGFuZGxlLCBkaXIsIHJlcy0+ZGxfZW50cnksCisJCQkJICAgICByZXMtPmRsX2xlYWZfYmgpOwogfQogCiAvKgpAQCAtNjYzLDE4ICsxNDU2LDE2NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9kaXJfbGVhZl9pbnNlcnRfdGFpbChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZiwKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmR4X25ld19lbnRyeSkKK3sKKwlpbnQgaTsKKworCWkgPSBsZTE2X3RvX2NwdShkeF9sZWFmLT5kbF9saXN0LmRlX251bV91c2VkKTsKKwlkeF9sZWFmLT5kbF9saXN0LmRlX2VudHJpZXNbaV0gPSAqZHhfbmV3X2VudHJ5OworCisJbGUxNl9hZGRfY3B1KCZkeF9sZWFmLT5kbF9saXN0LmRlX251bV91c2VkLCAxKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZHhfZW50cnlfbGlzdF9pbnNlcnQoc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmVudHJ5X2xpc3QsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9keF9oaW5mbyAqaGluZm8sCisJCQkJICAgICAgIHU2NCBkaXJlbnRfYmxrKQoreworCWludCBpOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZHhfZW50cnk7CisKKwlpID0gbGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQpOworCWR4X2VudHJ5ID0gJmVudHJ5X2xpc3QtPmRlX2VudHJpZXNbaV07CisKKwltZW1zZXQoZHhfZW50cnksIDAsIHNpemVvZigqZHhfZW50cnkpKTsKKwlkeF9lbnRyeS0+ZHhfbWFqb3JfaGFzaCA9IGNwdV90b19sZTMyKGhpbmZvLT5tYWpvcl9oYXNoKTsKKwlkeF9lbnRyeS0+ZHhfbWlub3JfaGFzaCA9IGNwdV90b19sZTMyKGhpbmZvLT5taW5vcl9oYXNoKTsKKwlkeF9lbnRyeS0+ZHhfZGlyZW50X2JsayA9IGNwdV90b19sZTY0KGRpcmVudF9ibGspOworCisJbGUxNl9hZGRfY3B1KCZlbnRyeV9saXN0LT5kZV9udW1fdXNlZCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgX19vY2ZzMl9keF9kaXJfbGVhZl9pbnNlcnQoc3RydWN0IGlub2RlICpkaXIsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2R4X2hpbmZvICpoaW5mbywKKwkJCQkgICAgICB1NjQgZGlyZW50X2JsaywKKwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X2xlYWZfYmgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZjsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLCBkeF9sZWFmX2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKWR4X2xlYWZfYmgtPmJfZGF0YTsKKwlvY2ZzMl9keF9lbnRyeV9saXN0X2luc2VydCgmZHhfbGVhZi0+ZGxfbGlzdCwgaGluZm8sIGRpcmVudF9ibGspOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkeF9sZWFmX2JoKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2R4X2lubGluZV9yb290X2luc2VydChzdHJ1Y3QgaW5vZGUgKmRpciwgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJc3RydWN0IG9jZnMyX2R4X2hpbmZvICpoaW5mbywKKwkJCQkJdTY0IGRpcmVudF9ibGssCisJCQkJCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290KQoreworCW9jZnMyX2R4X2VudHJ5X2xpc3RfaW5zZXJ0KCZkeF9yb290LT5kcl9lbnRyaWVzLCBoaW5mbywgZGlyZW50X2Jsayk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX2luc2VydChzdHJ1Y3QgaW5vZGUgKmRpciwgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBsb29rdXAtPmRsX2R4X3Jvb3RfYmg7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilsb29rdXAtPmRsX2R4X3Jvb3RfYmgtPmJfZGF0YTsKKwlpZiAob2NmczJfZHhfcm9vdF9pbmxpbmUoZHhfcm9vdCkpIHsKKwkJb2NmczJfZHhfaW5saW5lX3Jvb3RfaW5zZXJ0KGRpciwgaGFuZGxlLAorCQkJCQkgICAgJmxvb2t1cC0+ZGxfaGluZm8sCisJCQkJCSAgICBsb29rdXAtPmRsX2xlYWZfYmgtPmJfYmxvY2tuciwKKwkJCQkJICAgIGR4X3Jvb3QpOworCX0gZWxzZSB7CisJCXJldCA9IF9fb2NmczJfZHhfZGlyX2xlYWZfaW5zZXJ0KGRpciwgaGFuZGxlLCAmbG9va3VwLT5kbF9oaW5mbywKKwkJCQkJCSBsb29rdXAtPmRsX2xlYWZfYmgtPmJfYmxvY2tuciwKKwkJCQkJCSBsb29rdXAtPmRsX2R4X2xlYWZfYmgpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCisJbGUzMl9hZGRfY3B1KCZkeF9yb290LT5kcl9udW1fZW50cmllcywgMSk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGR4X3Jvb3RfYmgpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fZnJlZV9saXN0KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKK3sKKwlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKnRyYWlsZXIsICpwcmV2OworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwl0cmFpbGVyID0gb2NmczJfdHJhaWxlcl9mcm9tX2JoKGxvb2t1cC0+ZGxfbGVhZl9iaCwgZGlyLT5pX3NiKTsKKworCWlmIChvY2ZzMl9mcmVlX2xpc3RfYXRfcm9vdChsb29rdXApKSB7CisJCWJoID0gbG9va3VwLT5kbF9keF9yb290X2JoOworCQlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopYmgtPmJfZGF0YTsKKwkJZHhfcm9vdC0+ZHJfZnJlZV9ibGsgPSB0cmFpbGVyLT5kYl9mcmVlX25leHQ7CisJfSBlbHNlIHsKKwkJYmggPSBsb29rdXAtPmRsX3ByZXZfbGVhZl9iaDsKKwkJcHJldiA9IG9jZnMyX3RyYWlsZXJfZnJvbV9iaChiaCwgZGlyLT5pX3NiKTsKKwkJcHJldi0+ZGJfZnJlZV9uZXh0ID0gdHJhaWxlci0+ZGJfZnJlZV9uZXh0OworCX0KKworCXRyYWlsZXItPmRiX2ZyZWVfcmVjX2xlbiA9IGNwdV90b19sZTE2KDApOworCXRyYWlsZXItPmRiX2ZyZWVfbmV4dCA9IGNwdV90b19sZTY0KDApOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJoKTsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbG9va3VwLT5kbF9sZWFmX2JoKTsKK30KKworLyoKKyAqIFRoaXMgZXhwZWN0cyB0aGF0IGEgam91cm5hbCB3cml0ZSBoYXMgYmVlbiByZXNlcnZlZCBvbgorICogbG9va3VwLT5kbF9wcmV2X2xlYWZfYmggb3IgbG9va3VwLT5kbF9keF9yb290X2JoCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3JlY2FsY19mcmVlX2xpc3Qoc3RydWN0IGlub2RlICpkaXIsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCit7CisJaW50IG1heF9yZWNfbGVuOworCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqdHJhaWxlcjsKKworCS8qIFdhbGsgZGxfbGVhZl9iaCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIG5ldyBmcmVlIHJlY19sZW4gaXMuICovCisJbWF4X3JlY19sZW4gPSBvY2ZzMl9maW5kX21heF9yZWNfbGVuKGRpci0+aV9zYiwgbG9va3VwLT5kbF9sZWFmX2JoKTsKKwlpZiAobWF4X3JlY19sZW4pIHsKKwkJLyoKKwkJICogVGhlcmUncyBzdGlsbCByb29tIGluIHRoaXMgYmxvY2ssIHNvIG5vIG5lZWQgdG8gcmVtb3ZlIGl0CisJCSAqIGZyb20gdGhlIGZyZWUgbGlzdC4gSW4gdGhpcyBjYXNlLCB3ZSBqdXN0IHdhbnQgdG8gdXBkYXRlCisJCSAqIHRoZSByZWMgbGVuIGFjY291bnRpbmcuCisJCSAqLworCQl0cmFpbGVyID0gb2NmczJfdHJhaWxlcl9mcm9tX2JoKGxvb2t1cC0+ZGxfbGVhZl9iaCwgZGlyLT5pX3NiKTsKKwkJdHJhaWxlci0+ZGJfZnJlZV9yZWNfbGVuID0gY3B1X3RvX2xlMTYobWF4X3JlY19sZW4pOworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbG9va3VwLT5kbF9sZWFmX2JoKTsKKwl9IGVsc2UgeworCQlvY2ZzMl9yZW1vdmVfYmxvY2tfZnJvbV9mcmVlX2xpc3QoZGlyLCBoYW5kbGUsIGxvb2t1cCk7CisJfQorfQorCiAvKiB3ZSBkb24ndCBhbHdheXMgaGF2ZSBhIGRlbnRyeSBmb3Igd2hhdCB3ZSB3YW50IHRvIGFkZCwgc28gcGVvcGxlCiAgKiBsaWtlIG9ycGhhbiBkaXIgY2FuIGNhbGwgdGhpcyBpbnN0ZWFkLgogICoKLSAqIElmIHlvdSBwYXNzIG1lIGluc2VydF9iaCwgSSdsbCBza2lwIHRoZSBzZWFyY2ggb2YgdGhlIG90aGVyIGRpcgotICogYmxvY2tzIGFuZCBwdXQgdGhlIHJlY29yZCBpbiB0aGVyZS4KKyAqIFRoZSBsb29rdXAgY29udGV4dCBtdXN0IGhhdmUgYmVlbiBmaWxsZWQgZnJvbQorICogb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydC4KICAqLwogaW50IF9fb2NmczJfYWRkX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsCiAJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKIAkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJsa25vLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKLQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICppbnNlcnRfYmgpCisJCSAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIHNob3J0IHJlY19sZW47CkBAIC02ODMsNiArMTYyNCw3IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAlpbnQgcmV0dmFsLCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IHNpemUgPSBzYi0+c19ibG9ja3NpemU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICppbnNlcnRfYmggPSBsb29rdXAtPmRsX2xlYWZfYmg7CiAJY2hhciAqZGF0YV9zdGFydCA9IGluc2VydF9iaC0+Yl9kYXRhOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CkBAIC02OTAsNyArMTYzMiwzMSBAQAogCWlmICghbmFtZWxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgeworCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKSB7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwkJLyoKKwkJICogQW4gaW5kZXhlZCBkaXIgbWF5IHJlcXVpcmUgdGhhdCB3ZSB1cGRhdGUgdGhlIGZyZWUgc3BhY2UKKwkJICogbGlzdC4gUmVzZXJ2ZSBhIHdyaXRlIHRvIHRoZSBwcmV2aW91cyBub2RlIGluIHRoZSBsaXN0IHNvCisJCSAqIHRoYXQgd2UgZG9uJ3QgZmFpbCBsYXRlci4KKwkJICoKKwkJICogWFhYOiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBkeF9yb290X2Jsb2NrLCBvciBhbiB1bmluZGV4ZWQKKwkJICogZGlyZWN0b3J5IHRyZWUgbGVhZiBibG9jay4KKwkJICovCisJCWlmIChvY2ZzMl9mcmVlX2xpc3RfYXRfcm9vdChsb29rdXApKSB7CisJCQliaCA9IGxvb2t1cC0+ZGxfZHhfcm9vdF9iaDsKKwkJCXJldHZhbCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBiaCwKKwkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCX0gZWxzZSB7CisJCQliaCA9IGxvb2t1cC0+ZGxfcHJldl9sZWFmX2JoOworCQkJcmV0dmFsID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGIoaGFuZGxlLCBkaXIsIGJoLAorCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJfQorCQlpZiAocmV0dmFsKSB7CisJCQltbG9nX2Vycm5vKHJldHZhbCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfSBlbHNlIGlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB7CiAJCWRhdGFfc3RhcnQgPSBkaS0+aWQyLmlfZGF0YS5pZF9kYXRhOwogCQlzaXplID0gaV9zaXplX3JlYWQoZGlyKTsKIApAQCAtNzM3LDEwICsxNzAzLDIyIEBACiAJCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBkaXIsCiAJCQkJCQkJCSBpbnNlcnRfYmgsCiAJCQkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7Ci0JCQllbHNlCisJCQllbHNlIHsKIAkJCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsIGRpciwKIAkJCQkJCQkJIGluc2VydF9iaCwKLQkJCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCisJCQkJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGRpcikpIHsKKwkJCQkJc3RhdHVzID0gb2NmczJfZHhfZGlyX2luc2VydChkaXIsCisJCQkJCQkJCWhhbmRsZSwKKwkJCQkJCQkJbG9va3VwKTsKKwkJCQkJaWYgKHN0YXR1cykgeworCQkJCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQkJCQkJZ290byBiYWlsOworCQkJCQl9CisJCQkJfQorCQkJfQorCiAJCQkvKiBCeSBub3cgdGhlIGJ1ZmZlciBpcyBtYXJrZWQgZm9yIGpvdXJuYWxpbmcgKi8KIAkJCW9mZnNldCArPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CiAJCQlpZiAobGU2NF90b19jcHUoZGUtPmlub2RlKSkgewpAQCAtNzYxLDYgKzE3MzksOSBAQAogCQkJZGUtPm5hbWVfbGVuID0gbmFtZWxlbjsKIAkJCW1lbWNweShkZS0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAKKwkJCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKQorCQkJCW9jZnMyX3JlY2FsY19mcmVlX2xpc3QoZGlyLCBoYW5kbGUsIGxvb2t1cCk7CisKIAkJCWRpci0+aV92ZXJzaW9uKys7CiAJCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgaW5zZXJ0X2JoKTsKIAkJCXJldHZhbCA9IDA7CkBAIC04NzAsNiArMTg1MSwxMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogTk9URTogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGFnYWluc3QgdW5pbmRleGVkIGRpcmVjdG9yaWVzLAorICogYW5kIGluZGV4ZWQgb25lcy4KKyAqLwogc3RhdGljIGludCBvY2ZzMl9kaXJfZm9yZWFjaF9ibGtfZWwoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgdTY0ICpmX3ZlcnNpb24sCiAJCQkJICAgIGxvZmZfdCAqZl9wb3MsIHZvaWQgKnByaXYsCkBAIC0xMDcxLDMxICsyMDU2LDIyIEBACiAJCQkgICAgIGludCBuYW1lbGVuLAogCQkJICAgICB1NjQgKmJsa25vLAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkaXJlbnRfYmgsCi0JCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKipkaXJlbnQpCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQogewogCWludCBzdGF0dXMgPSAtRU5PRU5UOwogCi0JbWxvZ19lbnRyeSgiKG5hbWU9JS4qcywgYmxrbm89JXAsIGlub2RlPSVwLCBkaXJlbnRfYmg9JXAsIGRpcmVudD0lcClcbiIsCi0JCSAgIG5hbWVsZW4sIG5hbWUsIGJsa25vLCBpbm9kZSwgZGlyZW50X2JoLCBkaXJlbnQpOworCW1sb2coMCwgIm5hbWU9JS4qcywgYmxrbm89JXAsIGlub2RlPSVsbHVcbiIsIG5hbWVsZW4sIG5hbWUsIGJsa25vLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pOwogCi0JKmRpcmVudF9iaCA9IG9jZnMyX2ZpbmRfZW50cnkobmFtZSwgbmFtZWxlbiwgaW5vZGUsIGRpcmVudCk7Ci0JaWYgKCEqZGlyZW50X2JoIHx8ICEqZGlyZW50KSB7Ci0JCXN0YXR1cyA9IC1FTk9FTlQ7CisJc3RhdHVzID0gb2NmczJfZmluZF9lbnRyeShuYW1lLCBuYW1lbGVuLCBpbm9kZSwgbG9va3VwKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIGxlYXZlOwotCX0KIAotCSpibGtubyA9IGxlNjRfdG9fY3B1KCgqZGlyZW50KS0+aW5vZGUpOworCSpibGtubyA9IGxlNjRfdG9fY3B1KGxvb2t1cC0+ZGxfZW50cnktPmlub2RlKTsKIAogCXN0YXR1cyA9IDA7CiBsZWF2ZToKLQlpZiAoc3RhdHVzIDwgMCkgewotCQkqZGlyZW50ID0gTlVMTDsKLQkJYnJlbHNlKCpkaXJlbnRfYmgpOwotCQkqZGlyZW50X2JoID0gTlVMTDsKLQl9CiAKLQltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMTA3LDExICsyMDgzLDEwIEBACiAJCQkgICAgICAgaW50IG5hbWVsZW4sIHU2NCAqYmxrbm8pCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkaXJlbnQgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CiAKLQlyZXQgPSBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2sobmFtZSwgbmFtZWxlbiwgYmxrbm8sIGRpciwgJmJoLCAmZGlyZW50KTsKLQlicmVsc2UoYmgpOworCXJldCA9IG9jZnMyX2ZpbmRfZmlsZXNfb25fZGlzayhuYW1lLCBuYW1lbGVuLCBibGtubywgZGlyLCAmbG9va3VwKTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZsb29rdXApOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExMjgsMjAgKzIxMDMsMTggQEAKIAkJCSAgICAgIGludCBuYW1lbGVuKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJlbnRfYmggPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRpcmVudCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTsKIAogCW1sb2dfZW50cnkoImRpciAlbGx1LCBuYW1lICclLipzJ1xuIiwKIAkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLCBuYW1lbGVuLCBuYW1lKTsKIAogCXJldCA9IC1FRVhJU1Q7Ci0JZGlyZW50X2JoID0gb2NmczJfZmluZF9lbnRyeShuYW1lLCBuYW1lbGVuLCBkaXIsICZkaXJlbnQpOwotCWlmIChkaXJlbnRfYmgpCisJaWYgKG9jZnMyX2ZpbmRfZW50cnkobmFtZSwgbmFtZWxlbiwgZGlyLCAmbG9va3VwKSA9PSAwKQogCQlnb3RvIGJhaWw7CiAKIAlyZXQgPSAwOwogYmFpbDoKLQlicmVsc2UoZGlyZW50X2JoKTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZsb29rdXApOwogCiAJbWxvZ19leGl0KHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTExNTEsNiArMjEyNCw3IEBACiAJdW5zaWduZWQgc2Vlbl9kb3Q7CiAJdW5zaWduZWQgc2Vlbl9kb3RfZG90OwogCXVuc2lnbmVkIHNlZW5fb3RoZXI7CisJdW5zaWduZWQgZHhfZGlyOwogfTsKIHN0YXRpYyBpbnQgb2NmczJfZW1wdHlfZGlyX2ZpbGxkaXIodm9pZCAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLAogCQkJCSAgIGxvZmZfdCBwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIHR5cGUpCkBAIC0xMTYwLDYgKzIxMzQsMTMgQEAKIAkvKgogCSAqIENoZWNrIHRoZSBwb3NpdGlvbnMgb2YgIi4iIGFuZCAiLi4iIHJlY29yZHMgdG8gYmUgc3VyZQogCSAqIHRoZXkncmUgaW4gdGhlIGNvcnJlY3QgcGxhY2UuCisJICoKKwkgKiBJbmRleGVkIGRpcmVjdG9yaWVzIGRvbid0IG5lZWQgdG8gcHJvY2VlZCBwYXN0IHRoZSBmaXJzdAorCSAqIHR3byBlbnRyaWVzLCBzbyB3ZSBlbmQgdGhlIHNjYW4gYWZ0ZXIgc2VlaW5nICcuLicuIERlc3BpdGUKKwkgKiB0aGF0LCB3ZSBhbGxvdyB0aGUgc2NhbiB0byBwcm9jZWVkIEluIHRoZSBldmVudCB0aGF0IHdlCisJICogaGF2ZSBhIGNvcnJ1cHRlZCBpbmRleGVkIGRpcmVjdG9yeSAobm8gZG90IG9yIGRvdCBkb3QKKwkgKiBlbnRyaWVzKS4gVGhpcyBhbGxvd3MgdXMgdG8gZG91YmxlIGNoZWNrIGZvciBleGlzdGluZworCSAqIGVudHJpZXMgd2hpY2ggbWlnaHQgbm90IGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgaW5kZXguCiAJICovCiAJaWYgKG5hbWVfbGVuID09IDEgJiYgIXN0cm5jbXAoIi4iLCBuYW1lLCAxKSAmJiBwb3MgPT0gMCkgewogCQlwLT5zZWVuX2RvdCA9IDE7CkBAIC0xMTY5LDE2ICsyMTUwLDU3IEBACiAJaWYgKG5hbWVfbGVuID09IDIgJiYgIXN0cm5jbXAoIi4uIiwgbmFtZSwgMikgJiYKIAkgICAgcG9zID09IE9DRlMyX0RJUl9SRUNfTEVOKDEpKSB7CiAJCXAtPnNlZW5fZG90X2RvdCA9IDE7CisKKwkJaWYgKHAtPmR4X2RpciAmJiBwLT5zZWVuX2RvdCkKKwkJCXJldHVybiAxOworCiAJCXJldHVybiAwOwogCX0KIAogCXAtPnNlZW5fb3RoZXIgPSAxOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IG9jZnMyX2VtcHR5X2Rpcl9keChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgc3RydWN0IG9jZnMyX2VtcHR5X2Rpcl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaTsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKworCXByaXYtPmR4X2RpciA9IDE7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2lub2RlX2Jsb2NrKGlub2RlLCAmZGlfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2R4X3Jvb3QoaW5vZGUsIGRpLCAmZHhfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCisJaWYgKGxlMzJfdG9fY3B1KGR4X3Jvb3QtPmRyX251bV9lbnRyaWVzKSAhPSAyKQorCQlwcml2LT5zZWVuX290aGVyID0gMTsKKworb3V0OgorCWJyZWxzZShkaV9iaCk7CisJYnJlbHNlKGR4X3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiByb3V0aW5lIHRvIGNoZWNrIHRoYXQgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaXMgZW1wdHkgKGZvciBybWRpcikKICAqCiAgKiBSZXR1cm5zIDEgaWYgZGlyIGlzIGVtcHR5LCB6ZXJvIG90aGVyd2lzZS4KKyAqCisgKiBYWFg6IFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBwcm9ibGVtIGZvciB1bmluZGV4ZWQgZGlyZWN0b3JpZXMuCiAgKi8KIGludCBvY2ZzMl9lbXB0eV9kaXIoc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTExODgsNiArMjIxMCwxNiBAQAogCiAJbWVtc2V0KCZwcml2LCAwLCBzaXplb2YocHJpdikpOwogCisJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGlub2RlKSkgeworCQlyZXQgPSBvY2ZzMl9lbXB0eV9kaXJfZHgoaW5vZGUsICZwcml2KTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJLyoKKwkJICogV2Ugc3RpbGwgcnVuIG9jZnMyX2Rpcl9mb3JlYWNoIHRvIGdldCB0aGUgY2hlY2tzCisJCSAqIGZvciAiLiIgYW5kICIuLiIuCisJCSAqLworCX0KKwogCXJldCA9IG9jZnMyX2Rpcl9mb3JlYWNoKGlub2RlLCAmc3RhcnQsICZwcml2LCBvY2ZzMl9lbXB0eV9kaXJfZmlsbGRpcik7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTI4MCw3ICsyMzEyLDggQEAKIAkJCQkgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCi0JCQkJIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQorCQkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X25ld19iaCkKIHsKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludCBzaXplID0gb3NiLT5zYi0+c19ibG9ja3NpemU7CkBAIC0xMjg5LDcgKzIzMjIsNyBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQlpZiAob2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIob3NiKSkKKwlpZiAob2NmczJfbmV3X2Rpcl93YW50c190cmFpbGVyKGlub2RlKSkKIAkJc2l6ZSA9IG9jZnMyX2Rpcl90cmFpbGVyX2Jsa19vZmYocGFyZW50LT5pX3NiKTsKIAogCXN0YXR1cyA9IG9jZnMyX2RvX2V4dGVuZF9kaXIob3NiLT5zYiwgaGFuZGxlLCBpbm9kZSwgZmVfYmgsCkBAIC0xMzEwLDggKzIzNDMsMTkgQEAKIAltZW1zZXQobmV3X2JoLT5iX2RhdGEsIDAsIG9zYi0+c2ItPnNfYmxvY2tzaXplKTsKIAogCWRlID0gb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoaW5vZGUsIHBhcmVudCwgbmV3X2JoLT5iX2RhdGEsIHNpemUpOwotCWlmIChvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihvc2IpKQotCQlvY2ZzMl9pbml0X2Rpcl90cmFpbGVyKGlub2RlLCBuZXdfYmgpOworCWlmIChvY2ZzMl9uZXdfZGlyX3dhbnRzX3RyYWlsZXIoaW5vZGUpKSB7CisJCWludCBzaXplID0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCisJCS8qCisJCSAqIEZpZ3VyZSBvdXQgdGhlIHNpemUgb2YgdGhlIGhvbGUgbGVmdCBvdmVyIGFmdGVyCisJCSAqIGluc2VydGlvbiBvZiAnLicgYW5kICcuLicuIFRoZSB0cmFpbGVyIHdhbnRzIHRoaXMKKwkJICogaW5mb3JtYXRpb24uCisJCSAqLworCQlzaXplIC09IE9DRlMyX0RJUl9SRUNfTEVOKDIpOworCQlzaXplIC09IHNpemVvZihzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIpOworCisJCW9jZnMyX2luaXRfZGlyX3RyYWlsZXIoaW5vZGUsIG5ld19iaCwgc2l6ZSk7CisJfQogCiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTEzMjksNiArMjM3MywxMCBAQAogCX0KIAogCXN0YXR1cyA9IDA7CisJaWYgKHJldF9uZXdfYmgpIHsKKwkJKnJldF9uZXdfYmggPSBuZXdfYmg7CisJCW5ld19iaCA9IE5VTEw7CisJfQogYmFpbDoKIAlicmVsc2UobmV3X2JoKTsKIApAQCAtMTMzNiwyMCArMjM4NCw0MjcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9hdHRhY2hfaW5kZXgoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICAgICBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmRhdGFfYmgsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQkgICAgIGludCBkeF9pbmxpbmUsIHUzMiBudW1fZW50cmllcywKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9keF9yb290X2JoKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBkaV9iaC0+Yl9kYXRhOworCXUxNiBkcl9zdWJhbGxvY19iaXQ7CisJdTY0IGRyX2Jsa25vOworCXVuc2lnbmVkIGludCBudW1fYml0czsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqdHJhaWxlciA9CisJCW9jZnMyX3RyYWlsZXJfZnJvbV9iaChkaXJkYXRhX2JoLCBkaXItPmlfc2IpOworCisJcmV0ID0gb2NmczJfY2xhaW1fbWV0YWRhdGEob3NiLCBoYW5kbGUsIG1ldGFfYWMsIDEsICZkcl9zdWJhbGxvY19iaXQsCisJCQkJICAgJm51bV9iaXRzLCAmZHJfYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwltbG9nKDAsICJEaXIgJWxsdSwgYXR0YWNoIG5ldyBpbmRleCBibG9jazogJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZHJfYmxrbm8pOworCisJZHhfcm9vdF9iaCA9IHNiX2dldGJsayhvc2ItPnNiLCBkcl9ibGtubyk7CisJaWYgKGR4X3Jvb3RfYmggPT0gTlVMTCkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBkeF9yb290X2JoKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCW1lbXNldChkeF9yb290LCAwLCBvc2ItPnNiLT5zX2Jsb2Nrc2l6ZSk7CisJc3RyY3B5KGR4X3Jvb3QtPmRyX3NpZ25hdHVyZSwgT0NGUzJfRFhfUk9PVF9TSUdOQVRVUkUpOworCWR4X3Jvb3QtPmRyX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihvc2ItPnNsb3RfbnVtKTsKKwlkeF9yb290LT5kcl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihkcl9zdWJhbGxvY19iaXQpOworCWR4X3Jvb3QtPmRyX2ZzX2dlbmVyYXRpb24gPSBjcHVfdG9fbGUzMihvc2ItPmZzX2dlbmVyYXRpb24pOworCWR4X3Jvb3QtPmRyX2Jsa25vID0gY3B1X3RvX2xlNjQoZHJfYmxrbm8pOworCWR4X3Jvb3QtPmRyX2Rpcl9ibGtubyA9IGNwdV90b19sZTY0KE9DRlMyX0koZGlyKS0+aXBfYmxrbm8pOworCWR4X3Jvb3QtPmRyX251bV9lbnRyaWVzID0gY3B1X3RvX2xlMzIobnVtX2VudHJpZXMpOworCWlmIChsZTE2X3RvX2NwdSh0cmFpbGVyLT5kYl9mcmVlX3JlY19sZW4pKQorCQlkeF9yb290LT5kcl9mcmVlX2JsayA9IGNwdV90b19sZTY0KGRpcmRhdGFfYmgtPmJfYmxvY2tucik7CisJZWxzZQorCQlkeF9yb290LT5kcl9mcmVlX2JsayA9IGNwdV90b19sZTY0KDApOworCisJaWYgKGR4X2lubGluZSkgeworCQlkeF9yb290LT5kcl9mbGFncyB8PSBPQ0ZTMl9EWF9GTEFHX0lOTElORTsKKwkJZHhfcm9vdC0+ZHJfZW50cmllcy5kZV9jb3VudCA9CisJCQljcHVfdG9fbGUxNihvY2ZzMl9keF9lbnRyaWVzX3Blcl9yb290KG9zYi0+c2IpKTsKKwl9IGVsc2UgeworCQlkeF9yb290LT5kcl9saXN0LmxfY291bnQgPQorCQkJY3B1X3RvX2xlMTYob2NmczJfZXh0ZW50X3JlY3NfcGVyX2R4X3Jvb3Qob3NiLT5zYikpOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkeF9yb290X2JoKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGRpciwgZGlfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZGktPmlfZHhfcm9vdCA9IGNwdV90b19sZTY0KGRyX2Jsa25vKTsKKworCU9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0lOREVYRURfRElSX0ZMOworCWRpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCisJKnJldF9keF9yb290X2JoID0gZHhfcm9vdF9iaDsKKwlkeF9yb290X2JoID0gTlVMTDsKKworb3V0OgorCWJyZWxzZShkeF9yb290X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9mb3JtYXRfY2x1c3RlcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYXZlcywKKwkJCQkgICAgICAgaW50IG51bV9keF9sZWF2ZXMsIHU2NCBzdGFydF9ibGspCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCisJZm9yIChpID0gMDsgaSA8IG51bV9keF9sZWF2ZXM7IGkrKykgeworCQliaCA9IHNiX2dldGJsayhvc2ItPnNiLCBzdGFydF9ibGsgKyBpKTsKKwkJaWYgKGJoID09IE5VTEwpIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCQlkeF9sZWF2ZXNbaV0gPSBiaDsKKworCQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShkaXIsIGJoKTsKKworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwgYmgsCisJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWR4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKikgYmgtPmJfZGF0YTsKKworCQltZW1zZXQoZHhfbGVhZiwgMCwgb3NiLT5zYi0+c19ibG9ja3NpemUpOworCQlzdHJjcHkoZHhfbGVhZi0+ZGxfc2lnbmF0dXJlLCBPQ0ZTMl9EWF9MRUFGX1NJR05BVFVSRSk7CisJCWR4X2xlYWYtPmRsX2ZzX2dlbmVyYXRpb24gPSBjcHVfdG9fbGUzMihvc2ItPmZzX2dlbmVyYXRpb24pOworCQlkeF9sZWFmLT5kbF9ibGtubyA9IGNwdV90b19sZTY0KGJoLT5iX2Jsb2NrbnIpOworCQlkeF9sZWFmLT5kbF9saXN0LmRlX2NvdW50ID0KKwkJCWNwdV90b19sZTE2KG9jZnMyX2R4X2VudHJpZXNfcGVyX2xlYWYob3NiLT5zYikpOworCisJCW1sb2coMCwKKwkJICAgICAiRGlyICVsbHUsIGZvcm1hdCBkeF9sZWFmOiAlbGx1LCBlbnRyeSBjb3VudDogJXVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tuciwKKwkJICAgICBsZTE2X3RvX2NwdShkeF9sZWFmLT5kbF9saXN0LmRlX2NvdW50KSk7CisKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJoKTsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBbGxvY2F0ZXMgYW5kIGZvcm1hdHMgYSBuZXcgY2x1c3RlciBmb3IgdXNlIGluIGFuIGluZGV4ZWQgZGlyCisgKiBsZWFmLiBUaGlzIHZlcnNpb24gd2lsbCBub3QgZG8gdGhlIGV4dGVudCBpbnNlcnQsIHNvIHRoYXQgaXQgY2FuIGJlCisgKiB1c2VkIGJ5IG9wZXJhdGlvbnMgd2hpY2ggbmVlZCBjYXJlZnVsIG9yZGVyaW5nLgorICovCitzdGF0aWMgaW50IF9fb2NmczJfZHhfZGlyX25ld19jbHVzdGVyKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICAgIHUzMiBjcG9zLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYXZlcywKKwkJCQkgICAgICBpbnQgbnVtX2R4X2xlYXZlcywgdTY0ICpyZXRfcGh5c19ibGtubykKK3sKKwlpbnQgcmV0OworCXUzMiBwaHlzLCBudW07CisJdTY0IHBoeXNfYmxrbm87CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCisJLyoKKwkgKiBYWFg6IEZvciBjcmVhdGUsIHRoaXMgc2hvdWxkIGNsYWltIGNsdXN0ZXIgZm9yIHRoZSBpbmRleAorCSAqICpiZWZvcmUqIHRoZSB1bmluZGV4ZWQgaW5zZXJ0IHNvIHRoYXQgd2UgaGF2ZSBhIGJldHRlcgorCSAqIGNoYW5jZSBvZiBjb250aWd1b3VzbmVzcyBhcyB0aGUgZGlyZWN0b3J5IGdyb3dzIGluIG51bWJlcgorCSAqIG9mIGVudHJpZXMuCisJICovCisJcmV0ID0gX19vY2ZzMl9jbGFpbV9jbHVzdGVycyhvc2IsIGhhbmRsZSwgZGF0YV9hYywgMSwgMSwgJnBoeXMsICZudW0pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEZvcm1hdCB0aGUgbmV3IGNsdXN0ZXIgZmlyc3QuIFRoYXQgd2F5LCB3ZSdyZSBpbnNlcnRpbmcKKwkgKiB2YWxpZCBkYXRhLgorCSAqLworCXBoeXNfYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob3NiLT5zYiwgcGh5cyk7CisJcmV0ID0gb2NmczJfZHhfZGlyX2Zvcm1hdF9jbHVzdGVyKG9zYiwgaGFuZGxlLCBkaXIsIGR4X2xlYXZlcywKKwkJCQkJICBudW1fZHhfbGVhdmVzLCBwaHlzX2Jsa25vKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJKnJldF9waHlzX2Jsa25vID0gcGh5c19ibGtubzsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9uZXdfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgdTMyIGNwb3MsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhdmVzLAorCQkJCSAgICBpbnQgbnVtX2R4X2xlYXZlcykKK3sKKwlpbnQgcmV0OworCXU2NCBwaHlzX2Jsa25vOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKworCXJldCA9IF9fb2NmczJfZHhfZGlyX25ld19jbHVzdGVyKGRpciwgY3BvcywgaGFuZGxlLCBkYXRhX2FjLCBkeF9sZWF2ZXMsCisJCQkJCSBudW1fZHhfbGVhdmVzLCAmcGh5c19ibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgZXQsIGNwb3MsIHBoeXNfYmxrbm8sIDEsIDAsCisJCQkJICBtZXRhX2FjKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqKm9jZnMyX2R4X2Rpcl9rbWFsbG9jX2xlYXZlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkJCWludCAqcmV0X251bV9sZWF2ZXMpCit7CisJaW50IG51bV9keF9sZWF2ZXMgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIDEpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYXZlczsKKworCWR4X2xlYXZlcyA9IGtjYWxsb2MobnVtX2R4X2xlYXZlcywgc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwKKwkJCSAgICBHRlBfTk9GUyk7CisJaWYgKGR4X2xlYXZlcyAmJiByZXRfbnVtX2xlYXZlcykKKwkJKnJldF9udW1fbGVhdmVzID0gbnVtX2R4X2xlYXZlczsKKworCXJldHVybiBkeF9sZWF2ZXM7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZmlsbF9uZXdfZGlyX2R4KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKKwkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCQkJIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpsZWFmX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9oaW5mbyBoaW5mbzsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZW50cnlfbGlzdDsKKworCS8qCisJICogT3VyIHN0cmF0ZWd5IGlzIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGFzIHRob3VnaCBpdCB3ZXJlCisJICogdW5pbmRleGVkLCB0aGVuIGFkZCB0aGUgaW5kZXggYmxvY2suIFRoaXMgd29ya3Mgd2l0aCB2ZXJ5CisJICogbGl0dGxlIGNvbXBsaWNhdGlvbiBzaW5jZSB0aGUgc3RhdGUgb2YgYSBuZXcgZGlyZWN0b3J5IGlzIGEKKwkgKiB2ZXJ5IHdlbGwga25vd24gcXVhbnRpdHkuCisJICoKKwkgKiBFc3NlbnRpYWxseSwgd2UgaGF2ZSB0d28gZGlyZW50cyAoIi4iIGFuZCAiLi4iKSwgaW4gdGhlIDFzdAorCSAqIGJsb2NrIHdoaWNoIG5lZWQgaW5kZXhpbmcuIFRoZXNlIGFyZSBlYXNpbHkgaW5zZXJ0ZWQgaW50bworCSAqIHRoZSBpbmRleCBibG9jay4KKwkgKi8KKworCXJldCA9IG9jZnMyX2ZpbGxfbmV3X2Rpcl9lbChvc2IsIGhhbmRsZSwgcGFyZW50LCBpbm9kZSwgZGlfYmgsCisJCQkJICAgIGRhdGFfYWMsICZsZWFmX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfZHhfZGlyX2F0dGFjaF9pbmRleChvc2IsIGhhbmRsZSwgaW5vZGUsIGRpX2JoLCBsZWFmX2JoLAorCQkJCQltZXRhX2FjLCAxLCAyLCAmZHhfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCWVudHJ5X2xpc3QgPSAmZHhfcm9vdC0+ZHJfZW50cmllczsKKworCS8qIEJ1ZmZlciBoYXMgYmVlbiBqb3VybmFsZWQgZm9yIHVzIGJ5IG9jZnMyX2R4X2Rpcl9hdHRhY2hfaW5kZXggKi8KKwlvY2ZzMl9keF9kaXJfbmFtZV9oYXNoKGlub2RlLCAiLiIsIDEsICZoaW5mbyk7CisJb2NmczJfZHhfZW50cnlfbGlzdF9pbnNlcnQoZW50cnlfbGlzdCwgJmhpbmZvLCBsZWFmX2JoLT5iX2Jsb2NrbnIpOworCisJb2NmczJfZHhfZGlyX25hbWVfaGFzaChpbm9kZSwgIi4uIiwgMiwgJmhpbmZvKTsKKwlvY2ZzMl9keF9lbnRyeV9saXN0X2luc2VydChlbnRyeV9saXN0LCAmaGluZm8sIGxlYWZfYmgtPmJfYmxvY2tucik7CisKK291dDoKKwlicmVsc2UoZHhfcm9vdF9iaCk7CisJYnJlbHNlKGxlYWZfYmgpOworCXJldHVybiByZXQ7Cit9CisKIGludCBvY2ZzMl9maWxsX25ld19kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgICAgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKLQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQorCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYykKKwogewogCUJVR19PTighb2NmczJfc3VwcG9ydHNfaW5saW5lX2RhdGEob3NiKSAmJiBkYXRhX2FjID09IE5VTEwpOwogCiAJaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkKIAkJcmV0dXJuIG9jZnMyX2ZpbGxfbmV3X2Rpcl9pZChvc2IsIGhhbmRsZSwgcGFyZW50LCBpbm9kZSwgZmVfYmgpOwogCisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpKQorCQlyZXR1cm4gb2NmczJfZmlsbF9uZXdfZGlyX2R4KG9zYiwgaGFuZGxlLCBwYXJlbnQsIGlub2RlLCBmZV9iaCwKKwkJCQkJICAgICBkYXRhX2FjLCBtZXRhX2FjKTsKKwogCXJldHVybiBvY2ZzMl9maWxsX25ld19kaXJfZWwob3NiLCBoYW5kbGUsIHBhcmVudCwgaW5vZGUsIGZlX2JoLAotCQkJCSAgICAgZGF0YV9hYyk7CisJCQkJICAgICBkYXRhX2FjLCBOVUxMKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYXZlcywKKwkJCQkgICAgaW50IG51bV9keF9sZWF2ZXMsCisJCQkJICAgIHUzMiAqbnVtX2R4X2VudHJpZXMsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZW50X2JoKQoreworCWludCByZXQsIG5hbWVsZW4sIGk7CisJY2hhciAqZGVfYnVmLCAqbGltaXQ7CisJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9sZWFmX2JoOworCXN0cnVjdCBvY2ZzMl9keF9oaW5mbyBoaW5mbzsKKwl1NjQgZGlyZW50X2JsayA9IGRpcmVudF9iaC0+Yl9ibG9ja25yOworCisJZGVfYnVmID0gZGlyZW50X2JoLT5iX2RhdGE7CisJbGltaXQgPSBkZV9idWYgKyBkaXItPmlfc2ItPnNfYmxvY2tzaXplOworCisJd2hpbGUgKGRlX2J1ZiA8IGxpbWl0KSB7CisJCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKilkZV9idWY7CisKKwkJbmFtZWxlbiA9IGRlLT5uYW1lX2xlbjsKKwkJaWYgKCFuYW1lbGVuIHx8ICFkZS0+aW5vZGUpCisJCQlnb3RvIGluYzsKKworCQlvY2ZzMl9keF9kaXJfbmFtZV9oYXNoKGRpciwgZGUtPm5hbWUsIG5hbWVsZW4sICZoaW5mbyk7CisKKwkJaSA9IG9jZnMyX2R4X2Rpcl9oYXNoX2lkeChPQ0ZTMl9TQihkaXItPmlfc2IpLCAmaGluZm8pOworCQlkeF9sZWFmX2JoID0gZHhfbGVhdmVzW2ldOworCisJCXJldCA9IF9fb2NmczJfZHhfZGlyX2xlYWZfaW5zZXJ0KGRpciwgaGFuZGxlLCAmaGluZm8sCisJCQkJCQkgZGlyZW50X2JsaywgZHhfbGVhZl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJKm51bV9keF9lbnRyaWVzID0gKm51bV9keF9lbnRyaWVzICsgMTsKKworaW5jOgorCQlkZV9idWYgKz0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBYWFg6IFRoaXMgZXhwZWN0cyBkeF9yb290X2JoIHRvIGFscmVhZHkgYmUgcGFydCBvZiB0aGUgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX2R4X2Rpcl9pbmRleF9yb290X2Jsb2NrKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoLAorCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJlbnRfYmgpCit7CisJY2hhciAqZGVfYnVmLCAqbGltaXQ7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGU7CisJc3RydWN0IG9jZnMyX2R4X2hpbmZvIGhpbmZvOworCXU2NCBkaXJlbnRfYmxrID0gZGlyZW50X2JoLT5iX2Jsb2NrbnI7CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCisJZGVfYnVmID0gZGlyZW50X2JoLT5iX2RhdGE7CisJbGltaXQgPSBkZV9idWYgKyBkaXItPmlfc2ItPnNfYmxvY2tzaXplOworCisJd2hpbGUgKGRlX2J1ZiA8IGxpbWl0KSB7CisJCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKilkZV9idWY7CisKKwkJaWYgKCFkZS0+bmFtZV9sZW4gfHwgIWRlLT5pbm9kZSkKKwkJCWdvdG8gaW5jOworCisJCW9jZnMyX2R4X2Rpcl9uYW1lX2hhc2goZGlyLCBkZS0+bmFtZSwgZGUtPm5hbWVfbGVuLCAmaGluZm8pOworCisJCW1sb2coMCwKKwkJICAgICAiZGlyOiAlbGx1LCBtYWpvcjogMHgleCBtaW5vcjogMHgleCwgaW5kZXg6ICV1LCBuYW1lOiAlLipzXG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGlyLT5pX2lubywgaGluZm8ubWFqb3JfaGFzaCwKKwkJICAgICBoaW5mby5taW5vcl9oYXNoLAorCQkgICAgIGxlMTZfdG9fY3B1KGR4X3Jvb3QtPmRyX2VudHJpZXMuZGVfbnVtX3VzZWQpLAorCQkgICAgIGRlLT5uYW1lX2xlbiwgZGUtPm5hbWUpOworCisJCW9jZnMyX2R4X2VudHJ5X2xpc3RfaW5zZXJ0KCZkeF9yb290LT5kcl9lbnRyaWVzLCAmaGluZm8sCisJCQkJCSAgIGRpcmVudF9ibGspOworCisJCWxlMzJfYWRkX2NwdSgmZHhfcm9vdC0+ZHJfbnVtX2VudHJpZXMsIDEpOworaW5jOgorCQlkZV9idWYgKz0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCX0KK30KKworLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgaW5saW5lIGRpcmVjdG9yeSBlbnRyaWVzIGluIGRpX2JoIGFuZCBjb21wYXJlCisgKiB0aGVtIGFnYWluc3QgdGhlIG51bWJlciBvZiBlbnRyaWVzIHdlIGNhbiBob2xkIGluIGFuIGlubGluZSBkeCByb290CisgKiBibG9jay4KKyAqLworc3RhdGljIGludCBvY2ZzMl9uZXdfZHhfc2hvdWxkX2JlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCit7CisJaW50IGRpcmVudF9jb3VudCA9IDA7CisJY2hhciAqZGVfYnVmLCAqbGltaXQ7CisJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGU7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisKKwlkZV9idWYgPSBkaS0+aWQyLmlfZGF0YS5pZF9kYXRhOworCWxpbWl0ID0gZGVfYnVmICsgaV9zaXplX3JlYWQoZGlyKTsKKworCXdoaWxlIChkZV9idWYgPCBsaW1pdCkgeworCQlkZSA9IChzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICopZGVfYnVmOworCisJCWlmIChkZS0+bmFtZV9sZW4gJiYgZGUtPmlub2RlKQorCQkJZGlyZW50X2NvdW50Kys7CisKKwkJZGVfYnVmICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwl9CisKKwkvKiBXZSBhcmUgY2FyZWZ1bCB0byBsZWF2ZSByb29tIGZvciBvbmUgZXh0cmEgcmVjb3JkLiAqLworCXJldHVybiBkaXJlbnRfY291bnQgPCBvY2ZzMl9keF9lbnRyaWVzX3Blcl9yb290KGRpci0+aV9zYik7CiB9CiAKIC8qCkBAIC0xMzU4LDE4ICsyODEzLDI2IEBACiAgKiBleHBhbnNpb24gZnJvbSBhbiBpbmxpbmUgZGlyZWN0b3J5IHRvIG9uZSB3aXRoIGV4dGVudHMuIFRoZSBmaXJzdCBkaXIgYmxvY2sKICAqIGluIHRoYXQgY2FzZSBpcyB0YWtlbiBmcm9tIHRoZSBpbmxpbmUgZGF0YSBwb3J0aW9uIG9mIHRoZSBpbm9kZSBibG9jay4KICAqCisgKiBUaGlzIHdpbGwgYWxzbyByZXR1cm4gdGhlIGxhcmdlc3QgYW1vdW50IG9mIGNvbnRpZ3VvdXMgc3BhY2UgZm9yIGEgZGlyZW50CisgKiBpbiB0aGUgYmxvY2suIFRoYXQgdmFsdWUgaXMgKm5vdCogbmVjZXNzYXJpbHkgdGhlIGxhc3QgZGlyZW50LCBldmVuIGFmdGVyCisgKiBleHBhbnNpb24uIFRoZSBkaXJlY3RvcnkgaW5kZXhpbmcgY29kZSB3YW50cyB0aGlzIHZhbHVlIGZvciBmcmVlIHNwYWNlCisgKiBhY2NvdW50aW5nLiBXZSBkbyB0aGlzIGhlcmUgc2luY2Ugd2UncmUgYWxyZWFkeSB3YWxraW5nIHRoZSBlbnRpcmUgZGlyCisgKiBibG9jay4KKyAqCiAgKiBXZSBhZGQgdGhlIGRpciB0cmFpbGVyIGlmIHRoaXMgZmlsZXN5c3RlbSB3YW50cyBpdC4KICAqLwotc3RhdGljIHZvaWQgb2NmczJfZXhwYW5kX2xhc3RfZGlyZW50KGNoYXIgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgb2xkX3NpemUsCi0JCQkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorc3RhdGljIHVuc2lnbmVkIGludCBvY2ZzMl9leHBhbmRfbGFzdF9kaXJlbnQoY2hhciAqc3RhcnQsIHVuc2lnbmVkIGludCBvbGRfc2l6ZSwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwogCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlOwogCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKnByZXZfZGU7CiAJY2hhciAqZGVfYnVmLCAqbGltaXQ7CiAJdW5zaWduZWQgaW50IG5ld19zaXplID0gc2ItPnNfYmxvY2tzaXplOwotCXVuc2lnbmVkIGludCBieXRlczsKKwl1bnNpZ25lZCBpbnQgYnl0ZXMsIHRoaXNfaG9sZTsKKwl1bnNpZ25lZCBpbnQgbGFyZ2VzdF9ob2xlID0gMDsKIAotCWlmIChvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihPQ0ZTMl9TQihzYikpKQorCWlmIChvY2ZzMl9uZXdfZGlyX3dhbnRzX3RyYWlsZXIoZGlyKSkKIAkJbmV3X3NpemUgPSBvY2ZzMl9kaXJfdHJhaWxlcl9ibGtfb2ZmKHNiKTsKIAogCWJ5dGVzID0gbmV3X3NpemUgLSBvbGRfc2l6ZTsKQEAgLTEzNzgsMTIgKzI4NDEsMjYgQEAKIAlkZV9idWYgPSBzdGFydDsKIAlkZSA9IChzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICopZGVfYnVmOwogCWRvIHsKKwkJdGhpc19ob2xlID0gb2NmczJfZmlndXJlX2RpcmVudF9ob2xlKGRlKTsKKwkJaWYgKHRoaXNfaG9sZSA+IGxhcmdlc3RfaG9sZSkKKwkJCWxhcmdlc3RfaG9sZSA9IHRoaXNfaG9sZTsKKwogCQlwcmV2X2RlID0gZGU7CiAJCWRlX2J1ZiArPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CiAJCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKilkZV9idWY7CiAJfSB3aGlsZSAoZGVfYnVmIDwgbGltaXQpOwogCiAJbGUxNl9hZGRfY3B1KCZwcmV2X2RlLT5yZWNfbGVuLCBieXRlcyk7CisKKwkvKiBXZSBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGlzIGFmdGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmluYWwKKwkgKiBkaXJlbnQuICovCisJdGhpc19ob2xlID0gb2NmczJfZmlndXJlX2RpcmVudF9ob2xlKHByZXZfZGUpOworCWlmICh0aGlzX2hvbGUgPiBsYXJnZXN0X2hvbGUpCisJCWxhcmdlc3RfaG9sZSA9IHRoaXNfaG9sZTsKKworCWlmIChsYXJnZXN0X2hvbGUgPj0gT0NGUzJfRElSX01JTl9SRUNfTEVOKQorCQlyZXR1cm4gbGFyZ2VzdF9ob2xlOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTM5NiwyOSArMjg3Myw2MSBAQAogICovCiBzdGF0aWMgaW50IG9jZnMyX2V4cGFuZF9pbmxpbmVfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAogCQkJCSAgIHVuc2lnbmVkIGludCBibG9ja3Nfd2FudGVkLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwLAogCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmZpcnN0X2Jsb2NrX2JoKQogewotCXUzMiBhbGxvYywgYml0X29mZiwgbGVuOworCXUzMiBhbGxvYywgZHhfYWxsb2MsIGJpdF9vZmYsIGxlbiwgbnVtX2R4X2VudHJpZXMgPSAwOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7Ci0JaW50IHJldCwgY3JlZGl0cyA9IG9jZnMyX2lubGluZV90b19leHRlbnRzX2NyZWRpdHMoc2IpOwotCXU2NCBibGtubywgYnl0ZXMgPSBibG9ja3Nfd2FudGVkIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCWludCByZXQsIGksIG51bV9keF9sZWF2ZXMgPSAwLCBkeF9pbmxpbmUgPSAwLAorCQljcmVkaXRzID0gb2NmczJfaW5saW5lX3RvX2V4dGVudHNfY3JlZGl0cyhzYik7CisJdTY0IGR4X2luc2VydF9ibGtubywgYmxrbm8sCisJCWJ5dGVzID0gYmxvY2tzX3dhbnRlZCA8PCBzYi0+c19ibG9ja3NpemVfYml0czsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShkaXIpOwogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmRhdGFfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhdmVzID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKIAloYW5kbGVfdCAqaGFuZGxlOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKLQlpbnQgZGlkX3F1b3RhID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZHhfZXQ7CisJaW50IGRpZF9xdW90YSA9IDAsIGJ5dGVzX2FsbG9jYXRlZCA9IDA7CiAKIAlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGRpciwgZGlfYmgpOwogCiAJYWxsb2MgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoc2IsIGJ5dGVzKTsKKwlkeF9hbGxvYyA9IDA7CisKKwlpZiAob2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYikpIHsKKwkJY3JlZGl0cyArPSBvY2ZzMl9hZGRfZGlyX2luZGV4X2NyZWRpdHMoc2IpOworCisJCWR4X2lubGluZSA9IG9jZnMyX25ld19keF9zaG91bGRfYmVfaW5saW5lKGRpciwgZGlfYmgpOworCQlpZiAoIWR4X2lubGluZSkgeworCQkJLyogQWRkIG9uZSBtb3JlIGNsdXN0ZXIgZm9yIGFuIGluZGV4IGxlYWYgKi8KKwkJCWR4X2FsbG9jKys7CisJCQlkeF9sZWF2ZXMgPSBvY2ZzMl9keF9kaXJfa21hbGxvY19sZWF2ZXMoc2IsCisJCQkJCQkJCSZudW1fZHhfbGVhdmVzKTsKKwkJCWlmICghZHhfbGVhdmVzKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQkvKiBUaGlzIGdldHMgdXMgdGhlIGR4X3Jvb3QgKi8KKwkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwgMSwgJm1ldGFfYWMpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KIAogCS8qCi0JICogV2Ugc2hvdWxkIG5ldmVyIG5lZWQgbW9yZSB0aGFuIDIgY2x1c3RlcnMgZm9yIHRoaXMgLQotCSAqIG1heGltdW0gZGlyZW50IHNpemUgaXMgZmFyIGxlc3MgdGhhbiBvbmUgYmxvY2suIEluIGZhY3QsCi0JICogdGhlIG9ubHkgdGltZSB3ZSdkIG5lZWQgbW9yZSB0aGFuIG9uZSBjbHVzdGVyIGlzIGlmCisJICogV2Ugc2hvdWxkIG5ldmVyIG5lZWQgbW9yZSB0aGFuIDIgY2x1c3RlcnMgZm9yIHRoZSB1bmluZGV4ZWQKKwkgKiB0cmVlIC0gbWF4aW11bSBkaXJlbnQgc2l6ZSBpcyBmYXIgbGVzcyB0aGFuIG9uZSBibG9jay4gSW4KKwkgKiBmYWN0LCB0aGUgb25seSB0aW1lIHdlJ2QgbmVlZCBtb3JlIHRoYW4gb25lIGNsdXN0ZXIgaXMgaWYKIAkgKiBibG9ja3NpemUgPT0gY2x1c3RlcnNpemUgYW5kIHRoZSBkaXJlbnQgd29uJ3QgZml0IGluIHRoZQogCSAqIGV4dHJhIHNwYWNlIHRoYXQgdGhlIGV4cGFuc2lvbiB0byBhIHNpbmdsZSBibG9jayBnaXZlcy4gQXMKIAkgKiBvZiB0b2RheSwgdGhhdCBvbmx5IGhhcHBlbnMgb24gNGsvNGsgZmlsZSBzeXN0ZW1zLgpAQCAtMTQzNSw3ICsyOTQ0LDcgQEAKIAogCS8qCiAJICogUHJlcGFyZSBmb3Igd29yc3QgY2FzZSBhbGxvY2F0aW9uIHNjZW5hcmlvIG9mIHR3byBzZXBhcmF0ZQotCSAqIGV4dGVudHMuCisJICogZXh0ZW50cyBpbiB0aGUgdW5pbmRleGVkIHRyZWUuCiAJICovCiAJaWYgKGFsbG9jID09IDIpCiAJCWNyZWRpdHMgKz0gT0NGUzJfU1VCQUxMT0NfQUxMT0M7CkBAIC0xNDQ4LDExICsyOTU3LDI5IEBACiAJfQogCiAJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGRpciwKLQkJCQlvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItPnNiLCBhbGxvYykpKSB7CisJCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwKKwkJCQkJCQlhbGxvYyArIGR4X2FsbG9jKSkpIHsKIAkJcmV0ID0gLUVEUVVPVDsKIAkJZ290byBvdXRfY29tbWl0OwogCX0KIAlkaWRfcXVvdGEgPSAxOworCisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpICYmICFkeF9pbmxpbmUpIHsKKwkJLyoKKwkJICogQWxsb2NhdGUgb3VyIGluZGV4IGNsdXN0ZXIgZmlyc3QsIHRvIG1heGltaXplIHRoZQorCQkgKiBwb3NzaWJpbGl0eSB0aGF0IHVuaW5kZXhlZCBsZWF2ZXMgZ3JvdworCQkgKiBjb250aWd1b3VzbHkuCisJCSAqLworCQlyZXQgPSBfX29jZnMyX2R4X2Rpcl9uZXdfY2x1c3RlcihkaXIsIDAsIGhhbmRsZSwgZGF0YV9hYywKKwkJCQkJCSBkeF9sZWF2ZXMsIG51bV9keF9sZWF2ZXMsCisJCQkJCQkgJmR4X2luc2VydF9ibGtubyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCQlieXRlc19hbGxvY2F0ZWQgKz0gb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoZGlyLT5pX3NiLCAxKTsKKwl9CisKIAkvKgogCSAqIFRyeSB0byBjbGFpbSBhcyBtYW55IGNsdXN0ZXJzIGFzIHRoZSBiaXRtYXAgY2FuIGdpdmUgdGhvdWdoCiAJICogaWYgd2Ugb25seSBnZXQgb25lIG5vdywgdGhhdCdzIGVub3VnaCB0byBjb250aW51ZS4gVGhlIHJlc3QKQEAgLTE0NjMsNiArMjk5MCw3IEBACiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXRfY29tbWl0OwogCX0KKwlieXRlc19hbGxvY2F0ZWQgKz0gb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoZGlyLT5pX3NiLCAxKTsKIAogCS8qCiAJICogT3BlcmF0aW9ucyBhcmUgY2FyZWZ1bGx5IG9yZGVyZWQgc28gdGhhdCB3ZSBzZXQgdXAgdGhlIG5ldwpAQCAtMTQ4OSw5ICszMDE3LDE2IEBACiAJbWVtY3B5KGRpcmRhdGFfYmgtPmJfZGF0YSwgZGktPmlkMi5pX2RhdGEuaWRfZGF0YSwgaV9zaXplX3JlYWQoZGlyKSk7CiAJbWVtc2V0KGRpcmRhdGFfYmgtPmJfZGF0YSArIGlfc2l6ZV9yZWFkKGRpciksIDAsCiAJICAgICAgIHNiLT5zX2Jsb2Nrc2l6ZSAtIGlfc2l6ZV9yZWFkKGRpcikpOwotCW9jZnMyX2V4cGFuZF9sYXN0X2RpcmVudChkaXJkYXRhX2JoLT5iX2RhdGEsIGlfc2l6ZV9yZWFkKGRpciksIHNiKTsKLQlpZiAob2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIob3NiKSkKLQkJb2NmczJfaW5pdF9kaXJfdHJhaWxlcihkaXIsIGRpcmRhdGFfYmgpOworCWkgPSBvY2ZzMl9leHBhbmRfbGFzdF9kaXJlbnQoZGlyZGF0YV9iaC0+Yl9kYXRhLCBpX3NpemVfcmVhZChkaXIpLCBkaXIpOworCWlmIChvY2ZzMl9uZXdfZGlyX3dhbnRzX3RyYWlsZXIoZGlyKSkgeworCQkvKgorCQkgKiBQcmVwYXJlIHRoZSBkaXIgdHJhaWxlciB1cCBmcm9udC4gSXQgd2lsbCBvdGhlcndpc2UgbG9vaworCQkgKiBsaWtlIGEgdmFsaWQgZGlyZW50LiBFdmVuIGlmIGluc2VydGluZyB0aGUgaW5kZXggZmFpbHMKKwkJICogKHVubGlrZWx5KSwgdGhlbiBhbGwgd2UnbGwgaGF2ZSBkb25lIGlzIGdpdmVuIGZpcnN0IGRpcgorCQkgKiBibG9jayBhIHNtYWxsIGFtb3VudCBvZiBmcmFnbWVudGF0aW9uLgorCQkgKi8KKwkJb2NmczJfaW5pdF9kaXJfdHJhaWxlcihkaXIsIGRpcmRhdGFfYmgsIGkpOworCX0KIAogCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaXJkYXRhX2JoKTsKIAlpZiAocmV0KSB7CkBAIC0xNDk5LDYgKzMwMzQsMjQgQEAKIAkJZ290byBvdXRfY29tbWl0OwogCX0KIAorCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSAmJiAhZHhfaW5saW5lKSB7CisJCS8qCisJCSAqIER4IGRpcnMgd2l0aCBhbiBleHRlcm5hbCBjbHVzdGVyIG5lZWQgdG8gZG8gdGhpcyB1cAorCQkgKiBmcm9udC4gSW5saW5lIGR4IHJvb3QncyBnZXQgaGFuZGxlZCBsYXRlciwgYWZ0ZXIKKwkJICogd2UndmUgYWxsb2NhdGVkIG91ciByb290IGJsb2NrLiBXZSBnZXQgcGFzc2VkIGJhY2sKKwkJICogYSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgc28gdGhhdCBkcl9udW1fZW50cmllcyBjYW4KKwkJICogYmUgY29ycmVjdGx5IHNldCBvbmNlIHRoZSBkeF9yb290IGhhcyBiZWVuCisJCSAqIGFsbG9jYXRlZC4KKwkJICovCisJCXJldCA9IG9jZnMyX2R4X2Rpcl9pbmRleF9ibG9jayhkaXIsIGhhbmRsZSwgZHhfbGVhdmVzLAorCQkJCQkgICAgICAgbnVtX2R4X2xlYXZlcywgJm51bV9keF9lbnRyaWVzLAorCQkJCQkgICAgICAgZGlyZGF0YV9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCX0KKwogCS8qCiAJICogU2V0IGV4dGVudCwgaV9zaXplLCBldGMgb24gdGhlIGRpcmVjdG9yeS4gQWZ0ZXIgdGhpcywgdGhlCiAJICogaW5vZGUgc2hvdWxkIGNvbnRhaW4gdGhlIHNhbWUgZXhhY3QgZGlyZW50cyBhcyBiZWZvcmUgYW5kCkBAIC0xNTUxLDYgKzMxMDQsMjcgQEAKIAkJZ290byBvdXRfY29tbWl0OwogCX0KIAorCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSkgeworCQlyZXQgPSBvY2ZzMl9keF9kaXJfYXR0YWNoX2luZGV4KG9zYiwgaGFuZGxlLCBkaXIsIGRpX2JoLAorCQkJCQkJZGlyZGF0YV9iaCwgbWV0YV9hYywgZHhfaW5saW5lLAorCQkJCQkJbnVtX2R4X2VudHJpZXMsICZkeF9yb290X2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisKKwkJaWYgKGR4X2lubGluZSkgeworCQkJb2NmczJfZHhfZGlyX2luZGV4X3Jvb3RfYmxvY2soZGlyLCBkeF9yb290X2JoLAorCQkJCQkJICAgICAgZGlyZGF0YV9iaCk7CisJCX0gZWxzZSB7CisJCQlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmR4X2V0LCBkaXIsIGR4X3Jvb3RfYmgpOworCQkJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgZGlyLCAmZHhfZXQsIDAsCisJCQkJCQkgIGR4X2luc2VydF9ibGtubywgMSwgMCwgTlVMTCk7CisJCQlpZiAocmV0KQorCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJfQorCX0KKwogCS8qCiAJICogV2UgYXNrZWQgZm9yIHR3byBjbHVzdGVycywgYnV0IG9ubHkgZ290IG9uZSBpbiB0aGUgMXN0CiAJICogcGFzcy4gQ2xhaW0gdGhlIDJuZCBjbHVzdGVyIGFzIGEgc2VwYXJhdGUgZXh0ZW50LgpAQCAtMTU3MCwxNSArMzE0NCwzMiBAQAogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXRfY29tbWl0OwogCQl9CisJCWJ5dGVzX2FsbG9jYXRlZCArPSBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhkaXItPmlfc2IsIDEpOwogCX0KIAogCSpmaXJzdF9ibG9ja19iaCA9IGRpcmRhdGFfYmg7CiAJZGlyZGF0YV9iaCA9IE5VTEw7CisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpKSB7CisJCXVuc2lnbmVkIGludCBvZmY7CisKKwkJaWYgKCFkeF9pbmxpbmUpIHsKKwkJCS8qCisJCQkgKiBXZSBuZWVkIHRvIHJldHVybiB0aGUgY29ycmVjdCBibG9jayB3aXRoaW4gdGhlCisJCQkgKiBjbHVzdGVyIHdoaWNoIHNob3VsZCBob2xkIG91ciBlbnRyeS4KKwkJCSAqLworCQkJb2ZmID0gb2NmczJfZHhfZGlyX2hhc2hfaWR4KE9DRlMyX1NCKGRpci0+aV9zYiksCisJCQkJCQkgICAgJmxvb2t1cC0+ZGxfaGluZm8pOworCQkJZ2V0X2JoKGR4X2xlYXZlc1tvZmZdKTsKKwkJCWxvb2t1cC0+ZGxfZHhfbGVhZl9iaCA9IGR4X2xlYXZlc1tvZmZdOworCQl9CisJCWxvb2t1cC0+ZGxfZHhfcm9vdF9iaCA9IGR4X3Jvb3RfYmg7CisJCWR4X3Jvb3RfYmggPSBOVUxMOworCX0KIAogb3V0X2NvbW1pdDoKIAlpZiAocmV0IDwgMCAmJiBkaWRfcXVvdGEpCi0JCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoZGlyLAotCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgMikpOworCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGRpciwgYnl0ZXNfYWxsb2NhdGVkKTsKKwogCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CiAKIG91dF9zZW06CkBAIC0xNTg3LDggKzMxNzgsMTcgQEAKIG91dDoKIAlpZiAoZGF0YV9hYykKIAkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGRhdGFfYWMpOworCWlmIChtZXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CisKKwlpZiAoZHhfbGVhdmVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fZHhfbGVhdmVzOyBpKyspCisJCQlicmVsc2UoZHhfbGVhdmVzW2ldKTsKKwkJa2ZyZWUoZHhfbGVhdmVzKTsKKwl9CiAKIAlicmVsc2UoZGlyZGF0YV9iaCk7CisJYnJlbHNlKGR4X3Jvb3RfYmgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2NTgsMTEgKzMyNTgsMTQgQEAKICAqIGlzIHRvIGJlIHR1cm5lZCBpbnRvIGFuIGV4dGVudCBiYXNlZCBvbmUuIFRoZSBzaXplIG9mIHRoZSBkaXJlbnQgdG8KICAqIGluc2VydCBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgc3BhY2UgZ2FpbmVkIGJ5IGdyb3dpbmcgdG8ganVzdCBvbmUKICAqIGJsb2NrLCBzbyB3ZSBtYXkgaGF2ZSB0byBncm93IHRoZSBpbm9kZSBieSB0d28gYmxvY2tzIGluIHRoYXQgY2FzZS4KKyAqCisgKiBJZiB0aGUgZGlyZWN0b3J5IGlzIGFscmVhZHkgaW5kZXhlZCwgZHhfcm9vdF9iaCBtdXN0IGJlIHByb3ZpZGVkLgogICovCiBzdGF0aWMgaW50IG9jZnMyX2V4dGVuZF9kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICAgc3RydWN0IGlub2RlICpkaXIsCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCiAJCQkgICAgdW5zaWduZWQgaW50IGJsb2Nrc193YW50ZWQsCisJCQkgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXAsCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbmV3X2RlX2JoKQogewogCWludCBzdGF0dXMgPSAwOwpAQCAtMTY3NywxNyArMzI4MCwyOSBAQAogCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKiBkZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb3NiLT5zYjsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gbG9va3VwLT5kbF9keF9yb290X2JoOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKIAlpZiAoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgeworCQkvKgorCQkgKiBUaGlzIHdvdWxkIGJlIGEgY29kZSBlcnJvciBhcyBhbiBpbmxpbmUgZGlyZWN0b3J5IHNob3VsZAorCQkgKiBuZXZlciBoYXZlIGFuIGluZGV4IHJvb3QuCisJCSAqLworCQlCVUdfT04oZHhfcm9vdF9iaCk7CisKIAkJc3RhdHVzID0gb2NmczJfZXhwYW5kX2lubGluZV9kaXIoZGlyLCBwYXJlbnRfZmVfYmgsCi0JCQkJCQkgYmxvY2tzX3dhbnRlZCwgJm5ld19iaCk7CisJCQkJCQkgYmxvY2tzX3dhbnRlZCwgbG9va3VwLAorCQkJCQkJICZuZXdfYmgpOwogCQlpZiAoc3RhdHVzKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CiAJCX0KIAorCQkvKiBFeHBhbnNpb24gZnJvbSBpbmxpbmUgdG8gYW4gaW5kZXhlZCBkaXJlY3Rvcnkgd2lsbAorCQkgKiBoYXZlIGdpdmVuIHVzIHRoaXMuICovCisJCWR4X3Jvb3RfYmggPSBsb29rdXAtPmRsX2R4X3Jvb3RfYmg7CisKIAkJaWYgKGJsb2Nrc193YW50ZWQgPT0gMSkgewogCQkJLyoKIAkJCSAqIElmIHRoZSBuZXcgZGlyZW50IHdpbGwgZml0IGluc2lkZSB0aGUgc3BhY2UKQEAgLTE3NTEsNiArMzM2NiwxMCBAQAogCX0KIAogZG9fZXh0ZW5kOgorCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKQorCQljcmVkaXRzKys7IC8qIEZvciBhdHRhY2hpbmcgdGhlIG5ldyBkaXJlbnQgYmxvY2sgdG8gdGhlCisJCQkgICAgKiBkeF9yb290ICovCisKIAlkb3duX3dyaXRlKCZPQ0ZTMl9JKGRpciktPmlwX2FsbG9jX3NlbSk7CiAJZHJvcF9hbGxvY19zZW0gPSAxOwogCkBAIC0xNzgxLDkgKzM0MDAsMTkgQEAKIAogCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKikgbmV3X2JoLT5iX2RhdGE7CiAJZGUtPmlub2RlID0gMDsKLQlpZiAob2NmczJfZGlyX2hhc190cmFpbGVyKGRpcikpIHsKKwlpZiAob2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoZGlyKSkgewogCQlkZS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KG9jZnMyX2Rpcl90cmFpbGVyX2Jsa19vZmYoc2IpKTsKLQkJb2NmczJfaW5pdF9kaXJfdHJhaWxlcihkaXIsIG5ld19iaCk7CisKKwkJb2NmczJfaW5pdF9kaXJfdHJhaWxlcihkaXIsIG5ld19iaCwgbGUxNl90b19jcHUoZGUtPnJlY19sZW4pKTsKKworCQlpZiAob2NmczJfZGlyX2luZGV4ZWQoZGlyKSkgeworCQkJc3RhdHVzID0gb2NmczJfZHhfZGlyX2xpbmtfdHJhaWxlcihkaXIsIGhhbmRsZSwKKwkJCQkJCQkgICBkeF9yb290X2JoLCBuZXdfYmgpOworCQkJaWYgKHN0YXR1cykgeworCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0KIAl9IGVsc2UgewogCQlkZS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJfQpAQCAtMTgzOSw3ICszNDY4LDcgQEAKIAkgKiBUaGlzIGNhbGN1bGF0ZXMgaG93IG1hbnkgZnJlZSBieXRlcyB3ZSdkIGhhdmUgaW4gYmxvY2sgemVybywgc2hvdWxkCiAJICogdGhpcyBmdW5jdGlvbiBmb3JjZSBleHBhbnNpb24gdG8gYW4gZXh0ZW50IHRyZWUuCiAJICovCi0JaWYgKG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKE9DRlMyX1NCKHNiKSkpCisJaWYgKG9jZnMyX25ld19kaXJfd2FudHNfdHJhaWxlcihkaXIpKQogCQlmcmVlX3NwYWNlID0gb2NmczJfZGlyX3RyYWlsZXJfYmxrX29mZihzYikgLSBpX3NpemVfcmVhZChkaXIpOwogCWVsc2UKIAkJZnJlZV9zcGFjZSA9IGRpci0+aV9zYi0+c19ibG9ja3NpemUgLSBpX3NpemVfcmVhZChkaXIpOwpAQCAtMTk3MCwxMiArMzU5OSw3NjYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IGR4X2xlYWZfc29ydF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmVudHJ5MSA9IGE7CisJY29uc3Qgc3RydWN0IG9jZnMyX2R4X2VudHJ5ICplbnRyeTIgPSBiOworCXUzMiBtYWpvcl9oYXNoMSA9IGxlMzJfdG9fY3B1KGVudHJ5MS0+ZHhfbWFqb3JfaGFzaCk7CisJdTMyIG1ham9yX2hhc2gyID0gbGUzMl90b19jcHUoZW50cnkyLT5keF9tYWpvcl9oYXNoKTsKKwl1MzIgbWlub3JfaGFzaDEgPSBsZTMyX3RvX2NwdShlbnRyeTEtPmR4X21pbm9yX2hhc2gpOworCXUzMiBtaW5vcl9oYXNoMiA9IGxlMzJfdG9fY3B1KGVudHJ5Mi0+ZHhfbWlub3JfaGFzaCk7CisKKwlpZiAobWFqb3JfaGFzaDEgPiBtYWpvcl9oYXNoMikKKwkJcmV0dXJuIDE7CisJaWYgKG1ham9yX2hhc2gxIDwgbWFqb3JfaGFzaDIpCisJCXJldHVybiAtMTsKKworCS8qCisJICogSXQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBzb3J0IGJ5IG1pbm9yCisJICovCisJaWYgKG1pbm9yX2hhc2gxID4gbWlub3JfaGFzaDIpCisJCXJldHVybiAxOworCWlmIChtaW5vcl9oYXNoMSA8IG1pbm9yX2hhc2gyKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR4X2xlYWZfc29ydF9zd2FwKHZvaWQgKmEsIHZvaWQgKmIsIGludCBzaXplKQoreworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZW50cnkxID0gYTsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmVudHJ5MiA9IGI7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5IHRtcDsKKworCUJVR19PTihzaXplICE9IHNpemVvZigqZW50cnkxKSk7CisKKwl0bXAgPSAqZW50cnkxOworCSplbnRyeTEgPSAqZW50cnkyOworCSplbnRyeTIgPSB0bXA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfbGVhZl9zYW1lX21ham9yKHN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmKQoreworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICpkbF9saXN0ID0gJmR4X2xlYWYtPmRsX2xpc3Q7CisJaW50IGksIG51bSA9IGxlMTZfdG9fY3B1KGRsX2xpc3QtPmRlX251bV91c2VkKTsKKworCWZvciAoaSA9IDA7IGkgPCAobnVtIC0gMSk7IGkrKykgeworCQlpZiAobGUzMl90b19jcHUoZGxfbGlzdC0+ZGVfZW50cmllc1tpXS5keF9tYWpvcl9oYXNoKSAhPQorCQkgICAgbGUzMl90b19jcHUoZGxfbGlzdC0+ZGVfZW50cmllc1tpICsgMV0uZHhfbWFqb3JfaGFzaCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEZpbmQgdGhlIG9wdGltYWwgdmFsdWUgdG8gc3BsaXQgdGhpcyBsZWFmIG9uLiBUaGlzIGV4cGVjdHMgdGhlIGxlYWYKKyAqIGVudHJpZXMgdG8gYmUgaW4gc29ydGVkIG9yZGVyLgorICoKKyAqIGxlYWZfY3BvcyBpcyB0aGUgY3BvcyBvZiB0aGUgbGVhZiB3ZSdyZSBzcGxpdHRpbmcuIGluc2VydF9oYXNoIGlzCisgKiB0aGUgaGFzaCB3ZSB3YW50IHRvIGluc2VydC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29uY2VybmVkIHdpdGggdGhlIG1ham9yIGhhc2ggLSB0aGF0IHdoaWNoCisgKiBkZXRlcm1pbmVzIHdoaWNoIGNsdXN0ZXIgYW4gaXRlbSBiZWxvbmdzIHRvLgorICovCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9maW5kX2xlYWZfc3BsaXQoc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWYsCisJCQkJCXUzMiBsZWFmX2Nwb3MsIHUzMiBpbnNlcnRfaGFzaCwKKwkJCQkJdTMyICpzcGxpdF9oYXNoKQoreworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICpkbF9saXN0ID0gJmR4X2xlYWYtPmRsX2xpc3Q7CisJaW50IGksIG51bV91c2VkID0gbGUxNl90b19jcHUoZGxfbGlzdC0+ZGVfbnVtX3VzZWQpOworCWludCBhbGxzYW1lOworCisJLyoKKwkgKiBUaGVyZSdzIGEgY291cGxlIHJhcmUsIGJ1dCBuYXN0eSBjb3JuZXIgY2FzZXMgd2UgaGF2ZSB0bworCSAqIGNoZWNrIGZvciBoZXJlLiBBbGwgb2YgdGhlbSBpbnZvbHZlIGEgbGVhZiB3aGVyZSBhbGwgdmFsdWUKKwkgKiBoYXZlIHRoZSBzYW1lIGhhc2gsIHdoaWNoIGlzIHdoYXQgd2UgbG9vayBmb3IgZmlyc3QuCisJICoKKwkgKiBNb3N0IG9mIHRoZSB0aW1lLCBhbGwgb2YgdGhlIGFib3ZlIGlzIGZhbHNlLCBhbmQgd2Ugc2ltcGx5CisJICogcGljayB0aGUgbWVkaWFuIHZhbHVlIGZvciBhIHNwbGl0LgorCSAqLworCWFsbHNhbWUgPSBvY2ZzMl9keF9sZWFmX3NhbWVfbWFqb3IoZHhfbGVhZik7CisJaWYgKGFsbHNhbWUpIHsKKwkJdTMyIHZhbCA9IGxlMzJfdG9fY3B1KGRsX2xpc3QtPmRlX2VudHJpZXNbMF0uZHhfbWFqb3JfaGFzaCk7CisKKwkJaWYgKHZhbCA9PSBpbnNlcnRfaGFzaCkgeworCQkJLyoKKwkJCSAqIE5vIG1hdHRlciB3aGVyZSB3ZSB3b3VsZCBjaG9vc2UgdG8gc3BsaXQsCisJCQkgKiB0aGUgbmV3IGVudHJ5IHdvdWxkIHdhbnQgdG8gb2NjdXB5IHRoZSBzYW1lCisJCQkgKiBibG9jayBhcyB0aGVzZS4gU2luY2UgdGhlcmUncyBubyBzcGFjZSBsZWZ0CisJCQkgKiBpbiB0aGVpciBleGlzdGluZyBibG9jaywgd2Uga25vdyB0aGVyZQorCQkJICogd29uJ3QgYmUgc3BhY2UgYWZ0ZXIgdGhlIHNwbGl0LgorCQkJICovCisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCisJCWlmICh2YWwgPT0gbGVhZl9jcG9zKSB7CisJCQkvKgorCQkJICogQmVjYXVzZSB2YWwgaXMgdGhlIHNhbWUgYXMgbGVhZl9jcG9zICh3aGljaAorCQkJICogaXMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoaXMgbGVhZiBjYW4gaGF2ZSksCisJCQkgKiB5ZXQgaXMgbm90IGVxdWFsIHRvIGluc2VydF9oYXNoLCB0aGVuIHdlCisJCQkgKiBrbm93IHRoYXQgaW5zZXJ0X2hhc2ggKm11c3QqIGJlIGxhcmdlciB0aGFuCisJCQkgKiB2YWwgKGFuZCBsZWFmX2Nwb3MpLiBBdCBsZWFzdCBjcG9zKzEgaW4gdmFsdWUuCisJCQkgKgorCQkJICogV2UgYWxzbyBrbm93IHRoZW4sIHRoYXQgdGhlcmUgY2Fubm90IGJlIGFuCisJCQkgKiBhZGphY2VudCBleHRlbnQgKG90aGVyd2lzZSB3ZSdkIGJlIGxvb2tpbmcKKwkJCSAqIGF0IGl0KS4gQ2hvb3NpbmcgdGhpcyB2YWx1ZSBnaXZlcyB1cyBhCisJCQkgKiBjaGFuY2UgdG8gZ2V0IHNvbWUgY29udGlndW91c25lc3MuCisJCQkgKi8KKwkJCSpzcGxpdF9oYXNoID0gbGVhZl9jcG9zICsgMTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHZhbCA+IGluc2VydF9oYXNoKSB7CisJCQkvKgorCQkJICogdmFsIGNhbiBub3QgYmUgdGhlIHNhbWUgYXMgaW5zZXJ0IGhhc2gsIGFuZAorCQkJICogYWxzbyBtdXN0IGJlIGxhcmdlciB0aGFuIGxlYWZfY3Bvcy4gQWxzbywKKwkJCSAqIHdlIGtub3cgdGhhdCB0aGVyZSBjYW4ndCBiZSBhIGxlYWYgYmV0d2VlbgorCQkJICogY3BvcyBhbmQgdmFsLCBvdGhlcndpc2UgdGhlIGVudHJpZXMgd2l0aAorCQkJICogaGFzaCAndmFsJyB3b3VsZCBiZSB0aGVyZS4KKwkJCSAqLworCQkJKnNwbGl0X2hhc2ggPSB2YWw7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCSpzcGxpdF9oYXNoID0gaW5zZXJ0X2hhc2g7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogU2luY2UgdGhlIHJlY29yZHMgYXJlIHNvcnRlZCBhbmQgdGhlIGNoZWNrcyBhYm92ZQorCSAqIGd1YXJhbnRlZWQgdGhhdCBub3QgYWxsIHJlY29yZHMgaW4gdGhpcyBibG9jayBhcmUgdGhlIHNhbWUsCisJICogd2Ugc2ltcGxlIHRyYXZlbCBmb3J3YXJkLCBmcm9tIHRoZSBtZWRpYW4sIGFuZCBwaWNrIHRoZSAxc3QKKwkgKiByZWNvcmQgd2hvc2UgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gbGVhZl9jcG9zLgorCSAqLworCWZvciAoaSA9IChudW1fdXNlZCAvIDIpOyBpIDwgbnVtX3VzZWQ7IGkrKykKKwkJaWYgKGxlMzJfdG9fY3B1KGRsX2xpc3QtPmRlX2VudHJpZXNbaV0uZHhfbWFqb3JfaGFzaCkgPgorCQkgICAgbGVhZl9jcG9zKQorCQkJYnJlYWs7CisKKwlCVUdfT04oaSA9PSBudW1fdXNlZCk7IC8qIFNob3VsZCBiZSBpbXBvc3NpYmxlICovCisJKnNwbGl0X2hhc2ggPSBsZTMyX3RvX2NwdShkbF9saXN0LT5kZV9lbnRyaWVzW2ldLmR4X21ham9yX2hhc2gpOworCXJldHVybiAwOworfQorCisvKgorICogVHJhbnNmZXIgYWxsIGVudHJpZXMgaW4gb3JpZ19keF9sZWF2ZXMgd2hvc2UgbWFqb3IgaGFzaCBpcyBlcXVhbCB0byBvcgorICogbGFyZ2VyIHRoYW4gc3BsaXRfaGFzaCBpbnRvIG5ld19keF9sZWF2ZXMuIFdlIHVzZSBhIHRlbXBvcmFyeQorICogYnVmZmVyICh0bXBfZHhfbGVhZikgdG8gbWFrZSB0aGUgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgbGVhZiBibG9ja3MuCisgKgorICogU2luY2UgdGhlIGJsb2NrIG9mZnNldCBpbnNpZGUgYSBsZWFmIChjbHVzdGVyKSBpcyBhIGNvbnN0YW50IG1hc2sKKyAqIG9mIG1pbm9yX2hhc2gsIHdlIGNhbiBvcHRpbWl6ZSAtIGFuIGl0ZW0gYXQgYmxvY2sgb2Zmc2V0IFggd2l0aGluCisgKiB0aGUgb3JpZ2luYWwgY2x1c3Rlciwgd2lsbCBiZSBhdCBvZmZzZXQgWCB3aXRoaW4gdGhlIG5ldyBjbHVzdGVyLgorICovCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9kaXJfdHJhbnNmZXJfbGVhZihzdHJ1Y3QgaW5vZGUgKmRpciwgdTMyIHNwbGl0X2hhc2gsCisJCQkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9keF9sZWFmICp0bXBfZHhfbGVhZiwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqb3JpZ19keF9sZWF2ZXMsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKm5ld19keF9sZWF2ZXMsCisJCQkJICAgICAgIGludCBudW1fZHhfbGVhdmVzKQoreworCWludCBpLCBqLCBudW1fdXNlZDsKKwl1MzIgbWFqb3JfaGFzaDsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqb3JpZ19keF9sZWFmLCAqbmV3X2R4X2xlYWY7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKm9yaWdfbGlzdCwgKm5ld19saXN0LCAqdG1wX2xpc3Q7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5ICpkeF9lbnRyeTsKKworCXRtcF9saXN0ID0gJnRtcF9keF9sZWFmLT5kbF9saXN0OworCisJZm9yIChpID0gMDsgaSA8IG51bV9keF9sZWF2ZXM7IGkrKykgeworCQlvcmlnX2R4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKikgb3JpZ19keF9sZWF2ZXNbaV0tPmJfZGF0YTsKKwkJb3JpZ19saXN0ID0gJm9yaWdfZHhfbGVhZi0+ZGxfbGlzdDsKKwkJbmV3X2R4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKikgbmV3X2R4X2xlYXZlc1tpXS0+Yl9kYXRhOworCQluZXdfbGlzdCA9ICZuZXdfZHhfbGVhZi0+ZGxfbGlzdDsKKworCQludW1fdXNlZCA9IGxlMTZfdG9fY3B1KG9yaWdfbGlzdC0+ZGVfbnVtX3VzZWQpOworCisJCW1lbWNweSh0bXBfZHhfbGVhZiwgb3JpZ19keF9sZWFmLCBkaXItPmlfc2ItPnNfYmxvY2tzaXplKTsKKwkJdG1wX2xpc3QtPmRlX251bV91c2VkID0gY3B1X3RvX2xlMTYoMCk7CisJCW1lbXNldCgmdG1wX2xpc3QtPmRlX2VudHJpZXMsIDAsIHNpemVvZigqZHhfZW50cnkpKm51bV91c2VkKTsKKworCQlmb3IgKGogPSAwOyBqIDwgbnVtX3VzZWQ7IGorKykgeworCQkJZHhfZW50cnkgPSAmb3JpZ19saXN0LT5kZV9lbnRyaWVzW2pdOworCQkJbWFqb3JfaGFzaCA9IGxlMzJfdG9fY3B1KGR4X2VudHJ5LT5keF9tYWpvcl9oYXNoKTsKKwkJCWlmIChtYWpvcl9oYXNoID49IHNwbGl0X2hhc2gpCisJCQkJb2NmczJfZHhfZGlyX2xlYWZfaW5zZXJ0X3RhaWwobmV3X2R4X2xlYWYsCisJCQkJCQkJICAgICAgZHhfZW50cnkpOworCQkJZWxzZQorCQkJCW9jZnMyX2R4X2Rpcl9sZWFmX2luc2VydF90YWlsKHRtcF9keF9sZWFmLAorCQkJCQkJCSAgICAgIGR4X2VudHJ5KTsKKwkJfQorCQltZW1jcHkob3JpZ19keF9sZWFmLCB0bXBfZHhfbGVhZiwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CisKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG9yaWdfZHhfbGVhdmVzW2ldKTsKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19keF9sZWF2ZXNbaV0pOworCX0KK30KKworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfcmViYWxhbmNlX2NyZWRpdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJCSAgc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QpCit7CisJaW50IGNyZWRpdHMgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob3NiLT5zYiwgMik7CisKKwljcmVkaXRzICs9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMob3NiLT5zYiwgJmR4X3Jvb3QtPmRyX2xpc3QsIDEpOworCWNyZWRpdHMgKz0gb2NmczJfcXVvdGFfdHJhbnNfY3JlZGl0cyhvc2ItPnNiKTsKKwlyZXR1cm4gY3JlZGl0czsKK30KKworLyoKKyAqIEZpbmQgdGhlIG1lZGlhbiB2YWx1ZSBpbiBkeF9sZWFmX2JoIGFuZCBhbGxvY2F0ZSBhIG5ldyBsZWFmIHRvIG1vdmUKKyAqIGhhbGYgb3VyIGVudHJpZXMgaW50by4KKyAqLworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfcmViYWxhbmNlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfbGVhZl9iaCwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9keF9oaW5mbyAqaGluZm8sIHUzMiBsZWFmX2Nwb3MsCisJCQkJICB1NjQgbGVhZl9ibGtubykKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKWR4X2xlYWZfYmgtPmJfZGF0YTsKKwlpbnQgY3JlZGl0cywgcmV0LCBpLCBudW1fdXNlZCwgZGlkX3F1b3RhID0gMDsKKwl1MzIgY3Bvcywgc3BsaXRfaGFzaCwgaW5zZXJ0X2hhc2ggPSBoaW5mby0+bWFqb3JfaGFzaDsKKwl1NjQgb3JpZ19sZWF2ZXNfc3RhcnQ7CisJaW50IG51bV9keF9sZWF2ZXM7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqb3JpZ19keF9sZWF2ZXMgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqKm5ld19keF9sZWF2ZXMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTCwgKm1ldGFfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqdG1wX2R4X2xlYWYgPSBOVUxMOworCisJbWxvZygwLCAiRFggRGlyOiAlbGx1LCByZWJhbGFuY2UgbGVhZiBsZWFmX2Jsa25vOiAlbGx1IGluc2VydDogJXVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlYWZfYmxrbm8sIGluc2VydF9oYXNoKTsKKworCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZXQsIGRpciwgZHhfcm9vdF9iaCk7CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCS8qCisJICogWFhYOiBUaGlzIGlzIGEgcmF0aGVyIGxhcmdlIGxpbWl0LiBXZSBzaG91bGQgdXNlIGEgbW9yZQorCSAqIHJlYWxpc3RpYyB2YWx1ZS4KKwkgKi8KKwlpZiAobGUzMl90b19jcHUoZHhfcm9vdC0+ZHJfY2x1c3RlcnMpID09IFVJTlRfTUFYKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCW51bV91c2VkID0gbGUxNl90b19jcHUoZHhfbGVhZi0+ZGxfbGlzdC5kZV9udW1fdXNlZCk7CisJaWYgKG51bV91c2VkIDwgbGUxNl90b19jcHUoZHhfbGVhZi0+ZGxfbGlzdC5kZV9jb3VudCkpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIkRYIERpcjogJWxsdSwgQXNrZWQgdG8gcmViYWxhbmNlIGVtcHR5IGxlYWY6ICIKKwkJICAgICAiJWxsdSwgJWRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlYWZfYmxrbm8sIG51bV91c2VkKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJb3JpZ19keF9sZWF2ZXMgPSBvY2ZzMl9keF9kaXJfa21hbGxvY19sZWF2ZXMob3NiLT5zYiwgJm51bV9keF9sZWF2ZXMpOworCWlmICghb3JpZ19keF9sZWF2ZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwluZXdfZHhfbGVhdmVzID0gb2NmczJfZHhfZGlyX2ttYWxsb2NfbGVhdmVzKG9zYi0+c2IsIE5VTEwpOworCWlmICghbmV3X2R4X2xlYXZlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhkaXIsICZldCwgMSwgMCwgJmRhdGFfYWMsICZtZXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgIT0gLUVOT1NQQykKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJY3JlZGl0cyA9IG9jZnMyX2R4X2Rpcl9yZWJhbGFuY2VfY3JlZGl0cyhvc2IsIGR4X3Jvb3QpOworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoZGlyLAorCQkJCSAgICAgICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhkaXItPmlfc2IsIDEpKSkgeworCQlyZXQgPSAtRURRVU9UOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCWRpZF9xdW90YSA9IDE7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwgZHhfbGVhZl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwkvKgorCSAqIFRoaXMgYmxvY2sgaXMgY2hhbmdpbmcgYW55d2F5LCBzbyB3ZSBjYW4gc29ydCBpdCBpbiBwbGFjZS4KKwkgKi8KKwlzb3J0KGR4X2xlYWYtPmRsX2xpc3QuZGVfZW50cmllcywgbnVtX3VzZWQsCisJICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX2R4X2VudHJ5KSwgZHhfbGVhZl9zb3J0X2NtcCwKKwkgICAgIGR4X2xlYWZfc29ydF9zd2FwKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkeF9sZWFmX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXJldCA9IG9jZnMyX2R4X2Rpcl9maW5kX2xlYWZfc3BsaXQoZHhfbGVhZiwgbGVhZl9jcG9zLCBpbnNlcnRfaGFzaCwKKwkJCQkJICAgJnNwbGl0X2hhc2gpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvICBvdXRfY29tbWl0OworCX0KKworCW1sb2coMCwgIlNwbGl0IGxlYWYgKCV1KSBhdCAldSwgaW5zZXJ0IG1ham9yIGhhc2ggaXMgJXVcbiIsCisJICAgICBsZWFmX2Nwb3MsIHNwbGl0X2hhc2gsIGluc2VydF9oYXNoKTsKKworCS8qCisJICogV2UgaGF2ZSB0byBjYXJlZnVsbHkgb3JkZXIgb3BlcmF0aW9ucyBoZXJlLiBUaGVyZSBhcmUgaXRlbXMKKwkgKiB3aGljaCB3YW50IHRvIGJlIGluIHRoZSBuZXcgY2x1c3RlciBiZWZvcmUgaW5zZXJ0LCBidXQgaW4KKwkgKiBvcmRlciB0byBwdXQgdGhvc2UgaXRlbXMgaW4gdGhlIG5ldyBjbHVzdGVyLCB3ZSBhbHRlciB0aGUKKwkgKiBvbGQgY2x1c3Rlci4gQSBmYWlsdXJlIHRvIGluc2VydCBnZXRzIG5hc3R5LgorCSAqCisJICogU28sIHN0YXJ0IGJ5IHJlc2VydmluZyB3cml0ZXMgdG8gdGhlIG9sZAorCSAqIGNsdXN0ZXIuIG9jZnMyX2R4X2Rpcl9uZXdfY2x1c3RlciB3aWxsIHJlc2VydmUgd3JpdGVzIG9uCisJICogdGhlIG5ldyBjbHVzdGVyIGZvciB1cywgYmVmb3JlIGluc2VydGluZyBpdC4gVGhlIGluc2VydAorCSAqIHdvbid0IGhhcHBlbiBpZiB0aGVyZSdzIGFuIGVycm9yIGJlZm9yZSB0aGF0LiBPbmNlIHRoZQorCSAqIGluc2VydCBpcyBkb25lIHRoZW4sIHdlIGNhbiB0cmFuc2ZlciBmcm9tIG9uZSBsZWFmIGludG8gdGhlCisJICogb3RoZXIgd2l0aG91dCBmZWFyIG9mIGhpdHRpbmcgYW55IGVycm9yLgorCSAqLworCisJLyoKKwkgKiBUaGUgbGVhZiB0cmFuc2ZlciB3YW50cyBzb21lIHNjcmF0Y2ggc3BhY2Ugc28gdGhhdCB3ZSBkb24ndAorCSAqIHdpbmQgdXAgZG9pbmcgYSBidW5jaCBvZiBleHBlbnNpdmUgbWVtbW92ZSgpLgorCSAqLworCXRtcF9keF9sZWFmID0ga21hbGxvYyhvc2ItPnNiLT5zX2Jsb2Nrc2l6ZSwgR0ZQX05PRlMpOworCWlmICghdG1wX2R4X2xlYWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJb3JpZ19sZWF2ZXNfc3RhcnQgPSBvY2ZzMl9ibG9ja190b19jbHVzdGVyX3N0YXJ0KGRpci0+aV9zYiwgbGVhZl9ibGtubyk7CisJcmV0ID0gb2NmczJfcmVhZF9keF9sZWF2ZXMoZGlyLCBvcmlnX2xlYXZlc19zdGFydCwgbnVtX2R4X2xlYXZlcywKKwkJCQkgICBvcmlnX2R4X2xlYXZlcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2R4X2xlYXZlczsgaSsrKSB7CisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLCBvcmlnX2R4X2xlYXZlc1tpXSwKKwkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKwl9CisKKwljcG9zID0gc3BsaXRfaGFzaDsKKwlyZXQgPSBvY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoZGlyLCAmZXQsIGNwb3MsIGhhbmRsZSwKKwkJCQkgICAgICAgZGF0YV9hYywgbWV0YV9hYywgbmV3X2R4X2xlYXZlcywKKwkJCQkgICAgICAgbnVtX2R4X2xlYXZlcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlvY2ZzMl9keF9kaXJfdHJhbnNmZXJfbGVhZihkaXIsIHNwbGl0X2hhc2gsIGhhbmRsZSwgdG1wX2R4X2xlYWYsCisJCQkJICAgb3JpZ19keF9sZWF2ZXMsIG5ld19keF9sZWF2ZXMsIG51bV9keF9sZWF2ZXMpOworCitvdXRfY29tbWl0OgorCWlmIChyZXQgPCAwICYmIGRpZF9xdW90YSkKKwkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShkaXIsCisJCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoZGlyLT5pX3NiLCAxKSk7CisKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCitvdXQ6CisJaWYgKG9yaWdfZHhfbGVhdmVzIHx8IG5ld19keF9sZWF2ZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9keF9sZWF2ZXM7IGkrKykgeworCQkJaWYgKG9yaWdfZHhfbGVhdmVzKQorCQkJCWJyZWxzZShvcmlnX2R4X2xlYXZlc1tpXSk7CisJCQlpZiAobmV3X2R4X2xlYXZlcykKKwkJCQlicmVsc2UobmV3X2R4X2xlYXZlc1tpXSk7CisJCX0KKwkJa2ZyZWUob3JpZ19keF9sZWF2ZXMpOworCQlrZnJlZShuZXdfZHhfbGVhdmVzKTsKKwl9CisKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCWlmIChkYXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoZGF0YV9hYyk7CisKKwlrZnJlZSh0bXBfZHhfbGVhZik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9maW5kX2Rpcl9zcGFjZV9keChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmgsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkJICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCit7CisJaW50IHJldCwgcmViYWxhbmNlZCA9IDA7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9sZWFmX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZjsKKwl1NjQgYmxrbm87CisJdTMyIGxlYWZfY3BvczsKKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisKK3Jlc3RhcnRfc2VhcmNoOgorCXJldCA9IG9jZnMyX2R4X2Rpcl9sb29rdXAoZGlyLCAmZHhfcm9vdC0+ZHJfbGlzdCwgJmxvb2t1cC0+ZGxfaGluZm8sCisJCQkJICAmbGVhZl9jcG9zLCAmYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2R4X2xlYWYoZGlyLCBibGtubywgJmR4X2xlYWZfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkeF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopZHhfbGVhZl9iaC0+Yl9kYXRhOworCisJaWYgKGxlMTZfdG9fY3B1KGR4X2xlYWYtPmRsX2xpc3QuZGVfbnVtX3VzZWQpID49CisJICAgIGxlMTZfdG9fY3B1KGR4X2xlYWYtPmRsX2xpc3QuZGVfY291bnQpKSB7CisJCWlmIChyZWJhbGFuY2VkKSB7CisJCQkvKgorCQkJICogUmViYWxhbmNpbmcgc2hvdWxkIGhhdmUgcHJvdmlkZWQgdXMgd2l0aAorCQkJICogc3BhY2UgaW4gYW4gYXBwcm9wcmlhdGUgbGVhZi4KKwkJCSAqCisJCQkgKiBYWFg6IElzIHRoaXMgYW4gYWJub3JtYWwgY29uZGl0aW9uIHRoZW4/CisJCQkgKiBTaG91bGQgd2UgcHJpbnQgYSBtZXNzYWdlIGhlcmU/CisJCQkgKi8KKwkJCXJldCA9IC1FTk9TUEM7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IG9jZnMyX2R4X2Rpcl9yZWJhbGFuY2Uob3NiLCBkaXIsIGR4X3Jvb3RfYmgsIGR4X2xlYWZfYmgsCisJCQkJCSAgICAgJmxvb2t1cC0+ZGxfaGluZm8sIGxlYWZfY3BvcywKKwkJCQkJICAgICBibGtubyk7CisJCWlmIChyZXQpIHsKKwkJCWlmIChyZXQgIT0gLUVOT1NQQykKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qCisJCSAqIFJlc3RhcnQgdGhlIGxvb2t1cC4gVGhlIHJlYmFsYW5jZSBtaWdodCBoYXZlCisJCSAqIGNoYW5nZWQgd2hpY2ggYmxvY2sgb3VyIGl0ZW0gZml0cyBpbnRvLiBNYXJrIG91cgorCQkgKiBwcm9ncmVzcywgc28gd2Ugb25seSBleGVjdXRlIHRoaXMgb25jZS4KKwkJICovCisJCWJyZWxzZShkeF9sZWFmX2JoKTsKKwkJZHhfbGVhZl9iaCA9IE5VTEw7CisJCXJlYmFsYW5jZWQgPSAxOworCQlnb3RvIHJlc3RhcnRfc2VhcmNoOworCX0KKworCWxvb2t1cC0+ZGxfZHhfbGVhZl9iaCA9IGR4X2xlYWZfYmg7CisJZHhfbGVhZl9iaCA9IE5VTEw7CisKK291dDoKKwlicmVsc2UoZHhfbGVhZl9iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9zZWFyY2hfZHhfZnJlZV9saXN0KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoLAorCQkJCSAgICAgaW50IG5hbWVsZW4sCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKK3sKKwlpbnQgcmV0ID0gLUVOT1NQQzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxlYWZfYmggPSBOVUxMLCAqcHJldl9sZWFmX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKmRiOworCXU2NCBuZXh0X2Jsb2NrOworCWludCByZWNfbGVuID0gT0NGUzJfRElSX1JFQ19MRU4obmFtZWxlbik7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCW5leHRfYmxvY2sgPSBsZTY0X3RvX2NwdShkeF9yb290LT5kcl9mcmVlX2Jsayk7CisKKwl3aGlsZSAobmV4dF9ibG9jaykgeworCQlicmVsc2UocHJldl9sZWFmX2JoKTsKKwkJcHJldl9sZWFmX2JoID0gbGVhZl9iaDsKKwkJbGVhZl9iaCA9IE5VTEw7CisKKwkJcmV0ID0gb2NmczJfcmVhZF9kaXJfYmxvY2tfZGlyZWN0KGRpciwgbmV4dF9ibG9jaywgJmxlYWZfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWRiID0gb2NmczJfdHJhaWxlcl9mcm9tX2JoKGxlYWZfYmgsIGRpci0+aV9zYik7CisJCWlmIChyZWNfbGVuIDw9IGxlMTZfdG9fY3B1KGRiLT5kYl9mcmVlX3JlY19sZW4pKSB7CisJCQlsb29rdXAtPmRsX2xlYWZfYmggPSBsZWFmX2JoOworCQkJbG9va3VwLT5kbF9wcmV2X2xlYWZfYmggPSBwcmV2X2xlYWZfYmg7CisJCQlsZWFmX2JoID0gTlVMTDsKKwkJCXByZXZfbGVhZl9iaCA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCisJCW5leHRfYmxvY2sgPSBsZTY0X3RvX2NwdShkYi0+ZGJfZnJlZV9uZXh0KTsKKwl9CisKKwlpZiAoIW5leHRfYmxvY2spCisJCXJldCA9IC1FTk9TUEM7CisKK291dDoKKworCWJyZWxzZShsZWFmX2JoKTsKKwlicmVsc2UocHJldl9sZWFmX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2V4cGFuZF9pbmxpbmVfZHhfcm9vdChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoKQoreworCWludCByZXQsIG51bV9keF9sZWF2ZXMsIGksIGosIGRpZF9xdW90YSA9IDA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhdmVzID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisJdTY0IGluc2VydF9ibGtubzsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICplbnRyeV9saXN0OworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZHhfZW50cnk7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKnRhcmdldF9sZWFmOworCisJcmV0ID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhvc2IsIDEsICZkYXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZHhfbGVhdmVzID0gb2NmczJfZHhfZGlyX2ttYWxsb2NfbGVhdmVzKG9zYi0+c2IsICZudW1fZHhfbGVhdmVzKTsKKwlpZiAoIWR4X2xlYXZlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfY2FsY19keGlfZXhwYW5kX2NyZWRpdHMob3NiLT5zYikpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGRpciwKKwkJCQkgICAgICAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgMSkpKSB7CisJCXJldCA9IC1FRFFVT1Q7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisJZGlkX3F1b3RhID0gMTsKKworCS8qCisJICogV2UgZG8gdGhpcyB1cCBmcm9udCwgYmVmb3JlIHRoZSBhbGxvY2F0aW9uLCBzbyB0aGF0IGEKKwkgKiBmYWlsdXJlIHRvIGFkZCB0aGUgZHhfcm9vdF9iaCB0byB0aGUgam91cm5hbCB3b24ndCByZXN1bHQKKwkgKiB1cyBsb3NpbmcgY2x1c3RlcnMuCisJICovCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGR4X3Jvb3RfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gX19vY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoZGlyLCAwLCBoYW5kbGUsIGRhdGFfYWMsIGR4X2xlYXZlcywKKwkJCQkJIG51bV9keF9sZWF2ZXMsICZpbnNlcnRfYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJLyoKKwkgKiBUcmFuc2ZlciB0aGUgZW50cmllcyBmcm9tIG91ciBkeF9yb290IGludG8gdGhlIGFwcHJvcHJpYXRlCisJICogYmxvY2sKKwkgKi8KKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopIGR4X3Jvb3RfYmgtPmJfZGF0YTsKKwllbnRyeV9saXN0ID0gJmR4X3Jvb3QtPmRyX2VudHJpZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQpOyBpKyspIHsKKwkJZHhfZW50cnkgPSAmZW50cnlfbGlzdC0+ZGVfZW50cmllc1tpXTsKKworCQlqID0gX19vY2ZzMl9keF9kaXJfaGFzaF9pZHgob3NiLAorCQkJCQkgICAgbGUzMl90b19jcHUoZHhfZW50cnktPmR4X21pbm9yX2hhc2gpKTsKKwkJdGFyZ2V0X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKilkeF9sZWF2ZXNbal0tPmJfZGF0YTsKKworCQlvY2ZzMl9keF9kaXJfbGVhZl9pbnNlcnRfdGFpbCh0YXJnZXRfbGVhZiwgZHhfZW50cnkpOworCisJCS8qIEVhY2ggbGVhZiBoYXMgYmVlbiBwYXNzZWQgdG8gdGhlIGpvdXJuYWwgYWxyZWFkeQorCQkgKiB2aWEgX19vY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoKSAqLworCX0KKworCWR4X3Jvb3QtPmRyX2ZsYWdzICY9IH5PQ0ZTMl9EWF9GTEFHX0lOTElORTsKKwltZW1zZXQoJmR4X3Jvb3QtPmRyX2xpc3QsIDAsIG9zYi0+c2ItPnNfYmxvY2tzaXplIC0KKwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2ssIGRyX2xpc3QpKTsKKwlkeF9yb290LT5kcl9saXN0LmxfY291bnQgPQorCQljcHVfdG9fbGUxNihvY2ZzMl9leHRlbnRfcmVjc19wZXJfZHhfcm9vdChvc2ItPnNiKSk7CisKKwkvKiBUaGlzIHNob3VsZCBuZXZlciBmYWlsIGNvbnNpZGVyaW5nIHdlIHN0YXJ0IHdpdGggYW4gZW1wdHkKKwkgKiBkeF9yb290LiAqLworCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZXQsIGRpciwgZHhfcm9vdF9iaCk7CisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgZGlyLCAmZXQsIDAsCisJCQkJICBpbnNlcnRfYmxrbm8sIDEsIDAsIE5VTEwpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKwlkaWRfcXVvdGEgPSAwOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGR4X3Jvb3RfYmgpOworCitvdXRfY29tbWl0OgorCWlmIChyZXQgPCAwICYmIGRpZF9xdW90YSkKKwkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShkaXIsCisJCQkJCSAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoZGlyLT5pX3NiLCAxKSk7CisKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCitvdXQ6CisJaWYgKGRhdGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChkYXRhX2FjKTsKKworCWlmIChkeF9sZWF2ZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9keF9sZWF2ZXM7IGkrKykKKwkJCWJyZWxzZShkeF9sZWF2ZXNbaV0pOworCQlrZnJlZShkeF9sZWF2ZXMpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2lubGluZV9keF9oYXNfc3BhY2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoKQoreworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICplbnRyeV9saXN0OworCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKSBkeF9yb290X2JoLT5iX2RhdGE7CisJZW50cnlfbGlzdCA9ICZkeF9yb290LT5kcl9lbnRyaWVzOworCisJaWYgKGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX251bV91c2VkKSA+PQorCSAgICBsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9jb3VudCkpCisJCXJldHVybiAtRU5PU1BDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcHJlcGFyZV9keF9kaXJfZm9yX2luc2VydChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgaW50IG5hbWVsZW4sCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQoreworCWludCByZXQsIGZyZWVfZHhfcm9vdCA9IDE7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpsZWFmX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKworCXJldCA9IG9jZnMyX3JlYWRfZHhfcm9vdChkaXIsIGRpLCAmZHhfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisJaWYgKGxlMzJfdG9fY3B1KGR4X3Jvb3QtPmRyX251bV9lbnRyaWVzKSA9PSBPQ0ZTMl9EWF9FTlRSSUVTX01BWCkgeworCQlyZXQgPSAtRU5PU1BDOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvY2ZzMl9keF9yb290X2lubGluZShkeF9yb290KSkgeworCQlyZXQgPSBvY2ZzMl9pbmxpbmVfZHhfaGFzX3NwYWNlKGR4X3Jvb3RfYmgpOworCisJCWlmIChyZXQgPT0gMCkKKwkJCWdvdG8gc2VhcmNoX2VsOworCisJCS8qCisJCSAqIFdlIHJhbiBvdXQgb2Ygcm9vbSBpbiB0aGUgcm9vdCBibG9jay4gRXhwYW5kIGl0IHRvCisJCSAqIGFuIGV4dGVudCwgdGhlbiBhbGxvdyBvY2ZzMl9maW5kX2Rpcl9zcGFjZV9keCB0byBkbworCQkgKiB0aGUgcmVzdC4KKwkJICovCisJCXJldCA9IG9jZnMyX2V4cGFuZF9pbmxpbmVfZHhfcm9vdChkaXIsIGR4X3Jvb3RfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qCisJICogSW5zZXJ0IHByZXBhcmF0aW9uIGZvciBhbiBpbmRleGVkIGRpcmVjdG9yeSBpcyBzcGxpdCBpbnRvIHR3bworCSAqIHN0ZXBzLiBUaGUgY2FsbCB0byBmaW5kX2Rpcl9zcGFjZV9keCByZXNlcnZlcyByb29tIGluIHRoZSBpbmRleCBmb3IKKwkgKiBhbiBhZGRpdGlvbmFsIGl0ZW0uIElmIHdlIHJ1biBvdXQgb2Ygc3BhY2UgdGhlcmUsIGl0J3MgYSByZWFsIGVycm9yCisJICogd2UgY2FuJ3QgY29udGludWUgb24uCisJICovCisJcmV0ID0gb2NmczJfZmluZF9kaXJfc3BhY2VfZHgob3NiLCBkaXIsIGRpX2JoLCBkeF9yb290X2JoLCBuYW1lLAorCQkJCSAgICAgIG5hbWVsZW4sIGxvb2t1cCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworc2VhcmNoX2VsOgorCS8qCisJICogTmV4dCwgd2UgbmVlZCB0byBmaW5kIHNwYWNlIGluIHRoZSB1bmluZGV4ZWQgdHJlZS4gVGhpcyBjYWxsCisJICogc2VhcmNoZXMgdXNpbmcgdGhlIGZyZWUgc3BhY2UgbGlua2VkIGxpc3QuIElmIHRoZSB1bmluZGV4ZWQgdHJlZQorCSAqIGxhY2tzIHN1ZmZpY2llbnQgc3BhY2UsIHdlJ2xsIGV4cGFuZCBpdCBiZWxvdy4gVGhlIGV4cGFuc2lvbiBjb2RlCisJICogaXMgc21hcnQgZW5vdWdoIHRvIGFkZCBhbnkgbmV3IGJsb2NrcyB0byB0aGUgZnJlZSBzcGFjZSBsaXN0LgorCSAqLworCXJldCA9IG9jZnMyX3NlYXJjaF9keF9mcmVlX2xpc3QoZGlyLCBkeF9yb290X2JoLCBuYW1lbGVuLCBsb29rdXApOworCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9TUEMpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBEbyB0aGlzIHVwIGhlcmUgLSBvY2ZzMl9leHRlbmRfZGlyIG1pZ2h0IG5lZWQgdGhlIGR4X3Jvb3QgKi8KKwlsb29rdXAtPmRsX2R4X3Jvb3RfYmggPSBkeF9yb290X2JoOworCWZyZWVfZHhfcm9vdCA9IDA7CisKKwlpZiAocmV0ID09IC1FTk9TUEMpIHsKKwkJcmV0ID0gb2NmczJfZXh0ZW5kX2Rpcihvc2IsIGRpciwgZGlfYmgsIDEsIGxvb2t1cCwgJmxlYWZfYmgpOworCisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoKKwkJICogV2UgbWFrZSB0aGUgYXNzdW1wdGlvbiBoZXJlIHRoYXQgbmV3IGxlYWYgYmxvY2tzIGFyZSBhZGRlZAorCQkgKiB0byB0aGUgZnJvbnQgb2Ygb3VyIGZyZWUgbGlzdC4KKwkJICovCisJCWxvb2t1cC0+ZGxfcHJldl9sZWFmX2JoID0gTlVMTDsKKwkJbG9va3VwLT5kbF9sZWFmX2JoID0gbGVhZl9iaDsKKwl9CisKK291dDoKKwlpZiAoZnJlZV9keF9yb290KQorCQlicmVsc2UoZHhfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEdldCBhIGRpcmVjdG9yeSByZWFkeSBmb3IgaW5zZXJ0LiBBbnkgZGlyZWN0b3J5IGFsbG9jYXRpb24gcmVxdWlyZWQKKyAqIGhhcHBlbnMgaGVyZS4gU3VjY2VzcyByZXR1cm5zIHplcm8sIGFuZCBlbm91Z2ggY29udGV4dCBpbiB0aGUgZGlyCisgKiBsb29rdXAgcmVzdWx0IHRoYXQgb2NmczJfYWRkX2VudHJ5KCkgd2lsbCBiZSBhYmxlIGNvbXBsZXRlIHRoZSB0YXNrCisgKiB3aXRoIG1pbmltYWwgcGVyZm9ybWFuY2UgaW1wYWN0LgorICovCiBpbnQgb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAogCQkJCSBjb25zdCBjaGFyICpuYW1lLAogCQkJCSBpbnQgbmFtZWxlbiwKLQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2RlX2JoKQorCQkJCSBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBibG9ja3Nfd2FudGVkID0gMTsKQEAgLTE5ODQsMTQgKzQzNjcsMzQgQEAKIAltbG9nKDAsICJnZXR0aW5nIHJlYWR5IHRvIGluc2VydCBuYW1lbGVuICVkIGludG8gZGlyICVsbHVcbiIsCiAJICAgICBuYW1lbGVuLCAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8pOwogCi0JKnJldF9kZV9iaCA9IE5VTEw7Ci0KIAlpZiAoIW5hbWVsZW4pIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKKwkvKgorCSAqIERvIHRoaXMgdXAgZnJvbnQgdG8gcmVkdWNlIGNvbmZ1c2lvbi4KKwkgKgorCSAqIFRoZSBkaXJlY3RvcnkgbWlnaHQgc3RhcnQgaW5saW5lLCB0aGVuIGJlIHR1cm5lZCBpbnRvIGFuCisJICogaW5kZXhlZCBvbmUsIGluIHdoaWNoIGNhc2Ugd2UnZCBuZWVkIHRvIGhhc2ggZGVlcCBpbnNpZGUKKwkgKiBvY2ZzMl9maW5kX2Rpcl9zcGFjZV9pZCgpLiBTaW5jZQorCSAqIG9jZnMyX3ByZXBhcmVfZHhfZGlyX2Zvcl9pbnNlcnQoKSBhbHNvIG5lZWRzIHRoaXMgaGFzaAorCSAqIGRvbmUsIHRoZXJlIHNlZW1zIG5vIHBvaW50IGluIHNwcmVhZGluZyBvdXQgdGhlIGNhbGxzLiBXZQorCSAqIGNhbiBvcHRpbWl6ZSBhd2F5IHRoZSBjYXNlIHdoZXJlIHRoZSBmaWxlIHN5c3RlbSBkb2Vzbid0CisJICogc3VwcG9ydCBpbmRleGluZy4KKwkgKi8KKwlpZiAob2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYikpCisJCW9jZnMyX2R4X2Rpcl9uYW1lX2hhc2goZGlyLCBuYW1lLCBuYW1lbGVuLCAmbG9va3VwLT5kbF9oaW5mbyk7CisKKwlpZiAob2NmczJfZGlyX2luZGV4ZWQoZGlyKSkgeworCQlyZXQgPSBvY2ZzMl9wcmVwYXJlX2R4X2Rpcl9mb3JfaW5zZXJ0KGRpciwgcGFyZW50X2ZlX2JoLAorCQkJCQkJICAgICAgbmFtZSwgbmFtZWxlbiwgbG9va3VwKTsKKwkJaWYgKHJldCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCiAJaWYgKE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKIAkJcmV0ID0gb2NmczJfZmluZF9kaXJfc3BhY2VfaWQoZGlyLCBwYXJlbnRfZmVfYmgsIG5hbWUsCiAJCQkJCSAgICAgIG5hbWVsZW4sICZiaCwgJmJsb2Nrc193YW50ZWQpOwpAQCAtMjAxMCw3ICs0NDEzLDcgQEAKIAkJQlVHX09OKGJoKTsKIAogCQlyZXQgPSBvY2ZzMl9leHRlbmRfZGlyKG9zYiwgZGlyLCBwYXJlbnRfZmVfYmgsIGJsb2Nrc193YW50ZWQsCi0JCQkJICAgICAgICZiaCk7CisJCQkJICAgICAgIGxvb2t1cCwgJmJoKTsKIAkJaWYgKHJldCkgewogCQkJaWYgKHJldCAhPSAtRU5PU1BDKQogCQkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTIwMjAsOSArNDQyMywxNTQgQEAKIAkJQlVHX09OKCFiaCk7CiAJfQogCi0JKnJldF9kZV9iaCA9IGJoOworCWxvb2t1cC0+ZGxfbGVhZl9iaCA9IGJoOwogCWJoID0gTlVMTDsKIG91dDoKIAlicmVsc2UoYmgpOwogCXJldHVybiByZXQ7CiB9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX3JlbW92ZV9pbmRleChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IGlub2RlICpkeF9hbGxvY19pbm9kZSA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9hbGxvY19iaCA9IE5VTEw7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwl1NjQgYmxrOworCXUxNiBiaXQ7CisJdTY0IGJnX2Jsa25vOworCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKSBkeF9yb290X2JoLT5iX2RhdGE7CisKKwlkeF9hbGxvY19pbm9kZSA9IG9jZnMyX2dldF9zeXN0ZW1fZmlsZV9pbm9kZShvc2IsCisJCQkJCUVYVEVOVF9BTExPQ19TWVNURU1fSU5PREUsCisJCQkJCWxlMTZfdG9fY3B1KGR4X3Jvb3QtPmRyX3N1YmFsbG9jX3Nsb3QpKTsKKwlpZiAoIWR4X2FsbG9jX2lub2RlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCW11dGV4X2xvY2soJmR4X2FsbG9jX2lub2RlLT5pX211dGV4KTsKKworCXJldCA9IG9jZnMyX2lub2RlX2xvY2soZHhfYWxsb2NfaW5vZGUsICZkeF9hbGxvY19iaCwgMSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X211dGV4OworCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfRFhfUk9PVF9SRU1PVkVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBkaXIsIGRpX2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCU9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICY9IH5PQ0ZTMl9JTkRFWEVEX0RJUl9GTDsKKwlkaS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyk7CisJZGktPmlfZHhfcm9vdCA9IGNwdV90b19sZTY0KDBVTEwpOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGRpX2JoKTsKKworCWJsayA9IGxlNjRfdG9fY3B1KGR4X3Jvb3QtPmRyX2Jsa25vKTsKKwliaXQgPSBsZTE2X3RvX2NwdShkeF9yb290LT5kcl9zdWJhbGxvY19iaXQpOworCWJnX2Jsa25vID0gb2NmczJfd2hpY2hfc3ViYWxsb2NfZ3JvdXAoYmxrLCBiaXQpOworCXJldCA9IG9jZnMyX2ZyZWVfc3ViYWxsb2NfYml0cyhoYW5kbGUsIGR4X2FsbG9jX2lub2RlLCBkeF9hbGxvY19iaCwKKwkJCQkgICAgICAgYml0LCBiZ19ibGtubywgMSk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKK291dF91bmxvY2s6CisJb2NmczJfaW5vZGVfdW5sb2NrKGR4X2FsbG9jX2lub2RlLCAxKTsKKworb3V0X211dGV4OgorCW11dGV4X3VubG9jaygmZHhfYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOworCWJyZWxzZShkeF9hbGxvY19iaCk7CitvdXQ6CisJaXB1dChkeF9hbGxvY19pbm9kZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IG9jZnMyX2R4X2Rpcl90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCB1bmluaXRpYWxpemVkX3ZhcihjbGVuKTsKKwl1MzIgbWFqb3JfaGFzaCA9IFVJTlRfTUFYLCBwX2Nwb3MsIHVuaW5pdGlhbGl6ZWRfdmFyKGNwb3MpOworCXU2NCB1bmluaXRpYWxpemVkX3ZhcihibGtubyk7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisKKwlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmZGVhbGxvYyk7CisKKwlpZiAoIW9jZnMyX2Rpcl9pbmRleGVkKGRpcikpCisJCXJldHVybiAwOworCisJcmV0ID0gb2NmczJfcmVhZF9keF9yb290KGRpciwgZGksICZkeF9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisKKwlpZiAob2NmczJfZHhfcm9vdF9pbmxpbmUoZHhfcm9vdCkpCisJCWdvdG8gcmVtb3ZlX2luZGV4OworCisJb2NmczJfaW5pdF9keF9yb290X2V4dGVudF90cmVlKCZldCwgZGlyLCBkeF9yb290X2JoKTsKKworCS8qIFhYWDogV2hhdCBpZiBkcl9jbHVzdGVycyBpcyB0b28gbGFyZ2U/ICovCisJd2hpbGUgKGxlMzJfdG9fY3B1KGR4X3Jvb3QtPmRyX2NsdXN0ZXJzKSkgeworCQlyZXQgPSBvY2ZzMl9keF9kaXJfbG9va3VwX3JlYyhkaXIsICZkeF9yb290LT5kcl9saXN0LAorCQkJCQkgICAgICBtYWpvcl9oYXNoLCAmY3BvcywgJmJsa25vLCAmY2xlbik7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcF9jcG9zID0gb2NmczJfYmxvY2tzX3RvX2NsdXN0ZXJzKGRpci0+aV9zYiwgYmxrbm8pOworCisJCXJldCA9IG9jZnMyX3JlbW92ZV9idHJlZV9yYW5nZShkaXIsICZldCwgY3BvcywgcF9jcG9zLCBjbGVuLAorCQkJCQkgICAgICAgJmRlYWxsb2MpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChjcG9zID09IDApCisJCQlicmVhazsKKworCQltYWpvcl9oYXNoID0gY3BvcyAtIDE7CisJfQorCityZW1vdmVfaW5kZXg6CisJcmV0ID0gb2NmczJfZHhfZGlyX3JlbW92ZV9pbmRleChkaXIsIGRpX2JoLCBkeF9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoZGlyLCBkeF9yb290X2JoKTsKK291dDoKKwlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAxKTsKKwlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmZGVhbGxvYyk7CisKKwlicmVsc2UoZHhfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5oIGIvZnMvb2NmczIvZGlyLmgKaW5kZXggYzUxMWUyZS4uZTY4M2YzZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmgKKysrIGIvZnMvb2NmczIvZGlyLmgKQEAgLTI2LDQ0ICsyNiw3MCBAQAogI2lmbmRlZiBPQ0ZTMl9ESVJfSAogI2RlZmluZSBPQ0ZTMl9ESVJfSAogCi1zdHJ1Y3QgYnVmZmVyX2hlYWQgKm9jZnMyX2ZpbmRfZW50cnkoY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgIGludCBuYW1lbGVuLAotCQkJCSAgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICoqcmVzX2Rpcik7CitzdHJ1Y3Qgb2NmczJfZHhfaGluZm8geworCXUzMgltYWpvcl9oYXNoOworCXUzMgltaW5vcl9oYXNoOworfTsKKworc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IHsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJCSpkbF9sZWFmX2JoOwkvKiBVbmluZGV4ZWQgbGVhZgorCQkJCQkJCSAqIGJsb2NrICovCisJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeQkJKmRsX2VudHJ5OwkvKiBUYXJnZXQgZGlyZW50IGluCisJCQkJCQkJICogdW5pbmRleGVkIGxlYWYgKi8KKworCXN0cnVjdCBidWZmZXJfaGVhZAkJKmRsX2R4X3Jvb3RfYmg7CS8qIFJvb3Qgb2YgaW5kZXhlZAorCQkJCQkJCSAqIHRyZWUgKi8KKworCXN0cnVjdCBidWZmZXJfaGVhZAkJKmRsX2R4X2xlYWZfYmg7CS8qIEluZGV4ZWQgbGVhZiBibG9jayAqLworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeQkJKmRsX2R4X2VudHJ5OwkvKiBUYXJnZXQgZHhfZW50cnkgaW4KKwkJCQkJCQkgKiBpbmRleGVkIGxlYWYgKi8KKwlzdHJ1Y3Qgb2NmczJfZHhfaGluZm8JCWRsX2hpbmZvOwkvKiBOYW1lIGhhc2ggcmVzdWx0cyAqLworCisJc3RydWN0IGJ1ZmZlcl9oZWFkCQkqZGxfcHJldl9sZWFmX2JoOy8qIFByZXZpb3VzIGVudHJ5IGluCisJCQkJCQkJICAqIGRpciBmcmVlIHNwYWNlCisJCQkJCQkJICAqIGxpc3QuIE5VTEwgaWYKKwkJCQkJCQkgICogcHJldmlvdXMgZW50cnkgaXMKKwkJCQkJCQkgICogZHggcm9vdCBibG9jay4gKi8KK307CisKK3ZvaWQgb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdChzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcyk7CisKK2ludCBvY2ZzMl9maW5kX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKTsKIGludCBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGVfZGVsLAotCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcyk7CiBpbnQgX19vY2ZzMl9hZGRfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwKIAkJICAgICAgc3RydWN0IGlub2RlICpkaXIsCiAJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAogCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYmxrbm8sCiAJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAotCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmluc2VydF9iaCk7CisJCSAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKTsKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FkZF9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJsa25vLAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCi0JCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmluc2VydF9iaCkKKwkJCQkgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQogewogCXJldHVybiBfX29jZnMyX2FkZF9lbnRyeShoYW5kbGUsIGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUsCiAJCQkJIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCQkgaW5vZGUsIGJsa25vLCBwYXJlbnRfZmVfYmgsIGluc2VydF9iaCk7CisJCQkJIGlub2RlLCBibGtubywgcGFyZW50X2ZlX2JoLCBsb29rdXApOwogfQogaW50IG9jZnMyX3VwZGF0ZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGVfYmgsIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlLAorCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19lbnRyeV9pbm9kZSk7CiAKIGludCBvY2ZzMl9jaGVja19kaXJfZm9yX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgIGludCBuYW1lbGVuKTsKIGludCBvY2ZzMl9lbXB0eV9kaXIoc3RydWN0IGlub2RlICppbm9kZSk7CisKIGludCBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2soY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgaW50IG5hbWVsZW4sCiAJCQkgICAgIHU2NCAqYmxrbm8sCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmRpcmVudF9iaCwKLQkJCSAgICAgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKmRpcmVudCk7CisJCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzKTsKIGludCBvY2ZzMl9sb29rdXBfaW5vX2Zyb21fbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgICBpbnQgbmFtZWxlbiwgdTY0ICpibGtubyk7CiBpbnQgb2NmczJfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcik7CkBAIC03NCwxNCArMTAwLDE3IEBACiAJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAogCQkJCSBjb25zdCBjaGFyICpuYW1lLAogCQkJCSBpbnQgbmFtZWxlbiwKLQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2RlX2JoKTsKKwkJCQkgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApOwogc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQ7CiBpbnQgb2NmczJfZmlsbF9uZXdfZGlyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCi0JCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyk7CisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKTsKKworaW50IG9jZnMyX2R4X2Rpcl90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCk7CiAKIHN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqb2NmczJfZGlyX3RyYWlsZXJfZnJvbV9zaXplKGludCBibG9ja3NpemUsCiAJCQkJCQkJICAgIHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oIGIvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oCmluZGV4IGJiNTM3MTQuLjAxMDJiZTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1jb21tb24uaAorKysgYi9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmgKQEAgLTUyLDE2ICs1MiwxMiBAQAogZW51bSBkbG1fbWxlX3R5cGUgewogCURMTV9NTEVfQkxPQ0ssCiAJRExNX01MRV9NQVNURVIsCi0JRExNX01MRV9NSUdSQVRJT04KLX07Ci0KLXN0cnVjdCBkbG1fbG9ja19uYW1lIHsKLQl1OCBsZW47Ci0JdTggbmFtZVtETE1fTE9DS0lEX05BTUVfTUFYXTsKKwlETE1fTUxFX01JR1JBVElPTiwKKwlETE1fTUxFX05VTV9UWVBFUwogfTsKIAogc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlIG1hc3Rlcl9oYXNoX25vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCBoYl9ldmVudHM7CiAJc3RydWN0IGRsbV9jdHh0ICpkbG07CiAJc3BpbmxvY2tfdCBzcGlubG9jazsKQEAgLTc4LDEwICs3NCwxMCBAQAogCWVudW0gZGxtX21sZV90eXBlIHR5cGU7CiAJc3RydWN0IG8yaGJfY2FsbGJhY2tfZnVuYyBtbGVfaGJfdXA7CiAJc3RydWN0IG8yaGJfY2FsbGJhY2tfZnVuYyBtbGVfaGJfZG93bjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwotCQlzdHJ1Y3QgZGxtX2xvY2tfbmFtZSBuYW1lOwotCX0gdTsKKwlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKm1sZXJlczsKKwl1bnNpZ25lZCBjaGFyIG1uYW1lW0RMTV9MT0NLSURfTkFNRV9NQVhdOworCXVuc2lnbmVkIGludCBtbmFtZWxlbjsKKwl1bnNpZ25lZCBpbnQgbW5hbWVoYXNoOwogfTsKIAogZW51bSBkbG1fYXN0X3R5cGUgewpAQCAtMTUxLDEzICsxNDcsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHJlY292ZXJ5X21hcFtCSVRTX1RPX0xPTkdTKE8yTk1fTUFYX05PREVTKV07CiAJc3RydWN0IGRsbV9yZWNvdmVyeV9jdHh0IHJlY287CiAJc3BpbmxvY2tfdCBtYXN0ZXJfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG1hc3Rlcl9saXN0OworCXN0cnVjdCBobGlzdF9oZWFkICoqbWFzdGVyX2hhc2g7CiAJc3RydWN0IGxpc3RfaGVhZCBtbGVfaGJfZXZlbnRzOwogCiAJLyogdGhlc2UgZ2l2ZSBhIHJlYWxseSB2YWd1ZSBpZGVhIG9mIHRoZSBzeXN0ZW0gbG9hZCAqLwotCWF0b21pY190IGxvY2FsX3Jlc291cmNlczsKLQlhdG9taWNfdCByZW1vdGVfcmVzb3VyY2VzOwotCWF0b21pY190IHVua25vd25fcmVzb3VyY2VzOworCWF0b21pY190IG1sZV90b3RfY291bnRbRExNX01MRV9OVU1fVFlQRVNdOworCWF0b21pY190IG1sZV9jdXJfY291bnRbRExNX01MRV9OVU1fVFlQRVNdOworCWF0b21pY190IHJlc190b3RfY291bnQ7CisJYXRvbWljX3QgcmVzX2N1cl9jb3VudDsKIAogCXN0cnVjdCBkbG1fZGVidWdfY3R4dCAqZGxtX2RlYnVnX2N0eHQ7CiAJc3RydWN0IGRlbnRyeSAqZGxtX2RlYnVnZnNfc3Vicm9vdDsKQEAgLTE5NSw2ICsxOTIsMTMgQEAKIAlyZXR1cm4gZGxtLT5sb2NrcmVzX2hhc2hbKGkgLyBETE1fQlVDS0VUU19QRVJfUEFHRSkgJSBETE1fSEFTSF9QQUdFU10gKyAoaSAlIERMTV9CVUNLRVRTX1BFUl9QQUdFKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfaGVhZCAqZGxtX21hc3Rlcl9oYXNoKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAorCQkJCQkJIHVuc2lnbmVkIGkpCit7CisJcmV0dXJuIGRsbS0+bWFzdGVyX2hhc2hbKGkgLyBETE1fQlVDS0VUU19QRVJfUEFHRSkgJSBETE1fSEFTSF9QQUdFU10gKworCQkJKGkgJSBETE1fQlVDS0VUU19QRVJfUEFHRSk7Cit9CisKIC8qIHRoZXNlIGtldmVudGQgd29yayBxdWV1ZSBpdGVtcyBhcmUgZm9yIGxlc3MtZnJlcXVlbnRseQogICogY2FsbGVkIGZ1bmN0aW9ucyB0aGF0IGNhbm5vdCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSB0aGUKICAqIG5ldCBtZXNzYWdlIGhhbmRsZXJzIGZvciBzb21lIHJlYXNvbiwgdXN1YWxseSBiZWNhdXNlCkBAIC04NDgsOSArODUyLDcgQEAKIAkJCQkJICAgICAgdW5zaWduZWQgaW50IGxlbik7CiAKIGludCBkbG1faXNfaG9zdF9kb3duKGludCBlcnJubyk7Ci12b2lkIGRsbV9jaGFuZ2VfbG9ja3Jlc19vd25lcihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKLQkJCSAgICAgIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzLAotCQkJICAgICAgdTggb3duZXIpOworCiBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKiBkbG1fZ2V0X2xvY2tfcmVzb3VyY2Uoc3RydWN0IGRsbV9jdHh0ICpkbG0sCiAJCQkJCQkgY29uc3QgY2hhciAqbG9ja2lkLAogCQkJCQkJIGludCBuYW1lbGVuLApAQCAtMTAwOCw2ICsxMDEwLDkgQEAKIAkJCQkJICBETE1fTE9DS19SRVNfTUlHUkFUSU5HKSk7CiB9CiAKK3ZvaWQgX19kbG1fdW5saW5rX21sZShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlKTsKK3ZvaWQgX19kbG1faW5zZXJ0X21sZShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlKTsKKwogLyogY3JlYXRlL2Rlc3Ryb3kgc2xhYiBjYWNoZXMgKi8KIGludCBkbG1faW5pdF9tYXN0ZXJfY2FjaGVzKHZvaWQpOwogdm9pZCBkbG1fZGVzdHJveV9tYXN0ZXJfY2FjaGVzKHZvaWQpOwpAQCAtMTExMCw2ICsxMTE1LDIzIEBACiAJcmV0dXJuIGJpdDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRsbV9zZXRfbG9ja3Jlc19vd25lcihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKKwkJCQkJIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzLAorCQkJCQkgdTggb3duZXIpCit7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZyZXMtPnNwaW5sb2NrKTsKIAorCXJlcy0+b3duZXIgPSBvd25lcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRsbV9jaGFuZ2VfbG9ja3Jlc19vd25lcihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKKwkJCQkJICAgIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzLAorCQkJCQkgICAgdTggb3duZXIpCit7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZyZXMtPnNwaW5sb2NrKTsKKworCWlmIChvd25lciAhPSByZXMtPm93bmVyKQorCQlkbG1fc2V0X2xvY2tyZXNfb3duZXIoZGxtLCByZXMsIG93bmVyKTsKK30KIAogI2VuZGlmIC8qIERMTUNPTU1PTl9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYyBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCmluZGV4IGIzMmY2MGEuLmRmNTJmNzAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCkBAIC0yODcsMTggKzI4Nyw4IEBACiBzdGF0aWMgaW50IGR1bXBfbWxlKHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSwgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCWludCBvdXQgPSAwOwotCXVuc2lnbmVkIGludCBuYW1lbGVuOwotCWNvbnN0IGNoYXIgKm5hbWU7CiAJY2hhciAqbWxlX3R5cGU7CiAKLQlpZiAobWxlLT50eXBlICE9IERMTV9NTEVfTUFTVEVSKSB7Ci0JCW5hbWVsZW4gPSBtbGUtPnUubmFtZS5sZW47Ci0JCW5hbWUgPSBtbGUtPnUubmFtZS5uYW1lOwotCX0gZWxzZSB7Ci0JCW5hbWVsZW4gPSBtbGUtPnUucmVzLT5sb2NrbmFtZS5sZW47Ci0JCW5hbWUgPSBtbGUtPnUucmVzLT5sb2NrbmFtZS5uYW1lOwotCX0KLQogCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9CTE9DSykKIAkJbWxlX3R5cGUgPSAiQkxLIjsKIAllbHNlIGlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9NQVNURVIpCkBAIC0zMDYsNyArMjk2LDcgQEAKIAllbHNlCiAJCW1sZV90eXBlID0gIk1JRyI7CiAKLQlvdXQgKz0gc3RyaW5naWZ5X2xvY2tuYW1lKG5hbWUsIG5hbWVsZW4sIGJ1ZiArIG91dCwgbGVuIC0gb3V0KTsKKwlvdXQgKz0gc3RyaW5naWZ5X2xvY2tuYW1lKG1sZS0+bW5hbWUsIG1sZS0+bW5hbWVsZW4sIGJ1ZiArIG91dCwgbGVuIC0gb3V0KTsKIAlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCiAJCQkiXHQlM3NcdG1hcz0lM3VcdG5ldz0lM3VcdGV2dD0lMWRcdHVzZT0lMWRcdHJlZj0lM2RcbiIsCiAJCQltbGVfdHlwZSwgbWxlLT5tYXN0ZXIsIG1sZS0+bmV3X21hc3RlciwKQEAgLTUwMSwyMyArNDkxLDMzIEBACiBzdGF0aWMgaW50IGRlYnVnX21sZV9wcmludChzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRlYnVnX2J1ZmZlciAqZGIpCiB7CiAJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlOwotCWludCBvdXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGhsaXN0X25vZGUgKmxpc3Q7CisJaW50IGksIG91dCA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbCA9IDAsIGxvbmdlc3QgPSAwLCBia3RjbnQ7CiAKIAlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKIAkJCSJEdW1waW5nIE1MRXMgZm9yIERvbWFpbjogJXNcbiIsIGRsbS0+bmFtZSk7CiAKIAlzcGluX2xvY2soJmRsbS0+bWFzdGVyX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobWxlLCAmZGxtLT5tYXN0ZXJfbGlzdCwgbGlzdCkgewotCQkrK3RvdGFsOwotCQlpZiAoZGItPmxlbiAtIG91dCA8IDIwMCkKLQkJCWNvbnRpbnVlOwotCQlvdXQgKz0gZHVtcF9tbGUobWxlLCBkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgRExNX0hBU0hfQlVDS0VUUzsgaSsrKSB7CisJCWJ1Y2tldCA9IGRsbV9tYXN0ZXJfaGFzaChkbG0sIGkpOworCQlobGlzdF9mb3JfZWFjaChsaXN0LCBidWNrZXQpIHsKKwkJCW1sZSA9IGhsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnksCisJCQkJCSAgbWFzdGVyX2hhc2hfbm9kZSk7CisJCQkrK3RvdGFsOworCQkJKytia3RjbnQ7CisJCQlpZiAoZGItPmxlbiAtIG91dCA8IDIwMCkKKwkJCQljb250aW51ZTsKKwkJCW91dCArPSBkdW1wX21sZShtbGUsIGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQpOworCQl9CisJCWxvbmdlc3QgPSBtYXgobG9uZ2VzdCwgYmt0Y250KTsKKwkJYmt0Y250ID0gMDsKIAl9CiAJc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOwogCiAJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCi0JCQkiVG90YWwgb24gbGlzdDogJWxkXG4iLCB0b3RhbCk7CisJCQkiVG90YWw6ICVsZCwgTG9uZ2VzdDogJWxkXG4iLCB0b3RhbCwgbG9uZ2VzdCk7CiAJcmV0dXJuIG91dDsKIH0KIApAQCAtNzU2LDEyICs3NTYsOCBAQAogCWludCBvdXQgPSAwOwogCXN0cnVjdCBkbG1fcmVjb19ub2RlX2RhdGEgKm5vZGU7CiAJY2hhciAqc3RhdGU7Ci0JaW50IGxyZXMsIHJyZXMsIHVyZXMsIHRyZXM7Ci0KLQlscmVzID0gYXRvbWljX3JlYWQoJmRsbS0+bG9jYWxfcmVzb3VyY2VzKTsKLQlycmVzID0gYXRvbWljX3JlYWQoJmRsbS0+cmVtb3RlX3Jlc291cmNlcyk7Ci0JdXJlcyA9IGF0b21pY19yZWFkKCZkbG0tPnVua25vd25fcmVzb3VyY2VzKTsKLQl0cmVzID0gbHJlcyArIHJyZXMgKyB1cmVzOworCWludCBjdXJfbWxlcyA9IDAsIHRvdF9tbGVzID0gMDsKKwlpbnQgaTsKIAogCXNwaW5fbG9jaygmZGxtLT5zcGlubG9jayk7CiAKQEAgLTgwNCwyMSArODAwLDQ4IEBACiAJCQkJIGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQpOwogCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LCAiXG4iKTsKIAotCS8qIE1hc3RlcmVkIFJlc291cmNlcyBUb3RhbDogeHh4ICBMb2NhbGx5OiB4eHggIFJlbW90ZWx5OiAuLi4gKi8KKwkvKiBMb2NrIFJlc291cmNlczogeHh4ICh4eHgpICovCiAJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCi0JCQkiTWFzdGVyZWQgUmVzb3VyY2VzIFRvdGFsOiAlZCAgTG9jYWxseTogJWQgICIKLQkJCSJSZW1vdGVseTogJWQgIFVua25vd246ICVkXG4iLAotCQkJdHJlcywgbHJlcywgcnJlcywgdXJlcyk7CisJCQkiTG9jayBSZXNvdXJjZXM6ICVkICglZClcbiIsCisJCQlhdG9taWNfcmVhZCgmZGxtLT5yZXNfY3VyX2NvdW50KSwKKwkJCWF0b21pY19yZWFkKCZkbG0tPnJlc190b3RfY291bnQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBETE1fTUxFX05VTV9UWVBFUzsgKytpKQorCQl0b3RfbWxlcyArPSBhdG9taWNfcmVhZCgmZGxtLT5tbGVfdG90X2NvdW50W2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBETE1fTUxFX05VTV9UWVBFUzsgKytpKQorCQljdXJfbWxlcyArPSBhdG9taWNfcmVhZCgmZGxtLT5tbGVfY3VyX2NvdW50W2ldKTsKKworCS8qIE1MRXM6IHh4eCAoeHh4KSAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIk1MRXM6ICVkICglZClcbiIsIGN1cl9tbGVzLCB0b3RfbWxlcyk7CisKKwkvKiAgQmxvY2tpbmc6IHh4eCAoeHh4KSAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIiAgQmxvY2tpbmc6ICVkICglZClcbiIsCisJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfY3VyX2NvdW50W0RMTV9NTEVfQkxPQ0tdKSwKKwkJCWF0b21pY19yZWFkKCZkbG0tPm1sZV90b3RfY291bnRbRExNX01MRV9CTE9DS10pKTsKKworCS8qICBNYXN0ZXJ5OiB4eHggKHh4eCkgKi8KKwlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwkJCSIgIE1hc3Rlcnk6ICVkICglZClcbiIsCisJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfY3VyX2NvdW50W0RMTV9NTEVfTUFTVEVSXSksCisJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfdG90X2NvdW50W0RMTV9NTEVfTUFTVEVSXSkpOworCisJLyogIE1pZ3JhdGlvbjogeHh4ICh4eHgpICovCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJCQkiICBNaWdyYXRpb246ICVkICglZClcbiIsCisJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfY3VyX2NvdW50W0RMTV9NTEVfTUlHUkFUSU9OXSksCisJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfdG90X2NvdW50W0RMTV9NTEVfTUlHUkFUSU9OXSkpOwogCiAJLyogTGlzdHM6IERpcnR5PUVtcHR5ICBQdXJnZT1JblVzZSAgUGVuZGluZ0FTVHM9RW1wdHkgIC4uLiAqLwogCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAogCQkJIkxpc3RzOiBEaXJ0eT0lcyAgUHVyZ2U9JXMgIFBlbmRpbmdBU1RzPSVzICAiCi0JCQkiUGVuZGluZ0JBU1RzPSVzICBNYXN0ZXI9JXNcbiIsCisJCQkiUGVuZGluZ0JBU1RzPSVzXG4iLAogCQkJKGxpc3RfZW1wdHkoJmRsbS0+ZGlydHlfbGlzdCkgPyAiRW1wdHkiIDogIkluVXNlIiksCiAJCQkobGlzdF9lbXB0eSgmZGxtLT5wdXJnZV9saXN0KSA/ICJFbXB0eSIgOiAiSW5Vc2UiKSwKIAkJCShsaXN0X2VtcHR5KCZkbG0tPnBlbmRpbmdfYXN0cykgPyAiRW1wdHkiIDogIkluVXNlIiksCi0JCQkobGlzdF9lbXB0eSgmZGxtLT5wZW5kaW5nX2Jhc3RzKSA/ICJFbXB0eSIgOiAiSW5Vc2UiKSwKLQkJCShsaXN0X2VtcHR5KCZkbG0tPm1hc3Rlcl9saXN0KSA/ICJFbXB0eSIgOiAiSW5Vc2UiKSk7CisJCQkobGlzdF9lbXB0eSgmZGxtLT5wZW5kaW5nX2Jhc3RzKSA/ICJFbXB0eSIgOiAiSW5Vc2UiKSk7CiAKIAkvKiBQdXJnZSBDb3VudDogeHh4ICBSZWZzOiB4eHggKi8KIAlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCBkOGQ1NzhmLi40ZDllNmIyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC0zMDQsNiArMzA0LDkgQEAKIAlpZiAoZGxtLT5sb2NrcmVzX2hhc2gpCiAJCWRsbV9mcmVlX3BhZ2V2ZWMoKHZvaWQgKiopZGxtLT5sb2NrcmVzX2hhc2gsIERMTV9IQVNIX1BBR0VTKTsKIAorCWlmIChkbG0tPm1hc3Rlcl9oYXNoKQorCQlkbG1fZnJlZV9wYWdldmVjKCh2b2lkICoqKWRsbS0+bWFzdGVyX2hhc2gsIERMTV9IQVNIX1BBR0VTKTsKKwogCWlmIChkbG0tPm5hbWUpCiAJCWtmcmVlKGRsbS0+bmFtZSk7CiAKQEAgLTE1MzQsMTIgKzE1MzcsMjcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRExNX0hBU0hfQlVDS0VUUzsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoZGxtX2xvY2tyZXNfaGFzaChkbG0sIGkpKTsKIAorCWRsbS0+bWFzdGVyX2hhc2ggPSAoc3RydWN0IGhsaXN0X2hlYWQgKiopCisJCQkJZGxtX2FsbG9jX3BhZ2V2ZWMoRExNX0hBU0hfUEFHRVMpOworCWlmICghZGxtLT5tYXN0ZXJfaGFzaCkgeworCQltbG9nX2Vycm5vKC1FTk9NRU0pOworCQlkbG1fZnJlZV9wYWdldmVjKCh2b2lkICoqKWRsbS0+bG9ja3Jlc19oYXNoLCBETE1fSEFTSF9QQUdFUyk7CisJCWtmcmVlKGRsbS0+bmFtZSk7CisJCWtmcmVlKGRsbSk7CisJCWRsbSA9IE5VTEw7CisJCWdvdG8gbGVhdmU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IERMTV9IQVNIX0JVQ0tFVFM7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKGRsbV9tYXN0ZXJfaGFzaChkbG0sIGkpKTsKKwogCXN0cmNweShkbG0tPm5hbWUsIGRvbWFpbik7CiAJZGxtLT5rZXkgPSBrZXk7CiAJZGxtLT5ub2RlX251bSA9IG8ybm1fdGhpc19ub2RlKCk7CiAKIAlyZXQgPSBkbG1fY3JlYXRlX2RlYnVnZnNfc3Vicm9vdChkbG0pOwogCWlmIChyZXQgPCAwKSB7CisJCWRsbV9mcmVlX3BhZ2V2ZWMoKHZvaWQgKiopZGxtLT5tYXN0ZXJfaGFzaCwgRExNX0hBU0hfUEFHRVMpOwogCQlkbG1fZnJlZV9wYWdldmVjKCh2b2lkICoqKWRsbS0+bG9ja3Jlc19oYXNoLCBETE1fSEFTSF9QQUdFUyk7CiAJCWtmcmVlKGRsbS0+bmFtZSk7CiAJCWtmcmVlKGRsbSk7CkBAIC0xNTc5LDcgKzE1OTcsNiBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRsbS0+cmVjby5ldmVudCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGxtLT5hc3Rfd3EpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRsbS0+bWlncmF0aW9uX3dxKTsKLQlJTklUX0xJU1RfSEVBRCgmZGxtLT5tYXN0ZXJfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRsbS0+bWxlX2hiX2V2ZW50cyk7CiAKIAlkbG0tPmpvaW5pbmdfbm9kZSA9IERMTV9MT0NLX1JFU19PV05FUl9VTktOT1dOOwpAQCAtMTU4Nyw5ICsxNjA0LDEzIEBACiAKIAlkbG0tPnJlY28ubmV3X21hc3RlciA9IE8yTk1fSU5WQUxJRF9OT0RFX05VTTsKIAlkbG0tPnJlY28uZGVhZF9ub2RlID0gTzJOTV9JTlZBTElEX05PREVfTlVNOwotCWF0b21pY19zZXQoJmRsbS0+bG9jYWxfcmVzb3VyY2VzLCAwKTsKLQlhdG9taWNfc2V0KCZkbG0tPnJlbW90ZV9yZXNvdXJjZXMsIDApOwotCWF0b21pY19zZXQoJmRsbS0+dW5rbm93bl9yZXNvdXJjZXMsIDApOworCisJYXRvbWljX3NldCgmZGxtLT5yZXNfdG90X2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkbG0tPnJlc19jdXJfY291bnQsIDApOworCWZvciAoaSA9IDA7IGkgPCBETE1fTUxFX05VTV9UWVBFUzsgKytpKSB7CisJCWF0b21pY19zZXQoJmRsbS0+bWxlX3RvdF9jb3VudFtpXSwgMCk7CisJCWF0b21pY19zZXQoJmRsbS0+bWxlX2N1cl9jb3VudFtpXSwgMCk7CisJfQogCiAJc3Bpbl9sb2NrX2luaXQoJmRsbS0+d29ya19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZGxtLT53b3JrX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCmluZGV4IDBhMjgxMzkuLmY4YjY1M2YgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKQEAgLTczLDIyICs3MywxMyBAQAogCQkJCWNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJdW5zaWduZWQgaW50IG5hbWVsZW4pCiB7Ci0Jc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7Ci0KIAlpZiAoZGxtICE9IG1sZS0+ZGxtKQogCQlyZXR1cm4gMDsKIAotCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9CTE9DSyB8fAotCSAgICBtbGUtPnR5cGUgPT0gRExNX01MRV9NSUdSQVRJT04pIHsKLQkJaWYgKG5hbWVsZW4gIT0gbWxlLT51Lm5hbWUubGVuIHx8Ci0gICAgCSAgICAJICAgIG1lbWNtcChuYW1lLCBtbGUtPnUubmFtZS5uYW1lLCBuYW1lbGVuKSE9MCkKLQkJCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXJlcyA9IG1sZS0+dS5yZXM7Ci0JCWlmIChuYW1lbGVuICE9IHJlcy0+bG9ja25hbWUubGVuIHx8Ci0JCSAgICBtZW1jbXAocmVzLT5sb2NrbmFtZS5uYW1lLCBuYW1lLCBuYW1lbGVuKSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JfQorCWlmIChuYW1lbGVuICE9IG1sZS0+bW5hbWVsZW4gfHwKKwkgICAgbWVtY21wKG5hbWUsIG1sZS0+bW5hbWUsIG5hbWVsZW4pICE9IDApCisJCXJldHVybiAwOworCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI4Myw3ICsyNzQsNyBAQAogCiAJbWxlLT5kbG0gPSBkbG07CiAJbWxlLT50eXBlID0gdHlwZTsKLQlJTklUX0xJU1RfSEVBRCgmbWxlLT5saXN0KTsKKwlJTklUX0hMSVNUX05PREUoJm1sZS0+bWFzdGVyX2hhc2hfbm9kZSk7CiAJSU5JVF9MSVNUX0hFQUQoJm1sZS0+aGJfZXZlbnRzKTsKIAltZW1zZXQobWxlLT5tYXliZV9tYXAsIDAsIHNpemVvZihtbGUtPm1heWJlX21hcCkpOwogCXNwaW5fbG9ja19pbml0KCZtbGUtPnNwaW5sb2NrKTsKQEAgLTI5NSwxOSArMjg2LDI3IEBACiAJbWxlLT5uZXdfbWFzdGVyID0gTzJOTV9NQVhfTk9ERVM7CiAJbWxlLT5pbnVzZSA9IDA7CiAKKwlCVUdfT04obWxlLT50eXBlICE9IERMTV9NTEVfQkxPQ0sgJiYKKwkgICAgICAgbWxlLT50eXBlICE9IERMTV9NTEVfTUFTVEVSICYmCisJICAgICAgIG1sZS0+dHlwZSAhPSBETE1fTUxFX01JR1JBVElPTik7CisKIAlpZiAobWxlLT50eXBlID09IERMTV9NTEVfTUFTVEVSKSB7CiAJCUJVR19PTighcmVzKTsKLQkJbWxlLT51LnJlcyA9IHJlczsKLQl9IGVsc2UgaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX0JMT0NLKSB7CisJCW1sZS0+bWxlcmVzID0gcmVzOworCQltZW1jcHkobWxlLT5tbmFtZSwgcmVzLT5sb2NrbmFtZS5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbik7CisJCW1sZS0+bW5hbWVsZW4gPSByZXMtPmxvY2tuYW1lLmxlbjsKKwkJbWxlLT5tbmFtZWhhc2ggPSByZXMtPmxvY2tuYW1lLmhhc2g7CisJfSBlbHNlIHsKIAkJQlVHX09OKCFuYW1lKTsKLQkJbWVtY3B5KG1sZS0+dS5uYW1lLm5hbWUsIG5hbWUsIG5hbWVsZW4pOwotCQltbGUtPnUubmFtZS5sZW4gPSBuYW1lbGVuOwotCX0gZWxzZSAvKiBETE1fTUxFX01JR1JBVElPTiAqLyB7Ci0JCUJVR19PTighbmFtZSk7Ci0JCW1lbWNweShtbGUtPnUubmFtZS5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLQkJbWxlLT51Lm5hbWUubGVuID0gbmFtZWxlbjsKKwkJbWxlLT5tbGVyZXMgPSBOVUxMOworCQltZW1jcHkobWxlLT5tbmFtZSwgbmFtZSwgbmFtZWxlbik7CisJCW1sZS0+bW5hbWVsZW4gPSBuYW1lbGVuOworCQltbGUtPm1uYW1laGFzaCA9IGRsbV9sb2NraWRfaGFzaChuYW1lLCBuYW1lbGVuKTsKIAl9CiAKKwlhdG9taWNfaW5jKCZkbG0tPm1sZV90b3RfY291bnRbbWxlLT50eXBlXSk7CisJYXRvbWljX2luYygmZGxtLT5tbGVfY3VyX2NvdW50W21sZS0+dHlwZV0pOworCiAJLyogY29weSBvZmYgdGhlIG5vZGVfbWFwIGFuZCByZWdpc3RlciBoYiBjYWxsYmFja3Mgb24gb3VyIGNvcHkgKi8KIAltZW1jcHkobWxlLT5ub2RlX21hcCwgZGxtLT5kb21haW5fbWFwLCBzaXplb2YobWxlLT5ub2RlX21hcCkpOwogCW1lbWNweShtbGUtPnZvdGVfbWFwLCBkbG0tPmRvbWFpbl9tYXAsIHNpemVvZihtbGUtPnZvdGVfbWFwKSk7CkBAIC0zMTgsNiArMzE3LDI0IEBACiAJX19kbG1fbWxlX2F0dGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOwogfQogCit2b2lkIF9fZGxtX3VubGlua19tbGUoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSkKK3sKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+c3BpbmxvY2spOworCWFzc2VydF9zcGluX2xvY2tlZCgmZGxtLT5tYXN0ZXJfbG9jayk7CisKKwlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtbGUtPm1hc3Rlcl9oYXNoX25vZGUpKQorCQlobGlzdF9kZWxfaW5pdCgmbWxlLT5tYXN0ZXJfaGFzaF9ub2RlKTsKK30KKwordm9pZCBfX2RsbV9pbnNlcnRfbWxlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmZGxtLT5tYXN0ZXJfbG9jayk7CisKKwlidWNrZXQgPSBkbG1fbWFzdGVyX2hhc2goZGxtLCBtbGUtPm1uYW1laGFzaCk7CisJaGxpc3RfYWRkX2hlYWQoJm1sZS0+bWFzdGVyX2hhc2hfbm9kZSwgYnVja2V0KTsKK30KIAogLyogcmV0dXJucyAxIGlmIGZvdW5kLCAwIGlmIG5vdCAqLwogc3RhdGljIGludCBkbG1fZmluZF9tbGUoc3RydWN0IGRsbV9jdHh0ICpkbG0sCkBAIC0zMjUsMTAgKzM0MiwxNyBAQAogCQkJY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVsZW4pCiB7CiAJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqdG1wbWxlOworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGhsaXN0X25vZGUgKmxpc3Q7CisJdW5zaWduZWQgaW50IGhhc2g7CiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+bWFzdGVyX2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBtbGUsICZkbG0tPm1hc3Rlcl9saXN0LCBsaXN0KSB7CisJaGFzaCA9IGRsbV9sb2NraWRfaGFzaChuYW1lLCBuYW1lbGVuKTsKKwlidWNrZXQgPSBkbG1fbWFzdGVyX2hhc2goZGxtLCBoYXNoKTsKKwlobGlzdF9mb3JfZWFjaChsaXN0LCBidWNrZXQpIHsKKwkJdG1wbWxlID0gaGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSwKKwkJCQkgICAgIG1hc3Rlcl9oYXNoX25vZGUpOwogCQlpZiAoIWRsbV9tbGVfZXF1YWwoZGxtLCB0bXBtbGUsIG5hbWUsIG5hbWVsZW4pKQogCQkJY29udGludWU7CiAJCWRsbV9nZXRfbWxlKHRtcG1sZSk7CkBAIC00MDgsMjQgKzQzMiwyMCBAQAogCW1sZSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5LCBtbGVfcmVmcyk7CiAJZGxtID0gbWxlLT5kbG07CiAKLQlpZiAobWxlLT50eXBlICE9IERMTV9NTEVfTUFTVEVSKSB7Ci0JCW1sb2coMCwgImNhbGxpbmcgbWxlX3JlbGVhc2UgZm9yICUuKnMsIHR5cGUgJWRcbiIsCi0JCSAgICAgbWxlLT51Lm5hbWUubGVuLCBtbGUtPnUubmFtZS5uYW1lLCBtbGUtPnR5cGUpOwotCX0gZWxzZSB7Ci0JCW1sb2coMCwgImNhbGxpbmcgbWxlX3JlbGVhc2UgZm9yICUuKnMsIHR5cGUgJWRcbiIsCi0JCSAgICAgbWxlLT51LnJlcy0+bG9ja25hbWUubGVuLAotCQkgICAgIG1sZS0+dS5yZXMtPmxvY2tuYW1lLm5hbWUsIG1sZS0+dHlwZSk7Ci0JfQogCWFzc2VydF9zcGluX2xvY2tlZCgmZGxtLT5zcGlubG9jayk7CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPm1hc3Rlcl9sb2NrKTsKIAorCW1sb2coMCwgIlJlbGVhc2luZyBtbGUgZm9yICUuKnMsIHR5cGUgJWRcbiIsIG1sZS0+bW5hbWVsZW4sIG1sZS0+bW5hbWUsCisJICAgICBtbGUtPnR5cGUpOworCiAJLyogcmVtb3ZlIGZyb20gbGlzdCBpZiBub3QgYWxyZWFkeSAqLwotCWlmICghbGlzdF9lbXB0eSgmbWxlLT5saXN0KSkKLQkJbGlzdF9kZWxfaW5pdCgmbWxlLT5saXN0KTsKKwlfX2RsbV91bmxpbmtfbWxlKGRsbSwgbWxlKTsKIAogCS8qIGRldGFjaCB0aGUgbWxlIGZyb20gdGhlIGRvbWFpbiBub2RlIHVwL2Rvd24gZXZlbnRzICovCiAJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOwogCisJYXRvbWljX2RlYygmZGxtLT5tbGVfY3VyX2NvdW50W21sZS0+dHlwZV0pOworCiAJLyogTk9URToga2ZyZWUgdW5kZXIgc3BpbmxvY2sgaGVyZS4KIAkgKiBpZiB0aGlzIGlzIGJhZCwgd2UgY2FuIG1vdmUgdGhpcyB0byBhIGZyZWVsaXN0LiAqLwogCWttZW1fY2FjaGVfZnJlZShkbG1fbWxlX2NhY2hlLCBtbGUpOwpAQCAtNDY1LDQzICs0ODUsNiBAQAogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZGxtX2xvY2tyZXNfY2FjaGUpOwogfQogCi1zdGF0aWMgdm9pZCBkbG1fc2V0X2xvY2tyZXNfb3duZXIoc3RydWN0IGRsbV9jdHh0ICpkbG0sCi0JCQkJICBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywKLQkJCQkgIHU4IG93bmVyKQotewotCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7Ci0KLQltbG9nX2VudHJ5KCIlLipzLCAldVxuIiwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwgb3duZXIpOwotCi0JaWYgKG93bmVyID09IGRsbS0+bm9kZV9udW0pCi0JCWF0b21pY19pbmMoJmRsbS0+bG9jYWxfcmVzb3VyY2VzKTsKLQllbHNlIGlmIChvd25lciA9PSBETE1fTE9DS19SRVNfT1dORVJfVU5LTk9XTikKLQkJYXRvbWljX2luYygmZGxtLT51bmtub3duX3Jlc291cmNlcyk7Ci0JZWxzZQotCQlhdG9taWNfaW5jKCZkbG0tPnJlbW90ZV9yZXNvdXJjZXMpOwotCi0JcmVzLT5vd25lciA9IG93bmVyOwotfQotCi12b2lkIGRsbV9jaGFuZ2VfbG9ja3Jlc19vd25lcihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKLQkJCSAgICAgIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzLCB1OCBvd25lcikKLXsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJlcy0+c3BpbmxvY2spOwotCi0JaWYgKG93bmVyID09IHJlcy0+b3duZXIpCi0JCXJldHVybjsKLQotCWlmIChyZXMtPm93bmVyID09IGRsbS0+bm9kZV9udW0pCi0JCWF0b21pY19kZWMoJmRsbS0+bG9jYWxfcmVzb3VyY2VzKTsKLQllbHNlIGlmIChyZXMtPm93bmVyID09IERMTV9MT0NLX1JFU19PV05FUl9VTktOT1dOKQotCQlhdG9taWNfZGVjKCZkbG0tPnVua25vd25fcmVzb3VyY2VzKTsKLQllbHNlCi0JCWF0b21pY19kZWMoJmRsbS0+cmVtb3RlX3Jlc291cmNlcyk7Ci0KLQlkbG1fc2V0X2xvY2tyZXNfb3duZXIoZGxtLCByZXMsIG93bmVyKTsKLX0KLQotCiBzdGF0aWMgdm9pZCBkbG1fbG9ja3Jlc19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwpAQCAtNTI3LDYgKzUxMCw4IEBACiAJfQogCXNwaW5fdW5sb2NrKCZkbG0tPnRyYWNrX2xvY2spOwogCisJYXRvbWljX2RlYygmZGxtLT5yZXNfY3VyX2NvdW50KTsKKwogCWRsbV9wdXQoZGxtKTsKIAogCWlmICghaGxpc3RfdW5oYXNoZWQoJnJlcy0+aGFzaF9ub2RlKSB8fApAQCAtNjA3LDYgKzU5Miw5IEBACiAKIAlrcmVmX2luaXQoJnJlcy0+cmVmcyk7CiAKKwlhdG9taWNfaW5jKCZkbG0tPnJlc190b3RfY291bnQpOworCWF0b21pY19pbmMoJmRsbS0+cmVzX2N1cl9jb3VudCk7CisKIAkvKiBqdXN0IGZvciBjb25zaXN0ZW5jeSAqLwogCXNwaW5fbG9jaygmcmVzLT5zcGlubG9jayk7CiAJZGxtX3NldF9sb2NrcmVzX293bmVyKGRsbSwgcmVzLCBETE1fTE9DS19SRVNfT1dORVJfVU5LTk9XTik7CkBAIC04NDMsNyArODMxLDcgQEAKIAkJYWxsb2NfbWxlID0gTlVMTDsKIAkJZGxtX2luaXRfbWxlKG1sZSwgRExNX01MRV9NQVNURVIsIGRsbSwgcmVzLCBOVUxMLCAwKTsKIAkJc2V0X2JpdChkbG0tPm5vZGVfbnVtLCBtbGUtPm1heWJlX21hcCk7Ci0JCWxpc3RfYWRkKCZtbGUtPmxpc3QsICZkbG0tPm1hc3Rlcl9saXN0KTsKKwkJX19kbG1faW5zZXJ0X21sZShkbG0sIG1sZSk7CiAKIAkJLyogc3RpbGwgaG9sZGluZyB0aGUgZGxtIHNwaW5sb2NrLCBjaGVjayB0aGUgcmVjb3ZlcnkgbWFwCiAJCSAqIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vZGVzIHRoYXQgc3RpbGwgbmVlZCB0byBiZSAKQEAgLTEyNzAsNyArMTI1OCw3IEBACiAJCQkJCQkgICAgIHJlcy0+bG9ja25hbWUubGVuLAogCQkJCQkJICAgICByZXMtPmxvY2tuYW1lLm5hbWUpOwogCQkJCQkJbWxlLT50eXBlID0gRExNX01MRV9NQVNURVI7Ci0JCQkJCQltbGUtPnUucmVzID0gcmVzOworCQkJCQkJbWxlLT5tbGVyZXMgPSByZXM7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC0xMzE1LDE0ICsxMzAzLDggQEAKIAogCUJVR19PTihtbGUtPnR5cGUgPT0gRExNX01MRV9NSUdSQVRJT04pOwogCi0JaWYgKG1sZS0+dHlwZSAhPSBETE1fTUxFX01BU1RFUikgewotCQlyZXF1ZXN0Lm5hbWVsZW4gPSBtbGUtPnUubmFtZS5sZW47Ci0JCW1lbWNweShyZXF1ZXN0Lm5hbWUsIG1sZS0+dS5uYW1lLm5hbWUsIHJlcXVlc3QubmFtZWxlbik7Ci0JfSBlbHNlIHsKLQkJcmVxdWVzdC5uYW1lbGVuID0gbWxlLT51LnJlcy0+bG9ja25hbWUubGVuOwotCQltZW1jcHkocmVxdWVzdC5uYW1lLCBtbGUtPnUucmVzLT5sb2NrbmFtZS5uYW1lLAotCQkJcmVxdWVzdC5uYW1lbGVuKTsKLQl9CisJcmVxdWVzdC5uYW1lbGVuID0gKHU4KW1sZS0+bW5hbWVsZW47CisJbWVtY3B5KHJlcXVlc3QubmFtZSwgbWxlLT5tbmFtZSwgcmVxdWVzdC5uYW1lbGVuKTsKIAogYWdhaW46CiAJcmV0ID0gbzJuZXRfc2VuZF9tZXNzYWdlKERMTV9NQVNURVJfUkVRVUVTVF9NU0csIGRsbS0+a2V5LCAmcmVxdWVzdCwKQEAgLTE1NzUsNyArMTU1Nyw3IEBACiAJCS8vICJhZGQgdGhlIGJsb2NrLlxuIik7CiAJCWRsbV9pbml0X21sZShtbGUsIERMTV9NTEVfQkxPQ0ssIGRsbSwgTlVMTCwgbmFtZSwgbmFtZWxlbik7CiAJCXNldF9iaXQocmVxdWVzdC0+bm9kZV9pZHgsIG1sZS0+bWF5YmVfbWFwKTsKLQkJbGlzdF9hZGQoJm1sZS0+bGlzdCwgJmRsbS0+bWFzdGVyX2xpc3QpOworCQlfX2RsbV9pbnNlcnRfbWxlKGRsbSwgbWxlKTsKIAkJcmVzcG9uc2UgPSBETE1fTUFTVEVSX1JFU1BfTk87CiAJfSBlbHNlIHsKIAkJLy8gbWxvZygwLCAibWxlIHdhcyBmb3VuZFxuIik7CkBAIC0xOTY3LDcgKzE5NDksNyBAQAogCQkJICAgICBhc3NlcnQtPm5vZGVfaWR4LCByciwgZXh0cmFfcmVmLCBtbGUtPmludXNlKTsKIAkJCWRsbV9wcmludF9vbmVfbWxlKG1sZSk7CiAJCX0KLQkJbGlzdF9kZWxfaW5pdCgmbWxlLT5saXN0KTsKKwkJX19kbG1fdW5saW5rX21sZShkbG0sIG1sZSk7CiAJCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKIAkJX19kbG1fcHV0X21sZShtbGUpOwogCQlpZiAoZXh0cmFfcmVmKSB7CkBAIC0zMTU5LDEwICszMTQxLDggQEAKIAkJCXRtcC0+bWFzdGVyID0gbWFzdGVyOwogCQkJYXRvbWljX3NldCgmdG1wLT53b2tlbiwgMSk7CiAJCQl3YWtlX3VwKCZ0bXAtPndxKTsKLQkJCS8qIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IHNvIHRoYXQgb25seSBvbmUKLQkJCSAqIG1sZSB3aWxsIGJlIGZvdW5kICovCi0JCQlsaXN0X2RlbF9pbml0KCZ0bXAtPmxpc3QpOwotCQkJLyogdGhpcyB3YXMgb2J2aW91c2x5IFdST05HLiAgbWxlIGlzIHVuaW5pdGVkIGhlcmUuICBzaG91bGQgYmUgdG1wLiAqLworCQkJLyogcmVtb3ZlIGl0IHNvIHRoYXQgb25seSBvbmUgbWxlIHdpbGwgYmUgZm91bmQgKi8KKwkJCV9fZGxtX3VubGlua19tbGUoZGxtLCB0bXApOwogCQkJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCB0bXApOwogCQkJcmV0ID0gRExNX01JR1JBVEVfUkVTUE9OU0VfTUFTVEVSWV9SRUY7CiAJCQltbG9nKDAsICIlczolLipzOiBtYXN0ZXI9JXUsIG5ld21hc3Rlcj0ldSwgIgpAQCAtMzE4MSwxNyArMzE2MSw5MyBAQAogCW1sZS0+bWFzdGVyID0gbWFzdGVyOwogCS8qIGRvIHRoaXMgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgbWxlIHR5cGVzICovCiAJc2V0X2JpdChuZXdfbWFzdGVyLCBtbGUtPm1heWJlX21hcCk7Ci0JbGlzdF9hZGQoJm1sZS0+bGlzdCwgJmRsbS0+bWFzdGVyX2xpc3QpOworCV9fZGxtX2luc2VydF9tbGUoZGxtLCBtbGUpOwogCiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIFNldHMgdGhlIG93bmVyIG9mIHRoZSBsb2NrcmVzLCBhc3NvY2lhdGVkIHRvIHRoZSBtbGUsIHRvIFVOS05PV04KKyAqLworc3RhdGljIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqZGxtX3Jlc2V0X21sZXJlc19vd25lcihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKKwkJCQkJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlKQoreworCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOworCisJLyogRmluZCB0aGUgbG9ja3JlcyBhc3NvY2lhdGVkIHRvIHRoZSBtbGUgYW5kIHNldCBpdHMgb3duZXIgdG8gVU5LICovCisJcmVzID0gX19kbG1fbG9va3VwX2xvY2tyZXMoZGxtLCBtbGUtPm1uYW1lLCBtbGUtPm1uYW1lbGVuLAorCQkJCSAgIG1sZS0+bW5hbWVoYXNoKTsKKwlpZiAocmVzKSB7CisJCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKworCQkvKiBtb3ZlIGxvY2tyZXMgb250byByZWNvdmVyeSBsaXN0ICovCisJCXNwaW5fbG9jaygmcmVzLT5zcGlubG9jayk7CisJCWRsbV9zZXRfbG9ja3Jlc19vd25lcihkbG0sIHJlcywgRExNX0xPQ0tfUkVTX09XTkVSX1VOS05PV04pOworCQlkbG1fbW92ZV9sb2NrcmVzX3RvX3JlY292ZXJ5X2xpc3QoZGxtLCByZXMpOworCQlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CisJCWRsbV9sb2NrcmVzX3B1dChyZXMpOworCisJCS8qIGFib3V0IHRvIGdldCByaWQgb2YgbWxlLCBkZXRhY2ggZnJvbSBoZWFydGJlYXQgKi8KKwkJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOworCisJCS8qIGR1bXAgdGhlIG1sZSAqLworCQlzcGluX2xvY2soJmRsbS0+bWFzdGVyX2xvY2spOworCQlfX2RsbV9wdXRfbWxlKG1sZSk7CisJCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBkbG1fY2xlYW5fbWlncmF0aW9uX21sZShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKKwkJCQkgICAgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlKQoreworCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKKworCXNwaW5fbG9jaygmbWxlLT5zcGlubG9jayk7CisJX19kbG1fdW5saW5rX21sZShkbG0sIG1sZSk7CisJYXRvbWljX3NldCgmbWxlLT53b2tlbiwgMSk7CisJc3Bpbl91bmxvY2soJm1sZS0+c3BpbmxvY2spOworCisJd2FrZV91cCgmbWxlLT53cSk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbV9jbGVhbl9ibG9ja19tbGUoc3RydWN0IGRsbV9jdHh0ICpkbG0sCisJCQkJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlLCB1OCBkZWFkX25vZGUpCit7CisJaW50IGJpdDsKKworCUJVR19PTihtbGUtPnR5cGUgIT0gRExNX01MRV9CTE9DSyk7CisKKwlzcGluX2xvY2soJm1sZS0+c3BpbmxvY2spOworCWJpdCA9IGZpbmRfbmV4dF9iaXQobWxlLT5tYXliZV9tYXAsIE8yTk1fTUFYX05PREVTLCAwKTsKKwlpZiAoYml0ICE9IGRlYWRfbm9kZSkgeworCQltbG9nKDAsICJtbGUgZm91bmQsIGJ1dCBkZWFkIG5vZGUgJXUgd291bGQgbm90IGhhdmUgYmVlbiAiCisJCSAgICAgIm1hc3RlclxuIiwgZGVhZF9ub2RlKTsKKwkJc3Bpbl91bmxvY2soJm1sZS0+c3BpbmxvY2spOworCX0gZWxzZSB7CisJCS8qIE11c3QgZHJvcCB0aGUgcmVmY291bnQgYnkgb25lIHNpbmNlIHRoZSBhc3NlcnRfbWFzdGVyIHdpbGwKKwkJICogbmV2ZXIgYXJyaXZlLiBUaGlzIG1heSByZXN1bHQgaW4gdGhlIG1sZSBiZWluZyB1bmxpbmtlZCBhbmQKKwkJICogZnJlZWQsIGJ1dCB0aGVyZSBtYXkgc3RpbGwgYmUgYSBwcm9jZXNzIHdhaXRpbmcgaW4gdGhlCisJCSAqIGRsbWxvY2sgcGF0aCB3aGljaCBpcyBmaW5lLiAqLworCQltbG9nKDAsICJub2RlICV1IHdhcyBleHBlY3RlZCBtYXN0ZXJcbiIsIGRlYWRfbm9kZSk7CisJCWF0b21pY19zZXQoJm1sZS0+d29rZW4sIDEpOworCQlzcGluX3VubG9jaygmbWxlLT5zcGlubG9jayk7CisJCXdha2VfdXAoJm1sZS0+d3EpOworCisJCS8qIERvIG5vdCBuZWVkIGV2ZW50cyBhbnkgbG9uZ2VyLCBzbyBkZXRhY2ggZnJvbSBoZWFydGJlYXQgKi8KKwkJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOworCQlfX2RsbV9wdXRfbWxlKG1sZSk7CisJfQorfQogCiB2b2lkIGRsbV9jbGVhbl9tYXN0ZXJfbGlzdChzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgdTggZGVhZF9ub2RlKQogewotCXN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSwgKm5leHQ7CisJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlOwogCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwotCXVuc2lnbmVkIGludCBoYXNoOworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGhsaXN0X25vZGUgKmxpc3Q7CisJdW5zaWduZWQgaW50IGk7CiAKIAltbG9nX2VudHJ5KCJkbG09JXMsIGRlYWQgbm9kZT0ldVxuIiwgZGxtLT5uYW1lLCBkZWFkX25vZGUpOwogdG9wOgpAQCAtMzE5OSwxMTkgKzMyNTUsNzAgQEAKIAogCS8qIGNsZWFuIHRoZSBtYXN0ZXIgbGlzdCAqLwogCXNwaW5fbG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1sZSwgbmV4dCwgJmRsbS0+bWFzdGVyX2xpc3QsIGxpc3QpIHsKLQkJQlVHX09OKG1sZS0+dHlwZSAhPSBETE1fTUxFX0JMT0NLICYmCi0JCSAgICAgICBtbGUtPnR5cGUgIT0gRExNX01MRV9NQVNURVIgJiYKLQkJICAgICAgIG1sZS0+dHlwZSAhPSBETE1fTUxFX01JR1JBVElPTik7CisJZm9yIChpID0gMDsgaSA8IERMTV9IQVNIX0JVQ0tFVFM7IGkrKykgeworCQlidWNrZXQgPSBkbG1fbWFzdGVyX2hhc2goZGxtLCBpKTsKKwkJaGxpc3RfZm9yX2VhY2gobGlzdCwgYnVja2V0KSB7CisJCQltbGUgPSBobGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5LAorCQkJCQkgIG1hc3Rlcl9oYXNoX25vZGUpOwogCi0JCS8qIE1BU1RFUiBtbGVzIGFyZSBpbml0aWF0ZWQgbG9jYWxseS4gIHRoZSB3YWl0aW5nCi0JCSAqIHByb2Nlc3Mgd2lsbCBub3RpY2UgdGhlIG5vZGUgbWFwIGNoYW5nZQotCQkgKiBzaG9ydGx5LiAgbGV0IHRoYXQgaGFwcGVuIGFzIG5vcm1hbC4gKi8KLQkJaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX01BU1RFUikKLQkJCWNvbnRpbnVlOworCQkJQlVHX09OKG1sZS0+dHlwZSAhPSBETE1fTUxFX0JMT0NLICYmCisJCQkgICAgICAgbWxlLT50eXBlICE9IERMTV9NTEVfTUFTVEVSICYmCisJCQkgICAgICAgbWxlLT50eXBlICE9IERMTV9NTEVfTUlHUkFUSU9OKTsKIAorCQkJLyogTUFTVEVSIG1sZXMgYXJlIGluaXRpYXRlZCBsb2NhbGx5LiBUaGUgd2FpdGluZworCQkJICogcHJvY2VzcyB3aWxsIG5vdGljZSB0aGUgbm9kZSBtYXAgY2hhbmdlIHNob3J0bHkuCisJCQkgKiBMZXQgdGhhdCBoYXBwZW4gYXMgbm9ybWFsLiAqLworCQkJaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX01BU1RFUikKKwkJCQljb250aW51ZTsKIAotCQkvKiBCTE9DSyBtbGVzIGFyZSBpbml0aWF0ZWQgYnkgb3RoZXIgbm9kZXMuCi0JCSAqIG5lZWQgdG8gY2xlYW4gdXAgaWYgdGhlIGRlYWQgbm9kZSB3b3VsZCBoYXZlCi0JCSAqIGJlZW4gdGhlIG1hc3Rlci4gKi8KLQkJaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX0JMT0NLKSB7Ci0JCQlpbnQgYml0OwotCi0JCQlzcGluX2xvY2soJm1sZS0+c3BpbmxvY2spOwotCQkJYml0ID0gZmluZF9uZXh0X2JpdChtbGUtPm1heWJlX21hcCwgTzJOTV9NQVhfTk9ERVMsIDApOwotCQkJaWYgKGJpdCAhPSBkZWFkX25vZGUpIHsKLQkJCQltbG9nKDAsICJtbGUgZm91bmQsIGJ1dCBkZWFkIG5vZGUgJXUgd291bGQgIgotCQkJCSAgICAgIm5vdCBoYXZlIGJlZW4gbWFzdGVyXG4iLCBkZWFkX25vZGUpOwotCQkJCXNwaW5fdW5sb2NrKCZtbGUtPnNwaW5sb2NrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogbXVzdCBkcm9wIHRoZSByZWZjb3VudCBieSBvbmUgc2luY2UgdGhlCi0JCQkJICogYXNzZXJ0X21hc3RlciB3aWxsIG5ldmVyIGFycml2ZS4gIHRoaXMKLQkJCQkgKiBtYXkgcmVzdWx0IGluIHRoZSBtbGUgYmVpbmcgdW5saW5rZWQgYW5kCi0JCQkJICogZnJlZWQsIGJ1dCB0aGVyZSBtYXkgc3RpbGwgYmUgYSBwcm9jZXNzCi0JCQkJICogd2FpdGluZyBpbiB0aGUgZGxtbG9jayBwYXRoIHdoaWNoIGlzIGZpbmUuICovCi0JCQkJbWxvZygwLCAibm9kZSAldSB3YXMgZXhwZWN0ZWQgbWFzdGVyXG4iLAotCQkJCSAgICAgZGVhZF9ub2RlKTsKLQkJCQlhdG9taWNfc2V0KCZtbGUtPndva2VuLCAxKTsKLQkJCQlzcGluX3VubG9jaygmbWxlLT5zcGlubG9jayk7Ci0JCQkJd2FrZV91cCgmbWxlLT53cSk7Ci0JCQkJLyogZG8gbm90IG5lZWQgZXZlbnRzIGFueSBsb25nZXIsIHNvIGRldGFjaCAKLQkJCQkgKiBmcm9tIGhlYXJ0YmVhdCAqLwotCQkJCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKLQkJCQlfX2RsbV9wdXRfbWxlKG1sZSk7CisJCQkvKiBCTE9DSyBtbGVzIGFyZSBpbml0aWF0ZWQgYnkgb3RoZXIgbm9kZXMuIE5lZWQgdG8KKwkJCSAqIGNsZWFuIHVwIGlmIHRoZSBkZWFkIG5vZGUgd291bGQgaGF2ZSBiZWVuIHRoZQorCQkJICogbWFzdGVyLiAqLworCQkJaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX0JMT0NLKSB7CisJCQkJZGxtX2NsZWFuX2Jsb2NrX21sZShkbG0sIG1sZSwgZGVhZF9ub2RlKTsKKwkJCQljb250aW51ZTsKIAkJCX0KLQkJCWNvbnRpbnVlOwotCQl9CiAKLQkJLyogZXZlcnl0aGluZyBlbHNlIGlzIGEgTUlHUkFUSU9OIG1sZSAqLworCQkJLyogRXZlcnl0aGluZyBlbHNlIGlzIGEgTUlHUkFUSU9OIG1sZSAqLwogCi0JCS8qIHRoZSBydWxlIGZvciBNSUdSQVRJT04gbWxlcyBpcyB0aGF0IHRoZSBtYXN0ZXIKLQkJICogYmVjb21lcyBVTktOT1dOIGlmICplaXRoZXIqIHRoZSBvcmlnaW5hbCBvcgotCQkgKiB0aGUgbmV3IG1hc3RlciBkaWVzLiAgYWxsIFVOS05PV04gbG9ja3Jlc2VzCi0JCSAqIGFyZSBzZW50IHRvIHdoaWNoZXZlciBub2RlIGJlY29tZXMgdGhlIHJlY292ZXJ5Ci0JCSAqIG1hc3Rlci4gIHRoZSBuZXcgbWFzdGVyIGlzIHJlc3BvbnNpYmxlIGZvcgotCQkgKiBkZXRlcm1pbmluZyBpZiB0aGVyZSBpcyBzdGlsbCBhIG1hc3RlciBmb3IKLQkJICogdGhpcyBsb2NrcmVzLCBvciBpZiBoZSBuZWVkcyB0byB0YWtlIG92ZXIKLQkJICogbWFzdGVyeS4gIGVpdGhlciB3YXksIHRoaXMgbm9kZSBzaG91bGQgZXhwZWN0Ci0JCSAqIGFub3RoZXIgbWVzc2FnZSB0byByZXNvbHZlIHRoaXMuICovCi0JCWlmIChtbGUtPm1hc3RlciAhPSBkZWFkX25vZGUgJiYKLQkJICAgIG1sZS0+bmV3X21hc3RlciAhPSBkZWFkX25vZGUpCi0JCQljb250aW51ZTsKKwkJCS8qIFRoZSBydWxlIGZvciBNSUdSQVRJT04gbWxlcyBpcyB0aGF0IHRoZSBtYXN0ZXIKKwkJCSAqIGJlY29tZXMgVU5LTk9XTiBpZiAqZWl0aGVyKiB0aGUgb3JpZ2luYWwgb3IgdGhlIG5ldworCQkJICogbWFzdGVyIGRpZXMuIEFsbCBVTktOT1dOIGxvY2tyZXMnIGFyZSBzZW50IHRvCisJCQkgKiB3aGljaGV2ZXIgbm9kZSBiZWNvbWVzIHRoZSByZWNvdmVyeSBtYXN0ZXIuIFRoZSBuZXcKKwkJCSAqIG1hc3RlciBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlcmUgaXMKKwkJCSAqIHN0aWxsIGEgbWFzdGVyIGZvciB0aGlzIGxvY2tyZXMsIG9yIGlmIGhlIG5lZWRzIHRvCisJCQkgKiB0YWtlIG92ZXIgbWFzdGVyeS4gRWl0aGVyIHdheSwgdGhpcyBub2RlIHNob3VsZAorCQkJICogZXhwZWN0IGFub3RoZXIgbWVzc2FnZSB0byByZXNvbHZlIHRoaXMuICovCiAKLQkJLyogaWYgd2UgaGF2ZSByZWFjaGVkIHRoaXMgcG9pbnQsIHRoaXMgbWxlIG5lZWRzIHRvCi0JCSAqIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhbmQgZnJlZWQuICovCisJCQlpZiAobWxlLT5tYXN0ZXIgIT0gZGVhZF9ub2RlICYmCisJCQkgICAgbWxlLT5uZXdfbWFzdGVyICE9IGRlYWRfbm9kZSkKKwkJCQljb250aW51ZTsKIAotCQkvKiByZW1vdmUgZnJvbSB0aGUgbGlzdCBlYXJseS4gIE5PVEU6IHVubGlua2luZwotCQkgKiBsaXN0X2hlYWQgd2hpbGUgaW4gbGlzdF9mb3JfZWFjaF9zYWZlICovCi0JCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKLQkJc3Bpbl9sb2NrKCZtbGUtPnNwaW5sb2NrKTsKLQkJbGlzdF9kZWxfaW5pdCgmbWxlLT5saXN0KTsKLQkJYXRvbWljX3NldCgmbWxlLT53b2tlbiwgMSk7Ci0JCXNwaW5fdW5sb2NrKCZtbGUtPnNwaW5sb2NrKTsKLQkJd2FrZV91cCgmbWxlLT53cSk7CisJCQkvKiBJZiB3ZSBoYXZlIHJlYWNoZWQgdGhpcyBwb2ludCwgdGhpcyBtbGUgbmVlZHMgdG8gYmUKKwkJCSAqIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhbmQgZnJlZWQuICovCisJCQlkbG1fY2xlYW5fbWlncmF0aW9uX21sZShkbG0sIG1sZSk7CiAKLQkJbWxvZygwLCAiJXM6IG5vZGUgJXUgZGllZCBkdXJpbmcgbWlncmF0aW9uIGZyb20gIgotCQkgICAgICIldSB0byAldSFcbiIsIGRsbS0+bmFtZSwgZGVhZF9ub2RlLAotCQkgICAgIG1sZS0+bWFzdGVyLCBtbGUtPm5ld19tYXN0ZXIpOwotCQkvKiBpZiB0aGVyZSBpcyBhIGxvY2tyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLQkgCSAqIG1sZSwgZmluZCBpdCBhbmQgc2V0IGl0cyBvd25lciB0byBVTktOT1dOICovCi0JCWhhc2ggPSBkbG1fbG9ja2lkX2hhc2gobWxlLT51Lm5hbWUubmFtZSwgbWxlLT51Lm5hbWUubGVuKTsKLQkJcmVzID0gX19kbG1fbG9va3VwX2xvY2tyZXMoZGxtLCBtbGUtPnUubmFtZS5uYW1lLAotCQkJCQkgICBtbGUtPnUubmFtZS5sZW4sIGhhc2gpOwotCQlpZiAocmVzKSB7Ci0JCQkvKiB1bmZvcnR1bmF0ZWx5IGlmIHdlIGhpdCB0aGlzIHJhcmUgY2FzZSwgb3VyCi0JCSAJICogbG9jayBvcmRlcmluZyBpcyBtZXNzZWQuICB3ZSBuZWVkIHRvIGRyb3AKLQkJIAkgKiB0aGUgbWFzdGVyIGxvY2sgc28gdGhhdCB3ZSBjYW4gdGFrZSB0aGUKLQkJICAJICogbG9ja3JlcyBsb2NrLCBtZWFuaW5nIHRoYXQgd2Ugd2lsbCBoYXZlIHRvCisJCQltbG9nKDAsICIlczogbm9kZSAldSBkaWVkIGR1cmluZyBtaWdyYXRpb24gZnJvbSAiCisJCQkgICAgICIldSB0byAldSFcbiIsIGRsbS0+bmFtZSwgZGVhZF9ub2RlLCBtbGUtPm1hc3RlciwKKwkJCSAgICAgbWxlLT5uZXdfbWFzdGVyKTsKKworCQkJLyogSWYgd2UgZmluZCBhIGxvY2tyZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtbGUsIHdlJ3ZlCisJCQkgKiBoaXQgdGhpcyByYXJlIGNhc2UgdGhhdCBtZXNzZXMgdXAgb3VyIGxvY2sgb3JkZXJpbmcuCisJCQkgKiBJZiBzbywgd2UgbmVlZCB0byBkcm9wIHRoZSBtYXN0ZXIgbG9jayBzbyB0aGF0IHdlIGNhbgorCQkJICogdGFrZSB0aGUgbG9ja3JlcyBsb2NrLCBtZWFuaW5nIHRoYXQgd2Ugd2lsbCBoYXZlIHRvCiAJCQkgKiByZXN0YXJ0IGZyb20gdGhlIGhlYWQgb2YgbGlzdC4gKi8KLQkJCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKwkJCXJlcyA9IGRsbV9yZXNldF9tbGVyZXNfb3duZXIoZGxtLCBtbGUpOworCQkJaWYgKHJlcykKKwkJCQkvKiByZXN0YXJ0ICovCisJCQkJZ290byB0b3A7CiAKLQkJCS8qIG1vdmUgbG9ja3JlcyBvbnRvIHJlY292ZXJ5IGxpc3QgKi8KLQkJCXNwaW5fbG9jaygmcmVzLT5zcGlubG9jayk7Ci0JCQlkbG1fc2V0X2xvY2tyZXNfb3duZXIoZGxtLCByZXMsCi0JCQkJICAgICAgCURMTV9MT0NLX1JFU19PV05FUl9VTktOT1dOKTsKLQkJCWRsbV9tb3ZlX2xvY2tyZXNfdG9fcmVjb3ZlcnlfbGlzdChkbG0sIHJlcyk7Ci0JCQlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7Ci0JCQlkbG1fbG9ja3Jlc19wdXQocmVzKTsKLQotCQkJLyogYWJvdXQgdG8gZ2V0IHJpZCBvZiBtbGUsIGRldGFjaCBmcm9tIGhlYXJ0YmVhdCAqLwotCQkJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOwotCi0JCQkvKiBkdW1wIHRoZSBtbGUgKi8KLQkJCXNwaW5fbG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CisJCQkvKiBUaGlzIG1heSBiZSB0aGUgbGFzdCByZWZlcmVuY2UgKi8KIAkJCV9fZGxtX3B1dF9tbGUobWxlKTsKLQkJCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKLQotCQkJLyogcmVzdGFydCAqLwotCQkJZ290byB0b3A7CiAJCX0KLQotCQkvKiB0aGlzIG1heSBiZSB0aGUgbGFzdCByZWZlcmVuY2UgKi8KLQkJX19kbG1fcHV0X21sZShtbGUpOwogCX0KIAlzcGluX3VubG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CiB9CiAKLQogaW50IGRsbV9maW5pc2hfbWlncmF0aW9uKHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywKIAkJCSB1OCBvbGRfbWFzdGVyKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jIGIvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jCmluZGV4IDQwNjBiYjMuLmQ0OTBiNjYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMKQEAgLTE2MiwxMiArMTYyLDI4IEBACiAKIAlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCWlmICghX19kbG1fbG9ja3Jlc191bnVzZWQocmVzKSkgewotCQlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CiAJCW1sb2coMCwgIiVzOiUuKnM6IHRyaWVkIHRvIHB1cmdlIGJ1dCBub3QgdW51c2VkXG4iLAogCQkgICAgIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7Ci0JCXJldHVybiAtRU5PVEVNUFRZOworCQlfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOworCQlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CisJCUJVRygpOwogCX0KKworCWlmIChyZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX01JR1JBVElORykgeworCQltbG9nKDAsICIlczolLipzOiBEZWxheSBkcm9wcmVmIGFzIHRoaXMgbG9ja3JlcyBpcyAiCisJCSAgICAgImJlaW5nIHJlbWFzdGVyZWRcbiIsIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sCisJCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lKTsKKwkJLyogUmUtYWRkIHRoZSBsb2NrcmVzIHRvIHRoZSBlbmQgb2YgdGhlIHB1cmdlIGxpc3QgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZyZXMtPnB1cmdlKSkgeworCQkJbGlzdF9kZWxfaW5pdCgmcmVzLT5wdXJnZSk7CisJCQlsaXN0X2FkZF90YWlsKCZyZXMtPnB1cmdlLCAmZGxtLT5wdXJnZV9saXN0KTsKKwkJfQorCQlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CisJCXJldHVybiAwOworCX0KKwogCW1hc3RlciA9IChyZXMtPm93bmVyID09IGRsbS0+bm9kZV9udW0pOworCiAJaWYgKCFtYXN0ZXIpCiAJCXJlcy0+c3RhdGUgfD0gRExNX0xPQ0tfUkVTX0RST1BQSU5HX1JFRjsKIAlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmMgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKaW5kZXggNzIxOWE4Ni4uZTE1ZmM3ZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuYwpAQCAtMjQ0LDYgKzI0NCwxMCBAQAogCS5mbGFncwkJPSAwLAogfTsKIAorc3RhdGljIHN0cnVjdCBvY2ZzMl9sb2NrX3Jlc19vcHMgb2NmczJfbmZzX3N5bmNfbG9wcyA9IHsKKwkuZmxhZ3MJCT0gMCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb2NmczJfbG9ja19yZXNfb3BzIG9jZnMyX2RlbnRyeV9sb3BzID0gewogCS5nZXRfb3NiCT0gb2NmczJfZ2V0X2RlbnRyeV9vc2IsCiAJLnBvc3RfdW5sb2NrCT0gb2NmczJfZGVudHJ5X3Bvc3RfdW5sb2NrLApAQCAtNjIyLDYgKzYyNiwxNyBAQAogCQkJCSAgICZvY2ZzMl9yZW5hbWVfbG9wcywgb3NiKTsKIH0KIAorc3RhdGljIHZvaWQgb2NmczJfbmZzX3N5bmNfbG9ja19yZXNfaW5pdChzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKnJlcywKKwkJCQkJIHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCS8qIG5mc19zeW5jIGxvY2tyZXMgZG9lc24ndCBjb21lIGZyb20gYSBzbGFiIHNvIHdlIGNhbGwgaW5pdAorCSAqIG9uY2Ugb24gaXQgbWFudWFsbHkuICAqLworCW9jZnMyX2xvY2tfcmVzX2luaXRfb25jZShyZXMpOworCW9jZnMyX2J1aWxkX2xvY2tfbmFtZShPQ0ZTMl9MT0NLX1RZUEVfTkZTX1NZTkMsIDAsIDAsIHJlcy0+bF9uYW1lKTsKKwlvY2ZzMl9sb2NrX3Jlc19pbml0X2NvbW1vbihvc2IsIHJlcywgT0NGUzJfTE9DS19UWVBFX05GU19TWU5DLAorCQkJCSAgICZvY2ZzMl9uZnNfc3luY19sb3BzLCBvc2IpOworfQorCiB2b2lkIG9jZnMyX2ZpbGVfbG9ja19yZXNfaW5pdChzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZmlsZV9wcml2YXRlICpmcCkKIHsKQEAgLTI0MTcsNiArMjQzMiwzNCBAQAogCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsIGxvY2tyZXMsIERMTV9MT0NLX0VYKTsKIH0KIAoraW50IG9jZnMyX25mc19zeW5jX2xvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIGludCBleCkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9ICZvc2ItPm9zYl9uZnNfc3luY19sb2NrcmVzOworCisJaWYgKG9jZnMyX2lzX2hhcmRfcmVhZG9ubHkob3NiKSkKKwkJcmV0dXJuIC1FUk9GUzsKKworCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IG9jZnMyX2NsdXN0ZXJfbG9jayhvc2IsIGxvY2tyZXMsIGV4ID8gTEtNX0VYTU9ERSA6IExLTV9QUk1PREUsCisJCQkJICAgIDAsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQltbG9nKE1MX0VSUk9SLCAibG9jayBvbiBuZnMgc3luYyBsb2NrIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgb2NmczJfbmZzX3N5bmNfdW5sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgZXgpCit7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJm9zYi0+b3NiX25mc19zeW5jX2xvY2tyZXM7CisKKwlpZiAoIW9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCW9jZnMyX2NsdXN0ZXJfdW5sb2NrKG9zYiwgbG9ja3JlcywKKwkJCQkgICAgIGV4ID8gTEtNX0VYTU9ERSA6IExLTV9QUk1PREUpOworfQorCiBpbnQgb2NmczJfZGVudHJ5X2xvY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZXgpCiB7CiAJaW50IHJldDsKQEAgLTI3OTgsNiArMjg0MSw3IEBACiBsb2NhbDoKIAlvY2ZzMl9zdXBlcl9sb2NrX3Jlc19pbml0KCZvc2ItPm9zYl9zdXBlcl9sb2NrcmVzLCBvc2IpOwogCW9jZnMyX3JlbmFtZV9sb2NrX3Jlc19pbml0KCZvc2ItPm9zYl9yZW5hbWVfbG9ja3Jlcywgb3NiKTsKKwlvY2ZzMl9uZnNfc3luY19sb2NrX3Jlc19pbml0KCZvc2ItPm9zYl9uZnNfc3luY19sb2NrcmVzLCBvc2IpOwogCiAJb3NiLT5jY29ubiA9IGNvbm47CiAKQEAgLTI4MzMsNiArMjg3Nyw3IEBACiAKIAlvY2ZzMl9sb2NrX3Jlc19mcmVlKCZvc2ItPm9zYl9zdXBlcl9sb2NrcmVzKTsKIAlvY2ZzMl9sb2NrX3Jlc19mcmVlKCZvc2ItPm9zYl9yZW5hbWVfbG9ja3Jlcyk7CisJb2NmczJfbG9ja19yZXNfZnJlZSgmb3NiLT5vc2JfbmZzX3N5bmNfbG9ja3Jlcyk7CiAKIAlvY2ZzMl9jbHVzdGVyX2Rpc2Nvbm5lY3Qob3NiLT5jY29ubiwgaGFuZ3VwX3BlbmRpbmcpOwogCW9zYi0+Y2Nvbm4gPSBOVUxMOwpAQCAtMzAxNSw2ICszMDYwLDcgQEAKIHsKIAlvY2ZzMl9zaW1wbGVfZHJvcF9sb2NrcmVzKG9zYiwgJm9zYi0+b3NiX3N1cGVyX2xvY2tyZXMpOwogCW9jZnMyX3NpbXBsZV9kcm9wX2xvY2tyZXMob3NiLCAmb3NiLT5vc2JfcmVuYW1lX2xvY2tyZXMpOworCW9jZnMyX3NpbXBsZV9kcm9wX2xvY2tyZXMob3NiLCAmb3NiLT5vc2JfbmZzX3N5bmNfbG9ja3Jlcyk7CiB9CiAKIGludCBvY2ZzMl9kcm9wX2lub2RlX2xvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmggYi9mcy9vY2ZzMi9kbG1nbHVlLmgKaW5kZXggM2Y4ZDk5OC4uZTFmZDU3MiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5oCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuaApAQCAtMTE1LDYgKzExNSw4IEBACiAJCQlpbnQgZXgpOwogaW50IG9jZnMyX3JlbmFtZV9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHZvaWQgb2NmczJfcmVuYW1lX3VubG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CitpbnQgb2NmczJfbmZzX3N5bmNfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgaW50IGV4KTsKK3ZvaWQgb2NmczJfbmZzX3N5bmNfdW5sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgZXgpOwogaW50IG9jZnMyX2RlbnRyeV9sb2NrKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGV4KTsKIHZvaWQgb2NmczJfZGVudHJ5X3VubG9jayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBleCk7CiBpbnQgb2NmczJfZmlsZV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZXgsIGludCB0cnlsb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4cG9ydC5jIGIvZnMvb2NmczIvZXhwb3J0LmMKaW5kZXggMmYyN2IzMy4uZGUzZGE4ZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZXhwb3J0LmMKKysrIGIvZnMvb2NmczIvZXhwb3J0LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIm9jZnMyLmgiCiAKKyNpbmNsdWRlICJhbGxvYy5oIgogI2luY2x1ZGUgImRpci5oIgogI2luY2x1ZGUgImRsbWdsdWUuaCIKICNpbmNsdWRlICJkY2FjaGUuaCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlICJpbm9kZS5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKKyNpbmNsdWRlICJzdWJhbGxvYy5oIgogCiBzdHJ1Y3Qgb2NmczJfaW5vZGVfaGFuZGxlCiB7CkBAIC00OSwyOSArNTEsOTcgQEAKIAkJc3RydWN0IG9jZnMyX2lub2RlX2hhbmRsZSAqaGFuZGxlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihzYik7CisJdTY0IGJsa25vID0gaGFuZGxlLT5paF9ibGtubzsKKwlpbnQgc3RhdHVzLCBzZXQ7CiAJc3RydWN0IGRlbnRyeSAqcmVzdWx0OwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXApXG4iLCBzYiwgaGFuZGxlKTsKIAotCWlmIChoYW5kbGUtPmloX2Jsa25vID09IDApIHsKLQkJbWxvZ19lcnJubygtRVNUQUxFKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CisJaWYgKGJsa25vID09IDApIHsKKwkJbWxvZygwLCAibmZzIHdhbnRzIGlub2RlIHdpdGggYmxrbm86IDBcbiIpOworCQlyZXN1bHQgPSBFUlJfUFRSKC1FU1RBTEUpOworCQlnb3RvIGJhaWw7CiAJfQogCi0JaW5vZGUgPSBvY2ZzMl9pZ2V0KE9DRlMyX1NCKHNiKSwgaGFuZGxlLT5paF9ibGtubywgMCwgMCk7CisJaW5vZGUgPSBvY2ZzMl9pbG9va3VwKHNiLCBibGtubyk7CisJLyoKKwkgKiBJZiB0aGUgaW5vZGUgZXhpc3RzIGluIG1lbW9yeSwgd2Ugb25seSBuZWVkIHRvIGNoZWNrIGl0J3MKKwkgKiBnZW5lcmF0aW9uIG51bWJlcgorCSAqLworCWlmIChpbm9kZSkKKwkJZ290byBjaGVja19nZW47CiAKLQlpZiAoSVNfRVJSKGlub2RlKSkKLQkJcmV0dXJuICh2b2lkICopaW5vZGU7CisJLyoKKwkgKiBUaGlzIHdpbGwgc3luY2hyb25pemUgdXMgYWdhaW5zdCBvY2ZzMl9kZWxldGVfaW5vZGUoKSBvbgorCSAqIGFsbCBub2RlcworCSAqLworCXN0YXR1cyA9IG9jZnMyX25mc19zeW5jX2xvY2sob3NiLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nKE1MX0VSUk9SLCAiZ2V0dGluZyBuZnMgc3luYyBsb2NrKEVYKSBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8gY2hlY2tfZXJyOworCX0KIAorCXN0YXR1cyA9IG9jZnMyX3Rlc3RfaW5vZGVfYml0KG9zYiwgYmxrbm8sICZzZXQpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgPT0gLUVJTlZBTCkgeworCQkJLyoKKwkJCSAqIFRoZSBibGtubyBORlMgZ2F2ZSB1cyBkb2Vzbid0IGV2ZW4gc2hvdyB1cAorCQkJICogYXMgYW4gaW5vZGUsIHdlIHJldHVybiAtRVNUQUxFIHRvIGJlCisJCQkgKiBuaWNlCisJCQkgKi8KKwkJCW1sb2coMCwgInRlc3QgaW5vZGUgYml0IGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJCXN0YXR1cyA9IC1FU1RBTEU7CisJCX0gZWxzZSB7CisJCQltbG9nKE1MX0VSUk9SLCAidGVzdCBpbm9kZSBiaXQgZmFpbGVkICVkXG4iLCBzdGF0dXMpOworCQl9CisJCWdvdG8gdW5sb2NrX25mc19zeW5jOworCX0KKworCS8qIElmIHRoZSBpbm9kZSBhbGxvY2F0b3IgYml0IGlzIGNsZWFyLCB0aGlzIGlub2RlIG11c3QgYmUgc3RhbGUgKi8KKwlpZiAoIXNldCkgeworCQltbG9nKDAsICJpbm9kZSAlbGx1IHN1YmFsbG9jIGJpdCBpcyBjbGVhclxuIiwgYmxrbm8pOworCQlzdGF0dXMgPSAtRVNUQUxFOworCQlnb3RvIHVubG9ja19uZnNfc3luYzsKKwl9CisKKwlpbm9kZSA9IG9jZnMyX2lnZXQob3NiLCBibGtubywgMCwgMCk7CisKK3VubG9ja19uZnNfc3luYzoKKwlvY2ZzMl9uZnNfc3luY191bmxvY2sob3NiLCAxKTsKKworY2hlY2tfZXJyOgorCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgPT0gLUVTVEFMRSkgeworCQkJbWxvZygwLCAic3RhbGUgaW5vZGUgaW5vOiAlbGx1IGdlbmVyYXRpb246ICV1XG4iLAorCQkJICAgICBibGtubywgaGFuZGxlLT5paF9nZW5lcmF0aW9uKTsKKwkJfQorCQlyZXN1bHQgPSBFUlJfUFRSKHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoSVNfRVJSKGlub2RlKSkgeworCQltbG9nX2Vycm5vKFBUUl9FUlIoaW5vZGUpKTsKKwkJcmVzdWx0ID0gKHZvaWQgKilpbm9kZTsKKwkJZ290byBiYWlsOworCX0KKworY2hlY2tfZ2VuOgogCWlmIChoYW5kbGUtPmloX2dlbmVyYXRpb24gIT0gaW5vZGUtPmlfZ2VuZXJhdGlvbikgewogCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CisJCW1sb2coMCwgInN0YWxlIGlub2RlIGlubzogJWxsdSBnZW5lcmF0aW9uOiAldVxuIiwgYmxrbm8sCisJCSAgICAgaGFuZGxlLT5paF9nZW5lcmF0aW9uKTsKKwkJcmVzdWx0ID0gRVJSX1BUUigtRVNUQUxFKTsKKwkJZ290byBiYWlsOwogCX0KIAogCXJlc3VsdCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIAlpZiAoIUlTX0VSUihyZXN1bHQpKQogCQlyZXN1bHQtPmRfb3AgPSAmb2NmczJfZGVudHJ5X29wczsKKwllbHNlCisJCW1sb2dfZXJybm8oUFRSX0VSUihyZXN1bHQpKTsKIAorYmFpbDoKIAltbG9nX2V4aXRfcHRyKHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDIyOWU3MDcuLjEwZTFmYTggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIm9jZnMyLmgiCiAKICNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImRpci5oIgogI2luY2x1ZGUgImJsb2NrY2hlY2suaCIKICNpbmNsdWRlICJkbG1nbHVlLmgiCiAjaW5jbHVkZSAiZXh0ZW50X21hcC5oIgpAQCAtMTEyLDYgKzExMywxNyBAQAogCQlvaS0+aXBfYXR0ciB8PSBPQ0ZTMl9ESVJTWU5DX0ZMOwogfQogCitzdHJ1Y3QgaW5vZGUgKm9jZnMyX2lsb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGJsa25vKQoreworCXN0cnVjdCBvY2ZzMl9maW5kX2lub2RlX2FyZ3MgYXJnczsKKworCWFyZ3MuZmlfYmxrbm8gPSBibGtubzsKKwlhcmdzLmZpX2ZsYWdzID0gMDsKKwlhcmdzLmZpX2lubyA9IGlub19mcm9tX2Jsa25vKHNiLCBibGtubyk7CisJYXJncy5maV9zeXNmaWxlX3R5cGUgPSAwOworCisJcmV0dXJuIGlsb29rdXA1KHNiLCBibGtubywgb2NmczJfZmluZF9hY3RvciwgJmFyZ3MpOworfQogc3RydWN0IGlub2RlICpvY2ZzMl9pZ2V0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxrbm8sIHVuc2lnbmVkIGZsYWdzLAogCQkJIGludCBzeXNmaWxlX3R5cGUpCiB7CkBAIC0yNzUsNyArMjg3LDcgQEAKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGZlLT5pX2Jsa25vKSk7CiAKLQlpbm9kZS0+aV9ubGluayA9IGxlMTZfdG9fY3B1KGZlLT5pX2xpbmtzX2NvdW50KTsKKwlpbm9kZS0+aV9ubGluayA9IG9jZnMyX3JlYWRfbGlua3NfY291bnQoZmUpOwogCiAJaWYgKGZlLT5pX2ZsYWdzICYgY3B1X3RvX2xlMzIoT0NGUzJfU1lTVEVNX0ZMKSkgewogCQlPQ0ZTMl9JKGlub2RlKS0+aXBfZmxhZ3MgfD0gT0NGUzJfSU5PREVfU1lTVEVNX0ZJTEU7CkBAIC0zNTEsNiArMzYzLDggQEAKIAogCW9jZnMyX3NldF9pbm9kZV9mbGFncyhpbm9kZSk7CiAKKwlPQ0ZTMl9JKGlub2RlKS0+aXBfbGFzdF91c2VkX3Nsb3QgPSAwOworCU9DRlMyX0koaW5vZGUpLT5pcF9sYXN0X3VzZWRfZ3JvdXAgPSAwOwogCW1sb2dfZXhpdF92b2lkKCk7CiB9CiAKQEAgLTYwNiw3ICs2MjAsNyBAQAogCX0KIAogCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfREVMRVRFX0lOT0RFX0NSRURJVFMgKwotCQkJCQlvY2ZzMl9xdW90YV90cmFuc19jcmVkaXRzKGlub2RlLT5pX3NiKSk7CisJCQkJICAgb2NmczJfcXVvdGFfdHJhbnNfY3JlZGl0cyhpbm9kZS0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQlzdGF0dXMgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTc0MCw2ICs3NTQsMTUgQEAKIAkJZ290byBiYWlsX3VubG9ja19kaXI7CiAJfQogCisJLyogUmVtb3ZlIGFueSBkaXIgaW5kZXggdHJlZSAqLworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCXN0YXR1cyA9IG9jZnMyX2R4X2Rpcl90cnVuY2F0ZShpbm9kZSwgZGlfYmgpOworCQlpZiAoc3RhdHVzKSB7CisJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCQlnb3RvIGJhaWxfdW5sb2NrX2RpcjsKKwkJfQorCX0KKwogCS8qRnJlZSBleHRlbmRlZCBhdHRyaWJ1dGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlub2RlLiovCiAJc3RhdHVzID0gb2NmczJfeGF0dHJfcmVtb3ZlKGlub2RlLCBkaV9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTk0OSw2ICs5NzIsMTcgQEAKIAkJZ290byBiYWlsOwogCX0KIAorCS8qCisJICogU3luY2hyb25pemUgdXMgYWdhaW5zdCBvY2ZzMl9nZXRfZGVudHJ5LiBXZSB0YWtlIHRoaXMgaW4KKwkgKiBzaGFyZWQgbW9kZSBzbyB0aGF0IGFsbCBub2RlcyBjYW4gc3RpbGwgY29uY3VycmVudGx5CisJICogcHJvY2VzcyBkZWxldGVzLgorCSAqLworCXN0YXR1cyA9IG9jZnMyX25mc19zeW5jX2xvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nKE1MX0VSUk9SLCAiZ2V0dGluZyBuZnMgc3luYyBsb2NrKFBSKSBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCW9jZnMyX2NsZWFudXBfZGVsZXRlX2lub2RlKGlub2RlLCAwKTsKKwkJZ290byBiYWlsX3VuYmxvY2s7CisJfQogCS8qIExvY2sgZG93biB0aGUgaW5vZGUuIFRoaXMgZ2l2ZXMgdXMgYW4gdXAgdG8gZGF0ZSB2aWV3IG9mCiAJICogaXQncyBtZXRhZGF0YSAoZm9yIHZlcmlmaWNhdGlvbiksIGFuZCBhbGxvd3MgdXMgdG8KIAkgKiBzZXJpYWxpemUgZGVsZXRlX2lub2RlIG9uIG11bHRpcGxlIG5vZGVzLgpAQCAtOTYyLDcgKzk5Niw3IEBACiAJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJb2NmczJfY2xlYW51cF9kZWxldGVfaW5vZGUoaW5vZGUsIDApOwotCQlnb3RvIGJhaWxfdW5ibG9jazsKKwkJZ290byBiYWlsX3VubG9ja19uZnNfc3luYzsKIAl9CiAKIAkvKiBRdWVyeSB0aGUgY2x1c3Rlci4gVGhpcyB3aWxsIGJlIHRoZSBmaW5hbCBkZWNpc2lvbiBtYWRlCkBAIC0xMDA1LDYgKzEwMzksMTAgQEAKIGJhaWxfdW5sb2NrX2lub2RlOgogCW9jZnMyX2lub2RlX3VubG9jayhpbm9kZSwgMSk7CiAJYnJlbHNlKGRpX2JoKTsKKworYmFpbF91bmxvY2tfbmZzX3N5bmM6CisJb2NmczJfbmZzX3N5bmNfdW5sb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgMCk7CisKIGJhaWxfdW5ibG9jazoKIAlzdGF0dXMgPSBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZHNldCwgTlVMTCk7CiAJaWYgKHN0YXR1cyA8IDApCkBAIC0xMjA1LDcgKzEyNDMsNyBAQAogCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CiAKIAlmZS0+aV9zaXplID0gY3B1X3RvX2xlNjQoaV9zaXplX3JlYWQoaW5vZGUpKTsKLQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGlub2RlLT5pX25saW5rKTsKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZmUsIGlub2RlLT5pX25saW5rKTsKIAlmZS0+aV91aWQgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV91aWQpOwogCWZlLT5pX2dpZCA9IGNwdV90b19sZTMyKGlub2RlLT5pX2dpZCk7CiAJZmUtPmlfbW9kZSA9IGNwdV90b19sZTE2KGlub2RlLT5pX21vZGUpOwpAQCAtMTI0Miw3ICsxMjgwLDcgQEAKIAlPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzID0gbGUxNl90b19jcHUoZmUtPmlfZHluX2ZlYXR1cmVzKTsKIAlvY2ZzMl9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOwogCWlfc2l6ZV93cml0ZShpbm9kZSwgbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpOwotCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUoZmUtPmlfbGlua3NfY291bnQpOworCWlub2RlLT5pX25saW5rID0gb2NmczJfcmVhZF9saW5rc19jb3VudChmZSk7CiAJaW5vZGUtPmlfdWlkID0gbGUzMl90b19jcHUoZmUtPmlfdWlkKTsKIAlpbm9kZS0+aV9naWQgPSBsZTMyX3RvX2NwdShmZS0+aV9naWQpOwogCWlub2RlLT5pX21vZGUgPSBsZTE2X3RvX2NwdShmZS0+aV9tb2RlKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmggYi9mcy9vY2ZzMi9pbm9kZS5oCmluZGV4IGViM2MzMDIuLmVhNzE1MjUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmgKKysrIGIvZnMvb2NmczIvaW5vZGUuaApAQCAtNzIsNiArNzIsMTAgQEAKIAogCXN0cnVjdCBpbm9kZQkJCXZmc19pbm9kZTsKIAlzdHJ1Y3QgamJkMl9pbm9kZQkJaXBfamlub2RlOworCisJLyogT25seSB2YWxpZCBpZiB0aGUgaW5vZGUgaXMgdGhlIGRpci4gKi8KKwl1MzIJCQkJaXBfbGFzdF91c2VkX3Nsb3Q7CisJdTY0CQkJCWlwX2xhc3RfdXNlZF9ncm91cDsKIH07CiAKIC8qCkBAIC0xMjQsNiArMTI4LDcgQEAKIC8qIEZsYWdzIGZvciBvY2ZzMl9pZ2V0KCkgKi8KICNkZWZpbmUgT0NGUzJfRklfRkxBR19TWVNGSUxFCQkweDEKICNkZWZpbmUgT0NGUzJfRklfRkxBR19PUlBIQU5fUkVDT1ZFUlkJMHgyCitzdHJ1Y3QgaW5vZGUgKm9jZnMyX2lsb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGZlb2ZmKTsKIHN0cnVjdCBpbm9kZSAqb2NmczJfaWdldChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGZlb2ZmLCB1bnNpZ25lZCBmbGFncywKIAkJCSBpbnQgc3lzZmlsZV90eXBlKTsKIGludCBvY2ZzMl9pbm9kZV9pbml0X3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggNTdkN2QyNS4uYTIwYTBmMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtNjUsNiArNjUsMTEgQEAKIHN0YXRpYyBpbnQgb2NmczJfcmVjb3Zlcl9vcnBoYW5zKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSBpbnQgc2xvdCk7CiBzdGF0aWMgaW50IG9jZnMyX2NvbW1pdF90aHJlYWQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIG9jZnMyX3F1ZXVlX3JlY292ZXJ5X2NvbXBsZXRpb24oc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwsCisJCQkJCSAgICBpbnQgc2xvdF9udW0sCisJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpsYV9kaW5vZGUsCisJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICp0bF9kaW5vZGUsCisJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcXVvdGFfcmVjb3ZlcnkgKnFyZWMpOwogCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl93YWl0X29uX21vdW50KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewpAQCAtNzYsMTggKzgxLDk3IEBACiAJcmV0dXJuIF9fb2NmczJfd2FpdF9vbl9tb3VudChvc2IsIDEpOwogfQogCi0KLQogLyoKLSAqIFRoZSByZWNvdmVyeV9saXN0IGlzIGEgc2ltcGxlIGxpbmtlZCBsaXN0IG9mIG5vZGUgbnVtYmVycyB0byByZWNvdmVyLgotICogSXQgaXMgcHJvdGVjdGVkIGJ5IHRoZSByZWNvdmVyeV9sb2NrLgorICogVGhpcyByZXBsYXlfbWFwIGlzIHRvIHRyYWNrIG9ubGluZS9vZmZsaW5lIHNsb3RzLCBzbyB3ZSBjb3VsZCByZWNvdmVyCisgKiBvZmZsaW5lIHNsb3RzIGR1cmluZyByZWNvdmVyeSBhbmQgbW91bnQKICAqLwogCi1zdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwIHsKLQl1bnNpZ25lZCBpbnQgcm1fdXNlZDsKLQl1bnNpZ25lZCBpbnQgKnJtX2VudHJpZXM7CitlbnVtIG9jZnMyX3JlcGxheV9zdGF0ZSB7CisJUkVQTEFZX1VOTkVFREVEID0gMCwJLyogUmVwbGF5IGlzIG5vdCBuZWVkZWQsIHNvIGlnbm9yZSB0aGlzIG1hcCAqLworCVJFUExBWV9ORUVERUQsIAkJLyogUmVwbGF5IHNsb3RzIG1hcmtlZCBpbiBybV9yZXBsYXlfc2xvdHMgKi8KKwlSRVBMQVlfRE9ORSAJCS8qIFJlcGxheSB3YXMgYWxyZWFkeSBxdWV1ZWQgKi8KIH07CiAKK3N0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwIHsKKwl1bnNpZ25lZCBpbnQgcm1fc2xvdHM7CisJZW51bSBvY2ZzMl9yZXBsYXlfc3RhdGUgcm1fc3RhdGU7CisJdW5zaWduZWQgY2hhciBybV9yZXBsYXlfc2xvdHNbMF07Cit9OworCit2b2lkIG9jZnMyX3JlcGxheV9tYXBfc2V0X3N0YXRlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgc3RhdGUpCit7CisJaWYgKCFvc2ItPnJlcGxheV9tYXApCisJCXJldHVybjsKKworCS8qIElmIHdlJ3ZlIGFscmVhZHkgcXVldWVkIHRoZSByZXBsYXksIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgdG8gZG8gKi8KKwlpZiAob3NiLT5yZXBsYXlfbWFwLT5ybV9zdGF0ZSA9PSBSRVBMQVlfRE9ORSkKKwkJcmV0dXJuOworCisJb3NiLT5yZXBsYXlfbWFwLT5ybV9zdGF0ZSA9IHN0YXRlOworfQorCitpbnQgb2NmczJfY29tcHV0ZV9yZXBsYXlfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJc3RydWN0IG9jZnMyX3JlcGxheV9tYXAgKnJlcGxheV9tYXA7CisJaW50IGksIG5vZGVfbnVtOworCisJLyogSWYgcmVwbGF5IG1hcCBpcyBhbHJlYWR5IHNldCwgd2UgZG9uJ3QgZG8gaXQgYWdhaW4gKi8KKwlpZiAob3NiLT5yZXBsYXlfbWFwKQorCQlyZXR1cm4gMDsKKworCXJlcGxheV9tYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVwbGF5X21hcCkgKworCQkJICAgICAob3NiLT5tYXhfc2xvdHMgKiBzaXplb2YoY2hhcikpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcmVwbGF5X21hcCkgeworCQltbG9nX2Vycm5vKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCisJcmVwbGF5X21hcC0+cm1fc2xvdHMgPSBvc2ItPm1heF9zbG90czsKKwlyZXBsYXlfbWFwLT5ybV9zdGF0ZSA9IFJFUExBWV9VTk5FRURFRDsKKworCS8qIHNldCBybV9yZXBsYXlfc2xvdHMgZm9yIG9mZmxpbmUgc2xvdChzKSAqLworCWZvciAoaSA9IDA7IGkgPCByZXBsYXlfbWFwLT5ybV9zbG90czsgaSsrKSB7CisJCWlmIChvY2ZzMl9zbG90X3RvX25vZGVfbnVtX2xvY2tlZChvc2IsIGksICZub2RlX251bSkgPT0gLUVOT0VOVCkKKwkJCXJlcGxheV9tYXAtPnJtX3JlcGxheV9zbG90c1tpXSA9IDE7CisJfQorCisJb3NiLT5yZXBsYXlfbWFwID0gcmVwbGF5X21hcDsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb2NmczJfcXVldWVfcmVwbGF5X3Nsb3RzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXN0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwICpyZXBsYXlfbWFwID0gb3NiLT5yZXBsYXlfbWFwOworCWludCBpOworCisJaWYgKCFyZXBsYXlfbWFwKQorCQlyZXR1cm47CisKKwlpZiAocmVwbGF5X21hcC0+cm1fc3RhdGUgIT0gUkVQTEFZX05FRURFRCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJlcGxheV9tYXAtPnJtX3Nsb3RzOyBpKyspCisJCWlmIChyZXBsYXlfbWFwLT5ybV9yZXBsYXlfc2xvdHNbaV0pCisJCQlvY2ZzMl9xdWV1ZV9yZWNvdmVyeV9jb21wbGV0aW9uKG9zYi0+am91cm5hbCwgaSwgTlVMTCwKKwkJCQkJCQlOVUxMLCBOVUxMKTsKKwlyZXBsYXlfbWFwLT5ybV9zdGF0ZSA9IFJFUExBWV9ET05FOworfQorCit2b2lkIG9jZnMyX2ZyZWVfcmVwbGF5X3Nsb3RzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXN0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwICpyZXBsYXlfbWFwID0gb3NiLT5yZXBsYXlfbWFwOworCisJaWYgKCFvc2ItPnJlcGxheV9tYXApCisJCXJldHVybjsKKworCWtmcmVlKHJlcGxheV9tYXApOworCW9zYi0+cmVwbGF5X21hcCA9IE5VTEw7Cit9CisKIGludCBvY2ZzMl9yZWNvdmVyeV9pbml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewogCXN0cnVjdCBvY2ZzMl9yZWNvdmVyeV9tYXAgKnJtOwpAQCAtNDk2LDYgKzU4MCwyMiBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGRyX3RyaWdnZXJzID0geworCS5vdF90cmlnZ2VycyA9IHsKKwkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCisJCS50X2Fib3J0ID0gb2NmczJfYWJvcnRfdHJpZ2dlciwKKwl9LAorCS5vdF9vZmZzZXQJPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jaywgZHJfY2hlY2spLAorfTsKKworc3RhdGljIHN0cnVjdCBvY2ZzMl90cmlnZ2VycyBkbF90cmlnZ2VycyA9IHsKKwkub3RfdHJpZ2dlcnMgPSB7CisJCS50X2NvbW1pdCA9IG9jZnMyX2NvbW1pdF90cmlnZ2VyLAorCQkudF9hYm9ydCA9IG9jZnMyX2Fib3J0X3RyaWdnZXIsCisJfSwKKwkub3Rfb2Zmc2V0CT0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2R4X2xlYWYsIGRsX2NoZWNrKSwKK307CisKIHN0YXRpYyBpbnQgX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCkBAIC02MDAsNiArNzAwLDIwIEBACiAJCQkJICAgICAgdHlwZSk7CiB9CiAKK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQoreworCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZHJfdHJpZ2dlcnMsCisJCQkJICAgICAgdHlwZSk7Cit9CisKK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQoreworCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZGxfdHJpZ2dlcnMsCisJCQkJICAgICAgdHlwZSk7Cit9CisKIGludCBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewpAQCAtMTE3NiwyNCArMTI5MCwyNCBAQAogfQogCiAvKiBDYWxsZWQgYnkgdGhlIG1vdW50IGNvZGUgdG8gcXVldWUgcmVjb3ZlcnkgdGhlIGxhc3QgcGFydCBvZgotICogcmVjb3ZlcnkgZm9yIGl0J3Mgb3duIHNsb3QuICovCisgKiByZWNvdmVyeSBmb3IgaXQncyBvd24gYW5kIG9mZmxpbmUgc2xvdChzKS4gKi8KIHZvaWQgb2NmczJfY29tcGxldGVfbW91bnRfcmVjb3Zlcnkoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CiAJc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwgPSBvc2ItPmpvdXJuYWw7CiAKLQlpZiAob3NiLT5kaXJ0eSkgewotCQkvKiBObyBuZWVkIHRvIHF1ZXVlIHVwIG91ciB0cnVuY2F0ZV9sb2cgYXMgcmVndWxhcgotCQkgKiBjbGVhbnVwIHdpbGwgY2F0Y2ggdGhhdC4gKi8KLQkJb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihqb3VybmFsLAotCQkJCQkJb3NiLT5zbG90X251bSwKLQkJCQkJCW9zYi0+bG9jYWxfYWxsb2NfY29weSwKLQkJCQkJCU5VTEwsCi0JCQkJCQlOVUxMKTsKLQkJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMCk7CisJLyogTm8gbmVlZCB0byBxdWV1ZSB1cCBvdXIgdHJ1bmNhdGVfbG9nIGFzIHJlZ3VsYXIgY2xlYW51cCB3aWxsIGNhdGNoCisJICogdGhhdCAqLworCW9jZnMyX3F1ZXVlX3JlY292ZXJ5X2NvbXBsZXRpb24oam91cm5hbCwgb3NiLT5zbG90X251bSwKKwkJCQkJb3NiLT5sb2NhbF9hbGxvY19jb3B5LCBOVUxMLCBOVUxMKTsKKwlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAwKTsKIAotCQlvc2ItPmxvY2FsX2FsbG9jX2NvcHkgPSBOVUxMOwotCQlvc2ItPmRpcnR5ID0gMDsKLQl9CisJb3NiLT5sb2NhbF9hbGxvY19jb3B5ID0gTlVMTDsKKwlvc2ItPmRpcnR5ID0gMDsKKworCS8qIHF1ZXVlIHRvIHJlY292ZXIgb3JwaGFuIHNsb3RzIGZvciBhbGwgb2ZmbGluZSBzbG90cyAqLworCW9jZnMyX3JlcGxheV9tYXBfc2V0X3N0YXRlKG9zYiwgUkVQTEFZX05FRURFRCk7CisJb2NmczJfcXVldWVfcmVwbGF5X3Nsb3RzKG9zYik7CisJb2NmczJfZnJlZV9yZXBsYXlfc2xvdHMob3NiKTsKIH0KIAogdm9pZCBvY2ZzMl9jb21wbGV0ZV9xdW90YV9yZWNvdmVyeShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKQEAgLTEyMzYsNiArMTM1MCwxNCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJc3RhdHVzID0gb2NmczJfY29tcHV0ZV9yZXBsYXlfc2xvdHMob3NiKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCisJLyogcXVldWUgcmVjb3ZlcnkgZm9yIG91ciBvd24gc2xvdCAqLworCW9jZnMyX3F1ZXVlX3JlY292ZXJ5X2NvbXBsZXRpb24ob3NiLT5qb3VybmFsLCBvc2ItPnNsb3RfbnVtLCBOVUxMLAorCQkJCQlOVUxMLCBOVUxMKTsKKwogCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CiAJd2hpbGUgKHJtLT5ybV91c2VkKSB7CiAJCS8qIEl0J3MgYWx3YXlzIHNhZmUgdG8gcmVtb3ZlIGVudHJ5IHplcm8sIGFzIHdlIHdvbid0CkBAIC0xMzAxLDExICsxNDIzLDggQEAKIAogCW9jZnMyX3N1cGVyX3VubG9jayhvc2IsIDEpOwogCi0JLyogV2UgYWx3YXlzIHJ1biByZWNvdmVyeSBvbiBvdXIgb3duIG9ycGhhbiBkaXIgLSB0aGUgZGVhZAotCSAqIG5vZGUocykgbWF5IGhhdmUgZGlzYWxsb3dkIGEgcHJldmlvcyBpbm9kZSBkZWxldGUuIFJlLXByb2Nlc3NpbmcKLQkgKiBpcyB0aGVyZWZvcmUgcmVxdWlyZWQuICovCi0Jb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihvc2ItPmpvdXJuYWwsIG9zYi0+c2xvdF9udW0sIE5VTEwsCi0JCQkJCU5VTEwsIE5VTEwpOworCS8qIHF1ZXVlIHJlY292ZXJ5IGZvciBvZmZsaW5lIHNsb3RzICovCisJb2NmczJfcXVldWVfcmVwbGF5X3Nsb3RzKG9zYik7CiAKIGJhaWw6CiAJbXV0ZXhfbG9jaygmb3NiLT5yZWNvdmVyeV9sb2NrKTsKQEAgLTEzMTQsNiArMTQzMyw3IEBACiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKKwlvY2ZzMl9mcmVlX3JlcGxheV9zbG90cyhvc2IpOwogCW9zYi0+cmVjb3ZlcnlfdGhyZWFkX3Rhc2sgPSBOVUxMOwogCW1iKCk7IC8qIHN5bmMgd2l0aCBvY2ZzMl9yZWNvdmVyeV90aHJlYWRfcnVubmluZyAqLwogCXdha2VfdXAoJm9zYi0+cmVjb3ZlcnlfZXZlbnQpOwpAQCAtMTQ2NSw2ICsxNTg1LDkgQEAKIAkJZ290byBkb25lOwogCX0KIAorCS8qIHdlIG5lZWQgdG8gcnVuIGNvbXBsZXRlIHJlY292ZXJ5IGZvciBvZmZsaW5lIG9ycGhhbiBzbG90cyAqLworCW9jZnMyX3JlcGxheV9tYXBfc2V0X3N0YXRlKG9zYiwgUkVQTEFZX05FRURFRCk7CisKIAltbG9nKE1MX05PVElDRSwgIlJlY292ZXJpbmcgbm9kZSAlZCBmcm9tIHNsb3QgJWQgb24gZGV2aWNlICgldSwldSlcbiIsCiAJICAgICBub2RlX251bSwgc2xvdF9udW0sCiAJICAgICBNQUpPUihvc2ItPnNiLT5zX2RldiksIE1JTk9SKG9zYi0+c2ItPnNfZGV2KSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmggYi9mcy9vY2ZzMi9qb3VybmFsLmgKaW5kZXggMTcyODUwYS4uNjE5ZGQ3ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5oCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuaApAQCAtMzgsNiArMzgsMTcgQEAKIHN0cnVjdCBvY2ZzMl9zdXBlcjsKIHN0cnVjdCBvY2ZzMl9kaW5vZGU7CiAKKy8qCisgKiBUaGUgcmVjb3ZlcnlfbGlzdCBpcyBhIHNpbXBsZSBsaW5rZWQgbGlzdCBvZiBub2RlIG51bWJlcnMgdG8gcmVjb3Zlci4KKyAqIEl0IGlzIHByb3RlY3RlZCBieSB0aGUgcmVjb3ZlcnlfbG9jay4KKyAqLworCitzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwIHsKKwl1bnNpZ25lZCBpbnQgcm1fdXNlZDsKKwl1bnNpZ25lZCBpbnQgKnJtX2VudHJpZXM7Cit9OworCisKIHN0cnVjdCBvY2ZzMl9qb3VybmFsIHsKIAllbnVtIG9jZnMyX2pvdXJuYWxfc3RhdGUgICBqX3N0YXRlOyAgICAvKiBKb3VybmFscyBjdXJyZW50IHN0YXRlICAgKi8KIApAQCAtMTM5LDYgKzE1MCw3IEBACiBpbnQgb2NmczJfcmVjb3ZlcnlfaW5pdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiB2b2lkIG9jZnMyX3JlY292ZXJ5X2V4aXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwogCitpbnQgb2NmczJfY29tcHV0ZV9yZXBsYXlfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwogLyoKICAqICBKb3VybmFsIENvbnRyb2w6CiAgKiAgSW5pdGlhbGl6ZSwgTG9hZCwgU2h1dGRvd24sIFdpcGUgYSBqb3VybmFsLgpAQCAtMjY2LDYgKzI3OCwxMiBAQAogLyogZGlyYmxvY2sgKi8KIGludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKKy8qIG9jZnMyX2R4X3Jvb3RfYmxvY2sgKi8KK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKKy8qIG9jZnMyX2R4X2xlYWYgKi8KK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIEFueXRoaW5nIHRoYXQgaGFzIG5vIGVjYyAqLwogaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwpAQCAtMzY4LDE0ICszODYsMjkgQEAKIH0KIAogLyogZGF0YSBibG9jayBmb3IgbmV3IGRpci9zeW1saW5rLCAyIGZvciBiaXRtYXAgdXBkYXRlcyAoYml0bWFwIGZlICsKLSAqIGJpdG1hcCBibG9jayBmb3IgdGhlIG5ldyBiaXQpICovCi0jZGVmaW5lIE9DRlMyX0RJUl9MSU5LX0FERElUSU9OQUxfQ1JFRElUUyAoMSArIDIpCisgKiBiaXRtYXAgYmxvY2sgZm9yIHRoZSBuZXcgYml0KSBkeF9yb290IHVwZGF0ZSBmb3IgZnJlZSBsaXN0ICovCisjZGVmaW5lIE9DRlMyX0RJUl9MSU5LX0FERElUSU9OQUxfQ1JFRElUUyAoMSArIDIgKyAxKQogCi0vKiBwYXJlbnQgZmUsIHBhcmVudCBibG9jaywgbmV3IGZpbGUgZW50cnksIGlub2RlIGFsbG9jIGZlLCBpbm9kZSBhbGxvYwotICogZ3JvdXAgZGVzY3JpcHRvciArIG1rZGlyL3N5bWxpbmsgYmxvY2tzICsgcXVvdGEgdXBkYXRlICovCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9ta25vZF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9hZGRfZGlyX2luZGV4X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlyZXR1cm4gMyArIE9DRlMyX1NVQkFMTE9DX0FMTE9DICsgT0NGUzJfRElSX0xJTktfQURESVRJT05BTF9DUkVESVRTICsKKwkvKiAxIGJsb2NrIGZvciBpbmRleCwgMiBhbGxvY3MgKGRhdGEsIG1ldGFkYXRhKSwgMSBjbHVzdGVycworCSAqIHdvcnRoIG9mIGJsb2NrcyBmb3IgaW5pdGlhbCBleHRlbnQuICovCisJcmV0dXJuIDEgKyAyICogT0NGUzJfU1VCQUxMT0NfQUxMT0MgKworCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIDEpOworfQorCisvKiBwYXJlbnQgZmUsIHBhcmVudCBibG9jaywgbmV3IGZpbGUgZW50cnksIGluZGV4IGxlYWYsIGlub2RlIGFsbG9jIGZlLCBpbm9kZQorICogYWxsb2MgZ3JvdXAgZGVzY3JpcHRvciArIG1rZGlyL3N5bWxpbmsgYmxvY2tzICsgZGlyIGJsb2NrcyArIHhhdHRyCisgKiBibG9ja3MgKyBxdW90YSB1cGRhdGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX2RpciwKKwkJCQkgICAgICBpbnQgeGF0dHJfY3JlZGl0cykKK3sKKwlpbnQgZGlyX2NyZWRpdHMgPSBPQ0ZTMl9ESVJfTElOS19BRERJVElPTkFMX0NSRURJVFM7CisKKwlpZiAoaXNfZGlyKQorCQlkaXJfY3JlZGl0cyArPSBvY2ZzMl9hZGRfZGlyX2luZGV4X2NyZWRpdHMoc2IpOworCisJcmV0dXJuIDQgKyBPQ0ZTMl9TVUJBTExPQ19BTExPQyArIGRpcl9jcmVkaXRzICsgeGF0dHJfY3JlZGl0cyArCiAJICAgICAgIG9jZnMyX3F1b3RhX3RyYW5zX2NyZWRpdHMoc2IpOwogfQogCkBAIC0zODgsMzEgKzQyMSwzMSBAQAogI2RlZmluZSBPQ0ZTMl9TSU1QTEVfRElSX0VYVEVORF9DUkVESVRTICgyKQogCiAvKiBmaWxlIHVwZGF0ZSAobmxpbmssIGV0YykgKyBkaXJlY3RvcnkgbXRpbWUvY3RpbWUgKyBkaXIgZW50cnkgYmxvY2sgKyBxdW90YQotICogdXBkYXRlIG9uIGRpciAqLworICogdXBkYXRlIG9uIGRpciArIGluZGV4IGxlYWYgKyBkeCByb290IHVwZGF0ZSBmb3IgZnJlZSBsaXN0ICovCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9saW5rX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlyZXR1cm4gMipPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDEgKworCXJldHVybiAyKk9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMyArCiAJICAgICAgIG9jZnMyX3F1b3RhX3RyYW5zX2NyZWRpdHMoc2IpOwogfQogCiAvKiBpbm9kZSArIGRpciBpbm9kZSAoaWYgd2UgdW5saW5rIGEgZGlyKSwgKyBkaXIgZW50cnkgYmxvY2sgKyBvcnBoYW4KLSAqIGRpciBpbm9kZSBsaW5rICovCisgKiBkaXIgaW5vZGUgbGluayArIGRpciBpbm9kZSBpbmRleCBsZWFmICsgZGlyIGluZGV4IHJvb3QgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3VubGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJLyogVGhlIHF1b3RhIHVwZGF0ZSBmcm9tIG9jZnMyX2xpbmtfY3JlZGl0cyBpcyB1bnVzZWQgaGVyZS4uLiAqLwotCXJldHVybiAyICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAxICsgb2NmczJfbGlua19jcmVkaXRzKHNiKTsKKwlyZXR1cm4gMiAqIE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMyArIG9jZnMyX2xpbmtfY3JlZGl0cyhzYik7CiB9CiAKIC8qIGRpbm9kZSArIG9ycGhhbiBkaXIgZGlub2RlICsgaW5vZGUgYWxsb2MgZGlub2RlICsgb3JwaGFuIGRpciBlbnRyeSArCi0gKiBpbm9kZSBhbGxvYyBncm91cCBkZXNjcmlwdG9yICovCi0jZGVmaW5lIE9DRlMyX0RFTEVURV9JTk9ERV9DUkVESVRTICgzICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAxICsgMSkKKyAqIGlub2RlIGFsbG9jIGdyb3VwIGRlc2NyaXB0b3IgKyBvcnBoYW4gZGlyIGluZGV4IGxlYWYgKi8KKyNkZWZpbmUgT0NGUzJfREVMRVRFX0lOT0RFX0NSRURJVFMgKDMgKiBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDMpCiAKIC8qIGRpbm9kZSB1cGRhdGUsIG9sZCBkaXIgZGlub2RlIHVwZGF0ZSwgbmV3IGRpciBkaW5vZGUgdXBkYXRlLCBvbGQKICAqIGRpciBkaXIgZW50cnksIG5ldyBkaXIgZGlyIGVudHJ5LCBkaXIgZW50cnkgdXBkYXRlIGZvciByZW5hbWluZwotICogZGlyZWN0b3J5ICsgdGFyZ2V0IHVubGluayAqLworICogZGlyZWN0b3J5ICsgdGFyZ2V0IHVubGluayArIDMgeCBkaXIgaW5kZXggbGVhdmVzICovCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9yZW5hbWVfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXJldHVybiAzICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAzICsgb2NmczJfdW5saW5rX2NyZWRpdHMoc2IpOworCXJldHVybiAzICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyA2ICsgb2NmczJfdW5saW5rX2NyZWRpdHMoc2IpOwogfQogCiAvKiBnbG9iYWwgYml0bWFwIGRpbm9kZSwgZ3JvdXAgZGVzYy4sIHJlbGlua2VkIGdyb3VwLApAQCAtNDIyLDYgKzQ1NSwyMCBAQAogCQkJCQkgICsgT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgXAogCQkJCQkgICsgT0NGUzJfWEFUVFJfQkxPQ0tfVVBEQVRFX0NSRURJVFMpCiAKKy8qIGlub2RlIHVwZGF0ZSwgcmVtb3ZhbCBvZiBkeCByb290IGJsb2NrIGZyb20gYWxsb2NhdG9yICovCisjZGVmaW5lIE9DRlMyX0RYX1JPT1RfUkVNT1ZFX0NSRURJVFMgKE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsJXAorCQkJCSAgICAgIE9DRlMyX1NVQkFMTE9DX0ZSRUUpCisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfZHhpX2V4cGFuZF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IGNyZWRpdHMgPSAxICsgT0NGUzJfU1VCQUxMT0NfQUxMT0M7CisKKwljcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhzYiwgMSk7CisJY3JlZGl0cyArPSBvY2ZzMl9xdW90YV90cmFuc19jcmVkaXRzKHNiKTsKKworCXJldHVybiBjcmVkaXRzOworfQorCiAvKgogICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgcm9vdF9lbCBpcyB0aGUgcm9vdAogICogb2YgZXh0ZW50IHRyZWUuIFNvIGZvciBhbiBpbm9kZSwgaXQgc2hvdWxkIGJlICZmZS0+aWQyLmlfbGlzdC4gT3RoZXJ3aXNlCkBAIC00NTcsNyArNTA0LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgb2NmczJfY2FsY19zeW1saW5rX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYik7CisJaW50IGJsb2NrcyA9IG9jZnMyX21rbm9kX2NyZWRpdHMoc2IsIDAsIDApOwogCiAJLyogbGlua3MgY2FuIGJlIGxvbmdlciB0aGFuIG9uZSBibG9jayBzbyB3ZSBtYXkgdXBkYXRlIG1hbnkKIAkgKiB3aXRoaW4gb3VyIHNpbmdsZSBhbGxvY2F0ZWQgZXh0ZW50LiAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCmluZGV4IGVjNzBjZGIuLmJhYzdlNmEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYworKysgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX0RJU0tfQUxMT0MKICNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KQEAgLTc1LDg0ICs3NCw2IEBACiBzdGF0aWMgaW50IG9jZnMyX2xvY2FsX2FsbG9jX3NsaWRlX3dpbmRvdyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkJICBzdHJ1Y3QgaW5vZGUgKmxvY2FsX2FsbG9jX2lub2RlKTsKIAotI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19TVEFUUwotCi1zdGF0aWMgaW50IG9jZnMyX2xhX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBMQV9ERUJVR19CVUZfU1oJUEFHRV9DQUNIRV9TSVpFCi0jZGVmaW5lIExBX0RFQlVHX1ZFUgkxCi1zdGF0aWMgc3NpemVfdCBvY2ZzMl9sYV9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdGF0aWMgREVGSU5FX01VVEVYKGxhX2RlYnVnX211dGV4KTsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgd3JpdHRlbiwgcmV0OwotCWNoYXIgKmJ1ZiA9IG9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmOwotCi0JbXV0ZXhfbG9jaygmbGFfZGVidWdfbXV0ZXgpOwotCW1lbXNldChidWYsIDAsIExBX0RFQlVHX0JVRl9TWik7Ci0KLQl3cml0dGVuID0gc25wcmludGYoYnVmLCBMQV9ERUJVR19CVUZfU1osCi0JCQkgICAiMHgleFx0MHglbGx4XHQldVx0JXVcdDB4JXhcbiIsCi0JCQkgICBMQV9ERUJVR19WRVIsCi0JCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW9zYi0+bGFfbGFzdF9nZCwKLQkJCSAgIG9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzLAotCQkJICAgb3NiLT5sb2NhbF9hbGxvY19iaXRzLCBvc2ItPmxvY2FsX2FsbG9jX3N0YXRlKTsKLQotCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHdyaXR0ZW4pOwotCi0JbXV0ZXhfdW5sb2NrKCZsYV9kZWJ1Z19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfbGFfZGVidWdfZm9wcyA9IHsKLQkub3BlbiA9CQlvY2ZzMl9sYV9kZWJ1Z19vcGVuLAotCS5yZWFkID0JCW9jZnMyX2xhX2RlYnVnX3JlYWQsCi19OwotCi1zdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmID0ga21hbGxvYyhMQV9ERUJVR19CVUZfU1osIEdGUF9OT0ZTKTsKLQlpZiAoIW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmKQotCQlyZXR1cm47Ci0KLQlvc2ItPmxvY2FsX2FsbG9jX2RlYnVnID0gZGVidWdmc19jcmVhdGVfZmlsZSgibG9jYWxfYWxsb2Nfc3RhdHMiLAotCQkJCQkJICAgICBTX0lGUkVHfFNfSVJVU1IsCi0JCQkJCQkgICAgIG9zYi0+b3NiX2RlYnVnX3Jvb3QsCi0JCQkJCQkgICAgIG9zYiwKLQkJCQkJCSAgICAgJm9jZnMyX2xhX2RlYnVnX2ZvcHMpOwotCWlmICghb3NiLT5sb2NhbF9hbGxvY19kZWJ1ZykgewotCQlrZnJlZShvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1Zik7Ci0JCW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9jZnMyX3NodXRkb3duX2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCWlmIChvc2ItPmxvY2FsX2FsbG9jX2RlYnVnKQotCQlkZWJ1Z2ZzX3JlbW92ZShvc2ItPmxvY2FsX2FsbG9jX2RlYnVnKTsKLQotCWlmIChvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1ZikKLQkJa2ZyZWUob3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYpOwotCi0Jb3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYgPSBOVUxMOwotCW9zYi0+bG9jYWxfYWxsb2NfZGVidWcgPSBOVUxMOwotfQotI2Vsc2UJLyogQ09ORklHX09DRlMyX0ZTX1NUQVRTICovCi1zdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCXJldHVybjsKLX0KLXN0YXRpYyB2b2lkIG9jZnMyX3NodXRkb3duX2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCXJldHVybjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9sYV9zdGF0ZV9lbmFibGVkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewogCXJldHVybiAob3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9PSBPQ0ZTMl9MQV9USFJPVFRMRUQgfHwKQEAgLTIyNiw4ICsxNDcsNiBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQlvY2ZzMl9pbml0X2xhX2RlYnVnKG9zYik7Ci0KIAlpZiAob3NiLT5sb2NhbF9hbGxvY19iaXRzID09IDApCiAJCWdvdG8gYmFpbDsKIApAQCAtMjk5LDkgKzIxOCw2IEBACiAJaWYgKGlub2RlKQogCQlpcHV0KGlub2RlKTsKIAotCWlmIChzdGF0dXMgPCAwKQotCQlvY2ZzMl9zaHV0ZG93bl9sYV9kZWJ1Zyhvc2IpOwotCiAJbWxvZygwLCAiTG9jYWwgYWxsb2Mgd2luZG93IGJpdHMgPSAlZFxuIiwgb3NiLT5sb2NhbF9hbGxvY19iaXRzKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwpAQCAtMzMxLDggKzI0Nyw2IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmb3NiLT5sYV9lbmFibGVfd3EpOwogCWZsdXNoX3dvcmtxdWV1ZShvY2ZzMl93cSk7CiAKLQlvY2ZzMl9zaHV0ZG93bl9sYV9kZWJ1Zyhvc2IpOwotCiAJaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfVU5VU0VEKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggNGIxMTc2Mi4uMjIyMGY5MyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC04MCwxNCArODAsMTQgQEAKIAkJCQkgICAgc3RydWN0IGlub2RlICoqcmV0X29ycGhhbl9kaXIsCiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgIGNoYXIgKm5hbWUsCi0JCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmRlX2JoKTsKKwkJCQkgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApOwogCiBzdGF0aWMgaW50IG9jZnMyX29ycGhhbl9hZGQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLAogCQkJICAgIGNoYXIgKm5hbWUsCi0JCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKm9ycGhhbl9kaXJfaW5vZGUpOwogCiBzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9zeW1saW5rX2RhdGEoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCkBAIC0yMjgsMTcgKzIyOCwxOCBAQAogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpcmZlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2ZlX2JoID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRlX2JoID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqaW5vZGVfYWMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqeGF0dHJfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKIAlpbnQgd2FudF9jbHVzdGVycyA9IDA7CisJaW50IHdhbnRfbWV0YSA9IDA7CiAJaW50IHhhdHRyX2NyZWRpdHMgPSAwOwogCXN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvIHNpID0gewogCQkuZW5hYmxlID0gMSwKIAl9OwogCWludCBkaWRfcXVvdGFfaW5vZGUgPSAwOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJWQsICVsdSwgJyUuKnMnKVxuIiwgZGlyLCBkZW50cnksIG1vZGUsCiAJCSAgICh1bnNpZ25lZCBsb25nKWRldiwgZGVudHJ5LT5kX25hbWUubGVuLApAQCAtMjU0LDEzICsyNTUsMTMgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKLQlpZiAoU19JU0RJUihtb2RlKSAmJiAoZGlyLT5pX25saW5rID49IE9DRlMyX0xJTktfTUFYKSkgeworCWlmIChTX0lTRElSKG1vZGUpICYmIChkaXItPmlfbmxpbmsgPj0gb2NmczJfbGlua19tYXgob3NiKSkpIHsKIAkJc3RhdHVzID0gLUVNTElOSzsKIAkJZ290byBsZWF2ZTsKIAl9CiAKIAlkaXJmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9mZV9iaC0+Yl9kYXRhOwotCWlmICghZGlyZmUtPmlfbGlua3NfY291bnQpIHsKKwlpZiAoIW9jZnMyX3JlYWRfbGlua3NfY291bnQoZGlyZmUpKSB7CiAJCS8qIGNhbid0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovCiAJCXN0YXR1cyA9IC1FTk9FTlQ7CiAJCWdvdG8gbGVhdmU7CkBAIC0yNzQsNyArMjc1LDcgQEAKIAkvKiBnZXQgYSBzcG90IGluc2lkZSB0aGUgZGlyLiAqLwogCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBkaXIsIHBhcmVudF9mZV9iaCwKIAkJCQkJICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkJICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCAmZGVfYmgpOworCQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5sZW4sICZsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTMwOCwxNyArMzA5LDI5IEBACiAKIAkvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi8KIAlzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsCi0JCQkJCSZzaSwgJndhbnRfY2x1c3RlcnMsCi0JCQkJCSZ4YXR0cl9jcmVkaXRzLCAmeGF0dHJfYWMpOworCQkJCSAgICAgICAmc2ksICZ3YW50X2NsdXN0ZXJzLAorCQkJCSAgICAgICAmeGF0dHJfY3JlZGl0cywgJndhbnRfbWV0YSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwogCX0KIAogCS8qIFJlc2VydmUgYSBjbHVzdGVyIGlmIGNyZWF0aW5nIGFuIGV4dGVudCBiYXNlZCBkaXJlY3RvcnkuICovCi0JaWYgKFNfSVNESVIobW9kZSkgJiYgIW9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpCisJaWYgKFNfSVNESVIobW9kZSkgJiYgIW9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHsKIAkJd2FudF9jbHVzdGVycyArPSAxOwogCisJCS8qIERpciBpbmRleGluZyByZXF1aXJlcyBleHRyYSBzcGFjZSBhcyB3ZWxsICovCisJCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSkKKwkJCXdhbnRfbWV0YSsrOworCX0KKworCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIHdhbnRfbWV0YSwgJm1ldGFfYWMpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKIAlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzKG9zYiwgd2FudF9jbHVzdGVycywgJmRhdGFfYWMpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKQEAgLTMyNiw4ICszMzksOSBAQAogCQlnb3RvIGxlYXZlOwogCX0KIAotCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItPnNiKSArCi0JCQkJICAgeGF0dHJfY3JlZGl0cyk7CisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi0+c2IsCisJCQkJCQkJICAgIFNfSVNESVIobW9kZSksCisJCQkJCQkJICAgIHhhdHRyX2NyZWRpdHMpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJc3RhdHVzID0gUFRSX0VSUihoYW5kbGUpOwogCQloYW5kbGUgPSBOVUxMOwpAQCAtMzU1LDcgKzM2OSw3IEBACiAKIAlpZiAoU19JU0RJUihtb2RlKSkgewogCQlzdGF0dXMgPSBvY2ZzMl9maWxsX25ld19kaXIob3NiLCBoYW5kbGUsIGRpciwgaW5vZGUsCi0JCQkJCSAgICBuZXdfZmVfYmgsIGRhdGFfYWMpOworCQkJCQkgICAgbmV3X2ZlX2JoLCBkYXRhX2FjLCBtZXRhX2FjKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gbGVhdmU7CkBAIC0zNjcsNyArMzgxLDcgQEAKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gbGVhdmU7CiAJCX0KLQkJbGUxNl9hZGRfY3B1KCZkaXJmZS0+aV9saW5rc19jb3VudCwgMSk7CisJCW9jZnMyX2FkZF9saW5rc19jb3VudChkaXJmZSwgMSk7CiAJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBwYXJlbnRfZmVfYmgpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMzc3LDcgKzM5MSw3IEBACiAJfQogCiAJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKLQkJCQl4YXR0cl9hYywgZGF0YV9hYyk7CisJCQkJbWV0YV9hYywgZGF0YV9hYyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtMzg1LDcgKzM5OSw3IEBACiAKIAlpZiAoc2kuZW5hYmxlKSB7CiAJCXN0YXR1cyA9IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZSwgaW5vZGUsIG5ld19mZV9iaCwgJnNpLAotCQkJCQkJIHhhdHRyX2FjLCBkYXRhX2FjKTsKKwkJCQkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gbGVhdmU7CkBAIC0zOTQsNyArNDA4LDcgQEAKIAogCXN0YXR1cyA9IG9jZnMyX2FkZF9lbnRyeShoYW5kbGUsIGRlbnRyeSwgaW5vZGUsCiAJCQkJIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgcGFyZW50X2ZlX2JoLAotCQkJCSBkZV9iaCk7CisJCQkJICZsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTQyMywxMSArNDM3LDEyIEBACiAJCW1sb2coMCwgIkRpc2sgaXMgZnVsbFxuIik7CiAKIAlicmVsc2UobmV3X2ZlX2JoKTsKLQlicmVsc2UoZGVfYmgpOwogCWJyZWxzZShwYXJlbnRfZmVfYmgpOwogCWtmcmVlKHNpLm5hbWUpOwogCWtmcmVlKHNpLnZhbHVlKTsKIAorCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CisKIAlpZiAoKHN0YXR1cyA8IDApICYmIGlub2RlKSB7CiAJCWNsZWFyX25saW5rKGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC00MzksOCArNDU0LDggQEAKIAlpZiAoZGF0YV9hYykKIAkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGRhdGFfYWMpOwogCi0JaWYgKHhhdHRyX2FjKQotCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoeGF0dHJfYWMpOworCWlmIChtZXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIApAQCAtNDYyLDYgKzQ3Nyw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpmZWw7CiAJdTY0IGZlX2Jsa25vID0gMDsKIAl1MTYgc3ViYWxsb2NfYml0OworCXUxNiBmZWF0OwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICVkLCAlbHUsICclLipzJylcbiIsIGRpciwgZGVudHJ5LAogCQkgICBpbm9kZS0+aV9tb2RlLCAodW5zaWduZWQgbG9uZylkZXYsIGRlbnRyeS0+ZF9uYW1lLmxlbiwKQEAgLTQ2OSw4ICs0ODUsOCBAQAogCiAJKm5ld19mZV9iaCA9IE5VTEw7CiAKLQlzdGF0dXMgPSBvY2ZzMl9jbGFpbV9uZXdfaW5vZGUob3NiLCBoYW5kbGUsIGlub2RlX2FjLCAmc3ViYWxsb2NfYml0LAotCQkJCSAgICAgICAmZmVfYmxrbm8pOworCXN0YXR1cyA9IG9jZnMyX2NsYWltX25ld19pbm9kZShvc2IsIGhhbmRsZSwgZGlyLCBwYXJlbnRfZmVfYmgsCisJCQkJICAgICAgIGlub2RlX2FjLCAmc3ViYWxsb2NfYml0LCAmZmVfYmxrbm8pOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTUxMyw3ICs1MjksOCBAQAogCWZlLT5pX21vZGUgPSBjcHVfdG9fbGUxNihpbm9kZS0+aV9tb2RlKTsKIAlpZiAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLT5pX21vZGUpKQogCQlmZS0+aWQxLmRldjEuaV9yZGV2ID0gY3B1X3RvX2xlNjQoaHVnZV9lbmNvZGVfZGV2KGRldikpOwotCWZlLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOworCisJb2NmczJfc2V0X2xpbmtzX2NvdW50KGZlLCBpbm9kZS0+aV9ubGluayk7CiAKIAlmZS0+aV9sYXN0X2ViX2JsayA9IDA7CiAJc3RyY3B5KGZlLT5pX3NpZ25hdHVyZSwgT0NGUzJfSU5PREVfU0lHTkFUVVJFKTsKQEAgLTUyNSwxMSArNTQyLDExIEBACiAJZmUtPmlfZHRpbWUgPSAwOwogCiAJLyoKLQkgKiBJZiBzdXBwb3J0ZWQsIGRpcmVjdG9yaWVzIHN0YXJ0IHdpdGggaW5saW5lIGRhdGEuCisJICogSWYgc3VwcG9ydGVkLCBkaXJlY3RvcmllcyBzdGFydCB3aXRoIGlubGluZSBkYXRhLiBJZiBpbmxpbmUKKwkgKiBpc24ndCBzdXBwb3J0ZWQsIGJ1dCBpbmRleGluZyBpcywgd2Ugc3RhcnQgdGhlbSBhcyBpbmRleGVkLgogCSAqLworCWZlYXQgPSBsZTE2X3RvX2NwdShmZS0+aV9keW5fZmVhdHVyZXMpOwogCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmIG9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHsKLQkJdTE2IGZlYXQgPSBsZTE2X3RvX2NwdShmZS0+aV9keW5fZmVhdHVyZXMpOwotCiAJCWZlLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KGZlYXQgfCBPQ0ZTMl9JTkxJTkVfREFUQV9GTCk7CiAKIAkJZmUtPmlkMi5pX2RhdGEuaWRfY291bnQgPSBjcHVfdG9fbGUxNigKQEAgLTYwOCw5ICs2MjUsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmggPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGVfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTsKIAogCW1sb2dfZW50cnkoIihpbm9kZT0lbHUsIG9sZD0nJS4qcycgbmV3PSclLipzJylcbiIsIGlub2RlLT5pX2lubywKIAkJICAgb2xkX2RlbnRyeS0+ZF9uYW1lLmxlbiwgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCkBAIC02MzgsNyArNjU1LDcgQEAKIAogCWVyciA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBkaXIsIHBhcmVudF9mZV9iaCwKIAkJCQkJICAgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkJICAgZGVudHJ5LT5kX25hbWUubGVuLCAmZGVfYmgpOworCQkJCQkgICBkZW50cnktPmRfbmFtZS5sZW4sICZsb29rdXApOwogCWlmIChlcnIgPCAwKSB7CiAJCW1sb2dfZXJybm8oZXJyKTsKIAkJZ290byBvdXQ7CkBAIC02NTIsNyArNjY5LDcgQEAKIAl9CiAKIAlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGZlX2JoLT5iX2RhdGE7Ci0JaWYgKGxlMTZfdG9fY3B1KGZlLT5pX2xpbmtzX2NvdW50KSA+PSBPQ0ZTMl9MSU5LX01BWCkgeworCWlmIChvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGZlKSA+PSBvY2ZzMl9saW5rX21heChvc2IpKSB7CiAJCWVyciA9IC1FTUxJTks7CiAJCWdvdG8gb3V0X3VubG9ja19pbm9kZTsKIAl9CkBAIC02NzQsMTMgKzY5MSwxMyBAQAogCiAJaW5jX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGlub2RlLT5pX25saW5rKTsKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZmUsIGlub2RlLT5pX25saW5rKTsKIAlmZS0+aV9jdGltZSA9IGNwdV90b19sZTY0KGlub2RlLT5pX2N0aW1lLnR2X3NlYyk7CiAJZmUtPmlfY3RpbWVfbnNlYyA9IGNwdV90b19sZTMyKGlub2RlLT5pX2N0aW1lLnR2X25zZWMpOwogCiAJZXJyID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGZlX2JoKTsKIAlpZiAoZXJyIDwgMCkgewotCQlsZTE2X2FkZF9jcHUoJmZlLT5pX2xpbmtzX2NvdW50LCAtMSk7CisJCW9jZnMyX2FkZF9saW5rc19jb3VudChmZSwgLTEpOwogCQlkcm9wX25saW5rKGlub2RlKTsKIAkJbWxvZ19lcnJubyhlcnIpOwogCQlnb3RvIG91dF9jb21taXQ7CkBAIC02ODgsOSArNzA1LDkgQEAKIAogCWVyciA9IG9jZnMyX2FkZF9lbnRyeShoYW5kbGUsIGRlbnRyeSwgaW5vZGUsCiAJCQkgICAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCi0JCQkgICAgICBwYXJlbnRfZmVfYmgsIGRlX2JoKTsKKwkJCSAgICAgIHBhcmVudF9mZV9iaCwgJmxvb2t1cCk7CiAJaWYgKGVycikgewotCQlsZTE2X2FkZF9jcHUoJmZlLT5pX2xpbmtzX2NvdW50LCAtMSk7CisJCW9jZnMyX2FkZF9saW5rc19jb3VudChmZSwgLTEpOwogCQlkcm9wX25saW5rKGlub2RlKTsKIAkJbWxvZ19lcnJubyhlcnIpOwogCQlnb3RvIG91dF9jb21taXQ7CkBAIC03MTQsMTAgKzczMSwxMSBAQAogb3V0OgogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDEpOwogCi0JYnJlbHNlKGRlX2JoKTsKIAlicmVsc2UoZmVfYmgpOwogCWJyZWxzZShwYXJlbnRfZmVfYmgpOwogCisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmbG9va3VwKTsKKwogCW1sb2dfZXhpdChlcnIpOwogCiAJcmV0dXJuIGVycjsKQEAgLTc2NiwxMCArNzg0LDkgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9ub2RlX2JoID0gTlVMTDsKIAloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkaXJlbnQgPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZW50X2JoID0gTlVMTDsKIAljaGFyIG9ycGhhbl9uYW1lW09DRlMyX09SUEhBTl9OQU1FTEVOICsgMV07Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpvcnBoYW5fZW50cnlfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IG9ycGhhbl9pbnNlcnQgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJyUuKnMnKVxuIiwgZGlyLCBkZW50cnksCiAJCSAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CkBAIC03OTEsOCArODA4LDggQEAKIAl9CiAKIAlzdGF0dXMgPSBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2soZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkJICBkZW50cnktPmRfbmFtZS5sZW4sICZibGtubywKLQkJCQkJICBkaXIsICZkaXJlbnRfYmgsICZkaXJlbnQpOworCQkJCQkgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgJmJsa25vLCBkaXIsCisJCQkJCSAgJmxvb2t1cCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJaWYgKHN0YXR1cyAhPSAtRU5PRU5UKQogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtODE3LDEwICs4MzQsNyBAQAogCWNoaWxkX2xvY2tlZCA9IDE7CiAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCSAgICAgICAJaWYgKCFvY2ZzMl9lbXB0eV9kaXIoaW5vZGUpKSB7Ci0JCQlzdGF0dXMgPSAtRU5PVEVNUFRZOwotCQkJZ290byBsZWF2ZTsKLQkJfSBlbHNlIGlmIChpbm9kZS0+aV9ubGluayAhPSAyKSB7CisJCWlmIChpbm9kZS0+aV9ubGluayAhPSAyIHx8ICFvY2ZzMl9lbXB0eV9kaXIoaW5vZGUpKSB7CiAJCQlzdGF0dXMgPSAtRU5PVEVNUFRZOwogCQkJZ290byBsZWF2ZTsKIAkJfQpAQCAtODM2LDggKzg1MCw3IEBACiAKIAlpZiAoaW5vZGVfaXNfdW5saW5rYWJsZShpbm9kZSkpIHsKIAkJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9vcnBoYW5fZGlyKG9zYiwgJm9ycGhhbl9kaXIsIGlub2RlLAotCQkJCQkJICBvcnBoYW5fbmFtZSwKLQkJCQkJCSAgJm9ycGhhbl9lbnRyeV9iaCk7CisJCQkJCQkgIG9ycGhhbl9uYW1lLCAmb3JwaGFuX2luc2VydCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGxlYXZlOwpAQCAtODYzLDcgKzg3Niw3IEBACiAKIAlpZiAoaW5vZGVfaXNfdW5saW5rYWJsZShpbm9kZSkpIHsKIAkJc3RhdHVzID0gb2NmczJfb3JwaGFuX2FkZChvc2IsIGhhbmRsZSwgaW5vZGUsIGZlLCBvcnBoYW5fbmFtZSwKLQkJCQkJICBvcnBoYW5fZW50cnlfYmgsIG9ycGhhbl9kaXIpOworCQkJCQkgICZvcnBoYW5faW5zZXJ0LCBvcnBoYW5fZGlyKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gbGVhdmU7CkBAIC04NzEsNyArODg0LDcgQEAKIAl9CiAKIAkvKiBkZWxldGUgdGhlIG5hbWUgZnJvbSB0aGUgcGFyZW50IGRpciAqLwotCXN0YXR1cyA9IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGUsIGRpciwgZGlyZW50LCBkaXJlbnRfYmgpOworCXN0YXR1cyA9IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGUsIGRpciwgJmxvb2t1cCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtODgwLDcgKzg5Myw3IEBACiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCWRyb3BfbmxpbmsoaW5vZGUpOwogCWRyb3BfbmxpbmsoaW5vZGUpOwotCWZlLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOworCW9jZnMyX3NldF9saW5rc19jb3VudChmZSwgaW5vZGUtPmlfbmxpbmspOwogCiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGZlX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtOTE2LDkgKzkyOSwxMCBAQAogCX0KIAogCWJyZWxzZShmZV9iaCk7Ci0JYnJlbHNlKGRpcmVudF9iaCk7CiAJYnJlbHNlKHBhcmVudF9ub2RlX2JoKTsKLQlicmVsc2Uob3JwaGFuX2VudHJ5X2JoKTsKKworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9ycGhhbl9pbnNlcnQpOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIApAQCAtMTAwNCw4ICsxMDE4LDggQEAKIAkJCXN0cnVjdCBpbm9kZSAqbmV3X2RpciwKIAkJCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7Ci0JaW50IHN0YXR1cyA9IDAsIHJlbmFtZV9sb2NrID0gMCwgcGFyZW50c19sb2NrZWQgPSAwOwotCWludCBvbGRfY2hpbGRfbG9ja2VkID0gMCwgbmV3X2NoaWxkX2xvY2tlZCA9IDA7CisJaW50IHN0YXR1cyA9IDAsIHJlbmFtZV9sb2NrID0gMCwgcGFyZW50c19sb2NrZWQgPSAwLCB0YXJnZXRfZXhpc3RzID0gMDsKKwlpbnQgb2xkX2NoaWxkX2xvY2tlZCA9IDAsIG5ld19jaGlsZF9sb2NrZWQgPSAwLCB1cGRhdGVfZG90X2RvdCA9IDA7CiAJc3RydWN0IGlub2RlICpvbGRfaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBpbm9kZSAqbmV3X2lub2RlID0gbmV3X2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKm9ycGhhbl9kaXIgPSBOVUxMOwpAQCAtMTAyMCwxMyArMTAzNCwxMyBAQAogCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2Rpcl9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfZGlyX2JoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpvbGRfaW5vZGVfZG90X2RvdF9kZSA9IE5VTEwsICpvbGRfZGUgPSBOVUxMLAotCQkqbmV3X2RlID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19kZV9iaCA9IE5VTEwsICpvbGRfZGVfYmggPSBOVUxMOyAvLyBiaHMgZm9yIGFib3ZlCi0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfaW5vZGVfZGVfYmggPSBOVUxMOyAvLyBpZiBvbGRfZGVudHJ5IGlzIGEgZGlyLAotCQkJCQkJICAgIC8vIHRoaXMgaXMgdGhlIDFzdCBkaXJlbnQgYmgKIAlubGlua190IG9sZF9kaXJfbmxpbmsgPSBvbGRfZGlyLT5pX25saW5rOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKm9sZF9kaTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgb2xkX2lub2RlX2RvdF9kb3RfcmVzID0geyBOVUxMLCB9OworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCB0YXJnZXRfbG9va3VwX3JlcyA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgb2xkX2VudHJ5X2xvb2t1cCA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgb3JwaGFuX2luc2VydCA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgdGFyZ2V0X2luc2VydCA9IHsgTlVMTCwgfTsKIAogCS8qIEF0IHNvbWUgcG9pbnQgaXQgbWlnaHQgYmUgbmljZSB0byBicmVhayB0aGlzIGZ1bmN0aW9uIHVwIGEKIAkgKiBiaXQuICovCkBAIC0xMTA4LDkgKzExMjIsMTAgQEAKIAlpZiAoU19JU0RJUihvbGRfaW5vZGUtPmlfbW9kZSkpIHsKIAkJdTY0IG9sZF9pbm9kZV9wYXJlbnQ7CiAKKwkJdXBkYXRlX2RvdF9kb3QgPSAxOwogCQlzdGF0dXMgPSBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2soIi4uIiwgMiwgJm9sZF9pbm9kZV9wYXJlbnQsCi0JCQkJCQkgIG9sZF9pbm9kZSwgJm9sZF9pbm9kZV9kZV9iaCwKLQkJCQkJCSAgJm9sZF9pbm9kZV9kb3RfZG90X2RlKTsKKwkJCQkJCSAgb2xkX2lub2RlLAorCQkJCQkJICAmb2xkX2lub2RlX2RvdF9kb3RfcmVzKTsKIAkJaWYgKHN0YXR1cykgewogCQkJc3RhdHVzID0gLUVJTzsKIAkJCWdvdG8gYmFpbDsKQEAgLTExMjIsNyArMTEzNyw3IEBACiAJCX0KIAogCQlpZiAoIW5ld19pbm9kZSAmJiBuZXdfZGlyICE9IG9sZF9kaXIgJiYKLQkJICAgIG5ld19kaXItPmlfbmxpbmsgPj0gT0NGUzJfTElOS19NQVgpIHsKKwkJICAgIG5ld19kaXItPmlfbmxpbmsgPj0gb2NmczJfbGlua19tYXgob3NiKSkgewogCQkJc3RhdHVzID0gLUVNTElOSzsKIAkJCWdvdG8gYmFpbDsKIAkJfQpAQCAtMTE1MSw4ICsxMTY2LDggQEAKIAkgKiB0byBkZWxldGUgaXQgKi8KIAlzdGF0dXMgPSBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2sobmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJCSAgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCQkJICAmbmV3ZmVfYmxrbm8sIG5ld19kaXIsICZuZXdfZGVfYmgsCi0JCQkJCSAgJm5ld19kZSk7CisJCQkJCSAgJm5ld2ZlX2Jsa25vLCBuZXdfZGlyLAorCQkJCQkgICZ0YXJnZXRfbG9va3VwX3Jlcyk7CiAJLyogVGhlIG9ubHkgZXJyb3Igd2UgYWxsb3cgaGVyZSBpcyAtRU5PRU5UIGJlY2F1c2UgdGhlIG5ldwogCSAqIGZpbGUgbm90IGV4aXN0aW5nIGlzIHBlcmZlY3RseSB2YWxpZC4gKi8KIAlpZiAoKHN0YXR1cyA8IDApICYmIChzdGF0dXMgIT0gLUVOT0VOVCkpIHsKQEAgLTExNjEsOCArMTE3NiwxMCBAQAogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CisJaWYgKHN0YXR1cyA9PSAwKQorCQl0YXJnZXRfZXhpc3RzID0gMTsKIAotCWlmICghbmV3X2RlICYmIG5ld19pbm9kZSkgeworCWlmICghdGFyZ2V0X2V4aXN0cyAmJiBuZXdfaW5vZGUpIHsKIAkJLyoKIAkJICogVGFyZ2V0IHdhcyB1bmxpbmtlZCBieSBhbm90aGVyIG5vZGUgd2hpbGUgd2Ugd2VyZQogCQkgKiB3YWl0aW5nIHRvIGdldCB0byBvY2ZzMl9yZW5hbWUoKS4gVGhlcmUgaXNuJ3QKQEAgLTExNzUsNyArMTE5Miw3IEBACiAKIAkvKiBJbiBjYXNlIHdlIG5lZWQgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGZpbGUsIHdlIGJsb3cgaXQKIAkgKiBhd2F5IGZpcnN0ICovCi0JaWYgKG5ld19kZSkgeworCWlmICh0YXJnZXRfZXhpc3RzKSB7CiAJCS8qIFZGUyBkaWRuJ3QgdGhpbmsgdGhlcmUgZXhpc3RlZCBhbiBpbm9kZSBoZXJlLCBidXQKIAkJICogc29tZW9uZSBlbHNlIGluIHRoZSBjbHVzdGVyIG11c3QgaGF2ZSByYWNlZCBvdXIKIAkJICogcmVuYW1lIHRvIGNyZWF0ZSBvbmUuIFRvZGF5IHdlIGVycm9yIGNsZWFubHksIGluCkBAIC0xMjE2LDggKzEyMzMsOCBAQAogCiAJCW5ld2ZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgbmV3ZmVfYmgtPmJfZGF0YTsKIAotCQltbG9nKDAsICJhaGEgcmVuYW1lIG92ZXIgZXhpc3RpbmcuLi4gbmV3X2RlPSVwIG5ld19ibGtubz0lbGx1ICIKLQkJICAgICAibmV3ZmViaD0lcCBiaGJsb2NrbnI9JWxsdVxuIiwgbmV3X2RlLAorCQltbG9nKDAsICJhaGEgcmVuYW1lIG92ZXIgZXhpc3RpbmcuLi4gbmV3X2Jsa25vPSVsbHUgIgorCQkgICAgICJuZXdmZWJoPSVwIGJoYmxvY2tucj0lbGx1XG4iLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3ZmVfYmxrbm8sIG5ld2ZlX2JoLCBuZXdmZV9iaCA/CiAJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdmZV9iaC0+Yl9ibG9ja25yIDogMFVMTCk7CiAKQEAgLTEyMjUsNyArMTI0Miw3IEBACiAJCQlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIob3NiLCAmb3JwaGFuX2RpciwKIAkJCQkJCQkgIG5ld19pbm9kZSwKIAkJCQkJCQkgIG9ycGhhbl9uYW1lLAotCQkJCQkJCSAgJm9ycGhhbl9lbnRyeV9iaCk7CisJCQkJCQkJICAmb3JwaGFuX2luc2VydCk7CiAJCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCQlnb3RvIGJhaWw7CkBAIC0xMjQzLDcgKzEyNjAsNyBAQAogCQlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KG9zYiwgbmV3X2RpciwgbmV3X2Rpcl9iaCwKIAkJCQkJCSAgICAgIG5ld19kZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCQkJICAgICAgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCQkJCSAgICAgICZpbnNlcnRfZW50cnlfYmgpOworCQkJCQkJICAgICAgJnRhcmdldF9pbnNlcnQpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTI1OCwxMCArMTI3NSwxMCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JaWYgKG5ld19kZSkgeworCWlmICh0YXJnZXRfZXhpc3RzKSB7CiAJCWlmIChTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSkgewotCQkJaWYgKCFvY2ZzMl9lbXB0eV9kaXIobmV3X2lub2RlKSB8fAotCQkJICAgIG5ld19pbm9kZS0+aV9ubGluayAhPSAyKSB7CisJCQlpZiAobmV3X2lub2RlLT5pX25saW5rICE9IDIgfHwKKwkJCSAgICAhb2NmczJfZW1wdHlfZGlyKG5ld19pbm9kZSkpIHsKIAkJCQlzdGF0dXMgPSAtRU5PVEVNUFRZOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KQEAgLTEyNzQsMTAgKzEyOTEsMTAgQEAKIAkJfQogCiAJCWlmIChTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSB8fAotCQkgICAgKG5ld2ZlLT5pX2xpbmtzX2NvdW50ID09IGNwdV90b19sZTE2KDEpKSl7CisJCSAgICAob2NmczJfcmVhZF9saW5rc19jb3VudChuZXdmZSkgPT0gMSkpIHsKIAkJCXN0YXR1cyA9IG9jZnMyX29ycGhhbl9hZGQob3NiLCBoYW5kbGUsIG5ld19pbm9kZSwKIAkJCQkJCSAgbmV3ZmUsIG9ycGhhbl9uYW1lLAotCQkJCQkJICBvcnBoYW5fZW50cnlfYmgsIG9ycGhhbl9kaXIpOworCQkJCQkJICAmb3JwaGFuX2luc2VydCwgb3JwaGFuX2Rpcik7CiAJCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCQlnb3RvIGJhaWw7CkBAIC0xMjg1LDggKzEzMDIsOCBAQAogCQl9CiAKIAkJLyogY2hhbmdlIHRoZSBkaXJlbnQgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgaW5vZGUgKi8KLQkJc3RhdHVzID0gb2NmczJfdXBkYXRlX2VudHJ5KG5ld19kaXIsIGhhbmRsZSwgbmV3X2RlX2JoLAotCQkJCQkgICAgbmV3X2RlLCBvbGRfaW5vZGUpOworCQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZW50cnkobmV3X2RpciwgaGFuZGxlLCAmdGFyZ2V0X2xvb2t1cF9yZXMsCisJCQkJCSAgICBvbGRfaW5vZGUpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTI5NCw5ICsxMzExLDkgQEAKIAkJbmV3X2Rpci0+aV92ZXJzaW9uKys7CiAKIAkJaWYgKFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpKQotCQkJbmV3ZmUtPmlfbGlua3NfY291bnQgPSAwOworCQkJb2NmczJfc2V0X2xpbmtzX2NvdW50KG5ld2ZlLCAwKTsKIAkJZWxzZQotCQkJbGUxNl9hZGRfY3B1KCZuZXdmZS0+aV9saW5rc19jb3VudCwgLTEpOworCQkJb2NmczJfYWRkX2xpbmtzX2NvdW50KG5ld2ZlLCAtMSk7CiAKIAkJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld2ZlX2JoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTEzMDcsNyArMTMyNCw3IEBACiAJCS8qIGlmIHRoZSBuYW1lIHdhcyBub3QgZm91bmQgaW4gbmV3X2RpciwgYWRkIGl0IG5vdyAqLwogCQlzdGF0dXMgPSBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBuZXdfZGVudHJ5LCBvbGRfaW5vZGUsCiAJCQkJCSBPQ0ZTMl9JKG9sZF9pbm9kZSktPmlwX2Jsa25vLAotCQkJCQkgbmV3X2Rpcl9iaCwgaW5zZXJ0X2VudHJ5X2JoKTsKKwkJCQkJIG5ld19kaXJfYmgsICZ0YXJnZXRfaW5zZXJ0KTsKIAl9CiAKIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CkBAIC0xMzM0LDE1ICsxMzUxLDEzIEBACiAJICogYmVjYXVzZSB0aGUgaW5zZXJ0IG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgdHlwZSBvZiBkaXJlY3RvcnkKIAkgKiB3ZSdyZSBkZWFsaW5nIHdpdGguCiAJICovCi0Jb2xkX2RlX2JoID0gb2NmczJfZmluZF9lbnRyeShvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkgICAgIG9sZF9kZW50cnktPmRfbmFtZS5sZW4sCi0JCQkJICAgICBvbGRfZGlyLCAmb2xkX2RlKTsKLQlpZiAoIW9sZF9kZV9iaCkgewotCQlzdGF0dXMgPSAtRUlPOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfZW50cnkob2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJICBvbGRfZGVudHJ5LT5kX25hbWUubGVuLCBvbGRfZGlyLAorCQkJCSAgJm9sZF9lbnRyeV9sb29rdXApOworCWlmIChzdGF0dXMpCiAJCWdvdG8gYmFpbDsKLQl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlLCBvbGRfZGlyLCBvbGRfZGUsIG9sZF9kZV9iaCk7CisJc3RhdHVzID0gb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZSwgb2xkX2RpciwgJm9sZF9lbnRyeV9sb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMTM1Myw5ICsxMzY4LDEwIEBACiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAl9CiAJb2xkX2Rpci0+aV9jdGltZSA9IG9sZF9kaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JaWYgKG9sZF9pbm9kZV9kZV9iaCkgewotCQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZW50cnkob2xkX2lub2RlLCBoYW5kbGUsIG9sZF9pbm9kZV9kZV9iaCwKLQkJCQkJICAgIG9sZF9pbm9kZV9kb3RfZG90X2RlLCBuZXdfZGlyKTsKKworCWlmICh1cGRhdGVfZG90X2RvdCkgeworCQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZW50cnkob2xkX2lub2RlLCBoYW5kbGUsCisJCQkJCSAgICAmb2xkX2lub2RlX2RvdF9kb3RfcmVzLCBuZXdfZGlyKTsKIAkJb2xkX2Rpci0+aV9ubGluay0tOwogCQlpZiAobmV3X2lub2RlKSB7CiAJCQluZXdfaW5vZGUtPmlfbmxpbmstLTsKQEAgLTEzOTEsMTQgKzE0MDcsMTMgQEAKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlOwogCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBvbGRfZGlyLAotCQkJCQkJCSBvbGRfZGlyX2JoLAotCQkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCQkJCQkgICAgICBvbGRfZGlyX2JoLAorCQkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQkJZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvbGRfZGlyX2JoLT5iX2RhdGE7Ci0JCQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KG9sZF9kaXItPmlfbmxpbmspOworCQkJb2NmczJfc2V0X2xpbmtzX2NvdW50KGZlLCBvbGRfZGlyLT5pX25saW5rKTsKIAkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBvbGRfZGlyX2JoKTsKIAkJfQogCX0KLQogCW9jZnMyX2RlbnRyeV9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnksIG9sZF9kaXIsIG5ld19kaXIpOwogCXN0YXR1cyA9IDA7CiBiYWlsOgpAQCAtMTQyOSwxMyArMTQ0NCwxNyBAQAogCiAJaWYgKG5ld19pbm9kZSkKIAkJaXB1dChuZXdfaW5vZGUpOworCisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmdGFyZ2V0X2xvb2t1cF9yZXMpOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9sZF9lbnRyeV9sb29rdXApOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9sZF9pbm9kZV9kb3RfZG90X3Jlcyk7CisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmb3JwaGFuX2luc2VydCk7CisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmdGFyZ2V0X2luc2VydCk7CisKIAlicmVsc2UobmV3ZmVfYmgpOwogCWJyZWxzZShvbGRfaW5vZGVfYmgpOwogCWJyZWxzZShvbGRfZGlyX2JoKTsKIAlicmVsc2UobmV3X2Rpcl9iaCk7Ci0JYnJlbHNlKG5ld19kZV9iaCk7Ci0JYnJlbHNlKG9sZF9kZV9iaCk7Ci0JYnJlbHNlKG9sZF9pbm9kZV9kZV9iaCk7CiAJYnJlbHNlKG9ycGhhbl9lbnRyeV9iaCk7CiAJYnJlbHNlKGluc2VydF9lbnRyeV9iaCk7CiAKQEAgLTE1NTgsNyArMTU3Nyw2IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19mZV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaXJmZTsKQEAgLTE1NzIsNiArMTU5MCw3IEBACiAJCS5lbmFibGUgPSAxLAogCX07CiAJaW50IGRpZF9xdW90YSA9IDAsIGRpZF9xdW90YV9pbm9kZSA9IDA7CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTsKIAogCW1sb2dfZW50cnkoIigweCVwLCAweCVwLCBzeW1uYW1lPSclcycgYWN0dWFsPSclLipzJylcbiIsIGRpciwKIAkJICAgZGVudHJ5LCBzeW1uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwpAQCAtMTU5Miw3ICsxNjExLDcgQEAKIAl9CiAKIAlkaXJmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9mZV9iaC0+Yl9kYXRhOwotCWlmICghZGlyZmUtPmlfbGlua3NfY291bnQpIHsKKwlpZiAoIW9jZnMyX3JlYWRfbGlua3NfY291bnQoZGlyZmUpKSB7CiAJCS8qIGNhbid0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovCiAJCXN0YXR1cyA9IC1FTk9FTlQ7CiAJCWdvdG8gYmFpbDsKQEAgLTE2MDUsNyArMTYyNCw3IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KG9zYiwgZGlyLCBwYXJlbnRfZmVfYmgsCiAJCQkJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgJmRlX2JoKTsKKwkJCQkJICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCAmbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTE3NDQsNyArMTc2Myw3IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBkZW50cnksIGlub2RlLAogCQkJCSBsZTY0X3RvX2NwdShmZS0+aV9ibGtubyksIHBhcmVudF9mZV9iaCwKLQkJCQkgZGVfYmgpOworCQkJCSAmbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTE3NzIsOSArMTc5MSw5IEBACiAKIAlicmVsc2UobmV3X2ZlX2JoKTsKIAlicmVsc2UocGFyZW50X2ZlX2JoKTsKLQlicmVsc2UoZGVfYmgpOwogCWtmcmVlKHNpLm5hbWUpOwogCWtmcmVlKHNpLnZhbHVlKTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZsb29rdXApOwogCWlmIChpbm9kZV9hYykKIAkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGlub2RlX2FjKTsKIAlpZiAoZGF0YV9hYykKQEAgLTE4MjYsNyArMTg0NSw3IEBACiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqKnJldF9vcnBoYW5fZGlyLAogCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBjaGFyICpuYW1lLAotCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkZV9iaCkKKwkJCQkgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCiB7CiAJc3RydWN0IGlub2RlICpvcnBoYW5fZGlyX2lub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqb3JwaGFuX2Rpcl9iaCA9IE5VTEw7CkBAIC0xODU3LDcgKzE4NzYsNyBAQAogCiAJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChvc2IsIG9ycGhhbl9kaXJfaW5vZGUsCiAJCQkJCSAgICAgIG9ycGhhbl9kaXJfYmgsIG5hbWUsCi0JCQkJCSAgICAgIE9DRlMyX09SUEhBTl9OQU1FTEVOLCBkZV9iaCk7CisJCQkJCSAgICAgIE9DRlMyX09SUEhBTl9OQU1FTEVOLCBsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW9jZnMyX2lub2RlX3VubG9jayhvcnBoYW5fZGlyX2lub2RlLCAxKTsKIApAQCAtMTg4NCw3ICsxOTAzLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLAogCQkJICAgIGNoYXIgKm5hbWUsCi0JCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKm9ycGhhbl9kaXJfaW5vZGUpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpvcnBoYW5fZGlyX2JoID0gTlVMTDsKQEAgLTE5MTAsOCArMTkyOSw4IEBACiAJICogdW5kZXJuZWF0aCB1cy4uLiAqLwogCW9ycGhhbl9mZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG9ycGhhbl9kaXJfYmgtPmJfZGF0YTsKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJbGUxNl9hZGRfY3B1KCZvcnBoYW5fZmUtPmlfbGlua3NfY291bnQsIDEpOwotCW9ycGhhbl9kaXJfaW5vZGUtPmlfbmxpbmsgPSBsZTE2X3RvX2NwdShvcnBoYW5fZmUtPmlfbGlua3NfY291bnQpOworCQlvY2ZzMl9hZGRfbGlua3NfY291bnQob3JwaGFuX2ZlLCAxKTsKKwlvcnBoYW5fZGlyX2lub2RlLT5pX25saW5rID0gb2NmczJfcmVhZF9saW5rc19jb3VudChvcnBoYW5fZmUpOwogCiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG9ycGhhbl9kaXJfYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xOTIyLDcgKzE5NDEsNyBAQAogCXN0YXR1cyA9IF9fb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgb3JwaGFuX2Rpcl9pbm9kZSwgbmFtZSwKIAkJCQkgICBPQ0ZTMl9PUlBIQU5fTkFNRUxFTiwgaW5vZGUsCiAJCQkJICAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJCSAgIG9ycGhhbl9kaXJfYmgsIGRlX2JoKTsKKwkJCQkgICBvcnBoYW5fZGlyX2JoLCBsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTE5NTUsOCArMTk3NCw3IEBACiAJY2hhciBuYW1lW09DRlMyX09SUEhBTl9OQU1FTEVOICsgMV07CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqb3JwaGFuX2ZlOwogCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqdGFyZ2V0X2RlX2JoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICp0YXJnZXRfZGUgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIApAQCAtMTk3MSwxNyArMTk4OSwxNSBAQAogCSAgICAgT0NGUzJfT1JQSEFOX05BTUVMRU4pOwogCiAJLyogZmluZCBpdCdzIHNwb3QgaW4gdGhlIG9ycGhhbiBkaXJlY3RvcnkgKi8KLQl0YXJnZXRfZGVfYmggPSBvY2ZzMl9maW5kX2VudHJ5KG5hbWUsIE9DRlMyX09SUEhBTl9OQU1FTEVOLAotCQkJCQlvcnBoYW5fZGlyX2lub2RlLCAmdGFyZ2V0X2RlKTsKLQlpZiAoIXRhcmdldF9kZV9iaCkgewotCQlzdGF0dXMgPSAtRU5PRU5UOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfZW50cnkobmFtZSwgT0NGUzJfT1JQSEFOX05BTUVMRU4sIG9ycGhhbl9kaXJfaW5vZGUsCisJCQkJICAmbG9va3VwKTsKKwlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKIAl9CiAKIAkvKiByZW1vdmUgaXQgZnJvbSB0aGUgb3JwaGFuIGRpcmVjdG9yeSAqLwotCXN0YXR1cyA9IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGUsIG9ycGhhbl9kaXJfaW5vZGUsIHRhcmdldF9kZSwKLQkJCQkgICAgdGFyZ2V0X2RlX2JoKTsKKwlzdGF0dXMgPSBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlLCBvcnBoYW5fZGlyX2lub2RlLCAmbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CkBAIC0xOTk3LDggKzIwMTMsOCBAQAogCS8qIGRvIHRoZSBpX25saW5rIGRhbmNlISA6KSAqLwogCW9ycGhhbl9mZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG9ycGhhbl9kaXJfYmgtPmJfZGF0YTsKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJbGUxNl9hZGRfY3B1KCZvcnBoYW5fZmUtPmlfbGlua3NfY291bnQsIC0xKTsKLQlvcnBoYW5fZGlyX2lub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUob3JwaGFuX2ZlLT5pX2xpbmtzX2NvdW50KTsKKwkJb2NmczJfYWRkX2xpbmtzX2NvdW50KG9ycGhhbl9mZSwgLTEpOworCW9ycGhhbl9kaXJfaW5vZGUtPmlfbmxpbmsgPSBvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KG9ycGhhbl9mZSk7CiAKIAlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgb3JwaGFuX2Rpcl9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTIwMDcsNyArMjAyMyw3IEBACiAJfQogCiBsZWF2ZToKLQlicmVsc2UodGFyZ2V0X2RlX2JoKTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZsb29rdXApOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IDk0NmQzYzMuLjEzODYyODEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtMjA5LDYgKzIwOSw3IEBACiBzdHJ1Y3Qgb2NmczJfam91cm5hbDsKIHN0cnVjdCBvY2ZzMl9zbG90X2luZm87CiBzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwOworc3RydWN0IG9jZnMyX3JlcGxheV9tYXA7CiBzdHJ1Y3Qgb2NmczJfcXVvdGFfcmVjb3Zlcnk7CiBzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2s7CiBzdHJ1Y3Qgb2NmczJfc3VwZXIKQEAgLTI2NCw2ICsyNjUsNyBAQAogCWF0b21pY190IHZvbF9zdGF0ZTsKIAlzdHJ1Y3QgbXV0ZXggcmVjb3ZlcnlfbG9jazsKIAlzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwICpyZWNvdmVyeV9tYXA7CisJc3RydWN0IG9jZnMyX3JlcGxheV9tYXAgKnJlcGxheV9tYXA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpyZWNvdmVyeV90aHJlYWRfdGFzazsKIAlpbnQgZGlzYWJsZV9yZWNvdmVyeTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBjaGVja3BvaW50X2V2ZW50OwpAQCAtMjg3LDExICsyODksNiBAQAogCiAJdTY0IGxhX2xhc3RfZ2Q7CiAKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfU1RBVFMKLQlzdHJ1Y3QgZGVudHJ5ICpsb2NhbF9hbGxvY19kZWJ1ZzsKLQljaGFyICpsb2NhbF9hbGxvY19kZWJ1Z19idWY7Ci0jZW5kaWYKLQogCS8qIE5leHQgdGhyZWUgZmllbGRzIGFyZSBmb3IgbG9jYWwgbm9kZSBzbG90IHJlY292ZXJ5IGR1cmluZwogCSAqIG1vdW50LiAqLwogCWludCBkaXJ0eTsKQEAgLTMwNSw5ICszMDIsMTEgQEAKIAlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjY29ubjsKIAlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgb3NiX3N1cGVyX2xvY2tyZXM7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzIG9zYl9yZW5hbWVfbG9ja3JlczsKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgb3NiX25mc19zeW5jX2xvY2tyZXM7CiAJc3RydWN0IG9jZnMyX2RsbV9kZWJ1ZyAqb3NiX2RsbV9kZWJ1ZzsKIAogCXN0cnVjdCBkZW50cnkgKm9zYl9kZWJ1Z19yb290OworCXN0cnVjdCBkZW50cnkgKm9zYl9jdHh0OwogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVjb3ZlcnlfZXZlbnQ7CiAKQEAgLTM0NCw2ICszNDMsMTIgQEAKIAogCS8qIHVzZWQgdG8gcHJvdGVjdCBtZXRhZWNjIGNhbGN1bGF0aW9uIGNoZWNrIG9mIHhhdHRyLiAqLwogCXNwaW5sb2NrX3Qgb3NiX3hhdHRyX2xvY2s7CisKKwl1bnNpZ25lZCBpbnQJCQlvc2JfZHhfbWFzazsKKwl1MzIJCQkJb3NiX2R4X3NlZWRbNF07CisKKwkvKiB0aGUgZ3JvdXAgd2UgdXNlZCB0byBhbGxvY2F0ZSBpbm9kZXMuICovCisJdTY0CQkJCW9zYl9pbm9kZV9hbGxvY19ncm91cDsKIH07CiAKICNkZWZpbmUgT0NGUzJfU0Ioc2IpCSAgICAoKHN0cnVjdCBvY2ZzMl9zdXBlciAqKShzYiktPnNfZnNfaW5mbykKQEAgLTQwMiw2ICs0MDcsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCWlmIChvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfSU5ERVhFRF9ESVJTKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfbGlua19tYXgoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpKQorCQlyZXR1cm4gT0NGUzJfRFhfTElOS19NQVg7CisJcmV0dXJuIE9DRlMyX0xJTktfTUFYOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQoreworCXUzMiBubGluayA9IGxlMTZfdG9fY3B1KGRpLT5pX2xpbmtzX2NvdW50KTsKKwl1MzIgaGkgPSBsZTE2X3RvX2NwdShkaS0+aV9saW5rc19jb3VudF9oaSk7CisKKwlpZiAoZGktPmlfZHluX2ZlYXR1cmVzICYgY3B1X3RvX2xlMTYoT0NGUzJfSU5ERVhFRF9ESVJfRkwpKQorCQlubGluayB8PSAoaGkgPDwgT0NGUzJfTElOS1NfSElfU0hJRlQpOworCisJcmV0dXJuIG5saW5rOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfc2V0X2xpbmtzX2NvdW50KHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLCB1MzIgbmxpbmspCit7CisJdTE2IGxvLCBoaTsKKworCWxvID0gbmxpbms7CisJaGkgPSBubGluayA+PiBPQ0ZTMl9MSU5LU19ISV9TSElGVDsKKworCWRpLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYobG8pOworCWRpLT5pX2xpbmtzX2NvdW50X2hpID0gY3B1X3RvX2xlMTYoaGkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfYWRkX2xpbmtzX2NvdW50KHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLCBpbnQgbikKK3sKKwl1MzIgbGlua3MgPSBvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGRpKTsKKworCWxpbmtzICs9IG47CisKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZGksIGxpbmtzKTsKK30KKwogLyogc2V0IC8gY2xlYXIgZnVuY3Rpb25zIGJlY2F1c2UgY2x1c3RlciBldmVudHMgY2FuIG1ha2UgdGhlc2UgaGFwcGVuCiAgKiBpbiBwYXJhbGxlbCBzbyB3ZSB3YW50IHRoZSB0cmFuc2l0aW9ucyB0byBiZSBhdG9taWMuIHRoaXMgYWxzbwogICogbWVhbnMgdGhhdCBhbnkgZnV0dXJlIGZsYWdzIG9zYl9mbGFncyBtdXN0IGJlIHByb3RlY3RlZCBieSBzcGlubG9jawpAQCAtNDgyLDYgKzUzMiwxMiBAQAogI2RlZmluZSBPQ0ZTMl9JU19WQUxJRF9ESVJfVFJBSUxFUihwdHIpCQkJCQlcCiAJKCFzdHJjbXAoKHB0ciktPmRiX3NpZ25hdHVyZSwgT0NGUzJfRElSX1RSQUlMRVJfU0lHTkFUVVJFKSkKIAorI2RlZmluZSBPQ0ZTMl9JU19WQUxJRF9EWF9ST09UKHB0cikJCQkJCVwKKwkoIXN0cmNtcCgocHRyKS0+ZHJfc2lnbmF0dXJlLCBPQ0ZTMl9EWF9ST09UX1NJR05BVFVSRSkpCisKKyNkZWZpbmUgT0NGUzJfSVNfVkFMSURfRFhfTEVBRihwdHIpCQkJCQlcCisJKCFzdHJjbXAoKHB0ciktPmRsX3NpZ25hdHVyZSwgT0NGUzJfRFhfTEVBRl9TSUdOQVRVUkUpKQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW5vX2Zyb21fYmxrbm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgdTY0IGJsa25vKQogewpAQCAtNTMyLDYgKzU4OCwxNiBAQAogCXJldHVybiAodTY0KWNsdXN0ZXJzIDw8IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBvY2ZzMl9ibG9ja190b19jbHVzdGVyX3N0YXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCSAgICAgICB1NjQgYmxvY2tzKQoreworCWludCBiaXRzID0gT0NGUzJfU0Ioc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHMgLSBzYi0+c19ibG9ja3NpemVfYml0czsKKwl1bnNpZ25lZCBpbnQgY2x1c3RlcnM7CisKKwljbHVzdGVycyA9IG9jZnMyX2Jsb2Nrc190b19jbHVzdGVycyhzYiwgYmxvY2tzKTsKKwlyZXR1cm4gKHU2NCljbHVzdGVycyA8PCBiaXRzOworfQorCiBzdGF0aWMgaW5saW5lIHU2NCBvY2ZzMl9hbGlnbl9ieXRlc190b19jbHVzdGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkJdTY0IGJ5dGVzKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggMjMzMmVmNy4uN2FiNmU5ZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC02Niw2ICs2Niw4IEBACiAjZGVmaW5lIE9DRlMyX0dST1VQX0RFU0NfU0lHTkFUVVJFICAgICAgIkdST1VQMDEiCiAjZGVmaW5lIE9DRlMyX1hBVFRSX0JMT0NLX1NJR05BVFVSRQkiWEFUVFIwMSIKICNkZWZpbmUgT0NGUzJfRElSX1RSQUlMRVJfU0lHTkFUVVJFCSJESVJUUkwxIgorI2RlZmluZSBPQ0ZTMl9EWF9ST09UX1NJR05BVFVSRQkJIkRYRElSMDEiCisjZGVmaW5lIE9DRlMyX0RYX0xFQUZfU0lHTkFUVVJFCQkiRFhMRUFGMSIKIAogLyogQ29tcGF0aWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBPQ0ZTMl9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCkBAIC05NSw3ICs5Nyw4IEBACiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5ERURfU0xPVF9NQVAgXAogCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1VTRVJTUEFDRV9TVEFDSyBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIgXAotCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfRUNDKQorCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfRUNDIFwKKwkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9JTkRFWEVEX0RJUlMpCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAJKE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VOV1JJVFRFTiBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VTUlFVT1RBIFwKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfR1JQUVVPVEEpCkBAIC0xNTEsNiArMTU0LDkgQEAKIC8qIFN1cHBvcnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KICNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUgkJMHgwMjAwCiAKKy8qIFN1cHBvcnQgZm9yIGluZGV4ZWQgZGlyZWN0b3JlcyAqLworI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0lOREVYRURfRElSUwkweDA0MDAKKwogLyogTWV0YWRhdGEgY2hlY2tzdW0gYW5kIGVycm9yIGNvcnJlY3Rpb24gKi8KICNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0VDQwkJMHgwODAwCiAKQEAgLTQxMSw4ICs0MTcsMTIgQEAKICNkZWZpbmUgT0NGUzJfRElSX1JFQ19MRU4obmFtZV9sZW4pCSgoKG5hbWVfbGVuKSArIE9DRlMyX0RJUl9NRU1CRVJfTEVOICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NGUzJfRElSX1JPVU5EKSAmIFwKIAkJCQkJIH5PQ0ZTMl9ESVJfUk9VTkQpCisjZGVmaW5lIE9DRlMyX0RJUl9NSU5fUkVDX0xFTglPQ0ZTMl9ESVJfUkVDX0xFTigxKQogCiAjZGVmaW5lIE9DRlMyX0xJTktfTUFYCQkzMjAwMAorI2RlZmluZQlPQ0ZTMl9EWF9MSU5LX01BWAkoKDFVIDw8IDMxKSAtIDFVKQorI2RlZmluZQlPQ0ZTMl9MSU5LU19ISV9TSElGVAkxNgorI2RlZmluZQlPQ0ZTMl9EWF9FTlRSSUVTX01BWAkoMHhmZmZmZmZmZlUpCiAKICNkZWZpbmUgU19TSElGVAkJCTEyCiBzdGF0aWMgdW5zaWduZWQgY2hhciBvY2ZzMl90eXBlX2J5X21vZGVbU19JRk1UID4+IFNfU0hJRlRdID0gewpAQCAtNjI4LDggKzYzOCw5IEBACiAvKkI4Ki8JX19sZTE2IHNfeGF0dHJfaW5saW5lX3NpemU7CS8qIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbmxpbmUgc2l6ZQogCQkJCQkgICBmb3IgdGhpcyBmcyovCiAJX19sZTE2IHNfcmVzZXJ2ZWQwOwotCV9fbGUzMiBzX3Jlc2VydmVkMTsKLS8qQzAqLyAgX19sZTY0IHNfcmVzZXJ2ZWQyWzE2XTsJCS8qIEZpbGwgb3V0IHN1cGVyYmxvY2sgKi8KKwlfX2xlMzIgc19keF9zZWVkWzNdOwkJLyogc2VlZFswLTJdIGZvciBkeCBkaXIgaGFzaC4KKwkJCQkJICogc191dWlkX2hhc2ggc2VydmVzIGFzIHNlZWRbM10uICovCisvKkMwKi8gIF9fbGU2NCBzX3Jlc2VydmVkMlsxNV07CQkvKiBGaWxsIG91dCBzdXBlcmJsb2NrICovCiAvKjE0MCovCiAKIAkvKgpAQCAtNjc5LDcgKzY5MCw3IEBACiAJCQkJCSAgIGJlbG9uZ3MgdG8gKi8KIAlfX2xlMTYgaV9zdWJhbGxvY19iaXQ7CQkvKiBCaXQgb2Zmc2V0IGluIHN1YmFsbG9jYXRvcgogCQkJCQkgICBibG9jayBncm91cCAqLwotLyoxMCovCV9fbGUxNiBpX3Jlc2VydmVkMDsKKy8qMTAqLwlfX2xlMTYgaV9saW5rc19jb3VudF9oaTsJLyogSGlnaCAxNiBiaXRzIG9mIGxpbmtzIGNvdW50ICovCiAJX19sZTE2IGlfeGF0dHJfaW5saW5lX3NpemU7CiAJX19sZTMyIGlfY2x1c3RlcnM7CQkvKiBDbHVzdGVyIGNvdW50ICovCiAJX19sZTMyIGlfdWlkOwkJCS8qIE93bmVyIFVJRCAqLwpAQCAtNzA1LDcgKzcxNiw4IEBACiAJX19sZTE2IGlfZHluX2ZlYXR1cmVzOwogCV9fbGU2NCBpX3hhdHRyX2xvYzsKIC8qODAqLwlzdHJ1Y3Qgb2NmczJfYmxvY2tfY2hlY2sgaV9jaGVjazsJLyogRXJyb3IgY2hlY2tpbmcgKi8KLS8qODgqLwlfX2xlNjQgaV9yZXNlcnZlZDJbNl07CisvKjg4Ki8JX19sZTY0IGlfZHhfcm9vdDsJCS8qIFBvaW50ZXIgdG8gZGlyIGluZGV4IHJvb3QgYmxvY2sgKi8KKwlfX2xlNjQgaV9yZXNlcnZlZDJbNV07CiAvKkI4Ki8JdW5pb24gewogCQlfX2xlNjQgaV9wYWQxOwkJLyogR2VuZXJpYyB3YXkgdG8gcmVmZXIgdG8gdGhpcwogCQkJCQkgICA2NGJpdCB1bmlvbiAqLwpAQCAtNzgxLDYgKzc5Myw5MCBAQAogLyo0MCovCiB9OwogCisgLyoKKyAqIEEgZGlyZWN0b3J5IGVudHJ5IGluIHRoZSBpbmRleGVkIHRyZWUuIFdlIGRvbid0IHN0b3JlIHRoZSBmdWxsIG5hbWUgaGVyZSwKKyAqIGJ1dCBpbnN0ZWFkIHByb3ZpZGUgYSBwb2ludGVyIHRvIHRoZSBmdWxsIGRpcmVudCBpbiB0aGUgdW5pbmRleGVkIHRyZWUuCisgKgorICogV2UgYWxzbyBzdG9yZSBuYW1lX2xlbiBoZXJlIHNvIGFzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxlYWYgYmxvY2tzIHdlCisgKiBuZWVkIHRvIHNlYXJjaCBpbiBjYXNlIG9mIGNvbGxpc2lvbnMuCisgKi8KK3N0cnVjdCBvY2ZzMl9keF9lbnRyeSB7CisJX19sZTMyCQlkeF9tYWpvcl9oYXNoOwkvKiBVc2VkIHRvIGZpbmQgbG9naWNhbAorCQkJCQkgKiBjbHVzdGVyIGluIGluZGV4ICovCisJX19sZTMyCQlkeF9taW5vcl9oYXNoOwkvKiBMb3dlciBiaXRzIHVzZWQgdG8gZmluZAorCQkJCQkgKiBibG9jayBpbiBjbHVzdGVyICovCisJX19sZTY0CQlkeF9kaXJlbnRfYmxrOwkvKiBQaHlzaWNhbCBibG9jayBpbiB1bmluZGV4ZWQKKwkJCQkJICogdHJlZSBob2xkaW5nIHRoaXMgZGlyZW50LiAqLworfTsKKworc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgeworCV9fbGUzMgkJZGVfcmVzZXJ2ZWQ7CisJX19sZTE2CQlkZV9jb3VudDsJLyogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcworCQkJCQkgKiBwb3NzaWJsZSBpbiBkZV9lbnRyaWVzICovCisJX19sZTE2CQlkZV9udW1fdXNlZDsJLyogQ3VycmVudCBudW1iZXIgb2YKKwkJCQkJICogZGVfZW50cmllcyBlbnRyaWVzICovCisJc3RydWN0CW9jZnMyX2R4X2VudHJ5CQlkZV9lbnRyaWVzWzBdOwkvKiBJbmRleGVkIGRpciBlbnRyaWVzCisJCQkJCQkJICogaW4gYSBwYWNrZWQgYXJyYXkgb2YKKwkJCQkJCQkgKiBsZW5ndGggZGVfbnVtX3VzZWQgKi8KK307CisKKyNkZWZpbmUgT0NGUzJfRFhfRkxBR19JTkxJTkUJMHgwMQorCisvKgorICogQSBkaXJlY3RvcnkgaW5kZXhpbmcgYmxvY2suIEVhY2ggaW5kZXhlZCBkaXJlY3RvcnkgaGFzIG9uZSBvZiB0aGVzZSwKKyAqIHBvaW50ZWQgdG8gYnkgb2NmczJfZGlub2RlLgorICoKKyAqIFRoaXMgYmxvY2sgc3RvcmVzIGFuIGluZGV4ZWQgYnRyZWUgcm9vdCwgYW5kIGEgc2V0IG9mIGZyZWUgc3BhY2UKKyAqIHN0YXJ0LW9mLWxpc3QgcG9pbnRlcnMuCisgKi8KK3N0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrIHsKKwlfX3U4CQlkcl9zaWduYXR1cmVbOF07CS8qIFNpZ25hdHVyZSBmb3IgdmVyaWZpY2F0aW9uICovCisJc3RydWN0IG9jZnMyX2Jsb2NrX2NoZWNrIGRyX2NoZWNrOwkvKiBFcnJvciBjaGVja2luZyAqLworCV9fbGUxNgkJZHJfc3ViYWxsb2Nfc2xvdDsJLyogU2xvdCBzdWJhbGxvY2F0b3IgdGhpcworCQkJCQkJICogYmxvY2sgYmVsb25ncyB0by4gKi8KKwlfX2xlMTYJCWRyX3N1YmFsbG9jX2JpdDsJLyogQml0IG9mZnNldCBpbiBzdWJhbGxvY2F0b3IKKwkJCQkJCSAqIGJsb2NrIGdyb3VwICovCisJX19sZTMyCQlkcl9mc19nZW5lcmF0aW9uOwkvKiBNdXN0IG1hdGNoIHN1cGVyIGJsb2NrICovCisJX19sZTY0CQlkcl9ibGtubzsJCS8qIE9mZnNldCBvbiBkaXNrLCBpbiBibG9ja3MgKi8KKwlfX2xlNjQJCWRyX2xhc3RfZWJfYmxrOwkJLyogUG9pbnRlciB0byBsYXN0CisJCQkJCQkgKiBleHRlbnQgYmxvY2sgKi8KKwlfX2xlMzIJCWRyX2NsdXN0ZXJzOwkJLyogQ2x1c3RlcnMgYWxsb2NhdGVkCisJCQkJCQkgKiB0byB0aGUgaW5kZXhlZCB0cmVlLiAqLworCV9fdTgJCWRyX2ZsYWdzOwkJLyogT0NGUzJfRFhfRkxBR18qIGZsYWdzICovCisJX191OAkJZHJfcmVzZXJ2ZWQwOworCV9fbGUxNgkJZHJfcmVzZXJ2ZWQxOworCV9fbGU2NAkJZHJfZGlyX2Jsa25vOwkJLyogUG9pbnRlciB0byBwYXJlbnQgaW5vZGUgKi8KKwlfX2xlMzIJCWRyX251bV9lbnRyaWVzOwkJLyogVG90YWwgbnVtYmVyIG9mCisJCQkJCQkgKiBuYW1lcyBzdG9yZWQgaW4KKwkJCQkJCSAqIHRoaXMgZGlyZWN0b3J5LiovCisJX19sZTMyCQlkcl9yZXNlcnZlZDI7CisJX19sZTY0CQlkcl9mcmVlX2JsazsJCS8qIFBvaW50ZXIgdG8gaGVhZCBvZiBmcmVlCisJCQkJCQkgKiB1bmluZGV4ZWQgYmxvY2sgbGlzdC4gKi8KKwlfX2xlNjQJCWRyX3Jlc2VydmVkM1sxNV07CisJdW5pb24geworCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgZHJfbGlzdDsgLyogS2VlcCB0aGlzIGFsaWduZWQgdG8gMTI4CisJCQkJCQkgICAqIGJpdHMgZm9yIG1heGltdW0gc3BhY2UKKwkJCQkJCSAgICogZWZmaWNpZW5jeS4gKi8KKwkJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgZHJfZW50cmllczsgLyogSW4tcm9vdC1ibG9jayBsaXN0IG9mCisJCQkJCQkJKiBlbnRyaWVzLiBXZSBncm93IG91dAorCQkJCQkJCSogdG8gZXh0ZW50cyBpZiB0aGlzCisJCQkJCQkJKiBnZXRzIHRvbyBiaWcuICovCisJfTsKK307CisKKy8qCisgKiBUaGUgaGVhZGVyIG9mIGEgbGVhZiBibG9jayBpbiB0aGUgaW5kZXhlZCB0cmVlLgorICovCitzdHJ1Y3Qgb2NmczJfZHhfbGVhZiB7CisJX191OAkJZGxfc2lnbmF0dXJlWzhdOy8qIFNpZ25hdHVyZSBmb3IgdmVyaWZpY2F0aW9uICovCisJc3RydWN0IG9jZnMyX2Jsb2NrX2NoZWNrIGRsX2NoZWNrOwkvKiBFcnJvciBjaGVja2luZyAqLworCV9fbGU2NAkJZGxfYmxrbm87CS8qIE9mZnNldCBvbiBkaXNrLCBpbiBibG9ja3MgKi8KKwlfX2xlMzIJCWRsX2ZzX2dlbmVyYXRpb247LyogTXVzdCBtYXRjaCBzdXBlciBibG9jayAqLworCV9fbGUzMgkJZGxfcmVzZXJ2ZWQwOworCV9fbGU2NAkJZGxfcmVzZXJ2ZWQxOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0CWRsX2xpc3Q7Cit9OworCiAvKgogICogT24gZGlzayBhbGxvY2F0b3IgZ3JvdXAgc3RydWN0dXJlIGZvciBPQ0ZTMgogICovCkBAIC0xMTEyLDYgKzEyMDgsMTYgQEAKIAlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V4dGVudF9yZWNzX3Blcl9keF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2ssIGRyX2xpc3QubF9yZWNzKTsKKworCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfY2hhaW5fcmVjc19wZXJfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlpbnQgc2l6ZTsKQEAgLTExMzIsNiArMTIzOCwyNiBAQAogCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfZHhfZW50cmllc19wZXJfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBzaXplOworCisJc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9keF9sZWFmLCBkbF9saXN0LmRlX2VudHJpZXMpOworCisJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX2R4X2VudHJ5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfZHhfZW50cmllc19wZXJfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBzaXplOworCisJc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrLCBkcl9lbnRyaWVzLmRlX2VudHJpZXMpOworCisJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX2R4X2VudHJ5KTsKK30KKwogc3RhdGljIGlubGluZSB1MTYgb2NmczJfbG9jYWxfYWxsb2Nfc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXUxNiBzaXplOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfbG9ja2lkLmggYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaAppbmRleCBlYjZmNTBjLi5hNTNjZTg3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaApAQCAtNDcsNiArNDcsNyBAQAogCU9DRlMyX0xPQ0tfVFlQRV9PUEVOLAogCU9DRlMyX0xPQ0tfVFlQRV9GTE9DSywKIAlPQ0ZTMl9MT0NLX1RZUEVfUUlORk8sCisJT0NGUzJfTE9DS19UWVBFX05GU19TWU5DLAogCU9DRlMyX05VTV9MT0NLX1RZUEVTCiB9OwogCkBAIC04MSw2ICs4Miw5IEBACiAJCWNhc2UgT0NGUzJfTE9DS19UWVBFX1FJTkZPOgogCQkJYyA9ICdRJzsKIAkJCWJyZWFrOworCQljYXNlIE9DRlMyX0xPQ0tfVFlQRV9ORlNfU1lOQzoKKwkJCWMgPSAnWSc7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWMgPSAnXDAnOwogCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1YmFsbG9jLmMgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCmluZGV4IGE2OTYyODYuLmI0Y2E1OTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1YmFsbG9jLmMKKysrIGIvZnMvb2NmczIvc3ViYWxsb2MuYwpAQCAtNDgsNyArNDgsOCBAQAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKICNkZWZpbmUgTk9UX0FMTE9DX05FV19HUk9VUAkJMAotI2RlZmluZSBBTExPQ19ORVdfR1JPVVAJCQkxCisjZGVmaW5lIEFMTE9DX05FV19HUk9VUAkJCTB4MQorI2RlZmluZSBBTExPQ19HUk9VUFNfRlJPTV9HTE9CQUwJMHgyCiAKICNkZWZpbmUgT0NGUzJfTUFYX0lOT0RFU19UT19TVEVBTAkxMDI0CiAKQEAgLTY0LDcgKzY1LDkgQEAKIHN0YXRpYyBpbnQgb2NmczJfYmxvY2tfZ3JvdXBfYWxsb2Moc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgc3RydWN0IGlub2RlICphbGxvY19pbm9kZSwKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJCSAgIHU2NCBtYXhfYmxvY2spOworCQkJCSAgIHU2NCBtYXhfYmxvY2ssCisJCQkJICAgdTY0ICpsYXN0X2FsbG9jX2dyb3VwLAorCQkJCSAgIGludCBmbGFncyk7CiAKIHN0YXRpYyBpbnQgb2NmczJfY2x1c3Rlcl9ncm91cF9zZWFyY2goc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoLApAQCAtMTE2LDYgKzExOSw3IEBACiAJCQkJCQl1MTYgKmJnX2JpdF9vZmYpOwogc3RhdGljIGludCBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzX3dpdGhfbGltaXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJCSAgICAgdTMyIGJpdHNfd2FudGVkLCB1NjQgbWF4X2Jsb2NrLAorCQkJCQkgICAgIGludCBmbGFncywKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKTsKIAogdm9pZCBvY2ZzMl9mcmVlX2FjX3Jlc291cmNlKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKQEAgLTQwMyw3ICs0MDcsOSBAQAogc3RhdGljIGludCBvY2ZzMl9ibG9ja19ncm91cF9hbGxvYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgICBzdHJ1Y3QgaW5vZGUgKmFsbG9jX2lub2RlLAogCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQkJICAgdTY0IG1heF9ibG9jaykKKwkJCQkgICB1NjQgbWF4X2Jsb2NrLAorCQkJCSAgIHU2NCAqbGFzdF9hbGxvY19ncm91cCwKKwkJCQkgICBpbnQgZmxhZ3MpCiB7CiAJaW50IHN0YXR1cywgY3JlZGl0czsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGJoLT5iX2RhdGE7CkBAIC00MjMsNyArNDI5LDcgQEAKIAljbCA9ICZmZS0+aWQyLmlfY2hhaW47CiAJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KG9zYiwKIAkJCQkJCSAgIGxlMTZfdG9fY3B1KGNsLT5jbF9jcGcpLAotCQkJCQkJICAgbWF4X2Jsb2NrLCAmYWMpOworCQkJCQkJICAgbWF4X2Jsb2NrLCBmbGFncywgJmFjKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00NDAsNiArNDQ2LDExIEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlpZiAobGFzdF9hbGxvY19ncm91cCAmJiAqbGFzdF9hbGxvY19ncm91cCAhPSAwKSB7CisJCW1sb2coMCwgInVzZSBvbGQgYWxsb2NhdGlvbiBncm91cCAlbGx1IGZvciBibG9jayBncm91cCBhbGxvY1xuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSpsYXN0X2FsbG9jX2dyb3VwKTsKKwkJYWMtPmFjX2xhc3RfZ3JvdXAgPSAqbGFzdF9hbGxvY19ncm91cDsKKwl9CiAJc3RhdHVzID0gb2NmczJfY2xhaW1fY2x1c3RlcnMob3NiLAogCQkJCSAgICAgIGhhbmRsZSwKIAkJCQkgICAgICBhYywKQEAgLTUxNCw2ICs1MjUsMTEgQEAKIAlhbGxvY19pbm9kZS0+aV9ibG9ja3MgPSBvY2ZzMl9pbm9kZV9zZWN0b3JfY291bnQoYWxsb2NfaW5vZGUpOwogCiAJc3RhdHVzID0gMDsKKworCS8qIHNhdmUgdGhlIG5ldyBsYXN0IGFsbG9jIGdyb3VwIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2FjaGUgaXQuICovCisJaWYgKGxhc3RfYWxsb2NfZ3JvdXApCisJCSpsYXN0X2FsbG9jX2dyb3VwID0gYWMtPmFjX2xhc3RfZ3JvdXA7CisKIGJhaWw6CiAJaWYgKGhhbmRsZSkKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKQEAgLTUzMSw3ICs1NDcsOCBAQAogCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMsCiAJCQkJICAgICAgIGludCB0eXBlLAogCQkJCSAgICAgICB1MzIgc2xvdCwKLQkJCQkgICAgICAgaW50IGFsbG9jX25ld19ncm91cCkKKwkJCQkgICAgICAgdTY0ICpsYXN0X2FsbG9jX2dyb3VwLAorCQkJCSAgICAgICBpbnQgZmxhZ3MpCiB7CiAJaW50IHN0YXR1czsKIAl1MzIgYml0c193YW50ZWQgPSBhYy0+YWNfYml0c193YW50ZWQ7CkBAIC01ODcsNyArNjA0LDcgQEAKIAkJCWdvdG8gYmFpbDsKIAkJfQogCi0JCWlmIChhbGxvY19uZXdfZ3JvdXAgIT0gQUxMT0NfTkVXX0dST1VQKSB7CisJCWlmICghKGZsYWdzICYgQUxMT0NfTkVXX0dST1VQKSkgewogCQkJbWxvZygwLCAiQWxsb2MgRmlsZSAldSBGdWxsOiB3YW50ZWQ9JXUsIGZyZWVfYml0cz0ldSwgIgogCQkJICAgICAiYW5kIHdlIGRvbid0IGFsbG9jIGEgbmV3IGdyb3VwIGZvciBpdC5cbiIsCiAJCQkgICAgIHNsb3QsIGJpdHNfd2FudGVkLCBmcmVlX2JpdHMpOwpAQCAtNTk2LDcgKzYxMyw4IEBACiAJCX0KIAogCQlzdGF0dXMgPSBvY2ZzMl9ibG9ja19ncm91cF9hbGxvYyhvc2IsIGFsbG9jX2lub2RlLCBiaCwKLQkJCQkJCSBhYy0+YWNfbWF4X2Jsb2NrKTsKKwkJCQkJCSBhYy0+YWNfbWF4X2Jsb2NrLAorCQkJCQkJIGxhc3RfYWxsb2NfZ3JvdXAsIGZsYWdzKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02NDAsNyArNjU4LDcgQEAKIAogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsICgqYWMpLAogCQkJCQkgICAgIEVYVEVOVF9BTExPQ19TWVNURU1fSU5PREUsCi0JCQkJCSAgICAgc2xvdCwgQUxMT0NfTkVXX0dST1VQKTsKKwkJCQkJICAgICBzbG90LCBOVUxMLCBBTExPQ19ORVdfR1JPVVApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTY4Niw3ICs3MDQsOCBAQAogCiAJCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsIGFjLAogCQkJCQkJICAgICBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUsCi0JCQkJCQkgICAgIHNsb3QsIE5PVF9BTExPQ19ORVdfR1JPVVApOworCQkJCQkJICAgICBzbG90LCBOVUxMLAorCQkJCQkJICAgICBOT1RfQUxMT0NfTkVXX0dST1VQKTsKIAkJaWYgKHN0YXR1cyA+PSAwKSB7CiAJCQlvY2ZzMl9zZXRfaW5vZGVfc3RlYWxfc2xvdChvc2IsIHNsb3QpOwogCQkJYnJlYWs7CkBAIC03MDMsNiArNzIyLDcgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXMxNiBzbG90ID0gb2NmczJfZ2V0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKKwl1NjQgYWxsb2NfZ3JvdXA7CiAKIAkqYWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCksIEdGUF9LRVJORUwpOwogCWlmICghKCphYykpIHsKQEAgLTczOCwxMiArNzU4LDIyIEBACiAJCWdvdG8gaW5vZGVfc3RlYWw7CiAKIAlhdG9taWNfc2V0KCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4sIDApOworCWFsbG9jX2dyb3VwID0gb3NiLT5vc2JfaW5vZGVfYWxsb2NfZ3JvdXA7CiAJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9zdWJhbGxvY19iaXRzKG9zYiwgKmFjLAogCQkJCQkgICAgIElOT0RFX0FMTE9DX1NZU1RFTV9JTk9ERSwKLQkJCQkJICAgICBvc2ItPnNsb3RfbnVtLCBBTExPQ19ORVdfR1JPVVApOworCQkJCQkgICAgIG9zYi0+c2xvdF9udW0sCisJCQkJCSAgICAgJmFsbG9jX2dyb3VwLAorCQkJCQkgICAgIEFMTE9DX05FV19HUk9VUCB8CisJCQkJCSAgICAgQUxMT0NfR1JPVVBTX0ZST01fR0xPQkFMKTsKIAlpZiAoc3RhdHVzID49IDApIHsKIAkJc3RhdHVzID0gMDsKIAorCQlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCQlvc2ItPm9zYl9pbm9kZV9hbGxvY19ncm91cCA9IGFsbG9jX2dyb3VwOworCQlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisJCW1sb2coMCwgImFmdGVyIHJlc2VydmF0aW9uLCBuZXcgYWxsb2NhdGlvbiBncm91cCBpcyAiCisJCSAgICAgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYWxsb2NfZ3JvdXApOworCiAJCS8qCiAJCSAqIFNvbWUgaW5vZGVzIG11c3QgYmUgZnJlZWQgYnkgdXMsIHNvIHRyeSB0byBhbGxvY2F0ZQogCQkgKiBmcm9tIG91ciBvd24gbmV4dCB0aW1lLgpAQCAtNzkwLDcgKzgyMCw3IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX3N1YmFsbG9jX2JpdHMob3NiLCBhYywKIAkJCQkJICAgICBHTE9CQUxfQklUTUFQX1NZU1RFTV9JTk9ERSwKLQkJCQkJICAgICBPQ0ZTMl9JTlZBTElEX1NMT1QsCisJCQkJCSAgICAgT0NGUzJfSU5WQUxJRF9TTE9ULCBOVUxMLAogCQkJCQkgICAgIEFMTE9DX05FV19HUk9VUCk7CiAJaWYgKHN0YXR1cyA8IDAgJiYgc3RhdHVzICE9IC1FTk9TUEMpIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtODA2LDYgKzgzNiw3IEBACiAgKiB0aGluZ3MgYSBiaXQuICovCiBzdGF0aWMgaW50IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnNfd2l0aF9saW1pdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkJICAgICB1MzIgYml0c193YW50ZWQsIHU2NCBtYXhfYmxvY2ssCisJCQkJCSAgICAgaW50IGZsYWdzLAogCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCiB7CiAJaW50IHN0YXR1czsKQEAgLTgyMyw3ICs4NTQsOCBAQAogCSgqYWMpLT5hY19tYXhfYmxvY2sgPSBtYXhfYmxvY2s7CiAKIAlzdGF0dXMgPSAtRU5PU1BDOwotCWlmIChvY2ZzMl9hbGxvY19zaG91bGRfdXNlX2xvY2FsKG9zYiwgYml0c193YW50ZWQpKSB7CisJaWYgKCEoZmxhZ3MgJiBBTExPQ19HUk9VUFNfRlJPTV9HTE9CQUwpICYmCisJICAgIG9jZnMyX2FsbG9jX3Nob3VsZF91c2VfbG9jYWwob3NiLCBiaXRzX3dhbnRlZCkpIHsKIAkJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9sb2NhbF9hbGxvY19iaXRzKG9zYiwKIAkJCQkJCQliaXRzX3dhbnRlZCwKIAkJCQkJCQkqYWMpOwpAQCAtODYxLDcgKzg5Myw4IEBACiAJCQkgICB1MzIgYml0c193YW50ZWQsCiAJCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQogewotCXJldHVybiBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzX3dpdGhfbGltaXQob3NiLCBiaXRzX3dhbnRlZCwgMCwgYWMpOworCXJldHVybiBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzX3dpdGhfbGltaXQob3NiLCBiaXRzX3dhbnRlZCwgMCwKKwkJCQkJCSBBTExPQ19ORVdfR1JPVVAsIGFjKTsKIH0KIAogLyoKQEAgLTE2MTgsOCArMTY1MSw0MSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyB2b2lkIG9jZnMyX2luaXRfaW5vZGVfYWNfZ3JvdXAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilwYXJlbnRfZmVfYmgtPmJfZGF0YTsKKwkvKgorCSAqIFRyeSB0byBhbGxvY2F0ZSBpbm9kZXMgZnJvbSBzb21lIHNwZWNpZmljIGdyb3VwLgorCSAqCisJICogSWYgdGhlIHBhcmVudCBkaXIgaGFzIHJlY29yZGVkIHRoZSBsYXN0IGdyb3VwIHVzZWQgaW4gYWxsb2NhdGlvbiwKKwkgKiBjb29sLCB1c2UgaXQuIE90aGVyd2lzZSBpZiB3ZSB0cnkgdG8gYWxsb2NhdGUgbmV3IGlub2RlIGZyb20gdGhlCisJICogc2FtZSBzbG90IHRoZSBwYXJlbnQgZGlyIGJlbG9uZ3MgdG8sIHVzZSB0aGUgc2FtZSBjaHVuay4KKwkgKgorCSAqIFdlIGFyZSB2ZXJ5IGNhcmVmdWwgaGVyZSB0byBhdm9pZCB0aGUgbWlzdGFrZSBvZiBzZXR0aW5nCisJICogYWNfbGFzdF9ncm91cCB0byBhIGdyb3VwIGRlc2NyaXB0b3IgZnJvbSBhIGRpZmZlcmVudCAodW5sb2NrZWQpIHNsb3QuCisJICovCisJaWYgKE9DRlMyX0koZGlyKS0+aXBfbGFzdF91c2VkX2dyb3VwICYmCisJICAgIE9DRlMyX0koZGlyKS0+aXBfbGFzdF91c2VkX3Nsb3QgPT0gYWMtPmFjX2FsbG9jX3Nsb3QpCisJCWFjLT5hY19sYXN0X2dyb3VwID0gT0NGUzJfSShkaXIpLT5pcF9sYXN0X3VzZWRfZ3JvdXA7CisJZWxzZSBpZiAobGUxNl90b19jcHUoZmUtPmlfc3ViYWxsb2Nfc2xvdCkgPT0gYWMtPmFjX2FsbG9jX3Nsb3QpCisJCWFjLT5hY19sYXN0X2dyb3VwID0gb2NmczJfd2hpY2hfc3ViYWxsb2NfZ3JvdXAoCisJCQkJCWxlNjRfdG9fY3B1KGZlLT5pX2Jsa25vKSwKKwkJCQkJbGUxNl90b19jcHUoZmUtPmlfc3ViYWxsb2NfYml0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9zYXZlX2lub2RlX2FjX2dyb3VwKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKK3sKKwlPQ0ZTMl9JKGRpciktPmlwX2xhc3RfdXNlZF9ncm91cCA9IGFjLT5hY19sYXN0X2dyb3VwOworCU9DRlMyX0koZGlyKS0+aXBfbGFzdF91c2VkX3Nsb3QgPSBhYy0+YWNfYWxsb2Nfc2xvdDsKK30KKwogaW50IG9jZnMyX2NsYWltX25ld19pbm9kZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgc3RydWN0IGlub2RlICpkaXIsCisJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAogCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMsCiAJCQkgIHUxNiAqc3ViYWxsb2NfYml0LAogCQkJICB1NjQgKmZlX2Jsa25vKQpAQCAtMTYzNSw2ICsxNzAxLDggQEAKIAlCVUdfT04oYWMtPmFjX2JpdHNfd2FudGVkICE9IDEpOwogCUJVR19PTihhYy0+YWNfd2hpY2ggIT0gT0NGUzJfQUNfVVNFX0lOT0RFKTsKIAorCW9jZnMyX2luaXRfaW5vZGVfYWNfZ3JvdXAoZGlyLCBwYXJlbnRfZmVfYmgsIGFjKTsKKwogCXN0YXR1cyA9IG9jZnMyX2NsYWltX3N1YmFsbG9jX2JpdHMob3NiLAogCQkJCQkgICBhYywKIAkJCQkJICAgaGFuZGxlLApAQCAtMTY1Myw2ICsxNzIxLDcgQEAKIAogCSpmZV9ibGtubyA9IGJnX2Jsa25vICsgKHU2NCkgKCpzdWJhbGxvY19iaXQpOwogCWFjLT5hY19iaXRzX2dpdmVuKys7CisJb2NmczJfc2F2ZV9pbm9kZV9hY19ncm91cChkaXIsIGFjKTsKIAlzdGF0dXMgPSAwOwogYmFpbDoKIAltbG9nX2V4aXQoc3RhdHVzKTsKQEAgLTIxMTYsMyArMjE4NSwxNjIgQEAKIAogCXJldHVybiByZXQ7CiB9CisKKy8qCisgKiBSZWFkIHRoZSBpbm9kZSBzcGVjaWZpZWQgYnkgYmxrbm8gdG8gZ2V0IHN1YmFsbG9jX3Nsb3QgYW5kCisgKiBzdWJhbGxvY19iaXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3N1YmFsbG9jX3Nsb3RfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxrbm8sCisJCQkJICAgICAgIHUxNiAqc3ViYWxsb2Nfc2xvdCwgdTE2ICpzdWJhbGxvY19iaXQpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICppbm9kZV9mZTsKKworCW1sb2dfZW50cnkoImJsa25vOiAlbGx1XG4iLCBibGtubyk7CisKKwkvKiBkaXJ0eSByZWFkIGRpc2sgKi8KKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKG9zYiwgYmxrbm8sIDEsICZpbm9kZV9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZyhNTF9FUlJPUiwgInJlYWQgYmxvY2sgJWxsdSBmYWlsZWQgJWRcbiIsIGJsa25vLCBzdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQorCisJaW5vZGVfZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBpbm9kZV9iaC0+Yl9kYXRhOworCWlmICghT0NGUzJfSVNfVkFMSURfRElOT0RFKGlub2RlX2ZlKSkgeworCQltbG9nKE1MX0VSUk9SLCAiaW52YWxpZCBpbm9kZSAlbGx1IHJlcXVlc3RlZFxuIiwgYmxrbm8pOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGxlMTZfdG9fY3B1KGlub2RlX2ZlLT5pX3N1YmFsbG9jX3Nsb3QpICE9IE9DRlMyX0lOVkFMSURfU0xPVCAmJgorCSAgICAodTMyKWxlMTZfdG9fY3B1KGlub2RlX2ZlLT5pX3N1YmFsbG9jX3Nsb3QpID4gb3NiLT5tYXhfc2xvdHMgLSAxKSB7CisJCW1sb2coTUxfRVJST1IsICJpbm9kZSAlbGx1IGhhcyBpbnZhbGlkIHN1YmFsbG9jIHNsb3QgJXVcbiIsCisJCSAgICAgYmxrbm8sICh1MzIpbGUxNl90b19jcHUoaW5vZGVfZmUtPmlfc3ViYWxsb2Nfc2xvdCkpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKHN1YmFsbG9jX3Nsb3QpCisJCSpzdWJhbGxvY19zbG90ID0gbGUxNl90b19jcHUoaW5vZGVfZmUtPmlfc3ViYWxsb2Nfc2xvdCk7CisJaWYgKHN1YmFsbG9jX2JpdCkKKwkJKnN1YmFsbG9jX2JpdCA9IGxlMTZfdG9fY3B1KGlub2RlX2ZlLT5pX3N1YmFsbG9jX2JpdCk7CisKK2JhaWw6CisJYnJlbHNlKGlub2RlX2JoKTsKKworCW1sb2dfZXhpdChzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB0ZXN0IHdoZXRoZXIgYml0IGlzIFNFVCBpbiBhbGxvY2F0b3IgYml0bWFwIG9yIG5vdC4gIG9uIHN1Y2Nlc3MsIDAKKyAqIGlzIHJldHVybmVkIGFuZCAqcmVzIGlzIDEgZm9yIFNFVDsgMCBvdGhlcndpc2UuICB3aGVuIGZhaWxzLCBlcnJubworICogaXMgcmV0dXJuZWQgYW5kICpyZXMgaXMgbWVhbmluZ2xlc3MuICBDYWxsIHRoaXMgYWZ0ZXIgeW91IGhhdmUKKyAqIGNsdXN0ZXIgbG9ja2VkIGFnYWluc3Qgc3ViYWxsb2MsIG9yIHlvdSBtYXkgZ2V0IGEgcmVzdWx0IGJhc2VkIG9uCisgKiBub24tdXAyZGF0ZSBjb250ZW50cworICovCitzdGF0aWMgaW50IG9jZnMyX3Rlc3Rfc3ViYWxsb2NfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgIHN0cnVjdCBpbm9kZSAqc3ViYWxsb2MsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICphbGxvY19iaCwgdTY0IGJsa25vLAorCQkJCSAgIHUxNiBiaXQsIGludCAqcmVzKQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmFsbG9jX2ZlOworCXN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICpncm91cDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoID0gTlVMTDsKKwl1NjQgYmdfYmxrbm87CisJaW50IHN0YXR1czsKKworCW1sb2dfZW50cnkoImJsa25vOiAlbGx1IGJpdDogJXVcbiIsIGJsa25vLCAodW5zaWduZWQgaW50KWJpdCk7CisKKwlhbGxvY19mZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopYWxsb2NfYmgtPmJfZGF0YTsKKwlpZiAoKGJpdCArIDEpID4gb2NmczJfYml0c19wZXJfZ3JvdXAoJmFsbG9jX2ZlLT5pZDIuaV9jaGFpbikpIHsKKwkJbWxvZyhNTF9FUlJPUiwgInN1YmFsbG9jIGJpdCAldSBvdXQgb2YgcmFuZ2Ugb2YgJXVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGludCliaXQsCisJCSAgICAgb2NmczJfYml0c19wZXJfZ3JvdXAoJmFsbG9jX2ZlLT5pZDIuaV9jaGFpbikpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJYmdfYmxrbm8gPSBvY2ZzMl93aGljaF9zdWJhbGxvY19ncm91cChibGtubywgYml0KTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2dyb3VwX2Rlc2NyaXB0b3Ioc3ViYWxsb2MsIGFsbG9jX2ZlLCBiZ19ibGtubywKKwkJCQkJICAgICAmZ3JvdXBfYmgpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2coTUxfRVJST1IsICJyZWFkIGdyb3VwICVsbHUgZmFpbGVkICVkXG4iLCBiZ19ibGtubywgc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCWdyb3VwID0gKHN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICopIGdyb3VwX2JoLT5iX2RhdGE7CisJKnJlcyA9IG9jZnMyX3Rlc3RfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKilncm91cC0+YmdfYml0bWFwKTsKKworYmFpbDoKKwlicmVsc2UoZ3JvdXBfYmgpOworCisJbWxvZ19leGl0KHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRlc3QgaWYgdGhlIGJpdCByZXByZXNlbnRpbmcgdGhpcyBpbm9kZSAoYmxrbm8pIGlzIHNldCBpbiB0aGUKKyAqIHN1YmFsbG9jYXRvci4KKyAqCisgKiBPbiBzdWNjZXNzLCAwIGlzIHJldHVybmVkIGFuZCAqcmVzIGlzIDEgZm9yIFNFVDsgMCBvdGhlcndpc2UuCisgKgorICogSW4gdGhlIGV2ZW50IG9mIGZhaWx1cmUsIGEgbmVnYXRpdmUgdmFsdWUgaXMgcmV0dXJuZWQgYW5kICpyZXMgaXMKKyAqIG1lYW5pbmdsZXNzLgorICoKKyAqIENhbGxlcnMgbXVzdCBtYWtlIHN1cmUgdG8gaG9sZCBuZnNfc3luY19sb2NrIHRvIHByZXZlbnQKKyAqIG9jZnMyX2RlbGV0ZV9pbm9kZSgpIG9uIGFub3RoZXIgbm9kZSBmcm9tIGFjY2Vzc2luZyB0aGUgc2FtZQorICogc3ViYWxsb2NhdG9yIGNvbmN1cnJlbnRseS4KKyAqLworaW50IG9jZnMyX3Rlc3RfaW5vZGVfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxrbm8sIGludCAqcmVzKQoreworCWludCBzdGF0dXM7CisJdTE2IHN1YmFsbG9jX2JpdCA9IDAsIHN1YmFsbG9jX3Nsb3QgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGVfYWxsb2NfaW5vZGU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICphbGxvY19iaCA9IE5VTEw7CisKKwltbG9nX2VudHJ5KCJibGtubzogJWxsdSIsIGJsa25vKTsKKworCXN0YXR1cyA9IG9jZnMyX2dldF9zdWJhbGxvY19zbG90X2JpdChvc2IsIGJsa25vLCAmc3ViYWxsb2Nfc2xvdCwKKwkJCQkJICAgICAmc3ViYWxsb2NfYml0KTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nKE1MX0VSUk9SLCAiZ2V0IGFsbG9jIHNsb3QgYW5kIGJpdCBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpbm9kZV9hbGxvY19pbm9kZSA9CisJCW9jZnMyX2dldF9zeXN0ZW1fZmlsZV9pbm9kZShvc2IsIElOT0RFX0FMTE9DX1NZU1RFTV9JTk9ERSwKKwkJCQkJICAgIHN1YmFsbG9jX3Nsb3QpOworCWlmICghaW5vZGVfYWxsb2NfaW5vZGUpIHsKKwkJLyogdGhlIGVycm9yIGNvZGUgY291bGQgYmUgaW5hY2N1cmF0ZSwgYnV0IHdlIGFyZSBub3QgYWJsZSB0bworCQkgKiBnZXQgdGhlIGNvcnJlY3Qgb25lLiAqLworCQlzdGF0dXMgPSAtRUlOVkFMOworCQltbG9nKE1MX0VSUk9SLCAidW5hYmxlIHRvIGdldCBhbGxvYyBpbm9kZSBpbiBzbG90ICV1XG4iLAorCQkgICAgICh1MzIpc3ViYWxsb2Nfc2xvdCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwltdXRleF9sb2NrKCZpbm9kZV9hbGxvY19pbm9kZS0+aV9tdXRleCk7CisJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhpbm9kZV9hbGxvY19pbm9kZSwgJmFsbG9jX2JoLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltdXRleF91bmxvY2soJmlub2RlX2FsbG9jX2lub2RlLT5pX211dGV4KTsKKwkJbWxvZyhNTF9FUlJPUiwgImxvY2sgb24gYWxsb2MgaW5vZGUgb24gc2xvdCAldSBmYWlsZWQgJWRcbiIsCisJCSAgICAgKHUzMilzdWJhbGxvY19zbG90LCBzdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQorCisJc3RhdHVzID0gb2NmczJfdGVzdF9zdWJhbGxvY19iaXQob3NiLCBpbm9kZV9hbGxvY19pbm9kZSwgYWxsb2NfYmgsCisJCQkJCSBibGtubywgc3ViYWxsb2NfYml0LCByZXMpOworCWlmIChzdGF0dXMgPCAwKQorCQltbG9nKE1MX0VSUk9SLCAidGVzdCBzdWJhbGxvYyBiaXQgZmFpbGVkICVkXG4iLCBzdGF0dXMpOworCisJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlX2FsbG9jX2lub2RlLCAwKTsKKwltdXRleF91bmxvY2soJmlub2RlX2FsbG9jX2lub2RlLT5pX211dGV4KTsKKworCWlwdXQoaW5vZGVfYWxsb2NfaW5vZGUpOworCWJyZWxzZShhbGxvY19iaCk7CitiYWlsOgorCW1sb2dfZXhpdChzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdWJhbGxvYy5oIGIvZnMvb2NmczIvc3ViYWxsb2MuaAppbmRleCBlM2MxM2M3Li44YzlhNzhhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdWJhbGxvYy5oCisrKyBiL2ZzL29jZnMyL3N1YmFsbG9jLmgKQEAgLTg4LDYgKzg4LDggQEAKIAkJCSB1NjQgKmJsa25vX3N0YXJ0KTsKIGludCBvY2ZzMl9jbGFpbV9uZXdfaW5vZGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLAogCQkJICB1MTYgKnN1YmFsbG9jX2JpdCwKIAkJCSAgdTY0ICpmZV9ibGtubyk7CkBAIC0xODYsNCArMTg4LDYgQEAKIAkJCSAgdTMyIGNsdXN0ZXJzX3RvX2FkZCwgdTMyIGV4dGVudHNfdG9fc3BsaXQsCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqZGF0YV9hYywKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiptZXRhX2FjKTsKKworaW50IG9jZnMyX3Rlc3RfaW5vZGVfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxrbm8sIGludCAqcmVzKTsKICNlbmRpZiAvKiBfQ0hBSU5BTExPQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggN2FjODNhOC4uNzlmZjhkOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0yMDEsNiArMjAxLDE3MCBAQAogCXtPcHRfZXJyLCBOVUxMfQogfTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBvY2ZzMl9vc2JfZHVtcChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBvdXQgPSAwOworCWludCBpOworCXN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNjb25uID0gb3NiLT5jY29ubjsKKwlzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwICpybSA9IG9zYi0+cmVjb3ZlcnlfbWFwOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gSWQ6ICUtcyAgVXVpZDogJS1zICBHZW46IDB4JVggIExhYmVsOiAlLXNcbiIsCisJCQkiRGV2aWNlIiwgb3NiLT5kZXZfc3RyLCBvc2ItPnV1aWRfc3RyLAorCQkJb3NiLT5mc19nZW5lcmF0aW9uLCBvc2ItPnZvbF9sYWJlbCk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBTdGF0ZTogJWQgIEZsYWdzOiAweCVsWFxuIiwgIlZvbHVtZSIsCisJCQlhdG9taWNfcmVhZCgmb3NiLT52b2xfc3RhdGUpLCBvc2ItPm9zYl9mbGFncyk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBCbG9jazogJWx1ICBDbHVzdGVyOiAlZFxuIiwgIlNpemVzIiwKKwkJCW9zYi0+c2ItPnNfYmxvY2tzaXplLCBvc2ItPnNfY2x1c3RlcnNpemUpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gQ29tcGF0OiAweCVYICBJbmNvbXBhdDogMHglWCAgIgorCQkJIlJPY29tcGF0OiAweCVYXG4iLAorCQkJIkZlYXR1cmVzIiwgb3NiLT5zX2ZlYXR1cmVfY29tcGF0LAorCQkJb3NiLT5zX2ZlYXR1cmVfaW5jb21wYXQsIG9zYi0+c19mZWF0dXJlX3JvX2NvbXBhdCk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBPcHRzOiAweCVsWCAgQXRpbWVRdWFudGE6ICV1XG4iLCAiTW91bnQiLAorCQkJb3NiLT5zX21vdW50X29wdCwgb3NiLT5zX2F0aW1lX3F1YW50dW0pOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gU3RhY2s6ICVzICBOYW1lOiAlKnMgIFZlcnNpb246ICVkLiVkXG4iLAorCQkJIkNsdXN0ZXIiLAorCQkJKCpvc2ItPm9zYl9jbHVzdGVyX3N0YWNrID09ICdcMCcgPworCQkJICJvMmNiIiA6IG9zYi0+b3NiX2NsdXN0ZXJfc3RhY2spLAorCQkJY2Nvbm4tPmNjX25hbWVsZW4sIGNjb25uLT5jY19uYW1lLAorCQkJY2Nvbm4tPmNjX3ZlcnNpb24ucHZfbWFqb3IsIGNjb25uLT5jY192ZXJzaW9uLnB2X21pbm9yKTsKKworCXNwaW5fbG9jaygmb3NiLT5kY190YXNrX2xvY2spOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSIlMTBzID0+IFBpZDogJWQgIENvdW50OiAlbHUgIFdha2VTZXE6ICVsdSAgIgorCQkJIldvcmtTZXE6ICVsdVxuIiwgIkRvd25DbnZ0IiwKKwkJCXRhc2tfcGlkX25yKG9zYi0+ZGNfdGFzayksIG9zYi0+YmxvY2tlZF9sb2NrX2NvdW50LAorCQkJb3NiLT5kY193YWtlX3NlcXVlbmNlLCBvc2ItPmRjX3dvcmtfc2VxdWVuY2UpOworCXNwaW5fdW5sb2NrKCZvc2ItPmRjX3Rhc2tfbG9jayk7CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIiUxMHMgPT4gUGlkOiAlZCAgTm9kZXM6IiwKKwkJCSJSZWNvdmVyeSIsCisJCQkob3NiLT5yZWNvdmVyeV90aHJlYWRfdGFzayA/CisJCQkgdGFza19waWRfbnIob3NiLT5yZWNvdmVyeV90aHJlYWRfdGFzaykgOiAtMSkpOworCWlmIChybS0+cm1fdXNlZCA9PSAwKQorCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICIgTm9uZVxuIik7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBybS0+cm1fdXNlZDsgaSsrKQorCQkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiICVkIiwKKwkJCQkJcm0tPnJtX2VudHJpZXNbaV0pOworCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJcbiIpOworCX0KKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBQaWQ6ICVkICBJbnRlcnZhbDogJWx1ICBOZWVkczogJWRcbiIsICJDb21taXQiLAorCQkJdGFza19waWRfbnIob3NiLT5jb21taXRfdGFzayksIG9zYi0+b3NiX2NvbW1pdF9pbnRlcnZhbCwKKwkJCWF0b21pY19yZWFkKCZvc2ItPm5lZWRzX2NoZWNrcG9pbnQpKTsKKworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSIlMTBzID0+IFN0YXRlOiAlZCAgTnVtVHhuczogJWQgIFR4bklkOiAlbHVcbiIsCisJCQkiSm91cm5hbCIsIG9zYi0+am91cm5hbC0+al9zdGF0ZSwKKwkJCWF0b21pY19yZWFkKCZvc2ItPmpvdXJuYWwtPmpfbnVtX3RyYW5zKSwKKwkJCW9zYi0+am91cm5hbC0+al90cmFuc19pZCk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBHbG9iYWxBbGxvY3M6ICVkICBMb2NhbEFsbG9jczogJWQgICIKKwkJCSJTdWJBbGxvY3M6ICVkICBMQVdpbk1vdmVzOiAlZCAgU0FFeHRlbmRzOiAlZFxuIiwKKwkJCSJTdGF0cyIsCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5iaXRtYXBfZGF0YSksCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5sb2NhbF9kYXRhKSwKKwkJCWF0b21pY19yZWFkKCZvc2ItPmFsbG9jX3N0YXRzLmJnX2FsbG9jcyksCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5tb3ZlcyksCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5iZ19leHRlbmRzKSk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBTdGF0ZTogJXUgIERlc2NyaXB0b3I6ICVsbHUgIFNpemU6ICV1IGJpdHMgICIKKwkJCSJEZWZhdWx0OiAldSBiaXRzXG4iLAorCQkJIkxvY2FsQWxsb2MiLCBvc2ItPmxvY2FsX2FsbG9jX3N0YXRlLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvc2ItPmxhX2xhc3RfZ2QsCisJCQlvc2ItPmxvY2FsX2FsbG9jX2JpdHMsIG9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzKTsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gU2xvdDogJWQgIE51bVN0b2xlbjogJWRcbiIsICJTdGVhbCIsCisJCQlvc2ItPnNfaW5vZGVfc3RlYWxfc2xvdCwKKwkJCWF0b21pY19yZWFkKCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4pKTsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICIlMTBzID0+ICUzcyAgJTEwc1xuIiwKKwkJCSJTbG90cyIsICJOdW0iLCAiUmVjb0dlbiIpOworCisJZm9yIChpID0gMDsgaSA8IG9zYi0+bWF4X3Nsb3RzOyArK2kpIHsKKwkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJCSIlMTBzICAlYyAlM2QgICUxMGRcbiIsCisJCQkJIiAiLAorCQkJCShpID09IG9zYi0+c2xvdF9udW0gPyAnKicgOiAnICcpLAorCQkJCWksIG9zYi0+c2xvdF9yZWNvdmVyeV9nZW5lcmF0aW9uc1tpXSk7CisJfQorCisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIGludCBvY2ZzMl9vc2JfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IGlub2RlLT5pX3ByaXZhdGU7CisJY2hhciAqYnVmID0gTlVMTDsKKworCWJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBiYWlsOworCisJaV9zaXplX3dyaXRlKGlub2RlLCBvY2ZzMl9vc2JfZHVtcChvc2IsIGJ1ZiwgUEFHRV9TSVpFKSk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBidWY7CisKKwlyZXR1cm4gMDsKK2JhaWw6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGVidWdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGZpbGUtPnByaXZhdGVfZGF0YSwKKwkJCQkgICAgICAgaV9zaXplX3JlYWQoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KSk7Cit9CisjZWxzZQorc3RhdGljIGludCBvY2ZzMl9vc2JfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgb2NmczJfZGVidWdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBzc2l6ZV90IG9jZnMyX2RlYnVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXJldHVybiAwOworfQorI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9vc2JfZGVidWdfZm9wcyA9IHsKKwkub3BlbiA9CQlvY2ZzMl9vc2JfZGVidWdfb3BlbiwKKwkucmVsZWFzZSA9CW9jZnMyX2RlYnVnX3JlbGVhc2UsCisJLnJlYWQgPQkJb2NmczJfZGVidWdfcmVhZCwKKwkubGxzZWVrID0JZ2VuZXJpY19maWxlX2xsc2VlaywKK307CisKIC8qCiAgKiB3cml0ZV9zdXBlciBhbmQgc3luY19mcyByaXBwZWQgcmlnaHQgb3V0IG9mIGV4dDMuCiAgKi8KQEAgLTkyNiw2ICsxMDkwLDE2IEBACiAJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKIAl9CiAKKwlvc2ItPm9zYl9jdHh0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZnNfc3RhdGUiLCBTX0lGUkVHfFNfSVJVU1IsCisJCQkJCSAgICBvc2ItPm9zYl9kZWJ1Z19yb290LAorCQkJCQkgICAgb3NiLAorCQkJCQkgICAgJm9jZnMyX29zYl9kZWJ1Z19mb3BzKTsKKwlpZiAoIW9zYi0+b3NiX2N0eHQpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIHJlYWRfc3VwZXJfZXJyb3I7CisJfQorCiAJc3RhdHVzID0gb2NmczJfbW91bnRfdm9sdW1lKHNiKTsKIAlpZiAob3NiLT5yb290X2lub2RlKQogCQlpbm9kZSA9IGlncmFiKG9zYi0+cm9vdF9pbm9kZSk7CkBAIC0xNjIwLDYgKzE3OTQsOCBAQAogCW9zYiA9IE9DRlMyX1NCKHNiKTsKIAlCVUdfT04oIW9zYik7CiAKKwlkZWJ1Z2ZzX3JlbW92ZShvc2ItPm9zYl9jdHh0KTsKKwogCW9jZnMyX2Rpc2FibGVfcXVvdGFzKG9zYik7CiAKIAlvY2ZzMl9zaHV0ZG93bl9sb2NhbF9hbGxvYyhvc2IpOwpAQCAtMTc0Miw2ICsxOTE4LDEyIEBACiAJYmJpdHMgPSBsZTMyX3RvX2NwdShkaS0+aWQyLmlfc3VwZXIuc19ibG9ja3NpemVfYml0cyk7CiAJc2ItPnNfbWF4Ynl0ZXMgPSBvY2ZzMl9tYXhfZmlsZV9vZmZzZXQoYmJpdHMsIGNiaXRzKTsKIAorCW9zYi0+b3NiX2R4X21hc2sgPSAoMSA8PCAoY2JpdHMgLSBiYml0cykpIC0gMTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW9zYi0+b3NiX2R4X3NlZWRbaV0gPSBsZTMyX3RvX2NwdShkaS0+aWQyLmlfc3VwZXIuc19keF9zZWVkW2ldKTsKKwlvc2ItPm9zYl9keF9zZWVkWzNdID0gbGUzMl90b19jcHUoZGktPmlkMi5pX3N1cGVyLnNfdXVpZF9oYXNoKTsKKwogCW9zYi0+c2IgPSBzYjsKIAkvKiBTYXZlIG9mZiBmb3Igb2NmczJfcndfZGlyZWN0ICovCiAJb3NiLT5zX3NlY3RzaXplX2JpdHMgPSBibGtzaXplX2JpdHMoc2VjdG9yX3NpemUpOwpAQCAtMjEzMCw2ICsyMzEyLDEyIEBACiAJICogbG9jaywgYW5kIGl0J3MgbWFya2VkIGFzIGRpcnR5LCBzZXQgdGhlIGJpdCBpbiB0aGUgcmVjb3ZlcgogCSAqIG1hcCBhbmQgbGF1bmNoIGEgcmVjb3ZlcnkgdGhyZWFkIGZvciBpdC4gKi8KIAlzdGF0dXMgPSBvY2ZzMl9tYXJrX2RlYWRfbm9kZXMob3NiKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gZmluYWxseTsKKwl9CisKKwlzdGF0dXMgPSBvY2ZzMl9jb21wdXRlX3JlcGxheV9zbG90cyhvc2IpOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCmluZGV4IDI1NjNkZjguLjE1NjMxMDEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmMKKysrIGIvZnMvb2NmczIveGF0dHIuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJCQkgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSwKIAkJCSAgaW50ICp3YW50X2NsdXN0ZXJzLAogCQkJICBpbnQgKnhhdHRyX2NyZWRpdHMsCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqeGF0dHJfYWMpCisJCQkgIGludCAqd2FudF9tZXRhKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKQEAgLTU1NCwxMSArNTU0LDcgQEAKIAlpZiAoZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSA9PSBPQ0ZTMl9NSU5fQkxPQ0tTSVpFIHx8CiAJICAgIChTX0lTRElSKG1vZGUpICYmIG9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHx8CiAJICAgIChzX3NpemUgKyBhX3NpemUpID4gT0NGUzJfWEFUVFJfRlJFRV9JTl9JQk9EWSkgewotCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3Mob3NiLCAxLCB4YXR0cl9hYyk7Ci0JCWlmIChyZXQpIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJKndhbnRfbWV0YSA9ICp3YW50X21ldGEgKyAxOwogCQkqeGF0dHJfY3JlZGl0cyArPSBPQ0ZTMl9YQVRUUl9CTE9DS19DUkVBVEVfQ1JFRElUUzsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oCmluZGV4IDVhMWViYzcuLjFjYTdlOWEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmgKKysrIGIvZnMvb2NmczIveGF0dHIuaApAQCAtNjgsNyArNjgsNyBAQAogCQkJICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTsKIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAogCQkJICBpbnQsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCi0JCQkgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopOworCQkJICBpbnQgKiwgaW50ICosIGludCAqKTsKIAogLyoKICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssCmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmMKaW5kZXggNjMzZTlkYy4uMzc5YWU1ZiAxMDA2NDQKLS0tIGEvZnMvb21mcy9pbm9kZS5jCisrKyBiL2ZzL29tZnMvaW5vZGUuYwpAQCAtMjYyLDE0ICsyNjIsMTkgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBkZW50cnktPmRfc2I7CiAJc3RydWN0IG9tZnNfc2JfaW5mbyAqc2JpID0gT01GU19TQihzKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYocy0+c19iZGV2LT5iZF9kZXYpOworCiAJYnVmLT5mX3R5cGUgPSBPTUZTX01BR0lDOwogCWJ1Zi0+Zl9ic2l6ZSA9IHNiaS0+c19ibG9ja3NpemU7CiAJYnVmLT5mX2Jsb2NrcyA9IHNiaS0+c19udW1fYmxvY2tzOwogCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c19udW1fYmxvY2tzOwogCWJ1Zi0+Zl9uYW1lbGVuID0gT01GU19OQU1FTEVOOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCiAJYnVmLT5mX2JmcmVlID0gYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9mZnJlZSA9CiAJCW9tZnNfY291bnRfZnJlZShzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00MjEsNyArNDI2LDcgQEAKIAogCXNiaS0+c191aWQgPSBjdXJyZW50X3VpZCgpOwogCXNiaS0+c19naWQgPSBjdXJyZW50X2dpZCgpOwotCXNiaS0+c19kbWFzayA9IHNiaS0+c19mbWFzayA9IGN1cnJlbnQtPmZzLT51bWFzazsKKwlzYmktPnNfZG1hc2sgPSBzYmktPnNfZm1hc2sgPSBjdXJyZW50X3VtYXNrKCk7CiAKIAlpZiAoIXBhcnNlX29wdGlvbnMoKGNoYXIgKikgZGF0YSwgc2JpKSkKIAkJZ290byBlbmQ7CmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNzViNjE2Ny4uMzc3ZWIyNSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIAogaW50IHZmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDM4ZTMzN2QuLjk5ZTMzZWYgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogCiAjaW5jbHVkZSAiY2hlY2suaCIKIApAQCAtMjk0LDYgKzI5NSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwYXJ0X2F0dHJfZ3JvdXBzW10gPSB7CiAJJnBhcnRfYXR0cl9ncm91cCwKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRQorCSZibGtfdHJhY2VfYXR0cl9ncm91cCwKKyNlbmRpZgogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggZTBhZmQzMi4uZjcxNTU5NyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vb20uaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyogTk9URToKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvbWVtaW5mby5jIGIvZnMvcHJvYy9tZW1pbmZvLmMKaW5kZXggNDNkMjM5NC4uNzRlYTk3NCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9tZW1pbmZvLmMKKysrIGIvZnMvcHJvYy9tZW1pbmZvLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCQlLKGkuZnJlZXJhbS1pLmZyZWVoaWdoKSwKICNlbmRpZgogI2lmbmRlZiBDT05GSUdfTU1VCi0JCUsoKHVuc2lnbmVkIGxvbmcpIGF0b21pY19yZWFkKCZtbWFwX3BhZ2VzX2FsbG9jYXRlZCkpLAorCQlLKCh1bnNpZ25lZCBsb25nKSBhdG9taWNfbG9uZ19yZWFkKCZtbWFwX3BhZ2VzX2FsbG9jYXRlZCkpLAogI2VuZGlmCiAJCUsoaS50b3RhbHN3YXApLAogCQlLKGkuZnJlZXN3YXApLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9ub21tdS5jIGIvZnMvcHJvYy9ub21tdS5jCmluZGV4IGI0NDZkN2EuLjdlMTRkMWEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvbm9tbXUuYworKysgYi9mcy9wcm9jL25vbW11LmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogLyoKICAqIGRpc3BsYXkgYSBsaXN0IG9mIGFsbCB0aGUgUkVHSU9OcyB0aGUga2VybmVsIGtub3dzIGFib3V0Ci0gKiAtIG5vbW11IGtlcm5hbHMgaGF2ZSBhIHNpbmdsZSBmbGF0IGxpc3QKKyAqIC0gbm9tbXUga2VybmVscyBoYXZlIGEgc2luZ2xlIGZsYXQgbGlzdAogICovCiBzdGF0aWMgaW50IG5vbW11X3JlZ2lvbl9saXN0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfcCkKIHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19ub21tdS5jIGIvZnMvcHJvYy90YXNrX25vbW11LmMKaW5kZXggMzQzZWExMi4uODYzNDY0ZCAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX25vbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX25vbW11LmMKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTQ5LDcgKzUwLDcgQEAKIAllbHNlCiAJCWJ5dGVzICs9IGtvYmpzaXplKG1tKTsKIAkKLQlpZiAoY3VycmVudC0+ZnMgJiYgYXRvbWljX3JlYWQoJmN1cnJlbnQtPmZzLT5jb3VudCkgPiAxKQorCWlmIChjdXJyZW50LT5mcyAmJiBjdXJyZW50LT5mcy0+dXNlcnMgPiAxKQogCQlzYnl0ZXMgKz0ga29ianNpemUoY3VycmVudC0+ZnMpOwogCWVsc2UKIAkJYnl0ZXMgKz0ga29ianNpemUoY3VycmVudC0+ZnMpOwpAQCAtMTM2LDE0ICsxMzcsMTQgQEAKIAl9CiAKIAlzZXFfcHJpbnRmKG0sCi0JCSAgICIlMDhseC0lMDhseCAlYyVjJWMlYyAlMDhseCAlMDJ4OiUwMnggJWx1ICVuIiwKKwkJICAgIiUwOGx4LSUwOGx4ICVjJWMlYyVjICUwOGxseCAlMDJ4OiUwMnggJWx1ICVuIiwKIAkJICAgdm1hLT52bV9zdGFydCwKIAkJICAgdm1hLT52bV9lbmQsCiAJCSAgIGZsYWdzICYgVk1fUkVBRCA/ICdyJyA6ICctJywKIAkJICAgZmxhZ3MgJiBWTV9XUklURSA/ICd3JyA6ICctJywKIAkJICAgZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLAogCQkgICBmbGFncyAmIFZNX01BWVNIQVJFID8gZmxhZ3MgJiBWTV9TSEFSRUQgPyAnUycgOiAncycgOiAncCcsCi0JCSAgIHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZULAogCQkgICBNQUpPUihkZXYpLCBNSU5PUihkZXYpLCBpbm8sICZsZW4pOwogCiAJaWYgKGZpbGUpIHsKZGlmZiAtLWdpdCBhL2ZzL3FueDQvaW5vZGUuYyBiL2ZzL3FueDQvaW5vZGUuYwppbmRleCAyYWFkMTA0Li5mZTFmMGYzIDEwMDY0NAotLS0gYS9mcy9xbng0L2lub2RlLmMKKysrIGIvZnMvcW54NC9pbm9kZS5jCkBAIC0yODIsNiArMjgyLDcgQEAKIHN0YXRpYyBpbnQgcW54NF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlsb2NrX2tlcm5lbCgpOwogCkBAIC0yOTEsNiArMjkyLDggQEAKIAlidWYtPmZfYmZyZWUgICA9IHFueDRfY291bnRfZnJlZV9ibG9ja3Moc2IpOwogCWJ1Zi0+Zl9iYXZhaWwgID0gYnVmLT5mX2JmcmVlOwogCWJ1Zi0+Zl9uYW1lbGVuID0gUU5YNF9OQU1FX01BWDsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAogCXVubG9ja19rZXJuZWwoKTsKIApkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggMmNhOTY3YS4uNjA3YzU3OSAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC04MjMsNyArODIzLDcgQEAKIAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7Ci0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUV8SV9ORVcpKQorCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJY29udGludWU7CiAJCWlmICghYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9yZWFkX3dyaXRlLmMgYi9mcy9yZWFkX3dyaXRlLmMKaW5kZXggNDAwZmU4MS4uOWQxZTc2YiAxMDA2NDQKLS0tIGEvZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL3JlYWRfd3JpdGUuYwpAQCAtNzMxLDYgKzczMSw2MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgbG9mZl90IHBvc19mcm9tX2hpbG8odW5zaWduZWQgbG9uZyBoaWdoLCB1bnNpZ25lZCBsb25nIGxvdykKK3sKKyNkZWZpbmUgSEFMRl9MT05HX0JJVFMgKEJJVFNfUEVSX0xPTkcgLyAyKQorCXJldHVybiAoKChsb2ZmX3QpaGlnaCA8PCBIQUxGX0xPTkdfQklUUykgPDwgSEFMRl9MT05HX0JJVFMpIHwgbG93OworfQorCitTWVNDQUxMX0RFRklORTUocHJlYWR2LCB1bnNpZ25lZCBsb25nLCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsCisJCXVuc2lnbmVkIGxvbmcsIHZsZW4sIHVuc2lnbmVkIGxvbmcsIHBvc19sLCB1bnNpZ25lZCBsb25nLCBwb3NfaCkKK3sKKwlsb2ZmX3QgcG9zID0gcG9zX2Zyb21faGlsbyhwb3NfaCwgcG9zX2wpOworCXN0cnVjdCBmaWxlICpmaWxlOworCXNzaXplX3QgcmV0ID0gLUVCQURGOworCWludCBmcHV0X25lZWRlZDsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmIChmaWxlKSB7CisJCXJldCA9IC1FU1BJUEU7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9QUkVBRCkKKwkJCXJldCA9IHZmc19yZWFkdihmaWxlLCB2ZWMsIHZsZW4sICZwb3MpOworCQlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKKwl9CisKKwlpZiAocmV0ID4gMCkKKwkJYWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7CisJaW5jX3N5c2NyKGN1cnJlbnQpOworCXJldHVybiByZXQ7Cit9CisKK1NZU0NBTExfREVGSU5FNShwd3JpdGV2LCB1bnNpZ25lZCBsb25nLCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsCisJCXVuc2lnbmVkIGxvbmcsIHZsZW4sIHVuc2lnbmVkIGxvbmcsIHBvc19sLCB1bnNpZ25lZCBsb25nLCBwb3NfaCkKK3sKKwlsb2ZmX3QgcG9zID0gcG9zX2Zyb21faGlsbyhwb3NfaCwgcG9zX2wpOworCXN0cnVjdCBmaWxlICpmaWxlOworCXNzaXplX3QgcmV0ID0gLUVCQURGOworCWludCBmcHV0X25lZWRlZDsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmIChmaWxlKSB7CisJCXJldCA9IC1FU1BJUEU7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9QV1JJVEUpCisJCQlyZXQgPSB2ZnNfd3JpdGV2KGZpbGUsIHZlYywgdmxlbiwgJnBvcyk7CisJCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworCX0KKworCWlmIChyZXQgPiAwKQorCQlhZGRfd2NoYXIoY3VycmVudCwgcmV0KTsKKwlpbmNfc3lzY3coY3VycmVudCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHNzaXplX3QgZG9fc2VuZGZpbGUoaW50IG91dF9mZCwgaW50IGluX2ZkLCBsb2ZmX3QgKnBwb3MsCiAJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCBtYXgpCiB7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9LY29uZmlnIGIvZnMvcmVpc2VyZnMvS2NvbmZpZwppbmRleCA5NDliOGM2Li41MTNmNDMxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9LY29uZmlnCisrKyBiL2ZzL3JlaXNlcmZzL0tjb25maWcKQEAgLTEsNSArMSw2IEBACiBjb25maWcgUkVJU0VSRlNfRlMKIAl0cmlzdGF0ZSAiUmVpc2VyZnMgc3VwcG9ydCIKKwlzZWxlY3QgQ1JDMzIKIAloZWxwCiAJICBTdG9yZXMgbm90IGp1c3QgZmlsZW5hbWVzIGJ1dCB0aGUgZmlsZXMgdGhlbXNlbHZlcyBpbiBhIGJhbGFuY2VkCiAJICB0cmVlLiAgVXNlcyBqb3VybmFsbGluZy4KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IDk3MjI1MGM2Li4wYWU2NDg2IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHJlaXNlcmZzX2ZzX3R5cGU7CiAKQEAgLTE5MDQsNiArMTkwNSwxMCBAQAogCWJ1Zi0+Zl9ic2l6ZSA9IGRlbnRyeS0+ZF9zYi0+c19ibG9ja3NpemU7CiAJLyogY2hhbmdlZCB0byBhY2NvbW1vZGF0ZSBnY2MgZm9sa3MuICovCiAJYnVmLT5mX3R5cGUgPSBSRUlTRVJGU19TVVBFUl9NQUdJQzsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWNyYzMyX2xlKDAsIHJzLT5zX3V1aWQsIHNpemVvZihycy0+c191dWlkKS8yKTsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKWNyYzMyX2xlKDAsIHJzLT5zX3V1aWQgKyBzaXplb2YocnMtPnNfdXVpZCkvMiwKKwkJCQlzaXplb2YocnMtPnNfdXVpZCkvMik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMgYi9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYwppbmRleCBkNDIzNDE2Li5jMzAzYzQyIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJfSBlbHNlIHsKIAkgICAgICBhcHBseV91bWFzazoKIAkJLyogbm8gQUNMLCBhcHBseSB1bWFzayAqLwotCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA0ZWQwYmE0Li5kZDcyN2Q0IDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtNTksNyArNTksOCBAQAogCQkgKi8KIAkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAotCQlpZiAoUGFnZVByaXZhdGUocGFnZSkgJiYgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCkpCisJCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpICYmCisJCSAgICAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvc3VwZXIuYyBiL2ZzL3NxdWFzaGZzL3N1cGVyLmMKaW5kZXggNjgxZWMwZC4uZmZhNmVkYyAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvc3VwZXIuYworKysgYi9mcy9zcXVhc2hmcy9zdXBlci5jCkBAIC0zMDEsNiArMzAxLDcgQEAKIHN0YXRpYyBpbnQgc3F1YXNoZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3F1YXNoZnNfc2JfaW5mbyAqbXNibGsgPSBkZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoZGVudHJ5LT5kX3NiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlUUkFDRSgiRW50ZXJlZCBzcXVhc2hmc19zdGF0ZnNcbiIpOwogCkBAIC0zMTEsNiArMzEyLDggQEAKIAlidWYtPmZfZmlsZXMgPSBtc2Jsay0+aW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IDA7CiAJYnVmLT5mX25hbWVsZW4gPSBTUVVBU0hGU19OQU1FX0xFTjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMmJhNDgxNS4uNzdjYjRlYyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC0yODcsNiArMjg3LDcgQEAKIAlfX2ZzeW5jX3N1cGVyKHNiKTsKIAlyZXR1cm4gc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZzeW5jX3N1cGVyKTsKIAogLyoqCiAgKglnZW5lcmljX3NodXRkb3duX3N1cGVyCS0JY29tbW9uIGhlbHBlciBmb3IgLT5raWxsX3NiKCkKZGlmZiAtLWdpdCBhL2ZzL3N5c3YvaW5vZGUuYyBiL2ZzL3N5c3YvaW5vZGUuYwppbmRleCAzZDgxYmY1Li5kYTIwYjQ4IDEwMDY0NAotLS0gYS9mcy9zeXN2L2lub2RlLmMKKysrIGIvZnMvc3lzdi9pbm9kZS5jCkBAIC05MCw2ICs5MCw3IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKIAlzdHJ1Y3Qgc3lzdl9zYl9pbmZvICpzYmkgPSBTWVNWX1NCKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlID0gc2ItPnNfbWFnaWM7CiAJYnVmLT5mX2JzaXplID0gc2ItPnNfYmxvY2tzaXplOwpAQCAtOTgsNiArOTksOCBAQAogCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c19uaW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IHN5c3ZfY291bnRfZnJlZV9pbm9kZXMoc2IpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gU1lTVl9OQU1FTEVOOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9LY29uZmlnIGIvZnMvdWJpZnMvS2NvbmZpZwppbmRleCBlMzViNTRkLi44MzBlM2Y3IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9LY29uZmlnCisrKyBiL2ZzL3ViaWZzL0tjb25maWcKQEAgLTIyLDcgKzIyLDcgQEAKIAlkZXBlbmRzIG9uIFVCSUZTX0ZTCiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWxsb3dzIHRvIGV4cGxpY2l0bHkgY2hvb3NlIHdoaWNoIGNvbXByZXNzaW9ucywgaWYgYW55LAotCSAgYXJlIGVuYWJsZWQgaW4gVUJJRlMuIFJlbW92aW5nIGNvbXByZXNzb3JzIG1lYW5zIGluYmlsaXR5IHRvIHJlYWQKKwkgIGFyZSBlbmFibGVkIGluIFVCSUZTLiBSZW1vdmluZyBjb21wcmVzc29ycyBtZWFucyBpbmFiaWxpdHkgdG8gcmVhZAogCSAgZXhpc3RpbmcgZmlsZSBzeXN0ZW1zLgogCiAJICBJZiB1bnN1cmUsIHNheSAnTicuCkBAIC0zMiw3ICszMiw3IEBACiAJZGVwZW5kcyBvbiBVQklGU19GUwogCWRlZmF1bHQgeQogCWhlbHAKLQkgICBMWk8gY29tcHJlc3NvciBpcyBnZW5lcmFsbHkgZmFzdGVyIHRoZW4gemxpYiBidXQgY29tcHJlc3NlcyB3b3JzZS4KKwkgICBMWk8gY29tcHJlc3NvciBpcyBnZW5lcmFsbHkgZmFzdGVyIHRoYW4gemxpYiBidXQgY29tcHJlc3NlcyB3b3JzZS4KIAkgICBTYXkgJ1knIGlmIHVuc3VyZS4KIAogY29uZmlnIFVCSUZTX0ZTX1pMSUIKZGlmZiAtLWdpdCBhL2ZzL3VkZi9iYWxsb2MuYyBiL2ZzL3VkZi9iYWxsb2MuYwppbmRleCAyYmI3ODhhLi5lNDhlOWEzIDEwMDY0NAotLS0gYS9mcy91ZGYvYmFsbG9jLmMKKysrIGIvZnMvdWRmL2JhbGxvYy5jCkBAIC04NywxMiArODcsMTIgQEAKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgcmV0dmFsID0gMDsKLQlrZXJuZWxfbGJfYWRkciBsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvYzsKIAogCWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBiaXRtYXAtPnNfZXh0UG9zaXRpb247CiAJbG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IFVERl9TQihzYiktPnNfcGFydGl0aW9uOwogCi0JYmggPSB1ZGZfdHJlYWQoc2IsIHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBsb2MsIGJsb2NrKSk7CisJYmggPSB1ZGZfdHJlYWQoc2IsIHVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmbG9jLCBibG9jaykpOwogCWlmICghYmgpCiAJCXJldHZhbCA9IC1FSU87CiAKQEAgLTE0MCwyNyArMTQwLDI5IEBACiAJcmV0dXJuIHNsb3Q7CiB9CiAKLXN0YXRpYyBib29sIHVkZl9hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSwKLQkJCQl1MTYgcGFydGl0aW9uLCB1MzIgY250KQorc3RhdGljIHZvaWQgdWRmX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUxNiBwYXJ0aXRpb24sIHUzMiBjbnQpCiB7CisJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCXN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqbHZpZDsKIAotCWlmIChzYmktPnNfbHZpZF9iaCA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzYmktPnNfbHZpZF9iaCkKKwkJcmV0dXJuOwogCiAJbHZpZCA9IChzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKilzYmktPnNfbHZpZF9iaC0+Yl9kYXRhOwogCWxlMzJfYWRkX2NwdSgmbHZpZC0+ZnJlZVNwYWNlVGFibGVbcGFydGl0aW9uXSwgY250KTsKLQlyZXR1cm4gdHJ1ZTsKKwl1ZGZfdXBkYXRlZF9sdmlkKHNiKTsKIH0KIAogc3RhdGljIHZvaWQgdWRmX2JpdG1hcF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgc3RydWN0IHVkZl9iaXRtYXAgKmJpdG1hcCwKLQkJCQkgICBrZXJuZWxfbGJfYWRkciBibG9jLCB1aW50MzJfdCBvZmZzZXQsCisJCQkJICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpibG9jLAorCQkJCSAgIHVpbnQzMl90IG9mZnNldCwKIAkJCQkgICB1aW50MzJfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJc3RydWN0IHVkZl9wYXJ0X21hcCAqcGFydG1hcDsKIAl1bnNpZ25lZCBsb25nIGJsb2NrOwogCXVuc2lnbmVkIGxvbmcgYmxvY2tfZ3JvdXA7CiAJdW5zaWduZWQgbG9uZyBiaXQ7CkBAIC0xNjksMTcgKzE3MSwxNyBAQAogCXVuc2lnbmVkIGxvbmcgb3ZlcmZsb3c7CiAKIAltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwotCWlmIChibG9jLmxvZ2ljYWxCbG9ja051bSA8IDAgfHwKLQkgICAgKGJsb2MubG9naWNhbEJsb2NrTnVtICsgY291bnQpID4KLQkJc2JpLT5zX3BhcnRtYXBzW2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtXS5zX3BhcnRpdGlvbl9sZW4pIHsKKwlwYXJ0bWFwID0gJnNiaS0+c19wYXJ0bWFwc1tibG9jLT5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dOworCWlmIChibG9jLT5sb2dpY2FsQmxvY2tOdW0gPCAwIHx8CisJICAgIChibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBjb3VudCkgPgorCQlwYXJ0bWFwLT5zX3BhcnRpdGlvbl9sZW4pIHsKIAkJdWRmX2RlYnVnKCIlZCA8ICVkIHx8ICVkICsgJWQgPiAlZFxuIiwKLQkJCSAgYmxvYy5sb2dpY2FsQmxvY2tOdW0sIDAsIGJsb2MubG9naWNhbEJsb2NrTnVtLCBjb3VudCwKLQkJCSAgc2JpLT5zX3BhcnRtYXBzW2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtXS4KLQkJCQkJCQlzX3BhcnRpdGlvbl9sZW4pOworCQkJICBibG9jLT5sb2dpY2FsQmxvY2tOdW0sIDAsIGJsb2MtPmxvZ2ljYWxCbG9ja051bSwKKwkJCSAgY291bnQsIHBhcnRtYXAtPnNfcGFydGl0aW9uX2xlbik7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIAotCWJsb2NrID0gYmxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQgKworCWJsb2NrID0gYmxvYy0+bG9naWNhbEJsb2NrTnVtICsgb2Zmc2V0ICsKIAkJKHNpemVvZihzdHJ1Y3Qgc3BhY2VCaXRtYXBEZXNjKSA8PCAzKTsKIAogCWRvIHsKQEAgLTIwNyw3ICsyMDksNyBAQAogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5vZGUpCiAJCQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKLQkJCQl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2JpLCBzYmktPnNfcGFydGl0aW9uLCAxKTsKKwkJCQl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHNiaS0+c19wYXJ0aXRpb24sIDEpOwogCQkJfQogCQl9CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKQEAgLTIxOCw5ICsyMjAsNiBAQAogCX0gd2hpbGUgKG92ZXJmbG93KTsKIAogZXJyb3JfcmV0dXJuOgotCXNiLT5zX2RpcnQgPSAxOwotCWlmIChzYmktPnNfbHZpZF9iaCkKLQkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOwogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIH0KIApAQCAtMjc3LDkgKzI3Niw3IEBACiAJfSB3aGlsZSAoYmxvY2tfY291bnQgPiAwKTsKIAogb3V0OgotCWlmICh1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2JpLCBwYXJ0aXRpb24sIC1hbGxvY19jb3VudCkpCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKLQlzYi0+c19kaXJ0ID0gMTsKKwl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHBhcnRpdGlvbiwgLWFsbG9jX2NvdW50KTsKIAltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJcmV0dXJuIGFsbG9jX2NvdW50OwogfQpAQCAtNDA5LDkgKzQwNiw3IEBACiAKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAKLQlpZiAodWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgcGFydGl0aW9uLCAtMSkpCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKLQlzYi0+c19kaXJ0ID0gMTsKKwl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHBhcnRpdGlvbiwgLTEpOwogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAkqZXJyID0gMDsKIAlyZXR1cm4gbmV3YmxvY2s7CkBAIC00MjUsMjYgKzQyMCwyOCBAQAogc3RhdGljIHZvaWQgdWRmX3RhYmxlX2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgc3RydWN0IGlub2RlICp0YWJsZSwKLQkJCQkgIGtlcm5lbF9sYl9hZGRyIGJsb2MsIHVpbnQzMl90IG9mZnNldCwKKwkJCQkgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqYmxvYywKKwkJCQkgIHVpbnQzMl90IG9mZnNldCwKIAkJCQkgIHVpbnQzMl90IGNvdW50KQogewogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKKwlzdHJ1Y3QgdWRmX3BhcnRfbWFwICpwYXJ0bWFwOwogCXVpbnQzMl90IHN0YXJ0LCBlbmQ7CiAJdWludDMyX3QgZWxlbjsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gb2Vwb3MsIGVwb3M7CiAJaW50OF90IGV0eXBlOwogCWludCBpOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm87CiAKIAltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwotCWlmIChibG9jLmxvZ2ljYWxCbG9ja051bSA8IDAgfHwKLQkgICAgKGJsb2MubG9naWNhbEJsb2NrTnVtICsgY291bnQpID4KLQkJc2JpLT5zX3BhcnRtYXBzW2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtXS5zX3BhcnRpdGlvbl9sZW4pIHsKKwlwYXJ0bWFwID0gJnNiaS0+c19wYXJ0bWFwc1tibG9jLT5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dOworCWlmIChibG9jLT5sb2dpY2FsQmxvY2tOdW0gPCAwIHx8CisJICAgIChibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBjb3VudCkgPgorCQlwYXJ0bWFwLT5zX3BhcnRpdGlvbl9sZW4pIHsKIAkJdWRmX2RlYnVnKCIlZCA8ICVkIHx8ICVkICsgJWQgPiAlZFxuIiwKIAkJCSAgYmxvYy5sb2dpY2FsQmxvY2tOdW0sIDAsIGJsb2MubG9naWNhbEJsb2NrTnVtLCBjb3VudCwKLQkJCSAgc2JpLT5zX3BhcnRtYXBzW2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtXS4KLQkJCQkJCQlzX3BhcnRpdGlvbl9sZW4pOworCQkJICBwYXJ0bWFwLT5zX3BhcnRpdGlvbl9sZW4pOwogCQlnb3RvIGVycm9yX3JldHVybjsKIAl9CiAKQEAgLTQ1MywxMSArNDUwLDEwIEBACiAJICAgY291bGQgb2NjdXJlLCBidXQuLiBvaCB3ZWxsICovCiAJaWYgKGlub2RlKQogCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgY291bnQpOwotCWlmICh1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2JpLCBzYmktPnNfcGFydGl0aW9uLCBjb3VudCkpCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKKwl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHNiaS0+c19wYXJ0aXRpb24sIGNvdW50KTsKIAotCXN0YXJ0ID0gYmxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQ7Ci0JZW5kID0gYmxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQgKyBjb3VudCAtIDE7CisJc3RhcnQgPSBibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQ7CisJZW5kID0gYmxvYy0+bG9naWNhbEJsb2NrTnVtICsgb2Zmc2V0ICsgY291bnQgLSAxOwogCiAJZXBvcy5vZmZzZXQgPSBvZXBvcy5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KTsKIAllbGVuID0gMDsKQEAgLTQ4Myw3ICs0NzksNyBAQAogCQkJCXN0YXJ0ICs9IGNvdW50OwogCQkJCWNvdW50ID0gMDsKIAkJCX0KLQkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmb2Vwb3MsIGVsb2MsIGVsZW4sIDEpOworCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZvZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCQl9IGVsc2UgaWYgKGVsb2MubG9naWNhbEJsb2NrTnVtID09IChlbmQgKyAxKSkgewogCQkJaWYgKCgweDNGRkZGRkZGIC0gZWxlbikgPAogCQkJCQkoY291bnQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpKSB7CkBAIC01MDIsNyArNDk4LDcgQEAKIAkJCQllbmQgLT0gY291bnQ7CiAJCQkJY291bnQgPSAwOwogCQkJfQotCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CisJCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJm9lcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAJCX0KIAogCQlpZiAoZXBvcy5iaCAhPSBvZXBvcy5iaCkgewpAQCAtNTMyLDggKzUyOCw4IEBACiAJCSAqLwogCiAJCWludCBhZHNpemU7Ci0JCXNob3J0X2FkICpzYWQgPSBOVUxMOwotCQlsb25nX2FkICpsYWQgPSBOVUxMOworCQlzdHJ1Y3Qgc2hvcnRfYWQgKnNhZCA9IE5VTEw7CisJCXN0cnVjdCBsb25nX2FkICpsYWQgPSBOVUxMOwogCQlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQ7CiAKIAkJZWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBzdGFydDsKQEAgLTU0MSw5ICs1MzcsOSBAQAogCQkJKGNvdW50IDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKIAogCQlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CisJCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAkJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAkJZWxzZSB7CiAJCQlicmVsc2Uob2Vwb3MuYmgpOwogCQkJYnJlbHNlKGVwb3MuYmgpOwpAQCAtNTYzLDcgKzU1OSw3IEBACiAJCQllbGVuIC09IHNiLT5zX2Jsb2Nrc2l6ZTsKIAogCQkJZXBvcy5iaCA9IHVkZl90cmVhZChzYiwKLQkJCQkJdWRmX2dldF9sYl9wYmxvY2soc2IsIGVwb3MuYmxvY2ssIDApKTsKKwkJCQkJdWRmX2dldF9sYl9wYmxvY2soc2IsICZlcG9zLmJsb2NrLCAwKSk7CiAJCQlpZiAoIWVwb3MuYmgpIHsKIAkJCQlicmVsc2Uob2Vwb3MuYmgpOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwpAQCAtNjAxLDE1ICs1OTcsMTUgQEAKIAkJCWlmIChzYmktPnNfdWRmcmV2ID49IDB4MDIwMCkKIAkJCQl1ZGZfbmV3X3RhZyhlcG9zLmJoLT5iX2RhdGEsIFRBR19JREVOVF9BRUQsCiAJCQkJCSAgICAzLCAxLCBlcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSwKLQkJCQkJICAgIHNpemVvZih0YWcpKTsKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdGFnKSk7CiAJCQllbHNlCiAJCQkJdWRmX25ld190YWcoZXBvcy5iaC0+Yl9kYXRhLCBUQUdfSURFTlRfQUVELAogCQkJCQkgICAgMiwgMSwgZXBvcy5ibG9jay5sb2dpY2FsQmxvY2tOdW0sCi0JCQkJCSAgICBzaXplb2YodGFnKSk7CisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHRhZykpOwogCiAJCQlzd2l0Y2ggKGlpbmZvLT5pX2FsbG9jX3R5cGUpIHsKIAkJCWNhc2UgSUNCVEFHX0ZMQUdfQURfU0hPUlQ6Ci0JCQkJc2FkID0gKHNob3J0X2FkICopc3B0cjsKKwkJCQlzYWQgPSAoc3RydWN0IHNob3J0X2FkICopc3B0cjsKIAkJCQlzYWQtPmV4dExlbmd0aCA9IGNwdV90b19sZTMyKAogCQkJCQlFWFRfTkVYVF9FWFRFTlRfQUxMT0NERUNTIHwKIAkJCQkJc2ItPnNfYmxvY2tzaXplKTsKQEAgLTYxNyw3ICs2MTMsNyBAQAogCQkJCQljcHVfdG9fbGUzMihlcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElDQlRBR19GTEFHX0FEX0xPTkc6Ci0JCQkJbGFkID0gKGxvbmdfYWQgKilzcHRyOworCQkJCWxhZCA9IChzdHJ1Y3QgbG9uZ19hZCAqKXNwdHI7CiAJCQkJbGFkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMigKIAkJCQkJRVhUX05FWFRfRVhURU5UX0FMTE9DREVDUyB8CiAJCQkJCXNiLT5zX2Jsb2Nrc2l6ZSk7CkBAIC02MzUsNyArNjMxLDcgQEAKIAogCQkvKiBJdCdzIHBvc3NpYmxlIHRoYXQgc3RlYWxpbmcgdGhlIGJsb2NrIGVtcHRpZWQgdGhlIGV4dGVudCAqLwogCQlpZiAoZWxlbikgewotCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZlcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCiAJCQlpZiAoIWVwb3MuYmgpIHsKIAkJCQlpaW5mby0+aV9sZW5BbGxvYyArPSBhZHNpemU7CkBAIC02NTMsNyArNjQ5LDYgQEAKIAlicmVsc2Uob2Vwb3MuYmgpOwogCiBlcnJvcl9yZXR1cm46Ci0Jc2ItPnNfZGlydCA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCXJldHVybjsKIH0KQEAgLTY2Niw3ICs2NjEsNyBAQAogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAlpbnQgYWxsb2NfY291bnQgPSAwOwogCXVpbnQzMl90IGVsZW4sIGFkc2l6ZTsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvczsKIAlpbnQ4X3QgZXR5cGUgPSAtMTsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwpAQCAtNjc3LDkgKzY3Miw5IEBACiAKIAlpaW5mbyA9IFVERl9JKHRhYmxlKTsKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlyZXR1cm4gMDsKIApAQCAtNzA3LDcgKzcwMiw3IEBACiAJCQlhbGxvY19jb3VudCA9IGJsb2NrX2NvdW50OwogCQkJZWxvYy5sb2dpY2FsQmxvY2tOdW0gKz0gYWxsb2NfY291bnQ7CiAJCQllbGVuIC09IChhbGxvY19jb3VudCA8PCBzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmVwb3MsIGVsb2MsCisJCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmVwb3MsICZlbG9jLAogCQkJCQkoZXR5cGUgPDwgMzApIHwgZWxlbiwgMSk7CiAJCX0gZWxzZQogCQkJdWRmX2RlbGV0ZV9hZXh0KHRhYmxlLCBlcG9zLCBlbG9jLApAQCAtNzE4LDEwICs3MTMsOCBAQAogCiAJYnJlbHNlKGVwb3MuYmgpOwogCi0JaWYgKGFsbG9jX2NvdW50ICYmIHVkZl9hZGRfZnJlZV9zcGFjZShzYmksIHBhcnRpdGlvbiwgLWFsbG9jX2NvdW50KSkgewotCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfbHZpZF9iaCk7Ci0JCXNiLT5zX2RpcnQgPSAxOwotCX0KKwlpZiAoYWxsb2NfY291bnQpCisJCXVkZl9hZGRfZnJlZV9zcGFjZShzYiwgcGFydGl0aW9uLCAtYWxsb2NfY291bnQpOwogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlyZXR1cm4gYWxsb2NfY291bnQ7CiB9CkBAIC03MzUsNyArNzI4LDcgQEAKIAl1aW50MzJfdCBzcHJlYWQgPSAweEZGRkZGRkZGLCBuc3ByZWFkID0gMHhGRkZGRkZGRjsKIAl1aW50MzJfdCBuZXdibG9jayA9IDAsIGFkc2l6ZTsKIAl1aW50MzJfdCBlbGVuLCBnb2FsX2VsZW4gPSAwOwotCWtlcm5lbF9sYl9hZGRyIGVsb2MsIHVuaW5pdGlhbGl6ZWRfdmFyKGdvYWxfZWxvYyk7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2MsIHVuaW5pdGlhbGl6ZWRfdmFyKGdvYWxfZWxvYyk7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zLCBnb2FsX2Vwb3M7CiAJaW50OF90IGV0eXBlOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSSh0YWJsZSk7CkBAIC03NDMsOSArNzM2LDkgQEAKIAkqZXJyID0gLUVOT1NQQzsKIAogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlhZHNpemUgPSBzaXplb2Yoc2hvcnRfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAllbHNlCiAJCXJldHVybiBuZXdibG9jazsKIApAQCAtODE0LDQ2ICs4MDcsMzcgQEAKIAl9CiAKIAlpZiAoZ29hbF9lbGVuKQotCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmdvYWxfZXBvcywgZ29hbF9lbG9jLCBnb2FsX2VsZW4sIDEpOworCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmdvYWxfZXBvcywgJmdvYWxfZWxvYywgZ29hbF9lbGVuLCAxKTsKIAllbHNlCiAJCXVkZl9kZWxldGVfYWV4dCh0YWJsZSwgZ29hbF9lcG9zLCBnb2FsX2Vsb2MsIGdvYWxfZWxlbik7CiAJYnJlbHNlKGdvYWxfZXBvcy5iaCk7CiAKLQlpZiAodWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgcGFydGl0aW9uLCAtMSkpCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKKwl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHBhcnRpdGlvbiwgLTEpOwogCi0Jc2ItPnNfZGlydCA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCSplcnIgPSAwOwogCXJldHVybiBuZXdibG9jazsKIH0KIAotaW5saW5lIHZvaWQgdWRmX2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICBrZXJuZWxfbGJfYWRkciBibG9jLCB1aW50MzJfdCBvZmZzZXQsCi0JCQkgICAgdWludDMyX3QgY291bnQpCit2b2lkIHVkZl9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqYmxvYywgdWludDMyX3Qgb2Zmc2V0LAorCQkgICAgIHVpbnQzMl90IGNvdW50KQogewotCXVpbnQxNl90IHBhcnRpdGlvbiA9IGJsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtOworCXVpbnQxNl90IHBhcnRpdGlvbiA9IGJsb2MtPnBhcnRpdGlvblJlZmVyZW5jZU51bTsKIAlzdHJ1Y3QgdWRmX3BhcnRfbWFwICptYXAgPSAmVURGX1NCKHNiKS0+c19wYXJ0bWFwc1twYXJ0aXRpb25dOwogCiAJaWYgKG1hcC0+c19wYXJ0aXRpb25fZmxhZ3MgJiBVREZfUEFSVF9GTEFHX1VOQUxMT0NfQklUTUFQKSB7Ci0JCXJldHVybiB1ZGZfYml0bWFwX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwKLQkJCQkJICAgICAgbWFwLT5zX3VzcGFjZS5zX2JpdG1hcCwKLQkJCQkJICAgICAgYmxvYywgb2Zmc2V0LCBjb3VudCk7CisJCXVkZl9iaXRtYXBfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBtYXAtPnNfdXNwYWNlLnNfYml0bWFwLAorCQkJCSAgICAgICBibG9jLCBvZmZzZXQsIGNvdW50KTsKIAl9IGVsc2UgaWYgKG1hcC0+c19wYXJ0aXRpb25fZmxhZ3MgJiBVREZfUEFSVF9GTEFHX1VOQUxMT0NfVEFCTEUpIHsKLQkJcmV0dXJuIHVkZl90YWJsZV9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsCi0JCQkJCSAgICAgbWFwLT5zX3VzcGFjZS5zX3RhYmxlLAotCQkJCQkgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOworCQl1ZGZfdGFibGVfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBtYXAtPnNfdXNwYWNlLnNfdGFibGUsCisJCQkJICAgICAgYmxvYywgb2Zmc2V0LCBjb3VudCk7CiAJfSBlbHNlIGlmIChtYXAtPnNfcGFydGl0aW9uX2ZsYWdzICYgVURGX1BBUlRfRkxBR19GUkVFRF9CSVRNQVApIHsKLQkJcmV0dXJuIHVkZl9iaXRtYXBfZnJlZV9ibG9ja3Moc2IsIGlub2RlLAotCQkJCQkgICAgICBtYXAtPnNfZnNwYWNlLnNfYml0bWFwLAotCQkJCQkgICAgICBibG9jLCBvZmZzZXQsIGNvdW50KTsKKwkJdWRmX2JpdG1hcF9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsIG1hcC0+c19mc3BhY2Uuc19iaXRtYXAsCisJCQkJICAgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOwogCX0gZWxzZSBpZiAobWFwLT5zX3BhcnRpdGlvbl9mbGFncyAmIFVERl9QQVJUX0ZMQUdfRlJFRURfVEFCTEUpIHsKLQkJcmV0dXJuIHVkZl90YWJsZV9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsCi0JCQkJCSAgICAgbWFwLT5zX2ZzcGFjZS5zX3RhYmxlLAotCQkJCQkgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOwotCX0gZWxzZSB7Ci0JCXJldHVybjsKKwkJdWRmX3RhYmxlX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgbWFwLT5zX2ZzcGFjZS5zX3RhYmxlLAorCQkJCSAgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jCmluZGV4IDYyZGMyNzAuLjJlZmQ0ZDUgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXIuYworKysgYi9mcy91ZGYvZGlyLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAl1aW50OF90IGxmaTsKIAlsb2ZmX3Qgc2l6ZSA9IHVkZl9leHQwX29mZnNldChkaXIpICsgZGlyLT5pX3NpemU7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAsICpiaGFbMTZdOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAlzZWN0b3JfdCBvZmZzZXQ7CiAJaW50IGksIG51bSwgcmV0ID0gMDsKQEAgLTgwLDEzICs4MCwxMyBAQAogCQkJcmV0ID0gLUVOT0VOVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQpOworCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCk7CiAJCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pIHsKIAkJCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCQllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09CiAJCQkJCUlDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJCX0gZWxzZSB7CiAJCQlvZmZzZXQgPSAwOwogCQl9CkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJCWlmIChpICsgb2Zmc2V0ID4gKGVsZW4gPj4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSkKIAkJCQlpID0gKGVsZW4gPj4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSAtIG9mZnNldDsKIAkJCWZvciAobnVtID0gMDsgaSA+IDA7IGktLSkgewotCQkJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQgKyBpKTsKKwkJCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCArIGkpOwogCQkJCXRtcCA9IHVkZl90Z2V0YmxrKGRpci0+aV9zYiwgYmxvY2spOwogCQkJCWlmICh0bXAgJiYgIWJ1ZmZlcl91cHRvZGF0ZSh0bXApICYmICFidWZmZXJfbG9ja2VkKHRtcCkpCiAJCQkJCWJoYVtudW0rK10gPSB0bXA7CkBAIC0xNjEsOSArMTYxLDkgQEAKIAkJCW1lbWNweShmbmFtZSwgIi4uIiwgZmxlbik7CiAJCQlkdF90eXBlID0gRFRfRElSOwogCQl9IGVsc2UgewotCQkJa2VybmVsX2xiX2FkZHIgdGxvYyA9IGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pOworCQkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRsb2MgPSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKTsKIAotCQkJaWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCB0bG9jLCAwKTsKKwkJCWlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJnRsb2MsIDApOwogCQkJZmxlbiA9IHVkZl9nZXRfZmlsZW5hbWUoZGlyLT5pX3NiLCBuYW1lcHRyLCBmbmFtZSwgbGZpKTsKIAkJCWR0X3R5cGUgPSBEVF9VTktOT1dOOwogCQl9CmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyZWN0b3J5LmMgYi9mcy91ZGYvZGlyZWN0b3J5LmMKaW5kZXggMjgyMGY4Zi4uMWQyYzU3MCAxMDA2NDQKLS0tIGEvZnMvdWRmL2RpcmVjdG9yeS5jCisrKyBiL2ZzL3VkZi9kaXJlY3RvcnkuYwpAQCAtMjAsNyArMjAsNyBAQAogCiAjaWYgMAogc3RhdGljIHVpbnQ4X3QgKnVkZl9maWxlYWRfcmVhZChzdHJ1Y3QgaW5vZGUgKmRpciwgdWludDhfdCAqdG1wYWQsCi0JCQkJdWludDhfdCBhZF9zaXplLCBrZXJuZWxfbGJfYWRkciBmZV9sb2MsCisJCQkJdWludDhfdCBhZF9zaXplLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZmVfbG9jLAogCQkJCWludCAqcG9zLCBpbnQgKm9mZnNldCwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsCiAJCQkJaW50ICplcnJvcikKIHsKQEAgLTc1LDcgKzc1LDcgQEAKIAkJCQkJIHN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoICpmaWJoLAogCQkJCQkgc3RydWN0IGZpbGVJZGVudERlc2MgKmNmaSwKIAkJCQkJIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCi0JCQkJCSBrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sCisJCQkJCSBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLAogCQkJCQkgc2VjdG9yX3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqZmk7CkBAIC0xMTEsNyArMTExLDcgQEAKIAkJICAgIChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKIAkJCXJldHVybiBOVUxMOwogCi0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAqZWxvYywgKm9mZnNldCk7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCAqb2Zmc2V0KTsKIAogCQkoKm9mZnNldCkrKzsKIApAQCAtMTMxLDcgKzEzMSw3IEBACiAJCQlpZiAoaSArICpvZmZzZXQgPiAoKmVsZW4gPj4gYmxvY2tzaXplX2JpdHMpKQogCQkJCWkgPSAoKmVsZW4gPj4gYmxvY2tzaXplX2JpdHMpLSpvZmZzZXQ7CiAJCQlmb3IgKG51bSA9IDA7IGkgPiAwOyBpLS0pIHsKLQkJCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgKmVsb2MsCisJCQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsCiAJCQkJCQkJICAqb2Zmc2V0ICsgaSk7CiAJCQkJdG1wID0gdWRmX3RnZXRibGsoZGlyLT5pX3NiLCBibG9jayk7CiAJCQkJaWYgKHRtcCAmJiAhYnVmZmVyX3VwdG9kYXRlKHRtcCkgJiYKQEAgLTE2OSw3ICsxNjksNyBAQAogCQkgICAgKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICplbG9jLCAqb2Zmc2V0KTsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsICpvZmZzZXQpOwogCiAJCSgqb2Zmc2V0KSsrOwogCkBAIC0yNDksOSArMjQ5LDkgQEAKIH0KIAogI2lmIDAKLXN0YXRpYyBleHRlbnRfYWQgKnVkZl9nZXRfZmlsZWV4dGVudCh2b2lkICpidWZmZXIsIGludCBidWZzaXplLCBpbnQgKm9mZnNldCkKK3N0YXRpYyBzdHJ1Y3QgZXh0ZW50X2FkICp1ZGZfZ2V0X2ZpbGVleHRlbnQodm9pZCAqYnVmZmVyLCBpbnQgYnVmc2l6ZSwgaW50ICpvZmZzZXQpCiB7Ci0JZXh0ZW50X2FkICpleHQ7CisJc3RydWN0IGV4dGVudF9hZCAqZXh0OwogCXN0cnVjdCBmaWxlRW50cnkgKmZlOwogCXVpbnQ4X3QgKnB0cjsKIApAQCAtMjc0LDU0ICsyNzQsNTQgQEAKIAlpZiAoKCpvZmZzZXQgPiAwKSAmJiAoKm9mZnNldCA8IGxlMzJfdG9fY3B1KGZlLT5sZW5ndGhBbGxvY0Rlc2NzKSkpCiAJCXB0ciArPSAqb2Zmc2V0OwogCi0JZXh0ID0gKGV4dGVudF9hZCAqKXB0cjsKKwlleHQgPSAoc3RydWN0IGV4dGVudF9hZCAqKXB0cjsKIAotCSpvZmZzZXQgPSAqb2Zmc2V0ICsgc2l6ZW9mKGV4dGVudF9hZCk7CisJKm9mZnNldCA9ICpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IGV4dGVudF9hZCk7CiAJcmV0dXJuIGV4dDsKIH0KICNlbmRpZgogCi1zaG9ydF9hZCAqdWRmX2dldF9maWxlc2hvcnRhZCh1aW50OF90ICpwdHIsIGludCBtYXhvZmZzZXQsIHVpbnQzMl90ICpvZmZzZXQsCitzdHJ1Y3Qgc2hvcnRfYWQgKnVkZl9nZXRfZmlsZXNob3J0YWQodWludDhfdCAqcHRyLCBpbnQgbWF4b2Zmc2V0LCB1aW50MzJfdCAqb2Zmc2V0LAogCQkJICAgICAgaW50IGluYykKIHsKLQlzaG9ydF9hZCAqc2E7CisJc3RydWN0IHNob3J0X2FkICpzYTsKIAogCWlmICgoIXB0cikgfHwgKCFvZmZzZXQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidWRmOiB1ZGZfZ2V0X2ZpbGVzaG9ydGFkKCkgaW52YWxpZHBhcm1zXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCgqb2Zmc2V0ICsgc2l6ZW9mKHNob3J0X2FkKSkgPiBtYXhvZmZzZXQpCisJaWYgKCgqb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCkpID4gbWF4b2Zmc2V0KQogCQlyZXR1cm4gTlVMTDsKIAllbHNlIHsKLQkJc2EgPSAoc2hvcnRfYWQgKilwdHI7CisJCXNhID0gKHN0cnVjdCBzaG9ydF9hZCAqKXB0cjsKIAkJaWYgKHNhLT5leHRMZW5ndGggPT0gMCkKIAkJCXJldHVybiBOVUxMOwogCX0KIAogCWlmIChpbmMpCi0JCSpvZmZzZXQgKz0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJKm9mZnNldCArPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAlyZXR1cm4gc2E7CiB9CiAKLWxvbmdfYWQgKnVkZl9nZXRfZmlsZWxvbmdhZCh1aW50OF90ICpwdHIsIGludCBtYXhvZmZzZXQsIHVpbnQzMl90ICpvZmZzZXQsIGludCBpbmMpCitzdHJ1Y3QgbG9uZ19hZCAqdWRmX2dldF9maWxlbG9uZ2FkKHVpbnQ4X3QgKnB0ciwgaW50IG1heG9mZnNldCwgdWludDMyX3QgKm9mZnNldCwgaW50IGluYykKIHsKLQlsb25nX2FkICpsYTsKKwlzdHJ1Y3QgbG9uZ19hZCAqbGE7CiAKIAlpZiAoKCFwdHIpIHx8ICghb2Zmc2V0KSkgewogCQlwcmludGsoS0VSTl9FUlIgInVkZjogdWRmX2dldF9maWxlbG9uZ2FkKCkgaW52YWxpZHBhcm1zXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCgqb2Zmc2V0ICsgc2l6ZW9mKGxvbmdfYWQpKSA+IG1heG9mZnNldCkKKwlpZiAoKCpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IGxvbmdfYWQpKSA+IG1heG9mZnNldCkKIAkJcmV0dXJuIE5VTEw7CiAJZWxzZSB7Ci0JCWxhID0gKGxvbmdfYWQgKilwdHI7CisJCWxhID0gKHN0cnVjdCBsb25nX2FkICopcHRyOwogCQlpZiAobGEtPmV4dExlbmd0aCA9PSAwKQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCiAJaWYgKGluYykKLQkJKm9mZnNldCArPSBzaXplb2YobG9uZ19hZCk7CisJCSpvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAlyZXR1cm4gbGE7CiB9CmRpZmYgLS1naXQgYS9mcy91ZGYvZWNtYV8xNjcuaCBiL2ZzL3VkZi9lY21hXzE2Ny5oCmluZGV4IGEwOTc0ZGYuLjQ3OTJiNzcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9lY21hXzE2Ny5oCisrKyBiL2ZzL3VkZi9lY21hXzE2Ny5oCkBAIC0zOCwxMCArMzgsMTAgQEAKICNkZWZpbmUgX0VDTUFfMTY3X0ggMQogCiAvKiBDaGFyYWN0ZXIgc2V0IHNwZWNpZmljYXRpb24gKEVDTUEgMTY3cjMgMS83LjIuMSkgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBjaGFyc3BlYyB7CiAJdWludDhfdAkJY2hhclNldFR5cGU7CiAJdWludDhfdAkJY2hhclNldEluZm9bNjNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY2hhcnNwZWM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogQ2hhcmFjdGVyIFNldCBUeXBlIChFQ01BIDE2N3IzIDEvNy4yLjEuMSkgKi8KICNkZWZpbmUgQ0hBUlNQRUNfVFlQRV9DUzAJCTB4MDAJLyogKDEvNy4yLjIpICovCkBAIC01Nyw3ICs1Nyw3IEBACiB0eXBlZGVmIHVpbnQ4X3QJCWRzdHJpbmc7CiAKIC8qIFRpbWVzdGFtcCAoRUNNQSAxNjdyMyAxLzcuMykgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCB0aW1lc3RhbXAgewogCV9fbGUxNgkJdHlwZUFuZFRpbWV6b25lOwogCV9fbGUxNgkJeWVhcjsKIAl1aW50OF90CQltb250aDsKQEAgLTY4LDcgKzY4LDcgQEAKIAl1aW50OF90CQljZW50aXNlY29uZHM7CiAJdWludDhfdAkJaHVuZHJlZHNPZk1pY3Jvc2Vjb25kczsKIAl1aW50OF90CQltaWNyb3NlY29uZHM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB0aW1lc3RhbXA7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogVHlwZSBhbmQgVGltZSBab25lIChFQ01BIDE2N3IzIDEvNy4zLjEpICovCiAjZGVmaW5lIFRJTUVTVEFNUF9UWVBFX01BU0sJCTB4RjAwMApAQCAtNzgsMTEgKzc4LDExIEBACiAjZGVmaW5lIFRJTUVTVEFNUF9USU1FWk9ORV9NQVNLCQkweDBGRkYKIAogLyogRW50aXR5IGlkZW50aWZpZXIgKEVDTUEgMTY3cjMgMS83LjQpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgcmVnaWQgewogCXVpbnQ4X3QJCWZsYWdzOwogCXVpbnQ4X3QJCWlkZW50WzIzXTsKIAl1aW50OF90CQlpZGVudFN1ZmZpeFs4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHJlZ2lkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIEZsYWdzIChFQ01BIDE2N3IzIDEvNy40LjEpICovCiAjZGVmaW5lIEVOVElUWUlEX0ZMQUdTX0RJUlRZCQkweDAwCkBAIC0xMjYsMzggKzEyNiwzOCBAQAogCiAvKiBCb290IERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMi85LjQpICovCiBzdHJ1Y3QgYm9vdERlc2MgewotCXVpbnQ4X3QJCXN0cnVjdFR5cGU7Ci0JdWludDhfdAkJc3RkSWRlbnRbVlNEX1NURF9JRF9MRU5dOwotCXVpbnQ4X3QJCXN0cnVjdFZlcnNpb247Ci0JdWludDhfdAkJcmVzZXJ2ZWQxOwotCXJlZ2lkCQlhcmNoVHlwZTsKLQlyZWdpZAkJYm9vdElkZW50OwotCV9fbGUzMgkJYm9vdEV4dExvY2F0aW9uOwotCV9fbGUzMgkJYm9vdEV4dExlbmd0aDsKLQlfX2xlNjQJCWxvYWRBZGRyZXNzOwotCV9fbGU2NAkJc3RhcnRBZGRyZXNzOwotCXRpbWVzdGFtcAlkZXNjQ3JlYXRpb25EYXRlQW5kVGltZTsKLQlfX2xlMTYJCWZsYWdzOwotCXVpbnQ4X3QJCXJlc2VydmVkMlszMl07Ci0JdWludDhfdAkJYm9vdFVzZVsxOTA2XTsKKwl1aW50OF90CQkJc3RydWN0VHlwZTsKKwl1aW50OF90CQkJc3RkSWRlbnRbVlNEX1NURF9JRF9MRU5dOworCXVpbnQ4X3QJCQlzdHJ1Y3RWZXJzaW9uOworCXVpbnQ4X3QJCQlyZXNlcnZlZDE7CisJc3RydWN0IHJlZ2lkCQlhcmNoVHlwZTsKKwlzdHJ1Y3QgcmVnaWQJCWJvb3RJZGVudDsKKwlfX2xlMzIJCQlib290RXh0TG9jYXRpb247CisJX19sZTMyCQkJYm9vdEV4dExlbmd0aDsKKwlfX2xlNjQJCQlsb2FkQWRkcmVzczsKKwlfX2xlNjQJCQlzdGFydEFkZHJlc3M7CisJc3RydWN0IHRpbWVzdGFtcAlkZXNjQ3JlYXRpb25EYXRlQW5kVGltZTsKKwlfX2xlMTYJCQlmbGFnczsKKwl1aW50OF90CQkJcmVzZXJ2ZWQyWzMyXTsKKwl1aW50OF90CQkJYm9vdFVzZVsxOTA2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBGbGFncyAoRUNNQSAxNjdyMyAyLzkuNC4xMikgKi8KICNkZWZpbmUgQk9PVF9GTEFHU19FUkFTRQkJMHgwMQogCiAvKiBFeHRlbnQgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzcuMSkgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBleHRlbnRfYWQgewogCV9fbGUzMgkJZXh0TGVuZ3RoOwogCV9fbGUzMgkJZXh0TG9jYXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBleHRlbnRfYWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGtlcm5lbF9leHRlbnRfYWQgewogCXVpbnQzMl90CWV4dExlbmd0aDsKIAl1aW50MzJfdAlleHRMb2NhdGlvbjsKLX0ga2VybmVsX2V4dGVudF9hZDsKK307CiAKIC8qIERlc2NyaXB0b3IgVGFnIChFQ01BIDE2N3IzIDMvNy4yKSAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IHRhZyB7CiAJX19sZTE2CQl0YWdJZGVudDsKIAlfX2xlMTYJCWRlc2NWZXJzaW9uOwogCXVpbnQ4X3QJCXRhZ0NoZWNrc3VtOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJX19sZTE2CQlkZXNjQ1JDOwogCV9fbGUxNgkJZGVzY0NSQ0xlbmd0aDsKIAlfX2xlMzIJCXRhZ0xvY2F0aW9uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdGFnOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFRhZyBJZGVudGlmaWVyIChFQ01BIDE2N3IzIDMvNy4yLjEpICovCiAjZGVmaW5lIFRBR19JREVOVF9QVkQJCQkweDAwMDEKQEAgLTE5MCwyOCArMTkwLDI4IEBACiAKIC8qIFByaW1hcnkgVm9sdW1lIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMy8xMC4xKSAqLwogc3RydWN0IHByaW1hcnlWb2xEZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JX19sZTMyCQl2b2xEZXNjU2VxTnVtOwotCV9fbGUzMgkJcHJpbWFyeVZvbERlc2NOdW07Ci0JZHN0cmluZwkJdm9sSWRlbnRbMzJdOwotCV9fbGUxNgkJdm9sU2VxTnVtOwotCV9fbGUxNgkJbWF4Vm9sU2VxTnVtOwotCV9fbGUxNgkJaW50ZXJjaGFuZ2VMdmw7Ci0JX19sZTE2CQltYXhJbnRlcmNoYW5nZUx2bDsKLQlfX2xlMzIJCWNoYXJTZXRMaXN0OwotCV9fbGUzMgkJbWF4Q2hhclNldExpc3Q7Ci0JZHN0cmluZwkJdm9sU2V0SWRlbnRbMTI4XTsKLQljaGFyc3BlYwlkZXNjQ2hhclNldDsKLQljaGFyc3BlYwlleHBsYW5hdG9yeUNoYXJTZXQ7Ci0JZXh0ZW50X2FkCXZvbEFic3RyYWN0OwotCWV4dGVudF9hZAl2b2xDb3B5cmlnaHQ7Ci0JcmVnaWQJCWFwcElkZW50OwotCXRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JdWludDhfdAkJaW1wVXNlWzY0XTsKLQlfX2xlMzIJCXByZWRlY2Vzc29yVm9sRGVzY1NlcUxvY2F0aW9uOwotCV9fbGUxNgkJZmxhZ3M7Ci0JdWludDhfdAkJcmVzZXJ2ZWRbMjJdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJX19sZTMyCQkJdm9sRGVzY1NlcU51bTsKKwlfX2xlMzIJCQlwcmltYXJ5Vm9sRGVzY051bTsKKwlkc3RyaW5nCQkJdm9sSWRlbnRbMzJdOworCV9fbGUxNgkJCXZvbFNlcU51bTsKKwlfX2xlMTYJCQltYXhWb2xTZXFOdW07CisJX19sZTE2CQkJaW50ZXJjaGFuZ2VMdmw7CisJX19sZTE2CQkJbWF4SW50ZXJjaGFuZ2VMdmw7CisJX19sZTMyCQkJY2hhclNldExpc3Q7CisJX19sZTMyCQkJbWF4Q2hhclNldExpc3Q7CisJZHN0cmluZwkJCXZvbFNldElkZW50WzEyOF07CisJc3RydWN0IGNoYXJzcGVjCQlkZXNjQ2hhclNldDsKKwlzdHJ1Y3QgY2hhcnNwZWMJCWV4cGxhbmF0b3J5Q2hhclNldDsKKwlzdHJ1Y3QgZXh0ZW50X2FkCXZvbEFic3RyYWN0OworCXN0cnVjdCBleHRlbnRfYWQJdm9sQ29weXJpZ2h0OworCXN0cnVjdCByZWdpZAkJYXBwSWRlbnQ7CisJc3RydWN0IHRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKKwlzdHJ1Y3QgcmVnaWQJCWltcElkZW50OworCXVpbnQ4X3QJCQlpbXBVc2VbNjRdOworCV9fbGUzMgkJCXByZWRlY2Vzc29yVm9sRGVzY1NlcUxvY2F0aW9uOworCV9fbGUxNgkJCWZsYWdzOworCXVpbnQ4X3QJCQlyZXNlcnZlZFsyMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogRmxhZ3MgKEVDTUEgMTY3cjMgMy8xMC4xLjIxKSAqLwpAQCAtMjE5LDQwICsyMTksNDAgQEAKIAogLyogQW5jaG9yIFZvbHVtZSBEZXNjcmlwdG9yIFBvaW50ZXIgKEVDTUEgMTY3cjMgMy8xMC4yKSAqLwogc3RydWN0IGFuY2hvclZvbERlc2NQdHIgewotCXRhZwkJZGVzY1RhZzsKLQlleHRlbnRfYWQJbWFpblZvbERlc2NTZXFFeHQ7Ci0JZXh0ZW50X2FkCXJlc2VydmVWb2xEZXNjU2VxRXh0OwotCXVpbnQ4X3QJIAlyZXNlcnZlZFs0ODBdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJc3RydWN0IGV4dGVudF9hZAltYWluVm9sRGVzY1NlcUV4dDsKKwlzdHJ1Y3QgZXh0ZW50X2FkCXJlc2VydmVWb2xEZXNjU2VxRXh0OworCXVpbnQ4X3QJIAkJcmVzZXJ2ZWRbNDgwXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBWb2x1bWUgRGVzY3JpcHRvciBQb2ludGVyIChFQ01BIDE2N3IzIDMvMTAuMykgKi8KIHN0cnVjdCB2b2xEZXNjUHRyIHsKLQl0YWcJCWRlc2NUYWc7Ci0JX19sZTMyCQl2b2xEZXNjU2VxTnVtOwotCWV4dGVudF9hZAluZXh0Vm9sRGVzY1NlcUV4dDsKLQl1aW50OF90CQlyZXNlcnZlZFs0ODRdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJX19sZTMyCQkJdm9sRGVzY1NlcU51bTsKKwlzdHJ1Y3QgZXh0ZW50X2FkCW5leHRWb2xEZXNjU2VxRXh0OworCXVpbnQ4X3QJCQlyZXNlcnZlZFs0ODRdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIEltcGxlbWVudGF0aW9uIFVzZSBWb2x1bWUgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjQpICovCiBzdHJ1Y3QgaW1wVXNlVm9sRGVzYyB7Ci0JdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKIAlfX2xlMzIJCXZvbERlc2NTZXFOdW07Ci0JcmVnaWQJCWltcElkZW50OworCXN0cnVjdCByZWdpZAlpbXBJZGVudDsKIAl1aW50OF90CQlpbXBVc2VbNDYwXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBQYXJ0aXRpb24gRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjUpICovCiBzdHJ1Y3QgcGFydGl0aW9uRGVzYyB7Ci0JdGFnIGRlc2NUYWc7CisJc3RydWN0IHRhZyBkZXNjVGFnOwogCV9fbGUzMiB2b2xEZXNjU2VxTnVtOwogCV9fbGUxNiBwYXJ0aXRpb25GbGFnczsKIAlfX2xlMTYgcGFydGl0aW9uTnVtYmVyOwotCXJlZ2lkIHBhcnRpdGlvbkNvbnRlbnRzOworCXN0cnVjdCByZWdpZCBwYXJ0aXRpb25Db250ZW50czsKIAl1aW50OF90IHBhcnRpdGlvbkNvbnRlbnRzVXNlWzEyOF07CiAJX19sZTMyIGFjY2Vzc1R5cGU7CiAJX19sZTMyIHBhcnRpdGlvblN0YXJ0aW5nTG9jYXRpb247CiAJX19sZTMyIHBhcnRpdGlvbkxlbmd0aDsKLQlyZWdpZCBpbXBJZGVudDsKKwlzdHJ1Y3QgcmVnaWQgaW1wSWRlbnQ7CiAJdWludDhfdCBpbXBVc2VbMTI4XTsKIAl1aW50OF90IHJlc2VydmVkWzE1Nl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTI3OCwxOSArMjc4LDE5IEBACiAKIC8qIExvZ2ljYWwgVm9sdW1lIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMy8xMC42KSAqLwogc3RydWN0IGxvZ2ljYWxWb2xEZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JX19sZTMyCQl2b2xEZXNjU2VxTnVtOwotCWNoYXJzcGVjCWRlc2NDaGFyU2V0OwotCWRzdHJpbmcJCWxvZ2ljYWxWb2xJZGVudFsxMjhdOwotCV9fbGUzMgkJbG9naWNhbEJsb2NrU2l6ZTsKLQlyZWdpZAkJZG9tYWluSWRlbnQ7Ci0JdWludDhfdAkJbG9naWNhbFZvbENvbnRlbnRzVXNlWzE2XTsKLQlfX2xlMzIJCW1hcFRhYmxlTGVuZ3RoOwotCV9fbGUzMgkJbnVtUGFydGl0aW9uTWFwczsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JdWludDhfdAkJaW1wVXNlWzEyOF07Ci0JZXh0ZW50X2FkCWludGVncml0eVNlcUV4dDsKLQl1aW50OF90CQlwYXJ0aXRpb25NYXBzWzBdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJX19sZTMyCQkJdm9sRGVzY1NlcU51bTsKKwlzdHJ1Y3QgY2hhcnNwZWMJCWRlc2NDaGFyU2V0OworCWRzdHJpbmcJCQlsb2dpY2FsVm9sSWRlbnRbMTI4XTsKKwlfX2xlMzIJCQlsb2dpY2FsQmxvY2tTaXplOworCXN0cnVjdCByZWdpZAkJZG9tYWluSWRlbnQ7CisJdWludDhfdAkJCWxvZ2ljYWxWb2xDb250ZW50c1VzZVsxNl07CisJX19sZTMyCQkJbWFwVGFibGVMZW5ndGg7CisJX19sZTMyCQkJbnVtUGFydGl0aW9uTWFwczsKKwlzdHJ1Y3QgcmVnaWQJCWltcElkZW50OworCXVpbnQ4X3QJCQlpbXBVc2VbMTI4XTsKKwlzdHJ1Y3QgZXh0ZW50X2FkCWludGVncml0eVNlcUV4dDsKKwl1aW50OF90CQkJcGFydGl0aW9uTWFwc1swXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBHZW5lcmljIFBhcnRpdGlvbiBNYXAgKEVDTUEgMTY3cjMgMy8xMC43LjEpICovCkBAIC0zMjIsMzAgKzMyMiwzMCBAQAogCiAvKiBVbmFsbG9jYXRlZCBTcGFjZSBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDMvMTAuOCkgKi8KIHN0cnVjdCB1bmFsbG9jU3BhY2VEZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JX19sZTMyCQl2b2xEZXNjU2VxTnVtOwotCV9fbGUzMgkJbnVtQWxsb2NEZXNjczsKLQlleHRlbnRfYWQJYWxsb2NEZXNjc1swXTsKKwlzdHJ1Y3QgdGFnCQlkZXNjVGFnOworCV9fbGUzMgkJCXZvbERlc2NTZXFOdW07CisJX19sZTMyCQkJbnVtQWxsb2NEZXNjczsKKwlzdHJ1Y3QgZXh0ZW50X2FkCWFsbG9jRGVzY3NbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogVGVybWluYXRpbmcgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjkpICovCiBzdHJ1Y3QgdGVybWluYXRpbmdEZXNjIHsKLQl0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRhZwlkZXNjVGFnOwogCXVpbnQ4X3QJCXJlc2VydmVkWzQ5Nl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogTG9naWNhbCBWb2x1bWUgSW50ZWdyaXR5IERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMy8xMC4xMCkgKi8KIHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyB7Ci0JdGFnCQlkZXNjVGFnOwotCXRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKLQlfX2xlMzIJCWludGVncml0eVR5cGU7Ci0JZXh0ZW50X2FkCW5leHRJbnRlZ3JpdHlFeHQ7Ci0JdWludDhfdAkJbG9naWNhbFZvbENvbnRlbnRzVXNlWzMyXTsKLQlfX2xlMzIJCW51bU9mUGFydGl0aW9uczsKLQlfX2xlMzIJCWxlbmd0aE9mSW1wVXNlOwotCV9fbGUzMgkJZnJlZVNwYWNlVGFibGVbMF07Ci0JX19sZTMyCQlzaXplVGFibGVbMF07Ci0JdWludDhfdAkJaW1wVXNlWzBdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKKwlfX2xlMzIJCQlpbnRlZ3JpdHlUeXBlOworCXN0cnVjdCBleHRlbnRfYWQJbmV4dEludGVncml0eUV4dDsKKwl1aW50OF90CQkJbG9naWNhbFZvbENvbnRlbnRzVXNlWzMyXTsKKwlfX2xlMzIJCQludW1PZlBhcnRpdGlvbnM7CisJX19sZTMyCQkJbGVuZ3RoT2ZJbXBVc2U7CisJX19sZTMyCQkJZnJlZVNwYWNlVGFibGVbMF07CisJX19sZTMyCQkJc2l6ZVRhYmxlWzBdOworCXVpbnQ4X3QJCQlpbXBVc2VbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogSW50ZWdyaXR5IFR5cGUgKEVDTUEgMTY3cjMgMy8xMC4xMC4zKSAqLwpAQCAtMzUzLDUwICszNTMsNTAgQEAKICNkZWZpbmUgTFZJRF9JTlRFR1JJVFlfVFlQRV9DTE9TRQkweDAwMDAwMDAxCiAKIC8qIFJlY29yZGVkIEFkZHJlc3MgKEVDTUEgMTY3cjMgNC83LjEpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgbGJfYWRkciB7CiAJX19sZTMyCQlsb2dpY2FsQmxvY2tOdW07CiAJX19sZTE2CSAJcGFydGl0aW9uUmVmZXJlbmNlTnVtOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbGJfYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiAuLi4gYW5kIGl0cyBpbi1jb3JlIGFuYWxvZyAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGtlcm5lbF9sYl9hZGRyIHsKIAl1aW50MzJfdAkJbG9naWNhbEJsb2NrTnVtOwogCXVpbnQxNl90CSAJcGFydGl0aW9uUmVmZXJlbmNlTnVtOwotfSBrZXJuZWxfbGJfYWRkcjsKK307CiAKIC8qIFNob3J0IEFsbG9jYXRpb24gRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjE0LjEpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3Qgc2hvcnRfYWQgewogICAgICAgICBfX2xlMzIJCWV4dExlbmd0aDsKICAgICAgICAgX19sZTMyCQlleHRQb3NpdGlvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNob3J0X2FkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIExvbmcgQWxsb2NhdGlvbiBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDQvMTQuMTQuMikgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBsb25nX2FkIHsKIAlfX2xlMzIJCWV4dExlbmd0aDsKLQlsYl9hZGRyCQlleHRMb2NhdGlvbjsKKwlzdHJ1Y3QgbGJfYWRkcglleHRMb2NhdGlvbjsKIAl1aW50OF90CQlpbXBVc2VbNl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsb25nX2FkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdAlleHRMZW5ndGg7Ci0Ja2VybmVsX2xiX2FkZHIJZXh0TG9jYXRpb247Ci0JdWludDhfdAkJaW1wVXNlWzZdOwotfSBrZXJuZWxfbG9uZ19hZDsKK3N0cnVjdCBrZXJuZWxfbG9uZ19hZCB7CisJdWludDMyX3QJCWV4dExlbmd0aDsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIJZXh0TG9jYXRpb247CisJdWludDhfdAkJCWltcFVzZVs2XTsKK307CiAKIC8qIEV4dGVuZGVkIEFsbG9jYXRpb24gRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjE0LjMpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgZXh0X2FkIHsKIAlfX2xlMzIJCWV4dExlbmd0aDsKIAlfX2xlMzIJCXJlY29yZGVkTGVuZ3RoOwogCV9fbGUzMgkJaW5mb3JtYXRpb25MZW5ndGg7Ci0JbGJfYWRkcgkJZXh0TG9jYXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBleHRfYWQ7CisJc3RydWN0IGxiX2FkZHIJZXh0TG9jYXRpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90CWV4dExlbmd0aDsKLQl1aW50MzJfdAlyZWNvcmRlZExlbmd0aDsKLQl1aW50MzJfdAlpbmZvcm1hdGlvbkxlbmd0aDsKLQlrZXJuZWxfbGJfYWRkcglleHRMb2NhdGlvbjsKLX0ga2VybmVsX2V4dF9hZDsKK3N0cnVjdCBrZXJuZWxfZXh0X2FkIHsKKwl1aW50MzJfdAkJZXh0TGVuZ3RoOworCXVpbnQzMl90CQlyZWNvcmRlZExlbmd0aDsKKwl1aW50MzJfdAkJaW5mb3JtYXRpb25MZW5ndGg7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyCWV4dExvY2F0aW9uOworfTsKIAogLyogRGVzY3JpcHRvciBUYWcgKEVDTUEgMTY3cjMgNC83LjIgLSBTZWUgMy83LjIpICovCiAKQEAgLTQxNSw0NCArNDE1LDQ0IEBACiAKIC8qIEZpbGUgU2V0IERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4xKSAqLwogc3RydWN0IGZpbGVTZXREZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JdGltZXN0YW1wCXJlY29yZGluZ0RhdGVBbmRUaW1lOwotCV9fbGUxNgkJaW50ZXJjaGFuZ2VMdmw7Ci0JX19sZTE2CQltYXhJbnRlcmNoYW5nZUx2bDsKLQlfX2xlMzIJCWNoYXJTZXRMaXN0OwotCV9fbGUzMgkJbWF4Q2hhclNldExpc3Q7Ci0JX19sZTMyCQlmaWxlU2V0TnVtOwotCV9fbGUzMgkJZmlsZVNldERlc2NOdW07Ci0JY2hhcnNwZWMJbG9naWNhbFZvbElkZW50Q2hhclNldDsKLQlkc3RyaW5nCQlsb2dpY2FsVm9sSWRlbnRbMTI4XTsKLQljaGFyc3BlYwlmaWxlU2V0Q2hhclNldDsKLQlkc3RyaW5nCQlmaWxlU2V0SWRlbnRbMzJdOwotCWRzdHJpbmcJCWNvcHlyaWdodEZpbGVJZGVudFszMl07Ci0JZHN0cmluZwkJYWJzdHJhY3RGaWxlSWRlbnRbMzJdOwotCWxvbmdfYWQJCXJvb3REaXJlY3RvcnlJQ0I7Ci0JcmVnaWQJCWRvbWFpbklkZW50OwotCWxvbmdfYWQJCW5leHRFeHQ7Ci0JbG9uZ19hZAkJc3RyZWFtRGlyZWN0b3J5SUNCOwotCXVpbnQ4X3QJCXJlc2VydmVkWzMyXTsKKwlzdHJ1Y3QgdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0aW1lc3RhbXAJcmVjb3JkaW5nRGF0ZUFuZFRpbWU7CisJX19sZTE2CQkJaW50ZXJjaGFuZ2VMdmw7CisJX19sZTE2CQkJbWF4SW50ZXJjaGFuZ2VMdmw7CisJX19sZTMyCQkJY2hhclNldExpc3Q7CisJX19sZTMyCQkJbWF4Q2hhclNldExpc3Q7CisJX19sZTMyCQkJZmlsZVNldE51bTsKKwlfX2xlMzIJCQlmaWxlU2V0RGVzY051bTsKKwlzdHJ1Y3QgY2hhcnNwZWMJCWxvZ2ljYWxWb2xJZGVudENoYXJTZXQ7CisJZHN0cmluZwkJCWxvZ2ljYWxWb2xJZGVudFsxMjhdOworCXN0cnVjdCBjaGFyc3BlYwkJZmlsZVNldENoYXJTZXQ7CisJZHN0cmluZwkJCWZpbGVTZXRJZGVudFszMl07CisJZHN0cmluZwkJCWNvcHlyaWdodEZpbGVJZGVudFszMl07CisJZHN0cmluZwkJCWFic3RyYWN0RmlsZUlkZW50WzMyXTsKKwlzdHJ1Y3QgbG9uZ19hZAkJcm9vdERpcmVjdG9yeUlDQjsKKwlzdHJ1Y3QgcmVnaWQJCWRvbWFpbklkZW50OworCXN0cnVjdCBsb25nX2FkCQluZXh0RXh0OworCXN0cnVjdCBsb25nX2FkCQlzdHJlYW1EaXJlY3RvcnlJQ0I7CisJdWludDhfdAkJCXJlc2VydmVkWzMyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBQYXJ0aXRpb24gSGVhZGVyIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4zKSAqLwogc3RydWN0IHBhcnRpdGlvbkhlYWRlckRlc2MgewotCXNob3J0X2FkCXVuYWxsb2NTcGFjZVRhYmxlOwotCXNob3J0X2FkCXVuYWxsb2NTcGFjZUJpdG1hcDsKLQlzaG9ydF9hZAlwYXJ0aXRpb25JbnRlZ3JpdHlUYWJsZTsKLQlzaG9ydF9hZAlmcmVlZFNwYWNlVGFibGU7Ci0Jc2hvcnRfYWQJZnJlZWRTcGFjZUJpdG1hcDsKKwlzdHJ1Y3Qgc2hvcnRfYWQJdW5hbGxvY1NwYWNlVGFibGU7CisJc3RydWN0IHNob3J0X2FkCXVuYWxsb2NTcGFjZUJpdG1hcDsKKwlzdHJ1Y3Qgc2hvcnRfYWQJcGFydGl0aW9uSW50ZWdyaXR5VGFibGU7CisJc3RydWN0IHNob3J0X2FkCWZyZWVkU3BhY2VUYWJsZTsKKwlzdHJ1Y3Qgc2hvcnRfYWQJZnJlZWRTcGFjZUJpdG1hcDsKIAl1aW50OF90CQlyZXNlcnZlZFs4OF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogRmlsZSBJZGVudGlmaWVyIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC40KSAqLwogc3RydWN0IGZpbGVJZGVudERlc2MgewotCXRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CiAJX19sZTE2CQlmaWxlVmVyc2lvbk51bTsKIAl1aW50OF90CQlmaWxlQ2hhcmFjdGVyaXN0aWNzOwogCXVpbnQ4X3QJCWxlbmd0aEZpbGVJZGVudDsKLQlsb25nX2FkCQlpY2I7CisJc3RydWN0IGxvbmdfYWQJaWNiOwogCV9fbGUxNgkJbGVuZ3RoT2ZJbXBVc2U7CiAJdWludDhfdAkJaW1wVXNlWzBdOwogCXVpbnQ4X3QJCWZpbGVJZGVudFswXTsKQEAgLTQ2OCwyMiArNDY4LDIyIEBACiAKIC8qIEFsbG9jYXRpb24gRXh0IERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC41KSAqLwogc3RydWN0IGFsbG9jRXh0RGVzYyB7Ci0JdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKIAlfX2xlMzIJCXByZXZpb3VzQWxsb2NFeHRMb2NhdGlvbjsKIAlfX2xlMzIJCWxlbmd0aEFsbG9jRGVzY3M7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogSUNCIFRhZyAoRUNNQSAxNjdyMyA0LzE0LjYpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgaWNidGFnIHsKIAlfX2xlMzIJCXByaW9yUmVjb3JkZWROdW1EaXJlY3RFbnRyaWVzOwogCV9fbGUxNgkJc3RyYXRlZ3lUeXBlOwogCV9fbGUxNgkJc3RyYXRlZ3lQYXJhbWV0ZXI7CiAJX19sZTE2CQludW1FbnRyaWVzOwogCXVpbnQ4X3QJCXJlc2VydmVkOwogCXVpbnQ4X3QJCWZpbGVUeXBlOwotCWxiX2FkZHIJCXBhcmVudElDQkxvY2F0aW9uOworCXN0cnVjdCBsYl9hZGRyCXBhcmVudElDQkxvY2F0aW9uOwogCV9fbGUxNgkJZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpY2J0YWc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogU3RyYXRlZ3kgVHlwZSAoRUNNQSAxNjdyMyA0LzE0LjYuMikgKi8KICNkZWZpbmUgSUNCVEFHX1NUUkFURUdZX1RZUEVfVU5ERUYJMHgwMDAwCkBAIC01MjgsNDEgKzUyOCw0MSBAQAogCiAvKiBJbmRpcmVjdCBFbnRyeSAoRUNNQSAxNjdyMyA0LzE0LjcpICovCiBzdHJ1Y3QgaW5kaXJlY3RFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOwotCWxvbmdfYWQJCWluZGlyZWN0SUNCOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCWljYlRhZzsKKwlzdHJ1Y3QgbG9uZ19hZAlpbmRpcmVjdElDQjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUZXJtaW5hbCBFbnRyeSAoRUNNQSAxNjdyMyA0LzE0LjgpICovCiBzdHJ1Y3QgdGVybWluYWxFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCWljYlRhZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBGaWxlIEVudHJ5IChFQ01BIDE2N3IzIDQvMTQuOSkgKi8KIHN0cnVjdCBmaWxlRW50cnkgewotCXRhZwkJZGVzY1RhZzsKLQlpY2J0YWcJCWljYlRhZzsKLQlfX2xlMzIJCXVpZDsKLQlfX2xlMzIJCWdpZDsKLQlfX2xlMzIJCXBlcm1pc3Npb25zOwotCV9fbGUxNgkJZmlsZUxpbmtDb3VudDsKLQl1aW50OF90CQlyZWNvcmRGb3JtYXQ7Ci0JdWludDhfdAkJcmVjb3JkRGlzcGxheUF0dHI7Ci0JX19sZTMyCQlyZWNvcmRMZW5ndGg7Ci0JX19sZTY0CQlpbmZvcm1hdGlvbkxlbmd0aDsKLQlfX2xlNjQJCWxvZ2ljYWxCbG9ja3NSZWNvcmRlZDsKLQl0aW1lc3RhbXAJYWNjZXNzVGltZTsKLQl0aW1lc3RhbXAJbW9kaWZpY2F0aW9uVGltZTsKLQl0aW1lc3RhbXAJYXR0clRpbWU7Ci0JX19sZTMyCQljaGVja3BvaW50OwotCWxvbmdfYWQJCWV4dGVuZGVkQXR0cklDQjsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JX19sZTY0CQl1bmlxdWVJRDsKLQlfX2xlMzIJCWxlbmd0aEV4dGVuZGVkQXR0cjsKLQlfX2xlMzIJCWxlbmd0aEFsbG9jRGVzY3M7Ci0JdWludDhfdAkJZXh0ZW5kZWRBdHRyWzBdOwotCXVpbnQ4X3QJCWFsbG9jRGVzY3NbMF07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCQlpY2JUYWc7CisJX19sZTMyCQkJdWlkOworCV9fbGUzMgkJCWdpZDsKKwlfX2xlMzIJCQlwZXJtaXNzaW9uczsKKwlfX2xlMTYJCQlmaWxlTGlua0NvdW50OworCXVpbnQ4X3QJCQlyZWNvcmRGb3JtYXQ7CisJdWludDhfdAkJCXJlY29yZERpc3BsYXlBdHRyOworCV9fbGUzMgkJCXJlY29yZExlbmd0aDsKKwlfX2xlNjQJCQlpbmZvcm1hdGlvbkxlbmd0aDsKKwlfX2xlNjQJCQlsb2dpY2FsQmxvY2tzUmVjb3JkZWQ7CisJc3RydWN0IHRpbWVzdGFtcAlhY2Nlc3NUaW1lOworCXN0cnVjdCB0aW1lc3RhbXAJbW9kaWZpY2F0aW9uVGltZTsKKwlzdHJ1Y3QgdGltZXN0YW1wCWF0dHJUaW1lOworCV9fbGUzMgkJCWNoZWNrcG9pbnQ7CisJc3RydWN0IGxvbmdfYWQJCWV4dGVuZGVkQXR0cklDQjsKKwlzdHJ1Y3QgcmVnaWQJCWltcElkZW50OworCV9fbGU2NAkJCXVuaXF1ZUlEOworCV9fbGUzMgkJCWxlbmd0aEV4dGVuZGVkQXR0cjsKKwlfX2xlMzIJCQlsZW5ndGhBbGxvY0Rlc2NzOworCXVpbnQ4X3QJCQlleHRlbmRlZEF0dHJbMF07CisJdWludDhfdAkJCWFsbG9jRGVzY3NbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogUGVybWlzc2lvbnMgKEVDTUEgMTY3cjMgNC8xNC45LjUpICovCkBAIC02MDQsNyArNjA0LDcgQEAKIAogLyogRXh0ZW5kZWQgQXR0cmlidXRlIEhlYWRlciBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDQvMTQuMTAuMSkgKi8KIHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjIHsKLQl0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRhZwlkZXNjVGFnOwogCV9fbGUzMgkJaW1wQXR0ckxvY2F0aW9uOwogCV9fbGUzMgkJYXBwQXR0ckxvY2F0aW9uOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC02ODcsNyArNjg3LDcgQEAKIAl1aW50OF90CQlyZXNlcnZlZFszXTsKIAlfX2xlMzIJCWF0dHJMZW5ndGg7CiAJX19sZTMyCQlpbXBVc2VMZW5ndGg7Ci0JcmVnaWQJCWltcElkZW50OworCXN0cnVjdCByZWdpZAlpbXBJZGVudDsKIAl1aW50OF90CQlpbXBVc2VbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtNjk4LDcgKzY5OCw3IEBACiAJdWludDhfdAkJcmVzZXJ2ZWRbM107CiAJX19sZTMyCQlhdHRyTGVuZ3RoOwogCV9fbGUzMgkJYXBwVXNlTGVuZ3RoOwotCXJlZ2lkCQlhcHBJZGVudDsKKwlzdHJ1Y3QgcmVnaWQJYXBwSWRlbnQ7CiAJdWludDhfdAkJYXBwVXNlWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTcxMiwxNSArNzEyLDE1IEBACiAKIC8qIFVuYWxsb2NhdGVkIFNwYWNlIEVudHJ5IChFQ01BIDE2N3IzIDQvMTQuMTEpICovCiBzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkgewotCXRhZwkJZGVzY1RhZzsKLQlpY2J0YWcJCWljYlRhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CisJc3RydWN0IGljYnRhZwlpY2JUYWc7CiAJX19sZTMyCQlsZW5ndGhBbGxvY0Rlc2NzOwogCXVpbnQ4X3QJCWFsbG9jRGVzY3NbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogU3BhY2UgQml0bWFwIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4xMikgKi8KIHN0cnVjdCBzcGFjZUJpdG1hcERlc2MgewotCXRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CiAJX19sZTMyCQludW1PZkJpdHM7CiAJX19sZTMyCQludW1PZkJ5dGVzOwogCXVpbnQ4X3QJCWJpdG1hcFswXTsKQEAgLTcyOCwxMyArNzI4LDEzIEBACiAKIC8qIFBhcnRpdGlvbiBJbnRlZ3JpdHkgRW50cnkgKEVDTUEgMTY3cjMgNC8xNC4xMykgKi8KIHN0cnVjdCBwYXJ0aXRpb25JbnRlZ3JpdHlFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOwotCXRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKLQl1aW50OF90CQlpbnRlZ3JpdHlUeXBlOwotCXVpbnQ4X3QJCXJlc2VydmVkWzE3NV07Ci0JcmVnaWQJCWltcElkZW50OwotCXVpbnQ4X3QJCWltcFVzZVsyNTZdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJc3RydWN0IGljYnRhZwkJaWNiVGFnOworCXN0cnVjdCB0aW1lc3RhbXAJcmVjb3JkaW5nRGF0ZUFuZFRpbWU7CisJdWludDhfdAkJCWludGVncml0eVR5cGU7CisJdWludDhfdAkJCXJlc2VydmVkWzE3NV07CisJc3RydWN0IHJlZ2lkCQlpbXBJZGVudDsKKwl1aW50OF90CQkJaW1wVXNlWzI1Nl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogU2hvcnQgQWxsb2NhdGlvbiBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDQvMTQuMTQuMSkgKi8KQEAgLTc2NSwzMiArNzY1LDMyIEBACiAKIC8qIEZpbGUgRW50cnkgKEVDTUEgMTY3cjMgNC8xNC4xNykgKi8KIHN0cnVjdCBleHRlbmRlZEZpbGVFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOwotCV9fbGUzMgkJdWlkOwotCV9fbGUzMgkJZ2lkOwotCV9fbGUzMgkJcGVybWlzc2lvbnM7Ci0JX19sZTE2CQlmaWxlTGlua0NvdW50OwotCXVpbnQ4X3QJCXJlY29yZEZvcm1hdDsKLQl1aW50OF90CQlyZWNvcmREaXNwbGF5QXR0cjsKLQlfX2xlMzIJCXJlY29yZExlbmd0aDsKLQlfX2xlNjQJCWluZm9ybWF0aW9uTGVuZ3RoOwotCV9fbGU2NAkJb2JqZWN0U2l6ZTsKLQlfX2xlNjQJCWxvZ2ljYWxCbG9ja3NSZWNvcmRlZDsKLQl0aW1lc3RhbXAJYWNjZXNzVGltZTsKLQl0aW1lc3RhbXAJbW9kaWZpY2F0aW9uVGltZTsKLQl0aW1lc3RhbXAJY3JlYXRlVGltZTsKLQl0aW1lc3RhbXAJYXR0clRpbWU7Ci0JX19sZTMyCQljaGVja3BvaW50OwotCV9fbGUzMgkJcmVzZXJ2ZWQ7Ci0JbG9uZ19hZAkJZXh0ZW5kZWRBdHRySUNCOwotCWxvbmdfYWQJCXN0cmVhbURpcmVjdG9yeUlDQjsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JX19sZTY0CQl1bmlxdWVJRDsKLQlfX2xlMzIJCWxlbmd0aEV4dGVuZGVkQXR0cjsKLQlfX2xlMzIJCWxlbmd0aEFsbG9jRGVzY3M7Ci0JdWludDhfdAkJZXh0ZW5kZWRBdHRyWzBdOwotCXVpbnQ4X3QJCWFsbG9jRGVzY3NbMF07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCQlpY2JUYWc7CisJX19sZTMyCQkJdWlkOworCV9fbGUzMgkJCWdpZDsKKwlfX2xlMzIJCQlwZXJtaXNzaW9uczsKKwlfX2xlMTYJCQlmaWxlTGlua0NvdW50OworCXVpbnQ4X3QJCQlyZWNvcmRGb3JtYXQ7CisJdWludDhfdAkJCXJlY29yZERpc3BsYXlBdHRyOworCV9fbGUzMgkJCXJlY29yZExlbmd0aDsKKwlfX2xlNjQJCQlpbmZvcm1hdGlvbkxlbmd0aDsKKwlfX2xlNjQJCQlvYmplY3RTaXplOworCV9fbGU2NAkJCWxvZ2ljYWxCbG9ja3NSZWNvcmRlZDsKKwlzdHJ1Y3QgdGltZXN0YW1wCWFjY2Vzc1RpbWU7CisJc3RydWN0IHRpbWVzdGFtcAltb2RpZmljYXRpb25UaW1lOworCXN0cnVjdCB0aW1lc3RhbXAJY3JlYXRlVGltZTsKKwlzdHJ1Y3QgdGltZXN0YW1wCWF0dHJUaW1lOworCV9fbGUzMgkJCWNoZWNrcG9pbnQ7CisJX19sZTMyCQkJcmVzZXJ2ZWQ7CisJc3RydWN0IGxvbmdfYWQJCWV4dGVuZGVkQXR0cklDQjsKKwlzdHJ1Y3QgbG9uZ19hZAkJc3RyZWFtRGlyZWN0b3J5SUNCOworCXN0cnVjdCByZWdpZAkJaW1wSWRlbnQ7CisJX19sZTY0CQkJdW5pcXVlSUQ7CisJX19sZTMyCQkJbGVuZ3RoRXh0ZW5kZWRBdHRyOworCV9fbGUzMgkJCWxlbmd0aEFsbG9jRGVzY3M7CisJdWludDhfdAkJCWV4dGVuZGVkQXR0clswXTsKKwl1aW50OF90CQkJYWxsb2NEZXNjc1swXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogX0VDTUFfMTY3X0ggKi8KZGlmZiAtLWdpdCBhL2ZzL3VkZi9pYWxsb2MuYyBiL2ZzL3VkZi9pYWxsb2MuYwppbmRleCA0N2RiZTU2Li5jMTBmYTM5IDEwMDY0NAotLS0gYS9mcy91ZGYvaWFsbG9jLmMKKysrIGIvZnMvdWRmL2lhbGxvYy5jCkBAIC00OSwxMiArNDksMTEgQEAKIAkJCWxlMzJfYWRkX2NwdSgmbHZpZGl1LT5udW1EaXJzLCAtMSk7CiAJCWVsc2UKIAkJCWxlMzJfYWRkX2NwdSgmbHZpZGl1LT5udW1GaWxlcywgLTEpOwotCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKKwkJdWRmX3VwZGF0ZWRfbHZpZChzYik7CiAJfQogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAotCXVkZl9mcmVlX2Jsb2NrcyhzYiwgTlVMTCwgVURGX0koaW5vZGUpLT5pX2xvY2F0aW9uLCAwLCAxKTsKKwl1ZGZfZnJlZV9ibG9ja3Moc2IsIE5VTEwsICZVREZfSShpbm9kZSktPmlfbG9jYXRpb24sIDAsIDEpOwogfQogCiBzdHJ1Y3QgaW5vZGUgKnVkZl9uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlLCBpbnQgKmVycikKQEAgLTEyMiw3ICsxMjEsNyBAQAogCQlpZiAoISgrK3VuaXF1ZUlEICYgMHgwMDAwMDAwMEZGRkZGRkZGVUwpKQogCQkJdW5pcXVlSUQgKz0gMTY7CiAJCWx2aGQtPnVuaXF1ZUlEID0gY3B1X3RvX2xlNjQodW5pcXVlSUQpOwotCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfbHZpZF9iaCk7CisJCXVkZl91cGRhdGVkX2x2aWQoc2IpOwogCX0KIAltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CkBAIC0xMzgsNyArMTM3LDcgQEAKIAlpaW5mby0+aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0gPSBibG9jazsKIAlpaW5mby0+aV9sb2NhdGlvbi5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPQogCQkJCWRpbmZvLT5pX2xvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bTsKLQlpbm9kZS0+aV9pbm8gPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgaWluZm8tPmlfbG9jYXRpb24sIDApOworCWlub2RlLT5pX2lubyA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmaWluZm8tPmlfbG9jYXRpb24sIDApOwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJaWluZm8tPmlfbGVuRUF0dHIgPSAwOwogCWlpbmZvLT5pX2xlbkFsbG9jID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggMzBlYmRlNC4uZTc1MzNmNyAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTU1LDE1ICs1NSwxNSBAQAogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgaW50ICosCiAJCQkJCXNlY3Rvcl90ICosIGludCAqKTsKIHN0YXRpYyBpbnQ4X3QgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLAotCQkJICAgICAga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90KTsKKwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QpOwogc3RhdGljIHZvaWQgdWRmX3NwbGl0X2V4dGVudHMoc3RydWN0IGlub2RlICosIGludCAqLCBpbnQsIGludCwKLQkJCSAgICAgIGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOworCQkJICAgICAgc3RydWN0IGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOwogc3RhdGljIHZvaWQgdWRmX3ByZWFsbG9jX2V4dGVudHMoc3RydWN0IGlub2RlICosIGludCwgaW50LAotCQkJCSBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCAqKTsKKwkJCQkgc3RydWN0IGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOwogc3RhdGljIHZvaWQgdWRmX21lcmdlX2V4dGVudHMoc3RydWN0IGlub2RlICosCi0JCQkgICAgICBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCAqKTsKKwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCAqKTsKIHN0YXRpYyB2b2lkIHVkZl91cGRhdGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgICAgICBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCwgaW50LAorCQkJICAgICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCwgaW50LAogCQkJICAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKik7CiBzdGF0aWMgaW50IHVkZl9nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKIApAQCAtMjAwLDcgKzIwMCw3IEBACiB7CiAJaW50IG5ld2Jsb2NrOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGJoID0gTlVMTDsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXVpbnQzMl90IGVsZW47CiAJdWludDhfdCBhbGxvY3R5cGU7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJZXBvcy5iaCA9IE5VTEw7CiAJZXBvcy5ibG9jayA9IGlpbmZvLT5pX2xvY2F0aW9uOwogCWVwb3Mub2Zmc2V0ID0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKTsKLQl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCBlbG9jLCBlbGVuLCAwKTsKKwl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgZWxlbiwgMCk7CiAJLyogVW5pcXVlSUQgc3R1ZmYgKi8KIAogCWJyZWxzZShlcG9zLmJoKTsKQEAgLTM1OSwxMiArMzU5LDEyIEBACiAKIC8qIEV4dGVuZCB0aGUgZmlsZSBieSAnYmxvY2tzJyBibG9ja3MsIHJldHVybiB0aGUgbnVtYmVyIG9mIGV4dGVudHMgYWRkZWQgKi8KIGludCB1ZGZfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqbGFzdF9wb3MsCi0JCSAgICBrZXJuZWxfbG9uZ19hZCAqbGFzdF9leHQsIHNlY3Rvcl90IGJsb2NrcykKKwkJICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCAqbGFzdF9leHQsIHNlY3Rvcl90IGJsb2NrcykKIHsKIAlzZWN0b3JfdCBhZGQ7CiAJaW50IGNvdW50ID0gMCwgZmFrZSA9ICEobGFzdF9leHQtPmV4dExlbmd0aCAmIFVERl9FWFRFTlRfTEVOR1RIX01BU0spOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKLQlrZXJuZWxfbGJfYWRkciBwcmVhbGxvY19sb2MgPSB7fTsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgcHJlYWxsb2NfbG9jID0ge307CiAJaW50IHByZWFsbG9jX2xlbiA9IDA7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbzsKIApAQCAtNDExLDExICs0MTEsMTEgQEAKIAl9CiAKIAlpZiAoZmFrZSkgewotCQl1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCisJCXVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsICZsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCiAJCQkgICAgIGxhc3RfZXh0LT5leHRMZW5ndGgsIDEpOwogCQljb3VudCsrOwogCX0gZWxzZQotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgbGFzdF9wb3MsIGxhc3RfZXh0LT5leHRMb2NhdGlvbiwKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGxhc3RfcG9zLCAmbGFzdF9leHQtPmV4dExvY2F0aW9uLAogCQkJCWxhc3RfZXh0LT5leHRMZW5ndGgsIDEpOwogCiAJLyogTWFuYWdlZCB0byBkbyBldmVyeXRoaW5nIG5lY2Vzc2FyeT8gKi8KQEAgLTQzMiw3ICs0MzIsNyBAQAogCS8qIENyZWF0ZSBlbm91Z2ggZXh0ZW50cyB0byBjb3ZlciB0aGUgd2hvbGUgaG9sZSAqLwogCXdoaWxlIChibG9ja3MgPiBhZGQpIHsKIAkJYmxvY2tzIC09IGFkZDsKLQkJaWYgKHVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsIGxhc3RfZXh0LT5leHRMb2NhdGlvbiwKKwkJaWYgKHVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsICZsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCiAJCQkJIGxhc3RfZXh0LT5leHRMZW5ndGgsIDEpID09IC0xKQogCQkJcmV0dXJuIC0xOwogCQljb3VudCsrOwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAJaWYgKGJsb2NrcykgewogCQlsYXN0X2V4dC0+ZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwKIAkJCShibG9ja3MgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCQlpZiAodWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgbGFzdF9leHQtPmV4dExvY2F0aW9uLAorCQlpZiAodWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgJmxhc3RfZXh0LT5leHRMb2NhdGlvbiwKIAkJCQkgbGFzdF9leHQtPmV4dExlbmd0aCwgMSkgPT0gLTEpCiAJCQlyZXR1cm4gLTE7CiAJCWNvdW50Kys7CkBAIC00NDksNyArNDQ5LDcgQEAKIG91dDoKIAkvKiBEbyB3ZSBoYXZlIHNvbWUgcHJlYWxsb2NhdGVkIGJsb2NrcyBzYXZlZD8gKi8KIAlpZiAocHJlYWxsb2NfbGVuKSB7Ci0JCWlmICh1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBwcmVhbGxvY19sb2MsCisJCWlmICh1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCAmcHJlYWxsb2NfbG9jLAogCQkJCSBwcmVhbGxvY19sZW4sIDEpID09IC0xKQogCQkJcmV0dXJuIC0xOwogCQlsYXN0X2V4dC0+ZXh0TG9jYXRpb24gPSBwcmVhbGxvY19sb2M7CkBAIC00NTksOSArNDU5LDkgQEAKIAogCS8qIGxhc3RfcG9zIHNob3VsZCBwb2ludCB0byB0aGUgbGFzdCB3cml0dGVuIGV4dGVudC4uLiAqLwogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlsYXN0X3Bvcy0+b2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCWxhc3RfcG9zLT5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlsYXN0X3Bvcy0+b2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKKwkJbGFzdF9wb3MtPm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCWVsc2UKIAkJcmV0dXJuIC0xOwogCkBAIC00NzMsMTEgKzQ3MywxMSBAQAogewogCXN0YXRpYyBzZWN0b3JfdCBsYXN0X2Jsb2NrOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVzdWx0ID0gTlVMTDsKLQlrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV07CisJc3RydWN0IGtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXTsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIHByZXZfZXBvcywgY3VyX2Vwb3MsIG5leHRfZXBvczsKIAlpbnQgY291bnQgPSAwLCBzdGFydG51bSA9IDAsIGVuZG51bSA9IDA7CiAJdWludDMyX3QgZWxlbiA9IDAsIHRtcGVsZW47Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYywgdG1wZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYywgdG1wZWxvYzsKIAlpbnQgYyA9IDE7CiAJbG9mZl90IGxiY291bnQgPSAwLCBiX29mZiA9IDA7CiAJdWludDMyX3QgbmV3YmxvY2tudW0sIG5ld2Jsb2NrOwpAQCAtNTUwLDEyICs1NTAsMTIgQEAKIAkJCWVsZW4gPSBFWFRfUkVDT1JERURfQUxMT0NBVEVEIHwKIAkJCQkoKGVsZW4gKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSAmCiAJCQkJIH4oaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJZXR5cGUgPSB1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmN1cl9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJCWV0eXBlID0gdWRmX3dyaXRlX2FleHQoaW5vZGUsICZjdXJfZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCQl9CiAJCWJyZWxzZShwcmV2X2Vwb3MuYmgpOwogCQlicmVsc2UoY3VyX2Vwb3MuYmgpOwogCQlicmVsc2UobmV4dF9lcG9zLmJoKTsKLQkJbmV3YmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKKwkJbmV3YmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgJmVsb2MsIG9mZnNldCk7CiAJCSpwaHlzID0gbmV3YmxvY2s7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTU3Miw3ICs1NzIsNyBAQAogCQl9IGVsc2UgewogCQkJLyogQ3JlYXRlIGEgZmFrZSBleHRlbnQgd2hlbiB0aGVyZSdzIG5vdCBvbmUgKi8KIAkJCW1lbXNldCgmbGFhcnJbMF0uZXh0TG9jYXRpb24sIDB4MDAsCi0JCQkJc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7CisJCQkJc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpOwogCQkJbGFhcnJbMF0uZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEOwogCQkJLyogV2lsbCB1ZGZfZXh0ZW5kX2ZpbGUoKSBjcmVhdGUgcmVhbCBleHRlbnQgZnJvbQogCQkJICAgYSBmYWtlIG9uZT8gKi8KQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJbGFhcnJbY10uZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwKIAkJCQlpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJCQltZW1zZXQoJmxhYXJyW2NdLmV4dExvY2F0aW9uLCAweDAwLAotCQkJCXNpemVvZihrZXJuZWxfbGJfYWRkcikpOworCQkJCXNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTsKIAkJCWNvdW50Kys7CiAJCQllbmRudW0rKzsKIAkJfQpAQCAtNjk5LDcgKzY5OSw3IEBACiAKIHN0YXRpYyB2b2lkIHVkZl9zcGxpdF9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqYywgaW50IG9mZnNldCwKIAkJCSAgICAgIGludCBuZXdibG9ja251bSwKLQkJCSAgICAgIGtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXSwKKwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV0sCiAJCQkgICAgICBpbnQgKmVuZG51bSkKIHsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKQEAgLTcyNiw3ICs3MjYsNyBAQAogCQlpZiAob2Zmc2V0KSB7CiAJCQlpZiAoZXR5cGUgPT0gKEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgewogCQkJCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsCi0JCQkJCQlsYWFycltjdXJyXS5leHRMb2NhdGlvbiwKKwkJCQkJCSZsYWFycltjdXJyXS5leHRMb2NhdGlvbiwKIAkJCQkJCTAsIG9mZnNldCk7CiAJCQkJbGFhcnJbY3Vycl0uZXh0TGVuZ3RoID0KIAkJCQkJRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwKQEAgLTc2Myw3ICs3NjMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB1ZGZfcHJlYWxsb2NfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYywgaW50IGxhc3RibG9jaywKLQkJCQkga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAorCQkJCSBzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAogCQkJCSBpbnQgKmVuZG51bSkKIHsKIAlpbnQgc3RhcnQsIGxlbmd0aCA9IDAsIGN1cnJsZW5ndGggPSAwLCBpOwpAQCAtODE3LDcgKzgxNyw3IEBACiAJCQkJCSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7CiAJCQllbHNlIHsKIAkJCQltZW1tb3ZlKCZsYWFycltjICsgMl0sICZsYWFycltjICsgMV0sCi0JCQkJCXNpemVvZihsb25nX2FkKSAqICgqZW5kbnVtIC0gKGMgKyAxKSkpOworCQkJCQlzaXplb2Yoc3RydWN0IGxvbmdfYWQpICogKCplbmRudW0gLSAoYyArIDEpKSk7CiAJCQkJKCplbmRudW0pKys7CiAJCQkJbGFhcnJbYyArIDFdLmV4dExvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSA9IG5leHQ7CiAJCQkJbGFhcnJbYyArIDFdLmV4dExvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9CkBAIC04NDYsNyArODQ2LDcgQEAKIAkJCQkJaWYgKCplbmRudW0gPiAoaSArIDEpKQogCQkJCQkJbWVtbW92ZSgmbGFhcnJbaV0sCiAJCQkJCQkJJmxhYXJyW2kgKyAxXSwKLQkJCQkJCQlzaXplb2YobG9uZ19hZCkgKgorCQkJCQkJCXNpemVvZihzdHJ1Y3QgbG9uZ19hZCkgKgogCQkJCQkJCSgqZW5kbnVtIC0gKGkgKyAxKSkpOwogCQkJCQlpLS07CiAJCQkJCSgqZW5kbnVtKS0tOwpAQCAtODU5LDcgKzg1OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9tZXJnZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICBrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV0sCisJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAogCQkJICAgICAgaW50ICplbmRudW0pCiB7CiAJaW50IGk7CkBAIC04NjcsOCArODY3LDggQEAKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKCplbmRudW0gLSAxKTsgaSsrKSB7Ci0JCWtlcm5lbF9sb25nX2FkICpsaSAvKmxbaV0qLyA9ICZsYWFycltpXTsKLQkJa2VybmVsX2xvbmdfYWQgKmxpcDEgLypsW2kgcGx1cyAxXSovID0gJmxhYXJyW2kgKyAxXTsKKwkJc3RydWN0IGtlcm5lbF9sb25nX2FkICpsaSAvKmxbaV0qLyA9ICZsYWFycltpXTsKKwkJc3RydWN0IGtlcm5lbF9sb25nX2FkICpsaXAxIC8qbFtpIHBsdXMgMV0qLyA9ICZsYWFycltpICsgMV07CiAKIAkJaWYgKCgobGktPmV4dExlbmd0aCA+PiAzMCkgPT0gKGxpcDEtPmV4dExlbmd0aCA+PiAzMCkpICYmCiAJCQkoKChsaS0+ZXh0TGVuZ3RoID4+IDMwKSA9PQpAQCAtOTAyLDcgKzkwMiw3IEBACiAJCQkJCSBibG9ja3NpemUgLSAxKSAmIH4oYmxvY2tzaXplIC0gMSkpOwogCQkJCWlmICgqZW5kbnVtID4gKGkgKyAyKSkKIAkJCQkJbWVtbW92ZSgmbGFhcnJbaSArIDFdLCAmbGFhcnJbaSArIDJdLAotCQkJCQkJc2l6ZW9mKGxvbmdfYWQpICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgbG9uZ19hZCkgKgogCQkJCQkJKCplbmRudW0gLSAoaSArIDIpKSk7CiAJCQkJaS0tOwogCQkJCSgqZW5kbnVtKS0tOwpAQCAtOTExLDcgKzkxMSw3IEBACiAJCQkJKEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgJiYKIAkJCSAgICgobGlwMS0+ZXh0TGVuZ3RoID4+IDMwKSA9PQogCQkJCShFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgPj4gMzApKSkgewotCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgbGktPmV4dExvY2F0aW9uLCAwLAorCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgJmxpLT5leHRMb2NhdGlvbiwgMCwKIAkJCQkJKChsaS0+ZXh0TGVuZ3RoICYKIAkJCQkJICBVREZfRVhURU5UX0xFTkdUSF9NQVNLKSArCiAJCQkJCSBibG9ja3NpemUgLSAxKSA+PiBibG9ja3NpemVfYml0cyk7CkBAIC05MzcsNyArOTM3LDcgQEAKIAkJCQkJICBibG9ja3NpemUgLSAxKSAmIH4oYmxvY2tzaXplIC0gMSkpOwogCQkJCWlmICgqZW5kbnVtID4gKGkgKyAyKSkKIAkJCQkJbWVtbW92ZSgmbGFhcnJbaSArIDFdLCAmbGFhcnJbaSArIDJdLAotCQkJCQkJc2l6ZW9mKGxvbmdfYWQpICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgbG9uZ19hZCkgKgogCQkJCQkJKCplbmRudW0gLSAoaSArIDIpKSk7CiAJCQkJaS0tOwogCQkJCSgqZW5kbnVtKS0tOwpAQCAtOTQ1LDcgKzk0NSw3IEBACiAJCX0gZWxzZSBpZiAoKGxpLT5leHRMZW5ndGggPj4gMzApID09CiAJCQkJCShFWFRfTk9UX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpIHsKIAkJCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsCi0JCQkJCWxpLT5leHRMb2NhdGlvbiwgMCwKKwkJCQkJJmxpLT5leHRMb2NhdGlvbiwgMCwKIAkJCQkJKChsaS0+ZXh0TGVuZ3RoICYKIAkJCQkJCVVERl9FWFRFTlRfTEVOR1RIX01BU0spICsKIAkJCQkJIGJsb2Nrc2l6ZSAtIDEpID4+IGJsb2Nrc2l6ZV9iaXRzKTsKQEAgLTk1OSwxMiArOTU5LDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIHVkZl91cGRhdGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIGtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXSwKKwkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAogCQkJICAgICAgIGludCBzdGFydG51bSwgaW50IGVuZG51bSwKIAkJCSAgICAgICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zKQogewogCWludCBzdGFydCA9IDAsIGk7Ci0Ja2VybmVsX2xiX2FkZHIgdG1wbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciB0bXBsb2M7CiAJdWludDMyX3QgdG1wbGVuOwogCiAJaWYgKHN0YXJ0bnVtID4gZW5kbnVtKSB7CkBAIC05ODMsNyArOTgzLDcgQEAKIAogCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kbnVtOyBpKyspIHsKIAkJdWRmX25leHRfYWV4dChpbm9kZSwgZXBvcywgJnRtcGxvYywgJnRtcGxlbiwgMCk7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCBlcG9zLCBsYWFycltpXS5leHRMb2NhdGlvbiwKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGVwb3MsICZsYWFycltpXS5leHRMb2NhdGlvbiwKIAkJCSAgICAgICBsYWFycltpXS5leHRMZW5ndGgsIDEpOwogCX0KIH0KQEAgLTEwNzYsNyArMTA3Niw3IEBACiAJICogICAgICBpX25saW5rID0gMQogCSAqICAgICAgaV9vcCA9IE5VTEw7CiAJICovCi0JYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKGlub2RlLT5pX3NiLCBpaW5mby0+aV9sb2NhdGlvbiwgMCwgJmlkZW50KTsKKwliaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsICZpaW5mby0+aV9sb2NhdGlvbiwgMCwgJmlkZW50KTsKIAlpZiAoIWJoKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidWRmOiB1ZGZfcmVhZF9pbm9kZShpbm8gJWxkKSBmYWlsZWQgIWJoXG4iLAogCQkgICAgICAgaW5vZGUtPmlfaW5vKTsKQEAgLTEwOTgsMjQgKzEwOTgsMjQgQEAKIAlpZiAoZmUtPmljYlRhZy5zdHJhdGVneVR5cGUgPT0gY3B1X3RvX2xlMTYoNDA5NikpIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICppYmg7CiAKLQkJaWJoID0gdWRmX3JlYWRfcHRhZ2dlZChpbm9kZS0+aV9zYiwgaWluZm8tPmlfbG9jYXRpb24sIDEsCisJCWliaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsICZpaW5mby0+aV9sb2NhdGlvbiwgMSwKIAkJCQkJJmlkZW50KTsKIAkJaWYgKGlkZW50ID09IFRBR19JREVOVF9JRSAmJiBpYmgpIHsKIAkJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmJoID0gTlVMTDsKLQkJCWtlcm5lbF9sYl9hZGRyIGxvYzsKKwkJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsb2M7CiAJCQlzdHJ1Y3QgaW5kaXJlY3RFbnRyeSAqaWU7CiAKIAkJCWllID0gKHN0cnVjdCBpbmRpcmVjdEVudHJ5ICopaWJoLT5iX2RhdGE7CiAJCQlsb2MgPSBsZWxiX3RvX2NwdShpZS0+aW5kaXJlY3RJQ0IuZXh0TG9jYXRpb24pOwogCiAJCQlpZiAoaWUtPmluZGlyZWN0SUNCLmV4dExlbmd0aCAmJgotCQkJCShuYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKGlub2RlLT5pX3NiLCBsb2MsIDAsCisJCQkJKG5iaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsICZsb2MsIDAsCiAJCQkJCQkJJmlkZW50KSkpIHsKIAkJCQlpZiAoaWRlbnQgPT0gVEFHX0lERU5UX0ZFIHx8CiAJCQkJCWlkZW50ID09IFRBR19JREVOVF9FRkUpIHsKIAkJCQkJbWVtY3B5KCZpaW5mby0+aV9sb2NhdGlvbiwKIAkJCQkJCSZsb2MsCi0JCQkJCQlzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKKwkJCQkJCXNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTsKIAkJCQkJYnJlbHNlKGJoKTsKIAkJCQkJYnJlbHNlKGliaCk7CiAJCQkJCWJyZWxzZShuYmgpOwpAQCAtMTIyMiw4ICsxMjIyLDE1IEBACiAJaW5vZGUtPmlfc2l6ZSA9IGxlNjRfdG9fY3B1KGZlLT5pbmZvcm1hdGlvbkxlbmd0aCk7CiAJaWluZm8tPmlfbGVuRXh0ZW50cyA9IGlub2RlLT5pX3NpemU7CiAKLQlpbm9kZS0+aV9tb2RlID0gdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoZmUpOwotCWlub2RlLT5pX21vZGUgJj0gflVERl9TQihpbm9kZS0+aV9zYiktPnNfdW1hc2s7CisJaWYgKGZlLT5pY2JUYWcuZmlsZVR5cGUgIT0gSUNCVEFHX0ZJTEVfVFlQRV9ESVJFQ1RPUlkgJiYKKwkJCXNiaS0+c19mbW9kZSAhPSBVREZfSU5WQUxJRF9NT0RFKQorCQlpbm9kZS0+aV9tb2RlID0gc2JpLT5zX2Ztb2RlOworCWVsc2UgaWYgKGZlLT5pY2JUYWcuZmlsZVR5cGUgPT0gSUNCVEFHX0ZJTEVfVFlQRV9ESVJFQ1RPUlkgJiYKKwkJCXNiaS0+c19kbW9kZSAhPSBVREZfSU5WQUxJRF9NT0RFKQorCQlpbm9kZS0+aV9tb2RlID0gc2JpLT5zX2Rtb2RlOworCWVsc2UKKwkJaW5vZGUtPmlfbW9kZSA9IHVkZl9jb252ZXJ0X3Blcm1pc3Npb25zKGZlKTsKKwlpbm9kZS0+aV9tb2RlICY9IH5zYmktPnNfdW1hc2s7CiAKIAlpZiAoaWluZm8tPmlfZWZlID09IDApIHsKIAkJaW5vZGUtPmlfYmxvY2tzID0gbGU2NF90b19jcHUoZmUtPmxvZ2ljYWxCbG9ja3NSZWNvcmRlZCkgPDwKQEAgLTEzOTYsNyArMTQwMyw3IEBACiAKIAliaCA9IHVkZl90cmVhZChpbm9kZS0+aV9zYiwKIAkJCXVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLAotCQkJCQkgIGlpbmZvLT5pX2xvY2F0aW9uLCAwKSk7CisJCQkJCSAgJmlpbmZvLT5pX2xvY2F0aW9uLCAwKSk7CiAJaWYgKCFiaCkgewogCQl1ZGZfZGVidWcoImJyZWFkIGZhaWx1cmVcbiIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTE0MTYsMTMgKzE0MjMsMTMgQEAKIAkJICAgICAgIGlpbmZvLT5pX2V4dC5pX2RhdGEsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCiAJCQkJCXNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpKTsKIAkJY3JjbGVuID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSkgKwotCQkJCWlpbmZvLT5pX2xlbkFsbG9jIC0gc2l6ZW9mKHRhZyk7CisJCQkJaWluZm8tPmlfbGVuQWxsb2MgLSBzaXplb2Yoc3RydWN0IHRhZyk7CiAJCXVzZS0+ZGVzY1RhZy50YWdMb2NhdGlvbiA9IGNwdV90b19sZTMyKAogCQkJCQkJaWluZm8tPmlfbG9jYXRpb24uCiAJCQkJCQkJbG9naWNhbEJsb2NrTnVtKTsKIAkJdXNlLT5kZXNjVGFnLmRlc2NDUkNMZW5ndGggPSBjcHVfdG9fbGUxNihjcmNsZW4pOwogCQl1c2UtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKXVzZSArCi0JCQkJCQkJICAgc2l6ZW9mKHRhZyksCisJCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCB0YWcpLAogCQkJCQkJCSAgIGNyY2xlbikpOwogCQl1c2UtPmRlc2NUYWcudGFnQ2hlY2tzdW0gPSB1ZGZfdGFnX2NoZWNrc3VtKCZ1c2UtPmRlc2NUYWcpOwogCkBAIC0xNDU5LDIzICsxNDY2LDIzIEBACiAJZmUtPmluZm9ybWF0aW9uTGVuZ3RoID0gY3B1X3RvX2xlNjQoaW5vZGUtPmlfc2l6ZSk7CiAKIAlpZiAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB7Ci0JCXJlZ2lkICplaWQ7CisJCXN0cnVjdCByZWdpZCAqZWlkOwogCQlzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9CiAJCQkoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpOwogCQlpZiAoIWRzZWEpIHsKIAkJCWRzZWEgPSAoc3RydWN0IGRldmljZVNwZWMgKikKIAkJCQl1ZGZfYWRkX2V4dGVuZGVkYXR0cihpbm9kZSwKIAkJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSArCi0JCQkJCQkgICAgIHNpemVvZihyZWdpZCksIDEyLCAweDMpOworCQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHJlZ2lkKSwgMTIsIDB4Myk7CiAJCQlkc2VhLT5hdHRyVHlwZSA9IGNwdV90b19sZTMyKDEyKTsKIAkJCWRzZWEtPmF0dHJTdWJ0eXBlID0gMTsKIAkJCWRzZWEtPmF0dHJMZW5ndGggPSBjcHVfdG9fbGUzMigKIAkJCQkJCXNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgKwotCQkJCQkJc2l6ZW9mKHJlZ2lkKSk7Ci0JCQlkc2VhLT5pbXBVc2VMZW5ndGggPSBjcHVfdG9fbGUzMihzaXplb2YocmVnaWQpKTsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmVnaWQpKTsKKwkJCWRzZWEtPmltcFVzZUxlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcmVnaWQpKTsKIAkJfQotCQllaWQgPSAocmVnaWQgKilkc2VhLT5pbXBVc2U7Ci0JCW1lbXNldChlaWQsIDAsIHNpemVvZihyZWdpZCkpOworCQllaWQgPSAoc3RydWN0IHJlZ2lkICopZHNlYS0+aW1wVXNlOworCQltZW1zZXQoZWlkLCAwLCBzaXplb2Yoc3RydWN0IHJlZ2lkKSk7CiAJCXN0cmNweShlaWQtPmlkZW50LCBVREZfSURfREVWRUxPUEVSKTsKIAkJZWlkLT5pZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYOwogCQllaWQtPmlkZW50U3VmZml4WzFdID0gVURGX09TX0lEX0xJTlVYOwpAQCAtMTQ5NCw3ICsxNTAxLDcgQEAKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmZmUtPmFjY2Vzc1RpbWUsIGlub2RlLT5pX2F0aW1lKTsKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmZmUtPm1vZGlmaWNhdGlvblRpbWUsIGlub2RlLT5pX210aW1lKTsKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmZmUtPmF0dHJUaW1lLCBpbm9kZS0+aV9jdGltZSk7Ci0JCW1lbXNldCgmKGZlLT5pbXBJZGVudCksIDAsIHNpemVvZihyZWdpZCkpOworCQltZW1zZXQoJihmZS0+aW1wSWRlbnQpLCAwLCBzaXplb2Yoc3RydWN0IHJlZ2lkKSk7CiAJCXN0cmNweShmZS0+aW1wSWRlbnQuaWRlbnQsIFVERl9JRF9ERVZFTE9QRVIpOwogCQlmZS0+aW1wSWRlbnQuaWRlbnRTdWZmaXhbMF0gPSBVREZfT1NfQ0xBU1NfVU5JWDsKIAkJZmUtPmltcElkZW50LmlkZW50U3VmZml4WzFdID0gVURGX09TX0lEX0xJTlVYOwpAQCAtMTUzMyw3ICsxNTQwLDcgQEAKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmZWZlLT5jcmVhdGVUaW1lLCBpaW5mby0+aV9jcnRpbWUpOwogCQl1ZGZfdGltZV90b19kaXNrX3N0YW1wKCZlZmUtPmF0dHJUaW1lLCBpbm9kZS0+aV9jdGltZSk7CiAKLQkJbWVtc2V0KCYoZWZlLT5pbXBJZGVudCksIDAsIHNpemVvZihyZWdpZCkpOworCQltZW1zZXQoJihlZmUtPmltcElkZW50KSwgMCwgc2l6ZW9mKHN0cnVjdCByZWdpZCkpOwogCQlzdHJjcHkoZWZlLT5pbXBJZGVudC5pZGVudCwgVURGX0lEX0RFVkVMT1BFUik7CiAJCWVmZS0+aW1wSWRlbnQuaWRlbnRTdWZmaXhbMF0gPSBVREZfT1NfQ0xBU1NfVU5JWDsKIAkJZWZlLT5pbXBJZGVudC5pZGVudFN1ZmZpeFsxXSA9IFVERl9PU19JRF9MSU5VWDsKQEAgLTE1ODQsOSArMTU5MSw5IEBACiAJZmUtPmRlc2NUYWcudGFnTG9jYXRpb24gPSBjcHVfdG9fbGUzMigKIAkJCQkJaWluZm8tPmlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKTsKIAljcmNsZW4gKz0gaWluZm8tPmlfbGVuRUF0dHIgKyBpaW5mby0+aV9sZW5BbGxvYyAtCi0JCQkJCQkJCXNpemVvZih0YWcpOworCQkJCQkJCQlzaXplb2Yoc3RydWN0IHRhZyk7CiAJZmUtPmRlc2NUYWcuZGVzY0NSQ0xlbmd0aCA9IGNwdV90b19sZTE2KGNyY2xlbik7Ci0JZmUtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKWZlICsgc2l6ZW9mKHRhZyksCisJZmUtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKWZlICsgc2l6ZW9mKHN0cnVjdCB0YWcpLAogCQkJCQkJICBjcmNsZW4pKTsKIAlmZS0+ZGVzY1RhZy50YWdDaGVja3N1bSA9IHVkZl90YWdfY2hlY2tzdW0oJmZlLT5kZXNjVGFnKTsKIApAQCAtMTYwNiw3ICsxNjEzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdHJ1Y3QgaW5vZGUgKnVkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGtlcm5lbF9sYl9hZGRyIGlubykKK3N0cnVjdCBpbm9kZSAqdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8pCiB7CiAJdW5zaWduZWQgbG9uZyBibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBpbm8sIDApOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgYmxvY2spOwpAQCAtMTYxNSw3ICsxNjIyLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykgewotCQltZW1jcHkoJlVERl9JKGlub2RlKS0+aV9sb2NhdGlvbiwgJmlubywgc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7CisJCW1lbWNweSgmVURGX0koaW5vZGUpLT5pX2xvY2F0aW9uLCBpbm8sIHNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTsKIAkJX191ZGZfcmVhZF9pbm9kZShpbm9kZSk7CiAJCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwogCX0KQEAgLTE2MjMsMTAgKzE2MzAsMTAgQEAKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJZ290byBvdXRfaXB1dDsKIAotCWlmIChpbm8ubG9naWNhbEJsb2NrTnVtID49IFVERl9TQihzYiktPgotCQkJc19wYXJ0bWFwc1tpbm8ucGFydGl0aW9uUmVmZXJlbmNlTnVtXS5zX3BhcnRpdGlvbl9sZW4pIHsKKwlpZiAoaW5vLT5sb2dpY2FsQmxvY2tOdW0gPj0gVURGX1NCKHNiKS0+CisJCQlzX3BhcnRtYXBzW2luby0+cGFydGl0aW9uUmVmZXJlbmNlTnVtXS5zX3BhcnRpdGlvbl9sZW4pIHsKIAkJdWRmX2RlYnVnKCJibG9jaz0lZCwgcGFydGl0aW9uPSVkIG91dCBvZiByYW5nZVxuIiwKLQkJCSAgaW5vLmxvZ2ljYWxCbG9ja051bSwgaW5vLnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CisJCQkgIGluby0+bG9naWNhbEJsb2NrTnVtLCBpbm8tPnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CiAJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIAkJZ290byBvdXRfaXB1dDsKIAl9CkBAIC0xNjM5LDExICsxNjQ2LDExIEBACiB9CiAKIGludDhfdCB1ZGZfYWRkX2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKLQkJICAgIGtlcm5lbF9sYl9hZGRyIGVsb2MsIHVpbnQzMl90IGVsZW4sIGludCBpbmMpCisJCSAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90IGVsZW4sIGludCBpbmMpCiB7CiAJaW50IGFkc2l6ZTsKLQlzaG9ydF9hZCAqc2FkID0gTlVMTDsKLQlsb25nX2FkICpsYWQgPSBOVUxMOworCXN0cnVjdCBzaG9ydF9hZCAqc2FkID0gTlVMTDsKKwlzdHJ1Y3QgbG9uZ19hZCAqbGFkID0gTlVMTDsKIAlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQ7CiAJaW50OF90IGV0eXBlOwogCXVpbnQ4X3QgKnB0cjsKQEAgLTE2NTcsOSArMTY2NCw5IEBACiAJCXB0ciA9IGVwb3MtPmJoLT5iX2RhdGEgKyBlcG9zLT5vZmZzZXQ7CiAKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlyZXR1cm4gLTE7CiAKQEAgLTE2NjcsNyArMTY3NCw3IEBACiAJCWNoYXIgKnNwdHIsICpkcHRyOwogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5iaDsKIAkJaW50IGVyciwgbG9mZnNldDsKLQkJa2VybmVsX2xiX2FkZHIgb2Jsb2MgPSBlcG9zLT5ibG9jazsKKwkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIG9ibG9jID0gZXBvcy0+YmxvY2s7CiAKIAkJZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtID0gdWRmX25ld19ibG9jayhpbm9kZS0+aV9zYiwgTlVMTCwKIAkJCQkJCW9ibG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSwKQEAgLTE2NzUsNyArMTY4Miw3IEBACiAJCWlmICghZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtKQogCQkJcmV0dXJuIC0xOwogCQluYmggPSB1ZGZfdGdldGJsayhpbm9kZS0+aV9zYiwgdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsCi0JCQkJCQkJCSBlcG9zLT5ibG9jaywKKwkJCQkJCQkJICZlcG9zLT5ibG9jaywKIAkJCQkJCQkJIDApKTsKIAkJaWYgKCFuYmgpCiAJCQlyZXR1cm4gLTE7CkBAIC0xNzEyLDIwICsxNzE5LDIwIEBACiAJCX0KIAkJaWYgKFVERl9TQihpbm9kZS0+aV9zYiktPnNfdWRmcmV2ID49IDB4MDIwMCkKIAkJCXVkZl9uZXdfdGFnKG5iaC0+Yl9kYXRhLCBUQUdfSURFTlRfQUVELCAzLCAxLAotCQkJCSAgICBlcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0sIHNpemVvZih0YWcpKTsKKwkJCQkgICAgZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtLCBzaXplb2Yoc3RydWN0IHRhZykpOwogCQllbHNlCiAJCQl1ZGZfbmV3X3RhZyhuYmgtPmJfZGF0YSwgVEFHX0lERU5UX0FFRCwgMiwgMSwKLQkJCQkgICAgZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtLCBzaXplb2YodGFnKSk7CisJCQkJICAgIGVwb3MtPmJsb2NrLmxvZ2ljYWxCbG9ja051bSwgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKIAkJc3dpdGNoIChpaW5mby0+aV9hbGxvY190eXBlKSB7CiAJCWNhc2UgSUNCVEFHX0ZMQUdfQURfU0hPUlQ6Ci0JCQlzYWQgPSAoc2hvcnRfYWQgKilzcHRyOworCQkJc2FkID0gKHN0cnVjdCBzaG9ydF9hZCAqKXNwdHI7CiAJCQlzYWQtPmV4dExlbmd0aCA9IGNwdV90b19sZTMyKEVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgfAogCQkJCQkJICAgICBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwogCQkJc2FkLT5leHRQb3NpdGlvbiA9CiAJCQkJY3B1X3RvX2xlMzIoZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtKTsKIAkJCWJyZWFrOwogCQljYXNlIElDQlRBR19GTEFHX0FEX0xPTkc6Ci0JCQlsYWQgPSAobG9uZ19hZCAqKXNwdHI7CisJCQlsYWQgPSAoc3RydWN0IGxvbmdfYWQgKilzcHRyOwogCQkJbGFkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihFWFRfTkVYVF9FWFRFTlRfQUxMT0NERUNTIHwKIAkJCQkJCSAgICAgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKIAkJCWxhZC0+ZXh0TG9jYXRpb24gPSBjcHVfdG9fbGVsYihlcG9zLT5ibG9jayk7CkBAIC0xNzY5LDEyICsxNzc2LDEyIEBACiB9CiAKIGludDhfdCB1ZGZfd3JpdGVfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAotCQkgICAgICBrZXJuZWxfbGJfYWRkciBlbG9jLCB1aW50MzJfdCBlbGVuLCBpbnQgaW5jKQorCQkgICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90IGVsZW4sIGludCBpbmMpCiB7CiAJaW50IGFkc2l6ZTsKIAl1aW50OF90ICpwdHI7Ci0Jc2hvcnRfYWQgKnNhZDsKLQlsb25nX2FkICpsYWQ7CisJc3RydWN0IHNob3J0X2FkICpzYWQ7CisJc3RydWN0IGxvbmdfYWQgKmxhZDsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwogCiAJaWYgKCFlcG9zLT5iaCkKQEAgLTE3ODYsMTcgKzE3OTMsMTcgQEAKIAogCXN3aXRjaCAoaWluZm8tPmlfYWxsb2NfdHlwZSkgewogCWNhc2UgSUNCVEFHX0ZMQUdfQURfU0hPUlQ6Ci0JCXNhZCA9IChzaG9ydF9hZCAqKXB0cjsKKwkJc2FkID0gKHN0cnVjdCBzaG9ydF9hZCAqKXB0cjsKIAkJc2FkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihlbGVuKTsKLQkJc2FkLT5leHRQb3NpdGlvbiA9IGNwdV90b19sZTMyKGVsb2MubG9naWNhbEJsb2NrTnVtKTsKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJc2FkLT5leHRQb3NpdGlvbiA9IGNwdV90b19sZTMyKGVsb2MtPmxvZ2ljYWxCbG9ja051bSk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCQlicmVhazsKIAljYXNlIElDQlRBR19GTEFHX0FEX0xPTkc6Ci0JCWxhZCA9IChsb25nX2FkICopcHRyOworCQlsYWQgPSAoc3RydWN0IGxvbmdfYWQgKilwdHI7CiAJCWxhZC0+ZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoZWxlbik7Ci0JCWxhZC0+ZXh0TG9jYXRpb24gPSBjcHVfdG9fbGVsYihlbG9jKTsKKwkJbGFkLT5leHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKCplbG9jKTsKIAkJbWVtc2V0KGxhZC0+aW1wVXNlLCAweDAwLCBzaXplb2YobGFkLT5pbXBVc2UpKTsKLQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CkBAIC0xODIzLDcgKzE4MzAsNyBAQAogfQogCiBpbnQ4X3QgdWRmX25leHRfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAotCQkgICAgIGtlcm5lbF9sYl9hZGRyICplbG9jLCB1aW50MzJfdCAqZWxlbiwgaW50IGluYykKKwkJICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLCBpbnQgaW5jKQogewogCWludDhfdCBldHlwZTsKIApAQCAtMTgzMyw3ICsxODQwLDcgQEAKIAkJZXBvcy0+YmxvY2sgPSAqZWxvYzsKIAkJZXBvcy0+b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOwogCQlicmVsc2UoZXBvcy0+YmgpOwotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCBlcG9zLT5ibG9jaywgMCk7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsICZlcG9zLT5ibG9jaywgMCk7CiAJCWVwb3MtPmJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLCBibG9jayk7CiAJCWlmICghZXBvcy0+YmgpIHsKIAkJCXVkZl9kZWJ1ZygicmVhZGluZyBibG9jayAlZCBmYWlsZWQhXG4iLCBibG9jayk7CkBAIC0xODQ1LDEzICsxODUyLDEzIEBACiB9CiAKIGludDhfdCB1ZGZfY3VycmVudF9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCi0JCQlrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIGludCBpbmMpCisJCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLCBpbnQgaW5jKQogewogCWludCBhbGVuOwogCWludDhfdCBldHlwZTsKIAl1aW50OF90ICpwdHI7Ci0Jc2hvcnRfYWQgKnNhZDsKLQlsb25nX2FkICpsYWQ7CisJc3RydWN0IHNob3J0X2FkICpzYWQ7CisJc3RydWN0IGxvbmdfYWQgKmxhZDsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwogCiAJaWYgKCFlcG9zLT5iaCkgewpAQCAtMTkwMCw5ICsxOTA3LDkgQEAKIH0KIAogc3RhdGljIGludDhfdCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zLAotCQkJICAgICAga2VybmVsX2xiX2FkZHIgbmVsb2MsIHVpbnQzMl90IG5lbGVuKQorCQkJICAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyIG5lbG9jLCB1aW50MzJfdCBuZWxlbikKIHsKLQlrZXJuZWxfbGJfYWRkciBvZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgb2Vsb2M7CiAJdWludDMyX3Qgb2VsZW47CiAJaW50OF90IGV0eXBlOwogCkBAIC0xOTEwLDE4ICsxOTE3LDE4IEBACiAJCWdldF9iaChlcG9zLmJoKTsKIAogCXdoaWxlICgoZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmZXBvcywgJm9lbG9jLCAmb2VsZW4sIDApKSAhPSAtMSkgewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmVwb3MsIG5lbG9jLCBuZWxlbiwgMSk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmZXBvcywgJm5lbG9jLCBuZWxlbiwgMSk7CiAJCW5lbG9jID0gb2Vsb2M7CiAJCW5lbGVuID0gKGV0eXBlIDw8IDMwKSB8IG9lbGVuOwogCX0KLQl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCBuZWxvYywgbmVsZW4sIDEpOworCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsICZuZWxvYywgbmVsZW4sIDEpOwogCWJyZWxzZShlcG9zLmJoKTsKIAogCXJldHVybiAobmVsZW4gPj4gMzApOwogfQogCiBpbnQ4X3QgdWRmX2RlbGV0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcywKLQkJICAgICAgIGtlcm5lbF9sYl9hZGRyIGVsb2MsIHVpbnQzMl90IGVsZW4pCisJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYywgdWludDMyX3QgZWxlbikKIHsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIG9lcG9zOwogCWludCBhZHNpemU7CkBAIC0xOTM2LDkgKzE5NDMsOSBAQAogCiAJaWluZm8gPSBVREZfSShpbm9kZSk7CiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCWVsc2UgaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCWVsc2UKIAkJYWRzaXplID0gMDsKIApAQCAtMTk0Nyw3ICsxOTU0LDcgQEAKIAkJcmV0dXJuIC0xOwogCiAJd2hpbGUgKChldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEpKSAhPSAtMSkgewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgMSk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmb2Vwb3MsICZlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgMSk7CiAJCWlmIChvZXBvcy5iaCAhPSBlcG9zLmJoKSB7CiAJCQlvZXBvcy5ibG9jayA9IGVwb3MuYmxvY2s7CiAJCQlicmVsc2Uob2Vwb3MuYmgpOwpAQCAtMTk1NiwxMyArMTk2MywxMyBAQAogCQkJb2Vwb3Mub2Zmc2V0ID0gZXBvcy5vZmZzZXQgLSBhZHNpemU7CiAJCX0KIAl9Ci0JbWVtc2V0KCZlbG9jLCAweDAwLCBzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKKwltZW1zZXQoJmVsb2MsIDB4MDAsIHNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTsKIAllbGVuID0gMDsKIAogCWlmIChlcG9zLmJoICE9IG9lcG9zLmJoKSB7Ci0JCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsIGVwb3MuYmxvY2ssIDAsIDEpOwotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CisJCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsICZlcG9zLmJsb2NrLCAwLCAxKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgJmVsb2MsIGVsZW4sIDEpOworCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAJCWlmICghb2Vwb3MuYmgpIHsKIAkJCWlpbmZvLT5pX2xlbkFsbG9jIC09IChhZHNpemUgKiAyKTsKIAkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpAQCAtMTk3OSw3ICsxOTg2LDcgQEAKIAkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKG9lcG9zLmJoLCBpbm9kZSk7CiAJCX0KIAl9IGVsc2UgewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCQlpZiAoIW9lcG9zLmJoKSB7CiAJCQlpaW5mby0+aV9sZW5BbGxvYyAtPSBhZHNpemU7CiAJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKQEAgLTIwMDQsNyArMjAxMSw3IEBACiB9CiAKIGludDhfdCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAotCQkgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywga2VybmVsX2xiX2FkZHIgKmVsb2MsCisJCSAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqcG9zLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsCiAJCSAgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQpCiB7CiAJdW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwpAQCAtMjAzNiw3ICsyMDQzLDcgQEAKIAogbG9uZyB1ZGZfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrKQogewotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAlzZWN0b3JfdCBvZmZzZXQ7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307CkBAIC0yMDQ2LDcgKzIwNTMsNyBAQAogCiAJaWYgKGlub2RlX2JtYXAoaW5vZGUsIGJsb2NrLCAmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSA9PQogCQkJCQkJKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQotCQlyZXQgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKKwkJcmV0ID0gdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsICZlbG9jLCBvZmZzZXQpOwogCWVsc2UKIAkJcmV0ID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvdWRmL21pc2MuYyBiL2ZzL3VkZi9taXNjLmMKaW5kZXggODRiZjBmZC4uOTIxNTcwMCAxMDA2NDQKLS0tIGEvZnMvdWRmL21pc2MuYworKysgYi9mcy91ZGYvbWlzYy5jCkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogCQkJfQogCQl9CiAJCS8qIHJld3JpdGUgQ1JDICsgY2hlY2tzdW0gb2YgZWFoZCAqLwotCQljcmNsZW4gPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpIC0gc2l6ZW9mKHRhZyk7CisJCWNyY2xlbiA9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYykgLSBzaXplb2Yoc3RydWN0IHRhZyk7CiAJCWVhaGQtPmRlc2NUYWcuZGVzY0NSQ0xlbmd0aCA9IGNwdV90b19sZTE2KGNyY2xlbik7CiAJCWVhaGQtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKWVhaGQgKwotCQkJCQkJc2l6ZW9mKHRhZyksIGNyY2xlbikpOworCQkJCQkJc2l6ZW9mKHN0cnVjdCB0YWcpLCBjcmNsZW4pKTsKIAkJZWFoZC0+ZGVzY1RhZy50YWdDaGVja3N1bSA9IHVkZl90YWdfY2hlY2tzdW0oJmVhaGQtPmRlc2NUYWcpOwogCQlpaW5mby0+aV9sZW5FQXR0ciArPSBzaXplOwogCQlyZXR1cm4gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopJmVhW29mZnNldF07CkBAIC0yMDIsNyArMjAyLDcgQEAKIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3JlYWRfdGFnZ2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVpbnQzMl90IGJsb2NrLAogCQkJCSAgICB1aW50MzJfdCBsb2NhdGlvbiwgdWludDE2X3QgKmlkZW50KQogewotCXRhZyAqdGFnX3A7CisJc3RydWN0IHRhZyAqdGFnX3A7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAKIAkvKiBSZWFkIHRoZSBibG9jayAqLwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXRhZ19wID0gKHRhZyAqKShiaC0+Yl9kYXRhKTsKKwl0YWdfcCA9IChzdHJ1Y3QgdGFnICopKGJoLT5iX2RhdGEpOwogCiAJKmlkZW50ID0gbGUxNl90b19jcHUodGFnX3AtPnRhZ0lkZW50KTsKIApAQCAtMjQxLDkgKzI0MSw5IEBACiAJfQogCiAJLyogVmVyaWZ5IHRoZSBkZXNjcmlwdG9yIENSQyAqLwotCWlmIChsZTE2X3RvX2NwdSh0YWdfcC0+ZGVzY0NSQ0xlbmd0aCkgKyBzaXplb2YodGFnKSA+IHNiLT5zX2Jsb2Nrc2l6ZSB8fAorCWlmIChsZTE2X3RvX2NwdSh0YWdfcC0+ZGVzY0NSQ0xlbmd0aCkgKyBzaXplb2Yoc3RydWN0IHRhZykgPiBzYi0+c19ibG9ja3NpemUgfHwKIAkgICAgbGUxNl90b19jcHUodGFnX3AtPmRlc2NDUkMpID09IGNyY19pdHVfdCgwLAotCQkJCQliaC0+Yl9kYXRhICsgc2l6ZW9mKHRhZyksCisJCQkJCWJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IHRhZyksCiAJCQkJCWxlMTZfdG9fY3B1KHRhZ19wLT5kZXNjQ1JDTGVuZ3RoKSkpCiAJCXJldHVybiBiaDsKIApAQCAtMjU1LDI3ICsyNTUsMjggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfcmVhZF9wdGFnZ2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGtlcm5lbF9sYl9hZGRyIGxvYywKK3N0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3JlYWRfcHRhZ2dlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpsb2MsCiAJCQkJICAgICB1aW50MzJfdCBvZmZzZXQsIHVpbnQxNl90ICppZGVudCkKIHsKIAlyZXR1cm4gdWRmX3JlYWRfdGFnZ2VkKHNiLCB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgbG9jLCBvZmZzZXQpLAotCQkJICAgICAgIGxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQsIGlkZW50KTsKKwkJCSAgICAgICBsb2MtPmxvZ2ljYWxCbG9ja051bSArIG9mZnNldCwgaWRlbnQpOwogfQogCiB2b2lkIHVkZl91cGRhdGVfdGFnKGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCiB7Ci0JdGFnICp0cHRyID0gKHRhZyAqKWRhdGE7Ci0JbGVuZ3RoIC09IHNpemVvZih0YWcpOworCXN0cnVjdCB0YWcgKnRwdHIgPSAoc3RydWN0IHRhZyAqKWRhdGE7CisJbGVuZ3RoIC09IHNpemVvZihzdHJ1Y3QgdGFnKTsKIAogCXRwdHItPmRlc2NDUkNMZW5ndGggPSBjcHVfdG9fbGUxNihsZW5ndGgpOwotCXRwdHItPmRlc2NDUkMgPSBjcHVfdG9fbGUxNihjcmNfaXR1X3QoMCwgZGF0YSArIHNpemVvZih0YWcpLCBsZW5ndGgpKTsKKwl0cHRyLT5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoY3JjX2l0dV90KDAsIGRhdGEgKyBzaXplb2Yoc3RydWN0IHRhZyksIGxlbmd0aCkpOwogCXRwdHItPnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bSh0cHRyKTsKIH0KIAogdm9pZCB1ZGZfbmV3X3RhZyhjaGFyICpkYXRhLCB1aW50MTZfdCBpZGVudCwgdWludDE2X3QgdmVyc2lvbiwgdWludDE2X3Qgc251bSwKIAkJIHVpbnQzMl90IGxvYywgaW50IGxlbmd0aCkKIHsKLQl0YWcgKnRwdHIgPSAodGFnICopZGF0YTsKKwlzdHJ1Y3QgdGFnICp0cHRyID0gKHN0cnVjdCB0YWcgKilkYXRhOwogCXRwdHItPnRhZ0lkZW50ID0gY3B1X3RvX2xlMTYoaWRlbnQpOwogCXRwdHItPmRlc2NWZXJzaW9uID0gY3B1X3RvX2xlMTYodmVyc2lvbik7CiAJdHB0ci0+dGFnU2VyaWFsTnVtID0gY3B1X3RvX2xlMTYoc251bSk7CkBAIC0yODMsMTIgKzI4NCwxMiBAQAogCXVkZl91cGRhdGVfdGFnKGRhdGEsIGxlbmd0aCk7CiB9CiAKLXU4IHVkZl90YWdfY2hlY2tzdW0oY29uc3QgdGFnICp0KQordTggdWRmX3RhZ19jaGVja3N1bShjb25zdCBzdHJ1Y3QgdGFnICp0KQogewogCXU4ICpkYXRhID0gKHU4ICopdDsKIAl1OCBjaGVja3N1bSA9IDA7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZih0YWcpOyArK2kpCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdGFnKTsgKytpKQogCQlpZiAoaSAhPSA0KSAvKiBwb3NpdGlvbiBvZiBjaGVja3N1bSAqLwogCQkJY2hlY2tzdW0gKz0gZGF0YVtpXTsKIAlyZXR1cm4gY2hlY2tzdW07CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IGY4NGJmYWEuLjZhMjlmYTMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCisrKyBiL2ZzL3VkZi9uYW1laS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJCSBzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqc2ZpLCBzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCAqZmliaCwKIAkJIHVpbnQ4X3QgKmltcHVzZSwgdWludDhfdCAqZmlsZWlkZW50KQogewotCXVpbnQxNl90IGNyY2xlbiA9IGZpYmgtPmVvZmZzZXQgLSBmaWJoLT5zb2Zmc2V0IC0gc2l6ZW9mKHRhZyk7CisJdWludDE2X3QgY3JjbGVuID0gZmliaC0+ZW9mZnNldCAtIGZpYmgtPnNvZmZzZXQgLSBzaXplb2Yoc3RydWN0IHRhZyk7CiAJdWludDE2X3QgY3JjOwogCWludCBvZmZzZXQ7CiAJdWludDE2X3QgbGl1ID0gbGUxNl90b19jcHUoY2ZpLT5sZW5ndGhPZkltcFVzZSk7CkBAIC05OSwxOCArOTksMTggQEAKIAkJbWVtc2V0KGZpYmgtPmViaC0+Yl9kYXRhLCAweDAwLCBwYWRsZW4gKyBvZmZzZXQpOwogCX0KIAotCWNyYyA9IGNyY19pdHVfdCgwLCAodWludDhfdCAqKWNmaSArIHNpemVvZih0YWcpLAotCQkgICAgICBzaXplb2Yoc3RydWN0IGZpbGVJZGVudERlc2MpIC0gc2l6ZW9mKHRhZykpOworCWNyYyA9IGNyY19pdHVfdCgwLCAodWludDhfdCAqKWNmaSArIHNpemVvZihzdHJ1Y3QgdGFnKSwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBmaWxlSWRlbnREZXNjKSAtIHNpemVvZihzdHJ1Y3QgdGFnKSk7CiAKIAlpZiAoZmliaC0+c2JoID09IGZpYmgtPmViaCkgewogCQljcmMgPSBjcmNfaXR1X3QoY3JjLCAodWludDhfdCAqKXNmaS0+aW1wVXNlLAotCQkJICAgICAgY3JjbGVuICsgc2l6ZW9mKHRhZykgLQorCQkJICAgICAgY3JjbGVuICsgc2l6ZW9mKHN0cnVjdCB0YWcpIC0KIAkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmlsZUlkZW50RGVzYykpOwogCX0gZWxzZSBpZiAoc2l6ZW9mKHN0cnVjdCBmaWxlSWRlbnREZXNjKSA+PSAtZmliaC0+c29mZnNldCkgewogCQljcmMgPSBjcmNfaXR1X3QoY3JjLCBmaWJoLT5lYmgtPmJfZGF0YSArCiAJCQkJCXNpemVvZihzdHJ1Y3QgZmlsZUlkZW50RGVzYykgKwogCQkJCQlmaWJoLT5zb2Zmc2V0LAotCQkJICAgICAgY3JjbGVuICsgc2l6ZW9mKHRhZykgLQorCQkJICAgICAgY3JjbGVuICsgc2l6ZW9mKHN0cnVjdCB0YWcpIC0KIAkJCQkJc2l6ZW9mKHN0cnVjdCBmaWxlSWRlbnREZXNjKSk7CiAJfSBlbHNlIHsKIAkJY3JjID0gY3JjX2l0dV90KGNyYywgKHVpbnQ4X3QgKilzZmktPmltcFVzZSwKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXVpbnQ4X3QgbGZpOwogCXVpbnQxNl90IGxpdTsKIAlsb2ZmX3Qgc2l6ZTsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXVpbnQzMl90IGVsZW47CiAJc2VjdG9yX3Qgb2Zmc2V0OwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHt9OwpAQCAtMTcxLDEyICsxNzEsMTIgQEAKIAkJaWYgKGlub2RlX2JtYXAoZGlyLCBmX3BvcyA+PiBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMsICZlcG9zLAogCQkgICAgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSAhPSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCiAJCQlnb3RvIG91dF9lcnI7Ci0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQpOworCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCk7CiAJCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pIHsKIAkJCWlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCQllbHNlIGlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJCX0gZWxzZQogCQkJb2Zmc2V0ID0gMDsKIApAQCAtMjY4LDcgKzI2OCw3IEBACiAjaWZkZWYgVURGX1JFQ09WRVJZCiAJLyogdGVtcG9yYXJ5IHNob3J0aGFuZCBmb3Igc3BlY2lmeWluZyBmaWxlcyBieSBpbm9kZSBudW1iZXIgKi8KIAlpZiAoIXN0cm5jbXAoZGVudHJ5LT5kX25hbWUubmFtZSwgIi5CPSIsIDMpKSB7Ci0JCWtlcm5lbF9sYl9hZGRyIGxiID0geworCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbGIgPSB7CiAJCQkubG9naWNhbEJsb2NrTnVtID0gMCwKIAkJCS5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPQogCQkJCXNpbXBsZV9zdHJ0b3VsKGRlbnRyeS0+ZF9uYW1lLm5hbWUgKyAzLApAQCAtMjgzLDExICsyODMsMTQgQEAKICNlbmRpZiAvKiBVREZfUkVDT1ZFUlkgKi8KIAogCWlmICh1ZGZfZmluZF9lbnRyeShkaXIsICZkZW50cnktPmRfbmFtZSwgJmZpYmgsICZjZmkpKSB7CisJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsb2M7CisKIAkJaWYgKGZpYmguc2JoICE9IGZpYmguZWJoKQogCQkJYnJlbHNlKGZpYmguZWJoKTsKIAkJYnJlbHNlKGZpYmguc2JoKTsKIAotCQlpbm9kZSA9IHVkZl9pZ2V0KGRpci0+aV9zYiwgbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbikpOworCQlsb2MgPSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKTsKKwkJaW5vZGUgPSB1ZGZfaWdldChkaXItPmlfc2IsICZsb2MpOwogCQlpZiAoIWlub2RlKSB7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKQEAgLTMxMyw3ICszMTYsNyBAQAogCXVpbnQ4X3QgbGZpOwogCXVpbnQxNl90IGxpdTsKIAlpbnQgYmxvY2s7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAl1aW50MzJfdCBlbGVuID0gMDsKIAlzZWN0b3JfdCBvZmZzZXQ7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307CkBAIC0zNTEsMTYgKzM1NCwxNiBAQAogCQlpZiAoaW5vZGVfYm1hcChkaXIsIGZfcG9zID4+IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cywgJmVwb3MsCiAJCSAgICAmZWxvYywgJmVsZW4sICZvZmZzZXQpICE9IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgewogCQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsCi0JCQkJCWRpbmZvLT5pX2xvY2F0aW9uLCAwKTsKKwkJCQkJJmRpbmZvLT5pX2xvY2F0aW9uLCAwKTsKIAkJCWZpYmgtPnNvZmZzZXQgPSBmaWJoLT5lb2Zmc2V0ID0gc2ItPnNfYmxvY2tzaXplOwogCQkJZ290byBhZGQ7CiAJCX0KLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsIG9mZnNldCk7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmZWxvYywgb2Zmc2V0KTsKIAkJaWYgKCgrK29mZnNldCA8PCBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgZWxlbikgewogCQkJaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAkJCWVsc2UgaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJCQllcG9zLm9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAkJfSBlbHNlCiAJCQlvZmZzZXQgPSAwOwogCkBAIC00MDksMTAgKzQxMiwxMCBAQAogCWlmIChkaW5mby0+aV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiAmJiBlbGVuKSB7CiAJCWVsZW4gPSAoZWxlbiArIHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpICYgfihzYi0+c19ibG9ja3NpemUgLSAxKTsKIAkJaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc2hvcnRfYWQpOworCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCWVsc2UgaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKLQkJdWRmX3dyaXRlX2FleHQoZGlyLCAmZXBvcywgZWxvYywgZWxlbiwgMSk7CisJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOworCQl1ZGZfd3JpdGVfYWV4dChkaXIsICZlcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAJfQogCWZfcG9zICs9IG5maWRsZW47CiAKQEAgLTQ5NCwxMCArNDk3LDEwIEBACiAJbWVtc2V0KGNmaSwgMCwgc2l6ZW9mKHN0cnVjdCBmaWxlSWRlbnREZXNjKSk7CiAJaWYgKFVERl9TQihzYiktPnNfdWRmcmV2ID49IDB4MDIwMCkKIAkJdWRmX25ld190YWcoKGNoYXIgKiljZmksIFRBR19JREVOVF9GSUQsIDMsIDEsIGJsb2NrLAotCQkJICAgIHNpemVvZih0YWcpKTsKKwkJCSAgICBzaXplb2Yoc3RydWN0IHRhZykpOwogCWVsc2UKIAkJdWRmX25ld190YWcoKGNoYXIgKiljZmksIFRBR19JREVOVF9GSUQsIDIsIDEsIGJsb2NrLAotCQkJICAgIHNpemVvZih0YWcpKTsKKwkJCSAgICBzaXplb2Yoc3RydWN0IHRhZykpOwogCWNmaS0+ZmlsZVZlcnNpb25OdW0gPSBjcHVfdG9fbGUxNigxKTsKIAljZmktPmxlbmd0aEZpbGVJZGVudCA9IG5hbWVsZW47CiAJY2ZpLT5sZW5ndGhPZkltcFVzZSA9IGNwdV90b19sZTE2KDApOwpAQCAtNTMwLDcgKzUzMyw3IEBACiAJY2ZpLT5maWxlQ2hhcmFjdGVyaXN0aWNzIHw9IEZJRF9GSUxFX0NIQVJfREVMRVRFRDsKIAogCWlmIChVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSkKLQkJbWVtc2V0KCYoY2ZpLT5pY2IpLCAweDAwLCBzaXplb2YobG9uZ19hZCkpOworCQltZW1zZXQoJihjZmktPmljYiksIDB4MDAsIHNpemVvZihzdHJ1Y3QgbG9uZ19hZCkpOwogCiAJcmV0dXJuIHVkZl93cml0ZV9maShpbm9kZSwgY2ZpLCBmaSwgZmliaCwgTlVMTCwgTlVMTCk7CiB9CkBAIC03MTAsNyArNzEzLDcgQEAKIAlsb2ZmX3QgZl9wb3M7CiAJbG9mZl90IHNpemUgPSB1ZGZfZXh0MF9vZmZzZXQoZGlyKSArIGRpci0+aV9zaXplOwogCWludCBibG9jazsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXVpbnQzMl90IGVsZW47CiAJc2VjdG9yX3Qgb2Zmc2V0OwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHt9OwpAQCAtNzI0LDEyICs3MjcsMTIgQEAKIAllbHNlIGlmIChpbm9kZV9ibWFwKGRpciwgZl9wb3MgPj4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzLAogCQkJICAgICAgJmVwb3MsICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgPT0KIAkJCQkJKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKSB7Ci0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQpOworCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCk7CiAJCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pIHsKIAkJCWlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCQllbHNlIGlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJCX0gZWxzZQogCQkJb2Zmc2V0ID0gMDsKIApAQCAtNzc4LDcgKzc4MSw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCBmaWJoOwogCXN0cnVjdCBmaWxlSWRlbnREZXNjICpmaSwgY2ZpOwotCWtlcm5lbF9sYl9hZGRyIHRsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRsb2M7CiAKIAlyZXR2YWwgPSAtRU5PRU5UOwogCWxvY2tfa2VybmVsKCk7CkBAIC03ODgsNyArNzkxLDcgQEAKIAogCXJldHZhbCA9IC1FSU87CiAJdGxvYyA9IGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pOwotCWlmICh1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIHRsb2MsIDApICE9IGlub2RlLT5pX2lubykKKwlpZiAodWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmdGxvYywgMCkgIT0gaW5vZGUtPmlfaW5vKQogCQlnb3RvIGVuZF9ybWRpcjsKIAlyZXR2YWwgPSAtRU5PVEVNUFRZOwogCWlmICghZW1wdHlfZGlyKGlub2RlKSkKQEAgLTgyNCw3ICs4MjcsNyBAQAogCXN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoIGZpYmg7CiAJc3RydWN0IGZpbGVJZGVudERlc2MgKmZpOwogCXN0cnVjdCBmaWxlSWRlbnREZXNjIGNmaTsKLQlrZXJuZWxfbGJfYWRkciB0bG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciB0bG9jOwogCiAJcmV0dmFsID0gLUVOT0VOVDsKIAlsb2NrX2tlcm5lbCgpOwpAQCAtODM0LDcgKzgzNyw3IEBACiAKIAlyZXR2YWwgPSAtRUlPOwogCXRsb2MgPSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKTsKLQlpZiAodWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCB0bG9jLCAwKSAhPSBpbm9kZS0+aV9pbm8pCisJaWYgKHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJnRsb2MsIDApICE9IGlub2RlLT5pX2lubykKIAkJZ290byBlbmRfdW5saW5rOwogCiAJaWYgKCFpbm9kZS0+aV9ubGluaykgewpAQCAtODk3LDcgKzkwMCw3IEBACiAJaW5vZGUtPmlfb3AgPSAmcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSAhPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpIHsKLQkJa2VybmVsX2xiX2FkZHIgZWxvYzsKKwkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJCXVpbnQzMl90IGJzaXplOwogCiAJCWJsb2NrID0gdWRmX25ld19ibG9jayhpbm9kZS0+aV9zYiwgaW5vZGUsCkBAIC05MTMsNyArOTE2LDcgQEAKIAkJCQlpaW5mby0+aV9sb2NhdGlvbi5wYXJ0aXRpb25SZWZlcmVuY2VOdW07CiAJCWJzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwogCQlpaW5mby0+aV9sZW5FeHRlbnRzID0gYnNpemU7Ci0JCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsIGVsb2MsIGJzaXplLCAwKTsKKwkJdWRmX2FkZF9hZXh0KGlub2RlLCAmZXBvcywgJmVsb2MsIGJzaXplLCAwKTsKIAkJYnJlbHNlKGVwb3MuYmgpOwogCiAJCWJsb2NrID0gdWRmX2dldF9wYmxvY2soaW5vZGUtPmlfc2IsIGJsb2NrLApAQCAtMTEwOCw3ICsxMTExLDcgQEAKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyBvY2ZpLCBuY2ZpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDsKIAlpbnQgcmV0dmFsID0gLUVOT0VOVDsKLQlrZXJuZWxfbGJfYWRkciB0bG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciB0bG9jOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqb2xkX2lpbmZvID0gVURGX0kob2xkX2lub2RlKTsKIAogCWxvY2tfa2VybmVsKCk7CkBAIC0xMTE5LDcgKzExMjIsNyBAQAogCQlicmVsc2Uob2ZpYmguc2JoKTsKIAl9CiAJdGxvYyA9IGxlbGJfdG9fY3B1KG9jZmkuaWNiLmV4dExvY2F0aW9uKTsKLQlpZiAoIW9maSB8fCB1ZGZfZ2V0X2xiX3BibG9jayhvbGRfZGlyLT5pX3NiLCB0bG9jLCAwKQorCWlmICghb2ZpIHx8IHVkZl9nZXRfbGJfcGJsb2NrKG9sZF9kaXItPmlfc2IsICZ0bG9jLCAwKQogCSAgICAhPSBvbGRfaW5vZGUtPmlfaW5vKQogCQlnb3RvIGVuZF9yZW5hbWU7CiAKQEAgLTExNTgsNyArMTE2MSw3IEBACiAJCWlmICghZGlyX2ZpKQogCQkJZ290byBlbmRfcmVuYW1lOwogCQl0bG9jID0gbGVsYl90b19jcHUoZGlyX2ZpLT5pY2IuZXh0TG9jYXRpb24pOwotCQlpZiAodWRmX2dldF9sYl9wYmxvY2sob2xkX2lub2RlLT5pX3NiLCB0bG9jLCAwKSAhPQorCQlpZiAodWRmX2dldF9sYl9wYmxvY2sob2xkX2lub2RlLT5pX3NiLCAmdGxvYywgMCkgIT0KIAkJCQlvbGRfZGlyLT5pX2lubykKIAkJCWdvdG8gZW5kX3JlbmFtZTsKIApAQCAtMTE4Nyw3ICsxMTkwLDcgQEAKIAkgKi8KIAluY2ZpLmZpbGVWZXJzaW9uTnVtID0gb2NmaS5maWxlVmVyc2lvbk51bTsKIAluY2ZpLmZpbGVDaGFyYWN0ZXJpc3RpY3MgPSBvY2ZpLmZpbGVDaGFyYWN0ZXJpc3RpY3M7Ci0JbWVtY3B5KCYobmNmaS5pY2IpLCAmKG9jZmkuaWNiKSwgc2l6ZW9mKGxvbmdfYWQpKTsKKwltZW1jcHkoJihuY2ZpLmljYiksICYob2NmaS5pY2IpLCBzaXplb2Yoc3RydWN0IGxvbmdfYWQpKTsKIAl1ZGZfd3JpdGVfZmkobmV3X2RpciwgJm5jZmksIG5maSwgJm5maWJoLCBOVUxMLCBOVUxMKTsKIAogCS8qIFRoZSBvbGQgZmlkIG1heSBoYXZlIG1vdmVkIC0gZmluZCBpdCBhZ2FpbiAqLwpAQCAtMTI0Miw2ICsxMjQ1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnVkZl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQogeworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciB0bG9jOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCBxc3RyIGRvdGRvdCA9IHsubmFtZSA9ICIuLiIsIC5sZW4gPSAyfTsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyBjZmk7CkBAIC0xMjU1LDggKzEyNTksOCBAQAogCQlicmVsc2UoZmliaC5lYmgpOwogCWJyZWxzZShmaWJoLnNiaCk7CiAKLQlpbm9kZSA9IHVkZl9pZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLAotCQkJIGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pKTsKKwl0bG9jID0gbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbik7CisJaW5vZGUgPSB1ZGZfaWdldChjaGlsZC0+ZF9pbm9kZS0+aV9zYiwgJnRsb2MpOwogCWlmICghaW5vZGUpCiAJCWdvdG8gb3V0X3VubG9jazsKIAl1bmxvY2tfa2VybmVsKCk7CkBAIC0xMjcyLDE0ICsxMjc2LDE0IEBACiAJCQkJCXUxNiBwYXJ0cmVmLCBfX3UzMiBnZW5lcmF0aW9uKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Ja2VybmVsX2xiX2FkZHIgbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsb2M7CiAKIAlpZiAoYmxvY2sgPT0gMCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CiAKIAlsb2MubG9naWNhbEJsb2NrTnVtID0gYmxvY2s7CiAJbG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IHBhcnRyZWY7Ci0JaW5vZGUgPSB1ZGZfaWdldChzYiwgbG9jKTsKKwlpbm9kZSA9IHVkZl9pZ2V0KHNiLCAmbG9jKTsKIAogCWlmIChpbm9kZSA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTEzMTgsNyArMTMyMiw3IEBACiB7CiAJaW50IGxlbiA9ICpsZW5wOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAgZGUtPmRfaW5vZGU7Ci0Ja2VybmVsX2xiX2FkZHIgbG9jYXRpb24gPSBVREZfSShpbm9kZSktPmlfbG9jYXRpb247CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvY2F0aW9uID0gVURGX0koaW5vZGUpLT5pX2xvY2F0aW9uOwogCXN0cnVjdCBmaWQgKmZpZCA9IChzdHJ1Y3QgZmlkICopZmg7CiAJaW50IHR5cGUgPSBGSUxFSURfVURGX1dJVEhPVVRfUEFSRU5UOwogCmRpZmYgLS1naXQgYS9mcy91ZGYvb3N0YV91ZGYuaCBiL2ZzL3VkZi9vc3RhX3VkZi5oCmluZGV4IDY1ZmY0NzkuLmZiZmY3NDYgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9vc3RhX3VkZi5oCisrKyBiL2ZzL3VkZi9vc3RhX3VkZi5oCkBAIC04NSw3ICs4NSw3IEBACiAvKiBMb2dpY2FsIFZvbHVtZSBJbnRlZ3JpdHkgRGVzY3JpcHRvciAoVURGIDIuNTAgMi4yLjYpICovCiAvKiBJbXBsZW1lbnRhdGlvbiBVc2UgKFVERiAyLjUwIDIuMi42LjQpICovCiBzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2NJbXBVc2UgewotCXJlZ2lkCQlpbXBJZGVudDsKKwlzdHJ1Y3QgcmVnaWQJaW1wSWRlbnQ7CiAJX19sZTMyCQludW1GaWxlczsKIAlfX2xlMzIJCW51bURpcnM7CiAJX19sZTE2CQltaW5VREZSZWFkUmV2OwpAQCAtOTcsMTIgKzk3LDEyIEBACiAvKiBJbXBsZW1lbnRhdGlvbiBVc2UgVm9sdW1lIERlc2NyaXB0b3IgKFVERiAyLjUwIDIuMi43KSAqLwogLyogSW1wbGVtZW50YXRpb24gVXNlIChVREYgMi41MCAyLjIuNy4yKSAqLwogc3RydWN0IGltcFVzZVZvbERlc2NJbXBVc2UgewotCWNoYXJzcGVjCUxWSUNoYXJzZXQ7CisJc3RydWN0IGNoYXJzcGVjCUxWSUNoYXJzZXQ7CiAJZHN0cmluZwkJbG9naWNhbFZvbElkZW50WzEyOF07CiAJZHN0cmluZwkJTFZJbmZvMVszNl07CiAJZHN0cmluZwkJTFZJbmZvMlszNl07CiAJZHN0cmluZwkJTFZJbmZvM1szNl07Ci0JcmVnaWQJCWltcElkZW50OworCXN0cnVjdCByZWdpZAlpbXBJZGVudDsKIAl1aW50OF90CQlpbXBVc2VbMTI4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0xMTAsNyArMTEwLDcgQEAKIAl1aW50OF90CQlwYXJ0aXRpb25NYXBUeXBlOwogCXVpbnQ4X3QJCXBhcnRpdGlvbk1hcExlbmd0aDsKIAl1aW50OF90CQlyZXNlcnZlZDFbMl07Ci0JcmVnaWQJCXBhcnRJZGVudDsKKwlzdHJ1Y3QgcmVnaWQJcGFydElkZW50OwogCV9fbGUxNgkJdm9sU2VxTnVtOwogCV9fbGUxNgkJcGFydGl0aW9uTnVtOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAl1aW50OF90CQlwYXJ0aXRpb25NYXBUeXBlOwogCXVpbnQ4X3QJCXBhcnRpdGlvbk1hcExlbmd0aDsKIAl1aW50OF90CQlyZXNlcnZlZDFbMl07Ci0JcmVnaWQJCXBhcnRJZGVudDsKKwlzdHJ1Y3QgcmVnaWQJcGFydElkZW50OwogCV9fbGUxNgkJdm9sU2VxTnVtOwogCV9fbGUxNgkJcGFydGl0aW9uTnVtOwogCXVpbnQ4X3QJCXJlc2VydmVkMlsyNF07CkBAIC0xMzEsNyArMTMxLDcgQEAKIAl1aW50OF90IHBhcnRpdGlvbk1hcFR5cGU7CiAJdWludDhfdCBwYXJ0aXRpb25NYXBMZW5ndGg7CiAJdWludDhfdCByZXNlcnZlZDFbMl07Ci0JcmVnaWQgcGFydElkZW50OworCXN0cnVjdCByZWdpZCBwYXJ0SWRlbnQ7CiAJX19sZTE2IHZvbFNlcU51bTsKIAlfX2xlMTYgcGFydGl0aW9uTnVtOwogCV9fbGUxNiBwYWNrZXRMZW5ndGg7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAl1aW50OF90CQlwYXJ0aXRpb25NYXBUeXBlOwogCXVpbnQ4X3QJCXBhcnRpdGlvbk1hcExlbmd0aDsKIAl1aW50OF90CQlyZXNlcnZlZDFbMl07Ci0JcmVnaWQJCXBhcnRJZGVudDsKKwlzdHJ1Y3QgcmVnaWQJcGFydElkZW50OwogCV9fbGUxNgkJdm9sU2VxTnVtOwogCV9fbGUxNgkJcGFydGl0aW9uTnVtOwogCV9fbGUzMgkJbWV0YWRhdGFGaWxlTG9jOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAvKiBWaXJ0dWFsIEFsbG9jYXRpb24gVGFibGUgKFVERiAxLjUgMi4yLjEwKSAqLwogc3RydWN0IHZpcnR1YWxBbGxvY2F0aW9uVGFibGUxNSB7CiAJX19sZTMyCQlWaXJ0dWFsU2VjdG9yWzBdOwotCXJlZ2lkCQl2YXRJZGVudDsKKwlzdHJ1Y3QgcmVnaWQJdmF0SWRlbnQ7CiAJX19sZTMyCQlwcmV2aW91c1ZBVElDQkxvYzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0xOTIsOCArMTkyLDggQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3Qgc3BhcmluZ1RhYmxlIHsKLQl0YWcgCQlkZXNjVGFnOwotCXJlZ2lkCQlzcGFyaW5nSWRlbnQ7CisJc3RydWN0IHRhZwlkZXNjVGFnOworCXN0cnVjdCByZWdpZAlzcGFyaW5nSWRlbnQ7CiAJX19sZTE2CQlyZWFsbG9jYXRpb25UYWJsZUxlbjsKIAlfX2xlMTYJCXJlc2VydmVkOwogCV9fbGUzMgkJc2VxdWVuY2VOdW07CkBAIC0yMDYsNyArMjA2LDcgQEAKICNkZWZpbmUgSUNCVEFHX0ZJTEVfVFlQRV9NSVJST1IJCTB4RkIKICNkZWZpbmUgSUNCVEFHX0ZJTEVfVFlQRV9CSVRNQVAJCTB4RkMKIAotLyogc3RydWN0IGxvbmdfYWQgSUNCIC0gQURJbXBVc2UgKFVERiAyLjUwIDIuMi40LjMpICovCisvKiBzdHJ1Y3Qgc3RydWN0IGxvbmdfYWQgSUNCIC0gQURJbXBVc2UgKFVERiAyLjUwIDIuMi40LjMpICovCiBzdHJ1Y3QgYWxsb2NEZXNjSW1wVXNlIHsKIAlfX2xlMTYJCWZsYWdzOwogCXVpbnQ4X3QJCWltcFVzZVs0XTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9wYXJ0aXRpb24uYyBiL2ZzL3VkZi9wYXJ0aXRpb24uYwppbmRleCA5NmRmZDIwLi40YjU0MGVlIDEwMDY0NAotLS0gYS9mcy91ZGYvcGFydGl0aW9uLmMKKysrIGIvZnMvdWRmL3BhcnRpdGlvbi5jCkBAIC0yNzMsNyArMjczLDcgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IHVkZl9wYXJ0X21hcCAqbWFwOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAlzZWN0b3JfdCBleHRfb2Zmc2V0OwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHt9OwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCBlMjVlNzAxLi43MjM0OGNjIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYworKysgYi9mcy91ZGYvc3VwZXIuYwpAQCAtODEsMTYgKzgxLDEzIEBACiAvKiBUaGVzZSBhcmUgdGhlICJtZWF0IiAtIGV2ZXJ5dGhpbmcgZWxzZSBpcyBzdHVmZmluZyAqLwogc3RhdGljIGludCB1ZGZfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqLCBpbnQpOwogc3RhdGljIHZvaWQgdWRmX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci1zdGF0aWMgdm9pZCB1ZGZfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOworc3RhdGljIGludCB1ZGZfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKIHN0YXRpYyBpbnQgdWRmX3JlbW91bnRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICopOwotc3RhdGljIGludCB1ZGZfY2hlY2tfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50KTsKLXN0YXRpYyBpbnQgdWRmX3ZycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc2lsZW50KTsKLXN0YXRpYyB2b2lkIHVkZl9sb2FkX2xvZ2ljYWx2b2xpbnQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGtlcm5lbF9leHRlbnRfYWQpOwotc3RhdGljIHZvaWQgdWRmX2ZpbmRfYW5jaG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLXN0YXRpYyBpbnQgdWRmX2ZpbmRfZmlsZXNldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwga2VybmVsX2xiX2FkZHIgKiwKLQkJCSAgICBrZXJuZWxfbGJfYWRkciAqKTsKK3N0YXRpYyB2b2lkIHVkZl9sb2FkX2xvZ2ljYWx2b2xpbnQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfZXh0ZW50X2FkKTsKK3N0YXRpYyBpbnQgdWRmX2ZpbmRfZmlsZXNldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosCisJCQkgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICopOwogc3RhdGljIHZvaWQgdWRmX2xvYWRfZmlsZXNldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgICAgIGtlcm5lbF9sYl9hZGRyICopOworCQkJICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKik7CiBzdGF0aWMgdm9pZCB1ZGZfb3Blbl9sdmlkKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHN0YXRpYyB2b2lkIHVkZl9jbG9zZV9sdmlkKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWRmX2NvdW50X2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpAQCAtMTgxLDcgKzE3OCw3IEBACiAJLmRlbGV0ZV9pbm9kZQk9IHVkZl9kZWxldGVfaW5vZGUsCiAJLmNsZWFyX2lub2RlCT0gdWRmX2NsZWFyX2lub2RlLAogCS5wdXRfc3VwZXIJPSB1ZGZfcHV0X3N1cGVyLAotCS53cml0ZV9zdXBlcgk9IHVkZl93cml0ZV9zdXBlciwKKwkuc3luY19mcwk9IHVkZl9zeW5jX2ZzLAogCS5zdGF0ZnMJCT0gdWRmX3N0YXRmcywKIAkucmVtb3VudF9mcwk9IHVkZl9yZW1vdW50X2ZzLAogCS5zaG93X29wdGlvbnMJPSB1ZGZfc2hvd19vcHRpb25zLApAQCAtMjAxLDYgKzE5OCw4IEBACiAJbW9kZV90IHVtYXNrOwogCWdpZF90IGdpZDsKIAl1aWRfdCB1aWQ7CisJbW9kZV90IGZtb2RlOworCW1vZGVfdCBkbW9kZTsKIAlzdHJ1Y3QgbmxzX3RhYmxlICpubHNfbWFwOwogfTsKIApAQCAtMjU4LDcgKzI1Nyw3IEBACiAKIAlpZiAoIVVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19TVFJJQ1QpKQogCQlzZXFfcHV0cyhzZXEsICIsbm9zdHJpY3QiKTsKLQlpZiAoc2ItPnNfYmxvY2tzaXplICE9IFVERl9ERUZBVUxUX0JMT0NLU0laRSkKKwlpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX0JMT0NLU0laRV9TRVQpKQogCQlzZXFfcHJpbnRmKHNlcSwgIixicz0lbHUiLCBzYi0+c19ibG9ja3NpemUpOwogCWlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfVU5ISURFKSkKIAkJc2VxX3B1dHMoc2VxLCAiLHVuaGlkZSIpOwpAQCAtMjgyLDE4ICsyODEsMTYgQEAKIAkJc2VxX3ByaW50ZihzZXEsICIsZ2lkPSV1Iiwgc2JpLT5zX2dpZCk7CiAJaWYgKHNiaS0+c191bWFzayAhPSAwKQogCQlzZXFfcHJpbnRmKHNlcSwgIix1bWFzaz0lbyIsIHNiaS0+c191bWFzayk7CisJaWYgKHNiaS0+c19mbW9kZSAhPSBVREZfSU5WQUxJRF9NT0RFKQorCQlzZXFfcHJpbnRmKHNlcSwgIixtb2RlPSVvIiwgc2JpLT5zX2Ztb2RlKTsKKwlpZiAoc2JpLT5zX2Rtb2RlICE9IFVERl9JTlZBTElEX01PREUpCisJCXNlcV9wcmludGYoc2VxLCAiLGRtb2RlPSVvIiwgc2JpLT5zX2Rtb2RlKTsKIAlpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1NFU1NJT05fU0VUKSkKIAkJc2VxX3ByaW50ZihzZXEsICIsc2Vzc2lvbj0ldSIsIHNiaS0+c19zZXNzaW9uKTsKIAlpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX0xBU1RCTE9DS19TRVQpKQogCQlzZXFfcHJpbnRmKHNlcSwgIixsYXN0YmxvY2s9JXUiLCBzYmktPnNfbGFzdF9ibG9jayk7Ci0JLyoKLQkgKiBzX2FuY2hvclsyXSBjb3VsZCBiZSB6ZXJvZWQgb3V0IGluIGNhc2UgdGhlcmUgaXMgbm8gYW5jaG9yCi0JICogaW4gdGhlIHNwZWNpZmllZCBibG9jaywgYnV0IHRoZW4gdGhlICJhbmNob3I9TiIgb3B0aW9uCi0JICogb3JpZ2luYWxseSBnaXZlbiBieSB0aGUgdXNlciB3YXNuJ3QgZWZmZWN0aXZlLCBzbyBpdCdzIE9LCi0JICogaWYgd2UgZG9uJ3Qgc2hvdyBpdC4KLQkgKi8KLQlpZiAoc2JpLT5zX2FuY2hvclsyXSAhPSAwKQotCQlzZXFfcHJpbnRmKHNlcSwgIixhbmNob3I9JXUiLCBzYmktPnNfYW5jaG9yWzJdKTsKKwlpZiAoc2JpLT5zX2FuY2hvciAhPSAwKQorCQlzZXFfcHJpbnRmKHNlcSwgIixhbmNob3I9JXUiLCBzYmktPnNfYW5jaG9yKTsKIAkvKgogCSAqIHZvbHVtZSwgcGFydGl0aW9uLCBmaWxlc2V0IGFuZCByb290ZGlyIHNlZW0gdG8gYmUgaWdub3JlZAogCSAqIGN1cnJlbnRseQpAQCAtMzE3LDYgKzMxNCw4IEBACiAgKgogICoJZ2lkPQkJU2V0IHRoZSBkZWZhdWx0IGdyb3VwLgogICoJdW1hc2s9CQlTZXQgdGhlIGRlZmF1bHQgdW1hc2suCisgKgltb2RlPQkJU2V0IHRoZSBkZWZhdWx0IGZpbGUgcGVybWlzc2lvbnMuCisgKglkbW9kZT0JCVNldCB0aGUgZGVmYXVsdCBkaXJlY3RvcnkgcGVybWlzc2lvbnMuCiAgKgl1aWQ9CQlTZXQgdGhlIGRlZmF1bHQgdXNlci4KICAqCWJzPQkJU2V0IHRoZSBibG9jayBzaXplLgogICoJdW5oaWRlCQlTaG93IG90aGVyd2lzZSBoaWRkZW4gZmlsZXMuCkBAIC0zNjYsNyArMzY1LDggQEAKIAlPcHRfZ2lkLCBPcHRfdWlkLCBPcHRfdW1hc2ssIE9wdF9zZXNzaW9uLCBPcHRfbGFzdGJsb2NrLAogCU9wdF9hbmNob3IsIE9wdF92b2x1bWUsIE9wdF9wYXJ0aXRpb24sIE9wdF9maWxlc2V0LAogCU9wdF9yb290ZGlyLCBPcHRfdXRmOCwgT3B0X2lvY2hhcnNldCwKLQlPcHRfZXJyLCBPcHRfdWZvcmdldCwgT3B0X3VpZ25vcmUsIE9wdF9nZm9yZ2V0LCBPcHRfZ2lnbm9yZQorCU9wdF9lcnIsIE9wdF91Zm9yZ2V0LCBPcHRfdWlnbm9yZSwgT3B0X2dmb3JnZXQsIE9wdF9naWdub3JlLAorCU9wdF9mbW9kZSwgT3B0X2Rtb2RlCiB9OwogCiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC0zOTUsNiArMzk1LDggQEAKIAl7T3B0X3Jvb3RkaXIsCSJyb290ZGlyPSV1In0sCiAJe09wdF91dGY4LAkidXRmOCJ9LAogCXtPcHRfaW9jaGFyc2V0LAkiaW9jaGFyc2V0PSVzIn0sCisJe09wdF9mbW9kZSwgICAgICJtb2RlPSVvIn0sCisJe09wdF9kbW9kZSwgICAgICJkbW9kZT0lbyJ9LAogCXtPcHRfZXJyLAlOVUxMfQogfTsKIApAQCAtNDA1LDcgKzQwNyw2IEBACiAJaW50IG9wdGlvbjsKIAogCXVvcHQtPm5vdnJzID0gMDsKLQl1b3B0LT5ibG9ja3NpemUgPSBVREZfREVGQVVMVF9CTE9DS1NJWkU7CiAJdW9wdC0+cGFydGl0aW9uID0gMHhGRkZGOwogCXVvcHQtPnNlc3Npb24gPSAweEZGRkZGRkZGOwogCXVvcHQtPmxhc3RibG9jayA9IDA7CkBAIC00MjgsMTAgKzQyOSwxMiBAQAogCQlzd2l0Y2ggKHRva2VuKSB7CiAJCWNhc2UgT3B0X25vdnJzOgogCQkJdW9wdC0+bm92cnMgPSAxOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2JzOgogCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCiAJCQkJcmV0dXJuIDA7CiAJCQl1b3B0LT5ibG9ja3NpemUgPSBvcHRpb247CisJCQl1b3B0LT5mbGFncyB8PSAoMSA8PCBVREZfRkxBR19CTE9DS1NJWkVfU0VUKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF91bmhpZGU6CiAJCQl1b3B0LT5mbGFncyB8PSAoMSA8PCBVREZfRkxBR19VTkhJREUpOwpAQCAtNTMxLDYgKzUzNCwxNiBAQAogCQljYXNlIE9wdF9nZm9yZ2V0OgogCQkJdW9wdC0+ZmxhZ3MgfD0gKDEgPDwgVURGX0ZMQUdfR0lEX0ZPUkdFVCk7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZm1vZGU6CisJCQlpZiAobWF0Y2hfb2N0YWwoYXJncywgJm9wdGlvbikpCisJCQkJcmV0dXJuIDA7CisJCQl1b3B0LT5mbW9kZSA9IG9wdGlvbiAmIDA3Nzc7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZG1vZGU6CisJCQlpZiAobWF0Y2hfb2N0YWwoYXJncywgJm9wdGlvbikpCisJCQkJcmV0dXJuIDA7CisJCQl1b3B0LT5kbW9kZSA9IG9wdGlvbiAmIDA3Nzc7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUiAidWRmOiBiYWQgbW91bnQgb3B0aW9uIFwiJXNcIiAiCiAJCQkgICAgICAgIm9yIG1pc3NpbmcgdmFsdWVcbiIsIHApOwpAQCAtNTQwLDE3ICs1NTMsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCB1ZGZfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlsb2NrX2tlcm5lbCgpOwotCi0JaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQotCQl1ZGZfb3Blbl9sdmlkKHNiKTsKLQlzYi0+c19kaXJ0ID0gMDsKLQotCXVubG9ja19rZXJuZWwoKTsKLX0KLQogc3RhdGljIGludCB1ZGZfcmVtb3VudF9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpvcHRpb25zKQogewogCXN0cnVjdCB1ZGZfb3B0aW9ucyB1b3B0OwpAQCAtNTYwLDYgKzU2Miw4IEBACiAJdW9wdC51aWQgICA9IHNiaS0+c191aWQ7CiAJdW9wdC5naWQgICA9IHNiaS0+c19naWQ7CiAJdW9wdC51bWFzayA9IHNiaS0+c191bWFzazsKKwl1b3B0LmZtb2RlID0gc2JpLT5zX2Ztb2RlOworCXVvcHQuZG1vZGUgPSBzYmktPnNfZG1vZGU7CiAKIAlpZiAoIXVkZl9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZ1b3B0LCB0cnVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01NjgsNiArNTcyLDggQEAKIAlzYmktPnNfdWlkICAgPSB1b3B0LnVpZDsKIAlzYmktPnNfZ2lkICAgPSB1b3B0LmdpZDsKIAlzYmktPnNfdW1hc2sgPSB1b3B0LnVtYXNrOworCXNiaS0+c19mbW9kZSA9IHVvcHQuZm1vZGU7CisJc2JpLT5zX2Rtb2RlID0gdW9wdC5kbW9kZTsKIAogCWlmIChzYmktPnNfbHZpZF9iaCkgewogCQlpbnQgd3JpdGVfcmV2ID0gbGUxNl90b19jcHUodWRmX3NiX2x2aWRpdShzYmkpLT5taW5VREZXcml0ZVJldik7CkBAIC01ODUsMjIgKzU5MSwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVkZl92cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNpbGVudCkKKy8qIENoZWNrIFZvbHVtZSBTdHJ1Y3R1cmUgRGVzY3JpcHRvcnMgKEVDTUEgMTY3IDIvOS4xKSAqLworLyogV2UgYWxzbyBjaGVjayBhbnkgIkNELVJPTSBWb2x1bWUgRGVzY3JpcHRvciBTZXQiIChFQ01BIDE2NyAyLzguMy4xKSAqLworc3RhdGljIGxvZmZfdCB1ZGZfY2hlY2tfdnNkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IHZvbFN0cnVjdERlc2MgKnZzZCA9IE5VTEw7CiAJbG9mZl90IHNlY3RvciA9IDMyNzY4OwogCWludCBzZWN0b3JzaXplOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwotCWludCBpc285NjYwID0gMDsKIAlpbnQgbnNyMDIgPSAwOwogCWludCBuc3IwMyA9IDA7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmk7CiAKLQkvKiBCbG9jayBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MTIgKi8KLQlpZiAoc2ItPnNfYmxvY2tzaXplICYgNTExKQotCQlyZXR1cm4gMDsKIAlzYmkgPSBVREZfU0Ioc2IpOwotCiAJaWYgKHNiLT5zX2Jsb2Nrc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgdm9sU3RydWN0RGVzYykpCiAJCXNlY3RvcnNpemUgPSBzaXplb2Yoc3RydWN0IHZvbFN0cnVjdERlc2MpOwogCWVsc2UKQEAgLTYyNyw3ICs2MzAsNiBAQAogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAodnNkLT5zdGRJZGVudCwgVlNEX1NURF9JRF9DRDAwMSwKIAkJCQkgICAgVlNEX1NURF9JRF9MRU4pKSB7Ci0JCQlpc285NjYwID0gc2VjdG9yOwogCQkJc3dpdGNoICh2c2QtPnN0cnVjdFR5cGUpIHsKIAkJCWNhc2UgMDoKIAkJCQl1ZGZfZGVidWcoIklTTzk2NjAgQm9vdCBSZWNvcmQgZm91bmRcbiIpOwpAQCAtNjc5LDEzOSArNjgxLDkgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBDaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFuIGFuY2hvciBibG9jayBpbiB0aGUgZ2l2ZW4gYmxvY2sKLSAqLwotc3RhdGljIGludCB1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JdWludDE2X3QgaWRlbnQ7Ci0KLQlpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1ZBUkNPTlYpICYmCi0JICAgIHVkZl9maXhlZF90b192YXJpYWJsZShibG9jaykgPj0KLQkgICAgc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiBzYi0+c19ibG9ja3NpemVfYml0cykKLQkJcmV0dXJuIDA7Ci0KLQliaCA9IHVkZl9yZWFkX3RhZ2dlZChzYiwgYmxvY2ssIGJsb2NrLCAmaWRlbnQpOwotCWlmICghYmgpCi0JCXJldHVybiAwOwotCWJyZWxzZShiaCk7Ci0KLQlyZXR1cm4gaWRlbnQgPT0gVEFHX0lERU5UX0FWRFA7Ci19Ci0KLS8qIFNlYXJjaCBmb3IgYW4gYW5jaG9yIHZvbHVtZSBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KLXN0YXRpYyBzZWN0b3JfdCB1ZGZfc2Nhbl9hbmNob3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGxhc3RibG9jaykKLXsKLQlzZWN0b3JfdCBsYXN0WzZdOwotCWludCBpOwotCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKLQotCWxhc3RbMF0gPSBsYXN0YmxvY2s7Ci0JbGFzdFsxXSA9IGxhc3RbMF0gLSAxOwotCWxhc3RbMl0gPSBsYXN0WzBdICsgMTsKLQlsYXN0WzNdID0gbGFzdFswXSAtIDI7Ci0JbGFzdFs0XSA9IGxhc3RbMF0gLSAxNTA7Ci0JbGFzdFs1XSA9IGxhc3RbMF0gLSAxNTI7Ci0KLQkvKiAgYWNjb3JkaW5nIHRvIHNwZWMsIGFuY2hvciBpcyBpbiBlaXRoZXI6Ci0JICogICAgIGJsb2NrIDI1NgotCSAqICAgICBsYXN0YmxvY2stMjU2Ci0JICogICAgIGxhc3RibG9jawotCSAqICBob3dldmVyLCBpZiB0aGUgZGlzYyBpc24ndCBjbG9zZWQsIGl0IGNvdWxkIGJlIDUxMiAqLwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGFzdCk7IGkrKykgewotCQlpZiAobGFzdFtpXSA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKGxhc3RbaV0gPj0gc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PgotCQkJCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIGxhc3RbaV0pKSB7Ci0JCQlzYmktPnNfYW5jaG9yWzBdID0gbGFzdFtpXTsKLQkJCXNiaS0+c19hbmNob3JbMV0gPSBsYXN0W2ldIC0gMjU2OwotCQkJcmV0dXJuIGxhc3RbaV07Ci0JCX0KLQotCQlpZiAobGFzdFtpXSA8IDI1NikKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBsYXN0W2ldIC0gMjU2KSkgewotCQkJc2JpLT5zX2FuY2hvclsxXSA9IGxhc3RbaV0gLSAyNTY7Ci0JCQlyZXR1cm4gbGFzdFtpXTsKLQkJfQotCX0KLQotCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBzYmktPnNfc2Vzc2lvbiArIDI1NikpIHsKLQkJc2JpLT5zX2FuY2hvclswXSA9IHNiaS0+c19zZXNzaW9uICsgMjU2OwotCQlyZXR1cm4gbGFzdFswXTsKLQl9Ci0JaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIHNiaS0+c19zZXNzaW9uICsgNTEyKSkgewotCQlzYmktPnNfYW5jaG9yWzBdID0gc2JpLT5zX3Nlc3Npb24gKyA1MTI7Ci0JCXJldHVybiBsYXN0WzBdOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEZpbmQgYW4gYW5jaG9yIHZvbHVtZSBkZXNjcmlwdG9yLiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBzYmktPnNfbGFzdGJsb2NrIHRvCi0gKiBiZSB0aGUgbGFzdCBibG9jayBvbiB0aGUgbWVkaWEuCi0gKgotICogUmV0dXJuIDEgaWYgbm90IGZvdW5kLCAwIGlmIG9rCi0gKgotICovCi1zdGF0aWMgdm9pZCB1ZGZfZmluZF9hbmNob3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzZWN0b3JfdCBsYXN0YmxvY2s7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7Ci0JdWludDE2X3QgaWRlbnQ7Ci0JaW50IGk7Ci0Jc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwotCi0JbGFzdGJsb2NrID0gdWRmX3NjYW5fYW5jaG9ycyhzYiwgc2JpLT5zX2xhc3RfYmxvY2spOwotCWlmIChsYXN0YmxvY2spCi0JCWdvdG8gY2hlY2tfYW5jaG9yOwotCi0JLyogTm8gYW5jaG9yIGZvdW5kPyBUcnkgVkFSQ09OViBjb252ZXJzaW9uIG9mIGJsb2NrIG51bWJlcnMgKi8KLQlVREZfU0VUX0ZMQUcoc2IsIFVERl9GTEFHX1ZBUkNPTlYpOwotCS8qIEZpcnN0bHksIHdlIHRyeSB0byBub3QgY29udmVydCBudW1iZXIgb2YgdGhlIGxhc3QgYmxvY2sgKi8KLQlsYXN0YmxvY2sgPSB1ZGZfc2Nhbl9hbmNob3JzKHNiLAotCQkJCXVkZl92YXJpYWJsZV90b19maXhlZChzYmktPnNfbGFzdF9ibG9jaykpOwotCWlmIChsYXN0YmxvY2spCi0JCWdvdG8gY2hlY2tfYW5jaG9yOwotCi0JLyogU2Vjb25kbHksIHdlIHRyeSB3aXRoIGNvbnZlcnRlZCBudW1iZXIgb2YgdGhlIGxhc3QgYmxvY2sgKi8KLQlsYXN0YmxvY2sgPSB1ZGZfc2Nhbl9hbmNob3JzKHNiLCBzYmktPnNfbGFzdF9ibG9jayk7Ci0JaWYgKCFsYXN0YmxvY2spIHsKLQkJLyogVkFSQ09OViBkaWRuJ3QgaGVscC4gQ2xlYXIgaXQuICovCi0JCVVERl9DTEVBUl9GTEFHKHNiLCBVREZfRkxBR19WQVJDT05WKTsKLQl9Ci0KLWNoZWNrX2FuY2hvcjoKLQkvKgotCSAqIENoZWNrIGxvY2F0ZWQgYW5jaG9ycyBhbmQgdGhlIGFuY2hvciBibG9jayBzdXBwbGllZCB2aWEKLQkgKiBtb3VudCBvcHRpb25zCi0JICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2JpLT5zX2FuY2hvcik7IGkrKykgewotCQlpZiAoIXNiaS0+c19hbmNob3JbaV0pCi0JCQljb250aW51ZTsKLQkJYmggPSB1ZGZfcmVhZF90YWdnZWQoc2IsIHNiaS0+c19hbmNob3JbaV0sCi0JCQkJCXNiaS0+c19hbmNob3JbaV0sICZpZGVudCk7Ci0JCWlmICghYmgpCi0JCQlzYmktPnNfYW5jaG9yW2ldID0gMDsKLQkJZWxzZSB7Ci0JCQlicmVsc2UoYmgpOwotCQkJaWYgKGlkZW50ICE9IFRBR19JREVOVF9BVkRQKQotCQkJCXNiaS0+c19hbmNob3JbaV0gPSAwOwotCQl9Ci0JfQotCi0Jc2JpLT5zX2xhc3RfYmxvY2sgPSBsYXN0YmxvY2s7Ci19Ci0KIHN0YXRpYyBpbnQgdWRmX2ZpbmRfZmlsZXNldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJICAgIGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0LAotCQkJICAgIGtlcm5lbF9sYl9hZGRyICpyb290KQorCQkJICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCwKKwkJCSAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKnJvb3QpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJbG9uZyBsYXN0YmxvY2s7CkBAIC04MjAsNyArNjkyLDcgQEAKIAogCWlmIChmaWxlc2V0LT5sb2dpY2FsQmxvY2tOdW0gIT0gMHhGRkZGRkZGRiB8fAogCSAgICBmaWxlc2V0LT5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gIT0gMHhGRkZGKSB7Ci0JCWJoID0gdWRmX3JlYWRfcHRhZ2dlZChzYiwgKmZpbGVzZXQsIDAsICZpZGVudCk7CisJCWJoID0gdWRmX3JlYWRfcHRhZ2dlZChzYiwgZmlsZXNldCwgMCwgJmlkZW50KTsKIAogCQlpZiAoIWJoKSB7CiAJCQlyZXR1cm4gMTsKQEAgLTgzNCw3ICs3MDYsNyBAQAogCXNiaSA9IFVERl9TQihzYik7CiAJaWYgKCFiaCkgewogCQkvKiBTZWFyY2ggYmFja3dhcmRzIHRocm91Z2ggdGhlIHBhcnRpdGlvbnMgKi8KLQkJa2VybmVsX2xiX2FkZHIgbmV3ZmlsZXNldDsKKwkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIG5ld2ZpbGVzZXQ7CiAKIC8qIC0tPiBjdmc6IEZJWE1FIC0gaXMgaXQgcmVhc29uYWJsZT8gKi8KIAkJcmV0dXJuIDE7CkBAIC04NTAsNyArNzIyLDcgQEAKIAkJCW5ld2ZpbGVzZXQubG9naWNhbEJsb2NrTnVtID0gMDsKIAogCQkJZG8gewotCQkJCWJoID0gdWRmX3JlYWRfcHRhZ2dlZChzYiwgbmV3ZmlsZXNldCwgMCwKKwkJCQliaCA9IHVkZl9yZWFkX3B0YWdnZWQoc2IsICZuZXdmaWxlc2V0LCAwLAogCQkJCQkJICAgICAgJmlkZW50KTsKIAkJCQlpZiAoIWJoKSB7CiAJCQkJCW5ld2ZpbGVzZXQubG9naWNhbEJsb2NrTnVtKys7CkBAIC05MDIsMTQgKzc3NCwyMyBAQAogc3RhdGljIGludCB1ZGZfbG9hZF9wdm9sZGVzYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKIHsKIAlzdHJ1Y3QgcHJpbWFyeVZvbERlc2MgKnB2b2xkZXNjOwotCXN0cnVjdCB1c3RyIGluc3RyOwotCXN0cnVjdCB1c3RyIG91dHN0cjsKKwlzdHJ1Y3QgdXN0ciAqaW5zdHIsICpvdXRzdHI7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAl1aW50MTZfdCBpZGVudDsKKwlpbnQgcmV0ID0gMTsKKworCWluc3RyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzdHIpLCBHRlBfTk9GUyk7CisJaWYgKCFpbnN0cikKKwkJcmV0dXJuIDE7CisKKwlvdXRzdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXN0ciksIEdGUF9OT0ZTKTsKKwlpZiAoIW91dHN0cikKKwkJZ290byBvdXQxOwogCiAJYmggPSB1ZGZfcmVhZF90YWdnZWQoc2IsIGJsb2NrLCBibG9jaywgJmlkZW50KTsKIAlpZiAoIWJoKQotCQlyZXR1cm4gMTsKKwkJZ290byBvdXQyOworCiAJQlVHX09OKGlkZW50ICE9IFRBR19JREVOVF9QVkQpOwogCiAJcHZvbGRlc2MgPSAoc3RydWN0IHByaW1hcnlWb2xEZXNjICopYmgtPmJfZGF0YTsKQEAgLTkxNyw3ICs3OTgsNyBAQAogCWlmICh1ZGZfZGlza19zdGFtcF90b190aW1lKCZVREZfU0Ioc2IpLT5zX3JlY29yZF90aW1lLAogCQkJICAgICAgcHZvbGRlc2MtPnJlY29yZGluZ0RhdGVBbmRUaW1lKSkgewogI2lmZGVmIFVERkZTX0RFQlVHCi0JCXRpbWVzdGFtcCAqdHMgPSAmcHZvbGRlc2MtPnJlY29yZGluZ0RhdGVBbmRUaW1lOworCQlzdHJ1Y3QgdGltZXN0YW1wICp0cyA9ICZwdm9sZGVzYy0+cmVjb3JkaW5nRGF0ZUFuZFRpbWU7CiAJCXVkZl9kZWJ1ZygicmVjb3JkaW5nIHRpbWUgJTA0dS8lMDJ1LyUwMnUiCiAJCQkgICIgJTAydTolMDJ1ICgleClcbiIsCiAJCQkgIGxlMTZfdG9fY3B1KHRzLT55ZWFyKSwgdHMtPm1vbnRoLCB0cy0+ZGF5LCB0cy0+aG91ciwKQEAgLTkyNSwyMCArODA2LDI1IEBACiAjZW5kaWYKIAl9CiAKLQlpZiAoIXVkZl9idWlsZF91c3RyKCZpbnN0ciwgcHZvbGRlc2MtPnZvbElkZW50LCAzMikpCi0JCWlmICh1ZGZfQ1MwdG9VVEY4KCZvdXRzdHIsICZpbnN0cikpIHsKLQkJCXN0cm5jcHkoVURGX1NCKHNiKS0+c192b2x1bWVfaWRlbnQsIG91dHN0ci51X25hbWUsCi0JCQkJb3V0c3RyLnVfbGVuID4gMzEgPyAzMSA6IG91dHN0ci51X2xlbik7CisJaWYgKCF1ZGZfYnVpbGRfdXN0cihpbnN0ciwgcHZvbGRlc2MtPnZvbElkZW50LCAzMikpCisJCWlmICh1ZGZfQ1MwdG9VVEY4KG91dHN0ciwgaW5zdHIpKSB7CisJCQlzdHJuY3B5KFVERl9TQihzYiktPnNfdm9sdW1lX2lkZW50LCBvdXRzdHItPnVfbmFtZSwKKwkJCQlvdXRzdHItPnVfbGVuID4gMzEgPyAzMSA6IG91dHN0ci0+dV9sZW4pOwogCQkJdWRmX2RlYnVnKCJ2b2xJZGVudFtdID0gJyVzJ1xuIiwKIAkJCQkJVURGX1NCKHNiKS0+c192b2x1bWVfaWRlbnQpOwogCQl9CiAKLQlpZiAoIXVkZl9idWlsZF91c3RyKCZpbnN0ciwgcHZvbGRlc2MtPnZvbFNldElkZW50LCAxMjgpKQotCQlpZiAodWRmX0NTMHRvVVRGOCgmb3V0c3RyLCAmaW5zdHIpKQotCQkJdWRmX2RlYnVnKCJ2b2xTZXRJZGVudFtdID0gJyVzJ1xuIiwgb3V0c3RyLnVfbmFtZSk7CisJaWYgKCF1ZGZfYnVpbGRfdXN0cihpbnN0ciwgcHZvbGRlc2MtPnZvbFNldElkZW50LCAxMjgpKQorCQlpZiAodWRmX0NTMHRvVVRGOChvdXRzdHIsIGluc3RyKSkKKwkJCXVkZl9kZWJ1Zygidm9sU2V0SWRlbnRbXSA9ICclcydcbiIsIG91dHN0ci0+dV9uYW1lKTsKIAogCWJyZWxzZShiaCk7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK291dDI6CisJa2ZyZWUob3V0c3RyKTsKK291dDE6CisJa2ZyZWUoaW5zdHIpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdWRmX2xvYWRfbWV0YWRhdGFfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHBhcnRpdGlvbikKQEAgLTk0Niw3ICs4MzIsNyBAQAogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAlzdHJ1Y3QgdWRmX3BhcnRfbWFwICptYXA7CiAJc3RydWN0IHVkZl9tZXRhX2RhdGEgKm1kYXRhOwotCWtlcm5lbF9sYl9hZGRyIGFkZHI7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGFkZHI7CiAJaW50IGZlX2Vycm9yID0gMDsKIAogCW1hcCA9ICZzYmktPnNfcGFydG1hcHNbcGFydGl0aW9uXTsKQEAgLTk1OSw3ICs4NDUsNyBAQAogCXVkZl9kZWJ1ZygiTWV0YWRhdGEgZmlsZSBsb2NhdGlvbjogYmxvY2sgPSAlZCBwYXJ0ID0gJWRcbiIsCiAJCQkgIGFkZHIubG9naWNhbEJsb2NrTnVtLCBhZGRyLnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CiAKLQltZGF0YS0+c19tZXRhZGF0YV9mZSA9IHVkZl9pZ2V0KHNiLCBhZGRyKTsKKwltZGF0YS0+c19tZXRhZGF0YV9mZSA9IHVkZl9pZ2V0KHNiLCAmYWRkcik7CiAKIAlpZiAobWRhdGEtPnNfbWV0YWRhdGFfZmUgPT0gTlVMTCkgewogCQl1ZGZfd2FybmluZyhzYiwgX19mdW5jX18sICJtZXRhZGF0YSBpbm9kZSBlZmUgbm90IGZvdW5kLCAiCkBAIC05ODEsNyArODY3LDcgQEAKIAl1ZGZfZGVidWcoIk1pcnJvciBtZXRhZGF0YSBmaWxlIGxvY2F0aW9uOiBibG9jayA9ICVkIHBhcnQgPSAlZFxuIiwKIAkJCSAgYWRkci5sb2dpY2FsQmxvY2tOdW0sIGFkZHIucGFydGl0aW9uUmVmZXJlbmNlTnVtKTsKIAotCW1kYXRhLT5zX21pcnJvcl9mZSA9IHVkZl9pZ2V0KHNiLCBhZGRyKTsKKwltZGF0YS0+c19taXJyb3JfZmUgPSB1ZGZfaWdldChzYiwgJmFkZHIpOwogCiAJaWYgKG1kYXRhLT5zX21pcnJvcl9mZSA9PSBOVUxMKSB7CiAJCWlmIChmZV9lcnJvcikgewpAQCAtMTAxMyw3ICs4OTksNyBAQAogCQl1ZGZfZGVidWcoIkJpdG1hcCBmaWxlIGxvY2F0aW9uOiBibG9jayA9ICVkIHBhcnQgPSAlZFxuIiwKIAkJCWFkZHIubG9naWNhbEJsb2NrTnVtLCBhZGRyLnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CiAKLQkJbWRhdGEtPnNfYml0bWFwX2ZlID0gdWRmX2lnZXQoc2IsIGFkZHIpOworCQltZGF0YS0+c19iaXRtYXBfZmUgPSB1ZGZfaWdldChzYiwgJmFkZHIpOwogCiAJCWlmIChtZGF0YS0+c19iaXRtYXBfZmUgPT0gTlVMTCkgewogCQkJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQpAQCAtMTAzNyw3ICs5MjMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB1ZGZfbG9hZF9maWxlc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQkgICAgIGtlcm5lbF9sYl9hZGRyICpyb290KQorCQkJICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKnJvb3QpCiB7CiAJc3RydWN0IGZpbGVTZXREZXNjICpmc2V0OwogCkBAIC0xMTE5LDEzICsxMDA1LDEzIEBACiAKIAlwaGQgPSAoc3RydWN0IHBhcnRpdGlvbkhlYWRlckRlc2MgKilwLT5wYXJ0aXRpb25Db250ZW50c1VzZTsKIAlpZiAocGhkLT51bmFsbG9jU3BhY2VUYWJsZS5leHRMZW5ndGgpIHsKLQkJa2VybmVsX2xiX2FkZHIgbG9jID0geworCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbG9jID0gewogCQkJLmxvZ2ljYWxCbG9ja051bSA9IGxlMzJfdG9fY3B1KAogCQkJCXBoZC0+dW5hbGxvY1NwYWNlVGFibGUuZXh0UG9zaXRpb24pLAogCQkJLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IHBfaW5kZXgsCiAJCX07CiAKLQkJbWFwLT5zX3VzcGFjZS5zX3RhYmxlID0gdWRmX2lnZXQoc2IsIGxvYyk7CisJCW1hcC0+c191c3BhY2Uuc190YWJsZSA9IHVkZl9pZ2V0KHNiLCAmbG9jKTsKIAkJaWYgKCFtYXAtPnNfdXNwYWNlLnNfdGFibGUpIHsKIAkJCXVkZl9kZWJ1ZygiY2Fubm90IGxvYWQgdW5hbGxvY1NwYWNlVGFibGUgKHBhcnQgJWQpXG4iLAogCQkJCQlwX2luZGV4KTsKQEAgLTExNTQsMTMgKzEwNDAsMTMgQEAKIAkJdWRmX2RlYnVnKCJwYXJ0aXRpb25JbnRlZ3JpdHlUYWJsZSAocGFydCAlZClcbiIsIHBfaW5kZXgpOwogCiAJaWYgKHBoZC0+ZnJlZWRTcGFjZVRhYmxlLmV4dExlbmd0aCkgewotCQlrZXJuZWxfbGJfYWRkciBsb2MgPSB7CisJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsb2MgPSB7CiAJCQkubG9naWNhbEJsb2NrTnVtID0gbGUzMl90b19jcHUoCiAJCQkJcGhkLT5mcmVlZFNwYWNlVGFibGUuZXh0UG9zaXRpb24pLAogCQkJLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IHBfaW5kZXgsCiAJCX07CiAKLQkJbWFwLT5zX2ZzcGFjZS5zX3RhYmxlID0gdWRmX2lnZXQoc2IsIGxvYyk7CisJCW1hcC0+c19mc3BhY2Uuc190YWJsZSA9IHVkZl9pZ2V0KHNiLCAmbG9jKTsKIAkJaWYgKCFtYXAtPnNfZnNwYWNlLnNfdGFibGUpIHsKIAkJCXVkZl9kZWJ1ZygiY2Fubm90IGxvYWQgZnJlZWRTcGFjZVRhYmxlIChwYXJ0ICVkKVxuIiwKIAkJCQlwX2luZGV4KTsKQEAgLTExOTIsNyArMTA3OCw3IEBACiB7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCXN0cnVjdCB1ZGZfcGFydF9tYXAgKm1hcCA9ICZzYmktPnNfcGFydG1hcHNbcF9pbmRleF07Ci0Ja2VybmVsX2xiX2FkZHIgaW5vOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBpbm87CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICp2YXRpOwogCXVpbnQzMl90IHBvczsKQEAgLTEyMDEsNyArMTA4Nyw3IEBACiAJLyogVkFUIGZpbGUgZW50cnkgaXMgaW4gdGhlIGxhc3QgcmVjb3JkZWQgYmxvY2sgKi8KIAlpbm8ucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gdHlwZTFfaW5kZXg7CiAJaW5vLmxvZ2ljYWxCbG9ja051bSA9IHNiaS0+c19sYXN0X2Jsb2NrIC0gbWFwLT5zX3BhcnRpdGlvbl9yb290OwotCXNiaS0+c192YXRfaW5vZGUgPSB1ZGZfaWdldChzYiwgaW5vKTsKKwlzYmktPnNfdmF0X2lub2RlID0gdWRmX2lnZXQoc2IsICZpbm8pOwogCWlmICghc2JpLT5zX3ZhdF9pbm9kZSkKIAkJcmV0dXJuIDE7CiAKQEAgLTEzMjIsNyArMTIwOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdWRmX2xvYWRfbG9naWNhbHZvbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaywKLQkJCSAgICAgICBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKKwkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCiB7CiAJc3RydWN0IGxvZ2ljYWxWb2xEZXNjICpsdmQ7CiAJaW50IGksIGosIG9mZnNldDsKQEAgLTE0NzEsNyArMTM1Nyw3IEBACiAJfQogCiAJaWYgKGZpbGVzZXQpIHsKLQkJbG9uZ19hZCAqbGEgPSAobG9uZ19hZCAqKSYobHZkLT5sb2dpY2FsVm9sQ29udGVudHNVc2VbMF0pOworCQlzdHJ1Y3QgbG9uZ19hZCAqbGEgPSAoc3RydWN0IGxvbmdfYWQgKikmKGx2ZC0+bG9naWNhbFZvbENvbnRlbnRzVXNlWzBdKTsKIAogCQkqZmlsZXNldCA9IGxlbGJfdG9fY3B1KGxhLT5leHRMb2NhdGlvbik7CiAJCXVkZl9kZWJ1ZygiRmlsZVNldCBmb3VuZCBpbiBMb2dpY2FsVm9sRGVzYyBhdCBibG9jaz0lZCwgIgpAQCAtMTQ5MCw3ICsxMzc2LDcgQEAKICAqIHVkZl9sb2FkX2xvZ2ljYWx2b2xpbnQKICAqCiAgKi8KLXN0YXRpYyB2b2lkIHVkZl9sb2FkX2xvZ2ljYWx2b2xpbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwga2VybmVsX2V4dGVudF9hZCBsb2MpCitzdGF0aWMgdm9pZCB1ZGZfbG9hZF9sb2dpY2Fsdm9saW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfZXh0ZW50X2FkIGxvYykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAl1aW50MTZfdCBpZGVudDsKQEAgLTE1MzMsNyArMTQxOSw3IEBACiAgKglXcml0dGVuLCB0ZXN0ZWQsIGFuZCByZWxlYXNlZC4KICAqLwogc3RhdGljIG5vaW5saW5lIGludCB1ZGZfcHJvY2Vzc19zZXF1ZW5jZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrLAotCQkJCWxvbmcgbGFzdGJsb2NrLCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKKwkJCQlsb25nIGxhc3RibG9jaywgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXN0cnVjdCB1ZGZfdmRzX3JlY29yZCB2ZHNbVkRTX1BPU19MRU5HVEhdOwpAQCAtMTY1NSw5NiArMTU0MSwyMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIHVkZl9jaGVja192YWxpZCgpCi0gKi8KLXN0YXRpYyBpbnQgdWRmX2NoZWNrX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBub3ZycywgaW50IHNpbGVudCkKLXsKLQlsb25nIGJsb2NrOwotCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKLQotCWlmIChub3ZycykgewotCQl1ZGZfZGVidWcoIlZhbGlkaXR5IGNoZWNrIHNraXBwZWQgYmVjYXVzZSBvZiBub3ZycyBvcHRpb25cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogQ2hlY2sgdGhhdCBpdCBpcyBOU1IwMiBjb21wbGlhbnQgKi8KLQkvKiBQcm9jZXNzIGFueSAiQ0QtUk9NIFZvbHVtZSBEZXNjcmlwdG9yIFNldCIgKEVDTUEgMTY3IDIvOC4zLjEpICovCi0JYmxvY2sgPSB1ZGZfdnJzKHNiLCBzaWxlbnQpOwotCWlmIChibG9jayA9PSAtMSkKLQkJdWRmX2RlYnVnKCJGYWlsZWQgdG8gcmVhZCBieXRlIDMyNzY4LiBBc3N1bWluZyBvcGVuICIKLQkJCSAgImRpc2MuIFNraXBwaW5nIHZhbGlkaXR5IGNoZWNrXG4iKTsKLQlpZiAoYmxvY2sgJiYgIXNiaS0+c19sYXN0X2Jsb2NrKQotCQlzYmktPnNfbGFzdF9ibG9jayA9IHVkZl9nZXRfbGFzdF9ibG9jayhzYik7Ci0JcmV0dXJuICFibG9jazsKLX0KLQotc3RhdGljIGludCB1ZGZfbG9hZF9zZXF1ZW5jZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKK3N0YXRpYyBpbnQgdWRmX2xvYWRfc2VxdWVuY2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCSAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQogewogCXN0cnVjdCBhbmNob3JWb2xEZXNjUHRyICphbmNob3I7Ci0JdWludDE2X3QgaWRlbnQ7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlsb25nIG1haW5fcywgbWFpbl9lLCByZXNlcnZlX3MsIHJlc2VydmVfZTsKLQlpbnQgaTsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaTsKIAotCWlmICghc2IpCi0JCXJldHVybiAxOwogCXNiaSA9IFVERl9TQihzYik7CisJYW5jaG9yID0gKHN0cnVjdCBhbmNob3JWb2xEZXNjUHRyICopYmgtPmJfZGF0YTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNiaS0+c19hbmNob3IpOyBpKyspIHsKLQkJaWYgKCFzYmktPnNfYW5jaG9yW2ldKQotCQkJY29udGludWU7CisJLyogTG9jYXRlIHRoZSBtYWluIHNlcXVlbmNlICovCisJbWFpbl9zID0gbGUzMl90b19jcHUoYW5jaG9yLT5tYWluVm9sRGVzY1NlcUV4dC5leHRMb2NhdGlvbik7CisJbWFpbl9lID0gbGUzMl90b19jcHUoYW5jaG9yLT5tYWluVm9sRGVzY1NlcUV4dC5leHRMZW5ndGgpOworCW1haW5fZSA9IG1haW5fZSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKKwltYWluX2UgKz0gbWFpbl9zOwogCi0JCWJoID0gdWRmX3JlYWRfdGFnZ2VkKHNiLCBzYmktPnNfYW5jaG9yW2ldLCBzYmktPnNfYW5jaG9yW2ldLAotCQkJCSAgICAgJmlkZW50KTsKLQkJaWYgKCFiaCkKLQkJCWNvbnRpbnVlOworCS8qIExvY2F0ZSB0aGUgcmVzZXJ2ZSBzZXF1ZW5jZSAqLworCXJlc2VydmVfcyA9IGxlMzJfdG9fY3B1KGFuY2hvci0+cmVzZXJ2ZVZvbERlc2NTZXFFeHQuZXh0TG9jYXRpb24pOworCXJlc2VydmVfZSA9IGxlMzJfdG9fY3B1KGFuY2hvci0+cmVzZXJ2ZVZvbERlc2NTZXFFeHQuZXh0TGVuZ3RoKTsKKwlyZXNlcnZlX2UgPSByZXNlcnZlX2UgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJcmVzZXJ2ZV9lICs9IHJlc2VydmVfczsKIAotCQlhbmNob3IgPSAoc3RydWN0IGFuY2hvclZvbERlc2NQdHIgKiliaC0+Yl9kYXRhOwotCi0JCS8qIExvY2F0ZSB0aGUgbWFpbiBzZXF1ZW5jZSAqLwotCQltYWluX3MgPSBsZTMyX3RvX2NwdShhbmNob3ItPm1haW5Wb2xEZXNjU2VxRXh0LmV4dExvY2F0aW9uKTsKLQkJbWFpbl9lID0gbGUzMl90b19jcHUoYW5jaG9yLT5tYWluVm9sRGVzY1NlcUV4dC5leHRMZW5ndGgpOwotCQltYWluX2UgPSBtYWluX2UgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7Ci0JCW1haW5fZSArPSBtYWluX3M7Ci0KLQkJLyogTG9jYXRlIHRoZSByZXNlcnZlIHNlcXVlbmNlICovCi0JCXJlc2VydmVfcyA9IGxlMzJfdG9fY3B1KAotCQkJCWFuY2hvci0+cmVzZXJ2ZVZvbERlc2NTZXFFeHQuZXh0TG9jYXRpb24pOwotCQlyZXNlcnZlX2UgPSBsZTMyX3RvX2NwdSgKLQkJCQlhbmNob3ItPnJlc2VydmVWb2xEZXNjU2VxRXh0LmV4dExlbmd0aCk7Ci0JCXJlc2VydmVfZSA9IHJlc2VydmVfZSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKLQkJcmVzZXJ2ZV9lICs9IHJlc2VydmVfczsKLQotCQlicmVsc2UoYmgpOwotCi0JCS8qIFByb2Nlc3MgdGhlIG1haW4gJiByZXNlcnZlIHNlcXVlbmNlcyAqLwotCQkvKiByZXNwb25zaWJsZSBmb3IgZmluZGluZyB0aGUgUGFydGl0aW9uRGVzYyhzKSAqLwotCQlpZiAoISh1ZGZfcHJvY2Vzc19zZXF1ZW5jZShzYiwgbWFpbl9zLCBtYWluX2UsCi0JCQkJCSAgIGZpbGVzZXQpICYmCi0JCSAgICAgIHVkZl9wcm9jZXNzX3NlcXVlbmNlKHNiLCByZXNlcnZlX3MsIHJlc2VydmVfZSwKLQkJCQkJICAgZmlsZXNldCkpKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGkgPT0gQVJSQVlfU0laRShzYmktPnNfYW5jaG9yKSkgewotCQl1ZGZfZGVidWcoIk5vIEFuY2hvciBibG9jayBmb3VuZFxuIik7CisJLyogUHJvY2VzcyB0aGUgbWFpbiAmIHJlc2VydmUgc2VxdWVuY2VzICovCisJLyogcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgdGhlIFBhcnRpdGlvbkRlc2MocykgKi8KKwlpZiAoIXVkZl9wcm9jZXNzX3NlcXVlbmNlKHNiLCBtYWluX3MsIG1haW5fZSwgZmlsZXNldCkpCiAJCXJldHVybiAxOwotCX0KLQl1ZGZfZGVidWcoIlVzaW5nIGFuY2hvciBpbiBibG9jayAlZFxuIiwgc2JpLT5zX2FuY2hvcltpXSk7CisJcmV0dXJuICF1ZGZfcHJvY2Vzc19zZXF1ZW5jZShzYiwgcmVzZXJ2ZV9zLCByZXNlcnZlX2UsIGZpbGVzZXQpOworfQogCisvKgorICogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbiBhbmNob3IgYmxvY2sgaW4gdGhlIGdpdmVuIGJsb2NrIGFuZAorICogbG9hZCBWb2x1bWUgRGVzY3JpcHRvciBTZXF1ZW5jZSBpZiBzby4KKyAqLworc3RhdGljIGludCB1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrLAorCQkJCSAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJdWludDE2X3QgaWRlbnQ7CisJaW50IHJldDsKKworCWlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfVkFSQ09OVikgJiYKKwkgICAgdWRmX2ZpeGVkX3RvX3ZhcmlhYmxlKGJsb2NrKSA+PQorCSAgICBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorCQlyZXR1cm4gMDsKKworCWJoID0gdWRmX3JlYWRfdGFnZ2VkKHNiLCBibG9jaywgYmxvY2ssICZpZGVudCk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIDA7CisJaWYgKGlkZW50ICE9IFRBR19JREVOVF9BVkRQKSB7CisJCWJyZWxzZShiaCk7CisJCXJldHVybiAwOworCX0KKwlyZXQgPSB1ZGZfbG9hZF9zZXF1ZW5jZShzYiwgYmgsIGZpbGVzZXQpOworCWJyZWxzZShiaCk7CisJcmV0dXJuIHJldDsKK30KKworLyogU2VhcmNoIGZvciBhbiBhbmNob3Igdm9sdW1lIGRlc2NyaXB0b3IgcG9pbnRlciAqLworc3RhdGljIHNlY3Rvcl90IHVkZl9zY2FuX2FuY2hvcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgbGFzdGJsb2NrLAorCQkJCSBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCit7CisJc2VjdG9yX3QgbGFzdFs2XTsKKwlpbnQgaTsKKwlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CisJaW50IGxhc3RfY291bnQgPSAwOworCisJLyogRmlyc3QgdHJ5IHVzZXIgcHJvdmlkZWQgYW5jaG9yICovCisJaWYgKHNiaS0+c19hbmNob3IpIHsKKwkJaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIHNiaS0+c19hbmNob3IsIGZpbGVzZXQpKQorCQkJcmV0dXJuIGxhc3RibG9jazsKKwl9CisJLyoKKwkgKiBhY2NvcmRpbmcgdG8gc3BlYywgYW5jaG9yIGlzIGluIGVpdGhlcjoKKwkgKiAgICAgYmxvY2sgMjU2CisJICogICAgIGxhc3RibG9jay0yNTYKKwkgKiAgICAgbGFzdGJsb2NrCisJICogIGhvd2V2ZXIsIGlmIHRoZSBkaXNjIGlzbid0IGNsb3NlZCwgaXQgY291bGQgYmUgNTEyLgorCSAqLworCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBzYmktPnNfc2Vzc2lvbiArIDI1NiwgZmlsZXNldCkpCisJCXJldHVybiBsYXN0YmxvY2s7CisJLyoKKwkgKiBUaGUgdHJvdWJsZSBpcyB3aGljaCBibG9jayBpcyB0aGUgbGFzdCBvbmUuIERyaXZlcyBvZnRlbiBtaXNyZXBvcnQKKwkgKiB0aGlzIHNvIHdlIHRyeSB2YXJpb3VzIHBvc3NpYmlsaXRpZXMuCisJICovCisJbGFzdFtsYXN0X2NvdW50KytdID0gbGFzdGJsb2NrOworCWlmIChsYXN0YmxvY2sgPj0gMSkKKwkJbGFzdFtsYXN0X2NvdW50KytdID0gbGFzdGJsb2NrIC0gMTsKKwlsYXN0W2xhc3RfY291bnQrK10gPSBsYXN0YmxvY2sgKyAxOworCWlmIChsYXN0YmxvY2sgPj0gMikKKwkJbGFzdFtsYXN0X2NvdW50KytdID0gbGFzdGJsb2NrIC0gMjsKKwlpZiAobGFzdGJsb2NrID49IDE1MCkKKwkJbGFzdFtsYXN0X2NvdW50KytdID0gbGFzdGJsb2NrIC0gMTUwOworCWlmIChsYXN0YmxvY2sgPj0gMTUyKQorCQlsYXN0W2xhc3RfY291bnQrK10gPSBsYXN0YmxvY2sgLSAxNTI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGFzdF9jb3VudDsgaSsrKSB7CisJCWlmIChsYXN0W2ldID49IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4KKwkJCQlzYi0+c19ibG9ja3NpemVfYml0cykKKwkJCWNvbnRpbnVlOworCQlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgbGFzdFtpXSwgZmlsZXNldCkpCisJCQlyZXR1cm4gbGFzdFtpXTsKKwkJaWYgKGxhc3RbaV0gPCAyNTYpCisJCQljb250aW51ZTsKKwkJaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIGxhc3RbaV0gLSAyNTYsIGZpbGVzZXQpKQorCQkJcmV0dXJuIGxhc3RbaV07CisJfQorCisJLyogRmluYWxseSB0cnkgYmxvY2sgNTEyIGluIGNhc2UgbWVkaWEgaXMgb3BlbiAqLworCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBzYmktPnNfc2Vzc2lvbiArIDUxMiwgZmlsZXNldCkpCisJCXJldHVybiBsYXN0WzBdOwogCXJldHVybiAwOwogfQogCisvKgorICogRmluZCBhbiBhbmNob3Igdm9sdW1lIGRlc2NyaXB0b3IgYW5kIGxvYWQgVm9sdW1lIERlc2NyaXB0b3IgU2VxdWVuY2UgZnJvbQorICogYXJlYSBzcGVjaWZpZWQgYnkgaXQuIFRoZSBmdW5jdGlvbiBleHBlY3RzIHNiaS0+c19sYXN0YmxvY2sgdG8gYmUgdGhlIGxhc3QKKyAqIGJsb2NrIG9uIHRoZSBtZWRpYS4KKyAqCisgKiBSZXR1cm4gMSBpZiBvaywgMCBpZiBub3QgZm91bmQuCisgKgorICovCitzdGF0aWMgaW50IHVkZl9maW5kX2FuY2hvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQoreworCXNlY3Rvcl90IGxhc3RibG9jazsKKwlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CisKKwlsYXN0YmxvY2sgPSB1ZGZfc2Nhbl9hbmNob3JzKHNiLCBzYmktPnNfbGFzdF9ibG9jaywgZmlsZXNldCk7CisJaWYgKGxhc3RibG9jaykKKwkJZ290byBvdXQ7CisKKwkvKiBObyBhbmNob3IgZm91bmQ/IFRyeSBWQVJDT05WIGNvbnZlcnNpb24gb2YgYmxvY2sgbnVtYmVycyAqLworCVVERl9TRVRfRkxBRyhzYiwgVURGX0ZMQUdfVkFSQ09OVik7CisJLyogRmlyc3RseSwgd2UgdHJ5IHRvIG5vdCBjb252ZXJ0IG51bWJlciBvZiB0aGUgbGFzdCBibG9jayAqLworCWxhc3RibG9jayA9IHVkZl9zY2FuX2FuY2hvcnMoc2IsCisJCQkJdWRmX3ZhcmlhYmxlX3RvX2ZpeGVkKHNiaS0+c19sYXN0X2Jsb2NrKSwKKwkJCQlmaWxlc2V0KTsKKwlpZiAobGFzdGJsb2NrKQorCQlnb3RvIG91dDsKKworCS8qIFNlY29uZGx5LCB3ZSB0cnkgd2l0aCBjb252ZXJ0ZWQgbnVtYmVyIG9mIHRoZSBsYXN0IGJsb2NrICovCisJbGFzdGJsb2NrID0gdWRmX3NjYW5fYW5jaG9ycyhzYiwgc2JpLT5zX2xhc3RfYmxvY2ssIGZpbGVzZXQpOworCWlmICghbGFzdGJsb2NrKSB7CisJCS8qIFZBUkNPTlYgZGlkbid0IGhlbHAuIENsZWFyIGl0LiAqLworCQlVREZfQ0xFQVJfRkxBRyhzYiwgVURGX0ZMQUdfVkFSQ09OVik7CisJCXJldHVybiAwOworCX0KK291dDoKKwlzYmktPnNfbGFzdF9ibG9jayA9IGxhc3RibG9jazsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIENoZWNrIFZvbHVtZSBTdHJ1Y3R1cmUgRGVzY3JpcHRvciwgZmluZCBBbmNob3IgYmxvY2sgYW5kIGxvYWQgVm9sdW1lCisgKiBEZXNjcmlwdG9yIFNlcXVlbmNlCisgKi8KK3N0YXRpYyBpbnQgdWRmX2xvYWRfdnJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCB1ZGZfb3B0aW9ucyAqdW9wdCwKKwkJCWludCBzaWxlbnQsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKK3sKKwlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CisJbG9mZl90IG5zcl9vZmY7CisKKwlpZiAoIXNiX3NldF9ibG9ja3NpemUoc2IsIHVvcHQtPmJsb2Nrc2l6ZSkpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVREYtZnM6IEJhZCBibG9jayBzaXplXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXNiaS0+c19sYXN0X2Jsb2NrID0gdW9wdC0+bGFzdGJsb2NrOworCWlmICghdW9wdC0+bm92cnMpIHsKKwkJLyogQ2hlY2sgdGhhdCBpdCBpcyBOU1IwMiBjb21wbGlhbnQgKi8KKwkJbnNyX29mZiA9IHVkZl9jaGVja192c2Qoc2IpOworCQlpZiAoIW5zcl9vZmYpIHsKKwkJCWlmICghc2lsZW50KQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVERi1mczogTm8gVlJTIGZvdW5kXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChuc3Jfb2ZmID09IC0xKQorCQkJdWRmX2RlYnVnKCJGYWlsZWQgdG8gcmVhZCBieXRlIDMyNzY4LiBBc3N1bWluZyBvcGVuICIKKwkJCQkgICJkaXNjLiBTa2lwcGluZyB2YWxpZGl0eSBjaGVja1xuIik7CisJCWlmICghc2JpLT5zX2xhc3RfYmxvY2spCisJCQlzYmktPnNfbGFzdF9ibG9jayA9IHVkZl9nZXRfbGFzdF9ibG9jayhzYik7CisJfSBlbHNlIHsKKwkJdWRmX2RlYnVnKCJWYWxpZGl0eSBjaGVjayBza2lwcGVkIGJlY2F1c2Ugb2Ygbm92cnMgb3B0aW9uXG4iKTsKKwl9CisKKwkvKiBMb29rIGZvciBhbmNob3IgYmxvY2sgYW5kIGxvYWQgVm9sdW1lIERlc2NyaXB0b3IgU2VxdWVuY2UgKi8KKwlzYmktPnNfYW5jaG9yID0gdW9wdC0+YW5jaG9yOworCWlmICghdWRmX2ZpbmRfYW5jaG9yKHNiLCBmaWxlc2V0KSkgeworCQlpZiAoIXNpbGVudCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVERi1mczogTm8gYW5jaG9yIGZvdW5kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCiBzdGF0aWMgdm9pZCB1ZGZfb3Blbl9sdmlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBzYmktPnNfbHZpZF9iaDsKIAlzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKmx2aWQ7CiAJc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjSW1wVXNlICpsdmlkaXU7CisKIAlpZiAoIWJoKQogCQlyZXR1cm47Ci0KIAlsdmlkID0gKHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqKWJoLT5iX2RhdGE7CiAJbHZpZGl1ID0gdWRmX3NiX2x2aWRpdShzYmkpOwogCkBAIC0xNzUyLDE0ICsxNzUyLDE1IEBACiAJbHZpZGl1LT5pbXBJZGVudC5pZGVudFN1ZmZpeFsxXSA9IFVERl9PU19JRF9MSU5VWDsKIAl1ZGZfdGltZV90b19kaXNrX3N0YW1wKCZsdmlkLT5yZWNvcmRpbmdEYXRlQW5kVGltZSwKIAkJCQlDVVJSRU5UX1RJTUUpOwotCWx2aWQtPmludGVncml0eVR5cGUgPSBMVklEX0lOVEVHUklUWV9UWVBFX09QRU47CisJbHZpZC0+aW50ZWdyaXR5VHlwZSA9IGNwdV90b19sZTMyKExWSURfSU5URUdSSVRZX1RZUEVfT1BFTik7CiAKIAlsdmlkLT5kZXNjVGFnLmRlc2NDUkMgPSBjcHVfdG9fbGUxNigKLQkJY3JjX2l0dV90KDAsIChjaGFyICopbHZpZCArIHNpemVvZih0YWcpLAorCQljcmNfaXR1X3QoMCwgKGNoYXIgKilsdmlkICsgc2l6ZW9mKHN0cnVjdCB0YWcpLAogCQkJbGUxNl90b19jcHUobHZpZC0+ZGVzY1RhZy5kZXNjQ1JDTGVuZ3RoKSkpOwogCiAJbHZpZC0+ZGVzY1RhZy50YWdDaGVja3N1bSA9IHVkZl90YWdfY2hlY2tzdW0oJmx2aWQtPmRlc2NUYWcpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwlzYmktPnNfbHZpZF9kaXJ0eSA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9jbG9zZV9sdmlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0xNzczLDEwICsxNzc0LDYgQEAKIAkJcmV0dXJuOwogCiAJbHZpZCA9IChzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKiliaC0+Yl9kYXRhOwotCi0JaWYgKGx2aWQtPmludGVncml0eVR5cGUgIT0gTFZJRF9JTlRFR1JJVFlfVFlQRV9PUEVOKQotCQlyZXR1cm47Ci0KIAlsdmlkaXUgPSB1ZGZfc2JfbHZpZGl1KHNiaSk7CiAJbHZpZGl1LT5pbXBJZGVudC5pZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYOwogCWx2aWRpdS0+aW1wSWRlbnQuaWRlbnRTdWZmaXhbMV0gPSBVREZfT1NfSURfTElOVVg7CkBAIC0xNzkwLDExICsxNzg3LDEyIEBACiAJbHZpZC0+aW50ZWdyaXR5VHlwZSA9IGNwdV90b19sZTMyKExWSURfSU5URUdSSVRZX1RZUEVfQ0xPU0UpOwogCiAJbHZpZC0+ZGVzY1RhZy5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoCi0JCQljcmNfaXR1X3QoMCwgKGNoYXIgKilsdmlkICsgc2l6ZW9mKHRhZyksCisJCQljcmNfaXR1X3QoMCwgKGNoYXIgKilsdmlkICsgc2l6ZW9mKHN0cnVjdCB0YWcpLAogCQkJCWxlMTZfdG9fY3B1KGx2aWQtPmRlc2NUYWcuZGVzY0NSQ0xlbmd0aCkpKTsKIAogCWx2aWQtPmRlc2NUYWcudGFnQ2hlY2tzdW0gPSB1ZGZfdGFnX2NoZWNrc3VtKCZsdmlkLT5kZXNjVGFnKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJc2JpLT5zX2x2aWRfZGlydHkgPSAwOwogfQogCiBzdGF0aWMgdm9pZCB1ZGZfc2JfZnJlZV9iaXRtYXAoc3RydWN0IHVkZl9iaXRtYXAgKmJpdG1hcCkKQEAgLTE4NDYsMTUgKzE4NDQsMTggQEAKIHN0YXRpYyBpbnQgdWRmX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqb3B0aW9ucywgaW50IHNpbGVudCkKIHsKIAlpbnQgaTsKKwlpbnQgcmV0OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCB1ZGZfb3B0aW9ucyB1b3B0OwotCWtlcm5lbF9sYl9hZGRyIHJvb3RkaXIsIGZpbGVzZXQ7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHJvb3RkaXIsIGZpbGVzZXQ7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmk7CiAKIAl1b3B0LmZsYWdzID0gKDEgPDwgVURGX0ZMQUdfVVNFX0FEX0lOX0lDQikgfCAoMSA8PCBVREZfRkxBR19TVFJJQ1QpOwogCXVvcHQudWlkID0gLTE7CiAJdW9wdC5naWQgPSAtMTsKIAl1b3B0LnVtYXNrID0gMDsKKwl1b3B0LmZtb2RlID0gVURGX0lOVkFMSURfTU9ERTsKKwl1b3B0LmRtb2RlID0gVURGX0lOVkFMSURfTU9ERTsKIAogCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1ZGZfc2JfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQpAQCAtMTg5MiwxNSArMTg5MywxMCBAQAogCXNiaS0+c191aWQgPSB1b3B0LnVpZDsKIAlzYmktPnNfZ2lkID0gdW9wdC5naWQ7CiAJc2JpLT5zX3VtYXNrID0gdW9wdC51bWFzazsKKwlzYmktPnNfZm1vZGUgPSB1b3B0LmZtb2RlOworCXNiaS0+c19kbW9kZSA9IHVvcHQuZG1vZGU7CiAJc2JpLT5zX25sc19tYXAgPSB1b3B0Lm5sc19tYXA7CiAKLQkvKiBTZXQgdGhlIGJsb2NrIHNpemUgZm9yIGFsbCB0cmFuc2ZlcnMgKi8KLQlpZiAoIXNiX21pbl9ibG9ja3NpemUoc2IsIHVvcHQuYmxvY2tzaXplKSkgewotCQl1ZGZfZGVidWcoIkJhZCBibG9jayBzaXplICglZClcbiIsIHVvcHQuYmxvY2tzaXplKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IGJhZCBibG9jayBzaXplICglZClcbiIsIHVvcHQuYmxvY2tzaXplKTsKLQkJZ290byBlcnJvcl9vdXQ7Ci0JfQotCiAJaWYgKHVvcHQuc2Vzc2lvbiA9PSAweEZGRkZGRkZGKQogCQlzYmktPnNfc2Vzc2lvbiA9IHVkZl9nZXRfbGFzdF9zZXNzaW9uKHNiKTsKIAllbHNlCkBAIC0xOTA4LDE4ICsxOTA0LDYgQEAKIAogCXVkZl9kZWJ1ZygiTXVsdGktc2Vzc2lvbj0lZFxuIiwgc2JpLT5zX3Nlc3Npb24pOwogCi0Jc2JpLT5zX2xhc3RfYmxvY2sgPSB1b3B0Lmxhc3RibG9jazsKLQlzYmktPnNfYW5jaG9yWzBdID0gc2JpLT5zX2FuY2hvclsxXSA9IDA7Ci0Jc2JpLT5zX2FuY2hvclsyXSA9IHVvcHQuYW5jaG9yOwotCi0JaWYgKHVkZl9jaGVja192YWxpZChzYiwgdW9wdC5ub3Zycywgc2lsZW50KSkgewotCQkvKiByZWFkIHZvbHVtZSByZWNvZ25pdGlvbiBzZXF1ZW5jZXMgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVURGLWZzOiBObyBWUlMgZm91bmRcbiIpOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KLQl1ZGZfZmluZF9hbmNob3Ioc2IpOwotCiAJLyogRmlsbCBpbiB0aGUgcmVzdCBvZiB0aGUgc3VwZXJibG9jayAqLwogCXNiLT5zX29wID0gJnVkZl9zYl9vcHM7CiAJc2ItPnNfZXhwb3J0X29wID0gJnVkZl9leHBvcnRfb3BzOwpAQCAtMTkyOCw3ICsxOTEyLDIxIEBACiAJc2ItPnNfbWFnaWMgPSBVREZfU1VQRVJfTUFHSUM7CiAJc2ItPnNfdGltZV9ncmFuID0gMTAwMDsKIAotCWlmICh1ZGZfbG9hZF9zZXF1ZW5jZShzYiwgJmZpbGVzZXQpKSB7CisJaWYgKHVvcHQuZmxhZ3MgJiAoMSA8PCBVREZfRkxBR19CTE9DS1NJWkVfU0VUKSkgeworCQlyZXQgPSB1ZGZfbG9hZF92cnMoc2IsICZ1b3B0LCBzaWxlbnQsICZmaWxlc2V0KTsKKwl9IGVsc2UgeworCQl1b3B0LmJsb2Nrc2l6ZSA9IGJkZXZfaGFyZHNlY3Rfc2l6ZShzYi0+c19iZGV2KTsKKwkJcmV0ID0gdWRmX2xvYWRfdnJzKHNiLCAmdW9wdCwgc2lsZW50LCAmZmlsZXNldCk7CisJCWlmICghcmV0ICYmIHVvcHQuYmxvY2tzaXplICE9IFVERl9ERUZBVUxUX0JMT0NLU0laRSkgeworCQkJaWYgKCFzaWxlbnQpCisJCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJICAgICAgICJVREYtZnM6IFJlc2Nhbm5pbmcgd2l0aCBibG9ja3NpemUgIgorCQkJCSAgICAgICAiJWRcbiIsIFVERl9ERUZBVUxUX0JMT0NLU0laRSk7CisJCQl1b3B0LmJsb2Nrc2l6ZSA9IFVERl9ERUZBVUxUX0JMT0NLU0laRTsKKwkJCXJldCA9IHVkZl9sb2FkX3ZycyhzYiwgJnVvcHQsIHNpbGVudCwgJmZpbGVzZXQpOworCQl9CisJfQorCWlmICghcmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVERi1mczogTm8gcGFydGl0aW9uIGZvdW5kICgxKVxuIik7CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KQEAgLTE5NzgsNyArMTk3Niw3IEBACiAJfQogCiAJaWYgKCFzaWxlbnQpIHsKLQkJdGltZXN0YW1wIHRzOworCQlzdHJ1Y3QgdGltZXN0YW1wIHRzOwogCQl1ZGZfdGltZV90b19kaXNrX3N0YW1wKCZ0cywgc2JpLT5zX3JlY29yZF90aW1lKTsKIAkJdWRmX2luZm8oIlVERjogTW91bnRpbmcgdm9sdW1lICclcycsICIKIAkJCSAidGltZXN0YW1wICUwNHUvJTAydS8lMDJ1ICUwMnU6JTAydSAoJXgpXG4iLApAQCAtMTk5MSw3ICsxOTg5LDcgQEAKIAkvKiBBc3NpZ24gdGhlIHJvb3QgaW5vZGUgKi8KIAkvKiBhc3NpZ24gaW5vZGVzIGJ5IHBoeXNpY2FsIGJsb2NrIG51bWJlciAqLwogCS8qIHBlcmhhcHMgaXQncyBub3QgZXh0ZW5zaWJsZSBlbm91Z2gsIGJ1dCBmb3Igbm93IC4uLiAqLwotCWlub2RlID0gdWRmX2lnZXQoc2IsIHJvb3RkaXIpOworCWlub2RlID0gdWRmX2lnZXQoc2IsICZyb290ZGlyKTsKIAlpZiAoIWlub2RlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVURGLWZzOiBFcnJvciBpbiB1ZGZfaWdldCwgYmxvY2s9JWQsICIKIAkJCQkicGFydGl0aW9uPSVkXG4iLApAQCAtMjA4MSwxMSArMjA3OSwzMSBAQAogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogfQogCitzdGF0aWMgaW50IHVkZl9zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQoreworCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKKworCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CisJaWYgKHNiaS0+c19sdmlkX2RpcnR5KSB7CisJCS8qCisJCSAqIEJsb2NrZGV2aWNlIHdpbGwgYmUgc3luY2VkIGxhdGVyIHNvIHdlIGRvbid0IGhhdmUgdG8gc3VibWl0CisJCSAqIHRoZSBidWZmZXIgZm9yIElPCisJCSAqLworCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfbHZpZF9iaCk7CisJCXNiLT5zX2RpcnQgPSAwOworCQlzYmktPnNfbHZpZF9kaXJ0eSA9IDA7CisJfQorCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHVkZl9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCXN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzY0ltcFVzZSAqbHZpZGl1OworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJaWYgKHNiaS0+c19sdmlkX2JoICE9IE5VTEwpCiAJCWx2aWRpdSA9IHVkZl9zYl9sdmlkaXUoc2JpKTsKQEAgLTIxMDEsOCArMjExOSw5IEBACiAJCQkJCSAgbGUzMl90b19jcHUobHZpZGl1LT5udW1EaXJzKSkgOiAwKQogCQkJKyBidWYtPmZfYmZyZWU7CiAJYnVmLT5mX2ZmcmVlID0gYnVmLT5mX2JmcmVlOwotCS8qIF9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQgKi8KIAlidWYtPmZfbmFtZWxlbiA9IFVERl9OQU1FX0xFTiAtIDI7CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMTQsNyArMjEzMyw3IEBACiAJdW5zaWduZWQgaW50IGFjY3VtID0gMDsKIAlpbnQgaW5kZXg7CiAJaW50IGJsb2NrID0gMCwgbmV3YmxvY2s7Ci0Ja2VybmVsX2xiX2FkZHIgbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsb2M7CiAJdWludDMyX3QgYnl0ZXM7CiAJdWludDhfdCAqcHRyOwogCXVpbnQxNl90IGlkZW50OwpAQCAtMjEyNCw3ICsyMTQzLDcgQEAKIAogCWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBiaXRtYXAtPnNfZXh0UG9zaXRpb247CiAJbG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IFVERl9TQihzYiktPnNfcGFydGl0aW9uOwotCWJoID0gdWRmX3JlYWRfcHRhZ2dlZChzYiwgbG9jLCAwLCAmaWRlbnQpOworCWJoID0gdWRmX3JlYWRfcHRhZ2dlZChzYiwgJmxvYywgMCwgJmlkZW50KTsKIAogCWlmICghYmgpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IHVkZl9jb3VudF9mcmVlIGZhaWxlZFxuIik7CkBAIC0yMTQ3LDcgKzIxNjYsNyBAQAogCQlieXRlcyAtPSBjdXJfYnl0ZXM7CiAJCWlmIChieXRlcykgewogCQkJYnJlbHNlKGJoKTsKLQkJCW5ld2Jsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soc2IsIGxvYywgKytibG9jayk7CisJCQluZXdibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmbG9jLCArK2Jsb2NrKTsKIAkJCWJoID0gdWRmX3RyZWFkKHNiLCBuZXdibG9jayk7CiAJCQlpZiAoIWJoKSB7CiAJCQkJdWRmX2RlYnVnKCJyZWFkIGZhaWxlZFxuIik7CkBAIC0yMTcwLDcgKzIxODksNyBAQAogewogCXVuc2lnbmVkIGludCBhY2N1bSA9IDA7CiAJdWludDMyX3QgZWxlbjsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCWludDhfdCBldHlwZTsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3M7CiAKZGlmZiAtLWdpdCBhL2ZzL3VkZi90cnVuY2F0ZS5jIGIvZnMvdWRmL3RydW5jYXRlLmMKaW5kZXggNjVlMTliNC4uMjI1NTI3YyAxMDA2NDQKLS0tIGEvZnMvdWRmL3RydW5jYXRlLmMKKysrIGIvZnMvdWRmL3RydW5jYXRlLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogI2luY2x1ZGUgInVkZl9zYi5oIgogCiBzdGF0aWMgdm9pZCBleHRlbnRfdHJ1bmMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKLQkJCSBrZXJuZWxfbGJfYWRkciBlbG9jLCBpbnQ4X3QgZXR5cGUsIHVpbnQzMl90IGVsZW4sCisJCQkgc3RydWN0IGtlcm5lbF9sYl9hZGRyICplbG9jLCBpbnQ4X3QgZXR5cGUsIHVpbnQzMl90IGVsZW4sCiAJCQkgdWludDMyX3QgbmVsZW4pCiB7Ci0Ja2VybmVsX2xiX2FkZHIgbmVsb2MgPSB7fTsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbmVsb2MgPSB7fTsKIAlpbnQgbGFzdF9ibG9jayA9IChlbGVuICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4KIAkJaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJaW50IGZpcnN0X2Jsb2NrID0gKG5lbGVuICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4KQEAgLTQzLDEyICs0MywxMiBAQAogCQkJCQlsYXN0X2Jsb2NrKTsKIAkJCWV0eXBlID0gKEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCA+PiAzMCk7CiAJCX0gZWxzZQotCQkJbmVsb2MgPSBlbG9jOworCQkJbmVsb2MgPSAqZWxvYzsKIAkJbmVsZW4gPSAoZXR5cGUgPDwgMzApIHwgbmVsZW47CiAJfQogCiAJaWYgKGVsZW4gIT0gbmVsZW4pIHsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGVwb3MsIG5lbG9jLCBuZWxlbiwgMCk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBlcG9zLCAmbmVsb2MsIG5lbGVuLCAwKTsKIAkJaWYgKGxhc3RfYmxvY2sgLSBmaXJzdF9ibG9jayA+IDApIHsKIAkJCWlmIChldHlwZSA9PSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCiAJCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CkBAIC02OCw3ICs2OCw3IEBACiB2b2lkIHVkZl90cnVuY2F0ZV90YWlsX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHt9OwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbiwgbmVsZW47CiAJdWludDY0X3QgbGJjb3VudCA9IDA7CiAJaW50OF90IGV0eXBlID0gLTEsIG5ldHlwZTsKQEAgLTgzLDkgKzgzLDkgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCWVsc2UgaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCWVsc2UKIAkJQlVHKCk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQkJCSAgICAgICAodW5zaWduZWQpZWxlbik7CiAJCQluZWxlbiA9IGVsZW4gLSAobGJjb3VudCAtIGlub2RlLT5pX3NpemUpOwogCQkJZXBvcy5vZmZzZXQgLT0gYWRzaXplOwotCQkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgZWxvYywgZXR5cGUsIGVsZW4sIG5lbGVuKTsKKwkJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsICZlbG9jLCBldHlwZSwgZWxlbiwgbmVsZW4pOwogCQkJZXBvcy5vZmZzZXQgKz0gYWRzaXplOwogCQkJaWYgKHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEpICE9IC0xKQogCQkJCXByaW50ayhLRVJOX0VSUiAidWRmX3RydW5jYXRlX3RhaWxfZXh0ZW50KCk6ICIKQEAgLTEyNCw3ICsxMjQsNyBAQAogdm9pZCB1ZGZfZGlzY2FyZF9wcmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHsgTlVMTCwgMCwgezAsIDB9IH07Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAl1aW50MzJfdCBlbGVuOwogCXVpbnQ2NF90IGxiY291bnQgPSAwOwogCWludDhfdCBldHlwZSA9IC0xLCBuZXR5cGU7CkBAIC0xMzYsOSArMTM2LDkgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCWVsc2UgaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCWVsc2UKIAkJYWRzaXplID0gMDsKIApAQCAtMTUyLDcgKzE1Miw3IEBACiAJaWYgKGV0eXBlID09IChFWFRfTk9UX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpIHsKIAkJZXBvcy5vZmZzZXQgLT0gYWRzaXplOwogCQlsYmNvdW50IC09IGVsZW47Ci0JCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsIGVsb2MsIGV0eXBlLCBlbGVuLCAwKTsKKwkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgJmVsb2MsIGV0eXBlLCBlbGVuLCAwKTsKIAkJaWYgKCFlcG9zLmJoKSB7CiAJCQlpaW5mby0+aV9sZW5BbGxvYyA9CiAJCQkJZXBvcy5vZmZzZXQgLQpAQCAtMjAwLDcgKzIwMCw3IEBACiB2b2lkIHVkZl90cnVuY2F0ZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zOwotCWtlcm5lbF9sYl9hZGRyIGVsb2MsIG5lbG9jID0ge307CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2MsIG5lbG9jID0ge307CiAJdWludDMyX3QgZWxlbiwgbmVsZW4gPSAwLCBpbmRpcmVjdF9leHRfbGVuID0gMCwgbGVuYWxsb2M7CiAJaW50OF90IGV0eXBlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKQEAgLTIxMCw5ICsyMTAsOSBAQAogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7CiAKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlCVUcoKTsKIApAQCAtMjIxLDcgKzIyMSw3IEBACiAJCShpbm9kZS0+aV9zaXplICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsKIAlpZiAoZXR5cGUgIT0gLTEpIHsKIAkJZXBvcy5vZmZzZXQgLT0gYWRzaXplOwotCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCBlbG9jLCBldHlwZSwgZWxlbiwgYnl0ZV9vZmZzZXQpOworCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCAmZWxvYywgZXR5cGUsIGVsZW4sIGJ5dGVfb2Zmc2V0KTsKIAkJZXBvcy5vZmZzZXQgKz0gYWRzaXplOwogCQlpZiAoYnl0ZV9vZmZzZXQpCiAJCQlsZW5hbGxvYyA9IGVwb3Mub2Zmc2V0OwpAQCAtMjM2LDEyICsyMzYsMTIgQEAKIAkJd2hpbGUgKChldHlwZSA9IHVkZl9jdXJyZW50X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywKIAkJCQkJCSAmZWxlbiwgMCkpICE9IC0xKSB7CiAJCQlpZiAoZXR5cGUgPT0gKEVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgPj4gMzApKSB7Ci0JCQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZlcG9zLCBuZWxvYywgbmVsZW4sIDApOworCQkJCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmZXBvcywgJm5lbG9jLCBuZWxlbiwgMCk7CiAJCQkJaWYgKGluZGlyZWN0X2V4dF9sZW4pIHsKIAkJCQkJLyogV2UgbWFuYWdlZCB0byBmcmVlIGFsbCBleHRlbnRzIGluIHRoZQogCQkJCQkgKiBpbmRpcmVjdCBleHRlbnQgLSBmcmVlIGl0IHRvbyAqLwogCQkJCQlCVUdfT04oIWVwb3MuYmgpOwotCQkJCQl1ZGZfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBlcG9zLmJsb2NrLAorCQkJCQl1ZGZfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCAmZXBvcy5ibG9jaywKIAkJCQkJCQkwLCBpbmRpcmVjdF9leHRfbGVuKTsKIAkJCQl9IGVsc2UgaWYgKCFlcG9zLmJoKSB7CiAJCQkJCWlpbmZvLT5pX2xlbkFsbG9jID0gbGVuYWxsb2M7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAkJCQllcG9zLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKIAkJCQllcG9zLmJsb2NrID0gZWxvYzsKIAkJCQllcG9zLmJoID0gdWRmX3RyZWFkKHNiLAotCQkJCQkJdWRmX2dldF9sYl9wYmxvY2soc2IsIGVsb2MsIDApKTsKKwkJCQkJCXVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmZWxvYywgMCkpOwogCQkJCWlmIChlbGVuKQogCQkJCQlpbmRpcmVjdF9leHRfbGVuID0KIAkJCQkJCShlbGVuICsgc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4KQEAgLTI2MSw3ICsyNjEsNyBAQAogCQkJCWVsc2UKIAkJCQkJaW5kaXJlY3RfZXh0X2xlbiA9IDE7CiAJCQl9IGVsc2UgewotCQkJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsIGVsb2MsIGV0eXBlLAorCQkJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsICZlbG9jLCBldHlwZSwKIAkJCQkJICAgICBlbGVuLCAwKTsKIAkJCQllcG9zLm9mZnNldCArPSBhZHNpemU7CiAJCQl9CkBAIC0yNjksNyArMjY5LDcgQEAKIAogCQlpZiAoaW5kaXJlY3RfZXh0X2xlbikgewogCQkJQlVHX09OKCFlcG9zLmJoKTsKLQkJCXVkZl9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsIGVwb3MuYmxvY2ssIDAsCisJCQl1ZGZfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCAmZXBvcy5ibG9jaywgMCwKIAkJCQkJaW5kaXJlY3RfZXh0X2xlbik7CiAJCX0gZWxzZSBpZiAoIWVwb3MuYmgpIHsKIAkJCWlpbmZvLT5pX2xlbkFsbG9jID0gbGVuYWxsb2M7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJCXVkZl91cGRhdGVfYWxsb2NfZXh0X2Rlc2MoaW5vZGUsICZlcG9zLCBsZW5hbGxvYyk7CiAJfSBlbHNlIGlmIChpbm9kZS0+aV9zaXplKSB7CiAJCWlmIChieXRlX29mZnNldCkgewotCQkJa2VybmVsX2xvbmdfYWQgZXh0ZW50OworCQkJc3RydWN0IGtlcm5lbF9sb25nX2FkIGV4dGVudDsKIAogCQkJLyoKIAkJCSAqICBPSywgdGhlcmUgaXMgbm90IGV4dGVudCBjb3ZlcmluZyBpbm9kZS0+aV9zaXplIGFuZApkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZl9pLmggYi9mcy91ZGYvdWRmX2kuaAppbmRleCA0Zjg2YjFkLi5lNThkMWRlIDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmX2kuaAorKysgYi9mcy91ZGYvdWRmX2kuaApAQCAtNCw3ICs0LDcgQEAKIHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyB7CiAJc3RydWN0IHRpbWVzcGVjCQlpX2NydGltZTsKIAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGlub2RlICovCi0Ja2VybmVsX2xiX2FkZHIJCWlfbG9jYXRpb247CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyCQlpX2xvY2F0aW9uOwogCV9fdTY0CQkJaV91bmlxdWU7CiAJX191MzIJCQlpX2xlbkVBdHRyOwogCV9fdTMyCQkJaV9sZW5BbGxvYzsKQEAgLTE3LDggKzE3LDggQEAKIAl1bnNpZ25lZAkJaV9zdHJhdDQwOTYgOiAxOwogCXVuc2lnbmVkCQlyZXNlcnZlZCA6IDI2OwogCXVuaW9uIHsKLQkJc2hvcnRfYWQJKmlfc2FkOwotCQlsb25nX2FkCQkqaV9sYWQ7CisJCXN0cnVjdCBzaG9ydF9hZAkqaV9zYWQ7CisJCXN0cnVjdCBsb25nX2FkCQkqaV9sYWQ7CiAJCV9fdTgJCSppX2RhdGE7CiAJfSBpX2V4dDsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZl9zYi5oIGIvZnMvdWRmL3VkZl9zYi5oCmluZGV4IDFjMWM1MTQuLmQxMTNiNzIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91ZGZfc2IuaAorKysgYi9mcy91ZGYvdWRmX3NiLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgVURGX0ZMQUdfR0lEX1NFVAkxNgogI2RlZmluZSBVREZfRkxBR19TRVNTSU9OX1NFVAkxNwogI2RlZmluZSBVREZfRkxBR19MQVNUQkxPQ0tfU0VUCTE4CisjZGVmaW5lIFVERl9GTEFHX0JMT0NLU0laRV9TRVQJMTkKIAogI2RlZmluZSBVREZfUEFSVF9GTEFHX1VOQUxMT0NfQklUTUFQCTB4MDAwMQogI2RlZmluZSBVREZfUEFSVF9GTEFHX1VOQUxMT0NfVEFCTEUJMHgwMDAyCkBAIC00OCw2ICs0OSw4IEBACiAjZGVmaW5lIFVERl9TUEFSQUJMRV9NQVAxNQkJMHgxNTIyVQogI2RlZmluZSBVREZfTUVUQURBVEFfTUFQMjUJCTB4MjUxMVUKIAorI2RlZmluZSBVREZfSU5WQUxJRF9NT0RFCQkoKG1vZGVfdCktMSkKKwogI3ByYWdtYSBwYWNrKDEpIC8qIFhYWChoY2gpOiBXaHk/ICBUaGlzIGZpbGUganVzdCBkZWZpbmVzIGluLWNvcmUgc3RydWN0dXJlcyAqLwogCiBzdHJ1Y3QgdWRmX21ldGFfZGF0YSB7CkBAIC0xMTQsNyArMTE3LDcgQEAKIAogCS8qIFNlY3RvciBoZWFkZXJzICovCiAJX19zMzIJCQlzX3Nlc3Npb247Ci0JX191MzIJCQlzX2FuY2hvclszXTsKKwlfX3UzMgkJCXNfYW5jaG9yOwogCV9fdTMyCQkJc19sYXN0X2Jsb2NrOwogCiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSpzX2x2aWRfYmg7CkBAIC0xMjMsNiArMTI2LDggQEAKIAltb2RlX3QJCQlzX3VtYXNrOwogCWdpZF90CQkJc19naWQ7CiAJdWlkX3QJCQlzX3VpZDsKKwltb2RlX3QJCQlzX2Ztb2RlOworCW1vZGVfdAkJCXNfZG1vZGU7CiAKIAkvKiBSb290IEluZm8gKi8KIAlzdHJ1Y3QgdGltZXNwZWMJCXNfcmVjb3JkX3RpbWU7CkBAIC0xNDMsNiArMTQ4LDggQEAKIAlzdHJ1Y3QgaW5vZGUJCSpzX3ZhdF9pbm9kZTsKIAogCXN0cnVjdCBtdXRleAkJc19hbGxvY19tdXRleDsKKwkvKiBQcm90ZWN0ZWQgYnkgc19hbGxvY19tdXRleCAqLworCXVuc2lnbmVkIGludAkJc19sdmlkX2RpcnR5OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdWRmX3NiX2luZm8gKlVERl9TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmgKaW5kZXggOGVjODY1ZC4uY2FjNTFiNyAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZmRlY2wuaAorKysgYi9mcy91ZGYvdWRmZGVjbC5oCkBAIC02MiwxMCArNjIsOCBAQAogCQlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSB1ZGZfZ2V0X2xiX3BibG9jayhzYixsb2Msb2Zmc2V0KSB1ZGZfZ2V0X3BibG9jaygoc2IpLCAobG9jKS5sb2dpY2FsQmxvY2tOdW0sIChsb2MpLnBhcnRpdGlvblJlZmVyZW5jZU51bSwgKG9mZnNldCkpCi0KIC8qIGNvbXB1dGVzIHRhZyBjaGVja3N1bSAqLwotdTggdWRmX3RhZ19jaGVja3N1bShjb25zdCB0YWcgKnQpOwordTggdWRmX3RhZ19jaGVja3N1bShjb25zdCBzdHJ1Y3QgdGFnICp0KTsKIAogc3RydWN0IGRlbnRyeTsKIHN0cnVjdCBpbm9kZTsKQEAgLTk1LDcgKzkzLDcgQEAKIH07CiAKIHN0cnVjdCBnZW5lcmljX2Rlc2MgewotCXRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CiAJX19sZTMyCQl2b2xEZXNjU2VxTnVtOwogfTsKIApAQCAtMTA4LDExICsxMDYsMjIgQEAKIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJdWludDMyX3Qgb2Zmc2V0OwotCWtlcm5lbF9sYl9hZGRyIGJsb2NrOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBibG9jazsKIH07CiAKIC8qIHN1cGVyLmMgKi8KIGV4dGVybiB2b2lkIHVkZl93YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZGZfdXBkYXRlZF9sdmlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IFVERl9TQihzYiktPnNfbHZpZF9iaDsKKworCUJVR19PTighYmgpOworCVdBUk5fT05fT05DRSgoKHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqKQorCQkgICAgIGJoLT5iX2RhdGEpLT5pbnRlZ3JpdHlUeXBlICE9CisJCSAgICAgY3B1X3RvX2xlMzIoTFZJRF9JTlRFR1JJVFlfVFlQRV9PUEVOKSk7CisJc2ItPnNfZGlydCA9IDE7CisJVURGX1NCKHNiKS0+c19sdmlkX2RpcnR5ID0gMTsKK30KIAogLyogbmFtZWkuYyAqLwogZXh0ZXJuIGludCB1ZGZfd3JpdGVfZmkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVJZGVudERlc2MgKiwKQEAgLTEyNCw3ICsxMzMsNyBAQAogCQkgICAgIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBpbm9kZS5jICovCi1leHRlcm4gc3RydWN0IGlub2RlICp1ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwga2VybmVsX2xiX2FkZHIpOworZXh0ZXJuIHN0cnVjdCBpbm9kZSAqdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqKTsKIGV4dGVybiBpbnQgdWRmX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgdWRmX2V4cGFuZF9maWxlX2FkaW5pY2Ioc3RydWN0IGlub2RlICosIGludCwgaW50ICopOwogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX2V4cGFuZF9kaXJfYWRpbmljYihzdHJ1Y3QgaW5vZGUgKiwgaW50ICosIGludCAqKTsKQEAgLTEzNiwxOSArMTQ1LDE5IEBACiBleHRlcm4gaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGV4dGVybiBsb25nIHVkZl9ibG9ja19tYXAoc3RydWN0IGlub2RlICosIHNlY3Rvcl90KTsKIGV4dGVybiBpbnQgdWRmX2V4dGVuZF9maWxlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosCi0JCQkgICBrZXJuZWxfbG9uZ19hZCAqLCBzZWN0b3JfdCk7CisJCQkgICBzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgKiwgc2VjdG9yX3QpOwogZXh0ZXJuIGludDhfdCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLAotCQkJIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHNlY3Rvcl90ICopOworCQkJIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCBzZWN0b3JfdCAqKTsKIGV4dGVybiBpbnQ4X3QgdWRmX2FkZF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosCi0JCQkgICBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QsIGludCk7CisJCQkgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QsIGludCk7CiBleHRlcm4gaW50OF90IHVkZl93cml0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosCi0JCQkgICAgIGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwgaW50KTsKKwkJCSAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90LCBpbnQpOwogZXh0ZXJuIGludDhfdCB1ZGZfZGVsZXRlX2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sCi0JCQkgICAgICBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QpOworCQkJICAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCk7CiBleHRlcm4gaW50OF90IHVkZl9uZXh0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwKLQkJCSAgICBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCBpbnQpOworCQkJICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCBpbnQpOwogZXh0ZXJuIGludDhfdCB1ZGZfY3VycmVudF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosCi0JCQkgICAgICAga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgaW50KTsKKwkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgaW50KTsKIAogLyogbWlzYy5jICovCiBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfdGdldGJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKQEAgLTE2MCw3ICsxNjksNyBAQAogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3JlYWRfdGFnZ2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1aW50MzJfdCwKIAkJCQkJICAgdWludDMyX3QsIHVpbnQxNl90ICopOwogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3JlYWRfcHRhZ2dlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwKLQkJCQkJICAgIGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwKKwkJCQkJICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCwKIAkJCQkJICAgIHVpbnQxNl90ICopOwogZXh0ZXJuIHZvaWQgdWRmX3VwZGF0ZV90YWcoY2hhciAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgdWRmX25ld190YWcoY2hhciAqLCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MzJfdCwgaW50KTsKQEAgLTE4Miw2ICsxOTEsMTQgQEAKIAkJCQkJICB1aW50MzJfdCk7CiBleHRlcm4gaW50IHVkZl9yZWxvY2F0ZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICosIGxvbmcsIGxvbmcgKik7CiAKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK3VkZl9nZXRfbGJfcGJsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqbG9jLAorCQkgIHVpbnQzMl90IG9mZnNldCkKK3sKKwlyZXR1cm4gdWRmX2dldF9wYmxvY2soc2IsIGxvYy0+bG9naWNhbEJsb2NrTnVtLAorCQkJbG9jLT5wYXJ0aXRpb25SZWZlcmVuY2VOdW0sIG9mZnNldCk7Cit9CisKIC8qIHVuaWNvZGUuYyAqLwogZXh0ZXJuIGludCB1ZGZfZ2V0X2ZpbGVuYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1aW50OF90ICosIHVpbnQ4X3QgKiwgaW50KTsKIGV4dGVybiBpbnQgdWRmX3B1dF9maWxlbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgdWludDhfdCAqLCB1aW50OF90ICosCkBAIC0yMDAsNyArMjE3LDcgQEAKIAogLyogYmFsbG9jLmMgKi8KIGV4dGVybiB2b2lkIHVkZl9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGlub2RlICosCi0JCQkgICAga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LCB1aW50MzJfdCk7CisJCQkgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90LCB1aW50MzJfdCk7CiBleHRlcm4gaW50IHVkZl9wcmVhbGxvY19ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBpbm9kZSAqLCB1aW50MTZfdCwKIAkJCSAgICAgICB1aW50MzJfdCwgdWludDMyX3QpOwogZXh0ZXJuIGludCB1ZGZfbmV3X2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgaW5vZGUgKiwgdWludDE2X3QsCkBAIC0yMTQsMTYgKzIzMSwxNiBAQAogCQkJCQkJc3RydWN0IHVkZl9maWxlaWRlbnRfYmggKiwKIAkJCQkJCXN0cnVjdCBmaWxlSWRlbnREZXNjICosCiAJCQkJCQlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosCi0JCQkJCQlrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLAorCQkJCQkJc3RydWN0IGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosCiAJCQkJCQlzZWN0b3JfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqdWRmX2dldF9maWxlaWRlbnQodm9pZCAqYnVmZmVyLCBpbnQgYnVmc2l6ZSwKIAkJCQkJICAgICAgIGludCAqb2Zmc2V0KTsKLWV4dGVybiBsb25nX2FkICp1ZGZfZ2V0X2ZpbGVsb25nYWQodWludDhfdCAqLCBpbnQsIHVpbnQzMl90ICosIGludCk7Ci1leHRlcm4gc2hvcnRfYWQgKnVkZl9nZXRfZmlsZXNob3J0YWQodWludDhfdCAqLCBpbnQsIHVpbnQzMl90ICosIGludCk7CitleHRlcm4gc3RydWN0IGxvbmdfYWQgKnVkZl9nZXRfZmlsZWxvbmdhZCh1aW50OF90ICosIGludCwgdWludDMyX3QgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3Qgc2hvcnRfYWQgKnVkZl9nZXRfZmlsZXNob3J0YWQodWludDhfdCAqLCBpbnQsIHVpbnQzMl90ICosIGludCk7CiAKIC8qIHVkZnRpbWUuYyAqLwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyAqdWRmX2Rpc2tfc3RhbXBfdG9fdGltZShzdHJ1Y3QgdGltZXNwZWMgKmRlc3QsCi0JCQkJCQl0aW1lc3RhbXAgc3JjKTsKLWV4dGVybiB0aW1lc3RhbXAgKnVkZl90aW1lX3RvX2Rpc2tfc3RhbXAodGltZXN0YW1wICpkZXN0LCBzdHJ1Y3QgdGltZXNwZWMgc3JjKTsKKwkJCQkJCXN0cnVjdCB0aW1lc3RhbXAgc3JjKTsKK2V4dGVybiBzdHJ1Y3QgdGltZXN0YW1wICp1ZGZfdGltZV90b19kaXNrX3N0YW1wKHN0cnVjdCB0aW1lc3RhbXAgKmRlc3QsIHN0cnVjdCB0aW1lc3BlYyBzcmMpOwogCiAjZW5kaWYJCQkJLyogX19VREZfREVDTF9IICovCmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmZW5kLmggYi9mcy91ZGYvdWRmZW5kLmgKaW5kZXggNDg5ZjUyZi4uNmE5ZjNhOSAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZmVuZC5oCisrKyBiL2ZzL3VkZi91ZGZlbmQuaApAQCAtNCw5ICs0LDkgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKLXN0YXRpYyBpbmxpbmUga2VybmVsX2xiX2FkZHIgbGVsYl90b19jcHUobGJfYWRkciBpbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxlbGJfdG9fY3B1KHN0cnVjdCBsYl9hZGRyIGluKQogewotCWtlcm5lbF9sYl9hZGRyIG91dDsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgb3V0OwogCiAJb3V0LmxvZ2ljYWxCbG9ja051bSA9IGxlMzJfdG9fY3B1KGluLmxvZ2ljYWxCbG9ja051bSk7CiAJb3V0LnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IGxlMTZfdG9fY3B1KGluLnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CkBAIC0xNCw5ICsxNCw5IEBACiAJcmV0dXJuIG91dDsKIH0KIAotc3RhdGljIGlubGluZSBsYl9hZGRyIGNwdV90b19sZWxiKGtlcm5lbF9sYl9hZGRyIGluKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbGJfYWRkciBjcHVfdG9fbGVsYihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgaW4pCiB7Ci0JbGJfYWRkciBvdXQ7CisJc3RydWN0IGxiX2FkZHIgb3V0OwogCiAJb3V0LmxvZ2ljYWxCbG9ja051bSA9IGNwdV90b19sZTMyKGluLmxvZ2ljYWxCbG9ja051bSk7CiAJb3V0LnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IGNwdV90b19sZTE2KGluLnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CkBAIC0yNCw5ICsyNCw5IEBACiAJcmV0dXJuIG91dDsKIH0KIAotc3RhdGljIGlubGluZSBzaG9ydF9hZCBsZXNhX3RvX2NwdShzaG9ydF9hZCBpbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNob3J0X2FkIGxlc2FfdG9fY3B1KHN0cnVjdCBzaG9ydF9hZCBpbikKIHsKLQlzaG9ydF9hZCBvdXQ7CisJc3RydWN0IHNob3J0X2FkIG91dDsKIAogCW91dC5leHRMZW5ndGggPSBsZTMyX3RvX2NwdShpbi5leHRMZW5ndGgpOwogCW91dC5leHRQb3NpdGlvbiA9IGxlMzJfdG9fY3B1KGluLmV4dFBvc2l0aW9uKTsKQEAgLTM0LDkgKzM0LDkgQEAKIAlyZXR1cm4gb3V0OwogfQogCi1zdGF0aWMgaW5saW5lIHNob3J0X2FkIGNwdV90b19sZXNhKHNob3J0X2FkIGluKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2hvcnRfYWQgY3B1X3RvX2xlc2Eoc3RydWN0IHNob3J0X2FkIGluKQogewotCXNob3J0X2FkIG91dDsKKwlzdHJ1Y3Qgc2hvcnRfYWQgb3V0OwogCiAJb3V0LmV4dExlbmd0aCA9IGNwdV90b19sZTMyKGluLmV4dExlbmd0aCk7CiAJb3V0LmV4dFBvc2l0aW9uID0gY3B1X3RvX2xlMzIoaW4uZXh0UG9zaXRpb24pOwpAQCAtNDQsOSArNDQsOSBAQAogCXJldHVybiBvdXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUga2VybmVsX2xvbmdfYWQgbGVsYV90b19jcHUobG9uZ19hZCBpbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGtlcm5lbF9sb25nX2FkIGxlbGFfdG9fY3B1KHN0cnVjdCBsb25nX2FkIGluKQogewotCWtlcm5lbF9sb25nX2FkIG91dDsKKwlzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgb3V0OwogCiAJb3V0LmV4dExlbmd0aCA9IGxlMzJfdG9fY3B1KGluLmV4dExlbmd0aCk7CiAJb3V0LmV4dExvY2F0aW9uID0gbGVsYl90b19jcHUoaW4uZXh0TG9jYXRpb24pOwpAQCAtNTQsOSArNTQsOSBAQAogCXJldHVybiBvdXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZ19hZCBjcHVfdG9fbGVsYShrZXJuZWxfbG9uZ19hZCBpbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvbmdfYWQgY3B1X3RvX2xlbGEoc3RydWN0IGtlcm5lbF9sb25nX2FkIGluKQogewotCWxvbmdfYWQgb3V0OworCXN0cnVjdCBsb25nX2FkIG91dDsKIAogCW91dC5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihpbi5leHRMZW5ndGgpOwogCW91dC5leHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKGluLmV4dExvY2F0aW9uKTsKQEAgLTY0LDkgKzY0LDkgQEAKIAlyZXR1cm4gb3V0OwogfQogCi1zdGF0aWMgaW5saW5lIGtlcm5lbF9leHRlbnRfYWQgbGVlYV90b19jcHUoZXh0ZW50X2FkIGluKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qga2VybmVsX2V4dGVudF9hZCBsZWVhX3RvX2NwdShzdHJ1Y3QgZXh0ZW50X2FkIGluKQogewotCWtlcm5lbF9leHRlbnRfYWQgb3V0OworCXN0cnVjdCBrZXJuZWxfZXh0ZW50X2FkIG91dDsKIAogCW91dC5leHRMZW5ndGggPSBsZTMyX3RvX2NwdShpbi5leHRMZW5ndGgpOwogCW91dC5leHRMb2NhdGlvbiA9IGxlMzJfdG9fY3B1KGluLmV4dExvY2F0aW9uKTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZ0aW1lLmMgYi9mcy91ZGYvdWRmdGltZS5jCmluZGV4IDVmODExNjU1Li5iOGM4MjhjIDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmdGltZS5jCisrKyBiL2ZzL3VkZi91ZGZ0aW1lLmMKQEAgLTg1LDcgKzg1LDggQEAKICNkZWZpbmUgU0VDU19QRVJfSE9VUgkoNjAgKiA2MCkKICNkZWZpbmUgU0VDU19QRVJfREFZCShTRUNTX1BFUl9IT1VSICogMjQpCiAKLXN0cnVjdCB0aW1lc3BlYyAqdWRmX2Rpc2tfc3RhbXBfdG9fdGltZShzdHJ1Y3QgdGltZXNwZWMgKmRlc3QsIHRpbWVzdGFtcCBzcmMpCitzdHJ1Y3QgdGltZXNwZWMgKgordWRmX2Rpc2tfc3RhbXBfdG9fdGltZShzdHJ1Y3QgdGltZXNwZWMgKmRlc3QsIHN0cnVjdCB0aW1lc3RhbXAgc3JjKQogewogCWludCB5ZGF5OwogCXUxNiB0eXBlQW5kVGltZXpvbmUgPSBsZTE2X3RvX2NwdShzcmMudHlwZUFuZFRpbWV6b25lKTsKQEAgLTExNiw3ICsxMTcsOCBAQAogCXJldHVybiBkZXN0OwogfQogCi10aW1lc3RhbXAgKnVkZl90aW1lX3RvX2Rpc2tfc3RhbXAodGltZXN0YW1wICpkZXN0LCBzdHJ1Y3QgdGltZXNwZWMgdHMpCitzdHJ1Y3QgdGltZXN0YW1wICoKK3VkZl90aW1lX3RvX2Rpc2tfc3RhbXAoc3RydWN0IHRpbWVzdGFtcCAqZGVzdCwgc3RydWN0IHRpbWVzcGVjIHRzKQogewogCWxvbmcgaW50IGRheXMsIHJlbSwgeTsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKmlwOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VuaWNvZGUuYyBiL2ZzL3VkZi91bmljb2RlLmMKaW5kZXggOWZkZjhjOS4uY2VmYThjOCAxMDA2NDQKLS0tIGEvZnMvdWRmL3VuaWNvZGUuYworKysgYi9mcy91ZGYvdW5pY29kZS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIHsKIAljb25zdCB1aW50OF90ICpvY3U7CiAJdWludDhfdCBjbXBfaWQsIG9jdV9sZW47Ci0JaW50IGk7CisJaW50IGksIGxlbjsKIAogCiAJb2N1X2xlbiA9IG9jdV9pLT51X2xlbjsKQEAgLTI3OSw4ICsyNzksMTMgQEAKIAkJaWYgKGNtcF9pZCA9PSAxNikKIAkJCWMgPSAoYyA8PCA4KSB8IG9jdVtpKytdOwogCi0JCXV0Zl9vLT51X2xlbiArPSBubHMtPnVuaTJjaGFyKGMsICZ1dGZfby0+dV9uYW1lW3V0Zl9vLT51X2xlbl0sCi0JCQkJCSAgICAgIFVERl9OQU1FX0xFTiAtIHV0Zl9vLT51X2xlbik7CisJCWxlbiA9IG5scy0+dW5pMmNoYXIoYywgJnV0Zl9vLT51X25hbWVbdXRmX28tPnVfbGVuXSwKKwkJCQkgICAgVURGX05BTUVfTEVOIC0gdXRmX28tPnVfbGVuKTsKKwkJLyogVmFsaWQgY2hhcmFjdGVyPyAqLworCQlpZiAobGVuID49IDApCisJCQl1dGZfby0+dV9sZW4gKz0gbGVuOworCQllbHNlCisJCQl1dGZfby0+dV9uYW1lW3V0Zl9vLT51X2xlbisrXSA9ICc/JzsKIAl9CiAJdXRmX28tPnVfY21wSUQgPSA4OwogCkBAIC0yOTAsNyArMjk1LDggQEAKIHN0YXRpYyBpbnQgdWRmX05MU3RvQ1MwKHN0cnVjdCBubHNfdGFibGUgKm5scywgZHN0cmluZyAqb2N1LCBzdHJ1Y3QgdXN0ciAqdW5pLAogCQkJaW50IGxlbmd0aCkKIHsKLQl1bnNpZ25lZCBsZW4sIGksIG1heF92YWw7CisJaW50IGxlbjsKKwl1bnNpZ25lZCBpLCBtYXhfdmFsOwogCXVpbnQxNl90IHVuaV9jaGFyOwogCWludCB1X2xlbjsKIApAQCAtMzAyLDggKzMwOCwxMyBAQAogCXVfbGVuID0gMFU7CiAJZm9yIChpID0gMFU7IGkgPCB1bmktPnVfbGVuOyBpKyspIHsKIAkJbGVuID0gbmxzLT5jaGFyMnVuaSgmdW5pLT51X25hbWVbaV0sIHVuaS0+dV9sZW4gLSBpLCAmdW5pX2NoYXIpOwotCQlpZiAobGVuIDw9IDApCisJCWlmICghbGVuKQogCQkJY29udGludWU7CisJCS8qIEludmFsaWQgY2hhcmFjdGVyLCBkZWFsIHdpdGggaXQgKi8KKwkJaWYgKGxlbiA8IDApIHsKKwkJCWxlbiA9IDE7CisJCQl1bmlfY2hhciA9ICc/JzsKKwkJfQogCiAJCWlmICh1bmlfY2hhciA+IG1heF92YWwpIHsKIAkJCW1heF92YWwgPSAweGZmZmZVOwpAQCAtMzI0LDM0ICszMzUsNDMgQEAKIGludCB1ZGZfZ2V0X2ZpbGVuYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVpbnQ4X3QgKnNuYW1lLCB1aW50OF90ICpkbmFtZSwKIAkJICAgICBpbnQgZmxlbikKIHsKLQlzdHJ1Y3QgdXN0ciBmaWxlbmFtZSwgdW5pZmlsZW5hbWU7Ci0JaW50IGxlbjsKKwlzdHJ1Y3QgdXN0ciAqZmlsZW5hbWUsICp1bmlmaWxlbmFtZTsKKwlpbnQgbGVuID0gMDsKIAotCWlmICh1ZGZfYnVpbGRfdXN0cl9leGFjdCgmdW5pZmlsZW5hbWUsIHNuYW1lLCBmbGVuKSkKKwlmaWxlbmFtZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c3RyKSwgR0ZQX05PRlMpOworCWlmICghZmlsZW5hbWUpCiAJCXJldHVybiAwOwogCisJdW5pZmlsZW5hbWUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXN0ciksIEdGUF9OT0ZTKTsKKwlpZiAoIXVuaWZpbGVuYW1lKQorCQlnb3RvIG91dDE7CisKKwlpZiAodWRmX2J1aWxkX3VzdHJfZXhhY3QodW5pZmlsZW5hbWUsIHNuYW1lLCBmbGVuKSkKKwkJZ290byBvdXQyOworCiAJaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19VVEY4KSkgewotCQlpZiAoIXVkZl9DUzB0b1VURjgoJmZpbGVuYW1lLCAmdW5pZmlsZW5hbWUpKSB7CisJCWlmICghdWRmX0NTMHRvVVRGOChmaWxlbmFtZSwgdW5pZmlsZW5hbWUpKSB7CiAJCQl1ZGZfZGVidWcoIkZhaWxlZCBpbiB1ZGZfZ2V0X2ZpbGVuYW1lOiBzbmFtZSA9ICVzXG4iLAogCQkJCSAgc25hbWUpOwotCQkJcmV0dXJuIDA7CisJCQlnb3RvIG91dDI7CiAJCX0KIAl9IGVsc2UgaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19OTFNfTUFQKSkgewotCQlpZiAoIXVkZl9DUzB0b05MUyhVREZfU0Ioc2IpLT5zX25sc19tYXAsICZmaWxlbmFtZSwKLQkJCQkgICZ1bmlmaWxlbmFtZSkpIHsKKwkJaWYgKCF1ZGZfQ1MwdG9OTFMoVURGX1NCKHNiKS0+c19ubHNfbWFwLCBmaWxlbmFtZSwKKwkJCQkgIHVuaWZpbGVuYW1lKSkgewogCQkJdWRmX2RlYnVnKCJGYWlsZWQgaW4gdWRmX2dldF9maWxlbmFtZTogc25hbWUgPSAlc1xuIiwKIAkJCQkgIHNuYW1lKTsKLQkJCXJldHVybiAwOworCQkJZ290byBvdXQyOwogCQl9CiAJfSBlbHNlCi0JCXJldHVybiAwOworCQlnb3RvIG91dDI7CiAKLQlsZW4gPSB1ZGZfdHJhbnNsYXRlX3RvX2xpbnV4KGRuYW1lLCBmaWxlbmFtZS51X25hbWUsIGZpbGVuYW1lLnVfbGVuLAotCQkJCSAgICAgdW5pZmlsZW5hbWUudV9uYW1lLCB1bmlmaWxlbmFtZS51X2xlbik7Ci0JaWYgKGxlbikKLQkJcmV0dXJuIGxlbjsKLQotCXJldHVybiAwOworCWxlbiA9IHVkZl90cmFuc2xhdGVfdG9fbGludXgoZG5hbWUsIGZpbGVuYW1lLT51X25hbWUsIGZpbGVuYW1lLT51X2xlbiwKKwkJCQkgICAgIHVuaWZpbGVuYW1lLT51X25hbWUsIHVuaWZpbGVuYW1lLT51X2xlbik7CitvdXQyOgorCWtmcmVlKHVuaWZpbGVuYW1lKTsKK291dDE6CisJa2ZyZWUoZmlsZW5hbWUpOworCXJldHVybiBsZW47CiB9CiAKIGludCB1ZGZfcHV0X2ZpbGVuYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHVpbnQ4X3QgKnNuYW1lLApkaWZmIC0tZ2l0IGEvZnMvdWZzL3N1cGVyLmMgYi9mcy91ZnMvc3VwZXIuYwppbmRleCBlMWMxZmM1Li42MDM1OTI5IDEwMDY0NAotLS0gYS9mcy91ZnMvc3VwZXIuYworKysgYi9mcy91ZnMvc3VwZXIuYwpAQCAtMTI2OCw2ICsxMjY4LDcgQEAKIAlzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX2ZpcnN0ICp1c2IxOwogCXN0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfc2Vjb25kICp1c2IyOwogCXN0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfdGhpcmQgKnVzYjM7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlsb2NrX2tlcm5lbCgpOwogCkBAIC0xMjkwLDYgKzEyOTEsOCBAQAogCQk/IChidWYtPmZfYmZyZWUgLSAoKChsb25nKWJ1Zi0+Zl9ibG9ja3MgLyAxMDApICogdXNwaS0+c19taW5mcmVlKSkgOiAwOwogCWJ1Zi0+Zl9maWxlcyA9IHVzcGktPnNfbmNnICogdXNwaS0+c19pcGc7CiAJYnVmLT5mX25hbWVsZW4gPSBVRlNfTUFYTkFNTEVOOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCiAJdW5sb2NrX2tlcm5lbCgpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUgYi9mcy94ZnMvTWFrZWZpbGUKaW5kZXggYzNkYzQ5MS4uNjBmMTA3ZSAxMDA2NDQKLS0tIGEvZnMveGZzL01ha2VmaWxlCisrKyBiL2ZzL3hmcy9NYWtlZmlsZQpAQCAtMzMsNiArMzMsNyBAQAogCQkJCSAgIHhmc19xbV9zeXNjYWxscy5vIFwKIAkJCQkgICB4ZnNfcW1fYmh2Lm8gXAogCQkJCSAgIHhmc19xbS5vKQoreGZzLSQoQ09ORklHX1hGU19RVU9UQSkJCSs9IGxpbnV4LTIuNi94ZnNfcXVvdGFvcHMubwogCiBpZmVxICgkKENPTkZJR19YRlNfUVVPVEEpLHkpCiB4ZnMtJChDT05GSUdfUFJPQ19GUykJCSs9IHF1b3RhL3hmc19xbV9zdGF0cy5vCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L211dGV4LmggYi9mcy94ZnMvbGludXgtMi42L211dGV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhODhkNTYuLjAwMDAwMDAKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi9tdXRleC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzLDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2lmbmRlZiBfX1hGU19TVVBQT1JUX01VVEVYX0hfXwotI2RlZmluZSBfX1hGU19TVVBQT1JUX01VVEVYX0hfXwotCi0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotdHlwZWRlZiBzdHJ1Y3QgbXV0ZXggbXV0ZXhfdDsKLQotI2VuZGlmIC8qIF9fWEZTX1NVUFBPUlRfTVVURVhfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggZGUzYTE5OC4uYzEzZjY3MyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtMTYyMyw0ICsxNjIzLDUgQEAKIAkuYm1hcAkJCT0geGZzX3ZtX2JtYXAsCiAJLmRpcmVjdF9JTwkJPSB4ZnNfdm1fZGlyZWN0X0lPLAogCS5taWdyYXRlcGFnZQkJPSBidWZmZXJfbWlncmF0ZV9wYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgID0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IDRiZDExMjMuLmQwYjQ5OTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgorI2luY2x1ZGUgInhmc19pb2N0bC5oIgogI2luY2x1ZGUgInhmc19idHJlZS5oIgogI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfcnRhbGxvYy5oIgpAQCAtNzgsOTIgKzc5LDc0IEBACiAJaW50CQkJaHNpemU7CiAJeGZzX2hhbmRsZV90CQloYW5kbGU7CiAJc3RydWN0IGlub2RlCQkqaW5vZGU7CisJc3RydWN0IGZpbGUJCSpmaWxlID0gTlVMTDsKKwlzdHJ1Y3QgcGF0aAkJcGF0aDsKKwlpbnQJCQllcnJvcjsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcDsKIAotCW1lbXNldCgoY2hhciAqKSZoYW5kbGUsIDAsIHNpemVvZihoYW5kbGUpKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBYRlNfSU9DX1BBVEhfVE9fRlNIQU5ETEU6Ci0JY2FzZSBYRlNfSU9DX1BBVEhfVE9fSEFORExFOiB7Ci0JCXN0cnVjdCBwYXRoIHBhdGg7Ci0JCWludCBlcnJvciA9IHVzZXJfbHBhdGgoKGNvbnN0IGNoYXIgX191c2VyICopaHJlcS0+cGF0aCwgJnBhdGgpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0KLQkJQVNTRVJUKHBhdGguZGVudHJ5KTsKLQkJQVNTRVJUKHBhdGguZGVudHJ5LT5kX2lub2RlKTsKLQkJaW5vZGUgPSBpZ3JhYihwYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0JCXBhdGhfcHV0KCZwYXRoKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBYRlNfSU9DX0ZEX1RPX0hBTkRMRTogewotCQlzdHJ1Y3QgZmlsZQkqZmlsZTsKLQorCWlmIChjbWQgPT0gWEZTX0lPQ19GRF9UT19IQU5ETEUpIHsKIAkJZmlsZSA9IGZnZXQoaHJlcS0+ZmQpOwogCQlpZiAoIWZpbGUpCi0JCSAgICByZXR1cm4gLUVCQURGOwotCi0JCUFTU0VSVChmaWxlLT5mX3BhdGguZGVudHJ5KTsKLQkJQVNTRVJUKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCQlpbm9kZSA9IGlncmFiKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCQlmcHV0KGZpbGUpOwotCQlicmVhazsKKwkJCXJldHVybiAtRUJBREY7CisJCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwl9IGVsc2UgeworCQllcnJvciA9IHVzZXJfbHBhdGgoKGNvbnN0IGNoYXIgX191c2VyICopaHJlcS0+cGF0aCwgJnBhdGgpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJCWlub2RlID0gcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJfQorCWlwID0gWEZTX0koaW5vZGUpOwogCi0JZGVmYXVsdDoKLQkJQVNTRVJUKDApOwotCQlyZXR1cm4gLVhGU19FUlJPUihFSU5WQUwpOwotCX0KKwkvKgorCSAqIFdlIGNhbiBvbmx5IGdlbmVyYXRlIGhhbmRsZXMgZm9yIGlub2RlcyByZXNpZGluZyBvbiBhIFhGUyBmaWxlc3lzdGVtLAorCSAqIGFuZCBvbmx5IGZvciByZWd1bGFyIGZpbGVzLCBkaXJlY3RvcmllcyBvciBzeW1ib2xpYyBsaW5rcy4KKwkgKi8KKwllcnJvciA9IC1FSU5WQUw7CisJaWYgKGlub2RlLT5pX3NiLT5zX21hZ2ljICE9IFhGU19TQl9NQUdJQykKKwkJZ290byBvdXRfcHV0OwogCi0JaWYgKGlub2RlLT5pX3NiLT5zX21hZ2ljICE9IFhGU19TQl9NQUdJQykgewotCQkvKiB3ZSdyZSBub3QgaW4gWEZTIGFueW1vcmUsIFRvdG8gKi8KLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiAtWEZTX0VSUk9SKEVJTlZBTCk7Ci0JfQorCWVycm9yID0gLUVCQURGOworCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgorCSAgICAhU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJgorCSAgICAhU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJZ290byBvdXRfcHV0OwogCi0Jc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7Ci0JY2FzZSBTX0lGUkVHOgotCWNhc2UgU19JRkRJUjoKLQljYXNlIFNfSUZMTks6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gLVhGU19FUlJPUihFQkFERik7Ci0JfQogCi0JLyogbm93IHdlIGNhbiBncmFiIHRoZSBmc2lkICovCi0JbWVtY3B5KCZoYW5kbGUuaGFfZnNpZCwgWEZTX0koaW5vZGUpLT5pX21vdW50LT5tX2ZpeGVkZnNpZCwKLQkJCXNpemVvZih4ZnNfZnNpZF90KSk7Ci0JaHNpemUgPSBzaXplb2YoeGZzX2ZzaWRfdCk7CisJbWVtY3B5KCZoYW5kbGUuaGFfZnNpZCwgaXAtPmlfbW91bnQtPm1fZml4ZWRmc2lkLCBzaXplb2YoeGZzX2ZzaWRfdCkpOwogCi0JaWYgKGNtZCAhPSBYRlNfSU9DX1BBVEhfVE9fRlNIQU5ETEUpIHsKLQkJeGZzX2lub2RlX3QJKmlwID0gWEZTX0koaW5vZGUpOworCWlmIChjbWQgPT0gWEZTX0lPQ19QQVRIX1RPX0ZTSEFORExFKSB7CisJCS8qCisJCSAqIFRoaXMgaGFuZGxlIG9ubHkgY29udGFpbnMgYW4gZnNpZCwgemVybyB0aGUgcmVzdC4KKwkJICovCisJCW1lbXNldCgmaGFuZGxlLmhhX2ZpZCwgMCwgc2l6ZW9mKGhhbmRsZS5oYV9maWQpKTsKKwkJaHNpemUgPSBzaXplb2YoeGZzX2ZzaWRfdCk7CisJfSBlbHNlIHsKIAkJaW50CQlsb2NrX21vZGU7CiAKLQkJLyogbmVlZCB0byBnZXQgYWNjZXNzIHRvIHRoZSB4ZnNfaW5vZGUgdG8gcmVhZCB0aGUgZ2VuZXJhdGlvbiAqLwogCQlsb2NrX21vZGUgPSB4ZnNfaWxvY2tfbWFwX3NoYXJlZChpcCk7Ci0KLQkJLyogZmlsbCBpbiBmaWQgc2VjdGlvbiBvZiBoYW5kbGUgZnJvbSBpbm9kZSAqLwogCQloYW5kbGUuaGFfZmlkLmZpZF9sZW4gPSBzaXplb2YoeGZzX2ZpZF90KSAtCiAJCQkJCXNpemVvZihoYW5kbGUuaGFfZmlkLmZpZF9sZW4pOwogCQloYW5kbGUuaGFfZmlkLmZpZF9wYWQgPSAwOwogCQloYW5kbGUuaGFfZmlkLmZpZF9nZW4gPSBpcC0+aV9kLmRpX2dlbjsKIAkJaGFuZGxlLmhhX2ZpZC5maWRfaW5vID0gaXAtPmlfaW5vOwotCiAJCXhmc19pdW5sb2NrX21hcF9zaGFyZWQoaXAsIGxvY2tfbW9kZSk7CiAKIAkJaHNpemUgPSBYRlNfSFNJWkUoaGFuZGxlKTsKIAl9CiAKLQkvKiBub3cgY29weSBvdXIgaGFuZGxlIGludG8gdGhlIHVzZXIgYnVmZmVyICYgd3JpdGUgb3V0IHRoZSBzaXplICovCisJZXJyb3IgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIoaHJlcS0+b2hhbmRsZSwgJmhhbmRsZSwgaHNpemUpIHx8Ci0JICAgIGNvcHlfdG9fdXNlcihocmVxLT5vaGFuZGxlbiwgJmhzaXplLCBzaXplb2YoX19zMzIpKSkgewotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKLQl9CisJICAgIGNvcHlfdG9fdXNlcihocmVxLT5vaGFuZGxlbiwgJmhzaXplLCBzaXplb2YoX19zMzIpKSkKKwkJZ290byBvdXRfcHV0OwogCi0JaXB1dChpbm9kZSk7Ci0JcmV0dXJuIDA7CisJZXJyb3IgPSAwOworCisgb3V0X3B1dDoKKwlpZiAoY21kID09IFhGU19JT0NfRkRfVE9fSEFORExFKQorCQlmcHV0KGZpbGUpOworCWVsc2UKKwkJcGF0aF9wdXQoJnBhdGgpOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCA3YWE1M2ZlLi42MDc1MzgyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC0yMTEsOCArMjExLDEzIEBACiAJICogSXJpeCB1c2VzIE1pc3NlZCdlbSdWIHNwbGl0LCBidXQgZG9lc24ndCB3YW50IHRvIHNlZQogCSAqIHRoZSB1cHBlciA1IGJpdHMgb2YgKDE0Yml0KSBtYWpvci4KIAkgKi8KLQlpZiAodW5saWtlbHkoIXN5c3ZfdmFsaWRfZGV2KHJkZXYpIHx8IE1BSk9SKHJkZXYpICYgfjB4MWZmKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKFNfSVNDSFIobW9kZSkgfHwgU19JU0JMSyhtb2RlKSkgeworCQlpZiAodW5saWtlbHkoIXN5c3ZfdmFsaWRfZGV2KHJkZXYpIHx8IE1BSk9SKHJkZXYpICYgfjB4MWZmKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZGV2ID0gc3lzdl9lbmNvZGVfZGV2KHJkZXYpOworCX0gZWxzZSB7CisJCXJkZXYgPSAwOworCX0KIAogCWlmICh0ZXN0X2RlZmF1bHRfYWNsICYmIHRlc3RfZGVmYXVsdF9hY2woZGlyKSkgewogCQlpZiAoIV9BQ0xfQUxMT0MoZGVmYXVsdF9hY2wpKSB7CkBAIC0yMjQsMjggKzIyOSwxMSBAQAogCQl9CiAJfQogCi0JeGZzX2RlbnRyeV90b19uYW1lKCZuYW1lLCBkZW50cnkpOwotCiAJaWYgKElTX1BPU0lYQUNMKGRpcikgJiYgIWRlZmF1bHRfYWNsKQotCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAotCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgewotCWNhc2UgU19JRkNIUjoKLQljYXNlIFNfSUZCTEs6Ci0JY2FzZSBTX0lGSUZPOgotCWNhc2UgU19JRlNPQ0s6Ci0JCXJkZXYgPSBzeXN2X2VuY29kZV9kZXYocmRldik7Ci0JY2FzZSBTX0lGUkVHOgotCQllcnJvciA9IHhmc19jcmVhdGUoWEZTX0koZGlyKSwgJm5hbWUsIG1vZGUsIHJkZXYsICZpcCwgTlVMTCk7Ci0JCWJyZWFrOwotCWNhc2UgU19JRkRJUjoKLQkJZXJyb3IgPSB4ZnNfbWtkaXIoWEZTX0koZGlyKSwgJm5hbWUsIG1vZGUsICZpcCwgTlVMTCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVycm9yID0gRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KKwl4ZnNfZGVudHJ5X3RvX25hbWUoJm5hbWUsIGRlbnRyeSk7CisJZXJyb3IgPSB4ZnNfY3JlYXRlKFhGU19JKGRpciksICZuYW1lLCBtb2RlLCByZGV2LCAmaXAsIE5VTEwpOwogCWlmICh1bmxpa2VseShlcnJvcikpCiAJCWdvdG8gb3V0X2ZyZWVfYWNsOwogCkBAIC00MTYsNyArNDA0LDcgQEAKIAltb2RlX3QJCW1vZGU7CiAKIAltb2RlID0gU19JRkxOSyB8Ci0JCShpcml4X3N5bWxpbmtfbW9kZSA/IDA3NzcgJiB+Y3VycmVudC0+ZnMtPnVtYXNrIDogU19JUldYVUdPKTsKKwkJKGlyaXhfc3ltbGlua19tb2RlID8gMDc3NyAmIH5jdXJyZW50X3VtYXNrKCkgOiBTX0lSV1hVR08pOwogCXhmc19kZW50cnlfdG9fbmFtZSgmbmFtZSwgZGVudHJ5KTsKIAogCWVycm9yID0geGZzX3N5bWxpbmsoWEZTX0koZGlyKSwgJm5hbWUsIHN5bW5hbWUsIG1vZGUsICZjaXAsIE5VTEwpOwpAQCAtNTUzLDkgKzU0MSw2IEBACiAJc3RhdC0+dWlkID0gaXAtPmlfZC5kaV91aWQ7CiAJc3RhdC0+Z2lkID0gaXAtPmlfZC5kaV9naWQ7CiAJc3RhdC0+aW5vID0gaXAtPmlfaW5vOwotI2lmIFhGU19CSUdfSU5VTVMKLQlzdGF0LT5pbm8gKz0gbXAtPm1faW5vYWRkOwotI2VuZGlmCiAJc3RhdC0+YXRpbWUgPSBpbm9kZS0+aV9hdGltZTsKIAlzdGF0LT5tdGltZS50dl9zZWMgPSBpcC0+aV9kLmRpX210aW1lLnRfc2VjOwogCXN0YXQtPm10aW1lLnR2X25zZWMgPSBpcC0+aV9kLmRpX210aW1lLnRfbnNlYzsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCmluZGV4IDUwNzQ5MmQuLmY2NWE1M2YgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaApAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGttZW0uaD4KICNpbmNsdWRlIDxtcmxvY2suaD4KICNpbmNsdWRlIDxzdi5oPgotI2luY2x1ZGUgPG11dGV4Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSA8c3VwcG9ydC9rdHJhY2UuaD4KQEAgLTUxLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xNDcsMTcgKzE0Nyw2IEBACiAjZGVmaW5lIFNZTkNIUk9OSVpFKCkJYmFycmllcigpCiAjZGVmaW5lIF9fcmV0dXJuX2FkZHJlc3MgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApCiAKLS8qCi0gKiBJUklYIChCU0QpIHF1b3RhY3RsIG1ha2VzIHVzZSBvZiBzZXBhcmF0ZSBjb21tYW5kcyBmb3IgdXNlci9ncm91cCwKLSAqIHdoZXJlYXMgb24gTGludXggdGhlIHN5c2NhbGwgZW5jb2RlcyB0aGlzIGluZm9ybWF0aW9uIGludG8gdGhlIGNtZAotICogZmllbGQgKHNlZSB0aGUgUUNNRCBtYWNybyBpbiBxdW90YS5oKS4gIFRoZXNlIG1hY3JvcyBoZWxwIGtlZXAgdGhlCi0gKiBjb2RlIHBvcnRhYmxlIC0gdGhleSBhcmUgbm90IHZpc2libGUgZnJvbSB0aGUgc3lzY2FsbCBpbnRlcmZhY2UuCi0gKi8KLSNkZWZpbmUgUV9YU0VUR1FMSU0JWFFNX0NNRCg4KQkvKiBzZXQgZ3JvdXBzIGRpc2sgbGltaXRzICovCi0jZGVmaW5lIFFfWEdFVEdRVU9UQQlYUU1fQ01EKDkpCS8qIGdldCBncm91cHMgZGlzayBsaW1pdHMgKi8KLSNkZWZpbmUgUV9YU0VUUFFMSU0JWFFNX0NNRCgxMCkJLyogc2V0IHByb2plY3RzIGRpc2sgbGltaXRzICovCi0jZGVmaW5lIFFfWEdFVFBRVU9UQQlYUU1fQ01EKDExKQkvKiBnZXQgcHJvamVjdHMgZGlzayBsaW1pdHMgKi8KLQogI2RlZmluZSBkZmx0cHJpZAkwCiAjZGVmaW5lIE1BWFBBVEhMRU4JMTAyNAogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGQ5YTYzCi0tLSAvZGV2L251bGwKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgQ2hyaXN0b3BoIEhlbGx3aWcKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlICJ4ZnMuaCIKKyNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKKyNpbmNsdWRlICJ4ZnNfc2IuaCIKKyNpbmNsdWRlICJ4ZnNfaW51bS5oIgorI2luY2x1ZGUgInhmc19hZy5oIgorI2luY2x1ZGUgInhmc19tb3VudC5oIgorI2luY2x1ZGUgInhmc19xdW90YS5oIgorI2luY2x1ZGUgInhmc19sb2cuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKKyNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgorI2luY2x1ZGUgInhmc19pbm9kZS5oIgorI2luY2x1ZGUgInF1b3RhL3hmc19xbS5oIgorI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+CisKKworU1RBVElDIGludAoreGZzX3F1b3RhX3R5cGUoaW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBVU1JRVU9UQToKKwkJcmV0dXJuIFhGU19EUV9VU0VSOworCWNhc2UgR1JQUVVPVEE6CisJCXJldHVybiBYRlNfRFFfR1JPVVA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFhGU19EUV9QUk9KOworCX0KK30KKworU1RBVElDIGludAoreGZzX2ZzX3F1b3RhX3N5bmMoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKKwlpbnQJCQl0eXBlKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOworCisJaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJCXJldHVybiAtRU5PU1lTOworCXJldHVybiAteGZzX3N5bmNfaW5vZGVzKG1wLCBTWU5DX0RFTFdSSSk7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19mc19nZXRfeHN0YXRlKAorCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCisJc3RydWN0IGZzX3F1b3RhX3N0YXQJKmZxcykKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCWlmICghWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXR1cm4gLXhmc19xbV9zY2FsbF9nZXRxc3RhdChtcCwgZnFzKTsKK30KKworU1RBVElDIGludAoreGZzX2ZzX3NldF94c3RhdGUoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKKwl1bnNpZ25lZCBpbnQJCXVmbGFncywKKwlpbnQJCQlvcCkKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKwl1bnNpZ25lZCBpbnQJCWZsYWdzID0gMDsKKworCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKKwkJcmV0dXJuIC1FUk9GUzsKKwlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKHVmbGFncyAmIFhGU19RVU9UQV9VRFFfQUNDVCkKKwkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9BQ0NUOworCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfUERRX0FDQ1QpCisJCWZsYWdzIHw9IFhGU19QUVVPVEFfQUNDVDsKKwlpZiAodWZsYWdzICYgWEZTX1FVT1RBX0dEUV9BQ0NUKQorCQlmbGFncyB8PSBYRlNfR1FVT1RBX0FDQ1Q7CisJaWYgKHVmbGFncyAmIFhGU19RVU9UQV9VRFFfRU5GRCkKKwkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9FTkZEOworCWlmICh1ZmxhZ3MgJiAoWEZTX1FVT1RBX1BEUV9FTkZEfFhGU19RVU9UQV9HRFFfRU5GRCkpCisJCWZsYWdzIHw9IFhGU19PUVVPVEFfRU5GRDsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIFFfWFFVT1RBT046CisJCXJldHVybiAteGZzX3FtX3NjYWxsX3F1b3Rhb24obXAsIGZsYWdzKTsKKwljYXNlIFFfWFFVT1RBT0ZGOgorCQlpZiAoIVhGU19JU19RVU9UQV9PTihtcCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC14ZnNfcW1fc2NhbGxfcXVvdGFvZmYobXAsIGZsYWdzKTsKKwljYXNlIFFfWFFVT1RBUk06CisJCWlmIChYRlNfSVNfUVVPVEFfT04obXApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAteGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlcyhtcCwgZmxhZ3MpOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitTVEFUSUMgaW50Cit4ZnNfZnNfZ2V0X3hxdW90YSgKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAorCWludAkJCXR5cGUsCisJcWlkX3QJCQlpZCwKKwlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOworCisJaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJCXJldHVybiAtRU5PU1lTOworCWlmICghWEZTX0lTX1FVT1RBX09OKG1wKSkKKwkJcmV0dXJuIC1FU1JDSDsKKworCXJldHVybiAteGZzX3FtX3NjYWxsX2dldHF1b3RhKG1wLCBpZCwgeGZzX3F1b3RhX3R5cGUodHlwZSksIGZkcSk7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19mc19zZXRfeHF1b3RhKAorCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCisJaW50CQkJdHlwZSwKKwlxaWRfdAkJCWlkLAorCXN0cnVjdCBmc19kaXNrX3F1b3RhCSpmZHEpCit7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBYRlNfTShzYik7CisKKwlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybiAtRVJPRlM7CisJaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJCXJldHVybiAtRU5PU1lTOworCWlmICghWEZTX0lTX1FVT1RBX09OKG1wKSkKKwkJcmV0dXJuIC1FU1JDSDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gLXhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCBpZCwgeGZzX3F1b3RhX3R5cGUodHlwZSksIGZkcSk7Cit9CisKK3N0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnMgPSB7CisJLnF1b3RhX3N5bmMJCT0geGZzX2ZzX3F1b3RhX3N5bmMsCisJLmdldF94c3RhdGUJCT0geGZzX2ZzX2dldF94c3RhdGUsCisJLnNldF94c3RhdGUJCT0geGZzX2ZzX3NldF94c3RhdGUsCisJLmdldF94cXVvdGEJCT0geGZzX2ZzX2dldF94cXVvdGEsCisJLnNldF94cXVvdGEJCT0geGZzX2ZzX3NldF94cXVvdGEsCit9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggMzJhZTUwMi4uYmI2ODUyNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC02OCw3ICs2OCw2IEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogCi1zdGF0aWMgc3RydWN0IHF1b3RhY3RsX29wcyB4ZnNfcXVvdGFjdGxfb3BlcmF0aW9uczsKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB4ZnNfc3VwZXJfb3BlcmF0aW9uczsKIHN0YXRpYyBrbWVtX3pvbmVfdCAqeGZzX2lvZW5kX3pvbmU7CiBtZW1wb29sX3QgKnhmc19pb2VuZF9wb29sOwpAQCAtNzksNyArNzgsNiBAQAogI2RlZmluZSBNTlRPUFRfUlRERVYJInJ0ZGV2IgkJLyogcmVhbHRpbWUgSS9PIGRldmljZSAqLwogI2RlZmluZSBNTlRPUFRfQklPU0laRQkiYmlvc2l6ZSIJLyogbG9nMiBvZiBwcmVmZXJyZWQgYnVmZmVyZWQgaW8gc2l6ZSAqLwogI2RlZmluZSBNTlRPUFRfV1NZTkMJIndzeW5jIgkJLyogc2FmZS1tb2RlIG5mcyBjb21wYXRpYmxlIG1vdW50ICovCi0jZGVmaW5lIE1OVE9QVF9JTk82NAkiaW5vNjQiCQkvKiBmb3JjZSBpbm9kZXMgaW50byA2NC1iaXQgcmFuZ2UgKi8KICNkZWZpbmUgTU5UT1BUX05PQUxJR04JIm5vYWxpZ24iCS8qIHR1cm4gb2ZmIHN0cmlwZSBhbGlnbm1lbnQgKi8KICNkZWZpbmUgTU5UT1BUX1NXQUxMT0MJInN3YWxsb2MiCS8qIHR1cm4gb24gc3RyaXBlIHdpZHRoIGFsbG9jYXRpb24gKi8KICNkZWZpbmUgTU5UT1BUX1NVTklUCSJzdW5pdCIJCS8qIGRhdGEgdm9sdW1lIHN0cmlwZSB1bml0ICovCkBAIC0xODAsNyArMTc4LDcgQEAKIAlpbnQJCQlkc3dpZHRoID0gMDsKIAlpbnQJCQlpb3NpemUgPSAwOwogCWludAkJCWRtYXBpX2ltcGxpZXNfaWtlZXAgPSAxOwotCXVjaGFyX3QJCQlpb3NpemVsb2cgPSAwOworCV9fdWludDhfdAkJaW9zaXplbG9nID0gMDsKIAogCS8qCiAJICogQ29weSBiaW5hcnkgVkZTIG1vdW50IGZsYWdzIHdlIGFyZSBpbnRlcmVzdGVkIGluLgpAQCAtMjkxLDE2ICsyODksNiBAQAogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX09TWU5DSVNPU1lOQzsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX05PUkVDT1ZFUlkpKSB7CiAJCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfTk9SRUNPVkVSWTsKLQkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX0lOTzY0KSkgewotI2lmIFhGU19CSUdfSU5VTVMKLQkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9JTk82NDsKLQkJCW1wLT5tX2lub2FkZCA9IFhGU19JTk82NF9PRkZTRVQ7Ci0jZWxzZQotCQkJY21uX2VycihDRV9XQVJOLAotCQkJCSJYRlM6ICVzIG9wdGlvbiBub3QgYWxsb3dlZCBvbiB0aGlzIHN5c3RlbSIsCi0JCQkJdGhpc19jaGFyKTsKLQkJCXJldHVybiBFSU5WQUw7Ci0jZW5kaWYKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX05PQUxJR04pKSB7CiAJCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfTk9BTElHTjsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX1NXQUxMT0MpKSB7CkBAIC01MjksNyArNTE3LDYgQEAKIAkJLyogdGhlIGZldyBzaW1wbGUgb25lcyB3ZSBjYW4gZ2V0IGZyb20gdGhlIG1vdW50IHN0cnVjdCAqLwogCQl7IFhGU19NT1VOVF9JS0VFUCwJCSIsIiBNTlRPUFRfSUtFRVAgfSwKIAkJeyBYRlNfTU9VTlRfV1NZTkMsCQkiLCIgTU5UT1BUX1dTWU5DIH0sCi0JCXsgWEZTX01PVU5UX0lOTzY0LAkJIiwiIE1OVE9QVF9JTk82NCB9LAogCQl7IFhGU19NT1VOVF9OT0FMSUdOLAkJIiwiIE1OVE9QVF9OT0FMSUdOIH0sCiAJCXsgWEZTX01PVU5UX1NXQUxMT0MsCQkiLCIgTU5UT1BUX1NXQUxMT0MgfSwKIAkJeyBYRlNfTU9VTlRfTk9VVUlELAkJIiwiIE1OVE9QVF9OT1VVSUQgfSwKQEAgLTYzNCw3ICs2MjEsNyBAQAogCXJldHVybiAoKChfX3VpbnQ2NF90KXBhZ2VmYWN0b3IpIDw8IGJpdHNoaWZ0KSAtIDE7CiB9CiAKLWludAorU1RBVElDIGludAogeGZzX2Jsa2Rldl9nZXQoCiAJeGZzX21vdW50X3QJCSptcCwKIAljb25zdCBjaGFyCQkqbmFtZSwKQEAgLTY1MSw3ICs2MzgsNyBAQAogCXJldHVybiAtZXJyb3I7CiB9CiAKLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfYmxrZGV2X3B1dCgKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpiZGV2KQogewpAQCAtODcyLDcgKzg1OSw3IEBACiAJd2FrZV91cF9wcm9jZXNzKGFpbHAtPnhhX3Rhc2spOwogfQogCi1pbnQKK1NUQVRJQyBpbnQKIHhmc2FpbGQoCiAJdm9pZAkqZGF0YSkKIHsKQEAgLTk5MCwyNiArOTc3LDU3IEBACiAJaW50CQkJc3luYykKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwogCWludAkJCWVycm9yID0gMDsKLQlpbnQJCQlmbGFncyA9IDA7CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKKwkJcmV0dXJuIFhGU19FUlJPUihFSU8pOworCiAJaWYgKHN5bmMpIHsKIAkJZXJyb3IgPSB4ZnNfd2FpdF9vbl9wYWdlcyhpcCwgMCwgLTEpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9lcnJvcjsKLQkJZmxhZ3MgfD0gRkxVU0hfU1lOQzsKKwkJCWdvdG8gb3V0OwogCX0KLQllcnJvciA9IHhmc19pbm9kZV9mbHVzaChpcCwgZmxhZ3MpOwogCi1vdXRfZXJyb3I6CisJLyoKKwkgKiBCeXBhc3MgaW5vZGVzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgYnkKKwkgKiB0aGUgaW5vZGUgZmx1c2ggY2x1c3RlcmluZyBjb2RlIGluc2lkZSB4ZnNfaWZsdXNoCisJICovCisJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBXZSBtYWtlIHRoaXMgbm9uLWJsb2NraW5nIGlmIHRoZSBpbm9kZSBpcyBjb250ZW5kZWQsIHJldHVybgorCSAqIEVBR0FJTiB0byBpbmRpY2F0ZSB0byB0aGUgY2FsbGVyIHRoYXQgdGhleSBkaWQgbm90IHN1Y2NlZWQuCisJICogVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUKKwkgKiBhbm90aGVyIG9wZXJhdGlvbiByaWdodCBub3csIHRoZXkgZ2V0IGNhdWdodCBsYXRlciBieSB4ZnNfc3luYy4KKwkgKi8KKwlpZiAoc3luYykgeworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworCQl4ZnNfaWZsb2NrKGlwKTsKKworCQllcnJvciA9IHhmc19pZmx1c2goaXAsIFhGU19JRkxVU0hfU1lOQyk7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBFQUdBSU47CisJCWlmICgheGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX1NIQVJFRCkpCisJCQlnb3RvIG91dDsKKwkJaWYgKHhmc19pcGluY291bnQoaXApIHx8ICF4ZnNfaWZsb2NrX25vd2FpdChpcCkpCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOworCX0KKworIG91dF91bmxvY2s6CisJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworIG91dDoKIAkvKgogCSAqIGlmIHdlIGZhaWxlZCB0byB3cml0ZSBvdXQgdGhlIGlub2RlIHRoZW4gbWFyawogCSAqIGl0IGRpcnR5IGFnYWluIHNvIHdlJ2xsIHRyeSBhZ2FpbiBsYXRlci4KIAkgKi8KIAlpZiAoZXJyb3IpCiAJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoaXApOwotCiAJcmV0dXJuIC1lcnJvcjsKIH0KIApAQCAtMTE2OSwxOCArMTE4NywxMiBAQAogCXN0YXRwLT5mX2JmcmVlID0gc3RhdHAtPmZfYmF2YWlsID0KIAkJCQlzYnAtPnNiX2ZkYmxvY2tzIC0gWEZTX0FMTE9DX1NFVF9BU0lERShtcCk7CiAJZmFrZWlub3MgPSBzdGF0cC0+Zl9iZnJlZSA8PCBzYnAtPnNiX2lub3BibG9nOwotI2lmIFhGU19CSUdfSU5VTVMKLQlmYWtlaW5vcyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKIAlzdGF0cC0+Zl9maWxlcyA9CiAJICAgIE1JTihzYnAtPnNiX2ljb3VudCArIGZha2Vpbm9zLCAoX191aW50NjRfdClYRlNfTUFYSU5VTUJFUik7CiAJaWYgKG1wLT5tX21heGljb3VudCkKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlmICghbXAtPm1faW5vYWRkKQotI2VuZGlmCi0JCQlzdGF0cC0+Zl9maWxlcyA9IG1pbl90KHR5cGVvZihzdGF0cC0+Zl9maWxlcyksCi0JCQkJCQlzdGF0cC0+Zl9maWxlcywKLQkJCQkJCW1wLT5tX21heGljb3VudCk7CisJCXN0YXRwLT5mX2ZpbGVzID0gbWluX3QodHlwZW9mKHN0YXRwLT5mX2ZpbGVzKSwKKwkJCQkJc3RhdHAtPmZfZmlsZXMsCisJCQkJCW1wLT5tX21heGljb3VudCk7CiAJc3RhdHAtPmZfZmZyZWUgPSBzdGF0cC0+Zl9maWxlcyAtIChzYnAtPnNiX2ljb3VudCAtIHNicC0+c2JfaWZyZWUpOwogCXNwaW5fdW5sb2NrKCZtcC0+bV9zYl9sb2NrKTsKIApAQCAtMTMwMiw1NyArMTMxNCw2IEBACiAJcmV0dXJuIC14ZnNfc2hvd2FyZ3MoWEZTX00obW50LT5tbnRfc2IpLCBtKTsKIH0KIAotU1RBVElDIGludAoteGZzX2ZzX3F1b3Rhc3luYygKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAotCWludAkJCXR5cGUpCi17Ci0JcmV0dXJuIC1YRlNfUU1fUVVPVEFDVEwoWEZTX00oc2IpLCBRX1hRVU9UQVNZTkMsIDAsIE5VTEwpOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfZnNfZ2V0eHN0YXRlKAotCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCi0Jc3RydWN0IGZzX3F1b3RhX3N0YXQJKmZxcykKLXsKLQlyZXR1cm4gLVhGU19RTV9RVU9UQUNUTChYRlNfTShzYiksIFFfWEdFVFFTVEFULCAwLCAoY2FkZHJfdClmcXMpOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfZnNfc2V0eHN0YXRlKAotCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCi0JdW5zaWduZWQgaW50CQlmbGFncywKLQlpbnQJCQlvcCkKLXsKLQlyZXR1cm4gLVhGU19RTV9RVU9UQUNUTChYRlNfTShzYiksIG9wLCAwLCAoY2FkZHJfdCkmZmxhZ3MpOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfZnNfZ2V0eHF1b3RhKAotCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCi0JaW50CQkJdHlwZSwKLQlxaWRfdAkJCWlkLAotCXN0cnVjdCBmc19kaXNrX3F1b3RhCSpmZHEpCi17Ci0JcmV0dXJuIC1YRlNfUU1fUVVPVEFDVEwoWEZTX00oc2IpLAotCQkJCSAodHlwZSA9PSBVU1JRVU9UQSkgPyBRX1hHRVRRVU9UQSA6Ci0JCQkJICAoKHR5cGUgPT0gR1JQUVVPVEEpID8gUV9YR0VUR1FVT1RBIDoKLQkJCQkgICBRX1hHRVRQUVVPVEEpLCBpZCwgKGNhZGRyX3QpZmRxKTsKLX0KLQotU1RBVElDIGludAoteGZzX2ZzX3NldHhxdW90YSgKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAotCWludAkJCXR5cGUsCi0JcWlkX3QJCQlpZCwKLQlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQotewotCXJldHVybiAtWEZTX1FNX1FVT1RBQ1RMKFhGU19NKHNiKSwKLQkJCQkgKHR5cGUgPT0gVVNSUVVPVEEpID8gUV9YU0VUUUxJTSA6Ci0JCQkJICAoKHR5cGUgPT0gR1JQUVVPVEEpID8gUV9YU0VUR1FMSU0gOgotCQkJCSAgIFFfWFNFVFBRTElNKSwgaWQsIChjYWRkcl90KWZkcSk7Ci19Ci0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIHhmc19tb3VudF90IGZpZWxkcyBiYXNlZCBvbiBtb3VudCBhcmdzLgogICogTm90ZTogdGhlIHN1cGVyYmxvY2sgX2hhc18gbm93IGJlZW4gcmVhZCBpbi4KQEAgLTE0MzUsNyArMTM5Niw5IEBACiAJc2JfbWluX2Jsb2Nrc2l6ZShzYiwgQkJTSVpFKTsKIAlzYi0+c194YXR0ciA9IHhmc194YXR0cl9oYW5kbGVyczsKIAlzYi0+c19leHBvcnRfb3AgPSAmeGZzX2V4cG9ydF9vcGVyYXRpb25zOworI2lmZGVmIENPTkZJR19YRlNfUVVPVEEKIAlzYi0+c19xY29wID0gJnhmc19xdW90YWN0bF9vcGVyYXRpb25zOworI2VuZGlmCiAJc2ItPnNfb3AgPSAmeGZzX3N1cGVyX29wZXJhdGlvbnM7CiAKIAllcnJvciA9IHhmc19kbW9wc19nZXQobXApOwpAQCAtMTU3OCwxNCArMTU0MSw2IEBACiAJLnNob3dfb3B0aW9ucwkJPSB4ZnNfZnNfc2hvd19vcHRpb25zLAogfTsKIAotc3RhdGljIHN0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnMgPSB7Ci0JLnF1b3RhX3N5bmMJCT0geGZzX2ZzX3F1b3Rhc3luYywKLQkuZ2V0X3hzdGF0ZQkJPSB4ZnNfZnNfZ2V0eHN0YXRlLAotCS5zZXRfeHN0YXRlCQk9IHhmc19mc19zZXR4c3RhdGUsCi0JLmdldF94cXVvdGEJCT0geGZzX2ZzX2dldHhxdW90YSwKLQkuc2V0X3hxdW90YQkJPSB4ZnNfZnNfc2V0eHF1b3RhLAotfTsKLQogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHhmc19mc190eXBlID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9ICJ4ZnMiLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKaW5kZXggZDVkNzc2ZC4uNWEyZWEzYSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCkBAIC05Myw2ICs5Myw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgeGZzX2V4cG9ydF9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyICp4ZnNfeGF0dHJfaGFuZGxlcnNbXTsKK2V4dGVybiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zOwogCiAjZGVmaW5lIFhGU19NKHNiKQkJKChzdHJ1Y3QgeGZzX21vdW50ICopKChzYiktPnNfZnNfaW5mbykpCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaAppbmRleCA1ZjZkZTFlLi4wNGYwNThjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIFhGU19TWU5DX0ggMQogCiBzdHJ1Y3QgeGZzX21vdW50Oworc3RydWN0IHhmc19wZXJhZzsKIAogdHlwZWRlZiBzdHJ1Y3QgYmh2X3Zmc19zeW5jX3dvcmsgewogCXN0cnVjdCBsaXN0X2hlYWQJd19saXN0OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKaW5kZXggZjY1OTgzYS4uYWQ3ZmJlYSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCkBAIC00MSwxMSArNDEsNiBAQAogI2RlZmluZSBJT19JTlZJUwkweDAwMDIwCQkvKiBkb24ndCB1cGRhdGUgaW5vZGUgdGltZXN0YW1wcyAqLwogCiAvKgotICogRmxhZ3MgZm9yIHhmc19pbm9kZV9mbHVzaAotICovCi0jZGVmaW5lIEZMVVNIX1NZTkMJCTEJLyogd2FpdCBmb3IgZmx1c2ggdG8gY29tcGxldGUJKi8KLQotLyoKICAqIEZsdXNoL0ludmFsaWRhdGUgb3B0aW9ucyBmb3Igdm9wX3Rvc3MvZmx1c2gvZmx1c2hpbnZhbF9wYWdlcy4KICAqLwogI2RlZmluZSBGSV9OT05FCQkJMAkvKiBub25lICovCkBAIC01NSwzMyArNTAsNiBAQAogCQkJCQkgICB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy4gKi8KIAogLyoKLSAqIERlYWxpbmcgd2l0aCBiYWQgaW5vZGVzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IFZOX0JBRChzdHJ1Y3QgaW5vZGUgKnZwKQotewotCXJldHVybiBpc19iYWRfaW5vZGUodnApOwotfQotCi0vKgotICogRXh0cmFjdGluZyBhdGltZSB2YWx1ZXMgaW4gdmFyaW91cyBmb3JtYXRzCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bl9hdGltZV90b19ic3RpbWUoc3RydWN0IGlub2RlICp2cCwgeGZzX2JzdGltZV90ICpic19hdGltZSkKLXsKLQlic19hdGltZS0+dHZfc2VjID0gdnAtPmlfYXRpbWUudHZfc2VjOwotCWJzX2F0aW1lLT50dl9uc2VjID0gdnAtPmlfYXRpbWUudHZfbnNlYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZuX2F0aW1lX3RvX3RpbWVzcGVjKHN0cnVjdCBpbm9kZSAqdnAsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCi17Ci0JKnRzID0gdnAtPmlfYXRpbWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bl9hdGltZV90b190aW1lX3Qoc3RydWN0IGlub2RlICp2cCwgdGltZV90ICp0dCkKLXsKLQkqdHQgPSB2cC0+aV9hdGltZS50dl9zZWM7Ci19Ci0KLS8qCiAgKiBTb21lIHVzZWZ1bCBwcmVkaWNhdGVzLgogICovCiAjZGVmaW5lIFZOX01BUFBFRCh2cCkJbWFwcGluZ19tYXBwZWQodnAtPmlfbWFwcGluZykKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwppbmRleCA2NTQzYzBiLi5lNGJhYmNjIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCkBAIC04MDQsNyArODA0LDcgQEAKIAl1aW50CQkJZmxpc3RfbG9ja2VkOwogCXhmc19kcXVvdF90CQkqZDsKIAotCUFTU0VSVChYRlNfRFFfSVNfSEFTSF9MT0NLRUQocWgpKTsKKwlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZxaC0+cWhfbG9jaykpOwogCiAJZmxpc3RfbG9ja2VkID0gQl9GQUxTRTsKIApAQCAtODc3LDcgKzg3Nyw3IEBACiAJCQkvKgogCQkJICogbW92ZSB0aGUgZHF1b3QgdG8gdGhlIGZyb250IG9mIHRoZSBoYXNoY2hhaW4KIAkJCSAqLwotCQkJQVNTRVJUKFhGU19EUV9JU19IQVNIX0xPQ0tFRChxaCkpOworCQkJQVNTRVJUKG11dGV4X2lzX2xvY2tlZCgmcWgtPnFoX2xvY2spKTsKIAkJCWlmIChkcXAtPkhMX1BSRVZQICE9ICZxaC0+cWhfbmV4dCkgewogCQkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwKIAkJCQkJCSAgIkRRTE9PS1VQOiBIQVNIIE1PVkVUT0ZST05UIik7CkBAIC04OTIsMTMgKzg5MiwxMyBAQAogCQkJfQogCQkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiTE9PS1VQIEVORCIpOwogCQkJKk9fZHFwcCA9IGRxcDsKLQkJCUFTU0VSVChYRlNfRFFfSVNfSEFTSF9MT0NLRUQocWgpKTsKKwkJCUFTU0VSVChtdXRleF9pc19sb2NrZWQoJnFoLT5xaF9sb2NrKSk7CiAJCQlyZXR1cm4gKDApOwogCQl9CiAJfQogCiAJKk9fZHFwcCA9IE5VTEw7Ci0JQVNTRVJUKFhGU19EUV9JU19IQVNIX0xPQ0tFRChxaCkpOworCUFTU0VSVChtdXRleF9pc19sb2NrZWQoJnFoLT5xaF9sb2NrKSk7CiAJcmV0dXJuICgxKTsKIH0KIApAQCAtOTU2LDcgKzk1Niw3IEBACiAJCQlBU1NFUlQoaXAtPmlfZ2RxdW90ID09IE5VTEwpOwogCX0KICNlbmRpZgotCVhGU19EUV9IQVNIX0xPQ0soaCk7CisJbXV0ZXhfbG9jaygmaC0+cWhfbG9jayk7CiAKIAkvKgogCSAqIExvb2sgaW4gdGhlIGNhY2hlIChoYXNodGFibGUpLgpAQCAtOTcxLDcgKzk3MSw3IEBACiAJCSAqLwogCQlBU1NFUlQoKk9fZHFwcCk7CiAJCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKCpPX2RxcHApKTsKLQkJWEZTX0RRX0hBU0hfVU5MT0NLKGgpOworCQltdXRleF91bmxvY2soJmgtPnFoX2xvY2spOwogCQl4ZnNfZHF0cmFjZV9lbnRyeSgqT19kcXBwLCAiRFFHRVQgRE9ORSAoRlJPTSBDQUNIRSkiKTsKIAkJcmV0dXJuICgwKTsJLyogc3VjY2VzcyAqLwogCX0KQEAgLTk5MSw3ICs5OTEsNyBAQAogCSAqIHdlIGRvbid0IGtlZXAgdGhlIGxvY2sgYWNyb3NzIGEgZGlzayByZWFkCiAJICovCiAJdmVyc2lvbiA9IGgtPnFoX3ZlcnNpb247Ci0JWEZTX0RRX0hBU0hfVU5MT0NLKGgpOworCW11dGV4X3VubG9jaygmaC0+cWhfbG9jayk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBkcXVvdCBvbiB0aGUga2VybmVsIGhlYXAsIGFuZCByZWFkIHRoZSBvbmRpc2sKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAJLyoKIAkgKiBIYXNobG9jayBjb21lcyBhZnRlciBpbG9jayBpbiBsb2NrIG9yZGVyCiAJICovCi0JWEZTX0RRX0hBU0hfTE9DSyhoKTsKKwltdXRleF9sb2NrKCZoLT5xaF9sb2NrKTsKIAlpZiAodmVyc2lvbiAhPSBoLT5xaF92ZXJzaW9uKSB7CiAJCXhmc19kcXVvdF90ICp0bXBkcXA7CiAJCS8qCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogCQkJICogYW5kIHN0YXJ0IG92ZXIuCiAJCQkgKi8KIAkJCXhmc19xbV9kcXB1dCh0bXBkcXApOwotCQkJWEZTX0RRX0hBU0hfVU5MT0NLKGgpOworCQkJbXV0ZXhfdW5sb2NrKCZoLT5xaF9sb2NrKTsKIAkJCXhmc19xbV9kcWRlc3Ryb3koZHFwKTsKIAkJCVhRTV9TVEFUU19JTkMoeHFtc3RhdHMueHNfcW1fZHF1b3RfZHVwcyk7CiAJCQlnb3RvIGFnYWluOwpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAkgKiBQdXQgdGhlIGRxdW90IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhhc2gtY2hhaW4gYW5kIG1wJ3MgbGlzdAogCSAqIExPQ0sgT1JERVI6IGhhc2hsb2NrLCBmcmVlbGlzdGxvY2ssIG1wbGlzdGxvY2ssIHVkcWxvY2ssIGdkcWxvY2sgLi4KIAkgKi8KLQlBU1NFUlQoWEZTX0RRX0lTX0hBU0hfTE9DS0VEKGgpKTsKKwlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZoLT5xaF9sb2NrKSk7CiAJZHFwLT5xX2hhc2ggPSBoOwogCVhRTV9IQVNITElTVF9JTlNFUlQoaCwgZHFwKTsKIApAQCAtMTEwMiw3ICsxMTAyLDcgQEAKIAlYUU1fTVBMSVNUX0lOU0VSVCgmKFhGU19RSV9NUExfTElTVChtcCkpLCBkcXApOwogCiAJeGZzX3FtX21wbGlzdF91bmxvY2sobXApOwotCVhGU19EUV9IQVNIX1VOTE9DSyhoKTsKKwltdXRleF91bmxvY2soJmgtPnFoX2xvY2spOwogIGRxcmV0OgogCUFTU0VSVCgoaXAgPT0gTlVMTCkgfHwgeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKIAl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUUdFVCBET05FIik7CkBAIC0xNDQwLDcgKzE0NDAsNyBAQAogCXhmc19tb3VudF90CSptcCA9IGRxcC0+cV9tb3VudDsKIAogCUFTU0VSVChYRlNfUU1fSVNfTVBMSVNUX0xPQ0tFRChtcCkpOwotCUFTU0VSVChYRlNfRFFfSVNfSEFTSF9MT0NLRUQoZHFwLT5xX2hhc2gpKTsKKwlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZkcXAtPnFfaGFzaC0+cWhfbG9jaykpOwogCiAJeGZzX2RxbG9jayhkcXApOwogCS8qCkBAIC0xNDUzLDcgKzE0NTMsNyBAQAogCSAqLwogCWlmIChkcXAtPnFfbnJlZnMgIT0gMCkgewogCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJWEZTX0RRX0hBU0hfVU5MT0NLKGRxcC0+cV9oYXNoKTsKKwkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7CiAJCXJldHVybiAoMSk7CiAJfQogCkBAIC0xNTE3LDcgKzE1MTcsNyBAQAogCW1lbXNldCgmZHFwLT5xX2NvcmUsIDAsIHNpemVvZihkcXAtPnFfY29yZSkpOwogCXhmc19kcWZ1bmxvY2soZHFwKTsKIAl4ZnNfZHF1bmxvY2soZHFwKTsKLQlYRlNfRFFfSEFTSF9VTkxPQ0sodGhpc2hhc2gpOworCW11dGV4X3VubG9jaygmdGhpc2hhc2gtPnFoX2xvY2spOwogCXJldHVybiAoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaCBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaAppbmRleCBkNDQzZTkzLi5kZTBmNDAyIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5oCkBAIC0zNCw3ICszNCw3IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19kcWhhc2ggewogCXN0cnVjdCB4ZnNfZHF1b3QgKnFoX25leHQ7Ci0JbXV0ZXhfdAkJICBxaF9sb2NrOworCXN0cnVjdCBtdXRleAkgIHFoX2xvY2s7CiAJdWludAkJICBxaF92ZXJzaW9uOwkvKiBldmVyIGluY3JlYXNpbmcgdmVyc2lvbiAqLwogCXVpbnQJCSAgcWhfbmVsZW1zOwkvKiBudW1iZXIgb2YgZHF1b3RzIG9uIHRoZSBsaXN0ICovCiB9IHhmc19kcWhhc2hfdDsKQEAgLTgxLDcgKzgxLDcgQEAKIAl4ZnNfcWNudF90CSBxX3Jlc19iY291bnQ7CS8qIHRvdGFsIHJlZ3VsYXIgbmJsa3MgdXNlZCtyZXNlcnZlZCAqLwogCXhmc19xY250X3QJIHFfcmVzX2ljb3VudDsJLyogdG90YWwgaW5vcyBhbGxvY2QrcmVzZXJ2ZWQgKi8KIAl4ZnNfcWNudF90CSBxX3Jlc19ydGJjb3VudDsvKiB0b3RhbCByZWFsdGltZSBibGtzIHVzZWQrcmVzZXJ2ZWQgKi8KLQltdXRleF90CQkgcV9xbG9jazsJLyogcXVvdGEgbG9jayAqLworCXN0cnVjdCBtdXRleAkgcV9xbG9jazsJLyogcXVvdGEgbG9jayAqLwogCXN0cnVjdCBjb21wbGV0aW9uIHFfZmx1c2g7CS8qIGZsdXNoIGNvbXBsZXRpb24gcXVldWUgKi8KIAlhdG9taWNfdCAgICAgICAgICBxX3BpbmNvdW50OwkvKiBkcXVvdCBwaW4gY291bnQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBxX3BpbndhaXQ7CS8qIGRxdW90IHBpbm5pbmcgd2FpdCBxdWV1ZSAqLwpAQCAtMTA5LDE5ICsxMDksNiBAQAogCiAjZGVmaW5lIFhGU19EUUhPTEQoZHFwKQkJKChkcXApLT5xX25yZWZzKyspCiAKLSNpZmRlZiBERUJVRwotc3RhdGljIGlubGluZSBpbnQKLVhGU19EUV9JU19MT0NLRUQoeGZzX2RxdW90X3QgKmRxcCkKLXsKLQlpZiAobXV0ZXhfdHJ5bG9jaygmZHFwLT5xX3Fsb2NrKSkgewotCQltdXRleF91bmxvY2soJmRxcC0+cV9xbG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgotCi0KIC8qCiAgKiBNYW5hZ2UgdGhlIHFfZmx1c2ggY29tcGxldGlvbiBxdWV1ZSBlbWJlZGRlZCBpbiB0aGUgZHF1b3QuICBUaGlzIGNvbXBsZXRpb24KICAqIHF1ZXVlIHN5bmNocm9uaXplcyBwcm9jZXNzZXMgYXR0ZW1wdGluZyB0byBmbHVzaCB0aGUgaW4tY29yZSBkcXVvdCBiYWNrIHRvCkBAIC0xNDIsNiArMTI5LDcgQEAKIAljb21wbGV0ZSgmZHFwLT5xX2ZsdXNoKTsKIH0KIAorI2RlZmluZSBYRlNfRFFfSVNfTE9DS0VEKGRxcCkJKG11dGV4X2lzX2xvY2tlZCgmKChkcXApLT5xX3Fsb2NrKSkpCiAjZGVmaW5lIFhGU19EUV9JU19PTl9GUkVFTElTVChkcXApICAoKGRxcCktPmRxX2ZsbmV4dCAhPSAoZHFwKSkKICNkZWZpbmUgWEZTX0RRX0lTX0RJUlRZKGRxcCkJKChkcXApLT5kcV9mbGFncyAmIFhGU19EUV9ESVJUWSkKICNkZWZpbmUgWEZTX1FNX0lTVURRKGRxcCkJKChkcXApLT5kcV9mbGFncyAmIFhGU19EUV9VU0VSKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5jIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCmluZGV4IDdhMmJlYjYuLjViNjY5NTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTU1LDcgKzU1LDcgQEAKICAqIHF1b3RhIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBtYWludGFpbmluZyB0aGUgZnJlZWxpc3QgYW5kIGhhc2gKICAqIHRhYmxlcyBvZiBkcXVvdHMuCiAgKi8KLW11dGV4X3QJCXhmc19HcW1fbG9jazsKK3N0cnVjdCBtdXRleAl4ZnNfR3FtX2xvY2s7CiBzdHJ1Y3QgeGZzX3FtCSp4ZnNfR3FtOwogdWludAkJbmRxdW90OwogCkBAIC02OSw4ICs2OSw2IEBACiAKIFNUQVRJQyB2b2lkCXhmc19xbV9mcmVlbGlzdF9pbml0KHhmc19mcmxpc3RfdCAqKTsKIFNUQVRJQyB2b2lkCXhmc19xbV9mcmVlbGlzdF9kZXN0cm95KHhmc19mcmxpc3RfdCAqKTsKLVNUQVRJQyBpbnQJeGZzX3FtX21wbGlzdF9ub3dhaXQoeGZzX21vdW50X3QgKik7Ci1TVEFUSUMgaW50CXhmc19xbV9kcWhhc2hsb2NrX25vd2FpdCh4ZnNfZHF1b3RfdCAqKTsKIAogU1RBVElDIGludAl4ZnNfcW1faW5pdF9xdW90YWlub3MoeGZzX21vdW50X3QgKik7CiBTVEFUSUMgaW50CXhmc19xbV9pbml0X3F1b3RhaW5mbyh4ZnNfbW91bnRfdCAqKTsKQEAgLTgyLDcgKzgwLDcgQEAKIH07CiAKICNpZmRlZiBERUJVRwotZXh0ZXJuIG11dGV4X3QJcWNoZWNrX2xvY2s7CitleHRlcm4gc3RydWN0IG11dGV4CXFjaGVja19sb2NrOwogI2VuZGlmCiAKICNpZmRlZiBRVU9UQURFQlVHCkBAIC0yMTksNyArMjE3LDcgQEAKIAkgKiB0aGUgc3RydWN0dXJlIGNvdWxkIGRpc2FwcGVhciBiZXR3ZWVuIHRoZSBlbnRyeSB0byB0aGlzIHJvdXRpbmUgYW5kCiAJICogYSBIT0xEIG9wZXJhdGlvbiBpZiBub3QgbG9ja2VkLgogCSAqLwotCVhGU19RTV9MT0NLKHhmc19HcW0pOworCW11dGV4X2xvY2soJnhmc19HcW1fbG9jayk7CiAKIAlpZiAoeGZzX0dxbSA9PSBOVUxMKQogCQl4ZnNfR3FtID0geGZzX0dxbV9pbml0KCk7CkBAIC0yMjgsOCArMjI2LDggQEAKIAkgKiBkZWJ1Z2dpbmcgYW5kIHN0YXRpc3RpY2FsIHB1cnBvc2VzLCBidXQgLi4uCiAJICogSnVzdCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBnZXQgb3V0LgogCSAqLwotCVhGU19RTV9IT0xEKHhmc19HcW0pOwotCVhGU19RTV9VTkxPQ0soeGZzX0dxbSk7CisJeGZzX0dxbS0+cW1fbnJlZnMrKzsKKwltdXRleF91bmxvY2soJnhmc19HcW1fbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3NywxMyArMjc1LDEyIEBACiAJICogRGVzdHJveSB0aGUgZW50aXJlIFhRTS4gSWYgc29tZWJvZHkgbW91bnRzIHdpdGggcXVvdGFvbiwgdGhpcydsbAogCSAqIGJlIHJlc3RhcnRlZC4KIAkgKi8KLQlYRlNfUU1fTE9DSyh4ZnNfR3FtKTsKLQlYRlNfUU1fUkVMRSh4ZnNfR3FtKTsKLQlpZiAoeGZzX0dxbS0+cW1fbnJlZnMgPT0gMCkgeworCW11dGV4X2xvY2soJnhmc19HcW1fbG9jayk7CisJaWYgKC0teGZzX0dxbS0+cW1fbnJlZnMgPT0gMCkgewogCQl4ZnNfcW1fZGVzdHJveSh4ZnNfR3FtKTsKIAkJeGZzX0dxbSA9IE5VTEw7CiAJfQotCVhGU19RTV9VTkxPQ0soeGZzX0dxbSk7CisJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtX2xvY2spOwogfQogCiAvKgpAQCAtNTc3LDEwICs1NzQsMTAgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCEgeGZzX3FtX2RxaGFzaGxvY2tfbm93YWl0KGRxcCkpIHsKKwkJaWYgKCFtdXRleF90cnlsb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jaykpIHsKIAkJCW5yZWNsID0gWEZTX1FJX01QTFJFQ0xBSU1TKG1wKTsKIAkJCXhmc19xbV9tcGxpc3RfdW5sb2NrKG1wKTsKLQkJCVhGU19EUV9IQVNIX0xPQ0soZHFwLT5xX2hhc2gpOworCQkJbXV0ZXhfbG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwogCQkJeGZzX3FtX21wbGlzdF9sb2NrKG1wKTsKIAogCQkJLyoKQEAgLTU5MCw3ICs1ODcsNyBAQAogCQkJICogdGhpcyBwb2ludCwgYnV0IHNvbWVib2R5IG1pZ2h0IGJlIHRha2luZyB0aGluZ3Mgb2ZmLgogCQkJICovCiAJCQlpZiAobnJlY2wgIT0gWEZTX1FJX01QTFJFQ0xBSU1TKG1wKSkgewotCQkJCVhGU19EUV9IQVNIX1VOTE9DSyhkcXAtPnFfaGFzaCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7CiAJCQkJZ290byBhZ2FpbjsKIAkJCX0KIAkJfQpAQCAtNjMyLDcgKzYyOSw2IEBACiAJeGZzX2RxaWRfdAlpZCwKIAl1aW50CQl0eXBlLAogCXVpbnQJCWRvYWxsb2MsCi0JdWludAkJZG9sb2NrLAogCXhmc19kcXVvdF90CSp1ZHFoaW50LCAvKiBoaW50ICovCiAJeGZzX2RxdW90X3QJKipJT19pZHFwcCkKIHsKQEAgLTY0MSwxNiArNjM3LDE2IEBACiAKIAlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKIAllcnJvciA9IDA7CisKIAkvKgogCSAqIFNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgaXQgaW4gdGhlIGlub2RlIGl0c2VsZi4gSU9faWRxcHAgaXMKIAkgKiAmaV91ZHF1b3Qgb3IgJmlfZ2RxdW90LiBUaGlzIG1hZGUgdGhlIGNvZGUgbG9vayB3ZWlyZCwgYnV0CiAJICogbWFkZSB0aGUgbG9naWMgYSBsb3Qgc2ltcGxlci4KIAkgKi8KLQlpZiAoKGRxcCA9ICpJT19pZHFwcCkpIHsKLQkJaWYgKGRvbG9jaykKLQkJCXhmc19kcWxvY2soZHFwKTsKKwlkcXAgPSAqSU9faWRxcHA7CisJaWYgKGRxcCkgewogCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUUFUVEFDSDogZm91bmQgaW4gaXAiKTsKLQkJZ290byBkb25lOworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtNjU5LDM4ICs2NTUsMzggQEAKIAkgKiBsb29rdXAgYnkgZHFpZCAoeGZzX3FtX2RxZ2V0KSBieSBjYWNoaW5nIGEgZ3JvdXAgZHF1b3QgaW5zaWRlCiAJICogdGhlIHVzZXIgZHF1b3QuCiAJICovCi0JQVNTRVJUKCF1ZHFoaW50IHx8IHR5cGUgPT0gWEZTX0RRX0dST1VQIHx8IHR5cGUgPT0gWEZTX0RRX1BST0opOwotCWlmICh1ZHFoaW50ICYmICFkb2xvY2spCisJaWYgKHVkcWhpbnQpIHsKKwkJQVNTRVJUKHR5cGUgPT0gWEZTX0RRX0dST1VQIHx8IHR5cGUgPT0gWEZTX0RRX1BST0opOwogCQl4ZnNfZHFsb2NrKHVkcWhpbnQpOwogCi0JLyoKLQkgKiBObyBuZWVkIHRvIHRha2UgZHFsb2NrIHRvIGxvb2sgYXQgdGhlIGlkLgotCSAqIFRoZSBJRCBjYW4ndCBjaGFuZ2UgdW50aWwgaXQgZ2V0cyByZWNsYWltZWQsIGFuZCBpdCB3b24ndAotCSAqIGJlIHJlY2xhaW1lZCBhcyBsb25nIGFzIHdlIGhhdmUgYSByZWYgZnJvbSBpbm9kZSBhbmQgd2UgaG9sZAotCSAqIHRoZSBpbG9jay4KLQkgKi8KLQlpZiAodWRxaGludCAmJgotCSAgICAoZHFwID0gdWRxaGludC0+cV9nZHF1b3QpICYmCi0JICAgIChiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2lkKSA9PSBpZCkpIHsKLQkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQodWRxaGludCkpOwotCQl4ZnNfZHFsb2NrKGRxcCk7Ci0JCVhGU19EUUhPTEQoZHFwKTsKLQkJQVNTRVJUKCpJT19pZHFwcCA9PSBOVUxMKTsKLQkJKklPX2lkcXBwID0gZHFwOwotCQlpZiAoIWRvbG9jaykgeworCQkvKgorCQkgKiBObyBuZWVkIHRvIHRha2UgZHFsb2NrIHRvIGxvb2sgYXQgdGhlIGlkLgorCQkgKgorCQkgKiBUaGUgSUQgY2FuJ3QgY2hhbmdlIHVudGlsIGl0IGdldHMgcmVjbGFpbWVkLCBhbmQgaXQgd29uJ3QKKwkJICogYmUgcmVjbGFpbWVkIGFzIGxvbmcgYXMgd2UgaGF2ZSBhIHJlZiBmcm9tIGlub2RlIGFuZCB3ZQorCQkgKiBob2xkIHRoZSBpbG9jay4KKwkJICovCisJCWRxcCA9IHVkcWhpbnQtPnFfZ2RxdW90OworCQlpZiAoZHFwICYmIGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWQpID09IGlkKSB7CisJCQl4ZnNfZHFsb2NrKGRxcCk7CisJCQlYRlNfRFFIT0xEKGRxcCk7CisJCQlBU1NFUlQoKklPX2lkcXBwID09IE5VTEwpOworCQkJKklPX2lkcXBwID0gZHFwOworCiAJCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJCXhmc19kcXVubG9jayh1ZHFoaW50KTsKKwkJCXJldHVybiAwOwogCQl9Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JLyoKLQkgKiBXZSBjYW4ndCBob2xkIGEgZHF1b3QgbG9jayB3aGVuIHdlIGNhbGwgdGhlIGRxZ2V0IGNvZGUuCi0JICogV2UnbGwgZGVhZGxvY2sgaW4gbm8gdGltZSwgYmVjYXVzZSBvZiAobm90IGNvbmZvcm1pbmcgdG8pCi0JICogbG9jayBvcmRlcmluZyAtIHRoZSBpbm9kZWxvY2sgY29tZXMgYmVmb3JlIGFueSBkcXVvdCBsb2NrLAotCSAqIGFuZCB3ZSBtYXkgZHJvcCBhbmQgcmVhY3F1aXJlIHRoZSBpbG9jayBpbiB4ZnNfcW1fZHFnZXQoKS4KLQkgKi8KLQlpZiAodWRxaGludCkKKworCQkvKgorCQkgKiBXZSBjYW4ndCBob2xkIGEgZHF1b3QgbG9jayB3aGVuIHdlIGNhbGwgdGhlIGRxZ2V0IGNvZGUuCisJCSAqIFdlJ2xsIGRlYWRsb2NrIGluIG5vIHRpbWUsIGJlY2F1c2Ugb2YgKG5vdCBjb25mb3JtaW5nIHRvKQorCQkgKiBsb2NrIG9yZGVyaW5nIC0gdGhlIGlub2RlbG9jayBjb21lcyBiZWZvcmUgYW55IGRxdW90IGxvY2ssCisJCSAqIGFuZCB3ZSBtYXkgZHJvcCBhbmQgcmVhY3F1aXJlIHRoZSBpbG9jayBpbiB4ZnNfcW1fZHFnZXQoKS4KKwkJICovCiAJCXhmc19kcXVubG9jayh1ZHFoaW50KTsKKwl9CisKIAkvKgogCSAqIEZpbmQgdGhlIGRxdW90IGZyb20gc29tZXdoZXJlLiBUaGlzIGJ1bXBzIHRoZQogCSAqIHJlZmVyZW5jZSBjb3VudCBvZiBkcXVvdCBhbmQgcmV0dXJucyBpdCBsb2NrZWQuCkBAIC02OTgsNDggKzY5NCwxOSBAQAogCSAqIGRpc2sgYW5kIHdlIGRpZG4ndCBhc2sgaXQgdG8gYWxsb2NhdGU7CiAJICogRVNSQ0ggaWYgcXVvdGFzIGdvdCB0dXJuZWQgb2ZmIHN1ZGRlbmx5LgogCSAqLwotCWlmICgoZXJyb3IgPSB4ZnNfcW1fZHFnZXQoaXAtPmlfbW91bnQsIGlwLCBpZCwgdHlwZSwKLQkJCQkgZG9hbGxvY3xYRlNfUU1PUFRfRE9XQVJOLCAmZHFwKSkpIHsKLQkJaWYgKHVkcWhpbnQgJiYgZG9sb2NrKQotCQkJeGZzX2RxbG9jayh1ZHFoaW50KTsKLQkJZ290byBkb25lOwotCX0KKwllcnJvciA9IHhmc19xbV9kcWdldChpcC0+aV9tb3VudCwgaXAsIGlkLCB0eXBlLCBYRlNfUU1PUFRfRE9XQVJOLCAmZHFwKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRQVRUQUNIOiBmb3VuZCBieSBkcWdldCIpOworCiAJLyoKIAkgKiBkcWdldCBtYXkgaGF2ZSBkcm9wcGVkIGFuZCByZS1hY3F1aXJlZCB0aGUgaWxvY2ssIGJ1dCBpdCBndWFyYW50ZWVzCiAJICogdGhhdCB0aGUgZHF1b3QgcmV0dXJuZWQgaXMgdGhlIG9uZSB0aGF0IHNob3VsZCBnbyBpbiB0aGUgaW5vZGUuCiAJICovCiAJKklPX2lkcXBwID0gZHFwOwotCUFTU0VSVChkcXApOwotCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwotCWlmICghIGRvbG9jaykgewotCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJZ290byBkb25lOwotCX0KLQlpZiAoISB1ZHFoaW50KQotCQlnb3RvIGRvbmU7Ci0KLQlBU1NFUlQodWRxaGludCk7Ci0JQVNTRVJUKGRvbG9jayk7Ci0JQVNTRVJUKFhGU19EUV9JU19MT0NLRUQoZHFwKSk7Ci0JaWYgKCEgeGZzX3FtX2RxbG9ja19ub3dhaXQodWRxaGludCkpIHsKLQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCXhmc19kcWxvY2sodWRxaGludCk7Ci0JCXhmc19kcWxvY2soZHFwKTsKLQl9Ci0gICAgICBkb25lOgotI2lmZGVmIFFVT1RBREVCVUcKLQlpZiAodWRxaGludCkgewotCQlpZiAoZG9sb2NrKQotCQkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQodWRxaGludCkpOwotCX0KLQlpZiAoISBlcnJvcikgewotCQlpZiAoZG9sb2NrKQotCQkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQoZHFwKSk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIGVycm9yOworCXhmc19kcXVubG9jayhkcXApOworCXJldHVybiAwOwogfQogCiAKQEAgLTc1NCwyNCArNzIxLDE1IEBACiBTVEFUSUMgdm9pZAogeGZzX3FtX2RxYXR0YWNoX2dyb3VwaGludCgKIAl4ZnNfZHF1b3RfdAkqdWRxLAotCXhmc19kcXVvdF90CSpnZHEsCi0JdWludAkJbG9ja2VkKQorCXhmc19kcXVvdF90CSpnZHEpCiB7CiAJeGZzX2RxdW90X3QJKnRtcDsKIAotI2lmZGVmIFFVT1RBREVCVUcKLQlpZiAobG9ja2VkKSB7Ci0JCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKHVkcSkpOwotCQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChnZHEpKTsKLQl9Ci0jZW5kaWYKLQlpZiAoISBsb2NrZWQpCi0JCXhmc19kcWxvY2sodWRxKTsKKwl4ZnNfZHFsb2NrKHVkcSk7CiAKIAlpZiAoKHRtcCA9IHVkcS0+cV9nZHF1b3QpKSB7CiAJCWlmICh0bXAgPT0gZ2RxKSB7Ci0JCQlpZiAoISBsb2NrZWQpCi0JCQkJeGZzX2RxdW5sb2NrKHVkcSk7CisJCQl4ZnNfZHF1bmxvY2sodWRxKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC03ODEsOCArNzM5LDYgQEAKIAkJICogYmVjYXVzZSB0aGUgZnJlZWxpc3QgbG9jayBjb21lcyBiZWZvcmUgZHFsb2Nrcy4KIAkJICovCiAJCXhmc19kcXVubG9jayh1ZHEpOwotCQlpZiAobG9ja2VkKQotCQkJeGZzX2RxdW5sb2NrKGdkcSk7CiAJCS8qCiAJCSAqIHdlIHRvb2sgYSBoYXJkIHJlZmVyZW5jZSBvbmNlIHVwb24gYSB0aW1lIGluIGRxZ2V0LAogCQkgKiBzbyBnaXZlIGl0IGJhY2sgd2hlbiB0aGUgdWRxdW90IG5vIGxvbmdlciBwb2ludHMgYXQgaXQKQEAgLTc5NSw5ICs3NTEsNyBAQAogCiAJfSBlbHNlIHsKIAkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQodWRxKSk7Ci0JCWlmICghIGxvY2tlZCkgewotCQkJeGZzX2RxbG9jayhnZHEpOwotCQl9CisJCXhmc19kcWxvY2soZ2RxKTsKIAl9CiAKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRCh1ZHEpKTsKQEAgLTgxMCwxMCArNzY0LDkgQEAKIAkJWEZTX0RRSE9MRChnZHEpOwogCQl1ZHEtPnFfZ2RxdW90ID0gZ2RxOwogCX0KLQlpZiAoISBsb2NrZWQpIHsKLQkJeGZzX2RxdW5sb2NrKGdkcSk7Ci0JCXhmc19kcXVubG9jayh1ZHEpOwotCX0KKworCXhmc19kcXVubG9jayhnZHEpOworCXhmc19kcXVubG9jayh1ZHEpOwogfQogCiAKQEAgLTgyMSw4ICs3NzQsNiBAQAogICogR2l2ZW4gYSBsb2NrZWQgaW5vZGUsIGF0dGFjaCBkcXVvdChzKSB0byBpdCwgdGFraW5nIFUvRy9QLVFVT1RBT04KICAqIGludG8gYWNjb3VudC4KICAqIElmIFhGU19RTU9QVF9EUUFMTE9DLCB0aGUgZHF1b3Qocykgd2lsbCBiZSBhbGxvY2F0ZWQgaWYgbmVlZGVkLgotICogSWYgWEZTX1FNT1BUX0RRTE9DSywgdGhlIGRxdW90KHMpIHdpbGwgYmUgcmV0dXJuZWQgbG9ja2VkLiBUaGlzIG9wdGlvbiBwcmV0dHkKLSAqIG11Y2ggbWFkZSB0aGlzIGNvZGUgYSBjb21wbGV0ZSBtZXNzLCBidXQgaXQgaGFzIGJlZW4gcHJldHR5IHVzZWZ1bC4KICAqIElmIFhGU19RTU9QVF9JTE9DS0VELCB0aGVuIGlub2RlIHNlbnQgaXMgYWxyZWFkeSBsb2NrZWQgRVhDTC4KICAqIElub2RlIG1heSBnZXQgdW5sb2NrZWQgYW5kIHJlbG9ja2VkIGluIGhlcmUsIGFuZCB0aGUgY2FsbGVyIG11c3QgZGVhbCB3aXRoCiAgKiB0aGUgY29uc2VxdWVuY2VzLgpAQCAtODUxLDcgKzgwMiw2IEBACiAJaWYgKFhGU19JU19VUVVPVEFfT04obXApKSB7CiAJCWVycm9yID0geGZzX3FtX2RxYXR0YWNoX29uZShpcCwgaXAtPmlfZC5kaV91aWQsIFhGU19EUV9VU0VSLAogCQkJCQkJZmxhZ3MgJiBYRlNfUU1PUFRfRFFBTExPQywKLQkJCQkJCWZsYWdzICYgWEZTX1FNT1BUX0RRTE9DSywKIAkJCQkJCU5VTEwsICZpcC0+aV91ZHF1b3QpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGRvbmU7CkBAIC04NjMsMTEgKzgxMyw5IEBACiAJCWVycm9yID0gWEZTX0lTX0dRVU9UQV9PTihtcCkgPwogCQkJeGZzX3FtX2RxYXR0YWNoX29uZShpcCwgaXAtPmlfZC5kaV9naWQsIFhGU19EUV9HUk9VUCwKIAkJCQkJCWZsYWdzICYgWEZTX1FNT1BUX0RRQUxMT0MsCi0JCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0ssCiAJCQkJCQlpcC0+aV91ZHF1b3QsICZpcC0+aV9nZHF1b3QpIDoKIAkJCXhmc19xbV9kcWF0dGFjaF9vbmUoaXAsIGlwLT5pX2QuZGlfcHJvamlkLCBYRlNfRFFfUFJPSiwKIAkJCQkJCWZsYWdzICYgWEZTX1FNT1BUX0RRQUxMT0MsCi0JCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0ssCiAJCQkJCQlpcC0+aV91ZHF1b3QsICZpcC0+aV9nZHF1b3QpOwogCQkvKgogCQkgKiBEb24ndCB3b3JyeSBhYm91dCB0aGUgdWRxdW90IHRoYXQgd2UgbWF5IGhhdmUKQEAgLTg5OCwyMiArODQ2LDEzIEBACiAJCS8qCiAJCSAqIEF0dGFjaCBpX2dkcXVvdCB0byB0aGUgZ2RxdW90IGhpbnQgaW5zaWRlIHRoZSBpX3VkcXVvdC4KIAkJICovCi0JCXhmc19xbV9kcWF0dGFjaF9ncm91cGhpbnQoaXAtPmlfdWRxdW90LCBpcC0+aV9nZHF1b3QsCi0JCQkJCSBmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0spOworCQl4ZnNfcW1fZHFhdHRhY2hfZ3JvdXBoaW50KGlwLT5pX3VkcXVvdCwgaXAtPmlfZ2RxdW90KTsKIAl9CiAKICAgICAgIGRvbmU6CiAKICNpZmRlZiBRVU9UQURFQlVHCiAJaWYgKCEgZXJyb3IpIHsKLQkJaWYgKGlwLT5pX3VkcXVvdCkgewotCQkJaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RRTE9DSykKLQkJCQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChpcC0+aV91ZHF1b3QpKTsKLQkJfQotCQlpZiAoaXAtPmlfZ2RxdW90KSB7Ci0JCQlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLKQotCQkJCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGlwLT5pX2dkcXVvdCkpOwotCQl9CiAJCWlmIChYRlNfSVNfVVFVT1RBX09OKG1wKSkKIAkJCUFTU0VSVChpcC0+aV91ZHF1b3QpOwogCQlpZiAoWEZTX0lTX09RVU9UQV9PTihtcCkpCkBAIC0yMDg2LDcgKzIwMjUsNyBAQAogCQkgKiBhIGRxbG9va3VwIHByb2Nlc3MgdGhhdCBob2xkcyB0aGUgaGFzaGxvY2sgdGhhdCBpcwogCQkgKiB3YWl0aW5nIGZvciB0aGUgZnJlZWxpc3QgbG9jay4KIAkJICovCi0JCWlmICghIHhmc19xbV9kcWhhc2hsb2NrX25vd2FpdChkcXApKSB7CisJCWlmICghbXV0ZXhfdHJ5bG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spKSB7CiAJCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CiAJCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJCWRxcCA9IGRxcC0+ZHFfZmxuZXh0OwpAQCAtMjEwMyw3ICsyMDQyLDcgQEAKIAkJCS8qIFhYWCBwdXQgYSBzZW50aW5lbCBzbyB0aGF0IHdlIGNhbiBjb21lIGJhY2sgaGVyZSAqLwogCQkJeGZzX2RxZnVubG9jayhkcXApOwogCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQlYRlNfRFFfSEFTSF9VTkxPQ0soaGFzaCk7CisJCQltdXRleF91bmxvY2soJmhhc2gtPnFoX2xvY2spOwogCQkJeGZzX3FtX2ZyZWVsaXN0X3VubG9jayh4ZnNfR3FtKTsKIAkJCWlmICgrK3Jlc3RhcnRzID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKIAkJCQlyZXR1cm4gbnJlY2xhaW1lZDsKQEAgLTIxMjAsNyArMjA1OSw3IEBACiAJCVhRTV9IQVNITElTVF9SRU1PVkUoaGFzaCwgZHFwKTsKIAkJeGZzX2RxZnVubG9jayhkcXApOwogCQl4ZnNfcW1fbXBsaXN0X3VubG9jayhkcXAtPnFfbW91bnQpOwotCQlYRlNfRFFfSEFTSF9VTkxPQ0soaGFzaCk7CisJCW11dGV4X3VubG9jaygmaGFzaC0+cWhfbG9jayk7CiAKICBvZmZfZnJlZWxpc3Q6CiAJCVhRTV9GUkVFTElTVF9SRU1PVkUoZHFwKTsKQEAgLTIyNjIsNyArMjIwMSw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghIHhmc19xbV9kcWhhc2hsb2NrX25vd2FpdChkcXApKQorCQlpZiAoIW11dGV4X3RyeWxvY2soJmRxcC0+cV9oYXNoLT5xaF9sb2NrKSkKIAkJCWdvdG8gbXBsaXN0dW5sb2NrOwogCiAJCUFTU0VSVChkcXAtPnFfbnJlZnMgPT0gMCk7CkBAIC0yMjcxLDcgKzIyMTAsNyBAQAogCQlYUU1fSEFTSExJU1RfUkVNT1ZFKGRxcC0+cV9oYXNoLCBkcXApOwogCQlYUU1fRlJFRUxJU1RfUkVNT1ZFKGRxcCk7CiAJCWRxcG91dCA9IGRxcDsKLQkJWEZTX0RRX0hBU0hfVU5MT0NLKGRxcC0+cV9oYXNoKTsKKwkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7CiAgbXBsaXN0dW5sb2NrOgogCQl4ZnNfcW1fbXBsaXN0X3VubG9jayhkcXAtPnFfbW91bnQpOwogCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CkBAIC0yNzc0LDM0ICsyNzEzLDMgQEAKIHsKIAl4ZnNfcW1fZnJlZWxpc3RfaW5zZXJ0KCh4ZnNfZnJsaXN0X3QgKilxbC0+cWhfcHJldiwgZHEpOwogfQotCi1TVEFUSUMgaW50Ci14ZnNfcW1fZHFoYXNobG9ja19ub3dhaXQoCi0JeGZzX2RxdW90X3QgKmRxcCkKLXsKLQlpbnQgbG9ja2VkOwotCi0JbG9ja2VkID0gbXV0ZXhfdHJ5bG9jaygmKChkcXApLT5xX2hhc2gtPnFoX2xvY2spKTsKLQlyZXR1cm4gbG9ja2VkOwotfQotCi1pbnQKLXhmc19xbV9mcmVlbGlzdF9sb2NrX25vd2FpdCgKLQl4ZnNfcW1fdCAqeHFtKQotewotCWludCBsb2NrZWQ7Ci0KLQlsb2NrZWQgPSBtdXRleF90cnlsb2NrKCYoeHFtLT5xbV9kcWZyZWVsaXN0LnFoX2xvY2spKTsKLQlyZXR1cm4gbG9ja2VkOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfcW1fbXBsaXN0X25vd2FpdCgKLQl4ZnNfbW91bnRfdAkqbXApCi17Ci0JaW50IGxvY2tlZDsKLQotCUFTU0VSVChtcC0+bV9xdW90YWluZm8pOwotCWxvY2tlZCA9IG11dGV4X3RyeWxvY2soJihYRlNfUUlfTVBMTE9DSyhtcCkpKTsKLQlyZXR1cm4gbG9ja2VkOwotfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5oIGIvZnMveGZzL3F1b3RhL3hmc19xbS5oCmluZGV4IGRkZjA5MTYuLmEzNzE5NTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uaAorKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmgKQEAgLTI3LDcgKzI3LDcgQEAKIHN0cnVjdCB4ZnNfaW5vZGU7CiAKIGV4dGVybiB1aW50CQluZHF1b3Q7Ci1leHRlcm4gbXV0ZXhfdAkJeGZzX0dxbV9sb2NrOworZXh0ZXJuIHN0cnVjdCBtdXRleAl4ZnNfR3FtX2xvY2s7CiBleHRlcm4gc3RydWN0IHhmc19xbQkqeGZzX0dxbTsKIGV4dGVybiBrbWVtX3pvbmVfdAkqcW1fZHF6b25lOwogZXh0ZXJuIGttZW1fem9uZV90CSpxbV9kcXRyeHpvbmU7CkBAIC03OSw3ICs3OSw3IEBACiB0eXBlZGVmIHN0cnVjdCB4ZnNfZnJsaXN0IHsKICAgICAgICBzdHJ1Y3QgeGZzX2RxdW90ICpxaF9uZXh0OwogICAgICAgIHN0cnVjdCB4ZnNfZHF1b3QgKnFoX3ByZXY7Ci0gICAgICAgbXV0ZXhfdAkJIHFoX2xvY2s7CisgICAgICAgc3RydWN0IG11dGV4CSBxaF9sb2NrOwogICAgICAgIHVpbnQJCSBxaF92ZXJzaW9uOwogICAgICAgIHVpbnQJCSBxaF9uZWxlbXM7CiB9IHhmc19mcmxpc3RfdDsKQEAgLTExNSw3ICsxMTUsNyBAQAogCXhmc19xd2FybmNudF90CSBxaV9id2FybmxpbWl0OwkgLyogbGltaXQgZm9yIGJsa3Mgd2FybmluZ3MgKi8KIAl4ZnNfcXdhcm5jbnRfdAkgcWlfaXdhcm5saW1pdDsJIC8qIGxpbWl0IGZvciBpbm9kZXMgd2FybmluZ3MgKi8KIAl4ZnNfcXdhcm5jbnRfdAkgcWlfcnRid2FybmxpbWl0Oy8qIGxpbWl0IGZvciBydCBibGtzIHdhcm5pbmdzICovCi0JbXV0ZXhfdAkJIHFpX3F1b3Rhb2ZmbG9jazsvKiB0byBzZXJpYWxpemUgcXVvdGFvZmYgKi8KKwlzdHJ1Y3QgbXV0ZXgJIHFpX3F1b3Rhb2ZmbG9jazsvKiB0byBzZXJpYWxpemUgcXVvdGFvZmYgKi8KIAl4ZnNfZmlsYmxrc190CSBxaV9kcWNodW5rbGVuOwkgLyogIyBCQnMgaW4gYSBjaHVuayBvZiBkcXMgKi8KIAl1aW50CQkgcWlfZHFwZXJjaHVuazsJIC8qICMgb25kaXNrIGRxcyBpbiBhYm92ZSBjaHVuayAqLwogCXhmc19xY250X3QJIHFpX2JoYXJkbGltaXQ7CSAvKiBkZWZhdWx0IGRhdGEgYmxrIGhhcmQgbGltaXQgKi8KQEAgLTE1OCwxMSArMTU4LDYgQEAKICNkZWZpbmUgWEZTX1FNX0lXQVJOTElNSVQJNQogI2RlZmluZSBYRlNfUU1fUlRCV0FSTkxJTUlUCTUKIAotI2RlZmluZSBYRlNfUU1fTE9DSyh4cW0pCShtdXRleF9sb2NrKCZ4cW0jI19sb2NrKSkKLSNkZWZpbmUgWEZTX1FNX1VOTE9DSyh4cW0pCShtdXRleF91bmxvY2soJnhxbSMjX2xvY2spKQotI2RlZmluZSBYRlNfUU1fSE9MRCh4cW0pCSgoeHFtKS0+cW1fbnJlZnMrKykKLSNkZWZpbmUgWEZTX1FNX1JFTEUoeHFtKQkoKHhxbSktPnFtX25yZWZzLS0pCi0KIGV4dGVybiB2b2lkCQl4ZnNfcW1fZGVzdHJveV9xdW90YWluZm8oeGZzX21vdW50X3QgKik7CiBleHRlcm4gdm9pZAkJeGZzX3FtX21vdW50X3F1b3Rhcyh4ZnNfbW91bnRfdCAqKTsKIGV4dGVybiBpbnQJCXhmc19xbV9xdW90YWNoZWNrKHhmc19tb3VudF90ICopOwpAQCAtMTc4LDYgKzE3MywxNiBAQAogZXh0ZXJuIGludAkJeGZzX3FtX2RxcHVyZ2VfYWxsKHhmc19tb3VudF90ICosIHVpbnQpOwogZXh0ZXJuIHZvaWQJCXhmc19xbV9kcXJlbGVfYWxsX2lub2Rlcyh4ZnNfbW91bnRfdCAqLCB1aW50KTsKIAorLyogcXVvdGEgb3BzICovCitleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGVzKHhmc19tb3VudF90ICosIHVpbnQpOworZXh0ZXJuIGludAkJeGZzX3FtX3NjYWxsX2dldHF1b3RhKHhmc19tb3VudF90ICosIHhmc19kcWlkX3QsIHVpbnQsCisJCQkJCWZzX2Rpc2tfcXVvdGFfdCAqKTsKK2V4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9zZXRxbGltKHhmc19tb3VudF90ICosIHhmc19kcWlkX3QsIHVpbnQsCisJCQkJCWZzX2Rpc2tfcXVvdGFfdCAqKTsKK2V4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9nZXRxc3RhdCh4ZnNfbW91bnRfdCAqLCBmc19xdW90YV9zdGF0X3QgKik7CitleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfcXVvdGFvbih4ZnNfbW91bnRfdCAqLCB1aW50KTsKK2V4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9xdW90YW9mZih4ZnNfbW91bnRfdCAqLCB1aW50KTsKKwogLyogdm9wIHN0dWZmICovCiBleHRlcm4gaW50CQl4ZnNfcW1fdm9wX2RxYWxsb2MoeGZzX21vdW50X3QgKiwgeGZzX2lub2RlX3QgKiwKIAkJCQkJdWlkX3QsIGdpZF90LCBwcmlkX3QsIHVpbnQsCkBAIC0xOTQsMTEgKzE5OSw2IEBACiAvKiBsaXN0IHN0dWZmICovCiBleHRlcm4gdm9pZAkJeGZzX3FtX2ZyZWVsaXN0X2FwcGVuZCh4ZnNfZnJsaXN0X3QgKiwgeGZzX2RxdW90X3QgKik7CiBleHRlcm4gdm9pZAkJeGZzX3FtX2ZyZWVsaXN0X3VubGluayh4ZnNfZHF1b3RfdCAqKTsKLWV4dGVybiBpbnQJCXhmc19xbV9mcmVlbGlzdF9sb2NrX25vd2FpdCh4ZnNfcW1fdCAqKTsKLQotLyogc3lzdGVtIGNhbGwgaW50ZXJmYWNlICovCi1leHRlcm4gaW50CQl4ZnNfcW1fcXVvdGFjdGwoc3RydWN0IHhmc19tb3VudCAqLCBpbnQsIGludCwKLQkJCQl4ZnNfY2FkZHJfdCk7CiAKICNpZmRlZiBERUJVRwogZXh0ZXJuIGludAkJeGZzX3FtX2ludGVybmFscWNoZWNrKHhmc19tb3VudF90ICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggYmM2YzVjYy4uNjMwMzdjNiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC0yMzUsNyArMjM1LDYgQEAKIAkueGZzX2Rxdm9wY2hvd25yZXN2CT0geGZzX3FtX3ZvcF9jaG93bl9yZXNlcnZlLAogCS54ZnNfZHFzdGF0dmZzCQk9IHhmc19xbV9zdGF0dmZzLAogCS54ZnNfZHFzeW5jCQk9IHhmc19xbV9zeW5jLAotCS54ZnNfcXVvdGFjdGwJCT0geGZzX3FtX3F1b3RhY3RsLAogCS54ZnNfZHF0cnhvcHMJCT0gJnhmc190cmFuc19kcXVvdF9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTCh4ZnNfcW1jb3JlX3hmcyk7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggNjgxMzliMy4uYzdiNjZmNiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtNTcsMTM1ICs1NywxNiBAQAogIyBkZWZpbmUgcWRwcmludGsocywgYXJncy4uLikJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlcyh4ZnNfbW91bnRfdCAqLCB1aW50KTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX2dldHF1b3RhKHhmc19tb3VudF90ICosIHhmc19kcWlkX3QsIHVpbnQsCi0JCQkJCWZzX2Rpc2tfcXVvdGFfdCAqKTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX2dldHFzdGF0KHhmc19tb3VudF90ICosIGZzX3F1b3RhX3N0YXRfdCAqKTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX3NldHFsaW0oeGZzX21vdW50X3QgKiwgeGZzX2RxaWRfdCwgdWludCwKLQkJCQkJZnNfZGlza19xdW90YV90ICopOwotU1RBVElDIGludAl4ZnNfcW1fc2NhbGxfcXVvdGFvbih4ZnNfbW91bnRfdCAqLCB1aW50KTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX3F1b3Rhb2ZmKHhmc19tb3VudF90ICosIHVpbnQsIGJvb2xlYW5fdCk7CiBTVEFUSUMgaW50CXhmc19xbV9sb2dfcXVvdGFvZmYoeGZzX21vdW50X3QgKiwgeGZzX3FvZmZfbG9naXRlbV90ICoqLCB1aW50KTsKIFNUQVRJQyBpbnQJeGZzX3FtX2xvZ19xdW90YW9mZl9lbmQoeGZzX21vdW50X3QgKiwgeGZzX3FvZmZfbG9naXRlbV90ICosCiAJCQkJCXVpbnQpOwotU1RBVElDIHVpbnQJeGZzX3FtX2ltcG9ydF9mbGFncyh1aW50KTsKIFNUQVRJQyB1aW50CXhmc19xbV9leHBvcnRfZmxhZ3ModWludCk7Ci1TVEFUSUMgdWludAl4ZnNfcW1faW1wb3J0X3F0eXBlX2ZsYWdzKHVpbnQpOwogU1RBVElDIHVpbnQJeGZzX3FtX2V4cG9ydF9xdHlwZV9mbGFncyh1aW50KTsKIFNUQVRJQyB2b2lkCXhmc19xbV9leHBvcnRfZHF1b3QoeGZzX21vdW50X3QgKiwgeGZzX2Rpc2tfZHF1b3RfdCAqLAogCQkJCQlmc19kaXNrX3F1b3RhX3QgKik7CiAKIAogLyoKLSAqIFRoZSBtYWluIGRpc3RyaWJ1dGlvbiBzd2l0Y2ggb2YgYWxsIFhGUyBxdW90YWN0bCBzeXN0ZW0gY2FsbHMuCi0gKi8KLWludAoteGZzX3FtX3F1b3RhY3RsKAotCXhmc19tb3VudF90CSptcCwKLQlpbnQJCWNtZCwKLQlpbnQJCWlkLAotCXhmc19jYWRkcl90CWFkZHIpCi17Ci0JaW50CQllcnJvcjsKLQotCUFTU0VSVChhZGRyICE9IE5VTEwgfHwgY21kID09IFFfWFFVT1RBU1lOQyk7Ci0KLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIHZhbGlkIGV2ZW4gd2hlbiBxdW90YW9mZi4KLQkgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUV9YUVVPVEFSTToKLQkJLyoKLQkJICogVHJ1bmNhdGUgcXVvdGEgZmlsZXMuIHF1b3RhIG11c3QgYmUgb2ZmLgotCQkgKi8KLQkJaWYgKFhGU19JU19RVU9UQV9PTihtcCkpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVST0ZTKTsKLQkJcmV0dXJuICh4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGVzKG1wLAotCQkJICAgICAgIHhmc19xbV9pbXBvcnRfcXR5cGVfZmxhZ3MoKih1aW50ICopYWRkcikpKTsKLQotCWNhc2UgUV9YR0VUUVNUQVQ6Ci0JCS8qCi0JCSAqIEdldCBxdW90YSBzdGF0dXMgaW5mb3JtYXRpb24uCi0JCSAqLwotCQlyZXR1cm4gKHhmc19xbV9zY2FsbF9nZXRxc3RhdChtcCwgKGZzX3F1b3RhX3N0YXRfdCAqKWFkZHIpKTsKLQotCWNhc2UgUV9YUVVPVEFPTjoKLQkJLyoKLQkJICogUVVPVEFPTiAtIGVuYWJsaW5nIHF1b3RhIGVuZm9yY2VtZW50LgotCQkgKiBRdW90YSBhY2NvdW50aW5nIG11c3QgYmUgdHVybmVkIG9uIGF0IG1vdW50IHRpbWUuCi0JCSAqLwotCQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQotCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7Ci0JCXJldHVybiAoeGZzX3FtX3NjYWxsX3F1b3Rhb24obXAsCi0JCQkJCSAgeGZzX3FtX2ltcG9ydF9mbGFncygqKHVpbnQgKilhZGRyKSkpOwotCi0JY2FzZSBRX1hRVU9UQU9GRjoKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQlicmVhazsKLQotCWNhc2UgUV9YUVVPVEFTWU5DOgotCQlyZXR1cm4geGZzX3N5bmNfaW5vZGVzKG1wLCBTWU5DX0RFTFdSSSk7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlpZiAoISBYRlNfSVNfUVVPVEFfT04obXApKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVTUkNIKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBRX1hRVU9UQU9GRjoKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQllcnJvciA9IHhmc19xbV9zY2FsbF9xdW90YW9mZihtcCwKLQkJCQkJICAgIHhmc19xbV9pbXBvcnRfZmxhZ3MoKih1aW50ICopYWRkciksCi0JCQkJCSAgICBCX0ZBTFNFKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFFfWEdFVFFVT1RBOgotCQllcnJvciA9IHhmc19xbV9zY2FsbF9nZXRxdW90YShtcCwgKHhmc19kcWlkX3QpaWQsIFhGU19EUV9VU0VSLAotCQkJCQkoZnNfZGlza19xdW90YV90ICopYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgUV9YR0VUR1FVT1RBOgotCQllcnJvciA9IHhmc19xbV9zY2FsbF9nZXRxdW90YShtcCwgKHhmc19kcWlkX3QpaWQsIFhGU19EUV9HUk9VUCwKLQkJCQkJKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQljYXNlIFFfWEdFVFBRVU9UQToKLQkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEobXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfUFJPSiwKLQkJCQkJKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQotCWNhc2UgUV9YU0VUUUxJTToKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQllcnJvciA9IHhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCAoeGZzX2RxaWRfdClpZCwgWEZTX0RRX1VTRVIsCi0JCQkJCSAgICAgKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQljYXNlIFFfWFNFVEdRTElNOgotCQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQotCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7Ci0JCWVycm9yID0geGZzX3FtX3NjYWxsX3NldHFsaW0obXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfR1JPVVAsCi0JCQkJCSAgICAgKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQljYXNlIFFfWFNFVFBRTElNOgotCQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQotCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7Ci0JCWVycm9yID0geGZzX3FtX3NjYWxsX3NldHFsaW0obXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfUFJPSiwKLQkJCQkJICAgICAoZnNfZGlza19xdW90YV90ICopYWRkcik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLS8qCiAgKiBUdXJuIG9mZiBxdW90YSBhY2NvdW50aW5nIGFuZC9vciBlbmZvcmNlbWVudCBmb3IgYWxsIHVkcXVvdHMgYW5kL29yCiAgKiBnZHF1b3RzLiBDYWxsZWQgb25seSBhdCB1bm1vdW50IHRpbWUuCiAgKgpAQCAtMTkzLDExICs3NCwxMCBAQAogICogaW5jb3JlLCBhbmQgbW9kaWZpZXMgdGhlIG9uZGlzayBkcXVvdCBkaXJlY3RseS4gVGhlcmVmb3JlLCBmb3IgZXhhbXBsZSwKICAqIGl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyB0d2ljZSwgd2l0aG91dCBwdXJnaW5nIHRoZSBjYWNoZS4KICAqLwotU1RBVElDIGludAoraW50CiB4ZnNfcW1fc2NhbGxfcXVvdGFvZmYoCiAJeGZzX21vdW50X3QJCSptcCwKLQl1aW50CQkJZmxhZ3MsCi0JYm9vbGVhbl90CQlmb3JjZSkKKwl1aW50CQkJZmxhZ3MpCiB7CiAJdWludAkJCWRxdHlwZTsKIAlpbnQJCQllcnJvcjsKQEAgLTIwNSw4ICs4NSw2IEBACiAJeGZzX3FvZmZfbG9naXRlbV90CSpxb2Zmc3RhcnQ7CiAJaW50CQkJbmN1bHByaXRzOwogCi0JaWYgKCFmb3JjZSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIFhGU19FUlJPUihFUEVSTSk7CiAJLyoKIAkgKiBObyBmaWxlIHN5c3RlbSBjYW4gaGF2ZSBxdW90YXMgZW5hYmxlZCBvbiBkaXNrIGJ1dCBub3QgaW4gY29yZS4KIAkgKiBOb3RlIHRoYXQgcXVvdGEgdXRpbGl0aWVzIChsaWtlIHF1b3Rhb2ZmKSBfZXhwZWN0XwpAQCAtMzc1LDcgKzI1Myw3IEBACiAJcmV0dXJuIChlcnJvcik7CiB9CiAKLVNUQVRJQyBpbnQKK2ludAogeGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlcygKIAl4ZnNfbW91bnRfdAkqbXAsCiAJdWludAkJZmxhZ3MpCkBAIC0zODMsOCArMjYxLDYgQEAKIAlpbnQJCWVycm9yID0gMCwgZXJyb3IyID0gMDsKIAl4ZnNfaW5vZGVfdAkqcWlwOwogCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVQRVJNKTsKIAlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc3F1b3RhKCZtcC0+bV9zYikgfHwgZmxhZ3MgPT0gMCkgewogCQlxZHByaW50aygicXRydW5jIGZsYWdzPSV4IG1fcWZsYWdzPSV4XG4iLCBmbGFncywgbXAtPm1fcWZsYWdzKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwpAQCAtNDE2LDcgKzI5Miw3IEBACiAgKiBlZmZlY3QgaW1tZWRpYXRlbHkuCiAgKiAoU3dpdGNoaW5nIG9uIHF1b3RhIGFjY291bnRpbmcgbXVzdCBiZSBkb25lIGF0IG1vdW50IHRpbWUuKQogICovCi1TVEFUSUMgaW50CitpbnQKIHhmc19xbV9zY2FsbF9xdW90YW9uKAogCXhmc19tb3VudF90CSptcCwKIAl1aW50CQlmbGFncykKQEAgLTQyNiw5ICszMDIsNiBAQAogCXVpbnQJCWFjY2ZsYWdzOwogCV9faW50NjRfdAlzYmZsYWdzOwogCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVQRVJNKTsKLQogCWZsYWdzICY9IChYRlNfQUxMX1FVT1RBX0FDQ1QgfCBYRlNfQUxMX1FVT1RBX0VORkQpOwogCS8qCiAJICogU3dpdGNoaW5nIG9uIHF1b3RhIGFjY291bnRpbmcgbXVzdCBiZSBkb25lIGF0IG1vdW50IHRpbWUuCkBAIC01MTcsNyArMzkwLDcgQEAKIC8qCiAgKiBSZXR1cm4gcXVvdGEgc3RhdHVzIGluZm9ybWF0aW9uLCBzdWNoIGFzIHVxdW90YS1vZmYsIGVuZm9yY2VtZW50cywgZXRjLgogICovCi1TVEFUSUMgaW50CitpbnQKIHhmc19xbV9zY2FsbF9nZXRxc3RhdCgKIAl4ZnNfbW91bnRfdAkqbXAsCiAJZnNfcXVvdGFfc3RhdF90ICpvdXQpCkBAIC01ODIsNyArNDU1LDcgQEAKIC8qCiAgKiBBZGp1c3QgcXVvdGEgbGltaXRzLCBhbmQgc3RhcnQvc3RvcCB0aW1lcnMgYWNjb3JkaW5nbHkuCiAgKi8KLVNUQVRJQyBpbnQKK2ludAogeGZzX3FtX3NjYWxsX3NldHFsaW0oCiAJeGZzX21vdW50X3QJCSptcCwKIAl4ZnNfZHFpZF90CQlpZCwKQEAgLTU5NSw5ICs0NjgsNiBAQAogCWludAkJCWVycm9yOwogCXhmc19xY250X3QJCWhhcmQsIHNvZnQ7CiAKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiBYRlNfRVJST1IoRVBFUk0pOwotCiAJaWYgKChuZXdsaW0tPmRfZmllbGRtYXNrICYKIAkgICAgKEZTX0RRX0xJTUlUX01BU0t8RlNfRFFfVElNRVJfTUFTS3xGU19EUV9XQVJOU19NQVNLKSkgPT0gMCkKIAkJcmV0dXJuICgwKTsKQEAgLTc0Miw3ICs2MTIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotU1RBVElDIGludAoraW50CiB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEoCiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19kcWlkX3QJaWQsCkBAIC05MzUsMzAgKzgwNSw2IEBACiB9CiAKIFNUQVRJQyB1aW50Ci14ZnNfcW1faW1wb3J0X3F0eXBlX2ZsYWdzKAotCXVpbnQJCXVmbGFncykKLXsKLQl1aW50CQlvZmxhZ3MgPSAwOwotCi0JLyoKLQkgKiBDYW4ndCBiZSBtb3JlIHRoYW4gb25lLCBvciBub25lLgotCSAqLwotCWlmICgoKHVmbGFncyAmIChYRlNfR1JPVVBfUVVPVEEgfCBYRlNfVVNFUl9RVU9UQSkpID09Ci0JCQkoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1VTRVJfUVVPVEEpKSB8fAotCSAgICAoKHVmbGFncyAmIChYRlNfR1JPVVBfUVVPVEEgfCBYRlNfUFJPSl9RVU9UQSkpID09Ci0JCQkoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1BST0pfUVVPVEEpKSB8fAotCSAgICAoKHVmbGFncyAmIChYRlNfVVNFUl9RVU9UQSB8IFhGU19QUk9KX1FVT1RBKSkgPT0KLQkJCShYRlNfVVNFUl9RVU9UQSB8IFhGU19QUk9KX1FVT1RBKSkgfHwKLQkgICAgKCh1ZmxhZ3MgJiAoWEZTX0dST1VQX1FVT1RBfFhGU19VU0VSX1FVT1RBfFhGU19QUk9KX1FVT1RBKSkgPT0gMCkpCi0JCXJldHVybiAoMCk7Ci0KLQlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19VU0VSX1FVT1RBKSA/IFhGU19EUV9VU0VSIDogMDsKLQlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19QUk9KX1FVT1RBKSA/IFhGU19EUV9QUk9KIDogMDsKLQlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19HUk9VUF9RVU9UQSkgPyBYRlNfRFFfR1JPVVA6IDA7Ci0JcmV0dXJuIG9mbGFnczsKLX0KLQotU1RBVElDIHVpbnQKIHhmc19xbV9leHBvcnRfcXR5cGVfZmxhZ3MoCiAJdWludCBmbGFncykKIHsKQEAgLTk3OSwyNiArODI1LDYgQEAKIH0KIAogU1RBVElDIHVpbnQKLXhmc19xbV9pbXBvcnRfZmxhZ3MoCi0JdWludCB1ZmxhZ3MpCi17Ci0JdWludCBmbGFncyA9IDA7Ci0KLQlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1VEUV9BQ0NUKQotCQlmbGFncyB8PSBYRlNfVVFVT1RBX0FDQ1Q7Ci0JaWYgKHVmbGFncyAmIFhGU19RVU9UQV9QRFFfQUNDVCkKLQkJZmxhZ3MgfD0gWEZTX1BRVU9UQV9BQ0NUOwotCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfR0RRX0FDQ1QpCi0JCWZsYWdzIHw9IFhGU19HUVVPVEFfQUNDVDsKLQlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1VEUV9FTkZEKQotCQlmbGFncyB8PSBYRlNfVVFVT1RBX0VORkQ7Ci0JaWYgKHVmbGFncyAmIChYRlNfUVVPVEFfUERRX0VORkR8WEZTX1FVT1RBX0dEUV9FTkZEKSkKLQkJZmxhZ3MgfD0gWEZTX09RVU9UQV9FTkZEOwotCXJldHVybiAoZmxhZ3MpOwotfQotCi0KLVNUQVRJQyB1aW50CiB4ZnNfcW1fZXhwb3J0X2ZsYWdzKAogCXVpbnQgZmxhZ3MpCiB7CkBAIC0xMTM0LDcgKzk2MCw3IEBACiB4ZnNfZHFoYXNoX3QgKnFtdGVzdF9nZHF0YWI7CiBpbnQJICAgICAgcW10ZXN0X2hhc2htYXNrOwogaW50CSAgICAgIHFtdGVzdF9uZmFpbHM7Ci1tdXRleF90CSAgICAgIHFjaGVja19sb2NrOworc3RydWN0IG11dGV4ICBxY2hlY2tfbG9jazsKIAogI2RlZmluZSBEUVRFU1RfSEFTSFZBTChtcCwgaWQpICgoKF9fcHN1bnNpZ25lZF90KShtcCkgKyBcCiAJCQkJIChfX3BzdW5zaWduZWRfdCkoaWQpKSAmIFwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oIGIvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKaW5kZXggYzRmY2VhNi4uODI4NmIyOCAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKQEAgLTQyLDM0ICs0MiwyNCBAQAogI2RlZmluZSBYRlNfUUlfUU9GRkxPQ0sobXApCSgobXApLT5tX3F1b3RhaW5mby0+cWlfcXVvdGFvZmZsb2NrKQogCiAjZGVmaW5lIFhGU19RSV9NUExfTElTVChtcCkJKChtcCktPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3QpCi0jZGVmaW5lIFhGU19RSV9NUExMT0NLKG1wKQkoKG1wKS0+bV9xdW90YWluZm8tPnFpX2RxbGlzdC5xaF9sb2NrKQogI2RlZmluZSBYRlNfUUlfTVBMTkVYVChtcCkJKChtcCktPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3QucWhfbmV4dCkKICNkZWZpbmUgWEZTX1FJX01QTE5EUVVPVFMobXApCSgobXApLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0LnFoX25lbGVtcykKIAotI2RlZmluZSBYUU1MQ0soaCkJCQkobXV0ZXhfbG9jaygmKChoKS0+cWhfbG9jaykpKQotI2RlZmluZSBYUU1VTkxDSyhoKQkJCShtdXRleF91bmxvY2soJigoaCktPnFoX2xvY2spKSkKLSNpZmRlZiBERUJVRwotc3RydWN0IHhmc19kcWhhc2g7Ci1zdGF0aWMgaW5saW5lIGludCBYUU1JU0xDS0Qoc3RydWN0IHhmc19kcWhhc2ggKmgpCi17Ci0JaWYgKG11dGV4X3RyeWxvY2soJmgtPnFoX2xvY2spKSB7Ci0JCW11dGV4X3VubG9jaygmaC0+cWhfbG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgorI2RlZmluZSB4ZnNfcW1fbXBsaXN0X2xvY2sobXApIFwKKwltdXRleF9sb2NrKCYoWEZTX1FJX01QTF9MSVNUKG1wKS5xaF9sb2NrKSkKKyNkZWZpbmUgeGZzX3FtX21wbGlzdF9ub3dhaXQobXApIFwKKwltdXRleF90cnlsb2NrKCYoWEZTX1FJX01QTF9MSVNUKG1wKS5xaF9sb2NrKSkKKyNkZWZpbmUgeGZzX3FtX21wbGlzdF91bmxvY2sobXApIFwKKwltdXRleF91bmxvY2soJihYRlNfUUlfTVBMX0xJU1QobXApLnFoX2xvY2spKQorI2RlZmluZSBYRlNfUU1fSVNfTVBMSVNUX0xPQ0tFRChtcCkgXAorCW11dGV4X2lzX2xvY2tlZCgmKFhGU19RSV9NUExfTElTVChtcCkucWhfbG9jaykpCiAKLSNkZWZpbmUgWEZTX0RRX0hBU0hfTE9DSyhoKQkJWFFNTENLKGgpCi0jZGVmaW5lIFhGU19EUV9IQVNIX1VOTE9DSyhoKQkJWFFNVU5MQ0soaCkKLSNkZWZpbmUgWEZTX0RRX0lTX0hBU0hfTE9DS0VEKGgpCVhRTUlTTENLRChoKQotCi0jZGVmaW5lIHhmc19xbV9tcGxpc3RfbG9jayhtcCkJCVhRTUxDSygmKFhGU19RSV9NUExfTElTVChtcCkpKQotI2RlZmluZSB4ZnNfcW1fbXBsaXN0X3VubG9jayhtcCkJWFFNVU5MQ0soJihYRlNfUUlfTVBMX0xJU1QobXApKSkKLSNkZWZpbmUgWEZTX1FNX0lTX01QTElTVF9MT0NLRUQobXApCVhRTUlTTENLRCgmKFhGU19RSV9NUExfTElTVChtcCkpKQotCi0jZGVmaW5lIHhmc19xbV9mcmVlbGlzdF9sb2NrKHFtKQlYUU1MQ0soJigocW0pLT5xbV9kcWZyZWVsaXN0KSkKLSNkZWZpbmUgeGZzX3FtX2ZyZWVsaXN0X3VubG9jayhxbSkJWFFNVU5MQ0soJigocW0pLT5xbV9kcWZyZWVsaXN0KSkKKyNkZWZpbmUgeGZzX3FtX2ZyZWVsaXN0X2xvY2socW0pIFwKKwltdXRleF9sb2NrKCYoKHFtKS0+cW1fZHFmcmVlbGlzdC5xaF9sb2NrKSkKKyNkZWZpbmUgeGZzX3FtX2ZyZWVsaXN0X2xvY2tfbm93YWl0KHFtKSBcCisJbXV0ZXhfdHJ5bG9jaygmKChxbSktPnFtX2RxZnJlZWxpc3QucWhfbG9jaykpCisjZGVmaW5lIHhmc19xbV9mcmVlbGlzdF91bmxvY2socW0pIFwKKwltdXRleF91bmxvY2soJigocW0pLT5xbV9kcWZyZWVsaXN0LnFoX2xvY2spKQogCiAvKgogICogSGFzaCBpbnRvIGEgYnVja2V0IGluIHRoZSBkcXVvdCBoYXNoIHRhYmxlLCBiYXNlZCBvbiA8bXAsIGlkPi4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwppbmRleCA5OTYxMTM4Li40NDcxNzNiIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCkBAIC02MjQsMTAgKzYyNCw5IEBACiAJeGZzX3FjbnRfdAkqcmVzYmNvdW50cDsKIAl4ZnNfcXVvdGFpbmZvX3QJKnEgPSBtcC0+bV9xdW90YWluZm87CiAKLQlpZiAoISAoZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLKSkgewotCQl4ZnNfZHFsb2NrKGRxcCk7Ci0JfQotCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOworCisJeGZzX2RxbG9jayhkcXApOworCiAJaWYgKGZsYWdzICYgWEZTX1RSQU5TX0RRX1JFU19CTEtTKSB7CiAJCWhhcmRsaW1pdCA9IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX2hhcmRsaW1pdCk7CiAJCWlmICghaGFyZGxpbWl0KQpAQCAtNzQwLDEwICs3MzksOCBAQAogCUFTU0VSVChkcXAtPnFfcmVzX2ljb3VudCA+PSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2ljb3VudCkpOwogCiBlcnJvcl9yZXR1cm46Ci0JaWYgKCEgKGZsYWdzICYgWEZTX1FNT1BUX0RRTE9DSykpIHsKLQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JfQotCXJldHVybiAoZXJyb3IpOworCXhmc19kcXVubG9jayhkcXApOworCXJldHVybiBlcnJvcjsKIH0KIAogCkBAIC03NTMsOCArNzUwLDcgQEAKICAqIGdycC9wcmogcXVvdGFzIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGlzIGZvbGxvd3MgYSBib3RoLW9yLW5vdGhpbmcKICAqIGFwcHJvYWNoLgogICoKLSAqIGZsYWdzID0gWEZTX1FNT1BUX0RRTE9DSyBpbmRpY2F0ZSBpZiBkcXVvdChzKSBuZWVkIHRvIGJlIGxvY2tlZC4KLSAqCSAgIFhGU19RTU9QVF9GT1JDRV9SRVMgZXZhZGVzIGxpbWl0IGVuZm9yY2VtZW50LiBVc2VkIGJ5IGNob3duLgorICogZmxhZ3MgPSBYRlNfUU1PUFRfRk9SQ0VfUkVTIGV2YWRlcyBsaW1pdCBlbmZvcmNlbWVudC4gVXNlZCBieSBjaG93bi4KICAqCSAgIFhGU19RTU9QVF9FTk9TUEMgcmV0dXJucyBFTk9TUEMgbm90IEVEUVVPVC4gIFVzZWQgYnkgcHF1b3RhLgogICoJICAgWEZTX1RSQU5TX0RRX1JFU19CTEtTIHJlc2VydmVzIHJlZ3VsYXIgZGlzayBibG9ja3MKICAqCSAgIFhGU19UUkFOU19EUV9SRVNfUlRCTEtTIHJlc2VydmVzIHJlYWx0aW1lIGRpc2sgYmxvY2tzCmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jIGIvZnMveGZzL3N1cHBvcnQvZGVidWcuYwppbmRleCBhZTU0ODI5Li4zZjM2MTBhIDEwMDY0NAotLS0gYS9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jCisrKyBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJ4ZnNfYWcuaCIKICNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKKyNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKIAogc3RhdGljIGNoYXIJCW1lc3NhZ2VbMTAyNF07CS8qIGtlZXAgaXQgb2ZmIHRoZSBzdGFjayAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnNfZXJyX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvdXVpZC5jIGIvZnMveGZzL3N1cHBvcnQvdXVpZC5jCmluZGV4IDU4MzBjMDQuLmI4M2Y3NmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L3V1aWQuYworKysgYi9mcy94ZnMvc3VwcG9ydC91dWlkLmMKQEAgLTE3LDEwICsxNyw2IEBACiAgKi8KICNpbmNsdWRlIDx4ZnMuaD4KIAotc3RhdGljIERFRklORV9NVVRFWCh1dWlkX21vbml0b3IpOwotc3RhdGljIGludAl1dWlkX3RhYmxlX3NpemU7Ci1zdGF0aWMgdXVpZF90CSp1dWlkX3RhYmxlOwotCiAvKiBJUklYIGludGVycHJldGF0aW9uIG9mIGFuIHV1aWRfdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCV9fYmUzMgl1dV90aW1lbG93OwpAQCAtNDYsMTIgKzQyLDYgQEAKIAlmc2lkWzFdID0gYmUzMl90b19jcHUodXVwLT51dV90aW1lbG93KTsKIH0KIAotdm9pZAotdXVpZF9jcmVhdGVfbmlsKHV1aWRfdCAqdXVpZCkKLXsKLQltZW1zZXQodXVpZCwgMCwgc2l6ZW9mKCp1dWlkKSk7Ci19Ci0KIGludAogdXVpZF9pc19uaWwodXVpZF90ICp1dWlkKQogewpAQCAtNzEsNjQgKzYxLDMgQEAKIHsKIAlyZXR1cm4gbWVtY21wKHV1aWQxLCB1dWlkMiwgc2l6ZW9mKHV1aWRfdCkpID8gMCA6IDE7CiB9Ci0KLS8qCi0gKiBHaXZlbiBhIDEyOC1iaXQgdXVpZCwgcmV0dXJuIGEgNjQtYml0IHZhbHVlIGJ5IGFkZGluZyB0aGUgdG9wIGFuZCBib3R0b20KLSAqIDY0LWJpdCB3b3Jkcy4gIE5PVEU6IFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBiZSBjaGFuZ2VkIEVWRVIuICBBbHRob3VnaAotICogYnJhaW4tZGVhZCwgc29tZSBhcHBsaWNhdGlvbnMgZGVwZW5kIG9uIHRoaXMgNjQtYml0IHZhbHVlIHJlbWFpbmluZwotICogcGVyc2lzdGVudC4gIFNwZWNpZmljYWxseSwgRE1JIHZlbmRvcnMgc3RvcmUgdGhlIHZhbHVlIGFzIGEgcGVyc2lzdGVudAotICogZmlsZWhhbmRsZS4KLSAqLwotX191aW50NjRfdAotdXVpZF9oYXNoNjQodXVpZF90ICp1dWlkKQotewotCV9fdWludDY0X3QJKnNwID0gKF9fdWludDY0X3QgKil1dWlkOwotCi0JcmV0dXJuIHNwWzBdICsgc3BbMV07Ci19Ci0KLWludAotdXVpZF90YWJsZV9pbnNlcnQodXVpZF90ICp1dWlkKQotewotCWludAlpLCBob2xlOwotCi0JbXV0ZXhfbG9jaygmdXVpZF9tb25pdG9yKTsKLQlmb3IgKGkgPSAwLCBob2xlID0gLTE7IGkgPCB1dWlkX3RhYmxlX3NpemU7IGkrKykgewotCQlpZiAodXVpZF9pc19uaWwoJnV1aWRfdGFibGVbaV0pKSB7Ci0JCQlob2xlID0gaTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh1dWlkX2VxdWFsKHV1aWQsICZ1dWlkX3RhYmxlW2ldKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZ1dWlkX21vbml0b3IpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JaWYgKGhvbGUgPCAwKSB7Ci0JCXV1aWRfdGFibGUgPSBrbWVtX3JlYWxsb2ModXVpZF90YWJsZSwKLQkJCSh1dWlkX3RhYmxlX3NpemUgKyAxKSAqIHNpemVvZigqdXVpZF90YWJsZSksCi0JCQl1dWlkX3RhYmxlX3NpemUgICogc2l6ZW9mKCp1dWlkX3RhYmxlKSwKLQkJCUtNX1NMRUVQKTsKLQkJaG9sZSA9IHV1aWRfdGFibGVfc2l6ZSsrOwotCX0KLQl1dWlkX3RhYmxlW2hvbGVdID0gKnV1aWQ7Ci0JbXV0ZXhfdW5sb2NrKCZ1dWlkX21vbml0b3IpOwotCXJldHVybiAxOwotfQotCi12b2lkCi11dWlkX3RhYmxlX3JlbW92ZSh1dWlkX3QgKnV1aWQpCi17Ci0JaW50CWk7Ci0KLQltdXRleF9sb2NrKCZ1dWlkX21vbml0b3IpOwotCWZvciAoaSA9IDA7IGkgPCB1dWlkX3RhYmxlX3NpemU7IGkrKykgewotCQlpZiAodXVpZF9pc19uaWwoJnV1aWRfdGFibGVbaV0pKQotCQkJY29udGludWU7Ci0JCWlmICghdXVpZF9lcXVhbCh1dWlkLCAmdXVpZF90YWJsZVtpXSkpCi0JCQljb250aW51ZTsKLQkJdXVpZF9jcmVhdGVfbmlsKCZ1dWlkX3RhYmxlW2ldKTsKLQkJYnJlYWs7Ci0JfQotCUFTU0VSVChpIDwgdXVpZF90YWJsZV9zaXplKTsKLQltdXRleF91bmxvY2soJnV1aWRfbW9uaXRvcik7Ci19CmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC91dWlkLmggYi9mcy94ZnMvc3VwcG9ydC91dWlkLmgKaW5kZXggY2ZmNWI2MC4uNDczMmQ3MSAxMDA2NDQKLS0tIGEvZnMveGZzL3N1cHBvcnQvdXVpZC5oCisrKyBiL2ZzL3hmcy9zdXBwb3J0L3V1aWQuaApAQCAtMjIsMTIgKzIyLDggQEAKIAl1bnNpZ25lZCBjaGFyCV9fdV9iaXRzWzE2XTsKIH0gdXVpZF90OwogCi1leHRlcm4gdm9pZCB1dWlkX2NyZWF0ZV9uaWwodXVpZF90ICp1dWlkKTsKIGV4dGVybiBpbnQgdXVpZF9pc19uaWwodXVpZF90ICp1dWlkKTsKIGV4dGVybiBpbnQgdXVpZF9lcXVhbCh1dWlkX3QgKnV1aWQxLCB1dWlkX3QgKnV1aWQyKTsKIGV4dGVybiB2b2lkIHV1aWRfZ2V0bm9kZXVuaXEodXVpZF90ICp1dWlkLCBpbnQgZnNpZCBbMl0pOwotZXh0ZXJuIF9fdWludDY0X3QgdXVpZF9oYXNoNjQodXVpZF90ICp1dWlkKTsKLWV4dGVybiBpbnQgdXVpZF90YWJsZV9pbnNlcnQodXVpZF90ICp1dWlkKTsKLWV4dGVybiB2b2lkIHV1aWRfdGFibGVfcmVtb3ZlKHV1aWRfdCAqdXVpZCk7CiAKICNlbmRpZgkvKiBfX1hGU19TVVBQT1JUX1VVSURfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FnLmggYi9mcy94ZnMveGZzX2FnLmgKaW5kZXggMTQzZDYzZS4uYzg2NDFmNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hZy5oCisrKyBiL2ZzL3hmcy94ZnNfYWcuaApAQCAtMjIzLDggKzIyMyw4IEBACiAJCWJlMzJfdG9fY3B1KChhKS0+YWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0pLCBtcCkpCiAjZGVmaW5lCVhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZyxtcCkJXAogCShYRlNfTUlOX0ZSRUVMSVNUX1JBVygJCVwKLQkJKHVpbnRfdCkocGFnKS0+cGFnZl9sZXZlbHNbWEZTX0JUTlVNX0JOT2ldLCBcCi0JCSh1aW50X3QpKHBhZyktPnBhZ2ZfbGV2ZWxzW1hGU19CVE5VTV9DTlRpXSwgbXApKQorCQkodW5zaWduZWQgaW50KShwYWcpLT5wYWdmX2xldmVsc1tYRlNfQlROVU1fQk5PaV0sIFwKKwkJKHVuc2lnbmVkIGludCkocGFnKS0+cGFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldLCBtcCkpCiAKICNkZWZpbmUgWEZTX0FHQl9UT19GU0IobXAsYWdubyxhZ2JubykJXAogCSgoKHhmc19mc2Jsb2NrX3QpKGFnbm8pIDw8IChtcCktPm1fc2Iuc2JfYWdibGtsb2cpIHwgKGFnYm5vKSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuYyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwppbmRleCAwMjhlNDRlLi4yY2Y5NDRlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jLmMKKysrIGIvZnMveGZzL3hmc19hbGxvYy5jCkBAIC0xODcyLDYgKzE4NzIsMjUgQEAKIH0KIAogLyoKKyAqIEZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBleHRlbnQgaW4gYW4gQUcuCisgKi8KK3hmc19leHRsZW5fdAoreGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19wZXJhZwkqcGFnKQoreworCXhmc19leHRsZW5fdAkJbmVlZCwgZGVsdGEgPSAwOworCisJbmVlZCA9IFhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZywgbXApOworCWlmIChuZWVkID4gcGFnLT5wYWdmX2ZsY291bnQpCisJCWRlbHRhID0gbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50OworCisJaWYgKHBhZy0+cGFnZl9sb25nZXN0ID4gZGVsdGEpCisJCXJldHVybiBwYWctPnBhZ2ZfbG9uZ2VzdCAtIGRlbHRhOworCXJldHVybiBwYWctPnBhZ2ZfZmxjb3VudCA+IDAgfHwgcGFnLT5wYWdmX2xvbmdlc3QgPiAwOworfQorCisvKgogICogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIHRoaXMgYWxsb2NhdGlvbiBncm91cCBmb3IgdGhpcyBhbGxvY2F0aW9uLgogICogSWYgc28sIGZpeCB1cCB0aGUgYnRyZWUgZnJlZWxpc3QncyBzaXplLgogICovCkBAIC0xOTIzLDE1ICsxOTQyLDEyIEBACiAJfQogCiAJaWYgKCEoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKSkgewotCQluZWVkID0gWEZTX01JTl9GUkVFTElTVF9QQUcocGFnLCBtcCk7Ci0JCWRlbHRhID0gbmVlZCA+IHBhZy0+cGFnZl9mbGNvdW50ID8gbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50IDogMDsKIAkJLyoKIAkJICogSWYgaXQgbG9va3MgbGlrZSB0aGVyZSBpc24ndCBhIGxvbmcgZW5vdWdoIGV4dGVudCwgb3IgZW5vdWdoCiAJCSAqIHRvdGFsIGJsb2NrcywgcmVqZWN0IGl0LgogCQkgKi8KLQkJbG9uZ2VzdCA9IChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKSA/Ci0JCQkocGFnLT5wYWdmX2xvbmdlc3QgLSBkZWx0YSkgOgotCQkJKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fCBwYWctPnBhZ2ZfbG9uZ2VzdCA+IDApOworCQluZWVkID0gWEZTX01JTl9GUkVFTElTVF9QQUcocGFnLCBtcCk7CisJCWxvbmdlc3QgPSB4ZnNfYWxsb2NfbG9uZ2VzdF9mcmVlX2V4dGVudChtcCwgcGFnKTsKIAkJaWYgKChhcmdzLT5taW5sZW4gKyBhcmdzLT5hbGlnbm1lbnQgKyBhcmdzLT5taW5hbGlnbnNsb3AgLSAxKSA+CiAJCQkJbG9uZ2VzdCB8fAogCQkgICAgKChpbnQpKHBhZy0+cGFnZl9mcmVlYmxrcyArIHBhZy0+cGFnZl9mbGNvdW50IC0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuaCBiL2ZzL3hmcy94ZnNfYWxsb2MuaAppbmRleCA1ODgxNzI3Li5lNzA0Y2FlZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5oCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuaApAQCAtMTAwLDYgKzEwMCwxMiBAQAogI2RlZmluZSBYRlNfQUxMT0NfVVNFUkRBVEEJCTEJLyogYWxsb2NhdGlvbiBpcyBmb3IgdXNlciBkYXRhKi8KICNkZWZpbmUgWEZTX0FMTE9DX0lOSVRJQUxfVVNFUl9EQVRBCTIJLyogc3BlY2lhbCBjYXNlIHN0YXJ0IG9mIGZpbGUgKi8KIAorLyoKKyAqIEZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBleHRlbnQgaW4gYW4gQUcuCisgKi8KK3hmc19leHRsZW5fdAoreGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQoc3RydWN0IHhmc19tb3VudCAqbXAsCisJCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZyk7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCmluZGV4IDZjMzIzZjguLmFmZGM4OTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwpAQCAtMTU1LDcgKzE1NSw4IEBACiAJCSAqIG1pbmltdW0gb2Zmc2V0IG9ubHkgbmVlZHMgdG8gYmUgdGhlIHNwYWNlIHJlcXVpcmVkIGZvciAKIAkJICogdGhlIGJ0cmVlIHJvb3QuCiAJCSAqLyAKLQkJaWYgKCFkcC0+aV9kLmRpX2ZvcmtvZmYgJiYgZHAtPmlfZGYuaWZfYnl0ZXMgPiBtcC0+bV9hdHRyb2Zmc2V0KQorCQlpZiAoIWRwLT5pX2QuZGlfZm9ya29mZiAmJiBkcC0+aV9kZi5pZl9ieXRlcyA+CisJCSAgICB4ZnNfZGVmYXVsdF9hdHRyb2Zmc2V0KGRwKSkKIAkJCWRzaXplID0gWEZTX0JNRFJfU1BBQ0VfQ0FMQyhNSU5EQlRQVFJTKTsKIAkJYnJlYWs7CiAJCQpAQCAtMjk4LDYgKzI5OSwyNiBAQAogfQogCiAvKgorICogQWZ0ZXIgdGhlIGxhc3QgYXR0cmlidXRlIGlzIHJlbW92ZWQgcmV2ZXJ0IHRvIG9yaWdpbmFsIGlub2RlIGZvcm1hdCwKKyAqIG1ha2luZyBhbGwgbGl0ZXJhbCBhcmVhIGF2YWlsYWJsZSB0byB0aGUgZGF0YSBmb3JrIG9uY2UgbW9yZS4KKyAqLworU1RBVElDIHZvaWQKK3hmc19hdHRyX2ZvcmtfcmVzZXQoCisJc3RydWN0IHhmc19pbm9kZQkqaXAsCisJc3RydWN0IHhmc190cmFucwkqdHApCit7CisJeGZzX2lkZXN0cm95X2ZvcmsoaXAsIFhGU19BVFRSX0ZPUkspOworCWlwLT5pX2QuZGlfZm9ya29mZiA9IDA7CisJaXAtPmlfZC5kaV9hZm9ybWF0ID0gWEZTX0RJTk9ERV9GTVRfRVhURU5UUzsKKworCUFTU0VSVChpcC0+aV9kLmRpX2FuZXh0ZW50cyA9PSAwKTsKKwlBU1NFUlQoaXAtPmlfYWZwID09IE5VTEwpOworCisJaXAtPmlfZGYuaWZfZXh0X21heCA9IFhGU19JRk9SS19EU0laRShpcCkgLyBzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKK30KKworLyoKICAqIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgc2hvcnRmb3JtIGF0dHJpYnV0ZSBsaXN0IHN0cnVjdHVyZS4KICAqLwogaW50CkBAIC0zNDQsMjIgKzM2NSwxMCBAQAogCSAqLwogCXRvdHNpemUgLT0gc2l6ZTsKIAlpZiAodG90c2l6ZSA9PSBzaXplb2YoeGZzX2F0dHJfc2ZfaGRyX3QpICYmCi0JCQkJIShhcmdzLT5vcF9mbGFncyAmIFhGU19EQV9PUF9BREROQU1FKSAmJgotCQkJCShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9BVFRSMikgJiYKLQkJCQkoZHAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUpKSB7Ci0JCS8qCi0JCSAqIExhc3QgYXR0cmlidXRlIG5vdyByZW1vdmVkLCByZXZlcnQgdG8gb3JpZ2luYWwKLQkJICogaW5vZGUgZm9ybWF0IG1ha2luZyBhbGwgbGl0ZXJhbCBhcmVhIGF2YWlsYWJsZQotCQkgKiB0byB0aGUgZGF0YSBmb3JrIG9uY2UgbW9yZS4KLQkJICovCi0JCXhmc19pZGVzdHJveV9mb3JrKGRwLCBYRlNfQVRUUl9GT1JLKTsKLQkJZHAtPmlfZC5kaV9mb3Jrb2ZmID0gMDsKLQkJZHAtPmlfZC5kaV9hZm9ybWF0ID0gWEZTX0RJTk9ERV9GTVRfRVhURU5UUzsKLQkJQVNTRVJUKGRwLT5pX2QuZGlfYW5leHRlbnRzID09IDApOwotCQlBU1NFUlQoZHAtPmlfYWZwID09IE5VTEwpOwotCQlkcC0+aV9kZi5pZl9leHRfbWF4ID0KLQkJCVhGU19JRk9SS19EU0laRShkcCkgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwotCQl4ZnNfdHJhbnNfbG9nX2lub2RlKGFyZ3MtPnRyYW5zLCBkcCwgWEZTX0lMT0dfQ09SRSk7CisJICAgIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9BVFRSMikgJiYKKwkgICAgKGRwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0JUUkVFKSAmJgorCSAgICAhKGFyZ3MtPm9wX2ZsYWdzICYgWEZTX0RBX09QX0FERE5BTUUpKSB7CisJCXhmc19hdHRyX2ZvcmtfcmVzZXQoZHAsIGFyZ3MtPnRyYW5zKTsKIAl9IGVsc2UgewogCQl4ZnNfaWRhdGFfcmVhbGxvYyhkcCwgLXNpemUsIFhGU19BVFRSX0ZPUkspOwogCQlkcC0+aV9kLmRpX2ZvcmtvZmYgPSB4ZnNfYXR0cl9zaG9ydGZvcm1fYnl0ZXNmaXQoZHAsIHRvdHNpemUpOwpAQCAtNzg2LDIwICs3OTUsNyBAQAogCWlmIChmb3Jrb2ZmID09IC0xKSB7CiAJCUFTU0VSVChkcC0+aV9tb3VudC0+bV9mbGFncyAmIFhGU19NT1VOVF9BVFRSMik7CiAJCUFTU0VSVChkcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSk7Ci0KLQkJLyoKLQkJICogTGFzdCBhdHRyaWJ1dGUgd2FzIHJlbW92ZWQsIHJldmVydCB0byBvcmlnaW5hbAotCQkgKiBpbm9kZSBmb3JtYXQgbWFraW5nIGFsbCBsaXRlcmFsIGFyZWEgYXZhaWxhYmxlCi0JCSAqIHRvIHRoZSBkYXRhIGZvcmsgb25jZSBtb3JlLgotCQkgKi8KLQkJeGZzX2lkZXN0cm95X2ZvcmsoZHAsIFhGU19BVFRSX0ZPUkspOwotCQlkcC0+aV9kLmRpX2ZvcmtvZmYgPSAwOwotCQlkcC0+aV9kLmRpX2Fmb3JtYXQgPSBYRlNfRElOT0RFX0ZNVF9FWFRFTlRTOwotCQlBU1NFUlQoZHAtPmlfZC5kaV9hbmV4dGVudHMgPT0gMCk7Ci0JCUFTU0VSVChkcC0+aV9hZnAgPT0gTlVMTCk7Ci0JCWRwLT5pX2RmLmlmX2V4dF9tYXggPQotCQkJWEZTX0lGT1JLX0RTSVpFKGRwKSAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7Ci0JCXhmc190cmFuc19sb2dfaW5vZGUoYXJncy0+dHJhbnMsIGRwLCBYRlNfSUxPR19DT1JFKTsKKwkJeGZzX2F0dHJfZm9ya19yZXNldChkcCwgYXJncy0+dHJhbnMpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5jIGIvZnMveGZzL3hmc19ibWFwLmMKaW5kZXggYzg1MmNkNi4uM2E2ZWQ0MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmMKKysrIGIvZnMveGZzL3hmc19ibWFwLmMKQEAgLTI0NzksNyArMjQ3OSw3IEBACiAJZmJfYWdubyA9IG51bGxmYiA/IE5VTExBR05VTUJFUiA6IFhGU19GU0JfVE9fQUdOTyhtcCwgYXAtPmZpcnN0YmxvY2spOwogCS8qCiAJICogSWYgYWxsb2NhdGluZyBhdCBlb2YsIGFuZCB0aGVyZSdzIGEgcHJldmlvdXMgcmVhbCBibG9jaywKLQkgKiB0cnkgdG8gdXNlIGl0J3MgbGFzdCBibG9jayBhcyBvdXIgc3RhcnRpbmcgcG9pbnQuCisJICogdHJ5IHRvIHVzZSBpdHMgbGFzdCBibG9jayBhcyBvdXIgc3RhcnRpbmcgcG9pbnQuCiAJICovCiAJaWYgKGFwLT5lb2YgJiYgYXAtPnByZXZwLT5icl9zdGFydG9mZiAhPSBOVUxMRklMRU9GRiAmJgogCSAgICAhaXNudWxsc3RhcnRibG9jayhhcC0+cHJldnAtPmJyX3N0YXJ0YmxvY2spICYmCkBAIC0yNzEyLDkgKzI3MTIsNiBAQAogCXhmc19hZ251bWJlcl90CXN0YXJ0YWc7CiAJeGZzX2FsbG9jX2FyZ190CWFyZ3M7CiAJeGZzX2V4dGxlbl90CWJsZW47Ci0JeGZzX2V4dGxlbl90CWRlbHRhOwotCXhmc19leHRsZW5fdAlsb25nZXN0OwotCXhmc19leHRsZW5fdAluZWVkOwogCXhmc19leHRsZW5fdAluZXh0bWlubGVuID0gMDsKIAl4ZnNfcGVyYWdfdAkqcGFnOwogCWludAkJbnVsbGZiOwkJLyogdHJ1ZSBpZiBhcC0+Zmlyc3RibG9jayBpc24ndCBzZXQgKi8KQEAgLTI3OTYsMTMgKzI3OTMsOCBAQAogCQkJICogU2VlIHhmc19hbGxvY19maXhfZnJlZWxpc3QuLi4KIAkJCSAqLwogCQkJaWYgKHBhZy0+cGFnZl9pbml0KSB7Ci0JCQkJbmVlZCA9IFhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZywgbXApOwotCQkJCWRlbHRhID0gbmVlZCA+IHBhZy0+cGFnZl9mbGNvdW50ID8KLQkJCQkJbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50IDogMDsKLQkJCQlsb25nZXN0ID0gKHBhZy0+cGFnZl9sb25nZXN0ID4gZGVsdGEpID8KLQkJCQkJKHBhZy0+cGFnZl9sb25nZXN0IC0gZGVsdGEpIDoKLQkJCQkJKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fAotCQkJCQkgcGFnLT5wYWdmX2xvbmdlc3QgPiAwKTsKKwkJCQl4ZnNfZXh0bGVuX3QJbG9uZ2VzdDsKKwkJCQlsb25nZXN0ID0geGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQobXAsIHBhZyk7CiAJCQkJaWYgKGJsZW4gPCBsb25nZXN0KQogCQkJCQlibGVuID0gbG9uZ2VzdDsKIAkJCX0gZWxzZQpAQCAtMzU3Nyw2ICszNTY5LDI3IEBACiB9CiAKIC8qCisgKiBDYWxjdWxhdGUgdGhlIGRlZmF1bHQgYXR0cmlidXRlIGZvcmsgb2Zmc2V0IGZvciBuZXdseSBjcmVhdGVkIGlub2Rlcy4KKyAqLwordWludAoreGZzX2RlZmF1bHRfYXR0cm9mZnNldCgKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCXVpbnQJCQlvZmZzZXQ7CisKKwlpZiAobXAtPm1fc2Iuc2JfaW5vZGVzaXplID09IDI1NikgeworCQlvZmZzZXQgPSBYRlNfTElUSU5PKG1wKSAtCisJCQkJWEZTX0JNRFJfU1BBQ0VfQ0FMQyhNSU5BQlRQVFJTKTsKKwl9IGVsc2UgeworCQlvZmZzZXQgPSBYRlNfQk1EUl9TUEFDRV9DQUxDKDYgKiBNSU5BQlRQVFJTKTsKKwl9CisKKwlBU1NFUlQob2Zmc2V0IDwgWEZTX0xJVElOTyhtcCkpOworCXJldHVybiBvZmZzZXQ7Cit9CisKKy8qCiAgKiBIZWxwZXIgcm91dGluZSB0byByZXNldCBpbm9kZSBkaV9mb3Jrb2ZmIGZpZWxkIHdoZW4gc3dpdGNoaW5nCiAgKiBhdHRyaWJ1dGUgZm9yayBmcm9tIGxvY2FsIHRvIGV4dGVudCBmb3JtYXQgLSB3ZSByZXNldCBpdCB3aGVyZQogICogcG9zc2libGUgdG8gbWFrZSBzcGFjZSBhdmFpbGFibGUgZm9yIGlubGluZSBkYXRhIGZvcmsgZXh0ZW50cy4KQEAgLTM1ODgsMTUgKzM2MDEsMTggQEAKIAlpbnQJCXdoaWNoZm9yaykKIHsKIAlpZiAod2hpY2hmb3JrID09IFhGU19BVFRSX0ZPUksgJiYKLQkgICAgKGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0RFVikgJiYKLQkgICAgKGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX1VVSUQpICYmCi0JICAgIChpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSkgJiYKLQkgICAgKChtcC0+bV9hdHRyb2Zmc2V0ID4+IDMpID4gaXAtPmlfZC5kaV9mb3Jrb2ZmKSkgewotCQlpcC0+aV9kLmRpX2ZvcmtvZmYgPSBtcC0+bV9hdHRyb2Zmc2V0ID4+IDM7Ci0JCWlwLT5pX2RmLmlmX2V4dF9tYXggPSBYRlNfSUZPUktfRFNJWkUoaXApIC8KLQkJCQkJKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKLQkJaXAtPmlfYWZwLT5pZl9leHRfbWF4ID0gWEZTX0lGT1JLX0FTSVpFKGlwKSAvCi0JCQkJCSh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJICAgIGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0RFViAmJgorCSAgICBpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9VVUlEICYmCisJICAgIGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0JUUkVFKSB7CisJCXVpbnQJZGZsX2ZvcmtvZmYgPSB4ZnNfZGVmYXVsdF9hdHRyb2Zmc2V0KGlwKSA+PiAzOworCisJCWlmIChkZmxfZm9ya29mZiA+IGlwLT5pX2QuZGlfZm9ya29mZikgeworCQkJaXAtPmlfZC5kaV9mb3Jrb2ZmID0gZGZsX2ZvcmtvZmY7CisJCQlpcC0+aV9kZi5pZl9leHRfbWF4ID0KKwkJCQlYRlNfSUZPUktfRFNJWkUoaXApIC8gc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKKwkJCWlwLT5pX2FmcC0+aWZfZXh0X21heCA9CisJCQkJWEZTX0lGT1JLX0FTSVpFKGlwKSAvIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJCX0KIAl9CiB9CiAKQEAgLTQwNjUsNyArNDA4MSw3IEBACiAJY2FzZSBYRlNfRElOT0RFX0ZNVF9CVFJFRToKIAkJaXAtPmlfZC5kaV9mb3Jrb2ZmID0geGZzX2F0dHJfc2hvcnRmb3JtX2J5dGVzZml0KGlwLCBzaXplKTsKIAkJaWYgKCFpcC0+aV9kLmRpX2ZvcmtvZmYpCi0JCQlpcC0+aV9kLmRpX2ZvcmtvZmYgPSBtcC0+bV9hdHRyb2Zmc2V0ID4+IDM7CisJCQlpcC0+aV9kLmRpX2ZvcmtvZmYgPSB4ZnNfZGVmYXVsdF9hdHRyb2Zmc2V0KGlwKSA+PiAzOwogCQllbHNlIGlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9BVFRSMikKIAkJCXZlcnNpb24gPSAyOwogCQlicmVhazsKQEAgLTQyMTIsMTIgKzQyMjgsMTIgQEAKIAkgKiAoYSBzaWduZWQgMTYtYml0IG51bWJlciwgeGZzX2FleHRudW1fdCkuCiAJICoKIAkgKiBOb3RlIHRoYXQgd2UgY2FuIG5vIGxvbmdlciBhc3N1bWUgdGhhdCBpZiB3ZSBhcmUgaW4gQVRUUjEgdGhhdAotCSAqIHRoZSBmb3JrIG9mZnNldCBvZiBhbGwgdGhlIGlub2RlcyB3aWxsIGJlIChtX2F0dHJvZmZzZXQgPj4gMykKLQkgKiBiZWNhdXNlIHdlIGNvdWxkIGhhdmUgbW91bnRlZCB3aXRoIEFUVFIyIGFuZCB0aGVuIG1vdW50ZWQgYmFjawotCSAqIHdpdGggQVRUUjEsIGtlZXBpbmcgdGhlIGRpX2ZvcmtvZmYncyBmaXhlZCBidXQgcHJvYmFibHkgYXQKLQkgKiB2YXJpb3VzIHBvc2l0aW9ucy4gVGhlcmVmb3JlLCBmb3IgYm90aCBBVFRSMSBhbmQgQVRUUjIKLQkgKiB3ZSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbyBvZiBhIG1pbmltdW0gc2l6ZQotCSAqIGF2YWlsYWJsZS4KKwkgKiB0aGUgZm9yayBvZmZzZXQgb2YgYWxsIHRoZSBpbm9kZXMgd2lsbCBiZQorCSAqICh4ZnNfZGVmYXVsdF9hdHRyb2Zmc2V0KGlwKSA+PiAzKSBiZWNhdXNlIHdlIGNvdWxkIGhhdmUgbW91bnRlZAorCSAqIHdpdGggQVRUUjIgYW5kIHRoZW4gbW91bnRlZCBiYWNrIHdpdGggQVRUUjEsIGtlZXBpbmcgdGhlCisJICogZGlfZm9ya29mZidzIGZpeGVkIGJ1dCBwcm9iYWJseSBhdCB2YXJpb3VzIHBvc2l0aW9ucy4gVGhlcmVmb3JlLAorCSAqIGZvciBib3RoIEFUVFIxIGFuZCBBVFRSMiB3ZSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbworCSAqIG9mIGEgbWluaW11bSBzaXplIGF2YWlsYWJsZS4KIAkgKi8KIAlpZiAod2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspIHsKIAkJbWF4bGVhZmVudHMgPSBNQVhFWFROVU07CkBAIC00ODA0LDcgKzQ4MjAsNyBAQAogCXhmc19leHRsZW5fdAltaW5sZW47CQkvKiBtaW4gYWxsb2NhdGlvbiBzaXplICovCiAJeGZzX21vdW50X3QJKm1wOwkJLyogeGZzIG1vdW50IHN0cnVjdHVyZSAqLwogCWludAkJbjsJCS8qIGN1cnJlbnQgZXh0ZW50IGluZGV4ICovCi0JaW50CQluYWxsb2NzOwkvKiBudW1iZXIgb2YgZXh0ZW50cyBhbGxvY1wnZCAqLworCWludAkJbmFsbG9jczsJLyogbnVtYmVyIG9mIGV4dGVudHMgYWxsb2MnZCAqLwogCXhmc19leHRudW1fdAluZXh0ZW50czsJLyogbnVtYmVyIG9mIGV4dGVudHMgaW4gZmlsZSAqLwogCXhmc19maWxlb2ZmX3QJb2JubzsJCS8qIG9sZCBibG9jayBudW1iZXIgKG9mZnNldCkgKi8KIAl4ZnNfYm1idF9pcmVjX3QJcHJldjsJCS8qIHByZXZpb3VzIGZpbGUgZXh0ZW50IHJlY29yZCAqLwpAQCAtNjIwNCw3ICs2MjIwLDcgQEAKIAlyZXR1cm4oYnApOwogfQogCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2NoZWNrX2Jsb2NrKAogCXN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sJKmJsb2NrLAogCXhmc19tb3VudF90CQkqbXAsCkBAIC02NDk0LDcgKzY1MTAsNyBAQAogCWJsb2NrID0gWEZTX0JVRl9UT19CTE9DSyhicCk7CiAKIAlpZiAoLS1sZXZlbCkgewotCQkvKiBOb3QgYXQgbm9kZSBhYm92ZSBsZWFmcywgY291bnQgdGhpcyBsZXZlbCBvZiBub2RlcyAqLworCQkvKiBOb3QgYXQgbm9kZSBhYm92ZSBsZWF2ZXMsIGNvdW50IHRoaXMgbGV2ZWwgb2Ygbm9kZXMgKi8KIAkJbmV4dGJubyA9IGJlNjRfdG9fY3B1KGJsb2NrLT5iYl91LmwuYmJfcmlnaHRzaWIpOwogCQl3aGlsZSAobmV4dGJubyAhPSBOVUxMRlNCTE9DSykgewogCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9yZWFkX2J1ZmwobXAsIHRwLCBuZXh0Ym5vLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmggYi9mcy94ZnMveGZzX2JtYXAuaAppbmRleCBiZTI5NzlkLi4xYjhmZjkyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuaAorKysgYi9mcy94ZnMveGZzX2JtYXAuaApAQCAtMTI1LDcgKzEyNSw3IEBACiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJKmdvdHA7CS8qIGV4dGVudCBhZnRlciwgb3IgZGVsYXllZCAqLwogCXhmc19leHRsZW5fdAkJYWxlbjsJLyogaS9vIGxlbmd0aCBhc2tlZC9hbGxvY2F0ZWQgKi8KIAl4ZnNfZXh0bGVuX3QJCXRvdGFsOwkvKiB0b3RhbCBibG9ja3MgbmVlZGVkIGZvciB4YWN0aW9uICovCi0JeGZzX2V4dGxlbl90CQltaW5sZW47CS8qIG1pbmludW0gYWxsb2NhdGlvbiBzaXplIChibG9ja3MpICovCisJeGZzX2V4dGxlbl90CQltaW5sZW47CS8qIG1pbmltdW0gYWxsb2NhdGlvbiBzaXplIChibG9ja3MpICovCiAJeGZzX2V4dGxlbl90CQltaW5sZWZ0OyAvKiBhbW91bnQgbXVzdCBiZSBsZWZ0IGFmdGVyIGFsbG9jICovCiAJY2hhcgkJCWVvZjsJLyogc2V0IGlmIGFsbG9jYXRpbmcgcGFzdCBsYXN0IGV4dGVudCAqLwogCWNoYXIJCQl3YXNkZWw7CS8qIHJlcGxhY2luZyBhIGRlbGF5ZWQgYWxsb2NhdGlvbiAqLwpAQCAtMzM4LDYgKzMzOCwxMCBAQAogCXhmc19leHRudW1fdAkJaWR4LAogCXhmc19leHRudW1fdAkJbnVtKTsKIAordWludAoreGZzX2RlZmF1bHRfYXR0cm9mZnNldCgKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCk7CisKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMveGZzX2J0cmVlLmMKaW5kZXggZTczYzMzMi4uZTlkZjk5NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYnRyZWUuYwpAQCAtMTg4Myw3ICsxODgzLDcgQEAKIAogCS8qCiAJICogV2UgYWRkIG9uZSBlbnRyeSB0byB0aGUgbGVmdCBzaWRlIGFuZCByZW1vdmUgb25lIGZvciB0aGUgcmlnaHQgc2lkZS4KLQkgKiBBY2NvdXQgZm9yIGl0IGhlcmUsIHRoZSBjaGFuZ2VzIHdpbGwgYmUgdXBkYXRlZCBvbiBkaXNrIGFuZCBsb2dnZWQKKwkgKiBBY2NvdW50IGZvciBpdCBoZXJlLCB0aGUgY2hhbmdlcyB3aWxsIGJlIHVwZGF0ZWQgb24gZGlzayBhbmQgbG9nZ2VkCiAJICogbGF0ZXIuCiAJICovCiAJbHJlY3MrKzsKQEAgLTM1MzUsNyArMzUzNSw3IEBACiAJWEZTX0JUUkVFX1NUQVRTX0lOQyhjdXIsIGpvaW4pOwogCiAJLyoKLQkgKiBGaXggdXAgdGhlIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBhbmQgcmlnaHQgYmxvY2sgcG9pbnRlciBpbiB0aGUKKwkgKiBGaXggdXAgdGhlIG51bWJlciBvZiByZWNvcmRzIGFuZCByaWdodCBibG9jayBwb2ludGVyIGluIHRoZQogCSAqIHN1cnZpdmluZyBibG9jaywgYW5kIGxvZyBpdC4KIAkgKi8KIAl4ZnNfYnRyZWVfc2V0X251bXJlY3MobGVmdCwgbHJlY3MgKyBycmVjcyk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmggYi9mcy94ZnMveGZzX2J0cmVlLmgKaW5kZXggNzg5ZmZmZC4uNGY4NTJiNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfYnRyZWUuaApAQCAtNDEsNyArNDEsNyBAQAogLyoKICAqIEdlbmVyaWMgYnRyZWUgaGVhZGVyLgogICoKLSAqIFRoaXMgaXMgYSBjb21pbmF0aW9uIG9mIHRoZSBhY3R1YWwgZm9ybWF0IHVzZWQgb24gZGlzayBmb3Igc2hvcnQgYW5kIGxvbmcKKyAqIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYWN0dWFsIGZvcm1hdCB1c2VkIG9uIGRpc2sgZm9yIHNob3J0IGFuZCBsb25nCiAgKiBmb3JtYXQgYnRyZWVzLiAgVGhlIGZpcnN0IHRocmVlIGZpZWxkcyBhcmUgc2hhcmVkIGJ5IGJvdGggZm9ybWF0LCBidXQKICAqIHRoZSBwb2ludGVycyBhcmUgZGlmZmVyZW50IGFuZCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuCiAgKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kYV9idHJlZS5jIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCmluZGV4IGM0NWY3NGYuLjlmZjZlNTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKQEAgLTE1MDMsNyArMTUwMyw3IEBACiAgKiBUaGlzIGlzIGltcGxlbWVudGVkIHdpdGggc29tZSBzb3VyY2UtbGV2ZWwgbG9vcCB1bnJvbGxpbmcuCiAgKi8KIHhmc19kYWhhc2hfdAoteGZzX2RhX2hhc2huYW1lKGNvbnN0IHVjaGFyX3QgKm5hbWUsIGludCBuYW1lbGVuKQoreGZzX2RhX2hhc2huYW1lKGNvbnN0IF9fdWludDhfdCAqbmFtZSwgaW50IG5hbWVsZW4pCiB7CiAJeGZzX2RhaGFzaF90IGhhc2g7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaAppbmRleCA3MGI3MTBjLi44YzUzNjE2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5oCkBAIC05MSw5ICs5MSw5IEBACiAgKiBTdHJ1Y3R1cmUgdG8gZWFzZSBwYXNzaW5nIGFyb3VuZCBjb21wb25lbnQgbmFtZXMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19kYV9hcmdzIHsKLQljb25zdCB1Y2hhcl90CSpuYW1lOwkJLyogc3RyaW5nIChtYXliZSBub3QgTlVMTCB0ZXJtaW5hdGVkKSAqLworCWNvbnN0IF9fdWludDhfdAkqbmFtZTsJCS8qIHN0cmluZyAobWF5YmUgbm90IE5VTEwgdGVybWluYXRlZCkgKi8KIAlpbnQJCW5hbWVsZW47CS8qIGxlbmd0aCBvZiBzdHJpbmcgKG1heWJlIG5vIE5VTEwpICovCi0JdWNoYXJfdAkJKnZhbHVlOwkJLyogc2V0IG9mIGJ5dGVzIChtYXliZSBjb250YWluIE5VTExzKSAqLworCV9fdWludDhfdAkqdmFsdWU7CQkvKiBzZXQgb2YgYnl0ZXMgKG1heWJlIGNvbnRhaW4gTlVMTHMpICovCiAJaW50CQl2YWx1ZWxlbjsJLyogbGVuZ3RoIG9mIHZhbHVlICovCiAJaW50CQlmbGFnczsJCS8qIGFyZ3VtZW50IGZsYWdzIChlZzogQVRUUl9OT0NSRUFURSkgKi8KIAl4ZnNfZGFoYXNoX3QJaGFzaHZhbDsJLyogaGFzaCB2YWx1ZSBvZiBuYW1lICovCkBAIC0xODUsNyArMTg1LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQlpbmxlYWY7CQkvKiBpbnNlcnQgaW50byAxLT5sZiwgMC0+c3BsZiAqLwogCXVuc2lnbmVkIGNoYXIJCWV4dHJhdmFsaWQ7CS8qIFQvRjogZXh0cmFibGsgaXMgaW4gdXNlICovCiAJdW5zaWduZWQgY2hhcgkJZXh0cmFhZnRlcjsJLyogVC9GOiBleHRyYWJsayBpcyBhZnRlciBuZXcgKi8KLQl4ZnNfZGFfc3RhdGVfYmxrX3QJZXh0cmFibGs7CS8qIGZvciBkb3VibGUtc3BsaXRzIG9uIGxlYWZzICovCisJeGZzX2RhX3N0YXRlX2Jsa190CWV4dHJhYmxrOwkvKiBmb3IgZG91YmxlLXNwbGl0cyBvbiBsZWF2ZXMgKi8KIAkJCQkJCS8qIGZvciBkaXJ2MiBleHRyYWJsayBpcyBkYXRhICovCiB9IHhmc19kYV9zdGF0ZV90OwogCkBAIC0yNTEsNyArMjUxLDcgQEAKIGludAl4ZnNfZGFfc2hyaW5rX2lub2RlKHhmc19kYV9hcmdzX3QgKmFyZ3MsIHhmc19kYWJsa190IGRlYWRfYmxrbm8sCiAJCQkJCSAgeGZzX2RhYnVmX3QgKmRlYWRfYnVmKTsKIAotdWludCB4ZnNfZGFfaGFzaG5hbWUoY29uc3QgdWNoYXJfdCAqbmFtZV9zdHJpbmcsIGludCBuYW1lX2xlbmd0aCk7Cit1aW50IHhmc19kYV9oYXNobmFtZShjb25zdCBfX3VpbnQ4X3QgKm5hbWVfc3RyaW5nLCBpbnQgbmFtZV9sZW5ndGgpOwogZW51bSB4ZnNfZGFjbXAgeGZzX2RhX2NvbXBuYW1lKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKIAkJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKIApAQCAtMjY4LDUgKzI2OCw2IEBACiAKIGV4dGVybiBzdHJ1Y3Qga21lbV96b25lICp4ZnNfZGFfc3RhdGVfem9uZTsKIGV4dGVybiBzdHJ1Y3Qga21lbV96b25lICp4ZnNfZGFidWZfem9uZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgeGZzX25hbWVvcHMgeGZzX2RlZmF1bHRfbmFtZW9wczsKIAogI2VuZGlmCS8qIF9fWEZTX0RBX0JUUkVFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kZnJhZy5jIGIvZnMveGZzL3hmc19kZnJhZy5jCmluZGV4IGY4Mjc4Y2YuLmU2ZDgzOWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGZyYWcuYworKysgYi9mcy94ZnMveGZzX2RmcmFnLmMKQEAgLTc5LDYgKzc5LDEyIEBACiAJCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKIAl9CiAKKwlpZiAoSVNfU1dBUEZJTEUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgfHwKKwkgICAgSVNfU1dBUEZJTEUodGFyZ2V0X2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKSB7CisJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7CisJCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwl9CisKIAlpcCA9IFhGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXRpcCA9IFhGU19JKHRhcmdldF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIApAQCAtMTE4LDE5ICsxMjQsMTcgQEAKIAl4ZnNfYnN0YXRfdAkqc2JwID0gJnN4cC0+c3hfc3RhdDsKIAl4ZnNfaWZvcmtfdAkqdGVtcGlmcCwgKmlmcCwgKnRpZnA7CiAJaW50CQlpbGZfZmllbGRzLCB0aWxmX2ZpZWxkczsKLQlzdGF0aWMgdWludAlsb2NrX2ZsYWdzID0gWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0w7CiAJaW50CQllcnJvciA9IDA7CiAJaW50CQlhZm9ya2Jsa3MgPSAwOwogCWludAkJdGFmb3JrYmxrcyA9IDA7CiAJX191aW50NjRfdAl0bXA7Ci0JY2hhcgkJbG9ja2VkID0gMDsKIAogCW1wID0gaXAtPmlfbW91bnQ7CiAKIAl0ZW1waWZwID0ga21lbV9hbGxvYyhzaXplb2YoeGZzX2lmb3JrX3QpLCBLTV9NQVlGQUlMKTsKIAlpZiAoIXRlbXBpZnApIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRU5PTUVNKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0OwogCX0KIAogCXNicCA9ICZzeHAtPnN4X3N0YXQ7CkBAIC0xNDMsMjUgKzE0NywyNCBAQAogCSAqLwogCXhmc19sb2NrX3R3b19pbm9kZXMoaXAsIHRpcCwgWEZTX0lPTE9DS19FWENMKTsKIAl4ZnNfbG9ja190d29faW5vZGVzKGlwLCB0aXAsIFhGU19JTE9DS19FWENMKTsKLQlsb2NrZWQgPSAxOwogCiAJLyogVmVyaWZ5IHRoYXQgYm90aCBmaWxlcyBoYXZlIHRoZSBzYW1lIGZvcm1hdCAqLwogCWlmICgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSAhPSAodGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAkvKiBWZXJpZnkgYm90aCBmaWxlcyBhcmUgZWl0aGVyIHJlYWwtdGltZSBvciBub24tcmVhbHRpbWUgKi8KIAlpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSAhPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUodGlwKSkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qIFNob3VsZCBuZXZlciBnZXQgYSBsb2NhbCBmb3JtYXQgKi8KIAlpZiAoaXAtPmlfZC5kaV9mb3JtYXQgPT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwgfHwKIAkgICAgdGlwLT5pX2QuZGlfZm9ybWF0ID09IFhGU19ESU5PREVfRk1UX0xPQ0FMKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJaWYgKFZOX0NBQ0hFRChWRlNfSSh0aXApKSAhPSAwKSB7CkBAIC0xNjksMTMgKzE3MiwxMyBAQAogCQllcnJvciA9IHhmc19mbHVzaGludmFsX3BhZ2VzKHRpcCwgMCwgLTEsCiAJCQkJRklfUkVNQVBGX0xPQ0tFRCk7CiAJCWlmIChlcnJvcikKLQkJCWdvdG8gZXJyb3IwOworCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qIFZlcmlmeSBPX0RJUkVDVCBmb3IgZnRtcCAqLwogCWlmIChWTl9DQUNIRUQoVkZTX0kodGlwKSkgIT0gMCkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qIFZlcmlmeSBhbGwgZGF0YSBhcmUgYmVpbmcgc3dhcHBlZCAqLwpAQCAtMTgzLDcgKzE4Niw3IEBACiAJICAgIHN4cC0+c3hfbGVuZ3RoICE9IGlwLT5pX2QuZGlfc2l6ZSB8fAogCSAgICBzeHAtPnN4X2xlbmd0aCAhPSB0aXAtPmlfZC5kaV9zaXplKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVGQVVMVCk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyoKQEAgLTE5Myw3ICsxOTYsNyBAQAogCSAqLwogCWlmICggWEZTX0lGT1JLX1EoaXApICE9IFhGU19JRk9SS19RKHRpcCkgKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyoKQEAgLTIwOCw3ICsyMTEsNyBAQAogCSAgICAoc2JwLT5ic19tdGltZS50dl9zZWMgIT0gaXAtPmlfZC5kaV9tdGltZS50X3NlYykgfHwKIAkgICAgKHNicC0+YnNfbXRpbWUudHZfbnNlYyAhPSBpcC0+aV9kLmRpX210aW1lLnRfbnNlYykpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUJVU1kpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qIFdlIG5lZWQgdG8gZmFpbCBpZiB0aGUgZmlsZSBpcyBtZW1vcnkgbWFwcGVkLiAgT25jZSB3ZSBoYXZlIHRvc3NlZApAQCAtMjE5LDcgKzIyMiw3IEBACiAJICovCiAJaWYgKFZOX01BUFBFRChWRlNfSShpcCkpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCVVNZKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwpAQCAtMjQyLDggKzI0NSw3IEBACiAJCXhmc19pdW5sb2NrKGlwLCAgWEZTX0lPTE9DS19FWENMKTsKIAkJeGZzX2l1bmxvY2sodGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwogCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJbG9ja2VkID0gMDsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0OwogCX0KIAl4ZnNfbG9ja190d29faW5vZGVzKGlwLCB0aXAsIFhGU19JTE9DS19FWENMKTsKIApAQCAtMjUzLDE5ICsyNTUsMTUgQEAKIAlpZiAoICgoWEZTX0lGT1JLX1EoaXApICE9IDApICYmIChpcC0+aV9kLmRpX2FuZXh0ZW50cyA+IDApKSAmJgogCSAgICAgKGlwLT5pX2QuZGlfYWZvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9MT0NBTCkpIHsKIAkJZXJyb3IgPSB4ZnNfYm1hcF9jb3VudF9ibG9ja3ModHAsIGlwLCBYRlNfQVRUUl9GT1JLLCAmYWZvcmtibGtzKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJCWdvdG8gZXJyb3IwOwotCQl9CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X3RyYW5zX2NhbmNlbDsKIAl9CiAJaWYgKCAoKFhGU19JRk9SS19RKHRpcCkgIT0gMCkgJiYgKHRpcC0+aV9kLmRpX2FuZXh0ZW50cyA+IDApKSAmJgogCSAgICAgKHRpcC0+aV9kLmRpX2Fmb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwpKSB7CiAJCWVycm9yID0geGZzX2JtYXBfY291bnRfYmxvY2tzKHRwLCB0aXAsIFhGU19BVFRSX0ZPUkssCiAJCQkmdGFmb3JrYmxrcyk7Ci0JCWlmIChlcnJvcikgewotCQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCQlnb3RvIGVycm9yMDsKLQkJfQorCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF90cmFuc19jYW5jZWw7CiAJfQogCiAJLyoKQEAgLTMzMiwxMCArMzMwLDEwIEBACiAKIAogCUlIT0xEKGlwKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBsb2NrX2ZsYWdzKTsKKwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7CiAKIAlJSE9MRCh0aXApOwotCXhmc190cmFuc19pam9pbih0cCwgdGlwLCBsb2NrX2ZsYWdzKTsKKwl4ZnNfdHJhbnNfaWpvaW4odHAsIHRpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwogCiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsICBpbGZfZmllbGRzKTsKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCB0aXAsIHRpbGZfZmllbGRzKTsKQEAgLTM0NCwxOSArMzQyLDE5IEBACiAJICogSWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzIG1vdW50LCBtYWtlIHN1cmUgdGhhdCB0aGUKIAkgKiB0cmFuc2FjdGlvbiBnb2VzIHRvIGRpc2sgYmVmb3JlIHJldHVybmluZyB0byB0aGUgdXNlci4KIAkgKi8KLQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfV1NZTkMpIHsKKwlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfV1NZTkMpCiAJCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JfQogCiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfU1dBUEVYVCk7Ci0JbG9ja2VkID0gMDsKIAotIGVycm9yMDoKLQlpZiAobG9ja2VkKSB7Ci0JCXhmc19pdW5sb2NrKGlwLCAgbG9ja19mbGFncyk7Ci0JCXhmc19pdW5sb2NrKHRpcCwgbG9ja19mbGFncyk7Ci0JfQotCWlmICh0ZW1waWZwICE9IE5VTEwpCi0JCWttZW1fZnJlZSh0ZW1waWZwKTsKK291dF91bmxvY2s6CisJeGZzX2l1bmxvY2soaXAsICBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7CisJeGZzX2l1bmxvY2sodGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7CitvdXQ6CisJa21lbV9mcmVlKHRlbXBpZnApOwogCXJldHVybiBlcnJvcjsKKworb3V0X3RyYW5zX2NhbmNlbDoKKwl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKKwlnb3RvIG91dF91bmxvY2s7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Rpbm9kZS5oIGIvZnMveGZzL3hmc19kaW5vZGUuaAppbmRleCAxNjJlODcyLi5lNWIxNTNiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Rpbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfZGlub2RlLmgKQEAgLTEwMyw3ICsxMDMsOSBAQAogLyoKICAqIElub2RlIHNpemUgZm9yIGdpdmVuIGZzLgogICovCi0jZGVmaW5lCVhGU19MSVRJTk8obXApCSgobXApLT5tX2xpdGlubykKKyNkZWZpbmUgWEZTX0xJVElOTyhtcCkgXAorCSgoaW50KSgoKG1wKS0+bV9zYi5zYl9pbm9kZXNpemUpIC0gc2l6ZW9mKHN0cnVjdCB4ZnNfZGlub2RlKSkpCisKICNkZWZpbmUJWEZTX0JST09UX1NJWkVfQURKCVwKIAkoWEZTX0JUUkVFX0xCTE9DS19MRU4gLSBzaXplb2YoeGZzX2JtZHJfYmxvY2tfdCkpCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMi5jIGIvZnMveGZzL3hmc19kaXIyLmMKaW5kZXggMWFmYjEyMi4uYzY1N2JlYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyLmMKKysrIGIvZnMveGZzL3hmc19kaXIyLmMKQEAgLTQ2LDggKzQ2LDYgQEAKIAogc3RydWN0IHhmc19uYW1lIHhmc19uYW1lX2RvdGRvdCA9IHsiLi4iLCAyfTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCB4ZnNfbmFtZW9wcyB4ZnNfZGVmYXVsdF9uYW1lb3BzOwotCiAvKgogICogQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSAoaWUuIEEtWikgc3VwcG9ydCBmb3IgZGlyZWN0b3JpZXMgdGhhdCB3YXMKICAqIHVzZWQgaW4gSVJJWC4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKaW5kZXggZTFmMGEwNi4uYWI1MmU5ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKQEAgLTQ0OCw3ICs0NDgsNiBAQAogCXhmc19tb3VudF90CQkqbXA7CQkvKiBmaWxlc3lzdGVtIG1vdW50IHBvaW50ICovCiAJY2hhcgkJCSpwdHI7CQkvKiBjdXJyZW50IGRhdGEgZW50cnkgKi8KIAlpbnQJCQl3YW50b2ZmOwkvKiBzdGFydGluZyBibG9jayBvZmZzZXQgKi8KLQl4ZnNfaW5vX3QJCWlubzsKIAl4ZnNfb2ZmX3QJCWNvb2s7CiAKIAltcCA9IGRwLT5pX21vdW50OwpAQCAtNTA5LDE2ICs1MDgsMTIgQEAKIAogCQljb29rID0geGZzX2RpcjJfZGJfb2ZmX3RvX2RhdGFwdHIobXAsIG1wLT5tX2RpcmRhdGFibGssCiAJCQkJCSAgICAoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spOwotCQlpbm8gPSBiZTY0X3RvX2NwdShkZXAtPmludW1iZXIpOwotI2lmIFhGU19CSUdfSU5VTVMKLQkJaW5vICs9IG1wLT5tX2lub2FkZDsKLSNlbmRpZgogCiAJCS8qCiAJCSAqIElmIGl0IGRpZG4ndCBmaXQsIHNldCB0aGUgZmluYWwgb2Zmc2V0IHRvIGhlcmUgJiByZXR1cm4uCiAJCSAqLwogCQlpZiAoZmlsbGRpcihkaXJlbnQsIGRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLCBjb29rICYgMHg3ZmZmZmZmZiwKLQkJCSAgICBpbm8sIERUX1VOS05PV04pKSB7CisJCQkgICAgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwgRFRfVU5LTk9XTikpIHsKIAkJCSpvZmZzZXQgPSBjb29rICYgMHg3ZmZmZmZmZjsKIAkJCXhmc19kYV9icmVsc2UoTlVMTCwgYnApOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfZGF0YS5oIGIvZnMveGZzL3hmc19kaXIyX2RhdGEuaAppbmRleCBiODE2ZTAyLi5lZmJjMjkwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfZGF0YS5oCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmgKQEAgLTM4LDcgKzM4LDcgQEAKIAogLyoKICAqIERpcmVjdG9yeSBhZGRyZXNzIHNwYWNlIGRpdmlkZWQgaW50byBzZWN0aW9ucywKLSAqIHNwYWNlcyBzZXBhcmF0ZWQgYnkgMzJnYi4KKyAqIHNwYWNlcyBzZXBhcmF0ZWQgYnkgMzJHQi4KICAqLwogI2RlZmluZQlYRlNfRElSMl9TUEFDRV9TSVpFCSgxVUxMIDw8ICgzMiArIFhGU19ESVIyX0RBVEFfQUxJR05fTE9HKSkKICNkZWZpbmUJWEZTX0RJUjJfREFUQV9TUEFDRQkwCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbGVhZi5jIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwppbmRleCBlZjgwNWEzLi5mYTkxM2U0NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCkBAIC01NDksNyArNTQ5LDcgQEAKICAqIENoZWNrIHRoZSBpbnRlcm5hbCBjb25zaXN0ZW5jeSBvZiBhIGxlYWYxIGJsb2NrLgogICogUG9wIGFuIGFzc2VydCBpZiBzb21ldGhpbmcgaXMgd3JvbmcuCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfZGlyMl9sZWFmX2NoZWNrKAogCXhmc19pbm9kZV90CQkqZHAsCQkvKiBpbmNvcmUgZGlyZWN0b3J5IGlub2RlICovCiAJeGZzX2RhYnVmX3QJCSpicCkJCS8qIGxlYWYncyBidWZmZXIgKi8KQEAgLTc4MCw3ICs3ODAsNiBAQAogCWludAkJCXJhX2luZGV4OwkvKiAqbWFwIGluZGV4IGZvciByZWFkLWFoZWFkICovCiAJaW50CQkJcmFfb2Zmc2V0OwkvKiBtYXAgZW50cnkgb2Zmc2V0IGZvciByYSAqLwogCWludAkJCXJhX3dhbnQ7CS8qIHJlYWRhaGVhZCBjb3VudCB3YW50ZWQgKi8KLQl4ZnNfaW5vX3QJCWlubzsKIAogCS8qCiAJICogSWYgdGhlIG9mZnNldCBpcyBhdCBvciBwYXN0IHRoZSBsYXJnZXN0IGFsbG93ZWQgdmFsdWUsCkBAIC0xMDc2LDI0ICsxMDc1LDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIENvcHkgdGhlIGVudHJ5IGludG8gdGhlIHB1dGFyZ3MsIGFuZCB0cnkgZm9ybWF0dGluZyBpdC4KLQkJICovCiAJCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKilwdHI7Ci0KIAkJbGVuZ3RoID0geGZzX2RpcjJfZGF0YV9lbnRzaXplKGRlcC0+bmFtZWxlbik7CiAKLQkJaW5vID0gYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKTsKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlubyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKLQotCQkvKgotCQkgKiBXb24ndCBmaXQuICBSZXR1cm4gdG8gY2FsbGVyLgotCQkgKi8KIAkJaWYgKGZpbGxkaXIoZGlyZW50LCBkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwKIAkJCSAgICB4ZnNfZGlyMl9ieXRlX3RvX2RhdGFwdHIobXAsIGN1cm9mZikgJiAweDdmZmZmZmZmLAotCQkJICAgIGlubywgRFRfVU5LTk9XTikpCisJCQkgICAgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwgRFRfVU5LTk9XTikpCiAJCQlicmVhazsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX25vZGUuYyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKaW5kZXggZmE2YzNhNS4uNWE4MWNjZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX25vZGUuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCkBAIC0xMTA0LDcgKzExMDQsNyBAQAogCX0KIAl4ZnNfZGlyMl9sZWFmbl9jaGVjayhkcCwgYnApOwogCS8qCi0JICogUmV0dXJuIGluZGljYXRpb24gb2Ygd2hldGhlciB0aGlzIGxlYWYgYmxvY2sgaXMgZW10cHkgZW5vdWdoCisJICogUmV0dXJuIGluZGljYXRpb24gb2Ygd2hldGhlciB0aGlzIGxlYWYgYmxvY2sgaXMgZW1wdHkgZW5vdWdoCiAJICogdG8ganVzdGlmeSB0cnlpbmcgdG8gam9pbiBpdCB3aXRoIGEgbmVpZ2hib3IuCiAJICovCiAJKnJ2YWwgPQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX3NmLmMgYi9mcy94ZnMveGZzX2RpcjJfc2YuYwppbmRleCBhOGE4YTZlLi5lODk3MzRlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfc2YuYworKysgYi9mcy94ZnMveGZzX2RpcjJfc2YuYwpAQCAtNzQ4LDExICs3NDgsNyBAQAogCSAqIFB1dCAuIGVudHJ5IHVubGVzcyB3ZSdyZSBzdGFydGluZyBwYXN0IGl0LgogCSAqLwogCWlmICgqb2Zmc2V0IDw9IGRvdF9vZmZzZXQpIHsKLQkJaW5vID0gZHAtPmlfaW5vOwotI2lmIFhGU19CSUdfSU5VTVMKLQkJaW5vICs9IG1wLT5tX2lub2FkZDsKLSNlbmRpZgotCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuIiwgMSwgZG90X29mZnNldCAmIDB4N2ZmZmZmZmYsIGlubywgRFRfRElSKSkgeworCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuIiwgMSwgZG90X29mZnNldCAmIDB4N2ZmZmZmZmYsIGRwLT5pX2lubywgRFRfRElSKSkgewogCQkJKm9mZnNldCA9IGRvdF9vZmZzZXQgJiAweDdmZmZmZmZmOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTc2Myw5ICs3NTksNiBAQAogCSAqLwogCWlmICgqb2Zmc2V0IDw9IGRvdGRvdF9vZmZzZXQpIHsKIAkJaW5vID0geGZzX2RpcjJfc2ZfZ2V0X2ludW1iZXIoc2ZwLCAmc2ZwLT5oZHIucGFyZW50KTsKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlubyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKIAkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCBkb3Rkb3Rfb2Zmc2V0ICYgMHg3ZmZmZmZmZiwgaW5vLCBEVF9ESVIpKSB7CiAJCQkqb2Zmc2V0ID0gZG90ZG90X29mZnNldCAmIDB4N2ZmZmZmZmY7CiAJCQlyZXR1cm4gMDsKQEAgLTc4NiwxMCArNzc5LDYgQEAKIAkJfQogCiAJCWlubyA9IHhmc19kaXIyX3NmX2dldF9pbnVtYmVyKHNmcCwgeGZzX2RpcjJfc2ZfaW51bWJlcnAoc2ZlcCkpOwotI2lmIFhGU19CSUdfSU5VTVMKLQkJaW5vICs9IG1wLT5tX2lub2FkZDsKLSNlbmRpZgotCiAJCWlmIChmaWxsZGlyKGRpcmVudCwgc2ZlcC0+bmFtZSwgc2ZlcC0+bmFtZWxlbiwKIAkJCSAgICBvZmYgJiAweDdmZmZmZmZmLCBpbm8sIERUX1VOS05PV04pKSB7CiAJCQkqb2Zmc2V0ID0gb2ZmICYgMHg3ZmZmZmZmZjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmggYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5oCmluZGV4IDJmMDQ5ZjYuLjBkMjJjNTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmgKKysrIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uaApAQCAtMzMsMTIgKzMzLDEwIEBACiAgKiBjb252ZXJzaW9uIHJvdXRpbmUuCiAgKi8KIAotI2lmbmRlZiBIQVZFX0ZPUk1BVDMyCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZXh0ZW50XzMyIHsKIAlfX3VpbnQ2NF90CWV4dF9zdGFydDsKIAlfX3VpbnQzMl90CWV4dF9sZW47CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHhmc19leHRlbnRfMzJfdDsKLSNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZXh0ZW50XzY0IHsKIAlfX3VpbnQ2NF90CWV4dF9zdGFydDsKQEAgLTU5LDcgKzU3LDYgQEAKIAl4ZnNfZXh0ZW50X3QJCWVmaV9leHRlbnRzWzFdOwkvKiBhcnJheSBvZiBleHRlbnRzIHRvIGZyZWUgKi8KIH0geGZzX2VmaV9sb2dfZm9ybWF0X3Q7CiAKLSNpZm5kZWYgSEFWRV9GT1JNQVQzMgogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmaV9sb2dfZm9ybWF0XzMyIHsKIAlfX3VpbnQxNl90CQllZmlfdHlwZTsJLyogZWZpIGxvZyBpdGVtIHR5cGUgKi8KIAlfX3VpbnQxNl90CQllZmlfc2l6ZTsJLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KQEAgLTY3LDcgKzY0LDYgQEAKIAlfX3VpbnQ2NF90CQllZmlfaWQ7CQkvKiBlZmkgaWRlbnRpZmllciAqLwogCXhmc19leHRlbnRfMzJfdAkJZWZpX2V4dGVudHNbMV07CS8qIGFycmF5IG9mIGV4dGVudHMgdG8gZnJlZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB4ZnNfZWZpX2xvZ19mb3JtYXRfMzJfdDsKLSNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZWZpX2xvZ19mb3JtYXRfNjQgewogCV9fdWludDE2X3QJCWVmaV90eXBlOwkvKiBlZmkgbG9nIGl0ZW0gdHlwZSAqLwpAQCAtOTAsNyArODYsNiBAQAogCXhmc19leHRlbnRfdAkJZWZkX2V4dGVudHNbMV07CS8qIGFycmF5IG9mIGV4dGVudHMgZnJlZWQgKi8KIH0geGZzX2VmZF9sb2dfZm9ybWF0X3Q7CiAKLSNpZm5kZWYgSEFWRV9GT1JNQVQzMgogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmZF9sb2dfZm9ybWF0XzMyIHsKIAlfX3VpbnQxNl90CQllZmRfdHlwZTsJLyogZWZkIGxvZyBpdGVtIHR5cGUgKi8KIAlfX3VpbnQxNl90CQllZmRfc2l6ZTsJLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KQEAgLTk4LDcgKzkzLDYgQEAKIAlfX3VpbnQ2NF90CQllZmRfZWZpX2lkOwkvKiBpZCBvZiBjb3JyZXNwb25kaW5nIGVmaSAqLwogCXhmc19leHRlbnRfMzJfdAkJZWZkX2V4dGVudHNbMV07CS8qIGFycmF5IG9mIGV4dGVudHMgZnJlZWQgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgeGZzX2VmZF9sb2dfZm9ybWF0XzMyX3Q7Ci0jZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmZF9sb2dfZm9ybWF0XzY0IHsKIAlfX3VpbnQxNl90CQllZmRfdHlwZTsJLyogZWZkIGxvZyBpdGVtIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jIGIvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKaW5kZXggZjNiYjc1ZC4uNmM4N2M4ZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKKysrIGIvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCXhmc19leHRsZW5fdAltaW5sZW4pCiB7CiAJaW50CQllcnIsIHRyeWxvY2ssIG5zY2FuOwotCXhmc19leHRsZW5fdAlkZWx0YSwgbG9uZ2VzdCwgbmVlZCwgZnJlZSwgbWluZnJlZSwgbWF4ZnJlZSA9IDA7CisJeGZzX2V4dGxlbl90CWxvbmdlc3QsIGZyZWUsIG1pbmZyZWUsIG1heGZyZWUgPSAwOwogCXhmc19hZ251bWJlcl90CWFnLCBtYXhfYWcgPSBOVUxMQUdOVU1CRVI7CiAJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCkBAIC0xODYsMTIgKzE4Niw3IEBACiAJCQlnb3RvIG5leHRfYWc7CiAJCX0KIAotCQluZWVkID0gWEZTX01JTl9GUkVFTElTVF9QQUcocGFnLCBtcCk7Ci0JCWRlbHRhID0gbmVlZCA+IHBhZy0+cGFnZl9mbGNvdW50ID8gbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50IDogMDsKLQkJbG9uZ2VzdCA9IChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKSA/Ci0JCSAgICAgICAgICAocGFnLT5wYWdmX2xvbmdlc3QgLSBkZWx0YSkgOgotCQkgICAgICAgICAgKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fCBwYWctPnBhZ2ZfbG9uZ2VzdCA+IDApOwotCisJCWxvbmdlc3QgPSB4ZnNfYWxsb2NfbG9uZ2VzdF9mcmVlX2V4dGVudChtcCwgcGFnKTsKIAkJaWYgKCgobWlubGVuICYmIGxvbmdlc3QgPj0gbWlubGVuKSB8fAogCQkgICAgICghbWlubGVuICYmIHBhZy0+cGFnZl9mcmVlYmxrcyA+PSBtaW5mcmVlKSkgJiYKIAkJICAgICghcGFnLT5wYWdmX21ldGFkYXRhIHx8ICEoZmxhZ3MgJiBYRlNfUElDS19VU0VSREFUQSkgfHwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCA2ODBkMGUwLi44Mzc5ZTNiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC01NzYsNyArNTc2LDcgQEAKIAlpZiAoZmRibGtzX2RlbHRhKSB7CiAJCS8qCiAJCSAqIElmIHdlIGFyZSBwdXR0aW5nIGJsb2NrcyBiYWNrIGhlcmUsIG1fcmVzYmxrc19hdmFpbCBpcwotCQkgKiBhbHJlYWR5IGF0IGl0J3MgbWF4IHNvIHRoaXMgd2lsbCBwdXQgaXQgaW4gdGhlIGZyZWUgcG9vbC4KKwkJICogYWxyZWFkeSBhdCBpdHMgbWF4IHNvIHRoaXMgd2lsbCBwdXQgaXQgaW4gdGhlIGZyZWUgcG9vbC4KIAkJICoKIAkJICogSWYgd2UgbmVlZCBzcGFjZSwgd2UnbGwgZWl0aGVyIHN1Y2NlZWQgaW4gZ2V0dGluZyBpdAogCQkgKiBmcm9tIHRoZSBmcmVlIGJsb2NrIGNvdW50IG9yIHdlJ2xsIGdldCBhbiBlbm9zcGMuIElmCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCBhYjAxNmU1Li4zMTIwYTNhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCQlhcmdzLm1pbmFsaWduc2xvcCA9IHhmc19pYWxsb2NfY2x1c3Rlcl9hbGlnbm1lbnQoJmFyZ3MpIC0gMTsKIAogCQkvKiBBbGxvdyBzcGFjZSBmb3IgdGhlIGlub2RlIGJ0cmVlIHRvIHNwbGl0LiAqLwotCQlhcmdzLm1pbmxlZnQgPSBYRlNfSU5fTUFYTEVWRUxTKGFyZ3MubXApIC0gMTsKKwkJYXJncy5taW5sZWZ0ID0gYXJncy5tcC0+bV9pbl9tYXhsZXZlbHMgLSAxOwogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX3ZleHRlbnQoJmFyZ3MpKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9IGVsc2UKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQkvKgogCQkgKiBBbGxvdyBzcGFjZSBmb3IgdGhlIGlub2RlIGJ0cmVlIHRvIHNwbGl0LgogCQkgKi8KLQkJYXJncy5taW5sZWZ0ID0gWEZTX0lOX01BWExFVkVMUyhhcmdzLm1wKSAtIDE7CisJCWFyZ3MubWlubGVmdCA9IGFyZ3MubXAtPm1faW5fbWF4bGV2ZWxzIC0gMTsKIAkJaWYgKChlcnJvciA9IHhmc19hbGxvY192ZXh0ZW50KCZhcmdzKSkpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCSAqIEluaXRpYWxpemUgYWxsIGlub2RlcyBpbiB0aGlzIGJ1ZmZlciBhbmQgdGhlbiBsb2cgdGhlbS4KIAkJICoKIAkJICogWFhYOiBJdCB3b3VsZCBiZSBtdWNoIGJldHRlciBpZiB3ZSBoYWQganVzdCBvbmUgdHJhbnNhY3Rpb24gdG8KLQkJICogICAgICBsb2cgYSB3aG9sZSBjbHVzdGVyIG9mIGlub2RlcyBpbnN0ZWFkIG9mIGFsbCB0aGUgaW5kaXZkdWFsCisJCSAqICAgICAgbG9nIGEgd2hvbGUgY2x1c3RlciBvZiBpbm9kZXMgaW5zdGVhZCBvZiBhbGwgdGhlIGluZGl2aWR1YWwKIAkJICogICAgICB0cmFuc2FjdGlvbnMgY2F1c2luZyBhIGxvdCBvZiBsb2cgdHJhZmZpYy4KIAkJICovCiAJCXhmc19iaW96ZXJvKGZidWYsIDAsIG5pbm9kZXMgPDwgYXJncy5tcC0+bV9zYi5zYl9pbm9kZWxvZyk7CkBAIC05NDMsNyArOTQzLDcgQEAKIAlBU1NFUlQoKFhGU19BR0lOT19UT19PRkZTRVQobXAsIHJlYy5pcl9zdGFydGlubykgJQogCQkJCSAgIFhGU19JTk9ERVNfUEVSX0NIVU5LKSA9PSAwKTsKIAlpbm8gPSBYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCByZWMuaXJfc3RhcnRpbm8gKyBvZmZzZXQpOwotCVhGU19JTk9CVF9DTFJfRlJFRSgmcmVjLCBvZmZzZXQpOworCXJlYy5pcl9mcmVlICY9IH5YRlNfSU5PQlRfTUFTSyhvZmZzZXQpOwogCXJlYy5pcl9mcmVlY291bnQtLTsKIAlpZiAoKGVycm9yID0geGZzX2lub2J0X3VwZGF0ZShjdXIsIHJlYy5pcl9zdGFydGlubywgcmVjLmlyX2ZyZWVjb3VudCwKIAkJCXJlYy5pcl9mcmVlKSkpCkBAIC0xMTA1LDExICsxMTA1LDExIEBACiAJICovCiAJb2ZmID0gYWdpbm8gLSByZWMuaXJfc3RhcnRpbm87CiAJQVNTRVJUKG9mZiA+PSAwICYmIG9mZiA8IFhGU19JTk9ERVNfUEVSX0NIVU5LKTsKLQlBU1NFUlQoIVhGU19JTk9CVF9JU19GUkVFKCZyZWMsIG9mZikpOworCUFTU0VSVCghKHJlYy5pcl9mcmVlICYgWEZTX0lOT0JUX01BU0sob2ZmKSkpOwogCS8qCiAJICogTWFyayB0aGUgaW5vZGUgZnJlZSAmIGluY3JlbWVudCB0aGUgY291bnQuCiAJICovCi0JWEZTX0lOT0JUX1NFVF9GUkVFKCZyZWMsIG9mZik7CisJcmVjLmlyX2ZyZWUgfD0gWEZTX0lOT0JUX01BU0sob2ZmKTsKIAlyZWMuaXJfZnJlZWNvdW50Kys7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmMKaW5kZXggOTlmMjQwOC4uYzI4MmE5YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIH0KIAogLyoKLSAqIGludGlhbCB2YWx1ZSBvZiBwdHIgZm9yIGxvb2t1cAorICogaW5pdGlhbCB2YWx1ZSBvZiBwdHIgZm9yIGxvb2t1cAogICovCiBTVEFUSUMgdm9pZAogeGZzX2lub2J0X2luaXRfcHRyX2Zyb21fY3VyKApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmgKaW5kZXggNTU4MGUyNS4uZjc4MmFkMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5oCkBAIC0zMiwxNCArMzIsMTQgQEAKICNkZWZpbmUJWEZTX0lCVF9NQUdJQwkweDQ5NDE0MjU0CS8qICdJQUJUJyAqLwogCiB0eXBlZGVmCV9fdWludDY0X3QJeGZzX2lub2ZyZWVfdDsKLSNkZWZpbmUJWEZTX0lOT0RFU19QRVJfQ0hVTksJKE5CQlkgKiBzaXplb2YoeGZzX2lub2ZyZWVfdCkpCisjZGVmaW5lCVhGU19JTk9ERVNfUEVSX0NIVU5LCQkoTkJCWSAqIHNpemVvZih4ZnNfaW5vZnJlZV90KSkKICNkZWZpbmUJWEZTX0lOT0RFU19QRVJfQ0hVTktfTE9HCShYRlNfTkJCWUxPRyArIDMpCi0jZGVmaW5lCVhGU19JTk9CVF9BTExfRlJFRQkoKHhmc19pbm9mcmVlX3QpLTEpCisjZGVmaW5lCVhGU19JTk9CVF9BTExfRlJFRQkJKCh4ZnNfaW5vZnJlZV90KS0xKQorI2RlZmluZQlYRlNfSU5PQlRfTUFTSyhpKQkJKCh4ZnNfaW5vZnJlZV90KTEgPDwgKGkpKQogCiBzdGF0aWMgaW5saW5lIHhmc19pbm9mcmVlX3QgeGZzX2lub2J0X21hc2tuKGludCBpLCBpbnQgbikKIHsKLQlyZXR1cm4gKCgobikgPj0gWEZTX0lOT0RFU19QRVJfQ0hVTksgPyBcCi0JCSh4ZnNfaW5vZnJlZV90KTAgOiAoKHhmc19pbm9mcmVlX3QpMSA8PCAobikpKSAtIDEpIDw8IChpKTsKKwlyZXR1cm4gKChuID49IFhGU19JTk9ERVNfUEVSX0NIVU5LID8gMCA6IFhGU19JTk9CVF9NQVNLKG4pKSAtIDEpIDw8IGk7CiB9CiAKIC8qCkBAIC02OSwyMCArNjksNiBAQAogdHlwZWRlZiBfX2JlMzIgeGZzX2lub2J0X3B0cl90OwogCiAvKgotICogQml0IG1hbmlwdWxhdGlvbnMgZm9yIGlyX2ZyZWUuCi0gKi8KLSNkZWZpbmUJWEZTX0lOT0JUX01BU0soaSkJCSgoeGZzX2lub2ZyZWVfdCkxIDw8IChpKSkKLSNkZWZpbmUJWEZTX0lOT0JUX0lTX0ZSRUUocnAsaSkJCVwKLQkJKCgocnApLT5pcl9mcmVlICYgWEZTX0lOT0JUX01BU0soaSkpICE9IDApCi0jZGVmaW5lCVhGU19JTk9CVF9TRVRfRlJFRShycCxpKQkoKHJwKS0+aXJfZnJlZSB8PSBYRlNfSU5PQlRfTUFTSyhpKSkKLSNkZWZpbmUJWEZTX0lOT0JUX0NMUl9GUkVFKHJwLGkpCSgocnApLT5pcl9mcmVlICY9IH5YRlNfSU5PQlRfTUFTSyhpKSkKLQotLyoKLSAqIE1heGltdW0gbnVtYmVyIG9mIGlub2RlIGJ0cmVlIGxldmVscy4KLSAqLwotI2RlZmluZQlYRlNfSU5fTUFYTEVWRUxTKG1wKQkJKChtcCktPm1faW5fbWF4bGV2ZWxzKQotCi0vKgogICogYmxvY2sgbnVtYmVycyBpbiB0aGUgQUcuCiAgKi8KICNkZWZpbmUJWEZTX0lCVF9CTE9DSyhtcCkJCSgoeGZzX2FnYmxvY2tfdCkoWEZTX0NOVF9CTE9DSyhtcCkgKyAxKSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAxZjE3NWZhLi5mODc5YzFiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogLyoKICAqIE5PVEU6ICBUaGlzIHN0cnVjdHVyZSBtdXN0IGJlIGtlcHQgaWRlbnRpY2FsIHRvIHN0cnVjdCB4ZnNfZGlub2RlCi0gKiAJICBpbiB4ZnNfZGlub2RlLmggZXhjZXB0IGZvciB0aGUgZW5kaWFuZXNzIGFubm90YXRpb25zLgorICogCSAgaW4geGZzX2Rpbm9kZS5oIGV4Y2VwdCBmb3IgdGhlIGVuZGlhbm5lc3MgYW5ub3RhdGlvbnMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19pY2Rpbm9kZSB7CiAJX191aW50MTZfdAlkaV9tYWdpYzsJLyogaW5vZGUgbWFnaWMgIyA9IFhGU19ESU5PREVfTUFHSUMgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKaW5kZXggOTk1N2QwNi4uYTUyYWMxMiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKQEAgLTQwLDcgKzQwLDYgQEAKIAlfX2ludDMyX3QJCWlsZl9ib2Zmc2V0OwkvKiBvZmYgb2YgaW5vZGUgaW4gYnVmZmVyICovCiB9IHhmc19pbm9kZV9sb2dfZm9ybWF0X3Q7CiAKLSNpZm5kZWYgSEFWRV9GT1JNQVQzMgogdHlwZWRlZiBzdHJ1Y3QgeGZzX2lub2RlX2xvZ19mb3JtYXRfMzIgewogCV9fdWludDE2X3QJCWlsZl90eXBlOwkvKiBpbm9kZSBsb2cgaXRlbSB0eXBlICovCiAJX191aW50MTZfdAkJaWxmX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCkBAIC01Niw3ICs1NSw2IEBACiAJX19pbnQzMl90CQlpbGZfbGVuOwkvKiBsZW4gb2YgaW5vZGUgYnVmZmVyICovCiAJX19pbnQzMl90CQlpbGZfYm9mZnNldDsJLyogb2ZmIG9mIGlub2RlIGluIGJ1ZmZlciAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB4ZnNfaW5vZGVfbG9nX2Zvcm1hdF8zMl90OwotI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHhmc19pbm9kZV9sb2dfZm9ybWF0XzY0IHsKIAlfX3VpbnQxNl90CQlpbGZfdHlwZTsJLyogaW5vZGUgbG9nIGl0ZW0gdHlwZSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5oIGIvZnMveGZzL3hmc19pb21hcC5oCmluZGV4IGVlMWEwYzEuLmExY2MxMzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuaAorKysgYi9mcy94ZnMveGZzX2lvbWFwLmgKQEAgLTYzLDcgKzYzLDcgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfaW9tYXAgewotCXhmc19kYWRkcl90CQlpb21hcF9ibjsJLyogZmlyc3QgNTEyYiBibGsgb2YgbWFwcGluZyAqLworCXhmc19kYWRkcl90CQlpb21hcF9ibjsJLyogZmlyc3QgNTEyQiBibGsgb2YgbWFwcGluZyAqLwogCXhmc19idWZ0YXJnX3QJCSppb21hcF90YXJnZXQ7CiAJeGZzX29mZl90CQlpb21hcF9vZmZzZXQ7CS8qIG9mZnNldCBvZiBtYXBwaW5nLCBieXRlcyAqLwogCXhmc19vZmZfdAkJaW9tYXBfYnNpemU7CS8qIHNpemUgb2YgbWFwcGluZywgYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IGNmOThhODAuLmFlYjJkMjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtODMsNyArODMsMTIgQEAKIAlidWYtPmJzX3VpZCA9IGRpYy0+ZGlfdWlkOwogCWJ1Zi0+YnNfZ2lkID0gZGljLT5kaV9naWQ7CiAJYnVmLT5ic19zaXplID0gZGljLT5kaV9zaXplOwotCXZuX2F0aW1lX3RvX2JzdGltZShWRlNfSShpcCksICZidWYtPmJzX2F0aW1lKTsKKwkvKgorCSAqIFdlIGFyZSByZWFkaW5nIHRoZSBhdGltZSBmcm9tIHRoZSBMaW51eCBpbm9kZSBiZWNhdXNlIHRoZQorCSAqIGRpbm9kZSBtaWdodCBub3QgYmUgdXB0b2RhdGUuCisJICovCisJYnVmLT5ic19hdGltZS50dl9zZWMgPSBWRlNfSShpcCktPmlfYXRpbWUudHZfc2VjOworCWJ1Zi0+YnNfYXRpbWUudHZfbnNlYyA9IFZGU19JKGlwKS0+aV9hdGltZS50dl9uc2VjOwogCWJ1Zi0+YnNfbXRpbWUudHZfc2VjID0gZGljLT5kaV9tdGltZS50X3NlYzsKIAlidWYtPmJzX210aW1lLnR2X25zZWMgPSBkaWMtPmRpX210aW1lLnRfbnNlYzsKIAlidWYtPmJzX2N0aW1lLnR2X3NlYyA9IGRpYy0+ZGlfY3RpbWUudF9zZWM7CkBAIC01NzksNyArNTg0LDcgQEAKIAkJCQkgKiBmaXJzdCBpbm9kZSBvZiB0aGUgY2x1c3Rlci4KIAkJCQkgKgogCQkJCSAqIENhcmVmdWwgd2l0aCBjbHVzdGlkeC4gICBUaGVyZSBjYW4gYmUKLQkJCQkgKiBtdWx0cGxlIGNsdXN0ZXJzIHBlciBjaHVuaywgYSBzaW5nbGUKKwkJCQkgKiBtdWx0aXBsZSBjbHVzdGVycyBwZXIgY2h1bmssIGEgc2luZ2xlCiAJCQkJICogY2x1c3RlciBwZXIgY2h1bmsgb3IgYSBjbHVzdGVyIHRoYXQgaGFzCiAJCQkJICogaW5vZGVzIHJlcHJlc2VudGVkIGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQKIAkJCQkgKiBjaHVua3MgKGlmIGJsb2Nrc2l6ZSBpcyBsYXJnZSkuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5jIGIvZnMveGZzL3hmc19sb2cuYwppbmRleCBmNDcyNmY3Li5mNzZjNmQ3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmMKQEAgLTU3NCw3ICs1NzQsNyBAQAogCWVycm9yID0geGZzX3RyYW5zX2FpbF9pbml0KG1wKTsKIAlpZiAoZXJyb3IpIHsKIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBBSUwgaW5pdGlhbGlzYXRpb24gZmFpbGVkOiBlcnJvciAlZCIsIGVycm9yKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBvdXRfZnJlZV9sb2c7CiAJfQogCW1wLT5tX2xvZy0+bF9haWxwID0gbXAtPm1fYWlsOwogCkBAIC01OTQsMjAgKzU5NCwyMiBAQAogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX1JET05MWTsKIAkJaWYgKGVycm9yKSB7CiAJCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IGxvZyBtb3VudC9yZWNvdmVyeSBmYWlsZWQ6IGVycm9yICVkIiwgZXJyb3IpOwotCQkJZ290byBlcnJvcjsKKwkJCWdvdG8gb3V0X2Rlc3Ryb3lfYWlsOwogCQl9CiAJfQogCiAJLyogTm9ybWFsIHRyYW5zYWN0aW9ucyBjYW4gbm93IG9jY3VyICovCiAJbXAtPm1fbG9nLT5sX2ZsYWdzICY9IH5YTE9HX0FDVElWRV9SRUNPVkVSWTsKIAotCS8qIEVuZCBtb3VudGluZyBtZXNzYWdlIGluIHhmc19sb2dfbW91bnRfZmluaXNoICovCiAJcmV0dXJuIDA7Ci1lcnJvcjoKLQl4ZnNfbG9nX3VubW91bnRfZGVhbGxvYyhtcCk7CisKK291dF9kZXN0cm95X2FpbDoKKwl4ZnNfdHJhbnNfYWlsX2Rlc3Ryb3kobXApOworb3V0X2ZyZWVfbG9nOgorCXhsb2dfZGVhbGxvY19sb2cobXAtPm1fbG9nKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7Ci19CS8qIHhmc19sb2dfbW91bnQgKi8KK30KIAogLyoKICAqIEZpbmlzaCB0aGUgcmVjb3Zlcnkgb2YgdGhlIGZpbGUgc3lzdGVtLiAgVGhpcyBpcyBzZXBhcmF0ZSBmcm9tCkBAIC02MzMsMTkgKzYzNSw2IEBACiB9CiAKIC8qCi0gKiBVbm1vdW50IHByb2Nlc3NpbmcgZm9yIHRoZSBsb2cuCi0gKi8KLWludAoteGZzX2xvZ191bm1vdW50KHhmc19tb3VudF90ICptcCkKLXsKLQlpbnQJCWVycm9yOwotCi0JZXJyb3IgPSB4ZnNfbG9nX3VubW91bnRfd3JpdGUobXApOwotCXhmc19sb2dfdW5tb3VudF9kZWFsbG9jKG1wKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCiAgKiBGaW5hbCBsb2cgd3JpdGVzIGFzIHBhcnQgb2YgdW5tb3VudC4KICAqCiAgKiBNYXJrIHRoZSBmaWxlc3lzdGVtIGNsZWFuIGFzIHVubW91bnQgaGFwcGVucy4gIE5vdGUgdGhhdCBkdXJpbmcgcmVsb2NhdGlvbgpAQCAtNzk1LDcgKzc4NCw3IEBACiAgKiBhbmQgZGVhbGxvY2F0ZSB0aGUgbG9nIGFzIHRoZSBhaWxkIHJlZmVyZW5jZXMgdGhlIGxvZy4KICAqLwogdm9pZAoteGZzX2xvZ191bm1vdW50X2RlYWxsb2MoeGZzX21vdW50X3QgKm1wKQoreGZzX2xvZ191bm1vdW50KHhmc19tb3VudF90ICptcCkKIHsKIAl4ZnNfdHJhbnNfYWlsX2Rlc3Ryb3kobXApOwogCXhsb2dfZGVhbGxvY19sb2cobXAtPm1fbG9nKTsKQEAgLTExMDksNyArMTA5OCw3IEBACiAvKgogICogUmV0dXJuIHNpemUgb2YgZWFjaCBpbi1jb3JlIGxvZyByZWNvcmQgYnVmZmVyLgogICoKLSAqIEFsbCBtYWNoaW5lcyBnZXQgOCB4IDMyS0IgYnVmZmVycyBieSBkZWZhdWx0LCB1bmxlc3MgdHVuZWQgb3RoZXJ3aXNlLgorICogQWxsIG1hY2hpbmVzIGdldCA4IHggMzJrQiBidWZmZXJzIGJ5IGRlZmF1bHQsIHVubGVzcyB0dW5lZCBvdGhlcndpc2UuCiAgKgogICogSWYgdGhlIGZpbGVzeXN0ZW0gYmxvY2tzaXplIGlzIHRvbyBsYXJnZSwgd2UgbWF5IG5lZWQgdG8gY2hvb3NlIGEKICAqIGxhcmdlciBzaXplIHNpbmNlIHRoZSBkaXJlY3RvcnkgY29kZSBjdXJyZW50bHkgbG9ncyBlbnRpcmUgYmxvY2tzLgpAQCAtMTEzOSw4ICsxMTI4LDggQEAKIAkJfQogCiAJCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbXAtPm1fc2IpKSB7Ci0JCQkvKiAjIGhlYWRlcnMgPSBzaXplIC8gMzJLCi0JCQkgKiBvbmUgaGVhZGVyIGhvbGRzIGN5Y2xlcyBmcm9tIDMySyBvZiBkYXRhCisJCQkvKiAjIGhlYWRlcnMgPSBzaXplIC8gMzJrCisJCQkgKiBvbmUgaGVhZGVyIGhvbGRzIGN5Y2xlcyBmcm9tIDMyayBvZiBkYXRhCiAJCQkgKi8KIAogCQkJeGhkcnMgPSBtcC0+bV9sb2dic2l6ZSAvIFhMT0dfSEVBREVSX0NZQ0xFX1NJWkU7CkBAIC0xMTU2LDcgKzExNDUsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogQWxsIG1hY2hpbmVzIHVzZSAzMktCIGJ1ZmZlcnMgYnkgZGVmYXVsdC4gKi8KKwkvKiBBbGwgbWFjaGluZXMgdXNlIDMya0IgYnVmZmVycyBieSBkZWZhdWx0LiAqLwogCWxvZy0+bF9pY2xvZ19zaXplID0gWExPR19CSUdfUkVDT1JEX0JTSVpFOwogCWxvZy0+bF9pY2xvZ19zaXplX2xvZyA9IFhMT0dfQklHX1JFQ09SRF9CU0hJRlQ7CiAKQEAgLTExNjQsMzIgKzExNTMsOCBAQAogCWxvZy0+bF9pY2xvZ19oc2l6ZSA9IEJCU0laRTsKIAlsb2ctPmxfaWNsb2dfaGVhZHMgPSAxOwogCi0JLyoKLQkgKiBGb3IgMTZLQiwgd2UgdXNlIDMgMzJLQiBidWZmZXJzLiAgRm9yIDMyS0IgYmxvY2sgc2l6ZXMsIHdlIHVzZQotCSAqIDQgMzJLQiBidWZmZXJzLiAgRm9yIDY0S0IgYmxvY2sgc2l6ZXMsIHdlIHVzZSA4IDMyS0IgYnVmZmVycy4KLQkgKi8KLQlpZiAobXAtPm1fc2Iuc2JfYmxvY2tzaXplID49IDE2KjEwMjQpIHsKLQkJbG9nLT5sX2ljbG9nX3NpemUgPSBYTE9HX0JJR19SRUNPUkRfQlNJWkU7Ci0JCWxvZy0+bF9pY2xvZ19zaXplX2xvZyA9IFhMT0dfQklHX1JFQ09SRF9CU0hJRlQ7Ci0JCWlmIChtcC0+bV9sb2didWZzIDw9IDApIHsKLQkJCXN3aXRjaCAobXAtPm1fc2Iuc2JfYmxvY2tzaXplKSB7Ci0JCQkgICAgY2FzZSAxNioxMDI0OgkJCS8qIDE2IEtCICovCi0JCQkJbG9nLT5sX2ljbG9nX2J1ZnMgPSAzOwotCQkJCWJyZWFrOwotCQkJICAgIGNhc2UgMzIqMTAyNDoJCQkvKiAzMiBLQiAqLwotCQkJCWxvZy0+bF9pY2xvZ19idWZzID0gNDsKLQkJCQlicmVhazsKLQkJCSAgICBjYXNlIDY0KjEwMjQ6CQkJLyogNjQgS0IgKi8KLQkJCQlsb2ctPmxfaWNsb2dfYnVmcyA9IDg7Ci0JCQkJYnJlYWs7Ci0JCQkgICAgZGVmYXVsdDoKLQkJCQl4bG9nX3BhbmljKCJYRlM6IEludmFsaWQgYmxvY2tzaXplIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLWRvbmU6CS8qIGFyZSB3ZSBiZWluZyBhc2tlZCB0byBtYWtlIHRoZSBzaXplcyBzZWxlY3RlZCBhYm92ZSB2aXNpYmxlPyAqLworZG9uZToKKwkvKiBhcmUgd2UgYmVpbmcgYXNrZWQgdG8gbWFrZSB0aGUgc2l6ZXMgc2VsZWN0ZWQgYWJvdmUgdmlzaWJsZT8gKi8KIAlpZiAobXAtPm1fbG9nYnVmcyA9PSAwKQogCQltcC0+bV9sb2didWZzID0gbG9nLT5sX2ljbG9nX2J1ZnM7CiAJaWYgKG1wLT5tX2xvZ2JzaXplID09IDApCkBAIC0zMjE0LDcgKzMxNzksNyBAQAogICovCiAKIC8qCi0gKiBGcmVlIGEgdXNlZCB0aWNrZXQgd2hlbiBpdCdzIHJlZmNvdW50IGZhbGxzIHRvIHplcm8uCisgKiBGcmVlIGEgdXNlZCB0aWNrZXQgd2hlbiBpdHMgcmVmY291bnQgZmFsbHMgdG8gemVyby4KICAqLwogdm9pZAogeGZzX2xvZ190aWNrZXRfcHV0KApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuaCBiL2ZzL3hmcy94ZnNfbG9nLmgKaW5kZXggOGEzZTg0ZS4uZDBjOWJhYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuaAorKysgYi9mcy94ZnMveGZzX2xvZy5oCkBAIC0xNzAsOSArMTcwLDggQEAKIAkJCWludAkJIG5lbnRyaWVzLAogCQkJeGZzX2xvZ190aWNrZXRfdCB0aWNrZXQsCiAJCQl4ZnNfbHNuX3QJICpzdGFydF9sc24pOwotaW50CSAgeGZzX2xvZ191bm1vdW50KHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIGludAkgIHhmc19sb2dfdW5tb3VudF93cml0ZShzdHJ1Y3QgeGZzX21vdW50ICptcCk7Ci12b2lkICAgICAgeGZzX2xvZ191bm1vdW50X2RlYWxsb2Moc3RydWN0IHhmc19tb3VudCAqbXApOwordm9pZCAgICAgIHhmc19sb2dfdW5tb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiBpbnQJICB4ZnNfbG9nX2ZvcmNlX3Vtb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGxvZ2Vycm9yKTsKIGludAkgIHhmc19sb2dfbmVlZF9jb3ZlcmVkKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcHJpdi5oIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCmluZGV4IDY1NDE2N2IuLmJjYWQ1ZjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKQEAgLTM1OSw3ICszNTksNyBAQAogCWludAkJCWljX3NpemU7CiAJaW50CQkJaWNfb2Zmc2V0OwogCWludAkJCWljX2J3cml0ZWNudDsKLQl1c2hvcnRfdAkJaWNfc3RhdGU7CisJdW5zaWduZWQgc2hvcnQJCWljX3N0YXRlOwogCWNoYXIJCQkqaWNfZGF0YXA7CS8qIHBvaW50ZXIgdG8gaWNsb2cgZGF0YSAqLwogI2lmZGVmIFhGU19MT0dfVFJBQ0UKIAlzdHJ1Y3Qga3RyYWNlCQkqaWNfdHJhY2U7CkBAIC00NTUsNyArNDU1LDYgQEAKIAogZXh0ZXJuIHN0cnVjdCB4ZnNfYnVmICp4bG9nX2dldF9icCh4bG9nX3QgKiwgaW50KTsKIGV4dGVybiB2b2lkCSB4bG9nX3B1dF9icChzdHJ1Y3QgeGZzX2J1ZiAqKTsKLWV4dGVybiBpbnQJIHhsb2dfYnJlYWQoeGxvZ190ICosIHhmc19kYWRkcl90LCBpbnQsIHN0cnVjdCB4ZnNfYnVmICopOwogCiBleHRlcm4ga21lbV96b25lX3QJKnhmc19sb2dfdGlja2V0X3pvbmU7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwppbmRleCA2MWFmNjEwLi43YmE0NTAxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKKysrIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCkBAIC05NCwxMiArOTQsMzAgQEAKIAl4ZnNfYnVmX2ZyZWUoYnApOwogfQogCitTVEFUSUMgeGZzX2NhZGRyX3QKK3hsb2dfYWxpZ24oCisJeGxvZ190CQkqbG9nLAorCXhmc19kYWRkcl90CWJsa19ubywKKwlpbnQJCW5iYmxrcywKKwl4ZnNfYnVmX3QJKmJwKQoreworCXhmc19jYWRkcl90CXB0cjsKKworCWlmICghbG9nLT5sX3NlY3RiYl9sb2cpCisJCXJldHVybiBYRlNfQlVGX1BUUihicCk7CisKKwlwdHIgPSBYRlNfQlVGX1BUUihicCkgKyBCQlRPQigoaW50KWJsa19ubyAmIGxvZy0+bF9zZWN0YmJfbWFzayk7CisJQVNTRVJUKFhGU19CVUZfU0laRShicCkgPj0KKwkJQkJUT0IobmJibGtzICsgKGJsa19ubyAmIGxvZy0+bF9zZWN0YmJfbWFzaykpKTsKKwlyZXR1cm4gcHRyOworfQorCiAKIC8qCiAgKiBuYmJsa3Mgc2hvdWxkIGJlIHVpbnQsIGJ1dCBvaCB3ZWxsLiAgSnVzdCB3YW50IHRvIGNhdGNoIHRoYXQgMzItYml0IGxlbmd0aC4KICAqLwotaW50Ci14bG9nX2JyZWFkKAorU1RBVElDIGludAoreGxvZ19icmVhZF9ub2FsaWduKAogCXhsb2dfdAkJKmxvZywKIAl4ZnNfZGFkZHJfdAlibGtfbm8sCiAJaW50CQluYmJsa3MsCkBAIC0xMzcsNiArMTU1LDI0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitTVEFUSUMgaW50Cit4bG9nX2JyZWFkKAorCXhsb2dfdAkJKmxvZywKKwl4ZnNfZGFkZHJfdAlibGtfbm8sCisJaW50CQluYmJsa3MsCisJeGZzX2J1Zl90CSpicCwKKwl4ZnNfY2FkZHJfdAkqb2Zmc2V0KQoreworCWludAkJZXJyb3I7CisKKwllcnJvciA9IHhsb2dfYnJlYWRfbm9hbGlnbihsb2csIGJsa19ubywgbmJibGtzLCBicCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwkqb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubywgbmJibGtzLCBicCk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBXcml0ZSBvdXQgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gYmxvY2sgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgYmxvY2tzLgogICogVGhlIGJ1ZmZlciBpcyBrZXB0IGxvY2tlZCBhY3Jvc3MgdGhlIHdyaXRlIGFuZCBpcyByZXR1cm5lZCBsb2NrZWQuCkBAIC0xODAsMjQgKzIxNiw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1TVEFUSUMgeGZzX2NhZGRyX3QKLXhsb2dfYWxpZ24oCi0JeGxvZ190CQkqbG9nLAotCXhmc19kYWRkcl90CWJsa19ubywKLQlpbnQJCW5iYmxrcywKLQl4ZnNfYnVmX3QJKmJwKQotewotCXhmc19jYWRkcl90CXB0cjsKLQotCWlmICghbG9nLT5sX3NlY3RiYl9sb2cpCi0JCXJldHVybiBYRlNfQlVGX1BUUihicCk7Ci0KLQlwdHIgPSBYRlNfQlVGX1BUUihicCkgKyBCQlRPQigoaW50KWJsa19ubyAmIGxvZy0+bF9zZWN0YmJfbWFzayk7Ci0JQVNTRVJUKFhGU19CVUZfU0laRShicCkgPj0KLQkJQkJUT0IobmJibGtzICsgKGJsa19ubyAmIGxvZy0+bF9zZWN0YmJfbWFzaykpKTsKLQlyZXR1cm4gcHRyOwotfQotCiAjaWZkZWYgREVCVUcKIC8qCiAgKiBkdW1wIGRlYnVnIHN1cGVyYmxvY2sgYW5kIGxvZyByZWNvcmQgaW5mb3JtYXRpb24KQEAgLTIxMSwxMSArMjI5LDExIEBACiAKIAljbW5fZXJyKENFX0RFQlVHLCAiJXM6ICBTQiA6IHV1aWQgPSAiLCBfX2Z1bmNfXyk7CiAJZm9yIChiID0gMDsgYiA8IDE2OyBiKyspCi0JCWNtbl9lcnIoQ0VfREVCVUcsICIlMDJ4IiwgKCh1Y2hhcl90ICopJm1wLT5tX3NiLnNiX3V1aWQpW2JdKTsKKwkJY21uX2VycihDRV9ERUJVRywgIiUwMngiLCAoKF9fdWludDhfdCAqKSZtcC0+bV9zYi5zYl91dWlkKVtiXSk7CiAJY21uX2VycihDRV9ERUJVRywgIiwgZm10ID0gJWRcbiIsIFhMT0dfRk1UKTsKIAljbW5fZXJyKENFX0RFQlVHLCAiICAgIGxvZyA6IHV1aWQgPSAiKTsKIAlmb3IgKGIgPSAwOyBiIDwgMTY7IGIrKykKLQkJY21uX2VycihDRV9ERUJVRywgIiUwMngiLCgodWNoYXJfdCAqKSZoZWFkLT5oX2ZzX3V1aWQpW2JdKTsKKwkJY21uX2VycihDRV9ERUJVRywgIiUwMngiLCAoKF9fdWludDhfdCAqKSZoZWFkLT5oX2ZzX3V1aWQpW2JdKTsKIAljbW5fZXJyKENFX0RFQlVHLCAiLCBmbXQgPSAlZFxuIiwgYmUzMl90b19jcHUoaGVhZC0+aF9mbXQpKTsKIH0KICNlbHNlCkBAIC0zMjEsOSArMzM5LDkgQEAKIAogCW1pZF9ibGsgPSBCTEtfQVZHKGZpcnN0X2JsaywgKmxhc3RfYmxrKTsKIAl3aGlsZSAobWlkX2JsayAhPSBmaXJzdF9ibGsgJiYgbWlkX2JsayAhPSAqbGFzdF9ibGspIHsKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBtaWRfYmxrLCAxLCBicCkpKQorCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBtaWRfYmxrLCAxLCBicCwgJm9mZnNldCk7CisJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIG1pZF9ibGssIDEsIGJwKTsKIAkJbWlkX2N5Y2xlID0geGxvZ19nZXRfY3ljbGUob2Zmc2V0KTsKIAkJaWYgKG1pZF9jeWNsZSA9PSBjeWNsZSkgewogCQkJKmxhc3RfYmxrID0gbWlkX2JsazsKQEAgLTM3OSwxMCArMzk3LDEwIEBACiAKIAkJYmNvdW50ID0gbWluKGJ1ZmJsa3MsIChzdGFydF9ibGsgKyBuYmJsa3MgLSBpKSk7CiAKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCBiY291bnQsIGJwKSkpCisJCWVycm9yID0geGxvZ19icmVhZChsb2csIGksIGJjb3VudCwgYnAsICZidWYpOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKIAotCQlidWYgPSB4bG9nX2FsaWduKGxvZywgaSwgYmNvdW50LCBicCk7CiAJCWZvciAoaiA9IDA7IGogPCBiY291bnQ7IGorKykgewogCQkJY3ljbGUgPSB4bG9nX2dldF9jeWNsZShidWYpOwogCQkJaWYgKGN5Y2xlID09IHN0b3Bfb25fY3ljbGVfbm8pIHsKQEAgLTQzNiw5ICs0NTQsOSBAQAogCQkJcmV0dXJuIEVOT01FTTsKIAkJc21hbGxtZW0gPSAxOwogCX0gZWxzZSB7Ci0JCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgc3RhcnRfYmxrLCBudW1fYmxrcywgYnApKSkKKwkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgc3RhcnRfYmxrLCBudW1fYmxrcywgYnAsICZvZmZzZXQpOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHN0YXJ0X2JsaywgbnVtX2Jsa3MsIGJwKTsKIAkJb2Zmc2V0ICs9ICgobnVtX2Jsa3MgLSAxKSA8PCBCQlNISUZUKTsKIAl9CiAKQEAgLTQ1Myw5ICs0NzEsOSBAQAogCQl9CiAKIAkJaWYgKHNtYWxsbWVtKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGksIDEsIGJwKSkpCisJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCwgJm9mZnNldCk7CisJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBvdXQ7Ci0JCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgaSwgMSwgYnApOwogCQl9CiAKIAkJaGVhZCA9ICh4bG9nX3JlY19oZWFkZXJfdCAqKW9mZnNldDsKQEAgLTU1OSwxNSArNTc3LDE4IEBACiAJYnAgPSB4bG9nX2dldF9icChsb2csIDEpOwogCWlmICghYnApCiAJCXJldHVybiBFTk9NRU07Ci0JaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCAwLCAxLCBicCkpKQorCisJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgMCwgMSwgYnAsICZvZmZzZXQpOworCWlmIChlcnJvcikKIAkJZ290byBicF9lcnI7Ci0Jb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIDAsIDEsIGJwKTsKKwogCWZpcnN0X2hhbGZfY3ljbGUgPSB4bG9nX2dldF9jeWNsZShvZmZzZXQpOwogCiAJbGFzdF9ibGsgPSBoZWFkX2JsayA9IGxvZ19iYm51bSAtIDE7CS8qIGdldCBjeWNsZSAjIG9mIGxhc3QgYmxvY2sgKi8KLQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGxhc3RfYmxrLCAxLCBicCkpKQorCWVycm9yID0geGxvZ19icmVhZChsb2csIGxhc3RfYmxrLCAxLCBicCwgJm9mZnNldCk7CisJaWYgKGVycm9yKQogCQlnb3RvIGJwX2VycjsKLQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgbGFzdF9ibGssIDEsIGJwKTsKKwogCWxhc3RfaGFsZl9jeWNsZSA9IHhsb2dfZ2V0X2N5Y2xlKG9mZnNldCk7CiAJQVNTRVJUKGxhc3RfaGFsZl9jeWNsZSAhPSAwKTsKIApAQCAtODE3LDkgKzgzOCwxMCBAQAogCWlmICghYnApCiAJCXJldHVybiBFTk9NRU07CiAJaWYgKCpoZWFkX2JsayA9PSAwKSB7CQkJCS8qIHNwZWNpYWwgY2FzZSAqLwotCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIDAsIDEsIGJwKSkpCisJCWVycm9yID0geGxvZ19icmVhZChsb2csIDAsIDEsIGJwLCAmb2Zmc2V0KTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBicmVhZF9lcnI7Ci0JCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCAwLCAxLCBicCk7CisKIAkJaWYgKHhsb2dfZ2V0X2N5Y2xlKG9mZnNldCkgPT0gMCkgewogCQkJKnRhaWxfYmxrID0gMDsKIAkJCS8qIGxlYXZlIGFsbCBvdGhlciBsb2cgaW5pdGVkIHZhbHVlcyBhbG9uZSAqLwpAQCAtODMyLDkgKzg1NCwxMCBAQAogCSAqLwogCUFTU0VSVCgqaGVhZF9ibGsgPCBJTlRfTUFYKTsKIAlmb3IgKGkgPSAoaW50KSgqaGVhZF9ibGspIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCkpKQorCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCwgJm9mZnNldCk7CisJCWlmIChlcnJvcikKIAkJCWdvdG8gYnJlYWRfZXJyOwotCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgaSwgMSwgYnApOworCiAJCWlmIChYTE9HX0hFQURFUl9NQUdJQ19OVU0gPT0gYmUzMl90b19jcHUoKihfX2JlMzIgKilvZmZzZXQpKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKQEAgLTg0OCw5ICs4NzEsMTAgQEAKIAkgKi8KIAlpZiAoIWZvdW5kKSB7CiAJCWZvciAoaSA9IGxvZy0+bF9sb2dCQnNpemUgLSAxOyBpID49IChpbnQpKCpoZWFkX2Jsayk7IGktLSkgewotCQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCkpKQorCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgaSwgMSwgYnAsICZvZmZzZXQpOworCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gYnJlYWRfZXJyOwotCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGksIDEsIGJwKTsKKwogCQkJaWYgKFhMT0dfSEVBREVSX01BR0lDX05VTSA9PQogCQkJICAgIGJlMzJfdG9fY3B1KCooX19iZTMyICopb2Zmc2V0KSkgewogCQkJCWZvdW5kID0gMjsKQEAgLTkyMiwxMCArOTQ2LDEwIEBACiAJaWYgKCpoZWFkX2JsayA9PSBhZnRlcl91bW91bnRfYmxrICYmCiAJICAgIGJlMzJfdG9fY3B1KHJoZWFkLT5oX251bV9sb2dvcHMpID09IDEpIHsKIAkJdW1vdW50X2RhdGFfYmxrID0gKGkgKyBoYmxrcykgJSBsb2ctPmxfbG9nQkJzaXplOwotCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIHVtb3VudF9kYXRhX2JsaywgMSwgYnApKSkgeworCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCB1bW91bnRfZGF0YV9ibGssIDEsIGJwLCAmb2Zmc2V0KTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBicmVhZF9lcnI7Ci0JCX0KLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHVtb3VudF9kYXRhX2JsaywgMSwgYnApOworCiAJCW9wX2hlYWQgPSAoeGxvZ19vcF9oZWFkZXJfdCAqKW9mZnNldDsKIAkJaWYgKG9wX2hlYWQtPm9oX2ZsYWdzICYgWExPR19VTk1PVU5UX1RSQU5TKSB7CiAJCQkvKgpAQCAtMTAxNyw5ICsxMDQxLDEwIEBACiAJYnAgPSB4bG9nX2dldF9icChsb2csIDEpOwogCWlmICghYnApCiAJCXJldHVybiBFTk9NRU07Ci0JaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCAwLCAxLCBicCkpKQorCWVycm9yID0geGxvZ19icmVhZChsb2csIDAsIDEsIGJwLCAmb2Zmc2V0KTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gYnBfZXJyOwotCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCAwLCAxLCBicCk7CisKIAlmaXJzdF9jeWNsZSA9IHhsb2dfZ2V0X2N5Y2xlKG9mZnNldCk7CiAJaWYgKGZpcnN0X2N5Y2xlID09IDApIHsJCS8qIGNvbXBsZXRlbHkgemVyb2VkIGxvZyAqLwogCQkqYmxrX25vID0gMDsKQEAgLTEwMjgsOSArMTA1MywxMCBAQAogCX0KIAogCS8qIGNoZWNrIHBhcnRpYWxseSB6ZXJvZWQgbG9nICovCi0JaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBsb2dfYmJudW0tMSwgMSwgYnApKSkKKwllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBsb2dfYmJudW0tMSwgMSwgYnAsICZvZmZzZXQpOworCWlmIChlcnJvcikKIAkJZ290byBicF9lcnI7Ci0Jb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGxvZ19iYm51bS0xLCAxLCBicCk7CisKIAlsYXN0X2N5Y2xlID0geGxvZ19nZXRfY3ljbGUob2Zmc2V0KTsKIAlpZiAobGFzdF9jeWNsZSAhPSAwKSB7CQkvKiBsb2cgY29tcGxldGVseSB3cml0dGVuIHRvICovCiAJCXhsb2dfcHV0X2JwKGJwKTsKQEAgLTExNTIsMTAgKzExNzgsMTAgQEAKIAkgKi8KIAliYWxpZ24gPSBYTE9HX1NFQ1RPUl9ST1VORERPV05fQkxLTk8obG9nLCBzdGFydF9ibG9jayk7CiAJaWYgKGJhbGlnbiAhPSBzdGFydF9ibG9jaykgewotCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIHN0YXJ0X2Jsb2NrLCAxLCBicCkpKSB7Ci0JCQl4bG9nX3B1dF9icChicCk7Ci0JCQlyZXR1cm4gZXJyb3I7Ci0JCX0KKwkJZXJyb3IgPSB4bG9nX2JyZWFkX25vYWxpZ24obG9nLCBzdGFydF9ibG9jaywgMSwgYnApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9wdXRfYnA7CisKIAkJaiA9IHN0YXJ0X2Jsb2NrIC0gYmFsaWduOwogCX0KIApAQCAtMTE3NSwxMCArMTIwMSwxNCBAQAogCQkJYmFsaWduID0gQkJUT0IoZWFsaWduIC0gc3RhcnRfYmxvY2spOwogCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoYnAsIG9mZnNldCArIGJhbGlnbiwKIAkJCQkJCUJCVE9CKHNlY3RiYikpOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBlYWxpZ24sIHNlY3RiYiwgYnApOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihicCwgb2Zmc2V0LCBidWZibGtzKTsKKwkJCWlmIChlcnJvcikKKwkJCQlicmVhazsKKworCQkJZXJyb3IgPSB4bG9nX2JyZWFkX25vYWxpZ24obG9nLCBlYWxpZ24sIHNlY3RiYiwgYnApOworCQkJaWYgKGVycm9yKQorCQkJCWJyZWFrOworCisJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihicCwgb2Zmc2V0LCBidWZibGtzKTsKIAkJCWlmIChlcnJvcikKIAkJCQlicmVhazsKIAkJfQpAQCAtMTE5NSw2ICsxMjI1LDggQEAKIAkJc3RhcnRfYmxvY2sgKz0gZW5kY291bnQ7CiAJCWogPSAwOwogCX0KKworIG91dF9wdXRfYnA6CiAJeGxvZ19wdXRfYnAoYnApOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI1MTEsMTYgKzI1NDMsMTAgQEAKIAl9CiAKIHdyaXRlX2lub2RlX2J1ZmZlcjoKLQlpZiAoSVRFTV9UWVBFKGl0ZW0pID09IFhGU19MSV9JTk9ERSkgewotCQlBU1NFUlQoYnAtPmJfbW91bnQgPT0gTlVMTCB8fCBicC0+Yl9tb3VudCA9PSBtcCk7Ci0JCWJwLT5iX21vdW50ID0gbXA7Ci0JCVhGU19CVUZfU0VUX0lPRE9ORV9GVU5DKGJwLCB4bG9nX3JlY292ZXJfaW9kb25lKTsKLQkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgewotCQlYRlNfQlVGX1NUQUxFKGJwKTsKLQkJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7Ci0JfQotCisJQVNTRVJUKGJwLT5iX21vdW50ID09IE5VTEwgfHwgYnAtPmJfbW91bnQgPT0gbXApOworCWJwLT5iX21vdW50ID0gbXA7CisJWEZTX0JVRl9TRVRfSU9ET05FX0ZVTkMoYnAsIHhsb2dfcmVjb3Zlcl9pb2RvbmUpOworCXhmc19iZHdyaXRlKG1wLCBicCk7CiBlcnJvcjoKIAlpZiAobmVlZF9mcmVlKQogCQlrbWVtX2ZyZWUoaW5fZik7CkBAIC0yNzY5LDUxICsyNzk1LDQ4IEBACiAJaW50CQkJZXJyb3IgPSAwOwogCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0sICpmaXJzdF9pdGVtOwogCi0JaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9yZW9yZGVyX3RyYW5zKHRyYW5zKSkpCisJZXJyb3IgPSB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucyh0cmFucyk7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CisKIAlmaXJzdF9pdGVtID0gaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwogCWRvIHsKLQkJLyoKLQkJICogd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgYmxvY2sgbnVtYmVyIGJlaW5nCi0JCSAqIHRydW5jYXRlZCBpbiA+IDEgVEIgYnVmZmVycyBiZWNhdXNlIGluIHVzZXItbGFuZCwKLQkJICogd2UncmUgbm93IG4zMiBvciA2NC1iaXQgc28geGZzX2RhZGRyX3QgaXMgNjQtYml0cyBzbwotCQkgKiB0aGUgYmxrbm9zIHdpbGwgZ2V0IHRocm91Z2ggdGhlIHVzZXItbW9kZSBidWZmZXIKLQkJICogY2FjaGUgcHJvcGVybHkuICBUaGUgb25seSBiYWQgY2FzZSBpcyBvMzIga2VybmVscwotCQkgKiB3aGVyZSB4ZnNfZGFkZHJfdCBpcyAzMi1iaXRzIGJ1dCBtb3VudCB3aWxsIHdhcm4gdXMKLQkJICogb2ZmIGEgPiAxIFRCIGZpbGVzeXN0ZW0gYmVmb3JlIHdlIGdldCBoZXJlLgotCQkgKi8KLQkJaWYgKChJVEVNX1RZUEUoaXRlbSkgPT0gWEZTX0xJX0JVRikpIHsKLQkJCWlmICAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl90cmFucyhsb2csIGl0ZW0sCi0JCQkJCQkJCSBwYXNzKSkpCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfSU5PREUpKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX2lub2RlX3RyYW5zKGxvZywgaXRlbSwKLQkJCQkJCQkJcGFzcykpKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfRUZJKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX2VmaV90cmFucyhsb2csIGl0ZW0sIHRyYW5zLT5yX2xzbiwKLQkJCQkJCSAgcGFzcykpKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfRUZEKSB7CisJCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW0pKSB7CisJCWNhc2UgWEZTX0xJX0JVRjoKKwkJCWVycm9yID0geGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl90cmFucyhsb2csIGl0ZW0sIHBhc3MpOworCQkJYnJlYWs7CisJCWNhc2UgWEZTX0xJX0lOT0RFOgorCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9faW5vZGVfdHJhbnMobG9nLCBpdGVtLCBwYXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFhGU19MSV9FRkk6CisJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19lZmlfdHJhbnMobG9nLCBpdGVtLAorCQkJCQkJCSAgdHJhbnMtPnJfbHNuLCBwYXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFhGU19MSV9FRkQ6CiAJCQl4bG9nX3JlY292ZXJfZG9fZWZkX3RyYW5zKGxvZywgaXRlbSwgcGFzcyk7Ci0JCX0gZWxzZSBpZiAoSVRFTV9UWVBFKGl0ZW0pID09IFhGU19MSV9EUVVPVCkgewotCQkJaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19kcXVvdF90cmFucyhsb2csIGl0ZW0sCi0JCQkJCQkJCSAgIHBhc3MpKSkKLQkJCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfUVVPVEFPRkYpKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX3F1b3Rhb2ZmX3RyYW5zKGxvZywgaXRlbSwKLQkJCQkJCQkJICAgcGFzcykpKQotCQkJCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCXhsb2dfd2FybigiWEZTOiB4bG9nX3JlY292ZXJfZG9fdHJhbnMiKTsKKwkJCWVycm9yID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFhGU19MSV9EUVVPVDoKKwkJCWVycm9yID0geGxvZ19yZWNvdmVyX2RvX2RxdW90X3RyYW5zKGxvZywgaXRlbSwgcGFzcyk7CisJCQlicmVhazsKKwkJY2FzZSBYRlNfTElfUVVPVEFPRkY6CisJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19xdW90YW9mZl90cmFucyhsb2csIGl0ZW0sCisJCQkJCQkJICAgICAgIHBhc3MpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl4bG9nX3dhcm4oCisJIlhGUzogaW52YWxpZCBpdGVtIHR5cGUgKCVkKSB4bG9nX3JlY292ZXJfZG9fdHJhbnMiLCBJVEVNX1RZUEUoaXRlbSkpOwogCQkJQVNTRVJUKDApOwogCQkJZXJyb3IgPSBYRlNfRVJST1IoRUlPKTsKIAkJCWJyZWFrOwogCQl9CisKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCQlpdGVtID0gaXRlbS0+cmlfbmV4dDsKIAl9IHdoaWxlIChmaXJzdF9pdGVtICE9IGl0ZW0pOwogCi0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzQ5MCw5ICszNTEzLDExIEBACiAJCWhicCA9IHhsb2dfZ2V0X2JwKGxvZywgMSk7CiAJCWlmICghaGJwKQogCQkJcmV0dXJuIEVOT01FTTsKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCB0YWlsX2JsaywgMSwgaGJwKSkpCisKKwkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgdGFpbF9ibGssIDEsIGhicCwgJm9mZnNldCk7CisJCWlmIChlcnJvcikKIAkJCWdvdG8gYnJlYWRfZXJyMTsKLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHRhaWxfYmxrLCAxLCBoYnApOworCiAJCXJoZWFkID0gKHhsb2dfcmVjX2hlYWRlcl90ICopb2Zmc2V0OwogCQllcnJvciA9IHhsb2dfdmFsaWRfcmVjX2hlYWRlcihsb2csIHJoZWFkLCB0YWlsX2Jsayk7CiAJCWlmIChlcnJvcikKQEAgLTM1MjYsOSArMzU1MSwxMCBAQAogCW1lbXNldChyaGFzaCwgMCwgc2l6ZW9mKHJoYXNoKSk7CiAJaWYgKHRhaWxfYmxrIDw9IGhlYWRfYmxrKSB7CiAJCWZvciAoYmxrX25vID0gdGFpbF9ibGs7IGJsa19ubyA8IGhlYWRfYmxrOyApIHsKLQkJCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKSkpCisJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8sIGhibGtzLCBoYnAsICZvZmZzZXQpOworCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gYnJlYWRfZXJyMjsKLQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBibGtfbm8sIGhibGtzLCBoYnApOworCiAJCQlyaGVhZCA9ICh4bG9nX3JlY19oZWFkZXJfdCAqKW9mZnNldDsKIAkJCWVycm9yID0geGxvZ192YWxpZF9yZWNfaGVhZGVyKGxvZywgcmhlYWQsIGJsa19ubyk7CiAJCQlpZiAoZXJyb3IpCkBAIC0zNTM2LDEwICszNTYyLDExIEBACiAKIAkJCS8qIGJsb2NrcyBpbiBkYXRhIHNlY3Rpb24gKi8KIAkJCWJibGtzID0gKGludClCVE9CQihiZTMyX3RvX2NwdShyaGVhZC0+aF9sZW4pKTsKLQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubyArIGhibGtzLCBiYmxrcywgZGJwKTsKKwkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubyArIGhibGtzLCBiYmxrcywgZGJwLAorCQkJCQkgICAmb2Zmc2V0KTsKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgYmxrX25vICsgaGJsa3MsIGJibGtzLCBkYnApOworCiAJCQl4bG9nX3VucGFja19kYXRhKHJoZWFkLCBvZmZzZXQsIGxvZyk7CiAJCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX3Byb2Nlc3NfZGF0YShsb2csCiAJCQkJCQlyaGFzaCwgcmhlYWQsIG9mZnNldCwgcGFzcykpKQpAQCAtMzU2MiwxMCArMzU4OSwxMCBAQAogCQkJd3JhcHBlZF9oYmxrcyA9IDA7CiAJCQlpZiAoYmxrX25vICsgaGJsa3MgPD0gbG9nLT5sX2xvZ0JCc2l6ZSkgewogCQkJCS8qIFJlYWQgaGVhZGVyIGluIG9uZSByZWFkICovCi0JCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKTsKKwkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8sIGhibGtzLCBoYnAsCisJCQkJCQkgICAmb2Zmc2V0KTsKIAkJCQlpZiAoZXJyb3IpCiAJCQkJCWdvdG8gYnJlYWRfZXJyMjsKLQkJCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogVGhpcyBMUiBpcyBzcGxpdCBhY3Jvc3MgcGh5c2ljYWwgbG9nIGVuZCAqLwogCQkJCWlmIChibGtfbm8gIT0gbG9nLT5sX2xvZ0JCc2l6ZSkgewpAQCAtMzU3MywxMiArMzYwMCwxMyBAQAogCQkJCQlBU1NFUlQoYmxrX25vIDw9IElOVF9NQVgpOwogCQkJCQlzcGxpdF9oYmxrcyA9IGxvZy0+bF9sb2dCQnNpemUgLSAoaW50KWJsa19ubzsKIAkJCQkJQVNTRVJUKHNwbGl0X2hibGtzID4gMCk7Ci0JCQkJCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLAotCQkJCQkJCXNwbGl0X2hibGtzLCBoYnApKSkKKwkJCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLAorCQkJCQkJCSAgIHNwbGl0X2hibGtzLCBoYnAsCisJCQkJCQkJICAgJm9mZnNldCk7CisJCQkJCWlmIChlcnJvcikKIAkJCQkJCWdvdG8gYnJlYWRfZXJyMjsKLQkJCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubywKLQkJCQkJCQlzcGxpdF9oYmxrcywgaGJwKTsKIAkJCQl9CisKIAkJCQkvKgogCQkJCSAqIE5vdGU6IHRoaXMgYmxhY2sgbWFnaWMgc3RpbGwgd29ya3Mgd2l0aAogCQkJCSAqIGxhcmdlIHNlY3RvciBzaXplcyAobm9uLTUxMikgb25seSBiZWNhdXNlOgpAQCAtMzU5NiwxNCArMzYyNCwxOSBAQAogCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGhicCwKIAkJCQkJCWJ1ZmFkZHIgKyBCQlRPQihzcGxpdF9oYmxrcyksCiAJCQkJCQlCQlRPQihoYmxrcyAtIHNwbGl0X2hibGtzKSk7Ci0JCQkJaWYgKCFlcnJvcikKLQkJCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgMCwKLQkJCQkJCQl3cmFwcGVkX2hibGtzLCBoYnApOwotCQkJCWlmICghZXJyb3IpCi0JCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGhicCwgYnVmYWRkciwKKwkJCQlpZiAoZXJyb3IpCisJCQkJCWdvdG8gYnJlYWRfZXJyMjsKKworCQkJCWVycm9yID0geGxvZ19icmVhZF9ub2FsaWduKGxvZywgMCwKKwkJCQkJCQkgICB3cmFwcGVkX2hibGtzLCBoYnApOworCQkJCWlmIChlcnJvcikKKwkJCQkJZ290byBicmVhZF9lcnIyOworCisJCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoaGJwLCBidWZhZGRyLAogCQkJCQkJCUJCVE9CKGhibGtzKSk7CiAJCQkJaWYgKGVycm9yKQogCQkJCQlnb3RvIGJyZWFkX2VycjI7CisKIAkJCQlpZiAoIW9mZnNldCkKIAkJCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIDAsCiAJCQkJCQkJd3JhcHBlZF9oYmxrcywgaGJwKTsKQEAgLTM2MTksMTAgKzM2NTIsMTAgQEAKIAogCQkJLyogUmVhZCBpbiBkYXRhIGZvciBsb2cgcmVjb3JkICovCiAJCQlpZiAoYmxrX25vICsgYmJsa3MgPD0gbG9nLT5sX2xvZ0JCc2l6ZSkgewotCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywgYmJsa3MsIGRicCk7CisJCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBiYmxrcywgZGJwLAorCQkJCQkJICAgJm9mZnNldCk7CiAJCQkJaWYgKGVycm9yKQogCQkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubywgYmJsa3MsIGRicCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIFRoaXMgbG9nIHJlY29yZCBpcyBzcGxpdCBhY3Jvc3MgdGhlCiAJCQkJICogcGh5c2ljYWwgZW5kIG9mIGxvZyAqLwpAQCAtMzYzNiwxMiArMzY2OSwxMyBAQAogCQkJCQlzcGxpdF9iYmxrcyA9CiAJCQkJCQlsb2ctPmxfbG9nQkJzaXplIC0gKGludClibGtfbm87CiAJCQkJCUFTU0VSVChzcGxpdF9iYmxrcyA+IDApOwotCQkJCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywKLQkJCQkJCQlzcGxpdF9iYmxrcywgZGJwKSkpCisJCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywKKwkJCQkJCQlzcGxpdF9iYmxrcywgZGJwLAorCQkJCQkJCSZvZmZzZXQpOworCQkJCQlpZiAoZXJyb3IpCiAJCQkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBibGtfbm8sCi0JCQkJCQkJc3BsaXRfYmJsa3MsIGRicCk7CiAJCQkJfQorCiAJCQkJLyoKIAkJCQkgKiBOb3RlOiB0aGlzIGJsYWNrIG1hZ2ljIHN0aWxsIHdvcmtzIHdpdGgKIAkJCQkgKiBsYXJnZSBzZWN0b3Igc2l6ZXMgKG5vbi01MTIpIG9ubHkgYmVjYXVzZToKQEAgLTM2NTgsMTUgKzM2OTIsMTkgQEAKIAkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihkYnAsCiAJCQkJCQlidWZhZGRyICsgQkJUT0Ioc3BsaXRfYmJsa3MpLAogCQkJCQkJQkJUT0IoYmJsa3MgLSBzcGxpdF9iYmxrcykpOwotCQkJCWlmICghZXJyb3IpCi0JCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIHdyYXBwZWRfaGJsa3MsCi0JCQkJCQkJYmJsa3MgLSBzcGxpdF9iYmxrcywKLQkJCQkJCQlkYnApOwotCQkJCWlmICghZXJyb3IpCi0JCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGRicCwgYnVmYWRkciwKLQkJCQkJCQloX3NpemUpOwogCQkJCWlmIChlcnJvcikKIAkJCQkJZ290byBicmVhZF9lcnIyOworCisJCQkJZXJyb3IgPSB4bG9nX2JyZWFkX25vYWxpZ24obG9nLCB3cmFwcGVkX2hibGtzLAorCQkJCQkJYmJsa3MgLSBzcGxpdF9iYmxrcywKKwkJCQkJCWRicCk7CisJCQkJaWYgKGVycm9yKQorCQkJCQlnb3RvIGJyZWFkX2VycjI7CisKKwkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihkYnAsIGJ1ZmFkZHIsIGhfc2l6ZSk7CisJCQkJaWYgKGVycm9yKQorCQkJCQlnb3RvIGJyZWFkX2VycjI7CisKIAkJCQlpZiAoIW9mZnNldCkKIAkJCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHdyYXBwZWRfaGJsa3MsCiAJCQkJCQliYmxrcyAtIHNwbGl0X2JibGtzLCBkYnApOwpAQCAtMzY4MywxNyArMzcyMSwyMSBAQAogCiAJCS8qIHJlYWQgZmlyc3QgcGFydCBvZiBwaHlzaWNhbCBsb2cgKi8KIAkJd2hpbGUgKGJsa19ubyA8IGhlYWRfYmxrKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywgaGJsa3MsIGhicCkpKQorCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBoYmxrcywgaGJwLCAmb2Zmc2V0KTsKKwkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKTsKKwogCQkJcmhlYWQgPSAoeGxvZ19yZWNfaGVhZGVyX3QgKilvZmZzZXQ7CiAJCQllcnJvciA9IHhsb2dfdmFsaWRfcmVjX2hlYWRlcihsb2csIHJoZWFkLCBibGtfbm8pOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gYnJlYWRfZXJyMjsKKwogCQkJYmJsa3MgPSAoaW50KUJUT0JCKGJlMzJfdG9fY3B1KHJoZWFkLT5oX2xlbikpOwotCQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8raGJsa3MsIGJibGtzLCBkYnApKSkKKwkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubytoYmxrcywgYmJsa3MsIGRicCwKKwkJCQkJICAgJm9mZnNldCk7CisJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBicmVhZF9lcnIyOwotCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubytoYmxrcywgYmJsa3MsIGRicCk7CisKIAkJCXhsb2dfdW5wYWNrX2RhdGEocmhlYWQsIG9mZnNldCwgbG9nKTsKIAkJCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfcHJvY2Vzc19kYXRhKGxvZywgcmhhc2gsCiAJCQkJCQkJcmhlYWQsIG9mZnNldCwgcGFzcykpKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDM1MzAwMjUuLmIxMDE5OTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJ4ZnNfZnNvcHMuaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKIAotU1RBVElDIGludAl4ZnNfdXVpZF9tb3VudCh4ZnNfbW91bnRfdCAqKTsKIFNUQVRJQyB2b2lkCXhmc191bm1vdW50ZnNfd2FpdCh4ZnNfbW91bnRfdCAqKTsKIAogCkBAIC0xMjEsNiArMTIwLDg0IEBACiAgICAgeyBzaXplb2YoeGZzX3NiX3QpLAkJCSAwIH0KIH07CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoeGZzX3V1aWRfdGFibGVfbXV0ZXgpOworc3RhdGljIGludCB4ZnNfdXVpZF90YWJsZV9zaXplOworc3RhdGljIHV1aWRfdCAqeGZzX3V1aWRfdGFibGU7CisKKy8qCisgKiBTZWUgaWYgdGhlIFVVSUQgaXMgdW5pcXVlIGFtb25nIG1vdW50ZWQgWEZTIGZpbGVzeXN0ZW1zLgorICogTW91bnQgZmFpbHMgaWYgVVVJRCBpcyBuaWwgb3IgYSBGUyB3aXRoIHRoZSBzYW1lIFVVSUQgaXMgYWxyZWFkeSBtb3VudGVkLgorICovCitTVEFUSUMgaW50Cit4ZnNfdXVpZF9tb3VudCgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCkKK3sKKwl1dWlkX3QJCQkqdXVpZCA9ICZtcC0+bV9zYi5zYl91dWlkOworCWludAkJCWhvbGUsIGk7CisKKwlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9VVUlEKQorCQlyZXR1cm4gMDsKKworCWlmICh1dWlkX2lzX25pbCh1dWlkKSkgeworCQljbW5fZXJyKENFX1dBUk4sCisJCQkiWEZTOiBGaWxlc3lzdGVtICVzIGhhcyBuaWwgVVVJRCAtIGNhbid0IG1vdW50IiwKKwkJCW1wLT5tX2ZzbmFtZSk7CisJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKKwl9CisKKwltdXRleF9sb2NrKCZ4ZnNfdXVpZF90YWJsZV9tdXRleCk7CisJZm9yIChpID0gMCwgaG9sZSA9IC0xOyBpIDwgeGZzX3V1aWRfdGFibGVfc2l6ZTsgaSsrKSB7CisJCWlmICh1dWlkX2lzX25pbCgmeGZzX3V1aWRfdGFibGVbaV0pKSB7CisJCQlob2xlID0gaTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh1dWlkX2VxdWFsKHV1aWQsICZ4ZnNfdXVpZF90YWJsZVtpXSkpCisJCQlnb3RvIG91dF9kdXBsaWNhdGU7CisJfQorCisJaWYgKGhvbGUgPCAwKSB7CisJCXhmc191dWlkX3RhYmxlID0ga21lbV9yZWFsbG9jKHhmc191dWlkX3RhYmxlLAorCQkJKHhmc191dWlkX3RhYmxlX3NpemUgKyAxKSAqIHNpemVvZigqeGZzX3V1aWRfdGFibGUpLAorCQkJeGZzX3V1aWRfdGFibGVfc2l6ZSAgKiBzaXplb2YoKnhmc191dWlkX3RhYmxlKSwKKwkJCUtNX1NMRUVQKTsKKwkJaG9sZSA9IHhmc191dWlkX3RhYmxlX3NpemUrKzsKKwl9CisJeGZzX3V1aWRfdGFibGVbaG9sZV0gPSAqdXVpZDsKKwltdXRleF91bmxvY2soJnhmc191dWlkX3RhYmxlX211dGV4KTsKKworCXJldHVybiAwOworCisgb3V0X2R1cGxpY2F0ZToKKwltdXRleF91bmxvY2soJnhmc191dWlkX3RhYmxlX211dGV4KTsKKwljbW5fZXJyKENFX1dBUk4sICJYRlM6IEZpbGVzeXN0ZW0gJXMgaGFzIGR1cGxpY2F0ZSBVVUlEIC0gY2FuJ3QgbW91bnQiLAorCQkJIG1wLT5tX2ZzbmFtZSk7CisJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOworfQorCitTVEFUSUMgdm9pZAoreGZzX3V1aWRfdW5tb3VudCgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCkKK3sKKwl1dWlkX3QJCQkqdXVpZCA9ICZtcC0+bV9zYi5zYl91dWlkOworCWludAkJCWk7CisKKwlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9VVUlEKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZ4ZnNfdXVpZF90YWJsZV9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IHhmc191dWlkX3RhYmxlX3NpemU7IGkrKykgeworCQlpZiAodXVpZF9pc19uaWwoJnhmc191dWlkX3RhYmxlW2ldKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXV1aWRfZXF1YWwodXVpZCwgJnhmc191dWlkX3RhYmxlW2ldKSkKKwkJCWNvbnRpbnVlOworCQltZW1zZXQoJnhmc191dWlkX3RhYmxlW2ldLCAwLCBzaXplb2YodXVpZF90KSk7CisJCWJyZWFrOworCX0KKwlBU1NFUlQoaSA8IHhmc191dWlkX3RhYmxlX3NpemUpOworCW11dGV4X3VubG9jaygmeGZzX3V1aWRfdGFibGVfbXV0ZXgpOworfQorCisKIC8qCiAgKiBGcmVlIHVwIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbW91bnQgc3RydWN0dXJlLiAgQXNzdW1lIHRoYXQKICAqIHRoZSBzdHJ1Y3R1cmUgd2FzIGluaXRpYWxseSB6ZXJvZWQsIHNvIHdlIGNhbiB0ZWxsIHdoaWNoIGZpZWxkcyBnb3QKQEAgLTI1Niw2ICszMzMsMjIgQEAKIAkJcmV0dXJuIFhGU19FUlJPUihFTk9TWVMpOwogCX0KIAorCS8qCisJICogQ3VycmVudGx5IG9ubHkgdmVyeSBmZXcgaW5vZGUgc2l6ZXMgYXJlIHN1cHBvcnRlZC4KKwkgKi8KKwlzd2l0Y2ggKHNicC0+c2JfaW5vZGVzaXplKSB7CisJY2FzZSAyNTY6CisJY2FzZSA1MTI6CisJY2FzZSAxMDI0OgorCWNhc2UgMjA0ODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiaW5vZGUgc2l6ZSBvZiAlZCBieXRlcyBub3Qgc3VwcG9ydGVkIiwKKwkJCXNicC0+c2JfaW5vZGVzaXplKTsKKwkJcmV0dXJuIFhGU19FUlJPUihFTk9TWVMpOworCX0KKwogCWlmICh4ZnNfc2JfdmFsaWRhdGVfZnNiX2NvdW50KHNicCwgc2JwLT5zYl9kYmxvY2tzKSB8fAogCSAgICB4ZnNfc2JfdmFsaWRhdGVfZnNiX2NvdW50KHNicCwgc2JwLT5zYl9yYmxvY2tzKSkgewogCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKQEAgLTU3NCwzMiArNjY3LDEwIEBACiAJbXAtPm1fc2VjdGJiX2xvZyA9IHNicC0+c2Jfc2VjdGxvZyAtIEJCU0hJRlQ7CiAJbXAtPm1fYWdub19sb2cgPSB4ZnNfaGlnaGJpdDMyKHNicC0+c2JfYWdjb3VudCAtIDEpICsgMTsKIAltcC0+bV9hZ2lub19sb2cgPSBzYnAtPnNiX2lub3BibG9nICsgc2JwLT5zYl9hZ2Jsa2xvZzsKLQltcC0+bV9saXRpbm8gPSBzYnAtPnNiX2lub2Rlc2l6ZSAtIHNpemVvZihzdHJ1Y3QgeGZzX2Rpbm9kZSk7CiAJbXAtPm1fYmxvY2ttYXNrID0gc2JwLT5zYl9ibG9ja3NpemUgLSAxOwogCW1wLT5tX2Jsb2Nrd3NpemUgPSBzYnAtPnNiX2Jsb2Nrc2l6ZSA+PiBYRlNfV09SRExPRzsKIAltcC0+bV9ibG9ja3dtYXNrID0gbXAtPm1fYmxvY2t3c2l6ZSAtIDE7CiAKLQkvKgotCSAqIFNldHVwIGZvciBhdHRyaWJ1dGVzLCBpbiBjYXNlIHRoZXkgZ2V0IGNyZWF0ZWQuCi0JICogVGhpcyB2YWx1ZSBpcyBmb3IgaW5vZGVzIGdldHRpbmcgYXR0cmlidXRlcyBmb3IgdGhlIGZpcnN0IHRpbWUsCi0JICogdGhlIHBlci1pbm9kZSB2YWx1ZSBpcyBmb3Igb2xkIGF0dHJpYnV0ZSB2YWx1ZXMuCi0JICovCi0JQVNTRVJUKHNicC0+c2JfaW5vZGVzaXplID49IDI1NiAmJiBzYnAtPnNiX2lub2Rlc2l6ZSA8PSAyMDQ4KTsKLQlzd2l0Y2ggKHNicC0+c2JfaW5vZGVzaXplKSB7Ci0JY2FzZSAyNTY6Ci0JCW1wLT5tX2F0dHJvZmZzZXQgPSBYRlNfTElUSU5PKG1wKSAtCi0JCQkJICAgWEZTX0JNRFJfU1BBQ0VfQ0FMQyhNSU5BQlRQVFJTKTsKLQkJYnJlYWs7Ci0JY2FzZSA1MTI6Ci0JY2FzZSAxMDI0OgotCWNhc2UgMjA0ODoKLQkJbXAtPm1fYXR0cm9mZnNldCA9IFhGU19CTURSX1NQQUNFX0NBTEMoNiAqIE1JTkFCVFBUUlMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JfQotCUFTU0VSVChtcC0+bV9hdHRyb2Zmc2V0IDwgWEZTX0xJVElOTyhtcCkpOwotCiAJbXAtPm1fYWxsb2NfbXhyWzBdID0geGZzX2FsbG9jYnRfbWF4cmVjcyhtcCwgc2JwLT5zYl9ibG9ja3NpemUsIDEpOwogCW1wLT5tX2FsbG9jX214clsxXSA9IHhmc19hbGxvY2J0X21heHJlY3MobXAsIHNicC0+c2JfYmxvY2tzaXplLCAwKTsKIAltcC0+bV9hbGxvY19tbnJbMF0gPSBtcC0+bV9hbGxvY19teHJbMF0gLyAyOwpAQCAtNjQ1LDcgKzcxNiw3IEBACiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYWdjb3VudDsgaW5kZXgrKykgewogCQkvKgogCQkgKiByZWFkIHRoZSBhZ2YsIHRoZW4gdGhlIGFnaS4gVGhpcyBnZXRzIHVzCi0JCSAqIGFsbCB0aGUgaW5mb3JhbXRpb24gd2UgbmVlZCBhbmQgcG9wdWxhdGVzIHRoZQorCQkgKiBhbGwgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgYW5kIHBvcHVsYXRlcyB0aGUKIAkJICogcGVyLWFnIHN0cnVjdHVyZXMgZm9yIHVzLgogCQkgKi8KIAkJZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBOVUxMLCBpbmRleCwgMCk7CkBAIC04ODYsOCArOTU3LDYgQEAKIH0KIAogLyoKLSAqIHhmc19tb3VudGZzCi0gKgogICogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmcgb24gYW4gaW5pdGlhbCBtb3VudCBvZiBhIGZpbGUgc3lzdGVtOgogICoJLSByZWFkcyB0aGUgc3VwZXJibG9jayBmcm9tIGRpc2sgYW5kIGluaXQgdGhlIG1vdW50IHN0cnVjdAogICoJLSBpZiB3ZSdyZSBhIDMyLWJpdCBrZXJuZWwsIGRvIGEgc2l6ZSBjaGVjayBvbiB0aGUgc3VwZXJibG9jawpAQCAtOTA1LDcgKzk3NCw2IEBACiAJeGZzX2lub2RlX3QJKnJpcDsKIAlfX3VpbnQ2NF90CXJlc2Jsa3M7CiAJdWludAkJcXVvdGFtb3VudCwgcXVvdGFmbGFnczsKLQlpbnQJCXV1aWRfbW91bnRlZCA9IDA7CiAJaW50CQllcnJvciA9IDA7CiAKIAl4ZnNfbW91bnRfY29tbW9uKG1wLCBzYnApOwpAQCAtOTYwLDcgKzEwMjgsNyBAQAogCSAqLwogCWVycm9yID0geGZzX3VwZGF0ZV9hbGlnbm1lbnQobXApOwogCWlmIChlcnJvcikKLQkJZ290byBlcnJvcjE7CisJCWdvdG8gb3V0OwogCiAJeGZzX2FsbG9jX2NvbXB1dGVfbWF4bGV2ZWxzKG1wKTsKIAl4ZnNfYm1hcF9jb21wdXRlX21heGxldmVscyhtcCwgWEZTX0RBVEFfRk9SSyk7CkBAIC05NzEsMTkgKzEwMzksOSBAQAogCiAJbXAtPm1fbWF4aW9mZnNldCA9IHhmc19tYXhfZmlsZV9vZmZzZXQoc2JwLT5zYl9ibG9ja2xvZyk7CiAKLQkvKgotCSAqIFhGUyB1c2VzIHRoZSB1dWlkIGZyb20gdGhlIHN1cGVyYmxvY2sgYXMgdGhlIHVuaXF1ZQotCSAqIGlkZW50aWZpZXIgZm9yIGZzaWQuICBXZSBjYW4gbm90IHVzZSB0aGUgdXVpZCBmcm9tIHRoZSB2b2x1bWUKLQkgKiBzaW5jZSBhIHNpbmdsZSBwYXJ0aXRpb24gZmlsZXN5c3RlbSBpcyBpZGVudGljYWwgdG8gYSBzaW5nbGUKLQkgKiBwYXJ0aXRpb24gdm9sdW1lL2ZpbGVzeXN0ZW0uCi0JICovCi0JaWYgKChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9OT1VVSUQpID09IDApIHsKLQkJaWYgKHhmc191dWlkX21vdW50KG1wKSkgewotCQkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJCWdvdG8gZXJyb3IxOwotCQl9Ci0JCXV1aWRfbW91bnRlZD0xOwotCX0KKwllcnJvciA9IHhmc191dWlkX21vdW50KG1wKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBTZXQgdGhlIG1pbmltdW0gcmVhZCBhbmQgd3JpdGUgc2l6ZXMKQEAgLTEwMDcsNyArMTA2NSw3IEBACiAJICovCiAJZXJyb3IgPSB4ZnNfY2hlY2tfc2l6ZXMobXApOwogCWlmIChlcnJvcikKLQkJZ290byBlcnJvcjE7CisJCWdvdG8gb3V0X3JlbW92ZV91dWlkOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlYWx0aW1lIGZpZWxkcyBpbiB0aGUgbW91bnQgc3RydWN0dXJlCkBAIC0xMDE1LDcgKzEwNzMsNyBAQAogCWVycm9yID0geGZzX3J0bW91bnRfaW5pdChtcCk7CiAJaWYgKGVycm9yKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogUlQgbW91bnQgZmFpbGVkIik7Ci0JCWdvdG8gZXJyb3IxOworCQlnb3RvIG91dF9yZW1vdmVfdXVpZDsKIAl9CiAKIAkvKgpAQCAtMTA0NSwyNiArMTEwMywyNiBAQAogCW1wLT5tX3BlcmFnID0ga21lbV96YWxsb2Moc2JwLT5zYl9hZ2NvdW50ICogc2l6ZW9mKHhmc19wZXJhZ190KSwKIAkJCQkgIEtNX01BWUZBSUwpOwogCWlmICghbXAtPm1fcGVyYWcpCi0JCWdvdG8gZXJyb3IxOworCQlnb3RvIG91dF9yZW1vdmVfdXVpZDsKIAogCW1wLT5tX21heGFnaSA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBzYnAtPnNiX2FnY291bnQpOwogCisJaWYgKCFzYnAtPnNiX2xvZ2Jsb2NrcykgeworCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IG5vIGxvZyBkZWZpbmVkIik7CisJCVhGU19FUlJPUl9SRVBPUlQoInhmc19tb3VudGZzIiwgWEZTX0VSUkxFVkVMX0xPVywgbXApOworCQllcnJvciA9IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOworCQlnb3RvIG91dF9mcmVlX3BlcmFnOworCX0KKwogCS8qCiAJICogbG9nJ3MgbW91bnQtdGltZSBpbml0aWFsaXphdGlvbi4gUGVyZm9ybSAxc3QgcGFydCByZWNvdmVyeSBpZiBuZWVkZWQKIAkgKi8KLQlpZiAobGlrZWx5KHNicC0+c2JfbG9nYmxvY2tzID4gMCkpIHsJLyogY2hlY2sgZm9yIHZvbHVtZSBjYXNlICovCi0JCWVycm9yID0geGZzX2xvZ19tb3VudChtcCwgbXAtPm1fbG9nZGV2X3RhcmdwLAotCQkJCSAgICAgIFhGU19GU0JfVE9fREFERFIobXAsIHNicC0+c2JfbG9nc3RhcnQpLAotCQkJCSAgICAgIFhGU19GU0JfVE9fQkIobXAsIHNicC0+c2JfbG9nYmxvY2tzKSk7Ci0JCWlmIChlcnJvcikgewotCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBsb2cgbW91bnQgZmFpbGVkIik7Ci0JCQlnb3RvIGVycm9yMjsKLQkJfQotCX0gZWxzZSB7CS8qIE5vIGxvZyBoYXMgYmVlbiBkZWZpbmVkICovCi0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbm8gbG9nIGRlZmluZWQiKTsKLQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX21vdW50ZnNfaW50KDEpIiwgWEZTX0VSUkxFVkVMX0xPVywgbXApOwotCQllcnJvciA9IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwotCQlnb3RvIGVycm9yMjsKKwllcnJvciA9IHhmc19sb2dfbW91bnQobXAsIG1wLT5tX2xvZ2Rldl90YXJncCwKKwkJCSAgICAgIFhGU19GU0JfVE9fREFERFIobXAsIHNicC0+c2JfbG9nc3RhcnQpLAorCQkJICAgICAgWEZTX0ZTQl9UT19CQihtcCwgc2JwLT5zYl9sb2dibG9ja3MpKTsKKwlpZiAoZXJyb3IpIHsKKwkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBsb2cgbW91bnQgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWVfcGVyYWc7CiAJfQogCiAJLyoKQEAgLTEwODYsMTUgKzExNDQsMTQgQEAKIAkgKiBJZiB3ZSBhcmUgY3VycmVudGx5IG1ha2luZyB0aGUgZmlsZXN5c3RlbSwgdGhlIGluaXRpYWxpc2F0aW9uIHdpbGwKIAkgKiBmYWlsIGFzIHRoZSBwZXJhZyBkYXRhIGlzIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KIAkgKi8KLQogCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNsYXp5c2Jjb3VudCgmbXAtPm1fc2IpICYmCiAJICAgICFYRlNfTEFTVF9VTk1PVU5UX1dBU19DTEVBTihtcCkgJiYKIAkgICAgICFtcC0+bV9zYi5zYl9pbnByb2dyZXNzKSB7CiAJCWVycm9yID0geGZzX2luaXRpYWxpemVfcGVyYWdfZGF0YShtcCwgc2JwLT5zYl9hZ2NvdW50KTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlnb3RvIGVycm9yMjsKLQkJfQorCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9mcmVlX3BlcmFnOwogCX0KKwogCS8qCiAJICogR2V0IGFuZCBzYW5pdHktY2hlY2sgdGhlIHJvb3QgaW5vZGUuCiAJICogU2F2ZSB0aGUgcG9pbnRlciB0byBpdCBpbiB0aGUgbW91bnQgc3RydWN0dXJlLgpAQCAtMTEwMiw3ICsxMTU5LDcgQEAKIAllcnJvciA9IHhmc19pZ2V0KG1wLCBOVUxMLCBzYnAtPnNiX3Jvb3Rpbm8sIDAsIFhGU19JTE9DS19FWENMLCAmcmlwLCAwKTsKIAlpZiAoZXJyb3IpIHsKIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBmYWlsZWQgdG8gcmVhZCByb290IGlub2RlIik7Ci0JCWdvdG8gZXJyb3IzOworCQlnb3RvIG91dF9sb2dfZGVhbGxvYzsKIAl9CiAKIAlBU1NFUlQocmlwICE9IE5VTEwpOwpAQCAtMTExNiw3ICsxMTczLDcgQEAKIAkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX21vdW50ZnNfaW50KDIpIiwgWEZTX0VSUkxFVkVMX0xPVywKIAkJCQkgbXApOwogCQllcnJvciA9IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwotCQlnb3RvIGVycm9yNDsKKwkJZ290byBvdXRfcmVsZV9yaXA7CiAJfQogCW1wLT5tX3Jvb3RpcCA9IHJpcDsJLyogc2F2ZSBpdCAqLwogCkBAIC0xMTMxLDcgKzExODgsNyBAQAogCQkgKiBGcmVlIHVwIHRoZSByb290IGlub2RlLgogCQkgKi8KIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBmYWlsZWQgdG8gcmVhZCBSVCBpbm9kZXMiKTsKLQkJZ290byBlcnJvcjQ7CisJCWdvdG8gb3V0X3JlbGVfcmlwOwogCX0KIAogCS8qCkBAIC0xMTQzLDcgKzEyMDAsNyBAQAogCQllcnJvciA9IHhmc19tb3VudF9sb2dfc2IobXAsIG1wLT5tX3VwZGF0ZV9mbGFncyk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBmYWlsZWQgdG8gd3JpdGUgc2IgY2hhbmdlcyIpOwotCQkJZ290byBlcnJvcjQ7CisJCQlnb3RvIG91dF9ydHVubW91bnQ7CiAJCX0KIAl9CiAKQEAgLTExNTIsNyArMTIwOSw3IEBACiAJICovCiAJZXJyb3IgPSBYRlNfUU1fSU5JVChtcCwgJnF1b3RhbW91bnQsICZxdW90YWZsYWdzKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3I0OworCQlnb3RvIG91dF9ydHVubW91bnQ7CiAKIAkvKgogCSAqIEZpbmlzaCByZWNvdmVyaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgcGFydCBuZWVkZWQgdG8gYmUKQEAgLTExNjIsNyArMTIxOSw3IEBACiAJZXJyb3IgPSB4ZnNfbG9nX21vdW50X2ZpbmlzaChtcCk7CiAJaWYgKGVycm9yKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbG9nIG1vdW50IGZpbmlzaCBmYWlsZWQiKTsKLQkJZ290byBlcnJvcjQ7CisJCWdvdG8gb3V0X3J0dW5tb3VudDsKIAl9CiAKIAkvKgpAQCAtMTE3MCw3ICsxMjI3LDcgQEAKIAkgKi8KIAllcnJvciA9IFhGU19RTV9NT1VOVChtcCwgcXVvdGFtb3VudCwgcXVvdGFmbGFncyk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVycm9yNDsKKwkJZ290byBvdXRfcnR1bm1vdW50OwogCiAJLyoKIAkgKiBOb3cgd2UgYXJlIG1vdW50ZWQsIHJlc2VydmUgYSBzbWFsbCBhbW91bnQgb2YgdW51c2VkIHNwYWNlIGZvcgpAQCAtMTE5NCwxOCArMTI1MSwxNyBAQAogCiAJcmV0dXJuIDA7CiAKLSBlcnJvcjQ6Ci0JLyoKLQkgKiBGcmVlIHVwIHRoZSByb290IGlub2RlLgotCSAqLworIG91dF9ydHVubW91bnQ6CisJeGZzX3J0dW5tb3VudF9pbm9kZXMobXApOworIG91dF9yZWxlX3JpcDoKIAlJUkVMRShyaXApOwotIGVycm9yMzoKLQl4ZnNfbG9nX3VubW91bnRfZGVhbGxvYyhtcCk7Ci0gZXJyb3IyOgorIG91dF9sb2dfZGVhbGxvYzoKKwl4ZnNfbG9nX3VubW91bnQobXApOworIG91dF9mcmVlX3BlcmFnOgogCXhmc19mcmVlX3BlcmFnKG1wKTsKLSBlcnJvcjE6Ci0JaWYgKHV1aWRfbW91bnRlZCkKLQkJdXVpZF90YWJsZV9yZW1vdmUoJm1wLT5tX3NiLnNiX3V1aWQpOworIG91dF9yZW1vdmVfdXVpZDoKKwl4ZnNfdXVpZF91bm1vdW50KG1wKTsKKyBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMjI2LDE1ICsxMjgyLDEyIEBACiAJICovCiAJWEZTX1FNX1VOTU9VTlQobXApOwogCi0JaWYgKG1wLT5tX3JibWlwKQotCQlJUkVMRShtcC0+bV9yYm1pcCk7Ci0JaWYgKG1wLT5tX3JzdW1pcCkKLQkJSVJFTEUobXAtPm1fcnN1bWlwKTsKKwl4ZnNfcnR1bm1vdW50X2lub2RlcyhtcCk7CiAJSVJFTEUobXAtPm1fcm9vdGlwKTsKIAogCS8qCiAJICogV2UgY2FuIHBvdGVudGlhbGx5IGRlYWRsb2NrIGhlcmUgaWYgd2UgaGF2ZSBhbiBpbm9kZSBjbHVzdGVyCi0JICogdGhhdCBoYXMgYmVlbiBmcmVlZCBoYXMgaXQncyBidWZmZXIgc3RpbGwgcGlubmVkIGluIG1lbW9yeSBiZWNhdXNlCisJICogdGhhdCBoYXMgYmVlbiBmcmVlZCBoYXMgaXRzIGJ1ZmZlciBzdGlsbCBwaW5uZWQgaW4gbWVtb3J5IGJlY2F1c2UKIAkgKiB0aGUgdHJhbnNhY3Rpb24gaXMgc3RpbGwgc2l0dGluZyBpbiBhIGljbG9nLiBUaGUgc3RhbGUgaW5vZGVzCiAJICogb24gdGhhdCBidWZmZXIgd2lsbCBoYXZlIHRoZWlyIGZsdXNoIGxvY2tzIGhlbGQgdW50aWwgdGhlCiAJICogdHJhbnNhY3Rpb24gaGl0cyB0aGUgZGlzayBhbmQgdGhlIGNhbGxiYWNrcyBydW4uIHRoZSBpbm9kZQpAQCAtMTI2Niw3ICsxMzE5LDcgQEAKIAkgKiBVbnJlc2VydmUgYW55IGJsb2NrcyB3ZSBoYXZlIHNvIHRoYXQgd2hlbiB3ZSB1bm1vdW50IHdlIGRvbid0IGFjY291bnQKIAkgKiB0aGUgcmVzZXJ2ZWQgZnJlZSBzcGFjZSBhcyB1c2VkLiBUaGlzIGlzIHJlYWxseSBvbmx5IG5lY2Vzc2FyeSBmb3IKIAkgKiBsYXp5IHN1cGVyYmxvY2sgY291bnRpbmcgYmVjYXVzZSBpdCB0cnVzdHMgdGhlIGluY29yZSBzdXBlcmJsb2NrCi0JICogY291bnRlcnMgdG8gYmUgYWJvc2x1dGVseSBjb3JyZWN0IG9uIGNsZWFuIHVubW91bnQuCisJICogY291bnRlcnMgdG8gYmUgYWJzb2x1dGVseSBjb3JyZWN0IG9uIGNsZWFuIHVubW91bnQuCiAJICoKIAkgKiBXZSBkb24ndCBib3RoZXIgY29ycmVjdGluZyB0aGlzIGVsc2V3aGVyZSBmb3IgbGF6eSBzdXBlcmJsb2NrCiAJICogY291bnRpbmcgYmVjYXVzZSBvbiBtb3VudCBvZiBhbiB1bmNsZWFuIGZpbGVzeXN0ZW0gd2UgcmVjb25zdHJ1Y3QgdGhlCkBAIC0xMjg4LDEwICsxMzQxLDkgQEAKIAkJCQkiRnJlZXNwYWNlIG1heSBub3QgYmUgY29ycmVjdCBvbiBuZXh0IG1vdW50LiIpOwogCXhmc191bm1vdW50ZnNfd3JpdGVzYihtcCk7CiAJeGZzX3VubW91bnRmc193YWl0KG1wKTsgCQkvKiB3YWl0IGZvciBhc3luYyBidWZzICovCi0JeGZzX2xvZ191bm1vdW50KG1wKTsJCQkvKiBEb25lISBObyBtb3JlIGZzIG9wcy4gKi8KLQotCWlmICgobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9VVUlEKSA9PSAwKQotCQl1dWlkX3RhYmxlX3JlbW92ZSgmbXAtPm1fc2Iuc2JfdXVpZCk7CisJeGZzX2xvZ191bm1vdW50X3dyaXRlKG1wKTsKKwl4ZnNfbG9nX3VubW91bnQobXApOworCXhmc191dWlkX3VubW91bnQobXApOwogCiAjaWYgZGVmaW5lZChERUJVRykKIAl4ZnNfZXJyb3J0YWdfY2xlYXJhbGwobXAsIDApOwpAQCAtMTc5MywyOSArMTg0NSw2IEBACiB9CiAKIC8qCi0gKiBTZWUgaWYgdGhlIFVVSUQgaXMgdW5pcXVlIGFtb25nIG1vdW50ZWQgWEZTIGZpbGVzeXN0ZW1zLgotICogTW91bnQgZmFpbHMgaWYgVVVJRCBpcyBuaWwgb3IgYSBGUyB3aXRoIHRoZSBzYW1lIFVVSUQgaXMgYWxyZWFkeSBtb3VudGVkLgotICovCi1TVEFUSUMgaW50Ci14ZnNfdXVpZF9tb3VudCgKLQl4ZnNfbW91bnRfdAkqbXApCi17Ci0JaWYgKHV1aWRfaXNfbmlsKCZtcC0+bV9zYi5zYl91dWlkKSkgewotCQljbW5fZXJyKENFX1dBUk4sCi0JCQkiWEZTOiBGaWxlc3lzdGVtICVzIGhhcyBuaWwgVVVJRCAtIGNhbid0IG1vdW50IiwKLQkJCW1wLT5tX2ZzbmFtZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKCF1dWlkX3RhYmxlX2luc2VydCgmbXAtPm1fc2Iuc2JfdXVpZCkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogRmlsZXN5c3RlbSAlcyBoYXMgZHVwbGljYXRlIFVVSUQgLSBjYW4ndCBtb3VudCIsCi0JCQltcC0+bV9mc25hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgogICogVXNlZCB0byBsb2cgY2hhbmdlcyB0byB0aGUgc3VwZXJibG9jayB1bml0IGFuZCB3aWR0aCBmaWVsZHMgd2hpY2ggY291bGQKICAqIGJlIGFsdGVyZWQgYnkgdGhlIG1vdW50IG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IHBvdGVudGlhbCBzYl9mZWF0dXJlczIKICAqIGZpeHVwLiBPbmx5IHRoZSBmaXJzdCBzdXBlcmJsb2NrIGlzIHVwZGF0ZWQuCkBAIC0xODY4LDcgKzE4OTcsNyBAQAogICogd2UgZGlzYWJsZSB0aGUgcGVyLWNwdSBjb3VudGVyIGFuZCBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGguCiAgKgogICogVGhlIHNsb3cgcGF0aCBpcyB0aGUgY3VycmVudCB4ZnNfbW9kX2luY29yZV9zYigpIGZ1bmN0aW9uLiAgVGhpcyBtZWFucyB0aGF0Ci0gKiB3aGVuIHdlIGRpc2FibGUgYSBwZXItY3B1IGNvdW50ZXIsIHdlIG5lZWQgdG8gZHJhaW4gaXQncyByZXNvdXJjZXMgYmFjayB0bworICogd2hlbiB3ZSBkaXNhYmxlIGEgcGVyLWNwdSBjb3VudGVyLCB3ZSBuZWVkIHRvIGRyYWluIGl0cyByZXNvdXJjZXMgYmFjayB0bwogICogdGhlIGdsb2JhbCBzdXBlcmJsb2NrLiBXZSBkbyB0aGlzIGFmdGVyIGRpc2FibGluZyB0aGUgY291bnRlciB0byBwcmV2ZW50CiAgKiBtb3JlIHRocmVhZHMgZnJvbSBxdWV1ZWluZyB1cCBvbiB0aGUgY291bnRlci4KICAqCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggZjVlOTkzNy4uN2FmNDRhZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMTM2LDcgKzEzNiw2IEBACiAJCQlzdHJ1Y3QgeGZzX2RxdW90ICosIHN0cnVjdCB4ZnNfZHF1b3QgKiwgdWludCk7CiB0eXBlZGVmIHZvaWQJKCp4ZnNfZHFzdGF0dmZzX3QpKHN0cnVjdCB4ZnNfaW5vZGUgKiwgc3RydWN0IGtzdGF0ZnMgKik7CiB0eXBlZGVmIGludAkoKnhmc19kcXN5bmNfdCkoc3RydWN0IHhmc19tb3VudCAqLCBpbnQgZmxhZ3MpOwotdHlwZWRlZiBpbnQJKCp4ZnNfcXVvdGFjdGxfdCkoc3RydWN0IHhmc19tb3VudCAqLCBpbnQsIGludCwgeGZzX2NhZGRyX3QpOwogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfcW1vcHMgewogCXhmc19xbWluaXRfdAkJeGZzX3FtaW5pdDsKQEAgLTE1NCw3ICsxNTMsNiBAQAogCXhmc19kcXZvcGNob3ducmVzdl90CXhmc19kcXZvcGNob3ducmVzdjsKIAl4ZnNfZHFzdGF0dmZzX3QJCXhmc19kcXN0YXR2ZnM7CiAJeGZzX2Rxc3luY190CQl4ZnNfZHFzeW5jOwotCXhmc19xdW90YWN0bF90CQl4ZnNfcXVvdGFjdGw7CiAJc3RydWN0IHhmc19kcXRyeG9wcwkqeGZzX2RxdHJ4b3BzOwogfSB4ZnNfcW1vcHNfdDsKIApAQCAtMTg4LDggKzE4Niw2IEBACiAJKCooaXApLT5pX21vdW50LT5tX3FtX29wcy0+eGZzX2Rxc3RhdHZmcykoaXAsIHN0YXRwKQogI2RlZmluZSBYRlNfUU1fRFFTWU5DKG1wLCBmbGFncykgXAogCSgqKG1wKS0+bV9xbV9vcHMtPnhmc19kcXN5bmMpKG1wLCBmbGFncykKLSNkZWZpbmUgWEZTX1FNX1FVT1RBQ1RMKG1wLCBjbWQsIGlkLCBhZGRyKSBcCi0JKCoobXApLT5tX3FtX29wcy0+eGZzX3F1b3RhY3RsKShtcCwgY21kLCBpZCwgYWRkcikKIAogI2lmZGVmIEhBVkVfUEVSQ1BVX1NCCiAKQEAgLTI3MywxOSArMjY5LDE3IEBACiAJdWludAkJCW1faW5vYnRfbW5yWzJdOwkvKiBtaW4gaW5vYnQgYnRyZWUgcmVjb3JkcyAqLwogCXVpbnQJCQltX2FnX21heGxldmVsczsJLyogWEZTX0FHX01BWExFVkVMUyAqLwogCXVpbnQJCQltX2JtX21heGxldmVsc1syXTsgLyogWEZTX0JNX01BWExFVkVMUyAqLwotCXVpbnQJCQltX2luX21heGxldmVsczsJLyogWEZTX0lOX01BWExFVkVMUyAqLworCXVpbnQJCQltX2luX21heGxldmVsczsJLyogbWF4IGlub2J0IGJ0cmVlIGxldmVscy4gKi8KIAlzdHJ1Y3QgeGZzX3BlcmFnCSptX3BlcmFnOwkvKiBwZXItYWcgYWNjb3VudGluZyBpbmZvICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZQltX3BlcmFnbG9jazsJLyogbG9jayBmb3IgbV9wZXJhZyAocG9pbnRlcikgKi8KIAlzdHJ1Y3QgbXV0ZXgJCW1fZ3Jvd2xvY2s7CS8qIGdyb3dmcyBtdXRleCAqLwogCWludAkJCW1fZml4ZWRmc2lkWzJdOwkvKiB1bmNoYW5nZWQgZm9yIGxpZmUgb2YgRlMgKi8KIAl1aW50CQkJbV9kbWV2bWFzazsJLyogRE1JIGV2ZW50cyBmb3IgdGhpcyBGUyAqLwogCV9fdWludDY0X3QJCW1fZmxhZ3M7CS8qIGdsb2JhbCBtb3VudCBmbGFncyAqLwotCXVpbnQJCQltX2F0dHJvZmZzZXQ7CS8qIGlub2RlIGF0dHJpYnV0ZSBvZmZzZXQgKi8KIAl1aW50CQkJbV9kaXJfbm9kZV9lbnRzOyAvKiAjZW50cmllcyBpbiBhIGRpciBkYW5vZGUgKi8KIAl1aW50CQkJbV9hdHRyX25vZGVfZW50czsgLyogI2VudHJpZXMgaW4gYXR0ciBkYW5vZGUgKi8KIAlpbnQJCQltX2lhbGxvY19pbm9zOwkvKiBpbm9kZXMgaW4gaW5vZGUgYWxsb2NhdGlvbiAqLwogCWludAkJCW1faWFsbG9jX2Jsa3M7CS8qIGJsb2NrcyBpbiBpbm9kZSBhbGxvY2F0aW9uICovCi0JaW50CQkJbV9saXRpbm87CS8qIHNpemUgb2YgaW5vZGUgdW5pb24gYXJlYSAqLwogCWludAkJCW1faW5vYWxpZ25fbWFzazsvKiBtYXNrIHNiX2lub2FsaWdubXQgaWYgdXNlZCAqLwogCXVpbnQJCQltX3FmbGFnczsJLyogcXVvdGEgc3RhdHVzIGZsYWdzICovCiAJeGZzX3RyYW5zX3Jlc2VydmF0aW9uc190IG1fcmVzZXJ2YXRpb25zOy8qIHByZWNvbXB1dGVkIHJlcyB2YWx1ZXMgKi8KQEAgLTI5Myw5ICsyODcsNiBAQAogCV9fdWludDY0X3QJCW1fbWF4aW9mZnNldDsJLyogbWF4aW11bSBpbm9kZSBvZmZzZXQgKi8KIAlfX3VpbnQ2NF90CQltX3Jlc2Jsa3M7CS8qIHRvdGFsIHJlc2VydmVkIGJsb2NrcyAqLwogCV9fdWludDY0X3QJCW1fcmVzYmxrc19hdmFpbDsvKiBhdmFpbGFibGUgcmVzZXJ2ZWQgYmxvY2tzICovCi0jaWYgWEZTX0JJR19JTlVNUwotCXhmc19pbm9fdAkJbV9pbm9hZGQ7CS8qIGFkZCB2YWx1ZSBmb3IgaW5vNjRfb2Zmc2V0ICovCi0jZW5kaWYKIAlpbnQJCQltX2RhbGlnbjsJLyogc3RyaXBlIHVuaXQgKi8KIAlpbnQJCQltX3N3aWR0aDsJLyogc3RyaXBlIHdpZHRoICovCiAJaW50CQkJbV9zaW5vYWxpZ247CS8qIHN0cmlwZSB1bml0IGlub2RlIGFsaWdubWVudCAqLwpAQCAtMzM3LDcgKzMyOCw2IEBACiAjZGVmaW5lIFhGU19NT1VOVF9XU1lOQwkJKDFVTEwgPDwgMCkJLyogZm9yIG5mcyAtIGFsbCBtZXRhZGF0YSBvcHMKIAkJCQkJCSAgIG11c3QgYmUgc3luY2hyb25vdXMgZXhjZXB0CiAJCQkJCQkgICBmb3Igc3BhY2UgYWxsb2NhdGlvbnMgKi8KLSNkZWZpbmUgWEZTX01PVU5UX0lOTzY0CQkoMVVMTCA8PCAxKQogI2RlZmluZSBYRlNfTU9VTlRfRE1BUEkJCSgxVUxMIDw8IDIpCS8qIGRtYXBpIGlzIGVuYWJsZWQgKi8KICNkZWZpbmUgWEZTX01PVU5UX1dBU19DTEVBTgkoMVVMTCA8PCAzKQogI2RlZmluZSBYRlNfTU9VTlRfRlNfU0hVVERPV04JKDFVTEwgPDwgNCkJLyogYXRvbWljIHN0b3Agb2YgYWxsIGZpbGVzeXN0ZW0KQEAgLTM4OSw4ICszNzksOCBAQAogICogU3luY2hyb25vdXMgcmVhZCBhbmQgd3JpdGUgc2l6ZXMuICBUaGlzIHNob3VsZCBiZQogICogYmV0dGVyIGZvciBORlN2MiB3c3luYyBmaWxlc3lzdGVtcy4KICAqLwotI2RlZmluZQlYRlNfV1NZTkNfUkVBRElPX0xPRwkxNQkvKiAzMksgKi8KLSNkZWZpbmUJWEZTX1dTWU5DX1dSSVRFSU9fTE9HCTE0CS8qIDE2SyAqLworI2RlZmluZQlYRlNfV1NZTkNfUkVBRElPX0xPRwkxNQkvKiAzMmsgKi8KKyNkZWZpbmUJWEZTX1dTWU5DX1dSSVRFSU9fTE9HCTE0CS8qIDE2ayAqLwogCiAvKgogICogQWxsb3cgbGFyZ2UgYmxvY2sgc2l6ZXMgdG8gYmUgcmVwb3J0ZWQgdG8gdXNlcnNwYWNlIHByb2dyYW1zIGlmIHRoZQpAQCAtNTAwLDkgKzQ5MCw2IEBACiAJaW50NjRfdAkJbXNiX2RlbHRhOwkvKiBDaGFuZ2UgdG8gbWFrZSB0byBzcGVjaWZpZWQgZmllbGQgKi8KIH0geGZzX21vZF9zYl90OwogCi0jZGVmaW5lCVhGU19NT1VOVF9JTE9DSyhtcCkJbXV0ZXhfbG9jaygmKChtcCktPm1faWxvY2spKQotI2RlZmluZQlYRlNfTU9VTlRfSVVOTE9DSyhtcCkJbXV0ZXhfdW5sb2NrKCYoKG1wKS0+bV9pbG9jaykpCi0KIGV4dGVybiBpbnQJeGZzX2xvZ19zYmNvdW50KHhmc19tb3VudF90ICosIHVpbnQpOwogZXh0ZXJuIGludAl4ZnNfbW91bnRmcyh4ZnNfbW91bnRfdCAqbXApOwogZXh0ZXJuIHZvaWQJeGZzX21vdW50ZnNfY2hlY2tfYmFycmllcnMoeGZzX21vdW50X3QgKm1wKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcW1vcHMuYyBiL2ZzL3hmcy94ZnNfcW1vcHMuYwppbmRleCAyN2Y4MDU4Li5lMTAxNzkwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Ftb3BzLmMKKysrIGIvZnMveGZzL3hmc19xbW9wcy5jCkBAIC0xMjYsNyArMTI2LDYgQEAKIAkueGZzX2Rxdm9wY2hvd25yZXN2CT0gKHhmc19kcXZvcGNob3ducmVzdl90KSBmc19ub2VyciwKIAkueGZzX2Rxc3RhdHZmcwkJPSAoeGZzX2Rxc3RhdHZmc190KSBmc19ub3ZhbCwKIAkueGZzX2Rxc3luYwkJPSAoeGZzX2Rxc3luY190KSBmc19ub2VyciwKLQkueGZzX3F1b3RhY3RsCQk9ICh4ZnNfcXVvdGFjdGxfdCkgZnNfbm9zeXMsCiB9OwogCiBpbnQKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcXVvdGEuaCBiL2ZzL3hmcy94ZnNfcXVvdGEuaAppbmRleCA0ODk2NWVjLi5mNWQxMjAyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3F1b3RhLmgKKysrIGIvZnMveGZzL3hmc19xdW90YS5oCkBAIC0xOCw2ICsxOCw4IEBACiAjaWZuZGVmIF9fWEZTX1FVT1RBX0hfXwogI2RlZmluZSBfX1hGU19RVU9UQV9IX18KIAorc3RydWN0IHhmc190cmFuczsKKwogLyoKICAqIFRoZSBvbmRpc2sgZm9ybSBvZiBhIGRxdW90IHN0cnVjdHVyZS4KICAqLwpAQCAtMTg1LDcgKzE4Nyw2IEBACiAgKiB0byBhIHNpbmdsZSBmdW5jdGlvbi4gTm9uZSBvZiB0aGVzZSBYRlNfUU1PUFRfKiBmbGFncyBhcmUgbWVhbnQgdG8gaGF2ZQogICogcGVyc2lzdGVudCB2YWx1ZXMgKGllLiB0aGVpciB2YWx1ZXMgY2FuIGFuZCB3aWxsIGNoYW5nZSBiZXR3ZWVuIHZlcnNpb25zKQogICovCi0jZGVmaW5lIFhGU19RTU9QVF9EUUxPQ0sJMHgwMDAwMDAxIC8qIGRxbG9jayAqLwogI2RlZmluZSBYRlNfUU1PUFRfRFFBTExPQwkweDAwMDAwMDIgLyogYWxsb2MgZHF1b3Qgb25kaXNrIGlmIG5lZWRlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfVVFVT1RBCTB4MDAwMDAwNCAvKiB1c2VyIGRxdW90IHJlcXVlc3RlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfUFFVT1RBCTB4MDAwMDAwOCAvKiBwcm9qZWN0IGRxdW90IHJlcXVlc3RlZCAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydGFsbG9jLmMgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwppbmRleCBjNWJiODZmLi4zODVmNmRjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J0YWxsb2MuYworKysgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwpAQCAtMjI4OCw2ICsyMjg4LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK3hmc19ydHVubW91bnRfaW5vZGVzKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wKQoreworCWlmIChtcC0+bV9yYm1pcCkKKwkJSVJFTEUobXAtPm1fcmJtaXApOworCWlmIChtcC0+bV9yc3VtaXApCisJCUlSRUxFKG1wLT5tX3JzdW1pcCk7Cit9CisKIC8qCiAgKiBQaWNrIGFuIGV4dGVudCBmb3IgYWxsb2NhdGlvbiBhdCB0aGUgc3RhcnQgb2YgYSBuZXcgcmVhbHRpbWUgZmlsZS4KICAqIFVzZSB0aGUgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZCBpbiB0aGUgYXRpbWUgZmllbGQgb2YgdGhlIGJpdG1hcCBpbm9kZS4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5oIGIvZnMveGZzL3hmc19ydGFsbG9jLmgKaW5kZXggOGQ4ZGNkMi4uYjJkNjdhZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydGFsbG9jLmgKKysrIGIvZnMveGZzL3hmc19ydGFsbG9jLmgKQEAgLTIzLDggKzIzLDggQEAKIAogLyogTWluIGFuZCBtYXggcnQgZXh0ZW50IHNpemVzLCBzcGVjaWZpZWQgaW4gYnl0ZXMgKi8KICNkZWZpbmUJWEZTX01BWF9SVEVYVFNJWkUJKDEwMjQgKiAxMDI0ICogMTAyNCkJLyogMUdCICovCi0jZGVmaW5lCVhGU19ERkxfUlRFWFRTSVpFCSg2NCAqIDEwMjQpCSAgICAgICAgLyogNjRLQiAqLwotI2RlZmluZQlYRlNfTUlOX1JURVhUU0laRQkoNCAqIDEwMjQpCQkvKiA0S0IgKi8KKyNkZWZpbmUJWEZTX0RGTF9SVEVYVFNJWkUJKDY0ICogMTAyNCkJICAgICAgICAvKiA2NGtCICovCisjZGVmaW5lCVhGU19NSU5fUlRFWFRTSVpFCSg0ICogMTAyNCkJCS8qIDRrQiAqLwogCiAvKgogICogQ29uc3RhbnRzIGZvciBiaXQgbWFuaXB1bGF0aW9ucy4KQEAgLTEwOCw2ICsxMDgsOSBAQAogaW50CQkJCQkvKiBlcnJvciAqLwogeGZzX3J0bW91bnRfaW5pdCgKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCk7CS8qIGZpbGUgc3lzdGVtIG1vdW50IHN0cnVjdHVyZSAqLwordm9pZAoreGZzX3J0dW5tb3VudF9pbm9kZXMoCisJc3RydWN0IHhmc19tb3VudAkqbXApOwogCiAvKgogICogR2V0IHRoZSBiaXRtYXAgYW5kIHN1bW1hcnkgaW5vZGVzIGludG8gdGhlIG1vdW50IHN0cnVjdHVyZQpAQCAtMTQ2LDYgKzE0OSw3IEBACiAjIGRlZmluZSB4ZnNfZ3Jvd2ZzX3J0KG1wLGluKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChFTk9TWVMpCiAjIGRlZmluZSB4ZnNfcnRtb3VudF9pbml0KG0pICAgICgoKG1wKS0+bV9zYi5zYl9yYmxvY2tzID09IDApPyAwIDogKEVOT1NZUykpCiAjIGRlZmluZSB4ZnNfcnRtb3VudF9pbm9kZXMobSkgICgoKG1wKS0+bV9zYi5zYl9yYmxvY2tzID09IDApPyAwIDogKEVOT1NZUykpCisjIGRlZmluZSB4ZnNfcnR1bm1vdW50X2lub2RlcyhtKQogI2VuZGlmCS8qIENPTkZJR19YRlNfUlQgKi8KIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuaCBiL2ZzL3hmcy94ZnNfdHJhbnMuaAppbmRleCBkNmZlNGE4Li43NzUyNDlhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmgKKysrIGIvZnMveGZzL3hmc190cmFucy5oCkBAIC0yOTIsNyArMjkyLDcgQEAKICAqIEluIGEgd3JpdGUgdHJhbnNhY3Rpb24gd2UgY2FuIGFsbG9jYXRlIGEgbWF4aW11bSBvZiAyCiAgKiBleHRlbnRzLiAgVGhpcyBnaXZlczoKICAqICAgIHRoZSBpbm9kZSBnZXR0aW5nIHRoZSBuZXcgZXh0ZW50czogaW5vZGUgc2l6ZQotICogICAgdGhlIGlub2RlXCdzIGJtYXAgYnRyZWU6IG1heCBkZXB0aCAqIGJsb2NrIHNpemUKKyAqICAgIHRoZSBpbm9kZSdzIGJtYXAgYnRyZWU6IG1heCBkZXB0aCAqIGJsb2NrIHNpemUKICAqICAgIHRoZSBhZ2ZzIG9mIHRoZSBhZ3MgZnJvbSB3aGljaCB0aGUgZXh0ZW50cyBhcmUgYWxsb2NhdGVkOiAyICogc2VjdG9yCiAgKiAgICB0aGUgc3VwZXJibG9jayBmcmVlIGJsb2NrIGNvdW50ZXI6IHNlY3RvciBzaXplCiAgKiAgICB0aGUgYWxsb2NhdGlvbiBidHJlZXM6IDIgZXh0cyAqIDIgdHJlZXMgKiAoMiAqIG1heCBkZXB0aCAtIDEpICogYmxvY2sgc2l6ZQpAQCAtMzIxLDcgKzMyMSw3IEBACiAvKgogICogSW4gdHJ1bmNhdGluZyBhIGZpbGUgd2UgZnJlZSB1cCB0byB0d28gZXh0ZW50cyBhdCBvbmNlLiAgV2UgY2FuIG1vZGlmeToKICAqICAgIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQ6IGlub2RlIHNpemUKLSAqICAgIHRoZSBpbm9kZVwncyBibWFwIGJ0cmVlOiAobWF4IGRlcHRoICsgMSkgKiBibG9jayBzaXplCisgKiAgICB0aGUgaW5vZGUncyBibWFwIGJ0cmVlOiAobWF4IGRlcHRoICsgMSkgKiBibG9jayBzaXplCiAgKiBBbmQgdGhlIGJtYXBfZmluaXNoIHRyYW5zYWN0aW9uIGNhbiBmcmVlIHRoZSBibG9ja3MgYW5kIGJtYXAgYmxvY2tzOgogICogICAgdGhlIGFnZiBmb3IgZWFjaCBvZiB0aGUgYWdzOiA0ICogc2VjdG9yIHNpemUKICAqICAgIHRoZSBhZ2ZsIGZvciBlYWNoIG9mIHRoZSBhZ3M6IDQgKiBzZWN0b3Igc2l6ZQpAQCAtMzQzLDcgKzM0Myw3IEBACiAJICAoMTI4ICogKDkgKyBYRlNfQUxMT0NGUkVFX0xPR19DT1VOVChtcCwgNCkpKSArIFwKIAkgICgxMjggKiA1KSArIFwKIAkgIFhGU19BTExPQ0ZSRUVfTE9HX1JFUyhtcCwgMSkgKyBcCi0JICAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgWEZTX0lOX01BWExFVkVMUyhtcCkgKyBcCisJICAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgKG1wKS0+bV9pbl9tYXhsZXZlbHMgKyBcCiAJICAgIFhGU19BTExPQ0ZSRUVfTE9HX0NPVU5UKG1wLCAxKSkpKSkpCiAKICNkZWZpbmUJWEZTX0lUUlVOQ0FURV9MT0dfUkVTKG1wKSAgICgobXApLT5tX3Jlc2VydmF0aW9ucy50cl9pdHJ1bmNhdGUpCkBAIC00MzEsOCArNDMxLDggQEAKICAqICAgIHRoZSBuZXcgaW5vZGU6IGlub2RlIHNpemUKICAqICAgIHRoZSBpbm9kZSBidHJlZSBlbnRyeTogMSBibG9jawogICogICAgdGhlIGRpcmVjdG9yeSBidHJlZTogKG1heCBkZXB0aCArIHYyKSAqIGRpciBibG9jayBzaXplCi0gKiAgICB0aGUgZGlyZWN0b3J5IGlub2RlXCdzIGJtYXAgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBibG9jayBzaXplCi0gKiAgICB0aGUgYmxvY2tzIGZvciB0aGUgc3ltbGluazogMSBLQgorICogICAgdGhlIGRpcmVjdG9yeSBpbm9kZSdzIGJtYXAgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBibG9jayBzaXplCisgKiAgICB0aGUgYmxvY2tzIGZvciB0aGUgc3ltbGluazogMSBrQgogICogT3IgaW4gdGhlIGZpcnN0IHhhY3Qgd2UgYWxsb2NhdGUgc29tZSBpbm9kZXMgZ2l2aW5nOgogICogICAgdGhlIGFnaSBhbmQgYWdmIG9mIHRoZSBhZyBnZXR0aW5nIHRoZSBuZXcgaW5vZGVzOiAyICogc2VjdG9yc2l6ZQogICogICAgdGhlIGlub2RlIGJsb2NrcyBhbGxvY2F0ZWQ6IFhGU19JQUxMT0NfQkxPQ0tTICogYmxvY2tzaXplCkBAIC00NDksOSArNDQ5LDkgQEAKIAkgICgxMjggKiAoNCArIFhGU19ESVJPUF9MT0dfQ09VTlQobXApKSkpLCBcCiAJICgyICogKG1wKS0+bV9zYi5zYl9zZWN0c2l6ZSArIFwKIAkgIFhGU19GU0JfVE9fQigobXApLCBYRlNfSUFMTE9DX0JMT0NLUygobXApKSkgKyBcCi0JICBYRlNfRlNCX1RPX0IoKG1wKSwgWEZTX0lOX01BWExFVkVMUyhtcCkpICsgXAorCSAgWEZTX0ZTQl9UT19CKChtcCksIChtcCktPm1faW5fbWF4bGV2ZWxzKSArIFwKIAkgIFhGU19BTExPQ0ZSRUVfTE9HX1JFUyhtcCwgMSkgKyBcCi0JICAoMTI4ICogKDIgKyBYRlNfSUFMTE9DX0JMT0NLUyhtcCkgKyBYRlNfSU5fTUFYTEVWRUxTKG1wKSArIFwKKwkgICgxMjggKiAoMiArIFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIChtcCktPm1faW5fbWF4bGV2ZWxzICsgXAogCSAgIFhGU19BTExPQ0ZSRUVfTE9HX0NPVU5UKG1wLCAxKSkpKSkpCiAKICNkZWZpbmUJWEZTX1NZTUxJTktfTE9HX1JFUyhtcCkJKChtcCktPm1fcmVzZXJ2YXRpb25zLnRyX3N5bWxpbmspCkBAIC00NjMsNyArNDYzLDcgQEAKICAqICAgIHRoZSBpbm9kZSBidHJlZSBlbnRyeTogYmxvY2sgc2l6ZQogICogICAgdGhlIHN1cGVyYmxvY2sgZm9yIHRoZSBubGluayBmbGFnOiBzZWN0b3Igc2l6ZQogICogICAgdGhlIGRpcmVjdG9yeSBidHJlZTogKG1heCBkZXB0aCArIHYyKSAqIGRpciBibG9jayBzaXplCi0gKiAgICB0aGUgZGlyZWN0b3J5IGlub2RlXCdzIGJtYXAgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBibG9jayBzaXplCisgKiAgICB0aGUgZGlyZWN0b3J5IGlub2RlJ3MgYm1hcCBidHJlZTogKG1heCBkZXB0aCArIHYyKSAqIGJsb2NrIHNpemUKICAqIE9yIGluIHRoZSBmaXJzdCB4YWN0IHdlIGFsbG9jYXRlIHNvbWUgaW5vZGVzIGdpdmluZzoKICAqICAgIHRoZSBhZ2kgYW5kIGFnZiBvZiB0aGUgYWcgZ2V0dGluZyB0aGUgbmV3IGlub2RlczogMiAqIHNlY3RvcnNpemUKICAqICAgIHRoZSBzdXBlcmJsb2NrIGZvciB0aGUgbmxpbmsgZmxhZzogc2VjdG9yIHNpemUKQEAgLTQ4MSw5ICs0ODEsOSBAQAogCSAgKDEyOCAqICgzICsgWEZTX0RJUk9QX0xPR19DT1VOVChtcCkpKSksIFwKIAkgKDMgKiAobXApLT5tX3NiLnNiX3NlY3RzaXplICsgXAogCSAgWEZTX0ZTQl9UT19CKChtcCksIFhGU19JQUxMT0NfQkxPQ0tTKChtcCkpKSArIFwKLQkgIFhGU19GU0JfVE9fQigobXApLCBYRlNfSU5fTUFYTEVWRUxTKG1wKSkgKyBcCisJICBYRlNfRlNCX1RPX0IoKG1wKSwgKG1wKS0+bV9pbl9tYXhsZXZlbHMpICsgXAogCSAgWEZTX0FMTE9DRlJFRV9MT0dfUkVTKG1wLCAxKSArIFwKLQkgICgxMjggKiAoMiArIFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIFhGU19JTl9NQVhMRVZFTFMobXApICsgXAorCSAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgKG1wKS0+bV9pbl9tYXhsZXZlbHMgKyBcCiAJICAgWEZTX0FMTE9DRlJFRV9MT0dfQ09VTlQobXAsIDEpKSkpKSkKIAogI2RlZmluZQlYRlNfQ1JFQVRFX0xPR19SRVMobXApCSgobXApLT5tX3Jlc2VydmF0aW9ucy50cl9jcmVhdGUpCkBAIC01MTMsNyArNTEzLDcgQEAKIAkgTUFYKChfX3VpbnQxNl90KVhGU19GU0JfVE9fQigobXApLCAxKSwgWEZTX0lOT0RFX0NMVVNURVJfU0laRShtcCkpICsgXAogCSAoMTI4ICogNSkgKyBcCiAJICBYRlNfQUxMT0NGUkVFX0xPR19SRVMobXAsIDEpICsgXAotCSAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgWEZTX0lOX01BWExFVkVMUyhtcCkgKyBcCisJICAoMTI4ICogKDIgKyBYRlNfSUFMTE9DX0JMT0NLUyhtcCkgKyAobXApLT5tX2luX21heGxldmVscyArIFwKIAkgICBYRlNfQUxMT0NGUkVFX0xPR19DT1VOVChtcCwgMSkpKSkKIAogCkBAIC02MzcsNyArNjM3LDcgQEAKIC8qCiAgKiBSZW1vdmluZyB0aGUgYXR0cmlidXRlIGZvcmsgb2YgYSBmaWxlCiAgKiAgICB0aGUgaW5vZGUgYmVpbmcgdHJ1bmNhdGVkOiBpbm9kZSBzaXplCi0gKiAgICB0aGUgaW5vZGVcJ3MgYm1hcCBidHJlZTogbWF4IGRlcHRoICogYmxvY2sgc2l6ZQorICogICAgdGhlIGlub2RlJ3MgYm1hcCBidHJlZTogbWF4IGRlcHRoICogYmxvY2sgc2l6ZQogICogQW5kIHRoZSBibWFwX2ZpbmlzaCB0cmFuc2FjdGlvbiBjYW4gZnJlZSB0aGUgYmxvY2tzIGFuZCBibWFwIGJsb2NrczoKICAqICAgIHRoZSBhZ2YgZm9yIGVhY2ggb2YgdGhlIGFnczogNCAqIHNlY3RvciBzaXplCiAgKiAgICB0aGUgYWdmbCBmb3IgZWFjaCBvZiB0aGUgYWdzOiA0ICogc2VjdG9yIHNpemUKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IDJkNDdmMTAuLmYzMTI3MWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtNzksNyArNzksNyBAQAogICogdGhlIHB1c2ggaXMgcnVuIGFzeW5jaHJvbm91c2x5IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBzbyB3ZSByZXR1cm4gdGhlIHRhaWwKICAqIG9mIHRoZSBsb2cgcmlnaHQgbm93IGluc3RlYWQgb2YgdGhlIHRhaWwgYWZ0ZXIgdGhlIHB1c2guIFRoaXMgbWVhbnMgd2Ugd2lsbAogICogZWl0aGVyIGNvbnRpbnVlIHJpZ2h0IGF3YXksIG9yIHdlIHdpbGwgc2xlZXAgd2FpdGluZyBvbiB0aGUgYXN5bmMgdGhyZWFkIHRvCi0gKiBkbyBpdCdzIHdvcmsuCisgKiBkbyBpdHMgd29yay4KICAqCiAgKiBXZSBkbyB0aGlzIHVubG9ja2VkIC0gd2Ugb25seSBuZWVkIHRvIGtub3cgd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyBpbiB0aGUKICAqIEFJTCBhdCB0aGUgdGltZSB3ZSBhcmUgY2FsbGVkLiBXZSBkb24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgY29udGVudHMgb2YKQEAgLTE2MCw3ICsxNjAsNyBAQAogLyoKICAqIE5vdyB0aGF0IHRoZSB0cmF2ZXJzYWwgaXMgY29tcGxldGUsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjdXJzb3IKICAqIGZyb20gdGhlIGxpc3Qgb2YgdHJhdmVyc2luZyBjdXJzb3JzLiBBdm9pZCByZW1vdmluZyB0aGUgZW1iZWRkZWQKLSAqIHB1c2ggY3Vyc29yLCBidXQgdXNlIHRoZSBmYWN0IGl0IGlzIGFsd2F5IHByZXNlbnQgdG8gbWFrZSB0aGUKKyAqIHB1c2ggY3Vyc29yLCBidXQgdXNlIHRoZSBmYWN0IGl0IGlzIGFsd2F5cyBwcmVzZW50IHRvIG1ha2UgdGhlCiAgKiBsaXN0IGRlbGV0aW9uIHNpbXBsZS4KICAqLwogdm9pZApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19pdGVtLmMgYi9mcy94ZnMveGZzX3RyYW5zX2l0ZW0uYwppbmRleCBlMTEwYmY1Li5lYjNmYzU3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2l0ZW0uYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgInhmc19pbnVtLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKLS8qIFhYWDogZnJvbSBoZXJlIGRvd24gbmVlZGVkIHVudGlsIHN0cnVjdCB4ZnNfdHJhbnMgaGFzIGl0J3Mgb3duIGFpbHAgKi8KKy8qIFhYWDogZnJvbSBoZXJlIGRvd24gbmVlZGVkIHVudGlsIHN0cnVjdCB4ZnNfdHJhbnMgaGFzIGl0cyBvd24gYWlscCAqLwogI2luY2x1ZGUgInhmc19iaXQuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfc3BhY2UuaCBiL2ZzL3hmcy94ZnNfdHJhbnNfc3BhY2UuaAppbmRleCA0ZWEyZTUwLi43ZDJjOTIwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX3NwYWNlLmgKKysrIGIvZnMveGZzL3hmc190cmFuc19zcGFjZS5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lCVhGU19ESVJSRU1PVkVfU1BBQ0VfUkVTKG1wKQlcCiAJWEZTX0RBUkVNT1ZFX1NQQUNFX1JFUyhtcCwgWEZTX0RBVEFfRk9SSykKICNkZWZpbmUJWEZTX0lBTExPQ19TUEFDRV9SRVMobXApCVwKLQkoWEZTX0lBTExPQ19CTE9DS1MobXApICsgWEZTX0lOX01BWExFVkVMUyhtcCktMSkKKwkoWEZTX0lBTExPQ19CTE9DS1MobXApICsgKG1wKS0+bV9pbl9tYXhsZXZlbHMgLSAxKQogCiAvKgogICogU3BhY2UgcmVzZXJ2YXRpb24gdmFsdWVzIGZvciB2YXJpb3VzIHRyYW5zYWN0aW9ucy4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHlwZXMuaCBiL2ZzL3hmcy94ZnNfdHlwZXMuaAppbmRleCBiMmY3MjQ1Li5kNzI1NDI4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3R5cGVzLmgKKysrIGIvZnMveGZzL3hmc190eXBlcy5oCkBAIC0yMSwxNCArMjEsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogLyoKLSAqIFBPU0lYIEV4dGVuc2lvbnMKLSAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1Y2hhcl90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJdXNob3J0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludAkJdWludF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQl1bG9uZ190OwotCi0vKgogICogQWRkaXRpb25hbCB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgWEZTCiAgKi8KIHR5cGVkZWYgc2lnbmVkIGNoYXIJCV9faW50OF90OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc191dGlscy5jIGIvZnMveGZzL3hmc191dGlscy5jCmluZGV4IGZjYzIyODUuLjc5YjllNWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdXRpbHMuYworKysgYi9mcy94ZnMveGZzX3V0aWxzLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCiAJLyoKIAkgKiBGb2xsb3cgdGhlIG5vcm1hbCB0cnVuY2F0ZSBsb2NraW5nIHByb3RvY29sLiAgU2luY2Ugd2UKLQkgKiBob2xkIHRoZSBpbm9kZSBpbiB0aGUgdHJhbnNhY3Rpb24sIHdlIGtub3cgdGhhdCBpdCdzIG51bWJlcgorCSAqIGhvbGQgdGhlIGlub2RlIGluIHRoZSB0cmFuc2FjdGlvbiwgd2Uga25vdyB0aGF0IGl0cyBudW1iZXIKIAkgKiBvZiByZWZlcmVuY2VzIHdpbGwgc3RheSBjb25zdGFudC4KIAkgKi8KIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCAwZTU1YzVkLi43Mzk0YzdhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0xMTM2LDcgKzExMzYsNyBAQAogCSAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZyZWUsIHRoZW4gdGhlcmUgY2FuIGJlIG5vdGhpbmcKIAkgKiB0byBjbGVhbiB1cCBoZXJlLgogCSAqLwotCWlmIChpcC0+aV9kLmRpX21vZGUgPT0gMCB8fCBWTl9CQUQoVkZTX0koaXApKSkgeworCWlmIChpcC0+aV9kLmRpX21vZGUgPT0gMCB8fCBpc19iYWRfaW5vZGUoVkZTX0koaXApKSkgewogCQlBU1NFUlQoaXAtPmlfZGYuaWZfcmVhbF9ieXRlcyA9PSAwKTsKIAkJQVNTRVJUKGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzID09IDApOwogCQlyZXR1cm4gVk5fSU5BQ1RJVkVfQ0FDSEU7CkBAIC0xMzg3LDIzICsxMzg3LDI4IEBACiAJeGZzX2lub2RlX3QJCSoqaXBwLAogCWNyZWRfdAkJCSpjcmVkcCkKIHsKLQl4ZnNfbW91bnRfdAkJKm1wID0gZHAtPmlfbW91bnQ7Ci0JeGZzX2lub2RlX3QJCSppcDsKLQl4ZnNfdHJhbnNfdAkJKnRwOworCWludAkJCWlzX2RpciA9IFNfSVNESVIobW9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBkcC0+aV9tb3VudDsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IE5VTEw7CisJc3RydWN0IHhmc190cmFucwkqdHAgPSBOVUxMOwogCWludAkJCWVycm9yOwogCXhmc19ibWFwX2ZyZWVfdAkJZnJlZV9saXN0OwogCXhmc19mc2Jsb2NrX3QJCWZpcnN0X2Jsb2NrOwogCWJvb2xlYW5fdAkJdW5sb2NrX2RwX29uX2Vycm9yID0gQl9GQUxTRTsKLQlpbnQJCQlkbV9ldmVudF9zZW50ID0gMDsKIAl1aW50CQkJY2FuY2VsX2ZsYWdzOwogCWludAkJCWNvbW1pdHRlZDsKIAl4ZnNfcHJpZF90CQlwcmlkOwotCXN0cnVjdCB4ZnNfZHF1b3QJKnVkcXAsICpnZHFwOworCXN0cnVjdCB4ZnNfZHF1b3QJKnVkcXAgPSBOVUxMOworCXN0cnVjdCB4ZnNfZHF1b3QJKmdkcXAgPSBOVUxMOwogCXVpbnQJCQlyZXNibGtzOworCXVpbnQJCQlsb2dfcmVzOworCXVpbnQJCQlsb2dfY291bnQ7CiAKLQlBU1NFUlQoISppcHApOwogCXhmc19pdHJhY2VfZW50cnkoZHApOwogCisJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQorCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CisKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfQ1JFQVRFKSkgewogCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfQ1JFQVRFLAogCQkJCWRwLCBETV9SSUdIVF9OVUxMLCBOVUxMLApAQCAtMTQxMiw4NCArMTQxNyw5NyBAQAogCiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJZG1fZXZlbnRfc2VudCA9IDE7CiAJfQogCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0KLQkvKiBSZXR1cm4gdGhyb3VnaCBzdGRfcmV0dXJuIGFmdGVyIHRoaXMgcG9pbnQuICovCi0KLQl1ZHFwID0gZ2RxcCA9IE5VTEw7CiAJaWYgKGRwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKQogCQlwcmlkID0gZHAtPmlfZC5kaV9wcm9qaWQ7CiAJZWxzZQotCQlwcmlkID0gKHhmc19wcmlkX3QpZGZsdHByaWQ7CisJCXByaWQgPSBkZmx0cHJpZDsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgZHF1b3Qocykgb24gZGlzay4KIAkgKi8KIAllcnJvciA9IFhGU19RTV9EUVZPUEFMTE9DKG1wLCBkcCwKIAkJCWN1cnJlbnRfZnN1aWQoKSwgY3VycmVudF9mc2dpZCgpLCBwcmlkLAotCQkJWEZTX1FNT1BUX1FVT1RBTEx8WEZTX1FNT1BUX0lOSEVSSVQsICZ1ZHFwLCAmZ2RxcCk7CisJCQlYRlNfUU1PUFRfUVVPVEFMTCB8IFhGU19RTU9QVF9JTkhFUklULCAmdWRxcCwgJmdkcXApOwogCWlmIChlcnJvcikKIAkJZ290byBzdGRfcmV0dXJuOwogCi0JaXAgPSBOVUxMOworCWlmIChpc19kaXIpIHsKKwkJcmRldiA9IDA7CisJCXJlc2Jsa3MgPSBYRlNfTUtESVJfU1BBQ0VfUkVTKG1wLCBuYW1lLT5sZW4pOworCQlsb2dfcmVzID0gWEZTX01LRElSX0xPR19SRVMobXApOworCQlsb2dfY291bnQgPSBYRlNfTUtESVJfTE9HX0NPVU5UOworCQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX01LRElSKTsKKwl9IGVsc2UgeworCQlyZXNibGtzID0gWEZTX0NSRUFURV9TUEFDRV9SRVMobXAsIG5hbWUtPmxlbik7CisJCWxvZ19yZXMgPSBYRlNfQ1JFQVRFX0xPR19SRVMobXApOworCQlsb2dfY291bnQgPSBYRlNfQ1JFQVRFX0xPR19DT1VOVDsKKwkJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19DUkVBVEUpOworCX0KIAotCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfQ1JFQVRFKTsKIAljYW5jZWxfZmxhZ3MgPSBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTOwotCXJlc2Jsa3MgPSBYRlNfQ1JFQVRFX1NQQUNFX1JFUyhtcCwgbmFtZS0+bGVuKTsKKwogCS8qCiAJICogSW5pdGlhbGx5IGFzc3VtZSB0aGF0IHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IGFuZAogCSAqIHJlc2VydmUgdGhlIHJlc291cmNlcyBmb3IgdGhhdCBjYXNlLiAgSWYgdGhhdCBpcyBub3QKIAkgKiB0aGUgY2FzZSB3ZSdsbCBkcm9wIHRoZSBvbmUgd2UgaGF2ZSBhbmQgZ2V0IGEgbW9yZQogCSAqIGFwcHJvcHJpYXRlIHRyYW5zYWN0aW9uIGxhdGVyLgogCSAqLwotCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIHJlc2Jsa3MsIFhGU19DUkVBVEVfTE9HX1JFUyhtcCksIDAsCi0JCQlYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLCBYRlNfQ1JFQVRFX0xPR19DT1VOVCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgcmVzYmxrcywgbG9nX3JlcywgMCwKKwkJCVhGU19UUkFOU19QRVJNX0xPR19SRVMsIGxvZ19jb3VudCk7CiAJaWYgKGVycm9yID09IEVOT1NQQykgewogCQlyZXNibGtzID0gMDsKLQkJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwgWEZTX0NSRUFURV9MT0dfUkVTKG1wKSwgMCwKLQkJCQlYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLCBYRlNfQ1JFQVRFX0xPR19DT1VOVCk7CisJCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIGxvZ19yZXMsIDAsCisJCQkJWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywgbG9nX2NvdW50KTsKIAl9CiAJaWYgKGVycm9yKSB7CiAJCWNhbmNlbF9mbGFncyA9IDA7Ci0JCWdvdG8gZXJyb3JfcmV0dXJuOworCQlnb3RvIG91dF90cmFuc19jYW5jZWw7CiAJfQogCiAJeGZzX2lsb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JTE9DS19QQVJFTlQpOwogCXVubG9ja19kcF9vbl9lcnJvciA9IEJfVFJVRTsKIAotCXhmc19ibWFwX2luaXQoJmZyZWVfbGlzdCwgJmZpcnN0X2Jsb2NrKTsKKwkvKgorCSAqIENoZWNrIGZvciBkaXJlY3RvcnkgbGluayBjb3VudCBvdmVyZmxvdy4KKwkgKi8KKwlpZiAoaXNfZGlyICYmIGRwLT5pX2QuZGlfbmxpbmsgPj0gWEZTX01BWExJTkspIHsKKwkJZXJyb3IgPSBYRlNfRVJST1IoRU1MSU5LKTsKKwkJZ290byBvdXRfdHJhbnNfY2FuY2VsOworCX0KIAotCUFTU0VSVChpcCA9PSBOVUxMKTsKKwl4ZnNfYm1hcF9pbml0KCZmcmVlX2xpc3QsICZmaXJzdF9ibG9jayk7CiAKIAkvKgogCSAqIFJlc2VydmUgZGlzayBxdW90YSBhbmQgdGhlIGlub2RlLgogCSAqLwogCWVycm9yID0gWEZTX1RSQU5TX1JFU0VSVkVfUVVPVEEobXAsIHRwLCB1ZHFwLCBnZHFwLCByZXNibGtzLCAxLCAwKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3JfcmV0dXJuOworCQlnb3RvIG91dF90cmFuc19jYW5jZWw7CiAKIAllcnJvciA9IHhmc19kaXJfY2FuZW50ZXIodHAsIGRwLCBuYW1lLCByZXNibGtzKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3JfcmV0dXJuOwotCWVycm9yID0geGZzX2Rpcl9pYWxsb2MoJnRwLCBkcCwgbW9kZSwgMSwKLQkJCXJkZXYsIGNyZWRwLCBwcmlkLCByZXNibGtzID4gMCwKLQkJCSZpcCwgJmNvbW1pdHRlZCk7CisJCWdvdG8gb3V0X3RyYW5zX2NhbmNlbDsKKworCS8qCisJICogQSBuZXdseSBjcmVhdGVkIHJlZ3VsYXIgb3Igc3BlY2lhbCBmaWxlIGp1c3QgaGFzIG9uZSBkaXJlY3RvcnkKKwkgKiBlbnRyeSBwb2ludGluZyB0byB0aGVtLCBidXQgYSBkaXJlY3RvcnkgYWxzbyB0aGUgIi4iIGVudHJ5CisJICogcG9pbnRpbmcgdG8gaXRzZWxmLgorCSAqLworCWVycm9yID0geGZzX2Rpcl9pYWxsb2MoJnRwLCBkcCwgbW9kZSwgaXNfZGlyID8gMiA6IDEsIHJkZXYsIGNyZWRwLAorCQkJICAgICAgIHByaWQsIHJlc2Jsa3MgPiAwLCAmaXAsICZjb21taXR0ZWQpOwogCWlmIChlcnJvcikgewogCQlpZiAoZXJyb3IgPT0gRU5PU1BDKQotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCWdvdG8gYWJvcnRfcmV0dXJuOworCQkJZ290byBvdXRfdHJhbnNfY2FuY2VsOworCQlnb3RvIG91dF90cmFuc19hYm9ydDsKIAl9Ci0JeGZzX2l0cmFjZV9yZWYoaXApOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50LCB3ZSd2ZSBnb3R0ZW4gYSBuZXdseSBhbGxvY2F0ZWQgaW5vZGUuCiAJICogSXQgaXMgbG9ja2VkIChhbmQgam9pbmVkIHRvIHRoZSB0cmFuc2FjdGlvbikuCiAJICovCi0KKwl4ZnNfaXRyYWNlX3JlZihpcCk7CiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7CiAKIAkvKgpAQCAtMTUwOCwxOSArMTUyNiwyOCBAQAogCQkJCQlyZXNibGtzIC0gWEZTX0lBTExPQ19TUEFDRV9SRVMobXApIDogMCk7CiAJaWYgKGVycm9yKSB7CiAJCUFTU0VSVChlcnJvciAhPSBFTk9TUEMpOwotCQlnb3RvIGFib3J0X3JldHVybjsKKwkJZ290byBvdXRfdHJhbnNfYWJvcnQ7CiAJfQogCXhmc19pY2hndGltZShkcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGRwLCBYRlNfSUxPR19DT1JFKTsKIAorCWlmIChpc19kaXIpIHsKKwkJZXJyb3IgPSB4ZnNfZGlyX2luaXQodHAsIGlwLCBkcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2JtYXBfY2FuY2VsOworCisJCWVycm9yID0geGZzX2J1bXBsaW5rKHRwLCBkcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2JtYXBfY2FuY2VsOworCX0KKwogCS8qCiAJICogSWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzIG1vdW50LCBtYWtlIHN1cmUgdGhhdCB0aGUKIAkgKiBjcmVhdGUgdHJhbnNhY3Rpb24gZ29lcyB0byBkaXNrIGJlZm9yZSByZXR1cm5pbmcgdG8KIAkgKiB0aGUgdXNlci4KIAkgKi8KLQlpZiAobXAtPm1fZmxhZ3MgJiAoWEZTX01PVU5UX1dTWU5DfFhGU19NT1VOVF9ESVJTWU5DKSkgeworCWlmIChtcC0+bV9mbGFncyAmIChYRlNfTU9VTlRfV1NZTkN8WEZTX01PVU5UX0RJUlNZTkMpKQogCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCX0KIAogCS8qCiAJICogQXR0YWNoIHRoZSBkcXVvdChzKSB0byB0aGUgaW5vZGVzIGFuZCBtb2RpZnkgdGhlbSBpbmNvcmUuCkBAIC0xNTM3LDE2ICsxNTY0LDEzIEBACiAJSUhPTEQoaXApOwogCiAJZXJyb3IgPSB4ZnNfYm1hcF9maW5pc2goJnRwLCAmZnJlZV9saXN0LCAmY29tbWl0dGVkKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOwotCQlnb3RvIGFib3J0X3JlbGU7Ci0JfQorCWlmIChlcnJvcikKKwkJZ290byBvdXRfYWJvcnRfcmVsZTsKIAogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CiAJaWYgKGVycm9yKSB7CiAJCUlSRUxFKGlwKTsKLQkJdHAgPSBOVUxMOwotCQlnb3RvIGVycm9yX3JldHVybjsKKwkJZ290byBvdXRfZHFyZWxlOwogCX0KIAogCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwpAQCAtMTU1NSwyNiArMTU3OSwyMiBAQAogCSppcHAgPSBpcDsKIAogCS8qIEZhbGx0aHJvdWdoIHRvIHN0ZF9yZXR1cm4gd2l0aCBlcnJvciA9IDAgICovCi0KLXN0ZF9yZXR1cm46Ci0JaWYgKCgqaXBwIHx8IChlcnJvciAhPSAwICYmIGRtX2V2ZW50X3NlbnQgIT0gMCkpICYmCi0JICAgIERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1BPU1RDUkVBVEUpKSB7Ci0JCSh2b2lkKSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1BPU1RDUkVBVEUsCi0JCQlkcCwgRE1fUklHSFRfTlVMTCwKLQkJCSppcHAgPyBpcCA6IE5VTEwsCi0JCQlETV9SSUdIVF9OVUxMLCBuYW1lLT5uYW1lLCBOVUxMLAotCQkJbW9kZSwgZXJyb3IsIDApOworIHN0ZF9yZXR1cm46CisJaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1BPU1RDUkVBVEUpKSB7CisJCVhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUE9TVENSRUFURSwgZHAsIERNX1JJR0hUX05VTEwsCisJCQkJaXAsIERNX1JJR0hUX05VTEwsIG5hbWUtPm5hbWUsIE5VTEwsIG1vZGUsCisJCQkJZXJyb3IsIDApOwogCX0KKwogCXJldHVybiBlcnJvcjsKIAotIGFib3J0X3JldHVybjoKKyBvdXRfYm1hcF9jYW5jZWw6CisJeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOworIG91dF90cmFuc19hYm9ydDoKIAljYW5jZWxfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwotCS8qIEZBTExUSFJPVUdIICovCi0KLSBlcnJvcl9yZXR1cm46Ci0JaWYgKHRwICE9IE5VTEwpCi0JCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbF9mbGFncyk7Ci0KKyBvdXRfdHJhbnNfY2FuY2VsOgorCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbF9mbGFncyk7Cisgb3V0X2RxcmVsZToKIAlYRlNfUU1fRFFSRUxFKG1wLCB1ZHFwKTsKIAlYRlNfUU1fRFFSRUxFKG1wLCBnZHFwKTsKIApAQCAtMTU4MywyMCArMTYwMywxOCBAQAogCiAJZ290byBzdGRfcmV0dXJuOwogCi0gYWJvcnRfcmVsZToKKyBvdXRfYWJvcnRfcmVsZToKIAkvKgogCSAqIFdhaXQgdW50aWwgYWZ0ZXIgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCB0bwogCSAqIHJlbGVhc2UgdGhlIGlub2RlLiAgVGhpcyBwcmV2ZW50cyByZWN1cnNpdmUgdHJhbnNhY3Rpb25zCiAJICogYW5kIGRlYWRsb2NrcyBmcm9tIHhmc19pbmFjdGl2ZS4KIAkgKi8KKwl4ZnNfYm1hcF9jYW5jZWwoJmZyZWVfbGlzdCk7CiAJY2FuY2VsX2ZsYWdzIHw9IFhGU19UUkFOU19BQk9SVDsKIAl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwogCUlSRUxFKGlwKTsKLQotCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwotCVhGU19RTV9EUVJFTEUobXAsIGdkcXApOwotCi0JZ290byBzdGRfcmV0dXJuOworCXVubG9ja19kcF9vbl9lcnJvciA9IEJfRkFMU0U7CisJZ290byBvdXRfZHFyZWxlOwogfQogCiAjaWZkZWYgREVCVUcKQEAgLTIwMDQsOCArMjAyMiwxMCBAQAogCS8qIFJldHVybiB0aHJvdWdoIHN0ZF9yZXR1cm4gYWZ0ZXIgdGhpcyBwb2ludC4gKi8KIAogCWVycm9yID0gWEZTX1FNX0RRQVRUQUNIKG1wLCBzaXAsIDApOwotCWlmICghZXJyb3IgJiYgc2lwICE9IHRkcCkKLQkJZXJyb3IgPSBYRlNfUU1fRFFBVFRBQ0gobXAsIHRkcCwgMCk7CisJaWYgKGVycm9yKQorCQlnb3RvIHN0ZF9yZXR1cm47CisKKwllcnJvciA9IFhGU19RTV9EUUFUVEFDSChtcCwgdGRwLCAwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gc3RkX3JldHVybjsKIApAQCAtMjExMCwyMDkgKzIxMzAsNiBAQAogCWdvdG8gc3RkX3JldHVybjsKIH0KIAotCi1pbnQKLXhmc19ta2RpcigKLQl4ZnNfaW5vZGVfdCAgICAgICAgICAgICAqZHAsCi0Jc3RydWN0IHhmc19uYW1lCQkqZGlyX25hbWUsCi0JbW9kZV90CQkJbW9kZSwKLQl4ZnNfaW5vZGVfdAkJKippcHAsCi0JY3JlZF90CQkJKmNyZWRwKQotewotCXhmc19tb3VudF90CQkqbXAgPSBkcC0+aV9tb3VudDsKLQl4ZnNfaW5vZGVfdAkJKmNkcDsJLyogaW5vZGUgb2YgY3JlYXRlZCBkaXIgKi8KLQl4ZnNfdHJhbnNfdAkJKnRwOwotCWludAkJCWNhbmNlbF9mbGFnczsKLQlpbnQJCQllcnJvcjsKLQlpbnQJCQljb21taXR0ZWQ7Ci0JeGZzX2JtYXBfZnJlZV90ICAgICAgICAgZnJlZV9saXN0OwotCXhmc19mc2Jsb2NrX3QgICAgICAgICAgIGZpcnN0X2Jsb2NrOwotCWJvb2xlYW5fdAkJdW5sb2NrX2RwX29uX2Vycm9yID0gQl9GQUxTRTsKLQlib29sZWFuX3QJCWNyZWF0ZWQgPSBCX0ZBTFNFOwotCWludAkJCWRtX2V2ZW50X3NlbnQgPSAwOwotCXhmc19wcmlkX3QJCXByaWQ7Ci0Jc3RydWN0IHhmc19kcXVvdAkqdWRxcCwgKmdkcXA7Ci0JdWludAkJCXJlc2Jsa3M7Ci0KLQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCi0JCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQotCXRwID0gTlVMTDsKLQotCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9DUkVBVEUpKSB7Ci0JCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9DUkVBVEUsCi0JCQkJCWRwLCBETV9SSUdIVF9OVUxMLCBOVUxMLAotCQkJCQlETV9SSUdIVF9OVUxMLCBkaXJfbmFtZS0+bmFtZSwgTlVMTCwKLQkJCQkJbW9kZSwgMCwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJZG1fZXZlbnRfc2VudCA9IDE7Ci0JfQotCi0JLyogUmV0dXJuIHRocm91Z2ggc3RkX3JldHVybiBhZnRlciB0aGlzIHBvaW50LiAqLwotCi0JeGZzX2l0cmFjZV9lbnRyeShkcCk7Ci0KLQltcCA9IGRwLT5pX21vdW50OwotCXVkcXAgPSBnZHFwID0gTlVMTDsKLQlpZiAoZHAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfUFJPSklOSEVSSVQpCi0JCXByaWQgPSBkcC0+aV9kLmRpX3Byb2ppZDsKLQllbHNlCi0JCXByaWQgPSAoeGZzX3ByaWRfdClkZmx0cHJpZDsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgZHF1b3Qocykgb24gZGlzay4KLQkgKi8KLQllcnJvciA9IFhGU19RTV9EUVZPUEFMTE9DKG1wLCBkcCwKLQkJCWN1cnJlbnRfZnN1aWQoKSwgY3VycmVudF9mc2dpZCgpLCBwcmlkLAotCQkJWEZTX1FNT1BUX1FVT1RBTEwgfCBYRlNfUU1PUFRfSU5IRVJJVCwgJnVkcXAsICZnZHFwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gc3RkX3JldHVybjsKLQotCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfTUtESVIpOwotCWNhbmNlbF9mbGFncyA9IFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVM7Ci0JcmVzYmxrcyA9IFhGU19NS0RJUl9TUEFDRV9SRVMobXAsIGRpcl9uYW1lLT5sZW4pOwotCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIHJlc2Jsa3MsIFhGU19NS0RJUl9MT0dfUkVTKG1wKSwgMCwKLQkJCQkgIFhGU19UUkFOU19QRVJNX0xPR19SRVMsIFhGU19NS0RJUl9MT0dfQ09VTlQpOwotCWlmIChlcnJvciA9PSBFTk9TUEMpIHsKLQkJcmVzYmxrcyA9IDA7Ci0JCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19NS0RJUl9MT0dfUkVTKG1wKSwgMCwKLQkJCQkJICBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLAotCQkJCQkgIFhGU19NS0RJUl9MT0dfQ09VTlQpOwotCX0KLQlpZiAoZXJyb3IpIHsKLQkJY2FuY2VsX2ZsYWdzID0gMDsKLQkJZ290byBlcnJvcl9yZXR1cm47Ci0JfQotCi0JeGZzX2lsb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JTE9DS19QQVJFTlQpOwotCXVubG9ja19kcF9vbl9lcnJvciA9IEJfVFJVRTsKLQotCS8qCi0JICogQ2hlY2sgZm9yIGRpcmVjdG9yeSBsaW5rIGNvdW50IG92ZXJmbG93LgotCSAqLwotCWlmIChkcC0+aV9kLmRpX25saW5rID49IFhGU19NQVhMSU5LKSB7Ci0JCWVycm9yID0gWEZTX0VSUk9SKEVNTElOSyk7Ci0JCWdvdG8gZXJyb3JfcmV0dXJuOwotCX0KLQotCS8qCi0JICogUmVzZXJ2ZSBkaXNrIHF1b3RhIGFuZCB0aGUgaW5vZGUuCi0JICovCi0JZXJyb3IgPSBYRlNfVFJBTlNfUkVTRVJWRV9RVU9UQShtcCwgdHAsIHVkcXAsIGdkcXAsIHJlc2Jsa3MsIDEsIDApOwotCWlmIChlcnJvcikKLQkJZ290byBlcnJvcl9yZXR1cm47Ci0KLQllcnJvciA9IHhmc19kaXJfY2FuZW50ZXIodHAsIGRwLCBkaXJfbmFtZSwgcmVzYmxrcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycm9yX3JldHVybjsKLQkvKgotCSAqIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGlub2RlLgotCSAqLwotCWVycm9yID0geGZzX2Rpcl9pYWxsb2MoJnRwLCBkcCwgbW9kZSwgMiwKLQkJCTAsIGNyZWRwLCBwcmlkLCByZXNibGtzID4gMCwKLQkJJmNkcCwgTlVMTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWlmIChlcnJvciA9PSBFTk9TUEMpCi0JCQlnb3RvIGVycm9yX3JldHVybjsKLQkJZ290byBhYm9ydF9yZXR1cm47Ci0JfQotCXhmc19pdHJhY2VfcmVmKGNkcCk7Ci0KLQkvKgotCSAqIE5vdyB3ZSBhZGQgdGhlIGRpcmVjdG9yeSBpbm9kZSB0byB0aGUgdHJhbnNhY3Rpb24uCi0JICogV2Ugd2FpdGVkIHVudGlsIG5vdyBzaW5jZSB4ZnNfZGlyX2lhbGxvYyBtaWdodCBzdGFydAotCSAqIGEgbmV3IHRyYW5zYWN0aW9uLiAgSGFkIHdlIGpvaW5lZCB0aGUgdHJhbnNhY3Rpb24KLQkgKiBlYXJsaWVyLCB0aGUgbG9ja3MgbWlnaHQgaGF2ZSBnb3R0ZW4gcmVsZWFzZWQuIEFuIGVycm9yCi0JICogZnJvbSBoZXJlIG9uIHdpbGwgcmVzdWx0IGluIHRoZSB0cmFuc2FjdGlvbiBjYW5jZWwKLQkgKiB1bmxvY2tpbmcgZHAgc28gZG9uJ3QgZG8gaXQgZXhwbGljaXRseSBpbiB0aGUgZXJyb3IgcGF0aC4KLQkgKi8KLQlJSE9MRChkcCk7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXVubG9ja19kcF9vbl9lcnJvciA9IEJfRkFMU0U7Ci0KLQl4ZnNfYm1hcF9pbml0KCZmcmVlX2xpc3QsICZmaXJzdF9ibG9jayk7Ci0KLQllcnJvciA9IHhmc19kaXJfY3JlYXRlbmFtZSh0cCwgZHAsIGRpcl9uYW1lLCBjZHAtPmlfaW5vLAotCQkJCQkmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsIHJlc2Jsa3MgPwotCQkJCQlyZXNibGtzIC0gWEZTX0lBTExPQ19TUEFDRV9SRVMobXApIDogMCk7Ci0JaWYgKGVycm9yKSB7Ci0JCUFTU0VSVChlcnJvciAhPSBFTk9TUEMpOwotCQlnb3RvIGVycm9yMTsKLQl9Ci0JeGZzX2ljaGd0aW1lKGRwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7Ci0KLQllcnJvciA9IHhmc19kaXJfaW5pdCh0cCwgY2RwLCBkcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycm9yMjsKLQotCWVycm9yID0geGZzX2J1bXBsaW5rKHRwLCBkcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycm9yMjsKLQotCWNyZWF0ZWQgPSBCX1RSVUU7Ci0KLQkqaXBwID0gY2RwOwotCUlIT0xEKGNkcCk7Ci0KLQkvKgotCSAqIEF0dGFjaCB0aGUgZHF1b3RzIHRvIHRoZSBuZXcgaW5vZGUgYW5kIG1vZGlmeSB0aGUgaWNvdW50IGluY29yZS4KLQkgKi8KLQlYRlNfUU1fRFFWT1BDUkVBVEUobXAsIHRwLCBjZHAsIHVkcXAsIGdkcXApOwotCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGEgc3luY2hyb25vdXMgbW91bnQsIG1ha2Ugc3VyZSB0aGF0IHRoZQotCSAqIG1rZGlyIHRyYW5zYWN0aW9uIGdvZXMgdG8gZGlzayBiZWZvcmUgcmV0dXJuaW5nIHRvCi0JICogdGhlIHVzZXIuCi0JICovCi0JaWYgKG1wLT5tX2ZsYWdzICYgKFhGU19NT1VOVF9XU1lOQ3xYRlNfTU9VTlRfRElSU1lOQykpIHsKLQkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKLQl9Ci0KLQllcnJvciA9IHhmc19ibWFwX2ZpbmlzaCgmdHAsICZmcmVlX2xpc3QsICZjb21taXR0ZWQpOwotCWlmIChlcnJvcikgewotCQlJUkVMRShjZHApOwotCQlnb3RvIGVycm9yMjsKLQl9Ci0KLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwotCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwotCVhGU19RTV9EUVJFTEUobXAsIGdkcXApOwotCWlmIChlcnJvcikgewotCQlJUkVMRShjZHApOwotCX0KLQotCS8qIEZhbGwgdGhyb3VnaCB0byBzdGRfcmV0dXJuIHdpdGggZXJyb3IgPSAwIG9yIGVycm5vIGZyb20KLQkgKiB4ZnNfdHJhbnNfY29tbWl0LiAqLwotCi1zdGRfcmV0dXJuOgotCWlmICgoY3JlYXRlZCB8fCAoZXJyb3IgIT0gMCAmJiBkbV9ldmVudF9zZW50ICE9IDApKSAmJgotCSAgICBETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9QT1NUQ1JFQVRFKSkgewotCQkodm9pZCkgWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9QT1NUQ1JFQVRFLAotCQkJCQlkcCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJY3JlYXRlZCA/IGNkcCA6IE5VTEwsCi0JCQkJCURNX1JJR0hUX05VTEwsCi0JCQkJCWRpcl9uYW1lLT5uYW1lLCBOVUxMLAotCQkJCQltb2RlLCBlcnJvciwgMCk7Ci0JfQotCXJldHVybiBlcnJvcjsKLQotIGVycm9yMjoKLSBlcnJvcjE6Ci0JeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOwotIGFib3J0X3JldHVybjoKLQljYW5jZWxfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwotIGVycm9yX3JldHVybjoKLQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwotCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwotCVhGU19RTV9EUVJFTEUobXAsIGdkcXApOwotCi0JaWYgKHVubG9ja19kcF9vbl9lcnJvcikKLQkJeGZzX2l1bmxvY2soZHAsIFhGU19JTE9DS19FWENMKTsKLQotCWdvdG8gc3RkX3JldHVybjsKLX0KLQogaW50CiB4ZnNfc3ltbGluaygKIAl4ZnNfaW5vZGVfdAkJKmRwLApAQCAtMjU4Nyw1MSArMjQwNCw2IEBACiB9CiAKIGludAoteGZzX2lub2RlX2ZsdXNoKAotCXhmc19pbm9kZV90CSppcCwKLQlpbnQJCWZsYWdzKQotewotCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwotCWludAkJZXJyb3IgPSAwOwotCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0KLQkvKgotCSAqIEJ5cGFzcyBpbm9kZXMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gY2xlYW5lZCBieQotCSAqIHRoZSBpbm9kZSBmbHVzaCBjbHVzdGVyaW5nIGNvZGUgaW5zaWRlIHhmc19pZmx1c2gKLQkgKi8KLQlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFdlIG1ha2UgdGhpcyBub24tYmxvY2tpbmcgaWYgdGhlIGlub2RlIGlzIGNvbnRlbmRlZCwKLQkgKiByZXR1cm4gRUFHQUlOIHRvIGluZGljYXRlIHRvIHRoZSBjYWxsZXIgdGhhdCB0aGV5Ci0JICogZGlkIG5vdCBzdWNjZWVkLiBUaGlzIHByZXZlbnRzIHRoZSBmbHVzaCBwYXRoIGZyb20KLQkgKiBibG9ja2luZyBvbiBpbm9kZXMgaW5zaWRlIGFub3RoZXIgb3BlcmF0aW9uIHJpZ2h0Ci0JICogbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCi0JICovCi0JaWYgKGZsYWdzICYgRkxVU0hfU1lOQykgewotCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQl4ZnNfaWZsb2NrKGlwKTsKLQl9IGVsc2UgaWYgKHhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19TSEFSRUQpKSB7Ci0JCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKSB7Ci0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCQlyZXR1cm4gRUFHQUlOOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIEVBR0FJTjsKLQl9Ci0KLQllcnJvciA9IHhmc19pZmx1c2goaXAsIChmbGFncyAmIEZMVVNIX1NZTkMpID8gWEZTX0lGTFVTSF9TWU5DCi0JCQkJCQkgICAgOiBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOwotCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotCi1pbnQKIHhmc19zZXRfZG1hdHRycygKIAl4ZnNfaW5vZGVfdCAgICAgKmlwLAogCXVfaW50CQlldm1hc2ssCkBAIC0yNjc2LDcgKzI0NDgsNyBAQAogCUFTU0VSVCghVk5fTUFQUEVEKFZGU19JKGlwKSkpOwogCiAJLyogYmFkIGlub2RlLCBnZXQgb3V0IGhlcmUgQVNBUCAqLwotCWlmIChWTl9CQUQoVkZTX0koaXApKSkgeworCWlmIChpc19iYWRfaW5vZGUoVkZTX0koaXApKSkgewogCQl4ZnNfaXJlY2xhaW0oaXApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMDkwLDcgKzI4NjIsNyBAQAogCiAJLyoKIAkgKiBOZWVkIHRvIHplcm8gdGhlIHN0dWZmIHdlJ3JlIG5vdCBmcmVlaW5nLCBvbiBkaXNrLgotCSAqIElmIGl0cyBhIHJlYWx0aW1lIGZpbGUgJiBjYW4ndCB1c2UgdW53cml0dGVuIGV4dGVudHMgdGhlbiB3ZQorCSAqIElmIGl0J3MgYSByZWFsdGltZSBmaWxlICYgY2FuJ3QgdXNlIHVud3JpdHRlbiBleHRlbnRzIHRoZW4gd2UKIAkgKiBhY3R1YWxseSBuZWVkIHRvIHplcm8gdGhlIGV4dGVudCBlZGdlcy4gIE90aGVyd2lzZSB4ZnNfYnVubWFwaQogCSAqIHdpbGwgdGFrZSBjYXJlIG9mIGl0IGZvciB1cy4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaCBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAppbmRleCA3NmRmMzI4Li4wNDM3M2M2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5oCkBAIC0zMSwxNCArMzEsMTEgQEAKIAkJc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19saW5rKHN0cnVjdCB4ZnNfaW5vZGUgKnRkcCwgc3RydWN0IHhmc19pbm9kZSAqc2lwLAogCQlzdHJ1Y3QgeGZzX25hbWUgKnRhcmdldF9uYW1lKTsKLWludCB4ZnNfbWtkaXIoc3RydWN0IHhmc19pbm9kZSAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqZGlyX25hbWUsCi0JCW1vZGVfdCBtb2RlLCBzdHJ1Y3QgeGZzX2lub2RlICoqaXBwLCBjcmVkX3QgKmNyZWRwKTsKIGludCB4ZnNfcmVhZGRpcihzdHJ1Y3QgeGZzX2lub2RlCSpkcCwgdm9pZCAqZGlyZW50LCBzaXplX3QgYnVmc2l6ZSwKIAkJICAgICAgIHhmc19vZmZfdCAqb2Zmc2V0LCBmaWxsZGlyX3QgZmlsbGRpcik7CiBpbnQgeGZzX3N5bWxpbmsoc3RydWN0IHhmc19pbm9kZSAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqbGlua19uYW1lLAogCQljb25zdCBjaGFyICp0YXJnZXRfcGF0aCwgbW9kZV90IG1vZGUsIHN0cnVjdCB4ZnNfaW5vZGUgKippcHAsCiAJCWNyZWRfdCAqY3JlZHApOwotaW50IHhmc19pbm9kZV9mbHVzaChzdHJ1Y3QgeGZzX2lub2RlICppcCwgaW50IGZsYWdzKTsKIGludCB4ZnNfc2V0X2RtYXR0cnMoc3RydWN0IHhmc19pbm9kZSAqaXAsIHVfaW50IGV2bWFzaywgdV9pbnQxNl90IHN0YXRlKTsKIGludCB4ZnNfcmVjbGFpbShzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiBpbnQgeGZzX2NoYW5nZV9maWxlX3NwYWNlKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgY21kLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2Z0cmFjZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1mcnYvZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKaW5kZXggODE3OTdlYy4uZDZjMzc5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKQEAgLTU1LDYgKzU1LDEwIEBACiAgKgloYW5kbGVkIGlzIChiYXNlICsgbmdwaW8gLSAxKS4KICAqIEBjYW5fc2xlZXA6IGZsYWcgbXVzdCBiZSBzZXQgaWZmIGdldCgpL3NldCgpIG1ldGhvZHMgc2xlZXAsIGFzIHRoZXkKICAqCW11c3Qgd2hpbGUgYWNjZXNzaW5nIEdQSU8gZXhwYW5kZXIgY2hpcHMgb3ZlciBJMkMgb3IgU1BJCisgKiBAbmFtZXM6IGlmIHNldCwgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHVzZSBhcyBhbHRlcm5hdGl2ZQorICogICAgICBuYW1lcyBmb3IgdGhlIEdQSU9zIGluIHRoaXMgY2hpcC4gQW55IGVudHJ5IGluIHRoZSBhcnJheQorICogICAgICBtYXkgYmUgTlVMTCBpZiB0aGVyZSBpcyBubyBhbGlhcyBmb3IgdGhlIEdQSU8sIGhvd2V2ZXIgdGhlCisgKiAgICAgIGFycmF5IG11c3QgYmUgQG5ncGlvIGVudHJpZXMgbG9uZy4KICAqCiAgKiBBIGdwaW9fY2hpcCBjYW4gaGVscCBwbGF0Zm9ybXMgYWJzdHJhY3QgdmFyaW91cyBzb3VyY2VzIG9mIEdQSU9zIHNvCiAgKiB0aGV5IGNhbiBhbGwgYmUgYWNjZXNzZWQgdGhyb3VnaCBhIGNvbW1vbiBwcm9ncmFtaW5nIGludGVyZmFjZS4KQEAgLTkyLDYgKzk2LDcgQEAKIAkJCQkJCXN0cnVjdCBncGlvX2NoaXAgKmNoaXApOwogCWludAkJCWJhc2U7CiAJdTE2CQkJbmdwaW87CisJY2hhcgkJCSoqbmFtZXM7CiAJdW5zaWduZWQJCWNhbl9zbGVlcDoxOwogCXVuc2lnbmVkCQlleHBvcnRlZDoxOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCBhNjU0ZDcyLi43ZmE2NjBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC02MSw2ICs2MSwzMCBAQAogI2RlZmluZSBCUkFOQ0hfUFJPRklMRSgpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDRVIKKyNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfZnRyYWNlX2V2ZW50cykgPSAuOwlcCisJCQkqKF9mdHJhY2VfZXZlbnRzKQkJCQlcCisJCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfZnRyYWNlX2V2ZW50cykgPSAuOworI2Vsc2UKKyNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UUkFDSU5HCisjZGVmaW5lIFRSQUNFX1BSSU5US1MoKSBWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2VfYnByaW50a19mbXQpID0gLjsgICAgICBcCisJCQkgKihfX3RyYWNlX3ByaW50a19mbXQpIC8qIFRyYWNlX3ByaW50ayBmbXQnIHBvaW50ZXIgKi8gXAorCQkJIFZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlX2JwcmludGtfZm10KSA9IC47CisjZWxzZQorI2RlZmluZSBUUkFDRV9QUklOVEtTKCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIFZNTElOVVhfU1lNQk9MKF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsJXAorCQkJICooX19zeXNjYWxsc19tZXRhZGF0YSkJCQkJXAorCQkJIFZNTElOVVhfU1lNQk9MKF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YSkgPSAuOworI2Vsc2UKKyNkZWZpbmUgVFJBQ0VfU1lTQ0FMTFMoKQorI2VuZGlmCisKIC8qIC5kYXRhIHNlY3Rpb24gKi8KICNkZWZpbmUgREFUQV9EQVRBCQkJCQkJCVwKIAkqKC5kYXRhKQkJCQkJCQlcCkBAIC04Niw3ICsxMTAsMTAgQEAKIAkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAotCUJSQU5DSF9QUk9GSUxFKCkKKwlCUkFOQ0hfUFJPRklMRSgpCQkJCQkJXAorCVRSQUNFX1BSSU5US1MoKQkJCQkJCQlcCisJRlRSQUNFX0VWRU5UUygpCQkJCQkJCVwKKwlUUkFDRV9TWVNDQUxMUygpCiAKICNkZWZpbmUgUk9fREFUQShhbGlnbikJCQkJCQkJXAogCS4gPSBBTElHTigoYWxpZ24pKTsJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2Z0cmFjZS5oIGIvaW5jbHVkZS9hc20tbTMyci9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oCmluZGV4IGY1Y2ZiYTguLmRkZWQ5MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmgKQEAgLTMxNiw2ICszMTYsOSBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvZnRyYWNlLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCmluZGV4IGM3ZDRiMmUuLmVjMDczZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCkBAIC0zMyw3ICszMyw2IEBACiAjaWZuZGVmIF9fRFJNX0NSVENfSEVMUEVSX0hfXwogI2RlZmluZSBfX0RSTV9DUlRDX0hFTFBFUl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KQEAgLTkyLDcgKzkxLDcgQEAKIGV4dGVybiBpbnQgZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHVpbnQzMl90IG1heFgsIHVpbnQzMl90IG1heFkpOwogZXh0ZXJuIHZvaWQgZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGRybV9oZWxwZXJfaG90cGx1Z19zdGFnZV90d28oc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gYm9vbCBkcm1faGVscGVyX2luaXRpYWxfY29uZmlnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgY2FuX2dyb3cpOworZXh0ZXJuIGJvb2wgZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KTsKIGV4dGVybiBib29sIGRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9vc19saW51eC5oIGIvaW5jbHVkZS9kcm0vZHJtX29zX2xpbnV4LmgKaW5kZXggMDEzNTUxZC4uMjY2NDFlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX29zX2xpbnV4LmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX29zX2xpbnV4LmgKQEAgLTcsMTIgKzcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaWZuZGVmIHJlYWRxCi1zdGF0aWMgdTY0IHJlYWRxKHZvaWQgX19pb21lbSAqcmVnKQorc3RhdGljIGlubGluZSB1NjQgcmVhZHEodm9pZCBfX2lvbWVtICpyZWcpCiB7CiAJcmV0dXJuICgodTY0KSByZWFkbChyZWcpKSB8ICgoKHU2NCkgcmVhZGwocmVnICsgNFVMKSkgPDwgMzIpOwogfQogCi1zdGF0aWMgdm9pZCB3cml0ZXEodTY0IHZhbCwgdm9pZCBfX2lvbWVtICpyZWcpCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVxKHU2NCB2YWwsIHZvaWQgX19pb21lbSAqcmVnKQogewogCXdyaXRlbCh2YWwgJiAweGZmZmZmZmZmLCByZWcpOwogCXdyaXRlbCh2YWwgPj4gMzIsIHJlZyArIDB4NFVMKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggYTY3YjYyMi4uY2E5YjliOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTY3LDYgKzY3LDcgQEAKIGhlYWRlci15ICs9IGZkLmgKIGhlYWRlci15ICs9IGZkcmVnLmgKIGhlYWRlci15ICs9IGZpYl9ydWxlcy5oCitoZWFkZXIteSArPSBmaWVtYXAuaAogaGVhZGVyLXkgKz0gZmlyZXdpcmUtY2Rldi5oCiBoZWFkZXIteSArPSBmaXJld2lyZS1jb25zdGFudHMuaAogaGVhZGVyLXkgKz0gZnVzZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FzeW5jX3R4LmggYi9pbmNsdWRlL2xpbnV4L2FzeW5jX3R4LmgKaW5kZXggNDVmNjI5Ny4uNWZjMmVmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hc3luY190eC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXN5bmNfdHguaApAQCAtMjEsNiArMjEsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCisvKiBvbiBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgZG1hLW1hcHBpbmcgY2FwYWJpbGl0aWVzIHdlIG5lZWQgdG8gZW5zdXJlCisgKiB0aGF0IHRoZSBhc3luY2hyb25vdXMgcGF0aCBjb21waWxlcyBhd2F5CisgKi8KKyNpZmRlZiBDT05GSUdfSEFTX0RNQQorI2RlZmluZSBfX2FzeW5jX2lubGluZQorI2Vsc2UKKyNkZWZpbmUgX19hc3luY19pbmxpbmUgX19hbHdheXNfaW5saW5lCisjZW5kaWYKKwogLyoqCiAgKiBkbWFfY2hhbl9yZWYgLSBvYmplY3QgdXNlZCB0byBtYW5hZ2UgZG1hIGNoYW5uZWxzIHJlY2VpdmVkIGZyb20gdGhlCiAgKiAgIGRtYWVuZ2luZSBjb3JlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAppbmRleCA3N2I0YTllLi42NjM4YjgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApAQCAtMzUsOCArMzUsNyBAQAogI2VuZGlmCiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdW5zaWduZWQgbG9uZyBwOyAvKiBjdXJyZW50IHRvcCBvZiBtZW0gKi8KLQl1bnNpZ25lZCBpbnQgc2hfYmFuZzoxLAotCQltaXNjX2Jhbmc6MSwKKwl1bnNpZ25lZCBpbnQKIAkJY3JlZF9wcmVwYXJlZDoxLC8qIHRydWUgaWYgY3JlZHMgYWxyZWFkeSBwcmVwYXJlZCAobXVsdGlwbGUKIAkJCQkgKiBwcmVwcyBoYXBwZW4gZm9yIGludGVycHJldGVycykgKi8KIAkJY2FwX2VmZmVjdGl2ZToxOy8qIHRydWUgaWYgaGFzIGVsZXZhdGVkIGVmZmVjdGl2ZSBjYXBhYmlsaXRpZXMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAppbmRleCA2ZTkxNTg3Li5kOTYwODg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKQEAgLTE0NCw2ICsxNDQsOSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpCisKKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorCiBzdHJ1Y3QgYmxrX3RyYWNlIHsKIAlpbnQgdHJhY2Vfc3RhdGU7CiAJc3RydWN0IHJjaGFuICpyY2hhbjsKQEAgLTE5NCw2ICsxOTcsOCBAQAogZXh0ZXJuIGludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpOwogZXh0ZXJuIGludCBibGtfdHJhY2VfcmVtb3ZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIAorZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYmxrX3RyYWNlX2F0dHJfZ3JvdXA7CisKICNlbHNlIC8qICFDT05GSUdfQkxLX0RFVl9JT19UUkFDRSAqLwogI2RlZmluZSBibGtfdHJhY2VfaW9jdGwoYmRldiwgY21kLCBhcmcpCQkoLUVOT1RUWSkKICNkZWZpbmUgYmxrX3RyYWNlX3NodXRkb3duKHEpCQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCmluZGV4IDNkN2JjZGUuLjdiNzNiYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKQEAgLTMzMiwyMiArMzMyLDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfaW5pdCh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgdHJ5X3RvX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSkgeyByZXR1cm4gMTsgfQotc3RhdGljIGlubGluZSBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBpbm9kZV9oYXNfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CiBzdGF0aWMgaW5saW5lIGludCByZW1vdmVfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIGludCBzeW5jX21hcHBpbmdfYnVmZmVycyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzdXBlcl9ibG9jayAqZnJlZXplX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqc2IpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRoYXdfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXJldHVybiAwOwotfQogCiAjZW5kaWYgLyogQ09ORklHX0JMT0NLICovCiAjZW5kaWYgLyogX0xJTlVYX0JVRkZFUl9IRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IDQ5OTkwMGQuLjY2NWZhNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cHN0YXRzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJpb19oZWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KIAogI2lmZGVmIENPTkZJR19DR1JPVVBTCiAKQEAgLTIyLDYgKzIzLDcgQEAKIHN0cnVjdCBjZ3JvdXBfc3Vic3lzOwogc3RydWN0IGlub2RlOwogc3RydWN0IGNncm91cDsKK3N0cnVjdCBjc3NfaWQ7CiAKIGV4dGVybiBpbnQgY2dyb3VwX2luaXRfZWFybHkodm9pZCk7CiBleHRlcm4gaW50IGNncm91cF9pbml0KHZvaWQpOwpAQCAtNDcsMTggKzQ5LDI0IEBACiAKIC8qIFBlci1zdWJzeXN0ZW0vcGVyLWNncm91cCBzdGF0ZSBtYWludGFpbmVkIGJ5IHRoZSBzeXN0ZW0uICovCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSB7Ci0JLyogVGhlIGNncm91cCB0aGF0IHRoaXMgc3Vic3lzdGVtIGlzIGF0dGFjaGVkIHRvLiBVc2VmdWwKKwkvKgorCSAqIFRoZSBjZ3JvdXAgdGhhdCB0aGlzIHN1YnN5c3RlbSBpcyBhdHRhY2hlZCB0by4gVXNlZnVsCiAJICogZm9yIHN1YnN5c3RlbXMgdGhhdCB3YW50IHRvIGtub3cgYWJvdXQgdGhlIGNncm91cAotCSAqIGhpZXJhcmNoeSBzdHJ1Y3R1cmUgKi8KKwkgKiBoaWVyYXJjaHkgc3RydWN0dXJlCisJICovCiAJc3RydWN0IGNncm91cCAqY2dyb3VwOwogCi0JLyogU3RhdGUgbWFpbnRhaW5lZCBieSB0aGUgY2dyb3VwIHN5c3RlbSB0byBhbGxvdyBzdWJzeXN0ZW1zCisJLyoKKwkgKiBTdGF0ZSBtYWludGFpbmVkIGJ5IHRoZSBjZ3JvdXAgc3lzdGVtIHRvIGFsbG93IHN1YnN5c3RlbXMKIAkgKiB0byBiZSAiYnVzeSIuIFNob3VsZCBiZSBhY2Nlc3NlZCB2aWEgY3NzX2dldCgpLAotCSAqIGNzc190cnlnZXQoKSBhbmQgYW5kIGNzc19wdXQoKS4gKi8KKwkgKiBjc3NfdHJ5Z2V0KCkgYW5kIGFuZCBjc3NfcHV0KCkuCisJICovCiAKIAlhdG9taWNfdCByZWZjbnQ7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCS8qIElEIGZvciB0aGlzIGNzcywgaWYgcG9zc2libGUgKi8KKwlzdHJ1Y3QgY3NzX2lkICppZDsKIH07CiAKIC8qIGJpdHMgaW4gc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgZmxhZ3MgZmllbGQgKi8KQEAgLTEyMCwxOSArMTI4LDI2IEBACiBlbnVtIHsKIAkvKiBDb250cm9sIEdyb3VwIGlzIGRlYWQgKi8KIAlDR1JQX1JFTU9WRUQsCi0JLyogQ29udHJvbCBHcm91cCBoYXMgcHJldmlvdXNseSBoYWQgYSBjaGlsZCBjZ3JvdXAgb3IgYSB0YXNrLAotCSAqIGJ1dCBubyBsb25nZXIgKG9ubHkgaWYgQ0dSUF9OT1RJRllfT05fUkVMRUFTRSBpcyBzZXQpICovCisJLyoKKwkgKiBDb250cm9sIEdyb3VwIGhhcyBwcmV2aW91c2x5IGhhZCBhIGNoaWxkIGNncm91cCBvciBhIHRhc2ssCisJICogYnV0IG5vIGxvbmdlciAob25seSBpZiBDR1JQX05PVElGWV9PTl9SRUxFQVNFIGlzIHNldCkKKwkgKi8KIAlDR1JQX1JFTEVBU0FCTEUsCiAJLyogQ29udHJvbCBHcm91cCByZXF1aXJlcyByZWxlYXNlIG5vdGlmaWNhdGlvbnMgdG8gdXNlcnNwYWNlICovCiAJQ0dSUF9OT1RJRllfT05fUkVMRUFTRSwKKwkvKgorCSAqIEEgdGhyZWFkIGluIHJtZGlyKCkgaXMgd2F0aW5nIGZvciB0aGlzIGNncm91cC4KKwkgKi8KKwlDR1JQX1dBSVRfT05fUk1ESVIsCiB9OwogCiBzdHJ1Y3QgY2dyb3VwIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogInVuc2lnbmVkIGxvbmciIHNvIGJpdG9wcyB3b3JrICovCiAKLQkvKiBjb3VudCB1c2VycyBvZiB0aGlzIGNncm91cC4gPjAgbWVhbnMgYnVzeSwgYnV0IGRvZXNuJ3QKLQkgKiBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIHRhc2tzIGluIHRoZQotCSAqIGNncm91cCAqLworCS8qCisJICogY291bnQgdXNlcnMgb2YgdGhpcyBjZ3JvdXAuID4wIG1lYW5zIGJ1c3ksIGJ1dCBkb2Vzbid0CisJICogbmVjZXNzYXJpbHkgaW5kaWNhdGUgdGhlIG51bWJlciBvZiB0YXNrcyBpbiB0aGUgY2dyb3VwCisJICovCiAJYXRvbWljX3QgY291bnQ7CiAKIAkvKgpAQCAtMTQyLDcgKzE1Nyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBzaWJsaW5nOwkvKiBteSBwYXJlbnQncyBjaGlsZHJlbiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CS8qIG15IGNoaWxkcmVuICovCiAKLQlzdHJ1Y3QgY2dyb3VwICpwYXJlbnQ7CS8qIG15IHBhcmVudCAqLworCXN0cnVjdCBjZ3JvdXAgKnBhcmVudDsJCS8qIG15IHBhcmVudCAqLwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsJICAJLyogY2dyb3VwIGZzIGVudHJ5LCBSQ1UgcHJvdGVjdGVkICovCiAKIAkvKiBQcml2YXRlIHBvaW50ZXJzIGZvciBlYWNoIHJlZ2lzdGVyZWQgc3Vic3lzdGVtICovCkBAIC0xNzcsMTEgKzE5MiwxMiBAQAogCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKIH07CiAKLS8qIEEgY3NzX3NldCBpcyBhIHN0cnVjdHVyZSBob2xkaW5nIHBvaW50ZXJzIHRvIGEgc2V0IG9mCisvKgorICogQSBjc3Nfc2V0IGlzIGEgc3RydWN0dXJlIGhvbGRpbmcgcG9pbnRlcnMgdG8gYSBzZXQgb2YKICAqIGNncm91cF9zdWJzeXNfc3RhdGUgb2JqZWN0cy4gVGhpcyBzYXZlcyBzcGFjZSBpbiB0aGUgdGFzayBzdHJ1Y3QKICAqIG9iamVjdCBhbmQgc3BlZWRzIHVwIGZvcmsoKS9leGl0KCksIHNpbmNlIGEgc2luZ2xlIGluYy9kZWMgYW5kIGEKLSAqIGxpc3RfYWRkKCkvZGVsKCkgY2FuIGJ1bXAgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgZW50aXJlCi0gKiBjZ3JvdXAgc2V0IGZvciBhIHRhc2suCisgKiBsaXN0X2FkZCgpL2RlbCgpIGNhbiBidW1wIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIGVudGlyZSBjZ3JvdXAKKyAqIHNldCBmb3IgYSB0YXNrLgogICovCiAKIHN0cnVjdCBjc3Nfc2V0IHsKQEAgLTIyNiwxMyArMjQyLDggQEAKIAl2b2lkICpzdGF0ZTsKIH07CiAKLS8qIHN0cnVjdCBjZnR5cGU6Ci0gKgotICogVGhlIGZpbGVzIGluIHRoZSBjZ3JvdXAgZmlsZXN5c3RlbSBtb3N0bHkgaGF2ZSBhIHZlcnkgc2ltcGxlIHJlYWQvd3JpdGUKLSAqIGhhbmRsaW5nLCBzb21lIGNvbW1vbiBmdW5jdGlvbiB3aWxsIHRha2UgY2FyZSBvZiBpdC4gTmV2ZXJ0aGVsZXNzIHNvbWUgY2FzZXMKLSAqIChyZWFkIHRhc2tzKSBhcmUgc3BlY2lhbCBhbmQgdGhlcmVmb3JlIEkgZGVmaW5lIHRoaXMgc3RydWN0dXJlIGZvciBldmVyeQotICoga2luZCBvZiBmaWxlLgotICoKKy8qCisgKiBzdHJ1Y3QgY2Z0eXBlOiBoYW5kbGVyIGRlZmluaXRpb25zIGZvciBjZ3JvdXAgY29udHJvbCBmaWxlcwogICoKICAqIFdoZW4gcmVhZGluZy93cml0aW5nIHRvIGEgZmlsZToKICAqCS0gdGhlIGNncm91cCB0byB1c2UgaXMgZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX2ZzZGF0YQpAQCAtMjQxLDEwICsyNTIsMTcgQEAKIAogI2RlZmluZSBNQVhfQ0ZUWVBFX05BTUUgNjQKIHN0cnVjdCBjZnR5cGUgewotCS8qIEJ5IGNvbnZlbnRpb24sIHRoZSBuYW1lIHNob3VsZCBiZWdpbiB3aXRoIHRoZSBuYW1lIG9mIHRoZQotCSAqIHN1YnN5c3RlbSwgZm9sbG93ZWQgYnkgYSBwZXJpb2QgKi8KKwkvKgorCSAqIEJ5IGNvbnZlbnRpb24sIHRoZSBuYW1lIHNob3VsZCBiZWdpbiB3aXRoIHRoZSBuYW1lIG9mIHRoZQorCSAqIHN1YnN5c3RlbSwgZm9sbG93ZWQgYnkgYSBwZXJpb2QKKwkgKi8KIAljaGFyIG5hbWVbTUFYX0NGVFlQRV9OQU1FXTsKIAlpbnQgcHJpdmF0ZTsKKwkvKgorCSAqIElmIG5vdCAwLCBmaWxlIG1vZGUgaXMgc2V0IHRvIHRoaXMgdmFsdWUsIG90aGVyd2lzZSBpdCB3aWxsCisJICogYmUgZmlndXJlZCBvdXQgYXV0b21hdGljYWxseQorCSAqLworCW1vZGVfdCBtb2RlOwogCiAJLyoKIAkgKiBJZiBub24temVybywgZGVmaW5lcyB0aGUgbWF4aW11bSBsZW5ndGggb2Ygc3RyaW5nIHRoYXQgY2FuCkBAIC0zMTksMTUgKzMzNywyMCBAQAogCXZvaWQgKCpwcm9jZXNzX3Rhc2spKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCXN0cnVjdCBjZ3JvdXBfc2Nhbm5lciAqc2Nhbik7CiAJc3RydWN0IHB0cl9oZWFwICpoZWFwOworCXZvaWQgKmRhdGE7CiB9OwogCi0vKiBBZGQgYSBuZXcgZmlsZSB0byB0aGUgZ2l2ZW4gY2dyb3VwIGRpcmVjdG9yeS4gU2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBieSBzdWJzeXN0ZW1zIGZyb20gd2l0aGluIGEgcG9wdWxhdGUoKSBtZXRob2QgKi8KKy8qCisgKiBBZGQgYSBuZXcgZmlsZSB0byB0aGUgZ2l2ZW4gY2dyb3VwIGRpcmVjdG9yeS4gU2hvdWxkIG9ubHkgYmUKKyAqIGNhbGxlZCBieSBzdWJzeXN0ZW1zIGZyb20gd2l0aGluIGEgcG9wdWxhdGUoKSBtZXRob2QKKyAqLwogaW50IGNncm91cF9hZGRfZmlsZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3Vic3lzLAogCQkgICAgICAgY29uc3Qgc3RydWN0IGNmdHlwZSAqY2Z0KTsKIAotLyogQWRkIGEgc2V0IG9mIG5ldyBmaWxlcyB0byB0aGUgZ2l2ZW4gY2dyb3VwIGRpcmVjdG9yeS4gU2hvdWxkCi0gKiBvbmx5IGJlIGNhbGxlZCBieSBzdWJzeXN0ZW1zIGZyb20gd2l0aGluIGEgcG9wdWxhdGUoKSBtZXRob2QgKi8KKy8qCisgKiBBZGQgYSBzZXQgb2YgbmV3IGZpbGVzIHRvIHRoZSBnaXZlbiBjZ3JvdXAgZGlyZWN0b3J5LiBTaG91bGQKKyAqIG9ubHkgYmUgY2FsbGVkIGJ5IHN1YnN5c3RlbXMgZnJvbSB3aXRoaW4gYSBwb3B1bGF0ZSgpIG1ldGhvZAorICovCiBpbnQgY2dyb3VwX2FkZF9maWxlcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQkJc3RydWN0IGNncm91cF9zdWJzeXMgKnN1YnN5cywKIAkJCWNvbnN0IHN0cnVjdCBjZnR5cGUgY2Z0W10sCkBAIC0zMzksMTUgKzM2MiwxOCBAQAogCiBpbnQgY2dyb3VwX3Rhc2tfY291bnQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCk7CiAKLS8qIFJldHVybiB0cnVlIGlmIHRoZSBjZ3JvdXAgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNncm91cCAqLwotaW50IGNncm91cF9pc19kZXNjZW5kYW50KGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnApOworLyogUmV0dXJuIHRydWUgaWYgY2dycCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIHRhc2sncyBjZ3JvdXAgKi8KK2ludCBjZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCi0vKiBDb250cm9sIEdyb3VwIHN1YnN5c3RlbSB0eXBlLiBTZWUgRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBmb3IgZGV0YWlscyAqLworLyoKKyAqIENvbnRyb2wgR3JvdXAgc3Vic3lzdGVtIHR5cGUuCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0IGZvciBkZXRhaWxzCisgKi8KIAogc3RydWN0IGNncm91cF9zdWJzeXMgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICooKmNyZWF0ZSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQkJCQkJICBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKLQl2b2lkICgqcHJlX2Rlc3Ryb3kpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCk7CisJaW50ICgqcHJlX2Rlc3Ryb3kpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCk7CiAJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCk7CiAJaW50ICgqY2FuX2F0dGFjaCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQkJICBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CkBAIC0zNjQsNiArMzkwLDExIEBACiAJaW50IGFjdGl2ZTsKIAlpbnQgZGlzYWJsZWQ7CiAJaW50IGVhcmx5X2luaXQ7CisJLyoKKwkgKiBUcnVlIGlmIHRoaXMgc3Vic3lzIHVzZXMgSUQuIElEIGlzIG5vdCBhdmFpbGFibGUgYmVmb3JlIGNncm91cF9pbml0KCkKKwkgKiAobm90IGF2YWlsYWJsZSBpbiBlYXJseV9pbml0IHRpbWUuKQorCSAqLworCWJvb2wgdXNlX2lkOwogI2RlZmluZSBNQVhfQ0dST1VQX1RZUEVfTkFNRUxFTiAzMgogCWNvbnN0IGNoYXIgKm5hbWU7CiAKQEAgLTM4Niw2ICs0MTcsOSBAQAogCSAqLwogCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290OwogCXN0cnVjdCBsaXN0X2hlYWQgc2libGluZzsKKwkvKiB1c2VkIHdoZW4gdXNlX2lkID09IHRydWUgKi8KKwlzdHJ1Y3QgaWRyIGlkcjsKKwlzcGlubG9ja190IGlkX2xvY2s7CiB9OwogCiAjZGVmaW5lIFNVQlNZUyhfeCkgZXh0ZXJuIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIF94ICMjIF9zdWJzeXM7CkBAIC00MTksNyArNDUzLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0YXNrOwogfTsKIAotLyogVG8gaXRlcmF0ZSBhY3Jvc3MgdGhlIHRhc2tzIGluIGEgY2dyb3VwOgorLyoKKyAqIFRvIGl0ZXJhdGUgYWNyb3NzIHRoZSB0YXNrcyBpbiBhIGNncm91cDoKICAqCiAgKiAxKSBjYWxsIGNncm91cF9pdGVyX3N0YXJ0IHRvIGludGlhbGl6ZSBhbiBpdGVyYXRvcgogICoKQEAgLTQyOCw5ICs0NjMsMTAgQEAKICAqCiAgKiAzKSBjYWxsIGNncm91cF9pdGVyX2VuZCgpIHRvIGRlc3Ryb3kgdGhlIGl0ZXJhdG9yLgogICoKLSAqIE9yLCBjYWxsIGNncm91cF9zY2FuX3Rhc2tzKCkgdG8gaXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5IHRhc2sgaW4gYSBjcHVzZXQuCi0gKiAgICAtIGNncm91cF9zY2FuX3Rhc2tzKCkgaG9sZHMgdGhlIGNzc19zZXRfbG9jayB3aGVuIGNhbGxpbmcgdGhlIHRlc3RfdGFzaygpCi0gKiAgICAgIGNhbGxiYWNrLCBidXQgbm90IHdoaWxlIGNhbGxpbmcgdGhlIHByb2Nlc3NfdGFzaygpIGNhbGxiYWNrLgorICogT3IsIGNhbGwgY2dyb3VwX3NjYW5fdGFza3MoKSB0byBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdGFzayBpbiBhCisgKiBjZ3JvdXAgLSBjZ3JvdXBfc2Nhbl90YXNrcygpIGhvbGRzIHRoZSBjc3Nfc2V0X2xvY2sgd2hlbiBjYWxsaW5nCisgKiB0aGUgdGVzdF90YXNrKCkgY2FsbGJhY2ssIGJ1dCBub3Qgd2hpbGUgY2FsbGluZyB0aGUgcHJvY2Vzc190YXNrKCkKKyAqIGNhbGxiYWNrLgogICovCiB2b2lkIGNncm91cF9pdGVyX3N0YXJ0KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZ3JvdXBfaXRlciAqaXQpOwogc3RydWN0IHRhc2tfc3RydWN0ICpjZ3JvdXBfaXRlcl9uZXh0KHN0cnVjdCBjZ3JvdXAgKmNncnAsCkBAIC00MzksNiArNDc1LDQ0IEBACiBpbnQgY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IGNncm91cF9zY2FubmVyICpzY2FuKTsKIGludCBjZ3JvdXBfYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKKy8qCisgKiBDU1MgSUQgaXMgSUQgZm9yIGNncm91cF9zdWJzeXNfc3RhdGUgc3RydWN0cyB1bmRlciBzdWJzeXMuIFRoaXMgb25seSB3b3JrcworICogaWYgY2dyb3VwX3N1YnN5cy51c2VfaWQgPT0gdHJ1ZS4gSXQgY2FuIGJlIHVzZWQgZm9yIGxvb2tpbmcgdXAgYW5kIHNjYW5uaW5nLgorICogQ1NTIElEIGlzIGFzc2lnbmVkIGF0IGNncm91cCBhbGxvY2F0aW9uIChjcmVhdGUpIGF1dG9tYXRpY2FsbHkKKyAqIGFuZCByZW1vdmVkIHdoZW4gc3Vic3lzIGNhbGxzIGZyZWVfY3NzX2lkKCkgZnVuY3Rpb24uIFRoaXMgaXMgYmVjYXVzZQorICogdGhlIGxpZmV0aW1lIG9mIGNncm91cF9zdWJzeXNfc3RhdGUgaXMgc3Vic3lzJ3MgbWF0dGVyLgorICoKKyAqIExvb2tpbmcgdXAgYW5kIHNjYW5uaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLgorICogVGFraW5nIGNncm91cF9tdXRleCgpL2hpZXJhcmNoeV9tdXRleCgpIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGZvbGxvd2luZyBjYWxscy4KKyAqIEJ1dCB0aGUgY3NzIHJldHVybmVkIGJ5IHRoaXMgcm91dGluZSBjYW4gYmUgIm5vdCBwb3B1bGF0ZWQgeWV0IiBvciAiYmVpbmcKKyAqIGRlc3Ryb3llZCIuIFRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrIGNzcyBhbmQgY2dyb3VwJ3Mgc3RhdHVzLgorICovCisKKy8qCisgKiBUeXBpY2FsbHkgQ2FsbGVkIGF0IC0+ZGVzdHJveSgpLCBvciBzb21ld2hlcmUgdGhlIHN1YnN5cyBmcmVlcworICogY2dyb3VwX3N1YnN5c19zdGF0ZS4KKyAqLwordm9pZCBmcmVlX2Nzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpOworCisvKiBGaW5kIGEgY2dyb3VwX3N1YnN5c19zdGF0ZSB3aGljaCBoYXMgZ2l2ZW4gSUQgKi8KKworc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzc19sb29rdXAoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBpbnQgaWQpOworCisvKgorICogR2V0IGEgY2dyb3VwIHdob3NlIGlkIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBpZCB1bmRlciB0cmVlIG9mIHJvb3QuCisgKiBSZXR1cm5pbmcgYSBjZ3JvdXBfc3Vic3lzX3N0YXRlIG9yIE5VTEwuCisgKi8KK3N0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3NfZ2V0X25leHQoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBpbnQgaWQsCisJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290LCBpbnQgKmZvdW5kaWQpOworCisvKiBSZXR1cm5zIHRydWUgaWYgcm9vdCBpcyBhbmNlc3RvciBvZiBjZyAqLworYm9vbCBjc3NfaXNfYW5jZXN0b3Ioc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNnLAorCQkgICAgIGNvbnN0IHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290KTsKKworLyogR2V0IGlkIGFuZCBkZXB0aCBvZiBjc3MgKi8KK3Vuc2lnbmVkIHNob3J0IGNzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTsKK3Vuc2lnbmVkIHNob3J0IGNzc19kZXB0aChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTsKKwogI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBTICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpIHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCmluZGV4IGI4ODA4NjQuLmYyZGVkMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaApAQCAtMTkxLDYgKzE5MSwxMiBAQAogCQljb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLCB1bnNpZ25lZCBsb25nIHZsZW4pOwogYXNtbGlua2FnZSBzc2l6ZV90IGNvbXBhdF9zeXNfd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsCiAJCWNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbik7Cithc21saW5rYWdlIHNzaXplX3QgY29tcGF0X3N5c19wcmVhZHYodW5zaWduZWQgbG9uZyBmZCwKKwkJY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKKwkJdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2xvdywgdTMyIHBvc19oaWdoKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBjb21wYXRfc3lzX3B3cml0ZXYodW5zaWduZWQgbG9uZyBmZCwKKwkJY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKKwkJdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2xvdywgdTMyIHBvc19oaWdoKTsKIAogaW50IGNvbXBhdF9kb19leGVjdmUoY2hhciAqIGZpbGVuYW1lLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKIAkgICAgICAgIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IGQ5NWRhMTAuLjZmYWE3ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTY4LDYgKzY4LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbWlzczsKIAkJCXVuc2lnbmVkIGxvbmcgaGl0OwogCQl9OworCQl1bnNpZ25lZCBsb25nIG1pc3NfaGl0WzJdOwogCX07CiB9OwogCkBAIC0xMjUsMTAgKzEyNiw3IEBACiAJCQkJLmxpbmUgPSBfX0xJTkVfXywJCQlcCiAJCQl9OwkJCQkJCVwKIAkJX19fX19fciA9ICEhKGNvbmQpOwkJCQkJXAotCQlpZiAoX19fX19fcikJCQkJCQlcCi0JCQlfX19fX19mLmhpdCsrOwkJCQkJXAotCQllbHNlCQkJCQkJCVwKLQkJCV9fX19fX2YubWlzcysrOwkJCQkJXAorCQlfX19fX19mLm1pc3NfaGl0W19fX19fX3JdKys7CQkJCQlcCiAJCV9fX19fX3I7CQkJCQkJXAogCX0pKQogI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaCBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKaW5kZXggZmM2NWQyMS4uYjk5NjZlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCkBAIC0zOSw4ICszOSwxMCBAQAogI2RlZmluZSBDTl9JRFhfVjg2RAkJCTB4NAogI2RlZmluZSBDTl9WQUxfVjg2RF9VVkVTQUZCCQkweDEKICNkZWZpbmUgQ05fSURYX0JCCQkJMHg1CS8qIEJsYWNrQm9hcmQsIGZyb20gdGhlIFRTUCBHUEwgc2FtcGxpbmcgZnJhbWV3b3JrICovCisjZGVmaW5lIENOX0RTVF9JRFgJCQkweDYKKyNkZWZpbmUgQ05fRFNUX1ZBTAkJCTB4MQogCi0jZGVmaW5lIENOX05FVExJTktfVVNFUlMJCTYKKyNkZWZpbmUgQ05fTkVUTElOS19VU0VSUwkJNwogCiAvKgogICogTWF4aW11bSBjb25uZWN0b3IncyBtZXNzYWdlIHNpemUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCBjMjc0N2FjLi4yNjQzZDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RydWN0IGNwdSB7CiAJaW50IG5vZGVfaWQ7CQkvKiBUaGUgbm9kZSB3aGljaCBjb250YWlucyB0aGUgQ1BVICovCkBAIC0xMDMsMTYgKzEwMiw2IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAvKiBTdG9wIENQVXMgZ29pbmcgdXAgYW5kIGRvd24uICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X2xvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17Ci0JbXV0ZXhfbG9jayhjcHVfaHBfbXV0ZXgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1aG90cGx1Z19tdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17Ci0JbXV0ZXhfdW5sb2NrKGNwdV9ocF9tdXRleCk7Ci19Ci0KIGV4dGVybiB2b2lkIGdldF9vbmxpbmVfY3B1cyh2b2lkKTsKIGV4dGVybiB2b2lkIHB1dF9vbmxpbmVfY3B1cyh2b2lkKTsKICNkZWZpbmUgaG90Y3B1X25vdGlmaWVyKGZuLCBwcmkpIHsJCQkJXApAQCAtMTI2LDExICsxMTUsNiBAQAogCiAjZWxzZQkJLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X2xvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X3VubG9jayhzdHJ1Y3QgbXV0ZXggKmNwdV9ocF9tdXRleCkKLXsgfQotCiAjZGVmaW5lIGdldF9vbmxpbmVfY3B1cygpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcHV0X29ubGluZV9jcHVzKCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBob3RjcHVfbm90aWZpZXIoZm4sIHByaSkJZG8geyAodm9pZCkoZm4pOyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaCBiL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKaW5kZXggMmUwZDc5Ni4uMDVlYTFkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2lmZGVmIENPTkZJR19DUFVTRVRTCiAKQEAgLTI5LDE5ICszMCwyOSBAQAogdm9pZCBjcHVzZXRfdXBkYXRlX3Rhc2tfbWVtb3J5X3N0YXRlKHZvaWQpOwogaW50IGNwdXNldF9ub2RlbWFza192YWxpZF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCAqbm9kZW1hc2spOwogCi1leHRlcm4gaW50IF9fY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spOwotZXh0ZXJuIGludCBfX2NwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKTsKK2V4dGVybiBpbnQgX19jcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKGludCBub2RlLCBnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gaW50IF9fY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spOwogCi1zdGF0aWMgaW50IGlubGluZSBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHN0cnVjdCB6b25lICp6LCBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKQogewogCXJldHVybiBudW1iZXJfb2ZfY3B1c2V0cyA8PSAxIHx8Ci0JCV9fY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCh6LCBnZnBfbWFzayk7CisJCV9fY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbChub2RlLCBnZnBfbWFzayk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJcmV0dXJuIG51bWJlcl9vZl9jcHVzZXRzIDw9IDEgfHwKLQkJX19jcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHosIGdmcF9tYXNrKTsKKwkJX19jcHVzZXRfbm9kZV9hbGxvd2VkX2hhcmR3YWxsKG5vZGUsIGdmcF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoem9uZV90b19uaWQoeiksIGdmcF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIGNwdXNldF9ub2RlX2FsbG93ZWRfaGFyZHdhbGwoem9uZV90b19uaWQoeiksIGdmcF9tYXNrKTsKIH0KIAogZXh0ZXJuIGludCBjcHVzZXRfbWVtc19hbGxvd2VkX2ludGVyc2VjdHMoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0c2sxLApAQCAtMTEyLDYgKzEyMywxNiBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQogewogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmggYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaAppbmRleCBhZjBlMDFkLi5lYjVjMmJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaApAQCAtNzEsNiArNzEsOSBAQAogc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfYmxvYihjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKIAkJCQkgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAkJCQkgIHN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciAqYmxvYik7CisKK2Jvb2wgZGVidWdmc19pbml0aWFsaXplZCh2b2lkKTsKKwogI2Vsc2UKIAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMTgzLDYgKzE4NiwxMSBAQAogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgZGVidWdmc19pbml0aWFsaXplZCh2b2lkKQoreworCXJldHVybiBmYWxzZTsKK30KKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAppbmRleCA4MjA5ZTA4Li42NmVjMDVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaApAQCAtMTM5LDYgKzEzOSw5IEBACiAJZG1faW9jdGxfZm4gaW9jdGw7CiAJZG1fbWVyZ2VfZm4gbWVyZ2U7CiAJZG1fYnVzeV9mbiBidXN5OworCisJLyogRm9yIGludGVybmFsIGRldmljZS1tYXBwZXIgdXNlLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKIHN0cnVjdCBpb19yZXN0cmljdGlvbnMgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1kaXJ0eS1sb2cuaCBiL2luY2x1ZGUvbGludXgvZG0tZGlydHktbG9nLmgKaW5kZXggNjAwYzVmYi4uNWU4YjExZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbS1kaXJ0eS1sb2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWRpcnR5LWxvZy5oCkBAIC0yOCw2ICsyOCw5IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAKKwkvKiBGb3IgaW50ZXJuYWwgZGV2aWNlLW1hcHBlciB1c2UgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKIAlpbnQgKCpjdHIpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZywgc3RydWN0IGRtX3RhcmdldCAqdGksCiAJCSAgIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KTsKIAl2b2lkICgqZHRyKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cpOwpAQCAtMTEzLDYgKzExNiwxNiBAQAogCSAqLwogCWludCAoKnN0YXR1cykoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCBzdGF0dXNfdHlwZV90IHN0YXR1c190eXBlLAogCQkgICAgICBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIG1heGxlbik7CisKKwkvKgorCSAqIGlzX3JlbW90ZV9yZWNvdmVyaW5nIGlzIG5lY2Vzc2FyeSBmb3IgY2x1c3RlciBtaXJyb3JpbmcuIEl0IHByb3ZpZGVzCisJICogYSB3YXkgdG8gZGV0ZWN0IHJlY292ZXJ5IG9uIGFub3RoZXIgbm9kZSwgc28gd2UgYXJlbid0IHdyaXRpbmcKKwkgKiBjb25jdXJyZW50bHkuICBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0byBibG9jayAod2hlbiBhIGNsdXN0ZXIgbG9nCisJICogaXMgdXNlZCkuCisJICoKKwkgKiBSZXR1cm5zOiAwLCAxCisJICovCisJaW50ICgqaXNfcmVtb3RlX3JlY292ZXJpbmcpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZywgcmVnaW9uX3QgcmVnaW9uKTsKIH07CiAKIGludCBkbV9kaXJ0eV9sb2dfdHlwZV9yZWdpc3RlcihzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaAppbmRleCBhZjFkYWI0Li4xYTQ1NWYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaApAQCAtMTEsNiArMTEsNyBAQAogCiAjZGVmaW5lIERNQV9QVEVfUkVBRCAoMSkKICNkZWZpbmUgRE1BX1BURV9XUklURSAoMikKKyNkZWZpbmUgRE1BX1BURV9TTlAgKDEgPDwgMTEpCiAKIHN0cnVjdCBpbnRlbF9pb21tdTsKIHN0cnVjdCBkbWFyX2RvbWFpbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmggYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCmluZGV4IDE5NTZjOGQuLjJlMmFhM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaApAQCAtMjMsOSArMjMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKIC8qKgpAQCAtMjA1LDYgKzIwMiw3IEBACiAvKioKICAqIHN0cnVjdCBkbWFfZGV2aWNlIC0gaW5mbyBvbiB0aGUgZW50aXR5IHN1cHBseWluZyBETUEgc2VydmljZXMKICAqIEBjaGFuY250OiBob3cgbWFueSBETUEgY2hhbm5lbHMgYXJlIHN1cHBvcnRlZAorICogQHByaXZhdGVjbnQ6IGhvdyBtYW55IERNQSBjaGFubmVscyBhcmUgcmVxdWVzdGVkIGJ5IGRtYV9yZXF1ZXN0X2NoYW5uZWwKICAqIEBjaGFubmVsczogdGhlIGxpc3Qgb2Ygc3RydWN0IGRtYV9jaGFuCiAgKiBAZ2xvYmFsX25vZGU6IGxpc3RfaGVhZCBmb3IgZ2xvYmFsIGRtYV9kZXZpY2VfbGlzdAogICogQGNhcF9tYXNrOiBvbmUgb3IgbW9yZSBkbWFfY2FwYWJpbGl0eSBmbGFncwpAQCAtMjI3LDYgKzIyNSw3IEBACiBzdHJ1Y3QgZG1hX2RldmljZSB7CiAKIAl1bnNpZ25lZCBpbnQgY2hhbmNudDsKKwl1bnNpZ25lZCBpbnQgcHJpdmF0ZWNudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoYW5uZWxzOwogCXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX25vZGU7CiAJZG1hX2NhcF9tYXNrX3QgIGNhcF9tYXNrOwpAQCAtMjkxLDYgKzI5MCwyNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVNZTkNfVFhfRE1BCisjZGVmaW5lIGFzeW5jX2RtYWVuZ2luZV9nZXQoKQlkbWFlbmdpbmVfZ2V0KCkKKyNkZWZpbmUgYXN5bmNfZG1hZW5naW5lX3B1dCgpCWRtYWVuZ2luZV9wdXQoKQorI2RlZmluZSBhc3luY19kbWFfZmluZF9jaGFubmVsKHR5cGUpIGRtYV9maW5kX2NoYW5uZWwodHlwZSkKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfZG1hZW5naW5lX2dldCh2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGFzeW5jX2RtYWVuZ2luZV9wdXQodm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9jaGFuICoKK2FzeW5jX2RtYV9maW5kX2NoYW5uZWwoZW51bSBkbWFfdHJhbnNhY3Rpb25fdHlwZSB0eXBlKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKIGRtYV9jb29raWVfdCBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19idWYoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCXZvaWQgKmRlc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbik7CiBkbWFfY29va2llX3QgZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcoc3RydWN0IGRtYV9jaGFuICpjaGFuLApAQCAtMzM3LDYgKzM1NCwxMyBAQAogCXNldF9iaXQodHhfdHlwZSwgZHN0cC0+Yml0cyk7CiB9CiAKKyNkZWZpbmUgZG1hX2NhcF9jbGVhcih0eCwgbWFzaykgX19kbWFfY2FwX2NsZWFyKCh0eCksICYobWFzaykpCitzdGF0aWMgaW5saW5lIHZvaWQKK19fZG1hX2NhcF9jbGVhcihlbnVtIGRtYV90cmFuc2FjdGlvbl90eXBlIHR4X3R5cGUsIGRtYV9jYXBfbWFza190ICpkc3RwKQoreworCWNsZWFyX2JpdCh0eF90eXBlLCBkc3RwLT5iaXRzKTsKK30KKwogI2RlZmluZSBkbWFfY2FwX3plcm8obWFzaykgX19kbWFfY2FwX3plcm8oJihtYXNrKSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RtYV9jYXBfemVybyhkbWFfY2FwX21hc2tfdCAqZHN0cCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHN0LmggYi9pbmNsdWRlL2xpbnV4L2RzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNmZlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RzdC5oCkBAIC0wLDAgKzEsNTg3IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0RTVF9ICisjZGVmaW5lIF9fRFNUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisKKyNkZWZpbmUgRFNUX05BTUVMRU4JCTMyCisjZGVmaW5lIERTVF9OQU1FCQkiZHN0IgorCitlbnVtIHsKKwkvKiBSZW1vdmUgbm9kZSB3aXRoIGdpdmVuIGlkIGZyb20gc3RvcmFnZSAqLworCURTVF9ERUxfTk9ERQk9IDAsCisJLyogQWRkIHJlbW90ZSBub2RlIHdpdGggZ2l2ZW4gaWQgdG8gdGhlIHN0b3JhZ2UgKi8KKwlEU1RfQUREX1JFTU9URSwKKwkvKiBBZGQgbG9jYWwgbm9kZSB3aXRoIGdpdmVuIGlkIHRvIHRoZSBzdG9yYWdlIHRvIGJlIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHJlbW90ZSBwZWVycyAqLworCURTVF9BRERfRVhQT1JULAorCS8qIENyeXB0byBpbml0aWFsaXphdGlvbiBjb21tYW5kIChoYXNoL2NpcGhlciB1c2VkIHRvIHByb3RlY3QgdGhlIGNvbm5lY3Rpb24pICovCisJRFNUX0NSWVBUTywKKwkvKiBTZWN1cml0eSBhdHRyaWJ1dGVzIGZvciBnaXZlbiBjb25uZWN0aW9uIChwZXJtaXNzaW9ucyBmb3IgZXhhbXBsZSkgKi8KKwlEU1RfU0VDVVJJVFksCisJLyogUmVnaXN0ZXIgZ2l2ZW4gbm9kZSBpbiB0aGUgYmxvY2sgbGF5ZXIgc3Vic3lzdGVtICovCisJRFNUX1NUQVJULAorCURTVF9DTURfTUFYCit9OworCitzdHJ1Y3QgZHN0X2N0bAoreworCS8qIFN0b3JhZ2UgbmFtZSAqLworCWNoYXIJCQluYW1lW0RTVF9OQU1FTEVOXTsKKwkvKiBDb21tYW5kIGZsYWdzICovCisJX191MzIJCQlmbGFnczsKKwkvKiBDb21tYW5kIGl0c2VsZiAoc2VlIGFib3ZlKSAqLworCV9fdTMyCQkJY21kOworCS8qIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHBlciBzaW5nbGUgcmVxdWVzdCBpbiB0aGlzIGRldmljZSAqLworCV9fdTMyCQkJbWF4X3BhZ2VzOworCS8qIFN0YWxlL2Vycm9yIHRyYW5zYWN0aW9uIHNjYW5uaW5nIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCisJX191MzIJCQl0cmFuc19zY2FuX3RpbWVvdXQ7CisJLyogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgc2VuZHMgYmVmb3JlIGNvbXBsZXRpbmcgdHJhbnNhY3Rpb24gYXMgYnJva2VuICovCisJX191MzIJCQl0cmFuc19tYXhfcmV0cmllczsKKwkvKiBTdG9yYWdlIHNpemUgKi8KKwlfX3U2NAkJCXNpemU7Cit9OworCisvKiBSZXBseSBjb21tYW5kIGNhcnJpZXMgY29tcGxldGlvbiBzdGF0dXMgKi8KK3N0cnVjdCBkc3RfY3RsX2FjaworeworCXN0cnVjdCBjbl9tc2cJCW1zZzsKKwlpbnQJCQllcnJvcjsKKwlpbnQJCQl1bnVzZWRbM107Cit9OworCisvKgorICogVW5mb3J0dW5hbHRlbHkgc29ja2V0IGFkZHJlc3Mgc3RydWN0dXJlIGlzIG5vdCBleHBvcnRlZCB0byB1c2Vyc3BhY2UKKyAqIGFuZCBpcyByZWRlZmluZWQgdGhlcmUuCisgKi8KKyNkZWZpbmUgU0FERFJfTUFYX0RBVEEJMTI4CisKK3N0cnVjdCBzYWRkciB7CisJLyogYWRkcmVzcyBmYW1pbHksIEFGX3h4eAkqLworCXVuc2lnbmVkIHNob3J0CQlzYV9mYW1pbHk7CisJLyogMTQgYnl0ZXMgb2YgcHJvdG9jb2wgYWRkcmVzcwkqLworCWNoYXIJCQlzYV9kYXRhW1NBRERSX01BWF9EQVRBXTsKKwkvKiBOdW1iZXIgb2YgYnl0ZXMgdXNlZCBpbiBzYV9kYXRhICovCisJdW5zaWduZWQgc2hvcnQJCXNhX2RhdGFfbGVuOworfTsKKworLyogQWRkcmVzcyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkc3RfbmV0d29ya19jdGwKK3sKKwkvKiBTb2NrZXQgdHlwZTogZGF0YWdyYW0sIHN0cmVhbS4uLiovCisJdW5zaWduZWQgaW50CQl0eXBlOworCS8qIExldCBtZSBndWVzcywgaXMgaXQgYSBKdXBpdGVyIGRpYW1ldGVyPyAqLworCXVuc2lnbmVkIGludAkJcHJvdG87CisJLyogUGVlcidzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc2FkZHIJCWFkZHI7Cit9OworCitzdHJ1Y3QgZHN0X2NyeXB0b19jdGwKK3sKKwkvKiBDaXBoZXIgYW5kIGhhc2ggbmFtZXMgKi8KKwljaGFyCQkJY2lwaGVyX2FsZ29bRFNUX05BTUVMRU5dOworCWNoYXIJCQloYXNoX2FsZ29bRFNUX05BTUVMRU5dOworCisJLyogS2V5IHNpemVzLiBDYW4gYmUgemVybyBmb3IgZGlnZXN0IGZvciBleGFtcGxlICovCisJdW5zaWduZWQgaW50CQljaXBoZXJfa2V5c2l6ZSwgaGFzaF9rZXlzaXplOworCS8qIEFsaWdubWVudC4gQ2FsY3VsYXRlZCBieSB0aGUgRFNUIGl0c2VsZi4gKi8KKwl1bnNpZ25lZCBpbnQJCWNyeXB0b19hdHRhY2hlZF9zaXplOworCS8qIE51bWJlciBvZiB0aHJlYWRzIHRvIHBlcmZvcm0gY3J5cHRvIG9wZXJhdGlvbnMgKi8KKwlpbnQJCQl0aHJlYWRfbnVtOworfTsKKworLyogRXhwb3J0IHNlY3VyaXR5IGF0dHJpYnV0ZXMgaGF2ZSB0aGlzIGJpdHMgY2hlY2tlZCBpbiB3aGVuIGNsaWVudCBjb25uZWN0cyAqLworI2RlZmluZSBEU1RfUEVSTV9SRUFECQkoMTw8MCkKKyNkZWZpbmUgRFNUX1BFUk1fV1JJVEUJCSgxPDwxKQorCisvKgorICogUmlnaHQgbm93IGl0IGlzIHNpbXBsZSBtb2RlbCwgd2hlcmUgZWFjaCByZW1vdGUgYWRkcmVzcworICogaXMgYXNzaWduZWQgdG8gc2V0IG9mIHBlcm1pc3Npb25zIGl0IGlzIGFsbG93ZWQgdG8gcGVyZm9ybS4KKyAqIEluIHJlYWwgd29ybGQgYmxvY2sgZGV2aWNlIGRvZXMgbm90IGtub3cgYW55dGhpbmcgYnV0CisgKiByZWFkaW5nIGFuZCB3cml0aW5nLCBzbyBpdCBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaC4KKyAqLworc3RydWN0IGRzdF9zZWN1cmVfdXNlcgoreworCXVuc2lnbmVkIGludAkJcGVybWlzc2lvbnM7CisJc3RydWN0IHNhZGRyCQlhZGRyOworfTsKKworLyoKKyAqIEV4cG9ydCBjb250cm9sIGNvbW1hbmQ6IGRldmljZSB0byBleHBvcnQgYW5kIG5ldHdvcmsgYWRkcmVzcyB0byBhY2NlcHQKKyAqIGNsaWVudHMgdG8gd29yayB3aXRoIGdpdmVuIGRldmljZQorICovCitzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwKK3sKKwljaGFyCQkJZGV2aWNlW0RTVF9OQU1FTEVOXTsKKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCWN0bDsKK307CisKK2VudW0geworCURTVF9DRkcJPSAxLCAJCS8qIFJlcXVlc3QgcmVtb3RlIGNvbmZpZ3VyYXRpb24gKi8KKwlEU1RfSU8sCQkJLyogSU8gY29tbWFuZCAqLworCURTVF9JT19SRVNQT05TRSwJLyogSU8gcmVzcG9uc2UgKi8KKwlEU1RfUElORywJCS8qIEtlZXBhbGl2ZSBtZXNzYWdlICovCisJRFNUX05DTURfTUFYLAorfTsKKworc3RydWN0IGRzdF9jbWQKK3sKKwkvKiBOZXR3b3JrIGNvbW1hbmQgaXRzZWxmLCBzZWUgYWJvdmUgKi8KKwlfX3UzMgkJCWNtZDsKKwkvKgorCSAqIFNpemUgb2YgdGhlIGF0dGFjaGVkIGRhdGEKKwkgKiAoaW4gbW9zdCBjYXNlcywgZm9yIFJFQUQgY29tbWFuZCBpdCBtZWFucyBob3cgbWFueSBieXRlcyB3ZXJlIHJlcXVlc3RlZCkKKwkgKi8KKwlfX3UzMgkJCXNpemU7CisJLyogQ3J5cHRvIHNpemU6IG51bWJlciBvZiBhdHRhY2hlZCBieXRlcyB3aXRoIGRpZ2VzdC9obWFjICovCisJX191MzIJCQljc2l6ZTsKKwkvKiBIZXJlIHdlIGNhbiBjYXJyeSBzZWNyZXQgZGF0YSAqLworCV9fdTMyCQkJcmVzZXJ2ZWQ7CisJLyogUmVhZC93cml0ZSBiaXRzLCBzZWUgaG93IHRoZXkgYXJlIGVuY29kZWQgaW4gYmlvIHN0cnVjdHVyZSAqLworCV9fdTY0CQkJcnc7CisJLyogQklPIGZsYWdzICovCisJX191NjQJCQlmbGFnczsKKwkvKiBVbmlxdWUgY29tbWFuZCBpZCAobGlrZSB0cmFuc2FjdGlvbiBJRCkgKi8KKwlfX3U2NAkJCWlkOworCS8qIFNlY3RvciB0byBzdGFydCBJTyBmcm9tICovCisJX191NjQJCQlzZWN0b3I7CisJLyogSGFzaCBkYXRhIGlzIHBsYWNlZCBhZnRlciB0aGlzIGhlYWRlciAqLworCV9fdTgJCQloYXNoWzBdOworfTsKKworLyoKKyAqIENvbnZlcnQgY29tbWFuZCB0by9mcm9tIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqIFdlIGRvIG5vdCB1c2UgaHRvbiooKSBmdW5jdGlvbnMsIHNpbmNlIHRoZXJlIGlzCisgKiBubyA2NC1iaXQgaW1wbGVtZW50YXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3RfY29udmVydF9jbWQoc3RydWN0IGRzdF9jbWQgKmMpCit7CisJYy0+Y21kID0gX19jcHVfdG9fYmUzMihjLT5jbWQpOworCWMtPmNzaXplID0gX19jcHVfdG9fYmUzMihjLT5jc2l6ZSk7CisJYy0+c2l6ZSA9IF9fY3B1X3RvX2JlMzIoYy0+c2l6ZSk7CisJYy0+c2VjdG9yID0gX19jcHVfdG9fYmU2NChjLT5zZWN0b3IpOworCWMtPmlkID0gX19jcHVfdG9fYmU2NChjLT5pZCk7CisJYy0+ZmxhZ3MgPSBfX2NwdV90b19iZTY0KGMtPmZsYWdzKTsKKwljLT5ydyA9IF9fY3B1X3RvX2JlNjQoYy0+cncpOworfQorCisvKiBUcmFuc2FjdGlvbiBpZCAqLwordHlwZWRlZiBfX3U2NCBkc3RfZ2VuX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorCisjaWZkZWYgQ09ORklHX0RTVF9ERUJVRworI2RlZmluZSBkcHJpbnRrKGYsIGEuLi4pIHByaW50ayhLRVJOX05PVElDRSBmLCAjI2EpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorCWRwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pIHt9CisjZW5kaWYKKworc3RydWN0IGRzdF9ub2RlOworCitzdHJ1Y3QgZHN0X3RyYW5zCit7CisJLyogRFNUIG5vZGUgd2UgYXJlIHdvcmtpbmcgd2l0aCAqLworCXN0cnVjdCBkc3Rfbm9kZQkJKm47CisKKwkvKiBFbnRyeSBpbnNpZGUgdHJhbnNhY3Rpb24gdHJlZSAqLworCXN0cnVjdCByYl9ub2RlCQl0cmFuc19lbnRyeTsKKworCS8qIE1lcmxpbiBraWxscyB0aGlzIHRyYW5zYWN0aW9uIHdoZW4gdGhpcyBtZW1vcnkgY2VsbCBlcXVhbHMgemVybyAqLworCWF0b21pY190CQlyZWZjbnQ7CisKKwkvKiBIb3cgdGhpcyB0cmFuc2FjdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IGNyeXB0byBlbmdpbmUgKi8KKwlzaG9ydAkJCWVuYzsKKwkvKiBIb3cgbWFueSB0aW1lcyB0aGlzIHRyYW5zYWN0aW9uIHdhcyByZXNlbnQgKi8KKwlzaG9ydAkJCXJldHJpZXM7CisJLyogQ29tcGxldGlvbiBzdGF0dXMgKi8KKwlpbnQJCQllcnJvcjsKKworCS8qIFdoZW4gZGlkIHdlIHNlbmQgaXQgdG8gdGhlIHJlbW90ZSBwZWVyICovCisJbG9uZwkJCXNlbmRfdGltZTsKKworCS8qIE15IG5hbWUgaXMuLi4KKwkgKiBXZWxsLCBjb21wdXRlcnMgZG9lcyBub3Qgc3BlYWssIHRoZXkgaGF2ZSB1bmlxdWUgaWQgaW5zdGVhZCAqLworCWRzdF9nZW5fdAkJZ2VuOworCisJLyogQmxvY2sgSU8gd2UgYXJlIHdvcmtpbmcgd2l0aCAqLworCXN0cnVjdCBiaW8JCSpiaW87CisKKwkvKiBOZXR3b3JrIGNvbW1hbmQgZm9yIGFib3ZlIGJsb2NrIElPIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgZHN0X2NtZAkJY21kOworfTsKKworc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lCit7CisJLyogV2hhdCBzaG91bGQgd2UgZG8gd2l0aCBhbGwgYmxvY2sgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgY3J5cHRvX2hhc2gJKmhhc2g7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyCSpjaXBoZXI7CisKKwkvKiBQb29sIG9mIHBhZ2VzIHVzZWQgdG8gZW5jcnlwdCBkYXRhIGludG8gYmVmb3JlIHNlbmRpbmcgKi8KKwlpbnQJCQlwYWdlX251bTsKKwlzdHJ1Y3QgcGFnZQkJKipwYWdlczsKKworCS8qIFdoYXQgdG8gZG8gd2l0aCBjdXJyZW50IHJlcXVlc3QgKi8KKwlpbnQJCQllbmM7CisJLyogV2hvIHdlIGFyZSBhbmQgd2hlcmUgZG8gd2UgZ28gKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNyYywgKmRzdDsKKworCS8qIE1heGltdW0gdGltZW91dCB3YWl0aW5nIGZvciBlbmNyeXB0aW9uIHRvIGJlIGNvbXBsZXRlZCAqLworCWxvbmcJCQl0aW1lb3V0OworCS8qIElWIGlzIGEgNjQtYml0IHNlcXVlbnRpYWwgY291bnRlciAqLworCXU2NAkJCWl2OworCisJLyogU2VjcmV0IGRhdGEgKi8KKwl2b2lkCQkJKnByaXZhdGU7CisKKwkvKiBDYWNoZWQgdGVtcG9yYXJ5IGRhdGEgbGl2ZXMgaGVyZSAqLworCWludAkJCXNpemU7CisJdm9pZAkJCSpkYXRhOworfTsKKworc3RydWN0IGRzdF9zdGF0ZQoreworCS8qIFRoZSBtYWluIHN0YXRlIHByb3RlY3Rpb24gKi8KKwlzdHJ1Y3QgbXV0ZXgJCXN0YXRlX2xvY2s7CisKKwkvKiBQb2xsaW5nIG1hY2hpbmVyeSBmb3Igc29ja2V0cyAqLworCXdhaXRfcXVldWVfdCAJCXdhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgCSp3aGVhZDsKKwkvKiBNb3N0IG9mIGV2ZW50cyBhcmUgYmVpbmcgd2FpdGVkIGhlcmUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCAJdGhyZWFkX3dhaXQ7CisKKwkvKiBXaG8gb3ducyB0aGlzPyAqLworCXN0cnVjdCBkc3Rfbm9kZQkJKm5vZGU7CisKKwkvKiBOZXR3b3JrIGFkZHJlc3MgZm9yIHRoaXMgc3RhdGUgKi8KKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCWN0bDsKKworCS8qIFBlcm1pc3Npb25zIHRvIHdvcmsgd2l0aDogcmVhZC1vbmx5IG9yIHJ3IGNvbm5lY3Rpb24gKi8KKwl1MzIJCQlwZXJtaXNzaW9uczsKKworCS8qIENhbGxlZCB3aGVuIHdlIG5lZWQgdG8gY2xlYW4gcHJpdmF0ZSBkYXRhICovCisJdm9pZAkJCSgqIGNsZWFudXApKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKKworCS8qIFVzZWQgYnkgdGhlIHNlcnZlcjogQklPIGNvbXBsZXRpb24gcXVldWVzIEJJT3MgaGVyZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmVxdWVzdF9saXN0OworCXNwaW5sb2NrX3QJCXJlcXVlc3RfbG9jazsKKworCS8qIEd1ZXNzIHdoYXQ/IE5vLCBpdCBpcyBub3QgbnVtYmVyIG9mIHBsYW5ldHMgKi8KKwlhdG9taWNfdAkJcmVmY250OworCisJLyogVGhpcyBmbGFncyBpcyBzZXQgd2hlbiBjb25uZWN0aW9uIHNob3VsZCBiZSBkcm9wcGVkICovCisJaW50CQkJbmVlZF9leGl0OworCisJLyoKKwkgKiBTb2NrZXQgdG8gd29yayB3aXRoLiBTZWNvbmQgcG9pbnRlciBpcyB1c2VkIGZvcgorCSAqIGxvY2tsZXNzIGNoZWNrIGlmIHNvY2tldCB3YXMgY2hhbmdlZCBiZWZvcmUgcGVyZm9ybWluZworCSAqIG5leHQgYWN0aW9uIChsaWtlIHdvcmtpbmcgd2l0aCBjYWNoZWQgcG9sbGluZyByZXN1bHQpCisJICovCisJc3RydWN0IHNvY2tldAkJKnNvY2tldCwgKnJlYWRfc29ja2V0OworCisJLyogQ2FjaGVkIHByZWFsbG9jYXRlZCBkYXRhICovCisJdm9pZAkJCSpkYXRhOworCXVuc2lnbmVkIGludAkJc2l6ZTsKKworCS8qIEN1cnJlbnRseSBwcm9jZXNzZWQgY29tbWFuZCAqLworCXN0cnVjdCBkc3RfY21kCQljbWQ7Cit9OworCitzdHJ1Y3QgZHN0X2luZm8KK3sKKwkvKiBEZXZpY2Ugc2l6ZSAqLworCXU2NAkJCXNpemU7CisKKwkvKiBMb2NhbCBkZXZpY2UgbmFtZSBmb3IgZXhwb3J0IGRldmljZXMgKi8KKwljaGFyCQkJbG9jYWxbRFNUX05BTUVMRU5dOworCisJLyogTmV0d29yayBzZXR1cCAqLworCXN0cnVjdCBkc3RfbmV0d29ya19jdGwJbmV0OworCisJLyogU3lzZnMgYml0cyB1c2UgdGhpcyAqLworCXN0cnVjdCBkZXZpY2UJCWRldmljZTsKK307CisKK3N0cnVjdCBkc3Rfbm9kZQoreworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZV9lbnRyeTsKKworCS8qIEhpLCBteSBuYW1lIGlzIHN0b3JlZCBoZXJlICovCisJY2hhcgkJCW5hbWVbRFNUX05BTUVMRU5dOworCS8qIE15IGNhY2hlIG5hbWUgaXMgc3RvcmVkIGhlcmUgKi8KKwljaGFyCQkJY2FjaGVfbmFtZVtEU1RfTkFNRUxFTl07CisKKwkvKiBCbG9jayBkZXZpY2UgYXR0YWNoZWQgdG8gZ2l2ZW4gbm9kZS4KKwkgKiBPbmx5IHZhbGlkIGZvciBleHBvcnRpbmcgbm9kZXMgKi8KKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlIAkqYmRldjsKKwkvKiBOZXR3b3JrIHN0YXRlIG1hY2hpbmUgZm9yIGdpdmVuIHBlZXIgKi8KKwlzdHJ1Y3QgZHN0X3N0YXRlCSpzdGF0ZTsKKworCS8qIEJsb2NrIElPIG1hY2hpbmVyeSAqLworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCSpxdWV1ZTsKKwlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7CisKKwkvKiBOdW1iZXIgb2YgdGhyZWFkcyBpbiBwcm9jZXNzaW5nIHBvb2wgKi8KKwlpbnQJCQl0aHJlYWRfbnVtOworCS8qIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGluIHNpbmdsZSBJTyAqLworCWludAkJCW1heF9wYWdlczsKKworCS8qIEknbSB0aGF0IGJpZyBpbiBieXRlcyAqLworCWxvZmZfdAkJCXNpemU7CisKKwkvKiBFeHBvcnRlZCB0byB1c2Vyc3BhY2Ugbm9kZSBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBkc3RfaW5mbwkJKmluZm87CisKKwkvKgorCSAqIFNlY3VyaXR5IGF0dHJpYnV0ZSBsaXN0LgorCSAqIFVzZWQgb25seSBieSBleHBvcnRpbmcgbm9kZSBjdXJyZW50bHkuCisJICovCisJc3RydWN0IGxpc3RfaGVhZAlzZWN1cml0eV9saXN0OworCXN0cnVjdCBtdXRleAkJc2VjdXJpdHlfbG9jazsKKworCS8qCisJICogV2hlbiB0aGlzIHVuZXJmbG93cyBiZWxvdyB6ZXJvLCB1bml2ZXJzaXR5IGNvbGxhcHNlcy4KKwkgKiBCdXQgdGhpcyB3aWxsIG5vdCBoYXBwZW4sIHNpbmNlIG5vZGUgd2lsbCBiZSBmcmVlZCwKKwkgKiB3aGVuIHJlZmVyZW5jZSBjb3VudGVyIHJlYWNoZXMgemVyby4KKwkgKi8KKwlhdG9taWNfdAkJcmVmY250OworCisJLyogSG93IHByZWNpc2VseSBzaG91bGQgSSBiZSBzdGFydGVkPyAqLworCWludCAJCQkoKnN0YXJ0KShzdHJ1Y3QgZHN0X25vZGUgKik7CisKKwkvKiBDcnlwdG8gY2FwYWJpbGl0aWVzICovCisJc3RydWN0IGRzdF9jcnlwdG9fY3RsCWNyeXB0bzsKKwl1OAkJCSpoYXNoX2tleTsKKwl1OAkJCSpjaXBoZXJfa2V5OworCisJLyogUG9vbCBvZiBwcm9jZXNzaW5nIHRocmVhZCAqLworCXN0cnVjdCB0aHJlYWRfcG9vbAkqcG9vbDsKKworCS8qIFRyYW5zYWN0aW9uIElEcyBsaXZlIGhlcmUgKi8KKwlhdG9taWNfbG9uZ190CQlnZW47CisKKwkvKgorCSAqIEhvdyBmcmVxdWVudGx5IGFuZCBob3cgbWFueSB0aW1lcyB0cmFuc2FjdGlvbgorCSAqIHRyZWUgc2hvdWxkIGJlIHNjYW5uZWQgdG8gZHJvcCBzdGFsZSBvYmplY3RzLgorCSAqLworCWxvbmcJCQl0cmFuc19zY2FuX3RpbWVvdXQ7CisJaW50CQkJdHJhbnNfbWF4X3JldHJpZXM7CisKKwkvKiBTbWFsbCBnbm9tZXMgbGl2ZSBoZXJlICovCisJc3RydWN0IHJiX3Jvb3QJCXRyYW5zX3Jvb3Q7CisJc3RydWN0IG11dGV4CQl0cmFuc19sb2NrOworCisJLyoKKwkgKiBUcmFuc2FjdGlvbiBjYWNoZS9tZW1vcnkgcG9vbC4KKwkgKiBJdCBpcyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gbm90IG9ubHkgdHJhbnNhY3Rpb24KKwkgKiBpdHNlbGYsIGJ1dCBhZGRpdGlvbmFsIGNyeXB0byBkYXRhIChkaWdlc3QvaG1hYykuCisJICovCisJc3RydWN0IGttZW1fY2FjaGUJKnRyYW5zX2NhY2hlOworCW1lbXBvb2xfdAkJKnRyYW5zX3Bvb2w7CisKKwkvKiBUaGlzIGVudGl0eSBzY2FucyB0cmFuc2FjdGlvbiB0cmVlICovCisJc3RydWN0IGRlbGF5ZWRfd29yayAJdHJhbnNfd29yazsKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Cit9OworCisvKiBLZXJuZWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZSAqLworc3RydWN0IGRzdF9zZWN1cmUKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNlY19lbnRyeTsKKwlzdHJ1Y3QgZHN0X3NlY3VyZV91c2VyCXNlYzsKK307CisKK2ludCBkc3RfcHJvY2Vzc19iaW8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pOworCitpbnQgZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyKTsKK2ludCBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2dldChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID09IDApOworCWF0b21pY19pbmMoJnN0LT5yZWZjbnQpOworCXJldHVybiBzdDsKK30KKwordm9pZCBkc3Rfc3RhdGVfcHV0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKKworc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2FsbG9jKHN0cnVjdCBkc3Rfbm9kZSAqbik7CitpbnQgZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwordm9pZCBkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworCit2b2lkIGRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7CisKK2ludCBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworCit2b2lkIGRzdF9kdW1wX2FkZHIoc3RydWN0IHNvY2tldCAqc2ssIHN0cnVjdCBzb2NrYWRkciAqc2EsIGNoYXIgKnN0cik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfbG9jayhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwltdXRleF9sb2NrKCZzdC0+c3RhdGVfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfdW5sb2NrKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCW11dGV4X3VubG9jaygmc3QtPnN0YXRlX2xvY2spOworfQorCit2b2lkIGRzdF9wb2xsX2V4aXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworaW50IGRzdF9wb2xsX2luaXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkc3Rfc3RhdGVfcG9sbChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IFBPTExIVVAgfCBQT0xMRVJSOworCisJZHN0X3N0YXRlX2xvY2soc3QpOworCWlmIChzdC0+c29ja2V0KQorCQlyZXZlbnRzID0gc3QtPnNvY2tldC0+b3BzLT5wb2xsKE5VTEwsIHN0LT5zb2NrZXQsIE5VTEwpOworCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCisJcmV0dXJuIHJldmVudHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRzdF90aHJlYWRfc2V0dXAodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkc3Rfbm9kZV9wdXQoc3RydWN0IGRzdF9ub2RlICpuKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X25vZGUgKmRzdF9ub2RlX2dldChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJYXRvbWljX2luYygmbi0+cmVmY250KTsKKwlyZXR1cm4gbjsKK30KKworaW50IGRzdF9kYXRhX3JlY3Yoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKTsKK2ludCBkc3RfcmVjdl9jZGF0YShzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqY2RhdGEpOworaW50IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgbW9yZSk7CisKK2ludCBkc3Rfc2VuZF9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBkc3RfY21kICpjbWQsIHN0cnVjdCBiaW8gKmJpbyk7CisKK2ludCBkc3RfcHJvY2Vzc19pbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7CitpbnQgZHN0X2V4cG9ydF9jcnlwdG8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pOworaW50IGRzdF9leHBvcnRfc2VuZF9iaW8oc3RydWN0IGJpbyAqYmlvKTsKK2ludCBkc3Rfc3RhcnRfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbik7CisKK2ludCBfX2luaXQgZHN0X2V4cG9ydF9pbml0KHZvaWQpOwordm9pZCBkc3RfZXhwb3J0X2V4aXQodm9pZCk7CisKKy8qIFByaXZhdGUgc3RydWN0dXJlIGZvciBleHBvcnQgYmxvY2sgSU8gcmVxdWVzdHMgKi8KK3N0cnVjdCBkc3RfZXhwb3J0X3ByaXYKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlyZXF1ZXN0X2VudHJ5OworCXN0cnVjdCBkc3Rfc3RhdGUJCSpzdGF0ZTsKKwlzdHJ1Y3QgYmlvCQkJKmJpbzsKKwlzdHJ1Y3QgZHN0X2NtZAkJCWNtZDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3RfdHJhbnNfZ2V0KHN0cnVjdCBkc3RfdHJhbnMgKnQpCit7CisJYXRvbWljX2luYygmdC0+cmVmY250KTsKK30KKworc3RydWN0IGRzdF90cmFucyAqZHN0X3RyYW5zX3NlYXJjaChzdHJ1Y3QgZHN0X25vZGUgKm5vZGUsIGRzdF9nZW5fdCBnZW4pOworaW50IGRzdF90cmFuc19yZW1vdmUoc3RydWN0IGRzdF90cmFucyAqdCk7CitpbnQgZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2soc3RydWN0IGRzdF90cmFucyAqdCk7Cit2b2lkIGRzdF90cmFuc19wdXQoc3RydWN0IGRzdF90cmFucyAqdCk7CisKKy8qCisgKiBDb252ZXJ0IGJpbyBpbnRvIG5ldHdvcmsgY29tbWFuZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRzdF9iaW9fdG9fY21kKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRzdF9jbWQgKmNtZCwKKwkJdTMyIGNvbW1hbmQsIHU2NCBpZCkKK3sKKwljbWQtPmNtZCA9IGNvbW1hbmQ7CisJY21kLT5mbGFncyA9IChiaW8tPmJpX2ZsYWdzIDw8IEJJT19QT09MX0JJVFMpID4+IEJJT19QT09MX0JJVFM7CisJY21kLT5ydyA9IGJpby0+Ymlfcnc7CisJY21kLT5zaXplID0gYmlvLT5iaV9zaXplOworCWNtZC0+Y3NpemUgPSAwOworCWNtZC0+aWQgPSBpZDsKKwljbWQtPnNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOworfTsKKworaW50IGRzdF90cmFuc19zZW5kKHN0cnVjdCBkc3RfdHJhbnMgKnQpOworaW50IGRzdF90cmFuc19jcnlwdG8oc3RydWN0IGRzdF90cmFucyAqdCk7CisKK2ludCBkc3Rfbm9kZV9jcnlwdG9faW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsKTsKK3ZvaWQgZHN0X25vZGVfY3J5cHRvX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKTsKKworc3RhdGljIGlubGluZSBpbnQgZHN0X25lZWRfY3J5cHRvKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmMgPSAmbi0+Y3J5cHRvOworCS8qCisJICogTG9naWNhbCBPUiBpcyBhcHByb3ByaWF0ZSBoZXJlLCBidXQgYm9vbGVhbiBvbmUgcHJvZHVjZXMKKwkgKiBtb3JlIG9wdGltYWwgY29kZSwgc28gaXQgaXMgdXNlZCBpbnN0ZWFkLgorCSAqLworCXJldHVybiAoYy0+aGFzaF9hbGdvWzBdIHwgYy0+Y2lwaGVyX2FsZ29bMF0pOworfQorCitpbnQgZHN0X25vZGVfdHJhbnNfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHVuc2lnbmVkIGludCBzaXplKTsKK3ZvaWQgZHN0X25vZGVfdHJhbnNfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pOworCisvKgorICogUG9vbCBvZiB0aHJlYWRzLgorICogUmVhZHkgbGlzdCBjb250YWlucyB0aHJlYWRzIGN1cnJlbnRseSBmcmVlIHRvIGJlIHVzZWQsCisgKiBhY3RpdmUgb25lIGNvbnRhaW5zIHRocmVhZHMgd2l0aCBzb21lIHdvcmsgc2NoZWR1bGVkIGZvciB0aGVtLgorICogQ2FsbGVyIGNhbiB3YWl0IGluIGdpdmVuIHF1ZXVlIHdoZW4gdGhyZWFkIGlzIHJlYWR5LgorICovCitzdHJ1Y3QgdGhyZWFkX3Bvb2wKK3sKKwlpbnQJCQl0aHJlYWRfbnVtOworCXN0cnVjdCBtdXRleAkJdGhyZWFkX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlyZWFkeV9saXN0LCBhY3RpdmVfbGlzdDsKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Cit9OworCit2b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwKTsKK3ZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcl9pZChzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsIHVuc2lnbmVkIGludCBpZCk7CitpbnQgdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCisJCWNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGludCBpZCwKKwkJdm9pZCAqKCogaW5pdCkodm9pZCAqZGF0YSksCisJCXZvaWQgKCogY2xlYW51cCkodm9pZCAqZGF0YSksCisJCXZvaWQgKmRhdGEpOworCit2b2lkIHRocmVhZF9wb29sX2Rlc3Ryb3koc3RydWN0IHRocmVhZF9wb29sICpwKTsKK3N0cnVjdCB0aHJlYWRfcG9vbCAqdGhyZWFkX3Bvb2xfY3JlYXRlKGludCBudW0sIGNoYXIgKm5hbWUsCisJCXZvaWQgKigqIGluaXQpKHZvaWQgKmRhdGEpLAorCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKmRhdGEpLAorCQl2b2lkICpkYXRhKTsKKworaW50IHRocmVhZF9wb29sX3NjaGVkdWxlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKKwkJaW50ICgqIHNldHVwKSh2b2lkICpzdG9yZWRfcHJpdmF0ZSwgdm9pZCAqc2V0dXBfZGF0YSksCisJCWludCAoKiBhY3Rpb24pKHZvaWQgKnN0b3JlZF9wcml2YXRlLCB2b2lkICpzZXR1cF9kYXRhKSwKKwkJdm9pZCAqc2V0dXBfZGF0YSwgbG9uZyB0aW1lb3V0KTsKK2ludCB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKKwkJaW50ICgqIHNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKKwkJaW50ICgqIGFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCisJCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCwgdm9pZCAqaWQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fRFNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHdfZG1hYy5oIGIvaW5jbHVkZS9saW51eC9kd19kbWFjLmgKaW5kZXggZDc5N2RkZS4uYzhhYWQ3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kd19kbWFjLmgKKysrIGIvaW5jbHVkZS9saW51eC9kd19kbWFjLmgKQEAgLTc0LDQgKzc0LDIzIEBACiAjZGVmaW5lIERXQ19DRkdMX0hTX0RTVF9QT0wJKDEgPDwgMTgpCS8qIGRzdCBoYW5kc2hha2UgYWN0aXZlIGxvdyAqLwogI2RlZmluZSBEV0NfQ0ZHTF9IU19TUkNfUE9MCSgxIDw8IDE5KQkvKiBzcmMgaGFuZHNoYWtlIGFjdGl2ZSBsb3cgKi8KIAorLyogRE1BIEFQSSBleHRlbnNpb25zICovCitzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MgeworCXN0cnVjdCBkd19kZXNjCSoqZGVzYzsKKwl1bnNpZ25lZCBsb25nCXBlcmlvZHM7CisJdm9pZAkJKCpwZXJpb2RfY2FsbGJhY2spKHZvaWQgKnBhcmFtKTsKKwl2b2lkCQkqcGVyaW9kX2NhbGxiYWNrX3BhcmFtOworfTsKKworc3RydWN0IGR3X2N5Y2xpY19kZXNjICpkd19kbWFfY3ljbGljX3ByZXAoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQlkbWFfYWRkcl90IGJ1Zl9hZGRyLCBzaXplX3QgYnVmX2xlbiwgc2l6ZV90IHBlcmlvZF9sZW4sCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Cit2b2lkIGR3X2RtYV9jeWNsaWNfZnJlZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworaW50IGR3X2RtYV9jeWNsaWNfc3RhcnQoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK3ZvaWQgZHdfZG1hX2N5Y2xpY19zdG9wKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisKK2RtYV9hZGRyX3QgZHdfZG1hX2dldF9zcmNfYWRkcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworCitkbWFfYWRkcl90IGR3X2RtYV9nZXRfZHN0X2FkZHIoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKwogI2VuZGlmIC8qIERXX0RNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAppbmRleCBkZDQ5NWI4Li42MzRhNWU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaApAQCAtMjA4LDYgKzIwOCw3IEBACiAjZGVmaW5lIEVYVDNfU1RBVEVfSkRBVEEJCTB4MDAwMDAwMDEgLyogam91cm5hbGVkIGRhdGEgZXhpc3RzICovCiAjZGVmaW5lIEVYVDNfU1RBVEVfTkVXCQkJMHgwMDAwMDAwMiAvKiBpbm9kZSBpcyBuZXdseSBjcmVhdGVkICovCiAjZGVmaW5lIEVYVDNfU1RBVEVfWEFUVFIJCTB4MDAwMDAwMDQgLyogaGFzIGluLWlub2RlIHhhdHRycyAqLworI2RlZmluZSBFWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFCTB4MDAwMDAwMDgKIAogLyogVXNlZCB0byBwYXNzIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSB3aGVuIG9ubGluZSByZXNpemUgaXMgZG9uZSAqLwogc3RydWN0IGV4dDNfbmV3X2dyb3VwX2lucHV0IHsKQEAgLTg5Myw5ICs4OTQsOCBAQAogCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgbGVuKTsKIAogLyogaW9jdGwuYyAqLwotZXh0ZXJuIGludCBleHQzX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAotCQkgICAgICAgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gbG9uZyBleHQzX2NvbXBhdF9pb2N0bCAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBsb25nIGV4dDNfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBsb25nIGV4dDNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIG5hbWVpLmMgKi8KIGV4dGVybiBpbnQgZXh0M19vcnBoYW5fYWRkKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA2MTIxMWFkLi5hMDllMTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xNzQxLDYgKzE3NDEsOCBAQAogCiBleHRlcm4gaW50IHZmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKIAorZXh0ZXJuIGludCBjdXJyZW50X3VtYXNrKHZvaWQpOworCiAvKiAvc3lzL2ZzICovCiBleHRlcm4gc3RydWN0IGtvYmplY3QgKmZzX2tvYmo7CiAKQEAgLTE4ODUsNiArMTg4NywxOCBAQAogZXh0ZXJuIGludCBmc3luY19ub19zdXBlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBiZF9mb3JnZXQoc3RydWN0IGlub2RlICppbm9kZSkge30KK3N0YXRpYyBpbmxpbmUgaW50IHN5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdXBlcl9ibG9jayAqZnJlZXplX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqc2IpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRoYXdfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiAwOworfQogI2VuZGlmCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfY2hyX2ZvcHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaAppbmRleCAxOGI0NjdkLi43OGEwNWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKQEAgLTQsMTIgKzQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wYXRoLmg+CiAKIHN0cnVjdCBmc19zdHJ1Y3QgewotCWF0b21pY190IGNvdW50OwkvKiBUaGlzIHVzYWdlIGNvdW50IGlzIHVzZWQgYnkgY2hlY2tfdW5zYWZlX2V4ZWMoKSBmb3IKLQkJCSAqIHNlY3VyaXR5IGNoZWNraW5nIHB1cnBvc2VzIC0gdGhlcmVmb3JlIGl0IG1heSBub3QgYmUKLQkJCSAqIGluY3JlbWVudGVkLCBleGNlcHQgYnkgY2xvbmUoQ0xPTkVfRlMpLgotCQkJICovCisJaW50IHVzZXJzOwogCXJ3bG9ja190IGxvY2s7CiAJaW50IHVtYXNrOworCWludCBpbl9leGVjOwogCXN0cnVjdCBwYXRoIHJvb3QsIHB3ZDsKIH07CiAKQEAgLTE5LDYgKzE3LDggQEAKIGV4dGVybiB2b2lkIHNldF9mc19yb290KHN0cnVjdCBmc19zdHJ1Y3QgKiwgc3RydWN0IHBhdGggKik7CiBleHRlcm4gdm9pZCBzZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKiwgc3RydWN0IHBhdGggKik7CiBleHRlcm4gc3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqKTsKLWV4dGVybiB2b2lkIHB1dF9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGZyZWVfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBkYWVtb25pemVfZnNfc3RydWN0KHZvaWQpOworZXh0ZXJuIGludCB1bnNoYXJlX2ZzX3N0cnVjdCh2b2lkKTsKIAogI2VuZGlmIC8qIF9MSU5VWF9GU19TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2NhY2hlLWNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGQzNTMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mc2NhY2hlLWNhY2hlLmgKQEAgLTAsMCArMSw1MDUgQEAKKy8qIEdlbmVyYWwgZmlsZXN5c3RlbSBjYWNoaW5nIGJhY2tpbmcgY2FjaGUgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTk9URSEhISBTZWU6CisgKgorICoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dAorICoKKyAqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjYWNoZSBiYWNrZW5kIGludGVyZmFjZSBkZWNsYXJlZCBoZXJlLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0ZTQ0FDSEVfQ0FDSEVfSAorI2RlZmluZSBfTElOVVhfRlNDQUNIRV9DQUNIRV9ICisKKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KKworI2RlZmluZSBOUl9NQVhDQUNIRVMgQklUU19QRVJfTE9ORworCitzdHJ1Y3QgZnNjYWNoZV9jYWNoZTsKK3N0cnVjdCBmc2NhY2hlX2NhY2hlX29wczsKK3N0cnVjdCBmc2NhY2hlX29iamVjdDsKK3N0cnVjdCBmc2NhY2hlX29wZXJhdGlvbjsKKworLyoKKyAqIGNhY2hlIHRhZyBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyB7CisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOworCXN0cnVjdCBmc2NhY2hlX2NhY2hlCSpjYWNoZTsJCS8qIGNhY2hlIHJlZmVycmVkIHRvIGJ5IHRoaXMgdGFnICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisjZGVmaW5lIEZTQ0FDSEVfVEFHX1JFU0VSVkVECTAJCS8qIFQgaWYgdGFnIGlzIHJlc2VydmVkIGZvciBhIGNhY2hlICovCisJYXRvbWljX3QJCXVzYWdlOworCWNoYXIJCQluYW1lWzBdOwkvKiB0YWcgbmFtZSAqLworfTsKKworLyoKKyAqIGNhY2hlIGRlZmluaXRpb24KKyAqLworc3RydWN0IGZzY2FjaGVfY2FjaGUgeworCWNvbnN0IHN0cnVjdCBmc2NhY2hlX2NhY2hlX29wcyAqb3BzOworCXN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqdGFnOwkJLyogdGFnIHJlcHJlc2VudGluZyB0aGlzIGNhY2hlICovCisJc3RydWN0IGtvYmplY3QJCSprb2JqOwkJLyogc3lzdGVtIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgY2FjaGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CQkvKiBsaW5rIGluIGxpc3Qgb2YgY2FjaGVzICovCisJc2l6ZV90CQkJbWF4X2luZGV4X3NpemU7CS8qIG1heGltdW0gc2l6ZSBvZiBpbmRleCBkYXRhICovCisJY2hhcgkJCWlkZW50aWZpZXJbMzZdOwkvKiBjYWNoZSBsYWJlbCAqLworCisJLyogbm9kZSBtYW5hZ2VtZW50ICovCisJc3RydWN0IHdvcmtfc3RydWN0CW9wX2djOwkJLyogb3BlcmF0aW9uIGdhcmJhZ2UgY29sbGVjdG9yICovCisJc3RydWN0IGxpc3RfaGVhZAlvYmplY3RfbGlzdDsJLyogbGlzdCBvZiBkYXRhL2luZGV4IG9iamVjdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCW9wX2djX2xpc3Q7CS8qIGxpc3Qgb2Ygb3BzIHRvIGJlIGRlbGV0ZWQgKi8KKwlzcGlubG9ja190CQlvYmplY3RfbGlzdF9sb2NrOworCXNwaW5sb2NrX3QJCW9wX2djX2xpc3RfbG9jazsKKwlhdG9taWNfdAkJb2JqZWN0X2NvdW50OwkvKiBuby4gb2YgbGl2ZSBvYmplY3RzIGluIHRoaXMgY2FjaGUgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QJKmZzZGVmOwkJLyogb2JqZWN0IGZvciB0aGUgZnNkZWYgaW5kZXggKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNkZWZpbmUgRlNDQUNIRV9JT0VSUk9SCQkwCS8qIGNhY2hlIHN0b3BwZWQgb24gSS9PIGVycm9yICovCisjZGVmaW5lIEZTQ0FDSEVfQ0FDSEVfV0lUSERSQVdOCTEJLyogY2FjaGUgaGFzIGJlZW4gd2l0aGRyYXduICovCit9OworCitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgZnNjYWNoZV9jYWNoZV9jbGVhcmVkX3dxOworCisvKgorICogb3BlcmF0aW9uIHRvIGJlIGFwcGxpZWQgdG8gYSBjYWNoZSBvYmplY3QKKyAqIC0gcmV0cmlldmFsIGluaXRpYXRpb24gb3BlcmF0aW9ucyBhcmUgZG9uZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvY2VzcworICogICB0aGF0IGlzc3VlZCB0aGVtLCBhbmQgbm90IGluIGFuIGFzeW5jIHRocmVhZCBwb29sCisgKi8KK3R5cGVkZWYgdm9pZCAoKmZzY2FjaGVfb3BlcmF0aW9uX3JlbGVhc2VfdCkoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCk7Cit0eXBlZGVmIHZvaWQgKCpmc2NhY2hlX29wZXJhdGlvbl9wcm9jZXNzb3JfdCkoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCk7CisKK3N0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiB7CisJdW5pb24geworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmFzdF93b3JrOwkvKiByZWNvcmQgZm9yIGZhc3Qgb3BzICovCisJCXN0cnVjdCBzbG93X3dvcmsgc2xvd193b3JrOwkvKiByZWNvcmQgZm9yICh2ZXJ5KSBzbG93IG9wcyAqLworCX07CisJc3RydWN0IGxpc3RfaGVhZAlwZW5kX2xpbms7CS8qIGxpbmsgaW4gb2JqZWN0LT5wZW5kaW5nX29wcyAqLworCXN0cnVjdCBmc2NhY2hlX29iamVjdAkqb2JqZWN0OwkvKiBvYmplY3QgdG8gYmUgb3BlcmF0ZWQgdXBvbiAqLworCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisjZGVmaW5lIEZTQ0FDSEVfT1BfVFlQRQkJMHgwMDBmCS8qIG9wZXJhdGlvbiB0eXBlICovCisjZGVmaW5lIEZTQ0FDSEVfT1BfRkFTVAkJMHgwMDAxCS8qIC0gZmFzdCBvcCwgcHJvY2Vzc29yIG1heSBub3Qgc2xlZXAgZm9yIGRpc2sgKi8KKyNkZWZpbmUgRlNDQUNIRV9PUF9TTE9XCQkweDAwMDIJLyogLSAodmVyeSkgc2xvdyBvcCwgcHJvY2Vzc29yIG1heSBzbGVlcCBmb3IgZGlzayAqLworI2RlZmluZSBGU0NBQ0hFX09QX01ZVEhSRUFECTB4MDAwMwkvKiAtIHByb2Nlc3NpbmcgaXMgZG9uZSBiZSBpc3N1aW5nIHRocmVhZCwgbm90IHBvb2wgKi8KKyNkZWZpbmUgRlNDQUNIRV9PUF9XQUlUSU5HCTQJLyogY2xlYXJlZCB3aGVuIG9wIGlzIHdva2VuICovCisjZGVmaW5lIEZTQ0FDSEVfT1BfRVhDTFVTSVZFCTUJLyogZXhjbHVzaXZlIG9wLCBvdGhlciBvcHMgbXVzdCB3YWl0ICovCisjZGVmaW5lIEZTQ0FDSEVfT1BfREVBRAkJNgkvKiBvcCBpcyBub3cgZGVhZCAqLworCisJYXRvbWljX3QJCXVzYWdlOworCXVuc2lnbmVkCQlkZWJ1Z19pZDsJLyogZGVidWdnaW5nIElEICovCisKKwkvKiBvcGVyYXRpb24gcHJvY2Vzc29yIGNhbGxiYWNrCisJICogLSBjYW4gYmUgTlVMTCBpZiBGU0NBQ0hFX09QX1dBSVRJTkcgaXMgZ29pbmcgdG8gYmUgdXNlZCB0byBwZXJmb3JtCisJICogICB0aGUgb3AgaW4gYSBub24tcG9vbCB0aHJlYWQgKi8KKwlmc2NhY2hlX29wZXJhdGlvbl9wcm9jZXNzb3JfdCBwcm9jZXNzb3I7CisKKwkvKiBvcGVyYXRpb24gcmVsZWFzZXIgKi8KKwlmc2NhY2hlX29wZXJhdGlvbl9yZWxlYXNlX3QgcmVsZWFzZTsKK307CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX29wX2RlYnVnX2lkOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGZzY2FjaGVfb3Bfc2xvd193b3JrX29wczsKKworZXh0ZXJuIHZvaWQgZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbihzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKik7CitleHRlcm4gdm9pZCBmc2NhY2hlX3B1dF9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICopOworCisvKioKKyAqIGZzY2FjaGVfb3BlcmF0aW9uX2luaXQgLSBEbyBiYXNpYyBpbml0aWFsaXNhdGlvbiBvZiBhbiBvcGVyYXRpb24KKyAqIEBvcDogVGhlIG9wZXJhdGlvbiB0byBpbml0aWFsaXNlCisgKiBAcmVsZWFzZTogVGhlIHJlbGVhc2UgZnVuY3Rpb24gdG8gYXNzaWduCisgKgorICogRG8gYmFzaWMgaW5pdGlhbGlzYXRpb24gb2YgYW4gb3BlcmF0aW9uLiAgVGhlIGNhbGxlciBtdXN0IHN0aWxsIHNldCBmbGFncywKKyAqIG9iamVjdCwgZWl0aGVyIGZhc3Rfd29yayBvciBzbG93X3dvcmsgaWYgbmVjZXNzYXJ5LCBhbmQgcHJvY2Vzc29yIGlmIG5lZWRlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZzY2FjaGVfb3BlcmF0aW9uX2luaXQoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCwKKwkJCQkJICBmc2NhY2hlX29wZXJhdGlvbl9yZWxlYXNlX3QgcmVsZWFzZSkKK3sKKwlhdG9taWNfc2V0KCZvcC0+dXNhZ2UsIDEpOworCW9wLT5kZWJ1Z19pZCA9IGF0b21pY19pbmNfcmV0dXJuKCZmc2NhY2hlX29wX2RlYnVnX2lkKTsKKwlvcC0+cmVsZWFzZSA9IHJlbGVhc2U7CisJSU5JVF9MSVNUX0hFQUQoJm9wLT5wZW5kX2xpbmspOworfQorCisvKioKKyAqIGZzY2FjaGVfb3BlcmF0aW9uX2luaXRfc2xvdyAtIERvIGFkZGl0aW9uYWwgaW5pdGlhbGlzYXRpb24gb2YgYSBzbG93IG9wCisgKiBAb3A6IFRoZSBvcGVyYXRpb24gdG8gaW5pdGlhbGlzZQorICogQHByb2Nlc3NvcjogVGhlIHByb2Nlc3NvciBmdW5jdGlvbiB0byBhc3NpZ24KKyAqCisgKiBEbyBhZGRpdGlvbmFsIGluaXRpYWxpc2F0aW9uIG9mIGFuIG9wZXJhdGlvbiBhcyByZXF1aXJlZCBmb3Igc2xvdyB3b3JrLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfb3BlcmF0aW9uX2luaXRfc2xvdyhzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wLAorCQkJCSBmc2NhY2hlX29wZXJhdGlvbl9wcm9jZXNzb3JfdCBwcm9jZXNzb3IpCit7CisJb3AtPnByb2Nlc3NvciA9IHByb2Nlc3NvcjsKKwlzbG93X3dvcmtfaW5pdCgmb3AtPnNsb3dfd29yaywgJmZzY2FjaGVfb3Bfc2xvd193b3JrX29wcyk7Cit9CisKKy8qCisgKiBkYXRhIHJlYWQgb3BlcmF0aW9uCisgKi8KK3N0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCB7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uIG9wOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nOwkvKiBuZXRmcyBwYWdlcyAqLworCWZzY2FjaGVfcndfY29tcGxldGVfdAllbmRfaW9fZnVuYzsJLyogZnVuY3Rpb24gdG8gY2FsbCBvbiBJL08gY29tcGxldGlvbiAqLworCXZvaWQJCQkqY29udGV4dDsJLyogbmV0ZnMgcmVhZCBjb250ZXh0IChwaW5uZWQpICovCisJc3RydWN0IGxpc3RfaGVhZAl0b19kbzsJCS8qIGxpc3Qgb2YgdGhpbmdzIHRvIGJlIGRvbmUgYnkgdGhlIGJhY2tlbmQgKi8KKwl1bnNpZ25lZCBsb25nCQlzdGFydF90aW1lOwkvKiB0aW1lIGF0IHdoaWNoIHJldHJpZXZhbCBzdGFydGVkICovCit9OworCit0eXBlZGVmIGludCAoKmZzY2FjaGVfcGFnZV9yZXRyaWV2YWxfZnVuY190KShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgIGdmcF90IGdmcCk7CisKK3R5cGVkZWYgaW50ICgqZnNjYWNoZV9wYWdlc19yZXRyaWV2YWxfZnVuY190KShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkJICAgICAgdW5zaWduZWQgKm5yX3BhZ2VzLAorCQkJCQkgICAgICBnZnBfdCBnZnApOworCisvKioKKyAqIGZzY2FjaGVfZ2V0X3JldHJpZXZhbCAtIEdldCBhbiBleHRyYSByZWZlcmVuY2Ugb24gYSByZXRyaWV2YWwgb3BlcmF0aW9uCisgKiBAb3A6IFRoZSByZXRyaWV2YWwgb3BlcmF0aW9uIHRvIGdldCBhIHJlZmVyZW5jZSBvbgorICoKKyAqIEdldCBhbiBleHRyYSByZWZlcmVuY2Ugb24gYSByZXRyaWV2YWwgb3BlcmF0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKmZzY2FjaGVfZ2V0X3JldHJpZXZhbChzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wKQoreworCWF0b21pY19pbmMoJm9wLT5vcC51c2FnZSk7CisJcmV0dXJuIG9wOworfQorCisvKioKKyAqIGZzY2FjaGVfZW5xdWV1ZV9yZXRyaWV2YWwgLSBFbnF1ZXVlIGEgcmV0cmlldmFsIG9wZXJhdGlvbiBmb3IgcHJvY2Vzc2luZworICogQG9wOiBUaGUgcmV0cmlldmFsIG9wZXJhdGlvbiBhZmZlY3RlZAorICoKKyAqIEVucXVldWUgYSByZXRyaWV2YWwgb3BlcmF0aW9uIGZvciBwcm9jZXNzaW5nIGJ5IHRoZSBGUy1DYWNoZSB0aHJlYWQgcG9vbC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZzY2FjaGVfZW5xdWV1ZV9yZXRyaWV2YWwoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCkKK3sKKwlmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKCZvcC0+b3ApOworfQorCisvKioKKyAqIGZzY2FjaGVfcHV0X3JldHJpZXZhbCAtIERyb3AgYSByZWZlcmVuY2UgdG8gYSByZXRyaWV2YWwgb3BlcmF0aW9uCisgKiBAb3A6IFRoZSByZXRyaWV2YWwgb3BlcmF0aW9uIGFmZmVjdGVkCisgKgorICogRHJvcCBhIHJlZmVyZW5jZSB0byBhIHJldHJpZXZhbCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX3B1dF9yZXRyaWV2YWwoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCkKK3sKKwlmc2NhY2hlX3B1dF9vcGVyYXRpb24oJm9wLT5vcCk7Cit9CisKKy8qCisgKiBjYWNoZWQgcGFnZSBzdG9yYWdlIHdvcmsgaXRlbQorICogLSB1c2VkIHRvIGRvIHRocmVlIHRoaW5nczoKKyAqICAgLSBiYXRjaCB3cml0ZXMgdG8gdGhlIGNhY2hlCisgKiAgIC0gZG8gY2FjaGUgd3JpdGVzIGFzeW5jaHJvbm91c2x5CisgKiAgIC0gZGVmZXIgd3JpdGVzIHVudGlsIGNhY2hlIG9iamVjdCBsb29rdXAgY29tcGxldGlvbgorICovCitzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlIHsKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gb3A7CisJcGdvZmZfdAkJCXN0b3JlX2xpbWl0OwkvKiBkb24ndCB3cml0ZSBtb3JlIHRoYW4gdGhpcyAqLworfTsKKworLyoKKyAqIGNhY2hlIG9wZXJhdGlvbnMKKyAqLworc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzIHsKKwkvKiBuYW1lIG9mIGNhY2hlIHByb3ZpZGVyICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIGFsbG9jYXRlIGFuIG9iamVjdCByZWNvcmQgZm9yIGEgY29va2llICovCisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICooKmFsbG9jX29iamVjdCkoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJCQkgICAgICAgc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpOworCisJLyogbG9vayB1cCB0aGUgb2JqZWN0IGZvciBhIGNvb2tpZSAqLworCXZvaWQgKCpsb29rdXBfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiBmaW5pc2hlZCBsb29raW5nIHVwICovCisJdm9pZCAoKmxvb2t1cF9jb21wbGV0ZSkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogaW5jcmVtZW50IHRoZSB1c2FnZSBjb3VudCBvbiB0aGlzIG9iamVjdCAobWF5IGZhaWwgaWYgdW5tb3VudGluZykgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKigqZ3JhYl9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIHBpbiBhbiBvYmplY3QgaW4gdGhlIGNhY2hlICovCisJaW50ICgqcGluX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogdW5waW4gYW4gb2JqZWN0IGluIHRoZSBjYWNoZSAqLworCXZvaWQgKCp1bnBpbl9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIHN0b3JlIHRoZSB1cGRhdGVkIGF1eGlsbGlhcnkgZGF0YSBvbiBhbiBvYmplY3QgKi8KKwl2b2lkICgqdXBkYXRlX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogZGlzY2FyZCB0aGUgcmVzb3VyY2VzIHBpbm5lZCBieSBhbiBvYmplY3QgYW5kIGVmZmVjdCByZXRpcmVtZW50IGlmCisJICogbmVjZXNzYXJ5ICovCisJdm9pZCAoKmRyb3Bfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiBkaXNwb3NlIG9mIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCAqLworCXZvaWQgKCpwdXRfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiBzeW5jIGEgY2FjaGUgKi8KKwl2b2lkICgqc3luY19jYWNoZSkoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKTsKKworCS8qIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9mIGEgbm9uLWluZGV4IG9iamVjdCAoc3VjaCBhcworCSAqIGlfc2l6ZSkgaGF2ZSBjaGFuZ2VkICovCisJaW50ICgqYXR0cl9jaGFuZ2VkKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiByZXNlcnZlIHNwYWNlIGZvciBhbiBvYmplY3QncyBkYXRhIGFuZCBhc3NvY2lhdGVkIG1ldGFkYXRhICovCisJaW50ICgqcmVzZXJ2ZV9zcGFjZSkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsIGxvZmZfdCBpX3NpemUpOworCisJLyogcmVxdWVzdCBhIGJhY2tpbmcgYmxvY2sgZm9yIGEgcGFnZSBiZSByZWFkIG9yIGFsbG9jYXRlZCBpbiB0aGUKKwkgKiBjYWNoZSAqLworCWZzY2FjaGVfcGFnZV9yZXRyaWV2YWxfZnVuY190IHJlYWRfb3JfYWxsb2NfcGFnZTsKKworCS8qIHJlcXVlc3QgYmFja2luZyBibG9ja3MgZm9yIGEgbGlzdCBvZiBwYWdlcyBiZSByZWFkIG9yIGFsbG9jYXRlZCBpbgorCSAqIHRoZSBjYWNoZSAqLworCWZzY2FjaGVfcGFnZXNfcmV0cmlldmFsX2Z1bmNfdCByZWFkX29yX2FsbG9jX3BhZ2VzOworCisJLyogcmVxdWVzdCBhIGJhY2tpbmcgYmxvY2sgZm9yIGEgcGFnZSBiZSBhbGxvY2F0ZWQgaW4gdGhlIGNhY2hlIHNvIHRoYXQKKwkgKiBpdCBjYW4gYmUgd3JpdHRlbiBkaXJlY3RseSAqLworCWZzY2FjaGVfcGFnZV9yZXRyaWV2YWxfZnVuY190IGFsbG9jYXRlX3BhZ2U7CisKKwkvKiByZXF1ZXN0IGJhY2tpbmcgYmxvY2tzIGZvciBwYWdlcyBiZSBhbGxvY2F0ZWQgaW4gdGhlIGNhY2hlIHNvIHRoYXQKKwkgKiB0aGV5IGNhbiBiZSB3cml0dGVuIGRpcmVjdGx5ICovCisJZnNjYWNoZV9wYWdlc19yZXRyaWV2YWxfZnVuY190IGFsbG9jYXRlX3BhZ2VzOworCisJLyogd3JpdGUgYSBwYWdlIHRvIGl0cyBiYWNraW5nIGJsb2NrIGluIHRoZSBjYWNoZSAqLworCWludCAoKndyaXRlX3BhZ2UpKHN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UgKm9wLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKwkvKiBkZXRhY2ggYmFja2luZyBibG9jayBmcm9tIGEgcGFnZSAob3B0aW9uYWwpCisJICogLSBtdXN0IHJlbGVhc2UgdGhlIGNvb2tpZSBsb2NrIGJlZm9yZSByZXR1cm5pbmcKKwkgKiAtIG1heSBzbGVlcAorCSAqLworCXZvaWQgKCp1bmNhY2hlX3BhZ2UpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKwkvKiBkaXNzb2NpYXRlIGEgY2FjaGUgZnJvbSBhbGwgdGhlIHBhZ2VzIGl0IHdhcyBiYWNraW5nICovCisJdm9pZCAoKmRpc3NvY2lhdGVfcGFnZXMpKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSk7Cit9OworCisvKgorICogZGF0YSBmaWxlIG9yIGluZGV4IG9iamVjdCBjb29raWUKKyAqIC0gYSBmaWxlIHdpbGwgb25seSBhcHBlYXIgaW4gb25lIGNhY2hlCisgKiAtIGEgcmVxdWVzdCB0byBjYWNoZSBhIGZpbGUgbWF5IG9yIG1heSBub3QgYmUgaG9ub3VyZWQsIHN1YmplY3QgdG8KKyAqICAgY29uc3RyYWludHMgc3VjaCBhcyBkaXNrIHNwYWNlCisgKiAtIGluZGljZXMgYXJlIGNyZWF0ZWQgb24gZGlzayBqdXN0LWluLXRpbWUKKyAqLworc3RydWN0IGZzY2FjaGVfY29va2llIHsKKwlhdG9taWNfdAkJCXVzYWdlOwkJLyogbnVtYmVyIG9mIHVzZXJzIG9mIHRoaXMgY29va2llICovCisJYXRvbWljX3QJCQluX2NoaWxkcmVuOwkvKiBudW1iZXIgb2YgY2hpbGRyZW4gb2YgdGhpcyBjb29raWUgKi8KKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkJYmFja2luZ19vYmplY3RzOyAvKiBvYmplY3QocykgYmFja2luZyB0aGlzIGZpbGUvaW5kZXggKi8KKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmCSpkZWY7CQkvKiBkZWZpbml0aW9uICovCisJc3RydWN0IGZzY2FjaGVfY29va2llCQkqcGFyZW50OwkvKiBwYXJlbnQgb2YgdGhpcyBlbnRyeSAqLworCXZvaWQJCQkJKm5ldGZzX2RhdGE7CS8qIGJhY2sgcG9pbnRlciB0byBuZXRmcyAqLworCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QJCXN0b3JlczsJCS8qIHBhZ2VzIHRvIGJlIHN0b3JlZCBvbiB0aGlzIGNvb2tpZSAqLworI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9QRU5ESU5HX1RBRwkwCQkvKiBwYWdlcyB0YWc6IHBlbmRpbmcgd3JpdGUgdG8gY2FjaGUgKi8KKworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUAkwCS8qIFQgaWYgbm9uLWluZGV4IGNvb2tpZSBiZWluZyBsb29rZWQgdXAgc3RpbGwgKi8KKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcJCTEJLyogVCBpZiBub24taW5kZXggb2JqZWN0IGJlaW5nIGNyZWF0ZWQgc3RpbGwgKi8KKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQJMgkvKiBUIGlmIG5ldyBvYmplY3Qgd2l0aCBubyBjYWNoZWQgZGF0YSB5ZXQgKi8KKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfUEVORElOR19GSUxMCTMJLyogVCBpZiBwZW5kaW5nIGluaXRpYWwgZmlsbCBvbiBvYmplY3QgKi8KKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfRklMTElORwkJNAkvKiBUIGlmIGZpbGxpbmcgb2JqZWN0IGluY3JlbWVudGFsbHkgKi8KKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfVU5BVkFJTEFCTEUJNQkvKiBUIGlmIGNvb2tpZSBpcyB1bmF2YWlsYWJsZSAoZXJyb3IsIGV0YykgKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWUgZnNjYWNoZV9mc2RlZl9pbmRleDsKKworLyoKKyAqIG9uLWRpc2sgY2FjaGUgZmlsZSBvciBpbmRleCBoYW5kbGUKKyAqLworc3RydWN0IGZzY2FjaGVfb2JqZWN0IHsKKwllbnVtIGZzY2FjaGVfb2JqZWN0X3N0YXRlIHsKKwkJRlNDQUNIRV9PQkpFQ1RfSU5JVCwJCS8qIG9iamVjdCBpbiBpbml0aWFsIHVuYm91bmQgc3RhdGUgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfTE9PS0lOR19VUCwJLyogbG9va2luZyB1cCBvYmplY3QgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkcsCS8qIGNyZWF0aW5nIG9iamVjdCAqLworCisJCS8qIGFjdGl2ZSBzdGF0ZXMgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFLAkvKiBjbGVhbmluZyB1cCBvYmplY3QgYWZ0ZXIgY3JlYXRpb24gKi8KKwkJRlNDQUNIRV9PQkpFQ1RfQUNUSVZFLAkJLyogb2JqZWN0IGlzIHVzYWJsZSAqLworCQlGU0NBQ0hFX09CSkVDVF9VUERBVElORywJLyogb2JqZWN0IGlzIHVwZGF0aW5nICovCisKKwkJLyogdGVybWluYWwgc3RhdGVzICovCisJCUZTQ0FDSEVfT0JKRUNUX0RZSU5HLAkJLyogb2JqZWN0IHdhaXRpbmcgZm9yIGFjY2Vzc29ycyB0byBmaW5pc2ggKi8KKwkJRlNDQUNIRV9PQkpFQ1RfTENfRFlJTkcsCS8qIG9iamVjdCBjbGVhbmluZyB1cCBhZnRlciBsb29rdXAvY3JlYXRlICovCisJCUZTQ0FDSEVfT0JKRUNUX0FCT1JUX0lOSVQsCS8qIGFib3J0IHRoZSBpbml0IHN0YXRlICovCisJCUZTQ0FDSEVfT0JKRUNUX1JFTEVBU0lORywJLyogcmVsZWFzaW5nIG9iamVjdCAqLworCQlGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkcsCS8qIHJldGlyaW5nIG9iamVjdCAqLworCQlGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lORywJLyogd2l0aGRyYXdpbmcgb2JqZWN0ICovCisJCUZTQ0FDSEVfT0JKRUNUX0RFQUQsCQkvKiBvYmplY3QgaXMgbm93IGRlYWQgKi8KKwl9IHN0YXRlOworCisJaW50CQkJZGVidWdfaWQ7CS8qIGRlYnVnZ2luZyBJRCAqLworCWludAkJCW5fY2hpbGRyZW47CS8qIG51bWJlciBvZiBjaGlsZCBvYmplY3RzICovCisJaW50CQkJbl9vcHM7CQkvKiBudW1iZXIgb2Ygb3BzIG91dHN0YW5kaW5nIG9uIG9iamVjdCAqLworCWludAkJCW5fb2JqX29wczsJLyogbnVtYmVyIG9mIG9iamVjdCBvcHMgb3V0c3RhbmRpbmcgb24gb2JqZWN0ICovCisJaW50CQkJbl9pbl9wcm9ncmVzczsJLyogbnVtYmVyIG9mIG9wcyBpbiBwcm9ncmVzcyAqLworCWludAkJCW5fZXhjbHVzaXZlOwkvKiBudW1iZXIgb2YgZXhjbHVzaXZlIG9wcyBxdWV1ZWQgKi8KKwlzcGlubG9ja190CQlsb2NrOwkJLyogc3RhdGUgYW5kIG9wZXJhdGlvbnMgbG9jayAqLworCisJdW5zaWduZWQgbG9uZwkJbG9va3VwX2ppZjsJLyogdGltZSBhdCB3aGljaCBsb29rdXAgc3RhcnRlZCAqLworCXVuc2lnbmVkIGxvbmcJCWV2ZW50X21hc2s7CS8qIGV2ZW50cyB0aGlzIG9iamVjdCBpcyBpbnRlcmVzdGVkIGluICovCisJdW5zaWduZWQgbG9uZwkJZXZlbnRzOwkJLyogZXZlbnRzIHRvIGJlIHByb2Nlc3NlZCBieSB0aGlzIG9iamVjdAorCQkJCQkJICogKG9yZGVyIGlzIGltcG9ydGFudCAtIHVzaW5nIGZscykgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfUkVRVUVVRQkwCS8qIFQgaWYgb2JqZWN0IHNob3VsZCBiZSByZXF1ZXVlZCAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUJMQkvKiBUIGlmIG9iamVjdCBzaG91bGQgYmUgdXBkYXRlZCAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVECTIJLyogVCBpZiBhY2Nlc3NvcnMgYWxsIGdvbmUgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IJCTMJLyogVCBpZiBmYXRhbCBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcHJvY2Vzc2luZyAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFCTQJLyogVCBpZiBuZXRmcyByZXF1ZXN0ZWQgb2JqZWN0IHJlbGVhc2UgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFCTUJLyogVCBpZiBuZXRmcyByZXF1ZXN0ZWQgb2JqZWN0IHJldGlyZW1lbnQgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcJNgkvKiBUIGlmIGNhY2hlIHJlcXVlc3RlZCBvYmplY3Qgd2l0aGRyYXdhbCAqLworCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX0xPQ0sJCTAJLyogVCBpZiBvYmplY3QgaXMgYnVzeSBiZWluZyBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfUEVORElOR19XUklURQkxCS8qIFQgaWYgb2JqZWN0IGhhcyBwZW5kaW5nIHdyaXRlICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX1dBSVRJTkcJCTIJLyogVCBpZiBvYmplY3QgaXMgd2FpdGluZyBvbiBpdHMgcGFyZW50ICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNhY2hlX2xpbms7CS8qIGxpbmsgaW4gY2FjaGUtPm9iamVjdF9saXN0ICovCisJc3RydWN0IGhsaXN0X25vZGUJY29va2llX2xpbms7CS8qIGxpbmsgaW4gY29va2llLT5iYWNraW5nX29iamVjdHMgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZQkqY2FjaGU7CQkvKiBjYWNoZSB0aGF0IHN1cHBsaWVkIHRoaXMgb2JqZWN0ICovCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpjb29raWU7CS8qIG5ldGZzJ3MgZmlsZS9pbmRleCBvYmplY3QgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QJKnBhcmVudDsJLyogcGFyZW50IG9iamVjdCAqLworCXN0cnVjdCBzbG93X3dvcmsJd29yazsJCS8qIGF0dGVudGlvbiBzY2hlZHVsaW5nIHJlY29yZCAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGVwZW5kZW50czsJLyogRklGTyBvZiBkZXBlbmRlbnQgb2JqZWN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGVwX2xpbms7CS8qIGxpbmsgaW4gcGFyZW50J3MgZGVwZW5kZW50cyBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAlwZW5kaW5nX29wczsJLyogdW5zdGFydGVkIG9wZXJhdGlvbnMgb24gdGhpcyBvYmplY3QgKi8KKwlwZ29mZl90CQkJc3RvcmVfbGltaXQ7CS8qIGN1cnJlbnQgc3RvcmFnZSBsaW1pdCAqLworfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmZzY2FjaGVfb2JqZWN0X3N0YXRlc1tdOworCisjZGVmaW5lIGZzY2FjaGVfb2JqZWN0X2lzX2FjdGl2ZShvYmopCQkJICAgICAgXAorCSghdGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmKG9iaiktPmNhY2hlLT5mbGFncykgJiYgIFwKKwkgKG9iaiktPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRSAmJgkgICAgICBcCisJIChvYmopLT5zdGF0ZSA8IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKQorCitleHRlcm4gY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX29wczsKKworLyoqCisgKiBmc2NhY2hlX29iamVjdF9pbml0IC0gSW5pdGlhbGlzZSBhIGNhY2hlIG9iamVjdCBkZXNjcmlwdGlvbgorICogQG9iamVjdDogT2JqZWN0IGRlc2NyaXB0aW9uCisgKgorICogSW5pdGlhbGlzZSBhIGNhY2hlIG9iamVjdCBkZXNjcmlwdGlvbiB0byBpdHMgYmFzaWMgdmFsdWVzLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX29iamVjdF9pbml0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJIHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSkKK3sKKwlhdG9taWNfaW5jKCZjYWNoZS0+b2JqZWN0X2NvdW50KTsKKworCW9iamVjdC0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9JTklUOworCXNwaW5fbG9ja19pbml0KCZvYmplY3QtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZvYmplY3QtPmNhY2hlX2xpbmspOworCUlOSVRfSExJU1RfTk9ERSgmb2JqZWN0LT5jb29raWVfbGluayk7CisJdnNsb3dfd29ya19pbml0KCZvYmplY3QtPndvcmssICZmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfb3BzKTsKKwlJTklUX0xJU1RfSEVBRCgmb2JqZWN0LT5kZXBlbmRlbnRzKTsKKwlJTklUX0xJU1RfSEVBRCgmb2JqZWN0LT5kZXBfbGluayk7CisJSU5JVF9MSVNUX0hFQUQoJm9iamVjdC0+cGVuZGluZ19vcHMpOworCW9iamVjdC0+bl9jaGlsZHJlbiA9IDA7CisJb2JqZWN0LT5uX29wcyA9IG9iamVjdC0+bl9pbl9wcm9ncmVzcyA9IG9iamVjdC0+bl9leGNsdXNpdmUgPSAwOworCW9iamVjdC0+ZXZlbnRzID0gb2JqZWN0LT5ldmVudF9tYXNrID0gMDsKKwlvYmplY3QtPmZsYWdzID0gMDsKKwlvYmplY3QtPnN0b3JlX2xpbWl0ID0gMDsKKwlvYmplY3QtPmNhY2hlID0gY2FjaGU7CisJb2JqZWN0LT5jb29raWUgPSBjb29raWU7CisJb2JqZWN0LT5wYXJlbnQgPSBOVUxMOworfQorCitleHRlcm4gdm9pZCBmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworZXh0ZXJuIHZvaWQgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisvKioKKyAqIGZzY2FjaGVfb2JqZWN0X2Rlc3Ryb3llZCAtIE5vdGUgZGVzdHJ1Y3Rpb24gb2YgYW4gb2JqZWN0IGluIGEgY2FjaGUKKyAqIEBjYWNoZTogVGhlIGNhY2hlIGZyb20gd2hpY2ggdGhlIG9iamVjdCBjYW1lCisgKgorICogTm90ZSB0aGUgZGVzdHJ1Y3Rpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBhbiBvYmplY3QgcmVjb3JkIGluIGEgY2FjaGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX29iamVjdF9kZXN0cm95ZWQoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjYWNoZS0+b2JqZWN0X2NvdW50KSkKKwkJd2FrZV91cF9hbGwoJmZzY2FjaGVfY2FjaGVfY2xlYXJlZF93cSk7Cit9CisKKy8qKgorICogZnNjYWNoZV9vYmplY3RfbG9va3VwX2Vycm9yIC0gTm90ZSBhbiBvYmplY3QgZW5jb3VudGVyZWQgYW4gZXJyb3IKKyAqIEBvYmplY3Q6IFRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIGVycm9yIHdhcyBlbmNvdW50ZXJlZAorICoKKyAqIE5vdGUgdGhhdCBhbiBvYmplY3QgZW5jb3VudGVyZWQgYSBmYXRhbCBlcnJvciAodXN1YWxseSBhbiBJL08gZXJyb3IpIGFuZAorICogdGhhdCBpdCBzaG91bGQgYmUgd2l0aGRyYXduIGFzIHNvb24gYXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX29iamVjdF9sb29rdXBfZXJyb3Ioc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc2V0X2JpdChGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUiwgJm9iamVjdC0+ZXZlbnRzKTsKK30KKworLyoqCisgKiBmc2NhY2hlX3NldF9zdG9yZV9saW1pdCAtIFNldCB0aGUgbWF4aW11bSBzaXplIHRvIGJlIHN0b3JlZCBpbiBhbiBvYmplY3QKKyAqIEBvYmplY3Q6IFRoZSBvYmplY3QgdG8gc2V0IHRoZSBtYXhpbXVtIG9uCisgKiBAaV9zaXplOiBUaGUgbGltaXQgdG8gc2V0IGluIGJ5dGVzCisgKgorICogU2V0IHRoZSBtYXhpbXVtIHNpemUgYW4gb2JqZWN0IGlzIHBlcm1pdHRlZCB0byByZWFjaCwgaW1wbHlpbmcgdGhlIGhpZ2hlc3QKKyAqIGJ5dGUgdGhhdCBtYXkgYmUgd3JpdHRlbi4gIEludGVuZGVkIHRvIGJlIGNhbGxlZCBieSB0aGUgYXR0cl9jaGFuZ2VkKCkgb3AuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9iYWNrZW5kLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfc2V0X3N0b3JlX2xpbWl0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LCBsb2ZmX3QgaV9zaXplKQoreworCW9iamVjdC0+c3RvcmVfbGltaXQgPSBpX3NpemUgPj4gUEFHRV9TSElGVDsKKwlpZiAoaV9zaXplICYgflBBR0VfTUFTSykKKwkJb2JqZWN0LT5zdG9yZV9saW1pdCsrOworfQorCisvKioKKyAqIGZzY2FjaGVfZW5kX2lvIC0gRW5kIGEgcmV0cmlldmFsIG9wZXJhdGlvbiBvbiBhIHBhZ2UKKyAqIEBvcDogVGhlIEZTLUNhY2hlIG9wZXJhdGlvbiBjb3ZlcmluZyB0aGUgcmV0cmlldmFsCisgKiBAcGFnZTogVGhlIHBhZ2UgdGhhdCB3YXMgdG8gYmUgZmV0Y2hlZAorICogQGVycm9yOiBUaGUgZXJyb3IgY29kZSAoMCBpZiBzdWNjZXNzZnVsKQorICoKKyAqIE5vdGUgdGhlIGVuZCBvZiBhbiBvcGVyYXRpb24gdG8gcmV0cmlldmUgYSBwYWdlLCBhcyBjb3ZlcmVkIGJ5IGEgcGFydGljdWxhcgorICogb3BlcmF0aW9uIHJlY29yZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZzY2FjaGVfZW5kX2lvKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkJICBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGVycm9yKQoreworCW9wLT5lbmRfaW9fZnVuYyhwYWdlLCBvcC0+Y29udGV4dCwgZXJyb3IpOworfQorCisvKgorICogb3V0LW9mLWxpbmUgY2FjaGUgYmFja2VuZCBmdW5jdGlvbnMKKyAqLworZXh0ZXJuIHZvaWQgZnNjYWNoZV9pbml0X2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jYWNoZV9vcHMgKm9wcywKKwkJCSAgICAgICBjb25zdCBjaGFyICppZGZtdCwKKwkJCSAgICAgICAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKKworZXh0ZXJuIGludCBmc2NhY2hlX2FkZF9jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCAqZnNkZWYsCisJCQkgICAgIGNvbnN0IGNoYXIgKnRhZ25hbWUpOworZXh0ZXJuIHZvaWQgZnNjYWNoZV93aXRoZHJhd19jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpOworCitleHRlcm4gdm9pZCBmc2NhY2hlX2lvX2Vycm9yKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSk7CisKK2V4dGVybiB2b2lkIGZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkgICAgICBzdHJ1Y3QgcGFnZXZlYyAqcGFnZXZlYyk7CisKK2V4dGVybiBlbnVtIGZzY2FjaGVfY2hlY2thdXggZnNjYWNoZV9jaGVja19hdXgoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkJCSAgICAgICBjb25zdCB2b2lkICpkYXRhLAorCQkJCQkgICAgICAgdWludDE2X3QgZGF0YWxlbik7CisKKyNlbmRpZiAvKiBfTElOVVhfRlNDQUNIRV9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGVlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUuaApAQCAtMCwwICsxLDYxOCBAQAorLyogR2VuZXJhbCBmaWxlc3lzdGVtIGNhY2hpbmcgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTk9URSEhISBTZWU6CisgKgorICoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQKKyAqCisgKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIGludGVyZmFjZSBkZWNsYXJlZCBoZXJlLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0ZTQ0FDSEVfSAorI2RlZmluZSBfTElOVVhfRlNDQUNIRV9ICisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfRlNDQUNIRSkgfHwgZGVmaW5lZChDT05GSUdfRlNDQUNIRV9NT0RVTEUpCisjZGVmaW5lIGZzY2FjaGVfYXZhaWxhYmxlKCkgKDEpCisjZGVmaW5lIGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkgKGNvb2tpZSkKKyNlbHNlCisjZGVmaW5lIGZzY2FjaGVfYXZhaWxhYmxlKCkgKDApCisjZGVmaW5lIGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkgKDApCisjZW5kaWYKKworCisvKgorICogb3ZlcmxvYWQgUEdfcHJpdmF0ZV8yIHRvIGdpdmUgdXMgUEdfZnNjYWNoZSAtIHRoaXMgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0CisgKiBhIHBhZ2UgaXMgY3VycmVudGx5IGJhY2tlZCBieSBhIGxvY2FsIGRpc2sgY2FjaGUKKyAqLworI2RlZmluZSBQYWdlRnNDYWNoZShwYWdlKQkJUGFnZVByaXZhdGUyKChwYWdlKSkKKyNkZWZpbmUgU2V0UGFnZUZzQ2FjaGUocGFnZSkJCVNldFBhZ2VQcml2YXRlMigocGFnZSkpCisjZGVmaW5lIENsZWFyUGFnZUZzQ2FjaGUocGFnZSkJCUNsZWFyUGFnZVByaXZhdGUyKChwYWdlKSkKKyNkZWZpbmUgVGVzdFNldFBhZ2VGc0NhY2hlKHBhZ2UpCVRlc3RTZXRQYWdlUHJpdmF0ZTIoKHBhZ2UpKQorI2RlZmluZSBUZXN0Q2xlYXJQYWdlRnNDYWNoZShwYWdlKQlUZXN0Q2xlYXJQYWdlUHJpdmF0ZTIoKHBhZ2UpKQorCisvKiBwYXR0ZXJuIHVzZWQgdG8gZmlsbCBkZWFkIHNwYWNlIGluIGFuIGluZGV4IGVudHJ5ICovCisjZGVmaW5lIEZTQ0FDSEVfSU5ERVhfREVBREZJTExfUEFUVEVSTiAweDc5CisKK3N0cnVjdCBwYWdldmVjOworc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnOworc3RydWN0IGZzY2FjaGVfY29va2llOworc3RydWN0IGZzY2FjaGVfbmV0ZnM7CisKK3R5cGVkZWYgdm9pZCAoKmZzY2FjaGVfcndfY29tcGxldGVfdCkoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICAgdm9pZCAqY29udGV4dCwKKwkJCQkgICAgICBpbnQgZXJyb3IpOworCisvKiByZXN1bHQgb2YgaW5kZXggZW50cnkgY29uc3VsdGF0aW9uICovCitlbnVtIGZzY2FjaGVfY2hlY2thdXggeworCUZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWSwJCS8qIGVudHJ5IG9rYXkgYXMgaXMgKi8KKwlGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURSwJLyogZW50cnkgcmVxdWlyZXMgdXBkYXRlICovCisJRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURSwJLyogZW50cnkgcmVxdWlyZXMgZGVsZXRpb24gKi8KK307CisKKy8qCisgKiBmc2NhY2hlIGNvb2tpZSBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgeworCS8qIG5hbWUgb2YgY29va2llIHR5cGUgKi8KKwljaGFyIG5hbWVbMTZdOworCisJLyogY29va2llIHR5cGUgKi8KKwl1aW50OF90IHR5cGU7CisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgJMAorI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0RBVEFGSUxFCTEKKworCS8qIHNlbGVjdCB0aGUgY2FjaGUgaW50byB3aGljaCB0byBpbnNlcnQgYW4gZW50cnkgaW4gdGhpcyBpbmRleAorCSAqIC0gb3B0aW9uYWwKKwkgKiAtIHNob3VsZCByZXR1cm4gYSBjYWNoZSBpZGVudGlmaWVyIG9yIE5VTEwgdG8gY2F1c2UgdGhlIGNhY2hlIHRvIGJlCisJICogICBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IGlmIHBvc3NpYmxlIG9yIHRoZSBmaXJzdCBjYWNoZSBwaWNrZWQKKwkgKiAgIGZvciBhIG5vbi1pbmRleCBmaWxlIGlmIG5vdAorCSAqLworCXN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqKCpzZWxlY3RfY2FjaGUpKAorCQljb25zdCB2b2lkICpwYXJlbnRfbmV0ZnNfZGF0YSwKKwkJY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEpOworCisJLyogZ2V0IGFuIGluZGV4IGtleQorCSAqIC0gc2hvdWxkIHN0b3JlIHRoZSBrZXkgZGF0YSBpbiB0aGUgYnVmZmVyCisJICogLSBzaG91bGQgcmV0dXJuIHRoZSBhbW91bnQgb2YgYW1vdW50IHN0b3JlZAorCSAqIC0gbm90IHBlcm1pdHRlZCB0byByZXR1cm4gYW4gZXJyb3IKKwkgKiAtIHRoZSBuZXRmcyBkYXRhIGZyb20gdGhlIGNvb2tpZSBiZWluZyB1c2VkIGFzIHRoZSBzb3VyY2UgaXMKKwkgKiAgIHByZXNlbnRlZAorCSAqLworCXVpbnQxNl90ICgqZ2V0X2tleSkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkgICAgdm9pZCAqYnVmZmVyLAorCQkJICAgIHVpbnQxNl90IGJ1Zm1heCk7CisKKwkvKiBnZXQgY2VydGFpbiBmaWxlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgbmV0ZnMgZGF0YQorCSAqIC0gdGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGZvciBhbiBpbmRleAorCSAqIC0gbm90IHBlcm1pdHRlZCB0byByZXR1cm4gYW4gZXJyb3IKKwkgKiAtIHRoZSBuZXRmcyBkYXRhIGZyb20gdGhlIGNvb2tpZSBiZWluZyB1c2VkIGFzIHRoZSBzb3VyY2UgaXMKKwkgKiAgIHByZXNlbnRlZAorCSAqLworCXZvaWQgKCpnZXRfYXR0cikoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsIHVpbnQ2NF90ICpzaXplKTsKKworCS8qIGdldCB0aGUgYXV4aWxsaWFyeSBkYXRhIGZyb20gbmV0ZnMgZGF0YQorCSAqIC0gdGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBpbmRleCBjYXJyaWVzIG5vIHN0YXRlIGRhdGEKKwkgKiAtIHNob3VsZCBzdG9yZSB0aGUgYXV4aWxsaWFyeSBkYXRhIGluIHRoZSBidWZmZXIKKwkgKiAtIHNob3VsZCByZXR1cm4gdGhlIGFtb3VudCBvZiBhbW91bnQgc3RvcmVkCisJICogLSBub3QgcGVybWl0dGVkIHRvIHJldHVybiBhbiBlcnJvcgorCSAqIC0gdGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHNvdXJjZSBpcworCSAqICAgcHJlc2VudGVkCisJICovCisJdWludDE2X3QgKCpnZXRfYXV4KShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCSAgICB2b2lkICpidWZmZXIsCisJCQkgICAgdWludDE2X3QgYnVmbWF4KTsKKworCS8qIGNvbnN1bHQgdGhlIG5ldGZzIGFib3V0IHRoZSBzdGF0ZSBvZiBhbiBvYmplY3QKKwkgKiAtIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgaW5kZXggY2FycmllcyBubyBzdGF0ZSBkYXRhCisJICogLSB0aGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgdGFyZ2V0IGlzCisJICogICBwcmVzZW50ZWQsIGFzIGlzIHRoZSBhdXhpbGxpYXJ5IGRhdGEKKwkgKi8KKwllbnVtIGZzY2FjaGVfY2hlY2thdXggKCpjaGVja19hdXgpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLAorCQkJCQkgICB1aW50MTZfdCBkYXRhbGVuKTsKKworCS8qIGdldCBhbiBleHRyYSByZWZlcmVuY2Ugb24gYSByZWFkIGNvbnRleHQKKwkgKiAtIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiBkb2Vzbid0CisJICogICByZXF1aXJlIGEgY29udGV4dAorCSAqLworCXZvaWQgKCpnZXRfY29udGV4dCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsIHZvaWQgKmNvbnRleHQpOworCisJLyogcmVsZWFzZSBhbiBleHRyYSByZWZlcmVuY2Ugb24gYSByZWFkIGNvbnRleHQKKwkgKiAtIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiBkb2Vzbid0CisJICogICByZXF1aXJlIGEgY29udGV4dAorCSAqLworCXZvaWQgKCpwdXRfY29udGV4dCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsIHZvaWQgKmNvbnRleHQpOworCisJLyogaW5kaWNhdGUgcGFnZXMgdGhhdCBub3cgaGF2ZSBjYWNoZSBtZXRhZGF0YSByZXRhaW5lZAorCSAqIC0gdGhpcyBmdW5jdGlvbiBzaG91bGQgbWFyayB0aGUgc3BlY2lmaWVkIHBhZ2VzIGFzIG5vdyBiZWluZyBjYWNoZWQKKwkgKiAtIHRoZSBwYWdlcyB3aWxsIGhhdmUgYmVlbiBtYXJrZWQgd2l0aCBQR19mc2NhY2hlIGJlZm9yZSB0aGlzIGlzCisJICogICBjYWxsZWQsIHNvIHRoaXMgaXMgb3B0aW9uYWwKKwkgKi8KKwl2b2lkICgqbWFya19wYWdlc19jYWNoZWQpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJICBzdHJ1Y3QgcGFnZXZlYyAqY2FjaGVkX3B2ZWMpOworCisJLyogaW5kaWNhdGUgdGhlIGNvb2tpZSBpcyBubyBsb25nZXIgY2FjaGVkCisJICogLSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBiYWNraW5nIHN0b3JlIGN1cnJlbnRseSBjYWNoaW5nCisJICogICBhIGNvb2tpZSBpcyByZW1vdmVkCisJICogLSB0aGUgbmV0ZnMgc2hvdWxkIHVzZSB0aGlzIHRvIGNsZWFuIHVwIGFueSBtYXJrZXJzIGluZGljYXRpbmcKKwkgKiAgIGNhY2hlZCBwYWdlcworCSAqIC0gdGhpcyBpcyBtYW5kYXRvcnkgZm9yIGFueSBvYmplY3QgdGhhdCBtYXkgaGF2ZSBkYXRhCisJICovCisJdm9pZCAoKm5vd191bmNhY2hlZCkodm9pZCAqY29va2llX25ldGZzX2RhdGEpOworfTsKKworLyoKKyAqIGZzY2FjaGUgY2FjaGVkIG5ldHdvcmsgZmlsZXN5c3RlbSB0eXBlCisgKiAtIG5hbWUsIHZlcnNpb24gYW5kIG9wcyBtdXN0IGJlIGZpbGxlZCBpbiBiZWZvcmUgcmVnaXN0cmF0aW9uCisgKiAtIGFsbCBvdGhlciBmaWVsZHMgd2lsbCBiZSBzZXQgZHVyaW5nIHJlZ2lzdHJhdGlvbgorICovCitzdHJ1Y3QgZnNjYWNoZV9uZXRmcyB7CisJdWludDMyX3QJCQl2ZXJzaW9uOwkvKiBpbmRleGluZyB2ZXJzaW9uICovCisJY29uc3QgY2hhcgkJCSpuYW1lOwkJLyogZmlsZXN5c3RlbSBuYW1lICovCisJc3RydWN0IGZzY2FjaGVfY29va2llCQkqcHJpbWFyeV9pbmRleDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaW5rOwkJLyogaW50ZXJuYWwgbGluayAqLworfTsKKworLyoKKyAqIHNsb3ctcGF0aCBmdW5jdGlvbnMgZm9yIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkgY2FjaGluZyBhdmFpbGFibGUsIGFuZCB0aGUKKyAqIG5ldGZzIGRvZXMgYWN0dWFsbHkgaGF2ZSBhIHZhbGlkIHRva2VuCisgKiAtIHRoZXNlIGFyZSBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5CisgKiAtIHRoZXNlIGFyZSB1bmRlZmluZWQgc3ltYm9scyB3aGVuIEZTLUNhY2hlIGlzIG5vdCBjb25maWd1cmVkIGFuZCB0aGUKKyAqICAgb3B0aW1pc2VyIHRha2VzIGNhcmUgb2Ygbm90IHVzaW5nIHRoZW0KKyAqLworZXh0ZXJuIGludCBfX2ZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKik7CitleHRlcm4gdm9pZCBfX2ZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcyhzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqKTsKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKl9fZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBfX2ZzY2FjaGVfcmVsZWFzZV9jYWNoZV90YWcoc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICopOworCitleHRlcm4gc3RydWN0IGZzY2FjaGVfY29va2llICpfX2ZzY2FjaGVfYWNxdWlyZV9jb29raWUoCisJc3RydWN0IGZzY2FjaGVfY29va2llICosCisJY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiAqLAorCXZvaWQgKik7CitleHRlcm4gdm9pZCBfX2ZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICosIGludCk7CitleHRlcm4gdm9pZCBfX2ZzY2FjaGVfdXBkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKik7CitleHRlcm4gaW50IF9fZnNjYWNoZV9hdHRyX2NoYW5nZWQoc3RydWN0IGZzY2FjaGVfY29va2llICopOworZXh0ZXJuIGludCBfX2ZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLAorCQkJCQlzdHJ1Y3QgcGFnZSAqLAorCQkJCQlmc2NhY2hlX3J3X2NvbXBsZXRlX3QsCisJCQkJCXZvaWQgKiwKKwkJCQkJZ2ZwX3QpOworZXh0ZXJuIGludCBfX2ZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwKKwkJCQkJIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICosCisJCQkJCSB1bnNpZ25lZCAqLAorCQkJCQkgZnNjYWNoZV9yd19jb21wbGV0ZV90LAorCQkJCQkgdm9pZCAqLAorCQkJCQkgZ2ZwX3QpOworZXh0ZXJuIGludCBfX2ZzY2FjaGVfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwgc3RydWN0IHBhZ2UgKiwgZ2ZwX3QpOworZXh0ZXJuIGludCBfX2ZzY2FjaGVfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwgc3RydWN0IHBhZ2UgKiwgZ2ZwX3QpOworZXh0ZXJuIHZvaWQgX19mc2NhY2hlX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwgc3RydWN0IHBhZ2UgKik7CitleHRlcm4gYm9vbCBfX2ZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwgc3RydWN0IHBhZ2UgKik7CitleHRlcm4gdm9pZCBfX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKKworLyoqCisgKiBmc2NhY2hlX3JlZ2lzdGVyX25ldGZzIC0gUmVnaXN0ZXIgYSBmaWxlc3lzdGVtIGFzIGRlc2lyaW5nIGNhY2hpbmcgc2VydmljZXMKKyAqIEBuZXRmczogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWxlc3lzdGVtCisgKgorICogUmVnaXN0ZXIgYSBmaWxlc3lzdGVtIGFzIGRlc2lyaW5nIGNhY2hpbmcgc2VydmljZXMgaWYgdGhleSdyZSBhdmFpbGFibGUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQoraW50IGZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzKQoreworCWlmIChmc2NhY2hlX2F2YWlsYWJsZSgpKQorCQlyZXR1cm4gX19mc2NhY2hlX3JlZ2lzdGVyX25ldGZzKG5ldGZzKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKioKKyAqIGZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcyAtIEluZGljYXRlIHRoYXQgYSBmaWxlc3lzdGVtIG5vIGxvbmdlciBkZXNpcmVzCisgKiBjYWNoaW5nIHNlcnZpY2VzCisgKiBAbmV0ZnM6IFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlsZXN5c3RlbQorICoKKyAqIEluZGljYXRlIHRoYXQgYSBmaWxlc3lzdGVtIG5vIGxvbmdlciBkZXNpcmVzIGNhY2hpbmcgc2VydmljZXMgZm9yIHRoZQorICogbW9tZW50LgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKHN0cnVjdCBmc2NhY2hlX25ldGZzICpuZXRmcykKK3sKKwlpZiAoZnNjYWNoZV9hdmFpbGFibGUoKSkKKwkJX19mc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMobmV0ZnMpOworfQorCisvKioKKyAqIGZzY2FjaGVfbG9va3VwX2NhY2hlX3RhZyAtIExvb2sgdXAgYSBjYWNoZSB0YWcKKyAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgdGFnIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBBY3F1aXJlIGEgc3BlY2lmaWMgY2FjaGUgcmVmZXJyYWwgdGFnIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgc3BlY2lmaWMKKyAqIGNhY2hlIGluIHdoaWNoIHRvIGNhY2hlIGFuIGluZGV4LgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKGZzY2FjaGVfYXZhaWxhYmxlKCkpCisJCXJldHVybiBfX2ZzY2FjaGVfbG9va3VwX2NhY2hlX3RhZyhuYW1lKTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGZzY2FjaGVfcmVsZWFzZV9jYWNoZV90YWcgLSBSZWxlYXNlIGEgY2FjaGUgdGFnCisgKiBAdGFnOiBUaGUgdGFnIHRvIHJlbGVhc2UKKyAqCisgKiBSZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgY2FjaGUgcmVmZXJyYWwgdGFnIHByZXZpb3VzbHkgbG9va2VkIHVwLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyhzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKnRhZykKK3sKKwlpZiAoZnNjYWNoZV9hdmFpbGFibGUoKSkKKwkJX19mc2NhY2hlX3JlbGVhc2VfY2FjaGVfdGFnKHRhZyk7Cit9CisKKy8qKgorICogZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSAtIEFjcXVpcmUgYSBjb29raWUgdG8gcmVwcmVzZW50IGEgY2FjaGUgb2JqZWN0CisgKiBAcGFyZW50OiBUaGUgY29va2llIHRoYXQncyB0byBiZSB0aGUgcGFyZW50IG9mIHRoaXMgb25lCisgKiBAZGVmOiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjYWNoZSBvYmplY3QsIGluY2x1ZGluZyBjYWxsYmFjayBvcGVyYXRpb25zCisgKiBAbmV0ZnNfZGF0YTogQW4gYXJiaXRyYXJ5IHBpZWNlIG9mIGRhdGEgdG8gYmUga2VwdCBpbiB0aGUgY29va2llIHRvCisgKiByZXByZXNlbnQgdGhlIGNhY2hlIG9iamVjdCB0byB0aGUgbmV0ZnMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5mb3JtIEZTLUNhY2hlIGFib3V0IHBhcnQgb2YgYW4gaW5kZXggaGllcmFyY2h5CisgKiB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvY2F0ZSBmaWxlcy4gIFRoaXMgaXMgZG9uZSBieSByZXF1ZXN0aW5nIGEgY29va2llIGZvcgorICogZWFjaCBpbmRleCBpbiB0aGUgcGF0aCB0byB0aGUgZmlsZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmZzY2FjaGVfYWNxdWlyZV9jb29raWUoCisJc3RydWN0IGZzY2FjaGVfY29va2llICpwYXJlbnQsCisJY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiAqZGVmLAorCXZvaWQgKm5ldGZzX2RhdGEpCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKHBhcmVudCkpCisJCXJldHVybiBfX2ZzY2FjaGVfYWNxdWlyZV9jb29raWUocGFyZW50LCBkZWYsIG5ldGZzX2RhdGEpOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSAtIFJldHVybiB0aGUgY29va2llIHRvIHRoZSBjYWNoZSwgbWF5YmUgZGlzY2FyZGluZworICogaXQKKyAqIEBjb29raWU6IFRoZSBjb29raWUgYmVpbmcgcmV0dXJuZWQKKyAqIEByZXRpcmU6IFRydWUgaWYgdGhlIGNhY2hlIG9iamVjdCB0aGUgY29va2llIHJlcHJlc2VudHMgaXMgdG8gYmUgZGlzY2FyZGVkCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY29va2llIHRvIHRoZSBjYWNoZSwgZm9yY2libHkgZGlzY2FyZGluZyB0aGUKKyAqIGFzc29jaWF0ZWQgY2FjaGUgb2JqZWN0IGlmIHJldGlyZSBpcyBzZXQgdG8gdHJ1ZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIGludCByZXRpcmUpCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCV9fZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShjb29raWUsIHJldGlyZSk7Cit9CisKKy8qKgorICogZnNjYWNoZV91cGRhdGVfY29va2llIC0gUmVxdWVzdCB0aGF0IGEgY2FjaGUgb2JqZWN0IGJlIHVwZGF0ZWQKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqCisgKiBSZXF1ZXN0IGFuIHVwZGF0ZSBvZiB0aGUgaW5kZXggZGF0YSBmb3IgdGhlIGNhY2hlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiBjb29raWUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3VwZGF0ZV9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCV9fZnNjYWNoZV91cGRhdGVfY29va2llKGNvb2tpZSk7Cit9CisKKy8qKgorICogZnNjYWNoZV9waW5fY29va2llIC0gUGluIGEgZGF0YS1zdG9yYWdlIGNhY2hlIG9iamVjdCBpbiBpdHMgY2FjaGUKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqCisgKiBQZXJtaXQgZGF0YS1zdG9yYWdlIGNhY2hlIG9iamVjdHMgdG8gYmUgcGlubmVkIGluIHRoZSBjYWNoZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZnNjYWNoZV9waW5fY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoqCisgKiBmc2NhY2hlX3Bpbl9jb29raWUgLSBVbnBpbiBhIGRhdGEtc3RvcmFnZSBjYWNoZSBvYmplY3QgaW4gaXRzIGNhY2hlCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKgorICogUGVybWl0IGRhdGEtc3RvcmFnZSBjYWNoZSBvYmplY3RzIHRvIGJlIHVucGlubmVkIGZyb20gdGhlIGNhY2hlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV91bnBpbl9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7Cit9CisKKy8qKgorICogZnNjYWNoZV9hdHRyX2NoYW5nZWQgLSBOb3RpZnkgY2FjaGUgdGhhdCBhbiBvYmplY3QncyBhdHRyaWJ1dGVzIGNoYW5nZWQKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqCisgKiBTZW5kIGEgbm90aWZpY2F0aW9uIHRvIHRoZSBjYWNoZSBpbmRpY2F0aW5nIHRoYXQgYW4gb2JqZWN0J3MgYXR0cmlidXRlcyBoYXZlCisgKiBjaGFuZ2VkLiAgVGhpcyBpbmNsdWRlcyB0aGUgZGF0YSBzaXplLiAgVGhlc2UgYXR0cmlidXRlcyB3aWxsIGJlIG9idGFpbmVkCisgKiB0aHJvdWdoIHRoZSBnZXRfYXR0cigpIGNvb2tpZSBkZWZpbml0aW9uIG9wLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBmc2NhY2hlX2F0dHJfY2hhbmdlZChzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJcmV0dXJuIF9fZnNjYWNoZV9hdHRyX2NoYW5nZWQoY29va2llKTsKKwllbHNlCisJCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoqCisgKiBmc2NhY2hlX3Jlc2VydmVfc3BhY2UgLSBSZXNlcnZlIGRhdGEgc3BhY2UgZm9yIGEgY2FjaGVkIG9iamVjdAorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQGlfc2l6ZTogVGhlIGFtb3VudCBvZiBzcGFjZSB0byBiZSByZXNlcnZlZAorICoKKyAqIFJlc2VydmUgYW4gYW1vdW50IG9mIHNwYWNlIGluIHRoZSBjYWNoZSBmb3IgdGhlIGNhY2hlIG9iamVjdCBhdHRhY2hlZCB0byBhCisgKiBjb29raWUgc28gdGhhdCBhIHdyaXRlIHRvIHRoYXQgb2JqZWN0IHdpdGhpbiB0aGUgc3BhY2UgY2FuIGFsd2F5cyBiZQorICogaG9ub3VyZWQuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQoraW50IGZzY2FjaGVfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgbG9mZl90IHNpemUpCit7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKioKKyAqIGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlIC0gUmVhZCBhIHBhZ2UgZnJvbSB0aGUgY2FjaGUgb3IgYWxsb2NhdGUgYSBibG9jaworICogaW4gd2hpY2ggdG8gc3RvcmUgaXQKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqIEBwYWdlOiBUaGUgbmV0ZnMgcGFnZSB0byBmaWxsIGlmIHBvc3NpYmxlCisgKiBAZW5kX2lvX2Z1bmM6IFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhbmQgaWYgdGhlIHBhZ2UgaXMgZmlsbGVkCisgKiBAY29udGV4dDogQW4gYXJiaXRyYXJ5IHBpZWNlIG9mIGRhdGEgdG8gcGFzcyBvbiB0byBlbmRfaW9fZnVuYygpCisgKiBAZ2ZwOiBUaGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgYmUgbWFkZQorICoKKyAqIFJlYWQgYSBwYWdlIGZyb20gdGhlIGNhY2hlLCBvciBpZiB0aGF0J3Mgbm90IHBvc3NpYmxlIG1ha2UgYSBwb3RlbnRpYWwKKyAqIG9uZS1ibG9jayByZXNlcnZhdGlvbiBpbiB0aGUgY2FjaGUgaW50byB3aGljaCB0aGUgcGFnZSBtYXkgYmUgc3RvcmVkIG9uY2UKKyAqIGZldGNoZWQgZnJvbSB0aGUgc2VydmVyLgorICoKKyAqIElmIHRoZSBwYWdlIGlzIG5vdCBiYWNrZWQgYnkgdGhlIGNhY2hlIG9iamVjdCwgb3IgaWYgaXQgdGhlcmUncyBzb21lIHJlYXNvbgorICogaXQgY2FuJ3QgYmUsIC1FTk9CVUZTIHdpbGwgYmUgcmV0dXJuZWQgYW5kIG5vdGhpbmcgbW9yZSB3aWxsIGJlIGRvbmUgZm9yCisgKiB0aGF0IHBhZ2UuCisgKgorICogRWxzZSwgaWYgdGhhdCBwYWdlIGlzIGJhY2tlZCBieSB0aGUgY2FjaGUsIGEgcmVhZCB3aWxsIGJlIGluaXRpYXRlZCBkaXJlY3RseQorICogdG8gdGhlIG5ldGZzJ3MgcGFnZSBhbmQgMCB3aWxsIGJlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uICBUaGUKKyAqIGVuZF9pb19mdW5jKCkgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiB0ZXJtaW5hdGVzIG9uIGEKKyAqIGNvbXBsZXRpb24gb3IgZmFpbHVyZS4gIE5vdGUgdGhhdCB0aGUgY2FsbGJhY2sgbWF5IGJlIGludm9rZWQgYmVmb3JlIHRoZQorICogcmV0dXJuLgorICoKKyAqIEVsc2UsIGlmIHRoZSBwYWdlIGlzIHVuYmFja2VkLCAtRU5PREFUQSBpcyByZXR1cm5lZCBhbmQgYSBibG9jayBtYXkgaGF2ZQorICogYmVlbiBhbGxvY2F0ZWQgaW4gdGhlIGNhY2hlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICBmc2NhY2hlX3J3X2NvbXBsZXRlX3QgZW5kX2lvX2Z1bmMsCisJCQkgICAgICAgdm9pZCAqY29udGV4dCwKKwkJCSAgICAgICBnZnBfdCBnZnApCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCXJldHVybiBfX2ZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKGNvb2tpZSwgcGFnZSwgZW5kX2lvX2Z1bmMsCisJCQkJCQkgICAgY29udGV4dCwgZ2ZwKTsKKwllbHNlCisJCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoqCisgKiBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMgLSBSZWFkIHBhZ2VzIGZyb20gdGhlIGNhY2hlIGFuZC9vciBhbGxvY2F0ZQorICogYmxvY2tzIGluIHdoaWNoIHRvIHN0b3JlIHRoZW0KKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqIEBtYXBwaW5nOiBUaGUgbmV0ZnMgaW5vZGUgbWFwcGluZyB0byB3aGljaCB0aGUgcGFnZXMgd2lsbCBiZSBhdHRhY2hlZAorICogQHBhZ2VzOiBBIGxpc3Qgb2YgcG90ZW50aWFsIG5ldGZzIHBhZ2VzIHRvIGJlIGZpbGxlZAorICogQGVuZF9pb19mdW5jOiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYW5kIGlmIGVhY2ggcGFnZSBpcyBmaWxsZWQKKyAqIEBjb250ZXh0OiBBbiBhcmJpdHJhcnkgcGllY2Ugb2YgZGF0YSB0byBwYXNzIG9uIHRvIGVuZF9pb19mdW5jKCkKKyAqIEBnZnA6IFRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBiZSBtYWRlCisgKgorICogUmVhZCBhIHNldCBvZiBwYWdlcyBmcm9tIHRoZSBjYWNoZSwgb3IgaWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYXR0ZW1wdCB0bworICogbWFrZSBhIHBvdGVudGlhbCBvbmUtYmxvY2sgcmVzZXJ2YXRpb24gZm9yIGVhY2ggcGFnZSBpbiB0aGUgY2FjaGUgaW50byB3aGljaAorICogdGhhdCBwYWdlIG1heSBiZSBzdG9yZWQgb25jZSBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci4KKyAqCisgKiBJZiBzb21lIHBhZ2VzIGFyZSBub3QgYmFja2VkIGJ5IHRoZSBjYWNoZSBvYmplY3QsIG9yIGlmIGl0IHRoZXJlJ3Mgc29tZQorICogcmVhc29uIHRoZXkgY2FuJ3QgYmUsIC1FTk9CVUZTIHdpbGwgYmUgcmV0dXJuZWQgYW5kIG5vdGhpbmcgbW9yZSB3aWxsIGJlCisgKiBkb25lIGZvciB0aGF0IHBhZ2VzLgorICoKKyAqIEVsc2UsIGlmIHNvbWUgb2YgdGhlIHBhZ2VzIGFyZSBiYWNrZWQgYnkgdGhlIGNhY2hlLCBhIHJlYWQgd2lsbCBiZSBpbml0aWF0ZWQKKyAqIGRpcmVjdGx5IHRvIHRoZSBuZXRmcydzIHBhZ2UgYW5kIDAgd2lsbCBiZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLiAgVGhlCisgKiBlbmRfaW9fZnVuYygpIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gdGVybWluYXRlcyBvbiBhCisgKiBjb21wbGV0aW9uIG9yIGZhaWx1cmUuICBOb3RlIHRoYXQgdGhlIGNhbGxiYWNrIG1heSBiZSBpbnZva2VkIGJlZm9yZSB0aGUKKyAqIHJldHVybi4KKyAqCisgKiBFbHNlLCBpZiBhIHBhZ2UgaXMgdW5iYWNrZWQsIC1FTk9EQVRBIGlzIHJldHVybmVkIGFuZCBhIGJsb2NrIG1heSBoYXZlCisgKiBiZWVuIGFsbG9jYXRlZCBpbiB0aGUgY2FjaGUuCisgKgorICogQmVjYXVzZSB0aGUgZnVuY3Rpb24gbWF5IHdhbnQgdG8gcmV0dXJuIGFsbCBvZiAtRU5PQlVGUywgLUVOT0RBVEEgYW5kIDAgaW4KKyAqIHJlZ2FyZCB0byBkaWZmZXJlbnQgcGFnZXMsIHRoZSByZXR1cm4gdmFsdWVzIGFyZSBwcmlvcml0aXNlZCBpbiB0aGF0IG9yZGVyLgorICogQW55IHBhZ2VzIHN1Ym1pdHRlZCBmb3IgcmVhZGluZyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBwYWdlcyBsaXN0LgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCisJCQkJdW5zaWduZWQgKm5yX3BhZ2VzLAorCQkJCWZzY2FjaGVfcndfY29tcGxldGVfdCBlbmRfaW9fZnVuYywKKwkJCQl2b2lkICpjb250ZXh0LAorCQkJCWdmcF90IGdmcCkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJcmV0dXJuIF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKGNvb2tpZSwgbWFwcGluZywgcGFnZXMsCisJCQkJCQkgICAgIG5yX3BhZ2VzLCBlbmRfaW9fZnVuYywKKwkJCQkJCSAgICAgY29udGV4dCwgZ2ZwKTsKKwllbHNlCisJCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoqCisgKiBmc2NhY2hlX2FsbG9jX3BhZ2UgLSBBbGxvY2F0ZSBhIGJsb2NrIGluIHdoaWNoIHRvIHN0b3JlIGEgcGFnZQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQHBhZ2U6IFRoZSBuZXRmcyBwYWdlIHRvIGFsbG9jYXRlIGEgcGFnZSBmb3IKKyAqIEBnZnA6IFRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBiZSBtYWRlCisgKgorICogUmVxdWVzdCBBbGxvY2F0aW9uIGEgYmxvY2sgaW4gdGhlIGNhY2hlIGluIHdoaWNoIHRvIHN0b3JlIGEgbmV0ZnMgcGFnZQorICogd2l0aG91dCByZXRyaWV2aW5nIGFueSBjb250ZW50cyBmcm9tIHRoZSBjYWNoZS4KKyAqCisgKiBJZiB0aGUgcGFnZSBpcyBub3QgYmFja2VkIGJ5IGEgZmlsZSB0aGVuIC1FTk9CVUZTIHdpbGwgYmUgcmV0dXJuZWQgYW5kCisgKiBub3RoaW5nIG1vcmUgd2lsbCBiZSBkb25lLCBhbmQgbm8gcmVzZXJ2YXRpb24gd2lsbCBiZSBtYWRlLgorICoKKyAqIEVsc2UsIGEgYmxvY2sgd2lsbCBiZSBhbGxvY2F0ZWQgaWYgb25lIHdhc24ndCBhbHJlYWR5LCBhbmQgMCB3aWxsIGJlCisgKiByZXR1cm5lZAorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBmc2NhY2hlX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgICAgIGdmcF90IGdmcCkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJcmV0dXJuIF9fZnNjYWNoZV9hbGxvY19wYWdlKGNvb2tpZSwgcGFnZSwgZ2ZwKTsKKwllbHNlCisJCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoqCisgKiBmc2NhY2hlX3dyaXRlX3BhZ2UgLSBSZXF1ZXN0IHN0b3JhZ2Ugb2YgYSBwYWdlIGluIHRoZSBjYWNoZQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQHBhZ2U6IFRoZSBuZXRmcyBwYWdlIHRvIHN0b3JlCisgKiBAZ2ZwOiBUaGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgYmUgbWFkZQorICoKKyAqIFJlcXVlc3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXRmcyBwYWdlIGJlIHdyaXR0ZW4gaW50byB0aGUgY2FjaGUuICBUaGlzCisgKiByZXF1ZXN0IG1heSBiZSBpZ25vcmVkIGlmIG5vIGNhY2hlIGJsb2NrIGlzIGN1cnJlbnRseSBhbGxvY2F0ZWQsIGluIHdoaWNoCisgKiBjYXNlIGl0IHdpbGwgcmV0dXJuIC1FTk9CVUZTLgorICoKKyAqIElmIGEgY2FjaGUgYmxvY2sgd2FzIGFscmVhZHkgYWxsb2NhdGVkLCBhIHdyaXRlIHdpbGwgYmUgaW5pdGlhdGVkIGFuZCAwIHdpbGwKKyAqIGJlIHJldHVybmVkLiAgVGhlIFBHX2ZzY2FjaGVfd3JpdGUgcGFnZSBiaXQgaXMgc2V0IGltbWVkaWF0ZWx5IGFuZCB3aWxsIHRoZW4KKyAqIGJlIGNsZWFyZWQgYXQgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUKKyAqIG9mIHRoZSBvcGVyYXRpb24uICBOb3RlIHRoYXQgdGhlIGNvbXBsZXRpb24gbWF5IGhhcHBlbiBiZWZvcmUgdGhlIHJldHVybi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZnNjYWNoZV93cml0ZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCSAgICAgICBnZnBfdCBnZnApCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCXJldHVybiBfX2ZzY2FjaGVfd3JpdGVfcGFnZShjb29raWUsIHBhZ2UsIGdmcCk7CisJZWxzZQorCQlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qKgorICogZnNjYWNoZV91bmNhY2hlX3BhZ2UgLSBJbmRpY2F0ZSB0aGF0IGNhY2hpbmcgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIG9uIGEgcGFnZQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQHBhZ2U6IFRoZSBuZXRmcyBwYWdlIHRoYXQgd2FzIGJlaW5nIGNhY2hlZC4KKyAqCisgKiBUZWxsIHRoZSBjYWNoZSB0aGF0IHdlIG5vIGxvbmdlciB3YW50IGEgcGFnZSB0byBiZSBjYWNoZWQgYW5kIHRoYXQgaXQgc2hvdWxkCisgKiByZW1vdmUgYW55IGtub3dsZWRnZSBvZiB0aGUgbmV0ZnMgcGFnZSBpdCBtYXkgaGF2ZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBjYW5ub3QgY2FuY2VsIGFueSBvdXRzdGFuZGluZyBJL08gb3BlcmF0aW9ucyBiZXR3ZWVuIHRoaXMKKyAqIHBhZ2UgYW5kIHRoZSBjYWNoZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfdW5jYWNoZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJICBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJX19mc2NhY2hlX3VuY2FjaGVfcGFnZShjb29raWUsIHBhZ2UpOworfQorCisvKioKKyAqIGZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZSAtIEFzayBpZiBhIHBhZ2UgaXMgYmVpbmcgd3JpdGluZyB0byB0aGUgY2FjaGUKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqIEBwYWdlOiBUaGUgbmV0ZnMgcGFnZSB0aGF0IGlzIGJlaW5nIGNhY2hlZC4KKyAqCisgKiBBc2sgdGhlIGNhY2hlIGlmIGEgcGFnZSBpcyBiZWluZyB3cml0dGVuIHRvIHRoZSBjYWNoZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitib29sIGZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlyZXR1cm4gX19mc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUgLSBXYWl0IGZvciBhIHBhZ2UgdG8gY29tcGxldGUgd3JpdGluZyB0byB0aGUgY2FjaGUKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqIEBwYWdlOiBUaGUgbmV0ZnMgcGFnZSB0aGF0IGlzIGJlaW5nIGNhY2hlZC4KKyAqCisgKiBBc2sgdGhlIGNhY2hlIHRvIHdha2UgdXMgdXAgd2hlbiBhIHBhZ2UgaXMgbm8gbG9uZ2VyIGJlaW5nIHdyaXR0ZW4gdG8gdGhlCisgKiBjYWNoZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCXN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlfX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSk7Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfRlNDQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCBhN2Y4MTM0Li4wMTVhM2QyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTEsMTUgKzEsMTggQEAKICNpZm5kZWYgX0xJTlVYX0ZUUkFDRV9ICiAjZGVmaW5lIF9MSU5VWF9GVFJBQ0VfSAogCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZV9jbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogCkBAIC05NSw5ICs5OCw0MSBAQAogCQkgICBsb2ZmX3QgKnBwb3MpOwogI2VuZGlmCiAKK3N0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJY2hhcgkJCSpuYW1lOworCWludAkJCSgqZnVuYykoY2hhciAqZnVuYywgY2hhciAqY21kLAorCQkJCQljaGFyICpwYXJhbXMsIGludCBlbmFibGUpOworfTsKKwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotLyogYXNtL2Z0cmFjZS5oIG11c3QgYmUgZGVmaW5lZCBmb3IgYXJjaHMgc3VwcG9ydGluZyBkeW5hbWljIGZ0cmFjZSAqLwotI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKworaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUodm9pZCk7CitpbnQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcG9zdF9wcm9jZXNzKHZvaWQpOworCitzdHJ1Y3Qgc2VxX2ZpbGU7CisKK3N0cnVjdCBmdHJhY2VfcHJvYmVfb3BzIHsKKwl2b2lkCQkJKCpmdW5jKSh1bnNpZ25lZCBsb25nIGlwLAorCQkJCQl1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwKKwkJCQkJdm9pZCAqKmRhdGEpOworCWludAkJCSgqY2FsbGJhY2spKHVuc2lnbmVkIGxvbmcgaXAsIHZvaWQgKipkYXRhKTsKKwl2b2lkCQkJKCpmcmVlKSh2b2lkICoqZGF0YSk7CisJaW50CQkJKCpwcmludCkoc3RydWN0IHNlcV9maWxlICptLAorCQkJCQkgdW5zaWduZWQgbG9uZyBpcCwKKwkJCQkJIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMsCisJCQkJCSB2b2lkICpkYXRhKTsKK307CisKK2V4dGVybiBpbnQKK3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLAorCQkJICAgICAgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZAordW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoY2hhciAqZ2xvYiwgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcywKKwkJCQl2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkCit1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZV9mdW5jKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfYWxsKGNoYXIgKmdsb2IpOwogCiBlbnVtIHsKIAlGVFJBQ0VfRkxfRlJFRQkJPSAoMSA8PCAwKSwKQEAgLTExMCwxNSArMTQ1LDIzIEBACiB9OwogCiBzdHJ1Y3QgZHluX2Z0cmFjZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXVuc2lnbmVkIGxvbmcJCWlwOyAvKiBhZGRyZXNzIG9mIG1jb3VudCBjYWxsLXNpdGUgKi8KLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlzdHJ1Y3QgZHluX2FyY2hfZnRyYWNlCWFyY2g7CisJdW5pb24geworCQl1bnNpZ25lZCBsb25nCQlpcDsgLyogYWRkcmVzcyBvZiBtY291bnQgY2FsbC1zaXRlICovCisJCXN0cnVjdCBkeW5fZnRyYWNlCSpmcmVlbGlzdDsKKwl9OworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJCXN0cnVjdCBkeW5fZnRyYWNlCSpuZXdsaXN0OworCX07CisJc3RydWN0IGR5bl9hcmNoX2Z0cmFjZQkJYXJjaDsKIH07CiAKIGludCBmdHJhY2VfZm9yY2VfdXBkYXRlKHZvaWQpOwogdm9pZCBmdHJhY2Vfc2V0X2ZpbHRlcih1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGludCByZXNldCk7CiAKK2ludCByZWdpc3Rlcl9mdHJhY2VfY29tbWFuZChzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqY21kKTsKK2ludCB1bnJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpOworCiAvKiBkZWZpbmVkIGluIGFyY2ggKi8KIGV4dGVybiBpbnQgZnRyYWNlX2lwX2NvbnZlcnRlZCh1bnNpZ25lZCBsb25nIGlwKTsKIGV4dGVybiBpbnQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSk7CkBAIC0xMjYsNiArMTY5LDEwIEBACiBleHRlcm4gdm9pZCBmdHJhY2VfY2FsbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX2NhbGwodm9pZCk7CiBleHRlcm4gdm9pZCBtY291bnRfY2FsbCh2b2lkKTsKKworI2lmbmRlZiBGVFJBQ0VfQUREUgorI2RlZmluZSBGVFJBQ0VfQUREUiAoKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2NhbGxlcikKKyNlbmRpZgogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIGV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCk7CiBleHRlcm4gaW50IGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKTsKQEAgLTEzNiw3ICsxODMsNyBAQAogI2VuZGlmCiAKIC8qKgotICogZnRyYWNlX21ha2Vfbm9wIC0gY29udmVydCBjb2RlIGludG8gdG9wCisgKiBmdHJhY2VfbWFrZV9ub3AgLSBjb252ZXJ0IGNvZGUgaW50byBub3AKICAqIEBtb2Q6IG1vZHVsZSBzdHJ1Y3R1cmUgaWYgY2FsbGVkIGJ5IG1vZHVsZSBsb2FkIGluaXRpYWxpemF0aW9uCiAgKiBAcmVjOiB0aGUgbWNvdW50IGNhbGwgc2l0ZSByZWNvcmQKICAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0aGF0IHRoZSBjYWxsIHNpdGUgc2hvdWxkIGJlIGNhbGxpbmcKQEAgLTE4MSw3ICsyMjgsNiBAQAogICovCiBleHRlcm4gaW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotCiAvKiBNYXkgYmUgZGVmaW5lZCBpbiBhcmNoICovCiBleHRlcm4gaW50IGZ0cmFjZV9hcmNoX3JlYWRfZHluX2luZm8oY2hhciAqYnVmLCBpbnQgc2l6ZSk7CiAKQEAgLTE5OCw2ICsyNDQsMTQgQEAKICMgZGVmaW5lIGZ0cmFjZV9kaXNhYmxlX2RhZW1vbigpCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2VfZW5hYmxlX2RhZW1vbigpCQkJZG8geyB9IHdoaWxlICgwKQogc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9yZWxlYXNlKHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpIHsgfQorc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKmNtZCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoY2hhciAqY21kX25hbWUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKIC8qIHRvdGFsbHkgZGlzYWJsZSBmdHJhY2UgLSBjYW4gbm90IHJlLWVuYWJsZSBhZnRlciB0aGlzICovCkBAIC0yMzMsMjQgKzI4NywyNSBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgotLyogVE9ETzogbmVlZCB0byBmaXggdGhpcyBmb3IgQVJNICovCi0jIGRlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLSMgZGVmaW5lIENBTExFUl9BRERSMSAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDEpKQotIyBkZWZpbmUgQ0FMTEVSX0FERFIyICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMikpCi0jIGRlZmluZSBDQUxMRVJfQUREUjMgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygzKSkKLSMgZGVmaW5lIENBTExFUl9BRERSNCAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDQpKQotIyBkZWZpbmUgQ0FMTEVSX0FERFI1ICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNSkpCi0jIGRlZmluZSBDQUxMRVJfQUREUjYgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg2KSkKLSNlbHNlCi0jIGRlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLSMgZGVmaW5lIENBTExFUl9BRERSMSAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSMiAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSMyAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSNCAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSNSAwVUwKLSMgZGVmaW5lIENBTExFUl9BRERSNiAwVUwKLSNlbmRpZgorI2lmbmRlZiBIQVZFX0FSQ0hfQ0FMTEVSX0FERFIKKyMgaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKyMgIGRlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjEgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygxKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjIgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygyKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjMgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygzKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjQgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg0KSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjUgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg1KSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjYgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg2KSkKKyMgZWxzZQorIyAgZGVmaW5lIENBTExFUl9BRERSMCAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQorIyAgZGVmaW5lIENBTExFUl9BRERSMSAwVUwKKyMgIGRlZmluZSBDQUxMRVJfQUREUjIgMFVMCisjICBkZWZpbmUgQ0FMTEVSX0FERFIzIDBVTAorIyAgZGVmaW5lIENBTExFUl9BRERSNCAwVUwKKyMgIGRlZmluZSBDQUxMRVJfQUREUjUgMFVMCisjICBkZWZpbmUgQ0FMTEVSX0FERFI2IDBVTAorIyBlbmRpZgorI2VuZGlmIC8qIGlmbmRlZiBIQVZFX0FSQ0hfQ0FMTEVSX0FERFIgKi8KIAogI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgogICBleHRlcm4gdm9pZCB0aW1lX2hhcmRpcnFzX29uKHVuc2lnbmVkIGxvbmcgYTAsIHVuc2lnbmVkIGxvbmcgYTEpOwpAQCAtMjY4LDU0ICszMjMsNiBAQAogIyBkZWZpbmUgdHJhY2VfcHJlZW1wdF9vZmYoYTAsIGExKQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVFJBQ0lORwotZXh0ZXJuIGludCBmdHJhY2VfZHVtcF9vbl9vb3BzOwotCi1leHRlcm4gdm9pZCB0cmFjaW5nX3N0YXJ0KHZvaWQpOwotZXh0ZXJuIHZvaWQgdHJhY2luZ19zdG9wKHZvaWQpOwotZXh0ZXJuIHZvaWQgZnRyYWNlX29mZl9wZXJtYW5lbnQodm9pZCk7Ci0KLWV4dGVybiB2b2lkCi1mdHJhY2Vfc3BlY2lhbCh1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKTsKLQotLyoqCi0gKiBmdHJhY2VfcHJpbnRrIC0gcHJpbnRmIGZvcm1hdHRpbmcgaW4gdGhlIGZ0cmFjZSBidWZmZXIKLSAqIEBmbXQ6IHRoZSBwcmludGYgZm9ybWF0IGZvciBwcmludGluZwotICoKLSAqIE5vdGU6IF9fZnRyYWNlX3ByaW50ayBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgZnRyYWNlX3ByaW50ayBhbmQKLSAqICAgICAgIHRoZSBAaXAgaXMgcGFzc2VkIGluIHZpYSB0aGUgZnRyYWNlX3ByaW50ayBtYWNyby4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIGtlcm5lbCBkZXZlbG9wZXIgdG8gZGVidWcgZmFzdCBwYXRoIHNlY3Rpb25zCi0gKiB0aGF0IHByaW50ayBpcyBub3QgYXBwcm9wcmlhdGUgZm9yLiBCeSBzY2F0dGVyaW5nIGluIHZhcmlvdXMKLSAqIHByaW50ayBsaWtlIHRyYWNpbmcgaW4gdGhlIGNvZGUsIGEgZGV2ZWxvcGVyIGNhbiBxdWlja2x5IHNlZQotICogd2hlcmUgcHJvYmxlbXMgYXJlIG9jY3VycmluZy4KLSAqCi0gKiBUaGlzIGlzIGludGVuZGVkIGFzIGEgZGVidWdnaW5nIHRvb2wgZm9yIHRoZSBkZXZlbG9wZXIgb25seS4KLSAqIFBsZWFzZSByZWZyYWluIGZyb20gbGVhdmluZyBmdHJhY2VfcHJpbnRrcyBzY2F0dGVyZWQgYXJvdW5kIGluCi0gKiB5b3VyIGNvZGUuCi0gKi8KLSMgZGVmaW5lIGZ0cmFjZV9wcmludGsoZm10Li4uKSBfX2Z0cmFjZV9wcmludGsoX1RISVNfSVBfLCBmbXQpCi1leHRlcm4gaW50Ci1fX2Z0cmFjZV9wcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotZXh0ZXJuIHZvaWQgZnRyYWNlX2R1bXAodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkCi1mdHJhY2Vfc3BlY2lhbCh1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50Ci1mdHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjaW5nX3N0YXJ0KHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfc3RvcCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2Vfb2ZmX3Blcm1hbmVudCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50Ci1mdHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpIHsgfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKIGV4dGVybiB2b2lkIGZ0cmFjZV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX2luaXRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwKQEAgLTMyNywzNiArMzM0LDYgQEAKIAkJICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkgeyB9CiAjZW5kaWYKIAotZW51bSB7Ci0JUE9XRVJfTk9ORSA9IDAsCi0JUE9XRVJfQ1NUQVRFID0gMSwKLQlQT1dFUl9QU1RBVEUgPSAyLAotfTsKLQotc3RydWN0IHBvd2VyX3RyYWNlIHsKLSNpZmRlZiBDT05GSUdfUE9XRVJfVFJBQ0VSCi0Ja3RpbWVfdAkJCXN0YW1wOwotCWt0aW1lX3QJCQllbmQ7Ci0JaW50CQkJdHlwZTsKLQlpbnQJCQlzdGF0ZTsKLSNlbmRpZgotfTsKLQotI2lmZGVmIENPTkZJR19QT1dFUl9UUkFDRVIKLWV4dGVybiB2b2lkIHRyYWNlX3Bvd2VyX3N0YXJ0KHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLAotCQkJCQl1bnNpZ25lZCBpbnQgc3RhdGUpOwotZXh0ZXJuIHZvaWQgdHJhY2VfcG93ZXJfbWFyayhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQkJdW5zaWduZWQgaW50IHN0YXRlKTsKLWV4dGVybiB2b2lkIHRyYWNlX3Bvd2VyX2VuZChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfcG93ZXJfc3RhcnQoc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsCi0JCQkJCXVuc2lnbmVkIGludCBzdGF0ZSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfcG93ZXJfbWFyayhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQkJdW5zaWduZWQgaW50IHN0YXRlKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9wb3dlcl9lbmQoc3RydWN0IHBvd2VyX3RyYWNlICppdCkgeyB9Ci0jZW5kaWYKLQotCiAvKgogICogU3RydWN0dXJlIHRoYXQgZGVmaW5lcyBhbiBlbnRyeSBmdW5jdGlvbiB0cmFjZS4KICAqLwpAQCAtMzk4LDggKzM3NSw3IEBACiBleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKIAogZXh0ZXJuIGludAotZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGxvbmcgdGltZSwKLQkJCSB1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpOworZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpOwogZXh0ZXJuIHZvaWQKIGZ0cmFjZV9wb3BfcmV0dXJuX3RyYWNlKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgdW5zaWduZWQgbG9uZyAqcmV0KTsKIApAQCAtNTE0LDYgKzQ5MCw1MCBAQAogCXJldHVybiB0c2stPnRyYWNlICYgVFNLX1RSQUNFX0ZMX0dSQVBIOwogfQogCitleHRlcm4gaW50IGZ0cmFjZV9kdW1wX29uX29vcHM7CisKICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqLwogCisKKyNpZmRlZiBDT05GSUdfSFdfQlJBTkNIX1RSQUNFUgorCit2b2lkIHRyYWNlX2h3X2JyYW5jaCh1NjQgZnJvbSwgdTY0IHRvKTsKK3ZvaWQgdHJhY2VfaHdfYnJhbmNoX29vcHModm9pZCk7CisKKyNlbHNlIC8qIENPTkZJR19IV19CUkFOQ0hfVFJBQ0VSICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9od19icmFuY2godTY0IGZyb20sIHU2NCB0bykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9od19icmFuY2hfb29wcyh2b2lkKSB7fQorCisjZW5kaWYgLyogQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIgKi8KKworLyoKKyAqIEEgc3lzY2FsbCBlbnRyeSBpbiB0aGUgZnRyYWNlIHN5c2NhbGxzIGFycmF5LgorICoKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBzeXNjYWxsCisgKiBAbmJfYXJnczogbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXQgdGFrZXMKKyAqIEB0eXBlczogbGlzdCBvZiB0eXBlcyBhcyBzdHJpbmdzCisgKiBAYXJnczogbGlzdCBvZiBhcmdzIGFzIHN0cmluZ3MgKGFyZ3NbaV0gbWF0Y2hlcyB0eXBlc1tpXSkKKyAqLworc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQluYl9hcmdzOworCWNvbnN0IGNoYXIJKip0eXBlczsKKwljb25zdCBjaGFyCSoqYXJnczsKK307CisKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCitleHRlcm4gdm9pZCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNjYWxsX25yX3RvX21ldGEoaW50IG5yKTsKK2V4dGVybiB2b2lkIHN0YXJ0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKTsKK2V4dGVybiB2b2lkIHN0b3BfZnRyYWNlX3N5c2NhbGxzKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZnRyYWNlX3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX2Z0cmFjZV9zeXNjYWxscyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2Vfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9CisjZW5kaWYKKwogI2VuZGlmIC8qIF9MSU5VWF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2VfaXJxLmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9pcnEuaAppbmRleCAzNjZhMDU0Li5kY2E3YmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9pcnEuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX0ZUUkFDRV9JUlFfSAogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKQorI2lmZGVmIENPTkZJR19GVFJBQ0VfTk1JX0VOVEVSCiBleHRlcm4gdm9pZCBmdHJhY2Vfbm1pX2VudGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX25taV9leGl0KHZvaWQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGRkMjBjZDcuLjBiYmMxNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaCBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCmluZGV4IGY4MzI4ODMuLmZhYTFjZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCkBAIC0xNSw1NSArMTUsNjEgQEAKICAqIC0gYml0cyAwLTcgYXJlIHRoZSBwcmVlbXB0aW9uIGNvdW50IChtYXggcHJlZW1wdGlvbiBkZXB0aDogMjU2KQogICogLSBiaXRzIDgtMTUgYXJlIHRoZSBzb2Z0aXJxIGNvdW50IChtYXggIyBvZiBzb2Z0aXJxczogMjU2KQogICoKLSAqIFRoZSBoYXJkaXJxIGNvdW50IGNhbiBiZSBvdmVycmlkZGVuIHBlciBhcmNoaXRlY3R1cmUsIHRoZSBkZWZhdWx0IGlzOgorICogVGhlIGhhcmRpcnEgY291bnQgY2FuIGluIHRoZW9yeSByZWFjaCB0aGUgc2FtZSBhcyBOUl9JUlFTLgorICogSW4gcmVhbGl0eSwgdGhlIG51bWJlciBvZiBuZXN0ZWQgSVJRUyBpcyBsaW1pdGVkIHRvIHRoZSBzdGFjaworICogc2l6ZSBhcyB3ZWxsLiBGb3IgYXJjaHMgd2l0aCBvdmVyIDEwMDAgSVJRUyBpdCBpcyBub3QgcHJhY3RpY2FsCisgKiB0byBleHBlY3QgdGhhdCB0aGV5IHdpbGwgYWxsIG5lc3QuIFdlIGdpdmUgYSBtYXggb2YgMTAgYml0cyBmb3IKKyAqIGhhcmRpcnEgbmVzdGluZy4gQW4gYXJjaCBtYXkgY2hvb3NlIHRvIGdpdmUgbGVzcyB0aGFuIDEwIGJpdHMuCisgKiBtNjhrIGV4cGVjdHMgaXQgdG8gYmUgOC4KICAqCi0gKiAtIGJpdHMgMTYtMjcgYXJlIHRoZSBoYXJkaXJxIGNvdW50IChtYXggIyBvZiBoYXJkaXJxczogNDA5NikKLSAqIC0gKCBiaXQgMjggaXMgdGhlIFBSRUVNUFRfQUNUSVZFIGZsYWcuICkKKyAqIC0gYml0cyAxNi0yNSBhcmUgdGhlIGhhcmRpcnEgY291bnQgKG1heCAjIG9mIG5lc3RlZCBoYXJkaXJxczogMTAyNCkKKyAqIC0gYml0IDI2IGlzIHRoZSBOTUlfTUFTSworICogLSBiaXQgMjggaXMgdGhlIFBSRUVNUFRfQUNUSVZFIGZsYWcKICAqCiAgKiBQUkVFTVBUX01BU0s6IDB4MDAwMDAwZmYKICAqIFNPRlRJUlFfTUFTSzogMHgwMDAwZmYwMAotICogSEFSRElSUV9NQVNLOiAweDBmZmYwMDAwCisgKiBIQVJESVJRX01BU0s6IDB4MDNmZjAwMDAKKyAqICAgICBOTUlfTUFTSzogMHgwNDAwMDAwMAogICovCiAjZGVmaW5lIFBSRUVNUFRfQklUUwk4CiAjZGVmaW5lIFNPRlRJUlFfQklUUwk4CisjZGVmaW5lIE5NSV9CSVRTCTEKKworI2RlZmluZSBNQVhfSEFSRElSUV9CSVRTIDEwCiAKICNpZm5kZWYgSEFSRElSUV9CSVRTCi0jZGVmaW5lIEhBUkRJUlFfQklUUwkxMgotCi0jaWZuZGVmIE1BWF9IQVJESVJRU19QRVJfQ1BVCi0jZGVmaW5lIE1BWF9IQVJESVJRU19QRVJfQ1BVIE5SX0lSUVMKKyMgZGVmaW5lIEhBUkRJUlFfQklUUwlNQVhfSEFSRElSUV9CSVRTCiAjZW5kaWYKIAotLyoKLSAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlIHNwYWNlIGZvciBwb3RlbnRpYWxseQotICogYWxsIElSUSBzb3VyY2VzIGluIHRoZSBzeXN0ZW0gbmVzdGluZyBvbiBhIHNpbmdsZSBDUFUuCi0gKi8KLSNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTUFYX0hBUkRJUlFTX1BFUl9DUFUKLSMgZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCi0jZW5kaWYKKyNpZiBIQVJESVJRX0JJVFMgPiBNQVhfSEFSRElSUV9CSVRTCisjZXJyb3IgSEFSRElSUV9CSVRTIHRvbyBoaWdoIQogI2VuZGlmCiAKICNkZWZpbmUgUFJFRU1QVF9TSElGVAkwCiAjZGVmaW5lIFNPRlRJUlFfU0hJRlQJKFBSRUVNUFRfU0hJRlQgKyBQUkVFTVBUX0JJVFMpCiAjZGVmaW5lIEhBUkRJUlFfU0hJRlQJKFNPRlRJUlFfU0hJRlQgKyBTT0ZUSVJRX0JJVFMpCisjZGVmaW5lIE5NSV9TSElGVAkoSEFSRElSUV9TSElGVCArIEhBUkRJUlFfQklUUykKIAogI2RlZmluZSBfX0lSUV9NQVNLKHgpCSgoMVVMIDw8ICh4KSktMSkKIAogI2RlZmluZSBQUkVFTVBUX01BU0sJKF9fSVJRX01BU0soUFJFRU1QVF9CSVRTKSA8PCBQUkVFTVBUX1NISUZUKQogI2RlZmluZSBTT0ZUSVJRX01BU0sJKF9fSVJRX01BU0soU09GVElSUV9CSVRTKSA8PCBTT0ZUSVJRX1NISUZUKQogI2RlZmluZSBIQVJESVJRX01BU0sJKF9fSVJRX01BU0soSEFSRElSUV9CSVRTKSA8PCBIQVJESVJRX1NISUZUKQorI2RlZmluZSBOTUlfTUFTSwkoX19JUlFfTUFTSyhOTUlfQklUUykgICAgIDw8IE5NSV9TSElGVCkKIAogI2RlZmluZSBQUkVFTVBUX09GRlNFVAkoMVVMIDw8IFBSRUVNUFRfU0hJRlQpCiAjZGVmaW5lIFNPRlRJUlFfT0ZGU0VUCSgxVUwgPDwgU09GVElSUV9TSElGVCkKICNkZWZpbmUgSEFSRElSUV9PRkZTRVQJKDFVTCA8PCBIQVJESVJRX1NISUZUKQorI2RlZmluZSBOTUlfT0ZGU0VUCSgxVUwgPDwgTk1JX1NISUZUKQogCi0jaWYgUFJFRU1QVF9BQ1RJVkUgPCAoMSA8PCAoSEFSRElSUV9TSElGVCArIEhBUkRJUlFfQklUUykpCisjaWYgUFJFRU1QVF9BQ1RJVkUgPCAoMSA8PCAoTk1JX1NISUZUICsgTk1JX0JJVFMpKQogI2Vycm9yIFBSRUVNUFRfQUNUSVZFIGlzIHRvbyBsb3chCiAjZW5kaWYKIAogI2RlZmluZSBoYXJkaXJxX2NvdW50KCkJKHByZWVtcHRfY291bnQoKSAmIEhBUkRJUlFfTUFTSykKICNkZWZpbmUgc29mdGlycV9jb3VudCgpCShwcmVlbXB0X2NvdW50KCkgJiBTT0ZUSVJRX01BU0spCi0jZGVmaW5lIGlycV9jb3VudCgpCShwcmVlbXB0X2NvdW50KCkgJiAoSEFSRElSUV9NQVNLIHwgU09GVElSUV9NQVNLKSkKKyNkZWZpbmUgaXJxX2NvdW50KCkJKHByZWVtcHRfY291bnQoKSAmIChIQVJESVJRX01BU0sgfCBTT0ZUSVJRX01BU0sgXAorCQkJCSB8IE5NSV9NQVNLKSkKIAogLyoKICAqIEFyZSB3ZSBkb2luZyBib3R0b20gaGFsZiBvciBoYXJkd2FyZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZz8KQEAgLTczLDYgKzc5LDExIEBACiAjZGVmaW5lIGluX3NvZnRpcnEoKQkJKHNvZnRpcnFfY291bnQoKSkKICNkZWZpbmUgaW5faW50ZXJydXB0KCkJCShpcnFfY291bnQoKSkKIAorLyoKKyAqIEFyZSB3ZSBpbiBOTUkgY29udGV4dD8KKyAqLworI2RlZmluZSBpbl9ubWkoKQkocHJlZW1wdF9jb3VudCgpICYgTk1JX01BU0spCisKICNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKQogIyBkZWZpbmUgUFJFRU1QVF9JTkFUT01JQ19CQVNFIGtlcm5lbF9sb2NrZWQoKQogIyBkZWZpbmUgUFJFRU1QVF9DSEVDS19PRkZTRVQgMQpAQCAtMTY0LDIwICsxNzUsMjQgQEAKICAqLwogZXh0ZXJuIHZvaWQgaXJxX2V4aXQodm9pZCk7CiAKLSNkZWZpbmUgbm1pX2VudGVyKCkJCQkJXAotCWRvIHsJCQkJCVwKLQkJZnRyYWNlX25taV9lbnRlcigpOwkJXAotCQlsb2NrZGVwX29mZigpOwkJCVwKLQkJcmN1X25taV9lbnRlcigpOwkJXAotCQlfX2lycV9lbnRlcigpOwkJCVwKKyNkZWZpbmUgbm1pX2VudGVyKCkJCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWZ0cmFjZV9ubWlfZW50ZXIoKTsJCQkJXAorCQlCVUdfT04oaW5fbm1pKCkpOwkJCQlcCisJCWFkZF9wcmVlbXB0X2NvdW50KE5NSV9PRkZTRVQgKyBIQVJESVJRX09GRlNFVCk7CVwKKwkJbG9ja2RlcF9vZmYoKTsJCQkJCVwKKwkJcmN1X25taV9lbnRlcigpOwkJCQlcCisJCXRyYWNlX2hhcmRpcnFfZW50ZXIoKTsJCQkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgbm1pX2V4aXQoKQkJCQlcCi0JZG8gewkJCQkJXAotCQlfX2lycV9leGl0KCk7CQkJXAotCQlyY3Vfbm1pX2V4aXQoKTsJCQlcCi0JCWxvY2tkZXBfb24oKTsJCQlcCi0JCWZ0cmFjZV9ubWlfZXhpdCgpOwkJXAorI2RlZmluZSBubWlfZXhpdCgpCQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl0cmFjZV9oYXJkaXJxX2V4aXQoKTsJCQkJXAorCQlyY3Vfbm1pX2V4aXQoKTsJCQkJCVwKKwkJbG9ja2RlcF9vbigpOwkJCQkJXAorCQlCVUdfT04oIWluX25taSgpKTsJCQkJXAorCQlzdWJfcHJlZW1wdF9jb3VudChOTUlfT0ZGU0VUICsgSEFSRElSUV9PRkZTRVQpOwlcCisJCWZ0cmFjZV9ubWlfZXhpdCgpOwkJCQlcCiAJfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIExJTlVYX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZHJlZy5oIGIvaW5jbHVkZS9saW51eC9oZHJlZy5oCmluZGV4IGVkMjFiZDMuLjI5ZWUyODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRyZWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkcmVnLmgKQEAgLTEsNjggKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfSERSRUdfSAogI2RlZmluZSBfTElOVVhfSERSRUdfSAogCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHNvbWUgZGVmaW5lcyBmb3IgdGhlIEFULWhkLWNvbnRyb2xsZXIuCi0gKiBWYXJpb3VzIHNvdXJjZXMuCi0gKi8KLQotLyogaWRlLmMgaGFzIGl0cyBvd24gcG9ydCBkZWZpbml0aW9ucyBpbiAiaWRlLmgiICovCi0KLSNkZWZpbmUgSERfSVJRCQkxNAotCi0vKiBIZCBjb250cm9sbGVyIHJlZ3MuIFJlZjogSUJNIEFUIEJpb3MtbGlzdGluZyAqLwotI2RlZmluZSBIRF9EQVRBCQkweDFmMAkJLyogX0NUTCB3aGVuIHdyaXRpbmcgKi8KLSNkZWZpbmUgSERfRVJST1IJMHgxZjEJCS8qIHNlZSBlcnItYml0cyAqLwotI2RlZmluZSBIRF9OU0VDVE9SCTB4MWYyCQkvKiBuciBvZiBzZWN0b3JzIHRvIHJlYWQvd3JpdGUgKi8KLSNkZWZpbmUgSERfU0VDVE9SCTB4MWYzCQkvKiBzdGFydGluZyBzZWN0b3IgKi8KLSNkZWZpbmUgSERfTENZTAkJMHgxZjQJCS8qIHN0YXJ0aW5nIGN5bGluZGVyICovCi0jZGVmaW5lIEhEX0hDWUwJCTB4MWY1CQkvKiBoaWdoIGJ5dGUgb2Ygc3RhcnRpbmcgY3lsICovCi0jZGVmaW5lIEhEX0NVUlJFTlQJMHgxZjYJCS8qIDEwMWRoaGhoICwgZD1kcml2ZSwgaGhoaD1oZWFkICovCi0jZGVmaW5lIEhEX1NUQVRVUwkweDFmNwkJLyogc2VlIHN0YXR1cy1iaXRzICovCi0jZGVmaW5lIEhEX0ZFQVRVUkUJSERfRVJST1IJLyogc2FtZSBpbyBhZGRyZXNzLCByZWFkPWVycm9yLCB3cml0ZT1mZWF0dXJlICovCi0jZGVmaW5lIEhEX1BSRUNPTVAJSERfRkVBVFVSRQkvKiBvYnNvbGV0ZSB1c2Ugb2YgdGhpcyBwb3J0IC0gcHJlZGF0ZXMgSURFICovCi0jZGVmaW5lIEhEX0NPTU1BTkQJSERfU1RBVFVTCS8qIHNhbWUgaW8gYWRkcmVzcywgcmVhZD1zdGF0dXMsIHdyaXRlPWNtZCAqLwotCi0jZGVmaW5lIEhEX0NNRAkJMHgzZjYJCS8qIHVzZWQgZm9yIHJlc2V0cyAqLwotI2RlZmluZSBIRF9BTFRTVEFUVVMJMHgzZjYJCS8qIHNhbWUgYXMgSERfU1RBVFVTIGJ1dCBkb2Vzbid0IGNsZWFyIGlycSAqLwotCi0vKiByZW1haW5kZXIgaXMgc2hhcmVkIGJldHdlZW4gaGQuYywgaWRlLmMsIGlkZS1jZC5jLCBhbmQgdGhlIGhkcGFybSB1dGlsaXR5ICovCi0KLS8qIEJpdHMgb2YgSERfU1RBVFVTICovCi0jZGVmaW5lIEVSUl9TVEFUCQkweDAxCi0jZGVmaW5lIElOREVYX1NUQVQJCTB4MDIKLSNkZWZpbmUgRUNDX1NUQVQJCTB4MDQJLyogQ29ycmVjdGVkIGVycm9yICovCi0jZGVmaW5lIERSUV9TVEFUCQkweDA4Ci0jZGVmaW5lIFNFRUtfU1RBVAkJMHgxMAotI2RlZmluZSBTUlZfU1RBVAkJMHgxMAotI2RlZmluZSBXUkVSUl9TVEFUCQkweDIwCi0jZGVmaW5lIFJFQURZX1NUQVQJCTB4NDAKLSNkZWZpbmUgQlVTWV9TVEFUCQkweDgwCi0KLS8qIEJpdHMgZm9yIEhEX0VSUk9SICovCi0jZGVmaW5lIE1BUktfRVJSCQkweDAxCS8qIEJhZCBhZGRyZXNzIG1hcmsgKi8KLSNkZWZpbmUgSUxJX0VSUgkJCTB4MDEJLyogSWxsZWdhbCBMZW5ndGggSW5kaWNhdGlvbiAoQVRBUEkpICovCi0jZGVmaW5lIFRSSzBfRVJSCQkweDAyCS8qIGNvdWxkbid0IGZpbmQgdHJhY2sgMCAqLwotI2RlZmluZSBFT01fRVJSCQkJMHgwMgkvKiBFbmQgT2YgTWVkaWEgKEFUQVBJKSAqLwotI2RlZmluZSBBQlJUX0VSUgkJMHgwNAkvKiBDb21tYW5kIGFib3J0ZWQgKi8KLSNkZWZpbmUgTUNSX0VSUgkJCTB4MDgJLyogbWVkaWEgY2hhbmdlIHJlcXVlc3QgKi8KLSNkZWZpbmUgSURfRVJSCQkJMHgxMAkvKiBJRCBmaWVsZCBub3QgZm91bmQgKi8KLSNkZWZpbmUgTUNfRVJSCQkJMHgyMAkvKiBtZWRpYSBjaGFuZ2VkICovCi0jZGVmaW5lIEVDQ19FUlIJCQkweDQwCS8qIFVuY29ycmVjdGFibGUgRUNDIGVycm9yICovCi0jZGVmaW5lIEJCRF9FUlIJCQkweDgwCS8qIHByZS1FSURFIG1lYW5pbmc6ICBibG9jayBtYXJrZWQgYmFkICovCi0jZGVmaW5lIElDUkNfRVJSCQkweDgwCS8qIG5ldyBtZWFuaW5nOiAgQ1JDIGVycm9yIGR1cmluZyB0cmFuc2ZlciAqLwotI2RlZmluZSBMRlNfRVJSCQkJMHhmMAkvKiBMYXN0IEZhaWxlZCBTZW5zZSAoQVRBUEkpICovCi0KLS8qIEJpdHMgb2YgSERfTlNFQ1RPUiAqLwotI2RlZmluZSBDRAkJCTB4MDEKLSNkZWZpbmUgSU8JCQkweDAyCi0jZGVmaW5lIFJFTAkJCTB4MDQKLSNkZWZpbmUgVEFHX01BU0sJCTB4ZjgKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKgpAQCAtMTkxLDYgKzEyOSw3IEBACiAjZGVmaW5lIFRBU0tGSUxFX0lOVkFMSUQJCTB4N2ZmZgogI2VuZGlmCiAKKyNpZm5kZWYgX19LRVJORUxfXwogLyogQVRBL0FUQVBJIENvbW1hbmRzIHByZSBUMTMgU3BlYyAqLwogI2RlZmluZSBXSU5fTk9QCQkJCTB4MDAKIC8qCkBAIC0zNzksNiArMzE4LDcgQEAKICNkZWZpbmUgU0VDVVJJVFlfRVJBU0VfVU5JVAkJMHhCRAogI2RlZmluZSBTRUNVUklUWV9GUkVFWkVfTE9DSwkJMHhCRQogI2RlZmluZSBTRUNVUklUWV9ESVNBQkxFX1BBU1NXT1JECTB4QkYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIHN0cnVjdCBoZF9nZW9tZXRyeSB7CiAgICAgICB1bnNpZ25lZCBjaGFyIGhlYWRzOwpAQCAtNDQ4LDYgKzM4OCw3IEBACiAKICNkZWZpbmUgX19ORVdfSERfRFJJVkVfSUQKIAorI2lmbmRlZiBfX0tFUk5FTF9fCiAvKgogICogU3RydWN0dXJlIHJldHVybmVkIGJ5IEhESU9fR0VUX0lERU5USVRZLCBhcyBwZXIgQU5TSSBOQ0lUUyBBVEE2IHJldi4xYiBzcGVjLgogICoKQEAgLTY5OSw2ICs2NDAsNyBAQAogCQkJCQkgKiAgNzowIFNpZ25hdHVyZQogCQkJCQkgKi8KIH07CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKgogICogSURFICJuaWNlIiBmbGFncy4gVGhlc2UgYXJlIHVzZWQgb24gYSBwZXIgZHJpdmUgYmFzaXMgdG8gZGV0ZXJtaW5lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCBmYThlZTljLi5hNzI4NzZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTI3MCw2ICsyNzAsNyBAQAogCiAjZGVmaW5lIEhJRF9RVUlSS19JTlZFUlQJCQkweDAwMDAwMDAxCiAjZGVmaW5lIEhJRF9RVUlSS19OT1RPVUNICQkJMHgwMDAwMDAwMgorI2RlZmluZSBISURfUVVJUktfSUdOT1JFCQkJMHgwMDAwMDAwNAogI2RlZmluZSBISURfUVVJUktfTk9HRVQJCQkJMHgwMDAwMDAwOAogI2RlZmluZSBISURfUVVJUktfQkFEUEFECQkJMHgwMDAwMDAyMAogI2RlZmluZSBISURfUVVJUktfTVVMVElfSU5QVVQJCQkweDAwMDAwMDQwCkBAIC02MDMsMTIgKzYwNCwxNyBAQAogCWludCAoKm9wZW4pKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KTsKIAl2b2lkICgqY2xvc2UpKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KTsKIAorCWludCAoKnBvd2VyKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgaW50IGxldmVsKTsKKwogCWludCAoKmhpZGlucHV0X2lucHV0X2V2ZW50KSAoc3RydWN0IGlucHV0X2RldiAqaWRldiwgdW5zaWduZWQgaW50IHR5cGUsCiAJCQl1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKIAogCWludCAoKnBhcnNlKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CiB9OwogCisjZGVmaW5lCVBNX0hJTlRfRlVMTE9OCTE8PDUKKyNkZWZpbmUgUE1fSElOVF9OT1JNQUwJMTw8MQorCiAvKiBBcHBsaWNhdGlvbnMgZnJvbSBISUQgVXNhZ2UgVGFibGVzIDQvOC85OSBWZXJzaW9uIDEuMSAqLwogLyogV2UgaWdub3JlIGEgZmV3IGlucHV0IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3Qgd2lkZWx5IHVzZWQgKi8KICNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkgfHwgKGEgPT0gMHgwMDBkMDAwMikpCkBAIC02NDEsNiArNjQ3LDcgQEAKIHZvaWQgaGlkX291dHB1dF9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgX191OCAqZGF0YSk7CiBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkX2FsbG9jYXRlX2RldmljZSh2b2lkKTsKIGludCBoaWRfcGFyc2VfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKnN0YXJ0LCB1bnNpZ25lZCBzaXplKTsKK2ludCBoaWRfY2hlY2tfa2V5c19wcmVzc2VkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwogaW50IGhpZF9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGludCBjb25uZWN0X21hc2spOwogCiAvKioKQEAgLTc5MSwyMSArNzk4LDUgQEAKIAkJX19GSUxFX18gLCAjIyBhcmcpCiAjZW5kaWYgLyogSElEX0ZGICovCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0jaWZkZWYgQ09ORklHX0hJRF9DT01QQVQKLSNkZWZpbmUgSElEX0NPTVBBVF9MT0FEX0RSSVZFUihuYW1lKQlcCi0vKiBwcm90b3R5cGUgdG8gYXZvaWQgc3BhcnNlIHdhcm5pbmcgKi8JXAotZXh0ZXJuIHZvaWQgaGlkX2NvbXBhdF8jI25hbWUodm9pZCk7CVwKLXZvaWQgaGlkX2NvbXBhdF8jI25hbWUodm9pZCkgeyB9CVwKLUVYUE9SVF9TWU1CT0woaGlkX2NvbXBhdF8jI25hbWUpCi0jZWxzZQotI2RlZmluZSBISURfQ09NUEFUX0xPQURfRFJJVkVSKG5hbWUpCi0jZW5kaWYgLyogSElEX0NPTVBBVCAqLwotI2RlZmluZSBISURfQ09NUEFUX0NBTExfRFJJVkVSKG5hbWUpCWRvIHsJXAotCWV4dGVybiB2b2lkIGhpZF9jb21wYXRfIyNuYW1lKHZvaWQpOwlcCi0JaGlkX2NvbXBhdF8jI25hbWUoKTsJCQlcCi19IHdoaWxlICgwKQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKaW5kZXggN2ZmNWM1NS4uMWZjYjcxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKQEAgLTE5LDggKzE5LDIxIEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19ISUdITUVNCisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0hJR0hNRU0pICYmIGRlZmluZWQoQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQpCisKK3ZvaWQgZGVidWdfa21hcF9hdG9taWMoZW51bSBrbV90eXBlIHR5cGUpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfa21hcF9hdG9taWMoZW51bSBrbV90eXBlIHR5cGUpCit7Cit9CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KICNpbmNsdWRlIDxhc20vaGlnaG1lbS5oPgogCiAvKiBkZWNsYXJhdGlvbnMgZm9yIGxpbnV4L21tL2hpZ2htZW0uYyAqLwpAQCAtNDQsOCArNTcsNiBAQAogCiAjZGVmaW5lIGt1bm1hcChwYWdlKSBkbyB7ICh2b2lkKSAocGFnZSk7IH0gd2hpbGUgKDApCiAKLSNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgotCiBzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgaWR4KQogewogCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CkBAIC0xODcsMTYgKzE5OCw0IEBACiAJa3VubWFwX2F0b21pYyh2dG8sIEtNX1VTRVIxKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0hJR0hNRU0pICYmIGRlZmluZWQoQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQpCi0KLXZvaWQgZGVidWdfa21hcF9hdG9taWMoZW51bSBrbV90eXBlIHR5cGUpOwotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfa21hcF9hdG9taWMoZW51bSBrbV90eXBlIHR5cGUpCi17Ci19Ci0KLSNlbmRpZgotCiAjZW5kaWYgLyogX0xJTlVYX0hJR0hNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvYXQyNC5oIGIvaW5jbHVkZS9saW51eC9pMmMvYXQyNC5oCmluZGV4IGY2ZWRkNTIuLjhhY2U5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL2F0MjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy9hdDI0LmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9BVDI0X0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAKIC8qCiAgKiBBcyBzZWVuIHRocm91Z2ggTGludXggSTJDLCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBtb3N0IGNvbW1vbiB0eXBlcyBvZiBJMkMKQEAgLTIzLDYgKzI0LDkgQEAKICNkZWZpbmUgQVQyNF9GTEFHX1JFQURPTkxZCTB4NDAJLyogc3lzZnMtZW50cnkgd2lsbCBiZSByZWFkLW9ubHkgKi8KICNkZWZpbmUgQVQyNF9GTEFHX0lSVUdPCQkweDIwCS8qIHN5c2ZzLWVudHJ5IHdpbGwgYmUgd29ybGQtcmVhZGFibGUgKi8KICNkZWZpbmUgQVQyNF9GTEFHX1RBS0U4QUREUgkweDEwCS8qIHRha2UgYWx3YXlzIDggYWRkcmVzc2VzICgyNGMwMCkgKi8KKworCXZvaWQJCSgqc2V0dXApKHN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgKiwgdm9pZCAqY29udGV4dCk7CisJdm9pZAkJKmNvbnRleHQ7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX0FUMjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCmluZGV4IDgxMzdmNjYuLjBkYzgwZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKQEAgLTIxOCw2ICsyMTgsNTMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogUG93ZXIgYnVzIG1lc3NhZ2UgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBERVZfR1JQX05VTEwJCTB4MAorI2RlZmluZSBERVZfR1JQX1AxCQkweDEKKyNkZWZpbmUgREVWX0dSUF9QMgkJMHgyCisjZGVmaW5lIERFVl9HUlBfUDMJCTB4NAorCisjZGVmaW5lIFJFU19HUlBfUkVTCQkweDAKKyNkZWZpbmUgUkVTX0dSUF9QUAkJMHgxCisjZGVmaW5lIFJFU19HUlBfUkMJCTB4MgorI2RlZmluZSBSRVNfR1JQX1BQX1JDCQkweDMKKyNkZWZpbmUgUkVTX0dSUF9QUgkJMHg0CisjZGVmaW5lIFJFU19HUlBfUFBfUFIJCTB4NQorI2RlZmluZSBSRVNfR1JQX1JDX1BSCQkweDYKKyNkZWZpbmUgUkVTX0dSUF9BTEwJCTB4NworCisjZGVmaW5lIFJFU19UWVBFMl9SMAkJMHgwCisKKyNkZWZpbmUgUkVTX1RZUEVfQUxMCQkweDcKKworI2RlZmluZSBSRVNfU1RBVEVfV1JTVAkJMHhGCisjZGVmaW5lIFJFU19TVEFURV9BQ1RJVkUJMHhFCisjZGVmaW5lIFJFU19TVEFURV9TTEVFUAkJMHg4CisjZGVmaW5lIFJFU19TVEFURV9PRkYJCTB4MAorCisvKgorICogUG93ZXIgQnVzIE1lc3NhZ2UgRm9ybWF0IC4uLiB0aGVzZSBjYW4gYmUgc2VudCBpbmRpdmlkdWFsbHkgYnkgTGludXgsCisgKiBidXQgYXJlIHVzdWFsbHkgcGFydCBvZiBkb3dubG9hZGVkIHNjcmlwdHMgdGhhdCBhcmUgcnVuIHdoZW4gdmFyaW91cworICogcG93ZXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWQuCisgKgorICogIEJyb2FkY2FzdCBNZXNzYWdlICgxNiBCaXRzKToKKyAqICAgIERFVl9HUlBbMTU6MTNdIE1UWzEyXSAgUkVTX0dSUFsxMTo5XSAgUkVTX1RZUEUyWzg6N10gUkVTX1RZUEVbNjo0XQorICogICAgUkVTX1NUQVRFWzM6MF0KKyAqCisgKiAgU2luZ3VsYXIgTWVzc2FnZSAoMTYgQml0cyk6CisgKiAgICBERVZfR1JQWzE1OjEzXSBNVFsxMl0gIFJFU19JRFsxMTo0XSAgUkVTX1NUQVRFWzM6MF0KKyAqLworCisjZGVmaW5lIE1TR19CUk9BRENBU1QoZGV2Z3JwLCBncnAsIHR5cGUsIHR5cGUyLCBzdGF0ZSkgXAorCSggKGRldmdycCkgPDwgMTMgfCAxIDw8IDEyIHwgKGdycCkgPDwgOSB8ICh0eXBlMikgPDwgNyBcCisJfCAodHlwZSkgPDwgNCB8IChzdGF0ZSkpCisKKyNkZWZpbmUgTVNHX1NJTkdVTEFSKGRldmdycCwgaWQsIHN0YXRlKSBcCisJKChkZXZncnApIDw8IDEzIHwgMCA8PCAxMiB8IChpZCkgPDwgNCB8IChzdGF0ZSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0cnVjdCB0d2w0MDMwX2JjaV9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgKmJhdHRlcnlfdG1wX3RibDsKIAl1bnNpZ25lZCBpbnQgdGJsc2l6ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRyLmggYi9pbmNsdWRlL2xpbnV4L2lkci5oCmluZGV4IGRkODQ2ZGYuLmU5NjhkYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZHIuaApAQCAtMTA2LDYgKzEwNiw3IEBACiBpbnQgaWRyX2dldF9uZXdfYWJvdmUoc3RydWN0IGlkciAqaWRwLCB2b2lkICpwdHIsIGludCBzdGFydGluZ19pZCwgaW50ICppZCk7CiBpbnQgaWRyX2Zvcl9lYWNoKHN0cnVjdCBpZHIgKmlkcCwKIAkJIGludCAoKmZuKShpbnQgaWQsIHZvaWQgKnAsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKK3ZvaWQgKmlkcl9nZXRfbmV4dChzdHJ1Y3QgaWRyICppZHAsIGludCAqbmV4dGlkKTsKIHZvaWQgKmlkcl9yZXBsYWNlKHN0cnVjdCBpZHIgKmlkcCwgdm9pZCAqcHRyLCBpbnQgaWQpOwogdm9pZCBpZHJfcmVtb3ZlKHN0cnVjdCBpZHIgKmlkcCwgaW50IGlkKTsKIHZvaWQgaWRyX3JlbW92ZV9hbGwoc3RydWN0IGlkciAqaWRwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaCBiL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAppbmRleCAxZDZjNzFkLi43NzIxNGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCkBAIC0xMjMsNyArMTIzLDcgQEAKICNkZWZpbmUgZWNhcF9laW1fc3VwcG9ydChlKQkoKGUgPj4gNCkgJiAweDEpCiAjZGVmaW5lIGVjYXBfaXJfc3VwcG9ydChlKQkoKGUgPj4gMykgJiAweDEpCiAjZGVmaW5lIGVjYXBfbWF4X2hhbmRsZV9tYXNrKGUpICgoZSA+PiAyMCkgJiAweGYpCi0KKyNkZWZpbmUgZWNhcF9zY19zdXBwb3J0KGUpCSgoZSA+PiA3KSAmIDB4MSkgLyogU25vb3BpbmcgQ29udHJvbCAqLwogCiAvKiBJT1RMQl9SRUcgKi8KICNkZWZpbmUgRE1BX1RMQl9GTFVTSF9HUkFOVV9PRkZTRVQgIDYwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCBjNjhiZmZkLi5jZTJjMDdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTI3OCw2ICsyNzgsMTEgQEAKIAlOUl9TT0ZUSVJRUwogfTsKIAorLyogbWFwIHNvZnRpcnEgaW5kZXggdG8gc29mdGlycSBuYW1lLiB1cGRhdGUgJ3NvZnRpcnFfdG9fbmFtZScgaW4KKyAqIGtlcm5lbC9zb2Z0aXJxLmMgd2hlbiBhZGRpbmcgYSBuZXcgc29mdGlycS4KKyAqLworZXh0ZXJuIGNoYXIgKnNvZnRpcnFfdG9fbmFtZVtOUl9TT0ZUSVJRU107CisKIC8qIHNvZnRpcnEgbWFzayBhbmQgYWN0aXZlIGZpZWxkcyBtb3ZlZCB0byBpcnFfY3B1c3RhdF90IGluCiAgKiBhc20vaGFyZGlycS5oIHRvIGdldCBiZXR0ZXIgY2FjaGUgdXNhZ2UuICBLQU8KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pb21tdS5oCmluZGV4IDhhN2JmYjEuLjNhZjRmZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvbW11LmgKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2RlZmluZSBJT01NVV9SRUFECSgxKQogI2RlZmluZSBJT01NVV9XUklURQkoMikKKyNkZWZpbmUgSU9NTVVfQ0FDSEUJKDQpIC8qIERNQSBjYWNoZSBjb2hlcmVuY3kgKi8KIAogc3RydWN0IGRldmljZTsKIApAQCAtMjgsNiArMjksOCBAQAogCXZvaWQgKnByaXY7CiB9OwogCisjZGVmaW5lIElPTU1VX0NBUF9DQUNIRV9DT0hFUkVOQ1kJMHgxCisKIHN0cnVjdCBpb21tdV9vcHMgewogCWludCAoKmRvbWFpbl9pbml0KShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pOwogCXZvaWQgKCpkb21haW5fZGVzdHJveSkoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKTsKQEAgLTM5LDYgKzQyLDggQEAKIAkJICAgICAgc2l6ZV90IHNpemUpOwogCXBoeXNfYWRkcl90ICgqaW92YV90b19waHlzKShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgaW92YSk7CisJaW50ICgqZG9tYWluX2hhc19jYXApKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2FwKTsKIH07CiAKICNpZmRlZiBDT05GSUdfSU9NTVVfQVBJCkBAIC01Nyw2ICs2Miw4IEBACiAJCQkgICAgICBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gcGh5c19hZGRyX3QgaW9tbXVfaW92YV90b19waHlzKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGlvdmEpOworZXh0ZXJuIGludCBpb21tdV9kb21haW5faGFzX2NhcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkJdW5zaWduZWQgbG9uZyBjYXApOwogCiAjZWxzZSAvKiBDT05GSUdfSU9NTVVfQVBJICovCiAKQEAgLTEwNyw2ICsxMTQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZG9tYWluX2hhc19jYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCSB1bnNpZ25lZCBsb25nIGNhcCkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19JT01NVV9BUEkgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfSU9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFmbGFncy5oIGIvaW5jbHVkZS9saW51eC9pcnFmbGFncy5oCmluZGV4IDc0YmRlMTMuLmIwMmEzZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmgKQEAgLTI0LDggKzI0LDggQEAKICMgZGVmaW5lIHRyYWNlX3NvZnRpcnFzX2VuYWJsZWQocCkJKChwKS0+c29mdGlycXNfZW5hYmxlZCkKICMgZGVmaW5lIHRyYWNlX2hhcmRpcnFfZW50ZXIoKQlkbyB7IGN1cnJlbnQtPmhhcmRpcnFfY29udGV4dCsrOyB9IHdoaWxlICgwKQogIyBkZWZpbmUgdHJhY2VfaGFyZGlycV9leGl0KCkJZG8geyBjdXJyZW50LT5oYXJkaXJxX2NvbnRleHQtLTsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHRyYWNlX3NvZnRpcnFfZW50ZXIoKQlkbyB7IGN1cnJlbnQtPnNvZnRpcnFfY29udGV4dCsrOyB9IHdoaWxlICgwKQotIyBkZWZpbmUgdHJhY2Vfc29mdGlycV9leGl0KCkJZG8geyBjdXJyZW50LT5zb2Z0aXJxX2NvbnRleHQtLTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGxvY2tkZXBfc29mdGlycV9lbnRlcigpCWRvIHsgY3VycmVudC0+c29mdGlycV9jb250ZXh0Kys7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrZGVwX3NvZnRpcnFfZXhpdCgpCWRvIHsgY3VycmVudC0+c29mdGlycV9jb250ZXh0LS07IH0gd2hpbGUgKDApCiAjIGRlZmluZSBJTklUX1RSQUNFX0lSUUZMQUdTCS5zb2Z0aXJxc19lbmFibGVkID0gMSwKICNlbHNlCiAjIGRlZmluZSB0cmFjZV9oYXJkaXJxc19vbigpCQlkbyB7IH0gd2hpbGUgKDApCkBAIC0zOCw4ICszOCw4IEBACiAjIGRlZmluZSB0cmFjZV9zb2Z0aXJxc19lbmFibGVkKHApCTAKICMgZGVmaW5lIHRyYWNlX2hhcmRpcnFfZW50ZXIoKQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgdHJhY2VfaGFyZGlycV9leGl0KCkJCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHRyYWNlX3NvZnRpcnFfZW50ZXIoKQkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgdHJhY2Vfc29mdGlycV9leGl0KCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGxvY2tkZXBfc29mdGlycV9lbnRlcigpCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGxvY2tkZXBfc29mdGlycV9leGl0KCkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIElOSVRfVFJBQ0VfSVJRRkxBR1MKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZC5oIGIvaW5jbHVkZS9saW51eC9qYmQuaAppbmRleCA2NDI0NmRjLi41M2FlNDM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkLmgKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgam91cm5hbF9vb21fcmV0cnkgMQogCiAvKgotICogRGVmaW5lIEpCRF9QQVJBTklPRF9JT0ZBSUwgdG8gY2F1c2UgYSBrZXJuZWwgQlVHKCkgaWYgZXh0MyBmaW5kcworICogRGVmaW5lIEpCRF9QQVJBTk9JRF9JT0ZBSUwgdG8gY2F1c2UgYSBrZXJuZWwgQlVHKCkgaWYgZXh0MyBmaW5kcwogICogY2VydGFpbiBjbGFzc2VzIG9mIGVycm9yIHdoaWNoIGNhbiBvY2N1ciBkdWUgdG8gZmFpbGVkIElPcy4gIFVuZGVyCiAgKiBub3JtYWwgdXNlIHdlIHdhbnQgZXh0MyB0byBjb250aW51ZSBhZnRlciBzdWNoIGVycm9ycywgYmVjYXVzZQogICogaGFyZHdhcmUgX2Nhbl8gZmFpbCwgYnV0IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgd2hlbiBydW5uaW5nIHRlc3RzIG9uCkBAIC01NTIsNiArNTUyLDExIEBACiAJICovCiAJaW50IHRfaGFuZGxlX2NvdW50OwogCisJLyoKKwkgKiBUaGlzIHRyYW5zYWN0aW9uIGlzIGJlaW5nIGZvcmNlZCBhbmQgc29tZSBwcm9jZXNzIGlzCisJICogd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoLgorCSAqLworCWludCB0X3N5bmNocm9ub3VzX2NvbW1pdDoxOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmggYi9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKaW5kZXggZjNmZTM0My4uNzkyMjc0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCisrKyBiL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaApAQCAtMTMsMTAgKzEzLDE3IEBACiAjZGVmaW5lIEtTWU1fU1lNQk9MX0xFTiAoc2l6ZW9mKCIlcyslI2x4LyUjbHggWyVzXSIpICsgKEtTWU1fTkFNRV9MRU4gLSAxKSArIFwKIAkJCSAyKihCSVRTX1BFUl9MT05HKjMvMTApICsgKE1PRFVMRV9OQU1FX0xFTiAtIDEpICsgMSkKIAorc3RydWN0IG1vZHVsZTsKKwogI2lmZGVmIENPTkZJR19LQUxMU1lNUwogLyogTG9va3VwIHRoZSBhZGRyZXNzIGZvciBhIHN5bWJvbC4gUmV0dXJucyAwIGlmIG5vdCBmb3VuZC4gKi8KIHVuc2lnbmVkIGxvbmcga2FsbHN5bXNfbG9va3VwX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CiAKKy8qIENhbGwgYSBmdW5jdGlvbiBvbiBlYWNoIGthbGxzeW1zIHN5bWJvbCBpbiB0aGUgY29yZSBrZXJuZWwgKi8KK2ludCBrYWxsc3ltc19vbl9lYWNoX3N5bWJvbChpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosIHN0cnVjdCBtb2R1bGUgKiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nKSwKKwkJCSAgICB2b2lkICpkYXRhKTsKKwogZXh0ZXJuIGludCBrYWxsc3ltc19sb29rdXBfc2l6ZV9vZmZzZXQodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSAgdW5zaWduZWQgbG9uZyAqc3ltYm9sc2l6ZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCk7CkBAIC00Myw2ICs1MCwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBrYWxsc3ltc19vbl9lYWNoX3N5bWJvbChpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosCisJCQkJCQkgICAgc3RydWN0IG1vZHVsZSAqLAorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGthbGxzeW1zX2xvb2t1cF9zaXplX29mZnNldCh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnN5bWJvbHNpemUsCiAJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGU3MjBiMGQuLmQ5ZTc1ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMjQyLDYgKzI0MiwyMCBAQAogZXh0ZXJuIGludCBwcmludGtfcmF0ZWxpbWl0KHZvaWQpOwogZXh0ZXJuIGJvb2wgcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCh1bnNpZ25lZCBsb25nICpjYWxsZXJfamlmZmllcywKIAkJCQkgICB1bnNpZ25lZCBpbnQgaW50ZXJ2YWxfbXNlYyk7CisKKy8qCisgKiBQcmludCBhIG9uZS10aW1lIG1lc3NhZ2UgKGFuYWxvZ291cyB0byBXQVJOX09OQ0UoKSBldCBhbCk6CisgKi8KKyNkZWZpbmUgcHJpbnRrX29uY2UoeC4uLikgKHsJCQlcCisJc3RhdGljIGludCBfX3ByaW50X29uY2UgPSAxOwkJXAorCQkJCQkJXAorCWlmIChfX3ByaW50X29uY2UpIHsJCQlcCisJCV9fcHJpbnRfb25jZSA9IDA7CQlcCisJCXByaW50ayh4KTsJCQlcCisJfQkJCQkJXAorfSkKKwordm9pZCBsb2dfYnVmX2tleGVjX3NldHVwKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHZwcmludGsoY29uc3QgY2hhciAqcywgdmFfbGlzdCBhcmdzKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMCkpKTsKQEAgLTI1Myw2ICsyNjcsMTMgQEAKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLCBcCiAJCQkJCSAgdW5zaWduZWQgaW50IGludGVydmFsX21zZWMpCVwKIAkJeyByZXR1cm4gZmFsc2U7IH0KKworLyogTm8gZWZmZWN0LCBidXQgd2Ugc3RpbGwgZ2V0IHR5cGUgY2hlY2tpbmcgZXZlbiBpbiB0aGUgIVBSSU5USyBjYXNlOiAqLworI2RlZmluZSBwcmludGtfb25jZSh4Li4uKSBwcmludGsoeCkKKworc3RhdGljIGlubGluZSB2b2lkIGxvZ19idWZfa2V4ZWNfc2V0dXAodm9pZCkKK3sKK30KICNlbmRpZgogCiBleHRlcm4gaW50IHByaW50a19uZWVkc19jcHUoaW50IGNwdSk7CkBAIC0zNzEsNiArMzkyLDEzOSBAQAogI2VuZGlmCiAKIC8qCisgKiBHZW5lcmFsIHRyYWNpbmcgcmVsYXRlZCB1dGlsaXR5IGZ1bmN0aW9ucyAtIHRyYWNlX3ByaW50aygpLAorICogdHJhY2luZ19vbi90cmFjaW5nX29mZiBhbmQgdHJhY2luZ19zdGFydCgpL3RyYWNpbmdfc3RvcAorICoKKyAqIFVzZSB0cmFjaW5nX29uL3RyYWNpbmdfb2ZmIHdoZW4geW91IHdhbnQgdG8gcXVpY2tseSB0dXJuIG9uIG9yIG9mZgorICogdHJhY2luZy4gSXQgc2ltcGx5IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHJlY29yZGluZyBvZiB0aGUgdHJhY2UgZXZlbnRzLgorICogVGhpcyBhbHNvIGNvcnJlc3BvbmRzIHRvIHRoZSB1c2VyIHNwYWNlIGRlYnVnZnMvdHJhY2luZy90cmFjaW5nX29uCisgKiBmaWxlLCB3aGljaCBnaXZlcyBhIG1lYW5zIGZvciB0aGUga2VybmVsIGFuZCB1c2Vyc3BhY2UgdG8gaW50ZXJhY3QuCisgKiBQbGFjZSBhIHRyYWNpbmdfb2ZmKCkgaW4gdGhlIGtlcm5lbCB3aGVyZSB5b3Ugd2FudCB0cmFjaW5nIHRvIGVuZC4KKyAqIEZyb20gdXNlciBzcGFjZSwgZXhhbWluZSB0aGUgdHJhY2UsIGFuZCB0aGVuIGVjaG8gMSA+IHRyYWNpbmdfb24KKyAqIHRvIGNvbnRpbnVlIHRyYWNpbmcuCisgKgorICogdHJhY2luZ19zdG9wL3RyYWNpbmdfc3RhcnQgaGFzIHNsaWdodGx5IG1vcmUgb3ZlcmhlYWQuIEl0IGlzIHVzZWQKKyAqIGJ5IHRoaW5ncyBsaWtlIHN1c3BlbmQgdG8gcmFtIHdoZXJlIGRpc2FibGluZyB0aGUgcmVjb3JkaW5nIG9mIHRoZQorICogdHJhY2UgaXMgbm90IGVub3VnaCwgYnV0IHRyYWNpbmcgbXVzdCBhY3R1YWxseSBzdG9wIGJlY2F1c2UgdGhpbmdzCisgKiBsaWtlIGNhbGxpbmcgc21wX3Byb2Nlc3Nvcl9pZCgpIG1heSBjcmFzaCB0aGUgc3lzdGVtLgorICoKKyAqIE1vc3QgbGlrZWx5LCB5b3Ugd2FudCB0byB1c2UgdHJhY2luZ19vbi90cmFjaW5nX29mZi4KKyAqLworI2lmZGVmIENPTkZJR19SSU5HX0JVRkZFUgordm9pZCB0cmFjaW5nX29uKHZvaWQpOwordm9pZCB0cmFjaW5nX29mZih2b2lkKTsKKy8qIHRyYWNlX29mZl9wZXJtYW5lbnQgc3RvcHMgcmVjb3JkaW5nIHdpdGggbm8gd2F5IHRvIGJyaW5nIGl0IGJhY2sgKi8KK3ZvaWQgdHJhY2luZ19vZmZfcGVybWFuZW50KHZvaWQpOworaW50IHRyYWNpbmdfaXNfb24odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfb24odm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2luZ19vZmYodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2luZ19vZmZfcGVybWFuZW50KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgdHJhY2luZ19pc19vbih2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFJBQ0lORworZXh0ZXJuIHZvaWQgdHJhY2luZ19zdGFydCh2b2lkKTsKK2V4dGVybiB2b2lkIHRyYWNpbmdfc3RvcCh2b2lkKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9vZmZfcGVybWFuZW50KHZvaWQpOworCitleHRlcm4gdm9pZAorZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK19fX190cmFjZV9wcmludGtfY2hlY2tfZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQorI2RlZmluZSBfX3RyYWNlX3ByaW50a19jaGVja19mb3JtYXQoZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCQlcCisJCV9fX190cmFjZV9wcmludGtfY2hlY2tfZm9ybWF0KGZtdCwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCisKKy8qKgorICogdHJhY2VfcHJpbnRrIC0gcHJpbnRmIGZvcm1hdHRpbmcgaW4gdGhlIGZ0cmFjZSBidWZmZXIKKyAqIEBmbXQ6IHRoZSBwcmludGYgZm9ybWF0IGZvciBwcmludGluZworICoKKyAqIE5vdGU6IF9fdHJhY2VfcHJpbnRrIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIGZvciB0cmFjZV9wcmludGsgYW5kCisgKiAgICAgICB0aGUgQGlwIGlzIHBhc3NlZCBpbiB2aWEgdGhlIHRyYWNlX3ByaW50ayBtYWNyby4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIGtlcm5lbCBkZXZlbG9wZXIgdG8gZGVidWcgZmFzdCBwYXRoIHNlY3Rpb25zCisgKiB0aGF0IHByaW50ayBpcyBub3QgYXBwcm9wcmlhdGUgZm9yLiBCeSBzY2F0dGVyaW5nIGluIHZhcmlvdXMKKyAqIHByaW50ayBsaWtlIHRyYWNpbmcgaW4gdGhlIGNvZGUsIGEgZGV2ZWxvcGVyIGNhbiBxdWlja2x5IHNlZQorICogd2hlcmUgcHJvYmxlbXMgYXJlIG9jY3VycmluZy4KKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIGFzIGEgZGVidWdnaW5nIHRvb2wgZm9yIHRoZSBkZXZlbG9wZXIgb25seS4KKyAqIFBsZWFzZSByZWZyYWluIGZyb20gbGVhdmluZyB0cmFjZV9wcmludGtzIHNjYXR0ZXJlZCBhcm91bmQgaW4KKyAqIHlvdXIgY29kZS4KKyAqLworCisjZGVmaW5lIHRyYWNlX3ByaW50ayhmbXQsIGFyZ3MuLi4pCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCV9fdHJhY2VfcHJpbnRrX2NoZWNrX2Zvcm1hdChmbXQsICMjYXJncyk7CQkJXAorCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmbXQpKSB7CQkJCVwKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnRyYWNlX3ByaW50a19mbXQJCQlcCisJCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZV9wcmludGtfZm10IikpKSA9CVwKKwkJCV9fYnVpbHRpbl9jb25zdGFudF9wKGZtdCkgPyBmbXQgOiBOVUxMOwkJXAorCQkJCQkJCQkJXAorCQlfX3RyYWNlX2JwcmludGsoX1RISVNfSVBfLCB0cmFjZV9wcmludGtfZm10LCAjI2FyZ3MpOwlcCisJfSBlbHNlCQkJCQkJCQlcCisJCV9fdHJhY2VfcHJpbnRrKF9USElTX0lQXywgZm10LCAjI2FyZ3MpOwkJXAorfSB3aGlsZSAoMCkKKworZXh0ZXJuIGludAorX190cmFjZV9icHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworZXh0ZXJuIGludAorX190cmFjZV9wcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCisvKgorICogVGhlIGRvdWJsZSBfX2J1aWx0aW5fY29uc3RhbnRfcCBpcyBiZWNhdXNlIGdjYyB3aWxsIGdpdmUgdXMgYW4gZXJyb3IKKyAqIGlmIHdlIHRyeSB0byBhbGxvY2F0ZSB0aGUgc3RhdGljIHZhcmlhYmxlIHRvIGZtdCBpZiBpdCBpcyBub3QgYQorICogY29uc3RhbnQuIEV2ZW4gd2l0aCB0aGUgb3V0ZXIgaWYgc3RhdGVtZW50LgorICovCisjZGVmaW5lIGZ0cmFjZV92cHJpbnRrKGZtdCwgdmFyZ3MpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChmbXQpKSB7CQkJCVwKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnRyYWNlX3ByaW50a19mbXQJCQlcCisJCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZV9wcmludGtfZm10IikpKSA9CVwKKwkJCV9fYnVpbHRpbl9jb25zdGFudF9wKGZtdCkgPyBmbXQgOiBOVUxMOwkJXAorCQkJCQkJCQkJXAorCQlfX2Z0cmFjZV92YnByaW50ayhfVEhJU19JUF8sIHRyYWNlX3ByaW50a19mbXQsIHZhcmdzKTsJXAorCX0gZWxzZQkJCQkJCQkJXAorCQlfX2Z0cmFjZV92cHJpbnRrKF9USElTX0lQXywgZm10LCB2YXJncyk7CQlcCit9IHdoaWxlICgwKQorCitleHRlcm4gaW50CitfX2Z0cmFjZV92YnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworCitleHRlcm4gaW50CitfX2Z0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CisKK2V4dGVybiB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZAorZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykgeyB9CitzdGF0aWMgaW5saW5lIGludAordHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjaW5nX3N0YXJ0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfc3RvcCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2Vfb2ZmX3Blcm1hbmVudCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50Cit0cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludAorZnRyYWNlX3ZwcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19UUkFDSU5HICovCisKKy8qCiAgKiAgICAgIERpc3BsYXkgYW4gSVAgYWRkcmVzcyBpbiByZWFkYWJsZSBmb3JtYXQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbW9kLmggYi9pbmNsdWRlL2xpbnV4L2ttb2QuaAppbmRleCA5MjIxM2E5Li5kNWZhNTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttb2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ttb2QuaApAQCAtMjksMTAgKzI5LDE1IEBACiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIC8qIG1vZHByb2JlIGV4aXQgc3RhdHVzIG9uIHN1Y2Nlc3MsIC12ZSBvbiBlcnJvci4gIFJldHVybiB2YWx1ZQogICogdXN1YWxseSB1c2VsZXNzIHRob3VnaC4gKi8KLWV4dGVybiBpbnQgcmVxdWVzdF9tb2R1bGUoY29uc3QgY2hhciAqIG5hbWUsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwotI2RlZmluZSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4LCBtb2QuLi4pICgoeCkgPzogKHJlcXVlc3RfbW9kdWxlKG1vZCksICh4KSkpCitleHRlcm4gaW50IF9fcmVxdWVzdF9tb2R1bGUoYm9vbCB3YWl0LCBjb25zdCBjaGFyICpuYW1lLCAuLi4pIFwKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworI2RlZmluZSByZXF1ZXN0X21vZHVsZShtb2QuLi4pIF9fcmVxdWVzdF9tb2R1bGUodHJ1ZSwgbW9kKQorI2RlZmluZSByZXF1ZXN0X21vZHVsZV9ub3dhaXQobW9kLi4uKSBfX3JlcXVlc3RfbW9kdWxlKGZhbHNlLCBtb2QpCisjZGVmaW5lIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHgsIG1vZC4uLikgXAorCSgoeCkgPzogKF9fcmVxdWVzdF9tb2R1bGUoZmFsc2UsIG1vZCksICh4KSkpCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgcmVxdWVzdF9tb2R1bGUoY29uc3QgY2hhciAqIG5hbWUsIC4uLikgeyByZXR1cm4gLUVOT1NZUzsgfQorc3RhdGljIGlubGluZSBpbnQgcmVxdWVzdF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgLi4uKSB7IHJldHVybiAtRU5PU1lTOyB9CitzdGF0aWMgaW5saW5lIGludCByZXF1ZXN0X21vZHVsZV9ub3dhaXQoY29uc3QgY2hhciAqbmFtZSwgLi4uKSB7IHJldHVybiAtRU5PU1lTOyB9CiAjZGVmaW5lIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHgsIG1vZC4uLikgKHgpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggNzYyNjJkOC4uYjQ1MGEyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0zNzksNyArMzc5LDcgQEAKIAlBVEFfSE9SS0FHRV9CUklER0VfT0sJPSAoMSA8PCAxMCksCS8qIG5vIGJyaWRnZSBsaW1pdHMgKi8KIAlBVEFfSE9SS0FHRV9BVEFQSV9NT0QxNl9ETUEgPSAoMSA8PCAxMSksIC8qIHVzZSBBVEFQSSBETUEgZm9yIGNvbW1hbmRzCiAJCQkJCQkgICAgbm90IG11bHRpcGxlIG9mIDE2IGJ5dGVzICovCi0JQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiA9ICgxIDw8IDEyKSwJLyogZmlyd21hcmUgdXBkYXRlIHdhcm5pbmcgKi8KKwlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOID0gKDEgPDwgMTIpLAkvKiBmaXJtd2FyZSB1cGRhdGUgd2FybmluZyAqLwogCUFUQV9IT1JLQUdFXzFfNV9HQlBTCT0gKDEgPDwgMTMpLAkvKiBmb3JjZSAxLjUgR2JwcyAqLwogCiAJIC8qIERNQSBtYXNrIGZvciB1c2VyIERNQSBjb250cm9sOiBVc2VyIHZpc2libGUgdmFsdWVzOyBETyBOT1QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKaW5kZXggNWE1OGVhMy4uZGE1YTVhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTM2NCw2ICszNjQsMjMgQEAKIAogI2VuZGlmIC8qIENPTkZJR19MT0NLX1NUQVQgKi8KIAorI2lmZGVmIENPTkZJR19MT0NLREVQCisKKy8qCisgKiBPbiBsb2NrZGVwIHdlIGRvbnQgd2FudCB0aGUgaGFuZC1jb2RlZCBpcnEtZW5hYmxlIG9mCisgKiBfcmF3XypfbG9ja19mbGFncygpIGNvZGUsIGJlY2F1c2UgbG9ja2RlcCBhc3N1bWVzCisgKiB0aGF0IGludGVycnVwdHMgYXJlIG5vdCByZS1lbmFibGVkIGR1cmluZyBsb2NrLWFjcXVpcmU6CisgKi8KKyNkZWZpbmUgTE9DS19DT05URU5ERURfRkxBR1MoX2xvY2ssIHRyeSwgbG9jaywgbG9ja2ZsLCBmbGFncykgXAorCUxPQ0tfQ09OVEVOREVEKChfbG9jayksICh0cnkpLCAobG9jaykpCisKKyNlbHNlIC8qIENPTkZJR19MT0NLREVQICovCisKKyNkZWZpbmUgTE9DS19DT05URU5ERURfRkxBR1MoX2xvY2ssIHRyeSwgbG9jaywgbG9ja2ZsLCBmbGFncykgXAorCWxvY2tmbCgoX2xvY2spLCAoZmxhZ3MpKQorCisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi8KKwogI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiBleHRlcm4gdm9pZCBlYXJseV9pbml0X2lycV9sb2NrX2NsYXNzKHZvaWQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggMzI2ZjQ1Yy4uMTgxNDZjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTg4LDkgKzg4LDYgQEAKIC8qCiAgKiBGb3IgbWVtb3J5IHJlY2xhaW0uCiAgKi8KLWV4dGVybiBpbnQgbWVtX2Nncm91cF9jYWxjX21hcHBlZF9yYXRpbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKLWV4dGVybiBsb25nIG1lbV9jZ3JvdXBfcmVjbGFpbV9pbWJhbGFuY2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7Ci0KIGV4dGVybiBpbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfbm90ZV9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCQkJaW50IHByaW9yaXR5KTsKQEAgLTEwNCw2ICsxMDEsOCBAQAogCQkJCQkJICAgICAgc3RydWN0IHpvbmUgKnpvbmUpOwogc3RydWN0IHpvbmVfcmVjbGFpbV9zdGF0KgogbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9zdGF0X2Zyb21fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKKwkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAKIGV4dGVybiBpbnQgZG9fc3dhcF9hY2NvdW50OwpAQCAtMjA5LDE2ICsyMDgsNiBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NhbGNfbWFwcGVkX3JhdGlvKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfcmVjbGFpbV9pbWJhbGFuY2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQogewogCXJldHVybiAwOwpAQCAtMjcwLDYgKzI1OSwxMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbV9jZ3JvdXBfcHJpbnRfb29tX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX01FTV9DT05UICovCiAKICNlbmRpZiAvKiBfTElOVVhfTUVNQ09OVFJPTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaAppbmRleCAzZmRjMTA4Li4zN2ZhMTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKQEAgLTk5LDQgKzk5LDIxIEBACiAjZGVmaW5lIGhvdHBsdWdfbWVtb3J5X25vdGlmaWVyKGZuLCBwcmkpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisvKgorICogJ3N0cnVjdCBtZW1vcnlfYWNjZXNzb3InIGlzIGEgZ2VuZXJpYyBpbnRlcmZhY2UgdG8gcHJvdmlkZQorICogaW4ta2VybmVsIGFjY2VzcyB0byBwZXJzaXN0ZW50IG1lbW9yeSBzdWNoIGFzIGkyYyBvciBTUEkgRUVQUk9NcworICovCitzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yIHsKKwlzc2l6ZV90ICgqcmVhZCkoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqLCBjaGFyICpidWYsIG9mZl90IG9mZnNldCwKKwkJCXNpemVfdCBjb3VudCk7CisJc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICosIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSBvZmZfdCBvZmZzZXQsIHNpemVfdCBjb3VudCk7Cit9OworCisvKgorICogS2VybmVsIHRleHQgbW9kaWZpY2F0aW9uIG11dGV4LCB1c2VkIGZvciBjb2RlIHBhdGNoaW5nLiBVc2VycyBvZiB0aGlzIGxvY2sKKyAqIGNhbiBzbGVlcC4KKyAqLworZXh0ZXJuIHN0cnVjdCBtdXRleCB0ZXh0X211dGV4OworCiAjZW5kaWYgLyogX0xJTlVYX01FTU9SWV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGFlYWJlOTUuLmJmZjFmMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEwNzksNyArMTA3OSw3IEBACiAjZW5kaWYKIAogLyogbm9tbXUuYyAqLwotZXh0ZXJuIGF0b21pY190IG1tYXBfcGFnZXNfYWxsb2NhdGVkOworZXh0ZXJuIGF0b21pY19sb25nX3QgbW1hcF9wYWdlc19hbGxvY2F0ZWQ7CiAKIC8qIHByaW9fdHJlZS5jICovCiB2b2lkIHZtYV9wcmlvX3RyZWVfYWRkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggZGRhZGI0ZC4uMGU4MGUyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtOTUsNiArOTUsOSBAQAogCXZvaWQgKnZpcnR1YWw7CQkJLyogS2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoTlVMTCBpZgogCQkJCQkgICBub3Qga21hcHBlZCwgaWUuIGhpZ2htZW0pICovCiAjZW5kaWYgLyogV0FOVF9QQUdFX1ZJUlRVQUwgKi8KKyNpZmRlZiBDT05GSUdfV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCisJdW5zaWduZWQgbG9uZyBkZWJ1Z19mbGFnczsJLyogVXNlIGF0b21pYyBiaXRvcHMgb24gdGhpcyAqLworI2VuZGlmCiB9OwogCiAvKgpAQCAtMTc1LDkgKzE3OCw2IEBACiAjaWZkZWYgQ09ORklHX05VTUEKIAlzdHJ1Y3QgbWVtcG9saWN5ICp2bV9wb2xpY3k7CS8qIE5VTUEgcG9saWN5IGZvciB0aGUgVk1BICovCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfV0FOVF9QQUdFX0RFQlVHX0ZMQUdTCi0JdW5zaWduZWQgbG9uZyBkZWJ1Z19mbGFnczsJLyogVXNlIGF0b21pYyBiaXRvcHMgb24gdGhpcyAqLwotI2VuZGlmCiB9OwogCiBzdHJ1Y3QgY29yZV90aHJlYWQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCmluZGV4IDRlNDU3MjUuLjNlNzYxNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKQEAgLTE5Miw1ICsxOTIsMTAgQEAKIAl3YWtlX3VwX3Byb2Nlc3MoaG9zdC0+c2Rpb19pcnFfdGhyZWFkKTsKIH0KIAorc3RydWN0IHJlZ3VsYXRvcjsKKworaW50IG1tY19yZWd1bGF0b3JfZ2V0X29jcm1hc2soc3RydWN0IHJlZ3VsYXRvciAqc3VwcGx5KTsKK2ludCBtbWNfcmVndWxhdG9yX3NldF9vY3Ioc3RydWN0IHJlZ3VsYXRvciAqc3VwcGx5LCB1bnNpZ25lZCBzaG9ydCB2ZGRfYml0KTsKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDI2ZWYyNDAuLjE4NmVjNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNzY0LDEyICs3NjQsNiBAQAogZXh0ZXJuIGNoYXIgbnVtYV96b25lbGlzdF9vcmRlcltdOwogI2RlZmluZSBOVU1BX1pPTkVMSVNUX09SREVSX0xFTiAxNgkvKiBzdHJpbmcgYnVmZmVyIHNpemUgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+Ci0vKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgTm9kZS4gKi8KLSNpZm5kZWYgbnVtYV9ub2RlX2lkCi0jZGVmaW5lIG51bWFfbm9kZV9pZCgpCQkoY3B1X3RvX25vZGUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkpCi0jZW5kaWYKLQogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogCiBleHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhIGNvbnRpZ19wYWdlX2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCmluZGV4IDgzMGJiY2QuLjNhMDU5MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCkBAIC0yMiw2ICsyMiw4IEBACiAJaW50IGV2ZW50OwogfTsKIAorc3RydWN0IGZzX3N0cnVjdDsKKwogZXh0ZXJuIHN0cnVjdCBtbnRfbmFtZXNwYWNlICpjb3B5X21udF9ucyh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqLAogCQlzdHJ1Y3QgZnNfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgX19wdXRfbW50X25zKHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCAxNDVhNzU1Li42MjdhYzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTI0OCw2ICsyNDgsMTAgQEAKIAljb25zdCB1bnNpZ25lZCBsb25nICpjcmNzOwogCXVuc2lnbmVkIGludCBudW1fc3ltczsKIAorCS8qIEtlcm5lbCBwYXJhbWV0ZXJzLiAqLworCXN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwOworCXVuc2lnbmVkIGludCBudW1fa3A7CisKIAkvKiBHUEwtb25seSBleHBvcnRlZCBzeW1ib2xzLiAqLwogCXVuc2lnbmVkIGludCBudW1fZ3BsX3N5bXM7CiAJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmdwbF9zeW1zOwpAQCAtMzI5LDYgKzMzMywxMSBAQAogCXVuc2lnbmVkIGludCBudW1fdHJhY2Vwb2ludHM7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19UUkFDSU5HCisJY29uc3QgY2hhciAqKnRyYWNlX2JwcmludGtfZm10X3N0YXJ0OworCXVuc2lnbmVkIGludCBudW1fdHJhY2VfYnByaW50a19mbXQ7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAJLyogV2hhdCBtb2R1bGVzIGRlcGVuZCBvbiBtZT8gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG1vZHVsZXNfd2hpY2hfdXNlX21lOwpAQCAtMzUwLDYgKzM1OSw4IEBACiAjZGVmaW5lIE1PRFVMRV9BUkNIX0lOSVQge30KICNlbmRpZgogCitleHRlcm4gc3RydWN0IG11dGV4IG1vZHVsZV9tdXRleDsKKwogLyogRklYTUU6IEl0J2QgYmUgbmljZSB0byBpc29sYXRlIG1vZHVsZXMgZHVyaW5nIGluaXQsIHRvbywgc28gdGhleQogICAgYXJlbid0IHVzZWQgYmVmb3JlIHRoZXkgKG1heSkgZmFpbC4gIEJ1dCBwcmVzZW50bHkgdG9vIG11Y2ggY29kZQogICAgKElERSAmIFNDU0kpIHJlcXVpcmUgZW50cnkgaW50byB0aGUgbW9kdWxlIGR1cmluZyBpbml0LiovCkBAIC0zNTgsMTAgKzM2OSwxMCBAQAogCXJldHVybiBtb2QtPnN0YXRlICE9IE1PRFVMRV9TVEFURV9HT0lORzsKIH0KIAotLyogSXMgdGhpcyBhZGRyZXNzIGluIGEgbW9kdWxlPyAoc2Vjb25kIGlzIHdpdGggbm8gbG9ja3MsIGZvciBvb3BzKSAqLwotc3RydWN0IG1vZHVsZSAqbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwogc3RydWN0IG1vZHVsZSAqX19tb2R1bGVfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1pbnQgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKK3N0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKK2Jvb2wgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKK2Jvb2wgaXNfbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwogCiBzdGF0aWMgaW5saW5lIGludCB3aXRoaW5fbW9kdWxlX2NvcmUodW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CkBAIC0zNzUsNiArMzg2LDMxIEBACiAJICAgICAgIGFkZHIgPCAodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9pbml0ICsgbW9kLT5pbml0X3NpemU7CiB9CiAKKy8qIFNlYXJjaCBmb3IgbW9kdWxlIGJ5IG5hbWU6IG11c3QgaG9sZCBtb2R1bGVfbXV0ZXguICovCitzdHJ1Y3QgbW9kdWxlICpmaW5kX21vZHVsZShjb25zdCBjaGFyICpuYW1lKTsKKworc3RydWN0IHN5bXNlYXJjaCB7CisJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN0YXJ0LCAqc3RvcDsKKwljb25zdCB1bnNpZ25lZCBsb25nICpjcmNzOworCWVudW0geworCQlOT1RfR1BMX09OTFksCisJCUdQTF9PTkxZLAorCQlXSUxMX0JFX0dQTF9PTkxZLAorCX0gbGljZW5jZTsKKwlib29sIHVudXNlZDsKK307CisKKy8qIFNlYXJjaCBmb3IgYW4gZXhwb3J0ZWQgc3ltYm9sIGJ5IG5hbWUuICovCitjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqZmluZF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc3RydWN0IG1vZHVsZSAqKm93bmVyLAorCQkJCQljb25zdCB1bnNpZ25lZCBsb25nICoqY3JjLAorCQkJCQlib29sIGdwbG9rLAorCQkJCQlib29sIHdhcm4pOworCisvKiBXYWxrIHRoZSBleHBvcnRlZCBzeW1ib2wgdGFibGUgKi8KK2Jvb2wgZWFjaF9zeW1ib2woYm9vbCAoKmZuKShjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICphcnIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJICAgIHVuc2lnbmVkIGludCBzeW1udW0sIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKKwogLyogUmV0dXJucyAwIGFuZCBmaWxscyBpbiB2YWx1ZSwgZGVmaW5lZCBhbmQgbmFtZWJ1Ziwgb3IgLUVSQU5HRSBpZgogICAgc3ltbnVtIG91dCBvZiByYW5nZS4gKi8KIGludCBtb2R1bGVfZ2V0X2thbGxzeW0odW5zaWduZWQgaW50IHN5bW51bSwgdW5zaWduZWQgbG9uZyAqdmFsdWUsIGNoYXIgKnR5cGUsCkBAIC0zODMsNiArNDE5LDEwIEBACiAvKiBMb29rIGZvciB0aGlzIG5hbWU6IGNhbiBiZSBvZiBmb3JtIG1vZHVsZTpuYW1lLiAqLwogdW5zaWduZWQgbG9uZyBtb2R1bGVfa2FsbHN5bXNfbG9va3VwX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CiAKK2ludCBtb2R1bGVfa2FsbHN5bXNfb25fZWFjaF9zeW1ib2woaW50ICgqZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqLAorCQkJCQkgICAgIHN0cnVjdCBtb2R1bGUgKiwgdW5zaWduZWQgbG9uZyksCisJCQkJICAgdm9pZCAqZGF0YSk7CisKIGV4dGVybiB2b2lkIF9fbW9kdWxlX3B1dF9hbmRfZXhpdChzdHJ1Y3QgbW9kdWxlICptb2QsIGxvbmcgY29kZSkKIAlfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwogI2RlZmluZSBtb2R1bGVfcHV0X2FuZF9leGl0KGNvZGUpIF9fbW9kdWxlX3B1dF9hbmRfZXhpdChUSElTX01PRFVMRSwgY29kZSk7CkBAIC00NDQsNiArNDg0LDcgQEAKICNkZWZpbmUgc3ltYm9sX3B1dF9hZGRyKHApIGRvIHsgfSB3aGlsZSgwKQogCiAjZW5kaWYgLyogQ09ORklHX01PRFVMRV9VTkxPQUQgKi8KK2ludCB1c2VfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKmEsIHN0cnVjdCBtb2R1bGUgKmIpOwogCiAvKiBUaGlzIGlzIGEgI2RlZmluZSBzbyB0aGUgc3RyaW5nIGRvZXNuJ3QgZ2V0IHB1dCBpbiBldmVyeSAubyBmaWxlICovCiAjZGVmaW5lIG1vZHVsZV9uYW1lKG1vZCkJCQlcCkBAIC00OTAsMjEgKzUzMSwyNCBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKiBJcyB0aGlzIGFkZHJlc3MgaW4gYSBtb2R1bGU/ICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtb2R1bGUgKm1vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogSXMgdGhpcyBhZGRyZXNzIGluIGEgbW9kdWxlPyAoZG9uJ3QgdGFrZSBhIGxvY2ssIHdlJ3JlIG9vcHNpbmcpICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19tb2R1bGVfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKiBHZXQvcHV0IGEga2VybmVsIHN5bWJvbCAoY2FsbHMgc2hvdWxkIGJlIHN5bW1ldHJpYykgKi8KQEAgLTU1OSw2ICs2MDMsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbW9kdWxlX2thbGxzeW1zX29uX2VhY2hfc3ltYm9sKGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJCQkgICBzdHJ1Y3QgbW9kdWxlICosCisJCQkJCQkJICAgdW5zaWduZWQgbG9uZyksCisJCQkJCQkgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKQogewogCS8qIG5vIGV2ZW50cyB3aWxsIGhhcHBlbiBhbnl3YXksIHNvIHRoaXMgY2FuIGFsd2F5cyBzdWNjZWVkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKaW5kZXggZTRhZjMzOS4uYTRmMGI5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaApAQCAtMTM4LDYgKzEzOCwxNiBAQAogCQkgICAgICB1bnNpZ25lZCBudW0sCiAJCSAgICAgIGludCAoKnVua25vd24pKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwpKTsKIAorLyogQ2FsbGVkIGJ5IG1vZHVsZSByZW1vdmUuICovCisjaWZkZWYgQ09ORklHX1NZU0ZTCitleHRlcm4gdm9pZCBkZXN0cm95X3BhcmFtcyhjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwYXJhbXMsIHVuc2lnbmVkIG51bSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfcGFyYW1zKGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKnBhcmFtcywKKwkJCQkgIHVuc2lnbmVkIG51bSkKK3sKK30KKyNlbmRpZiAvKiAhQ09ORklHX1NZU0ZTICovCisKIC8qIEFsbCB0aGUgaGVscGVyIGZ1bmN0aW9ucyAqLwogLyogVGhlIG1hY3JvcyB0byBkbyBjb21waWxlLXRpbWUgdHlwZSBjaGVja2luZyBzdG9sZW4gZnJvbSBKYWt1YgogICAgSmVsaW5laywgd2hvIElJUkMgY2FtZSB1cCB3aXRoIHRoaXMgaWRlYSBmb3IgdGhlIDIuNCBtb2R1bGUgaW5pdCBjb2RlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcGFnZS5oIGIvaW5jbHVkZS9saW51eC9tcGFnZS5oCmluZGV4IDVjNDI4MjEuLjA2OGEwYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXBhZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21wYWdlLmgKQEAgLTExLDIxICsxMSwxMSBAQAogICovCiAjaWZkZWYgQ09ORklHX0JMT0NLCiAKLXN0cnVjdCBtcGFnZV9kYXRhIHsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0Jc2VjdG9yX3QgbGFzdF9ibG9ja19pbl9iaW87Ci0JZ2V0X2Jsb2NrX3QgKmdldF9ibG9jazsKLQl1bnNpZ25lZCB1c2Vfd3JpdGVwYWdlOwotfTsKLQogc3RydWN0IHdyaXRlYmFja19jb250cm9sOwogCi1zdHJ1Y3QgYmlvICptcGFnZV9iaW9fc3VibWl0KGludCBydywgc3RydWN0IGJpbyAqYmlvKTsKIGludCBtcGFnZV9yZWFkcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAogCQkJCXVuc2lnbmVkIG5yX3BhZ2VzLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOwogaW50IG1wYWdlX3JlYWRwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOwotaW50IF9fbXBhZ2Vfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKLQkJICAgICAgdm9pZCAqZGF0YSk7CiBpbnQgbXBhZ2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIGdldF9ibG9ja190IGdldF9ibG9jayk7CiBpbnQgbXBhZ2Vfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggYmRlMjU1Ny4uZmRmZmI0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC0xODUsNiArMTg1LDkgQEAKIAlmbW9kZV90CQkJIGRlbGVnYXRpb25fc3RhdGU7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZQlyd3NlbTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0Ki8KKyNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJKmZzY2FjaGU7CisjZW5kaWYKIAlzdHJ1Y3QgaW5vZGUJCXZmc19pbm9kZTsKIH07CiAKQEAgLTIwNyw2ICsyMTAsOCBAQAogI2RlZmluZSBORlNfSU5PX0FDTF9MUlVfU0VUCSgyKQkJLyogSW5vZGUgaXMgb24gdGhlIExSVSBsaXN0ICovCiAjZGVmaW5lIE5GU19JTk9fTU9VTlRQT0lOVAkoMykJCS8qIGlub2RlIGlzIHJlbW90ZSBtb3VudHBvaW50ICovCiAjZGVmaW5lIE5GU19JTk9fRkxVU0hJTkcJKDQpCQkvKiBpbm9kZSBpcyBmbHVzaGluZyBvdXQgZGF0YSAqLworI2RlZmluZSBORlNfSU5PX0ZTQ0FDSEUJCSg1KQkJLyogaW5vZGUgY2FuIGJlIGNhY2hlZCBieSBGUy1DYWNoZSAqLworI2RlZmluZSBORlNfSU5PX0ZTQ0FDSEVfTE9DSwkoNikJCS8qIEZTLUNhY2hlIGNvb2tpZSBtYW5hZ2VtZW50IGxvY2sgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX2lub2RlICpORlNfSShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMjYwLDYgKzI2NSwxMSBAQAogCXJldHVybiB0ZXN0X2JpdChORlNfSU5PX1NUQUxFLCAmTkZTX0koaW5vZGUpLT5mbGFncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IE5GU19GU0NBQ0hFKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIHRlc3RfYml0KE5GU19JTk9fRlNDQUNIRSwgJk5GU19JKGlub2RlKS0+ZmxhZ3MpOworfQorCiBzdGF0aWMgaW5saW5lIF9fdTY0IE5GU19GSUxFSUQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gTkZTX0koaW5vZGUpLT5maWxlaWQ7CkBAIC01MDYsNiArNTE2LDggQEAKIAkJc3RydWN0IGxpc3RfaGVhZCAqLCB1bnNpZ25lZCk7CiBleHRlcm4gaW50ICBuZnNfcmVhZHBhZ2VfcmVzdWx0KHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqKTsKIGV4dGVybiB2b2lkIG5mc19yZWFkZGF0YV9yZWxlYXNlKHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCAgbmZzX3JlYWRwYWdlX2FzeW5jKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICosIHN0cnVjdCBpbm9kZSAqLAorCQkJICAgICAgIHN0cnVjdCBwYWdlICopOwogCiAvKgogICogQWxsb2NhdGUgbmZzX3JlYWRfZGF0YSBzdHJ1Y3R1cmVzCkBAIC01ODMsNiArNTk1LDcgQEAKICNkZWZpbmUgTkZTREJHX0NBTExCQUNLCQkweDAxMDAKICNkZWZpbmUgTkZTREJHX0NMSUVOVAkJMHgwMjAwCiAjZGVmaW5lIE5GU0RCR19NT1VOVAkJMHgwNDAwCisjZGVmaW5lIE5GU0RCR19GU0NBQ0hFCQkweDA4MDAKICNkZWZpbmUgTkZTREJHX0FMTAkJMHhGRkZGCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAppbmRleCAyOWIxZTQwLi42YWQ3NTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKQEAgLTY0LDYgKzY0LDEwIEBACiAJY2hhcgkJCWNsX2lwYWRkcls0OF07CiAJdW5zaWduZWQgY2hhcgkJY2xfaWRfdW5pcXVpZmllcjsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpmc2NhY2hlOwkvKiBjbGllbnQgaW5kZXggY2FjaGUgY29va2llICovCisjZW5kaWYKIH07CiAKIC8qCkBAIC05NiwxMiArMTAwLDE5IEBACiAJdW5zaWduZWQgaW50CQlhY2Rpcm1pbjsKIAl1bnNpZ25lZCBpbnQJCWFjZGlybWF4OwogCXVuc2lnbmVkIGludAkJbmFtZWxlbjsKKwl1bnNpZ25lZCBpbnQJCW9wdGlvbnM7CS8qIGV4dHJhIG9wdGlvbnMgZW5hYmxlZCBieSBtb3VudCAqLworI2RlZmluZSBORlNfT1BUSU9OX0ZTQ0FDSEUJMHgwMDAwMDAwMQkvKiAtIGxvY2FsIGNhY2hpbmcgZW5hYmxlZCAqLwogCiAJc3RydWN0IG5mc19mc2lkCQlmc2lkOwogCV9fdTY0CQkJbWF4ZmlsZXNpemU7CS8qIG1heGltdW0gZmlsZSBzaXplICovCiAJdW5zaWduZWQgbG9uZwkJbW91bnRfdGltZTsJLyogd2hlbiB0aGlzIGZzIHdhcyBtb3VudGVkICovCiAJZGV2X3QJCQlzX2RldjsJCS8qIHN1cGVyYmxvY2sgZGV2IG51bWJlcnMgKi8KIAorI2lmZGVmIENPTkZJR19ORlNfRlNDQUNIRQorCXN0cnVjdCBuZnNfZnNjYWNoZV9rZXkJKmZzY2FjaGVfa2V5OwkvKiB1bmlxdWUga2V5IGZvciBzdXBlcmJsb2NrICovCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpmc2NhY2hlOwkvKiBzdXBlcmJsb2NrIGNvb2tpZSAqLworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiAJdTMyCQkJYXR0cl9iaXRtYXNrWzJdOy8qIFY0IGJpdG1hc2sgcmVwcmVzZW50aW5nIHRoZSBzZXQKIAkJCQkJCSAgIG9mIGF0dHJpYnV0ZXMgc3VwcG9ydGVkIG9uIHRoaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2lvc3RhdC5oIGIvaW5jbHVkZS9saW51eC9uZnNfaW9zdGF0LmgKaW5kZXggMWNiOWEzZi4uNjhiMTBmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfaW9zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfaW9zdGF0LmgKQEAgLTExNiw0ICsxMTYsMTYgQEAKIAlfX05GU0lPU19DT1VOVFNNQVgsCiB9OwogCisvKgorICogTkZTIGxvY2FsIGNhY2hpbmcgc2VydmljaW5nIGNvdW50ZXJzCisgKi8KK2VudW0gbmZzX3N0YXRfZnNjYWNoZWNvdW50ZXJzIHsKKwlORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX09LLAorCU5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwKKwlORlNJT1NfRlNDQUNIRV9QQUdFU19XUklUVEVOX09LLAorCU5GU0lPU19GU0NBQ0hFX1BBR0VTX1dSSVRURU5fRkFJTCwKKwlORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwKKwlfX05GU0lPU19GU0NBQ0hFTUFYLAorfTsKKwogI2VuZGlmCS8qIF9MSU5VWF9ORlNfSU9TVEFUICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25zcHJveHkuaCBiL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCmluZGV4IGFmYWQ3ZGUuLjdiMzcwYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCisrKyBiL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCkBAIC04LDYgKzgsNyBAQAogc3RydWN0IHV0c19uYW1lc3BhY2U7CiBzdHJ1Y3QgaXBjX25hbWVzcGFjZTsKIHN0cnVjdCBwaWRfbmFtZXNwYWNlOworc3RydWN0IGZzX3N0cnVjdDsKIAogLyoKICAqIEEgc3RydWN0dXJlIHRvIGNvbnRhaW4gcG9pbnRlcnMgdG8gYWxsIHBlci1wcm9jZXNzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDYxZGYxNzcuLjYyMjE0YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC04Miw2ICs4Miw3IEBACiAJUEdfYXJjaF8xLAogCVBHX3Jlc2VydmVkLAogCVBHX3ByaXZhdGUsCQkvKiBJZiBwYWdlY2FjaGUsIGhhcyBmcy1wcml2YXRlIGRhdGEgKi8KKwlQR19wcml2YXRlXzIsCQkvKiBJZiBwYWdlY2FjaGUsIGhhcyBmcyBhdXggZGF0YSAqLwogCVBHX3dyaXRlYmFjaywJCS8qIFBhZ2UgaXMgdW5kZXIgd3JpdGViYWNrICovCiAjaWZkZWYgQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRAogCVBHX2hlYWQsCQkvKiBBIGhlYWQgcGFnZSAqLwpAQCAtMTA4LDYgKzEwOSwxMiBAQAogCS8qIEZpbGVzeXN0ZW1zICovCiAJUEdfY2hlY2tlZCA9IFBHX293bmVyX3ByaXZfMSwKIAorCS8qIFR3byBwYWdlIGJpdHMgYXJlIGNvbnNjcmlwdGVkIGJ5IEZTLUNhY2hlIHRvIG1haW50YWluIGxvY2FsIGNhY2hpbmcKKwkgKiBzdGF0ZS4gIFRoZXNlIGJpdHMgYXJlIHNldCBvbiBwYWdlcyBiZWxvbmdpbmcgdG8gdGhlIG5ldGZzJ3MgaW5vZGVzCisJICogd2hlbiB0aG9zZSBpbm9kZXMgYXJlIGJlaW5nIGxvY2FsbHkgY2FjaGVkLgorCSAqLworCVBHX2ZzY2FjaGUgPSBQR19wcml2YXRlXzIsCS8qIHBhZ2UgYmFja2VkIGJ5IGNhY2hlICovCisKIAkvKiBYRU4gKi8KIAlQR19waW5uZWQgPSBQR19vd25lcl9wcml2XzEsCiAJUEdfc2F2ZXBpbm5lZCA9IFBHX2RpcnR5LApAQCAtMTgyLDcgKzE4OSw3IEBACiAKIHN0cnVjdCBwYWdlOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCiAKLVRFU1RQQUdFRkxBRyhMb2NrZWQsIGxvY2tlZCkKK1RFU1RQQUdFRkxBRyhMb2NrZWQsIGxvY2tlZCkgVEVTVFNFVEZMQUcoTG9ja2VkLCBsb2NrZWQpCiBQQUdFRkxBRyhFcnJvciwgZXJyb3IpCiBQQUdFRkxBRyhSZWZlcmVuY2VkLCByZWZlcmVuY2VkKSBURVNUQ0xFQVJGTEFHKFJlZmVyZW5jZWQsIHJlZmVyZW5jZWQpCiBQQUdFRkxBRyhEaXJ0eSwgZGlydHkpIFRFU1RTQ0ZMQUcoRGlydHksIGRpcnR5KSBfX0NMRUFSUEFHRUZMQUcoRGlydHksIGRpcnR5KQpAQCAtMTk0LDggKzIwMSw2IEBACiBQQUdFRkxBRyhQaW5uZWQsIHBpbm5lZCkgVEVTVFNDRkxBRyhQaW5uZWQsIHBpbm5lZCkJLyogWGVuICovCiBQQUdFRkxBRyhTYXZlUGlubmVkLCBzYXZlcGlubmVkKTsJCQkvKiBYZW4gKi8KIFBBR0VGTEFHKFJlc2VydmVkLCByZXNlcnZlZCkgX19DTEVBUlBBR0VGTEFHKFJlc2VydmVkLCByZXNlcnZlZCkKLVBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpIF9fQ0xFQVJQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKQotCV9fU0VUUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKIFBBR0VGTEFHKFN3YXBCYWNrZWQsIHN3YXBiYWNrZWQpIF9fQ0xFQVJQQUdFRkxBRyhTd2FwQmFja2VkLCBzd2FwYmFja2VkKQogCiBfX1BBR0VGTEFHKFNsb2JQYWdlLCBzbG9iX3BhZ2UpCkBAIC0yMDUsNiArMjEwLDE2IEBACiBfX1BBR0VGTEFHKFNsdWJEZWJ1Zywgc2x1Yl9kZWJ1ZykKIAogLyoKKyAqIFByaXZhdGUgcGFnZSBtYXJraW5ncyB0aGF0IG1heSBiZSB1c2VkIGJ5IHRoZSBmaWxlc3lzdGVtIHRoYXQgb3ducyB0aGUgcGFnZQorICogZm9yIGl0cyBvd24gcHVycG9zZXMuCisgKiAtIFBHX3ByaXZhdGUgYW5kIFBHX3ByaXZhdGVfMiBjYXVzZSByZWxlYXNlcGFnZSgpIGFuZCBjbyB0byBiZSBpbnZva2VkCisgKi8KK1BBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpIF9fU0VUUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKKwlfX0NMRUFSUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKK1BBR0VGTEFHKFByaXZhdGUyLCBwcml2YXRlXzIpIFRFU1RTQ0ZMQUcoUHJpdmF0ZTIsIHByaXZhdGVfMikKK1BBR0VGTEFHKE93bmVyUHJpdjEsIG93bmVyX3ByaXZfMSkgVEVTVENMRUFSRkxBRyhPd25lclByaXYxLCBvd25lcl9wcml2XzEpCisKKy8qCiAgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZQogICogcmlza3k6IHRoZXkgYnlwYXNzIHBhZ2UgYWNjb3VudGluZy4KICAqLwpAQCAtMzg0LDkgKzM5OSwxMCBAQAogICogdGhlc2UgZmxhZ3Mgc2V0LiAgSXQgdGhleSBhcmUsIHRoZXJlIGlzIGEgcHJvYmxlbS4KICAqLwogI2RlZmluZSBQQUdFX0ZMQUdTX0NIRUNLX0FUX0ZSRUUgXAotCSgxIDw8IFBHX2xydSAgIHwgMSA8PCBQR19wcml2YXRlICAgfCAxIDw8IFBHX2xvY2tlZCB8IFwKLQkgMSA8PCBQR19idWRkeSB8IDEgPDwgUEdfd3JpdGViYWNrIHwgMSA8PCBQR19yZXNlcnZlZCB8IFwKLQkgMSA8PCBQR19zbGFiICB8IDEgPDwgUEdfc3dhcGNhY2hlIHwgMSA8PCBQR19hY3RpdmUgfCBcCisJKDEgPDwgUEdfbHJ1CSB8IDEgPDwgUEdfbG9ja2VkICAgIHwgXAorCSAxIDw8IFBHX3ByaXZhdGUgfCAxIDw8IFBHX3ByaXZhdGVfMiB8IFwKKwkgMSA8PCBQR19idWRkeQkgfCAxIDw8IFBHX3dyaXRlYmFjayB8IDEgPDwgUEdfcmVzZXJ2ZWQgfCBcCisJIDEgPDwgUEdfc2xhYgkgfCAxIDw8IFBHX3N3YXBjYWNoZSB8IDEgPDwgUEdfYWN0aXZlIHwgXAogCSBfX1BHX1VORVZJQ1RBQkxFIHwgX19QR19NTE9DS0VEKQogCiAvKgpAQCAtMzk3LDQgKzQxMywxNiBAQAogI2RlZmluZSBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVAJKCgxIDw8IE5SX1BBR0VGTEFHUykgLSAxKQogCiAjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFNfSCAqLworCisvKioKKyAqIHBhZ2VfaGFzX3ByaXZhdGUgLSBEZXRlcm1pbmUgaWYgcGFnZSBoYXMgcHJpdmF0ZSBzdHVmZgorICogQHBhZ2U6IFRoZSBwYWdlIHRvIGJlIGNoZWNrZWQKKyAqCisgKiBEZXRlcm1pbmUgaWYgYSBwYWdlIGhhcyBwcml2YXRlIHN0dWZmLCBpbmRpY2F0aW5nIHRoYXQgcmVsZWFzZSByb3V0aW5lcworICogc2hvdWxkIGJlIGludm9rZWQgdXBvbiBpdC4KKyAqLworI2RlZmluZSBwYWdlX2hhc19wcml2YXRlKHBhZ2UpCQkJXAorCSgocGFnZSktPmZsYWdzICYgKCgxIDw8IFBHX3ByaXZhdGUpIHwJXAorCQkJICAoMSA8PCBQR19wcml2YXRlXzIpKSkKKwogI2VuZGlmCS8qIFBBR0VfRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCmluZGV4IDYwMmNjMWYuLjczMzljN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKQEAgLTkxLDI0ICs5MSwyMyBAQAogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KLWV4dGVybiBzdHJ1Y3QgbWVtX2Nncm91cCAqCi1zd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKLWV4dGVybiBzdHJ1Y3QgbWVtX2Nncm91cCAqbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cChzd3BfZW50cnlfdCBlbnQpOwogZXh0ZXJuIGludCBzd2FwX2Nncm91cF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzKTsKIGV4dGVybiB2b2lkIHN3YXBfY2dyb3VwX3N3YXBvZmYoaW50IHR5cGUpOwogI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAKIHN0YXRpYyBpbmxpbmUKLXN0cnVjdCBtZW1fY2dyb3VwICpzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQordW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQpCiB7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUKLXN0cnVjdCBtZW1fY2dyb3VwICpsb29rdXBfc3dhcF9jZ3JvdXAoc3dwX2VudHJ5X3QgZW50KQordW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCkKIHsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggMDFjYTA4NS4uMzRkYTUyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTE4LDkgKzE4LDE0IEBACiAgKiBCaXRzIGluIG1hcHBpbmctPmZsYWdzLiAgVGhlIGxvd2VyIF9fR0ZQX0JJVFNfU0hJRlQgYml0cyBhcmUgdGhlIHBhZ2UKICAqIGFsbG9jYXRpb24gbW9kZSBmbGFncy4KICAqLwotI2RlZmluZQlBU19FSU8JCShfX0dGUF9CSVRTX1NISUZUICsgMCkJLyogSU8gZXJyb3Igb24gYXN5bmMgd3JpdGUgKi8KLSNkZWZpbmUgQVNfRU5PU1BDCShfX0dGUF9CSVRTX1NISUZUICsgMSkJLyogRU5PU1BDIG9uIGFzeW5jIHdyaXRlICovCi0jZGVmaW5lIEFTX01NX0FMTF9MT0NLUwkoX19HRlBfQklUU19TSElGVCArIDIpCS8qIHVuZGVyIG1tX3Rha2VfYWxsX2xvY2tzKCkgKi8KK2VudW0gbWFwcGluZ19mbGFncyB7CisJQVNfRUlPCQk9IF9fR0ZQX0JJVFNfU0hJRlQgKyAwLAkvKiBJTyBlcnJvciBvbiBhc3luYyB3cml0ZSAqLworCUFTX0VOT1NQQwk9IF9fR0ZQX0JJVFNfU0hJRlQgKyAxLAkvKiBFTk9TUEMgb24gYXN5bmMgd3JpdGUgKi8KKwlBU19NTV9BTExfTE9DS1MJPSBfX0dGUF9CSVRTX1NISUZUICsgMiwJLyogdW5kZXIgbW1fdGFrZV9hbGxfbG9ja3MoKSAqLworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwlBU19VTkVWSUNUQUJMRQk9IF9fR0ZQX0JJVFNfU0hJRlQgKyAzLAkvKiBlLmcuLCByYW1kaXNrLCBTSE1fTE9DSyAqLworI2VuZGlmCit9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZXJyb3Ioc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGludCBlcnJvcikKIHsKQEAgLTMzLDcgKzM4LDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKLSNkZWZpbmUgQVNfVU5FVklDVEFCTEUJKF9fR0ZQX0JJVFNfU0hJRlQgKyAyKQkvKiBlLmcuLCByYW1kaXNrLCBTSE1fTE9DSyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7CkBAIC0zODAsNiArMzg0LDExIEBACiBleHRlcm4gdm9pZCBlbmRfcGFnZV93cml0ZWJhY2soc3RydWN0IHBhZ2UgKnBhZ2UpOwogCiAvKgorICogQWRkIGFuIGFyYml0cmFyeSB3YWl0ZXIgdG8gYSBwYWdlJ3Mgd2FpdCBxdWV1ZQorICovCitleHRlcm4gdm9pZCBhZGRfcGFnZV93YWl0X3F1ZXVlKHN0cnVjdCBwYWdlICpwYWdlLCB3YWl0X3F1ZXVlX3QgKndhaXRlcik7CisKKy8qCiAgKiBGYXVsdCBhIHVzZXJzcGFjZSBwYWdlIGludG8gcGFnZXRhYmxlcy4gIFJldHVybiBub24temVybyBvbiBhIGZhdWx0LgogICoKICAqIFRoaXMgYXNzdW1lcyB0aGF0IHR3byB1c2Vyc3BhY2UgcGFnZXMgYXJlIGFsd2F5cyBzdWZmaWNpZW50LiAgVGhhdCdzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGNiMTRmZDIuLjE3MGY4YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC01MjYsNiArNTI2LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQzCTB4NzQ0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDQzCTB4NzQ0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDUJMHg3NDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJCTB4NzQ2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX0xQQwkweDc0NjgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9JREUJMHg3NDY5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfU01CVVMyCTB4NzQ2YQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKaW5kZXggOThiOTNjYS4uNjdjMTU2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCkBAIC05NCw2ICs5NCw3IEBACiBleHRlcm4gdm9pZCBfX3B0cmFjZV9saW5rKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCiAJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3X3BhcmVudCk7CiBleHRlcm4gdm9pZCBfX3B0cmFjZV91bmxpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CitleHRlcm4gdm9pZCBleGl0X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlcik7CiBleHRlcm4gdm9pZCBwdHJhY2VfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MpOwogI2RlZmluZSBQVFJBQ0VfTU9ERV9SRUFEICAgMQogI2RlZmluZSBQVFJBQ0VfTU9ERV9BVFRBQ0ggMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wd20uaCBiL2luY2x1ZGUvbGludXgvcHdtLmgKaW5kZXggMzk0NWY4MC4uN2M3NzU3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wd20uaAorKysgYi9pbmNsdWRlL2xpbnV4L3B3bS5oCkBAIC0yOCw0ICsyOCw0IEBACiAgKi8KIHZvaWQgcHdtX2Rpc2FibGUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSk7CiAKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX1BXTV9IICovCisjZW5kaWYgLyogX19MSU5VWF9QV01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oIGIvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzhiOWM1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpZm5kZWYgX0xJTkVBUl9ICi0jZGVmaW5lIF9MSU5FQVJfSAotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotCi1zdHJ1Y3QgZGV2X2luZm8gewotCW1ka19yZGV2X3QJKnJkZXY7Ci0Jc2VjdG9yX3QJbnVtX3NlY3RvcnM7Ci0Jc2VjdG9yX3QJc3RhcnRfc2VjdG9yOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm9fdDsKLQotc3RydWN0IGxpbmVhcl9wcml2YXRlX2RhdGEKLXsKLQlzdHJ1Y3QgbGluZWFyX3ByaXZhdGVfZGF0YSAqcHJldjsJLyogZWFybGllciB2ZXJzaW9uICovCi0JZGV2X2luZm9fdAkJKipoYXNoX3RhYmxlOwotCXNlY3Rvcl90CQlzcGFjaW5nOwotCXNlY3Rvcl90CQlhcnJheV9zZWN0b3JzOwotCWludAkJCXNlY3Rvcl9zaGlmdDsJLyogc2hpZnQgYmVmb3JlIGRpdmlkaW5nCi0JCQkJCQkgKiBieSBzcGFjaW5nCi0JCQkJCQkgKi8KLQlkZXZfaW5mb190CQlkaXNrc1swXTsKLX07Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgbGluZWFyX3ByaXZhdGVfZGF0YSBsaW5lYXJfY29uZl90OwotCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgobGluZWFyX2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmJlYTE0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAgIG1kLmggOiBNdWx0aXBsZSBEZXZpY2VzIGRyaXZlciBmb3IgTGludXgKLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYtOTggSW5nbyBNb2xuYXIsIEdhZGkgT3htYW4KLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTQtOTYgTWFyYyBaWU5HSUVSCi0JICA8enluZ2llckB1ZnItaW5mby1wNy5pYnAuZnI+IG9yCi0JICA8bWF6QGdsb3Vwcy5mZG4uZnI+Ci0JICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0gICAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCi0qLwotCi0jaWZuZGVmIF9NRF9ICi0jZGVmaW5lIF9NRF9ICi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotCi0vKgotICogJ21kX3AuaCcgaG9sZHMgdGhlICdwaHlzaWNhbCcgbGF5b3V0IG9mIFJBSUQgZGV2aWNlcwotICogJ21kX3UuaCcgaG9sZHMgdGhlIHVzZXIgPD0+IGtlcm5lbCBBUEkKLSAqCi0gKiAnbWRfay5oJyBob2xkcyBrZXJuZWwgaW50ZXJuYWwgZGVmaW5pdGlvbnMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF9wLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF9rLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUQKLQotLyoKLSAqIERpZmZlcmVudCBtYWpvciB2ZXJzaW9ucyBhcmUgbm90IGNvbXBhdGlibGUuCi0gKiBEaWZmZXJlbnQgbWlub3IgdmVyc2lvbnMgYXJlIG9ubHkgZG93bndhcmQgY29tcGF0aWJsZS4KLSAqIERpZmZlcmVudCBwYXRjaGxldmVsIHZlcnNpb25zIGFyZSBkb3dud2FyZCBhbmQgdXB3YXJkIGNvbXBhdGlibGUuCi0gKi8KLSNkZWZpbmUgTURfTUFKT1JfVkVSU0lPTiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1EX01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgOTAKLS8qCi0gKiBNRF9QQVRDSExFVkVMX1ZFUlNJT04gaW5kaWNhdGVzIGtlcm5lbCBmdW5jdGlvbmFsaXR5LgotICogPj0xIG1lYW5zIGRpZmZlcmVudCBzdXBlcmJsb2NrIGZvcm1hdHMgYXJlIHNlbGVjdGFibGUgdXNpbmcgU0VUX0FSUkFZX0lORk8KLSAqICAgICBhbmQgbWFqb3JfdmVyc2lvbi9taW5vcl92ZXJzaW9uIGFjY29yZGluZ2x5Ci0gKiA+PTIgbWVhbnMgdGhhdCBJbnRlcm5hbCBiaXRtYXBzIGFyZSBzdXBwb3J0ZWQgYnkgc2V0dGluZyBNRF9TQl9CSVRNQVBfUFJFU0VOVAotICogICAgIGluIHRoZSBzdXBlciBzdGF0dXMgYnl0ZQotICogPj0zIG1lYW5zIHRoYXQgYml0bWFwIHN1cGVyYmxvY2sgdmVyc2lvbiA0IGlzIHN1cHBvcnRlZCwgd2hpY2ggdXNlcwotICogICAgIGxpdHRsZS1lbmRpbmcgcmVwcmVzZW50YXRpb24gcmF0aGVyIHRoYW4gaG9zdC1lbmRpYW4KLSAqLwotI2RlZmluZSBNRF9QQVRDSExFVkVMX1ZFUlNJT04gICAgICAgICAgIDMKLQotZXh0ZXJuIGludCBtZHBfbWFqb3I7Ci0KLWV4dGVybiBpbnQgcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7Ci1leHRlcm4gaW50IHVucmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7Ci1leHRlcm4gbWRrX3RocmVhZF90ICogbWRfcmVnaXN0ZXJfdGhyZWFkKHZvaWQgKCpydW4pIChtZGRldl90ICptZGRldiksCi0JCQkJbWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRrX3RocmVhZF90ICp0aHJlYWQpOwotZXh0ZXJuIHZvaWQgbWRfd2FrZXVwX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCk7Ci1leHRlcm4gdm9pZCBtZF9jaGVja19yZWNvdmVyeShtZGRldl90ICptZGRldik7Ci1leHRlcm4gdm9pZCBtZF93cml0ZV9zdGFydChtZGRldl90ICptZGRldiwgc3RydWN0IGJpbyAqYmkpOwotZXh0ZXJuIHZvaWQgbWRfd3JpdGVfZW5kKG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiB2b2lkIG1kX2RvbmVfc3luYyhtZGRldl90ICptZGRldiwgaW50IGJsb2NrcywgaW50IG9rKTsKLWV4dGVybiB2b2lkIG1kX2Vycm9yKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKLQotZXh0ZXJuIHZvaWQgbWRfc3VwZXJfd3JpdGUobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYsCi0JCQkgICBzZWN0b3JfdCBzZWN0b3IsIGludCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci1leHRlcm4gdm9pZCBtZF9zdXBlcl93YWl0KG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiBpbnQgc3luY19wYWdlX2lvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsCi0JCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJ3KTsKLWV4dGVybiB2b2lkIG1kX2RvX3N5bmMobWRkZXZfdCAqbWRkZXYpOwotZXh0ZXJuIHZvaWQgbWRfbmV3X2V2ZW50KG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiBpbnQgbWRfYWxsb3dfd3JpdGUobWRkZXZfdCAqbWRkZXYpOwotZXh0ZXJuIHZvaWQgbWRfd2FpdF9mb3JfYmxvY2tlZF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KTsKLQotI2VuZGlmIC8qIENPTkZJR19NRCAqLwotI2VuZGlmIAotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0M2U0ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAyICswLDAgQEAKLS8qCi0gICBtZF9rLmggOiBrZXJuZWwgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZSBMaW51eCBNRCBkcml2ZXIKLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYtOTggSW5nbyBNb2xuYXIsIEdhZGkgT3htYW4KLQkgIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgIAotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKLSovCi0KLSNpZm5kZWYgX01EX0tfSAotI2RlZmluZSBfTURfS19ICi0KLS8qIGFuZCBkbS1iaW8tbGlzdC5oIGlzIG5vdCB1bmRlciBpbmNsdWRlL2xpbnV4IGJlY2F1c2UuLi4uID8/PyAqLwotI2luY2x1ZGUgIi4uLy4uLy4uL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaCIKLQotI2lmZGVmIENPTkZJR19CTE9DSwotCi0jZGVmaW5lCUxFVkVMX01VTFRJUEFUSAkJKC00KQotI2RlZmluZQlMRVZFTF9MSU5FQVIJCSgtMSkKLSNkZWZpbmUJTEVWRUxfRkFVTFRZCQkoLTUpCi0KLS8qIHdlIG5lZWQgYSB2YWx1ZSBmb3IgJ25vIGxldmVsIHNwZWNpZmllZCcgYW5kIDAKLSAqIG1lYW5zICdyYWlkMCcsIHNvIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UuICBUaGlzIGlzCi0gKiBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKLSAqLwotI2RlZmluZQlMRVZFTF9OT05FCQkoLTEwMDAwMDApCi0KLSNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApCi0KLXR5cGVkZWYgc3RydWN0IG1kZGV2X3MgbWRkZXZfdDsKLXR5cGVkZWYgc3RydWN0IG1ka19yZGV2X3MgbWRrX3JkZXZfdDsKLQotLyoKLSAqIG9wdGlvbnMgcGFzc2VkIGluIHJhaWRydW46Ci0gKi8KLQotLyogQ3VycmVudGx5IHRoaXMgbXVzdCBmaXQgaW4gYW4gJ2ludCcgKi8KLSNkZWZpbmUgTUFYX0NIVU5LX1NJWkUgKDE8PDMwKQotCi0vKgotICogTUQncyAnZXh0ZW5kZWQnIGRldmljZQotICovCi1zdHJ1Y3QgbWRrX3JkZXZfcwotewotCXN0cnVjdCBsaXN0X2hlYWQgc2FtZV9zZXQ7CS8qIFJBSUQgZGV2aWNlcyB3aXRoaW4gdGhlIHNhbWUgc2V0ICovCi0KLQlzZWN0b3JfdCBzaXplOwkJCS8qIERldmljZSBzaXplIChpbiBibG9ja3MpICovCi0JbWRkZXZfdCAqbWRkZXY7CQkJLyogUkFJRCBhcnJheSBpZiBydW5uaW5nICovCi0JbG9uZyBsYXN0X2V2ZW50czsJCS8qIElPIGV2ZW50IHRpbWVzdGFtcCAqLwotCi0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsJLyogYmxvY2sgZGV2aWNlIGhhbmRsZSAqLwotCi0Jc3RydWN0IHBhZ2UJKnNiX3BhZ2U7Ci0JaW50CQlzYl9sb2FkZWQ7Ci0JX191NjQJCXNiX2V2ZW50czsKLQlzZWN0b3JfdAlkYXRhX29mZnNldDsJLyogc3RhcnQgb2YgZGF0YSBpbiBhcnJheSAqLwotCXNlY3Rvcl90IAlzYl9zdGFydDsJLyogb2Zmc2V0IG9mIHRoZSBzdXBlciBibG9jayAoaW4gNTEyYnl0ZSBzZWN0b3JzKSAqLwotCWludAkJc2Jfc2l6ZTsJLyogYnl0ZXMgaW4gdGhlIHN1cGVyYmxvY2sgKi8KLQlpbnQJCXByZWZlcnJlZF9taW5vcjsJLyogYXV0b3J1biBzdXBwb3J0ICovCi0KLQlzdHJ1Y3Qga29iamVjdAlrb2JqOwotCi0JLyogQSBkZXZpY2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXMgYmFzZWQgb24gdHdvIGZsYWdzOgotCSAqIE5vdCB3b3JraW5nOiAgIGZhdWx0eT09MSBpbl9zeW5jPT0wCi0JICogRnVsbHkgd29ya2luZzogZmF1bHR5PT0wIGluX3N5bmM9PTEKLQkgKiBXb3JraW5nLCBidXQgbm90Ci0JICogaW4gc3luYyB3aXRoIGFycmF5Ci0JICogICAgICAgICAgICAgICAgZmF1bHR5PT0wIGluX3N5bmM9PTAKLQkgKgotCSAqIEl0IGNhbiBuZXZlciBoYXZlIGZhdWx0eT09MSwgaW5fc3luYz09MQotCSAqIFRoaXMgcmVkdWNlcyB0aGUgYnVyZGVuIG9mIHRlc3RpbmcgbXVsdGlwbGUgZmxhZ3MgaW4gbWFueSBjYXNlcwotCSAqLwotCi0JdW5zaWduZWQgbG9uZwlmbGFnczsKLSNkZWZpbmUJRmF1bHR5CQkxCQkvKiBkZXZpY2UgaXMga25vd24gdG8gaGF2ZSBhIGZhdWx0ICovCi0jZGVmaW5lCUluX3N5bmMJCTIJCS8qIGRldmljZSBpcyBpbl9zeW5jIHdpdGggcmVzdCBvZiBhcnJheSAqLwotI2RlZmluZQlXcml0ZU1vc3RseQk0CQkvKiBBdm9pZCByZWFkaW5nIGlmIGF0IGFsbCBwb3NzaWJsZSAqLwotI2RlZmluZQlCYXJyaWVyc05vdHN1cHAJNQkJLyogQklPX1JXX0JBUlJJRVIgaXMgbm90IHN1cHBvcnRlZCAqLwotI2RlZmluZQlBbGxSZXNlcnZlZAk2CQkvKiBJZiB3aG9sZSBkZXZpY2UgaXMgcmVzZXJ2ZWQgZm9yCi0JCQkJCSAqIG9uZSBhcnJheSAqLwotI2RlZmluZQlBdXRvRGV0ZWN0ZWQJNwkJLyogYWRkZWQgYnkgYXV0by1kZXRlY3QgKi8KLSNkZWZpbmUgQmxvY2tlZAkJOAkJLyogQW4gZXJyb3Igb2NjdXJlZCBvbiBhbiBleHRlcm5hbGx5Ci0JCQkJCSAqIG1hbmFnZWQgYXJyYXksIGRvbid0IGFsbG93IHdyaXRlcwotCQkJCQkgKiB1bnRpbCBpdCBpcyBjbGVhcmVkICovCi0jZGVmaW5lIFN0YXRlQ2hhbmdlZAk5CQkvKiBGYXVsdHkgb3IgQmxvY2tlZCBoYXMgY2hhbmdlZCBkdXJpbmcKLQkJCQkJICogaW50ZXJydXB0LCBzbyBpdCBuZWVkcyB0byBiZQotCQkJCQkgKiBub3RpZmllZCBieSB0aGUgdGhyZWFkICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgYmxvY2tlZF93YWl0OwotCi0JaW50IGRlc2NfbnI7CQkJLyogZGVzY3JpcHRvciBpbmRleCBpbiB0aGUgc3VwZXJibG9jayAqLwotCWludCByYWlkX2Rpc2s7CQkJLyogcm9sZSBvZiBkZXZpY2UgaW4gYXJyYXkgKi8KLQlpbnQgc2F2ZWRfcmFpZF9kaXNrOwkJLyogcm9sZSB0aGF0IGRldmljZSB1c2VkIHRvIGhhdmUgaW4gdGhlCi0JCQkJCSAqIGFycmF5IGFuZCBjb3VsZCBhZ2FpbiBpZiB3ZSBkaWQgYSBwYXJ0aWFsCi0JCQkJCSAqIHJlc3luYyBmcm9tIHRoZSBiaXRtYXAKLQkJCQkJICovCi0Jc2VjdG9yX3QJcmVjb3Zlcnlfb2Zmc2V0Oy8qIElmIHRoaXMgZGV2aWNlIGhhcyBiZWVuIHBhcnRpYWxseQotCQkJCQkgKiByZWNvdmVyZWQsIHRoaXMgaXMgd2hlcmUgd2Ugd2VyZQotCQkJCQkgKiB1cCB0by4KLQkJCQkJICovCi0KLQlhdG9taWNfdAlucl9wZW5kaW5nOwkvKiBudW1iZXIgb2YgcGVuZGluZyByZXF1ZXN0cy4KLQkJCQkJICogb25seSBtYWludGFpbmVkIGZvciBhcnJheXMgdGhhdAotCQkJCQkgKiBzdXBwb3J0IGhvdCByZW1vdmFsCi0JCQkJCSAqLwotCWF0b21pY190CXJlYWRfZXJyb3JzOwkvKiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVhZCBlcnJvcnMgdGhhdAotCQkJCQkgKiB3ZSBoYXZlIHRyaWVkIHRvIGlnbm9yZS4KLQkJCQkJICovCi0JYXRvbWljX3QJY29ycmVjdGVkX2Vycm9yczsgLyogbnVtYmVyIG9mIGNvcnJlY3RlZCByZWFkIGVycm9ycywKLQkJCQkJICAgKiBmb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSBhbmQgc3RvcmluZwotCQkJCQkgICAqIGluIHN1cGVyYmxvY2suCi0JCQkJCSAgICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IGRlbF93b3JrOwkvKiB1c2VkIGZvciBkZWxheWVkIHN5c2ZzIHJlbW92YWwgKi8KLQotCXN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX3N0YXRlOyAvKiBoYW5kbGUgZm9yICdzdGF0ZScKLQkJCQkJICAgKiBzeXNmcyBlbnRyeSAqLwotfTsKLQotc3RydWN0IG1kZGV2X3MKLXsKLQl2b2lkCQkJCSpwcml2YXRlOwotCXN0cnVjdCBtZGtfcGVyc29uYWxpdHkJCSpwZXJzOwotCWRldl90CQkJCXVuaXQ7Ci0JaW50CQkJCW1kX21pbm9yOwotCXN0cnVjdCBsaXN0X2hlYWQgCQlkaXNrczsKLQl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7Ci0jZGVmaW5lIE1EX0NIQU5HRV9ERVZTCTAJLyogU29tZSBkZXZpY2Ugc3RhdHVzIGhhcyBjaGFuZ2VkICovCi0jZGVmaW5lIE1EX0NIQU5HRV9DTEVBTiAxCS8qIHRyYW5zaXRpb24gdG8gb3IgZnJvbSAnY2xlYW4nICovCi0jZGVmaW5lIE1EX0NIQU5HRV9QRU5ESU5HIDIJLyogc3VwZXJibG9jayB1cGRhdGUgaW4gcHJvZ3Jlc3MgKi8KLQotCWludAkJCQlybzsKLQotCXN0cnVjdCBnZW5kaXNrCQkJKmdlbmRpc2s7Ci0KLQlzdHJ1Y3Qga29iamVjdAkJCWtvYmo7Ci0JaW50CQkJCWhvbGRfYWN0aXZlOwotI2RlZmluZQlVTlRJTF9JT0NUTAkxCi0jZGVmaW5lCVVOVElMX1NUT1AJMgotCi0JLyogU3VwZXJibG9jayBpbmZvcm1hdGlvbiAqLwotCWludAkJCQltYWpvcl92ZXJzaW9uLAotCQkJCQltaW5vcl92ZXJzaW9uLAotCQkJCQlwYXRjaF92ZXJzaW9uOwotCWludAkJCQlwZXJzaXN0ZW50OwotCWludCAJCQkJZXh0ZXJuYWw7CS8qIG1ldGFkYXRhIGlzCi0JCQkJCQkJICogbWFuYWdlZCBleHRlcm5hbGx5ICovCi0JY2hhcgkJCQltZXRhZGF0YV90eXBlWzE3XTsgLyogZXh0ZXJuYWxseSBzZXQqLwotCWludAkJCQljaHVua19zaXplOwotCXRpbWVfdAkJCQljdGltZSwgdXRpbWU7Ci0JaW50CQkJCWxldmVsLCBsYXlvdXQ7Ci0JY2hhcgkJCQljbGV2ZWxbMTZdOwotCWludAkJCQlyYWlkX2Rpc2tzOwotCWludAkJCQltYXhfZGlza3M7Ci0Jc2VjdG9yX3QJCQlzaXplOyAvKiB1c2VkIHNpemUgb2YgY29tcG9uZW50IGRldmljZXMgKi8KLQlzZWN0b3JfdAkJCWFycmF5X3NlY3RvcnM7IC8qIGV4cG9ydGVkIGFycmF5IHNpemUgKi8KLQlfX3U2NAkJCQlldmVudHM7Ci0KLQljaGFyCQkJCXV1aWRbMTZdOwotCi0JLyogSWYgdGhlIGFycmF5IGlzIGJlaW5nIHJlc2hhcGVkLCB3ZSBuZWVkIHRvIHJlY29yZCB0aGUKLQkgKiBuZXcgc2hhcGUgYW5kIGFuIGluZGljYXRpb24gb2Ygd2hlcmUgd2UgYXJlIHVwIHRvLgotCSAqIFRoaXMgaXMgd3JpdHRlbiB0byB0aGUgc3VwZXJibG9jay4KLQkgKiBJZiByZXNoYXBlX3Bvc2l0aW9uIGlzIE1heFNlY3RvciwgdGhlbiBubyByZXNoYXBlIGlzIGhhcHBlbmluZyAoeWV0KS4KLQkgKi8KLQlzZWN0b3JfdAkJCXJlc2hhcGVfcG9zaXRpb247Ci0JaW50CQkJCWRlbHRhX2Rpc2tzLCBuZXdfbGV2ZWwsIG5ld19sYXlvdXQsIG5ld19jaHVuazsKLQotCXN0cnVjdCBtZGtfdGhyZWFkX3MJCSp0aHJlYWQ7CS8qIG1hbmFnZW1lbnQgdGhyZWFkICovCi0Jc3RydWN0IG1ka190aHJlYWRfcwkJKnN5bmNfdGhyZWFkOwkvKiBkb2luZyByZXN5bmMgb3IgcmVjb25zdHJ1Y3QgKi8KLQlzZWN0b3JfdAkJCWN1cnJfcmVzeW5jOwkvKiBsYXN0IGJsb2NrIHNjaGVkdWxlZCAqLwotCXVuc2lnbmVkIGxvbmcJCQlyZXN5bmNfbWFyazsJLyogYSByZWNlbnQgdGltZXN0YW1wICovCi0Jc2VjdG9yX3QJCQlyZXN5bmNfbWFya19jbnQ7LyogYmxvY2tzIHdyaXR0ZW4gYXQgcmVzeW5jX21hcmsgKi8KLQlzZWN0b3JfdAkJCWN1cnJfbWFya19jbnQ7IC8qIGJsb2NrcyBzY2hlZHVsZWQgbm93ICovCi0KLQlzZWN0b3JfdAkJCXJlc3luY19tYXhfc2VjdG9yczsgLyogbWF5IGJlIHNldCBieSBwZXJzb25hbGl0eSAqLwotCi0Jc2VjdG9yX3QJCQlyZXN5bmNfbWlzbWF0Y2hlczsgLyogY291bnQgb2Ygc2VjdG9ycyB3aGVyZQotCQkJCQkJCSAgICAqIHBhcml0eS9yZXBsaWNhIG1pc21hdGNoIGZvdW5kCi0JCQkJCQkJICAgICovCi0KLQkvKiBhbGxvdyB1c2VyLXNwYWNlIHRvIHJlcXVlc3Qgc3VzcGVuc2lvbiBvZiBJTyB0byByZWdpb25zIG9mIHRoZSBhcnJheSAqLwotCXNlY3Rvcl90CQkJc3VzcGVuZF9sbzsKLQlzZWN0b3JfdAkJCXN1c3BlbmRfaGk7Ci0JLyogaWYgemVybywgdXNlIHRoZSBzeXN0ZW0td2lkZSBkZWZhdWx0ICovCi0JaW50CQkJCXN5bmNfc3BlZWRfbWluOwotCWludAkJCQlzeW5jX3NwZWVkX21heDsKLQotCS8qIHJlc3luYyBldmVuIHRob3VnaCB0aGUgc2FtZSBkaXNrcyBhcmUgc2hhcmVkIGFtb25nIG1kLWRldmljZXMgKi8KLQlpbnQJCQkJcGFyYWxsZWxfcmVzeW5jOwotCi0JaW50CQkJCW9rX3N0YXJ0X2RlZ3JhZGVkOwotCS8qIHJlY292ZXJ5L3Jlc3luYyBmbGFncyAKLQkgKiBORUVERUQ6ICAgd2UgbWlnaHQgbmVlZCB0byBzdGFydCBhIHJlc3luYy9yZWNvdmVyCi0JICogUlVOTklORzogIGEgdGhyZWFkIGlzIHJ1bm5pbmcsIG9yIGFib3V0IHRvIGJlIHN0YXJ0ZWQKLQkgKiBTWU5DOiAgICAgYWN0dWFsbHkgZG9pbmcgYSByZXN5bmMsIG5vdCBhIHJlY292ZXJ5Ci0JICogUkVDT1ZFUjogIGRvaW5nIHJlY292ZXJ5LCBvciBuZWVkIHRvIHRyeSBpdC4KLQkgKiBJTlRSOiAgICAgcmVzeW5jIG5lZWRzIHRvIGJlIGFib3J0ZWQgZm9yIHNvbWUgcmVhc29uCi0JICogRE9ORTogICAgIHRocmVhZCBpcyBkb25lIGFuZCBpcyB3YWl0aW5nIHRvIGJlIHJlYXBlZAotCSAqIFJFUVVFU1Q6ICB1c2VyLXNwYWNlIGhhcyByZXF1ZXN0ZWQgYSBzeW5jICh1c2VkIHdpdGggU1lOQykKLQkgKiBDSEVDSzogICAgdXNlci1zcGFjZSByZXF1ZXN0IGZvciBmb3IgY2hlY2stb25seSwgbm8gcmVwYWlyCi0JICogUkVTSEFQRTogIEEgcmVzaGFwZSBpcyBoYXBwZW5pbmcKLQkgKgotCSAqIElmIG5laXRoZXIgU1lOQyBvciBSRVNIQVBFIGFyZSBzZXQsIHRoZW4gaXQgaXMgYSByZWNvdmVyeS4KLQkgKi8KLSNkZWZpbmUJTURfUkVDT1ZFUllfUlVOTklORwkwCi0jZGVmaW5lCU1EX1JFQ09WRVJZX1NZTkMJMQotI2RlZmluZQlNRF9SRUNPVkVSWV9SRUNPVkVSCTIKLSNkZWZpbmUJTURfUkVDT1ZFUllfSU5UUgkzCi0jZGVmaW5lCU1EX1JFQ09WRVJZX0RPTkUJNAotI2RlZmluZQlNRF9SRUNPVkVSWV9ORUVERUQJNQotI2RlZmluZQlNRF9SRUNPVkVSWV9SRVFVRVNURUQJNgotI2RlZmluZQlNRF9SRUNPVkVSWV9DSEVDSwk3Ci0jZGVmaW5lIE1EX1JFQ09WRVJZX1JFU0hBUEUJOAotI2RlZmluZQlNRF9SRUNPVkVSWV9GUk9aRU4JOQotCi0JdW5zaWduZWQgbG9uZwkJCXJlY292ZXJ5OwotCWludAkJCQlyZWNvdmVyeV9kaXNhYmxlZDsgLyogaWYgd2UgZGV0ZWN0IHRoYXQgcmVjb3ZlcnkKLQkJCQkJCQkgICAgKiB3aWxsIGFsd2F5cyBmYWlsLCBzZXQgdGhpcwotCQkJCQkJCSAgICAqIHNvIHdlIGRvbid0IGxvb3AgdHJ5aW5nICovCi0KLQlpbnQJCQkJaW5fc3luYzsJLyoga25vdyB0byBub3QgbmVlZCByZXN5bmMgKi8KLQlzdHJ1Y3QgbXV0ZXgJCQlyZWNvbmZpZ19tdXRleDsKLQlhdG9taWNfdAkJCWFjdGl2ZTsJCS8qIGdlbmVyYWwgcmVmY291bnQgKi8KLQlhdG9taWNfdAkJCW9wZW5lcnM7CS8qIG51bWJlciBvZiBhY3RpdmUgb3BlbnMgKi8KLQotCWludAkJCQljaGFuZ2VkOwkvKiB0cnVlIGlmIHdlIG1pZ2h0IG5lZWQgdG8gcmVyZWFkIHBhcnRpdGlvbiBpbmZvICovCi0JaW50CQkJCWRlZ3JhZGVkOwkvKiB3aGV0aGVyIG1kIHNob3VsZCBjb25zaWRlcgotCQkJCQkJCSAqIGFkZGluZyBhIHNwYXJlCi0JCQkJCQkJICovCi0JaW50CQkJCWJhcnJpZXJzX3dvcms7CS8qIGluaXRpYWxpc2VkIHRvIHRydWUsIGNsZWFyZWQgYXMgc29vbgotCQkJCQkJCSAqIGFzIGEgYmFycmllciByZXF1ZXN0IHRvIHNsYXZlCi0JCQkJCQkJICogZmFpbHMuICBPbmx5IHN1cHBvcnRlZAotCQkJCQkJCSAqLwotCXN0cnVjdCBiaW8JCQkqYmlvbGlzdDsgCS8qIGJpb3MgdGhhdCBuZWVkIHRvIGJlIHJldHJpZWQKLQkJCQkJCQkgKiBiZWNhdXNlIEJJT19SV19CQVJSSUVSIGlzIG5vdCBzdXBwb3J0ZWQKLQkJCQkJCQkgKi8KLQotCWF0b21pY190CQkJcmVjb3ZlcnlfYWN0aXZlOyAvKiBibG9ja3Mgc2NoZWR1bGVkLCBidXQgbm90IHdyaXR0ZW4gKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdAkJcmVjb3Zlcnlfd2FpdDsKLQlzZWN0b3JfdAkJCXJlY292ZXJ5X2NwOwotCXNlY3Rvcl90CQkJcmVzeW5jX21pbjsJLyogdXNlciByZXF1ZXN0ZWQgc3luYwotCQkJCQkJCSAqIHN0YXJ0cyBoZXJlICovCi0Jc2VjdG9yX3QJCQlyZXN5bmNfbWF4OwkvKiByZXN5bmMgc2hvdWxkIHBhdXNlCi0JCQkJCQkJICogd2hlbiBpdCBnZXRzIGhlcmUgKi8KLQotCXN0cnVjdCBzeXNmc19kaXJlbnQJCSpzeXNmc19zdGF0ZTsJLyogaGFuZGxlIGZvciAnYXJyYXlfc3RhdGUnCi0JCQkJCQkJICogZmlsZSBpbiBzeXNmcy4KLQkJCQkJCQkgKi8KLQlzdHJ1Y3Qgc3lzZnNfZGlyZW50CQkqc3lzZnNfYWN0aW9uOyAgLyogaGFuZGxlIGZvciAnc3luY19hY3Rpb24nICovCi0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVsX3dvcms7CS8qIHVzZWQgZm9yIGRlbGF5ZWQgc3lzZnMgcmVtb3ZhbCAqLwotCi0Jc3BpbmxvY2tfdAkJCXdyaXRlX2xvY2s7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJCXNiX3dhaXQ7CS8qIGZvciB3YWl0aW5nIG9uIHN1cGVyYmxvY2sgdXBkYXRlcyAqLwotCWF0b21pY190CQkJcGVuZGluZ193cml0ZXM7CS8qIG51bWJlciBvZiBhY3RpdmUgc3VwZXJibG9jayB3cml0ZXMgKi8KLQotCXVuc2lnbmVkIGludAkJCXNhZmVtb2RlOwkvKiBpZiBzZXQsIHVwZGF0ZSAiY2xlYW4iIHN1cGVyYmxvY2sKLQkJCQkJCQkgKiB3aGVuIG5vIHdyaXRlcyBwZW5kaW5nLgotCQkJCQkJCSAqLyAKLQl1bnNpZ25lZCBpbnQJCQlzYWZlbW9kZV9kZWxheTsKLQlzdHJ1Y3QgdGltZXJfbGlzdAkJc2FmZW1vZGVfdGltZXI7Ci0JYXRvbWljX3QJCQl3cml0ZXNfcGVuZGluZzsgCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUJCSpxdWV1ZTsJLyogZm9yIHBsdWdnaW5nIC4uLiAqLwotCi0JYXRvbWljX3QgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9iZWhpbmQ7IC8qIG91dHN0YW5kaW5nIGFzeW5jIElPICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBtYXhfd3JpdGVfYmVoaW5kOyAvKiAwID0gc3luYyAqLwotCi0Jc3RydWN0IGJpdG1hcCAgICAgICAgICAgICAgICAgICAqYml0bWFwOyAvKiB0aGUgYml0bWFwIGZvciB0aGUgZGV2aWNlICovCi0Jc3RydWN0IGZpbGUJCQkqYml0bWFwX2ZpbGU7IC8qIHRoZSBiaXRtYXAgZmlsZSAqLwotCWxvbmcJCQkJYml0bWFwX29mZnNldDsgLyogb2Zmc2V0IGZyb20gc3VwZXJibG9jayBvZgotCQkJCQkJCSogc3RhcnQgb2YgYml0bWFwLiBNYXkgYmUKLQkJCQkJCQkqIG5lZ2F0aXZlLCBidXQgbm90ICcwJwotCQkJCQkJCSovCi0JbG9uZwkJCQlkZWZhdWx0X2JpdG1hcF9vZmZzZXQ7IC8qIHRoaXMgaXMgdGhlIG9mZnNldCB0byB1c2Ugd2hlbgotCQkJCQkJCQkqIGhvdC1hZGRpbmcgYSBiaXRtYXAuICBJdCBzaG91bGQKLQkJCQkJCQkJKiBldmVudHVhbGx5IGJlIHNldHRhYmxlIGJ5IHN5c2ZzLgotCQkJCQkJCQkqLwotCi0Jc3RydWN0IGxpc3RfaGVhZAkJYWxsX21kZGV2czsKLX07Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHJkZXZfZGVjX3BlbmRpbmcobWRrX3JkZXZfdCAqcmRldiwgbWRkZXZfdCAqbWRkZXYpCi17Ci0JaW50IGZhdWx0eSA9IHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmRldi0+bnJfcGVuZGluZykgJiYgZmF1bHR5KQotCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtZF9zeW5jX2FjY3Qoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBucl9zZWN0b3JzKQotewotICAgICAgICBhdG9taWNfYWRkKG5yX3NlY3RvcnMsICZiZGV2LT5iZF9jb250YWlucy0+YmRfZGlzay0+c3luY19pbyk7Ci19Ci0KLXN0cnVjdCBtZGtfcGVyc29uYWxpdHkKLXsKLQljaGFyICpuYW1lOwotCWludCBsZXZlbDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JaW50ICgqbWFrZV9yZXF1ZXN0KShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKTsKLQlpbnQgKCpydW4pKG1kZGV2X3QgKm1kZGV2KTsKLQlpbnQgKCpzdG9wKShtZGRldl90ICptZGRldik7Ci0Jdm9pZCAoKnN0YXR1cykoc3RydWN0IHNlcV9maWxlICpzZXEsIG1kZGV2X3QgKm1kZGV2KTsKLQkvKiBlcnJvcl9oYW5kbGVyIG11c3Qgc2V0IC0+ZmF1bHR5IGFuZCBjbGVhciAtPmluX3N5bmMKLQkgKiBpZiBhcHByb3ByaWF0ZSwgYW5kIHNob3VsZCBhYm9ydCByZWNvdmVyeSBpZiBuZWVkZWQgCi0JICovCi0Jdm9pZCAoKmVycm9yX2hhbmRsZXIpKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKLQlpbnQgKCpob3RfYWRkX2Rpc2spIChtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7Ci0JaW50ICgqaG90X3JlbW92ZV9kaXNrKSAobWRkZXZfdCAqbWRkZXYsIGludCBudW1iZXIpOwotCWludCAoKnNwYXJlX2FjdGl2ZSkgKG1kZGV2X3QgKm1kZGV2KTsKLQlzZWN0b3JfdCAoKnN5bmNfcmVxdWVzdCkobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3Rvcl9uciwgaW50ICpza2lwcGVkLCBpbnQgZ29fZmFzdGVyKTsKLQlpbnQgKCpyZXNpemUpIChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycyk7Ci0JaW50ICgqY2hlY2tfcmVzaGFwZSkgKG1kZGV2X3QgKm1kZGV2KTsKLQlpbnQgKCpzdGFydF9yZXNoYXBlKSAobWRkZXZfdCAqbWRkZXYpOwotCWludCAoKnJlY29uZmlnKSAobWRkZXZfdCAqbWRkZXYsIGludCBsYXlvdXQsIGludCBjaHVua19zaXplKTsKLQkvKiBxdWllc2NlIG1vdmVzIGJldHdlZW4gcXVpZXNjZW5jZSBzdGF0ZXMKLQkgKiAwIC0gZnVsbHkgYWN0aXZlCi0JICogMSAtIG5vIG5ldyByZXF1ZXN0cyBhbGxvd2VkCi0JICogb3RoZXJzIC0gcmVzZXJ2ZWQKLQkgKi8KLQl2b2lkICgqcXVpZXNjZSkgKG1kZGV2X3QgKm1kZGV2LCBpbnQgc3RhdGUpOwotfTsKLQotCi1zdHJ1Y3QgbWRfc3lzZnNfZW50cnkgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykobWRkZXZfdCAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkobWRkZXZfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Ci19OwotCi0KLXN0YXRpYyBpbmxpbmUgY2hhciAqIG1kbmFtZSAobWRkZXZfdCAqIG1kZGV2KQotewotCXJldHVybiBtZGRldi0+Z2VuZGlzayA/IG1kZGV2LT5nZW5kaXNrLT5kaXNrX25hbWUgOiAibWRYIjsKLX0KLQotLyoKLSAqIGl0ZXJhdGVzIHRocm91Z2ggc29tZSByZGV2IHJpbmdsaXN0LiBJdCdzIHNhZmUgdG8gcmVtb3ZlIHRoZQotICogY3VycmVudCAncmRldicuIERvbnQgdG91Y2ggJ3RtcCcgdGhvdWdoLgotICovCi0jZGVmaW5lIHJkZXZfZm9yX2VhY2hfbGlzdChyZGV2LCB0bXAsIGhlYWQpCQkJCVwKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmRldiwgdG1wLCBoZWFkLCBzYW1lX3NldCkKLQotLyoKLSAqIGl0ZXJhdGVzIHRocm91Z2ggdGhlICdzYW1lIGFycmF5IGRpc2tzJyByaW5nbGlzdAotICovCi0jZGVmaW5lIHJkZXZfZm9yX2VhY2gocmRldiwgdG1wLCBtZGRldikJCQkJXAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZGV2LCB0bXAsICYoKG1kZGV2KS0+ZGlza3MpLCBzYW1lX3NldCkKLQotI2RlZmluZSByZGV2X2Zvcl9lYWNoX3JjdShyZGV2LCBtZGRldikJCQkJXAotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsICYoKG1kZGV2KS0+ZGlza3MpLCBzYW1lX3NldCkKLQotdHlwZWRlZiBzdHJ1Y3QgbWRrX3RocmVhZF9zIHsKLQl2b2lkCQkJKCpydW4pIChtZGRldl90ICptZGRldik7Ci0JbWRkZXZfdAkJCSptZGRldjsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3cXVldWU7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgZmxhZ3M7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CSp0c2s7Ci0JdW5zaWduZWQgbG9uZwkJdGltZW91dDsKLX0gbWRrX3RocmVhZF90OwotCi0jZGVmaW5lIFRIUkVBRF9XQUtFVVAgIDAKLQotI2RlZmluZSBfX3dhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAJCVwKLWRvIHsJCQkJCQkJCQlcCi0Jd2FpdF9xdWV1ZV90IF9fd2FpdDsJCQkJCQlcCi0JaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7CQkJCVwKLQkJCQkJCQkJCVwKLQlhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQkJXAotCWZvciAoOzspIHsJCQkJCQkJXAotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CQlcCi0JCWlmIChjb25kaXRpb24pCQkJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQlzcGluX3VubG9ja19pcnEoJmxvY2spOwkJCQkJXAotCQljbWQ7CQkJCQkJCVwKLQkJc2NoZWR1bGUoKTsJCQkJCQlcCi0JCXNwaW5fbG9ja19pcnEoJmxvY2spOwkJCQkJXAotCX0JCQkJCQkJCVwKLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCQkJCVwKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWlmIChjb25kaXRpb24pCSAJCQkJCQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JX193YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCk7CQlcCi19IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2FmZV9wdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcCkKLXsKLQlpZiAocCkgcHV0X3BhZ2UocCk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgKi8KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3UuaAppbmRleCA3MTkyMDM1Li5mYjFhYmIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF91LmgKQEAgLTE1LDYgKzE1LDI0IEBACiAjaWZuZGVmIF9NRF9VX0gKICNkZWZpbmUgX01EX1VfSAogCisvKgorICogRGlmZmVyZW50IG1ham9yIHZlcnNpb25zIGFyZSBub3QgY29tcGF0aWJsZS4KKyAqIERpZmZlcmVudCBtaW5vciB2ZXJzaW9ucyBhcmUgb25seSBkb3dud2FyZCBjb21wYXRpYmxlLgorICogRGlmZmVyZW50IHBhdGNobGV2ZWwgdmVyc2lvbnMgYXJlIGRvd253YXJkIGFuZCB1cHdhcmQgY29tcGF0aWJsZS4KKyAqLworI2RlZmluZSBNRF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTURfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICA5MAorLyoKKyAqIE1EX1BBVENITEVWRUxfVkVSU0lPTiBpbmRpY2F0ZXMga2VybmVsIGZ1bmN0aW9uYWxpdHkuCisgKiA+PTEgbWVhbnMgZGlmZmVyZW50IHN1cGVyYmxvY2sgZm9ybWF0cyBhcmUgc2VsZWN0YWJsZSB1c2luZyBTRVRfQVJSQVlfSU5GTworICogICAgIGFuZCBtYWpvcl92ZXJzaW9uL21pbm9yX3ZlcnNpb24gYWNjb3JkaW5nbHkKKyAqID49MiBtZWFucyB0aGF0IEludGVybmFsIGJpdG1hcHMgYXJlIHN1cHBvcnRlZCBieSBzZXR0aW5nIE1EX1NCX0JJVE1BUF9QUkVTRU5UCisgKiAgICAgaW4gdGhlIHN1cGVyIHN0YXR1cyBieXRlCisgKiA+PTMgbWVhbnMgdGhhdCBiaXRtYXAgc3VwZXJibG9jayB2ZXJzaW9uIDQgaXMgc3VwcG9ydGVkLCB3aGljaCB1c2VzCisgKiAgICAgbGl0dGxlLWVuZGluZyByZXByZXNlbnRhdGlvbiByYXRoZXIgdGhhbiBob3N0LWVuZGlhbgorICovCisjZGVmaW5lIE1EX1BBVENITEVWRUxfVkVSU0lPTiAgICAgICAgICAgMworCiAvKiBpb2N0bHMgKi8KIAogLyogc3RhdHVzICovCkBAIC00Niw2ICs2NCwxMiBAQAogI2RlZmluZSBTVE9QX0FSUkFZX1JPCQlfSU8gKE1EX01BSk9SLCAweDMzKQogI2RlZmluZSBSRVNUQVJUX0FSUkFZX1JXCV9JTyAoTURfTUFKT1IsIDB4MzQpCiAKKy8qIDYzIHBhcnRpdGlvbnMgd2l0aCB0aGUgYWx0ZXJuYXRlIG1ham9yIG51bWJlciAobWRwKSAqLworI2RlZmluZSBNZHBNaW5vclNoaWZ0IDYKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gaW50IG1kcF9tYWpvcjsKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCBtZHVfdmVyc2lvbl9zIHsKIAlpbnQgbWFqb3I7CiAJaW50IG1pbm9yOwpAQCAtODUsNiArMTA5LDE3IEBACiAKIH0gbWR1X2FycmF5X2luZm9fdDsKIAorLyogbm9uLW9idmlvdXMgdmFsdWVzIGZvciAnbGV2ZWwnICovCisjZGVmaW5lCUxFVkVMX01VTFRJUEFUSAkJKC00KQorI2RlZmluZQlMRVZFTF9MSU5FQVIJCSgtMSkKKyNkZWZpbmUJTEVWRUxfRkFVTFRZCQkoLTUpCisKKy8qIHdlIG5lZWQgYSB2YWx1ZSBmb3IgJ25vIGxldmVsIHNwZWNpZmllZCcgYW5kIDAKKyAqIG1lYW5zICdyYWlkMCcsIHNvIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UuICBUaGlzIGlzCisgKiBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKKyAqLworI2RlZmluZQlMRVZFTF9OT05FCQkoLTEwMDAwMDApCisKIHR5cGVkZWYgc3RydWN0IG1kdV9kaXNrX2luZm9fcyB7CiAJLyoKIAkgKiBjb25maWd1cmF0aW9uL3N0YXR1cyBvZiBvbmUgcGFydGljdWxhciBkaXNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbXVsdGlwYXRoLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbXVsdGlwYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNTNmYzEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL211bHRpcGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotI2lmbmRlZiBfTVVMVElQQVRIX0gKLSNkZWZpbmUgX01VTFRJUEFUSF9ICi0KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0KLXN0cnVjdCBtdWx0aXBhdGhfaW5mbyB7Ci0JbWRrX3JkZXZfdAkqcmRldjsKLX07Ci0KLXN0cnVjdCBtdWx0aXBhdGhfcHJpdmF0ZV9kYXRhIHsKLQltZGRldl90CQkJKm1kZGV2OwotCXN0cnVjdCBtdWx0aXBhdGhfaW5mbwkqbXVsdGlwYXRoczsKLQlpbnQJCQlyYWlkX2Rpc2tzOwotCWludAkJCXdvcmtpbmdfZGlza3M7Ci0Jc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OwotCi0JbWVtcG9vbF90CQkqcG9vbDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IG11bHRpcGF0aF9wcml2YXRlX2RhdGEgbXVsdGlwYXRoX2NvbmZfdDsKLQotLyoKLSAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCi0gKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgotICovCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgobXVsdGlwYXRoX2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKLQotLyoKLSAqIHRoaXMgaXMgb3VyICdwcml2YXRlJyAnY29sbGVjdGl2ZScgTVVMVElQQVRIIGJ1ZmZlciBoZWFkLgotICogaXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBraW5kIG9mIElPIG9wZXJhdGlvbnMgd2VyZSBzdGFydGVkCi0gKiBmb3IgdGhpcyBNVUxUSVBBVEggb3BlcmF0aW9uLCBhbmQgYWJvdXQgdGhlaXIgc3RhdHVzOgotICovCi0KLXN0cnVjdCBtdWx0aXBhdGhfYmggewotCW1kZGV2X3QJCQkqbWRkZXY7Ci0Jc3RydWN0IGJpbwkJKm1hc3Rlcl9iaW87Ci0Jc3RydWN0IGJpbwkJYmlvOwotCWludAkJCXBhdGg7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OwotfTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3BxLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcHEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTI0ODBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL3BxLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qIC0qLSBsaW51eC1jIC0qLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKyAqCisgKiAgIENvcHlyaWdodCAyMDAzIEguIFBldGVyIEFudmluIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElOVVhfUkFJRF9SQUlENl9ICisjZGVmaW5lIExJTlVYX1JBSURfUkFJRDZfSAorCisjaWZkZWYgX19LRVJORUxfXworCisvKiBTZXQgdG8gMSB0byB1c2Uga2VybmVsLXdpZGUgZW1wdHlfemVyb19wYWdlICovCisjZGVmaW5lIFJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UgMAorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorCisvKiBXZSBuZWVkIGEgcHJlLXplcm9lZCBwYWdlLi4uIGlmIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBrZXJuZWwtcHJvdmlkZWQKKyAgIG9uZSBkZWZpbmUgaXQgaGVyZSAqLworI2lmIFJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UKKyMgZGVmaW5lIHJhaWQ2X2VtcHR5X3plcm9fcGFnZSBlbXB0eV96ZXJvX3BhZ2UKKyNlbHNlCitleHRlcm4gY29uc3QgY2hhciByYWlkNl9lbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFXTsKKyNlbmRpZgorCisjZWxzZSAvKiAhIF9fS0VSTkVMX18gKi8KKy8qIFVzZWQgZm9yIHRlc3RpbmcgaW4gdXNlciBzcGFjZSAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIE5vdCBzdGFuZGFyZCwgYnV0IGdsaWJjIGRlZmluZXMgaXQgKi8KKyNkZWZpbmUgQklUU19QRVJfTE9ORyBfX1dPUkRTSVpFCisKK3R5cGVkZWYgdWludDhfdCAgdTg7Cit0eXBlZGVmIHVpbnQxNl90IHUxNjsKK3R5cGVkZWYgdWludDMyX3QgdTMyOwordHlwZWRlZiB1aW50NjRfdCB1NjQ7CisKKyNpZm5kZWYgUEFHRV9TSVpFCisjIGRlZmluZSBQQUdFX1NJWkUgNDA5NgorI2VuZGlmCitleHRlcm4gY29uc3QgY2hhciByYWlkNl9lbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFXTsKKworI2RlZmluZSBfX2luaXQKKyNkZWZpbmUgX19leGl0CisjZGVmaW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX19hdHRyaWJ1dGVfXygoY29uc3QpKQorI2RlZmluZSBub2lubGluZSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCisKKyNkZWZpbmUgcHJlZW1wdF9lbmFibGUoKQorI2RlZmluZSBwcmVlbXB0X2Rpc2FibGUoKQorI2RlZmluZSBjcHVfaGFzX2ZlYXR1cmUoeCkgMQorI2RlZmluZSBlbmFibGVfa2VybmVsX2FsdGl2ZWMoKQorI2RlZmluZSBkaXNhYmxlX2tlcm5lbF9hbHRpdmVjKCkKKworI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bSkKKyNkZWZpbmUgTU9EVUxFX0xJQ0VOU0UobGljZW5jZSkKKyNkZWZpbmUgc3Vic3lzX2luaXRjYWxsKHgpCisjZGVmaW5lIG1vZHVsZV9leGl0KHgpCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBSb3V0aW5lIGNob2ljZXMgKi8KK3N0cnVjdCByYWlkNl9jYWxscyB7CisJdm9pZCAoKmdlbl9zeW5kcm9tZSkoaW50LCBzaXplX3QsIHZvaWQgKiopOworCWludCAgKCp2YWxpZCkodm9pZCk7CS8qIFJldHVybnMgMSBpZiB0aGlzIHJvdXRpbmUgc2V0IGlzIHVzYWJsZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIE5hbWUgb2YgdGhpcyByb3V0aW5lIHNldCAqLworCWludCBwcmVmZXI7CQkvKiBIYXMgc3BlY2lhbCBwZXJmb3JtYW5jZSBhdHRyaWJ1dGUgKi8KK307CisKKy8qIFNlbGVjdGVkIGFsZ29yaXRobSAqLworZXh0ZXJuIHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9jYWxsOworCisvKiBBbGdvcml0aG0gbGlzdCAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyAqIGNvbnN0IHJhaWQ2X2FsZ29zW107CitpbnQgcmFpZDZfc2VsZWN0X2FsZ28odm9pZCk7CisKKy8qIFJldHVybiB2YWx1ZXMgZnJvbSBjaGtfc3luZHJvbWUgKi8KKyNkZWZpbmUgUkFJRDZfT0sJMAorI2RlZmluZSBSQUlENl9QX0JBRAkxCisjZGVmaW5lIFJBSUQ2X1FfQkFECTIKKyNkZWZpbmUgUkFJRDZfUFFfQkFECTMKKworLyogR2Fsb2lzIGZpZWxkIHRhYmxlcyAqLworZXh0ZXJuIGNvbnN0IHU4IHJhaWQ2X2dmbXVsWzI1Nl1bMjU2XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKTsKK2V4dGVybiBjb25zdCB1OCByYWlkNl9nZmV4cFsyNTZdICAgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7CitleHRlcm4gY29uc3QgdTggcmFpZDZfZ2ZpbnZbMjU2XSAgICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOworZXh0ZXJuIGNvbnN0IHU4IHJhaWQ2X2dmZXhpWzI1Nl0gICAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKTsKKworLyogUmVjb3Zlcnkgcm91dGluZXMgKi8KK3ZvaWQgcmFpZDZfMmRhdGFfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQkgICAgICAgdm9pZCAqKnB0cnMpOwordm9pZCByYWlkNl9kYXRhcF9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCB2b2lkICoqcHRycyk7Cit2b2lkIHJhaWQ2X2R1YWxfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQkgICAgICB2b2lkICoqcHRycyk7CisKKy8qIFNvbWUgZGVmaW5pdGlvbnMgdG8gYWxsb3cgY29kZSB0byBiZSBjb21waWxlZCBmb3IgdGVzdGluZyBpbiB1c2Vyc3BhY2UgKi8KKyNpZm5kZWYgX19LRVJORUxfXworCisjIGRlZmluZSBqaWZmaWVzCXJhaWQ2X2ppZmZpZXMoKQorIyBkZWZpbmUgcHJpbnRrIAlwcmludGYKKyMgZGVmaW5lIEdGUF9LRVJORUwJMAorIyBkZWZpbmUgX19nZXRfZnJlZV9wYWdlcyh4LCB5KQkoKHVuc2lnbmVkIGxvbmcpbW1hcChOVUxMLCBQQUdFX1NJWkUgPDwgKHkpLCBcCisJCQkJCQkgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFLCAgIFwKKwkJCQkJCSAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUyxcCisJCQkJCQkgICAgIDAsIDApKQorIyBkZWZpbmUgZnJlZV9wYWdlcyh4LCB5KQltdW5tYXAoKHZvaWQgKikoeCksICh5KSpQQUdFX1NJWkUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZCkKK3sKKwkvKiBOb3RoaW5nICovCit9CisKKyN1bmRlZiAgSFoKKyNkZWZpbmUgSFogMTAwMAorc3RhdGljIGlubGluZSB1aW50MzJfdCByYWlkNl9qaWZmaWVzKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJcmV0dXJuIHR2LnR2X3NlYyoxMDAwICsgdHYudHZfdXNlYy8xMDAwOworfQorCisjZW5kaWYgLyogISBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBMSU5VWF9SQUlEX1JBSUQ2X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNDJhYTguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jaWZuZGVmIF9SQUlEMF9ICi0jZGVmaW5lIF9SQUlEMF9ICi0KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0KLXN0cnVjdCBzdHJpcF96b25lCi17Ci0Jc2VjdG9yX3Qgem9uZV9zdGFydDsJLyogWm9uZSBvZmZzZXQgaW4gbWRfZGV2IChpbiBzZWN0b3JzKSAqLwotCXNlY3Rvcl90IGRldl9zdGFydDsJLyogWm9uZSBvZmZzZXQgaW4gcmVhbCBkZXYgKGluIHNlY3RvcnMpICovCi0Jc2VjdG9yX3Qgc2VjdG9yczsJLyogWm9uZSBzaXplIGluIHNlY3RvcnMgKi8KLQlpbnQgbmJfZGV2OwkJLyogIyBvZiBkZXZpY2VzIGF0dGFjaGVkIHRvIHRoZSB6b25lICovCi0JbWRrX3JkZXZfdCAqKmRldjsJLyogRGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgem9uZSAqLwotfTsKLQotc3RydWN0IHJhaWQwX3ByaXZhdGVfZGF0YQotewotCXN0cnVjdCBzdHJpcF96b25lICoqaGFzaF90YWJsZTsgLyogVGFibGUgb2YgaW5kZXhlcyBpbnRvIHN0cmlwX3pvbmUgKi8KLQlzdHJ1Y3Qgc3RyaXBfem9uZSAqc3RyaXBfem9uZTsKLQltZGtfcmRldl90ICoqZGV2bGlzdDsgLyogbGlzdHMgb2YgcmRldnMsIHBvaW50ZWQgdG8gYnkgc3RyaXBfem9uZS0+ZGV2ICovCi0JaW50IG5yX3N0cmlwX3pvbmVzOwotCi0Jc2VjdG9yX3Qgc3BhY2luZzsKLQlpbnQgc2VjdG9yX3NoaWZ0OyAvKiBzaGlmdCB0aGlzIGJlZm9yZSBkaXZpZGUgYnkgc3BhY2luZyAqLwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcmFpZDBfcHJpdmF0ZV9kYXRhIHJhaWQwX2NvbmZfdDsKLQotI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKHJhaWQwX2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTliYTdjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLSNpZm5kZWYgX1JBSUQxX0gKLSNkZWZpbmUgX1JBSUQxX0gKLQotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgbWlycm9yX2luZm8gbWlycm9yX2luZm9fdDsKLQotc3RydWN0IG1pcnJvcl9pbmZvIHsKLQltZGtfcmRldl90CSpyZGV2OwotCXNlY3Rvcl90CWhlYWRfcG9zaXRpb247Ci19OwotCi0vKgotICogbWVtb3J5IHBvb2xzIG5lZWQgYSBwb2ludGVyIHRvIHRoZSBtZGRldiwgc28gdGhleSBjYW4gZm9yY2UgYW4gdW5wbHVnCi0gKiB3aGVuIG1lbW9yeSBpcyB0aWdodCwgYW5kIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBkcml2ZXMgdGhhdCB0aGUKLSAqIHBvb2wgd2FzIGFsbG9jYXRlZCBmb3IsIHNvIHRoZXkga25vdyBob3cgbXVjaCB0byBhbGxvY2F0ZSBhbmQgZnJlZS4KLSAqIG1kZGV2LT5yYWlkX2Rpc2tzIGNhbm5vdCBiZSB1c2VkLCBhcyBpdCBjYW4gY2hhbmdlIHdoaWxlIGEgcG9vbCBpcyBhY3RpdmUKLSAqIFRoZXNlIHR3byBkYXR1bXMgYXJlIHN0b3JlZCBpbiBhIGttYWxsb2NlZCBzdHJ1Y3QuCi0gKi8KLQotc3RydWN0IHBvb2xfaW5mbyB7Ci0JbWRkZXZfdCAqbWRkZXY7Ci0JaW50CXJhaWRfZGlza3M7Ci19OwotCi0KLXR5cGVkZWYgc3RydWN0IHIxYmlvX3MgcjFiaW9fdDsKLQotc3RydWN0IHIxX3ByaXZhdGVfZGF0YV9zIHsKLQltZGRldl90CQkJKm1kZGV2OwotCW1pcnJvcl9pbmZvX3QJCSptaXJyb3JzOwotCWludAkJCXJhaWRfZGlza3M7Ci0JaW50CQkJbGFzdF91c2VkOwotCXNlY3Rvcl90CQluZXh0X3NlcV9zZWN0OwotCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOwotCi0Jc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OwotCS8qIHF1ZXVlIHBlbmRpbmcgd3JpdGVzIGFuZCBzdWJtaXQgdGhlbSBvbiB1bnBsdWcgKi8KLQlzdHJ1Y3QgYmlvX2xpc3QJCXBlbmRpbmdfYmlvX2xpc3Q7Ci0JLyogcXVldWUgb2Ygd3JpdGVzIHRoYXQgaGF2ZSBiZWVuIHVucGx1Z2dlZCAqLwotCXN0cnVjdCBiaW9fbGlzdAkJZmx1c2hpbmdfYmlvX2xpc3Q7Ci0KLQkvKiBmb3IgdXNlIHdoZW4gc3luY2luZyBtaXJyb3JzOiAqLwotCi0Jc3BpbmxvY2tfdAkJcmVzeW5jX2xvY2s7Ci0JaW50CQkJbnJfcGVuZGluZzsKLQlpbnQJCQlucl93YWl0aW5nOwotCWludAkJCW5yX3F1ZXVlZDsKLQlpbnQJCQliYXJyaWVyOwotCXNlY3Rvcl90CQluZXh0X3Jlc3luYzsKLQlpbnQJCQlmdWxsc3luYzsgIC8qIHNldCB0byAxIGlmIGEgZnVsbCBzeW5jIGlzIG5lZWRlZCwKLQkJCQkJICAgICogKGZyZXNoIGRldmljZSBhZGRlZCkuCi0JCQkJCSAgICAqIENsZWFyZWQgd2hlbiBhIHN5bmMgY29tcGxldGVzLgotCQkJCQkgICAgKi8KLQotCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfYmFycmllcjsKLQotCXN0cnVjdCBwb29sX2luZm8JKnBvb2xpbmZvOwotCi0Jc3RydWN0IHBhZ2UJCSp0bXBwYWdlOwotCi0JbWVtcG9vbF90ICpyMWJpb19wb29sOwotCW1lbXBvb2xfdCAqcjFidWZfcG9vbDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHIxX3ByaXZhdGVfZGF0YV9zIGNvbmZfdDsKLQotLyoKLSAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCi0gKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgotICovCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgoY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQotCi0vKgotICogdGhpcyBpcyBvdXIgJ3ByaXZhdGUnIFJBSUQxIGJpby4KLSAqCi0gKiBpdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGtpbmQgb2YgSU8gb3BlcmF0aW9ucyB3ZXJlIHN0YXJ0ZWQKLSAqIGZvciB0aGlzIFJBSUQxIG9wZXJhdGlvbiwgYW5kIGFib3V0IHRoZWlyIHN0YXR1czoKLSAqLwotCi1zdHJ1Y3QgcjFiaW9fcyB7Ci0JYXRvbWljX3QJCXJlbWFpbmluZzsgLyogJ2hhdmUgd2UgZmluaXNoZWQnIGNvdW50LAotCQkJCQkgICAgKiB1c2VkIGZyb20gSVJRIGhhbmRsZXJzCi0JCQkJCSAgICAqLwotCWF0b21pY190CQliZWhpbmRfcmVtYWluaW5nOyAvKiBudW1iZXIgb2Ygd3JpdGUtYmVoaW5kIGlvcyByZW1haW5pbmcKLQkJCQkJCSAqIGluIHRoaXMgQmVoaW5kSU8gcmVxdWVzdAotCQkJCQkJICovCi0Jc2VjdG9yX3QJCXNlY3RvcjsKLQlpbnQJCQlzZWN0b3JzOwotCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwotCW1kZGV2X3QJCQkqbWRkZXY7Ci0JLyoKLQkgKiBvcmlnaW5hbCBiaW8gZ29pbmcgdG8gL2Rldi9tZHgKLQkgKi8KLQlzdHJ1Y3QgYmlvCQkqbWFzdGVyX2JpbzsKLQkvKgotCSAqIGlmIHRoZSBJTyBpcyBpbiBSRUFEIGRpcmVjdGlvbiwgdGhlbiB0aGlzIGlzIHdoZXJlIHdlIHJlYWQKLQkgKi8KLQlpbnQJCQlyZWFkX2Rpc2s7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7Ci0Jc3RydWN0IGJpdG1hcF91cGRhdGUJKmJpdG1hcF91cGRhdGU7Ci0JLyoKLQkgKiBpZiB0aGUgSU8gaXMgaW4gV1JJVEUgZGlyZWN0aW9uLCB0aGVuIG11bHRpcGxlIGJpb3MgYXJlIHVzZWQuCi0JICogV2UgY2hvb3NlIHRoZSBudW1iZXIgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQuCi0JICovCi0Jc3RydWN0IGJpbwkJKmJpb3NbMF07Ci0JLyogRE8gTk9UIFBVVCBBTlkgTkVXIEZJRUxEUyBIRVJFIC0gYmlvcyBhcnJheSBpcyBjb250aWd1b3VzbHkgYWxsb2NlZCovCi19OwotCi0vKiB3aGVuIHdlIGdldCBhIHJlYWQgZXJyb3Igb24gYSByZWFkLW9ubHkgYXJyYXksIHdlIHJlZGlyZWN0IHRvIGFub3RoZXIKLSAqIGRldmljZSB3aXRob3V0IGZhaWxpbmcgdGhlIGZpcnN0IGRldmljZSwgb3IgdHJ5aW5nIHRvIG92ZXItd3JpdGUgdG8KLSAqIGNvcnJlY3QgdGhlIHJlYWQgZXJyb3IuICBUbyBrZWVwIHRyYWNrIG9mIGJhZCBibG9ja3Mgb24gYSBwZXItYmlvCi0gKiBsZXZlbCwgd2Ugc3RvcmUgSU9fQkxPQ0tFRCBpbiB0aGUgYXBwcm9wcmlhdGUgJ2Jpb3MnIHBvaW50ZXIKLSAqLwotI2RlZmluZSBJT19CTE9DS0VEICgoc3RydWN0IGJpbyopMSkKLQotLyogYml0cyBmb3IgcjFiaW8uc3RhdGUgKi8KLSNkZWZpbmUJUjFCSU9fVXB0b2RhdGUJMAotI2RlZmluZQlSMUJJT19Jc1N5bmMJMQotI2RlZmluZQlSMUJJT19EZWdyYWRlZAkyCi0jZGVmaW5lCVIxQklPX0JlaGluZElPCTMKLSNkZWZpbmUJUjFCSU9fQmFycmllcgk0Ci0jZGVmaW5lIFIxQklPX0JhcnJpZXJSZXRyeSA1Ci0vKiBGb3Igd3JpdGUtYmVoaW5kIHJlcXVlc3RzLCB3ZSBjYWxsIGJpX2VuZF9pbyB3aGVuCi0gKiB0aGUgbGFzdCBub24td3JpdGUtYmVoaW5kIGRldmljZSBjb21wbGV0ZXMsIHByb3ZpZGluZwotICogYW55IHdyaXRlIHdhcyBzdWNjZXNzZnVsLiAgT3RoZXJ3aXNlIHdlIGNhbGwgd2hlbgotICogYW55IHdyaXRlLWJlaGluZCB3cml0ZSBzdWNjZWVkcywgb3RoZXJ3aXNlIHdlIGNhbGwKLSAqIHdpdGggZmFpbHVyZSB3aGVuIGxhc3Qgd3JpdGUgY29tcGxldGVzIChhbmQgYWxsIGZhaWxlZCkuCi0gKiBSZWNvcmQgdGhhdCBiaV9lbmRfaW8gd2FzIGNhbGxlZCB3aXRoIHRoaXMgZmxhZy4uLgotICovCi0jZGVmaW5lCVIxQklPX1JldHVybmVkIDYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEwLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MDkxY2YuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQxMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLSNpZm5kZWYgX1JBSUQxMF9ICi0jZGVmaW5lIF9SQUlEMTBfSAotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotCi10eXBlZGVmIHN0cnVjdCBtaXJyb3JfaW5mbyBtaXJyb3JfaW5mb190OwotCi1zdHJ1Y3QgbWlycm9yX2luZm8gewotCW1ka19yZGV2X3QJKnJkZXY7Ci0Jc2VjdG9yX3QJaGVhZF9wb3NpdGlvbjsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHIxMGJpb19zIHIxMGJpb190OwotCi1zdHJ1Y3QgcjEwX3ByaXZhdGVfZGF0YV9zIHsKLQltZGRldl90CQkJKm1kZGV2OwotCW1pcnJvcl9pbmZvX3QJCSptaXJyb3JzOwotCWludAkJCXJhaWRfZGlza3M7Ci0Jc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7Ci0KLQkvKiBnZW9tZXRyeSAqLwotCWludAkJCW5lYXJfY29waWVzOyAgLyogbnVtYmVyIG9mIGNvcGllcyBsYXllZCBvdXQgcmFpZDAgc3R5bGUgKi8KLQlpbnQgCQkJZmFyX2NvcGllczsgICAvKiBudW1iZXIgb2YgY29waWVzIGxheWVkIG91dAotCQkJCQkgICAgICAgKiBhdCBsYXJnZSBzdHJpZGVzIGFjcm9zcyBkcml2ZXMKLQkJCQkJICAgICAgICovCi0JaW50CQkJZmFyX29mZnNldDsgICAvKiBmYXJfY29waWVzIGFyZSBvZmZzZXQgYnkgMSBzdHJpcGUKLQkJCQkJICAgICAgICogaW5zdGVhZCBvZiBtYW55Ci0JCQkJCSAgICAgICAqLwotCWludAkJCWNvcGllczsJICAgICAgLyogbmVhcl9jb3BpZXMgKiBmYXJfY29waWVzLgotCQkJCQkgICAgICAgKiBtdXN0IGJlIDw9IHJhaWRfZGlza3MKLQkJCQkJICAgICAgICovCi0Jc2VjdG9yX3QJCXN0cmlkZTsJICAgICAgLyogZGlzdGFuY2UgYmV0d2VlbiBmYXIgY29waWVzLgotCQkJCQkgICAgICAgKiBUaGlzIGlzIHNpemUgLyBmYXJfY29waWVzIHVubGVzcwotCQkJCQkgICAgICAgKiBmYXJfb2Zmc2V0LCBpbiB3aGljaCBjYXNlIGl0IGlzCi0JCQkJCSAgICAgICAqIDEgc3RyaXBlLgotCQkJCQkgICAgICAgKi8KLQotCWludCBjaHVua19zaGlmdDsgLyogc2hpZnQgZnJvbSBjaHVua3MgdG8gc2VjdG9ycyAqLwotCXNlY3Rvcl90IGNodW5rX21hc2s7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7Ci0JLyogcXVldWUgcGVuZGluZyB3cml0ZXMgYW5kIHN1Ym1pdCB0aGVtIG9uIHVucGx1ZyAqLwotCXN0cnVjdCBiaW9fbGlzdAkJcGVuZGluZ19iaW9fbGlzdDsKLQotCi0Jc3BpbmxvY2tfdAkJcmVzeW5jX2xvY2s7Ci0JaW50IG5yX3BlbmRpbmc7Ci0JaW50IG5yX3dhaXRpbmc7Ci0JaW50IG5yX3F1ZXVlZDsKLQlpbnQgYmFycmllcjsKLQlzZWN0b3JfdAkJbmV4dF9yZXN5bmM7Ci0JaW50CQkJZnVsbHN5bmM7ICAvKiBzZXQgdG8gMSBpZiBhIGZ1bGwgc3luYyBpcyBuZWVkZWQsCi0JCQkJCSAgICAqIChmcmVzaCBkZXZpY2UgYWRkZWQpLgotCQkJCQkgICAgKiBDbGVhcmVkIHdoZW4gYSBzeW5jIGNvbXBsZXRlcy4KLQkJCQkJICAgICovCi0KLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2JhcnJpZXI7Ci0KLQltZW1wb29sX3QgKnIxMGJpb19wb29sOwotCW1lbXBvb2xfdCAqcjEwYnVmX3Bvb2w7Ci0Jc3RydWN0IHBhZ2UJCSp0bXBwYWdlOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcjEwX3ByaXZhdGVfZGF0YV9zIGNvbmZfdDsKLQotLyoKLSAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCi0gKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgotICovCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgoY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQotCi0vKgotICogdGhpcyBpcyBvdXIgJ3ByaXZhdGUnIFJBSUQxMCBiaW8uCi0gKgotICogaXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBraW5kIG9mIElPIG9wZXJhdGlvbnMgd2VyZSBzdGFydGVkCi0gKiBmb3IgdGhpcyBSQUlEMTAgb3BlcmF0aW9uLCBhbmQgYWJvdXQgdGhlaXIgc3RhdHVzOgotICovCi0KLXN0cnVjdCByMTBiaW9fcyB7Ci0JYXRvbWljX3QJCXJlbWFpbmluZzsgLyogJ2hhdmUgd2UgZmluaXNoZWQnIGNvdW50LAotCQkJCQkgICAgKiB1c2VkIGZyb20gSVJRIGhhbmRsZXJzCi0JCQkJCSAgICAqLwotCXNlY3Rvcl90CQlzZWN0b3I7CS8qIHZpcnR1YWwgc2VjdG9yIG51bWJlciAqLwotCWludAkJCXNlY3RvcnM7Ci0JdW5zaWduZWQgbG9uZwkJc3RhdGU7Ci0JbWRkZXZfdAkJCSptZGRldjsKLQkvKgotCSAqIG9yaWdpbmFsIGJpbyBnb2luZyB0byAvZGV2L21keAotCSAqLwotCXN0cnVjdCBiaW8JCSptYXN0ZXJfYmlvOwotCS8qCi0JICogaWYgdGhlIElPIGlzIGluIFJFQUQgZGlyZWN0aW9uLCB0aGVuIHRoaXMgaXMgd2hlcmUgd2UgcmVhZAotCSAqLwotCWludAkJCXJlYWRfc2xvdDsKLQotCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKLQkvKgotCSAqIGlmIHRoZSBJTyBpcyBpbiBXUklURSBkaXJlY3Rpb24sIHRoZW4gbXVsdGlwbGUgYmlvcyBhcmUgdXNlZCwKLQkgKiBvbmUgZm9yIGVhY2ggY29weS4KLQkgKiBXaGVuIHJlc3luY2luZyB3ZSBhbHNvIHVzZSBvbmUgZm9yIGVhY2ggY29weS4KLQkgKiBXaGVuIHJlY29uc3RydWN0aW5nLCB3ZSB1c2UgMiBiaW9zLCBvbmUgZm9yIHJlYWQsIG9uZSBmb3Igd3JpdGUuCi0JICogV2UgY2hvb3NlIHRoZSBudW1iZXIgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQuCi0JICovCi0Jc3RydWN0IHsKLQkJc3RydWN0IGJpbwkJKmJpbzsKLQkJc2VjdG9yX3QgYWRkcjsKLQkJaW50IGRldm51bTsKLQl9IGRldnNbMF07Ci19OwotCi0vKiB3aGVuIHdlIGdldCBhIHJlYWQgZXJyb3Igb24gYSByZWFkLW9ubHkgYXJyYXksIHdlIHJlZGlyZWN0IHRvIGFub3RoZXIKLSAqIGRldmljZSB3aXRob3V0IGZhaWxpbmcgdGhlIGZpcnN0IGRldmljZSwgb3IgdHJ5aW5nIHRvIG92ZXItd3JpdGUgdG8KLSAqIGNvcnJlY3QgdGhlIHJlYWQgZXJyb3IuICBUbyBrZWVwIHRyYWNrIG9mIGJhZCBibG9ja3Mgb24gYSBwZXItYmlvCi0gKiBsZXZlbCwgd2Ugc3RvcmUgSU9fQkxPQ0tFRCBpbiB0aGUgYXBwcm9wcmlhdGUgJ2Jpb3MnIHBvaW50ZXIKLSAqLwotI2RlZmluZSBJT19CTE9DS0VEICgoc3RydWN0IGJpbyopMSkKLQotLyogYml0cyBmb3IgcjEwYmlvLnN0YXRlICovCi0jZGVmaW5lCVIxMEJJT19VcHRvZGF0ZQkwCi0jZGVmaW5lCVIxMEJJT19Jc1N5bmMJMQotI2RlZmluZQlSMTBCSU9fSXNSZWNvdmVyIDIKLSNkZWZpbmUJUjEwQklPX0RlZ3JhZGVkIDMKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IyNjcyNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwMiArMCwwIEBACi0jaWZuZGVmIF9SQUlENV9ICi0jZGVmaW5lIF9SQUlENV9ICi0KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC94b3IuaD4KLQotLyoKLSAqCi0gKiBFYWNoIHN0cmlwZSBjb250YWlucyBvbmUgYnVmZmVyIHBlciBkaXNjLiAgRWFjaCBidWZmZXIgY2FuIGJlIGluCi0gKiBvbmUgb2YgYSBudW1iZXIgb2Ygc3RhdGVzIHN0b3JlZCBpbiAiZmxhZ3MiLiAgQ2hhbmdlcyBiZXR3ZWVuCi0gKiB0aGVzZSBzdGF0ZXMgaGFwcGVuICphbG1vc3QqIGV4Y2x1c2l2ZWx5IHVuZGVyIGEgcGVyLXN0cmlwZQotICogc3BpbmxvY2suICBTb21lIHZlcnkgc3BlY2lmaWMgY2hhbmdlcyBjYW4gaGFwcGVuIGluIGJpX2VuZF9pbywgYW5kCi0gKiB0aGVzZSBhcmUgbm90IHByb3RlY3RlZCBieSB0aGUgc3BpbiBsb2NrLgotICoKLSAqIFRoZSBmbGFnIGJpdHMgdGhhdCBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlc2Ugc3RhdGVzIGFyZToKLSAqICAgUjVfVVBUT0RBVEUgYW5kIFI1X0xPQ0tFRAotICoKLSAqIFN0YXRlIEVtcHR5ID09ICFVUFRPREFURSwgIUxPQ0sKLSAqICAgICAgICBXZSBoYXZlIG5vIGRhdGEsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgcmVxdWVzdAotICogU3RhdGUgV2FudCA9PSAhVVBUT0RBVEUsIExPQ0sKLSAqICAgICAgICBBIHJlYWQgcmVxdWVzdCBpcyBiZWluZyBzdWJtaXR0ZWQgZm9yIHRoaXMgYmxvY2sKLSAqIFN0YXRlIERpcnR5ID09IFVQVE9EQVRFLCBMT0NLCi0gKiAgICAgICAgU29tZSBuZXcgZGF0YSBpcyBpbiB0aGlzIGJ1ZmZlciwgYW5kIGl0IGlzIGJlaW5nIHdyaXR0ZW4gb3V0Ci0gKiBTdGF0ZSBDbGVhbiA9PSBVUFRPREFURSwgIUxPQ0sKLSAqICAgICAgICBXZSBoYXZlIHZhbGlkIGRhdGEgd2hpY2ggaXMgdGhlIHNhbWUgYXMgb24gZGlzYwotICoKLSAqIFRoZSBwb3NzaWJsZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmU6Ci0gKgotICogIEVtcHR5IC0+IFdhbnQgICAtIG9uIHJlYWQgb3Igd3JpdGUgdG8gZ2V0IG9sZCBkYXRhIGZvciAgcGFyaXR5IGNhbGMKLSAqICBFbXB0eSAtPiBEaXJ0eSAgLSBvbiBjb21wdXRlX3Bhcml0eSB0byBzYXRpc2Z5IHdyaXRlL3N5bmMgcmVxdWVzdC4oUkVDT05TVFJVQ1RfV1JJVEUpCi0gKiAgRW1wdHkgLT4gQ2xlYW4gIC0gb24gY29tcHV0ZV9ibG9jayB3aGVuIGNvbXB1dGluZyBhIGJsb2NrIGZvciBmYWlsZWQgZHJpdmUKLSAqICBXYW50ICAtPiBFbXB0eSAgLSBvbiBmYWlsZWQgcmVhZAotICogIFdhbnQgIC0+IENsZWFuICAtIG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiByZWFkIHJlcXVlc3QKLSAqICBEaXJ0eSAtPiBDbGVhbiAgLSBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2Ygd3JpdGUgcmVxdWVzdAotICogIERpcnR5IC0+IENsZWFuICAtIG9uIGZhaWxlZCB3cml0ZQotICogIENsZWFuIC0+IERpcnR5ICAtIG9uIGNvbXB1dGVfcGFyaXR5IHRvIHNhdGlzZnkgd3JpdGUvc3luYyAoUkVDT05TVFJVQ1Qgb3IgUk1XKQotICoKLSAqIFRoZSBXYW50LT5FbXB0eSwgV2FudC0+Q2xlYW4sIERpcnR5LT5DbGVhbiwgdHJhbnNpdGlvbnMKLSAqIGFsbCBoYXBwZW4gaW4gYl9lbmRfaW8gYXQgaW50ZXJydXB0IHRpbWUuCi0gKiBFYWNoIHNldHMgdGhlIFVwdG9kYXRlIGJpdCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBMb2NrIGJpdC4KLSAqIFRoaXMgbGVhdmVzIG9uZSBtdWx0aS1zdGFnZSB0cmFuc2l0aW9uOgotICogICAgV2FudC0+RGlydHktPkNsZWFuCi0gKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSB0aGlua2luZyB0aGF0IGEgQ2xlYW4gYnVmZmVyIGlzIGFjdHVhbGx5IGRpcnR5Ci0gKiB3aWxsIGF0IHdvcnN0IGRlbGF5IHNvbWUgYWN0aW9uLCBhbmQgdGhlIHN0cmlwZSB3aWxsIGJlIHNjaGVkdWxlZAotICogZm9yIGF0dGVudGlvbiBhZnRlciB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS4KLSAqCi0gKiBUaGVyZSBpcyBvbmUgcG9zc2liaWxpdHkgdGhhdCBpcyBub3QgY292ZXJlZCBieSB0aGVzZSBzdGF0ZXMuICBUaGF0Ci0gKiBpcyBpZiBvbmUgZHJpdmUgaGFzIGZhaWxlZCBhbmQgdGhlcmUgaXMgYSBzcGFyZSBiZWluZyByZWJ1aWx0LiAgV2UKLSAqIGNhbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBjbGVhbiBibG9jayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZAotICogZnJvbSBwYXJpdHkgY2FsY3VsYXRpb25zLCBhbmQgYSBjbGVhbiBibG9jayB0aGF0IGhhcyBiZWVuCi0gKiBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgc3BhcmUgKCBvciB0byBwYXJpdHkgd2hlbiByZXN5bmNpbmcpLgotICogVG8gZGlzdGluZ3VzaCB0aGVzZSBzdGF0ZXMgd2UgaGF2ZSBhIHN0cmlwZSBiaXQgU1RSSVBFX0lOU1lOQyB0aGF0Ci0gKiBpcyBzZXQgd2hlbmV2ZXIgYSB3cml0ZSBpcyBzY2hlZHVsZWQgdG8gdGhlIHNwYXJlLCBvciB0byB0aGUgcGFyaXR5Ci0gKiBkaXNjIGlmIHRoZXJlIGlzIG5vIHNwYXJlLiAgQSBzeW5jIHJlcXVlc3QgY2xlYXJzIHRoaXMgYml0LCBhbmQKLSAqIHdoZW4gd2UgZmluZCBpdCBzZXQgd2l0aCBubyBidWZmZXJzIGxvY2tlZCwgd2Uga25vdyB0aGUgc3luYyBpcwotICogY29tcGxldGUuCi0gKgotICogQnVmZmVycyBmb3IgdGhlIG1kIGRldmljZSB0aGF0IGFycml2ZSB2aWEgbWFrZV9yZXF1ZXN0IGFyZSBhdHRhY2hlZAotICogdG8gdGhlIGFwcHJvcHJpYXRlIHN0cmlwZSBpbiBvbmUgb2YgdHdvIGxpc3RzIGxpbmtlZCBvbiBiX3JlcW5leHQuCi0gKiBPbmUgbGlzdCAoYmhfcmVhZCkgZm9yIHJlYWQgcmVxdWVzdHMsIG9uZSAoYmhfd3JpdGUpIGZvciB3cml0ZS4KLSAqIFRoZXJlIHNob3VsZCBuZXZlciBiZSBtb3JlIHRoYW4gb25lIGJ1ZmZlciBvbiB0aGUgdHdvIGxpc3RzCi0gKiB0b2dldGhlciwgYnV0IHdlIGFyZSBub3QgZ3VhcmFudGVlZCBvZiB0aGF0IHNvIHdlIGFsbG93IGZvciBtb3JlLgotICoKLSAqIElmIGEgYnVmZmVyIGlzIG9uIHRoZSByZWFkIGxpc3Qgd2hlbiB0aGUgYXNzb2NpYXRlZCBjYWNoZSBidWZmZXIgaXMKLSAqIFVwdG9kYXRlLCB0aGUgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgcmVhZCBidWZmZXIgYW5kIGl0J3MgYl9lbmRfaW8KLSAqIHJvdXRpbmUgaXMgY2FsbGVkLiAgVGhpcyBtYXkgaGFwcGVuIGluIHRoZSBlbmRfcmVxdWVzdCByb3V0aW5lIG9ubHkKLSAqIGlmIHRoZSBidWZmZXIgaGFzIGp1c3Qgc3VjY2Vzc2Z1bGx5IGJlZW4gcmVhZC4gIGVuZF9yZXF1ZXN0IHNob3VsZAotICogcmVtb3ZlIHRoZSBidWZmZXJzIGZyb20gdGhlIGxpc3QgYW5kIHRoZW4gc2V0IHRoZSBVcHRvZGF0ZSBiaXQgb24KLSAqIHRoZSBidWZmZXIuICBPdGhlciB0aHJlYWRzIG1heSBkbyB0aGlzIG9ubHkgaWYgdGhleSBmaXJzdCBjaGVjawotICogdGhhdCB0aGUgVXB0b2RhdGUgYml0IGlzIHNldC4gIE9uY2UgdGhleSBoYXZlIGNoZWNrZWQgdGhhdCB0aGV5IG1heQotICogdGFrZSBidWZmZXJzIG9mZiB0aGUgcmVhZCBxdWV1ZS4KLSAqCi0gKiBXaGVuIGEgYnVmZmVyIG9uIHRoZSB3cml0ZSBsaXN0IGlzIGNvbW1pdHRlZCBmb3Igd3JpdGUgaXQgaXMgY29waWVkCi0gKiBpbnRvIHRoZSBjYWNoZSBidWZmZXIsIHdoaWNoIGlzIHRoZW4gbWFya2VkIGRpcnR5LCBhbmQgbW92ZWQgb250byBhCi0gKiB0aGlyZCBsaXN0LCB0aGUgd3JpdHRlbiBsaXN0IChiaF93cml0dGVuKS4gIE9uY2UgYm90aCB0aGUgcGFyaXR5Ci0gKiBibG9jayBhbmQgdGhlIGNhY2hlZCBidWZmZXIgYXJlIHN1Y2Nlc3NmdWxseSB3cml0dGVuLCBhbnkgYnVmZmVyIG9uCi0gKiBhIHdyaXR0ZW4gbGlzdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCBiX2VuZF9pby4KLSAqCi0gKiBUaGUgd3JpdGUgbGlzdCBhbmQgcmVhZCBsaXN0IGJvdGggYWN0IGFzIGZpZm9zLiAgVGhlIHJlYWQgbGlzdCBpcwotICogcHJvdGVjdGVkIGJ5IHRoZSBkZXZpY2VfbG9jay4gIFRoZSB3cml0ZSBhbmQgd3JpdHRlbiBsaXN0cyBhcmUKLSAqIHByb3RlY3RlZCBieSB0aGUgc3RyaXBlIGxvY2suICBUaGUgZGV2aWNlX2xvY2ssIHdoaWNoIGNhbiBiZQotICogY2xhaW1lZCB3aGlsZSB0aGUgc3RpcGUgbG9jayBpcyBoZWxkLCBpcyBvbmx5IGZvciBsaXN0Ci0gKiBtYW5pcHVsYXRpb25zIGFuZCB3aWxsIG9ubHkgYmUgaGVsZCBmb3IgYSB2ZXJ5IHNob3J0IHRpbWUuICBJdCBjYW4KLSAqIGJlIGNsYWltZWQgZnJvbSBpbnRlcnJ1cHRzLgotICoKLSAqCi0gKiBTdHJpcGVzIGluIHRoZSBzdHJpcGUgY2FjaGUgY2FuIGJlIG9uIG9uZSBvZiB0d28gbGlzdHMgKG9yIG9uCi0gKiBuZWl0aGVyKS4gIFRoZSAiaW5hY3RpdmVfbGlzdCIgY29udGFpbnMgc3RyaXBlcyB3aGljaCBhcmUgbm90Ci0gKiBjdXJyZW50bHkgYmVpbmcgdXNlZCBmb3IgYW55IHJlcXVlc3QuICBUaGV5IGNhbiBmcmVlbHkgYmUgcmV1c2VkCi0gKiBmb3IgYW5vdGhlciBzdHJpcGUuICBUaGUgImhhbmRsZV9saXN0IiBjb250YWlucyBzdHJpcGVzIHRoYXQgbmVlZAotICogdG8gYmUgaGFuZGxlZCBpbiBzb21lIHdheS4gIEJvdGggb2YgdGhlc2UgYXJlIGZpZm8gcXVldWVzLiAgRWFjaAotICogc3RyaXBlIGlzIGFsc28gKHBvdGVudGlhbGx5KSBsaW5rZWQgdG8gYSBoYXNoIGJ1Y2tldCBpbiB0aGUgaGFzaAotICogdGFibGUgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgYnkgc2VjdG9yIG51bWJlci4gIFN0cmlwZXMgdGhhdCBhcmUKLSAqIG5vdCBoYXNoZWQgbXVzdCBiZSBvbiB0aGUgaW5hY3RpdmVfbGlzdCwgYW5kIHdpbGwgbm9ybWFsbHkgYmUgYXQKLSAqIHRoZSBmcm9udC4gIEFsbCBzdHJpcGVzIHN0YXJ0IGxpZmUgdGhpcyB3YXkuCi0gKgotICogVGhlIGluYWN0aXZlX2xpc3QsIGhhbmRsZV9saXN0IGFuZCBoYXNoIGJ1Y2tldCBsaXN0cyBhcmUgYWxsIHByb3RlY3RlZCBieSB0aGUKLSAqIGRldmljZV9sb2NrLgotICogIC0gc3RyaXBlcyBvbiB0aGUgaW5hY3RpdmVfbGlzdCBuZXZlciBoYXZlIHRoZWlyIHN0cmlwZV9sb2NrIGhlbGQuCi0gKiAgLSBzdHJpcGVzIGhhdmUgYSByZWZlcmVuY2UgY291bnRlci4gSWYgY291bnQ9PTAsIHRoZXkgYXJlIG9uIGEgbGlzdC4KLSAqICAtIElmIGEgc3RyaXBlIG1pZ2h0IG5lZWQgaGFuZGxpbmcsIFNUUklQRV9IQU5ETEUgaXMgc2V0LgotICogIC0gV2hlbiByZWZjb3VudCByZWFjaGVzIHplcm8sIHRoZW4gaWYgU1RSSVBFX0hBTkRMRSBpdCBpcyBwdXQgb24KLSAqICAgIGhhbmRsZV9saXN0IGVsc2UgaW5hY3RpdmVfbGlzdAotICoKLSAqIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGZhY3QgdGhhdCBTVFJJUEVfSEFORExFIGlzIG9ubHkgZXZlcgotICogY2xlYXJlZCB3aGlsZSBhIHN0cmlwZSBoYXMgYSBub24temVybyBjb3VudCBtZWFucyB0aGF0IGlmIHRoZQotICogcmVmY291bnQgaXMgMCBhbmQgU1RSSVBFX0hBTkRMRSBpcyBzZXQsIHRoZW4gaXQgaXMgb24gdGhlCi0gKiBoYW5kbGVfbGlzdCBhbmQgaWYgcmVjb3VudCBpcyAwIGFuZCBTVFJJUEVfSEFORExFIGlzIG5vdCBzZXQsIHRoZW4KLSAqIHRoZSBzdHJpcGUgaXMgb24gaW5hY3RpdmVfbGlzdC4KLSAqCi0gKiBUaGUgcG9zc2libGUgdHJhbnNpdGlvbnMgYXJlOgotICogIGFjdGl2YXRlIGFuIHVuaGFzaGVkL2luYWN0aXZlIHN0cmlwZSAoZ2V0X2FjdGl2ZV9zdHJpcGUoKSkKLSAqICAgICBsb2NrZGV2IGNoZWNrLWhhc2ggdW5saW5rLXN0cmlwZSBjbnQrKyBjbGVhbi1zdHJpcGUgaGFzaC1zdHJpcGUgdW5sb2NrZGV2Ci0gKiAgYWN0aXZhdGUgYSBoYXNoZWQsIHBvc3NpYmx5IGFjdGl2ZSBzdHJpcGUgKGdldF9hY3RpdmVfc3RyaXBlKCkpCi0gKiAgICAgbG9ja2RldiBjaGVjay1oYXNoIGlmKCFjbnQrKyl1bmxpbmstc3RyaXBlIHVubG9ja2RldgotICogIGF0dGFjaCBhIHJlcXVlc3QgdG8gYW4gYWN0aXZlIHN0cmlwZSAoYWRkX3N0cmlwZV9iaCgpKQotICogICAgIGxvY2tkZXYgYXR0YWNoLWJ1ZmZlciB1bmxvY2tkZXYKLSAqICBoYW5kbGUgYSBzdHJpcGUgKGhhbmRsZV9zdHJpcGUoKSkKLSAqICAgICBsb2Nrc3RyaXBlIGNsclNUUklQRV9IQU5ETEUgLi4uCi0gKgkJKGxvY2tkZXYgY2hlY2stYnVmZmVycyB1bmxvY2tkZXYpIC4uCi0gKgkJY2hhbmdlLXN0YXRlIC4uCi0gKgkJcmVjb3JkIGlvL29wcyBuZWVkZWQgdW5sb2Nrc3RyaXBlIHNjaGVkdWxlIGlvL29wcwotICogIHJlbGVhc2UgYW4gYWN0aXZlIHN0cmlwZSAocmVsZWFzZV9zdHJpcGUoKSkKLSAqICAgICBsb2NrZGV2IGlmICghLS1jbnQpIHsgaWYgIFNUUklQRV9IQU5ETEUsIGFkZCB0byBoYW5kbGVfbGlzdCBlbHNlIGFkZCB0byBpbmFjdGl2ZS1saXN0IH0gdW5sb2NrZGV2Ci0gKgotICogVGhlIHJlZmNvdW50IGNvdW50cyBlYWNoIHRocmVhZCB0aGF0IGhhdmUgYWN0aXZhdGVkIHRoZSBzdHJpcGUsCi0gKiBwbHVzIHJhaWQ1ZCBpZiBpdCBpcyBoYW5kbGluZyBpdCwgcGx1cyBvbmUgZm9yIGVhY2ggYWN0aXZlIHJlcXVlc3QKLSAqIG9uIGEgY2FjaGVkIGJ1ZmZlciwgYW5kIHBsdXMgb25lIGlmIHRoZSBzdHJpcGUgaXMgdW5kZXJnb2luZyBzdHJpcGUKLSAqIG9wZXJhdGlvbnMuCi0gKgotICogU3RyaXBlIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBvdXRzaWRlIHRoZSBzdHJpcGUgbG9jaywKLSAqIHRoZSBzdHJpcGUgb3BlcmF0aW9ucyBhcmU6Ci0gKiAtY29weWluZyBkYXRhIGJldHdlZW4gdGhlIHN0cmlwZSBjYWNoZSBhbmQgdXNlciBhcHBsaWNhdGlvbiBidWZmZXJzCi0gKiAtY29tcHV0aW5nIGJsb2NrcyB0byBzYXZlIGEgZGlzayBhY2Nlc3MsIG9yIHRvIHJlY292ZXIgYSBtaXNzaW5nIGJsb2NrCi0gKiAtdXBkYXRpbmcgdGhlIHBhcml0eSBvbiBhIHdyaXRlIG9wZXJhdGlvbiAocmVjb25zdHJ1Y3Qgd3JpdGUgYW5kCi0gKiAgcmVhZC1tb2RpZnktd3JpdGUpCi0gKiAtY2hlY2tpbmcgcGFyaXR5IGNvcnJlY3RuZXNzCi0gKiAtcnVubmluZyBpL28gdG8gZGlzawotICogVGhlc2Ugb3BlcmF0aW9ucyBhcmUgY2FycmllZCBvdXQgYnkgcmFpZDVfcnVuX29wcyB3aGljaCB1c2VzIHRoZSBhc3luY190eAotICogYXBpIHRvIChvcHRpb25hbGx5KSBvZmZsb2FkIG9wZXJhdGlvbnMgdG8gZGVkaWNhdGVkIGhhcmR3YXJlIGVuZ2luZXMuCi0gKiBXaGVuIHJlcXVlc3RpbmcgYW4gb3BlcmF0aW9uIGhhbmRsZV9zdHJpcGUgc2V0cyB0aGUgcGVuZGluZyBiaXQgZm9yIHRoZQotICogb3BlcmF0aW9uIGFuZCBpbmNyZW1lbnRzIHRoZSBjb3VudC4gIHJhaWQ1X3J1bl9vcHMgaXMgdGhlbiBydW4gd2hlbmV2ZXIKLSAqIHRoZSBjb3VudCBpcyBub24temVyby4KLSAqIFRoZXJlIGFyZSBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBvcGVyYXRpb25zIHRoYXQgcHJldmVudCBzb21lCi0gKiBmcm9tIGJlaW5nIHJlcXVlc3RlZCB3aGlsZSBhbm90aGVyIGlzIGluIGZsaWdodC4KLSAqIDEvIFBhcml0eSBjaGVjayBvcGVyYXRpb25zIGRlc3Ryb3kgdGhlIGluIGNhY2hlIHZlcnNpb24gb2YgdGhlIHBhcml0eSBibG9jaywKLSAqICAgIHNvIHdlIHByZXZlbnQgcGFyaXR5IGRlcGVuZGVudCBvcGVyYXRpb25zIGxpa2Ugd3JpdGVzIGFuZCBjb21wdXRlX2Jsb2NrcwotICogICAgZnJvbSBzdGFydGluZyB3aGlsZSBhIGNoZWNrIGlzIGluIHByb2dyZXNzLiAgU29tZSBkbWEgZW5naW5lcyBjYW4gcGVyZm9ybQotICogICAgdGhlIGNoZWNrIHdpdGhvdXQgZGFtYWdpbmcgdGhlIHBhcml0eSBibG9jaywgaW4gdGhlc2UgY2FzZXMgdGhlIHBhcml0eQotICogICAgYmxvY2sgaXMgcmUtbWFya2VkIHVwIHRvIGRhdGUgKGFzc3VtaW5nIHRoZSBjaGVjayB3YXMgc3VjY2Vzc2Z1bCkgYW5kIGlzCi0gKiAgICBub3QgcmUtcmVhZCBmcm9tIGRpc2suCi0gKiAyLyBXaGVuIGEgd3JpdGUgb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB3ZSBpbW1lZGlhdGVseSBsb2NrIHRoZSBhZmZlY3RlZAotICogICAgYmxvY2tzLCBhbmQgbWFyayB0aGVtIGFzIG5vdCB1cCB0byBkYXRlLiAgVGhpcyBjYXVzZXMgbmV3IHJlYWQgcmVxdWVzdHMKLSAqICAgIHRvIGJlIGhlbGQgb2ZmLCBhcyB3ZWxsIGFzIHBhcml0eSBjaGVja3MgYW5kIGNvbXB1dGUgYmxvY2sgb3BlcmF0aW9ucy4KLSAqIDMvIE9uY2UgYSBjb21wdXRlIGJsb2NrIG9wZXJhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQgaGFuZGxlX3N0cmlwZSB0cmVhdHMKLSAqICAgIHRoYXQgYmxvY2sgYXMgaWYgaXQgaXMgdXAgdG8gZGF0ZS4gIHJhaWQ1X3J1bl9vcHMgZ3VhcnVudGVlcyB0aGF0IGFueQotICogICAgb3BlcmF0aW9uIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZSBjb21wdXRlIGJsb2NrIHJlc3VsdCBpcyBpbml0aWF0ZWQgYWZ0ZXIKLSAqICAgIHRoZSBjb21wdXRlIGJsb2NrIGNvbXBsZXRlcy4KLSAqLwotCi0vKgotICogT3BlcmF0aW9ucyBzdGF0ZSAtIGludGVybWVkaWF0ZSBzdGF0ZXMgdGhhdCBhcmUgdmlzaWJsZSBvdXRzaWRlIG9mIHNoLT5sb2NrCi0gKiBJbiBnZW5lcmFsIF9pZGxlIGluZGljYXRlcyBub3RoaW5nIGlzIHJ1bm5pbmcsIF9ydW4gaW5kaWNhdGVzIGEgZGF0YQotICogcHJvY2Vzc2luZyBvcGVyYXRpb24gaXMgYWN0aXZlLCBhbmQgX3Jlc3VsdCBtZWFucyB0aGUgZGF0YSBwcm9jZXNzaW5nIHJlc3VsdAotICogaXMgc3RhYmxlIGFuZCBjYW4gYmUgYWN0ZWQgdXBvbi4gIEZvciBzaW1wbGUgb3BlcmF0aW9ucyBsaWtlIGJpb2ZpbGwgYW5kCi0gKiBjb21wdXRlIHRoYXQgb25seSBoYXZlIGFuIF9pZGxlIGFuZCBfcnVuIHN0YXRlIHRoZXkgYXJlIGluZGljYXRlZCB3aXRoCi0gKiBzaC0+c3RhdGUgZmxhZ3MgKFNUUklQRV9CSU9GSUxMX1JVTiBhbmQgU1RSSVBFX0NPTVBVVEVfUlVOKQotICovCi0vKioKLSAqIGVudW0gY2hlY2tfc3RhdGVzIC0gaGFuZGxlcyBzeW5jaW5nIC8gcmVwYWlyaW5nIGEgc3RyaXBlCi0gKiBAY2hlY2tfc3RhdGVfaWRsZSAtIGNoZWNrIG9wZXJhdGlvbnMgYXJlIHF1aWVzY2VkCi0gKiBAY2hlY2tfc3RhdGVfcnVuIC0gY2hlY2sgb3BlcmF0aW9uIGlzIHJ1bm5pbmcKLSAqIEBjaGVja19zdGF0ZV9yZXN1bHQgLSBzZXQgb3V0c2lkZSBsb2NrIHdoZW4gY2hlY2sgcmVzdWx0IGlzIHZhbGlkCi0gKiBAY2hlY2tfc3RhdGVfY29tcHV0ZV9ydW4gLSBjaGVjayBmYWlsZWQgYW5kIHdlIGFyZSByZXBhaXJpbmcKLSAqIEBjaGVja19zdGF0ZV9jb21wdXRlX3Jlc3VsdCAtIHNldCBvdXRzaWRlIGxvY2sgd2hlbiBjb21wdXRlIHJlc3VsdCBpcyB2YWxpZAotICovCi1lbnVtIGNoZWNrX3N0YXRlcyB7Ci0JY2hlY2tfc3RhdGVfaWRsZSA9IDAsCi0JY2hlY2tfc3RhdGVfcnVuLCAvKiBwYXJpdHkgY2hlY2sgKi8KLQljaGVja19zdGF0ZV9jaGVja19yZXN1bHQsCi0JY2hlY2tfc3RhdGVfY29tcHV0ZV9ydW4sIC8qIHBhcml0eSByZXBhaXIgKi8KLQljaGVja19zdGF0ZV9jb21wdXRlX3Jlc3VsdCwKLX07Ci0KLS8qKgotICogZW51bSByZWNvbnN0cnVjdF9zdGF0ZXMgLSBoYW5kbGVzIHdyaXRpbmcgb3IgZXhwYW5kaW5nIGEgc3RyaXBlCi0gKi8KLWVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIHsKLQlyZWNvbnN0cnVjdF9zdGF0ZV9pZGxlID0gMCwKLQlyZWNvbnN0cnVjdF9zdGF0ZV9wcmV4b3JfZHJhaW5fcnVuLAkvKiBwcmV4b3Itd3JpdGUgKi8KLQlyZWNvbnN0cnVjdF9zdGF0ZV9kcmFpbl9ydW4sCQkvKiB3cml0ZSAqLwotCXJlY29uc3RydWN0X3N0YXRlX3J1biwJCQkvKiBleHBhbmQgKi8KLQlyZWNvbnN0cnVjdF9zdGF0ZV9wcmV4b3JfZHJhaW5fcmVzdWx0LAotCXJlY29uc3RydWN0X3N0YXRlX2RyYWluX3Jlc3VsdCwKLQlyZWNvbnN0cnVjdF9zdGF0ZV9yZXN1bHQsCi19OwotCi1zdHJ1Y3Qgc3RyaXBlX2hlYWQgewotCXN0cnVjdCBobGlzdF9ub2RlCWhhc2g7Ci0Jc3RydWN0IGxpc3RfaGVhZAlscnU7CQkJLyogaW5hY3RpdmVfbGlzdCBvciBoYW5kbGVfbGlzdCAqLwotCXN0cnVjdCByYWlkNV9wcml2YXRlX2RhdGEJKnJhaWRfY29uZjsKLQlzZWN0b3JfdAkJc2VjdG9yOwkJCS8qIHNlY3RvciBvZiB0aGlzIHJvdyAqLwotCWludAkJCXBkX2lkeDsJCQkvKiBwYXJpdHkgZGlzayBpbmRleCAqLwotCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwkJCS8qIHN0YXRlIGZsYWdzICovCi0JYXRvbWljX3QJCWNvdW50OwkJCS8qIG5yIG9mIGFjdGl2ZSB0aHJlYWQvcmVxdWVzdHMgKi8KLQlzcGlubG9ja190CQlsb2NrOwotCWludAkJCWJtX3NlcTsJLyogc2VxdWVuY2UgbnVtYmVyIGZvciBiaXRtYXAgZmx1c2hlcyAqLwotCWludAkJCWRpc2tzOwkJCS8qIGRpc2tzIGluIHN0cmlwZSAqLwotCWVudW0gY2hlY2tfc3RhdGVzCWNoZWNrX3N0YXRlOwotCWVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIHJlY29uc3RydWN0X3N0YXRlOwotCS8qIHN0cmlwZV9vcGVyYXRpb25zCi0JICogQHRhcmdldCAtIFNUUklQRV9PUF9DT01QVVRFX0JMSyB0YXJnZXQKLQkgKi8KLQlzdHJ1Y3Qgc3RyaXBlX29wZXJhdGlvbnMgewotCQlpbnQJCSAgIHRhcmdldDsKLQkJdTMyCQkgICB6ZXJvX3N1bV9yZXN1bHQ7Ci0JfSBvcHM7Ci0Jc3RydWN0IHI1ZGV2IHsKLQkJc3RydWN0IGJpbwlyZXE7Ci0JCXN0cnVjdCBiaW9fdmVjCXZlYzsKLQkJc3RydWN0IHBhZ2UJKnBhZ2U7Ci0JCXN0cnVjdCBiaW8JKnRvcmVhZCwgKnJlYWQsICp0b3dyaXRlLCAqd3JpdHRlbjsKLQkJc2VjdG9yX3QJc2VjdG9yOwkJCS8qIHNlY3RvciBvZiB0aGlzIHBhZ2UgKi8KLQkJdW5zaWduZWQgbG9uZwlmbGFnczsKLQl9IGRldlsxXTsgLyogYWxsb2NhdGVkIHdpdGggZXh0cmEgc3BhY2UgZGVwZW5kaW5nIG9mIFJBSUQgZ2VvbWV0cnkgKi8KLX07Ci0KLS8qIHN0cmlwZV9oZWFkX3N0YXRlIC0gY29sbGVjdHMgYW5kIHRyYWNrcyB0aGUgZHluYW1pYyBzdGF0ZSBvZiBhIHN0cmlwZV9oZWFkCi0gKiAgICAgZm9yIGhhbmRsZV9zdHJpcGUuICBJdCBpcyBvbmx5IHZhbGlkIHVuZGVyIHNwaW5fbG9jayhzaC0+bG9jayk7Ci0gKi8KLXN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSB7Ci0JaW50IHN5bmNpbmcsIGV4cGFuZGluZywgZXhwYW5kZWQ7Ci0JaW50IGxvY2tlZCwgdXB0b2RhdGUsIHRvX3JlYWQsIHRvX3dyaXRlLCBmYWlsZWQsIHdyaXR0ZW47Ci0JaW50IHRvX2ZpbGwsIGNvbXB1dGUsIHJlcV9jb21wdXRlLCBub25fb3ZlcndyaXRlOwotCWludCBmYWlsZWRfbnVtOwotCXVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3Q7Ci19OwotCi0vKiByNl9zdGF0ZSAtIGV4dHJhIHN0YXRlIGRhdGEgb25seSByZWxldmFudCB0byByNiAqLwotc3RydWN0IHI2X3N0YXRlIHsKLQlpbnQgcF9mYWlsZWQsIHFfZmFpbGVkLCBxZF9pZHgsIGZhaWxlZF9udW1bMl07Ci19OwotCi0vKiBGbGFncyAqLwotI2RlZmluZQlSNV9VUFRPREFURQkwCS8qIHBhZ2UgY29udGFpbnMgY3VycmVudCBkYXRhICovCi0jZGVmaW5lCVI1X0xPQ0tFRAkxCS8qIElPIGhhcyBiZWVuIHN1Ym1pdHRlZCBvbiAicmVxIiAqLwotI2RlZmluZQlSNV9PVkVSV1JJVEUJMgkvKiB0b3dyaXRlIGNvdmVycyB3aG9sZSBwYWdlICovCi0vKiBhbmQgc29tZSB0aGF0IGFyZSBpbnRlcm5hbCB0byBoYW5kbGVfc3RyaXBlICovCi0jZGVmaW5lCVI1X0luc3luYwkzCS8qIHJkZXYgJiYgcmRldi0+aW5fc3luYyBhdCBzdGFydCAqLwotI2RlZmluZQlSNV9XYW50cmVhZAk0CS8qIHdhbnQgdG8gc2NoZWR1bGUgYSByZWFkICovCi0jZGVmaW5lCVI1X1dhbnR3cml0ZQk1Ci0jZGVmaW5lCVI1X092ZXJsYXAJNwkvKiBUaGVyZSBpcyBhIHBlbmRpbmcgb3ZlcmxhcHBpbmcgcmVxdWVzdCBvbiB0aGlzIGJsb2NrICovCi0jZGVmaW5lCVI1X1JlYWRFcnJvcgk4CS8qIHNlZW4gYSByZWFkIGVycm9yIGhlcmUgcmVjZW50bHkgKi8KLSNkZWZpbmUJUjVfUmVXcml0ZQk5CS8qIGhhdmUgdHJpZWQgdG8gb3Zlci13cml0ZSB0aGUgcmVhZGVycm9yICovCi0KLSNkZWZpbmUJUjVfRXhwYW5kZWQJMTAJLyogVGhpcyBibG9jayBub3cgaGFzIHBvc3QtZXhwYW5kIGRhdGEgKi8KLSNkZWZpbmUJUjVfV2FudGNvbXB1dGUJMTEgLyogY29tcHV0ZV9ibG9jayBpbiBwcm9ncmVzcyB0cmVhdCBhcwotCQkJCSAgICAqIHVwdG9kYXRlCi0JCQkJICAgICovCi0jZGVmaW5lCVI1X1dhbnRmaWxsCTEyIC8qIGRldi0+dG9yZWFkIGNvbnRhaW5zIGEgYmlvIHRoYXQgbmVlZHMKLQkJCQkgICAgKiBmaWxsaW5nCi0JCQkJICAgICovCi0jZGVmaW5lIFI1X1dhbnRkcmFpbgkxMyAvKiBkZXYtPnRvd3JpdGUgbmVlZHMgdG8gYmUgZHJhaW5lZCAqLwotLyoKLSAqIFdyaXRlIG1ldGhvZAotICovCi0jZGVmaW5lIFJFQ09OU1RSVUNUX1dSSVRFCTEKLSNkZWZpbmUgUkVBRF9NT0RJRllfV1JJVEUJMgotLyogbm90IGEgd3JpdGUgbWV0aG9kLCBidXQgYSBjb21wdXRlX3Bhcml0eSBtb2RlICovCi0jZGVmaW5lCUNIRUNLX1BBUklUWQkJMwotCi0vKgotICogU3RyaXBlIHN0YXRlCi0gKi8KLSNkZWZpbmUgU1RSSVBFX0hBTkRMRQkJMgotI2RlZmluZQlTVFJJUEVfU1lOQ0lORwkJMwotI2RlZmluZQlTVFJJUEVfSU5TWU5DCQk0Ci0jZGVmaW5lCVNUUklQRV9QUkVSRUFEX0FDVElWRQk1Ci0jZGVmaW5lCVNUUklQRV9ERUxBWUVECQk2Ci0jZGVmaW5lCVNUUklQRV9ERUdSQURFRAkJNwotI2RlZmluZQlTVFJJUEVfQklUX0RFTEFZCTgKLSNkZWZpbmUJU1RSSVBFX0VYUEFORElORwk5Ci0jZGVmaW5lCVNUUklQRV9FWFBBTkRfU09VUkNFCTEwCi0jZGVmaW5lCVNUUklQRV9FWFBBTkRfUkVBRFkJMTEKLSNkZWZpbmUJU1RSSVBFX0lPX1NUQVJURUQJMTIgLyogZG8gbm90IGNvdW50IHRvd2FyZHMgJ2J5cGFzc19jb3VudCcgKi8KLSNkZWZpbmUJU1RSSVBFX0ZVTExfV1JJVEUJMTMgLyogYWxsIGJsb2NrcyBhcmUgc2V0IHRvIGJlIG92ZXJ3cml0dGVuICovCi0jZGVmaW5lCVNUUklQRV9CSU9GSUxMX1JVTgkxNAotI2RlZmluZQlTVFJJUEVfQ09NUFVURV9SVU4JMTUKLS8qCi0gKiBPcGVyYXRpb24gcmVxdWVzdCBmbGFncwotICovCi0jZGVmaW5lIFNUUklQRV9PUF9CSU9GSUxMCTAKLSNkZWZpbmUgU1RSSVBFX09QX0NPTVBVVEVfQkxLCTEKLSNkZWZpbmUgU1RSSVBFX09QX1BSRVhPUgkyCi0jZGVmaW5lIFNUUklQRV9PUF9CSU9EUkFJTgkzCi0jZGVmaW5lIFNUUklQRV9PUF9QT1NUWE9SCTQKLSNkZWZpbmUgU1RSSVBFX09QX0NIRUNLCTUKLQotLyoKLSAqIFBsdWdnaW5nOgotICoKLSAqIFRvIGltcHJvdmUgd3JpdGUgdGhyb3VnaHB1dCwgd2UgbmVlZCB0byBkZWxheSB0aGUgaGFuZGxpbmcgb2Ygc29tZQotICogc3RyaXBlcyB1bnRpbCB0aGVyZSBoYXMgYmVlbiBhIGNoYW5jZSB0aGF0IHNldmVyYWwgd3JpdGUgcmVxdWVzdHMKLSAqIGZvciB0aGUgb25lIHN0cmlwZSBoYXZlIGFsbCBiZWVuIGNvbGxlY3RlZC4KLSAqIEluIHBhcnRpY3VsYXIsIGFueSB3cml0ZSByZXF1ZXN0IHRoYXQgd291bGQgcmVxdWlyZSBwcmUtcmVhZGluZwotICogaXMgcHV0IG9uIGEgImRlbGF5ZWQiIHF1ZXVlIHVudGlsIHRoZXJlIGFyZSBubyBzdHJpcGVzIGN1cnJlbnRseQotICogaW4gYSBwcmUtcmVhZCBwaGFzZS4gIEZ1cnRoZXIsIGlmIHRoZSAiZGVsYXllZCIgcXVldWUgaXMgZW1wdHkgd2hlbgotICogYSBzdHJpcGUgaXMgcHV0IG9uIGl0IHRoZW4gd2UgInBsdWciIHRoZSBxdWV1ZSBhbmQgZG8gbm90IHByb2Nlc3MgaXQKLSAqIHVudGlsIGFuIHVucGx1ZyBjYWxsIGlzIG1hZGUuICh0aGUgdW5wbHVnX2lvX2ZuKCkgaXMgY2FsbGVkKS4KLSAqCi0gKiBXaGVuIHByZXJlYWQgaXMgaW5pdGlhdGVkIG9uIGEgc3RyaXBlLCB3ZSBzZXQgUFJFUkVBRF9BQ1RJVkUgYW5kIGFkZAotICogaXQgdG8gdGhlIGNvdW50IG9mIHByZXJlYWRpbmcgc3RyaXBlcy4KLSAqIFdoZW4gd3JpdGUgaXMgaW5pdGlhdGVkLCBvciB0aGUgc3RyaXBlIHJlZmNudCA9PSAwIChqdXN0IGluIGNhc2UpIHdlCi0gKiBjbGVhciB0aGUgUFJFUkVBRF9BQ1RJVkUgZmxhZyBhbmQgZGVjcmVtZW50IHRoZSBjb3VudAotICogV2hlbmV2ZXIgdGhlICdoYW5kbGUnIHF1ZXVlIGlzIGVtcHR5IGFuZCB0aGUgZGV2aWNlIGlzIG5vdCBwbHVnZ2VkLCB3ZQotICogbW92ZSBhbnkgc3RyaXBzIGZyb20gZGVsYXllZCB0byBoYW5kbGUgYW5kIGNsZWFyIHRoZSBERUxBWUVEIGZsYWcgYW5kIHNldAotICogUFJFUkVBRF9BQ1RJVkUuCi0gKiBJbiBzdHJpcGVfaGFuZGxlLCBpZiB3ZSBmaW5kIHByZS1yZWFkaW5nIGlzIG5lY2Vzc2FyeSwgd2UgZG8gaXQgaWYKLSAqIFBSRVJFQURfQUNUSVZFIGlzIHNldCwgZWxzZSB3ZSBzZXQgREVMQVlFRCB3aGljaCB3aWxsIHNlbmQgaXQgdG8gdGhlIGRlbGF5ZWQgcXVldWUuCi0gKiBIQU5ETEUgZ2V0cyBjbGVhcmVkIGlmIHN0cmlwZV9oYW5kbGUgbGVhdmUgbm90aGluZyBsb2NrZWQuCi0gKi8KLSAKLQotc3RydWN0IGRpc2tfaW5mbyB7Ci0JbWRrX3JkZXZfdAkqcmRldjsKLX07Ci0KLXN0cnVjdCByYWlkNV9wcml2YXRlX2RhdGEgewotCXN0cnVjdCBobGlzdF9oZWFkCSpzdHJpcGVfaGFzaHRibDsKLQltZGRldl90CQkJKm1kZGV2OwotCXN0cnVjdCBkaXNrX2luZm8JKnNwYXJlOwotCWludAkJCWNodW5rX3NpemUsIGxldmVsLCBhbGdvcml0aG07Ci0JaW50CQkJbWF4X2RlZ3JhZGVkOwotCWludAkJCXJhaWRfZGlza3M7Ci0JaW50CQkJbWF4X25yX3N0cmlwZXM7Ci0KLQkvKiB1c2VkIGR1cmluZyBhbiBleHBhbmQgKi8KLQlzZWN0b3JfdAkJZXhwYW5kX3Byb2dyZXNzOwkvKiBNYXhTZWN0b3Igd2hlbiBubyBleHBhbmQgaGFwcGVuaW5nICovCi0Jc2VjdG9yX3QJCWV4cGFuZF9sbzsgLyogZnJvbSBoZXJlIHVwIHRvIGV4cGFuZF9wcm9ncmVzcyBpdCBvdXQtb2YtYm91bmRzCi0JCQkJCSAgICAqIGFzIHdlIGhhdmVuJ3QgZmx1c2hlZCB0aGUgbWV0YWRhdGEgeWV0Ci0JCQkJCSAgICAqLwotCWludAkJCXByZXZpb3VzX3JhaWRfZGlza3M7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWhhbmRsZV9saXN0OyAvKiBzdHJpcGVzIG5lZWRpbmcgaGFuZGxpbmcgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWhvbGRfbGlzdDsgLyogcHJlcmVhZCByZWFkeSBzdHJpcGVzICovCi0Jc3RydWN0IGxpc3RfaGVhZAlkZWxheWVkX2xpc3Q7IC8qIHN0cmlwZXMgdGhhdCBoYXZlIHBsdWdnZWQgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWJpdG1hcF9saXN0OyAvKiBzdHJpcGVzIGRlbGF5aW5nIGF3YWl0aW5nIGJpdG1hcCB1cGRhdGUgKi8KLQlzdHJ1Y3QgYmlvCQkqcmV0cnlfcmVhZF9hbGlnbmVkOyAvKiBjdXJyZW50bHkgcmV0cnlpbmcgYWxpZ25lZCBiaW9zICAgKi8KLQlzdHJ1Y3QgYmlvCQkqcmV0cnlfcmVhZF9hbGlnbmVkX2xpc3Q7IC8qIGFsaWduZWQgYmlvcyByZXRyeSBsaXN0ICAqLwotCWF0b21pY190CQlwcmVyZWFkX2FjdGl2ZV9zdHJpcGVzOyAvKiBzdHJpcGVzIHdpdGggc2NoZWR1bGVkIGlvICovCi0JYXRvbWljX3QJCWFjdGl2ZV9hbGlnbmVkX3JlYWRzOwotCWF0b21pY190CQlwZW5kaW5nX2Z1bGxfd3JpdGVzOyAvKiBmdWxsIHdyaXRlIGJhY2tsb2cgKi8KLQlpbnQJCQlieXBhc3NfY291bnQ7IC8qIGJ5cGFzc2VkIHByZXJlYWRzICovCi0JaW50CQkJYnlwYXNzX3RocmVzaG9sZDsgLyogcHJlcmVhZCBuaWNlICovCi0Jc3RydWN0IGxpc3RfaGVhZAkqbGFzdF9ob2xkOyAvKiBkZXRlY3QgaG9sZF9saXN0IHByb21vdGlvbnMgKi8KLQotCWF0b21pY190CQlyZXNoYXBlX3N0cmlwZXM7IC8qIHN0cmlwZXMgd2l0aCBwZW5kaW5nIHdyaXRlcyBmb3IgcmVzaGFwZSAqLwotCS8qIHVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0d28gY2FjaGUgbmFtZXMgYXMgd2UgdGVtcG9yYXJpbHkgaGF2ZQotCSAqIHR3byBjYWNoZXMuCi0JICovCi0JaW50CQkJYWN0aXZlX25hbWU7Ci0JY2hhcgkJCWNhY2hlX25hbWVbMl1bMjBdOwotCXN0cnVjdCBrbWVtX2NhY2hlCQkqc2xhYl9jYWNoZTsgLyogZm9yIGFsbG9jYXRpbmcgc3RyaXBlcyAqLwotCi0JaW50CQkJc2VxX2ZsdXNoLCBzZXFfd3JpdGU7Ci0JaW50CQkJcXVpZXNjZTsKLQotCWludAkJCWZ1bGxzeW5jOyAgLyogc2V0IHRvIDEgaWYgYSBmdWxsIHN5bmMgaXMgbmVlZGVkLAotCQkJCQkgICAgKiAoZnJlc2ggZGV2aWNlIGFkZGVkKS4KLQkJCQkJICAgICogQ2xlYXJlZCB3aGVuIGEgc3luYyBjb21wbGV0ZXMuCi0JCQkJCSAgICAqLwotCi0Jc3RydWN0IHBhZ2UgCQkqc3BhcmVfcGFnZTsgLyogVXNlZCB3aGVuIGNoZWNraW5nIFAvUSBpbiByYWlkNiAqLwotCi0JLyoKLQkgKiBGcmVlIHN0cmlwZXMgcG9vbAotCSAqLwotCWF0b21pY190CQlhY3RpdmVfc3RyaXBlczsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWluYWN0aXZlX2xpc3Q7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9mb3Jfc3RyaXBlOwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfZm9yX292ZXJsYXA7Ci0JaW50CQkJaW5hY3RpdmVfYmxvY2tlZDsJLyogcmVsZWFzZSBvZiBpbmFjdGl2ZSBzdHJpcGVzIGJsb2NrZWQsCi0JCQkJCQkJICogd2FpdGluZyBmb3IgMjUlIHRvIGJlIGZyZWUKLQkJCQkJCQkgKi8KLQlpbnQJCQlwb29sX3NpemU7IC8qIG51bWJlciBvZiBkaXNrcyBpbiBzdHJpcGVoZWFkcyBpbiBwb29sICovCi0Jc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7Ci0Jc3RydWN0IGRpc2tfaW5mbwkqZGlza3M7Ci19OwotCi10eXBlZGVmIHN0cnVjdCByYWlkNV9wcml2YXRlX2RhdGEgcmFpZDVfY29uZl90OwotCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQotCi0vKgotICogT3VyIHN1cHBvcnRlZCBhbGdvcml0aG1zCi0gKi8KLSNkZWZpbmUgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQwkwCi0jZGVmaW5lIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDCTEKLSNkZWZpbmUgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDCTIKLSNkZWZpbmUgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQwkzCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3hvci5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3hvci5oCmluZGV4IDNlMTIwNTguLjVhMjEwOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC94b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQveG9yLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9YT1JfSAogI2RlZmluZSBfWE9SX0gKIAotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLQogI2RlZmluZSBNQVhfWE9SX0JMT0NLUyA0CiAKIGV4dGVybiB2b2lkIHhvcl9ibG9ja3ModW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9icTI0MDIyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9icTI0MDIyLmgKaW5kZXggZTg0YjBhOS4uYTZkMDE0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvYnEyNDAyMi5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2JxMjQwMjIuaApAQCAtMTAsNiArMTAsOCBAQAogICoKICAqLwogCitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YTsKKwogLyoqCiAgKiBicTI0MDIyX21hY2hfaW5mbyAtIHBsYXRmb3JtIGRhdGEgZm9yIGJxMjQwMjIKICAqIEBncGlvX25jZTogR1BJTyBsaW5lIGNvbm5lY3RlZCB0byB0aGUgbkNFIHBpbiwgdXNlZCB0byBlbmFibGUgLyBkaXNhYmxlIGNoYXJnaW5nCkBAIC0xOCw0ICsyMCw1IEBACiBzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gewogCWludCBncGlvX25jZTsKIAlpbnQgZ3Bpb19pc2V0MjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IDgwMWJmNzcuLjI3N2Y0YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTg4LDYgKzg4LDcgQEAKICAqIEZBSUwgICAgICAgICAgIFJlZ3VsYXRvciBvdXRwdXQgaGFzIGZhaWxlZC4KICAqIE9WRVJfVEVNUCAgICAgIFJlZ3VsYXRvciBvdmVyIHRlbXAuCiAgKiBGT1JDRV9ESVNBQkxFICBSZWd1bGF0b3Igc2h1dCBkb3duIGJ5IHNvZnR3YXJlLgorICogVk9MVEFHRV9DSEFOR0UgUmVndWxhdG9yIHZvbHRhZ2UgY2hhbmdlZC4KICAqCiAgKiBOT1RFOiBUaGVzZSBldmVudHMgY2FuIGJlIE9SJ2VkIHRvZ2V0aGVyIHdoZW4gcGFzc2VkIGludG8gaGFuZGxlci4KICAqLwpAQCAtOTgsNiArOTksNyBAQAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRkFJTAkJCTB4MDgKICNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX09WRVJfVEVNUAkJMHgxMAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRk9SQ0VfRElTQUJMRQkJMHgyMAorI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfVk9MVEFHRV9DSEFOR0UJCTB4NDAKIAogc3RydWN0IHJlZ3VsYXRvcjsKIApAQCAtMTQwLDYgKzE0Miw4IEBACiB2b2lkIHJlZ3VsYXRvcl9idWxrX2ZyZWUoaW50IG51bV9jb25zdW1lcnMsCiAJCQkgc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKmNvbnN1bWVycyk7CiAKK2ludCByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKTsKK2ludCByZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgdW5zaWduZWQgc2VsZWN0b3IpOwogaW50IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsIGludCBtaW5fdVYsIGludCBtYXhfdVYpOwogaW50IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpOwogaW50IHJlZ3VsYXRvcl9zZXRfY3VycmVudF9saW1pdChzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCmluZGV4IDJkYWUwNTcuLjQ4NDhkOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICoKLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjEsMjUgKzIxLDM4IEBACiBzdHJ1Y3QgcmVndWxhdG9yX2RldjsKIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhOwogCitlbnVtIHJlZ3VsYXRvcl9zdGF0dXMgeworCVJFR1VMQVRPUl9TVEFUVVNfT0ZGLAorCVJFR1VMQVRPUl9TVEFUVVNfT04sCisJUkVHVUxBVE9SX1NUQVRVU19FUlJPUiwKKwkvKiBmYXN0L25vcm1hbC9pZGxlL3N0YW5kYnkgYXJlIGZsYXZvcnMgb2YgIm9uIiAqLworCVJFR1VMQVRPUl9TVEFUVVNfRkFTVCwKKwlSRUdVTEFUT1JfU1RBVFVTX05PUk1BTCwKKwlSRUdVTEFUT1JfU1RBVFVTX0lETEUsCisJUkVHVUxBVE9SX1NUQVRVU19TVEFOREJZLAorfTsKKwogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX29wcyAtIHJlZ3VsYXRvciBvcGVyYXRpb25zLgogICoKLSAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyByZWd1bGF0b3Igb3BlcmF0aW9ucyB3aGljaCBjYW4gYmUgaW1wbGVtZW50ZWQgYnkKLSAqIHJlZ3VsYXRvciBjaGlwIGRyaXZlcnMuCi0gKgotICogQGVuYWJsZTogRW5hYmxlIHRoZSByZWd1bGF0b3IuCi0gKiBAZGlzYWJsZTogRGlzYWJsZSB0aGUgcmVndWxhdG9yLgorICogQGVuYWJsZTogQ29uZmlndXJlIHRoZSByZWd1bGF0b3IgYXMgZW5hYmxlZC4KKyAqIEBkaXNhYmxlOiBDb25maWd1cmUgdGhlIHJlZ3VsYXRvciBhcyBkaXNhYmxlZC4KICAqIEBpc19lbmFibGVkOiBSZXR1cm4gMSBpZiB0aGUgcmVndWxhdG9yIGlzIGVuYWJsZWQsIDAgb3RoZXJ3aXNlLgogICoKICAqIEBzZXRfdm9sdGFnZTogU2V0IHRoZSB2b2x0YWdlIGZvciB0aGUgcmVndWxhdG9yIHdpdGhpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkLgogICogICAgICAgICAgICAgICBUaGUgZHJpdmVyIHNob3VsZCBzZWxlY3QgdGhlIHZvbHRhZ2UgY2xvc2VzdCB0byBtaW5fdVYuCiAgKiBAZ2V0X3ZvbHRhZ2U6IFJldHVybiB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgdm9sdGFnZSBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBsaXN0X3ZvbHRhZ2U6IFJldHVybiBvbmUgb2YgdGhlIHN1cHBvcnRlZCB2b2x0YWdlcywgaW4gbWljcm92b2x0czsgemVybworICoJaWYgdGhlIHNlbGVjdG9yIGluZGljYXRlcyBhIHZvbHRhZ2UgdGhhdCBpcyB1bnVzYWJsZSBvbiB0aGlzIHN5c3RlbTsKKyAqCW9yIG5lZ2F0aXZlIGVycm5vLiAgU2VsZWN0b3JzIHJhbmdlIGZyb20gemVybyB0byBvbmUgbGVzcyB0aGFuCisgKglyZWd1bGF0b3JfZGVzYy5uX3ZvbHRhZ2VzLiAgVm9sdGFnZXMgbWF5IGJlIHJlcG9ydGVkIGluIGFueSBvcmRlci4KICAqCiAgKiBAc2V0X2N1cnJlbnRfbGltaXQ6IENvbmZpZ3VyZSBhIGxpbWl0IGZvciBhIGN1cnJlbnQtbGltaXRlZCByZWd1bGF0b3IuCi0gKiBAZ2V0X2N1cnJlbnRfbGltaXQ6IEdldCB0aGUgbGltaXQgZm9yIGEgY3VycmVudC1saW1pdGVkIHJlZ3VsYXRvci4KKyAqIEBnZXRfY3VycmVudF9saW1pdDogR2V0IHRoZSBjb25maWd1cmVkIGxpbWl0IGZvciBhIGN1cnJlbnQtbGltaXRlZCByZWd1bGF0b3IuCiAgKgotICogQHNldF9tb2RlOiBTZXQgdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVndWxhdG9yLgotICogQGdldF9tb2RlOiBHZXQgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSByZWd1bGF0b3IuCisgKiBAZ2V0X21vZGU6IEdldCB0aGUgY29uZmlndXJlZCBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBnZXRfc3RhdHVzOiBSZXR1cm4gYWN0dWFsIChub3QgYXMtY29uZmlndXJlZCkgc3RhdHVzIG9mIHJlZ3VsYXRvciwgYXMgYQorICoJUkVHVUxBVE9SX1NUQVRVUyB2YWx1ZSAob3IgbmVnYXRpdmUgZXJybm8pCiAgKiBAZ2V0X29wdGltdW1fbW9kZTogR2V0IHRoZSBtb3N0IGVmZmljaWVudCBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvcgogICogICAgICAgICAgICAgICAgICAgIHdoZW4gcnVubmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KICAqCkBAIC01MSw5ICs2NCwxNSBAQAogICogICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbmRlZC4KICAqIEBzZXRfc3VzcGVuZF9tb2RlOiBTZXQgdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVndWxhdG9yIHdoZW4gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGlzIHN1c3BlbmRlZC4KKyAqCisgKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgcmVndWxhdG9yIG9wZXJhdGlvbnMgd2hpY2ggY2FuIGJlIGltcGxlbWVudGVkIGJ5CisgKiByZWd1bGF0b3IgY2hpcCBkcml2ZXJzLgogICovCiBzdHJ1Y3QgcmVndWxhdG9yX29wcyB7CiAKKwkvKiBlbnVtZXJhdGUgc3VwcG9ydGVkIHZvbHRhZ2VzICovCisJaW50ICgqbGlzdF92b2x0YWdlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgdW5zaWduZWQgc2VsZWN0b3IpOworCiAJLyogZ2V0L3NldCByZWd1bGF0b3Igdm9sdGFnZSAqLwogCWludCAoKnNldF92b2x0YWdlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiAJaW50ICgqZ2V0X3ZvbHRhZ2UpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKQEAgLTcyLDYgKzkxLDEzIEBACiAJaW50ICgqc2V0X21vZGUpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiAJdW5zaWduZWQgaW50ICgqZ2V0X21vZGUpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKIAorCS8qIHJlcG9ydCByZWd1bGF0b3Igc3RhdHVzIC4uLiBtb3N0IG90aGVyIGFjY2Vzc29ycyByZXBvcnQKKwkgKiBjb250cm9sIGlucHV0cywgdGhpcyByZXBvcnRzIHJlc3VsdHMgb2YgY29tYmluaW5nIGlucHV0cworCSAqIGZyb20gTGludXggKGFuZCBvdGhlciBzb3VyY2VzKSB3aXRoIHRoZSBhY3R1YWwgbG9hZC4KKwkgKiByZXR1cm5zIFJFR1VMQVRPUl9TVEFUVVNfKiBvciBuZWdhdGl2ZSBlcnJuby4KKwkgKi8KKwlpbnQgKCpnZXRfc3RhdHVzKShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKKwogCS8qIGdldCBtb3N0IGVmZmljaWVudCByZWd1bGF0b3Igb3BlcmF0aW5nIG1vZGUgZm9yIGxvYWQgKi8KIAl1bnNpZ25lZCBpbnQgKCpnZXRfb3B0aW11bV9tb2RlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgaW50IGlucHV0X3VWLAogCQkJCQkgIGludCBvdXRwdXRfdVYsIGludCBsb2FkX3VBKTsKQEAgLTEwNiw2ICsxMzIsNyBAQAogICoKICAqIEBuYW1lOiBJZGVudGlmeWluZyBuYW1lIGZvciB0aGUgcmVndWxhdG9yLgogICogQGlkOiBOdW1lcmljYWwgaWRlbnRpZmllciBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBuX3ZvbHRhZ2VzOiBOdW1iZXIgb2Ygc2VsZWN0b3JzIGF2YWlsYWJsZSBmb3Igb3BzLmxpc3Rfdm9sdGFnZSgpLgogICogQG9wczogUmVndWxhdG9yIG9wZXJhdGlvbnMgdGFibGUuCiAgKiBAaXJxOiBJbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGUgcmVndWxhdG9yLgogICogQHR5cGU6IEluZGljYXRlcyBpZiB0aGUgcmVndWxhdG9yIGlzIGEgdm9sdGFnZSBvciBjdXJyZW50IHJlZ3VsYXRvci4KQEAgLTExNCwxNCArMTQxLDQ4IEBACiBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGlkOworCXVuc2lnbmVkIG5fdm9sdGFnZXM7CiAJc3RydWN0IHJlZ3VsYXRvcl9vcHMgKm9wczsKIAlpbnQgaXJxOwogCWVudW0gcmVndWxhdG9yX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIH07CiAKKy8qCisgKiBzdHJ1Y3QgcmVndWxhdG9yX2RldgorICoKKyAqIFZvbHRhZ2UgLyBDdXJyZW50IHJlZ3VsYXRvciBjbGFzcyBkZXZpY2UuIE9uZSBmb3IgZWFjaAorICogcmVndWxhdG9yLgorICoKKyAqIFRoaXMgc2hvdWxkICpub3QqIGJlIHVzZWQgZGlyZWN0bHkgYnkgYW55dGhpbmcgZXhjZXB0IHRoZSByZWd1bGF0b3IKKyAqIGNvcmUgYW5kIG5vdGlmaWNhdGlvbiBpbmplY3Rpb24gKHdoaWNoIHNob3VsZCB0YWtlIHRoZSBtdXRleCBhbmQgZG8KKyAqIG5vIG90aGVyIGRpcmVjdCBhY2Nlc3MpLgorICovCitzdHJ1Y3QgcmVndWxhdG9yX2RldiB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjOworCWludCB1c2VfY291bnQ7CisKKwkvKiBsaXN0cyB3ZSBiZWxvbmcgdG8gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGxpc3Qgb2YgYWxsIHJlZ3VsYXRvcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OyAvKiBsaXN0IG9mIHN1cHBsaWVkIHJlZ3VsYXRvcnMgKi8KKworCS8qIGxpc3RzIHdlIG93biAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29uc3VtZXJfbGlzdDsgLyogY29uc3VtZXJzIHdlIHN1cHBseSAqLworCXN0cnVjdCBsaXN0X2hlYWQgc3VwcGx5X2xpc3Q7IC8qIHJlZ3VsYXRvcnMgd2Ugc3VwcGx5ICovCisKKwlzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBub3RpZmllcjsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIGNvbnN1bWVyIGxvY2sgKi8KKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHM7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnN1cHBseTsJLyogZm9yIHRyZWUgKi8KKworCXZvaWQgKnJlZ19kYXRhOwkJLyogcmVndWxhdG9yX2RldiBkYXRhICovCit9OworCiBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0Jc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcml2ZXJfZGF0YSk7CisJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCXZvaWQgKmRyaXZlcl9kYXRhKTsKIHZvaWQgcmVndWxhdG9yX3VucmVnaXN0ZXIoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpOwogCiBpbnQgcmVndWxhdG9yX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZml4ZWQuaAppbmRleCAxMzg3YTVkLi45MWI0ZGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmgKQEAgLTE0LDkgKzE0LDEyIEBACiAjaWZuZGVmIF9fUkVHVUxBVE9SX0ZJWEVEX0gKICNkZWZpbmUgX19SRUdVTEFUT1JfRklYRURfSAogCitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YTsKKwogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHsKIAljb25zdCBjaGFyICpzdXBwbHlfbmFtZTsKIAlpbnQgbWljcm92b2x0czsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKaW5kZXggMzc5NDc3My4uYmFjNjRmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTczLDcgKzczLDkgQEAKICAqCiAgKiBAYWx3YXlzX29uOiBTZXQgaWYgdGhlIHJlZ3VsYXRvciBzaG91bGQgbmV2ZXIgYmUgZGlzYWJsZWQuCiAgKiBAYm9vdF9vbjogU2V0IGlmIHRoZSByZWd1bGF0b3IgaXMgZW5hYmxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgaW5pdGlhbGx5Ci0gKiAgICAgICAgICAgc3RhcnRlZC4KKyAqICAgICAgICAgICBzdGFydGVkLiAgSWYgdGhlIHJlZ3VsYXRvciBpcyBub3QgZW5hYmxlZCBieSB0aGUgaGFyZHdhcmUgb3IKKyAqICAgICAgICAgICBib290bG9hZGVyIHRoZW4gaXQgd2lsbCBiZSBlbmFibGVkIHdoZW4gdGhlIGNvbnN0cmFpbnRzIGFyZQorICogICAgICAgICAgIGFwcGxpZWQuCiAgKiBAYXBwbHlfdVY6IEFwcGx5IHRoZSB2b2x0YWdlIGNvbnN0cmFpbnQgd2hlbiBpbml0aWFsaXNpbmcuCiAgKgogICogQGlucHV0X3VWOiBJbnB1dCB2b2x0YWdlIGZvciByZWd1bGF0b3Igd2hlbiBzdXBwbGllZCBieSBhbm90aGVyIHJlZ3VsYXRvci4KQEAgLTgzLDYgKzg1LDcgQEAKICAqIEBzdGF0ZV9zdGFuZGJ5OiBTdGF0ZSBmb3IgcmVndWxhdG9yIHdoZW4gc3lzdGVtIGlzIHN1c3BlbmRlZCBpbiBzdGFuZGJ5CiAgKiAgICAgICAgICAgICAgICAgbW9kZS4KICAqIEBpbml0aWFsX3N0YXRlOiBTdXNwZW5kIHN0YXRlIHRvIHNldCBieSBkZWZhdWx0LgorICogQGluaXRpYWxfbW9kZTogTW9kZSB0byBzZXQgYXQgc3RhcnR1cC4KICAqLwogc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgewogCkBAIC0xMTEsNiArMTE0LDkgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX3N0YXRlIHN0YXRlX3N0YW5kYnk7CiAJc3VzcGVuZF9zdGF0ZV90IGluaXRpYWxfc3RhdGU7IC8qIHN1c3BlbmQgc3RhdGUgdG8gc2V0IGF0IGluaXQgKi8KIAorCS8qIG1vZGUgdG8gc2V0IG9uIHN0YXJ0dXAgKi8KKwl1bnNpZ25lZCBpbnQgaW5pdGlhbF9tb2RlOworCiAJLyogY29uc3RyaWFudCBmbGFncyAqLwogCXVuc2lnbmVkIGFsd2F5c19vbjoxOwkvKiByZWd1bGF0b3IgbmV2ZXIgb2ZmIHdoZW4gc3lzdGVtIGlzIG9uICovCiAJdW5zaWduZWQgYm9vdF9vbjoxOwkvKiBib290bG9hZGVyL2Zpcm13YXJlIGVuYWJsZWQgcmVndWxhdG9yICovCkBAIC0xNjAsNCArMTY2LDYgQEAKIAogaW50IHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIAordm9pZCByZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHModm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oCmluZGV4IGIzYjM1OTYuLmUxYjdiMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgKQEAgLTgsNyArOCw3IEBACiBzdHJ1Y3QgcmluZ19idWZmZXJfaXRlcjsKIAogLyoKLSAqIERvbid0IHJlZmVyZW5jZSB0aGlzIHN0cnVjdCBkaXJlY3RseSwgdXNlIGZ1bmN0aW9ucyBiZWxvdy4KKyAqIERvbid0IHJlZmVyIHRvIHRoaXMgc3RydWN0IGRpcmVjdGx5LCB1c2UgZnVuY3Rpb25zIGJlbG93LgogICovCiBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgewogCXUzMgkJdHlwZToyLCBsZW46MywgdGltZV9kZWx0YToyNzsKQEAgLTE4LDEwICsxOCwxMyBAQAogLyoqCiAgKiBlbnVtIHJpbmdfYnVmZmVyX3R5cGUgLSBpbnRlcm5hbCByaW5nIGJ1ZmZlciB0eXBlcwogICoKLSAqIEBSSU5HQlVGX1RZUEVfUEFERElORzoJTGVmdCBvdmVyIHBhZ2UgcGFkZGluZwotICoJCQkJIGFycmF5IGlzIGlnbm9yZWQKLSAqCQkJCSBzaXplIGlzIHZhcmlhYmxlIGRlcGVuZGluZyBvbiBob3cgbXVjaAorICogQFJJTkdCVUZfVFlQRV9QQURESU5HOglMZWZ0IG92ZXIgcGFnZSBwYWRkaW5nIG9yIGRpc2NhcmRlZCBldmVudAorICoJCQkJIElmIHRpbWVfZGVsdGEgaXMgMDoKKyAqCQkJCSAgYXJyYXkgaXMgaWdub3JlZAorICoJCQkJICBzaXplIGlzIHZhcmlhYmxlIGRlcGVuZGluZyBvbiBob3cgbXVjaAogICoJCQkJICBwYWRkaW5nIGlzIG5lZWRlZAorICoJCQkJIElmIHRpbWVfZGVsdGEgaXMgbm9uIHplcm86CisgKgkJCQkgIGV2ZXJ5dGhpbmcgZWxzZSBzYW1lIGFzIFJJTkdCVUZfVFlQRV9EQVRBCiAgKgogICogQFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoJRXh0ZW5kIHRoZSB0aW1lIGRlbHRhCiAgKgkJCQkgYXJyYXlbMF0gPSB0aW1lIGRlbHRhICgyOCAuLiA1OSkKQEAgLTY1LDYgKzY4LDggQEAKIAlyZXR1cm4gZXZlbnQtPnRpbWVfZGVsdGE7CiB9CiAKK3ZvaWQgcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KTsKKwogLyoKICAqIHNpemUgaXMgaW4gYnl0ZXMgZm9yIGVhY2ggcGVyIENQVSBidWZmZXIuCiAgKi8KQEAgLTc0LDEzICs3OSwxMCBAQAogCiBpbnQgcmluZ19idWZmZXJfcmVzaXplKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCi1zdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgotcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAotCQkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAotCQkJIHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBsZW5ndGgpOwogaW50IHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCi0JCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KTsKIGludCByaW5nX2J1ZmZlcl93cml0ZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgsIHZvaWQgKmRhdGEpOwogCkBAIC0xMjEsMTcgKzEyMywxOSBAQAogdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7CiB1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKIAotdTY0IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoaW50IGNwdSk7Ci12b2lkIHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGludCBjcHUsIHU2NCAqdHMpOwordTY0IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOwordm9pZCByaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJCQkgICAgICBpbnQgY3B1LCB1NjQgKnRzKTsKK3ZvaWQgcmluZ19idWZmZXJfc2V0X2Nsb2NrKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgdTY0ICgqY2xvY2spKHZvaWQpKTsKIAotdm9pZCB0cmFjaW5nX29uKHZvaWQpOwotdm9pZCB0cmFjaW5nX29mZih2b2lkKTsKLXZvaWQgdHJhY2luZ19vZmZfcGVybWFuZW50KHZvaWQpOworc2l6ZV90IHJpbmdfYnVmZmVyX3BhZ2VfbGVuKHZvaWQgKnBhZ2UpOworCiAKIHZvaWQgKnJpbmdfYnVmZmVyX2FsbG9jX3JlYWRfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcik7CiB2b2lkIHJpbmdfYnVmZmVyX2ZyZWVfcmVhZF9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB2b2lkICpkYXRhKTsKLWludCByaW5nX2J1ZmZlcl9yZWFkX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCi0JCQkgIHZvaWQgKipkYXRhX3BhZ2UsIGludCBjcHUsIGludCBmdWxsKTsKK2ludCByaW5nX2J1ZmZlcl9yZWFkX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIHZvaWQgKipkYXRhX3BhZ2UsCisJCQkgIHNpemVfdCBsZW4sIGludCBjcHUsIGludCBmdWxsKTsKIAogZW51bSByaW5nX2J1ZmZlcl9mbGFncyB7CiAJUkJfRkxfT1ZFUldSSVRFCQk9IDEgPDwgMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLXYzMDIwLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy12MzAyMC5oCmluZGV4IGJmNzRlNjMuLjhiYTY0NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLXYzMDIwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMtdjMwMjAuaApAQCAtMTQsNiArMTQsMTIgQEAKICAqIGlzIHVzZWQgZGVwZW5kcyBvbiB0aGUgYm9hcmQuICovCiBzdHJ1Y3QgdjMwMjBfcGxhdGZvcm1fZGF0YSB7CiAJaW50IGxlZnRzaGlmdDsgLyogKDE8PChsZWZ0c2hpZnQpKSAmIHJlYWRsKCkgKi8KKworCWludCB1c2VfZ3BpbzoxOworCXVuc2lnbmVkIGludCBncGlvX2NzOworCXVuc2lnbmVkIGludCBncGlvX3dyOworCXVuc2lnbmVkIGludCBncGlvX3JkOworCXVuc2lnbmVkIGludCBncGlvX2lvOwogfTsKIAogI2RlZmluZSBWMzAyMF9TVEFUVVNfMAkweDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggNDgxZmFkMy4uYjk0ZjM1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtNjgsNyArNjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhdGguaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9waWQuaD4KQEAgLTk3LDYgKzk3LDcgQEAKIHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkOwogc3RydWN0IGJpbzsKIHN0cnVjdCBidHNfdHJhY2VyOworc3RydWN0IGZzX3N0cnVjdDsKIAogLyoKICAqIExpc3Qgb2YgZmxhZ3Mgd2Ugd2FudCB0byBzaGFyZSBmb3Iga2VybmVsIHRocmVhZHMsCkBAIC0xMzcsNiArMTM4LDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5yX2FjdGl2ZSh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5yX2lvd2FpdCh2b2lkKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3BhcmVudF9pcCh1bnNpZ25lZCBsb25nIGFkZHIpOworCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiBzdHJ1Y3QgY2ZzX3JxOwogc3RydWN0IHRhc2tfZ3JvdXA7CkBAIC01NDcsMjUgKzU1MCw4IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNwdV90aW1lcnNbM107CiAKLQkvKiBqb2IgY29udHJvbCBJRHMgKi8KLQotCS8qCi0JICogcGdycCBhbmQgc2Vzc2lvbiBmaWVsZHMgYXJlIGRlcHJlY2F0ZWQuCi0JICogdXNlIHRoZSB0YXNrX3Nlc3Npb25fWG5yIGFuZCB0YXNrX3BncnBfWG5yIHJvdXRpbmVzIGJlbG93Ci0JICovCi0KLQl1bmlvbiB7Ci0JCXBpZF90IHBncnAgX19kZXByZWNhdGVkOwotCQlwaWRfdCBfX3BncnA7Ci0JfTsKLQogCXN0cnVjdCBwaWQgKnR0eV9vbGRfcGdycDsKIAotCXVuaW9uIHsKLQkJcGlkX3Qgc2Vzc2lvbiBfX2RlcHJlY2F0ZWQ7Ci0JCXBpZF90IF9fc2Vzc2lvbjsKLQl9OwotCiAJLyogYm9vbGVhbiB2YWx1ZSBmb3Igc2Vzc2lvbiBncm91cCBsZWFkZXIgKi8KIAlpbnQgbGVhZGVyOwogCkBAIC0xNDIxLDYgKzE0MDcsOCBAQAogCWludCBjdXJyX3JldF9zdGFjazsKIAkvKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciByZXR1cm4gZnVuY3Rpb24gdHJhY2luZyAqLwogCXN0cnVjdCBmdHJhY2VfcmV0X3N0YWNrCSpyZXRfc3RhY2s7CisJLyogdGltZSBzdGFtcCBmb3IgbGFzdCBzY2hlZHVsZSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBmdHJhY2VfdGltZXN0YW1wOwogCS8qCiAJICogTnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiB0cmFjZWQKIAkgKiBiZWNhdXNlIG9mIGRlcHRoIG92ZXJydW4uCkBAIC0xNDY5LDE2ICsxNDU3LDYgQEAKIAlyZXR1cm4gcnRfcHJpbyhwLT5wcmlvKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF90YXNrX3Nlc3Npb24oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHBpZF90IHNlc3Npb24pCi17Ci0JdHNrLT5zaWduYWwtPl9fc2Vzc2lvbiA9IHNlc3Npb247Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19wZ3JwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBwaWRfdCBwZ3JwKQotewotCXRzay0+c2lnbmFsLT5fX3BncnAgPSBwZ3JwOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWQgKnRhc2tfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlyZXR1cm4gdGFzay0+cGlkc1tQSURUWVBFX1BJRF0ucGlkOwpAQCAtMTQ4OSw2ICsxNDY3LDExIEBACiAJcmV0dXJuIHRhc2stPmdyb3VwX2xlYWRlci0+cGlkc1tQSURUWVBFX1BJRF0ucGlkOwogfQogCisvKgorICogV2l0aG91dCB0YXNrbGlzdCBvciByY3UgbG9jayBpdCBpcyBub3Qgc2FmZSB0byBkZXJlZmVyZW5jZQorICogdGhlIHJlc3VsdCBvZiB0YXNrX3BncnAvdGFza19zZXNzaW9uIGV2ZW4gaWYgdGFzayA9PSBjdXJyZW50LAorICogd2UgY2FuIHJhY2Ugd2l0aCBhbm90aGVyIHRocmVhZCBkb2luZyBzeXNfc2V0c2lkL3N5c19zZXRwZ2lkLgorICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWQgKnRhc2tfcGdycChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJcmV0dXJuIHRhc2stPmdyb3VwX2xlYWRlci0+cGlkc1tQSURUWVBFX1BHSURdLnBpZDsKQEAgLTE1MTQsMTcgKzE0OTcsMjMgQEAKICAqCiAgKiBzZWUgYWxzbyBwaWRfbnIoKSBldGMgaW4gaW5jbHVkZS9saW51eC9waWQuaAogICovCitwaWRfdCBfX3Rhc2tfcGlkX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgZW51bSBwaWRfdHlwZSB0eXBlLAorCQkJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKIAogc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3BpZF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlyZXR1cm4gdHNrLT5waWQ7CiB9CiAKLXBpZF90IHRhc2tfcGlkX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOworc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3BpZF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQoreworCXJldHVybiBfX3Rhc2tfcGlkX25yX25zKHRzaywgUElEVFlQRV9QSUQsIG5zKTsKK30KIAogc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3BpZF92bnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JcmV0dXJuIHBpZF92bnIodGFza19waWQodHNrKSk7CisJcmV0dXJuIF9fdGFza19waWRfbnJfbnModHNrLCBQSURUWVBFX1BJRCwgTlVMTCk7CiB9CiAKIApAQCAtMTU0MSwzMSArMTUzMCwzNCBAQAogfQogCiAKLXN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19wZ3JwX25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3BncnBfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKIHsKLQlyZXR1cm4gdHNrLT5zaWduYWwtPl9fcGdycDsKKwlyZXR1cm4gX190YXNrX3BpZF9ucl9ucyh0c2ssIFBJRFRZUEVfUEdJRCwgbnMpOwogfQogCi1waWRfdCB0YXNrX3BncnBfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7Ci0KIHN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19wZ3JwX3ZucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlyZXR1cm4gcGlkX3Zucih0YXNrX3BncnAodHNrKSk7CisJcmV0dXJuIF9fdGFza19waWRfbnJfbnModHNrLCBQSURUWVBFX1BHSUQsIE5VTEwpOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19zZXNzaW9uX25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3Nlc3Npb25fbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKIHsKLQlyZXR1cm4gdHNrLT5zaWduYWwtPl9fc2Vzc2lvbjsKKwlyZXR1cm4gX190YXNrX3BpZF9ucl9ucyh0c2ssIFBJRFRZUEVfU0lELCBucyk7CiB9CiAKLXBpZF90IHRhc2tfc2Vzc2lvbl9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKLQogc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3Nlc3Npb25fdm5yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXJldHVybiBwaWRfdm5yKHRhc2tfc2Vzc2lvbih0c2spKTsKKwlyZXR1cm4gX190YXNrX3BpZF9ucl9ucyh0c2ssIFBJRFRZUEVfU0lELCBOVUxMKTsKIH0KIAorLyogb2Jzb2xldGUsIGRvIG5vdCB1c2UgKi8KK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19wZ3JwX25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiB0YXNrX3BncnBfbnJfbnModHNrLCAmaW5pdF9waWRfbnMpOworfQogCiAvKioKICAqIHBpZF9hbGl2ZSAtIGNoZWNrIHRoYXQgYSB0YXNrIHN0cnVjdHVyZSBpcyBub3Qgc3RhbGUKQEAgLTE5NzUsNyArMTk2Nyw4IEBACiAvKiBBbGxvY2F0ZSBhIG5ldyBtbSBzdHJ1Y3R1cmUgYW5kIGNvcHkgY29udGVudHMgZnJvbSB0c2stPm1tICovCiBleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqZHVwX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAotZXh0ZXJuIGludCAgY29weV90aHJlYWQoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gaW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBmbHVzaF90aHJlYWQodm9pZCk7CiBleHRlcm4gdm9pZCBleGl0X3RocmVhZCh2b2lkKTsKIApAQCAtMjA2MCw2ICsyMDUzLDExIEBACiAjZGVmaW5lIGRlbGF5X2dyb3VwX2xlYWRlcihwKSBcCiAJCSh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApICYmICF0aHJlYWRfZ3JvdXBfZW1wdHkocCkpCiAKK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfZGV0YWNoZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiBwLT5leGl0X3NpZ25hbCA9PSAtMTsKK30KKwogLyoKICAqIFByb3RlY3RzIC0+ZnMsIC0+ZmlsZXMsIC0+bW0sIC0+Z3JvdXBfaW5mbywgLT5jb21tLCBrZXlyaW5nCiAgKiBzdWJzY3JpcHRpb25zIGFuZCBzeW5jaHJvbmlzZXMgd2l0aCB3YWl0NCgpLiAgQWxzbyB1c2VkIGluIHByb2Nmcy4gIEFsc28KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaAppbmRleCA2Y2E2YTdiLi5mNDUyMzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIGttYWxsb2Nfc2l6ZXMuaCBuZWVkcyBQQUdFX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4JCS8qIGttYWxsb2Nfc2l6ZXMuaCBuZWVkcyBMMV9DQUNIRV9CWVRFUyAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8dHJhY2Uva21lbXRyYWNlLmg+CiAKIC8qIFNpemUgZGVzY3JpcHRpb24gc3RydWN0IGZvciBnZW5lcmFsIGNhY2hlcy4gKi8KIHN0cnVjdCBjYWNoZV9zaXplcyB7CkBAIC0yOCw4ICsyOSwyNiBAQAogdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7CiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKIAotc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKTsKK2V4dGVybiBzaXplX3Qgc2xhYl9idWZmZXJfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKTsKKyNlbHNlCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKgora21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKQogeworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOworfQorc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9idWZmZXJfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCit7CisJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKKwl2b2lkICpyZXQ7CisKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKIAkJaW50IGkgPSAwOwogCkBAIC00NywxMCArNjYsMTcgQEAKIGZvdW5kOgogI2lmZGVmIENPTkZJR19aT05FX0RNQQogCQlpZiAoZmxhZ3MgJiBHRlBfRE1BKQotCQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MobWFsbG9jX3NpemVzW2ldLmNzX2RtYWNhY2hlcCwKLQkJCQkJCWZsYWdzKTsKKwkJCWNhY2hlcCA9IG1hbGxvY19zaXplc1tpXS5jc19kbWFjYWNoZXA7CisJCWVsc2UKICNlbmRpZgotCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhtYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwLCBmbGFncyk7CisJCQljYWNoZXAgPSBtYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwOworCisJCXJldCA9IGttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShjYWNoZXAsIGZsYWdzKTsKKworCQlrbWVtdHJhY2VfbWFya19hbGxvYyhLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBfVEhJU19JUF8sIHJldCwKKwkJCQkgICAgIHNpemUsIHNsYWJfYnVmZmVyX3NpemUoY2FjaGVwKSwgZmxhZ3MpOworCisJCXJldHVybiByZXQ7CiAJfQogCXJldHVybiBfX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpOwogfQpAQCAtNTksOCArODUsMjUgQEAKIGV4dGVybiB2b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIGV4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIAotc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCQkJICAgZ2ZwX3QgZmxhZ3MsCisJCQkJCSAgIGludCBub2RlaWQpOworI2Vsc2UKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCitrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAorCQkJICAgICAgZ2ZwX3QgZmxhZ3MsCisJCQkgICAgICBpbnQgbm9kZWlkKQogeworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQoreworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CisJdm9pZCAqcmV0OworCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7CiAJCWludCBpID0gMDsKIApAQCAtNzgsMTEgKzEyMSwxOCBAQAogZm91bmQ6CiAjaWZkZWYgQ09ORklHX1pPTkVfRE1BCiAJCWlmIChmbGFncyAmIEdGUF9ETUEpCi0JCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKG1hbGxvY19zaXplc1tpXS5jc19kbWFjYWNoZXAsCi0JCQkJCQlmbGFncywgbm9kZSk7CisJCQljYWNoZXAgPSBtYWxsb2Nfc2l6ZXNbaV0uY3NfZG1hY2FjaGVwOworCQllbHNlCiAjZW5kaWYKLQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShtYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwLAotCQkJCQkJZmxhZ3MsIG5vZGUpOworCQkJY2FjaGVwID0gbWFsbG9jX3NpemVzW2ldLmNzX2NhY2hlcDsKKworCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShjYWNoZXAsIGZsYWdzLCBub2RlKTsKKworCQlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsIF9USElTX0lQXywKKwkJCQkJICByZXQsIHNpemUsIHNsYWJfYnVmZmVyX3NpemUoY2FjaGVwKSwKKwkJCQkJICBmbGFncywgbm9kZSk7CisKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0dXJuIF9fa21hbGxvY19ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaAppbmRleCA1OWEzZmE0Li4wZWMwMGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Nsb2JfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbG9iX2RlZi5oCkBAIC0zLDE0ICszLDE1IEBACiAKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCQkJICAgICAgZ2ZwX3QgZmxhZ3MpCiB7CiAJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCAtMSk7CiB9CiAKIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlyZXR1cm4gX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpOwogfQpAQCAtMjMsMTIgKzI0LDEyIEBACiAgKiBrbWFsbG9jIGlzIHRoZSBub3JtYWwgbWV0aG9kIG9mIGFsbG9jYXRpbmcgbWVtb3J5CiAgKiBpbiB0aGUga2VybmVsLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKIAlyZXR1cm4gX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIC0xKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXJldHVybiBrbWFsbG9jKHNpemUsIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xvdy13b3JrLmggYi9pbmNsdWRlL2xpbnV4L3Nsb3ctd29yay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTU4MjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Nsb3ctd29yay5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qIFdvcmtlciB0aHJlYWQgcG9vbCBmb3Igc2xvdyBpdGVtcywgc3VjaCBhcyBmaWxlc3lzdGVtIGxvb2t1cHMgb3IgbWtkaXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TTE9XX1dPUktfSAorI2RlZmluZSBfTElOVVhfU0xPV19XT1JLX0gKKworI2lmZGVmIENPTkZJR19TTE9XX1dPUksKKworI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorCitzdHJ1Y3Qgc2xvd193b3JrOworCisvKgorICogVGhlIG9wZXJhdGlvbnMgdXNlZCB0byBzdXBwb3J0IHNsb3cgd29yayBpdGVtcworICovCitzdHJ1Y3Qgc2xvd193b3JrX29wcyB7CisJLyogZ2V0IGEgcmVmIG9uIGEgd29yayBpdGVtCisJICogLSByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtdmUgaWYgbm90CisJICovCisJaW50ICgqZ2V0X3JlZikoc3RydWN0IHNsb3dfd29yayAqd29yayk7CisKKwkvKiBkaXNjYXJkIGEgcmVmIHRvIGEgd29yayBpdGVtICovCisJdm9pZCAoKnB1dF9yZWYpKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworCisJLyogZXhlY3V0ZSBhIHdvcmsgaXRlbSAqLworCXZvaWQgKCpleGVjdXRlKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKK307CisKKy8qCisgKiBBIHNsb3cgd29yayBpdGVtCisgKiAtIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIHBhcmVudCBvYmplY3QgYnkgdGhlIHRocmVhZCBwb29sIHdoZW4gaXQgaXMKKyAqICAgcXVldWVkCisgKi8KK3N0cnVjdCBzbG93X3dvcmsgeworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2RlZmluZSBTTE9XX1dPUktfUEVORElORwkwCS8qIGl0ZW0gcGVuZGluZyAoZnVydGhlcikgZXhlY3V0aW9uICovCisjZGVmaW5lIFNMT1dfV09SS19FWEVDVVRJTkcJMQkvKiBpdGVtIGN1cnJlbnRseSBleGVjdXRpbmcgKi8KKyNkZWZpbmUgU0xPV19XT1JLX0VOUV9ERUZFUlJFRAkyCS8qIGl0ZW0gZW5xdWV1ZSBkZWZlcnJlZCAqLworI2RlZmluZSBTTE9XX1dPUktfVkVSWV9TTE9XCTMJLyogaXRlbSBpcyB2ZXJ5IHNsb3cgKi8KKwljb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIHRhYmxlIGZvciB0aGlzIGl0ZW0gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CS8qIGxpbmsgaW4gcXVldWUgKi8KK307CisKKy8qKgorICogc2xvd193b3JrX2luaXQgLSBJbml0aWFsaXNlIGEgc2xvdyB3b3JrIGl0ZW0KKyAqIEB3b3JrOiBUaGUgd29yayBpdGVtIHRvIGluaXRpYWxpc2UKKyAqIEBvcHM6IFRoZSBvcGVyYXRpb25zIHRvIHVzZSB0byBoYW5kbGUgdGhlIHNsb3cgd29yayBpdGVtCisgKgorICogSW5pdGlhbGlzZSBhIHNsb3cgd29yayBpdGVtLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd193b3JrX2luaXQoc3RydWN0IHNsb3dfd29yayAqd29yaywKKwkJCQkgIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzICpvcHMpCit7CisJd29yay0+ZmxhZ3MgPSAwOworCXdvcmstPm9wcyA9IG9wczsKKwlJTklUX0xJU1RfSEVBRCgmd29yay0+bGluayk7Cit9CisKKy8qKgorICogc2xvd193b3JrX2luaXQgLSBJbml0aWFsaXNlIGEgdmVyeSBzbG93IHdvcmsgaXRlbQorICogQHdvcms6IFRoZSB3b3JrIGl0ZW0gdG8gaW5pdGlhbGlzZQorICogQG9wczogVGhlIG9wZXJhdGlvbnMgdG8gdXNlIHRvIGhhbmRsZSB0aGUgc2xvdyB3b3JrIGl0ZW0KKyAqCisgKiBJbml0aWFsaXNlIGEgdmVyeSBzbG93IHdvcmsgaXRlbS4gIFRoaXMgaXRlbSB3aWxsIGJlIHJlc3RyaWN0ZWQgc3VjaCB0aGF0CisgKiBvbmx5IGEgY2VydGFpbiBudW1iZXIgb2YgdGhlIHBvb2wgdGhyZWFkcyB3aWxsIGJlIGFibGUgdG8gZXhlY3V0ZSBpdGVtcyBvZgorICogdGhpcyB0eXBlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdnNsb3dfd29ya19pbml0KHN0cnVjdCBzbG93X3dvcmsgKndvcmssCisJCQkJICAgY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgKm9wcykKK3sKKwl3b3JrLT5mbGFncyA9IDEgPDwgU0xPV19XT1JLX1ZFUllfU0xPVzsKKwl3b3JrLT5vcHMgPSBvcHM7CisJSU5JVF9MSVNUX0hFQUQoJndvcmstPmxpbmspOworfQorCitleHRlcm4gaW50IHNsb3dfd29ya19lbnF1ZXVlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworZXh0ZXJuIGludCBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcih2b2lkKTsKK2V4dGVybiB2b2lkIHNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitleHRlcm4gY3RsX3RhYmxlIHNsb3dfd29ya19zeXNjdGxzW107CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19TTE9XX1dPUksgKi8KKyNlbmRpZiAvKiBfTElOVVhfU0xPV19XT1JLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAppbmRleCBlMzdiNmFhLi5hMWY5MDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPHRyYWNlL2ttZW10cmFjZS5oPgogCiBlbnVtIHN0YXRfaXRlbSB7CiAJQUxMT0NfRkFTVFBBVEgsCQkvKiBBbGxvY2F0aW9uIGZyb20gY3B1IHNsYWIgKi8KQEAgLTIxNywxMyArMjE4LDMxIEBACiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90KTsKIHZvaWQgKl9fa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpOwogCisjaWZkZWYgQ09ORklHX0tNRU1UUkFDRQorZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpOworI2Vsc2UKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCitrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHMsIGdmcGZsYWdzKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2NfbGFyZ2Uoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewotCXJldHVybiAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoZmxhZ3MgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSkpOworCXVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKwl2b2lkICpyZXQgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKGZsYWdzIHwgX19HRlBfQ09NUCwgb3JkZXIpOworCisJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1RISVNfSVBfLCByZXQsCisJCQkgICAgIHNpemUsIFBBR0VfU0laRSA8PCBvcmRlciwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKKwl2b2lkICpyZXQ7CisKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKIAkJaWYgKHNpemUgPiBTTFVCX01BWF9TSVpFKQogCQkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uoc2l6ZSwgZmxhZ3MpOwpAQCAtMjM0LDcgKzI1MywxMyBAQAogCQkJaWYgKCFzKQogCQkJCXJldHVybiBaRVJPX1NJWkVfUFRSOwogCi0JCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhzLCBmbGFncyk7CisJCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2UocywgZmxhZ3MpOworCisJCQlrbWVtdHJhY2VfbWFya19hbGxvYyhLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgICAgIF9USElTX0lQXywgcmV0LAorCQkJCQkgICAgIHNpemUsIHMtPnNpemUsIGZsYWdzKTsKKworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAlyZXR1cm4gX19rbWFsbG9jKHNpemUsIGZsYWdzKTsKQEAgLTI0NCw4ICsyNjksMjQgQEAKIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7CiAKKyNpZmRlZiBDT05GSUdfS01FTVRSQUNFCitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKnMsCisJCQkJCSAgIGdmcF90IGdmcGZsYWdzLAorCQkJCQkgICBpbnQgbm9kZSk7CisjZWxzZQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICoKK2ttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQkJICAgICAgZ2ZwX3QgZ2ZwZmxhZ3MsCisJCQkgICAgICBpbnQgbm9kZSkKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKHMsIGdmcGZsYWdzLCBub2RlKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogeworCXZvaWQgKnJldDsKKwogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJgogCQlzaXplIDw9IFNMVUJfTUFYX1NJWkUgJiYgIShmbGFncyAmIFNMVUJfRE1BKSkgewogCQkJc3RydWN0IGttZW1fY2FjaGUgKnMgPSBrbWFsbG9jX3NsYWIoc2l6ZSk7CkBAIC0yNTMsNyArMjk0LDEzIEBACiAJCWlmICghcykKIAkJCXJldHVybiBaRVJPX1NJWkVfUFRSOwogCi0JCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUocywgZmxhZ3MsIG5vZGUpOworCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShzLCBmbGFncywgbm9kZSk7CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgIF9USElTX0lQXywgcmV0LAorCQkJCQkgIHNpemUsIHMtPnNpemUsIGZsYWdzLCBub2RlKTsKKworCQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXAuaCBiL2luY2x1ZGUvbGludXgvc21wLmgKaW5kZXggYmJhY2I3Yi4uYTY5ZGI4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC0zOCw3ICszOCw3IEBACiAvKgogICogbWFpbiBjcm9zcy1DUFUgaW50ZXJmYWNlcywgaGFuZGxlcyBJTklULCBUTEIgZmx1c2gsIFNUT1AsIGV0Yy4KICAqIChkZWZpbmVkIGluIGFzbSBoZWFkZXIpOgotICovIAorICovCiAKIC8qCiAgKiBzdG9wcyBhbGwgQ1BVcyBidXQgdGhlIGN1cnJlbnQgb25lOgpAQCAtODIsNyArODIsOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGludCBjcHVpZCwgc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEpOwordm9pZCBfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1aWQsIHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhLAorCQkJCWludCB3YWl0KTsKIAogLyoKICAqIEdlbmVyaWMgYW5kIGFyY2ggaGVscGVycwpAQCAtMTIxLDYgKzEyMiw4IEBACiAKICNlbHNlIC8qICFTTVAgKi8KIAorc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkgeyB9CisKIC8qCiAgKglUaGVzZSBtYWNyb3MgZm9sZCB0aGUgU01QIGZ1bmN0aW9uYWxpdHkgaW50byBhIHNpbmdsZSBDUFUgc3lzdGVtCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2VlcHJvbS5oIGIvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKaW5kZXggMTA4NTIxMi4uMzA2ZTdiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fTElOVVhfU1BJX0VFUFJPTV9ICiAjZGVmaW5lIF9fTElOVVhfU1BJX0VFUFJPTV9ICiAKKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKwogLyoKICAqIFB1dCBvbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBpbiBwbGF0Zm9ybV9kYXRhIGZvciBTUEkgRUVQUk9NUyBoYW5kbGVkCiAgKiBieSB0aGUgImF0MjUiIGRyaXZlci4gIE9uIFNQSSwgbW9zdCBFRVBST01TIHVuZGVyc3RhbmQgdGhlIHNhbWUgY29yZQpAQCAtMTcsNiArMTksMTAgQEAKICNkZWZpbmUJRUVfQUREUjIJMHgwMDAyCQkJLyogMTYgYml0IGFkZHJzICovCiAjZGVmaW5lCUVFX0FERFIzCTB4MDAwNAkJCS8qIDI0IGJpdCBhZGRycyAqLwogI2RlZmluZQlFRV9SRUFET05MWQkweDAwMDgJCQkvKiBkaXNhbGxvdyB3cml0ZXMgKi8KKworCS8qIGZvciBleHBvcnRpbmcgdGhpcyBjaGlwJ3MgZGF0YSB0byBvdGhlciBrZXJuZWwgY29kZSAqLworCXZvaWQgKCpzZXR1cCkoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqbWVtLCB2b2lkICpjb250ZXh0KTsKKwl2b2lkICpjb250ZXh0OwogfTsKIAogI2VuZGlmIC8qIF9fTElOVVhfU1BJX0VFUFJPTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpX2dwaW8uaAppbmRleCAwZjAxYTBmLi5jYTY3ODJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfZ3Bpby5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NwaV9ncGlvLmgKQEAgLTI1LDEwICsyNSwxNiBAQAogICoJLi4uCiAgKgl9OwogICoKKyAqIElmIGNoaXBzZWxlY3QgaXMgbm90IHVzZWQgKHRoZXJlJ3Mgb25seSBvbmUgZGV2aWNlIG9uIHRoZSBidXMpLCBhc3NpZ24KKyAqIFNQSV9HUElPX05PX0NISVBTRUxFQ1QgdG8gdGhlIGNvbnRyb2xsZXJfZGF0YToKKyAqCQkuY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVDsKKyAqCiAgKiBJZiB0aGUgYml0YmFuZ2VkIGJ1cyBpcyBsYXRlciBzd2l0Y2hlZCB0byBhICJuYXRpdmUiIGNvbnRyb2xsZXIsCiAgKiB0aGF0IHBsYXRmb3JtX2RldmljZSBhbmQgY29udHJvbGxlcl9kYXRhIHNob3VsZCBiZSByZW1vdmVkLgogICovCiAKKyNkZWZpbmUgU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVAkJKCh1bnNpZ25lZCBsb25nKS0xbCkKKwogLyoqCiAgKiBzdHJ1Y3Qgc3BpX2dwaW9fcGxhdGZvcm1fZGF0YSAtIHBhcmFtZXRlciBmb3IgYml0YmFuZ2VkIFNQSSBtYXN0ZXIKICAqIEBzY2s6IG51bWJlciBvZiB0aGUgR1BJTyB1c2VkIGZvciBjbG9jayBvdXRwdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAppbmRleCBhMGM2NmEyLi4yNTJiMjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCkBAIC0xNTMsOSArMTUzLDExIEBACiAgZXh0ZXJuIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKTsKICBleHRlcm4gdm9pZCBfcmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spOwogIGV4dGVybiB2b2lkIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKTsKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfcmVhZF9sb2NrKGxvY2spCiAgZXh0ZXJuIGludCBfcmF3X3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV9sb2NrKHJ3bG9ja190ICpsb2NrKTsKKyNkZWZpbmUgX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3dyaXRlX2xvY2sobG9jaykKICBleHRlcm4gaW50IF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spOwogI2Vsc2UKQEAgLTE2NSw5ICsxNjcsMTMgQEAKICMgZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spCV9fcmF3X3NwaW5fdHJ5bG9jaygmKGxvY2spLT5yYXdfbG9jaykKICMgZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2sobG9jaykJCV9fcmF3X3NwaW5fdW5sb2NrKCYobG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd19yZWFkX2xvY2socndsb2NrKQkJX19yYXdfcmVhZF9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjIGRlZmluZSBfcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgXAorCQlfX3Jhd19yZWFkX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQogIyBkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrKQlfX3Jhd19yZWFkX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKICMgZGVmaW5lIF9yYXdfcmVhZF91bmxvY2socndsb2NrKQlfX3Jhd19yZWFkX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd193cml0ZV9sb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorIyBkZWZpbmUgX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBcCisJCV9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQogIyBkZWZpbmUgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfdHJ5bG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd193cml0ZV91bmxvY2socndsb2NrKQlfX3Jhd193cml0ZV91bmxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggODg1MjczOS4uNDg5MDE5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogZm9yIGlubGluZSAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CS8qIGZvciBzaXplX3QgKi8KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogZm9yIE5VTEwgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KIAogZXh0ZXJuIGNoYXIgKnN0cm5kdXBfdXNlcihjb25zdCBjaGFyIF9fdXNlciAqLCBsb25nKTsKIGV4dGVybiB2b2lkICptZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqLCBzaXplX3QpOwpAQCAtMTEyLDggKzExMywyMyBAQAogCiBleHRlcm4gYm9vbCBzeXNmc19zdHJlcShjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOwogCisjaWZkZWYgQ09ORklHX0JJTkFSWV9QUklOVEYKK2ludCB2YmluX3ByaW50Zih1MzIgKmJpbl9idWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CitpbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCBjb25zdCB1MzIgKmJpbl9idWYpOworaW50IGJwcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pIF9fcHJpbnRmKDMsIDQpOworI2VuZGlmCisKIGV4dGVybiBzc2l6ZV90IG1lbW9yeV9yZWFkX2Zyb21fYnVmZmVyKHZvaWQgKnRvLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywKIAkJCWNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBhdmFpbGFibGUpOwogCisvKioKKyAqIHN0cnN0YXJ0cyAtIGRvZXMgQHN0ciBzdGFydCB3aXRoIEBwcmVmaXg/CisgKiBAc3RyOiBzdHJpbmcgdG8gZXhhbWluZQorICogQHByZWZpeDogcHJlZml4IHRvIGxvb2sgZm9yLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc3Ryc3RhcnRzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXJldHVybiBzdHJuY21wKHN0ciwgcHJlZml4LCBzdHJsZW4ocHJlZml4KSkgPT0gMDsKK30KICNlbmRpZgogI2VuZGlmIC8qIF9MSU5VWF9TVFJJTkdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaCBiL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaAppbmRleCA5OWI4YmRiLi4wZmYyNzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5bmNsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeW5jbGluay5oCkBAIC0xMjUsNiArMTI1LDcgQEAKICNkZWZpbmUgTUdTTF9NT0RFX01PTk9TWU5DCTMKICNkZWZpbmUgTUdTTF9NT0RFX0JJU1lOQwk0CiAjZGVmaW5lIE1HU0xfTU9ERV9SQVcJCTYKKyNkZWZpbmUgTUdTTF9NT0RFX0JBU0VfQ0xPQ0sgICAgNwogCiAjZGVmaW5lIE1HU0xfQlVTX1RZUEVfSVNBCTEKICNkZWZpbmUgTUdTTF9CVVNfVFlQRV9FSVNBCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCBmOWY5MDBjLi42NDcwZjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+CiAjaW5jbHVkZSA8bGludXgva2V5Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNkZWZpbmUgX19TQ19ERUNMMSh0MSwgYTEpCXQxIGExCiAjZGVmaW5lIF9fU0NfREVDTDIodDIsIGEyLCAuLi4pIHQyIGEyLCBfX1NDX0RFQ0wxKF9fVkFfQVJHU19fKQpAQCAtOTUsNyArOTYsNDYgQEAKICNkZWZpbmUgX19TQ19URVNUNSh0NSwgYTUsIC4uLikJX19TQ19URVNUKHQ1KTsgX19TQ19URVNUNChfX1ZBX0FSR1NfXykKICNkZWZpbmUgX19TQ19URVNUNih0NiwgYTYsIC4uLikJX19TQ19URVNUKHQ2KTsgX19TQ19URVNUNShfX1ZBX0FSR1NfXykKIAorI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKKyNkZWZpbmUgX19TQ19TVFJfQURFQ0wxKHQsIGEpCQkjYQorI2RlZmluZSBfX1NDX1NUUl9BREVDTDIodCwgYSwgLi4uKQkjYSwgX19TQ19TVFJfQURFQ0wxKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9BREVDTDModCwgYSwgLi4uKQkjYSwgX19TQ19TVFJfQURFQ0wyKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9BREVDTDQodCwgYSwgLi4uKQkjYSwgX19TQ19TVFJfQURFQ0wzKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9BREVDTDUodCwgYSwgLi4uKQkjYSwgX19TQ19TVFJfQURFQ0w0KF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9BREVDTDYodCwgYSwgLi4uKQkjYSwgX19TQ19TVFJfQURFQ0w1KF9fVkFfQVJHU19fKQorCisjZGVmaW5lIF9fU0NfU1RSX1RERUNMMSh0LCBhKQkJI3QKKyNkZWZpbmUgX19TQ19TVFJfVERFQ0wyKHQsIGEsIC4uLikJI3QsIF9fU0NfU1RSX1RERUNMMShfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX19TQ19TVFJfVERFQ0wzKHQsIGEsIC4uLikJI3QsIF9fU0NfU1RSX1RERUNMMihfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX19TQ19TVFJfVERFQ0w0KHQsIGEsIC4uLikJI3QsIF9fU0NfU1RSX1RERUNMMyhfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX19TQ19TVFJfVERFQ0w1KHQsIGEsIC4uLikJI3QsIF9fU0NfU1RSX1RERUNMNChfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX19TQ19TVFJfVERFQ0w2KHQsIGEsIC4uLikJI3QsIF9fU0NfU1RSX1RERUNMNShfX1ZBX0FSR1NfXykKKworI2RlZmluZSBTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCBuYikJCQkJXAorCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3VzZWQJCVwKKwkgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQlcCisJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3N5c2NhbGxzX21ldGFkYXRhIikpKQlcCisJICBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lID0gewkJCQlcCisJCS5uYW1lIAkJPSAic3lzIiNzbmFtZSwJCQlcCisJCS5uYl9hcmdzIAk9IG5iLAkJCQlcCisJCS50eXBlcwkJPSB0eXBlc18jI3NuYW1lLAkJXAorCQkuYXJncwkJPSBhcmdzXyMjc25hbWUsCQkJXAorCX0KKworI2RlZmluZSBTWVNDQUxMX0RFRklORTAoc25hbWUpCQkJCQlcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJXAorCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKKwkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKKwkJLm5hbWUgCQk9ICJzeXNfIiNzbmFtZSwJCQlcCisJCS5uYl9hcmdzIAk9IDAsCQkJCVwKKwl9OwkJCQkJCQlcCisJYXNtbGlua2FnZSBsb25nIHN5c18jI3NuYW1lKHZvaWQpCisKKyNlbHNlCiAjZGVmaW5lIFNZU0NBTExfREVGSU5FMChuYW1lKQkgICBhc21saW5rYWdlIGxvbmcgc3lzXyMjbmFtZSh2b2lkKQorI2VuZGlmCisKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUxKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDEsIF8jI25hbWUsIF9fVkFfQVJHU19fKQogI2RlZmluZSBTWVNDQUxMX0RFRklORTIobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoMiwgXyMjbmFtZSwgX19WQV9BUkdTX18pCiAjZGVmaW5lIFNZU0NBTExfREVGSU5FMyhuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgzLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXykKQEAgLTExNywxMCArMTU3LDI2IEBACiAjZW5kaWYKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworI2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIC4uLikJCQkJXAorCXN0YXRpYyBjb25zdCBjaGFyICp0eXBlc18jI3NuYW1lW10gPSB7CQkJXAorCQlfX1NDX1NUUl9UREVDTCMjeChfX1ZBX0FSR1NfXykJCQlcCisJfTsJCQkJCQkJXAorCXN0YXRpYyBjb25zdCBjaGFyICphcmdzXyMjc25hbWVbXSA9IHsJCQlcCisJCV9fU0NfU1RSX0FERUNMIyN4KF9fVkFfQVJHU19fKQkJCVwKKwl9OwkJCQkJCQlcCisJU1lTQ0FMTF9NRVRBREFUQShzbmFtZSwgeCk7CQkJCVwKKwlfX1NZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIC4uLikJCQkJXAorCV9fU1lTQ0FMTF9ERUZJTkV4KHgsIHNuYW1lLCBfX1ZBX0FSR1NfXykKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUwogCiAjZGVmaW5lIFNZU0NBTExfREVGSU5FKG5hbWUpIHN0YXRpYyBpbmxpbmUgbG9uZyBTWVNDXyMjbmFtZQotI2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKQkJCQkJXAorCisjZGVmaW5lIF9fU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLikJCQkJCVwKIAlhc21saW5rYWdlIGxvbmcgc3lzIyNuYW1lKF9fU0NfREVDTCMjeChfX1ZBX0FSR1NfXykpOwkJXAogCXN0YXRpYyBpbmxpbmUgbG9uZyBTWVNDIyNuYW1lKF9fU0NfREVDTCMjeChfX1ZBX0FSR1NfXykpOwlcCiAJYXNtbGlua2FnZSBsb25nIFN5UyMjbmFtZShfX1NDX0xPTkcjI3goX19WQV9BUkdTX18pKQkJXApAQCAtMTM0LDcgKzE5MCw3IEBACiAjZWxzZSAvKiBDT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTICovCiAKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUobmFtZSkgYXNtbGlua2FnZSBsb25nIHN5c18jI25hbWUKLSNkZWZpbmUgU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLikJCQkJCVwKKyNkZWZpbmUgX19TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKQkJCQkJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXMjI25hbWUoX19TQ19ERUNMIyN4KF9fVkFfQVJHU19fKSkKIAogI2VuZGlmIC8qIENPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlMgKi8KQEAgLTQ2MSw2ICs1MTcsMTAgQEAKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpOwogYXNtbGlua2FnZSBsb25nIHN5c19wd3JpdGU2NCh1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90IHBvcyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3ByZWFkdih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp2ZWMsCisJCQkgICB1bnNpZ25lZCBsb25nIHZsZW4sIHVuc2lnbmVkIGxvbmcgcG9zX2wsIHVuc2lnbmVkIGxvbmcgcG9zX2gpOworYXNtbGlua2FnZSBsb25nIHN5c19wd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnZlYywKKwkJCSAgICB1bnNpZ25lZCBsb25nIHZsZW4sIHVuc2lnbmVkIGxvbmcgcG9zX2wsIHVuc2lnbmVkIGxvbmcgcG9zX2gpOwogYXNtbGlua2FnZSBsb25nIHN5c19nZXRjd2QoY2hhciBfX3VzZXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbWtkaXIoY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLCBpbnQgbW9kZSk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2NoZGlyKGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKaW5kZXggZGQyNTMxNy4uM2UwOGExYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaApAQCAtMTQsNyArMTQsNyBAQAogCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAJdW5zaWduZWQgaW50CQlwcmVzZW50OjE7CiAKLQl1MzIgX19pb21lbQkJKmFkZHJlc3M7CisJdm9pZCBfX2lvbWVtCQkqYWRkcmVzczsKIAogCS8qIG1lYXN1cmVzIGluIHVzZWNzICovCiAJdW5zaWduZWQgaW50CQlwZXJpb2Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKaW5kZXggYTE2YjllMC4uNzQwMmMxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaApAQCAtMzgsMTEgKzM4LDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIG5yX2NwdXNfbm9kZQotI2RlZmluZSBucl9jcHVzX25vZGUobm9kZSkJCQkJXAotCSh7CQkJCQkJXAotCQlub2RlX3RvX2NwdW1hc2tfcHRyKF9fdG1wX18sIG5vZGUpOwlcCi0JCWNwdXNfd2VpZ2h0KCpfX3RtcF9fKTsJCQlcCi0JfSkKKyNkZWZpbmUgbnJfY3B1c19ub2RlKG5vZGUpIGNwdW1hc2tfd2VpZ2h0KGNwdW1hc2tfb2Zfbm9kZShub2RlKSkKICNlbmRpZgogCiAjZGVmaW5lIGZvcl9lYWNoX25vZGVfd2l0aF9jcHVzKG5vZGUpCQkJXApAQCAtMjAwLDQgKzE5Niw5IEBACiAjZGVmaW5lIHRvcG9sb2d5X2NvcmVfY3B1bWFzayhjcHUpCQljcHVtYXNrX29mKGNwdSkKICNlbmRpZgogCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgTm9kZS4gKi8KKyNpZm5kZWYgbnVtYV9ub2RlX2lkCisjZGVmaW5lIG51bWFfbm9kZV9pZCgpCQkoY3B1X3RvX25vZGUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkpCisjZW5kaWYKKwogI2VuZGlmIC8qIF9MSU5VWF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlX2Nsb2NrLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlX2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4MTMwMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2VfY2xvY2suaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9MSU5VWF9UUkFDRV9DTE9DS19ICisjZGVmaW5lIF9MSU5VWF9UUkFDRV9DTE9DS19ICisKKy8qCisgKiAzIHRyYWNlIGNsb2NrIHZhcmlhbnRzLCB3aXRoIGRpZmZlcmluZyBzY2FsYWJpbGl0eS9wcmVjaXNpb24KKyAqIHRyYWRlb2ZmczoKKyAqCisgKiAgLSAgIGxvY2FsOiBDUFUtbG9jYWwgdHJhY2UgY2xvY2sKKyAqICAtICBtZWRpdW06IHNjYWxhYmxlIGdsb2JhbCBjbG9jayB3aXRoIHNvbWUgaml0dGVyCisgKiAgLSAgZ2xvYmFsOiBnbG9iYWxseSBtb25vdG9uaWMsIHNlcmlhbGl6ZWQgY2xvY2sKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHU2NCBub3RyYWNlIHRyYWNlX2Nsb2NrX2xvY2FsKHZvaWQpOworZXh0ZXJuIHU2NCBub3RyYWNlIHRyYWNlX2Nsb2NrKHZvaWQpOworZXh0ZXJuIHU2NCBub3RyYWNlIHRyYWNlX2Nsb2NrX2dsb2JhbCh2b2lkKTsKKworI2VuZGlmIC8qIF9MSU5VWF9UUkFDRV9DTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oIGIvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaAppbmRleCA2MTg2YTc4Li5jN2FhMTU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKQEAgLTM4OCwxNyArMzg4LDE0IEBACiAgKiB0cmFjZWhvb2tfY29uc2lkZXJfaWdub3JlZF9zaWduYWwgLSBzdXBwcmVzcyBzaG9ydC1jaXJjdWl0IG9mIGlnbm9yZWQgc2lnbmFsCiAgKiBAdGFzazoJCXRhc2sgcmVjZWl2aW5nIHRoZSBzaWduYWwKICAqIEBzaWc6CQlzaWduYWwgbnVtYmVyIGJlaW5nIHNlbnQKLSAqIEBoYW5kbGVyOgkJJVNJR19JR04gb3IgJVNJR19ERkwKICAqCiAgKiBSZXR1cm4gemVybyBpZmYgdHJhY2luZyBkb2Vzbid0IGNhcmUgdG8gZXhhbWluZSB0aGlzIGlnbm9yZWQgc2lnbmFsLAogICogc28gaXQgY2FuIHNob3J0LWNpcmN1aXQgbm9ybWFsIGRlbGl2ZXJ5IGFuZCBuZXZlciBldmVuIGdldCBxdWV1ZWQuCi0gKiBFaXRoZXIgQGhhbmRsZXIgaXMgJVNJR19ERkwgYW5kIEBzaWcncyBkZWZhdWx0IGlzIGlnbm9yZSwgb3IgaXQncyAlU0lHX0lHTi4KICAqCiAgKiBDYWxsZWQgd2l0aCBAdGFzay0+c2lnaGFuZC0+c2lnbG9jayBoZWxkLgogICovCiBzdGF0aWMgaW5saW5lIGludCB0cmFjZWhvb2tfY29uc2lkZXJfaWdub3JlZF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCQkJICAgIGludCBzaWcsCi0JCQkJCQkgICAgdm9pZCBfX3VzZXIgKmhhbmRsZXIpCisJCQkJCQkgICAgaW50IHNpZykKIHsKIAlyZXR1cm4gKHRhc2tfcHRyYWNlKHRhc2spICYgUFRfUFRSQUNFRCkgIT0gMDsKIH0KQEAgLTQwNywxOSArNDA0LDE3IEBACiAgKiB0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsIC0gc3VwcHJlc3Mgc3BlY2lhbCBoYW5kbGluZyBvZiBmYXRhbCBzaWduYWwKICAqIEB0YXNrOgkJdGFzayByZWNlaXZpbmcgdGhlIHNpZ25hbAogICogQHNpZzoJCXNpZ25hbCBudW1iZXIgYmVpbmcgc2VudAotICogQGhhbmRsZXI6CQklU0lHX0RGTCBvciAlU0lHX0lHTgogICoKICAqIFJldHVybiBub256ZXJvIHRvIHByZXZlbnQgc3BlY2lhbCBoYW5kbGluZyBvZiB0aGlzIHRlcm1pbmF0aW9uIHNpZ25hbC4KLSAqIE5vcm1hbGx5IEBoYW5kbGVyIGlzICVTSUdfREZMLiAgSXQgY2FuIGJlICVTSUdfSUdOIGlmIEBzaWcgaXMgaWdub3JlZCwKLSAqIGluIHdoaWNoIGNhc2UgZm9yY2Vfc2lnKCkgaXMgYWJvdXQgdG8gcmVzZXQgaXQgdG8gJVNJR19ERkwuCisgKiBOb3JtYWxseSBoYW5kbGVyIGZvciBzaWduYWwgaXMgJVNJR19ERkwuICBJdCBjYW4gYmUgJVNJR19JR04gaWYgQHNpZyBpcworICogaWdub3JlZCwgaW4gd2hpY2ggY2FzZSBmb3JjZV9zaWcoKSBpcyBhYm91dCB0byByZXNldCBpdCB0byAlU0lHX0RGTC4KICAqIFdoZW4gdGhpcyByZXR1cm5zIHplcm8sIHRoaXMgc2lnbmFsIG1pZ2h0IGNhdXNlIGEgcXVpY2sgdGVybWluYXRpb24KICAqIHRoYXQgZG9lcyBub3QgZ2l2ZSB0aGUgZGVidWdnZXIgYSBjaGFuY2UgdG8gaW50ZXJjZXB0IHRoZSBzaWduYWwuCiAgKgogICogQ2FsbGVkIHdpdGggb3Igd2l0aG91dCBAdGFzay0+c2lnaGFuZC0+c2lnbG9jayBoZWxkLgogICovCiBzdGF0aWMgaW5saW5lIGludCB0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkJCSAgaW50IHNpZywKLQkJCQkJCSAgdm9pZCBfX3VzZXIgKmhhbmRsZXIpCisJCQkJCQkgIGludCBzaWcpCiB7CiAJcmV0dXJuICh0YXNrX3B0cmFjZSh0YXNrKSAmIFBUX1BUUkFDRUQpICE9IDA7CiB9CkBAIC01MDcsNyArNTAyLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHRyYWNlaG9va19ub3RpZnlfZGVhdGgoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCQkgdm9pZCAqKmRlYXRoX2Nvb2tpZSwgaW50IGdyb3VwX2RlYWQpCiB7Ci0JaWYgKHRhc2stPmV4aXRfc2lnbmFsID09IC0xKQorCWlmICh0YXNrX2RldGFjaGVkKHRhc2spKQogCQlyZXR1cm4gdGFzay0+cHRyYWNlID8gU0lHQ0hMRCA6IERFQVRIX1JFQVA7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAppbmRleCA3NTcwMDU0Li5kMzVhN2VlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaApAQCAtMzEsOCArMzEsOCBAQAogCQkJCQkgKiBLZWVwIGluIHN5bmMgd2l0aCB2bWxpbnV4Lmxkcy5oLgogCQkJCQkgKi8KIAotI2RlZmluZSBUUFBST1RPKGFyZ3MuLi4pCWFyZ3MKLSNkZWZpbmUgVFBBUkdTKGFyZ3MuLi4pCQlhcmdzCisjZGVmaW5lIFRQX1BST1RPKGFyZ3MuLi4pCWFyZ3MKKyNkZWZpbmUgVFBfQVJHUyhhcmdzLi4uKQkJYXJncwogCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCiAKQEAgLTY1LDcgKzY1LDcgQEAKIAl7CQkJCQkJCQlcCiAJCWlmICh1bmxpa2VseShfX3RyYWNlcG9pbnRfIyNuYW1lLnN0YXRlKSkJCVwKIAkJCV9fRE9fVFJBQ0UoJl9fdHJhY2Vwb2ludF8jI25hbWUsCQlcCi0JCQkJVFBQUk9UTyhwcm90byksIFRQQVJHUyhhcmdzKSk7CQlcCisJCQkJVFBfUFJPVE8ocHJvdG8pLCBUUF9BUkdTKGFyZ3MpKTsJXAogCX0JCQkJCQkJCVwKIAlzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl90cmFjZV8jI25hbWUodm9pZCAoKnByb2JlKShwcm90bykpCVwKIAl7CQkJCQkJCQlcCkBAIC0xNTMsNCArMTUzLDExNCBAQAogCXN5bmNocm9uaXplX3NjaGVkKCk7CiB9CiAKKyNkZWZpbmUgUEFSQU1TKGFyZ3MuLi4pIGFyZ3MKKyNkZWZpbmUgVFJBQ0VfRk9STUFUKG5hbWUsIHByb3RvLCBhcmdzLCBmbXQpCQlcCisJREVDTEFSRV9UUkFDRShuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCisKKworLyoKKyAqIEZvciB1c2Ugd2l0aCB0aGUgVFJBQ0VfRVZFTlQgbWFjcm86CisgKgorICogV2UgZGVmaW5lIGEgdHJhY2Vwb2ludCwgaXRzIGFyZ3VtZW50cywgaXRzIHByaW50ayBmb3JtYXQKKyAqIGFuZCBpdHMgJ2Zhc3QgYmluYXkgcmVjb3JkJyBsYXlvdXQuCisgKgorICogRmlyc3RseSwgbmFtZSB5b3VyIHRyYWNlcG9pbnQgdmlhIFRSQUNFX0VWRU5UKG5hbWUgOiB0aGUKKyAqICdzdWJzeXN0ZW1fZXZlbnQnIG5vdGF0aW9uIGlzIGZpbmUuCisgKgorICogVGhpbmsgYWJvdXQgdGhpcyB3aG9sZSBjb25zdHJ1Y3QgYXMgdGhlCisgKiAndHJhY2Vfc2NoZWRfc3dpdGNoKCkgZnVuY3Rpb24nIGZyb20gbm93IG9uLgorICoKKyAqCisgKiAgVFJBQ0VfRVZFTlQoc2NoZWRfc3dpdGNoLAorICoKKyAqCSoKKyAqCSogQSBmdW5jdGlvbiBoYXMgYSByZWd1bGFyIGZ1bmN0aW9uIGFyZ3VtZW50cworICoJKiBwcm90b3R5cGUsIGRlY2xhcmUgaXQgdmlhIFRQX1BST1RPKCk6CisgKgkqCisgKgorICoJVFBfUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorICoJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpLAorICoKKyAqCSoKKyAqCSogRGVmaW5lIHRoZSBjYWxsIHNpZ25hdHVyZSBvZiB0aGUgJ2Z1bmN0aW9uJy4KKyAqCSogKERlc2lnbiBzaWRlbm90ZTogd2UgdXNlIHRoaXMgaW5zdGVhZCBvZiBhCisgKgkqICBUUF9QUk9UTzEvVFBfUFJPVE8yL1RQX1BST1RPMyB1Z2xpbmVzcy4pCisgKgkqCisgKgorICoJVFBfQVJHUyhycSwgcHJldiwgbmV4dCksCisgKgorICoJKgorICoJKiBGYXN0IGJpbmFyeSB0cmFjaW5nOiBkZWZpbmUgdGhlIHRyYWNlIHJlY29yZCB2aWEKKyAqCSogVFBfU1RSVUNUX19lbnRyeSgpLiBZb3UgY2FuIHRoaW5rIGFib3V0IGl0IGxpa2UgYQorICoJKiByZWd1bGFyIEMgc3RydWN0dXJlIGxvY2FsIHZhcmlhYmxlIGRlZmluaXRpb24uCisgKgkqCisgKgkqIFRoaXMgaXMgaG93IHRoZSB0cmFjZSByZWNvcmQgaXMgc3RydWN0dXJlZCBhbmQgd2lsbAorICoJKiBiZSBzYXZlZCBpbnRvIHRoZSByaW5nIGJ1ZmZlci4gVGhlc2UgYXJlIHRoZSBmaWVsZHMKKyAqCSogdGhhdCB3aWxsIGJlIGV4cG9zZWQgdG8gdXNlci1zcGFjZSBpbgorICoJKiAvZGVidWcvdHJhY2luZy9ldmVudHMvPCo+L2Zvcm1hdC4KKyAqCSoKKyAqCSogVGhlIGRlY2xhcmVkICdsb2NhbCB2YXJpYWJsZScgaXMgY2FsbGVkICdfX2VudHJ5JworICoJKgorICoJKiBfX2ZpZWxkKHBpZF90LCBwcmV2X3ByaWQpIGlzIGVxdWl2YWxlbnQgdG8gYSBzdGFuZGFyZCBkZWNsYXJpdG9uOgorICoJKgorICoJKglwaWRfdAlwcmV2X3BpZDsKKyAqCSoKKyAqCSogX19hcnJheShjaGFyLCBwcmV2X2NvbW0sIFRBU0tfQ09NTV9MRU4pIGlzIGVxdWl2YWxlbnQgdG86CisgKgkqCisgKgkqCWNoYXIJcHJldl9jb21tW1RBU0tfQ09NTV9MRU5dOworICoJKgorICoKKyAqCVRQX1NUUlVDVF9fZW50cnkoCisgKgkJX19hcnJheSgJY2hhciwJcHJldl9jb21tLAlUQVNLX0NPTU1fTEVOCSkKKyAqCQlfX2ZpZWxkKAlwaWRfdCwJcHJldl9waWQJCQkpCisgKgkJX19maWVsZCgJaW50LAlwcmV2X3ByaW8JCQkpCisgKgkJX19hcnJheSgJY2hhciwJbmV4dF9jb21tLAlUQVNLX0NPTU1fTEVOCSkKKyAqCQlfX2ZpZWxkKAlwaWRfdCwJbmV4dF9waWQJCQkpCisgKgkJX19maWVsZCgJaW50LAluZXh0X3ByaW8JCQkpCisgKgkpLAorICoKKyAqCSoKKyAqCSogQXNzaWduIHRoZSBlbnRyeSBpbnRvIHRoZSB0cmFjZSByZWNvcmQsIGJ5IGVtYmVkZGluZworICoJKiBhIGZ1bGwgQyBzdGF0ZW1lbnQgYmxvY2sgaW50byBUUF9mYXN0X2Fzc2lnbigpLiBZb3UKKyAqCSogY2FuIHJlZmVyIHRvIHRoZSB0cmFjZSByZWNvcmQgYXMgJ19fZW50cnknIC0KKyAqCSogb3RoZXJ3aXNlIHlvdSBjYW4gcHV0IGFyYml0cmFyeSBDIGNvZGUgaW4gaGVyZS4KKyAqCSoKKyAqCSogTm90ZTogdGhpcyBDIGNvZGUgd2lsbCBleGVjdXRlIGV2ZXJ5IHRpbWUgYSB0cmFjZSBldmVudAorICoJKiBoYXBwZW5zLCBvbiBhbiBhY3RpdmUgdHJhY2Vwb2ludC4KKyAqCSoKKyAqCisgKglUUF9mYXN0X2Fzc2lnbigKKyAqCQltZW1jcHkoX19lbnRyeS0+bmV4dF9jb21tLCBuZXh0LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKyAqCQlfX2VudHJ5LT5wcmV2X3BpZAk9IHByZXYtPnBpZDsKKyAqCQlfX2VudHJ5LT5wcmV2X3ByaW8JPSBwcmV2LT5wcmlvOworICoJCW1lbWNweShfX2VudHJ5LT5wcmV2X2NvbW0sIHByZXYtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworICoJCV9fZW50cnktPm5leHRfcGlkCT0gbmV4dC0+cGlkOworICoJCV9fZW50cnktPm5leHRfcHJpbwk9IG5leHQtPnByaW87CisgKgkpCisgKgorICoJKgorICoJKiBGb3JtYXR0ZWQgb3V0cHV0IG9mIGEgdHJhY2UgcmVjb3JkIHZpYSBUUF9wcmludGsoKS4KKyAqCSogVGhpcyBpcyBob3cgdGhlIHRyYWNlcG9pbnQgd2lsbCBhcHBlYXIgdW5kZXIgZnRyYWNlCisgKgkqIHBsdWdpbnMgdGhhdCBtYWtlIHVzZSBvZiB0aGlzIHRyYWNlcG9pbnQuCisgKgkqCisgKgkqIChyYXctYmluYXJ5IHRyYWNpbmcgd29udCBhY3R1YWxseSBwZXJmb3JtIHRoaXMgc3RlcC4pCisgKgkqCisgKgorICoJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gPT0+ICVzOiVkIFslZF0iLAorICoJCV9fZW50cnktPnByZXZfY29tbSwgX19lbnRyeS0+cHJldl9waWQsIF9fZW50cnktPnByZXZfcHJpbywKKyAqCQlfX2VudHJ5LT5uZXh0X2NvbW0sIF9fZW50cnktPm5leHRfcGlkLCBfX2VudHJ5LT5uZXh0X3ByaW8pLAorICoKKyAqICk7CisgKgorICogVGhpcyBtYWNybyBjb25zdHJ1Y3QgaXMgdGh1cyB1c2VkIGZvciB0aGUgcmVndWxhciBwcmludGsgZm9ybWF0CisgKiB0cmFjaW5nIHNldHVwLCBpdCBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhIGZ1bmN0aW9uIHBvaW50ZXIgYmFzZWQKKyAqIHRyYWNlcG9pbnQgY2FsbGJhY2sgKHRoaXMgaXMgdXNlZCBieSBwcm9ncmFtbWF0aWMgcGx1Z2lucyBhbmQKKyAqIGNhbiBhbHNvIGJ5IHVzZWQgYnkgZ2VuZXJpYyBpbnN0cnVtZW50YXRpb24gbGlrZSBTeXN0ZW1UYXApLCBhbmQKKyAqIGl0IGlzIGFsc28gdXNlZCB0byBleHBvc2UgYSBzdHJ1Y3R1cmVkIHRyYWNlIHJlY29yZCBpbgorICogL2RlYnVnL3RyYWNpbmcvZXZlbnRzLy4KKyAqLworCisjZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCBhcmdzLCBzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKKwlERUNMQVJFX1RSQUNFKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi93dXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi93dXNiLmgKaW5kZXggNWY0MDFiNi4uNDI5YzYzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivd3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3d1c2IuaApAQCAtODAsOCArODAsNyBAQAogCXU4IGRhdGFbMTZdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotY29uc3Qgc3RhdGljCi1zdHJ1Y3Qgd3VzYl9ja2hkaWQgd3VzYl9ja2hkaWRfemVybyA9IHsgLmRhdGEgPSB7IDAgfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3dXNiX2NraGRpZCB3dXNiX2NraGRpZF96ZXJvID0geyAuZGF0YSA9IHsgMCB9IH07CiAKICNkZWZpbmUgV1VTQl9DS0hESURfU1RSU0laRSAoMyAqIHNpemVvZihzdHJ1Y3Qgd3VzYl9ja2hkaWQpICsgMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaCBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKaW5kZXggM2NkNTFlNS4uMTNlMWFkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCkBAIC00MSw2ICs0MSwxMSBAQAogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVsYXllZF93b3JrICp0b19kZWxheWVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXJldHVybiBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7Cit9CisKIHN0cnVjdCBleGVjdXRlX3dvcmsgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggZTU0Yzc2ZC4uMWI5NGI5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTYxNiwyMSArNjE2LDYgQEAKIAlyZXR1cm4gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9kZWNfcGNvdW50X2FwcHJveF9pbnQoX191MzIgKmNvdW50LCBjb25zdCBpbnQgZGVjcikKLXsKLQlpZiAoKmNvdW50KSB7Ci0JCSpjb3VudCAtPSBkZWNyOwotCQlpZiAoKGludCkqY291bnQgPCAwKQotCQkJKmNvdW50ID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZGVjX3Bjb3VudF9hcHByb3goX191MzIgKmNvdW50LAotCQkJCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQl0Y3BfZGVjX3Bjb3VudF9hcHByb3hfaW50KGNvdW50LCB0Y3Bfc2tiX3Bjb3VudChza2IpKTsKLX0KLQogLyogRXZlbnRzIHBhc3NlZCB0byBjb25nZXN0aW9uIGNvbnRyb2wgaW50ZXJmYWNlICovCiBlbnVtIHRjcF9jYV9ldmVudCB7CiAJQ0FfRVZFTlRfVFhfU1RBUlQsCS8qIGZpcnN0IHRyYW5zbWl0IHdoZW4gbm8gcGFja2V0cyBpbiBmbGlnaHQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvYmxvY2suaCBiL2luY2x1ZGUvdHJhY2UvYmxvY2suaAppbmRleCAyNWM2YTFmLi4yNWI3MDY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Jsb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ibG9jay5oCkBAIC01LDcyICs1LDcyIEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3JxX2Fib3J0LAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCi0JCVRQQVJHUyhxLCBycSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAorCSAgICAgIFRQX0FSR1MocSwgcnEpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19ycV9pbnNlcnQsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKLQkJVFBBUkdTKHEsIHJxKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCisJICAgICAgVFBfQVJHUyhxLCBycSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3JxX2lzc3VlLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCi0JCVRQQVJHUyhxLCBycSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAorCSAgICAgIFRQX0FSR1MocSwgcnEpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19ycV9yZXF1ZXVlLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCi0JCVRQQVJHUyhxLCBycSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAorCSAgICAgIFRQX0FSR1MocSwgcnEpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19ycV9jb21wbGV0ZSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAotCQlUUEFSR1MocSwgcnEpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKKwkgICAgICBUUF9BUkdTKHEsIHJxKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfYmlvX2JvdW5jZSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAotCQlUUEFSR1MocSwgYmlvKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCisJICAgICAgVFBfQVJHUyhxLCBiaW8pKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19iaW9fY29tcGxldGUsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKLQkJVFBBUkdTKHEsIGJpbykpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAorCSAgICAgIFRQX0FSR1MocSwgYmlvKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfYmlvX2JhY2ttZXJnZSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAotCQlUUEFSR1MocSwgYmlvKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCisJICAgICAgVFBfQVJHUyhxLCBiaW8pKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19iaW9fZnJvbnRtZXJnZSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAotCQlUUEFSR1MocSwgYmlvKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCisJICAgICAgVFBfQVJHUyhxLCBiaW8pKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19iaW9fcXVldWUsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKLQkJVFBBUkdTKHEsIGJpbykpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAorCSAgICAgIFRQX0FSR1MocSwgYmlvKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfZ2V0cnEsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpLAotCQlUUEFSR1MocSwgYmlvLCBydykpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGludCBydyksCisJICAgICAgVFBfQVJHUyhxLCBiaW8sIHJ3KSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfc2xlZXBycSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGludCBydyksCi0JCVRQQVJHUyhxLCBiaW8sIHJ3KSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbywgcncpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19wbHVnLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpLAotCQlUUEFSR1MocSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKKwkgICAgICBUUF9BUkdTKHEpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja191bnBsdWdfdGltZXIsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCi0JCVRQQVJHUyhxKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpLAorCSAgICAgIFRQX0FSR1MocSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3VucGx1Z19pbywKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKLQkJVFBBUkdTKHEpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCisJICAgICAgVFBfQVJHUyhxKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfc3BsaXQsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgcGR1KSwKLQkJVFBBUkdTKHEsIGJpbywgcGR1KSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHBkdSksCisJICAgICAgVFBfQVJHUyhxLCBiaW8sIHBkdSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3JlbWFwLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgZGV2X3QgZGV2LAotCQlzZWN0b3JfdCBmcm9tLCBzZWN0b3JfdCB0byksCi0JCVRQQVJHUyhxLCBiaW8sIGRldiwgZnJvbSwgdG8pKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBkZXZfdCBkZXYsCisJCSBzZWN0b3JfdCBmcm9tLCBzZWN0b3JfdCB0byksCisJICAgICAgVFBfQVJHUyhxLCBiaW8sIGRldiwgZnJvbSwgdG8pKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2lycS5oIGIvaW5jbHVkZS90cmFjZS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjVkNDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9pcnEuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX1RSQUNFX0lSUV9ICisjZGVmaW5lIF9UUkFDRV9JUlFfSAorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCisjaW5jbHVkZSA8dHJhY2UvaXJxX2V2ZW50X3R5cGVzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9pcnFfZXZlbnRfdHlwZXMuaCBiL2luY2x1ZGUvdHJhY2UvaXJxX2V2ZW50X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5NjRlYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvaXJxX2V2ZW50X3R5cGVzLmgKQEAgLTAsMCArMSw1NSBAQAorCisvKiB1c2UgPHRyYWNlL2lycS5oPiBpbnN0ZWFkICovCisjaWZuZGVmIFRSQUNFX0ZPUk1BVAorIyBlcnJvciBEbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuCisjIGVycm9yIFVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisjZW5kaWYKKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gaXJxCisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBlbnRyeSBvZiBpbnRlcnJ1cHQgaGFuZGxlcjoKKyAqLworVFJBQ0VfRk9STUFUKGlycV9oYW5kbGVyX2VudHJ5LAorCVRQX1BST1RPKGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbiksCisJVFBfQVJHUyhpcnEsIGFjdGlvbiksCisJVFBfRk1UKCJpcnE9JWQgaGFuZGxlcj0lcyIsIGlycSwgYWN0aW9uLT5uYW1lKQorCSk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciByZXR1cm4gb2YgYW4gaW50ZXJydXB0IGhhbmRsZXI6CisgKi8KK1RSQUNFX0VWRU5UKGlycV9oYW5kbGVyX2V4aXQsCisKKwlUUF9QUk9UTyhpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24sIGludCByZXQpLAorCisJVFBfQVJHUyhpcnEsIGFjdGlvbiwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJaXJxCSkKKwkJX19maWVsZCgJaW50LAlyZXQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+aXJxCT0gaXJxOworCQlfX2VudHJ5LT5yZXQJPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygiaXJxPSVkIHJldHVybj0lcyIsCisJCSAgX19lbnRyeS0+aXJxLCBfX2VudHJ5LT5yZXQgPyAiaGFuZGxlZCIgOiAidW5oYW5kbGVkIikKKyk7CisKK1RSQUNFX0ZPUk1BVChzb2Z0aXJxX2VudHJ5LAorCVRQX1BST1RPKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCwgc3RydWN0IHNvZnRpcnFfYWN0aW9uICp2ZWMpLAorCVRQX0FSR1MoaCwgdmVjKSwKKwlUUF9GTVQoInNvZnRpcnE9JWQgYWN0aW9uPSVzIiwgKGludCkoaCAtIHZlYyksIHNvZnRpcnFfdG9fbmFtZVtoLXZlY10pCisJKTsKKworVFJBQ0VfRk9STUFUKHNvZnRpcnFfZXhpdCwKKwlUUF9QUk9UTyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgsIHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqdmVjKSwKKwlUUF9BUkdTKGgsIHZlYyksCisJVFBfRk1UKCJzb2Z0aXJxPSVkIGFjdGlvbj0lcyIsIChpbnQpKGggLSB2ZWMpLCBzb2Z0aXJxX3RvX25hbWVbaC12ZWNdKQorCSk7CisKKyN1bmRlZiBUUkFDRV9TWVNURU0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uva21lbXRyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2ttZW10cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOGI3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2ttZW10cmFjZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciBHUEwgdmVyc2lvbiAyLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0tNRU1UUkFDRV9ICisjZGVmaW5lIF9MSU5VWF9LTUVNVFJBQ0VfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KKworZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB7CisJS01FTVRSQUNFX1RZUEVfS01BTExPQyA9IDAsCS8qIGttYWxsb2MoKSBvciBrZnJlZSgpLiAqLworCUtNRU1UUkFDRV9UWVBFX0NBQ0hFLAkJLyoga21lbV9jYWNoZV8qKCkuICovCisJS01FTVRSQUNFX1RZUEVfUEFHRVMsCQkvKiBfX2dldF9mcmVlX3BhZ2VzKCkgYW5kIGZyaWVuZHMuICovCit9OworCisjaWZkZWYgQ09ORklHX0tNRU1UUkFDRQorCitleHRlcm4gdm9pZCBrbWVtdHJhY2VfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQga21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShlbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCisJCQkJCSAgICAgY29uc3Qgdm9pZCAqcHRyLAorCQkJCQkgICAgIHNpemVfdCBieXRlc19yZXEsCisJCQkJCSAgICAgc2l6ZV90IGJ5dGVzX2FsbG9jLAorCQkJCQkgICAgIGdmcF90IGdmcF9mbGFncywKKwkJCQkJICAgICBpbnQgbm9kZSk7CisKK2V4dGVybiB2b2lkIGttZW10cmFjZV9tYXJrX2ZyZWUoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJCQkgICAgICAgY29uc3Qgdm9pZCAqcHRyKTsKKworI2Vsc2UgLyogQ09ORklHX0tNRU1UUkFDRSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQga21lbXRyYWNlX2luaXQodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAorCQkJCQkgICAgIGNvbnN0IHZvaWQgKnB0ciwKKwkJCQkJICAgICBzaXplX3QgYnl0ZXNfcmVxLAorCQkJCQkgICAgIHNpemVfdCBieXRlc19hbGxvYywKKwkJCQkJICAgICBnZnBfdCBnZnBfZmxhZ3MsCisJCQkJCSAgICAgaW50IG5vZGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWVtdHJhY2VfbWFya19mcmVlKGVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCisJCQkJICAgICAgIGNvbnN0IHZvaWQgKnB0cikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19LTUVNVFJBQ0UgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGttZW10cmFjZV9tYXJrX2FsbG9jKGVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZCwKKwkJCQkJdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCisJCQkJCWNvbnN0IHZvaWQgKnB0ciwKKwkJCQkJc2l6ZV90IGJ5dGVzX3JlcSwKKwkJCQkJc2l6ZV90IGJ5dGVzX2FsbG9jLAorCQkJCQlnZnBfdCBnZnBfZmxhZ3MpCit7CisJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZSh0eXBlX2lkLCBjYWxsX3NpdGUsIHB0ciwKKwkJCQkgIGJ5dGVzX3JlcSwgYnl0ZXNfYWxsb2MsIGdmcF9mbGFncywgLTEpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0xJTlVYX0tNRU1UUkFDRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvbG9ja2RlcC5oIGIvaW5jbHVkZS90cmFjZS9sb2NrZGVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNjdkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvbG9ja2RlcC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfVFJBQ0VfTE9DS0RFUF9ICisjZGVmaW5lIF9UUkFDRV9MT0NLREVQX0gKKworI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKKyNpbmNsdWRlIDx0cmFjZS9sb2NrZGVwX2V2ZW50X3R5cGVzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9sb2NrZGVwX2V2ZW50X3R5cGVzLmggYi9pbmNsdWRlL3RyYWNlL2xvY2tkZXBfZXZlbnRfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGNjZmNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9sb2NrZGVwX2V2ZW50X3R5cGVzLmgKQEAgLTAsMCArMSw0NCBAQAorCisjaWZuZGVmIFRSQUNFX0ZPUk1BVAorIyBlcnJvciBEbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuCisjIGVycm9yIFVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisjZW5kaWYKKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gbG9jaworCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKworVFJBQ0VfRk9STUFUKGxvY2tfYWNxdWlyZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKKwkJaW50IHRyeWxvY2ssIGludCByZWFkLCBpbnQgY2hlY2ssCisJCXN0cnVjdCBsb2NrZGVwX21hcCAqbmV4dF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwKSwKKwlUUF9BUkdTKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjaywgbmV4dF9sb2NrLCBpcCksCisJVFBfRk1UKCIlcyVzJXMiLCB0cnlsb2NrID8gInRyeSAiIDogIiIsCisJCXJlYWQgPyAicmVhZCAiIDogIiIsIGxvY2stPm5hbWUpCisJKTsKKworVFJBQ0VfRk9STUFUKGxvY2tfcmVsZWFzZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGludCBuZXN0ZWQsIHVuc2lnbmVkIGxvbmcgaXApLAorCVRQX0FSR1MobG9jaywgbmVzdGVkLCBpcCksCisJVFBfRk1UKCIlcyIsIGxvY2stPm5hbWUpCisJKTsKKworI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKKworVFJBQ0VfRk9STUFUKGxvY2tfY29udGVuZGVkLAorCVRQX1BST1RPKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgbG9uZyBpcCksCisJVFBfQVJHUyhsb2NrLCBpcCksCisJVFBfRk1UKCIlcyIsIGxvY2stPm5hbWUpCisJKTsKKworVFJBQ0VfRk9STUFUKGxvY2tfYWNxdWlyZWQsCisJVFBfUFJPVE8oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKSwKKwlUUF9BUkdTKGxvY2ssIGlwKSwKKwlUUF9GTVQoIiVzIiwgbG9jay0+bmFtZSkKKwkpOworCisjZW5kaWYKKyNlbmRpZgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3Bvd2VyLmggYi9pbmNsdWRlL3RyYWNlL3Bvd2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMDQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvcG93ZXIuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9UUkFDRV9QT1dFUl9ICisjZGVmaW5lIF9UUkFDRV9QT1dFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworZW51bSB7CisJUE9XRVJfTk9ORSA9IDAsCisJUE9XRVJfQ1NUQVRFID0gMSwKKwlQT1dFUl9QU1RBVEUgPSAyLAorfTsKKworc3RydWN0IHBvd2VyX3RyYWNlIHsKKwlrdGltZV90CQkJc3RhbXA7CisJa3RpbWVfdAkJCWVuZDsKKwlpbnQJCQl0eXBlOworCWludAkJCXN0YXRlOworfTsKKworREVDTEFSRV9UUkFDRShwb3dlcl9zdGFydCwKKwlUUF9QUk9UTyhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN0YXRlKSwKKwkgICAgICBUUF9BUkdTKGl0LCB0eXBlLCBzdGF0ZSkpOworCitERUNMQVJFX1RSQUNFKHBvd2VyX21hcmssCisJVFBfUFJPVE8oc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSksCisJICAgICAgVFBfQVJHUyhpdCwgdHlwZSwgc3RhdGUpKTsKKworREVDTEFSRV9UUkFDRShwb3dlcl9lbmQsCisJVFBfUFJPVE8oc3RydWN0IHBvd2VyX3RyYWNlICppdCksCisJICAgICAgVFBfQVJHUyhpdCkpOworCisjZW5kaWYgLyogX1RSQUNFX1BPV0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvc2NoZWQuaCBiL2luY2x1ZGUvdHJhY2Uvc2NoZWQuaAppbmRleCAwZDgxMDk4Li40ZTM3MmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL3NjaGVkLmgKKysrIGIvaW5jbHVkZS90cmFjZS9zY2hlZC5oCkBAIC00LDUzICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KIAotREVDTEFSRV9UUkFDRShzY2hlZF9rdGhyZWFkX3N0b3AsCi0JVFBQUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpLAotCQlUUEFSR1ModCkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX2t0aHJlYWRfc3RvcF9yZXQsCi0JVFBQUk9UTyhpbnQgcmV0KSwKLQkJVFBBUkdTKHJldCkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3dhaXRfdGFzaywKLQlUUFBST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0JCVRQQVJHUyhycSwgcCkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3dha2V1cCwKLQlUUFBST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN1Y2Nlc3MpLAotCQlUUEFSR1MocnEsIHAsIHN1Y2Nlc3MpKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF93YWtldXBfbmV3LAotCVRQUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3VjY2VzcyksCi0JCVRQQVJHUyhycSwgcCwgc3VjY2VzcykpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3N3aXRjaCwKLQlUUFBST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSwKLQkJVFBBUkdTKHJxLCBwcmV2LCBuZXh0KSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfbWlncmF0ZV90YXNrLAotCVRQUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgb3JpZ19jcHUsIGludCBkZXN0X2NwdSksCi0JCVRQQVJHUyhwLCBvcmlnX2NwdSwgZGVzdF9jcHUpKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF9wcm9jZXNzX2ZyZWUsCi0JVFBQUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAotCQlUUEFSR1MocCkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3Byb2Nlc3NfZXhpdCwKLQlUUFBST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0JCVRQQVJHUyhwKSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfcHJvY2Vzc193YWl0LAotCVRQUFJPVE8oc3RydWN0IHBpZCAqcGlkKSwKLQkJVFBBUkdTKHBpZCkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3Byb2Nlc3NfZm9yaywKLQlUUFBST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKSwKLQkJVFBBUkdTKHBhcmVudCwgY2hpbGQpKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF9zaWduYWxfc2VuZCwKLQlUUFBST1RPKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0JCVRQQVJHUyhzaWcsIHApKTsKKyNpbmNsdWRlIDx0cmFjZS9zY2hlZF9ldmVudF90eXBlcy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvc2NoZWRfZXZlbnRfdHlwZXMuaCBiL2luY2x1ZGUvdHJhY2Uvc2NoZWRfZXZlbnRfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzU0N2RjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9zY2hlZF9ldmVudF90eXBlcy5oCkBAIC0wLDAgKzEsMzM3IEBACisKKy8qIHVzZSA8dHJhY2Uvc2NoZWQuaD4gaW5zdGVhZCAqLworI2lmbmRlZiBUUkFDRV9FVkVOVAorIyBlcnJvciBEbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkuCisjIGVycm9yIFVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisjZW5kaWYKKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gc2NoZWQKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGNhbGxpbmcga3RocmVhZF9zdG9wLCBwZXJmb3JtZWQgdG8gZW5kIGEga3RocmVhZDoKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfa3RocmVhZF9zdG9wLAorCisJVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp0KSwKKworCVRQX0FSR1ModCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCB0LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCT0gdC0+cGlkOworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQiLCBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUga3RocmVhZCBzdG9wcGluZzoKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfa3RocmVhZF9zdG9wX3JldCwKKworCVRQX1BST1RPKGludCByZXQpLAorCisJVFBfQVJHUyhyZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJaW50LAlyZXQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cmV0CT0gcmV0OworCSksCisKKwlUUF9wcmludGsoInJldCAlZCIsIF9fZW50cnktPnJldCkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciB3YWl0aW5nIG9uIHRhc2sgdG8gdW5zY2hlZHVsZToKKyAqCisgKiAoTk9URTogdGhlICdycScgYXJndW1lbnQgaXMgbm90IHVzZWQgYnkgZ2VuZXJpYyB0cmFjZSBldmVudHMsCisgKiAgICAgICAgYnV0IHVzZWQgYnkgdGhlIGxhdGVuY3kgdHJhY2VyIHBsdWdpbi4gKQorICovCitUUkFDRV9FVkVOVChzY2hlZF93YWl0X3Rhc2ssCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCisJVFBfQVJHUyhycSwgcCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkJX19maWVsZCgJaW50LAlwcmlvCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJPSBwLT5waWQ7CisJCV9fZW50cnktPnByaW8JPSBwLT5wcmlvOworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSIsCisJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHdha2luZyB1cCBhIHRhc2s6CisgKgorICogKE5PVEU6IHRoZSAncnEnIGFyZ3VtZW50IGlzIG5vdCB1c2VkIGJ5IGdlbmVyaWMgdHJhY2UgZXZlbnRzLAorICogICAgICAgIGJ1dCB1c2VkIGJ5IHRoZSBsYXRlbmN5IHRyYWNlciBwbHVnaW4uICkKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfd2FrZXVwLAorCisJVFBfUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3VjY2VzcyksCisKKwlUUF9BUkdTKHJxLCBwLCBzdWNjZXNzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXByaW8JCQkpCisJCV9fZmllbGQoCWludCwJc3VjY2VzcwkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCQk9IHAtPnBpZDsKKwkJX19lbnRyeS0+cHJpbwkJPSBwLT5wcmlvOworCQlfX2VudHJ5LT5zdWNjZXNzCT0gc3VjY2VzczsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gc3VjY2Vzcz0lZCIsCisJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvLAorCQkgIF9fZW50cnktPnN1Y2Nlc3MpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3Igd2FraW5nIHVwIGEgbmV3IHRhc2s6CisgKgorICogKE5PVEU6IHRoZSAncnEnIGFyZ3VtZW50IGlzIG5vdCB1c2VkIGJ5IGdlbmVyaWMgdHJhY2UgZXZlbnRzLAorICogICAgICAgIGJ1dCB1c2VkIGJ5IHRoZSBsYXRlbmN5IHRyYWNlciBwbHVnaW4uICkKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfd2FrZXVwX25ldywKKworCVRQX1BST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN1Y2Nlc3MpLAorCisJVFBfQVJHUyhycSwgcCwgc3VjY2VzcyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkJX19maWVsZCgJaW50LAlwcmlvCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXN1Y2Nlc3MJCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgcC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAkJPSBwLT5waWQ7CisJCV9fZW50cnktPnByaW8JCT0gcC0+cHJpbzsKKwkJX19lbnRyeS0+c3VjY2Vzcwk9IHN1Y2Nlc3M7CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIHN1Y2Nlc3M9JWQiLAorCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbywKKwkJICBfX2VudHJ5LT5zdWNjZXNzKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHRhc2sgc3dpdGNoZXMsIHBlcmZvcm1lZCBieSB0aGUgc2NoZWR1bGVyOgorICoKKyAqIChOT1RFOiB0aGUgJ3JxJyBhcmd1bWVudCBpcyBub3QgdXNlZCBieSBnZW5lcmljIHRyYWNlIGV2ZW50cywKKyAqICAgICAgICBidXQgdXNlZCBieSB0aGUgbGF0ZW5jeSB0cmFjZXIgcGx1Z2luLiApCisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3N3aXRjaCwKKworCVRQX1BST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKwkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCksCisKKwlUUF9BUkdTKHJxLCBwcmV2LCBuZXh0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCXByZXZfY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwcmV2X3BpZAkJCSkKKwkJX19maWVsZCgJaW50LAlwcmV2X3ByaW8JCQkpCisJCV9fYXJyYXkoCWNoYXIsCW5leHRfY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAluZXh0X3BpZAkJCSkKKwkJX19maWVsZCgJaW50LAluZXh0X3ByaW8JCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+bmV4dF9jb21tLCBuZXh0LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cHJldl9waWQJPSBwcmV2LT5waWQ7CisJCV9fZW50cnktPnByZXZfcHJpbwk9IHByZXYtPnByaW87CisJCW1lbWNweShfX2VudHJ5LT5wcmV2X2NvbW0sIHByZXYtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5uZXh0X3BpZAk9IG5leHQtPnBpZDsKKwkJX19lbnRyeS0+bmV4dF9wcmlvCT0gbmV4dC0+cHJpbzsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gPT0+ICVzOiVkIFslZF0iLAorCQlfX2VudHJ5LT5wcmV2X2NvbW0sIF9fZW50cnktPnByZXZfcGlkLCBfX2VudHJ5LT5wcmV2X3ByaW8sCisJCV9fZW50cnktPm5leHRfY29tbSwgX19lbnRyeS0+bmV4dF9waWQsIF9fZW50cnktPm5leHRfcHJpbykKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBhIHRhc2sgYmVpbmcgbWlncmF0ZWQ6CisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX21pZ3JhdGVfdGFzaywKKworCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG9yaWdfY3B1LCBpbnQgZGVzdF9jcHUpLAorCisJVFBfQVJHUyhwLCBvcmlnX2NwdSwgZGVzdF9jcHUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKKwkJX19maWVsZCgJaW50LAlvcmlnX2NwdQkJKQorCQlfX2ZpZWxkKAlpbnQsCWRlc3RfY3B1CQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgcC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAkJPSBwLT5waWQ7CisJCV9fZW50cnktPnByaW8JCT0gcC0+cHJpbzsKKwkJX19lbnRyeS0+b3JpZ19jcHUJPSBvcmlnX2NwdTsKKwkJX19lbnRyeS0+ZGVzdF9jcHUJPSBkZXN0X2NwdTsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gZnJvbTogJWQgIHRvOiAlZCIsCisJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvLAorCQkgIF9fZW50cnktPm9yaWdfY3B1LCBfX2VudHJ5LT5kZXN0X2NwdSkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBmcmVlaW5nIGEgdGFzazoKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfcHJvY2Vzc19mcmVlLAorCisJVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKKworCVRQX0FSR1MocCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkJX19maWVsZCgJaW50LAlwcmlvCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJCT0gcC0+cGlkOworCQlfX2VudHJ5LT5wcmlvCQk9IHAtPnByaW87CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIiwKKwkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8pCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgYSB0YXNrIGV4aXRpbmc6CisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3Byb2Nlc3NfZXhpdCwKKworCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisKKwlUUF9BUkdTKHApLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCQk9IHAtPnBpZDsKKwkJX19lbnRyeS0+cHJpbwkJPSBwLT5wcmlvOworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSIsCisJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGEgd2FpdGluZyB0YXNrOgorICovCitUUkFDRV9FVkVOVChzY2hlZF9wcm9jZXNzX3dhaXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcGlkICpwaWQpLAorCisJVFBfQVJHUyhwaWQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCQk9IHBpZF9ucihwaWQpOworCQlfX2VudHJ5LT5wcmlvCQk9IGN1cnJlbnQtPnByaW87CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIiwKKwkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8pCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgZG9fZm9yazoKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfcHJvY2Vzc19mb3JrLAorCisJVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpLAorCisJVFBfQVJHUyhwYXJlbnQsIGNoaWxkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCXBhcmVudF9jb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBhcmVudF9waWQJCQkpCisJCV9fYXJyYXkoCWNoYXIsCWNoaWxkX2NvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJY2hpbGRfcGlkCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPnBhcmVudF9jb21tLCBwYXJlbnQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5wYXJlbnRfcGlkCT0gcGFyZW50LT5waWQ7CisJCW1lbWNweShfX2VudHJ5LT5jaGlsZF9jb21tLCBjaGlsZC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPmNoaWxkX3BpZAk9IGNoaWxkLT5waWQ7CisJKSwKKworCVRQX3ByaW50aygicGFyZW50ICVzOiVkICBjaGlsZCAlczolZCIsCisJCV9fZW50cnktPnBhcmVudF9jb21tLCBfX2VudHJ5LT5wYXJlbnRfcGlkLAorCQlfX2VudHJ5LT5jaGlsZF9jb21tLCBfX2VudHJ5LT5jaGlsZF9waWQpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3Igc2VuZGluZyBhIHNpZ25hbDoKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfc2lnbmFsX3NlbmQsCisKKwlUUF9QUk9UTyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCisJVFBfQVJHUyhzaWcsIHApLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJaW50LAlzaWcJCQkpCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJPSBwLT5waWQ7CisJCV9fZW50cnktPnNpZwk9IHNpZzsKKwkpLAorCisJVFBfcHJpbnRrKCJzaWc6ICVkICB0YXNrICVzOiVkIiwKKwkJICBfX2VudHJ5LT5zaWcsIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCkKKyk7CisKKyN1bmRlZiBUUkFDRV9TWVNURU0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvc2tiLmggYi9pbmNsdWRlL3RyYWNlL3NrYi5oCmluZGV4IGE5NjYxMGYuLmI2NjIwNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2Uvc2tiLmgKKysrIGIvaW5jbHVkZS90cmFjZS9za2IuaApAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKIERFQ0xBUkVfVFJBQ0Uoa2ZyZWVfc2tiLAotCVRQUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pLAotCVRQQVJHUyhza2IsIGxvY2F0aW9uKSk7CisJVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqbG9jYXRpb24pLAorCVRQX0FSR1Moc2tiLCBsb2NhdGlvbikpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaCBiL2luY2x1ZGUvdHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjU2ZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS90cmFjZV9ldmVudF90eXBlcy5oCkBAIC0wLDAgKzEsNSBAQAorLyogdHJhY2UvPHR5cGU+X2V2ZW50X3R5cGVzLmggaGVyZSAqLworCisjaW5jbHVkZSA8dHJhY2Uvc2NoZWRfZXZlbnRfdHlwZXMuaD4KKyNpbmNsdWRlIDx0cmFjZS9pcnFfZXZlbnRfdHlwZXMuaD4KKyNpbmNsdWRlIDx0cmFjZS9sb2NrZGVwX2V2ZW50X3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3RyYWNlX2V2ZW50cy5oIGIvaW5jbHVkZS90cmFjZS90cmFjZV9ldmVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDEzNzUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS90cmFjZV9ldmVudHMuaApAQCAtMCwwICsxLDUgQEAKKy8qIHRyYWNlLzx0eXBlPi5oIGhlcmUgKi8KKworI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CisjaW5jbHVkZSA8dHJhY2UvaXJxLmg+CisjaW5jbHVkZSA8dHJhY2UvbG9ja2RlcC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS93b3JrcXVldWUuaCBiL2luY2x1ZGUvdHJhY2Uvd29ya3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyNjUyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2Uvd29ya3F1ZXVlLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX1RSQUNFX1dPUktRVUVVRV9ICisjZGVmaW5lIF9fVFJBQ0VfV09SS1FVRVVFX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCitERUNMQVJFX1RSQUNFKHdvcmtxdWV1ZV9pbnNlcnRpb24sCisJICAgVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayksCisJICAgVFBfQVJHUyh3cV90aHJlYWQsIHdvcmspKTsKKworREVDTEFSRV9UUkFDRSh3b3JrcXVldWVfZXhlY3V0aW9uLAorCSAgIFRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspLAorCSAgIFRQX0FSR1Mod3FfdGhyZWFkLCB3b3JrKSk7CisKKy8qIFRyYWNlIHRoZSBjcmVhdGlvbiBvZiBvbmUgd29ya3F1ZXVlIHRocmVhZCBvbiBhIGNwdSAqLworREVDTEFSRV9UUkFDRSh3b3JrcXVldWVfY3JlYXRpb24sCisJICAgVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQsIGludCBjcHUpLAorCSAgIFRQX0FSR1Mod3FfdGhyZWFkLCBjcHUpKTsKKworREVDTEFSRV9UUkFDRSh3b3JrcXVldWVfZGVzdHJ1Y3Rpb24sCisJICAgVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQpLAorCSAgIFRQX0FSR1Mod3FfdGhyZWFkKSk7CisKKyNlbmRpZiAvKiBfX1RSQUNFX1dPUktRVUVVRV9IICovCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggMTRjNDgzZC4uMDljNzk1MyAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtNTMxLDcgKzUzMSw3IEBACiAKIGNvbmZpZyBDUFVTRVRTCiAJYm9vbCAiQ3B1c2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTTVAgJiYgQ0dST1VQUworCWRlcGVuZHMgb24gQ0dST1VQUwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgbGV0IHlvdSBjcmVhdGUgYW5kIG1hbmFnZSBDUFVTRVRzIHdoaWNoCiAJICBhbGxvdyBkeW5hbWljYWxseSBwYXJ0aXRpb25pbmcgYSBzeXN0ZW0gaW50byBzZXRzIG9mIENQVXMgYW5kCkBAIC01NjUsNyArNTY1LDcgQEAKIAlzZWxlY3QgTU1fT1dORVIKIAloZWxwCiAJICBQcm92aWRlcyBhIG1lbW9yeSByZXNvdXJjZSBjb250cm9sbGVyIHRoYXQgbWFuYWdlcyBib3RoIGFub255bW91cwotCSAgbWVtb3J5IGFuZCBwYWdlIGNhY2hlLiAoU2VlIERvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dCkKKwkgIG1lbW9yeSBhbmQgcGFnZSBjYWNoZS4gKFNlZSBEb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dCkKIAogCSAgTm90ZSB0aGF0IHNldHRpbmcgdGhpcyBvcHRpb24gaW5jcmVhc2VzIGZpeGVkIG1lbW9yeSBvdmVyaGVhZAogCSAgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcGFnZSBvZiBtZW1vcnkgaW4gdGhlIHN5c3RlbS4gQnkgdGhpcywKQEAgLTU5Nyw2ICs1OTcsOCBAQAogCSAgaXMgZGlzYWJsZWQgYnkgYm9vdCBvcHRpb24sIHRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGFuZAogCSAgdGhlcmUgd2lsbCBiZSBubyBvdmVyaGVhZCBmcm9tIHRoaXMuIEV2ZW4gd2hlbiB5b3Ugc2V0IHRoaXMgY29uZmlnPXksCiAJICBpZiBib290IG9wdGlvbiAibm9zd2FwYWNjb3VudCIgaXMgc2V0LCBzd2FwIHdpbGwgbm90IGJlIGFjY291bnRlZC4KKwkgIE5vdywgbWVtb3J5IHVzYWdlIG9mIHN3YXBfY2dyb3VwIGlzIDIgYnl0ZXMgcGVyIGVudHJ5LiBJZiBzd2FwIHBhZ2UKKwkgIHNpemUgaXMgNDA5NmJ5dGVzLCA1MTJrIHBlciAxR2J5dGVzIG9mIHN3YXAuCiAKIGVuZGlmICMgQ0dST1VQUwogCkBAIC02ODcsNyArNjg5LDcgQEAKIAlkZXBlbmRzIG9uIE5BTUVTUEFDRVMgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGUKLQkgIHByb2Nlc3Mgd2l0aCB0aGUgc2FtZSBwaWQgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiBkaWZmZXJlbnQKKwkgIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIHBpZCBhcyBsb25nIGFzIHRoZXkgYXJlIGluIGRpZmZlcmVudAogCSAgcGlkIG5hbWVzcGFjZXMuICBUaGlzIGlzIGEgYnVpbGRpbmcgYmxvY2sgb2YgY29udGFpbmVycy4KIAogCSAgVW5sZXNzIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBhbiBleHBlcmltZW50YWwgZmVhdHVyZQpAQCAtOTUyLDcgKzk1NCw3IEBACiAJICBSYW5kb21pemluZyBoZWFwIHBsYWNlbWVudCBtYWtlcyBoZWFwIGV4cGxvaXRzIGhhcmRlciwgYnV0IGl0CiAJICBhbHNvIGJyZWFrcyBhbmNpZW50IGJpbmFyaWVzIChpbmNsdWRpbmcgYW55dGhpbmcgbGliYzUgYmFzZWQpLgogCSAgVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgYm9vdHVwIGRlZmF1bHQgdG8gaGVhcCByYW5kb21pemF0aW9uCi0JICBkaXNhYmxlZCwgYW5kIGNhbiBiZSBvdmVycmlkZW4gcnVudGltZSBieSBzZXR0aW5nCisJICBkaXNhYmxlZCwgYW5kIGNhbiBiZSBvdmVycmlkZGVuIGF0IHJ1bnRpbWUgYnkgc2V0dGluZwogCSAgL3Byb2Mvc3lzL2tlcm5lbC9yYW5kb21pemVfdmFfc3BhY2UgdG8gMi4KIAogCSAgT24gbm9uLWFuY2llbnQgZGlzdHJvcyAocG9zdC0yMDAwIG9uZXMpIE4gaXMgdXN1YWxseSBhIHNhZmUgY2hvaWNlLgpAQCAtMTAwNSwxMyArMTAwNywyNSBAQAogCiBjb25maWcgTUFSS0VSUwogCWJvb2wgIkFjdGl2YXRlIG1hcmtlcnMiCi0JZGVwZW5kcyBvbiBUUkFDRVBPSU5UUworCXNlbGVjdCBUUkFDRVBPSU5UUwogCWhlbHAKIAkgIFBsYWNlIGFuIGVtcHR5IGZ1bmN0aW9uIGNhbGwgYXQgZWFjaCBtYXJrZXIgc2l0ZS4gQ2FuIGJlCiAJICBkeW5hbWljYWxseSBjaGFuZ2VkIGZvciBhIHByb2JlIGZ1bmN0aW9uLgogCiBzb3VyY2UgImFyY2gvS2NvbmZpZyIKIAorY29uZmlnIFNMT1dfV09SSworCWRlZmF1bHQgbgorCWJvb2wgIkVuYWJsZSBzbG93IHdvcmsgdGhyZWFkIHBvb2wiCisJaGVscAorCSAgVGhlIHNsb3cgd29yayB0aHJlYWQgcG9vbCBwcm92aWRlcyBhIG51bWJlciBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQKKwkgIHRocmVhZHMgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUga2VybmVsIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0CisJICB0YWtlIGEgcmVsYXRpdmVseSBsb25nIHRpbWUuCisKKwkgIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBDYWNoZUZpbGVzIGRvaW5nIGEgcGF0aCBsb29rdXAgZm9sbG93ZWQKKwkgIGJ5IGEgc2VyaWVzIG9mIG1rZGlycyBhbmQgYSBjcmVhdGUgY2FsbCwgYWxsIG9mIHdoaWNoIGhhdmUgdG8gdG91Y2gKKwkgIGRpc2suCisKIGVuZG1lbnUJCSMgR2VuZXJhbCBzZXR1cAogCiBjb25maWcgSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVApAQCAtMTExMCw3ICsxMTI0LDcgQEAKIAkgIGNwdV9wb3NzaWJsZV9tYXAsIHNvbWUgb2YgdGhlbSBjaG9zZSB0byBpbml0aWFsaXplIGNwdV9wb3NzaWJsZV9tYXAKIAkgIHdpdGggYWxsIDFzLCBhbmQgb3RoZXJzIHdpdGggYWxsIDBzLiAgV2hlbiB0aGV5IHdlcmUgY2VudHJhbGlzZWQsCiAJICBpdCB3YXMgYmV0dGVyIHRvIHByb3ZpZGUgdGhpcyBvcHRpb24gdGhhbiB0byBicmVhayBhbGwgdGhlIGFyY2hzCi0JICBhbmQgaGF2ZSBzZXZlcmFsIGFyY2ggbWFpbnRhaW5lcnMgcGVyc3VpbmcgbWUgZG93biBkYXJrIGFsbGV5cy4KKwkgIGFuZCBoYXZlIHNldmVyYWwgYXJjaCBtYWludGFpbmVycyBwdXJzdWluZyBtZSBkb3duIGRhcmsgYWxsZXlzLgogCiBjb25maWcgU1RPUF9NQUNISU5FCiAJYm9vbApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHMuYyBiL2luaXQvZG9fbW91bnRzLmMKaW5kZXggOGQ0ZmY1YS4uZGQ3ZWU1ZiAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHMuYworKysgYi9pbml0L2RvX21vdW50cy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogCiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzX3NiLmg+CmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5oIGIvaW5pdC9kb19tb3VudHMuaAppbmRleCA5YWE5NjhkLi5mNWI5NzhhIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50cy5oCisrKyBiL2luaXQvZG9fbW91bnRzLmgKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50c19tZC5jIGIvaW5pdC9kb19tb3VudHNfbWQuYwppbmRleCA5YmRkZGJjLi42OWFlYmJmIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50c19tZC5jCisrKyBiL2luaXQvZG9fbW91bnRzX21kLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF9wLmg+CiAKICNpbmNsdWRlICJkb19tb3VudHMuaCIKIApAQCAtMTEyLDggKzExMyw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNkZWZpbmUgTWRwTWlub3JTaGlmdCA2Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBtZF9zZXR1cF9kcml2ZSh2b2lkKQogewogCWludCBtaW5vciwgaSwgZW50LCBwYXJ0aXRpb25lZDsKZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IDYxOWMxYmEuLjgwY2Q3MTMgMTAwNjQ0Ci0tLSBhL2luaXQvaW5pdHJhbWZzLmMKKysrIGIvaW5pdC9pbml0cmFtZnMuYwpAQCAtNTcxLDExICs1NzEsMTEgQEAKIAlpZiAoaW5pdHJkX3N0YXJ0KSB7CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfUkFNCiAJCWludCBmZDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY2hlY2tpbmcgaWYgaW1hZ2UgaXMgaW5pdHJhbWZzLi4uIik7CisJCXByaW50ayhLRVJOX0lORk8gImNoZWNraW5nIGlmIGltYWdlIGlzIGluaXRyYW1mcy4uLlxuIik7CiAJCWVyciA9IHVucGFja190b19yb290ZnMoKGNoYXIgKilpbml0cmRfc3RhcnQsCiAJCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0KTsKIAkJaWYgKCFlcnIpIHsKLQkJCXByaW50aygiIGl0IGlzXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gInJvb3RmcyBpbWFnZSBpcyBpbml0cmFtZnM7IHVucGFja2luZy4uLlxuIik7CiAJCQlmcmVlX2luaXRyZCgpOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7CkBAIC01ODMsNyArNTgzLDggQEAKIAkJCXVucGFja190b19yb290ZnMoX19pbml0cmFtZnNfc3RhcnQsCiAJCQkJIF9faW5pdHJhbWZzX2VuZCAtIF9faW5pdHJhbWZzX3N0YXJ0KTsKIAkJfQotCQlwcmludGsoIml0IGlzbid0ICglcyk7IGxvb2tzIGxpa2UgYW4gaW5pdHJkXG4iLCBlcnIpOworCQlwcmludGsoS0VSTl9JTkZPICJyb290ZnMgaW1hZ2UgaXMgbm90IGluaXRyYW1mcyAoJXMpIgorCQkJCSI7IGxvb2tzIGxpa2UgYW4gaW5pdHJkXG4iLCBlcnIpOwogCQlmZCA9IHN5c19vcGVuKCIvaW5pdHJkLmltYWdlIiwgT19XUk9OTFl8T19DUkVBVCwgMDcwMCk7CiAJCWlmIChmZCA+PSAwKSB7CiAJCQlzeXNfd3JpdGUoZmQsIChjaGFyICopaW5pdHJkX3N0YXJ0LApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCAwN2M4NjU4Li4zNTg1ZjA3IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8dHJhY2Uva21lbXRyYWNlLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKICNpbmNsdWRlIDxhc20vc21wLmg+CkBAIC02NDgsNiArNjQ5LDcgQEAKIAllbmFibGVfZGVidWdfcGFnZWFsbG9jKCk7CiAJY3B1X2hvdHBsdWdfaW5pdCgpOwogCWttZW1fY2FjaGVfaW5pdCgpOworCWttZW10cmFjZV9pbml0KCk7CiAJZGVidWdfb2JqZWN0c19tZW1faW5pdCgpOwogCWlkcl9pbml0X2NhY2hlKCk7CiAJc2V0dXBfcGVyX2NwdV9wYWdlc2V0KCk7CkBAIC03NjksNiArNzcxLDcgQEAKIHsKIAlyY3VfaW5pdF9zY2hlZCgpOyAvKiBuZWVkZWQgYnkgbW9kdWxlX2luaXQgc3RhZ2UuICovCiAJaW5pdF93b3JrcXVldWVzKCk7CisJY3B1c2V0X2luaXRfc21wKCk7CiAJdXNlcm1vZGVoZWxwZXJfaW5pdCgpOwogCWRyaXZlcl9pbml0KCk7CiAJaW5pdF9pcnFfcHJvYygpOwpAQCAtODYzLDggKzg2Niw2IEBACiAJc21wX2luaXQoKTsKIAlzY2hlZF9pbml0X3NtcCgpOwogCi0JY3B1c2V0X2luaXRfc21wKCk7Ci0KIAlkb19iYXNpY19zZXR1cCgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2lwYy9pcGNfc3lzY3RsLmMgYi9pcGMvaXBjX3N5c2N0bC5jCmluZGV4IDRhN2ExMmMuLjQwZWFiNzMgMTAwNjQ0Ci0tLSBhL2lwYy9pcGNfc3lzY3RsLmMKKysrIGIvaXBjL2lwY19zeXNjdGwuYwpAQCAtMjYsNyArMjYsNyBAQAogCXJldHVybiB3aGljaDsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiBzdGF0aWMgaW50IHByb2NfaXBjX2RvaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggYThkZGFkYi4uOTE2Nzg1MyAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJCWRlbnRyeS0+ZF9mc2RhdGEgPSBhdHRyOwogCX0KIAotCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJcmV0ID0gbW50X3dhbnRfd3JpdGUobXF1ZXVlX21udCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggZjIzOWQ4Ny4uZmFhNDZkYSAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtNTU1LDEyICs1NTUsMTQgQEAKIAlpbl91c2UgPSBzaG1faWRzKG5zKS5pbl91c2U7CiAKIAlmb3IgKHRvdGFsID0gMCwgbmV4dF9pZCA9IDA7IHRvdGFsIDwgaW5fdXNlOyBuZXh0X2lkKyspIHsKKwkJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwYzsKIAkJc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwOwogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JCXNocCA9IGlkcl9maW5kKCZzaG1faWRzKG5zKS5pcGNzX2lkciwgbmV4dF9pZCk7Ci0JCWlmIChzaHAgPT0gTlVMTCkKKwkJaXBjID0gaWRyX2ZpbmQoJnNobV9pZHMobnMpLmlwY3NfaWRyLCBuZXh0X2lkKTsKKwkJaWYgKGlwYyA9PSBOVUxMKQogCQkJY29udGludWU7CisJCXNocCA9IGNvbnRhaW5lcl9vZihpcGMsIHN0cnVjdCBzaG1pZF9rZXJuZWwsIHNobV9wZXJtKTsKIAogCQlpbm9kZSA9IHNocC0+c2htX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCBlNDc5MWIzLi5iYWIxZGZmIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC05Myw2ICs5Myw3IEBACiBvYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSArPSB0cmFjZS8KIG9iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZS8KIG9iai0kKENPTkZJR19TTVApICs9IHNjaGVkX2NwdXByaS5vCitvYmotJChDT05GSUdfU0xPV19XT1JLKSArPSBzbG93LXdvcmsubwogCiBpZm5lcSAoJChDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSKSx5KQogIyBBY2NvcmRpbmcgdG8gQWxhbiBNb2RyYSA8YWxhbkBsaW51eGNhcmUuY29tLmF1PiwgdGhlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGlzCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCA4Y2JkZGZmLi4yYmZjNjQ3IDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAKICNpbmNsdWRlICJhdWRpdC5oIgogCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggYzUwMGNhNy4uMzgyMTA5YiAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtOTQsNyArOTQsNiBAQAogCWNoYXIgcmVsZWFzZV9hZ2VudF9wYXRoW1BBVEhfTUFYXTsKIH07CiAKLQogLyoKICAqIFRoZSAicm9vdG5vZGUiIGhpZXJhcmNoeSBpcyB0aGUgImR1bW15IGhpZXJhcmNoeSIsIHJlc2VydmVkIGZvciB0aGUKICAqIHN1YnN5c3RlbXMgdGhhdCBhcmUgb3RoZXJ3aXNlIHVuYXR0YWNoZWQgLSBpdCBuZXZlciBoYXMgbW9yZSB0aGFuIGEKQEAgLTEwMiw2ICsxMDEsMzkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjZ3JvdXBmc19yb290IHJvb3Rub2RlOwogCisvKgorICogQ1NTIElEIC0tIElEIHBlciBzdWJzeXMncyBDZ3JvdXAgU3Vic3lzIFN0YXRlKENTUykuIHVzZWQgb25seSB3aGVuCisgKiBjZ3JvdXBfc3Vic3lzLT51c2VfaWQgIT0gMC4KKyAqLworI2RlZmluZSBDU1NfSURfTUFYCSg2NTUzNSkKK3N0cnVjdCBjc3NfaWQgeworCS8qCisJICogVGhlIGNzcyB0byB3aGljaCB0aGlzIElEIHBvaW50cy4gVGhpcyBwb2ludGVyIGlzIHNldCB0byB2YWxpZCB2YWx1ZQorCSAqIGFmdGVyIGNncm91cCBpcyBwb3B1bGF0ZWQuIElmIGNncm91cCBpcyByZW1vdmVkLCB0aGlzIHdpbGwgYmUgTlVMTC4KKwkgKiBUaGlzIHBvaW50ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgUkNVLXNhZmUgYmVjYXVzZSBkZXN0cm95KCkKKwkgKiBpcyBjYWxsZWQgYWZ0ZXIgc3luY2hyb25pemVfcmN1KCkuIEJ1dCBmb3Igc2FmZSB1c2UsIGNzc19pc19yZW1vdmVkKCkKKwkgKiBjc3NfdHJ5Z2V0KCkgc2hvdWxkIGJlIHVzZWQgZm9yIGF2b2lkaW5nIHJhY2UuCisJICovCisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKKwkvKgorCSAqIElEIG9mIHRoaXMgY3NzLgorCSAqLworCXVuc2lnbmVkIHNob3J0IGlkOworCS8qCisJICogRGVwdGggaW4gaGllcmFyY2h5IHdoaWNoIHRoaXMgSUQgYmVsb25ncyB0by4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBkZXB0aDsKKwkvKgorCSAqIElEIGlzIGZyZWVkIGJ5IFJDVS4gKGFuZCBsb29rdXAgcm91dGluZSBpcyBSQ1Ugc2FmZS4pCisJICovCisJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOworCS8qCisJICogSGllcmFyY2h5IG9mIENTUyBJRCBiZWxvbmdzIHRvLgorCSAqLworCXVuc2lnbmVkIHNob3J0IHN0YWNrWzBdOyAvKiBBcnJheSBvZiBMZW5ndGggKGRlcHRoKzEpICovCit9OworCisKIC8qIFRoZSBsaXN0IG9mIGhpZXJhcmNoeSByb290cyAqLwogCiBzdGF0aWMgTElTVF9IRUFEKHJvb3RzKTsKQEAgLTE4NSw2ICsyMTcsOCBAQAogc3RhdGljIHN0cnVjdCBjc3Nfc2V0IGluaXRfY3NzX3NldDsKIHN0YXRpYyBzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgaW5pdF9jc3Nfc2V0X2xpbms7CiAKK3N0YXRpYyBpbnQgY2dyb3VwX3N1YnN5c19pbml0X2lkcihzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpOworCiAvKiBjc3Nfc2V0X2xvY2sgcHJvdGVjdHMgdGhlIGxpc3Qgb2YgY3NzX3NldCBvYmplY3RzLCBhbmQgdGhlCiAgKiBjaGFpbiBvZiB0YXNrcyBvZmYgZWFjaCBjc3Nfc2V0LiAgTmVzdHMgb3V0c2lkZSB0YXNrLT5hbGxvY19sb2NrCiAgKiBkdWUgdG8gY2dyb3VwX2l0ZXJfc3RhcnQoKSAqLwpAQCAtNTY3LDYgKzYwMSw5IEBACiAJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLLAogfTsKIAorc3RhdGljIGludCBhbGxvY19jc3NfaWQoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJc3RydWN0IGNncm91cCAqcGFyZW50LCBzdHJ1Y3QgY2dyb3VwICpjaGlsZCk7CisKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmNncm91cF9uZXdfaW5vZGUobW9kZV90IG1vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CkBAIC01ODUsMTMgKzYyMiwxOCBAQAogICogQ2FsbCBzdWJzeXMncyBwcmVfZGVzdHJveSBoYW5kbGVyLgogICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNzcyByZWZjbnQgY2hlY2suCiAgKi8KLXN0YXRpYyB2b2lkIGNncm91cF9jYWxsX3ByZV9kZXN0cm95KHN0cnVjdCBjZ3JvdXAgKmNncnApCitzdGF0aWMgaW50IGNncm91cF9jYWxsX3ByZV9kZXN0cm95KHN0cnVjdCBjZ3JvdXAgKmNncnApCiB7CiAJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzOworCWludCByZXQgPSAwOworCiAJZm9yX2VhY2hfc3Vic3lzKGNncnAtPnJvb3QsIHNzKQotCQlpZiAoc3MtPnByZV9kZXN0cm95KQotCQkJc3MtPnByZV9kZXN0cm95KHNzLCBjZ3JwKTsKLQlyZXR1cm47CisJCWlmIChzcy0+cHJlX2Rlc3Ryb3kpIHsKKwkJCXJldCA9IHNzLT5wcmVfZGVzdHJveShzcywgY2dycCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQl9CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9jZ3JvdXBfcmN1KHN0cnVjdCByY3VfaGVhZCAqb2JqKQpAQCAtNjg1LDYgKzcyNywyMiBAQAogCXJlbW92ZV9kaXIoZGVudHJ5KTsKIH0KIAorLyoKKyAqIEEgcXVldWUgZm9yIHdhaXRlcnMgdG8gZG8gcm1kaXIoKSBjZ3JvdXAuIEEgdGFza3Mgd2lsbCBzbGVlcCB3aGVuCisgKiBjZ3JvdXAtPmNvdW50ID09IDAgJiYgbGlzdF9lbXB0eSgmY2dyb3VwLT5jaGlsZHJlbikgJiYgc3Vic3lzIGhhcyBzb21lCisgKiByZWZlcmVuY2UgdG8gY3NzLT5yZWZjbnQuIEluIGdlbmVyYWwsIHRoaXMgcmVmY250IGlzIGV4cGVjdGVkIHRvIGdvZXMgZG93bgorICogdG8gemVybywgc29vbi4KKyAqCisgKiBDR1JQX1dBSVRfT05fUk1ESVIgZmxhZyBpcyBtb2RpZmllZCB1bmRlciBjZ3JvdXAncyBpbm9kZS0+aV9tdXRleDsKKyAqLworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoY2dyb3VwX3JtZGlyX3dhaXRxKTsKKworc3RhdGljIHZvaWQgY2dyb3VwX3dha2V1cF9ybWRpcl93YWl0ZXJzKGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnApCit7CisJaWYgKHVubGlrZWx5KHRlc3RfYml0KENHUlBfV0FJVF9PTl9STURJUiwgJmNncnAtPmZsYWdzKSkpCisJCXdha2VfdXBfYWxsKCZjZ3JvdXBfcm1kaXJfd2FpdHEpOworfQorCiBzdGF0aWMgaW50IHJlYmluZF9zdWJzeXN0ZW1zKHN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBmaW5hbF9iaXRzKQogewpAQCAtODU3LDE2ICs5MTUsMTYgQEAKIAl9CiAKIAlyZXQgPSByZWJpbmRfc3Vic3lzdGVtcyhyb290LCBvcHRzLnN1YnN5c19iaXRzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKiAocmUpcG9wdWxhdGUgc3Vic3lzdGVtIGZpbGVzICovCi0JaWYgKCFyZXQpCi0JCWNncm91cF9wb3B1bGF0ZV9kaXIoY2dycCk7CisJY2dyb3VwX3BvcHVsYXRlX2RpcihjZ3JwKTsKIAogCWlmIChvcHRzLnJlbGVhc2VfYWdlbnQpCiAJCXN0cmNweShyb290LT5yZWxlYXNlX2FnZW50X3BhdGgsIG9wdHMucmVsZWFzZV9hZ2VudCk7CiAgb3V0X3VubG9jazoKLQlpZiAob3B0cy5yZWxlYXNlX2FnZW50KQotCQlrZnJlZShvcHRzLnJlbGVhc2VfYWdlbnQpOworCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CiAJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCW11dGV4X3VubG9jaygmY2dycC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtOTY5LDE1ICsxMDI3LDEzIEBACiAJLyogRmlyc3QgZmluZCB0aGUgZGVzaXJlZCBzZXQgb2Ygc3Vic3lzdGVtcyAqLwogCXJldCA9IHBhcnNlX2Nncm91cGZzX29wdGlvbnMoZGF0YSwgJm9wdHMpOwogCWlmIChyZXQpIHsKLQkJaWYgKG9wdHMucmVsZWFzZV9hZ2VudCkKLQkJCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CisJCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcm9vdCA9IGt6YWxsb2Moc2l6ZW9mKCpyb290KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyb290KSB7Ci0JCWlmIChvcHRzLnJlbGVhc2VfYWdlbnQpCi0JCQlrZnJlZShvcHRzLnJlbGVhc2VfYWdlbnQpOworCQlrZnJlZShvcHRzLnJlbGVhc2VfYWdlbnQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTEyODAsNiArMTMzNiwxMiBAQAogCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmb2xkY2dycC0+ZmxhZ3MpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCXB1dF9jc3Nfc2V0KGNnKTsKKworCS8qCisJICogd2FrZSB1cCBybWRpcigpIHdhaXRlci4gdGhlIHJtZGlyIHNob3VsZCBmYWlsIHNpbmNlIHRoZSBjZ3JvdXAKKwkgKiBpcyBubyBsb25nZXIgZW1wdHkuCisJICovCisJY2dyb3VwX3dha2V1cF9ybWRpcl93YWl0ZXJzKGNncnApOwogCXJldHVybiAwOwogfQogCkBAIC0xNjI1LDcgKzE2ODcsNyBAQAogCS5yZW5hbWUgPSBjZ3JvdXBfcmVuYW1lLAogfTsKIAotc3RhdGljIGludCBjZ3JvdXBfY3JlYXRlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKK3N0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgbW9kZV90IG1vZGUsCiAJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNncm91cF9kb3BzID0gewpAQCAtMTY3MSw3ICsxNzMzLDcgQEAKICAqIEBtb2RlOiBtb2RlIHRvIHNldCBvbiBuZXcgZGlyZWN0b3J5LgogICovCiBzdGF0aWMgaW50IGNncm91cF9jcmVhdGVfZGlyKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQlpbnQgbW9kZSkKKwkJCQltb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CiAJaW50IGVycm9yID0gMDsKQEAgLTE2ODksNiArMTc1MSwzMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorLyoqCisgKiBjZ3JvdXBfZmlsZV9tb2RlIC0gZGVkdWNlIGZpbGUgbW9kZSBvZiBhIGNvbnRyb2wgZmlsZQorICogQGNmdDogdGhlIGNvbnRyb2wgZmlsZSBpbiBxdWVzdGlvbgorICoKKyAqIHJldHVybnMgY2Z0LT5tb2RlIGlmIC0+bW9kZSBpcyBub3QgMAorICogcmV0dXJucyBTX0lSVUdPfFNfSVdVU1IgaWYgaXQgaGFzIGJvdGggYSByZWFkIGFuZCBhIHdyaXRlIGhhbmRsZXIKKyAqIHJldHVybnMgU19JUlVHTyBpZiBpdCBoYXMgb25seSBhIHJlYWQgaGFuZGxlcgorICogcmV0dXJucyBTX0lXVVNSIGlmIGl0IGhhcyBvbmx5IGEgd3JpdGUgaGFuZGVyCisgKi8KK3N0YXRpYyBtb2RlX3QgY2dyb3VwX2ZpbGVfbW9kZShjb25zdCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCit7CisJbW9kZV90IG1vZGUgPSAwOworCisJaWYgKGNmdC0+bW9kZSkKKwkJcmV0dXJuIGNmdC0+bW9kZTsKKworCWlmIChjZnQtPnJlYWQgfHwgY2Z0LT5yZWFkX3U2NCB8fCBjZnQtPnJlYWRfczY0IHx8CisJICAgIGNmdC0+cmVhZF9tYXAgfHwgY2Z0LT5yZWFkX3NlcV9zdHJpbmcpCisJCW1vZGUgfD0gU19JUlVHTzsKKworCWlmIChjZnQtPndyaXRlIHx8IGNmdC0+d3JpdGVfdTY0IHx8IGNmdC0+d3JpdGVfczY0IHx8CisJICAgIGNmdC0+d3JpdGVfc3RyaW5nIHx8IGNmdC0+dHJpZ2dlcikKKwkJbW9kZSB8PSBTX0lXVVNSOworCisJcmV0dXJuIG1vZGU7Cit9CisKIGludCBjZ3JvdXBfYWRkX2ZpbGUoc3RydWN0IGNncm91cCAqY2dycCwKIAkJICAgICAgIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzdWJzeXMsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCkBAIC0xNjk2LDYgKzE3ODUsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRpciA9IGNncnAtPmRlbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yOworCW1vZGVfdCBtb2RlOwogCiAJY2hhciBuYW1lW01BWF9DR1JPVVBfVFlQRV9OQU1FTEVOICsgTUFYX0NGVFlQRV9OQU1FICsgMl0gPSB7IDAgfTsKIAlpZiAoc3Vic3lzICYmICF0ZXN0X2JpdChST09UX05PUFJFRklYLCAmY2dycC0+cm9vdC0+ZmxhZ3MpKSB7CkBAIC0xNzA2LDcgKzE3OTYsOCBAQAogCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpKTsKIAlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCBkaXIsIHN0cmxlbihuYW1lKSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQllcnJvciA9IGNncm91cF9jcmVhdGVfZmlsZShkZW50cnksIDA2NDQgfCBTX0lGUkVHLAorCQltb2RlID0gY2dyb3VwX2ZpbGVfbW9kZShjZnQpOworCQllcnJvciA9IGNncm91cF9jcmVhdGVfZmlsZShkZW50cnksIG1vZGUgfCBTX0lGUkVHLAogCQkJCQkJY2dycC0+cm9vdC0+c2IpOwogCQlpZiAoIWVycm9yKQogCQkJZGVudHJ5LT5kX2ZzZGF0YSA9ICh2b2lkICopY2Z0OwpAQCAtMjI4OCw2ICsyMzc5LDcgQEAKIAkJLndyaXRlX3U2NCA9IGNncm91cF90YXNrc193cml0ZSwKIAkJLnJlbGVhc2UgPSBjZ3JvdXBfdGFza3NfcmVsZWFzZSwKIAkJLnByaXZhdGUgPSBGSUxFX1RBU0tMSVNULAorCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAogCX0sCiAKIAl7CkBAIC0yMzI3LDYgKzI0MTksMTcgQEAKIAkJaWYgKHNzLT5wb3B1bGF0ZSAmJiAoZXJyID0gc3MtPnBvcHVsYXRlKHNzLCBjZ3JwKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CisJLyogVGhpcyBjZ3JvdXAgaXMgcmVhZHkgbm93ICovCisJZm9yX2VhY2hfc3Vic3lzKGNncnAtPnJvb3QsIHNzKSB7CisJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MgPSBjZ3JwLT5zdWJzeXNbc3MtPnN1YnN5c19pZF07CisJCS8qCisJCSAqIFVwZGF0ZSBpZC0+Y3NzIHBvaW50ZXIgYW5kIG1ha2UgdGhpcyBjc3MgdmlzaWJsZSBmcm9tCisJCSAqIENTUyBJRCBmdW5jdGlvbnMuIFRoaXMgcG9pbnRlciB3aWxsIGJlIGRlcmVmZXJlbmVkCisJCSAqIGZyb20gUkNVLXJlYWQtc2lkZSB3aXRob3V0IGxvY2tzLgorCQkgKi8KKwkJaWYgKGNzcy0+aWQpCisJCQlyY3VfYXNzaWduX3BvaW50ZXIoY3NzLT5pZC0+Y3NzLCBjc3MpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjMzOCw2ICsyNDQxLDcgQEAKIAljc3MtPmNncm91cCA9IGNncnA7CiAJYXRvbWljX3NldCgmY3NzLT5yZWZjbnQsIDEpOwogCWNzcy0+ZmxhZ3MgPSAwOworCWNzcy0+aWQgPSBOVUxMOwogCWlmIChjZ3JwID09IGR1bW15dG9wKQogCQlzZXRfYml0KENTU19ST09ULCAmY3NzLT5mbGFncyk7CiAJQlVHX09OKGNncnAtPnN1YnN5c1tzcy0+c3Vic3lzX2lkXSk7CkBAIC0yMzc2LDcgKzI0ODAsNyBAQAogICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbXV0ZXggb24gdGhlIHBhcmVudCBpbm9kZSBoZWxkCiAgKi8KIHN0YXRpYyBsb25nIGNncm91cF9jcmVhdGUoc3RydWN0IGNncm91cCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICAgIGludCBtb2RlKQorCQkJICAgICBtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwOwogCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290ID0gcGFyZW50LT5yb290OwpAQCAtMjQxMyw2ICsyNTE3LDEwIEBACiAJCQlnb3RvIGVycl9kZXN0cm95OwogCQl9CiAJCWluaXRfY2dyb3VwX2Nzcyhjc3MsIHNzLCBjZ3JwKTsKKwkJaWYgKHNzLT51c2VfaWQpCisJCQlpZiAoYWxsb2NfY3NzX2lkKHNzLCBwYXJlbnQsIGNncnApKQorCQkJCWdvdG8gZXJyX2Rlc3Ryb3k7CisJCS8qIEF0IGVycm9yLCAtPmRlc3Ryb3koKSBjYWxsYmFjayBoYXMgdG8gZnJlZSBhc3NpZ25lZCBJRC4gKi8KIAl9CiAKIAljZ3JvdXBfbG9ja19oaWVyYXJjaHkocm9vdCk7CkBAIC0yNTU1LDkgKzI2NjMsMTEgQEAKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAlzdHJ1Y3QgZGVudHJ5ICpkOwogCXN0cnVjdCBjZ3JvdXAgKnBhcmVudDsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlpbnQgcmV0OwogCiAJLyogdGhlIHZmcyBob2xkcyBib3RoIGlub2RlLT5pX211dGV4IGFscmVhZHkgKi8KLQorYWdhaW46CiAJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKIAlpZiAoYXRvbWljX3JlYWQoJmNncnAtPmNvdW50KSAhPSAwKSB7CiAJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKQEAgLTI1NzMsMTcgKzI2ODMsMzkgQEAKIAkgKiBDYWxsIHByZV9kZXN0cm95IGhhbmRsZXJzIG9mIHN1YnN5cy4gTm90aWZ5IHN1YnN5c3RlbXMKIAkgKiB0aGF0IHJtZGlyKCkgcmVxdWVzdCBjb21lcy4KIAkgKi8KLQljZ3JvdXBfY2FsbF9wcmVfZGVzdHJveShjZ3JwKTsKKwlyZXQgPSBjZ3JvdXBfY2FsbF9wcmVfZGVzdHJveShjZ3JwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKIAlwYXJlbnQgPSBjZ3JwLT5wYXJlbnQ7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmNncnAtPmNvdW50KQotCSAgICB8fCAhbGlzdF9lbXB0eSgmY2dycC0+Y2hpbGRyZW4pCi0JICAgIHx8ICFjZ3JvdXBfY2xlYXJfY3NzX3JlZnMoY2dycCkpIHsKKwlpZiAoYXRvbWljX3JlYWQoJmNncnAtPmNvdW50KSB8fCAhbGlzdF9lbXB0eSgmY2dycC0+Y2hpbGRyZW4pKSB7CiAJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CisJLyoKKwkgKiBjc3NfcHV0L2dldCBpcyBwcm92aWRlZCBmb3Igc3Vic3lzIHRvIGdyYWIgcmVmY250IHRvIGNzcy4gSW4gdHlwaWNhbAorCSAqIGNhc2UsIHN1YnN5c3RlbSBoYXMgbm8gcmVmZXJlbmNlIGFmdGVyIHByZV9kZXN0cm95KCkuIEJ1dCwgdW5kZXIKKwkgKiBoaWVyYXJjaHkgbWFuYWdlbWVudCwgc29tZSAqdGVtcG9yYWwqIHJlZmNudCBjYW4gYmUgaG9sZC4KKwkgKiBUbyBhdm9pZCByZXR1cm5pbmcgLUVCVVNZIHRvIGEgdXNlciwgd2FpdHF1ZXVlIGlzIHVzZWQuIElmIHN1YnN5cworCSAqIGlzIHJlYWxseSBidXN5LCBpdCBzaG91bGQgcmV0dXJuIC1FQlVTWSBhdCBwcmVfZGVzdHJveSgpLiB3YWtlX3VwCisJICogaXMgY2FsbGVkIHdoZW4gY3NzX3B1dCgpIGlzIGNhbGxlZCBhbmQgcmVmY250IGdvZXMgZG93biB0byAwLgorCSAqLworCXNldF9iaXQoQ0dSUF9XQUlUX09OX1JNRElSLCAmY2dycC0+ZmxhZ3MpOworCXByZXBhcmVfdG9fd2FpdCgmY2dyb3VwX3JtZGlyX3dhaXRxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCWlmICghY2dyb3VwX2NsZWFyX2Nzc19yZWZzKGNncnApKSB7CisJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKKwkJc2NoZWR1bGUoKTsKKwkJZmluaXNoX3dhaXQoJmNncm91cF9ybWRpcl93YWl0cSwgJndhaXQpOworCQljbGVhcl9iaXQoQ0dSUF9XQUlUX09OX1JNRElSLCAmY2dycC0+ZmxhZ3MpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gLUVJTlRSOworCQlnb3RvIGFnYWluOworCX0KKwkvKiBOTyBjc3NfdHJ5Z2V0KCkgY2FuIHN1Y2Nlc3MgYWZ0ZXIgaGVyZS4gKi8KKwlmaW5pc2hfd2FpdCgmY2dyb3VwX3JtZGlyX3dhaXRxLCAmd2FpdCk7CisJY2xlYXJfYml0KENHUlBfV0FJVF9PTl9STURJUiwgJmNncnAtPmZsYWdzKTsKIAogCXNwaW5fbG9jaygmcmVsZWFzZV9saXN0X2xvY2spOwogCXNldF9iaXQoQ0dSUF9SRU1PVkVELCAmY2dycC0+ZmxhZ3MpOwpAQCAtMjcwOCw2ICsyODQwLDggQEAKIAkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOwogCQlpZiAoIXNzLT5lYXJseV9pbml0KQogCQkJY2dyb3VwX2luaXRfc3Vic3lzKHNzKTsKKwkJaWYgKHNzLT51c2VfaWQpCisJCQljZ3JvdXBfc3Vic3lzX2luaXRfaWRyKHNzKTsKIAl9CiAKIAkvKiBBZGQgaW5pdF9jc3Nfc2V0IHRvIHRoZSBoYXNoIHRhYmxlICovCkBAIC0zMDg0LDE4ICszMjE4LDE5IEBACiB9CiAKIC8qKgotICogY2dyb3VwX2lzX2Rlc2NlbmRhbnQgLSBzZWUgaWYgQGNncnAgaXMgYSBkZXNjZW5kYW50IG9mIGN1cnJlbnQgdGFzaydzIGNncnAKKyAqIGNncm91cF9pc19kZXNjZW5kYW50IC0gc2VlIGlmIEBjZ3JwIGlzIGEgZGVzY2VuZGFudCBvZiBAdGFzaydzIGNncnAKICAqIEBjZ3JwOiB0aGUgY2dyb3VwIGluIHF1ZXN0aW9uCisgKiBAdGFzazogdGhlIHRhc2sgaW4gcXVlc3Rpb24KICAqCi0gKiBTZWUgaWYgQGNncnAgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IHRhc2sncyBjZ3JvdXAgaW4KLSAqIHRoZSBhcHByb3ByaWF0ZSBoaWVyYXJjaHkuCisgKiBTZWUgaWYgQGNncnAgaXMgYSBkZXNjZW5kYW50IG9mIEB0YXNrJ3MgY2dyb3VwIGluIHRoZSBhcHByb3ByaWF0ZQorICogaGllcmFyY2h5LgogICoKICAqIElmIHdlIGFyZSBzZW5kaW5nIGluIGR1bW15dG9wLCB0aGVuIHByZXN1bWFibHkgd2UgYXJlIGNyZWF0aW5nCiAgKiB0aGUgdG9wIGNncm91cCBpbiB0aGUgc3Vic3lzdGVtLgogICoKICAqIENhbGxlZCBvbmx5IGJ5IHRoZSBucyAobnNwcm94eSkgY2dyb3VwLgogICovCi1pbnQgY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCkKK2ludCBjZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY2dyb3VwICp0YXJnZXQ7CkBAIC0zMTA1LDcgKzMyNDAsNyBAQAogCQlyZXR1cm4gMTsKIAogCWdldF9maXJzdF9zdWJzeXMoY2dycCwgTlVMTCwgJnN1YnN5c19pZCk7Ci0JdGFyZ2V0ID0gdGFza19jZ3JvdXAoY3VycmVudCwgc3Vic3lzX2lkKTsKKwl0YXJnZXQgPSB0YXNrX2Nncm91cCh0YXNrLCBzdWJzeXNfaWQpOwogCXdoaWxlIChjZ3JwICE9IHRhcmdldCAmJiBjZ3JwIT0gY2dycC0+dG9wX2Nncm91cCkKIAkJY2dycCA9IGNncnAtPnBhcmVudDsKIAlyZXQgPSAoY2dycCA9PSB0YXJnZXQpOwpAQCAtMzEzOCwxMCArMzI3MywxMiBAQAogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjc3MtPmNncm91cDsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKChhdG9taWNfZGVjX3JldHVybigmY3NzLT5yZWZjbnQpID09IDEpICYmCi0JICAgIG5vdGlmeV9vbl9yZWxlYXNlKGNncnApKSB7Ci0JCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmY2dycC0+ZmxhZ3MpOwotCQljaGVja19mb3JfcmVsZWFzZShjZ3JwKTsKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNzcy0+cmVmY250KSA9PSAxKSB7CisJCWlmIChub3RpZnlfb25fcmVsZWFzZShjZ3JwKSkgeworCQkJc2V0X2JpdChDR1JQX1JFTEVBU0FCTEUsICZjZ3JwLT5mbGFncyk7CisJCQljaGVja19mb3JfcmVsZWFzZShjZ3JwKTsKKwkJfQorCQljZ3JvdXBfd2FrZXVwX3JtZGlyX3dhaXRlcnMoY2dycCk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtMzI0MSwzICszMzc4LDIzMiBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgiY2dyb3VwX2Rpc2FibGU9IiwgY2dyb3VwX2Rpc2FibGUpOworCisvKgorICogRnVuY3RvbnMgZm9yIENTUyBJRC4KKyAqLworCisvKgorICpUbyBnZXQgSUQgb3RoZXIgdGhhbiAwLCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiAhY2dyb3VwX2lzX3JlbW92ZWQoKS4KKyAqLwordW5zaWduZWQgc2hvcnQgY3NzX2lkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCit7CisJc3RydWN0IGNzc19pZCAqY3NzaWQgPSByY3VfZGVyZWZlcmVuY2UoY3NzLT5pZCk7CisKKwlpZiAoY3NzaWQpCisJCXJldHVybiBjc3NpZC0+aWQ7CisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIHNob3J0IGNzc19kZXB0aChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQoreworCXN0cnVjdCBjc3NfaWQgKmNzc2lkID0gcmN1X2RlcmVmZXJlbmNlKGNzcy0+aWQpOworCisJaWYgKGNzc2lkKQorCQlyZXR1cm4gY3NzaWQtPmRlcHRoOworCXJldHVybiAwOworfQorCitib29sIGNzc19pc19hbmNlc3RvcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY2hpbGQsCisJCSAgICBjb25zdCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdCkKK3sKKwlzdHJ1Y3QgY3NzX2lkICpjaGlsZF9pZCA9IHJjdV9kZXJlZmVyZW5jZShjaGlsZC0+aWQpOworCXN0cnVjdCBjc3NfaWQgKnJvb3RfaWQgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+aWQpOworCisJaWYgKCFjaGlsZF9pZCB8fCAhcm9vdF9pZCB8fCAoY2hpbGRfaWQtPmRlcHRoIDwgcm9vdF9pZC0+ZGVwdGgpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIGNoaWxkX2lkLT5zdGFja1tyb290X2lkLT5kZXB0aF0gPT0gcm9vdF9pZC0+aWQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZnJlZV9jc3NfaWRfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBjc3NfaWQgKmlkOworCisJaWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGNzc19pZCwgcmN1X2hlYWQpOworCWtmcmVlKGlkKTsKK30KKwordm9pZCBmcmVlX2Nzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCit7CisJc3RydWN0IGNzc19pZCAqaWQgPSBjc3MtPmlkOworCS8qIFdoZW4gdGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNzc19pZCBpbml0aWFsaXphdGlvbiwgaWQgY2FuIGJlIE5VTEwgKi8KKwlpZiAoIWlkKQorCQlyZXR1cm47CisKKwlCVUdfT04oIXNzLT51c2VfaWQpOworCisJcmN1X2Fzc2lnbl9wb2ludGVyKGlkLT5jc3MsIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihjc3MtPmlkLCBOVUxMKTsKKwlzcGluX2xvY2soJnNzLT5pZF9sb2NrKTsKKwlpZHJfcmVtb3ZlKCZzcy0+aWRyLCBpZC0+aWQpOworCXNwaW5fdW5sb2NrKCZzcy0+aWRfbG9jayk7CisJY2FsbF9yY3UoJmlkLT5yY3VfaGVhZCwgX19mcmVlX2Nzc19pZF9jYik7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSBpbml0IG9yIGNyZWF0ZSgpLiBUaGVuLCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFyZQorICogYWx3YXlzIHNlcmlhbGl6ZWQgKEJ5IGNncm91cF9tdXRleCgpIGF0IGNyZWF0ZSgpKS4KKyAqLworCitzdGF0aWMgc3RydWN0IGNzc19pZCAqZ2V0X25ld19jc3NpZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIGludCBkZXB0aCkKK3sKKwlzdHJ1Y3QgY3NzX2lkICpuZXdpZDsKKwlpbnQgbXlpZCwgZXJyb3IsIHNpemU7CisKKwlCVUdfT04oIXNzLT51c2VfaWQpOworCisJc2l6ZSA9IHNpemVvZigqbmV3aWQpICsgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIChkZXB0aCArIDEpOworCW5ld2lkID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld2lkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkvKiBnZXQgaWQgKi8KKwlpZiAodW5saWtlbHkoIWlkcl9wcmVfZ2V0KCZzcy0+aWRyLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXNwaW5fbG9jaygmc3MtPmlkX2xvY2spOworCS8qIERvbid0IHVzZSAwLiBhbGxvY2F0ZXMgYW4gSUQgb2YgMS02NTUzNSAqLworCWVycm9yID0gaWRyX2dldF9uZXdfYWJvdmUoJnNzLT5pZHIsIG5ld2lkLCAxLCAmbXlpZCk7CisJc3Bpbl91bmxvY2soJnNzLT5pZF9sb2NrKTsKKworCS8qIFJldHVybnMgZXJyb3Igd2hlbiB0aGVyZSBhcmUgbm8gZnJlZSBzcGFjZXMgZm9yIG5ldyBJRC4qLworCWlmIChlcnJvcikgeworCQllcnJvciA9IC1FTk9TUEM7CisJCWdvdG8gZXJyX291dDsKKwl9CisJaWYgKG15aWQgPiBDU1NfSURfTUFYKQorCQlnb3RvIHJlbW92ZV9pZHI7CisKKwluZXdpZC0+aWQgPSBteWlkOworCW5ld2lkLT5kZXB0aCA9IGRlcHRoOworCXJldHVybiBuZXdpZDsKK3JlbW92ZV9pZHI6CisJZXJyb3IgPSAtRU5PU1BDOworCXNwaW5fbG9jaygmc3MtPmlkX2xvY2spOworCWlkcl9yZW1vdmUoJnNzLT5pZHIsIG15aWQpOworCXNwaW5fdW5sb2NrKCZzcy0+aWRfbG9jayk7CitlcnJfb3V0OgorCWtmcmVlKG5ld2lkKTsKKwlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisKK30KKworc3RhdGljIGludCBfX2luaXQgY2dyb3VwX3N1YnN5c19pbml0X2lkcihzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpCit7CisJc3RydWN0IGNzc19pZCAqbmV3aWQ7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3Rjc3M7CisKKwlzcGluX2xvY2tfaW5pdCgmc3MtPmlkX2xvY2spOworCWlkcl9pbml0KCZzcy0+aWRyKTsKKworCXJvb3Rjc3MgPSBpbml0X2Nzc19zZXQuc3Vic3lzW3NzLT5zdWJzeXNfaWRdOworCW5ld2lkID0gZ2V0X25ld19jc3NpZChzcywgMCk7CisJaWYgKElTX0VSUihuZXdpZCkpCisJCXJldHVybiBQVFJfRVJSKG5ld2lkKTsKKworCW5ld2lkLT5zdGFja1swXSA9IG5ld2lkLT5pZDsKKwluZXdpZC0+Y3NzID0gcm9vdGNzczsKKwlyb290Y3NzLT5pZCA9IG5ld2lkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2Nzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKnBhcmVudCwKKwkJCXN0cnVjdCBjZ3JvdXAgKmNoaWxkKQoreworCWludCBzdWJzeXNfaWQsIGksIGRlcHRoID0gMDsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcywgKmNoaWxkX2NzczsKKwlzdHJ1Y3QgY3NzX2lkICpjaGlsZF9pZCwgKnBhcmVudF9pZCA9IE5VTEw7CisKKwlzdWJzeXNfaWQgPSBzcy0+c3Vic3lzX2lkOworCXBhcmVudF9jc3MgPSBwYXJlbnQtPnN1YnN5c1tzdWJzeXNfaWRdOworCWNoaWxkX2NzcyA9IGNoaWxkLT5zdWJzeXNbc3Vic3lzX2lkXTsKKwlkZXB0aCA9IGNzc19kZXB0aChwYXJlbnRfY3NzKSArIDE7CisJcGFyZW50X2lkID0gcGFyZW50X2Nzcy0+aWQ7CisKKwljaGlsZF9pZCA9IGdldF9uZXdfY3NzaWQoc3MsIGRlcHRoKTsKKwlpZiAoSVNfRVJSKGNoaWxkX2lkKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2hpbGRfaWQpOworCisJZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspCisJCWNoaWxkX2lkLT5zdGFja1tpXSA9IHBhcmVudF9pZC0+c3RhY2tbaV07CisJY2hpbGRfaWQtPnN0YWNrW2RlcHRoXSA9IGNoaWxkX2lkLT5pZDsKKwkvKgorCSAqIGNoaWxkX2lkLT5jc3MgcG9pbnRlciB3aWxsIGJlIHNldCBhZnRlciB0aGlzIGNncm91cCBpcyBhdmFpbGFibGUKKwkgKiBzZWUgY2dyb3VwX3BvcHVsYXRlX2RpcigpCisJICovCisJcmN1X2Fzc2lnbl9wb2ludGVyKGNoaWxkX2Nzcy0+aWQsIGNoaWxkX2lkKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNzc19sb29rdXAgLSBsb29rdXAgY3NzIGJ5IGlkCisgKiBAc3M6IGNncm91cCBzdWJzeXMgdG8gYmUgbG9va2VkIGludG8uCisgKiBAaWQ6IHRoZSBpZAorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBjZ3JvdXBfc3Vic3lzX3N0YXRlIGlmIHRoZXJlIGlzIHZhbGlkIG9uZSB3aXRoIGlkLgorICogTlVMTCBpZiBub3QuIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpCisgKi8KK3N0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3NfbG9va3VwKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgaW50IGlkKQoreworCXN0cnVjdCBjc3NfaWQgKmNzc2lkID0gTlVMTDsKKworCUJVR19PTighc3MtPnVzZV9pZCk7CisJY3NzaWQgPSBpZHJfZmluZCgmc3MtPmlkciwgaWQpOworCisJaWYgKHVubGlrZWx5KCFjc3NpZCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShjc3NpZC0+Y3NzKTsKK30KKworLyoqCisgKiBjc3NfZ2V0X25leHQgLSBsb29rdXAgbmV4dCBjZ3JvdXAgdW5kZXIgc3BlY2lmaWVkIGhpZXJhcmNoeS4KKyAqIEBzczogcG9pbnRlciB0byBzdWJzeXN0ZW0KKyAqIEBpZDogY3VycmVudCBwb3NpdGlvbiBvZiBpdGVyYXRpb24uCisgKiBAcm9vdDogcG9pbnRlciB0byBjc3MuIHNlYXJjaCB0cmVlIHVuZGVyIHRoaXMuCisgKiBAZm91bmRpZDogcG9zaXRpb24gb2YgZm91bmQgb2JqZWN0LgorICoKKyAqIFNlYXJjaCBuZXh0IGNzcyB1bmRlciB0aGUgc3BlY2lmaWVkIGhpZXJhcmNoeSBvZiByb290aWQuIENhbGxpbmcgdW5kZXIKKyAqIHJjdV9yZWFkX2xvY2soKSBpcyBuZWNlc3NhcnkuIFJldHVybnMgTlVMTCBpZiBpdCByZWFjaGVzIHRoZSBlbmQuCisgKi8KK3N0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICoKK2Nzc19nZXRfbmV4dChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIGludCBpZCwKKwkgICAgIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290LCBpbnQgKmZvdW5kaWQpCit7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJldCA9IE5VTEw7CisJc3RydWN0IGNzc19pZCAqdG1wOworCWludCB0bXBpZDsKKwlpbnQgcm9vdGlkID0gY3NzX2lkKHJvb3QpOworCWludCBkZXB0aCA9IGNzc19kZXB0aChyb290KTsKKworCWlmICghcm9vdGlkKQorCQlyZXR1cm4gTlVMTDsKKworCUJVR19PTighc3MtPnVzZV9pZCk7CisJLyogZmlsbCBzdGFydCBwb2ludCBmb3Igc2NhbiAqLworCXRtcGlkID0gaWQ7CisJd2hpbGUgKDEpIHsKKwkJLyoKKwkJICogc2NhbiBuZXh0IGVudHJ5IGZyb20gYml0bWFwKHRyZWUpLCB0bXBpZCBpcyB1cGRhdGVkIGFmdGVyCisJCSAqIGlkcl9nZXRfbmV4dCgpLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZzcy0+aWRfbG9jayk7CisJCXRtcCA9IGlkcl9nZXRfbmV4dCgmc3MtPmlkciwgJnRtcGlkKTsKKwkJc3Bpbl91bmxvY2soJnNzLT5pZF9sb2NrKTsKKworCQlpZiAoIXRtcCkKKwkJCWJyZWFrOworCQlpZiAodG1wLT5kZXB0aCA+PSBkZXB0aCAmJiB0bXAtPnN0YWNrW2RlcHRoXSA9PSByb290aWQpIHsKKwkJCXJldCA9IHJjdV9kZXJlZmVyZW5jZSh0bXAtPmNzcyk7CisJCQlpZiAocmV0KSB7CisJCQkJKmZvdW5kaWQgPSB0bXBpZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBjb250aW51ZSB0byBzY2FuIGZyb20gbmV4dCBpZCAqLworCQl0bXBpZCA9IHRtcGlkICsgMTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cF9kZWJ1Zy5jIGIva2VybmVsL2Nncm91cF9kZWJ1Zy5jCmluZGV4IGRhY2E2MjAuLjBjOTJkNzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXBfZGVidWcuYworKysgYi9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKQEAgLTQwLDkgKzQwLDcgQEAKIHsKIAl1NjQgY291bnQ7CiAKLQljZ3JvdXBfbG9jaygpOwogCWNvdW50ID0gY2dyb3VwX3Rhc2tfY291bnQoY29udCk7Ci0JY2dyb3VwX3VubG9jaygpOwogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdXNldC5jIGIva2VybmVsL2NwdXNldC5jCmluZGV4IGY3NmRiOWQuLjAyNmZhY2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTEyOCwxMCArMTI4LDYgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKHRhc2tfc3Vic3lzX3N0YXRlKHRhc2ssIGNwdXNldF9zdWJzeXNfaWQpLAogCQkJICAgIHN0cnVjdCBjcHVzZXQsIGNzcyk7CiB9Ci1zdHJ1Y3QgY3B1c2V0X2hvdHBsdWdfc2Nhbm5lciB7Ci0Jc3RydWN0IGNncm91cF9zY2FubmVyIHNjYW47Ci0Jc3RydWN0IGNncm91cCAqdG87Ci19OwogCiAvKiBiaXRzIGluIHN0cnVjdCBjcHVzZXQgZmxhZ3MgZmllbGQgKi8KIHR5cGVkZWYgZW51bSB7CkBAIC01MjEsNiArNTE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19TTVAKIC8qCiAgKiBIZWxwZXIgcm91dGluZSBmb3IgZ2VuZXJhdGVfc2NoZWRfZG9tYWlucygpLgogICogRG8gY3B1c2V0cyBhLCBiIGhhdmUgb3ZlcmxhcHBpbmcgY3B1c19hbGxvd2VkIG1hc2tzPwpAQCAtODE1LDYgKzgxMiwxOCBAQAogCiAJcHV0X29ubGluZV9jcHVzKCk7CiB9CisjZWxzZSAvKiAhQ09ORklHX1NNUCAqLworc3RhdGljIHZvaWQgZG9fcmVidWlsZF9zY2hlZF9kb21haW5zKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQoreworfQorCitzdGF0aWMgaW50IGdlbmVyYXRlX3NjaGVkX2RvbWFpbnMoc3RydWN0IGNwdW1hc2sgKipkb21haW5zLAorCQkJc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICoqYXR0cmlidXRlcykKK3sKKwkqZG9tYWlucyA9IE5VTEw7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiBzdGF0aWMgREVDTEFSRV9XT1JLKHJlYnVpbGRfc2NoZWRfZG9tYWluc193b3JrLCBkb19yZWJ1aWxkX3NjaGVkX2RvbWFpbnMpOwogCkBAIC0xMDI2LDEwMSArMTAzNSw3MCBAQAogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogfQogCisvKgorICogUmViaW5kIHRhc2sncyB2bWFzIHRvIGNwdXNldCdzIG5ldyBtZW1zX2FsbG93ZWQsIGFuZCBtaWdyYXRlIHBhZ2VzIHRvIG5ldworICogbm9kZXMgaWYgbWVtb3J5X21pZ3JhdGUgZmxhZyBpcyBzZXQuIENhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLgorICovCitzdGF0aWMgdm9pZCBjcHVzZXRfY2hhbmdlX25vZGVtYXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQkgICBzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgKnNjYW4pCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IGNwdXNldCAqY3M7CisJaW50IG1pZ3JhdGU7CisJY29uc3Qgbm9kZW1hc2tfdCAqb2xkbWVtID0gc2Nhbi0+ZGF0YTsKKworCW1tID0gZ2V0X3Rhc2tfbW0ocCk7CisJaWYgKCFtbSkKKwkJcmV0dXJuOworCisJY3MgPSBjZ3JvdXBfY3Moc2Nhbi0+Y2cpOworCW1pZ3JhdGUgPSBpc19tZW1vcnlfbWlncmF0ZShjcyk7CisKKwltcG9sX3JlYmluZF9tbShtbSwgJmNzLT5tZW1zX2FsbG93ZWQpOworCWlmIChtaWdyYXRlKQorCQljcHVzZXRfbWlncmF0ZV9tbShtbSwgb2xkbWVtLCAmY3MtPm1lbXNfYWxsb3dlZCk7CisJbW1wdXQobW0pOworfQorCiBzdGF0aWMgdm9pZCAqY3B1c2V0X2JlaW5nX3JlYm91bmQ7CiAKIC8qKgogICogdXBkYXRlX3Rhc2tzX25vZGVtYXNrIC0gVXBkYXRlIHRoZSBub2RlbWFza3Mgb2YgdGFza3MgaW4gdGhlIGNwdXNldC4KICAqIEBjczogdGhlIGNwdXNldCBpbiB3aGljaCBlYWNoIHRhc2sncyBtZW1zX2FsbG93ZWQgbWFzayBuZWVkcyB0byBiZSBjaGFuZ2VkCiAgKiBAb2xkbWVtOiBvbGQgbWVtc19hbGxvd2VkIG9mIGNwdXNldCBjcworICogQGhlYXA6IGlmIE5VTEwsIGRlZmVyIGFsbG9jYXRpbmcgaGVhcCBtZW1vcnkgdG8gY2dyb3VwX3NjYW5fdGFza3MoKQogICoKICAqIENhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkCi0gKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtZXJybm8gaWYgbm90LgorICogTm8gcmV0dXJuIHZhbHVlLiBJdCdzIGd1YXJhbnRlZWQgdGhhdCBjZ3JvdXBfc2Nhbl90YXNrcygpIGFsd2F5cyByZXR1cm5zIDAKKyAqIGlmIEBoZWFwICE9IE5VTEwuCiAgKi8KLXN0YXRpYyBpbnQgdXBkYXRlX3Rhc2tzX25vZGVtYXNrKHN0cnVjdCBjcHVzZXQgKmNzLCBjb25zdCBub2RlbWFza190ICpvbGRtZW0pCitzdGF0aWMgdm9pZCB1cGRhdGVfdGFza3Nfbm9kZW1hc2soc3RydWN0IGNwdXNldCAqY3MsIGNvbnN0IG5vZGVtYXNrX3QgKm9sZG1lbSwKKwkJCQkgc3RydWN0IHB0cl9oZWFwICpoZWFwKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlzdHJ1Y3QgbW1fc3RydWN0ICoqbW1hcnJheTsKLQlpbnQgaSwgbiwgbnRhc2tzOwotCWludCBtaWdyYXRlOwotCWludCBmdWRnZTsKLQlzdHJ1Y3QgY2dyb3VwX2l0ZXIgaXQ7Ci0JaW50IHJldHZhbDsKKwlzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgc2NhbjsKIAogCWNwdXNldF9iZWluZ19yZWJvdW5kID0gY3M7CQkvKiBjYXVzZXMgbXBvbF9kdXAoKSByZWJpbmQgKi8KIAotCWZ1ZGdlID0gMTA7CQkJCS8qIHNwYXJlIG1tYXJyYXlbXSBzbG90cyAqLwotCWZ1ZGdlICs9IGNwdW1hc2tfd2VpZ2h0KGNzLT5jcHVzX2FsbG93ZWQpOy8qIGltYWdpbmUgMSBmb3JrLWJvbWIvY3B1ICovCi0JcmV0dmFsID0gLUVOT01FTTsKKwlzY2FuLmNnID0gY3MtPmNzcy5jZ3JvdXA7CisJc2Nhbi50ZXN0X3Rhc2sgPSBOVUxMOworCXNjYW4ucHJvY2Vzc190YXNrID0gY3B1c2V0X2NoYW5nZV9ub2RlbWFzazsKKwlzY2FuLmhlYXAgPSBoZWFwOworCXNjYW4uZGF0YSA9IChub2RlbWFza190ICopb2xkbWVtOwogCiAJLyoKLQkgKiBBbGxvY2F0ZSBtbWFycmF5W10gdG8gaG9sZCBtbSByZWZlcmVuY2UgZm9yIGVhY2ggdGFzawotCSAqIGluIGNwdXNldCBjcy4gIENhbid0IGttYWxsb2MgR0ZQX0tFUk5FTCB3aGlsZSBob2xkaW5nCi0JICogdGFza2xpc3RfbG9jay4gIFdlIGNvdWxkIHVzZSBHRlBfQVRPTUlDLCBidXQgd2l0aCBhCi0JICogZmV3IG1vcmUgbGluZXMgb2YgY29kZSwgd2UgY2FuIHJldHJ5IHVudGlsIHdlIGdldCBhIGJpZwotCSAqIGVub3VnaCBtbWFycmF5W10gdy9vIHVzaW5nIEdGUF9BVE9NSUMuCi0JICovCi0Jd2hpbGUgKDEpIHsKLQkJbnRhc2tzID0gY2dyb3VwX3Rhc2tfY291bnQoY3MtPmNzcy5jZ3JvdXApOyAgLyogZ3Vlc3MgKi8KLQkJbnRhc2tzICs9IGZ1ZGdlOwotCQltbWFycmF5ID0ga21hbGxvYyhudGFza3MgKiBzaXplb2YoKm1tYXJyYXkpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFtbWFycmF5KQotCQkJZ290byBkb25lOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwkJLyogYmxvY2sgZm9yayAqLwotCQlpZiAoY2dyb3VwX3Rhc2tfY291bnQoY3MtPmNzcy5jZ3JvdXApIDw9IG50YXNrcykKLQkJCWJyZWFrOwkJCQkvKiBnb3QgZW5vdWdoICovCi0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsJCS8qIHRyeSBhZ2FpbiAqLwotCQlrZnJlZShtbWFycmF5KTsKLQl9Ci0KLQluID0gMDsKLQotCS8qIExvYWQgdXAgbW1hcnJheVtdIHdpdGggbW0gcmVmZXJlbmNlIGZvciBlYWNoIHRhc2sgaW4gY3B1c2V0LiAqLwotCWNncm91cF9pdGVyX3N0YXJ0KGNzLT5jc3MuY2dyb3VwLCAmaXQpOwotCXdoaWxlICgocCA9IGNncm91cF9pdGVyX25leHQoY3MtPmNzcy5jZ3JvdXAsICZpdCkpKSB7Ci0JCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCi0JCWlmIChuID49IG50YXNrcykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJDcHVzZXQgbWVtcG9saWN5IHJlYmluZCBpbmNvbXBsZXRlLlxuIik7Ci0JCQlicmVhazsKLQkJfQotCQltbSA9IGdldF90YXNrX21tKHApOwotCQlpZiAoIW1tKQotCQkJY29udGludWU7Ci0JCW1tYXJyYXlbbisrXSA9IG1tOwotCX0KLQljZ3JvdXBfaXRlcl9lbmQoY3MtPmNzcy5jZ3JvdXAsICZpdCk7Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSd2ZSBkcm9wcGVkIHRoZSB0YXNrbGlzdCBzcGlubG9jaywgd2UgY2FuCi0JICogcmViaW5kIHRoZSB2bWEgbWVtcG9saWNpZXMgb2YgZWFjaCBtbSBpbiBtbWFycmF5W10gdG8gdGhlaXIKLQkgKiBuZXcgY3B1c2V0LCBhbmQgcmVsZWFzZSB0aGF0IG1tLiAgVGhlIG1wb2xfcmViaW5kX21tKCkKLQkgKiBjYWxsIHRha2VzIG1tYXBfc2VtLCB3aGljaCB3ZSBjb3VsZG4ndCB0YWtlIHdoaWxlIGhvbGRpbmcKLQkgKiB0YXNrbGlzdF9sb2NrLiAgRm9ya3MgY2FuIGhhcHBlbiBhZ2FpbiBub3cgLSB0aGUgbXBvbF9kdXAoKQotCSAqIGNwdXNldF9iZWluZ19yZWJvdW5kIGNoZWNrIHdpbGwgY2F0Y2ggc3VjaCBmb3JrcywgYW5kIHJlYmluZAotCSAqIHRoZWlyIHZtYSBtZW1wb2xpY2llcyB0b28uICBCZWNhdXNlIHdlIHN0aWxsIGhvbGQgdGhlIGdsb2JhbAotCSAqIGNncm91cF9tdXRleCwgd2Uga25vdyB0aGF0IG5vIG90aGVyIHJlYmluZCBlZmZvcnQgd2lsbAotCSAqIGJlIGNvbnRlbmRpbmcgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUgY3B1c2V0X2JlaW5nX3JlYm91bmQuCisJICogVGhlIG1wb2xfcmViaW5kX21tKCkgY2FsbCB0YWtlcyBtbWFwX3NlbSwgd2hpY2ggd2UgY291bGRuJ3QKKwkgKiB0YWtlIHdoaWxlIGhvbGRpbmcgdGFza2xpc3RfbG9jay4gIEZvcmtzIGNhbiBoYXBwZW4gLSB0aGUKKwkgKiBtcG9sX2R1cCgpIGNwdXNldF9iZWluZ19yZWJvdW5kIGNoZWNrIHdpbGwgY2F0Y2ggc3VjaCBmb3JrcywKKwkgKiBhbmQgcmViaW5kIHRoZWlyIHZtYSBtZW1wb2xpY2llcyB0b28uICBCZWNhdXNlIHdlIHN0aWxsIGhvbGQKKwkgKiB0aGUgZ2xvYmFsIGNncm91cF9tdXRleCwgd2Uga25vdyB0aGF0IG5vIG90aGVyIHJlYmluZCBlZmZvcnQKKwkgKiB3aWxsIGJlIGNvbnRlbmRpbmcgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUgY3B1c2V0X2JlaW5nX3JlYm91bmQuCiAJICogSXQncyBvayBpZiB3ZSByZWJpbmQgdGhlIHNhbWUgbW0gdHdpY2U7IG1wb2xfcmViaW5kX21tKCkKIAkgKiBpcyBpZGVtcG90ZW50LiAgQWxzbyBtaWdyYXRlIHBhZ2VzIGluIGVhY2ggbW0gdG8gbmV3IG5vZGVzLgogCSAqLwotCW1pZ3JhdGUgPSBpc19tZW1vcnlfbWlncmF0ZShjcyk7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IG1tYXJyYXlbaV07Ci0KLQkJbXBvbF9yZWJpbmRfbW0obW0sICZjcy0+bWVtc19hbGxvd2VkKTsKLQkJaWYgKG1pZ3JhdGUpCi0JCQljcHVzZXRfbWlncmF0ZV9tbShtbSwgb2xkbWVtLCAmY3MtPm1lbXNfYWxsb3dlZCk7Ci0JCW1tcHV0KG1tKTsKLQl9CisJY2dyb3VwX3NjYW5fdGFza3MoJnNjYW4pOwogCiAJLyogV2UncmUgZG9uZSByZWJpbmRpbmcgdm1hcyB0byB0aGlzIGNwdXNldCdzIG5ldyBtZW1zX2FsbG93ZWQuICovCi0Ja2ZyZWUobW1hcnJheSk7CiAJY3B1c2V0X2JlaW5nX3JlYm91bmQgPSBOVUxMOwotCXJldHZhbCA9IDA7Ci1kb25lOgotCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCkBAIC0xMTQxLDYgKzExMTksNyBAQAogewogCW5vZGVtYXNrX3Qgb2xkbWVtOwogCWludCByZXR2YWw7CisJc3RydWN0IHB0cl9oZWFwIGhlYXA7CiAKIAkvKgogCSAqIHRvcF9jcHVzZXQubWVtc19hbGxvd2VkIHRyYWNrcyBub2RlX3N0YXRzW05fSElHSF9NRU1PUlldOwpAQCAtMTE3NSwxMiArMTE1NCwxOCBAQAogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGRvbmU7CiAKKwlyZXR2YWwgPSBoZWFwX2luaXQoJmhlYXAsIFBBR0VfU0laRSwgR0ZQX0tFUk5FTCwgTlVMTCk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZG9uZTsKKwogCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAljcy0+bWVtc19hbGxvd2VkID0gdHJpYWxjcy0+bWVtc19hbGxvd2VkOwogCWNzLT5tZW1zX2dlbmVyYXRpb24gPSBjcHVzZXRfbWVtc19nZW5lcmF0aW9uKys7CiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKLQlyZXR2YWwgPSB1cGRhdGVfdGFza3Nfbm9kZW1hc2soY3MsICZvbGRtZW0pOworCXVwZGF0ZV90YXNrc19ub2RlbWFzayhjcywgJm9sZG1lbSwgJmhlYXApOworCisJaGVhcF9mcmVlKCZoZWFwKTsKIGRvbmU6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTExOTIsOCArMTE3NywxMCBAQAogCiBzdGF0aWMgaW50IHVwZGF0ZV9yZWxheF9kb21haW5fbGV2ZWwoc3RydWN0IGNwdXNldCAqY3MsIHM2NCB2YWwpCiB7CisjaWZkZWYgQ09ORklHX1NNUAogCWlmICh2YWwgPCAtMSB8fCB2YWwgPj0gU0RfTFZfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgogCiAJaWYgKHZhbCAhPSBjcy0+cmVsYXhfZG9tYWluX2xldmVsKSB7CiAJCWNzLT5yZWxheF9kb21haW5fbGV2ZWwgPSB2YWw7CkBAIC0xMzU1LDE5ICsxMzQyLDIyIEBACiAJCQkgICAgIHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCBjcHVzZXQgKmNzID0gY2dyb3VwX2NzKGNvbnQpOwotCWludCByZXQgPSAwOwogCiAJaWYgKGNwdW1hc2tfZW1wdHkoY3MtPmNwdXNfYWxsb3dlZCkgfHwgbm9kZXNfZW1wdHkoY3MtPm1lbXNfYWxsb3dlZCkpCiAJCXJldHVybiAtRU5PU1BDOwogCi0JaWYgKHRzay0+ZmxhZ3MgJiBQRl9USFJFQURfQk9VTkQpIHsKLQkJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCQlpZiAoIWNwdW1hc2tfZXF1YWwoJnRzay0+Y3B1c19hbGxvd2VkLCBjcy0+Y3B1c19hbGxvd2VkKSkKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCX0KKwkvKgorCSAqIEt0aHJlYWRzIGJvdW5kIHRvIHNwZWNpZmljIGNwdXMgY2Fubm90IGJlIG1vdmVkIHRvIGEgbmV3IGNwdXNldDsgd2UKKwkgKiBjYW5ub3QgY2hhbmdlIHRoZWlyIGNwdSBhZmZpbml0eSBhbmQgaXNvbGF0aW5nIHN1Y2ggdGhyZWFkcyBieSB0aGVpcgorCSAqIHNldCBvZiBhbGxvd2VkIG5vZGVzIGlzIHVubmVjZXNzYXJ5LiAgVGh1cywgY3B1c2V0cyBhcmUgbm90CisJICogYXBwbGljYWJsZSBmb3Igc3VjaCB0aHJlYWRzLiAgVGhpcyBwcmV2ZW50cyBjaGVja2luZyBmb3Igc3VjY2VzcyBvZgorCSAqIHNldF9jcHVzX2FsbG93ZWRfcHRyKCkgb24gYWxsIGF0dGFjaGVkIHRhc2tzIGJlZm9yZSBjcHVzX2FsbG93ZWQgbWF5CisJICogYmUgY2hhbmdlZC4KKwkgKi8KKwlpZiAodHNrLT5mbGFncyAmIFBGX1RIUkVBRF9CT1VORCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IHNlY3VyaXR5X3Rhc2tfc2V0c2NoZWR1bGVyKHRzaywgMCwgTlVMTCk7CisJcmV0dXJuIHNlY3VyaXR5X3Rhc2tfc2V0c2NoZWR1bGVyKHRzaywgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNwdXNldF9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLApAQCAtMTcwNiw2ICsxNjk2LDcgQEAKIAkJLnJlYWRfdTY0ID0gY3B1c2V0X3JlYWRfdTY0LAogCQkud3JpdGVfdTY0ID0gY3B1c2V0X3dyaXRlX3U2NCwKIAkJLnByaXZhdGUgPSBGSUxFX01FTU9SWV9QUkVTU1VSRSwKKwkJLm1vZGUgPSBTX0lSVUdPLAogCX0sCiAKIAl7CkBAIC0xOTEzLDEwICsxOTA0LDkgQEAKIHN0YXRpYyB2b2lkIGNwdXNldF9kb19tb3ZlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCQkJc3RydWN0IGNncm91cF9zY2FubmVyICpzY2FuKQogewotCXN0cnVjdCBjcHVzZXRfaG90cGx1Z19zY2FubmVyICpjaHNwOworCXN0cnVjdCBjZ3JvdXAgKm5ld19jZ3JvdXAgPSBzY2FuLT5kYXRhOwogCi0JY2hzcCA9IGNvbnRhaW5lcl9vZihzY2FuLCBzdHJ1Y3QgY3B1c2V0X2hvdHBsdWdfc2Nhbm5lciwgc2Nhbik7Ci0JY2dyb3VwX2F0dGFjaF90YXNrKGNoc3AtPnRvLCB0c2spOworCWNncm91cF9hdHRhY2hfdGFzayhuZXdfY2dyb3VwLCB0c2spOwogfQogCiAvKioKQEAgLTE5MzIsMTUgKzE5MjIsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgbW92ZV9tZW1iZXJfdGFza3NfdG9fY3B1c2V0KHN0cnVjdCBjcHVzZXQgKmZyb20sIHN0cnVjdCBjcHVzZXQgKnRvKQogewotCXN0cnVjdCBjcHVzZXRfaG90cGx1Z19zY2FubmVyIHNjYW47CisJc3RydWN0IGNncm91cF9zY2FubmVyIHNjYW47CiAKLQlzY2FuLnNjYW4uY2cgPSBmcm9tLT5jc3MuY2dyb3VwOwotCXNjYW4uc2Nhbi50ZXN0X3Rhc2sgPSBOVUxMOyAvKiBzZWxlY3QgYWxsIHRhc2tzIGluIGNncm91cCAqLwotCXNjYW4uc2Nhbi5wcm9jZXNzX3Rhc2sgPSBjcHVzZXRfZG9fbW92ZV90YXNrOwotCXNjYW4uc2Nhbi5oZWFwID0gTlVMTDsKLQlzY2FuLnRvID0gdG8tPmNzcy5jZ3JvdXA7CisJc2Nhbi5jZyA9IGZyb20tPmNzcy5jZ3JvdXA7CisJc2Nhbi50ZXN0X3Rhc2sgPSBOVUxMOyAvKiBzZWxlY3QgYWxsIHRhc2tzIGluIGNncm91cCAqLworCXNjYW4ucHJvY2Vzc190YXNrID0gY3B1c2V0X2RvX21vdmVfdGFzazsKKwlzY2FuLmhlYXAgPSBOVUxMOworCXNjYW4uZGF0YSA9IHRvLT5jc3MuY2dyb3VwOwogCi0JaWYgKGNncm91cF9zY2FuX3Rhc2tzKCZzY2FuLnNjYW4pKQorCWlmIChjZ3JvdXBfc2Nhbl90YXNrcygmc2NhbikpCiAJCXByaW50ayhLRVJOX0VSUiAibW92ZV9tZW1iZXJfdGFza3NfdG9fY3B1c2V0OiAiCiAJCQkJImNncm91cF9zY2FuX3Rhc2tzIGZhaWxlZFxuIik7CiB9CkBAIC0yMDMzLDcgKzIwMjMsNyBAQAogCQkJcmVtb3ZlX3Rhc2tzX2luX2VtcHR5X2NwdXNldChjcCk7CiAJCWVsc2UgewogCQkJdXBkYXRlX3Rhc2tzX2NwdW1hc2soY3AsIE5VTEwpOwotCQkJdXBkYXRlX3Rhc2tzX25vZGVtYXNrKGNwLCAmb2xkbWVtcyk7CisJCQl1cGRhdGVfdGFza3Nfbm9kZW1hc2soY3AsICZvbGRtZW1zLCBOVUxMKTsKIAkJfQogCX0KIH0KQEAgLTIwNjksNyArMjA1OSw5IEBACiAJfQogCiAJY2dyb3VwX2xvY2soKTsKKwltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJY3B1bWFza19jb3B5KHRvcF9jcHVzZXQuY3B1c19hbGxvd2VkLCBjcHVfb25saW5lX21hc2spOworCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCXNjYW5fZm9yX2VtcHR5X2NwdXNldHMoJnRvcF9jcHVzZXQpOwogCW5kb21zID0gZ2VuZXJhdGVfc2NoZWRfZG9tYWlucygmZG9tcywgJmF0dHIpOwogCWNncm91cF91bmxvY2soKTsKQEAgLTIwOTIsMTEgKzIwODQsMTIgQEAKIAljZ3JvdXBfbG9jaygpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBNRU1fT05MSU5FOgotCQl0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZCA9IG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldOwotCQlicmVhazsKIAljYXNlIE1FTV9PRkZMSU5FOgorCQltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJCXRvcF9jcHVzZXQubWVtc19hbGxvd2VkID0gbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV07Ci0JCXNjYW5fZm9yX2VtcHR5X2NwdXNldHMoJnRvcF9jcHVzZXQpOworCQltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKKwkJaWYgKGFjdGlvbiA9PSBNRU1fT0ZGTElORSkKKwkJCXNjYW5fZm9yX2VtcHR5X2NwdXNldHMoJnRvcF9jcHVzZXQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTIyMDYsMjYgKzIxOTksMjQgQEAKIH0KIAogLyoqCi0gKiBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsIC0gQ2FuIHdlIGFsbG9jYXRlIG9uIHpvbmUgeidzIG1lbW9yeSBub2RlPwotICogQHo6IGlzIHRoaXMgem9uZSBvbiBhbiBhbGxvd2VkIG5vZGU/CisgKiBjcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsIC0gQ2FuIHdlIGFsbG9jYXRlIG9uIGEgbWVtb3J5IG5vZGU/CisgKiBAbm9kZTogaXMgdGhpcyBhbiBhbGxvd2VkIG5vZGU/CiAgKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKgotICogSWYgd2UncmUgaW4gaW50ZXJydXB0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZgotICogX19HRlBfVEhJU05PREUgaXMgc2V0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZiB6b25lCi0gKiB6J3Mgbm9kZSBpcyBpbiBvdXIgdGFza3MgbWVtc19hbGxvd2VkLCB5ZXMuICBJZiBpdCdzIG5vdCBhCi0gKiBfX0dGUF9IQVJEV0FMTCByZXF1ZXN0IGFuZCB0aGlzIHpvbmUncyBub2RlcyBpcyBpbiB0aGUgbmVhcmVzdAotICogaGFyZHdhbGxlZCBjcHVzZXQgYW5jZXN0b3IgdG8gdGhpcyB0YXNrcyBjcHVzZXQsIHllcy4KLSAqIElmIHRoZSB0YXNrIGhhcyBiZWVuIE9PTSBraWxsZWQgYW5kIGhhcyBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzCi0gKiBhcyBzcGVjaWZpZWQgYnkgdGhlIFRJRl9NRU1ESUUgZmxhZywgeWVzLgorICogSWYgd2UncmUgaW4gaW50ZXJydXB0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZiBfX0dGUF9USElTTk9ERSBpcworICogc2V0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZiBub2RlIGlzIGluIG91ciB0YXNrJ3MgbWVtc19hbGxvd2VkLAorICogeWVzLiAgSWYgaXQncyBub3QgYSBfX0dGUF9IQVJEV0FMTCByZXF1ZXN0IGFuZCB0aGlzIG5vZGUgaXMgaW4gdGhlIG5lYXJlc3QKKyAqIGhhcmR3YWxsZWQgY3B1c2V0IGFuY2VzdG9yIHRvIHRoaXMgdGFzaydzIGNwdXNldCwgeWVzLiAgSWYgdGhlIHRhc2sgaGFzIGJlZW4KKyAqIE9PTSBraWxsZWQgYW5kIGhhcyBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIGFzIHNwZWNpZmllZCBieSB0aGUgVElGX01FTURJRQorICogZmxhZywgeWVzLgogICogT3RoZXJ3aXNlLCBuby4KICAqCi0gKiBJZiBfX0dGUF9IQVJEV0FMTCBpcyBzZXQsIGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoKQotICogcmVkdWNlcyB0byBjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKCkuICBPdGhlcndpc2UsCi0gKiBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKCkgbWlnaHQgc2xlZXAsIGFuZCBtaWdodCBhbGxvdyBhIHpvbmUKLSAqIGZyb20gYW4gZW5jbG9zaW5nIGNwdXNldC4KKyAqIElmIF9fR0ZQX0hBUkRXQUxMIGlzIHNldCwgY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbCgpIHJlZHVjZXMgdG8KKyAqIGNwdXNldF9ub2RlX2FsbG93ZWRfaGFyZHdhbGwoKS4gIE90aGVyd2lzZSwgY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbCgpCisgKiBtaWdodCBzbGVlcCwgYW5kIG1pZ2h0IGFsbG93IGEgbm9kZSBmcm9tIGFuIGVuY2xvc2luZyBjcHVzZXQuCiAgKgotICogY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCgpIG9ubHkgaGFuZGxlcyB0aGUgc2ltcGxlciBjYXNlIG9mCi0gKiBoYXJkd2FsbCBjcHVzZXRzLCBhbmQgbmV2ZXIgc2xlZXBzLgorICogY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbCgpIG9ubHkgaGFuZGxlcyB0aGUgc2ltcGxlciBjYXNlIG9mIGhhcmR3YWxsCisgKiBjcHVzZXRzLCBhbmQgbmV2ZXIgc2xlZXBzLgogICoKICAqIFRoZSBfX0dGUF9USElTTk9ERSBwbGFjZW1lbnQgbG9naWMgaXMgcmVhbGx5IGhhbmRsZWQgZWxzZXdoZXJlLAogICogYnkgZm9yY2libHkgdXNpbmcgYSB6b25lbGlzdCBzdGFydGluZyBhdCBhIHNwZWNpZmllZCBub2RlLCBhbmQgYnkKQEAgLTIyNjQsMjAgKzIyNTUsMTcgQEAKICAqCUdGUF9VU0VSICAgICAtIG9ubHkgbm9kZXMgaW4gY3VycmVudCB0YXNrcyBtZW1zIGFsbG93ZWQgb2suCiAgKgogICogUnVsZToKLSAqICAgIERvbid0IGNhbGwgY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCBpZiB5b3UgY2FuJ3Qgc2xlZXAsIHVubGVzcyB5b3UKKyAqICAgIERvbid0IGNhbGwgY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbCBpZiB5b3UgY2FuJ3Qgc2xlZXAsIHVubGVzcyB5b3UKICAqICAgIHBhc3MgaW4gdGhlIF9fR0ZQX0hBUkRXQUxMIGZsYWcgc2V0IGluIGdmcF9mbGFnLCB3aGljaCBkaXNhYmxlcwogICogICAgdGhlIGNvZGUgdGhhdCBtaWdodCBzY2FuIHVwIGFuY2VzdG9yIGNwdXNldHMgYW5kIHNsZWVwLgogICovCi0KLWludCBfX2NwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQoraW50IF9fY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JaW50IG5vZGU7CQkJLyogbm9kZSB0aGF0IHpvbmUgeiBpcyBvbiAqLwogCWNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzOwkvKiBjdXJyZW50IGNwdXNldCBhbmNlc3RvcnMgKi8KIAlpbnQgYWxsb3dlZDsJCQkvKiBpcyBhbGxvY2F0aW9uIGluIHpvbmUgeiBhbGxvd2VkPyAqLwogCiAJaWYgKGluX2ludGVycnVwdCgpIHx8IChnZnBfbWFzayAmIF9fR0ZQX1RISVNOT0RFKSkKIAkJcmV0dXJuIDE7Ci0Jbm9kZSA9IHpvbmVfdG9fbmlkKHopOwogCW1pZ2h0X3NsZWVwX2lmKCEoZ2ZwX21hc2sgJiBfX0dGUF9IQVJEV0FMTCkpOwogCWlmIChub2RlX2lzc2V0KG5vZGUsIGN1cnJlbnQtPm1lbXNfYWxsb3dlZCkpCiAJCXJldHVybiAxOwpAQCAtMjMwNiwxNSArMjI5NCwxNSBAQAogfQogCiAvKgotICogY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCAtIENhbiB3ZSBhbGxvY2F0ZSBvbiB6b25lIHoncyBtZW1vcnkgbm9kZT8KLSAqIEB6OiBpcyB0aGlzIHpvbmUgb24gYW4gYWxsb3dlZCBub2RlPworICogY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbCAtIENhbiB3ZSBhbGxvY2F0ZSBvbiBhIG1lbW9yeSBub2RlPworICogQG5vZGU6IGlzIHRoaXMgYW4gYWxsb3dlZCBub2RlPwogICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICoKLSAqIElmIHdlJ3JlIGluIGludGVycnVwdCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLgotICogSWYgX19HRlBfVEhJU05PREUgaXMgc2V0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZiB6b25lCi0gKiB6J3Mgbm9kZSBpcyBpbiBvdXIgdGFza3MgbWVtc19hbGxvd2VkLCB5ZXMuICAgSWYgdGhlIHRhc2sgaGFzIGJlZW4KLSAqIE9PTSBraWxsZWQgYW5kIGhhcyBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIGFzIHNwZWNpZmllZCBieSB0aGUKLSAqIFRJRl9NRU1ESUUgZmxhZywgeWVzLiAgT3RoZXJ3aXNlLCBuby4KKyAqIElmIHdlJ3JlIGluIGludGVycnVwdCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLiAgSWYgX19HRlBfVEhJU05PREUgaXMKKyAqIHNldCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLiAgSWYgbm9kZSBpcyBpbiBvdXIgdGFzaydzIG1lbXNfYWxsb3dlZCwKKyAqIHllcy4gIElmIHRoZSB0YXNrIGhhcyBiZWVuIE9PTSBraWxsZWQgYW5kIGhhcyBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIGFzCisgKiBzcGVjaWZpZWQgYnkgdGhlIFRJRl9NRU1ESUUgZmxhZywgeWVzLgorICogT3RoZXJ3aXNlLCBuby4KICAqCiAgKiBUaGUgX19HRlBfVEhJU05PREUgcGxhY2VtZW50IGxvZ2ljIGlzIHJlYWxseSBoYW5kbGVkIGVsc2V3aGVyZSwKICAqIGJ5IGZvcmNpYmx5IHVzaW5nIGEgem9uZWxpc3Qgc3RhcnRpbmcgYXQgYSBzcGVjaWZpZWQgbm9kZSwgYW5kIGJ5CkBAIC0yMzIyLDIwICsyMzEwLDE2IEBACiAgKiBhbnkgbm9kZSBvbiB0aGUgem9uZWxpc3QgZXhjZXB0IHRoZSBmaXJzdC4gIEJ5IHRoZSB0aW1lIGFueSBzdWNoCiAgKiBjYWxscyBnZXQgdG8gdGhpcyByb3V0aW5lLCB3ZSBzaG91bGQganVzdCBzaHV0IHVwIGFuZCBzYXkgJ3llcycuCiAgKgotICogVW5saWtlIHRoZSBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKCkgdmFyaWFudCwgYWJvdmUsCi0gKiB0aGlzIHZhcmlhbnQgcmVxdWlyZXMgdGhhdCB0aGUgem9uZSBiZSBpbiB0aGUgY3VycmVudCB0YXNrcworICogVW5saWtlIHRoZSBjcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKCkgdmFyaWFudCwgYWJvdmUsCisgKiB0aGlzIHZhcmlhbnQgcmVxdWlyZXMgdGhhdCB0aGUgbm9kZSBiZSBpbiB0aGUgY3VycmVudCB0YXNrJ3MKICAqIG1lbXNfYWxsb3dlZCBvciB0aGF0IHdlJ3JlIGluIGludGVycnVwdC4gIEl0IGRvZXMgbm90IHNjYW4gdXAgdGhlCiAgKiBjcHVzZXQgaGllcmFyY2h5IGZvciB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbWVtX2V4Y2x1c2l2ZSBjcHVzZXQuCiAgKiBJdCBuZXZlciBzbGVlcHMuCiAgKi8KLQotaW50IF9fY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCitpbnQgX19jcHVzZXRfbm9kZV9hbGxvd2VkX2hhcmR3YWxsKGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlpbnQgbm9kZTsJCQkvKiBub2RlIHRoYXQgem9uZSB6IGlzIG9uICovCi0KIAlpZiAoaW5faW50ZXJydXB0KCkgfHwgKGdmcF9tYXNrICYgX19HRlBfVEhJU05PREUpKQogCQlyZXR1cm4gMTsKLQlub2RlID0gem9uZV90b19uaWQoeik7CiAJaWYgKG5vZGVfaXNzZXQobm9kZSwgY3VycmVudC0+bWVtc19hbGxvd2VkKSkKIAkJcmV0dXJuIDE7CiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGVjX2RvbWFpbi5jIGIva2VybmVsL2V4ZWNfZG9tYWluLmMKaW5kZXggNjY3Yzg0MS4uYzM1NDUyYyAxMDA2NDQKLS0tIGEva2VybmVsL2V4ZWNfZG9tYWluLmMKKysrIGIva2VybmVsL2V4ZWNfZG9tYWluLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAKIAogc3RhdGljIHZvaWQgZGVmYXVsdF9oYW5kbGVyKGludCwgc3RydWN0IHB0X3JlZ3MgKik7CkBAIC0xNDUsMjggKzE0Niw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmY3VycmVudC0+ZnMtPmNvdW50KSAhPSAxKSB7Ci0JCXN0cnVjdCBmc19zdHJ1Y3QgKmZzcCwgKm9mc3A7Ci0KLQkJZnNwID0gY29weV9mc19zdHJ1Y3QoY3VycmVudC0+ZnMpOwotCQlpZiAoZnNwID09IE5VTEwpIHsKLQkJCW1vZHVsZV9wdXQoZXAtPm1vZHVsZSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCXRhc2tfbG9jayhjdXJyZW50KTsKLQkJb2ZzcCA9IGN1cnJlbnQtPmZzOwotCQljdXJyZW50LT5mcyA9IGZzcDsKLQkJdGFza191bmxvY2soY3VycmVudCk7Ci0KLQkJcHV0X2ZzX3N0cnVjdChvZnNwKTsKLQl9Ci0KLQkvKgotCSAqIEF0IHRoYXQgcG9pbnQgd2UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNvbGUgb3duZXIgb2YKLQkgKiBjdXJyZW50LT5mcy4KLQkgKi8KLQogCWN1cnJlbnQtPnBlcnNvbmFsaXR5ID0gcGVyc29uYWxpdHk7CiAJb2VwID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbjsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluID0gZXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCAxNjdlMWUzLi42Njg2ZWQxIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+CiAjaW5jbHVkZSA8dHJhY2Uvc2NoZWQuaD4KIApAQCAtNjEsMTEgKzYyLDYgQEAKIAogc3RhdGljIHZvaWQgZXhpdF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spOwogCi1zdGF0aWMgaW5saW5lIGludCB0YXNrX2RldGFjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlyZXR1cm4gcC0+ZXhpdF9zaWduYWwgPT0gLTE7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fdW5oYXNoX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCW5yX3RocmVhZHMtLTsKQEAgLTM2MiwxNiArMzU4LDEyIEBACiB2b2lkIF9fc2V0X3NwZWNpYWxfcGlkcyhzdHJ1Y3QgcGlkICpwaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOwotCXBpZF90IG5yID0gcGlkX25yKHBpZCk7CiAKLQlpZiAodGFza19zZXNzaW9uKGN1cnIpICE9IHBpZCkgeworCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKQogCQljaGFuZ2VfcGlkKGN1cnIsIFBJRFRZUEVfU0lELCBwaWQpOwotCQlzZXRfdGFza19zZXNzaW9uKGN1cnIsIG5yKTsKLQl9Ci0JaWYgKHRhc2tfcGdycChjdXJyKSAhPSBwaWQpIHsKKworCWlmICh0YXNrX3BncnAoY3VycikgIT0gcGlkKQogCQljaGFuZ2VfcGlkKGN1cnIsIFBJRFRZUEVfUEdJRCwgcGlkKTsKLQkJc2V0X3Rhc2tfcGdycChjdXJyLCBucik7Ci0JfQogfQogCiBzdGF0aWMgdm9pZCBzZXRfc3BlY2lhbF9waWRzKHN0cnVjdCBwaWQgKnBpZCkKQEAgLTQyOSw3ICs0MjEsNiBAQAogdm9pZCBkYWVtb25pemUoY29uc3QgY2hhciAqbmFtZSwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKLQlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKIAlzaWdzZXRfdCBibG9ja2VkOwogCiAJdmFfc3RhcnQoYXJncywgbmFtZSk7CkBAIC00NjIsMTEgKzQ1Myw3IEBACiAKIAkvKiBCZWNvbWUgYXMgb25lIHdpdGggdGhlIGluaXQgdGFzayAqLwogCi0JZXhpdF9mcyhjdXJyZW50KTsJLyogY3VycmVudC0+ZnMtPmNvdW50LS07ICovCi0JZnMgPSBpbml0X3Rhc2suZnM7Ci0JY3VycmVudC0+ZnMgPSBmczsKLQlhdG9taWNfaW5jKCZmcy0+Y291bnQpOwotCisJZGFlbW9uaXplX2ZzX3N0cnVjdCgpOwogCWV4aXRfZmlsZXMoY3VycmVudCk7CiAJY3VycmVudC0+ZmlsZXMgPSBpbml0X3Rhc2suZmlsZXM7CiAJYXRvbWljX2luYygmY3VycmVudC0+ZmlsZXMtPmNvdW50KTsKQEAgLTU2NSwzMCArNTUyLDYgQEAKIAl9CiB9CiAKLXZvaWQgcHV0X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpmcykKLXsKLQkvKiBObyBuZWVkIHRvIGhvbGQgZnMtPmxvY2sgaWYgd2UgYXJlIGtpbGxpbmcgaXQgKi8KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZnMtPmNvdW50KSkgewotCQlwYXRoX3B1dCgmZnMtPnJvb3QpOwotCQlwYXRoX3B1dCgmZnMtPnB3ZCk7Ci0JCWttZW1fY2FjaGVfZnJlZShmc19jYWNoZXAsIGZzKTsKLQl9Ci19Ci0KLXZvaWQgZXhpdF9mcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlzdHJ1Y3QgZnNfc3RydWN0ICogZnMgPSB0c2stPmZzOwotCi0JaWYgKGZzKSB7Ci0JCXRhc2tfbG9jayh0c2spOwotCQl0c2stPmZzID0gTlVMTDsKLQkJdGFza191bmxvY2sodHNrKTsKLQkJcHV0X2ZzX3N0cnVjdChmcyk7Ci0JfQotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChleGl0X2ZzKTsKLQogI2lmZGVmIENPTkZJR19NTV9PV05FUgogLyoKICAqIFRhc2sgcCBpcyBleGl0aW5nIGFuZCBpdCBvd25lZCBtbSwgbGV0cyBmaW5kIGEgbmV3IG93bmVyIGZvciBpdApAQCAtNzMyLDExOSArNjk1LDYgQEAKIH0KIAogLyoKLSAqIFJldHVybiBub256ZXJvIGlmIEBwYXJlbnQncyBjaGlsZHJlbiBzaG91bGQgcmVhcCB0aGVtc2VsdmVzLgotICoKLSAqIENhbGxlZCB3aXRoIHdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKSBoZWxkLgotICovCi1zdGF0aWMgaW50IGlnbm9yaW5nX2NoaWxkcmVuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQotewotCWludCByZXQ7Ci0Jc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpwc2lnID0gcGFyZW50LT5zaWdoYW5kOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBzaWctPnNpZ2xvY2ssIGZsYWdzKTsKLQlyZXQgPSAocHNpZy0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfaGFuZGxlciA9PSBTSUdfSUdOIHx8Ci0JICAgICAgIChwc2lnLT5hY3Rpb25bU0lHQ0hMRC0xXS5zYS5zYV9mbGFncyAmIFNBX05PQ0xEV0FJVCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzaWctPnNpZ2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogRGV0YWNoIGFsbCB0YXNrcyB3ZSB3ZXJlIHVzaW5nIHB0cmFjZSBvbi4KLSAqIEFueSB0aGF0IG5lZWQgdG8gYmUgcmVsZWFzZV90YXNrJ2QgYXJlIHB1dCBvbiB0aGUgQGRlYWQgbGlzdC4KLSAqCi0gKiBDYWxsZWQgd2l0aCB3cml0ZV9sb2NrKCZ0YXNrbGlzdF9sb2NrKSBoZWxkLgotICovCi1zdGF0aWMgdm9pZCBwdHJhY2VfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IGxpc3RfaGVhZCAqZGVhZCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOwotCWludCBpZ24gPSAtMTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmcGFyZW50LT5wdHJhY2VkLCBwdHJhY2VfZW50cnkpIHsKLQkJX19wdHJhY2VfdW5saW5rKHApOwotCi0JCWlmIChwLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogSWYgaXQncyBhIHpvbWJpZSwgb3VyIGF0dGFjaGVkbmVzcyBwcmV2ZW50ZWQgbm9ybWFsCi0JCSAqIHBhcmVudCBub3RpZmljYXRpb24gb3Igc2VsZi1yZWFwaW5nLiAgRG8gbm90aWZpY2F0aW9uCi0JCSAqIG5vdyBpZiBpdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGVhcmxpZXIuICBJZiBpdCBzaG91bGQKLQkJICogcmVhcCBpdHNlbGYsIGFkZCBpdCB0byB0aGUgQGRlYWQgbGlzdC4gIFdlIGNhbid0IGNhbGwKLQkJICogcmVsZWFzZV90YXNrKCkgaGVyZSBiZWNhdXNlIHdlIGFscmVhZHkgaG9sZCB0YXNrbGlzdF9sb2NrLgotCQkgKgotCQkgKiBJZiBpdCdzIG91ciBvd24gY2hpbGQsIHRoZXJlIGlzIG5vIG5vdGlmaWNhdGlvbiB0byBkby4KLQkJICogQnV0IGlmIG91ciBub3JtYWwgY2hpbGRyZW4gc2VsZi1yZWFwLCB0aGVuIHRoaXMgY2hpbGQKLQkJICogd2FzIHByZXZlbnRlZCBieSBwdHJhY2UgYW5kIHdlIG11c3QgcmVhcCBpdCBub3cuCi0JCSAqLwotCQlpZiAoIXRhc2tfZGV0YWNoZWQocCkgJiYgdGhyZWFkX2dyb3VwX2VtcHR5KHApKSB7Ci0JCQlpZiAoIXNhbWVfdGhyZWFkX2dyb3VwKHAtPnJlYWxfcGFyZW50LCBwYXJlbnQpKQotCQkJCWRvX25vdGlmeV9wYXJlbnQocCwgcC0+ZXhpdF9zaWduYWwpOwotCQkJZWxzZSB7Ci0JCQkJaWYgKGlnbiA8IDApCi0JCQkJCWlnbiA9IGlnbm9yaW5nX2NoaWxkcmVuKHBhcmVudCk7Ci0JCQkJaWYgKGlnbikKLQkJCQkJcC0+ZXhpdF9zaWduYWwgPSAtMTsKLQkJCX0KLQkJfQotCi0JCWlmICh0YXNrX2RldGFjaGVkKHApKSB7Ci0JCQkvKgotCQkJICogTWFyayBpdCBhcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyByZWFwZWQuCi0JCQkgKi8KLQkJCXAtPmV4aXRfc3RhdGUgPSBFWElUX0RFQUQ7Ci0JCQlsaXN0X2FkZCgmcC0+cHRyYWNlX2VudHJ5LCBkZWFkKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIEZpbmlzaCB1cCBleGl0LXRpbWUgcHRyYWNlIGNsZWFudXAuCi0gKgotICogQ2FsbGVkIHdpdGhvdXQgbG9ja3MuCi0gKi8KLXN0YXRpYyB2b2lkIHB0cmFjZV9leGl0X2ZpbmlzaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwKLQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZWFkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm47Ci0KLQlCVUdfT04oIWxpc3RfZW1wdHkoJnBhcmVudC0+cHRyYWNlZCkpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sIGRlYWQsIHB0cmFjZV9lbnRyeSkgewotCQlsaXN0X2RlbF9pbml0KCZwLT5wdHJhY2VfZW50cnkpOwotCQlyZWxlYXNlX3Rhc2socCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCByZXBhcmVudF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlcikKLXsKLQlpZiAocC0+cGRlYXRoX3NpZ25hbCkKLQkJLyogV2UgYWxyZWFkeSBob2xkIHRoZSB0YXNrbGlzdF9sb2NrIGhlcmUuICAqLwotCQlncm91cF9zZW5kX3NpZ19pbmZvKHAtPnBkZWF0aF9zaWduYWwsIFNFTkRfU0lHX05PSU5GTywgcCk7Ci0KLQlsaXN0X21vdmVfdGFpbCgmcC0+c2libGluZywgJnAtPnJlYWxfcGFyZW50LT5jaGlsZHJlbik7Ci0KLQkvKiBJZiB0aGlzIGlzIGEgdGhyZWFkZWQgcmVwYXJlbnQgdGhlcmUgaXMgbm8gbmVlZCB0bwotCSAqIG5vdGlmeSBhbnlvbmUgYW55dGhpbmcgaGFzIGhhcHBlbmVkLgotCSAqLwotCWlmIChzYW1lX3RocmVhZF9ncm91cChwLT5yZWFsX3BhcmVudCwgZmF0aGVyKSkKLQkJcmV0dXJuOwotCi0JLyogV2UgZG9uJ3Qgd2FudCBwZW9wbGUgc2xheWluZyBpbml0LiAgKi8KLQlpZiAoIXRhc2tfZGV0YWNoZWQocCkpCi0JCXAtPmV4aXRfc2lnbmFsID0gU0lHQ0hMRDsKLQotCS8qIElmIHdlJ2Qgbm90aWZpZWQgdGhlIG9sZCBwYXJlbnQgYWJvdXQgdGhpcyBjaGlsZCdzIGRlYXRoLAotCSAqIGFsc28gbm90aWZ5IHRoZSBuZXcgcGFyZW50LgotCSAqLwotCWlmICghcHRyYWNlX3JlcGFyZW50ZWQocCkgJiYKLQkgICAgcC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSAmJgotCSAgICAhdGFza19kZXRhY2hlZChwKSAmJiB0aHJlYWRfZ3JvdXBfZW1wdHkocCkpCi0JCWRvX25vdGlmeV9wYXJlbnQocCwgcC0+ZXhpdF9zaWduYWwpOwotCi0Ja2lsbF9vcnBoYW5lZF9wZ3JwKHAsIGZhdGhlcik7Ci19Ci0KLS8qCiAgKiBXaGVuIHdlIGRpZSwgd2UgcmUtcGFyZW50IGFsbCBvdXIgY2hpbGRyZW4uCiAgKiBUcnkgdG8gZ2l2ZSB0aGVtIHRvIGFub3RoZXIgdGhyZWFkIGluIG91ciB0aHJlYWQKICAqIGdyb3VwLCBhbmQgaWYgbm8gc3VjaCBtZW1iZXIgZXhpc3RzLCBnaXZlIGl0IHRvCkBAIC04ODMsMTcgKzczMyw1MSBAQAogCXJldHVybiBwaWRfbnMtPmNoaWxkX3JlYXBlcjsKIH0KIAorLyoKKyogQW55IHRoYXQgbmVlZCB0byBiZSByZWxlYXNlX3Rhc2snZCBhcmUgcHV0IG9uIHRoZSBAZGVhZCBsaXN0LgorICovCitzdGF0aWMgdm9pZCByZXBhcmVudF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkZWFkKQoreworCWlmIChwLT5wZGVhdGhfc2lnbmFsKQorCQlncm91cF9zZW5kX3NpZ19pbmZvKHAtPnBkZWF0aF9zaWduYWwsIFNFTkRfU0lHX05PSU5GTywgcCk7CisKKwlsaXN0X21vdmVfdGFpbCgmcC0+c2libGluZywgJnAtPnJlYWxfcGFyZW50LT5jaGlsZHJlbik7CisKKwlpZiAodGFza19kZXRhY2hlZChwKSkKKwkJcmV0dXJuOworCS8qCisJICogSWYgdGhpcyBpcyBhIHRocmVhZGVkIHJlcGFyZW50IHRoZXJlIGlzIG5vIG5lZWQgdG8KKwkgKiBub3RpZnkgYW55b25lIGFueXRoaW5nIGhhcyBoYXBwZW5lZC4KKwkgKi8KKwlpZiAoc2FtZV90aHJlYWRfZ3JvdXAocC0+cmVhbF9wYXJlbnQsIGZhdGhlcikpCisJCXJldHVybjsKKworCS8qIFdlIGRvbid0IHdhbnQgcGVvcGxlIHNsYXlpbmcgaW5pdC4gICovCisJcC0+ZXhpdF9zaWduYWwgPSBTSUdDSExEOworCisJLyogSWYgaXQgaGFzIGV4aXRlZCBub3RpZnkgdGhlIG5ldyBwYXJlbnQgYWJvdXQgdGhpcyBjaGlsZCdzIGRlYXRoLiAqLworCWlmICghcC0+cHRyYWNlICYmCisJICAgIHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUgJiYgdGhyZWFkX2dyb3VwX2VtcHR5KHApKSB7CisJCWRvX25vdGlmeV9wYXJlbnQocCwgcC0+ZXhpdF9zaWduYWwpOworCQlpZiAodGFza19kZXRhY2hlZChwKSkgeworCQkJcC0+ZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDsKKwkJCWxpc3RfbW92ZV90YWlsKCZwLT5zaWJsaW5nLCBkZWFkKTsKKwkJfQorCX0KKworCWtpbGxfb3JwaGFuZWRfcGdycChwLCBmYXRoZXIpOworfQorCiBzdGF0aWMgdm9pZCBmb3JnZXRfb3JpZ2luYWxfcGFyZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm4sICpyZWFwZXI7Ci0JTElTVF9IRUFEKHB0cmFjZV9kZWFkKTsKKwlMSVNUX0hFQUQoZGVhZF9jaGlsZHJlbik7CisKKwlleGl0X3B0cmFjZShmYXRoZXIpOwogCiAJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCXJlYXBlciA9IGZpbmRfbmV3X3JlYXBlcihmYXRoZXIpOwotCS8qCi0JICogRmlyc3QgY2xlYW4gdXAgcHRyYWNlIGlmIHdlIHdlcmUgdXNpbmcgaXQuCi0JICovCi0JcHRyYWNlX2V4aXQoZmF0aGVyLCAmcHRyYWNlX2RlYWQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZmYXRoZXItPmNoaWxkcmVuLCBzaWJsaW5nKSB7CiAJCXAtPnJlYWxfcGFyZW50ID0gcmVhcGVyOwpAQCAtOTAxLDEzICs3ODUsMTYgQEAKIAkJCUJVR19PTihwLT5wdHJhY2UpOwogCQkJcC0+cGFyZW50ID0gcC0+cmVhbF9wYXJlbnQ7CiAJCX0KLQkJcmVwYXJlbnRfdGhyZWFkKHAsIGZhdGhlcik7CisJCXJlcGFyZW50X3RocmVhZChmYXRoZXIsIHAsICZkZWFkX2NoaWxkcmVuKTsKIAl9Ci0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKwogCUJVR19PTighbGlzdF9lbXB0eSgmZmF0aGVyLT5jaGlsZHJlbikpOwogCi0JcHRyYWNlX2V4aXRfZmluaXNoKGZhdGhlciwgJnB0cmFjZV9kZWFkKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmRlYWRfY2hpbGRyZW4sIHNpYmxpbmcpIHsKKwkJbGlzdF9kZWxfaW5pdCgmcC0+c2libGluZyk7CisJCXJlbGVhc2VfdGFzayhwKTsKKwl9CiB9CiAKIC8qCkBAIC0xNDE3LDYgKzEzMDQsMTggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCitzdGF0aWMgaW50ICp0YXNrX3N0b3BwZWRfY29kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgcHRyYWNlKQoreworCWlmIChwdHJhY2UpIHsKKwkJaWYgKHRhc2tfaXNfc3RvcHBlZF9vcl90cmFjZWQocCkpCisJCQlyZXR1cm4gJnAtPmV4aXRfY29kZTsKKwl9IGVsc2UgeworCQlpZiAocC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9TVE9QX1NUT1BQRUQpCisJCQlyZXR1cm4gJnAtPnNpZ25hbC0+Z3JvdXBfZXhpdF9jb2RlOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKICAqIEhhbmRsZSBzeXNfd2FpdDQgd29yayBmb3Igb25lIHRhc2sgaW4gc3RhdGUgVEFTS19TVE9QUEVELiAgV2UgaG9sZAogICogcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKSBvbiBlbnRyeS4gIElmIHdlIHJldHVybiB6ZXJvLCB3ZSBzdGlsbCBob2xkCkBAIC0xNDI3LDcgKzEzMjYsNyBAQAogCQkJICAgICBpbnQgb3B0aW9ucywgc3RydWN0IHNpZ2luZm8gX191c2VyICppbmZvcCwKIAkJCSAgICAgaW50IF9fdXNlciAqc3RhdF9hZGRyLCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqcnUpCiB7Ci0JaW50IHJldHZhbCwgZXhpdF9jb2RlLCB3aHk7CisJaW50IHJldHZhbCwgZXhpdF9jb2RlLCAqcF9jb2RlLCB3aHk7CiAJdWlkX3QgdWlkID0gMDsgLyogdW5uZWVkZWQsIHJlcXVpcmVkIGJ5IGNvbXBpbGVyICovCiAJcGlkX3QgcGlkOwogCkBAIC0xNDM3LDIyICsxMzM2LDE2IEBACiAJZXhpdF9jb2RlID0gMDsKIAlzcGluX2xvY2tfaXJxKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCWlmICh1bmxpa2VseSghdGFza19pc19zdG9wcGVkX29yX3RyYWNlZChwKSkpCisJcF9jb2RlID0gdGFza19zdG9wcGVkX2NvZGUocCwgcHRyYWNlKTsKKwlpZiAodW5saWtlbHkoIXBfY29kZSkpCiAJCWdvdG8gdW5sb2NrX3NpZzsKIAotCWlmICghcHRyYWNlICYmIHAtPnNpZ25hbC0+Z3JvdXBfc3RvcF9jb3VudCA+IDApCi0JCS8qCi0JCSAqIEEgZ3JvdXAgc3RvcCBpcyBpbiBwcm9ncmVzcyBhbmQgdGhpcyBpcyB0aGUgZ3JvdXAgbGVhZGVyLgotCQkgKiBXZSB3b24ndCByZXBvcnQgdW50aWwgYWxsIHRocmVhZHMgaGF2ZSBzdG9wcGVkLgotCQkgKi8KLQkJZ290byB1bmxvY2tfc2lnOwotCi0JZXhpdF9jb2RlID0gcC0+ZXhpdF9jb2RlOworCWV4aXRfY29kZSA9ICpwX2NvZGU7CiAJaWYgKCFleGl0X2NvZGUpCiAJCWdvdG8gdW5sb2NrX3NpZzsKIAogCWlmICghdW5saWtlbHkob3B0aW9ucyAmIFdOT1dBSVQpKQotCQlwLT5leGl0X2NvZGUgPSAwOworCQkqcF9jb2RlID0gMDsKIAogCS8qIGRvbid0IG5lZWQgdGhlIFJDVSByZWFkbG9jayBoZXJlIGFzIHdlJ3JlIGhvbGRpbmcgYSBzcGlubG9jayAqLwogCXVpZCA9IF9fdGFza19jcmVkKHApLT51aWQ7CkBAIC0xNjA4LDcgKzE1MDEsNyBAQAogCSAqLwogCSpub3Rhc2tfZXJyb3IgPSAwOwogCi0JaWYgKHRhc2tfaXNfc3RvcHBlZF9vcl90cmFjZWQocCkpCisJaWYgKHRhc2tfc3RvcHBlZF9jb2RlKHAsIHB0cmFjZSkpCiAJCXJldHVybiB3YWl0X3Rhc2tfc3RvcHBlZChwdHJhY2UsIHAsIG9wdGlvbnMsCiAJCQkJCSBpbmZvcCwgc3RhdF9hZGRyLCBydSk7CiAKQEAgLTE4MTIsNyArMTcwNSw3IEBACiAJCXBpZCA9IGZpbmRfZ2V0X3BpZCgtdXBpZCk7CiAJfSBlbHNlIGlmICh1cGlkID09IDApIHsKIAkJdHlwZSA9IFBJRFRZUEVfUEdJRDsKLQkJcGlkID0gZ2V0X3BpZCh0YXNrX3BncnAoY3VycmVudCkpOworCQlwaWQgPSBnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QR0lEKTsKIAl9IGVsc2UgLyogdXBpZCA+IDAgKi8gewogCQl0eXBlID0gUElEVFlQRV9QSUQ7CiAJCXBpZCA9IGZpbmRfZ2V0X3BpZCh1cGlkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leHRhYmxlLmMgYi9rZXJuZWwvZXh0YWJsZS5jCmluZGV4IGUxMzZlZDguLjdmOGYyNjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leHRhYmxlLmMKKysrIGIva2VybmVsL2V4dGFibGUuYwpAQCAtMTUsMTEgKzE1LDIyIEBACiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyoKKyAqIG11dGV4IHByb3RlY3RpbmcgdGV4dCBzZWN0aW9uIG1vZGlmaWNhdGlvbiAoZHluYW1pYyBjb2RlIHBhdGNoaW5nKS4KKyAqIHNvbWUgdXNlcnMgbmVlZCB0byBzbGVlcCAoYWxsb2NhdGluZyBtZW1vcnkuLi4pIHdoaWxlIHRoZXkgaG9sZCB0aGlzIGxvY2suCisgKgorICogTk9UIGV4cG9ydGVkIHRvIG1vZHVsZXMgLSBwYXRjaGluZyBrZXJuZWwgdGV4dCBpcyBhIHJlYWxseSBkZWxpY2F0ZSBtYXR0ZXIuCisgKi8KK0RFRklORV9NVVRFWCh0ZXh0X211dGV4KTsKIAogZXh0ZXJuIHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgX19zdGFydF9fX2V4X3RhYmxlW107CiBleHRlcm4gc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSBfX3N0b3BfX19leF90YWJsZVtdOwpAQCAtNDEsMzEgKzUyLDUwIEBACiAJcmV0dXJuIGU7CiB9CiAKLV9fbm90cmFjZV9mdW5jZ3JhcGggaW50IGNvcmVfa2VybmVsX3RleHQodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSBpbnQgaW5pdF9rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3Npbml0dGV4dCAmJgorCSAgICBhZGRyIDw9ICh1bnNpZ25lZCBsb25nKV9laW5pdHRleHQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQgY29yZV9rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3N0ZXh0ICYmCiAJICAgIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpX2V0ZXh0KQogCQlyZXR1cm4gMTsKIAogCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcgJiYKLQkgICAgYWRkciA+PSAodW5zaWduZWQgbG9uZylfc2luaXR0ZXh0ICYmCi0JICAgIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpX2Vpbml0dGV4dCkKKwkgICAgaW5pdF9rZXJuZWxfdGV4dChhZGRyKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKLV9fbm90cmFjZV9mdW5jZ3JhcGggaW50IF9fa2VybmVsX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCitpbnQgX19rZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoY29yZV9rZXJuZWxfdGV4dChhZGRyKSkKIAkJcmV0dXJuIDE7Ci0JcmV0dXJuIF9fbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKSAhPSBOVUxMOworCWlmIChpc19tb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIFRoZXJlIG1pZ2h0IGJlIGluaXQgc3ltYm9scyBpbiBzYXZlZCBzdGFja3RyYWNlcy4KKwkgKiBHaXZlIHRob3NlIHN5bWJvbHMgYSBjaGFuY2UgdG8gYmUgcHJpbnRlZCBpbgorCSAqIGJhY2t0cmFjZXMgKHN1Y2ggYXMgbG9ja2RlcCB0cmFjZXMpLgorCSAqCisJICogU2luY2Ugd2UgYXJlIGFmdGVyIHRoZSBtb2R1bGUtc3ltYm9scyBjaGVjaywgdGhlcmUncworCSAqIG5vIGRhbmdlciBvZiBhZGRyZXNzIG92ZXJsYXA6CisJICovCisJaWYgKGluaXRfa2VybmVsX3RleHQoYWRkcikpCisJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBpbnQga2VybmVsX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKGNvcmVfa2VybmVsX3RleHQoYWRkcikpCiAJCXJldHVybiAxOwotCXJldHVybiBtb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpICE9IE5VTEw7CisJcmV0dXJuIGlzX21vZHVsZV90ZXh0X2FkZHJlc3MoYWRkcik7CiB9CiAKIC8qCkBAIC04MSw1ICsxMTEsNSBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcihwdHIpOwogCWlmIChjb3JlX2tlcm5lbF90ZXh0KGFkZHIpKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKSAhPSBOVUxMOworCXJldHVybiBpc19tb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggNDdjMTU4NC4uNjYwYzJiOCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIApAQCAtNjgxLDM4ICs2ODIsMjEgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgc3RydWN0IGZzX3N0cnVjdCAqX19jb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpCi17Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBrbWVtX2NhY2hlX2FsbG9jKGZzX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JLyogV2UgZG9uJ3QgbmVlZCB0byBsb2NrIGZzIC0gdGhpbmsgd2h5IDstKSAqLwotCWlmIChmcykgewotCQlhdG9taWNfc2V0KCZmcy0+Y291bnQsIDEpOwotCQlyd2xvY2tfaW5pdCgmZnMtPmxvY2spOwotCQlmcy0+dW1hc2sgPSBvbGQtPnVtYXNrOwotCQlyZWFkX2xvY2soJm9sZC0+bG9jayk7Ci0JCWZzLT5yb290ID0gb2xkLT5yb290OwotCQlwYXRoX2dldCgmb2xkLT5yb290KTsKLQkJZnMtPnB3ZCA9IG9sZC0+cHdkOwotCQlwYXRoX2dldCgmb2xkLT5wd2QpOwotCQlyZWFkX3VubG9jaygmb2xkLT5sb2NrKTsKLQl9Ci0JcmV0dXJuIGZzOwotfQotCi1zdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpCi17Ci0JcmV0dXJuIF9fY29weV9mc19zdHJ1Y3Qob2xkKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoY29weV9mc19zdHJ1Y3QpOwotCiBzdGF0aWMgaW50IGNvcHlfZnModW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9GUykgewotCQlhdG9taWNfaW5jKCZjdXJyZW50LT5mcy0+Y291bnQpOworCQkvKiB0c2stPmZzIGlzIGFscmVhZHkgd2hhdCB3ZSB3YW50ICovCisJCXdyaXRlX2xvY2soJmZzLT5sb2NrKTsKKwkJaWYgKGZzLT5pbl9leGVjKSB7CisJCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCWZzLT51c2VycysrOworCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQotCXRzay0+ZnMgPSBfX2NvcHlfZnNfc3RydWN0KGN1cnJlbnQtPmZzKTsKKwl0c2stPmZzID0gY29weV9mc19zdHJ1Y3QoZnMpOwogCWlmICghdHNrLT5mcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CkBAIC04NDEsNiArODI1LDggQEAKIAlhdG9taWNfc2V0KCZzaWctPmxpdmUsIDEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNpZy0+d2FpdF9jaGxkZXhpdCk7CiAJc2lnLT5mbGFncyA9IDA7CisJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfTkVXUElEKQorCQlzaWctPmZsYWdzIHw9IFNJR05BTF9VTktJTExBQkxFOwogCXNpZy0+Z3JvdXBfZXhpdF9jb2RlID0gMDsKIAlzaWctPmdyb3VwX2V4aXRfdGFzayA9IE5VTEw7CiAJc2lnLT5ncm91cF9zdG9wX2NvdW50ID0gMDsKQEAgLTExMjUsNyArMTExMSw3IEBACiAJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9tbTsKIAlpZiAoKHJldHZhbCA9IGNvcHlfaW8oY2xvbmVfZmxhZ3MsIHApKSkKIAkJZ290byBiYWRfZm9ya19jbGVhbnVwX25hbWVzcGFjZXM7Ci0JcmV0dmFsID0gY29weV90aHJlYWQoMCwgY2xvbmVfZmxhZ3MsIHN0YWNrX3N0YXJ0LCBzdGFja19zaXplLCBwLCByZWdzKTsKKwlyZXR2YWwgPSBjb3B5X3RocmVhZChjbG9uZV9mbGFncywgc3RhY2tfc3RhcnQsIHN0YWNrX3NpemUsIHAsIHJlZ3MpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9pbzsKIApAQCAtMTI2Myw4ICsxMjQ5LDYgQEAKIAkJCXAtPnNpZ25hbC0+bGVhZGVyX3BpZCA9IHBpZDsKIAkJCXR0eV9rcmVmX3B1dChwLT5zaWduYWwtPnR0eSk7CiAJCQlwLT5zaWduYWwtPnR0eSA9IHR0eV9rcmVmX2dldChjdXJyZW50LT5zaWduYWwtPnR0eSk7Ci0JCQlzZXRfdGFza19wZ3JwKHAsIHRhc2tfcGdycF9ucihjdXJyZW50KSk7Ci0JCQlzZXRfdGFza19zZXNzaW9uKHAsIHRhc2tfc2Vzc2lvbl9ucihjdXJyZW50KSk7CiAJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCwgdGFza19wZ3JwKGN1cnJlbnQpKTsKIAkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9TSUQsIHRhc2tfc2Vzc2lvbihjdXJyZW50KSk7CiAJCQlsaXN0X2FkZF90YWlsX3JjdSgmcC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOwpAQCAtMTQ4OCw2ICsxNDcyLDcgQEAKIAltbV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibW1fc3RydWN0IiwKIAkJCXNpemVvZihzdHJ1Y3QgbW1fc3RydWN0KSwgQVJDSF9NSU5fTU1TVFJVQ1RfQUxJR04sCiAJCQlTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywgTlVMTCk7CisJdm1fYXJlYV9jYWNoZXAgPSBLTUVNX0NBQ0hFKHZtX2FyZWFfc3RydWN0LCBTTEFCX1BBTklDKTsKIAltbWFwX2luaXQoKTsKIH0KIApAQCAtMTU0MywxMiArMTUyOCwxNiBAQAogewogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC0+ZnM7CiAKLQlpZiAoKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9GUykgJiYKLQkgICAgKGZzICYmIGF0b21pY19yZWFkKCZmcy0+Y291bnQpID4gMSkpIHsKLQkJKm5ld19mc3AgPSBfX2NvcHlfZnNfc3RydWN0KGN1cnJlbnQtPmZzKTsKLQkJaWYgKCEqbmV3X2ZzcCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KKwlpZiAoISh1bnNoYXJlX2ZsYWdzICYgQ0xPTkVfRlMpIHx8ICFmcykKKwkJcmV0dXJuIDA7CisKKwkvKiBkb24ndCBuZWVkIGxvY2sgaGVyZTsgaW4gdGhlIHdvcnN0IGNhc2Ugd2UnbGwgZG8gdXNlbGVzcyBjb3B5ICovCisJaWYgKGZzLT51c2VycyA9PSAxKQorCQlyZXR1cm4gMDsKKworCSpuZXdfZnNwID0gY29weV9mc19zdHJ1Y3QoZnMpOworCWlmICghKm5ld19mc3ApCisJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjY0LDggKzE2NTMsMTMgQEAKIAogCQlpZiAobmV3X2ZzKSB7CiAJCQlmcyA9IGN1cnJlbnQtPmZzOworCQkJd3JpdGVfbG9jaygmZnMtPmxvY2spOwogCQkJY3VycmVudC0+ZnMgPSBuZXdfZnM7Ci0JCQluZXdfZnMgPSBmczsKKwkJCWlmICgtLWZzLT51c2VycykKKwkJCQluZXdfZnMgPSBOVUxMOworCQkJZWxzZQorCQkJCW5ld19mcyA9IGZzOworCQkJd3JpdGVfdW5sb2NrKCZmcy0+bG9jayk7CiAJCX0KIAogCQlpZiAobmV3X21tKSB7CkBAIC0xNzA0LDcgKzE2OTgsNyBAQAogCiBiYWRfdW5zaGFyZV9jbGVhbnVwX2ZzOgogCWlmIChuZXdfZnMpCi0JCXB1dF9mc19zdHJ1Y3QobmV3X2ZzKTsKKwkJZnJlZV9mc19zdHJ1Y3QobmV3X2ZzKTsKIAogYmFkX3Vuc2hhcmVfY2xlYW51cF90aHJlYWQ6CiBiYWRfdW5zaGFyZV9vdXQ6CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCA5ZWJmNzc5Li4zNDNhY2VjIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8dHJhY2UvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWxzLmgiCkBAIC0zMzgsNiArMzM5LDkgQEAKIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKK0RFRklORV9UUkFDRShpcnFfaGFuZGxlcl9lbnRyeSk7CitERUZJTkVfVFJBQ0UoaXJxX2hhbmRsZXJfZXhpdCk7CisKIC8qKgogICogaGFuZGxlX0lSUV9ldmVudCAtIGlycSBhY3Rpb24gY2hhaW4gaGFuZGxlcgogICogQGlycToJdGhlIGludGVycnVwdCBudW1iZXIKQEAgLTM1Niw3ICszNjAsOSBAQAogCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAogCWRvIHsKKwkJdHJhY2VfaXJxX2hhbmRsZXJfZW50cnkoaXJxLCBhY3Rpb24pOwogCQlyZXQgPSBhY3Rpb24tPmhhbmRsZXIoaXJxLCBhY3Rpb24tPmRldl9pZCk7CisJCXRyYWNlX2lycV9oYW5kbGVyX2V4aXQoaXJxLCBhY3Rpb24sIHJldCk7CiAJCWlmIChyZXQgPT0gSVJRX0hBTkRMRUQpCiAJCQlzdGF0dXMgfD0gYWN0aW9uLT5mbGFnczsKIAkJcmV0dmFsIHw9IHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rYWxsc3ltcy5jIGIva2VybmVsL2thbGxzeW1zLmMKaW5kZXggN2I4YjBmMi4uMzc0ZmFmOSAxMDA2NDQKLS0tIGEva2VybmVsL2thbGxzeW1zLmMKKysrIGIva2VybmVsL2thbGxzeW1zLmMKQEAgLTE2MSw2ICsxNjEsMjUgQEAKIAlyZXR1cm4gbW9kdWxlX2thbGxzeW1zX2xvb2t1cF9uYW1lKG5hbWUpOwogfQogCitpbnQga2FsbHN5bXNfb25fZWFjaF9zeW1ib2woaW50ICgqZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgbW9kdWxlICosCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyksCisJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwljaGFyIG5hbWVidWZbS1NZTV9OQU1FX0xFTl07CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGludCBvZmY7CisJaW50IHJldDsKKworCWZvciAoaSA9IDAsIG9mZiA9IDA7IGkgPCBrYWxsc3ltc19udW1fc3ltczsgaSsrKSB7CisJCW9mZiA9IGthbGxzeW1zX2V4cGFuZF9zeW1ib2wob2ZmLCBuYW1lYnVmKTsKKwkJcmV0ID0gZm4oZGF0YSwgbmFtZWJ1ZiwgTlVMTCwga2FsbHN5bXNfYWRkcmVzc2VzW2ldKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIG1vZHVsZV9rYWxsc3ltc19vbl9lYWNoX3N5bWJvbChmbiwgZGF0YSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrYWxsc3ltc19vbl9lYWNoX3N5bWJvbCk7CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zeW1ib2xfcG9zKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyAqc3ltYm9sc2l6ZSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyAqb2Zmc2V0KQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjLmMgYi9rZXJuZWwva2V4ZWMuYwppbmRleCA5M2VlZDg1Li41YTc1OGM2IDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWMuYworKysgYi9rZXJuZWwva2V4ZWMuYwpAQCAtNDIsNyArNDIsNyBAQAogbm90ZV9idWZfdCogY3Jhc2hfbm90ZXM7CiAKIC8qIHZtY29yZWluZm8gc3R1ZmYgKi8KLXVuc2lnbmVkIGNoYXIgdm1jb3JlaW5mb19kYXRhW1ZNQ09SRUlORk9fQllURVNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgdm1jb3JlaW5mb19kYXRhW1ZNQ09SRUlORk9fQllURVNdOwogdTMyIHZtY29yZWluZm9fbm90ZVtWTUNPUkVJTkZPX05PVEVfU0laRS80XTsKIHNpemVfdCB2bWNvcmVpbmZvX3NpemU7CiBzaXplX3Qgdm1jb3JlaW5mb19tYXhfc2l6ZSA9IHNpemVvZih2bWNvcmVpbmZvX2RhdGEpOwpAQCAtMTQwOSw2ICsxNDA5LDcgQEAKIAlWTUNPUkVJTkZPX09GRlNFVChsaXN0X2hlYWQsIHByZXYpOwogCVZNQ09SRUlORk9fT0ZGU0VUKHZtX3N0cnVjdCwgYWRkcik7CiAJVk1DT1JFSU5GT19MRU5HVEgoem9uZS5mcmVlX2FyZWEsIE1BWF9PUkRFUik7CisJbG9nX2J1Zl9rZXhlY19zZXR1cCgpOwogCVZNQ09SRUlORk9fTEVOR1RIKGZyZWVfYXJlYS5mcmVlX2xpc3QsIE1JR1JBVEVfVFlQRVMpOwogCVZNQ09SRUlORk9fTlVNQkVSKE5SX0ZSRUVfUEFHRVMpOwogCVZNQ09SRUlORk9fTlVNQkVSKFBHX2xydSk7CmRpZmYgLS1naXQgYS9rZXJuZWwva21vZC5jIGIva2VybmVsL2ttb2QuYwppbmRleCBmMGM4ZjU0Li5iNzUwNjc1IDEwMDY0NAotLS0gYS9rZXJuZWwva21vZC5jCisrKyBiL2tlcm5lbC9rbW9kLmMKQEAgLTUwLDcgKzUwLDggQEAKIGNoYXIgbW9kcHJvYmVfcGF0aFtLTU9EX1BBVEhfTEVOXSA9ICIvc2Jpbi9tb2Rwcm9iZSI7CiAKIC8qKgotICogcmVxdWVzdF9tb2R1bGUgLSB0cnkgdG8gbG9hZCBhIGtlcm5lbCBtb2R1bGUKKyAqIF9fcmVxdWVzdF9tb2R1bGUgLSB0cnkgdG8gbG9hZCBhIGtlcm5lbCBtb2R1bGUKKyAqIEB3YWl0OiB3YWl0IChvciBub3QpIGZvciB0aGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlCiAgKiBAZm10OiBwcmludGYgc3R5bGUgZm9ybWF0IHN0cmluZyBmb3IgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZQogICogQC4uLjogYXJndW1lbnRzIGFzIHNwZWNpZmllZCBpbiB0aGUgZm9ybWF0IHN0cmluZwogICoKQEAgLTYzLDcgKzY0LDcgQEAKICAqIElmIG1vZHVsZSBhdXRvLWxvYWRpbmcgc3VwcG9ydCBpcyBkaXNhYmxlZCB0aGVuIHRoaXMgZnVuY3Rpb24KICAqIGJlY29tZXMgYSBuby1vcGVyYXRpb24uCiAgKi8KLWludCByZXF1ZXN0X21vZHVsZShjb25zdCBjaGFyICpmbXQsIC4uLikKK2ludCBfX3JlcXVlc3RfbW9kdWxlKGJvb2wgd2FpdCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwogCWNoYXIgbW9kdWxlX25hbWVbTU9EVUxFX05BTUVfTEVOXTsKQEAgLTEwOCwxMSArMTA5LDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJldCA9IGNhbGxfdXNlcm1vZGVoZWxwZXIobW9kcHJvYmVfcGF0aCwgYXJndiwgZW52cCwgMSk7CisJcmV0ID0gY2FsbF91c2VybW9kZWhlbHBlcihtb2Rwcm9iZV9wYXRoLCBhcmd2LCBlbnZwLAorCQkJd2FpdCA/IFVNSF9XQUlUX1BST0MgOiBVTUhfV0FJVF9FWEVDKTsKIAlhdG9taWNfZGVjKCZrbW9kX2NvbmN1cnJlbnQpOwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHJlcXVlc3RfbW9kdWxlKTsKK0VYUE9SVF9TWU1CT0woX19yZXF1ZXN0X21vZHVsZSk7CiAjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KIAogc3RydWN0IHN1YnByb2Nlc3NfaW5mbyB7CmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCA3YmE4Y2Q5Li41MDE2YmZiIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTY5OSw5ICs3MDAsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJcmV0ID0gYXJjaF9wcmVwYXJlX2twcm9iZShwKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5sb2NrX3RleHQ7CiAKIAlJTklUX0hMSVNUX05PREUoJnAtPmhsaXN0KTsKIAlobGlzdF9hZGRfaGVhZF9yY3UoJnAtPmhsaXN0LApAQCAtNzEwLDYgKzcxMiw4IEBACiAJaWYgKGtwcm9iZV9lbmFibGVkKQogCQlhcmNoX2FybV9rcHJvYmUocCk7CiAKK291dF91bmxvY2tfdGV4dDoKKwltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOwogb3V0OgogCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIApAQCAtNzQ2LDggKzc1MCwxMSBAQAogCQkgKiBlbmFibGVkIGFuZCBub3QgZ29uZSAtIG90aGVyd2lzZSwgdGhlIGJyZWFrcG9pbnQgd291bGQKIAkJICogYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZC4gV2Ugc2F2ZSBvbiBmbHVzaGluZyBpY2FjaGUuCiAJCSAqLwotCQlpZiAoa3Byb2JlX2VuYWJsZWQgJiYgIWtwcm9iZV9nb25lKG9sZF9wKSkKKwkJaWYgKGtwcm9iZV9lbmFibGVkICYmICFrcHJvYmVfZ29uZShvbGRfcCkpIHsKKwkJCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCQkJYXJjaF9kaXNhcm1fa3Byb2JlKHApOworCQkJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKKwkJfQogCQlobGlzdF9kZWxfcmN1KCZvbGRfcC0+aGxpc3QpOwogCX0gZWxzZSB7CiAJCWlmIChwLT5icmVha19oYW5kbGVyICYmICFrcHJvYmVfZ29uZShwKSkKQEAgLTkxMiwxMCArOTE5LDggQEAKIAkJcmktPnJwID0gcnA7CiAJCXJpLT50YXNrID0gY3VycmVudDsKIAotCQlpZiAocnAtPmVudHJ5X2hhbmRsZXIgJiYgcnAtPmVudHJ5X2hhbmRsZXIocmksIHJlZ3MpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycC0+bG9jaywgZmxhZ3MpOworCQlpZiAocnAtPmVudHJ5X2hhbmRsZXIgJiYgcnAtPmVudHJ5X2hhbmRsZXIocmksIHJlZ3MpKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAogCQlhcmNoX3ByZXBhcmVfa3JldHByb2JlKHJpLCByZWdzKTsKIApAQCAtMTI4MCwxMiArMTI4NSwxNCBAQAogCWlmIChrcHJvYmVfZW5hYmxlZCkKIAkJZ290byBhbHJlYWR5X2VuYWJsZWQ7CiAKKwltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgS1BST0JFX1RBQkxFX1NJWkU7IGkrKykgewogCQloZWFkID0gJmtwcm9iZV90YWJsZVtpXTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIG5vZGUsIGhlYWQsIGhsaXN0KQogCQkJaWYgKCFrcHJvYmVfZ29uZShwKSkKIAkJCQlhcmNoX2FybV9rcHJvYmUocCk7CiAJfQorCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiAKIAlrcHJvYmVfZW5hYmxlZCA9IHRydWU7CiAJcHJpbnRrKEtFUk5fSU5GTyAiS3Byb2JlcyBnbG9iYWxseSBlbmFibGVkXG4iKTsKQEAgLTEzMTAsNiArMTMxNyw3IEBACiAKIAlrcHJvYmVfZW5hYmxlZCA9IGZhbHNlOwogCXByaW50ayhLRVJOX0lORk8gIktwcm9iZXMgZ2xvYmFsbHkgZGlzYWJsZWRcbiIpOworCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBLUFJPQkVfVEFCTEVfU0laRTsgaSsrKSB7CiAJCWhlYWQgPSAma3Byb2JlX3RhYmxlW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKQEAgLTEzMTgsNiArMTMyNiw3IEBACiAJCX0KIAl9CiAKKwltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOwogCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIAkvKiBBbGxvdyBhbGwgY3VycmVudGx5IHJ1bm5pbmcga3Byb2JlcyB0byBjb21wbGV0ZSAqLwogCXN5bmNocm9uaXplX3NjaGVkKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCAzNjczYTNmLi44MWI1ZjMzIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8dHJhY2UvbG9ja2RlcC5oPgogCiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKQEAgLTQzMywxMyArNDM0LDYgQEAKIGF0b21pY190IG5yX2ZpbmRfdXNhZ2VfZm9yd2FyZHNfcmVjdXJzaW9uczsKIGF0b21pY190IG5yX2ZpbmRfdXNhZ2VfYmFja3dhcmRzX2NoZWNrczsKIGF0b21pY190IG5yX2ZpbmRfdXNhZ2VfYmFja3dhcmRzX3JlY3Vyc2lvbnM7Ci0jIGRlZmluZSBkZWJ1Z19hdG9taWNfaW5jKHB0cikJCWF0b21pY19pbmMocHRyKQotIyBkZWZpbmUgZGVidWdfYXRvbWljX2RlYyhwdHIpCQlhdG9taWNfZGVjKHB0cikKLSMgZGVmaW5lIGRlYnVnX2F0b21pY19yZWFkKHB0cikJCWF0b21pY19yZWFkKHB0cikKLSNlbHNlCi0jIGRlZmluZSBkZWJ1Z19hdG9taWNfaW5jKHB0cikJCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIGRlYnVnX2F0b21pY19kZWMocHRyKQkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgZGVidWdfYXRvbWljX3JlYWQocHRyKQkJMAogI2VuZGlmCiAKIC8qCkBAIC0xOTAwLDkgKzE4OTQsOSBAQAogCQljdXJyLT5jb21tLCB0YXNrX3BpZF9ucihjdXJyKSk7CiAJcHJpbnRfbG9jayh0aGlzKTsKIAlpZiAoZm9yd2FyZHMpCi0JCXByaW50aygiYnV0IHRoaXMgbG9jayB0b29rIGFub3RoZXIsICVzLWlycS11bnNhZmUgbG9jayBpbiB0aGUgcGFzdDpcbiIsIGlycWNsYXNzKTsKKwkJcHJpbnRrKCJidXQgdGhpcyBsb2NrIHRvb2sgYW5vdGhlciwgJXMtdW5zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6XG4iLCBpcnFjbGFzcyk7CiAJZWxzZQotCQlwcmludGsoImJ1dCB0aGlzIGxvY2sgd2FzIHRha2VuIGJ5IGFub3RoZXIsICVzLWlycS1zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6XG4iLCBpcnFjbGFzcyk7CisJCXByaW50aygiYnV0IHRoaXMgbG9jayB3YXMgdGFrZW4gYnkgYW5vdGhlciwgJXMtc2FmZSBsb2NrIGluIHRoZSBwYXN0OlxuIiwgaXJxY2xhc3MpOwogCXByaW50X2xvY2tfbmFtZShvdGhlcik7CiAJcHJpbnRrKCJcblxuYW5kIGludGVycnVwdHMgY291bGQgY3JlYXRlIGludmVyc2UgbG9jayBvcmRlcmluZyBiZXR3ZWVuIHRoZW0uXG5cbiIpOwogCkBAIC0yMDE1LDcgKzIwMDksOCBAQAogCQkJICAgICBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdCwgY29uc3QgY2hhciAqbmFtZSk7CiAKIHN0YXRpYyBpbnQKLW1hcmtfbG9ja19pcnEoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLCBpbnQgbmV3X2JpdCkKK21hcmtfbG9ja19pcnEoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLAorCQllbnVtIGxvY2tfdXNhZ2VfYml0IG5ld19iaXQpCiB7CiAJaW50IGV4Y2xfYml0ID0gZXhjbHVzaXZlX2JpdChuZXdfYml0KTsKIAlpbnQgcmVhZCA9IG5ld19iaXQgJiAxOwpAQCAtMjA0Myw3ICsyMDM4LDcgQEAKIAkgKiBzdGF0ZXMuCiAJICovCiAJaWYgKCghcmVhZCB8fCAhZGlyIHx8IFNUUklDVF9SRUFEX0NIRUNLUykgJiYKLQkJCSF1c2FnZShjdXJyLCB0aGlzLCBleGNsX2JpdCwgc3RhdGVfbmFtZShuZXdfYml0KSkpCisJCQkhdXNhZ2UoY3VyciwgdGhpcywgZXhjbF9iaXQsIHN0YXRlX25hbWUobmV3X2JpdCAmIH4xKSkpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTI5MjksNiArMjkyNCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3NldF9jbGFzcyk7CiAKK0RFRklORV9UUkFDRShsb2NrX2FjcXVpcmUpOworCiAvKgogICogV2UgYXJlIG5vdCBhbHdheXMgY2FsbGVkIHdpdGggaXJxcyBkaXNhYmxlZCAtIGRvIHRoYXQgaGVyZSwKICAqIGFuZCBhbHNvIGF2b2lkIGxvY2tkZXAgcmVjdXJzaW9uOgpAQCAtMjkzOSw2ICsyOTM2LDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdHJhY2VfbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjaywgbmVzdF9sb2NrLCBpcCk7CisKIAlpZiAodW5saWtlbHkoY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQogCQlyZXR1cm47CiAKQEAgLTI5NTMsMTEgKzI5NTIsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tfYWNxdWlyZSk7CiAKK0RFRklORV9UUkFDRShsb2NrX3JlbGVhc2UpOworCiB2b2lkIGxvY2tfcmVsZWFzZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGludCBuZXN0ZWQsCiAJCQkgIHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXRyYWNlX2xvY2tfcmVsZWFzZShsb2NrLCBuZXN0ZWQsIGlwKTsKKwogCWlmICh1bmxpa2VseShjdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbikpCiAJCXJldHVybjsKIApAQCAtMzEwNiwxMCArMzEwOSwxNCBAQAogCWxvY2stPmlwID0gaXA7CiB9CiAKK0RFRklORV9UUkFDRShsb2NrX2NvbnRlbmRlZCk7CisKIHZvaWQgbG9ja19jb250ZW5kZWQoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl0cmFjZV9sb2NrX2NvbnRlbmRlZChsb2NrLCBpcCk7CisKIAlpZiAodW5saWtlbHkoIWxvY2tfc3RhdCkpCiAJCXJldHVybjsKIApAQCAtMzEyNSwxMCArMzEzMiwxNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobG9ja19jb250ZW5kZWQpOwogCitERUZJTkVfVFJBQ0UobG9ja19hY3F1aXJlZCk7CisKIHZvaWQgbG9ja19hY3F1aXJlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXRyYWNlX2xvY2tfYWNxdWlyZWQobG9jaywgaXApOworCiAJaWYgKHVubGlrZWx5KCFsb2NrX3N0YXQpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCBmNzdhYzMyLi5jMjY4YTc3IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC02OCw3ICs2OCw4IEBACiAKIC8qIExpc3Qgb2YgbW9kdWxlcywgcHJvdGVjdGVkIGJ5IG1vZHVsZV9tdXRleCBvciBwcmVlbXB0X2Rpc2FibGUKICAqIChkZWxldGUgdXNlcyBzdG9wX21hY2hpbmUvYWRkIHVzZXMgUkNVIGxpc3Qgb3BlcmF0aW9ucykuICovCi1zdGF0aWMgREVGSU5FX01VVEVYKG1vZHVsZV9tdXRleCk7CitERUZJTkVfTVVURVgobW9kdWxlX211dGV4KTsKK0VYUE9SVF9TWU1CT0xfR1BMKG1vZHVsZV9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKG1vZHVsZXMpOwogCiAvKiBXYWl0aW5nIGZvciBhIG1vZHVsZSB0byBmaW5pc2ggaW5pdGlhbGl6aW5nPyAqLwpAQCAtNzYsNyArNzcsNyBAQAogCiBzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChtb2R1bGVfbm90aWZ5X2xpc3QpOwogCi0vKiBCb3VuZHMgb2YgbW9kdWxlIGFsbG9jYXRpb24sIGZvciBzcGVlZGluZyBfX21vZHVsZV90ZXh0X2FkZHJlc3MgKi8KKy8qIEJvdW5kcyBvZiBtb2R1bGUgYWxsb2NhdGlvbiwgZm9yIHNwZWVkaW5nIF9fbW9kdWxlX2FkZHJlc3MgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9hZGRyX21pbiA9IC0xVUwsIG1vZHVsZV9hZGRyX21heCA9IDA7CiAKIGludCByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbmIpCkBAIC0xODYsMTcgKzE4Nyw2IEBACiAjZGVmaW5lIHN5bXZlcnNpb24oYmFzZSwgaWR4KSAoKGJhc2UgIT0gTlVMTCkgPyAoKGJhc2UpICsgKGlkeCkpIDogTlVMTCkKICNlbmRpZgogCi1zdHJ1Y3Qgc3ltc2VhcmNoIHsKLQljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3RhcnQsICpzdG9wOwotCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmNyY3M7Ci0JZW51bSB7Ci0JCU5PVF9HUExfT05MWSwKLQkJR1BMX09OTFksCi0JCVdJTExfQkVfR1BMX09OTFksCi0JfSBsaWNlbmNlOwotCWJvb2wgdW51c2VkOwotfTsKLQogc3RhdGljIGJvb2wgZWFjaF9zeW1ib2xfaW5fc2VjdGlvbihjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICphcnIsCiAJCQkJICAgdW5zaWduZWQgaW50IGFycnNpemUsCiAJCQkJICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCkBAIC0yMTcsMTAgKzIwNyw4IEBACiB9CiAKIC8qIFJldHVybnMgdHJ1ZSBhcyBzb29uIGFzIGZuIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlLiAqLwotc3RhdGljIGJvb2wgZWFjaF9zeW1ib2woYm9vbCAoKmZuKShjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICphcnIsCi0JCQkJICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCi0JCQkJICAgdW5zaWduZWQgaW50IHN5bW51bSwgdm9pZCAqZGF0YSksCi0JCQl2b2lkICpkYXRhKQorYm9vbCBlYWNoX3N5bWJvbChib29sICgqZm4pKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKmFyciwgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkgICAgdW5zaWduZWQgaW50IHN5bW51bSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggYXJyW10gPSB7CkBAIC0yNzMsNiArMjYxLDcgQEAKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZWFjaF9zeW1ib2wpOwogCiBzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnIHsKIAkvKiBJbnB1dCAqLwpAQCAtMjgzLDcgKzI3Miw3IEBACiAJLyogT3V0cHV0ICovCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjOwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN5bTsKIH07CiAKIHN0YXRpYyBib29sIGZpbmRfc3ltYm9sX2luX3NlY3Rpb24oY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqc3ltcywKQEAgLTMyNCwxNyArMzEzLDE3IEBACiAKIAlmc2EtPm93bmVyID0gb3duZXI7CiAJZnNhLT5jcmMgPSBzeW12ZXJzaW9uKHN5bXMtPmNyY3MsIHN5bW51bSk7Ci0JZnNhLT52YWx1ZSA9IHN5bXMtPnN0YXJ0W3N5bW51bV0udmFsdWU7CisJZnNhLT5zeW0gPSAmc3ltcy0+c3RhcnRbc3ltbnVtXTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogRmluZCBhIHN5bWJvbCwgcmV0dXJuIHZhbHVlLCAob3B0aW9uYWwpIGNyYyBhbmQgKG9wdGlvbmFsKSBtb2R1bGUKLSAqIHdoaWNoIG93bnMgaXQgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJIHN0cnVjdCBtb2R1bGUgKipvd25lciwKLQkJCQkgY29uc3QgdW5zaWduZWQgbG9uZyAqKmNyYywKLQkJCQkgYm9vbCBncGxvaywKLQkJCQkgYm9vbCB3YXJuKQorLyogRmluZCBhIHN5bWJvbCBhbmQgcmV0dXJuIGl0LCBhbG9uZyB3aXRoLCAob3B0aW9uYWwpIGNyYyBhbmQKKyAqIChvcHRpb25hbCkgbW9kdWxlIHdoaWNoIG93bnMgaXQgKi8KK2NvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpmaW5kX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLAorCQkJCQlzdHJ1Y3QgbW9kdWxlICoqb3duZXIsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKipjcmMsCisJCQkJCWJvb2wgZ3Bsb2ssCisJCQkJCWJvb2wgd2FybikKIHsKIAlzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnIGZzYTsKIApAQCAtMzQ3LDE1ICszMzYsMTYgQEAKIAkJCSpvd25lciA9IGZzYS5vd25lcjsKIAkJaWYgKGNyYykKIAkJCSpjcmMgPSBmc2EuY3JjOwotCQlyZXR1cm4gZnNhLnZhbHVlOworCQlyZXR1cm4gZnNhLnN5bTsKIAl9CiAKIAlERUJVR1AoIkZhaWxlZCB0byBmaW5kIHN5bWJvbCAlc1xuIiwgbmFtZSk7Ci0JcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmaW5kX3N5bWJvbCk7CiAKIC8qIFNlYXJjaCBmb3IgbW9kdWxlIGJ5IG5hbWU6IG11c3QgaG9sZCBtb2R1bGVfbXV0ZXguICovCi1zdGF0aWMgc3RydWN0IG1vZHVsZSAqZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCBtb2R1bGUgKmZpbmRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCkBAIC0zNjUsNiArMzU1LDcgQEAKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmaW5kX21vZHVsZSk7CiAKICNpZmRlZiBDT05GSUdfU01QCiAKQEAgLTY0MSw3ICs2MzIsNyBAQAogfQogCiAvKiBNb2R1bGUgYSB1c2VzIGIgKi8KLXN0YXRpYyBpbnQgdXNlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICphLCBzdHJ1Y3QgbW9kdWxlICpiKQoraW50IHVzZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqYSwgc3RydWN0IG1vZHVsZSAqYikKIHsKIAlzdHJ1Y3QgbW9kdWxlX3VzZSAqdXNlOwogCWludCBub193YXJuLCBlcnI7CkBAIC02NzQsNiArNjY1LDcgQEAKIAlub193YXJuID0gc3lzZnNfY3JlYXRlX2xpbmsoYi0+aG9sZGVyc19kaXIsICZhLT5ta29iai5rb2JqLCBhLT5uYW1lKTsKIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzZV9tb2R1bGUpOwogCiAvKiBDbGVhciB0aGUgdW5sb2FkIHN0dWZmIG9mIHRoZSBtb2R1bGUuICovCiBzdGF0aWMgdm9pZCBtb2R1bGVfdW5sb2FkX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kKQpAQCAtODk0LDcgKzg4Niw3IEBACiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoSVNfRVJSX1ZBTFVFKGZpbmRfc3ltYm9sKHN5bWJvbCwgJm93bmVyLCBOVUxMLCB0cnVlLCBmYWxzZSkpKQorCWlmICghZmluZF9zeW1ib2woc3ltYm9sLCAmb3duZXIsIE5VTEwsIHRydWUsIGZhbHNlKSkKIAkJQlVHKCk7CiAJbW9kdWxlX3B1dChvd25lcik7CiAJcHJlZW1wdF9lbmFibGUoKTsKQEAgLTkwOCw4ICs5MDAsMTAgQEAKIAlpZiAoY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkKIAkJcmV0dXJuOwogCi0JaWYgKCEobW9kYWRkciA9IG1vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpYWRkcikpKQotCQlCVUcoKTsKKwkvKiBtb2R1bGVfdGV4dF9hZGRyZXNzIGlzIHNhZmUgaGVyZTogd2UncmUgc3VwcG9zZWQgdG8gaGF2ZSByZWZlcmVuY2UKKwkgKiB0byBtb2R1bGUgZnJvbSBzeW1ib2xfZ2V0LCBzbyBpdCBjYW4ndCBnbyBhd2F5LiAqLworCW1vZGFkZHIgPSBfX21vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJQlVHX09OKCFtb2RhZGRyKTsKIAltb2R1bGVfcHV0KG1vZGFkZHIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ltYm9sX3B1dF9hZGRyKTsKQEAgLTk0OSwxMCArOTQzLDExIEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHVzZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqYSwgc3RydWN0IG1vZHVsZSAqYikKK2ludCB1c2VfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKmEsIHN0cnVjdCBtb2R1bGUgKmIpCiB7CiAJcmV0dXJuIHN0cm9uZ190cnlfbW9kdWxlX2dldChiKSA9PSAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNlX21vZHVsZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfdW5sb2FkX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQogewpAQCAtOTk1LDEyICs5OTAsMTIgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgdmVybWFnaWNbXSA9IFZFUk1BR0lDX1NUUklORzsKIAotc3RhdGljIGludCB0cnlfdG9fZm9yY2VfbG9hZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKnN5bW5hbWUpCitzdGF0aWMgaW50IHRyeV90b19mb3JjZV9sb2FkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqcmVhc29uKQogewogI2lmZGVmIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRAogCWlmICghdGVzdF90YWludChUQUlOVF9GT1JDRURfTU9EVUxFKSkKLQkJcHJpbnRrKCIlczogbm8gdmVyc2lvbiBmb3IgXCIlc1wiIGZvdW5kOiBrZXJuZWwgdGFpbnRlZC5cbiIsCi0JCSAgICAgICBtb2QtPm5hbWUsIHN5bW5hbWUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXM6IGtlcm5lbCB0YWludGVkLlxuIiwKKwkJICAgICAgIG1vZC0+bmFtZSwgcmVhc29uKTsKIAlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfRk9SQ0VEX01PRFVMRSk7CiAJcmV0dXJuIDA7CiAjZWxzZQpAQCAtMTA1Nyw5ICsxMDUyLDkgQEAKIHsKIAljb25zdCB1bnNpZ25lZCBsb25nICpjcmM7CiAKLQlpZiAoSVNfRVJSX1ZBTFVFKGZpbmRfc3ltYm9sKCJzdHJ1Y3RfbW9kdWxlIiwgTlVMTCwgJmNyYywgdHJ1ZSwgZmFsc2UpKSkKKwlpZiAoIWZpbmRfc3ltYm9sKCJtb2R1bGVfbGF5b3V0IiwgTlVMTCwgJmNyYywgdHJ1ZSwgZmFsc2UpKQogCQlCVUcoKTsKLQlyZXR1cm4gY2hlY2tfdmVyc2lvbihzZWNoZHJzLCB2ZXJzaW5kZXgsICJzdHJ1Y3RfbW9kdWxlIiwgbW9kLCBjcmMpOworCXJldHVybiBjaGVja192ZXJzaW9uKHNlY2hkcnMsIHZlcnNpbmRleCwgIm1vZHVsZV9sYXlvdXQiLCBtb2QsIGNyYyk7CiB9CiAKIC8qIEZpcnN0IHBhcnQgaXMga2VybmVsIHZlcnNpb24sIHdoaWNoIHdlIGlnbm9yZSBpZiBtb2R1bGUgaGFzIGNyY3MuICovCkBAIC0xMDk4LDI1ICsxMDkzLDI1IEBACiAKIC8qIFJlc29sdmUgYSBzeW1ib2wgZm9yIHRoaXMgbW9kdWxlLiAgSS5lLiBpZiB3ZSBmaW5kIG9uZSwgcmVjb3JkIHVzYWdlLgogICAgTXVzdCBiZSBob2xkaW5nIG1vZHVsZV9tdXRleC4gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlc29sdmVfc3ltYm9sKEVsZl9TaGRyICpzZWNoZHJzLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdmVyc2luZGV4LAotCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnJlc29sdmVfc3ltYm9sKEVsZl9TaGRyICpzZWNoZHJzLAorCQkJCQkJICB1bnNpZ25lZCBpbnQgdmVyc2luZGV4LAorCQkJCQkJICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JdW5zaWduZWQgbG9uZyByZXQ7CisJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN5bTsKIAljb25zdCB1bnNpZ25lZCBsb25nICpjcmM7CiAKLQlyZXQgPSBmaW5kX3N5bWJvbChuYW1lLCAmb3duZXIsICZjcmMsCisJc3ltID0gZmluZF9zeW1ib2wobmFtZSwgJm93bmVyLCAmY3JjLAogCQkJICAhKG1vZC0+dGFpbnRzICYgKDEgPDwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKSksIHRydWUpOwotCWlmICghSVNfRVJSX1ZBTFVFKHJldCkpIHsKLQkJLyogdXNlX21vZHVsZSBjYW4gZmFpbCBkdWUgdG8gT09NLAotCQkgICBvciBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgdW5sb2FkaW5nICovCisJLyogdXNlX21vZHVsZSBjYW4gZmFpbCBkdWUgdG8gT09NLAorCSAgIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiBvciB1bmxvYWRpbmcgKi8KKwlpZiAoc3ltKSB7CiAJCWlmICghY2hlY2tfdmVyc2lvbihzZWNoZHJzLCB2ZXJzaW5kZXgsIG5hbWUsIG1vZCwgY3JjKSB8fAogCQkgICAgIXVzZV9tb2R1bGUobW9kLCBvd25lcikpCi0JCQlyZXQgPSAtRUlOVkFMOworCQkJc3ltID0gTlVMTDsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3ltOwogfQogCiAvKgpAQCAtMTQ5MSw2ICsxNDg2LDkgQEAKIAkvKiBNb2R1bGUgdW5sb2FkIHN0dWZmICovCiAJbW9kdWxlX3VubG9hZF9mcmVlKG1vZCk7CiAKKwkvKiBGcmVlIGFueSBhbGxvY2F0ZWQgcGFyYW1ldGVycy4gKi8KKwlkZXN0cm95X3BhcmFtcyhtb2QtPmtwLCBtb2QtPm51bV9rcCk7CisKIAkvKiByZWxlYXNlIGFueSBwb2ludGVycyB0byBtY291bnQgaW4gdGhpcyBtb2R1bGUgKi8KIAlmdHJhY2VfcmVsZWFzZShtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSk7CiAKQEAgLTE1MTMsMTcgKzE1MTEsMTUgQEAKIHZvaWQgKl9fc3ltYm9sX2dldChjb25zdCBjaGFyICpzeW1ib2wpCiB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JdmFsdWUgPSBmaW5kX3N5bWJvbChzeW1ib2wsICZvd25lciwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7Ci0JaWYgKElTX0VSUl9WQUxVRSh2YWx1ZSkpCi0JCXZhbHVlID0gMDsKLQllbHNlIGlmIChzdHJvbmdfdHJ5X21vZHVsZV9nZXQob3duZXIpKQotCQl2YWx1ZSA9IDA7CisJc3ltID0gZmluZF9zeW1ib2woc3ltYm9sLCAmb3duZXIsIE5VTEwsIHRydWUsIHRydWUpOworCWlmIChzeW0gJiYgc3Ryb25nX3RyeV9tb2R1bGVfZ2V0KG93bmVyKSkKKwkJc3ltID0gTlVMTDsKIAlwcmVlbXB0X2VuYWJsZSgpOwogCi0JcmV0dXJuICh2b2lkICopdmFsdWU7CisJcmV0dXJuIHN5bSA/ICh2b2lkICopc3ltLT52YWx1ZSA6IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3N5bWJvbF9nZXQpOwogCkBAIC0xNTUxLDggKzE1NDcsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXJyKTsgaSsrKSB7CiAJCWZvciAocyA9IGFycltpXS5zeW07IHMgPCBhcnJbaV0uc3ltICsgYXJyW2ldLm51bTsgcysrKSB7Ci0JCQlpZiAoIUlTX0VSUl9WQUxVRShmaW5kX3N5bWJvbChzLT5uYW1lLCAmb3duZXIsCi0JCQkJCQkgICAgICBOVUxMLCB0cnVlLCBmYWxzZSkpKSB7CisJCQlpZiAoZmluZF9zeW1ib2wocy0+bmFtZSwgJm93bmVyLCBOVUxMLCB0cnVlLCBmYWxzZSkpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkgICAgICAgIiVzOiBleHBvcnRzIGR1cGxpY2F0ZSBzeW1ib2wgJXMiCiAJCQkJICAgICAgICIgKG93bmVkIGJ5ICVzKVxuIiwKQEAgLTE1NzYsNiArMTU3MSw3IEBACiAJdW5zaWduZWQgbG9uZyBzZWNiYXNlOwogCXVuc2lnbmVkIGludCBpLCBuID0gc2VjaGRyc1tzeW1pbmRleF0uc2hfc2l6ZSAvIHNpemVvZihFbGZfU3ltKTsKIAlpbnQgcmV0ID0gMDsKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqa3N5bTsKIAogCWZvciAoaSA9IDE7IGkgPCBuOyBpKyspIHsKIAkJc3dpdGNoIChzeW1baV0uc3Rfc2huZHgpIHsKQEAgLTE1OTUsMTMgKzE1OTEsMTQgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0hOX1VOREVGOgotCQkJc3ltW2ldLnN0X3ZhbHVlCi0JCQkgID0gcmVzb2x2ZV9zeW1ib2woc2VjaGRycywgdmVyc2luZGV4LAotCQkJCQkgICBzdHJ0YWIgKyBzeW1baV0uc3RfbmFtZSwgbW9kKTsKLQorCQkJa3N5bSA9IHJlc29sdmVfc3ltYm9sKHNlY2hkcnMsIHZlcnNpbmRleCwKKwkJCQkJICAgICAgc3RydGFiICsgc3ltW2ldLnN0X25hbWUsIG1vZCk7CiAJCQkvKiBPayBpZiByZXNvbHZlZC4gICovCi0JCQlpZiAoIUlTX0VSUl9WQUxVRShzeW1baV0uc3RfdmFsdWUpKQorCQkJaWYgKGtzeW0pIHsKKwkJCQlzeW1baV0uc3RfdmFsdWUgPSBrc3ltLT52YWx1ZTsKIAkJCQlicmVhazsKKwkJCX0KKwogCQkJLyogT2sgaWYgd2Vhay4gICovCiAJCQlpZiAoRUxGX1NUX0JJTkQoc3ltW2ldLnN0X2luZm8pID09IFNUQl9XRUFLKQogCQkJCWJyZWFrOwpAQCAtMTY3Niw4ICsxNjczLDcgQEAKIAkJCWlmICgocy0+c2hfZmxhZ3MgJiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF0KIAkJCSAgICB8fCAocy0+c2hfZmxhZ3MgJiBtYXNrc1ttXVsxXSkKIAkJCSAgICB8fCBzLT5zaF9lbnRzaXplICE9IH4wVUwKLQkJCSAgICB8fCBzdHJuY21wKHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lLAotCQkJCSAgICAgICAiLmluaXQiLCA1KSA9PSAwKQorCQkJICAgIHx8IHN0cnN0YXJ0cyhzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSwgIi5pbml0IikpCiAJCQkJY29udGludWU7CiAJCQlzLT5zaF9lbnRzaXplID0gZ2V0X29mZnNldChtb2QsICZtb2QtPmNvcmVfc2l6ZSwgcywgaSk7CiAJCQlERUJVR1AoIlx0JXNcbiIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKTsKQEAgLTE2OTQsOCArMTY5MCw3IEBACiAJCQlpZiAoKHMtPnNoX2ZsYWdzICYgbWFza3NbbV1bMF0pICE9IG1hc2tzW21dWzBdCiAJCQkgICAgfHwgKHMtPnNoX2ZsYWdzICYgbWFza3NbbV1bMV0pCiAJCQkgICAgfHwgcy0+c2hfZW50c2l6ZSAhPSB+MFVMCi0JCQkgICAgfHwgc3RybmNtcChzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSwKLQkJCQkgICAgICAgIi5pbml0IiwgNSkgIT0gMCkKKwkJCSAgICB8fCAhc3Ryc3RhcnRzKHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lLCAiLmluaXQiKSkKIAkJCQljb250aW51ZTsKIAkJCXMtPnNoX2VudHNpemUgPSAoZ2V0X29mZnNldChtb2QsICZtb2QtPmluaXRfc2l6ZSwgcywgaSkKIAkJCQkJIHwgSU5JVF9PRkZTRVRfTUFTSyk7CkBAIC0xODI4LDggKzE4MjMsNyBAQAogCQllbHNlCiAJCQlyZXR1cm4gJ2InOwogCX0KLQlpZiAoc3RybmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9uYW1lLAotCQkgICAgIi5kZWJ1ZyIsIHN0cmxlbigiLmRlYnVnIikpID09IDApCisJaWYgKHN0cnN0YXJ0cyhzZWNzdHJpbmdzICsgc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9uYW1lLCAiLmRlYnVnIikpCiAJCXJldHVybiAnbic7CiAJcmV0dXJuICc/JzsKIH0KQEAgLTE4OTgsOCArMTg5Miw3IEBACiAJdW5zaWduZWQgaW50IHN5bWluZGV4ID0gMDsKIAl1bnNpZ25lZCBpbnQgc3RyaW5kZXggPSAwOwogCXVuc2lnbmVkIGludCBtb2RpbmRleCwgdmVyc2luZGV4LCBpbmZvaW5kZXgsIHBjcHVpbmRleDsKLQl1bnNpZ25lZCBpbnQgbnVtX2twLCBudW1fbWNvdW50OwotCXN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwOworCXVuc2lnbmVkIGludCBudW1fbWNvdW50OwogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAlsb25nIGVyciA9IDA7CiAJdm9pZCAqcGVyY3B1ID0gTlVMTCwgKnB0ciA9IE5VTEw7IC8qIFN0b3BzIHNwdXJpb3VzIGdjYyB3YXJuaW5nICovCkBAIC0xOTE2LDEyICsxOTA5LDYgQEAKIAlpZiAobGVuID4gNjQgKiAxMDI0ICogMTAyNCB8fCAoaGRyID0gdm1hbGxvYyhsZW4pKSA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCS8qIENyZWF0ZSBzdG9wX21hY2hpbmUgdGhyZWFkcyBzaW5jZSB0aGUgZXJyb3IgcGF0aCByZWxpZXMgb24KLQkgKiBhIG5vbi1mYWlsaW5nIHN0b3BfbWFjaGluZSBjYWxsLiAqLwotCWVyciA9IHN0b3BfbWFjaGluZV9jcmVhdGUoKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZyZWVfaGRyOwotCiAJaWYgKGNvcHlfZnJvbV91c2VyKGhkciwgdW1vZCwgbGVuKSAhPSAwKSB7CiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gZnJlZV9oZHI7CkBAIC0xOTYyLDkgKzE5NDksMTIgQEAKIAkJfQogI2lmbmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCQkvKiBEb24ndCBsb2FkIC5leGl0IHNlY3Rpb25zICovCi0JCWlmIChzdHJuY21wKHNlY3N0cmluZ3Mrc2VjaGRyc1tpXS5zaF9uYW1lLCAiLmV4aXQiLCA1KSA9PSAwKQorCQlpZiAoc3Ryc3RhcnRzKHNlY3N0cmluZ3Mrc2VjaGRyc1tpXS5zaF9uYW1lLCAiLmV4aXQiKSkKIAkJCXNlY2hkcnNbaV0uc2hfZmxhZ3MgJj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKICNlbmRpZgorCQkvKiBEb24ndCBrZWVwIF9fdmVyc2lvbnMgYXJvdW5kOyBpdCdzIGp1c3QgZm9yIGxvYWRpbmcuICovCisJCWlmIChzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgIl9fdmVyc2lvbnMiKSA9PSAwKQorCQkJc2VjaGRyc1tpXS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwogCX0KIAogCW1vZGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLApAQCAtMjAwNiw3ICsxOTk2LDcgQEAKIAltb2RtYWdpYyA9IGdldF9tb2RpbmZvKHNlY2hkcnMsIGluZm9pbmRleCwgInZlcm1hZ2ljIik7CiAJLyogVGhpcyBpcyBhbGxvd2VkOiBtb2Rwcm9iZSAtLWZvcmNlIHdpbGwgaW52YWxpZGF0ZSBpdC4gKi8KIAlpZiAoIW1vZG1hZ2ljKSB7Ci0JCWVyciA9IHRyeV90b19mb3JjZV9sb2FkKG1vZCwgIm1hZ2ljIik7CisJCWVyciA9IHRyeV90b19mb3JjZV9sb2FkKG1vZCwgImJhZCB2ZXJtYWdpYyIpOwogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2hkcjsKIAl9IGVsc2UgaWYgKCFzYW1lX21hZ2ljKG1vZG1hZ2ljLCB2ZXJtYWdpYywgdmVyc2luZGV4KSkgewpAQCAtMjE0NCw4ICsyMTM0LDggQEAKIAogCS8qIE5vdyB3ZSd2ZSBnb3QgZXZlcnl0aGluZyBpbiB0aGUgZmluYWwgbG9jYXRpb25zLCB3ZSBjYW4KIAkgKiBmaW5kIG9wdGlvbmFsIHNlY3Rpb25zLiAqLwotCWtwID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fcGFyYW0iLCBzaXplb2YoKmtwKSwKLQkJCSAgJm51bV9rcCk7CisJbW9kLT5rcCA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX3BhcmFtIiwKKwkJCSAgICAgICBzaXplb2YoKm1vZC0+a3ApLCAmbW9kLT5udW1fa3ApOwogCW1vZC0+c3ltcyA9IHNlY3Rpb25fb2JqcyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWIiLAogCQkJCSBzaXplb2YoKm1vZC0+c3ltcyksICZtb2QtPm51bV9zeW1zKTsKIAltb2QtPmNyY3MgPSBzZWN0aW9uX2FkZHIoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiIik7CkBAIC0yMTk1LDggKzIxODUsOCBAQAogCSAgICB8fCAobW9kLT5udW1fdW51c2VkX2dwbF9zeW1zICYmICFtb2QtPnVudXNlZF9ncGxfY3JjcykKICNlbmRpZgogCQkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHZlcnNpb25zIGZvciBleHBvcnRlZCBzeW1ib2xzLlxuIiwgbW9kLT5uYW1lKTsKLQkJZXJyID0gdHJ5X3RvX2ZvcmNlX2xvYWQobW9kLCAibm9jcmMiKTsKKwkJZXJyID0gdHJ5X3RvX2ZvcmNlX2xvYWQobW9kLAorCQkJCQkibm8gdmVyc2lvbnMgZm9yIGV4cG9ydGVkIHN5bWJvbHMiKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC0yMjkxLDExICsyMjgxLDExIEBACiAJICovCiAJbGlzdF9hZGRfcmN1KCZtb2QtPmxpc3QsICZtb2R1bGVzKTsKIAotCWVyciA9IHBhcnNlX2FyZ3MobW9kLT5uYW1lLCBtb2QtPmFyZ3MsIGtwLCBudW1fa3AsIE5VTEwpOworCWVyciA9IHBhcnNlX2FyZ3MobW9kLT5uYW1lLCBtb2QtPmFyZ3MsIG1vZC0+a3AsIG1vZC0+bnVtX2twLCBOVUxMKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byB1bmxpbms7CiAKLQllcnIgPSBtb2Rfc3lzZnNfc2V0dXAobW9kLCBrcCwgbnVtX2twKTsKKwllcnIgPSBtb2Rfc3lzZnNfc2V0dXAobW9kLCBtb2QtPmtwLCBtb2QtPm51bV9rcCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gdW5saW5rOwogCWFkZF9zZWN0X2F0dHJzKG1vZCwgaGRyLT5lX3NobnVtLCBzZWNzdHJpbmdzLCBzZWNoZHJzKTsKQEAgLTIzMDQsMTIgKzIyOTQsMTMgQEAKIAkvKiBHZXQgcmlkIG9mIHRlbXBvcmFyeSBjb3B5ICovCiAJdmZyZWUoaGRyKTsKIAotCXN0b3BfbWFjaGluZV9kZXN0cm95KCk7CiAJLyogRG9uZSEgKi8KIAlyZXR1cm4gbW9kOwogCiAgdW5saW5rOgotCXN0b3BfbWFjaGluZShfX3VubGlua19tb2R1bGUsIG1vZCwgTlVMTCk7CisJLyogVW5saW5rIGNhcmVmdWxseToga2FsbHN5bXMgY291bGQgYmUgd2Fsa2luZyBsaXN0LiAqLworCWxpc3RfZGVsX3JjdSgmbW9kLT5saXN0KTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCW1vZHVsZV9hcmNoX2NsZWFudXAobW9kKTsKICBjbGVhbnVwOgogCWtvYmplY3RfZGVsKCZtb2QtPm1rb2JqLmtvYmopOwpAQCAtMjMxNyw4ICsyMzA4LDggQEAKIAlmdHJhY2VfcmVsZWFzZShtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSk7CiAgZnJlZV91bmxvYWQ6CiAJbW9kdWxlX3VubG9hZF9mcmVlKG1vZCk7Ci0gZnJlZV9pbml0OgogI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRV9VTkxPQUQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKyBmcmVlX2luaXQ6CiAJcGVyY3B1X21vZGZyZWUobW9kLT5yZWZwdHIpOwogI2VuZGlmCiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKQEAgLTIzMzIsNyArMjMyMyw2IEBACiAJa2ZyZWUoYXJncyk7CiAgZnJlZV9oZHI6CiAJdmZyZWUoaGRyKTsKLQlzdG9wX21hY2hpbmVfZGVzdHJveSgpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiAKICB0cnVuY2F0ZWQ6CkBAIC0yNjA5LDYgKzI1OTksMjUgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiByZXQ7CiB9CisKK2ludCBtb2R1bGVfa2FsbHN5bXNfb25fZWFjaF9zeW1ib2woaW50ICgqZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqLAorCQkJCQkgICAgIHN0cnVjdCBtb2R1bGUgKiwgdW5zaWduZWQgbG9uZyksCisJCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fc3ltdGFiOyBpKyspIHsKKwkJCXJldCA9IGZuKGRhdGEsIG1vZC0+c3RydGFiICsgbW9kLT5zeW10YWJbaV0uc3RfbmFtZSwKKwkJCQkgbW9kLCBtb2QtPnN5bXRhYltpXS5zdF92YWx1ZSk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAogc3RhdGljIGNoYXIgKm1vZHVsZV9mbGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKmJ1ZikKQEAgLTI3NDQsMjkgKzI3NTMsMzEgQEAKIH0KIAogLyoKLSAqIElzIHRoaXMgYSB2YWxpZCBtb2R1bGUgYWRkcmVzcz8KKyAqIGlzX21vZHVsZV9hZGRyZXNzIC0gaXMgdGhpcyBhZGRyZXNzIGluc2lkZSBhIG1vZHVsZT8KKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBjaGVjay4KKyAqCisgKiBTZWUgaXNfbW9kdWxlX3RleHRfYWRkcmVzcygpIGlmIHlvdSBzaW1wbHkgd2FudCB0byBzZWUgaWYgdGhlIGFkZHJlc3MKKyAqIGlzIGNvZGUgKG5vdCBkYXRhKS4KICAqLwotaW50IGlzX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKK2Jvb2wgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwlib29sIHJldDsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW9kLCAmbW9kdWxlcywgbGlzdCkgewotCQlpZiAod2l0aGluX21vZHVsZV9jb3JlKGFkZHIsIG1vZCkpIHsKLQkJCXByZWVtcHRfZW5hYmxlKCk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQorCXJldCA9IF9fbW9kdWxlX2FkZHJlc3MoYWRkcikgIT0gTlVMTDsKIAlwcmVlbXB0X2VuYWJsZSgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotCi0vKiBJcyB0aGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3M/ICovCi1fX25vdHJhY2VfZnVuY2dyYXBoIHN0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCisvKgorICogX19tb2R1bGVfYWRkcmVzcyAtIGdldCB0aGUgbW9kdWxlIHdoaWNoIGNvbnRhaW5zIGFuIGFkZHJlc3MuCisgKiBAYWRkcjogdGhlIGFkZHJlc3MuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0IGRpc2FibGVkIG9yIG1vZHVsZSBtdXRleCBoZWxkIHNvIHRoYXQKKyAqIG1vZHVsZSBkb2Vzbid0IGdldCBmcmVlZCBkdXJpbmcgdGhpcy4KKyAqLworc3RydWN0IG1vZHVsZSAqX19tb2R1bGVfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCkBAIC0yNzc0LDIyICsyNzg1LDUxIEBACiAJCXJldHVybiBOVUxMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW9kLCAmbW9kdWxlcywgbGlzdCkKLQkJaWYgKHdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9pbml0LCBtb2QtPmluaXRfdGV4dF9zaXplKQotCQkgICAgfHwgd2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV90ZXh0X3NpemUpKQorCQlpZiAod2l0aGluX21vZHVsZV9jb3JlKGFkZHIsIG1vZCkKKwkJICAgIHx8IHdpdGhpbl9tb2R1bGVfaW5pdChhZGRyLCBtb2QpKQogCQkJcmV0dXJuIG1vZDsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbW9kdWxlX2FkZHJlc3MpOwogCi1zdHJ1Y3QgbW9kdWxlICptb2R1bGVfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKKy8qCisgKiBpc19tb2R1bGVfdGV4dF9hZGRyZXNzIC0gaXMgdGhpcyBhZGRyZXNzIGluc2lkZSBtb2R1bGUgY29kZT8KKyAqIEBhZGRyOiB0aGUgYWRkcmVzcyB0byBjaGVjay4KKyAqCisgKiBTZWUgaXNfbW9kdWxlX2FkZHJlc3MoKSBpZiB5b3Ugc2ltcGx5IHdhbnQgdG8gc2VlIGlmIHRoZSBhZGRyZXNzIGlzCisgKiBhbnl3aGVyZSBpbiBhIG1vZHVsZS4gIFNlZSBrZXJuZWxfdGV4dF9hZGRyZXNzKCkgZm9yIHRlc3RpbmcgaWYgYW4KKyAqIGFkZHJlc3MgY29ycmVzcG9uZHMgdG8ga2VybmVsIG9yIG1vZHVsZSBjb2RlLgorICovCitib29sIGlzX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwlib29sIHJldDsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwotCW1vZCA9IF9fbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKTsKKwlyZXQgPSBfX21vZHVsZV90ZXh0X2FkZHJlc3MoYWRkcikgIT0gTlVMTDsKIAlwcmVlbXB0X2VuYWJsZSgpOwogCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIF9fbW9kdWxlX3RleHRfYWRkcmVzcyAtIGdldCB0aGUgbW9kdWxlIHdob3NlIGNvZGUgY29udGFpbnMgYW4gYWRkcmVzcy4KKyAqIEBhZGRyOiB0aGUgYWRkcmVzcy4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgZGlzYWJsZWQgb3IgbW9kdWxlIG11dGV4IGhlbGQgc28gdGhhdAorICogbW9kdWxlIGRvZXNuJ3QgZ2V0IGZyZWVkIGR1cmluZyB0aGlzLgorICovCitzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBtb2R1bGUgKm1vZCA9IF9fbW9kdWxlX2FkZHJlc3MoYWRkcik7CisJaWYgKG1vZCkgeworCQkvKiBNYWtlIHN1cmUgaXQncyB3aXRoaW4gdGhlIHRleHQgc2VjdGlvbi4gKi8KKwkJaWYgKCF3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfaW5pdCwgbW9kLT5pbml0X3RleHRfc2l6ZSkKKwkJICAgICYmICF3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3RleHRfc2l6ZSkpCisJCQltb2QgPSBOVUxMOworCX0KIAlyZXR1cm4gbW9kOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19tb2R1bGVfdGV4dF9hZGRyZXNzKTsKIAogLyogRG9uJ3QgZ3JhYiBsb2NrLCB3ZSdyZSBvb3BzaW5nLiAqLwogdm9pZCBwcmludF9tb2R1bGVzKHZvaWQpCkBAIC0yODA5LDkgKzI4NDksMTcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19NT0RWRVJTSU9OUwotLyogR2VuZXJhdGUgdGhlIHNpZ25hdHVyZSBmb3Igc3RydWN0IG1vZHVsZSBoZXJlLCB0b28sIGZvciBtb2R2ZXJzaW9ucy4gKi8KLXZvaWQgc3RydWN0X21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpIHsgcmV0dXJuOyB9Ci1FWFBPUlRfU1lNQk9MKHN0cnVjdF9tb2R1bGUpOworLyogR2VuZXJhdGUgdGhlIHNpZ25hdHVyZSBmb3IgYWxsIHJlbGV2YW50IG1vZHVsZSBzdHJ1Y3R1cmVzIGhlcmUuCisgKiBJZiB0aGVzZSBjaGFuZ2UsIHdlIGRvbid0IHdhbnQgdG8gdHJ5IHRvIHBhcnNlIHRoZSBtb2R1bGUuICovCit2b2lkIG1vZHVsZV9sYXlvdXQoc3RydWN0IG1vZHVsZSAqbW9kLAorCQkgICBzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvICp2ZXIsCisJCSAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwLAorCQkgICBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqa3MsCisJCSAgIHN0cnVjdCBtYXJrZXIgKm1hcmtlciwKKwkJICAgc3RydWN0IHRyYWNlcG9pbnQgKnRwKQoreworfQorRVhQT1JUX1NZTUJPTChtb2R1bGVfbGF5b3V0KTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BUktFUlMKZGlmZiAtLWdpdCBhL2tlcm5lbC9uc19jZ3JvdXAuYyBiL2tlcm5lbC9uc19jZ3JvdXAuYwppbmRleCA3OGJjM2ZkLi41YWE4NTRmIDEwMDY0NAotLS0gYS9rZXJuZWwvbnNfY2dyb3VwLmMKKysrIGIva2VybmVsL25zX2Nncm91cC5jCkBAIC0zNCw3ICszNCw3IEBACiAKIC8qCiAgKiBSdWxlczoKLSAqICAgMS4geW91IGNhbiBvbmx5IGVudGVyIGEgY2dyb3VwIHdoaWNoIGlzIGEgY2hpbGQgb2YgeW91ciBjdXJyZW50CisgKiAgIDEuIHlvdSBjYW4gb25seSBlbnRlciBhIGNncm91cCB3aGljaCBpcyBhIGRlc2NlbmRhbnQgb2YgeW91ciBjdXJyZW50CiAgKiAgICAgY2dyb3VwCiAgKiAgIDIuIHlvdSBjYW4gb25seSBwbGFjZSBhbm90aGVyIHByb2Nlc3MgaW50byBhIGNncm91cCBpZgogICogICAgIGEuIHlvdSBoYXZlIENBUF9TWVNfQURNSU4KQEAgLTQ1LDIxICs0NSwxNSBAQAogc3RhdGljIGludCBuc19jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKIAkJc3RydWN0IGNncm91cCAqbmV3X2Nncm91cCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXN0cnVjdCBjZ3JvdXAgKm9yaWc7Ci0KIAlpZiAoY3VycmVudCAhPSB0YXNrKSB7CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJaWYgKCFjZ3JvdXBfaXNfZGVzY2VuZGFudChuZXdfY2dyb3VwKSkKKwkJaWYgKCFjZ3JvdXBfaXNfZGVzY2VuZGFudChuZXdfY2dyb3VwLCBjdXJyZW50KSkKIAkJCXJldHVybiAtRVBFUk07CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZuZXdfY2dyb3VwLT5jb3VudCkgIT0gMCkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCW9yaWcgPSB0YXNrX2Nncm91cCh0YXNrLCBuc19zdWJzeXNfaWQpOwotCWlmIChvcmlnICYmIG9yaWcgIT0gbmV3X2Nncm91cC0+cGFyZW50KQorCWlmICghY2dyb3VwX2lzX2Rlc2NlbmRhbnQobmV3X2Nncm91cCwgdGFzaykpCiAJCXJldHVybiAtRVBFUk07CiAKIAlyZXR1cm4gMDsKQEAgLTc3LDcgKzcxLDcgQEAKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKLQlpZiAoIWNncm91cF9pc19kZXNjZW5kYW50KGNncm91cCkpCisJaWYgKCFjZ3JvdXBfaXNfZGVzY2VuZGFudChjZ3JvdXAsIGN1cnJlbnQpKQogCQlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOwogCiAJbnNfY2dyb3VwID0ga3phbGxvYyhzaXplb2YoKm5zX2Nncm91cCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCAzMmZlNGVmLi4zZmQ4YzViIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtOCwxOSArOCwxOSBAQAogICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRocm91Z2gtb3V0IHRoZSBrZXJuZWwgKGluY2x1ZGluZyBtbSBhbmQgZnMpCiAgKiB0byBpbmRpY2F0ZSBhIG1ham9yIHByb2JsZW0uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiBpbnQgcGFuaWNfb25fb29wczsKQEAgLTUyLDE5ICs1MiwxNSBAQAogICoKICAqCVRoaXMgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucy4KICAqLwotCiBOT1JFVF9UWVBFIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqIGZtdCwgLi4uKQogewotCWxvbmcgaTsKIAlzdGF0aWMgY2hhciBidWZbMTAyNF07CiAJdmFfbGlzdCBhcmdzOwotI2lmIGRlZmluZWQoQ09ORklHX1MzOTApCi0JdW5zaWduZWQgbG9uZyBjYWxsZXIgPSAodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOwotI2VuZGlmCisJbG9uZyBpOwogCiAJLyoKLQkgKiBJdCdzIHBvc3NpYmxlIHRvIGNvbWUgaGVyZSBkaXJlY3RseSBmcm9tIGEgcGFuaWMtYXNzZXJ0aW9uIGFuZCBub3QKLQkgKiBoYXZlIHByZWVtcHQgZGlzYWJsZWQuIFNvbWUgZnVuY3Rpb25zIGNhbGxlZCBmcm9tIGhlcmUgd2FudAorCSAqIEl0J3MgcG9zc2libGUgdG8gY29tZSBoZXJlIGRpcmVjdGx5IGZyb20gYSBwYW5pYy1hc3NlcnRpb24gYW5kCisJICogbm90IGhhdmUgcHJlZW1wdCBkaXNhYmxlZC4gU29tZSBmdW5jdGlvbnMgY2FsbGVkIGZyb20gaGVyZSB3YW50CiAJICogcHJlZW1wdCB0byBiZSBkaXNhYmxlZC4gTm8gcG9pbnQgZW5hYmxpbmcgaXQgbGF0ZXIgdGhvdWdoLi4uCiAJICovCiAJcHJlZW1wdF9kaXNhYmxlKCk7CkBAIC03Nyw3ICs3Myw2IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKIAlkdW1wX3N0YWNrKCk7CiAjZW5kaWYKLQlidXN0X3NwaW5sb2NrcygwKTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZSBjcmFzaGVkIGFuZCB3ZSBoYXZlIGEgY3Jhc2gga2VybmVsIGxvYWRlZCBsZXQgaXQgaGFuZGxlCkBAIC04NiwxNCArODEsMTIgQEAKIAkgKi8KIAljcmFzaF9rZXhlYyhOVUxMKTsKIAotI2lmZGVmIENPTkZJR19TTVAKIAkvKgogCSAqIE5vdGUgc21wX3NlbmRfc3RvcCBpcyB0aGUgdXN1YWwgc21wIHNodXRkb3duIGZ1bmN0aW9uLCB3aGljaAogCSAqIHVuZm9ydHVuYXRlbHkgbWVhbnMgaXQgbWF5IG5vdCBiZSBoYXJkZW5lZCB0byB3b3JrIGluIGEgcGFuaWMKIAkgKiBzaXR1YXRpb24uCiAJICovCiAJc21wX3NlbmRfc3RvcCgpOwotI2VuZGlmCiAKIAlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmcGFuaWNfbm90aWZpZXJfbGlzdCwgMCwgYnVmKTsKIApAQCAtMTAyLDE5ICs5NSwyMSBAQAogCiAJaWYgKHBhbmljX3RpbWVvdXQgPiAwKSB7CiAJCS8qCi0JIAkgKiBEZWxheSB0aW1lb3V0IHNlY29uZHMgYmVmb3JlIHJlYm9vdGluZyB0aGUgbWFjaGluZS4gCi0JCSAqIFdlIGNhbid0IHVzZSB0aGUgIm5vcm1hbCIgdGltZXJzIHNpbmNlIHdlIGp1c3QgcGFuaWNrZWQuLgotCSAJICovCi0JCXByaW50ayhLRVJOX0VNRVJHICJSZWJvb3RpbmcgaW4gJWQgc2Vjb25kcy4uIixwYW5pY190aW1lb3V0KTsKKwkJICogRGVsYXkgdGltZW91dCBzZWNvbmRzIGJlZm9yZSByZWJvb3RpbmcgdGhlIG1hY2hpbmUuCisJCSAqIFdlIGNhbid0IHVzZSB0aGUgIm5vcm1hbCIgdGltZXJzIHNpbmNlIHdlIGp1c3QgcGFuaWNrZWQuCisJCSAqLworCQlwcmludGsoS0VSTl9FTUVSRyAiUmVib290aW5nIGluICVkIHNlY29uZHMuLiIsIHBhbmljX3RpbWVvdXQpOworCiAJCWZvciAoaSA9IDA7IGkgPCBwYW5pY190aW1lb3V0KjEwMDA7ICkgewogCQkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAJCQlpICs9IHBhbmljX2JsaW5rKGkpOwogCQkJbWRlbGF5KDEpOwogCQkJaSsrOwogCQl9Ci0JCS8qCVRoaXMgd2lsbCBub3QgYmUgYSBjbGVhbiByZWJvb3QsIHdpdGggZXZlcnl0aGluZwotCQkgKglzaHV0dGluZyBkb3duLiAgQnV0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIG9mCi0JCSAqCXJlYm9vdGluZyB0aGUgc3lzdGVtIGl0IHdpbGwgYmUgcmVib290ZWQuCisJCS8qCisJCSAqIFRoaXMgd2lsbCBub3QgYmUgYSBjbGVhbiByZWJvb3QsIHdpdGggZXZlcnl0aGluZworCQkgKiBzaHV0dGluZyBkb3duLiAgQnV0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIG9mCisJCSAqIHJlYm9vdGluZyB0aGUgc3lzdGVtIGl0IHdpbGwgYmUgcmVib290ZWQuCiAJCSAqLwogCQllbWVyZ2VuY3lfcmVzdGFydCgpOwogCX0KQEAgLTEyNywzOCArMTIyLDQ0IEBACiAJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUzM5MCkKLQlkaXNhYmxlZF93YWl0KGNhbGxlcik7CisJeworCQl1bnNpZ25lZCBsb25nIGNhbGxlcjsKKworCQljYWxsZXIgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJCWRpc2FibGVkX3dhaXQoY2FsbGVyKTsKKwl9CiAjZW5kaWYKIAlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JZm9yIChpID0gMDs7KSB7CisJZm9yIChpID0gMDsgOyApIHsKIAkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCQlpICs9IHBhbmljX2JsaW5rKGkpOwogCQltZGVsYXkoMSk7CiAJCWkrKzsKIAl9CisJYnVzdF9zcGlubG9ja3MoMCk7CiB9CiAKIEVYUE9SVF9TWU1CT0wocGFuaWMpOwogCiAKIHN0cnVjdCB0bnQgewotCXU4IGJpdDsKLQljaGFyIHRydWU7Ci0JY2hhciBmYWxzZTsKKwl1OAliaXQ7CisJY2hhcgl0cnVlOworCWNoYXIJZmFsc2U7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRudCB0bnRzW10gPSB7Ci0JeyBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUsICdQJywgJ0cnIH0sCi0JeyBUQUlOVF9GT1JDRURfTU9EVUxFLCAnRicsICcgJyB9LAotCXsgVEFJTlRfVU5TQUZFX1NNUCwgJ1MnLCAnICcgfSwKLQl7IFRBSU5UX0ZPUkNFRF9STU1PRCwgJ1InLCAnICcgfSwKLQl7IFRBSU5UX01BQ0hJTkVfQ0hFQ0ssICdNJywgJyAnIH0sCi0JeyBUQUlOVF9CQURfUEFHRSwgJ0InLCAnICcgfSwKLQl7IFRBSU5UX1VTRVIsICdVJywgJyAnIH0sCi0JeyBUQUlOVF9ESUUsICdEJywgJyAnIH0sCi0JeyBUQUlOVF9PVkVSUklEREVOX0FDUElfVEFCTEUsICdBJywgJyAnIH0sCi0JeyBUQUlOVF9XQVJOLCAnVycsICcgJyB9LAotCXsgVEFJTlRfQ1JBUCwgJ0MnLCAnICcgfSwKKwl7IFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSwJJ1AnLCAnRycgfSwKKwl7IFRBSU5UX0ZPUkNFRF9NT0RVTEUsCQknRicsICcgJyB9LAorCXsgVEFJTlRfVU5TQUZFX1NNUCwJCSdTJywgJyAnIH0sCisJeyBUQUlOVF9GT1JDRURfUk1NT0QsCQknUicsICcgJyB9LAorCXsgVEFJTlRfTUFDSElORV9DSEVDSywJCSdNJywgJyAnIH0sCisJeyBUQUlOVF9CQURfUEFHRSwJCSdCJywgJyAnIH0sCisJeyBUQUlOVF9VU0VSLAkJCSdVJywgJyAnIH0sCisJeyBUQUlOVF9ESUUsCQkJJ0QnLCAnICcgfSwKKwl7IFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRSwJJ0EnLCAnICcgfSwKKwl7IFRBSU5UX1dBUk4sCQkJJ1cnLCAnICcgfSwKKwl7IFRBSU5UX0NSQVAsCQkJJ0MnLCAnICcgfSwKIH07CiAKIC8qKgpAQCAtMTk1LDcgKzE5Niw4IEBACiAJCSpzID0gMDsKIAl9IGVsc2UKIAkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIk5vdCB0YWludGVkIik7Ci0JcmV0dXJuKGJ1Zik7CisKKwlyZXR1cm4gYnVmOwogfQogCiBpbnQgdGVzdF90YWludCh1bnNpZ25lZCBmbGFnKQpAQCAtMjExLDcgKzIxMyw4IEBACiAKIHZvaWQgYWRkX3RhaW50KHVuc2lnbmVkIGZsYWcpCiB7Ci0JZGVidWdfbG9ja3MgPSAwOyAvKiBjYW4ndCB0cnVzdCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwgYW55bW9yZSAqLworCS8qIGNhbid0IHRydXN0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGtlcm5lbCBhbnltb3JlOiAqLworCWRlYnVnX2xvY2tzID0gMDsKIAlzZXRfYml0KGZsYWcsICZ0YWludGVkX21hc2spOwogfQogRVhQT1JUX1NZTUJPTChhZGRfdGFpbnQpOwpAQCAtMjY2LDggKzI2OSw4IEBACiB9CiAKIC8qCi0gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2FsbGluZyBDUFUgaXMgYWxsb3dlZCB0byBwcmludCBvb3BzLXJlbGF0ZWQgaW5mby4gIFRoaXMKLSAqIGlzIGEgYml0IHJhY3kuLgorICogUmV0dXJuIHRydWUgaWYgdGhlIGNhbGxpbmcgQ1BVIGlzIGFsbG93ZWQgdG8gcHJpbnQgb29wcy1yZWxhdGVkIGluZm8uCisgKiBUaGlzIGlzIGEgYml0IHJhY3kuLgogICovCiBpbnQgb29wc19tYXlfcHJpbnQodm9pZCkKIHsKQEAgLTI3NiwyMCArMjc5LDIyIEBACiAKIC8qCiAgKiBDYWxsZWQgd2hlbiB0aGUgYXJjaGl0ZWN0dXJlIGVudGVycyBpdHMgb29wcyBoYW5kbGVyLCBiZWZvcmUgaXQgcHJpbnRzCi0gKiBhbnl0aGluZy4gIElmIHRoaXMgaXMgdGhlIGZpcnN0IENQVSB0byBvb3BzLCBhbmQgaXQncyBvb3BzaW5nIHRoZSBmaXJzdCB0aW1lCi0gKiB0aGVuIGxldCBpdCBwcm9jZWVkLgorICogYW55dGhpbmcuICBJZiB0aGlzIGlzIHRoZSBmaXJzdCBDUFUgdG8gb29wcywgYW5kIGl0J3Mgb29wc2luZyB0aGUgZmlyc3QKKyAqIHRpbWUgdGhlbiBsZXQgaXQgcHJvY2VlZC4KICAqCi0gKiBUaGlzIGlzIGFsbCBlbmFibGVkIGJ5IHRoZSBwYXVzZV9vbl9vb3BzIGtlcm5lbCBib290IG9wdGlvbi4gIFdlIGRvIGFsbCB0aGlzCi0gKiB0byBlbnN1cmUgdGhhdCBvb3BzZXMgZG9uJ3Qgc2Nyb2xsIG9mZiB0aGUgc2NyZWVuLiAgSXQgaGFzIHRoZSBzaWRlLWVmZmVjdAotICogb2YgcHJldmVudGluZyBsYXRlci1vb3BzaW5nIENQVXMgZnJvbSBtdWNraW5nIHVwIHRoZSBkaXNwbGF5LCB0b28uCisgKiBUaGlzIGlzIGFsbCBlbmFibGVkIGJ5IHRoZSBwYXVzZV9vbl9vb3BzIGtlcm5lbCBib290IG9wdGlvbi4gIFdlIGRvIGFsbAorICogdGhpcyB0byBlbnN1cmUgdGhhdCBvb3BzZXMgZG9uJ3Qgc2Nyb2xsIG9mZiB0aGUgc2NyZWVuLiAgSXQgaGFzIHRoZQorICogc2lkZS1lZmZlY3Qgb2YgcHJldmVudGluZyBsYXRlci1vb3BzaW5nIENQVXMgZnJvbSBtdWNraW5nIHVwIHRoZSBkaXNwbGF5LAorICogdG9vLgogICoKLSAqIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBDUFUgd2hpY2ggaXMgYWxsb3dlZCB0byBwcmludCBlbmRzIHVwIHBhdXNpbmcgZm9yIHRoZQotICogcmlnaHQgZHVyYXRpb24sIHdoZXJlYXMgYWxsIHRoZSBvdGhlciBDUFVzIHBhdXNlIGZvciB0d2ljZSBhcyBsb25nOiBvbmNlIGluCi0gKiBvb3BzX2VudGVyKCksIG9uY2UgaW4gb29wc19leGl0KCkuCisgKiBJdCB0dXJucyBvdXQgdGhhdCB0aGUgQ1BVIHdoaWNoIGlzIGFsbG93ZWQgdG8gcHJpbnQgZW5kcyB1cCBwYXVzaW5nIGZvcgorICogdGhlIHJpZ2h0IGR1cmF0aW9uLCB3aGVyZWFzIGFsbCB0aGUgb3RoZXIgQ1BVcyBwYXVzZSBmb3IgdHdpY2UgYXMgbG9uZzoKKyAqIG9uY2UgaW4gb29wc19lbnRlcigpLCBvbmNlIGluIG9vcHNfZXhpdCgpLgogICovCiB2b2lkIG9vcHNfZW50ZXIodm9pZCkKIHsKLQlkZWJ1Z19sb2Nrc19vZmYoKTsgLyogY2FuJ3QgdHJ1c3QgdGhlIGludGVncml0eSBvZiB0aGUga2VybmVsIGFueW1vcmUgKi8KKwkvKiBjYW4ndCB0cnVzdCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwgYW55bW9yZTogKi8KKwlkZWJ1Z19sb2Nrc19vZmYoKTsKIAlkb19vb3BzX2VudGVyX2V4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IGExZTMwMjUuLmRlMjczZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKKy8qIFdlIGFidXNlIHRoZSBoaWdoIGJpdHMgb2YgInBlcm0iIHRvIHJlY29yZCB3aGV0aGVyIHdlIGttYWxsb2MnZWQuICovCisjZGVmaW5lIEtQQVJBTV9LTUFMTE9DRUQJMHg4MDAwMDAwMAorCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCiAjZWxzZQpAQCAtMjE3LDcgKzIyMCwxOSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQkqKGNoYXIgKiopa3AtPmFyZyA9IChjaGFyICopdmFsOworCWlmIChrcC0+cGVybSAmIEtQQVJBTV9LTUFMTE9DRUQpCisJCWtmcmVlKCooY2hhciAqKilrcC0+YXJnKTsKKworCS8qIFRoaXMgaXMgYSBoYWNrLiAgV2UgY2FuJ3QgbmVlZCB0byBzdHJkdXAgaW4gZWFybHkgYm9vdCwgYW5kIHdlCisJICogZG9uJ3QgbmVlZCB0bzsgdGhpcyBtYW5nbGVkIGNvbW1hbmRsaW5lIGlzIHByZXNlcnZlZC4gKi8KKwlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkgeworCQlrcC0+cGVybSB8PSBLUEFSQU1fS01BTExPQ0VEOworCQkqKGNoYXIgKiopa3AtPmFyZyA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFrcC0+YXJnKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfSBlbHNlCisJCSooY29uc3QgY2hhciAqKilrcC0+YXJnID0gdmFsOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3MSw2ICs1ODYsMTUgQEAKIH0KICNlbmRpZgogCit2b2lkIGRlc3Ryb3lfcGFyYW1zKGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKnBhcmFtcywgdW5zaWduZWQgbnVtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQlpZiAocGFyYW1zW2ldLnBlcm0gJiBLUEFSQU1fS01BTExPQ0VEKQorCQkJa2ZyZWUoKihjaGFyICoqKXBhcmFtc1tpXS5hcmcpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX2FkZF9zeXNmc19wYXJhbShjb25zdCBjaGFyICpuYW1lLAogCQkJCQkgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKIAkJCQkJICB1bnNpZ25lZCBpbnQgbmFtZV9za2lwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3BpZC5jIGIva2VybmVsL3BpZC5jCmluZGV4IDFiMzU4NmYuLmIyZTVmNzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9waWQuYworKysgYi9rZXJuZWwvcGlkLmMKQEAgLTQwMyw2ICs0MDMsOCBAQAogewogCXN0cnVjdCBwaWQgKnBpZDsKIAlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKHR5cGUgIT0gUElEVFlQRV9QSUQpCisJCXRhc2sgPSB0YXNrLT5ncm91cF9sZWFkZXI7CiAJcGlkID0gZ2V0X3BpZCh0YXNrLT5waWRzW3R5cGVdLnBpZCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHBpZDsKQEAgLTQ1MCwxMSArNDUyLDI0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwaWRfdm5yKTsKIAotcGlkX3QgdGFza19waWRfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3BpZF90IF9fdGFza19waWRfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbnVtIHBpZF90eXBlIHR5cGUsCisJCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7Ci0JcmV0dXJuIHBpZF9ucl9ucyh0YXNrX3BpZCh0c2spLCBucyk7CisJcGlkX3QgbnIgPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWlmICghbnMpCisJCW5zID0gY3VycmVudC0+bnNwcm94eS0+cGlkX25zOworCWlmIChsaWtlbHkocGlkX2FsaXZlKHRhc2spKSkgeworCQlpZiAodHlwZSAhPSBQSURUWVBFX1BJRCkKKwkJCXRhc2sgPSB0YXNrLT5ncm91cF9sZWFkZXI7CisJCW5yID0gcGlkX25yX25zKHRhc2stPnBpZHNbdHlwZV0ucGlkLCBucyk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIG5yOwogfQotRVhQT1JUX1NZTUJPTCh0YXNrX3BpZF9ucl9ucyk7CitFWFBPUlRfU1lNQk9MKF9fdGFza19waWRfbnJfbnMpOwogCiBwaWRfdCB0YXNrX3RnaWRfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKIHsKQEAgLTQ2MiwxOCArNDc3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wodGFza190Z2lkX25yX25zKTsKIAotcGlkX3QgdGFza19wZ3JwX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCi17Ci0JcmV0dXJuIHBpZF9ucl9ucyh0YXNrX3BncnAodHNrKSwgbnMpOwotfQotRVhQT1JUX1NZTUJPTCh0YXNrX3BncnBfbnJfbnMpOwotCi1waWRfdCB0YXNrX3Nlc3Npb25fbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKLXsKLQlyZXR1cm4gcGlkX25yX25zKHRhc2tfc2Vzc2lvbih0c2spLCBucyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHRhc2tfc2Vzc2lvbl9ucl9ucyk7Ci0KIHN0cnVjdCBwaWRfbmFtZXNwYWNlICp0YXNrX2FjdGl2ZV9waWRfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJcmV0dXJuIG5zX29mX3BpZCh0YXNrX3BpZCh0c2spKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvcGlkX25hbWVzcGFjZS5jCmluZGV4IGZhYjhlYTguLjJkMTAwMWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9waWRfbmFtZXNwYWNlLmMKKysrIGIva2VybmVsL3BpZF9uYW1lc3BhY2UuYwpAQCAtMTUyLDYgKzE1Miw3IEBACiB7CiAJaW50IG5yOwogCWludCByYzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAKIAkvKgogCSAqIFRoZSBsYXN0IHRocmVhZCBpbiB0aGUgY2dyb3VwLWluaXQgdGhyZWFkIGdyb3VwIGlzIHRlcm1pbmF0aW5nLgpAQCAtMTY5LDcgKzE3MCwxOSBAQAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJbnIgPSBuZXh0X3BpZG1hcChwaWRfbnMsIDEpOwogCXdoaWxlIChuciA+IDApIHsKLQkJa2lsbF9wcm9jX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgbnIpOworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJLyoKKwkJICogVXNlIGZvcmNlX3NpZygpIHNpbmNlIGl0IGNsZWFycyBTSUdOQUxfVU5LSUxMQUJMRSBlbnN1cmluZworCQkgKiBhbnkgbmVzdGVkLWNvbnRhaW5lcidzIGluaXQgcHJvY2Vzc2VzIGRvbid0IGlnbm9yZSB0aGUKKwkJICogc2lnbmFsCisJCSAqLworCQl0YXNrID0gcGlkX3Rhc2soZmluZF92cGlkKG5yKSwgUElEVFlQRV9QSUQpOworCQlpZiAodGFzaykKKwkJCWZvcmNlX3NpZyhTSUdLSUxMLCB0YXNrKTsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKwogCQluciA9IG5leHRfcGlkbWFwKHBpZF9ucywgbnIpOwogCX0KIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvZGlzay5jIGIva2VybmVsL3Bvd2VyL2Rpc2suYwppbmRleCBmM2RiMzgyLi41ZjIxYWIyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvZGlzay5jCisrKyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKQEAgLTI4OSw3ICsyODksNyBAQAogICoJaGliZXJuYXRpb25fc25hcHNob3QgLSBxdWllc2NlIGRldmljZXMgYW5kIGNyZWF0ZSB0aGUgaGliZXJuYXRpb24KICAqCXNuYXBzaG90IGltYWdlLgogICoJQHBsYXRmb3JtX21vZGUgLSBpZiBzZXQsIHVzZSB0aGUgcGxhdGZvcm0gZHJpdmVyLCBpZiBhdmFpbGFibGUsIHRvCi0gKgkJCSBwcmVwYXJlIHRoZSBwbGF0Zm9ybSBmcmltd2FyZSBmb3IgdGhlIHBvd2VyIHRyYW5zaXRpb24uCisgKgkJCSBwcmVwYXJlIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZSBmb3IgdGhlIHBvd2VyIHRyYW5zaXRpb24uCiAgKgogICoJTXVzdCBiZSBjYWxsZWQgd2l0aCBwbV9tdXRleCBoZWxkCiAgKi8KQEAgLTQxMiw3ICs0MTIsNyBAQAogICoJaGliZXJuYXRpb25fcmVzdG9yZSAtIHF1aWVzY2UgZGV2aWNlcyBhbmQgcmVzdG9yZSB0aGUgaGliZXJuYXRpb24KICAqCXNuYXBzaG90IGltYWdlLiAgSWYgc3VjY2Vzc2Z1bCwgY29udHJvbCByZXR1cm5zIGluIGhpYmVybmF0aW9uX3NuYXBob3QoKQogICoJQHBsYXRmb3JtX21vZGUgLSBpZiBzZXQsIHVzZSB0aGUgcGxhdGZvcm0gZHJpdmVyLCBpZiBhdmFpbGFibGUsIHRvCi0gKgkJCSBwcmVwYXJlIHRoZSBwbGF0Zm9ybSBmcmltd2FyZSBmb3IgdGhlIHRyYW5zaXRpb24uCisgKgkJCSBwcmVwYXJlIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZSBmb3IgdGhlIHRyYW5zaXRpb24uCiAgKgogICoJTXVzdCBiZSBjYWxsZWQgd2l0aCBwbV9tdXRleCBoZWxkCiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBlMzYwMmQwLi41MDUyYjU0IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTM1LDYgKzEzNiwyNCBAQAogc3RhdGljIGludCBsb2dfYnVmX2xlbiA9IF9fTE9HX0JVRl9MRU47CiBzdGF0aWMgdW5zaWduZWQgbG9nZ2VkX2NoYXJzOyAvKiBOdW1iZXIgb2YgY2hhcnMgcHJvZHVjZWQgc2luY2UgbGFzdCByZWFkK2NsZWFyIG9wZXJhdGlvbiAqLwogCisjaWZkZWYgQ09ORklHX0tFWEVDCisvKgorICogVGhpcyBhcHBlbmRzIHRoZSBsaXN0ZWQgc3ltYm9scyB0byAvcHJvYy92bWNvcmVpbmZvCisgKgorICogL3Byb2Mvdm1jb3JlaW5mbyBpcyB1c2VkIGJ5IHZhcmlvdXMgdXRpaWx0aWVzLCBsaWtlIGNyYXNoIGFuZCBtYWtlZHVtcGZpbGUgdG8KKyAqIG9idGFpbiBhY2Nlc3MgdG8gc3ltYm9scyB0aGF0IGFyZSBvdGhlcndpc2UgdmVyeSBkaWZmaWN1bHQgdG8gbG9jYXRlLiAgVGhlc2UKKyAqIHN5bWJvbHMgYXJlIHNwZWNpZmljYWxseSB1c2VkIHNvIHRoYXQgdXRpbGl0aWVzIGNhbiBhY2Nlc3MgYW5kIGV4dHJhY3QgdGhlCisgKiBkbWVzZyBsb2cgZnJvbSBhIHZtY29yZSBmaWxlIGFmdGVyIGEgY3Jhc2guCisgKi8KK3ZvaWQgbG9nX2J1Zl9rZXhlY19zZXR1cCh2b2lkKQoreworCVZNQ09SRUlORk9fU1lNQk9MKGxvZ19idWYpOworCVZNQ09SRUlORk9fU1lNQk9MKGxvZ19lbmQpOworCVZNQ09SRUlORk9fU1lNQk9MKGxvZ19idWZfbGVuKTsKKwlWTUNPUkVJTkZPX1NZTUJPTChsb2dnZWRfY2hhcnMpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IGxvZ19idWZfbGVuX3NldHVwKGNoYXIgKnN0cikKIHsKIAl1bnNpZ25lZCBzaXplID0gbWVtcGFyc2Uoc3RyLCAmc3RyKTsKQEAgLTEyOTIsOCArMTMxMSwxMSBAQAogYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLAogCQkJdW5zaWduZWQgaW50IGludGVydmFsX21zZWNzKQogewotCWlmICgqY2FsbGVyX2ppZmZpZXMgPT0gMCB8fCB0aW1lX2FmdGVyKGppZmZpZXMsICpjYWxsZXJfamlmZmllcykpIHsKLQkJKmNhbGxlcl9qaWZmaWVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWxfbXNlY3MpOworCWlmICgqY2FsbGVyX2ppZmZpZXMgPT0gMAorCQkJfHwgIXRpbWVfaW5fcmFuZ2UoamlmZmllcywgKmNhbGxlcl9qaWZmaWVzLAorCQkJCQkqY2FsbGVyX2ppZmZpZXMKKwkJCQkJKyBtc2Vjc190b19qaWZmaWVzKGludGVydmFsX21zZWNzKSkpIHsKKwkJKmNhbGxlcl9qaWZmaWVzID0gamlmZmllczsKIAkJcmV0dXJuIHRydWU7CiAJfQogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCBjOWNmNDhiLi5hYWFkMGVjIDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC02MCwxMSArNjAsMTUgQEAKIHsKIAlzcGluX2xvY2soJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAodGFza19pc190cmFjZWQoY2hpbGQpKSB7Ci0JCWlmIChjaGlsZC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9TVE9QX1NUT1BQRUQpIHsKKwkJLyoKKwkJICogSWYgdGhlIGdyb3VwIHN0b3AgaXMgY29tcGxldGVkIG9yIGluIHByb2dyZXNzLAorCQkgKiB0aGlzIHRocmVhZCB3YXMgYWxyZWFkeSBjb3VudGVkIGFzIHN0b3BwZWQuCisJCSAqLworCQlpZiAoY2hpbGQtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfU1RPUF9TVE9QUEVEIHx8CisJCSAgICBjaGlsZC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50KQogCQkJX19zZXRfdGFza19zdGF0ZShjaGlsZCwgVEFTS19TVE9QUEVEKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJc2lnbmFsX3dha2VfdXAoY2hpbGQsIDEpOwotCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiB9CkBAIC0yMzUsMTggKzIzOSw1OCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IGRhdGEpCisvKgorICogQ2FsbGVkIHdpdGggaXJxcyBkaXNhYmxlZCwgcmV0dXJucyB0cnVlIGlmIGNoaWxkcyBzaG91bGQgcmVhcCB0aGVtc2VsdmVzLgorICovCitzdGF0aWMgaW50IGlnbm9yaW5nX2NoaWxkcmVuKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaCkKIHsKLQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkvKiAuLiByZS1wYXJlbnQgLi4gKi8KLQlfX3B0cmFjZV91bmxpbmsoY2hpbGQpOwotCS8qIC4uIGFuZCB3YWtlIGl0IHVwLiAqLwotCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSAhPSBFWElUX1pPTUJJRSkKLQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKKwlpbnQgcmV0OworCXNwaW5fbG9jaygmc2lnaC0+c2lnbG9jayk7CisJcmV0ID0gKHNpZ2gtPmFjdGlvbltTSUdDSExELTFdLnNhLnNhX2hhbmRsZXIgPT0gU0lHX0lHTikgfHwKKwkgICAgICAoc2lnaC0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfZmxhZ3MgJiBTQV9OT0NMRFdBSVQpOworCXNwaW5fdW5sb2NrKCZzaWdoLT5zaWdsb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2FsbGVkIHdpdGggdGFza2xpc3RfbG9jayBoZWxkIGZvciB3cml0aW5nLgorICogVW5saW5rIGEgdHJhY2VkIHRhc2ssIGFuZCBjbGVhbiBpdCB1cCBpZiBpdCB3YXMgYSB0cmFjZWQgem9tYmllLgorICogUmV0dXJuIHRydWUgaWYgaXQgbmVlZHMgdG8gYmUgcmVhcGVkIHdpdGggcmVsZWFzZV90YXNrKCkuCisgKiAoV2UgY2FuJ3QgY2FsbCByZWxlYXNlX3Rhc2soKSBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBob2xkIHRhc2tsaXN0X2xvY2suKQorICoKKyAqIElmIGl0J3MgYSB6b21iaWUsIG91ciBhdHRhY2hlZG5lc3MgcHJldmVudGVkIG5vcm1hbCBwYXJlbnQgbm90aWZpY2F0aW9uCisgKiBvciBzZWxmLXJlYXBpbmcuICBEbyBub3RpZmljYXRpb24gbm93IGlmIGl0IHdvdWxkIGhhdmUgaGFwcGVuZWQgZWFybGllci4KKyAqIElmIGl0IHNob3VsZCByZWFwIGl0c2VsZiwgcmV0dXJuIHRydWUuCisgKgorICogSWYgaXQncyBvdXIgb3duIGNoaWxkLCB0aGVyZSBpcyBubyBub3RpZmljYXRpb24gdG8gZG8uCisgKiBCdXQgaWYgb3VyIG5vcm1hbCBjaGlsZHJlbiBzZWxmLXJlYXAsIHRoZW4gdGhpcyBjaGlsZAorICogd2FzIHByZXZlbnRlZCBieSBwdHJhY2UgYW5kIHdlIG11c3QgcmVhcCBpdCBub3cuCisgKi8KK3N0YXRpYyBib29sIF9fcHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlciwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCV9fcHRyYWNlX3VubGluayhwKTsKKworCWlmIChwLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7CisJCWlmICghdGFza19kZXRhY2hlZChwKSAmJiB0aHJlYWRfZ3JvdXBfZW1wdHkocCkpIHsKKwkJCWlmICghc2FtZV90aHJlYWRfZ3JvdXAocC0+cmVhbF9wYXJlbnQsIHRyYWNlcikpCisJCQkJZG9fbm90aWZ5X3BhcmVudChwLCBwLT5leGl0X3NpZ25hbCk7CisJCQllbHNlIGlmIChpZ25vcmluZ19jaGlsZHJlbih0cmFjZXItPnNpZ2hhbmQpKQorCQkJCXAtPmV4aXRfc2lnbmFsID0gLTE7CisJCX0KKwkJaWYgKHRhc2tfZGV0YWNoZWQocCkpIHsKKwkJCS8qIE1hcmsgaXQgYXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVhcGVkLiAqLworCQkJcC0+ZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOwogfQogCiBpbnQgcHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgZGF0YSkKIHsKKwlib29sIGRlYWQgPSBmYWxzZTsKKwogCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjU1LDE0ICsyOTksNDUgQEAKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAogCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKLQkvKiBwcm90ZWN0IGFnYWluc3QgZGVfdGhyZWFkKCktPnJlbGVhc2VfdGFzaygpICovCi0JaWYgKGNoaWxkLT5wdHJhY2UpCi0JCV9fcHRyYWNlX2RldGFjaChjaGlsZCwgZGF0YSk7CisJLyoKKwkgKiBUaGlzIGNoaWxkIGNhbiBiZSBhbHJlYWR5IGtpbGxlZC4gTWFrZSBzdXJlIGRlX3RocmVhZCgpIG9yCisJICogb3VyIHN1Yi10aHJlYWQgZG9pbmcgZG9fd2FpdCgpIGRpZG4ndCBkbyByZWxlYXNlX3Rhc2soKSB5ZXQuCisJICovCisJaWYgKGNoaWxkLT5wdHJhY2UpIHsKKwkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CisJCWRlYWQgPSBfX3B0cmFjZV9kZXRhY2goY3VycmVudCwgY2hpbGQpOworCX0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAorCWlmICh1bmxpa2VseShkZWFkKSkKKwkJcmVsZWFzZV90YXNrKGNoaWxkKTsKKwogCXJldHVybiAwOwogfQogCisvKgorICogRGV0YWNoIGFsbCB0YXNrcyB3ZSB3ZXJlIHVzaW5nIHB0cmFjZSBvbi4KKyAqLwordm9pZCBleGl0X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlcikKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOworCUxJU1RfSEVBRChwdHJhY2VfZGVhZCk7CisKKwl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZ0cmFjZXItPnB0cmFjZWQsIHB0cmFjZV9lbnRyeSkgeworCQlpZiAoX19wdHJhY2VfZGV0YWNoKHRyYWNlciwgcCkpCisJCQlsaXN0X2FkZCgmcC0+cHRyYWNlX2VudHJ5LCAmcHRyYWNlX2RlYWQpOworCX0KKwl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKworCUJVR19PTighbGlzdF9lbXB0eSgmdHJhY2VyLT5wdHJhY2VkKSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnB0cmFjZV9kZWFkLCBwdHJhY2VfZW50cnkpIHsKKwkJbGlzdF9kZWxfaW5pdCgmcC0+cHRyYWNlX2VudHJ5KTsKKwkJcmVsZWFzZV90YXNrKHApOworCX0KK30KKwogaW50IHB0cmFjZV9yZWFkZGF0YShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBzcmMsIGNoYXIgX191c2VyICpkc3QsIGludCBsZW4pCiB7CiAJaW50IGNvcGllZCA9IDA7CkBAIC02MTIsOCArNjg3LDYgQEAKIAkJZ290byBvdXRfcHV0X3Rhc2tfc3RydWN0OwogCiAJcmV0ID0gYXJjaF9wdHJhY2UoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9wdXRfdGFza19zdHJ1Y3Q7CiAKICBvdXRfcHV0X3Rhc2tfc3RydWN0OgogCXB1dF90YXNrX3N0cnVjdChjaGlsZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IGNhZThhMDUuLjJjN2I4NDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC0xMjIsNiArMTIyLDggQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcyh2b2lkKTsKKwogLyoKICAqIE9yY2hlc3RyYXRlIHRoZSBzcGVjaWZpZWQgdHlwZSBvZiBSQ1UgYmFycmllciwgd2FpdGluZyBmb3IgYWxsCiAgKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KQEAgLTE0Nyw2ICsxNDksNyBAQAogCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CiAJbXV0ZXhfdW5sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7CisJd2FpdF9taWdyYXRlZF9jYWxsYmFja3MoKTsKIH0KIAogLyoqCkBAIC0xNzYsOSArMTc5LDUwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcl9zY2hlZCk7CiAKK3N0YXRpYyBhdG9taWNfdCByY3VfbWlncmF0ZV90eXBlX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgc3RydWN0IHJjdV9oZWFkIHJjdV9taWdyYXRlX2hlYWRbM107CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmN1X21pZ3JhdGVfd3EpOworCitzdGF0aWMgdm9pZCByY3VfbWlncmF0ZV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKm5vdHVzZWQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9taWdyYXRlX3R5cGVfY291bnQpKQorCQl3YWtlX3VwKCZyY3VfbWlncmF0ZV93cSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcyh2b2lkKQoreworCXdhaXRfZXZlbnQocmN1X21pZ3JhdGVfd3EsICFhdG9taWNfcmVhZCgmcmN1X21pZ3JhdGVfdHlwZV9jb3VudCkpOworfQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCByY3VfYmFycmllcl9jcHVfaG90cGx1ZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWlmIChhY3Rpb24gPT0gQ1BVX0RZSU5HKSB7CisJCS8qCisJCSAqIHByZWVtcHRfZGlzYWJsZSgpIGluIG9uX2VhY2hfY3B1KCkgcHJldmVudHMgc3RvcF9tYWNoaW5lKCksCisJCSAqIHNvIHdoZW4gIm9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7IgorCQkgKiByZXR1cm5zLCBhbGwgb25saW5lIGNwdXMgaGF2ZSBxdWV1ZWQgcmN1X2JhcnJpZXJfZnVuYygpLAorCQkgKiBhbmQgdGhlIGRlYWQgY3B1KGlmIGl0IGV4aXN0KSBxdWV1ZXMgcmN1X21pZ3JhdGVfY2FsbGJhY2soKXMuCisJCSAqCisJCSAqIFRoZXNlIGNhbGxiYWNrcyBlbnN1cmUgX3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIGFsbAorCQkgKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KKwkJICovCisJCWF0b21pY19zZXQoJnJjdV9taWdyYXRlX3R5cGVfY291bnQsIDMpOworCQljYWxsX3JjdV9iaChyY3VfbWlncmF0ZV9oZWFkLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7CisJCWNhbGxfcmN1X3NjaGVkKHJjdV9taWdyYXRlX2hlYWQgKyAxLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7CisJCWNhbGxfcmN1KHJjdV9taWdyYXRlX2hlYWQgKyAyLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7CisJfSBlbHNlIGlmIChhY3Rpb24gPT0gQ1BVX1BPU1RfREVBRCkgeworCQkvKiByY3VfbWlncmF0ZV9oZWFkIGlzIHByb3RlY3RlZCBieSBjcHVfYWRkX3JlbW92ZV9sb2NrICovCisJCXdhaXRfbWlncmF0ZWRfY2FsbGJhY2tzKCk7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKwogdm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKIHsKIAlfX3JjdV9pbml0KCk7CisJaG90Y3B1X25vdGlmaWVyKHJjdV9iYXJyaWVyX2NwdV9ob3RwbHVnLCAwKTsKIH0KIAogdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVsYXkuYyBiL2tlcm5lbC9yZWxheS5jCmluZGV4IDhmMjE3OWMuLmJjMTg4NTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZWxheS5jCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC02NzcsOSArNjc3LDcgQEAKIAkgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJaWYgKHVubGlrZWx5KCFjaGFuLT5idWZbaV0pKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInJlbGF5X2xhdGVfc2V0dXBfZmlsZXM6IENQVSAldSAiCi0JCQkJCSJoYXMgbm8gYnVmZmVyLCBpdCBtdXN0IGhhdmUhXG4iLCBpKTsKLQkJCUJVRygpOworCQkJV0FSTl9PTkNFKDEsIEtFUk5fRVJSICJDUFUgaGFzIG5vIGJ1ZmZlciFcbiIpOwogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CkBAIC03OTcsMTMgKzc5NSwxNSBAQAogCWlmICghY2hhbikKIAkJcmV0dXJuOwogCi0JaWYgKGNwdSA+PSBOUl9DUFVTIHx8ICFjaGFuLT5idWZbY3B1XSkKKwlpZiAoY3B1ID49IE5SX0NQVVMgfHwgIWNoYW4tPmJ1ZltjcHVdIHx8CisJCQkJCXN1YmJ1ZnNfY29uc3VtZWQgPiBjaGFuLT5uX3N1YmJ1ZnMpCiAJCXJldHVybjsKIAogCWJ1ZiA9IGNoYW4tPmJ1ZltjcHVdOwotCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCArPSBzdWJidWZzX2NvbnN1bWVkOwotCWlmIChidWYtPnN1YmJ1ZnNfY29uc3VtZWQgPiBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQpCisJaWYgKHN1YmJ1ZnNfY29uc3VtZWQgPiBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQgLSBidWYtPnN1YmJ1ZnNfY29uc3VtZWQpCiAJCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCA9IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZDsKKwllbHNlCisJCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCArPSBzdWJidWZzX2NvbnN1bWVkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVsYXlfc3ViYnVmc19jb25zdW1lZCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggNzM1MTNmNC4uYmVjMjQ5OCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTExMTAsNyArMTExMCw3IEBACiAJaWYgKHJxID09IHRoaXNfcnEoKSkgewogCQlocnRpbWVyX3Jlc3RhcnQodGltZXIpOwogCX0gZWxzZSBpZiAoIXJxLT5ocnRpY2tfY3NkX3BlbmRpbmcpIHsKLQkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1X29mKHJxKSwgJnJxLT5ocnRpY2tfY3NkKTsKKwkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1X29mKHJxKSwgJnJxLT5ocnRpY2tfY3NkLCAwKTsKIAkJcnEtPmhydGlja19jc2RfcGVuZGluZyA9IDE7CiAJfQogfQpAQCAtMzgxOCwxOSArMzgxOCwyMyBAQAogICovCiAjZGVmaW5lIE1BWF9QSU5ORURfSU5URVJWQUwJNTEyCiAKKy8qIFdvcmtpbmcgY3B1bWFzayBmb3IgbG9hZF9iYWxhbmNlIGFuZCBsb2FkX2JhbGFuY2VfbmV3aWRsZS4gKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBsb2FkX2JhbGFuY2VfdG1wbWFzayk7CisKIC8qCiAgKiBDaGVjayB0aGlzX2NwdSB0byBlbnN1cmUgaXQgaXMgYmFsYW5jZWQgd2l0aGluIGRvbWFpbi4gQXR0ZW1wdCB0byBtb3ZlCiAgKiB0YXNrcyBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuCiAgKi8KIHN0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAogCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkJaW50ICpiYWxhbmNlLCBzdHJ1Y3QgY3B1bWFzayAqY3B1cykKKwkJCWludCAqYmFsYW5jZSkKIHsKIAlpbnQgbGRfbW92ZWQsIGFsbF9waW5uZWQgPSAwLCBhY3RpdmVfYmFsYW5jZSA9IDAsIHNkX2lkbGUgPSAwOwogCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7CiAJdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7CiAJc3RydWN0IHJxICpidXNpZXN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNwdW1hc2sgKmNwdXMgPSBfX2dldF9jcHVfdmFyKGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKIAogCWNwdW1hc2tfc2V0YWxsKGNwdXMpOwogCkBAIC0zOTg1LDggKzM5ODksNyBAQAogICogdGhpc19ycSBpcyBsb2NrZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWxvYWRfYmFsYW5jZV9uZXdpZGxlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJCXN0cnVjdCBjcHVtYXNrICpjcHVzKQorbG9hZF9iYWxhbmNlX25ld2lkbGUoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQogewogCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7CiAJc3RydWN0IHJxICpidXNpZXN0ID0gTlVMTDsKQEAgLTM5OTQsNiArMzk5Nyw3IEBACiAJaW50IGxkX21vdmVkID0gMDsKIAlpbnQgc2RfaWRsZSA9IDA7CiAJaW50IGFsbF9waW5uZWQgPSAwOworCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7CiAKIAljcHVtYXNrX3NldGFsbChjcHVzKTsKIApAQCAtNDEzNCwxMCArNDEzOCw2IEBACiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAJaW50IHB1bGxlZF90YXNrID0gMDsKIAl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyBIWjsKLQljcHVtYXNrX3Zhcl90IHRtcG1hc2s7Ci0KLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0bXBtYXNrLCBHRlBfQVRPTUlDKSkKLQkJcmV0dXJuOwogCiAJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgewogCQl1bnNpZ25lZCBsb25nIGludGVydmFsOwpAQCAtNDE0OCw3ICs0MTQ4LDcgQEAKIAkJaWYgKHNkLT5mbGFncyAmIFNEX0JBTEFOQ0VfTkVXSURMRSkKIAkJCS8qIElmIHdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHN0b3Agc2VhcmNoaW5nOiAqLwogCQkJcHVsbGVkX3Rhc2sgPSBsb2FkX2JhbGFuY2VfbmV3aWRsZSh0aGlzX2NwdSwgdGhpc19ycSwKLQkJCQkJCQkgICBzZCwgdG1wbWFzayk7CisJCQkJCQkJICAgc2QpOwogCiAJCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhzZC0+YmFsYW5jZV9pbnRlcnZhbCk7CiAJCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkKQEAgLTQxNjMsNyArNDE2Myw2IEBACiAJCSAqLwogCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7CiAJfQotCWZyZWVfY3B1bWFza192YXIodG1wbWFzayk7CiB9CiAKIC8qCkBAIC00MzEzLDExICs0MzEyLDYgQEAKIAl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyA2MCpIWjsKIAlpbnQgdXBkYXRlX25leHRfYmFsYW5jZSA9IDA7CiAJaW50IG5lZWRfc2VyaWFsaXplOwotCWNwdW1hc2tfdmFyX3QgdG1wOwotCi0JLyogRmFpbHMgYWxsb2M/ICBSZWJhbGFuY2luZyBwcm9iYWJseSBub3QgYSBwcmlvcml0eSByaWdodCBub3cuICovCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdG1wLCBHRlBfQVRPTUlDKSkKLQkJcmV0dXJuOwogCiAJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKIAkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKQEAgLTQzNDIsNyArNDMzNiw3IEBACiAJCX0KIAogCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7Ci0JCQlpZiAobG9hZF9iYWxhbmNlKGNwdSwgcnEsIHNkLCBpZGxlLCAmYmFsYW5jZSwgdG1wKSkgeworCQkJaWYgKGxvYWRfYmFsYW5jZShjcHUsIHJxLCBzZCwgaWRsZSwgJmJhbGFuY2UpKSB7CiAJCQkJLyoKIAkJCQkgKiBXZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzbyBlaXRoZXIgd2UncmUgbm8KIAkJCQkgKiBsb25nZXIgaWRsZSwgb3Igb25lIG9mIG91ciBTTVQgc2libGluZ3MgaXMKQEAgLTQzNzYsOCArNDM3MCw2IEBACiAJICovCiAJaWYgKGxpa2VseSh1cGRhdGVfbmV4dF9iYWxhbmNlKSkKIAkJcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKLQotCWZyZWVfY3B1bWFza192YXIodG1wKTsKIH0KIAogLyoKQEAgLTQ3ODEsMTAgKzQ3NzMsNyBAQAogI2VuZGlmCiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiAoZGVmaW5lZChDT05GSUdfREVCVUdfUFJFRU1QVCkgfHwgXAotCQkJCWRlZmluZWQoQ09ORklHX1BSRUVNUFRfVFJBQ0VSKSkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9wYXJlbnRfaXAodW5zaWduZWQgbG9uZyBhZGRyKQordW5zaWduZWQgbG9uZyBnZXRfcGFyZW50X2lwKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoaW5fbG9ja19mdW5jdGlvbnMoYWRkcikpIHsKIAkJYWRkciA9IENBTExFUl9BRERSMjsKQEAgLTQ3OTQsNiArNDc4Myw5IEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiAoZGVmaW5lZChDT05GSUdfREVCVUdfUFJFRU1QVCkgfHwgXAorCQkJCWRlZmluZWQoQ09ORklHX1BSRUVNUFRfVFJBQ0VSKSkKKwogdm9pZCBfX2twcm9iZXMgYWRkX3ByZWVtcHRfY291bnQoaW50IHZhbCkKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfUFJFRU1QVApAQCAtNzcyOCw3ICs3NzIwLDcgQEAKIHsKIAlpbnQgZ3JvdXA7CiAKLQljcHVtYXNrX2FuZChtYXNrLCAmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSksIGNwdV9tYXApOworCWNwdW1hc2tfYW5kKG1hc2ssIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSksIGNwdV9tYXApOwogCWdyb3VwID0gY3B1bWFza19maXJzdChtYXNrKTsKIAlpZiAoc2cpCiAJCSpzZyA9ICZwZXJfY3B1KHNjaGVkX2dyb3VwX2NvcmUsIGdyb3VwKS5zZzsKQEAgLTc3NTcsNyArNzc0OSw3IEBACiAJY3B1bWFza19hbmQobWFzaywgY3B1X2NvcmVncm91cF9tYXNrKGNwdSksIGNwdV9tYXApOwogCWdyb3VwID0gY3B1bWFza19maXJzdChtYXNrKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQljcHVtYXNrX2FuZChtYXNrLCAmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSksIGNwdV9tYXApOworCWNwdW1hc2tfYW5kKG1hc2ssIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSksIGNwdV9tYXApOwogCWdyb3VwID0gY3B1bWFza19maXJzdChtYXNrKTsKICNlbHNlCiAJZ3JvdXAgPSBjcHU7CkBAIC04MTAwLDcgKzgwOTIsNyBAQAogCQlTRF9JTklUKHNkLCBTSUJMSU5HKTsKIAkJc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOwogCQljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksCi0JCQkgICAgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSwgY3B1X21hcCk7CisJCQkgICAgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soaSksIGNwdV9tYXApOwogCQlzZC0+cGFyZW50ID0gcDsKIAkJcC0+Y2hpbGQgPSBzZDsKIAkJY3B1X3RvX2NwdV9ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgdG1wbWFzayk7CkBAIC04MTExLDcgKzgxMDMsNyBAQAogCS8qIFNldCB1cCBDUFUgKHNpYmxpbmcpIGdyb3VwcyAqLwogCWZvcl9lYWNoX2NwdShpLCBjcHVfbWFwKSB7CiAJCWNwdW1hc2tfYW5kKHRoaXNfc2libGluZ19tYXAsCi0JCQkgICAgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSwgY3B1X21hcCk7CisJCQkgICAgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soaSksIGNwdV9tYXApOwogCQlpZiAoaSAhPSBjcHVtYXNrX2ZpcnN0KHRoaXNfc2libGluZ19tYXApKQogCQkJY29udGludWU7CiAKQEAgLTg3ODcsNiArODc3OSw5IEBACiAjaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKIAlhbGxvY19zaXplICo9IDI7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSworCWFsbG9jX3NpemUgKz0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGNwdW1hc2tfc2l6ZSgpOworI2VuZGlmCiAJLyoKIAkgKiBBcyBzY2hlZF9pbml0KCkgaXMgY2FsbGVkIGJlZm9yZSBwYWdlX2FsbG9jIGlzIHNldHVwLAogCSAqIHdlIHVzZSBhbGxvY19ib290bWVtKCkuCkBAIC04ODI0LDYgKzg4MTksMTIgQEAKIAkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CiAjZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKyNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQkJcGVyX2NwdShsb2FkX2JhbGFuY2VfdG1wbWFzaywgaSkgPSAodm9pZCAqKXB0cjsKKwkJCXB0ciArPSBjcHVtYXNrX3NpemUoKTsKKwkJfQorI2VuZGlmIC8qIENPTkZJR19DUFVNQVNLX09GRlNUQUNLICovCiAJfQogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2Nsb2NrLmMgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwppbmRleCAzOTBmMzMyLi44MTlmMTdhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY2xvY2suYworKysgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwpAQCAtMjUsNiArMjUsNyBAQAogICogY29uc2lzdGVudCBiZXR3ZWVuIGNwdXMgKG5ldmVyIG1vcmUgdGhhbiAyIGppZmZpZXMgZGlmZmVyZW5jZSkuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgpAQCAtMTU0LDYgKzE1NSwxNyBAQAogCQlyZXR1cm4gc2NoZWRfY2xvY2soKTsKIAogCXNjZCA9IGNwdV9zZGMoY3B1KTsKKworCS8qCisJICogTm9ybWFsbHkgdGhpcyBpcyBub3QgY2FsbGVkIGluIE5NSSBjb250ZXh0IC0gYnV0IGlmIGl0IGlzLAorCSAqIHRyeWluZyB0byBkbyBhbnkgbG9ja2luZyBoZXJlIGlzIHRvdGFsbHkgbGV0aGFsLgorCSAqLworCWlmICh1bmxpa2VseShpbl9ubWkoKSkpCisJCXJldHVybiBzY2QtPmNsb2NrOworCisJaWYgKHVubGlrZWx5KCFzY2hlZF9jbG9ja19ydW5uaW5nKSkKKwkJcmV0dXJuIDB1bGw7CisKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJbm93ID0gc2NoZWRfY2xvY2soKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDFjODgxNDQuLmQ4MDM0NzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTU1LDEwICs1NSwyMiBAQAogCQkoaGFuZGxlciA9PSBTSUdfREZMICYmIHNpZ19rZXJuZWxfaWdub3JlKHNpZykpOwogfQogCi1zdGF0aWMgaW50IHNpZ19pZ25vcmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IHNpZykKK3N0YXRpYyBpbnQgc2lnX3Rhc2tfaWdub3JlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBzaWcsCisJCWludCBmcm9tX2FuY2VzdG9yX25zKQogewogCXZvaWQgX191c2VyICpoYW5kbGVyOwogCisJaGFuZGxlciA9IHNpZ19oYW5kbGVyKHQsIHNpZyk7CisKKwlpZiAodW5saWtlbHkodC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9VTktJTExBQkxFKSAmJgorCQkJaGFuZGxlciA9PSBTSUdfREZMICYmICFmcm9tX2FuY2VzdG9yX25zKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBzaWdfaGFuZGxlcl9pZ25vcmVkKGhhbmRsZXIsIHNpZyk7Cit9CisKK3N0YXRpYyBpbnQgc2lnX2lnbm9yZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgc2lnLCBpbnQgZnJvbV9hbmNlc3Rvcl9ucykKK3sKIAkvKgogCSAqIEJsb2NrZWQgc2lnbmFscyBhcmUgbmV2ZXIgaWdub3JlZCwgc2luY2UgdGhlCiAJICogc2lnbmFsIGhhbmRsZXIgbWF5IGNoYW5nZSBieSB0aGUgdGltZSBpdCBpcwpAQCAtNjcsMTQgKzc5LDEzIEBACiAJaWYgKHNpZ2lzbWVtYmVyKCZ0LT5ibG9ja2VkLCBzaWcpIHx8IHNpZ2lzbWVtYmVyKCZ0LT5yZWFsX2Jsb2NrZWQsIHNpZykpCiAJCXJldHVybiAwOwogCi0JaGFuZGxlciA9IHNpZ19oYW5kbGVyKHQsIHNpZyk7Ci0JaWYgKCFzaWdfaGFuZGxlcl9pZ25vcmVkKGhhbmRsZXIsIHNpZykpCisJaWYgKCFzaWdfdGFza19pZ25vcmVkKHQsIHNpZywgZnJvbV9hbmNlc3Rvcl9ucykpCiAJCXJldHVybiAwOwogCiAJLyoKIAkgKiBUcmFjZXJzIG1heSB3YW50IHRvIGtub3cgYWJvdXQgZXZlbiBpZ25vcmVkIHNpZ25hbHMuCiAJICovCi0JcmV0dXJuICF0cmFjZWhvb2tfY29uc2lkZXJfaWdub3JlZF9zaWduYWwodCwgc2lnLCBoYW5kbGVyKTsKKwlyZXR1cm4gIXRyYWNlaG9va19jb25zaWRlcl9pZ25vcmVkX3NpZ25hbCh0LCBzaWcpOwogfQogCiAvKgpAQCAtMzE4LDcgKzMyOSw3IEBACiAJCXJldHVybiAxOwogCWlmIChoYW5kbGVyICE9IFNJR19JR04gJiYgaGFuZGxlciAhPSBTSUdfREZMKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gIXRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwodHNrLCBzaWcsIGhhbmRsZXIpOworCXJldHVybiAhdHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbCh0c2ssIHNpZyk7CiB9CiAKIApAQCAtNjI0LDcgKzYzNSw3IEBACiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNpZ25hbCBzaG91bGQgYmUgYWN0dWFsbHkgZGVsaXZlcmVkLCBvdGhlcndpc2UKICAqIGl0IHNob3VsZCBiZSBkcm9wcGVkLgogICovCi1zdGF0aWMgaW50IHByZXBhcmVfc2lnbmFsKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3N0YXRpYyBpbnQgcHJlcGFyZV9zaWduYWwoaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZnJvbV9hbmNlc3Rvcl9ucykKIHsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnbmFsID0gcC0+c2lnbmFsOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKQEAgLTcwOCw3ICs3MTksNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuICFzaWdfaWdub3JlZChwLCBzaWcpOworCXJldHVybiAhc2lnX2lnbm9yZWQocCwgc2lnLCBmcm9tX2FuY2VzdG9yX25zKTsKIH0KIAogLyoKQEAgLTc3Nyw3ICs3ODgsNyBAQAogCSAgICAhKHNpZ25hbC0+ZmxhZ3MgJiAoU0lHTkFMX1VOS0lMTEFCTEUgfCBTSUdOQUxfR1JPVVBfRVhJVCkpICYmCiAJICAgICFzaWdpc21lbWJlcigmdC0+cmVhbF9ibG9ja2VkLCBzaWcpICYmCiAJICAgIChzaWcgPT0gU0lHS0lMTCB8fAotCSAgICAgIXRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwodCwgc2lnLCBTSUdfREZMKSkpIHsKKwkgICAgICF0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKHQsIHNpZykpKSB7CiAJCS8qCiAJCSAqIFRoaXMgc2lnbmFsIHdpbGwgYmUgZmF0YWwgdG8gdGhlIHdob2xlIGdyb3VwLgogCQkgKi8KQEAgLTgxMyw4ICs4MjQsOCBAQAogCXJldHVybiAoc2lnIDwgU0lHUlRNSU4pICYmIHNpZ2lzbWVtYmVyKCZzaWduYWxzLT5zaWduYWwsIHNpZyk7CiB9CiAKLXN0YXRpYyBpbnQgc2VuZF9zaWduYWwoaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKLQkJCWludCBncm91cCkKK3N0YXRpYyBpbnQgX19zZW5kX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0LAorCQkJaW50IGdyb3VwLCBpbnQgZnJvbV9hbmNlc3Rvcl9ucykKIHsKIAlzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZzsKIAlzdHJ1Y3Qgc2lncXVldWUgKnE7CkBAIC04MjIsNyArODMzLDggQEAKIAl0cmFjZV9zY2hlZF9zaWduYWxfc2VuZChzaWcsIHQpOwogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlpZiAoIXByZXBhcmVfc2lnbmFsKHNpZywgdCkpCisKKwlpZiAoIXByZXBhcmVfc2lnbmFsKHNpZywgdCwgZnJvbV9hbmNlc3Rvcl9ucykpCiAJCXJldHVybiAwOwogCiAJcGVuZGluZyA9IGdyb3VwID8gJnQtPnNpZ25hbC0+c2hhcmVkX3BlbmRpbmcgOiAmdC0+cGVuZGluZzsKQEAgLTg3MSw2ICs4ODMsOCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQljb3B5X3NpZ2luZm8oJnEtPmluZm8sIGluZm8pOworCQkJaWYgKGZyb21fYW5jZXN0b3JfbnMpCisJCQkJcS0+aW5mby5zaV9waWQgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgaWYgKCFpc19zaV9zcGVjaWFsKGluZm8pKSB7CkBAIC04ODksNiArOTAzLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2VuZF9zaWduYWwoaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKKwkJCWludCBncm91cCkKK3sKKwlpbnQgZnJvbV9hbmNlc3Rvcl9ucyA9IDA7CisKKyNpZmRlZiBDT05GSUdfUElEX05TCisJaWYgKCFpc19zaV9zcGVjaWFsKGluZm8pICYmIFNJX0ZST01VU0VSKGluZm8pICYmCisJCQl0YXNrX3BpZF9ucl9ucyhjdXJyZW50LCB0YXNrX2FjdGl2ZV9waWRfbnModCkpIDw9IDApCisJCWZyb21fYW5jZXN0b3JfbnMgPSAxOworI2VuZGlmCisKKwlyZXR1cm4gX19zZW5kX3NpZ25hbChzaWcsIGluZm8sIHQsIGdyb3VwLCBmcm9tX2FuY2VzdG9yX25zKTsKK30KKwogaW50IHByaW50X2ZhdGFsX3NpZ25hbHM7CiAKIHN0YXRpYyB2b2lkIHByaW50X2ZhdGFsX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpZ25yKQpAQCAtMTEzMyw3ICsxMTYxLDcgQEAKIAlpZiAoc2lnICYmIHAtPnNpZ2hhbmQpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJcmV0ID0gX19ncm91cF9zZW5kX3NpZ19pbmZvKHNpZywgaW5mbywgcCk7CisJCXJldCA9IF9fc2VuZF9zaWduYWwoc2lnLCBpbmZvLCBwLCAxLCAwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogCX0KIG91dF91bmxvY2s6CkBAIC0xMzIwLDcgKzEzNDgsNyBAQAogCQlnb3RvIHJldDsKIAogCXJldCA9IDE7IC8qIHRoZSBzaWduYWwgaXMgaWdub3JlZCAqLwotCWlmICghcHJlcGFyZV9zaWduYWwoc2lnLCB0KSkKKwlpZiAoIXByZXBhcmVfc2lnbmFsKHNpZywgdCwgMCkpCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gMDsKQEAgLTE4NDQsOSArMTg3MiwxNiBAQAogCiAJCS8qCiAJCSAqIEdsb2JhbCBpbml0IGdldHMgbm8gc2lnbmFscyBpdCBkb2Vzbid0IHdhbnQuCisJCSAqIENvbnRhaW5lci1pbml0IGdldHMgbm8gc2lnbmFscyBpdCBkb2Vzbid0IHdhbnQgZnJvbSBzYW1lCisJCSAqIGNvbnRhaW5lci4KKwkJICoKKwkJICogTm90ZSB0aGF0IGlmIGdsb2JhbC9jb250YWluZXItaW5pdCBzZWVzIGEgc2lnX2tlcm5lbF9vbmx5KCkKKwkJICogc2lnbmFsIGhlcmUsIHRoZSBzaWduYWwgbXVzdCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGludGVybmFsbHkKKwkJICogb3IgbXVzdCBoYXZlIGNvbWUgZnJvbSBhbiBhbmNlc3RvciBuYW1lc3BhY2UuIEluIGVpdGhlcgorCQkgKiBjYXNlLCB0aGUgc2lnbmFsIGNhbm5vdCBiZSBkcm9wcGVkLgogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfVU5LSUxMQUJMRSkgJiYKLQkJICAgICFzaWduYWxfZ3JvdXBfZXhpdChzaWduYWwpKQorCQkJCSFzaWdfa2VybmVsX29ubHkoc2lnbnIpKQogCQkJY29udGludWU7CiAKIAkJaWYgKHNpZ19rZXJuZWxfc3RvcChzaWducikpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbG93LXdvcmsuYyBiL2tlcm5lbC9zbG93LXdvcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjJiYzAxCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3Nsb3ctd29yay5jCkBAIC0wLDAgKzEsNjQwIEBACisvKiBXb3JrZXIgdGhyZWFkIHBvb2wgZm9yIHNsb3cgaXRlbXMsIHN1Y2ggYXMgZmlsZXN5c3RlbSBsb29rdXBzIG9yIG1rZGlycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjZGVmaW5lIFNMT1dfV09SS19DVUxMX1RJTUVPVVQgKDUgKiBIWikJLyogY3VsbCB0aHJlYWRzIDVzIGFmdGVyIHJ1bm5pbmcgb3V0IG9mCisJCQkJCSAqIHRoaW5ncyB0byBkbyAqLworI2RlZmluZSBTTE9XX1dPUktfT09NX1RJTUVPVVQgKDUgKiBIWikJLyogY2FuJ3Qgc3RhcnQgbmV3IHRocmVhZHMgZm9yIDVzIGFmdGVyCisJCQkJCSAqIE9PTSAqLworCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfY3VsbF90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQgc2xvd193b3JrX29vbV90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIGludCBzbG93X3dvcmtfbWluX3RocmVhZHNfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAorCQkJCQl2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOworCitzdGF0aWMgaW50IHNsb3dfd29ya19tYXhfdGhyZWFkc19zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQgLCBzdHJ1Y3QgZmlsZSAqLAorCQkJCQl2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOworI2VuZGlmCisKKy8qCisgKiBUaGUgcG9vbCBvZiB0aHJlYWRzIGhhcyBhdCBsZWFzdCBtaW4gdGhyZWFkcyBpbiBpdCBhcyBsb25nIGFzIHNvbWVvbmUgaXMKKyAqIHVzaW5nIHRoZSBmYWNpbGl0eSwgYW5kIG1heSBoYXZlIGFzIG1hbnkgYXMgbWF4LgorICoKKyAqIEEgcG9ydGlvbiBvZiB0aGUgcG9vbCBtYXkgYmUgcHJvY2Vzc2luZyB2ZXJ5IHNsb3cgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIHVuc2lnbmVkIHNsb3dfd29ya19taW5fdGhyZWFkcyA9IDI7CitzdGF0aWMgdW5zaWduZWQgc2xvd193b3JrX21heF90aHJlYWRzID0gNDsKK3N0YXRpYyB1bnNpZ25lZCB2c2xvd193b3JrX3Byb3BvcnRpb24gPSA1MDsgLyogJSBvZiB0aHJlYWRzIHRoYXQgbWF5IHByb2Nlc3MKKwkJCQkJICAgICAqIHZlcnkgc2xvdyB3b3JrICovCisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdGF0aWMgY29uc3QgaW50IHNsb3dfd29ya19taW5fbWluX3RocmVhZHMgPSAyOworc3RhdGljIGludCBzbG93X3dvcmtfbWF4X21heF90aHJlYWRzID0gMjU1Oworc3RhdGljIGNvbnN0IGludCBzbG93X3dvcmtfbWluX3ZzbG93ID0gMTsKK3N0YXRpYyBjb25zdCBpbnQgc2xvd193b3JrX21heF92c2xvdyA9IDk5OworCitjdGxfdGFibGUgc2xvd193b3JrX3N5c2N0bHNbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAibWluLXRocmVhZHMiLAorCQkuZGF0YQkJPSAmc2xvd193b3JrX21pbl90aHJlYWRzLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBzbG93X3dvcmtfbWluX3RocmVhZHNfc3lzY3RsLAorCQkuZXh0cmExCQk9ICh2b2lkICopICZzbG93X3dvcmtfbWluX21pbl90aHJlYWRzLAorCQkuZXh0cmEyCQk9ICZzbG93X3dvcmtfbWF4X3RocmVhZHMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAibWF4LXRocmVhZHMiLAorCQkuZGF0YQkJPSAmc2xvd193b3JrX21heF90aHJlYWRzLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBzbG93X3dvcmtfbWF4X3RocmVhZHNfc3lzY3RsLAorCQkuZXh0cmExCQk9ICZzbG93X3dvcmtfbWluX3RocmVhZHMsCisJCS5leHRyYTIJCT0gKHZvaWQgKikgJnNsb3dfd29ya19tYXhfbWF4X3RocmVhZHMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAidnNsb3ctcGVyY2VudGFnZSIsCisJCS5kYXRhCQk9ICZ2c2xvd193b3JrX3Byb3BvcnRpb24sCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAodm9pZCAqKSAmc2xvd193b3JrX21pbl92c2xvdywKKwkJLmV4dHJhMgkJPSAodm9pZCAqKSAmc2xvd193b3JrX21heF92c2xvdywKKwl9LAorCXsgLmN0bF9uYW1lID0gMCB9Cit9OworI2VuZGlmCisKKy8qCisgKiBUaGUgYWN0aXZlIHN0YXRlIG9mIHRoZSB0aHJlYWQgcG9vbAorICovCitzdGF0aWMgYXRvbWljX3Qgc2xvd193b3JrX3RocmVhZF9jb3VudDsKK3N0YXRpYyBhdG9taWNfdCB2c2xvd193b3JrX2V4ZWN1dGluZ19jb3VudDsKKworc3RhdGljIGJvb2wgc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZDsKK3N0YXRpYyBib29sIHNsb3dfd29ya19jdWxsOyAvKiBjdWxsIGEgdGhyZWFkIGR1ZSB0byBsYWNrIG9mIGFjdGl2aXR5ICovCitzdGF0aWMgREVGSU5FX1RJTUVSKHNsb3dfd29ya19jdWxsX3RpbWVyLCBzbG93X3dvcmtfY3VsbF90aW1lb3V0LCAwLCAwKTsKK3N0YXRpYyBERUZJTkVfVElNRVIoc2xvd193b3JrX29vbV90aW1lciwgc2xvd193b3JrX29vbV90aW1lb3V0LCAwLCAwKTsKK3N0YXRpYyBzdHJ1Y3Qgc2xvd193b3JrIHNsb3dfd29ya19uZXdfdGhyZWFkOyAvKiBuZXcgdGhyZWFkIHN0YXJ0ZXIgKi8KKworLyoKKyAqIFRoZSBxdWV1ZXMgb2Ygd29yayBpdGVtcyBhbmQgdGhlIGxvY2sgZ292ZXJuaW5nIGFjY2VzcyB0byB0aGVtLiAgVGhlc2UgYXJlCisgKiBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlIENQVXMuICBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBwZXItQ1BVIHF1ZXVlcworICogYXMgdGhlIG51bWJlciBvZiB0aHJlYWRzIGJlYXJzIG5vIHJlbGF0aW9uIHRvIHRoZSBudW1iZXIgb2YgQ1BVcy4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIHF1ZXVlcyBvZiB3b3JrIGl0ZW1zOiBvbmUgZm9yIHNsb3cgd29yayBpdGVtcywgYW5kIG9uZSBmb3IKKyAqIHZlcnkgc2xvdyB3b3JrIGl0ZW1zLgorICovCitzdGF0aWMgTElTVF9IRUFEKHNsb3dfd29ya19xdWV1ZSk7CitzdGF0aWMgTElTVF9IRUFEKHZzbG93X3dvcmtfcXVldWUpOworc3RhdGljIERFRklORV9TUElOTE9DSyhzbG93X3dvcmtfcXVldWVfbG9jayk7CisKKy8qCisgKiBUaGUgdGhyZWFkIGNvbnRyb2xzLiAgQSB2YXJpYWJsZSB1c2VkIHRvIHNpZ25hbCB0byB0aGUgdGhyZWFkcyB0aGF0IHRoZXkKKyAqIHNob3VsZCBleGl0IHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LCBhIHdhaXRxdWV1ZSB1c2VkIGJ5IHRoZSB0aHJlYWRzIHRvIHdhaXQKKyAqIGZvciBzaWduYWxzLCBhbmQgYSBjb21wbGV0aW9uIHNldCBieSB0aGUgbGFzdCB0aHJlYWQgdG8gZXhpdC4KKyAqLworc3RhdGljIGJvb2wgc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQ7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoc2xvd193b3JrX3RocmVhZF93cSk7CitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKHNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQpOworCisvKgorICogVGhlIG51bWJlciBvZiB1c2VycyBvZiB0aGUgdGhyZWFkIHBvb2wgYW5kIGl0cyBsb2NrLiAgV2hpbHN0IHRoaXMgaXMgemVybyB3ZQorICogaGF2ZSBubyB0aHJlYWRzIGhhbmdpbmcgYXJvdW5kLCBhbmQgd2hlbiB0aGlzIHJlYWNoZXMgemVybywgd2Ugd2FpdCBmb3IgYWxsCisgKiBhY3RpdmUgb3IgcXVldWVkIHdvcmsgaXRlbXMgdG8gY29tcGxldGUgYW5kIGtpbGwgYWxsIHRoZSB0aHJlYWRzIHdlIGRvIGhhdmUuCisgKi8KK3N0YXRpYyBpbnQgc2xvd193b3JrX3VzZXJfY291bnQ7CitzdGF0aWMgREVGSU5FX01VVEVYKHNsb3dfd29ya191c2VyX2xvY2spOworCisvKgorICogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgdGhyZWFkcyBpbiB0aGUgcG9vbCB0aGF0IGFyZQorICogcGVybWl0dGVkIHRvIHByb2Nlc3MgdmVyeSBzbG93IHdvcmsgaXRlbXMuCisgKgorICogVGhlIGFuc3dlciBpcyByb3VuZGVkIHVwIHRvIGF0IGxlYXN0IDEsIGJ1dCBtYXkgbm90IGVxdWFsIG9yIGV4Y2VlZCB0aGUKKyAqIG1heGltdW0gbnVtYmVyIG9mIHRoZSB0aHJlYWRzIGluIHRoZSBwb29sLiAgVGhpcyBtZWFucyB3ZSBhbHdheXMgaGF2ZSBhdAorICogbGVhc3Qgb25lIHRocmVhZCB0aGF0IGNhbiBwcm9jZXNzIHNsb3cgd29yayBpdGVtcywgYW5kIHdlIGFsd2F5cyBoYXZlIGF0CisgKiBsZWFzdCBvbmUgdGhyZWFkIHRoYXQgd29uJ3QgZ2V0IHRpZWQgdXAgZG9pbmcgc28uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBzbG93X3dvcmtfY2FsY192c21heCh2b2lkKQoreworCXVuc2lnbmVkIHZzbWF4OworCisJdnNtYXggPSBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkgKiB2c2xvd193b3JrX3Byb3BvcnRpb247CisJdnNtYXggLz0gMTAwOworCXZzbWF4ID0gbWF4KHZzbWF4LCAxVSk7CisJcmV0dXJuIG1pbih2c21heCwgc2xvd193b3JrX21heF90aHJlYWRzIC0gMSk7Cit9CisKKy8qCisgKiBBdHRlbXB0IHRvIGV4ZWN1dGUgc3R1ZmYgcXVldWVkIG9uIGEgc2xvdyB0aHJlYWQuICBSZXR1cm4gdHJ1ZSBpZiB3ZSBtYW5hZ2VkCisgKiBpdCwgZmFsc2UgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gZG8uCisgKi8KK3N0YXRpYyBib29sIHNsb3dfd29ya19leGVjdXRlKHZvaWQpCit7CisJc3RydWN0IHNsb3dfd29yayAqd29yayA9IE5VTEw7CisJdW5zaWduZWQgdnNtYXg7CisJYm9vbCB2ZXJ5X3Nsb3c7CisKKwl2c21heCA9IHNsb3dfd29ya19jYWxjX3ZzbWF4KCk7CisKKwkvKiBzZWUgaWYgd2UgY2FuIHNjaGVkdWxlIGEgbmV3IHRocmVhZCB0byBiZSBzdGFydGVkIGlmIHdlJ3JlIG5vdAorCSAqIGtlZXBpbmcgdXAgd2l0aCB0aGUgd29yayAqLworCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmc2xvd193b3JrX3RocmVhZF93cSkgJiYKKwkgICAgKCFsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpIHx8ICFsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSkgJiYKKwkgICAgYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpIDwgc2xvd193b3JrX21heF90aHJlYWRzICYmCisJICAgICFzbG93X3dvcmtfbWF5X25vdF9zdGFydF9uZXdfdGhyZWFkKQorCQlzbG93X3dvcmtfZW5xdWV1ZSgmc2xvd193b3JrX25ld190aHJlYWQpOworCisJLyogZmluZCBzb21ldGhpbmcgdG8gZXhlY3V0ZSAqLworCXNwaW5fbG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnZzbG93X3dvcmtfcXVldWUpICYmCisJICAgIGF0b21pY19yZWFkKCZ2c2xvd193b3JrX2V4ZWN1dGluZ19jb3VudCkgPCB2c21heCkgeworCQl3b3JrID0gbGlzdF9lbnRyeSh2c2xvd193b3JrX3F1ZXVlLm5leHQsCisJCQkJICBzdHJ1Y3Qgc2xvd193b3JrLCBsaW5rKTsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpKQorCQkJQlVHKCk7CisJCWxpc3RfZGVsX2luaXQoJndvcmstPmxpbmspOworCQlhdG9taWNfaW5jKCZ2c2xvd193b3JrX2V4ZWN1dGluZ19jb3VudCk7CisJCXZlcnlfc2xvdyA9IHRydWU7CisJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmc2xvd193b3JrX3F1ZXVlKSkgeworCQl3b3JrID0gbGlzdF9lbnRyeShzbG93X3dvcmtfcXVldWUubmV4dCwKKwkJCQkgIHN0cnVjdCBzbG93X3dvcmssIGxpbmspOworCQlpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFNMT1dfV09SS19FWEVDVVRJTkcsICZ3b3JrLT5mbGFncykpCisJCQlCVUcoKTsKKwkJbGlzdF9kZWxfaW5pdCgmd29yay0+bGluayk7CisJCXZlcnlfc2xvdyA9IGZhbHNlOworCX0gZWxzZSB7CisJCXZlcnlfc2xvdyA9IGZhbHNlOyAvKiBhdm9pZCB0aGUgY29tcGlsZXIgd2FybmluZyAqLworCX0KKwlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKworCWlmICghd29yaykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoU0xPV19XT1JLX1BFTkRJTkcsICZ3b3JrLT5mbGFncykpCisJCUJVRygpOworCisJd29yay0+b3BzLT5leGVjdXRlKHdvcmspOworCisJaWYgKHZlcnlfc2xvdykKKwkJYXRvbWljX2RlYygmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpOworCWNsZWFyX2JpdF91bmxvY2soU0xPV19XT1JLX0VYRUNVVElORywgJndvcmstPmZsYWdzKTsKKworCS8qIGlmIHNvbWVvbmUgdHJpZWQgdG8gZW5xdWV1ZSB0aGUgaXRlbSB3aGlsc3Qgd2Ugd2VyZSBleGVjdXRpbmcgaXQsCisJICogdGhlbiBpdCdsbCBiZSBsZWZ0IHVuZW5xdWV1ZWQgdG8gYXZvaWQgbXVsdGlwbGUgdGhyZWFkcyB0cnlpbmcgdG8KKwkgKiBleGVjdXRlIGl0IHNpbXVsdGFuZW91c2x5CisJICoKKwkgKiB0aGVyZSBpcywgaG93ZXZlciwgYSByYWNlIGJldHdlZW4gdXMgdGVzdGluZyB0aGUgcGVuZGluZyBmbGFnIGFuZAorCSAqIGdldHRpbmcgdGhlIHNwaW5sb2NrLCBhbmQgYmV0d2VlbiB0aGUgZW5xdWV1ZXIgc2V0dGluZyB0aGUgcGVuZGluZworCSAqIGZsYWcgYW5kIGdldHRpbmcgdGhlIHNwaW5sb2NrLCBzbyB3ZSB1c2UgYSBkZWZlcnJhbCBiaXQgdG8gdGVsbCB1cworCSAqIGlmIHRoZSBlbnF1ZXVlciBnb3QgdGhlcmUgZmlyc3QKKwkgKi8KKwlpZiAodGVzdF9iaXQoU0xPV19XT1JLX1BFTkRJTkcsICZ3b3JrLT5mbGFncykpIHsKKwkJc3Bpbl9sb2NrX2lycSgmc2xvd193b3JrX3F1ZXVlX2xvY2spOworCisJCWlmICghdGVzdF9iaXQoU0xPV19XT1JLX0VYRUNVVElORywgJndvcmstPmZsYWdzKSAmJgorCQkgICAgdGVzdF9hbmRfY2xlYXJfYml0KFNMT1dfV09SS19FTlFfREVGRVJSRUQsICZ3b3JrLT5mbGFncykpCisJCQlnb3RvIGF1dG9fcmVxdWV1ZTsKKworCQlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKwl9CisKKwl3b3JrLT5vcHMtPnB1dF9yZWYod29yayk7CisJcmV0dXJuIHRydWU7CisKK2F1dG9fcmVxdWV1ZToKKwkvKiB3ZSBtdXN0IGNvbXBsZXRlIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbgorCSAqIC0gd2UgdHJhbnNmZXIgb3VyIHJlZiBvbiB0aGUgaXRlbSBiYWNrIHRvIHRoZSBhcHByb3ByaWF0ZSBxdWV1ZQorCSAqIC0gZG9uJ3Qgd2FrZSBhbm90aGVyIHRocmVhZCB1cCBhcyB3ZSdyZSBhd2FrZSBhbHJlYWR5CisJICovCisJaWYgKHRlc3RfYml0KFNMT1dfV09SS19WRVJZX1NMT1csICZ3b3JrLT5mbGFncykpCisJCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpbmssICZ2c2xvd193b3JrX3F1ZXVlKTsKKwllbHNlCisJCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpbmssICZzbG93X3dvcmtfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycSgmc2xvd193b3JrX3F1ZXVlX2xvY2spOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHNsb3dfd29ya19lbnF1ZXVlIC0gU2NoZWR1bGUgYSBzbG93IHdvcmsgaXRlbSBmb3IgcHJvY2Vzc2luZworICogQHdvcms6IFRoZSB3b3JrIGl0ZW0gdG8gcXVldWUKKyAqCisgKiBTY2hlZHVsZSBhIHNsb3cgd29yayBpdGVtIGZvciBwcm9jZXNzaW5nLiAgSWYgdGhlIGl0ZW0gaXMgYWxyZWFkeSB1bmRlcmdvaW5nCisgKiBleGVjdXRpb24sIHRoaXMgZ3VhcmFudGVlcyBub3QgdG8gcmUtZW50ZXIgdGhlIGV4ZWN1dGlvbiByb3V0aW5lIHVudGlsIHRoZQorICogZmlyc3QgZXhlY3V0aW9uIGZpbmlzaGVzLgorICoKKyAqIFRoZSBpdGVtIGlzIHBpbm5lZCBieSB0aGlzIGZ1bmN0aW9uIGFzIGl0IHJldGFpbnMgYSByZWZlcmVuY2UgdG8gaXQsIG1hbmFnZWQKKyAqIHRocm91Z2ggdGhlIGl0ZW0gb3BlcmF0aW9ucy4gIFRoZSBpdGVtIGlzIHVucGlubmVkIG9uY2UgaXQgaGFzIGJlZW4KKyAqIGV4ZWN1dGVkLgorICoKKyAqIEFuIGl0ZW0gbWF5IGhvZyB0aGUgdGhyZWFkIHRoYXQgaXMgcnVubmluZyBpdCBmb3IgYSByZWxhdGl2ZWx5IGxhcmdlIGFtb3VudAorICogb2YgdGltZSwgc3VmZmljaWVudCwgZm9yIGV4YW1wbGUsIHRvIHBlcmZvcm0gc2V2ZXJhbCBsb29rdXAsIG1rZGlyLCBjcmVhdGUKKyAqIGFuZCBzZXR4YXR0ciBvcGVyYXRpb25zLiAgSXQgbWF5IHNsZWVwIG9uIEkvTyBhbmQgbWF5IHNsZWVwIHRvIG9idGFpbiBsb2Nrcy4KKyAqCisgKiBDb252ZXJzZWx5LCBpZiBhIG51bWJlciBvZiBpdGVtcyBhcmUgYXdhaXRpbmcgcHJvY2Vzc2luZywgaXQgbWF5IHRha2Ugc29tZQorICogdGltZSBiZWZvcmUgYW55IGdpdmVuIGl0ZW0gaXMgZ2l2ZW4gYXR0ZW50aW9uLiAgVGhlIG51bWJlciBvZiB0aHJlYWRzIGluIHRoZQorICogcG9vbCBtYXkgYmUgaW5jcmVhc2VkIHRvIGRlYWwgd2l0aCBkZW1hbmQsIGJ1dCBvbmx5IHVwIHRvIGEgbGltaXQuCisgKgorICogSWYgU0xPV19XT1JLX1ZFUllfU0xPVyBpcyBzZXQgb24gdGhlIHdvcmsgaXRlbSwgdGhlbiBpdCB3aWxsIGJlIHBsYWNlZCBpbgorICogdGhlIHZlcnkgc2xvdyBxdWV1ZSwgZnJvbSB3aGljaCBvbmx5IGEgcG9ydGlvbiBvZiB0aGUgdGhyZWFkcyB3aWxsIGJlCisgKiBhbGxvd2VkIHRvIHBpY2sgaXRlbXMgdG8gZXhlY3V0ZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHZlcnkgc2xvdyBpdGVtcyB3b24ndAorICogb3Zlcmx5IGJsb2NrIG9uZXMgdGhhdCBhcmUganVzdCBvcmRpbmFyaWx5IHNsb3cuCisgKgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1FQUdBSU4gaWYgbm90LgorICovCitpbnQgc2xvd193b3JrX2VucXVldWUoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQlVHX09OKHNsb3dfd29ya191c2VyX2NvdW50IDw9IDApOworCUJVR19PTighd29yayk7CisJQlVHX09OKCF3b3JrLT5vcHMpOworCUJVR19PTighd29yay0+b3BzLT5nZXRfcmVmKTsKKworCS8qIHdoZW4gaG9ub3VyaW5nIGFuIGVucXVldWUgcmVxdWVzdCwgd2Ugb25seSBwcm9taXNlIHRoYXQgd2Ugd2lsbCBydW4KKwkgKiB0aGUgd29yayBmdW5jdGlvbiBpbiB0aGUgZnV0dXJlOyB3ZSBkbyBub3QgcHJvbWlzZSB0byBydW4gaXQgb25jZQorCSAqIHBlciBlbnF1ZXVlIHJlcXVlc3QKKwkgKgorCSAqIHdlIHVzZSB0aGUgUEVORElORyBiaXQgdG8gbWVyZ2UgdG9nZXRoZXIgcmVwZWF0IHJlcXVlc3RzIHdpdGhvdXQKKwkgKiBoYXZpbmcgdG8gZGlzYWJsZSBJUlFzIGFuZCB0YWtlIHRoZSBzcGlubG9jaywgd2hpbHN0IHN0aWxsCisJICogbWFpbnRhaW5pbmcgb3VyIHByb21pc2UKKwkgKi8KKwlpZiAoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhTTE9XX1dPUktfUEVORElORywgJndvcmstPmZsYWdzKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKworCQkvKiB3ZSBwcm9taXNlIHRoYXQgd2Ugd2lsbCBub3QgYXR0ZW1wdCB0byBleGVjdXRlIHRoZSB3b3JrCisJCSAqIGZ1bmN0aW9uIGluIG1vcmUgdGhhbiBvbmUgdGhyZWFkIHNpbXVsdGFuZW91c2x5CisJCSAqCisJCSAqIHRoaXMsIGhvd2V2ZXIsIGxlYXZlcyB1cyB3aXRoIGEgcHJvYmxlbSBpZiB3ZSdyZSBhc2tlZCB0bworCQkgKiBlbnF1ZXVlIHRoZSB3b3JrIHdoaWxzdCBzb21lb25lIGlzIGV4ZWN1dGluZyB0aGUgd29yaworCQkgKiBmdW5jdGlvbiBhcyBzaW1wbHkgcXVldWVpbmcgdGhlIHdvcmsgaW1tZWRpYXRlbHkgbWVhbnMgdGhhdAorCQkgKiBhbm90aGVyIHRocmVhZCBtYXkgdHJ5IGV4ZWN1dGluZyBpdCB3aGlsc3QgaXQgaXMgYWxyZWFkeQorCQkgKiB1bmRlciBleGVjdXRpb24KKwkJICoKKwkJICogdG8gZGVhbCB3aXRoIHRoaXMsIHdlIHNldCB0aGUgRU5RX0RFRkVSUkVEIGJpdCBpbnN0ZWFkIG9mCisJCSAqIGVucXVldWVpbmcsIGFuZCB0aGUgdGhyZWFkIGN1cnJlbnRseSBleGVjdXRpbmcgdGhlIHdvcmsKKwkJICogZnVuY3Rpb24gd2lsbCBlbnF1ZXVlIHRoZSB3b3JrIGl0ZW0gd2hlbiB0aGUgd29yayBmdW5jdGlvbgorCQkgKiByZXR1cm5zIGFuZCBpdCBoYXMgY2xlYXJlZCB0aGUgRVhFQ1VUSU5HIGJpdAorCQkgKi8KKwkJaWYgKHRlc3RfYml0KFNMT1dfV09SS19FWEVDVVRJTkcsICZ3b3JrLT5mbGFncykpIHsKKwkJCXNldF9iaXQoU0xPV19XT1JLX0VOUV9ERUZFUlJFRCwgJndvcmstPmZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh3b3JrLT5vcHMtPmdldF9yZWYod29yaykgPCAwKQorCQkJCWdvdG8gY2FudF9nZXRfcmVmOworCQkJaWYgKHRlc3RfYml0KFNMT1dfV09SS19WRVJZX1NMT1csICZ3b3JrLT5mbGFncykpCisJCQkJbGlzdF9hZGRfdGFpbCgmd29yay0+bGluaywgJnZzbG93X3dvcmtfcXVldWUpOworCQkJZWxzZQorCQkJCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpbmssICZzbG93X3dvcmtfcXVldWUpOworCQkJd2FrZV91cCgmc2xvd193b3JrX3RocmVhZF93cSk7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gMDsKKworY2FudF9nZXRfcmVmOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfd29ya19xdWV1ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIC1FQUdBSU47Cit9CitFWFBPUlRfU1lNQk9MKHNsb3dfd29ya19lbnF1ZXVlKTsKKworLyoKKyAqIFdvcmtlciB0aHJlYWQgY3VsbGluZyBhbGdvcml0aG0KKyAqLworc3RhdGljIGJvb2wgc2xvd193b3JrX2N1bGxfdGhyZWFkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGRvX2N1bGwgPSBmYWxzZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOworCisJaWYgKHNsb3dfd29ya19jdWxsKSB7CisJCXNsb3dfd29ya19jdWxsID0gZmFsc2U7CisKKwkJaWYgKGxpc3RfZW1wdHkoJnNsb3dfd29ya19xdWV1ZSkgJiYKKwkJICAgIGxpc3RfZW1wdHkoJnZzbG93X3dvcmtfcXVldWUpICYmCisJCSAgICBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkgPgorCQkgICAgc2xvd193b3JrX21pbl90aHJlYWRzKSB7CisJCQltb2RfdGltZXIoJnNsb3dfd29ya19jdWxsX3RpbWVyLAorCQkJCSAgamlmZmllcyArIFNMT1dfV09SS19DVUxMX1RJTUVPVVQpOworCQkJZG9fY3VsbCA9IHRydWU7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOworCXJldHVybiBkb19jdWxsOworfQorCisvKgorICogRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIHNsb3cgd29yayBhdmFpbGFibGUgZm9yIGRpc3BhdGNoCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzbG93X3dvcmtfYXZhaWxhYmxlKGludCB2c21heCkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJnNsb3dfd29ya19xdWV1ZSkgfHwKKwkJKCFsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgorCQkgYXRvbWljX3JlYWQoJnZzbG93X3dvcmtfZXhlY3V0aW5nX2NvdW50KSA8IHZzbWF4KTsKK30KKworLyoKKyAqIFdvcmtlciB0aHJlYWQgZGlzcGF0Y2hlcgorICovCitzdGF0aWMgaW50IHNsb3dfd29ya190aHJlYWQodm9pZCAqX2RhdGEpCit7CisJaW50IHZzbWF4OworCisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlzZXRfZnJlZXphYmxlKCk7CisJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtNSk7CisKKwlmb3IgKDs7KSB7CisJCXZzbWF4ID0gdnNsb3dfd29ya19wcm9wb3J0aW9uOworCQl2c21heCAqPSBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCk7CisJCXZzbWF4IC89IDEwMDsKKworCQlwcmVwYXJlX3RvX3dhaXQoJnNsb3dfd29ya190aHJlYWRfd3EsICZ3YWl0LAorCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmICghZnJlZXppbmcoY3VycmVudCkgJiYKKwkJICAgICFzbG93X3dvcmtfdGhyZWFkc19zaG91bGRfZXhpdCAmJgorCQkgICAgIXNsb3dfd29ya19hdmFpbGFibGUodnNtYXgpICYmCisJCSAgICAhc2xvd193b3JrX2N1bGwpCisJCQlzY2hlZHVsZSgpOworCQlmaW5pc2hfd2FpdCgmc2xvd193b3JrX3RocmVhZF93cSwgJndhaXQpOworCisJCXRyeV90b19mcmVlemUoKTsKKworCQl2c21heCA9IHZzbG93X3dvcmtfcHJvcG9ydGlvbjsKKwkJdnNtYXggKj0gYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpOworCQl2c21heCAvPSAxMDA7CisKKwkJaWYgKHNsb3dfd29ya19hdmFpbGFibGUodnNtYXgpICYmIHNsb3dfd29ya19leGVjdXRlKCkpIHsKKwkJCWNvbmRfcmVzY2hlZCgpOworCQkJaWYgKGxpc3RfZW1wdHkoJnNsb3dfd29ya19xdWV1ZSkgJiYKKwkJCSAgICBsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgorCQkJICAgIGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSA+CisJCQkgICAgc2xvd193b3JrX21pbl90aHJlYWRzKQorCQkJCW1vZF90aW1lcigmc2xvd193b3JrX2N1bGxfdGltZXIsCisJCQkJCSAgamlmZmllcyArIFNMT1dfV09SS19DVUxMX1RJTUVPVVQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQpCisJCQlicmVhazsKKworCQlpZiAoc2xvd193b3JrX2N1bGwgJiYgc2xvd193b3JrX2N1bGxfdGhyZWFkKCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkpCisJCWNvbXBsZXRlX2FuZF9leGl0KCZzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkLCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSB0aHJlYWQgY3VsbCB0aW1lciBleHBpcmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHNsb3dfd29ya19jdWxsX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXNsb3dfd29ya19jdWxsID0gdHJ1ZTsKKwl3YWtlX3VwKCZzbG93X3dvcmtfdGhyZWFkX3dxKTsKK30KKworLyoKKyAqIEdldCBhIHJlZmVyZW5jZSBvbiBzbG93IHdvcmsgdGhyZWFkIHN0YXJ0ZXIKKyAqLworc3RhdGljIGludCBzbG93X3dvcmtfbmV3X3RocmVhZF9nZXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEcm9wIGEgcmVmZXJlbmNlIG9uIHNsb3cgd29yayB0aHJlYWQgc3RhcnRlcgorICovCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfbmV3X3RocmVhZF9wdXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7Cit9CisKKy8qCisgKiBTdGFydCBhIG5ldyBzbG93IHdvcmsgdGhyZWFkCisgKi8KK3N0YXRpYyB2b2lkIHNsb3dfd29ya19uZXdfdGhyZWFkX2V4ZWN1dGUoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisKKwlpZiAoc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQpCisJCXJldHVybjsKKworCWlmIChhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkgPj0gc2xvd193b3JrX21heF90aHJlYWRzKQorCQlyZXR1cm47CisKKwlpZiAoIW11dGV4X3RyeWxvY2soJnNsb3dfd29ya191c2VyX2xvY2spKQorCQlyZXR1cm47CisKKwlzbG93X3dvcmtfbWF5X25vdF9zdGFydF9uZXdfdGhyZWFkID0gdHJ1ZTsKKwlhdG9taWNfaW5jKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KTsKKwlwID0ga3RocmVhZF9ydW4oc2xvd193b3JrX3RocmVhZCwgTlVMTCwgImtzbG93ZCIpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlNsb3cgd29yayB0aHJlYWQgcG9vbDogT09NXG4iKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNsb3dfd29ya190aHJlYWRfY291bnQpKQorCQkJQlVHKCk7IC8qIHdlJ3JlIHJ1bm5pbmcgb24gYSBzbG93IHdvcmsgdGhyZWFkLi4uICovCisJCW1vZF90aW1lcigmc2xvd193b3JrX29vbV90aW1lciwKKwkJCSAgamlmZmllcyArIFNMT1dfV09SS19PT01fVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJLyogcmF0ZWxpbWl0IHRoZSBzdGFydGluZyBvZiBuZXcgdGhyZWFkcyAqLworCQltb2RfdGltZXIoJnNsb3dfd29ya19vb21fdGltZXIsIGppZmZpZXMgKyAxKTsKKwl9CisKKwltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgc2xvd193b3JrX25ld190aHJlYWRfb3BzID0geworCS5nZXRfcmVmCT0gc2xvd193b3JrX25ld190aHJlYWRfZ2V0X3JlZiwKKwkucHV0X3JlZgk9IHNsb3dfd29ya19uZXdfdGhyZWFkX3B1dF9yZWYsCisJLmV4ZWN1dGUJPSBzbG93X3dvcmtfbmV3X3RocmVhZF9leGVjdXRlLAorfTsKKworLyoKKyAqIHBvc3QtT09NIG5ldyB0aHJlYWQgc3RhcnQgc3VwcHJlc3Npb24gZXhwaXJhdGlvbgorICovCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfb29tX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXNsb3dfd29ya19tYXlfbm90X3N0YXJ0X25ld190aHJlYWQgPSBmYWxzZTsKK30KKworI2lmZGVmIENPTkZJR19TWVNDVEwKKy8qCisgKiBIYW5kbGUgYWRqdXN0bWVudCBvZiB0aGUgbWluaW11bSBudW1iZXIgb2YgdGhyZWFkcworICovCitzdGF0aWMgaW50IHNsb3dfd29ya19taW5fdGhyZWFkc19zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQkJc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICpidWZmZXIsCisJCQkJCXNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCWludCByZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJaW50IG47CisKKwlpZiAocmV0ID09IDApIHsKKwkJbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisJCWlmIChzbG93X3dvcmtfdXNlcl9jb3VudCA+IDApIHsKKwkJCS8qIHNlZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IG9yIHN0b3AgdGhyZWFkcyAqLworCQkJbiA9IGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSAtCisJCQkJc2xvd193b3JrX21pbl90aHJlYWRzOworCisJCQlpZiAobiA8IDAgJiYgIXNsb3dfd29ya19tYXlfbm90X3N0YXJ0X25ld190aHJlYWQpCisJCQkJc2xvd193b3JrX2VucXVldWUoJnNsb3dfd29ya19uZXdfdGhyZWFkKTsKKwkJCWVsc2UgaWYgKG4gPiAwKQorCQkJCW1vZF90aW1lcigmc2xvd193b3JrX2N1bGxfdGltZXIsCisJCQkJCSAgamlmZmllcyArIFNMT1dfV09SS19DVUxMX1RJTUVPVVQpOworCQl9CisJCW11dGV4X3VubG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEhhbmRsZSBhZGp1c3RtZW50IG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzCisgKi8KK3N0YXRpYyBpbnQgc2xvd193b3JrX21heF90aHJlYWRzX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkJc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwlpbnQgbjsKKworCWlmIChyZXQgPT0gMCkgeworCQltdXRleF9sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKKwkJaWYgKHNsb3dfd29ya191c2VyX2NvdW50ID4gMCkgeworCQkJLyogc2VlIGlmIHdlIG5lZWQgdG8gc3RvcCB0aHJlYWRzICovCisJCQluID0gc2xvd193b3JrX21heF90aHJlYWRzIC0KKwkJCQlhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCk7CisKKwkJCWlmIChuIDwgMCkKKwkJCQltb2RfdGltZXIoJnNsb3dfd29ya19jdWxsX3RpbWVyLAorCQkJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfQ1VMTF9USU1FT1VUKTsKKwkJfQorCQltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLworCisvKioKKyAqIHNsb3dfd29ya19yZWdpc3Rlcl91c2VyIC0gUmVnaXN0ZXIgYSB1c2VyIG9mIHRoZSBmYWNpbGl0eQorICoKKyAqIFJlZ2lzdGVyIGEgdXNlciBvZiB0aGUgZmFjaWxpdHksIHN0YXJ0aW5nIHVwIHRoZSBpbml0aWFsIHRocmVhZHMgaWYgdGhlcmUKKyAqIGFyZW4ndCBhbnkgb3RoZXIgdXNlcnMgYXQgdGhpcyBwb2ludC4gIFRoaXMgd2lsbCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvcgorICogYW4gZXJyb3IgaWYgbm90LgorICovCitpbnQgc2xvd193b3JrX3JlZ2lzdGVyX3VzZXIodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJaW50IGxvb3A7CisKKwltdXRleF9sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKKworCWlmIChzbG93X3dvcmtfdXNlcl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiBTdGFydGluZyB1cFxuIik7CisJCWluaXRfY29tcGxldGlvbigmc2xvd193b3JrX2xhc3RfdGhyZWFkX2V4aXRlZCk7CisKKwkJc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQgPSBmYWxzZTsKKwkJc2xvd193b3JrX2luaXQoJnNsb3dfd29ya19uZXdfdGhyZWFkLAorCQkJICAgICAgICZzbG93X3dvcmtfbmV3X3RocmVhZF9vcHMpOworCQlzbG93X3dvcmtfbWF5X25vdF9zdGFydF9uZXdfdGhyZWFkID0gZmFsc2U7CisJCXNsb3dfd29ya19jdWxsID0gZmFsc2U7CisKKwkJLyogc3RhcnQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHRocmVhZHMgKi8KKwkJZm9yIChsb29wID0gMDsgbG9vcCA8IHNsb3dfd29ya19taW5fdGhyZWFkczsgbG9vcCsrKSB7CisJCQlhdG9taWNfaW5jKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KTsKKwkJCXAgPSBrdGhyZWFkX3J1bihzbG93X3dvcmtfdGhyZWFkLCBOVUxMLCAia3Nsb3dkIik7CisJCQlpZiAoSVNfRVJSKHApKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwkJcHJpbnRrKEtFUk5fTk9USUNFICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IFJlYWR5XG4iKTsKKwl9CisKKwlzbG93X3dvcmtfdXNlcl9jb3VudCsrOworCW11dGV4X3VubG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSkKKwkJY29tcGxldGUoJnNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQpOworCWlmIChsb29wID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNsb3cgd29yayB0aHJlYWQgcG9vbDoiCisJCSAgICAgICAiIEFib3J0aW5nIHN0YXJ0dXAgb24gRU5PTUVNXG4iKTsKKwkJc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQgPSB0cnVlOworCQl3YWtlX3VwX2FsbCgmc2xvd193b3JrX3RocmVhZF93cSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQpOworCQlwcmludGsoS0VSTl9FUlIgIlNsb3cgd29yayB0aHJlYWQgcG9vbDogQWJvcnRlZFxuIik7CisJfQorCW11dGV4X3VubG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisJcmV0dXJuIFBUUl9FUlIocCk7Cit9CitFWFBPUlRfU1lNQk9MKHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKTsKKworLyoqCisgKiBzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyIC0gVW5yZWdpc3RlciBhIHVzZXIgb2YgdGhlIGZhY2lsaXR5CisgKgorICogVW5yZWdpc3RlciBhIHVzZXIgb2YgdGhlIGZhY2lsaXR5LCBraWxsaW5nIGFsbCB0aGUgdGhyZWFkcyBpZiB0aGlzIHdhcyB0aGUKKyAqIGxhc3Qgb25lLgorICovCit2b2lkIHNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIodm9pZCkKK3sKKwltdXRleF9sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKKworCUJVR19PTihzbG93X3dvcmtfdXNlcl9jb3VudCA8PSAwKTsKKworCXNsb3dfd29ya191c2VyX2NvdW50LS07CisJaWYgKHNsb3dfd29ya191c2VyX2NvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IFNodXR0aW5nIGRvd25cbiIpOworCQlzbG93X3dvcmtfdGhyZWFkc19zaG91bGRfZXhpdCA9IHRydWU7CisJCXdha2VfdXBfYWxsKCZzbG93X3dvcmtfdGhyZWFkX3dxKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmc2xvd193b3JrX2xhc3RfdGhyZWFkX2V4aXRlZCk7CisJCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiIKKwkJICAgICAgICIgU2h1dCBkb3duIGNvbXBsZXRlXG4iKTsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmc2xvd193b3JrX2N1bGxfdGltZXIpOworCisJbXV0ZXhfdW5sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcik7CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBzbG93IHdvcmsgZmFjaWxpdHkKKyAqLworc3RhdGljIGludCBfX2luaXQgaW5pdF9zbG93X3dvcmsodm9pZCkKK3sKKwl1bnNpZ25lZCBucl9jcHVzID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKKworCWlmIChzbG93X3dvcmtfbWF4X3RocmVhZHMgPCBucl9jcHVzKQorCQlzbG93X3dvcmtfbWF4X3RocmVhZHMgPSBucl9jcHVzOworI2lmZGVmIENPTkZJR19TWVNDVEwKKwlpZiAoc2xvd193b3JrX21heF9tYXhfdGhyZWFkcyA8IG5yX2NwdXMgKiAyKQorCQlzbG93X3dvcmtfbWF4X21heF90aHJlYWRzID0gbnJfY3B1cyAqIDI7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGluaXRfc2xvd193b3JrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbXAuYyBiL2tlcm5lbC9zbXAuYwppbmRleCBiYmVkYmI3Li44NThiYWFjIDEwMDY0NAotLS0gYS9rZXJuZWwvc21wLmMKKysrIGIva2VybmVsL3NtcC5jCkBAIC0yLDQwICsyLDgyIEBACiAgKiBHZW5lcmljIGhlbHBlcnMgZm9yIHNtcCBpcGkgY2FsbHMKICAqCiAgKiAoQykgSmVucyBBeGJvZSA8amVucy5heGJvZUBvcmFjbGUuY29tPiAyMDA4Ci0gKgogICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSwgY2FsbF9zaW5nbGVfcXVldWUpOwotc3RhdGljIExJU1RfSEVBRChjYWxsX2Z1bmN0aW9uX3F1ZXVlKTsKLV9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhjYWxsX2Z1bmN0aW9uX2xvY2spOworCitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlOworCXNwaW5sb2NrX3QJCWxvY2s7Cit9IGNhbGxfZnVuY3Rpb24gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPQorCXsKKwkJLnF1ZXVlCQk9IExJU1RfSEVBRF9JTklUKGNhbGxfZnVuY3Rpb24ucXVldWUpLAorCQkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChjYWxsX2Z1bmN0aW9uLmxvY2spLAorCX07CiAKIGVudW0gewotCUNTRF9GTEFHX1dBSVQJCT0gMHgwMSwKLQlDU0RfRkxBR19BTExPQwkJPSAweDAyLAotCUNTRF9GTEFHX0xPQ0sJCT0gMHgwNCwKKwlDU0RfRkxBR19MT0NLCQk9IDB4MDEsCiB9OwogCiBzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhIHsKLQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSBjc2Q7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXVuc2lnbmVkIGludCByZWZzOwotCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKLQl1bnNpZ25lZCBsb25nIGNwdW1hc2tfYml0c1tdOworCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhCWNzZDsKKwlzcGlubG9ja190CQlsb2NrOworCXVuc2lnbmVkIGludAkJcmVmczsKKwljcHVtYXNrX3Zhcl90CQljcHVtYXNrOwogfTsKIAogc3RydWN0IGNhbGxfc2luZ2xlX3F1ZXVlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzcGlubG9ja190CQlsb2NrOworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEsIGNmZF9kYXRhKSA9IHsKKwkubG9jawkJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoY2ZkX2RhdGEubG9jayksCit9OworCitzdGF0aWMgaW50Citob3RwbHVnX2NmZChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJbG9uZyBjcHUgPSAobG9uZyloY3B1OworCXN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEgKmNmZCA9ICZwZXJfY3B1KGNmZF9kYXRhLCBjcHUpOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9VUF9QUkVQQVJFOgorCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgorCQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyX25vZGUoJmNmZC0+Y3B1bWFzaywgR0ZQX0tFUk5FTCwKKwkJCQljcHVfdG9fbm9kZShjcHUpKSkKKwkJCXJldHVybiBOT1RJRllfQkFEOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19DUFVfSE9UUExVRworCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKKworCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CisJCWZyZWVfY3B1bWFza192YXIoY2ZkLT5jcHVtYXNrKTsKKwkJYnJlYWs7CisjZW5kaWYKKwl9OworCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGhvdHBsdWdfY2ZkX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsCQk9IGhvdHBsdWdfY2ZkLAogfTsKIAogc3RhdGljIGludCBfX2NwdWluaXQgaW5pdF9jYWxsX3NpbmdsZV9kYXRhKHZvaWQpCiB7CisJdm9pZCAqY3B1ID0gKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewpAQCAtNDQsMjkgKzg2LDYzIEBACiAJCXNwaW5fbG9ja19pbml0KCZxLT5sb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnEtPmxpc3QpOwogCX0KKworCWhvdHBsdWdfY2ZkKCZob3RwbHVnX2NmZF9ub3RpZmllciwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7CisJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZob3RwbHVnX2NmZF9ub3RpZmllcik7CisKIAlyZXR1cm4gMDsKIH0KIGVhcmx5X2luaXRjYWxsKGluaXRfY2FsbF9zaW5nbGVfZGF0YSk7CiAKLXN0YXRpYyB2b2lkIGNzZF9mbGFnX3dhaXQoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEpCisvKgorICogY3NkX2xvY2svY3NkX3VubG9jayB1c2VkIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gcGVyLWNwdSBjc2QgcmVzb3VyY2VzCisgKgorICogRm9yIG5vbi1zeW5jaHJvbm91cyBpcGkgY2FsbHMgdGhlIGNzZCBjYW4gc3RpbGwgYmUgaW4gdXNlIGJ5IHRoZQorICogcHJldmlvdXMgZnVuY3Rpb24gY2FsbC4gRm9yIG11bHRpLWNwdSBjYWxscyBpdHMgZXZlbiBtb3JlIGludGVyZXN0aW5nCisgKiBhcyB3ZSdsbCBoYXZlIHRvIGVuc3VyZSBubyBvdGhlciBjcHUgaXMgb2JzZXJ2aW5nIG91ciBjc2QuCisgKi8KK3N0YXRpYyB2b2lkIGNzZF9sb2NrX3dhaXQoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEpCiB7Ci0JLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KLQlkbyB7Ci0JCWlmICghKGRhdGEtPmZsYWdzICYgQ1NEX0ZMQUdfV0FJVCkpCi0JCQlicmVhazsKKwl3aGlsZSAoZGF0YS0+ZmxhZ3MgJiBDU0RfRkxBR19MT0NLKQogCQljcHVfcmVsYXgoKTsKLQl9IHdoaWxlICgxKTsKK30KKworc3RhdGljIHZvaWQgY3NkX2xvY2soc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEpCit7CisJY3NkX2xvY2tfd2FpdChkYXRhKTsKKwlkYXRhLT5mbGFncyA9IENTRF9GTEFHX0xPQ0s7CisKKwkvKgorCSAqIHByZXZlbnQgQ1BVIGZyb20gcmVvcmRlcmluZyB0aGUgYWJvdmUgYXNzaWdubWVudAorCSAqIHRvIC0+ZmxhZ3Mgd2l0aCBhbnkgc3Vic2VxdWVudCBhc3NpZ25tZW50cyB0byBvdGhlcgorCSAqIGZpZWxkcyBvZiB0aGUgc3BlY2lmaWVkIGNhbGxfc2luZ2xlX2RhdGEgc3RydWN0dXJlOgorCSAqLworCXNtcF9tYigpOworfQorCitzdGF0aWMgdm9pZCBjc2RfdW5sb2NrKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhKQoreworCVdBUk5fT04oIShkYXRhLT5mbGFncyAmIENTRF9GTEFHX0xPQ0spKTsKKworCS8qCisJICogZW5zdXJlIHdlJ3JlIGFsbCBkb25lIGJlZm9yZSByZWxlYXNpbmcgZGF0YToKKwkgKi8KKwlzbXBfbWIoKTsKKworCWRhdGEtPmZsYWdzICY9IH5DU0RfRkxBR19MT0NLOwogfQogCiAvKgotICogSW5zZXJ0IGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgY2FsbF9zaW5nbGVfZGF0YSBlbGVtZW50IGZvciBleGVjdXRpb24KLSAqIG9uIHRoZSBnaXZlbiBDUFUuIGRhdGEgbXVzdCBhbHJlYWR5IGhhdmUgLT5mdW5jLCAtPmluZm8sIGFuZCAtPmZsYWdzIHNldC4KKyAqIEluc2VydCBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIGNhbGxfc2luZ2xlX2RhdGEgZWxlbWVudAorICogZm9yIGV4ZWN1dGlvbiBvbiB0aGUgZ2l2ZW4gQ1BVLiBkYXRhIG11c3QgYWxyZWFkeSBoYXZlCisgKiAtPmZ1bmMsIC0+aW5mbywgYW5kIC0+ZmxhZ3Mgc2V0LgogICovCi1zdGF0aWMgdm9pZCBnZW5lcmljX2V4ZWNfc2luZ2xlKGludCBjcHUsIHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhKQorc3RhdGljCit2b2lkIGdlbmVyaWNfZXhlY19zaW5nbGUoaW50IGNwdSwgc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEsIGludCB3YWl0KQogewogCXN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSAqZHN0ID0gJnBlcl9jcHUoY2FsbF9zaW5nbGVfcXVldWUsIGNwdSk7Ci0JaW50IHdhaXQgPSBkYXRhLT5mbGFncyAmIENTRF9GTEFHX1dBSVQsIGlwaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpcGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHN0LT5sb2NrLCBmbGFncyk7CiAJaXBpID0gbGlzdF9lbXB0eSgmZHN0LT5saXN0KTsKQEAgLTc0LDI0ICsxNTAsMjEgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkc3QtPmxvY2ssIGZsYWdzKTsKIAogCS8qCi0JICogTWFrZSB0aGUgbGlzdCBhZGRpdGlvbiB2aXNpYmxlIGJlZm9yZSBzZW5kaW5nIHRoZSBpcGkuCisJICogVGhlIGxpc3QgYWRkaXRpb24gc2hvdWxkIGJlIHZpc2libGUgYmVmb3JlIHNlbmRpbmcgdGhlIElQSQorCSAqIGhhbmRsZXIgbG9ja3MgdGhlIGxpc3QgdG8gcHVsbCB0aGUgZW50cnkgb2ZmIGl0IGJlY2F1c2Ugb2YKKwkgKiBub3JtYWwgY2FjaGUgY29oZXJlbmN5IHJ1bGVzIGltcGxpZWQgYnkgc3BpbmxvY2tzLgorCSAqCisJICogSWYgSVBJcyBjYW4gZ28gb3V0IG9mIG9yZGVyIHRvIHRoZSBjYWNoZSBjb2hlcmVuY3kgcHJvdG9jb2wKKwkgKiBpbiBhbiBhcmNoaXRlY3R1cmUsIHN1ZmZpY2llbnQgc3luY2hyb25pc2F0aW9uIHNob3VsZCBiZSBhZGRlZAorCSAqIHRvIGFyY2ggY29kZSB0byBtYWtlIGl0IGFwcGVhciB0byBvYmV5IGNhY2hlIGNvaGVyZW5jeSBXUlQKKwkgKiBsb2NraW5nIGFuZCBiYXJyaWVyIHByaW1pdGl2ZXMuIEdlbmVyaWMgY29kZSBpc24ndCByZWFsbHkKKwkgKiBlcXVpcHBlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcuLi4KIAkgKi8KLQlzbXBfbWIoKTsKLQogCWlmIChpcGkpCiAJCWFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoY3B1KTsKIAogCWlmICh3YWl0KQotCQljc2RfZmxhZ193YWl0KGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCByY3VfZnJlZV9jYWxsX2RhdGEoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEgKmRhdGE7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEsIHJjdV9oZWFkKTsKLQotCWtmcmVlKGRhdGEpOworCQljc2RfbG9ja193YWl0KGRhdGEpOwogfQogCiAvKgpAQCAtMTA0LDk5ICsxNzcsODMgQEAKIAlpbnQgY3B1ID0gZ2V0X2NwdSgpOwogCiAJLyoKLQkgKiBJdCdzIG9rIHRvIHVzZSBsaXN0X2Zvcl9lYWNoX3JjdSgpIGhlcmUgZXZlbiB0aG91Z2ggd2UgbWF5IGRlbGV0ZQotCSAqICdwb3MnLCBzaW5jZSBsaXN0X2RlbF9yY3UoKSBkb2Vzbid0IGNsZWFyIC0+bmV4dAorCSAqIEVuc3VyZSBlbnRyeSBpcyB2aXNpYmxlIG9uIGNhbGxfZnVuY3Rpb25fcXVldWUgYWZ0ZXIgd2UgaGF2ZQorCSAqIGVudGVyZWQgdGhlIElQSS4gU2VlIGNvbW1lbnQgaW4gc21wX2NhbGxfZnVuY3Rpb25fbWFueS4KKwkgKiBJZiB3ZSBkb24ndCBoYXZlIHRoaXMsIHRoZW4gd2UgbWF5IG1pc3MgYW4gZW50cnkgb24gdGhlIGxpc3QKKwkgKiBhbmQgbmV2ZXIgZ2V0IGFub3RoZXIgSVBJIHRvIHByb2Nlc3MgaXQuCiAJICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRhdGEsICZjYWxsX2Z1bmN0aW9uX3F1ZXVlLCBjc2QubGlzdCkgeworCXNtcF9tYigpOworCisJLyoKKwkgKiBJdCdzIG9rIHRvIHVzZSBsaXN0X2Zvcl9lYWNoX3JjdSgpIGhlcmUgZXZlbiB0aG91Z2ggd2UgbWF5CisJICogZGVsZXRlICdwb3MnLCBzaW5jZSBsaXN0X2RlbF9yY3UoKSBkb2Vzbid0IGNsZWFyIC0+bmV4dAorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRhdGEsICZjYWxsX2Z1bmN0aW9uLnF1ZXVlLCBjc2QubGlzdCkgewogCQlpbnQgcmVmczsKIAotCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0b19jcHVtYXNrKGRhdGEtPmNwdW1hc2tfYml0cykpKQorCQlzcGluX2xvY2soJmRhdGEtPmxvY2spOworCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkYXRhLT5jcHVtYXNrKSkgeworCQkJc3Bpbl91bmxvY2soJmRhdGEtPmxvY2spOwogCQkJY29udGludWU7CisJCX0KKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBkYXRhLT5jcHVtYXNrKTsKKwkJc3Bpbl91bmxvY2soJmRhdGEtPmxvY2spOwogCiAJCWRhdGEtPmNzZC5mdW5jKGRhdGEtPmNzZC5pbmZvKTsKIAogCQlzcGluX2xvY2soJmRhdGEtPmxvY2spOwotCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRvX2NwdW1hc2soZGF0YS0+Y3B1bWFza19iaXRzKSk7CiAJCVdBUk5fT04oZGF0YS0+cmVmcyA9PSAwKTsKLQkJZGF0YS0+cmVmcy0tOwotCQlyZWZzID0gZGF0YS0+cmVmczsKKwkJcmVmcyA9IC0tZGF0YS0+cmVmczsKKwkJaWYgKCFyZWZzKSB7CisJCQlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CisJCQlsaXN0X2RlbF9yY3UoJmRhdGEtPmNzZC5saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOworCQl9CiAJCXNwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAogCQlpZiAocmVmcykKIAkJCWNvbnRpbnVlOwogCi0JCXNwaW5fbG9jaygmY2FsbF9mdW5jdGlvbl9sb2NrKTsKLQkJbGlzdF9kZWxfcmN1KCZkYXRhLT5jc2QubGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uX2xvY2spOwotCi0JCWlmIChkYXRhLT5jc2QuZmxhZ3MgJiBDU0RfRkxBR19XQUlUKSB7Ci0JCQkvKgotCQkJICogc2VyaWFsaXplIHN0b3JlcyB0byBkYXRhIHdpdGggdGhlIGZsYWcgY2xlYXIKLQkJCSAqIGFuZCB3YWtldXAKLQkJCSAqLwotCQkJc21wX3dtYigpOwotCQkJZGF0YS0+Y3NkLmZsYWdzICY9IH5DU0RfRkxBR19XQUlUOwotCQl9Ci0JCWlmIChkYXRhLT5jc2QuZmxhZ3MgJiBDU0RfRkxBR19BTExPQykKLQkJCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgcmN1X2ZyZWVfY2FsbF9kYXRhKTsKKwkJY3NkX3VubG9jaygmZGF0YS0+Y3NkKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlwdXRfY3B1KCk7CiB9CiAKIC8qCi0gKiBJbnZva2VkIGJ5IGFyY2ggdG8gaGFuZGxlIGFuIElQSSBmb3IgY2FsbCBmdW5jdGlvbiBzaW5nbGUuIE11c3QgYmUgY2FsbGVkCi0gKiBmcm9tIHRoZSBhcmNoIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqIEludm9rZWQgYnkgYXJjaCB0byBoYW5kbGUgYW4gSVBJIGZvciBjYWxsIGZ1bmN0aW9uIHNpbmdsZS4gTXVzdCBiZQorICogY2FsbGVkIGZyb20gdGhlIGFyY2ggd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICovCiB2b2lkIGdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCh2b2lkKQogewogCXN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSAqcSA9ICZfX2dldF9jcHVfdmFyKGNhbGxfc2luZ2xlX3F1ZXVlKTsKKwl1bnNpZ25lZCBpbnQgZGF0YV9mbGFnczsKIAlMSVNUX0hFQUQobGlzdCk7CiAKLQkvKgotCSAqIE5lZWQgdG8gc2VlIG90aGVyIHN0b3JlcyB0byBsaXN0IGhlYWQgZm9yIGNoZWNraW5nIHdoZXRoZXIKLQkgKiBsaXN0IGlzIGVtcHR5IHdpdGhvdXQgaG9sZGluZyBxLT5sb2NrCi0JICovCi0Jc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZxLT5saXN0KSkgewotCQl1bnNpZ25lZCBpbnQgZGF0YV9mbGFnczsKKwlzcGluX2xvY2soJnEtPmxvY2spOworCWxpc3RfcmVwbGFjZV9pbml0KCZxLT5saXN0LCAmbGlzdCk7CisJc3Bpbl91bmxvY2soJnEtPmxvY2spOwogCi0JCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0JCWxpc3RfcmVwbGFjZV9pbml0KCZxLT5saXN0LCAmbGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CisJCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhOwogCi0JCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKLQkJCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhOworCQlkYXRhID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhLCBsaXN0KTsKKwkJbGlzdF9kZWwoJmRhdGEtPmxpc3QpOwogCi0JCQlkYXRhID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhLAotCQkJCQkJbGlzdCk7Ci0JCQlsaXN0X2RlbCgmZGF0YS0+bGlzdCk7Ci0KLQkJCS8qCi0JCQkgKiAnZGF0YScgY2FuIGJlIGludmFsaWQgYWZ0ZXIgdGhpcyBjYWxsIGlmCi0JCQkgKiBmbGFncyA9PSAwICh3aGVuIGNhbGxlZCB0aHJvdWdoCi0JCQkgKiBnZW5lcmljX2V4ZWNfc2luZ2xlKCksIHNvIHNhdmUgdGhlbSBhd2F5IGJlZm9yZQotCQkJICogbWFraW5nIHRoZSBjYWxsLgotCQkJICovCi0JCQlkYXRhX2ZsYWdzID0gZGF0YS0+ZmxhZ3M7Ci0KLQkJCWRhdGEtPmZ1bmMoZGF0YS0+aW5mbyk7Ci0KLQkJCWlmIChkYXRhX2ZsYWdzICYgQ1NEX0ZMQUdfV0FJVCkgewotCQkJCXNtcF93bWIoKTsKLQkJCQlkYXRhLT5mbGFncyAmPSB+Q1NEX0ZMQUdfV0FJVDsKLQkJCX0gZWxzZSBpZiAoZGF0YV9mbGFncyAmIENTRF9GTEFHX0xPQ0spIHsKLQkJCQlzbXBfd21iKCk7Ci0JCQkJZGF0YS0+ZmxhZ3MgJj0gfkNTRF9GTEFHX0xPQ0s7Ci0JCQl9IGVsc2UgaWYgKGRhdGFfZmxhZ3MgJiBDU0RfRkxBR19BTExPQykKLQkJCQlrZnJlZShkYXRhKTsKLQkJfQogCQkvKgotCQkgKiBTZWUgY29tbWVudCBvbiBvdXRlciBsb29wCisJCSAqICdkYXRhJyBjYW4gYmUgaW52YWxpZCBhZnRlciB0aGlzIGNhbGwgaWYgZmxhZ3MgPT0gMAorCQkgKiAod2hlbiBjYWxsZWQgdGhyb3VnaCBnZW5lcmljX2V4ZWNfc2luZ2xlKCkpLAorCQkgKiBzbyBzYXZlIHRoZW0gYXdheSBiZWZvcmUgbWFraW5nIHRoZSBjYWxsOgogCQkgKi8KLQkJc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7CisJCWRhdGFfZmxhZ3MgPSBkYXRhLT5mbGFnczsKKworCQlkYXRhLT5mdW5jKGRhdGEtPmluZm8pOworCisJCS8qCisJCSAqIFVubG9ja2VkIENTRHMgYXJlIHZhbGlkIHRocm91Z2ggZ2VuZXJpY19leGVjX3NpbmdsZSgpOgorCQkgKi8KKwkJaWYgKGRhdGFfZmxhZ3MgJiBDU0RfRkxBR19MT0NLKQorCQkJY3NkX3VubG9jayhkYXRhKTsKIAl9CiB9CiAKQEAgLTIxNSw2NSArMjcyLDQ1IEBACiBpbnQgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGludCBjcHUsIHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCiAJCQkgICAgIGludCB3YWl0KQogewotCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhIGQ7CisJc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgZCA9IHsKKwkJLmZsYWdzID0gMCwKKwl9OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JLyogcHJldmVudCBwcmVlbXB0aW9uIGFuZCByZXNjaGVkdWxlIG9uIGFub3RoZXIgcHJvY2Vzc29yLAotCSAgIGFzIHdlbGwgYXMgQ1BVIHJlbW92YWwgKi8KLQlpbnQgbWUgPSBnZXRfY3B1KCk7CisJaW50IHRoaXNfY3B1OwogCWludCBlcnIgPSAwOwogCi0JLyogQ2FuIGRlYWRsb2NrIHdoZW4gY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKKwkvKgorCSAqIHByZXZlbnQgcHJlZW1wdGlvbiBhbmQgcmVzY2hlZHVsZSBvbiBhbm90aGVyIHByb2Nlc3NvciwKKwkgKiBhcyB3ZWxsIGFzIENQVSByZW1vdmFsCisJICovCisJdGhpc19jcHUgPSBnZXRfY3B1KCk7CiAKLQlpZiAoY3B1ID09IG1lKSB7CisJLyogQ2FuIGRlYWRsb2NrIHdoZW4gY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLworCVdBUk5fT05fT05DRShpcnFzX2Rpc2FibGVkKCkgJiYgIW9vcHNfaW5fcHJvZ3Jlc3MpOworCisJaWYgKGNwdSA9PSB0aGlzX2NwdSkgewogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCWZ1bmMoaW5mbyk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9IGVsc2UgaWYgKCh1bnNpZ25lZCljcHUgPCBucl9jcHVfaWRzICYmIGNwdV9vbmxpbmUoY3B1KSkgewotCQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqZGF0YTsKLQotCQlpZiAoIXdhaXQpIHsKLQkJCS8qCi0JCQkgKiBXZSBhcmUgY2FsbGluZyBhIGZ1bmN0aW9uIG9uIGEgc2luZ2xlIENQVQotCQkJICogYW5kIHdlIGFyZSBub3QgZ29pbmcgdG8gd2FpdCBmb3IgaXQgdG8gZmluaXNoLgotCQkJICogV2UgZmlyc3QgdHJ5IHRvIGFsbG9jYXRlIHRoZSBkYXRhLCBidXQgaWYgd2UKLQkJCSAqIGZhaWwsIHdlIGZhbGwgYmFjayB0byB1c2UgYSBwZXIgY3B1IGRhdGEgdG8gcGFzcwotCQkJICogdGhlIGluZm9ybWF0aW9uIHRvIHRoYXQgQ1BVLiBTaW5jZSBhbGwgY2FsbGVycwotCQkJICogb2YgdGhpcyBjb2RlIHdpbGwgdXNlIHRoZSBzYW1lIGRhdGEsIHdlIG11c3QKLQkJCSAqIHN5bmNocm9uaXplIHRoZSBjYWxsZXJzIHRvIHByZXZlbnQgYSBuZXcgY2FsbGVyCi0JCQkgKiBmcm9tIGNvcnJ1cHRpbmcgdGhlIGRhdGEgYmVmb3JlIHRoZSBjYWxsZWUKLQkJCSAqIGNhbiBhY2Nlc3MgaXQuCi0JCQkgKgotCQkJICogVGhlIENTRF9GTEFHX0xPQ0sgaXMgdXNlZCB0byBsZXQgdXMga25vdyB3aGVuCi0JCQkgKiB0aGUgSVBJIGhhbmRsZXIgaXMgZG9uZSB3aXRoIHRoZSBkYXRhLgotCQkJICogVGhlIGZpcnN0IGNhbGxlciB3aWxsIHNldCBpdCwgYW5kIHRoZSBjYWxsZWUKLQkJCSAqIHdpbGwgY2xlYXIgaXQuIFRoZSBuZXh0IGNhbGxlciBtdXN0IHdhaXQgZm9yCi0JCQkgKiBpdCB0byBjbGVhciBiZWZvcmUgd2Ugc2V0IGl0IGFnYWluLiBUaGlzCi0JCQkgKiB3aWxsIG1ha2Ugc3VyZSB0aGUgY2FsbGVlIGlzIGRvbmUgd2l0aCB0aGUKLQkJCSAqIGRhdGEgYmVmb3JlIGEgbmV3IGNhbGxlciB3aWxsIHVzZSBpdC4KLQkJCSAqLwotCQkJZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoZGF0YSkKLQkJCQlkYXRhLT5mbGFncyA9IENTRF9GTEFHX0FMTE9DOwotCQkJZWxzZSB7Ci0JCQkJZGF0YSA9ICZwZXJfY3B1KGNzZF9kYXRhLCBtZSk7Ci0JCQkJd2hpbGUgKGRhdGEtPmZsYWdzICYgQ1NEX0ZMQUdfTE9DSykKLQkJCQkJY3B1X3JlbGF4KCk7Ci0JCQkJZGF0YS0+ZmxhZ3MgPSBDU0RfRkxBR19MT0NLOwotCQkJfQotCQl9IGVsc2UgewotCQkJZGF0YSA9ICZkOwotCQkJZGF0YS0+ZmxhZ3MgPSBDU0RfRkxBR19XQUlUOwotCQl9Ci0KLQkJZGF0YS0+ZnVuYyA9IGZ1bmM7Ci0JCWRhdGEtPmluZm8gPSBpbmZvOwotCQlnZW5lcmljX2V4ZWNfc2luZ2xlKGNwdSwgZGF0YSk7CiAJfSBlbHNlIHsKLQkJZXJyID0gLUVOWElPOwkvKiBDUFUgbm90IG9ubGluZSAqLworCQlpZiAoKHVuc2lnbmVkKWNwdSA8IG5yX2NwdV9pZHMgJiYgY3B1X29ubGluZShjcHUpKSB7CisJCQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqZGF0YSA9ICZkOworCisJCQlpZiAoIXdhaXQpCisJCQkJZGF0YSA9ICZfX2dldF9jcHVfdmFyKGNzZF9kYXRhKTsKKworCQkJY3NkX2xvY2soZGF0YSk7CisKKwkJCWRhdGEtPmZ1bmMgPSBmdW5jOworCQkJZGF0YS0+aW5mbyA9IGluZm87CisJCQlnZW5lcmljX2V4ZWNfc2luZ2xlKGNwdSwgZGF0YSwgd2FpdCk7CisJCX0gZWxzZSB7CisJCQllcnIgPSAtRU5YSU87CS8qIENQVSBub3Qgb25saW5lICovCisJCX0KIAl9CiAKIAlwdXRfY3B1KCk7CisKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUpOwpAQCAtMjgzLDIzICszMjAsMjYgQEAKICAqIEBjcHU6IFRoZSBDUFUgdG8gcnVuIG9uLgogICogQGRhdGE6IFByZS1hbGxvY2F0ZWQgYW5kIHNldHVwIGRhdGEgc3RydWN0dXJlCiAgKgotICogTGlrZSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoKSwgYnV0IGFsbG93IGNhbGxlciB0byBwYXNzIGluIGEgcHJlLWFsbG9jYXRlZAotICogZGF0YSBzdHJ1Y3R1cmUuIFVzZWZ1bCBmb3IgZW1iZWRkaW5nIEBkYXRhIGluc2lkZSBvdGhlciBzdHJ1Y3R1cmVzLCBmb3IKLSAqIGluc3RhbmNlLgotICoKKyAqIExpa2Ugc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCksIGJ1dCBhbGxvdyBjYWxsZXIgdG8gcGFzcyBpbiBhCisgKiBwcmUtYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlLiBVc2VmdWwgZm9yIGVtYmVkZGluZyBAZGF0YSBpbnNpZGUKKyAqIG90aGVyIHN0cnVjdHVyZXMsIGZvciBpbnN0YW5jZS4KICAqLwotdm9pZCBfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1LCBzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqZGF0YSkKK3ZvaWQgX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaW50IGNwdSwgc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEsCisJCQkJaW50IHdhaXQpCiB7Ci0JLyogQ2FuIGRlYWRsb2NrIHdoZW4gY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCVdBUk5fT04oKGRhdGEtPmZsYWdzICYgQ1NEX0ZMQUdfV0FJVCkgJiYgaXJxc19kaXNhYmxlZCgpKTsKKwljc2RfbG9jayhkYXRhKTsKIAotCWdlbmVyaWNfZXhlY19zaW5nbGUoY3B1LCBkYXRhKTsKKwkvKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCisJV0FSTl9PTl9PTkNFKHdhaXQgJiYgaXJxc19kaXNhYmxlZCgpICYmICFvb3BzX2luX3Byb2dyZXNzKTsKKworCWdlbmVyaWNfZXhlY19zaW5nbGUoY3B1LCBkYXRhLCB3YWl0KTsKIH0KIAotLyogRklYTUU6IFNoaW0gZm9yIGFyY2hzIHVzaW5nIG9sZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkgQVBJLiAqLworLyogRGVwcmVjYXRlZDogc2hpbSBmb3IgYXJjaHMgdXNpbmcgb2xkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaSBBUEkuICovCisKICNpZm5kZWYgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sKLSNkZWZpbmUgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sobWFza3ApIFwKLQlhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoKihtYXNrcCkpCisjIGRlZmluZSBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhtYXNrcCkgXAorCSBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoKihtYXNrcCkpCiAjZW5kaWYKIAogLyoqCkBAIC0zMDcsNyArMzQ3LDggQEAKICAqIEBtYXNrOiBUaGUgc2V0IG9mIGNwdXMgdG8gcnVuIG9uIChvbmx5IHJ1bnMgb24gb25saW5lIHN1YnNldCkuCiAgKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KICAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KLSAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCisgKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZAorICogICAgICAgIG9uIG90aGVyIENQVXMuCiAgKgogICogSWYgQHdhaXQgaXMgdHJ1ZSwgdGhlbiByZXR1cm5zIG9uY2UgQGZ1bmMgaGFzIHJldHVybmVkLiBOb3RlIHRoYXQgQHdhaXQKICAqIHdpbGwgYmUgaW1wbGljaXRseSB0dXJuZWQgb24gaW4gY2FzZSBvZiBhbGxvY2F0aW9uIGZhaWx1cmVzLCBzaW5jZQpAQCAtMzE4LDI3ICszNTksMjcgQEAKICAqIG11c3QgYmUgZGlzYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKi8KIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25fbWFueShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKLQkJCSAgICB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqaW5mbywKLQkJCSAgICBib29sIHdhaXQpCisJCQkgICAgdm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmluZm8sIGJvb2wgd2FpdCkKIHsKIAlzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNwdSwgbmV4dF9jcHU7CisJaW50IGNwdSwgbmV4dF9jcHUsIHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogQ2FuIGRlYWRsb2NrIHdoZW4gY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKKwlXQVJOX09OX09OQ0UoaXJxc19kaXNhYmxlZCgpICYmICFvb3BzX2luX3Byb2dyZXNzKTsKIAotCS8qIFNvLCB3aGF0J3MgYSBDUFUgdGhleSB3YW50PyAgSWdub3JpbmcgdGhpcyBvbmUuICovCisJLyogU28sIHdoYXQncyBhIENQVSB0aGV5IHdhbnQ/IElnbm9yaW5nIHRoaXMgb25lLiAqLwogCWNwdSA9IGNwdW1hc2tfZmlyc3RfYW5kKG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7Ci0JaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJaWYgKGNwdSA9PSB0aGlzX2NwdSkKIAkJY3B1ID0gY3B1bWFza19uZXh0X2FuZChjcHUsIG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisKIAkvKiBObyBvbmxpbmUgY3B1cz8gIFdlJ3JlIGRvbmUuICovCiAJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQogCQlyZXR1cm47CiAKIAkvKiBEbyB3ZSBoYXZlIGFub3RoZXIgQ1BVIHdoaWNoIGlzbid0IHVzPyAqLwogCW5leHRfY3B1ID0gY3B1bWFza19uZXh0X2FuZChjcHUsIG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7Ci0JaWYgKG5leHRfY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwlpZiAobmV4dF9jcHUgPT0gdGhpc19jcHUpCiAJCW5leHRfY3B1ID0gY3B1bWFza19uZXh0X2FuZChuZXh0X2NwdSwgbWFzaywgY3B1X29ubGluZV9tYXNrKTsKIAogCS8qIEZhc3RwYXRoOiBkbyB0aGF0IGNwdSBieSBpdHNlbGYuICovCkBAIC0zNDcsNDMgKzM4OCw0MCBAQAogCQlyZXR1cm47CiAJfQogCi0JZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSArIGNwdW1hc2tfc2l6ZSgpLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIWRhdGEpKSB7Ci0JCS8qIFNsb3cgcGF0aC4gKi8KLQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBtYXNrKSkKLQkJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBmdW5jLCBpbmZvLCB3YWl0KTsKLQkJfQotCQlyZXR1cm47Ci0JfQorCWRhdGEgPSAmX19nZXRfY3B1X3ZhcihjZmRfZGF0YSk7CisJY3NkX2xvY2soJmRhdGEtPmNzZCk7CiAKLQlzcGluX2xvY2tfaW5pdCgmZGF0YS0+bG9jayk7Ci0JZGF0YS0+Y3NkLmZsYWdzID0gQ1NEX0ZMQUdfQUxMT0M7Ci0JaWYgKHdhaXQpCi0JCWRhdGEtPmNzZC5mbGFncyB8PSBDU0RfRkxBR19XQUlUOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYXRhLT5sb2NrLCBmbGFncyk7CiAJZGF0YS0+Y3NkLmZ1bmMgPSBmdW5jOwogCWRhdGEtPmNzZC5pbmZvID0gaW5mbzsKLQljcHVtYXNrX2FuZCh0b19jcHVtYXNrKGRhdGEtPmNwdW1hc2tfYml0cyksIG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7Ci0JY3B1bWFza19jbGVhcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCB0b19jcHVtYXNrKGRhdGEtPmNwdW1hc2tfYml0cykpOwotCWRhdGEtPnJlZnMgPSBjcHVtYXNrX3dlaWdodCh0b19jcHVtYXNrKGRhdGEtPmNwdW1hc2tfYml0cykpOworCWNwdW1hc2tfYW5kKGRhdGEtPmNwdW1hc2ssIG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisJY3B1bWFza19jbGVhcl9jcHUodGhpc19jcHUsIGRhdGEtPmNwdW1hc2spOworCWRhdGEtPnJlZnMgPSBjcHVtYXNrX3dlaWdodChkYXRhLT5jcHVtYXNrKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjYWxsX2Z1bmN0aW9uX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsX3JjdSgmZGF0YS0+Y3NkLmxpc3QsICZjYWxsX2Z1bmN0aW9uX3F1ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYWxsX2Z1bmN0aW9uX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CisJLyoKKwkgKiBQbGFjZSBlbnRyeSBhdCB0aGUgX0hFQURfIG9mIHRoZSBsaXN0LCBzbyB0aGF0IGFueSBjcHUgc3RpbGwKKwkgKiBvYnNlcnZpbmcgdGhlIGVudHJ5IGluIGdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCkKKwkgKiB3aWxsIG5vdCBtaXNzIGFueSBvdGhlciBsaXN0IGVudHJpZXM6CisJICovCisJbGlzdF9hZGRfcmN1KCZkYXRhLT5jc2QubGlzdCwgJmNhbGxfZnVuY3Rpb24ucXVldWUpOworCXNwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBNYWtlIHRoZSBsaXN0IGFkZGl0aW9uIHZpc2libGUgYmVmb3JlIHNlbmRpbmcgdGhlIGlwaS4KKwkgKiAoSVBJcyBtdXN0IG9iZXkgb3IgYXBwZWFyIHRvIG9iZXkgbm9ybWFsIExpbnV4IGNhY2hlCisJICogY29oZXJlbmN5IHJ1bGVzIC0tIHNlZSBjb21tZW50IGluIGdlbmVyaWNfZXhlY19zaW5nbGUpLgogCSAqLwogCXNtcF9tYigpOwogCiAJLyogU2VuZCBhIG1lc3NhZ2UgdG8gYWxsIENQVXMgaW4gdGhlIG1hcCAqLwotCWFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKHRvX2NwdW1hc2soZGF0YS0+Y3B1bWFza19iaXRzKSk7CisJYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soZGF0YS0+Y3B1bWFzayk7CiAKLQkvKiBvcHRpb25hbGx5IHdhaXQgZm9yIHRoZSBDUFVzIHRvIGNvbXBsZXRlICovCisJLyogT3B0aW9uYWxseSB3YWl0IGZvciB0aGUgQ1BVcyB0byBjb21wbGV0ZSAqLwogCWlmICh3YWl0KQotCQljc2RfZmxhZ193YWl0KCZkYXRhLT5jc2QpOworCQljc2RfbG9ja193YWl0KCZkYXRhLT5jc2QpOwogfQogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9tYW55KTsKIApAQCAtMzkxLDcgKzQyOSw4IEBACiAgKiBzbXBfY2FsbF9mdW5jdGlvbigpOiBSdW4gYSBmdW5jdGlvbiBvbiBhbGwgb3RoZXIgQ1BVcy4KICAqIEBmdW5jOiBUaGUgZnVuY3Rpb24gdG8gcnVuLiBUaGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nLgogICogQGluZm86IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgotICogQHdhaXQ6IElmIHRydWUsIHdhaXQgKGF0b21pY2FsbHkpIHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcy4KKyAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkCisgKiAgICAgICAgb24gb3RoZXIgQ1BVcy4KICAqCiAgKiBSZXR1cm5zIDAuCiAgKgpAQCAtNDA3LDI2ICs0NDYsMjcgQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KGNwdV9vbmxpbmVfbWFzaywgZnVuYywgaW5mbywgd2FpdCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbik7CiAKIHZvaWQgaXBpX2NhbGxfbG9jayh2b2lkKQogewotCXNwaW5fbG9jaygmY2FsbF9mdW5jdGlvbl9sb2NrKTsKKwlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CiB9CiAKIHZvaWQgaXBpX2NhbGxfdW5sb2NrKHZvaWQpCiB7Ci0Jc3Bpbl91bmxvY2soJmNhbGxfZnVuY3Rpb25fbG9jayk7CisJc3Bpbl91bmxvY2soJmNhbGxfZnVuY3Rpb24ubG9jayk7CiB9CiAKIHZvaWQgaXBpX2NhbGxfbG9ja19pcnEodm9pZCkKIHsKLQlzcGluX2xvY2tfaXJxKCZjYWxsX2Z1bmN0aW9uX2xvY2spOworCXNwaW5fbG9ja19pcnEoJmNhbGxfZnVuY3Rpb24ubG9jayk7CiB9CiAKIHZvaWQgaXBpX2NhbGxfdW5sb2NrX2lycSh2b2lkKQogewotCXNwaW5fdW5sb2NrX2lycSgmY2FsbF9mdW5jdGlvbl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmNhbGxfZnVuY3Rpb24ubG9jayk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCA1N2QzZjY3Li5kMTA1YTgyIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTIxLDggKzIxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKyNpbmNsdWRlIDx0cmFjZS9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIC8qCkBAIC01Miw2ICs1NCwxMSBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGtzb2Z0aXJxZCk7CiAKK2NoYXIgKnNvZnRpcnFfdG9fbmFtZVtOUl9TT0ZUSVJRU10gPSB7CisJIkhJIiwgIlRJTUVSIiwgIk5FVF9UWCIsICJORVRfUlgiLCAiQkxPQ0siLAorCSJUQVNLTEVUIiwgIlNDSEVEIiwgIkhSVElNRVIiLAkiUkNVIgorfTsKKwogLyoKICAqIHdlIGNhbm5vdCBsb29wIGluZGVmaW5pdGVseSBoZXJlIHRvIGF2b2lkIHVzZXJzcGFjZSBzdGFydmF0aW9uLAogICogYnV0IHdlIGFsc28gZG9uJ3Qgd2FudCB0byBpbnRyb2R1Y2UgYSB3b3JzdCBjYXNlIDEvSFogbGF0ZW5jeQpAQCAtNzksMTMgKzg2LDIzIEBACiAJV0FSTl9PTl9PTkNFKGluX2lycSgpKTsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JYWRkX3ByZWVtcHRfY291bnQoU09GVElSUV9PRkZTRVQpOworCS8qCisJICogVGhlIHByZWVtcHQgdHJhY2VyIGhvb2tzIGludG8gYWRkX3ByZWVtcHRfY291bnQgYW5kIHdpbGwgYnJlYWsKKwkgKiBsb2NrZGVwIGJlY2F1c2UgaXQgY2FsbHMgYmFjayBpbnRvIGxvY2tkZXAgYWZ0ZXIgU09GVElSUV9PRkZTRVQKKwkgKiBpcyBzZXQgYW5kIGJlZm9yZSBjdXJyZW50LT5zb2Z0aXJxX2VuYWJsZWQgaXMgY2xlYXJlZC4KKwkgKiBXZSBtdXN0IG1hbnVhbGx5IGluY3JlbWVudCBwcmVlbXB0X2NvdW50IGhlcmUgYW5kIG1hbnVhbGx5CisJICogY2FsbCB0aGUgdHJhY2VfcHJlZW1wdF9vZmYgbGF0ZXIuCisJICovCisJcHJlZW1wdF9jb3VudCgpICs9IFNPRlRJUlFfT0ZGU0VUOwogCS8qCiAJICogV2VyZSBzb2Z0aXJxcyB0dXJuZWQgb2ZmIGFib3ZlOgogCSAqLwogCWlmIChzb2Z0aXJxX2NvdW50KCkgPT0gU09GVElSUV9PRkZTRVQpCiAJCXRyYWNlX3NvZnRpcnFzX29mZihpcCk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWlmIChwcmVlbXB0X2NvdW50KCkgPT0gU09GVElSUV9PRkZTRVQpCisJCXRyYWNlX3ByZWVtcHRfb2ZmKENBTExFUl9BRERSMCwgZ2V0X3BhcmVudF9pcChDQUxMRVJfQUREUjEpKTsKIH0KICNlbHNlIC8qICFDT05GSUdfVFJBQ0VfSVJRRkxBR1MgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2xvY2FsX2JoX2Rpc2FibGUodW5zaWduZWQgbG9uZyBpcCkKQEAgLTE2OSw2ICsxODYsOSBAQAogICovCiAjZGVmaW5lIE1BWF9TT0ZUSVJRX1JFU1RBUlQgMTAKIAorREVGSU5FX1RSQUNFKHNvZnRpcnFfZW50cnkpOworREVGSU5FX1RSQUNFKHNvZnRpcnFfZXhpdCk7CisKIGFzbWxpbmthZ2Ugdm9pZCBfX2RvX3NvZnRpcnEodm9pZCkKIHsKIAlzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmg7CkBAIC0xODAsNyArMjAwLDcgQEAKIAlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsKIAogCV9fbG9jYWxfYmhfZGlzYWJsZSgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotCXRyYWNlX3NvZnRpcnFfZW50ZXIoKTsKKwlsb2NrZGVwX3NvZnRpcnFfZW50ZXIoKTsKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIHJlc3RhcnQ6CkBAIC0xOTUsMTIgKzIxNSwxNCBAQAogCQlpZiAocGVuZGluZyAmIDEpIHsKIAkJCWludCBwcmV2X2NvdW50ID0gcHJlZW1wdF9jb3VudCgpOwogCisJCQl0cmFjZV9zb2Z0aXJxX2VudHJ5KGgsIHNvZnRpcnFfdmVjKTsKIAkJCWgtPmFjdGlvbihoKTsKLQorCQkJdHJhY2Vfc29mdGlycV9leGl0KGgsIHNvZnRpcnFfdmVjKTsKIAkJCWlmICh1bmxpa2VseShwcmV2X2NvdW50ICE9IHByZWVtcHRfY291bnQoKSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImh1aCwgZW50ZXJlZCBzb2Z0aXJxICV0ZCAlcCIKKwkJCQlwcmludGsoS0VSTl9FUlIgImh1aCwgZW50ZXJlZCBzb2Z0aXJxICV0ZCAlcyAlcCIKIAkJCQkgICAgICAgIndpdGggcHJlZW1wdF9jb3VudCAlMDh4LCIKIAkJCQkgICAgICAgIiBleGl0ZWQgd2l0aCAlMDh4P1xuIiwgaCAtIHNvZnRpcnFfdmVjLAorCQkJCSAgICAgICBzb2Z0aXJxX3RvX25hbWVbaCAtIHNvZnRpcnFfdmVjXSwKIAkJCQkgICAgICAgaC0+YWN0aW9uLCBwcmV2X2NvdW50LCBwcmVlbXB0X2NvdW50KCkpOwogCQkJCXByZWVtcHRfY291bnQoKSA9IHByZXZfY291bnQ7CiAJCQl9CkBAIC0yMjAsNyArMjQyLDcgQEAKIAlpZiAocGVuZGluZykKIAkJd2FrZXVwX3NvZnRpcnFkKCk7CiAKLQl0cmFjZV9zb2Z0aXJxX2V4aXQoKTsKKwlsb2NrZGVwX3NvZnRpcnFfZXhpdCgpOwogCiAJYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7CiAJX2xvY2FsX2JoX2VuYWJsZSgpOwpAQCAtNDk2LDcgKzUxOCw3IEBACiAJCWNwLT5mbGFncyA9IDA7CiAJCWNwLT5wcml2ID0gc29mdGlycTsKIAotCQlfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGNwKTsKKwkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBjcCwgMCk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zcGlubG9jay5jIGIva2VybmVsL3NwaW5sb2NrLmMKaW5kZXggMjlhYjIwNy4uNzkzMjY1MyAxMDA2NDQKLS0tIGEva2VybmVsL3NwaW5sb2NrLmMKKysrIGIva2VybmVsL3NwaW5sb2NrLmMKQEAgLTEyMSw3ICsxMjEsOCBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlyd2xvY2tfYWNxdWlyZV9yZWFkKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19yZWFkX3RyeWxvY2ssIF9yYXdfcmVhZF9sb2NrKTsKKwlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2ssCisJCQkgICAgIF9yYXdfcmVhZF9sb2NrX2ZsYWdzLCAmZmxhZ3MpOwogCXJldHVybiBmbGFnczsKIH0KIEVYUE9SVF9TWU1CT0woX3JlYWRfbG9ja19pcnFzYXZlKTsKQEAgLTE1MSw3ICsxNTIsOCBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfd3JpdGVfdHJ5bG9jaywgX3Jhd193cml0ZV9sb2NrKTsKKwlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBfcmF3X3dyaXRlX3RyeWxvY2ssIF9yYXdfd3JpdGVfbG9jaywKKwkJCSAgICAgX3Jhd193cml0ZV9sb2NrX2ZsYWdzLCAmZmxhZ3MpOwogCXJldHVybiBmbGFnczsKIH0KIEVYUE9SVF9TWU1CT0woX3dyaXRlX2xvY2tfaXJxc2F2ZSk7CkBAIC0yOTksMTYgKzMwMSw4IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgc3ViY2xhc3MsIDAsIF9SRVRfSVBfKTsKLQkvKgotCSAqIE9uIGxvY2tkZXAgd2UgZG9udCB3YW50IHRoZSBoYW5kLWNvZGVkIGlycS1lbmFibGUgb2YKLQkgKiBfcmF3X3NwaW5fbG9ja19mbGFncygpIGNvZGUsIGJlY2F1c2UgbG9ja2RlcCBhc3N1bWVzCi0JICogdGhhdCBpbnRlcnJ1cHRzIGFyZSBub3QgcmUtZW5hYmxlZCBkdXJpbmcgbG9jay1hY3F1aXJlOgotCSAqLwotI2lmZGVmIENPTkZJR19MT0NLREVQCi0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19zcGluX3RyeWxvY2ssIF9yYXdfc3Bpbl9sb2NrKTsKLSNlbHNlCi0JX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgJmZsYWdzKTsKLSNlbmRpZgorCUxPQ0tfQ09OVEVOREVEX0ZMQUdTKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrLCBfcmF3X3NwaW5fbG9jaywKKwkJCQlfcmF3X3NwaW5fbG9ja19mbGFncywgJmZsYWdzKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDM3ZjQ1OGUuLjUxZGJiNTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtMTAxMywxMCArMTAxNCw4IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlpZiAodGFza19wZ3JwKHApICE9IHBncnApIHsKKwlpZiAodGFza19wZ3JwKHApICE9IHBncnApCiAJCWNoYW5nZV9waWQocCwgUElEVFlQRV9QR0lELCBwZ3JwKTsKLQkJc2V0X3Rhc2tfcGdycChwLCBwaWRfbnIocGdycCkpOwotCX0KIAogCWVyciA9IDA7CiBvdXQ6CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggMmU0OTBhMy4uODIzNTBmOCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtOTUsMTIgKzk2LDkgQEAKIHN0YXRpYyBpbnQgbmVnX29uZSA9IC0xOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NTVUpICYmIGRlZmluZWQoQ09ORklHX0ZJTEVfTE9DS0lORykKLXN0YXRpYyBpbnQgdHdvID0gMjsKLSNlbmRpZgotCiBzdGF0aWMgaW50IHplcm87CiBzdGF0aWMgaW50IG9uZSA9IDE7CitzdGF0aWMgaW50IHR3byA9IDI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvbmVfdWwgPSAxOwogc3RhdGljIGludCBvbmVfaHVuZHJlZCA9IDEwMDsKIApAQCAtOTAwLDYgKzg5OCwxNCBAQAogCQkucHJvY19oYW5kbGVyCT0gJnNjYW5fdW5ldmljdGFibGVfaGFuZGxlciwKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NMT1dfV09SSworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJzbG93LXdvcmsiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gc2xvd193b3JrX3N5c2N0bHMsCisJfSwKKyNlbmRpZgogLyoKICAqIE5PVEU6IGRvIG5vdCBhZGQgbmV3IGVudHJpZXMgdG8gdGhpcyB0YWJsZSB1bmxlc3MgeW91IGhhdmUgcmVhZAogICogRG9jdW1lbnRhdGlvbi9zeXNjdGwvY3RsX3VubnVtYmVyZWQudHh0CkBAIC0xMzczLDEwICsxMzc5LDcgQEAKIAkJLmRhdGEJCT0gJmxlYXNlX2JyZWFrX3RpbWUsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAotCQkuZXh0cmExCQk9ICZ6ZXJvLAotCQkuZXh0cmEyCQk9ICZ0d28sCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FJTwpAQCAtMTQxNyw3ICsxNDIwLDEwIEBACiAJCS5kYXRhCQk9ICZzdWlkX2R1bXBhYmxlLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ0d28sCiAJfSwKICNpZiBkZWZpbmVkKENPTkZJR19CSU5GTVRfTUlTQykgfHwgZGVmaW5lZChDT05GSUdfQklORk1UX01JU0NfTU9EVUxFKQogCXsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggMzRlNzA3ZS4uMjI0NjE0MSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTksNiArOSw5IEBACiBjb25maWcgTk9QX1RSQUNFUgogCWJvb2wKIAorY29uZmlnIEhBVkVfRlRSQUNFX05NSV9FTlRFUgorCWJvb2wKKwogY29uZmlnIEhBVkVfRlVOQ1RJT05fVFJBQ0VSCiAJYm9vbAogCkBAIC0zMSwxMiArMzQsMjAgQEAKIGNvbmZpZyBIQVZFX0hXX0JSQU5DSF9UUkFDRVIKIAlib29sCiAKK2NvbmZpZyBIQVZFX0ZUUkFDRV9TWVNDQUxMUworCWJvb2wKKwogY29uZmlnIFRSQUNFUl9NQVhfVFJBQ0UKIAlib29sCiAKIGNvbmZpZyBSSU5HX0JVRkZFUgogCWJvb2wKIAorY29uZmlnIEZUUkFDRV9OTUlfRU5URVIKKyAgICAgICBib29sCisgICAgICAgZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRV9OTUlfRU5URVIKKyAgICAgICBkZWZhdWx0IHkKKwogY29uZmlnIFRSQUNJTkcKIAlib29sCiAJc2VsZWN0IERFQlVHX0ZTCkBAIC00NCwxMyArNTUsMjkgQEAKIAlzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlQKIAlzZWxlY3QgVFJBQ0VQT0lOVFMKIAlzZWxlY3QgTk9QX1RSQUNFUgorCXNlbGVjdCBCSU5BUllfUFJJTlRGCisKKyMKKyMgTWluaW11bSByZXF1aXJlbWVudHMgYW4gYXJjaGl0ZWN0dXJlIGhhcyB0byBtZWV0IGZvciB1cyB0bworIyBiZSBhYmxlIHRvIG9mZmVyIGdlbmVyaWMgdHJhY2luZyBmYWNpbGl0aWVzOgorIworY29uZmlnIFRSQUNJTkdfU1VQUE9SVAorCWJvb2wKKwkjIFBQQzMyIGhhcyBubyBpcnFmbGFncyB0cmFjaW5nIHN1cHBvcnQsIGJ1dCBpdCBjYW4gdXNlIG1vc3Qgb2YgdGhlCisJIyB0cmFjZXJzIGFueXdheSwgdGhleSB3ZXJlIHRlc3RlZCB0byBidWlsZCBhbmQgd29yay4gTm90ZSB0aGF0IG5ldworCSMgZXhjZXB0aW9ucyB0byB0aGlzIGxpc3QgYXJlbid0IHdlbGNvbWVkLCBiZXR0ZXIgaW1wbGVtZW50IHRoZQorCSMgaXJxZmxhZ3MgdHJhY2luZyBmb3IgeW91ciBhcmNoaXRlY3R1cmUuCisJZGVwZW5kcyBvbiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUIHx8IFBQQzMyCisJZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlQKKwlkZWZhdWx0IHkKKworaWYgVFJBQ0lOR19TVVBQT1JUCiAKIG1lbnUgIlRyYWNlcnMiCiAKIGNvbmZpZyBGVU5DVElPTl9UUkFDRVIKIAlib29sICJLZXJuZWwgRnVuY3Rpb24gVHJhY2VyIgogCWRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9UUkFDRVIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBGUkFNRV9QT0lOVEVSCiAJc2VsZWN0IEtBTExTWU1TCiAJc2VsZWN0IFRSQUNJTkcKQEAgLTcyLDE4ICs5OSwxNiBAQAogCWhlbHAKIAkgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGEgZnVuY3Rpb24gYXQgYm90aCBpdHMgcmV0dXJuCiAJICBhbmQgaXRzIGVudHJ5LgotCSAgSXQncyBmaXJzdCBwdXJwb3NlIGlzIHRvIHRyYWNlIHRoZSBkdXJhdGlvbiBvZiBmdW5jdGlvbnMgYW5kCi0JICBkcmF3IGEgY2FsbCBncmFwaCBmb3IgZWFjaCB0aHJlYWQgd2l0aCBzb21lIGluZm9ybWF0aW9ucyBsaWtlCi0JICB0aGUgcmV0dXJuIHZhbHVlLgotCSAgVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnQgcmV0dXJuIGFkZHJlc3Mgb24gdGhlIGN1cnJlbnQKLQkgIHRhc2sgc3RydWN0dXJlIGludG8gYSBzdGFjayBvZiBjYWxscy4KKwkgIEl0cyBmaXJzdCBwdXJwb3NlIGlzIHRvIHRyYWNlIHRoZSBkdXJhdGlvbiBvZiBmdW5jdGlvbnMgYW5kCisJICBkcmF3IGEgY2FsbCBncmFwaCBmb3IgZWFjaCB0aHJlYWQgd2l0aCBzb21lIGluZm9ybWF0aW9uIGxpa2UKKwkgIHRoZSByZXR1cm4gdmFsdWUuIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50IHJldHVybiAKKwkgIGFkZHJlc3Mgb24gdGhlIGN1cnJlbnQgdGFzayBzdHJ1Y3R1cmUgaW50byBhIHN0YWNrIG9mIGNhbGxzLgogCiBjb25maWcgSVJRU09GRl9UUkFDRVIKIAlib29sICJJbnRlcnJ1cHRzLW9mZiBMYXRlbmN5IFRyYWNlciIKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRQotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNFX0lSUUZMQUdTCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRQpAQCAtMTA2LDcgKzEzMSw2IEBACiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUKIAlkZXBlbmRzIG9uIFBSRUVNUFQKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKIAloZWxwCkBAIC0xMjcsMTMgKzE1MSwxMyBAQAogCWJvb2wgIlN5c3Byb2YgVHJhY2VyIgogCWRlcGVuZHMgb24gWDg2CiAJc2VsZWN0IFRSQUNJTkcKKwlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCiAJaGVscAogCSAgVGhpcyB0cmFjZXIgcHJvdmlkZXMgdGhlIHRyYWNlIG5lZWRlZCBieSB0aGUgJ1N5c3Byb2YnIHVzZXJzcGFjZQogCSAgdG9vbC4KIAogY29uZmlnIFNDSEVEX1RSQUNFUgogCWJvb2wgIlNjaGVkdWxpbmcgTGF0ZW5jeSBUcmFjZXIiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAlzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRQpAQCAtMTQzLDE2ICsxNjcsMzAgQEAKIAogY29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUgogCWJvb2wgIlRyYWNlIHByb2Nlc3MgY29udGV4dCBzd2l0Y2hlcyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IE1BUktFUlMKIAloZWxwCiAJICBUaGlzIHRyYWNlciBnZXRzIGNhbGxlZCBmcm9tIHRoZSBjb250ZXh0IHN3aXRjaCBhbmQgcmVjb3JkcwogCSAgYWxsIHN3aXRjaGluZyBvZiB0YXNrcy4KIAorY29uZmlnIEVWRU5UX1RSQUNFUgorCWJvb2wgIlRyYWNlIHZhcmlvdXMgZXZlbnRzIGluIHRoZSBrZXJuZWwiCisJc2VsZWN0IFRSQUNJTkcKKwloZWxwCisJICBUaGlzIHRyYWNlciBob29rcyB0byB2YXJpb3VzIHRyYWNlIHBvaW50cyBpbiB0aGUga2VybmVsCisJICBhbGxvd2luZyB0aGUgdXNlciB0byBwaWNrIGFuZCBjaG9vc2Ugd2hpY2ggdHJhY2UgcG9pbnQgdGhleQorCSAgd2FudCB0byB0cmFjZS4KKworY29uZmlnIEZUUkFDRV9TWVNDQUxMUworCWJvb2wgIlRyYWNlIHN5c2NhbGxzIgorCWRlcGVuZHMgb24gSEFWRV9GVFJBQ0VfU1lTQ0FMTFMKKwlzZWxlY3QgVFJBQ0lORworCXNlbGVjdCBLQUxMU1lNUworCWhlbHAKKwkgIEJhc2ljIHRyYWNlciB0byBjYXRjaCB0aGUgc3lzY2FsbCBlbnRyeSBhbmQgZXhpdCBldmVudHMuCisKIGNvbmZpZyBCT09UX1RSQUNFUgogCWJvb2wgIlRyYWNlIGJvb3QgaW5pdGNhbGxzIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCiAJaGVscApAQCAtMTY1LDEzICsyMDMsMTEgQEAKIAkgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkZWxheXMgZHVyaW5nIGluaXRjYWxscyAtIGJ1dCB0aGUgcmF3CiAJICAvZGVidWcvdHJhY2luZy90cmFjZSB0ZXh0IG91dHB1dCBpcyByZWFkYWJsZSB0b28uCiAKLQkgICggTm90ZSB0aGF0IHRyYWNpbmcgc2VsZiB0ZXN0cyBjYW4ndCBiZSBlbmFibGVkIGlmIHRoaXMgdHJhY2VyIGlzCi0JICAgIHNlbGVjdGVkLCBiZWNhdXNlIHRoZSBzZWxmLXRlc3RzIGFyZSBhbiBpbml0Y2FsbCBhcyB3ZWxsIGFuZCB0aGF0Ci0JICAgIHdvdWxkIGludmFsaWRhdGUgdGhlIGJvb3QgdHJhY2UuICkKKwkgIFlvdSBtdXN0IHBhc3MgaW4gZnRyYWNlPWluaXRjYWxsIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCisJICB0byBlbmFibGUgdGhpcyBvbiBib290dXAuCiAKIGNvbmZpZyBUUkFDRV9CUkFOQ0hfUFJPRklMSU5HCiAJYm9vbCAiVHJhY2UgbGlrZWx5L3VubGlrZWx5IHByb2ZpbGVyIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAloZWxwCiAJICBUaGlzIHRyYWNlciBwcm9maWxlcyBhbGwgdGhlIHRoZSBsaWtlbHkgYW5kIHVubGlrZWx5IG1hY3JvcwpAQCAtMjI0LDcgKzI2MCw2IEBACiAKIGNvbmZpZyBQT1dFUl9UUkFDRVIKIAlib29sICJUcmFjZSBwb3dlciBjb25zdW1wdGlvbiBiZWhhdmlvciIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWRlcGVuZHMgb24gWDg2CiAJc2VsZWN0IFRSQUNJTkcKIAloZWxwCkBAIC0yMzYsNyArMjcxLDYgQEAKIGNvbmZpZyBTVEFDS19UUkFDRVIKIAlib29sICJUcmFjZSBtYXggc3RhY2siCiAJZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX1RSQUNFUgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IEZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBTVEFDS1RSQUNFCiAJc2VsZWN0IEtBTExTWU1TCkBAIC0yNjYsMTEgKzMwMCw2NiBAQAogCSAgVGhpcyB0cmFjZXIgcmVjb3JkcyBhbGwgYnJhbmNoZXMgb24gdGhlIHN5c3RlbSBpbiBhIGNpcmN1bGFyCiAJICBidWZmZXIgZ2l2aW5nIGFjY2VzcyB0byB0aGUgbGFzdCBOIGJyYW5jaGVzIGZvciBlYWNoIGNwdS4KIAorY29uZmlnIEtNRU1UUkFDRQorCWJvb2wgIlRyYWNlIFNMQUIgYWxsb2NhdGlvbnMiCisJc2VsZWN0IFRSQUNJTkcKKwloZWxwCisJICBrbWVtdHJhY2UgcHJvdmlkZXMgdHJhY2luZyBmb3Igc2xhYiBhbGxvY2F0b3IgZnVuY3Rpb25zLCBzdWNoIGFzCisJICBrbWFsbG9jLCBrZnJlZSwga21lbV9jYWNoZV9hbGxvYywga21lbV9jYWNoZV9mcmVlIGV0Yy4uIENvbGxlY3RlZAorCSAgZGF0YSBpcyB0aGVuIGZlZCB0byB0aGUgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIGluIG9yZGVyIHRvIGFuYWx5c2UKKwkgIGFsbG9jYXRpb24gaG90c3BvdHMsIGludGVybmFsIGZyYWdtZW50YXRpb24gYW5kIHNvIG9uLCBtYWtpbmcgaXQKKwkgIHBvc3NpYmxlIHRvIHNlZSBob3cgd2VsbCBhbiBhbGxvY2F0b3IgcGVyZm9ybXMsIGFzIHdlbGwgYXMgZGVidWcKKwkgIGFuZCBwcm9maWxlIGtlcm5lbCBjb2RlLgorCisJICBUaGlzIHJlcXVpcmVzIGFuIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB0byB1c2UuIFNlZQorCSAgRG9jdW1lbnRhdGlvbi92bS9rbWVtdHJhY2UudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJICBTYXlpbmcgWSB3aWxsIG1ha2UgdGhlIGtlcm5lbCBzb21ld2hhdCBsYXJnZXIgYW5kIHNsb3dlci4gSG93ZXZlciwKKwkgIGlmIHlvdSBkaXNhYmxlIGttZW10cmFjZSBhdCBydW4tdGltZSBvciBib290LXRpbWUsIHRoZSBwZXJmb3JtYW5jZQorCSAgaW1wYWN0IGlzIG1pbmltYWwgKGRlcGVuZGluZyBvbiB0aGUgYXJjaCB0aGUga2VybmVsIGlzIGJ1aWx0IGZvcikuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBXT1JLUVVFVUVfVFJBQ0VSCisJYm9vbCAiVHJhY2Ugd29ya3F1ZXVlcyIKKwlzZWxlY3QgVFJBQ0lORworCWhlbHAKKwkgIFRoZSB3b3JrcXVldWUgdHJhY2VyIHByb3ZpZGVzIHNvbWUgc3RhdGlzdGljYWwgaW5mb3JtYXRpb25zCisgICAgICAgICAgYWJvdXQgZWFjaCBjcHUgd29ya3F1ZXVlIHRocmVhZCBzdWNoIGFzIHRoZSBudW1iZXIgb2YgdGhlCisgICAgICAgICAgd29ya3MgaW5zZXJ0ZWQgYW5kIGV4ZWN1dGVkIHNpbmNlIHRoZWlyIGNyZWF0aW9uLiBJdCBjYW4gaGVscAorICAgICAgICAgIHRvIGV2YWx1YXRlIHRoZSBhbW91bnQgb2Ygd29yayBlYWNoIG9mIHRoZW0gaGF2ZSB0byBwZXJmb3JtLgorICAgICAgICAgIEZvciBleGFtcGxlIGl0IGNhbiBoZWxwIGEgZGV2ZWxvcGVyIHRvIGRlY2lkZSB3aGV0aGVyIGhlIHNob3VsZAorICAgICAgICAgIGNob29zZSBhIHBlciBjcHUgd29ya3F1ZXVlIGluc3RlYWQgb2YgYSBzaW5nbGV0aHJlYWRlZCBvbmUuCisKK2NvbmZpZyBCTEtfREVWX0lPX1RSQUNFCisJYm9vbCAiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBpbyBhY3Rpb25zIgorCWRlcGVuZHMgb24gU1lTRlMKKwlkZXBlbmRzIG9uIEJMT0NLCisJc2VsZWN0IFJFTEFZCisJc2VsZWN0IERFQlVHX0ZTCisJc2VsZWN0IFRSQUNFUE9JTlRTCisJc2VsZWN0IFRSQUNJTkcKKwlzZWxlY3QgU1RBQ0tUUkFDRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0cmFjZSB0aGUgYmxvY2sgbGF5ZXIgYWN0aW9ucworCSAgb24gYSBnaXZlbiBxdWV1ZS4gVHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSBhbnkgdHJhZmZpYyBoYXBwZW5pbmcKKwkgIG9uIGEgYmxvY2sgZGV2aWNlIHF1ZXVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiAoYW5kIHRoZSB1c2Vyc3BhY2UKKwkgIHN1cHBvcnQgdG9vbHMgbmVlZGVkKSwgZmV0Y2ggdGhlIGJsa3RyYWNlIHRvb2xzIGZyb206CisKKwkgIGdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0CisKKwkgIFRyYWNpbmcgYWxzbyBpcyBwb3NzaWJsZSB1c2luZyB0aGUgZnRyYWNlIGludGVyZmFjZSwgZS5nLjoKKworCSAgICBlY2hvIDEgPiAvc3lzL2Jsb2NrL3NkYS9zZGExL3RyYWNlL2VuYWJsZQorCSAgICBlY2hvIGJsayA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKKwkgICAgY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2VfcGlwZQorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgRFlOQU1JQ19GVFJBQ0UKIAlib29sICJlbmFibGUvZGlzYWJsZSBmdHJhY2UgdHJhY2Vwb2ludHMgZHluYW1pY2FsbHkiCiAJZGVwZW5kcyBvbiBGVU5DVElPTl9UUkFDRVIKIAlkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0UKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWRlZmF1bHQgeQogCWhlbHAKICAgICAgICAgIFRoaXMgb3B0aW9uIHdpbGwgbW9kaWZ5IGFsbCB0aGUgY2FsbHMgdG8gZnRyYWNlIGR5bmFtaWNhbGx5CkBAIC0yOTYsNyArMzg1LDcgQEAKIAogY29uZmlnIEZUUkFDRV9TVEFSVFVQX1RFU1QKIAlib29sICJQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZSIKLQlkZXBlbmRzIG9uIFRSQUNJTkcgJiYgREVCVUdfS0VSTkVMICYmICFCT09UX1RSQUNFUgorCWRlcGVuZHMgb24gVFJBQ0lORwogCXNlbGVjdCBGVFJBQ0VfU0VMRlRFU1QKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwZXJmb3JtcyBhIHNlcmllcyBvZiBzdGFydHVwIHRlc3RzIG9uIGZ0cmFjZS4gT24gYm9vdHVwCkBAIC0zMDYsNyArMzk1LDcgQEAKIAogY29uZmlnIE1NSU9UUkFDRQogCWJvb2wgIk1lbW9yeSBtYXBwZWQgSU8gdHJhY2luZyIKLQlkZXBlbmRzIG9uIEhBVkVfTU1JT1RSQUNFX1NVUFBPUlQgJiYgREVCVUdfS0VSTkVMICYmIFBDSQorCWRlcGVuZHMgb24gSEFWRV9NTUlPVFJBQ0VfU1VQUE9SVCAmJiBQQ0kKIAlzZWxlY3QgVFJBQ0lORwogCWhlbHAKIAkgIE1taW90cmFjZSB0cmFjZXMgTWVtb3J5IE1hcHBlZCBJL08gYWNjZXNzIGFuZCBpcyBtZWFudCBmb3IKQEAgLTMyOCwzICs0MTcsNiBAQAogCSAgU2F5IE4sIHVubGVzcyB5b3UgYWJzb2x1dGVseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KIAogZW5kbWVudQorCitlbmRpZiAjIFRSQUNJTkdfU1VQUE9SVAorCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKaW5kZXggMzQ5ZDVhOS4uMjYzMGY1MSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL01ha2VmaWxlCisrKyBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQpAQCAtMTksNiArMTksMTAgQEAKIG9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gcmluZ19idWZmZXIubwogCiBvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2Uubworb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlX2Nsb2NrLm8KK29iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZV9vdXRwdXQubworb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlX3N0YXQubworb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlX3ByaW50ay5vCiBvYmotJChDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSKSArPSB0cmFjZV9zY2hlZF9zd2l0Y2gubwogb2JqLSQoQ09ORklHX1NZU1BST0ZfVFJBQ0VSKSArPSB0cmFjZV9zeXNwcm9mLm8KIG9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IHRyYWNlX2Z1bmN0aW9ucy5vCkBAIC0zMyw1ICszNywxNCBAQAogb2JqLSQoQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcpICs9IHRyYWNlX2JyYW5jaC5vCiBvYmotJChDT05GSUdfSFdfQlJBTkNIX1RSQUNFUikgKz0gdHJhY2VfaHdfYnJhbmNoZXMubwogb2JqLSQoQ09ORklHX1BPV0VSX1RSQUNFUikgKz0gdHJhY2VfcG93ZXIubworb2JqLSQoQ09ORklHX0tNRU1UUkFDRSkgKz0ga21lbXRyYWNlLm8KK29iai0kKENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSKSArPSB0cmFjZV93b3JrcXVldWUubworb2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpCSs9IGJsa3RyYWNlLm8KK29iai0kKENPTkZJR19FVkVOVF9UUkFDRVIpICs9IHRyYWNlX2V2ZW50cy5vCitvYmotJChDT05GSUdfRVZFTlRfVFJBQ0VSKSArPSBldmVudHMubworb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNFUikgKz0gdHJhY2VfZXhwb3J0Lm8KK29iai0kKENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMpICs9IHRyYWNlX3N5c2NhbGxzLm8KK29iai0kKENPTkZJR19FVkVOVF9QUk9GSUxFKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KK29iai0kKENPTkZJR19FVkVOVF9UUkFDRVIpICs9IHRyYWNlX2V2ZW50c19maWx0ZXIubwogCiBsaWJmdHJhY2UteSA6PSBmdHJhY2UubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDdjNWIzCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKQEAgLTAsMCArMSwxNTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8dHJhY2UvYmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmxrdHJhY2Vfc2VxIF9fcmVhZF9tb3N0bHkgPSAxOworCitzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpibGtfdHI7CitzdGF0aWMgYm9vbCBibGtfdHJhY2VyX2VuYWJsZWQgX19yZWFkX21vc3RseTsKKworLyogU2VsZWN0IGFuIGFsdGVybmF0aXZlLCBtaW5pbWFsaXN0aWMgb3V0cHV0IHRoYW4gdGhlIG9yaWdpbmFsIG9uZSAqLworI2RlZmluZSBUUkFDRV9CTEtfT1BUX0NMQVNTSUMJMHgxCisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBibGtfdHJhY2VyX29wdHNbXSA9IHsKKwkvKiBEZWZhdWx0IGRpc2FibGUgdGhlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi8KKwl7IFRSQUNFUl9PUFQoYmxrX2NsYXNzaWMsIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIGJsa190cmFjZXJfZmxhZ3MgPSB7CisJLnZhbCAgPSAwLAorCS5vcHRzID0gYmxrX3RyYWNlcl9vcHRzLAorfTsKKworLyogR2xvYmFsIHJlZmVyZW5jZSBjb3VudCBvZiBwcm9iZXMgKi8KK3N0YXRpYyBhdG9taWNfdCBibGtfcHJvYmVzX3JlZiA9IEFUT01JQ19JTklUKDApOworCitzdGF0aWMgdm9pZCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7CitzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTsKKworLyoKKyAqIFNlbmQgb3V0IGEgbm90aWZ5IG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgaW50IGFjdGlvbiwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGJsa19pb190cmFjZSAqdDsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50ID0gTlVMTDsKKwlpbnQgcGMgPSAwOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJYm9vbCBibGtfdHJhY2VyID0gYmxrX3RyYWNlcl9lbmFibGVkOworCisJaWYgKGJsa190cmFjZXIpIHsKKwkJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShibGtfdHIsIFRSQUNFX0JMSywKKwkJCQkJCSAgc2l6ZW9mKCp0KSArIGxlbiwKKwkJCQkJCSAgMCwgcGMpOworCQlpZiAoIWV2ZW50KQorCQkJcmV0dXJuOworCQl0ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJCWdvdG8gcmVjb3JkX2l0OworCX0KKworCWlmICghYnQtPnJjaGFuKQorCQlyZXR1cm47CisKKwl0ID0gcmVsYXlfcmVzZXJ2ZShidC0+cmNoYW4sIHNpemVvZigqdCkgKyBsZW4pOworCWlmICh0KSB7CisJCXQtPm1hZ2ljID0gQkxLX0lPX1RSQUNFX01BR0lDIHwgQkxLX0lPX1RSQUNFX1ZFUlNJT047CisJCXQtPnRpbWUgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CityZWNvcmRfaXQ6CisJCXQtPmRldmljZSA9IGJ0LT5kZXY7CisJCXQtPmFjdGlvbiA9IGFjdGlvbjsKKwkJdC0+cGlkID0gcGlkOworCQl0LT5jcHUgPSBjcHU7CisJCXQtPnBkdV9sZW4gPSBsZW47CisJCW1lbWNweSgodm9pZCAqKSB0ICsgc2l6ZW9mKCp0KSwgZGF0YSwgbGVuKTsKKworCQlpZiAoYmxrX3RyYWNlcikKKwkJCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJsa190ciwgZXZlbnQsIDAsIHBjKTsKKwl9Cit9CisKKy8qCisgKiBTZW5kIG91dCBhIG5vdGlmeSBmb3IgdGhpcyBwcm9jZXNzLCBpZiB3ZSBoYXZlbid0IGRvbmUgc28gc2luY2UgYSB0cmFjZQorICogc3RhcnRlZAorICovCitzdGF0aWMgdm9pZCB0cmFjZV9ub3RlX3RzayhzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdHNrLT5idHJhY2Vfc2VxID0gYmxrdHJhY2Vfc2VxOworCXRyYWNlX25vdGUoYnQsIHRzay0+cGlkLCBCTEtfVE5fUFJPQ0VTUywgdHNrLT5jb21tLCBzaXplb2YodHNrLT5jb21tKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNlX25vdGVfdGltZShzdHJ1Y3QgYmxrX3RyYWNlICpidCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHdvcmRzWzJdOworCisJZ2V0bnN0aW1lb2ZkYXkoJm5vdyk7CisJd29yZHNbMF0gPSBub3cudHZfc2VjOworCXdvcmRzWzFdID0gbm93LnR2X25zZWM7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdHJhY2Vfbm90ZShidCwgMCwgQkxLX1ROX1RJTUVTVEFNUCwgd29yZHMsIHNpemVvZih3b3JkcykpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwordm9pZCBfX3RyYWNlX25vdGVfbWVzc2FnZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IG47CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciAqYnVmOworCisJaWYgKHVubGlrZWx5KGJ0LT50cmFjZV9zdGF0ZSAhPSBCbGt0cmFjZV9ydW5uaW5nICYmCisJCSAgICAgIWJsa190cmFjZXJfZW5hYmxlZCkpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlidWYgPSBwZXJfY3B1X3B0cihidC0+bXNnX2RhdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwluID0gdnNjbnByaW50ZihidWYsIEJMS19UTl9NQVhfTVNHLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCXRyYWNlX25vdGUoYnQsIDAsIEJMS19UTl9NRVNTQUdFLCBidWYsIG4pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fdHJhY2Vfbm90ZV9tZXNzYWdlKTsKKworc3RhdGljIGludCBhY3RfbG9nX2NoZWNrKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1MzIgd2hhdCwgc2VjdG9yX3Qgc2VjdG9yLAorCQkJIHBpZF90IHBpZCkKK3sKKwlpZiAoKChidC0+YWN0X21hc2sgPDwgQkxLX1RDX1NISUZUKSAmIHdoYXQpID09IDApCisJCXJldHVybiAxOworCWlmIChzZWN0b3IgPCBidC0+c3RhcnRfbGJhIHx8IHNlY3RvciA+IGJ0LT5lbmRfbGJhKQorCQlyZXR1cm4gMTsKKwlpZiAoYnQtPnBpZCAmJiBwaWQgIT0gYnQtPnBpZCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERhdGEgZGlyZWN0aW9uIGJpdCBsb29rdXAKKyAqLworc3RhdGljIGNvbnN0IHUzMiBkZGlyX2FjdFsyXSA9IHsgQkxLX1RDX0FDVChCTEtfVENfUkVBRCksCisJCQkJIEJMS19UQ19BQ1QoQkxLX1RDX1dSSVRFKSB9OworCisvKiBUaGUgaWxvZzIoKSBjYWxscyBmYWxsIG91dCBiZWNhdXNlIHRoZXkncmUgY29uc3RhbnQgKi8KKyNkZWZpbmUgTUFTS19UQ19CSVQocncsIF9fbmFtZSkgKChydyAmICgxIDw8IEJJT19SV18gIyMgX19uYW1lKSkgPDwgXAorCSAgKGlsb2cyKEJMS19UQ18gIyMgX19uYW1lKSArIEJMS19UQ19TSElGVCAtIEJJT19SV18gIyMgX19uYW1lKSkKKworLyoKKyAqIFRoZSB3b3JrZXIgZm9yIHRoZSB2YXJpb3VzIGJsa19hZGRfdHJhY2UqKCkgdHlwZXMuIEZpbGxzIG91dCBhCisgKiBibGtfaW9fdHJhY2Ugc3RydWN0dXJlIGFuZCBwbGFjZXMgaXQgaW4gYSBwZXItY3B1IHN1YmJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywKKwkJICAgICBpbnQgcncsIHUzMiB3aGF0LCBpbnQgZXJyb3IsIGludCBwZHVfbGVuLCB2b2lkICpwZHVfZGF0YSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCA9IE5VTEw7CisJc3RydWN0IGJsa19pb190cmFjZSAqdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nICpzZXF1ZW5jZTsKKwlwaWRfdCBwaWQ7CisJaW50IGNwdSwgcGMgPSAwOworCWJvb2wgYmxrX3RyYWNlciA9IGJsa190cmFjZXJfZW5hYmxlZDsKKworCWlmICh1bmxpa2VseShidC0+dHJhY2Vfc3RhdGUgIT0gQmxrdHJhY2VfcnVubmluZyAmJiAhYmxrX3RyYWNlcikpCisJCXJldHVybjsKKworCXdoYXQgfD0gZGRpcl9hY3RbcncgJiBXUklURV07CisJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgQkFSUklFUik7CisJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgU1lOQ0lPKTsKKwl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBBSEVBRCk7CisJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgTUVUQSk7CisJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgRElTQ0FSRCk7CisKKwlwaWQgPSB0c2stPnBpZDsKKwlpZiAodW5saWtlbHkoYWN0X2xvZ19jaGVjayhidCwgd2hhdCwgc2VjdG9yLCBwaWQpKSkKKwkJcmV0dXJuOworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoYmxrX3RyYWNlcikgeworCQl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpOworCisJCXBjID0gcHJlZW1wdF9jb3VudCgpOworCQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYmxrX3RyLCBUUkFDRV9CTEssCisJCQkJCQkgIHNpemVvZigqdCkgKyBwZHVfbGVuLAorCQkJCQkJICAwLCBwYyk7CisJCWlmICghZXZlbnQpCisJCQlyZXR1cm47CisJCXQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwkJZ290byByZWNvcmRfaXQ7CisJfQorCisJLyoKKwkgKiBBIHdvcmQgYWJvdXQgdGhlIGxvY2tpbmcgaGVyZSAtIHdlIGRpc2FibGUgaW50ZXJydXB0cyB0byByZXNlcnZlCisJICogc29tZSBzcGFjZSBpbiB0aGUgcmVsYXkgcGVyLWNwdSBidWZmZXIsIHRvIHByZXZlbnQgYW4gaXJxCisJICogZnJvbSBjb21pbmcgaW4gYW5kIHN0ZXBwaW5nIG9uIG91ciB0b2VzLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmICh1bmxpa2VseSh0c2stPmJ0cmFjZV9zZXEgIT0gYmxrdHJhY2Vfc2VxKSkKKwkJdHJhY2Vfbm90ZV90c2soYnQsIHRzayk7CisKKwl0ID0gcmVsYXlfcmVzZXJ2ZShidC0+cmNoYW4sIHNpemVvZigqdCkgKyBwZHVfbGVuKTsKKwlpZiAodCkgeworCQlzZXF1ZW5jZSA9IHBlcl9jcHVfcHRyKGJ0LT5zZXF1ZW5jZSwgY3B1KTsKKworCQl0LT5tYWdpYyA9IEJMS19JT19UUkFDRV9NQUdJQyB8IEJMS19JT19UUkFDRV9WRVJTSU9OOworCQl0LT5zZXF1ZW5jZSA9ICsrKCpzZXF1ZW5jZSk7CisJCXQtPnRpbWUgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CityZWNvcmRfaXQ6CisJCS8qCisJCSAqIFRoZXNlIHR3byBhcmUgbm90IG5lZWRlZCBpbiBmdHJhY2UgYXMgdGhleSBhcmUgaW4gdGhlCisJCSAqIGdlbmVyaWMgdHJhY2VfZW50cnksIGZpbGxlZCBieSB0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlLAorCQkgKiBidXQgZm9yIHRoZSB0cmFjZV9ldmVudC0+YmluKCkgc3ludGhlc2l6ZXIgYmVuZWZpdCB3ZSBkbyBpdAorCQkgKiBoZXJlIHRvby4KKwkJICovCisJCXQtPmNwdSA9IGNwdTsKKwkJdC0+cGlkID0gcGlkOworCisJCXQtPnNlY3RvciA9IHNlY3RvcjsKKwkJdC0+Ynl0ZXMgPSBieXRlczsKKwkJdC0+YWN0aW9uID0gd2hhdDsKKwkJdC0+ZGV2aWNlID0gYnQtPmRldjsKKwkJdC0+ZXJyb3IgPSBlcnJvcjsKKwkJdC0+cGR1X2xlbiA9IHBkdV9sZW47CisKKwkJaWYgKHBkdV9sZW4pCisJCQltZW1jcHkoKHZvaWQgKikgdCArIHNpemVvZigqdCksIHBkdV9kYXRhLCBwZHVfbGVuKTsKKworCQlpZiAoYmxrX3RyYWNlcikgeworCQkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYmxrX3RyLCBldmVudCwgMCwgcGMpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYmxrX3RyZWVfcm9vdDsKK3N0YXRpYyBERUZJTkVfTVVURVgoYmxrX3RyZWVfbXV0ZXgpOworCitzdGF0aWMgdm9pZCBibGtfdHJhY2VfZnJlZShzdHJ1Y3QgYmxrX3RyYWNlICpidCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShidC0+bXNnX2ZpbGUpOworCWRlYnVnZnNfcmVtb3ZlKGJ0LT5kcm9wcGVkX2ZpbGUpOworCXJlbGF5X2Nsb3NlKGJ0LT5yY2hhbik7CisJZnJlZV9wZXJjcHUoYnQtPnNlcXVlbmNlKTsKKwlmcmVlX3BlcmNwdShidC0+bXNnX2RhdGEpOworCWtmcmVlKGJ0KTsKK30KKworc3RhdGljIHZvaWQgYmxrX3RyYWNlX2NsZWFudXAoc3RydWN0IGJsa190cmFjZSAqYnQpCit7CisJYmxrX3RyYWNlX2ZyZWUoYnQpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZibGtfcHJvYmVzX3JlZikpCisJCWJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7Cit9CisKK2ludCBibGtfdHJhY2VfcmVtb3ZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0OworCisJYnQgPSB4Y2hnKCZxLT5ibGtfdHJhY2UsIE5VTEwpOworCWlmICghYnQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJ0LT50cmFjZV9zdGF0ZSAhPSBCbGt0cmFjZV9ydW5uaW5nKQorCQlibGtfdHJhY2VfY2xlYW51cChidCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9yZW1vdmUpOworCitzdGF0aWMgaW50IGJsa19kcm9wcGVkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBibGtfZHJvcHBlZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwgYXRvbWljX3JlYWQoJmJ0LT5kcm9wcGVkKSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJsa19kcm9wcGVkX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm9wZW4gPQkJYmxrX2Ryb3BwZWRfb3BlbiwKKwkucmVhZCA9CQlibGtfZHJvcHBlZF9yZWFkLAorfTsKKworc3RhdGljIGludCBibGtfbXNnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBibGtfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgKm1zZzsKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKKworCWlmIChjb3VudCA+IEJMS19UTl9NQVhfTVNHKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1zZyA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmIChtc2cgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIobXNnLCBidWZmZXIsIGNvdW50KSkgeworCQlrZnJlZShtc2cpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlidCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlfX3RyYWNlX25vdGVfbWVzc2FnZShidCwgIiVzIiwgbXNnKTsKKwlrZnJlZShtc2cpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibGtfbXNnX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm9wZW4gPQkJYmxrX21zZ19vcGVuLAorCS53cml0ZSA9CWJsa19tc2dfd3JpdGUsCit9OworCisvKgorICogS2VlcCB0cmFjayBvZiBob3cgbWFueSB0aW1lcyB3ZSBlbmNvdW50ZXJlZCBhIGZ1bGwgc3ViYnVmZmVyLCB0byBhaWQKKyAqIHRoZSB1c2VyIHNwYWNlIGFwcCBpbiB0ZWxsaW5nIGhvdyBtYW55IGxvc3QgZXZlbnRzIHRoZXJlIHdlcmUuCisgKi8KK3N0YXRpYyBpbnQgYmxrX3N1YmJ1Zl9zdGFydF9jYWxsYmFjayhzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHZvaWQgKnN1YmJ1ZiwKKwkJCQkgICAgIHZvaWQgKnByZXZfc3ViYnVmLCBzaXplX3QgcHJldl9wYWRkaW5nKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0OworCisJaWYgKCFyZWxheV9idWZfZnVsbChidWYpKQorCQlyZXR1cm4gMTsKKworCWJ0ID0gYnVmLT5jaGFuLT5wcml2YXRlX2RhdGE7CisJYXRvbWljX2luYygmYnQtPmRyb3BwZWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsa19yZW1vdmVfYnVmX2ZpbGVfY2FsbGJhY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisJZGVidWdmc19yZW1vdmUoZGVudHJ5KTsKKworCS8qCisJKiB0aGlzIHdpbGwgZmFpbCBmb3IgYWxsIGJ1dCB0aGUgbGFzdCBmaWxlLCBidXQgdGhhdCBpcyBvay4gd2hhdCB3ZQorCSogY2FyZSBhYm91dCBpcyB0aGUgdG9wIGxldmVsIGJ1dHMtPm5hbWUgZGlyZWN0b3J5IGdvaW5nIGF3YXksIHdoZW4KKwkqIHRoZSBsYXN0IHRyYWNlIGZpbGUgaXMgZ29uZS4gVGhlbiB3ZSBkb24ndCBoYXZlIHRvIHJtZGlyKCkgdGhhdAorCSogbWFudWFsbHkgb24gdHJhY2Ugc3RvcCwgc28gaXQgbmljZWx5IHNvbHZlcyB0aGUgaXNzdWUgd2l0aAorCSogZm9yY2Uga2lsbGluZyBvZiBydW5uaW5nIHRyYWNlcy4KKwkqLworCisJZGVidWdmc19yZW1vdmUocGFyZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmJsa19jcmVhdGVfYnVmX2ZpbGVfY2FsbGJhY2soY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJCQkgICBpbnQgbW9kZSwKKwkJCQkJCSAgIHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKKwkJCQkJCSAgIGludCAqaXNfZ2xvYmFsKQoreworCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVuYW1lLCBtb2RlLCBwYXJlbnQsIGJ1ZiwKKwkJCQkJJnJlbGF5X2ZpbGVfb3BlcmF0aW9ucyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzIGJsa19yZWxheV9jYWxsYmFja3MgPSB7CisJLnN1YmJ1Zl9zdGFydAkJPSBibGtfc3ViYnVmX3N0YXJ0X2NhbGxiYWNrLAorCS5jcmVhdGVfYnVmX2ZpbGUJPSBibGtfY3JlYXRlX2J1Zl9maWxlX2NhbGxiYWNrLAorCS5yZW1vdmVfYnVmX2ZpbGUJPSBibGtfcmVtb3ZlX2J1Zl9maWxlX2NhbGxiYWNrLAorfTsKKworLyoKKyAqIFNldHVwIGV2ZXJ5dGhpbmcgcmVxdWlyZWQgdG8gc3RhcnQgdHJhY2luZworICovCitpbnQgZG9fYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCisJCQlzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAgKmJ1dHMpCit7CisJc3RydWN0IGJsa190cmFjZSAqb2xkX2J0LCAqYnQgPSBOVUxMOworCXN0cnVjdCBkZW50cnkgKmRpciA9IE5VTEw7CisJaW50IHJldCwgaTsKKworCWlmICghYnV0cy0+YnVmX3NpemUgfHwgIWJ1dHMtPmJ1Zl9ucikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJuY3B5KGJ1dHMtPm5hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7CisJYnV0cy0+bmFtZVtCTEtUUkFDRV9CREVWX1NJWkUgLSAxXSA9ICdcMCc7CisKKwkvKgorCSAqIHNvbWUgZGV2aWNlIG5hbWVzIGhhdmUgbGFyZ2VyIHBhdGhzIC0gY29udmVydCB0aGUgc2xhc2hlcworCSAqIHRvIHVuZGVyc2NvcmVzIGZvciB0aGlzIHRvIHdvcmsgYXMgZXhwZWN0ZWQKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RybGVuKGJ1dHMtPm5hbWUpOyBpKyspCisJCWlmIChidXRzLT5uYW1lW2ldID09ICcvJykKKwkJCWJ1dHMtPm5hbWVbaV0gPSAnXyc7CisKKwlidCA9IGt6YWxsb2Moc2l6ZW9mKCpidCksIEdGUF9LRVJORUwpOworCWlmICghYnQpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gLUVOT01FTTsKKwlidC0+c2VxdWVuY2UgPSBhbGxvY19wZXJjcHUodW5zaWduZWQgbG9uZyk7CisJaWYgKCFidC0+c2VxdWVuY2UpCisJCWdvdG8gZXJyOworCisJYnQtPm1zZ19kYXRhID0gX19hbGxvY19wZXJjcHUoQkxLX1ROX01BWF9NU0csIF9fYWxpZ25vZl9fKGNoYXIpKTsKKwlpZiAoIWJ0LT5tc2dfZGF0YSkKKwkJZ290byBlcnI7CisKKwlyZXQgPSAtRU5PRU5UOworCisJbXV0ZXhfbG9jaygmYmxrX3RyZWVfbXV0ZXgpOworCWlmICghYmxrX3RyZWVfcm9vdCkgeworCQlibGtfdHJlZV9yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJibG9jayIsIE5VTEwpOworCQlpZiAoIWJsa190cmVlX3Jvb3QpIHsKKwkJCW11dGV4X3VubG9jaygmYmxrX3RyZWVfbXV0ZXgpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZibGtfdHJlZV9tdXRleCk7CisKKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoYnV0cy0+bmFtZSwgYmxrX3RyZWVfcm9vdCk7CisKKwlpZiAoIWRpcikKKwkJZ290byBlcnI7CisKKwlidC0+ZGlyID0gZGlyOworCWJ0LT5kZXYgPSBkZXY7CisJYXRvbWljX3NldCgmYnQtPmRyb3BwZWQsIDApOworCisJcmV0ID0gLUVJTzsKKwlidC0+ZHJvcHBlZF9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZHJvcHBlZCIsIDA0NDQsIGRpciwgYnQsCisJCQkJCSAgICAgICAmYmxrX2Ryb3BwZWRfZm9wcyk7CisJaWYgKCFidC0+ZHJvcHBlZF9maWxlKQorCQlnb3RvIGVycjsKKworCWJ0LT5tc2dfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1zZyIsIDAyMjIsIGRpciwgYnQsICZibGtfbXNnX2ZvcHMpOworCWlmICghYnQtPm1zZ19maWxlKQorCQlnb3RvIGVycjsKKworCWJ0LT5yY2hhbiA9IHJlbGF5X29wZW4oInRyYWNlIiwgZGlyLCBidXRzLT5idWZfc2l6ZSwKKwkJCQlidXRzLT5idWZfbnIsICZibGtfcmVsYXlfY2FsbGJhY2tzLCBidCk7CisJaWYgKCFidC0+cmNoYW4pCisJCWdvdG8gZXJyOworCisJYnQtPmFjdF9tYXNrID0gYnV0cy0+YWN0X21hc2s7CisJaWYgKCFidC0+YWN0X21hc2spCisJCWJ0LT5hY3RfbWFzayA9ICh1MTYpIC0xOworCisJYnQtPnN0YXJ0X2xiYSA9IGJ1dHMtPnN0YXJ0X2xiYTsKKwlidC0+ZW5kX2xiYSA9IGJ1dHMtPmVuZF9sYmE7CisJaWYgKCFidC0+ZW5kX2xiYSkKKwkJYnQtPmVuZF9sYmEgPSAtMVVMTDsKKworCWJ0LT5waWQgPSBidXRzLT5waWQ7CisJYnQtPnRyYWNlX3N0YXRlID0gQmxrdHJhY2Vfc2V0dXA7CisKKwlyZXQgPSAtRUJVU1k7CisJb2xkX2J0ID0geGNoZygmcS0+YmxrX3RyYWNlLCBidCk7CisJaWYgKG9sZF9idCkgeworCQkodm9pZCkgeGNoZygmcS0+YmxrX3RyYWNlLCBvbGRfYnQpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmJsa19wcm9iZXNfcmVmKSA9PSAxKQorCQlibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTsKKworCXJldHVybiAwOworZXJyOgorCWJsa190cmFjZV9mcmVlKGJ0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCisJCSAgICBjaGFyIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCBidXRzOworCWludCByZXQ7CisKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcigmYnV0cywgYXJnLCBzaXplb2YoYnV0cykpOworCWlmIChyZXQpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gZG9fYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgJmJ1dHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmJ1dHMsIHNpemVvZihidXRzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc2V0dXApOworCitpbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KQoreworCWludCByZXQ7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwlpZiAoYnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEZvciBzdGFydGluZyBhIHRyYWNlLCB3ZSBjYW4gdHJhbnNpdGlvbiBmcm9tIGEgc2V0dXAgb3Igc3RvcHBlZAorCSAqIHRyYWNlLiBGb3Igc3RvcHBpbmcgYSB0cmFjZSwgdGhlIHN0YXRlIG11c3QgYmUgcnVubmluZworCSAqLworCXJldCA9IC1FSU5WQUw7CisJaWYgKHN0YXJ0KSB7CisJCWlmIChidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2Vfc2V0dXAgfHwKKwkJICAgIGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9zdG9wcGVkKSB7CisJCQlibGt0cmFjZV9zZXErKzsKKwkJCXNtcF9tYigpOworCQkJYnQtPnRyYWNlX3N0YXRlID0gQmxrdHJhY2VfcnVubmluZzsKKworCQkJdHJhY2Vfbm90ZV90aW1lKGJ0KTsKKwkJCXJldCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3J1bm5pbmcpIHsKKwkJCWJ0LT50cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3N0b3BwZWQ7CisJCQlyZWxheV9mbHVzaChidC0+cmNoYW4pOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc3RhcnRzdG9wKTsKKworLyoqCisgKiBibGtfdHJhY2VfaW9jdGw6IC0gaGFuZGxlIHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIHRyYWNpbmcKKyAqIEBiZGV2Ogl0aGUgYmxvY2sgZGV2aWNlCisgKiBAY21kOgl0aGUgaW9jdGwgY21kCisgKiBAYXJnOgl0aGUgYXJndW1lbnQgZGF0YSwgaWYgYW55CisgKgorICoqLworaW50IGJsa190cmFjZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBjbWQsIGNoYXIgX191c2VyICphcmcpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CisJaW50IHJldCwgc3RhcnQgPSAwOworCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKKworCXEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKwlpZiAoIXEpCisJCXJldHVybiAtRU5YSU87CisKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQkxLVFJBQ0VTRVRVUDoKKwkJYmRldm5hbWUoYmRldiwgYik7CisJCXJldCA9IGJsa190cmFjZV9zZXR1cChxLCBiLCBiZGV2LT5iZF9kZXYsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgQkxLVFJBQ0VTVEFSVDoKKwkJc3RhcnQgPSAxOworCWNhc2UgQkxLVFJBQ0VTVE9QOgorCQlyZXQgPSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KTsKKwkJYnJlYWs7CisJY2FzZSBCTEtUUkFDRVRFQVJET1dOOgorCQlyZXQgPSBibGtfdHJhY2VfcmVtb3ZlKHEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PVFRZOworCQlicmVhazsKKwl9CisKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGJsa190cmFjZV9zaHV0ZG93bjogLSBzdG9wIGFuZCBjbGVhbnVwIHRyYWNlIHN0cnVjdHVyZXMKKyAqIEBxOiAgICB0aGUgcmVxdWVzdCBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZQorICoKKyAqKi8KK3ZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCWlmIChxLT5ibGtfdHJhY2UpIHsKKwkJYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCAwKTsKKwkJYmxrX3RyYWNlX3JlbW92ZShxKTsKKwl9Cit9CisKKy8qCisgKiBibGt0cmFjZSBwcm9iZXMKKyAqLworCisvKioKKyAqIGJsa19hZGRfdHJhY2VfcnEgLSBBZGQgYSB0cmFjZSBmb3IgYSByZXF1ZXN0IG9yaWVudGVkIGFjdGlvbgorICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCisgKiBAcnE6CQl0aGUgc291cmNlIHJlcXVlc3QKKyAqIEB3aGF0Ogl0aGUgYWN0aW9uCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgUmVjb3JkcyBhbiBhY3Rpb24gYWdhaW5zdCBhIHJlcXVlc3QuIFdpbGwgbG9nIHRoZSBiaW8gb2Zmc2V0ICsgc2l6ZS4KKyAqCisgKiovCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgIHUzMiB3aGF0KQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCWludCBydyA9IHJxLT5jbWRfZmxhZ3MgJiAweDAzOworCisJaWYgKGxpa2VseSghYnQpKQorCQlyZXR1cm47CisKKwlpZiAoYmxrX2Rpc2NhcmRfcnEocnEpKQorCQlydyB8PSAoMSA8PCBCSU9fUldfRElTQ0FSRCk7CisKKwlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CisJCXdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfUEMpOworCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIHJxLT5kYXRhX2xlbiwgcncsIHdoYXQsIHJxLT5lcnJvcnMsCisJCQkJc2l6ZW9mKHJxLT5jbWQpLCBycS0+Y21kKTsKKwl9IGVsc2UgIHsKKwkJd2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19GUyk7CisJCV9fYmxrX2FkZF90cmFjZShidCwgcnEtPmhhcmRfc2VjdG9yLCBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDksCisJCQkJcncsIHdoYXQsIHJxLT5lcnJvcnMsIDAsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9hYm9ydChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9BQk9SVCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0lOU0VSVCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfaXNzdWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfSVNTVUUpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgICBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX1JFUVVFVUUpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJCSAgICAgIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfQ09NUExFVEUpOworfQorCisvKioKKyAqIGJsa19hZGRfdHJhY2VfYmlvIC0gQWRkIGEgdHJhY2UgZm9yIGEgYmlvIG9yaWVudGVkIGFjdGlvbgorICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCisgKiBAYmlvOgl0aGUgc291cmNlIGJpbworICogQHdoYXQ6CXRoZSBhY3Rpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBSZWNvcmRzIGFuIGFjdGlvbiBhZ2FpbnN0IGEgYmlvLiBXaWxsIGxvZyB0aGUgYmlvIG9mZnNldCArIHNpemUuCisgKgorICoqLworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywKKwkJCQkgICAgIHUzMiB3aGF0KQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGxpa2VseSghYnQpKQorCQlyZXR1cm47CisKKwlfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsIHdoYXQsCisJCQkhYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpLCAwLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fYm91bmNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfQk9VTkNFKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9DT01QTEVURSk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkJc3RydWN0IGJpbyAqYmlvKQoreworCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0JBQ0tNRVJHRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJCSBzdHJ1Y3QgYmlvICpiaW8pCit7CisJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfRlJPTlRNRVJHRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfUVVFVUUpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2dldHJxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJCXN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KQoreworCWlmIChiaW8pCisJCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0dFVFJRKTsKKwllbHNlIHsKKwkJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwkJaWYgKGJ0KQorCQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCBydywgQkxLX1RBX0dFVFJRLCAwLCAwLCBOVUxMKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zbGVlcHJxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJCSAgc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpCit7CisJaWYgKGJpbykKKwkJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfU0xFRVBSUSk7CisJZWxzZSB7CisJCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJCWlmIChidCkKKwkJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgMCwgcncsIEJMS19UQV9TTEVFUFJRLAorCQkJCQkwLCAwLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcGx1ZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChidCkKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfUExVRywgMCwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfdW5wbHVnX2lvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGJ0KSB7CisJCXVuc2lnbmVkIGludCBwZHUgPSBxLT5ycS5jb3VudFtSRUFEXSArIHEtPnJxLmNvdW50W1dSSVRFXTsKKwkJX19iZTY0IHJwZHUgPSBjcHVfdG9fYmU2NChwZHUpOworCisJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgMCwgMCwgQkxLX1RBX1VOUExVR19JTywgMCwKKwkJCQlzaXplb2YocnBkdSksICZycGR1KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfdW5wbHVnX3RpbWVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGJ0KSB7CisJCXVuc2lnbmVkIGludCBwZHUgPSBxLT5ycS5jb3VudFtSRUFEXSArIHEtPnJxLmNvdW50W1dSSVRFXTsKKwkJX19iZTY0IHJwZHUgPSBjcHVfdG9fYmU2NChwZHUpOworCisJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgMCwgMCwgQkxLX1RBX1VOUExVR19USU1FUiwgMCwKKwkJCQlzaXplb2YocnBkdSksICZycGR1KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2Vfc3BsaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywKKwkJCQl1bnNpZ25lZCBpbnQgcGR1KQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGJ0KSB7CisJCV9fYmU2NCBycGR1ID0gY3B1X3RvX2JlNjQocGR1KTsKKworCQlfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsCisJCQkJQkxLX1RBX1NQTElULCAhYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpLAorCQkJCXNpemVvZihycGR1KSwgJnJwZHUpOworCX0KK30KKworLyoqCisgKiBibGtfYWRkX3RyYWNlX3JlbWFwIC0gQWRkIGEgdHJhY2UgZm9yIGEgcmVtYXAgb3BlcmF0aW9uCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBiaW86CXRoZSBzb3VyY2UgYmlvCisgKiBAZGV2Ogl0YXJnZXQgZGV2aWNlCisgKiBAZnJvbToJc291cmNlIHNlY3RvcgorICogQHRvOgkJdGFyZ2V0IHNlY3RvcgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIERldmljZSBtYXBwZXIgb3IgcmFpZCB0YXJnZXQgc29tZXRpbWVzIG5lZWQgdG8gc3BsaXQgYSBiaW8gYmVjYXVzZQorICogICAgIGl0IHNwYW5zIGEgc3RyaXBlIChvciBzaW1pbGFyKS4gQWRkIGEgdHJhY2UgZm9yIHRoYXQgYWN0aW9uLgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcmVtYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywKKwkJCQkgICAgICAgZGV2X3QgZGV2LCBzZWN0b3JfdCBmcm9tLCBzZWN0b3JfdCB0bykKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHI7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCXIuZGV2aWNlID0gY3B1X3RvX2JlMzIoZGV2KTsKKwlyLmRldmljZV9mcm9tID0gY3B1X3RvX2JlMzIoYmlvLT5iaV9iZGV2LT5iZF9kZXYpOworCXIuc2VjdG9yID0gY3B1X3RvX2JlNjQodG8pOworCisJX19ibGtfYWRkX3RyYWNlKGJ0LCBmcm9tLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsIEJMS19UQV9SRU1BUCwKKwkJCSFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSksIHNpemVvZihyKSwgJnIpOworfQorCisvKioKKyAqIGJsa19hZGRfZHJpdmVyX2RhdGEgLSBBZGQgYmluYXJ5IG1lc3NhZ2Ugd2l0aCBkcml2ZXItc3BlY2lmaWMgZGF0YQorICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCisgKiBAcnE6CQlpbyByZXF1ZXN0CisgKiBAZGF0YToJZHJpdmVyLXNwZWNpZmljIGRhdGEKKyAqIEBsZW46CWxlbmd0aCBvZiBkcml2ZXItc3BlY2lmaWMgZGF0YQorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIFNvbWUgZHJpdmVycyBtaWdodCB3YW50IHRvIHdyaXRlIGRyaXZlci1zcGVjaWZpYyBkYXRhIHBlciByZXF1ZXN0LgorICoKKyAqKi8KK3ZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCSBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCBycS0+ZGF0YV9sZW4sIDAsIEJMS19UQV9EUlZfREFUQSwKKwkJCQlycS0+ZXJyb3JzLCBsZW4sIGRhdGEpOworCWVsc2UKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCBycS0+aGFyZF9zZWN0b3IsIHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOSwKKwkJCQkwLCBCTEtfVEFfRFJWX0RBVEEsIHJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChibGtfYWRkX2RyaXZlcl9kYXRhKTsKKworc3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2Fib3J0KGJsa19hZGRfdHJhY2VfcnFfYWJvcnQpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JvdW5jZShibGtfYWRkX3RyYWNlX2Jpb19ib3VuY2UpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19nZXRycShibGtfYWRkX3RyYWNlX2dldHJxKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfc2xlZXBycShibGtfYWRkX3RyYWNlX3NsZWVwcnEpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1Zyk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z190aW1lcihibGtfYWRkX3RyYWNlX3VucGx1Z190aW1lcik7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z19pbyhibGtfYWRkX3RyYWNlX3VucGx1Z19pbyk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19yZW1hcChibGtfYWRkX3RyYWNlX3JlbWFwKTsKKwlXQVJOX09OKHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpCit7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19yZW1hcChibGtfYWRkX3RyYWNlX3JlbWFwKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnX2lvKGJsa19hZGRfdHJhY2VfdW5wbHVnX2lvKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z190aW1lcihibGtfYWRkX3RyYWNlX3VucGx1Z190aW1lcik7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19wbHVnKGJsa19hZGRfdHJhY2VfcGx1Zyk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zbGVlcHJxKGJsa19hZGRfdHJhY2Vfc2xlZXBycSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19nZXRycShibGtfYWRkX3RyYWNlX2dldHJxKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYm91bmNlKGJsa19hZGRfdHJhY2VfYmlvX2JvdW5jZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9jb21wbGV0ZShibGtfYWRkX3RyYWNlX3JxX2NvbXBsZXRlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0KTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2Fib3J0KGJsa19hZGRfdHJhY2VfcnFfYWJvcnQpOworCisJdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7Cit9CisKKy8qCisgKiBzdHJ1Y3QgYmxrX2lvX3RyYWNlciBmb3JtYXR0aW5nIHJvdXRpbmVzCisgKi8KKworc3RhdGljIHZvaWQgZmlsbF9yd2JzKGNoYXIgKnJ3YnMsIGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UgKnQpCit7CisJaW50IGkgPSAwOworCWludCB0YyA9IHQtPmFjdGlvbiA+PiBCTEtfVENfU0hJRlQ7CisKKwlpZiAodC0+YWN0aW9uID09IEJMS19UTl9NRVNTQUdFKSB7CisJCXJ3YnNbaSsrXSA9ICdOJzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHRjICYgQkxLX1RDX0RJU0NBUkQpCisJCXJ3YnNbaSsrXSA9ICdEJzsKKwllbHNlIGlmICh0YyAmIEJMS19UQ19XUklURSkKKwkJcndic1tpKytdID0gJ1cnOworCWVsc2UgaWYgKHQtPmJ5dGVzKQorCQlyd2JzW2krK10gPSAnUic7CisJZWxzZQorCQlyd2JzW2krK10gPSAnTic7CisKKwlpZiAodGMgJiBCTEtfVENfQUhFQUQpCisJCXJ3YnNbaSsrXSA9ICdBJzsKKwlpZiAodGMgJiBCTEtfVENfQkFSUklFUikKKwkJcndic1tpKytdID0gJ0InOworCWlmICh0YyAmIEJMS19UQ19TWU5DKQorCQlyd2JzW2krK10gPSAnUyc7CisJaWYgKHRjICYgQkxLX1RDX01FVEEpCisJCXJ3YnNbaSsrXSA9ICdNJzsKK291dDoKKwlyd2JzW2ldID0gJ1wwJzsKK30KKworc3RhdGljIGlubGluZQorY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqdGVfYmxrX2lvX3RyYWNlKGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCXJldHVybiAoY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqKWVudDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCB2b2lkICpwZHVfc3RhcnQoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJcmV0dXJuIHRlX2Jsa19pb190cmFjZShlbnQpICsgMTsKK30KKworc3RhdGljIGlubGluZSB1MzIgdF9zZWMoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJcmV0dXJuIHRlX2Jsa19pb190cmFjZShlbnQpLT5ieXRlcyA+PiA5OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyB0X3NlY3Rvcihjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwlyZXR1cm4gdGVfYmxrX2lvX3RyYWNlKGVudCktPnNlY3RvcjsKK30KKworc3RhdGljIGlubGluZSBfX3UxNiB0X2Vycm9yKGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCXJldHVybiB0ZV9ibGtfaW9fdHJhY2UoZW50KS0+ZXJyb3I7Cit9CisKK3N0YXRpYyBfX3U2NCBnZXRfcGR1X2ludChjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwljb25zdCBfX3U2NCAqdmFsID0gcGR1X3N0YXJ0KGVudCk7CisJcmV0dXJuIGJlNjRfdG9fY3B1KCp2YWwpOworfQorCitzdGF0aWMgdm9pZCBnZXRfcGR1X3JlbWFwKGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LAorCQkJICBzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwICpyKQoreworCWNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgKl9fciA9IHBkdV9zdGFydChlbnQpOworCV9fdTY0IHNlY3RvciA9IF9fci0+c2VjdG9yOworCisJci0+ZGV2aWNlID0gYmUzMl90b19jcHUoX19yLT5kZXZpY2UpOworCXItPmRldmljZV9mcm9tID0gYmUzMl90b19jcHUoX19yLT5kZXZpY2VfZnJvbSk7CisJci0+c2VjdG9yID0gYmU2NF90b19jcHUoc2VjdG9yKTsKK30KKwordHlwZWRlZiBpbnQgKGJsa19sb2dfYWN0aW9uX3QpIChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGNvbnN0IGNoYXIgKmFjdCk7CisKK3N0YXRpYyBpbnQgYmxrX2xvZ19hY3Rpb25fY2xhc3NpYyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGNvbnN0IGNoYXIgKmFjdCkKK3sKKwljaGFyIHJ3YnNbNl07CisJdW5zaWduZWQgbG9uZyBsb25nIHRzICA9IGl0ZXItPnRzOworCXVuc2lnbmVkIGxvbmcgbnNlY19yZW0gPSBkb19kaXYodHMsIE5TRUNfUEVSX1NFQyk7CisJdW5zaWduZWQgc2VjcwkgICAgICAgPSAodW5zaWduZWQgbG9uZyl0czsKKwljb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0ID0gdGVfYmxrX2lvX3RyYWNlKGl0ZXItPmVudCk7CisKKwlmaWxsX3J3YnMocndicywgdCk7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLAorCQkJCSIlM2QsJS0zZCAlMmQgJTVkLiUwOWx1ICU1dSAlMnMgJTNzICIsCisJCQkJTUFKT1IodC0+ZGV2aWNlKSwgTUlOT1IodC0+ZGV2aWNlKSwgaXRlci0+Y3B1LAorCQkJCXNlY3MsIG5zZWNfcmVtLCBpdGVyLT5lbnQtPnBpZCwgYWN0LCByd2JzKTsKK30KKworc3RhdGljIGludCBibGtfbG9nX2FjdGlvbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGNvbnN0IGNoYXIgKmFjdCkKK3sKKwljaGFyIHJ3YnNbNl07CisJY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqdCA9IHRlX2Jsa19pb190cmFjZShpdGVyLT5lbnQpOworCisJZmlsbF9yd2JzKHJ3YnMsIHQpOworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlM2QsJS0zZCAlMnMgJTNzICIsCisJCQkJTUFKT1IodC0+ZGV2aWNlKSwgTUlOT1IodC0+ZGV2aWNlKSwgYWN0LCByd2JzKTsKK30KKworc3RhdGljIGludCBibGtfbG9nX2dlbmVyaWMoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJY2hhciBjbWRbVEFTS19DT01NX0xFTl07CisKKwl0cmFjZV9maW5kX2NtZGxpbmUoZW50LT5waWQsIGNtZCk7CisKKwlpZiAodF9zZWMoZW50KSkKKwkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiVsbHUgKyAldSBbJXNdXG4iLAorCQkJCQl0X3NlY3RvcihlbnQpLCB0X3NlYyhlbnQpLCBjbWQpOworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdXG4iLCBjbWQpOworfQorCitzdGF0aWMgaW50IGJsa19sb2dfd2l0aF9lcnJvcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJaWYgKHRfc2VjKGVudCkpCisJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1ICsgJXUgWyVkXVxuIiwgdF9zZWN0b3IoZW50KSwKKwkJCQkJdF9zZWMoZW50KSwgdF9lcnJvcihlbnQpKTsKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSBbJWRdXG4iLCB0X3NlY3RvcihlbnQpLCB0X2Vycm9yKGVudCkpOworfQorCitzdGF0aWMgaW50IGJsa19sb2dfcmVtYXAoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByID0geyAuZGV2aWNlID0gMCwgfTsKKworCWdldF9wZHVfcmVtYXAoZW50LCAmcik7CisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiVsbHUgKyAldSA8LSAoJWQsJWQpICVsbHVcbiIsCisJCQkgICAgICAgdF9zZWN0b3IoZW50KSwKKwkJCSAgICAgICB0X3NlYyhlbnQpLCBNQUpPUihyLmRldmljZSksIE1JTk9SKHIuZGV2aWNlKSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXIuc2VjdG9yKTsKK30KKworc3RhdGljIGludCBibGtfbG9nX3BsdWcoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJY2hhciBjbWRbVEFTS19DT01NX0xFTl07CisKKwl0cmFjZV9maW5kX2NtZGxpbmUoZW50LT5waWQsIGNtZCk7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVzXVxuIiwgY21kKTsKK30KKworc3RhdGljIGludCBibGtfbG9nX3VucGx1ZyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwljaGFyIGNtZFtUQVNLX0NPTU1fTEVOXTsKKworCXRyYWNlX2ZpbmRfY21kbGluZShlbnQtPnBpZCwgY21kKTsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdICVsbHVcbiIsIGNtZCwgZ2V0X3BkdV9pbnQoZW50KSk7Cit9CisKK3N0YXRpYyBpbnQgYmxrX2xvZ19zcGxpdChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwljaGFyIGNtZFtUQVNLX0NPTU1fTEVOXTsKKworCXRyYWNlX2ZpbmRfY21kbGluZShlbnQtPnBpZCwgY21kKTsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1IC8gJWxsdSBbJXNdXG4iLCB0X3NlY3RvcihlbnQpLAorCQkJCWdldF9wZHVfaW50KGVudCksIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgYmxrX2xvZ19tc2coc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJaW50IHJldDsKKwljb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0ID0gdGVfYmxrX2lvX3RyYWNlKGVudCk7CisKKwlyZXQgPSB0cmFjZV9zZXFfcHV0bWVtKHMsIHQgKyAxLCB0LT5wZHVfbGVuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHN0cnVjdCB0cmFjZXIgb3BlcmF0aW9ucworICovCisKK3N0YXRpYyB2b2lkIGJsa190cmFjZXJfcHJpbnRfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlpZiAoIShibGtfdHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykpCisJCXJldHVybjsKKwlzZXFfcHV0cyhtLCAiIyBERVYgICBDUFUgVElNRVNUQU1QICAgICBQSUQgQUNUIEZMR1xuIgorCQkgICAgIiMgIHwgICAgIHwgICAgIHwgICAgICAgICAgIHwgICB8ICAgfFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGJsa190cmFjZXJfc3RhcnQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlibGtfdHJhY2VyX2VuYWJsZWQgPSB0cnVlOworCXRyYWNlX2ZsYWdzICY9IH5UUkFDRV9JVEVSX0NPTlRFWFRfSU5GTzsKK30KKworc3RhdGljIGludCBibGtfdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlibGtfdHIgPSB0cjsKKwlibGtfdHJhY2VyX3N0YXJ0KHRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmxrX3RyYWNlcl9zdG9wKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJYmxrX3RyYWNlcl9lbmFibGVkID0gZmFsc2U7CisJdHJhY2VfZmxhZ3MgfD0gVFJBQ0VfSVRFUl9DT05URVhUX0lORk87Cit9CisKK3N0YXRpYyB2b2lkIGJsa190cmFjZXJfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlibGtfdHJhY2VyX3N0b3AodHIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljb25zdCBjaGFyICphY3RbMl07CisJaW50CSAgICgqcHJpbnQpKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KTsKK30gd2hhdDJhY3RbXSA9IHsKKwlbX19CTEtfVEFfUVVFVUVdCT0ge3sgICJRIiwgInF1ZXVlIiB9LAkgICBibGtfbG9nX2dlbmVyaWMgfSwKKwlbX19CTEtfVEFfQkFDS01FUkdFXQk9IHt7ICAiTSIsICJiYWNrbWVyZ2UiIH0sICBibGtfbG9nX2dlbmVyaWMgfSwKKwlbX19CTEtfVEFfRlJPTlRNRVJHRV0JPSB7eyAgIkYiLCAiZnJvbnRtZXJnZSIgfSwgYmxrX2xvZ19nZW5lcmljIH0sCisJW19fQkxLX1RBX0dFVFJRXQk9IHt7ICAiRyIsICJnZXRycSIgfSwJICAgYmxrX2xvZ19nZW5lcmljIH0sCisJW19fQkxLX1RBX1NMRUVQUlFdCT0ge3sgICJTIiwgInNsZWVwcnEiIH0sCSAgIGJsa19sb2dfZ2VuZXJpYyB9LAorCVtfX0JMS19UQV9SRVFVRVVFXQk9IHt7ICAiUiIsICJyZXF1ZXVlIiB9LAkgICBibGtfbG9nX3dpdGhfZXJyb3IgfSwKKwlbX19CTEtfVEFfSVNTVUVdCT0ge3sgICJEIiwgImlzc3VlIiB9LAkgICBibGtfbG9nX2dlbmVyaWMgfSwKKwlbX19CTEtfVEFfQ09NUExFVEVdCT0ge3sgICJDIiwgImNvbXBsZXRlIiB9LCAgIGJsa19sb2dfd2l0aF9lcnJvciB9LAorCVtfX0JMS19UQV9QTFVHXQkJPSB7eyAgIlAiLCAicGx1ZyIgfSwJICAgYmxrX2xvZ19wbHVnIH0sCisJW19fQkxLX1RBX1VOUExVR19JT10JPSB7eyAgIlUiLCAidW5wbHVnX2lvIiB9LCAgYmxrX2xvZ191bnBsdWcgfSwKKwlbX19CTEtfVEFfVU5QTFVHX1RJTUVSXQk9IHt7ICJVVCIsICJ1bnBsdWdfdGltZXIiIH0sIGJsa19sb2dfdW5wbHVnIH0sCisJW19fQkxLX1RBX0lOU0VSVF0JPSB7eyAgIkkiLCAiaW5zZXJ0IiB9LAkgICBibGtfbG9nX2dlbmVyaWMgfSwKKwlbX19CTEtfVEFfU1BMSVRdCT0ge3sgICJYIiwgInNwbGl0IiB9LAkgICBibGtfbG9nX3NwbGl0IH0sCisJW19fQkxLX1RBX0JPVU5DRV0JPSB7eyAgIkIiLCAiYm91bmNlIiB9LAkgICBibGtfbG9nX2dlbmVyaWMgfSwKKwlbX19CTEtfVEFfUkVNQVBdCT0ge3sgICJBIiwgInJlbWFwIiB9LAkgICBibGtfbG9nX3JlbWFwIH0sCit9OworCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfb25lX2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQlib29sIGNsYXNzaWMpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqdDsKKwl1MTYgd2hhdDsKKwlpbnQgcmV0OworCWJvb2wgbG9uZ19hY3Q7CisJYmxrX2xvZ19hY3Rpb25fdCAqbG9nX2FjdGlvbjsKKworCXQJICAgPSB0ZV9ibGtfaW9fdHJhY2UoaXRlci0+ZW50KTsKKwl3aGF0CSAgID0gdC0+YWN0aW9uICYgKCgxIDw8IEJMS19UQ19TSElGVCkgLSAxKTsKKwlsb25nX2FjdCAgID0gISEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1ZFUkJPU0UpOworCWxvZ19hY3Rpb24gPSBjbGFzc2ljID8gJmJsa19sb2dfYWN0aW9uX2NsYXNzaWMgOiAmYmxrX2xvZ19hY3Rpb247CisKKwlpZiAodC0+YWN0aW9uID09IEJMS19UTl9NRVNTQUdFKSB7CisJCXJldCA9IGxvZ19hY3Rpb24oaXRlciwgbG9uZ19hY3QgPyAibWVzc2FnZSIgOiAibSIpOworCQlpZiAocmV0KQorCQkJcmV0ID0gYmxrX2xvZ19tc2cocywgaXRlci0+ZW50KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHVubGlrZWx5KHdoYXQgPT0gMCB8fCB3aGF0ID49IEFSUkFZX1NJWkUod2hhdDJhY3QpKSkKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiQmFkIHBjIGFjdGlvbiAleFxuIiwgd2hhdCk7CisJZWxzZSB7CisJCXJldCA9IGxvZ19hY3Rpb24oaXRlciwgd2hhdDJhY3Rbd2hhdF0uYWN0W2xvbmdfYWN0XSk7CisJCWlmIChyZXQpCisJCQlyZXQgPSB3aGF0MmFjdFt3aGF0XS5wcmludChzLCBpdGVyLT5lbnQpOworCX0KK291dDoKKwlyZXR1cm4gcmV0ID8gVFJBQ0VfVFlQRV9IQU5ETEVEIDogVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBibGtfdHJhY2VfZXZlbnRfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICAgICAgaW50IGZsYWdzKQoreworCWlmICghdHJhY2VfcHJpbnRfY29udGV4dChpdGVyKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIHByaW50X29uZV9saW5lKGl0ZXIsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBibGtfdHJhY2Vfc3ludGhlc2l6ZV9vbGRfdHJhY2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCXN0cnVjdCBibGtfaW9fdHJhY2UgKnQgPSAoc3RydWN0IGJsa19pb190cmFjZSAqKWl0ZXItPmVudDsKKwljb25zdCBpbnQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJsa19pb190cmFjZSwgc2VjdG9yKTsKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlIG9sZCA9IHsKKwkJLm1hZ2ljCSAgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTiwKKwkJLnRpbWUgICAgID0gaXRlci0+dHMsCisJfTsKKworCWlmICghdHJhY2Vfc2VxX3B1dG1lbShzLCAmb2xkLCBvZmZzZXQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdHJhY2Vfc2VxX3B1dG1lbShzLCAmdC0+c2VjdG9yLAorCQkJCXNpemVvZihvbGQpIC0gb2Zmc2V0ICsgdC0+cGR1X2xlbik7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAorYmxrX3RyYWNlX2V2ZW50X3ByaW50X2JpbmFyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlyZXR1cm4gYmxrX3RyYWNlX3N5bnRoZXNpemVfb2xkX3RyYWNlKGl0ZXIpID8KKwkJCVRSQUNFX1RZUEVfSEFORExFRCA6IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgYmxrX3RyYWNlcl9wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlpZiAoIShibGtfdHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykpCisJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKKworCXJldHVybiBwcmludF9vbmVfbGluZShpdGVyLCB0cnVlKTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZXIgYmxrX3RyYWNlciBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJibGsiLAorCS5pbml0CQk9IGJsa190cmFjZXJfaW5pdCwKKwkucmVzZXQJCT0gYmxrX3RyYWNlcl9yZXNldCwKKwkuc3RhcnQJCT0gYmxrX3RyYWNlcl9zdGFydCwKKwkuc3RvcAkJPSBibGtfdHJhY2VyX3N0b3AsCisJLnByaW50X2hlYWRlcgk9IGJsa190cmFjZXJfcHJpbnRfaGVhZGVyLAorCS5wcmludF9saW5lCT0gYmxrX3RyYWNlcl9wcmludF9saW5lLAorCS5mbGFncwkJPSAmYmxrX3RyYWNlcl9mbGFncywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfYmxrX2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX0JMSywKKwkudHJhY2UJCT0gYmxrX3RyYWNlX2V2ZW50X3ByaW50LAorCS5iaW5hcnkJCT0gYmxrX3RyYWNlX2V2ZW50X3ByaW50X2JpbmFyeSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfYmxrX3RyYWNlcih2b2lkKQoreworCWlmICghcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZ0cmFjZV9ibGtfZXZlbnQpKSB7CisJCXByX3dhcm5pbmcoIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciBibG9jayBldmVudHNcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAocmVnaXN0ZXJfdHJhY2VyKCZibGtfdHJhY2VyKSAhPSAwKSB7CisJCXByX3dhcm5pbmcoIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciB0aGUgYmxvY2sgdHJhY2VyXG4iKTsKKwkJdW5yZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnRyYWNlX2Jsa19ldmVudCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitkZXZpY2VfaW5pdGNhbGwoaW5pdF9ibGtfdHJhY2VyKTsKKworc3RhdGljIGludCBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0OworCisJYnQgPSB4Y2hnKCZxLT5ibGtfdHJhY2UsIE5VTEwpOworCWlmIChidCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZibGtfcHJvYmVzX3JlZikpCisJCWJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKCk7CisKKwlibGtfdHJhY2VfZnJlZShidCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXR1cCBldmVyeXRoaW5nIHJlcXVpcmVkIHRvIHN0YXJ0IHRyYWNpbmcKKyAqLworc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGRldl90IGRldikKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpvbGRfYnQsICpidCA9IE5VTEw7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlidCA9IGt6YWxsb2Moc2l6ZW9mKCpidCksIEdGUF9LRVJORUwpOworCWlmICghYnQpCisJCXJldHVybiAtRU5PTUVNOworCisJYnQtPm1zZ19kYXRhID0gX19hbGxvY19wZXJjcHUoQkxLX1ROX01BWF9NU0csIF9fYWxpZ25vZl9fKGNoYXIpKTsKKwlpZiAoIWJ0LT5tc2dfZGF0YSkKKwkJZ290byBmcmVlX2J0OworCisJYnQtPmRldiA9IGRldjsKKwlidC0+YWN0X21hc2sgPSAodTE2KS0xOworCWJ0LT5lbmRfbGJhID0gLTFVTEw7CisKKwlvbGRfYnQgPSB4Y2hnKCZxLT5ibGtfdHJhY2UsIGJ0KTsKKwlpZiAob2xkX2J0ICE9IE5VTEwpIHsKKwkJKHZvaWQpeGNoZygmcS0+YmxrX3RyYWNlLCBvbGRfYnQpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZnJlZV9idDsKKwl9CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmJsa19wcm9iZXNfcmVmKSA9PSAxKQorCQlibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTsKKwlyZXR1cm4gMDsKKworZnJlZV9idDoKKwlibGtfdHJhY2VfZnJlZShidCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHN5c2ZzIGludGVyZmFjZSB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSB0cmFjaW5nCisgKi8KKworc3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworI2RlZmluZSBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoX25hbWUpIFwKKwlERVZJQ0VfQVRUUihfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJICAgIHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3csIFwKKwkJICAgIHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKQorCitzdGF0aWMgQkxLX1RSQUNFX0RFVklDRV9BVFRSKGVuYWJsZSk7CitzdGF0aWMgQkxLX1RSQUNFX0RFVklDRV9BVFRSKGFjdF9tYXNrKTsKK3N0YXRpYyBCTEtfVFJBQ0VfREVWSUNFX0FUVFIocGlkKTsKK3N0YXRpYyBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoc3RhcnRfbGJhKTsKK3N0YXRpYyBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoZW5kX2xiYSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpibGtfdHJhY2VfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfZW5hYmxlLmF0dHIsCisJJmRldl9hdHRyX2FjdF9tYXNrLmF0dHIsCisJJmRldl9hdHRyX3BpZC5hdHRyLAorCSZkZXZfYXR0cl9zdGFydF9sYmEuYXR0ciwKKwkmZGV2X2F0dHJfZW5kX2xiYS5hdHRyLAorCU5VTEwKK307CisKK3N0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYmxrX3RyYWNlX2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgID0gInRyYWNlIiwKKwkuYXR0cnMgPSBibGtfdHJhY2VfYXR0cnMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpbnQgbWFzazsKKwljb25zdCBjaGFyICpzdHI7Cit9IG1hc2tfbWFwc1tdID0geworCXsgQkxLX1RDX1JFQUQsCQkicmVhZCIJCX0sCisJeyBCTEtfVENfV1JJVEUsCQkid3JpdGUiCQl9LAorCXsgQkxLX1RDX0JBUlJJRVIsCSJiYXJyaWVyIgl9LAorCXsgQkxLX1RDX1NZTkMsCQkic3luYyIJCX0sCisJeyBCTEtfVENfUVVFVUUsCQkicXVldWUiCQl9LAorCXsgQkxLX1RDX1JFUVVFVUUsCSJyZXF1ZXVlIgl9LAorCXsgQkxLX1RDX0lTU1VFLAkJImlzc3VlIgkJfSwKKwl7IEJMS19UQ19DT01QTEVURSwJImNvbXBsZXRlIgl9LAorCXsgQkxLX1RDX0ZTLAkJImZzIgkJfSwKKwl7IEJMS19UQ19QQywJCSJwYyIJCX0sCisJeyBCTEtfVENfQUhFQUQsCQkiYWhlYWQiCQl9LAorCXsgQkxLX1RDX01FVEEsCQkibWV0YSIJCX0sCisJeyBCTEtfVENfRElTQ0FSRCwJImRpc2NhcmQiCX0sCisJeyBCTEtfVENfRFJWX0RBVEEsCSJkcnZfZGF0YSIJfSwKK307CisKK3N0YXRpYyBpbnQgYmxrX3RyYWNlX3N0cjJtYXNrKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgaTsKKwlpbnQgbWFzayA9IDA7CisJY2hhciAqcywgKnRva2VuOworCisJcyA9IGtzdHJkdXAoc3RyLCBHRlBfS0VSTkVMKTsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzID0gc3Ryc3RyaXAocyk7CisKKwl3aGlsZSAoMSkgeworCQl0b2tlbiA9IHN0cnNlcCgmcywgIiwiKTsKKwkJaWYgKHRva2VuID09IE5VTEwpCisJCQlicmVhazsKKworCQlpZiAoKnRva2VuID09ICdcMCcpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYXNrX21hcHMpOyBpKyspIHsKKwkJCWlmIChzdHJjYXNlY21wKHRva2VuLCBtYXNrX21hcHNbaV0uc3RyKSA9PSAwKSB7CisJCQkJbWFzayB8PSBtYXNrX21hcHNbaV0ubWFzazsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBBUlJBWV9TSVpFKG1hc2tfbWFwcykpIHsKKwkJCW1hc2sgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9CisJa2ZyZWUocyk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHNzaXplX3QgYmxrX3RyYWNlX21hc2syc3RyKGNoYXIgKmJ1ZiwgaW50IG1hc2spCit7CisJaW50IGk7CisJY2hhciAqcCA9IGJ1ZjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1hc2tfbWFwcyk7IGkrKykgeworCQlpZiAobWFzayAmIG1hc2tfbWFwc1tpXS5tYXNrKSB7CisJCQlwICs9IHNwcmludGYocCwgIiVzJXMiLAorCQkJCSAgICAocCA9PSBidWYpID8gIiIgOiAiLCIsIG1hc2tfbWFwc1tpXS5zdHIpOworCQl9CisJfQorCSpwKysgPSAnXG4nOworCisJcmV0dXJuIHAgLSBidWY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYmxrX3RyYWNlX2dldF9xdWV1ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCWlmIChiZGV2LT5iZF9kaXNrID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOworfQorCitzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBoZF9zdHJ1Y3QgKnAgPSBkZXZfdG9fcGFydChkZXYpOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CisJc3NpemVfdCByZXQgPSAtRU5YSU87CisKKwlsb2NrX2tlcm5lbCgpOworCWJkZXYgPSBiZGdldChwYXJ0X2RldnQocCkpOworCWlmIChiZGV2ID09IE5VTEwpCisJCWdvdG8gb3V0X3VubG9ja19rZXJuZWw7CisKKwlxID0gYmxrX3RyYWNlX2dldF9xdWV1ZShiZGV2KTsKKwlpZiAocSA9PSBOVUxMKQorCQlnb3RvIG91dF9iZHB1dDsKKworCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9lbmFibGUpIHsKKwkJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgISFxLT5ibGtfdHJhY2UpOworCQlnb3RvIG91dF91bmxvY2tfYmRldjsKKwl9CisKKwlpZiAocS0+YmxrX3RyYWNlID09IE5VTEwpCisJCXJldCA9IHNwcmludGYoYnVmLCAiZGlzYWJsZWRcbiIpOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2FjdF9tYXNrKQorCQlyZXQgPSBibGtfdHJhY2VfbWFzazJzdHIoYnVmLCBxLT5ibGtfdHJhY2UtPmFjdF9tYXNrKTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9waWQpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIHEtPmJsa190cmFjZS0+cGlkKTsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9zdGFydF9sYmEpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJWxsdVxuIiwgcS0+YmxrX3RyYWNlLT5zdGFydF9sYmEpOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2VuZF9sYmEpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJWxsdVxuIiwgcS0+YmxrX3RyYWNlLT5lbmRfbGJhKTsKKworb3V0X3VubG9ja19iZGV2OgorCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworb3V0X2JkcHV0OgorCWJkcHV0KGJkZXYpOworb3V0X3VubG9ja19rZXJuZWw6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOworCXN0cnVjdCBoZF9zdHJ1Y3QgKnA7CisJdTY0IHZhbHVlOworCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKKworCWlmIChjb3VudCA9PSAwKQorCQlnb3RvIG91dDsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9hY3RfbWFzaykgeworCQlpZiAoc3NjYW5mKGJ1ZiwgIiVsbHgiLCAmdmFsdWUpICE9IDEpIHsKKwkJCS8qIEFzc3VtZSBpdCBpcyBhIGxpc3Qgb2YgdHJhY2UgY2F0ZWdvcnkgbmFtZXMgKi8KKwkJCXJldCA9IGJsa190cmFjZV9zdHIybWFzayhidWYpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CisJCQl2YWx1ZSA9IHJldDsKKwkJfQorCX0gZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgIiVsbHUiLCAmdmFsdWUpICE9IDEpCisJCWdvdG8gb3V0OworCisJcmV0ID0gLUVOWElPOworCisJbG9ja19rZXJuZWwoKTsKKwlwID0gZGV2X3RvX3BhcnQoZGV2KTsKKwliZGV2ID0gYmRnZXQocGFydF9kZXZ0KHApKTsKKwlpZiAoYmRldiA9PSBOVUxMKQorCQlnb3RvIG91dF91bmxvY2tfa2VybmVsOworCisJcSA9IGJsa190cmFjZV9nZXRfcXVldWUoYmRldik7CisJaWYgKHEgPT0gTlVMTCkKKwkJZ290byBvdXRfYmRwdXQ7CisKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfZW5hYmxlKSB7CisJCWlmICh2YWx1ZSkKKwkJCXJldCA9IGJsa190cmFjZV9zZXR1cF9xdWV1ZShxLCBiZGV2LT5iZF9kZXYpOworCQllbHNlCisJCQlyZXQgPSBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHEpOworCQlnb3RvIG91dF91bmxvY2tfYmRldjsKKwl9CisKKwlyZXQgPSAwOworCWlmIChxLT5ibGtfdHJhY2UgPT0gTlVMTCkKKwkJcmV0ID0gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHEsIGJkZXYtPmJkX2Rldik7CisKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2FjdF9tYXNrKQorCQkJcS0+YmxrX3RyYWNlLT5hY3RfbWFzayA9IHZhbHVlOworCQllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9waWQpCisJCQlxLT5ibGtfdHJhY2UtPnBpZCA9IHZhbHVlOworCQllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9zdGFydF9sYmEpCisJCQlxLT5ibGtfdHJhY2UtPnN0YXJ0X2xiYSA9IHZhbHVlOworCQllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9lbmRfbGJhKQorCQkJcS0+YmxrX3RyYWNlLT5lbmRfbGJhID0gdmFsdWU7CisJfQorCitvdXRfdW5sb2NrX2JkZXY6CisJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CitvdXRfYmRwdXQ6CisJYmRwdXQoYmRldik7CitvdXRfdW5sb2NrX2tlcm5lbDoKKwl1bmxvY2tfa2VybmVsKCk7CitvdXQ6CisJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworfQorCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvZXZlbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2ZjJhYQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS9ldmVudHMuYwpAQCAtMCwwICsxLDE0IEBACisvKgorICogVGhpcyBpcyB0aGUgcGxhY2UgdG8gcmVnaXN0ZXIgYWxsIHRyYWNlIHBvaW50cyBhcyBldmVudHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorCisjaW5jbHVkZSA8dHJhY2UvdHJhY2VfZXZlbnRzLmg+CisKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworI2luY2x1ZGUgInRyYWNlX2V2ZW50c19zdGFnZV8xLmgiCisjaW5jbHVkZSAidHJhY2VfZXZlbnRzX3N0YWdlXzIuaCIKKyNpbmNsdWRlICJ0cmFjZV9ldmVudHNfc3RhZ2VfMy5oIgorCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggZmRmOTEzZC4uZjFlZDA4MCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMjcsNiArMjcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKworI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CiAKQEAgLTQ0LDE0ICs0NywxNCBAQAogCQkJZnRyYWNlX2tpbGwoKTsJCVwKIAl9IHdoaWxlICgwKQogCisvKiBoYXNoIGJpdHMgZm9yIHNwZWNpZmljIGZ1bmN0aW9uIHNlbGVjdGlvbiAqLworI2RlZmluZSBGVFJBQ0VfSEFTSF9CSVRTIDcKKyNkZWZpbmUgRlRSQUNFX0ZVTkNfSEFTSFNJWkUgKDEgPDwgRlRSQUNFX0hBU0hfQklUUykKKwogLyogZnRyYWNlX2VuYWJsZWQgaXMgYSBtZXRob2QgdG8gdHVybiBmdHJhY2Ugb24gb3Igb2ZmICovCiBpbnQgZnRyYWNlX2VuYWJsZWQgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQgbGFzdF9mdHJhY2VfZW5hYmxlZDsKIAotLyogc2V0IHdoZW4gdHJhY2luZyBvbmx5IGEgcGlkICovCi1zdHJ1Y3QgcGlkICpmdHJhY2VfcGlkX3RyYWNlOwotc3RhdGljIHN0cnVjdCBwaWQgKiBjb25zdCBmdHJhY2Vfc3dhcHBlcl9waWQgPSAmaW5pdF9zdHJ1Y3RfcGlkOwotCiAvKiBRdWljayBkaXNhYmxpbmcgb2YgZnVuY3Rpb24gdHJhY2VyLiAqLwogaW50IGZ1bmN0aW9uX3RyYWNlX3N0b3A7CiAKQEAgLTYxLDkgKzY0LDcgQEAKICAqLwogc3RhdGljIGludCBmdHJhY2VfZGlzYWJsZWQgX19yZWFkX21vc3RseTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhmdHJhY2VfbG9jayk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGZ0cmFjZV9zeXNjdGxfbG9jayk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGZ0cmFjZV9zdGFydF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZnRyYWNlX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgZnRyYWNlX2xpc3RfZW5kIF9fcmVhZF9tb3N0bHkgPQogewpAQCAtMTM0LDkgKzEzNSw2IEBACiAKIHN0YXRpYyBpbnQgX19yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oc3RydWN0IGZ0cmFjZV9vcHMgKm9wcykKIHsKLQkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7Ci0KIAlvcHMtPm5leHQgPSBmdHJhY2VfbGlzdDsKIAkvKgogCSAqIFdlIGFyZSBlbnRlcmluZyBvcHMgaW50byB0aGUgZnRyYWNlX2xpc3QgYnV0IGFub3RoZXIKQEAgLTE3MiwxOCArMTcwLDEyIEBACiAjZW5kaWYKIAl9CiAKLQlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQogewogCXN0cnVjdCBmdHJhY2Vfb3BzICoqcDsKLQlpbnQgcmV0ID0gMDsKLQotCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKIAogCS8qCiAJICogSWYgd2UgYXJlIHJlbW92aW5nIHRoZSBsYXN0IGZ1bmN0aW9uLCB0aGVuIHNpbXBseSBwb2ludApAQCAtMTkyLDE3ICsxODQsMTUgQEAKIAlpZiAoZnRyYWNlX2xpc3QgPT0gb3BzICYmIG9wcy0+bmV4dCA9PSAmZnRyYWNlX2xpc3RfZW5kKSB7CiAJCWZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ0cmFjZV9zdHViOwogCQlmdHJhY2VfbGlzdCA9ICZmdHJhY2VfbGlzdF9lbmQ7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKIAl9CiAKIAlmb3IgKHAgPSAmZnRyYWNlX2xpc3Q7ICpwICE9ICZmdHJhY2VfbGlzdF9lbmQ7IHAgPSAmKCpwKS0+bmV4dCkKIAkJaWYgKCpwID09IG9wcykKIAkJCWJyZWFrOwogCi0JaWYgKCpwICE9IG9wcykgewotCQlyZXQgPSAtMTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICgqcCAhPSBvcHMpCisJCXJldHVybiAtMTsKIAogCSpwID0gKCpwKS0+bmV4dDsKIApAQCAtMjIzLDIxICsyMTMsMTUgQEAKIAkJfQogCX0KIAotIG91dDoKLQlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3VwZGF0ZV9waWRfZnVuYyh2b2lkKQogewogCWZ0cmFjZV9mdW5jX3QgZnVuYzsKIAotCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKLQogCWlmIChmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPT0gZnRyYWNlX3N0dWIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAKIAlmdW5jID0gZnRyYWNlX3RyYWNlX2Z1bmN0aW9uOwogCkBAIC0yNTQsMjMgKzIzOCwyOSBAQAogI2Vsc2UKIAlfX2Z0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ1bmM7CiAjZW5kaWYKLQotIG91dDoKLQlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCisvKiBzZXQgd2hlbiB0cmFjaW5nIG9ubHkgYSBwaWQgKi8KK3N0cnVjdCBwaWQgKmZ0cmFjZV9waWRfdHJhY2U7CitzdGF0aWMgc3RydWN0IHBpZCAqIGNvbnN0IGZ0cmFjZV9zd2FwcGVyX3BpZCA9ICZpbml0X3N0cnVjdF9waWQ7CisKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKKwogI2lmbmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKICMgZXJyb3IgRHluYW1pYyBmdHJhY2UgZGVwZW5kcyBvbiBNQ09VTlRfUkVDT1JECiAjZW5kaWYKIAotLyoKLSAqIFNpbmNlIE1DT1VOVF9BRERSIG1heSBwb2ludCB0byBtY291bnQgaXRzZWxmLCB3ZSBkbyBub3Qgd2FudAotICogdG8gZ2V0IGl0IGNvbmZ1c2VkIGJ5IHJlYWRpbmcgYSByZWZlcmVuY2UgaW4gdGhlIGNvZGUgYXMgd2UKLSAqIGFyZSBwYXJzaW5nIG9uIG9iamNvcHkgb3V0cHV0IG9mIHRleHQuIFVzZSBhIHZhcmlhYmxlIGZvcgotICogaXQgaW5zdGVhZC4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWNvdW50X2FkZHIgPSBNQ09VTlRfQUREUjsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBmdHJhY2VfZnVuY19oYXNoW0ZUUkFDRV9GVU5DX0hBU0hTSVpFXSBfX3JlYWRfbW9zdGx5OworCitzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUgeworCXN0cnVjdCBobGlzdF9ub2RlCW5vZGU7CisJc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMJKm9wczsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1bnNpZ25lZCBsb25nCQlpcDsKKwl2b2lkCQkJKmRhdGE7CisJc3RydWN0IHJjdV9oZWFkCQlyY3U7Cit9OworCiAKIGVudW0gewogCUZUUkFDRV9FTkFCTEVfQ0FMTFMJCT0gKDEgPDwgMCksCkBAIC0yODQsMTMgKzI3NCwxMyBAQAogCiBzdGF0aWMgaW50IGZ0cmFjZV9maWx0ZXJlZDsKIAotc3RhdGljIExJU1RfSEVBRChmdHJhY2VfbmV3X2FkZHJzKTsKK3N0YXRpYyBzdHJ1Y3QgZHluX2Z0cmFjZSAqZnRyYWNlX25ld19hZGRyczsKIAogc3RhdGljIERFRklORV9NVVRFWChmdHJhY2VfcmVnZXhfbG9jayk7CiAKIHN0cnVjdCBmdHJhY2VfcGFnZSB7CiAJc3RydWN0IGZ0cmFjZV9wYWdlCSpuZXh0OwotCXVuc2lnbmVkIGxvbmcJCWluZGV4OworCWludAkJCWluZGV4OwogCXN0cnVjdCBkeW5fZnRyYWNlCXJlY29yZHNbXTsKIH07CiAKQEAgLTMwNSw2ICsyOTUsMTkgQEAKIAogc3RhdGljIHN0cnVjdCBkeW5fZnRyYWNlICpmdHJhY2VfZnJlZV9yZWNvcmRzOwogCisvKgorICogVGhpcyBpcyBhIGRvdWJsZSBmb3IuIERvIG5vdCB1c2UgJ2JyZWFrJyB0byBicmVhayBvdXQgb2YgdGhlIGxvb3AsCisgKiB5b3UgbXVzdCB1c2UgYSBnb3RvLgorICovCisjZGVmaW5lIGRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykJCQkJCVwKKwlmb3IgKHBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OyBwZzsgcGcgPSBwZy0+bmV4dCkgewkJXAorCQlpbnQgX19fX19pOwkJCQkJCVwKKwkJZm9yIChfX19fX2kgPSAwOyBfX19fX2kgPCBwZy0+aW5kZXg7IF9fX19faSsrKSB7CVwKKwkJCXJlYyA9ICZwZy0+cmVjb3Jkc1tfX19fX2ldOworCisjZGVmaW5lIHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKQkJXAorCQl9CQkJCVwKKwl9CiAKICNpZmRlZiBDT05GSUdfS1BST0JFUwogCkBAIC0zMzgsNyArMzQxLDcgQEAKIAogc3RhdGljIHZvaWQgZnRyYWNlX2ZyZWVfcmVjKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCiB7Ci0JcmVjLT5pcCA9ICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9mcmVlX3JlY29yZHM7CisJcmVjLT5mcmVlbGlzdCA9IGZ0cmFjZV9mcmVlX3JlY29yZHM7CiAJZnRyYWNlX2ZyZWVfcmVjb3JkcyA9IHJlYzsKIAlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GUkVFOwogfQpAQCAtMzQ5LDIzICszNTIsMjIgQEAKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwogCXVuc2lnbmVkIGxvbmcgcyA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZSA9IHMgKyBzaXplOwotCWludCBpOwogCiAJaWYgKGZ0cmFjZV9kaXNhYmxlZCB8fCAhc3RhcnQpCiAJCXJldHVybjsKIAotCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKLQotCWZvciAocGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7IHBnOyBwZyA9IHBnLT5uZXh0KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwZy0+aW5kZXg7IGkrKykgewotCQkJcmVjID0gJnBnLT5yZWNvcmRzW2ldOwotCi0JCQlpZiAoKHJlYy0+aXAgPj0gcykgJiYgKHJlYy0+aXAgPCBlKSkKLQkJCQlmdHJhY2VfZnJlZV9yZWMocmVjKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisJCWlmICgocmVjLT5pcCA+PSBzKSAmJiAocmVjLT5pcCA8IGUpKSB7CisJCQkvKgorCQkJICogcmVjLT5pcCBpcyBjaGFuZ2VkIGluIGZ0cmFjZV9mcmVlX3JlYygpCisJCQkgKiBJdCBzaG91bGQgbm90IGJldHdlZW4gcyBhbmQgZSBpZiByZWNvcmQgd2FzIGZyZWVkLgorCQkJICovCisJCQlGVFJBQ0VfV0FSTl9PTihyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZSRUUpOworCQkJZnRyYWNlX2ZyZWVfcmVjKHJlYyk7CiAJCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkeW5fZnRyYWNlICpmdHJhY2VfYWxsb2NfZHluX25vZGUodW5zaWduZWQgbG9uZyBpcCkKQEAgLTM4Miw3ICszODQsNyBAQAogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAotCQlmdHJhY2VfZnJlZV9yZWNvcmRzID0gKHZvaWQgKilyZWMtPmlwOworCQlmdHJhY2VfZnJlZV9yZWNvcmRzID0gcmVjLT5mcmVlbGlzdDsKIAkJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKIAkJcmV0dXJuIHJlYzsKIAl9CkBAIC00MTQsOCArNDE2LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZWMtPmlwID0gaXA7Ci0KLQlsaXN0X2FkZCgmcmVjLT5saXN0LCAmZnRyYWNlX25ld19hZGRycyk7CisJcmVjLT5uZXdsaXN0ID0gZnRyYWNlX25ld19hZGRyczsKKwlmdHJhY2VfbmV3X2FkZHJzID0gcmVjOwogCiAJcmV0dXJuIHJlYzsKIH0KQEAgLTQ2MSwxMCArNDYzLDEwIEBACiBzdGF0aWMgaW50CiBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgaW50IGVuYWJsZSkKIHsKLQl1bnNpZ25lZCBsb25nIGlwLCBmbDsKIAl1bnNpZ25lZCBsb25nIGZ0cmFjZV9hZGRyOworCXVuc2lnbmVkIGxvbmcgaXAsIGZsOwogCi0JZnRyYWNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylmdHJhY2VfY2FsbGVyOworCWZ0cmFjZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpRlRSQUNFX0FERFI7CiAKIAlpcCA9IHJlYy0+aXA7CiAKQEAgLTQ3Myw3ICs0NzUsNyBAQAogCSAqIGl0IGlzIG5vdCBlbmFibGVkIHRoZW4gZG8gbm90aGluZy4KIAkgKgogCSAqIElmIHRoaXMgcmVjb3JkIGlzIG5vdCB0byBiZSB0cmFjZWQgYW5kCi0JICogaXQgaXMgZW5hYmxlZCB0aGVuIGRpc2FibGVkIGl0LgorCSAqIGl0IGlzIGVuYWJsZWQgdGhlbiBkaXNhYmxlIGl0LgogCSAqCiAJICovCiAJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfTk9UUkFDRSkgewpAQCAtNDkzLDcgKzQ5NSw3IEBACiAJCWlmIChmbCA9PSAoRlRSQUNFX0ZMX0ZJTFRFUiB8IEZUUkFDRV9GTF9FTkFCTEVEKSkKIAkJCXJldHVybiAwOwogCi0JCS8qIFJlY29yZCBpcyBub3QgZmlsdGVyZWQgYW5kIGlzIG5vdCBlbmFibGVkIGRvIG5vdGhpbmcgKi8KKwkJLyogUmVjb3JkIGlzIG5vdCBmaWx0ZXJlZCBvciBlbmFibGVkLCBkbyBub3RoaW5nICovCiAJCWlmICghZmwpCiAJCQlyZXR1cm4gMDsKIApAQCAtNTE1LDcgKzUxNyw3IEBACiAKIAkJfSBlbHNlIHsKIAotCQkJLyogaWYgcmVjb3JkIGlzIG5vdCBlbmFibGVkIGRvIG5vdGhpbmcgKi8KKwkJCS8qIGlmIHJlY29yZCBpcyBub3QgZW5hYmxlZCwgZG8gbm90aGluZyAqLwogCQkJaWYgKCEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9FTkFCTEVEKSkKIAkJCQlyZXR1cm4gMDsKIApAQCAtNTMxLDQxICs1MzMsNDEgQEAKIAogc3RhdGljIHZvaWQgZnRyYWNlX3JlcGxhY2VfY29kZShpbnQgZW5hYmxlKQogewotCWludCBpLCBmYWlsZWQ7CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCWludCBmYWlsZWQ7CiAKLQlmb3IgKHBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OyBwZzsgcGcgPSBwZy0+bmV4dCkgewotCQlmb3IgKGkgPSAwOyBpIDwgcGctPmluZGV4OyBpKyspIHsKLQkJCXJlYyA9ICZwZy0+cmVjb3Jkc1tpXTsKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKwkJLyoKKwkJICogU2tpcCBvdmVyIGZyZWUgcmVjb3JkcywgcmVjb3JkcyB0aGF0IGhhdmUKKwkJICogZmFpbGVkIGFuZCBub3QgY29udmVydGVkLgorCQkgKi8KKwkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJFRSB8fAorCQkgICAgcmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQgfHwKKwkJICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9DT05WRVJURUQpKQorCQkJY29udGludWU7CiAKLQkJCS8qCi0JCQkgKiBTa2lwIG92ZXIgZnJlZSByZWNvcmRzIGFuZCByZWNvcmRzIHRoYXQgaGF2ZQotCQkJICogZmFpbGVkLgotCQkJICovCi0JCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUkVFIHx8Ci0JCQkgICAgcmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGlnbm9yZSB1cGRhdGVzIHRvIHRoaXMgcmVjb3JkJ3MgbWNvdW50IHNpdGUgKi8KLQkJCWlmIChnZXRfa3Byb2JlKCh2b2lkICopcmVjLT5pcCkpIHsKLQkJCQlmcmVlemVfcmVjb3JkKHJlYyk7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgewotCQkJCXVuZnJlZXplX3JlY29yZChyZWMpOwotCQkJfQotCi0JCQlmYWlsZWQgPSBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUocmVjLCBlbmFibGUpOwotCQkJaWYgKGZhaWxlZCAmJiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9DT05WRVJURUQpKSB7Ci0JCQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRkFJTEVEOwotCQkJCWlmICgoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSB8fAotCQkJCSAgICAhY29yZV9rZXJuZWxfdGV4dChyZWMtPmlwKSkgewotCQkJCQlmdHJhY2VfZnJlZV9yZWMocmVjKTsKLQkJCQl9IGVsc2UKLQkJCQkJZnRyYWNlX2J1ZyhmYWlsZWQsIHJlYy0+aXApOwotCQkJfQorCQkvKiBpZ25vcmUgdXBkYXRlcyB0byB0aGlzIHJlY29yZCdzIG1jb3VudCBzaXRlICovCisJCWlmIChnZXRfa3Byb2JlKCh2b2lkICopcmVjLT5pcCkpIHsKKwkJCWZyZWV6ZV9yZWNvcmQocmVjKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJdW5mcmVlemVfcmVjb3JkKHJlYyk7CiAJCX0KLQl9CisKKwkJZmFpbGVkID0gX19mdHJhY2VfcmVwbGFjZV9jb2RlKHJlYywgZW5hYmxlKTsKKwkJaWYgKGZhaWxlZCkgeworCQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRkFJTEVEOworCQkJaWYgKChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpIHx8CisJCQkgICAgIWNvcmVfa2VybmVsX3RleHQocmVjLT5pcCkpIHsKKwkJCQlmdHJhY2VfZnJlZV9yZWMocmVjKTsKKwkJCQl9IGVsc2UgeworCQkJCWZ0cmFjZV9idWcoZmFpbGVkLCByZWMtPmlwKTsKKwkJCQkJLyogU3RvcCBwcm9jZXNzaW5nICovCisJCQkJCXJldHVybjsKKwkJCQl9CisJCX0KKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKIH0KIAogc3RhdGljIGludApAQCAtNTc2LDcgKzU3OCw3IEBACiAKIAlpcCA9IHJlYy0+aXA7CiAKLQlyZXQgPSBmdHJhY2VfbWFrZV9ub3AobW9kLCByZWMsIG1jb3VudF9hZGRyKTsKKwlyZXQgPSBmdHJhY2VfbWFrZV9ub3AobW9kLCByZWMsIE1DT1VOVF9BRERSKTsKIAlpZiAocmV0KSB7CiAJCWZ0cmFjZV9idWcocmV0LCBpcCk7CiAJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKQEAgLTU4NSw2ICs1ODcsMjQgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIGFyY2hzIGNhbiBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZXkgbXVzdCBkbyBzb21ldGhpbmcKKyAqIGJlZm9yZSB0aGUgbW9kaWZ5aW5nIGNvZGUgaXMgcGVyZm9ybWVkLgorICovCitpbnQgX193ZWFrIGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGFyY2hzIGNhbiBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZXkgbXVzdCBkbyBzb21ldGhpbmcKKyAqIGFmdGVyIHRoZSBtb2RpZnlpbmcgY29kZSBpcyBwZXJmb3JtZWQuCisgKi8KK2ludCBfX3dlYWsgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcG9zdF9wcm9jZXNzKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19mdHJhY2VfbW9kaWZ5X2NvZGUodm9pZCAqZGF0YSkKIHsKIAlpbnQgKmNvbW1hbmQgPSBkYXRhOwpAQCAtNjA3LDcgKzYyNywxNyBAQAogCiBzdGF0aWMgdm9pZCBmdHJhY2VfcnVuX3VwZGF0ZV9jb2RlKGludCBjb21tYW5kKQogeworCWludCByZXQ7CisKKwlyZXQgPSBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKCk7CisJRlRSQUNFX1dBUk5fT04ocmV0KTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKIAlzdG9wX21hY2hpbmUoX19mdHJhY2VfbW9kaWZ5X2NvZGUsICZjb21tYW5kLCBOVUxMKTsKKworCXJldCA9IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3Bvc3RfcHJvY2VzcygpOworCUZUUkFDRV9XQVJOX09OKHJldCk7CiB9CiAKIHN0YXRpYyBmdHJhY2VfZnVuY190IHNhdmVkX2Z0cmFjZV9mdW5jOwpAQCAtNjMxLDEzICs2NjEsMTAgQEAKIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwogCWZ0cmFjZV9zdGFydF91cCsrOwogCWNvbW1hbmQgfD0gRlRSQUNFX0VOQUJMRV9DQUxMUzsKIAogCWZ0cmFjZV9zdGFydHVwX2VuYWJsZShjb21tYW5kKTsKLQotCW11dGV4X3VubG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBmdHJhY2Vfc2h1dGRvd24oaW50IGNvbW1hbmQpCkBAIC02NDUsNyArNjcyLDYgQEAKIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwogCWZ0cmFjZV9zdGFydF91cC0tOwogCWlmICghZnRyYWNlX3N0YXJ0X3VwKQogCQljb21tYW5kIHw9IEZUUkFDRV9ESVNBQkxFX0NBTExTOwpAQCAtNjU2LDExICs2ODIsOSBAQAogCX0KIAogCWlmICghY29tbWFuZCB8fCAhZnRyYWNlX2VuYWJsZWQpCi0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAKIAlmdHJhY2VfcnVuX3VwZGF0ZV9jb2RlKGNvbW1hbmQpOwotIG91dDoKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3N0YXJ0dXBfc3lzY3RsKHZvaWQpCkBAIC02NzAsNyArNjk0LDYgQEAKIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwogCS8qIEZvcmNlIHVwZGF0ZSBuZXh0IHRpbWUgKi8KIAlzYXZlZF9mdHJhY2VfZnVuYyA9IE5VTEw7CiAJLyogZnRyYWNlX3N0YXJ0X3VwIGlzIHRydWUgaWYgd2Ugd2FudCBmdHJhY2UgcnVubmluZyAqLwpAQCAtNjc4LDcgKzcwMSw2IEBACiAJCWNvbW1hbmQgfD0gRlRSQUNFX0VOQUJMRV9DQUxMUzsKIAogCWZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoY29tbWFuZCk7Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9zaHV0ZG93bl9zeXNjdGwodm9pZCkKQEAgLTY4OCwxMyArNzEwLDExIEBACiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKIAkvKiBmdHJhY2Vfc3RhcnRfdXAgaXMgdHJ1ZSBpZiBmdHJhY2UgaXMgcnVubmluZyAqLwogCWlmIChmdHJhY2Vfc3RhcnRfdXApCiAJCWNvbW1hbmQgfD0gRlRSQUNFX0RJU0FCTEVfQ0FMTFM7CiAKIAlmdHJhY2VfcnVuX3VwZGF0ZV9jb2RlKGNvbW1hbmQpOwotCW11dGV4X3VubG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwogfQogCiBzdGF0aWMgY3ljbGVfdAkJZnRyYWNlX3VwZGF0ZV90aW1lOwpAQCAtNzAzLDE5ICs3MjMsMjEgQEAKIAogc3RhdGljIGludCBmdHJhY2VfdXBkYXRlX2NvZGUoc3RydWN0IG1vZHVsZSAqbW9kKQogewotCXN0cnVjdCBkeW5fZnRyYWNlICpwLCAqdDsKKwlzdHJ1Y3QgZHluX2Z0cmFjZSAqcDsKIAljeWNsZV90IHN0YXJ0LCBzdG9wOwogCiAJc3RhcnQgPSBmdHJhY2Vfbm93KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCWZ0cmFjZV91cGRhdGVfY250ID0gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0LCAmZnRyYWNlX25ld19hZGRycywgbGlzdCkgeworCXdoaWxlIChmdHJhY2VfbmV3X2FkZHJzKSB7CiAKIAkJLyogSWYgc29tZXRoaW5nIHdlbnQgd3JvbmcsIGJhaWwgd2l0aG91dCBlbmFibGluZyBhbnl0aGluZyAqLwogCQlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJCXJldHVybiAtMTsKIAotCQlsaXN0X2RlbF9pbml0KCZwLT5saXN0KTsKKwkJcCA9IGZ0cmFjZV9uZXdfYWRkcnM7CisJCWZ0cmFjZV9uZXdfYWRkcnMgPSBwLT5uZXdsaXN0OworCQlwLT5mbGFncyA9IDBMOwogCiAJCS8qIGNvbnZlcnQgcmVjb3JkIChpLmUsIHBhdGNoIG1jb3VudC1jYWxsIHdpdGggTk9QKSAqLwogCQlpZiAoZnRyYWNlX2NvZGVfZGlzYWJsZShtb2QsIHApKSB7CkBAIC03ODEsMTMgKzgwMywxNiBAQAogCUZUUkFDRV9JVEVSX0NPTlQJPSAoMSA8PCAxKSwKIAlGVFJBQ0VfSVRFUl9OT1RSQUNFCT0gKDEgPDwgMiksCiAJRlRSQUNFX0lURVJfRkFJTFVSRVMJPSAoMSA8PCAzKSwKKwlGVFJBQ0VfSVRFUl9QUklOVEFMTAk9ICgxIDw8IDQpLAorCUZUUkFDRV9JVEVSX0hBU0gJPSAoMSA8PCA1KSwKIH07CiAKICNkZWZpbmUgRlRSQUNFX0JVRkZfTUFYIChLU1lNX1NZTUJPTF9MRU4rNCkgLyogcm9vbSBmb3Igd2lsZGNhcmRzICovCiAKIHN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgewogCXN0cnVjdCBmdHJhY2VfcGFnZQkqcGc7Ci0JdW5zaWduZWQJCWlkeDsKKwlpbnQJCQloaWR4OworCWludAkJCWlkeDsKIAl1bnNpZ25lZAkJZmxhZ3M7CiAJdW5zaWduZWQgY2hhcgkJYnVmZmVyW0ZUUkFDRV9CVUZGX01BWCsxXTsKIAl1bnNpZ25lZAkJYnVmZmVyX2lkeDsKQEAgLTc5NSwxNSArODIwLDg5IEBACiB9OwogCiBzdGF0aWMgdm9pZCAqCit0X2hhc2hfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBobGlzdF9ub2RlICpobmQgPSB2OworCXN0cnVjdCBobGlzdF9oZWFkICpoaGQ7CisKKwlXQVJOX09OKCEoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9IQVNIKSk7CisKKwkoKnBvcykrKzsKKworIHJldHJ5OgorCWlmIChpdGVyLT5oaWR4ID49IEZUUkFDRV9GVU5DX0hBU0hTSVpFKQorCQlyZXR1cm4gTlVMTDsKKworCWhoZCA9ICZmdHJhY2VfZnVuY19oYXNoW2l0ZXItPmhpZHhdOworCisJaWYgKGhsaXN0X2VtcHR5KGhoZCkpIHsKKwkJaXRlci0+aGlkeCsrOworCQlobmQgPSBOVUxMOworCQlnb3RvIHJldHJ5OworCX0KKworCWlmICghaG5kKQorCQlobmQgPSBoaGQtPmZpcnN0OworCWVsc2UgeworCQlobmQgPSBobmQtPm5leHQ7CisJCWlmICghaG5kKSB7CisJCQlpdGVyLT5oaWR4Kys7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCisJcmV0dXJuIGhuZDsKK30KKworc3RhdGljIHZvaWQgKnRfaGFzaF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOworCXZvaWQgKnAgPSBOVUxMOworCisJaXRlci0+ZmxhZ3MgfD0gRlRSQUNFX0lURVJfSEFTSDsKKworCXJldHVybiB0X2hhc2hfbmV4dChtLCBwLCBwb3MpOworfQorCitzdGF0aWMgaW50IHRfaGFzaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUgKnJlYzsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaG5kID0gdjsKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCisJcmVjID0gaGxpc3RfZW50cnkoaG5kLCBzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUsIG5vZGUpOworCisJaWYgKHJlYy0+b3BzLT5wcmludCkKKwkJcmV0dXJuIHJlYy0+b3BzLT5wcmludChtLCByZWMtPmlwLCByZWMtPm9wcywgcmVjLT5kYXRhKTsKKworCWthbGxzeW1zX2xvb2t1cChyZWMtPmlwLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOworCXNlcV9wcmludGYobSwgIiVzOiIsIHN0cik7CisKKwlrYWxsc3ltc19sb29rdXAoKHVuc2lnbmVkIGxvbmcpcmVjLT5vcHMtPmZ1bmMsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7CisJc2VxX3ByaW50ZihtLCAiJXMiLCBzdHIpOworCisJaWYgKHJlYy0+ZGF0YSkKKwkJc2VxX3ByaW50ZihtLCAiOiVwIiwgcmVjLT5kYXRhKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqCiB0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjID0gTlVMTDsKIAorCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0hBU0gpCisJCXJldHVybiB0X2hhc2hfbmV4dChtLCB2LCBwb3MpOworCiAJKCpwb3MpKys7CiAKLQkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7CisJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfUFJJTlRBTEwpCisJCXJldHVybiBOVUxMOworCiAgcmV0cnk6CiAJaWYgKGl0ZXItPmlkeCA+PSBpdGVyLT5wZy0+aW5kZXgpIHsKIAkJaWYgKGl0ZXItPnBnLT5uZXh0KSB7CkBAIC04MzIsNyArOTMxLDYgQEAKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldHVybiByZWM7CiB9CkBAIC04NDIsNiArOTQwLDIzIEBACiAJc3RydWN0IGZ0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CiAJdm9pZCAqcCA9IE5VTEw7CiAKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisJLyoKKwkgKiBGb3Igc2V0X2Z0cmFjZV9maWx0ZXIgcmVhZGluZywgaWYgd2UgaGF2ZSB0aGUgZmlsdGVyCisJICogb2ZmLCB3ZSBjYW4gc2hvcnQgY3V0IGFuZCBqdXN0IHByaW50IG91dCB0aGF0IGFsbAorCSAqIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9GSUxURVIgJiYgIWZ0cmFjZV9maWx0ZXJlZCkgeworCQlpZiAoKnBvcyA+IDApCisJCQlyZXR1cm4gdF9oYXNoX3N0YXJ0KG0sIHBvcyk7CisJCWl0ZXItPmZsYWdzIHw9IEZUUkFDRV9JVEVSX1BSSU5UQUxMOworCQkoKnBvcykrKzsKKwkJcmV0dXJuIGl0ZXI7CisJfQorCisJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfSEFTSCkKKwkJcmV0dXJuIHRfaGFzaF9zdGFydChtLCBwb3MpOworCiAJaWYgKCpwb3MgPiAwKSB7CiAJCWlmIChpdGVyLT5pZHggPCAwKQogCQkJcmV0dXJuIHA7CkBAIC04NTEsMTggKzk2NiwzMSBAQAogCiAJcCA9IHRfbmV4dChtLCBwLCBwb3MpOwogCisJaWYgKCFwKQorCQlyZXR1cm4gdF9oYXNoX3N0YXJ0KG0sIHBvcyk7CisKIAlyZXR1cm4gcDsKIH0KIAogc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKIHsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIH0KIAogc3RhdGljIGludCB0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOwogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWMgPSB2OwogCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CiAKKwlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9IQVNIKQorCQlyZXR1cm4gdF9oYXNoX3Nob3cobSwgdik7CisKKwlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9QUklOVEFMTCkgeworCQlzZXFfcHJpbnRmKG0sICIjIyMjIGFsbCBmdW5jdGlvbnMgZW5hYmxlZCAjIyMjXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKCFyZWMpCiAJCXJldHVybiAwOwogCkBAIC05NDEsMjMgKzEwNjksMTYgQEAKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJdW5zaWduZWQgbG9uZyB0eXBlID0gZW5hYmxlID8gRlRSQUNFX0ZMX0ZJTFRFUiA6IEZUUkFDRV9GTF9OT1RSQUNFOwotCXVuc2lnbmVkIGk7CiAKLQkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCWlmIChlbmFibGUpCiAJCWZ0cmFjZV9maWx0ZXJlZCA9IDA7Ci0JcGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7Ci0Jd2hpbGUgKHBnKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwZy0+aW5kZXg7IGkrKykgewotCQkJcmVjID0gJnBnLT5yZWNvcmRzW2ldOwotCQkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQotCQkJCWNvbnRpbnVlOwotCQkJcmVjLT5mbGFncyAmPSB+dHlwZTsKLQkJfQotCQlwZyA9IHBnLT5uZXh0OwotCX0KLQlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgeworCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCisJCQljb250aW51ZTsKKwkJcmVjLT5mbGFncyAmPSB+dHlwZTsKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIH0KIAogc3RhdGljIGludApAQCAtMTAwOCwxNiArMTEyOSw2IEBACiAJcmV0dXJuIGZ0cmFjZV9yZWdleF9vcGVuKGlub2RlLCBmaWxlLCAwKTsKIH0KIAotc3RhdGljIHNzaXplX3QKLWZ0cmFjZV9yZWdleF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKLQkJICAgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKLXsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJcmV0dXJuIHNlcV9yZWFkKGZpbGUsIHVidWYsIGNudCwgcHBvcyk7Ci0JZWxzZQotCQlyZXR1cm4gLUVQRVJNOwotfQotCiBzdGF0aWMgbG9mZl90CiBmdHJhY2VfcmVnZXhfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCiB7CkBAIC0xMDM4LDg2ICsxMTQ5LDUzNiBAQAogCU1BVENIX0VORF9PTkxZLAogfTsKIAotc3RhdGljIHZvaWQKLWZ0cmFjZV9tYXRjaCh1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgZW5hYmxlKQorLyoKKyAqIChzdGF0aWMgZnVuY3Rpb24gLSBubyBuZWVkIGZvciBrZXJuZWwgZG9jKQorICoKKyAqIFBhc3MgaW4gYSBidWZmZXIgY29udGFpbmluZyBhIGdsb2IgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbAorICogc2V0IHNlYXJjaCB0byBwb2ludCB0byB0aGUgc2VhcmNoIHBhcnQgb2YgdGhlIGJ1ZmZlciBhbmQKKyAqIHJldHVybiB0aGUgdHlwZSBvZiBzZWFyY2ggaXQgaXMgKHNlZSBlbnVtIGFib3ZlKS4KKyAqIFRoaXMgZG9lcyBtb2RpZnkgYnVmZi4KKyAqCisgKiBSZXR1cm5zIGVudW0gdHlwZS4KKyAqICBzZWFyY2ggcmV0dXJucyB0aGUgcG9pbnRlciB0byB1c2UgZm9yIGNvbXBhcmlzb24uCisgKiAgbm90IHJldHVybnMgMSBpZiBidWZmIHN0YXJ0ZWQgd2l0aCBhICchJworICogICAgIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50CitmdHJhY2Vfc2V0dXBfZ2xvYihjaGFyICpidWZmLCBpbnQgbGVuLCBjaGFyICoqc2VhcmNoLCBpbnQgKm5vdCkKIHsKLQljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwotCWNoYXIgKnNlYXJjaCA9IE5VTEw7Ci0Jc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKLQlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCWludCB0eXBlID0gTUFUQ0hfRlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWcgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7Ci0JdW5zaWduZWQgaSwgbWF0Y2ggPSAwLCBzZWFyY2hfbGVuID0gMDsKLQlpbnQgbm90ID0gMDsKKwlpbnQgaTsKIAogCWlmIChidWZmWzBdID09ICchJykgewotCQlub3QgPSAxOworCQkqbm90ID0gMTsKIAkJYnVmZisrOwogCQlsZW4tLTsKLQl9CisJfSBlbHNlCisJCSpub3QgPSAwOworCisJKnNlYXJjaCA9IGJ1ZmY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJaWYgKGJ1ZmZbaV0gPT0gJyonKSB7CiAJCQlpZiAoIWkpIHsKLQkJCQlzZWFyY2ggPSBidWZmICsgaSArIDE7CisJCQkJKnNlYXJjaCA9IGJ1ZmYgKyAxOwogCQkJCXR5cGUgPSBNQVRDSF9FTkRfT05MWTsKLQkJCQlzZWFyY2hfbGVuID0gbGVuIC0gKGkgKyAxKTsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKHR5cGUgPT0gTUFUQ0hfRU5EX09OTFkpIHsKKwkJCQlpZiAodHlwZSA9PSBNQVRDSF9FTkRfT05MWSkKIAkJCQkJdHlwZSA9IE1BVENIX01JRERMRV9PTkxZOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1hdGNoID0gaTsKKwkJCQllbHNlCiAJCQkJCXR5cGUgPSBNQVRDSF9GUk9OVF9PTkxZOwotCQkJCX0KIAkJCQlidWZmW2ldID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KIAotCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKLQlpZiAoZW5hYmxlKQotCQlmdHJhY2VfZmlsdGVyZWQgPSAxOwotCXBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OwotCXdoaWxlIChwZykgewotCQlmb3IgKGkgPSAwOyBpIDwgcGctPmluZGV4OyBpKyspIHsKLQkJCWludCBtYXRjaGVkID0gMDsKLQkJCWNoYXIgKnB0cjsKKwlyZXR1cm4gdHlwZTsKK30KIAotCQkJcmVjID0gJnBnLT5yZWNvcmRzW2ldOwotCQkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQorc3RhdGljIGludCBmdHJhY2VfbWF0Y2goY2hhciAqc3RyLCBjaGFyICpyZWdleCwgaW50IGxlbiwgaW50IHR5cGUpCit7CisJaW50IG1hdGNoZWQgPSAwOworCWNoYXIgKnB0cjsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTUFUQ0hfRlVMTDoKKwkJaWYgKHN0cmNtcChzdHIsIHJlZ2V4KSA9PSAwKQorCQkJbWF0Y2hlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgTUFUQ0hfRlJPTlRfT05MWToKKwkJaWYgKHN0cm5jbXAoc3RyLCByZWdleCwgbGVuKSA9PSAwKQorCQkJbWF0Y2hlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgTUFUQ0hfTUlERExFX09OTFk6CisJCWlmIChzdHJzdHIoc3RyLCByZWdleCkpCisJCQltYXRjaGVkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNQVRDSF9FTkRfT05MWToKKwkJcHRyID0gc3Ryc3RyKHN0ciwgcmVnZXgpOworCQlpZiAocHRyICYmIChwdHJbbGVuXSA9PSAwKSkKKwkJCW1hdGNoZWQgPSAxOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbWF0Y2hlZDsKK30KKworc3RhdGljIGludAorZnRyYWNlX21hdGNoX3JlY29yZChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCBjaGFyICpyZWdleCwgaW50IGxlbiwgaW50IHR5cGUpCit7CisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKworCWthbGxzeW1zX2xvb2t1cChyZWMtPmlwLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOworCXJldHVybiBmdHJhY2VfbWF0Y2goc3RyLCByZWdleCwgbGVuLCB0eXBlKTsKK30KKworc3RhdGljIHZvaWQgZnRyYWNlX21hdGNoX3JlY29yZHMoY2hhciAqYnVmZiwgaW50IGxlbiwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgc2VhcmNoX2xlbjsKKwlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCWNoYXIgKnNlYXJjaDsKKwlpbnQgdHlwZTsKKwlpbnQgbm90OworCisJZmxhZyA9IGVuYWJsZSA/IEZUUkFDRV9GTF9GSUxURVIgOiBGVFJBQ0VfRkxfTk9UUkFDRTsKKwl0eXBlID0gZnRyYWNlX3NldHVwX2dsb2IoYnVmZiwgbGVuLCAmc2VhcmNoLCAmbm90KTsKKworCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKworCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCisJCQljb250aW51ZTsKKworCQlpZiAoZnRyYWNlX21hdGNoX3JlY29yZChyZWMsIHNlYXJjaCwgc2VhcmNoX2xlbiwgdHlwZSkpIHsKKwkJCWlmIChub3QpCisJCQkJcmVjLT5mbGFncyAmPSB+ZmxhZzsKKwkJCWVsc2UKKwkJCQlyZWMtPmZsYWdzIHw9IGZsYWc7CisJCX0KKwkJLyoKKwkJICogT25seSBlbmFibGUgZmlsdGVyaW5nIGlmIHdlIGhhdmUgYSBmdW5jdGlvbiB0aGF0CisJCSAqIGlzIGZpbHRlcmVkIG9uLgorCQkgKi8KKwkJaWYgKGVuYWJsZSAmJiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GSUxURVIpKQorCQkJZnRyYWNlX2ZpbHRlcmVkID0gMTsKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKK30KKworc3RhdGljIGludAorZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmQoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgY2hhciAqbW9kLAorCQkJICAgY2hhciAqcmVnZXgsIGludCBsZW4sIGludCB0eXBlKQoreworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisJY2hhciAqbW9kbmFtZTsKKworCWthbGxzeW1zX2xvb2t1cChyZWMtPmlwLCBOVUxMLCBOVUxMLCAmbW9kbmFtZSwgc3RyKTsKKworCWlmICghbW9kbmFtZSB8fCBzdHJjbXAobW9kbmFtZSwgbW9kKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBibGFuayBzZWFyY2ggbWVhbnMgdG8gbWF0Y2ggYWxsIGZ1bmNzIGluIHRoZSBtb2QgKi8KKwlpZiAobGVuKQorCQlyZXR1cm4gZnRyYWNlX21hdGNoKHN0ciwgcmVnZXgsIGxlbiwgdHlwZSk7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmRzKGNoYXIgKmJ1ZmYsIGNoYXIgKm1vZCwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBzZWFyY2hfbGVuID0gMDsKKwlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CisJaW50IHR5cGUgPSBNQVRDSF9GVUxMOworCWNoYXIgKnNlYXJjaCA9IGJ1ZmY7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCWludCBub3QgPSAwOworCisJZmxhZyA9IGVuYWJsZSA/IEZUUkFDRV9GTF9GSUxURVIgOiBGVFJBQ0VfRkxfTk9UUkFDRTsKKworCS8qIGJsYW5rIG9yICcqJyBtZWFuIHRoZSBzYW1lICovCisJaWYgKHN0cmNtcChidWZmLCAiKiIpID09IDApCisJCWJ1ZmZbMF0gPSAwOworCisJLyogaGFuZGxlIHRoZSBjYXNlIG9mICdkb250IGZpbHRlciB0aGlzIG1vZHVsZScgKi8KKwlpZiAoc3RyY21wKGJ1ZmYsICIhIikgPT0gMCB8fCBzdHJjbXAoYnVmZiwgIiEqIikgPT0gMCkgeworCQlidWZmWzBdID0gMDsKKwkJbm90ID0gMTsKKwl9CisKKwlpZiAoc3RybGVuKGJ1ZmYpKSB7CisJCXR5cGUgPSBmdHJhY2Vfc2V0dXBfZ2xvYihidWZmLCBzdHJsZW4oYnVmZiksICZzZWFyY2gsICZub3QpOworCQlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7CisJfQorCisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgeworCisJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmdHJhY2VfbWF0Y2hfbW9kdWxlX3JlY29yZChyZWMsIG1vZCwKKwkJCQkJICAgICAgIHNlYXJjaCwgc2VhcmNoX2xlbiwgdHlwZSkpIHsKKwkJCWlmIChub3QpCisJCQkJcmVjLT5mbGFncyAmPSB+ZmxhZzsKKwkJCWVsc2UKKwkJCQlyZWMtPmZsYWdzIHw9IGZsYWc7CisJCX0KKwkJaWYgKGVuYWJsZSAmJiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GSUxURVIpKQorCQkJZnRyYWNlX2ZpbHRlcmVkID0gMTsKKworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOworfQorCisvKgorICogV2UgcmVnaXN0ZXIgdGhlIG1vZHVsZSBjb21tYW5kIGFzIGEgdGVtcGxhdGUgdG8gc2hvdyBvdGhlcnMgaG93CisgKiB0byByZWdpc3RlciB0aGUgYSBjb21tYW5kIGFzIHdlbGwuCisgKi8KKworc3RhdGljIGludAorZnRyYWNlX21vZF9jYWxsYmFjayhjaGFyICpmdW5jLCBjaGFyICpjbWQsIGNoYXIgKnBhcmFtLCBpbnQgZW5hYmxlKQoreworCWNoYXIgKm1vZDsKKworCS8qCisJICogY21kID09ICdtb2QnIGJlY2F1c2Ugd2Ugb25seSByZWdpc3RlcmVkIHRoaXMgZnVuYworCSAqIGZvciB0aGUgJ21vZCcgZnRyYWNlX2Z1bmNfY29tbWFuZC4KKwkgKiBCdXQgaWYgeW91IHJlZ2lzdGVyIG9uZSBmdW5jIHdpdGggbXVsdGlwbGUgY29tbWFuZHMsCisJICogeW91IGNhbiB0ZWxsIHdoaWNoIGNvbW1hbmQgd2FzIHVzZWQgYnkgdGhlIGNtZAorCSAqIHBhcmFtZXRlci4KKwkgKi8KKworCS8qIHdlIG11c3QgaGF2ZSBhIG1vZHVsZSBuYW1lICovCisJaWYgKCFwYXJhbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltb2QgPSBzdHJzZXAoJnBhcmFtLCAiOiIpOworCWlmICghc3RybGVuKG1vZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmRzKGZ1bmMsIG1vZCwgZW5hYmxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kIGZ0cmFjZV9tb2RfY21kID0geworCS5uYW1lCQkJPSAibW9kIiwKKwkuZnVuYwkJCT0gZnRyYWNlX21vZF9jYWxsYmFjaywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZ0cmFjZV9tb2RfY21kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoJmZ0cmFjZV9tb2RfY21kKTsKK30KK2RldmljZV9pbml0Y2FsbChmdHJhY2VfbW9kX2NtZF9pbml0KTsKKworc3RhdGljIHZvaWQKK2Z1bmN0aW9uX3RyYWNlX3Byb2JlX2NhbGwodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlICplbnRyeTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhkOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXVuc2lnbmVkIGxvbmcga2V5OworCWludCByZXNjaGVkOworCisJa2V5ID0gaGFzaF9sb25nKGlwLCBGVFJBQ0VfSEFTSF9CSVRTKTsKKworCWhoZCA9ICZmdHJhY2VfZnVuY19oYXNoW2tleV07CisKKwlpZiAoaGxpc3RfZW1wdHkoaGhkKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBEaXNhYmxlIHByZWVtcHRpb24gZm9yIHRoZXNlIGNhbGxzIHRvIHByZXZlbnQgYSBSQ1UgZ3JhY2UKKwkgKiBwZXJpb2QuIFRoaXMgc3luY3MgdGhlIGhhc2ggaXRlcmF0aW9uIGFuZCBmcmVlaW5nIG9mIGl0ZW1zCisJICogb24gdGhlIGhhc2guIHJjdV9yZWFkX2xvY2sgaXMgdG9vIGRhbmdlcm91cyBoZXJlLgorCSAqLworCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBuLCBoaGQsIG5vZGUpIHsKKwkJaWYgKGVudHJ5LT5pcCA9PSBpcCkKKwkJCWVudHJ5LT5vcHMtPmZ1bmMoaXAsIHBhcmVudF9pcCwgJmVudHJ5LT5kYXRhKTsKKwl9CisJZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOworfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2VfcHJvYmVfb3BzIF9fcmVhZF9tb3N0bHkgPQoreworCS5mdW5jID0gZnVuY3Rpb25fdHJhY2VfcHJvYmVfY2FsbCwKK307CisKK3N0YXRpYyBpbnQgZnRyYWNlX3Byb2JlX3JlZ2lzdGVyZWQ7CisKK3N0YXRpYyB2b2lkIF9fZW5hYmxlX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZSh2b2lkKQoreworCWludCBpOworCisJaWYgKGZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX0ZVTkNfSEFTSFNJWkU7IGkrKykgeworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhkID0gJmZ0cmFjZV9mdW5jX2hhc2hbaV07CisJCWlmIChoaGQtPmZpcnN0KQorCQkJYnJlYWs7CisJfQorCS8qIE5vdGhpbmcgcmVnaXN0ZXJlZD8gKi8KKwlpZiAoaSA9PSBGVFJBQ0VfRlVOQ19IQVNIU0laRSkKKwkJcmV0dXJuOworCisJX19yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3Byb2JlX29wcyk7CisJZnRyYWNlX3N0YXJ0dXAoMCk7CisJZnRyYWNlX3Byb2JlX3JlZ2lzdGVyZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBfX2Rpc2FibGVfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoIWZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX0ZVTkNfSEFTSFNJWkU7IGkrKykgeworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhkID0gJmZ0cmFjZV9mdW5jX2hhc2hbaV07CisJCWlmIChoaGQtPmZpcnN0KQorCQkJcmV0dXJuOworCX0KKworCS8qIG5vIG1vcmUgZnVuY3MgbGVmdCAqLworCV9fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3Byb2JlX29wcyk7CisJZnRyYWNlX3NodXRkb3duKDApOworCWZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkID0gMDsKK30KKworCitzdGF0aWMgdm9pZCBmdHJhY2VfZnJlZV9lbnRyeV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaHApCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlICplbnRyeSA9CisJCWNvbnRhaW5lcl9vZihyaHAsIHN0cnVjdCBmdHJhY2VfZnVuY19wcm9iZSwgcmN1KTsKKworCWlmIChlbnRyeS0+b3BzLT5mcmVlKQorCQllbnRyeS0+b3BzLT5mcmVlKCZlbnRyeS0+ZGF0YSk7CisJa2ZyZWUoZW50cnkpOworfQorCisKK2ludAorcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMsCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19wcm9iZSAqZW50cnk7CisJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKKwlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOworCWludCB0eXBlLCBsZW4sIG5vdDsKKwl1bnNpZ25lZCBsb25nIGtleTsKKwlpbnQgY291bnQgPSAwOworCWNoYXIgKnNlYXJjaDsKKworCXR5cGUgPSBmdHJhY2Vfc2V0dXBfZ2xvYihnbG9iLCBzdHJsZW4oZ2xvYiksICZzZWFyY2gsICZub3QpOworCWxlbiA9IHN0cmxlbihzZWFyY2gpOworCisJLyogd2UgZG8gbm90IHN1cHBvcnQgJyEnIGZvciBmdW5jdGlvbiBwcm9iZXMgKi8KKwlpZiAoV0FSTl9PTihub3QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKworCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBzZWFyY2gsIGxlbiwgdHlwZSkpCisJCQljb250aW51ZTsKKworCQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCQlpZiAoIWVudHJ5KSB7CisJCQkvKiBJZiB3ZSBkaWQgbm90IHByb2Nlc3MgYW55LCB0aGVuIHJldHVybiBlcnJvciAqLworCQkJaWYgKCFjb3VudCkKKwkJCQljb3VudCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQljb3VudCsrOworCisJCWVudHJ5LT5kYXRhID0gZGF0YTsKKworCQkvKgorCQkgKiBUaGUgY2FsbGVyIG1pZ2h0IHdhbnQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwKKwkJICogZm9yIGVhY2ggZnVuY3Rpb24gd2UgZmluZC4gV2UgY2FsbCB0aGUgY2FsbGJhY2sKKwkJICogdG8gZ2l2ZSB0aGUgY2FsbGVyIGFuIG9wcG9ydHVuaXR5IHRvIGRvIHNvLgorCQkgKi8KKwkJaWYgKG9wcy0+Y2FsbGJhY2spIHsKKwkJCWlmIChvcHMtPmNhbGxiYWNrKHJlYy0+aXAsICZlbnRyeS0+ZGF0YSkgPCAwKSB7CisJCQkJLyogY2FsbGVyIGRvZXMgbm90IGxpa2UgdGhpcyBmdW5jICovCisJCQkJa2ZyZWUoZW50cnkpOwogCQkJCWNvbnRpbnVlOwotCQkJa2FsbHN5bXNfbG9va3VwKHJlYy0+aXAsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7Ci0JCQlzd2l0Y2ggKHR5cGUpIHsKLQkJCWNhc2UgTUFUQ0hfRlVMTDoKLQkJCQlpZiAoc3RyY21wKHN0ciwgYnVmZikgPT0gMCkKLQkJCQkJbWF0Y2hlZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1BVENIX0ZST05UX09OTFk6Ci0JCQkJaWYgKG1lbWNtcChzdHIsIGJ1ZmYsIG1hdGNoKSA9PSAwKQotCQkJCQltYXRjaGVkID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgTUFUQ0hfTUlERExFX09OTFk6Ci0JCQkJaWYgKHN0cnN0cihzdHIsIHNlYXJjaCkpCi0JCQkJCW1hdGNoZWQgPSAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNQVRDSF9FTkRfT05MWToKLQkJCQlwdHIgPSBzdHJzdHIoc3RyLCBzZWFyY2gpOwotCQkJCWlmIChwdHIgJiYgKHB0cltzZWFyY2hfbGVuXSA9PSAwKSkKLQkJCQkJbWF0Y2hlZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAobWF0Y2hlZCkgewotCQkJCWlmIChub3QpCi0JCQkJCXJlYy0+ZmxhZ3MgJj0gfmZsYWc7Ci0JCQkJZWxzZQotCQkJCQlyZWMtPmZsYWdzIHw9IGZsYWc7CiAJCQl9CiAJCX0KLQkJcGcgPSBwZy0+bmV4dDsKKworCQllbnRyeS0+b3BzID0gb3BzOworCQllbnRyeS0+aXAgPSByZWMtPmlwOworCisJCWtleSA9IGhhc2hfbG9uZyhlbnRyeS0+aXAsIEZUUkFDRV9IQVNIX0JJVFMpOworCQlobGlzdF9hZGRfaGVhZF9yY3UoJmVudHJ5LT5ub2RlLCAmZnRyYWNlX2Z1bmNfaGFzaFtrZXldKTsKKworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCV9fZW5hYmxlX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZSgpOworCisgb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworZW51bSB7CisJUFJPQkVfVEVTVF9GVU5DCQk9IDEsCisJUFJPQkVfVEVTVF9EQVRBCQk9IDIKK307CisKK3N0YXRpYyB2b2lkCitfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMsCisJCQkJICB2b2lkICpkYXRhLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlICplbnRyeTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKnRtcDsKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCWludCB0eXBlID0gTUFUQ0hfRlVMTDsKKwlpbnQgaSwgbGVuID0gMDsKKwljaGFyICpzZWFyY2g7CisKKwlpZiAoZ2xvYiAmJiAoc3RyY21wKGdsb2IsICIqIikgfHwgIXN0cmxlbihnbG9iKSkpCisJCWdsb2IgPSBOVUxMOworCWVsc2UgeworCQlpbnQgbm90OworCisJCXR5cGUgPSBmdHJhY2Vfc2V0dXBfZ2xvYihnbG9iLCBzdHJsZW4oZ2xvYiksICZzZWFyY2gsICZub3QpOworCQlsZW4gPSBzdHJsZW4oc2VhcmNoKTsKKworCQkvKiB3ZSBkbyBub3Qgc3VwcG9ydCAnIScgZm9yIGZ1bmN0aW9uIHByb2JlcyAqLworCQlpZiAoV0FSTl9PTihub3QpKQorCQkJcmV0dXJuOwogCX0KLQlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOworCisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfRlVOQ19IQVNIU0laRTsgaSsrKSB7CisJCXN0cnVjdCBobGlzdF9oZWFkICpoaGQgPSAmZnRyYWNlX2Z1bmNfaGFzaFtpXTsKKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuLCB0bXAsIGhoZCwgbm9kZSkgeworCisJCQkvKiBicmVhayB1cCBpZiBzdGF0ZW1lbnRzIGZvciByZWFkYWJpbGl0eSAqLworCQkJaWYgKChmbGFncyAmIFBST0JFX1RFU1RfRlVOQykgJiYgZW50cnktPm9wcyAhPSBvcHMpCisJCQkJY29udGludWU7CisKKwkJCWlmICgoZmxhZ3MgJiBQUk9CRV9URVNUX0RBVEEpICYmIGVudHJ5LT5kYXRhICE9IGRhdGEpCisJCQkJY29udGludWU7CisKKwkJCS8qIGRvIHRoaXMgbGFzdCwgc2luY2UgaXQgaXMgdGhlIG1vc3QgZXhwZW5zaXZlICovCisJCQlpZiAoZ2xvYikgeworCQkJCWthbGxzeW1zX2xvb2t1cChlbnRyeS0+aXAsIE5VTEwsIE5VTEwsCisJCQkJCQlOVUxMLCBzdHIpOworCQkJCWlmICghZnRyYWNlX21hdGNoKHN0ciwgZ2xvYiwgbGVuLCB0eXBlKSkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWhsaXN0X2RlbCgmZW50cnktPm5vZGUpOworCQkJY2FsbF9yY3UoJmVudHJ5LT5yY3UsIGZ0cmFjZV9mcmVlX2VudHJ5X3JjdSk7CisJCX0KKwl9CisJX19kaXNhYmxlX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZSgpOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOworfQorCit2b2lkCit1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLAorCQkJCXZvaWQgKmRhdGEpCit7CisJX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShnbG9iLCBvcHMsIGRhdGEsCisJCQkJCSAgUFJPQkVfVEVTVF9GVU5DIHwgUFJPQkVfVEVTVF9EQVRBKTsKK30KKwordm9pZAordW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfZnVuYyhjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzKQoreworCV9fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoZ2xvYiwgb3BzLCBOVUxMLCBQUk9CRV9URVNUX0ZVTkMpOworfQorCit2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlX2FsbChjaGFyICpnbG9iKQoreworCV9fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoZ2xvYiwgTlVMTCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBMSVNUX0hFQUQoZnRyYWNlX2NvbW1hbmRzKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZnRyYWNlX2NtZF9tdXRleCk7CisKK2ludCByZWdpc3Rlcl9mdHJhY2VfY29tbWFuZChzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqY21kKQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpwOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZnRyYWNlX2NtZF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmZnRyYWNlX2NvbW1hbmRzLCBsaXN0KSB7CisJCWlmIChzdHJjbXAoY21kLT5uYW1lLCBwLT5uYW1lKSA9PSAwKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9CisJbGlzdF9hZGQoJmNtZC0+bGlzdCwgJmZ0cmFjZV9jb21tYW5kcyk7Cisgb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmZ0cmFjZV9jbWRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHVucmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKmNtZCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqcCwgKm47CisJaW50IHJldCA9IC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZmdHJhY2VfY21kX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmZ0cmFjZV9jb21tYW5kcywgbGlzdCkgeworCQlpZiAoc3RyY21wKGNtZC0+bmFtZSwgcC0+bmFtZSkgPT0gMCkgeworCQkJcmV0ID0gMDsKKwkJCWxpc3RfZGVsX2luaXQoJnAtPmxpc3QpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfY21kX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZnRyYWNlX3Byb2Nlc3NfcmVnZXgoY2hhciAqYnVmZiwgaW50IGxlbiwgaW50IGVuYWJsZSkKK3sKKwljaGFyICpmdW5jLCAqY29tbWFuZCwgKm5leHQgPSBidWZmOworCXN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpwOworCWludCByZXQgPSAtRUlOVkFMOworCisJZnVuYyA9IHN0cnNlcCgmbmV4dCwgIjoiKTsKKworCWlmICghbmV4dCkgeworCQlmdHJhY2VfbWF0Y2hfcmVjb3JkcyhmdW5jLCBsZW4sIGVuYWJsZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIGNvbW1hbmQgZm91bmQgKi8KKworCWNvbW1hbmQgPSBzdHJzZXAoJm5leHQsICI6Iik7CisKKwltdXRleF9sb2NrKCZmdHJhY2VfY21kX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZmdHJhY2VfY29tbWFuZHMsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChwLT5uYW1lLCBjb21tYW5kKSA9PSAwKSB7CisJCQlyZXQgPSBwLT5mdW5jKGZ1bmMsIGNvbW1hbmQsIG5leHQsIGVuYWJsZSk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9Cisgb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmZ0cmFjZV9jbWRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTExODcsNyArMTc0OCwxMCBAQAogCWlmIChpc3NwYWNlKGNoKSkgewogCQlpdGVyLT5maWx0ZXJlZCsrOwogCQlpdGVyLT5idWZmZXJbaXRlci0+YnVmZmVyX2lkeF0gPSAwOwotCQlmdHJhY2VfbWF0Y2goaXRlci0+YnVmZmVyLCBpdGVyLT5idWZmZXJfaWR4LCBlbmFibGUpOworCQlyZXQgPSBmdHJhY2VfcHJvY2Vzc19yZWdleChpdGVyLT5idWZmZXIsCisJCQkJCSAgIGl0ZXItPmJ1ZmZlcl9pZHgsIGVuYWJsZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKIAkJaXRlci0+YnVmZmVyX2lkeCA9IDA7CiAJfSBlbHNlCiAJCWl0ZXItPmZsYWdzIHw9IEZUUkFDRV9JVEVSX0NPTlQ7CkBAIC0xMjI2LDcgKzE3OTAsNyBAQAogCWlmIChyZXNldCkKIAkJZnRyYWNlX2ZpbHRlcl9yZXNldChlbmFibGUpOwogCWlmIChidWYpCi0JCWZ0cmFjZV9tYXRjaChidWYsIGxlbiwgZW5hYmxlKTsKKwkJZnRyYWNlX21hdGNoX3JlY29yZHMoYnVmLCBsZW4sIGVuYWJsZSk7CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CiB9CiAKQEAgLTEyNzYsMTUgKzE4NDAsMTMgQEAKIAlpZiAoaXRlci0+YnVmZmVyX2lkeCkgewogCQlpdGVyLT5maWx0ZXJlZCsrOwogCQlpdGVyLT5idWZmZXJbaXRlci0+YnVmZmVyX2lkeF0gPSAwOwotCQlmdHJhY2VfbWF0Y2goaXRlci0+YnVmZmVyLCBpdGVyLT5idWZmZXJfaWR4LCBlbmFibGUpOworCQlmdHJhY2VfbWF0Y2hfcmVjb3JkcyhpdGVyLT5idWZmZXIsIGl0ZXItPmJ1ZmZlcl9pZHgsIGVuYWJsZSk7CiAJfQogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCWlmIChmdHJhY2Vfc3RhcnRfdXAgJiYgZnRyYWNlX2VuYWJsZWQpCiAJCWZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoRlRSQUNFX0VOQUJMRV9DQUxMUyk7Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJa2ZyZWUoaXRlcik7CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CkBAIC0xMzAzLDMxICsxODY1LDMxIEBACiAJcmV0dXJuIGZ0cmFjZV9yZWdleF9yZWxlYXNlKGlub2RlLCBmaWxlLCAwKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2F2YWlsX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfYXZhaWxfZm9wcyA9IHsKIAkub3BlbiA9IGZ0cmFjZV9hdmFpbF9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IGZ0cmFjZV9hdmFpbF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2ZhaWx1cmVzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZmFpbHVyZXNfZm9wcyA9IHsKIAkub3BlbiA9IGZ0cmFjZV9mYWlsdXJlc19vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IGZ0cmFjZV9hdmFpbF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2ZpbHRlcl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2ZpbHRlcl9mb3BzID0gewogCS5vcGVuID0gZnRyYWNlX2ZpbHRlcl9vcGVuLAotCS5yZWFkID0gZnRyYWNlX3JlZ2V4X3JlYWQsCisJLnJlYWQgPSBzZXFfcmVhZCwKIAkud3JpdGUgPSBmdHJhY2VfZmlsdGVyX3dyaXRlLAogCS5sbHNlZWsgPSBmdHJhY2VfcmVnZXhfbHNlZWssCiAJLnJlbGVhc2UgPSBmdHJhY2VfZmlsdGVyX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2Vfbm90cmFjZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX25vdHJhY2VfZm9wcyA9IHsKIAkub3BlbiA9IGZ0cmFjZV9ub3RyYWNlX29wZW4sCi0JLnJlYWQgPSBmdHJhY2VfcmVnZXhfcmVhZCwKKwkucmVhZCA9IHNlcV9yZWFkLAogCS53cml0ZSA9IGZ0cmFjZV9ub3RyYWNlX3dyaXRlLAogCS5sbHNlZWsgPSBmdHJhY2VfcmVnZXhfbHNlZWssCiAJLnJlbGVhc2UgPSBmdHJhY2Vfbm90cmFjZV9yZWxlYXNlLApAQCAtMTM2MCw2ICsxOTIyLDEwIEBACiAKIAltdXRleF9sb2NrKCZncmFwaF9sb2NrKTsKIAorCS8qIE5vdGhpbmcsIHRlbGwgZ19zaG93IHRvIHByaW50IGFsbCBmdW5jdGlvbnMgYXJlIGVuYWJsZWQgKi8KKwlpZiAoIWZ0cmFjZV9ncmFwaF9jb3VudCAmJiAhKnBvcykKKwkJcmV0dXJuICh2b2lkICopMTsKKwogCXAgPSBnX25leHQobSwgcCwgcG9zKTsKIAogCXJldHVybiBwOwpAQCAtMTM3OCw2ICsxOTQ0LDExIEBACiAJaWYgKCFwdHIpCiAJCXJldHVybiAwOwogCisJaWYgKHB0ciA9PSAodW5zaWduZWQgbG9uZyAqKTEpIHsKKwkJc2VxX3ByaW50ZihtLCAiIyMjIyBhbGwgZnVuY3Rpb25zIGVuYWJsZWQgIyMjI1xuIik7CisJCXJldHVybiAwOworCX0KKwogCWthbGxzeW1zX2xvb2t1cCgqcHRyLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwogCiAJc2VxX3ByaW50ZihtLCAiJXNcbiIsIHN0cik7CkBAIC0xNDIwLDUzICsxOTkxLDUzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QKLWZ0cmFjZV9ncmFwaF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKLQkJICAgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKLXsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJcmV0dXJuIHNlcV9yZWFkKGZpbGUsIHVidWYsIGNudCwgcHBvcyk7Ci0JZWxzZQotCQlyZXR1cm4gLUVQRVJNOwotfQotCiBzdGF0aWMgaW50Ci1mdHJhY2Vfc2V0X2Z1bmModW5zaWduZWQgbG9uZyAqYXJyYXksIGludCBpZHgsIGNoYXIgKmJ1ZmZlcikKK2Z0cmFjZV9zZXRfZnVuYyh1bnNpZ25lZCBsb25nICphcnJheSwgaW50ICppZHgsIGNoYXIgKmJ1ZmZlcikKIHsKLQljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKKwlpbnQgc2VhcmNoX2xlbjsKIAlpbnQgZm91bmQgPSAwOwotCWludCBpLCBqOworCWludCB0eXBlLCBub3Q7CisJY2hhciAqc2VhcmNoOworCWJvb2wgZXhpc3RzOworCWludCBpOwogCiAJaWYgKGZ0cmFjZV9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrKCZmdHJhY2VfbG9jayk7CisJLyogZGVjb2RlIHJlZ2V4ICovCisJdHlwZSA9IGZ0cmFjZV9zZXR1cF9nbG9iKGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksICZzZWFyY2gsICZub3QpOworCWlmIChub3QpCisJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChwZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsgcGc7IHBnID0gcGctPm5leHQpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBnLT5pbmRleDsgaSsrKSB7Ci0JCQlyZWMgPSAmcGctPnJlY29yZHNbaV07CisJc2VhcmNoX2xlbiA9IHN0cmxlbihzZWFyY2gpOwogCi0JCQlpZiAocmVjLT5mbGFncyAmIChGVFJBQ0VfRkxfRkFJTEVEIHwgRlRSQUNFX0ZMX0ZSRUUpKQotCQkJCWNvbnRpbnVlOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKIAotCQkJa2FsbHN5bXNfbG9va3VwKHJlYy0+aXAsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7Ci0JCQlpZiAoc3RyY21wKHN0ciwgYnVmZmVyKSA9PSAwKSB7CisJCWlmICgqaWR4ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpCisJCQlicmVhazsKKworCQlpZiAocmVjLT5mbGFncyAmIChGVFJBQ0VfRkxfRkFJTEVEIHwgRlRSQUNFX0ZMX0ZSRUUpKQorCQkJY29udGludWU7CisKKwkJaWYgKGZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBzZWFyY2gsIHNlYXJjaF9sZW4sIHR5cGUpKSB7CisJCQkvKiBlbnN1cmUgaXQgaXMgbm90IGFscmVhZHkgaW4gdGhlIGFycmF5ICovCisJCQlleGlzdHMgPSBmYWxzZTsKKwkJCWZvciAoaSA9IDA7IGkgPCAqaWR4OyBpKyspCisJCQkJaWYgKGFycmF5W2ldID09IHJlYy0+aXApIHsKKwkJCQkJZXhpc3RzID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJaWYgKCFleGlzdHMpIHsKKwkJCQlhcnJheVsoKmlkeCkrK10gPSByZWMtPmlwOwogCQkJCWZvdW5kID0gMTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgaWR4OyBqKyspCi0JCQkJCWlmIChhcnJheVtqXSA9PSByZWMtPmlwKSB7Ci0JCQkJCQlmb3VuZCA9IDA7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCWlmIChmb3VuZCkKLQkJCQkJYXJyYXlbaWR4XSA9IHJlYy0+aXA7Ci0JCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJcmV0dXJuIGZvdW5kID8gMCA6IC1FSU5WQUw7CiB9CkBAIC0xNTM0LDEzICsyMTA1LDExIEBACiAJfQogCWJ1ZmZlcltpbmRleF0gPSAwOwogCi0JLyogd2UgYWxsb3cgb25seSBvbmUgYXQgYSB0aW1lICovCi0JcmV0ID0gZnRyYWNlX3NldF9mdW5jKGFycmF5LCBmdHJhY2VfZ3JhcGhfY291bnQsIGJ1ZmZlcik7CisJLyogd2UgYWxsb3cgb25seSBvbmUgZXhwcmVzc2lvbiBhdCBhIHRpbWUgKi8KKwlyZXQgPSBmdHJhY2Vfc2V0X2Z1bmMoYXJyYXksICZmdHJhY2VfZ3JhcGhfY291bnQsIGJ1ZmZlcik7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlmdHJhY2VfZ3JhcGhfY291bnQrKzsKLQogCWZpbGUtPmZfcG9zICs9IHJlYWQ7CiAKIAlyZXQgPSByZWFkOwpAQCAtMTU1Miw3ICsyMTIxLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2dyYXBoX2ZvcHMgPSB7CiAJLm9wZW4gPSBmdHJhY2VfZ3JhcGhfb3BlbiwKLQkucmVhZCA9IGZ0cmFjZV9ncmFwaF9yZWFkLAorCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gZnRyYWNlX2dyYXBoX3dyaXRlLAogfTsKICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCkBAIC0xNjA0LDcgKzIxNzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlwID0gc3RhcnQ7CiAJd2hpbGUgKHAgPCBlbmQpIHsKIAkJYWRkciA9IGZ0cmFjZV9jYWxsX2FkanVzdCgqcCsrKTsKQEAgLTE2MjMsNyArMjE5Miw3IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZ0cmFjZV91cGRhdGVfY29kZShtb2QpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTcwMCw3ICsyMjY5LDcgQEAKIAlpZiAoZnRyYWNlX3BpZF90cmFjZSA9PSBmdHJhY2Vfc3dhcHBlcl9waWQpCiAJCXIgPSBzcHJpbnRmKGJ1ZiwgInN3YXBwZXIgdGFza3NcbiIpOwogCWVsc2UgaWYgKGZ0cmFjZV9waWRfdHJhY2UpCi0JCXIgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwaWRfbnIoZnRyYWNlX3BpZF90cmFjZSkpOworCQlyID0gc3ByaW50ZihidWYsICIldVxuIiwgcGlkX3ZucihmdHJhY2VfcGlkX3RyYWNlKSk7CiAJZWxzZQogCQlyID0gc3ByaW50ZihidWYsICJubyBwaWRcbiIpOwogCkBAIC0xNzk2LDcgKzIzNjUsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlpZiAodmFsIDwgMCkgewogCQkvKiBkaXNhYmxlIHBpZCB0cmFjaW5nICovCiAJCWlmICghZnRyYWNlX3BpZF90cmFjZSkKQEAgLTE4MzUsMTIgKzI0MDQsMTIgQEAKIAlmdHJhY2Vfc3RhcnR1cF9lbmFibGUoMCk7CiAKICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfcGlkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfcGlkX2ZvcHMgPSB7CiAJLnJlYWQgPSBmdHJhY2VfcGlkX3JlYWQsCiAJLndyaXRlID0gZnRyYWNlX3BpZF93cml0ZSwKIH07CkBAIC0xODYzLDcgKzI0MzIsNiBAQAogCQkJICAgIidzZXRfZnRyYWNlX3BpZCcgZW50cnlcbiIpOwogCXJldHVybiAwOwogfQotCiBmc19pbml0Y2FsbChmdHJhY2VfaW5pdF9kZWJ1Z2ZzKTsKIAogLyoqCkBAIC0xODk4LDE3ICsyNDY2LDE3IEBACiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybiAtMTsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCiAJcmV0ID0gX19yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24ob3BzKTsKIAlmdHJhY2Vfc3RhcnR1cCgwKTsKIAotCW11dGV4X3VubG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIHVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uIC0gdW5yZXNnaXN0ZXIgYSBmdW5jdGlvbiBmb3IgcHJvZmlsaW5nLgorICogdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24gLSB1bnJlZ2lzdGVyIGEgZnVuY3Rpb24gZm9yIHByb2ZpbGluZy4KICAqIEBvcHMgLSBvcHMgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uIHRvIHVucmVnaXN0ZXIKICAqCiAgKiBVbnJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3YXMgYWRkZWQgdG8gYmUgY2FsbGVkIGJ5IGZ0cmFjZSBwcm9maWxpbmcuCkBAIC0xOTE3LDEwICsyNDg1LDEwIEBACiB7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCXJldCA9IF9fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24ob3BzKTsKIAlmdHJhY2Vfc2h1dGRvd24oMCk7Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE5MzUsNyArMjUwMyw3IEBACiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXQgID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGZpbGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAKQEAgLTE5NjQsNyArMjUzMiw3IEBACiAJfQogCiAgb3V0OgotCW11dGV4X3VubG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDI5LDYgKzI1OTcsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZAorZnRyYWNlX2dyYXBoX3Byb2JlX3NjaGVkX3N3aXRjaChzdHJ1Y3QgcnEgKl9fcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVzdGFtcDsKKwlpbnQgaW5kZXg7CisKKwkvKgorCSAqIERvZXMgdGhlIHVzZXIgd2FudCB0byBjb3VudCB0aGUgdGltZSBhIGZ1bmN0aW9uIHdhcyBhc2xlZXAuCisJICogSWYgc28sIGRvIG5vdCB1cGRhdGUgdGhlIHRpbWUgc3RhbXBzLgorCSAqLworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU0xFRVBfVElNRSkKKwkJcmV0dXJuOworCisJdGltZXN0YW1wID0gdHJhY2VfY2xvY2tfbG9jYWwoKTsKKworCXByZXYtPmZ0cmFjZV90aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisKKwkvKiBvbmx5IHByb2Nlc3MgdGFza3MgdGhhdCB3ZSB0aW1lc3RhbXBlZCAqLworCWlmICghbmV4dC0+ZnRyYWNlX3RpbWVzdGFtcCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBVcGRhdGUgYWxsIHRoZSBjb3VudGVycyBpbiBuZXh0IHRvIG1ha2UgdXAgZm9yIHRoZQorCSAqIHRpbWUgbmV4dCB3YXMgc2xlZXBpbmcuCisJICovCisJdGltZXN0YW1wIC09IG5leHQtPmZ0cmFjZV90aW1lc3RhbXA7CisKKwlmb3IgKGluZGV4ID0gbmV4dC0+Y3Vycl9yZXRfc3RhY2s7IGluZGV4ID49IDA7IGluZGV4LS0pCisJCW5leHQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgKz0gdGltZXN0YW1wOworfQorCiAvKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgZWFjaCB0YXNrICovCiBzdGF0aWMgaW50IHN0YXJ0X2dyYXBoX3RyYWNpbmcodm9pZCkKIHsKQEAgLTIwNTAsNiArMjY1MCwxMyBAQAogCQlyZXQgPSBhbGxvY19yZXRzdGFja190YXNrbGlzdChyZXRfc3RhY2tfbGlzdCk7CiAJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwogCisJaWYgKCFyZXQpIHsKKwkJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKGZ0cmFjZV9ncmFwaF9wcm9iZV9zY2hlZF9zd2l0Y2gpOworCQlpZiAocmV0KQorCQkJcHJfaW5mbygiZnRyYWNlX2dyYXBoOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgorCQkJCSIgcHJvYmUgdG8ga2VybmVsX3NjaGVkX3N3aXRjaFxuIik7CisJfQorCiAJa2ZyZWUocmV0X3N0YWNrX2xpc3QpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMDgwLDcgKzI2ODcsMTMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCisJLyogd2UgY3VycmVudGx5IGFsbG93IG9ubHkgb25lIHRyYWNlciByZWdpc3RlcmVkIGF0IGEgdGltZSAqLworCWlmIChhdG9taWNfcmVhZCgmZnRyYWNlX2dyYXBoX2FjdGl2ZSkpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CiAKIAlmdHJhY2Vfc3VzcGVuZF9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gZnRyYWNlX3N1c3BlbmRfbm90aWZpZXJfY2FsbDsKIAlyZWdpc3Rlcl9wbV9ub3RpZmllcigmZnRyYWNlX3N1c3BlbmRfbm90aWZpZXIpOwpAQCAtMjA5OCwyMSArMjcxMSwyNiBAQAogCWZ0cmFjZV9zdGFydHVwKEZUUkFDRV9TVEFSVF9GVU5DX1JFVCk7CiAKIG91dDoKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAogdm9pZCB1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaCh2b2lkKQogewotCW11dGV4X2xvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCisJaWYgKCF1bmxpa2VseShhdG9taWNfcmVhZCgmZnRyYWNlX2dyYXBoX2FjdGl2ZSkpKQorCQlnb3RvIG91dDsKIAogCWF0b21pY19kZWMoJmZ0cmFjZV9ncmFwaF9hY3RpdmUpOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKGZ0cmFjZV9ncmFwaF9wcm9iZV9zY2hlZF9zd2l0Y2gpOwogCWZ0cmFjZV9ncmFwaF9yZXR1cm4gPSAodHJhY2VfZnVuY19ncmFwaF9yZXRfdClmdHJhY2Vfc3R1YjsKIAlmdHJhY2VfZ3JhcGhfZW50cnkgPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YjsKIAlmdHJhY2Vfc2h1dGRvd24oRlRSQUNFX1NUT1BfRlVOQ19SRVQpOwogCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJmZ0cmFjZV9zdXNwZW5kX25vdGlmaWVyKTsKIAotCW11dGV4X3VubG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiB9CiAKIC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi8KQEAgLTIxMjcsNiArMjc0NSw3IEBACiAJCXQtPmN1cnJfcmV0X3N0YWNrID0gLTE7CiAJCWF0b21pY19zZXQoJnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UsIDApOwogCQlhdG9taWNfc2V0KCZ0LT50cmFjZV9vdmVycnVuLCAwKTsKKwkJdC0+ZnRyYWNlX3RpbWVzdGFtcCA9IDA7CiAJfSBlbHNlCiAJCXQtPnJldF9zdGFjayA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMgYi9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyMDFiMwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIE1lbW9yeSBhbGxvY2F0b3IgdHJhY2luZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFZHVhcmQgLSBHYWJyaWVsIE11bnRlYW51CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDx0cmFjZS9rbWVtdHJhY2UuaD4KKworI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisKKy8qIFNlbGVjdCBhbiBhbHRlcm5hdGl2ZSwgbWluaW1hbGlzdGljIG91dHB1dCB0aGFuIHRoZSBvcmlnaW5hbCBvbmUgKi8KKyNkZWZpbmUgVFJBQ0VfS01FTV9PUFRfTUlOSU1BTAkweDEKKworc3RhdGljIHN0cnVjdCB0cmFjZXJfb3B0IGttZW1fb3B0c1tdID0geworCS8qIERlZmF1bHQgZGlzYWJsZSB0aGUgbWluaW1hbGlzdGljIG91dHB1dCAqLworCXsgVFJBQ0VSX09QVChrbWVtX21pbmltYWxpc3RpYywgVFJBQ0VfS01FTV9PUFRfTUlOSU1BTCkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIGttZW1fdHJhY2VyX2ZsYWdzID0geworCS52YWwgPSAwLAorCS5vcHRzID0ga21lbV9vcHRzCit9OworCisKK3N0YXRpYyBib29sIGttZW1fdHJhY2luZ19lbmFibGVkIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICprbWVtdHJhY2VfYXJyYXk7CisKK3N0YXRpYyBpbnQga21lbV90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJaW50IGNwdTsKKwlrbWVtdHJhY2VfYXJyYXkgPSB0cjsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1X3Bvc3NpYmxlX21hcCkKKwkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKKworCWttZW1fdHJhY2luZ19lbmFibGVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrbWVtX3RyYWNlX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJa21lbV90cmFjaW5nX2VuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQga21lbXRyYWNlX2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICpzKQoreworCS8qIERvbid0IG5lZWQgaGVhZGVycyBmb3IgdGhlIG9yaWdpbmFsIGttZW10cmFjZSBvdXRwdXQgKi8KKwlpZiAoIShrbWVtX3RyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9LTUVNX09QVF9NSU5JTUFMKSkKKwkJcmV0dXJuOworCisJc2VxX3ByaW50ZihzLCAiI1xuIik7CisJc2VxX3ByaW50ZihzLCAiIyBBTExPQyAgVFlQRSAgUkVRICAgR0lWRU4gIEZMQUdTICAgICAiCisJCQkiICAgICAgUE9JTlRFUiAgICAgICAgIE5PREUgICAgQ0FMTEVSXG4iKTsKKwlzZXFfcHJpbnRmKHMsICIjIEZSRUUgICB8ICAgICAgfCAgICAgfCAgICAgICB8ICAgICAgICIKKwkJCSIgICAgICAgfCAgIHwgICAgICAgICAgICB8ICAgICAgICB8XG4iKTsKKwlzZXFfcHJpbnRmKHMsICIjIHxcblxuIik7Cit9CisKKy8qCisgKiBUaGUgdHdvIGZvbGxvd2luZyBmdW5jdGlvbnMgZ2l2ZSB0aGUgb3JpZ2luYWwgb3V0cHV0IGZyb20ga21lbXRyYWNlLAorICogb3Igc29tZXRoaW5nIGNsb3NlIHRvLi4uLnBlcmhhcHMgdGhleSBuZWVkIHNvbWUgbWlzc2luZyB0aGluZ3MKKyAqLworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CitrbWVtdHJhY2VfcHJpbnRfYWxsb2Nfb3JpZ2luYWwoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCWludCByZXQ7CisKKwkvKiBUYWtlbiBmcm9tIHRoZSBvbGQgbGludXgva21lbXRyYWNlLmggKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJ0eXBlX2lkICVkIGNhbGxfc2l0ZSAlbHUgcHRyICVsdSAiCisJICAiYnl0ZXNfcmVxICVsdSBieXRlc19hbGxvYyAlbHUgZ2ZwX2ZsYWdzICVsdSBub2RlICVkXG4iLAorCSAgIGVudHJ5LT50eXBlX2lkLCBlbnRyeS0+Y2FsbF9zaXRlLCAodW5zaWduZWQgbG9uZykgZW50cnktPnB0ciwKKwkgICAodW5zaWduZWQgbG9uZykgZW50cnktPmJ5dGVzX3JlcSwgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5ieXRlc19hbGxvYywKKwkgICAodW5zaWduZWQgbG9uZykgZW50cnktPmdmcF9mbGFncywgZW50cnktPm5vZGUpOworCisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAora21lbXRyYWNlX3ByaW50X2ZyZWVfb3JpZ2luYWwoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCXN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJaW50IHJldDsKKworCS8qIFRha2VuIGZyb20gdGhlIG9sZCBsaW51eC9rbWVtdHJhY2UuaCAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgInR5cGVfaWQgJWQgY2FsbF9zaXRlICVsdSBwdHIgJWx1XG4iLAorCSAgIGVudHJ5LT50eXBlX2lkLCBlbnRyeS0+Y2FsbF9zaXRlLCAodW5zaWduZWQgbG9uZykgZW50cnktPnB0cik7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworCisvKiBUaGUgdHdvIG90aGVyIGZvbGxvd2luZyBwcm92aWRlIGEgbW9yZSBtaW5pbWFsaXN0aWMgb3V0cHV0ICovCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QKK2ttZW10cmFjZV9wcmludF9hbGxvY19jb21wcmVzcyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCWludCByZXQ7CisKKwkvKiBBbGxvYyBlbnRyeSAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgKyAgICAgICIpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBUeXBlICovCisJc3dpdGNoIChlbnRyeS0+dHlwZV9pZCkgeworCWNhc2UgS01FTVRSQUNFX1RZUEVfS01BTExPQzoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiSyAgICIpOworCQlicmVhazsKKwljYXNlIEtNRU1UUkFDRV9UWVBFX0NBQ0hFOgorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJDICAgIik7CisJCWJyZWFrOworCWNhc2UgS01FTVRSQUNFX1RZUEVfUEFHRVM6CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlAgICAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPyAgICIpOworCX0KKworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBSZXF1ZXN0ZWQgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNHp1ICAgIiwgZW50cnktPmJ5dGVzX3JlcSk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIEFsbG9jYXRlZCAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU0enUgICAiLCBlbnRyeS0+Ynl0ZXNfYWxsb2MpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBGbGFncworCSAqIFRPRE86IHdvdWxkIGJlIGJldHRlciB0byBzZWUgdGhlIG5hbWUgb2YgdGhlIEdGUCBmbGFnIG5hbWVzCisJICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTA4eCAgICIsIGVudHJ5LT5nZnBfZmxhZ3MpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBQb2ludGVyIHRvIGFsbG9jYXRlZCAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIjB4JXR4ICAgIiwgKHB0cmRpZmZfdCllbnRyeS0+cHRyKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogTm9kZSAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU0ZCAgICIsIGVudHJ5LT5ub2RlKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogQ2FsbCBzaXRlICovCisJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBlbnRyeS0+Y2FsbF9zaXRlLCAwKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QKK2ttZW10cmFjZV9wcmludF9mcmVlX2NvbXByZXNzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQlzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCWludCByZXQ7CisKKwkvKiBGcmVlIGVudHJ5ICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAtICAgICAgIik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIFR5cGUgKi8KKwlzd2l0Y2ggKGVudHJ5LT50eXBlX2lkKSB7CisJY2FzZSBLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DOgorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJLICAgICAiKTsKKwkJYnJlYWs7CisJY2FzZSBLTUVNVFJBQ0VfVFlQRV9DQUNIRToKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiQyAgICAgIik7CisJCWJyZWFrOworCWNhc2UgS01FTVRSQUNFX1RZUEVfUEFHRVM6CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlAgICAgICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICI/ICAgICAiKTsKKwl9CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogU2tpcCByZXF1ZXN0ZWQvYWxsb2NhdGVkL2ZsYWdzICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogUG9pbnRlciB0byBhbGxvY2F0ZWQgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIweCV0eCAgICIsIChwdHJkaWZmX3QpZW50cnktPnB0cik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIFNraXAgbm9kZSAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgICAgICAiKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogQ2FsbCBzaXRlICovCisJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBlbnRyeS0+Y2FsbF9zaXRlLCAwKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3Qga21lbXRyYWNlX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisKKwlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CisJY2FzZSBUUkFDRV9LTUVNX0FMTE9DOiB7CisJCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmZpZWxkOworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCQlpZiAoa21lbV90cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfS01FTV9PUFRfTUlOSU1BTCkKKwkJCXJldHVybiBrbWVtdHJhY2VfcHJpbnRfYWxsb2NfY29tcHJlc3MoaXRlciwgZmllbGQpOworCQllbHNlCisJCQlyZXR1cm4ga21lbXRyYWNlX3ByaW50X2FsbG9jX29yaWdpbmFsKGl0ZXIsIGZpZWxkKTsKKwl9CisKKwljYXNlIFRSQUNFX0tNRU1fRlJFRTogeworCQlzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgKmZpZWxkOworCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCQlpZiAoa21lbV90cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfS01FTV9PUFRfTUlOSU1BTCkKKwkJCXJldHVybiBrbWVtdHJhY2VfcHJpbnRfZnJlZV9jb21wcmVzcyhpdGVyLCBmaWVsZCk7CisJCWVsc2UKKwkJCXJldHVybiBrbWVtdHJhY2VfcHJpbnRfZnJlZV9vcmlnaW5hbChpdGVyLCBmaWVsZCk7CisJfQorCisJZGVmYXVsdDoKKwkJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOworCX0KK30KKworLyogVHJhY2UgYWxsb2NhdGlvbnMgKi8KK3ZvaWQga21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShlbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAorCQkJICAgICBjb25zdCB2b2lkICpwdHIsCisJCQkgICAgIHNpemVfdCBieXRlc19yZXEsCisJCQkgICAgIHNpemVfdCBieXRlc19hbGxvYywKKwkJCSAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzLAorCQkJICAgICBpbnQgbm9kZSkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5OworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBrbWVtdHJhY2VfYXJyYXk7CisKKwlpZiAoIWttZW1fdHJhY2luZ19lbmFibGVkKQorCQlyZXR1cm47CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0tNRU1fQUxMT0MsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOworCWlmICghZXZlbnQpCisJCXJldHVybjsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCisJZW50cnktPmNhbGxfc2l0ZSA9IGNhbGxfc2l0ZTsKKwllbnRyeS0+cHRyID0gcHRyOworCWVudHJ5LT5ieXRlc19yZXEgPSBieXRlc19yZXE7CisJZW50cnktPmJ5dGVzX2FsbG9jID0gYnl0ZXNfYWxsb2M7CisJZW50cnktPmdmcF9mbGFncyA9IGdmcF9mbGFnczsKKwllbnRyeS0+bm9kZQk9CW5vZGU7CisKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOworfQorRVhQT1JUX1NZTUJPTChrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKTsKKwordm9pZCBrbWVtdHJhY2VfbWFya19mcmVlKGVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAorCQkgICAgICAgY29uc3Qgdm9pZCAqcHRyKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0ga21lbXRyYWNlX2FycmF5OworCisJaWYgKCFrbWVtX3RyYWNpbmdfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9LTUVNX0ZSRUUsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOworCWlmICghZXZlbnQpCisJCXJldHVybjsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT50eXBlX2lkCT0gdHlwZV9pZDsKKwllbnRyeS0+Y2FsbF9zaXRlID0gY2FsbF9zaXRlOworCWVudHJ5LT5wdHIgPSBwdHI7CisKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOworfQorRVhQT1JUX1NZTUJPTChrbWVtdHJhY2VfbWFya19mcmVlKTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXIga21lbV90cmFjZXIgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAia21lbXRyYWNlIiwKKwkuaW5pdAkJPSBrbWVtX3RyYWNlX2luaXQsCisJLnJlc2V0CQk9IGttZW1fdHJhY2VfcmVzZXQsCisJLnByaW50X2xpbmUJPSBrbWVtdHJhY2VfcHJpbnRfbGluZSwKKwkucHJpbnRfaGVhZGVyID0ga21lbXRyYWNlX2hlYWRlcnMsCisJLmZsYWdzCQk9ICZrbWVtX3RyYWNlcl9mbGFncworfTsKKwordm9pZCBrbWVtdHJhY2VfaW5pdCh2b2lkKQoreworCS8qIGVhcmxpZXN0IG9wcG9ydHVuaXR5IHRvIHN0YXJ0IGttZW0gdHJhY2luZyAqLworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2ttZW1fdHJhY2VyKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigma21lbV90cmFjZXIpOworfQorCitkZXZpY2VfaW5pdGNhbGwoaW5pdF9rbWVtX3RyYWNlcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IGJkMzhjNWMuLjk2MGNiZjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC00LDIxICs0LDkyIEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CiAgKi8KICNpbmNsdWRlIDxsaW51eC9yaW5nX2J1ZmZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlX2Nsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiB1c2VkIGZvciBzY2hlZF9jbG9jaygpIChmb3Igbm93KSAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgogCiAvKgorICogVGhlIHJpbmcgYnVmZmVyIGlzIG1hZGUgdXAgb2YgYSBsaXN0IG9mIHBhZ2VzLiBBIHNlcGFyYXRlIGxpc3Qgb2YgcGFnZXMgaXMKKyAqIGFsbG9jYXRlZCBmb3IgZWFjaCBDUFUuIEEgd3JpdGVyIG1heSBvbmx5IHdyaXRlIHRvIGEgYnVmZmVyIHRoYXQgaXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ1BVIGl0IGlzIGN1cnJlbnRseSBleGVjdXRpbmcgb24uICBBIHJlYWRlciBtYXkgcmVhZAorICogZnJvbSBhbnkgcGVyIGNwdSBidWZmZXIuCisgKgorICogVGhlIHJlYWRlciBpcyBzcGVjaWFsLiBGb3IgZWFjaCBwZXIgY3B1IGJ1ZmZlciwgdGhlIHJlYWRlciBoYXMgaXRzIG93bgorICogcmVhZGVyIHBhZ2UuIFdoZW4gYSByZWFkZXIgaGFzIHJlYWQgdGhlIGVudGlyZSByZWFkZXIgcGFnZSwgdGhpcyByZWFkZXIKKyAqIHBhZ2UgaXMgc3dhcHBlZCB3aXRoIGFub3RoZXIgcGFnZSBpbiB0aGUgcmluZyBidWZmZXIuCisgKgorICogTm93LCBhcyBsb25nIGFzIHRoZSB3cml0ZXIgaXMgb2ZmIHRoZSByZWFkZXIgcGFnZSwgdGhlIHJlYWRlciBjYW4gZG8gd2hhdAorICogZXZlciBpdCB3YW50cyB3aXRoIHRoYXQgcGFnZS4gVGhlIHdyaXRlciB3aWxsIG5ldmVyIHdyaXRlIHRvIHRoYXQgcGFnZQorICogYWdhaW4gKGFzIGxvbmcgYXMgaXQgaXMgb3V0IG9mIHRoZSByaW5nIGJ1ZmZlcikuCisgKgorICogSGVyZSdzIHNvbWUgc2lsbHkgQVNDSUkgYXJ0LgorICoKKyAqICAgKy0tLS0tLSsKKyAqICAgfHJlYWRlcnwgICAgICAgICAgUklORyBCVUZGRVIKKyAqICAgfHBhZ2UgIHwKKyAqICAgKy0tLS0tLSsgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICogICAgICAgICAgICAgICAgICAgfCAgIHwtLT58ICAgfC0tPnwgICB8CisgKiAgICAgICAgICAgICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKgorICogICArLS0tLS0tKworICogICB8cmVhZGVyfCAgICAgICAgICBSSU5HIEJVRkZFUgorICogICB8cGFnZSAgfC0tLS0tLS0tLS0tLS0tLS0tLXYKKyAqICAgKy0tLS0tLSsgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICogICAgICAgICAgICAgICAgICAgfCAgIHwtLT58ICAgfC0tPnwgICB8CisgKiAgICAgICAgICAgICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKgorICogICArLS0tLS0tKworICogICB8cmVhZGVyfCAgICAgICAgICBSSU5HIEJVRkZFUgorICogICB8cGFnZSAgfC0tLS0tLS0tLS0tLS0tLS0tLXYKKyAqICAgKy0tLS0tLSsgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICogICAgICBeICAgICAgICAgICAgfCAgIHwtLT58ICAgfC0tPnwgICB8CisgKiAgICAgIHwgICAgICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAqICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKgorICogICArLS0tLS0tKworICogICB8YnVmZmVyfCAgICAgICAgICBSSU5HIEJVRkZFUgorICogICB8cGFnZSAgfC0tLS0tLS0tLS0tLS0tLS0tLXYKKyAqICAgKy0tLS0tLSsgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICogICAgICBeICAgICAgICAgICAgfCAgIHwgICB8ICAgfC0tPnwgICB8CisgKiAgICAgIHwgICBOZXcgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAqICAgICAgfCAgUmVhZGVyLS0tLS0tXiAgICAgICAgICAgICAgIHwKKyAqICAgICAgfCAgIHBhZ2UgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKgorICogQWZ0ZXIgd2UgbWFrZSB0aGlzIHN3YXAsIHRoZSByZWFkZXIgY2FuIGhhbmQgdGhpcyBwYWdlIG9mZiB0byB0aGUgc3BsaWNlCisgKiBjb2RlIGFuZCBiZSBkb25lIHdpdGggaXQuIEl0IGNhbiBldmVuIGFsbG9jYXRlIGEgbmV3IHBhZ2UgaWYgaXQgbmVlZHMgdG8KKyAqIGFuZCBzd2FwIHRoYXQgaW50byB0aGUgcmluZyBidWZmZXIuCisgKgorICogV2Ugd2lsbCBiZSB1c2luZyBjbXB4Y2hnIHNvb24gdG8gbWFrZSBhbGwgdGhpcyBsb2NrbGVzcy4KKyAqCisgKi8KKworLyoKICAqIEEgZmFzdCB3YXkgdG8gZW5hYmxlIG9yIGRpc2FibGUgYWxsIHJpbmcgYnVmZmVycyBpcyB0bwogICogY2FsbCB0cmFjaW5nX29uIG9yIHRyYWNpbmdfb2ZmLiBUdXJuaW5nIG9mZiB0aGUgcmluZyBidWZmZXJzCiAgKiBwcmV2ZW50cyBhbGwgcmluZyBidWZmZXJzIGZyb20gYmVpbmcgcmVjb3JkZWQgdG8uCkBAIC01Nyw3ICsxMjgsOSBAQAogCVJCX0JVRkZFUlNfRElTQUJMRUQJPSAxIDw8IFJCX0JVRkZFUlNfRElTQUJMRURfQklULAogfTsKIAotc3RhdGljIGxvbmcgcmluZ19idWZmZXJfZmxhZ3MgX19yZWFkX21vc3RseSA9IFJCX0JVRkZFUlNfT047CitzdGF0aWMgdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9mbGFncyBfX3JlYWRfbW9zdGx5ID0gUkJfQlVGRkVSU19PTjsKKworI2RlZmluZSBCVUZfUEFHRV9IRFJfU0laRSBvZmZzZXRvZihzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSwgZGF0YSkKIAogLyoqCiAgKiB0cmFjaW5nX29uIC0gZW5hYmxlIGFsbCB0cmFjaW5nIGJ1ZmZlcnMKQEAgLTg5LDQyICsxNjIsMjYgQEAKICAqIHRyYWNpbmdfb2ZmX3Blcm1hbmVudCAtIHBlcm1hbmVudGx5IGRpc2FibGUgcmluZyBidWZmZXJzCiAgKgogICogVGhpcyBmdW5jdGlvbiwgb25jZSBjYWxsZWQsIHdpbGwgZGlzYWJsZSBhbGwgcmluZyBidWZmZXJzCi0gKiBwZXJtYW5lbnR5LgorICogcGVybWFuZW50bHkuCiAgKi8KIHZvaWQgdHJhY2luZ19vZmZfcGVybWFuZW50KHZvaWQpCiB7CiAJc2V0X2JpdChSQl9CVUZGRVJTX0RJU0FCTEVEX0JJVCwgJnJpbmdfYnVmZmVyX2ZsYWdzKTsKIH0KIAorLyoqCisgKiB0cmFjaW5nX2lzX29uIC0gc2hvdyBzdGF0ZSBvZiByaW5nIGJ1ZmZlcnMgZW5hYmxlZAorICovCitpbnQgdHJhY2luZ19pc19vbih2b2lkKQoreworCXJldHVybiByaW5nX2J1ZmZlcl9mbGFncyA9PSBSQl9CVUZGRVJTX09OOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2luZ19pc19vbik7CisKICNpbmNsdWRlICJ0cmFjZS5oIgogCi0vKiBVcCB0aGlzIGlmIHlvdSB3YW50IHRvIHRlc3QgdGhlIFRJTUVfRVhURU5UUyBhbmQgbm9ybWFsaXphdGlvbiAqLwotI2RlZmluZSBERUJVR19TSElGVCAwCi0KLS8qIEZJWE1FISEhICovCi11NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChpbnQgY3B1KQotewotCXU2NCB0aW1lOwotCi0JcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKLQkvKiBzaGlmdCB0byBkZWJ1Zy90ZXN0IG5vcm1hbGl6YXRpb24gYW5kIFRJTUVfRVhURU5UUyAqLwotCXRpbWUgPSBzY2hlZF9jbG9jaygpIDw8IERFQlVHX1NISUZUOwotCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOwotCi0JcmV0dXJuIHRpbWU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl90aW1lX3N0YW1wKTsKLQotdm9pZCByaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChpbnQgY3B1LCB1NjQgKnRzKQotewotCS8qIEp1c3Qgc3R1cGlkIHRlc3RpbmcgdGhlIG5vcm1hbGl6ZSBmdW5jdGlvbiBhbmQgZGVsdGFzICovCi0JKnRzID4+PSBERUJVR19TSElGVDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKTsKLQotI2RlZmluZSBSQl9FVk5UX0hEUl9TSVpFIChzaXplb2Yoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50KSkKLSNkZWZpbmUgUkJfQUxJR05NRU5UX1NISUZUCTIKLSNkZWZpbmUgUkJfQUxJR05NRU5UCQkoMSA8PCBSQl9BTElHTk1FTlRfU0hJRlQpCisjZGVmaW5lIFJCX0VWTlRfSERSX1NJWkUgKG9mZnNldG9mKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCwgYXJyYXkpKQorI2RlZmluZSBSQl9BTElHTk1FTlQJCTRVCiAjZGVmaW5lIFJCX01BWF9TTUFMTF9EQVRBCTI4CiAKIGVudW0gewpAQCAtMTMyLDE2ICsxODksNjUgQEAKIAlSQl9MRU5fVElNRV9TVEFNUCA9IDE2LAogfTsKIAotLyogaW5saW5lIGZvciByaW5nIGJ1ZmZlciBmYXN0IHBhdGhzICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1yYl9ldmVudF9sZW5ndGgoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHJiX251bGxfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX1BBRERJTkcgJiYgZXZlbnQtPnRpbWVfZGVsdGEgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmJfZGlzY2FyZGVkX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9QQURESU5HICYmIGV2ZW50LT50aW1lX2RlbHRhOworfQorCitzdGF0aWMgdm9pZCByYl9ldmVudF9zZXRfcGFkZGluZyhzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCWV2ZW50LT50eXBlID0gUklOR0JVRl9UWVBFX1BBRERJTkc7CisJZXZlbnQtPnRpbWVfZGVsdGEgPSAwOworfQorCisvKioKKyAqIHJpbmdfYnVmZmVyX2V2ZW50X2Rpc2NhcmQgLSBkaXNjYXJkIGFuIGV2ZW50IGluIHRoZSByaW5nIGJ1ZmZlcgorICogQGJ1ZmZlcjogdGhlIHJpbmcgYnVmZmVyCisgKiBAZXZlbnQ6IHRoZSBldmVudCB0byBkaXNjYXJkCisgKgorICogU29tZXRpbWVzIGEgZXZlbnQgdGhhdCBpcyBpbiB0aGUgcmluZyBidWZmZXIgbmVlZHMgdG8gYmUgaWdub3JlZC4KKyAqIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgdXNlciBkaXNjYXJkIGFuIGV2ZW50IGluIHRoZSByaW5nIGJ1ZmZlcgorICogYW5kIHRoZW4gdGhhdCBldmVudCB3aWxsIG5vdCBiZSByZWFkIGxhdGVyLgorICoKKyAqIE5vdGUsIGl0IGlzIHVwIHRvIHRoZSB1c2VyIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzLCBhbmQgcHJvdGVjdAorICogYWdhaW5zdCByYWNlcy4gSWYgdGhlIHVzZXIgZGlzY2FyZHMgYW4gZXZlbnQgdGhhdCBoYXMgYmVlbiBjb25zdW1lZAorICogaXQgaXMgcG9zc2libGUgdGhhdCBpdCBjb3VsZCBjb3JydXB0IHRoZSByaW5nIGJ1ZmZlci4KKyAqLwordm9pZCByaW5nX2J1ZmZlcl9ldmVudF9kaXNjYXJkKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJZXZlbnQtPnR5cGUgPSBSSU5HQlVGX1RZUEVfUEFERElORzsKKwkvKiB0aW1lIGRlbHRhIG11c3QgYmUgbm9uIHplcm8gKi8KKwlpZiAoIWV2ZW50LT50aW1lX2RlbHRhKQorCQlldmVudC0+dGltZV9kZWx0YSA9IDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAorcmJfZXZlbnRfZGF0YV9sZW5ndGgoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKIHsKIAl1bnNpZ25lZCBsZW5ndGg7CiAKKwlpZiAoZXZlbnQtPmxlbikKKwkJbGVuZ3RoID0gZXZlbnQtPmxlbiAqIFJCX0FMSUdOTUVOVDsKKwllbHNlCisJCWxlbmd0aCA9IGV2ZW50LT5hcnJheVswXTsKKwlyZXR1cm4gbGVuZ3RoICsgUkJfRVZOVF9IRFJfU0laRTsKK30KKworLyogaW5saW5lIGZvciByaW5nIGJ1ZmZlciBmYXN0IHBhdGhzICovCitzdGF0aWMgdW5zaWduZWQKK3JiX2V2ZW50X2xlbmd0aChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQorewogCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKIAljYXNlIFJJTkdCVUZfVFlQRV9QQURESU5HOgotCQkvKiB1bmRlZmluZWQgKi8KLQkJcmV0dXJuIC0xOworCQlpZiAocmJfbnVsbF9ldmVudChldmVudCkpCisJCQkvKiB1bmRlZmluZWQgKi8KKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIHJiX2V2ZW50X2RhdGFfbGVuZ3RoKGV2ZW50KTsKIAogCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOgogCQlyZXR1cm4gUkJfTEVOX1RJTUVfRVhURU5EOwpAQCAtMTUwLDExICsyNTYsNyBAQAogCQlyZXR1cm4gUkJfTEVOX1RJTUVfU1RBTVA7CiAKIAljYXNlIFJJTkdCVUZfVFlQRV9EQVRBOgotCQlpZiAoZXZlbnQtPmxlbikKLQkJCWxlbmd0aCA9IGV2ZW50LT5sZW4gPDwgUkJfQUxJR05NRU5UX1NISUZUOwotCQllbHNlCi0JCQlsZW5ndGggPSBldmVudC0+YXJyYXlbMF07Ci0JCXJldHVybiBsZW5ndGggKyBSQl9FVk5UX0hEUl9TSVpFOworCQlyZXR1cm4gcmJfZXZlbnRfZGF0YV9sZW5ndGgoZXZlbnQpOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KQEAgLTE3OSw3ICsyODEsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZXZlbnRfbGVuZ3RoKTsKIAogLyogaW5saW5lIGZvciByaW5nIGJ1ZmZlciBmYXN0IHBhdGhzICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKgorc3RhdGljIHZvaWQgKgogcmJfZXZlbnRfZGF0YShzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewogCUJVR19PTihldmVudC0+dHlwZSAhPSBSSU5HQlVGX1RZUEVfREFUQSk7CkBAIC0yMDksNyArMzExLDcgQEAKIAogc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgewogCXU2NAkJIHRpbWVfc3RhbXA7CS8qIHBhZ2UgdGltZSBzdGFtcCAqLwotCWxvY2FsX3QJCSBjb21taXQ7CS8qIHdyaXRlIGNvbW1pdGVkIGluZGV4ICovCisJbG9jYWxfdAkJIGNvbW1pdDsJLyogd3JpdGUgY29tbWl0dGVkIGluZGV4ICovCiAJdW5zaWduZWQgY2hhcgkgZGF0YVtdOwkvKiBkYXRhIG9mIGJ1ZmZlciBwYWdlICovCiB9OwogCkBAIC0yMjUsMTQgKzMyNywyNSBAQAogCWxvY2FsX3NldCgmYnBhZ2UtPmNvbW1pdCwgMCk7CiB9CiAKKy8qKgorICogcmluZ19idWZmZXJfcGFnZV9sZW4gLSB0aGUgc2l6ZSBvZiBkYXRhIG9uIHRoZSBwYWdlLgorICogQHBhZ2U6IFRoZSBwYWdlIHRvIHJlYWQKKyAqCisgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSBvbiB0aGUgcGFnZSwgaW5jbHVkaW5nIGJ1ZmZlciBwYWdlIGhlYWRlci4KKyAqLworc2l6ZV90IHJpbmdfYnVmZmVyX3BhZ2VfbGVuKHZvaWQgKnBhZ2UpCit7CisJcmV0dXJuIGxvY2FsX3JlYWQoJigoc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKilwYWdlKS0+Y29tbWl0KQorCQkrIEJVRl9QQUdFX0hEUl9TSVpFOworfQorCiAvKgogICogQWxzbyBzdG9sZW4gZnJvbSBtbS9zbG9iLmMuIFRoYW5rcyB0byBNYXRoaWV1IERlc25veWVycyBmb3IgcG9pbnRpbmcKICAqIHRoaXMgaXNzdWUgb3V0LgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9idWZmZXJfcGFnZShzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlKQorc3RhdGljIHZvaWQgZnJlZV9idWZmZXJfcGFnZShzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlKQogewotCWlmIChicGFnZS0+cGFnZSkKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJwYWdlLT5wYWdlKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnBhZ2UtPnBhZ2UpOwogCWtmcmVlKGJwYWdlKTsKIH0KIApAQCAtMjQ2LDcgKzM1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgQlVGX1BBR0VfU0laRSAoUEFHRV9TSVpFIC0gb2Zmc2V0b2Yoc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UsIGRhdGEpKQorI2RlZmluZSBCVUZfUEFHRV9TSVpFIChQQUdFX1NJWkUgLSBCVUZfUEFHRV9IRFJfU0laRSkKIAogLyoKICAqIGhlYWRfcGFnZSA9PSB0YWlsX3BhZ2UgJiYgaGVhZCA9PSB0YWlsIHRoZW4gYnVmZmVyIGlzIGVtcHR5LgpAQCAtMjYwLDcgKzM3Myw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAkJcGFnZXM7CiAJc3RydWN0IGJ1ZmZlcl9wYWdlCQkqaGVhZF9wYWdlOwkvKiByZWFkIGZyb20gaGVhZCAqLwogCXN0cnVjdCBidWZmZXJfcGFnZQkJKnRhaWxfcGFnZTsJLyogd3JpdGUgdG8gdGFpbCAqLwotCXN0cnVjdCBidWZmZXJfcGFnZQkJKmNvbW1pdF9wYWdlOwkvKiBjb21taXRlZCBwYWdlcyAqLworCXN0cnVjdCBidWZmZXJfcGFnZQkJKmNvbW1pdF9wYWdlOwkvKiBjb21taXR0ZWQgcGFnZXMgKi8KIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSpyZWFkZXJfcGFnZTsKIAl1bnNpZ25lZCBsb25nCQkJb3ZlcnJ1bjsKIAl1bnNpZ25lZCBsb25nCQkJZW50cmllczsKQEAgLTI3MywxMiArMzg2LDE3IEBACiAJdW5zaWduZWQJCQlwYWdlczsKIAl1bnNpZ25lZAkJCWZsYWdzOwogCWludAkJCQljcHVzOwotCWNwdW1hc2tfdmFyX3QJCQljcHVtYXNrOwogCWF0b21pY190CQkJcmVjb3JkX2Rpc2FibGVkOworCWNwdW1hc2tfdmFyX3QJCQljcHVtYXNrOwogCiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdQkqKmJ1ZmZlcnM7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJCWNwdV9ub3RpZnk7CisjZW5kaWYKKwl1NjQJCQkJKCpjbG9jaykodm9pZCk7CiB9OwogCiBzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciB7CkBAIC0yOTksMTEgKzQxNywzNSBAQAogCQlfX19fX3JldDsJCQkJCVwKIAl9KQogCisvKiBVcCB0aGlzIGlmIHlvdSB3YW50IHRvIHRlc3QgdGhlIFRJTUVfRVhURU5UUyBhbmQgbm9ybWFsaXphdGlvbiAqLworI2RlZmluZSBERUJVR19TSElGVCAwCisKK3U2NCByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQoreworCXU2NCB0aW1lOworCisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKwkvKiBzaGlmdCB0byBkZWJ1Zy90ZXN0IG5vcm1hbGl6YXRpb24gYW5kIFRJTUVfRVhURU5UUyAqLworCXRpbWUgPSBidWZmZXItPmNsb2NrKCkgPDwgREVCVUdfU0hJRlQ7CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CisKKwlyZXR1cm4gdGltZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3RpbWVfc3RhbXApOworCit2b2lkIHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJCSAgICAgIGludCBjcHUsIHU2NCAqdHMpCit7CisJLyogSnVzdCBzdHVwaWQgdGVzdGluZyB0aGUgbm9ybWFsaXplIGZ1bmN0aW9uIGFuZCBkZWx0YXMgKi8KKwkqdHMgPj49IERFQlVHX1NISUZUOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXApOworCiAvKioKICAqIGNoZWNrX3BhZ2VzIC0gaW50ZWdyaXR5IGNoZWNrIG9mIGJ1ZmZlciBwYWdlcwogICogQGNwdV9idWZmZXI6IENQVSBidWZmZXIgd2l0aCBwYWdlcyB0byB0ZXN0CiAgKgotICogQXMgYSBzYWZ0eSBtZWFzdXJlIHdlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBwYWdlcyBoYXZlIG5vdAorICogQXMgYSBzYWZldHkgbWVhc3VyZSB3ZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIGRhdGEgcGFnZXMgaGF2ZSBub3QKICAqIGJlZW4gY29ycnVwdGVkLgogICovCiBzdGF0aWMgaW50IHJiX2NoZWNrX3BhZ2VzKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQpAQCAtNDIxLDcgKzU2Myw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZjcHVfYnVmZmVyLT5wYWdlczsKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlLCAqdG1wOwogCi0JbGlzdF9kZWxfaW5pdCgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmxpc3QpOwogCWZyZWVfYnVmZmVyX3BhZ2UoY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJwYWdlLCB0bXAsIGhlYWQsIGxpc3QpIHsKQEAgLTQzNyw2ICs1NzgsMTEgQEAKICAqLwogZXh0ZXJuIGludCByaW5nX2J1ZmZlcl9wYWdlX3Rvb19iaWcodm9pZCk7CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbnQgcmJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpOworI2VuZGlmCisKIC8qKgogICogcmluZ19idWZmZXJfYWxsb2MgLSBhbGxvY2F0ZSBhIG5ldyByaW5nX2J1ZmZlcgogICogQHNpemU6IHRoZSBzaXplIGluIGJ5dGVzIHBlciBjcHUgdGhhdCBpcyBuZWVkZWQuCkBAIC00NjksMTIgKzYxNSwyMyBAQAogCiAJYnVmZmVyLT5wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBCVUZfUEFHRV9TSVpFKTsKIAlidWZmZXItPmZsYWdzID0gZmxhZ3M7CisJYnVmZmVyLT5jbG9jayA9IHRyYWNlX2Nsb2NrX2xvY2FsOwogCiAJLyogbmVlZCBhdCBsZWFzdCB0d28gcGFnZXMgKi8KIAlpZiAoYnVmZmVyLT5wYWdlcyA9PSAxKQogCQlidWZmZXItPnBhZ2VzKys7CiAKKwkvKgorCSAqIEluIGNhc2Ugb2Ygbm9uLWhvdHBsdWcgY3B1LCBpZiB0aGUgcmluZy1idWZmZXIgaXMgYWxsb2NhdGVkCisJICogaW4gZWFybHkgaW5pdGNhbGwsIGl0IHdpbGwgbm90IGJlIG5vdGlmaWVkIG9mIHNlY29uZGFyeSBjcHVzLgorCSAqIEluIHRoYXQgb2ZmIGNhc2UsIHdlIG5lZWQgdG8gYWxsb2NhdGUgZm9yIGFsbCBwb3NzaWJsZSBjcHVzLgorCSAqLworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWdldF9vbmxpbmVfY3B1cygpOworCWNwdW1hc2tfY29weShidWZmZXItPmNwdW1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisjZWxzZQogCWNwdW1hc2tfY29weShidWZmZXItPmNwdW1hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTsKKyNlbmRpZgogCWJ1ZmZlci0+Y3B1cyA9IG5yX2NwdV9pZHM7CiAKIAlic2l6ZSA9IHNpemVvZih2b2lkICopICogbnJfY3B1X2lkczsKQEAgLTQ5MCw2ICs2NDcsMTMgQEAKIAkJCWdvdG8gZmFpbF9mcmVlX2J1ZmZlcnM7CiAJfQogCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJYnVmZmVyLT5jcHVfbm90aWZ5Lm5vdGlmaWVyX2NhbGwgPSByYl9jcHVfbm90aWZ5OworCWJ1ZmZlci0+Y3B1X25vdGlmeS5wcmlvcml0eSA9IDA7CisJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZidWZmZXItPmNwdV9ub3RpZnkpOworI2VuZGlmCisKKwlwdXRfb25saW5lX2NwdXMoKTsKIAltdXRleF9pbml0KCZidWZmZXItPm11dGV4KTsKIAogCXJldHVybiBidWZmZXI7CkBAIC01MDMsNiArNjY3LDcgQEAKIAogIGZhaWxfZnJlZV9jcHVtYXNrOgogCWZyZWVfY3B1bWFza192YXIoYnVmZmVyLT5jcHVtYXNrKTsKKwlwdXRfb25saW5lX2NwdXMoKTsKIAogIGZhaWxfZnJlZV9idWZmZXI6CiAJa2ZyZWUoYnVmZmVyKTsKQEAgLTUxOSwxNSArNjg0LDI5IEBACiB7CiAJaW50IGNwdTsKIAorCWdldF9vbmxpbmVfY3B1cygpOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmJ1ZmZlci0+Y3B1X25vdGlmeSk7CisjZW5kaWYKKwogCWZvcl9lYWNoX2J1ZmZlcl9jcHUoYnVmZmVyLCBjcHUpCiAJCXJiX2ZyZWVfY3B1X2J1ZmZlcihidWZmZXItPmJ1ZmZlcnNbY3B1XSk7CiAKKwlwdXRfb25saW5lX2NwdXMoKTsKKwogCWZyZWVfY3B1bWFza192YXIoYnVmZmVyLT5jcHVtYXNrKTsKIAogCWtmcmVlKGJ1ZmZlcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9mcmVlKTsKIAordm9pZCByaW5nX2J1ZmZlcl9zZXRfY2xvY2soc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkgICB1NjQgKCpjbG9jaykodm9pZCkpCit7CisJYnVmZmVyLT5jbG9jayA9IGNsb2NrOworfQorCiBzdGF0aWMgdm9pZCByYl9yZXNldF9jcHUoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpOwogCiBzdGF0aWMgdm9pZApAQCAtNjI3LDE2ICs4MDYsMTUgQEAKIAkJcmV0dXJuIHNpemU7CiAKIAltdXRleF9sb2NrKCZidWZmZXItPm11dGV4KTsKKwlnZXRfb25saW5lX2NwdXMoKTsKIAogCW5yX3BhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIEJVRl9QQUdFX1NJWkUpOwogCiAJaWYgKHNpemUgPCBidWZmZXJfc2l6ZSkgewogCiAJCS8qIGVhc3kgY2FzZSwganVzdCBmcmVlIHBhZ2VzICovCi0JCWlmIChSQl9XQVJOX09OKGJ1ZmZlciwgbnJfcGFnZXMgPj0gYnVmZmVyLT5wYWdlcykpIHsKLQkJCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KKwkJaWYgKFJCX1dBUk5fT04oYnVmZmVyLCBucl9wYWdlcyA+PSBidWZmZXItPnBhZ2VzKSkKKwkJCWdvdG8gb3V0X2ZhaWw7CiAKIAkJcm1fcGFnZXMgPSBidWZmZXItPnBhZ2VzIC0gbnJfcGFnZXM7CiAKQEAgLTY1NSwxMCArODMzLDggQEAKIAkgKiBhZGQgdGhlc2UgcGFnZXMgdG8gdGhlIGNwdV9idWZmZXJzLiBPdGhlcndpc2Ugd2UganVzdCBmcmVlCiAJICogdGhlbSBhbGwgYW5kIHJldHVybiAtRU5PTUVNOwogCSAqLwotCWlmIChSQl9XQVJOX09OKGJ1ZmZlciwgbnJfcGFnZXMgPD0gYnVmZmVyLT5wYWdlcykpIHsKLQkJbXV0ZXhfdW5sb2NrKCZidWZmZXItPm11dGV4KTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAoUkJfV0FSTl9PTihidWZmZXIsIG5yX3BhZ2VzIDw9IGJ1ZmZlci0+cGFnZXMpKQorCQlnb3RvIG91dF9mYWlsOwogCiAJbmV3X3BhZ2VzID0gbnJfcGFnZXMgLSBidWZmZXItPnBhZ2VzOwogCkBAIC02ODMsMTMgKzg1OSwxMiBAQAogCQlyYl9pbnNlcnRfcGFnZXMoY3B1X2J1ZmZlciwgJnBhZ2VzLCBuZXdfcGFnZXMpOwogCX0KIAotCWlmIChSQl9XQVJOX09OKGJ1ZmZlciwgIWxpc3RfZW1wdHkoJnBhZ2VzKSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZidWZmZXItPm11dGV4KTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAoUkJfV0FSTl9PTihidWZmZXIsICFsaXN0X2VtcHR5KCZwYWdlcykpKQorCQlnb3RvIG91dF9mYWlsOwogCiAgb3V0OgogCWJ1ZmZlci0+cGFnZXMgPSBucl9wYWdlczsKKwlwdXRfb25saW5lX2NwdXMoKTsKIAltdXRleF91bmxvY2soJmJ1ZmZlci0+bXV0ZXgpOwogCiAJcmV0dXJuIHNpemU7CkBAIC02OTksMTYgKzg3NCwyMSBAQAogCQlsaXN0X2RlbF9pbml0KCZicGFnZS0+bGlzdCk7CiAJCWZyZWVfYnVmZmVyX3BhZ2UoYnBhZ2UpOwogCX0KKwlwdXRfb25saW5lX2NwdXMoKTsKIAltdXRleF91bmxvY2soJmJ1ZmZlci0+bXV0ZXgpOwogCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBTb21ldGhpbmcgd2VudCB0b3RhbGx5IHdyb25nLCBhbmQgd2UgYXJlIHRvbyBwYXJhbm9pZAorCSAqIHRvIGV2ZW4gY2xlYW4gdXAgdGhlIG1lc3MuCisJICovCisgb3V0X2ZhaWw6CisJcHV0X29ubGluZV9jcHVzKCk7CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPm11dGV4KTsKKwlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZXNpemUpOwogCi1zdGF0aWMgaW5saW5lIGludCByYl9udWxsX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCi17Ci0JcmV0dXJuIGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9QQURESU5HOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgKgogX19yYl9kYXRhX3BhZ2VfaW5kZXgoc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmJwYWdlLCB1bnNpZ25lZCBpbmRleCkKIHsKQEAgLTgxMSw3ICs5OTEsNyBAQAogCXJldHVybiAoYWRkciAmIH5QQUdFX01BU0spIC0gKFBBR0VfU0laRSAtIEJVRl9QQUdFX1NJWkUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogcmJfaXNfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAogCSAgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKIHsKQEAgLTgyNSw3ICsxMDA1LDcgQEAKIAkJcmJfY29tbWl0X2luZGV4KGNwdV9idWZmZXIpID09IGluZGV4OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiByYl9zZXRfY29tbWl0X2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAogCQkgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKIHsKQEAgLTg1MCw3ICsxMDMwLDcgQEAKIAlsb2NhbF9zZXQoJmNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5wYWdlLT5jb21taXQsIGluZGV4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogcmJfc2V0X2NvbW1pdF90b193cml0ZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKIHsKIAkvKgpAQCAtODk2LDcgKzEwNzYsNyBAQAogCWNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5yZWFkID0gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJiX2luY19pdGVyKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyKQorc3RhdGljIHZvaWQgcmJfaW5jX2l0ZXIoc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOwogCkBAIC05MjYsNyArMTEwNiw3IEBACiAgKiBhbmQgd2l0aCB0aGlzLCB3ZSBjYW4gZGV0ZXJtaW5lIHdoYXQgdG8gcGxhY2UgaW50byB0aGUKICAqIGRhdGEgZmllbGQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIHJiX3VwZGF0ZV9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAogCQkJIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKQEAgLTkzOCwxNSArMTExOCwxMSBAQAogCQlicmVhazsKIAogCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOgotCQlldmVudC0+bGVuID0KLQkJCShSQl9MRU5fVElNRV9FWFRFTkQgKyAoUkJfQUxJR05NRU5ULTEpKQotCQkJPj4gUkJfQUxJR05NRU5UX1NISUZUOworCQlldmVudC0+bGVuID0gRElWX1JPVU5EX1VQKFJCX0xFTl9USU1FX0VYVEVORCwgUkJfQUxJR05NRU5UKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJJTkdCVUZfVFlQRV9USU1FX1NUQU1QOgotCQlldmVudC0+bGVuID0KLQkJCShSQl9MRU5fVElNRV9TVEFNUCArIChSQl9BTElHTk1FTlQtMSkpCi0JCQk+PiBSQl9BTElHTk1FTlRfU0hJRlQ7CisJCWV2ZW50LT5sZW4gPSBESVZfUk9VTkRfVVAoUkJfTEVOX1RJTUVfU1RBTVAsIFJCX0FMSUdOTUVOVCk7CiAJCWJyZWFrOwogCiAJY2FzZSBSSU5HQlVGX1RZUEVfREFUQToKQEAgLTk1NSwxNiArMTEzMSwxNCBAQAogCQkJZXZlbnQtPmxlbiA9IDA7CiAJCQlldmVudC0+YXJyYXlbMF0gPSBsZW5ndGg7CiAJCX0gZWxzZQotCQkJZXZlbnQtPmxlbiA9Ci0JCQkJKGxlbmd0aCArIChSQl9BTElHTk1FTlQtMSkpCi0JCQkJPj4gUkJfQUxJR05NRU5UX1NISUZUOworCQkJZXZlbnQtPmxlbiA9IERJVl9ST1VORF9VUChsZW5ndGgsIFJCX0FMSUdOTUVOVCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCByYl9jYWxjdWxhdGVfZXZlbnRfbGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyB1bnNpZ25lZCByYl9jYWxjdWxhdGVfZXZlbnRfbGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgZXZlbnQ7IC8qIFVzZWQgb25seSBmb3Igc2l6ZW9mIGFycmF5ICovCiAKQEAgLTk5MCw2ICsxMTY0LDcgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IGNwdV9idWZmZXItPmJ1ZmZlcjsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBsb2NrX3Rha2VuID0gZmFsc2U7CiAKIAljb21taXRfcGFnZSA9IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlOwogCS8qIHdlIGp1c3QgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgaW50ZXJydXB0cyAqLwpAQCAtMTAwMyw3ICsxMTc4LDMwIEBACiAJCXN0cnVjdCBidWZmZXJfcGFnZSAqbmV4dF9wYWdlID0gdGFpbF9wYWdlOwogCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJX19yYXdfc3Bpbl9sb2NrKCZjcHVfYnVmZmVyLT5sb2NrKTsKKwkJLyoKKwkJICogU2luY2UgdGhlIHdyaXRlIHRvIHRoZSBidWZmZXIgaXMgc3RpbGwgbm90CisJCSAqIGZ1bGx5IGxvY2tsZXNzLCB3ZSBtdXN0IGJlIGNhcmVmdWwgd2l0aCBOTUlzLgorCQkgKiBUaGUgbG9ja3MgaW4gdGhlIHdyaXRlcnMgYXJlIHRha2VuIHdoZW4gYSB3cml0ZQorCQkgKiBjcm9zc2VzIHRvIGEgbmV3IHBhZ2UuIFRoZSBsb2NrcyBwcm90ZWN0IGFnYWluc3QKKwkJICogcmFjZXMgd2l0aCB0aGUgcmVhZGVycyAodGhpcyB3aWxsIHNvb24gYmUgZml4ZWQKKwkJICogd2l0aCBhIGxvY2tsZXNzIHNvbHV0aW9uKS4KKwkJICoKKwkJICogQmVjYXVzZSB3ZSBjYW4gbm90IHByb3RlY3QgYWdhaW5zdCBOTUlzLCBhbmQgd2UKKwkJICogd2FudCB0byBrZWVwIHRyYWNlcyByZWVudHJhbnQsIHdlIG5lZWQgdG8gbWFuYWdlCisJCSAqIHdoYXQgaGFwcGVucyB3aGVuIHdlIGFyZSBpbiBhbiBOTUkuCisJCSAqCisJCSAqIE5NSXMgY2FuIGhhcHBlbiBhZnRlciB3ZSB0YWtlIHRoZSBsb2NrLgorCQkgKiBJZiB3ZSBhcmUgaW4gYW4gTk1JLCBvbmx5IHRha2UgdGhlIGxvY2sKKwkJICogaWYgaXQgaXMgbm90IGFscmVhZHkgdGFrZW4uIE90aGVyd2lzZQorCQkgKiBzaW1wbHkgZmFpbC4KKwkJICovCisJCWlmICh1bmxpa2VseShpbl9ubWkoKSkpIHsKKwkJCWlmICghX19yYXdfc3Bpbl90cnlsb2NrKCZjcHVfYnVmZmVyLT5sb2NrKSkKKwkJCQlnb3RvIG91dF9yZXNldDsKKwkJfSBlbHNlCisJCQlfX3Jhd19zcGluX2xvY2soJmNwdV9idWZmZXItPmxvY2spOworCisJCWxvY2tfdGFrZW4gPSB0cnVlOwogCiAJCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZuZXh0X3BhZ2UpOwogCkBAIC0xMDEyLDcgKzEyMTAsNyBAQAogCiAJCS8qIHdlIGdyYWJiZWQgdGhlIGxvY2sgYmVmb3JlIGluY3JlbWVudGluZyAqLwogCQlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCBuZXh0X3BhZ2UgPT0gcmVhZGVyX3BhZ2UpKQotCQkJZ290byBvdXRfdW5sb2NrOworCQkJZ290byBvdXRfcmVzZXQ7CiAKIAkJLyoKIAkJICogSWYgZm9yIHNvbWUgcmVhc29uLCB3ZSBoYWQgYW4gaW50ZXJydXB0IHN0b3JtIHRoYXQgbWFkZQpAQCAtMTAyMSwxMiArMTIxOSwxMiBAQAogCQkgKi8KIAkJaWYgKHVubGlrZWx5KG5leHRfcGFnZSA9PSBjb21taXRfcGFnZSkpIHsKIAkJCVdBUk5fT05fT05DRSgxKTsKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCWdvdG8gb3V0X3Jlc2V0OwogCQl9CiAKIAkJaWYgKG5leHRfcGFnZSA9PSBoZWFkX3BhZ2UpIHsKIAkJCWlmICghKGJ1ZmZlci0+ZmxhZ3MgJiBSQl9GTF9PVkVSV1JJVEUpKQotCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCQlnb3RvIG91dF9yZXNldDsKIAogCQkJLyogdGFpbF9wYWdlIGhhcyBub3QgbW92ZWQgeWV0PyAqLwogCQkJaWYgKHRhaWxfcGFnZSA9PSBjcHVfYnVmZmVyLT50YWlsX3BhZ2UpIHsKQEAgLTEwNTAsNyArMTI0OCw3IEBACiAJCQljcHVfYnVmZmVyLT50YWlsX3BhZ2UgPSBuZXh0X3BhZ2U7CiAKIAkJCS8qIHJlcmVhZCB0aGUgdGltZSBzdGFtcCAqLwotCQkJKnRzID0gcmluZ19idWZmZXJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5jcHUpOworCQkJKnRzID0gcmluZ19idWZmZXJfdGltZV9zdGFtcChidWZmZXIsIGNwdV9idWZmZXItPmNwdSk7CiAJCQljcHVfYnVmZmVyLT50YWlsX3BhZ2UtPnBhZ2UtPnRpbWVfc3RhbXAgPSAqdHM7CiAJCX0KIApAQCAtMTA2MCw3ICsxMjU4LDcgQEAKIAkJaWYgKHRhaWwgPCBCVUZfUEFHRV9TSVpFKSB7CiAJCQkvKiBNYXJrIHRoZSByZXN0IG9mIHRoZSBwYWdlIHdpdGggcGFkZGluZyAqLwogCQkJZXZlbnQgPSBfX3JiX3BhZ2VfaW5kZXgodGFpbF9wYWdlLCB0YWlsKTsKLQkJCWV2ZW50LT50eXBlID0gUklOR0JVRl9UWVBFX1BBRERJTkc7CisJCQlyYl9ldmVudF9zZXRfcGFkZGluZyhldmVudCk7CiAJCX0KIAogCQlpZiAodGFpbCA8PSBCVUZfUEFHRV9TSVpFKQpAQCAtMTEwMCwxMiArMTI5OCwxMyBAQAogCiAJcmV0dXJuIGV2ZW50OwogCi0gb3V0X3VubG9jazoKKyBvdXRfcmVzZXQ6CiAJLyogcmVzZXQgd3JpdGUgKi8KIAlpZiAodGFpbCA8PSBCVUZfUEFHRV9TSVpFKQogCQlsb2NhbF9zZXQoJnRhaWxfcGFnZS0+d3JpdGUsIHRhaWwpOwogCi0JX19yYXdfc3Bpbl91bmxvY2soJmNwdV9idWZmZXItPmxvY2spOworCWlmIChsaWtlbHkobG9ja190YWtlbikpCisJCV9fcmF3X3NwaW5fdW5sb2NrKCZjcHVfYnVmZmVyLT5sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xMTkyLDcgKzEzOTEsNyBAQAogCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsICsrbnJfbG9vcHMgPiAxMDAwKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQl0cyA9IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1KTsKKwl0cyA9IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+YnVmZmVyLCBjcHVfYnVmZmVyLT5jcHUpOwogCiAJLyoKIAkgKiBPbmx5IHRoZSBmaXJzdCBjb21taXQgY2FuIHVwZGF0ZSB0aGUgdGltZXN0YW1wLgpAQCAtMTI2NSw3ICsxNDY0LDYgQEAKICAqIHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSAtIHJlc2VydmUgYSBwYXJ0IG9mIHRoZSBidWZmZXIKICAqIEBidWZmZXI6IHRoZSByaW5nIGJ1ZmZlciB0byByZXNlcnZlIGZyb20KICAqIEBsZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gcmVzZXJ2ZSAoZXhjbHVkaW5nIGV2ZW50IGhlYWRlcikKLSAqIEBmbGFnczogYSBwb2ludGVyIHRvIHNhdmUgdGhlIGludGVycnVwdCBmbGFncwogICoKICAqIFJldHVybnMgYSByZXNldmVyZCBldmVudCBvbiB0aGUgcmluZyBidWZmZXIgdG8gY29weSBkaXJlY3RseSB0by4KICAqIFRoZSB1c2VyIG9mIHRoaXMgaW50ZXJmYWNlIHdpbGwgbmVlZCB0byBnZXQgdGhlIGJvZHkgdG8gd3JpdGUgaW50bwpAQCAtMTI3OCw5ICsxNDc2LDcgQEAKICAqIElmIE5VTEwgaXMgcmV0dXJuZWQsIHRoZW4gbm90aGluZyBoYXMgYmVlbiBhbGxvY2F0ZWQgb3IgbG9ja2VkLgogICovCiBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgotcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAotCQkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAotCQkJIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwpAQCAtMTM0NywxNSArMTU0MywxMyBAQAogICogcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCAtIGNvbW1pdCBhIHJlc2VydmVkCiAgKiBAYnVmZmVyOiBUaGUgYnVmZmVyIHRvIGNvbW1pdCB0bwogICogQGV2ZW50OiBUaGUgZXZlbnQgcG9pbnRlciB0byBjb21taXQuCi0gKiBAZmxhZ3M6IHRoZSBpbnRlcnJ1cHQgZmxhZ3MgcmVjZWl2ZWQgZnJvbSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUuCiAgKgogICogVGhpcyBjb21taXRzIHRoZSBkYXRhIHRvIHRoZSByaW5nIGJ1ZmZlciwgYW5kIHJlbGVhc2VzIGFueSBsb2NrcyBoZWxkLgogICoKICAqIE11c3QgYmUgcGFpcmVkIHdpdGggcmluZ19idWZmZXJfbG9ja19yZXNlcnZlLgogICovCiBpbnQgcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKLQkJCSAgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJICAgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKIAlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTE0MzgsNyArMTYzMiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl93cml0ZSk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJiX3Blcl9jcHVfZW1wdHkoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCitzdGF0aWMgaW50IHJiX3Blcl9jcHVfZW1wdHkoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCiB7CiAJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXIgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmhlYWQgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CkBAIC0xNTI4LDEyICsxNzIyLDE1IEBACiB1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgcmV0OwogCiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKIAkJcmV0dXJuIDA7CiAKIAljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07Ci0JcmV0dXJuIGNwdV9idWZmZXItPmVudHJpZXM7CisJcmV0ID0gY3B1X2J1ZmZlci0+ZW50cmllczsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdSk7CiAKQEAgLTE1NDUsMTIgKzE3NDIsMTUgQEAKIHVuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJdW5zaWduZWQgbG9uZyByZXQ7CiAKIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQogCQlyZXR1cm4gMDsKIAogCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKLQlyZXR1cm4gY3B1X2J1ZmZlci0+b3ZlcnJ1bjsKKwlyZXQgPSBjcHVfYnVmZmVyLT5vdmVycnVuOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KTsKIApAQCAtMTYyNyw5ICsxODI3LDE0IEBACiAgKi8KIHZvaWQgcmluZ19idWZmZXJfaXRlcl9yZXNldChzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKIHsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghaXRlcikKKwkJcmV0dXJuOworCisJY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAlyYl9pdGVyX3Jlc2V0KGl0ZXIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CkBAIC0xODAzLDcgKzIwMDgsNyBAQAogCiAJZXZlbnQgPSByYl9yZWFkZXJfZXZlbnQoY3B1X2J1ZmZlcik7CiAKLQlpZiAoZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX0RBVEEpCisJaWYgKGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9EQVRBIHx8IHJiX2Rpc2NhcmRlZF9ldmVudChldmVudCkpCiAJCWNwdV9idWZmZXItPmVudHJpZXMtLTsKIAogCXJiX3VwZGF0ZV9yZWFkX3N0YW1wKGNwdV9idWZmZXIsIGV2ZW50KTsKQEAgLTE4NjQsOSArMjA2OSw2IEBACiAJc3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7CiAJaW50IG5yX2xvb3BzID0gMDsKIAotCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCi0JCXJldHVybiBOVUxMOwotCiAJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwogCiAgYWdhaW46CkBAIC0xODg5LDkgKzIwOTEsMTggQEAKIAogCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKIAljYXNlIFJJTkdCVUZfVFlQRV9QQURESU5HOgotCQlSQl9XQVJOX09OKGNwdV9idWZmZXIsIDEpOworCQlpZiAocmJfbnVsbF9ldmVudChldmVudCkpCisJCQlSQl9XQVJOX09OKGNwdV9idWZmZXIsIDEpOworCQkvKgorCQkgKiBCZWNhdXNlIHRoZSB3cml0ZXIgY291bGQgYmUgZGlzY2FyZGluZyBldmVyeQorCQkgKiBldmVudCBpdCBjcmVhdGVzICh3aGljaCB3b3VsZCBwcm9iYWJseSBiZSBiYWQpCisJCSAqIGlmIHdlIHdlcmUgdG8gZ28gYmFjayB0byAiYWdhaW4iIHRoZW4gd2UgbWF5IG5ldmVyCisJCSAqIGNhdGNoIHVwLCBhbmQgd2lsbCB0cmlnZ2VyIHRoZSB3YXJuIG9uLCBvciBsb2NrCisJCSAqIHRoZSBib3guIFJldHVybiB0aGUgcGFkZGluZywgYW5kIHdlIHdpbGwgcmVsZWFzZQorCQkgKiB0aGUgY3VycmVudCBsb2NrcywgYW5kIHRyeSBhZ2Fpbi4KKwkJICovCiAJCXJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIGV2ZW50OwogCiAJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9FWFRFTkQ6CiAJCS8qIEludGVybmFsIGRhdGEsIE9LIHRvIGFkdmFuY2UgKi8KQEAgLTE5MDYsNyArMjExNyw4IEBACiAJY2FzZSBSSU5HQlVGX1RZUEVfREFUQToKIAkJaWYgKHRzKSB7CiAJCQkqdHMgPSBjcHVfYnVmZmVyLT5yZWFkX3N0YW1wICsgZXZlbnQtPnRpbWVfZGVsdGE7Ci0JCQlyaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5jcHUsIHRzKTsKKwkJCXJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGJ1ZmZlciwKKwkJCQkJCQkgY3B1X2J1ZmZlci0+Y3B1LCB0cyk7CiAJCX0KIAkJcmV0dXJuIGV2ZW50OwogCkBAIC0xOTUxLDggKzIxNjMsMTIgQEAKIAogCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKIAljYXNlIFJJTkdCVUZfVFlQRV9QQURESU5HOgotCQlyYl9pbmNfaXRlcihpdGVyKTsKLQkJZ290byBhZ2FpbjsKKwkJaWYgKHJiX251bGxfZXZlbnQoZXZlbnQpKSB7CisJCQlyYl9pbmNfaXRlcihpdGVyKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJcmJfYWR2YW5jZV9pdGVyKGl0ZXIpOworCQlyZXR1cm4gZXZlbnQ7CiAKIAljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKIAkJLyogSW50ZXJuYWwgZGF0YSwgT0sgdG8gYWR2YW5jZSAqLwpAQCAtMTk2Nyw3ICsyMTgzLDggQEAKIAljYXNlIFJJTkdCVUZfVFlQRV9EQVRBOgogCQlpZiAodHMpIHsKIAkJCSp0cyA9IGl0ZXItPnJlYWRfc3RhbXAgKyBldmVudC0+dGltZV9kZWx0YTsKLQkJCXJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGNwdV9idWZmZXItPmNwdSwgdHMpOworCQkJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoYnVmZmVyLAorCQkJCQkJCSBjcHVfYnVmZmVyLT5jcHUsIHRzKTsKIAkJfQogCQlyZXR1cm4gZXZlbnQ7CiAKQEAgLTE5OTUsMTAgKzIyMTIsMTkgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQorCQlyZXR1cm4gTlVMTDsKKworIGFnYWluOgogCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCWV2ZW50ID0gcmJfYnVmZmVyX3BlZWsoYnVmZmVyLCBjcHUsIHRzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCisJaWYgKGV2ZW50ICYmIGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9QQURESU5HKSB7CisJCWNwdV9yZWxheCgpOworCQlnb3RvIGFnYWluOworCX0KKwogCXJldHVybiBldmVudDsKIH0KIApAQCAtMjAxNywxMCArMjI0MywxNiBAQAogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorIGFnYWluOgogCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCWV2ZW50ID0gcmJfaXRlcl9wZWVrKGl0ZXIsIHRzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCisJaWYgKGV2ZW50ICYmIGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9QQURESU5HKSB7CisJCWNwdV9yZWxheCgpOworCQlnb3RvIGFnYWluOworCX0KKwogCXJldHVybiBldmVudDsKIH0KIApAQCAtMjAzNSwyNCArMjI2NywzNyBAQAogc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKIHJpbmdfYnVmZmVyX2NvbnN1bWUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUsIHU2NCAqdHMpCiB7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQotCQlyZXR1cm4gTlVMTDsKKyBhZ2FpbjoKKwkvKiBtaWdodCBiZSBjYWxsZWQgaW4gYXRvbWljICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQorCQlnb3RvIG91dDsKKworCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAogCWV2ZW50ID0gcmJfYnVmZmVyX3BlZWsoYnVmZmVyLCBjcHUsIHRzKTsKIAlpZiAoIWV2ZW50KQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJcmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7CiAKLSBvdXQ6Cisgb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCisgb3V0OgorCXByZWVtcHRfZW5hYmxlKCk7CisKKwlpZiAoZXZlbnQgJiYgZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX1BBRERJTkcpIHsKKwkJY3B1X3JlbGF4KCk7CisJCWdvdG8gYWdhaW47CisJfQorCiAJcmV0dXJuIGV2ZW50OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfY29uc3VtZSk7CkBAIC0yMTMxLDYgKzIzNzYsNyBAQAogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gaXRlci0+Y3B1X2J1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisgYWdhaW46CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAJZXZlbnQgPSByYl9pdGVyX3BlZWsoaXRlciwgdHMpOwogCWlmICghZXZlbnQpCkBAIC0yMTQwLDYgKzIzODYsMTEgQEAKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAorCWlmIChldmVudCAmJiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORykgeworCQljcHVfcmVsYXgoKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAlyZXR1cm4gZXZlbnQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZWFkKTsKQEAgLTIyMzIsNiArMjQ4Myw3IEBACiAJCWlmICghcmJfcGVyX2NwdV9lbXB0eShjcHVfYnVmZmVyKSkKIAkJCXJldHVybiAwOwogCX0KKwogCXJldHVybiAxOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW1wdHkpOwpAQCAtMjI0NCwxMiArMjQ5NiwxNiBAQAogaW50IHJpbmdfYnVmZmVyX2VtcHR5X2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwlpbnQgcmV0OwogCiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKIAkJcmV0dXJuIDE7CiAKIAljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07Ci0JcmV0dXJuIHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcik7CisJcmV0ID0gcmJfcGVyX2NwdV9lbXB0eShjcHVfYnVmZmVyKTsKKworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VtcHR5X2NwdSk7CiAKQEAgLTIyNjgsMTggKzI1MjQsMzYgQEAKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcl9hOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyX2I7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXJfYS0+Y3B1bWFzaykgfHwKIAkgICAgIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXJfYi0+Y3B1bWFzaykpCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAogCS8qIEF0IGxlYXN0IG1ha2Ugc3VyZSB0aGUgdHdvIGJ1ZmZlcnMgYXJlIHNvbWV3aGF0IHRoZSBzYW1lICovCiAJaWYgKGJ1ZmZlcl9hLT5wYWdlcyAhPSBidWZmZXJfYi0+cGFnZXMpCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKKworCXJldCA9IC1FQUdBSU47CisKKwlpZiAocmluZ19idWZmZXJfZmxhZ3MgIT0gUkJfQlVGRkVSU19PTikKKwkJZ290byBvdXQ7CisKKwlpZiAoYXRvbWljX3JlYWQoJmJ1ZmZlcl9hLT5yZWNvcmRfZGlzYWJsZWQpKQorCQlnb3RvIG91dDsKKworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyX2ItPnJlY29yZF9kaXNhYmxlZCkpCisJCWdvdG8gb3V0OwogCiAJY3B1X2J1ZmZlcl9hID0gYnVmZmVyX2EtPmJ1ZmZlcnNbY3B1XTsKIAljcHVfYnVmZmVyX2IgPSBidWZmZXJfYi0+YnVmZmVyc1tjcHVdOwogCisJaWYgKGF0b21pY19yZWFkKCZjcHVfYnVmZmVyX2EtPnJlY29yZF9kaXNhYmxlZCkpCisJCWdvdG8gb3V0OworCisJaWYgKGF0b21pY19yZWFkKCZjcHVfYnVmZmVyX2ItPnJlY29yZF9kaXNhYmxlZCkpCisJCWdvdG8gb3V0OworCiAJLyoKIAkgKiBXZSBjYW4ndCBkbyBhIHN5bmNocm9uaXplX3NjaGVkIGhlcmUgYmVjYXVzZSB0aGlzCiAJICogZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBpbiBhdG9taWMgY29udGV4dC4KQEAgLTIyOTgsMTggKzI1NzIsMjEgQEAKIAlhdG9taWNfZGVjKCZjcHVfYnVmZmVyX2EtPnJlY29yZF9kaXNhYmxlZCk7CiAJYXRvbWljX2RlYygmY3B1X2J1ZmZlcl9iLT5yZWNvcmRfZGlzYWJsZWQpOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfc3dhcF9jcHUpOwogCiBzdGF0aWMgdm9pZCByYl9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKLQkJCSAgICAgIHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpicGFnZSkKKwkJCSAgICAgIHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpicGFnZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAl1bnNpZ25lZCBsb25nIGhlYWQ7CiAKIAlfX3Jhd19zcGluX2xvY2soJmNwdV9idWZmZXItPmxvY2spOwotCWZvciAoaGVhZCA9IDA7IGhlYWQgPCBsb2NhbF9yZWFkKCZicGFnZS0+Y29tbWl0KTsKKwlmb3IgKGhlYWQgPSBvZmZzZXQ7IGhlYWQgPCBsb2NhbF9yZWFkKCZicGFnZS0+Y29tbWl0KTsKIAkgICAgIGhlYWQgKz0gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KSkgewogCiAJCWV2ZW50ID0gX19yYl9kYXRhX3BhZ2VfaW5kZXgoYnBhZ2UsIGhlYWQpOwpAQCAtMjM0MCw4ICsyNjE3LDggQEAKICAqLwogdm9pZCAqcmluZ19idWZmZXJfYWxsb2NfcmVhZF9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKQogewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqYnBhZ2U7CisJdW5zaWduZWQgbG9uZyBhZGRyOwogCiAJYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWFkZHIpCkBAIC0yMzQ5LDYgKzI2MjYsOCBAQAogCiAJYnBhZ2UgPSAodm9pZCAqKWFkZHI7CiAKKwlyYl9pbml0X3BhZ2UoYnBhZ2UpOworCiAJcmV0dXJuIGJwYWdlOwogfQogCkBAIC0yMzY4LDYgKzI2NDcsNyBAQAogICogcmluZ19idWZmZXJfcmVhZF9wYWdlIC0gZXh0cmFjdCBhIHBhZ2UgZnJvbSB0aGUgcmluZyBidWZmZXIKICAqIEBidWZmZXI6IGJ1ZmZlciB0byBleHRyYWN0IGZyb20KICAqIEBkYXRhX3BhZ2U6IHRoZSBwYWdlIHRvIHVzZSBhbGxvY2F0ZWQgZnJvbSByaW5nX2J1ZmZlcl9hbGxvY19yZWFkX3BhZ2UKKyAqIEBsZW46IGFtb3VudCB0byBleHRyYWN0CiAgKiBAY3B1OiB0aGUgY3B1IG9mIHRoZSBidWZmZXIgdG8gZXh0cmFjdAogICogQGZ1bGw6IHNob3VsZCB0aGUgZXh0cmFjdGlvbiBvbmx5IGhhcHBlbiB3aGVuIHRoZSBwYWdlIGlzIGZ1bGwuCiAgKgpAQCAtMjM3NywxMiArMjY1NywxMiBAQAogICogdG8gc3dhcCB3aXRoIGEgcGFnZSBpbiB0aGUgcmluZyBidWZmZXIuCiAgKgogICogZm9yIGV4YW1wbGU6Ci0gKglycGFnZSA9IHJpbmdfYnVmZmVyX2FsbG9jX3BhZ2UoYnVmZmVyKTsKKyAqCXJwYWdlID0gcmluZ19idWZmZXJfYWxsb2NfcmVhZF9wYWdlKGJ1ZmZlcik7CiAgKglpZiAoIXJwYWdlKQogICoJCXJldHVybiBlcnJvcjsKLSAqCXJldCA9IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShidWZmZXIsICZycGFnZSwgY3B1LCAwKTsKLSAqCWlmIChyZXQpCi0gKgkJcHJvY2Vzc19wYWdlKHJwYWdlKTsKKyAqCXJldCA9IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShidWZmZXIsICZycGFnZSwgbGVuLCBjcHUsIDApOworICoJaWYgKHJldCA+PSAwKQorICoJCXByb2Nlc3NfcGFnZShycGFnZSwgcmV0KTsKICAqCiAgKiBXaGVuIEBmdWxsIGlzIHNldCwgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiB0cnVlIHVubGVzcwogICogdGhlIHdyaXRlciBpcyBvZmYgdGhlIHJlYWRlciBwYWdlLgpAQCAtMjM5Myw3MiArMjY3MywxMTggQEAKICAqICByZXNwb25zaWJsZSBmb3IgdGhhdC4KICAqCiAgKiBSZXR1cm5zOgotICogIDEgaWYgZGF0YSBoYXMgYmVlbiB0cmFuc2ZlcnJlZAotICogIDAgaWYgbm8gZGF0YSBoYXMgYmVlbiB0cmFuc2ZlcnJlZC4KKyAqICA+PTAgaWYgZGF0YSBoYXMgYmVlbiB0cmFuc2ZlcnJlZCwgcmV0dXJucyB0aGUgb2Zmc2V0IG9mIGNvbnN1bWVkIGRhdGEuCisgKiAgPDAgaWYgbm8gZGF0YSBoYXMgYmVlbiB0cmFuc2ZlcnJlZC4KICAqLwogaW50IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKLQkJCSAgICB2b2lkICoqZGF0YV9wYWdlLCBpbnQgY3B1LCBpbnQgZnVsbCkKKwkJCSAgdm9pZCAqKmRhdGFfcGFnZSwgc2l6ZV90IGxlbiwgaW50IGNwdSwgaW50IGZ1bGwpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpicGFnZTsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnJlYWRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBjb21taXQ7CisJdW5zaWduZWQgaW50IHJlYWQ7CisJdTY0IHNhdmVfdGltZXN0YW1wOworCWludCByZXQgPSAtMTsKKworCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBJZiBsZW4gaXMgbm90IGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgcGFnZSBoZWFkZXIsIHRoZW4KKwkgKiB3ZSBjYW4gbm90IGNvcHkgYW55dGhpbmcuCisJICovCisJaWYgKGxlbiA8PSBCVUZfUEFHRV9IRFJfU0laRSkKKwkJZ290byBvdXQ7CisKKwlsZW4gLT0gQlVGX1BBR0VfSERSX1NJWkU7CiAKIAlpZiAoIWRhdGFfcGFnZSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCiAJYnBhZ2UgPSAqZGF0YV9wYWdlOwogCWlmICghYnBhZ2UpCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCi0JLyoKLQkgKiByYl9idWZmZXJfcGVlayB3aWxsIGdldCB0aGUgbmV4dCByaW5nIGJ1ZmZlciBpZgotCSAqIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlIGlzIGVtcHR5LgotCSAqLwotCWV2ZW50ID0gcmJfYnVmZmVyX3BlZWsoYnVmZmVyLCBjcHUsIE5VTEwpOwotCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0OworCXJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTsKKwlpZiAoIXJlYWRlcikKKwkJZ290byBvdXRfdW5sb2NrOwogCi0JLyogY2hlY2sgZm9yIGRhdGEgKi8KLQlpZiAoIWxvY2FsX3JlYWQoJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5wYWdlLT5jb21taXQpKQotCQlnb3RvIG91dDsKKwlldmVudCA9IHJiX3JlYWRlcl9ldmVudChjcHVfYnVmZmVyKTsKKworCXJlYWQgPSByZWFkZXItPnJlYWQ7CisJY29tbWl0ID0gcmJfcGFnZV9jb21taXQocmVhZGVyKTsKKwogCS8qCi0JICogSWYgdGhlIHdyaXRlciBpcyBhbHJlYWR5IG9mZiBvZiB0aGUgcmVhZCBwYWdlLCB0aGVuIHNpbXBseQotCSAqIHN3aXRjaCB0aGUgcmVhZCBwYWdlIHdpdGggdGhlIGdpdmVuIHBhZ2UuIE90aGVyd2lzZQotCSAqIHdlIG5lZWQgdG8gY29weSB0aGUgZGF0YSBmcm9tIHRoZSByZWFkZXIgdG8gdGhlIHdyaXRlci4KKwkgKiBJZiB0aGlzIHBhZ2UgaGFzIGJlZW4gcGFydGlhbGx5IHJlYWQgb3IKKwkgKiBpZiBsZW4gaXMgbm90IGJpZyBlbm91Z2ggdG8gcmVhZCB0aGUgcmVzdCBvZiB0aGUgcGFnZSBvcgorCSAqIGEgd3JpdGVyIGlzIHN0aWxsIG9uIHRoZSBwYWdlLCB0aGVuCisJICogd2UgbXVzdCBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIHBhZ2UgdG8gdGhlIGJ1ZmZlci4KKwkgKiBPdGhlcndpc2UsIHdlIGNhbiBzaW1wbHkgc3dhcCB0aGUgcGFnZSB3aXRoIHRoZSBvbmUgcGFzc2VkIGluLgogCSAqLwotCWlmIChjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSA9PSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZSkgewotCQl1bnNpZ25lZCBpbnQgcmVhZCA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5yZWFkOworCWlmIChyZWFkIHx8IChsZW4gPCAoY29tbWl0IC0gcmVhZCkpIHx8CisJICAgIGNwdV9idWZmZXItPnJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlKSB7CisJCXN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpycGFnZSA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5wYWdlOworCQl1bnNpZ25lZCBpbnQgcnBvcyA9IHJlYWQ7CisJCXVuc2lnbmVkIGludCBwb3MgPSAwOworCQl1bnNpZ25lZCBpbnQgc2l6ZTsKIAogCQlpZiAoZnVsbCkKLQkJCWdvdG8gb3V0OwotCQkvKiBUaGUgd3JpdGVyIGlzIHN0aWxsIG9uIHRoZSByZWFkZXIgcGFnZSwgd2UgbXVzdCBjb3B5ICovCi0JCWJwYWdlID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnBhZ2U7Ci0JCW1lbWNweShicGFnZS0+ZGF0YSwKLQkJICAgICAgIGNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5wYWdlLT5kYXRhICsgcmVhZCwKLQkJICAgICAgIGxvY2FsX3JlYWQoJmJwYWdlLT5jb21taXQpIC0gcmVhZCk7CisJCQlnb3RvIG91dF91bmxvY2s7CiAKLQkJLyogY29uc3VtZSB3aGF0IHdhcyByZWFkICovCi0JCWNwdV9idWZmZXItPnJlYWRlcl9wYWdlICs9IHJlYWQ7CisJCWlmIChsZW4gPiAoY29tbWl0IC0gcmVhZCkpCisJCQlsZW4gPSAoY29tbWl0IC0gcmVhZCk7CiAKKwkJc2l6ZSA9IHJiX2V2ZW50X2xlbmd0aChldmVudCk7CisKKwkJaWYgKGxlbiA8IHNpemUpCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJLyogc2F2ZSB0aGUgY3VycmVudCB0aW1lc3RhbXAsIHNpbmNlIHRoZSB1c2VyIHdpbGwgbmVlZCBpdCAqLworCQlzYXZlX3RpbWVzdGFtcCA9IGNwdV9idWZmZXItPnJlYWRfc3RhbXA7CisKKwkJLyogTmVlZCB0byBjb3B5IG9uZSBldmVudCBhdCBhIHRpbWUgKi8KKwkJZG8geworCQkJbWVtY3B5KGJwYWdlLT5kYXRhICsgcG9zLCBycGFnZS0+ZGF0YSArIHJwb3MsIHNpemUpOworCisJCQlsZW4gLT0gc2l6ZTsKKworCQkJcmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7CisJCQlycG9zID0gcmVhZGVyLT5yZWFkOworCQkJcG9zICs9IHNpemU7CisKKwkJCWV2ZW50ID0gcmJfcmVhZGVyX2V2ZW50KGNwdV9idWZmZXIpOworCQkJc2l6ZSA9IHJiX2V2ZW50X2xlbmd0aChldmVudCk7CisJCX0gd2hpbGUgKGxlbiA+IHNpemUpOworCisJCS8qIHVwZGF0ZSBicGFnZSAqLworCQlsb2NhbF9zZXQoJmJwYWdlLT5jb21taXQsIHBvcyk7CisJCWJwYWdlLT50aW1lX3N0YW1wID0gc2F2ZV90aW1lc3RhbXA7CisKKwkJLyogd2UgY29waWVkIGV2ZXJ5dGhpbmcgdG8gdGhlIGJlZ2lubmluZyAqLworCQlyZWFkID0gMDsKIAl9IGVsc2UgewogCQkvKiBzd2FwIHRoZSBwYWdlcyAqLwogCQlyYl9pbml0X3BhZ2UoYnBhZ2UpOwotCQlicGFnZSA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5wYWdlOwotCQljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cGFnZSA9ICpkYXRhX3BhZ2U7Ci0JCWNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5yZWFkID0gMDsKKwkJYnBhZ2UgPSByZWFkZXItPnBhZ2U7CisJCXJlYWRlci0+cGFnZSA9ICpkYXRhX3BhZ2U7CisJCWxvY2FsX3NldCgmcmVhZGVyLT53cml0ZSwgMCk7CisJCXJlYWRlci0+cmVhZCA9IDA7CiAJCSpkYXRhX3BhZ2UgPSBicGFnZTsKLQl9Ci0JcmV0ID0gMTsKIAotCS8qIHVwZGF0ZSB0aGUgZW50cnkgY291bnRlciAqLwotCXJiX3JlbW92ZV9lbnRyaWVzKGNwdV9idWZmZXIsIGJwYWdlKTsKLSBvdXQ6CisJCS8qIHVwZGF0ZSB0aGUgZW50cnkgY291bnRlciAqLworCQlyYl9yZW1vdmVfZW50cmllcyhjcHVfYnVmZmVyLCBicGFnZSwgcmVhZCk7CisJfQorCXJldCA9IHJlYWQ7CisKKyBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKKyBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQ2Niw3ICsyNzkyLDcgQEAKIHJiX3NpbXBsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkgICAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewotCWxvbmcgKnAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyAqcCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1Zls2NF07CiAJaW50IHI7CiAKQEAgLTI0ODIsOSArMjgwOCw5IEBACiByYl9zaW1wbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAogCQlzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JbG9uZyAqcCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nICpwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgYnVmWzY0XTsKLQlsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgcmV0OwogCiAJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKQEAgLTI1MDksNyArMjgzNSw3IEBACiAJcmV0dXJuIGNudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmJfc2ltcGxlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYl9zaW1wbGVfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSByYl9zaW1wbGVfcmVhZCwKIAkud3JpdGUJCT0gcmJfc2ltcGxlX3dyaXRlLApAQCAtMjUzMiwzICsyODU4LDQyIEBACiB9CiAKIGZzX2luaXRjYWxsKHJiX2luaXRfZGVidWdmcyk7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbnQgcmJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPQorCQljb250YWluZXJfb2Yoc2VsZiwgc3RydWN0IHJpbmdfYnVmZmVyLCBjcHVfbm90aWZ5KTsKKwlsb25nIGNwdSA9IChsb25nKWhjcHU7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CisJCWlmIChjcHVfaXNzZXQoY3B1LCAqYnVmZmVyLT5jcHVtYXNrKSkKKwkJCXJldHVybiBOT1RJRllfT0s7CisKKwkJYnVmZmVyLT5idWZmZXJzW2NwdV0gPQorCQkJcmJfYWxsb2NhdGVfY3B1X2J1ZmZlcihidWZmZXIsIGNwdSk7CisJCWlmICghYnVmZmVyLT5idWZmZXJzW2NwdV0pIHsKKwkJCVdBUk4oMSwgImZhaWxlZCB0byBhbGxvY2F0ZSByaW5nIGJ1ZmZlciBvbiBDUFUgJWxkXG4iLAorCQkJICAgICBjcHUpOworCQkJcmV0dXJuIE5PVElGWV9PSzsKKwkJfQorCQlzbXBfd21iKCk7CisJCWNwdV9zZXQoY3B1LCAqYnVmZmVyLT5jcHVtYXNrKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46CisJCS8qCisJCSAqIERvIG5vdGhpbmcuCisJCSAqICBJZiB3ZSB3ZXJlIHRvIGZyZWUgdGhlIGJ1ZmZlciwgdGhlbiB0aGUgdXNlciB3b3VsZAorCQkgKiAgbG9zZSBhbnkgdHJhY2UgdGhhdCB3YXMgaW4gdGhlIGJ1ZmZlci4KKwkJICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDE3YmI4OGQuLmEwMTc0YTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0xMSwzMiArMTEsMzMgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBJbmdvIE1vbG5hcgogICogIENvcHlyaWdodCAoQykgMjAwNCBXaWxsaWFtIExlZSBJcndpbiBJSUkKICAqLworI2luY2x1ZGUgPGxpbnV4L3JpbmdfYnVmZmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwbGljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KLSNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KLQotI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yaW5nX2J1ZmZlci5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgogCiAjZGVmaW5lIFRSQUNFX0JVRkZFUl9GTEFHUwkoUkJfRkxfT1ZFUldSSVRFKQogCkBAIC00NCwxNCArNDUsMjUgQEAKIHVuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseQl0cmFjaW5nX3RocmVzaDsKIAogLyoKKyAqIE9uIGJvb3QgdXAsIHRoZSByaW5nIGJ1ZmZlciBpcyBzZXQgdG8gdGhlIG1pbmltdW0gc2l6ZSwgc28gdGhhdAorICogd2UgZG8gbm90IHdhc3RlIG1lbW9yeSBvbiBzeXN0ZW1zIHRoYXQgYXJlIG5vdCB1c2luZyB0cmFjaW5nLgorICovCitzdGF0aWMgaW50IHJpbmdfYnVmZmVyX2V4cGFuZGVkOworCisvKgogICogV2UgbmVlZCB0byBjaGFuZ2UgdGhpcyBzdGF0ZSB3aGVuIGEgc2VsZnRlc3QgaXMgcnVubmluZy4KICAqIEEgc2VsZnRlc3Qgd2lsbCBsdXJrIGludG8gdGhlIHJpbmctYnVmZmVyIHRvIGNvdW50IHRoZQogICogZW50cmllcyBpbnNlcnRlZCBkdXJpbmcgdGhlIHNlbGZ0ZXN0IGFsdGhvdWdoIHNvbWUgY29uY3VycmVudAotICogaW5zZXJ0aW9ucyBpbnRvIHRoZSByaW5nLWJ1ZmZlciBzdWNoIGFzIGZ0cmFjZV9wcmludGsgY291bGQgb2NjdXJyZWQKKyAqIGluc2VydGlvbnMgaW50byB0aGUgcmluZy1idWZmZXIgc3VjaCBhcyB0cmFjZV9wcmludGsgY291bGQgb2NjdXJyZWQKICAqIGF0IHRoZSBzYW1lIHRpbWUsIGdpdmluZyBmYWxzZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSByZXN1bHRzLgogICovCiBzdGF0aWMgYm9vbCBfX3JlYWRfbW9zdGx5IHRyYWNpbmdfc2VsZnRlc3RfcnVubmluZzsKIAorLyoKKyAqIElmIGEgdHJhY2VyIGlzIHJ1bm5pbmcsIHdlIGRvIG5vdCB3YW50IHRvIHJ1biBTRUxGVEVTVC4KKyAqLworc3RhdGljIGJvb2wgX19yZWFkX21vc3RseSB0cmFjaW5nX3NlbGZ0ZXN0X2Rpc2FibGVkOworCiAvKiBGb3IgdHJhY2VycyB0aGF0IGRvbid0IGltcGxlbWVudCBjdXN0b20gZmxhZ3MgKi8KIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBkdW1teV90cmFjZXJfb3B0W10gPSB7CiAJeyB9CkBAIC03Myw3ICs4NSw3IEBACiAgKiBvZiB0aGUgdHJhY2VyIGlzIHN1Y2Nlc3NmdWwuIEJ1dCB0aGF0IGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQgc2V0cwogICogdGhpcyBiYWNrIHRvIHplcm8uCiAgKi8KLWludCB0cmFjaW5nX2Rpc2FibGVkID0gMTsKK3N0YXRpYyBpbnQgdHJhY2luZ19kaXNhYmxlZCA9IDE7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShsb2NhbF90LCBmdHJhY2VfY3B1X2Rpc2FibGVkKTsKIApAQCAtOTEsNiArMTAzLDkgQEAKIAogc3RhdGljIGNwdW1hc2tfdmFyX3QgX19yZWFkX21vc3RseQl0cmFjaW5nX2J1ZmZlcl9tYXNrOwogCisvKiBEZWZpbmUgd2hpY2ggY3B1IGJ1ZmZlcnMgYXJlIGN1cnJlbnRseSByZWFkIGluIHRyYWNlX3BpcGUgKi8KK3N0YXRpYyBjcHVtYXNrX3Zhcl90CQkJdHJhY2luZ19yZWFkZXJfY3B1bWFzazsKKwogI2RlZmluZSBmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpCVwKIAlmb3JfZWFjaF9jcHUoY3B1LCB0cmFjaW5nX2J1ZmZlcl9tYXNrKQogCkBAIC0xMDksMTQgKzEyNCwyMSBAQAogICovCiBpbnQgZnRyYWNlX2R1bXBfb25fb29wczsKIAotc3RhdGljIGludCB0cmFjaW5nX3NldF90cmFjZXIoY2hhciAqYnVmKTsKK3N0YXRpYyBpbnQgdHJhY2luZ19zZXRfdHJhY2VyKGNvbnN0IGNoYXIgKmJ1Zik7CisKKyNkZWZpbmUgQk9PVFVQX1RSQUNFUl9TSVpFCQkxMDAKK3N0YXRpYyBjaGFyIGJvb3R1cF90cmFjZXJfYnVmW0JPT1RVUF9UUkFDRVJfU0laRV0gX19pbml0ZGF0YTsKK3N0YXRpYyBjaGFyICpkZWZhdWx0X2Jvb3R1cF90cmFjZXI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldF9mdHJhY2UoY2hhciAqc3RyKQogewotCXRyYWNpbmdfc2V0X3RyYWNlcihzdHIpOworCXN0cm5jcHkoYm9vdHVwX3RyYWNlcl9idWYsIHN0ciwgQk9PVFVQX1RSQUNFUl9TSVpFKTsKKwlkZWZhdWx0X2Jvb3R1cF90cmFjZXIgPSBib290dXBfdHJhY2VyX2J1ZjsKKwkvKiBXZSBhcmUgdXNpbmcgZnRyYWNlIGVhcmx5LCBleHBhbmQgaXQgKi8KKwlyaW5nX2J1ZmZlcl9leHBhbmRlZCA9IDE7CiAJcmV0dXJuIDE7CiB9Ci1fX3NldHVwKCJmdHJhY2UiLCBzZXRfZnRyYWNlKTsKK19fc2V0dXAoImZ0cmFjZT0iLCBzZXRfZnRyYWNlKTsKIAogc3RhdGljIGludCBfX2luaXQgc2V0X2Z0cmFjZV9kdW1wX29uX29vcHMoY2hhciAqc3RyKQogewpAQCAtMTMzLDEzICsxNTUsNiBAQAogCXJldHVybiBuc2VjOwogfQogCi1jeWNsZV90IGZ0cmFjZV9ub3coaW50IGNwdSkKLXsKLQl1NjQgdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGNwdSk7Ci0JcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1LCAmdHMpOwotCXJldHVybiB0czsKLX0KLQogLyoKICAqIFRoZSBnbG9iYWxfdHJhY2UgaXMgdGhlIGRlc2NyaXB0b3IgdGhhdCBob2xkcyB0aGUgdHJhY2luZwogICogYnVmZmVycyBmb3IgdGhlIGxpdmUgdHJhY2luZy4gRm9yIGVhY2ggQ1BVLCBpdCBjb250YWlucwpAQCAtMTU2LDYgKzE3MSwyMCBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRyYWNlX2FycmF5X2NwdSwgZ2xvYmFsX3RyYWNlX2NwdSk7CiAKK2N5Y2xlX3QgZnRyYWNlX25vdyhpbnQgY3B1KQoreworCXU2NCB0czsKKworCS8qIEVhcmx5IGJvb3QgdXAgZG9lcyBub3QgaGF2ZSBhIGJ1ZmZlciB5ZXQgKi8KKwlpZiAoIWdsb2JhbF90cmFjZS5idWZmZXIpCisJCXJldHVybiB0cmFjZV9jbG9ja19sb2NhbCgpOworCisJdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGdsb2JhbF90cmFjZS5idWZmZXIsIGNwdSk7CisJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgY3B1LCAmdHMpOworCisJcmV0dXJuIHRzOworfQorCiAvKgogICogVGhlIG1heF90ciBpcyB1c2VkIHRvIHNuYXBzaG90IHRoZSBnbG9iYWxfdHJhY2Ugd2hlbiBhIG1heGltdW0KICAqIGxhdGVuY3kgaXMgcmVhY2hlZC4gU29tZSB0cmFjZXJzIHdpbGwgdXNlIHRoaXMgdG8gc3RvcmUgYSBtYXhpbXVtCkBAIC0xODYsOSArMjE1LDYgQEAKIAlyZXR1cm4gdHJhY2VyX2VuYWJsZWQ7CiB9CiAKLS8qIGZ1bmN0aW9uIHRyYWNpbmcgZW5hYmxlZCAqLwotaW50CQkJCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkOwotCiAvKgogICogdHJhY2VfYnVmX3NpemUgaXMgdGhlIHNpemUgaW4gYnl0ZXMgdGhhdCBpcyBhbGxvY2F0ZWQKICAqIGZvciBhIGJ1ZmZlci4gTm90ZSwgdGhlIG51bWJlciBvZiBieXRlcyBpcyBhbHdheXMgcm91bmRlZApAQCAtMjI5LDcgKzI1NSw3IEBACiAKIC8qIHRyYWNlX2ZsYWdzIGhvbGRzIHRyYWNlX29wdGlvbnMgZGVmYXVsdCB2YWx1ZXMgKi8KIHVuc2lnbmVkIGxvbmcgdHJhY2VfZmxhZ3MgPSBUUkFDRV9JVEVSX1BSSU5UX1BBUkVOVCB8IFRSQUNFX0lURVJfUFJJTlRLIHwKLQlUUkFDRV9JVEVSX0FOTk9UQVRFOworCVRSQUNFX0lURVJfQU5OT1RBVEUgfCBUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTyB8IFRSQUNFX0lURVJfU0xFRVBfVElNRTsKIAogLyoqCiAgKiB0cmFjZV93YWtlX3VwIC0gd2FrZSB1cCB0YXNrcyB3YWl0aW5nIGZvciB0cmFjZSBpbnB1dApAQCAtMjgwLDEzICszMDYsMTcgQEAKIAkiYmxvY2siLAogCSJzdGFja3RyYWNlIiwKIAkic2NoZWQtdHJlZSIsCi0JImZ0cmFjZV9wcmludGsiLAorCSJ0cmFjZV9wcmludGsiLAogCSJmdHJhY2VfcHJlZW1wdCIsCiAJImJyYW5jaCIsCiAJImFubm90YXRlIiwKIAkidXNlcnN0YWNrdHJhY2UiLAogCSJzeW0tdXNlcm9iaiIsCiAJInByaW50ay1tc2ctb25seSIsCisJImNvbnRleHQtaW5mbyIsCisJImxhdGVuY3ktZm9ybWF0IiwKKwkiZ2xvYmFsLWNsb2NrIiwKKwkic2xlZXAtdGltZSIsCiAJTlVMTAogfTsKIApAQCAtMzI2LDE0MCArMzU2LDcgQEAKIAlkYXRhLT5ydF9wcmlvcml0eSA9IHRzay0+cnRfcHJpb3JpdHk7CiAKIAkvKiByZWNvcmQgdGhpcyB0YXNrcyBjb21tICovCi0JdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsKLX0KLQotLyoqCi0gKiB0cmFjZV9zZXFfcHJpbnRmIC0gc2VxdWVuY2UgcHJpbnRpbmcgb2YgdHJhY2UgaW5mb3JtYXRpb24KLSAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCi0gKiBAZm10OiBwcmludGYgZm9ybWF0IHN0cmluZwotICoKLSAqIFRoZSB0cmFjZXIgbWF5IHVzZSBlaXRoZXIgc2VxdWVuY2Ugb3BlcmF0aW9ucyBvciBpdHMgb3duCi0gKiBjb3B5IHRvIHVzZXIgcm91dGluZXMuIFRvIHNpbXBsaWZ5IGZvcm1hdGluZyBvZiBhIHRyYWNlCi0gKiB0cmFjZV9zZXFfcHJpbnRmIGlzIHVzZWQgdG8gc3RvcmUgc3RyaW5ncyBpbnRvIGEgc3BlY2lhbAotICogYnVmZmVyIChAcykuIFRoZW4gdGhlIG91dHB1dCBtYXkgYmUgZWl0aGVyIHVzZWQgYnkKLSAqIHRoZSBzZXF1ZW5jZXIgb3IgcHVsbGVkIGludG8gYW5vdGhlciBidWZmZXIuCi0gKi8KLWludAotdHJhY2Vfc2VxX3ByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgbGVuID0gKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuOwotCXZhX2xpc3QgYXA7Ci0JaW50IHJldDsKLQotCWlmICghbGVuKQotCQlyZXR1cm4gMDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXJldCA9IHZzbnByaW50ZihzLT5idWZmZXIgKyBzLT5sZW4sIGxlbiwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQotCS8qIElmIHdlIGNhbid0IHdyaXRlIGl0IGFsbCwgZG9uJ3QgYm90aGVyIHdyaXRpbmcgYW55dGhpbmcgKi8KLQlpZiAocmV0ID49IGxlbikKLQkJcmV0dXJuIDA7Ci0KLQlzLT5sZW4gKz0gcmV0OwotCi0JcmV0dXJuIGxlbjsKLX0KLQotLyoqCi0gKiB0cmFjZV9zZXFfcHV0cyAtIHRyYWNlIHNlcXVlbmNlIHByaW50aW5nIG9mIHNpbXBsZSBzdHJpbmcKLSAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCi0gKiBAc3RyOiBzaW1wbGUgc3RyaW5nIHRvIHJlY29yZAotICoKLSAqIFRoZSB0cmFjZXIgbWF5IHVzZSBlaXRoZXIgdGhlIHNlcXVlbmNlIG9wZXJhdGlvbnMgb3IgaXRzIG93bgotICogY29weSB0byB1c2VyIHJvdXRpbmVzLiBUaGlzIGZ1bmN0aW9uIHJlY29yZHMgYSBzaW1wbGUgc3RyaW5nCi0gKiBpbnRvIGEgc3BlY2lhbCBidWZmZXIgKEBzKSBmb3IgbGF0ZXIgcmV0cmlldmFsIGJ5IGEgc2VxdWVuY2VyCi0gKiBvciBvdGhlciBtZWNoYW5pc20uCi0gKi8KLXN0YXRpYyBpbnQKLXRyYWNlX3NlcV9wdXRzKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKnN0cikKLXsKLQlpbnQgbGVuID0gc3RybGVuKHN0cik7Ci0KLQlpZiAobGVuID4gKChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbikpCi0JCXJldHVybiAwOwotCi0JbWVtY3B5KHMtPmJ1ZmZlciArIHMtPmxlbiwgc3RyLCBsZW4pOwotCXMtPmxlbiArPSBsZW47Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50Ci10cmFjZV9zZXFfcHV0YyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBjaGFyIGMpCi17Ci0JaWYgKHMtPmxlbiA+PSAoUEFHRV9TSVpFIC0gMSkpCi0JCXJldHVybiAwOwotCi0Jcy0+YnVmZmVyW3MtPmxlbisrXSA9IGM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAotdHJhY2Vfc2VxX3B1dG1lbShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB2b2lkICptZW0sIHNpemVfdCBsZW4pCi17Ci0JaWYgKGxlbiA+ICgoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW4pKQotCQlyZXR1cm4gMDsKLQotCW1lbWNweShzLT5idWZmZXIgKyBzLT5sZW4sIG1lbSwgbGVuKTsKLQlzLT5sZW4gKz0gbGVuOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotI2RlZmluZSBNQVhfTUVNSEVYX0JZVEVTCTgKLSNkZWZpbmUgSEVYX0NIQVJTCQkoTUFYX01FTUhFWF9CWVRFUyoyICsgMSkKLQotc3RhdGljIGludAotdHJhY2Vfc2VxX3B1dG1lbV9oZXgoc3RydWN0IHRyYWNlX3NlcSAqcywgdm9pZCAqbWVtLCBzaXplX3QgbGVuKQotewotCXVuc2lnbmVkIGNoYXIgaGV4W0hFWF9DSEFSU107Ci0JdW5zaWduZWQgY2hhciAqZGF0YSA9IG1lbTsKLQlpbnQgaSwgajsKLQotI2lmZGVmIF9fQklHX0VORElBTgotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBpKyspIHsKLSNlbHNlCi0JZm9yIChpID0gbGVuLTEsIGogPSAwOyBpID49IDA7IGktLSkgewotI2VuZGlmCi0JCWhleFtqKytdID0gaGV4X2FzY19oaShkYXRhW2ldKTsKLQkJaGV4W2orK10gPSBoZXhfYXNjX2xvKGRhdGFbaV0pOwotCX0KLQloZXhbaisrXSA9ICcgJzsKLQotCXJldHVybiB0cmFjZV9zZXFfcHV0bWVtKHMsIGhleCwgaik7Ci19Ci0KLXN0YXRpYyBpbnQKLXRyYWNlX3NlcV9wYXRoKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCBwYXRoICpwYXRoKQotewotCXVuc2lnbmVkIGNoYXIgKnA7Ci0KLQlpZiAocy0+bGVuID49IChQQUdFX1NJWkUgLSAxKSkKLQkJcmV0dXJuIDA7Ci0JcCA9IGRfcGF0aChwYXRoLCBzLT5idWZmZXIgKyBzLT5sZW4sIFBBR0VfU0laRSAtIHMtPmxlbik7Ci0JaWYgKCFJU19FUlIocCkpIHsKLQkJcCA9IG1hbmdsZV9wYXRoKHMtPmJ1ZmZlciArIHMtPmxlbiwgcCwgIlxuIik7Ci0JCWlmIChwKSB7Ci0JCQlzLT5sZW4gPSBwIC0gcy0+YnVmZmVyOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9IGVsc2UgewotCQlzLT5idWZmZXJbcy0+bGVuKytdID0gJz8nOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXRyYWNlX3NlcV9yZXNldChzdHJ1Y3QgdHJhY2Vfc2VxICpzKQotewotCXMtPmxlbiA9IDA7Ci0Jcy0+cmVhZHBvcyA9IDA7CisJdHJhY2luZ19yZWNvcmRfY21kbGluZSh0c2spOwogfQogCiBzc2l6ZV90IHRyYWNlX3NlcV90b191c2VyKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250KQpAQCAtNDY3LDYgKzM2NCw5IEBACiAJaW50IGxlbjsKIAlpbnQgcmV0OwogCisJaWYgKCFjbnQpCisJCXJldHVybiAwOworCiAJaWYgKHMtPmxlbiA8PSBzLT5yZWFkcG9zKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC00NzQsMTAgKzM3NCwzMSBAQAogCWlmIChjbnQgPiBsZW4pCiAJCWNudCA9IGxlbjsKIAlyZXQgPSBjb3B5X3RvX3VzZXIodWJ1Ziwgcy0+YnVmZmVyICsgcy0+cmVhZHBvcywgY250KTsKLQlpZiAocmV0KQorCWlmIChyZXQgPT0gY250KQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXMtPnJlYWRwb3MgKz0gbGVuOworCWNudCAtPSByZXQ7CisKKwlzLT5yZWFkcG9zICs9IGNudDsKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgc3NpemVfdCB0cmFjZV9zZXFfdG9fYnVmZmVyKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNudCkKK3sKKwlpbnQgbGVuOworCXZvaWQgKnJldDsKKworCWlmIChzLT5sZW4gPD0gcy0+cmVhZHBvcykKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxlbiA9IHMtPmxlbiAtIHMtPnJlYWRwb3M7CisJaWYgKGNudCA+IGxlbikKKwkJY250ID0gbGVuOworCXJldCA9IG1lbWNweShidWYsIHMtPmJ1ZmZlciArIHMtPnJlYWRwb3MsIGNudCk7CisJaWYgKCFyZXQpCisJCXJldHVybiAtRUZBVUxUOworCisJcy0+cmVhZHBvcyArPSBjbnQ7CiAJcmV0dXJuIGNudDsKIH0KIApAQCAtNDg5LDcgKzQxMCw3IEBACiAJcy0+YnVmZmVyW2xlbl0gPSAwOwogCXNlcV9wdXRzKG0sIHMtPmJ1ZmZlcik7CiAKLQl0cmFjZV9zZXFfcmVzZXQocyk7CisJdHJhY2Vfc2VxX2luaXQocyk7CiB9CiAKIC8qKgpAQCAtNTQzLDcgKzQ2NCw3IEBACiAKIAlmdHJhY2VfZW5hYmxlX2NwdSgpOwogCi0JV0FSTl9PTl9PTkNFKHJldCk7CisJV0FSTl9PTl9PTkNFKHJldCAmJiByZXQgIT0gLUVBR0FJTik7CiAKIAlfX3VwZGF0ZV9tYXhfdHIodHIsIHRzaywgY3B1KTsKIAlfX3Jhd19zcGluX3VubG9jaygmZnRyYWNlX21heF9sb2NrKTsKQEAgLTU1Niw2ICs0NzcsOCBAQAogICogUmVnaXN0ZXIgYSBuZXcgcGx1Z2luIHRyYWNlci4KICAqLwogaW50IHJlZ2lzdGVyX3RyYWNlcihzdHJ1Y3QgdHJhY2VyICp0eXBlKQorX19yZWxlYXNlcyhrZXJuZWxfbG9jaykKK19fYWNxdWlyZXMoa2VybmVsX2xvY2spCiB7CiAJc3RydWN0IHRyYWNlciAqdDsKIAlpbnQgbGVuOwpAQCAtNTk0LDkgKzUxNywxMiBAQAogCWVsc2UKIAkJaWYgKCF0eXBlLT5mbGFncy0+b3B0cykKIAkJCXR5cGUtPmZsYWdzLT5vcHRzID0gZHVtbXlfdHJhY2VyX29wdDsKKwlpZiAoIXR5cGUtPndhaXRfcGlwZSkKKwkJdHlwZS0+d2FpdF9waXBlID0gZGVmYXVsdF93YWl0X3BpcGU7CisKIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCi0JaWYgKHR5cGUtPnNlbGZ0ZXN0KSB7CisJaWYgKHR5cGUtPnNlbGZ0ZXN0ICYmICF0cmFjaW5nX3NlbGZ0ZXN0X2Rpc2FibGVkKSB7CiAJCXN0cnVjdCB0cmFjZXIgKnNhdmVkX3RyYWNlciA9IGN1cnJlbnRfdHJhY2U7CiAJCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwogCQlpbnQgaTsKQEAgLTYzOCw4ICs1NjQsMjYgQEAKICBvdXQ6CiAJdHJhY2luZ19zZWxmdGVzdF9ydW5uaW5nID0gZmFsc2U7CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQlsb2NrX2tlcm5lbCgpOwogCisJaWYgKHJldCB8fCAhZGVmYXVsdF9ib290dXBfdHJhY2VyKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAoc3RybmNtcChkZWZhdWx0X2Jvb3R1cF90cmFjZXIsIHR5cGUtPm5hbWUsIEJPT1RVUF9UUkFDRVJfU0laRSkpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXByaW50ayhLRVJOX0lORk8gIlN0YXJ0aW5nIHRyYWNlciAnJXMnXG4iLCB0eXBlLT5uYW1lKTsKKwkvKiBEbyB3ZSB3YW50IHRoaXMgdHJhY2VyIHRvIHN0YXJ0IG9uIGJvb3R1cD8gKi8KKwl0cmFjaW5nX3NldF90cmFjZXIodHlwZS0+bmFtZSk7CisJZGVmYXVsdF9ib290dXBfdHJhY2VyID0gTlVMTDsKKwkvKiBkaXNhYmxlIG90aGVyIHNlbGZ0ZXN0cywgc2luY2UgdGhpcyB3aWxsIGJyZWFrIGl0LiAqLworCXRyYWNpbmdfc2VsZnRlc3RfZGlzYWJsZWQgPSAxOworI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCisJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIEZUUkFDRSBzZWxmdGVzdHMgZHVlIHRvIHJ1bm5pbmcgdHJhY2VyICclcydcbiIsCisJICAgICAgIHR5cGUtPm5hbWUpOworI2VuZGlmCisKKyBvdXRfdW5sb2NrOgorCWxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjU4LDYgKzYwMiwxNSBAQAogCiAgZm91bmQ6CiAJKnQgPSAoKnQpLT5uZXh0OworCisJaWYgKHR5cGUgPT0gY3VycmVudF90cmFjZSAmJiB0cmFjZXJfZW5hYmxlZCkgeworCQl0cmFjZXJfZW5hYmxlZCA9IDA7CisJCXRyYWNpbmdfc3RvcCgpOworCQlpZiAoY3VycmVudF90cmFjZS0+c3RvcCkKKwkJCWN1cnJlbnRfdHJhY2UtPnN0b3AoJmdsb2JhbF90cmFjZSk7CisJCWN1cnJlbnRfdHJhY2UgPSAmbm9wX3RyYWNlOworCX0KKwogCWlmIChzdHJsZW4odHlwZS0+bmFtZSkgIT0gbWF4X3RyYWNlcl90eXBlX2xlbikKIAkJZ290byBvdXQ7CiAKQEAgLTY4OSwxOSArNjQyLDIwIEBACiB9CiAKICNkZWZpbmUgU0FWRURfQ01ETElORVMgMTI4CisjZGVmaW5lIE5PX0NNRExJTkVfTUFQIFVJTlRfTUFYCiBzdGF0aWMgdW5zaWduZWQgbWFwX3BpZF90b19jbWRsaW5lW1BJRF9NQVhfREVGQVVMVCsxXTsKIHN0YXRpYyB1bnNpZ25lZCBtYXBfY21kbGluZV90b19waWRbU0FWRURfQ01ETElORVNdOwogc3RhdGljIGNoYXIgc2F2ZWRfY21kbGluZXNbU0FWRURfQ01ETElORVNdW1RBU0tfQ09NTV9MRU5dOwogc3RhdGljIGludCBjbWRsaW5lX2lkeDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2VfY21kbGluZV9sb2NrKTsKK3N0YXRpYyByYXdfc3BpbmxvY2tfdCB0cmFjZV9jbWRsaW5lX2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIC8qIHRlbXBvcmFyeSBkaXNhYmxlIHJlY29yZGluZyAqLwotYXRvbWljX3QgdHJhY2VfcmVjb3JkX2NtZGxpbmVfZGlzYWJsZWQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBhdG9taWNfdCB0cmFjZV9yZWNvcmRfY21kbGluZV9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgdm9pZCB0cmFjZV9pbml0X2NtZGxpbmVzKHZvaWQpCiB7Ci0JbWVtc2V0KCZtYXBfcGlkX3RvX2NtZGxpbmUsIC0xLCBzaXplb2YobWFwX3BpZF90b19jbWRsaW5lKSk7Ci0JbWVtc2V0KCZtYXBfY21kbGluZV90b19waWQsIC0xLCBzaXplb2YobWFwX2NtZGxpbmVfdG9fcGlkKSk7CisJbWVtc2V0KCZtYXBfcGlkX3RvX2NtZGxpbmUsIE5PX0NNRExJTkVfTUFQLCBzaXplb2YobWFwX3BpZF90b19jbWRsaW5lKSk7CisJbWVtc2V0KCZtYXBfY21kbGluZV90b19waWQsIE5PX0NNRExJTkVfTUFQLCBzaXplb2YobWFwX2NtZGxpbmVfdG9fcGlkKSk7CiAJY21kbGluZV9pZHggPSAwOwogfQogCkBAIC03MzgsMTMgKzY5MiwxMiBAQAogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhY2luZ19zdGFydF9sb2NrLCBmbGFncyk7Ci0JaWYgKC0tdHJhY2Vfc3RvcF9jb3VudCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAodHJhY2Vfc3RvcF9jb3VudCA8IDApIHsKLQkJLyogU29tZW9uZSBzY3Jld2VkIHVwIHRoZWlyIGRlYnVnZ2luZyAqLwotCQlXQVJOX09OX09OQ0UoMSk7Ci0JCXRyYWNlX3N0b3BfY291bnQgPSAwOworCWlmICgtLXRyYWNlX3N0b3BfY291bnQpIHsKKwkJaWYgKHRyYWNlX3N0b3BfY291bnQgPCAwKSB7CisJCQkvKiBTb21lb25lIHNjcmV3ZWQgdXAgdGhlaXIgZGVidWdnaW5nICovCisJCQlXQVJOX09OX09OQ0UoMSk7CisJCQl0cmFjZV9zdG9wX2NvdW50ID0gMDsKKwkJfQogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTc5NCw4ICs3NDcsNyBAQAogCiBzdGF0aWMgdm9pZCB0cmFjZV9zYXZlX2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JdW5zaWduZWQgbWFwOwotCXVuc2lnbmVkIGlkeDsKKwl1bnNpZ25lZCBwaWQsIGlkeDsKIAogCWlmICghdHNrLT5waWQgfHwgdW5saWtlbHkodHNrLT5waWQgPiBQSURfTUFYX0RFRkFVTFQpKQogCQlyZXR1cm47CkBAIC04MDYsMTcgKzc1OCwyNCBAQAogCSAqIG5vciBkbyB3ZSB3YW50IHRvIGRpc2FibGUgaW50ZXJydXB0cywKIAkgKiBzbyBpZiB3ZSBtaXNzIGhlcmUsIHRoZW4gYmV0dGVyIGx1Y2sgbmV4dCB0aW1lLgogCSAqLwotCWlmICghc3Bpbl90cnlsb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spKQorCWlmICghX19yYXdfc3Bpbl90cnlsb2NrKCZ0cmFjZV9jbWRsaW5lX2xvY2spKQogCQlyZXR1cm47CiAKIAlpZHggPSBtYXBfcGlkX3RvX2NtZGxpbmVbdHNrLT5waWRdOwotCWlmIChpZHggPj0gU0FWRURfQ01ETElORVMpIHsKKwlpZiAoaWR4ID09IE5PX0NNRExJTkVfTUFQKSB7CiAJCWlkeCA9IChjbWRsaW5lX2lkeCArIDEpICUgU0FWRURfQ01ETElORVM7CiAKLQkJbWFwID0gbWFwX2NtZGxpbmVfdG9fcGlkW2lkeF07Ci0JCWlmIChtYXAgPD0gUElEX01BWF9ERUZBVUxUKQotCQkJbWFwX3BpZF90b19jbWRsaW5lW21hcF0gPSAodW5zaWduZWQpLTE7CisJCS8qCisJCSAqIENoZWNrIHdoZXRoZXIgdGhlIGNtZGxpbmUgYnVmZmVyIGF0IGlkeCBoYXMgYSBwaWQKKwkJICogbWFwcGVkLiBXZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoYXQgZW50cnkgc28gd2UKKwkJICogbmVlZCB0byBjbGVhciB0aGUgbWFwX3BpZF90b19jbWRsaW5lLiBPdGhlcndpc2Ugd2UKKwkJICogd291bGQgcmVhZCB0aGUgbmV3IGNvbW0gZm9yIHRoZSBvbGQgcGlkLgorCQkgKi8KKwkJcGlkID0gbWFwX2NtZGxpbmVfdG9fcGlkW2lkeF07CisJCWlmIChwaWQgIT0gTk9fQ01ETElORV9NQVApCisJCQltYXBfcGlkX3RvX2NtZGxpbmVbcGlkXSA9IE5PX0NNRExJTkVfTUFQOwogCisJCW1hcF9jbWRsaW5lX3RvX3BpZFtpZHhdID0gdHNrLT5waWQ7CiAJCW1hcF9waWRfdG9fY21kbGluZVt0c2stPnBpZF0gPSBpZHg7CiAKIAkJY21kbGluZV9pZHggPSBpZHg7CkBAIC04MjQsMzMgKzc4MywzNyBAQAogCiAJbWVtY3B5KCZzYXZlZF9jbWRsaW5lc1tpZHhdLCB0c2stPmNvbW0sIFRBU0tfQ09NTV9MRU4pOwogCi0Jc3Bpbl91bmxvY2soJnRyYWNlX2NtZGxpbmVfbG9jayk7CisJX19yYXdfc3Bpbl91bmxvY2soJnRyYWNlX2NtZGxpbmVfbG9jayk7CiB9CiAKLWNoYXIgKnRyYWNlX2ZpbmRfY21kbGluZShpbnQgcGlkKQordm9pZCB0cmFjZV9maW5kX2NtZGxpbmUoaW50IHBpZCwgY2hhciBjb21tW10pCiB7Ci0JY2hhciAqY21kbGluZSA9ICI8Li4uPiI7CiAJdW5zaWduZWQgbWFwOwogCi0JaWYgKCFwaWQpCi0JCXJldHVybiAiPGlkbGU+IjsKKwlpZiAoIXBpZCkgeworCQlzdHJjcHkoY29tbSwgIjxpZGxlPiIpOworCQlyZXR1cm47CisJfQogCi0JaWYgKHBpZCA+IFBJRF9NQVhfREVGQVVMVCkKLQkJZ290byBvdXQ7CisJaWYgKHBpZCA+IFBJRF9NQVhfREVGQVVMVCkgeworCQlzdHJjcHkoY29tbSwgIjwuLi4+Iik7CisJCXJldHVybjsKKwl9CiAKKwlfX3Jhd19zcGluX2xvY2soJnRyYWNlX2NtZGxpbmVfbG9jayk7CiAJbWFwID0gbWFwX3BpZF90b19jbWRsaW5lW3BpZF07Ci0JaWYgKG1hcCA+PSBTQVZFRF9DTURMSU5FUykKLQkJZ290byBvdXQ7CisJaWYgKG1hcCAhPSBOT19DTURMSU5FX01BUCkKKwkJc3RyY3B5KGNvbW0sIHNhdmVkX2NtZGxpbmVzW21hcF0pOworCWVsc2UKKwkJc3RyY3B5KGNvbW0sICI8Li4uPiIpOwogCi0JY21kbGluZSA9IHNhdmVkX2NtZGxpbmVzW21hcF07Ci0KLSBvdXQ6Ci0JcmV0dXJuIGNtZGxpbmU7CisJX19yYXdfc3Bpbl91bmxvY2soJnRyYWNlX2NtZGxpbmVfbG9jayk7CiB9CiAKIHZvaWQgdHJhY2luZ19yZWNvcmRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlpZiAoYXRvbWljX3JlYWQoJnRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkKSkKKwlpZiAoYXRvbWljX3JlYWQoJnRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkKSB8fCAhdHJhY2VyX2VuYWJsZWQgfHwKKwkgICAgIXRyYWNpbmdfaXNfb24oKSkKIAkJcmV0dXJuOwogCiAJdHJhY2Vfc2F2ZV9jbWRsaW5lKHRzayk7CkBAIC04NjQsNyArODI3LDcgQEAKIAogCWVudHJ5LT5wcmVlbXB0X2NvdW50CQk9IHBjICYgMHhmZjsKIAllbnRyeS0+cGlkCQkJPSAodHNrKSA/IHRzay0+cGlkIDogMDsKLQllbnRyeS0+dGdpZCAgICAgICAgICAgICAgIAk9ICh0c2spID8gdHNrLT50Z2lkIDogMDsKKwllbnRyeS0+dGdpZAkJCT0gKHRzaykgPyB0c2stPnRnaWQgOiAwOwogCWVudHJ5LT5mbGFncyA9CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAkJKGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpID8gVFJBQ0VfRkxBR19JUlFTX09GRiA6IDApIHwKQEAgLTg3Niw3OCArODM5LDEzMiBAQAogCQkobmVlZF9yZXNjaGVkKCkgPyBUUkFDRV9GTEFHX05FRURfUkVTQ0hFRCA6IDApOwogfQogCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKnRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIHR5cGUsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBsZW4pOworCWlmIChldmVudCAhPSBOVUxMKSB7CisJCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisKKwkJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGZsYWdzLCBwYyk7CisJCWVudC0+dHlwZSA9IHR5cGU7CisJfQorCisJcmV0dXJuIGV2ZW50OworfQorc3RhdGljIHZvaWQgZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHNraXAsIGludCBwYyk7CitzdGF0aWMgdm9pZCBmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQkJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKKwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjLAorCQkJCQlpbnQgd2FrZSkKK3sKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKKworCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZmxhZ3MsIDYsIHBjKTsKKwlmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHRyLCBmbGFncywgcGMpOworCisJaWYgKHdha2UpCisJCXRyYWNlX3dha2VfdXAoKTsKK30KKwordm9pZCB0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCit7CisJX190cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIGZsYWdzLCBwYywgMSk7Cit9CisKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCit0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUodW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKK3sKKwlyZXR1cm4gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmZ2xvYmFsX3RyYWNlLAorCQkJCQkgdHlwZSwgbGVuLCBmbGFncywgcGMpOworfQorCit2b2lkIHRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKKwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQoreworCXJldHVybiBfX3RyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KCZnbG9iYWxfdHJhY2UsIGV2ZW50LCBmbGFncywgcGMsIDEpOworfQorCit2b2lkIHRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCit7CisJcmV0dXJuIF9fdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoJmdsb2JhbF90cmFjZSwgZXZlbnQsIGZsYWdzLCBwYywgMCk7Cit9CisKIHZvaWQKLXRyYWNlX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCit0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCSAgICAgICB1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkgICAgICAgaW50IHBjKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKIAkvKiBJZiB3ZSBhcmUgcmVhZGluZyB0aGUgcmluZyBidWZmZXIsIGRvbid0IHRyYWNlICovCiAJaWYgKHVubGlrZWx5KGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKIAkJcmV0dXJuOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0ZOLCBzaXplb2YoKmVudHJ5KSwKKwkJCQkJICBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9GTjsKIAllbnRyeS0+aXAJCQk9IGlwOwogCWVudHJ5LT5wYXJlbnRfaXAJCT0gcGFyZW50X2lwOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CiB9CiAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi1zdGF0aWMgdm9pZCBfX3RyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKK3N0YXRpYyBpbnQgX190cmFjZV9ncmFwaF9lbnRyeShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkJCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSwKIAkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCWludCBwYykKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAogCWlmICh1bmxpa2VseShsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZShnbG9iYWxfdHJhY2UuYnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmZ2xvYmFsX3RyYWNlLCBUUkFDRV9HUkFQSF9FTlQsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9HUkFQSF9FTlQ7CiAJZW50cnktPmdyYXBoX2VudAkJCT0gKnRyYWNlOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChnbG9iYWxfdHJhY2UuYnVmZmVyLCBldmVudCk7CisKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQgX190cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwKIAkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCWludCBwYykKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAogCWlmICh1bmxpa2VseShsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCiAJCXJldHVybjsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKGdsb2JhbF90cmFjZS5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKCZnbG9iYWxfdHJhY2UsIFRSQUNFX0dSQVBIX1JFVCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBmbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfR1JBUEhfUkVUOwogCWVudHJ5LT5yZXQJCQkJPSAqdHJhY2U7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChnbG9iYWxfdHJhY2UuYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGdsb2JhbF90cmFjZS5idWZmZXIsIGV2ZW50KTsKIH0KICNlbmRpZgogCkBAIC05NTcsMzEgKzk3NCwyMyBAQAogICAgICAgIGludCBwYykKIHsKIAlpZiAobGlrZWx5KCFhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKLQkJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CisJCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogfQogCi1zdGF0aWMgdm9pZCBmdHJhY2VfdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCSAgICAgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkgICAgICAgaW50IHNraXAsIGludCBwYykKK3N0YXRpYyB2b2lkIF9fZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJIGludCBza2lwLCBpbnQgcGMpCiB7CiAjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBzdGFja19lbnRyeSAqZW50cnk7CiAJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NUQUNLVFJBQ0UpKQotCQlyZXR1cm47Ci0KLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfU1RBQ0ssCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJcmV0dXJuOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCT0gVFJBQ0VfU1RBQ0s7Ci0KIAltZW1zZXQoJmVudHJ5LT5jYWxsZXIsIDAsIHNpemVvZihlbnRyeS0+Y2FsbGVyKSk7CiAKIAl0cmFjZS5ucl9lbnRyaWVzCT0gMDsKQEAgLTk5MCwzOCArOTk5LDQzIEBACiAJdHJhY2UuZW50cmllcwkJPSBlbnRyeS0+Y2FsbGVyOwogCiAJc2F2ZV9zdGFja190cmFjZSgmdHJhY2UpOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CiAjZW5kaWYKIH0KIAotdm9pZCBfX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCSAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCi0JCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCSAgIGludCBza2lwKQorc3RhdGljIHZvaWQgZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgICAgICBpbnQgc2tpcCwgaW50IHBjKQogewotCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIHNraXAsIHByZWVtcHRfY291bnQoKSk7CisJaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NUQUNLVFJBQ0UpKQorCQlyZXR1cm47CisKKwlfX2Z0cmFjZV90cmFjZV9zdGFjayh0ciwgZmxhZ3MsIHNraXAsIHBjKTsKK30KKwordm9pZCBfX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCSAgIGludCBza2lwLCBpbnQgcGMpCit7CisJX19mdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGZsYWdzLCBza2lwLCBwYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV90cmFjZV91c2Vyc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQorCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKIHsKICNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHVzZXJzdGFja19lbnRyeSAqZW50cnk7CiAJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCiAJaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1VTRVJTVEFDS1RSQUNFKSkKIAkJcmV0dXJuOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1VTRVJfU1RBQ0ssCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJcmV0dXJuOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCT0gVFJBQ0VfVVNFUl9TVEFDSzsKIAogCW1lbXNldCgmZW50cnktPmNhbGxlciwgMCwgc2l6ZW9mKGVudHJ5LT5jYWxsZXIpKTsKIApAQCAtMTAzMSw3MCArMTA0NSw1OCBAQAogCXRyYWNlLmVudHJpZXMJCT0gZW50cnktPmNhbGxlcjsKIAogCXNhdmVfc3RhY2tfdHJhY2VfdXNlcigmdHJhY2UpOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CiAjZW5kaWYKIH0KIAotdm9pZCBfX3RyYWNlX3VzZXJzdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorI2lmZGVmIFVOVVNFRAorc3RhdGljIHZvaWQgX190cmFjZV91c2Vyc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHRyLCBkYXRhLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKKwlmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHRyLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKIH0KKyNlbmRpZiAvKiBVTlVTRUQgKi8KIAogc3RhdGljIHZvaWQKLWZ0cmFjZV90cmFjZV9zcGVjaWFsKHZvaWQgKl9fdHIsIHZvaWQgKl9fZGF0YSwKK2Z0cmFjZV90cmFjZV9zcGVjaWFsKHZvaWQgKl9fdHIsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywKIAkJICAgICBpbnQgcGMpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhID0gX19kYXRhOwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBfX3RyOwogCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9TUEVDSUFMLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJcmV0dXJuOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfU1BFQ0lBTDsKIAllbnRyeS0+YXJnMQkJCT0gYXJnMTsKIAllbnRyeS0+YXJnMgkJCT0gYXJnMjsKIAllbnRyeS0+YXJnMwkJCT0gYXJnMzsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZGF0YSwgaXJxX2ZsYWdzLCA0LCBwYyk7Ci0JZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ciwgZGF0YSwgaXJxX2ZsYWdzLCBwYyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCBwYyk7CiB9CiAKIHZvaWQKIF9fdHJhY2Vfc3BlY2lhbCh2b2lkICpfX3RyLCB2b2lkICpfX2RhdGEsCiAJCXVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMpCiB7Ci0JZnRyYWNlX3RyYWNlX3NwZWNpYWwoX190ciwgX19kYXRhLCBhcmcxLCBhcmcyLCBhcmczLCBwcmVlbXB0X2NvdW50KCkpOworCWZ0cmFjZV90cmFjZV9zcGVjaWFsKF9fdHIsIGFyZzEsIGFyZzIsIGFyZzMsIHByZWVtcHRfY291bnQoKSk7CiB9CiAKIHZvaWQKIHRyYWNpbmdfc2NoZWRfc3dpdGNoX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAogCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAgICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQ1RYLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9DVFg7CiAJZW50cnktPnByZXZfcGlkCQkJPSBwcmV2LT5waWQ7CiAJZW50cnktPnByZXZfcHJpbwkJPSBwcmV2LT5wcmlvOwogCWVudHJ5LT5wcmV2X3N0YXRlCQk9IHByZXYtPnN0YXRlOwpAQCAtMTEwMiwyOSArMTEwNCwyMyBAQAogCWVudHJ5LT5uZXh0X3ByaW8JCT0gbmV4dC0+cHJpbzsKIAllbnRyeS0+bmV4dF9zdGF0ZQkJPSBuZXh0LT5zdGF0ZTsKIAllbnRyeS0+bmV4dF9jcHUJPSB0YXNrX2NwdShuZXh0KTsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIDUsIHBjKTsKLQlmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHRyLCBkYXRhLCBmbGFncywgcGMpOworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgZmxhZ3MsIHBjKTsKIH0KIAogdm9pZAogdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCSAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKndha2VlLAogCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLAogCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAgICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfV0FLRSwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBmbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfV0FLRTsKIAllbnRyeS0+cHJldl9waWQJCQk9IGN1cnItPnBpZDsKIAllbnRyeS0+cHJldl9wcmlvCQk9IGN1cnItPnByaW87CiAJZW50cnktPnByZXZfc3RhdGUJCT0gY3Vyci0+c3RhdGU7CkBAIC0xMTMyLDExICsxMTI4LDEwIEBACiAJZW50cnktPm5leHRfcHJpbwkJPSB3YWtlZS0+cHJpbzsKIAllbnRyeS0+bmV4dF9zdGF0ZQkJPSB3YWtlZS0+c3RhdGU7CiAJZW50cnktPm5leHRfY3B1CQkJPSB0YXNrX2NwdSh3YWtlZSk7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGRhdGEsIGZsYWdzLCA2LCBwYyk7Ci0JZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ciwgZGF0YSwgZmxhZ3MsIHBjKTsKIAotCXRyYWNlX3dha2VfdXAoKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKKwlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGZsYWdzLCA2LCBwYyk7CisJZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ciwgZmxhZ3MsIHBjKTsKIH0KIAogdm9pZApAQCAtMTE1Nyw2NiArMTE1Miw3IEBACiAJZGF0YSA9IHRyLT5kYXRhW2NwdV07CiAKIAlpZiAobGlrZWx5KGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCkgPT0gMSkpCi0JCWZ0cmFjZV90cmFjZV9zcGVjaWFsKHRyLCBkYXRhLCBhcmcxLCBhcmcyLCBhcmczLCBwYyk7Ci0KLQlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgotc3RhdGljIHZvaWQKLWZ1bmN0aW9uX3RyYWNlX2NhbGxfcHJlZW1wdF9vbmx5KHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQotewotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGRpc2FibGVkOwotCWludCBjcHUsIHJlc2NoZWQ7Ci0JaW50IHBjOwotCi0JaWYgKHVubGlrZWx5KCFmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCkpCi0JCXJldHVybjsKLQotCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7Ci0KLQlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKQotCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKLQotCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mdW5jdGlvbl90cmFjZV9jYWxsKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQotewotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGRpc2FibGVkOwotCWludCBjcHU7Ci0JaW50IHBjOwotCi0JaWYgKHVubGlrZWx5KCFmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCkpCi0JCXJldHVybjsKLQotCS8qCi0JICogTmVlZCB0byB1c2UgcmF3LCBzaW5jZSB0aGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUKLQkgKiByZWN1cnNpdmUgcHJvdGVjdGlvbiBpcyBwZXJmb3JtZWQuCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZGF0YSA9IHRyLT5kYXRhW2NwdV07Ci0JZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOwotCi0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkgewotCQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQkJdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7Ci0JfQorCQlmdHJhY2VfdHJhY2Vfc3BlY2lhbCh0ciwgYXJnMSwgYXJnMiwgYXJnMywgcGMpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTEyMjksNiArMTE2NSw3IEBACiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgZGlzYWJsZWQ7CisJaW50IHJldDsKIAlpbnQgY3B1OwogCWludCBwYzsKIApAQCAtMTI0NCwxNSArMTE4MSwxOCBAQAogCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKIAlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKSB7CiAJCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCQlfX3RyYWNlX2dyYXBoX2VudHJ5KHRyLCBkYXRhLCB0cmFjZSwgZmxhZ3MsIHBjKTsKKwkJcmV0ID0gX190cmFjZV9ncmFwaF9lbnRyeSh0ciwgdHJhY2UsIGZsYWdzLCBwYyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gMDsKIAl9CiAJLyogT25seSBkbyB0aGUgYXRvbWljIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldCAqLwogCWlmICghdGVzdF90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCkpCiAJCXNldF90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCk7CisKIAlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCB0cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlKQpAQCAtMTI3MCw3ICsxMjEwLDcgQEAKIAlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CiAJaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkgewogCQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQkJX190cmFjZV9ncmFwaF9yZXR1cm4odHIsIGRhdGEsIHRyYWNlLCBmbGFncywgcGMpOworCQlfX3RyYWNlX2dyYXBoX3JldHVybih0ciwgdHJhY2UsIGZsYWdzLCBwYyk7CiAJfQogCWlmICghdHJhY2UtPmRlcHRoKQogCQljbGVhcl90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCk7CkBAIC0xMjc5LDMwICsxMjE5LDEyMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KIAotc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0KKworLyoqCisgKiB0cmFjZV92YnByaW50ayAtIHdyaXRlIGJpbmFyeSBtc2cgdG8gdHJhY2luZyBidWZmZXIKKyAqCisgKi8KK2ludCB0cmFjZV92YnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKLQkuZnVuYyA9IGZ1bmN0aW9uX3RyYWNlX2NhbGwsCi19OworCXN0YXRpYyByYXdfc3BpbmxvY2tfdCB0cmFjZV9idWZfbG9jayA9CisJCShyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3RhdGljIHUzMiB0cmFjZV9idWZbVFJBQ0VfQlVGX1NJWkVdOwogCi12b2lkIHRyYWNpbmdfc3RhcnRfZnVuY3Rpb25fdHJhY2Uodm9pZCkKLXsKLQlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCA9IDA7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCXN0cnVjdCBicHJpbnRfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc2NoZWQ7CisJaW50IGNwdSwgbGVuID0gMCwgc2l6ZSwgcGM7CiAKLQlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSRUVNUFRPTkxZKQotCQl0cmFjZV9vcHMuZnVuYyA9IGZ1bmN0aW9uX3RyYWNlX2NhbGxfcHJlZW1wdF9vbmx5OwotCWVsc2UKLQkJdHJhY2Vfb3BzLmZ1bmMgPSBmdW5jdGlvbl90cmFjZV9jYWxsOworCWlmICh1bmxpa2VseSh0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcgfHwgdHJhY2luZ19kaXNhYmxlZCkpCisJCXJldHVybiAwOwogCi0JcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOwotCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkID0gMTsKKwkvKiBEb24ndCBwb2xsdXRlIGdyYXBoIHRyYWNlcyB3aXRoIHRyYWNlX3ZwcmludGsgaW50ZXJuYWxzICovCisJcGF1c2VfZ3JhcGhfdHJhY2luZygpOworCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOworCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZkYXRhLT5kaXNhYmxlZCkpKQorCQlnb3RvIG91dDsKKworCS8qIExvY2tkZXAgdXNlcyB0cmFjZV9wcmludGsgZm9yIGxvY2sgdHJhY2luZyAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX3Jhd19zcGluX2xvY2soJnRyYWNlX2J1Zl9sb2NrKTsKKwlsZW4gPSB2YmluX3ByaW50Zih0cmFjZV9idWYsIFRSQUNFX0JVRl9TSVpFLCBmbXQsIGFyZ3MpOworCisJaWYgKGxlbiA+IFRSQUNFX0JVRl9TSVpFIHx8IGxlbiA8IDApCisJCWdvdG8gb3V0X3VubG9jazsKKworCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIHNpemVvZih1MzIpICogbGVuOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQlBSSU5ULCBzaXplLCBmbGFncywgcGMpOworCWlmICghZXZlbnQpCisJCWdvdG8gb3V0X3VubG9jazsKKwllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5pcAkJCT0gaXA7CisJZW50cnktPmZtdAkJCT0gZm10OworCisJbWVtY3B5KGVudHJ5LT5idWYsIHRyYWNlX2J1Ziwgc2l6ZW9mKHUzMikgKiBsZW4pOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOworCitvdXRfdW5sb2NrOgorCV9fcmF3X3NwaW5fdW5sb2NrKCZ0cmFjZV9idWZfbG9jayk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCitvdXQ6CisJZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOworCXVucGF1c2VfZ3JhcGhfdHJhY2luZygpOworCisJcmV0dXJuIGxlbjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3ZicHJpbnRrKTsKIAotdm9pZCB0cmFjaW5nX3N0b3BfZnVuY3Rpb25fdHJhY2Uodm9pZCkKK2ludCB0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkID0gMDsKLQl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKKwlzdGF0aWMgcmF3X3NwaW5sb2NrX3QgdHJhY2VfYnVmX2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3RhdGljIGNoYXIgdHJhY2VfYnVmW1RSQUNFX0JVRl9TSVpFXTsKKworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwlpbnQgY3B1LCBsZW4gPSAwLCBzaXplLCBwYzsKKwlzdHJ1Y3QgcHJpbnRfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJaWYgKHRyYWNpbmdfZGlzYWJsZWQgfHwgdHJhY2luZ19zZWxmdGVzdF9ydW5uaW5nKQorCQlyZXR1cm4gMDsKKworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlkYXRhID0gdHItPmRhdGFbY3B1XTsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKKwkJZ290byBvdXQ7CisKKwlwYXVzZV9ncmFwaF90cmFjaW5nKCk7CisJcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisJX19yYXdfc3Bpbl9sb2NrKCZ0cmFjZV9idWZfbG9jayk7CisJbGVuID0gdnNucHJpbnRmKHRyYWNlX2J1ZiwgVFJBQ0VfQlVGX1NJWkUsIGZtdCwgYXJncyk7CisKKwlsZW4gPSBtaW4obGVuLCBUUkFDRV9CVUZfU0laRS0xKTsKKwl0cmFjZV9idWZbbGVuXSA9IDA7CisKKwlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyBsZW4gKyAxOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfUFJJTlQsIHNpemUsIGlycV9mbGFncywgcGMpOworCWlmICghZXZlbnQpCisJCWdvdG8gb3V0X3VubG9jazsKKwllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5pcAkJCT0gaXA7CisKKwltZW1jcHkoJmVudHJ5LT5idWYsIHRyYWNlX2J1ZiwgbGVuKTsKKwllbnRyeS0+YnVmW2xlbl0gPSAwOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOworCisgb3V0X3VubG9jazoKKwlfX3Jhd19zcGluX3VubG9jaygmdHJhY2VfYnVmX2xvY2spOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOworCXVucGF1c2VfZ3JhcGhfdHJhY2luZygpOworIG91dDoKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CisKKwlyZXR1cm4gbGVuOwogfQotI2VuZGlmCitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV92cHJpbnRrKTsKIAogZW51bSB0cmFjZV9maWxlX3R5cGUgewogCVRSQUNFX0ZJTEVfTEFUX0ZNVAk9IDEsCkBAIC0xMzQ1LDEwICsxMzc3LDI1IEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSBpdGVyLT50ci0+YnVmZmVyOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LCAqbmV4dCA9IE5VTEw7CisJaW50IGNwdV9maWxlID0gaXRlci0+Y3B1X2ZpbGU7CiAJdTY0IG5leHRfdHMgPSAwLCB0czsKIAlpbnQgbmV4dF9jcHUgPSAtMTsKIAlpbnQgY3B1OwogCisJLyoKKwkgKiBJZiB3ZSBhcmUgaW4gYSBwZXJfY3B1IHRyYWNlIGZpbGUsIGRvbid0IGJvdGhlciBieSBpdGVyYXRpbmcgb3ZlcgorCSAqIGFsbCBjcHUgYW5kIHBlZWsgZGlyZWN0bHkuCisJICovCisJaWYgKGNwdV9maWxlID4gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCWlmIChyaW5nX2J1ZmZlcl9lbXB0eV9jcHUoYnVmZmVyLCBjcHVfZmlsZSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJZW50ID0gcGVla19uZXh0X2VudHJ5KGl0ZXIsIGNwdV9maWxlLCBlbnRfdHMpOworCQlpZiAoZW50X2NwdSkKKwkJCSplbnRfY3B1ID0gY3B1X2ZpbGU7CisKKwkJcmV0dXJuIGVudDsKKwl9CisKIAlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKIAogCQlpZiAocmluZ19idWZmZXJfZW1wdHlfY3B1KGJ1ZmZlciwgY3B1KSkKQEAgLTEzNzYsOCArMTQyMyw4IEBACiB9CiAKIC8qIEZpbmQgdGhlIG5leHQgcmVhbCBlbnRyeSwgd2l0aG91dCB1cGRhdGluZyB0aGUgaXRlcmF0b3IgaXRzZWxmICovCi1zdGF0aWMgc3RydWN0IHRyYWNlX2VudHJ5ICoKLWZpbmRfbmV4dF9lbnRyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCAqZW50X2NwdSwgdTY0ICplbnRfdHMpCitzdHJ1Y3QgdHJhY2VfZW50cnkgKnRyYWNlX2ZpbmRfbmV4dF9lbnRyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgaW50ICplbnRfY3B1LCB1NjQgKmVudF90cykKIHsKIAlyZXR1cm4gX19maW5kX25leHRfZW50cnkoaXRlciwgZW50X2NwdSwgZW50X3RzKTsKIH0KQEAgLTE0MjYsMTkgKzE0NzMsMzIgQEAKIAlyZXR1cm4gZW50OwogfQogCisvKgorICogTm8gbmVjZXNzYXJ5IGxvY2tpbmcgaGVyZS4gVGhlIHdvcnN0IHRoaW5nIHdoaWNoIGNhbgorICogaGFwcGVuIGlzIGxvb3NpbmcgZXZlbnRzIGNvbnN1bWVkIGF0IHRoZSBzYW1lIHRpbWUKKyAqIGJ5IGEgdHJhY2VfcGlwZSByZWFkZXIuCisgKiBPdGhlciB0aGFuIHRoYXQsIHdlIGRvbid0IHJpc2sgdG8gY3Jhc2ggdGhlIHJpbmcgYnVmZmVyCisgKiBiZWNhdXNlIGl0IHNlcmlhbGl6ZXMgdGhlIHJlYWRlcnMuCisgKgorICogVGhlIGN1cnJlbnQgdHJhY2VyIGlzIGNvcGllZCB0byBhdm9pZCBhIGdsb2JhbCBsb2NraW5nCisgKiBhbGwgYXJvdW5kLgorICovCiBzdGF0aWMgdm9pZCAqc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CisJc3RhdGljIHN0cnVjdCB0cmFjZXIgKm9sZF90cmFjZXI7CisJaW50IGNwdV9maWxlID0gaXRlci0+Y3B1X2ZpbGU7CiAJdm9pZCAqcCA9IE5VTEw7CiAJbG9mZl90IGwgPSAwOwogCWludCBjcHU7CiAKKwkvKiBjb3B5IHRoZSB0cmFjZXIgdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgbG9jayBhbGwgYXJvdW5kICovCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci0KLQlpZiAoIWN1cnJlbnRfdHJhY2UgfHwgY3VycmVudF90cmFjZSAhPSBpdGVyLT50cmFjZSkgewotCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAodW5saWtlbHkob2xkX3RyYWNlciAhPSBjdXJyZW50X3RyYWNlICYmIGN1cnJlbnRfdHJhY2UpKSB7CisJCW9sZF90cmFjZXIgPSBjdXJyZW50X3RyYWNlOworCQkqaXRlci0+dHJhY2UgPSAqY3VycmVudF90cmFjZTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAogCWF0b21pY19pbmMoJnRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkKTsKIApAQCAtMTQ0OSw5ICsxNTA5LDEyIEBACiAKIAkJZnRyYWNlX2Rpc2FibGVfY3B1KCk7CiAKLQkJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7Ci0JCQlyaW5nX2J1ZmZlcl9pdGVyX3Jlc2V0KGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pOwotCQl9CisJCWlmIChjcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKKwkJCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkKKwkJCQlyaW5nX2J1ZmZlcl9pdGVyX3Jlc2V0KGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pOworCQl9IGVsc2UKKwkJCXJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQoaXRlci0+YnVmZmVyX2l0ZXJbY3B1X2ZpbGVdKTsKKwogCiAJCWZ0cmFjZV9lbmFibGVfY3B1KCk7CiAKQEAgLTE0NjksMTU1ICsxNTMyLDYgQEAKIHN0YXRpYyB2b2lkIHNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiB7CiAJYXRvbWljX2RlYygmdHJhY2VfcmVjb3JkX2NtZGxpbmVfZGlzYWJsZWQpOwotCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfS1JFVFBST0JFUwotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICprcmV0cHJvYmVkKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgdHJhbXBfbmFtZVtdID0gImtyZXRwcm9iZV90cmFtcG9saW5lIjsKLQlpbnQgc2l6ZSA9IHNpemVvZih0cmFtcF9uYW1lKTsKLQotCWlmIChzdHJuY21wKHRyYW1wX25hbWUsIG5hbWUsIHNpemUpID09IDApCi0JCXJldHVybiAiW3Vua25vd24va3JldHByb2JlJ2RdIjsKLQlyZXR1cm4gbmFtZTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmtyZXRwcm9iZWQoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlyZXR1cm4gbmFtZTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfS1JFVFBST0JFUyAqLwotCi1zdGF0aWMgaW50Ci1zZXFfcHJpbnRfc3ltX3Nob3J0KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07Ci0JY29uc3QgY2hhciAqbmFtZTsKLQotCWthbGxzeW1zX2xvb2t1cChhZGRyZXNzLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwotCi0JbmFtZSA9IGtyZXRwcm9iZWQoc3RyKTsKLQotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsIGZtdCwgbmFtZSk7Ci0jZW5kaWYKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAotc2VxX3ByaW50X3N5bV9vZmZzZXQoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LAotCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKLQljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQlzcHJpbnRfc3ltYm9sKHN0ciwgYWRkcmVzcyk7Ci0JbmFtZSA9IGtyZXRwcm9iZWQoc3RyKTsKLQotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsIGZtdCwgbmFtZSk7Ci0jZW5kaWYKLQlyZXR1cm4gMTsKLX0KLQotI2lmbmRlZiBDT05GSUdfNjRCSVQKLSMgZGVmaW5lIElQX0ZNVCAiJTA4bHgiCi0jZWxzZQotIyBkZWZpbmUgSVBfRk1UICIlMDE2bHgiCi0jZW5kaWYKLQotaW50Ci1zZXFfcHJpbnRfaXBfc3ltKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKQotewotCWludCByZXQ7Ci0KLQlpZiAoIWlwKQotCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiMCIpOwotCi0JaWYgKHN5bV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX09GRlNFVCkKLQkJcmV0ID0gc2VxX3ByaW50X3N5bV9vZmZzZXQocywgIiVzIiwgaXApOwotCWVsc2UKLQkJcmV0ID0gc2VxX3ByaW50X3N5bV9zaG9ydChzLCAiJXMiLCBpcCk7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fQUREUikKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIDwiIElQX0ZNVCAiPiIsIGlwKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzZXFfcHJpbnRfdXNlcl9pcChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdm1zdGFydCA9IDA7Ci0JaW50IHJldCA9IDE7Ci0KLQlpZiAobW0pIHsKLQkJY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0KLQkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQl2bWEgPSBmaW5kX3ZtYShtbSwgaXApOwotCQlpZiAodm1hKSB7Ci0JCQlmaWxlID0gdm1hLT52bV9maWxlOwotCQkJdm1zdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0JCX0KLQkJaWYgKGZpbGUpIHsKLQkJCXJldCA9IHRyYWNlX3NlcV9wYXRoKHMsICZmaWxlLT5mX3BhdGgpOwotCQkJaWYgKHJldCkKLQkJCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbKzB4JWx4XSIsIGlwIC0gdm1zdGFydCk7Ci0JCX0KLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQl9Ci0JaWYgKHJldCAmJiAoKHN5bV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX0FERFIpIHx8ICFmaWxlKSkKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIDwiIElQX0ZNVCAiPiIsIGlwKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1zZXFfcHJpbnRfdXNlcmlwX29ianMoY29uc3Qgc3RydWN0IHVzZXJzdGFja19lbnRyeSAqZW50cnksIHN0cnVjdCB0cmFjZV9zZXEgKnMsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKLQlpbnQgcmV0ID0gMTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX1VTRVJPQkopIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCQkvKgotCQkgKiB3ZSBkbyB0aGUgbG9va3VwIG9uIHRoZSB0aHJlYWQgZ3JvdXAgbGVhZGVyLAotCQkgKiBzaW5jZSBpbmRpdmlkdWFsIHRocmVhZHMgbWlnaHQgaGF2ZSBhbHJlYWR5IHF1aXQhCi0JCSAqLwotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXRhc2sgPSBmaW5kX3Rhc2tfYnlfdnBpZChlbnRyeS0+ZW50LnRnaWQpOwotCQlpZiAodGFzaykKLQkJCW1tID0gZ2V0X3Rhc2tfbW0odGFzayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaXAgPSBlbnRyeS0+Y2FsbGVyW2ldOwotCi0JCWlmIChpcCA9PSBVTE9OR19NQVggfHwgIXJldCkKLQkJCWJyZWFrOwotCQlpZiAoaSAmJiByZXQpCi0JCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiIDwtICIpOwotCQlpZiAoIWlwKSB7Ci0JCQlpZiAocmV0KQotCQkJCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICI/PyIpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFyZXQpCi0JCQlicmVhazsKLQkJaWYgKHJldCkKLQkJCXJldCA9IHNlcV9wcmludF91c2VyX2lwKHMsIG1tLCBpcCwgc3ltX2ZsYWdzKTsKLQl9Ci0KLQlpZiAobW0pCi0JCW1tcHV0KG1tKTsKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9sYXRfaGVscF9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQpAQCAtMTY1OCwxMSArMTU3MiwxMSBAQAogCXRvdGFsID0gZW50cmllcyArCiAJCXJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItPnRyLT5idWZmZXIpOwogCi0Jc2VxX3ByaW50ZihtLCAiJXMgbGF0ZW5jeSB0cmFjZSB2MS4xLjUgb24gJXNcbiIsCisJc2VxX3ByaW50ZihtLCAiIyAlcyBsYXRlbmN5IHRyYWNlIHYxLjEuNSBvbiAlc1xuIiwKIAkJICAgbmFtZSwgVVRTX1JFTEVBU0UpOwotCXNlcV9wdXRzKG0sICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwlzZXFfcHV0cyhtLCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKIAkJICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXNlcV9wcmludGYobSwgIiBsYXRlbmN5OiAlbHUgdXMsICMlbHUvJWx1LCBDUFUjJWQgfCIKKwlzZXFfcHJpbnRmKG0sICIjIGxhdGVuY3k6ICVsdSB1cywgIyVsdS8lbHUsIENQVSMlZCB8IgogCQkgICAiIChNOiVzIFZQOiVkLCBLUDolZCwgU1A6JWQgSFA6JWQiLAogCQkgICBuc2Vjc190b191c2VjcyhkYXRhLT5zYXZlZF9sYXRlbmN5KSwKIAkJICAgZW50cmllcywKQEAgLTE2ODQsMTIxICsxNTk4LDI0IEBACiAjZWxzZQogCXNlcV9wdXRzKG0sICIpXG4iKTsKICNlbmRpZgotCXNlcV9wdXRzKG0sICIgICAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXNlcV9wcmludGYobSwgIiAgICB8IHRhc2s6ICUuMTZzLSVkICIKKwlzZXFfcHV0cyhtLCAiIyAgICAtLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJc2VxX3ByaW50ZihtLCAiIyAgICB8IHRhc2s6ICUuMTZzLSVkICIKIAkJICAgIih1aWQ6JWQgbmljZTolbGQgcG9saWN5OiVsZCBydF9wcmlvOiVsZClcbiIsCiAJCSAgIGRhdGEtPmNvbW0sIGRhdGEtPnBpZCwgZGF0YS0+dWlkLCBkYXRhLT5uaWNlLAogCQkgICBkYXRhLT5wb2xpY3ksIGRhdGEtPnJ0X3ByaW9yaXR5KTsKLQlzZXFfcHV0cyhtLCAiICAgIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlzZXFfcHV0cyhtLCAiIyAgICAtLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKIAlpZiAoZGF0YS0+Y3JpdGljYWxfc3RhcnQpIHsKLQkJc2VxX3B1dHMobSwgIiA9PiBzdGFydGVkIGF0OiAiKTsKKwkJc2VxX3B1dHMobSwgIiMgID0+IHN0YXJ0ZWQgYXQ6ICIpOwogCQlzZXFfcHJpbnRfaXBfc3ltKCZpdGVyLT5zZXEsIGRhdGEtPmNyaXRpY2FsX3N0YXJ0LCBzeW1fZmxhZ3MpOwogCQl0cmFjZV9wcmludF9zZXEobSwgJml0ZXItPnNlcSk7Ci0JCXNlcV9wdXRzKG0sICJcbiA9PiBlbmRlZCBhdDogICAiKTsKKwkJc2VxX3B1dHMobSwgIlxuIyAgPT4gZW5kZWQgYXQ6ICAgIik7CiAJCXNlcV9wcmludF9pcF9zeW0oJml0ZXItPnNlcSwgZGF0YS0+Y3JpdGljYWxfZW5kLCBzeW1fZmxhZ3MpOwogCQl0cmFjZV9wcmludF9zZXEobSwgJml0ZXItPnNlcSk7Ci0JCXNlcV9wdXRzKG0sICJcbiIpOworCQlzZXFfcHV0cyhtLCAiI1xuIik7CiAJfQogCi0Jc2VxX3B1dHMobSwgIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sYXRfcHJpbnRfZ2VuZXJpYyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5LCBpbnQgY3B1KQotewotCWludCBoYXJkaXJxLCBzb2Z0aXJxOwotCWNoYXIgKmNvbW07Ci0KLQljb21tID0gdHJhY2VfZmluZF9jbWRsaW5lKGVudHJ5LT5waWQpOwotCi0JdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTguOHMtJS01ZCAiLCBjb21tLCBlbnRyeS0+cGlkKTsKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlM2QiLCBjcHUpOwotCXRyYWNlX3NlcV9wcmludGYocywgIiVjJWMiLAotCQkJKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSVJRU19PRkYpID8gJ2QnIDoKLQkJCSAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19JUlFTX05PU1VQUE9SVCkgPyAnWCcgOiAnLicsCi0JCQkoKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfTkVFRF9SRVNDSEVEKSA/ICdOJyA6ICcuJykpOwotCi0JaGFyZGlycSA9IGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSEFSRElSUTsKLQlzb2Z0aXJxID0gZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19TT0ZUSVJROwotCWlmIChoYXJkaXJxICYmIHNvZnRpcnEpIHsKLQkJdHJhY2Vfc2VxX3B1dGMocywgJ0gnKTsKLQl9IGVsc2UgewotCQlpZiAoaGFyZGlycSkgewotCQkJdHJhY2Vfc2VxX3B1dGMocywgJ2gnKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChzb2Z0aXJxKQotCQkJCXRyYWNlX3NlcV9wdXRjKHMsICdzJyk7Ci0JCQllbHNlCi0JCQkJdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKLQkJfQotCX0KLQotCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXgiLCBlbnRyeS0+cHJlZW1wdF9jb3VudCk7Ci0JZWxzZQotCQl0cmFjZV9zZXFfcHV0cyhzLCAiLiIpOwotfQotCi11bnNpZ25lZCBsb25nIHByZWVtcHRfbWFya190aHJlc2ggPSAxMDA7Ci0KLXN0YXRpYyB2b2lkCi1sYXRfcHJpbnRfdGltZXN0YW1wKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHU2NCBhYnNfdXNlY3MsCi0JCSAgICB1bnNpZ25lZCBsb25nIHJlbF91c2VjcykKLXsKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgJTRsbGR1cyIsIGFic191c2Vjcyk7Ci0JaWYgKHJlbF91c2VjcyA+IHByZWVtcHRfbWFya190aHJlc2gpCi0JCXRyYWNlX3NlcV9wdXRzKHMsICIhOiAiKTsKLQllbHNlIGlmIChyZWxfdXNlY3MgPiAxKQotCQl0cmFjZV9zZXFfcHV0cyhzLCAiKzogIik7Ci0JZWxzZQotCQl0cmFjZV9zZXFfcHV0cyhzLCAiIDogIik7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHN0YXRlX3RvX2NoYXJbXSA9IFRBU0tfU1RBVEVfVE9fQ0hBUl9TVFI7Ci0KLXN0YXRpYyBpbnQgdGFza19zdGF0ZV9jaGFyKHVuc2lnbmVkIGxvbmcgc3RhdGUpCi17Ci0JaW50IGJpdCA9IHN0YXRlID8gX19mZnMoc3RhdGUpICsgMSA6IDA7Ci0KLQlyZXR1cm4gYml0IDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpIC0gMSA/IHN0YXRlX3RvX2NoYXJbYml0XSA6ICc/JzsKLX0KLQotLyoKLSAqIFRoZSBtZXNzYWdlIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gYW4gZW5kaW5nIG5ld2xpbmUuCi0gKiBJZiB0aGUgcHJpbnRpbmcgc3RvcHMgcHJlbWF0dXJlbHksIHRyeSB0byBhZGQgYSBuZXdsaW5lIG9mIG91ciBvd24uCi0gKi8KLXZvaWQgdHJhY2Vfc2VxX3ByaW50X2NvbnQoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwotCXN0cnVjdCB0cmFjZV9maWVsZF9jb250ICpjb250OwotCWJvb2wgb2sgPSB0cnVlOwotCi0JZW50ID0gcGVla19uZXh0X2VudHJ5KGl0ZXIsIGl0ZXItPmNwdSwgTlVMTCk7Ci0JaWYgKCFlbnQgfHwgZW50LT50eXBlICE9IFRSQUNFX0NPTlQpIHsKLQkJdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkbyB7Ci0JCWNvbnQgPSAoc3RydWN0IHRyYWNlX2ZpZWxkX2NvbnQgKillbnQ7Ci0JCWlmIChvaykKLQkJCW9rID0gKHRyYWNlX3NlcV9wcmludGYocywgIiVzIiwgY29udC0+YnVmKSA+IDApOwotCi0JCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOwotCi0JCWlmIChpdGVyLT5idWZmZXJfaXRlcltpdGVyLT5jcHVdKQotCQkJcmluZ19idWZmZXJfcmVhZChpdGVyLT5idWZmZXJfaXRlcltpdGVyLT5jcHVdLCBOVUxMKTsKLQkJZWxzZQotCQkJcmluZ19idWZmZXJfY29uc3VtZShpdGVyLT50ci0+YnVmZmVyLCBpdGVyLT5jcHUsIE5VTEwpOwotCi0JCWZ0cmFjZV9lbmFibGVfY3B1KCk7Ci0KLQkJZW50ID0gcGVla19uZXh0X2VudHJ5KGl0ZXIsIGl0ZXItPmNwdSwgTlVMTCk7Ci0JfSB3aGlsZSAoZW50ICYmIGVudC0+dHlwZSA9PSBUUkFDRV9DT05UKTsKLQotCWlmICghb2spCi0JCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOworCXNlcV9wdXRzKG0sICIjXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdF9jcHVfYnVmZl9zdGFydChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCkBAIC0xODE4LDUzMyArMTYzNSwxMjggQEAKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICIjIyMjIyBDUFUgJXUgYnVmZmVyIHN0YXJ0ZWQgIyMjI1xuIiwgaXRlci0+Y3B1KTsKIH0KIAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1wcmludF9sYXRfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdW5zaWduZWQgaW50IHRyYWNlX2lkeCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQl1bnNpZ25lZCBsb25nIHN5bV9mbGFncyA9ICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX01BU0spOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqbmV4dF9lbnRyeTsKLQl1bnNpZ25lZCBsb25nIHZlcmJvc2UgPSAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1ZFUkJPU0UpOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7Ci0JdW5zaWduZWQgbG9uZyBhYnNfdXNlY3M7Ci0JdW5zaWduZWQgbG9uZyByZWxfdXNlY3M7Ci0JdTY0IG5leHRfdHM7Ci0JY2hhciAqY29tbTsKLQlpbnQgUywgVDsKLQlpbnQgaTsKLQotCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9DT05UKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCi0JdGVzdF9jcHVfYnVmZl9zdGFydChpdGVyKTsKLQotCW5leHRfZW50cnkgPSBmaW5kX25leHRfZW50cnkoaXRlciwgTlVMTCwgJm5leHRfdHMpOwotCWlmICghbmV4dF9lbnRyeSkKLQkJbmV4dF90cyA9IGl0ZXItPnRzOwotCXJlbF91c2VjcyA9IG5zMnVzZWNzKG5leHRfdHMgLSBpdGVyLT50cyk7Ci0JYWJzX3VzZWNzID0gbnMydXNlY3MoaXRlci0+dHMgLSBpdGVyLT50ci0+dGltZV9zdGFydCk7Ci0KLQlpZiAodmVyYm9zZSkgewotCQljb21tID0gdHJhY2VfZmluZF9jbWRsaW5lKGVudHJ5LT5waWQpOwotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlMTZzICU1ZCAlM2QgJWQgJTA4eCAlMDh4IFslMDhseF0iCi0JCQkJICIgJWxkLiUwM2xkbXMgKCslbGQuJTAzbGRtcyk6ICIsCi0JCQkJIGNvbW0sCi0JCQkJIGVudHJ5LT5waWQsIGNwdSwgZW50cnktPmZsYWdzLAotCQkJCSBlbnRyeS0+cHJlZW1wdF9jb3VudCwgdHJhY2VfaWR4LAotCQkJCSBuczJ1c2VjcyhpdGVyLT50cyksCi0JCQkJIGFic191c2Vjcy8xMDAwLAotCQkJCSBhYnNfdXNlY3MgJSAxMDAwLCByZWxfdXNlY3MvMTAwMCwKLQkJCQkgcmVsX3VzZWNzICUgMTAwMCk7Ci0JfSBlbHNlIHsKLQkJbGF0X3ByaW50X2dlbmVyaWMocywgZW50cnksIGNwdSk7Ci0JCWxhdF9wcmludF90aW1lc3RhbXAocywgYWJzX3VzZWNzLCByZWxfdXNlY3MpOwotCX0KLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBUUkFDRV9GTjogewotCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBzeW1fZmxhZ3MpOwotCQl0cmFjZV9zZXFfcHV0cyhzLCAiICgiKTsKLQkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+cGFyZW50X2lwLCBzeW1fZmxhZ3MpOwotCQl0cmFjZV9zZXFfcHV0cyhzLCAiKVxuIik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX0NUWDoKLQljYXNlIFRSQUNFX1dBS0U6IHsKLQkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7Ci0JCVMgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOwotCQljb21tID0gdHJhY2VfZmluZF9jbWRsaW5lKGZpZWxkLT5uZXh0X3BpZCk7Ci0JCXRyYWNlX3NlcV9wcmludGYocywgIiAlNWQ6JTNkOiVjICVzIFslMDNkXSAlNWQ6JTNkOiVjICVzXG4iLAotCQkJCSBmaWVsZC0+cHJldl9waWQsCi0JCQkJIGZpZWxkLT5wcmV2X3ByaW8sCi0JCQkJIFMsIGVudHJ5LT50eXBlID09IFRSQUNFX0NUWCA/ICI9PT4iIDogIiAgKyIsCi0JCQkJIGZpZWxkLT5uZXh0X2NwdSwKLQkJCQkgZmllbGQtPm5leHRfcGlkLAotCQkJCSBmaWVsZC0+bmV4dF9wcmlvLAotCQkJCSBULCBjb21tKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfU1BFQ0lBTDogewotCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVsZCAlbGQgJWxkXG4iLAotCQkJCSBmaWVsZC0+YXJnMSwKLQkJCQkgZmllbGQtPmFyZzIsCi0JCQkJIGZpZWxkLT5hcmczKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKLQkJc3RydWN0IHN0YWNrX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsgaSsrKSB7Ci0JCQlpZiAoaSkKLQkJCQl0cmFjZV9zZXFfcHV0cyhzLCAiIDw9ICIpOwotCQkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+Y2FsbGVyW2ldLCBzeW1fZmxhZ3MpOwotCQl9Ci0JCXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9QUklOVDogewotCQlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIHN5bV9mbGFncyk7Ci0JCXRyYWNlX3NlcV9wcmludGYocywgIjogJXMiLCBmaWVsZC0+YnVmKTsKLQkJaWYgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfQ09OVCkKLQkJCXRyYWNlX3NlcV9wcmludF9jb250KHMsIGl0ZXIpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9CUkFOQ0g6IHsKLQkJc3RydWN0IHRyYWNlX2JyYW5jaCAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdICVzOiVzOiVkXG4iLAotCQkJCSBmaWVsZC0+Y29ycmVjdCA/ICIgIG9rICAiIDogIiBNSVNTICIsCi0JCQkJIGZpZWxkLT5mdW5jLAotCQkJCSBmaWVsZC0+ZmlsZSwKLQkJCQkgZmllbGQtPmxpbmUpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9VU0VSX1NUQUNLOiB7Ci0JCXN0cnVjdCB1c2Vyc3RhY2tfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJc2VxX3ByaW50X3VzZXJpcF9vYmpzKGZpZWxkLCBzLCBzeW1fZmxhZ3MpOwotCQl0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXRyYWNlX3NlcV9wcmludGYocywgIlVua25vd24gdHlwZSAlZFxuIiwgZW50cnktPnR5cGUpOwotCX0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotfQotCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfdHJhY2VfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAl1bnNpZ25lZCBsb25nIHN5bV9mbGFncyA9ICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX01BU0spOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyB1c2VjX3JlbTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdDsKLQl1bnNpZ25lZCBsb25nIHNlY3M7Ci0JY2hhciAqY29tbTsKLQlpbnQgcmV0OwotCWludCBTLCBUOwotCWludCBpOworCXN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQ7CiAKIAllbnRyeSA9IGl0ZXItPmVudDsKIAotCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9DT05UKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCiAJdGVzdF9jcHVfYnVmZl9zdGFydChpdGVyKTsKIAotCWNvbW0gPSB0cmFjZV9maW5kX2NtZGxpbmUoaXRlci0+ZW50LT5waWQpOworCWV2ZW50ID0gZnRyYWNlX2ZpbmRfZXZlbnQoZW50cnktPnR5cGUpOwogCi0JdCA9IG5zMnVzZWNzKGl0ZXItPnRzKTsKLQl1c2VjX3JlbSA9IGRvX2Rpdih0LCAxMDAwMDAwVUxMKTsKLQlzZWNzID0gKHVuc2lnbmVkIGxvbmcpdDsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiUxNnMtJS01ZCAiLCBjb21tLCBlbnRyeS0+cGlkKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlslMDNkXSAiLCBpdGVyLT5jcHUpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTVsdS4lMDZsdTogIiwgc2VjcywgdXNlY19yZW0pOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBUUkFDRV9GTjogewotCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBzeW1fZmxhZ3MpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJaWYgKChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5UX1BBUkVOVCkgJiYKLQkJCQkJCWZpZWxkLT5wYXJlbnRfaXApIHsKLQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiA8LSIpOwotCQkJaWYgKCFyZXQpCi0JCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQkJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLAotCQkJCQkgICAgICAgZmllbGQtPnBhcmVudF9pcCwKLQkJCQkJICAgICAgIHN5bV9mbGFncyk7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8pIHsKKwkJaWYgKGl0ZXItPml0ZXJfZmxhZ3MgJiBUUkFDRV9GSUxFX0xBVF9GTVQpIHsKKwkJCWlmICghdHJhY2VfcHJpbnRfbGF0X2NvbnRleHQoaXRlcikpCisJCQkJZ290byBwYXJ0aWFsOworCQl9IGVsc2UgeworCQkJaWYgKCF0cmFjZV9wcmludF9jb250ZXh0KGl0ZXIpKQorCQkJCWdvdG8gcGFydGlhbDsKIAkJfQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJYnJlYWs7CiAJfQotCWNhc2UgVFJBQ0VfQ1RYOgotCWNhc2UgVFJBQ0VfV0FLRTogewotCQlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7CiAKLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKwlpZiAoZXZlbnQpCisJCXJldHVybiBldmVudC0+dHJhY2UoaXRlciwgc3ltX2ZsYWdzKTsKIAotCQlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKLQkJUyA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAlNWQ6JTNkOiVjICVzIFslMDNkXSAlNWQ6JTNkOiVjXG4iLAotCQkJCSAgICAgICBmaWVsZC0+cHJldl9waWQsCi0JCQkJICAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCi0JCQkJICAgICAgIFMsCi0JCQkJICAgICAgIGVudHJ5LT50eXBlID09IFRSQUNFX0NUWCA/ICI9PT4iIDogIiAgKyIsCi0JCQkJICAgICAgIGZpZWxkLT5uZXh0X2NwdSwKLQkJCQkgICAgICAgZmllbGQtPm5leHRfcGlkLAotCQkJCSAgICAgICBmaWVsZC0+bmV4dF9wcmlvLAotCQkJCSAgICAgICBUKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1NQRUNJQUw6IHsKLQkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiVW5rbm93biB0eXBlICVkXG4iLCBlbnRyeS0+dHlwZSkpCisJCWdvdG8gcGFydGlhbDsKIAotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiMgJWxkICVsZCAlbGRcbiIsCi0JCQkJIGZpZWxkLT5hcmcxLAotCQkJCSBmaWVsZC0+YXJnMiwKLQkJCQkgZmllbGQtPmFyZzMpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKLQkJc3RydWN0IHN0YWNrX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsgaSsrKSB7Ci0JCQlpZiAoaSkgewotCQkJCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICIgPD0gIik7Ci0JCQkJaWYgKCFyZXQpCi0JCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJCX0KLQkJCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmNhbGxlcltpXSwKLQkJCQkJICAgICAgIHN5bV9mbGFncyk7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCX0KLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9QUklOVDogewotCQlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIHN5bV9mbGFncyk7Ci0JCXRyYWNlX3NlcV9wcmludGYocywgIjogJXMiLCBmaWVsZC0+YnVmKTsKLQkJaWYgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfQ09OVCkKLQkJCXRyYWNlX3NlcV9wcmludF9jb250KHMsIGl0ZXIpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9HUkFQSF9SRVQ6IHsKLQkJcmV0dXJuIHByaW50X2dyYXBoX2Z1bmN0aW9uKGl0ZXIpOwotCX0KLQljYXNlIFRSQUNFX0dSQVBIX0VOVDogewotCQlyZXR1cm4gcHJpbnRfZ3JhcGhfZnVuY3Rpb24oaXRlcik7Ci0JfQotCWNhc2UgVFJBQ0VfQlJBTkNIOiB7Ci0JCXN0cnVjdCB0cmFjZV9icmFuY2ggKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyVzXSAlczolczolZFxuIiwKLQkJCQkgZmllbGQtPmNvcnJlY3QgPyAiICBvayAgIiA6ICIgTUlTUyAiLAotCQkJCSBmaWVsZC0+ZnVuYywKLQkJCQkgZmllbGQtPmZpbGUsCi0JCQkJIGZpZWxkLT5saW5lKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfVVNFUl9TVEFDSzogewotCQlzdHJ1Y3QgdXNlcnN0YWNrX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXJldCA9IHNlcV9wcmludF91c2VyaXBfb2JqcyhmaWVsZCwgcywgc3ltX2ZsYWdzKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCXJldCA9IHRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJYnJlYWs7Ci0JfQotCX0KIAlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9yYXdfZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwotCWludCByZXQ7Ci0JaW50IFMsIFQ7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKIAogCWVudHJ5ID0gaXRlci0+ZW50OwogCi0JaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX0NPTlQpCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCAlZCAlbGx1ICIsCi0JCWVudHJ5LT5waWQsIGl0ZXItPmNwdSwgaXRlci0+dHMpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBUUkFDRV9GTjogewotCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiV4ICV4XG4iLAotCQkJCQlmaWVsZC0+aXAsCi0JCQkJCWZpZWxkLT5wYXJlbnRfaXApOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJYnJlYWs7CisJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8pIHsKKwkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCAlZCAlbGx1ICIsCisJCQkJICAgICAgZW50cnktPnBpZCwgaXRlci0+Y3B1LCBpdGVyLT50cykpCisJCQlnb3RvIHBhcnRpYWw7CiAJfQotCWNhc2UgVFJBQ0VfQ1RYOgotCWNhc2UgVFJBQ0VfV0FLRTogewotCQlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7CiAKLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKKwlldmVudCA9IGZ0cmFjZV9maW5kX2V2ZW50KGVudHJ5LT50eXBlKTsKKwlpZiAoZXZlbnQpCisJCXJldHVybiBldmVudC0+cmF3KGl0ZXIsIDApOwogCi0JCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOwotCQlTID0gZW50cnktPnR5cGUgPT0gVFJBQ0VfV0FLRSA/ICcrJyA6Ci0JCQl0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOwotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCAlZCAlYyAlZCAlZCAlZCAlY1xuIiwKLQkJCQkgICAgICAgZmllbGQtPnByZXZfcGlkLAotCQkJCSAgICAgICBmaWVsZC0+cHJldl9wcmlvLAotCQkJCSAgICAgICBTLAotCQkJCSAgICAgICBmaWVsZC0+bmV4dF9jcHUsCi0JCQkJICAgICAgIGZpZWxkLT5uZXh0X3BpZCwKLQkJCQkgICAgICAgZmllbGQtPm5leHRfcHJpbywKLQkJCQkgICAgICAgVCk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9TUEVDSUFMOgotCWNhc2UgVFJBQ0VfVVNFUl9TVEFDSzoKLQljYXNlIFRSQUNFX1NUQUNLOiB7Ci0JCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiVkID9cbiIsIGVudHJ5LT50eXBlKSkKKwkJZ290byBwYXJ0aWFsOwogCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIyAlbGQgJWxkICVsZFxuIiwKLQkJCQkgZmllbGQtPmFyZzEsCi0JCQkJIGZpZWxkLT5hcmcyLAotCQkJCSBmaWVsZC0+YXJnMyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9QUklOVDogewotCQlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiIyAlbHggJXMiLCBmaWVsZC0+aXAsIGZpZWxkLT5idWYpOwotCQlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQotCQkJdHJhY2Vfc2VxX3ByaW50X2NvbnQocywgaXRlcik7Ci0JCWJyZWFrOwotCX0KLQl9CiAJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK3BhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogfQogCi0jZGVmaW5lIFNFUV9QVVRfRklFTERfUkVUKHMsIHgpCQkJCVwKLWRvIHsJCQkJCQkJXAotCWlmICghdHJhY2Vfc2VxX3B1dG1lbShzLCAmKHgpLCBzaXplb2YoeCkpKQlcCi0JCXJldHVybiAwOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCB4KQkJCVwKLWRvIHsJCQkJCQkJXAotCUJVSUxEX0JVR19PTihzaXplb2YoeCkgPiBNQVhfTUVNSEVYX0JZVEVTKTsJXAotCWlmICghdHJhY2Vfc2VxX3B1dG1lbV9oZXgocywgJih4KSwgc2l6ZW9mKHgpKSkJXAotCQlyZXR1cm4gMDsJCQkJXAotfSB3aGlsZSAoMCkKLQogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHByaW50X2hleF9mbXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCXVuc2lnbmVkIGNoYXIgbmV3bGluZSA9ICdcbic7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKLQlpbnQgUywgVDsKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OwogCiAJZW50cnkgPSBpdGVyLT5lbnQ7CiAKLQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLQotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+cGlkKTsKLQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgaXRlci0+Y3B1KTsKLQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgaXRlci0+dHMpOwotCi0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46IHsKLQkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmlwKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOwotCQlicmVhazsKKwlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTykgeworCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZW50cnktPnBpZCk7CisJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBpdGVyLT5jcHUpOworCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgaXRlci0+dHMpOwogCX0KLQljYXNlIFRSQUNFX0NUWDoKLQljYXNlIFRSQUNFX1dBS0U6IHsKLQkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOwogCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7Ci0JCVMgPSBlbnRyeS0+dHlwZSA9PSBUUkFDRV9XQUtFID8gJysnIDoKLQkJCXRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9waWQpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcHJpbyk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBTKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X2NwdSk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9waWQpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBUKTsKLQkJYnJlYWs7CisJZXZlbnQgPSBmdHJhY2VfZmluZF9ldmVudChlbnRyeS0+dHlwZSk7CisJaWYgKGV2ZW50KSB7CisJCWVudW0gcHJpbnRfbGluZV90IHJldCA9IGV2ZW50LT5oZXgoaXRlciwgMCk7CisJCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9IQU5ETEVEKQorCQkJcmV0dXJuIHJldDsKIAl9Ci0JY2FzZSBUUkFDRV9TUEVDSUFMOgotCWNhc2UgVFJBQ0VfVVNFUl9TVEFDSzoKLQljYXNlIFRSQUNFX1NUQUNLOiB7Ci0JCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKIAotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMSk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMik7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMyk7Ci0JCWJyZWFrOwotCX0KLQl9CiAJU0VRX1BVVF9GSUVMRF9SRVQocywgbmV3bGluZSk7CiAKIAlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfcHJpbnRrX21zZ19vbmx5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwotCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7Ci0JaW50IHJldDsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsIGZpZWxkLT5idWYpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQotCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9iaW5fZm10KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQ7CiAKIAllbnRyeSA9IGl0ZXItPmVudDsKIAotCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9DT05UKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCi0JU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPnBpZCk7Ci0JU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPmNwdSk7Ci0JU0VRX1BVVF9GSUVMRF9SRVQocywgaXRlci0+dHMpOwotCi0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfRk46IHsKLQkJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+aXApOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cGFyZW50X2lwKTsKLQkJYnJlYWs7CisJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8pIHsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgZW50cnktPnBpZCk7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGl0ZXItPmNwdSk7CisJCVNFUV9QVVRfRklFTERfUkVUKHMsIGl0ZXItPnRzKTsKIAl9Ci0JY2FzZSBUUkFDRV9DVFg6IHsKLQkJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOwogCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcGlkKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcHJpbyk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3N0YXRlKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcGlkKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3N0YXRlKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfU1BFQ0lBTDoKLQljYXNlIFRSQUNFX1VTRVJfU1RBQ0s6Ci0JY2FzZSBUUkFDRV9TVEFDSzogewotCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMSk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcyKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzMpOwotCQlicmVhazsKLQl9Ci0JfQotCXJldHVybiAxOworCWV2ZW50ID0gZnRyYWNlX2ZpbmRfZXZlbnQoZW50cnktPnR5cGUpOworCXJldHVybiBldmVudCA/IGV2ZW50LT5iaW5hcnkoaXRlciwgMCkgOiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpbnQgdHJhY2VfZW1wdHkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCWludCBjcHU7CiAKKwkvKiBJZiB3ZSBhcmUgbG9va2luZyBhdCBvbmUgQ1BVIGJ1ZmZlciwgb25seSBjaGVjayB0aGF0IG9uZSAqLworCWlmIChpdGVyLT5jcHVfZmlsZSAhPSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKKwkJY3B1ID0gaXRlci0+Y3B1X2ZpbGU7CisJCWlmIChpdGVyLT5idWZmZXJfaXRlcltjcHVdKSB7CisJCQlpZiAoIXJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAoIXJpbmdfYnVmZmVyX2VtcHR5X2NwdShpdGVyLT50ci0+YnVmZmVyLCBjcHUpKQorCQkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAxOworCX0KKwogCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewogCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkgewogCQkJaWYgKCFyaW5nX2J1ZmZlcl9pdGVyX2VtcHR5KGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pKQpAQCAtMjM2OCwxMCArMTc4MCwxNSBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKKwlpZiAoaXRlci0+ZW50LT50eXBlID09IFRSQUNFX0JQUklOVCAmJgorCQkJdHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5USyAmJgorCQkJdHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5US19NU0dPTkxZKQorCQlyZXR1cm4gdHJhY2VfcHJpbnRfYnByaW50a19tc2dfb25seShpdGVyKTsKKwogCWlmIChpdGVyLT5lbnQtPnR5cGUgPT0gVFJBQ0VfUFJJTlQgJiYKIAkJCXRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEsgJiYKIAkJCXRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEtfTVNHT05MWSkKLQkJcmV0dXJuIHByaW50X3ByaW50a19tc2dfb25seShpdGVyKTsKKwkJcmV0dXJuIHRyYWNlX3ByaW50X3ByaW50a19tc2dfb25seShpdGVyKTsKIAogCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQklOKQogCQlyZXR1cm4gcHJpbnRfYmluX2ZtdChpdGVyKTsKQEAgLTIzODIsOSArMTc5OSw2IEBACiAJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9SQVcpCiAJCXJldHVybiBwcmludF9yYXdfZm10KGl0ZXIpOwogCi0JaWYgKGl0ZXItPml0ZXJfZmxhZ3MgJiBUUkFDRV9GSUxFX0xBVF9GTVQpCi0JCXJldHVybiBwcmludF9sYXRfZm10KGl0ZXIsIGl0ZXItPmlkeCwgaXRlci0+Y3B1KTsKLQogCXJldHVybiBwcmludF90cmFjZV9mbXQoaXRlcik7CiB9CiAKQEAgLTI0MjYsMzAgKzE4NDAsNDAgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKgotX190cmFjaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqcmV0KQorX190cmFjaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJbG9uZyBjcHVfZmlsZSA9IChsb25nKSBpbm9kZS0+aV9wcml2YXRlOworCXZvaWQgKmZhaWxfcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKIAlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXI7CiAJc3RydWN0IHNlcV9maWxlICptOwotCWludCBjcHU7CisJaW50IGNwdSwgcmV0OwogCi0JaWYgKHRyYWNpbmdfZGlzYWJsZWQpIHsKLQkJKnJldCA9IC1FTk9ERVY7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAodHJhY2luZ19kaXNhYmxlZCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAKIAlpdGVyID0ga3phbGxvYyhzaXplb2YoKml0ZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWl0ZXIpIHsKLQkJKnJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoIWl0ZXIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCisJLyoKKwkgKiBXZSBtYWtlIGEgY29weSBvZiB0aGUgY3VycmVudCB0cmFjZXIgdG8gYXZvaWQgY29uY3VycmVudAorCSAqIGNoYW5nZXMgb24gaXQgd2hpbGUgd2UgYXJlIHJlYWRpbmcuCisJICovCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJaXRlci0+dHJhY2UgPSBremFsbG9jKHNpemVvZigqaXRlci0+dHJhY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWl0ZXItPnRyYWNlKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoY3VycmVudF90cmFjZSkKKwkJKml0ZXItPnRyYWNlID0gKmN1cnJlbnRfdHJhY2U7CisKIAlpZiAoY3VycmVudF90cmFjZSAmJiBjdXJyZW50X3RyYWNlLT5wcmludF9tYXgpCiAJCWl0ZXItPnRyID0gJm1heF90cjsKIAllbHNlCi0JCWl0ZXItPnRyID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQlpdGVyLT50cmFjZSA9IGN1cnJlbnRfdHJhY2U7CisJCWl0ZXItPnRyID0gJmdsb2JhbF90cmFjZTsKIAlpdGVyLT5wb3MgPSAtMTsKKwltdXRleF9pbml0KCZpdGVyLT5tdXRleCk7CisJaXRlci0+Y3B1X2ZpbGUgPSBjcHVfZmlsZTsKIAogCS8qIE5vdGlmeSB0aGUgdHJhY2VyIGVhcmx5OyBiZWZvcmUgd2Ugc3RvcCB0cmFjaW5nLiAqLwogCWlmIChpdGVyLT50cmFjZSAmJiBpdGVyLT50cmFjZS0+b3BlbikKQEAgLTI0NTksMjAgKzE4ODMsMjQgQEAKIAlpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci0+dHItPmJ1ZmZlcikpCiAJCWl0ZXItPml0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9BTk5PVEFURTsKIAorCWlmIChpdGVyLT5jcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKKwkJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CiAKLQlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKLQorCQkJaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSA9CisJCQkJcmluZ19idWZmZXJfcmVhZF9zdGFydChpdGVyLT50ci0+YnVmZmVyLCBjcHUpOworCQl9CisJfSBlbHNlIHsKKwkJY3B1ID0gaXRlci0+Y3B1X2ZpbGU7CiAJCWl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0gPQotCQkJcmluZ19idWZmZXJfcmVhZF9zdGFydChpdGVyLT50ci0+YnVmZmVyLCBjcHUpOwotCi0JCWlmICghaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkKLQkJCWdvdG8gZmFpbF9idWZmZXI7CisJCQkJcmluZ19idWZmZXJfcmVhZF9zdGFydChpdGVyLT50ci0+YnVmZmVyLCBjcHUpOwogCX0KIAogCS8qIFRPRE8gc3RvcCB0cmFjZXIgKi8KLQkqcmV0ID0gc2VxX29wZW4oZmlsZSwgJnRyYWNlcl9zZXFfb3BzKTsKLQlpZiAoKnJldCkKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmdHJhY2VyX3NlcV9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCWZhaWxfcmV0ID0gRVJSX1BUUihyZXQpOwogCQlnb3RvIGZhaWxfYnVmZmVyOworCX0KIAogCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJbS0+cHJpdmF0ZSA9IGl0ZXI7CkBAIC0yNDgyLDcgKzE5MTAsNiBAQAogCiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotIG91dDoKIAlyZXR1cm4gaXRlcjsKIAogIGZhaWxfYnVmZmVyOgpAQCAtMjQ5MCwxMCArMTkxNywxMiBAQAogCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkKIAkJCXJpbmdfYnVmZmVyX3JlYWRfZmluaXNoKGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pOwogCX0KKyBmYWlsOgogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJa2ZyZWUoaXRlci0+dHJhY2UpOwogCWtmcmVlKGl0ZXIpOwogCi0JcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJcmV0dXJuIGZhaWxfcmV0OwogfQogCiBpbnQgdHJhY2luZ19vcGVuX2dlbmVyaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCkBAIC0yNTA1LDEyICsxOTM0LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB0cmFjaW5nX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHRyYWNpbmdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CisJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyOwogCWludCBjcHU7CiAKKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKKwkJcmV0dXJuIDA7CisKKwlpdGVyID0gbS0+cHJpdmF0ZTsKKwogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewogCQlpZiAoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkKQEAgLTI1MjUsMzMgKzE5NTksMzggQEAKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCiAJc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOworCW11dGV4X2Rlc3Ryb3koJml0ZXItPm11dGV4KTsKKwlrZnJlZShpdGVyLT50cmFjZSk7CiAJa2ZyZWUoaXRlcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHJhY2luZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXQ7Ci0KLQlfX3RyYWNpbmdfb3Blbihpbm9kZSwgZmlsZSwgJnJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHRyYWNpbmdfbHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKIAlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXI7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAotCWl0ZXIgPSBfX3RyYWNpbmdfb3Blbihpbm9kZSwgZmlsZSwgJnJldCk7CisJLyogSWYgdGhpcyBmaWxlIHdhcyBvcGVuIGZvciB3cml0ZSwgdGhlbiBlcmFzZSBjb250ZW50cyAqLworCWlmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmCisJICAgICEoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSkgeworCQlsb25nIGNwdSA9IChsb25nKSBpbm9kZS0+aV9wcml2YXRlOwogCi0JaWYgKCFyZXQpCi0JCWl0ZXItPml0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9MQVRfRk1UOworCQlpZiAoY3B1ID09IFRSQUNFX1BJUEVfQUxMX0NQVSkKKwkJCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoJmdsb2JhbF90cmFjZSk7CisJCWVsc2UKKwkJCXRyYWNpbmdfcmVzZXQoJmdsb2JhbF90cmFjZSwgY3B1KTsKKwl9CiAKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgeworCQlpdGVyID0gX190cmFjaW5nX29wZW4oaW5vZGUsIGZpbGUpOworCQlpZiAoSVNfRVJSKGl0ZXIpKQorCQkJcmV0ID0gUFRSX0VSUihpdGVyKTsKKwkJZWxzZSBpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UKQorCQkJaXRlci0+aXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0xBVF9GTVQ7CisJfQogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIHZvaWQgKgogdF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CkBAIC0yNjIzLDIxICsyMDYyLDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19mb3BzID0geworc3RhdGljIHNzaXplX3QKK3RyYWNpbmdfd3JpdGVfc3R1YihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKKwkud3JpdGUJCT0gdHJhY2luZ193cml0ZV9zdHViLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogCS5yZWxlYXNlCT0gdHJhY2luZ19yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19sdF9mb3BzID0gewotCS5vcGVuCQk9IHRyYWNpbmdfbHRfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHRyYWNpbmdfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNob3dfdHJhY2VzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG93X3RyYWNlc19mb3BzID0gewogCS5vcGVuCQk9IHNob3dfdHJhY2VzX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKQEAgLTI3MzAsNyArMjE3MCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19jcHVtYXNrX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2NwdW1hc2tfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX2NwdW1hc2tfcmVhZCwKIAkud3JpdGUJCT0gdHJhY2luZ19jcHVtYXNrX3dyaXRlLApAQCAtMjc0MCw1NyArMjE4MCw2MiBAQAogdHJhY2luZ190cmFjZV9vcHRpb25zX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAogCQkgICAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewotCWludCBpOworCXN0cnVjdCB0cmFjZXJfb3B0ICp0cmFjZV9vcHRzOworCXUzMiB0cmFjZXJfZmxhZ3M7CisJaW50IGxlbiA9IDA7CiAJY2hhciAqYnVmOwogCWludCByID0gMDsKLQlpbnQgbGVuID0gMDsKLQl1MzIgdHJhY2VyX2ZsYWdzID0gY3VycmVudF90cmFjZS0+ZmxhZ3MtPnZhbDsKLQlzdHJ1Y3QgdHJhY2VyX29wdCAqdHJhY2Vfb3B0cyA9IGN1cnJlbnRfdHJhY2UtPmZsYWdzLT5vcHRzOworCWludCBpOwogCiAKLQkvKiBjYWx1bGF0ZSBtYXggc2l6ZSAqLworCS8qIGNhbGN1bGF0ZSBtYXggc2l6ZSAqLwogCWZvciAoaSA9IDA7IHRyYWNlX29wdGlvbnNbaV07IGkrKykgewogCQlsZW4gKz0gc3RybGVuKHRyYWNlX29wdGlvbnNbaV0pOwotCQlsZW4gKz0gMzsgLyogIm5vIiBhbmQgc3BhY2UgKi8KKwkJbGVuICs9IDM7IC8qICJubyIgYW5kIG5ld2xpbmUgKi8KIAl9CiAKKwltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwl0cmFjZXJfZmxhZ3MgPSBjdXJyZW50X3RyYWNlLT5mbGFncy0+dmFsOworCXRyYWNlX29wdHMgPSBjdXJyZW50X3RyYWNlLT5mbGFncy0+b3B0czsKKwogCS8qCiAJICogSW5jcmVhc2UgdGhlIHNpemUgd2l0aCBuYW1lcyBvZiBvcHRpb25zIHNwZWNpZmljCiAJICogb2YgdGhlIGN1cnJlbnQgdHJhY2VyLgogCSAqLwogCWZvciAoaSA9IDA7IHRyYWNlX29wdHNbaV0ubmFtZTsgaSsrKSB7CiAJCWxlbiArPSBzdHJsZW4odHJhY2Vfb3B0c1tpXS5uYW1lKTsKLQkJbGVuICs9IDM7IC8qICJubyIgYW5kIHNwYWNlICovCisJCWxlbiArPSAzOyAvKiAibm8iIGFuZCBuZXdsaW5lICovCiAJfQogCiAJLyogKzIgZm9yIFxuIGFuZCBcMCAqLwogCWJ1ZiA9IGttYWxsb2MobGVuICsgMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCisJaWYgKCFidWYpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJZm9yIChpID0gMDsgdHJhY2Vfb3B0aW9uc1tpXTsgaSsrKSB7CiAJCWlmICh0cmFjZV9mbGFncyAmICgxIDw8IGkpKQotCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICIlcyAiLCB0cmFjZV9vcHRpb25zW2ldKTsKKwkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAiJXNcbiIsIHRyYWNlX29wdGlvbnNbaV0pOwogCQllbHNlCi0JCQlyICs9IHNwcmludGYoYnVmICsgciwgIm5vJXMgIiwgdHJhY2Vfb3B0aW9uc1tpXSk7CisJCQlyICs9IHNwcmludGYoYnVmICsgciwgIm5vJXNcbiIsIHRyYWNlX29wdGlvbnNbaV0pOwogCX0KIAogCWZvciAoaSA9IDA7IHRyYWNlX29wdHNbaV0ubmFtZTsgaSsrKSB7CiAJCWlmICh0cmFjZXJfZmxhZ3MgJiB0cmFjZV9vcHRzW2ldLmJpdCkKLQkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAiJXMgIiwKKwkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAiJXNcbiIsCiAJCQkJdHJhY2Vfb3B0c1tpXS5uYW1lKTsKIAkJZWxzZQotCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICJubyVzICIsCisJCQlyICs9IHNwcmludGYoYnVmICsgciwgIm5vJXNcbiIsCiAJCQkJdHJhY2Vfb3B0c1tpXS5uYW1lKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCXIgKz0gc3ByaW50ZihidWYgKyByLCAiXG4iKTsKIAlXQVJOX09OKHIgPj0gbGVuICsgMik7CiAKIAlyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBidWYsIHIpOwogCiAJa2ZyZWUoYnVmKTsKLQogCXJldHVybiByOwogfQogCkBAIC0yODI4LDYgKzIyNzMsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2V0X3RyYWNlcl9mbGFncyh1bnNpZ25lZCBpbnQgbWFzaywgaW50IGVuYWJsZWQpCit7CisJLyogZG8gbm90aGluZyBpZiBmbGFnIGlzIGFscmVhZHkgc2V0ICovCisJaWYgKCEhKHRyYWNlX2ZsYWdzICYgbWFzaykgPT0gISFlbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoZW5hYmxlZCkKKwkJdHJhY2VfZmxhZ3MgfD0gbWFzazsKKwllbHNlCisJCXRyYWNlX2ZsYWdzICY9IH5tYXNrOworCisJaWYgKG1hc2sgPT0gVFJBQ0VfSVRFUl9HTE9CQUxfQ0xLKSB7CisJCXU2NCAoKmZ1bmMpKHZvaWQpOworCisJCWlmIChlbmFibGVkKQorCQkJZnVuYyA9IHRyYWNlX2Nsb2NrX2dsb2JhbDsKKwkJZWxzZQorCQkJZnVuYyA9IHRyYWNlX2Nsb2NrX2xvY2FsOworCisJCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQlyaW5nX2J1ZmZlcl9zZXRfY2xvY2soZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgZnVuYyk7CisKKwkJaWYgKG1heF90ci5idWZmZXIpCisJCQlyaW5nX2J1ZmZlcl9zZXRfY2xvY2sobWF4X3RyLmJ1ZmZlciwgZnVuYyk7CisJCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJfQorfQorCiBzdGF0aWMgc3NpemVfdAogdHJhY2luZ190cmFjZV9vcHRpb25zX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCXNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKQEAgLTI4NTUsMTcgKzIzMjgsMTYgQEAKIAkJaW50IGxlbiA9IHN0cmxlbih0cmFjZV9vcHRpb25zW2ldKTsKIAogCQlpZiAoc3RybmNtcChjbXAsIHRyYWNlX29wdGlvbnNbaV0sIGxlbikgPT0gMCkgewotCQkJaWYgKG5lZykKLQkJCQl0cmFjZV9mbGFncyAmPSB+KDEgPDwgaSk7Ci0JCQllbHNlCi0JCQkJdHJhY2VfZmxhZ3MgfD0gKDEgPDwgaSk7CisJCQlzZXRfdHJhY2VyX2ZsYWdzKDEgPDwgaSwgIW5lZyk7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCS8qIElmIG5vIG9wdGlvbiBjb3VsZCBiZSBzZXQsIHRlc3QgdGhlIHNwZWNpZmljIHRyYWNlciBvcHRpb25zICovCiAJaWYgKCF0cmFjZV9vcHRpb25zW2ldKSB7CisJCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCQlyZXQgPSBzZXRfdHJhY2VyX29wdGlvbihjdXJyZW50X3RyYWNlLCBjbXAsIG5lZyk7CisJCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTI4NzUsNyArMjM0Nyw3IEBACiAJcmV0dXJuIGNudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19pdGVyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2l0ZXJfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3RyYWNlX29wdGlvbnNfcmVhZCwKIAkud3JpdGUJCT0gdHJhY2luZ190cmFjZV9vcHRpb25zX3dyaXRlLApAQCAtMjkwOCw3ICsyMzgwLDcgQEAKIAkJCQkJcmVhZG1lX21zZywgc3RybGVuKHJlYWRtZV9tc2cpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19yZWFkbWVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfcmVhZG1lX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19yZWFkbWVfcmVhZCwKIH07CkBAIC0yOTMwLDcgKzI0MDIsNyBAQAogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbNjRdOwotCWxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCByZXQ7CiAKIAlpZiAoY250ID49IHNpemVvZihidWYpKQpAQCAtMjk4NSwxMyArMjQ1NywxMDUgQEAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBidWYsIHIpOwogfQogCi1zdGF0aWMgaW50IHRyYWNpbmdfc2V0X3RyYWNlcihjaGFyICpidWYpCitpbnQgdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlciAqdCwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKKwl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKKwlyZXR1cm4gdC0+aW5pdCh0cik7Cit9CisKK3N0YXRpYyBpbnQgdHJhY2luZ19yZXNpemVfcmluZ19idWZmZXIodW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIElmIGtlcm5lbCBvciB1c2VyIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIHJpbmcgYnVmZmVyCisJICogd2UgdXNlIHRoZSBzaXplIHRoYXQgd2FzIGdpdmVuLCBhbmQgd2UgY2FuIGZvcmdldCBhYm91dAorCSAqIGV4cGFuZGluZyBpdCBsYXRlci4KKwkgKi8KKwlyaW5nX2J1ZmZlcl9leHBhbmRlZCA9IDE7CisKKwlyZXQgPSByaW5nX2J1ZmZlcl9yZXNpemUoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgc2l6ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSByaW5nX2J1ZmZlcl9yZXNpemUobWF4X3RyLmJ1ZmZlciwgc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJaW50IHI7CisKKwkJciA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShnbG9iYWxfdHJhY2UuYnVmZmVyLAorCQkJCSAgICAgICBnbG9iYWxfdHJhY2UuZW50cmllcyk7CisJCWlmIChyIDwgMCkgeworCQkJLyoKKwkJCSAqIEFBUkdIISBXZSBhcmUgbGVmdCB3aXRoIGRpZmZlcmVudAorCQkJICogc2l6ZSBtYXggYnVmZmVyISEhIQorCQkJICogVGhlIG1heCBidWZmZXIgaXMgb3VyICJzbmFwc2hvdCIgYnVmZmVyLgorCQkJICogV2hlbiBhIHRyYWNlciBuZWVkcyBhIHNuYXBzaG90IChvbmUgb2YgdGhlCisJCQkgKiBsYXRlbmN5IHRyYWNlcnMpLCBpdCBzd2FwcyB0aGUgbWF4IGJ1ZmZlcgorCQkJICogd2l0aCB0aGUgc2F2ZWQgc25hcCBzaG90LiBXZSBzdWNjZWVkZWQgdG8KKwkJCSAqIHVwZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbWFpbiBidWZmZXIsIGJ1dCBmYWlsZWQgdG8KKwkJCSAqIHVwZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbWF4IGJ1ZmZlci4gQnV0IHdoZW4gd2UgdHJpZWQKKwkJCSAqIHRvIHJlc2V0IHRoZSBtYWluIGJ1ZmZlciB0byB0aGUgb3JpZ2luYWwgc2l6ZSwgd2UKKwkJCSAqIGZhaWxlZCB0aGVyZSB0b28uIFRoaXMgaXMgdmVyeSB1bmxpa2VseSB0bworCQkJICogaGFwcGVuLCBidXQgaWYgaXQgZG9lcywgd2FybiBhbmQga2lsbCBhbGwKKwkJCSAqIHRyYWNpbmcuCisJCQkgKi8KKwkJCVdBUk5fT04oMSk7CisJCQl0cmFjaW5nX2Rpc2FibGVkID0gMTsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0KKworCWdsb2JhbF90cmFjZS5lbnRyaWVzID0gc2l6ZTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdHJhY2luZ191cGRhdGVfYnVmZmVycyAtIHVzZWQgYnkgdHJhY2luZyBmYWNpbGl0eSB0byBleHBhbmQgcmluZyBidWZmZXJzCisgKgorICogVG8gc2F2ZSBvbiBtZW1vcnkgd2hlbiB0aGUgdHJhY2luZyBpcyBuZXZlciB1c2VkIG9uIGEgc3lzdGVtIHdpdGggaXQKKyAqIGNvbmZpZ3VyZWQgaW4uIFRoZSByaW5nIGJ1ZmZlcnMgYXJlIHNldCB0byBhIG1pbmltdW0gc2l6ZS4gQnV0IG9uY2UKKyAqIGEgdXNlciBzdGFydHMgdG8gdXNlIHRoZSB0cmFjaW5nIGZhY2lsaXR5LCB0aGVuIHRoZXkgbmVlZCB0byBncm93CisgKiB0byB0aGVpciBkZWZhdWx0IHNpemUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgd2hlbiBhIHRyYWNlciBpcyBhYm91dCB0byBiZSB1c2VkLgorICovCitpbnQgdHJhY2luZ191cGRhdGVfYnVmZmVycyh2b2lkKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJaWYgKCFyaW5nX2J1ZmZlcl9leHBhbmRlZCkKKwkJcmV0ID0gdHJhY2luZ19yZXNpemVfcmluZ19idWZmZXIodHJhY2VfYnVmX3NpemUpOworCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeTsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICoKK2NyZWF0ZV90cmFjZV9vcHRpb25fZmlsZXMoc3RydWN0IHRyYWNlciAqdHJhY2VyKTsKKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lfdHJhY2Vfb3B0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICp0b3B0cyk7CisKK3N0YXRpYyBpbnQgdHJhY2luZ19zZXRfdHJhY2VyKGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwlzdGF0aWMgc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKnRvcHRzOwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwogCXN0cnVjdCB0cmFjZXIgKnQ7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKworCWlmICghcmluZ19idWZmZXJfZXhwYW5kZWQpIHsKKwkJcmV0ID0gdHJhY2luZ19yZXNpemVfcmluZ19idWZmZXIodHJhY2VfYnVmX3NpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlyZXQgPSAwOworCX0KKwogCWZvciAodCA9IHRyYWNlX3R5cGVzOyB0OyB0ID0gdC0+bmV4dCkgewogCQlpZiAoc3RyY21wKHQtPm5hbWUsIGJ1ZikgPT0gMCkKIAkJCWJyZWFrOwpAQCAtMzAwNyw5ICsyNTcxLDE0IEBACiAJaWYgKGN1cnJlbnRfdHJhY2UgJiYgY3VycmVudF90cmFjZS0+cmVzZXQpCiAJCWN1cnJlbnRfdHJhY2UtPnJlc2V0KHRyKTsKIAorCWRlc3Ryb3lfdHJhY2Vfb3B0aW9uX2ZpbGVzKHRvcHRzKTsKKwogCWN1cnJlbnRfdHJhY2UgPSB0OworCisJdG9wdHMgPSBjcmVhdGVfdHJhY2Vfb3B0aW9uX2ZpbGVzKGN1cnJlbnRfdHJhY2UpOworCiAJaWYgKHQtPmluaXQpIHsKLQkJcmV0ID0gdC0+aW5pdCh0cik7CisJCXJldCA9IHRyYWNlcl9pbml0KHQsIHRyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTMwNzIsOSArMjY0MSw5IEBACiB0cmFjaW5nX21heF9sYXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAogCQkgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JbG9uZyAqcHRyID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgKnB0ciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1Zls2NF07Ci0JbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IHJldDsKIAogCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCkBAIC0zMDk0LDU0ICsyNjYzLDk2IEBACiAJcmV0dXJuIGNudDsKIH0KIAotc3RhdGljIGF0b21pY190IHRyYWNpbmdfcmVhZGVyOwotCiBzdGF0aWMgaW50IHRyYWNpbmdfb3Blbl9waXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCWxvbmcgY3B1X2ZpbGUgPSAobG9uZykgaW5vZGUtPmlfcHJpdmF0ZTsKIAlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXI7CisJaW50IHJldCA9IDA7CiAKIAlpZiAodHJhY2luZ19kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBXZSBvbmx5IGFsbG93IGZvciByZWFkZXIgb2YgdGhlIHBpcGUgKi8KLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnRyYWNpbmdfcmVhZGVyKSAhPSAxKSB7Ci0JCWF0b21pY19kZWMoJnRyYWNpbmdfcmVhZGVyKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKworCS8qIFdlIG9ubHkgYWxsb3cgb25lIHJlYWRlciBwZXIgY3B1ICovCisJaWYgKGNwdV9maWxlID09IFRSQUNFX1BJUEVfQUxMX0NQVSkgeworCQlpZiAoIWNwdW1hc2tfZW1wdHkodHJhY2luZ19yZWFkZXJfY3B1bWFzaykpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWNwdW1hc2tfc2V0YWxsKHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOworCX0gZWxzZSB7CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzaykpCisJCQljcHVtYXNrX3NldF9jcHUoY3B1X2ZpbGUsIHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOworCQllbHNlIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CiAJfQogCiAJLyogY3JlYXRlIGEgYnVmZmVyIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiB0byBwYXNzIHRvIHVzZXJzcGFjZSAqLwogCWl0ZXIgPSBremFsbG9jKHNpemVvZigqaXRlciksIEdGUF9LRVJORUwpOwotCWlmICghaXRlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZpdGVyLT5zdGFydGVkLCBHRlBfS0VSTkVMKSkgewotCQlrZnJlZShpdGVyKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFpdGVyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KIAotCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCS8qCisJICogV2UgbWFrZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgdHJhY2VyIHRvIGF2b2lkIGNvbmN1cnJlbnQKKwkgKiBjaGFuZ2VzIG9uIGl0IHdoaWxlIHdlIGFyZSByZWFkaW5nLgorCSAqLworCWl0ZXItPnRyYWNlID0ga21hbGxvYyhzaXplb2YoKml0ZXItPnRyYWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpdGVyLT50cmFjZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCWlmIChjdXJyZW50X3RyYWNlKQorCQkqaXRlci0+dHJhY2UgPSAqY3VycmVudF90cmFjZTsKKworCWlmICghYWxsb2NfY3B1bWFza192YXIoJml0ZXItPnN0YXJ0ZWQsIEdGUF9LRVJORUwpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CiAKIAkvKiB0cmFjZSBwaXBlIGRvZXMgbm90IHNob3cgc3RhcnQgb2YgYnVmZmVyICovCiAJY3B1bWFza19zZXRhbGwoaXRlci0+c3RhcnRlZCk7CiAKKwlpdGVyLT5jcHVfZmlsZSA9IGNwdV9maWxlOwogCWl0ZXItPnRyID0gJmdsb2JhbF90cmFjZTsKLQlpdGVyLT50cmFjZSA9IGN1cnJlbnRfdHJhY2U7CisJbXV0ZXhfaW5pdCgmaXRlci0+bXV0ZXgpOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGl0ZXI7CiAKIAlpZiAoaXRlci0+dHJhY2UtPnBpcGVfb3BlbikKIAkJaXRlci0+dHJhY2UtPnBpcGVfb3BlbihpdGVyKTsKLQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwlyZXR1cm4gcmV0OworCitmYWlsOgorCWtmcmVlKGl0ZXItPnRyYWNlKTsKKwlrZnJlZShpdGVyKTsKKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdHJhY2luZ19yZWxlYXNlX3BpcGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKKwlpZiAoaXRlci0+Y3B1X2ZpbGUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKQorCQljcHVtYXNrX2NsZWFyKHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOworCWVsc2UKKwkJY3B1bWFza19jbGVhcl9jcHUoaXRlci0+Y3B1X2ZpbGUsIHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOworCisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwogCWZyZWVfY3B1bWFza192YXIoaXRlci0+c3RhcnRlZCk7CisJbXV0ZXhfZGVzdHJveSgmaXRlci0+bXV0ZXgpOworCWtmcmVlKGl0ZXItPnRyYWNlKTsKIAlrZnJlZShpdGVyKTsKLQlhdG9taWNfZGVjKCZ0cmFjaW5nX3JlYWRlcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMxNjcsNjcgKzI3NzgsNTcgQEAKIAl9CiB9CiAKKwordm9pZCBkZWZhdWx0X3dhaXRfcGlwZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlwcmVwYXJlX3RvX3dhaXQoJnRyYWNlX3dhaXQsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCisJaWYgKHRyYWNlX2VtcHR5KGl0ZXIpKQorCQlzY2hlZHVsZSgpOworCisJZmluaXNoX3dhaXQoJnRyYWNlX3dhaXQsICZ3YWl0KTsKK30KKwogLyoKLSAqIENvbnN1bWVyIHJlYWRlci4KKyAqIFRoaXMgaXMgYSBtYWtlLXNoaWZ0IHdhaXRxdWV1ZS4KKyAqIEEgdHJhY2VyIG1pZ2h0IHVzZSB0aGlzIGNhbGxiYWNrIG9uIHNvbWUgcmFyZSBjYXNlczoKKyAqCisgKiAgMSkgdGhlIGN1cnJlbnQgdHJhY2VyIG1pZ2h0IGhvbGQgdGhlIHJ1bnF1ZXVlIGxvY2sgd2hlbiBpdCB3YWtlcyB1cAorICogICAgIGEgcmVhZGVyLCBoZW5jZSBhIGRlYWRsb2NrIChzY2hlZCwgZnVuY3Rpb24sIGFuZCBmdW5jdGlvbiBncmFwaCB0cmFjZXJzKQorICogIDIpIHRoZSBmdW5jdGlvbiB0cmFjZXJzLCB0cmFjZSBhbGwgZnVuY3Rpb25zLCB3ZSBkb24ndCB3YW50CisgKiAgICAgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgd2FrZV91cCBhbmQgZnJpZW5kcworICogICAgIChhbmQgdHJhY2luZyB0aGVtIHRvbykKKyAqCisgKiAgICAgQW55d2F5LCB0aGlzIGlzIHJlYWxseSB2ZXJ5IHByaW1pdGl2ZSB3YWtldXAuCiAgKi8KLXN0YXRpYyBzc2l6ZV90Ci10cmFjaW5nX3JlYWRfcGlwZShzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCi0JCSAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQordm9pZCBwb2xsX3dhaXRfcGlwZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkvKiBzbGVlcCBmb3IgMTAwIG1zZWNzLCBhbmQgdHJ5IGFnYWluLiAqLworCXNjaGVkdWxlX3RpbWVvdXQoSFogLyAxMCk7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggdHJhY2VfdHlwZXNfbG9jayBtdXRleCBoZWxkLiAqLworc3RhdGljIGludCB0cmFjaW5nX3dhaXRfcGlwZShzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3NpemVfdCBzcmV0OwogCi0JLyogcmV0dXJuIGFueSBsZWZ0b3ZlciBkYXRhICovCi0Jc3JldCA9IHRyYWNlX3NlcV90b191c2VyKCZpdGVyLT5zZXEsIHVidWYsIGNudCk7Ci0JaWYgKHNyZXQgIT0gLUVCVVNZKQotCQlyZXR1cm4gc3JldDsKLQotCXRyYWNlX3NlcV9yZXNldCgmaXRlci0+c2VxKTsKLQotCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCWlmIChpdGVyLT50cmFjZS0+cmVhZCkgewotCQlzcmV0ID0gaXRlci0+dHJhY2UtPnJlYWQoaXRlciwgZmlscCwgdWJ1ZiwgY250LCBwcG9zKTsKLQkJaWYgKHNyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLXdhaXRhZ2FpbjoKLQlzcmV0ID0gMDsKIAl3aGlsZSAodHJhY2VfZW1wdHkoaXRlcikpIHsKIAogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewotCQkJc3JldCA9IC1FQUdBSU47Ci0JCQlnb3RvIG91dDsKKwkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAKLQkJLyoKLQkJICogVGhpcyBpcyBhIG1ha2Utc2hpZnQgd2FpdHF1ZXVlLiBUaGUgcmVhc29uIHdlIGRvbid0IHVzZQotCQkgKiBhbiBhY3R1YWwgd2FpdCBxdWV1ZSBpcyBiZWNhdXNlOgotCQkgKiAgMSkgd2Ugb25seSBldmVyIGhhdmUgb25lIHdhaXRlcgotCQkgKiAgMikgdGhlIHRyYWNpbmcsIHRyYWNlcyBhbGwgZnVuY3Rpb25zLCB3ZSBkb24ndCB3YW50Ci0JCSAqICAgICB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyB3YWtlX3VwIGFuZCBmcmllbmRzCi0JCSAqICAgICAoYW5kIHRyYWNpbmcgdGhlbSB0b28pCi0JCSAqICAgICBBbnl3YXksIHRoaXMgaXMgcmVhbGx5IHZlcnkgcHJpbWl0aXZlIHdha2V1cC4KLQkJICovCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWl0ZXItPnRyLT53YWl0ZXIgPSBjdXJyZW50OworCQltdXRleF91bmxvY2soJml0ZXItPm11dGV4KTsKIAotCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQlpdGVyLT50cmFjZS0+d2FpdF9waXBlKGl0ZXIpOwogCi0JCS8qIHNsZWVwIGZvciAxMDAgbXNlY3MsIGFuZCB0cnkgYWdhaW4uICovCi0JCXNjaGVkdWxlX3RpbWVvdXQoSFovMTApOworCQltdXRleF9sb2NrKCZpdGVyLT5tdXRleCk7CiAKLQkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci0KLQkJaXRlci0+dHItPndhaXRlciA9IE5VTEw7Ci0KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlzcmV0ID0gLUVJTlRSOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAoaXRlci0+dHJhY2UgIT0gY3VycmVudF90cmFjZSkKLQkJCWdvdG8gb3V0OworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gLUVJTlRSOwogCiAJCS8qCiAJCSAqIFdlIGJsb2NrIHVudGlsIHdlIHJlYWQgc29tZXRoaW5nIGFuZCB0cmFjaW5nIGlzIGRpc2FibGVkLgpAQCAtMzI0MCwxNCArMjg0MSw2MCBAQAogCQkgKi8KIAkJaWYgKCF0cmFjZXJfZW5hYmxlZCAmJiBpdGVyLT5wb3MpCiAJCQlicmVhazsKLQotCQljb250aW51ZTsKIAl9CiAKLQkvKiBzdG9wIHdoZW4gdHJhY2luZyBpcyBmaW5pc2hlZCAqLwotCWlmICh0cmFjZV9lbXB0eShpdGVyKSkKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIENvbnN1bWVyIHJlYWRlci4KKyAqLworc3RhdGljIHNzaXplX3QKK3RyYWNpbmdfcmVhZF9waXBlKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0YXRpYyBzdHJ1Y3QgdHJhY2VyICpvbGRfdHJhY2VyOworCXNzaXplX3Qgc3JldDsKKworCS8qIHJldHVybiBhbnkgbGVmdG92ZXIgZGF0YSAqLworCXNyZXQgPSB0cmFjZV9zZXFfdG9fdXNlcigmaXRlci0+c2VxLCB1YnVmLCBjbnQpOworCWlmIChzcmV0ICE9IC1FQlVTWSkKKwkJcmV0dXJuIHNyZXQ7CisKKwl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKKworCS8qIGNvcHkgdGhlIHRyYWNlciB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBsb2NrIGFsbCBhcm91bmQgKi8KKwltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwlpZiAodW5saWtlbHkob2xkX3RyYWNlciAhPSBjdXJyZW50X3RyYWNlICYmIGN1cnJlbnRfdHJhY2UpKSB7CisJCW9sZF90cmFjZXIgPSBjdXJyZW50X3RyYWNlOworCQkqaXRlci0+dHJhY2UgPSAqY3VycmVudF90cmFjZTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKworCS8qCisJICogQXZvaWQgbW9yZSB0aGFuIG9uZSBjb25zdW1lciBvbiBhIHNpbmdsZSBmaWxlIGRlc2NyaXB0b3IKKwkgKiBUaGlzIGlzIGp1c3QgYSBtYXR0ZXIgb2YgdHJhY2VzIGNvaGVyZW5jeSwgdGhlIHJpbmcgYnVmZmVyIGl0c2VsZgorCSAqIGlzIHByb3RlY3RlZC4KKwkgKi8KKwltdXRleF9sb2NrKCZpdGVyLT5tdXRleCk7CisJaWYgKGl0ZXItPnRyYWNlLT5yZWFkKSB7CisJCXNyZXQgPSBpdGVyLT50cmFjZS0+cmVhZChpdGVyLCBmaWxwLCB1YnVmLCBjbnQsIHBwb3MpOworCQlpZiAoc3JldCkKKwkJCWdvdG8gb3V0OworCX0KKword2FpdGFnYWluOgorCXNyZXQgPSB0cmFjaW5nX3dhaXRfcGlwZShmaWxwKTsKKwlpZiAoc3JldCA8PSAwKQogCQlnb3RvIG91dDsKIAorCS8qIHN0b3Agd2hlbiB0cmFjaW5nIGlzIGZpbmlzaGVkICovCisJaWYgKHRyYWNlX2VtcHR5KGl0ZXIpKSB7CisJCXNyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoY250ID49IFBBR0VfU0laRSkKIAkJY250ID0gUEFHRV9TSVpFIC0gMTsKIApAQCAtMzI2Nyw4ICsyOTE0LDggQEAKIAkJCWl0ZXItPnNlcS5sZW4gPSBsZW47CiAJCQlicmVhazsKIAkJfQotCi0JCXRyYWNlX2NvbnN1bWUoaXRlcik7CisJCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9OT19DT05TVU1FKQorCQkJdHJhY2VfY29uc3VtZShpdGVyKTsKIAogCQlpZiAoaXRlci0+c2VxLmxlbiA+PSBjbnQpCiAJCQlicmVhazsKQEAgLTMyNzcsNyArMjkyNCw3IEBACiAJLyogTm93IGNvcHkgd2hhdCB3ZSBoYXZlIHRvIHRoZSB1c2VyICovCiAJc3JldCA9IHRyYWNlX3NlcV90b191c2VyKCZpdGVyLT5zZXEsIHVidWYsIGNudCk7CiAJaWYgKGl0ZXItPnNlcS5yZWFkcG9zID49IGl0ZXItPnNlcS5sZW4pCi0JCXRyYWNlX3NlcV9yZXNldCgmaXRlci0+c2VxKTsKKwkJdHJhY2Vfc2VxX2luaXQoJml0ZXItPnNlcSk7CiAKIAkvKgogCSAqIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHNlbmQgdG8gdXNlciwgaW5zcGl0ZSBvZiBjb25zdW1pbmcgdHJhY2UKQEAgLTMyODcsMjAgKzI5MzQsMTY1IEBACiAJCWdvdG8gd2FpdGFnYWluOwogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwltdXRleF91bmxvY2soJml0ZXItPm11dGV4KTsKIAogCXJldHVybiBzcmV0OwogfQogCitzdGF0aWMgdm9pZCB0cmFjaW5nX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQkgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQoreworCV9fZnJlZV9wYWdlKGJ1Zi0+cGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNpbmdfc3BkX3JlbGVhc2VfcGlwZShzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqc3BkLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlfX2ZyZWVfcGFnZShzcGQtPnBhZ2VzW2lkeF0pOworfQorCitzdGF0aWMgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgdHJhY2luZ19waXBlX2J1Zl9vcHMgPSB7CisJLmNhbl9tZXJnZQkJPSAwLAorCS5tYXAJCQk9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAorCS51bm1hcAkJCT0gZ2VuZXJpY19waXBlX2J1Zl91bm1hcCwKKwkuY29uZmlybQkJPSBnZW5lcmljX3BpcGVfYnVmX2NvbmZpcm0sCisJLnJlbGVhc2UJCT0gdHJhY2luZ19waXBlX2J1Zl9yZWxlYXNlLAorCS5zdGVhbAkJCT0gZ2VuZXJpY19waXBlX2J1Zl9zdGVhbCwKKwkuZ2V0CQkJPSBnZW5lcmljX3BpcGVfYnVmX2dldCwKK307CisKK3N0YXRpYyBzaXplX3QKK3RyYWNpbmdfZmlsbF9waXBlX3BhZ2Uoc2l6ZV90IHJlbSwgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXNpemVfdCBjb3VudDsKKwlpbnQgcmV0OworCisJLyogU2VxIGJ1ZmZlciBpcyBwYWdlLXNpemVkLCBleGFjdGx5IHdoYXQgd2UgbmVlZC4gKi8KKwlmb3IgKDs7KSB7CisJCWNvdW50ID0gaXRlci0+c2VxLmxlbjsKKwkJcmV0ID0gcHJpbnRfdHJhY2VfbGluZShpdGVyKTsKKwkJY291bnQgPSBpdGVyLT5zZXEubGVuIC0gY291bnQ7CisJCWlmIChyZW0gPCBjb3VudCkgeworCQkJcmVtID0gMDsKKwkJCWl0ZXItPnNlcS5sZW4gLT0gY291bnQ7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKSB7CisJCQlpdGVyLT5zZXEubGVuIC09IGNvdW50OworCQkJYnJlYWs7CisJCX0KKworCQl0cmFjZV9jb25zdW1lKGl0ZXIpOworCQlyZW0gLT0gY291bnQ7CisJCWlmICghZmluZF9uZXh0X2VudHJ5X2luYyhpdGVyKSkJeworCQkJcmVtID0gMDsKKwkJCWl0ZXItPmVudCA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZW07Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRyYWNpbmdfc3BsaWNlX3JlYWRfcGlwZShzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkJbG9mZl90ICpwcG9zLAorCQkJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCQlzaXplX3QgbGVuLAorCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfQlVGRkVSU107CisJc3RydWN0IHBhcnRpYWxfcGFnZSBwYXJ0aWFsW1BJUEVfQlVGRkVSU107CisJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjIHNwZCA9IHsKKwkJLnBhZ2VzCQk9IHBhZ2VzLAorCQkucGFydGlhbAk9IHBhcnRpYWwsCisJCS5ucl9wYWdlcwk9IDAsIC8qIFRoaXMgZ2V0cyB1cGRhdGVkIGJlbG93LiAqLworCQkuZmxhZ3MJCT0gZmxhZ3MsCisJCS5vcHMJCT0gJnRyYWNpbmdfcGlwZV9idWZfb3BzLAorCQkuc3BkX3JlbGVhc2UJPSB0cmFjaW5nX3NwZF9yZWxlYXNlX3BpcGUsCisJfTsKKwlzdGF0aWMgc3RydWN0IHRyYWNlciAqb2xkX3RyYWNlcjsKKwlzc2l6ZV90IHJldDsKKwlzaXplX3QgcmVtOworCXVuc2lnbmVkIGludCBpOworCisJLyogY29weSB0aGUgdHJhY2VyIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIGxvY2sgYWxsIGFyb3VuZCAqLworCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCWlmICh1bmxpa2VseShvbGRfdHJhY2VyICE9IGN1cnJlbnRfdHJhY2UgJiYgY3VycmVudF90cmFjZSkpIHsKKwkJb2xkX3RyYWNlciA9IGN1cnJlbnRfdHJhY2U7CisJCSppdGVyLT50cmFjZSA9ICpjdXJyZW50X3RyYWNlOworCX0KKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJbXV0ZXhfbG9jaygmaXRlci0+bXV0ZXgpOworCisJaWYgKGl0ZXItPnRyYWNlLT5zcGxpY2VfcmVhZCkgeworCQlyZXQgPSBpdGVyLT50cmFjZS0+c3BsaWNlX3JlYWQoaXRlciwgZmlscCwKKwkJCQkJICAgICAgIHBwb3MsIHBpcGUsIGxlbiwgZmxhZ3MpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZXJyOworCX0KKworCXJldCA9IHRyYWNpbmdfd2FpdF9waXBlKGZpbHApOworCWlmIChyZXQgPD0gMCkKKwkJZ290byBvdXRfZXJyOworCisJaWYgKCFpdGVyLT5lbnQgJiYgIWZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qIEZpbGwgYXMgbWFueSBwYWdlcyBhcyBwb3NzaWJsZS4gKi8KKwlmb3IgKGkgPSAwLCByZW0gPSBsZW47IGkgPCBQSVBFX0JVRkZFUlMgJiYgcmVtOyBpKyspIHsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIXBhZ2VzW2ldKQorCQkJYnJlYWs7CisKKwkJcmVtID0gdHJhY2luZ19maWxsX3BpcGVfcGFnZShyZW0sIGl0ZXIpOworCisJCS8qIENvcHkgdGhlIGRhdGEgaW50byB0aGUgcGFnZSwgc28gd2UgY2FuIHN0YXJ0IG92ZXIuICovCisJCXJldCA9IHRyYWNlX3NlcV90b19idWZmZXIoJml0ZXItPnNlcSwKKwkJCQkJICBwYWdlX2FkZHJlc3MocGFnZXNbaV0pLAorCQkJCQkgIGl0ZXItPnNlcS5sZW4pOworCQlpZiAocmV0IDwgMCkgeworCQkJX19mcmVlX3BhZ2UocGFnZXNbaV0pOworCQkJYnJlYWs7CisJCX0KKwkJcGFydGlhbFtpXS5vZmZzZXQgPSAwOworCQlwYXJ0aWFsW2ldLmxlbiA9IGl0ZXItPnNlcS5sZW47CisKKwkJdHJhY2Vfc2VxX2luaXQoJml0ZXItPnNlcSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpdGVyLT5tdXRleCk7CisKKwlzcGQubnJfcGFnZXMgPSBpOworCisJcmV0dXJuIHNwbGljZV90b19waXBlKHBpcGUsICZzcGQpOworCitvdXRfZXJyOgorCW11dGV4X3VubG9jaygmaXRlci0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHNzaXplX3QKIHRyYWNpbmdfZW50cmllc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKIAkJICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQljaGFyIGJ1Zls2NF07CisJY2hhciBidWZbOTZdOwogCWludCByOwogCi0JciA9IHNwcmludGYoYnVmLCAiJWx1XG4iLCB0ci0+ZW50cmllcyA+PiAxMCk7CisJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJaWYgKCFyaW5nX2J1ZmZlcl9leHBhbmRlZCkKKwkJciA9IHNwcmludGYoYnVmLCAiJWx1IChleHBhbmRlZDogJWx1KVxuIiwKKwkJCSAgICB0ci0+ZW50cmllcyA+PiAxMCwKKwkJCSAgICB0cmFjZV9idWZfc2l6ZSA+PiAxMCk7CisJZWxzZQorCQlyID0gc3ByaW50ZihidWYsICIlbHVcbiIsIHRyLT5lbnRyaWVzID4+IDEwKTsKKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgYnVmLCByKTsKIH0KIApAQCAtMzM0NCwyOCArMzEzNiwxMSBAQAogCXZhbCA8PD0gMTA7CiAKIAlpZiAodmFsICE9IGdsb2JhbF90cmFjZS5lbnRyaWVzKSB7Ci0JCXJldCA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShnbG9iYWxfdHJhY2UuYnVmZmVyLCB2YWwpOworCQlyZXQgPSB0cmFjaW5nX3Jlc2l6ZV9yaW5nX2J1ZmZlcih2YWwpOwogCQlpZiAocmV0IDwgMCkgewogCQkJY250ID0gcmV0OwogCQkJZ290byBvdXQ7CiAJCX0KLQotCQlyZXQgPSByaW5nX2J1ZmZlcl9yZXNpemUobWF4X3RyLmJ1ZmZlciwgdmFsKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWludCByOwotCQkJY250ID0gcmV0OwotCQkJciA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShnbG9iYWxfdHJhY2UuYnVmZmVyLAotCQkJCQkgICAgICAgZ2xvYmFsX3RyYWNlLmVudHJpZXMpOwotCQkJaWYgKHIgPCAwKSB7Ci0JCQkJLyogQUFSR0ghIFdlIGFyZSBsZWZ0IHdpdGggZGlmZmVyZW50Ci0JCQkJICogc2l6ZSBtYXggYnVmZmVyISEhISAqLwotCQkJCVdBUk5fT04oMSk7Ci0JCQkJdHJhY2luZ19kaXNhYmxlZCA9IDE7Ci0JCQl9Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWdsb2JhbF90cmFjZS5lbnRyaWVzID0gdmFsOwogCX0KIAogCWZpbHAtPmZfcG9zICs9IGNudDsKQEAgLTMzOTMsNyArMzE2OCw3IEBACiAJaW50IHJldDsKIAl2YV9saXN0IGFyZ3M7CiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlyZXQgPSB0cmFjZV92cHJpbnRrKDAsIC0xLCBmbXQsIGFyZ3MpOworCXJldCA9IHRyYWNlX3ZwcmludGsoMCwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM0MzMsNDIgKzMyMDgsMjg4IEBACiAJcmV0dXJuIGNudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19tYXhfbGF0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21heF9sYXRfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX21heF9sYXRfcmVhZCwKIAkud3JpdGUJCT0gdHJhY2luZ19tYXhfbGF0X3dyaXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19jdHJsX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2N0cmxfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX2N0cmxfcmVhZCwKIAkud3JpdGUJCT0gdHJhY2luZ19jdHJsX3dyaXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2V0X3RyYWNlcl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2V0X3RyYWNlcl9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfc2V0X3RyYWNlX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfc2V0X3RyYWNlX3dyaXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19waXBlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX3BpcGVfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fcGlwZSwKIAkucG9sbAkJPSB0cmFjaW5nX3BvbGxfcGlwZSwKIAkucmVhZAkJPSB0cmFjaW5nX3JlYWRfcGlwZSwKKwkuc3BsaWNlX3JlYWQJPSB0cmFjaW5nX3NwbGljZV9yZWFkX3BpcGUsCiAJLnJlbGVhc2UJPSB0cmFjaW5nX3JlbGVhc2VfcGlwZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfZW50cmllc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19lbnRyaWVzX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19lbnRyaWVzX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfZW50cmllc193cml0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfbWFya19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19tYXJrX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLndyaXRlCQk9IHRyYWNpbmdfbWFya193cml0ZSwKIH07CiAKK3N0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8geworCXN0cnVjdCB0cmFjZV9hcnJheQkqdHI7CisJdm9pZAkJCSpzcGFyZTsKKwlpbnQJCQljcHU7CisJdW5zaWduZWQgaW50CQlyZWFkOworfTsKKworc3RhdGljIGludCB0cmFjaW5nX2J1ZmZlcnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgY3B1ID0gKGludCkobG9uZylpbm9kZS0+aV9wcml2YXRlOworCXN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm87CisKKwlpZiAodHJhY2luZ19kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJaW5mby0+dHIJPSAmZ2xvYmFsX3RyYWNlOworCWluZm8tPmNwdQk9IGNwdTsKKwlpbmZvLT5zcGFyZQk9IHJpbmdfYnVmZmVyX2FsbG9jX3JlYWRfcGFnZShpbmZvLT50ci0+YnVmZmVyKTsKKwkvKiBGb3JjZSByZWFkaW5nIHJpbmcgYnVmZmVyIGZvciBmaXJzdCByZWFkICovCisJaW5mby0+cmVhZAk9ICh1bnNpZ25lZCBpbnQpLTE7CisJaWYgKCFpbmZvLT5zcGFyZSkKKwkJZ290byBvdXQ7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbmZvOworCisJcmV0dXJuIDA7CisKKyBvdXQ6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit0cmFjaW5nX2J1ZmZlcnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9idWZmZXJfaW5mbyAqaW5mbyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgcG9zOworCXNzaXplX3QgcmV0OworCXNpemVfdCBzaXplOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIDA7CisKKwkvKiBEbyB3ZSBoYXZlIHByZXZpb3VzIHJlYWQgZGF0YSB0byByZWFkPyAqLworCWlmIChpbmZvLT5yZWFkIDwgUEFHRV9TSVpFKQorCQlnb3RvIHJlYWQ7CisKKwlpbmZvLT5yZWFkID0gMDsKKworCXJldCA9IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShpbmZvLT50ci0+YnVmZmVyLAorCQkJCSAgICAmaW5mby0+c3BhcmUsCisJCQkJICAgIGNvdW50LAorCQkJCSAgICBpbmZvLT5jcHUsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gMDsKKworCXBvcyA9IHJpbmdfYnVmZmVyX3BhZ2VfbGVuKGluZm8tPnNwYXJlKTsKKworCWlmIChwb3MgPCBQQUdFX1NJWkUpCisJCW1lbXNldChpbmZvLT5zcGFyZSArIHBvcywgMCwgUEFHRV9TSVpFIC0gcG9zKTsKKworcmVhZDoKKwlzaXplID0gUEFHRV9TSVpFIC0gaW5mby0+cmVhZDsKKwlpZiAoc2l6ZSA+IGNvdW50KQorCQlzaXplID0gY291bnQ7CisKKwlyZXQgPSBjb3B5X3RvX3VzZXIodWJ1ZiwgaW5mby0+c3BhcmUgKyBpbmZvLT5yZWFkLCBzaXplKTsKKwlpZiAocmV0ID09IHNpemUpCisJCXJldHVybiAtRUZBVUxUOworCXNpemUgLT0gcmV0OworCisJKnBwb3MgKz0gc2l6ZTsKKwlpbmZvLT5yZWFkICs9IHNpemU7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCB0cmFjaW5nX2J1ZmZlcnNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2J1ZmZlcl9pbmZvICppbmZvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmluZ19idWZmZXJfZnJlZV9yZWFkX3BhZ2UoaW5mby0+dHItPmJ1ZmZlciwgaW5mby0+c3BhcmUpOworCWtmcmVlKGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBidWZmZXJfcmVmIHsKKwlzdHJ1Y3QgcmluZ19idWZmZXIJKmJ1ZmZlcjsKKwl2b2lkCQkJKnBhZ2U7CisJaW50CQkJcmVmOworfTsKKworc3RhdGljIHZvaWQgYnVmZmVyX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQkgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGJ1ZmZlcl9yZWYgKnJlZiA9IChzdHJ1Y3QgYnVmZmVyX3JlZiAqKWJ1Zi0+cHJpdmF0ZTsKKworCWlmICgtLXJlZi0+cmVmKQorCQlyZXR1cm47CisKKwlyaW5nX2J1ZmZlcl9mcmVlX3JlYWRfcGFnZShyZWYtPmJ1ZmZlciwgcmVmLT5wYWdlKTsKKwlrZnJlZShyZWYpOworCWJ1Zi0+cHJpdmF0ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYnVmZmVyX3BpcGVfYnVmX3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcGlwZV9idWZfZ2V0KHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGJ1ZmZlcl9yZWYgKnJlZiA9IChzdHJ1Y3QgYnVmZmVyX3JlZiAqKWJ1Zi0+cHJpdmF0ZTsKKworCXJlZi0+cmVmKys7Cit9CisKKy8qIFBpcGUgYnVmZmVyIG9wZXJhdGlvbnMgZm9yIGEgYnVmZmVyLiAqLworc3RhdGljIHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGJ1ZmZlcl9waXBlX2J1Zl9vcHMgPSB7CisJLmNhbl9tZXJnZQkJPSAwLAorCS5tYXAJCQk9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAorCS51bm1hcAkJCT0gZ2VuZXJpY19waXBlX2J1Zl91bm1hcCwKKwkuY29uZmlybQkJPSBnZW5lcmljX3BpcGVfYnVmX2NvbmZpcm0sCisJLnJlbGVhc2UJCT0gYnVmZmVyX3BpcGVfYnVmX3JlbGVhc2UsCisJLnN0ZWFsCQkJPSBidWZmZXJfcGlwZV9idWZfc3RlYWwsCisJLmdldAkJCT0gYnVmZmVyX3BpcGVfYnVmX2dldCwKK307CisKKy8qCisgKiBDYWxsYmFjayBmcm9tIHNwbGljZV90b19waXBlKCksIGlmIHdlIG5lZWQgdG8gcmVsZWFzZSBzb21lIHBhZ2VzCisgKiBhdCB0aGUgZW5kIG9mIHRoZSBzcGQgaW4gY2FzZSB3ZSBlcnJvcidlZCBvdXQgaW4gZmlsbGluZyB0aGUgcGlwZS4KKyAqLworc3RhdGljIHZvaWQgYnVmZmVyX3NwZF9yZWxlYXNlKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICpzcGQsIHVuc2lnbmVkIGludCBpKQoreworCXN0cnVjdCBidWZmZXJfcmVmICpyZWYgPQorCQkoc3RydWN0IGJ1ZmZlcl9yZWYgKilzcGQtPnBhcnRpYWxbaV0ucHJpdmF0ZTsKKworCWlmICgtLXJlZi0+cmVmKQorCQlyZXR1cm47CisKKwlyaW5nX2J1ZmZlcl9mcmVlX3JlYWRfcGFnZShyZWYtPmJ1ZmZlciwgcmVmLT5wYWdlKTsKKwlrZnJlZShyZWYpOworCXNwZC0+cGFydGlhbFtpXS5wcml2YXRlID0gMDsKK30KKworc3RhdGljIHNzaXplX3QKK3RyYWNpbmdfYnVmZmVyc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90ICpwcG9zLAorCQkJICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCisJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBhcnRpYWxfcGFnZSBwYXJ0aWFsW1BJUEVfQlVGRkVSU107CisJc3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfQlVGRkVSU107CisJc3RydWN0IHNwbGljZV9waXBlX2Rlc2Mgc3BkID0geworCQkucGFnZXMJCT0gcGFnZXMsCisJCS5wYXJ0aWFsCT0gcGFydGlhbCwKKwkJLmZsYWdzCQk9IGZsYWdzLAorCQkub3BzCQk9ICZidWZmZXJfcGlwZV9idWZfb3BzLAorCQkuc3BkX3JlbGVhc2UJPSBidWZmZXJfc3BkX3JlbGVhc2UsCisJfTsKKwlzdHJ1Y3QgYnVmZmVyX3JlZiAqcmVmOworCWludCBzaXplLCBpOworCXNpemVfdCByZXQ7CisKKwkvKgorCSAqIFdlIGNhbid0IHNlZWsgb24gYSBidWZmZXIgaW5wdXQKKwkgKi8KKwlpZiAodW5saWtlbHkoKnBwb3MpKQorCQlyZXR1cm4gLUVTUElQRTsKKworCisJZm9yIChpID0gMDsgaSA8IFBJUEVfQlVGRkVSUyAmJiBsZW47IGkrKywgbGVuIC09IHNpemUpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCWludCByOworCisJCXJlZiA9IGt6YWxsb2Moc2l6ZW9mKCpyZWYpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyZWYpCisJCQlicmVhazsKKworCQlyZWYtPmJ1ZmZlciA9IGluZm8tPnRyLT5idWZmZXI7CisJCXJlZi0+cGFnZSA9IHJpbmdfYnVmZmVyX2FsbG9jX3JlYWRfcGFnZShyZWYtPmJ1ZmZlcik7CisJCWlmICghcmVmLT5wYWdlKSB7CisJCQlrZnJlZShyZWYpOworCQkJYnJlYWs7CisJCX0KKworCQlyID0gcmluZ19idWZmZXJfcmVhZF9wYWdlKHJlZi0+YnVmZmVyLCAmcmVmLT5wYWdlLAorCQkJCQkgIGxlbiwgaW5mby0+Y3B1LCAwKTsKKwkJaWYgKHIgPCAwKSB7CisJCQlyaW5nX2J1ZmZlcl9mcmVlX3JlYWRfcGFnZShyZWYtPmJ1ZmZlciwKKwkJCQkJCSAgIHJlZi0+cGFnZSk7CisJCQlrZnJlZShyZWYpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiB6ZXJvIG91dCBhbnkgbGVmdCBvdmVyIGRhdGEsIHRoaXMgaXMgZ29pbmcgdG8KKwkJICogdXNlciBsYW5kLgorCQkgKi8KKwkJc2l6ZSA9IHJpbmdfYnVmZmVyX3BhZ2VfbGVuKHJlZi0+cGFnZSk7CisJCWlmIChzaXplIDwgUEFHRV9TSVpFKQorCQkJbWVtc2V0KHJlZi0+cGFnZSArIHNpemUsIDAsIFBBR0VfU0laRSAtIHNpemUpOworCisJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocmVmLT5wYWdlKTsKKworCQlzcGQucGFnZXNbaV0gPSBwYWdlOworCQlzcGQucGFydGlhbFtpXS5sZW4gPSBQQUdFX1NJWkU7CisJCXNwZC5wYXJ0aWFsW2ldLm9mZnNldCA9IDA7CisJCXNwZC5wYXJ0aWFsW2ldLnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylyZWY7CisJCXNwZC5ucl9wYWdlcysrOworCX0KKworCXNwZC5ucl9wYWdlcyA9IGk7CisKKwkvKiBkaWQgd2UgcmVhZCBhbnl0aGluZz8gKi8KKwlpZiAoIXNwZC5ucl9wYWdlcykgeworCQlpZiAoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykKKwkJCXJldCA9IC1FQUdBSU47CisJCWVsc2UKKwkJCXJldCA9IDA7CisJCS8qIFRPRE86IGJsb2NrICovCisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3BsaWNlX3RvX3BpcGUocGlwZSwgJnNwZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2J1ZmZlcnNfZm9wcyA9IHsKKwkub3BlbgkJPSB0cmFjaW5nX2J1ZmZlcnNfb3BlbiwKKwkucmVhZAkJPSB0cmFjaW5nX2J1ZmZlcnNfcmVhZCwKKwkucmVsZWFzZQk9IHRyYWNpbmdfYnVmZmVyc19yZWxlYXNlLAorCS5zcGxpY2VfcmVhZAk9IHRyYWNpbmdfYnVmZmVyc19zcGxpY2VfcmVhZCwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKK307CisKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIAogaW50IF9fd2VhayBmdHJhY2VfYXJjaF9yZWFkX2R5bl9pbmZvKGNoYXIgKmJ1ZiwgaW50IHNpemUpCkBAIC0zNTAwLDcgKzM1MjEsNyBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2R5bl9pbmZvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2R5bl9pbmZvX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19yZWFkX2R5bl9pbmZvLAogfTsKQEAgLTM1MTUsNiArMzUzNiw5IEBACiAJaWYgKGRfdHJhY2VyKQogCQlyZXR1cm4gZF90cmFjZXI7CiAKKwlpZiAoIWRlYnVnZnNfaW5pdGlhbGl6ZWQoKSkKKwkJcmV0dXJuIE5VTEw7CisKIAlkX3RyYWNlciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidHJhY2luZyIsIE5VTEwpOwogCiAJaWYgKCFkX3RyYWNlciAmJiAhb25jZSkgewpAQCAtMzUyNiwxNSArMzU1MCwzNTAgQEAKIAlyZXR1cm4gZF90cmFjZXI7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkX3BlcmNwdTsKKworc3RydWN0IGRlbnRyeSAqdHJhY2luZ19kZW50cnlfcGVyY3B1KHZvaWQpCit7CisJc3RhdGljIGludCBvbmNlOworCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOworCisJaWYgKGRfcGVyY3B1KQorCQlyZXR1cm4gZF9wZXJjcHU7CisKKwlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKKworCWlmICghZF90cmFjZXIpCisJCXJldHVybiBOVUxMOworCisJZF9wZXJjcHUgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInBlcl9jcHUiLCBkX3RyYWNlcik7CisKKwlpZiAoIWRfcGVyY3B1ICYmICFvbmNlKSB7CisJCW9uY2UgPSAxOworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgZGlyZWN0b3J5ICdwZXJfY3B1J1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBkX3BlcmNwdTsKK30KKworc3RhdGljIHZvaWQgdHJhY2luZ19pbml0X2RlYnVnZnNfcGVyY3B1KGxvbmcgY3B1KQoreworCXN0cnVjdCBkZW50cnkgKmRfcGVyY3B1ID0gdHJhY2luZ19kZW50cnlfcGVyY3B1KCk7CisJc3RydWN0IGRlbnRyeSAqZW50cnksICpkX2NwdTsKKwkvKiBzdHJsZW4oY3B1KSArIE1BWChsb2cxMChjcHUpKSArICdcMCcgKi8KKwljaGFyIGNwdV9kaXJbN107CisKKwlpZiAoY3B1ID4gOTk5IHx8IGNwdSA8IDApCisJCXJldHVybjsKKworCXNwcmludGYoY3B1X2RpciwgImNwdSVsZCIsIGNwdSk7CisJZF9jcHUgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY3B1X2RpciwgZF9wZXJjcHUpOworCWlmICghZF9jcHUpIHsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICclcycgZW50cnlcbiIsIGNwdV9kaXIpOworCQlyZXR1cm47CisJfQorCisJLyogcGVyIGNwdSB0cmFjZV9waXBlICovCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZV9waXBlIiwgMDQ0NCwgZF9jcHUsCisJCQkJKHZvaWQgKikgY3B1LCAmdHJhY2luZ19waXBlX2ZvcHMpOworCWlmICghZW50cnkpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAndHJhY2VfcGlwZScgZW50cnlcbiIpOworCisJLyogcGVyIGNwdSB0cmFjZSAqLworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHJhY2UiLCAwNjQ0LCBkX2NwdSwKKwkJCQkodm9pZCAqKSBjcHUsICZ0cmFjaW5nX2ZvcHMpOworCWlmICghZW50cnkpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAndHJhY2UnIGVudHJ5XG4iKTsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHJhY2VfcGlwZV9yYXciLCAwNDQ0LCBkX2NwdSwKKwkJCQkgICAgKHZvaWQgKikgY3B1LCAmdHJhY2luZ19idWZmZXJzX2ZvcHMpOworCWlmICghZW50cnkpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAndHJhY2VfcGlwZV9yYXcnIGVudHJ5XG4iKTsKK30KKwogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIC8qIExldCBzZWxmdGVzdCBoYXZlIGFjY2VzcyB0byBzdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSAqLwogI2luY2x1ZGUgInRyYWNlX3NlbGZ0ZXN0LmMiCiAjZW5kaWYKIAorc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgeworCXN0cnVjdCB0cmFjZXJfb3B0CQkqb3B0OworCXN0cnVjdCB0cmFjZXJfZmxhZ3MJCSpmbGFnczsKKwlzdHJ1Y3QgZGVudHJ5CQkJKmVudHJ5OworfTsKKworc3RhdGljIHNzaXplX3QKK3RyYWNlX29wdGlvbnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCQlsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKnRvcHQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCisJaWYgKHRvcHQtPmZsYWdzLT52YWwgJiB0b3B0LT5vcHQtPmJpdCkKKwkJYnVmID0gIjFcbiI7CisJZWxzZQorCQlidWYgPSAiMFxuIjsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1ZiwgMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit0cmFjZV9vcHRpb25zX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJCSBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKnRvcHQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJY2hhciBidWZbNjRdOworCWludCByZXQ7CisKKwlpZiAoY250ID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjbnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWJ1ZltjbnRdID0gMDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gMDsKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwkJLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IGNsZWFyZWQgKi8KKwkJaWYgKCEodG9wdC0+ZmxhZ3MtPnZhbCAmIHRvcHQtPm9wdC0+Yml0KSkKKwkJCWJyZWFrOworCisJCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQlpZiAoY3VycmVudF90cmFjZS0+c2V0X2ZsYWcpCisJCQlyZXQgPSBjdXJyZW50X3RyYWNlLT5zZXRfZmxhZyh0b3B0LT5mbGFncy0+dmFsLAorCQkJCQkJICAgICAgdG9wdC0+b3B0LT5iaXQsIDApOworCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJdG9wdC0+ZmxhZ3MtPnZhbCAmPSB+dG9wdC0+b3B0LT5iaXQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IHNldCAqLworCQlpZiAodG9wdC0+ZmxhZ3MtPnZhbCAmIHRvcHQtPm9wdC0+Yml0KQorCQkJYnJlYWs7CisKKwkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJCWlmIChjdXJyZW50X3RyYWNlLT5zZXRfZmxhZykKKwkJCXJldCA9IGN1cnJlbnRfdHJhY2UtPnNldF9mbGFnKHRvcHQtPmZsYWdzLT52YWwsCisJCQkJCQkgICAgICB0b3B0LT5vcHQtPmJpdCwgMSk7CisJCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQl0b3B0LT5mbGFncy0+dmFsIHw9IHRvcHQtPm9wdC0+Yml0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpwcG9zICs9IGNudDsKKworCXJldHVybiBjbnQ7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2Vfb3B0aW9uc19mb3BzID0geworCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQgPSB0cmFjZV9vcHRpb25zX3JlYWQsCisJLndyaXRlID0gdHJhY2Vfb3B0aW9uc193cml0ZSwKK307CisKK3N0YXRpYyBzc2l6ZV90Cit0cmFjZV9vcHRpb25zX2NvcmVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCQlsb2ZmX3QgKnBwb3MpCit7CisJbG9uZyBpbmRleCA9IChsb25nKWZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWY7CisKKwlpZiAodHJhY2VfZmxhZ3MgJiAoMSA8PCBpbmRleCkpCisJCWJ1ZiA9ICIxXG4iOworCWVsc2UKKwkJYnVmID0gIjBcbiI7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBidWYsIDIpOworfQorCitzdGF0aWMgc3NpemVfdAordHJhY2Vfb3B0aW9uc19jb3JlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJCSBsb2ZmX3QgKnBwb3MpCit7CisJbG9uZyBpbmRleCA9IChsb25nKWZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls2NF07CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NudF0gPSAwOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwkJdHJhY2VfZmxhZ3MgJj0gfigxIDw8IGluZGV4KTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl0cmFjZV9mbGFncyB8PSAxIDw8IGluZGV4OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpwcG9zICs9IGNudDsKKworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNlX29wdGlvbnNfY29yZV9mb3BzID0geworCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQgPSB0cmFjZV9vcHRpb25zX2NvcmVfcmVhZCwKKwkud3JpdGUgPSB0cmFjZV9vcHRpb25zX2NvcmVfd3JpdGUsCit9OworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdHJhY2Vfb3B0aW9uc19pbml0X2RlbnRyeSh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOworCXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp0X29wdGlvbnM7CisKKwlpZiAodF9vcHRpb25zKQorCQlyZXR1cm4gdF9vcHRpb25zOworCisJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CisJaWYgKCFkX3RyYWNlcikKKwkJcmV0dXJuIE5VTEw7CisKKwl0X29wdGlvbnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm9wdGlvbnMiLCBkX3RyYWNlcik7CisJaWYgKCF0X29wdGlvbnMpIHsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSAnb3B0aW9ucydcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gdF9vcHRpb25zOworfQorCitzdGF0aWMgdm9pZAorY3JlYXRlX3RyYWNlX29wdGlvbl9maWxlKHN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICp0b3B0LAorCQkJIHN0cnVjdCB0cmFjZXJfZmxhZ3MgKmZsYWdzLAorCQkJIHN0cnVjdCB0cmFjZXJfb3B0ICpvcHQpCit7CisJc3RydWN0IGRlbnRyeSAqdF9vcHRpb25zOworCXN0cnVjdCBkZW50cnkgKmVudHJ5OworCisJdF9vcHRpb25zID0gdHJhY2Vfb3B0aW9uc19pbml0X2RlbnRyeSgpOworCWlmICghdF9vcHRpb25zKQorCQlyZXR1cm47CisKKwl0b3B0LT5mbGFncyA9IGZsYWdzOworCXRvcHQtPm9wdCA9IG9wdDsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShvcHQtPm5hbWUsIDA2NDQsIHRfb3B0aW9ucywgdG9wdCwKKwkJCQkgICAgJnRyYWNlX29wdGlvbnNfZm9wcyk7CisKKwl0b3B0LT5lbnRyeSA9IGVudHJ5OworCit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqCitjcmVhdGVfdHJhY2Vfb3B0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZXIgKnRyYWNlcikKK3sKKwlzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqdG9wdHM7CisJc3RydWN0IHRyYWNlcl9mbGFncyAqZmxhZ3M7CisJc3RydWN0IHRyYWNlcl9vcHQgKm9wdHM7CisJaW50IGNudDsKKworCWlmICghdHJhY2VyKQorCQlyZXR1cm4gTlVMTDsKKworCWZsYWdzID0gdHJhY2VyLT5mbGFnczsKKworCWlmICghZmxhZ3MgfHwgIWZsYWdzLT5vcHRzKQorCQlyZXR1cm4gTlVMTDsKKworCW9wdHMgPSBmbGFncy0+b3B0czsKKworCWZvciAoY250ID0gMDsgb3B0c1tjbnRdLm5hbWU7IGNudCsrKQorCQk7CisKKwl0b3B0cyA9IGtjYWxsb2MoY250ICsgMSwgc2l6ZW9mKCp0b3B0cyksIEdGUF9LRVJORUwpOworCWlmICghdG9wdHMpCisJCXJldHVybiBOVUxMOworCisJZm9yIChjbnQgPSAwOyBvcHRzW2NudF0ubmFtZTsgY250KyspCisJCWNyZWF0ZV90cmFjZV9vcHRpb25fZmlsZSgmdG9wdHNbY250XSwgZmxhZ3MsCisJCQkJCSAmb3B0c1tjbnRdKTsKKworCXJldHVybiB0b3B0czsKK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lfdHJhY2Vfb3B0aW9uX2ZpbGVzKHN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICp0b3B0cykKK3sKKwlpbnQgY250OworCisJaWYgKCF0b3B0cykKKwkJcmV0dXJuOworCisJZm9yIChjbnQgPSAwOyB0b3B0c1tjbnRdLm9wdDsgY250KyspIHsKKwkJaWYgKHRvcHRzW2NudF0uZW50cnkpCisJCQlkZWJ1Z2ZzX3JlbW92ZSh0b3B0c1tjbnRdLmVudHJ5KTsKKwl9CisKKwlrZnJlZSh0b3B0cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKK2NyZWF0ZV90cmFjZV9vcHRpb25fY29yZV9maWxlKGNvbnN0IGNoYXIgKm9wdGlvbiwgbG9uZyBpbmRleCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICp0X29wdGlvbnM7CisJc3RydWN0IGRlbnRyeSAqZW50cnk7CisKKwl0X29wdGlvbnMgPSB0cmFjZV9vcHRpb25zX2luaXRfZGVudHJ5KCk7CisJaWYgKCF0X29wdGlvbnMpCisJCXJldHVybiBOVUxMOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG9wdGlvbiwgMDY0NCwgdF9vcHRpb25zLCAodm9pZCAqKWluZGV4LAorCQkJCSAgICAmdHJhY2Vfb3B0aW9uc19jb3JlX2ZvcHMpOworCisJcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgX19pbml0IHZvaWQgY3JlYXRlX3RyYWNlX29wdGlvbnNfZGlyKHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqdF9vcHRpb25zOworCXN0cnVjdCBkZW50cnkgKmVudHJ5OworCWludCBpOworCisJdF9vcHRpb25zID0gdHJhY2Vfb3B0aW9uc19pbml0X2RlbnRyeSgpOworCWlmICghdF9vcHRpb25zKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyB0cmFjZV9vcHRpb25zW2ldOyBpKyspIHsKKwkJZW50cnkgPSBjcmVhdGVfdHJhY2Vfb3B0aW9uX2NvcmVfZmlsZSh0cmFjZV9vcHRpb25zW2ldLCBpKTsKKwkJaWYgKCFlbnRyeSkKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAlcyBlbnRyeVxuIiwKKwkJCQkgICB0cmFjZV9vcHRpb25zW2ldKTsKKwl9Cit9CisKIHN0YXRpYyBfX2luaXQgaW50IHRyYWNlcl9pbml0X2RlYnVnZnModm9pZCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKIAlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKwlpbnQgY3B1OwogCiAJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CiAKQEAgLTM1NDgsMTggKzM5MDcsMTUgQEAKIAlpZiAoIWVudHJ5KQogCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3RyYWNlX29wdGlvbnMnIGVudHJ5XG4iKTsKIAorCWNyZWF0ZV90cmFjZV9vcHRpb25zX2RpcigpOworCiAJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjaW5nX2NwdW1hc2siLCAwNjQ0LCBkX3RyYWNlciwKIAkJCQkgICAgTlVMTCwgJnRyYWNpbmdfY3B1bWFza19mb3BzKTsKIAlpZiAoIWVudHJ5KQogCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3RyYWNpbmdfY3B1bWFzaycgZW50cnlcbiIpOwogCi0JZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJsYXRlbmN5X3RyYWNlIiwgMDQ0NCwgZF90cmFjZXIsCi0JCQkJICAgICZnbG9iYWxfdHJhY2UsICZ0cmFjaW5nX2x0X2ZvcHMpOwotCWlmICghZW50cnkpCi0JCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAnbGF0ZW5jeV90cmFjZScgZW50cnlcbiIpOwotCi0JZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZSIsIDA0NDQsIGRfdHJhY2VyLAotCQkJCSAgICAmZ2xvYmFsX3RyYWNlLCAmdHJhY2luZ19mb3BzKTsKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlIiwgMDY0NCwgZF90cmFjZXIsCisJCQkJICh2b2lkICopIFRSQUNFX1BJUEVfQUxMX0NQVSwgJnRyYWNpbmdfZm9wcyk7CiAJaWYgKCFlbnRyeSkKIAkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICd0cmFjZScgZW50cnlcbiIpOwogCkBAIC0zNTkwLDggKzM5NDYsOCBAQAogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAnUkVBRE1FJyBlbnRyeVxuIik7CiAKLQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlX3BpcGUiLCAwNjQ0LCBkX3RyYWNlciwKLQkJCQkgICAgTlVMTCwgJnRyYWNpbmdfcGlwZV9mb3BzKTsKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlX3BpcGUiLCAwNDQ0LCBkX3RyYWNlciwKKwkJCSh2b2lkICopIFRSQUNFX1BJUEVfQUxMX0NQVSwgJnRyYWNpbmdfcGlwZV9mb3BzKTsKIAlpZiAoIWVudHJ5KQogCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgogCQkJICAgIid0cmFjZV9waXBlJyBlbnRyeVxuIik7CkBAIC0zNjE5LDc4ICszOTc1LDEzIEBACiAjaWZkZWYgQ09ORklHX1NZU1BST0ZfVFJBQ0VSCiAJaW5pdF90cmFjZXJfc3lzcHJvZl9kZWJ1Z2ZzKGRfdHJhY2VyKTsKICNlbmRpZgorCisJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KQorCQl0cmFjaW5nX2luaXRfZGVidWdmc19wZXJjcHUoY3B1KTsKKwogCXJldHVybiAwOwogfQogCi1pbnQgdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBpbnQgZGVwdGgsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQotewotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2VfYnVmX2xvY2spOwotCXN0YXRpYyBjaGFyIHRyYWNlX2J1ZltUUkFDRV9CVUZfU0laRV07Ci0KLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JaW50IGNwdSwgbGVuID0gMCwgc2l6ZSwgcGM7Ci0Jc3RydWN0IHByaW50X2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQotCWlmICh0cmFjaW5nX2Rpc2FibGVkIHx8IHRyYWNpbmdfc2VsZnRlc3RfcnVubmluZykKLQkJcmV0dXJuIDA7Ci0KLQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZGF0YSA9IHRyLT5kYXRhW2NwdV07Ci0KLQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCi0JCWdvdG8gb3V0OwotCi0JcGF1c2VfZ3JhcGhfdHJhY2luZygpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cmFjZV9idWZfbG9jaywgaXJxX2ZsYWdzKTsKLQlsZW4gPSB2c25wcmludGYodHJhY2VfYnVmLCBUUkFDRV9CVUZfU0laRSwgZm10LCBhcmdzKTsKLQotCWxlbiA9IG1pbihsZW4sIFRSQUNFX0JVRl9TSVpFLTEpOwotCXRyYWNlX2J1ZltsZW5dID0gMDsKLQotCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIGxlbiArIDE7Ci0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZSwgJmlycV9mbGFncyk7Ci0JaWYgKCFldmVudCkKLQkJZ290byBvdXRfdW5sb2NrOwotCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgaXJxX2ZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9QUklOVDsKLQllbnRyeS0+aXAJCQk9IGlwOwotCWVudHJ5LT5kZXB0aAkJCT0gZGVwdGg7Ci0KLQltZW1jcHkoJmVudHJ5LT5idWYsIHRyYWNlX2J1ZiwgbGVuKTsKLQllbnRyeS0+YnVmW2xlbl0gPSAwOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0KLSBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRyYWNlX2J1Zl9sb2NrLCBpcnFfZmxhZ3MpOwotCXVucGF1c2VfZ3JhcGhfdHJhY2luZygpOwotIG91dDoKLQlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7Ci0KLQlyZXR1cm4gbGVuOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfdnByaW50ayk7Ci0KLWludCBfX2Z0cmFjZV9wcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IHJldDsKLQl2YV9saXN0IGFwOwotCi0JaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5USykpCi0JCXJldHVybiAwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcmV0ID0gdHJhY2VfdnByaW50ayhpcCwgdGFza19jdXJyX3JldF9zdGFjayhjdXJyZW50KSwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX19mdHJhY2VfcHJpbnRrKTsKLQogc3RhdGljIGludCB0cmFjZV9wYW5pY19oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICp1bnVzZWQpCiB7CkBAIC0zNzUwLDE0ICs0MDQxLDE1IEBACiAKIAlwcmludGsoS0VSTl9UUkFDRSAiJXMiLCBzLT5idWZmZXIpOwogCi0JdHJhY2Vfc2VxX3Jlc2V0KHMpOworCXRyYWNlX3NlcV9pbml0KHMpOwogfQogCi12b2lkIGZ0cmFjZV9kdW1wKHZvaWQpCitzdGF0aWMgdm9pZCBfX2Z0cmFjZV9kdW1wKGJvb2wgZGlzYWJsZV90cmFjaW5nKQogewogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZnRyYWNlX2R1bXBfbG9jayk7CiAJLyogdXNlIHN0YXRpYyBiZWNhdXNlIGl0ZXIgY2FuIGJlIGEgYml0IGJpZyBmb3IgdGhlIHN0YWNrICovCiAJc3RhdGljIHN0cnVjdCB0cmFjZV9pdGVyYXRvciBpdGVyOworCXVuc2lnbmVkIGludCBvbGRfdXNlcm9iajsKIAlzdGF0aWMgaW50IGR1bXBfcmFuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNudCA9IDAsIGNwdTsKQEAgLTM3NjksMjEgKzQwNjEsMjYgQEAKIAogCWR1bXBfcmFuID0gMTsKIAotCS8qIE5vIHR1cm5pbmcgYmFjayEgKi8KIAl0cmFjaW5nX29mZigpOwotCWZ0cmFjZV9raWxsKCk7CisKKwlpZiAoZGlzYWJsZV90cmFjaW5nKQorCQlmdHJhY2Vfa2lsbCgpOwogCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CiAJCWF0b21pY19pbmMoJmdsb2JhbF90cmFjZS5kYXRhW2NwdV0tPmRpc2FibGVkKTsKIAl9CiAKKwlvbGRfdXNlcm9iaiA9IHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fVVNFUk9CSjsKKwogCS8qIGRvbid0IGxvb2sgYXQgdXNlciBtZW1vcnkgaW4gcGFuaWMgbW9kZSAqLwogCXRyYWNlX2ZsYWdzICY9IH5UUkFDRV9JVEVSX1NZTV9VU0VST0JKOwogCiAJcHJpbnRrKEtFUk5fVFJBQ0UgIkR1bXBpbmcgZnRyYWNlIGJ1ZmZlcjpcbiIpOwogCisJLyogU2ltdWxhdGUgdGhlIGl0ZXJhdG9yICovCiAJaXRlci50ciA9ICZnbG9iYWxfdHJhY2U7CiAJaXRlci50cmFjZSA9IGN1cnJlbnRfdHJhY2U7CisJaXRlci5jcHVfZmlsZSA9IFRSQUNFX1BJUEVfQUxMX0NQVTsKIAogCS8qCiAJICogV2UgbmVlZCB0byBzdG9wIGFsbCB0cmFjaW5nIG9uIGFsbCBDUFVTIHRvIHJlYWQgdGhlCkBAIC0zODE5LDEzICs0MTE2LDMwIEBACiAJZWxzZQogCQlwcmludGsoS0VSTl9UUkFDRSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAorCS8qIFJlLWVuYWJsZSB0cmFjaW5nIGlmIHJlcXVlc3RlZCAqLworCWlmICghZGlzYWJsZV90cmFjaW5nKSB7CisJCXRyYWNlX2ZsYWdzIHw9IG9sZF91c2Vyb2JqOworCisJCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgeworCQkJYXRvbWljX2RlYygmZ2xvYmFsX3RyYWNlLmRhdGFbY3B1XS0+ZGlzYWJsZWQpOworCQl9CisJCXRyYWNpbmdfb24oKTsKKwl9CisKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnRyYWNlX2R1bXBfbG9jaywgZmxhZ3MpOwogfQogCisvKiBCeSBkZWZhdWx0OiBkaXNhYmxlIHRyYWNpbmcgYWZ0ZXIgdGhlIGR1bXAgKi8KK3ZvaWQgZnRyYWNlX2R1bXAodm9pZCkKK3sKKwlfX2Z0cmFjZV9kdW1wKHRydWUpOworfQorCiBfX2luaXQgc3RhdGljIGludCB0cmFjZXJfYWxsb2NfYnVmZmVycyh2b2lkKQogewogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CisJaW50IHJpbmdfYnVmX3NpemU7CiAJaW50IGk7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKQEAgLTM4MzUsMTEgKzQxNDksMjEgQEAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0cmFjaW5nX2NwdW1hc2ssIEdGUF9LRVJORUwpKQogCQlnb3RvIG91dF9mcmVlX2J1ZmZlcl9tYXNrOwogCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdHJhY2luZ19yZWFkZXJfY3B1bWFzaywgR0ZQX0tFUk5FTCkpCisJCWdvdG8gb3V0X2ZyZWVfdHJhY2luZ19jcHVtYXNrOworCisJLyogVG8gc2F2ZSBtZW1vcnksIGtlZXAgdGhlIHJpbmcgYnVmZmVyIHNpemUgdG8gaXRzIG1pbmltdW0gKi8KKwlpZiAocmluZ19idWZmZXJfZXhwYW5kZWQpCisJCXJpbmdfYnVmX3NpemUgPSB0cmFjZV9idWZfc2l6ZTsKKwllbHNlCisJCXJpbmdfYnVmX3NpemUgPSAxOworCiAJY3B1bWFza19jb3B5KHRyYWNpbmdfYnVmZmVyX21hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTsKIAljcHVtYXNrX2NvcHkodHJhY2luZ19jcHVtYXNrLCBjcHVfYWxsX21hc2spOworCWNwdW1hc2tfY2xlYXIodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7CiAKIAkvKiBUT0RPOiBtYWtlIHRoZSBudW1iZXIgb2YgYnVmZmVycyBob3QgcGx1Z2dhYmxlIHdpdGggQ1BVUyAqLwotCWdsb2JhbF90cmFjZS5idWZmZXIgPSByaW5nX2J1ZmZlcl9hbGxvYyh0cmFjZV9idWZfc2l6ZSwKKwlnbG9iYWxfdHJhY2UuYnVmZmVyID0gcmluZ19idWZmZXJfYWxsb2MocmluZ19idWZfc2l6ZSwKIAkJCQkJCSAgIFRSQUNFX0JVRkZFUl9GTEFHUyk7CiAJaWYgKCFnbG9iYWxfdHJhY2UuYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgcmluZyBidWZmZXIhXG4iKTsKQEAgLTM4NTAsNyArNDE3NCw3IEBACiAKIAogI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCi0JbWF4X3RyLmJ1ZmZlciA9IHJpbmdfYnVmZmVyX2FsbG9jKHRyYWNlX2J1Zl9zaXplLAorCW1heF90ci5idWZmZXIgPSByaW5nX2J1ZmZlcl9hbGxvYyhyaW5nX2J1Zl9zaXplLAogCQkJCQkgICAgIFRSQUNFX0JVRkZFUl9GTEFHUyk7CiAJaWYgKCFtYXhfdHIuYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidHJhY2VyOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWF4IHJpbmcgYnVmZmVyIVxuIik7CkBAIC0zODcxLDE0ICs0MTk1LDEwIEBACiAJdHJhY2VfaW5pdF9jbWRsaW5lcygpOwogCiAJcmVnaXN0ZXJfdHJhY2VyKCZub3BfdHJhY2UpOworCWN1cnJlbnRfdHJhY2UgPSAmbm9wX3RyYWNlOwogI2lmZGVmIENPTkZJR19CT09UX1RSQUNFUgogCXJlZ2lzdGVyX3RyYWNlcigmYm9vdF90cmFjZXIpOwotCWN1cnJlbnRfdHJhY2UgPSAmYm9vdF90cmFjZXI7Ci0JY3VycmVudF90cmFjZS0+aW5pdCgmZ2xvYmFsX3RyYWNlKTsKLSNlbHNlCi0JY3VycmVudF90cmFjZSA9ICZub3BfdHJhY2U7CiAjZW5kaWYKLQogCS8qIEFsbCBzZWVtcyBPSywgZW5hYmxlIHRyYWNpbmcgKi8KIAl0cmFjaW5nX2Rpc2FibGVkID0gMDsKIApAQCAtMzg4NiwxNCArNDIwNiwzOCBAQAogCQkJCSAgICAgICAmdHJhY2VfcGFuaWNfbm90aWZpZXIpOwogCiAJcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZ0cmFjZV9kaWVfbm90aWZpZXIpOwotCXJldCA9IDA7CisKKwlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfY3B1bWFzazoKKwlmcmVlX2NwdW1hc2tfdmFyKHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOworb3V0X2ZyZWVfdHJhY2luZ19jcHVtYXNrOgogCWZyZWVfY3B1bWFza192YXIodHJhY2luZ19jcHVtYXNrKTsKIG91dF9mcmVlX2J1ZmZlcl9tYXNrOgogCWZyZWVfY3B1bWFza192YXIodHJhY2luZ19idWZmZXJfbWFzayk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KKworX19pbml0IHN0YXRpYyBpbnQgY2xlYXJfYm9vdF90cmFjZXIodm9pZCkKK3sKKwkvKgorCSAqIFRoZSBkZWZhdWx0IHRyYWNlciBhdCBib290IGJ1ZmZlciBpcyBhbiBpbml0IHNlY3Rpb24uCisJICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gbGF0ZWluaXQuIElmIHdlIGRpZCBub3QKKwkgKiBmaW5kIHRoZSBib290IHRyYWNlciwgdGhlbiBjbGVhciBpdCBvdXQsIHRvIHByZXZlbnQKKwkgKiBsYXRlciByZWdpc3RyYXRpb24gZnJvbSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciB0aGF0IGlzCisJICogYWJvdXQgdG8gYmUgZnJlZWQuCisJICovCisJaWYgKCFkZWZhdWx0X2Jvb3R1cF90cmFjZXIpCisJCXJldHVybiAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZnRyYWNlIGJvb3R1cCB0cmFjZXIgJyVzJyBub3QgcmVnaXN0ZXJlZC5cbiIsCisJICAgICAgIGRlZmF1bHRfYm9vdHVwX3RyYWNlcik7CisJZGVmYXVsdF9ib290dXBfdHJhY2VyID0gTlVMTDsKKworCXJldHVybiAwOworfQorCiBlYXJseV9pbml0Y2FsbCh0cmFjZXJfYWxsb2NfYnVmZmVycyk7CiBmc19pbml0Y2FsbCh0cmFjZXJfaW5pdF9kZWJ1Z2ZzKTsKK2xhdGVfaW5pdGNhbGwoY2xlYXJfYm9vdF90cmFjZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmggYi9rZXJuZWwvdHJhY2UvdHJhY2UuaAppbmRleCA0ZDNkMzgxLi5jYjBjZTNmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuaApAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxsaW51eC9tbWlvdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDx0cmFjZS9ib290Lmg+CisjaW5jbHVkZSA8dHJhY2Uva21lbXRyYWNlLmg+CisjaW5jbHVkZSA8dHJhY2UvcG93ZXIuaD4KIAogZW51bSB0cmFjZV90eXBlIHsKIAlfX1RSQUNFX0ZJUlNUX1RZUEUgPSAwLApAQCAtMTYsOSArMTgsOSBAQAogCVRSQUNFX0ZOLAogCVRSQUNFX0NUWCwKIAlUUkFDRV9XQUtFLAotCVRSQUNFX0NPTlQsCiAJVFJBQ0VfU1RBQ0ssCiAJVFJBQ0VfUFJJTlQsCisJVFJBQ0VfQlBSSU5ULAogCVRSQUNFX1NQRUNJQUwsCiAJVFJBQ0VfTU1JT19SVywKIAlUUkFDRV9NTUlPX01BUCwKQEAgLTI5LDkgKzMxLDE0IEBACiAJVFJBQ0VfR1JBUEhfRU5ULAogCVRSQUNFX1VTRVJfU1RBQ0ssCiAJVFJBQ0VfSFdfQlJBTkNIRVMsCisJVFJBQ0VfU1lTQ0FMTF9FTlRFUiwKKwlUUkFDRV9TWVNDQUxMX0VYSVQsCisJVFJBQ0VfS01FTV9BTExPQywKKwlUUkFDRV9LTUVNX0ZSRUUsCiAJVFJBQ0VfUE9XRVIsCisJVFJBQ0VfQkxLLAogCi0JX19UUkFDRV9MQVNUX1RZUEUKKwlfX1RSQUNFX0xBU1RfVFlQRSwKIH07CiAKIC8qCkBAIC00Miw3ICs0OSw2IEBACiAgKi8KIHN0cnVjdCB0cmFjZV9lbnRyeSB7CiAJdW5zaWduZWQgY2hhcgkJdHlwZTsKLQl1bnNpZ25lZCBjaGFyCQljcHU7CiAJdW5zaWduZWQgY2hhcgkJZmxhZ3M7CiAJdW5zaWduZWQgY2hhcgkJcHJlZW1wdF9jb3VudDsKIAlpbnQJCQlwaWQ7CkBAIC02MCwxMyArNjYsMTMgQEAKIAogLyogRnVuY3Rpb24gY2FsbCBlbnRyeSAqLwogc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgewotCXN0cnVjdCB0cmFjZV9lbnRyeQkJCWVudDsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJCWVudDsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudAkJZ3JhcGhfZW50OwogfTsKIAogLyogRnVuY3Rpb24gcmV0dXJuIGVudHJ5ICovCiBzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSB7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5CQkJZW50OworCXN0cnVjdCB0cmFjZV9lbnRyeQkJZW50OwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0CQlyZXQ7CiB9OwogZXh0ZXJuIHN0cnVjdCB0cmFjZXIgYm9vdF90cmFjZXI7CkBAIC0xMTIsMTIgKzExOCwxOCBAQAogfTsKIAogLyoKLSAqIGZ0cmFjZV9wcmludGsgZW50cnk6CisgKiB0cmFjZV9wcmludGsgZW50cnk6CiAgKi8KK3N0cnVjdCBicHJpbnRfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJdW5zaWduZWQgbG9uZwkJaXA7CisJY29uc3QgY2hhcgkJKmZtdDsKKwl1MzIJCQlidWZbXTsKK307CisKIHN0cnVjdCBwcmludF9lbnRyeSB7CiAJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKIAl1bnNpZ25lZCBsb25nCQlpcDsKLQlpbnQJCQlkZXB0aDsKIAljaGFyCQkJYnVmW107CiB9OwogCkBAIC0xNzAsMTUgKzE4Miw0NSBAQAogCXN0cnVjdCBwb3dlcl90cmFjZQlzdGF0ZV9kYXRhOwogfTsKIAorc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKKwllbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQ7CisJdW5zaWduZWQgbG9uZyBjYWxsX3NpdGU7CisJY29uc3Qgdm9pZCAqcHRyOworCXNpemVfdCBieXRlc19yZXE7CisJc2l6ZV90IGJ5dGVzX2FsbG9jOworCWdmcF90IGdmcF9mbGFnczsKKwlpbnQgbm9kZTsKK307CisKK3N0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKKwllbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQ7CisJdW5zaWduZWQgbG9uZyBjYWxsX3NpdGU7CisJY29uc3Qgdm9pZCAqcHRyOworfTsKKworc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgeworCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CisJaW50CQkJbnI7CisJdW5zaWduZWQgbG9uZwkJYXJnc1tdOworfTsKKworc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKKwlpbnQJCQlucjsKKwl1bnNpZ25lZCBsb25nCQlyZXQ7Cit9OworCisKIC8qCiAgKiB0cmFjZV9mbGFnX3R5cGUgaXMgYW4gZW51bWVyYXRpb24gdGhhdCBob2xkcyBkaWZmZXJlbnQKICAqIHN0YXRlcyB3aGVuIGEgdHJhY2Ugb2NjdXJzLiBUaGVzZSBhcmU6CiAgKiAgSVJRU19PRkYJCS0gaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkCi0gKiAgSVJRU19OT1NVUFBPUlQgCS0gYXJjaCBkb2VzIG5vdCBzdXBwb3J0IGlycXNfZGlzYWJsZWRfZmxhZ3MKKyAqICBJUlFTX05PU1VQUE9SVAktIGFyY2ggZG9lcyBub3Qgc3VwcG9ydCBpcnFzX2Rpc2FibGVkX2ZsYWdzCiAgKiAgTkVFRF9SRVNDRUQJCS0gcmVzY2hlZHVsZSBpcyByZXF1ZXN0ZWQKICAqICBIQVJESVJRCQktIGluc2lkZSBhbiBpbnRlcnJ1cHQgaGFuZGxlcgogICogIFNPRlRJUlEJCS0gaW5zaWRlIGEgc29mdGlycSBoYW5kbGVyCi0gKiAgQ09OVAkJLSBtdWx0aXBsZSBlbnRyaWVzIGhvbGQgdGhlIHRyYWNlIGl0ZW0KICAqLwogZW51bSB0cmFjZV9mbGFnX3R5cGUgewogCVRSQUNFX0ZMQUdfSVJRU19PRkYJCT0gMHgwMSwKQEAgLTE4Niw3ICsyMjgsNiBAQAogCVRSQUNFX0ZMQUdfTkVFRF9SRVNDSEVECQk9IDB4MDQsCiAJVFJBQ0VfRkxBR19IQVJESVJRCQk9IDB4MDgsCiAJVFJBQ0VfRkxBR19TT0ZUSVJRCQk9IDB4MTAsCi0JVFJBQ0VfRkxBR19DT05UCQkJPSAweDIwLAogfTsKIAogI2RlZmluZSBUUkFDRV9CVUZfU0laRQkJMTAyNApAQCAtMTk4LDYgKzIzOSw3IEBACiAgKi8KIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgewogCWF0b21pY190CQlkaXNhYmxlZDsKKwl2b2lkCQkJKmJ1ZmZlcl9wYWdlOwkvKiByaW5nIGJ1ZmZlciBzcGFyZSAqLwogCiAJLyogdGhlc2UgZmllbGRzIGdldCBjb3BpZWQgaW50byBtYXgtdHJhY2U6ICovCiAJdW5zaWduZWQgbG9uZwkJdHJhY2VfaWR4OwpAQCAtMjYyLDEwICszMDQsMTAgQEAKIAlkbyB7CQkJCQkJCQlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGZ0cmFjZV9lbnRyeSwgVFJBQ0VfRk4pOwlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGN0eF9zd2l0Y2hfZW50cnksIDApOwlcCi0JCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX2ZpZWxkX2NvbnQsIFRSQUNFX0NPTlQpOyBcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHN0YWNrX2VudHJ5LCBUUkFDRV9TVEFDSyk7CVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdXNlcnN0YWNrX2VudHJ5LCBUUkFDRV9VU0VSX1NUQUNLKTtcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHByaW50X2VudHJ5LCBUUkFDRV9QUklOVCk7CVwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgYnByaW50X2VudHJ5LCBUUkFDRV9CUFJJTlQpOwlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHNwZWNpYWxfZW50cnksIDApOwkJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB0cmFjZV9tbWlvdHJhY2VfcncsCQlcCiAJCQkgIFRSQUNFX01NSU9fUlcpOwkJCQlcCkBAIC0yNzksNyArMzIxLDE1IEBACiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnksCVwKIAkJCSAgVFJBQ0VfR1JBUEhfUkVUKTsJCVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgaHdfYnJhbmNoX2VudHJ5LCBUUkFDRV9IV19CUkFOQ0hFUyk7XAotIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfcG93ZXIsIFRSQUNFX1BPV0VSKTsgXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB0cmFjZV9wb3dlciwgVFJBQ0VfUE9XRVIpOyBcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSwJXAorCQkJICBUUkFDRV9LTUVNX0FMTE9DKTsJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSwJXAorCQkJICBUUkFDRV9LTUVNX0ZSRUUpOwlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIsCQlcCisJCQkgIFRSQUNFX1NZU0NBTExfRU5URVIpOwkJCQlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCwJCVwKKwkJCSAgVFJBQ0VfU1lTQ0FMTF9FWElUKTsJCQkJXAogCQlfX2Z0cmFjZV9iYWRfdHlwZSgpOwkJCQkJXAogCX0gd2hpbGUgKDApCiAKQEAgLTI4Nyw3ICszMzcsOCBAQAogZW51bSBwcmludF9saW5lX3QgewogCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FCT0gMCwJLyogUmV0cnkgYWZ0ZXIgZmx1c2hpbmcgdGhlIHNlcSAqLwogCVRSQUNFX1RZUEVfSEFORExFRAk9IDEsCi0JVFJBQ0VfVFlQRV9VTkhBTkRMRUQJPSAyCS8qIFJlbGF5IHRvIG90aGVyIG91dHB1dCBmdW5jdGlvbnMgKi8KKwlUUkFDRV9UWVBFX1VOSEFORExFRAk9IDIsCS8qIFJlbGF5IHRvIG90aGVyIG91dHB1dCBmdW5jdGlvbnMgKi8KKwlUUkFDRV9UWVBFX05PX0NPTlNVTUUJPSAzCS8qIEhhbmRsZWQgYnV0IGFzayB0byBub3QgY29uc3VtZSAqLwogfTsKIAogCkBAIC0yOTcsOCArMzQ4LDggQEAKICAqIGZsYWdzIHZhbHVlIGluIHN0cnVjdCB0cmFjZXJfZmxhZ3MuCiAgKi8KIHN0cnVjdCB0cmFjZXJfb3B0IHsKLQljb25zdCBjaGFyIAkqbmFtZTsgLyogV2lsbCBhcHBlYXIgb24gdGhlIHRyYWNlX29wdGlvbnMgZmlsZSAqLwotCXUzMiAJCWJpdDsgLyogTWFzayBhc3NpZ25lZCBpbiB2YWwgZmllbGQgaW4gdHJhY2VyX2ZsYWdzICovCisJY29uc3QgY2hhcgkqbmFtZTsgLyogV2lsbCBhcHBlYXIgb24gdGhlIHRyYWNlX29wdGlvbnMgZmlsZSAqLworCXUzMgkJYml0OyAvKiBNYXNrIGFzc2lnbmVkIGluIHZhbCBmaWVsZCBpbiB0cmFjZXJfZmxhZ3MgKi8KIH07CiAKIC8qCkBAIC0zMDcsMjggKzM1OCw1MSBAQAogICovCiBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIHsKIAl1MzIJCQl2YWw7Ci0Jc3RydWN0IHRyYWNlcl9vcHQgCSpvcHRzOworCXN0cnVjdCB0cmFjZXJfb3B0CSpvcHRzOwogfTsKIAogLyogTWFrZXMgbW9yZSBlYXN5IHRvIGRlZmluZSBhIHRyYWNlciBvcHQgKi8KICNkZWZpbmUgVFJBQ0VSX09QVChzLCBiKQkubmFtZSA9ICNzLCAuYml0ID0gYgogCi0vKgotICogQSBzcGVjaWZpYyB0cmFjZXIsIHJlcHJlc2VudGVkIGJ5IG1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGEgdHJhY2UgYXJyYXk6CisKKy8qKgorICogc3RydWN0IHRyYWNlciAtIGEgc3BlY2lmaWMgdHJhY2VyIGFuZCBpdHMgY2FsbGJhY2tzIHRvIGludGVyYWN0IHdpdGggZGVidWdmcworICogQG5hbWU6IHRoZSBuYW1lIGNob3NlbiB0byBzZWxlY3QgaXQgb24gdGhlIGF2YWlsYWJsZV90cmFjZXJzIGZpbGUKKyAqIEBpbml0OiBjYWxsZWQgd2hlbiBvbmUgc3dpdGNoZXMgdG8gdGhpcyB0cmFjZXIgKGVjaG8gbmFtZSA+IGN1cnJlbnRfdHJhY2VyKQorICogQHJlc2V0OiBjYWxsZWQgd2hlbiBvbmUgc3dpdGNoZXMgdG8gYW5vdGhlciB0cmFjZXIKKyAqIEBzdGFydDogY2FsbGVkIHdoZW4gdHJhY2luZyBpcyB1bnBhdXNlZCAoZWNobyAxID4gdHJhY2luZ19lbmFibGVkKQorICogQHN0b3A6IGNhbGxlZCB3aGVuIHRyYWNpbmcgaXMgcGF1c2VkIChlY2hvIDAgPiB0cmFjaW5nX2VuYWJsZWQpCisgKiBAb3BlbjogY2FsbGVkIHdoZW4gdGhlIHRyYWNlIGZpbGUgaXMgb3BlbmVkCisgKiBAcGlwZV9vcGVuOiBjYWxsZWQgd2hlbiB0aGUgdHJhY2VfcGlwZSBmaWxlIGlzIG9wZW5lZAorICogQHdhaXRfcGlwZTogb3ZlcnJpZGUgaG93IHRoZSB1c2VyIHdhaXRzIGZvciB0cmFjZXMgb24gdHJhY2VfcGlwZQorICogQGNsb3NlOiBjYWxsZWQgd2hlbiB0aGUgdHJhY2UgZmlsZSBpcyByZWxlYXNlZAorICogQHJlYWQ6IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHJlYWQgY2FsbGJhY2sgb24gdHJhY2VfcGlwZQorICogQHNwbGljZV9yZWFkOiBvdmVycmlkZSB0aGUgZGVmYXVsdCBzcGxpY2VfcmVhZCBjYWxsYmFjayBvbiB0cmFjZV9waXBlCisgKiBAc2VsZnRlc3Q6IHNlbGZ0ZXN0IHRvIHJ1biBvbiBib290IChzZWUgdHJhY2Vfc2VsZnRlc3QuYykKKyAqIEBwcmludF9oZWFkZXJzOiBvdmVycmlkZSB0aGUgZmlyc3QgbGluZXMgdGhhdCBkZXNjcmliZSB5b3VyIGNvbHVtbnMKKyAqIEBwcmludF9saW5lOiBjYWxsYmFjayB0aGF0IHByaW50cyBhIHRyYWNlCisgKiBAc2V0X2ZsYWc6IHNpZ25hbHMgb25lIG9mIHlvdXIgcHJpdmF0ZSBmbGFncyBjaGFuZ2VkICh0cmFjZV9vcHRpb25zIGZpbGUpCisgKiBAZmxhZ3M6IHlvdXIgcHJpdmF0ZSBmbGFncwogICovCiBzdHJ1Y3QgdHJhY2VyIHsKIAljb25zdCBjaGFyCQkqbmFtZTsKLQkvKiBZb3VyIHRyYWNlciBzaG91bGQgcmFpc2UgYSB3YXJuaW5nIGlmIGluaXQgZmFpbHMgKi8KIAlpbnQJCQkoKmluaXQpKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogCXZvaWQJCQkoKnJlc2V0KShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIAl2b2lkCQkJKCpzdGFydCkoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiAJdm9pZAkJCSgqc3RvcCkoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiAJdm9pZAkJCSgqb3Blbikoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKIAl2b2lkCQkJKCpwaXBlX29wZW4pKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CisJdm9pZAkJCSgqd2FpdF9waXBlKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwogCXZvaWQJCQkoKmNsb3NlKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwogCXNzaXplX3QJCQkoKnJlYWQpKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAogCQkJCQlzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpOworCXNzaXplX3QJCQkoKnNwbGljZV9yZWFkKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkJICAgICAgIGxvZmZfdCAqcHBvcywKKwkJCQkJICAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJCSAgICAgICBzaXplX3QgbGVuLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVAogCWludAkJCSgqc2VsZnRlc3QpKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICAgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CkBAIC0zMzksNyArNDEzLDggQEAKIAlpbnQJCQkoKnNldF9mbGFnKSh1MzIgb2xkX2ZsYWdzLCB1MzIgYml0LCBpbnQgc2V0KTsKIAlzdHJ1Y3QgdHJhY2VyCQkqbmV4dDsKIAlpbnQJCQlwcmludF9tYXg7Ci0Jc3RydWN0IHRyYWNlcl9mbGFncyAJKmZsYWdzOworCXN0cnVjdCB0cmFjZXJfZmxhZ3MJKmZsYWdzOworCXN0cnVjdCB0cmFjZXJfc3RhdAkqc3RhdHM7CiB9OwogCiBzdHJ1Y3QgdHJhY2Vfc2VxIHsKQEAgLTM0OCw2ICs0MjMsMTYgQEAKIAl1bnNpZ25lZCBpbnQJCXJlYWRwb3M7CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQKK3RyYWNlX3NlcV9pbml0KHN0cnVjdCB0cmFjZV9zZXEgKnMpCit7CisJcy0+bGVuID0gMDsKKwlzLT5yZWFkcG9zID0gMDsKK30KKworCisjZGVmaW5lIFRSQUNFX1BJUEVfQUxMX0NQVQktMQorCiAvKgogICogVHJhY2UgaXRlcmF0b3IgLSB1c2VkIGJ5IHByaW50b3V0IHJvdXRpbmVzIHdobyBwcmVzZW50IHRyYWNlCiAgKiByZXN1bHRzIHRvIHVzZXJzIGFuZCB3aGljaCByb3V0aW5lcyBtaWdodCBzbGVlcCwgZXRjOgpAQCAtMzU2LDYgKzQ0MSw4IEBACiAJc3RydWN0IHRyYWNlX2FycmF5CSp0cjsKIAlzdHJ1Y3QgdHJhY2VyCQkqdHJhY2U7CiAJdm9pZAkJCSpwcml2YXRlOworCWludAkJCWNwdV9maWxlOworCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIJKmJ1ZmZlcl9pdGVyW05SX0NQVVNdOwogCiAJLyogVGhlIGJlbG93IGlzIHplcm9lZCBvdXQgaW4gcGlwZV9yZWFkICovCkBAIC0zNzEsNiArNDU4LDcgQEAKIAljcHVtYXNrX3Zhcl90CQlzdGFydGVkOwogfTsKIAoraW50IHRyYWNlcl9pbml0KHN0cnVjdCB0cmFjZXIgKnQsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogaW50IHRyYWNpbmdfaXNfZW5hYmxlZCh2b2lkKTsKIHZvaWQgdHJhY2Vfd2FrZV91cCh2b2lkKTsKIHZvaWQgdHJhY2luZ19yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBpbnQgY3B1KTsKQEAgLTM3OSwyNiArNDY3LDUwIEBACiBzdHJ1Y3QgZGVudHJ5ICp0cmFjaW5nX2luaXRfZGVudHJ5KHZvaWQpOwogdm9pZCBpbml0X3RyYWNlcl9zeXNwcm9mX2RlYnVnZnMoc3RydWN0IGRlbnRyeSAqZF90cmFjZXIpOwogCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQ7CisKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCQkJICAgIGludCBwYyk7Cit2b2lkIHRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKKwkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOworCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgordHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKHVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwordm9pZCB0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7Cit2b2lkIHRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOworCiBzdHJ1Y3QgdHJhY2VfZW50cnkgKnRyYWNpbmdfZ2V0X3RyYWNlX2VudHJ5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJCQkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKTsKKworc3RydWN0IHRyYWNlX2VudHJ5ICp0cmFjZV9maW5kX25leHRfZW50cnkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgIGludCAqZW50X2NwdSwgdTY0ICplbnRfdHMpOworCiB2b2lkIHRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJICBpbnQgcGMpOwogCit2b2lkIGRlZmF1bHRfd2FpdF9waXBlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7Cit2b2lkIHBvbGxfd2FpdF9waXBlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CisKIHZvaWQgZnRyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJCQkgICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGlwLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7CiB2b2lkIHRyYWNpbmdfc2NoZWRfc3dpdGNoX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7CiB2b2lkIHRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogCiB2b2lkIHRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKndha2VlLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyLAogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7CkBAIC00MDgsMTQgKzUyMCwxMiBAQAogCQkgICB1bnNpZ25lZCBsb25nIGFyZzIsCiAJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMywgaW50IHBjKTsKIHZvaWQgdHJhY2VfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJICAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCSAgICB1bnNpZ25lZCBsb25nIGlwLAogCQkgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsCiAJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwogCiB2b2lkIHRyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UpOwogaW50IHRyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSk7Ci12b2lkIHRyYWNlX2h3X2JyYW5jaChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCB1NjQgZnJvbSwgdTY0IHRvKTsKIAogdm9pZCB0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKHZvaWQpOwogdm9pZCB0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQodm9pZCk7CkBAIC00MzQsMTUgKzU0NCwxMSBAQAogdm9pZCB1cGRhdGVfbWF4X3RyX3NpbmdsZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNwdSk7CiAKLWV4dGVybiBjeWNsZV90IGZ0cmFjZV9ub3coaW50IGNwdSk7Cit2b2lkIF9fdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJICAgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJICAgaW50IHNraXAsIGludCBwYyk7CiAKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCi12b2lkIHRyYWNpbmdfc3RhcnRfZnVuY3Rpb25fdHJhY2Uodm9pZCk7Ci12b2lkIHRyYWNpbmdfc3RvcF9mdW5jdGlvbl90cmFjZSh2b2lkKTsKLSNlbHNlCi0jIGRlZmluZSB0cmFjaW5nX3N0YXJ0X2Z1bmN0aW9uX3RyYWNlKCkJCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHRyYWNpbmdfc3RvcF9mdW5jdGlvbl90cmFjZSgpCQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKK2V4dGVybiBjeWNsZV90IGZ0cmFjZV9ub3coaW50IGNwdSk7CiAKICNpZmRlZiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCiB0eXBlZGVmIHZvaWQKQEAgLTQ1NiwxMCArNTYyLDEwIEBACiAJdm9pZAkJCQkqcHJpdmF0ZTsKIAlzdHJ1Y3QgdHJhY2VyX3N3aXRjaF9vcHMJKm5leHQ7CiB9OwotCi1jaGFyICp0cmFjZV9maW5kX2NtZGxpbmUoaW50IHBpZCk7CiAjZW5kaWYgLyogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiAqLwogCitleHRlcm4gdm9pZCB0cmFjZV9maW5kX2NtZGxpbmUoaW50IHBpZCwgY2hhciBjb21tW10pOworCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiBleHRlcm4gdW5zaWduZWQgbG9uZyBmdHJhY2VfdXBkYXRlX3RvdF9jbnQ7CiAjZGVmaW5lIERZTl9GVFJBQ0VfVEVTVF9OQU1FIHRyYWNlX3NlbGZ0ZXN0X2R5bmFtaWNfdGVzdF9mdW5jCkBAIC00NjksNiArNTc1LDggQEAKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVAogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKK2V4dGVybiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbl9ncmFwaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKKwkJCQkJCSBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIGV4dGVybiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9pcnFzb2ZmKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3ByZWVtcHRvZmYoc3RydWN0IHRyYWNlciAqdHJhY2UsCkBAIC00ODgsMTggKzU5NiwxMSBAQAogI2VuZGlmIC8qIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUICovCiAKIGV4dGVybiB2b2lkICpoZWFkX3BhZ2Uoc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSk7Ci1leHRlcm4gaW50IHRyYWNlX3NlcV9wcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pOwotZXh0ZXJuIHZvaWQgdHJhY2Vfc2VxX3ByaW50X2NvbnQoc3RydWN0IHRyYWNlX3NlcSAqcywKLQkJCQkgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKLQotZXh0ZXJuIGludAotc2VxX3ByaW50X2lwX3N5bShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBsb25nIGlwLAotCQl1bnNpZ25lZCBsb25nIHN5bV9mbGFncyk7Ci1leHRlcm4gc3NpemVfdCB0cmFjZV9zZXFfdG9fdXNlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjaGFyIF9fdXNlciAqdWJ1ZiwKLQkJCQkgc2l6ZV90IGNudCk7CiBleHRlcm4gbG9uZyBuczJ1c2VjcyhjeWNsZV90IG5zZWMpOwogZXh0ZXJuIGludAotdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBpbnQgZGVwdGgsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKK3RyYWNlX3ZicHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKK2V4dGVybiBpbnQKK3RyYWNlX3ZwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0cmFjZV9mbGFnczsKIApAQCAtNTgwLDcgKzY4MSwxMSBAQAogCVRSQUNFX0lURVJfQU5OT1RBVEUJCT0gMHgyMDAwLAogCVRSQUNFX0lURVJfVVNFUlNUQUNLVFJBQ0UgICAgICAgPSAweDQwMDAsCiAJVFJBQ0VfSVRFUl9TWU1fVVNFUk9CSiAgICAgICAgICA9IDB4ODAwMCwKLQlUUkFDRV9JVEVSX1BSSU5US19NU0dPTkxZCT0gMHgxMDAwMAorCVRSQUNFX0lURVJfUFJJTlRLX01TR09OTFkJPSAweDEwMDAwLAorCVRSQUNFX0lURVJfQ09OVEVYVF9JTkZPCQk9IDB4MjAwMDAsIC8qIFByaW50IHBpZC9jcHUvdGltZSAqLworCVRSQUNFX0lURVJfTEFURU5DWV9GTVQJCT0gMHg0MDAwMCwKKwlUUkFDRV9JVEVSX0dMT0JBTF9DTEsJCT0gMHg4MDAwMCwKKwlUUkFDRV9JVEVSX1NMRUVQX1RJTUUJCT0gMHgxMDAwMDAsCiB9OwogCiAvKgpAQCAtNjAxLDEyICs3MDYsMTIgQEAKICAqIHByZWVtcHRfZW5hYmxlIChhZnRlciBhIGRpc2FibGUpLCBhIHNjaGVkdWxlIG1pZ2h0IHRha2UgcGxhY2UKICAqIGNhdXNpbmcgYW4gaW5maW5pdGUgcmVjdXJzaW9uLgogICoKLSAqIFRvIHByZXZlbnQgdGhpcywgd2UgcmVhZCB0aGUgbmVlZF9yZWNzaGVkIGZsYWcgYmVmb3JlCisgKiBUbyBwcmV2ZW50IHRoaXMsIHdlIHJlYWQgdGhlIG5lZWRfcmVzY2hlZCBmbGFnIGJlZm9yZQogICogZGlzYWJsaW5nIHByZWVtcHRpb24uIFdoZW4gd2Ugd2FudCB0byBlbmFibGUgcHJlZW1wdGlvbiB3ZQogICogY2hlY2sgdGhlIGZsYWcsIGlmIGl0IGlzIHNldCwgdGhlbiB3ZSBjYWxsIHByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQuCiAgKiBPdGhlcndpc2UsIHdlIGNhbGwgcHJlZW1wdF9lbmFibGUuCiAgKgotICogVGhlIHJhdGlvbmFsIGZvciBkb2luZyB0aGUgYWJvdmUgaXMgdGhhdCBpZiBuZWVkIHJlc2NoZWQgaXMgc2V0CisgKiBUaGUgcmF0aW9uYWwgZm9yIGRvaW5nIHRoZSBhYm92ZSBpcyB0aGF0IGlmIG5lZWRfcmVzY2hlZCBpcyBzZXQKICAqIGFuZCB3ZSBoYXZlIHlldCB0byByZXNjaGVkdWxlLCB3ZSBhcmUgZWl0aGVyIGluIGFuIGF0b21pYyBsb2NhdGlvbgogICogKHdoZXJlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGZvciBzY2hlZHVsaW5nKSBvciB3ZSBhcmUgaW5zaWRlCiAgKiB0aGUgc2NoZWR1bGVyIGFuZCBkbyBub3Qgd2FudCB0byByZXNjaGVkLgpAQCAtNjI3LDcgKzczMiw3IEBACiAgKgogICogVGhpcyBpcyBhIHNjaGVkdWxlciBzYWZlIHdheSB0byBlbmFibGUgcHJlZW1wdGlvbiBhbmQgbm90IG1pc3MKICAqIGFueSBwcmVlbXB0aW9uIGNoZWNrcy4gVGhlIGRpc2FibGVkIHNhdmVkIHRoZSBzdGF0ZSBvZiBwcmVlbXB0aW9uLgotICogSWYgcmVzY2hlZCBpcyBzZXQsIHRoZW4gd2Ugd2VyZSBlaXRoZXIgaW5zaWRlIGFuIGF0b21pYyBvcgorICogSWYgcmVzY2hlZCBpcyBzZXQsIHRoZW4gd2UgYXJlIGVpdGhlciBpbnNpZGUgYW4gYXRvbWljIG9yCiAgKiBhcmUgaW5zaWRlIHRoZSBzY2hlZHVsZXIgKHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBzY2hlZHVsZWQKICAqIG90aGVyd2lzZSkuIEluIHRoaXMgY2FzZSwgd2UgZG8gbm90IHdhbnQgdG8gY2FsbCBub3JtYWwKICAqIHByZWVtcHRfZW5hYmxlLCBidXQgcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCBpbnN0ZWFkLgpAQCAtNjY0LDQgKzc2OSwxMTggQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQlJBTkNIX1RSQUNFUiAqLwogCisvKiBzZXQgcmluZyBidWZmZXJzIHRvIGRlZmF1bHQgc2l6ZSBpZiBub3QgYWxyZWFkeSBkb25lIHNvICovCitpbnQgdHJhY2luZ191cGRhdGVfYnVmZmVycyh2b2lkKTsKKworLyogdHJhY2UgZXZlbnQgdHlwZSBiaXQgZmllbGRzLCBub3QgbnVtZXJpYyAqLworZW51bSB7CisJVFJBQ0VfRVZFTlRfVFlQRV9QUklOVEYJCT0gMSwKKwlUUkFDRV9FVkVOVF9UWVBFX1JBVwkJPSAyLAorfTsKKworc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOworCWNoYXIJCQkqbmFtZTsKKwljaGFyCQkJKnR5cGU7CisJaW50CQkJb2Zmc2V0OworCWludAkJCXNpemU7Cit9OworCitzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgeworCWNoYXIJCQkqbmFtZTsKKwljaGFyCQkJKnN5c3RlbTsKKwlzdHJ1Y3QgZGVudHJ5CQkqZGlyOworCWludAkJCWVuYWJsZWQ7CisJaW50CQkJKCpyZWdmdW5jKSh2b2lkKTsKKwl2b2lkCQkJKCp1bnJlZ2Z1bmMpKHZvaWQpOworCWludAkJCWlkOworCWludAkJCSgqcmF3X2luaXQpKHZvaWQpOworCWludAkJCSgqc2hvd19mb3JtYXQpKHN0cnVjdCB0cmFjZV9zZXEgKnMpOworCWludAkJCSgqZGVmaW5lX2ZpZWxkcykodm9pZCk7CisJc3RydWN0IGxpc3RfaGVhZAlmaWVsZHM7CisJc3RydWN0IGZpbHRlcl9wcmVkCSoqcHJlZHM7CisKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCWF0b21pY190CXByb2ZpbGVfY291bnQ7CisJaW50CQkoKnByb2ZpbGVfZW5hYmxlKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CisJdm9pZAkJKCpwcm9maWxlX2Rpc2FibGUpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKKyNlbmRpZgorfTsKKworc3RydWN0IGV2ZW50X3N1YnN5c3RlbSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWNvbnN0IGNoYXIJCSpuYW1lOworCXN0cnVjdCBkZW50cnkJCSplbnRyeTsKKwlzdHJ1Y3QgZmlsdGVyX3ByZWQJKipwcmVkczsKK307CisKKyNkZWZpbmUgZXZlbnRzX2Zvcl9lYWNoKGV2ZW50KQkJCQkJCVwKKwlmb3IgKGV2ZW50ID0gX19zdGFydF9mdHJhY2VfZXZlbnRzOwkJCQlcCisJICAgICAodW5zaWduZWQgbG9uZylldmVudCA8ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9mdHJhY2VfZXZlbnRzOyBcCisJICAgICBldmVudCsrKQorCisjZGVmaW5lIE1BWF9GSUxURVJfUFJFRCA4CisKK3N0cnVjdCBmaWx0ZXJfcHJlZDsKKwordHlwZWRlZiBpbnQgKCpmaWx0ZXJfcHJlZF9mbl90KSAoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCk7CisKK3N0cnVjdCBmaWx0ZXJfcHJlZCB7CisJZmlsdGVyX3ByZWRfZm5fdCBmbjsKKwl1NjQgdmFsOworCWNoYXIgKnN0cl92YWw7CisJaW50IHN0cl9sZW47CisJY2hhciAqZmllbGRfbmFtZTsKKwlpbnQgb2Zmc2V0OworCWludCBub3Q7CisJaW50IG9yOworCWludCBjb21wb3VuZDsKKwlpbnQgY2xlYXI7Cit9OworCitpbnQgdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY2hhciAqdHlwZSwKKwkJICAgICAgIGNoYXIgKm5hbWUsIGludCBvZmZzZXQsIGludCBzaXplKTsKK2V4dGVybiB2b2lkIGZpbHRlcl9mcmVlX3ByZWQoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKTsKK2V4dGVybiB2b2lkIGZpbHRlcl9wcmludF9wcmVkcyhzdHJ1Y3QgZmlsdGVyX3ByZWQgKipwcmVkcywKKwkJCSAgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKK2V4dGVybiBpbnQgZmlsdGVyX3BhcnNlKGNoYXIgKipwYnVmLCBzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpOworZXh0ZXJuIGludCBmaWx0ZXJfYWRkX3ByZWQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJICAgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKTsKK2V4dGVybiB2b2lkIGZpbHRlcl9mcmVlX3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CitleHRlcm4gaW50IGZpbHRlcl9tYXRjaF9wcmVkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKnJlYyk7CitleHRlcm4gdm9pZCBmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtKTsKK2V4dGVybiBpbnQgZmlsdGVyX2FkZF9zdWJzeXN0ZW1fcHJlZChzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0sCisJCQkJICAgICBzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpOworCit2b2lkIGV2ZW50X3RyYWNlX3ByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fc3RhcnRfZnRyYWNlX2V2ZW50c1tdOworZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3N0b3BfZnRyYWNlX2V2ZW50c1tdOworCisjZGVmaW5lIGZvcl9lYWNoX2V2ZW50KGV2ZW50KQkJCQkJCVwKKwlmb3IgKGV2ZW50ID0gX19zdGFydF9mdHJhY2VfZXZlbnRzOwkJCQlcCisJICAgICAodW5zaWduZWQgbG9uZylldmVudCA8ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9mdHJhY2VfZXZlbnRzOyBcCisJICAgICBldmVudCsrKQorCitleHRlcm4gY29uc3QgY2hhciAqX19zdGFydF9fX3RyYWNlX2JwcmludGtfZm10W107CitleHRlcm4gY29uc3QgY2hhciAqX19zdG9wX19fdHJhY2VfYnByaW50a19mbXRbXTsKKworLyoKKyAqIFRoZSBkb3VibGUgX19idWlsdGluX2NvbnN0YW50X3AgaXMgYmVjYXVzZSBnY2Mgd2lsbCBnaXZlIHVzIGFuIGVycm9yCisgKiBpZiB3ZSB0cnkgdG8gYWxsb2NhdGUgdGhlIHN0YXRpYyB2YXJpYWJsZSB0byBmbXQgaWYgaXQgaXMgbm90IGEKKyAqIGNvbnN0YW50LiBFdmVuIHdpdGggdGhlIG91dGVyIGlmIHN0YXRlbWVudCBvcHRpbWl6aW5nIG91dC4KKyAqLworI2RlZmluZSBldmVudF90cmFjZV9wcmludGsoaXAsIGZtdCwgYXJncy4uLikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlfX3RyYWNlX3ByaW50a19jaGVja19mb3JtYXQoZm10LCAjI2FyZ3MpOwkJCVwKKwl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpOwkJCQlcCisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZtdCkpIHsJCQkJXAorCQlzdGF0aWMgY29uc3QgY2hhciAqdHJhY2VfcHJpbnRrX2ZtdAkJCVwKKwkJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlX3ByaW50a19mbXQiKSkpID0JXAorCQkJX19idWlsdGluX2NvbnN0YW50X3AoZm10KSA/IGZtdCA6IE5VTEw7CQlcCisJCQkJCQkJCQlcCisJCV9fdHJhY2VfYnByaW50ayhpcCwgdHJhY2VfcHJpbnRrX2ZtdCwgIyNhcmdzKTsJCVwKKwl9IGVsc2UJCQkJCQkJCVwKKwkJX190cmFjZV9wcmludGsoaXAsIGZtdCwgIyNhcmdzKTsJCQlcCit9IHdoaWxlICgwKQorCiAjZW5kaWYgLyogX0xJTlVYX0tFUk5FTF9UUkFDRV9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYwppbmRleCAzNjZjOGMzLi43YTMwZmM0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIAogc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheSAqYm9vdF90cmFjZTsKIHN0YXRpYyBib29sIHByZV9pbml0Y2FsbHNfZmluaXNoZWQ7CkBAIC0yNywxMyArMjgsMTMgQEAKIAogdm9pZCBlbmFibGVfYm9vdF90cmFjZSh2b2lkKQogewotCWlmIChwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQorCWlmIChib290X3RyYWNlICYmIHByZV9pbml0Y2FsbHNfZmluaXNoZWQpCiAJCXRyYWNpbmdfc3RhcnRfc2NoZWRfc3dpdGNoX3JlY29yZCgpOwogfQogCiB2b2lkIGRpc2FibGVfYm9vdF90cmFjZSh2b2lkKQogewotCWlmIChwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQorCWlmIChib290X3RyYWNlICYmIHByZV9pbml0Y2FsbHNfZmluaXNoZWQpCiAJCXRyYWNpbmdfc3RvcF9zY2hlZF9zd2l0Y2hfcmVjb3JkKCk7CiB9CiAKQEAgLTQyLDYgKzQzLDkgQEAKIAlpbnQgY3B1OwogCWJvb3RfdHJhY2UgPSB0cjsKIAorCWlmICghdHIpCisJCXJldHVybiAwOworCiAJZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3Bvc3NpYmxlX21hc2spCiAJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CiAKQEAgLTEyOCwxMCArMTMyLDkgQEAKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0cmFjZV9ib290X2NhbGwgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBib290X3RyYWNlOwogCi0JaWYgKCFwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQorCWlmICghdHIgfHwgIXByZV9pbml0Y2FsbHNfZmluaXNoZWQpCiAJCXJldHVybjsKIAogCS8qIEdldCBpdHMgbmFtZSBub3cgc2luY2UgdGhpcyBmdW5jdGlvbiBjb3VsZApAQCAtMTQwLDE4ICsxNDMsMTMgQEAKIAlzcHJpbnRfc3ltYm9sKGJ0LT5mdW5jLCAodW5zaWduZWQgbG9uZylmbik7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQk9PVF9DQUxMLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dDsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIDApOwotCWVudHJ5LT5lbnQudHlwZSA9IFRSQUNFX0JPT1RfQ0FMTDsKIAllbnRyeS0+Ym9vdF9jYWxsID0gKmJ0OwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7Ci0KKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOwogIG91dDoKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQpAQCAtMTYwLDI3ICsxNTgsMjEgQEAKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0cmFjZV9ib290X3JldCAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGJvb3RfdHJhY2U7CiAKLQlpZiAoIXByZV9pbml0Y2FsbHNfZmluaXNoZWQpCisJaWYgKCF0ciB8fCAhcHJlX2luaXRjYWxsc19maW5pc2hlZCkKIAkJcmV0dXJuOwogCiAJc3ByaW50X3N5bWJvbChidC0+ZnVuYywgKHVuc2lnbmVkIGxvbmcpZm4pOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0JPT1RfUkVULAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dDsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIDApOwotCWVudHJ5LT5lbnQudHlwZSA9IFRSQUNFX0JPT1RfUkVUOwogCWVudHJ5LT5ib290X3JldCA9ICpidDsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCi0JdHJhY2Vfd2FrZV91cCgpOwotCisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKICBvdXQ6CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwppbmRleCA2YzAwZmViLi5hZDhjMjJlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCkBAIC0xNCwxMiArMTQsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxhc20vbG9jYWwuaD4KKwogI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfc3RhdC5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgogCiAjaWZkZWYgQ09ORklHX0JSQU5DSF9UUkFDRVIKIAorc3RhdGljIHN0cnVjdCB0cmFjZXIgYnJhbmNoX3RyYWNlOwogc3RhdGljIGludCBicmFuY2hfdHJhY2luZ19lbmFibGVkIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGJyYW5jaF90cmFjaW5nX211dGV4KTsKKwogc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheSAqYnJhbmNoX3RyYWNlcjsKIAogc3RhdGljIHZvaWQKQEAgLTI4LDcgKzMzLDcgQEAKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYnJhbmNoX3RyYWNlcjsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0cmFjZV9icmFuY2ggKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGlycV9mbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHUsIHBjOwogCWNvbnN0IGNoYXIgKnA7CiAKQEAgLTQ3LDE1ICs1MiwxMyBAQAogCWlmIChhdG9taWNfaW5jX3JldHVybigmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpICE9IDEpCiAJCWdvdG8gb3V0OwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0JSQU5DSCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dDsKIAotCXBjID0gcHJlZW1wdF9jb3VudCgpOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCT0gVFJBQ0VfQlJBTkNIOwogCiAJLyogU3RyaXAgb2ZmIHRoZSBwYXRoLCBvbmx5IHNhdmUgdGhlIGZpbGUgKi8KIAlwID0gZi0+ZmlsZSArIHN0cmxlbihmLT5maWxlKTsKQEAgLTcwLDcgKzczLDcgQEAKIAllbnRyeS0+bGluZSA9IGYtPmxpbmU7CiAJZW50cnktPmNvcnJlY3QgPSB2YWwgPT0gZXhwZWN0OwogCi0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKIAogIG91dDoKIAlhdG9taWNfZGVjKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CkBAIC04OCw4ICs5MSw2IEBACiAKIGludCBlbmFibGVfYnJhbmNoX3RyYWNpbmcoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlpbnQgcmV0ID0gMDsKLQogCW11dGV4X2xvY2soJmJyYW5jaF90cmFjaW5nX211dGV4KTsKIAlicmFuY2hfdHJhY2VyID0gdHI7CiAJLyoKQEAgLTEwMCw3ICsxMDEsNyBAQAogCWJyYW5jaF90cmFjaW5nX2VuYWJsZWQrKzsKIAltdXRleF91bmxvY2soJmJyYW5jaF90cmFjaW5nX211dGV4KTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZGlzYWJsZV9icmFuY2hfdHJhY2luZyh2b2lkKQpAQCAtMTI4LDExICsxMjksNiBAQAogCiBzdGF0aWMgaW50IGJyYW5jaF90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOwotCiAJc3RhcnRfYnJhbmNoX3RyYWNlKHRyKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MiwyMiArMTM4LDUzIEBACiAJc3RvcF9icmFuY2hfdHJhY2UodHIpOwogfQogCi1zdHJ1Y3QgdHJhY2VyIGJyYW5jaF90cmFjZSBfX3JlYWRfbW9zdGx5ID0KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9icmFuY2hfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCB0cmFjZV9icmFuY2ggKmZpZWxkOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAodHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiWyVzXSAlczolczolZFxuIiwKKwkJCSAgICAgZmllbGQtPmNvcnJlY3QgPyAiICBvayAgIiA6ICIgTUlTUyAiLAorCQkJICAgICBmaWVsZC0+ZnVuYywKKwkJCSAgICAgZmllbGQtPmZpbGUsCisJCQkgICAgIGZpZWxkLT5saW5lKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX2JyYW5jaF9ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9CUkFOQ0gsCisJLnRyYWNlCQk9IHRyYWNlX2JyYW5jaF9wcmludCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyIGJyYW5jaF90cmFjZSBfX3JlYWRfbW9zdGx5ID0KIHsKIAkubmFtZQkJPSAiYnJhbmNoIiwKIAkuaW5pdAkJPSBicmFuY2hfdHJhY2VfaW5pdCwKIAkucmVzZXQJCT0gYnJhbmNoX3RyYWNlX3Jlc2V0LAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QJPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2JyYW5jaCwKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QgKi8KIH07CiAKLV9faW5pdCBzdGF0aWMgaW50IGluaXRfYnJhbmNoX3RyYWNlKHZvaWQpCitfX2luaXQgc3RhdGljIGludCBpbml0X2JyYW5jaF90cmFjZXIodm9pZCkKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZ0cmFjZV9icmFuY2hfZXZlbnQpOworCWlmICghcmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciAiCisJCQkJICAgICJicmFuY2ggZXZlbnRzXG4iKTsKKwkJcmV0dXJuIDE7CisJfQogCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJmJyYW5jaF90cmFjZSk7CiB9CitkZXZpY2VfaW5pdGNhbGwoaW5pdF9icmFuY2hfdHJhY2VyKTsKIAotZGV2aWNlX2luaXRjYWxsKGluaXRfYnJhbmNoX3RyYWNlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lCiB2b2lkIHRyYWNlX2xpa2VseV9jb25kaXRpb24oc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqZiwgaW50IHZhbCwgaW50IGV4cGVjdCkKQEAgLTE4Myw2NSArMjEwLDM4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ0cmFjZV9saWtlbHlfdXBkYXRlKTsKIAotc3RydWN0IGZ0cmFjZV9wb2ludGVyIHsKLQl2b2lkCQkqc3RhcnQ7Ci0Jdm9pZAkJKnN0b3A7Ci0JaW50CQloaXQ7Ci19OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9hbm5vdGF0ZWRfYnJhbmNoX3Byb2ZpbGVbXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RvcF9hbm5vdGF0ZWRfYnJhbmNoX3Byb2ZpbGVbXTsKIAotc3RhdGljIHZvaWQgKgotdF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCitzdGF0aWMgaW50IGFubm90YXRlZF9icmFuY2hfc3RhdF9oZWFkZXJzKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQljb25zdCBzdHJ1Y3QgZnRyYWNlX3BvaW50ZXIgKmYgPSBtLT5wcml2YXRlOwotCXN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKnAgPSB2OwotCi0JKCpwb3MpKys7Ci0KLQlpZiAodiA9PSAodm9pZCAqKTEpCi0JCXJldHVybiBmLT5zdGFydDsKLQotCSsrcDsKLQotCWlmICgodm9pZCAqKXAgPj0gKHZvaWQgKilmLT5zdG9wKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBwOwotfQotCi1zdGF0aWMgdm9pZCAqdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQotewotCXZvaWQgKnQgPSAodm9pZCAqKTE7Ci0JbG9mZl90IGwgPSAwOwotCi0JZm9yICg7IHQgJiYgbCA8ICpwb3M7IHQgPSB0X25leHQobSwgdCwgJmwpKQotCQk7Ci0KLQlyZXR1cm4gdDsKLX0KLQotc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKLXsKLX0KLQotc3RhdGljIGludCB0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotCWNvbnN0IHN0cnVjdCBmdHJhY2VfcG9pbnRlciAqZnAgPSBtLT5wcml2YXRlOwotCXN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKnAgPSB2OwotCWNvbnN0IGNoYXIgKmY7Ci0JbG9uZyBwZXJjZW50OwotCi0JaWYgKHYgPT0gKHZvaWQgKikxKSB7Ci0JCWlmIChmcC0+aGl0KQotCQkJc2VxX3ByaW50ZihtLCAiICAgbWlzcyAgICAgIGhpdCAgICAlJSAiKTsKLQkJZWxzZQotCQkJc2VxX3ByaW50ZihtLCAiIGNvcnJlY3QgaW5jb3JyZWN0ICAlJSAiKTsKLQkJc2VxX3ByaW50ZihtLCAiICAgICAgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICIKKwlzZXFfcHJpbnRmKG0sICIgY29ycmVjdCBpbmNvcnJlY3QgICUlICIpOworCXNlcV9wcmludGYobSwgIiAgICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAiCiAJCQkgICAgICAiICBGaWxlICAgICAgICAgICAgICBMaW5lXG4iCiAJCQkgICAgICAiIC0tLS0tLS0gLS0tLS0tLS0tICAtICIKIAkJCSAgICAgICIgICAgICAgLS0tLS0tLS0gICAgICAgICAgICAgICAgIgogCQkJICAgICAgIiAgLS0tLSAgICAgICAgICAgICAgLS0tLVxuIik7Ci0JCXJldHVybiAwOwotCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBsb25nIGdldF9pbmNvcnJlY3RfcGVyY2VudChzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICpwKQoreworCWxvbmcgcGVyY2VudDsKKworCWlmIChwLT5jb3JyZWN0KSB7CisJCXBlcmNlbnQgPSBwLT5pbmNvcnJlY3QgKiAxMDA7CisJCXBlcmNlbnQgLz0gcC0+Y29ycmVjdCArIHAtPmluY29ycmVjdDsKKwl9IGVsc2UKKwkJcGVyY2VudCA9IHAtPmluY29ycmVjdCA/IDEwMCA6IC0xOworCisJcmV0dXJuIHBlcmNlbnQ7Cit9CisKK3N0YXRpYyBpbnQgYnJhbmNoX3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqcCA9IHY7CisJY29uc3QgY2hhciAqZjsKKwlsb25nIHBlcmNlbnQ7CiAKIAkvKiBPbmx5IHByaW50IHRoZSBmaWxlLCBub3QgdGhlIHBhdGggKi8KIAlmID0gcC0+ZmlsZSArIHN0cmxlbihwLT5maWxlKTsKQEAgLTI1MiwxMSArMjUyLDcgQEAKIAkvKgogCSAqIFRoZSBtaXNzIGlzIG92ZXJsYXllZCBvbiBjb3JyZWN0LCBhbmQgaGl0IG9uIGluY29ycmVjdC4KIAkgKi8KLQlpZiAocC0+Y29ycmVjdCkgewotCQlwZXJjZW50ID0gcC0+aW5jb3JyZWN0ICogMTAwOwotCQlwZXJjZW50IC89IHAtPmNvcnJlY3QgKyBwLT5pbmNvcnJlY3Q7Ci0JfSBlbHNlCi0JCXBlcmNlbnQgPSBwLT5pbmNvcnJlY3QgPyAxMDAgOiAtMTsKKwlwZXJjZW50ID0gZ2V0X2luY29ycmVjdF9wZXJjZW50KHApOwogCiAJc2VxX3ByaW50ZihtLCAiJThsdSAlOGx1ICIsICBwLT5jb3JyZWN0LCBwLT5pbmNvcnJlY3QpOwogCWlmIChwZXJjZW50IDwgMCkKQEAgLTI2Nyw3NiArMjYzLDExOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHRyYWNpbmdfbGlrZWx5X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CQk9IHRfc3RhcnQsCi0JLm5leHQJCT0gdF9uZXh0LAotCS5zdG9wCQk9IHRfc3RvcCwKLQkuc2hvdwkJPSB0X3Nob3csCitzdGF0aWMgdm9pZCAqYW5ub3RhdGVkX2JyYW5jaF9zdGF0X3N0YXJ0KHZvaWQpCit7CisJcmV0dXJuIF9fc3RhcnRfYW5ub3RhdGVkX2JyYW5jaF9wcm9maWxlOworfQorCitzdGF0aWMgdm9pZCAqCithbm5vdGF0ZWRfYnJhbmNoX3N0YXRfbmV4dCh2b2lkICp2LCBpbnQgaWR4KQoreworCXN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKnAgPSB2OworCisJKytwOworCisJaWYgKCh2b2lkICopcCA+PSAodm9pZCAqKV9fc3RvcF9hbm5vdGF0ZWRfYnJhbmNoX3Byb2ZpbGUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbnQgYW5ub3RhdGVkX2JyYW5jaF9zdGF0X2NtcCh2b2lkICpwMSwgdm9pZCAqcDIpCit7CisJc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqYSA9IHAxOworCXN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKmIgPSBwMjsKKworCWxvbmcgcGVyY2VudF9hLCBwZXJjZW50X2I7CisKKwlwZXJjZW50X2EgPSBnZXRfaW5jb3JyZWN0X3BlcmNlbnQoYSk7CisJcGVyY2VudF9iID0gZ2V0X2luY29ycmVjdF9wZXJjZW50KGIpOworCisJaWYgKHBlcmNlbnRfYSA8IHBlcmNlbnRfYikKKwkJcmV0dXJuIC0xOworCWlmIChwZXJjZW50X2EgPiBwZXJjZW50X2IpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX3N0YXQgYW5ub3RhdGVkX2JyYW5jaF9zdGF0cyA9IHsKKwkubmFtZSA9ICJicmFuY2hfYW5ub3RhdGVkIiwKKwkuc3RhdF9zdGFydCA9IGFubm90YXRlZF9icmFuY2hfc3RhdF9zdGFydCwKKwkuc3RhdF9uZXh0ID0gYW5ub3RhdGVkX2JyYW5jaF9zdGF0X25leHQsCisJLnN0YXRfY21wID0gYW5ub3RhdGVkX2JyYW5jaF9zdGF0X2NtcCwKKwkuc3RhdF9oZWFkZXJzID0gYW5ub3RhdGVkX2JyYW5jaF9zdGF0X2hlYWRlcnMsCisJLnN0YXRfc2hvdyA9IGJyYW5jaF9zdGF0X3Nob3cKIH07CiAKLXN0YXRpYyBpbnQgdHJhY2luZ19icmFuY2hfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK19faW5pdCBzdGF0aWMgaW50IGluaXRfYW5ub3RhdGVkX2JyYW5jaF9zdGF0cyh2b2lkKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBzZXFfb3BlbihmaWxlLCAmdHJhY2luZ19saWtlbHlfc2VxX29wcyk7CisJcmV0ID0gcmVnaXN0ZXJfc3RhdF90cmFjZXIoJmFubm90YXRlZF9icmFuY2hfc3RhdHMpOwogCWlmICghcmV0KSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJbS0+cHJpdmF0ZSA9ICh2b2lkICopaW5vZGUtPmlfcHJpdmF0ZTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyICIKKwkJCQkgICAgImFubm90YXRlZCBicmFuY2hlcyBzdGF0c1xuIik7CisJCXJldHVybiAxOwogCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfYnJhbmNoX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gdHJhY2luZ19icmFuY2hfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLX07Citmc19pbml0Y2FsbChpbml0X2Fubm90YXRlZF9icmFuY2hfc3RhdHMpOwogCiAjaWZkZWYgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTCisKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhcnRfYnJhbmNoX3Byb2ZpbGVbXTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RvcF9icmFuY2hfcHJvZmlsZVtdOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZ0cmFjZV9wb2ludGVyIGZ0cmFjZV9icmFuY2hfcG9zID0gewotCS5zdGFydAkJCT0gX19zdGFydF9icmFuY2hfcHJvZmlsZSwKLQkuc3RvcAkJCT0gX19zdG9wX2JyYW5jaF9wcm9maWxlLAotCS5oaXQJCQk9IDEsCi19OwotCi0jZW5kaWYgLyogQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTICovCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhcnRfYW5ub3RhdGVkX2JyYW5jaF9wcm9maWxlW107Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0b3BfYW5ub3RhdGVkX2JyYW5jaF9wcm9maWxlW107Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnRyYWNlX3BvaW50ZXIgZnRyYWNlX2Fubm90YXRlZF9icmFuY2hfcG9zID0gewotCS5zdGFydAkJCT0gX19zdGFydF9hbm5vdGF0ZWRfYnJhbmNoX3Byb2ZpbGUsCi0JLnN0b3AJCQk9IF9fc3RvcF9hbm5vdGF0ZWRfYnJhbmNoX3Byb2ZpbGUsCi19OwotCi1zdGF0aWMgX19pbml0IGludCBmdHJhY2VfYnJhbmNoX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgYWxsX2JyYW5jaF9zdGF0X2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICptKQogewotCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwotCXN0cnVjdCBkZW50cnkgKmVudHJ5OwotCi0JZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7Ci0KLQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInByb2ZpbGVfYW5ub3RhdGVkX2JyYW5jaCIsIDA0NDQsIGRfdHJhY2VyLAotCQkJCSAgICAodm9pZCAqKSZmdHJhY2VfYW5ub3RhdGVkX2JyYW5jaF9wb3MsCi0JCQkJICAgICZ0cmFjaW5nX2JyYW5jaF9mb3BzKTsKLQlpZiAoIWVudHJ5KQotCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgotCQkJICAgIidwcm9maWxlX2Fubm90YXRldF9icmFuY2gnIGVudHJ5XG4iKTsKLQotI2lmZGVmIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUwotCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicHJvZmlsZV9icmFuY2giLCAwNDQ0LCBkX3RyYWNlciwKLQkJCQkgICAgKHZvaWQgKikmZnRyYWNlX2JyYW5jaF9wb3MsCi0JCQkJICAgICZ0cmFjaW5nX2JyYW5jaF9mb3BzKTsKLQlpZiAoIWVudHJ5KQotCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMiCi0JCQkgICAiICdwcm9maWxlX2JyYW5jaCcgZW50cnlcbiIpOwotI2VuZGlmCi0KKwlzZXFfcHJpbnRmKG0sICIgICBtaXNzICAgICAgaGl0ICAgICUlICIpOworCXNlcV9wcmludGYobSwgIiAgICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAiCisJCQkgICAgICAiICBGaWxlICAgICAgICAgICAgICBMaW5lXG4iCisJCQkgICAgICAiIC0tLS0tLS0gLS0tLS0tLS0tICAtICIKKwkJCSAgICAgICIgICAgICAgLS0tLS0tLS0gICAgICAgICAgICAgICAgIgorCQkJICAgICAgIiAgLS0tLSAgICAgICAgICAgICAgLS0tLVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKLWRldmljZV9pbml0Y2FsbChmdHJhY2VfYnJhbmNoX2luaXQpOworc3RhdGljIHZvaWQgKmFsbF9icmFuY2hfc3RhdF9zdGFydCh2b2lkKQoreworCXJldHVybiBfX3N0YXJ0X2JyYW5jaF9wcm9maWxlOworfQorCitzdGF0aWMgdm9pZCAqCithbGxfYnJhbmNoX3N0YXRfbmV4dCh2b2lkICp2LCBpbnQgaWR4KQoreworCXN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKnAgPSB2OworCisJKytwOworCisJaWYgKCh2b2lkICopcCA+PSAodm9pZCAqKV9fc3RvcF9icmFuY2hfcHJvZmlsZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZXJfc3RhdCBhbGxfYnJhbmNoX3N0YXRzID0geworCS5uYW1lID0gImJyYW5jaF9hbGwiLAorCS5zdGF0X3N0YXJ0ID0gYWxsX2JyYW5jaF9zdGF0X3N0YXJ0LAorCS5zdGF0X25leHQgPSBhbGxfYnJhbmNoX3N0YXRfbmV4dCwKKwkuc3RhdF9oZWFkZXJzID0gYWxsX2JyYW5jaF9zdGF0X2hlYWRlcnMsCisJLnN0YXRfc2hvdyA9IGJyYW5jaF9zdGF0X3Nob3cKK307CisKK19faW5pdCBzdGF0aWMgaW50IGFsbF9hbm5vdGF0ZWRfYnJhbmNoX3N0YXRzKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ2lzdGVyX3N0YXRfdHJhY2VyKCZhbGxfYnJhbmNoX3N0YXRzKTsKKwlpZiAoIXJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgIgorCQkJCSAgICAiYWxsIGJyYW5jaGVzIHN0YXRzXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoYWxsX2Fubm90YXRlZF9icmFuY2hfc3RhdHMpOworI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTg4ZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiB0cmFjaW5nIGNsb2NrcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICogSW1wbGVtZW50cyAzIHRyYWNlIGNsb2NrIHZhcmlhbnRzLCB3aXRoIGRpZmZlcmluZyBzY2FsYWJpbGl0eS9wcmVjaXNpb24KKyAqIHRyYWRlb2ZmczoKKyAqCisgKiAgLSAgIGxvY2FsOiBDUFUtbG9jYWwgdHJhY2UgY2xvY2sKKyAqICAtICBtZWRpdW06IHNjYWxhYmxlIGdsb2JhbCBjbG9jayB3aXRoIHNvbWUgaml0dGVyCisgKiAgLSAgZ2xvYmFsOiBnbG9iYWxseSBtb25vdG9uaWMsIHNlcmlhbGl6ZWQgY2xvY2sKKyAqCisgKiBUcmFjZXIgcGx1Z2lucyB3aWxsIGNob3NlIGEgZGVmYXVsdCBmcm9tIHRoZXNlIGNsb2Nrcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZV9jbG9jay5oPgorCisvKgorICogdHJhY2VfY2xvY2tfbG9jYWwoKTogdGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb2hlcmVudCB0cmFjaW5nIGNsb2NrLgorICoKKyAqIFVzZWZ1bCBmb3IgdHJhY2luZyB0aGF0IGRvZXMgbm90IGNyb3NzIHRvIG90aGVyIENQVXMgbm9yCisgKiBkb2VzIGl0IGdvIHRocm91Z2ggaWRsZSBldmVudHMuCisgKi8KK3U2NCBub3RyYWNlIHRyYWNlX2Nsb2NrX2xvY2FsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgY2xvY2s7CisKKwkvKgorCSAqIHNjaGVkX2Nsb2NrKCkgaXMgYW4gYXJjaGl0ZWN0dXJlIGltcGxlbWVudGVkLCBmYXN0LCBzY2FsYWJsZSwKKwkgKiBsb2NrbGVzcyBjbG9jay4gSXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgY29oZXJlbnQgYWNyb3NzCisJICogQ1BVcywgbm9yIGFjcm9zcyBDUFUgaWRsZSBldmVudHMuCisJICovCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljbG9jayA9IHNjaGVkX2Nsb2NrKCk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiBjbG9jazsKK30KKworLyoKKyAqIHRyYWNlX2Nsb2NrKCk6ICdpbmJldHdlZW4nIHRyYWNlIGNsb2NrLiBOb3QgY29tcGxldGVseSBzZXJpYWxpemVkLAorICogYnV0IG5vdCBjb21wbGV0ZWx5IGluY29ycmVjdCB3aGVuIGNyb3NzaW5nIENQVXMgZWl0aGVyLgorICoKKyAqIFRoaXMgaXMgYmFzZWQgb24gY3B1X2Nsb2NrKCksIHdoaWNoIHdpbGwgYWxsb3cgYXQgbW9zdCB+MSBqaWZmeSBvZgorICogaml0dGVyIGJldHdlZW4gQ1BVcy4gU28gaXQncyBhIHByZXR0eSBzY2FsYWJsZSBjbG9jaywgYnV0IHRoZXJlCisgKiBjYW4gYmUgb2Zmc2V0cyBpbiB0aGUgdHJhY2UgZGF0YS4KKyAqLwordTY0IG5vdHJhY2UgdHJhY2VfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCisKKy8qCisgKiB0cmFjZV9jbG9ja19nbG9iYWwoKTogc3BlY2lhbCBnbG9iYWxseSBjb2hlcmVudCB0cmFjZSBjbG9jaworICoKKyAqIEl0IGhhcyBoaWdoZXIgb3ZlcmhlYWQgdGhhbiB0aGUgb3RoZXIgdHJhY2UgY2xvY2tzIGJ1dCBpcyBzdGlsbAorICogYW4gb3JkZXIgb2YgbWFnbml0dWRlIGZhc3RlciB0aGFuIEdUT0QgZGVyaXZlZCBoYXJkd2FyZSBjbG9ja3MuCisgKgorICogVXNlZCBieSBwbHVnaW5zIHRoYXQgbmVlZCBnbG9iYWxseSBjb2hlcmVudCB0aW1lc3RhbXBzLgorICovCisKK3N0YXRpYyB1NjQgcHJldl90cmFjZV9jbG9ja190aW1lOworCitzdGF0aWMgcmF3X3NwaW5sb2NrX3QgdHJhY2VfY2xvY2tfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0KKwkocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworCit1NjQgbm90cmFjZSB0cmFjZV9jbG9ja19nbG9iYWwodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0aGlzX2NwdTsKKwl1NjQgbm93OworCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlub3cgPSBjcHVfY2xvY2sodGhpc19jcHUpOworCS8qCisJICogSWYgaW4gYW4gTk1JIGNvbnRleHQgdGhlbiBkb250IHJpc2sgbG9ja3VwcyBhbmQgcmV0dXJuIHRoZQorCSAqIGNwdV9jbG9jaygpIHRpbWU6CisJICovCisJaWYgKHVubGlrZWx5KGluX25taSgpKSkKKwkJZ290byBvdXQ7CisKKwlfX3Jhd19zcGluX2xvY2soJnRyYWNlX2Nsb2NrX2xvY2spOworCisJLyoKKwkgKiBUT0RPOiBpZiB0aGlzIGhhcHBlbnMgb2Z0ZW4gdGhlbiBtYXliZSB3ZSBzaG91bGQgcmVzZXQKKwkgKiBteV9zY2QtPmNsb2NrIHRvIHByZXZfdHJhY2VfY2xvY2tfdGltZSsxLCB0byBtYWtlIHN1cmUKKwkgKiB3ZSBzdGFydCB0aWNraW5nIHdpdGggdGhlIGxvY2FsIGNsb2NrIGZyb20gbm93IG9uPworCSAqLworCWlmICgoczY0KShub3cgLSBwcmV2X3RyYWNlX2Nsb2NrX3RpbWUpIDwgMCkKKwkJbm93ID0gcHJldl90cmFjZV9jbG9ja190aW1lICsgMTsKKworCXByZXZfdHJhY2VfY2xvY2tfdGltZSA9IG5vdzsKKworCV9fcmF3X3NwaW5fdW5sb2NrKCZ0cmFjZV9jbG9ja19sb2NrKTsKKworIG91dDoKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIG5vdzsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyY2JhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiB0cmFjZSBldmVudCBiYXNlZCBwZXJmIGNvdW50ZXIgcHJvZmlsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQgSW5jLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgInRyYWNlLmgiCisKK2ludCBmdHJhY2VfcHJvZmlsZV9lbmFibGUoaW50IGV2ZW50X2lkKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnQ7CisKKwlmb3JfZWFjaF9ldmVudChldmVudCkgeworCQlpZiAoZXZlbnQtPmlkID09IGV2ZW50X2lkKQorCQkJcmV0dXJuIGV2ZW50LT5wcm9maWxlX2VuYWJsZShldmVudCk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3ZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZShpbnQgZXZlbnRfaWQpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudDsKKworCWZvcl9lYWNoX2V2ZW50KGV2ZW50KSB7CisJCWlmIChldmVudC0+aWQgPT0gZXZlbnRfaWQpCisJCQlyZXR1cm4gZXZlbnQtPnByb2ZpbGVfZGlzYWJsZShldmVudCk7CisJfQorfQorCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNzhiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaApAQCAtMCwwICsxLDE3MyBAQAorI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0JZnRyYWNlCisKKy8qCisgKiBXZSBjaGVhdCBhbmQgdXNlIHRoZSBwcm90byB0eXBlIGZpZWxkIGFzIHRoZSBJRAorICogYW5kIGFyZ3MgYXMgdGhlIGVudHJ5IHR5cGUgKG1pbnVzICdzdHJ1Y3QnKQorICovCitUUkFDRV9FVkVOVF9GT1JNQVQoZnVuY3Rpb24sIFRSQUNFX0ZOLCBmdHJhY2VfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBpcCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgcGFyZW50X2lwLCBwYXJlbnRfaXApCisJKSwKKwlUUF9SQVdfRk1UKCIgJWx4IDwtLSAlbHgiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKGZ1bmNncmFwaF9lbnRyeSwgVFJBQ0VfR1JBUEhfRU5ULAorCQkgICBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBncmFwaF9lbnQuZnVuYywgZnVuYykKKwkJVFJBQ0VfRklFTEQoaW50LCBncmFwaF9lbnQuZGVwdGgsIGRlcHRoKQorCSksCisJVFBfUkFXX0ZNVCgiLS0+ICVseCAoJWQpIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChmdW5jZ3JhcGhfZXhpdCwgVFJBQ0VfR1JBUEhfUkVULAorCQkgICBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXQuZnVuYywgZnVuYykKKwkJVFJBQ0VfRklFTEQoaW50LCByZXQuZGVwdGgsIGRlcHRoKQorCSksCisJVFBfUkFXX0ZNVCgiPC0tICVseCAoJWQpIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVCh3YWtldXAsIFRSQUNFX1dBS0UsIGN0eF9zd2l0Y2hfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGludCwgcHJldl9waWQsIHByZXZfcGlkKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBjaGFyLCBwcmV2X3ByaW8sIHByZXZfcHJpbykKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgY2hhciwgcHJldl9zdGF0ZSwgcHJldl9zdGF0ZSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgaW50LCBuZXh0X3BpZCwgbmV4dF9waWQpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGNoYXIsIG5leHRfcHJpbywgbmV4dF9wcmlvKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBjaGFyLCBuZXh0X3N0YXRlLCBuZXh0X3N0YXRlKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBpbnQsIG5leHRfY3B1LCBuZXh0X2NwdSkKKwkpLAorCVRQX1JBV19GTVQoIiV1OiV1OiV1ICA9PSsgJXU6JXU6JXUgWyUwM3VdIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChjb250ZXh0X3N3aXRjaCwgVFJBQ0VfQ1RYLCBjdHhfc3dpdGNoX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBpbnQsIHByZXZfcGlkLCBwcmV2X3BpZCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgY2hhciwgcHJldl9wcmlvLCBwcmV2X3ByaW8pCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGNoYXIsIHByZXZfc3RhdGUsIHByZXZfc3RhdGUpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGludCwgbmV4dF9waWQsIG5leHRfcGlkKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBjaGFyLCBuZXh0X3ByaW8sIG5leHRfcHJpbykKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgY2hhciwgbmV4dF9zdGF0ZSwgbmV4dF9zdGF0ZSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgaW50LCBuZXh0X2NwdSwgbmV4dF9jcHUpCisJKSwKKwlUUF9SQVdfRk1UKCIldToldToldSAgPT0rICV1OiV1OiV1IFslMDN1XSIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoc3BlY2lhbCwgVFJBQ0VfU1BFQ0lBTCwgc3BlY2lhbF9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgYXJnMSwgYXJnMSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgYXJnMiwgYXJnMikKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgYXJnMywgYXJnMykKKwkpLAorCVRQX1JBV19GTVQoIiglMDhseCkgKCUwOGx4KSAoJTA4bHgpIikKKyk7CisKKy8qCisgKiBTdGFjay10cmFjZSBlbnRyeToKKyAqLworCisvKiAjZGVmaW5lIEZUUkFDRV9TVEFDS19FTlRSSUVTICAgOCAqLworCitUUkFDRV9FVkVOVF9GT1JNQVQoa2VybmVsX3N0YWNrLCBUUkFDRV9TVEFDSywgc3RhY2tfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlclswXSwgc3RhY2swKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbMV0sIHN0YWNrMSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzJdLCBzdGFjazIpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlclszXSwgc3RhY2szKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbNF0sIHN0YWNrNCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzVdLCBzdGFjazUpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlcls2XSwgc3RhY2s2KQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbN10sIHN0YWNrNykKKwkpLAorCVRQX1JBV19GTVQoIlx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuIgorCQkgIlx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVCh1c2VyX3N0YWNrLCBUUkFDRV9VU0VSX1NUQUNLLCB1c2Vyc3RhY2tfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlclswXSwgc3RhY2swKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbMV0sIHN0YWNrMSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzJdLCBzdGFjazIpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlclszXSwgc3RhY2szKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbNF0sIHN0YWNrNCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzVdLCBzdGFjazUpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlcls2XSwgc3RhY2s2KQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbN10sIHN0YWNrNykKKwkpLAorCVRQX1JBV19GTVQoIlx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuIgorCQkgIlx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChicHJpbnQsIFRSQUNFX0JQUklOVCwgYnByaW50X2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBpcCwgaXApCisJCVRSQUNFX0ZJRUxEKGNoYXIgKiwgZm10LCBmbXQpCisJCVRSQUNFX0ZJRUxEX1pFUk9fQ0hBUihidWYpCisJKSwKKwlUUF9SQVdfRk1UKCIlMDhseCAoJWQpIGZtdDolcCAlcyIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQocHJpbnQsIFRSQUNFX1BSSU5ULCBwcmludF9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgaXAsIGlwKQorCQlUUkFDRV9GSUVMRF9aRVJPX0NIQVIoYnVmKQorCSksCisJVFBfUkFXX0ZNVCgiJTA4bHggKCVkKSBmbXQ6JXAgJXMiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKGJyYW5jaCwgVFJBQ0VfQlJBTkNILCB0cmFjZV9icmFuY2gsIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGludCwgbGluZSwgbGluZSkKKwkJVFJBQ0VfRklFTERfU1BFQ0lBTChjaGFyIGZ1bmNbVFJBQ0VfRlVOQ19TSVpFKzFdLCBmdW5jLCBmdW5jKQorCQlUUkFDRV9GSUVMRF9TUEVDSUFMKGNoYXIgZmlsZVtUUkFDRV9GVU5DX1NJWkUrMV0sIGZpbGUsIGZpbGUpCisJCVRSQUNFX0ZJRUxEKGNoYXIsIGNvcnJlY3QsIGNvcnJlY3QpCisJKSwKKwlUUF9SQVdfRk1UKCIldTolczolcyAoJXUpIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChod19icmFuY2gsIFRSQUNFX0hXX0JSQU5DSEVTLCBod19icmFuY2hfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHU2NCwgZnJvbSwgZnJvbSkKKwkJVFJBQ0VfRklFTEQodTY0LCB0bywgdG8pCisJKSwKKwlUUF9SQVdfRk1UKCJmcm9tOiAlbGx4IHRvOiAlbGx4IikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChwb3dlciwgVFJBQ0VfUE9XRVIsIHRyYWNlX3Bvd2VyLCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRChrdGltZV90LCBzdGF0ZV9kYXRhLnN0YW1wLCBzdGFtcCkKKwkJVFJBQ0VfRklFTEQoa3RpbWVfdCwgc3RhdGVfZGF0YS5lbmQsIGVuZCkKKwkJVFJBQ0VfRklFTEQoaW50LCBzdGF0ZV9kYXRhLnR5cGUsIHR5cGUpCisJCVRSQUNFX0ZJRUxEKGludCwgc3RhdGVfZGF0YS5zdGF0ZSwgc3RhdGUpCisJKSwKKwlUUF9SQVdfRk1UKCIlbGx4LT4lbGx4IHR5cGU6JXUgc3RhdGU6JXUiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKGttZW1fYWxsb2MsIFRSQUNFX0tNRU1fQUxMT0MsIGttZW10cmFjZV9hbGxvY19lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCwgdHlwZV9pZCwgdHlwZV9pZCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbF9zaXRlLCBjYWxsX3NpdGUpCisJCVRSQUNFX0ZJRUxEKGNvbnN0IHZvaWQgKiwgcHRyLCBwdHIpCisJCVRSQUNFX0ZJRUxEKHNpemVfdCwgYnl0ZXNfcmVxLCBieXRlc19yZXEpCisJCVRSQUNFX0ZJRUxEKHNpemVfdCwgYnl0ZXNfYWxsb2MsIGJ5dGVzX2FsbG9jKQorCQlUUkFDRV9GSUVMRChnZnBfdCwgZ2ZwX2ZsYWdzLCBnZnBfZmxhZ3MpCisJCVRSQUNFX0ZJRUxEKGludCwgbm9kZSwgbm9kZSkKKwkpLAorCVRQX1JBV19GTVQoInR5cGU6JXUgY2FsbF9zaXRlOiVseCBwdHI6JXAgcmVxOiVsdSBhbGxvYzolbHUiCisJCSAiIGZsYWdzOiV4IG5vZGU6JWQiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKGttZW1fZnJlZSwgVFJBQ0VfS01FTV9GUkVFLCBrbWVtdHJhY2VfZnJlZV9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCwgdHlwZV9pZCwgdHlwZV9pZCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbF9zaXRlLCBjYWxsX3NpdGUpCisJCVRSQUNFX0ZJRUxEKGNvbnN0IHZvaWQgKiwgcHRyLCBwdHIpCisJKSwKKwlUUF9SQVdfRk1UKCJ0eXBlOiV1IGNhbGxfc2l0ZTolbHggcHRyOiVwIikKKyk7CisKKyN1bmRlZiBUUkFDRV9TWVNURU0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGVjNGQyCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0wLDAgKzEsODI0IEBACisvKgorICogZXZlbnQgdHJhY2VyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQgSW5jLCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCisgKiAgLSBBZGRlZCBmb3JtYXQgb3V0cHV0IG9mIGZpZWxkcyBvZiB0aGUgdHJhY2UgcG9pbnQuCisgKiAgICBUaGlzIHdhcyBiYXNlZCBvZmYgb2Ygd29yayBieSBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCisjZGVmaW5lIFRSQUNFX1NZU1RFTSAiVFJBQ0VfU1lTVEVNIgorCitzdGF0aWMgREVGSU5FX01VVEVYKGV2ZW50X211dGV4KTsKKworaW50IHRyYWNlX2RlZmluZV9maWVsZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIGNoYXIgKnR5cGUsCisJCSAgICAgICBjaGFyICpuYW1lLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZDsKKworCWZpZWxkID0ga3phbGxvYyhzaXplb2YoKmZpZWxkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaWVsZCkKKwkJZ290byBlcnI7CisKKwlmaWVsZC0+bmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaWVsZC0+bmFtZSkKKwkJZ290byBlcnI7CisKKwlmaWVsZC0+dHlwZSA9IGtzdHJkdXAodHlwZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaWVsZC0+dHlwZSkKKwkJZ290byBlcnI7CisKKwlmaWVsZC0+b2Zmc2V0ID0gb2Zmc2V0OworCWZpZWxkLT5zaXplID0gc2l6ZTsKKwlsaXN0X2FkZCgmZmllbGQtPmxpbmssICZjYWxsLT5maWVsZHMpOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlpZiAoZmllbGQpIHsKKwkJa2ZyZWUoZmllbGQtPm5hbWUpOworCQlrZnJlZShmaWVsZC0+dHlwZSk7CisJfQorCWtmcmVlKGZpZWxkKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBmdHJhY2VfY2xlYXJfZXZlbnRzKHZvaWQpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gKHZvaWQgKilfX3N0YXJ0X2Z0cmFjZV9ldmVudHM7CisKKworCXdoaWxlICgodW5zaWduZWQgbG9uZyljYWxsIDwgKHVuc2lnbmVkIGxvbmcpX19zdG9wX2Z0cmFjZV9ldmVudHMpIHsKKworCQlpZiAoY2FsbC0+ZW5hYmxlZCkgeworCQkJY2FsbC0+ZW5hYmxlZCA9IDA7CisJCQljYWxsLT51bnJlZ2Z1bmMoKTsKKwkJfQorCQljYWxsKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJCQlpbnQgZW5hYmxlKQoreworCisJc3dpdGNoIChlbmFibGUpIHsKKwljYXNlIDA6CisJCWlmIChjYWxsLT5lbmFibGVkKSB7CisJCQljYWxsLT5lbmFibGVkID0gMDsKKwkJCWNhbGwtPnVucmVnZnVuYygpOworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKCFjYWxsLT5lbmFibGVkKSB7CisJCQljYWxsLT5lbmFibGVkID0gMTsKKwkJCWNhbGwtPnJlZ2Z1bmMoKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZnRyYWNlX3NldF9jbHJfZXZlbnQoY2hhciAqYnVmLCBpbnQgc2V0KQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IF9fc3RhcnRfZnRyYWNlX2V2ZW50czsKKwljaGFyICpldmVudCA9IE5VTEwsICpzdWIgPSBOVUxMLCAqbWF0Y2g7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwkvKgorCSAqIFRoZSBidWYgZm9ybWF0IGNhbiBiZSA8c3Vic3lzdGVtPjo8ZXZlbnQtbmFtZT4KKwkgKiAgKjo8ZXZlbnQtbmFtZT4gbWVhbnMgYW55IGV2ZW50IGJ5IHRoYXQgbmFtZS4KKwkgKiAgOjxldmVudC1uYW1lPiBpcyB0aGUgc2FtZS4KKwkgKgorCSAqICA8c3Vic3lzdGVtPjoqIG1lYW5zIGFsbCBldmVudHMgaW4gdGhhdCBzdWJzeXN0ZW0KKwkgKiAgPHN1YnN5c3RlbT46IG1lYW5zIHRoZSBzYW1lLgorCSAqCisJICogIDxuYW1lPiAobm8gJzonKSBtZWFucyBhbGwgZXZlbnRzIGluIGEgc3Vic3lzdGVtIHdpdGgKKwkgKiAgdGhlIG5hbWUgPG5hbWU+IG9yIGFueSBldmVudCB0aGF0IG1hdGNoZXMgPG5hbWU+CisJICovCisKKwltYXRjaCA9IHN0cnNlcCgmYnVmLCAiOiIpOworCWlmIChidWYpIHsKKwkJc3ViID0gbWF0Y2g7CisJCWV2ZW50ID0gYnVmOworCQltYXRjaCA9IE5VTEw7CisKKwkJaWYgKCFzdHJsZW4oc3ViKSB8fCBzdHJjbXAoc3ViLCAiKiIpID09IDApCisJCQlzdWIgPSBOVUxMOworCQlpZiAoIXN0cmxlbihldmVudCkgfHwgc3RyY21wKGV2ZW50LCAiKiIpID09IDApCisJCQlldmVudCA9IE5VTEw7CisJfQorCisJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOworCWZvcl9lYWNoX2V2ZW50KGNhbGwpIHsKKworCQlpZiAoIWNhbGwtPm5hbWUgfHwgIWNhbGwtPnJlZ2Z1bmMpCisJCQljb250aW51ZTsKKworCQlpZiAobWF0Y2ggJiYKKwkJICAgIHN0cmNtcChtYXRjaCwgY2FsbC0+bmFtZSkgIT0gMCAmJgorCQkgICAgc3RyY21wKG1hdGNoLCBjYWxsLT5zeXN0ZW0pICE9IDApCisJCQljb250aW51ZTsKKworCQlpZiAoc3ViICYmIHN0cmNtcChzdWIsIGNhbGwtPnN5c3RlbSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChldmVudCAmJiBzdHJjbXAoZXZlbnQsIGNhbGwtPm5hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQlmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoY2FsbCwgc2V0KTsKKworCQlyZXQgPSAwOworCX0KKwltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIDEyOCBzaG91bGQgYmUgbXVjaCBtb3JlIHRoYW4gZW5vdWdoICovCisjZGVmaW5lIEVWRU5UX0JVRl9TSVpFCQkxMjcKKworc3RhdGljIHNzaXplX3QKK2Z0cmFjZV9ldmVudF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzaXplX3QgcmVhZCA9IDA7CisJaW50IGksIHNldCA9IDE7CisJc3NpemVfdCByZXQ7CisJY2hhciAqYnVmOworCWNoYXIgY2g7CisKKwlpZiAoIWNudCB8fCBjbnQgPCAwKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHRyYWNpbmdfdXBkYXRlX2J1ZmZlcnMoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdldF91c2VyKGNoLCB1YnVmKyspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmVhZCsrOworCWNudC0tOworCisJLyogc2tpcCB3aGl0ZSBzcGFjZSAqLworCXdoaWxlIChjbnQgJiYgaXNzcGFjZShjaCkpIHsKKwkJcmV0ID0gZ2V0X3VzZXIoY2gsIHVidWYrKyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZWFkKys7CisJCWNudC0tOworCX0KKworCS8qIE9ubHkgd2hpdGUgc3BhY2UgZm91bmQ/ICovCisJaWYgKGlzc3BhY2UoY2gpKSB7CisJCWZpbGUtPmZfcG9zICs9IHJlYWQ7CisJCXJldCA9IHJlYWQ7CisJCXJldHVybiByZXQ7CisJfQorCisJYnVmID0ga21hbGxvYyhFVkVOVF9CVUZfU0laRSsxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY250ID4gRVZFTlRfQlVGX1NJWkUpCisJCWNudCA9IEVWRU5UX0JVRl9TSVpFOworCisJaSA9IDA7CisJd2hpbGUgKGNudCAmJiAhaXNzcGFjZShjaCkpIHsKKwkJaWYgKCFpICYmIGNoID09ICchJykKKwkJCXNldCA9IDA7CisJCWVsc2UKKwkJCWJ1ZltpKytdID0gY2g7CisKKwkJcmV0ID0gZ2V0X3VzZXIoY2gsIHVidWYrKyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9mcmVlOworCQlyZWFkKys7CisJCWNudC0tOworCX0KKwlidWZbaV0gPSAwOworCisJZmlsZS0+Zl9wb3MgKz0gcmVhZDsKKworCXJldCA9IGZ0cmFjZV9zZXRfY2xyX2V2ZW50KGJ1Ziwgc2V0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJcmV0ID0gcmVhZDsKKworIG91dF9mcmVlOgorCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCAqCit0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBtLT5wcml2YXRlOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqbmV4dCA9IGNhbGw7CisKKwkoKnBvcykrKzsKKworCWZvciAoOzspIHsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKWNhbGwgPj0gKHVuc2lnbmVkIGxvbmcpX19zdG9wX2Z0cmFjZV9ldmVudHMpCisJCQlyZXR1cm4gTlVMTDsKKworCQkvKgorCQkgKiBUaGUgZnRyYWNlIHN1YnN5c3RlbSBpcyBmb3Igc2hvd2luZyBmb3JtYXRzIG9ubHkuCisJCSAqIFRoZXkgY2FuIG5vdCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIHZpYSB0aGUgZXZlbnQgZmlsZXMuCisJCSAqLworCQlpZiAoY2FsbC0+cmVnZnVuYykKKwkJCWJyZWFrOworCisJCWNhbGwrKzsKKwkJbmV4dCA9IGNhbGw7CisJfQorCisJbS0+cHJpdmF0ZSA9ICsrbmV4dDsKKworCXJldHVybiBjYWxsOworfQorCitzdGF0aWMgdm9pZCAqdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXJldHVybiB0X25leHQobSwgTlVMTCwgcG9zKTsKK30KKworc3RhdGljIHZvaWQgKgorc19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKm5leHQ7CisKKwkoKnBvcykrKzsKKworIHJldHJ5OgorCWlmICgodW5zaWduZWQgbG9uZyljYWxsID49ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9mdHJhY2VfZXZlbnRzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghY2FsbC0+ZW5hYmxlZCkgeworCQljYWxsKys7CisJCWdvdG8gcmV0cnk7CisJfQorCisJbmV4dCA9IGNhbGw7CisJbS0+cHJpdmF0ZSA9ICsrbmV4dDsKKworCXJldHVybiBjYWxsOworfQorCitzdGF0aWMgdm9pZCAqc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXJldHVybiBzX25leHQobSwgTlVMTCwgcG9zKTsKK30KKworc3RhdGljIGludCB0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IHY7CisKKwlpZiAoc3RyY21wKGNhbGwtPnN5c3RlbSwgVFJBQ0VfU1lTVEVNKSAhPSAwKQorCQlzZXFfcHJpbnRmKG0sICIlczoiLCBjYWxsLT5zeXN0ZW0pOworCXNlcV9wcmludGYobSwgIiVzXG4iLCBjYWxsLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworfQorCitzdGF0aWMgaW50CitmdHJhY2VfZXZlbnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldDsKKwljb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgKnNlcV9vcHM7CisKKwlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgorCSAgICAhKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkpCisJCWZ0cmFjZV9jbGVhcl9ldmVudHMoKTsKKworCXNlcV9vcHMgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldCA9IHNlcV9vcGVuKGZpbGUsIHNlcV9vcHMpOworCWlmICghcmV0KSB7CisJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCQltLT5wcml2YXRlID0gX19zdGFydF9mdHJhY2VfZXZlbnRzOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdAorZXZlbnRfZW5hYmxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCisJaWYgKGNhbGwtPmVuYWJsZWQpCisJCWJ1ZiA9ICIxXG4iOworCWVsc2UKKwkJYnVmID0gIjBcbiI7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBidWYsIDIpOworfQorCitzdGF0aWMgc3NpemVfdAorZXZlbnRfZW5hYmxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJICAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls2NF07CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NudF0gPSAwOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB0cmFjaW5nX3VwZGF0ZV9idWZmZXJzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKKwkJZnRyYWNlX2V2ZW50X2VuYWJsZV9kaXNhYmxlKGNhbGwsIHZhbCk7CisJCW11dGV4X3VubG9jaygmZXZlbnRfbXV0ZXgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpwcG9zICs9IGNudDsKKworCXJldHVybiBjbnQ7Cit9CisKKyN1bmRlZiBGSUVMRAorI2RlZmluZSBGSUVMRCh0eXBlLCBuYW1lKQkJCQkJCVwKKwkjdHlwZSwgImNvbW1vbl8iICNuYW1lLCBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBuYW1lKSwJCVwKKwkJc2l6ZW9mKGZpZWxkLm5hbWUpCisKK3N0YXRpYyBpbnQgdHJhY2Vfd3JpdGVfaGVhZGVyKHN0cnVjdCB0cmFjZV9zZXEgKnMpCit7CisJc3RydWN0IHRyYWNlX2VudHJ5IGZpZWxkOworCisJLyogc3RydWN0IHRyYWNlX2VudHJ5ICovCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywKKwkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKKwkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKKwkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKKwkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKKwkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKKwkJCQkiXG4iLAorCQkJCUZJRUxEKHVuc2lnbmVkIGNoYXIsIHR5cGUpLAorCQkJCUZJRUxEKHVuc2lnbmVkIGNoYXIsIGZsYWdzKSwKKwkJCQlGSUVMRCh1bnNpZ25lZCBjaGFyLCBwcmVlbXB0X2NvdW50KSwKKwkJCQlGSUVMRChpbnQsIHBpZCksCisJCQkJRklFTEQoaW50LCB0Z2lkKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitldmVudF9mb3JtYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCSAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCWNoYXIgKmJ1ZjsKKwlpbnQgcjsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIDA7CisKKwlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpCisJCXJldHVybiAtRU5PTUVNOworCisJdHJhY2Vfc2VxX2luaXQocyk7CisKKwkvKiBJZiBhbnkgb2YgdGhlIGZpcnN0IHdyaXRlcyBmYWlsLCBzbyB3aWxsIHRoZSBzaG93X2Zvcm1hdC4gKi8KKworCXRyYWNlX3NlcV9wcmludGYocywgIm5hbWU6ICVzXG4iLCBjYWxsLT5uYW1lKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJJRDogJWRcbiIsIGNhbGwtPmlkKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJmb3JtYXQ6XG4iKTsKKwl0cmFjZV93cml0ZV9oZWFkZXIocyk7CisKKwlyID0gY2FsbC0+c2hvd19mb3JtYXQocyk7CisJaWYgKCFyKSB7CisJCS8qCisJCSAqIHVnISAgVGhlIGZvcm1hdCBvdXRwdXQgaXMgYmlnZ2VyIHRoYW4gYSBQQUdFISEKKwkJICovCisJCWJ1ZiA9ICJGT1JNQVQgVE9PIEJJR1xuIjsKKwkJciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywKKwkJCQkJICAgICAgYnVmLCBzdHJsZW4oYnVmKSk7CisJCWdvdG8gb3V0OworCX0KKworCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsCisJCQkJICAgIHMtPmJ1ZmZlciwgcy0+bGVuKTsKKyBvdXQ6CisJa2ZyZWUocyk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitldmVudF9pZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCWludCByOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4gMDsKKworCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOworCWlmICghcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cmFjZV9zZXFfaW5pdChzKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICIlZFxuIiwgY2FsbC0+aWQpOworCisJciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywKKwkJCQkgICAgcy0+YnVmZmVyLCBzLT5sZW4pOworCWtmcmVlKHMpOworCXJldHVybiByOworfQorCitzdGF0aWMgc3NpemVfdAorZXZlbnRfZmlsdGVyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHRyYWNlX3NlcSAqczsKKwlpbnQgcjsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIDA7CisKKwlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpCisJCXJldHVybiAtRU5PTUVNOworCisJdHJhY2Vfc2VxX2luaXQocyk7CisKKwlmaWx0ZXJfcHJpbnRfcHJlZHMoY2FsbC0+cHJlZHMsIHMpOworCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIHMtPmJ1ZmZlciwgcy0+bGVuKTsKKworCWtmcmVlKHMpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitldmVudF9maWx0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzY0XSwgKnBidWYgPSBidWY7CisJc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkOworCWludCBlcnI7CisKKwlpZiAoY250ID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjbnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXByZWQgPSBremFsbG9jKHNpemVvZigqcHJlZCksIEdGUF9LRVJORUwpOworCWlmICghcHJlZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBmaWx0ZXJfcGFyc2UoJnBidWYsIHByZWQpOworCWlmIChlcnIgPCAwKSB7CisJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHByZWQtPmNsZWFyKSB7CisJCWZpbHRlcl9mcmVlX3ByZWRzKGNhbGwpOworCQlmaWx0ZXJfZnJlZV9wcmVkKHByZWQpOworCQlyZXR1cm4gY250OworCX0KKworCWlmIChmaWx0ZXJfYWRkX3ByZWQoY2FsbCwgcHJlZCkpIHsKKwkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnBwb3MgKz0gY250OworCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIHNzaXplX3QKK3N1YnN5c3RlbV9maWx0ZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCSAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHRyYWNlX3NlcSAqczsKKwlpbnQgcjsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIDA7CisKKwlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpCisJCXJldHVybiAtRU5PTUVNOworCisJdHJhY2Vfc2VxX2luaXQocyk7CisKKwlmaWx0ZXJfcHJpbnRfcHJlZHMoc3lzdGVtLT5wcmVkcywgcyk7CisJciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgcy0+YnVmZmVyLCBzLT5sZW4pOworCisJa2ZyZWUocyk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHNzaXplX3QKK3N1YnN5c3RlbV9maWx0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgICAgICAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls2NF0sICpwYnVmID0gYnVmOworCXN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZDsKKwlpbnQgZXJyOworCisJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlwcmVkID0ga3phbGxvYyhzaXplb2YoKnByZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByZWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gZmlsdGVyX3BhcnNlKCZwYnVmLCBwcmVkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmaWx0ZXJfZnJlZV9wcmVkKHByZWQpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChwcmVkLT5jbGVhcikgeworCQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtKTsKKwkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKKwkJcmV0dXJuIGNudDsKKwl9CisKKwlpZiAoZmlsdGVyX2FkZF9zdWJzeXN0ZW1fcHJlZChzeXN0ZW0sIHByZWQpKSB7CisJCWZpbHRlcl9mcmVlX3N1YnN5c3RlbV9wcmVkcyhzeXN0ZW0pOworCQlmaWx0ZXJfZnJlZV9wcmVkKHByZWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqcHBvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNob3dfZXZlbnRfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSB0X3N0YXJ0LAorCS5uZXh0ID0gdF9uZXh0LAorCS5zaG93ID0gdF9zaG93LAorCS5zdG9wID0gdF9zdG9wLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzaG93X3NldF9ldmVudF9zZXFfb3BzID0geworCS5zdGFydCA9IHNfc3RhcnQsCisJLm5leHQgPSBzX25leHQsCisJLnNob3cgPSB0X3Nob3csCisJLnN0b3AgPSB0X3N0b3AsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfYXZhaWxfZm9wcyA9IHsKKwkub3BlbiA9IGZ0cmFjZV9ldmVudF9zZXFfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9zZXRfZXZlbnRfZm9wcyA9IHsKKwkub3BlbiA9IGZ0cmFjZV9ldmVudF9zZXFfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS53cml0ZSA9IGZ0cmFjZV9ldmVudF93cml0ZSwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZW5hYmxlX2ZvcHMgPSB7CisJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkucmVhZCA9IGV2ZW50X2VuYWJsZV9yZWFkLAorCS53cml0ZSA9IGV2ZW50X2VuYWJsZV93cml0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyA9IHsKKwkub3BlbiA9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAorCS5yZWFkID0gZXZlbnRfZm9ybWF0X3JlYWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZXZlbnRfaWRfZm9wcyA9IHsKKwkub3BlbiA9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAorCS5yZWFkID0gZXZlbnRfaWRfcmVhZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcyA9IHsKKwkub3BlbiA9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAorCS5yZWFkID0gZXZlbnRfZmlsdGVyX3JlYWQsCisJLndyaXRlID0gZXZlbnRfZmlsdGVyX3dyaXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX3N1YnN5c3RlbV9maWx0ZXJfZm9wcyA9IHsKKwkub3BlbiA9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAorCS5yZWFkID0gc3Vic3lzdGVtX2ZpbHRlcl9yZWFkLAorCS53cml0ZSA9IHN1YnN5c3RlbV9maWx0ZXJfd3JpdGUsCit9OworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZXZlbnRfdHJhY2VfZXZlbnRzX2Rpcih2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKKwlzdGF0aWMgc3RydWN0IGRlbnRyeSAqZF9ldmVudHM7CisKKwlpZiAoZF9ldmVudHMpCisJCXJldHVybiBkX2V2ZW50czsKKworCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCWlmICghZF90cmFjZXIpCisJCXJldHVybiBOVUxMOworCisJZF9ldmVudHMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImV2ZW50cyIsIGRfdHJhY2VyKTsKKwlpZiAoIWRfZXZlbnRzKQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIidldmVudHMnIGRpcmVjdG9yeVxuIik7CisKKwlyZXR1cm4gZF9ldmVudHM7Cit9CisKK3N0YXRpYyBMSVNUX0hFQUQoZXZlbnRfc3Vic3lzdGVtcyk7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKK2V2ZW50X3N1YnN5c3RlbV9kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqZF9ldmVudHMpCit7CisJc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtOworCisJLyogRmlyc3Qgc2VlIGlmIHdlIGRpZCBub3QgYWxyZWFkeSBjcmVhdGUgdGhpcyBkaXIgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c3RlbSwgJmV2ZW50X3N1YnN5c3RlbXMsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChzeXN0ZW0tPm5hbWUsIG5hbWUpID09IDApCisJCQlyZXR1cm4gc3lzdGVtLT5lbnRyeTsKKwl9CisKKwkvKiBuZWVkIHRvIGNyZWF0ZSBuZXcgZW50cnkgKi8KKwlzeXN0ZW0gPSBrbWFsbG9jKHNpemVvZigqc3lzdGVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzeXN0ZW0pIHsKKwkJcHJfd2FybmluZygiTm8gbWVtb3J5IHRvIGNyZWF0ZSBldmVudCBzdWJzeXN0ZW0gJXNcbiIsCisJCQkgICBuYW1lKTsKKwkJcmV0dXJuIGRfZXZlbnRzOworCX0KKworCXN5c3RlbS0+ZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgZF9ldmVudHMpOworCWlmICghc3lzdGVtLT5lbnRyeSkgeworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGV2ZW50IHN1YnN5c3RlbSAlc1xuIiwKKwkJCSAgIG5hbWUpOworCQlrZnJlZShzeXN0ZW0pOworCQlyZXR1cm4gZF9ldmVudHM7CisJfQorCisJc3lzdGVtLT5uYW1lID0gbmFtZTsKKwlsaXN0X2FkZCgmc3lzdGVtLT5saXN0LCAmZXZlbnRfc3Vic3lzdGVtcyk7CisKKwlzeXN0ZW0tPnByZWRzID0gTlVMTDsKKworCXJldHVybiBzeXN0ZW0tPmVudHJ5OworfQorCitzdGF0aWMgaW50CitldmVudF9jcmVhdGVfZGlyKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IGRlbnRyeSAqZF9ldmVudHMpCit7CisJc3RydWN0IGRlbnRyeSAqZW50cnk7CisJaW50IHJldDsKKworCS8qCisJICogSWYgdGhlIHRyYWNlIHBvaW50IGhlYWRlciBkaWQgbm90IGRlZmluZSBUUkFDRV9TWVNURU0KKwkgKiB0aGVuIHRoZSBzeXN0ZW0gd291bGQgYmUgY2FsbGVkICJUUkFDRV9TWVNURU0iLgorCSAqLworCWlmIChzdHJjbXAoY2FsbC0+c3lzdGVtLCAiVFJBQ0VfU1lTVEVNIikgIT0gMCkKKwkJZF9ldmVudHMgPSBldmVudF9zdWJzeXN0ZW1fZGlyKGNhbGwtPnN5c3RlbSwgZF9ldmVudHMpOworCisJaWYgKGNhbGwtPnJhd19pbml0KSB7CisJCXJldCA9IGNhbGwtPnJhd19pbml0KCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0cmFjZSBwb2ludCIKKwkJCQkgICAiIGV2ZW50cy8lc1xuIiwgY2FsbC0+bmFtZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJY2FsbC0+ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGNhbGwtPm5hbWUsIGRfZXZlbnRzKTsKKwlpZiAoIWNhbGwtPmRpcikgeworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIiclcycgZGlyZWN0b3J5XG4iLCBjYWxsLT5uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjYWxsLT5yZWdmdW5jKSB7CisJCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZW5hYmxlIiwgMDY0NCwgY2FsbC0+ZGlyLCBjYWxsLAorCQkJCQkgICAgJmZ0cmFjZV9lbmFibGVfZm9wcyk7CisJCWlmICghZW50cnkpCisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJCSAgICInJXMvZW5hYmxlJyBlbnRyeVxuIiwgY2FsbC0+bmFtZSk7CisJfQorCisJaWYgKGNhbGwtPmlkKSB7CisJCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaWQiLCAwNDQ0LCBjYWxsLT5kaXIsIGNhbGwsCisJCQkJJmZ0cmFjZV9ldmVudF9pZF9mb3BzKTsKKwkJaWYgKCFlbnRyeSkKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAnJXMvaWQnIGVudHJ5XG4iLAorCQkJCQljYWxsLT5uYW1lKTsKKwl9CisKKwlpZiAoY2FsbC0+ZGVmaW5lX2ZpZWxkcykgeworCQlyZXQgPSBjYWxsLT5kZWZpbmVfZmllbGRzKCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0cmFjZSBwb2ludCIKKwkJCQkgICAiIGV2ZW50cy8lc1xuIiwgY2FsbC0+bmFtZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZmlsdGVyIiwgMDY0NCwgY2FsbC0+ZGlyLCBjYWxsLAorCQkJCQkgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcyk7CisJCWlmICghZW50cnkpCisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJCSAgICInJXMvZmlsdGVyJyBlbnRyeVxuIiwgY2FsbC0+bmFtZSk7CisJfQorCisJLyogQSB0cmFjZSBtYXkgbm90IHdhbnQgdG8gZXhwb3J0IGl0cyBmb3JtYXQgKi8KKwlpZiAoIWNhbGwtPnNob3dfZm9ybWF0KQorCQlyZXR1cm4gMDsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZm9ybWF0IiwgMDQ0NCwgY2FsbC0+ZGlyLCBjYWxsLAorCQkJCSAgICAmZnRyYWNlX2V2ZW50X2Zvcm1hdF9mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIiclcy9mb3JtYXQnIGVudHJ5XG4iLCBjYWxsLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0IGludCBldmVudF90cmFjZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gX19zdGFydF9mdHJhY2VfZXZlbnRzOworCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOworCXN0cnVjdCBkZW50cnkgKmVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRfZXZlbnRzOworCisJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CisJaWYgKCFkX3RyYWNlcikKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF2YWlsYWJsZV9ldmVudHMiLCAwNDQ0LCBkX3RyYWNlciwKKwkJCQkgICAgKHZvaWQgKikmc2hvd19ldmVudF9zZXFfb3BzLAorCQkJCSAgICAmZnRyYWNlX2F2YWlsX2ZvcHMpOworCWlmICghZW50cnkpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkgICAiJ2F2YWlsYWJsZV9ldmVudHMnIGVudHJ5XG4iKTsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgic2V0X2V2ZW50IiwgMDY0NCwgZF90cmFjZXIsCisJCQkJICAgICh2b2lkICopJnNob3dfc2V0X2V2ZW50X3NlcV9vcHMsCisJCQkJICAgICZmdHJhY2Vfc2V0X2V2ZW50X2ZvcHMpOworCWlmICghZW50cnkpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkgICAiJ3NldF9ldmVudCcgZW50cnlcbiIpOworCisJZF9ldmVudHMgPSBldmVudF90cmFjZV9ldmVudHNfZGlyKCk7CisJaWYgKCFkX2V2ZW50cykKKwkJcmV0dXJuIDA7CisKKwlmb3JfZWFjaF9ldmVudChjYWxsKSB7CisJCS8qIFRoZSBsaW5rZXIgbWF5IGxlYXZlIGJsYW5rcyAqLworCQlpZiAoIWNhbGwtPm5hbWUpCisJCQljb250aW51ZTsKKwkJZXZlbnRfY3JlYXRlX2RpcihjYWxsLCBkX2V2ZW50cyk7CisJfQorCisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChldmVudF90cmFjZV9pbml0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNmJlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogdHJhY2VfZXZlbnRzX2ZpbHRlciAtIGdlbmVyaWMgZXZlbnQgZmlsdGVyaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorCisjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworc3RhdGljIGludCBmaWx0ZXJfcHJlZF82NChzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQsIHZvaWQgKmV2ZW50KQoreworCXU2NCAqYWRkciA9ICh1NjQgKikoZXZlbnQgKyBwcmVkLT5vZmZzZXQpOworCXU2NCB2YWwgPSAodTY0KXByZWQtPnZhbDsKKwlpbnQgbWF0Y2g7CisKKwltYXRjaCA9ICh2YWwgPT0gKmFkZHIpIF4gcHJlZC0+bm90OworCisJcmV0dXJuIG1hdGNoOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9wcmVkXzMyKHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwgdm9pZCAqZXZlbnQpCit7CisJdTMyICphZGRyID0gKHUzMiAqKShldmVudCArIHByZWQtPm9mZnNldCk7CisJdTMyIHZhbCA9ICh1MzIpcHJlZC0+dmFsOworCWludCBtYXRjaDsKKworCW1hdGNoID0gKHZhbCA9PSAqYWRkcikgXiBwcmVkLT5ub3Q7CisKKwlyZXR1cm4gbWF0Y2g7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX3ByZWRfMTYoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCkKK3sKKwl1MTYgKmFkZHIgPSAodTE2ICopKGV2ZW50ICsgcHJlZC0+b2Zmc2V0KTsKKwl1MTYgdmFsID0gKHUxNilwcmVkLT52YWw7CisJaW50IG1hdGNoOworCisJbWF0Y2ggPSAodmFsID09ICphZGRyKSBeIHByZWQtPm5vdDsKKworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfcHJlZF84KHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwgdm9pZCAqZXZlbnQpCit7CisJdTggKmFkZHIgPSAodTggKikoZXZlbnQgKyBwcmVkLT5vZmZzZXQpOworCXU4IHZhbCA9ICh1OClwcmVkLT52YWw7CisJaW50IG1hdGNoOworCisJbWF0Y2ggPSAodmFsID09ICphZGRyKSBeIHByZWQtPm5vdDsKKworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfcHJlZF9zdHJpbmcoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCkKK3sKKwljaGFyICphZGRyID0gKGNoYXIgKikoZXZlbnQgKyBwcmVkLT5vZmZzZXQpOworCWludCBjbXAsIG1hdGNoOworCisJY21wID0gc3RybmNtcChhZGRyLCBwcmVkLT5zdHJfdmFsLCBwcmVkLT5zdHJfbGVuKTsKKworCW1hdGNoID0gKCFjbXApIF4gcHJlZC0+bm90OworCisJcmV0dXJuIG1hdGNoOworfQorCisvKiByZXR1cm4gMSBpZiBldmVudCBtYXRjaGVzLCAwIG90aGVyd2lzZSAoZGlzY2FyZCkgKi8KK2ludCBmaWx0ZXJfbWF0Y2hfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpyZWMpCit7CisJaW50IGksIG1hdGNoZWQsIGFuZF9mYWlsZWQgPSAwOworCXN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMVEVSX1BSRUQ7IGkrKykgeworCQlpZiAoY2FsbC0+cHJlZHNbaV0pIHsKKwkJCXByZWQgPSBjYWxsLT5wcmVkc1tpXTsKKwkJCWlmIChhbmRfZmFpbGVkICYmICFwcmVkLT5vcikKKwkJCQljb250aW51ZTsKKwkJCW1hdGNoZWQgPSBwcmVkLT5mbihwcmVkLCByZWMpOworCQkJaWYgKCFtYXRjaGVkICYmICFwcmVkLT5vcikgeworCQkJCWFuZF9mYWlsZWQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChtYXRjaGVkICYmIHByZWQtPm9yKQorCQkJCXJldHVybiAxOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKworCWlmIChhbmRfZmFpbGVkKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCit2b2lkIGZpbHRlcl9wcmludF9wcmVkcyhzdHJ1Y3QgZmlsdGVyX3ByZWQgKipwcmVkcywgc3RydWN0IHRyYWNlX3NlcSAqcykKK3sKKwljaGFyICpmaWVsZF9uYW1lOworCXN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZDsKKwlpbnQgaTsKKworCWlmICghcHJlZHMpIHsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAibm9uZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTFRFUl9QUkVEOyBpKyspIHsKKwkJaWYgKHByZWRzW2ldKSB7CisJCQlwcmVkID0gcHJlZHNbaV07CisJCQlmaWVsZF9uYW1lID0gcHJlZC0+ZmllbGRfbmFtZTsKKwkJCWlmIChpKQorCQkJCXRyYWNlX3NlcV9wcmludGYocywgcHJlZC0+b3IgPyAifHwgIiA6ICImJiAiKTsKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIiVzICIsIGZpZWxkX25hbWUpOworCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCBwcmVkLT5ub3QgPyAiIT0gIiA6ICI9PSAiKTsKKwkJCWlmIChwcmVkLT5zdHJfdmFsKQorCQkJCXRyYWNlX3NlcV9wcmludGYocywgIiVzXG4iLCBwcmVkLT5zdHJfdmFsKTsKKwkJCWVsc2UKKwkJCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1XG4iLCBwcmVkLT52YWwpOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKgorZmluZF9ldmVudF9maWVsZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqZmllbGQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZpZWxkLCAmY2FsbC0+ZmllbGRzLCBsaW5rKSB7CisJCWlmICghc3RyY21wKGZpZWxkLT5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiBmaWVsZDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBmaWx0ZXJfZnJlZV9wcmVkKHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCkKK3sKKwlpZiAoIXByZWQpCisJCXJldHVybjsKKworCWtmcmVlKHByZWQtPmZpZWxkX25hbWUpOworCWtmcmVlKHByZWQtPnN0cl92YWwpOworCWtmcmVlKHByZWQpOworfQorCit2b2lkIGZpbHRlcl9mcmVlX3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlpbnQgaTsKKworCWlmIChjYWxsLT5wcmVkcykgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTFRFUl9QUkVEOyBpKyspCisJCQlmaWx0ZXJfZnJlZV9wcmVkKGNhbGwtPnByZWRzW2ldKTsKKwkJa2ZyZWUoY2FsbC0+cHJlZHMpOworCQljYWxsLT5wcmVkcyA9IE5VTEw7CisJfQorfQorCit2b2lkIGZpbHRlcl9mcmVlX3N1YnN5c3RlbV9wcmVkcyhzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0pCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gX19zdGFydF9mdHJhY2VfZXZlbnRzOworCWludCBpOworCisJaWYgKHN5c3RlbS0+cHJlZHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9GSUxURVJfUFJFRDsgaSsrKQorCQkJZmlsdGVyX2ZyZWVfcHJlZChzeXN0ZW0tPnByZWRzW2ldKTsKKwkJa2ZyZWUoc3lzdGVtLT5wcmVkcyk7CisJCXN5c3RlbS0+cHJlZHMgPSBOVUxMOworCX0KKworCWV2ZW50c19mb3JfZWFjaChjYWxsKSB7CisJCWlmICghY2FsbC0+bmFtZSB8fCAhY2FsbC0+cmVnZnVuYykKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RyY21wKGNhbGwtPnN5c3RlbSwgc3lzdGVtLT5uYW1lKSkKKwkJCWZpbHRlcl9mcmVlX3ByZWRzKGNhbGwpOworCX0KK30KKworc3RhdGljIGludCBfX2ZpbHRlcl9hZGRfcHJlZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCisJCQkgICAgIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCkKK3sKKwlpbnQgaTsKKworCWlmIChjYWxsLT5wcmVkcyAmJiAhcHJlZC0+Y29tcG91bmQpCisJCWZpbHRlcl9mcmVlX3ByZWRzKGNhbGwpOworCisJaWYgKCFjYWxsLT5wcmVkcykgeworCQljYWxsLT5wcmVkcyA9IGt6YWxsb2MoTUFYX0ZJTFRFUl9QUkVEICogc2l6ZW9mKHByZWQpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWNhbGwtPnByZWRzKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9GSUxURVJfUFJFRDsgaSsrKSB7CisJCWlmICghY2FsbC0+cHJlZHNbaV0pIHsKKwkJCWNhbGwtPnByZWRzW2ldID0gcHJlZDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgaXNfc3RyaW5nX2ZpZWxkKGNvbnN0IGNoYXIgKnR5cGUpCit7CisJaWYgKHN0cmNocih0eXBlLCAnWycpICYmIHN0cnN0cih0eXBlLCAiY2hhciIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitpbnQgZmlsdGVyX2FkZF9wcmVkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOworCisJZmllbGQgPSBmaW5kX2V2ZW50X2ZpZWxkKGNhbGwsIHByZWQtPmZpZWxkX25hbWUpOworCWlmICghZmllbGQpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJlZC0+b2Zmc2V0ID0gZmllbGQtPm9mZnNldDsKKworCWlmIChpc19zdHJpbmdfZmllbGQoZmllbGQtPnR5cGUpKSB7CisJCWlmICghcHJlZC0+c3RyX3ZhbCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlwcmVkLT5mbiA9IGZpbHRlcl9wcmVkX3N0cmluZzsKKwkJcHJlZC0+c3RyX2xlbiA9IGZpZWxkLT5zaXplOworCQlyZXR1cm4gX19maWx0ZXJfYWRkX3ByZWQoY2FsbCwgcHJlZCk7CisJfSBlbHNlIHsKKwkJaWYgKHByZWQtPnN0cl92YWwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZpZWxkLT5zaXplKSB7CisJY2FzZSA4OgorCQlwcmVkLT5mbiA9IGZpbHRlcl9wcmVkXzY0OworCQlicmVhazsKKwljYXNlIDQ6CisJCXByZWQtPmZuID0gZmlsdGVyX3ByZWRfMzI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJlZC0+Zm4gPSBmaWx0ZXJfcHJlZF8xNjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcmVkLT5mbiA9IGZpbHRlcl9wcmVkXzg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBfX2ZpbHRlcl9hZGRfcHJlZChjYWxsLCBwcmVkKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWx0ZXJfcHJlZCAqY29weV9wcmVkKHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCkKK3sKKwlzdHJ1Y3QgZmlsdGVyX3ByZWQgKm5ld19wcmVkID0ga21hbGxvYyhzaXplb2YoKnByZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19wcmVkKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbWNweShuZXdfcHJlZCwgcHJlZCwgc2l6ZW9mKCpwcmVkKSk7CisKKwlpZiAocHJlZC0+ZmllbGRfbmFtZSkgeworCQluZXdfcHJlZC0+ZmllbGRfbmFtZSA9IGtzdHJkdXAocHJlZC0+ZmllbGRfbmFtZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X3ByZWQtPmZpZWxkX25hbWUpIHsKKwkJCWtmcmVlKG5ld19wcmVkKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJaWYgKHByZWQtPnN0cl92YWwpIHsKKwkJbmV3X3ByZWQtPnN0cl92YWwgPSBrc3RyZHVwKHByZWQtPnN0cl92YWwsIEdGUF9LRVJORUwpOworCQlpZiAoIW5ld19wcmVkLT5zdHJfdmFsKSB7CisJCQlmaWx0ZXJfZnJlZV9wcmVkKG5ld19wcmVkKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIG5ld19wcmVkOworfQorCitpbnQgZmlsdGVyX2FkZF9zdWJzeXN0ZW1fcHJlZChzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0sCisJCQkgICAgICBzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gX19zdGFydF9mdHJhY2VfZXZlbnRzOworCXN0cnVjdCBmaWx0ZXJfcHJlZCAqZXZlbnRfcHJlZDsKKwlpbnQgaTsKKworCWlmIChzeXN0ZW0tPnByZWRzICYmICFwcmVkLT5jb21wb3VuZCkKKwkJZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN5c3RlbSk7CisKKwlpZiAoIXN5c3RlbS0+cHJlZHMpIHsKKwkJc3lzdGVtLT5wcmVkcyA9IGt6YWxsb2MoTUFYX0ZJTFRFUl9QUkVEICogc2l6ZW9mKHByZWQpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFzeXN0ZW0tPnByZWRzKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9GSUxURVJfUFJFRDsgaSsrKSB7CisJCWlmICghc3lzdGVtLT5wcmVkc1tpXSkgeworCQkJc3lzdGVtLT5wcmVkc1tpXSA9IHByZWQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IE1BWF9GSUxURVJfUFJFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlldmVudHNfZm9yX2VhY2goY2FsbCkgeworCQlpbnQgZXJyOworCisJCWlmICghY2FsbC0+bmFtZSB8fCAhY2FsbC0+cmVnZnVuYykKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJjbXAoY2FsbC0+c3lzdGVtLCBzeXN0ZW0tPm5hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaW5kX2V2ZW50X2ZpZWxkKGNhbGwsIHByZWQtPmZpZWxkX25hbWUpKQorCQkJY29udGludWU7CisKKwkJZXZlbnRfcHJlZCA9IGNvcHlfcHJlZChwcmVkKTsKKwkJaWYgKCFldmVudF9wcmVkKQorCQkJZ290byBvb207CisKKwkJZXJyID0gZmlsdGVyX2FkZF9wcmVkKGNhbGwsIGV2ZW50X3ByZWQpOworCQlpZiAoZXJyKQorCQkJZmlsdGVyX2ZyZWVfcHJlZChldmVudF9wcmVkKTsKKwkJaWYgKGVyciA9PSAtRU5PTUVNKQorCQkJZ290byBvb207CisJfQorCisJcmV0dXJuIDA7CisKK29vbToKKwlzeXN0ZW0tPnByZWRzW2ldID0gTlVMTDsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworaW50IGZpbHRlcl9wYXJzZShjaGFyICoqcGJ1Ziwgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQoreworCWNoYXIgKnRtcCwgKnRvaywgKnZhbF9zdHIgPSBOVUxMOworCWludCB0b2tfbiA9IDA7CisKKwkvKiBmaWVsZCA9PS8hPSBudW1iZXIsIG9yL2FuZCBmaWVsZCA9PS8hPSBudW1iZXIsIG51bWJlciAqLworCXdoaWxlICgodG9rID0gc3Ryc2VwKHBidWYsICIgXG4iKSkpIHsKKwkJaWYgKHRva19uID09IDApIHsKKwkJCWlmICghc3RyY21wKHRvaywgIjAiKSkgeworCQkJCXByZWQtPmNsZWFyID0gMTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2ssICImJiIpKSB7CisJCQkJcHJlZC0+b3IgPSAwOworCQkJCXByZWQtPmNvbXBvdW5kID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2ssICJ8fCIpKSB7CisJCQkJcHJlZC0+b3IgPSAxOworCQkJCXByZWQtPmNvbXBvdW5kID0gMTsKKwkJCX0gZWxzZQorCQkJCXByZWQtPmZpZWxkX25hbWUgPSB0b2s7CisJCQl0b2tfbiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodG9rX24gPT0gMSkgeworCQkJaWYgKCFwcmVkLT5maWVsZF9uYW1lKQorCQkJCXByZWQtPmZpZWxkX25hbWUgPSB0b2s7CisJCQllbHNlIGlmICghc3RyY21wKHRvaywgIiE9IikpCisJCQkJcHJlZC0+bm90ID0gMTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAiPT0iKSkKKwkJCQlwcmVkLT5ub3QgPSAwOworCQkJZWxzZSB7CisJCQkJcHJlZC0+ZmllbGRfbmFtZSA9IE5VTEw7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQl0b2tfbiA9IDI7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodG9rX24gPT0gMikgeworCQkJaWYgKHByZWQtPmNvbXBvdW5kKSB7CisJCQkJaWYgKCFzdHJjbXAodG9rLCAiIT0iKSkKKwkJCQkJcHJlZC0+bm90ID0gMTsKKwkJCQllbHNlIGlmICghc3RyY21wKHRvaywgIj09IikpCisJCQkJCXByZWQtPm5vdCA9IDA7CisJCQkJZWxzZSB7CisJCQkJCXByZWQtPmZpZWxkX25hbWUgPSBOVUxMOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXZhbF9zdHIgPSB0b2s7CisJCQkJYnJlYWs7IC8qIGRvbmUgKi8KKwkJCX0KKwkJCXRva19uID0gMzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0b2tfbiA9PSAzKSB7CisJCQl2YWxfc3RyID0gdG9rOworCQkJYnJlYWs7IC8qIGRvbmUgKi8KKwkJfQorCX0KKworCXByZWQtPmZpZWxkX25hbWUgPSBrc3RyZHVwKHByZWQtPmZpZWxkX25hbWUsIEdGUF9LRVJORUwpOworCWlmICghcHJlZC0+ZmllbGRfbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcmVkLT52YWwgPSBzaW1wbGVfc3RydG91bGwodmFsX3N0ciwgJnRtcCwgMTApOworCWlmICh0bXAgPT0gdmFsX3N0cikgeworCQlwcmVkLT5zdHJfdmFsID0ga3N0cmR1cCh2YWxfc3RyLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcmVkLT5zdHJfdmFsKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8xLmggYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODk4NWY5Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8xLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIFN0YWdlIDEgb2YgdGhlIHRyYWNlIGV2ZW50cy4KKyAqCisgKiBPdmVycmlkZSB0aGUgbWFjcm9zIGluIDx0cmFjZS90cmFjZV9ldmVudF90eXBlcy5oPiB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgKgorICogc3RydWN0IGZ0cmFjZV9yYXdfPGNhbGw+IHsKKyAqCXN0cnVjdCB0cmFjZV9lbnRyeQkJZW50OworICoJPHR5cGU+CQkJCTxpdGVtPjsKKyAqCTx0eXBlMj4JCQkJPGl0ZW0yPls8bGVuPl07CisgKglbLi4uXQorICogfTsKKyAqCisgKiBUaGUgPHR5cGU+IDxpdGVtPiBpcyBjcmVhdGVkIGJ5IHRoZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pIG1hY3JvIG9yCisgKiB0aGUgX19hcnJheSh0eXBlMiwgaXRlbTIsIGxlbikgbWFjcm8uCisgKiBXZSBzaW1wbHkgZG8gInR5cGUgaXRlbTsiLCBhbmQgdGhhdCB3aWxsIGNyZWF0ZSB0aGUgZmllbGRzCisgKiBpbiB0aGUgc3RydWN0dXJlLgorICovCisKKyN1bmRlZiBUUkFDRV9GT1JNQVQKKyNkZWZpbmUgVFJBQ0VfRk9STUFUKGNhbGwsIHByb3RvLCBhcmdzLCBmbXQpCisKKyN1bmRlZiBfX2FycmF5CisjZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQl0eXBlCWl0ZW1bbGVuXTsKKworI3VuZGVmIF9fZmllbGQKKyNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJdHlwZQlpdGVtOworCisjdW5kZWYgVFBfU1RSVUNUX19lbnRyeQorI2RlZmluZSBUUF9TVFJVQ1RfX2VudHJ5KGFyZ3MuLi4pIGFyZ3MKKworI3VuZGVmIFRSQUNFX0VWRU5UCisjZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCisJc3RydWN0IGZ0cmFjZV9yYXdfIyNuYW1lIHsJCQkJXAorCQlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OwkJCVwKKwkJdHN0cnVjdAkJCQkJCVwKKwl9OwkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF8jI25hbWUKKworI2luY2x1ZGUgPHRyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzIuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzQzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzIuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIFN0YWdlIDIgb2YgdGhlIHRyYWNlIGV2ZW50cy4KKyAqCisgKiBPdmVycmlkZSB0aGUgbWFjcm9zIGluIDx0cmFjZS90cmFjZV9ldmVudF90eXBlcy5oPiB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgKgorICogZW51bSBwcmludF9saW5lX3QKKyAqIGZ0cmFjZV9yYXdfb3V0cHV0XzxjYWxsPihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKKyAqIHsKKyAqCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworICoJc3RydWN0IGZ0cmFjZV9yYXdfPGNhbGw+ICpmaWVsZDsgPC0tIGRlZmluZWQgaW4gc3RhZ2UgMQorICoJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKKyAqCWludCByZXQ7CisgKgorICoJZW50cnkgPSBpdGVyLT5lbnQ7CisgKgorICoJaWYgKGVudHJ5LT50eXBlICE9IGV2ZW50XzxjYWxsPi5pZCkgeworICoJCVdBUk5fT05fT05DRSgxKTsKKyAqCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CisgKgl9CisgKgorICoJZmllbGQgPSAodHlwZW9mKGZpZWxkKSllbnRyeTsKKyAqCisgKglyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsIDxUUF9wcmludGs+ICJcbiIpOworICoJaWYgKCFyZXQpCisgKgkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworICoKKyAqCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisgKiB9CisgKgorICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgdG8gcHJpbnQgdGhlIHJhdyBldmVudCB0byB0aGUgdHJhY2UKKyAqIG91dHB1dCBmb3JtYXQuIE5vdGUsIHRoaXMgaXMgbm90IG5lZWRlZCBpZiB0aGUgZGF0YSBpcyByZWFkCisgKiBpbiBiaW5hcnkuCisgKi8KKworI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBmaWVsZAorCisjdW5kZWYgVFBfcHJpbnRrCisjZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pIGZtdCAiXG4iLCBhcmdzCisKKyN1bmRlZiBUUkFDRV9FVkVOVAorI2RlZmluZSBUUkFDRV9FVkVOVChjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJCVwKK2VudW0gcHJpbnRfbGluZV90CQkJCQkJCVwKK2Z0cmFjZV9yYXdfb3V0cHV0XyMjY2FsbChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsJCQkJXAorCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZmllbGQ7CQkJCVwKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwkJCQkJXAorCWludCByZXQ7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwllbnRyeSA9IGl0ZXItPmVudDsJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKGVudHJ5LT50eXBlICE9IGV2ZW50XyMjY2FsbC5pZCkgewkJCQlcCisJCVdBUk5fT05fT05DRSgxKTsJCQkJCVwKKwkJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOwkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWZpZWxkID0gKHR5cGVvZihmaWVsZCkpZW50cnk7CQkJCQlcCisJCQkJCQkJCQlcCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAjY2FsbCAiOiAiIHByaW50KTsJCQlcCisJaWYgKCFyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsJCQkJCVwKK30KKwkKKyNpbmNsdWRlIDx0cmFjZS90cmFjZV9ldmVudF90eXBlcy5oPgorCisvKgorICogU2V0dXAgdGhlIHNob3dpbmcgZm9ybWF0IG9mIHRyYWNlIHBvaW50LgorICoKKyAqIGludAorICogZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IHRyYWNlX3NlcSAqcykKKyAqIHsKKyAqCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCBmaWVsZDsKKyAqCWludCByZXQ7CisgKgorICoJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAjdHlwZSAiICIgI2l0ZW0gIjsiCisgKgkJCSAgICAgICAiIG9mZnNldDoldTsgc2l6ZToldTtcbiIsCisgKgkJCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwsIGl0ZW0pLAorICoJCQkgICAgICAgc2l6ZW9mKGZpZWxkLnR5cGUpKTsKKyAqCisgKiB9CisgKi8KKworI3VuZGVmIFRQX1NUUlVDVF9fZW50cnkKKyNkZWZpbmUgVFBfU1RSVUNUX19lbnRyeShhcmdzLi4uKSBhcmdzCisKKyN1bmRlZiBfX2ZpZWxkCisjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCQkJCVwKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKKwkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcbiIsCQlcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pKTsJXAorCWlmICghcmV0KQkJCQkJCQlcCisJCXJldHVybiAwOworCisjdW5kZWYgX19hcnJheQorI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJCQlcCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiWyIgI2xlbiAiXTtcdCIJXAorCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1xuIiwJCVwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLCBcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuaXRlbSkpOwlcCisJaWYgKCFyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIDA7CisKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgIlJFQyIKKworI3VuZGVmIFRQX3ByaW50aworI2RlZmluZSBUUF9wcmludGsoZm10LCBhcmdzLi4uKSAiJXMsICVzXG4iLCAjZm10LCAjYXJncworCisjdW5kZWYgVFBfZmFzdF9hc3NpZ24KKyNkZWZpbmUgVFBfZmFzdF9hc3NpZ24oYXJncy4uLikgYXJncworCisjdW5kZWYgVFJBQ0VfRVZFTlQKKyNkZWZpbmUgVFJBQ0VfRVZFTlQoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQkJXAorc3RhdGljIGludAkJCQkJCQkJXAorZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7CQkJCQlcCisJaW50IHJldDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXRzdHJ1Y3Q7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogIiBwcmludCk7CQkJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworI2luY2x1ZGUgPHRyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmg+CisKKyN1bmRlZiBfX2ZpZWxkCisjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCQkJCQlcCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCAjaXRlbSwJCVwKKwkJCQkgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCisJCQkJIHNpemVvZihmaWVsZC5pdGVtKSk7CQkJXAorCWlmIChyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIHJldDsKKworI3VuZGVmIF9fYXJyYXkKKyNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCQkJCQlcCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlICJbIiAjbGVuICJdIiwgI2l0ZW0sCVwKKwkJCQkgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCisJCQkJIHNpemVvZihmaWVsZC5pdGVtKSk7CQkJXAorCWlmIChyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIHJldDsKKworI2RlZmluZSBfX2NvbW1vbl9maWVsZCh0eXBlLCBpdGVtKQkJCQkJXAorCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSwgImNvbW1vbl8iICNpdGVtLAlcCisJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZC5lbnQpLCBpdGVtKSwJXAorCQkJCSBzaXplb2YoZmllbGQuZW50Lml0ZW0pKTsJCVwKKwlpZiAocmV0KQkJCQkJCQlcCisJCXJldHVybiByZXQ7CisKKyN1bmRlZiBUUkFDRV9FVkVOVAorI2RlZmluZSBUUkFDRV9FVkVOVChjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgZnVuYywgcHJpbnQpCQlcCitpbnQJCQkJCQkJCQlcCitmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwodm9pZCkJCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkOwkJCQkJXAorCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCA9ICZldmVudF8jI2NhbGw7CQlcCisJaW50IHJldDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIHR5cGUpOwkJCQlcCisJX19jb21tb25fZmllbGQodW5zaWduZWQgY2hhciwgZmxhZ3MpOwkJCQlcCisJX19jb21tb25fZmllbGQodW5zaWduZWQgY2hhciwgcHJlZW1wdF9jb3VudCk7CQkJXAorCV9fY29tbW9uX2ZpZWxkKGludCwgcGlkKTsJCQkJCVwKKwlfX2NvbW1vbl9maWVsZChpbnQsIHRnaWQpOwkJCQkJXAorCQkJCQkJCQkJXAorCXRzdHJ1Y3Q7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CisKKyNpbmNsdWRlIDx0cmFjZS90cmFjZV9ldmVudF90eXBlcy5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8zLmggYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDJmYTc4Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8zLmgKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBTdGFnZSAzIG9mIHRoZSB0cmFjZSBldmVudHMuCisgKgorICogT3ZlcnJpZGUgdGhlIG1hY3JvcyBpbiA8dHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaD4gdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICoKKyAqIHN0YXRpYyB2b2lkIGZ0cmFjZV9ldmVudF88Y2FsbD4ocHJvdG8pCisgKiB7CisgKglldmVudF90cmFjZV9wcmludGsoX1JFVF9JUF8sICI8Y2FsbD46ICIgPGZtdD4pOworICogfQorICoKKyAqIHN0YXRpYyBpbnQgZnRyYWNlX3JlZ19ldmVudF88Y2FsbD4odm9pZCkKKyAqIHsKKyAqCWludCByZXQ7CisgKgorICoJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9ldmVudF88Y2FsbD4pOworICoJaWYgKCFyZXQpCisgKgkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSB0cmFjZSBwb2ludCAiCisgKgkJCSJwcm9iZSB0byAgPGNhbGw+Iik7CisgKglyZXR1cm4gcmV0OworICogfQorICoKKyAqIHN0YXRpYyB2b2lkIGZ0cmFjZV91bnJlZ19ldmVudF88Y2FsbD4odm9pZCkKKyAqIHsKKyAqCXVucmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9ldmVudF88Y2FsbD4pOworICogfQorICoKKyAqIEZvciB0aG9zZSBtYWNyb3MgZGVmaW5lZCB3aXRoIFRSQUNFX0ZPUk1BVDoKKyAqCisgKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAorICogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQorICogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XzxjYWxsPiA9IHsKKyAqCS5uYW1lCQkJPSAiPGNhbGw+IiwKKyAqCS5yZWdmdW5jCQk9IGZ0cmFjZV9yZWdfZXZlbnRfPGNhbGw+LAorICoJLnVucmVnZnVuYwkJPSBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+LAorICogfQorICoKKyAqCisgKiBGb3IgdGhvc2UgbWFjcm9zIGRlZmluZWQgd2l0aCBUUkFDRV9FVkVOVDoKKyAqCisgKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50XzxjYWxsPjsKKyAqCisgKiBzdGF0aWMgdm9pZCBmdHJhY2VfcmF3X2V2ZW50XzxjYWxsPihwcm90bykKKyAqIHsKKyAqCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisgKglzdHJ1Y3QgZnRyYWNlX3Jhd188Y2FsbD4gKmVudHJ5OyA8LS0gZGVmaW5lZCBpbiBzdGFnZSAxCisgKgl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKyAqCWludCBwYzsKKyAqCisgKglsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CisgKglwYyA9IHByZWVtcHRfY291bnQoKTsKKyAqCisgKglldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZShldmVudF88Y2FsbD4uaWQsCisgKgkJCQkgIHNpemVvZihzdHJ1Y3QgZnRyYWNlX3Jhd188Y2FsbD4pLAorICoJCQkJICBpcnFfZmxhZ3MsIHBjKTsKKyAqCWlmICghZXZlbnQpCisgKgkJcmV0dXJuOworICoJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKyAqCisgKgk8YXNzaWduPjsgIDwtLSBIZXJlIHdlIGFzc2lnbiB0aGUgZW50cmllcyBieSB0aGUgX19maWVsZCBhbmQKKyAqCQkJX19hcnJheSBtYWNyb3MuCisgKgorICoJdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChldmVudCwgaXJxX2ZsYWdzLCBwYyk7CisgKiB9CisgKgorICogc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF88Y2FsbD4odm9pZCkKKyAqIHsKKyAqCWludCByZXQ7CisgKgorICoJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9yYXdfZXZlbnRfPGNhbGw+KTsKKyAqCWlmICghcmV0KQorICoJCXByX2luZm8oImV2ZW50IHRyYWNlOiBDb3VsZCBub3QgYWN0aXZhdGUgdHJhY2UgcG9pbnQgIgorICoJCQkicHJvYmUgdG8gPGNhbGw+Iik7CisgKglyZXR1cm4gcmV0OworICogfQorICoKKyAqIHN0YXRpYyB2b2lkIGZ0cmFjZV91bnJlZ19ldmVudF88Y2FsbD4odm9pZCkKKyAqIHsKKyAqCXVucmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9yYXdfZXZlbnRfPGNhbGw+KTsKKyAqIH0KKyAqCisgKiBzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IGZ0cmFjZV9ldmVudF90eXBlXzxjYWxsPiA9IHsKKyAqCS50cmFjZQkJCT0gZnRyYWNlX3Jhd19vdXRwdXRfPGNhbGw+LCA8LS0gc3RhZ2UgMgorICogfTsKKyAqCisgKiBzdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF88Y2FsbD4odm9pZCkKKyAqIHsKKyAqCWludCBpZDsKKyAqCisgKglpZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmZnRyYWNlX2V2ZW50X3R5cGVfPGNhbGw+KTsKKyAqCWlmICghaWQpCisgKgkJcmV0dXJuIC1FTk9ERVY7CisgKglldmVudF88Y2FsbD4uaWQgPSBpZDsKKyAqCXJldHVybiAwOworICogfQorICoKKyAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCisgKiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCisgKiBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfPGNhbGw+ID0geworICoJLm5hbWUJCQk9ICI8Y2FsbD4iLAorICoJLnN5c3RlbQkJCT0gIjxzeXN0ZW0+IiwKKyAqCS5yYXdfaW5pdAkJPSBmdHJhY2VfcmF3X2luaXRfZXZlbnRfPGNhbGw+LAorICoJLnJlZ2Z1bmMJCT0gZnRyYWNlX3JlZ19ldmVudF88Y2FsbD4sCisgKgkudW5yZWdmdW5jCQk9IGZ0cmFjZV91bnJlZ19ldmVudF88Y2FsbD4sCisgKgkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF88Y2FsbD4sCisgKiB9CisgKgorICovCisKKyN1bmRlZiBUUF9GTVQKKyNkZWZpbmUgVFBfRk1UKGZtdCwgYXJncy4uLikJZm10ICJcbiIsICMjYXJncworCisjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNkZWZpbmUgX1RSQUNFX1BST0ZJTEUoY2FsbCwgcHJvdG8sIGFyZ3MpCQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90bykJCQkJXAorewkJCQkJCQkJCVwKKwlleHRlcm4gdm9pZCBwZXJmX3RwY291bnRlcl9ldmVudChpbnQpOwkJCQlcCisJcGVyZl90cGNvdW50ZXJfZXZlbnQoZXZlbnRfIyNjYWxsLmlkKTsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpIFwKK3sJCQkJCQkJCQlcCisJaW50IHJldCA9IDA7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoIWF0b21pY19pbmNfcmV0dXJuKCZjYWxsLT5wcm9maWxlX2NvdW50KSkJCQlcCisJCXJldCA9IHJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcHJvZmlsZV8jI2NhbGwpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkgXAorewkJCQkJCQkJCVwKKwlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJmNhbGwtPnByb2ZpbGVfY291bnQpKQkJXAorCQl1bnJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcHJvZmlsZV8jI2NhbGwpOwkJXAorfQorCisjZGVmaW5lIF9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKKwkucHJvZmlsZV9jb3VudCA9IEFUT01JQ19JTklUKC0xKSwJCQkJXAorCS5wcm9maWxlX2VuYWJsZSA9IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV8jI2NhbGwsCQkJXAorCS5wcm9maWxlX2Rpc2FibGUgPSBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjY2FsbCwKKworI2Vsc2UKKyNkZWZpbmUgX1RSQUNFX1BST0ZJTEUoY2FsbCwgcHJvdG8sIGFyZ3MpCisjZGVmaW5lIF9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkKKyNlbmRpZgorCisjZGVmaW5lIF9UUkFDRV9GT1JNQVQoY2FsbCwgcHJvdG8sIGFyZ3MsIGZtdCkJCQkJXAorc3RhdGljIHZvaWQgZnRyYWNlX2V2ZW50XyMjY2FsbChwcm90bykJCQkJCVwKK3sJCQkJCQkJCQlcCisJZXZlbnRfdHJhY2VfcHJpbnRrKF9SRVRfSVBfLCAjY2FsbCAiOiAiIGZtdCk7CQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX3JlZ19ldmVudF8jI2NhbGwodm9pZCkJCQkJXAorewkJCQkJCQkJCVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9ldmVudF8jI2NhbGwpOwkJXAorCWlmIChyZXQpCQkJCQkJCVwKKwkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSB0cmFjZSBwb2ludCAiCVwKKwkJCSJwcm9iZSB0byAiICNjYWxsICJcbiIpOwkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHZvaWQgZnRyYWNlX3VucmVnX2V2ZW50XyMjY2FsbCh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCXVucmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9ldmVudF8jI2NhbGwpOwkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50XyMjY2FsbDsJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGludCBmdHJhY2VfaW5pdF9ldmVudF8jI2NhbGwodm9pZCkJCQkJXAorewkJCQkJCQkJCVwKKwlpbnQgaWQ7CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoTlVMTCk7CQkJCVwKKwlpZiAoIWlkKQkJCQkJCQlcCisJCXJldHVybiAtRU5PREVWOwkJCQkJCVwKKwlldmVudF8jI2NhbGwuaWQgPSBpZDsJCQkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKK30KKworI3VuZGVmIFRSQUNFX0ZPUk1BVAorI2RlZmluZSBUUkFDRV9GT1JNQVQoY2FsbCwgcHJvdG8sIGFyZ3MsIGZtdCkJCQkJXAorX1RSQUNFX0ZPUk1BVChjYWxsLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncyksIFBBUkFNUyhmbXQpKQkJXAorX1RSQUNFX1BST0ZJTEUoY2FsbCwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKKwkubmFtZQkJCT0gI2NhbGwsCQkJCVwKKwkuc3lzdGVtCQkJPSBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pLAkJXAorCS5yYXdfaW5pdAkJPSBmdHJhY2VfaW5pdF9ldmVudF8jI2NhbGwsCQlcCisJLnJlZ2Z1bmMJCT0gZnRyYWNlX3JlZ19ldmVudF8jI2NhbGwsCQlcCisJLnVucmVnZnVuYwkJPSBmdHJhY2VfdW5yZWdfZXZlbnRfIyNjYWxsLAkJXAorCV9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKK30KKworI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBlbnRyeQorCisjdW5kZWYgVFJBQ0VfRVZFTlQKKyNkZWZpbmUgVFJBQ0VfRVZFTlQoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCQlcCitfVFJBQ0VfUFJPRklMRShjYWxsLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF8jI2NhbGw7CQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsKHByb3RvKQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF8jI2NhbGw7CQkJXAorCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CQkJCVwKKwlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmVudHJ5OwkJCQlcCisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CQkJCQlcCisJaW50IHBjOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWxvY2FsX3NhdmVfZmxhZ3MoaXJxX2ZsYWdzKTsJCQkJCVwKKwlwYyA9IHByZWVtcHRfY291bnQoKTsJCQkJCQlcCisJCQkJCQkJCQlcCisJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoZXZlbnRfIyNjYWxsLmlkLAlcCisJCQkJICBzaXplb2Yoc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsKSwJXAorCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CQkJXAorCWlmICghZXZlbnQpCQkJCQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsJCQlcCisJCQkJCQkJCQlcCisJYXNzaWduOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChjYWxsLT5wcmVkcyAmJiAhZmlsdGVyX21hdGNoX3ByZWRzKGNhbGwsIGVudHJ5KSkJCVwKKwkJcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZChldmVudCk7CQkJXAorCQkJCQkJCQkJXAorCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChldmVudCwgaXJxX2ZsYWdzLCBwYyk7CVwKKwkJCQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW50IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCWludCByZXQ7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwpOwkJXAorCWlmIChyZXQpCQkJCQkJCVwKKwkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSB0cmFjZSBwb2ludCAiCVwKKwkJCSJwcm9iZSB0byAiICNjYWxsICJcbiIpOwkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHZvaWQgZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwodm9pZCkJCQkJXAorewkJCQkJCQkJCVwKKwl1bnJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBmdHJhY2VfZXZlbnRfdHlwZV8jI2NhbGwgPSB7CQkJXAorCS50cmFjZQkJCT0gZnRyYWNlX3Jhd19vdXRwdXRfIyNjYWxsLAkJXAorfTsJCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF8jI2NhbGwodm9pZCkJCQkJXAorewkJCQkJCQkJCVwKKwlpbnQgaWQ7CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmZ0cmFjZV9ldmVudF90eXBlXyMjY2FsbCk7CQlcCisJaWYgKCFpZCkJCQkJCQkJXAorCQlyZXR1cm4gLUVOT0RFVjsJCQkJCQlcCisJZXZlbnRfIyNjYWxsLmlkID0gaWQ7CQkJCQkJXAorCUlOSVRfTElTVF9IRUFEKCZldmVudF8jI2NhbGwuZmllbGRzKTsJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKK19fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfIyNjYWxsID0gewkJXAorCS5uYW1lCQkJPSAjY2FsbCwJCQkJXAorCS5zeXN0ZW0JCQk9IF9fc3RyaW5naWZ5KFRSQUNFX1NZU1RFTSksCQlcCisJLnJhd19pbml0CQk9IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF8jI2NhbGwsCQlcCisJLnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsLAkJXAorCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwsCVwKKwkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF8jI2NhbGwsCQkJXAorCS5kZWZpbmVfZmllbGRzCQk9IGZ0cmFjZV9kZWZpbmVfZmllbGRzXyMjY2FsbCwJCVwKKwlfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCit9CisKKyNpbmNsdWRlIDx0cmFjZS90cmFjZV9ldmVudF90eXBlcy5oPgorCisjdW5kZWYgX1RSQUNFX1BST0ZJTEUKKyN1bmRlZiBfVFJBQ0VfUFJPRklMRV9JTklUCisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDk5NTJkCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogdHJhY2VfZXhwb3J0LmMgLSBleHBvcnQgYmFzaWMgZnRyYWNlIHV0aWxpdGllcyB0byB1c2VyIHNwYWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworCisjdW5kZWYgVFJBQ0VfU1RSVUNUCisjZGVmaW5lIFRSQUNFX1NUUlVDVChhcmdzLi4uKSBhcmdzCisKKyN1bmRlZiBUUkFDRV9GSUVMRAorI2RlZmluZSBUUkFDRV9GSUVMRCh0eXBlLCBpdGVtLCBhc3NpZ24pCQkJCQlcCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCisJCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XG4iLAkJXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksIFwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5pdGVtKSk7CVwKKwlpZiAoIXJldCkJCQkJCQkJXAorCQlyZXR1cm4gMDsKKworCisjdW5kZWYgVFJBQ0VfRklFTERfU1BFQ0lBTAorI2RlZmluZSBUUkFDRV9GSUVMRF9TUEVDSUFMKHR5cGVfaXRlbSwgaXRlbSwgY21kKQkJCVwKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkIHNwZWNpYWw6IiAjdHlwZV9pdGVtICI7XHQiCVwKKwkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcbiIsCQlcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pKTsJXAorCWlmICghcmV0KQkJCQkJCQlcCisJCXJldHVybiAwOworCisjdW5kZWYgVFJBQ0VfRklFTERfWkVST19DSEFSCisjZGVmaW5lIFRSQUNFX0ZJRUxEX1pFUk9fQ0hBUihpdGVtKQkJCQkJXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IGNoYXIgIiAjaXRlbSAiO1x0IgkJXAorCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOjA7XG4iLAkJCVwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pKTsgXAorCWlmICghcmV0KQkJCQkJCQlcCisJCXJldHVybiAwOworCisKKyN1bmRlZiBUUF9SQVdfRk1UCisjZGVmaW5lIFRQX1JBV19GTVQoYXJncy4uLikgYXJncworCisjdW5kZWYgVFJBQ0VfRVZFTlRfRk9STUFUCisjZGVmaW5lIFRSQUNFX0VWRU5UX0ZPUk1BVChjYWxsLCBwcm90bywgYXJncywgZm10LCB0c3RydWN0LCB0cGZtdCkJXAorc3RhdGljIGludAkJCQkJCQkJXAorZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgYXJncyBmaWVsZDsJCQkJCQlcCisJaW50IHJldDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXRzdHJ1Y3Q7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogXCIlc1wiXG4iLCB0cGZtdCk7CQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQorCisjaW5jbHVkZSAidHJhY2VfZXZlbnRfdHlwZXMuaCIKKworI3VuZGVmIFRSQUNFX1pFUk9fQ0hBUgorI2RlZmluZSBUUkFDRV9aRVJPX0NIQVIoYXJnKQorCisjdW5kZWYgVFJBQ0VfRklFTEQKKyNkZWZpbmUgVFJBQ0VfRklFTEQodHlwZSwgaXRlbSwgYXNzaWduKVwKKwllbnRyeS0+aXRlbSA9IGFzc2lnbjsKKworI3VuZGVmIFRSQUNFX0ZJRUxECisjZGVmaW5lIFRSQUNFX0ZJRUxEKHR5cGUsIGl0ZW0sIGFzc2lnbilcCisJZW50cnktPml0ZW0gPSBhc3NpZ247CisKKyN1bmRlZiBUUF9DTUQKKyNkZWZpbmUgVFBfQ01EKGNtZC4uLikJY21kCisKKyN1bmRlZiBUUkFDRV9FTlRSWQorI2RlZmluZSBUUkFDRV9FTlRSWQllbnRyeQorCisjdW5kZWYgVFJBQ0VfRklFTERfU1BFQ0lBTAorI2RlZmluZSBUUkFDRV9GSUVMRF9TUEVDSUFMKHR5cGVfaXRlbSwgaXRlbSwgY21kKSBcCisJY21kOworCisjdW5kZWYgVFJBQ0VfRVZFTlRfRk9STUFUCisjZGVmaW5lIFRSQUNFX0VWRU5UX0ZPUk1BVChjYWxsLCBwcm90bywgYXJncywgZm10LCB0c3RydWN0LCB0cGZtdCkJXAorCQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKK19fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfIyNjYWxsID0gewkJXAorCS5uYW1lCQkJPSAjY2FsbCwJCQkJXAorCS5pZAkJCT0gcHJvdG8sCQkJCVwKKwkuc3lzdGVtCQkJPSBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pLAkJXAorCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XyMjY2FsbCwJCQlcCit9CisjaW5jbHVkZSAidHJhY2VfZXZlbnRfdHlwZXMuaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYwppbmRleCA5MjM2ZDdlLi5jOWEwYjdkIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCkBAIC05LDYgKzksNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEluZ28gTW9sbmFyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFdpbGxpYW0gTGVlIElyd2luIElJSQogICovCisjaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgpAQCAtMTYsMzEgKzE3LDI5IEBACiAKICNpbmNsdWRlICJ0cmFjZS5oIgogCi1zdGF0aWMgdm9pZCBzdGFydF9mdW5jdGlvbl90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQorLyogZnVuY3Rpb24gdHJhY2luZyBlbmFibGVkICovCitzdGF0aWMgaW50CQkJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkJKmZ1bmNfdHJhY2U7CisKK3N0YXRpYyB2b2lkIHRyYWNpbmdfc3RhcnRfZnVuY3Rpb25fdHJhY2Uodm9pZCk7CitzdGF0aWMgdm9pZCB0cmFjaW5nX3N0b3BfZnVuY3Rpb25fdHJhY2Uodm9pZCk7CisKK3N0YXRpYyBpbnQgZnVuY3Rpb25fdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogeworCWZ1bmNfdHJhY2UgPSB0cjsKIAl0ci0+Y3B1ID0gZ2V0X2NwdSgpOwotCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwogCXB1dF9jcHUoKTsKIAogCXRyYWNpbmdfc3RhcnRfY21kbGluZV9yZWNvcmQoKTsKIAl0cmFjaW5nX3N0YXJ0X2Z1bmN0aW9uX3RyYWNlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3BfZnVuY3Rpb25fdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQl0cmFjaW5nX3N0b3BfZnVuY3Rpb25fdHJhY2UoKTsKLQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKLX0KLQotc3RhdGljIGludCBmdW5jdGlvbl90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0Jc3RhcnRfZnVuY3Rpb25fdHJhY2UodHIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBmdW5jdGlvbl90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCXN0b3BfZnVuY3Rpb25fdHJhY2UodHIpOworCXRyYWNpbmdfc3RvcF9mdW5jdGlvbl90cmFjZSgpOworCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwogfQogCiBzdGF0aWMgdm9pZCBmdW5jdGlvbl90cmFjZV9zdGFydChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQpAQCAtNDgsMjAgKzQ3LDM1OCBAQAogCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwogfQogCitzdGF0aWMgdm9pZAorZnVuY3Rpb25fdHJhY2VfY2FsbF9wcmVlbXB0X29ubHkodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCit7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGZ1bmNfdHJhY2U7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvbmcgZGlzYWJsZWQ7CisJaW50IGNwdSwgcmVzY2hlZDsKKwlpbnQgcGM7CisKKwlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKKwkJcmV0dXJuOworCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOworCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKKworCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpCisJCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOworCisJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOworCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKK30KKworc3RhdGljIHZvaWQKK2Z1bmN0aW9uX3RyYWNlX2NhbGwodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCit7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGZ1bmNfdHJhY2U7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvbmcgZGlzYWJsZWQ7CisJaW50IGNwdTsKKwlpbnQgcGM7CisKKwlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBOZWVkIHRvIHVzZSByYXcsIHNpbmNlIHRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZQorCSAqIHJlY3Vyc2l2ZSBwcm90ZWN0aW9uIGlzIHBlcmZvcm1lZC4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlkYXRhID0gdHItPmRhdGFbY3B1XTsKKwlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisKKwlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKSB7CisJCXBjID0gcHJlZW1wdF9jb3VudCgpOworCQl0cmFjZV9mdW5jdGlvbih0ciwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKKwl9CisKKwlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAorZnVuY3Rpb25fc3RhY2tfdHJhY2VfY2FsbCh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gZnVuY190cmFjZTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyBkaXNhYmxlZDsKKwlpbnQgY3B1OworCWludCBwYzsKKworCWlmICh1bmxpa2VseSghZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE5lZWQgdG8gdXNlIHJhdywgc2luY2UgdGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlCisJICogcmVjdXJzaXZlIHByb3RlY3Rpb24gaXMgcGVyZm9ybWVkLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOworCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKKworCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpIHsKKwkJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOworCQkvKgorCQkgKiBza2lwIG92ZXIgNSBmdW5jczoKKwkJICogICAgX19mdHJhY2VfdHJhY2Vfc3RhY2ssCisJCSAqICAgIF9fdHJhY2Vfc3RhY2ssCisJCSAqICAgIGZ1bmN0aW9uX3N0YWNrX3RyYWNlX2NhbGwKKwkJICogICAgZnRyYWNlX2xpc3RfZnVuYworCQkgKiAgICBmdHJhY2VfY2FsbAorCQkgKi8KKwkJX190cmFjZV9zdGFjayh0ciwgZmxhZ3MsIDUsIHBjKTsKKwl9CisKKwlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9Cit7CisJLmZ1bmMgPSBmdW5jdGlvbl90cmFjZV9jYWxsLAorfTsKKworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX3N0YWNrX29wcyBfX3JlYWRfbW9zdGx5ID0KK3sKKwkuZnVuYyA9IGZ1bmN0aW9uX3N0YWNrX3RyYWNlX2NhbGwsCit9OworCisvKiBPdXIgdHdvIG9wdGlvbnMgKi8KK2VudW0geworCVRSQUNFX0ZVTkNfT1BUX1NUQUNLID0gMHgxLAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXJfb3B0IGZ1bmNfb3B0c1tdID0geworI2lmZGVmIENPTkZJR19TVEFDS1RSQUNFCisJeyBUUkFDRVJfT1BUKGZ1bmNfc3RhY2tfdHJhY2UsIFRSQUNFX0ZVTkNfT1BUX1NUQUNLKSB9LAorI2VuZGlmCisJeyB9IC8qIEFsd2F5cyBzZXQgYSBsYXN0IGVtcHR5IGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBmdW5jX2ZsYWdzID0geworCS52YWwgPSAwLCAvKiBCeSBkZWZhdWx0OiBhbGwgZmxhZ3MgZGlzYWJsZWQgKi8KKwkub3B0cyA9IGZ1bmNfb3B0cworfTsKKworc3RhdGljIHZvaWQgdHJhY2luZ19zdGFydF9mdW5jdGlvbl90cmFjZSh2b2lkKQoreworCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkID0gMDsKKworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJFRU1QVE9OTFkpCisJCXRyYWNlX29wcy5mdW5jID0gZnVuY3Rpb25fdHJhY2VfY2FsbF9wcmVlbXB0X29ubHk7CisJZWxzZQorCQl0cmFjZV9vcHMuZnVuYyA9IGZ1bmN0aW9uX3RyYWNlX2NhbGw7CisKKwlpZiAoZnVuY19mbGFncy52YWwgJiBUUkFDRV9GVU5DX09QVF9TVEFDSykKKwkJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9zdGFja19vcHMpOworCWVsc2UKKwkJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOworCisJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCB0cmFjaW5nX3N0b3BfZnVuY3Rpb25fdHJhY2Uodm9pZCkKK3sKKwlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCA9IDA7CisJLyogT0sgaWYgdGhleSBhcmUgbm90IHJlZ2lzdGVyZWQgKi8KKwl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfc3RhY2tfb3BzKTsKKwl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKK30KKworc3RhdGljIGludCBmdW5jX3NldF9mbGFnKHUzMiBvbGRfZmxhZ3MsIHUzMiBiaXQsIGludCBzZXQpCit7CisJaWYgKGJpdCA9PSBUUkFDRV9GVU5DX09QVF9TVEFDSykgeworCQkvKiBkbyBub3RoaW5nIGlmIGFscmVhZHkgc2V0ICovCisJCWlmICghIXNldCA9PSAhIShmdW5jX2ZsYWdzLnZhbCAmIFRSQUNFX0ZVTkNfT1BUX1NUQUNLKSkKKwkJCXJldHVybiAwOworCisJCWlmIChzZXQpIHsKKwkJCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOworCQkJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9zdGFja19vcHMpOworCQl9IGVsc2UgeworCQkJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3N0YWNrX29wcyk7CisJCQlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIHN0cnVjdCB0cmFjZXIgZnVuY3Rpb25fdHJhY2UgX19yZWFkX21vc3RseSA9CiB7Ci0JLm5hbWUJICAgICA9ICJmdW5jdGlvbiIsCi0JLmluaXQJICAgICA9IGZ1bmN0aW9uX3RyYWNlX2luaXQsCi0JLnJlc2V0CSAgICAgPSBmdW5jdGlvbl90cmFjZV9yZXNldCwKLQkuc3RhcnQJICAgICA9IGZ1bmN0aW9uX3RyYWNlX3N0YXJ0LAorCS5uYW1lCQk9ICJmdW5jdGlvbiIsCisJLmluaXQJCT0gZnVuY3Rpb25fdHJhY2VfaW5pdCwKKwkucmVzZXQJCT0gZnVuY3Rpb25fdHJhY2VfcmVzZXQsCisJLnN0YXJ0CQk9IGZ1bmN0aW9uX3RyYWNlX3N0YXJ0LAorCS53YWl0X3BpcGUJPSBwb2xsX3dhaXRfcGlwZSwKKwkuZmxhZ3MJCT0gJmZ1bmNfZmxhZ3MsCisJLnNldF9mbGFnCT0gZnVuY19zZXRfZmxhZywKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCi0JLnNlbGZ0ZXN0ICAgID0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9mdW5jdGlvbiwKKwkuc2VsZnRlc3QJPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uLAogI2VuZGlmCiB9OwogCi1zdGF0aWMgX19pbml0IGludCBpbml0X2Z1bmN0aW9uX3RyYWNlKHZvaWQpCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitzdGF0aWMgdm9pZAorZnRyYWNlX3RyYWNlb24odW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHZvaWQgKipkYXRhKQogewotCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJmZ1bmN0aW9uX3RyYWNlKTsKKwlsb25nICpjb3VudCA9IChsb25nICopZGF0YTsKKworCWlmICh0cmFjaW5nX2lzX29uKCkpCisJCXJldHVybjsKKworCWlmICghKmNvdW50KQorCQlyZXR1cm47CisKKwlpZiAoKmNvdW50ICE9IC0xKQorCQkoKmNvdW50KS0tOworCisJdHJhY2luZ19vbigpOwogfQogCitzdGF0aWMgdm9pZAorZnRyYWNlX3RyYWNlb2ZmKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLCB2b2lkICoqZGF0YSkKK3sKKwlsb25nICpjb3VudCA9IChsb25nICopZGF0YTsKKworCWlmICghdHJhY2luZ19pc19vbigpKQorCQlyZXR1cm47CisKKwlpZiAoISpjb3VudCkKKwkJcmV0dXJuOworCisJaWYgKCpjb3VudCAhPSAtMSkKKwkJKCpjb3VudCktLTsKKworCXRyYWNpbmdfb2ZmKCk7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV90cmFjZV9vbm9mZl9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgaXAsCisJCQkgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyB0cmFjZW9uX3Byb2JlX29wcyA9IHsKKwkuZnVuYwkJCT0gZnRyYWNlX3RyYWNlb24sCisJLnByaW50CQkJPSBmdHJhY2VfdHJhY2Vfb25vZmZfcHJpbnQsCit9OworCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgdHJhY2VvZmZfcHJvYmVfb3BzID0geworCS5mdW5jCQkJPSBmdHJhY2VfdHJhY2VvZmYsCisJLnByaW50CQkJPSBmdHJhY2VfdHJhY2Vfb25vZmZfcHJpbnQsCit9OworCitzdGF0aWMgaW50CitmdHJhY2VfdHJhY2Vfb25vZmZfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nIGlwLAorCQkJIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMsIHZvaWQgKmRhdGEpCit7CisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKwlsb25nIGNvdW50ID0gKGxvbmcpZGF0YTsKKworCWthbGxzeW1zX2xvb2t1cChpcCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKKwlzZXFfcHJpbnRmKG0sICIlczoiLCBzdHIpOworCisJaWYgKG9wcyA9PSAmdHJhY2Vvbl9wcm9iZV9vcHMpCisJCXNlcV9wcmludGYobSwgInRyYWNlb24iKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgInRyYWNlb2ZmIik7CisKKwlpZiAoY291bnQgPT0gLTEpCisJCXNlcV9wcmludGYobSwgIjp1bmxpbWl0ZWRcbiIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiOmNvdW50PSVsZCIsIGNvdW50KTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmdHJhY2VfdHJhY2Vfb25vZmZfdW5yZWcoY2hhciAqZ2xvYiwgY2hhciAqY21kLCBjaGFyICpwYXJhbSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzOworCisJLyogd2UgcmVnaXN0ZXIgYm90aCB0cmFjZW9uIGFuZCB0cmFjZW9mZiB0byB0aGlzIGNhbGxiYWNrICovCisJaWYgKHN0cmNtcChjbWQsICJ0cmFjZW9uIikgPT0gMCkKKwkJb3BzID0gJnRyYWNlb25fcHJvYmVfb3BzOworCWVsc2UKKwkJb3BzID0gJnRyYWNlb2ZmX3Byb2JlX29wczsKKworCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlX2Z1bmMoZ2xvYiwgb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmdHJhY2VfdHJhY2Vfb25vZmZfY2FsbGJhY2soY2hhciAqZ2xvYiwgY2hhciAqY21kLCBjaGFyICpwYXJhbSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzOworCXZvaWQgKmNvdW50ID0gKHZvaWQgKiktMTsKKwljaGFyICpudW1iZXI7CisJaW50IHJldDsKKworCS8qIGhhc2ggZnVuY3Mgb25seSB3b3JrIHdpdGggc2V0X2Z0cmFjZV9maWx0ZXIgKi8KKwlpZiAoIWVuYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZ2xvYlswXSA9PSAnIScpCisJCXJldHVybiBmdHJhY2VfdHJhY2Vfb25vZmZfdW5yZWcoZ2xvYisxLCBjbWQsIHBhcmFtKTsKKworCS8qIHdlIHJlZ2lzdGVyIGJvdGggdHJhY2VvbiBhbmQgdHJhY2VvZmYgdG8gdGhpcyBjYWxsYmFjayAqLworCWlmIChzdHJjbXAoY21kLCAidHJhY2VvbiIpID09IDApCisJCW9wcyA9ICZ0cmFjZW9uX3Byb2JlX29wczsKKwllbHNlCisJCW9wcyA9ICZ0cmFjZW9mZl9wcm9iZV9vcHM7CisKKwlpZiAoIXBhcmFtKQorCQlnb3RvIG91dF9yZWc7CisKKwludW1iZXIgPSBzdHJzZXAoJnBhcmFtLCAiOiIpOworCisJaWYgKCFzdHJsZW4obnVtYmVyKSkKKwkJZ290byBvdXRfcmVnOworCisJLyoKKwkgKiBXZSB1c2UgdGhlIGNhbGxiYWNrIGRhdGEgZmllbGQgKHdoaWNoIGlzIGEgcG9pbnRlcikKKwkgKiBhcyBvdXIgY291bnRlci4KKwkgKi8KKwlyZXQgPSBzdHJpY3Rfc3RydG91bChudW1iZXIsIDAsICh1bnNpZ25lZCBsb25nICopJmNvdW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisgb3V0X3JlZzoKKwlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoZ2xvYiwgb3BzLCBjb3VudCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgZnRyYWNlX3RyYWNlb25fY21kID0geworCS5uYW1lCQkJPSAidHJhY2VvbiIsCisJLmZ1bmMJCQk9IGZ0cmFjZV90cmFjZV9vbm9mZl9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCBmdHJhY2VfdHJhY2VvZmZfY21kID0geworCS5uYW1lCQkJPSAidHJhY2VvZmYiLAorCS5mdW5jCQkJPSBmdHJhY2VfdHJhY2Vfb25vZmZfY2FsbGJhY2ssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2Z1bmNfY21kX3RyYWNlb24odm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoJmZ0cmFjZV90cmFjZW9mZl9jbWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfY29tbWFuZCgmZnRyYWNlX3RyYWNlb25fY21kKTsKKwlpZiAocmV0KQorCQl1bnJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKCZmdHJhY2VfdHJhY2VvZmZfY21kKTsKKwlyZXR1cm4gcmV0OworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfZnVuY19jbWRfdHJhY2Vvbih2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCitzdGF0aWMgX19pbml0IGludCBpbml0X2Z1bmN0aW9uX3RyYWNlKHZvaWQpCit7CisJaW5pdF9mdW5jX2NtZF90cmFjZW9uKCk7CisJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigmZnVuY3Rpb25fdHJhY2UpOworfQogZGV2aWNlX2luaXRjYWxsKGluaXRfZnVuY3Rpb25fdHJhY2UpOworCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKaW5kZXggZGNlNzFhNS4uZDI4Njg3ZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKgogICogRnVuY3Rpb24gZ3JhcGggdHJhY2VyLgotICogQ29weXJpZ2h0IChjKSAyMDA4IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KICAqIE1vc3RseSBib3Jyb3dlZCBmcm9tIGZ1bmN0aW9uIHRyYWNlciB3aGljaAogICogaXMgQ29weXJpZ2h0IChjKSBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KICAqCkBAIC0xMiw2ICsxMiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCitzdHJ1Y3QgZmdyYXBoX2RhdGEgeworCXBpZF90CQlsYXN0X3BpZDsKKwlpbnQJCWRlcHRoOworfTsKIAogI2RlZmluZSBUUkFDRV9HUkFQSF9JTkRFTlQJMgogCkBAIC0yMCw5ICsyNiwxMSBAQAogI2RlZmluZSBUUkFDRV9HUkFQSF9QUklOVF9DUFUJCTB4MgogI2RlZmluZSBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRAkweDQKICNkZWZpbmUgVFJBQ0VfR1JBUEhfUFJJTlRfUFJPQwkJMHg4CisjZGVmaW5lIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OCTB4MTAKKyNkZWZpbmUgVFJBQ0VfR1JBUEhfUFJJTlRfQUJTX1RJTUUJMFgyMAogCiBzdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgdHJhY2Vfb3B0c1tdID0gewotCS8qIERpc3BsYXkgb3ZlcnJ1bnMgPyAqLworCS8qIERpc3BsYXkgb3ZlcnJ1bnM/IChmb3Igc2VsZi1kZWJ1ZyBwdXJwb3NlKSAqLwogCXsgVFJBQ0VSX09QVChmdW5jZ3JhcGgtb3ZlcnJ1biwgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUlJVTikgfSwKIAkvKiBEaXNwbGF5IENQVSA/ICovCiAJeyBUUkFDRVJfT1BUKGZ1bmNncmFwaC1jcHUsIFRSQUNFX0dSQVBIX1BSSU5UX0NQVSkgfSwKQEAgLTMwLDIzICszOCwyOCBAQAogCXsgVFJBQ0VSX09QVChmdW5jZ3JhcGgtb3ZlcmhlYWQsIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKSB9LAogCS8qIERpc3BsYXkgcHJvYyBuYW1lL3BpZCAqLwogCXsgVFJBQ0VSX09QVChmdW5jZ3JhcGgtcHJvYywgVFJBQ0VfR1JBUEhfUFJJTlRfUFJPQykgfSwKKwkvKiBEaXNwbGF5IGR1cmF0aW9uIG9mIGV4ZWN1dGlvbiAqLworCXsgVFJBQ0VSX09QVChmdW5jZ3JhcGgtZHVyYXRpb24sIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKSB9LAorCS8qIERpc3BsYXkgYWJzb2x1dGUgdGltZSBvZiBhbiBlbnRyeSAqLworCXsgVFJBQ0VSX09QVChmdW5jZ3JhcGgtYWJzdGltZSwgVFJBQ0VfR1JBUEhfUFJJTlRfQUJTX1RJTUUpIH0sCiAJeyB9IC8qIEVtcHR5IGVudHJ5ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyB0cmFjZXJfZmxhZ3MgPSB7CiAJLyogRG9uJ3QgZGlzcGxheSBvdmVycnVucyBhbmQgcHJvYyBieSBkZWZhdWx0ICovCi0JLnZhbCA9IFRSQUNFX0dSQVBIX1BSSU5UX0NQVSB8IFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFELAorCS52YWwgPSBUUkFDRV9HUkFQSF9QUklOVF9DUFUgfCBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCB8CisJICAgICAgIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OLAogCS5vcHRzID0gdHJhY2Vfb3B0cwogfTsKIAogLyogcGlkIG9uIHRoZSBsYXN0IHRyYWNlIHByb2Nlc3NlZCAqLwotc3RhdGljIHBpZF90IGxhc3RfcGlkW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IC0xIH07CisKIAogLyogQWRkIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCiBpbnQKLWZ0cmFjZV9wdXNoX3JldHVybl90cmFjZSh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBsb25nIHRpbWUsCi0JCQkgdW5zaWduZWQgbG9uZyBmdW5jLCBpbnQgKmRlcHRoKQorZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpCiB7CisJdW5zaWduZWQgbG9uZyBsb25nIGNhbGx0aW1lOwogCWludCBpbmRleDsKIAogCWlmICghY3VycmVudC0+cmV0X3N0YWNrKQpAQCAtNTgsMTEgKzcxLDEzIEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCisJY2FsbHRpbWUgPSB0cmFjZV9jbG9ja19sb2NhbCgpOworCiAJaW5kZXggPSArK2N1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOwogCWJhcnJpZXIoKTsKIAljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldCA9IHJldDsKIAljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmMgPSBmdW5jOwotCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSB0aW1lOworCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSBjYWxsdGltZTsKIAkqZGVwdGggPSBpbmRleDsKIAogCXJldHVybiAwOwpAQCAtMTA0LDcgKzExOSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXQ7CiAKIAlmdHJhY2VfcG9wX3JldHVybl90cmFjZSgmdHJhY2UsICZyZXQpOwotCXRyYWNlLnJldHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJdHJhY2UucmV0dGltZSA9IHRyYWNlX2Nsb2NrX2xvY2FsKCk7CiAJZnRyYWNlX2dyYXBoX3JldHVybigmdHJhY2UpOwogCiAJaWYgKHVubGlrZWx5KCFyZXQpKSB7CkBAIC0xMTksMTIgKzEzNCw3IEBACiAKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCBjcHUsIHJldDsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOwotCi0JcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKCZ0cmFjZV9ncmFwaF9yZXR1cm4sCisJaW50IHJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaCgmdHJhY2VfZ3JhcGhfcmV0dXJuLAogCQkJCQkmdHJhY2VfZ3JhcGhfZW50cnkpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xODcsMTUgKzE5NywxNSBAQAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90CiBwcmludF9ncmFwaF9wcm9jKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHBpZF90IHBpZCkKIHsKLQlpbnQgaTsKLQlpbnQgcmV0OwotCWludCBsZW47Ci0JY2hhciBjb21tWzhdOwotCWludCBzcGFjZXMgPSAwOworCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKIAkvKiBzaWduICsgbG9nMTAoTUFYX0lOVCkgKyAnXDAnICovCiAJY2hhciBwaWRfc3RyWzExXTsKKwlpbnQgc3BhY2VzID0gMDsKKwlpbnQgcmV0OworCWludCBsZW47CisJaW50IGk7CiAKLQlzdHJuY3B5KGNvbW0sIHRyYWNlX2ZpbmRfY21kbGluZShwaWQpLCA3KTsKKwl0cmFjZV9maW5kX2NtZGxpbmUocGlkLCBjb21tKTsKIAljb21tWzddID0gJ1wwJzsKIAlzcHJpbnRmKHBpZF9zdHIsICIlZCIsIHBpZCk7CiAKQEAgLTIyOCwxNyArMjM4LDI1IEBACiAKIC8qIElmIHRoZSBwaWQgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0cmFjZSwgb3V0cHV0IHRoaXMgZXZlbnQgKi8KIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAotdmVyaWZfcGlkKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHBpZF90IHBpZCwgaW50IGNwdSkKK3ZlcmlmX3BpZChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBwaWRfdCBwaWQsIGludCBjcHUsIHN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YSkKIHsKIAlwaWRfdCBwcmV2X3BpZDsKKwlwaWRfdCAqbGFzdF9waWQ7CiAJaW50IHJldDsKIAotCWlmIChsYXN0X3BpZFtjcHVdICE9IC0xICYmIGxhc3RfcGlkW2NwdV0gPT0gcGlkKQorCWlmICghZGF0YSkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIAotCXByZXZfcGlkID0gbGFzdF9waWRbY3B1XTsKLQlsYXN0X3BpZFtjcHVdID0gcGlkOworCWxhc3RfcGlkID0gJihwZXJfY3B1X3B0cihkYXRhLCBjcHUpLT5sYXN0X3BpZCk7CiAKKwlpZiAoKmxhc3RfcGlkID09IHBpZCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworCXByZXZfcGlkID0gKmxhc3RfcGlkOworCSpsYXN0X3BpZCA9IHBpZDsKKworCWlmIChwcmV2X3BpZCA9PSAtMSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIC8qCiAgKiBDb250ZXh0LXN3aXRjaCB0cmFjZSBsaW5lOgogCkBAIC0yNTAsMzQgKzI2OCwzNCBAQAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKIAkJIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCWlmICghcmV0KQotCQlUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJcmV0ID0gcHJpbnRfZ3JhcGhfY3B1KHMsIGNwdSk7CiAJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCXJldCA9IHByaW50X2dyYXBoX3Byb2MocywgcHJldl9waWQpOwogCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPT4gIik7CiAJaWYgKCFyZXQpCi0JCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKIAlyZXQgPSBwcmludF9ncmFwaF9wcm9jKHMsIHBpZCk7CiAJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKIAkJIlxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iKTsKIAlpZiAoIXJldCkKLQkJVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIAotc3RhdGljIGJvb2wKLXRyYWNlX2JyYW5jaF9pc19sZWFmKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSAqCitnZXRfcmV0dXJuX2Zvcl9sZWFmKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKIAkJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmN1cnIpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKnJpbmdfaXRlcjsKQEAgLTI4Niw2NSArMzA0LDEyMyBAQAogCiAJcmluZ19pdGVyID0gaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XTsKIAotCWlmICghcmluZ19pdGVyKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlldmVudCA9IHJpbmdfYnVmZmVyX2l0ZXJfcGVlayhyaW5nX2l0ZXIsIE5VTEwpOworCS8qIEZpcnN0IHBlZWsgdG8gY29tcGFyZSBjdXJyZW50IGVudHJ5IGFuZCB0aGUgbmV4dCBvbmUgKi8KKwlpZiAocmluZ19pdGVyKQorCQlldmVudCA9IHJpbmdfYnVmZmVyX2l0ZXJfcGVlayhyaW5nX2l0ZXIsIE5VTEwpOworCWVsc2UgeworCS8qIFdlIG5lZWQgdG8gY29uc3VtZSB0aGUgY3VycmVudCBlbnRyeSB0byBzZWUgdGhlIG5leHQgb25lICovCisJCXJpbmdfYnVmZmVyX2NvbnN1bWUoaXRlci0+dHItPmJ1ZmZlciwgaXRlci0+Y3B1LCBOVUxMKTsKKwkJZXZlbnQgPSByaW5nX2J1ZmZlcl9wZWVrKGl0ZXItPnRyLT5idWZmZXIsIGl0ZXItPmNwdSwKKwkJCQkJTlVMTCk7CisJfQogCiAJaWYgKCFldmVudCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCW5leHQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAogCWlmIChuZXh0LT5lbnQudHlwZSAhPSBUUkFDRV9HUkFQSF9SRVQpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoY3Vyci0+ZW50LnBpZCAhPSBuZXh0LT5lbnQucGlkIHx8CiAJCQljdXJyLT5ncmFwaF9lbnQuZnVuYyAhPSBuZXh0LT5yZXQuZnVuYykKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiB0cnVlOworCS8qIHRoaXMgaXMgYSBsZWFmLCBub3cgYWR2YW5jZSB0aGUgaXRlcmF0b3IgKi8KKwlpZiAocmluZ19pdGVyKQorCQlyaW5nX2J1ZmZlcl9yZWFkKHJpbmdfaXRlciwgTlVMTCk7CisKKwlyZXR1cm4gbmV4dDsKK30KKworLyogU2lnbmFsIGEgb3ZlcmhlYWQgb2YgdGltZSBleGVjdXRpb24gdG8gdGhlIG91dHB1dCAqLworc3RhdGljIGludAorcHJpbnRfZ3JhcGhfb3ZlcmhlYWQodW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCS8qIElmIGR1cmF0aW9uIGRpc2FwcGVhciwgd2UgZG9uJ3QgbmVlZCBhbnl0aGluZyAqLworCWlmICghKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikpCisJCXJldHVybiAxOworCisJLyogTm9uIG5lc3RlZCBlbnRyeSBvciByZXR1cm4gKi8KKwlpZiAoZHVyYXRpb24gPT0gLTEpCisJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICIpOworCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgeworCQkvKiBEdXJhdGlvbiBleGNlZWRlZCAxMDAgbXNlY3MgKi8KKwkJaWYgKGR1cmF0aW9uID4gMTAwMDAwVUxMKQorCQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiEgIik7CisKKwkJLyogRHVyYXRpb24gZXhjZWVkZWQgMTAgbXNlY3MgKi8KKwkJaWYgKGR1cmF0aW9uID4gMTAwMDBVTEwpCisJCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiKyAiKTsKKwl9CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAiKTsKK30KKworc3RhdGljIGludCBwcmludF9ncmFwaF9hYnNfdGltZSh1NjQgdCwgc3RydWN0IHRyYWNlX3NlcSAqcykKK3sKKwl1bnNpZ25lZCBsb25nIHVzZWNzX3JlbTsKKworCXVzZWNzX3JlbSA9IGRvX2Rpdih0LCBOU0VDX1BFUl9TRUMpOworCXVzZWNzX3JlbSAvPSAxMDAwOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiU1bHUuJTA2bHUgfCAgIiwKKwkJCSh1bnNpZ25lZCBsb25nKXQsIHVzZWNzX3JlbSk7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAotcHJpbnRfZ3JhcGhfaXJxKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQllbnVtIHRyYWNlX3R5cGUgdHlwZSwgaW50IGNwdSwgcGlkX3QgcGlkKQorcHJpbnRfZ3JhcGhfaXJxKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQllbnVtIHRyYWNlX3R5cGUgdHlwZSwgaW50IGNwdSwgcGlkX3QgcGlkKQogewogCWludCByZXQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAKIAlpZiAoYWRkciA8ICh1bnNpZ25lZCBsb25nKV9faXJxZW50cnlfdGV4dF9zdGFydCB8fAogCQlhZGRyID49ICh1bnNpZ25lZCBsb25nKV9faXJxZW50cnlfdGV4dF9lbmQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKIAotCWlmICh0eXBlID09IFRSQUNFX0dSQVBIX0VOVCkgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICI9PT09PT09PT09PiB8ICAiKTsKLQl9IGVsc2UgewotCQkvKiBDcHUgKi8KLQkJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpIHsKLQkJCXJldCA9IHByaW50X2dyYXBoX2NwdShzLCBjcHUpOwotCQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCX0KLQkJLyogUHJvYyAqLwotCQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MpIHsKLQkJCXJldCA9IHByaW50X2dyYXBoX3Byb2MocywgcGlkKTsKLQkJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgfCAiKTsKLQkJCWlmICghcmV0KQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJfQotCi0JCS8qIE5vIG92ZXJoZWFkICovCi0JCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpIHsKLQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgIik7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCX0KLQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICI8PT09PT09PT09PSB8XG4iKTsKKwkvKiBBYnNvbHV0ZSB0aW1lICovCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRSkgeworCQlyZXQgPSBwcmludF9ncmFwaF9hYnNfdGltZShpdGVyLT50cywgcyk7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCX0KKworCS8qIENwdSAqLworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKSB7CisJCXJldCA9IHByaW50X2dyYXBoX2NwdShzLCBjcHUpOworCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KKwkvKiBQcm9jICovCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKSB7CisJCXJldCA9IHByaW50X2dyYXBoX3Byb2MocywgcGlkKTsKKwkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIHwgIik7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KKworCS8qIE5vIG92ZXJoZWFkICovCisJcmV0ID0gcHJpbnRfZ3JhcGhfb3ZlcmhlYWQoLTEsIHMpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlpZiAodHlwZSA9PSBUUkFDRV9HUkFQSF9FTlQpCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIj09PT09PT09PT0+Iik7CisJZWxzZQorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICI8PT09PT09PT09PSIpOworCisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIERvbid0IGNsb3NlIHRoZSBkdXJhdGlvbiBjb2x1bW4gaWYgaGF2ZW4ndCBvbmUgKi8KKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKQorCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIgfCIpOworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlxuIik7CisKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CkBAIC0zNjMsNyArNDM5LDcgQEAKIAlzcHJpbnRmKG1zZWNzX3N0ciwgIiVsdSIsICh1bnNpZ25lZCBsb25nKSBkdXJhdGlvbik7CiAKIAkvKiBQcmludCBtc2VjcyAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgbXNlY3Nfc3RyKTsKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyIsIG1zZWNzX3N0cik7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIApAQCAtMzk2LDUyICs0NzIsNDcgQEAKIAogfQogCi0vKiBTaWduYWwgYSBvdmVyaGVhZCBvZiB0aW1lIGV4ZWN1dGlvbiB0byB0aGUgb3V0cHV0ICovCi1zdGF0aWMgaW50Ci1wcmludF9ncmFwaF9vdmVyaGVhZCh1bnNpZ25lZCBsb25nIGxvbmcgZHVyYXRpb24sIHN0cnVjdCB0cmFjZV9zZXEgKnMpCi17Ci0JLyogRHVyYXRpb24gZXhjZWVkZWQgMTAwIG1zZWNzICovCi0JaWYgKGR1cmF0aW9uID4gMTAwMDAwVUxMKQotCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiISAiKTsKLQotCS8qIER1cmF0aW9uIGV4Y2VlZGVkIDEwIG1zZWNzICovCi0JaWYgKGR1cmF0aW9uID4gMTAwMDBVTEwpCi0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIrICIpOwotCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiAgIik7Ci19Ci0KIC8qIENhc2Ugb2YgYSBsZWFmIGZ1bmN0aW9uIG9uIGl0cyBjYWxsIGVudHJ5ICovCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKIHByaW50X2dyYXBoX2VudHJ5X2xlYWYoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAotCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZW50cnksIHN0cnVjdCB0cmFjZV9zZXEgKnMpCisJCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICplbnRyeSwKKwkJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKnJldF9lbnRyeSwgc3RydWN0IHRyYWNlX3NlcSAqcykKIHsKLQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSAqcmV0X2VudHJ5OworCXN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YSA9IGl0ZXItPnByaXZhdGU7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKmdyYXBoX3JldDsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICpjYWxsOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBkdXJhdGlvbjsKIAlpbnQgcmV0OwogCWludCBpOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9yZWFkKGl0ZXItPmJ1ZmZlcl9pdGVyW2l0ZXItPmNwdV0sIE5VTEwpOwotCXJldF9lbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCWdyYXBoX3JldCA9ICZyZXRfZW50cnktPnJldDsKIAljYWxsID0gJmVudHJ5LT5ncmFwaF9lbnQ7CiAJZHVyYXRpb24gPSBncmFwaF9yZXQtPnJldHRpbWUgLSBncmFwaF9yZXQtPmNhbGx0aW1lOwogCi0JLyogT3ZlcmhlYWQgKi8KLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKSB7Ci0JCXJldCA9IHByaW50X2dyYXBoX292ZXJoZWFkKGR1cmF0aW9uLCBzKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJaWYgKGRhdGEpIHsKKwkJaW50IGNwdSA9IGl0ZXItPmNwdTsKKwkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+ZGVwdGgpOworCisJCS8qCisJCSAqIENvbW1lbnRzIGRpc3BsYXkgYXQgKyAxIHRvIGRlcHRoLiBTaW5jZQorCQkgKiB0aGlzIGlzIGEgbGVhZiBmdW5jdGlvbiwga2VlcCB0aGUgY29tbWVudHMKKwkJICogZXF1YWwgdG8gdGhpcyBkZXB0aC4KKwkJICovCisJCSpkZXB0aCA9IGNhbGwtPmRlcHRoIC0gMTsKIAl9CiAKLQkvKiBEdXJhdGlvbiAqLwotCXJldCA9IHByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uLCBzKTsKLQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCS8qIE92ZXJoZWFkICovCisJcmV0ID0gcHJpbnRfZ3JhcGhfb3ZlcmhlYWQoZHVyYXRpb24sIHMpOworCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKKwkvKiBEdXJhdGlvbiAqLworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pIHsKKwkJcmV0ID0gcHJpbnRfZ3JhcGhfZHVyYXRpb24oZHVyYXRpb24sIHMpOworCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KKwogCS8qIEZ1bmN0aW9uICovCiAJZm9yIChpID0gMDsgaSA8IGNhbGwtPmRlcHRoICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspIHsKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICIpOwpAQCAtNDYxLDMzICs1MzIsMzQgQEAKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1wcmludF9ncmFwaF9lbnRyeV9uZXN0ZWQoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmVudHJ5LAotCQkJc3RydWN0IHRyYWNlX3NlcSAqcywgcGlkX3QgcGlkLCBpbnQgY3B1KQorcHJpbnRfZ3JhcGhfZW50cnlfbmVzdGVkKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCSBzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZW50cnksCisJCQkgc3RydWN0IHRyYWNlX3NlcSAqcywgaW50IGNwdSkKIHsKLQlpbnQgaTsKLQlpbnQgcmV0OwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICpjYWxsID0gJmVudHJ5LT5ncmFwaF9lbnQ7CisJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKKwlpbnQgcmV0OworCWludCBpOwogCi0JLyogTm8gb3ZlcmhlYWQgKi8KLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgIik7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCWlmIChkYXRhKSB7CisJCWludCBjcHUgPSBpdGVyLT5jcHU7CisJCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEsIGNwdSktPmRlcHRoKTsKKworCQkqZGVwdGggPSBjYWxsLT5kZXB0aDsKIAl9CiAKLQkvKiBJbnRlcnJ1cHQgKi8KLQlyZXQgPSBwcmludF9ncmFwaF9pcnEocywgY2FsbC0+ZnVuYywgVFJBQ0VfR1JBUEhfRU5ULCBjcHUsIHBpZCk7Ci0JaWYgKHJldCA9PSBUUkFDRV9UWVBFX1VOSEFORExFRCkgewotCQkvKiBObyB0aW1lICovCisJLyogTm8gb3ZlcmhlYWQgKi8KKwlyZXQgPSBwcmludF9ncmFwaF9vdmVyaGVhZCgtMSwgcyk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIE5vIHRpbWUgKi8KKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKSB7CiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgICAgICAgICAgIHwgICIpOwogCQlpZiAoIXJldCkKIAkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9IGVsc2UgewotCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCX0KIAotCiAJLyogRnVuY3Rpb24gKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2FsbC0+ZGVwdGggKiBUUkFDRV9HUkFQSF9JTkRFTlQ7IGkrKykgewogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgIik7CkBAIC01MDMsMjAgKzU3NSw0MCBAQAogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCS8qCisJICogd2UgYWxyZWFkeSBjb25zdW1lZCB0aGUgY3VycmVudCBlbnRyeSB0byBjaGVjayB0aGUgbmV4dCBvbmUKKwkgKiBhbmQgc2VlIGlmIHRoaXMgaXMgYSBsZWFmLgorCSAqLworCXJldHVybiBUUkFDRV9UWVBFX05PX0NPTlNVTUU7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAotcHJpbnRfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmZpZWxkLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzLAotCQkJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgY3B1KQorcHJpbnRfZ3JhcGhfcHJvbG9ndWUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzLAorCQkgICAgIGludCB0eXBlLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50ID0gaXRlci0+ZW50OworCWludCBjcHUgPSBpdGVyLT5jcHU7CisJaW50IHJldDsKIAogCS8qIFBpZCAqLwotCWlmICh2ZXJpZl9waWQocywgZW50LT5waWQsIGNwdSkgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJaWYgKHZlcmlmX3BpZChzLCBlbnQtPnBpZCwgY3B1LCBkYXRhKSA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCisJaWYgKHR5cGUpIHsKKwkJLyogSW50ZXJydXB0ICovCisJCXJldCA9IHByaW50X2dyYXBoX2lycShpdGVyLCBhZGRyLCB0eXBlLCBjcHUsIGVudC0+cGlkKTsKKwkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CisKKwkvKiBBYnNvbHV0ZSB0aW1lICovCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRSkgeworCQlyZXQgPSBwcmludF9ncmFwaF9hYnNfdGltZShpdGVyLT50cywgcyk7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KKwogCS8qIENwdSAqLwogCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKSB7CiAJCXJldCA9IHByaW50X2dyYXBoX2NwdShzLCBjcHUpOwpAQCAtNTM1LDU0ICs2MjcsNjUgQEAKIAkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAl9CiAKLQlpZiAodHJhY2VfYnJhbmNoX2lzX2xlYWYoaXRlciwgZmllbGQpKQotCQlyZXR1cm4gcHJpbnRfZ3JhcGhfZW50cnlfbGVhZihpdGVyLCBmaWVsZCwgcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAorcHJpbnRfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmZpZWxkLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzLAorCQkJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCWludCBjcHUgPSBpdGVyLT5jcHU7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKmNhbGwgPSAmZmllbGQtPmdyYXBoX2VudDsKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSAqbGVhZl9yZXQ7CisKKwlpZiAocHJpbnRfZ3JhcGhfcHJvbG9ndWUoaXRlciwgcywgVFJBQ0VfR1JBUEhfRU5ULCBjYWxsLT5mdW5jKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJbGVhZl9yZXQgPSBnZXRfcmV0dXJuX2Zvcl9sZWFmKGl0ZXIsIGZpZWxkKTsKKwlpZiAobGVhZl9yZXQpCisJCXJldHVybiBwcmludF9ncmFwaF9lbnRyeV9sZWFmKGl0ZXIsIGZpZWxkLCBsZWFmX3JldCwgcyk7CiAJZWxzZQotCQlyZXR1cm4gcHJpbnRfZ3JhcGhfZW50cnlfbmVzdGVkKGZpZWxkLCBzLCBpdGVyLT5lbnQtPnBpZCwgY3B1KTsKKwkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5X25lc3RlZChpdGVyLCBmaWVsZCwgcywgY3B1KTsKIAogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKIHByaW50X2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHN0cnVjdCB0cmFjZV9zZXEgKnMsCi0JCSAgIHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LCBpbnQgY3B1KQorCQkgICBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCwgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewotCWludCBpOwotCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uID0gdHJhY2UtPnJldHRpbWUgLSB0cmFjZS0+Y2FsbHRpbWU7CisJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKKwlwaWRfdCBwaWQgPSBlbnQtPnBpZDsKKwlpbnQgY3B1ID0gaXRlci0+Y3B1OworCWludCByZXQ7CisJaW50IGk7CiAKLQkvKiBQaWQgKi8KLQlpZiAodmVyaWZfcGlkKHMsIGVudC0+cGlkLCBjcHUpID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCWlmIChkYXRhKSB7CisJCWludCBjcHUgPSBpdGVyLT5jcHU7CisJCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEsIGNwdSktPmRlcHRoKTsKKworCQkvKgorCQkgKiBDb21tZW50cyBkaXNwbGF5IGF0ICsgMSB0byBkZXB0aC4gVGhpcyBpcyB0aGUKKwkJICogcmV0dXJuIGZyb20gYSBmdW5jdGlvbiwgd2Ugbm93IHdhbnQgdGhlIGNvbW1lbnRzCisJCSAqIHRvIGRpc3BsYXkgYXQgdGhlIHNhbWUgbGV2ZWwgb2YgdGhlIGJyYWNrZXQuCisJCSAqLworCQkqZGVwdGggPSB0cmFjZS0+ZGVwdGggLSAxOworCX0KKworCWlmIChwcmludF9ncmFwaF9wcm9sb2d1ZShpdGVyLCBzLCAwLCAwKSkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JLyogQ3B1ICovCi0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpIHsKLQkJcmV0ID0gcHJpbnRfZ3JhcGhfY3B1KHMsIGNwdSk7Ci0JCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfQotCi0JLyogUHJvYyAqLwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfUFJPQykgewotCQlyZXQgPSBwcmludF9ncmFwaF9wcm9jKHMsIGVudC0+cGlkKTsKLQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgfCAiKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfQotCiAJLyogT3ZlcmhlYWQgKi8KLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKSB7Ci0JCXJldCA9IHByaW50X2dyYXBoX292ZXJoZWFkKGR1cmF0aW9uLCBzKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfQorCXJldCA9IHByaW50X2dyYXBoX292ZXJoZWFkKGR1cmF0aW9uLCBzKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJLyogRHVyYXRpb24gKi8KLQlyZXQgPSBwcmludF9ncmFwaF9kdXJhdGlvbihkdXJhdGlvbiwgcyk7Ci0JaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pIHsKKwkJcmV0ID0gcHJpbnRfZ3JhcGhfZHVyYXRpb24oZHVyYXRpb24sIHMpOworCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KIAogCS8qIENsb3NpbmcgYnJhY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdHJhY2UtPmRlcHRoICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspIHsKQEAgLTYwMyw3ICs3MDYsNyBAQAogCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCX0KIAotCXJldCA9IHByaW50X2dyYXBoX2lycShzLCB0cmFjZS0+ZnVuYywgVFJBQ0VfR1JBUEhfUkVULCBjcHUsIGVudC0+cGlkKTsKKwlyZXQgPSBwcmludF9ncmFwaF9pcnEoaXRlciwgdHJhY2UtPmZ1bmMsIFRSQUNFX0dSQVBIX1JFVCwgY3B1LCBwaWQpOwogCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIApAQCAtNjExLDYxICs3MTQsNzMgQEAKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1wcmludF9ncmFwaF9jb21tZW50KHN0cnVjdCBwcmludF9lbnRyeSAqdHJhY2UsIHN0cnVjdCB0cmFjZV9zZXEgKnMsCi0JCSAgIHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LCBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCitwcmludF9ncmFwaF9jb21tZW50KHN0cnVjdCB0cmFjZV9zZXEgKnMsICBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCwKKwkJICAgIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHN5bV9mbGFncyA9ICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX01BU0spOworCXN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YSA9IGl0ZXItPnByaXZhdGU7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKKwlpbnQgZGVwdGggPSAwOwogCWludCByZXQ7CisJaW50IGk7CiAKLQkvKiBQaWQgKi8KLQlpZiAodmVyaWZfcGlkKHMsIGVudC0+cGlkLCBpdGVyLT5jcHUpID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCWlmIChkYXRhKQorCQlkZXB0aCA9IHBlcl9jcHVfcHRyKGRhdGEsIGl0ZXItPmNwdSktPmRlcHRoOworCisJaWYgKHByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIDAsIDApKQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKLQkvKiBDcHUgKi8KLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0NQVSkgewotCQlyZXQgPSBwcmludF9ncmFwaF9jcHUocywgaXRlci0+Y3B1KTsKLQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0KLQkvKiBQcm9jICovCi0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKSB7Ci0JCXJldCA9IHByaW50X2dyYXBoX3Byb2MocywgZW50LT5waWQpOwotCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiB8ICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0KIAkvKiBObyBvdmVyaGVhZCAqLwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAiKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JfQotCi0JLyogTm8gdGltZSAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgICAgICAgICAgIHwgICIpOworCXJldCA9IHByaW50X2dyYXBoX292ZXJoZWFkKC0xLCBzKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCisJLyogTm8gdGltZSAqLworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pIHsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgfCAgIik7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KKwogCS8qIEluZGVudGF0aW9uICovCi0JaWYgKHRyYWNlLT5kZXB0aCA+IDApCi0JCWZvciAoaSA9IDA7IGkgPCAodHJhY2UtPmRlcHRoICsgMSkgKiBUUkFDRV9HUkFQSF9JTkRFTlQ7IGkrKykgeworCWlmIChkZXB0aCA+IDApCisJCWZvciAoaSA9IDA7IGkgPCAoZGVwdGggKyAxKSAqIFRSQUNFX0dSQVBIX0lOREVOVDsgaSsrKSB7CiAJCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgIik7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJCX0KIAogCS8qIFRoZSBjb21tZW50ICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiLyogJXMiLCB0cmFjZS0+YnVmKTsKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIvKiAiKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JaWYgKGVudC0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0NPTlQpCi0JCXRyYWNlX3NlcV9wcmludF9jb250KHMsIGl0ZXIpOworCXN3aXRjaCAoaXRlci0+ZW50LT50eXBlKSB7CisJY2FzZSBUUkFDRV9CUFJJTlQ6CisJCXJldCA9IHRyYWNlX3ByaW50X2JwcmludGtfbXNnX29ubHkoaXRlcik7CisJCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9IQU5ETEVEKQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJY2FzZSBUUkFDRV9QUklOVDoKKwkJcmV0ID0gdHJhY2VfcHJpbnRfcHJpbnRrX21zZ19vbmx5KGl0ZXIpOworCQlpZiAocmV0ICE9IFRSQUNFX1RZUEVfSEFORExFRCkKKwkJCXJldHVybiByZXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWV2ZW50ID0gZnRyYWNlX2ZpbmRfZXZlbnQoZW50LT50eXBlKTsKKwkJaWYgKCFldmVudCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKKworCQlyZXQgPSBldmVudC0+dHJhY2UoaXRlciwgc3ltX2ZsYWdzKTsKKwkJaWYgKHJldCAhPSBUUkFDRV9UWVBFX0hBTkRMRUQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFN0cmlwIGVuZGluZyBuZXdsaW5lICovCisJaWYgKHMtPmJ1ZmZlcltzLT5sZW4gLSAxXSA9PSAnXG4nKSB7CisJCXMtPmJ1ZmZlcltzLT5sZW4gLSAxXSA9ICdcMCc7CisJCXMtPmxlbi0tOworCX0KIAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAqL1xuIik7CiAJaWYgKCFyZXQpCkBAIC02NzgsNjIgKzc5Myw5MSBAQAogZW51bSBwcmludF9saW5lX3QKIHByaW50X2dyYXBoX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCiAJc3dpdGNoIChlbnRyeS0+dHlwZSkgewogCWNhc2UgVFJBQ0VfR1JBUEhfRU5UOiB7CiAJCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICpmaWVsZDsKIAkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5KGZpZWxkLCBzLCBpdGVyLAotCQkJCQkgaXRlci0+Y3B1KTsKKwkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5KGZpZWxkLCBzLCBpdGVyKTsKIAl9CiAJY2FzZSBUUkFDRV9HUkFQSF9SRVQ6IHsKIAkJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKmZpZWxkOwogCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCQlyZXR1cm4gcHJpbnRfZ3JhcGhfcmV0dXJuKCZmaWVsZC0+cmV0LCBzLCBlbnRyeSwgaXRlci0+Y3B1KTsKLQl9Ci0JY2FzZSBUUkFDRV9QUklOVDogewotCQlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOwotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCQlyZXR1cm4gcHJpbnRfZ3JhcGhfY29tbWVudChmaWVsZCwgcywgZW50cnksIGl0ZXIpOworCQlyZXR1cm4gcHJpbnRfZ3JhcGhfcmV0dXJuKCZmaWVsZC0+cmV0LCBzLCBlbnRyeSwgaXRlcik7CiAJfQogCWRlZmF1bHQ6Ci0JCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKKwkJcmV0dXJuIHByaW50X2dyYXBoX2NvbW1lbnQocywgZW50cnksIGl0ZXIpOwogCX0KKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2dyYXBoX2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICpzKQogewogCS8qIDFzdCBsaW5lICovCiAJc2VxX3ByaW50ZihzLCAiIyAiKTsKKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0FCU19USU1FKQorCQlzZXFfcHJpbnRmKHMsICIgICAgIFRJTUUgICAgICAgIik7CiAJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpCi0JCXNlcV9wcmludGYocywgIkNQVSAiKTsKKwkJc2VxX3ByaW50ZihzLCAiQ1BVIik7CiAJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKQotCQlzZXFfcHJpbnRmKHMsICJUQVNLL1BJRCAgICAgIik7Ci0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkKLQkJc2VxX3ByaW50ZihzLCAiT1ZFUkhFQUQvIik7Ci0Jc2VxX3ByaW50ZihzLCAiRFVSQVRJT04gICAgICAgICAgICBGVU5DVElPTiBDQUxMU1xuIik7CisJCXNlcV9wcmludGYocywgIiAgVEFTSy9QSUQgICAgICAiKTsKKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKQorCQlzZXFfcHJpbnRmKHMsICIgIERVUkFUSU9OICAgIik7CisJc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgICAgRlVOQ1RJT04gQ0FMTFNcbiIpOwogCiAJLyogMm5kIGxpbmUgKi8KIAlzZXFfcHJpbnRmKHMsICIjICIpOworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQUJTX1RJTUUpCisJCXNlcV9wcmludGYocywgIiAgICAgIHwgICAgICAgICAiKTsKIAlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0NQVSkKLQkJc2VxX3ByaW50ZihzLCAifCAgICIpOworCQlzZXFfcHJpbnRmKHMsICJ8ICAiKTsKIAlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MpCi0JCXNlcV9wcmludGYocywgInwgICAgICB8ICAgICAiKTsKLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKSB7Ci0JCXNlcV9wcmludGYocywgInwgICAgICAgICIpOwotCQlzZXFfcHJpbnRmKHMsICJ8ICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHxcbiIpOwotCX0gZWxzZQotCQlzZXFfcHJpbnRmKHMsICIgICAgfCAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHxcbiIpOworCQlzZXFfcHJpbnRmKHMsICIgIHwgICAgfCAgICAgICAgIik7CisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikKKwkJc2VxX3ByaW50ZihzLCAiICAgfCAgIHwgICAgICAiKTsKKwlzZXFfcHJpbnRmKHMsICIgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8XG4iKTsKIH0KKworc3RhdGljIHZvaWQgZ3JhcGhfdHJhY2Vfb3BlbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJLyogcGlkIGFuZCBkZXB0aCBvbiB0aGUgbGFzdCB0cmFjZSBwcm9jZXNzZWQgKi8KKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBhbGxvY19wZXJjcHUoc3RydWN0IGZncmFwaF9kYXRhKTsKKwlpbnQgY3B1OworCisJaWYgKCFkYXRhKQorCQlwcl93YXJuaW5nKCJmdW5jdGlvbiBncmFwaCB0cmFjZXI6IG5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwllbHNlCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJCXBpZF90ICpwaWQgPSAmKHBlcl9jcHVfcHRyKGRhdGEsIGNwdSktPmxhc3RfcGlkKTsKKwkJCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEsIGNwdSktPmRlcHRoKTsKKwkJCSpwaWQgPSAtMTsKKwkJCSpkZXB0aCA9IDA7CisJCX0KKworCWl0ZXItPnByaXZhdGUgPSBkYXRhOworfQorCitzdGF0aWMgdm9pZCBncmFwaF90cmFjZV9jbG9zZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJZnJlZV9wZXJjcHUoaXRlci0+cHJpdmF0ZSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyIGdyYXBoX3RyYWNlIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUJICAgICAJPSAiZnVuY3Rpb25fZ3JhcGgiLAotCS5pbml0CSAgICAgCT0gZ3JhcGhfdHJhY2VfaW5pdCwKLQkucmVzZXQJICAgICAJPSBncmFwaF90cmFjZV9yZXNldCwKKwkubmFtZQkJPSAiZnVuY3Rpb25fZ3JhcGgiLAorCS5vcGVuCQk9IGdyYXBoX3RyYWNlX29wZW4sCisJLmNsb3NlCQk9IGdyYXBoX3RyYWNlX2Nsb3NlLAorCS53YWl0X3BpcGUJPSBwb2xsX3dhaXRfcGlwZSwKKwkuaW5pdAkJPSBncmFwaF90cmFjZV9pbml0LAorCS5yZXNldAkJPSBncmFwaF90cmFjZV9yZXNldCwKIAkucHJpbnRfbGluZQk9IHByaW50X2dyYXBoX2Z1bmN0aW9uLAogCS5wcmludF9oZWFkZXIJPSBwcmludF9ncmFwaF9oZWFkZXJzLAogCS5mbGFncwkJPSAmdHJhY2VyX2ZsYWdzLAorI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKKwkuc2VsZnRlc3QJPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uX2dyYXBoLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgX19pbml0IGludCBpbml0X2dyYXBoX3RyYWNlKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCmluZGV4IDY0OWRmMjIuLjdiZmRmNGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCkBAIC0xLDMwICsxLDUzIEBACiAvKgogICogaC93IGJyYW5jaCB0cmFjZXIgZm9yIHg4NiBiYXNlZCBvbiBidHMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIE1ldHpnZXIgPG1hcmt1cy50Lm1ldHpnZXJAZ21haWwuY29tPgotICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEludGVsIENvcnBvcmF0aW9uLgorICogTWFya3VzIE1ldHpnZXIgPG1hcmt1cy50Lm1ldHpnZXJAZ21haWwuY29tPiwgMjAwOC0yMDA5CiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpbmNsdWRlIDxhc20vZHMuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCiAKIAogI2RlZmluZSBTSVpFT0ZfQlRTICgxIDw8IDEzKQogCisvKgorICogVGhlIHRyYWNlciBsb2NrIHByb3RlY3RzIHRoZSBiZWxvdyBwZXItY3B1IHRyYWNlciBhcnJheS4KKyAqIEl0IG5lZWRzIHRvIGJlIGhlbGQgdG86CisgKiAtIHN0YXJ0IHRyYWNpbmcgb24gYWxsIGNwdXMKKyAqIC0gc3RvcCB0cmFjaW5nIG9uIGFsbCBjcHVzCisgKiAtIHN0YXJ0IHRyYWNpbmcgb24gYSBzaW5nbGUgaG90cGx1ZyBjcHUKKyAqIC0gc3RvcCB0cmFjaW5nIG9uIGEgc2luZ2xlIGhvdHBsdWcgY3B1CisgKiAtIHJlYWQgdGhlIHRyYWNlIGZyb20gYWxsIGNwdXMKKyAqIC0gcmVhZCB0aGUgdHJhY2UgZnJvbSBhIHNpbmdsZSBjcHUKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhidHNfdHJhY2VyX2xvY2spOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBidHNfdHJhY2VyICosIHRyYWNlcik7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgY2hhcltTSVpFT0ZfQlRTXSwgYnVmZmVyKTsKIAogI2RlZmluZSB0aGlzX3RyYWNlciBwZXJfY3B1KHRyYWNlciwgc21wX3Byb2Nlc3Nvcl9pZCgpKQogI2RlZmluZSB0aGlzX2J1ZmZlciBwZXJfY3B1KGJ1ZmZlciwgc21wX3Byb2Nlc3Nvcl9pZCgpKQogCitzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgdHJhY2VfaHdfYnJhbmNoZXNfZW5hYmxlZDsKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmh3X2JyYW5jaF90cmFjZSBfX3JlYWRfbW9zdGx5OwogCisKKy8qCisgKiBTdGFydCB0cmFjaW5nIG9uIHRoZSBjdXJyZW50IGNwdS4KKyAqIFRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLgorICoKKyAqIHByZTogYnRzX3RyYWNlcl9sb2NrIG11c3QgYmUgbG9ja2VkLgorICovCiBzdGF0aWMgdm9pZCBidHNfdHJhY2Vfc3RhcnRfY3B1KHZvaWQgKmFyZykKIHsKIAlpZiAodGhpc190cmFjZXIpCkBAIC00MiwxNCArNjUsMjAgQEAKIAogc3RhdGljIHZvaWQgYnRzX3RyYWNlX3N0YXJ0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JaW50IGNwdTsKKwlzcGluX2xvY2soJmJ0c190cmFjZXJfbG9jayk7CiAKLQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKKwlvbl9lYWNoX2NwdShidHNfdHJhY2Vfc3RhcnRfY3B1LCBOVUxMLCAxKTsKKwl0cmFjZV9od19icmFuY2hlc19lbmFibGVkID0gMTsKIAotCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9wb3NzaWJsZV9tYXNrKQotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBidHNfdHJhY2Vfc3RhcnRfY3B1LCBOVUxMLCAxKTsKKwlzcGluX3VubG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKIH0KIAorLyoKKyAqIFN0b3AgdHJhY2luZyBvbiB0aGUgY3VycmVudCBjcHUuCisgKiBUaGUgYXJndW1lbnQgaXMgaWdub3JlZC4KKyAqCisgKiBwcmU6IGJ0c190cmFjZXJfbG9jayBtdXN0IGJlIGxvY2tlZC4KKyAqLwogc3RhdGljIHZvaWQgYnRzX3RyYWNlX3N0b3BfY3B1KHZvaWQgKmFyZykKIHsKIAlpZiAodGhpc190cmFjZXIpIHsKQEAgLTYwLDI2ICs4OSw2MCBAQAogCiBzdGF0aWMgdm9pZCBidHNfdHJhY2Vfc3RvcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCBjcHU7CisJc3Bpbl9sb2NrKCZidHNfdHJhY2VyX2xvY2spOwogCi0JZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3Bvc3NpYmxlX21hc2spCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGJ0c190cmFjZV9zdG9wX2NwdSwgTlVMTCwgMSk7CisJdHJhY2VfaHdfYnJhbmNoZXNfZW5hYmxlZCA9IDA7CisJb25fZWFjaF9jcHUoYnRzX3RyYWNlX3N0b3BfY3B1LCBOVUxMLCAxKTsKKworCXNwaW5fdW5sb2NrKCZidHNfdHJhY2VyX2xvY2spOwogfQogCitzdGF0aWMgaW50IF9fY3B1aW5pdCBidHNfaG90Y3B1X2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKworCXNwaW5fbG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKKworCWlmICghdHJhY2VfaHdfYnJhbmNoZXNfZW5hYmxlZCkKKwkJZ290byBvdXQ7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgYnRzX3RyYWNlX3N0YXJ0X2NwdSwgTlVMTCwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgYnRzX3RyYWNlX3N0b3BfY3B1LCBOVUxMLCAxKTsKKwkJYnJlYWs7CisJfQorCisgb3V0OgorCXNwaW5fdW5sb2NrKCZidHNfdHJhY2VyX2xvY2spOworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBidHNfaG90Y3B1X25vdGlmaWVyIF9fY3B1aW5pdGRhdGEgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBidHNfaG90Y3B1X2hhbmRsZXIKK307CisKIHN0YXRpYyBpbnQgYnRzX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKKwlod19icmFuY2hfdHJhY2UgPSB0cjsKKwogCWJ0c190cmFjZV9zdGFydCh0cik7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYnRzX3RyYWNlX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJYnRzX3RyYWNlX3N0b3AodHIpOworfQorCiBzdGF0aWMgdm9pZCBidHNfdHJhY2VfcHJpbnRfaGVhZGVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlzZXFfcHV0cyhtLAotCQkgIiMgQ1BVIyAgICAgICAgRlJPTSAgICAgICAgICAgICAgICAgICBUTyAgICAgICAgIEZVTkNUSU9OXG4iKTsKLQlzZXFfcHV0cyhtLAotCQkgIiMgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiIpOworCXNlcV9wdXRzKG0sICIjIENQVSMgICAgICAgIFRPICA8LSAgRlJPTVxuIik7CiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBidHNfdHJhY2VfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCkBAIC04NywxNSArMTUwLDE1IEBACiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzZXEgPSAmaXRlci0+c2VxOwogCXN0cnVjdCBod19icmFuY2hfZW50cnkgKml0OworCXVuc2lnbmVkIGxvbmcgc3ltZmxhZ3MgPSBUUkFDRV9JVEVSX1NZTV9PRkZTRVQ7CiAKIAl0cmFjZV9hc3NpZ25fdHlwZShpdCwgZW50cnkpOwogCiAJaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX0hXX0JSQU5DSEVTKSB7Ci0JCWlmICh0cmFjZV9zZXFfcHJpbnRmKHNlcSwgIiU0ZCAgIiwgZW50cnktPmNwdSkgJiYKLQkJICAgIHRyYWNlX3NlcV9wcmludGYoc2VxLCAiMHglMDE2bGx4IC0+IDB4JTAxNmxseCAiLAotCQkJCSAgICAgaXQtPmZyb20sIGl0LT50bykgJiYKLQkJICAgICghaXQtPmZyb20gfHwKLQkJICAgICBzZXFfcHJpbnRfaXBfc3ltKHNlcSwgaXQtPmZyb20sIC8qIHN5bV9mbGFncyA9ICovIDApKSAmJgorCQlpZiAodHJhY2Vfc2VxX3ByaW50ZihzZXEsICIlNGQgICIsIGl0ZXItPmNwdSkgJiYKKwkJICAgIHNlcV9wcmludF9pcF9zeW0oc2VxLCBpdC0+dG8sIHN5bWZsYWdzKSAmJgorCQkgICAgdHJhY2Vfc2VxX3ByaW50ZihzZXEsICJcdCAgPC0gICIpICYmCisJCSAgICBzZXFfcHJpbnRfaXBfc3ltKHNlcSwgaXQtPmZyb20sIHN5bWZsYWdzKSAmJgogCQkgICAgdHJhY2Vfc2VxX3ByaW50ZihzZXEsICJcbiIpKQogCQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOzsKQEAgLTEwMywyNiArMTY2LDQyIEBACiAJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOwogfQogCi12b2lkIHRyYWNlX2h3X2JyYW5jaChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCB1NjQgZnJvbSwgdTY0IHRvKQordm9pZCB0cmFjZV9od19icmFuY2godTY0IGZyb20sIHU2NCB0bykKIHsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gaHdfYnJhbmNoX3RyYWNlOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGh3X2JyYW5jaF9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnE7CisJdW5zaWduZWQgbG9uZyBpcnExOworCWludCBjcHU7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwgJmlycSk7Ci0JaWYgKCFldmVudCkKKwlpZiAodW5saWtlbHkoIXRyKSkKIAkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KCF0cmFjZV9od19icmFuY2hlc19lbmFibGVkKSkKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoaXJxMSk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKSAhPSAxKQorCQlnb3RvIG91dDsKKworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfSFdfQlJBTkNIRVMsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOworCWlmICghZXZlbnQpCisJCWdvdG8gb3V0OwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgZnJvbSk7CiAJZW50cnktPmVudC50eXBlID0gVFJBQ0VfSFdfQlJBTkNIRVM7Ci0JZW50cnktPmVudC5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJZW50cnktPmZyb20gPSBmcm9tOwogCWVudHJ5LT50byAgID0gdG87Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxKTsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOworCisgb3V0OgorCWF0b21pY19kZWMoJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShpcnExKTsKIH0KIAotc3RhdGljIHZvaWQgdHJhY2VfYnRzX2F0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkgY29uc3Qgc3RydWN0IGJ0c190cmFjZSAqdHJhY2UsIHZvaWQgKmF0KQorc3RhdGljIHZvaWQgdHJhY2VfYnRzX2F0KGNvbnN0IHN0cnVjdCBidHNfdHJhY2UgKnRyYWNlLCB2b2lkICphdCkKIHsKIAlzdHJ1Y3QgYnRzX3N0cnVjdCBidHM7CiAJaW50IGVyciA9IDA7CkBAIC0xMzcsMTggKzIxNiwyOSBAQAogCiAJc3dpdGNoIChidHMucXVhbGlmaWVyKSB7CiAJY2FzZSBCVFNfQlJBTkNIOgotCQl0cmFjZV9od19icmFuY2godHIsIGJ0cy52YXJpYW50Lmxici5mcm9tLCBidHMudmFyaWFudC5sYnIudG8pOworCQl0cmFjZV9od19icmFuY2goYnRzLnZhcmlhbnQubGJyLmZyb20sIGJ0cy52YXJpYW50Lmxici50byk7CiAJCWJyZWFrOwogCX0KIH0KIAorLyoKKyAqIENvbGxlY3QgdGhlIHRyYWNlIG9uIHRoZSBjdXJyZW50IGNwdSBhbmQgd3JpdGUgaXQgaW50byB0aGUgZnRyYWNlIGJ1ZmZlci4KKyAqCisgKiBwcmU6IGJ0c190cmFjZXJfbG9jayBtdXN0IGJlIGxvY2tlZAorICovCiBzdGF0aWMgdm9pZCB0cmFjZV9idHNfY3B1KHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gKHN0cnVjdCB0cmFjZV9hcnJheSAqKSBhcmc7CiAJY29uc3Qgc3RydWN0IGJ0c190cmFjZSAqdHJhY2U7CiAJdW5zaWduZWQgY2hhciAqYXQ7CiAKLQlpZiAoIXRoaXNfdHJhY2VyKQorCWlmICh1bmxpa2VseSghdHIpKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnRyLT5kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldLT5kaXNhYmxlZCkpKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoIXRoaXNfdHJhY2VyKSkKIAkJcmV0dXJuOwogCiAJZHNfc3VzcGVuZF9idHModGhpc190cmFjZXIpOwpAQCAtMTU4LDExICsyNDgsMTEgQEAKIAogCWZvciAoYXQgPSB0cmFjZS0+ZHMudG9wOyAodm9pZCAqKWF0IDwgdHJhY2UtPmRzLmVuZDsKIAkgICAgIGF0ICs9IHRyYWNlLT5kcy5zaXplKQotCQl0cmFjZV9idHNfYXQodHIsIHRyYWNlLCBhdCk7CisJCXRyYWNlX2J0c19hdCh0cmFjZSwgYXQpOwogCiAJZm9yIChhdCA9IHRyYWNlLT5kcy5iZWdpbjsgKHZvaWQgKilhdCA8IHRyYWNlLT5kcy50b3A7CiAJICAgICBhdCArPSB0cmFjZS0+ZHMuc2l6ZSkKLQkJdHJhY2VfYnRzX2F0KHRyLCB0cmFjZSwgYXQpOworCQl0cmFjZV9idHNfYXQodHJhY2UsIGF0KTsKIAogb3V0OgogCWRzX3Jlc3VtZV9idHModGhpc190cmFjZXIpOwpAQCAtMTcwLDI2ICsyNjAsNDMgQEAKIAogc3RhdGljIHZvaWQgdHJhY2VfYnRzX3ByZXBhcmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewotCWludCBjcHU7CisJc3Bpbl9sb2NrKCZidHNfdHJhY2VyX2xvY2spOwogCi0JZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3Bvc3NpYmxlX21hc2spCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHRyYWNlX2J0c19jcHUsIGl0ZXItPnRyLCAxKTsKKwlvbl9lYWNoX2NwdSh0cmFjZV9idHNfY3B1LCBpdGVyLT50ciwgMSk7CisKKwlzcGluX3VubG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdHJhY2VfYnRzX2Nsb3NlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKGl0ZXItPnRyKTsKK30KKwordm9pZCB0cmFjZV9od19icmFuY2hfb29wcyh2b2lkKQoreworCXNwaW5fbG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKKworCXRyYWNlX2J0c19jcHUoaHdfYnJhbmNoX3RyYWNlKTsKKworCXNwaW5fdW5sb2NrKCZidHNfdHJhY2VyX2xvY2spOwogfQogCiBzdHJ1Y3QgdHJhY2VyIGJ0c190cmFjZXIgX19yZWFkX21vc3RseSA9CiB7CiAJLm5hbWUJCT0gImh3LWJyYW5jaC10cmFjZXIiLAogCS5pbml0CQk9IGJ0c190cmFjZV9pbml0LAotCS5yZXNldAkJPSBidHNfdHJhY2Vfc3RvcCwKKwkucmVzZXQJCT0gYnRzX3RyYWNlX3Jlc2V0LAogCS5wcmludF9oZWFkZXIJPSBidHNfdHJhY2VfcHJpbnRfaGVhZGVyLAogCS5wcmludF9saW5lCT0gYnRzX3RyYWNlX3ByaW50X2xpbmUsCiAJLnN0YXJ0CQk9IGJ0c190cmFjZV9zdGFydCwKIAkuc3RvcAkJPSBidHNfdHJhY2Vfc3RvcCwKLQkub3BlbgkJPSB0cmFjZV9idHNfcHJlcGFyZQorCS5vcGVuCQk9IHRyYWNlX2J0c19wcmVwYXJlLAorCS5jbG9zZQkJPSB0cmFjZV9idHNfY2xvc2UKIH07CiAKIF9faW5pdCBzdGF0aWMgaW50IGluaXRfYnRzX3RyYWNlKHZvaWQpCiB7CisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZidHNfaG90Y3B1X25vdGlmaWVyKTsKIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZidHNfdHJhY2VyKTsKIH0KIGRldmljZV9pbml0Y2FsbChpbml0X2J0c190cmFjZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwppbmRleCA2MmE3OGQ5Li5iOTIzZDEzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogdHJhY2UgaXJxcyBvZmYgY3JpdGljYWxsIHRpbWluZ3MKKyAqIHRyYWNlIGlycXMgb2ZmIGNyaXRpY2FsIHRpbWluZ3MKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KQEAgLTMyLDYgKzMyLDggQEAKIAogc3RhdGljIGludCB0cmFjZV90eXBlIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBpbnQgc2F2ZV9sYXRfZmxhZzsKKwogI2lmZGVmIENPTkZJR19QUkVFTVBUX1RSQUNFUgogc3RhdGljIGlubGluZSBpbnQKIHByZWVtcHRfdHJhY2Uodm9pZCkKQEAgLTk1LDcgKzk3LDcgQEAKIAlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CiAKIAlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKQotCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHByZWVtcHRfY291bnQoKSk7CisJCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIH0KQEAgLTE1Myw3ICsxNTUsNyBAQAogCWlmICghcmVwb3J0X2xhdGVuY3koZGVsdGEpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgQ0FMTEVSX0FERFIwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogCiAJbGF0ZW5jeSA9IG5zZWNzX3RvX3VzZWNzKGRlbHRhKTsKIApAQCAtMTc3LDcgKzE3OSw3IEBACiAJZGF0YS0+Y3JpdGljYWxfc2VxdWVuY2UgPSBtYXhfc2VxdWVuY2U7CiAJZGF0YS0+cHJlZW1wdF90aW1lc3RhbXAgPSBmdHJhY2Vfbm93KGNwdSk7CiAJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgQ0FMTEVSX0FERFIwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTIxMCw3ICsyMTIsNyBAQAogCiAJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CiAKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHByZWVtcHRfY291bnQoKSk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOwogCiAJcGVyX2NwdSh0cmFjaW5nX2NwdSwgY3B1KSA9IDE7CiAKQEAgLTI0NCw3ICsyNDYsNyBAQAogCWF0b21pY19pbmMoJmRhdGEtPmRpc2FibGVkKTsKIAogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKKwl0cmFjZV9mdW5jdGlvbih0ciwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHByZWVtcHRfY291bnQoKSk7CiAJY2hlY2tfY3JpdGljYWxfdGltaW5nKHRyLCBkYXRhLCBwYXJlbnRfaXAgPyA6IGlwLCBjcHUpOwogCWRhdGEtPmNyaXRpY2FsX3N0YXJ0ID0gMDsKIAlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CkBAIC0zNTMsMzMgKzM1NSwyNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUX1RSQUNFUiAqLwogCi0vKgotICogc2F2ZV90cmFjZXJfZW5hYmxlZCBpcyB1c2VkIHRvIHNhdmUgdGhlIHN0YXRlIG9mIHRoZSB0cmFjZXJfZW5hYmxlZAotICogdmFyaWFibGUgd2hlbiB3ZSBkaXNhYmxlIGl0IHdoZW4gd2Ugb3BlbiBhIHRyYWNlIG91dHB1dCBmaWxlLgotICovCi1zdGF0aWMgaW50IHNhdmVfdHJhY2VyX2VuYWJsZWQ7Ci0KIHN0YXRpYyB2b2lkIHN0YXJ0X2lycXNvZmZfdHJhY2VyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOwotCWlmICh0cmFjaW5nX2lzX2VuYWJsZWQoKSkgeworCWlmICh0cmFjaW5nX2lzX2VuYWJsZWQoKSkKIAkJdHJhY2VyX2VuYWJsZWQgPSAxOwotCQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMTsKLQl9IGVsc2UgeworCWVsc2UKIAkJdHJhY2VyX2VuYWJsZWQgPSAwOwotCQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMDsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIHN0b3BfaXJxc29mZl90cmFjZXIoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjZXJfZW5hYmxlZCA9IDA7Ci0Jc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDA7CiAJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faXJxc29mZl90cmFjZXJfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogeworCXNhdmVfbGF0X2ZsYWcgPSB0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfTEFURU5DWV9GTVQ7CisJdHJhY2VfZmxhZ3MgfD0gVFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVDsKKwogCXRyYWNpbmdfbWF4X2xhdGVuY3kgPSAwOwogCWlycXNvZmZfdHJhY2UgPSB0cjsKIAkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgdHJhY2VyIGlzIHZpc2libGUgKi8KQEAgLTM5MCwzMCArMzg1LDE5IEBACiBzdGF0aWMgdm9pZCBpcnFzb2ZmX3RyYWNlcl9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXN0b3BfaXJxc29mZl90cmFjZXIodHIpOworCisJaWYgKCFzYXZlX2xhdF9mbGFnKQorCQl0cmFjZV9mbGFncyAmPSB+VFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVDsKIH0KIAogc3RhdGljIHZvaWQgaXJxc29mZl90cmFjZXJfc3RhcnQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjZXJfZW5hYmxlZCA9IDE7Ci0Jc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIGlycXNvZmZfdHJhY2VyX3N0b3Aoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjZXJfZW5hYmxlZCA9IDA7Ci0Jc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycXNvZmZfdHJhY2VyX29wZW4oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCS8qIHN0b3AgdGhlIHRyYWNlIHdoaWxlIGR1bXBpbmcgKi8KLQl0cmFjZXJfZW5hYmxlZCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycXNvZmZfdHJhY2VyX2Nsb3NlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQkvKiByZXN0YXJ0IHRyYWNpbmcgKi8KLQl0cmFjZXJfZW5hYmxlZCA9IHNhdmVfdHJhY2VyX2VuYWJsZWQ7CiB9CiAKICNpZmRlZiBDT05GSUdfSVJRU09GRl9UUkFDRVIKQEAgLTQzMSw4ICs0MTUsNiBAQAogCS5yZXNldAkJPSBpcnFzb2ZmX3RyYWNlcl9yZXNldCwKIAkuc3RhcnQJCT0gaXJxc29mZl90cmFjZXJfc3RhcnQsCiAJLnN0b3AJCT0gaXJxc29mZl90cmFjZXJfc3RvcCwKLQkub3BlbgkJPSBpcnFzb2ZmX3RyYWNlcl9vcGVuLAotCS5jbG9zZQkJPSBpcnFzb2ZmX3RyYWNlcl9jbG9zZSwKIAkucHJpbnRfbWF4CT0gMSwKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAJLnNlbGZ0ZXN0ICAgID0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9pcnFzb2ZmLApAQCAtNDU5LDggKzQ0MSw2IEBACiAJLnJlc2V0CQk9IGlycXNvZmZfdHJhY2VyX3Jlc2V0LAogCS5zdGFydAkJPSBpcnFzb2ZmX3RyYWNlcl9zdGFydCwKIAkuc3RvcAkJPSBpcnFzb2ZmX3RyYWNlcl9zdG9wLAotCS5vcGVuCQk9IGlycXNvZmZfdHJhY2VyX29wZW4sCi0JLmNsb3NlCQk9IGlycXNvZmZfdHJhY2VyX2Nsb3NlLAogCS5wcmludF9tYXgJPSAxLAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3ByZWVtcHRvZmYsCkBAIC00ODksOCArNDY5LDYgQEAKIAkucmVzZXQJCT0gaXJxc29mZl90cmFjZXJfcmVzZXQsCiAJLnN0YXJ0CQk9IGlycXNvZmZfdHJhY2VyX3N0YXJ0LAogCS5zdG9wCQk9IGlycXNvZmZfdHJhY2VyX3N0b3AsCi0JLm9wZW4JCT0gaXJxc29mZl90cmFjZXJfb3BlbiwKLQkuY2xvc2UJCT0gaXJxc29mZl90cmFjZXJfY2xvc2UsCiAJLnByaW50X21heAk9IDEsCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfcHJlZW1wdGlycXNvZmYsCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMKaW5kZXggODBlNTAzZS4uOGUzN2ZjZCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCiAKIHN0cnVjdCBoZWFkZXJfaXRlciB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKQEAgLTE4MywyMSArMTg0LDIyIEBACiAJc3dpdGNoIChydy0+b3Bjb2RlKSB7CiAJY2FzZSBNTUlPX1JFQUQ6CiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKLQkJCSJSICVkICVsdS4lMDZsdSAlZCAweCVsbHggMHglbHggMHglbHggJWRcbiIsCisJCQkiUiAlZCAldS4lMDZsdSAlZCAweCVsbHggMHglbHggMHglbHggJWRcbiIsCiAJCQlydy0+d2lkdGgsIHNlY3MsIHVzZWNfcmVtLCBydy0+bWFwX2lkLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylydy0+cGh5cywKIAkJCXJ3LT52YWx1ZSwgcnctPnBjLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNTUlPX1dSSVRFOgogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkiVyAlZCAlbHUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4ICVkXG4iLAorCQkJIlcgJWQgJXUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4ICVkXG4iLAogCQkJcnctPndpZHRoLCBzZWNzLCB1c2VjX3JlbSwgcnctPm1hcF9pZCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcnctPnBoeXMsCiAJCQlydy0+dmFsdWUsIHJ3LT5wYywgMCk7CiAJCWJyZWFrOwogCWNhc2UgTU1JT19VTktOT1dOX09QOgogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkiVU5LTk9XTiAlbHUuJTA2bHUgJWQgMHglbGx4ICUwMngsJTAyeCwlMDJ4IDB4JWx4ICVkXG4iLAorCQkJIlVOS05PV04gJXUuJTA2bHUgJWQgMHglbGx4ICUwMmx4LCUwMmx4LCIKKwkJCSIlMDJseCAweCVseCAlZFxuIiwKIAkJCXNlY3MsIHVzZWNfcmVtLCBydy0+bWFwX2lkLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylydy0+cGh5cywKIAkJCShydy0+dmFsdWUgPj4gMTYpICYgMHhmZiwgKHJ3LT52YWx1ZSA+PiA4KSAmIDB4ZmYsCkBAIC0yMjksMTQgKzIzMSwxNCBAQAogCXN3aXRjaCAobS0+b3Bjb2RlKSB7CiAJY2FzZSBNTUlPX1BST0JFOgogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkiTUFQICVsdS4lMDZsdSAlZCAweCVsbHggMHglbHggMHglbHggMHglbHggJWRcbiIsCisJCQkiTUFQICV1LiUwNmx1ICVkIDB4JWxseCAweCVseCAweCVseCAweCVseCAlZFxuIiwKIAkJCXNlY3MsIHVzZWNfcmVtLCBtLT5tYXBfaWQsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW0tPnBoeXMsIG0tPnZpcnQsIG0tPmxlbiwKIAkJCTBVTCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgTU1JT19VTlBST0JFOgogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkiVU5NQVAgJWx1LiUwNmx1ICVkIDB4JWx4ICVkXG4iLAorCQkJIlVOTUFQICV1LiUwNmx1ICVkIDB4JWx4ICVkXG4iLAogCQkJc2VjcywgdXNlY19yZW0sIG0tPm1hcF9pZCwgMFVMLCAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI1NSwxOCArMjU3LDE1IEBACiAJY29uc3QgY2hhciAqbXNnCQk9IHByaW50LT5idWY7CiAJc3RydWN0IHRyYWNlX3NlcSAqcwk9ICZpdGVyLT5zZXE7CiAJdW5zaWduZWQgbG9uZyBsb25nIHQJPSBuczJ1c2VjcyhpdGVyLT50cyk7Ci0JdW5zaWduZWQgbG9uZyB1c2VjX3JlbQk9IGRvX2Rpdih0LCAxMDAwMDAwVUxMKTsKKwl1bnNpZ25lZCBsb25nIHVzZWNfcmVtCT0gZG9fZGl2KHQsIFVTRUNfUEVSX1NFQyk7CiAJdW5zaWduZWQgc2VjcwkJPSAodW5zaWduZWQgbG9uZyl0OwogCWludCByZXQ7CiAKIAkvKiBUaGUgdHJhaWxpbmcgbmV3bGluZSBtdXN0IGJlIGluIHRoZSBtZXNzYWdlLiAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIk1BUksgJWx1LiUwNmx1ICVzIiwgc2VjcywgdXNlY19yZW0sIG1zZyk7CisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiTUFSSyAldS4lMDZsdSAlcyIsIHNlY3MsIHVzZWNfcmVtLCBtc2cpOwogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKLQlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQotCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKLQogCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKQEAgLTMwOCwyMSArMzA3LDE3IEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX3J3ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAKLQlldmVudAk9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICAgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9NTUlPX1JXLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCBwYyk7CiAJaWYgKCFldmVudCkgewogCQlhdG9taWNfaW5jKCZkcm9wcGVkX2NvdW50KTsKIAkJcmV0dXJuOwogCX0KIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIHByZWVtcHRfY291bnQoKSk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9NTUlPX1JXOwogCWVudHJ5LT5ydwkJCT0gKnJ3OwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCBwYyk7CiB9CiAKIHZvaWQgbW1pb190cmFjZV9ydyhzdHJ1Y3QgbW1pb3RyYWNlX3J3ICpydykKQEAgLTMzOCwyMSArMzMzLDE3IEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX21hcCAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IHBjID0gcHJlZW1wdF9jb3VudCgpOwogCi0JZXZlbnQJPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAgICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfTU1JT19NQVAsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIHBjKTsKIAlpZiAoIWV2ZW50KSB7CiAJCWF0b21pY19pbmMoJmRyb3BwZWRfY291bnQpOwogCQlyZXR1cm47CiAJfQogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgcHJlZW1wdF9jb3VudCgpKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX01NSU9fTUFQOwogCWVudHJ5LT5tYXAJCQk9ICptYXA7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIHBjKTsKIH0KIAogdm9pZCBtbWlvX3RyYWNlX21hcHBpbmcoc3RydWN0IG1taW90cmFjZV9tYXAgKm1hcCkKQEAgLTM2OCw1ICszNTksNSBAQAogCiBpbnQgbW1pb190cmFjZV9wcmludGsoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7Ci0JcmV0dXJuIHRyYWNlX3ZwcmludGsoMCwgLTEsIGZtdCwgYXJncyk7CisJcmV0dXJuIHRyYWNlX3ZwcmludGsoMCwgZm10LCBhcmdzKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ub3AuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ub3AuYwppbmRleCBiOTc2N2FjLi4zOTRmOTQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfbm9wLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jCkBAIC00NywxMiArNDcsNyBAQAogCiBzdGF0aWMgaW50IG5vcF90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JaW50IGNwdTsKIAljdHhfdHJhY2UgPSB0cjsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOwotCiAJc3RhcnRfbm9wX3RyYWNlKHRyKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTk2LDYgKzkxLDcgQEAKIAkubmFtZQkJPSAibm9wIiwKIAkuaW5pdAkJPSBub3BfdHJhY2VfaW5pdCwKIAkucmVzZXQJCT0gbm9wX3RyYWNlX3Jlc2V0LAorCS53YWl0X3BpcGUJPSBwb2xsX3dhaXRfcGlwZSwKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAJLnNlbGZ0ZXN0CT0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9ub3AsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzJiOWE2Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCkBAIC0wLDAgKzEsMTAxNyBAQAorLyoKKyAqIHRyYWNlX291dHB1dC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQgSW5jLCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworLyogbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KKyNkZWZpbmUgRVZFTlRfSEFTSFNJWkUJMTI4CisKK3N0YXRpYyBERUZJTkVfTVVURVgodHJhY2VfZXZlbnRfbXV0ZXgpOworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGV2ZW50X2hhc2hbRVZFTlRfSEFTSFNJWkVdIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBpbnQgbmV4dF9ldmVudF90eXBlID0gX19UUkFDRV9MQVNUX1RZUEUgKyAxOworCitlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9wcmludF9icHJpbnRrX21zZ19vbmx5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OworCXN0cnVjdCBicHJpbnRfZW50cnkgKmZpZWxkOworCWludCByZXQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJcmV0ID0gdHJhY2Vfc2VxX2JwcmludGYocywgZmllbGQtPmZtdCwgZmllbGQtPmJ1Zik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK2VudW0gcHJpbnRfbGluZV90IHRyYWNlX3ByaW50X3ByaW50a19tc2dfb25seShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKKwlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOworCWludCByZXQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMiLCBmaWVsZC0+YnVmKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworLyoqCisgKiB0cmFjZV9zZXFfcHJpbnRmIC0gc2VxdWVuY2UgcHJpbnRpbmcgb2YgdHJhY2UgaW5mb3JtYXRpb24KKyAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCisgKiBAZm10OiBwcmludGYgZm9ybWF0IHN0cmluZworICoKKyAqIFRoZSB0cmFjZXIgbWF5IHVzZSBlaXRoZXIgc2VxdWVuY2Ugb3BlcmF0aW9ucyBvciBpdHMgb3duCisgKiBjb3B5IHRvIHVzZXIgcm91dGluZXMuIFRvIHNpbXBsaWZ5IGZvcm1hdGluZyBvZiBhIHRyYWNlCisgKiB0cmFjZV9zZXFfcHJpbnRmIGlzIHVzZWQgdG8gc3RvcmUgc3RyaW5ncyBpbnRvIGEgc3BlY2lhbAorICogYnVmZmVyIChAcykuIFRoZW4gdGhlIG91dHB1dCBtYXkgYmUgZWl0aGVyIHVzZWQgYnkKKyAqIHRoZSBzZXF1ZW5jZXIgb3IgcHVsbGVkIGludG8gYW5vdGhlciBidWZmZXIuCisgKi8KK2ludAordHJhY2Vfc2VxX3ByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgbGVuID0gKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuOworCXZhX2xpc3QgYXA7CisJaW50IHJldDsKKworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZzbnByaW50ZihzLT5idWZmZXIgKyBzLT5sZW4sIGxlbiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCS8qIElmIHdlIGNhbid0IHdyaXRlIGl0IGFsbCwgZG9uJ3QgYm90aGVyIHdyaXRpbmcgYW55dGhpbmcgKi8KKwlpZiAocmV0ID49IGxlbikKKwkJcmV0dXJuIDA7CisKKwlzLT5sZW4gKz0gcmV0OworCisJcmV0dXJuIGxlbjsKK30KKworaW50IHRyYWNlX3NlcV9icHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5hcnkpCit7CisJaW50IGxlbiA9IChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbjsKKwlpbnQgcmV0OworCisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJcmV0ID0gYnN0cl9wcmludGYocy0+YnVmZmVyICsgcy0+bGVuLCBsZW4sIGZtdCwgYmluYXJ5KTsKKworCS8qIElmIHdlIGNhbid0IHdyaXRlIGl0IGFsbCwgZG9uJ3QgYm90aGVyIHdyaXRpbmcgYW55dGhpbmcgKi8KKwlpZiAocmV0ID49IGxlbikKKwkJcmV0dXJuIDA7CisKKwlzLT5sZW4gKz0gcmV0OworCisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiB0cmFjZV9zZXFfcHV0cyAtIHRyYWNlIHNlcXVlbmNlIHByaW50aW5nIG9mIHNpbXBsZSBzdHJpbmcKKyAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCisgKiBAc3RyOiBzaW1wbGUgc3RyaW5nIHRvIHJlY29yZAorICoKKyAqIFRoZSB0cmFjZXIgbWF5IHVzZSBlaXRoZXIgdGhlIHNlcXVlbmNlIG9wZXJhdGlvbnMgb3IgaXRzIG93bgorICogY29weSB0byB1c2VyIHJvdXRpbmVzLiBUaGlzIGZ1bmN0aW9uIHJlY29yZHMgYSBzaW1wbGUgc3RyaW5nCisgKiBpbnRvIGEgc3BlY2lhbCBidWZmZXIgKEBzKSBmb3IgbGF0ZXIgcmV0cmlldmFsIGJ5IGEgc2VxdWVuY2VyCisgKiBvciBvdGhlciBtZWNoYW5pc20uCisgKi8KK2ludCB0cmFjZV9zZXFfcHV0cyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGxlbiA9IHN0cmxlbihzdHIpOworCisJaWYgKGxlbiA+ICgoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW4pKQorCQlyZXR1cm4gMDsKKworCW1lbWNweShzLT5idWZmZXIgKyBzLT5sZW4sIHN0ciwgbGVuKTsKKwlzLT5sZW4gKz0gbGVuOworCisJcmV0dXJuIGxlbjsKK30KKworaW50IHRyYWNlX3NlcV9wdXRjKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGNoYXIgYykKK3sKKwlpZiAocy0+bGVuID49IChQQUdFX1NJWkUgLSAxKSkKKwkJcmV0dXJuIDA7CisKKwlzLT5idWZmZXJbcy0+bGVuKytdID0gYzsKKworCXJldHVybiAxOworfQorCitpbnQgdHJhY2Vfc2VxX3B1dG1lbShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pCit7CisJaWYgKGxlbiA+ICgoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW4pKQorCQlyZXR1cm4gMDsKKworCW1lbWNweShzLT5idWZmZXIgKyBzLT5sZW4sIG1lbSwgbGVuKTsKKwlzLT5sZW4gKz0gbGVuOworCisJcmV0dXJuIGxlbjsKK30KKworaW50IHRyYWNlX3NlcV9wdXRtZW1faGV4KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyIGhleFtIRVhfQ0hBUlNdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBtZW07CisJaW50IGksIGo7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxlbjsgaSsrKSB7CisjZWxzZQorCWZvciAoaSA9IGxlbi0xLCBqID0gMDsgaSA+PSAwOyBpLS0pIHsKKyNlbmRpZgorCQloZXhbaisrXSA9IGhleF9hc2NfaGkoZGF0YVtpXSk7CisJCWhleFtqKytdID0gaGV4X2FzY19sbyhkYXRhW2ldKTsKKwl9CisJaGV4W2orK10gPSAnICc7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3B1dG1lbShzLCBoZXgsIGopOworfQorCit2b2lkICp0cmFjZV9zZXFfcmVzZXJ2ZShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzaXplX3QgbGVuKQoreworCXZvaWQgKnJldDsKKworCWlmIChsZW4gPiAoKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSBzLT5idWZmZXIgKyBzLT5sZW47CisJcy0+bGVuICs9IGxlbjsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB0cmFjZV9zZXFfcGF0aChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCisJaWYgKHMtPmxlbiA+PSAoUEFHRV9TSVpFIC0gMSkpCisJCXJldHVybiAwOworCXAgPSBkX3BhdGgocGF0aCwgcy0+YnVmZmVyICsgcy0+bGVuLCBQQUdFX1NJWkUgLSBzLT5sZW4pOworCWlmICghSVNfRVJSKHApKSB7CisJCXAgPSBtYW5nbGVfcGF0aChzLT5idWZmZXIgKyBzLT5sZW4sIHAsICJcbiIpOworCQlpZiAocCkgeworCQkJcy0+bGVuID0gcCAtIHMtPmJ1ZmZlcjsKKwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIHsKKwkJcy0+YnVmZmVyW3MtPmxlbisrXSA9ICc/JzsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfS1JFVFBST0JFUworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICprcmV0cHJvYmVkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgdHJhbXBfbmFtZVtdID0gImtyZXRwcm9iZV90cmFtcG9saW5lIjsKKwlpbnQgc2l6ZSA9IHNpemVvZih0cmFtcF9uYW1lKTsKKworCWlmIChzdHJuY21wKHRyYW1wX25hbWUsIG5hbWUsIHNpemUpID09IDApCisJCXJldHVybiAiW3Vua25vd24va3JldHByb2JlJ2RdIjsKKwlyZXR1cm4gbmFtZTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmtyZXRwcm9iZWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gbmFtZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfS1JFVFBST0JFUyAqLworCitzdGF0aWMgaW50CitzZXFfcHJpbnRfc3ltX3Nob3J0KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworI2lmZGVmIENPTkZJR19LQUxMU1lNUworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisJY29uc3QgY2hhciAqbmFtZTsKKworCWthbGxzeW1zX2xvb2t1cChhZGRyZXNzLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOworCisJbmFtZSA9IGtyZXRwcm9iZWQoc3RyKTsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsIGZtdCwgbmFtZSk7CisjZW5kaWYKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2VxX3ByaW50X3N5bV9vZmZzZXQoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVMKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlzcHJpbnRfc3ltYm9sKHN0ciwgYWRkcmVzcyk7CisJbmFtZSA9IGtyZXRwcm9iZWQoc3RyKTsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsIGZtdCwgbmFtZSk7CisjZW5kaWYKKwlyZXR1cm4gMTsKK30KKworI2lmbmRlZiBDT05GSUdfNjRCSVQKKyMgZGVmaW5lIElQX0ZNVCAiJTA4bHgiCisjZWxzZQorIyBkZWZpbmUgSVBfRk1UICIlMDE2bHgiCisjZW5kaWYKKworaW50IHNlcV9wcmludF91c2VyX2lwKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHN5bV9mbGFncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyB2bXN0YXJ0ID0gMDsKKwlpbnQgcmV0ID0gMTsKKworCWlmIChtbSkgeworCQljb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCXZtYSA9IGZpbmRfdm1hKG1tLCBpcCk7CisJCWlmICh2bWEpIHsKKwkJCWZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJCQl2bXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwkJfQorCQlpZiAoZmlsZSkgeworCQkJcmV0ID0gdHJhY2Vfc2VxX3BhdGgocywgJmZpbGUtPmZfcGF0aCk7CisJCQlpZiAocmV0KQorCQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlsrMHglbHhdIiwKKwkJCQkJCSAgICAgICBpcCAtIHZtc3RhcnQpOworCQl9CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJfQorCWlmIChyZXQgJiYgKChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9BRERSKSB8fCAhZmlsZSkpCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiA8IiBJUF9GTVQgIj4iLCBpcCk7CisJcmV0dXJuIHJldDsKK30KKworaW50CitzZXFfcHJpbnRfdXNlcmlwX29ianMoY29uc3Qgc3RydWN0IHVzZXJzdGFja19lbnRyeSAqZW50cnksIHN0cnVjdCB0cmFjZV9zZXEgKnMsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKKwlpbnQgcmV0ID0gMTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX1VTRVJPQkopIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCQkvKgorCQkgKiB3ZSBkbyB0aGUgbG9va3VwIG9uIHRoZSB0aHJlYWQgZ3JvdXAgbGVhZGVyLAorCQkgKiBzaW5jZSBpbmRpdmlkdWFsIHRocmVhZHMgbWlnaHQgaGF2ZSBhbHJlYWR5IHF1aXQhCisJCSAqLworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXRhc2sgPSBmaW5kX3Rhc2tfYnlfdnBpZChlbnRyeS0+ZW50LnRnaWQpOworCQlpZiAodGFzaykKKwkJCW1tID0gZ2V0X3Rhc2tfbW0odGFzayk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1RBQ0tfRU5UUklFUzsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgaXAgPSBlbnRyeS0+Y2FsbGVyW2ldOworCisJCWlmIChpcCA9PSBVTE9OR19NQVggfHwgIXJldCkKKwkJCWJyZWFrOworCQlpZiAoaSAmJiByZXQpCisJCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiIDwtICIpOworCQlpZiAoIWlwKSB7CisJCQlpZiAocmV0KQorCQkJCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICI/PyIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwkJaWYgKHJldCkKKwkJCXJldCA9IHNlcV9wcmludF91c2VyX2lwKHMsIG1tLCBpcCwgc3ltX2ZsYWdzKTsKKwl9CisKKwlpZiAobW0pCisJCW1tcHV0KG1tKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK3NlcV9wcmludF9pcF9zeW0oc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpCit7CisJaW50IHJldDsKKworCWlmICghaXApCisJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIwIik7CisKKwlpZiAoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fT0ZGU0VUKQorCQlyZXQgPSBzZXFfcHJpbnRfc3ltX29mZnNldChzLCAiJXMiLCBpcCk7CisJZWxzZQorCQlyZXQgPSBzZXFfcHJpbnRfc3ltX3Nob3J0KHMsICIlcyIsIGlwKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCWlmIChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9BRERSKQorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPCIgSVBfRk1UICI+IiwgaXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2xhdF9wcmludF9nZW5lcmljKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksIGludCBjcHUpCit7CisJaW50IGhhcmRpcnEsIHNvZnRpcnE7CisJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworCisJdHJhY2VfZmluZF9jbWRsaW5lKGVudHJ5LT5waWQsIGNvbW0pOworCWhhcmRpcnEgPSBlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0hBUkRJUlE7CisJc29mdGlycSA9IGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfU09GVElSUTsKKworCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTguOHMtJS01ZCAlM2QlYyVjJWMiLAorCQkJICAgICAgY29tbSwgZW50cnktPnBpZCwgY3B1LAorCQkJICAgICAgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSVJRU19PRkYpID8gJ2QnIDoKKwkJCQkoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19JUlFTX05PU1VQUE9SVCkgPworCQkJCSAgJ1gnIDogJy4nLAorCQkJICAgICAgKGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfTkVFRF9SRVNDSEVEKSA/CisJCQkJJ04nIDogJy4nLAorCQkJICAgICAgKGhhcmRpcnEgJiYgc29mdGlycSkgPyAnSCcgOgorCQkJCWhhcmRpcnEgPyAnaCcgOiBzb2Z0aXJxID8gJ3MnIDogJy4nKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZW50cnktPnByZWVtcHRfY291bnQpCisJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIleCIsIGVudHJ5LT5wcmVlbXB0X2NvdW50KTsKKwlyZXR1cm4gdHJhY2Vfc2VxX3B1dHMocywgIi4iKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJlZW1wdF9tYXJrX3RocmVzaCA9IDEwMDsKKworc3RhdGljIGludAorbGF0X3ByaW50X3RpbWVzdGFtcChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1NjQgYWJzX3VzZWNzLAorCQkgICAgdW5zaWduZWQgbG9uZyByZWxfdXNlY3MpCit7CisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiAlNGxsZHVzJWM6ICIsIGFic191c2VjcywKKwkJCQlyZWxfdXNlY3MgPiBwcmVlbXB0X21hcmtfdGhyZXNoID8gJyEnIDoKKwkJCQkgIHJlbF91c2VjcyA+IDEgPyAnKycgOiAnICcpOworfQorCitpbnQgdHJhY2VfcHJpbnRfY29udGV4dChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdCA9IG5zMnVzZWNzKGl0ZXItPnRzKTsKKwl1bnNpZ25lZCBsb25nIHVzZWNfcmVtID0gZG9fZGl2KHQsIFVTRUNfUEVSX1NFQyk7CisJdW5zaWduZWQgbG9uZyBzZWNzID0gKHVuc2lnbmVkIGxvbmcpdDsKKwljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07CisKKwl0cmFjZV9maW5kX2NtZGxpbmUoZW50cnktPnBpZCwgY29tbSk7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cy0lLTVkIFslMDNkXSAlNWx1LiUwNmx1OiAiLAorCQkJCWNvbW0sIGVudHJ5LT5waWQsIGl0ZXItPmNwdSwgc2VjcywgdXNlY19yZW0pOworfQorCitpbnQgdHJhY2VfcHJpbnRfbGF0X2NvbnRleHQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXU2NCBuZXh0X3RzOworCWludCByZXQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudCwKKwkJCSAgICpuZXh0X2VudHJ5ID0gdHJhY2VfZmluZF9uZXh0X2VudHJ5KGl0ZXIsIE5VTEwsCisJCQkJCQkJICAgICAgICZuZXh0X3RzKTsKKwl1bnNpZ25lZCBsb25nIHZlcmJvc2UgPSAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1ZFUkJPU0UpOworCXVuc2lnbmVkIGxvbmcgYWJzX3VzZWNzID0gbnMydXNlY3MoaXRlci0+dHMgLSBpdGVyLT50ci0+dGltZV9zdGFydCk7CisJdW5zaWduZWQgbG9uZyByZWxfdXNlY3M7CisKKwlpZiAoIW5leHRfZW50cnkpCisJCW5leHRfdHMgPSBpdGVyLT50czsKKwlyZWxfdXNlY3MgPSBuczJ1c2VjcyhuZXh0X3RzIC0gaXRlci0+dHMpOworCisJaWYgKHZlcmJvc2UpIHsKKwkJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworCisJCXRyYWNlX2ZpbmRfY21kbGluZShlbnRyeS0+cGlkLCBjb21tKTsKKworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlMTZzICU1ZCAlM2QgJWQgJTA4eCAlMDhseCBbJTA4bHhdIgorCQkJCSAgICAgICAiICVsZC4lMDNsZG1zICgrJWxkLiUwM2xkbXMpOiAiLCBjb21tLAorCQkJCSAgICAgICBlbnRyeS0+cGlkLCBpdGVyLT5jcHUsIGVudHJ5LT5mbGFncywKKwkJCQkgICAgICAgZW50cnktPnByZWVtcHRfY291bnQsIGl0ZXItPmlkeCwKKwkJCQkgICAgICAgbnMydXNlY3MoaXRlci0+dHMpLAorCQkJCSAgICAgICBhYnNfdXNlY3MgLyBVU0VDX1BFUl9NU0VDLAorCQkJCSAgICAgICBhYnNfdXNlY3MgJSBVU0VDX1BFUl9NU0VDLAorCQkJCSAgICAgICByZWxfdXNlY3MgLyBVU0VDX1BFUl9NU0VDLAorCQkJCSAgICAgICByZWxfdXNlY3MgJSBVU0VDX1BFUl9NU0VDKTsKKwl9IGVsc2UgeworCQlyZXQgPSBsYXRfcHJpbnRfZ2VuZXJpYyhzLCBlbnRyeSwgaXRlci0+Y3B1KTsKKwkJaWYgKHJldCkKKwkJCXJldCA9IGxhdF9wcmludF90aW1lc3RhbXAocywgYWJzX3VzZWNzLCByZWxfdXNlY3MpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHN0YXRlX3RvX2NoYXJbXSA9IFRBU0tfU1RBVEVfVE9fQ0hBUl9TVFI7CisKK3N0YXRpYyBpbnQgdGFza19zdGF0ZV9jaGFyKHVuc2lnbmVkIGxvbmcgc3RhdGUpCit7CisJaW50IGJpdCA9IHN0YXRlID8gX19mZnMoc3RhdGUpICsgMSA6IDA7CisKKwlyZXR1cm4gYml0IDwgc2l6ZW9mKHN0YXRlX3RvX2NoYXIpIC0gMSA/IHN0YXRlX3RvX2NoYXJbYml0XSA6ICc/JzsKK30KKworLyoqCisgKiBmdHJhY2VfZmluZF9ldmVudCAtIGZpbmQgYSByZWdpc3RlcmVkIGV2ZW50CisgKiBAdHlwZTogdGhlIHR5cGUgb2YgZXZlbnQgdG8gbG9vayBmb3IKKyAqCisgKiBSZXR1cm5zIGFuIGV2ZW50IG9mIHR5cGUgQHR5cGUgb3RoZXJ3aXNlIE5VTEwKKyAqLworc3RydWN0IHRyYWNlX2V2ZW50ICpmdHJhY2VfZmluZF9ldmVudChpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXVuc2lnbmVkIGtleTsKKworCWtleSA9IHR5cGUgJiAoRVZFTlRfSEFTSFNJWkUgLSAxKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgbiwgJmV2ZW50X2hhc2hba2V5XSwgbm9kZSkgeworCQlpZiAoZXZlbnQtPnR5cGUgPT0gdHlwZSkKKwkJCXJldHVybiBldmVudDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiByZWdpc3Rlcl9mdHJhY2VfZXZlbnQgLSByZWdpc3RlciBvdXRwdXQgZm9yIGFuIGV2ZW50IHR5cGUKKyAqIEBldmVudDogdGhlIGV2ZW50IHR5cGUgdG8gcmVnaXN0ZXIKKyAqCisgKiBFdmVudCB0eXBlcyBhcmUgc3RvcmVkIGluIGEgaGFzaCBhbmQgdGhpcyBoYXNoIGlzIHVzZWQgdG8KKyAqIGZpbmQgYSB3YXkgdG8gcHJpbnQgYW4gZXZlbnQuIElmIHRoZSBAZXZlbnQtPnR5cGUgaXMgc2V0CisgKiB0aGVuIGl0IHdpbGwgdXNlIHRoYXQgdHlwZSwgb3RoZXJ3aXNlIGl0IHdpbGwgYXNzaWduIGEKKyAqIHR5cGUgdG8gdXNlLgorICoKKyAqIElmIHlvdSBhc3NpZ24geW91ciBvd24gdHlwZSwgcGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBhZGRlZAorICogdG8gdGhlIHRyYWNlX3R5cGUgZW51bSBpbiB0cmFjZS5oLCB0byBhdm9pZCBjb2xsaXNpb25zCisgKiB3aXRoIHRoZSBkeW5hbWljIHR5cGVzLgorICoKKyAqIFJldHVybnMgdGhlIGV2ZW50IHR5cGUgbnVtYmVyIG9yIHplcm8gb24gZXJyb3IuCisgKi8KK2ludCByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKK3sKKwl1bnNpZ25lZCBrZXk7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZ0cmFjZV9ldmVudF9tdXRleCk7CisKKwlpZiAoIWV2ZW50KSB7CisJCXJldCA9IG5leHRfZXZlbnRfdHlwZSsrOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIWV2ZW50LT50eXBlKQorCQlldmVudC0+dHlwZSA9IG5leHRfZXZlbnRfdHlwZSsrOworCWVsc2UgaWYgKGV2ZW50LT50eXBlID4gX19UUkFDRV9MQVNUX1RZUEUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTmVlZCB0byBhZGQgdHlwZSB0byB0cmFjZS5oXG4iKTsKKwkJV0FSTl9PTigxKTsKKwl9CisKKwlpZiAoZnRyYWNlX2ZpbmRfZXZlbnQoZXZlbnQtPnR5cGUpKQorCQlnb3RvIG91dDsKKworCWlmIChldmVudC0+dHJhY2UgPT0gTlVMTCkKKwkJZXZlbnQtPnRyYWNlID0gdHJhY2Vfbm9wX3ByaW50OworCWlmIChldmVudC0+cmF3ID09IE5VTEwpCisJCWV2ZW50LT5yYXcgPSB0cmFjZV9ub3BfcHJpbnQ7CisJaWYgKGV2ZW50LT5oZXggPT0gTlVMTCkKKwkJZXZlbnQtPmhleCA9IHRyYWNlX25vcF9wcmludDsKKwlpZiAoZXZlbnQtPmJpbmFyeSA9PSBOVUxMKQorCQlldmVudC0+YmluYXJ5ID0gdHJhY2Vfbm9wX3ByaW50OworCisJa2V5ID0gZXZlbnQtPnR5cGUgJiAoRVZFTlRfSEFTSFNJWkUgLSAxKTsKKworCWhsaXN0X2FkZF9oZWFkX3JjdSgmZXZlbnQtPm5vZGUsICZldmVudF9oYXNoW2tleV0pOworCisJcmV0ID0gZXZlbnQtPnR5cGU7Cisgb3V0OgorCW11dGV4X3VubG9jaygmdHJhY2VfZXZlbnRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB1bnJlZ2lzdGVyX2Z0cmFjZV9ldmVudCAtIHJlbW92ZSBhIG5vIGxvbmdlciB1c2VkIGV2ZW50CisgKiBAZXZlbnQ6IHRoZSBldmVudCB0byByZW1vdmUKKyAqLworaW50IHVucmVnaXN0ZXJfZnRyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpCit7CisJbXV0ZXhfbG9jaygmdHJhY2VfZXZlbnRfbXV0ZXgpOworCWhsaXN0X2RlbCgmZXZlbnQtPm5vZGUpOworCW11dGV4X3VubG9jaygmdHJhY2VfZXZlbnRfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdGFuZGFyZCBldmVudHMKKyAqLworCitlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9ub3BfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworLyogVFJBQ0VfRk4gKi8KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9mbl90cmFjZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgZmxhZ3MpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoKGZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVF9QQVJFTlQpICYmIGZpZWxkLT5wYXJlbnRfaXApIHsKKwkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIgPC0iKSkKKwkJCWdvdG8gcGFydGlhbDsKKwkJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsCisJCQkJICAgICAgZmllbGQtPnBhcmVudF9pcCwKKwkJCQkgICAgICBmbGFncykpCisJCQlnb3RvIHBhcnRpYWw7CisJfQorCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKSkKKwkJZ290byBwYXJ0aWFsOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworIHBhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfZm5fcmF3KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIiVseCAlbHhcbiIsCisJCQkgICAgICBmaWVsZC0+aXAsCisJCQkgICAgICBmaWVsZC0+cGFyZW50X2lwKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2ZuX2hleChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5pcCk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2ZuX2JpbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmlwKTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cGFyZW50X2lwKTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfZm5fZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfRk4sCisJLnRyYWNlCQk9IHRyYWNlX2ZuX3RyYWNlLAorCS5yYXcJCT0gdHJhY2VfZm5fcmF3LAorCS5oZXgJCT0gdHJhY2VfZm5faGV4LAorCS5iaW5hcnkJCT0gdHJhY2VfZm5fYmluLAorfTsKKworLyogVFJBQ0VfQ1RYIGFuIFRSQUNFX1dBS0UgKi8KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9jdHh3YWtlX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgICBjaGFyICpkZWxpbSkKK3sKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7CisJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworCWludCBTLCBUOworCisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOworCVMgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOworCXRyYWNlX2ZpbmRfY21kbGluZShmaWVsZC0+bmV4dF9waWQsIGNvbW0pOworCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLAorCQkJICAgICAgIiAlNWQ6JTNkOiVjICVzIFslMDNkXSAlNWQ6JTNkOiVjICVzXG4iLAorCQkJICAgICAgZmllbGQtPnByZXZfcGlkLAorCQkJICAgICAgZmllbGQtPnByZXZfcHJpbywKKwkJCSAgICAgIFMsIGRlbGltLAorCQkJICAgICAgZmllbGQtPm5leHRfY3B1LAorCQkJICAgICAgZmllbGQtPm5leHRfcGlkLAorCQkJICAgICAgZmllbGQtPm5leHRfcHJpbywKKwkJCSAgICAgIFQsIGNvbW0pKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfY3R4X3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXJldHVybiB0cmFjZV9jdHh3YWtlX3ByaW50KGl0ZXIsICI9PT4iKTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3dha2VfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgIGludCBmbGFncykKK3sKKwlyZXR1cm4gdHJhY2VfY3R4d2FrZV9wcmludChpdGVyLCAiICArIik7Cit9CisKK3N0YXRpYyBpbnQgdHJhY2VfY3R4d2FrZV9yYXcoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjaGFyIFMpCit7CisJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOworCWludCBUOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIVMpCisJCXRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CisJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7CisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlZCAlZCAlYyAlZCAlZCAlZCAlY1xuIiwKKwkJCSAgICAgIGZpZWxkLT5wcmV2X3BpZCwKKwkJCSAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCisJCQkgICAgICBTLAorCQkJICAgICAgZmllbGQtPm5leHRfY3B1LAorCQkJICAgICAgZmllbGQtPm5leHRfcGlkLAorCQkJICAgICAgZmllbGQtPm5leHRfcHJpbywKKwkJCSAgICAgIFQpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfY3R4X3JhdyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlyZXR1cm4gdHJhY2VfY3R4d2FrZV9yYXcoaXRlciwgMCk7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV93YWtlX3JhdyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlyZXR1cm4gdHJhY2VfY3R4d2FrZV9yYXcoaXRlciwgJysnKTsKK30KKworCitzdGF0aWMgaW50IHRyYWNlX2N0eHdha2VfaGV4KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY2hhciBTKQoreworCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlpbnQgVDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCFTKQorCQl0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOworCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOworCisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3BpZCk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3ByaW8pOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBTKTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfY3B1KTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcGlkKTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIFQpOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2N0eF9oZXgoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHRyYWNlX2N0eHdha2VfaGV4KGl0ZXIsIDApOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfd2FrZV9oZXgoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHRyYWNlX2N0eHdha2VfaGV4KGl0ZXIsICcrJyk7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9jdHh3YWtlX2JpbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3BpZCk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcHJpbyk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfc3RhdGUpOworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3BpZCk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcHJpbyk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfc3RhdGUpOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9jdHhfZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfQ1RYLAorCS50cmFjZQkJPSB0cmFjZV9jdHhfcHJpbnQsCisJLnJhdwkJPSB0cmFjZV9jdHhfcmF3LAorCS5oZXgJCT0gdHJhY2VfY3R4X2hleCwKKwkuYmluYXJ5CQk9IHRyYWNlX2N0eHdha2VfYmluLAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV93YWtlX2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX1dBS0UsCisJLnRyYWNlCQk9IHRyYWNlX3dha2VfcHJpbnQsCisJLnJhdwkJPSB0cmFjZV93YWtlX3JhdywKKwkuaGV4CQk9IHRyYWNlX3dha2VfaGV4LAorCS5iaW5hcnkJCT0gdHJhY2VfY3R4d2FrZV9iaW4sCit9OworCisvKiBUUkFDRV9TUEVDSUFMICovCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfc3BlY2lhbF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIjICVsZCAlbGQgJWxkXG4iLAorCQkJICAgICAgZmllbGQtPmFyZzEsCisJCQkgICAgICBmaWVsZC0+YXJnMiwKKwkJCSAgICAgIGZpZWxkLT5hcmczKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3NwZWNpYWxfaGV4KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcxKTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzIpOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMyk7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfc3BlY2lhbF9iaW4oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMSk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzIpOworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2Vfc3BlY2lhbF9ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9TUEVDSUFMLAorCS50cmFjZQkJPSB0cmFjZV9zcGVjaWFsX3ByaW50LAorCS5yYXcJCT0gdHJhY2Vfc3BlY2lhbF9wcmludCwKKwkuaGV4CQk9IHRyYWNlX3NwZWNpYWxfaGV4LAorCS5iaW5hcnkJCT0gdHJhY2Vfc3BlY2lhbF9iaW4sCit9OworCisvKiBUUkFDRV9TVEFDSyAqLworCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfc3RhY2tfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0YWNrX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlpbnQgaTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TVEFDS19FTlRSSUVTOyBpKyspIHsKKwkJaWYgKGkpIHsKKwkJCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIiA8PSAiKSkKKwkJCQlnb3RvIHBhcnRpYWw7CisKKwkJCWlmICghc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+Y2FsbGVyW2ldLCBmbGFncykpCisJCQkJZ290byBwYXJ0aWFsOworCQl9CisJCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIlxuIikpCisJCQlnb3RvIHBhcnRpYWw7CisJfQorCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworIHBhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX3N0YWNrX2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX1NUQUNLLAorCS50cmFjZQkJPSB0cmFjZV9zdGFja19wcmludCwKKwkucmF3CQk9IHRyYWNlX3NwZWNpYWxfcHJpbnQsCisJLmhleAkJPSB0cmFjZV9zcGVjaWFsX2hleCwKKwkuYmluYXJ5CQk9IHRyYWNlX3NwZWNpYWxfYmluLAorfTsKKworLyogVFJBQ0VfVVNFUl9TVEFDSyAqLworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3VzZXJfc3RhY2tfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkJaW50IGZsYWdzKQoreworCXN0cnVjdCB1c2Vyc3RhY2tfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIXNlcV9wcmludF91c2VyaXBfb2JqcyhmaWVsZCwgcywgZmxhZ3MpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9wdXRjKHMsICdcbicpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCisgcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfdXNlcl9zdGFja19ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9VU0VSX1NUQUNLLAorCS50cmFjZQkJPSB0cmFjZV91c2VyX3N0YWNrX3ByaW50LAorCS5yYXcJCT0gdHJhY2Vfc3BlY2lhbF9wcmludCwKKwkuaGV4CQk9IHRyYWNlX3NwZWNpYWxfaGV4LAorCS5iaW5hcnkJCT0gdHJhY2Vfc3BlY2lhbF9iaW4sCit9OworCisvKiBUUkFDRV9CUFJJTlQgKi8KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAordHJhY2VfYnByaW50X3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IGJwcmludF9lbnRyeSAqZmllbGQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgZmxhZ3MpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICI6ICIpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9icHJpbnRmKHMsIGZpZWxkLT5mbXQsIGZpZWxkLT5idWYpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCisgcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90Cit0cmFjZV9icHJpbnRfcmF3KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCBicHJpbnRfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIjogJWx4IDogIiwgZmllbGQtPmlwKSkKKwkJZ290byBwYXJ0aWFsOworCisJaWYgKCF0cmFjZV9zZXFfYnByaW50ZihzLCBmaWVsZC0+Zm10LCBmaWVsZC0+YnVmKSkKKwkJZ290byBwYXJ0aWFsOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworIHBhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfYnByaW50X2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX0JQUklOVCwKKwkudHJhY2UJCT0gdHJhY2VfYnByaW50X3ByaW50LAorCS5yYXcJCT0gdHJhY2VfYnByaW50X3JhdywKK307CisKKy8qIFRSQUNFX1BSSU5UICovCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfcHJpbnRfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHByaW50X2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgZmxhZ3MpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIjogJXMiLCBmaWVsZC0+YnVmKSkKKwkJZ290byBwYXJ0aWFsOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKworIHBhcnRpYWw6CisJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfcHJpbnRfcmF3KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiIyAlbHggJXMiLCBmaWVsZC0+aXAsIGZpZWxkLT5idWYpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCisgcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfcHJpbnRfZXZlbnQgPSB7CisJLnR5cGUJIAk9IFRSQUNFX1BSSU5ULAorCS50cmFjZQkJPSB0cmFjZV9wcmludF9wcmludCwKKwkucmF3CQk9IHRyYWNlX3ByaW50X3JhdywKK307CisKKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnRzW10gX19pbml0ZGF0YSA9IHsKKwkmdHJhY2VfZm5fZXZlbnQsCisJJnRyYWNlX2N0eF9ldmVudCwKKwkmdHJhY2Vfd2FrZV9ldmVudCwKKwkmdHJhY2Vfc3BlY2lhbF9ldmVudCwKKwkmdHJhY2Vfc3RhY2tfZXZlbnQsCisJJnRyYWNlX3VzZXJfc3RhY2tfZXZlbnQsCisJJnRyYWNlX2JwcmludF9ldmVudCwKKwkmdHJhY2VfcHJpbnRfZXZlbnQsCisJTlVMTAorfTsKKworX19pbml0IHN0YXRpYyBpbnQgaW5pdF9ldmVudHModm9pZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBldmVudHNbaV07IGkrKykgeworCQlldmVudCA9IGV2ZW50c1tpXTsKKworCQlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoZXZlbnQpOworCQlpZiAoIXJldCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZXZlbnQgJWQgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iLAorCQkJICAgICAgIGV2ZW50LT50eXBlKTsKKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKGluaXRfZXZlbnRzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGJkZTM5Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5oCkBAIC0wLDAgKzEsNzEgQEAKKyNpZm5kZWYgX19UUkFDRV9FVkVOVFNfSAorI2RlZmluZSBfX1RSQUNFX0VWRU5UU19ICisKKyNpbmNsdWRlICJ0cmFjZS5oIgorCit0eXBlZGVmIGVudW0gcHJpbnRfbGluZV90ICgqdHJhY2VfcHJpbnRfZnVuYykoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICAgICBpbnQgZmxhZ3MpOworCitzdHJ1Y3QgdHJhY2VfZXZlbnQgeworCXN0cnVjdCBobGlzdF9ub2RlCW5vZGU7CisJaW50CQkJdHlwZTsKKwl0cmFjZV9wcmludF9mdW5jCXRyYWNlOworCXRyYWNlX3ByaW50X2Z1bmMJcmF3OworCXRyYWNlX3ByaW50X2Z1bmMJaGV4OworCXRyYWNlX3ByaW50X2Z1bmMJYmluYXJ5OworfTsKKworZXh0ZXJuIGVudW0gcHJpbnRfbGluZV90Cit0cmFjZV9wcmludF9icHJpbnRrX21zZ19vbmx5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CitleHRlcm4gZW51bSBwcmludF9saW5lX3QKK3RyYWNlX3ByaW50X3ByaW50a19tc2dfb25seShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOworCitleHRlcm4gaW50IHRyYWNlX3NlcV9wcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludAordHJhY2Vfc2VxX2JwcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCBjb25zdCB1MzIgKmJpbmFyeSk7CitleHRlcm4gaW50CitzZXFfcHJpbnRfaXBfc3ltKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGxvbmcgaXAsCisJCXVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKTsKK2V4dGVybiBzc2l6ZV90IHRyYWNlX3NlcV90b191c2VyKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNoYXIgX191c2VyICp1YnVmLAorCQkJCSBzaXplX3QgY250KTsKK2V4dGVybiBpbnQgdHJhY2Vfc2VxX3B1dHMoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqc3RyKTsKK2V4dGVybiBpbnQgdHJhY2Vfc2VxX3B1dGMoc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgY2hhciBjKTsKK2V4dGVybiBpbnQgdHJhY2Vfc2VxX3B1dG1lbShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pOworZXh0ZXJuIGludCB0cmFjZV9zZXFfcHV0bWVtX2hleChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCB2b2lkICptZW0sCisJCQkJc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCAqdHJhY2Vfc2VxX3Jlc2VydmUoc3RydWN0IHRyYWNlX3NlcSAqcywgc2l6ZV90IGxlbik7CitleHRlcm4gaW50IHRyYWNlX3NlcV9wYXRoKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCBwYXRoICpwYXRoKTsKK2V4dGVybiBpbnQgc2VxX3ByaW50X3VzZXJpcF9vYmpzKGNvbnN0IHN0cnVjdCB1c2Vyc3RhY2tfZW50cnkgKmVudHJ5LAorCQkJCSBzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBsb25nIHN5bV9mbGFncyk7CitleHRlcm4gaW50IHNlcV9wcmludF91c2VyX2lwKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHN5bV9mbGFncyk7CisKK2V4dGVybiBpbnQgdHJhY2VfcHJpbnRfY29udGV4dChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOworZXh0ZXJuIGludCB0cmFjZV9wcmludF9sYXRfY29udGV4dChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOworCitleHRlcm4gc3RydWN0IHRyYWNlX2V2ZW50ICpmdHJhY2VfZmluZF9ldmVudChpbnQgdHlwZSk7CitleHRlcm4gaW50IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudChzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9mdHJhY2VfZXZlbnQoc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCk7CisKK2V4dGVybiBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9ub3BfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgaW50IGZsYWdzKTsKKworI2RlZmluZSBNQVhfTUVNSEVYX0JZVEVTCTgKKyNkZWZpbmUgSEVYX0NIQVJTCQkoTUFYX01FTUhFWF9CWVRFUyoyICsgMSkKKworI2RlZmluZSBTRVFfUFVUX0ZJRUxEX1JFVChzLCB4KQkJCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoIXRyYWNlX3NlcV9wdXRtZW0ocywgJih4KSwgc2l6ZW9mKHgpKSkJXAorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCB4KQkJCVwKK2RvIHsJCQkJCQkJXAorCUJVSUxEX0JVR19PTihzaXplb2YoeCkgPiBNQVhfTUVNSEVYX0JZVEVTKTsJXAorCWlmICghdHJhY2Vfc2VxX3B1dG1lbV9oZXgocywgJih4KSwgc2l6ZW9mKHgpKSkJXAorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3Bvd2VyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYwppbmRleCA3YmRhMjQ4Li5iYWU3OTFlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYwpAQCAtMTEsMTUgKzExLDExMyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDx0cmFjZS9wb3dlci5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgogCiBzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpwb3dlcl90cmFjZTsKIHN0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0cmFjZV9wb3dlcl9lbmFibGVkOwogCitzdGF0aWMgdm9pZCBwcm9iZV9wb3dlcl9zdGFydChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCQl1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJaWYgKCF0cmFjZV9wb3dlcl9lbmFibGVkKQorCQlyZXR1cm47CisKKwltZW1zZXQoaXQsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfdHJhY2UpKTsKKwlpdC0+c3RhdGUgPSBsZXZlbDsKKwlpdC0+dHlwZSA9IHR5cGU7CisJaXQtPnN0YW1wID0ga3RpbWVfZ2V0KCk7Cit9CisKKworc3RhdGljIHZvaWQgcHJvYmVfcG93ZXJfZW5kKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdHJhY2VfcG93ZXIgKmVudHJ5OworCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IHBvd2VyX3RyYWNlOworCisJaWYgKCF0cmFjZV9wb3dlcl9lbmFibGVkKQorCQlyZXR1cm47CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpdC0+ZW5kID0ga3RpbWVfZ2V0KCk7CisJZGF0YSA9IHRyLT5kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1BPV0VSLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dDsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5zdGF0ZV9kYXRhID0gKml0OworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7Cisgb3V0OgorCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2JlX3Bvd2VyX21hcmsoc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJdW5zaWduZWQgaW50IGxldmVsKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKKworCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJbWVtc2V0KGl0LCAwLCBzaXplb2Yoc3RydWN0IHBvd2VyX3RyYWNlKSk7CisJaXQtPnN0YXRlID0gbGV2ZWw7CisJaXQtPnR5cGUgPSB0eXBlOworCWl0LT5zdGFtcCA9IGt0aW1lX2dldCgpOworCXByZWVtcHRfZGlzYWJsZSgpOworCWl0LT5lbmQgPSBpdC0+c3RhbXA7CisJZGF0YSA9IHRyLT5kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1BPV0VSLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKKwlpZiAoIWV2ZW50KQorCQlnb3RvIG91dDsKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5zdGF0ZV9kYXRhID0gKml0OworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7Cisgb3V0OgorCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbnQgdHJhY2luZ19wb3dlcl9yZWdpc3Rlcih2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9wb3dlcl9zdGFydChwcm9iZV9wb3dlcl9zdGFydCk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJwb3dlciB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKKwkJCSIgcHJvYmUgdG8gdHJhY2VfcG93ZXJfc3RhcnRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9wb3dlcl9lbmQocHJvYmVfcG93ZXJfZW5kKTsKKwlpZiAocmV0KSB7CisJCXByX2luZm8oInBvd2VyIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgorCQkJIiBwcm9iZSB0byB0cmFjZV9wb3dlcl9lbmRcbiIpOworCQlnb3RvIGZhaWxfc3RhcnQ7CisJfQorCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3Bvd2VyX21hcmsocHJvYmVfcG93ZXJfbWFyayk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJwb3dlciB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKKwkJCSIgcHJvYmUgdG8gdHJhY2VfcG93ZXJfbWFya1xuIik7CisJCWdvdG8gZmFpbF9lbmQ7CisJfQorCXJldHVybiByZXQ7CitmYWlsX2VuZDoKKwl1bnJlZ2lzdGVyX3RyYWNlX3Bvd2VyX2VuZChwcm9iZV9wb3dlcl9lbmQpOworZmFpbF9zdGFydDoKKwl1bnJlZ2lzdGVyX3RyYWNlX3Bvd2VyX3N0YXJ0KHByb2JlX3Bvd2VyX3N0YXJ0KTsKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgdm9pZCBzdGFydF9wb3dlcl90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewpAQCAtMzEsNiArMTI5LDE0IEBACiAJdHJhY2VfcG93ZXJfZW5hYmxlZCA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkIHBvd2VyX3RyYWNlX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJdHJhY2VfcG93ZXJfZW5hYmxlZCA9IDA7CisJdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9zdGFydChwcm9iZV9wb3dlcl9zdGFydCk7CisJdW5yZWdpc3Rlcl90cmFjZV9wb3dlcl9lbmQocHJvYmVfcG93ZXJfZW5kKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3Bvd2VyX21hcmsocHJvYmVfcG93ZXJfbWFyayk7Cit9CisKIAogc3RhdGljIGludCBwb3dlcl90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CkBAIC0zOCw2ICsxNDQsNyBAQAogCXBvd2VyX3RyYWNlID0gdHI7CiAKIAl0cmFjZV9wb3dlcl9lbmFibGVkID0gMTsKKwl0cmFjaW5nX3Bvd2VyX3JlZ2lzdGVyKCk7CiAKIAlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcG9zc2libGVfbWFzaykKIAkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKQEAgLTg1LDcgKzE5Miw3IEBACiAJLmluaXQJCT0gcG93ZXJfdHJhY2VfaW5pdCwKIAkuc3RhcnQJCT0gc3RhcnRfcG93ZXJfdHJhY2UsCiAJLnN0b3AJCT0gc3RvcF9wb3dlcl90cmFjZSwKLQkucmVzZXQJCT0gc3RvcF9wb3dlcl90cmFjZSwKKwkucmVzZXQJCT0gcG93ZXJfdHJhY2VfcmVzZXQsCiAJLnByaW50X2xpbmUJPSBwb3dlcl9wcmludF9saW5lLAogfTsKIApAQCAtOTQsODYgKzIwMSwzIEBACiAJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigmcG93ZXJfdHJhY2VyKTsKIH0KIGRldmljZV9pbml0Y2FsbChpbml0X3Bvd2VyX3RyYWNlKTsKLQotdm9pZCB0cmFjZV9wb3dlcl9zdGFydChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCSB1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0JaWYgKCF0cmFjZV9wb3dlcl9lbmFibGVkKQotCQlyZXR1cm47Ci0KLQltZW1zZXQoaXQsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfdHJhY2UpKTsKLQlpdC0+c3RhdGUgPSBsZXZlbDsKLQlpdC0+dHlwZSA9IHR5cGU7Ci0JaXQtPnN0YW1wID0ga3RpbWVfZ2V0KCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9wb3dlcl9zdGFydCk7Ci0KLQotdm9pZCB0cmFjZV9wb3dlcl9lbmQoc3RydWN0IHBvd2VyX3RyYWNlICppdCkKLXsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCB0cmFjZV9wb3dlciAqZW50cnk7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gcG93ZXJfdHJhY2U7Ci0KLQlpZiAoIXRyYWNlX3Bvd2VyX2VuYWJsZWQpCi0JCXJldHVybjsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWl0LT5lbmQgPSBrdGltZV9nZXQoKTsKLQlkYXRhID0gdHItPmRhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7Ci0JaWYgKCFldmVudCkKLQkJZ290byBvdXQ7Ci0JZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCAwKTsKLQllbnRyeS0+ZW50LnR5cGUgPSBUUkFDRV9QT1dFUjsKLQllbnRyeS0+c3RhdGVfZGF0YSA9ICppdDsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCi0JdHJhY2Vfd2FrZV91cCgpOwotCi0gb3V0OgotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9wb3dlcl9lbmQpOwotCi12b2lkIHRyYWNlX3Bvd2VyX21hcmsoc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsCi0JCQkgdW5zaWduZWQgaW50IGxldmVsKQotewotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKLQotCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JbWVtc2V0KGl0LCAwLCBzaXplb2Yoc3RydWN0IHBvd2VyX3RyYWNlKSk7Ci0JaXQtPnN0YXRlID0gbGV2ZWw7Ci0JaXQtPnR5cGUgPSB0eXBlOwotCWl0LT5zdGFtcCA9IGt0aW1lX2dldCgpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCWl0LT5lbmQgPSBpdC0+c3RhbXA7Ci0JZGF0YSA9IHRyLT5kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0KLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOwotCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0OwotCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgMCk7Ci0JZW50cnktPmVudC50eXBlID0gVFJBQ0VfUE9XRVI7Ci0JZW50cnktPnN0YXRlX2RhdGEgPSAqaXQ7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKLQotIG91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfcG93ZXJfbWFyayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4MTU1NgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYwpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIHRyYWNlIGJpbmFyeSBwcmludGsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTGFpIEppYW5nc2hhbiA8bGFpanNAY24uZnVqaXRzdS5jb20+CisgKgorICovCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKyNpbmNsdWRlICJ0cmFjZS5oIgorCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKworLyoKKyAqIG1vZHVsZXMgdHJhY2VfcHJpbnRrKCkncyBmb3JtYXRzIGFyZSBhdXRvc2F2ZWQgaW4gc3RydWN0IHRyYWNlX2JwcmludGtfZm10CisgKiB3aGljaCBhcmUgcXVldWVkIG9uIHRyYWNlX2JwcmludGtfZm10X2xpc3QuCisgKi8KK3N0YXRpYyBMSVNUX0hFQUQodHJhY2VfYnByaW50a19mbXRfbGlzdCk7CisKKy8qIHNlcmlhbGl6ZSBhY2Nlc3NlcyB0byB0cmFjZV9icHJpbnRrX2ZtdF9saXN0ICovCitzdGF0aWMgREVGSU5FX01VVEVYKGJ0cmFjZV9tdXRleCk7CisKK3N0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNoYXIgZm10WzBdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdHJhY2VfYnByaW50a19mbXQgKmxvb2t1cF9mb3JtYXQoY29uc3QgY2hhciAqZm10KQoreworCXN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCAqcG9zOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmdHJhY2VfYnByaW50a19mbXRfbGlzdCwgbGlzdCkgeworCQlpZiAoIXN0cmNtcChwb3MtPmZtdCwgZm10KSkKKwkJCXJldHVybiBwb3M7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMKK3ZvaWQgaG9sZF9tb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXQoY29uc3QgY2hhciAqKnN0YXJ0LCBjb25zdCBjaGFyICoqZW5kKQoreworCWNvbnN0IGNoYXIgKippdGVyOworCisJbXV0ZXhfbG9jaygmYnRyYWNlX211dGV4KTsKKwlmb3IgKGl0ZXIgPSBzdGFydDsgaXRlciA8IGVuZDsgaXRlcisrKSB7CisJCXN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCAqdGJfZm10ID0gbG9va3VwX2Zvcm1hdCgqaXRlcik7CisJCWlmICh0Yl9mbXQpIHsKKwkJCSppdGVyID0gdGJfZm10LT5mbXQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCXRiX2ZtdCA9IGttYWxsb2Mob2Zmc2V0b2Yoc3RydWN0IHRyYWNlX2JwcmludGtfZm10LCBmbXQpCisJCQkJKyBzdHJsZW4oKml0ZXIpICsgMSwgR0ZQX0tFUk5FTCk7CisJCWlmICh0Yl9mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnRiX2ZtdC0+bGlzdCwgJnRyYWNlX2JwcmludGtfZm10X2xpc3QpOworCQkJc3RyY3B5KHRiX2ZtdC0+Zm10LCAqaXRlcik7CisJCQkqaXRlciA9IHRiX2ZtdC0+Zm10OworCQl9IGVsc2UKKwkJCSppdGVyID0gTlVMTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZidHJhY2VfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IG1vZHVsZV90cmFjZV9icHJpbnRrX2Zvcm1hdF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbW9kdWxlICptb2QgPSBkYXRhOworCWlmIChtb2QtPm51bV90cmFjZV9icHJpbnRrX2ZtdCkgeworCQljb25zdCBjaGFyICoqc3RhcnQgPSBtb2QtPnRyYWNlX2JwcmludGtfZm10X3N0YXJ0OworCQljb25zdCBjaGFyICoqZW5kID0gc3RhcnQgKyBtb2QtPm51bV90cmFjZV9icHJpbnRrX2ZtdDsKKworCQlpZiAodmFsID09IE1PRFVMRV9TVEFURV9DT01JTkcpCisJCQlob2xkX21vZHVsZV90cmFjZV9icHJpbnRrX2Zvcm1hdChzdGFydCwgZW5kKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfTU9EVUxFUyAqLworX19pbml0IHN0YXRpYyBpbnQKK21vZHVsZV90cmFjZV9icHJpbnRrX2Zvcm1hdF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLworCisKK19faW5pdGRhdGFfb3JfbW9kdWxlIHN0YXRpYworc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1vZHVsZV90cmFjZV9icHJpbnRrX2Zvcm1hdF9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG1vZHVsZV90cmFjZV9icHJpbnRrX2Zvcm1hdF9ub3RpZnksCit9OworCitpbnQgX190cmFjZV9icHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorIHsKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwlpZiAodW5saWtlbHkoIWZtdCkpCisJCXJldHVybiAwOworCisJaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5USykpCisJCXJldHVybiAwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdHJhY2VfdmJwcmludGsoaXAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fdHJhY2VfYnByaW50ayk7CisKK2ludCBfX2Z0cmFjZV92YnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCisgeworCWlmICh1bmxpa2VseSghZm10KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdHJhY2VfdmJwcmludGsoaXAsIGZtdCwgYXApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19mdHJhY2VfdmJwcmludGspOworCitpbnQgX190cmFjZV9wcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCisJaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5USykpCisJCXJldHVybiAwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdHJhY2VfdnByaW50ayhpcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoX190cmFjZV9wcmludGspOworCitpbnQgX19mdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJaWYgKCEodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5USykpCisJCXJldHVybiAwOworCisJcmV0dXJuIHRyYWNlX3ZwcmludGsoaXAsIGZtdCwgYXApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19mdHJhY2VfdnByaW50ayk7CisKK3N0YXRpYyB2b2lkICoKK3RfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCWNvbnN0IGNoYXIgKipmbXQgPSBtLT5wcml2YXRlOworCWNvbnN0IGNoYXIgKipuZXh0ID0gZm10OworCisJKCpwb3MpKys7CisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpZm10ID49ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9fX3RyYWNlX2JwcmludGtfZm10KQorCQlyZXR1cm4gTlVMTDsKKworCW5leHQgPSBmbXQ7CisJbS0+cHJpdmF0ZSA9ICsrbmV4dDsKKworCXJldHVybiBmbXQ7Cit9CisKK3N0YXRpYyB2b2lkICp0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuIHRfbmV4dChtLCBOVUxMLCBwb3MpOworfQorCitzdGF0aWMgaW50IHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJY29uc3QgY2hhciAqKmZtdCA9IHY7CisJY29uc3QgY2hhciAqc3RyID0gKmZtdDsKKwlpbnQgaTsKKworCXNlcV9wcmludGYobSwgIjB4JWx4IDogXCIiLCAodW5zaWduZWQgbG9uZylmbXQpOworCisJLyoKKwkgKiBUYWJzIGFuZCBuZXcgbGluZXMgbmVlZCB0byBiZSBjb252ZXJ0ZWQuCisJICovCisJZm9yIChpID0gMDsgc3RyW2ldOyBpKyspIHsKKwkJc3dpdGNoIChzdHJbaV0pIHsKKwkJY2FzZSAnXG4nOgorCQkJc2VxX3B1dHMobSwgIlxcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1x0JzoKKwkJCXNlcV9wdXRzKG0sICJcXHQiKTsKKwkJCWJyZWFrOworCQljYXNlICdcXCc6CisJCQlzZXFfcHV0cyhtLCAiXFwiKTsKKwkJCWJyZWFrOworCQljYXNlICciJzoKKwkJCXNlcV9wdXRzKG0sICJcXFwiIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNlcV9wdXRjKG0sIHN0cltpXSk7CisJCX0KKwl9CisJc2VxX3B1dHMobSwgIlwiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNob3dfZm9ybWF0X3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gdF9zdGFydCwKKwkubmV4dCA9IHRfbmV4dCwKKwkuc2hvdyA9IHRfc2hvdywKKwkuc3RvcCA9IHRfc3RvcCwKK307CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV9mb3JtYXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldDsKKworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZzaG93X2Zvcm1hdF9zZXFfb3BzKTsKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkJbS0+cHJpdmF0ZSA9IF9fc3RhcnRfX190cmFjZV9icHJpbnRrX2ZtdDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2Zvcm1hdHNfZm9wcyA9IHsKKwkub3BlbiA9IGZ0cmFjZV9mb3JtYXRzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgX19pbml0IGludCBpbml0X3RyYWNlX3ByaW50a19mdW5jdGlvbl9leHBvcnQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKworCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCWlmICghZF90cmFjZXIpCisJCXJldHVybiAwOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwcmludGtfZm9ybWF0cyIsIDA0NDQsIGRfdHJhY2VyLAorCQkJCSAgICBOVUxMLCAmZnRyYWNlX2Zvcm1hdHNfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICIncHJpbnRrX2Zvcm1hdHMnIGVudHJ5XG4iKTsKKworCXJldHVybiAwOworfQorCitmc19pbml0Y2FsbChpbml0X3RyYWNlX3ByaW50a19mdW5jdGlvbl9leHBvcnQpOworCitzdGF0aWMgX19pbml0IGludCBpbml0X3RyYWNlX3ByaW50ayh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoJm1vZHVsZV90cmFjZV9icHJpbnRrX2Zvcm1hdF9uYik7Cit9CisKK2Vhcmx5X2luaXRjYWxsKGluaXRfdHJhY2VfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYwppbmRleCBkZjE3NWNiLi5kZTM1ZjIwIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jCkBAIC0xOCw2ICsxOCw3IEBACiBzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkJdHJhY2VyX2VuYWJsZWQ7CiBzdGF0aWMgaW50CQkJc2NoZWRfcmVmOwogc3RhdGljIERFRklORV9NVVRFWChzY2hlZF9yZWdpc3Rlcl9tdXRleCk7CitzdGF0aWMgaW50CQkJc2NoZWRfc3RvcHBlZDsKIAogc3RhdGljIHZvaWQKIHByb2JlX3NjaGVkX3N3aXRjaChzdHJ1Y3QgcnEgKl9fcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKQEAgLTI4LDcgKzI5LDcgQEAKIAlpbnQgY3B1OwogCWludCBwYzsKIAotCWlmICghc2NoZWRfcmVmKQorCWlmICghc2NoZWRfcmVmIHx8IHNjaGVkX3N0b3BwZWQpCiAJCXJldHVybjsKIAogCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUocHJldik7CkBAIC00Myw3ICs0NCw3IEBACiAJZGF0YSA9IGN0eF90cmFjZS0+ZGF0YVtjcHVdOwogCiAJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCi0JCXRyYWNpbmdfc2NoZWRfc3dpdGNoX3RyYWNlKGN0eF90cmFjZSwgZGF0YSwgcHJldiwgbmV4dCwgZmxhZ3MsIHBjKTsKKwkJdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2UoY3R4X3RyYWNlLCBwcmV2LCBuZXh0LCBmbGFncywgcGMpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtNjYsNyArNjcsNyBAQAogCWRhdGEgPSBjdHhfdHJhY2UtPmRhdGFbY3B1XTsKIAogCWlmIChsaWtlbHkoIWF0b21pY19yZWFkKCZkYXRhLT5kaXNhYmxlZCkpKQotCQl0cmFjaW5nX3NjaGVkX3dha2V1cF90cmFjZShjdHhfdHJhY2UsIGRhdGEsIHdha2VlLCBjdXJyZW50LAorCQl0cmFjaW5nX3NjaGVkX3dha2V1cF90cmFjZShjdHhfdHJhY2UsIHdha2VlLCBjdXJyZW50LAogCQkJCQkgICBmbGFncywgcGMpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtOTMsNyArOTQsNyBAQAogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChwcm9iZV9zY2hlZF9zd2l0Y2gpOwogCWlmIChyZXQpIHsKIAkJcHJfaW5mbygic2NoZWQgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCi0JCQkiIHByb2JlIHRvIGtlcm5lbF9zY2hlZF9zY2hlZHVsZVxuIik7CisJCQkiIHByb2JlIHRvIGtlcm5lbF9zY2hlZF9zd2l0Y2hcbiIpOwogCQlnb3RvIGZhaWxfZGVwcm9iZV93YWtlX25ldzsKIAl9CiAKQEAgLTE4NSwxMiArMTg2LDYgQEAKIAljdHhfdHJhY2UgPSB0cjsKIH0KIAotc3RhdGljIHZvaWQgc3RhcnRfc2NoZWRfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKLQl0cmFjaW5nX3N0YXJ0X3NjaGVkX3N3aXRjaF9yZWNvcmQoKTsKLX0KLQogc3RhdGljIHZvaWQgc3RvcF9zY2hlZF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNpbmdfc3RvcF9zY2hlZF9zd2l0Y2hfcmVjb3JkKCk7CkBAIC0xOTksNyArMTk0LDggQEAKIHN0YXRpYyBpbnQgc2NoZWRfc3dpdGNoX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAljdHhfdHJhY2UgPSB0cjsKLQlzdGFydF9zY2hlZF90cmFjZSh0cik7CisJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CisJdHJhY2luZ19zdGFydF9zY2hlZF9zd2l0Y2hfcmVjb3JkKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMSwxMyArMjA3LDEyIEBACiAKIHN0YXRpYyB2b2lkIHNjaGVkX3N3aXRjaF90cmFjZV9zdGFydChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwotCXRyYWNpbmdfc3RhcnRfc2NoZWRfc3dpdGNoKCk7CisJc2NoZWRfc3RvcHBlZCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNjaGVkX3N3aXRjaF90cmFjZV9zdG9wKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JdHJhY2luZ19zdG9wX3NjaGVkX3N3aXRjaCgpOworCXNjaGVkX3N0b3BwZWQgPSAxOwogfQogCiBzdGF0aWMgc3RydWN0IHRyYWNlciBzY2hlZF9zd2l0Y2hfdHJhY2UgX19yZWFkX21vc3RseSA9CkBAIC0yMjcsNiArMjIyLDcgQEAKIAkucmVzZXQJCT0gc2NoZWRfc3dpdGNoX3RyYWNlX3Jlc2V0LAogCS5zdGFydAkJPSBzY2hlZF9zd2l0Y2hfdHJhY2Vfc3RhcnQsCiAJLnN0b3AJCT0gc2NoZWRfc3dpdGNoX3RyYWNlX3N0b3AsCisJLndhaXRfcGlwZQk9IHBvbGxfd2FpdF9waXBlLAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3NjaGVkX3N3aXRjaCwKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCmluZGV4IDQyYWUxZTcuLjNjNWFkNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKQEAgLTI1LDEyICsyNSwxNSBAQAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdAkqd2FrZXVwX3Rhc2s7CiBzdGF0aWMgaW50CQkJd2FrZXVwX2NwdTsKIHN0YXRpYyB1bnNpZ25lZAkJCXdha2V1cF9wcmlvID0gLTE7CitzdGF0aWMgaW50CQkJd2FrZXVwX3J0OwogCiBzdGF0aWMgcmF3X3NwaW5sb2NrX3Qgd2FrZXVwX2xvY2sgPQogCShyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIHN0YXRpYyB2b2lkIF9fd2FrZXVwX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogCitzdGF0aWMgaW50IHNhdmVfbGF0X2ZsYWc7CisKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCiAvKgogICogaXJxc29mZiB1c2VzIGl0cyBvd24gdHJhY2VyIGZ1bmN0aW9uIHRvIGtlZXAgdGhlIG92ZXJoZWFkIGRvd246CkBAIC03MSw3ICs3NCw3IEBACiAJaWYgKHRhc2tfY3B1KHdha2V1cF90YXNrKSAhPSBjcHUpCiAJCWdvdG8gdW5sb2NrOwogCi0JdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CisJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CiAKICB1bmxvY2s6CiAJX19yYXdfc3Bpbl91bmxvY2soJndha2V1cF9sb2NrKTsKQEAgLTE1MSw3ICsxNTQsOCBAQAogCWlmICh1bmxpa2VseSghdHJhY2VyX2VuYWJsZWQgfHwgbmV4dCAhPSB3YWtldXBfdGFzaykpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXRyYWNlX2Z1bmN0aW9uKHdha2V1cF90cmFjZSwgZGF0YSwgQ0FMTEVSX0FERFIxLCBDQUxMRVJfQUREUjIsIGZsYWdzLCBwYyk7CisJdHJhY2VfZnVuY3Rpb24od2FrZXVwX3RyYWNlLCBDQUxMRVJfQUREUjEsIENBTExFUl9BRERSMiwgZmxhZ3MsIHBjKTsKKwl0cmFjaW5nX3NjaGVkX3N3aXRjaF90cmFjZSh3YWtldXBfdHJhY2UsIHByZXYsIG5leHQsIGZsYWdzLCBwYyk7CiAKIAkvKgogCSAqIHVzZWNzIGNvbnZlcnNpb24gaXMgc2xvdyBzbyB3ZSB0cnkgdG8gZGVsYXkgdGhlIGNvbnZlcnNpb24KQEAgLTE4MiwxMyArMTg2LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9fd2FrZXVwX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlkYXRhID0gdHItPmRhdGFbY3B1XTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQogCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOwotCX0KIAogCXdha2V1cF9jcHUgPSAtMTsKIAl3YWtldXBfcHJpbyA9IC0xOwpAQCAtMjEzLDYgKzIxNCw3IEBACiBzdGF0aWMgdm9pZAogcHJvYmVfd2FrZXVwKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN1Y2Nlc3MpCiB7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBkaXNhYmxlZDsKQEAgLTIyNCw3ICsyMjYsNyBAQAogCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUocCk7CiAJdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsKIAotCWlmIChsaWtlbHkoIXJ0X3Rhc2socCkpIHx8CisJaWYgKCh3YWtldXBfcnQgJiYgIXJ0X3Rhc2socCkpIHx8CiAJCQlwLT5wcmlvID49IHdha2V1cF9wcmlvIHx8CiAJCQlwLT5wcmlvID49IGN1cnJlbnQtPnByaW8pCiAJCXJldHVybjsKQEAgLTI1Miw5ICsyNTQsMTAgQEAKIAogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCi0Jd2FrZXVwX3RyYWNlLT5kYXRhW3dha2V1cF9jcHVdLT5wcmVlbXB0X3RpbWVzdGFtcCA9IGZ0cmFjZV9ub3coY3B1KTsKLQl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIHdha2V1cF90cmFjZS0+ZGF0YVt3YWtldXBfY3B1XSwKLQkJICAgICAgIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOworCWRhdGEgPSB3YWtldXBfdHJhY2UtPmRhdGFbd2FrZXVwX2NwdV07CisJZGF0YS0+cHJlZW1wdF90aW1lc3RhbXAgPSBmdHJhY2Vfbm93KGNwdSk7CisJdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2Uod2FrZXVwX3RyYWNlLCBwLCBjdXJyZW50LCBmbGFncywgcGMpOworCXRyYWNlX2Z1bmN0aW9uKHdha2V1cF90cmFjZSwgQ0FMTEVSX0FERFIxLCBDQUxMRVJfQUREUjIsIGZsYWdzLCBwYyk7CiAKIG91dF9sb2NrZWQ6CiAJX19yYXdfc3Bpbl91bmxvY2soJndha2V1cF9sb2NrKTsKQEAgLTI2MiwxMiArMjY1LDYgQEAKIAlhdG9taWNfZGVjKCZ3YWtldXBfdHJhY2UtPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwogfQogCi0vKgotICogc2F2ZV90cmFjZXJfZW5hYmxlZCBpcyB1c2VkIHRvIHNhdmUgdGhlIHN0YXRlIG9mIHRoZSB0cmFjZXJfZW5hYmxlZAotICogdmFyaWFibGUgd2hlbiB3ZSBkaXNhYmxlIGl0IHdoZW4gd2Ugb3BlbiBhIHRyYWNlIG91dHB1dCBmaWxlLgotICovCi1zdGF0aWMgaW50IHNhdmVfdHJhY2VyX2VuYWJsZWQ7Ci0KIHN0YXRpYyB2b2lkIHN0YXJ0X3dha2V1cF90cmFjZXIoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAlpbnQgcmV0OwpAQCAtMjg5LDcgKzI4Niw3IEBACiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKHByb2JlX3dha2V1cF9zY2hlZF9zd2l0Y2gpOwogCWlmIChyZXQpIHsKIAkJcHJfaW5mbygic2NoZWQgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCi0JCQkiIHByb2JlIHRvIGtlcm5lbF9zY2hlZF9zY2hlZHVsZVxuIik7CisJCQkiIHByb2JlIHRvIGtlcm5lbF9zY2hlZF9zd2l0Y2hcbiIpOwogCQlnb3RvIGZhaWxfZGVwcm9iZV93YWtlX25ldzsKIAl9CiAKQEAgLTMwNiwxMyArMzAzLDEwIEBACiAKIAlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CiAKLQlpZiAodHJhY2luZ19pc19lbmFibGVkKCkpIHsKKwlpZiAodHJhY2luZ19pc19lbmFibGVkKCkpCiAJCXRyYWNlcl9lbmFibGVkID0gMTsKLQkJc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDE7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXRyYWNlcl9lbmFibGVkID0gMDsKLQkJc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDA7Ci0JfQogCiAJcmV0dXJuOwogZmFpbF9kZXByb2JlX3dha2VfbmV3OgpAQCAtMzI0LDU0ICszMTgsNTQgQEAKIHN0YXRpYyB2b2lkIHN0b3Bfd2FrZXVwX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNlcl9lbmFibGVkID0gMDsKLQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMDsKIAl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChwcm9iZV93YWtldXBfc2NoZWRfc3dpdGNoKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcocHJvYmVfd2FrZXVwKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cChwcm9iZV93YWtldXApOwogfQogCi1zdGF0aWMgaW50IHdha2V1cF90cmFjZXJfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQorc3RhdGljIGludCBfX3dha2V1cF90cmFjZXJfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogeworCXNhdmVfbGF0X2ZsYWcgPSB0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfTEFURU5DWV9GTVQ7CisJdHJhY2VfZmxhZ3MgfD0gVFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVDsKKwogCXRyYWNpbmdfbWF4X2xhdGVuY3kgPSAwOwogCXdha2V1cF90cmFjZSA9IHRyOwogCXN0YXJ0X3dha2V1cF90cmFjZXIodHIpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHdha2V1cF90cmFjZXJfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCXdha2V1cF9ydCA9IDA7CisJcmV0dXJuIF9fd2FrZXVwX3RyYWNlcl9pbml0KHRyKTsKK30KKworc3RhdGljIGludCB3YWtldXBfcnRfdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwl3YWtldXBfcnQgPSAxOworCXJldHVybiBfX3dha2V1cF90cmFjZXJfaW5pdCh0cik7Cit9CisKIHN0YXRpYyB2b2lkIHdha2V1cF90cmFjZXJfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAlzdG9wX3dha2V1cF90cmFjZXIodHIpOwogCS8qIG1ha2Ugc3VyZSB3ZSBwdXQgYmFjayBhbnkgdGFza3Mgd2UgYXJlIHRyYWNpbmcgKi8KIAl3YWtldXBfcmVzZXQodHIpOworCisJaWYgKCFzYXZlX2xhdF9mbGFnKQorCQl0cmFjZV9mbGFncyAmPSB+VFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVDsKIH0KIAogc3RhdGljIHZvaWQgd2FrZXVwX3RyYWNlcl9zdGFydChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXdha2V1cF9yZXNldCh0cik7CiAJdHJhY2VyX2VuYWJsZWQgPSAxOwotCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAxOwogfQogCiBzdGF0aWMgdm9pZCB3YWtldXBfdHJhY2VyX3N0b3Aoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjZXJfZW5hYmxlZCA9IDA7Ci0Jc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdha2V1cF90cmFjZXJfb3BlbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0JLyogc3RvcCB0aGUgdHJhY2Ugd2hpbGUgZHVtcGluZyAqLwotCXRyYWNlcl9lbmFibGVkID0gMDsKLX0KLQotc3RhdGljIHZvaWQgd2FrZXVwX3RyYWNlcl9jbG9zZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0JLyogZm9yZ2V0IGFib3V0IGFueSBwcm9jZXNzZXMgd2Ugd2VyZSByZWNvcmRpbmcgKi8KLQlpZiAoc2F2ZV90cmFjZXJfZW5hYmxlZCkgewotCQl3YWtldXBfcmVzZXQoaXRlci0+dHIpOwotCQl0cmFjZXJfZW5hYmxlZCA9IDE7Ci0JfQogfQogCiBzdGF0aWMgc3RydWN0IHRyYWNlciB3YWtldXBfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPQpAQCAtMzgxLDggKzM3NSwyMCBAQAogCS5yZXNldAkJPSB3YWtldXBfdHJhY2VyX3Jlc2V0LAogCS5zdGFydAkJPSB3YWtldXBfdHJhY2VyX3N0YXJ0LAogCS5zdG9wCQk9IHdha2V1cF90cmFjZXJfc3RvcCwKLQkub3BlbgkJPSB3YWtldXBfdHJhY2VyX29wZW4sCi0JLmNsb3NlCQk9IHdha2V1cF90cmFjZXJfY2xvc2UsCisJLnByaW50X21heAk9IDEsCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAorCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfd2FrZXVwLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlciB3YWtldXBfcnRfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPQoreworCS5uYW1lCQk9ICJ3YWtldXBfcnQiLAorCS5pbml0CQk9IHdha2V1cF9ydF90cmFjZXJfaW5pdCwKKwkucmVzZXQJCT0gd2FrZXVwX3RyYWNlcl9yZXNldCwKKwkuc3RhcnQJCT0gd2FrZXVwX3RyYWNlcl9zdGFydCwKKwkuc3RvcAkJPSB3YWtldXBfdHJhY2VyX3N0b3AsCisJLndhaXRfcGlwZQk9IHBvbGxfd2FpdF9waXBlLAogCS5wcmludF9tYXgJPSAxLAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3dha2V1cCwKQEAgLTM5Nyw2ICs0MDMsMTAgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VyKCZ3YWtldXBfcnRfdHJhY2VyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJcmV0dXJuIDA7CiB9CiBkZXZpY2VfaW5pdGNhbGwoaW5pdF93YWtldXBfdHJhY2VyKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKaW5kZXggYmM4ZTgwYS4uMDhmNGViMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKQEAgLTEsNSArMSw2IEBACiAvKiBJbmNsdWRlIGluIHRyYWNlLmMgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCkBAIC05LDExICsxMCwxMiBAQAogCWNhc2UgVFJBQ0VfRk46CiAJY2FzZSBUUkFDRV9DVFg6CiAJY2FzZSBUUkFDRV9XQUtFOgotCWNhc2UgVFJBQ0VfQ09OVDoKIAljYXNlIFRSQUNFX1NUQUNLOgogCWNhc2UgVFJBQ0VfUFJJTlQ6CiAJY2FzZSBUUkFDRV9TUEVDSUFMOgogCWNhc2UgVFJBQ0VfQlJBTkNIOgorCWNhc2UgVFJBQ0VfR1JBUEhfRU5UOgorCWNhc2UgVFJBQ0VfR1JBUEhfUkVUOgogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC05OSw5ICsxMDEsNiBAQAogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKLSNkZWZpbmUgX19TVFIoeCkgI3gKLSNkZWZpbmUgU1RSKHgpIF9fU1RSKHgpCi0KIC8qIFRlc3QgZHluYW1pYyBjb2RlIG1vZGlmaWNhdGlvbiBhbmQgZnRyYWNlIGZpbHRlcnMgKi8KIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2R5bmFtaWNfdHJhY2luZyhzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICAgc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKQEAgLTEyNSwxNyArMTI0LDE3IEBACiAJZnVuYygpOwogCiAJLyoKLQkgKiBTb21lIGFyY2hzICpjb3VnaCpQb3dlclBDKmNvdWdoKiBhZGQgY2hhcmFjaHRlcnMgdG8gdGhlCisJICogU29tZSBhcmNocyAqY291Z2gqUG93ZXJQQypjb3VnaCogYWRkIGNoYXJhY3RlcnMgdG8gdGhlCiAJICogc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzLiBXZSBzaW1wbHkgcHV0IGEgJyonIHRvCi0JICogYWNjb21vZGF0ZSB0aGVtLgorCSAqIGFjY29tbW9kYXRlIHRoZW0uCiAJICovCi0JZnVuY19uYW1lID0gIioiIFNUUihEWU5fRlRSQUNFX1RFU1RfTkFNRSk7CisJZnVuY19uYW1lID0gIioiIF9fc3RyaW5naWZ5KERZTl9GVFJBQ0VfVEVTVF9OQU1FKTsKIAogCS8qIGZpbHRlciBvbmx5IG9uIG91ciBmdW5jdGlvbiAqLwogCWZ0cmFjZV9zZXRfZmlsdGVyKGZ1bmNfbmFtZSwgc3RybGVuKGZ1bmNfbmFtZSksIDEpOwogCiAJLyogZW5hYmxlIHRyYWNpbmcgKi8KLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7CisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKIAlpZiAocmV0KSB7CiAJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwogCQlnb3RvIG91dDsKQEAgLTIwOSw3ICsyMDgsNyBAQAogCWZ0cmFjZV9lbmFibGVkID0gMTsKIAl0cmFjZXJfZW5hYmxlZCA9IDE7CiAKLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7CisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKIAlpZiAocmV0KSB7CiAJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwogCQlnb3RvIG91dDsKQEAgLTI0Nyw2ICsyNDYsOTAgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCiAKKworI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKworLyogTWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb25zIHRvIHRyYWNlIGJlZm9yZSBkaWFnbm9zaW5nIGEgaGFuZyAqLworI2RlZmluZSBHUkFQSF9NQVhfRlVOQ19URVNUCTEwMDAwMDAwMAorCitzdGF0aWMgdm9pZCBfX2Z0cmFjZV9kdW1wKGJvb2wgZGlzYWJsZV90cmFjaW5nKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3JhcGhfaGFuZ190aHJlc2g7CisKKy8qIFdyYXAgdGhlIHJlYWwgZnVuY3Rpb24gZW50cnkgcHJvYmUgdG8gYXZvaWQgcG9zc2libGUgaGFuZ2luZyAqLworc3RhdGljIGludCB0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UpCit7CisJLyogVGhpcyBpcyBoYXJtbGVzc2x5IHJhY3ksIHdlIHdhbnQgdG8gYXBwcm94aW1hdGVseSBkZXRlY3QgYSBoYW5nICovCisJaWYgKHVubGlrZWx5KCsrZ3JhcGhfaGFuZ190aHJlc2ggPiBHUkFQSF9NQVhfRlVOQ19URVNUKSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJCVUc6IEZ1bmN0aW9uIGdyYXBoIHRyYWNlciBoYW5nIVxuIik7CisJCWlmIChmdHJhY2VfZHVtcF9vbl9vb3BzKQorCQkJX19mdHJhY2VfZHVtcChmYWxzZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiB0cmFjZV9ncmFwaF9lbnRyeSh0cmFjZSk7Cit9CisKKy8qCisgKiBQcmV0dHkgbXVjaCB0aGUgc2FtZSB0aGFuIGZvciB0aGUgZnVuY3Rpb24gdHJhY2VyIGZyb20gd2hpY2ggdGhlIHNlbGZ0ZXN0CisgKiBoYXMgYmVlbiBib3Jyb3dlZC4KKyAqLworaW50Cit0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uX2dyYXBoKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAorCQkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKworCS8qCisJICogU2ltdWxhdGUgdGhlIGluaXQoKSBjYWxsYmFjayBidXQgd2UgYXR0YWNoIGEgd2F0Y2hkb2cgY2FsbGJhY2sKKwkgKiB0byBkZXRlY3QgYW5kIHJlY292ZXIgZnJvbSBwb3NzaWJsZSBoYW5ncworCSAqLworCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOworCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaCgmdHJhY2VfZ3JhcGhfcmV0dXJuLAorCQkJCSAgICAmdHJhY2VfZ3JhcGhfZW50cnlfd2F0Y2hkb2cpOworCWlmIChyZXQpIHsKKwkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwl0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKCk7CisKKwkvKiBTbGVlcCBmb3IgYSAxLzEwIG9mIGEgc2Vjb25kICovCisJbXNsZWVwKDEwMCk7CisKKwkvKiBIYXZlIHdlIGp1c3QgcmVjb3ZlcmVkIGZyb20gYSBoYW5nPyAqLworCWlmIChncmFwaF9oYW5nX3RocmVzaCA+IEdSQVBIX01BWF9GVU5DX1RFU1QpIHsKKwkJdHJhY2luZ19zZWxmdGVzdF9kaXNhYmxlZCA9IHRydWU7CisJCXJldCA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwl0cmFjaW5nX3N0b3AoKTsKKworCS8qIGNoZWNrIHRoZSB0cmFjZSBidWZmZXIgKi8KKwlyZXQgPSB0cmFjZV90ZXN0X2J1ZmZlcih0ciwgJmNvdW50KTsKKworCXRyYWNlLT5yZXNldCh0cik7CisJdHJhY2luZ19zdGFydCgpOworCisJaWYgKCFyZXQgJiYgIWNvdW50KSB7CisJCXByaW50ayhLRVJOX0NPTlQgIi4uIG5vIGVudHJpZXMgZm91bmQgLi4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCS8qIERvbid0IHRlc3QgZHluYW1pYyB0cmFjaW5nLCB0aGUgZnVuY3Rpb24gdHJhY2VyIGFscmVhZHkgZGlkICovCisKK291dDoKKwkvKiBTdG9wIGl0IGlmIHdlIGZhaWxlZCAqLworCWlmIChyZXQpCisJCWZ0cmFjZV9ncmFwaF9zdG9wKCk7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KKworCiAjaWZkZWYgQ09ORklHX0lSUVNPRkZfVFJBQ0VSCiBpbnQKIHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfaXJxc29mZihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKQEAgLTI1Niw3ICszMzksNyBAQAogCWludCByZXQ7CiAKIAkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwogCWlmIChyZXQpIHsKIAkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CiAJCXJldHVybiByZXQ7CkBAIC0yNjgsNiArMzUxLDE0IEBACiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAl1ZGVsYXkoMTAwKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkvKgorCSAqIFN0b3AgdGhlIHRyYWNlciB0byBhdm9pZCBhIHdhcm5pbmcgc3Vic2VxdWVudAorCSAqIHRvIGJ1ZmZlciBmbGlwcGluZyBmYWlsdXJlIGJlY2F1c2UgdHJhY2luZ19zdG9wKCkKKwkgKiBkaXNhYmxlcyB0aGUgdHIgYW5kIG1heCBidWZmZXJzLCBtYWtpbmcgZmxpcHBpbmcgaW1wb3NzaWJsZQorCSAqIGluIGNhc2Ugb2YgcGFyYWxsZWxzIG1heCBpcnFzIG9mZiBsYXRlbmNpZXMuCisJICovCisJdHJhY2UtPnN0b3AodHIpOwogCS8qIHN0b3AgdGhlIHRyYWNpbmcuICovCiAJdHJhY2luZ19zdG9wKCk7CiAJLyogY2hlY2sgYm90aCB0cmFjZSBidWZmZXJzICovCkBAIC0zMTAsNyArNDAxLDcgQEAKIAl9CiAKIAkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwogCWlmIChyZXQpIHsKIAkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CiAJCXJldHVybiByZXQ7CkBAIC0zMjIsNiArNDEzLDE0IEBACiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJdWRlbGF5KDEwMCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKKworCS8qCisJICogU3RvcCB0aGUgdHJhY2VyIHRvIGF2b2lkIGEgd2FybmluZyBzdWJzZXF1ZW50CisJICogdG8gYnVmZmVyIGZsaXBwaW5nIGZhaWx1cmUgYmVjYXVzZSB0cmFjaW5nX3N0b3AoKQorCSAqIGRpc2FibGVzIHRoZSB0ciBhbmQgbWF4IGJ1ZmZlcnMsIG1ha2luZyBmbGlwcGluZyBpbXBvc3NpYmxlCisJICogaW4gY2FzZSBvZiBwYXJhbGxlbHMgbWF4IHByZWVtcHQgb2ZmIGxhdGVuY2llcy4KKwkgKi8KKwl0cmFjZS0+c3RvcCh0cik7CiAJLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KIAl0cmFjaW5nX3N0b3AoKTsKIAkvKiBjaGVjayBib3RoIHRyYWNlIGJ1ZmZlcnMgKi8KQEAgLTM2NCwxMCArNDYzLDEwIEBACiAJfQogCiAJLyogc3RhcnQgdGhlIHRyYWNpbmcgKi8KLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7CisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKIAlpZiAocmV0KSB7CiAJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfbm9fc3RhcnQ7CiAJfQogCiAJLyogcmVzZXQgdGhlIG1heCBsYXRlbmN5ICovCkBAIC0zODEsMzEgKzQ4MCwzNSBAQAogCS8qIHJldmVyc2UgdGhlIG9yZGVyIG9mIHByZWVtcHQgdnMgaXJxcyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAorCS8qCisJICogU3RvcCB0aGUgdHJhY2VyIHRvIGF2b2lkIGEgd2FybmluZyBzdWJzZXF1ZW50CisJICogdG8gYnVmZmVyIGZsaXBwaW5nIGZhaWx1cmUgYmVjYXVzZSB0cmFjaW5nX3N0b3AoKQorCSAqIGRpc2FibGVzIHRoZSB0ciBhbmQgbWF4IGJ1ZmZlcnMsIG1ha2luZyBmbGlwcGluZyBpbXBvc3NpYmxlCisJICogaW4gY2FzZSBvZiBwYXJhbGxlbHMgbWF4IGlycXMvcHJlZW1wdCBvZmYgbGF0ZW5jaWVzLgorCSAqLworCXRyYWNlLT5zdG9wKHRyKTsKIAkvKiBzdG9wIHRoZSB0cmFjaW5nLiAqLwogCXRyYWNpbmdfc3RvcCgpOwogCS8qIGNoZWNrIGJvdGggdHJhY2UgYnVmZmVycyAqLwogCXJldCA9IHRyYWNlX3Rlc3RfYnVmZmVyKHRyLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCXRyYWNpbmdfc3RhcnQoKTsKKwlpZiAocmV0KQogCQlnb3RvIG91dDsKLQl9CiAKIAlyZXQgPSB0cmFjZV90ZXN0X2J1ZmZlcigmbWF4X3RyLCAmY291bnQpOwotCWlmIChyZXQpIHsKLQkJdHJhY2luZ19zdGFydCgpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCX0KIAogCWlmICghcmV0ICYmICFjb3VudCkgewogCQlwcmludGsoS0VSTl9DT05UICIuLiBubyBlbnRyaWVzIGZvdW5kIC4uIik7CiAJCXJldCA9IC0xOwotCQl0cmFjaW5nX3N0YXJ0KCk7CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIGRvIHRoZSB0ZXN0IGJ5IGRpc2FibGluZyBpbnRlcnJ1cHRzIGZpcnN0IHRoaXMgdGltZSAqLwogCXRyYWNpbmdfbWF4X2xhdGVuY3kgPSAwOwogCXRyYWNpbmdfc3RhcnQoKTsKKwl0cmFjZS0+c3RhcnQodHIpOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAl1ZGVsYXkoMTAwKTsKQEAgLTQxMyw2ICs1MTYsNyBAQAogCS8qIHJldmVyc2UgdGhlIG9yZGVyIG9mIHByZWVtcHQgdnMgaXJxcyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAorCXRyYWNlLT5zdG9wKHRyKTsKIAkvKiBzdG9wIHRoZSB0cmFjaW5nLiAqLwogCXRyYWNpbmdfc3RvcCgpOwogCS8qIGNoZWNrIGJvdGggdHJhY2UgYnVmZmVycyAqLwpAQCAtNDI4LDkgKzUzMiwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLSBvdXQ6Ci0JdHJhY2UtPnJlc2V0KHRyKTsKK291dDoKIAl0cmFjaW5nX3N0YXJ0KCk7CitvdXRfbm9fc3RhcnQ6CisJdHJhY2UtPnJlc2V0KHRyKTsKIAl0cmFjaW5nX21heF9sYXRlbmN5ID0gc2F2ZV9tYXg7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDk2LDcgKzYwMSw3IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmaXNydCk7CiAKIAkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwogCWlmIChyZXQpIHsKIAkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CiAJCXJldHVybiByZXQ7CkBAIC01NTcsNyArNjYyLDcgQEAKIAlpbnQgcmV0OwogCiAJLyogc3RhcnQgdGhlIHRyYWNpbmcgKi8KLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7CisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKIAlpZiAocmV0KSB7CiAJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtNTg5LDM0ICs2OTQsNyBAQAogCWludCByZXQ7CiAKIAkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKLQlpZiAocmV0KSB7Ci0JCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBTbGVlcCBmb3IgYSAxLzEwIG9mIGEgc2Vjb25kICovCi0JbXNsZWVwKDEwMCk7Ci0JLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KLQl0cmFjaW5nX3N0b3AoKTsKLQkvKiBjaGVjayB0aGUgdHJhY2UgYnVmZmVyICovCi0JcmV0ID0gdHJhY2VfdGVzdF9idWZmZXIodHIsICZjb3VudCk7Ci0JdHJhY2UtPnJlc2V0KHRyKTsKLQl0cmFjaW5nX3N0YXJ0KCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmIC8qIENPTkZJR19TWVNQUk9GX1RSQUNFUiAqLwotCi0jaWZkZWYgQ09ORklHX0JSQU5DSF9UUkFDRVIKLWludAotdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9icmFuY2goc3RydWN0IHRyYWNlciAqdHJhY2UsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKLQlpbnQgcmV0OwotCi0JLyogc3RhcnQgdGhlIHRyYWNpbmcgKi8KLQlyZXQgPSB0cmFjZS0+aW5pdCh0cik7CisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKIAlpZiAocmV0KSB7CiAJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtNjMxLDYgKzcwOSw0MyBAQAogCXRyYWNlLT5yZXNldCh0cik7CiAJdHJhY2luZ19zdGFydCgpOwogCisJaWYgKCFyZXQgJiYgIWNvdW50KSB7CisJCXByaW50ayhLRVJOX0NPTlQgIi4uIG5vIGVudHJpZXMgZm91bmQgLi4iKTsKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1lTUFJPRl9UUkFDRVIgKi8KKworI2lmZGVmIENPTkZJR19CUkFOQ0hfVFJBQ0VSCitpbnQKK3RyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfYnJhbmNoKHN0cnVjdCB0cmFjZXIgKnRyYWNlLCBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJaW50IHJldDsKKworCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCisJcmV0ID0gdHJhY2VyX2luaXQodHJhY2UsIHRyKTsKKwlpZiAocmV0KSB7CisJCXdhcm5fZmFpbGVkX2luaXRfdHJhY2VyKHRyYWNlLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFNsZWVwIGZvciBhIDEvMTAgb2YgYSBzZWNvbmQgKi8KKwltc2xlZXAoMTAwKTsKKwkvKiBzdG9wIHRoZSB0cmFjaW5nLiAqLworCXRyYWNpbmdfc3RvcCgpOworCS8qIGNoZWNrIHRoZSB0cmFjZSBidWZmZXIgKi8KKwlyZXQgPSB0cmFjZV90ZXN0X2J1ZmZlcih0ciwgJmNvdW50KTsKKwl0cmFjZS0+cmVzZXQodHIpOworCXRyYWNpbmdfc3RhcnQoKTsKKworCWlmICghcmV0ICYmICFjb3VudCkgeworCQlwcmludGsoS0VSTl9DT05UICIuLiBubyBlbnRyaWVzIGZvdW5kIC4uIik7CisJCXJldCA9IC0xOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYgLyogQ09ORklHX0JSQU5DSF9UUkFDRVIgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKaW5kZXggZDA4NzFiYy4uYzc1MGY2NSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKQEAgLTI0NSwxNiArMjQ1LDMxIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRfZGlzYWJsZWQoc3RydWN0IHNlcV9maWxlICptKQoreworCXNlcV9wdXRzKG0sICIjXG4iCisJCSAiIyAgU3RhY2sgdHJhY2VyIGRpc2FibGVkXG4iCisJCSAiI1xuIgorCQkgIiMgVG8gZW5hYmxlIHRoZSBzdGFjayB0cmFjZXIsIGVpdGhlciBhZGQgJ3N0YWNrdHJhY2UnIHRvIHRoZVxuIgorCQkgIiMga2VybmVsIGNvbW1hbmQgbGluZVxuIgorCQkgIiMgb3IgJ2VjaG8gMSA+IC9wcm9jL3N5cy9rZXJuZWwvc3RhY2tfdHJhY2VyX2VuYWJsZWQnXG4iCisJCSAiI1xuIik7Cit9CisKIHN0YXRpYyBpbnQgdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlsb25nIGk7CiAJaW50IHNpemU7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKLQkJc2VxX3ByaW50ZihtLCAiICAgICAgICBEZXB0aCAgIFNpemUgICAgICBMb2NhdGlvbiIKKwkJc2VxX3ByaW50ZihtLCAiICAgICAgICBEZXB0aCAgICBTaXplICAgTG9jYXRpb24iCiAJCQkgICAiICAgICglZCBlbnRyaWVzKVxuIgotCQkJICAgIiAgICAgICAgLS0tLS0gICAtLS0tICAgICAgLS0tLS0tLS1cbiIsCisJCQkgICAiICAgICAgICAtLS0tLSAgICAtLS0tICAgLS0tLS0tLS1cbiIsCiAJCQkgICBtYXhfc3RhY2tfdHJhY2UubnJfZW50cmllcyk7CisKKwkJaWYgKCFzdGFja190cmFjZXJfZW5hYmxlZCAmJiAhbWF4X3N0YWNrX3NpemUpCisJCQlwcmludF9kaXNhYmxlZChtKTsKKwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZGViZDcKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5jCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogSW5mcmFzdHJ1Y3R1cmUgZm9yIHN0YXRpc3RpYyB0cmFjaW5nIChoaXN0b2dyYW0gb3V0cHV0KS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIHRoZSBjb2RlIGZyb20gdHJhY2VfYnJhbmNoLmMgd2hpY2ggaXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlICJ0cmFjZV9zdGF0LmgiCisjaW5jbHVkZSAidHJhY2UuaCIKKworCisvKiBMaXN0IG9mIHN0YXQgZW50cmllcyBmcm9tIGEgdHJhY2VyICovCitzdHJ1Y3QgdHJhY2Vfc3RhdF9saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJdm9pZAkJCSpzdGF0OworfTsKKworLyogQSBzdGF0IHNlc3Npb24gaXMgdGhlIHN0YXRzIG91dHB1dCBpbiBvbmUgZmlsZSAqLworc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24geworCXN0cnVjdCBsaXN0X2hlYWQJc2Vzc2lvbl9saXN0OworCXN0cnVjdCB0cmFjZXJfc3RhdAkqdHM7CisJc3RydWN0IGxpc3RfaGVhZAlzdGF0X2xpc3Q7CisJc3RydWN0IG11dGV4CQlzdGF0X211dGV4OworCXN0cnVjdCBkZW50cnkJCSpmaWxlOworfTsKKworLyogQWxsIG9mIHRoZSBzZXNzaW9ucyBjdXJyZW50bHkgaW4gdXNlLiBFYWNoIHN0YXQgZmlsZSBlbWJlZCBvbmUgc2Vzc2lvbiAqLworc3RhdGljIExJU1RfSEVBRChhbGxfc3RhdF9zZXNzaW9ucyk7CitzdGF0aWMgREVGSU5FX01VVEVYKGFsbF9zdGF0X3Nlc3Npb25zX211dGV4KTsKKworLyogVGhlIHJvb3QgZGlyZWN0b3J5IGZvciBhbGwgc3RhdCBmaWxlcyAqLworc3RhdGljIHN0cnVjdCBkZW50cnkJCSpzdGF0X2RpcjsKKworCitzdGF0aWMgdm9pZCByZXNldF9zdGF0X3Nlc3Npb24oc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24pCit7CisJc3RydWN0IHRyYWNlX3N0YXRfbGlzdCAqbm9kZSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbmV4dCwgJnNlc3Npb24tPnN0YXRfbGlzdCwgbGlzdCkKKwkJa2ZyZWUobm9kZSk7CisKKwlJTklUX0xJU1RfSEVBRCgmc2Vzc2lvbi0+c3RhdF9saXN0KTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9zZXNzaW9uKHN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uKQoreworCWRlYnVnZnNfcmVtb3ZlKHNlc3Npb24tPmZpbGUpOworCXJlc2V0X3N0YXRfc2Vzc2lvbihzZXNzaW9uKTsKKwltdXRleF9kZXN0cm95KCZzZXNzaW9uLT5zdGF0X211dGV4KTsKKwlrZnJlZShzZXNzaW9uKTsKK30KKworLyoKKyAqIEZvciB0cmFjZXJzIHRoYXQgZG9uJ3QgcHJvdmlkZSBhIHN0YXRfY21wIGNhbGxiYWNrLgorICogVGhpcyBvbmUgd2lsbCBmb3JjZSBhbiBpbW1lZGlhdGUgaW5zZXJ0aW9uIG9uIHRhaWwgb2YKKyAqIHRoZSBsaXN0LgorICovCitzdGF0aWMgaW50IGR1bW15X2NtcCh2b2lkICpwMSwgdm9pZCAqcDIpCit7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBzdGF0IGxpc3QgYXQgZWFjaCB0cmFjZV9zdGF0IGZpbGUgb3BlbmluZy4KKyAqIEFsbCBvZiB0aGVzZSBjb3BpZXMgYW5kIHNvcnRpbmcgYXJlIHJlcXVpcmVkIG9uIGFsbCBvcGVuaW5nCisgKiBzaW5jZSB0aGUgc3RhdHMgY291bGQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdHdvIGZpbGUgc2Vzc2lvbnMuCisgKi8KK3N0YXRpYyBpbnQgc3RhdF9zZXFfaW5pdChzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgdHJhY2Vfc3RhdF9saXN0ICppdGVyX2VudHJ5LCAqbmV3X2VudHJ5OworCXN0cnVjdCB0cmFjZXJfc3RhdCAqdHMgPSBzZXNzaW9uLT50czsKKwl2b2lkICpzdGF0OworCWludCByZXQgPSAwOworCWludCBpOworCisJbXV0ZXhfbG9jaygmc2Vzc2lvbi0+c3RhdF9tdXRleCk7CisJcmVzZXRfc3RhdF9zZXNzaW9uKHNlc3Npb24pOworCisJaWYgKCF0cy0+c3RhdF9jbXApCisJCXRzLT5zdGF0X2NtcCA9IGR1bW15X2NtcDsKKworCXN0YXQgPSB0cy0+c3RhdF9zdGFydCgpOworCWlmICghc3RhdCkKKwkJZ290byBleGl0OworCisJLyoKKwkgKiBUaGUgZmlyc3QgZW50cnkuIEFjdHVhbGx5IHRoaXMgaXMgdGhlIHNlY29uZCwgYnV0IHRoZSBmaXJzdAorCSAqIG9uZSAodGhlIHN0YXRfbGlzdCBoZWFkKSBpcyBwb2ludGxlc3MuCisJICovCisJbmV3X2VudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRyYWNlX3N0YXRfbGlzdCksIEdGUF9LRVJORUwpOworCWlmICghbmV3X2VudHJ5KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmbmV3X2VudHJ5LT5saXN0KTsKKworCWxpc3RfYWRkKCZuZXdfZW50cnktPmxpc3QsICZzZXNzaW9uLT5zdGF0X2xpc3QpOworCisJbmV3X2VudHJ5LT5zdGF0ID0gc3RhdDsKKworCS8qCisJICogSXRlcmF0ZSBvdmVyIHRoZSB0cmFjZXIgc3RhdCBlbnRyaWVzIGFuZCBzdG9yZSB0aGVtIGluIGEgc29ydGVkCisJICogbGlzdC4KKwkgKi8KKwlmb3IgKGkgPSAxOyA7IGkrKykgeworCQlzdGF0ID0gdHMtPnN0YXRfbmV4dChzdGF0LCBpKTsKKworCQkvKiBFbmQgb2YgaW5zZXJ0aW9uICovCisJCWlmICghc3RhdCkKKwkJCWJyZWFrOworCisJCW5ld19lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmFjZV9zdGF0X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFuZXdfZW50cnkpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfZnJlZV9saXN0OworCQl9CisKKwkJSU5JVF9MSVNUX0hFQUQoJm5ld19lbnRyeS0+bGlzdCk7CisJCW5ld19lbnRyeS0+c3RhdCA9IHN0YXQ7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGl0ZXJfZW50cnksICZzZXNzaW9uLT5zdGF0X2xpc3QsCisJCQkJbGlzdCkgeworCisJCQkvKiBJbnNlcnRpb24gd2l0aCBhIGRlc2NlbmRlbnQgc29ydGluZyAqLworCQkJaWYgKHRzLT5zdGF0X2NtcChpdGVyX2VudHJ5LT5zdGF0LAorCQkJCQluZXdfZW50cnktPnN0YXQpID49IDApIHsKKworCQkJCWxpc3RfYWRkKCZuZXdfZW50cnktPmxpc3QsICZpdGVyX2VudHJ5LT5saXN0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIFRoZSBjdXJyZW50IGxhcmdlciB2YWx1ZSAqLworCQlpZiAobGlzdF9lbXB0eSgmbmV3X2VudHJ5LT5saXN0KSkKKwkJCWxpc3RfYWRkKCZuZXdfZW50cnktPmxpc3QsICZzZXNzaW9uLT5zdGF0X2xpc3QpOworCX0KK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5zdGF0X211dGV4KTsKKwlyZXR1cm4gcmV0OworCitleGl0X2ZyZWVfbGlzdDoKKwlyZXNldF9zdGF0X3Nlc3Npb24oc2Vzc2lvbik7CisJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5zdGF0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkICpzdGF0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uID0gcy0+cHJpdmF0ZTsKKworCS8qIFByZXZlbnQgZnJvbSB0cmFjZXIgc3dpdGNoIG9yIHN0YXRfbGlzdCBtb2RpZmljYXRpb24gKi8KKwltdXRleF9sb2NrKCZzZXNzaW9uLT5zdGF0X211dGV4KTsKKworCS8qIElmIHdlIGFyZSBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLCBwcmludCB0aGUgaGVhZGVycyAqLworCWlmICghKnBvcyAmJiBzZXNzaW9uLT50cy0+c3RhdF9oZWFkZXJzKQorCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOworCisJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZzZXNzaW9uLT5zdGF0X2xpc3QsICpwb3MpOworfQorCitzdGF0aWMgdm9pZCAqc3RhdF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uID0gcy0+cHJpdmF0ZTsKKworCWlmIChwID09IFNFUV9TVEFSVF9UT0tFTikKKwkJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZzZXNzaW9uLT5zdGF0X2xpc3QsICpwb3MpOworCisJcmV0dXJuIHNlcV9saXN0X25leHQocCwgJnNlc3Npb24tPnN0YXRfbGlzdCwgcG9zKTsKK30KKworc3RhdGljIHZvaWQgc3RhdF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24gPSBzLT5wcml2YXRlOworCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+c3RhdF9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgc3RhdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24gPSBzLT5wcml2YXRlOworCXN0cnVjdCB0cmFjZV9zdGF0X2xpc3QgKmwgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCB0cmFjZV9zdGF0X2xpc3QsIGxpc3QpOworCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQorCQlyZXR1cm4gc2Vzc2lvbi0+dHMtPnN0YXRfaGVhZGVycyhzKTsKKworCXJldHVybiBzZXNzaW9uLT50cy0+c3RhdF9zaG93KHMsIGwtPnN0YXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHRyYWNlX3N0YXRfc2VxX29wcyA9IHsKKwkuc3RhcnQJCT0gc3RhdF9zZXFfc3RhcnQsCisJLm5leHQJCT0gc3RhdF9zZXFfbmV4dCwKKwkuc3RvcAkJPSBzdGF0X3NlcV9zdG9wLAorCS5zaG93CQk9IHN0YXRfc2VxX3Nob3cKK307CisKKy8qIFRoZSBzZXNzaW9uIHN0YXQgaXMgcmVmaWxsZWQgYW5kIHJlc29ydGVkIGF0IGVhY2ggc3RhdCBmaWxlIG9wZW5pbmcgKi8KK3N0YXRpYyBpbnQgdHJhY2luZ19zdGF0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldDsKKworCXN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZ0cmFjZV9zdGF0X3NlcV9vcHMpOworCWlmICghcmV0KSB7CisJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJbS0+cHJpdmF0ZSA9IHNlc3Npb247CisJCXJldCA9IHN0YXRfc2VxX2luaXQoc2Vzc2lvbik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEF2b2lkIGNvbnN1bWluZyBtZW1vcnkgd2l0aCBvdXIgbm93IHVzZWxlc3MgbGlzdC4KKyAqLworc3RhdGljIGludCB0cmFjaW5nX3N0YXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQoreworCXN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uID0gaS0+aV9wcml2YXRlOworCisJbXV0ZXhfbG9jaygmc2Vzc2lvbi0+c3RhdF9tdXRleCk7CisJcmVzZXRfc3RhdF9zZXNzaW9uKHNlc3Npb24pOworCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+c3RhdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19zdGF0X2ZvcHMgPSB7CisJLm9wZW4JCT0gdHJhY2luZ19zdGF0X29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSB0cmFjaW5nX3N0YXRfcmVsZWFzZQorfTsKKworc3RhdGljIGludCB0cmFjaW5nX3N0YXRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRfdHJhY2luZzsKKworCWRfdHJhY2luZyA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKKworCXN0YXRfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ0cmFjZV9zdGF0IiwgZF90cmFjaW5nKTsKKwlpZiAoIXN0YXRfZGlyKQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIid0cmFjZV9zdGF0JyBlbnRyeVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9zdGF0X2ZpbGUoc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24pCit7CisJaWYgKCFzdGF0X2RpciAmJiB0cmFjaW5nX3N0YXRfaW5pdCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNlc3Npb24tPmZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHNlc3Npb24tPnRzLT5uYW1lLCAwNjQ0LAorCQkJCQkgICAgc3RhdF9kaXIsCisJCQkJCSAgICBzZXNzaW9uLCAmdHJhY2luZ19zdGF0X2ZvcHMpOworCWlmICghc2Vzc2lvbi0+ZmlsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWdpc3Rlcl9zdGF0X3RyYWNlcihzdHJ1Y3QgdHJhY2VyX3N0YXQgKnRyYWNlKQoreworCXN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uLCAqbm9kZSwgKnRtcDsKKwlpbnQgcmV0OworCisJaWYgKCF0cmFjZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXRyYWNlLT5zdGF0X3N0YXJ0IHx8ICF0cmFjZS0+c3RhdF9uZXh0IHx8ICF0cmFjZS0+c3RhdF9zaG93KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEFscmVhZHkgcmVnaXN0ZXJlZD8gKi8KKwltdXRleF9sb2NrKCZhbGxfc3RhdF9zZXNzaW9uc19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJmFsbF9zdGF0X3Nlc3Npb25zLCBzZXNzaW9uX2xpc3QpIHsKKwkJaWYgKG5vZGUtPnRzID09IHRyYWNlKSB7CisJCQltdXRleF91bmxvY2soJmFsbF9zdGF0X3Nlc3Npb25zX211dGV4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCW11dGV4X3VubG9jaygmYWxsX3N0YXRfc2Vzc2lvbnNfbXV0ZXgpOworCisJLyogSW5pdCB0aGUgc2Vzc2lvbiAqLworCXNlc3Npb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiksIEdGUF9LRVJORUwpOworCWlmICghc2Vzc2lvbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZXNzaW9uLT50cyA9IHRyYWNlOworCUlOSVRfTElTVF9IRUFEKCZzZXNzaW9uLT5zZXNzaW9uX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZzZXNzaW9uLT5zdGF0X2xpc3QpOworCW11dGV4X2luaXQoJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworCXNlc3Npb24tPmZpbGUgPSBOVUxMOworCisJcmV0ID0gaW5pdF9zdGF0X2ZpbGUoc2Vzc2lvbik7CisJaWYgKHJldCkgeworCQlkZXN0cm95X3Nlc3Npb24oc2Vzc2lvbik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVnaXN0ZXIgKi8KKwltdXRleF9sb2NrKCZhbGxfc3RhdF9zZXNzaW9uc19tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmc2Vzc2lvbi0+c2Vzc2lvbl9saXN0LCAmYWxsX3N0YXRfc2Vzc2lvbnMpOworCW11dGV4X3VubG9jaygmYWxsX3N0YXRfc2Vzc2lvbnNfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdW5yZWdpc3Rlcl9zdGF0X3RyYWNlcihzdHJ1Y3QgdHJhY2VyX3N0YXQgKnRyYWNlKQoreworCXN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpub2RlLCAqdG1wOworCisJbXV0ZXhfbG9jaygmYWxsX3N0YXRfc2Vzc2lvbnNfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCB0bXAsICZhbGxfc3RhdF9zZXNzaW9ucywgc2Vzc2lvbl9saXN0KSB7CisJCWlmIChub2RlLT50cyA9PSB0cmFjZSkgeworCQkJbGlzdF9kZWwoJm5vZGUtPnNlc3Npb25fbGlzdCk7CisJCQlkZXN0cm95X3Nlc3Npb24obm9kZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmFsbF9zdGF0X3Nlc3Npb25zX211dGV4KTsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmggYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMjI3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX19UUkFDRV9TVEFUX0gKKyNkZWZpbmUgX19UUkFDRV9TVEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKy8qCisgKiBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGEgc3RhdCBmaWxlIChvbmUtc2hvdCBzdGF0aXN0aWNzKSwgZmlsbAorICogYW4gaXRlcmF0b3Igd2l0aCBzdGF0X3N0YXJ0L3N0YXRfbmV4dCBhbmQgYSBzdGF0X3Nob3cgY2FsbGJhY2tzLgorICogVGhlIG90aGVycyBjYWxsYmFja3MgYXJlIG9wdGlvbmFsLgorICovCitzdHJ1Y3QgdHJhY2VyX3N0YXQgeworCS8qIFRoZSBuYW1lIG9mIHlvdXIgc3RhdCBmaWxlICovCisJY29uc3QgY2hhcgkJKm5hbWU7CisJLyogSXRlcmF0aW9uIG92ZXIgc3RhdGlzdGljIGVudHJpZXMgKi8KKwl2b2lkCQkJKigqc3RhdF9zdGFydCkodm9pZCk7CisJdm9pZAkJCSooKnN0YXRfbmV4dCkodm9pZCAqcHJldiwgaW50IGlkeCk7CisJLyogQ29tcGFyZSB0d28gZW50cmllcyBmb3Igc3RhdHMgc29ydGluZyAqLworCWludAkJCSgqc3RhdF9jbXApKHZvaWQgKnAxLCB2b2lkICpwMik7CisJLyogUHJpbnQgYSBzdGF0IGVudHJ5ICovCisJaW50CQkJKCpzdGF0X3Nob3cpKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCk7CisJLyogUHJpbnQgdGhlIGhlYWRlcnMgb2YgeW91ciBzdGF0IGVudHJpZXMgKi8KKwlpbnQJCQkoKnN0YXRfaGVhZGVycykoc3RydWN0IHNlcV9maWxlICpzKTsKK307CisKKy8qCisgKiBEZXN0cm95IG9yIGNyZWF0ZSBhIHN0YXQgZmlsZQorICovCitleHRlcm4gaW50IHJlZ2lzdGVyX3N0YXRfdHJhY2VyKHN0cnVjdCB0cmFjZXJfc3RhdCAqdHJhY2UpOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9zdGF0X3RyYWNlcihzdHJ1Y3QgdHJhY2VyX3N0YXQgKnRyYWNlKTsKKworI2VuZGlmIC8qIF9fVFJBQ0VfU1RBVF9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTNhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMCwwICsxLDI1MCBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxsLmg+CisKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgorCisvKiBLZWVwIGEgY291bnRlciBvZiB0aGUgc3lzY2FsbCB0cmFjaW5nIHVzZXJzICovCitzdGF0aWMgaW50IHJlZmNvdW50OworCisvKiBQcmV2ZW50IGZyb20gcmFjZXMgb24gdGhyZWFkIGZsYWdzIHRvZ2dsaW5nICovCitzdGF0aWMgREVGSU5FX01VVEVYKHN5c2NhbGxfdHJhY2VfbG9jayk7CisKKy8qIE9wdGlvbiB0byBkaXNwbGF5IHRoZSBwYXJhbWV0ZXJzIHR5cGVzICovCitlbnVtIHsKKwlUUkFDRV9TWVNDQUxMU19PUFRfVFlQRVMgPSAweDEsCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgc3lzY2FsbHNfb3B0c1tdID0geworCXsgVFJBQ0VSX09QVChzeXNjYWxsX2FyZ190eXBlLCBUUkFDRV9TWVNDQUxMU19PUFRfVFlQRVMpIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBzeXNjYWxsc19mbGFncyA9IHsKKwkudmFsID0gMCwgLyogQnkgZGVmYXVsdDogbm8gcGFyYW1ldGVycyB0eXBlcyAqLworCS5vcHRzID0gc3lzY2FsbHNfb3B0cworfTsKKworZW51bSBwcmludF9saW5lX3QKK3ByaW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQgPSBpdGVyLT5lbnQ7CisJc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKnRyYWNlOworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeTsKKwlpbnQgaSwgcmV0LCBzeXNjYWxsOworCisJdHJhY2VfYXNzaWduX3R5cGUodHJhY2UsIGVudCk7CisKKwlzeXNjYWxsID0gdHJhY2UtPm5yOworCisJZW50cnkgPSBzeXNjYWxsX25yX3RvX21ldGEoc3lzY2FsbCk7CisJaWYgKCFlbnRyeSkKKwkJZ290byBlbmQ7CisKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcygiLCBlbnRyeS0+bmFtZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7CisJCS8qIHBhcmFtZXRlciB0eXBlcyAqLworCQlpZiAoc3lzY2FsbHNfZmxhZ3MudmFsICYgVFJBQ0VfU1lTQ0FMTFNfT1BUX1RZUEVTKSB7CisJCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyAiLCBlbnRyeS0+dHlwZXNbaV0pOworCQkJaWYgKCFyZXQpCisJCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQl9CisJCS8qIHBhcmFtZXRlciB2YWx1ZXMgKi8KKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICVseCVzICIsIGVudHJ5LT5hcmdzW2ldLAorCQkJCSAgICAgICB0cmFjZS0+YXJnc1tpXSwKKwkJCQkgICAgICAgaSA9PSBlbnRyeS0+bmJfYXJncyAtIDEgPyAiKSIgOiAiLCIpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CisKK2VuZDoKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpOworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK2VudW0gcHJpbnRfbGluZV90CitwcmludF9zeXNjYWxsX2V4aXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQgPSBpdGVyLT5lbnQ7CisJc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqdHJhY2U7CisJaW50IHN5c2NhbGw7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5OworCWludCByZXQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZSh0cmFjZSwgZW50KTsKKworCXN5c2NhbGwgPSB0cmFjZS0+bnI7CisKKwllbnRyeSA9IHN5c2NhbGxfbnJfdG9fbWV0YShzeXNjYWxsKTsKKwlpZiAoIWVudHJ5KSB7CisJCXRyYWNlX3NlcV9wcmludGYocywgIlxuIik7CisJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJfQorCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMgLT4gMHglbHhcbiIsIGVudHJ5LT5uYW1lLAorCQkJCXRyYWNlLT5yZXQpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCit2b2lkIHN0YXJ0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDsKKworCW11dGV4X2xvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CisKKwkvKiBEb24ndCBlbmFibGUgdGhlIGZsYWcgb24gdGhlIHRhc2tzIHR3aWNlICovCisJaWYgKCsrcmVmY291bnQgIT0gMSkKKwkJZ290byB1bmxvY2s7CisKKwlhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKCk7CisJcmVhZF9sb2NrX2lycXNhdmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKKworCWRvX2VhY2hfdGhyZWFkKGcsIHQpIHsKKwkJc2V0X3Rza190aHJlYWRfZmxhZyh0LCBUSUZfU1lTQ0FMTF9GVFJBQ0UpOworCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgdCk7CisKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7Cit9CisKK3ZvaWQgc3RvcF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7CisKKwltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworCisJLyogVGhlcmUgYXJlIHBlcmhhcHMgc3RpbGwgc29tZSB1c2VycyAqLworCWlmICgtLXJlZmNvdW50KQorCQlnb3RvIHVubG9jazsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CisKKwlkb19lYWNoX3RocmVhZChnLCB0KSB7CisJCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0LCBUSUZfU1lTQ0FMTF9GVFJBQ0UpOworCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgdCk7CisKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7Cit9CisKK3ZvaWQgZnRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKmVudHJ5OworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCWludCBzaXplOworCWludCBzeXNjYWxsX25yOworCisJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOworCisJc3lzX2RhdGEgPSBzeXNjYWxsX25yX3RvX21ldGEoc3lzY2FsbF9ucik7CisJaWYgKCFzeXNfZGF0YSkKKwkJcmV0dXJuOworCisJc2l6ZSA9IHNpemVvZigqZW50cnkpICsgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogc3lzX2RhdGEtPm5iX2FyZ3M7CisKKwlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZShUUkFDRV9TWVNDQUxMX0VOVEVSLCBzaXplLAorCQkJCQkJCTAsIDApOworCWlmICghZXZlbnQpCisJCXJldHVybjsKKworCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPm5yID0gc3lzY2FsbF9ucjsKKwlzeXNjYWxsX2dldF9hcmd1bWVudHMoY3VycmVudCwgcmVncywgMCwgc3lzX2RhdGEtPm5iX2FyZ3MsIGVudHJ5LT5hcmdzKTsKKworCXRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoZXZlbnQsIDAsIDApOworCXRyYWNlX3dha2VfdXAoKTsKK30KKwordm9pZCBmdHJhY2Vfc3lzY2FsbF9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKmVudHJ5OworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCWludCBzeXNjYWxsX25yOworCisJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOworCisJc3lzX2RhdGEgPSBzeXNjYWxsX25yX3RvX21ldGEoc3lzY2FsbF9ucik7CisJaWYgKCFzeXNfZGF0YSkKKwkJcmV0dXJuOworCisJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoVFJBQ0VfU1lTQ0FMTF9FWElULAorCQkJCXNpemVvZigqZW50cnkpLCAwLCAwKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisKKwllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5uciA9IHN5c2NhbGxfbnI7CisJZW50cnktPnJldCA9IHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShjdXJyZW50LCByZWdzKTsKKworCXRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoZXZlbnQsIDAsIDApOworCXRyYWNlX3dha2VfdXAoKTsKK30KKworc3RhdGljIGludCBpbml0X3N5c2NhbGxfdHJhY2VyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJc3RhcnRfZnRyYWNlX3N5c2NhbGxzKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfc3lzY2FsbF90cmFjZXIoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlzdG9wX2Z0cmFjZV9zeXNjYWxscygpOworCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHN5c2NhbGxfZW50ZXJfZXZlbnQgPSB7CisJLnR5cGUJIAk9IFRSQUNFX1NZU0NBTExfRU5URVIsCisJLnRyYWNlCQk9IHByaW50X3N5c2NhbGxfZW50ZXIsCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHN5c2NhbGxfZXhpdF9ldmVudCA9IHsKKwkudHlwZQkgCT0gVFJBQ0VfU1lTQ0FMTF9FWElULAorCS50cmFjZQkJPSBwcmludF9zeXNjYWxsX2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlciBzeXNjYWxsX3RyYWNlciBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCSAgICAgCT0gInN5c2NhbGwiLAorCS5pbml0CQk9IGluaXRfc3lzY2FsbF90cmFjZXIsCisJLnJlc2V0CQk9IHJlc2V0X3N5c2NhbGxfdHJhY2VyLAorCS5mbGFncwkJPSAmc3lzY2FsbHNfZmxhZ3MsCit9OworCitfX2luaXQgaW50IHJlZ2lzdGVyX2Z0cmFjZV9zeXNjYWxscyh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnN5c2NhbGxfZW50ZXJfZXZlbnQpOworCWlmICghcmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImV2ZW50ICVkIGZhaWxlZCB0byByZWdpc3RlclxuIiwKKwkJICAgICAgIHN5c2NhbGxfZW50ZXJfZXZlbnQudHlwZSk7CisJCVdBUk5fT05fT05DRSgxKTsKKwl9CisKKwlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnN5c2NhbGxfZXhpdF9ldmVudCk7CisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZXZlbnQgJWQgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iLAorCQkgICAgICAgc3lzY2FsbF9leGl0X2V2ZW50LnR5cGUpOworCQlXQVJOX09OX09OQ0UoMSk7CisJfQorCisJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigmc3lzY2FsbF90cmFjZXIpOworfQorZGV2aWNlX2luaXRjYWxsKHJlZ2lzdGVyX2Z0cmFjZV9zeXNjYWxscyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYwppbmRleCBlYWNhNWFkLi45MWZkMTljIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAl9CiB9CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgYmFja3RyYWNlX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgYmFja3RyYWNlX29wcyA9IHsKIAkud2FybmluZwkJPSBiYWNrdHJhY2Vfd2FybmluZywKIAkud2FybmluZ19zeW1ib2wJCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAogCS5zdGFjawkJCT0gYmFja3RyYWNlX3N0YWNrLApAQCAtMjI2LDE1ICsyMjYsNiBAQAogCQlzdG9wX3N0YWNrX3RpbWVyKGNwdSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0YXJ0X3N0YWNrX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0JbXV0ZXhfbG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwotCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwotCXN0YXJ0X3N0YWNrX3RpbWVycygpOwotCXRyYWNlcl9lbmFibGVkID0gMTsKLQltdXRleF91bmxvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKLX0KLQogc3RhdGljIHZvaWQgc3RvcF9zdGFja190cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCW11dGV4X2xvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKQEAgLTI0NywxMiArMjM4LDE4IEBACiB7CiAJc3lzcHJvZl90cmFjZSA9IHRyOwogCi0Jc3RhcnRfc3RhY2tfdHJhY2UodHIpOworCXRyYWNpbmdfc3RhcnRfY21kbGluZV9yZWNvcmQoKTsKKworCW11dGV4X2xvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKKwlzdGFydF9zdGFja190aW1lcnMoKTsKKwl0cmFjZXJfZW5hYmxlZCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZzYW1wbGVfdGltZXJfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YWNrX3RyYWNlX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CisJdHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7CiAJc3RvcF9zdGFja190cmFjZSh0cik7CiB9CiAKQEAgLTMxNyw3ICszMTQsNyBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5c3Byb2Zfc2FtcGxlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXNwcm9mX3NhbXBsZV9mb3BzID0gewogCS5yZWFkCQk9IHN5c3Byb2Zfc2FtcGxlX3JlYWQsCiAJLndyaXRlCQk9IHN5c3Byb2Zfc2FtcGxlX3dyaXRlLAogfTsKQEAgLTMzMCw1ICszMjcsNSBAQAogCQkJZF90cmFjZXIsIE5VTEwsICZzeXNwcm9mX3NhbXBsZV9mb3BzKTsKIAlpZiAoZW50cnkpCiAJCXJldHVybjsKLQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ2R5bl9mdHJhY2VfdG90YWxfaW5mbycgZW50cnlcbiIpOworCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAnc3lzcHJvZl9zYW1wbGVfcGVyaW9kJyBlbnRyeVxuIik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfd29ya3F1ZXVlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfd29ya3F1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3MjAxZQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV93b3JrcXVldWUuYwpAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIFdvcmtxdWV1ZSBzdGF0aXN0aWNhbCB0cmFjZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8dHJhY2Uvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgInRyYWNlX3N0YXQuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgorCisKKy8qIEEgY3B1IHdvcmtxdWV1ZSB0aHJlYWQgKi8KK3N0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgbGlzdDsKKy8qIFVzZWZ1bCB0byBrbm93IGlmIHdlIHByaW50IHRoZSBjcHUgaGVhZGVycyAqLworCWJvb2wJCSAgICAgICAgICAgIGZpcnN0X2VudHJ5OworCWludAkJICAgICAgICAgICAgY3B1OworCXBpZF90CQkJICAgIHBpZDsKKy8qIENhbiBiZSBpbnNlcnRlZCBmcm9tIGludGVycnVwdCBvciB1c2VyIGNvbnRleHQsIG5lZWQgdG8gYmUgYXRvbWljICovCisJYXRvbWljX3QJICAgICAgICAgICAgaW5zZXJ0ZWQ7CisvKgorICogIERvbid0IG5lZWQgdG8gYmUgYXRvbWljLCB3b3JrcyBhcmUgc2VyaWFsaXplZCBpbiBhIHNpbmdsZSB3b3JrcXVldWUgdGhyZWFkCisgKiAgb24gYSBzaW5nbGUgQ1BVLgorICovCisJdW5zaWduZWQgaW50CQkgICAgZXhlY3V0ZWQ7Cit9OworCisvKiBMaXN0IG9mIHdvcmtxdWV1ZSB0aHJlYWRzIG9uIG9uZSBjcHUgKi8KK3N0cnVjdCB3b3JrcXVldWVfZ2xvYmFsX3N0YXRzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3BpbmxvY2tfdAkJbG9jazsKK307CisKKy8qIERvbid0IG5lZWQgYSBnbG9iYWwgbG9jayBiZWNhdXNlIGFsbG9jYXRlZCBiZWZvcmUgdGhlIHdvcmtxdWV1ZXMsIGFuZAorICogbmV2ZXIgZnJlZWQuCisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgd29ya3F1ZXVlX2dsb2JhbF9zdGF0cywgYWxsX3dvcmtxdWV1ZV9zdGF0KTsKKyNkZWZpbmUgd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSkgKCZwZXJfY3B1KGFsbF93b3JrcXVldWVfc3RhdCwgY3B1KSkKKworLyogSW5zZXJ0aW9uIG9mIGEgd29yayAqLworc3RhdGljIHZvaWQKK3Byb2JlX3dvcmtxdWV1ZV9pbnNlcnRpb24oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQsCisJCQkgIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdCgmd3FfdGhyZWFkLT5jcHVzX2FsbG93ZWQpOworCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICpub2RlLCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5leHQsICZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdCwKKwkJCQkJCQlsaXN0KSB7CisJCWlmIChub2RlLT5waWQgPT0gd3FfdGhyZWFkLT5waWQpIHsKKwkJCWF0b21pY19pbmMoJm5vZGUtPmluc2VydGVkKTsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisJcHJfZGVidWcoInRyYWNlX3dvcmtxdWV1ZTogZW50cnkgbm90IGZvdW5kXG4iKTsKK2ZvdW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIEV4ZWN1dGlvbiBvZiBhIHdvcmsgKi8KK3N0YXRpYyB2b2lkCitwcm9iZV93b3JrcXVldWVfZXhlY3V0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkLAorCQkJICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QoJndxX3RocmVhZC0+Y3B1c19hbGxvd2VkKTsKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyAqbm9kZSwgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuZXh0LCAmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QsCisJCQkJCQkJbGlzdCkgeworCQlpZiAobm9kZS0+cGlkID09IHdxX3RocmVhZC0+cGlkKSB7CisJCQlub2RlLT5leGVjdXRlZCsrOworCQkJZ290byBmb3VuZDsKKwkJfQorCX0KKwlwcl9kZWJ1ZygidHJhY2Vfd29ya3F1ZXVlOiBlbnRyeSBub3QgZm91bmRcbiIpOworZm91bmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKK30KKworLyogQ3JlYXRpb24gb2YgYSBjcHUgd29ya3F1ZXVlIHRocmVhZCAqLworc3RhdGljIHZvaWQgcHJvYmVfd29ya3F1ZXVlX2NyZWF0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkLCBpbnQgY3B1KQoreworCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICpjd3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVdBUk5fT04oY3B1IDwgMCk7CisKKwkvKiBXb3JrcXVldWVzIGFyZSBzb21ldGltZXMgY3JlYXRlZCBpbiBhdG9taWMgY29udGV4dCAqLworCWN3cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjd3MpIHsKKwkJcHJfd2FybmluZygidHJhY2Vfd29ya3F1ZXVlOiBub3QgZW5vdWdoIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJmN3cy0+bGlzdCk7CisJY3dzLT5jcHUgPSBjcHU7CisKKwljd3MtPnBpZCA9IHdxX3RocmVhZC0+cGlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0KSkKKwkJY3dzLT5maXJzdF9lbnRyeSA9IHRydWU7CisJbGlzdF9hZGRfdGFpbCgmY3dzLT5saXN0LCAmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIERlc3RydWN0aW9uIG9mIGEgY3B1IHdvcmtxdWV1ZSB0aHJlYWQgKi8KK3N0YXRpYyB2b2lkIHByb2JlX3dvcmtxdWV1ZV9kZXN0cnVjdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCkKK3sKKwkvKiBXb3JrcXVldWUgb25seSBleGVjdXRlIG9uIG9uZSBjcHUgKi8KKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdCgmd3FfdGhyZWFkLT5jcHVzX2FsbG93ZWQpOworCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICpub2RlLCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5leHQsICZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdCwKKwkJCQkJCQlsaXN0KSB7CisJCWlmIChub2RlLT5waWQgPT0gd3FfdGhyZWFkLT5waWQpIHsKKwkJCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKKwkJCWtmcmVlKG5vZGUpOworCQkJZ290byBmb3VuZDsKKwkJfQorCX0KKworCXByX2RlYnVnKCJ0cmFjZV93b3JrcXVldWU6IGRvbid0IGZpbmQgd29ya3F1ZXVlIHRvIGRlc3Ryb3lcbiIpOworZm91bmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKworfQorCitzdGF0aWMgc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKndvcmtxdWV1ZV9zdGF0X3N0YXJ0X2NwdShpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKnJldCA9IE5VTEw7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCisJaWYgKCFsaXN0X2VtcHR5KCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdCkpCisJCXJldCA9IGxpc3RfZW50cnkod29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QubmV4dCwKKwkJCQkgc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMsIGxpc3QpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICp3b3JrcXVldWVfc3RhdF9zdGFydCh2b2lkKQoreworCWludCBjcHU7CisJdm9pZCAqcmV0ID0gTlVMTDsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJcmV0ID0gd29ya3F1ZXVlX3N0YXRfc3RhcnRfY3B1KGNwdSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKndvcmtxdWV1ZV9zdGF0X25leHQodm9pZCAqcHJldiwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyAqcHJldl9jd3MgPSBwcmV2OworCWludCBjcHUgPSBwcmV2X2N3cy0+Y3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqcmV0ID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2lzX2xhc3QoJnByZXZfY3dzLT5saXN0LCAmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisJCWRvIHsKKwkJCWNwdSA9IGNwdW1hc2tfbmV4dChjcHUsIGNwdV9wb3NzaWJsZV9tYXNrKTsKKwkJCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfSB3aGlsZSAoIShyZXQgPSB3b3JrcXVldWVfc3RhdF9zdGFydF9jcHUoY3B1KSkpOworCQlyZXR1cm4gcmV0OworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGxpc3RfZW50cnkocHJldl9jd3MtPmxpc3QubmV4dCwgc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMsCisJCQkgIGxpc3QpOworfQorCitzdGF0aWMgaW50IHdvcmtxdWV1ZV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICpjd3MgPSBwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNwdSA9IGN3cy0+Y3B1OworCXN0cnVjdCBwaWQgKnBpZDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCWlmICgmY3dzLT5saXN0ID09IHdvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0Lm5leHQpCisJCXNlcV9wcmludGYocywgIlxuIik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKworCXBpZCA9IGZpbmRfZ2V0X3BpZChjd3MtPnBpZCk7CisJaWYgKHBpZCkgeworCQl0c2sgPSBnZXRfcGlkX3Rhc2socGlkLCBQSURUWVBFX1BJRCk7CisJCWlmICh0c2spIHsKKwkJCXNlcV9wcmludGYocywgIiUzZCAlNmQgICAgICU2dSAgICAgICAlc1xuIiwgY3dzLT5jcHUsCisJCQkJICAgYXRvbWljX3JlYWQoJmN3cy0+aW5zZXJ0ZWQpLCBjd3MtPmV4ZWN1dGVkLAorCQkJCSAgIHRzay0+Y29tbSk7CisJCQlwdXRfdGFza19zdHJ1Y3QodHNrKTsKKwkJfQorCQlwdXRfcGlkKHBpZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd29ya3F1ZXVlX3N0YXRfaGVhZGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCit7CisJc2VxX3ByaW50ZihzLCAiIyBDUFUgIElOU0VSVEVEICBFWEVDVVRFRCAgIE5BTUVcbiIpOworCXNlcV9wcmludGYocywgIiMgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHxcbiIpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdHJhY2VyX3N0YXQgd29ya3F1ZXVlX3N0YXRzIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUgPSAid29ya3F1ZXVlcyIsCisJLnN0YXRfc3RhcnQgPSB3b3JrcXVldWVfc3RhdF9zdGFydCwKKwkuc3RhdF9uZXh0ID0gd29ya3F1ZXVlX3N0YXRfbmV4dCwKKwkuc3RhdF9zaG93ID0gd29ya3F1ZXVlX3N0YXRfc2hvdywKKwkuc3RhdF9oZWFkZXJzID0gd29ya3F1ZXVlX3N0YXRfaGVhZGVycworfTsKKworCitpbnQgX19pbml0IHN0YXRfd29ya3F1ZXVlX2luaXQodm9pZCkKK3sKKwlpZiAocmVnaXN0ZXJfc3RhdF90cmFjZXIoJndvcmtxdWV1ZV9zdGF0cykpIHsKKwkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlZ2lzdGVyIHdvcmtxdWV1ZSBzdGF0IHRyYWNlclxuIik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoc3RhdF93b3JrcXVldWVfaW5pdCk7CisKKy8qCisgKiBXb3JrcXVldWVzIGFyZSBjcmVhdGVkIHZlcnkgZWFybHksIGp1c3QgYWZ0ZXIgcHJlLXNtcCBpbml0Y2FsbHMuCisgKiBTbyB3ZSBtdXN0IHJlZ2lzdGVyIG91ciB0cmFjZXBvaW50cyBhdCB0aGlzIHN0YWdlLgorICovCitpbnQgX19pbml0IHRyYWNlX3dvcmtxdWV1ZV9lYXJseV9pbml0KHZvaWQpCit7CisJaW50IHJldCwgY3B1OworCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfd29ya3F1ZXVlX2luc2VydGlvbihwcm9iZV93b3JrcXVldWVfaW5zZXJ0aW9uKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3dvcmtxdWV1ZV9leGVjdXRpb24ocHJvYmVfd29ya3F1ZXVlX2V4ZWN1dGlvbik7CisJaWYgKHJldCkKKwkJZ290byBub19pbnNlcnRpb247CisKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV93b3JrcXVldWVfY3JlYXRpb24ocHJvYmVfd29ya3F1ZXVlX2NyZWF0aW9uKTsKKwlpZiAocmV0KQorCQlnb3RvIG5vX2V4ZWN1dGlvbjsKKworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3dvcmtxdWV1ZV9kZXN0cnVjdGlvbihwcm9iZV93b3JrcXVldWVfZGVzdHJ1Y3Rpb24pOworCWlmIChyZXQpCisJCWdvdG8gbm9fY3JlYXRpb247CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXNwaW5fbG9ja19pbml0KCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jayk7CisJCUlOSVRfTElTVF9IRUFEKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdCk7CisJfQorCisJcmV0dXJuIDA7CisKK25vX2NyZWF0aW9uOgorCXVucmVnaXN0ZXJfdHJhY2Vfd29ya3F1ZXVlX2NyZWF0aW9uKHByb2JlX3dvcmtxdWV1ZV9jcmVhdGlvbik7Citub19leGVjdXRpb246CisJdW5yZWdpc3Rlcl90cmFjZV93b3JrcXVldWVfZXhlY3V0aW9uKHByb2JlX3dvcmtxdWV1ZV9leGVjdXRpb24pOworbm9faW5zZXJ0aW9uOgorCXVucmVnaXN0ZXJfdHJhY2Vfd29ya3F1ZXVlX2luc2VydGlvbihwcm9iZV93b3JrcXVldWVfaW5zZXJ0aW9uKTsKK291dDoKKwlwcl93YXJuaW5nKCJ0cmFjZV93b3JrcXVldWU6IHVuYWJsZSB0byB0cmFjZSB3b3JrcXVldWVzXG4iKTsKKworCXJldHVybiAxOworfQorZWFybHlfaW5pdGNhbGwodHJhY2Vfd29ya3F1ZXVlX2Vhcmx5X2luaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlcG9pbnQuYyBiL2tlcm5lbC90cmFjZXBvaW50LmMKaW5kZXggNzk2MDI3NC4uMWVmNWQzYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlcG9pbnQuYworKysgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCkBAIC0yNzIsMTIgKzI3MiwxNSBAQAogICoKICAqIFVwZGF0ZXMgdGhlIHByb2JlIGNhbGxiYWNrIGNvcnJlc3BvbmRpbmcgdG8gYSByYW5nZSBvZiB0cmFjZXBvaW50cy4KICAqLwotdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3ZvaWQKK3RyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKIHsKIAlzdHJ1Y3QgdHJhY2Vwb2ludCAqaXRlcjsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9lbnRyeSAqbWFya19lbnRyeTsKIAorCWlmICghYmVnaW4pCisJCXJldHVybjsKKwogCW11dGV4X2xvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKIAlmb3IgKGl0ZXIgPSBiZWdpbjsgaXRlciA8IGVuZDsgaXRlcisrKSB7CiAJCW1hcmtfZW50cnkgPSBnZXRfdHJhY2Vwb2ludChpdGVyLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC91dHNuYW1lX3N5c2N0bC5jIGIva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKaW5kZXggM2IzNGIzNS4uOTIzNTljYyAxMDA2NDQKLS0tIGEva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKKysrIGIva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJdXBfd3JpdGUoJnV0c19zZW0pOwogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIC8qCiAgKglTcGVjaWFsIGNhc2Ugb2YgZG9zdHJpbmcgZm9yIHRoZSBVVFMgc3RydWN0dXJlLiBUaGlzIGhhcyBsb2NrcwogICoJdG8gb2JzZXJ2ZS4gU2hvdWxkIHRoaXMgYmUgaW4ga2VybmVsL3N5cy5jID8/Pz8KZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA5YWVkZDlmLi5iNmI5NjZjIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDx0cmFjZS93b3JrcXVldWUuaD4KIAogLyoKICAqIFRoZSBwZXItQ1BVIHdvcmtxdWV1ZSAoaWYgc2luZ2xlIHRocmVhZCwgd2UgYWx3YXlzIHVzZSB0aGUgZmlyc3QKQEAgLTQ4LDggKzQ5LDYgQEAKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKLQotCWludCBydW5fZGVwdGg7CQkvKiBEZXRlY3QgcnVuX3dvcmtxdWV1ZSgpIHJlY3Vyc2lvbiBkZXB0aCAqLwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIC8qCkBAIC0xMjUsOSArMTI0LDEzIEBACiAJcmV0dXJuICh2b2lkICopIChhdG9taWNfbG9uZ19yZWFkKCZ3b3JrLT5kYXRhKSAmIFdPUktfU1RSVUNUX1dRX0RBVEFfTUFTSyk7CiB9CiAKK0RFRklORV9UUkFDRSh3b3JrcXVldWVfaW5zZXJ0aW9uKTsKKwogc3RhdGljIHZvaWQgaW5zZXJ0X3dvcmsoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsCiAJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CisJdHJhY2Vfd29ya3F1ZXVlX2luc2VydGlvbihjd3EtPnRocmVhZCwgd29yayk7CisKIAlzZXRfd3FfZGF0YSh3b3JrLCBjd3EpOwogCS8qCiAJICogRW5zdXJlIHRoYXQgd2UgZ2V0IHRoZSByaWdodCB3b3JrLT5kYXRhIGlmIHdlIHNlZSB0aGUKQEAgLTI1OSwxNiArMjYyLDExIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9kZWxheWVkX3dvcmtfb24pOwogCitERUZJTkVfVFJBQ0Uod29ya3F1ZXVlX2V4ZWN1dGlvbik7CisKIHN0YXRpYyB2b2lkIHJ1bl93b3JrcXVldWUoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EpCiB7CiAJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQljd3EtPnJ1bl9kZXB0aCsrOwotCWlmIChjd3EtPnJ1bl9kZXB0aCA+IDMpIHsKLQkJLyogbW9ydG9uIGdldHMgdG8gZWF0IGhpcyBoYXQgKi8KLQkJcHJpbnRrKCIlczogcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkOiAlZFxuIiwKLQkJCV9fZnVuY19fLCBjd3EtPnJ1bl9kZXB0aCk7Ci0JCWR1bXBfc3RhY2soKTsKLQl9CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZjd3EtPndvcmtsaXN0KSkgewogCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsgPSBsaXN0X2VudHJ5KGN3cS0+d29ya2xpc3QubmV4dCwKIAkJCQkJCXN0cnVjdCB3b3JrX3N0cnVjdCwgZW50cnkpOwpAQCAtMjg0LDcgKzI4Miw3IEBACiAJCSAqLwogCQlzdHJ1Y3QgbG9ja2RlcF9tYXAgbG9ja2RlcF9tYXAgPSB3b3JrLT5sb2NrZGVwX21hcDsKICNlbmRpZgotCisJCXRyYWNlX3dvcmtxdWV1ZV9leGVjdXRpb24oY3dxLT50aHJlYWQsIHdvcmspOwogCQljd3EtPmN1cnJlbnRfd29yayA9IHdvcms7CiAJCWxpc3RfZGVsX2luaXQoY3dxLT53b3JrbGlzdC5uZXh0KTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjd3EtPmxvY2spOwpAQCAtMzExLDcgKzMwOSw2IEBACiAJCXNwaW5fbG9ja19pcnEoJmN3cS0+bG9jayk7CiAJCWN3cS0+Y3VycmVudF93b3JrID0gTlVMTDsKIAl9Ci0JY3dxLT5ydW5fZGVwdGgtLTsKIAlzcGluX3VubG9ja19pcnEoJmN3cS0+bG9jayk7CiB9CiAKQEAgLTM2OCwyOSArMzY1LDIwIEBACiAKIHN0YXRpYyBpbnQgZmx1c2hfY3B1X3dvcmtxdWV1ZShzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSkKIHsKLQlpbnQgYWN0aXZlOworCWludCBhY3RpdmUgPSAwOworCXN0cnVjdCB3cV9iYXJyaWVyIGJhcnI7CiAKLQlpZiAoY3dxLT50aHJlYWQgPT0gY3VycmVudCkgewotCQkvKgotCQkgKiBQcm9iYWJseSBrZXZlbnRkIHRyeWluZyB0byBmbHVzaCBpdHMgb3duIHF1ZXVlLiBTbyBzaW1wbHkgcnVuCi0JCSAqIGl0IGJ5IGhhbmQgcmF0aGVyIHRoYW4gZGVhZGxvY2tpbmcuCi0JCSAqLwotCQlydW5fd29ya3F1ZXVlKGN3cSk7CisJV0FSTl9PTihjd3EtPnRocmVhZCA9PSBjdXJyZW50KTsKKworCXNwaW5fbG9ja19pcnEoJmN3cS0+bG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZjd3EtPndvcmtsaXN0KSB8fCBjd3EtPmN1cnJlbnRfd29yayAhPSBOVUxMKSB7CisJCWluc2VydF93cV9iYXJyaWVyKGN3cSwgJmJhcnIsICZjd3EtPndvcmtsaXN0KTsKIAkJYWN0aXZlID0gMTsKLQl9IGVsc2UgewotCQlzdHJ1Y3Qgd3FfYmFycmllciBiYXJyOwotCi0JCWFjdGl2ZSA9IDA7Ci0JCXNwaW5fbG9ja19pcnEoJmN3cS0+bG9jayk7Ci0JCWlmICghbGlzdF9lbXB0eSgmY3dxLT53b3JrbGlzdCkgfHwgY3dxLT5jdXJyZW50X3dvcmsgIT0gTlVMTCkgewotCQkJaW5zZXJ0X3dxX2JhcnJpZXIoY3dxLCAmYmFyciwgJmN3cS0+d29ya2xpc3QpOwotCQkJYWN0aXZlID0gMTsKLQkJfQotCQlzcGluX3VubG9ja19pcnEoJmN3cS0+bG9jayk7Ci0KLQkJaWYgKGFjdGl2ZSkKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJhcnIuZG9uZSk7CiAJfQorCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKKworCWlmIChhY3RpdmUpCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJhcnIuZG9uZSk7CiAKIAlyZXR1cm4gYWN0aXZlOwogfQpAQCAtNzY1LDYgKzc1Myw4IEBACiAJcmV0dXJuIGN3cTsKIH0KIAorREVGSU5FX1RSQUNFKHdvcmtxdWV1ZV9jcmVhdGlvbik7CisKIHN0YXRpYyBpbnQgY3JlYXRlX3dvcmtxdWV1ZV90aHJlYWQoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsIGludCBjcHUpCiB7CiAJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSBNQVhfUlRfUFJJTy0xIH07CkBAIC03ODcsNiArNzc3LDggQEAKIAkJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2socCwgU0NIRURfRklGTywgJnBhcmFtKTsKIAljd3EtPnRocmVhZCA9IHA7CiAKKwl0cmFjZV93b3JrcXVldWVfY3JlYXRpb24oY3dxLT50aHJlYWQsIGNwdSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODY4LDYgKzg2MCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2NyZWF0ZV93b3JrcXVldWVfa2V5KTsKIAorREVGSU5FX1RSQUNFKHdvcmtxdWV1ZV9kZXN0cnVjdGlvbik7CisKIHN0YXRpYyB2b2lkIGNsZWFudXBfd29ya3F1ZXVlX3RocmVhZChzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSkKIHsKIAkvKgpAQCAtODkxLDYgKzg4NSw3IEBACiAJICogY2hlY2tzIGxpc3RfZW1wdHkoKSwgYW5kIGEgIm5vcm1hbCIgcXVldWVfd29yaygpIGNhbid0IHVzZQogCSAqIGEgZGVhZCBDUFUuCiAJICovCisJdHJhY2Vfd29ya3F1ZXVlX2Rlc3RydWN0aW9uKGN3cS0+dGhyZWFkKTsKIAlrdGhyZWFkX3N0b3AoY3dxLT50aHJlYWQpOwogCWN3cS0+dGhyZWFkID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnIGIvbGliL0tjb25maWcKaW5kZXggMmE5YzY5Zi4uOGFkZTBhNyAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25maWcKQEAgLTIsNiArMiw5IEBACiAjIExpYnJhcnkgY29uZmlndXJhdGlvbgogIwogCitjb25maWcgQklOQVJZX1BSSU5URgorCWRlZl9ib29sIG4KKwogbWVudSAiTGlicmFyeSByb3V0aW5lcyIKIAogY29uZmlnIEJJVFJFVkVSU0UKZGlmZiAtLWdpdCBhL2xpYi9jcHVtYXNrLmMgYi9saWIvY3B1bWFzay5jCmluZGV4IDMzODllMjQuLjFmNzFiOTcgMTAwNjQ0Ci0tLSBhL2xpYi9jcHVtYXNrLmMKKysrIGIvbGliL2NwdW1hc2suYwpAQCAtMTA5LDEwICsxMDksMTAgQEAKICNlbmRpZgogCS8qIEZJWE1FOiBCYW5kYWlkIHRvIHNhdmUgdXMgZnJvbSBvbGQgcHJpbWl0aXZlcyB3aGljaCBnbyB0byBOUl9DUFVTLiAqLwogCWlmICgqbWFzaykgeworCQl1bnNpZ25lZCBjaGFyICpwdHIgPSAodW5zaWduZWQgY2hhciAqKWNwdW1hc2tfYml0cygqbWFzayk7CiAJCXVuc2lnbmVkIGludCB0YWlsOwogCQl0YWlsID0gQklUU19UT19MT05HUyhOUl9DUFVTIC0gbnJfY3B1bWFza19iaXRzKSAqIHNpemVvZihsb25nKTsKLQkJbWVtc2V0KGNwdW1hc2tfYml0cygqbWFzaykgKyBjcHVtYXNrX3NpemUoKSAtIHRhaWwsCi0JCSAgICAgICAwLCB0YWlsKTsKKwkJbWVtc2V0KHB0ciArIGNwdW1hc2tfc2l6ZSgpIC0gdGFpbCwgMCwgdGFpbCk7CiAJfQogCiAJcmV0dXJuICptYXNrICE9IE5VTEw7CmRpZmYgLS1naXQgYS9saWIvZGVidWdvYmplY3RzLmMgYi9saWIvZGVidWdvYmplY3RzLmMKaW5kZXggNWQ5OWJlMS4uMjc1NWEzYiAxMDA2NDQKLS0tIGEvbGliL2RlYnVnb2JqZWN0cy5jCisrKyBiL2xpYi9kZWJ1Z29iamVjdHMuYwpAQCAtMzAsNyArMzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRlYnVnX2J1Y2tldAlvYmpfaGFzaFtPREVCVUdfSEFTSF9TSVpFXTsKIAotc3RhdGljIHN0cnVjdCBkZWJ1Z19vYmoJCW9ial9zdGF0aWNfcG9vbFtPREVCVUdfUE9PTF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgZGVidWdfb2JqCQlvYmpfc3RhdGljX3Bvb2xbT0RFQlVHX1BPT0xfU0laRV0gX19pbml0ZGF0YTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhwb29sX2xvY2spOwogCkBAIC01MCwxMiArNTAsMjMgQEAKIAogc3RhdGljIHN0cnVjdCBkZWJ1Z19vYmpfZGVzY3IJKmRlc2NyX3Rlc3QgIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyB2b2lkIGZyZWVfb2JqX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBERUNMQVJFX1dPUksoZGVidWdfb2JqX3dvcmssIGZyZWVfb2JqX3dvcmspOworCiBzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfb2JqZWN0X2RlYnVnKGNoYXIgKnN0cikKIHsKIAlkZWJ1Z19vYmplY3RzX2VuYWJsZWQgPSAxOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX29iamVjdF9kZWJ1ZyhjaGFyICpzdHIpCit7CisJZGVidWdfb2JqZWN0c19lbmFibGVkID0gMDsKKwlyZXR1cm4gMDsKK30KKwogZWFybHlfcGFyYW0oImRlYnVnX29iamVjdHMiLCBlbmFibGVfb2JqZWN0X2RlYnVnKTsKK2Vhcmx5X3BhcmFtKCJub19kZWJ1Z19vYmplY3RzIiwgZGlzYWJsZV9vYmplY3RfZGVidWcpOwogCiBzdGF0aWMgY29uc3QgY2hhciAqb2JqX3N0YXRlc1tPREVCVUdfU1RBVEVfTUFYXSA9IHsKIAlbT0RFQlVHX1NUQVRFX05PTkVdCQk9ICJub25lIiwKQEAgLTE0NiwyNSArMTU3LDUxIEBACiB9CiAKIC8qCi0gKiBQdXQgdGhlIG9iamVjdCBiYWNrIGludG8gdGhlIHBvb2wgb3IgZ2l2ZSBpdCBiYWNrIHRvIGttZW1fY2FjaGU6CisgKiB3b3JrcXVldWUgZnVuY3Rpb24gdG8gZnJlZSBvYmplY3RzLgorICovCitzdGF0aWMgdm9pZCBmcmVlX29ial93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGVidWdfb2JqICpvYmo7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAob2JqX3Bvb2xfZnJlZSA+IE9ERUJVR19QT09MX1NJWkUpIHsKKwkJb2JqID0gaGxpc3RfZW50cnkob2JqX3Bvb2wuZmlyc3QsIHR5cGVvZigqb2JqKSwgbm9kZSk7CisJCWhsaXN0X2RlbCgmb2JqLT5ub2RlKTsKKwkJb2JqX3Bvb2xfZnJlZS0tOworCQkvKgorCQkgKiBXZSByZWxlYXNlIHBvb2xfbG9jayBhY3Jvc3Mga21lbV9jYWNoZV9mcmVlKCkgdG8KKwkJICogYXZvaWQgY29udGVudGlvbiBvbiBwb29sX2xvY2suCisJCSAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sX2xvY2ssIGZsYWdzKTsKKwkJa21lbV9jYWNoZV9mcmVlKG9ial9jYWNoZSwgb2JqKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFB1dCB0aGUgb2JqZWN0IGJhY2sgaW50byB0aGUgcG9vbCBhbmQgc2NoZWR1bGUgd29yayB0byBmcmVlIG9iamVjdHMKKyAqIGlmIG5lY2Vzc2FyeS4KICAqLwogc3RhdGljIHZvaWQgZnJlZV9vYmplY3Qoc3RydWN0IGRlYnVnX29iaiAqb2JqKQogewotCXVuc2lnbmVkIGxvbmcgaWR4ID0gKHVuc2lnbmVkIGxvbmcpKG9iaiAtIG9ial9zdGF0aWNfcG9vbCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc2NoZWQgPSAwOwogCi0JaWYgKG9ial9wb29sX2ZyZWUgPCBPREVCVUdfUE9PTF9TSVpFIHx8IGlkeCA8IE9ERUJVR19QT09MX1NJWkUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOwotCQlobGlzdF9hZGRfaGVhZCgmb2JqLT5ub2RlLCAmb2JqX3Bvb2wpOwotCQlvYmpfcG9vbF9mcmVlKys7Ci0JCW9ial9wb29sX3VzZWQtLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOwotCQlvYmpfcG9vbF91c2VkLS07Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2xfbG9jaywgZmxhZ3MpOwotCQlrbWVtX2NhY2hlX2ZyZWUob2JqX2NhY2hlLCBvYmopOwotCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbF9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBzY2hlZHVsZSB3b3JrIHdoZW4gdGhlIHBvb2wgaXMgZmlsbGVkIGFuZCB0aGUgY2FjaGUgaXMKKwkgKiBpbml0aWFsaXplZDoKKwkgKi8KKwlpZiAob2JqX3Bvb2xfZnJlZSA+IE9ERUJVR19QT09MX1NJWkUgJiYgb2JqX2NhY2hlKQorCQlzY2hlZCA9ICF3b3JrX3BlbmRpbmcoJmRlYnVnX29ial93b3JrKTsKKwlobGlzdF9hZGRfaGVhZCgmb2JqLT5ub2RlLCAmb2JqX3Bvb2wpOworCW9ial9wb29sX2ZyZWUrKzsKKwlvYmpfcG9vbF91c2VkLS07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7CisJaWYgKHNjaGVkKQorCQlzY2hlZHVsZV93b3JrKCZkZWJ1Z19vYmpfd29yayk7CiB9CiAKIC8qCkBAIC04NzYsNiArOTEzLDYzIEBACiB9CiAKIC8qCisgKiBDb252ZXJ0IHRoZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBvYmplY3RzIHRvIGR5bmFtaWMgb25lczoKKyAqLworc3RhdGljIGludCBkZWJ1Z19vYmplY3RzX3JlcGxhY2Vfc3RhdGljX29iamVjdHModm9pZCkKK3sKKwlzdHJ1Y3QgZGVidWdfYnVja2V0ICpkYiA9IG9ial9oYXNoOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworCXN0cnVjdCBkZWJ1Z19vYmogKm9iaiwgKm5ldzsKKwlITElTVF9IRUFEKG9iamVjdHMpOworCWludCBpLCBjbnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE9ERUJVR19QT09MX1NJWkU7IGkrKykgeworCQlvYmogPSBrbWVtX2NhY2hlX3phbGxvYyhvYmpfY2FjaGUsIEdGUF9LRVJORUwpOworCQlpZiAoIW9iaikKKwkJCWdvdG8gZnJlZTsKKwkJaGxpc3RfYWRkX2hlYWQoJm9iai0+bm9kZSwgJm9iamVjdHMpOworCX0KKworCS8qCisJICogV2hlbiBkZWJ1Z19vYmplY3RzX21lbV9pbml0KCkgaXMgY2FsbGVkIHdlIGtub3cgdGhhdCBvbmx5CisJICogb25lIENQVSBpcyB1cCwgc28gZGlzYWJsaW5nIGludGVycnVwdHMgaXMgZW5vdWdoCisJICogcHJvdGVjdGlvbi4gVGhpcyBhdm9pZHMgdGhlIGxvY2tkZXAgaGVsbCBvZiBsb2NrIG9yZGVyaW5nLgorCSAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBSZW1vdmUgdGhlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIG9iamVjdHMgZnJvbSB0aGUgcG9vbCAqLworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBub2RlLCB0bXAsICZvYmpfcG9vbCwgbm9kZSkKKwkJaGxpc3RfZGVsKCZvYmotPm5vZGUpOworCS8qIE1vdmUgdGhlIGFsbG9jYXRlZCBvYmplY3RzIHRvIHRoZSBwb29sICovCisJaGxpc3RfbW92ZV9saXN0KCZvYmplY3RzLCAmb2JqX3Bvb2wpOworCisJLyogUmVwbGFjZSB0aGUgYWN0aXZlIG9iamVjdCByZWZlcmVuY2VzICovCisJZm9yIChpID0gMDsgaSA8IE9ERUJVR19IQVNIX1NJWkU7IGkrKywgZGIrKykgeworCQlobGlzdF9tb3ZlX2xpc3QoJmRiLT5saXN0LCAmb2JqZWN0cyk7CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCBub2RlLCAmb2JqZWN0cywgbm9kZSkgeworCQkJbmV3ID0gaGxpc3RfZW50cnkob2JqX3Bvb2wuZmlyc3QsIHR5cGVvZigqb2JqKSwgbm9kZSk7CisJCQlobGlzdF9kZWwoJm5ldy0+bm9kZSk7CisJCQkvKiBjb3B5IG9iamVjdCBkYXRhICovCisJCQkqbmV3ID0gKm9iajsKKwkJCWhsaXN0X2FkZF9oZWFkKCZuZXctPm5vZGUsICZkYi0+bGlzdCk7CisJCQljbnQrKzsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJPREVCVUc6ICVkIG9mICVkIGFjdGl2ZSBvYmplY3RzIHJlcGxhY2VkXG4iLCBjbnQsCisJICAgICAgIG9ial9wb29sX3VzZWQpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlyZXR1cm4gMDsKK2ZyZWU6CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5vZGUsIHRtcCwgJm9iamVjdHMsIG5vZGUpIHsKKwkJaGxpc3RfZGVsKCZvYmotPm5vZGUpOworCQlrbWVtX2NhY2hlX2ZyZWUob2JqX2NhY2hlLCBvYmopOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKICAqIENhbGxlZCBhZnRlciB0aGUga21lbV9jYWNoZXMgYXJlIGZ1bmN0aW9uYWwgdG8gc2V0dXAgYSBkZWRpY2F0ZWQKICAqIGNhY2hlIHBvb2wsIHdoaWNoIGhhcyB0aGUgU0xBQl9ERUJVR19PQkpFQ1RTIGZsYWcgc2V0LiBUaGlzIGZsYWcKICAqIHByZXZlbnRzIHRoYXQgdGhlIGRlYnVnIGNvZGUgaXMgY2FsbGVkIG9uIGttZW1fY2FjaGVfZnJlZSgpIGZvciB0aGUKQEAgLTg5MCw4ICs5ODQsMTEgQEAKIAkJCQkgICAgICBzaXplb2YgKHN0cnVjdCBkZWJ1Z19vYmopLCAwLAogCQkJCSAgICAgIFNMQUJfREVCVUdfT0JKRUNUUywgTlVMTCk7CiAKLQlpZiAoIW9ial9jYWNoZSkKKwlpZiAoIW9ial9jYWNoZSB8fCBkZWJ1Z19vYmplY3RzX3JlcGxhY2Vfc3RhdGljX29iamVjdHMoKSkgewogCQlkZWJ1Z19vYmplY3RzX2VuYWJsZWQgPSAwOwotCWVsc2UKKwkJaWYgKG9ial9jYWNoZSkKKwkJCWttZW1fY2FjaGVfZGVzdHJveShvYmpfY2FjaGUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJPREVCVUc6IG91dCBvZiBtZW1vcnkuXG4iKTsKKwl9IGVsc2UKIAkJZGVidWdfb2JqZWN0c19zZWxmdGVzdCgpOwogfQpkaWZmIC0tZ2l0IGEvbGliL2lkci5jIGIvbGliL2lkci5jCmluZGV4IGRhYjRiY2EuLjgwY2E5YWMgMTAwNjQ0Ci0tLSBhL2xpYi9pZHIuYworKysgYi9saWIvaWRyLmMKQEAgLTU3OSw2ICs1NzksNTIgQEAKIEVYUE9SVF9TWU1CT0woaWRyX2Zvcl9lYWNoKTsKIAogLyoqCisgKiBpZHJfZ2V0X25leHQgLSBsb29rdXAgbmV4dCBvYmplY3Qgb2YgaWQgdG8gZ2l2ZW4gaWQuCisgKiBAaWRwOiBpZHIgaGFuZGxlCisgKiBAaWQ6ICBwb2ludGVyIHRvIGxvb2t1cCBrZXkKKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcmVnaXN0ZXJlZCBvYmplY3Qgd2l0aCBpZCwgd2hpY2ggaXMgbmV4dCBudW1iZXIgdG8KKyAqIGdpdmVuIGlkLgorICovCisKK3ZvaWQgKmlkcl9nZXRfbmV4dChzdHJ1Y3QgaWRyICppZHAsIGludCAqbmV4dGlkcCkKK3sKKwlzdHJ1Y3QgaWRyX2xheWVyICpwLCAqcGFbTUFYX0xFVkVMXTsKKwlzdHJ1Y3QgaWRyX2xheWVyICoqcGFhID0gJnBhWzBdOworCWludCBpZCA9ICpuZXh0aWRwOworCWludCBuLCBtYXg7CisKKwkvKiBmaW5kIGZpcnN0IGVudCAqLworCW4gPSBpZHAtPmxheWVycyAqIElEUl9CSVRTOworCW1heCA9IDEgPDwgbjsKKwlwID0gcmN1X2RlcmVmZXJlbmNlKGlkcC0+dG9wKTsKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKGlkIDwgbWF4KSB7CisJCXdoaWxlIChuID4gMCAmJiBwKSB7CisJCQluIC09IElEUl9CSVRTOworCQkJKnBhYSsrID0gcDsKKwkJCXAgPSByY3VfZGVyZWZlcmVuY2UocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CisJCX0KKworCQlpZiAocCkgeworCQkJKm5leHRpZHAgPSBpZDsKKwkJCXJldHVybiBwOworCQl9CisKKwkJaWQgKz0gMSA8PCBuOworCQl3aGlsZSAobiA8IGZscyhpZCkpIHsKKwkJCW4gKz0gSURSX0JJVFM7CisJCQlwID0gKi0tcGFhOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisKKworLyoqCiAgKiBpZHJfcmVwbGFjZSAtIHJlcGxhY2UgcG9pbnRlciBmb3IgZ2l2ZW4gaWQKICAqIEBpZHA6IGlkciBoYW5kbGUKICAqIEBwdHI6IHBvaW50ZXIgeW91IHdhbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZApkaWZmIC0tZ2l0IGEvbGliL2xvY2tpbmctc2VsZnRlc3QuYyBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LmMKaW5kZXggMjgwMzMyYy4uNjE5MzEzZSAxMDA2NDQKLS0tIGEvbGliL2xvY2tpbmctc2VsZnRlc3QuYworKysgYi9saWIvbG9ja2luZy1zZWxmdGVzdC5jCkBAIC0xNTcsMTEgKzE1NywxMSBAQAogI2RlZmluZSBTT0ZUSVJRX0VOVEVSKCkJCQkJXAogCQlsb2NhbF9iaF9kaXNhYmxlKCk7CQlcCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CQlcCi0JCXRyYWNlX3NvZnRpcnFfZW50ZXIoKTsJCVwKKwkJbG9ja2RlcF9zb2Z0aXJxX2VudGVyKCk7CVwKIAkJV0FSTl9PTighaW5fc29mdGlycSgpKTsKIAogI2RlZmluZSBTT0ZUSVJRX0VYSVQoKQkJCQlcCi0JCXRyYWNlX3NvZnRpcnFfZXhpdCgpOwkJXAorCQlsb2NrZGVwX3NvZnRpcnFfZXhpdCgpOwkJXAogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CQlcCiAJCWxvY2FsX2JoX2VuYWJsZSgpOwogCmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IDBmYmQwMTIuLmJlMzAwMWYgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC0zOTYsNyArMzk2LDM4IEBACiAjZGVmaW5lIFNNQUxMCTMyCQkvKiBNdXN0IGJlIDMyID09IDB4MjAgKi8KICNkZWZpbmUgU1BFQ0lBTAk2NAkJLyogMHggKi8KIAotc3RhdGljIGNoYXIgKm51bWJlcihjaGFyICpidWYsIGNoYXIgKmVuZCwgdW5zaWduZWQgbG9uZyBsb25nIG51bSwgaW50IGJhc2UsIGludCBzaXplLCBpbnQgcHJlY2lzaW9uLCBpbnQgdHlwZSkKK2VudW0gZm9ybWF0X3R5cGUgeworCUZPUk1BVF9UWVBFX05PTkUsIC8qIEp1c3QgYSBzdHJpbmcgcGFydCAqLworCUZPUk1BVF9UWVBFX1dJRFRILAorCUZPUk1BVF9UWVBFX1BSRUNJU0lPTiwKKwlGT1JNQVRfVFlQRV9DSEFSLAorCUZPUk1BVF9UWVBFX1NUUiwKKwlGT1JNQVRfVFlQRV9QVFIsCisJRk9STUFUX1RZUEVfUEVSQ0VOVF9DSEFSLAorCUZPUk1BVF9UWVBFX0lOVkFMSUQsCisJRk9STUFUX1RZUEVfTE9OR19MT05HLAorCUZPUk1BVF9UWVBFX1VMT05HLAorCUZPUk1BVF9UWVBFX0xPTkcsCisJRk9STUFUX1RZUEVfVVNIT1JULAorCUZPUk1BVF9UWVBFX1NIT1JULAorCUZPUk1BVF9UWVBFX1VJTlQsCisJRk9STUFUX1RZUEVfSU5ULAorCUZPUk1BVF9UWVBFX05SQ0hBUlMsCisJRk9STUFUX1RZUEVfU0laRV9ULAorCUZPUk1BVF9UWVBFX1BUUkRJRkYKK307CisKK3N0cnVjdCBwcmludGZfc3BlYyB7CisJZW51bSBmb3JtYXRfdHlwZQl0eXBlOworCWludAkJCWZsYWdzOwkJLyogZmxhZ3MgdG8gbnVtYmVyKCkgKi8KKwlpbnQJCQlmaWVsZF93aWR0aDsJLyogd2lkdGggb2Ygb3V0cHV0IGZpZWxkICovCisJaW50CQkJYmFzZTsKKwlpbnQJCQlwcmVjaXNpb247CS8qICMgb2YgZGlnaXRzL2NoYXJzICovCisJaW50CQkJcXVhbGlmaWVyOworfTsKKworc3RhdGljIGNoYXIgKm51bWJlcihjaGFyICpidWYsIGNoYXIgKmVuZCwgdW5zaWduZWQgbG9uZyBsb25nIG51bSwKKwkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQogewogCS8qIHdlIGFyZSBjYWxsZWQgd2l0aCBiYXNlIDgsIDEwIG9yIDE2LCBvbmx5LCB0aHVzIGRvbid0IG5lZWQgIkcuLi4iICAqLwogCXN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1sxNl0gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7IC8qICJHSElKS0xNTk9QUVJTVFVWV1hZWiI7ICovCkBAIC00MDQsMzIgKzQzNSwzMiBAQAogCWNoYXIgdG1wWzY2XTsKIAljaGFyIHNpZ247CiAJY2hhciBsb2Nhc2U7Ci0JaW50IG5lZWRfcGZ4ID0gKCh0eXBlICYgU1BFQ0lBTCkgJiYgYmFzZSAhPSAxMCk7CisJaW50IG5lZWRfcGZ4ID0gKChzcGVjLmZsYWdzICYgU1BFQ0lBTCkgJiYgc3BlYy5iYXNlICE9IDEwKTsKIAlpbnQgaTsKIAogCS8qIGxvY2FzZSA9IDAgb3IgMHgyMC4gT1JpbmcgZGlnaXRzIG9yIGxldHRlcnMgd2l0aCAnbG9jYXNlJwogCSAqIHByb2R1Y2VzIHNhbWUgZGlnaXRzIG9yIChtYXliZSBsb3dlcmNhc2VkKSBsZXR0ZXJzICovCi0JbG9jYXNlID0gKHR5cGUgJiBTTUFMTCk7Ci0JaWYgKHR5cGUgJiBMRUZUKQotCQl0eXBlICY9IH5aRVJPUEFEOworCWxvY2FzZSA9IChzcGVjLmZsYWdzICYgU01BTEwpOworCWlmIChzcGVjLmZsYWdzICYgTEVGVCkKKwkJc3BlYy5mbGFncyAmPSB+WkVST1BBRDsKIAlzaWduID0gMDsKLQlpZiAodHlwZSAmIFNJR04pIHsKKwlpZiAoc3BlYy5mbGFncyAmIFNJR04pIHsKIAkJaWYgKChzaWduZWQgbG9uZyBsb25nKSBudW0gPCAwKSB7CiAJCQlzaWduID0gJy0nOwogCQkJbnVtID0gLSAoc2lnbmVkIGxvbmcgbG9uZykgbnVtOwotCQkJc2l6ZS0tOwotCQl9IGVsc2UgaWYgKHR5cGUgJiBQTFVTKSB7CisJCQlzcGVjLmZpZWxkX3dpZHRoLS07CisJCX0gZWxzZSBpZiAoc3BlYy5mbGFncyAmIFBMVVMpIHsKIAkJCXNpZ24gPSAnKyc7Ci0JCQlzaXplLS07Ci0JCX0gZWxzZSBpZiAodHlwZSAmIFNQQUNFKSB7CisJCQlzcGVjLmZpZWxkX3dpZHRoLS07CisJCX0gZWxzZSBpZiAoc3BlYy5mbGFncyAmIFNQQUNFKSB7CiAJCQlzaWduID0gJyAnOwotCQkJc2l6ZS0tOworCQkJc3BlYy5maWVsZF93aWR0aC0tOwogCQl9CiAJfQogCWlmIChuZWVkX3BmeCkgewotCQlzaXplLS07Ci0JCWlmIChiYXNlID09IDE2KQotCQkJc2l6ZS0tOworCQlzcGVjLmZpZWxkX3dpZHRoLS07CisJCWlmIChzcGVjLmJhc2UgPT0gMTYpCisJCQlzcGVjLmZpZWxkX3dpZHRoLS07CiAJfQogCiAJLyogZ2VuZXJhdGUgZnVsbCBzdHJpbmcgaW4gdG1wW10sIGluIHJldmVyc2Ugb3JkZXIgKi8KQEAgLTQ0MSwxMCArNDcyLDEwIEBACiAJCXRtcFtpKytdID0gKGRpZ2l0c1tkb19kaXYobnVtLGJhc2UpXSB8IGxvY2FzZSk7CiAJfSB3aGlsZSAobnVtICE9IDApOwogCSovCi0JZWxzZSBpZiAoYmFzZSAhPSAxMCkgeyAvKiA4IG9yIDE2ICovCi0JCWludCBtYXNrID0gYmFzZSAtIDE7CisJZWxzZSBpZiAoc3BlYy5iYXNlICE9IDEwKSB7IC8qIDggb3IgMTYgKi8KKwkJaW50IG1hc2sgPSBzcGVjLmJhc2UgLSAxOwogCQlpbnQgc2hpZnQgPSAzOwotCQlpZiAoYmFzZSA9PSAxNikgc2hpZnQgPSA0OworCQlpZiAoc3BlYy5iYXNlID09IDE2KSBzaGlmdCA9IDQ7CiAJCWRvIHsKIAkJCXRtcFtpKytdID0gKGRpZ2l0c1soKHVuc2lnbmVkIGNoYXIpbnVtKSAmIG1hc2tdIHwgbG9jYXNlKTsKIAkJCW51bSA+Pj0gc2hpZnQ7CkBAIC00NTQsMTIgKzQ4NSwxMiBAQAogCX0KIAogCS8qIHByaW50aW5nIDEwMCB1c2luZyAlMmQgZ2l2ZXMgIjEwMCIsIG5vdCAiMDAiICovCi0JaWYgKGkgPiBwcmVjaXNpb24pCi0JCXByZWNpc2lvbiA9IGk7CisJaWYgKGkgPiBzcGVjLnByZWNpc2lvbikKKwkJc3BlYy5wcmVjaXNpb24gPSBpOwogCS8qIGxlYWRpbmcgc3BhY2UgcGFkZGluZyAqLwotCXNpemUgLT0gcHJlY2lzaW9uOwotCWlmICghKHR5cGUgJiAoWkVST1BBRCtMRUZUKSkpIHsKLQkJd2hpbGUoLS1zaXplID49IDApIHsKKwlzcGVjLmZpZWxkX3dpZHRoIC09IHNwZWMucHJlY2lzaW9uOworCWlmICghKHNwZWMuZmxhZ3MgJiAoWkVST1BBRCtMRUZUKSkpIHsKKwkJd2hpbGUoLS1zcGVjLmZpZWxkX3dpZHRoID49IDApIHsKIAkJCWlmIChidWYgPCBlbmQpCiAJCQkJKmJ1ZiA9ICcgJzsKIAkJCSsrYnVmOwpAQCAtNDc2LDIzICs1MDcsMjMgQEAKIAkJaWYgKGJ1ZiA8IGVuZCkKIAkJCSpidWYgPSAnMCc7CiAJCSsrYnVmOwotCQlpZiAoYmFzZSA9PSAxNikgeworCQlpZiAoc3BlYy5iYXNlID09IDE2KSB7CiAJCQlpZiAoYnVmIDwgZW5kKQogCQkJCSpidWYgPSAoJ1gnIHwgbG9jYXNlKTsKIAkJCSsrYnVmOwogCQl9CiAJfQogCS8qIHplcm8gb3Igc3BhY2UgcGFkZGluZyAqLwotCWlmICghKHR5cGUgJiBMRUZUKSkgewotCQljaGFyIGMgPSAodHlwZSAmIFpFUk9QQUQpID8gJzAnIDogJyAnOwotCQl3aGlsZSAoLS1zaXplID49IDApIHsKKwlpZiAoIShzcGVjLmZsYWdzICYgTEVGVCkpIHsKKwkJY2hhciBjID0gKHNwZWMuZmxhZ3MgJiBaRVJPUEFEKSA/ICcwJyA6ICcgJzsKKwkJd2hpbGUgKC0tc3BlYy5maWVsZF93aWR0aCA+PSAwKSB7CiAJCQlpZiAoYnVmIDwgZW5kKQogCQkJCSpidWYgPSBjOwogCQkJKytidWY7CiAJCX0KIAl9CiAJLyogaG1tIGV2ZW4gbW9yZSB6ZXJvIHBhZGRpbmc/ICovCi0Jd2hpbGUgKGkgPD0gLS1wcmVjaXNpb24pIHsKKwl3aGlsZSAoaSA8PSAtLXNwZWMucHJlY2lzaW9uKSB7CiAJCWlmIChidWYgPCBlbmQpCiAJCQkqYnVmID0gJzAnOwogCQkrK2J1ZjsKQEAgLTUwNCw3ICs1MzUsNyBAQAogCQkrK2J1ZjsKIAl9CiAJLyogdHJhaWxpbmcgc3BhY2UgcGFkZGluZyAqLwotCXdoaWxlICgtLXNpemUgPj0gMCkgeworCXdoaWxlICgtLXNwZWMuZmllbGRfd2lkdGggPj0gMCkgewogCQlpZiAoYnVmIDwgZW5kKQogCQkJKmJ1ZiA9ICcgJzsKIAkJKytidWY7CkBAIC01MTIsMTcgKzU0MywxNyBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyBjaGFyICpzdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIGNoYXIgKnMsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKnN0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgY2hhciAqcywgc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJaW50IGxlbiwgaTsKIAogCWlmICgodW5zaWduZWQgbG9uZylzIDwgUEFHRV9TSVpFKQogCQlzID0gIjxOVUxMPiI7CiAKLQlsZW4gPSBzdHJubGVuKHMsIHByZWNpc2lvbik7CisJbGVuID0gc3RybmxlbihzLCBzcGVjLnByZWNpc2lvbik7CiAKLQlpZiAoIShmbGFncyAmIExFRlQpKSB7Ci0JCXdoaWxlIChsZW4gPCBmaWVsZF93aWR0aC0tKSB7CisJaWYgKCEoc3BlYy5mbGFncyAmIExFRlQpKSB7CisJCXdoaWxlIChsZW4gPCBzcGVjLmZpZWxkX3dpZHRoLS0pIHsKIAkJCWlmIChidWYgPCBlbmQpCiAJCQkJKmJ1ZiA9ICcgJzsKIAkJCSsrYnVmOwpAQCAtNTMzLDcgKzU2NCw3IEBACiAJCQkqYnVmID0gKnM7CiAJCSsrYnVmOyArK3M7CiAJfQotCXdoaWxlIChsZW4gPCBmaWVsZF93aWR0aC0tKSB7CisJd2hpbGUgKGxlbiA8IHNwZWMuZmllbGRfd2lkdGgtLSkgewogCQlpZiAoYnVmIDwgZW5kKQogCQkJKmJ1ZiA9ICcgJzsKIAkJKytidWY7CkBAIC01NDEsMjEgKzU3MiwyNCBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyBjaGFyICpzeW1ib2xfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB2b2lkICpwdHIsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKnN5bWJvbF9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHZvaWQgKnB0ciwKKwkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKIAljaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dOwogCXNwcmludF9zeW1ib2woc3ltLCB2YWx1ZSk7Ci0JcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgc3ltLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgc3ltLCBzcGVjKTsKICNlbHNlCi0JZmllbGRfd2lkdGggPSAyKnNpemVvZih2b2lkICopOwotCWZsYWdzIHw9IFNQRUNJQUwgfCBTTUFMTCB8IFpFUk9QQUQ7Ci0JcmV0dXJuIG51bWJlcihidWYsIGVuZCwgdmFsdWUsIDE2LCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJc3BlYy5maWVsZF93aWR0aCA9IDIqc2l6ZW9mKHZvaWQgKik7CisJc3BlYy5mbGFncyB8PSBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEOworCXNwZWMuYmFzZSA9IDE2OworCXJldHVybiBudW1iZXIoYnVmLCBlbmQsIHZhbHVlLCBzcGVjKTsKICNlbmRpZgogfQogCi1zdGF0aWMgY2hhciAqcmVzb3VyY2Vfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IGZpZWxkX3dpZHRoLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MpCitzdGF0aWMgY2hhciAqcmVzb3VyY2Vfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKIHsKICNpZm5kZWYgSU9fUlNSQ19QUklOVEtfU0laRQogI2RlZmluZSBJT19SU1JDX1BSSU5US19TSVpFCTQKQEAgLTU2NCw3ICs1OTgsMTEgQEAKICNpZm5kZWYgTUVNX1JTUkNfUFJJTlRLX1NJWkUKICNkZWZpbmUgTUVNX1JTUkNfUFJJTlRLX1NJWkUJOAogI2VuZGlmCi0KKwlzdHJ1Y3QgcHJpbnRmX3NwZWMgbnVtX3NwZWMgPSB7CisJCS5iYXNlID0gMTYsCisJCS5wcmVjaXNpb24gPSAtMSwKKwkJLmZsYWdzID0gU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRCwKKwl9OwogCS8qIHJvb20gZm9yIHRoZSBhY3R1YWwgbnVtYmVycywgdGhlIHR3byAiMHgiLCAtLCBbLCBdIGFuZCB0aGUgZmluYWwgemVybyAqLwogCWNoYXIgc3ltWzQqc2l6ZW9mKHJlc291cmNlX3NpemVfdCkgKyA4XTsKIAljaGFyICpwID0gc3ltLCAqcGVuZCA9IHN5bSArIHNpemVvZihzeW0pOwpAQCAtNTc2LDE3ICs2MTQsMTggQEAKIAkJc2l6ZSA9IE1FTV9SU1JDX1BSSU5US19TSVpFOwogCiAJKnArKyA9ICdbJzsKLQlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+c3RhcnQsIDE2LCBzaXplLCAtMSwgU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRCk7CisJbnVtX3NwZWMuZmllbGRfd2lkdGggPSBzaXplOworCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5zdGFydCwgbnVtX3NwZWMpOwogCSpwKysgPSAnLSc7Ci0JcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPmVuZCwgMTYsIHNpemUsIC0xLCBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEKTsKKwlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+ZW5kLCBudW1fc3BlYyk7CiAJKnArKyA9ICddJzsKIAkqcCA9IDA7CiAKLQlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBzeW0sIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBzeW0sIHNwZWMpOwogfQogCi1zdGF0aWMgY2hhciAqbWFjX2FkZHJlc3Nfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1OCAqYWRkciwgaW50IGZpZWxkX3dpZHRoLAotCQkJCWludCBwcmVjaXNpb24sIGludCBmbGFncykKK3N0YXRpYyBjaGFyICptYWNfYWRkcmVzc19zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLAorCQkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQogewogCWNoYXIgbWFjX2FkZHJbNiAqIDNdOyAvKiAoNiAqIDIgaGV4IGRpZ2l0cyksIDUgY29sb25zIGFuZCB0cmFpbGluZyB6ZXJvICovCiAJY2hhciAqcCA9IG1hY19hZGRyOwpAQCAtNTk0LDE2ICs2MzMsMTcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJcCA9IHBhY2tfaGV4X2J5dGUocCwgYWRkcltpXSk7Ci0JCWlmICghKGZsYWdzICYgU1BFQ0lBTCkgJiYgaSAhPSA1KQorCQlpZiAoIShzcGVjLmZsYWdzICYgU1BFQ0lBTCkgJiYgaSAhPSA1KQogCQkJKnArKyA9ICc6JzsKIAl9CiAJKnAgPSAnXDAnOworCXNwZWMuZmxhZ3MgJj0gflNQRUNJQUw7CiAKLQlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBtYWNfYWRkciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MgJiB+U1BFQ0lBTCk7CisJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgbWFjX2FkZHIsIHNwZWMpOwogfQogCi1zdGF0aWMgY2hhciAqaXA2X2FkZHJfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1OCAqYWRkciwgaW50IGZpZWxkX3dpZHRoLAotCQkJIGludCBwcmVjaXNpb24sIGludCBmbGFncykKK3N0YXRpYyBjaGFyICppcDZfYWRkcl9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLAorCQkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQogewogCWNoYXIgaXA2X2FkZHJbOCAqIDVdOyAvKiAoOCAqIDQgaGV4IGRpZ2l0cyksIDcgY29sb25zIGFuZCB0cmFpbGluZyB6ZXJvICovCiAJY2hhciAqcCA9IGlwNl9hZGRyOwpAQCAtNjEyLDE2ICs2NTIsMTcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHJbMiAqIGldKTsKIAkJcCA9IHBhY2tfaGV4X2J5dGUocCwgYWRkclsyICogaSArIDFdKTsKLQkJaWYgKCEoZmxhZ3MgJiBTUEVDSUFMKSAmJiBpICE9IDcpCisJCWlmICghKHNwZWMuZmxhZ3MgJiBTUEVDSUFMKSAmJiBpICE9IDcpCiAJCQkqcCsrID0gJzonOwogCX0KIAkqcCA9ICdcMCc7CisJc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKIAotCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIGlwNl9hZGRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyAmIH5TUEVDSUFMKTsKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBpcDZfYWRkciwgc3BlYyk7CiB9CiAKLXN0YXRpYyBjaGFyICppcDRfYWRkcl9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLCBpbnQgZmllbGRfd2lkdGgsCi0JCQkgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKmlwNF9hZGRyX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgdTggKmFkZHIsCisJCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJY2hhciBpcDRfYWRkcls0ICogNF07IC8qICg0ICogMyBkZWNpbWFsIGRpZ2l0cyksIDMgZG90cyBhbmQgdHJhaWxpbmcgemVybyAqLwogCWNoYXIgdGVtcFszXTsJLyogaG9sZCBlYWNoIElQIHF1YWQgaW4gcmV2ZXJzZSBvcmRlciAqLwpAQCAtNjM3LDggKzY3OCw5IEBACiAJCQkqcCsrID0gJy4nOwogCX0KIAkqcCA9ICdcMCc7CisJc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKIAotCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIGlwNF9hZGRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyAmIH5TUEVDSUFMKTsKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBpcDRfYWRkciwgc3BlYyk7CiB9CiAKIC8qCkBAIC02NjMsNDEgKzcwNSwyMzMgQEAKICAqIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSByZWFsbHkgZnVuY3Rpb24gZGVzY3JpcHRvcnMsIHdoaWNoIGNvbnRhaW4gYQogICogcG9pbnRlciB0byB0aGUgcmVhbCBhZGRyZXNzLgogICovCi1zdGF0aWMgY2hhciAqcG9pbnRlcihjb25zdCBjaGFyICpmbXQsIGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB2b2lkICpwdHIsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKnBvaW50ZXIoY29uc3QgY2hhciAqZm10LCBjaGFyICpidWYsIGNoYXIgKmVuZCwgdm9pZCAqcHRyLAorCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJaWYgKCFwdHIpCi0JCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsICIobnVsbCkiLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsICIobnVsbCkiLCBzcGVjKTsKIAogCXN3aXRjaCAoKmZtdCkgewogCWNhc2UgJ0YnOgogCQlwdHIgPSBkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKHB0cik7CiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSAnUyc6Ci0JCXJldHVybiBzeW1ib2xfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwkJcmV0dXJuIHN5bWJvbF9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7CiAJY2FzZSAnUic6Ci0JCXJldHVybiByZXNvdXJjZV9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworCQlyZXR1cm4gcmVzb3VyY2Vfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwogCWNhc2UgJ20nOgotCQlmbGFncyB8PSBTUEVDSUFMOworCQlzcGVjLmZsYWdzIHw9IFNQRUNJQUw7CiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSAnTSc6Ci0JCXJldHVybiBtYWNfYWRkcmVzc19zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworCQlyZXR1cm4gbWFjX2FkZHJlc3Nfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwogCWNhc2UgJ2knOgotCQlmbGFncyB8PSBTUEVDSUFMOworCQlzcGVjLmZsYWdzIHw9IFNQRUNJQUw7CiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSAnSSc6CiAJCWlmIChmbXRbMV0gPT0gJzYnKQotCQkJcmV0dXJuIGlwNl9hZGRyX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJCQlyZXR1cm4gaXA2X2FkZHJfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwogCQlpZiAoZm10WzFdID09ICc0JykKLQkJCXJldHVybiBpcDRfYWRkcl9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOwotCQlmbGFncyAmPSB+U1BFQ0lBTDsKKwkJCXJldHVybiBpcDRfYWRkcl9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7CisJCXNwZWMuZmxhZ3MgJj0gflNQRUNJQUw7CiAJCWJyZWFrOwogCX0KLQlmbGFncyB8PSBTTUFMTDsKLQlpZiAoZmllbGRfd2lkdGggPT0gLTEpIHsKLQkJZmllbGRfd2lkdGggPSAyKnNpemVvZih2b2lkICopOwotCQlmbGFncyB8PSBaRVJPUEFEOworCXNwZWMuZmxhZ3MgfD0gU01BTEw7CisJaWYgKHNwZWMuZmllbGRfd2lkdGggPT0gLTEpIHsKKwkJc3BlYy5maWVsZF93aWR0aCA9IDIqc2l6ZW9mKHZvaWQgKik7CisJCXNwZWMuZmxhZ3MgfD0gWkVST1BBRDsKIAl9Ci0JcmV0dXJuIG51bWJlcihidWYsIGVuZCwgKHVuc2lnbmVkIGxvbmcpIHB0ciwgMTYsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwlzcGVjLmJhc2UgPSAxNjsKKworCXJldHVybiBudW1iZXIoYnVmLCBlbmQsICh1bnNpZ25lZCBsb25nKSBwdHIsIHNwZWMpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIGRlY29kZSBwcmludGYgc3R5bGUgZm9ybWF0LgorICogRWFjaCBjYWxsIGRlY29kZSBhIHRva2VuIGZyb20gdGhlIGZvcm1hdCBhbmQgcmV0dXJuIHRoZQorICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCAob3IgbGlrZWx5IHRoZSBkZWx0YSB3aGVyZSBpdCB3YW50cworICogdG8gZ28gb24gdGhlIG5leHQgY2FsbCkuCisgKiBUaGUgZGVjb2RlZCB0b2tlbiBpcyByZXR1cm5lZCB0aHJvdWdoIHRoZSBwYXJhbWV0ZXJzCisgKgorICogJ2gnLCAnbCcsIG9yICdMJyBmb3IgaW50ZWdlciBmaWVsZHMKKyAqICd6JyBzdXBwb3J0IGFkZGVkIDIzLzcvMTk5OSBTLkguCisgKiAneicgY2hhbmdlZCB0byAnWicgLS1kYXZpZG0gMS8yNS85OQorICogJ3QnIGFkZGVkIGZvciBwdHJkaWZmX3QKKyAqCisgKiBAZm10OiB0aGUgZm9ybWF0IHN0cmluZworICogQHR5cGUgb2YgdGhlIHRva2VuIHJldHVybmVkCisgKiBAZmxhZ3M6IHZhcmlvdXMgZmxhZ3Mgc3VjaCBhcyArLCAtLCAjIHRva2Vucy4uCisgKiBAZmllbGRfd2lkdGg6IG92ZXJ3cml0dGVuIHdpZHRoCisgKiBAYmFzZTogYmFzZSBvZiB0aGUgbnVtYmVyIChvY3RhbCwgaGV4LCAuLi4pCisgKiBAcHJlY2lzaW9uOiBwcmVjaXNpb24gb2YgYSBudW1iZXIKKyAqIEBxdWFsaWZpZXI6IHF1YWxpZmllciBvZiBhIG51bWJlciAobG9uZywgc2l6ZV90LCAuLi4pCisgKi8KK3N0YXRpYyBpbnQgZm9ybWF0X2RlY29kZShjb25zdCBjaGFyICpmbXQsIHN0cnVjdCBwcmludGZfc3BlYyAqc3BlYykKK3sKKwljb25zdCBjaGFyICpzdGFydCA9IGZtdDsKKworCS8qIHdlIGZpbmlzaGVkIGVhcmx5IGJ5IHJlYWRpbmcgdGhlIGZpZWxkIHdpZHRoICovCisJaWYgKHNwZWMtPnR5cGUgPT0gRk9STUFUX1RZUEVfV0lEVEgpIHsKKwkJaWYgKHNwZWMtPmZpZWxkX3dpZHRoIDwgMCkgeworCQkJc3BlYy0+ZmllbGRfd2lkdGggPSAtc3BlYy0+ZmllbGRfd2lkdGg7CisJCQlzcGVjLT5mbGFncyB8PSBMRUZUOworCQl9CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9OT05FOworCQlnb3RvIHByZWNpc2lvbjsKKwl9CisKKwkvKiB3ZSBmaW5pc2hlZCBlYXJseSBieSByZWFkaW5nIHRoZSBwcmVjaXNpb24gKi8KKwlpZiAoc3BlYy0+dHlwZSA9PSBGT1JNQVRfVFlQRV9QUkVDSVNJT04pIHsKKwkJaWYgKHNwZWMtPnByZWNpc2lvbiA8IDApCisJCQlzcGVjLT5wcmVjaXNpb24gPSAwOworCisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9OT05FOworCQlnb3RvIHF1YWxpZmllcjsKKwl9CisKKwkvKiBCeSBkZWZhdWx0ICovCisJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX05PTkU7CisKKwlmb3IgKDsgKmZtdCA7ICsrZm10KSB7CisJCWlmICgqZm10ID09ICclJykKKwkJCWJyZWFrOworCX0KKworCS8qIFJldHVybiB0aGUgY3VycmVudCBub24tZm9ybWF0IHN0cmluZyAqLworCWlmIChmbXQgIT0gc3RhcnQgfHwgISpmbXQpCisJCXJldHVybiBmbXQgLSBzdGFydDsKKworCS8qIFByb2Nlc3MgZmxhZ3MgKi8KKwlzcGVjLT5mbGFncyA9IDA7CisKKwl3aGlsZSAoMSkgeyAvKiB0aGlzIGFsc28gc2tpcHMgZmlyc3QgJyUnICovCisJCWJvb2wgZm91bmQgPSB0cnVlOworCisJCSsrZm10OworCisJCXN3aXRjaCAoKmZtdCkgeworCQljYXNlICctJzogc3BlYy0+ZmxhZ3MgfD0gTEVGVDsgICAgYnJlYWs7CisJCWNhc2UgJysnOiBzcGVjLT5mbGFncyB8PSBQTFVTOyAgICBicmVhazsKKwkJY2FzZSAnICc6IHNwZWMtPmZsYWdzIHw9IFNQQUNFOyAgIGJyZWFrOworCQljYXNlICcjJzogc3BlYy0+ZmxhZ3MgfD0gU1BFQ0lBTDsgYnJlYWs7CisJCWNhc2UgJzAnOiBzcGVjLT5mbGFncyB8PSBaRVJPUEFEOyBicmVhazsKKwkJZGVmYXVsdDogIGZvdW5kID0gZmFsc2U7CisJCX0KKworCQlpZiAoIWZvdW5kKQorCQkJYnJlYWs7CisJfQorCisJLyogZ2V0IGZpZWxkIHdpZHRoICovCisJc3BlYy0+ZmllbGRfd2lkdGggPSAtMTsKKworCWlmIChpc2RpZ2l0KCpmbXQpKQorCQlzcGVjLT5maWVsZF93aWR0aCA9IHNraXBfYXRvaSgmZm10KTsKKwllbHNlIGlmICgqZm10ID09ICcqJykgeworCQkvKiBpdCdzIHRoZSBuZXh0IGFyZ3VtZW50ICovCisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9XSURUSDsKKwkJcmV0dXJuICsrZm10IC0gc3RhcnQ7CisJfQorCitwcmVjaXNpb246CisJLyogZ2V0IHRoZSBwcmVjaXNpb24gKi8KKwlzcGVjLT5wcmVjaXNpb24gPSAtMTsKKwlpZiAoKmZtdCA9PSAnLicpIHsKKwkJKytmbXQ7CisJCWlmIChpc2RpZ2l0KCpmbXQpKSB7CisJCQlzcGVjLT5wcmVjaXNpb24gPSBza2lwX2F0b2koJmZtdCk7CisJCQlpZiAoc3BlYy0+cHJlY2lzaW9uIDwgMCkKKwkJCQlzcGVjLT5wcmVjaXNpb24gPSAwOworCQl9IGVsc2UgaWYgKCpmbXQgPT0gJyonKSB7CisJCQkvKiBpdCdzIHRoZSBuZXh0IGFyZ3VtZW50ICovCisJCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfUFJFQ0lTSU9OOworCQkJcmV0dXJuICsrZm10IC0gc3RhcnQ7CisJCX0KKwl9CisKK3F1YWxpZmllcjoKKwkvKiBnZXQgdGhlIGNvbnZlcnNpb24gcXVhbGlmaWVyICovCisJc3BlYy0+cXVhbGlmaWVyID0gLTE7CisJaWYgKCpmbXQgPT0gJ2gnIHx8ICpmbXQgPT0gJ2wnIHx8ICpmbXQgPT0gJ0wnIHx8CisJICAgICpmbXQgPT0gJ1onIHx8ICpmbXQgPT0gJ3onIHx8ICpmbXQgPT0gJ3QnKSB7CisJCXNwZWMtPnF1YWxpZmllciA9ICpmbXQ7CisJCSsrZm10OworCQlpZiAoc3BlYy0+cXVhbGlmaWVyID09ICdsJyAmJiAqZm10ID09ICdsJykgeworCQkJc3BlYy0+cXVhbGlmaWVyID0gJ0wnOworCQkJKytmbXQ7CisJCX0KKwl9CisKKwkvKiBkZWZhdWx0IGJhc2UgKi8KKwlzcGVjLT5iYXNlID0gMTA7CisJc3dpdGNoICgqZm10KSB7CisJY2FzZSAnYyc6CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9DSEFSOworCQlyZXR1cm4gKytmbXQgLSBzdGFydDsKKworCWNhc2UgJ3MnOgorCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfU1RSOworCQlyZXR1cm4gKytmbXQgLSBzdGFydDsKKworCWNhc2UgJ3AnOgorCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfUFRSOworCQlyZXR1cm4gZm10IC0gc3RhcnQ7CisJCS8qIHNraXAgYWxudW0gKi8KKworCWNhc2UgJ24nOgorCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfTlJDSEFSUzsKKwkJcmV0dXJuICsrZm10IC0gc3RhcnQ7CisKKwljYXNlICclJzoKKwkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1BFUkNFTlRfQ0hBUjsKKwkJcmV0dXJuICsrZm10IC0gc3RhcnQ7CisKKwkvKiBpbnRlZ2VyIG51bWJlciBmb3JtYXRzIC0gc2V0IHVwIHRoZSBmbGFncyBhbmQgImJyZWFrIiAqLworCWNhc2UgJ28nOgorCQlzcGVjLT5iYXNlID0gODsKKwkJYnJlYWs7CisKKwljYXNlICd4JzoKKwkJc3BlYy0+ZmxhZ3MgfD0gU01BTEw7CisKKwljYXNlICdYJzoKKwkJc3BlYy0+YmFzZSA9IDE2OworCQlicmVhazsKKworCWNhc2UgJ2QnOgorCWNhc2UgJ2knOgorCQlzcGVjLT5mbGFncyB8PSBTSUdOOworCWNhc2UgJ3UnOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9JTlZBTElEOworCQlyZXR1cm4gZm10IC0gc3RhcnQ7CisJfQorCisJaWYgKHNwZWMtPnF1YWxpZmllciA9PSAnTCcpCisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9MT05HX0xPTkc7CisJZWxzZSBpZiAoc3BlYy0+cXVhbGlmaWVyID09ICdsJykgeworCQlpZiAoc3BlYy0+ZmxhZ3MgJiBTSUdOKQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX0xPTkc7CisJCWVsc2UKKwkJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9VTE9ORzsKKwl9IGVsc2UgaWYgKHNwZWMtPnF1YWxpZmllciA9PSAnWicgfHwgc3BlYy0+cXVhbGlmaWVyID09ICd6JykgeworCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfU0laRV9UOworCX0gZWxzZSBpZiAoc3BlYy0+cXVhbGlmaWVyID09ICd0JykgeworCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfUFRSRElGRjsKKwl9IGVsc2UgaWYgKHNwZWMtPnF1YWxpZmllciA9PSAnaCcpIHsKKwkJaWYgKHNwZWMtPmZsYWdzICYgU0lHTikKKwkJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9TSE9SVDsKKwkJZWxzZQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1VTSE9SVDsKKwl9IGVsc2UgeworCQlpZiAoc3BlYy0+ZmxhZ3MgJiBTSUdOKQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX0lOVDsKKwkJZWxzZQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1VJTlQ7CisJfQorCisJcmV0dXJuICsrZm10IC0gc3RhcnQ7CiB9CiAKIC8qKgpAQCAtNzI2LDE4ICs5NjAsOSBAQAogaW50IHZzbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbnVtOwotCWludCBiYXNlOwogCWNoYXIgKnN0ciwgKmVuZCwgYzsKLQotCWludCBmbGFnczsJCS8qIGZsYWdzIHRvIG51bWJlcigpICovCi0KLQlpbnQgZmllbGRfd2lkdGg7CS8qIHdpZHRoIG9mIG91dHB1dCBmaWVsZCAqLwotCWludCBwcmVjaXNpb247CQkvKiBtaW4uICMgb2YgZGlnaXRzIGZvciBpbnRlZ2VyczsgbWF4Ci0JCQkJICAgbnVtYmVyIG9mIGNoYXJzIGZvciBmcm9tIHN0cmluZyAqLwotCWludCBxdWFsaWZpZXI7CQkvKiAnaCcsICdsJywgb3IgJ0wnIGZvciBpbnRlZ2VyIGZpZWxkcyAqLwotCQkJCS8qICd6JyBzdXBwb3J0IGFkZGVkIDIzLzcvMTk5OSBTLkguICAgICovCi0JCQkJLyogJ3onIGNoYW5nZWQgdG8gJ1onIC0tZGF2aWRtIDEvMjUvOTkgKi8KLQkJCQkvKiAndCcgYWRkZWQgZm9yIHB0cmRpZmZfdCAqLworCWludCByZWFkOworCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjID0gezB9OwogCiAJLyogUmVqZWN0IG91dC1vZi1yYW5nZSB2YWx1ZXMgZWFybHkuICBMYXJnZSBwb3NpdGl2ZSBzaXplcyBhcmUKIAkgICB1c2VkIGZvciB1bmtub3duIGJ1ZmZlciBzaXplcy4gKi8KQEAgLTc1OCwxODQgKzk4MywxNDQgQEAKIAkJc2l6ZSA9IGVuZCAtIGJ1ZjsKIAl9CiAKLQlmb3IgKDsgKmZtdCA7ICsrZm10KSB7Ci0JCWlmICgqZm10ICE9ICclJykgewotCQkJaWYgKHN0ciA8IGVuZCkKLQkJCQkqc3RyID0gKmZtdDsKLQkJCSsrc3RyOwotCQkJY29udGludWU7CisJd2hpbGUgKCpmbXQpIHsKKwkJY29uc3QgY2hhciAqb2xkX2ZtdCA9IGZtdDsKKworCQlyZWFkID0gZm9ybWF0X2RlY29kZShmbXQsICZzcGVjKTsKKworCQlmbXQgKz0gcmVhZDsKKworCQlzd2l0Y2ggKHNwZWMudHlwZSkgeworCQljYXNlIEZPUk1BVF9UWVBFX05PTkU6IHsKKwkJCWludCBjb3B5ID0gcmVhZDsKKwkJCWlmIChzdHIgPCBlbmQpIHsKKwkJCQlpZiAoY29weSA+IGVuZCAtIHN0cikKKwkJCQkJY29weSA9IGVuZCAtIHN0cjsKKwkJCQltZW1jcHkoc3RyLCBvbGRfZm10LCBjb3B5KTsKKwkJCX0KKwkJCXN0ciArPSByZWFkOworCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBwcm9jZXNzIGZsYWdzICovCi0JCWZsYWdzID0gMDsKLQkJcmVwZWF0OgotCQkJKytmbXQ7CQkvKiB0aGlzIGFsc28gc2tpcHMgZmlyc3QgJyUnICovCi0JCQlzd2l0Y2ggKCpmbXQpIHsKLQkJCQljYXNlICctJzogZmxhZ3MgfD0gTEVGVDsgZ290byByZXBlYXQ7Ci0JCQkJY2FzZSAnKyc6IGZsYWdzIHw9IFBMVVM7IGdvdG8gcmVwZWF0OwotCQkJCWNhc2UgJyAnOiBmbGFncyB8PSBTUEFDRTsgZ290byByZXBlYXQ7Ci0JCQkJY2FzZSAnIyc6IGZsYWdzIHw9IFNQRUNJQUw7IGdvdG8gcmVwZWF0OwotCQkJCWNhc2UgJzAnOiBmbGFncyB8PSBaRVJPUEFEOyBnb3RvIHJlcGVhdDsKLQkJCX0KKwkJY2FzZSBGT1JNQVRfVFlQRV9XSURUSDoKKwkJCXNwZWMuZmllbGRfd2lkdGggPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCWJyZWFrOwogCi0JCS8qIGdldCBmaWVsZCB3aWR0aCAqLwotCQlmaWVsZF93aWR0aCA9IC0xOwotCQlpZiAoaXNkaWdpdCgqZm10KSkKLQkJCWZpZWxkX3dpZHRoID0gc2tpcF9hdG9pKCZmbXQpOwotCQllbHNlIGlmICgqZm10ID09ICcqJykgewotCQkJKytmbXQ7Ci0JCQkvKiBpdCdzIHRoZSBuZXh0IGFyZ3VtZW50ICovCi0JCQlmaWVsZF93aWR0aCA9IHZhX2FyZyhhcmdzLCBpbnQpOwotCQkJaWYgKGZpZWxkX3dpZHRoIDwgMCkgewotCQkJCWZpZWxkX3dpZHRoID0gLWZpZWxkX3dpZHRoOwotCQkJCWZsYWdzIHw9IExFRlQ7Ci0JCQl9Ci0JCX0KKwkJY2FzZSBGT1JNQVRfVFlQRV9QUkVDSVNJT046CisJCQlzcGVjLnByZWNpc2lvbiA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJYnJlYWs7CiAKLQkJLyogZ2V0IHRoZSBwcmVjaXNpb24gKi8KLQkJcHJlY2lzaW9uID0gLTE7Ci0JCWlmICgqZm10ID09ICcuJykgewotCQkJKytmbXQ7CQotCQkJaWYgKGlzZGlnaXQoKmZtdCkpCi0JCQkJcHJlY2lzaW9uID0gc2tpcF9hdG9pKCZmbXQpOwotCQkJZWxzZSBpZiAoKmZtdCA9PSAnKicpIHsKLQkJCQkrK2ZtdDsKLQkJCQkvKiBpdCdzIHRoZSBuZXh0IGFyZ3VtZW50ICovCi0JCQkJcHJlY2lzaW9uID0gdmFfYXJnKGFyZ3MsIGludCk7Ci0JCQl9Ci0JCQlpZiAocHJlY2lzaW9uIDwgMCkKLQkJCQlwcmVjaXNpb24gPSAwOwotCQl9Ci0KLQkJLyogZ2V0IHRoZSBjb252ZXJzaW9uIHF1YWxpZmllciAqLwotCQlxdWFsaWZpZXIgPSAtMTsKLQkJaWYgKCpmbXQgPT0gJ2gnIHx8ICpmbXQgPT0gJ2wnIHx8ICpmbXQgPT0gJ0wnIHx8Ci0JCSAgICAqZm10ID09J1onIHx8ICpmbXQgPT0gJ3onIHx8ICpmbXQgPT0gJ3QnKSB7Ci0JCQlxdWFsaWZpZXIgPSAqZm10OwotCQkJKytmbXQ7Ci0JCQlpZiAocXVhbGlmaWVyID09ICdsJyAmJiAqZm10ID09ICdsJykgewotCQkJCXF1YWxpZmllciA9ICdMJzsKLQkJCQkrK2ZtdDsKLQkJCX0KLQkJfQotCi0JCS8qIGRlZmF1bHQgYmFzZSAqLwotCQliYXNlID0gMTA7Ci0KLQkJc3dpdGNoICgqZm10KSB7Ci0JCQljYXNlICdjJzoKLQkJCQlpZiAoIShmbGFncyAmIExFRlQpKSB7Ci0JCQkJCXdoaWxlICgtLWZpZWxkX3dpZHRoID4gMCkgewotCQkJCQkJaWYgKHN0ciA8IGVuZCkKLQkJCQkJCQkqc3RyID0gJyAnOwotCQkJCQkJKytzdHI7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYyA9ICh1bnNpZ25lZCBjaGFyKSB2YV9hcmcoYXJncywgaW50KTsKLQkJCQlpZiAoc3RyIDwgZW5kKQotCQkJCQkqc3RyID0gYzsKLQkJCQkrK3N0cjsKLQkJCQl3aGlsZSAoLS1maWVsZF93aWR0aCA+IDApIHsKKwkJY2FzZSBGT1JNQVRfVFlQRV9DSEFSOgorCQkJaWYgKCEoc3BlYy5mbGFncyAmIExFRlQpKSB7CisJCQkJd2hpbGUgKC0tc3BlYy5maWVsZF93aWR0aCA+IDApIHsKIAkJCQkJaWYgKHN0ciA8IGVuZCkKIAkJCQkJCSpzdHIgPSAnICc7CiAJCQkJCSsrc3RyOworCiAJCQkJfQotCQkJCWNvbnRpbnVlOwotCi0JCQljYXNlICdzJzoKLQkJCQlzdHIgPSBzdHJpbmcoc3RyLCBlbmQsIHZhX2FyZyhhcmdzLCBjaGFyICopLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7Ci0JCQkJY29udGludWU7Ci0KLQkJCWNhc2UgJ3AnOgotCQkJCXN0ciA9IHBvaW50ZXIoZm10KzEsIHN0ciwgZW5kLAotCQkJCQkJdmFfYXJnKGFyZ3MsIHZvaWQgKiksCi0JCQkJCQlmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7Ci0JCQkJLyogU2tpcCBhbGwgYWxwaGFudW1lcmljIHBvaW50ZXIgc3VmZml4ZXMgKi8KLQkJCQl3aGlsZSAoaXNhbG51bShmbXRbMV0pKQotCQkJCQlmbXQrKzsKLQkJCQljb250aW51ZTsKLQotCQkJY2FzZSAnbic6Ci0JCQkJLyogRklYTUU6Ci0JCQkJKiBXaGF0IGRvZXMgQzk5IHNheSBhYm91dCB0aGUgb3ZlcmZsb3cgY2FzZSBoZXJlPyAqLwotCQkJCWlmIChxdWFsaWZpZXIgPT0gJ2wnKSB7Ci0JCQkJCWxvbmcgKiBpcCA9IHZhX2FyZyhhcmdzLCBsb25nICopOwotCQkJCQkqaXAgPSAoc3RyIC0gYnVmKTsKLQkJCQl9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicgfHwgcXVhbGlmaWVyID09ICd6JykgewotCQkJCQlzaXplX3QgKiBpcCA9IHZhX2FyZyhhcmdzLCBzaXplX3QgKik7Ci0JCQkJCSppcCA9IChzdHIgLSBidWYpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWludCAqIGlwID0gdmFfYXJnKGFyZ3MsIGludCAqKTsKLQkJCQkJKmlwID0gKHN0ciAtIGJ1Zik7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCi0JCQljYXNlICclJzoKKwkJCX0KKwkJCWMgPSAodW5zaWduZWQgY2hhcikgdmFfYXJnKGFyZ3MsIGludCk7CisJCQlpZiAoc3RyIDwgZW5kKQorCQkJCSpzdHIgPSBjOworCQkJKytzdHI7CisJCQl3aGlsZSAoLS1zcGVjLmZpZWxkX3dpZHRoID4gMCkgewogCQkJCWlmIChzdHIgPCBlbmQpCi0JCQkJCSpzdHIgPSAnJSc7CisJCQkJCSpzdHIgPSAnICc7CiAJCQkJKytzdHI7Ci0JCQkJY29udGludWU7CisJCQl9CisJCQlicmVhazsKIAotCQkJCS8qIGludGVnZXIgbnVtYmVyIGZvcm1hdHMgLSBzZXQgdXAgdGhlIGZsYWdzIGFuZCAiYnJlYWsiICovCi0JCQljYXNlICdvJzoKLQkJCQliYXNlID0gODsKKwkJY2FzZSBGT1JNQVRfVFlQRV9TVFI6CisJCQlzdHIgPSBzdHJpbmcoc3RyLCBlbmQsIHZhX2FyZyhhcmdzLCBjaGFyICopLCBzcGVjKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfUFRSOgorCQkJc3RyID0gcG9pbnRlcihmbXQrMSwgc3RyLCBlbmQsIHZhX2FyZyhhcmdzLCB2b2lkICopLAorCQkJCSAgICAgIHNwZWMpOworCQkJd2hpbGUgKGlzYWxudW0oKmZtdCkpCisJCQkJZm10Kys7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX1BFUkNFTlRfQ0hBUjoKKwkJCWlmIChzdHIgPCBlbmQpCisJCQkJKnN0ciA9ICclJzsKKwkJCSsrc3RyOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9JTlZBTElEOgorCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkqc3RyID0gJyUnOworCQkJKytzdHI7CisJCQlpZiAoKmZtdCkgeworCQkJCWlmIChzdHIgPCBlbmQpCisJCQkJCSpzdHIgPSAqZm10OworCQkJCSsrc3RyOworCQkJfSBlbHNlIHsKKwkJCQktLWZtdDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfTlJDSEFSUzogeworCQkJaW50IHF1YWxpZmllciA9IHNwZWMucXVhbGlmaWVyOworCisJCQlpZiAocXVhbGlmaWVyID09ICdsJykgeworCQkJCWxvbmcgKmlwID0gdmFfYXJnKGFyZ3MsIGxvbmcgKik7CisJCQkJKmlwID0gKHN0ciAtIGJ1Zik7CisJCQl9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicgfHwKKwkJCQkJcXVhbGlmaWVyID09ICd6JykgeworCQkJCXNpemVfdCAqaXAgPSB2YV9hcmcoYXJncywgc2l6ZV90ICopOworCQkJCSppcCA9IChzdHIgLSBidWYpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgKmlwID0gdmFfYXJnKGFyZ3MsIGludCAqKTsKKwkJCQkqaXAgPSAoc3RyIC0gYnVmKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAoc3BlYy50eXBlKSB7CisJCQljYXNlIEZPUk1BVF9UWVBFX0xPTkdfTE9ORzoKKwkJCQludW0gPSB2YV9hcmcoYXJncywgbG9uZyBsb25nKTsKIAkJCQlicmVhazsKLQotCQkJY2FzZSAneCc6Ci0JCQkJZmxhZ3MgfD0gU01BTEw7Ci0JCQljYXNlICdYJzoKLQkJCQliYXNlID0gMTY7CisJCQljYXNlIEZPUk1BVF9UWVBFX1VMT05HOgorCQkJCW51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKIAkJCQlicmVhazsKLQotCQkJY2FzZSAnZCc6Ci0JCQljYXNlICdpJzoKLQkJCQlmbGFncyB8PSBTSUdOOwotCQkJY2FzZSAndSc6CisJCQljYXNlIEZPUk1BVF9UWVBFX0xPTkc6CisJCQkJbnVtID0gdmFfYXJnKGFyZ3MsIGxvbmcpOwogCQkJCWJyZWFrOwotCisJCQljYXNlIEZPUk1BVF9UWVBFX1NJWkVfVDoKKwkJCQludW0gPSB2YV9hcmcoYXJncywgc2l6ZV90KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfUFRSRElGRjoKKwkJCQludW0gPSB2YV9hcmcoYXJncywgcHRyZGlmZl90KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVVNIT1JUOgorCQkJCW51bSA9ICh1bnNpZ25lZCBzaG9ydCkgdmFfYXJnKGFyZ3MsIGludCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1NIT1JUOgorCQkJCW51bSA9IChzaG9ydCkgdmFfYXJnKGFyZ3MsIGludCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX0lOVDoKKwkJCQludW0gPSAoaW50KSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJaWYgKHN0ciA8IGVuZCkKLQkJCQkJKnN0ciA9ICclJzsKLQkJCQkrK3N0cjsKLQkJCQlpZiAoKmZtdCkgewotCQkJCQlpZiAoc3RyIDwgZW5kKQotCQkJCQkJKnN0ciA9ICpmbXQ7Ci0JCQkJCSsrc3RyOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS0tZm10OwotCQkJCX0KLQkJCQljb250aW51ZTsKKwkJCQludW0gPSB2YV9hcmcoYXJncywgdW5zaWduZWQgaW50KTsKKwkJCX0KKworCQkJc3RyID0gbnVtYmVyKHN0ciwgZW5kLCBudW0sIHNwZWMpOwogCQl9Ci0JCWlmIChxdWFsaWZpZXIgPT0gJ0wnKQotCQkJbnVtID0gdmFfYXJnKGFyZ3MsIGxvbmcgbG9uZyk7Ci0JCWVsc2UgaWYgKHF1YWxpZmllciA9PSAnbCcpIHsKLQkJCW51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKLQkJCWlmIChmbGFncyAmIFNJR04pCi0JCQkJbnVtID0gKHNpZ25lZCBsb25nKSBudW07Ci0JCX0gZWxzZSBpZiAocXVhbGlmaWVyID09ICdaJyB8fCBxdWFsaWZpZXIgPT0gJ3onKSB7Ci0JCQludW0gPSB2YV9hcmcoYXJncywgc2l6ZV90KTsKLQkJfSBlbHNlIGlmIChxdWFsaWZpZXIgPT0gJ3QnKSB7Ci0JCQludW0gPSB2YV9hcmcoYXJncywgcHRyZGlmZl90KTsKLQkJfSBlbHNlIGlmIChxdWFsaWZpZXIgPT0gJ2gnKSB7Ci0JCQludW0gPSAodW5zaWduZWQgc2hvcnQpIHZhX2FyZyhhcmdzLCBpbnQpOwotCQkJaWYgKGZsYWdzICYgU0lHTikKLQkJCQludW0gPSAoc2lnbmVkIHNob3J0KSBudW07Ci0JCX0gZWxzZSB7Ci0JCQludW0gPSB2YV9hcmcoYXJncywgdW5zaWduZWQgaW50KTsKLQkJCWlmIChmbGFncyAmIFNJR04pCi0JCQkJbnVtID0gKHNpZ25lZCBpbnQpIG51bTsKLQkJfQotCQlzdHIgPSBudW1iZXIoc3RyLCBlbmQsIG51bSwgYmFzZSwKLQkJCQlmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CiAJfQorCiAJaWYgKHNpemUgPiAwKSB7CiAJCWlmIChzdHIgPCBlbmQpCiAJCQkqc3RyID0gJ1wwJzsKIAkJZWxzZQogCQkJZW5kWy0xXSA9ICdcMCc7CiAJfQorCiAJLyogdGhlIHRyYWlsaW5nIG51bGwgYnl0ZSBkb2Vzbid0IGNvdW50IHRvd2FyZHMgdGhlIHRvdGFsICovCiAJcmV0dXJuIHN0ci1idWY7CisKIH0KIEVYUE9SVF9TWU1CT0wodnNucHJpbnRmKTsKIApAQCAtMTA1OCw2ICsxMjQzLDM3MiBAQAogfQogRVhQT1JUX1NZTUJPTChzcHJpbnRmKTsKIAorI2lmZGVmIENPTkZJR19CSU5BUllfUFJJTlRGCisvKgorICogYnByaW50ZiBzZXJ2aWNlOgorICogdmJpbl9wcmludGYoKSAtIFZBIGFyZ3VtZW50cyB0byBiaW5hcnkgZGF0YQorICogYnN0cl9wcmludGYoKSAtIEJpbmFyeSBkYXRhIHRvIHRleHQgc3RyaW5nCisgKi8KKworLyoqCisgKiB2YmluX3ByaW50ZiAtIFBhcnNlIGEgZm9ybWF0IHN0cmluZyBhbmQgcGxhY2UgYXJncycgYmluYXJ5IHZhbHVlIGluIGEgYnVmZmVyCisgKiBAYmluX2J1ZjogVGhlIGJ1ZmZlciB0byBwbGFjZSBhcmdzJyBiaW5hcnkgdmFsdWUKKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyKGJ5IHdvcmRzKDMyYml0cyksIG5vdCBjaGFyYWN0ZXJzKQorICogQGZtdDogVGhlIGZvcm1hdCBzdHJpbmcgdG8gdXNlCisgKiBAYXJnczogQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZworICoKKyAqIFRoZSBmb3JtYXQgZm9sbG93cyBDOTkgdnNucHJpbnRmLCBleGNlcHQgJW4gaXMgaWdub3JlZCwgYW5kIGl0cyBhcmd1bWVudAorICogaXMgc2tpcGVkLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiB3b3JkcygzMmJpdHMpIHdoaWNoIHdvdWxkIGJlIGdlbmVyYXRlZCBmb3IKKyAqIHRoZSBnaXZlbiBpbnB1dC4KKyAqCisgKiBOT1RFOgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gQHNpemUsIHRoZSByZXN1bHRpbmcgYmluX2J1ZiBpcyBOT1QKKyAqIHZhbGlkIGZvciBic3RyX3ByaW50ZigpLgorICovCitpbnQgdmJpbl9wcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMgPSB7MH07CisJY2hhciAqc3RyLCAqZW5kOworCWludCByZWFkOworCisJc3RyID0gKGNoYXIgKiliaW5fYnVmOworCWVuZCA9IChjaGFyICopKGJpbl9idWYgKyBzaXplKTsKKworI2RlZmluZSBzYXZlX2FyZyh0eXBlKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChzaXplb2YodHlwZSkgPT0gOCkgewkJCQkJXAorCQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CQkJCVwKKwkJc3RyID0gUFRSX0FMSUdOKHN0ciwgc2l6ZW9mKHUzMikpOwkJCVwKKwkJdmFsdWUgPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyBsb25nKTsJCVwKKwkJaWYgKHN0ciArIHNpemVvZih0eXBlKSA8PSBlbmQpIHsJCQlcCisJCQkqKHUzMiAqKXN0ciA9ICoodTMyICopJnZhbHVlOwkJCVwKKwkJCSoodTMyICopKHN0ciArIDQpID0gKigodTMyICopJnZhbHVlICsgMSk7CVwKKwkJfQkJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIHZhbHVlOwkJCQkJXAorCQlzdHIgPSBQVFJfQUxJR04oc3RyLCBzaXplb2YodHlwZSkpOwkJCVwKKwkJdmFsdWUgPSB2YV9hcmcoYXJncywgaW50KTsJCQkJXAorCQlpZiAoc3RyICsgc2l6ZW9mKHR5cGUpIDw9IGVuZCkJCQkJXAorCQkJKih0eXBlb2YodHlwZSkgKilzdHIgPSAodHlwZSl2YWx1ZTsJCVwKKwl9CQkJCQkJCQlcCisJc3RyICs9IHNpemVvZih0eXBlKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKwl3aGlsZSAoKmZtdCkgeworCQlyZWFkID0gZm9ybWF0X2RlY29kZShmbXQsICZzcGVjKTsKKworCQlmbXQgKz0gcmVhZDsKKworCQlzd2l0Y2ggKHNwZWMudHlwZSkgeworCQljYXNlIEZPUk1BVF9UWVBFX05PTkU6CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX1dJRFRIOgorCQljYXNlIEZPUk1BVF9UWVBFX1BSRUNJU0lPTjoKKwkJCXNhdmVfYXJnKGludCk7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX0NIQVI6CisJCQlzYXZlX2FyZyhjaGFyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfU1RSOiB7CisJCQljb25zdCBjaGFyICpzYXZlX3N0ciA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJc2l6ZV90IGxlbjsKKwkJCWlmICgodW5zaWduZWQgbG9uZylzYXZlX3N0ciA+ICh1bnNpZ25lZCBsb25nKS1QQUdFX1NJWkUKKwkJCQkJfHwgKHVuc2lnbmVkIGxvbmcpc2F2ZV9zdHIgPCBQQUdFX1NJWkUpCisJCQkJc2F2ZV9zdHIgPSAiPE5VTEw+IjsKKwkJCWxlbiA9IHN0cmxlbihzYXZlX3N0cik7CisJCQlpZiAoc3RyICsgbGVuICsgMSA8IGVuZCkKKwkJCQltZW1jcHkoc3RyLCBzYXZlX3N0ciwgbGVuICsgMSk7CisJCQlzdHIgKz0gbGVuICsgMTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9QVFI6CisJCQlzYXZlX2FyZyh2b2lkICopOworCQkJLyogc2tpcCBhbGwgYWxwaGFudW1lcmljIHBvaW50ZXIgc3VmZml4ZXMgKi8KKwkJCXdoaWxlIChpc2FsbnVtKCpmbXQpKQorCQkJCWZtdCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9QRVJDRU5UX0NIQVI6CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX0lOVkFMSUQ6CisJCQlpZiAoISpmbXQpCisJCQkJLS1mbXQ7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX05SQ0hBUlM6IHsKKwkJCS8qIHNraXAgJW4gJ3MgYXJndW1lbnQgKi8KKwkJCWludCBxdWFsaWZpZXIgPSBzcGVjLnF1YWxpZmllcjsKKwkJCXZvaWQgKnNraXBfYXJnOworCQkJaWYgKHF1YWxpZmllciA9PSAnbCcpCisJCQkJc2tpcF9hcmcgPSB2YV9hcmcoYXJncywgbG9uZyAqKTsKKwkJCWVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicgfHwgcXVhbGlmaWVyID09ICd6JykKKwkJCQlza2lwX2FyZyA9IHZhX2FyZyhhcmdzLCBzaXplX3QgKik7CisJCQllbHNlCisJCQkJc2tpcF9hcmcgPSB2YV9hcmcoYXJncywgaW50ICopOworCQkJYnJlYWs7CisJCX0KKworCQlkZWZhdWx0OgorCQkJc3dpdGNoIChzcGVjLnR5cGUpIHsKKworCQkJY2FzZSBGT1JNQVRfVFlQRV9MT05HX0xPTkc6CisJCQkJc2F2ZV9hcmcobG9uZyBsb25nKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVUxPTkc6CisJCQljYXNlIEZPUk1BVF9UWVBFX0xPTkc6CisJCQkJc2F2ZV9hcmcodW5zaWduZWQgbG9uZyk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1NJWkVfVDoKKwkJCQlzYXZlX2FyZyhzaXplX3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9QVFJESUZGOgorCQkJCXNhdmVfYXJnKHB0cmRpZmZfdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1VTSE9SVDoKKwkJCWNhc2UgRk9STUFUX1RZUEVfU0hPUlQ6CisJCQkJc2F2ZV9hcmcoc2hvcnQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzYXZlX2FyZyhpbnQpOworCQkJfQorCQl9CisJfQorCXJldHVybiAodTMyICopKFBUUl9BTElHTihzdHIsIHNpemVvZih1MzIpKSkgLSBiaW5fYnVmOworCisjdW5kZWYgc2F2ZV9hcmcKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZiaW5fcHJpbnRmKTsKKworLyoqCisgKiBic3RyX3ByaW50ZiAtIEZvcm1hdCBhIHN0cmluZyBmcm9tIGJpbmFyeSBhcmd1bWVudHMgYW5kIHBsYWNlIGl0IGluIGEgYnVmZmVyCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIHBsYWNlIHRoZSByZXN1bHQgaW50bworICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSBidWZmZXIsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgbnVsbCBzcGFjZQorICogQGZtdDogVGhlIGZvcm1hdCBzdHJpbmcgdG8gdXNlCisgKiBAYmluX2J1ZjogQmluYXJ5IGFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxpa2UgQzk5IHZzbnByaW50ZiwgYnV0IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdnNucHJpbnRmIGdldHMKKyAqIGFyZ3VtZW50cyBmcm9tIHN0YWNrLCBhbmQgYnN0cl9wcmludGYgZ2V0cyBhcmd1bWVudHMgZnJvbSBAYmluX2J1ZiB3aGljaCBpcworICogYSBiaW5hcnkgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIGJ5IHZiaW5fcHJpbnRmLgorICoKKyAqIFRoZSBmb3JtYXQgZm9sbG93cyBDOTkgdnNucHJpbnRmLCBidXQgaGFzIHNvbWUgZXh0ZW5zaW9uczoKKyAqICVwUyBvdXRwdXQgdGhlIG5hbWUgb2YgYSB0ZXh0IHN5bWJvbAorICogJXBGIG91dHB1dCB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIKKyAqICVwUiBvdXRwdXQgdGhlIGFkZHJlc3MgcmFuZ2UgaW4gYSBzdHJ1Y3QgcmVzb3VyY2UKKyAqICVuIGlzIGlnbm9yZWQKKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCB3b3VsZAorICogYmUgZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gaW5wdXQsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcKKyAqICdcMCcsIGFzIHBlciBJU08gQzk5LiBJZiB5b3Ugd2FudCB0byBoYXZlIHRoZSBleGFjdAorICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiBpbnRvIEBidWYgYXMgcmV0dXJuIHZhbHVlCisgKiAobm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgJ1wwJyksIHVzZSB2c2NucHJpbnRmKCkuIElmIHRoZQorICogcmV0dXJuIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBAc2l6ZSwgdGhlIHJlc3VsdGluZworICogc3RyaW5nIGlzIHRydW5jYXRlZC4KKyAqLworaW50IGJzdHJfcHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5fYnVmKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07CisJY2hhciAqc3RyLCAqZW5kLCBjOworCWNvbnN0IGNoYXIgKmFyZ3MgPSAoY29uc3QgY2hhciAqKWJpbl9idWY7CisKKwlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYyA9IHswfTsKKworCWlmICh1bmxpa2VseSgoaW50KSBzaXplIDwgMCkpIHsKKwkJLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lLi4gKi8KKwkJc3RhdGljIGNoYXIgd2FybiA9IDE7CisJCVdBUk5fT04od2Fybik7CisJCXdhcm4gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdHIgPSBidWY7CisJZW5kID0gYnVmICsgc2l6ZTsKKworI2RlZmluZSBnZXRfYXJnKHR5cGUpCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXR5cGVvZih0eXBlKSB2YWx1ZTsJCQkJCQlcCisJaWYgKHNpemVvZih0eXBlKSA9PSA4KSB7CQkJCQlcCisJCWFyZ3MgPSBQVFJfQUxJR04oYXJncywgc2l6ZW9mKHUzMikpOwkJCVwKKwkJKih1MzIgKikmdmFsdWUgPSAqKHUzMiAqKWFyZ3M7CQkJCVwKKwkJKigodTMyICopJnZhbHVlICsgMSkgPSAqKHUzMiAqKShhcmdzICsgNCk7CQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlhcmdzID0gUFRSX0FMSUdOKGFyZ3MsIHNpemVvZih0eXBlKSk7CQkJXAorCQl2YWx1ZSA9ICoodHlwZW9mKHR5cGUpICopYXJnczsJCQkJXAorCX0JCQkJCQkJCVwKKwlhcmdzICs9IHNpemVvZih0eXBlKTsJCQkJCQlcCisJdmFsdWU7CQkJCQkJCQlcCit9KQorCisJLyogTWFrZSBzdXJlIGVuZCBpcyBhbHdheXMgPj0gYnVmICovCisJaWYgKGVuZCA8IGJ1ZikgeworCQllbmQgPSAoKHZvaWQgKiktMSk7CisJCXNpemUgPSBlbmQgLSBidWY7CisJfQorCisJd2hpbGUgKCpmbXQpIHsKKwkJaW50IHJlYWQ7CisJCWNvbnN0IGNoYXIgKm9sZF9mbXQgPSBmbXQ7CisKKwkJcmVhZCA9IGZvcm1hdF9kZWNvZGUoZm10LCAmc3BlYyk7CisKKwkJZm10ICs9IHJlYWQ7CisKKwkJc3dpdGNoIChzcGVjLnR5cGUpIHsKKwkJY2FzZSBGT1JNQVRfVFlQRV9OT05FOiB7CisJCQlpbnQgY29weSA9IHJlYWQ7CisJCQlpZiAoc3RyIDwgZW5kKSB7CisJCQkJaWYgKGNvcHkgPiBlbmQgLSBzdHIpCisJCQkJCWNvcHkgPSBlbmQgLSBzdHI7CisJCQkJbWVtY3B5KHN0ciwgb2xkX2ZtdCwgY29weSk7CisJCQl9CisJCQlzdHIgKz0gcmVhZDsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9XSURUSDoKKwkJCXNwZWMuZmllbGRfd2lkdGggPSBnZXRfYXJnKGludCk7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX1BSRUNJU0lPTjoKKwkJCXNwZWMucHJlY2lzaW9uID0gZ2V0X2FyZyhpbnQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9DSEFSOgorCQkJaWYgKCEoc3BlYy5mbGFncyAmIExFRlQpKSB7CisJCQkJd2hpbGUgKC0tc3BlYy5maWVsZF93aWR0aCA+IDApIHsKKwkJCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkJCSpzdHIgPSAnICc7CisJCQkJCSsrc3RyOworCQkJCX0KKwkJCX0KKwkJCWMgPSAodW5zaWduZWQgY2hhcikgZ2V0X2FyZyhjaGFyKTsKKwkJCWlmIChzdHIgPCBlbmQpCisJCQkJKnN0ciA9IGM7CisJCQkrK3N0cjsKKwkJCXdoaWxlICgtLXNwZWMuZmllbGRfd2lkdGggPiAwKSB7CisJCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkJKnN0ciA9ICcgJzsKKwkJCQkrK3N0cjsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfU1RSOiB7CisJCQljb25zdCBjaGFyICpzdHJfYXJnID0gYXJnczsKKwkJCXNpemVfdCBsZW4gPSBzdHJsZW4oc3RyX2FyZyk7CisJCQlhcmdzICs9IGxlbiArIDE7CisJCQlzdHIgPSBzdHJpbmcoc3RyLCBlbmQsIChjaGFyICopc3RyX2FyZywgc3BlYyk7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgRk9STUFUX1RZUEVfUFRSOgorCQkJc3RyID0gcG9pbnRlcihmbXQrMSwgc3RyLCBlbmQsIGdldF9hcmcodm9pZCAqKSwgc3BlYyk7CisJCQl3aGlsZSAoaXNhbG51bSgqZm10KSkKKwkJCQlmbXQrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfUEVSQ0VOVF9DSEFSOgorCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkqc3RyID0gJyUnOworCQkJKytzdHI7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX0lOVkFMSUQ6CisJCQlpZiAoc3RyIDwgZW5kKQorCQkJCSpzdHIgPSAnJSc7CisJCQkrK3N0cjsKKwkJCWlmICgqZm10KSB7CisJCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkJKnN0ciA9ICpmbXQ7CisJCQkJKytzdHI7CisJCQl9IGVsc2UgeworCQkJCS0tZm10OworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9OUkNIQVJTOgorCQkJLyogc2tpcCAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAoc3BlYy50eXBlKSB7CisKKwkJCWNhc2UgRk9STUFUX1RZUEVfTE9OR19MT05HOgorCQkJCW51bSA9IGdldF9hcmcobG9uZyBsb25nKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVUxPTkc6CisJCQkJbnVtID0gZ2V0X2FyZyh1bnNpZ25lZCBsb25nKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfTE9ORzoKKwkJCQludW0gPSBnZXRfYXJnKHVuc2lnbmVkIGxvbmcpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9TSVpFX1Q6CisJCQkJbnVtID0gZ2V0X2FyZyhzaXplX3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9QVFJESUZGOgorCQkJCW51bSA9IGdldF9hcmcocHRyZGlmZl90KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVVNIT1JUOgorCQkJCW51bSA9IGdldF9hcmcodW5zaWduZWQgc2hvcnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9TSE9SVDoKKwkJCQludW0gPSBnZXRfYXJnKHNob3J0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVUlOVDoKKwkJCQludW0gPSBnZXRfYXJnKHVuc2lnbmVkIGludCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW51bSA9IGdldF9hcmcoaW50KTsKKwkJCX0KKworCQkJc3RyID0gbnVtYmVyKHN0ciwgZW5kLCBudW0sIHNwZWMpOworCQl9CisJfQorCisJaWYgKHNpemUgPiAwKSB7CisJCWlmIChzdHIgPCBlbmQpCisJCQkqc3RyID0gJ1wwJzsKKwkJZWxzZQorCQkJZW5kWy0xXSA9ICdcMCc7CisJfQorCisjdW5kZWYgZ2V0X2FyZworCisJLyogdGhlIHRyYWlsaW5nIG51bGwgYnl0ZSBkb2Vzbid0IGNvdW50IHRvd2FyZHMgdGhlIHRvdGFsICovCisJcmV0dXJuIHN0ciAtIGJ1ZjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJzdHJfcHJpbnRmKTsKKworLyoqCisgKiBicHJpbnRmIC0gUGFyc2UgYSBmb3JtYXQgc3RyaW5nIGFuZCBwbGFjZSBhcmdzJyBiaW5hcnkgdmFsdWUgaW4gYSBidWZmZXIKKyAqIEBiaW5fYnVmOiBUaGUgYnVmZmVyIHRvIHBsYWNlIGFyZ3MnIGJpbmFyeSB2YWx1ZQorICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSBidWZmZXIoYnkgd29yZHMoMzJiaXRzKSwgbm90IGNoYXJhY3RlcnMpCisgKiBAZm10OiBUaGUgZm9ybWF0IHN0cmluZyB0byB1c2UKKyAqIEAuLi46IEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHdvcmRzKHUzMikgd3JpdHRlbgorICogaW50byBAYmluX2J1Zi4KKyAqLworaW50IGJwcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXJldCA9IHZiaW5fcHJpbnRmKGJpbl9idWYsIHNpemUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChicHJpbnRmKTsKKworI2VuZGlmIC8qIENPTkZJR19CSU5BUllfUFJJTlRGICovCisKIC8qKgogICogdnNzY2FuZiAtIFVuZm9ybWF0IGEgYnVmZmVyIGludG8gYSBsaXN0IG9mIGFyZ3VtZW50cwogICogQGJ1ZjoJaW5wdXQgYnVmZmVyCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnLmRlYnVnIGIvbW0vS2NvbmZpZy5kZWJ1ZwppbmRleCBjOGQ2MmQ0Li5iYjAxZTI5IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnLmRlYnVnCisrKyBiL21tL0tjb25maWcuZGVidWcKQEAgLTEsMyArMSwxMiBAQAorY29uZmlnIERFQlVHX1BBR0VBTExPQworCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisJZGVwZW5kcyBvbiAhSElCRVJOQVRJT04gfHwgIVBQQyAmJiAhU1BBUkMKKwktLS1oZWxwLS0tCisJICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgorCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKKwkgIG9mIG1lbW9yeSBjb3JydXB0aW9ucy4KKwogY29uZmlnIFdBTlRfUEFHRV9ERUJVR19GTEFHUwogCWJvb2wKIApkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDEyNmQzOTcuLjJlMmQzOGUgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTUxMyw2ICs1MTMsNyBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiBzdHJ1Y3QgcGFnZSAqX19wYWdlX2NhY2hlX2FsbG9jKGdmcF90IGdmcCkKQEAgLTU2NSw2ICs1NjYsMjQgQEAKIEVYUE9SVF9TWU1CT0wod2FpdF9vbl9wYWdlX2JpdCk7CiAKIC8qKgorICogYWRkX3BhZ2Vfd2FpdF9xdWV1ZSAtIEFkZCBhbiBhcmJpdHJhcnkgd2FpdGVyIHRvIGEgcGFnZSdzIHdhaXQgcXVldWUKKyAqIEBwYWdlIC0gUGFnZSBkZWZpbmluZyB0aGUgd2FpdCBxdWV1ZSBvZiBpbnRlcmVzdAorICogQHdhaXRlciAtIFdhaXRlciB0byBhZGQgdG8gdGhlIHF1ZXVlCisgKgorICogQWRkIGFuIGFyYml0cmFyeSBAd2FpdGVyIHRvIHRoZSB3YWl0IHF1ZXVlIGZvciB0aGUgbm9taW5hdGVkIEBwYWdlLgorICovCit2b2lkIGFkZF9wYWdlX3dhaXRfcXVldWUoc3RydWN0IHBhZ2UgKnBhZ2UsIHdhaXRfcXVldWVfdCAqd2FpdGVyKQoreworCXdhaXRfcXVldWVfaGVhZF90ICpxID0gcGFnZV93YWl0cXVldWUocGFnZSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJX19hZGRfd2FpdF9xdWV1ZShxLCB3YWl0ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFkZF9wYWdlX3dhaXRfcXVldWUpOworCisvKioKICAqIHVubG9ja19wYWdlIC0gdW5sb2NrIGEgbG9ja2VkIHBhZ2UKICAqIEBwYWdlOiB0aGUgcGFnZQogICoKQEAgLTYyNyw2ICs2NDYsNyBAQAogCXJldHVybiBfX3dhaXRfb25fYml0X2xvY2socGFnZV93YWl0cXVldWUocGFnZSksICZ3YWl0LAogCQkJCQlzeW5jX3BhZ2Vfa2lsbGFibGUsIFRBU0tfS0lMTEFCTEUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19sb2NrX3BhZ2Vfa2lsbGFibGUpOwogCiAvKioKICAqIF9fbG9ja19wYWdlX25vc3luYyAtIGdldCBhIGxvY2sgb24gdGhlIHBhZ2UsIHdpdGhvdXQgY2FsbGluZyBzeW5jX3BhZ2UoKQpAQCAtMjQ2Myw2ICsyNDgzLDkgQEAKICAqIChwcmVzdW1hYmx5IGF0IHBhZ2UtPnByaXZhdGUpLiAgSWYgdGhlIHJlbGVhc2Ugd2FzIHN1Y2Nlc3NmdWwsIHJldHVybiBgMScuCiAgKiBPdGhlcndpc2UgcmV0dXJuIHplcm8uCiAgKgorICogVGhpcyBtYXkgYWxzbyBiZSBjYWxsZWQgaWYgUEdfZnNjYWNoZSBpcyBzZXQgb24gYSBwYWdlLCBpbmRpY2F0aW5nIHRoYXQgdGhlCisgKiBwYWdlIGlzIGtub3duIHRvIHRoZSBsb2NhbCBjYWNoaW5nIHJvdXRpbmVzLgorICoKICAqIFRoZSBAZ2ZwX21hc2sgYXJndW1lbnQgc3BlY2lmaWVzIHdoZXRoZXIgSS9PIG1heSBiZSBwZXJmb3JtZWQgdG8gcmVsZWFzZQogICogdGhpcyBwYWdlIChfX0dGUF9JTyksIGFuZCB3aGV0aGVyIHRoZSBjYWxsIG1heSBibG9jayAoX19HRlBfV0FJVCAmIF9fR0ZQX0ZTKS4KICAqCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwX3hpcC5jIGIvbW0vZmlsZW1hcF94aXAuYwppbmRleCAwYzA0NjE1Li40MjdkZmUzIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwX3hpcC5jCisrKyBiL21tL2ZpbGVtYXBfeGlwLmMKQEAgLTg5LDggKzg5LDggQEAKIAkJCX0KIAkJfQogCQluciA9IG5yIC0gb2Zmc2V0OwotCQlpZiAobnIgPiBsZW4pCi0JCQluciA9IGxlbjsKKwkJaWYgKG5yID4gbGVuIC0gY29waWVkKQorCQkJbnIgPSBsZW4gLSBjb3BpZWQ7CiAKIAkJZXJyb3IgPSBtYXBwaW5nLT5hX29wcy0+Z2V0X3hpcF9tZW0obWFwcGluZywgaW5kZXgsIDAsCiAJCQkJCQkJJnhpcF9tZW0sICZ4aXBfcGZuKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA4ZTRiZTljLi4yZmM2ZDZjIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KQEAgLTk1LDYgKzk2LDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHM2NCBtZW1fY2dyb3VwX2xvY2FsX3VzYWdlKHN0cnVjdCBtZW1fY2dyb3VwX3N0YXQgKnN0YXQpCit7CisJczY0IHJldDsKKworCXJldCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KHN0YXQsIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSk7CisJcmV0ICs9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KHN0YXQsIE1FTV9DR1JPVVBfU1RBVF9SU1MpOworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBwZXItem9uZSBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgY29udHJvbGxlci4KICAqLwpAQCAtMTU0LDkgKzE2NCw5IEBACiAKIAkvKgogCSAqIFdoaWxlIHJlY2xhaW1pbmcgaW4gYSBoaWVhcmNoeSwgd2UgY2FjaGUgdGhlIGxhc3QgY2hpbGQgd2UKLQkgKiByZWNsYWltZWQgZnJvbS4gUHJvdGVjdGVkIGJ5IGhpZXJhcmNoeV9tdXRleAorCSAqIHJlY2xhaW1lZCBmcm9tLgogCSAqLwotCXN0cnVjdCBtZW1fY2dyb3VwICpsYXN0X3NjYW5uZWRfY2hpbGQ7CisJaW50IGxhc3Rfc2Nhbm5lZF9jaGlsZDsKIAkvKgogCSAqIFNob3VsZCB0aGUgYWNjb3VudGluZyBhbmQgY29udHJvbCBiZSBoaWVyYXJjaGljYWwsIHBlciBzdWJ0cmVlPwogCSAqLwpAQCAtMjQ3LDcgKzI1Nyw3IEBACiAJcmV0dXJuIG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBuaWQsIHppZCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbG9jYWxfem9uZXN0YXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJZW51bSBscnVfbGlzdCBpZHgpCiB7CiAJaW50IG5pZCwgemlkOwpAQCAtMjg2LDYgKzI5Niw5IEBACiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOworCisJaWYgKCFtbSkKKwkJcmV0dXJuIE5VTEw7CiAJLyoKIAkgKiBCZWNhdXNlIHdlIGhhdmUgbm8gbG9ja3MsIG1tLT5vd25lcidzIG1heSBiZSBiZWluZyBtb3ZlZCB0byBvdGhlcgogCSAqIGNncm91cC4gV2UgdXNlIGNzc190cnlnZXQoKSBoZXJlIGV2ZW4gaWYgdGhpcyBsb29rcwpAQCAtMzA4LDYgKzMyMSw0MiBAQAogCXJldHVybiBjc3NfaXNfcmVtb3ZlZCgmbWVtLT5jc3MpOwogfQogCisKKy8qCisgKiBDYWxsIGNhbGxiYWNrIGZ1bmN0aW9uIGFnYWluc3QgYWxsIGNncm91cCB1bmRlciBoaWVyYXJjaHkgdHJlZS4KKyAqLworc3RhdGljIGludCBtZW1fY2dyb3VwX3dhbGtfdHJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwgdm9pZCAqZGF0YSwKKwkJCSAgaW50ICgqZnVuYykoc3RydWN0IG1lbV9jZ3JvdXAgKiwgdm9pZCAqKSkKK3sKKwlpbnQgZm91bmQsIHJldCwgbmV4dGlkOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKKworCWlmICghcm9vdC0+dXNlX2hpZXJhcmNoeSkKKwkJcmV0dXJuICgqZnVuYykocm9vdCwgZGF0YSk7CisKKwluZXh0aWQgPSAxOworCWRvIHsKKwkJcmV0ID0gMDsKKwkJbWVtID0gTlVMTDsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWNzcyA9IGNzc19nZXRfbmV4dCgmbWVtX2Nncm91cF9zdWJzeXMsIG5leHRpZCwgJnJvb3QtPmNzcywKKwkJCQkgICAmZm91bmQpOworCQlpZiAoY3NzICYmIGNzc190cnlnZXQoY3NzKSkKKwkJCW1lbSA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCBtZW1fY2dyb3VwLCBjc3MpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQlpZiAobWVtKSB7CisJCQlyZXQgPSAoKmZ1bmMpKG1lbSwgZGF0YSk7CisJCQljc3NfcHV0KCZtZW0tPmNzcyk7CisJCX0KKwkJbmV4dGlkID0gZm91bmQgKyAxOworCX0gd2hpbGUgKCFyZXQgJiYgY3NzKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBGb2xsb3dpbmcgTFJVIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIHdpdGhvdXQgUENHX0xPQ0suCiAgKiBPcGVyYXRpb25zIGFyZSBjYWxsZWQgYnkgcm91dGluZSBvZiBnbG9iYWwgTFJVIGluZGVwZW5kZW50bHkgZnJvbSBtZW1jZy4KQEAgLTQ0MSwzMSArNDkwLDI0IEBACiBpbnQgdGFza19pbl9tZW1fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKIAlpbnQgcmV0OworCXN0cnVjdCBtZW1fY2dyb3VwICpjdXJyID0gTlVMTDsKIAogCXRhc2tfbG9jayh0YXNrKTsKLQlyZXQgPSB0YXNrLT5tbSAmJiBtbV9tYXRjaF9jZ3JvdXAodGFzay0+bW0sIG1lbSk7CisJcmN1X3JlYWRfbG9jaygpOworCWN1cnIgPSB0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbSh0YXNrLT5tbSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJdGFza191bmxvY2sodGFzayk7CisJaWYgKCFjdXJyKQorCQlyZXR1cm4gMDsKKwlpZiAoY3Vyci0+dXNlX2hpZXJhcmNoeSkKKwkJcmV0ID0gY3NzX2lzX2FuY2VzdG9yKCZjdXJyLT5jc3MsICZtZW0tPmNzcyk7CisJZWxzZQorCQlyZXQgPSAoY3VyciA9PSBtZW0pOworCWNzc19wdXQoJmN1cnItPmNzcyk7CiAJcmV0dXJuIHJldDsKIH0KIAogLyoKLSAqIENhbGN1bGF0ZSBtYXBwZWRfcmF0aW8gdW5kZXIgbWVtb3J5IGNvbnRyb2xsZXIuIFRoaXMgd2lsbCBiZSB1c2VkIGluCi0gKiB2bXNjYW4uYyBmb3IgZGV0ZXJlbWluaW5nIHdlIGhhdmUgdG8gcmVjbGFpbSBtYXBwZWQgcGFnZXMuCi0gKi8KLWludCBtZW1fY2dyb3VwX2NhbGNfbWFwcGVkX3JhdGlvKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCi17Ci0JbG9uZyB0b3RhbCwgcnNzOwotCi0JLyoKLQkgKiB1c2FnZSBpcyByZWNvcmRlZCBpbiBieXRlcy4gQnV0LCBoZXJlLCB3ZSBhc3N1bWUgdGhlIG51bWJlciBvZgotCSAqIHBoeXNpY2FsIHBhZ2VzIGNhbiBiZSByZXByZXNlbnRlZCBieSAibG9uZyIgb24gYW55IGFyY2guCi0JICovCi0JdG90YWwgPSAobG9uZykgKG1lbS0+cmVzLnVzYWdlID4+IFBBR0VfU0hJRlQpICsgMUw7Ci0JcnNzID0gKGxvbmcpbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1JTUyk7Ci0JcmV0dXJuIChpbnQpKChyc3MgKiAxMDBMKSAvIHRvdGFsKTsKLX0KLQotLyoKICAqIHByZXZfcHJpb3JpdHkgY29udHJvbC4uLnRoaXMgd2lsbCBiZSB1c2VkIGluIG1lbW9yeSByZWNsYWltIHBhdGguCiAgKi8KIGludCBtZW1fY2dyb3VwX2dldF9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCkBAIC01MDEsOCArNTQzLDggQEAKIAl1bnNpZ25lZCBsb25nIGdiOwogCXVuc2lnbmVkIGxvbmcgaW5hY3RpdmVfcmF0aW87CiAKLQlpbmFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1jZywgTFJVX0lOQUNUSVZFX0FOT04pOwotCWFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1jZywgTFJVX0FDVElWRV9BTk9OKTsKKwlpbmFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KG1lbWNnLCBMUlVfSU5BQ1RJVkVfQU5PTik7CisJYWN0aXZlID0gbWVtX2Nncm91cF9nZXRfbG9jYWxfem9uZXN0YXQobWVtY2csIExSVV9BQ1RJVkVfQU5PTik7CiAKIAlnYiA9IChpbmFjdGl2ZSArIGFjdGl2ZSkgPj4gKDMwIC0gUEFHRV9TSElGVCk7CiAJaWYgKGdiKQpAQCAtNjI5LDEwMyArNjcxLDYgQEAKICNkZWZpbmUgbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGNvdW50ZXIsIG1lbWJlcikJXAogCWNvbnRhaW5lcl9vZihjb3VudGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCwgbWVtYmVyKQogCi0vKgotICogVGhpcyByb3V0aW5lIGZpbmRzIHRoZSBERlMgd2FsayBzdWNjZXNzb3IuIFRoaXMgcm91dGluZSBzaG91bGQgYmUKLSAqIGNhbGxlZCB3aXRoIGhpZXJhcmNoeV9tdXRleCBoZWxkCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqCi1fX21lbV9jZ3JvdXBfZ2V0X25leHRfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqY3Vyciwgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtKQotewotCXN0cnVjdCBjZ3JvdXAgKmNncm91cCwgKmN1cnJfY2dyb3VwLCAqcm9vdF9jZ3JvdXA7Ci0KLQljdXJyX2Nncm91cCA9IGN1cnItPmNzcy5jZ3JvdXA7Ci0Jcm9vdF9jZ3JvdXAgPSByb290X21lbS0+Y3NzLmNncm91cDsKLQotCWlmICghbGlzdF9lbXB0eSgmY3Vycl9jZ3JvdXAtPmNoaWxkcmVuKSkgewotCQkvKgotCQkgKiBXYWxrIGRvd24gdG8gY2hpbGRyZW4KLQkJICovCi0JCWNncm91cCA9IGxpc3RfZW50cnkoY3Vycl9jZ3JvdXAtPmNoaWxkcmVuLm5leHQsCi0JCQkJCQlzdHJ1Y3QgY2dyb3VwLCBzaWJsaW5nKTsKLQkJY3VyciA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KGNncm91cCk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLXZpc2l0X3BhcmVudDoKLQlpZiAoY3Vycl9jZ3JvdXAgPT0gcm9vdF9jZ3JvdXApIHsKLQkJLyogY2FsbGVyIGhhbmRsZXMgTlVMTCBjYXNlICovCi0JCWN1cnIgPSBOVUxMOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyoKLQkgKiBHb3RvIG5leHQgc2libGluZwotCSAqLwotCWlmIChjdXJyX2Nncm91cC0+c2libGluZy5uZXh0ICE9ICZjdXJyX2Nncm91cC0+cGFyZW50LT5jaGlsZHJlbikgewotCQljZ3JvdXAgPSBsaXN0X2VudHJ5KGN1cnJfY2dyb3VwLT5zaWJsaW5nLm5leHQsIHN0cnVjdCBjZ3JvdXAsCi0JCQkJCQlzaWJsaW5nKTsKLQkJY3VyciA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KGNncm91cCk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKgotCSAqIEdvIHVwIHRvIG5leHQgcGFyZW50IGFuZCBuZXh0IHBhcmVudCdzIHNpYmxpbmcgaWYgbmVlZCBiZQotCSAqLwotCWN1cnJfY2dyb3VwID0gY3Vycl9jZ3JvdXAtPnBhcmVudDsKLQlnb3RvIHZpc2l0X3BhcmVudDsKLQotZG9uZToKLQlyZXR1cm4gY3VycjsKLX0KLQotLyoKLSAqIFZpc2l0IHRoZSBmaXJzdCBjaGlsZCAobmVlZCBub3QgYmUgdGhlIGZpcnN0IGNoaWxkIGFzIHBlciB0aGUgb3JkZXJpbmcKLSAqIG9mIHRoZSBjZ3JvdXAgbGlzdCwgc2luY2Ugd2UgdHJhY2sgbGFzdF9zY2FubmVkX2NoaWxkKSBvZiBAbWVtIGFuZCB1c2UKLSAqIHRoYXQgdG8gcmVjbGFpbSBmcmVlIHBhZ2VzIGZyb20uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqCi1tZW1fY2dyb3VwX2dldF9uZXh0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtKQotewotCXN0cnVjdCBjZ3JvdXAgKmNncm91cDsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqb3JpZywgKm5leHQ7Ci0JYm9vbCBvYnNvbGV0ZTsKLQotCS8qCi0JICogU2NhbiBhbGwgY2hpbGRyZW4gdW5kZXIgdGhlIG1lbV9jZ3JvdXAgbWVtCi0JICovCi0JbXV0ZXhfbG9jaygmbWVtX2Nncm91cF9zdWJzeXMuaGllcmFyY2h5X211dGV4KTsKLQotCW9yaWcgPSByb290X21lbS0+bGFzdF9zY2FubmVkX2NoaWxkOwotCW9ic29sZXRlID0gbWVtX2Nncm91cF9pc19vYnNvbGV0ZShvcmlnKTsKLQotCWlmIChsaXN0X2VtcHR5KCZyb290X21lbS0+Y3NzLmNncm91cC0+Y2hpbGRyZW4pKSB7Ci0JCS8qCi0JCSAqIHJvb3RfbWVtIG1pZ2h0IGhhdmUgY2hpbGRyZW4gYmVmb3JlIGFuZCBsYXN0X3NjYW5uZWRfY2hpbGQKLQkJICogbWF5IHBvaW50IHRvIG9uZSBvZiB0aGVtLiBXZSBwdXQgaXQgbGF0ZXIuCi0JCSAqLwotCQlpZiAob3JpZykKLQkJCVZNX0JVR19PTighb2Jzb2xldGUpOwotCQluZXh0ID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCWlmICghb3JpZyB8fCBvYnNvbGV0ZSkgewotCQljZ3JvdXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyb290X21lbS0+Y3NzLmNncm91cC0+Y2hpbGRyZW4sCi0JCQkJc3RydWN0IGNncm91cCwgc2libGluZyk7Ci0JCW5leHQgPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JvdXApOwotCX0gZWxzZQotCQluZXh0ID0gX19tZW1fY2dyb3VwX2dldF9uZXh0X25vZGUob3JpZywgcm9vdF9tZW0pOwotCi1kb25lOgotCWlmIChuZXh0KQotCQltZW1fY2dyb3VwX2dldChuZXh0KTsKLQlyb290X21lbS0+bGFzdF9zY2FubmVkX2NoaWxkID0gbmV4dDsKLQlpZiAob3JpZykKLQkJbWVtX2Nncm91cF9wdXQob3JpZyk7Ci0JbXV0ZXhfdW5sb2NrKCZtZW1fY2dyb3VwX3N1YnN5cy5oaWVyYXJjaHlfbXV0ZXgpOwotCXJldHVybiAobmV4dCkgPyBuZXh0IDogcm9vdF9tZW07Ci19Ci0KIHN0YXRpYyBib29sIG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKIAlpZiAoZG9fc3dhcF9hY2NvdW50KSB7CkBAIC03NTQsNDcgKzY5OSwxNzQgQEAKIAlyZXR1cm4gc3dhcHBpbmVzczsKIH0KIAotLyoKLSAqIERhbmNlIGRvd24gdGhlIGhpZXJhcmNoeSBpZiBuZWVkZWQgdG8gcmVjbGFpbSBtZW1vcnkuIFdlIHJlbWVtYmVyIHRoZQotICogbGFzdCBjaGlsZCB3ZSByZWNsYWltZWQgZnJvbSwgc28gdGhhdCB3ZSBkb24ndCBlbmQgdXAgcGVuYWxpemluZwotICogb25lIGNoaWxkIGV4dGVuc2l2ZWx5IGJhc2VkIG9uIGl0cyBwb3NpdGlvbiBpbiB0aGUgY2hpbGRyZW4gbGlzdC4KLSAqCi0gKiByb290X21lbSBpcyB0aGUgb3JpZ2luYWwgYW5jZXN0b3IgdGhhdCB3ZSd2ZSBiZWVuIHJlY2xhaW0gZnJvbS4KLSAqLwotc3RhdGljIGludCBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbSwKLQkJCQkJCWdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCkKK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbl9jYihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICpuZXh0X21lbTsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgKnZhbCA9IGRhdGE7CisJKCp2YWwpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVtX2Nncm91cF9wcmludF9tZW1faW5mbzogQ2FsbGVkIGZyb20gT09NIHdpdGggdGFza2xpc3RfbG9jayBoZWxkIGluIHJlYWQgbW9kZS4KKyAqIEBtZW1jZzogVGhlIG1lbW9yeSBjZ3JvdXAgdGhhdCB3ZW50IG92ZXIgbGltaXQKKyAqIEBwOiBUYXNrIHRoYXQgaXMgZ29pbmcgdG8gYmUga2lsbGVkCisgKgorICogTk9URTogQG1lbWNnIGFuZCBAcCdzIG1lbV9jZ3JvdXAgY2FuIGJlIGRpZmZlcmVudCB3aGVuIGhpZXJhcmNoeSBpcworICogZW5hYmxlZAorICovCit2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IGNncm91cCAqdGFza19jZ3JwOworCXN0cnVjdCBjZ3JvdXAgKm1lbV9jZ3JwOworCS8qCisJICogTmVlZCBhIGJ1ZmZlciBpbiBCU1MsIGNhbid0IHJlbHkgb24gYWxsb2NhdGlvbnMuIFRoZSBjb2RlIHJlbGllcworCSAqIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgT09NIGlzIHNlcmlhbGl6ZWQgZm9yIG1lbW9yeSBjb250cm9sbGVyLgorCSAqIElmIHRoaXMgYXNzdW1wdGlvbiBpcyBicm9rZW4sIHJldmlzaXQgdGhpcyBjb2RlLgorCSAqLworCXN0YXRpYyBjaGFyIG1lbWNnX25hbWVbUEFUSF9NQVhdOworCWludCByZXQ7CisKKwlpZiAoIW1lbWNnKQorCQlyZXR1cm47CisKKworCXJjdV9yZWFkX2xvY2soKTsKKworCW1lbV9jZ3JwID0gbWVtY2ctPmNzcy5jZ3JvdXA7CisJdGFza19jZ3JwID0gdGFza19jZ3JvdXAocCwgbWVtX2Nncm91cF9zdWJzeXNfaWQpOworCisJcmV0ID0gY2dyb3VwX3BhdGgodGFza19jZ3JwLCBtZW1jZ19uYW1lLCBQQVRIX01BWCk7CisJaWYgKHJldCA8IDApIHsKKwkJLyoKKwkJICogVW5mb3J0dW5hdGVseSwgd2UgYXJlIHVuYWJsZSB0byBjb252ZXJ0IHRvIGEgdXNlZnVsIG5hbWUKKwkJICogQnV0IHdlJ2xsIHN0aWxsIHByaW50IG91dCB0aGUgdXNhZ2UgaW5mb3JtYXRpb24KKwkJICovCisJCXJjdV9yZWFkX3VubG9jaygpOworCQlnb3RvIGRvbmU7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiVGFzayBpbiAlcyBraWxsZWQiLCBtZW1jZ19uYW1lKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlyZXQgPSBjZ3JvdXBfcGF0aChtZW1fY2dycCwgbWVtY2dfbmFtZSwgUEFUSF9NQVgpOworCWlmIChyZXQgPCAwKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlnb3RvIGRvbmU7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKLQkgKiBSZWNsYWltIHVuY29uZGl0aW9uYWxseSBhbmQgZG9uJ3QgY2hlY2sgZm9yIHJldHVybiB2YWx1ZS4KLQkgKiBXZSBuZWVkIHRvIHJlY2xhaW0gaW4gdGhlIGN1cnJlbnQgZ3JvdXAgYW5kIGRvd24gdGhlIHRyZWUuCi0JICogT25lIG1pZ2h0IHRoaW5rIGFib3V0IGNoZWNraW5nIGZvciBjaGlsZHJlbiBiZWZvcmUgcmVjbGFpbWluZywKLQkgKiBidXQgdGhlcmUgbWlnaHQgYmUgbGVmdCBvdmVyIGFjY291bnRpbmcsIGV2ZW4gYWZ0ZXIgY2hpbGRyZW4KLQkgKiBoYXZlIGxlZnQuCisJICogQ29udGludWVzIGZyb20gYWJvdmUsIHNvIHdlIGRvbid0IG5lZWQgYW4gS0VSTl8gbGV2ZWwKIAkgKi8KLQlyZXQgKz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhyb290X21lbSwgZ2ZwX21hc2ssIG5vc3dhcCwKLQkJCQkJICAgZ2V0X3N3YXBwaW5lc3Mocm9vdF9tZW0pKTsKLQlpZiAobWVtX2Nncm91cF9jaGVja191bmRlcl9saW1pdChyb290X21lbSkpCi0JCXJldHVybiAxOwkvKiBpbmRpY2F0ZSByZWNsYWltIGhhcyBzdWNjZWVkZWQgKi8KLQlpZiAoIXJvb3RfbWVtLT51c2VfaGllcmFyY2h5KQotCQlyZXR1cm4gcmV0OworCXByaW50ayhLRVJOX0NPTlQgIiBhcyBhIHJlc3VsdCBvZiBsaW1pdCBvZiAlc1xuIiwgbWVtY2dfbmFtZSk7Citkb25lOgogCi0JbmV4dF9tZW0gPSBtZW1fY2dyb3VwX2dldF9uZXh0X25vZGUocm9vdF9tZW0pOworCXByaW50ayhLRVJOX0lORk8gIm1lbW9yeTogdXNhZ2UgJWxsdWtCLCBsaW1pdCAlbGx1a0IsIGZhaWxjbnQgJWxsdVxuIiwKKwkJcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19VU0FHRSkgPj4gMTAsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfTElNSVQpID4+IDEwLAorCQlyZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPnJlcywgUkVTX0ZBSUxDTlQpKTsKKwlwcmludGsoS0VSTl9JTkZPICJtZW1vcnkrc3dhcDogdXNhZ2UgJWxsdWtCLCBsaW1pdCAlbGx1a0IsICIKKwkJImZhaWxjbnQgJWxsdVxuIiwKKwkJcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX1VTQUdFKSA+PiAxMCwKKwkJcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX0xJTUlUKSA+PiAxMCwKKwkJcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX0ZBSUxDTlQpKTsKK30KIAotCXdoaWxlIChuZXh0X21lbSAhPSByb290X21lbSkgewotCQlpZiAobWVtX2Nncm91cF9pc19vYnNvbGV0ZShuZXh0X21lbSkpIHsKLQkJCW5leHRfbWVtID0gbWVtX2Nncm91cF9nZXRfbmV4dF9ub2RlKHJvb3RfbWVtKTsKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBtZW1jZyB1bmRlciBoaWVyYXJjaHkgdHJlZS4gUmV0dXJucworICogMShzZWxmIGNvdW50KSBpZiBubyBjaGlsZHJlbi4KKyAqLworc3RhdGljIGludCBtZW1fY2dyb3VwX2NvdW50X2NoaWxkcmVuKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit7CisJaW50IG51bSA9IDA7CisgCW1lbV9jZ3JvdXBfd2Fsa190cmVlKG1lbSwgJm51bSwgbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbl9jYik7CisJcmV0dXJuIG51bTsKK30KKworLyoKKyAqIFZpc2l0IHRoZSBmaXJzdCBjaGlsZCAobmVlZCBub3QgYmUgdGhlIGZpcnN0IGNoaWxkIGFzIHBlciB0aGUgb3JkZXJpbmcKKyAqIG9mIHRoZSBjZ3JvdXAgbGlzdCwgc2luY2Ugd2UgdHJhY2sgbGFzdF9zY2FubmVkX2NoaWxkKSBvZiBAbWVtIGFuZCB1c2UKKyAqIHRoYXQgdG8gcmVjbGFpbSBmcmVlIHBhZ2VzIGZyb20uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqCittZW1fY2dyb3VwX3NlbGVjdF92aWN0aW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICpyZXQgPSBOVUxMOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CisJaW50IG5leHRpZCwgZm91bmQ7CisKKwlpZiAoIXJvb3RfbWVtLT51c2VfaGllcmFyY2h5KSB7CisJCWNzc19nZXQoJnJvb3RfbWVtLT5jc3MpOworCQlyZXQgPSByb290X21lbTsKKwl9CisKKwl3aGlsZSAoIXJldCkgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCW5leHRpZCA9IHJvb3RfbWVtLT5sYXN0X3NjYW5uZWRfY2hpbGQgKyAxOworCQljc3MgPSBjc3NfZ2V0X25leHQoJm1lbV9jZ3JvdXBfc3Vic3lzLCBuZXh0aWQsICZyb290X21lbS0+Y3NzLAorCQkJCSAgICZmb3VuZCk7CisJCWlmIChjc3MgJiYgY3NzX3RyeWdldChjc3MpKQorCQkJcmV0ID0gY29udGFpbmVyX29mKGNzcywgc3RydWN0IG1lbV9jZ3JvdXAsIGNzcyk7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCS8qIFVwZGF0ZXMgc2Nhbm5pbmcgcGFyYW1ldGVyICovCisJCXNwaW5fbG9jaygmcm9vdF9tZW0tPnJlY2xhaW1fcGFyYW1fbG9jayk7CisJCWlmICghY3NzKSB7CisJCQkvKiB0aGlzIG1lYW5zIHN0YXJ0IHNjYW4gZnJvbSBJRDoxICovCisJCQlyb290X21lbS0+bGFzdF9zY2FubmVkX2NoaWxkID0gMDsKKwkJfSBlbHNlCisJCQlyb290X21lbS0+bGFzdF9zY2FubmVkX2NoaWxkID0gZm91bmQ7CisJCXNwaW5fdW5sb2NrKCZyb290X21lbS0+cmVjbGFpbV9wYXJhbV9sb2NrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2NhbiB0aGUgaGllcmFyY2h5IGlmIG5lZWRlZCB0byByZWNsYWltIG1lbW9yeS4gV2UgcmVtZW1iZXIgdGhlIGxhc3QgY2hpbGQKKyAqIHdlIHJlY2xhaW1lZCBmcm9tLCBzbyB0aGF0IHdlIGRvbid0IGVuZCB1cCBwZW5hbGl6aW5nIG9uZSBjaGlsZCBleHRlbnNpdmVseQorICogYmFzZWQgb24gaXRzIHBvc2l0aW9uIGluIHRoZSBjaGlsZHJlbiBsaXN0LgorICoKKyAqIHJvb3RfbWVtIGlzIHRoZSBvcmlnaW5hbCBhbmNlc3RvciB0aGF0IHdlJ3ZlIGJlZW4gcmVjbGFpbSBmcm9tLgorICoKKyAqIFdlIGdpdmUgdXAgYW5kIHJldHVybiB0byB0aGUgY2FsbGVyIHdoZW4gd2UgdmlzaXQgcm9vdF9tZW0gdHdpY2UuCisgKiAob3RoZXIgZ3JvdXBzIGNhbiBiZSByZW1vdmVkIHdoaWxlIHdlJ3JlIHdhbGtpbmcuLi4uKQorICoKKyAqIElmIHNocmluaz09dHJ1ZSwgZm9yIGF2b2lkaW5nIHRvIGZyZWUgdG9vIG11Y2gsIHRoaXMgcmV0dXJucyBpbW1lZGllYXRlbHkuCisgKi8KK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW0sCisJCQkJICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLCBib29sIHNocmluaykKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqdmljdGltOworCWludCByZXQsIHRvdGFsID0gMDsKKwlpbnQgbG9vcCA9IDA7CisKKwl3aGlsZSAobG9vcCA8IDIpIHsKKwkJdmljdGltID0gbWVtX2Nncm91cF9zZWxlY3RfdmljdGltKHJvb3RfbWVtKTsKKwkJaWYgKHZpY3RpbSA9PSByb290X21lbSkKKwkJCWxvb3ArKzsKKwkJaWYgKCFtZW1fY2dyb3VwX2xvY2FsX3VzYWdlKCZ2aWN0aW0tPnN0YXQpKSB7CisJCQkvKiB0aGlzIGNncm91cCdzIGxvY2FsIHVzYWdlID09IDAgKi8KKwkJCWNzc19wdXQoJnZpY3RpbS0+Y3NzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXJldCArPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG5leHRfbWVtLCBnZnBfbWFzaywgbm9zd2FwLAotCQkJCQkJICAgZ2V0X3N3YXBwaW5lc3MobmV4dF9tZW0pKTsKKwkJLyogd2UgdXNlIHN3YXBwaW5lc3Mgb2YgbG9jYWwgY2dyb3VwICovCisJCXJldCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXModmljdGltLCBnZnBfbWFzaywgbm9zd2FwLAorCQkJCQkJICAgZ2V0X3N3YXBwaW5lc3ModmljdGltKSk7CisJCWNzc19wdXQoJnZpY3RpbS0+Y3NzKTsKKwkJLyoKKwkJICogQXQgc2hyaW5raW5nIHVzYWdlLCB3ZSBjYW4ndCBjaGVjayB3ZSBzaG91bGQgc3RvcCBoZXJlIG9yCisJCSAqIHJlY2xhaW0gbW9yZS4gSXQncyBkZXBlbmRzIG9uIGNhbGxlcnMuIGxhc3Rfc2Nhbm5lZF9jaGlsZAorCQkgKiB3aWxsIHdvcmsgZW5vdWdoIGZvciBrZWVwaW5nIGZhaXJuZXNzIHVuZGVyIHRyZWUuCisJCSAqLworCQlpZiAoc2hyaW5rKQorCQkJcmV0dXJuIHJldDsKKwkJdG90YWwgKz0gcmV0OwogCQlpZiAobWVtX2Nncm91cF9jaGVja191bmRlcl9saW1pdChyb290X21lbSkpCi0JCQlyZXR1cm4gMTsJLyogaW5kaWNhdGUgcmVjbGFpbSBoYXMgc3VjY2VlZGVkICovCi0JCW5leHRfbWVtID0gbWVtX2Nncm91cF9nZXRfbmV4dF9ub2RlKHJvb3RfbWVtKTsKKwkJCXJldHVybiAxICsgdG90YWw7CiAJfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHRvdGFsOwogfQogCiBib29sIG1lbV9jZ3JvdXBfb29tX2NhbGxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCkBAIC04MTMsNiArODg1LDE5IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIGludCByZWNvcmRfbGFzdF9vb21fY2Ioc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdm9pZCAqZGF0YSkKK3sKKwltZW0tPmxhc3Rfb29tX2ppZmZpZXMgPSBqaWZmaWVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfbGFzdF9vb20oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKK3sKKwltZW1fY2dyb3VwX3dhbGtfdHJlZShtZW0sIE5VTEwsIHJlY29yZF9sYXN0X29vbV9jYik7Cit9CisKKwogLyoKICAqIFVubGlrZSBleHBvcnRlZCBpbnRlcmZhY2UsICJvb20iIHBhcmFtZXRlciBpcyBhZGRlZC4gaWYgb29tPT10cnVlLAogICogb29tLWtpbGxlciBjYW4gYmUgaW52b2tlZC4KQEAgLTg3NSw3ICs5NjAsNyBAQAogCQkJZ290byBub21lbTsKIAogCQlyZXQgPSBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzaywKLQkJCQkJCQlub3N3YXApOworCQkJCQkJCW5vc3dhcCwgZmFsc2UpOwogCQlpZiAocmV0KQogCQkJY29udGludWU7CiAKQEAgLTg5NSw3ICs5ODAsNyBAQAogCQkJCW11dGV4X2xvY2soJm1lbWNnX3Rhc2tsaXN0KTsKIAkJCQltZW1fY2dyb3VwX291dF9vZl9tZW1vcnkobWVtX292ZXJfbGltaXQsIGdmcF9tYXNrKTsKIAkJCQltdXRleF91bmxvY2soJm1lbWNnX3Rhc2tsaXN0KTsKLQkJCQltZW1fb3Zlcl9saW1pdC0+bGFzdF9vb21famlmZmllcyA9IGppZmZpZXM7CisJCQkJcmVjb3JkX2xhc3Rfb29tKG1lbV9vdmVyX2xpbWl0KTsKIAkJCX0KIAkJCWdvdG8gbm9tZW07CiAJCX0KQEAgLTkwNiwyMCArOTkxLDU1IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKKworLyoKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdldCBtZW1fY2dyb3VwIGZyb20gSUQuIG11c3QgYmUgY2FsbGVkIHVuZGVyCisgKiByY3VfcmVhZF9sb2NrKCkuIFRoZSBjYWxsZXIgbXVzdCBjaGVjayBjc3NfaXNfcmVtb3ZlZCgpIG9yIHNvbWUgaWYKKyAqIGl0J3MgY29uY2Vybi4gKGRyb3BwaW5nIHJlZmNudCBmcm9tIHN3YXAgY2FuIGJlIGNhbGxlZCBhZ2FpbnN0IHJlbW92ZWQKKyAqIG1lbWNnLikKKyAqLworc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2xvb2t1cCh1bnNpZ25lZCBzaG9ydCBpZCkKK3sKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCisJLyogSUQgMCBpcyB1bnVzZWQgSUQgKi8KKwlpZiAoIWlkKQorCQlyZXR1cm4gTlVMTDsKKwljc3MgPSBjc3NfbG9va3VwKCZtZW1fY2dyb3VwX3N1YnN5cywgaWQpOworCWlmICghY3NzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY29udGFpbmVyX29mKGNzcywgc3RydWN0IG1lbV9jZ3JvdXAsIGNzcyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fc3dhcGNhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CisJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKKwl1bnNpZ25lZCBzaG9ydCBpZDsKIAlzd3BfZW50cnlfdCBlbnQ7CiAKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCiAJaWYgKCFQYWdlU3dhcENhY2hlKHBhZ2UpKQogCQlyZXR1cm4gTlVMTDsKIAotCWVudC52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSk7Ci0JbWVtID0gbG9va3VwX3N3YXBfY2dyb3VwKGVudCk7Ci0JaWYgKCFtZW0pCi0JCXJldHVybiBOVUxMOwotCWlmICghY3NzX3RyeWdldCgmbWVtLT5jc3MpKQotCQlyZXR1cm4gTlVMTDsKKwlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwkvKgorCSAqIFVzZWQgYml0IG9mIHN3YXBjYWNoZSBpcyBzb2xpZCB1bmRlciBwYWdlIGxvY2suCisJICovCisJaWYgKFBhZ2VDZ3JvdXBVc2VkKHBjKSkgeworCQltZW0gPSBwYy0+bWVtX2Nncm91cDsKKwkJaWYgKG1lbSAmJiAhY3NzX3RyeWdldCgmbWVtLT5jc3MpKQorCQkJbWVtID0gTlVMTDsKKwl9IGVsc2UgeworCQllbnQudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpOworCQlpZCA9IGxvb2t1cF9zd2FwX2Nncm91cChlbnQpOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCW1lbSA9IG1lbV9jZ3JvdXBfbG9va3VwKGlkKTsKKwkJaWYgKG1lbSAmJiAhY3NzX3RyeWdldCgmbWVtLT5jc3MpKQorCQkJbWVtID0gTlVMTDsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQogCXJldHVybiBtZW07CiB9CiAKQEAgLTExMTgsNiArMTIzOCwxMCBAQAogCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVELCBOVUxMKTsKIH0KIAorc3RhdGljIHZvaWQKK19fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX3N3YXBpbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKnB0ciwKKwkJCQkJZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSk7CisKIGludCBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC0xMTU0LDE2ICsxMjc4LDYgQEAKIAkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAl9CiAKLQlpZiAoZG9fc3dhcF9hY2NvdW50ICYmIFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKLQkJbWVtID0gdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fc3dhcGNhY2hlKHBhZ2UpOwotCQlpZiAobWVtKQotCQkJbW0gPSBOVUxMOwotCQkgIGVsc2UKLQkJCW1lbSA9IE5VTEw7Ci0JCS8qIFN3YXBDYWNoZSBtYXkgYmUgc3RpbGwgbGlua2VkIHRvIExSVSBub3cuICovCi0JCW1lbV9jZ3JvdXBfbHJ1X2RlbF9iZWZvcmVfY29tbWl0X3N3YXBjYWNoZShwYWdlKTsKLQl9Ci0KIAlpZiAodW5saWtlbHkoIW1tICYmICFtZW0pKQogCQltbSA9ICZpbml0X21tOwogCkBAIC0xMTcxLDIyICsxMjg1LDE2IEBACiAJCXJldHVybiBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAogCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEUsIE5VTEwpOwogCi0JcmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKLQkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NITUVNLCBtZW0pOwotCWlmIChtZW0pCi0JCWNzc19wdXQoJm1lbS0+Y3NzKTsKLQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKLQkJbWVtX2Nncm91cF9scnVfYWRkX2FmdGVyX2NvbW1pdF9zd2FwY2FjaGUocGFnZSk7CisJLyogc2htZW0gKi8KKwlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkgeworCQlyZXQgPSBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcGluKG1tLCBwYWdlLCBnZnBfbWFzaywgJm1lbSk7CisJCWlmICghcmV0KQorCQkJX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHBhZ2UsIG1lbSwKKwkJCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TSE1FTSk7CisJfSBlbHNlCisJCXJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2NvbW1vbihwYWdlLCBtbSwgZ2ZwX21hc2ssCisJCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU0hNRU0sIG1lbSk7CiAKLQlpZiAoZG9fc3dhcF9hY2NvdW50ICYmICFyZXQgJiYgUGFnZVN3YXBDYWNoZShwYWdlKSkgewotCQlzd3BfZW50cnlfdCBlbnQgPSB7LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKX07Ci0JCS8qIGF2b2lkIGRvdWJsZSBjb3VudGluZyAqLwotCQltZW0gPSBzd2FwX2Nncm91cF9yZWNvcmQoZW50LCBOVUxMKTsKLQkJaWYgKG1lbSkgewotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSk7Ci0JCQltZW1fY2dyb3VwX3B1dChtZW0pOwotCQl9Ci0JfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMjksNyArMTMzNyw5IEBACiAJcmV0dXJuIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBtYXNrLCBwdHIsIHRydWUpOwogfQogCi12b2lkIG1lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZV9zd2FwaW4oc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1fY2dyb3VwICpwdHIpCitzdGF0aWMgdm9pZAorX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcHRyLAorCQkJCQllbnVtIGNoYXJnZV90eXBlIGN0eXBlKQogewogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKQEAgLTEyMzksNyArMTM0OSw3IEBACiAJCXJldHVybjsKIAlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKIAltZW1fY2dyb3VwX2xydV9kZWxfYmVmb3JlX2NvbW1pdF9zd2FwY2FjaGUocGFnZSk7Ci0JX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2UocHRyLCBwYywgTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQpOworCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlKHB0ciwgcGMsIGN0eXBlKTsKIAltZW1fY2dyb3VwX2xydV9hZGRfYWZ0ZXJfY29tbWl0X3N3YXBjYWNoZShwYWdlKTsKIAkvKgogCSAqIE5vdyBzd2FwIGlzIG9uLW1lbW9yeS4gVGhpcyBtZWFucyB0aGlzIHBhZ2UgbWF5IGJlCkBAIC0xMjUwLDE4ICsxMzYwLDMyIEBACiAJICovCiAJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiBQYWdlU3dhcENhY2hlKHBhZ2UpKSB7CiAJCXN3cF9lbnRyeV90IGVudCA9IHsudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpfTsKKwkJdW5zaWduZWQgc2hvcnQgaWQ7CiAJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKLQkJbWVtY2cgPSBzd2FwX2Nncm91cF9yZWNvcmQoZW50LCBOVUxMKTsKKworCQlpZCA9IHN3YXBfY2dyb3VwX3JlY29yZChlbnQsIDApOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCW1lbWNnID0gbWVtX2Nncm91cF9sb29rdXAoaWQpOwogCQlpZiAobWVtY2cpIHsKKwkJCS8qCisJCQkgKiBUaGlzIHJlY29yZGVkIG1lbWNnIGNhbiBiZSBvYnNvbGV0ZSBvbmUuIFNvLCBhdm9pZAorCQkJICogY2FsbGluZyBjc3NfdHJ5Z2V0CisJCQkgKi8KIAkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIFBBR0VfU0laRSk7CiAJCQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJCX0KLQorCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAJLyogYWRkIHRoaXMgcGFnZShwYWdlX2Nncm91cCkgdG8gdGhlIExSVSB3ZSB3YW50LiAqLwogCiB9CiAKK3ZvaWQgbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX3N3YXBpbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKnB0cikKK3sKKwlfX21lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZV9zd2FwaW4ocGFnZSwgcHRyLAorCQkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX01BUFBFRCk7Cit9CisKIHZvaWQgbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlX3N3YXBpbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQogewogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCkBAIC0xMzI0LDggKzE0NDgsOCBAQAogCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAlpZiAoZG9fc3dhcF9hY2NvdW50ICYmIChjdHlwZSAhPSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NXQVBPVVQpKQogCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKLQogCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MobWVtLCBwYywgZmFsc2UpOworCiAJQ2xlYXJQYWdlQ2dyb3VwVXNlZChwYyk7CiAJLyoKIAkgKiBwYy0+bWVtX2Nncm91cCBpcyBub3QgY2xlYXJlZCBoZXJlLiBJdCB3aWxsIGJlIGFjY2Vzc2VkIHdoZW4gaXQncwpAQCAtMTM3Nyw3ICsxNTAxLDcgQEAKIAkJCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKTsKIAkvKiByZWNvcmQgbWVtY2cgaW5mb3JtYXRpb24gKi8KIAlpZiAoZG9fc3dhcF9hY2NvdW50ICYmIG1lbWNnKSB7Ci0JCXN3YXBfY2dyb3VwX3JlY29yZChlbnQsIG1lbWNnKTsKKwkJc3dhcF9jZ3JvdXBfcmVjb3JkKGVudCwgY3NzX2lkKCZtZW1jZy0+Y3NzKSk7CiAJCW1lbV9jZ3JvdXBfZ2V0KG1lbWNnKTsKIAl9CiAJaWYgKG1lbWNnKQpAQCAtMTM5MiwxNSArMTUxNiwyMyBAQAogdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoc3dwX2VudHJ5X3QgZW50KQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKKwl1bnNpZ25lZCBzaG9ydCBpZDsKIAogCWlmICghZG9fc3dhcF9hY2NvdW50KQogCQlyZXR1cm47CiAKLQltZW1jZyA9IHN3YXBfY2dyb3VwX3JlY29yZChlbnQsIE5VTEwpOworCWlkID0gc3dhcF9jZ3JvdXBfcmVjb3JkKGVudCwgMCk7CisJcmN1X3JlYWRfbG9jaygpOworCW1lbWNnID0gbWVtX2Nncm91cF9sb29rdXAoaWQpOwogCWlmIChtZW1jZykgeworCQkvKgorCQkgKiBXZSB1bmNoYXJnZSB0aGlzIGJlY2F1c2Ugc3dhcCBpcyBmcmVlZC4KKwkJICogVGhpcyBtZW1jZyBjYW4gYmUgb2Jzb2xldGUgb25lLiBXZSBhdm9pZCBjYWxsaW5nIGNzc190cnlnZXQKKwkJICovCiAJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIFBBR0VfU0laRSk7CiAJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAjZW5kaWYKIApAQCAtMTUwOCw3ICsxNjQwLDggQEAKIAkJcmV0dXJuIDA7CiAKIAlkbyB7Ci0JCXByb2dyZXNzID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW0sIGdmcF9tYXNrLCB0cnVlKTsKKwkJcHJvZ3Jlc3MgPSBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbSwKKwkJCQkJZ2ZwX21hc2ssIHRydWUsIGZhbHNlKTsKIAkJcHJvZ3Jlc3MgKz0gbWVtX2Nncm91cF9jaGVja191bmRlcl9saW1pdChtZW0pOwogCX0gd2hpbGUgKCFwcm9ncmVzcyAmJiAtLXJldHJ5KTsKIApAQCAtMTUyMywxMSArMTY1NiwyMSBAQAogc3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9saW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKIHsKLQotCWludCByZXRyeV9jb3VudCA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOworCWludCByZXRyeV9jb3VudDsKIAlpbnQgcHJvZ3Jlc3M7CiAJdTY0IG1lbXN3bGltaXQ7CiAJaW50IHJldCA9IDA7CisJaW50IGNoaWxkcmVuID0gbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbihtZW1jZyk7CisJdTY0IGN1cnVzYWdlLCBvbGR1c2FnZTsKKworCS8qCisJICogRm9yIGtlZXBpbmcgaGllcmFyY2hpY2FsX3JlY2xhaW0gc2ltcGxlLCBob3cgbG9uZyB3ZSBzaG91bGQgcmV0cnkKKwkgKiBpcyBkZXBlbmRzIG9uIGNhbGxlcnMuIFdlIHNldCBvdXIgcmV0cnktY291bnQgdG8gYmUgZnVuY3Rpb24KKwkgKiBvZiAjIG9mIGNoaWxkcmVuIHdoaWNoIHdlIHNob3VsZCB2aXNpdCBpbiB0aGlzIGxvb3AuCisJICovCisJcmV0cnlfY291bnQgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUyAqIGNoaWxkcmVuOworCisJb2xkdXNhZ2UgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPnJlcywgUkVTX1VTQUdFKTsKIAogCXdoaWxlIChyZXRyeV9jb3VudCkgewogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKQEAgLTE1NTMsOCArMTY5NiwxMyBAQAogCQkJYnJlYWs7CiAKIAkJcHJvZ3Jlc3MgPSBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbWNnLCBHRlBfS0VSTkVMLAotCQkJCQkJCSAgIGZhbHNlKTsKLSAgCQlpZiAoIXByb2dyZXNzKQkJCXJldHJ5X2NvdW50LS07CisJCQkJCQkgICBmYWxzZSwgdHJ1ZSk7CisJCWN1cnVzYWdlID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19VU0FHRSk7CisJCS8qIFVzYWdlIGlzIHJlZHVjZWQgPyAqLworICAJCWlmIChjdXJ1c2FnZSA+PSBvbGR1c2FnZSkKKwkJCXJldHJ5X2NvdW50LS07CisJCWVsc2UKKwkJCW9sZHVzYWdlID0gY3VydXNhZ2U7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE1NjMsMTMgKzE3MTEsMTYgQEAKIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tZW1zd19saW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKIHsKLQlpbnQgcmV0cnlfY291bnQgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUzsKKwlpbnQgcmV0cnlfY291bnQ7CiAJdTY0IG1lbWxpbWl0LCBvbGR1c2FnZSwgY3VydXNhZ2U7Ci0JaW50IHJldDsKKwlpbnQgY2hpbGRyZW4gPSBtZW1fY2dyb3VwX2NvdW50X2NoaWxkcmVuKG1lbWNnKTsKKwlpbnQgcmV0ID0gLUVCVVNZOwogCiAJaWYgKCFkb19zd2FwX2FjY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwotCisJLyogc2VlIG1lbV9jZ3JvdXBfcmVzaXplX3Jlc19saW1pdCAqLworIAlyZXRyeV9jb3VudCA9IGNoaWxkcmVuICogTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7CisJb2xkdXNhZ2UgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPm1lbXN3LCBSRVNfVVNBR0UpOwogCXdoaWxlIChyZXRyeV9jb3VudCkgewogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCXJldCA9IC1FSU5UUjsKQEAgLTE1OTMsMTEgKzE3NDQsMTMgQEAKIAkJaWYgKCFyZXQpCiAJCQlicmVhazsKIAotCQlvbGR1c2FnZSA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19VU0FHRSk7Ci0JCW1lbV9jZ3JvdXBfaGllcmFyY2hpY2FsX3JlY2xhaW0obWVtY2csIEdGUF9LRVJORUwsIHRydWUpOworCQltZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbWNnLCBHRlBfS0VSTkVMLCB0cnVlLCB0cnVlKTsKIAkJY3VydXNhZ2UgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPm1lbXN3LCBSRVNfVVNBR0UpOworCQkvKiBVc2FnZSBpcyByZWR1Y2VkID8gKi8KIAkJaWYgKGN1cnVzYWdlID49IG9sZHVzYWdlKQogCQkJcmV0cnlfY291bnQtLTsKKwkJZWxzZQorCQkJb2xkdXNhZ2UgPSBjdXJ1c2FnZTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4OTMsNTQgKzIwNDYsOTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwX3N0YXRfZGVzYyB7Ci0JY29uc3QgY2hhciAqbXNnOwotCXU2NCB1bml0OwotfSBtZW1fY2dyb3VwX3N0YXRfZGVzY1tdID0gewotCVtNRU1fQ0dST1VQX1NUQVRfQ0FDSEVdID0geyAiY2FjaGUiLCBQQUdFX1NJWkUsIH0sCi0JW01FTV9DR1JPVVBfU1RBVF9SU1NdID0geyAicnNzIiwgUEFHRV9TSVpFLCB9LAotCVtNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5UXSA9IHsicGdwZ2luIiwgMSwgfSwKLQlbTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlRdID0geyJwZ3Bnb3V0IiwgMSwgfSwKKworLyogRm9yIHJlYWQgc3RhdGlzdGljcyAqLworZW51bSB7CisJTUNTX0NBQ0hFLAorCU1DU19SU1MsCisJTUNTX1BHUEdJTiwKKwlNQ1NfUEdQR09VVCwKKwlNQ1NfSU5BQ1RJVkVfQU5PTiwKKwlNQ1NfQUNUSVZFX0FOT04sCisJTUNTX0lOQUNUSVZFX0ZJTEUsCisJTUNTX0FDVElWRV9GSUxFLAorCU1DU19VTkVWSUNUQUJMRSwKKwlOUl9NQ1NfU1RBVCwKIH07CiAKK3N0cnVjdCBtY3NfdG90YWxfc3RhdCB7CisJczY0IHN0YXRbTlJfTUNTX1NUQVRdOworfTsKKworc3RydWN0IHsKKwljaGFyICpsb2NhbF9uYW1lOworCWNoYXIgKnRvdGFsX25hbWU7Cit9IG1lbWNnX3N0YXRfc3RyaW5nc1tOUl9NQ1NfU1RBVF0gPSB7CisJeyJjYWNoZSIsICJ0b3RhbF9jYWNoZSJ9LAorCXsicnNzIiwgInRvdGFsX3JzcyJ9LAorCXsicGdwZ2luIiwgInRvdGFsX3BncGdpbiJ9LAorCXsicGdwZ291dCIsICJ0b3RhbF9wZ3Bnb3V0In0sCisJeyJpbmFjdGl2ZV9hbm9uIiwgInRvdGFsX2luYWN0aXZlX2Fub24ifSwKKwl7ImFjdGl2ZV9hbm9uIiwgInRvdGFsX2FjdGl2ZV9hbm9uIn0sCisJeyJpbmFjdGl2ZV9maWxlIiwgInRvdGFsX2luYWN0aXZlX2ZpbGUifSwKKwl7ImFjdGl2ZV9maWxlIiwgInRvdGFsX2FjdGl2ZV9maWxlIn0sCisJeyJ1bmV2aWN0YWJsZSIsICJ0b3RhbF91bmV2aWN0YWJsZSJ9Cit9OworCisKK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9nZXRfbG9jYWxfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtY3NfdG90YWxfc3RhdCAqcyA9IGRhdGE7CisJczY0IHZhbDsKKworCS8qIHBlciBjcHUgc3RhdCAqLworCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KCZtZW0tPnN0YXQsIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSk7CisJcy0+c3RhdFtNQ1NfQ0FDSEVdICs9IHZhbCAqIFBBR0VfU0laRTsKKwl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdCgmbWVtLT5zdGF0LCBNRU1fQ0dST1VQX1NUQVRfUlNTKTsKKwlzLT5zdGF0W01DU19SU1NdICs9IHZhbCAqIFBBR0VfU0laRTsKKwl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdCgmbWVtLT5zdGF0LCBNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5UKTsKKwlzLT5zdGF0W01DU19QR1BHSU5dICs9IHZhbDsKKwl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdCgmbWVtLT5zdGF0LCBNRU1fQ0dST1VQX1NUQVRfUEdQR09VVF9DT1VOVCk7CisJcy0+c3RhdFtNQ1NfUEdQR09VVF0gKz0gdmFsOworCisJLyogcGVyIHpvbmUgc3RhdCAqLworCXZhbCA9IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KG1lbSwgTFJVX0lOQUNUSVZFX0FOT04pOworCXMtPnN0YXRbTUNTX0lOQUNUSVZFX0FOT05dICs9IHZhbCAqIFBBR0VfU0laRTsKKwl2YWwgPSBtZW1fY2dyb3VwX2dldF9sb2NhbF96b25lc3RhdChtZW0sIExSVV9BQ1RJVkVfQU5PTik7CisJcy0+c3RhdFtNQ1NfQUNUSVZFX0FOT05dICs9IHZhbCAqIFBBR0VfU0laRTsKKwl2YWwgPSBtZW1fY2dyb3VwX2dldF9sb2NhbF96b25lc3RhdChtZW0sIExSVV9JTkFDVElWRV9GSUxFKTsKKwlzLT5zdGF0W01DU19JTkFDVElWRV9GSUxFXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9nZXRfbG9jYWxfem9uZXN0YXQobWVtLCBMUlVfQUNUSVZFX0ZJTEUpOworCXMtPnN0YXRbTUNTX0FDVElWRV9GSUxFXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9nZXRfbG9jYWxfem9uZXN0YXQobWVtLCBMUlVfVU5FVklDVEFCTEUpOworCXMtPnN0YXRbTUNTX1VORVZJQ1RBQkxFXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCittZW1fY2dyb3VwX2dldF90b3RhbF9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHN0cnVjdCBtY3NfdG90YWxfc3RhdCAqcykKK3sKKwltZW1fY2dyb3VwX3dhbGtfdHJlZShtZW0sIHMsIG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3N0YXQpOworfQorCiBzdGF0aWMgaW50IG1lbV9jb250cm9sX3N0YXRfc2hvdyhzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCiAJCQkJIHN0cnVjdCBjZ3JvdXBfbWFwX2NiICpjYikKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQgPSBtZW1fY2dyb3VwX2Zyb21fY29udChjb250KTsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0ID0gJm1lbV9jb250LT5zdGF0OworCXN0cnVjdCBtY3NfdG90YWxfc3RhdCBteXN0YXQ7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGF0LT5jcHVzdGF0WzBdLmNvdW50KTsgaSsrKSB7Ci0JCXM2NCB2YWw7CisJbWVtc2V0KCZteXN0YXQsIDAsIHNpemVvZihteXN0YXQpKTsKKwltZW1fY2dyb3VwX2dldF9sb2NhbF9zdGF0KG1lbV9jb250LCAmbXlzdGF0KTsKIAotCQl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChzdGF0LCBpKTsKLQkJdmFsICo9IG1lbV9jZ3JvdXBfc3RhdF9kZXNjW2ldLnVuaXQ7Ci0JCWNiLT5maWxsKGNiLCBtZW1fY2dyb3VwX3N0YXRfZGVzY1tpXS5tc2csIHZhbCk7Ci0JfQotCS8qIHNob3dpbmcgIyBvZiBhY3RpdmUgcGFnZXMgKi8KLQl7Ci0JCXVuc2lnbmVkIGxvbmcgYWN0aXZlX2Fub24sIGluYWN0aXZlX2Fub247Ci0JCXVuc2lnbmVkIGxvbmcgYWN0aXZlX2ZpbGUsIGluYWN0aXZlX2ZpbGU7Ci0JCXVuc2lnbmVkIGxvbmcgdW5ldmljdGFibGU7CisJZm9yIChpID0gMDsgaSA8IE5SX01DU19TVEFUOyBpKyspCisJCWNiLT5maWxsKGNiLCBtZW1jZ19zdGF0X3N0cmluZ3NbaV0ubG9jYWxfbmFtZSwgbXlzdGF0LnN0YXRbaV0pOwogCi0JCWluYWN0aXZlX2Fub24gPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCi0JCQkJCQlMUlVfSU5BQ1RJVkVfQU5PTik7Ci0JCWFjdGl2ZV9hbm9uID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAotCQkJCQkJTFJVX0FDVElWRV9BTk9OKTsKLQkJaW5hY3RpdmVfZmlsZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKLQkJCQkJCUxSVV9JTkFDVElWRV9GSUxFKTsKLQkJYWN0aXZlX2ZpbGUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCi0JCQkJCQlMUlVfQUNUSVZFX0ZJTEUpOwotCQl1bmV2aWN0YWJsZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKLQkJCQkJCQlMUlVfVU5FVklDVEFCTEUpOwotCi0JCWNiLT5maWxsKGNiLCAiYWN0aXZlX2Fub24iLCAoYWN0aXZlX2Fub24pICogUEFHRV9TSVpFKTsKLQkJY2ItPmZpbGwoY2IsICJpbmFjdGl2ZV9hbm9uIiwgKGluYWN0aXZlX2Fub24pICogUEFHRV9TSVpFKTsKLQkJY2ItPmZpbGwoY2IsICJhY3RpdmVfZmlsZSIsIChhY3RpdmVfZmlsZSkgKiBQQUdFX1NJWkUpOwotCQljYi0+ZmlsbChjYiwgImluYWN0aXZlX2ZpbGUiLCAoaW5hY3RpdmVfZmlsZSkgKiBQQUdFX1NJWkUpOwotCQljYi0+ZmlsbChjYiwgInVuZXZpY3RhYmxlIiwgdW5ldmljdGFibGUgKiBQQUdFX1NJWkUpOwotCi0JfQorCS8qIEhpZXJhcmNoaWNhbCBpbmZvcm1hdGlvbiAqLwogCXsKIAkJdW5zaWduZWQgbG9uZyBsb25nIGxpbWl0LCBtZW1zd19saW1pdDsKIAkJbWVtY2dfZ2V0X2hpZXJhcmNoaWNhbF9saW1pdChtZW1fY29udCwgJmxpbWl0LCAmbWVtc3dfbGltaXQpOwpAQCAtMTk0OSw2ICsyMTM4LDEyIEBACiAJCQljYi0+ZmlsbChjYiwgImhpZXJhcmNoaWNhbF9tZW1zd19saW1pdCIsIG1lbXN3X2xpbWl0KTsKIAl9CiAKKwltZW1zZXQoJm15c3RhdCwgMCwgc2l6ZW9mKG15c3RhdCkpOworCW1lbV9jZ3JvdXBfZ2V0X3RvdGFsX3N0YXQobWVtX2NvbnQsICZteXN0YXQpOworCWZvciAoaSA9IDA7IGkgPCBOUl9NQ1NfU1RBVDsgaSsrKQorCQljYi0+ZmlsbChjYiwgbWVtY2dfc3RhdF9zdHJpbmdzW2ldLnRvdGFsX25hbWUsIG15c3RhdC5zdGF0W2ldKTsKKworCiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCiAJY2ItPmZpbGwoY2IsICJpbmFjdGl2ZV9yYXRpbyIsIGNhbGNfaW5hY3RpdmVfcmF0aW8obWVtX2NvbnQsIE5VTEwpKTsKIApAQCAtMjE3OCw2ICsyMzczLDggQEAKIHsKIAlpbnQgbm9kZTsKIAorCWZyZWVfY3NzX2lkKCZtZW1fY2dyb3VwX3N1YnN5cywgJm1lbS0+Y3NzKTsKKwogCWZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9QT1NTSUJMRSkKIAkJZnJlZV9tZW1fY2dyb3VwX3Blcl96b25lX2luZm8obWVtLCBub2RlKTsKIApAQCAtMjIyOCwxMSArMjQyNSwxMiBAQAogbWVtX2Nncm91cF9jcmVhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0sICpwYXJlbnQ7CisJbG9uZyBlcnJvciA9IC1FTk9NRU07CiAJaW50IG5vZGU7CiAKIAltZW0gPSBtZW1fY2dyb3VwX2FsbG9jKCk7CiAJaWYgKCFtZW0pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAKIAlmb3JfZWFjaF9ub2RlX3N0YXRlKG5vZGUsIE5fUE9TU0lCTEUpCiAJCWlmIChhbGxvY19tZW1fY2dyb3VwX3Blcl96b25lX2luZm8obWVtLCBub2RlKSkKQEAgLTIyNjAsNyArMjQ1OCw3IEBACiAJCXJlc19jb3VudGVyX2luaXQoJm1lbS0+cmVzLCBOVUxMKTsKIAkJcmVzX2NvdW50ZXJfaW5pdCgmbWVtLT5tZW1zdywgTlVMTCk7CiAJfQotCW1lbS0+bGFzdF9zY2FubmVkX2NoaWxkID0gTlVMTDsKKwltZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJm1lbS0+cmVjbGFpbV9wYXJhbV9sb2NrKTsKIAogCWlmIChwYXJlbnQpCkBAIC0yMjY5LDI2ICsyNDY3LDIyIEBACiAJcmV0dXJuICZtZW0tPmNzczsKIGZyZWVfb3V0OgogCV9fbWVtX2Nncm91cF9mcmVlKG1lbSk7Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3ByZV9kZXN0cm95KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9wcmVfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCiAJCQkJCXN0cnVjdCBjZ3JvdXAgKmNvbnQpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KGNvbnQpOwotCW1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkobWVtLCBmYWxzZSk7CisKKwlyZXR1cm4gbWVtX2Nncm91cF9mb3JjZV9lbXB0eShtZW0sIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9kZXN0cm95KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKIAkJCQlzdHJ1Y3QgY2dyb3VwICpjb250KQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBtZW1fY2dyb3VwX2Zyb21fY29udChjb250KTsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbGFzdF9zY2FubmVkX2NoaWxkID0gbWVtLT5sYXN0X3NjYW5uZWRfY2hpbGQ7CiAKLQlpZiAobGFzdF9zY2FubmVkX2NoaWxkKSB7Ci0JCVZNX0JVR19PTighbWVtX2Nncm91cF9pc19vYnNvbGV0ZShsYXN0X3NjYW5uZWRfY2hpbGQpKTsKLQkJbWVtX2Nncm91cF9wdXQobGFzdF9zY2FubmVkX2NoaWxkKTsKLQl9CiAJbWVtX2Nncm91cF9wdXQobWVtKTsKIH0KIApAQCAtMjMyNyw2ICsyNTIxLDcgQEAKIAkucG9wdWxhdGUgPSBtZW1fY2dyb3VwX3BvcHVsYXRlLAogCS5hdHRhY2ggPSBtZW1fY2dyb3VwX21vdmVfdGFzaywKIAkuZWFybHlfaW5pdCA9IDAsCisJLnVzZV9pZCA9IDEsCiB9OwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUApkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGE5ZWZmM2YuLjA2ODY1NWQgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogICogVGhlIG51bWJlciBvZiByZW1haW5pbmcgcmVmZXJlbmNlcyBtdXN0IGJlOgogICogMSBmb3IgYW5vbnltb3VzIHBhZ2VzIHdpdGhvdXQgYSBtYXBwaW5nCiAgKiAyIGZvciBwYWdlcyB3aXRoIGEgbWFwcGluZwotICogMyBmb3IgcGFnZXMgd2l0aCBhIG1hcHBpbmcgYW5kIFBhZ2VQcml2YXRlIHNldC4KKyAqIDMgZm9yIHBhZ2VzIHdpdGggYSBtYXBwaW5nIGFuZCBQYWdlUHJpdmF0ZS9QYWdlUHJpdmF0ZTIgc2V0LgogICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZV9tb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTI3MCw3ICsyNzAsNyBAQAogCXBzbG90ID0gcmFkaXhfdHJlZV9sb29rdXBfc2xvdCgmbWFwcGluZy0+cGFnZV90cmVlLAogIAkJCQkJcGFnZV9pbmRleChwYWdlKSk7CiAKLQlleHBlY3RlZF9jb3VudCA9IDIgKyAhIVBhZ2VQcml2YXRlKHBhZ2UpOworCWV4cGVjdGVkX2NvdW50ID0gMiArICEhcGFnZV9oYXNfcHJpdmF0ZShwYWdlKTsKIAlpZiAocGFnZV9jb3VudChwYWdlKSAhPSBleHBlY3RlZF9jb3VudCB8fAogCQkJKHN0cnVjdCBwYWdlICopcmFkaXhfdHJlZV9kZXJlZl9zbG90KHBzbG90KSAhPSBwYWdlKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKQEAgLTM4Niw3ICszODYsNyBAQAogCiAvKgogICogQ29tbW9uIGxvZ2ljIHRvIGRpcmVjdGx5IG1pZ3JhdGUgYSBzaW5nbGUgcGFnZSBzdWl0YWJsZSBmb3IKLSAqIHBhZ2VzIHRoYXQgZG8gbm90IHVzZSBQYWdlUHJpdmF0ZS4KKyAqIHBhZ2VzIHRoYXQgZG8gbm90IHVzZSBQYWdlUHJpdmF0ZS9QYWdlUHJpdmF0ZTIuCiAgKgogICogUGFnZXMgYXJlIGxvY2tlZCB1cG9uIGVudHJ5IGFuZCBleGl0LgogICovCkBAIC01MjIsNyArNTIyLDcgQEAKIAkgKiBCdWZmZXJzIG1heSBiZSBtYW5hZ2VkIGluIGEgZmlsZXN5c3RlbSBzcGVjaWZpYyB3YXkuCiAJICogV2UgbXVzdCBoYXZlIG5vIGJ1ZmZlcnMgb3IgZHJvcCB0aGVtLgogCSAqLwotCWlmIChQYWdlUHJpdmF0ZShwYWdlKSAmJgorCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpICYmCiAJICAgICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVBR0FJTjsKIApAQCAtNjU1LDcgKzY1NSw3IEBACiAJICogZnJlZSB0aGUgbWV0YWRhdGEsIHNvIHRoZSBwYWdlIGNhbiBiZSBmcmVlZC4KIAkgKi8KIAlpZiAoIXBhZ2UtPm1hcHBpbmcpIHsKLQkJaWYgKCFQYWdlQW5vbihwYWdlKSAmJiBQYWdlUHJpdmF0ZShwYWdlKSkgeworCQlpZiAoIVBhZ2VBbm9uKHBhZ2UpICYmIHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpIHsKIAkJCS8qCiAJCQkgKiBHbyBkaXJlY3QgdG8gdHJ5X3RvX2ZyZWVfYnVmZmVycygpIGhlcmUgYmVjYXVzZQogCQkJICogYSkgdGhhdCdzIHdoYXQgdHJ5X3RvX3JlbGVhc2VfcGFnZSgpIHdvdWxkIGRvIGFueXdheQpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDFhYmI5MTguLjRhMzg0MTEgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTI0ODEsNyArMjQ4MSw0IEBACiAgKi8KIHZvaWQgX19pbml0IG1tYXBfaW5pdCh2b2lkKQogewotCXZtX2FyZWFfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInZtX2FyZWFfc3RydWN0IiwKLQkJCXNpemVvZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpLCAwLAotCQkJU0xBQl9QQU5JQywgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCAyZmNmNDdkLi43MmVkYTRhIDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCisrKyBiL21tL25vbW11LmMKQEAgLTY5LDcgKzY5LDcgQEAKIGludCBzeXNjdGxfbnJfdHJpbV9wYWdlcyA9IDE7IC8qIHBhZ2UgdHJpbW1pbmcgYmVoYXZpb3VyICovCiBpbnQgaGVhcF9zdGFja19nYXAgPSAwOwogCi1hdG9taWNfdCBtbWFwX3BhZ2VzX2FsbG9jYXRlZDsKK2F0b21pY19sb25nX3QgbW1hcF9wYWdlc19hbGxvY2F0ZWQ7CiAKIEVYUE9SVF9TWU1CT0wobWVtX21hcCk7CiBFWFBPUlRfU1lNQk9MKG51bV9waHlzcGFnZXMpOwpAQCAtNDYzLDEyICs0NjMsNyBAQAogICovCiB2b2lkIF9faW5pdCBtbWFwX2luaXQodm9pZCkKIHsKLQl2bV9yZWdpb25famFyID0ga21lbV9jYWNoZV9jcmVhdGUoInZtX3JlZ2lvbl9qYXIiLAotCQkJCQkgIHNpemVvZihzdHJ1Y3Qgdm1fcmVnaW9uKSwgMCwKLQkJCQkJICBTTEFCX1BBTklDLCBOVUxMKTsKLQl2bV9hcmVhX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJ2bV9hcmVhX3N0cnVjdCIsCi0JCQkJCSAgIHNpemVvZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpLCAwLAotCQkJCQkgICBTTEFCX1BBTklDLCBOVUxMKTsKKwl2bV9yZWdpb25famFyID0gS01FTV9DQUNIRSh2bV9yZWdpb24sIFNMQUJfUEFOSUMpOwogfQogCiAvKgpAQCAtNDg2LDI3ICs0ODEsMjQgQEAKIAkJcmV0dXJuOwogCiAJbGFzdCA9IHJiX2VudHJ5KGxhc3RwLCBzdHJ1Y3Qgdm1fcmVnaW9uLCB2bV9yYik7Ci0JaWYgKHVubGlrZWx5KGxhc3QtPnZtX2VuZCA8PSBsYXN0LT52bV9zdGFydCkpCi0JCUJVRygpOwotCWlmICh1bmxpa2VseShsYXN0LT52bV90b3AgPCBsYXN0LT52bV9lbmQpKQotCQlCVUcoKTsKKwlCVUdfT04odW5saWtlbHkobGFzdC0+dm1fZW5kIDw9IGxhc3QtPnZtX3N0YXJ0KSk7CisJQlVHX09OKHVubGlrZWx5KGxhc3QtPnZtX3RvcCA8IGxhc3QtPnZtX2VuZCkpOwogCiAJd2hpbGUgKChwID0gcmJfbmV4dChsYXN0cCkpKSB7CiAJCXJlZ2lvbiA9IHJiX2VudHJ5KHAsIHN0cnVjdCB2bV9yZWdpb24sIHZtX3JiKTsKIAkJbGFzdCA9IHJiX2VudHJ5KGxhc3RwLCBzdHJ1Y3Qgdm1fcmVnaW9uLCB2bV9yYik7CiAKLQkJaWYgKHVubGlrZWx5KHJlZ2lvbi0+dm1fZW5kIDw9IHJlZ2lvbi0+dm1fc3RhcnQpKQotCQkJQlVHKCk7Ci0JCWlmICh1bmxpa2VseShyZWdpb24tPnZtX3RvcCA8IHJlZ2lvbi0+dm1fZW5kKSkKLQkJCUJVRygpOwotCQlpZiAodW5saWtlbHkocmVnaW9uLT52bV9zdGFydCA8IGxhc3QtPnZtX3RvcCkpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHVubGlrZWx5KHJlZ2lvbi0+dm1fZW5kIDw9IHJlZ2lvbi0+dm1fc3RhcnQpKTsKKwkJQlVHX09OKHVubGlrZWx5KHJlZ2lvbi0+dm1fdG9wIDwgcmVnaW9uLT52bV9lbmQpKTsKKwkJQlVHX09OKHVubGlrZWx5KHJlZ2lvbi0+dm1fc3RhcnQgPCBsYXN0LT52bV90b3ApKTsKIAogCQlsYXN0cCA9IHA7CiAJfQogfQogI2Vsc2UKLSNkZWZpbmUgdmFsaWRhdGVfbm9tbXVfcmVnaW9ucygpIGRvIHt9IHdoaWxlKDApCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV9ub21tdV9yZWdpb25zKHZvaWQpCit7Cit9CiAjZW5kaWYKIAogLyoKQEAgLTU2MywxNiArNTU1LDE3IEBACiAJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKGZyb20pOwogCiAJCWtkZWJ1ZygiLSBmcmVlICVseCIsIGZyb20pOwotCQlhdG9taWNfZGVjKCZtbWFwX3BhZ2VzX2FsbG9jYXRlZCk7CisJCWF0b21pY19sb25nX2RlYygmbW1hcF9wYWdlc19hbGxvY2F0ZWQpOwogCQlpZiAocGFnZV9jb3VudChwYWdlKSAhPSAxKQotCQkJa2RlYnVnKCJmcmVlIHBhZ2UgJXAgWyVkXSIsIHBhZ2UsIHBhZ2VfY291bnQocGFnZSkpOworCQkJa2RlYnVnKCJmcmVlIHBhZ2UgJXA6IHJlZmNvdW50IG5vdCBvbmU6ICVkIiwKKwkJCSAgICAgICBwYWdlLCBwYWdlX2NvdW50KHBhZ2UpKTsKIAkJcHV0X3BhZ2UocGFnZSk7CiAJfQogfQogCiAvKgogICogcmVsZWFzZSBhIHJlZmVyZW5jZSB0byBhIHJlZ2lvbgotICogLSB0aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcmVnaW9uIHNlbWFwaG9yZSwgd2hpY2ggdGhpcyByZWxlYXNlcworICogLSB0aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcmVnaW9uIHNlbWFwaG9yZSBmb3Igd3JpdGluZywgd2hpY2ggdGhpcyByZWxlYXNlcwogICogLSB0aGUgcmVnaW9uIG1heSBub3QgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSB0cmVlIHlldCwgaW4gd2hpY2ggY2FzZSB2bV90b3AKICAqICAgd2lsbCBlcXVhbCB2bV9zdGFydAogICovCkBAIC0xMDk2LDcgKzEwODksNyBAQAogCQlnb3RvIGVub21lbTsKIAogCXRvdGFsID0gMSA8PCBvcmRlcjsKLQlhdG9taWNfYWRkKHRvdGFsLCAmbW1hcF9wYWdlc19hbGxvY2F0ZWQpOworCWF0b21pY19sb25nX2FkZCh0b3RhbCwgJm1tYXBfcGFnZXNfYWxsb2NhdGVkKTsKIAogCXBvaW50ID0gcmxlbiA+PiBQQUdFX1NISUZUOwogCkBAIC0xMTA3LDcgKzExMDAsNyBAQAogCQkJb3JkZXIgPSBpbG9nMih0b3RhbCAtIHBvaW50KTsKIAkJCW4gPSAxIDw8IG9yZGVyOwogCQkJa2RlYnVnKCJzaGF2ZSAlbHUvJWx1IEAlbHUiLCBuLCB0b3RhbCAtIHBvaW50LCB0b3RhbCk7Ci0JCQlhdG9taWNfc3ViKG4sICZtbWFwX3BhZ2VzX2FsbG9jYXRlZCk7CisJCQlhdG9taWNfbG9uZ19zdWIobiwgJm1tYXBfcGFnZXNfYWxsb2NhdGVkKTsKIAkJCXRvdGFsIC09IG47CiAJCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2VzICsgdG90YWwpOwogCQkJX19mcmVlX3BhZ2VzKHBhZ2VzICsgdG90YWwsIG9yZGVyKTsKQEAgLTE1MzYsMTAgKzE1MjksMTUgQEAKIAkvKiBmaW5kIHRoZSBmaXJzdCBwb3RlbnRpYWxseSBvdmVybGFwcGluZyBWTUEgKi8KIAl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwogCWlmICghdm1hKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJtdW5tYXAgb2YgbWVtb3J5IG5vdCBtbWFwcGVkIGJ5IHByb2Nlc3MgJWQgKCVzKToiCi0JCSAgICAgICAiIDB4JWx4LTB4JWx4XG4iLAotCQkgICAgICAgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCBzdGFydCwgc3RhcnQgKyBsZW4gLSAxKTsKKwkJc3RhdGljIGludCBsaW1pdCA9IDA7CisJCWlmIChsaW1pdCA8IDUpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAibXVubWFwIG9mIG1lbW9yeSBub3QgbW1hcHBlZCBieSBwcm9jZXNzICVkIgorCQkJICAgICAgICIgKCVzKTogMHglbHgtMHglbHhcbiIsCisJCQkgICAgICAgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLAorCQkJICAgICAgIHN0YXJ0LCBzdGFydCArIGxlbiAtIDEpOworCQkJbGltaXQrKzsKKwkJfQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IGQzYjliYWMuLjJmMzE2NmUgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtMzk0LDYgKzM5NCw3IEBACiAJCWNwdXNldF9wcmludF90YXNrX21lbXNfYWxsb3dlZChjdXJyZW50KTsKIAkJdGFza191bmxvY2soY3VycmVudCk7CiAJCWR1bXBfc3RhY2soKTsKKwkJbWVtX2Nncm91cF9wcmludF9vb21faW5mbyhtZW0sIGN1cnJlbnQpOwogCQlzaG93X21lbSgpOwogCQlpZiAoc3lzY3RsX29vbV9kdW1wX3Rhc2tzKQogCQkJZHVtcF90YXNrcyhtZW0pOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDAyODRlNTIuLmUyZjI2OTkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCWZvciAoaSA9IDE7IGkgPCBucl9wYWdlczsgaSsrKSB7CiAJCXN0cnVjdCBwYWdlICpwID0gcGFnZSArIGk7CiAKLQkJaWYgKHVubGlrZWx5KCFQYWdlVGFpbChwKSB8IChwLT5maXJzdF9wYWdlICE9IHBhZ2UpKSkgeworCQlpZiAodW5saWtlbHkoIVBhZ2VUYWlsKHApIHx8IChwLT5maXJzdF9wYWdlICE9IHBhZ2UpKSkgewogCQkJYmFkX3BhZ2UocGFnZSk7CiAJCQliYWQrKzsKIAkJfQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAKIAlpbnQgbiwgdmFsOwogCWludCBtaW5fdmFsID0gSU5UX01BWDsKIAlpbnQgYmVzdF9ub2RlID0gLTE7Ci0Jbm9kZV90b19jcHVtYXNrX3B0cih0bXAsIDApOworCWNvbnN0IHN0cnVjdCBjcHVtYXNrICp0bXAgPSBjcHVtYXNrX29mX25vZGUoMCk7CiAKIAkvKiBVc2UgdGhlIGxvY2FsIG5vZGUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5ICovCiAJaWYgKCFub2RlX2lzc2V0KG5vZGUsICp1c2VkX25vZGVfbWFzaykpIHsKQEAgLTIxNDksOCArMjE0OSw4IEBACiAJCXZhbCArPSAobiA8IG5vZGUpOwogCiAJCS8qIEdpdmUgcHJlZmVyZW5jZSB0byBoZWFkbGVzcyBhbmQgdW51c2VkIG5vZGVzICovCi0JCW5vZGVfdG9fY3B1bWFza19wdHJfbmV4dCh0bXAsIG4pOwotCQlpZiAoIWNwdXNfZW1wdHkoKnRtcCkpCisJCXRtcCA9IGNwdW1hc2tfb2Zfbm9kZShuKTsKKwkJaWYgKCFjcHVtYXNrX2VtcHR5KHRtcCkpCiAJCQl2YWwgKz0gUEVOQUxUWV9GT1JfTk9ERV9XSVRIX0NQVVM7CiAKIAkJLyogU2xpZ2h0IHByZWZlcmVuY2UgZm9yIGxlc3MgbG9hZGVkIG5vZGUgKi8KZGlmZiAtLWdpdCBhL21tL3BhZ2VfY2dyb3VwLmMgYi9tbS9wYWdlX2Nncm91cC5jCmluZGV4IGNlZWNmYmIuLjc5MTkwNWMgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY2dyb3VwLmMKKysrIGIvbW0vcGFnZV9jZ3JvdXAuYwpAQCAtMjg1LDEyICsyODUsOCBAQAogCiBzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCBzd2FwX2Nncm91cF9jdHJsW01BWF9TV0FQRklMRVNdOwogCi0vKgotICogVGhpcyA4Ynl0ZXMgc2VlbXMgYmlnLi5tYXliZSB3ZSBjYW4gcmVkdWNlIHRoaXMgd2hlbiB3ZSBjYW4gdXNlICJpZCIgZm9yCi0gKiBjZ3JvdXAgcmF0aGVyIHRoYW4gcG9pbnRlci4KLSAqLwogc3RydWN0IHN3YXBfY2dyb3VwIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cAkqdmFsOworCXVuc2lnbmVkIHNob3J0CQlpZDsKIH07CiAjZGVmaW5lIFNDX1BFUl9QQUdFCShQQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBzd2FwX2Nncm91cCkpCiAjZGVmaW5lIFNDX1BPU19NQVNLCShTQ19QRVJfUEFHRSAtIDEpCkBAIC0zNDIsMTAgKzMzOCwxMCBAQAogICogQGVudDogc3dhcCBlbnRyeSB0byBiZSByZWNvcmRlZCBpbnRvCiAgKiBAbWVtOiBtZW1fY2dyb3VwIHRvIGJlIHJlY29yZGVkCiAgKgotICogUmV0dXJucyBvbGQgdmFsdWUgYXQgc3VjY2VzcywgTlVMTCBhdCBmYWlsdXJlLgotICogKE9mIGNvdXJzZSwgb2xkIHZhbHVlIGNhbiBiZSBOVUxMLikKKyAqIFJldHVybnMgb2xkIHZhbHVlIGF0IHN1Y2Nlc3MsIDAgYXQgZmFpbHVyZS4KKyAqIChPZiBjb3Vyc2UsIG9sZCB2YWx1ZSBjYW4gYmUgMC4pCiAgKi8KLXN0cnVjdCBtZW1fY2dyb3VwICpzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQordW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQpCiB7CiAJaW50IHR5cGUgPSBzd3BfdHlwZShlbnQpOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnQpOwpAQCAtMzU0LDE4ICszNTAsMTggQEAKIAlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKIAlzdHJ1Y3QgcGFnZSAqbWFwcGFnZTsKIAlzdHJ1Y3Qgc3dhcF9jZ3JvdXAgKnNjOwotCXN0cnVjdCBtZW1fY2dyb3VwICpvbGQ7CisJdW5zaWduZWQgc2hvcnQgb2xkOwogCiAJaWYgKCFkb19zd2FwX2FjY291bnQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gMDsKIAogCWN0cmwgPSAmc3dhcF9jZ3JvdXBfY3RybFt0eXBlXTsKIAogCW1hcHBhZ2UgPSBjdHJsLT5tYXBbaWR4XTsKIAlzYyA9IHBhZ2VfYWRkcmVzcyhtYXBwYWdlKTsKIAlzYyArPSBwb3M7Ci0Jb2xkID0gc2MtPnZhbDsKLQlzYy0+dmFsID0gbWVtOworCW9sZCA9IHNjLT5pZDsKKwlzYy0+aWQgPSBpZDsKIAogCXJldHVybiBvbGQ7CiB9CkBAIC0zNzQsOSArMzcwLDkgQEAKICAqIGxvb2t1cF9zd2FwX2Nncm91cCAtIGxvb2t1cCBtZW1fY2dyb3VwIHRpZWQgdG8gc3dhcCBlbnRyeQogICogQGVudDogc3dhcCBlbnRyeSB0byBiZSBsb29rZWQgdXAuCiAgKgotICogUmV0dXJucyBwb2ludGVyIHRvIG1lbV9jZ3JvdXAgYXQgc3VjY2Vzcy4gTlVMTCBhdCBmYWlsdXJlLgorICogUmV0dXJucyBDU1MgSUQgb2YgbWVtX2Nncm91cCBhdCBzdWNjZXNzLiAwIGF0IGZhaWx1cmUuICgwIGlzIGludmFsaWQgSUQpCiAgKi8KLXN0cnVjdCBtZW1fY2dyb3VwICpsb29rdXBfc3dhcF9jZ3JvdXAoc3dwX2VudHJ5X3QgZW50KQordW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCkKIHsKIAlpbnQgdHlwZSA9IHN3cF90eXBlKGVudCk7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudCk7CkBAIC0zODUsMTYgKzM4MSwxNiBAQAogCXN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsOwogCXN0cnVjdCBwYWdlICptYXBwYWdlOwogCXN0cnVjdCBzd2FwX2Nncm91cCAqc2M7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKnJldDsKKwl1bnNpZ25lZCBzaG9ydCByZXQ7CiAKIAlpZiAoIWRvX3N3YXBfYWNjb3VudCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAwOwogCiAJY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3R5cGVdOwogCW1hcHBhZ2UgPSBjdHJsLT5tYXBbaWR4XTsKIAlzYyA9IHBhZ2VfYWRkcmVzcyhtYXBwYWdlKTsKIAlzYyArPSBwb3M7Ci0JcmV0ID0gc2MtPnZhbDsKKwlyZXQgPSBzYy0+aWQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDMwLDEzICs0MjYsNiBAQAogCX0KIAltdXRleF91bmxvY2soJnN3YXBfY2dyb3VwX211dGV4KTsKIAotCXByaW50ayhLRVJOX0lORk8KLQkJInN3YXBfY2dyb3VwOiB1c2VzICVsZCBieXRlcyBvZiB2bWFsbG9jIGZvciBwb2ludGVyIGFycmF5IHNwYWNlIgotCQkiIGFuZCAlbGQgYnl0ZXMgdG8gaG9sZCBtZW1fY2dyb3VwIHBvaW50ZXJzIG9uIHN3YXBcbiIsCi0JCWFycmF5X3NpemUsIGxlbmd0aCAqIFBBR0VfU0laRSk7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSJzd2FwX2Nncm91cCBjYW4gYmUgZGlzYWJsZWQgYnkgbm9zd2FwYWNjb3VudCBib290IG9wdGlvbi5cbiIpOwotCiAJcmV0dXJuIDA7CiBub21lbToKIAlwcmludGsoS0VSTl9JTkZPICJjb3VsZG4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBzd2FwX2Nncm91cC5cbiIpOwpkaWZmIC0tZ2l0IGEvbW0vcXVpY2tsaXN0LmMgYi9tbS9xdWlja2xpc3QuYwppbmRleCA4ZGJiNjgwLi5lNjZkMDdkIDEwMDY0NAotLS0gYS9tbS9xdWlja2xpc3QuYworKysgYi9tbS9xdWlja2xpc3QuYwpAQCAtMjksNyArMjksNyBAQAogCWludCBub2RlID0gbnVtYV9ub2RlX2lkKCk7CiAJc3RydWN0IHpvbmUgKnpvbmVzID0gTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzOwogCWludCBudW1fY3B1c19vbl9ub2RlOwotCW5vZGVfdG9fY3B1bWFza19wdHIoY3B1bWFza19vbl9ub2RlLCBub2RlKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vbl9ub2RlID0gY3B1bWFza19vZl9ub2RlKG5vZGUpOwogCiAJbm9kZV9mcmVlX3BhZ2VzID0KICNpZmRlZiBDT05GSUdfWk9ORV9ETUEKZGlmZiAtLWdpdCBhL21tL3JlYWRhaGVhZC5jIGIvbW0vcmVhZGFoZWFkLmMKaW5kZXggOWNlMzAzZC4uMTMzYjZkNSAxMDA2NDQKLS0tIGEvbW0vcmVhZGFoZWFkLmMKKysrIGIvbW0vcmVhZGFoZWFkLmMKQEAgLTMxLDYgKzMxLDQyIEBACiAKICNkZWZpbmUgbGlzdF90b19wYWdlKGhlYWQpIChsaXN0X2VudHJ5KChoZWFkKS0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSkpCiAKKy8qCisgKiBzZWUgaWYgYSBwYWdlIG5lZWRzIHJlbGVhc2luZyB1cG9uIHJlYWRfY2FjaGVfcGFnZXMoKSBmYWlsdXJlCisgKiAtIHRoZSBjYWxsZXIgb2YgcmVhZF9jYWNoZV9wYWdlcygpIG1heSBoYXZlIHNldCBQR19wcml2YXRlIG9yIFBHX2ZzY2FjaGUKKyAqICAgYmVmb3JlIGNhbGxpbmcsIHN1Y2ggYXMgdGhlIE5GUyBmcyBtYXJraW5nIHBhZ2VzIHRoYXQgYXJlIGNhY2hlZCBsb2NhbGx5CisgKiAgIG9uIGRpc2ssIHRodXMgd2UgbmVlZCB0byBnaXZlIHRoZSBmcyBhIGNoYW5jZSB0byBjbGVhbiB1cCBpbiB0aGUgZXZlbnQgb2YKKyAqICAgYW4gZXJyb3IKKyAqLworc3RhdGljIHZvaWQgcmVhZF9jYWNoZV9wYWdlc19pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpIHsKKwkJaWYgKCF0cnlsb2NrX3BhZ2UocGFnZSkpCisJCQlCVUcoKTsKKwkJcGFnZS0+bWFwcGluZyA9IG1hcHBpbmc7CisJCWRvX2ludmFsaWRhdGVwYWdlKHBhZ2UsIDApOworCQlwYWdlLT5tYXBwaW5nID0gTlVMTDsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfQorCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK30KKworLyoKKyAqIHJlbGVhc2UgYSBsaXN0IG9mIHBhZ2VzLCBpbnZhbGlkYXRpbmcgdGhlbSBmaXJzdCBpZiBuZWVkIGJlCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRfY2FjaGVfcGFnZXNfaW52YWxpZGF0ZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMpCit7CisJc3RydWN0IHBhZ2UgKnZpY3RpbTsKKworCXdoaWxlICghbGlzdF9lbXB0eShwYWdlcykpIHsKKwkJdmljdGltID0gbGlzdF90b19wYWdlKHBhZ2VzKTsKKwkJbGlzdF9kZWwoJnZpY3RpbS0+bHJ1KTsKKwkJcmVhZF9jYWNoZV9wYWdlc19pbnZhbGlkYXRlX3BhZ2UobWFwcGluZywgdmljdGltKTsKKwl9Cit9CisKIC8qKgogICogcmVhZF9jYWNoZV9wYWdlcyAtIHBvcHVsYXRlIGFuIGFkZHJlc3Mgc3BhY2Ugd2l0aCBzb21lIHBhZ2VzICYgc3RhcnQgcmVhZHMgYWdhaW5zdCB0aGVtCiAgKiBAbWFwcGluZzogdGhlIGFkZHJlc3Nfc3BhY2UKQEAgLTUyLDE0ICs4OCwxNCBAQAogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKIAkJaWYgKGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLAogCQkJCQlwYWdlLT5pbmRleCwgR0ZQX0tFUk5FTCkpIHsKLQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCXJlYWRfY2FjaGVfcGFnZXNfaW52YWxpZGF0ZV9wYWdlKG1hcHBpbmcsIHBhZ2UpOwogCQkJY29udGludWU7CiAJCX0KIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCiAJCXJldCA9IGZpbGxlcihkYXRhLCBwYWdlKTsKIAkJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJCXB1dF9wYWdlc19saXN0KHBhZ2VzKTsKKwkJCXJlYWRfY2FjaGVfcGFnZXNfaW52YWxpZGF0ZV9wYWdlcyhtYXBwaW5nLCBwYWdlcyk7CiAJCQlicmVhazsKIAkJfQogCQl0YXNrX2lvX2FjY291bnRfcmVhZChQQUdFX0NBQ0hFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDgyNWM2MDYuLjRmYzE3NjEgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogI2luY2x1ZGUJPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUJPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUJPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUJPHRyYWNlL2ttZW10cmFjZS5oPgogI2luY2x1ZGUJPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZQk8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZQk8bGludXgvdWFjY2Vzcy5oPgpAQCAtNTY4LDYgKzU2OSwxNCBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3NpemVfdCBzbGFiX2J1ZmZlcl9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCit7CisJcmV0dXJuIGNhY2hlcC0+YnVmZmVyX3NpemU7Cit9CitFWFBPUlRfU1lNQk9MKHNsYWJfYnVmZmVyX3NpemUpOworI2VuZGlmCisKIC8qCiAgKiBEbyBub3QgZ28gYWJvdmUgdGhpcyBvcmRlciB1bmxlc3MgMCBvYmplY3RzIGZpdCBpbnRvIHRoZSBzbGFiLgogICovCkBAIC0xMTYwLDcgKzExNjksNyBAQAogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzID0gTlVMTDsKIAlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7Ci0Jbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBub2RlKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGVwLCAmY2FjaGVfY2hhaW4sIG5leHQpIHsKIAkJc3RydWN0IGFycmF5X2NhY2hlICpuYzsKQEAgLTM1NTQsMTAgKzM1NjMsMjMgQEAKICAqLwogdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKIHsKLQlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXZvaWQgKnJldCA9IF9fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgcmV0LAorCQkJICAgICBvYmpfc2l6ZShjYWNoZXApLCBjYWNoZXAtPmJ1ZmZlcl9zaXplLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTsKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3ZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKK3sKKwlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2UpOworI2VuZGlmCisKIC8qKgogICoga21lbV9wdHJfdmFsaWRhdGUgLSBjaGVjayBpZiBhbiB1bnRydXN0ZWQgcG9pbnRlciBtaWdodCBiZSBhIHNsYWIgZW50cnkuCiAgKiBAY2FjaGVwOiB0aGUgY2FjaGUgd2UncmUgY2hlY2tpbmcgYWdhaW5zdApAQCAtMzYwMiwyMyArMzYyNCw0NyBAQAogI2lmZGVmIENPTkZJR19OVU1BCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlaWQpCiB7Ci0JcmV0dXJuIF9fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCBub2RlaWQsCi0JCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXZvaWQgKnJldCA9IF9fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCBub2RlaWQsCisJCQkJICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisKKwlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgcmV0LAorCQkJCSAgb2JqX3NpemUoY2FjaGVwKSwgY2FjaGVwLT5idWZmZXJfc2l6ZSwKKwkJCQkgIGZsYWdzLCBub2RlaWQpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlKTsKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3ZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCQkJICAgIGdmcF90IGZsYWdzLAorCQkJCSAgICBpbnQgbm9kZWlkKQoreworCXJldHVybiBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkLAorCQkJCSAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2UpOworI2VuZGlmCisKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCiBfX2RvX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLCB2b2lkICpjYWxsZXIpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKKwl2b2lkICpyZXQ7CiAKIAljYWNoZXAgPSBrbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZSwgZmxhZ3MpOwogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKGNhY2hlcCkpKQogCQlyZXR1cm4gY2FjaGVwOwotCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZSk7CisJcmV0ID0ga21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2UoY2FjaGVwLCBmbGFncywgbm9kZSk7CisKKwlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsCisJCQkJICAodW5zaWduZWQgbG9uZykgY2FsbGVyLCByZXQsCisJCQkJICBzaXplLCBjYWNoZXAtPmJ1ZmZlcl9zaXplLCBmbGFncywgbm9kZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NMQUIKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TTEFCKSB8fCBkZWZpbmVkKENPTkZJR19LTUVNVFJBQ0UpCiB2b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogewogCXJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShzaXplLCBmbGFncywgbm9kZSwKQEAgLTM2NTEsNiArMzY5Nyw3IEBACiAJCQkJCSAgdm9pZCAqY2FsbGVyKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CisJdm9pZCAqcmV0OwogCiAJLyogSWYgeW91IHdhbnQgdG8gc2F2ZSBhIGZldyBieXRlcyAudGV4dCBzcGFjZTogcmVwbGFjZQogCSAqIF9fIHdpdGgga21lbV8uCkBAIC0zNjYwLDExICszNzA3LDE3IEBACiAJY2FjaGVwID0gX19maW5kX2dlbmVyYWxfY2FjaGVwKHNpemUsIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihjYWNoZXApKSkKIAkJcmV0dXJuIGNhY2hlcDsKLQlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzLCBjYWxsZXIpOworCXJldCA9IF9fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncywgY2FsbGVyKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSBjYWxsZXIsIHJldCwKKwkJCSAgICAgc2l6ZSwgY2FjaGVwLT5idWZmZXJfc2l6ZSwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NMQUIKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TTEFCKSB8fCBkZWZpbmVkKENPTkZJR19LTUVNVFJBQ0UpCiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXJldHVybiBfX2RvX2ttYWxsb2Moc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CkBAIC0zNzAzLDYgKzM3NTYsOCBAQAogCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqcCwgb2JqX3NpemUoY2FjaGVwKSk7CiAJX19jYWNoZV9mcmVlKGNhY2hlcCwgb2JqcCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJa21lbXRyYWNlX21hcmtfZnJlZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgX1JFVF9JUF8sIG9ianApOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpOwogCkBAIC0zNzI5LDYgKzM3ODQsOCBAQAogCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChvYmpwLCBvYmpfc2l6ZShjKSk7CiAJX19jYWNoZV9mcmVlKGMsICh2b2lkICopb2JqcCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJa21lbXRyYWNlX21hcmtfZnJlZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBfUkVUX0lQXywgb2JqcCk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmcmVlKTsKIApAQCAtMzk5Miw4ICs0MDQ5LDcgQEAKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqc2VhcmNocDsKIAlzdHJ1Y3Qga21lbV9saXN0MyAqbDM7CiAJaW50IG5vZGUgPSBudW1hX25vZGVfaWQoKTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrID0KLQkJY29udGFpbmVyX29mKHcsIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmsgPSB0b19kZWxheWVkX3dvcmsodyk7CiAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmNhY2hlX2NoYWluX211dGV4KSkKIAkJLyogR2l2ZSB1cC4gU2V0dXAgdGhlIG5leHQgaXRlcmF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDdhMzQxMTUuLjRkZDY1MTYgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDx0cmFjZS9rbWVtdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIC8qCkBAIC00NzQsNiArNDc1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgKm07CiAJaW50IGFsaWduID0gbWF4KEFSQ0hfS01BTExPQ19NSU5BTElHTiwgQVJDSF9TTEFCX01JTkFMSUdOKTsKKwl2b2lkICpyZXQ7CiAKIAlsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcCk7CiAKQEAgLTQ4MiwxMiArNDg0LDE3IEBACiAJCQlyZXR1cm4gWkVST19TSVpFX1BUUjsKIAogCQltID0gc2xvYl9hbGxvYyhzaXplICsgYWxpZ24sIGdmcCwgYWxpZ24sIG5vZGUpOworCiAJCWlmICghbSkKIAkJCXJldHVybiBOVUxMOwogCQkqbSA9IHNpemU7Ci0JCXJldHVybiAodm9pZCAqKW0gKyBhbGlnbjsKKwkJcmV0ID0gKHZvaWQgKiltICsgYWxpZ247CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgIF9SRVRfSVBfLCByZXQsCisJCQkJCSAgc2l6ZSwgc2l6ZSArIGFsaWduLCBnZnAsIG5vZGUpOwogCX0gZWxzZSB7Ci0JCXZvaWQgKnJldDsKKwkJdW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCiAJCXJldCA9IHNsb2JfbmV3X3BhZ2VzKGdmcCB8IF9fR0ZQX0NPTVAsIGdldF9vcmRlcihzaXplKSwgbm9kZSk7CiAJCWlmIChyZXQpIHsKQEAgLTQ5NSw4ICs1MDIsMTMgQEAKIAkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocmV0KTsKIAkJCXBhZ2UtPnByaXZhdGUgPSBzaXplOwogCQl9Ci0JCXJldHVybiByZXQ7CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgIF9SRVRfSVBfLCByZXQsCisJCQkJCSAgc2l6ZSwgUEFHRV9TSVpFIDw8IG9yZGVyLCBnZnAsIG5vZGUpOwogCX0KKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKF9fa21hbGxvY19ub2RlKTsKIApAQCAtNTE0LDYgKzUyNiw4IEBACiAJCXNsb2JfZnJlZShtLCAqbSArIGFsaWduKTsKIAl9IGVsc2UKIAkJcHV0X3BhZ2UoJnNwLT5wYWdlKTsKKworCWttZW10cmFjZV9tYXJrX2ZyZWUoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1JFVF9JUF8sIGJsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woa2ZyZWUpOwogCkBAIC01ODMsMTAgKzU5NywxOSBAQAogewogCXZvaWQgKmI7CiAKLQlpZiAoYy0+c2l6ZSA8IFBBR0VfU0laRSkKKwlpZiAoYy0+c2l6ZSA8IFBBR0VfU0laRSkgewogCQliID0gc2xvYl9hbGxvYyhjLT5zaXplLCBmbGFncywgYy0+YWxpZ24sIG5vZGUpOwotCWVsc2UKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwKKwkJCQkJICBfUkVUX0lQXywgYiwgYy0+c2l6ZSwKKwkJCQkJICBTTE9CX1VOSVRTKGMtPnNpemUpICogU0xPQl9VTklULAorCQkJCQkgIGZsYWdzLCBub2RlKTsKKwl9IGVsc2UgewogCQliID0gc2xvYl9uZXdfcGFnZXMoZmxhZ3MsIGdldF9vcmRlcihjLT5zaXplKSwgbm9kZSk7CisJCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfQ0FDSEUsCisJCQkJCSAgX1JFVF9JUF8sIGIsIGMtPnNpemUsCisJCQkJCSAgUEFHRV9TSVpFIDw8IGdldF9vcmRlcihjLT5zaXplKSwKKwkJCQkJICBmbGFncywgbm9kZSk7CisJfQogCiAJaWYgKGMtPmN0b3IpCiAJCWMtPmN0b3IoYik7CkBAIC02MjIsNiArNjQ1LDggQEAKIAl9IGVsc2UgewogCQlfX2ttZW1fY2FjaGVfZnJlZShiLCBjLT5zaXplKTsKIAl9CisKKwlrbWVtdHJhY2VfbWFya19mcmVlKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgYik7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7CiAKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBjNGVhOTE1Li43YWFhMTIxIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPHRyYWNlL2ttZW10cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgpAQCAtMTYxOCwxOCArMTYxOSw0NiBAQAogCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncykKIHsKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIF9SRVRfSVBfKTsKKwl2b2lkICpyZXQgPSBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCAtMSwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfQ0FDSEUsIF9SRVRfSVBfLCByZXQsCisJCQkgICAgIHMtPm9ianNpemUsIHMtPnNpemUsIGdmcGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2MpOwogCisjaWZkZWYgQ09ORklHX0tNRU1UUkFDRQordm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncykKK3sKKwlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIF9SRVRfSVBfKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX05VTUEKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlKQogewotCXJldHVybiBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBfUkVUX0lQXyk7CisJdm9pZCAqcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgX1JFVF9JUF8sIHJldCwKKwkJCQkgIHMtPm9ianNpemUsIHMtPnNpemUsIGdmcGZsYWdzLCBub2RlKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZSk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3ZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQkJCSAgICBnZnBfdCBnZnBmbGFncywKKwkJCQkgICAgaW50IG5vZGUpCit7CisJcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIF9SRVRfSVBfKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2UpOworI2VuZGlmCisKIC8qCiAgKiBTbG93IHBhdGNoIGhhbmRsaW5nLiBUaGlzIG1heSBzdGlsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSBzaW5jZSBvYmplY3RzCiAgKiBoYXZlIGEgbG9uZ2VyIGxpZmV0aW1lIHRoYW4gdGhlIGNwdSBzbGFicyBpbiBtb3N0IHByb2Nlc3NpbmcgbG9hZHMuCkBAIC0xNzM3LDYgKzE3NjYsOCBAQAogCXBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZSh4KTsKIAogCXNsYWJfZnJlZShzLCBwYWdlLCB4LCBfUkVUX0lQXyk7CisKKwlrbWVtdHJhY2VfbWFya19mcmVlKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgeCk7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7CiAKQEAgLTI2NTksNiArMjY5MCw3IEBACiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOworCXZvaWQgKnJldDsKIAogCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGZsYWdzKTsKQEAgLTI2NjgsNyArMjcwMCwxMiBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKHMpKSkKIAkJcmV0dXJuIHM7CiAKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBmbGFncywgLTEsIF9SRVRfSVBfKTsKKwlyZXQgPSBzbGFiX2FsbG9jKHMsIGZsYWdzLCAtMSwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1JFVF9JUF8sIHJldCwKKwkJCSAgICAgc2l6ZSwgcy0+c2l6ZSwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jKTsKIApAQCAtMjY4NywxNiArMjcyNCwzMCBAQAogdm9pZCAqX19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKKwl2b2lkICpyZXQ7CiAKLQlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQotCQlyZXR1cm4ga21hbGxvY19sYXJnZV9ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKSB7CisJCXJldCA9IGttYWxsb2NfbGFyZ2Vfbm9kZShzaXplLCBmbGFncywgbm9kZSk7CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgIF9SRVRfSVBfLCByZXQsCisJCQkJCSAgc2l6ZSwgUEFHRV9TSVpFIDw8IGdldF9vcmRlcihzaXplKSwKKwkJCQkJICBmbGFncywgbm9kZSk7CisKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZmxhZ3MpOwogCiAJaWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIocykpKQogCQlyZXR1cm4gczsKIAotCXJldHVybiBzbGFiX2FsbG9jKHMsIGZsYWdzLCBub2RlLCBfUkVUX0lQXyk7CisJcmV0ID0gc2xhYl9hbGxvYyhzLCBmbGFncywgbm9kZSwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBfUkVUX0lQXywgcmV0LAorCQkJCSAgc2l6ZSwgcy0+c2l6ZSwgZmxhZ3MsIG5vZGUpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jX25vZGUpOwogI2VuZGlmCkBAIC0yNzU1LDYgKzI4MDYsOCBAQAogCQlyZXR1cm47CiAJfQogCXNsYWJfZnJlZShwYWdlLT5zbGFiLCBwYWdlLCBvYmplY3QsIF9SRVRfSVBfKTsKKworCWttZW10cmFjZV9tYXJrX2ZyZWUoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1JFVF9JUF8sIHgpOwogfQogRVhQT1JUX1NZTUJPTChrZnJlZSk7CiAKQEAgLTMyMjQsNiArMzI3Nyw3IEBACiB2b2lkICpfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemVfdCBzaXplLCBnZnBfdCBnZnBmbGFncywgdW5zaWduZWQgbG9uZyBjYWxsZXIpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CisJdm9pZCAqcmV0OwogCiAJaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkKIAkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uoc2l6ZSwgZ2ZwZmxhZ3MpOwpAQCAtMzIzMywxMyArMzI4NywyMCBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKHMpKSkKIAkJcmV0dXJuIHM7CiAKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIGNhbGxlcik7CisJcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIGNhbGxlcik7CisKKwkvKiBIb25vciB0aGUgY2FsbCBzaXRlIHBvaW50ZXIgd2UgcmVjaWV2ZWQuICovCisJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgY2FsbGVyLCByZXQsIHNpemUsCisJCQkgICAgIHMtPnNpemUsIGdmcGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgKl9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MsCiAJCQkJCWludCBub2RlLCB1bnNpZ25lZCBsb25nIGNhbGxlcikKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKKwl2b2lkICpyZXQ7CiAKIAlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZV9ub2RlKHNpemUsIGdmcGZsYWdzLCBub2RlKTsKQEAgLTMyNDksNyArMzMxMCwxMyBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKHMpKSkKIAkJcmV0dXJuIHM7CiAKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgY2FsbGVyKTsKKwlyZXQgPSBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBjYWxsZXIpOworCisJLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2lldmVkLiAqLworCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfS01BTExPQywgY2FsbGVyLCByZXQsCisJCQkJICBzaXplLCBzLT5zaXplLCBnZnBmbGFncywgbm9kZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA2ZTgzMDg0Li5iZWRlMjNjIDEwMDY0NAotLS0gYS9tbS9zd2FwLmMKKysrIGIvbW0vc3dhcC5jCkBAIC00NDgsOCArNDQ4LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07CiAKLQkJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmIHRyeWxvY2tfcGFnZShwYWdlKSkgewotCQkJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlpZiAocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSAmJiB0cnlsb2NrX3BhZ2UocGFnZSkpIHsKKwkJCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpKQogCQkJCXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgMCk7CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggMTIyOTIxMS4uNTUyMDZmYSAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC01MCw3ICs1MCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdHJ1bmNhdGVfcGFydGlhbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBwYXJ0aWFsKQogewogCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIHBhcnRpYWwsIFBBR0VfQ0FDSEVfU0laRSk7Ci0JaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpKQogCQlkb19pbnZhbGlkYXRlcGFnZShwYWdlLCBwYXJ0aWFsKTsKIH0KIApAQCAtOTksNyArOTksNyBAQAogCWlmIChwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpCiAJCXJldHVybjsKIAotCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKKwlpZiAocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSkKIAkJZG9faW52YWxpZGF0ZXBhZ2UocGFnZSwgMCk7CiAKIAljYW5jZWxfZGlydHlfcGFnZShwYWdlLCBQQUdFX0NBQ0hFX1NJWkUpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJaWYgKHBhZ2UtPm1hcHBpbmcgIT0gbWFwcGluZykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoUGFnZVByaXZhdGUocGFnZSkgJiYgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgMCkpCisJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkgJiYgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgMCkpCiAJCXJldHVybiAwOwogCiAJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKQEAgLTM0OCw3ICszNDgsNyBAQAogCWlmIChwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpCiAJCXJldHVybiAwOwogCi0JaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIEdGUF9LRVJORUwpKQorCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CkBAIC0zNTYsNyArMzU2LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwotCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSk7CisJQlVHX09OKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpOwogCV9fcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKIAlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwkvKiBwYWdlY2FjaGUgcmVmICovCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDA2ZTcyNjkuLjM5ZmRmYjEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXNfcGFnZV9jYWNoZV9mcmVlYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gcGFnZV9jb3VudChwYWdlKSAtICEhUGFnZVByaXZhdGUocGFnZSkgPT0gMjsKKwlyZXR1cm4gcGFnZV9jb3VudChwYWdlKSAtICEhcGFnZV9oYXNfcHJpdmF0ZShwYWdlKSA9PSAyOwogfQogCiBzdGF0aWMgaW50IG1heV93cml0ZV90b19xdWV1ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCSAqIFNvbWUgZGF0YSBqb3VybmFsaW5nIG9ycGhhbmVkIHBhZ2VzIGNhbiBoYXZlCiAJCSAqIHBhZ2UtPm1hcHBpbmcgPT0gTlVMTCB3aGlsZSBiZWluZyBkaXJ0eSB3aXRoIGNsZWFuIGJ1ZmZlcnMuCiAJCSAqLwotCQlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKKwkJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpIHsKIAkJCWlmICh0cnlfdG9fZnJlZV9idWZmZXJzKHBhZ2UpKSB7CiAJCQkJQ2xlYXJQYWdlRGlydHkocGFnZSk7CiAJCQkJcHJpbnRrKCIlczogb3JwaGFuZWQgcGFnZVxuIiwgX19mdW5jX18pOwpAQCAtNzI3LDcgKzcyNyw3IEBACiAJCSAqIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSAocGFnZV9jb3VudCA9PSAxKSBpdCBjYW4gYmUgZnJlZWQuCiAJCSAqIE90aGVyd2lzZSwgbGVhdmUgdGhlIHBhZ2Ugb24gdGhlIExSVSBzbyBpdCBpcyBzd2FwcGFibGUuCiAJCSAqLwotCQlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKKwkJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpIHsKIAkJCWlmICghdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBzYy0+Z2ZwX21hc2spKQogCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJaWYgKCFtYXBwaW5nICYmIHBhZ2VfY291bnQocGFnZSkgPT0gMSkgewpAQCAtMTk2Nyw3ICsxOTY3LDcgQEAKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSByZWNsYWltX3N0YXRlID0gewogCQkucmVjbGFpbWVkX3NsYWIgPSAwLAogCX07Ci0Jbm9kZV90b19jcHVtYXNrX3B0cihjcHVtYXNrLCBwZ2RhdC0+bm9kZV9pZCk7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2sgPSBjcHVtYXNrX29mX25vZGUocGdkYXQtPm5vZGVfaWQpOwogCiAJbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKEdGUF9LRVJORUwpOwogCkBAIC0yMjA0LDcgKzIyMDQsOSBAQAogCWlmIChhY3Rpb24gPT0gQ1BVX09OTElORSB8fCBhY3Rpb24gPT0gQ1BVX09OTElORV9GUk9aRU4pIHsKIAkJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fSElHSF9NRU1PUlkpIHsKIAkJCXBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTsKLQkJCW5vZGVfdG9fY3B1bWFza19wdHIobWFzaywgcGdkYXQtPm5vZGVfaWQpOworCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2s7CisKKwkJCW1hc2sgPSBjcHVtYXNrX29mX25vZGUocGdkYXQtPm5vZGVfaWQpOwogCiAJCQlpZiAoY3B1bWFza19hbnlfYW5kKGNwdV9vbmxpbmVfbWFzaywgbWFzaykgPCBucl9jcHVfaWRzKQogCQkJCS8qIE9uZSBvZiBvdXIgQ1BVcyBvbmxpbmU6IHJlc3RvcmUgbWFzayAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwppbmRleCA5ODI2NzY2Li42NmY2MTMwIDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYworKysgYi9tbS92bXN0YXQuYwpAQCAtODkxLDcgKzg5MSw3IEBACiB7CiAJcmVmcmVzaF9jcHVfdm1fc3RhdHMoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJl9fZ2V0X2NwdV92YXIodm1zdGF0X3dvcmspLAotCQlzeXNjdGxfc3RhdF9pbnRlcnZhbCk7CisJCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoc3lzY3RsX3N0YXRfaW50ZXJ2YWwpKTsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHN0YXJ0X2NwdV90aW1lcihpbnQgY3B1KQpAQCAtODk5LDcgKzg5OSw4IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayAqdm1zdGF0X3dvcmsgPSAmcGVyX2NwdSh2bXN0YXRfd29yaywgY3B1KTsKIAogCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUodm1zdGF0X3dvcmssIHZtc3RhdF91cGRhdGUpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsIHZtc3RhdF93b3JrLCBIWiArIGNwdSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgdm1zdGF0X3dvcmssCisJCQkJIF9fcm91bmRfamlmZmllc19yZWxhdGl2ZShIWiwgY3B1KSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IGVjOTNlN2UuLmNlNzdkYjQgMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC0xNDAsNyArMTQwLDcgQEAKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgY2FuIHNlbGVjdCBiZXR3ZWVuIGFsbCB0aGUgbmV0ZmlsdGVyIG1vZHVsZXMuCi0JICBJZiB5b3Ugc2F5IE4gdGhlIG1vcmUgdW51bnN1YWwgb25lcyB3aWxsIG5vdCBiZSBzaG93biBhbmQgdGhlCisJICBJZiB5b3Ugc2F5IE4gdGhlIG1vcmUgdW51c3VhbCBvbmVzIHdpbGwgbm90IGJlIHNob3duIGFuZCB0aGUKIAkgIGJhc2ljIG9uZXMgbmVlZGVkIGJ5IG1vc3QgcGVvcGxlIHdpbGwgZGVmYXVsdCB0byAnTScuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDUyZmVhNWIuLjkxZDc5MmQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0yNDcyLDggKzI0NzIsOSBAQAogCQlyZXR1cm4gR1JPX05PUk1BTDsKIAogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gIWNvbXBhcmVfZXRoZXJfaGVhZGVyKAotCQkJc2tiX21hY19oZWFkZXIocCksIHNrYl9ncm9fbWFjX2hlYWRlcihza2IpKTsKKwkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IChwLT5kZXYgPT0gc2tiLT5kZXYpCisJCQkmJiAhY29tcGFyZV9ldGhlcl9oZWFkZXIoc2tiX21hY19oZWFkZXIocCksCisJCQkJCQkgc2tiX2dyb19tYWNfaGVhZGVyKHNrYikpOwogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggPSAwOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDI0NGNhNTYuLmQ5ZDUxNjAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTI2MSw4ICsyNjEsNyBAQAogCXJldCA9IDA7CiAKIGVycl9vdXQ6Ci0JaWYgKHJ1bGVfYnVmKQotCQlrZnJlZShydWxlX2J1Zik7CisJa2ZyZWUocnVsZV9idWYpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IDM1YzVmNmEuLjViYTUzM2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJaW5kZXYgPSBpbiA/IGluLT5uYW1lIDogbnVsbGRldm5hbWU7CiAJb3V0ZGV2ID0gb3V0ID8gb3V0LT5uYW1lIDogbnVsbGRldm5hbWU7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJcmN1X3JlYWRfbG9ja19iaCgpOwogCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOwogCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKIApAQCAtMzI5LDcgKzMyOSw3IEBACiAJCX0KIAl9IHdoaWxlICghaG90ZHJvcCk7CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogCWlmIChob3Rkcm9wKQogCQlyZXR1cm4gTkZfRFJPUDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCA4MmVlN2M5Li44MTBjMGI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC0zMzksNyArMzM5LDcgQEAKIAogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJcmN1X3JlYWRfbG9ja19iaCgpOwogCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOwogCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKIApAQCAtNDM3LDcgKzQzNyw3IEBACiAJCX0KIAl9IHdoaWxlICghaG90ZHJvcCk7CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDI0NTFhZWIuLmZhZmJlYzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xMDgxLDggKzEwODEsNyBAQAogICoJdGhpcywgbm8gYmxvY2tpbmcgYW5kIHZlcnkgc3RyYW5nZSBlcnJvcnMgOCkKICAqLwogCi1zdGF0aWMgaW50IHRjcF9yZWN2X3VyZyhzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW8sCi0JCQlzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncykKK3N0YXRpYyBpbnQgdGNwX3JlY3ZfdXJnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKQEAgLTE2OTcsNyArMTY5Niw3IEBACiAJcmV0dXJuIGVycjsKIAogcmVjdl91cmc6Ci0JZXJyID0gdGNwX3JlY3ZfdXJnKHNrLCB0aW1lbywgbXNnLCBsZW4sIGZsYWdzKTsKKwllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIG1zZywgbGVuLCBmbGFncyk7CiAJZ290byBvdXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCBjMWYyNTlkLi41MzMwMGZhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC03NTQsNiArNzU0LDM2IEBACiAJCXRwLT5mYWNrZXRzX291dCAtPSBkZWNyOwogfQogCisvKiBQY291bnQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgd3JpdGUgcXVldWUgZ290IGNoYW5nZWQsIHdlIG5lZWQgdG8gZG8gdmFyaW91cworICogdHdlYWtzIHRvIGZpeCBjb3VudGVycworICovCitzdGF0aWMgdm9pZCB0Y3BfYWRqdXN0X3Bjb3VudChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBkZWNyKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCisJdHAtPnBhY2tldHNfb3V0IC09IGRlY3I7CisKKwlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfQUNLRUQpCisJCXRwLT5zYWNrZWRfb3V0IC09IGRlY3I7CisJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX1JFVFJBTlMpCisJCXRwLT5yZXRyYW5zX291dCAtPSBkZWNyOworCWlmIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX0xPU1QpCisJCXRwLT5sb3N0X291dCAtPSBkZWNyOworCisJLyogUmVubyBjYXNlIGlzIHNwZWNpYWwuIFNpZ2guLi4gKi8KKwlpZiAodGNwX2lzX3Jlbm8odHApICYmIGRlY3IgPiAwKQorCQl0cC0+c2Fja2VkX291dCAtPSBtaW5fdCh1MzIsIHRwLT5zYWNrZWRfb3V0LCBkZWNyKTsKKworCXRjcF9hZGp1c3RfZmFja2V0c19vdXQoc2ssIHNrYiwgZGVjcik7CisKKwlpZiAodHAtPmxvc3Rfc2tiX2hpbnQgJiYKKwkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCBUQ1BfU0tCX0NCKHRwLT5sb3N0X3NrYl9oaW50KS0+c2VxKSAmJgorCSAgICAodGNwX2lzX2ZhY2sodHApIHx8IFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSkKKwkJdHAtPmxvc3RfY250X2hpbnQgLT0gZGVjcjsKKworCXRjcF92ZXJpZnlfbGVmdF9vdXQodHApOworfQorCiAvKiBGdW5jdGlvbiB0byBjcmVhdGUgdHdvIG5ldyBUQ1Agc2VnbWVudHMuICBTaHJpbmtzIHRoZSBnaXZlbiBzZWdtZW50CiAgKiB0byB0aGUgc3BlY2lmaWVkIHNpemUgYW5kIGFwcGVuZHMgYSBuZXcgc2VnbWVudCB3aXRoIHRoZSByZXN0IG9mIHRoZQogICogcGFja2V0IHRvIHRoZSBsaXN0LiAgVGhpcyB3b24ndCBiZSBjYWxsZWQgZnJlcXVlbnRseSwgSSBob3BlLgpAQCAtODM2LDI4ICs4NjYsOCBAQAogCQlpbnQgZGlmZiA9IG9sZF9mYWN0b3IgLSB0Y3Bfc2tiX3Bjb3VudChza2IpIC0KIAkJCXRjcF9za2JfcGNvdW50KGJ1ZmYpOwogCi0JCXRwLT5wYWNrZXRzX291dCAtPSBkaWZmOwotCi0JCWlmIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX1NBQ0tFRF9BQ0tFRCkKLQkJCXRwLT5zYWNrZWRfb3V0IC09IGRpZmY7Ci0JCWlmIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX1NBQ0tFRF9SRVRSQU5TKQotCQkJdHAtPnJldHJhbnNfb3V0IC09IGRpZmY7Ci0KLQkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfTE9TVCkKLQkJCXRwLT5sb3N0X291dCAtPSBkaWZmOwotCi0JCS8qIEFkanVzdCBSZW5vIFNBQ0sgZXN0aW1hdGUuICovCi0JCWlmICh0Y3BfaXNfcmVubyh0cCkgJiYgZGlmZiA+IDApIHsKLQkJCXRjcF9kZWNfcGNvdW50X2FwcHJveF9pbnQoJnRwLT5zYWNrZWRfb3V0LCBkaWZmKTsKLQkJCXRjcF92ZXJpZnlfbGVmdF9vdXQodHApOwotCQl9Ci0JCXRjcF9hZGp1c3RfZmFja2V0c19vdXQoc2ssIHNrYiwgZGlmZik7Ci0KLQkJaWYgKHRwLT5sb3N0X3NrYl9oaW50ICYmCi0JCSAgICBiZWZvcmUoVENQX1NLQl9DQihza2IpLT5zZXEsCi0JCQkgICBUQ1BfU0tCX0NCKHRwLT5sb3N0X3NrYl9oaW50KS0+c2VxKSAmJgotCQkgICAgKHRjcF9pc19mYWNrKHRwKSB8fCBUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCkpCi0JCQl0cC0+bG9zdF9jbnRfaGludCAtPSBkaWZmOworCQlpZiAoZGlmZikKKwkJCXRjcF9hZGp1c3RfcGNvdW50KHNrLCBza2IsIGRpZmYpOwogCX0KIAogCS8qIExpbmsgQlVGRiBpbnRvIHRoZSBzZW5kIHF1ZXVlLiAqLwpAQCAtMTc2OCwyMiArMTc3OCwxNCBAQAogCSAqIHBhY2tldCBjb3VudGluZyBkb2VzIG5vdCBicmVhay4KIAkgKi8KIAlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+c2Fja2VkICYgVENQQ0JfRVZFUl9SRVRSQU5TOwotCWlmIChUQ1BfU0tCX0NCKG5leHRfc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX1JFVFJBTlMpCi0JCXRwLT5yZXRyYW5zX291dCAtPSB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYik7Ci0JaWYgKFRDUF9TS0JfQ0IobmV4dF9za2IpLT5zYWNrZWQgJiBUQ1BDQl9MT1NUKQotCQl0cC0+bG9zdF9vdXQgLT0gdGNwX3NrYl9wY291bnQobmV4dF9za2IpOwotCS8qIFJlbm8gY2FzZSBpcyBzcGVjaWFsLiBTaWdoLi4uICovCi0JaWYgKHRjcF9pc19yZW5vKHRwKSAmJiB0cC0+c2Fja2VkX291dCkKLQkJdGNwX2RlY19wY291bnRfYXBwcm94KCZ0cC0+c2Fja2VkX291dCwgbmV4dF9za2IpOwotCi0JdGNwX2FkanVzdF9mYWNrZXRzX291dChzaywgbmV4dF9za2IsIHRjcF9za2JfcGNvdW50KG5leHRfc2tiKSk7Ci0JdHAtPnBhY2tldHNfb3V0IC09IHRjcF9za2JfcGNvdW50KG5leHRfc2tiKTsKIAogCS8qIGNoYW5nZWQgdHJhbnNtaXQgcXVldWUgdW5kZXIgdXMgc28gY2xlYXIgaGludHMgKi8KIAl0Y3BfY2xlYXJfcmV0cmFuc19oaW50c19wYXJ0aWFsKHRwKTsKIAlpZiAobmV4dF9za2IgPT0gdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQpCiAJCXRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ID0gc2tiOwogCisJdGNwX2FkanVzdF9wY291bnQoc2ssIG5leHRfc2tiLCB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYikpOworCiAJc2tfd21lbV9mcmVlX3NrYihzaywgbmV4dF9za2IpOwogfQogCkBAIC0xODkxLDcgKzE4OTMsMTIgQEAKIAkJaWYgKHRjcF9mcmFnbWVudChzaywgc2tiLCBjdXJfbXNzLCBjdXJfbXNzKSkKIAkJCXJldHVybiAtRU5PTUVNOyAvKiBXZSdsbCB0cnkgYWdhaW4gbGF0ZXIuICovCiAJfSBlbHNlIHsKLQkJdGNwX2luaXRfdHNvX3NlZ3Moc2ssIHNrYiwgY3VyX21zcyk7CisJCWludCBvbGRwY291bnQgPSB0Y3Bfc2tiX3Bjb3VudChza2IpOworCisJCWlmICh1bmxpa2VseShvbGRwY291bnQgPiAxKSkgeworCQkJdGNwX2luaXRfdHNvX3NlZ3Moc2ssIHNrYiwgY3VyX21zcyk7CisJCQl0Y3BfYWRqdXN0X3Bjb3VudChzaywgc2tiLCBvbGRwY291bnQgLSB0Y3Bfc2tiX3Bjb3VudChza2IpKTsKKwkJfQogCX0KIAogCXRjcF9yZXRyYW5zX3RyeV9jb2xsYXBzZShzaywgc2tiLCBjdXJfbXNzKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L0tjb25maWcgYi9uZXQvaXB2Ni9LY29uZmlnCmluZGV4IGVjOTkyMTUuLmNhOGNiMzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L0tjb25maWcKKysrIGIvbmV0L2lwdjYvS2NvbmZpZwpAQCAtMjIsMTcgKzIyLDE3IEBACiBpZiBJUFY2CiAKIGNvbmZpZyBJUFY2X1BSSVZBQ1kKLQlib29sICJJUHY2OiBQcml2YWN5IEV4dGVuc2lvbnMgc3VwcG9ydCIKKwlib29sICJJUHY2OiBQcml2YWN5IEV4dGVuc2lvbnMgKFJGQyAzMDQxKSBzdXBwb3J0IgogCS0tLWhlbHAtLS0KIAkgIFByaXZhY3kgRXh0ZW5zaW9ucyBmb3IgU3RhdGVsZXNzIEFkZHJlc3MgQXV0b2NvbmZpZ3VyYXRpb24gaW4gSVB2NgotCSAgc3VwcG9ydC4gIFdpdGggdGhpcyBvcHRpb24sIGFkZGl0aW9uYWwgcGVyaW9kaWNhbGx5LWFsdGVyIAotCSAgcHNldWRvLXJhbmRvbSBnbG9iYWwtc2NvcGUgdW5pY2FzdCBhZGRyZXNzKGVzKSB3aWxsIGFzc2lnbmVkIHRvCisJICBzdXBwb3J0LiAgV2l0aCB0aGlzIG9wdGlvbiwgYWRkaXRpb25hbCBwZXJpb2RpY2FsbHktYWx0ZXJlZAorCSAgcHNldWRvLXJhbmRvbSBnbG9iYWwtc2NvcGUgdW5pY2FzdCBhZGRyZXNzKGVzKSB3aWxsIGJlIGFzc2lnbmVkIHRvCiAJICB5b3VyIGludGVyZmFjZShzKS4KIAkKLQkgIFdlIHVzZSBvdXIgc3RhbmRhcmQgcHNldWRvIHJhbmRvbSBhbGdvcml0aG0gdG8gZ2VuZXJhdGUgcmFuZG9taXplZAotCSAgaW50ZXJmYWNlIGlkZW50aWZpZXIsIGluc3RlYWQgb2Ygb25lIGRlc2NyaWJlZCBpbiBSRkMgMzA0MS4KKwkgIFdlIHVzZSBvdXIgc3RhbmRhcmQgcHNldWRvLXJhbmRvbSBhbGdvcml0aG0gdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgcmFuZG9taXplZCBpbnRlcmZhY2UgaWRlbnRpZmllciwgaW5zdGVhZCBvZiBvbmUgZGVzY3JpYmVkIGluIFJGQyAzMDQxLgogCi0JICBCeSBkZWZhdWx0LCBrZXJuZWwgZG8gbm90IGdlbmVyYXRlIHRlbXBvcmFyeSBhZGRyZXNzZXMuCisJICBCeSBkZWZhdWx0IHRoZSBrZXJuZWwgZG9lcyBub3QgZ2VuZXJhdGUgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KIAkgIFRvIHVzZSB0ZW1wb3JhcnkgYWRkcmVzc2VzLCBkbwogCQogCSAgICAgICAgZWNobyAyID4vcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9hbGwvdXNlX3RlbXBhZGRyIApAQCAtNDMsOSArNDMsOSBAQAogCWJvb2wgIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydCIKIAktLS1oZWxwLS0tCiAJICBSb3V0ZXIgUHJlZmVyZW5jZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gdGhlIFJvdXRlcgotCSAgQWR2ZXJ0aXNlbWVudCBtZXNzYWdlIHRvIGltcHJvdmUgdGhlIGFiaWxpdHkgb2YgaG9zdHMKLQkgIHRvIHBpY2sgbW9yZSBhcHByb3ByaWF0ZSByb3V0ZXIsIGVzcGVjaWFsbHkgd2hlbiB0aGUgaG9zdHMKLQkgIGlzIHBsYWNlZCBpbiBhIG11bHRpLWhvbWVkIG5ldHdvcmsuCisJICBBZHZlcnRpc2VtZW50IG1lc3NhZ2Ugd2hpY2ggaW1wcm92ZXMgdGhlIGFiaWxpdHkgb2YgaG9zdHMKKwkgIHRvIHBpY2sgYW4gYXBwcm9wcmlhdGUgcm91dGVyLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGhvc3RzCisJICBhcmUgcGxhY2VkIGluIGEgbXVsdGktaG9tZWQgbmV0d29yay4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggZTg5Y2ZhMy4uZGZlZDE3NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJcmN1X3JlYWRfbG9ja19iaCgpOwogCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOwogCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKIApAQCAtNDY2LDcgKzQ2Niw3IEBACiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwogCSgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20gPSBORVRGSUxURVJfTElOS19QT0lTT047CiAjZW5kaWYKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IDYwYzE2MTYuLmYzZDlhZTMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9LY29uZmlnCisrKyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCkBAIC0zMyw3ICszMyw3IEBACiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgZGVmYXVsdCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtCiAJICBtYWM4MDIxMSB3aWxsIHVzZS4gTm90ZSB0aGF0IHRoaXMgZGVmYXVsdCBjYW4gc3RpbGwgYmUKLQkgIG92ZXJyaWRlbiB0aHJvdWdoIHRoZSBpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvIG1vZHVsZQorCSAgb3ZlcnJpZGRlbiB0aHJvdWdoIHRoZSBpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvIG1vZHVsZQogCSAgcGFyYW1ldGVyIGlmIGRpZmZlcmVudCBhbGdvcml0aG1zIGFyZSBhdmFpbGFibGUuCiAKIGNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX1BJRApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDJjOTY3ZTQuLmJiMjc5YmYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTUyLDcgKzUyLDcgQEAKIAogCSAgUGxlYXNlIG5vdGUgdGhhdCBjdXJyZW50bHkgdGhpcyBvcHRpb24gb25seSBzZXRzIGEgZGVmYXVsdCBzdGF0ZS4KIAkgIFlvdSBtYXkgY2hhbmdlIGl0IGF0IGJvb3QgdGltZSB3aXRoIG5mX2Nvbm50cmFjay5hY2N0PTAvMSBrZXJuZWwKLQkgIHBhcmFtYXRlciBvciBieSBsb2FkaW5nIHRoZSBuZl9jb25udHJhY2sgbW9kdWxlIHdpdGggYWNjdD0wLzEuCisJICBwYXJhbWV0ZXIgb3IgYnkgbG9hZGluZyB0aGUgbmZfY29ubnRyYWNrIG1vZHVsZSB3aXRoIGFjY3Q9MC8xLgogCiAJICBZb3UgbWF5IGFsc28gZGlzYWJsZS9lbmFibGUgaXQgb24gYSBydW5uaW5nIHN5c3RlbSB3aXRoOgogCSAgIHN5c2N0bCBuZXQubmV0ZmlsdGVyLm5mX2Nvbm50cmFja19hY2N0PTAvMQpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9LY29uZmlnIGIvbmV0L3Bob25ldC9LY29uZmlnCmluZGV4IDUxYTU2NjkuLjZlYzdkNTUgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvS2NvbmZpZworKysgYi9uZXQvcGhvbmV0L0tjb25maWcKQEAgLTYsNyArNiw3IEBACiAJdHJpc3RhdGUgIlBob25ldCBwcm90b2NvbHMgZmFtaWx5IgogCWhlbHAKIAkgIFRoZSBQaG9uZSBOZXR3b3JrIHByb3RvY29sIChQaG9OZXQpIGlzIGEgcGFja2V0LW9yaWVudGVkCi0JICBjb21tdW5pY2F0aW9uIHByb3RvY29sIGRldmVsb3BwZWQgYnkgTm9raWEgZm9yIHVzZSB3aXRoIGl0cyBtb2RlbXMuCisJICBjb21tdW5pY2F0aW9uIHByb3RvY29sIGRldmVsb3BlZCBieSBOb2tpYSBmb3IgdXNlIHdpdGggaXRzIG1vZGVtcy4KIAogCSAgVGhpcyBpcyByZXF1aXJlZCBmb3IgTWFlbW8gdG8gdXNlIGNlbGx1bGFyIGRhdGEgY29ubmVjdGl2aXR5IChpZgogCSAgc3VwcG9ydGVkKS4gSXQgY2FuIGFsc28gYmUgdXNlZCB0byBjb250cm9sIE5va2lhIHBob25lcwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jCmluZGV4IDA2YTdiNzkuLjQ5MzNiMzggMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWIuYworKysgYi9uZXQvcmRzL2liLmMKQEAgLTUxLDYgKzUxLDcgQEAKIAogc3RydWN0IGxpc3RfaGVhZCByZHNfaWJfZGV2aWNlczsKIAorLyogTk9URTogaWYgYWxzbyBncmFiYmluZyBpYmRldiBsb2NrLCBncmFiIHRoaXMgZmlyc3QgKi8KIERFRklORV9TUElOTE9DSyhpYl9ub2Rldl9jb25uc19sb2NrKTsKIExJU1RfSEVBRChpYl9ub2Rldl9jb25ucyk7CiAKQEAgLTEzNyw3ICsxMzgsNyBAQAogCQlrZnJlZShpX2lwYWRkcik7CiAJfQogCi0JcmRzX2liX3JlbW92ZV9jb25ucyhyZHNfaWJkZXYpOworCXJkc19pYl9kZXN0cm95X2Nvbm5zKHJkc19pYmRldik7CiAKIAlpZiAocmRzX2liZGV2LT5tcl9wb29sKQogCQlyZHNfaWJfZGVzdHJveV9tcl9wb29sKHJkc19pYmRldi0+bXJfcG9vbCk7CkBAIC0yNDksNyArMjUwLDcgQEAKIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKIHsKIAlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSUJfQ09OTkVDVElPTlMsIHJkc19pYl9pY19pbmZvKTsKLQlyZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKCk7CisJcmRzX2liX2Rlc3Ryb3lfbm9kZXZfY29ubnMoKTsKIAlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2liX2NsaWVudCk7CiAJcmRzX2liX3N5c2N0bF9leGl0KCk7CiAJcmRzX2liX3JlY3ZfZXhpdCgpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5oIGIvbmV0L3Jkcy9pYi5oCmluZGV4IDhiZTU2M2EuLjA2OTIwNmMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWIuaAorKysgYi9uZXQvcmRzL2liLmgKQEAgLTEwOCw3ICsxMDgsMTIgQEAKIAogCS8qIHNlbmRpbmcgYWNrcyAqLwogCXVuc2lnbmVkIGxvbmcJCWlfYWNrX2ZsYWdzOworI2lmZGVmIEtFUk5FTF9IQVNfQVRPTUlDNjQKKwlhdG9taWM2NF90CQlpX2Fja19uZXh0OwkvKiBuZXh0IEFDSyB0byBzZW5kICovCisjZWxzZQorCXNwaW5sb2NrX3QJCWlfYWNrX2xvY2s7CS8qIHByb3RlY3QgaV9hY2tfbmV4dCAqLwogCXU2NAkJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKyNlbmRpZgogCXN0cnVjdCByZHNfaGVhZGVyCSppX2FjazsKIAlzdHJ1Y3QgaWJfc2VuZF93cglpX2Fja193cjsKIAlzdHJ1Y3QgaWJfc2dlCQlpX2Fja19zZ2U7CkBAIC0yNjcsOSArMjcyLDE3IEBACiAKIC8qIGliX3JkbWEuYyAqLwogaW50IHJkc19pYl91cGRhdGVfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpOwotaW50IHJkc19pYl9hZGRfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwotdm9pZCByZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpOwotdm9pZCByZHNfaWJfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpOwordm9pZCByZHNfaWJfYWRkX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2liX3JlbW92ZV9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIF9fcmRzX2liX2Rlc3Ryb3lfY29ubnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3BpbmxvY2tfdCAqbGlzdF9sb2NrKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfZGVzdHJveV9ub2Rldl9jb25ucyh2b2lkKQoreworCV9fcmRzX2liX2Rlc3Ryb3lfY29ubnMoJmliX25vZGV2X2Nvbm5zLCAmaWJfbm9kZXZfY29ubnNfbG9jayk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX2Rlc3Ryb3lfY29ubnMoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldikKK3sKKwlfX3Jkc19pYl9kZXN0cm95X2Nvbm5zKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCwgJnJkc19pYmRldi0+c3BpbmxvY2spOworfQogc3RydWN0IHJkc19pYl9tcl9wb29sICpyZHNfaWJfY3JlYXRlX21yX3Bvb2woc3RydWN0IHJkc19pYl9kZXZpY2UgKik7CiB2b2lkIHJkc19pYl9nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbyk7CiB2b2lkIHJkc19pYl9kZXN0cm95X21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICopOwpAQCAtMzU1LDEzICszNjgsNCBAQAogCXJldHVybiAmc2dlWzFdOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX3NldF82NGJpdCh1NjQgKnB0ciwgdTY0IHZhbCkKLXsKLSNpZiBCSVRTX1BFUl9MT05HID09IDY0Ci0JKnB0ciA9IHZhbDsKLSNlbHNlCi0Jc2V0XzY0Yml0KHB0ciwgdmFsKTsKLSNlbmRpZgotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uYwppbmRleCAwNTMyMjM3Li5mOGU0MGUxIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX2NtLmMKKysrIGIvbmV0L3Jkcy9pYl9jbS5jCkBAIC0xMjYsOSArMTI2LDcgQEAKIAllcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihyZHNfaWJkZXYsIGNvbm4tPmNfbGFkZHIpOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX0VSUiAicmRzX2liX3VwZGF0ZV9pcGFkZHIgZmFpbGVkICglZClcbiIsIGVycik7Ci0JZXJyID0gcmRzX2liX2FkZF9jb25uKHJkc19pYmRldiwgY29ubik7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaWJfYWRkX2Nvbm4gZmFpbGVkICglZClcbiIsIGVycik7CisJcmRzX2liX2FkZF9jb25uKHJkc19pYmRldiwgY29ubik7CiAKIAkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgogCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLwpAQCAtNjE2LDE4ICs2MTQsOCBAQAogCQkvKgogCQkgKiBNb3ZlIGNvbm5lY3Rpb24gYmFjayB0byB0aGUgbm9kZXYgbGlzdC4KIAkJICovCi0JCWlmIChpYy0+cmRzX2liZGV2KSB7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmljLT5yZHNfaWJkZXYtPnNwaW5sb2NrKTsKLQkJCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aWJfbm9kZSkpOwotCQkJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmaWMtPnJkc19pYmRldi0+c3BpbmxvY2spOwotCi0JCQlzcGluX2xvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKLQkJCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmaWJfbm9kZXZfY29ubnMpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKLQkJCWljLT5yZHNfaWJkZXYgPSBOVUxMOwotCQl9CisJCWlmIChpYy0+cmRzX2liZGV2KQorCQkJcmRzX2liX3JlbW92ZV9jb25uKGljLT5yZHNfaWJkZXYsIGNvbm4pOwogCiAJCWljLT5pX2NtX2lkID0gTlVMTDsKIAkJaWMtPmlfcGQgPSBOVUxMOwpAQCAtNjQ4LDcgKzYzNiwxMSBAQAogCiAJLyogQ2xlYXIgdGhlIEFDSyBzdGF0ZSAqLwogCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKLQlyZHNfaWJfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisjaWZkZWYgS0VSTkVMX0hBU19BVE9NSUM2NAorCWF0b21pYzY0X3NldCgmaWMtPmlfYWNrX25leHQsIDApOworI2Vsc2UKKwlpYy0+aV9hY2tfbmV4dCA9IDA7CisjZW5kaWYKIAlpYy0+aV9hY2tfcmVjdiA9IDA7CiAKIAkvKiBDbGVhciBmbG93IGNvbnRyb2wgc3RhdGUgKi8KQEAgLTY4MSw2ICs2NzMsOSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmljLT5pYl9ub2RlKTsKIAltdXRleF9pbml0KCZpYy0+aV9yZWN2X211dGV4KTsKKyNpZm5kZWYgS0VSTkVMX0hBU19BVE9NSUM2NAorCXNwaW5fbG9ja19pbml0KCZpYy0+aV9hY2tfbG9jayk7CisjZW5kaWYKIAogCS8qCiAJICogcmRzX2liX2Nvbm5fc2h1dGRvd24oKSB3YWl0cyBmb3IgdGhlc2UgdG8gYmUgZW1wdGllZCBzbyB0aGV5CkBAIC03MDEsMTEgKzY5NiwyNyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogRnJlZSBhIGNvbm5lY3Rpb24uIENvbm5lY3Rpb24gbXVzdCBiZSBzaHV0IGRvd24gYW5kIG5vdCBzZXQgZm9yIHJlY29ubmVjdC4KKyAqLwogdm9pZCByZHNfaWJfY29ubl9mcmVlKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gYXJnOworCXNwaW5sb2NrX3QJKmxvY2tfcHRyOworCiAJcmRzZGVidWcoImljICVwXG4iLCBpYyk7CisKKwkvKgorCSAqIENvbm4gaXMgZWl0aGVyIG9uIGEgZGV2J3MgbGlzdCBvciBvbiB0aGUgbm9kZXYgbGlzdC4KKwkgKiBBIHJhY2Ugd2l0aCBzaHV0ZG93bigpIG9yIGNvbm5lY3QoKSB3b3VsZCBjYXVzZSBwcm9ibGVtcworCSAqIChzaW5jZSByZHNfaWJkZXYgd291bGQgY2hhbmdlKSBidXQgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLgorCSAqLworCWxvY2tfcHRyID0gaWMtPnJkc19pYmRldiA/ICZpYy0+cmRzX2liZGV2LT5zcGlubG9jayA6ICZpYl9ub2Rldl9jb25uc19sb2NrOworCisJc3Bpbl9sb2NrX2lycShsb2NrX3B0cik7CiAJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKKwlzcGluX3VubG9ja19pcnEobG9ja19wdHIpOworCiAJa2ZyZWUoaWMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JkbWEuYyBiL25ldC9yZHMvaWJfcmRtYS5jCmluZGV4IDY5YTYyODkuLjgxMDMzYWYgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfcmRtYS5jCisrKyBiL25ldC9yZHMvaWJfcmRtYS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAlyZXR1cm4gcmRzX2liX2FkZF9pcGFkZHIocmRzX2liZGV2LCBpcGFkZHIpOwogfQogCi1pbnQgcmRzX2liX2FkZF9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3ZvaWQgcmRzX2liX2FkZF9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKIHsKIAlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKIApAQCAtMTQ4LDQ1ICsxNDgsNDQgQEAKIAlCVUdfT04obGlzdF9lbXB0eSgmaWJfbm9kZXZfY29ubnMpKTsKIAlCVUdfT04obGlzdF9lbXB0eSgmaWMtPmliX25vZGUpKTsKIAlsaXN0X2RlbCgmaWMtPmliX25vZGUpOwotCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CiAKIAlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJnJkc19pYmRldi0+Y29ubl9saXN0KTsKIAlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOwotCi0JaWMtPnJkc19pYmRldiA9IHJkc19pYmRldjsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnModm9pZCkKLXsKLQlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCAqX2ljOwotCUxJU1RfSEVBRCh0bXBfbGlzdCk7Ci0KLQkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCi0Jc3Bpbl9sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7Ci0JbGlzdF9zcGxpY2UoJmliX25vZGV2X2Nvbm5zLCAmdG1wX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZpYl9ub2Rldl9jb25ucyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGliX25vZGUpIHsKLQkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCi0JCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOwotCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKLQl9CisJaWMtPnJkc19pYmRldiA9IHJkc19pYmRldjsKIH0KIAotdm9pZCByZHNfaWJfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpCit2b2lkIHJkc19pYl9yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBwbGFjZSBjb25uIG9uIG5vZGV2X2Nvbm5zX2xpc3QgKi8KKwlzcGluX2xvY2soJmliX25vZGV2X2Nvbm5zX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pYl9ub2RlKSk7CisJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZpYl9ub2Rldl9jb25ucyk7CisKKwlzcGluX3VubG9jaygmaWJfbm9kZXZfY29ubnNfbG9jayk7CisKKwlpYy0+cmRzX2liZGV2ID0gTlVMTDsKK30KKwordm9pZCBfX3Jkc19pYl9kZXN0cm95X2Nvbm5zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHNwaW5sb2NrX3QgKmxpc3RfbG9jaykKIHsKIAlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCAqX2ljOwogCUxJU1RfSEVBRCh0bXBfbGlzdCk7CiAKIAkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCi0Jc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7Ci0JbGlzdF9zcGxpY2UoJnJkc19pYmRldi0+Y29ubl9saXN0LCAmdG1wX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKGxpc3RfbG9jayk7CisJbGlzdF9zcGxpY2UobGlzdCwgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRChsaXN0KTsKKwlzcGluX3VubG9ja19pcnEobGlzdF9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGliX25vZGUpIHsKIAkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JlY3YuYyBiL25ldC9yZHMvaWJfcmVjdi5jCmluZGV4IDUwNjFiNTUuLjM2ZDkzMTUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfcmVjdi5jCisrKyBiL25ldC9yZHMvaWJfcmVjdi5jCkBAIC0zOTUsMTAgKzM5NSwzNyBAQAogICogcm9vbSBmb3IgaXQgYmV5b25kIHRoZSByaW5nIHNpemUuICBTZW5kIGNvbXBsZXRpb24gbm90aWNlcyBpdHMgc3BlY2lhbAogICogd3JfaWQgYW5kIGF2b2lkcyB3b3JraW5nIHdpdGggdGhlIHJpbmcgaW4gdGhhdCBjYXNlLgogICovCisjaWZuZGVmIEtFUk5FTF9IQVNfQVRPTUlDNjQKIHN0YXRpYyB2b2lkIHJkc19pYl9zZXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCiAJCQkJaW50IGFja19yZXF1aXJlZCkKIHsKLQlyZHNfaWJfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmljLT5pX2Fja19sb2NrLCBmbGFncyk7CisJaWMtPmlfYWNrX25leHQgPSBzZXE7CisJaWYgKGFja19yZXF1aXJlZCkKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYy0+aV9hY2tfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdTY0IHJkc19pYl9nZXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgc2VxOworCisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmljLT5pX2Fja19sb2NrLCBmbGFncyk7CisJc2VxID0gaWMtPmlfYWNrX25leHQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWMtPmlfYWNrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBzZXE7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgcmRzX2liX3NldF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdTY0IHNlcSwKKwkJCQlpbnQgYWNrX3JlcXVpcmVkKQoreworCWF0b21pYzY0X3NldCgmaWMtPmlfYWNrX25leHQsIHNlcSk7CiAJaWYgKGFja19yZXF1aXJlZCkgewogCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKIAkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKQEAgLTQxMCw4ICs0MzcsMTAgQEAKIAljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CiAJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAotCXJldHVybiBpYy0+aV9hY2tfbmV4dDsKKwlyZXR1cm4gYXRvbWljNjRfcmVhZCgmaWMtPmlfYWNrX25leHQpOwogfQorI2VuZGlmCisKIAogc3RhdGljIHZvaWQgcmRzX2liX3NlbmRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHVuc2lnbmVkIGludCBhZHZfY3JlZGl0cykKIHsKQEAgLTQ2NCw2ICs0OTMsMTAgQEAKICAqICAtCWlfYWNrX25leHQsIHdoaWNoIGlzIHRoZSBsYXN0IHNlcXVlbmNlIG51bWJlciB3ZSByZWNlaXZlZAogICoKICAqIFBvdGVudGlhbGx5LCBzZW5kIHF1ZXVlIGFuZCByZWNlaXZlIHF1ZXVlIGhhbmRsZXJzIGNhbiBydW4gY29uY3VycmVudGx5LgorICogSXQgd291bGQgYmUgbmljZSB0byBub3QgaGF2ZSB0byB1c2UgYSBzcGlubG9jayB0byBzeW5jaHJvbml6ZSB0aGluZ3MsCisgKiBidXQgdGhlIG9uZSBwcm9ibGVtIHRoYXQgcnVsZXMgdGhpcyBvdXQgaXMgdGhhdCA2NGJpdCB1cGRhdGVzIGFyZQorICogbm90IGF0b21pYyBvbiBhbGwgcGxhdGZvcm1zLiBUaGluZ3Mgd291bGQgYmUgYSBsb3Qgc2ltcGxlciBpZgorICogd2UgaGFkIGF0b21pYzY0IG9yIG1heWJlIGNtcHhjaGc2NCBldmVyeXdoZXJlLgogICoKICAqIFJlY29ubmVjdGluZyBjb21wbGljYXRlcyB0aGlzIHBpY3R1cmUganVzdCBzbGlnaHRseS4gV2hlbiB3ZQogICogcmVjb25uZWN0LCB3ZSBtYXkgYmUgc2VlaW5nIGR1cGxpY2F0ZSBwYWNrZXRzLiBUaGUgcGVlcgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pdy5jIGIvbmV0L3Jkcy9pdy5jCmluZGV4IDFiNTY5MDUuLmI3MzJlZmIgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaXcuYworKysgYi9uZXQvcmRzL2l3LmMKQEAgLTUxLDYgKzUxLDcgQEAKIAogc3RydWN0IGxpc3RfaGVhZCByZHNfaXdfZGV2aWNlczsKIAorLyogTk9URTogaWYgYWxzbyBncmFiYmluZyBpd2RldiBsb2NrLCBncmFiIHRoaXMgZmlyc3QgKi8KIERFRklORV9TUElOTE9DSyhpd19ub2Rldl9jb25uc19sb2NrKTsKIExJU1RfSEVBRChpd19ub2Rldl9jb25ucyk7CiAKQEAgLTE0NSw3ICsxNDYsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOwogCi0JcmRzX2l3X3JlbW92ZV9jb25ucyhyZHNfaXdkZXYpOworCXJkc19pd19kZXN0cm95X2Nvbm5zKHJkc19pd2Rldik7CiAKIAlpZiAocmRzX2l3ZGV2LT5tcl9wb29sKQogCQlyZHNfaXdfZGVzdHJveV9tcl9wb29sKHJkc19pd2Rldi0+bXJfcG9vbCk7CkBAIC0yNTgsNyArMjU5LDcgQEAKIHZvaWQgcmRzX2l3X2V4aXQodm9pZCkKIHsKIAlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSVdBUlBfQ09OTkVDVElPTlMsIHJkc19pd19pY19pbmZvKTsKLQlyZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKCk7CisJcmRzX2l3X2Rlc3Ryb3lfbm9kZXZfY29ubnMoKTsKIAlpYl91bnJlZ2lzdGVyX2NsaWVudCgmcmRzX2l3X2NsaWVudCk7CiAJcmRzX2l3X3N5c2N0bF9leGl0KCk7CiAJcmRzX2l3X3JlY3ZfZXhpdCgpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pdy5oIGIvbmV0L3Jkcy9pdy5oCmluZGV4IDBkZGRhMzQuLmI0ZmIyNzIgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaXcuaAorKysgYi9uZXQvcmRzL2l3LmgKQEAgLTEzMSw3ICsxMzEsMTIgQEAKIAogCS8qIHNlbmRpbmcgYWNrcyAqLwogCXVuc2lnbmVkIGxvbmcJCWlfYWNrX2ZsYWdzOworI2lmZGVmIEtFUk5FTF9IQVNfQVRPTUlDNjQKKwlhdG9taWM2NF90CQlpX2Fja19uZXh0OwkvKiBuZXh0IEFDSyB0byBzZW5kICovCisjZWxzZQorCXNwaW5sb2NrX3QJCWlfYWNrX2xvY2s7CS8qIHByb3RlY3QgaV9hY2tfbmV4dCAqLwogCXU2NAkJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKyNlbmRpZgogCXN0cnVjdCByZHNfaGVhZGVyCSppX2FjazsKIAlzdHJ1Y3QgaWJfc2VuZF93cglpX2Fja193cjsKIAlzdHJ1Y3QgaWJfc2dlCQlpX2Fja19zZ2U7CkBAIC0yOTQsOSArMjk5LDE3IEBACiAKIC8qIGliX3JkbWEuYyAqLwogaW50IHJkc19pd191cGRhdGVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKLWludCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKLXZvaWQgcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKTsKLXZvaWQgcmRzX2l3X3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KTsKK3ZvaWQgcmRzX2l3X2FkZF9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pd19yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCBfX3Jkc19pd19kZXN0cm95X2Nvbm5zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHNwaW5sb2NrX3QgKmxpc3RfbG9jayk7CitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X2Rlc3Ryb3lfbm9kZXZfY29ubnModm9pZCkKK3sKKwlfX3Jkc19pd19kZXN0cm95X2Nvbm5zKCZpd19ub2Rldl9jb25ucywgJml3X25vZGV2X2Nvbm5zX2xvY2spOworfQorc3RhdGljIGlubGluZSB2b2lkIHJkc19pd19kZXN0cm95X2Nvbm5zKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit7CisJX19yZHNfaXdfZGVzdHJveV9jb25ucygmcmRzX2l3ZGV2LT5jb25uX2xpc3QsICZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKK30KIHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcmRzX2l3X2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaXdfZGV2aWNlICopOwogdm9pZCByZHNfaXdfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pOwogdm9pZCByZHNfaXdfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqKTsKQEAgLTM4MywxMyArMzk2LDQgQEAKIAlyZXR1cm4gJnNnZVsxXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJkc19pd19zZXRfNjRiaXQodTY0ICpwdHIsIHU2NCB2YWwpCi17Ci0jaWYgQklUU19QRVJfTE9ORyA9PSA2NAotCSpwdHIgPSB2YWw7Ci0jZWxzZQotCXNldF82NGJpdChwdHIsIHZhbCk7Ci0jZW5kaWYKLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X2NtLmMgYi9uZXQvcmRzL2l3X2NtLmMKaW5kZXggNTdlY2IzZC4uYTQxNmIwZCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19jbS5jCisrKyBiL25ldC9yZHMvaXdfY20uYwpAQCAtODYsOSArODYsNyBAQAogCWVyciA9IHJkc19pd191cGRhdGVfY21faWQocmRzX2l3ZGV2LCBpYy0+aV9jbV9pZCk7CiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaXdfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKLQllcnIgPSByZHNfaXdfYWRkX2Nvbm4ocmRzX2l3ZGV2LCBjb25uKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgInJkc19pd19hZGRfY29ubiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwlyZHNfaXdfYWRkX2Nvbm4ocmRzX2l3ZGV2LCBjb25uKTsKIAogCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCiAJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCkBAIC02MzcsMTkgKzYzNSw4IEBACiAJCSAqIAlNb3ZlIGNvbm5lY3Rpb24gYmFjayB0byB0aGUgbm9kZXYgbGlzdC4KIAkJICogCVJlbW92ZSBjbV9pZCBmcm9tIHRoZSBkZXZpY2UgY21faWQgbGlzdC4KIAkJICovCi0JCWlmIChpYy0+cmRzX2l3ZGV2KSB7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmljLT5yZHNfaXdkZXYtPnNwaW5sb2NrKTsKLQkJCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aXdfbm9kZSkpOwotCQkJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmaWMtPnJkc19pd2Rldi0+c3BpbmxvY2spOwotCi0JCQlzcGluX2xvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKLQkJCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmaXdfbm9kZXZfY29ubnMpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKLQkJCXJkc19pd19yZW1vdmVfY21faWQoaWMtPnJkc19pd2RldiwgaWMtPmlfY21faWQpOwotCQkJaWMtPnJkc19pd2RldiA9IE5VTEw7Ci0JCX0KKwkJaWYgKGljLT5yZHNfaXdkZXYpCisJCQlyZHNfaXdfcmVtb3ZlX2Nvbm4oaWMtPnJkc19pd2RldiwgY29ubik7CiAKIAkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKIApAQCAtNjcyLDcgKzY1OSwxMSBAQAogCiAJLyogQ2xlYXIgdGhlIEFDSyBzdGF0ZSAqLwogCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKLQlyZHNfaXdfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisjaWZkZWYgS0VSTkVMX0hBU19BVE9NSUM2NAorCWF0b21pYzY0X3NldCgmaWMtPmlfYWNrX25leHQsIDApOworI2Vsc2UKKwlpYy0+aV9hY2tfbmV4dCA9IDA7CisjZW5kaWYKIAlpYy0+aV9hY2tfcmVjdiA9IDA7CiAKIAkvKiBDbGVhciBmbG93IGNvbnRyb2wgc3RhdGUgKi8KQEAgLTcwNiw2ICs2OTcsOSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmljLT5pd19ub2RlKTsKIAltdXRleF9pbml0KCZpYy0+aV9yZWN2X211dGV4KTsKKyNpZm5kZWYgS0VSTkVMX0hBU19BVE9NSUM2NAorCXNwaW5fbG9ja19pbml0KCZpYy0+aV9hY2tfbG9jayk7CisjZW5kaWYKIAogCS8qCiAJICogcmRzX2l3X2Nvbm5fc2h1dGRvd24oKSB3YWl0cyBmb3IgdGhlc2UgdG8gYmUgZW1wdGllZCBzbyB0aGV5CkBAIC03MjYsMTEgKzcyMCwyNyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogRnJlZSBhIGNvbm5lY3Rpb24uIENvbm5lY3Rpb24gbXVzdCBiZSBzaHV0IGRvd24gYW5kIG5vdCBzZXQgZm9yIHJlY29ubmVjdC4KKyAqLwogdm9pZCByZHNfaXdfY29ubl9mcmVlKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gYXJnOworCXNwaW5sb2NrX3QJKmxvY2tfcHRyOworCiAJcmRzZGVidWcoImljICVwXG4iLCBpYyk7CisKKwkvKgorCSAqIENvbm4gaXMgZWl0aGVyIG9uIGEgZGV2J3MgbGlzdCBvciBvbiB0aGUgbm9kZXYgbGlzdC4KKwkgKiBBIHJhY2Ugd2l0aCBzaHV0ZG93bigpIG9yIGNvbm5lY3QoKSB3b3VsZCBjYXVzZSBwcm9ibGVtcworCSAqIChzaW5jZSByZHNfaXdkZXYgd291bGQgY2hhbmdlKSBidXQgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLgorCSAqLworCWxvY2tfcHRyID0gaWMtPnJkc19pd2RldiA/ICZpYy0+cmRzX2l3ZGV2LT5zcGlubG9jayA6ICZpd19ub2Rldl9jb25uc19sb2NrOworCisJc3Bpbl9sb2NrX2lycShsb2NrX3B0cik7CiAJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwlzcGluX3VubG9ja19pcnEobG9ja19wdHIpOworCiAJa2ZyZWUoaWMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JkbWEuYyBiL25ldC9yZHMvaXdfcmRtYS5jCmluZGV4IDFjMDJhOGYuLmRjZGIzN2QgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaXdfcmRtYS5jCisrKyBiL25ldC9yZHMvaXdfcmRtYS5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAlyZXR1cm4gcmRzX2l3X2FkZF9jbV9pZChyZHNfaXdkZXYsIGNtX2lkKTsKIH0KIAotaW50IHJkc19pd19hZGRfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit2b2lkIHJkc19pd19hZGRfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CiAJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CiAKQEAgLTIwNSw0NSArMjA1LDQ1IEBACiAJQlVHX09OKGxpc3RfZW1wdHkoJml3X25vZGV2X2Nvbm5zKSk7CiAJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pd19ub2RlKSk7CiAJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKLQlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOwogCiAJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmaWMtPml3X25vZGUsICZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKLQotCWljLT5yZHNfaXdkZXYgPSByZHNfaXdkZXY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpCi17Ci0Jc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgKl9pYzsKLQlMSVNUX0hFQUQodG1wX2xpc3QpOwotCi0JLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLwotCXNwaW5fbG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOwotCWxpc3Rfc3BsaWNlKCZpd19ub2Rldl9jb25ucywgJnRtcF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmaXdfbm9kZXZfY29ubnMpOwogCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpd19ub2RlKSB7Ci0JCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQotCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKLQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7Ci0JfQorCWljLT5yZHNfaXdkZXYgPSByZHNfaXdkZXY7CiB9CiAKLXZvaWQgcmRzX2l3X3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KQordm9pZCByZHNfaXdfcmVtb3ZlX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogcGxhY2UgY29ubiBvbiBub2Rldl9jb25uc19saXN0ICovCisJc3Bpbl9sb2NrKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aXdfbm9kZSkpOworCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmaXdfbm9kZXZfY29ubnMpOworCisJc3Bpbl91bmxvY2soJml3X25vZGV2X2Nvbm5zX2xvY2spOworCisJcmRzX2l3X3JlbW92ZV9jbV9pZChpYy0+cmRzX2l3ZGV2LCBpYy0+aV9jbV9pZCk7CisJaWMtPnJkc19pd2RldiA9IE5VTEw7Cit9CisKK3ZvaWQgX19yZHNfaXdfZGVzdHJveV9jb25ucyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzcGlubG9ja190ICpsaXN0X2xvY2spCiB7CiAJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgKl9pYzsKIAlMSVNUX0hFQUQodG1wX2xpc3QpOwogCiAJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLwotCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOwotCWxpc3Rfc3BsaWNlKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCwgJnRtcF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJc3Bpbl9sb2NrX2lycShsaXN0X2xvY2spOworCWxpc3Rfc3BsaWNlKGxpc3QsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQobGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKGxpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpd19ub2RlKSB7CiAJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yZWN2LmMgYi9uZXQvcmRzL2l3X3JlY3YuYwppbmRleCBhMTkzMWYwLi5mZGU0NzBmIDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3X3JlY3YuYworKysgYi9uZXQvcmRzL2l3X3JlY3YuYwpAQCAtMzk1LDEwICszOTUsMzcgQEAKICAqIHJvb20gZm9yIGl0IGJleW9uZCB0aGUgcmluZyBzaXplLiAgU2VuZCBjb21wbGV0aW9uIG5vdGljZXMgaXRzIHNwZWNpYWwKICAqIHdyX2lkIGFuZCBhdm9pZHMgd29ya2luZyB3aXRoIHRoZSByaW5nIGluIHRoYXQgY2FzZS4KICAqLworI2lmbmRlZiBLRVJORUxfSEFTX0FUT01JQzY0CiBzdGF0aWMgdm9pZCByZHNfaXdfc2V0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCB1NjQgc2VxLAogCQkJCWludCBhY2tfcmVxdWlyZWQpCiB7Ci0JcmRzX2l3X3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIHNlcSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpYy0+aV9hY2tfbG9jaywgZmxhZ3MpOworCWljLT5pX2Fja19uZXh0ID0gc2VxOworCWlmIChhY2tfcmVxdWlyZWQpCisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWMtPmlfYWNrX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHU2NCByZHNfaXdfZ2V0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IHNlcTsKKworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpYy0+aV9hY2tfbG9jaywgZmxhZ3MpOworCXNlcSA9IGljLT5pX2Fja19uZXh0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljLT5pX2Fja19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc2VxOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCisJCQkJaW50IGFja19yZXF1aXJlZCkKK3sKKwlhdG9taWM2NF9zZXQoJmljLT5pX2Fja19uZXh0LCBzZXEpOwogCWlmIChhY2tfcmVxdWlyZWQpIHsKIAkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CiAJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CkBAIC00MTAsOCArNDM3LDEwIEBACiAJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOwogCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAKLQlyZXR1cm4gaWMtPmlfYWNrX25leHQ7CisJcmV0dXJuIGF0b21pYzY0X3JlYWQoJmljLT5pX2Fja19uZXh0KTsKIH0KKyNlbmRpZgorCiAKIHN0YXRpYyB2b2lkIHJkc19pd19zZW5kX2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCB1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHMpCiB7CkBAIC00NjQsNiArNDkzLDEwIEBACiAgKiAgLQlpX2Fja19uZXh0LCB3aGljaCBpcyB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgd2UgcmVjZWl2ZWQKICAqCiAgKiBQb3RlbnRpYWxseSwgc2VuZCBxdWV1ZSBhbmQgcmVjZWl2ZSBxdWV1ZSBoYW5kbGVycyBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKyAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gbm90IGhhdmUgdG8gdXNlIGEgc3BpbmxvY2sgdG8gc3luY2hyb25pemUgdGhpbmdzLAorICogYnV0IHRoZSBvbmUgcHJvYmxlbSB0aGF0IHJ1bGVzIHRoaXMgb3V0IGlzIHRoYXQgNjRiaXQgdXBkYXRlcyBhcmUKKyAqIG5vdCBhdG9taWMgb24gYWxsIHBsYXRmb3Jtcy4gVGhpbmdzIHdvdWxkIGJlIGEgbG90IHNpbXBsZXIgaWYKKyAqIHdlIGhhZCBhdG9taWM2NCBvciBtYXliZSBjbXB4Y2hnNjQgZXZlcnl3aGVyZS4KICAqCiAgKiBSZWNvbm5lY3RpbmcgY29tcGxpY2F0ZXMgdGhpcyBwaWN0dXJlIGp1c3Qgc2xpZ2h0bHkuIFdoZW4gd2UKICAqIHJlY29ubmVjdCwgd2UgbWF5IGJlIHNlZWluZyBkdXBsaWNhdGUgcGFja2V0cy4gVGhlIHBlZXIKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oCmluZGV4IDA2MDQwMDcuLjYxOWYwYTMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRzLmgKKysrIGIvbmV0L3Jkcy9yZHMuaApAQCAtMjgsNiArMjgsMTAgQEAKICAqLwogI2RlZmluZSBSRFNfUE9SVAkxODYzNAogCisjaWZkZWYgQVRPTUlDNjRfSU5JVAorI2RlZmluZSBLRVJORUxfSEFTX0FUT01JQzY0CisjZW5kaWYKKwogI2lmZGVmIERFQlVHCiAjZGVmaW5lIHJkc2RlYnVnKGZtdCwgYXJncy4uLikgcHJfZGVidWcoIiVzKCk6ICIgZm10LCBfX2Z1bmNfXyAsICMjYXJncykKICNlbHNlCmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCmluZGV4IDFiMzczNjQuLjEwNGZlMDMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCisrKyBiL25ldC9yZHMvc2VuZC5jCkBAIC02MTUsNyArNjE1LDcgQEAKIHsKIAlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOwogCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZsYWdzMjsKIAlMSVNUX0hFQUQobGlzdCk7CiAJaW50IHdha2UgPSAwOwogCkBAIC02NTEsOSArNjUxLDkgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtLCAmbGlzdCwgbV9zb2NrX2l0ZW0pIHsKIAkJLyogV2UgZG8gdGhpcyBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBsb29wIGFib3ZlLCBzbyB0aGF0CiAJCSAqIHdlIGRvbid0IGhhdmUgdG8gbmVzdCBtX3JzX2xvY2sgdW5kZXIgcnMtPnJzX2xvY2sgKi8KLQkJc3Bpbl9sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJtLT5tX3JzX2xvY2ssIGZsYWdzMik7CiAJCXJtLT5tX3JzID0gTlVMTDsKLQkJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybS0+bV9yc19sb2NrLCBmbGFnczIpOwogCiAJCS8qCiAJCSAqIElmIHdlIHNlZSB0aGlzIGZsYWcgY2xlYXJlZCB0aGVuIHdlJ3JlICpzdXJlKiB0aGF0IHNvbWVvbmUKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvS2NvbmZpZyBiL25ldC9zdW5ycGMvS2NvbmZpZwppbmRleCBhZmQ5MWM3Li40NDNjMTYxIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL0tjb25maWcKKysrIGIvbmV0L3N1bnJwYy9LY29uZmlnCkBAIC00Nyw3ICs0Nyw3IEBACiAJc2VsZWN0IENSWVBUT19DQkMKIAloZWxwCiAJICBDaG9vc2UgWSBoZXJlIHRvIGVuYWJsZSBTZWN1cmUgUlBDIHVzaW5nIHRoZSBTUEtNMyBwdWJsaWMga2V5Ci0JICBHU1MtQVBJIG1lY2hhbnNpbSAoUkZDIDIwMjUpLgorCSAgR1NTLUFQSSBtZWNoYW5pc20gKFJGQyAyMDI1KS4KIAogCSAgU2VjdXJlIFJQQyBjYWxscyB3aXRoIFNQS00zIHJlcXVpcmUgYW4gYXV4aWxpYXJ5IHVzZXJzcGFjZQogCSAgZGFlbW9uIHdoaWNoIG1heSBiZSBmb3VuZCBpbiB0aGUgTGludXggbmZzLXV0aWxzIHBhY2thZ2UKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IDlmMmYyNDEuLjliNDlhNmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKKysrIGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMzE3LDggKzMxNyw3IEBACiAJfQogCWNhc2UgU1ZDX1BPT0xfUEVSTk9ERToKIAl7Ci0JCW5vZGVfdG9fY3B1bWFza19wdHIobm9kZWNwdW1hc2ssIG5vZGUpOwotCQlzZXRfY3B1c19hbGxvd2VkX3B0cih0YXNrLCBub2RlY3B1bWFzayk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRhc2ssIGNwdW1hc2tfb2Zfbm9kZShub2RlKSk7CiAJCWJyZWFrOwogCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggYmFhYzkxMC4uOWRjYzZlNyAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtODMyLDcgKzgzMiw3IEBACiAJCSAqIEFsbCByaWdodCwgbGV0J3MgY3JlYXRlIGl0LgogCQkgKi8KIAkJbW9kZSA9IFNfSUZTT0NLIHwKLQkJICAgICAgIChTT0NLX0lOT0RFKHNvY2spLT5pX21vZGUgJiB+Y3VycmVudC0+ZnMtPnVtYXNrKTsKKwkJICAgICAgIChTT0NLX0lOT0RFKHNvY2spLT5pX21vZGUgJiB+Y3VycmVudF91bWFzaygpKTsKIAkJZXJyID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfbWtub2RfZHB1dDsKZGlmZiAtLWdpdCBhL25ldC93aW1heC9LY29uZmlnIGIvbmV0L3dpbWF4L0tjb25maWcKaW5kZXggMTg0OTVjZC4uMWI0Njc0NyAxMDA2NDQKLS0tIGEvbmV0L3dpbWF4L0tjb25maWcKKysrIGIvbmV0L3dpbWF4L0tjb25maWcKQEAgLTgsNyArOCw3IEBACiAjCiAjIEFzIHdlbGwsIGVuYWJsZW1lbnQgb2YgdGhlIFJGS0lMTCBjb2RlIG1lYW5zIHdlIG5lZWQgdGhlIElOUFVUIGxheWVyCiAjIHN1cHBvcnQgdG8gaW5qZWN0IGV2ZW50cyBjb21pbmcgZnJvbSBodyByZmtpbGwgc3dpdGNoZXMuIFRoYXQKLSMgZGVwZW5kZW5jeSBjb3VsZCBiZSBraWxsZWQgaWYgaW5wdXQuaCBwcm92aWRlZCBhcHByb3BpYXRlIG1lYW5zIHRvCisjIGRlcGVuZGVuY3kgY291bGQgYmUga2lsbGVkIGlmIGlucHV0LmggcHJvdmlkZWQgYXBwcm9wcmlhdGUgbWVhbnMgdG8KICMgd29yayB3aGVuIGlucHV0IGlzIGRpc2FibGVkLgogCiBjb21tZW50ICJXaU1BWCBXaXJlbGVzcyBCcm9hZGJhbmQgc3VwcG9ydCByZXF1aXJlcyBDT05GSUdfSU5QVVQgZW5hYmxlZCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHAtc2FtcGxlcy10cmFjZS5oIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKaW5kZXggMDE3MjRlMC4uZGZmZGM0OSAxMDA2NDQKLS0tIGEvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKQEAgLTUsOSArNSw5IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiBERUNMQVJFX1RSQUNFKHN1YnN5c19ldmVudCwKLQlUUFBST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSwKLQlUUEFSR1MoaW5vZGUsIGZpbGUpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSksCisJVFBfQVJHUyhpbm9kZSwgZmlsZSkpOwogREVDTEFSRV9UUkFDRShzdWJzeXNfZXZlbnRiLAotCVRQUFJPVE8odm9pZCksCi0JVFBBUkdTKCkpOworCVRQX1BST1RPKHZvaWQpLAorCVRQX0FSR1MoKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYwppbmRleCA2OGQ1ZGMwLi45Y2Y4MGExIDEwMDY0NAotLS0gYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCkBAIC0xLDYgKzEsNiBAQAogLyogdHJhY2Vwb2ludC1zYW1wbGUuYwogICoKLSAqIEV4ZWN1dGVzIGEgdHJhY2Vwb2ludCB3aGVuIC9wcm9jL3RyYWNlcG9pbnQtZXhhbXBsZSBpcyBvcGVuZWQuCisgKiBFeGVjdXRlcyBhIHRyYWNlcG9pbnQgd2hlbiAvcHJvYy90cmFjZXBvaW50LXNhbXBsZSBpcyBvcGVuZWQuCiAgKgogICogKEMpIENvcHlyaWdodCAyMDA3IE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhPgogICoKQEAgLTE2LDcgKzE2LDcgQEAKIERFRklORV9UUkFDRShzdWJzeXNfZXZlbnQpOwogREVGSU5FX1RSQUNFKHN1YnN5c19ldmVudGIpOwogCi1zdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlbnRyeV9leGFtcGxlOworc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZW50cnlfc2FtcGxlOwogCiBzdGF0aWMgaW50IG15X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC0zMiwyNSArMzIsMjUgQEAKIAkub3BlbiA9IG15X29wZW4sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBleGFtcGxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNhbXBsZV9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fQUxFUlQgImV4YW1wbGUgaW5pdFxuIik7Ci0JcGVudHJ5X2V4YW1wbGUgPSBwcm9jX2NyZWF0ZSgidHJhY2Vwb2ludC1leGFtcGxlIiwgMDQ0NCwgTlVMTCwKKwlwcmludGsoS0VSTl9BTEVSVCAic2FtcGxlIGluaXRcbiIpOworCXBlbnRyeV9zYW1wbGUgPSBwcm9jX2NyZWF0ZSgidHJhY2Vwb2ludC1zYW1wbGUiLCAwNDQ0LCBOVUxMLAogCQkmbWFya19vcHMpOwotCWlmICghcGVudHJ5X2V4YW1wbGUpCisJaWYgKCFwZW50cnlfc2FtcGxlKQogCQlyZXR1cm4gLUVQRVJNOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhhbXBsZV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc2FtcGxlX2V4aXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9BTEVSVCAiZXhhbXBsZSBleGl0XG4iKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgidHJhY2Vwb2ludC1leGFtcGxlIiwgTlVMTCk7CisJcHJpbnRrKEtFUk5fQUxFUlQgInNhbXBsZSBleGl0XG4iKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgidHJhY2Vwb2ludC1zYW1wbGUiLCBOVUxMKTsKIH0KIAotbW9kdWxlX2luaXQoZXhhbXBsZV9pbml0KQotbW9kdWxlX2V4aXQoZXhhbXBsZV9leGl0KQorbW9kdWxlX2luaXQoc2FtcGxlX2luaXQpCittb2R1bGVfZXhpdChzYW1wbGVfZXhpdCkKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTWF0aGlldSBEZXNub3llcnMiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiVHJhY2Vwb2ludCBleGFtcGxlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRyYWNlcG9pbnQgc2FtcGxlIik7CmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAppbmRleCBjN2RlOGIzLi4zOWE5NjQyIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKQEAgLTExMiwxMyArMTEyLDEzIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIERlZmF1bHQgaXMgYnVpbHQtaW4sIHVubGVzcyB3ZSBrbm93IG90aGVyd2lzZQotbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfS0VSTkVMKQorbW9ka2Vybl9jZmxhZ3MgPSAkKGlmICQocGFydC1vZi1tb2R1bGUpLCAkKENGTEFHU19NT0RVTEUpLCAkKENGTEFHU19LRVJORUwpKQogcXVpZXRfbW9kdGFnIDo9ICQoZW1wdHkpICAgJChlbXB0eSkKIAotJChyZWFsLW9ianMtbSkgICAgICAgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0uaSkgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0ucykgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0ubHN0KTogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQorJChyZWFsLW9ianMtbSkgICAgICAgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0uaSkgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0ucykgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0ubHN0KTogcGFydC1vZi1tb2R1bGUgOj0geQogCiAkKHJlYWwtb2Jqcy1tKSAgICAgICAgOiBxdWlldF9tb2R0YWcgOj0gW01dCiAkKHJlYWwtb2Jqcy1tOi5vPS5pKSAgOiBxdWlldF9tb2R0YWcgOj0gW01dCkBAIC0yMDUsNyArMjA1LDggQEAKIGlmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAogY21kX3JlY29yZF9tY291bnQgPSBwZXJsICQoc3JjdHJlZSkvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgIiQoQVJDSCkiIFwKIAkiJChpZiAkKENPTkZJR182NEJJVCksNjQsMzIpIiBcCi0JIiQoT0JKRFVNUCkiICIkKE9CSkNPUFkpIiAiJChDQykiICIkKExEKSIgIiQoTk0pIiAiJChSTSkiICIkKE1WKSIgIiQoQCkiOworCSIkKE9CSkRVTVApIiAiJChPQkpDT1BZKSIgIiQoQ0MpIiAiJChMRCkiICIkKE5NKSIgIiQoUk0pIiAiJChNVikiIFwKKwkiJChpZiAkKHBhcnQtb2YtbW9kdWxlKSwxLDApIiAiJChAKSI7CiBlbmRpZgogCiBkZWZpbmUgcnVsZV9jY19vX2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2FsbHN5bXMuYyBiL3NjcmlwdHMva2FsbHN5bXMuYwppbmRleCBhZDI0MzRiLi42NjU0Y2JlZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rYWxsc3ltcy5jCisrKyBiL3NjcmlwdHMva2FsbHN5bXMuYwpAQCAtNTAwLDYgKzUwMCw1MSBAQAogCW9wdGltaXplX3Jlc3VsdCgpOwogfQogCisvKiBndWVzcyBmb3IgImxpbmtlciBzY3JpcHQgcHJvdmlkZSIgc3ltYm9sICovCitzdGF0aWMgaW50IG1heV9iZV9saW5rZXJfc2NyaXB0X3Byb3ZpZGVfc3ltYm9sKGNvbnN0IHN0cnVjdCBzeW1fZW50cnkgKnNlKQoreworCWNvbnN0IGNoYXIgKnN5bWJvbCA9IChjaGFyICopc2UtPnN5bSArIDE7CisJaW50IGxlbiA9IHNlLT5sZW4gLSAxOworCisJaWYgKGxlbiA8IDgpCisJCXJldHVybiAwOworCisJaWYgKHN5bWJvbFswXSAhPSAnXycgfHwgc3ltYm9sWzFdICE9ICdfJykKKwkJcmV0dXJuIDA7CisKKwkvKiBfX3N0YXJ0X1hYWFhYICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgMiwgInN0YXJ0XyIsIDYpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fc3RvcF9YWFhYWCAqLworCWlmICghbWVtY21wKHN5bWJvbCArIDIsICJzdG9wXyIsIDUpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fZW5kX1hYWFhYICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgMiwgImVuZF8iLCA0KSkKKwkJcmV0dXJuIDE7CisKKwkvKiBfX1hYWFhYX3N0YXJ0ICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgbGVuIC0gNiwgIl9zdGFydCIsIDYpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fWFhYWFhfZW5kICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgbGVuIC0gNCwgIl9lbmQiLCA0KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmVmaXhfdW5kZXJzY29yZXNfY291bnQoY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKnRhaWwgPSBzdHI7CisKKwl3aGlsZSAoKnRhaWwgIT0gJ18nKQorCQl0YWlsKys7CisKKwlyZXR1cm4gdGFpbCAtIHN0cjsKK30KKwogc3RhdGljIGludCBjb21wYXJlX3N5bWJvbHMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAljb25zdCBzdHJ1Y3Qgc3ltX2VudHJ5ICpzYTsKQEAgLTUyMSw2ICs1NjYsMTggQEAKIAlpZiAod2EgIT0gd2IpCiAJCXJldHVybiB3YSAtIHdiOwogCisJLyogc29ydCBieSAibGlua2VyIHNjcmlwdCBwcm92aWRlIiB0eXBlICovCisJd2EgPSBtYXlfYmVfbGlua2VyX3NjcmlwdF9wcm92aWRlX3N5bWJvbChzYSk7CisJd2IgPSBtYXlfYmVfbGlua2VyX3NjcmlwdF9wcm92aWRlX3N5bWJvbChzYik7CisJaWYgKHdhICE9IHdiKQorCQlyZXR1cm4gd2EgLSB3YjsKKworCS8qIHNvcnQgYnkgdGhlIG51bWJlciBvZiBwcmVmaXggdW5kZXJzY29yZXMgKi8KKwl3YSA9IHByZWZpeF91bmRlcnNjb3Jlc19jb3VudCgoY29uc3QgY2hhciAqKXNhLT5zeW0gKyAxKTsKKwl3YiA9IHByZWZpeF91bmRlcnNjb3Jlc19jb3VudCgoY29uc3QgY2hhciAqKXNiLT5zeW0gKyAxKTsKKwlpZiAod2EgIT0gd2IpCisJCXJldHVybiB3YSAtIHdiOworCiAJLyogc29ydCBieSBpbml0aWFsIG9yZGVyLCBzbyB0aGF0IG90aGVyIHN5bWJvbHMgYXJlIGxlZnQgdW5kaXN0dXJiZWQgKi8KIAlyZXR1cm4gc2EtPnN0YXJ0X3BvcyAtIHNiLT5zdGFydF9wb3M7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggN2U2MjMwMy4uOGNjNzA2MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMTYwNywxMiArMTYwNywxMiBAQAogCiAJcGFyc2VfZWxmX2ZpbmlzaCgmaW5mbyk7CiAKLQkvKiBPdXIgdHJpY2sgdG8gZ2V0IHZlcnNpb25pbmcgZm9yIHN0cnVjdF9tb2R1bGUgLSBpdCdzCisJLyogT3VyIHRyaWNrIHRvIGdldCB2ZXJzaW9uaW5nIGZvciBtb2R1bGUgc3RydWN0IGV0Yy4gLSBpdCdzCiAJICogbmV2ZXIgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBzbwogCSAqIHRoZSBhdXRvbWF0aWMgdmVyc2lvbmluZyBkb2Vzbid0IHBpY2sgaXQgdXAsIGJ1dCBpdCdzIHJlYWxseQogCSAqIGltcG9ydGFudCBhbnlob3cgKi8KIAlpZiAobW9kdmVyc2lvbnMpCi0JCW1vZC0+dW5yZXMgPSBhbGxvY19zeW1ib2woInN0cnVjdF9tb2R1bGUiLCAwLCBtb2QtPnVucmVzKTsKKwkJbW9kLT51bnJlcyA9IGFsbG9jX3N5bWJvbCgibW9kdWxlX2xheW91dCIsIDAsIG1vZC0+dW5yZXMpOwogfQogCiAjZGVmaW5lIFNaIDUwMApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCmluZGV4IDI4NTc0YWUuLmIxZmQ0OGQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKQEAgLTc1LDYgKzc1LDEwIEBACiAJYWxwaGEpCiAJCVsgLWYgIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiICIke3RtcGRpcn0vYm9vdC92bWxpbnV6LSR7S0VSTkVMUkVMRUFTRX0iCiAJCTs7CisJcGFyaXNjKikKKwkJWyAtZiAiJHtLQlVJTERfSU1BR0V9IiBdICYmIGNwIC12IC0tICIke0tCVUlMRF9JTUFHRX0iICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LSR7S0VSTkVMUkVMRUFTRX0iCisJCVsgLWYgIiR7b2JqdHJlZX0vbGlmaW1hZ2UiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vbGlmaW1hZ2UiICIke3RtcGRpcn0vYm9vdC9saWZpbWFnZS0ke0tFUk5FTFJFTEVBU0V9IgorCQk7OwogCXZheCkKIAkJWyAtZiAiJHtvYmp0cmVlfS92bWxpbnV4LlNZUyIgXSAmJiBjcCAtdiAtLSAiJHtvYmp0cmVlfS92bWxpbnV4LlNZUyIgIiR7dG1wZGlyfS9ib290L3ZtbGludXgtJHtLRVJORUxSRUxFQVNFfS5TWVMiCiAJCVsgLWYgIiR7b2JqdHJlZX0vdm1saW51eC5kc2siIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vdm1saW51eC5kc2siICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LSR7S0VSTkVMUkVMRUFTRX0uZHNrIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAppbmRleCBmZTgzMTQxLi40MDk1OTZlIDEwMDc1NQotLS0gYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbApAQCAtMTAwLDE0ICsxMDAsMTkgQEAKIAogbXkgJFYgPSAnMC4xJzsKIAotaWYgKCQjQVJHViA8IDYpIHsKLQlwcmludCAidXNhZ2U6ICRQIGFyY2ggb2JqZHVtcCBvYmpjb3B5IGNjIGxkIG5tIHJtIG12IGlucHV0ZmlsZVxuIjsKK2lmICgkI0FSR1YgPCA3KSB7CisJcHJpbnQgInVzYWdlOiAkUCBhcmNoIGJpdHMgb2JqZHVtcCBvYmpjb3B5IGNjIGxkIG5tIHJtIG12IGlzX21vZHVsZSBpbnB1dGZpbGVcbiI7CiAJcHJpbnQgInZlcnNpb246ICRWXG4iOwogCWV4aXQoMSk7CiB9CiAKIG15ICgkYXJjaCwgJGJpdHMsICRvYmpkdW1wLCAkb2JqY29weSwgJGNjLAotICAgICRsZCwgJG5tLCAkcm0sICRtdiwgJGlucHV0ZmlsZSkgPSBAQVJHVjsKKyAgICAkbGQsICRubSwgJHJtLCAkbXYsICRpc19tb2R1bGUsICRpbnB1dGZpbGUpID0gQEFSR1Y7CisKKyMgVGhpcyBmaWxlIHJlZmVycyB0byBtY291bnQgYW5kIHNob3VsZG4ndCBiZSBmdHJhY2VkLCBzbyBsZXRzJyBpZ25vcmUgaXQKK2lmICgkaW5wdXRmaWxlIGVxICJrZXJuZWwvdHJhY2UvZnRyYWNlLm8iKSB7CisgICAgZXhpdCgwKTsKK30KIAogIyBBY2NlcHRhYmxlIHNlY3Rpb25zIHRvIHJlY29yZC4KIG15ICV0ZXh0X3NlY3Rpb25zID0gKApAQCAtMjAxLDYgKzIwNiwxMyBAQAogICAgICRhbGlnbm1lbnQgPSAyOwogICAgICRzZWN0aW9uX3R5cGUgPSAnJXByb2diaXRzJzsKIAorfSBlbHNpZiAoJGFyY2ggZXEgImlhNjQiKSB7CisgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOi4qXFxzX21jb3VudFwkIjsKKyAgICAkdHlwZSA9ICJkYXRhOCI7CisKKyAgICBpZiAoJGlzX21vZHVsZSBlcSAiMCIpIHsKKyAgICAgICAgJGNjIC49ICIgLW1jb25zdGFudC1ncCI7CisgICAgfQogfSBlbHNlIHsKICAgICBkaWUgIkFyY2ggJGFyY2ggaXMgbm90IHN1cHBvcnRlZCB3aXRoIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRCI7CiB9CkBAIC0yNjMsNyArMjc1LDYgQEAKIAkiXHREaXNhYmxpbmcgbG9jYWwgZnVuY3Rpb24gcmVmZXJlbmNlcy5cbiI7CiB9CiAKLQogIwogIyBTdGVwIDE6IGZpbmQgYWxsIHRoZSBsb2NhbCAoc3RhdGljIGZ1bmN0aW9ucykgYW5kIHdlYWsgc3ltYm9scy4KICMgICAgICAgICd0JyBpcyBsb2NhbCwgJ3cvVycgaXMgd2VhayAod2UgbmV2ZXIgdXNlIGEgd2VhayBmdW5jdGlvbikKQEAgLTMzMSwxMyArMzQyLDE2IEBACiAjCiAjIFN0ZXAgMjogZmluZCB0aGUgc2VjdGlvbnMgYW5kIG1jb3VudCBjYWxsIHNpdGVzCiAjCi1vcGVuKElOLCAiJG9iamR1bXAgLWRyICRpbnB1dGZpbGV8IikgfHwgZGllICJlcnJvciBydW5uaW5nICRvYmpkdW1wIjsKK29wZW4oSU4sICIkb2JqZHVtcCAtaGRyICRpbnB1dGZpbGV8IikgfHwgZGllICJlcnJvciBydW5uaW5nICRvYmpkdW1wIjsKIAogbXkgJHRleHQ7CiAKK215ICRyZWFkX2hlYWRlcnMgPSAxOworCiB3aGlsZSAoPElOPikgewogICAgICMgaXMgaXQgYSBzZWN0aW9uPwogICAgIGlmICgvJHNlY3Rpb25fcmVnZXgvKSB7CisJJHJlYWRfaGVhZGVycyA9IDA7CiAKIAkjIE9ubHkgcmVjb3JkIHRleHQgc2VjdGlvbnMgdGhhdCB3ZSBrbm93IGFyZSBzYWZlCiAJaWYgKGRlZmluZWQoJHRleHRfc2VjdGlvbnN7JDF9KSkgewpAQCAtMzcxLDYgKzM4NSwxOSBAQAogCQkkcmVmX2Z1bmMgPSAkdGV4dDsKIAkgICAgfQogCX0KKyAgICB9IGVsc2lmICgkcmVhZF9oZWFkZXJzICYmIC8kbWNvdW50X3NlY3Rpb24vKSB7CisJIworCSMgU29tZWhvdyB0aGUgbWFrZSBwcm9jZXNzIGNhbiBleGVjdXRlIHRoaXMgc2NyaXB0IG9uIGFuCisJIyBvYmplY3QgdHdpY2UuIElmIGl0IGRvZXMsIHdlIHdvdWxkIGR1cGxpY2F0ZSB0aGUgbWNvdW50CisJIyBzZWN0aW9uIGFuZCBpdCB3aWxsIGNhdXNlIHRoZSBmdW5jdGlvbiB0cmFjZXIgc2VsZiB0ZXN0CisJIyB0byBmYWlsLiBDaGVjayBpZiB0aGUgbWNvdW50IHNlY3Rpb24gZXhpc3RzLCBhbmQgaWYgaXQgZG9lcywKKwkjIHdhcm4gYW5kIGV4aXQuCisJIworCXByaW50IFNUREVSUiAiRVJST1I6ICRtY291bnRfc2VjdGlvbiBhbHJlYWR5IGluICRpbnB1dGZpbGVcbiIgLgorCSAgICAiXHRUaGlzIG1heSBiZSBhbiBpbmRpY2F0aW9uIHRoYXQgeW91ciBidWlsZCBpcyBjb3JydXB0ZWQuXG4iIC4KKwkgICAgIlx0RGVsZXRlICRpbnB1dGZpbGUgYW5kIHRyeSBhZ2Fpbi4gSWYgdGhlIHNhbWUgb2JqZWN0IGZpbGVcbiIgLgorCSAgICAiXHRzdGlsbCBjYXVzZXMgYW4gaXNzdWUsIHRoZW4gZGlzYWJsZSBDT05GSUdfRFlOQU1JQ19GVFJBQ0UuXG4iOworCWV4aXQoLTEpOwogICAgIH0KIAogICAgICMgaXMgdGhpcyBhIGNhbGwgc2l0ZSB0byBtY291bnQ/IElmIHNvLCByZWNvcmQgaXQgdG8gcHJpbnQgbGF0ZXIKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYyBiL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYwppbmRleCAzYWFjZDBmLi41ZmRhN2RmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKKysrIGIvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIEFDQ19NS05PRCAxCiAjZGVmaW5lIEFDQ19SRUFEICAyCkBAIC0yMSw5ICsyMiwxMSBAQAogI2RlZmluZSBERVZfQ0hBUiAgMgogI2RlZmluZSBERVZfQUxMICAgNCAgLyogdGhpcyByZXByZXNlbnRzIGFsbCBkZXZpY2VzICovCiAKK3N0YXRpYyBERUZJTkVfTVVURVgoZGV2Y2dyb3VwX211dGV4KTsKKwogLyoKICAqIHdoaXRlbGlzdCBsb2NraW5nIHJ1bGVzOgotICogaG9sZCBjZ3JvdXBfbG9jaygpIGZvciB1cGRhdGUvcmVhZC4KKyAqIGhvbGQgZGV2Y2dyb3VwX211dGV4IGZvciB1cGRhdGUvcmVhZC4KICAqIGhvbGQgcmN1X3JlYWRfbG9jaygpIGZvciByZWFkLgogICovCiAKQEAgLTY3LDcgKzcwLDcgQEAKIH0KIAogLyoKLSAqIGNhbGxlZCB1bmRlciBjZ3JvdXBfbG9jaygpCisgKiBjYWxsZWQgdW5kZXIgZGV2Y2dyb3VwX211dGV4CiAgKi8KIHN0YXRpYyBpbnQgZGV2X3doaXRlbGlzdF9jb3B5KHN0cnVjdCBsaXN0X2hlYWQgKmRlc3QsIHN0cnVjdCBsaXN0X2hlYWQgKm9yaWcpCiB7CkBAIC05Miw3ICs5NSw3IEBACiAKIC8qIFN0dXBpZCBwcm90b3R5cGUgLSBkb24ndCBib3RoZXIgY29tYmluaW5nIGV4aXN0aW5nIGVudHJpZXMgKi8KIC8qCi0gKiBjYWxsZWQgdW5kZXIgY2dyb3VwX2xvY2soKQorICogY2FsbGVkIHVuZGVyIGRldmNncm91cF9tdXRleAogICovCiBzdGF0aWMgaW50IGRldl93aGl0ZWxpc3RfYWRkKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwLAogCQkJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gpCkBAIC0xMzAsNyArMTMzLDcgQEAKIH0KIAogLyoKLSAqIGNhbGxlZCB1bmRlciBjZ3JvdXBfbG9jaygpCisgKiBjYWxsZWQgdW5kZXIgZGV2Y2dyb3VwX211dGV4CiAgKi8KIHN0YXRpYyB2b2lkIGRldl93aGl0ZWxpc3Rfcm0oc3RydWN0IGRldl9jZ3JvdXAgKmRldl9jZ3JvdXAsCiAJCQlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICp3aCkKQEAgLTE4NSw4ICsxODgsMTAgQEAKIAkJbGlzdF9hZGQoJndoLT5saXN0LCAmZGV2X2Nncm91cC0+d2hpdGVsaXN0KTsKIAl9IGVsc2UgewogCQlwYXJlbnRfZGV2X2Nncm91cCA9IGNncm91cF90b19kZXZjZ3JvdXAocGFyZW50X2Nncm91cCk7CisJCW11dGV4X2xvY2soJmRldmNncm91cF9tdXRleCk7CiAJCXJldCA9IGRldl93aGl0ZWxpc3RfY29weSgmZGV2X2Nncm91cC0+d2hpdGVsaXN0LAogCQkJCSZwYXJlbnRfZGV2X2Nncm91cC0+d2hpdGVsaXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZjZ3JvdXBfbXV0ZXgpOwogCQlpZiAocmV0KSB7CiAJCQlrZnJlZShkZXZfY2dyb3VwKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CkBAIC0yNzMsNyArMjc4LDcgQEAKICAqIGRvZXMgdGhlIGFjY2VzcyBncmFudGVkIHRvIGRldl9jZ3JvdXAgYyBjb250YWluIHRoZSBhY2Nlc3MKICAqIHJlcXVlc3RlZCBpbiB3aGl0ZWxpc3QgaXRlbSByZWZ3aC4KICAqIHJldHVybiAxIGlmIHllcywgMCBpZiBuby4KLSAqIGNhbGwgd2l0aCBjLT5sb2NrIGhlbGQKKyAqIGNhbGwgd2l0aCBkZXZjZ3JvdXBfbXV0ZXggaGVsZAogICovCiBzdGF0aWMgaW50IG1heV9hY2Nlc3Nfd2hpdGVsaXN0KHN0cnVjdCBkZXZfY2dyb3VwICpjLAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICpyZWZ3aCkKQEAgLTQyNiwxMSArNDMxLDExIEBACiAJCQkJICBjb25zdCBjaGFyICpidWZmZXIpCiB7CiAJaW50IHJldHZhbDsKLQlpZiAoIWNncm91cF9sb2NrX2xpdmVfZ3JvdXAoY2dycCkpCi0JCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2Y2dyb3VwX211dGV4KTsKIAlyZXR2YWwgPSBkZXZjZ3JvdXBfdXBkYXRlX2FjY2VzcyhjZ3JvdXBfdG9fZGV2Y2dyb3VwKGNncnApLAogCQkJCQkgY2Z0LT5wcml2YXRlLCBidWZmZXIpOwotCWNncm91cF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJmRldmNncm91cF9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMjA2ZTUzOC4uNTI4NDI1NSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYworKysgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC00NDUsNiArNDQ1LDcgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7CiAKIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCkBAIC00NzUsNiArNDc2LDcgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpOwogCiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKaW5kZXggZDQ3ZjE2Yi4uM2JiZTAxYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgInJlYWxwYXRoLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wc3MuYyBiL3NvdW5kL29zcy9wc3MuYwppbmRleCAxNjUxN2E1Li44M2Y1ZWUyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcHNzLmMKKysrIGIvc291bmQvb3NzL3Bzcy5jCkBAIC00Niw3ICs0Niw3IEBACiAgKiAgICAgICAgICBsb2FkIHRoZSBkcml2ZXIgYXMgaXQgZGlkIGluIHByZXZpb3VzIHZlcnNpb25zLgogICogMDQtMDctMTk5OTogQW50aG9ueSBCYXJiYWNoYW4gPGJhcmJjb2RlQHhtZW4uY2lzLmZvcmRoYW0uZWR1PgogICogICAgICAgICAgQWRkZWQgbW9kdWxlIHBhcmFtZXRlciBwc3NfZmlybXdhcmUgdG8gYWxsb3cgdGhlIHVzZXIgdG8gdGVsbCAKLSAqICAgICAgICAgIHRoZSBkcml2ZXIgd2hlcmUgdGhlIGZpcmV3YXJlIGZpbGUgaXMgbG9jYXRlZC4gIFRoZSBkZWZhdWx0IAorICogICAgICAgICAgdGhlIGRyaXZlciB3aGVyZSB0aGUgZmlybXdhcmUgZmlsZSBpcyBsb2NhdGVkLiAgVGhlIGRlZmF1bHQgCiAgKiAgICAgICAgICBzZXR0aW5nIGlzIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgc2V0dGluZyAiL2V0Yy9zb3VuZC9wc3Nfc3ludGgiLgogICogMDAtMDMtMDM6IENocmlzdG9waCBIZWxsd2lnIDxjaGhlbGx3aWdAaW5mcmFkZWFkLm9yZz4KICAqCSAgICBBZGFwdGVkIHRvIG1vZHVsZV9pbml0L21vZHVsZV9leGl0CmRpZmYgLS1naXQgYS9zb3VuZC9zaC9haWNhLmMgYi9zb3VuZC9zaC9haWNhLmMKaW5kZXggZjU1MTIzMy4uNTgzYTM2OSAxMDA2NDQKLS0tIGEvc291bmQvc2gvYWljYS5jCisrKyBiL3NvdW5kL3NoL2FpY2EuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJhaWNhX2Zpcm13YXJlLmJpbiIsICZwZC0+ZGV2KTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKLQkvKiB3cml0ZSBmaXJ3YXJlIGludG8gbWVtb3J5ICovCisJLyogd3JpdGUgZmlybXdhcmUgaW50byBtZW1vcnkgKi8KIAlzcHVfZGlzYWJsZSgpOwogCXNwdV9tZW1sb2FkKDAsIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CiAJc3B1X2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcgYi9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZwppbmRleCAwYTJmOGY5Li44MTE1OTZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNDIsNyArNDIsNyBAQAogCSAgWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgogCiAJICBOb3RlOgotCSAgQUM5NyBjb2RlY3Mgd2hpY2ggZG8gbm90IGltcGxtZW50IHRoZSBzbG90LTE2IG1vZGUgd2lsbCBub3QgZnVuY3Rpb24KKwkgIEFDOTcgY29kZWNzIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgdGhlIHNsb3QtMTYgbW9kZSB3aWxsIG5vdCBmdW5jdGlvbgogCSAgcHJvcGVybHkgd2l0aCB0aGlzIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMga25vd24gdG8gd29yayB3aXRoIHRoZQogCSAgQW5hbG9nIERldmljZXMgbGluZSBvZiBBQzk3IGNvZGVjcy4KIApkaWZmIC0tZ2l0IGEvdXNyL0tjb25maWcgYi91c3IvS2NvbmZpZwppbmRleCA1ODhjNTg4Li4xYzMwMzlmIDEwMDY0NAotLS0gYS91c3IvS2NvbmZpZworKysgYi91c3IvS2NvbmZpZwpAQCAtNzIsMTAgKzcyLDggQEAKIAkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIExaTUEgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWlmIElOSVRSQU1GU19TT1VSQ0UhPSIiCi0KIGNob2ljZQotCXByb21wdCAiQnVpbHQtaW4gaW5pdHJhbWZzIGNvbXByZXNzaW9uIG1vZGUiCisJcHJvbXB0ICJCdWlsdC1pbiBpbml0cmFtZnMgY29tcHJlc3Npb24gbW9kZSIgaWYgSU5JVFJBTUZTX1NPVVJDRSE9IiIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBkZWNpZGVzIGJ5IHdoaWNoIGFsZ29yaXRobSB0aGUgYnVpbHRpbiBpbml0cmFtZnMKIAkgIHdpbGwgYmUgY29tcHJlc3NlZC4gIFNldmVyYWwgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhcmUKQEAgLTEzNCwxNCArMTMyLDMgQEAKIAkgIHNtYWxsZXIgd2l0aCBMWk1BIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4KIAogZW5kY2hvaWNlCi0KLWVuZGlmCi0KLWlmIElOSVRSQU1GU19TT1VSQ0U9IiIKLSMgVGhlIGJ1aWx0aW4gaW5pdHJhbWZzIGlzIHNvIHNtYWxsIHNvIHdlIGRvbid0IHdhbnQgdG8gYnVnIHRoZSB1c2VyLi4uCi0KLWNvbmZpZyBJTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORQotCWJvb2wKLQlkZWZhdWx0IHkKLQotZW5kaWYKZGlmZiAtLWdpdCBhL3Vzci9NYWtlZmlsZSBiL3Vzci9NYWtlZmlsZQppbmRleCBiODQ4OTRiLi4yNDUxNDVhIDEwMDY0NAotLS0gYS91c3IvTWFrZWZpbGUKKysrIGIvdXNyL01ha2VmaWxlCkBAIC02LDkgKzYsNiBAQAogUEhPTlkgKz0ga2xpYmNkaXJzCiAKIAotIyBObyBjb21wcmVzc2lvbgotc3VmZml4XyQoQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FKSAgID0KLQogIyBHemlwLCBidXQgbm8gYnppcDIKIHN1ZmZpeF8kKENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUCkgICA9IC5negogCg==